diff --git a/.gitignore b/.gitignore index 82c501e6c418d..b3cc6e200c94d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ __init__.py .#* #*# *~ +*.pb diff --git a/Alignment/APEEstimation/plugins/ApeEstimator.cc b/Alignment/APEEstimation/plugins/ApeEstimator.cc index 6f9315f57eb24..98310396ff9f4 100644 --- a/Alignment/APEEstimation/plugins/ApeEstimator.cc +++ b/Alignment/APEEstimation/plugins/ApeEstimator.cc @@ -111,7 +111,6 @@ ///////// #include "DataFormats/GeometryVector/interface/LocalVector.h" #include "DataFormats/GeometrySurface/interface/Bounds.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include "CondFormats/DataRecord/interface/SiStripLorentzAngleRcd.h" #include "DataFormats/BeamSpot/interface/BeamSpot.h" @@ -181,6 +180,9 @@ class ApeEstimator : public edm::one::EDAnalyzer<> { // ----------member data --------------------------- const edm::ParameterSet parameterSet_; + const edm::ESGetToken magFieldToken_; + const edm::ESGetToken lorentzAngleToken_; + std::map m_tkSector_; TrackerDetectorStruct tkDetector_; SiStripClusterInfo siStripClusterInfo_; @@ -219,6 +221,8 @@ class ApeEstimator : public edm::one::EDAnalyzer<> { // ApeEstimator::ApeEstimator(const edm::ParameterSet& iConfig) : parameterSet_(iConfig), + magFieldToken_(esConsumes()), + lorentzAngleToken_(esConsumes()), siStripClusterInfo_(consumesCollector(), std::string("")), tjTagToken_( consumes(parameterSet_.getParameter("tjTkAssociationMapTag"))), @@ -1658,16 +1662,11 @@ TrackStruct::HitParameterStruct ApeEstimator::fillHitVariables(const TrajectoryM return hitParams; } - edm::ESHandle magFieldHandle; - iSetup.get().get(magFieldHandle); - - edm::ESHandle lorentzAngleHandle; - iSetup.get().get(lorentzAngleHandle); //MODIFIED BY LOIC QUERTENMONT + const MagneticField* magField = &iSetup.getData(magFieldToken_); + const SiStripLorentzAngle* lorentzAngle = &iSetup.getData(lorentzAngleToken_); const StripGeomDetUnit* stripDet = (const StripGeomDetUnit*)(&detUnit); - const MagneticField* magField(magFieldHandle.product()); LocalVector bField = (stripDet->surface()).toLocal(magField->inTesla(stripDet->surface().position())); - const SiStripLorentzAngle* lorentzAngle(lorentzAngleHandle.product()); float tanLorentzAnglePerTesla = lorentzAngle->getLorentzAngle(stripDet->geographicalId().rawId()); float dirX = -tanLorentzAnglePerTesla * bField.y(); @@ -2572,14 +2571,14 @@ bool ApeEstimator::isHit2D(const TrackingRecHit& hit) const { const ProjectedSiStripRecHit2D* pH = static_cast(&hit); return (this->isHit2D(pH->originalHit())); // depends on original... } else { - edm::LogError("UnkownType") << "@SUB=AlignmentTrackSelector::isHit2D" - << "Tracker hit not in pixel, neither SiStripRecHit[12]D nor " - << "SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D."; + edm::LogError("UnknownType") << "@SUB=ApeEstimator::isHit2D" + << "Tracker hit not in pixel, neither SiStripRecHit[12]D nor " + << "SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D."; return false; } } } else { // not tracker?? - edm::LogWarning("DetectorMismatch") << "@SUB=AlignmentTrackSelector::isHit2D" + edm::LogWarning("DetectorMismatch") << "@SUB=ApeEstimator::isHit2D" << "Hit not in tracker with 'official' dimension >=2."; return true; // dimension() >= 2 so accept that... } diff --git a/Alignment/APEEstimation/plugins/ApeEstimatorSummary.cc b/Alignment/APEEstimation/plugins/ApeEstimatorSummary.cc index 81ef71063d6e5..cca4f5866bea8 100644 --- a/Alignment/APEEstimation/plugins/ApeEstimatorSummary.cc +++ b/Alignment/APEEstimation/plugins/ApeEstimatorSummary.cc @@ -26,7 +26,6 @@ // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -35,6 +34,7 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/EDMException.h" +#include "FWCore/Utilities/interface/isFinite.h" #include "CLHEP/Matrix/SymMatrix.h" @@ -78,6 +78,7 @@ class ApeEstimatorSummary : public edm::one::EDAnalyzer<> { // ----------member data --------------------------- const edm::ParameterSet parameterSet_; + const edm::ESGetToken alignmentErrorToken_; bool firstEvent = true; @@ -99,7 +100,7 @@ class ApeEstimatorSummary : public edm::one::EDAnalyzer<> { // constructors and destructor // ApeEstimatorSummary::ApeEstimatorSummary(const edm::ParameterSet& iConfig) - : parameterSet_(iConfig), inputFile_(nullptr) {} + : parameterSet_(iConfig), alignmentErrorToken_(esConsumes()), inputFile_(nullptr) {} ApeEstimatorSummary::~ApeEstimatorSummary() {} @@ -364,9 +365,8 @@ void ApeEstimatorSummary::calculateApe() { TTree* sectorNameTree(nullptr); iterationFile->GetObject("nameTree;1", sectorNameTree); - bool firstIter(false); - if (!iterationTreeX) { // should be always true in setBaseline mode, since file is recreated - firstIter = true; + const bool firstIter(!iterationTreeX); + if (firstIter) { // should be always true in setBaseline mode, since file is recreated if (!setBaseline) { iterationTreeX = new TTree("iterTreeX", "Tree for APE x values of all iterations"); iterationTreeY = new TTree("iterTreeY", "Tree for APE y values of all iterations"); @@ -438,9 +438,12 @@ void ApeEstimatorSummary::calculateApe() { } // Check whether sector definitions are identical with the ones of previous iterations and with the ones in baseline file + bool failed(false); for (auto& i_sector : m_tkSector_) { const std::string& name(i_sector.second.name); - if (!firstIter) { + if (firstIter) { + a_sectorName[i_sector.first] = new std::string(name); + } else { const std::string& nameLastIter(*a_sectorName[i_sector.first]); if (name != nameLastIter) { edm::LogError("CalculateAPE") << "Inconsistent sector definition in iterationFile for sector " << i_sector.first @@ -448,24 +451,31 @@ void ApeEstimatorSummary::calculateApe() { << "Recent iteration has name \"" << name << "\", while previous had \"" << nameLastIter << "\"\n" << "...APE calculation stopped. Please check sector definitions in config!\n"; - return; + failed = true; } - } else { - a_sectorName[i_sector.first] = new std::string(name); } if (!setBaseline && baselineFile) { const std::string& nameBaseline(*a_sectorBaselineName[i_sector.first]); if (name != nameBaseline) { + failed = true; edm::LogError("CalculateAPE") << "Inconsistent sector definition in baselineFile for sector " << i_sector.first << ",\n" << "Recent iteration has name \"" << name << "\", while baseline had \"" << nameBaseline << "\"\n" << "...APE calculation stopped. Please check sector definitions in config!\n"; - return; } } } + if (failed) { + if (firstIter) { + for (auto& i_sector : m_tkSector_) { + delete a_sectorName[i_sector.first]; + } + } + return; + } + // Set up text file for writing out APE values per module std::ofstream apeOutputFile; if (!setBaseline) { @@ -634,13 +644,13 @@ void ApeEstimatorSummary::calculateApe() { double correctionY_1 = correctionY2_1 >= 0. ? std::sqrt(correctionY2_1) : -std::sqrt(-correctionY2_1); double correctionY_2 = correctionY2_2 >= 0. ? std::sqrt(correctionY2_2) : -std::sqrt(-correctionY2_2); // Meanwhile, this got very bad default values, or? (negative corrections allowed) - if (isnan(correctionX_1)) + if (edm::isNotFinite(correctionX_1)) correctionX_1 = -0.0010; - if (isnan(correctionX_2)) + if (edm::isNotFinite(correctionX_2)) correctionX_2 = -0.0010; - if (isnan(correctionY_1)) + if (edm::isNotFinite(correctionY_1)) correctionY_1 = -0.0010; - if (isnan(correctionY_2)) + if (edm::isNotFinite(correctionY_2)) correctionY_2 = -0.0010; if (entriesX < minHitsPerInterval) { @@ -876,6 +886,9 @@ void ApeEstimatorSummary::calculateApe() { if (firstIter) { sectorNameTree->Fill(); sectorNameTree->Write("nameTree"); + for (auto& i_sector : m_tkSector_) { + delete a_sectorName[i_sector.first]; + } } iterationFile->Close(); delete iterationFile; @@ -894,8 +907,7 @@ void ApeEstimatorSummary::analyze(const edm::Event& iEvent, const edm::EventSetu // Set baseline or calculate APE value? const bool setBaseline(parameterSet_.getParameter("setBaseline")); - edm::ESHandle alignmentErrors; - iSetup.get().get(alignmentErrors); + const AlignmentErrorsExtended* alignmentErrors = &iSetup.getData(alignmentErrorToken_); // Read in baseline file for calculation of APE value (if not setting baseline) // Has same format as iterationFile @@ -932,9 +944,8 @@ void ApeEstimatorSummary::analyze(const edm::Event& iEvent, const edm::EventSetu TTree* sectorNameTree(nullptr); defaultFile->GetObject("nameTree;1", sectorNameTree); - bool firstIter(false); - if (!defaultTreeX) { // should be always true in setBaseline mode, since file is recreated - firstIter = true; + const bool firstIter(!defaultTreeX); + if (firstIter) { // should be always true in setBaseline mode, since file is recreated defaultTreeX = new TTree("iterTreeX", "Tree for default APE x values from GT"); defaultTreeY = new TTree("iterTreeY", "Tree for default APE y values from GT"); edm::LogInfo("CalculateAPE") << "First APE iteration (number 0.), create default file with TTree"; @@ -986,9 +997,12 @@ void ApeEstimatorSummary::analyze(const edm::Event& iEvent, const edm::EventSetu } // Check whether sector definitions are identical with the ones of previous iterations and with the ones in baseline file + bool failed(false); for (auto& i_sector : m_tkSector_) { const std::string& name(i_sector.second.name); - if (!firstIter) { + if (firstIter) { + a_sectorName[i_sector.first] = new std::string(name); + } else { const std::string& nameLastIter(*a_sectorName[i_sector.first]); if (name != nameLastIter) { edm::LogError("CalculateAPE") << "Inconsistent sector definition in iterationFile for sector " @@ -996,10 +1010,9 @@ void ApeEstimatorSummary::analyze(const edm::Event& iEvent, const edm::EventSetu << "Recent iteration has name \"" << name << "\", while previous had \"" << nameLastIter << "\"\n" << "...APE calculation stopped. Please check sector definitions in config!\n"; - return; + failed = true; } - } else - a_sectorName[i_sector.first] = new std::string(name); + } if (!setBaseline && baselineFile) { const std::string& nameBaseline(*a_sectorBaselineName[i_sector.first]); if (name != nameBaseline) { @@ -1008,9 +1021,21 @@ void ApeEstimatorSummary::analyze(const edm::Event& iEvent, const edm::EventSetu << "Recent iteration has name \"" << name << "\", while baseline had \"" << nameBaseline << "\"\n" << "...APE calculation stopped. Please check sector definitions in config!\n"; - return; + failed = true; + } + } + } + + if (failed) { + if (firstIter) { + delete defaultTreeX; + delete defaultTreeY; + delete sectorNameTree; + for (auto& i_sector : m_tkSector_) { + delete a_sectorName[i_sector.first]; } } + return; } // Loop over sectors for calculating getting default APE @@ -1042,13 +1067,21 @@ void ApeEstimatorSummary::analyze(const edm::Event& iEvent, const edm::EventSetu defaultTreeY->Write("iterTreeY"); defaultFile->Close(); - delete defaultFile; - if (baselineFile) { baselineFile->Close(); delete baselineFile; } + delete defaultFile; + if (firstIter) { + for (auto& i_sector : m_tkSector_) { + delete a_sectorName[i_sector.first]; + } + delete sectorNameTree; + delete defaultTreeX; + delete defaultTreeY; + } + firstEvent = false; } } diff --git a/Alignment/APEEstimation/plugins/ApeTreeCreateDefault.cc b/Alignment/APEEstimation/plugins/ApeTreeCreateDefault.cc index 2bd45de515edf..5c0ed4b01a3bd 100644 --- a/Alignment/APEEstimation/plugins/ApeTreeCreateDefault.cc +++ b/Alignment/APEEstimation/plugins/ApeTreeCreateDefault.cc @@ -25,7 +25,6 @@ // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -81,6 +80,7 @@ class ApeTreeCreateDefault : public edm::one::EDAnalyzer<> { bool checkModulePositions(const float, const std::vector&) const; // ----------member data --------------------------- + const edm::ESGetToken alignmentErrorToken_; const std::string resultFile_; const std::string trackerTreeFile_; const std::vector sectors_; @@ -102,7 +102,8 @@ class ApeTreeCreateDefault : public edm::one::EDAnalyzer<> { // constructors and destructor // ApeTreeCreateDefault::ApeTreeCreateDefault(const edm::ParameterSet& iConfig) - : resultFile_(iConfig.getParameter("resultFile")), + : alignmentErrorToken_(esConsumes()), + resultFile_(iConfig.getParameter("resultFile")), trackerTreeFile_(iConfig.getParameter("trackerTreeFile")), sectors_(iConfig.getParameter>("sectors")) {} @@ -399,8 +400,7 @@ void ApeTreeCreateDefault::analyze(const edm::Event& iEvent, const edm::EventSet // Same procedure as in ApeEstimatorSummary.cc minus reading of baseline tree // Load APEs from the GT and write them to root files similar to the ones from calculateAPE() - edm::ESHandle alignmentErrors; - iSetup.get().get(alignmentErrors); + const AlignmentErrorsExtended* alignmentErrors = &iSetup.getData(alignmentErrorToken_); // Set up root file for default APE values const std::string defaultFileName(resultFile_); diff --git a/Alignment/APEEstimation/test/SkimProducer/skimProducer_cfg.py b/Alignment/APEEstimation/test/SkimProducer/skimProducer_cfg.py index 85d35329f2761..42d16e267f987 100644 --- a/Alignment/APEEstimation/test/SkimProducer/skimProducer_cfg.py +++ b/Alignment/APEEstimation/test/SkimProducer/skimProducer_cfg.py @@ -32,8 +32,7 @@ ## Message Logger ## process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.categories.append('AlignmentTrackSelector') -#process.MessageLogger.categories.append('') +process.MessageLogger.AlignmentTrackSelector=dict() process.MessageLogger.cerr.INFO.limit = 0 process.MessageLogger.cerr.default.limit = -1 process.MessageLogger.cerr.AlignmentTrackSelector = cms.untracked.PSet(limit = cms.untracked.int32(-1)) diff --git a/Alignment/APEEstimation/test/apeTreeCreateDefault_cfg.py b/Alignment/APEEstimation/test/apeTreeCreateDefault_cfg.py index df1691d79dd98..7e87893f4371e 100644 --- a/Alignment/APEEstimation/test/apeTreeCreateDefault_cfg.py +++ b/Alignment/APEEstimation/test/apeTreeCreateDefault_cfg.py @@ -54,8 +54,8 @@ ## Message Logger ## process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.categories.append('DefaultAPETree') -process.MessageLogger.categories.append('SectorBuilder') +process.MessageLogger.DefaultAPETree=dict() +process.MessageLogger.SectorBuilder=dict() process.MessageLogger.cerr.INFO.limit = 0 process.MessageLogger.cerr.default.limit = 0 process.MessageLogger.cerr.DefaultAPETree = cms.untracked.PSet(limit = cms.untracked.int32(-1)) diff --git a/Alignment/APEEstimation/test/cfgTemplate/apeEstimatorSummary_cfg.py b/Alignment/APEEstimation/test/cfgTemplate/apeEstimatorSummary_cfg.py index 831b6378f2d5a..d95da5e1da537 100644 --- a/Alignment/APEEstimation/test/cfgTemplate/apeEstimatorSummary_cfg.py +++ b/Alignment/APEEstimation/test/cfgTemplate/apeEstimatorSummary_cfg.py @@ -35,7 +35,7 @@ ## Message Logger ## process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.categories.append('CalculateAPE') +process.MessageLogger.CalculateAPE=dict() process.MessageLogger.cerr.INFO.limit = 0 process.MessageLogger.cerr.default.limit = 0 process.MessageLogger.cerr.CalculateAPE = cms.untracked.PSet(limit = cms.untracked.int32(-1)) diff --git a/Alignment/APEEstimation/test/cfgTemplate/apeEstimator_cfg.py b/Alignment/APEEstimation/test/cfgTemplate/apeEstimator_cfg.py index 9439ed0afe089..c181cf3ccb727 100644 --- a/Alignment/APEEstimation/test/cfgTemplate/apeEstimator_cfg.py +++ b/Alignment/APEEstimation/test/cfgTemplate/apeEstimator_cfg.py @@ -50,13 +50,13 @@ ## Message Logger ## process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.categories.append('SectorBuilder') -process.MessageLogger.categories.append('ResidualErrorBinning') -process.MessageLogger.categories.append('HitSelector') -process.MessageLogger.categories.append('CalculateAPE') -process.MessageLogger.categories.append('ApeEstimator') -process.MessageLogger.categories.append('TrackRefitter') -process.MessageLogger.categories.append('AlignmentTrackSelector') +process.MessageLogger.SectorBuilder=dict() +process.MessageLogger.ResidualErrorBinning=dict() +process.MessageLogger.HitSelector=dict() +process.MessageLogger.CalculateAPE=dict() +process.MessageLogger.ApeEstimator=dict() +process.MessageLogger.TrackRefitter=dict() +process.MessageLogger.AlignmentTrackSelector=dict() process.MessageLogger.cerr.threshold = 'WARNING' process.MessageLogger.cerr.INFO.limit = 0 process.MessageLogger.cerr.default.limit = -1 diff --git a/Alignment/APEEstimation/test/createTrackerAlignmentErrorExtendedRcd_cfg.py b/Alignment/APEEstimation/test/createTrackerAlignmentErrorExtendedRcd_cfg.py index 9ae78acf6f322..141f5a1800e13 100644 --- a/Alignment/APEEstimation/test/createTrackerAlignmentErrorExtendedRcd_cfg.py +++ b/Alignment/APEEstimation/test/createTrackerAlignmentErrorExtendedRcd_cfg.py @@ -118,37 +118,39 @@ ) -process.MessageLogger = cms.Service( - "MessageLogger", - statistics = cms.untracked.vstring('cout', 'alignment'), - categories = cms.untracked.vstring('Alignment'), +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noLineBreaks = cms.untracked.bool(True) - ), - alignment = cms.untracked.PSet( - INFO = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ), + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), noLineBreaks = cms.untracked.bool(True), - DEBUG = cms.untracked.PSet( - limit = cms.untracked.int32(-1) + threshold = cms.untracked.string('DEBUG') + ), + files = cms.untracked.PSet( + alignment = cms.untracked.PSet( + Alignment = cms.untracked.PSet( + limit = cms.untracked.int32(-1) ), - WARNING = cms.untracked.PSet( - limit = cms.untracked.int32(-1) + DEBUG = cms.untracked.PSet( + limit = cms.untracked.int32(-1) ), - ERROR = cms.untracked.PSet( - limit = cms.untracked.int32(-1) + ERROR = cms.untracked.PSet( + limit = cms.untracked.int32(-1) ), - threshold = cms.untracked.string('INFO'), - Alignment = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ) - ), - destinations = cms.untracked.vstring( - 'cout', ## .log automatically - 'alignment') + INFO = cms.untracked.PSet( + limit = cms.untracked.int32(-1) + ), + WARNING = cms.untracked.PSet( + limit = cms.untracked.int32(-1) + ), + enableStatistics = cms.untracked.bool(True), + noLineBreaks = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ) ) +) ### speficy the source diff --git a/Alignment/APEEstimation/test/testApeestimatorSummary_cfg.py b/Alignment/APEEstimation/test/testApeestimatorSummary_cfg.py index 64cef1e9b615c..517cfb40010ec 100644 --- a/Alignment/APEEstimation/test/testApeestimatorSummary_cfg.py +++ b/Alignment/APEEstimation/test/testApeestimatorSummary_cfg.py @@ -41,8 +41,8 @@ ## Message Logger ## process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.categories.append('CalculateAPE') -#process.MessageLogger.categories.append('ApeEstimatorSummary') +process.MessageLogger.CalculateAPE=dict() +#process.MessageLogger.ApeEstimatorSummary=dict() process.MessageLogger.cerr.INFO.limit = 0 process.MessageLogger.cerr.default.limit = -1 process.MessageLogger.cerr.CalculateAPE = cms.untracked.PSet(limit = cms.untracked.int32(-1)) diff --git a/Alignment/APEEstimation/test/testApeestimator_cfg.py b/Alignment/APEEstimation/test/testApeestimator_cfg.py index 7f9a029ca5958..21f58700b8a20 100644 --- a/Alignment/APEEstimation/test/testApeestimator_cfg.py +++ b/Alignment/APEEstimation/test/testApeestimator_cfg.py @@ -40,13 +40,13 @@ ## Message Logger ## process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.categories.append('SectorBuilder') -process.MessageLogger.categories.append('ResidualErrorBinning') -process.MessageLogger.categories.append('HitSelector') -process.MessageLogger.categories.append('CalculateAPE') -process.MessageLogger.categories.append('ApeEstimator') -#process.MessageLogger.categories.append('TrackRefitter') -process.MessageLogger.categories.append('AlignmentTrackSelector') +process.MessageLogger.SectorBuilder=dict() +process.MessageLogger.ResidualErrorBinning=dict() +process.MessageLogger.HitSelector=dict() +process.MessageLogger.CalculateAPE=dict() +process.MessageLogger.ApeEstimator=dict() +#process.MessageLogger.TrackRefitter=dict() +process.MessageLogger.AlignmentTrackSelector=dict() process.MessageLogger.cerr.INFO.limit = 0 process.MessageLogger.cerr.default.limit = -1 # Do not use =0, else all error messages (except those listed below) are supressed process.MessageLogger.cerr.SectorBuilder = cms.untracked.PSet(limit = cms.untracked.int32(-1)) diff --git a/Alignment/CocoaApplication/src/CocoaAnalyzer.cc b/Alignment/CocoaApplication/src/CocoaAnalyzer.cc index 466aefcfc9d9e..ffa51eeeb9474 100644 --- a/Alignment/CocoaApplication/src/CocoaAnalyzer.cc +++ b/Alignment/CocoaApplication/src/CocoaAnalyzer.cc @@ -2,7 +2,7 @@ #include "CondCore/DBOutputService/interface/PoolDBOutputService.h" #include "CondFormats/DataRecord/interface/OpticalAlignmentsRcd.h" #include "CondFormats/OptAlignObjects/interface/OpticalAlignMeasurementInfo.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include #include "DetectorDescription/DDCMS/interface/DDCompactView.h" #include "DetectorDescription/DDCMS/interface/DDFilteredView.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -51,8 +51,6 @@ class CocoaAnalyzer : public edm::one::EDAnalyzer { std::string theCocoaDaqRootFileName_; }; -using namespace cms_units::operators; - CocoaAnalyzer::CocoaAnalyzer(edm::ParameterSet const& pset) { theCocoaDaqRootFileName_ = pset.getParameter("cocoaDaqRootFile"); int maxEvents = pset.getParameter("maxEvents"); @@ -180,41 +178,41 @@ void CocoaAnalyzer::readXMLFile(const edm::EventSetup& evts) { const dd4hep::Direction& transl = myPlacedVolume.position(); if (ALIUtils::debug >= 4) { - edm::LogInfo("Alignment") << "Local translation in cm = " << transl; + edm::LogInfo("Alignment") << "Local translation in dd4hep units = " << transl; } // B) READ INFO FROM XMLS // X oaInfo.x_.name_ = "X"; oaInfo.x_.dim_type_ = "centre"; - oaInfo.x_.value_ = transl.x() / (1._m); // COCOA units are m + oaInfo.x_.value_ = transl.x() / dd4hep::m; // COCOA units are m oaInfo.x_.error_ = cms::getParameterValueFromSpecParSections(allSpecParSections, nodePath, "centre_X_sigma", 0) / - (1._m); // COCOA units are m + dd4hep::m; // COCOA units are m oaInfo.x_.quality_ = static_cast( cms::getParameterValueFromSpecParSections(allSpecParSections, nodePath, "centre_X_quality", 0)); // Y oaInfo.y_.name_ = "Y"; oaInfo.y_.dim_type_ = "centre"; - oaInfo.y_.value_ = transl.y() / (1._m); // COCOA units are m + oaInfo.y_.value_ = transl.y() / dd4hep::m; // COCOA units are m oaInfo.y_.error_ = cms::getParameterValueFromSpecParSections(allSpecParSections, nodePath, "centre_Y_sigma", 0) / - (1._m); // COCOA units are m + dd4hep::m; // COCOA units are m oaInfo.y_.quality_ = static_cast( cms::getParameterValueFromSpecParSections(allSpecParSections, nodePath, "centre_Y_quality", 0)); // Z oaInfo.z_.name_ = "Z"; oaInfo.z_.dim_type_ = "centre"; - oaInfo.z_.value_ = transl.z() / (1._m); // COCOA units are m + oaInfo.z_.value_ = transl.z() / dd4hep::m; // COCOA units are m oaInfo.z_.error_ = cms::getParameterValueFromSpecParSections(allSpecParSections, nodePath, "centre_Z_sigma", 0) / - (1._m); // COCOA units are m + dd4hep::m; // COCOA units are m oaInfo.z_.quality_ = static_cast( cms::getParameterValueFromSpecParSections(allSpecParSections, nodePath, "centre_Z_quality", 0)); @@ -328,7 +326,8 @@ void CocoaAnalyzer::readXMLFile(const edm::EventSetup& evts) { double dimFactor = 1.; const std::string& type = dims[i]; if (type == "centre" || type == "length") { - dimFactor = 1. / (1._m); // was converted to cm with getParameterValueFromSpecPar, COCOA unit is m + dimFactor = + 1. / dd4hep::m; // was converted to dd4hep unit with getParameterValueFromSpecPar, COCOA unit is m } else if (type == "angles" || type == "angle" || type == "nodim") { dimFactor = 1.; } @@ -546,7 +545,7 @@ void CocoaAnalyzer::correctOpticalAlignmentParameter(OpticalAlignParam& myXMLPar double dimFactor = 1.; if (type == "centre" || type == "length") { - dimFactor = 1. / 1._m; // in DB it is in cm + dimFactor = 1. / dd4hep::m; // in DB values are stored in dd4hep unit } else if (type == "angles" || type == "angle" || type == "nodim") { dimFactor = 1.; } else { diff --git a/Alignment/CocoaFit/BuildFile.xml b/Alignment/CocoaFit/BuildFile.xml index 9d9fb3e2a36b3..a5cd40f229ea3 100644 --- a/Alignment/CocoaFit/BuildFile.xml +++ b/Alignment/CocoaFit/BuildFile.xml @@ -15,6 +15,7 @@ + diff --git a/Alignment/CocoaFit/src/CocoaDBMgr.cc b/Alignment/CocoaFit/src/CocoaDBMgr.cc index 3b54402d34106..04de0c9c2d6de 100644 --- a/Alignment/CocoaFit/src/CocoaDBMgr.cc +++ b/Alignment/CocoaFit/src/CocoaDBMgr.cc @@ -3,7 +3,7 @@ #include "CondFormats/Alignment/interface/AlignTransform.h" #include "CondFormats/Alignment/interface/AlignTransformErrorExtended.h" #include "DataFormats/GeometryCommonDetAlgo/interface/GlobalError.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include #include "FWCore/ServiceRegistry/interface/Service.h" #include "CondCore/DBOutputService/interface/PoolDBOutputService.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -32,8 +32,6 @@ #include "CondCore/CondDB/interface/Serialization.h" -using namespace cms_units::operators; - CocoaDBMgr* CocoaDBMgr::instance = nullptr; //---------------------------------------------------------------------- @@ -186,8 +184,8 @@ OpticalAlignInfo CocoaDBMgr::GetOptAlignInfoFromOptO(OpticalObject* opto) { OpticalAlignParam translationXDataForDB; translationXDataForDB.name_ = translationX->name(); translationXDataForDB.dim_type_ = translationX->type(); - translationXDataForDB.value_ = centreLocal.x() * 1._m; // m in COCOA, cm in DB - translationXDataForDB.error_ = GetEntryError(translationX) * 1._m; // m in COCOA, cm in DB + translationXDataForDB.value_ = centreLocal.x() * dd4hep::m; // m in COCOA, dd4hep unit in DB + translationXDataForDB.error_ = GetEntryError(translationX) * dd4hep::m; // m in COCOA, dd4hep unit in DB translationXDataForDB.quality_ = translationX->quality(); data.x_ = translationXDataForDB; @@ -195,8 +193,8 @@ OpticalAlignInfo CocoaDBMgr::GetOptAlignInfoFromOptO(OpticalObject* opto) { OpticalAlignParam translationYDataForDB; translationYDataForDB.name_ = translationY->name(); translationYDataForDB.dim_type_ = translationY->type(); - translationYDataForDB.value_ = centreLocal.y() * 1._m; // m in COCOA, cm in DB - translationYDataForDB.error_ = GetEntryError(translationY) * 1._m; // m in COCOA, cm in DB + translationYDataForDB.value_ = centreLocal.y() * dd4hep::m; // m in COCOA, dd4hep unit in DB + translationYDataForDB.error_ = GetEntryError(translationY) * dd4hep::m; // m in COCOA, dd4hep unit in DB translationYDataForDB.quality_ = translationY->quality(); data.y_ = translationYDataForDB; @@ -204,8 +202,8 @@ OpticalAlignInfo CocoaDBMgr::GetOptAlignInfoFromOptO(OpticalObject* opto) { OpticalAlignParam translationZDataForDB; translationZDataForDB.name_ = translationZ->name(); translationZDataForDB.dim_type_ = translationZ->type(); - translationZDataForDB.value_ = centreLocal.z() * 1._m; // m in COCOA, cm in DB - translationZDataForDB.error_ = GetEntryError(translationZ) * 1._m; // m in COCOA, cm in DB + translationZDataForDB.value_ = centreLocal.z() * dd4hep::m; // m in COCOA, dd4hep unit in DB + translationZDataForDB.error_ = GetEntryError(translationZ) * dd4hep::m; // m in COCOA, dd4hep unit in DB translationZDataForDB.quality_ = translationZ->quality(); data.z_ = translationZDataForDB; @@ -249,8 +247,8 @@ OpticalAlignInfo CocoaDBMgr::GetOptAlignInfoFromOptO(OpticalObject* opto) { extraEntry.value_ = myDBExtraEntry->value(); extraEntry.error_ = myDBExtraEntry->sigma(); if (extraEntry.dim_type_ == "centre" || extraEntry.dim_type_ == "length") { - extraEntry.value_ *= 1._m; // m in COCOA, cm in DB - extraEntry.error_ *= 1._m; // m in COCOA, cm in DB + extraEntry.value_ *= dd4hep::m; // m in COCOA, dd4hep unit in DB + extraEntry.error_ *= dd4hep::m; // m in COCOA, dd4hep unit in DB } extraEntry.quality_ = myDBExtraEntry->quality(); data.extraEntries_.emplace_back(extraEntry); @@ -365,12 +363,15 @@ AlignTransformErrorExtended* CocoaDBMgr::GetAlignInfoErrorFromOptO(OpticalObject CLHEP::HepMatrix errm(3, 3); const std::vector& theCoordinateEntryVector = opto->CoordinateEntryList(); std::cout << "@@@ CocoaDBMgr::GetAlignInfoFromOptOfill errm " << opto->name() << std::endl; - errm(0, 0) = GetEntryError(theCoordinateEntryVector[0]) * 1._m; // m in COCOA, cm in DB - errm(1, 1) = GetEntryError(theCoordinateEntryVector[1]) * 1._m; // m in COCOA, cm in DB - errm(2, 2) = GetEntryError(theCoordinateEntryVector[2]) * 1._m; // m in COCOA, cm in DB - errm(0, 1) = GetEntryError(theCoordinateEntryVector[0], theCoordinateEntryVector[1]) * 1._m; // m in COCOA, cm in DB - errm(0, 2) = GetEntryError(theCoordinateEntryVector[0], theCoordinateEntryVector[2]) * 1._m; // m in COCOA, cm in DB - errm(1, 2) = GetEntryError(theCoordinateEntryVector[1], theCoordinateEntryVector[2]) * 1._m; // m in COCOA, cm in DB + errm(0, 0) = GetEntryError(theCoordinateEntryVector[0]) * dd4hep::m; // m in COCOA, dd4hep unit in DB + errm(1, 1) = GetEntryError(theCoordinateEntryVector[1]) * dd4hep::m; // m in COCOA, dd4hep unit in DB + errm(2, 2) = GetEntryError(theCoordinateEntryVector[2]) * dd4hep::m; // m in COCOA, dd4hep unit in DB + errm(0, 1) = GetEntryError(theCoordinateEntryVector[0], theCoordinateEntryVector[1]) * + dd4hep::m; // m in COCOA, dd4hep unit in DB + errm(0, 2) = GetEntryError(theCoordinateEntryVector[0], theCoordinateEntryVector[2]) * + dd4hep::m; // m in COCOA, dd4hep unit in DB + errm(1, 2) = GetEntryError(theCoordinateEntryVector[1], theCoordinateEntryVector[2]) * + dd4hep::m; // m in COCOA, dd4hep unit in DB // errm(1,0) = errm(0,1); // errm(2,0) = errm(0,2); // errm(2,1) = errm(1,2); diff --git a/Alignment/CommonAlignment/plugins/APVModeFilter.cc b/Alignment/CommonAlignment/plugins/APVModeFilter.cc index 0fe7c28f7c031..2145f54b608cc 100644 --- a/Alignment/CommonAlignment/plugins/APVModeFilter.cc +++ b/Alignment/CommonAlignment/plugins/APVModeFilter.cc @@ -42,7 +42,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/stream/EDFilter.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/Exception.h" @@ -74,6 +73,9 @@ class APVModeFilter : public edm::stream::EDFilter<> { // ----------member data --------------------------- + // esConsumes + const edm::ESGetToken latencyToken_; + /// bits of interest for the APV mode static constexpr std::array bits_ = {{1, 3}}; static constexpr BitMask deco_ = BitMask(0); /// deco mode bit mask (0000) @@ -96,7 +98,8 @@ constexpr APVModeFilter::BitMask APVModeFilter::multi_; // constructors and destructor // APVModeFilter::APVModeFilter(const edm::ParameterSet& iConfig) - : mode_(convertMode(iConfig.getUntrackedParameter("apvMode"))) { + : latencyToken_(esConsumes()), + mode_(convertMode(iConfig.getUntrackedParameter("apvMode"))) { edm::LogInfo("Alignment") << "@SUB=APVModeFilter::APVModeFilter" << "Selecting events with APV mode '" << iConfig.getUntrackedParameter("apvMode") << "'."; @@ -111,10 +114,8 @@ bool APVModeFilter::filter(edm::Event&, const edm::EventSetup&) { return mode_ = // ------------ method called when starting to processes a run ------------ void APVModeFilter::beginRun(const edm::Run&, const edm::EventSetup& iSetup) { - edm::ESHandle siStripLatency; - iSetup.get().get(siStripLatency); - auto product = siStripLatency.product(); - modeCurrentRun_ = convertMode(product->singleMode()); + const auto& siStripLatency = &iSetup.getData(latencyToken_); + modeCurrentRun_ = convertMode(siStripLatency->singleMode()); } APVModeFilter::BitMask APVModeFilter::convertMode(const std::string& mode) const { diff --git a/Alignment/CommonAlignment/plugins/MagneticFieldFilter.cc b/Alignment/CommonAlignment/plugins/MagneticFieldFilter.cc index 57df0c82d194f..7652c09ce0756 100644 --- a/Alignment/CommonAlignment/plugins/MagneticFieldFilter.cc +++ b/Alignment/CommonAlignment/plugins/MagneticFieldFilter.cc @@ -27,7 +27,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/stream/EDFilter.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "CondFormats/RunInfo/interface/RunInfo.h" @@ -52,6 +51,10 @@ class MagneticFieldFilter : public edm::stream::EDFilter<> { float currentToField(const float& current) const; // ----------member data --------------------------- + + // esConsumes + const edm::ESGetToken runInfoToken_; + /// see: https://hypernews.cern.ch/HyperNews/CMS/get/magnetic-field/63/1/1/1.html static constexpr float linearCoeffCurrentToField_ = 2.084287e-04; /// see: https://hypernews.cern.ch/HyperNews/CMS/get/magnetic-field/63/1/1/1.html @@ -71,7 +74,9 @@ constexpr float MagneticFieldFilter::constantTermCurrentToField_; // constructor // MagneticFieldFilter::MagneticFieldFilter(const edm::ParameterSet& iConfig) - : magneticField_(iConfig.getUntrackedParameter("magneticField")), magneticFieldCurrentRun_(-10000) {} + : runInfoToken_(esConsumes()), + magneticField_(iConfig.getUntrackedParameter("magneticField")), + magneticFieldCurrentRun_(-10000) {} // // member functions @@ -85,9 +90,7 @@ bool MagneticFieldFilter::filter(edm::Event&, const edm::EventSetup&) { // ------------ method called when starting to processes a run ------------ void MagneticFieldFilter::beginRun(const edm::Run&, const edm::EventSetup& iSetup) { - edm::ESHandle sum; - iSetup.get().get(sum); - auto summary = sum.product(); + const auto& summary = &iSetup.getData(runInfoToken_); // convert from Tesla to kGauss (multiply with 10) and // round off to whole kGauss (add 0.5 and cast to int) as is done in // 'MagneticField::computeNominalValue()': diff --git a/Alignment/CommonAlignmentAlgorithm/test/apeSetting_cfg.py b/Alignment/CommonAlignmentAlgorithm/test/apeSetting_cfg.py index 48d9d6b29b2a6..fe9f89846ec87 100644 --- a/Alignment/CommonAlignmentAlgorithm/test/apeSetting_cfg.py +++ b/Alignment/CommonAlignmentAlgorithm/test/apeSetting_cfg.py @@ -37,33 +37,37 @@ # to be refined... process.MessageLogger = cms.Service("MessageLogger", - statistics = cms.untracked.vstring('cout', 'alignment'), - categories = cms.untracked.vstring('Alignment'), - cout = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noLineBreaks = cms.untracked.bool(True) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - alignment = cms.untracked.PSet( - INFO = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), noLineBreaks = cms.untracked.bool(True), - DEBUG = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - WARNING = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - ERROR = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - threshold = cms.untracked.string('INFO'), - Alignment = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ) + threshold = cms.untracked.string('DEBUG') ), - destinations = cms.untracked.vstring('cout', ## .log automatically - 'alignment') + files = cms.untracked.PSet( + alignment = cms.untracked.PSet( + Alignment = cms.untracked.PSet( + limit = cms.untracked.int32(-1) + ), + DEBUG = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + ERROR = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + INFO = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + WARNING = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + enableStatistics = cms.untracked.bool(True), + noLineBreaks = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ) + ) ) process.source = cms.Source("EmptySource") diff --git a/Alignment/CommonAlignmentProducer/data/AlCaHLTBitMon_cfg_template_py b/Alignment/CommonAlignmentProducer/data/AlCaHLTBitMon_cfg_template_py index bd1f17409c106..a28c54b5f64e8 100644 --- a/Alignment/CommonAlignmentProducer/data/AlCaHLTBitMon_cfg_template_py +++ b/Alignment/CommonAlignmentProducer/data/AlCaHLTBitMon_cfg_template_py @@ -18,7 +18,7 @@ process.load("Geometry.TrackerGeometryBuilder.trackerGeometry_cfi") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") process.GlobalTag.globaltag = '%%%GLOBALTAG%%%' -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger = cms.Service("MessageLogger", destinations = cms.untracked.vstring("%%%LOGFILE%%%"), %%%LOGFILE%%% = cms.untracked.PSet( diff --git a/Alignment/CommonAlignmentProducer/plugins/LSNumberFilter.cc b/Alignment/CommonAlignmentProducer/plugins/LSNumberFilter.cc index 717a178fc56a1..894cd67bdfd68 100644 --- a/Alignment/CommonAlignmentProducer/plugins/LSNumberFilter.cc +++ b/Alignment/CommonAlignmentProducer/plugins/LSNumberFilter.cc @@ -1,11 +1,8 @@ #include "FWCore/Framework/interface/stream/EDFilter.h" - #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/Run.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" - #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" diff --git a/Alignment/CommonAlignmentProducer/src/AlignmentTrackSelector.cc b/Alignment/CommonAlignmentProducer/src/AlignmentTrackSelector.cc index eff9c2d35733d..59cfb81b812d1 100644 --- a/Alignment/CommonAlignmentProducer/src/AlignmentTrackSelector.cc +++ b/Alignment/CommonAlignmentProducer/src/AlignmentTrackSelector.cc @@ -492,9 +492,9 @@ bool AlignmentTrackSelector::isHit2D(const TrackingRecHit& hit) const { const ProjectedSiStripRecHit2D* pH = static_cast(&hit); return (countStereoHitAs2D_ && this->isHit2D(pH->originalHit())); // depends on original... } else { - edm::LogError("UnkownType") << "@SUB=AlignmentTrackSelector::isHit2D" - << "Tracker hit not in pixel, neither SiStripRecHit[12]D nor " - << "SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D."; + edm::LogError("UnknownType") << "@SUB=AlignmentTrackSelector::isHit2D" + << "Tracker hit not in pixel, neither SiStripRecHit[12]D nor " + << "SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D."; return false; } } diff --git a/Alignment/CommonAlignmentProducer/test/TrackerAPForPCL/alignment_mille.py b/Alignment/CommonAlignmentProducer/test/TrackerAPForPCL/alignment_mille.py index 71f1b8c8c0f21..3152a4355878a 100644 --- a/Alignment/CommonAlignmentProducer/test/TrackerAPForPCL/alignment_mille.py +++ b/Alignment/CommonAlignmentProducer/test/TrackerAPForPCL/alignment_mille.py @@ -14,10 +14,8 @@ # initialize MessageLogger process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['alignment'] -process.MessageLogger.statistics = ['alignment'] -process.MessageLogger.categories = ['Alignment'] -process.MessageLogger.alignment = cms.untracked.PSet( + +process.MessageLogger.files.alignment = cms.untracked.PSet( DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), @@ -32,11 +30,12 @@ ), Alignment = cms.untracked.PSet( limit = cms.untracked.int32(-1), - ) + ), + enableStatistics = cms.untracked.bool(True) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(True) +process.MessageLogger.cerr.enable = cms.untracked.bool(False) process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) diff --git a/Alignment/CommonAlignmentProducer/test/alignment_cfg.py b/Alignment/CommonAlignmentProducer/test/alignment_cfg.py index e7f0f97b7e444..5c89bcc29e706 100644 --- a/Alignment/CommonAlignmentProducer/test/alignment_cfg.py +++ b/Alignment/CommonAlignmentProducer/test/alignment_cfg.py @@ -4,35 +4,37 @@ # initialize MessageLogger process.MessageLogger = cms.Service("MessageLogger", - statistics = cms.untracked.vstring('cout', - 'alignment'), - categories = cms.untracked.vstring('Alignment'), - cout = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noLineBreaks = cms.untracked.bool(True) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - alignment = cms.untracked.PSet( - INFO = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), noLineBreaks = cms.untracked.bool(True), - DEBUG = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - WARNING = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - ERROR = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - threshold = cms.untracked.string('INFO'), - Alignment = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ) + threshold = cms.untracked.string('DEBUG') ), - destinations = cms.untracked.vstring('cout', ## .log automatically - - 'alignment') + files = cms.untracked.PSet( + alignment = cms.untracked.PSet( + Alignment = cms.untracked.PSet( + limit = cms.untracked.int32(-1) + ), + DEBUG = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + ERROR = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + INFO = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + WARNING = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + enableStatistics = cms.untracked.bool(True), + noLineBreaks = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ) + ) ) # we need conditions diff --git a/Alignment/HIPAlignmentAlgorithm/interface/LhcTrackAnalyzer.h b/Alignment/HIPAlignmentAlgorithm/interface/LhcTrackAnalyzer.h index 0eb7f19ac0339..61ca07bdaf1f3 100644 --- a/Alignment/HIPAlignmentAlgorithm/interface/LhcTrackAnalyzer.h +++ b/Alignment/HIPAlignmentAlgorithm/interface/LhcTrackAnalyzer.h @@ -2,9 +2,8 @@ #define LhcTrackAnalyzer_h #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -51,7 +50,7 @@ // class decleration // -class LhcTrackAnalyzer : public edm::EDAnalyzer { +class LhcTrackAnalyzer : public edm::one::EDAnalyzer<> { public: explicit LhcTrackAnalyzer(const edm::ParameterSet&); ~LhcTrackAnalyzer() override; diff --git a/Alignment/HIPAlignmentAlgorithm/plugins/HIPTwoBodyDecayAnalyzer.cc b/Alignment/HIPAlignmentAlgorithm/plugins/HIPTwoBodyDecayAnalyzer.cc index e88487f166e12..ccad56e23929e 100644 --- a/Alignment/HIPAlignmentAlgorithm/plugins/HIPTwoBodyDecayAnalyzer.cc +++ b/Alignment/HIPAlignmentAlgorithm/plugins/HIPTwoBodyDecayAnalyzer.cc @@ -11,7 +11,7 @@ // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -29,7 +29,7 @@ #include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" #include "RecoVertex/VertexPrimitives/interface/ConvertToFromReco.h" -class HIPTwoBodyDecayAnalyzer : public edm::EDAnalyzer { +class HIPTwoBodyDecayAnalyzer : public edm::one::EDAnalyzer { public: explicit HIPTwoBodyDecayAnalyzer(const edm::ParameterSet&); ~HIPTwoBodyDecayAnalyzer() override; @@ -47,6 +47,9 @@ class HIPTwoBodyDecayAnalyzer : public edm::EDAnalyzer { std::vector> shortBranches; private: + // es consumes + const edm::ESGetToken ttkbuilderToken_; + enum BranchType { BranchType_short_t, BranchType_int_t, BranchType_float_t, BranchType_unknown_t }; void beginJob() override; @@ -77,15 +80,18 @@ class HIPTwoBodyDecayAnalyzer : public edm::EDAnalyzer { bool actuateBranches(); void analyzeTrackCollection(std::string strTrackType, - edm::ESHandle& theTTBuilder, + const TransientTrackBuilder& theTTBuilder, edm::Handle& hTrackColl, bool verbose = false); - reco::Vertex fitDimuonVertex(edm::ESHandle& theTTBuilder, + reco::Vertex fitDimuonVertex(const TransientTrackBuilder& theTTBuilder, edm::Handle& hTrackColl, bool& fitOk); }; -HIPTwoBodyDecayAnalyzer::HIPTwoBodyDecayAnalyzer(const edm::ParameterSet& iConfig) { +HIPTwoBodyDecayAnalyzer::HIPTwoBodyDecayAnalyzer(const edm::ParameterSet& iConfig) + : ttkbuilderToken_(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))) { + usesResource(TFileService::kSharedResource); + alcareco_trackCollToken_ = consumes(iConfig.getParameter("alcarecotracks")); refit1_trackCollToken_ = consumes(iConfig.getParameter("refit1tracks")); ctf_trackCollToken_ = consumes(iConfig.getParameter("refit2tracks")); @@ -265,9 +271,7 @@ void HIPTwoBodyDecayAnalyzer::analyze(const edm::Event& iEvent, const edm::Event edm::Handle finaltracks; iEvent.getByToken(final_trackCollToken_, finaltracks); - edm::ESHandle theTTBuilder; - iSetup.get().get("TransientTrackBuilder", theTTBuilder); - + const auto& theTTBuilder = iSetup.getData(ttkbuilderToken_); initializeBranches(); analyzeTrackCollection("alcareco", theTTBuilder, alcarecotracks); @@ -288,7 +292,7 @@ void HIPTwoBodyDecayAnalyzer::fillDescriptions(edm::ConfigurationDescriptions& d } void HIPTwoBodyDecayAnalyzer::analyzeTrackCollection(std::string strTrackType, - edm::ESHandle& theTTBuilder, + const TransientTrackBuilder& theTTBuilder, edm::Handle& hTrackColl, bool verbose) { if (verbose) @@ -357,7 +361,7 @@ void HIPTwoBodyDecayAnalyzer::analyzeTrackCollection(std::string strTrackType, // Recalculate track momenta with this vertex as reference j = 0; for (reco::TrackCollection::const_iterator track = hTrackColl->begin(); track != hTrackColl->end(); ++track) { - TransientTrack t_track = theTTBuilder->build(&(*track)); + TransientTrack t_track = theTTBuilder.build(&(*track)); AnalyticalImpactPointExtrapolator extrapolator(t_track.field()); TrajectoryStateOnSurface closestIn3DSpaceState = extrapolator.extrapolate(t_track.impactPointState(), RecoVertex::convertPos(ZVtx.position())); @@ -404,7 +408,7 @@ void HIPTwoBodyDecayAnalyzer::analyzeTrackCollection(std::string strTrackType, } } -reco::Vertex HIPTwoBodyDecayAnalyzer::fitDimuonVertex(edm::ESHandle& theTTBuilder, +reco::Vertex HIPTwoBodyDecayAnalyzer::fitDimuonVertex(const TransientTrackBuilder& theTTBuilder, edm::Handle& hTrackColl, bool& fitOk) { using namespace edm; @@ -412,7 +416,7 @@ reco::Vertex HIPTwoBodyDecayAnalyzer::fitDimuonVertex(edm::ESHandle t_tks; for (TrackCollection::const_iterator track = hTrackColl->begin(); track != hTrackColl->end(); ++track) { - TransientTrack tt = theTTBuilder->build(&(*track)); + TransientTrack tt = theTTBuilder.build(&(*track)); t_tks.push_back(tt); } diff --git a/Alignment/HIPAlignmentAlgorithm/test/runTwoBodyDecayTest.py b/Alignment/HIPAlignmentAlgorithm/test/runTwoBodyDecayTest.py index 1b77fd822155a..18002c192d6ff 100644 --- a/Alignment/HIPAlignmentAlgorithm/test/runTwoBodyDecayTest.py +++ b/Alignment/HIPAlignmentAlgorithm/test/runTwoBodyDecayTest.py @@ -5,7 +5,6 @@ # Messages process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['cout', 'cerr'] process.MessageLogger.cerr.FwkReport.reportEvery = 10000 process.load("Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi") diff --git a/Alignment/HIPAlignmentAlgorithm/test/serialGeomCompare_tpl.py b/Alignment/HIPAlignmentAlgorithm/test/serialGeomCompare_tpl.py index ed4aad7447f8a..abeaed18f5330 100644 --- a/Alignment/HIPAlignmentAlgorithm/test/serialGeomCompare_tpl.py +++ b/Alignment/HIPAlignmentAlgorithm/test/serialGeomCompare_tpl.py @@ -14,8 +14,17 @@ process.load("CondCore.DBCommon.CondDBSetup_cfi") process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('detailedInfo', - 'cout') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True) + ), + files = cms.untracked.PSet( + detailedInfo = cms.untracked.PSet( + + ) + ) ) process.source = cms.Source("EmptySource") diff --git a/Alignment/HIPAlignmentAlgorithm/test/serialIntoNtuples_tpl.py b/Alignment/HIPAlignmentAlgorithm/test/serialIntoNtuples_tpl.py index 09d2a3e197d1f..3603f23d2f7e1 100644 --- a/Alignment/HIPAlignmentAlgorithm/test/serialIntoNtuples_tpl.py +++ b/Alignment/HIPAlignmentAlgorithm/test/serialIntoNtuples_tpl.py @@ -12,8 +12,17 @@ process.load("CondCore.DBCommon.CondDBSetup_cfi") process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('detailedInfo', - 'cout') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True) + ), + files = cms.untracked.PSet( + detailedInfo = cms.untracked.PSet( + + ) + ) ) process.PoolDBESSource = cms.ESSource("PoolDBESSource", diff --git a/Alignment/LaserAlignment/plugins/LaserAlignment.cc b/Alignment/LaserAlignment/plugins/LaserAlignment.cc index f290bc5211a32..ee7702b9dd1e5 100644 --- a/Alignment/LaserAlignment/plugins/LaserAlignment.cc +++ b/Alignment/LaserAlignment/plugins/LaserAlignment.cc @@ -17,7 +17,13 @@ /// /// LaserAlignment::LaserAlignment(edm::ParameterSet const& theConf) - : theEvents(0), + : topoToken_(esConsumes()), + geomToken_(esConsumes()), + geomDetToken_(esConsumes()), + ptpToken_(esConsumes()), + gprToken_(esConsumes()), + stripPedestalsToken_(esConsumes()), + theEvents(0), theDoPedestalSubtraction(theConf.getUntrackedParameter("SubtractPedestals", true)), theUseMinuitAlgorithm(theConf.getUntrackedParameter("RunMinuitAlignmentTubeAlgorithm", false)), theApplyBeamKinkCorrections(theConf.getUntrackedParameter("ApplyBeamKinkCorrections", true)), @@ -271,32 +277,28 @@ void LaserAlignment::beginJob() { void LaserAlignment::produce(edm::Event& theEvent, edm::EventSetup const& theSetup) { if (firstEvent_) { //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - theSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); + const TrackerTopology* const tTopo = &theSetup.getData(topoToken_); // access the tracker - theSetup.get().get(theTrackerGeometry); - theSetup.get().get(gD); + gD = theSetup.getHandle(geomDetToken_); + theTrackerGeometry = theSetup.getHandle(geomToken_); // access pedestals (from db..) if desired edm::ESHandle pedestalsHandle; if (theDoPedestalSubtraction) { - theSetup.get().get(pedestalsHandle); + pedestalsHandle = theSetup.getHandle(stripPedestalsToken_); fillPedestalProfiles(pedestalsHandle); } // global positions - // edm::ESHandle theGlobalPositionRcd; - theSetup.get().getRecord().get(theGlobalPositionRcd); + theGlobalPositionRcd = &theSetup.getData(gprToken_); // select the reference geometry if (!updateFromInputGeometry) { // the AlignableTracker object is initialized with the ideal geometry - edm::ESHandle theGeometricDet; - theSetup.get().get(theGeometricDet); - edm::ESHandle ptp; - theSetup.get().get(ptp); + const GeometricDet* theGeometricDet = &theSetup.getData(geomDetToken_); + const PTrackerParameters* ptp = &theSetup.getData(ptpToken_); + TrackerGeomBuilderFromGeometricDet trackerBuilder; TrackerGeometry* theRefTracker = trackerBuilder.build(&*theGeometricDet, *ptp, tTopo); diff --git a/Alignment/LaserAlignment/plugins/LaserAlignment.h b/Alignment/LaserAlignment/plugins/LaserAlignment.h index c65463c64954c..6449f68d11c4e 100644 --- a/Alignment/LaserAlignment/plugins/LaserAlignment.h +++ b/Alignment/LaserAlignment/plugins/LaserAlignment.h @@ -127,6 +127,14 @@ class LaserAlignment : public edm::one::EDProducer { LASGlobalData&, LASBarrelAlignmentParameterSet&); + /// Tokens for ESconsumes + const edm::ESGetToken topoToken_; + const edm::ESGetToken geomToken_; + const edm::ESGetToken geomDetToken_; + const edm::ESGetToken ptpToken_; + const edm::ESGetToken gprToken_; + const edm::ESGetToken stripPedestalsToken_; + /// counter for the total number of events processed int theEvents; diff --git a/Alignment/LaserAlignment/plugins/LaserAlignmentEventFilter.cc b/Alignment/LaserAlignment/plugins/LaserAlignmentEventFilter.cc index 356f0a7e6ee70..8afe573f21ccf 100644 --- a/Alignment/LaserAlignment/plugins/LaserAlignmentEventFilter.cc +++ b/Alignment/LaserAlignment/plugins/LaserAlignmentEventFilter.cc @@ -7,9 +7,7 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" - #include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h" -#include "CondFormats/DataRecord/interface/SiStripFedCablingRcd.h" #include "EventFilter/SiStripRawToDigi/interface/SiStripFEDBuffer.h" #include @@ -26,7 +24,8 @@ std::vector copy_and_sort_vector(std::vector const& input) { /// constructors and destructor /// LaserAlignmentEventFilter::LaserAlignmentEventFilter(const edm::ParameterSet& iConfig) - : FED_collection_token(consumes(iConfig.getParameter("FedInputTag"))), + : cablingToken_(esConsumes()), + FED_collection_token(consumes(iConfig.getParameter("FedInputTag"))), las_fed_ids(copy_and_sort_vector(iConfig.getParameter>("FED_IDs"))), las_signal_ids(copy_and_sort_vector(iConfig.getParameter>("SIGNAL_IDs"))), single_channel_thresh(iConfig.getParameter("SINGLE_CHANNEL_THRESH")), @@ -49,8 +48,7 @@ bool LaserAlignmentEventFilter::filter(edm::StreamID sid, edm::Event& iEvent, co iEvent.getByToken(FED_collection_token, buffers); // read the cabling map from the EventSetup - edm::ESHandle cabling; - iSetup.get().get(cabling); + const auto& cabling = &iSetup.getData(cablingToken_); std::vector::const_iterator ifed = las_fed_ids.begin(); for (; ifed != las_fed_ids.end(); ifed++) { diff --git a/Alignment/LaserAlignment/plugins/LaserAlignmentEventFilter.h b/Alignment/LaserAlignment/plugins/LaserAlignmentEventFilter.h index ee8be0bb85fdb..d34d1c092a0e3 100644 --- a/Alignment/LaserAlignment/plugins/LaserAlignmentEventFilter.h +++ b/Alignment/LaserAlignment/plugins/LaserAlignmentEventFilter.h @@ -1,6 +1,6 @@ #include "FWCore/Utilities/interface/InputTag.h" #include "FWCore/Framework/interface/global/EDFilter.h" - +#include "CondFormats/DataRecord/interface/SiStripFedCablingRcd.h" #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" class SiStripFedCabling; @@ -13,6 +13,9 @@ class LaserAlignmentEventFilter : public edm::global::EDFilter<> { private: bool filter(edm::StreamID, edm::Event &, edm::EventSetup const &) const override; + // ES token + edm::ESGetToken cablingToken_; + // FED RAW data input collection const edm::EDGetTokenT FED_collection_token; diff --git a/Alignment/LaserAlignment/plugins/TkLasBeamFitter.cc b/Alignment/LaserAlignment/plugins/TkLasBeamFitter.cc index 13278bc27cff1..964643438dd64 100644 --- a/Alignment/LaserAlignment/plugins/TkLasBeamFitter.cc +++ b/Alignment/LaserAlignment/plugins/TkLasBeamFitter.cc @@ -145,6 +145,16 @@ class TkLasBeamFitter : public edm::one::EDProducer { double &chi2); // ----------member data --------------------------- + + // ES token + const edm::ESGetToken magFieldToken_; + const edm::ESGetToken geomToken_; + + // handles + edm::Handle laserBeams; + edm::ESHandle fieldHandle; + edm::ESHandle geometry; + const edm::InputTag src_; bool fitBeamSplitters_; unsigned int nAtParameters_; @@ -194,16 +204,13 @@ double TkLasBeamFitter::gBSparam = 0.0; bool TkLasBeamFitter::gFitBeamSplitters = false; bool TkLasBeamFitter::gIsInnerBarrel = false; -// handles -Handle laserBeams; -ESHandle fieldHandle; -ESHandle geometry; - // // constructors and destructor // TkLasBeamFitter::TkLasBeamFitter(const edm::ParameterSet &iConfig) - : src_(iConfig.getParameter("src")), + : magFieldToken_(esConsumes()), + geomToken_(esConsumes()), + src_(iConfig.getParameter("src")), fitBeamSplitters_(iConfig.getParameter("fitBeamSplitters")), nAtParameters_(iConfig.getParameter("numberOfFittedAtParameters")), h_bsAngle(nullptr), @@ -336,8 +343,8 @@ void TkLasBeamFitter::endRunProduce(edm::Run &run, const edm::EventSetup &setup) // get TkLasBeams, Tracker geometry, magnetic field run.getByLabel("LaserAlignment", "tkLaserBeams", laserBeams); - setup.get().get(geometry); - setup.get().get(fieldHandle); + geometry = setup.getHandle(geomToken_); + fieldHandle = setup.getHandle(magFieldToken_); // hack for fixed BSparams (ugly!) // double bsParams[34] = {-0.000266,-0.000956,-0.001205,-0.000018,-0.000759,0.002554, diff --git a/Alignment/LaserAlignment/test/LaserAlignmentEventFilter_test.py b/Alignment/LaserAlignment/test/LaserAlignmentEventFilter_test.py index 75f30aae07050..2cad04bc42dd2 100644 --- a/Alignment/LaserAlignment/test/LaserAlignmentEventFilter_test.py +++ b/Alignment/LaserAlignment/test/LaserAlignmentEventFilter_test.py @@ -39,17 +39,15 @@ ) ## message logger -process.MessageLogger = cms.Service( - "MessageLogger", - destinations = cms.untracked.vstring( 'cout', 'cerr' ), - #destinations = cms.untracked.vstring( 'cerr' ), - debugModules = cms.untracked.vstring( 'LaserAlignmentEventFilter' ), +process.MessageLogger = cms.Service("MessageLogger", cerr = cms.untracked.PSet( - threshold = cms.untracked.string( 'ERROR' ) + threshold = cms.untracked.string('ERROR') ), cout = cms.untracked.PSet( - threshold = cms.untracked.string( 'INFO' ) - ) + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ), + debugModules = cms.untracked.vstring('LaserAlignmentEventFilter') ) diff --git a/Alignment/LaserAlignment/test/RawDataConverter_full_chain.py b/Alignment/LaserAlignment/test/RawDataConverter_full_chain.py index 865f8a183e797..b69d70bc5a7c1 100644 --- a/Alignment/LaserAlignment/test/RawDataConverter_full_chain.py +++ b/Alignment/LaserAlignment/test/RawDataConverter_full_chain.py @@ -18,17 +18,15 @@ ) ## message logger -process.MessageLogger = cms.Service( - "MessageLogger", - destinations = cms.untracked.vstring( 'cout', 'cerr' ), - #destinations = cms.untracked.vstring( 'cerr' ), - debugModules = cms.untracked.vstring( 'RawDataConverter' ), +process.MessageLogger = cms.Service("MessageLogger", cerr = cms.untracked.PSet( - threshold = cms.untracked.string( 'ERROR' ) + threshold = cms.untracked.string('ERROR') ), cout = cms.untracked.PSet( - threshold = cms.untracked.string( 'INFO' ) - ) + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ), + debugModules = cms.untracked.vstring('RawDataConverter') ) diff --git a/Alignment/LaserAlignment/test/t0ProducerStandalone.py b/Alignment/LaserAlignment/test/t0ProducerStandalone.py index 1c5d6e5d113d4..74d8686b6bd8e 100644 --- a/Alignment/LaserAlignment/test/t0ProducerStandalone.py +++ b/Alignment/LaserAlignment/test/t0ProducerStandalone.py @@ -3,14 +3,14 @@ process = cms.Process( "laserAlignmentT0ProducerProcess" ) -process.MessageLogger = cms.Service( "MessageLogger", - cerr = cms.untracked.PSet( - threshold = cms.untracked.string( 'ERROR' ) - ), - cout = cms.untracked.PSet( - threshold = cms.untracked.string( 'INFO' ) - ), - destinations = cms.untracked.vstring( 'cout', 'cerr' ) +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + threshold = cms.untracked.string('ERROR') + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ) ) process.source = cms.Source( "PoolSource", diff --git a/Alignment/LaserAlignment/test/t0ProducerStandalone_LASFilter.py b/Alignment/LaserAlignment/test/t0ProducerStandalone_LASFilter.py index d7e50b8354278..24525583d7318 100644 --- a/Alignment/LaserAlignment/test/t0ProducerStandalone_LASFilter.py +++ b/Alignment/LaserAlignment/test/t0ProducerStandalone_LASFilter.py @@ -3,14 +3,14 @@ process = cms.Process( "laserAlignmentT0ProducerProcess" ) -process.MessageLogger = cms.Service( "MessageLogger", - cerr = cms.untracked.PSet( - threshold = cms.untracked.string( 'ERROR' ) - ), - cout = cms.untracked.PSet( - threshold = cms.untracked.string( 'INFO' ) - ), - destinations = cms.untracked.vstring( 'cout', 'cerr' ) +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + threshold = cms.untracked.string('ERROR') + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ) ) process.source = cms.Source( "PoolSource", diff --git a/Alignment/LaserAlignment/test/testTkLasBeamFitter_cfg.py b/Alignment/LaserAlignment/test/testTkLasBeamFitter_cfg.py index e3cfdc23c3942..d8b7781ac18d7 100644 --- a/Alignment/LaserAlignment/test/testTkLasBeamFitter_cfg.py +++ b/Alignment/LaserAlignment/test/testTkLasBeamFitter_cfg.py @@ -6,12 +6,12 @@ ## Message Logger ## process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet(INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32(100) # every 100th only # limit = cms.untracked.int32(10) # or limit to 10 printouts... )) -process.MessageLogger.statistics.append('cout') +process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True) ## ## Process options diff --git a/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeDQMModule.cc b/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeDQMModule.cc index a32a6c29ac0a1..94615694e0d4b 100644 --- a/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeDQMModule.cc +++ b/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeDQMModule.cc @@ -13,29 +13,24 @@ #include "TH1F.h" /*** Core framework functionality ***/ -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -/*** Geometry ***/ -#include "CondFormats/GeometryObjects/interface/PTrackerParameters.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeomBuilderFromGeometricDet.h" - /*** Alignment ***/ #include "Alignment/MillePedeAlignmentAlgorithm/interface/PedeLabelerBase.h" #include "Alignment/MillePedeAlignmentAlgorithm/interface/PedeLabelerPluginFactory.h" #include "Alignment/TrackerAlignment/interface/AlignableTracker.h" -/*** Thresholds from DB ***/ -#include "CondFormats/DataRecord/interface/AlignPCLThresholdsRcd.h" - /*** Necessary Framework infrastructure ***/ #include "FWCore/Framework/interface/ProcessBlock.h" #include "DataFormats/Alignment/interface/AlignmentToken.h" MillePedeDQMModule ::MillePedeDQMModule(const edm::ParameterSet& config) - : mpReaderConfig_(config.getParameter("MillePedeFileReader")) { + : tTopoToken_(esConsumes()), + gDetToken_(esConsumes()), + ptpToken_(esConsumes()), + aliThrToken_(esConsumes()), + mpReaderConfig_(config.getParameter("MillePedeFileReader")) { consumes(config.getParameter("alignmentTokenSrc")); } @@ -89,25 +84,20 @@ void MillePedeDQMModule ::beginRun(const edm::Run&, const edm::EventSetup& setup if (!setupChanged(setup)) return; - edm::ESHandle tTopo; - setup.get().get(tTopo); - edm::ESHandle geometricDet; - setup.get().get(geometricDet); - edm::ESHandle ptp; - setup.get().get(ptp); + const TrackerTopology* const tTopo = &setup.getData(tTopoToken_); + const GeometricDet* geometricDet = &setup.getData(gDetToken_); + const PTrackerParameters* ptp = &setup.getData(ptpToken_); // take the thresholds from DB - edm::ESHandle thresholdHandle; - setup.get().get(thresholdHandle); - auto thresholds_ = thresholdHandle.product(); + const auto& thresholds_ = &setup.getData(aliThrToken_); auto myThresholds = std::make_shared(); myThresholds->setAlignPCLThresholds(thresholds_->getNrecords(), thresholds_->getThreshold_Map()); TrackerGeomBuilderFromGeometricDet builder; - const auto trackerGeometry = builder.build(&(*geometricDet), *ptp, &(*tTopo)); - tracker_ = std::make_unique(trackerGeometry, &(*tTopo)); + const auto trackerGeometry = builder.build(geometricDet, *ptp, tTopo); + tracker_ = std::make_unique(trackerGeometry, tTopo); const std::string labelerPlugin{"PedeLabeler"}; edm::ParameterSet labelerConfig{}; diff --git a/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeDQMModule.h b/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeDQMModule.h index b3d162be15f00..8cb177afdc002 100644 --- a/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeDQMModule.h +++ b/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeDQMModule.h @@ -24,6 +24,14 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" +/*** Geometry ***/ +#include "CondFormats/GeometryObjects/interface/PTrackerParameters.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeomBuilderFromGeometricDet.h" + +/*** Thresholds from DB ***/ +#include "CondFormats/DataRecord/interface/AlignPCLThresholdsRcd.h" + /*** DQM ***/ #include "DQMServices/Core/interface/DQMEDHarvester.h" #include "DQMServices/Core/interface/DQMStore.h" @@ -68,6 +76,12 @@ class MillePedeDQMModule : public DQMEDHarvester { //========================== PRIVATE DATA ==================================== //============================================================================ + // esConsumes + const edm::ESGetToken tTopoToken_; + const edm::ESGetToken gDetToken_; + const edm::ESGetToken ptpToken_; + const edm::ESGetToken aliThrToken_; + const edm::ParameterSet mpReaderConfig_; std::unique_ptr tracker_; std::unique_ptr mpReader_; diff --git a/Alignment/MillePedeAlignmentAlgorithm/test/alignment_cfg.py b/Alignment/MillePedeAlignmentAlgorithm/test/alignment_cfg.py index 44025f23223e5..384e2b9c98f31 100644 --- a/Alignment/MillePedeAlignmentAlgorithm/test/alignment_cfg.py +++ b/Alignment/MillePedeAlignmentAlgorithm/test/alignment_cfg.py @@ -10,7 +10,7 @@ # initialize MessageLogger process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.alignment = cms.untracked.PSet( +process.MessageLogger.files.alignment = cms.untracked.PSet( DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), @@ -27,12 +27,11 @@ Alignment = cms.untracked.PSet( limit = cms.untracked.int32(-1), reportEvery = cms.untracked.int32(1) - ) + ), + enableStatistics = cms.untracked.bool(True) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(True) -process.MessageLogger.destinations = ['alignment'] -process.MessageLogger.statistics = ['alignment'] -process.MessageLogger.categories = ['Alignment'] +process.MessageLogger.cerr.enable = cms.untracked.bool(False) + # initialize magnetic field diff --git a/Alignment/MillePedeAlignmentAlgorithm/test/alignment_forGeomComp_cfg.py b/Alignment/MillePedeAlignmentAlgorithm/test/alignment_forGeomComp_cfg.py index 5cfa3f02a8b4c..41df8f44f3ddd 100644 --- a/Alignment/MillePedeAlignmentAlgorithm/test/alignment_forGeomComp_cfg.py +++ b/Alignment/MillePedeAlignmentAlgorithm/test/alignment_forGeomComp_cfg.py @@ -14,7 +14,7 @@ # initialize MessageLogger process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.alignment = cms.untracked.PSet( +process.MessageLogger.files.alignment = cms.untracked.PSet( DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), @@ -31,12 +31,9 @@ Alignment = cms.untracked.PSet( limit = cms.untracked.int32(-1), reportEvery = cms.untracked.int32(1) - ) + ), + enableStatistics = cms.untracked.bool(True) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(True) -process.MessageLogger.destinations = ['alignment'] -process.MessageLogger.statistics = ['alignment'] -process.MessageLogger.categories = ['Alignment'] # initialize magnetic field diff --git a/Alignment/MillePedeAlignmentAlgorithm/test/alignment_las_cfg.py b/Alignment/MillePedeAlignmentAlgorithm/test/alignment_las_cfg.py index 774d862012566..52a82ef24ce4d 100644 --- a/Alignment/MillePedeAlignmentAlgorithm/test/alignment_las_cfg.py +++ b/Alignment/MillePedeAlignmentAlgorithm/test/alignment_las_cfg.py @@ -12,46 +12,33 @@ # process.load("FWCore.MessageLogger.MessageLogger_cfi") # This whole mess does not really work - I do not get rid of FwkReport and TrackProducer info... process.MessageLogger = cms.Service("MessageLogger", - statistics = cms.untracked.vstring('alignment'), ##, 'cout') - - categories = cms.untracked.vstring('Alignment', - 'LogicError', - 'FwkReport', - 'TrackProducer'), - # FwkReport = cms.untracked.PSet( threshold = cms.untracked.string('WARNING') ), - # TrackProducer = cms.untracked.PSet( threshold = cms.untracked.string('WARNING') ), -# cout = cms.untracked.PSet( -# threshold = cms.untracked.string('DEBUG'), -# FwkReport = cms.untracked.PSet( -# threshold = cms.untracked.string('ERROR') -# ), -# TrackProducer = cms.untracked.PSet( -# threshold = cms.untracked.string('ERROR') -# ) -# ), - alignment = cms.untracked.PSet( - INFO = cms.untracked.PSet( - limit = cms.untracked.int32(10) - ), - DEBUG = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ), - WARNING = cms.untracked.PSet( - limit = cms.untracked.int32(10) - ), - ERROR = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ), - threshold = cms.untracked.string('DEBUG'), - LogicError = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ), - Alignment = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - destinations = cms.untracked.vstring('alignment') ## (, 'cout') - + files = cms.untracked.PSet( + alignment = cms.untracked.PSet( + Alignment = cms.untracked.PSet( + limit = cms.untracked.int32(-1) + ), + DEBUG = cms.untracked.PSet( + limit = cms.untracked.int32(-1) + ), + ERROR = cms.untracked.PSet( + limit = cms.untracked.int32(-1) + ), + INFO = cms.untracked.PSet( + limit = cms.untracked.int32(10) + ), + LogicError = cms.untracked.PSet( + limit = cms.untracked.int32(-1) + ), + WARNING = cms.untracked.PSet( + limit = cms.untracked.int32(10) + ), + enableStatistics = cms.untracked.bool(True), + threshold = cms.untracked.string('DEBUG') + ) + ) ) # initialize magnetic field diff --git a/Alignment/MillePedeAlignmentAlgorithm/test/alignment_survey_cfg.py b/Alignment/MillePedeAlignmentAlgorithm/test/alignment_survey_cfg.py index bcad153ee6a8e..f550de0061086 100644 --- a/Alignment/MillePedeAlignmentAlgorithm/test/alignment_survey_cfg.py +++ b/Alignment/MillePedeAlignmentAlgorithm/test/alignment_survey_cfg.py @@ -10,7 +10,7 @@ # initialize MessageLogger process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.alignment = cms.untracked.PSet( +process.MessageLogger.files.alignment = cms.untracked.PSet( DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), @@ -27,12 +27,11 @@ Alignment = cms.untracked.PSet( limit = cms.untracked.int32(-1), reportEvery = cms.untracked.int32(1) - ) + ), + enableStatistics = cms.untracked.bool(True) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(True) -process.MessageLogger.destinations = ['alignment'] -process.MessageLogger.statistics = ['alignment'] -process.MessageLogger.categories = ['Alignment'] +process.MessageLogger.cerr.enable = cms.untracked.bool(False) + # initialize magnetic field diff --git a/Alignment/MillePedeAlignmentAlgorithm/test/trackerTree_cfg.py b/Alignment/MillePedeAlignmentAlgorithm/test/trackerTree_cfg.py index cc43f9c4c8990..29a788200ff00 100644 --- a/Alignment/MillePedeAlignmentAlgorithm/test/trackerTree_cfg.py +++ b/Alignment/MillePedeAlignmentAlgorithm/test/trackerTree_cfg.py @@ -29,7 +29,7 @@ # MessageLogger process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('TrackerTreeGenerator') +process.MessageLogger.TrackerTreeGenerator=dict() process.MessageLogger.cerr.INFO.limit = 0 process.MessageLogger.cerr.default.limit = -1 process.MessageLogger.cerr.TrackerTreeGenerator = cms.untracked.PSet(limit = cms.untracked.int32(-1)) diff --git a/Alignment/MuonAlignment/test/MuonGeometryArrange.py b/Alignment/MuonAlignment/test/MuonGeometryArrange.py index b2869fb7f0f15..dba3cf1182aec 100644 --- a/Alignment/MuonAlignment/test/MuonGeometryArrange.py +++ b/Alignment/MuonAlignment/test/MuonGeometryArrange.py @@ -69,14 +69,15 @@ ) process.MessageLogger = cms.Service("MessageLogger", - info_txt = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') - ), - cerr = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') - ), - destinations = cms.untracked.vstring('info_txt','cerr') - ) + cerr = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ), + files = cms.untracked.PSet( + info_txt = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) +) process.source = cms.Source("EmptySource") diff --git a/Alignment/MuonAlignment/test/test-read_cfg.py b/Alignment/MuonAlignment/test/test-read_cfg.py index 3945936264509..f1afb82b96b2b 100644 --- a/Alignment/MuonAlignment/test/test-read_cfg.py +++ b/Alignment/MuonAlignment/test/test-read_cfg.py @@ -16,14 +16,14 @@ process.load("Alignment.MuonAlignment.Scenarios_cff") process.MessageLogger = cms.Service("MessageLogger", - info_txt = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') - ), cerr = cms.untracked.PSet( threshold = cms.untracked.string('ERROR') ), - destinations = cms.untracked.vstring('info_txt', - 'cerr') + files = cms.untracked.PSet( + info_txt = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/Alignment/OfflineValidation/interface/PVValidationHelpers.h b/Alignment/OfflineValidation/interface/PVValidationHelpers.h index 5725a4f86cc87..171ebbf4afb18 100644 --- a/Alignment/OfflineValidation/interface/PVValidationHelpers.h +++ b/Alignment/OfflineValidation/interface/PVValidationHelpers.h @@ -20,8 +20,9 @@ namespace PVValHelper { - const double max_eta_phase0 = 2.5; - const double max_eta_phase1 = 2.7; + constexpr double max_eta_phase0 = 2.5; + constexpr double max_eta_phase1 = 2.7; + constexpr double max_eta_phase2 = 4.0; // helper logarithmic bin generator @@ -74,6 +75,13 @@ namespace PVValHelper { END_OF_PLOTS = 7, }; + enum detectorPhase { + phase0 = 0, + phase1 = 1, + phase2 = 2, + END_OF_PHASES = 3, + }; + struct histodetails { int histobins; std::map, std::pair> range; diff --git a/Alignment/OfflineValidation/macros/FitPVResiduals.C b/Alignment/OfflineValidation/macros/FitPVResiduals.C index 9821b4f147351..7a163036dd865 100644 --- a/Alignment/OfflineValidation/macros/FitPVResiduals.C +++ b/Alignment/OfflineValidation/macros/FitPVResiduals.C @@ -351,7 +351,11 @@ void setStyle(); // global variables std::ofstream outfile("FittedDeltaZ.txt"); + +// use the maximum of the three supported phases Int_t nLadders_ = 20; +Int_t nModZ_ = 9; + const Int_t nPtBins_ = 48; Float_t _boundMin = -0.5; Float_t _boundSx = (nBins_ / 4.) - 0.5; @@ -545,11 +549,11 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString TH1F *dzNormMapResiduals[nFiles_][nBins_][nBins_]; // double-differential residuals L1 - TH1F *dxyL1MapResiduals[nFiles_][nLadders_][8]; - TH1F *dzL1MapResiduals[nFiles_][nLadders_][8]; + TH1F *dxyL1MapResiduals[nFiles_][nLadders_][nModZ_]; + TH1F *dzL1MapResiduals[nFiles_][nLadders_][nModZ_]; - TH1F *dxyL1NormMapResiduals[nFiles_][nLadders_][8]; - TH1F *dzL1NormMapResiduals[nFiles_][nLadders_][8]; + TH1F *dxyL1NormMapResiduals[nFiles_][nLadders_][nModZ_]; + TH1F *dzL1NormMapResiduals[nFiles_][nLadders_][nModZ_]; // dca residuals vs pT TH1F *dzNormPtResiduals[nFiles_][nPtBins_]; @@ -565,21 +569,23 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString TH1F *dzLadderResiduals[nFiles_][nLadders_]; TH1F *dxyLadderResiduals[nFiles_][nLadders_]; - TH1F *dzNormModZResiduals[nFiles_][8]; - TH1F *dxyNormModZResiduals[nFiles_][8]; + TH1F *dzNormModZResiduals[nFiles_][nModZ_]; + TH1F *dxyNormModZResiduals[nFiles_][nModZ_]; - TH1F *dzModZResiduals[nFiles_][8]; - TH1F *dxyModZResiduals[nFiles_][8]; + TH1F *dzModZResiduals[nFiles_][nModZ_]; + TH1F *dxyModZResiduals[nFiles_][nModZ_]; // for sanity checks TH1F *theEtaHistos[nFiles_]; TH1F *thebinsHistos[nFiles_]; TH1F *theLaddersHistos[nFiles_]; + TH1F *theModZHistos[nFiles_]; TH1F *thePtInfoHistos[nFiles_]; double theEtaMax_[nFiles_]; double theNBINS[nFiles_]; double theLadders[nFiles_]; + double theModZ[nFiles_]; double thePtMax[nFiles_]; double thePtMin[nFiles_]; @@ -623,6 +629,15 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString std::cout << "File n. " << i << " getting the default n. ladders: " << theLadders[i] << std::endl; } + if (gDirectory->GetListOfKeys()->Contains("nModZ")) { + gDirectory->GetObject("nModZ", theModZHistos[i]); + theModZ[i] = theModZHistos[i]->GetBinContent(1) / theModZHistos[i]->GetEntries(); + std::cout << "File n. " << i << " has theNModZ[" << i << "] = " << theModZ[i] << std::endl; + } else { + theModZ[i] = -1.; + std::cout << "File n. " << i << " getting the default n. modules along Z: " << theModZ[i] << std::endl; + } + if (gDirectory->GetListOfKeys()->Contains("pTinfo")) { gDirectory->GetObject("pTinfo", thePtInfoHistos[i]); thePTBINS[i] = thePtInfoHistos[i]->GetBinContent(1) * 3. / thePtInfoHistos[i]->GetEntries(); @@ -754,7 +769,7 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString // residuals vs module number / ladder - if (theLadders[i] > 0) { + if (theLadders[i] > 0 && theModZ[i] > 0) { for (Int_t iLadder = 0; iLadder < theLadders[i]; iLadder++) { dzNormLadderResiduals[i][iLadder] = (TH1F *)fins[i]->Get(Form("PVValidation/Norm_Long_ladder_Residuals/histo_norm_dz_ladder_plot%i", iLadder)); @@ -767,7 +782,7 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString Form("PVValidation/Abs_Transv_ladderNoOverlap_Residuals/histo_dxy_ladder_plot%i", iLadder)); if (do2DMaps) { - for (Int_t iMod = 0; iMod < 8; iMod++) { + for (Int_t iMod = 0; iMod < theModZ[i]; iMod++) { dxyL1MapResiduals[i][iLadder][iMod] = (TH1F *)fins[i]->Get(Form("PVValidation/Abs_L1Residuals/histo_dxy_ladder%i_module%i", iLadder, iMod)); dzL1MapResiduals[i][iLadder][iMod] = @@ -780,8 +795,10 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString } } } + } - for (Int_t iMod = 0; iMod < 8; iMod++) { + if (theModZ[i] > 0) { + for (Int_t iMod = 0; iMod < theModZ[i]; iMod++) { dzNormModZResiduals[i][iMod] = (TH1F *)fins[i]->Get(Form("PVValidation/Norm_Long_modZ_Residuals/histo_norm_dz_modZ_plot%i", iMod)); dxyNormModZResiduals[i][iMod] = @@ -855,6 +872,20 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString std::cout << "======================================================" << std::endl; } + // checks if the geometries are consistent to produce the moduleZ plots + if (check(theModZ, nFiles_)) { + std::cout << "======================================================" << std::endl; + std::cout << "FitPVResiduals::FitPVResiduals(): the number of modules in Z is different" << std::endl; + std::cout << "won't do the ladder analysis..." << std::endl; + std::cout << "======================================================" << std::endl; + nModZ_ = -1; + } else { + nModZ_ = theModZ[0]; + std::cout << "======================================================" << std::endl; + std::cout << "FitPVResiduals::FitPVResiduals(): the number of modules in Z is: " << nModZ_ << std::endl; + std::cout << "======================================================" << std::endl; + } + // checks if pT boundaries are consistent to produce the pT-binned plots if (check(thePtMax, nFiles_) || check(thePtMin, nFiles_)) { std::cout << "======================================================" << std::endl; @@ -1138,6 +1169,29 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString mypT_bins.data()); } + if (nModZ_ > 0) { + dxyModZMeanTrend[i] = new TH1F(Form("means_dxy_modZ_%i", i), + "#LT d_{xy} #GT vs Layer 1 module number;module number;#LT d_{xy} #GT [#mum]", + theModZ[i], + 0., + theModZ[i]); + dxyModZWidthTrend[i] = new TH1F(Form("widths_dxy_modZ_%i", i), + "#sigma(d_{xy}) vs Layer 1 module number;module number;#sigma(d_{xy}) [#mum]", + theModZ[i], + 0., + theModZ[i]); + dzModZMeanTrend[i] = new TH1F(Form("means_dz_modZ_%i", i), + "#LT d_{z} #GT vs Layer 1 module number;module number;#LT d_{z} #GT [#mum]", + theModZ[i], + 0., + theModZ[i]); + dzModZWidthTrend[i] = new TH1F(Form("widths_dz_modZ_%i", i), + "#sigma(d_{z}) vs Layer 1 module number;module number;#sigma(d_{z}) [#mum]", + theModZ[i], + 0., + theModZ[i]); + } + if (nLadders_ > 0) { dxyLadderMeanTrend[i] = new TH1F(Form("means_dxy_ladder_%i", i), "#LT d_{xy} #GT vs Layer 1 ladder;ladder number;#LT d_{xy} #GT [#mum]", @@ -1159,27 +1213,6 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString theLadders[i], 0., theLadders[i]); - - dxyModZMeanTrend[i] = new TH1F(Form("means_dxy_modZ_%i", i), - "#LT d_{xy} #GT vs Layer 1 module number;module number;#LT d_{xy} #GT [#mum]", - 8, - 0., - 8.); - dxyModZWidthTrend[i] = new TH1F(Form("widths_dxy_modZ_%i", i), - "#sigma(d_{xy}) vs Layer 1 module number;module number;#sigma(d_{xy}) [#mum]", - 8, - 0., - 8.); - dzModZMeanTrend[i] = new TH1F(Form("means_dz_modZ_%i", i), - "#LT d_{z} #GT vs Layer 1 module number;module number;#LT d_{z} #GT [#mum]", - 8, - 0., - 8.); - dzModZWidthTrend[i] = new TH1F(Form("widths_dz_modZ_%i", i), - "#sigma(d_{z}) vs Layer 1 module number;module number;#sigma(d_{z}) [#mum]", - 8, - 0., - 8.); } // DCA normalized trend plots @@ -1282,31 +1315,33 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString theLadders[i], 0., theLadders[i]); + } + if (nModZ_ > 0) { dxyNormModZMeanTrend[i] = new TH1F( Form("means_dxyNorm_modZ_%i", i), "#LT d_{xy}/#sigma_{d_{xy}} #GT vs Layer 1 module number;module number;#LT d_{xy}/#sigma_{d_{xy}} #GT", - 8, + theModZ[i], 0., - 8.); + theModZ[i]); dxyNormModZWidthTrend[i] = new TH1F( Form("widths_dxyNorm_modZ_%i", i), "#sigma(d_{xy}/#sigma_{d_{xy}}) vs Layer 1 module number;module number;#sigma(d_{xy}/#sigma_{d_{xy}})", - 8, + theModZ[i], 0., - 8.); + theModZ[i]); dzNormModZMeanTrend[i] = new TH1F(Form("means_dzNorm_modZ_%i", i), "#LT d_{z}/#sigma_{d_{z}} #GT vs Layer 1 module number;module number;#LT d_{z}/#sigma_{d_{z}} #GT", - 8, + theModZ[i], 0., - 8.); + theModZ[i]); dzNormModZWidthTrend[i] = new TH1F(Form("widths_dzNorm_modZ_%i", i), "#sigma(d_{z}/#sigma_{d_{z}}) vs Layer 1 module number;module number;#sigma(d_{z}/#sigma_{d_{z}})", - 8, + theModZ[i], 0., - 8.); + theModZ[i]); } // 2D maps @@ -1383,70 +1418,70 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString // 2D maps L1 dxyMeanL1Map[i] = new TH2F(Form("means_dxy_L1Map_%i", i), "#LT d_{xy} #GT map;module number;ladder number;#LT d_{xy} #GT [#mum]", - 8, + nModZ_, -0.5, - 7.5, + nModZ_ - 0.5, nLadders_, -0.5, nLadders_ - 0.5); dzMeanL1Map[i] = new TH2F(Form("means_dz_L1Map_%i", i), "#LT d_{z} #GT map;module number;ladder number;#LT d_{z} #GT [#mum]", - 8, + nModZ_, -0.5, - 7.5, + nModZ_ - 0.5, nLadders_, -0.5, nLadders_ - 0.5); dxyNormMeanL1Map[i] = new TH2F(Form("norm_means_dxy_L1Map_%i", i), "#LT d_{xy}/#sigma_{d_{xy}} #GT map;module number;ladder number;#LT d_{xy}/#sigma_{d_{xy}} #GT", - 8, + nModZ_, -0.5, - 7.5, + nModZ_ - 0.5, nLadders_, -0.5, nLadders_ - 0.5); dzNormMeanL1Map[i] = new TH2F(Form("norm_means_dz_L1Map_%i", i), "#LT d_{z}/#sigma_{d_{z}} #GT map;module number;ladder number;#LT d_{xy}/#sigma_{d_{z}} #GT", - 8, + nModZ_, -0.5, - 7.5, + nModZ_ - 0.5, nLadders_, -0.5, nLadders_ - 0.5); dxyWidthL1Map[i] = new TH2F(Form("widths_dxy_L1Map_%i", i), "#sigma_{d_{xy}} map;module number;ladder number;#sigma(d_{xy}) [#mum]", - 8, + nModZ_, -0.5, - 7.5, + nModZ_ - 0.5, nLadders_, -0.5, nLadders_ - 0.5); dzWidthL1Map[i] = new TH2F(Form("widths_dz_L1Map_%i", i), "#sigma_{d_{z}} map;module number;ladder number;#sigma(d_{z}) [#mum]", - 8, + nModZ_, -0.5, - 7.5, + nModZ_ - 0.5, nLadders_, -0.5, nLadders_ - 0.5); dxyNormWidthL1Map[i] = new TH2F(Form("norm_widths_dxy_L1Map_%i", i), "width(d_{xy}/#sigma_{d_{xy}}) map;module number;ladder number;#sigma(d_{xy}/#sigma_{d_{xy}})", - 8, + nModZ_, -0.5, - 7.5, + nModZ_ - 0.5, nLadders_, -0.5, nLadders_ - 0.5); dzNormWidthL1Map[i] = new TH2F(Form("norm_widths_dz_L1Map_%i", i), "width(d_{z}/#sigma_{d_{z}}) map;module number;ladder number;#sigma(d_{z}/#sigma_{d_{z}})", - 8, + nModZ_, -0.5, - 7.5, + nModZ_ - 0.5, nLadders_, -0.5, nLadders_ - 0.5); @@ -1495,11 +1530,13 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString FillTrendPlot(dxyLadderWidthTrend[i], dxyLadderResiduals[i], params::WIDTH, "else", nLadders_); FillTrendPlot(dzLadderMeanTrend[i], dzLadderResiduals[i], params::MEAN, "else", nLadders_); FillTrendPlot(dzLadderWidthTrend[i], dzLadderResiduals[i], params::WIDTH, "else", nLadders_); + } - FillTrendPlot(dxyModZMeanTrend[i], dxyModZResiduals[i], params::MEAN, "else", 8); - FillTrendPlot(dxyModZWidthTrend[i], dxyModZResiduals[i], params::WIDTH, "else", 8); - FillTrendPlot(dzModZMeanTrend[i], dzModZResiduals[i], params::MEAN, "else", 8); - FillTrendPlot(dzModZWidthTrend[i], dzModZResiduals[i], params::WIDTH, "else", 8); + if (nModZ_ > 0) { + FillTrendPlot(dxyModZMeanTrend[i], dxyModZResiduals[i], params::MEAN, "else", nModZ_); + FillTrendPlot(dxyModZWidthTrend[i], dxyModZResiduals[i], params::WIDTH, "else", nModZ_); + FillTrendPlot(dzModZMeanTrend[i], dzModZResiduals[i], params::MEAN, "else", nModZ_); + FillTrendPlot(dzModZWidthTrend[i], dzModZResiduals[i], params::WIDTH, "else", nModZ_); } MakeNiceTrendPlotStyle(dxyPhiMeanTrend[i], colors[i], markers[i]); @@ -1532,7 +1569,9 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString MakeNiceTrendPlotStyle(dxyLadderWidthTrend[i], colors[i], markers[i]); MakeNiceTrendPlotStyle(dzLadderMeanTrend[i], colors[i], markers[i]); MakeNiceTrendPlotStyle(dzLadderWidthTrend[i], colors[i], markers[i]); + } + if (nModZ_ > 0) { MakeNiceTrendPlotStyle(dxyModZMeanTrend[i], colors[i], markers[i]); MakeNiceTrendPlotStyle(dxyModZWidthTrend[i], colors[i], markers[i]); MakeNiceTrendPlotStyle(dzModZMeanTrend[i], colors[i], markers[i]); @@ -1563,11 +1602,13 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString FillTrendPlot(dxyNormLadderWidthTrend[i], dxyNormLadderResiduals[i], params::WIDTH, "else", nLadders_); FillTrendPlot(dzNormLadderMeanTrend[i], dzNormLadderResiduals[i], params::MEAN, "else", nLadders_); FillTrendPlot(dzNormLadderWidthTrend[i], dzNormLadderResiduals[i], params::WIDTH, "else", nLadders_); + } - FillTrendPlot(dxyNormModZMeanTrend[i], dxyNormModZResiduals[i], params::MEAN, "else", 8); - FillTrendPlot(dxyNormModZWidthTrend[i], dxyNormModZResiduals[i], params::WIDTH, "else", 8); - FillTrendPlot(dzNormModZMeanTrend[i], dzNormModZResiduals[i], params::MEAN, "else", 8); - FillTrendPlot(dzNormModZWidthTrend[i], dzNormModZResiduals[i], params::WIDTH, "else", 8); + if (nModZ_ > 0) { + FillTrendPlot(dxyNormModZMeanTrend[i], dxyNormModZResiduals[i], params::MEAN, "else", nModZ_); + FillTrendPlot(dxyNormModZWidthTrend[i], dxyNormModZResiduals[i], params::WIDTH, "else", nModZ_); + FillTrendPlot(dzNormModZMeanTrend[i], dzNormModZResiduals[i], params::MEAN, "else", nModZ_); + FillTrendPlot(dzNormModZWidthTrend[i], dzNormModZResiduals[i], params::WIDTH, "else", nModZ_); } MakeNiceTrendPlotStyle(dxyNormPhiMeanTrend[i], colors[i], markers[i]); @@ -1592,7 +1633,9 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString MakeNiceTrendPlotStyle(dxyNormLadderWidthTrend[i], colors[i], markers[i]); MakeNiceTrendPlotStyle(dzNormLadderMeanTrend[i], colors[i], markers[i]); MakeNiceTrendPlotStyle(dzNormLadderWidthTrend[i], colors[i], markers[i]); + } + if (nModZ_ > 0) { MakeNiceTrendPlotStyle(dxyNormModZMeanTrend[i], colors[i], markers[i]); MakeNiceTrendPlotStyle(dxyNormModZWidthTrend[i], colors[i], markers[i]); MakeNiceTrendPlotStyle(dzNormModZMeanTrend[i], colors[i], markers[i]); @@ -1688,7 +1731,7 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString std::vector a_temp_vec_z; std::vector n_temp_vec_z; - for (Int_t index2 = 0; index2 < 8; index2++) { + for (Int_t index2 = 0; index2 < nModZ_; index2++) { a_temp_vec_xy.push_back(dxyL1MapResiduals[i][index1][index2]); a_temp_vec_z.push_back(dzL1MapResiduals[i][index1][index2]); n_temp_vec_xy.push_back(dxyL1NormMapResiduals[i][index1][index2]); @@ -1701,15 +1744,15 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString v_dzNormMap.push_back(n_temp_vec_z); } - FillMap(dxyMeanL1Map[i], v_dxyAbsMap, params::MEAN, 8, nLadders_); - FillMap(dxyWidthL1Map[i], v_dxyAbsMap, params::WIDTH, 8, nLadders_); - FillMap(dzMeanL1Map[i], v_dzAbsMap, params::MEAN, 8, nLadders_); - FillMap(dzWidthL1Map[i], v_dzAbsMap, params::WIDTH, 8, nLadders_); + FillMap(dxyMeanL1Map[i], v_dxyAbsMap, params::MEAN, nModZ_, nLadders_); + FillMap(dxyWidthL1Map[i], v_dxyAbsMap, params::WIDTH, nModZ_, nLadders_); + FillMap(dzMeanL1Map[i], v_dzAbsMap, params::MEAN, nModZ_, nLadders_); + FillMap(dzWidthL1Map[i], v_dzAbsMap, params::WIDTH, nModZ_, nLadders_); - FillMap(dxyNormMeanL1Map[i], v_dxyNormMap, params::MEAN, 8, nLadders_); - FillMap(dxyNormWidthL1Map[i], v_dxyNormMap, params::WIDTH, 8, nLadders_); - FillMap(dzNormMeanL1Map[i], v_dzNormMap, params::MEAN, 8, nLadders_); - FillMap(dzNormWidthL1Map[i], v_dzNormMap, params::WIDTH, 8, nLadders_); + FillMap(dxyNormMeanL1Map[i], v_dxyNormMap, params::MEAN, nModZ_, nLadders_); + FillMap(dxyNormWidthL1Map[i], v_dxyNormMap, params::WIDTH, nModZ_, nLadders_); + FillMap(dzNormMeanL1Map[i], v_dzNormMap, params::MEAN, nModZ_, nLadders_); + FillMap(dzNormWidthL1Map[i], v_dzNormMap, params::WIDTH, nModZ_, nLadders_); if (isDebugMode) { timer.Stop(); @@ -1929,8 +1972,7 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString BiasesCanvasXY->SaveAs("BiasesCanvasXY_" + theStrDate + theStrAlignment + ".png"); // Bias plots (ladders and module number) - - if (nLadders_ > 0) { + if (nLadders_ > 0 && nModZ_ > 0) { TCanvas *BiasesCanvasLayer1 = new TCanvas("BiasCanvasLayer1", "BiasCanvasLayer1", 1200, 1200); arrangeBiasCanvas(BiasesCanvasLayer1, dxyLadderMeanTrend, @@ -1944,7 +1986,6 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString BiasesCanvasLayer1->SaveAs("BiasesCanvasLayer1_" + theStrDate + theStrAlignment + ".pdf"); BiasesCanvasLayer1->SaveAs("BiasesCanvasLayer1_" + theStrDate + theStrAlignment + ".png"); - delete BiasesCanvasLayer1; } @@ -1978,7 +2019,6 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString delete dzEtaBiasCanvas; // Resolution plots - TCanvas *ResolutionsCanvas = new TCanvas("ResolutionsCanvas", "ResolutionsCanvas", 1200, 1200); arrangeBiasCanvas(ResolutionsCanvas, dxyPhiWidthTrend, @@ -2007,7 +2047,7 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString ResolutionsCanvasXY->SaveAs("ResolutionsCanvasXY_" + theStrDate + theStrAlignment + ".pdf"); ResolutionsCanvasXY->SaveAs("ResolutionsCanvasXY_" + theStrDate + theStrAlignment + ".png"); - if (nLadders_ > 0) { + if (nLadders_ > 0 && nModZ_ > 0) { TCanvas *ResolutionsCanvasLayer1 = new TCanvas("ResolutionsCanvasLayer1", "ResolutionsCanvasLayer1", 1200, 1200); arrangeBiasCanvas(ResolutionsCanvasLayer1, dxyLadderWidthTrend, @@ -2021,12 +2061,10 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString ResolutionsCanvasLayer1->SaveAs("ResolutionsCanvasLayer1_" + theStrDate + theStrAlignment + ".pdf"); ResolutionsCanvasLayer1->SaveAs("ResolutionsCanvasLayer1_" + theStrDate + theStrAlignment + ".png"); - delete ResolutionsCanvasLayer1; } // Pull plots - TCanvas *PullsCanvas = new TCanvas("PullsCanvas", "PullsCanvas", 1200, 1200); arrangeBiasCanvas(PullsCanvas, dxyNormPhiWidthTrend, @@ -2041,7 +2079,7 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString PullsCanvas->SaveAs("PullsCanvas_" + theStrDate + theStrAlignment + ".pdf"); PullsCanvas->SaveAs("PullsCanvas_" + theStrDate + theStrAlignment + ".png"); - if (nLadders_ > 0) { + if (nLadders_ > 0 && nModZ_ > 0) { TCanvas *PullsCanvasLayer1 = new TCanvas("PullsCanvasLayer1", "PullsCanvasLayer1", 1200, 1200); arrangeBiasCanvas(PullsCanvasLayer1, dxyNormLadderWidthTrend, @@ -2055,7 +2093,6 @@ void FitPVResiduals(TString namesandlabels, bool stdres, bool do2DMaps, TString PullsCanvasLayer1->SaveAs("PullsCanvasLayer1_" + theStrDate + theStrAlignment + ".pdf"); PullsCanvasLayer1->SaveAs("PullsCanvasLayer1_" + theStrDate + theStrAlignment + ".png"); - delete PullsCanvasLayer1; } @@ -3973,7 +4010,7 @@ void makeNewXAxis(TH1F *h) axmax = nLadders_ + 0.5; } else if (myTitle.Contains("modZ")) { axmin = 0.5; - axmax = 8.5; + axmax = nModZ_ + 0.5; } else if (myTitle.Contains("h_probe")) { ndiv = 505; axmin = h->GetXaxis()->GetBinCenter(h->GetXaxis()->GetFirst()); diff --git a/Alignment/OfflineValidation/plugins/BuildFile.xml b/Alignment/OfflineValidation/plugins/BuildFile.xml index 7057a2aeee33d..8104a365cdaa3 100644 --- a/Alignment/OfflineValidation/plugins/BuildFile.xml +++ b/Alignment/OfflineValidation/plugins/BuildFile.xml @@ -3,6 +3,7 @@ + diff --git a/Alignment/OfflineValidation/plugins/DMRChecker.cc b/Alignment/OfflineValidation/plugins/DMRChecker.cc index 944e229e5cfcb..fd80a19318061 100644 --- a/Alignment/OfflineValidation/plugins/DMRChecker.cc +++ b/Alignment/OfflineValidation/plugins/DMRChecker.cc @@ -94,7 +94,6 @@ #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "FWCore/Common/interface/TriggerNames.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -1795,9 +1794,9 @@ class DMRChecker : public edm::one::EDAnalyzer { const ProjectedSiStripRecHit2D *pH = static_cast(&hit); return (countStereoHitAs2D_ && this->isHit2D(pH->originalHit())); // depends on original... } else { - edm::LogError("UnkownType") << "@SUB=DMRChecker::isHit2D" - << "Tracker hit not in pixel, neither SiStripRecHit[12]D nor " - << "SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D."; + edm::LogError("UnknownType") << "@SUB=DMRChecker::isHit2D" + << "Tracker hit not in pixel, neither SiStripRecHit[12]D nor " + << "SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D."; return false; } } diff --git a/Alignment/OfflineValidation/plugins/GeneralPurposeTrackAnalyzer.cc b/Alignment/OfflineValidation/plugins/GeneralPurposeTrackAnalyzer.cc index c9ae7605165ec..22c1712800aa9 100644 --- a/Alignment/OfflineValidation/plugins/GeneralPurposeTrackAnalyzer.cc +++ b/Alignment/OfflineValidation/plugins/GeneralPurposeTrackAnalyzer.cc @@ -61,7 +61,6 @@ #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "FWCore/Common/interface/TriggerNames.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Frameworkfwd.h" @@ -1172,9 +1171,9 @@ class GeneralPurposeTrackAnalyzer : public edm::one::EDAnalyzer(&hit); return (countStereoHitAs2D_ && this->isHit2D(pH->originalHit())); // depends on original... } else { - edm::LogError("UnkownType") << "@SUB=GeneralPurposeTrackAnalyzer::isHit2D" - << "Tracker hit not in pixel, neither SiStripRecHit[12]D nor " - << "SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D."; + edm::LogError("UnknownType") << "@SUB=GeneralPurposeTrackAnalyzer::isHit2D" + << "Tracker hit not in pixel, neither SiStripRecHit[12]D nor " + << "SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D."; return false; } } diff --git a/Alignment/OfflineValidation/plugins/MuonAlignmentAnalyzer.h b/Alignment/OfflineValidation/plugins/MuonAlignmentAnalyzer.h index 72501359f345e..3bd8d655afbc9 100644 --- a/Alignment/OfflineValidation/plugins/MuonAlignmentAnalyzer.h +++ b/Alignment/OfflineValidation/plugins/MuonAlignmentAnalyzer.h @@ -17,7 +17,6 @@ #include "DataFormats/CSCRecHit/interface/CSCSegmentCollection.h" #include "DataFormats/DTRecHit/interface/DTRecSegment4DCollection.h" #include "DataFormats/TrackReco/interface/Track.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/Utilities/interface/InputTag.h" diff --git a/Alignment/OfflineValidation/plugins/PixelBaryCentreAnalyzer.cc b/Alignment/OfflineValidation/plugins/PixelBaryCentreAnalyzer.cc new file mode 100644 index 0000000000000..b1d118e0e187b --- /dev/null +++ b/Alignment/OfflineValidation/plugins/PixelBaryCentreAnalyzer.cc @@ -0,0 +1,601 @@ +/** \class PixelBaryCentreAnalyzer + * The analyer works as the following : + * - Read global tracker position from global tag + * - Read tracker alignment constants from different ESsource with different labels + * - Calculate barycentres for different pixel substructures using global tracker position and alignment constants and store them in trees, one for each ESsource label. + * + * Python script plotBaryCentre_VS_BeamSpot.py under script dir is used to plot barycentres from alignment constants used in Prompt-Reco, End-of-Year Rereco and so-called Run-2 (Ultra)Legacy Rereco. Options of the plotting script can be found from the helper in the script. + * + * $Date: 2021/01/05 $ + * $Revision: 1.0 $ + * \author Tongguang Cheng - Beihang University + * +*/ + +// Framework +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/ESWatcher.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/ESGetToken.h" + +// Phase-1 Pixel +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "DataFormats/TrackerCommon/interface/PixelBarrelName.h" +#include "DataFormats/TrackerCommon/interface/PixelEndcapName.h" + +// pixel quality +#include "CondFormats/SiPixelObjects/interface/SiPixelQuality.h" +#include "CondFormats/DataRecord/interface/SiPixelQualityFromDbRcd.h" +// global postion +#include "CondFormats/Alignment/interface/DetectorGlobalPosition.h" +#include "CondFormats/AlignmentRecord/interface/GlobalPositionRcd.h" +// tracker alignment +#include "CondFormats/AlignmentRecord/interface/TrackerAlignmentRcd.h" +#include "CondFormats/Alignment/interface/Alignments.h" +// beamspot +#include "CondFormats/DataRecord/interface/BeamSpotObjectsRcd.h" +#include "CondFormats/BeamSpotObjects/interface/BeamSpotObjects.h" + +// Point and Vector +#include "DataFormats/GeometryVector/interface/GlobalPoint.h" +#include "DataFormats/GeometryVector/interface/GlobalVector.h" + +// TFileService +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" + +// ROOT +#include +#include +//#include + +// +// class declaration +// + +class PixelBaryCentreAnalyzer : public edm::one::EDAnalyzer { +public: + explicit PixelBaryCentreAnalyzer(const edm::ParameterSet&); + ~PixelBaryCentreAnalyzer() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void beginJob() override; + void analyze(const edm::Event&, const edm::EventSetup&) override; + void endJob() override; + + void initBC(); + void initBS(); + + bool usePixelQuality_; + int phase_; + + // ----------member data --------------------------- + edm::ESWatcher watcherBS_; + edm::ESWatcher watcherTkAlign_; + + // labels of TkAlign tags + std::vector bcLabels_; + // labels of beamspot tags + std::vector bsLabels_; + + edm::ESGetToken trackerGeometryToken_; + edm::ESGetToken trackerTopologyToken_; + edm::ESGetToken siPixelQualityToken_; + + edm::ESGetToken gprToken_; + std::map> tkAlignTokens_; + std::map> bsTokens_; + + // tree content + int run_; + int ls_; + + GlobalPoint BS_; + + GlobalPoint PIX_, BPIX_, FPIX_; + GlobalPoint BPIX_Flipped_, BPIX_NonFlipped_, BPIX_DiffFlippedNonFlipped_; + + GlobalPoint BPIXLayer_[4]; + GlobalPoint BPIXLayer_Flipped_[4]; + GlobalPoint BPIXLayer_NonFlipped_[4]; + GlobalPoint BPIXLayer_DiffFlippedNonFlipped_[4]; + + GlobalPoint FPIX_plus_, FPIX_minus_; + GlobalPoint FPIXDisks_plus_[3]; + GlobalPoint FPIXDisks_minus_[3]; + + edm::Service tFileService; + std::map bcTrees_; + std::map bsTrees_; +}; + +// +// constructors and destructor +// +PixelBaryCentreAnalyzer::PixelBaryCentreAnalyzer(const edm::ParameterSet& iConfig) + : usePixelQuality_(iConfig.getUntrackedParameter("usePixelQuality")), + bcLabels_(iConfig.getUntrackedParameter>("tkAlignLabels")), + bsLabels_(iConfig.getUntrackedParameter>("beamSpotLabels")), + trackerGeometryToken_(esConsumes()), + trackerTopologyToken_(esConsumes()), + siPixelQualityToken_(esConsumes()), + gprToken_(esConsumes()) { + for (const auto& label : bcLabels_) { + bcTrees_[label] = nullptr; + tkAlignTokens_[label] = esConsumes(edm::ESInputTag{"", label}); + } + + for (const auto& label : bsLabels_) { + bsTrees_[label] = nullptr; + bsTokens_[label] = esConsumes(edm::ESInputTag{"", label}); + } + + usesResource("TFileService"); +} + +PixelBaryCentreAnalyzer::~PixelBaryCentreAnalyzer() { + // do anything here that needs to be done at desctruction time + // (e.g. close files, deallocate resources etc.) +} + +// +// member functions +// + +void PixelBaryCentreAnalyzer::initBS() { + double dummy_float = 999999.0; + + BS_ = GlobalPoint(dummy_float, dummy_float, dummy_float); +} + +void PixelBaryCentreAnalyzer::initBC() { + // init to large number (unreasonable number) not zero + double dummy_float = 999999.0; + + PIX_ = GlobalPoint(dummy_float, dummy_float, dummy_float); + BPIX_ = GlobalPoint(dummy_float, dummy_float, dummy_float); + FPIX_ = GlobalPoint(dummy_float, dummy_float, dummy_float); + + BPIX_Flipped_ = GlobalPoint(dummy_float, dummy_float, dummy_float); + BPIX_NonFlipped_ = GlobalPoint(dummy_float, dummy_float, dummy_float); + BPIX_DiffFlippedNonFlipped_ = GlobalPoint(dummy_float, dummy_float, dummy_float); + + FPIX_plus_ = GlobalPoint(dummy_float, dummy_float, dummy_float); + FPIX_minus_ = GlobalPoint(dummy_float, dummy_float, dummy_float); + + for (unsigned int i = 0; i < 4; i++) { + BPIXLayer_[i] = GlobalPoint(dummy_float, dummy_float, dummy_float); + BPIXLayer_Flipped_[i] = GlobalPoint(dummy_float, dummy_float, dummy_float); + BPIXLayer_NonFlipped_[i] = GlobalPoint(dummy_float, dummy_float, dummy_float); + BPIXLayer_DiffFlippedNonFlipped_[i] = GlobalPoint(dummy_float, dummy_float, dummy_float); + } + + for (unsigned int i = 0; i < 3; i++) { + FPIXDisks_plus_[i] = GlobalPoint(dummy_float, dummy_float, dummy_float); + FPIXDisks_minus_[i] = GlobalPoint(dummy_float, dummy_float, dummy_float); + } +} + +// ------------ method called for each event ------------ +void PixelBaryCentreAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { + bool prepareTkAlign = false; + bool prepareBS = false; + + // ES watcher can noly run once in the same event, + // otherwise it will turn false whatsoever because the condition doesn't change in the second time call. + if (watcherTkAlign_.check(iSetup)) + prepareTkAlign = true; + if (watcherBS_.check(iSetup)) + prepareBS = true; + + if (!prepareTkAlign && !prepareBS) + return; + + run_ = iEvent.id().run(); + ls_ = iEvent.id().luminosityBlock(); + + if (prepareTkAlign) { // check for new IOV for TKAlign + + phase_ = -1; + + const TrackerGeometry* tkGeo = &iSetup.getData(trackerGeometryToken_); + const TrackerTopology* tkTopo = &iSetup.getData(trackerTopologyToken_); + + if (tkGeo->isThere(GeomDetEnumerators::PixelBarrel) && tkGeo->isThere(GeomDetEnumerators::PixelEndcap)) + phase_ = 0; + else if (tkGeo->isThere(GeomDetEnumerators::P1PXB) && tkGeo->isThere(GeomDetEnumerators::P1PXEC)) + phase_ = 1; + + // pixel quality + const SiPixelQuality* badPixelInfo = &iSetup.getData(siPixelQualityToken_); + + // Tracker global position + const Alignments* globalAlignments = &iSetup.getData(gprToken_); + std::unique_ptr globalPositions = std::make_unique(*globalAlignments); + const AlignTransform& globalCoordinates = align::DetectorGlobalPosition(*globalPositions, DetId(DetId::Tracker)); + GlobalVector globalTkPosition( + globalCoordinates.translation().x(), globalCoordinates.translation().y(), globalCoordinates.translation().z()); + + // loop over bclabels + for (const auto& label : bcLabels_) { + // init tree content + PixelBaryCentreAnalyzer::initBC(); + + // Get TkAlign from EventSetup: + const Alignments* alignments = &iSetup.getData(tkAlignTokens_[label]); + std::vector tkAlignments = alignments->m_align; + + // PIX + GlobalVector barycentre_PIX(0.0, 0.0, 0.0); + // BPIX + GlobalVector barycentre_BPIX(0.0, 0.0, 0.0); + float nmodules_BPIX(0.); + // FPIX + GlobalVector barycentre_FPIX(0.0, 0.0, 0.0); + float nmodules_FPIX(0.); + + // Per-layer/ladder barycentre for BPIX + std::map> nmodules_bpix; // layer-ladder + std::map> barycentre_bpix; // layer-ladder + + // Per-disk/ring barycentre for FPIX + std::map> nmodules_fpix; // disk-ring + std::map> barycentre_fpix; // disk-ring + + // Loop over tracker module + for (const auto& ali : tkAlignments) { + //DetId + const DetId& detId = DetId(ali.rawId()); + // remove bad module + if (usePixelQuality_ && badPixelInfo->IsModuleBad(detId)) + continue; + + // alignment for a given module + GlobalVector ali_translation(ali.translation().x(), ali.translation().y(), ali.translation().z()); + + int subid = DetId(detId).subdetId(); + // BPIX + if (subid == PixelSubdetector::PixelBarrel) { + nmodules_BPIX += 1; + barycentre_BPIX += ali_translation; + barycentre_PIX += ali_translation; + + int layer = tkTopo->pxbLayer(detId); + int ladder = tkTopo->pxbLadder(detId); + nmodules_bpix[layer][ladder] += 1; + barycentre_bpix[layer][ladder] += ali_translation; + + } // BPIX + + // FPIX + if (subid == PixelSubdetector::PixelEndcap) { + nmodules_FPIX += 1; + barycentre_FPIX += ali_translation; + barycentre_PIX += ali_translation; + + int disk = tkTopo->pxfDisk(detId); + int quadrant = PixelEndcapName(detId, tkTopo, phase_).halfCylinder(); + if (quadrant < 3) + disk *= -1; + + int ring = -9999; + if (phase_ == 0) { + ring = 1 + (tkTopo->pxfPanel(detId) + tkTopo->pxfModule(detId.rawId()) > 3); + } else if (phase_ == 1) { + ring = PixelEndcapName(detId, tkTopo, phase_).ringName(); + } + + nmodules_fpix[disk][ring] += 1; + barycentre_fpix[disk][ring] += ali_translation; + + } // FPIX + + } // loop over tracker module + + //PIX + float nmodules_PIX = nmodules_BPIX + nmodules_FPIX; + barycentre_PIX *= (1.0 / nmodules_PIX); + barycentre_PIX += globalTkPosition; + PIX_ = GlobalPoint(barycentre_PIX.x(), barycentre_PIX.y(), barycentre_PIX.z()); + + //BPIX + barycentre_BPIX *= (1.0 / nmodules_BPIX); + barycentre_BPIX += globalTkPosition; + BPIX_ = GlobalPoint(barycentre_BPIX.x(), barycentre_BPIX.y(), barycentre_BPIX.z()); + //FPIX + barycentre_FPIX *= (1.0 / nmodules_FPIX); + barycentre_FPIX += globalTkPosition; + FPIX_ = GlobalPoint(barycentre_FPIX.x(), barycentre_FPIX.y(), barycentre_FPIX.z()); + + // Pixel substructures + + // BPix barycentre per-layer/per-ladder + // assuming each ladder has the same number of modules in the same layer + // inner = flipped; outer = non-flipped + // + // Phase 0: Outer ladders are odd for layer 1,3 and even for layer 2 + // Phase 1: Outer ladders are odd for layer 4 and even for layer 1,2,3 + // + + int nmodules_BPIX_Flipped = 0; + int nmodules_BPIX_NonFlipped = 0; + GlobalVector BPIX_Flipped(0.0, 0.0, 0.0); + GlobalVector BPIX_NonFlipped(0.0, 0.0, 0.0); + + // loop over layers + for (std::map>::iterator il = barycentre_bpix.begin(); + il != barycentre_bpix.end(); + ++il) { + int layer = il->first; + + int nmodulesLayer = 0; + int nmodulesLayer_Flipped = 0; + int nmodulesLayer_NonFlipped = 0; + GlobalVector BPIXLayer(0.0, 0.0, 0.0); + GlobalVector BPIXLayer_Flipped(0.0, 0.0, 0.0); + GlobalVector BPIXLayer_NonFlipped(0.0, 0.0, 0.0); + + // loop over ladder + std::map barycentreLayer = barycentre_bpix[layer]; + for (std::map::iterator it = barycentreLayer.begin(); it != barycentreLayer.end(); ++it) { + int ladder = it->first; + //BPIXLayerLadder_[layer][ladder] = (1.0/nmodules[layer][ladder])*barycentreLayer[ladder] + globalTkPosition; + + nmodulesLayer += nmodules_bpix[layer][ladder]; + BPIXLayer += barycentreLayer[ladder]; + + // Phase-1 + // + // Phase 1: Outer ladders are odd for layer 4 and even for layer 1,2,3 + if (phase_ == 1) { + if (layer != 4) { // layer 1-3 + + if (ladder % 2 != 0) { // odd ladder = inner = flipped + nmodulesLayer_Flipped += nmodules_bpix[layer][ladder]; + BPIXLayer_Flipped += barycentreLayer[ladder]; + } else { + nmodulesLayer_NonFlipped += nmodules_bpix[layer][ladder]; + BPIXLayer_NonFlipped += barycentreLayer[ladder]; + } + } else { // layer-4 + + if (ladder % 2 == 0) { // even ladder = inner = flipped + nmodulesLayer_Flipped += nmodules_bpix[layer][ladder]; + BPIXLayer_Flipped += barycentreLayer[ladder]; + } else { // odd ladder = outer = non-flipped + nmodulesLayer_NonFlipped += nmodules_bpix[layer][ladder]; + BPIXLayer_NonFlipped += barycentreLayer[ladder]; + } + } + + } // phase-1 + + // Phase-0 + // + // Phase 0: Outer ladders are odd for layer 1,3 and even for layer 2 + if (phase_ == 0) { + if (layer == 2) { // layer-2 + + if (ladder % 2 != 0) { // odd ladder = inner = flipped + nmodulesLayer_Flipped += nmodules_bpix[layer][ladder]; + BPIXLayer_Flipped += barycentreLayer[ladder]; + } else { + nmodulesLayer_NonFlipped += nmodules_bpix[layer][ladder]; + BPIXLayer_NonFlipped += barycentreLayer[ladder]; + } + } else { // layer-1,3 + + if (ladder % 2 == 0) { // even ladder = inner = flipped + nmodulesLayer_Flipped += nmodules_bpix[layer][ladder]; + BPIXLayer_Flipped += barycentreLayer[ladder]; + } else { // odd ladder = outer = non-flipped + nmodulesLayer_NonFlipped += nmodules_bpix[layer][ladder]; + BPIXLayer_NonFlipped += barycentreLayer[ladder]; + } + } + + } // phase-0 + + } //loop over ladders + + // total BPIX flipped/non-flipped + BPIX_Flipped += BPIXLayer_Flipped; + BPIX_NonFlipped += BPIXLayer_NonFlipped; + nmodules_BPIX_Flipped += nmodulesLayer_Flipped; + nmodules_BPIX_NonFlipped += nmodulesLayer_NonFlipped; + + //BPIX per-layer + BPIXLayer *= (1.0 / nmodulesLayer); + BPIXLayer += globalTkPosition; + BPIXLayer_Flipped *= (1.0 / nmodulesLayer_Flipped); + BPIXLayer_Flipped += globalTkPosition; + BPIXLayer_NonFlipped *= (1.0 / nmodulesLayer_NonFlipped); + BPIXLayer_NonFlipped += globalTkPosition; + + BPIXLayer_[layer - 1] = GlobalPoint(BPIXLayer.x(), BPIXLayer.y(), BPIXLayer.z()); + BPIXLayer_Flipped_[layer - 1] = + GlobalPoint(BPIXLayer_Flipped.x(), BPIXLayer_Flipped.y(), BPIXLayer_Flipped.z()); + BPIXLayer_NonFlipped_[layer - 1] = + GlobalPoint(BPIXLayer_NonFlipped.x(), BPIXLayer_NonFlipped.y(), BPIXLayer_NonFlipped.z()); + + BPIXLayer_DiffFlippedNonFlipped_[layer - 1] = GlobalPoint(BPIXLayer_Flipped.x() - BPIXLayer_NonFlipped.x(), + BPIXLayer_Flipped.y() - BPIXLayer_NonFlipped.y(), + BPIXLayer_Flipped.z() - BPIXLayer_NonFlipped.z()); + + } // loop over layers + + BPIX_Flipped *= (1.0 / nmodules_BPIX_Flipped); + BPIX_Flipped += globalTkPosition; + BPIX_Flipped_ = GlobalPoint(BPIX_Flipped.x(), BPIX_Flipped.y(), BPIX_Flipped.z()); + BPIX_NonFlipped *= (1.0 / nmodules_BPIX_NonFlipped); + BPIX_NonFlipped += globalTkPosition; + BPIX_NonFlipped_ = GlobalPoint(BPIX_NonFlipped.x(), BPIX_NonFlipped.y(), BPIX_NonFlipped.z()); + BPIX_DiffFlippedNonFlipped_ = GlobalPoint(BPIX_Flipped.x() - BPIX_NonFlipped.x(), + BPIX_Flipped.y() - BPIX_NonFlipped.y(), + BPIX_Flipped.z() - BPIX_NonFlipped.z()); + + // FPIX substructures per-(signed)disk/per-ring + int nmodules_FPIX_plus = 0; + int nmodules_FPIX_minus = 0; + GlobalVector FPIX_plus(0.0, 0.0, 0.0); + GlobalVector FPIX_minus(0.0, 0.0, 0.0); + // loop over disks + for (std::map>::iterator id = barycentre_fpix.begin(); + id != barycentre_fpix.end(); + ++id) { + int disk = id->first; + + int nmodulesDisk = 0; + GlobalVector FPIXDisk(0.0, 0.0, 0.0); + + std::map baryCentreDisk = id->second; + for (std::map::iterator ir = baryCentreDisk.begin(); ir != baryCentreDisk.end(); + ++ir) { // loop over rings + int ring = ir->first; + nmodulesDisk += nmodules_fpix[disk][ring]; + FPIXDisk += ir->second; + if (disk > 0) { + nmodules_FPIX_plus += nmodules_fpix[disk][ring]; + FPIX_plus += ir->second; + } + if (disk < 0) { + nmodules_FPIX_minus += nmodules_fpix[disk][ring]; + FPIX_minus += ir->second; + } + + } // loop over rings + + FPIXDisk *= (1.0 / nmodulesDisk); + FPIXDisk += globalTkPosition; + + if (disk > 0) + FPIXDisks_plus_[disk - 1] = GlobalPoint(FPIXDisk.x(), FPIXDisk.y(), FPIXDisk.z()); + if (disk < 0) + FPIXDisks_minus_[-disk - 1] = GlobalPoint(FPIXDisk.x(), FPIXDisk.y(), FPIXDisk.z()); + } // loop over disks + + FPIX_plus *= (1.0 / nmodules_FPIX_plus); + FPIX_plus += globalTkPosition; + FPIX_plus_ = GlobalPoint(FPIX_plus.x(), FPIX_plus.y(), FPIX_plus.z()); + FPIX_minus *= (1.0 / nmodules_FPIX_minus); + FPIX_minus += globalTkPosition; + FPIX_minus_ = GlobalPoint(FPIX_minus.x(), FPIX_minus.y(), FPIX_minus.z()); + + bcTrees_[label]->Fill(); + + } // bcLabels_ + + } // check for new IOV for TKAlign + + // beamspot + if (prepareBS) { + // loop over bsLabels_ + for (const auto& label : bsLabels_) { + // init bstree content + PixelBaryCentreAnalyzer::initBS(); + + // Get BeamSpot from EventSetup + const BeamSpotObjects* mybeamspot = &iSetup.getData(bsTokens_[label]); + + BS_ = GlobalPoint(mybeamspot->GetX(), mybeamspot->GetY(), mybeamspot->GetZ()); + + bsTrees_[label]->Fill(); + } // bsLabels_ + + } // check for new IOV for BS +} + +// ------------ method called once each job just before starting event loop ------------ +void PixelBaryCentreAnalyzer::beginJob() { + // init bc bs trees + for (const auto& label : bsLabels_) { + std::string treeName = "BeamSpot"; + if (!label.empty()) + treeName = "BeamSpot_"; + treeName += label; + + bsTrees_[label] = tFileService->make(TString(treeName), "PixelBarycentre analyzer ntuple"); + + bsTrees_[label]->Branch("run", &run_, "run/I"); + bsTrees_[label]->Branch("ls", &ls_, "ls/I"); + + bsTrees_[label]->Branch("BS", &BS_); + + } // bsLabels_ + + for (const auto& label : bcLabels_) { + std::string treeName = "PixelBarycentre"; + if (!label.empty()) + treeName = "PixelBarycentre_"; + treeName += label; + bcTrees_[label] = tFileService->make(TString(treeName), "PixelBarycentre analyzer ntuple"); + + bcTrees_[label]->Branch("run", &run_, "run/I"); + bcTrees_[label]->Branch("ls", &ls_, "ls/I"); + + bcTrees_[label]->Branch("PIX", &PIX_); + + bcTrees_[label]->Branch("BPIX", &BPIX_); + bcTrees_[label]->Branch("BPIX_Flipped", &BPIX_Flipped_); + bcTrees_[label]->Branch("BPIX_NonFlipped", &BPIX_NonFlipped_); + bcTrees_[label]->Branch("BPIX_DiffFlippedNonFlipped", &BPIX_DiffFlippedNonFlipped_); + + bcTrees_[label]->Branch("FPIX", &FPIX_); + bcTrees_[label]->Branch("FPIX_plus", &FPIX_plus_); + bcTrees_[label]->Branch("FPIX_minus", &FPIX_minus_); + + //per-layer + for (unsigned int i = 0; i < 4; i++) { + TString structure = "BPIXLYR"; + int layer = i + 1; + structure += layer; + + bcTrees_[label]->Branch(structure, &BPIXLayer_[i]); + bcTrees_[label]->Branch(structure + "_Flipped", &BPIXLayer_Flipped_[i]); + bcTrees_[label]->Branch(structure + "_NonFlipped", &BPIXLayer_NonFlipped_[i]); + bcTrees_[label]->Branch(structure + "_DiffFlippedNonFlipped", &BPIXLayer_DiffFlippedNonFlipped_[i]); + } + + //per-disk/ring + for (unsigned int i = 0; i < 3; i++) { + TString structure = "FPIXDisk+"; + int disk = i + 1; + structure += disk; + bcTrees_[label]->Branch(structure, &FPIXDisks_plus_[i]); + + structure = "FPIXDisk-"; + structure += disk; + bcTrees_[label]->Branch(structure, &FPIXDisks_minus_[i]); + } + + } // bcLabels_ +} + +// ------------ method called once each job just after ending the event loop ------------ +void PixelBaryCentreAnalyzer::endJob() { + bcLabels_.clear(); + bsLabels_.clear(); + + bcTrees_.clear(); + bsTrees_.clear(); +} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ +void PixelBaryCentreAnalyzer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + //The following says we do not know what parameters are allowed so do no validation + // Please change this to state exactly what you do use, even if it is no parameters + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); +} + +//define this as a plug-in +DEFINE_FWK_MODULE(PixelBaryCentreAnalyzer); diff --git a/Alignment/OfflineValidation/plugins/PrimaryVertexValidation.cc b/Alignment/OfflineValidation/plugins/PrimaryVertexValidation.cc index 424501893a12d..fe2a9b3d0a809 100644 --- a/Alignment/OfflineValidation/plugins/PrimaryVertexValidation.cc +++ b/Alignment/OfflineValidation/plugins/PrimaryVertexValidation.cc @@ -53,6 +53,7 @@ #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "RecoVertex/PrimaryVertexProducer/interface/TrackFilterForPVFinding.h" #include "RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZ_vect.h" #include "RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZ.h" #include "RecoVertex/PrimaryVertexProducer/interface/GapClusterizerInZ.h" @@ -273,10 +274,11 @@ void PrimaryVertexValidation::analyze(const edm::Event& iEvent, const edm::Event edm::ESHandle pDD = iSetup.getHandle(geomToken_); edm::LogInfo("tracker geometry read") << "There are: " << pDD->dets().size() << " detectors"; - // switch on the phase1 - if ((pDD->isThere(GeomDetEnumerators::P1PXB)) || (pDD->isThere(GeomDetEnumerators::P1PXEC))) { - isPhase1_ = true; + // switch on the phase2 + if ((pDD->isThere(GeomDetEnumerators::P2PXB)) || (pDD->isThere(GeomDetEnumerators::P2PXEC))) { + phase_ = PVValHelper::phase2; nLadders_ = 12; + nModZ_ = 9; if (h_dxy_ladderOverlap_.size() != nLadders_) { PVValHelper::shrinkHistVectorToFit(h_dxy_ladderOverlap_, nLadders_); @@ -292,27 +294,86 @@ void PrimaryVertexValidation::analyze(const edm::Event& iEvent, const edm::Event } if (debug_) { - edm::LogInfo("PrimaryVertexValidation") << " pixel phase1 setup, nLadders: " << nLadders_; + edm::LogInfo("PrimaryVertexValidation") + << " pixel phase2 setup, nLadders: " << nLadders_ << " nModules:" << nModZ_; + } + + } else if ((pDD->isThere(GeomDetEnumerators::P1PXB)) || (pDD->isThere(GeomDetEnumerators::P1PXEC))) { + // switch on the phase1 + phase_ = PVValHelper::phase1; + nLadders_ = 12; + nModZ_ = 8; + + if (h_dxy_ladderOverlap_.size() != nLadders_) { + PVValHelper::shrinkHistVectorToFit(h_dxy_ladderOverlap_, nLadders_); + PVValHelper::shrinkHistVectorToFit(h_dxy_ladderNoOverlap_, nLadders_); + PVValHelper::shrinkHistVectorToFit(h_dxy_ladder_, nLadders_); + PVValHelper::shrinkHistVectorToFit(h_dz_ladder_, nLadders_); + PVValHelper::shrinkHistVectorToFit(h_norm_dxy_ladder_, nLadders_); + PVValHelper::shrinkHistVectorToFit(h_norm_dz_ladder_, nLadders_); + + if (debug_) { + edm::LogInfo("PrimaryVertexValidation") << "checking size:" << h_dxy_ladder_.size() << std::endl; + } + } + + if (h_dxy_modZ_.size() != nModZ_) { + PVValHelper::shrinkHistVectorToFit(h_dxy_modZ_, nModZ_); + PVValHelper::shrinkHistVectorToFit(h_dz_modZ_, nModZ_); + PVValHelper::shrinkHistVectorToFit(h_norm_dxy_modZ_, nModZ_); + PVValHelper::shrinkHistVectorToFit(h_norm_dxy_modZ_, nModZ_); + + if (debug_) { + edm::LogInfo("PrimaryVertexValidation") << "checking size:" << h_dxy_modZ_.size() << std::endl; + } + } + + if (debug_) { + edm::LogInfo("PrimaryVertexValidation") + << " pixel phase1 setup, nLadders: " << nLadders_ << " nModules:" << nModZ_; } } else { - isPhase1_ = false; + phase_ = PVValHelper::phase0; nLadders_ = 20; + nModZ_ = 8; + + if (h_dxy_modZ_.size() != nModZ_) { + PVValHelper::shrinkHistVectorToFit(h_dxy_modZ_, nModZ_); + PVValHelper::shrinkHistVectorToFit(h_dz_modZ_, nModZ_); + PVValHelper::shrinkHistVectorToFit(h_norm_dxy_modZ_, nModZ_); + PVValHelper::shrinkHistVectorToFit(h_norm_dxy_modZ_, nModZ_); + + if (debug_) { + edm::LogInfo("PrimaryVertexValidation") << "checking size:" << h_dxy_modZ_.size() << std::endl; + } + } + if (debug_) { - edm::LogInfo("PrimaryVertexValidation") << " pixel phase0 setup, nLadders: " << nLadders_; + edm::LogInfo("PrimaryVertexValidation") + << " pixel phase0 setup, nLadders: " << nLadders_ << " nModules:" << nModZ_; } } - if (isPhase1_) { - etaOfProbe_ = std::min(etaOfProbe_, PVValHelper::max_eta_phase1); - } else { - etaOfProbe_ = std::min(etaOfProbe_, PVValHelper::max_eta_phase0); + switch (phase_) { + case PVValHelper::phase0: + etaOfProbe_ = std::min(etaOfProbe_, PVValHelper::max_eta_phase0); + break; + case PVValHelper::phase1: + etaOfProbe_ = std::min(etaOfProbe_, PVValHelper::max_eta_phase1); + break; + case PVValHelper::phase2: + etaOfProbe_ = std::min(etaOfProbe_, PVValHelper::max_eta_phase2); + break; + default: + edm::LogWarning("LogicError") << "Unknown detector phase: " << phase_; } if (h_etaMax->GetEntries() == 0.) { h_etaMax->SetBinContent(1., etaOfProbe_); h_nbins->SetBinContent(1., nBins_); h_nLadders->SetBinContent(1., nLadders_); + h_nModZ->SetBinContent(1., nModZ_); h_pTinfo->SetBinContent(1., mypT_bins_.size()); h_pTinfo->SetBinContent(2., minPt_); h_pTinfo->SetBinContent(3., maxPt_); @@ -438,17 +499,17 @@ void PrimaryVertexValidation::analyze(const edm::Event& iEvent, const edm::Event float etaL = theDetails_.trendbins[PVValHelper::eta][i + 1]; if (tracketa >= etaF && tracketa < etaL) { - PVValHelper::fillByIndex(a_dxyEtaBiasResiduals, i, dxyRes * cmToum); - PVValHelper::fillByIndex(a_dzEtaBiasResiduals, i, dzRes * cmToum); - PVValHelper::fillByIndex(n_dxyEtaBiasResiduals, i, (dxyRes) / dxy_err); - PVValHelper::fillByIndex(n_dzEtaBiasResiduals, i, (dzRes) / dz_err); + PVValHelper::fillByIndex(a_dxyEtaBiasResiduals, i, dxyRes * cmToum, "1"); + PVValHelper::fillByIndex(a_dzEtaBiasResiduals, i, dzRes * cmToum, "2"); + PVValHelper::fillByIndex(n_dxyEtaBiasResiduals, i, (dxyRes) / dxy_err, "3"); + PVValHelper::fillByIndex(n_dzEtaBiasResiduals, i, (dzRes) / dz_err, "4"); } if (trackphi >= phiF && trackphi < phiL) { - PVValHelper::fillByIndex(a_dxyPhiBiasResiduals, i, dxyRes * cmToum); - PVValHelper::fillByIndex(a_dzPhiBiasResiduals, i, dzRes * cmToum); - PVValHelper::fillByIndex(n_dxyPhiBiasResiduals, i, (dxyRes) / dxy_err); - PVValHelper::fillByIndex(n_dzPhiBiasResiduals, i, (dzRes) / dz_err); + PVValHelper::fillByIndex(a_dxyPhiBiasResiduals, i, dxyRes * cmToum, "5"); + PVValHelper::fillByIndex(a_dzPhiBiasResiduals, i, dzRes * cmToum, "6"); + PVValHelper::fillByIndex(n_dxyPhiBiasResiduals, i, (dxyRes) / dxy_err, "7"); + PVValHelper::fillByIndex(n_dzPhiBiasResiduals, i, (dzRes) / dz_err, "8"); for (int j = 0; j < nBins_; j++) { float etaJ = theDetails_.trendbins[PVValHelper::eta][j]; @@ -630,7 +691,7 @@ void PrimaryVertexValidation::analyze(const edm::Event& iEvent, const edm::Event int nhitinFPIX = hits.numberOfValidPixelEndcapHits(); for (trackingRecHit_iterator iHit = theTTrack.recHitsBegin(); iHit != theTTrack.recHitsEnd(); ++iHit) { if ((*iHit)->isValid()) { - if (this->isHit2D(**iHit)) { + if (this->isHit2D(**iHit, phase_)) { ++nRecHit2D; } else { ++nRecHit1D; @@ -867,19 +928,19 @@ void PrimaryVertexValidation::analyze(const edm::Event& iEvent, const edm::Event if (std::abs(tracketa) < 1.5 && (trackpt >= pTF && trackpt < pTL)) { if (debug_) edm::LogInfo("PrimaryVertexValidation") << "passes this cut: " << mypT_bins_[ipTBin] << std::endl; - PVValHelper::fillByIndex(h_dxy_pT_, ipTBin, dxyFromMyVertex * cmToum); - PVValHelper::fillByIndex(h_dz_pT_, ipTBin, dzFromMyVertex * cmToum); - PVValHelper::fillByIndex(h_norm_dxy_pT_, ipTBin, dxyFromMyVertex / s_ip2dpv_err); - PVValHelper::fillByIndex(h_norm_dz_pT_, ipTBin, dzFromMyVertex / dz_err); + PVValHelper::fillByIndex(h_dxy_pT_, ipTBin, dxyFromMyVertex * cmToum, "9"); + PVValHelper::fillByIndex(h_dz_pT_, ipTBin, dzFromMyVertex * cmToum, "10"); + PVValHelper::fillByIndex(h_norm_dxy_pT_, ipTBin, dxyFromMyVertex / s_ip2dpv_err, "11"); + PVValHelper::fillByIndex(h_norm_dz_pT_, ipTBin, dzFromMyVertex / dz_err, "12"); if (std::abs(tracketa) < 1.) { if (debug_) edm::LogInfo("PrimaryVertexValidation") << "passes tight eta cut: " << mypT_bins_[ipTBin] << std::endl; - PVValHelper::fillByIndex(h_dxy_Central_pT_, ipTBin, dxyFromMyVertex * cmToum); - PVValHelper::fillByIndex(h_dz_Central_pT_, ipTBin, dzFromMyVertex * cmToum); - PVValHelper::fillByIndex(h_norm_dxy_Central_pT_, ipTBin, dxyFromMyVertex / s_ip2dpv_err); - PVValHelper::fillByIndex(h_norm_dz_Central_pT_, ipTBin, dzFromMyVertex / dz_err); + PVValHelper::fillByIndex(h_dxy_Central_pT_, ipTBin, dxyFromMyVertex * cmToum, "13"); + PVValHelper::fillByIndex(h_dz_Central_pT_, ipTBin, dzFromMyVertex * cmToum, "14"); + PVValHelper::fillByIndex(h_norm_dxy_Central_pT_, ipTBin, dxyFromMyVertex / s_ip2dpv_err, "15"); + PVValHelper::fillByIndex(h_norm_dz_Central_pT_, ipTBin, dzFromMyVertex / dz_err, "16"); } } } @@ -919,12 +980,12 @@ void PrimaryVertexValidation::analyze(const edm::Event& iEvent, const edm::Event h_probeHits_->Fill(theTrack.numberOfValidHits()); h_probeHits1D_->Fill(nRecHit1D); h_probeHits2D_->Fill(nRecHit2D); - h_probeHitsInTIB_->Fill(nhitinBPIX); - h_probeHitsInTOB_->Fill(nhitinFPIX); - h_probeHitsInTID_->Fill(nhitinTIB); - h_probeHitsInTEC_->Fill(nhitinTID); - h_probeHitsInBPIX_->Fill(nhitinTOB); - h_probeHitsInFPIX_->Fill(nhitinTEC); + h_probeHitsInTIB_->Fill(nhitinTIB); + h_probeHitsInTOB_->Fill(nhitinTOB); + h_probeHitsInTID_->Fill(nhitinTID); + h_probeHitsInTEC_->Fill(nhitinTEC); + h_probeHitsInBPIX_->Fill(nhitinBPIX); + h_probeHitsInFPIX_->Fill(nhitinFPIX); float dxyRecoV = theTrack.dz(theRecoVertex); float dzRecoV = theTrack.dxy(theRecoVertex); @@ -974,14 +1035,14 @@ void PrimaryVertexValidation::analyze(const edm::Event& iEvent, const edm::Event if (ladder_num > 0 && module_num > 0) { LogDebug("PrimaryVertexValidation") - << " ladder_num" << ladder_num << " module_num" << module_num << std::endl; + << " ladder_num: " << ladder_num << " module_num: " << module_num << std::endl; - PVValHelper::fillByIndex(h_dxy_modZ_, module_num - 1, dxyFromMyVertex * cmToum); - PVValHelper::fillByIndex(h_dz_modZ_, module_num - 1, dzFromMyVertex * cmToum); - PVValHelper::fillByIndex(h_norm_dxy_modZ_, module_num - 1, dxyFromMyVertex / s_ip2dpv_err); - PVValHelper::fillByIndex(h_norm_dz_modZ_, module_num - 1, dzFromMyVertex / dz_err); + PVValHelper::fillByIndex(h_dxy_modZ_, module_num - 1, dxyFromMyVertex * cmToum, "17"); + PVValHelper::fillByIndex(h_dz_modZ_, module_num - 1, dzFromMyVertex * cmToum, "18"); + PVValHelper::fillByIndex(h_norm_dxy_modZ_, module_num - 1, dxyFromMyVertex / s_ip2dpv_err, "19"); + PVValHelper::fillByIndex(h_norm_dz_modZ_, module_num - 1, dzFromMyVertex / dz_err, "20"); - PVValHelper::fillByIndex(h_dxy_ladder_, ladder_num - 1, dxyFromMyVertex * cmToum); + PVValHelper::fillByIndex(h_dxy_ladder_, ladder_num - 1, dxyFromMyVertex * cmToum, "21"); LogDebug("PrimaryVertexValidation") << "h_dxy_ladder size:" << h_dxy_ladder_.size() << std::endl; @@ -991,11 +1052,11 @@ void PrimaryVertexValidation::analyze(const edm::Event& iEvent, const edm::Event PVValHelper::fillByIndex(h_dxy_ladderOverlap_, ladder_num - 1, dxyFromMyVertex * cmToum); } - PVValHelper::fillByIndex(h_dz_ladder_, ladder_num - 1, dzFromMyVertex * cmToum); - PVValHelper::fillByIndex(h_norm_dxy_ladder_, ladder_num - 1, dxyFromMyVertex / s_ip2dpv_err); - PVValHelper::fillByIndex(h_norm_dz_ladder_, ladder_num - 1, dzFromMyVertex / dz_err); - h2_probePassingLayer1Map_->Fill(module_num, ladder_num); + + PVValHelper::fillByIndex(h_dz_ladder_, ladder_num - 1, dzFromMyVertex * cmToum, "22"); + PVValHelper::fillByIndex(h_norm_dxy_ladder_, ladder_num - 1, dxyFromMyVertex / s_ip2dpv_err, "23"); + PVValHelper::fillByIndex(h_norm_dz_ladder_, ladder_num - 1, dzFromMyVertex / dz_err, "24"); } // filling the binned distributions @@ -1007,37 +1068,37 @@ void PrimaryVertexValidation::analyze(const edm::Event& iEvent, const edm::Event float etaL = theDetails_.trendbins[PVValHelper::eta][i + 1]; if (tracketa >= etaF && tracketa < etaL) { - PVValHelper::fillByIndex(a_dxyEtaResiduals, i, dxyFromMyVertex * cmToum, "1"); - PVValHelper::fillByIndex(a_dxEtaResiduals, i, my_dx * cmToum, "2"); - PVValHelper::fillByIndex(a_dyEtaResiduals, i, my_dy * cmToum, "3"); - PVValHelper::fillByIndex(a_dzEtaResiduals, i, dzFromMyVertex * cmToum, "4"); - PVValHelper::fillByIndex(n_dxyEtaResiduals, i, dxyFromMyVertex / s_ip2dpv_err, "5"); - PVValHelper::fillByIndex(n_dzEtaResiduals, i, dzFromMyVertex / dz_err, "6"); - PVValHelper::fillByIndex(a_IP2DEtaResiduals, i, s_ip2dpv_corr * cmToum, "7"); - PVValHelper::fillByIndex(n_IP2DEtaResiduals, i, s_ip2dpv_corr / s_ip2dpv_err, "8"); - PVValHelper::fillByIndex(a_reszEtaResiduals, i, restrkz * cmToum, "9"); - PVValHelper::fillByIndex(n_reszEtaResiduals, i, pulltrkz, "10"); - PVValHelper::fillByIndex(a_d3DEtaResiduals, i, ip3d_corr * cmToum, "11"); - PVValHelper::fillByIndex(n_d3DEtaResiduals, i, ip3d_corr / ip3d_err, "12"); - PVValHelper::fillByIndex(a_IP3DEtaResiduals, i, s_ip3dpv_corr * cmToum, "13"); - PVValHelper::fillByIndex(n_IP3DEtaResiduals, i, s_ip3dpv_corr / s_ip3dpv_err, "14"); + PVValHelper::fillByIndex(a_dxyEtaResiduals, i, dxyFromMyVertex * cmToum, "25"); + PVValHelper::fillByIndex(a_dxEtaResiduals, i, my_dx * cmToum, "26"); + PVValHelper::fillByIndex(a_dyEtaResiduals, i, my_dy * cmToum, "27"); + PVValHelper::fillByIndex(a_dzEtaResiduals, i, dzFromMyVertex * cmToum, "28"); + PVValHelper::fillByIndex(n_dxyEtaResiduals, i, dxyFromMyVertex / s_ip2dpv_err, "29"); + PVValHelper::fillByIndex(n_dzEtaResiduals, i, dzFromMyVertex / dz_err, "30"); + PVValHelper::fillByIndex(a_IP2DEtaResiduals, i, s_ip2dpv_corr * cmToum, "31"); + PVValHelper::fillByIndex(n_IP2DEtaResiduals, i, s_ip2dpv_corr / s_ip2dpv_err, "32"); + PVValHelper::fillByIndex(a_reszEtaResiduals, i, restrkz * cmToum, "33"); + PVValHelper::fillByIndex(n_reszEtaResiduals, i, pulltrkz, "34"); + PVValHelper::fillByIndex(a_d3DEtaResiduals, i, ip3d_corr * cmToum, "35"); + PVValHelper::fillByIndex(n_d3DEtaResiduals, i, ip3d_corr / ip3d_err, "36"); + PVValHelper::fillByIndex(a_IP3DEtaResiduals, i, s_ip3dpv_corr * cmToum, "37"); + PVValHelper::fillByIndex(n_IP3DEtaResiduals, i, s_ip3dpv_corr / s_ip3dpv_err, "38"); } if (trackphi >= phiF && trackphi < phiL) { - PVValHelper::fillByIndex(a_dxyPhiResiduals, i, dxyFromMyVertex * cmToum, "15"); - PVValHelper::fillByIndex(a_dxPhiResiduals, i, my_dx * cmToum, "16"); - PVValHelper::fillByIndex(a_dyPhiResiduals, i, my_dy * cmToum, "17"); - PVValHelper::fillByIndex(a_dzPhiResiduals, i, dzFromMyVertex * cmToum, "18"); - PVValHelper::fillByIndex(n_dxyPhiResiduals, i, dxyFromMyVertex / s_ip2dpv_err, "19"); - PVValHelper::fillByIndex(n_dzPhiResiduals, i, dzFromMyVertex / dz_err, "20"); - PVValHelper::fillByIndex(a_IP2DPhiResiduals, i, s_ip2dpv_corr * cmToum, "21"); - PVValHelper::fillByIndex(n_IP2DPhiResiduals, i, s_ip2dpv_corr / s_ip2dpv_err, "22"); - PVValHelper::fillByIndex(a_reszPhiResiduals, i, restrkz * cmToum, "23"); - PVValHelper::fillByIndex(n_reszPhiResiduals, i, pulltrkz, "24"); - PVValHelper::fillByIndex(a_d3DPhiResiduals, i, ip3d_corr * cmToum, "25"); - PVValHelper::fillByIndex(n_d3DPhiResiduals, i, ip3d_corr / ip3d_err, "26"); - PVValHelper::fillByIndex(a_IP3DPhiResiduals, i, s_ip3dpv_corr * cmToum, "27"); - PVValHelper::fillByIndex(n_IP3DPhiResiduals, i, s_ip3dpv_corr / s_ip3dpv_err, "28"); + PVValHelper::fillByIndex(a_dxyPhiResiduals, i, dxyFromMyVertex * cmToum, "39"); + PVValHelper::fillByIndex(a_dxPhiResiduals, i, my_dx * cmToum, "40"); + PVValHelper::fillByIndex(a_dyPhiResiduals, i, my_dy * cmToum, "41"); + PVValHelper::fillByIndex(a_dzPhiResiduals, i, dzFromMyVertex * cmToum, "42"); + PVValHelper::fillByIndex(n_dxyPhiResiduals, i, dxyFromMyVertex / s_ip2dpv_err, "43"); + PVValHelper::fillByIndex(n_dzPhiResiduals, i, dzFromMyVertex / dz_err, "44"); + PVValHelper::fillByIndex(a_IP2DPhiResiduals, i, s_ip2dpv_corr * cmToum, "45"); + PVValHelper::fillByIndex(n_IP2DPhiResiduals, i, s_ip2dpv_corr / s_ip2dpv_err, "46"); + PVValHelper::fillByIndex(a_reszPhiResiduals, i, restrkz * cmToum, "47"); + PVValHelper::fillByIndex(n_reszPhiResiduals, i, pulltrkz, "48"); + PVValHelper::fillByIndex(a_d3DPhiResiduals, i, ip3d_corr * cmToum, "49"); + PVValHelper::fillByIndex(n_d3DPhiResiduals, i, ip3d_corr / ip3d_err, "50"); + PVValHelper::fillByIndex(a_IP3DPhiResiduals, i, s_ip3dpv_corr * cmToum, "51"); + PVValHelper::fillByIndex(n_IP3DPhiResiduals, i, s_ip3dpv_corr / s_ip3dpv_err, "52"); for (int j = 0; j < nBins_; j++) { float etaJ = theDetails_.trendbins[PVValHelper::eta][j]; @@ -1097,15 +1158,15 @@ void PrimaryVertexValidation::analyze(const edm::Event& iEvent, const edm::Event } // ------------ method called to discriminate 1D from 2D hits ------------ -bool PrimaryVertexValidation::isHit2D(const TrackingRecHit& hit) const { +bool PrimaryVertexValidation::isHit2D(const TrackingRecHit& hit, const PVValHelper::detectorPhase& thePhase) const { if (hit.dimension() < 2) { return false; // some (muon...) stuff really has RecHit1D } else { const DetId detId(hit.geographicalId()); if (detId.det() == DetId::Tracker) { if (detId.subdetId() == PixelSubdetector::PixelBarrel || detId.subdetId() == PixelSubdetector::PixelEndcap) { - return true; // pixel is always 2D - } else { // should be SiStrip now + return true; // pixel is always 2D + } else if (thePhase != PVValHelper::phase2) { // should be SiStrip now if (dynamic_cast(&hit)) return false; // normal hit else if (dynamic_cast(&hit)) @@ -1113,14 +1174,16 @@ bool PrimaryVertexValidation::isHit2D(const TrackingRecHit& hit) const { else if (dynamic_cast(&hit)) return false; // crazy hit... else { - edm::LogError("UnkownType") << "@SUB=AlignmentTrackSelector::isHit2D" - << "Tracker hit not in pixel and neither SiStripRecHit2D nor " - << "SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D."; + edm::LogError("UnknownType") << "@SUB=PrimaryVertexValidation::isHit2D" + << "Tracker hit not in pixel and neither SiStripRecHit2D nor " + << "SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D."; return false; } + } else { + return false; } } else { // not tracker?? - edm::LogWarning("DetectorMismatch") << "@SUB=AlignmentTrackSelector::isHit2D" + edm::LogWarning("DetectorMismatch") << "@SUB=PrimaryVertexValidation::isHit2D" << "Hit not in tracker with 'official' dimension >=2."; return true; // dimension() >= 2 so accept that... } @@ -1276,7 +1339,7 @@ void PrimaryVertexValidation::beginJob() { } h_runFromEvent = - EventFeatures.make("h_runFromEvent", "run number from config;;run number (from event)", 1, -0.5, 0.5); + EventFeatures.make("h_runFromEvent", "run number from event;;run number (from event)", 1, -0.5, 0.5); h_nTracks = EventFeatures.make("h_nTracks", "number of tracks per event;n_{tracks}/event;n_{events}", 300, -0.5, 299.5); h_nClus = @@ -1314,6 +1377,7 @@ void PrimaryVertexValidation::beginJob() { h_nbins = EventFeatures.make("nbins", "nbins", 1, -0.5, 0.5); h_nLadders = EventFeatures.make("nladders", "n. ladders", 1, -0.5, 0.5); + h_nModZ = EventFeatures.make("nModZ", "n. modules along z", 1, -0.5, 0.5); // probe track histograms TFileDirectory ProbeFeatures = fs->mkdir("ProbeTrackFeatures"); @@ -1322,23 +1386,24 @@ void PrimaryVertexValidation::beginJob() { h_probePtRebin_ = ProbeFeatures.make( "h_probePtRebin", "p_{T} of probe track;track p_{T} (GeV); tracks", mypT_bins_.size() - 1, mypT_bins_.data()); h_probeP_ = ProbeFeatures.make("h_probeP", "momentum of probe track;track p (GeV); tracks", 100, 0., 100.); - h_probeEta_ = ProbeFeatures.make("h_probeEta", "#eta of the probe track;track #eta;tracks", 54, -2.8, 2.8); + h_probeEta_ = ProbeFeatures.make( + "h_probeEta", "#eta of the probe track;track #eta;tracks", 54, -etaOfProbe_, etaOfProbe_); h_probePhi_ = ProbeFeatures.make("h_probePhi", "#phi of probe track;track #phi (rad);tracks", 100, -3.15, 3.15); h2_probeEtaPhi_ = ProbeFeatures.make("h2_probeEtaPhi", "probe track #phi vs #eta;#eta of probe track;track #phi of probe track (rad); tracks", 54, - -2.8, - 2.8, + -etaOfProbe_, + etaOfProbe_, 100, - -3.15, - 3.15); + -M_PI, + M_PI); h2_probeEtaPt_ = ProbeFeatures.make("h2_probeEtaPt", "probe track p_{T} vs #eta;#eta of probe track;track p_{T} (GeV); tracks", 54, - -2.8, - 2.8, + -etaOfProbe_, + etaOfProbe_, 100, 0., 50.); @@ -1411,21 +1476,28 @@ void PrimaryVertexValidation::beginJob() { h_probeHitsInFPIX_ = ProbeFeatures.make("h_probeNRechitsFPIX", "N_{hits} FPIX;N_{hits} FPIX;tracks", 40, -0.5, 39.5); - h_probeL1Ladder_ = - ProbeFeatures.make("h_probeL1Ladder", "Ladder number (L1 hit); ladder number", 22, -1.5, 20.5); - h_probeL1Module_ = - ProbeFeatures.make("h_probeL1Module", "Module number (L1 hit); module number", 10, -1.5, 8.5); + h_probeL1Ladder_ = ProbeFeatures.make( + "h_probeL1Ladder", "Ladder number (L1 hit); ladder number", nLadders_ + 2, -1.5, nLadders_ + 0.5); + h_probeL1Module_ = ProbeFeatures.make( + "h_probeL1Module", "Module number (L1 hit); module number", nModZ_ + 2, -1.5, nModZ_ + 0.5); + + h2_probeLayer1Map_ = ProbeFeatures.make("h2_probeLayer1Map", + "Position in Layer 1 of first hit;module number;ladder number", + nModZ_, + 0.5, + nModZ_ + 0.5, + nLadders_, + 0.5, + nLadders_ + 0.5); - h2_probeLayer1Map_ = ProbeFeatures.make( - "h2_probeLayer1Map", "Position in Layer 1 of first hit;module number;ladder number", 8, 0.5, 8.5, 12, 0.5, 12.5); h2_probePassingLayer1Map_ = ProbeFeatures.make("h2_probePassingLayer1Map", "Position in Layer 1 of first hit;module number;ladder number", - 8, + nModZ_, 0.5, - 8.5, - 12, + nModZ_ + 0.5, + nLadders_, 0.5, - 12.5); + nLadders_ + 0.5); h_probeHasBPixL1Overlap_ = ProbeFeatures.make("h_probeHasBPixL1Overlap", "n. hits in L1;n. L1-BPix hits;tracks", 5, -0.5, 4.5); h_probeL1ClusterProb_ = ProbeFeatures.make( @@ -1585,10 +1657,10 @@ void PrimaryVertexValidation::beginJob() { // book residuals vs module number TFileDirectory AbsTransModZRes = fs->mkdir("Abs_Transv_modZ_Residuals"); - h_dxy_modZ_ = bookResidualsHistogram(AbsTransModZRes, 8, PVValHelper::dxy, PVValHelper::modZ); + h_dxy_modZ_ = bookResidualsHistogram(AbsTransModZRes, nModZ_, PVValHelper::dxy, PVValHelper::modZ); TFileDirectory AbsLongModZRes = fs->mkdir("Abs_Long_modZ_Residuals"); - h_dz_modZ_ = bookResidualsHistogram(AbsLongModZRes, 8, PVValHelper::dz, PVValHelper::modZ); + h_dz_modZ_ = bookResidualsHistogram(AbsLongModZRes, nModZ_, PVValHelper::dz, PVValHelper::modZ); // _ _ _ _ _ ___ _ _ _ // | \| |___ _ _ _ __ __ _| (_)______ __| | | _ \___ __(_)__| |_ _ __ _| |___ @@ -1597,10 +1669,10 @@ void PrimaryVertexValidation::beginJob() { // TFileDirectory NormTransModZRes = fs->mkdir("Norm_Transv_modZ_Residuals"); - h_norm_dxy_modZ_ = bookResidualsHistogram(NormTransModZRes, 8, PVValHelper::norm_dxy, PVValHelper::modZ, true); + h_norm_dxy_modZ_ = bookResidualsHistogram(NormTransModZRes, nModZ_, PVValHelper::norm_dxy, PVValHelper::modZ, true); TFileDirectory NormLongModZRes = fs->mkdir("Norm_Long_modZ_Residuals"); - h_norm_dz_modZ_ = bookResidualsHistogram(NormLongModZRes, 8, PVValHelper::norm_dz, PVValHelper::modZ, true); + h_norm_dz_modZ_ = bookResidualsHistogram(NormLongModZRes, nModZ_, PVValHelper::norm_dz, PVValHelper::modZ, true); TFileDirectory AbsTransLadderRes = fs->mkdir("Abs_Transv_ladder_Residuals"); h_dxy_ladder_ = bookResidualsHistogram(AbsTransLadderRes, nLadders_, PVValHelper::dxy, PVValHelper::ladder); @@ -1627,7 +1699,7 @@ void PrimaryVertexValidation::beginJob() { // book residuals as function of nLadders and nModules for (unsigned int iLadder = 0; iLadder < nLadders_; iLadder++) { - for (unsigned int iModule = 0; iModule < 8; iModule++) { + for (unsigned int iModule = 0; iModule < nModZ_; iModule++) { a_dxyL1ResidualsMap[iLadder][iModule] = AbsL1Map.make(Form("histo_dxy_ladder%i_module%i", iLadder, iModule), Form("d_{xy} ladder=%i module=%i;d_{xy} [#mum];tracks", iLadder, iModule), @@ -2593,6 +2665,14 @@ void PrimaryVertexValidation::beginJob() { } // ------------ method called once each job just after ending the event loop ------------ void PrimaryVertexValidation::endJob() { + // shring the histograms to fit + h_probeL1Ladder_->GetXaxis()->SetRangeUser(-1.5, nLadders_ + 0.5); + h_probeL1Module_->GetXaxis()->SetRangeUser(-1.5, nModZ_ + 0.5); + h2_probeLayer1Map_->GetXaxis()->SetRangeUser(0.5, nModZ_ + 0.5); + h2_probeLayer1Map_->GetYaxis()->SetRangeUser(0.5, nLadders_ + 0.5); + h2_probePassingLayer1Map_->GetXaxis()->SetRangeUser(0.5, nModZ_ + 0.5); + h2_probePassingLayer1Map_->GetYaxis()->SetRangeUser(0.5, nLadders_ + 0.5); + TFileDirectory RunFeatures = fs->mkdir("RunFeatures"); h_runStartTimes = RunFeatures.make( "runStartTimes", "run start times", runNumbersTimesLog_.size(), 0, runNumbersTimesLog_.size()); @@ -2713,18 +2793,18 @@ void PrimaryVertexValidation::endJob() { a_dxyL1MeanMap = Mean2DMapsDir.make("means_dxy_l1map", "#LT d_{xy} #GT map;module number [z];ladder number [#varphi]", - 8, + nModZ_, 0., - 8., + nModZ_, nLadders_, 0., nLadders_); a_dzL1MeanMap = Mean2DMapsDir.make("means_dz_l1map", "#LT d_{z} #GT map;module number [z];ladder number [#varphi]", - 8, + nModZ_, 0., - 8., + nModZ_, nLadders_, 0., nLadders_); @@ -2732,36 +2812,36 @@ void PrimaryVertexValidation::endJob() { n_dxyL1MeanMap = Mean2DMapsDir.make("norm_means_dxy_l1map", "#LT d_{xy}/#sigma_{d_{xy}} #GT map;module number [z];ladder number [#varphi]", - 8, + nModZ_, 0., - 8., + nModZ_, nLadders_, 0., nLadders_); n_dzL1MeanMap = Mean2DMapsDir.make("norm_means_dz_l1map", "#LT d_{z}/#sigma_{d_{z}} #GT map;module number [z];ladder number [#varphi]", - 8, + nModZ_, 0., - 8., + nModZ_, nLadders_, 0., nLadders_); a_dxyL1WidthMap = Width2DMapsDir.make("widths_dxy_l1map", "#sigma_{d_{xy}} map;module number [z];ladder number [#varphi]", - 8, + nModZ_, 0., - 8., + nModZ_, nLadders_, 0., nLadders_); a_dzL1WidthMap = Width2DMapsDir.make("widths_dz_l1map", "#sigma_{d_{z}} map;module number [z];ladder number [#varphi]", - 8, + nModZ_, 0., - 8., + nModZ_, nLadders_, 0., nLadders_); @@ -2769,9 +2849,9 @@ void PrimaryVertexValidation::endJob() { n_dxyL1WidthMap = Width2DMapsDir.make("norm_widths_dxy_l1map", "width(d_{xy}/#sigma_{d_{xy}}) map;module number [z];ladder number [#varphi]", - 8, + nModZ_, 0., - 8., + nModZ_, nLadders_, 0., nLadders_); @@ -2779,9 +2859,9 @@ void PrimaryVertexValidation::endJob() { n_dzL1WidthMap = Width2DMapsDir.make("norm_widths_dz_l1map", "width(d_{z}/#sigma_{d_{z}}) map;module number [z];ladder number [#varphi]", - 8, + nModZ_, 0., - 8., + nModZ_, nLadders_, 0., nLadders_); @@ -2945,15 +3025,15 @@ void PrimaryVertexValidation::endJob() { // 2D Maps of residuals in bins of L1 modules - fillMap(a_dxyL1MeanMap, a_dxyL1ResidualsMap, PVValHelper::MEAN, 8, nLadders_); - fillMap(a_dxyL1WidthMap, a_dxyL1ResidualsMap, PVValHelper::WIDTH, 8, nLadders_); - fillMap(a_dzL1MeanMap, a_dzL1ResidualsMap, PVValHelper::MEAN, 8, nLadders_); - fillMap(a_dzL1WidthMap, a_dzL1ResidualsMap, PVValHelper::WIDTH, 8, nLadders_); + fillMap(a_dxyL1MeanMap, a_dxyL1ResidualsMap, PVValHelper::MEAN, nModZ_, nLadders_); + fillMap(a_dxyL1WidthMap, a_dxyL1ResidualsMap, PVValHelper::WIDTH, nModZ_, nLadders_); + fillMap(a_dzL1MeanMap, a_dzL1ResidualsMap, PVValHelper::MEAN, nModZ_, nLadders_); + fillMap(a_dzL1WidthMap, a_dzL1ResidualsMap, PVValHelper::WIDTH, nModZ_, nLadders_); - fillMap(n_dxyL1MeanMap, n_dxyL1ResidualsMap, PVValHelper::MEAN, 8, nLadders_); - fillMap(n_dxyL1WidthMap, n_dxyL1ResidualsMap, PVValHelper::WIDTH, 8, nLadders_); - fillMap(n_dzL1MeanMap, n_dzL1ResidualsMap, PVValHelper::MEAN, 8, nLadders_); - fillMap(n_dzL1WidthMap, n_dzL1ResidualsMap, PVValHelper::WIDTH, 8, nLadders_); + fillMap(n_dxyL1MeanMap, n_dxyL1ResidualsMap, PVValHelper::MEAN, nModZ_, nLadders_); + fillMap(n_dxyL1WidthMap, n_dxyL1ResidualsMap, PVValHelper::WIDTH, nModZ_, nLadders_); + fillMap(n_dzL1MeanMap, n_dzL1ResidualsMap, PVValHelper::MEAN, nModZ_, nLadders_); + fillMap(n_dzL1WidthMap, n_dzL1ResidualsMap, PVValHelper::WIDTH, nModZ_, nLadders_); } //************************************************************* @@ -3631,18 +3711,8 @@ void PrimaryVertexValidation::fillDescriptions(edm::ConfigurationDescriptions& d desc.add("BeamSpotTag", edm::InputTag("offlineBeamSpot")); // track filtering - edm::ParameterSetDescription psd0; - psd0.add("maxNormalizedChi2", 5.0); - psd0.add("minPt", 0.0); - psd0.add("algorithm", "filter"); - psd0.add("maxEta", 5.0); - psd0.add("maxD0Significance", 5.0); - psd0.add("maxD0Error", 1.0); - psd0.add("maxDzError", 1.0); - psd0.add("trackQuality", "any"); - psd0.add("minPixelLayersWithHits", 2); - psd0.add("minSiliconLayersWithHits", 5); + TrackFilterForPVFinding::fillPSetDescription(psd0); psd0.add("numTracksThreshold", 0); // HI only desc.add("TkFilterParameters", psd0); @@ -3651,30 +3721,11 @@ void PrimaryVertexValidation::fillDescriptions(edm::ConfigurationDescriptions& d edm::ParameterSetDescription psd0; { edm::ParameterSetDescription psd1; - psd1.addUntracked("verbose", false); - psd1.addUntracked("zdumpcenter", 0.); - psd1.addUntracked("zdumpwidth", 20.); - psd1.addUntracked("use_vdt", false); // obsolete, appears in HLT configs - psd1.add("d0CutOff", 3.0); - psd1.add("Tmin", 2.0); - psd1.add("delta_lowT", 0.001); - psd1.add("zmerge", 0.01); - psd1.add("dzCutOff", 3.0); - psd1.add("Tpurge", 2.0); - psd1.add("convergence_mode", 0); - psd1.add("delta_highT", 0.01); - psd1.add("Tstop", 0.5); - psd1.add("coolingFactor", 0.6); - psd1.add("vertexSize", 0.006); - psd1.add("uniquetrkweight", 0.8); - psd1.add("zrange", 4.0); - psd1.add("tmerge", 0.01); // 4D only - psd1.add("dtCutOff", 4.); // 4D only - psd1.add("t0Max", 1.0); // 4D only - psd1.add("vertexSizeTime", 0.008); // 4D only + DAClusterizerInZ_vect::fillPSetDescription(psd1); psd0.add("TkDAClusParameters", psd1); + edm::ParameterSetDescription psd2; - psd2.add("zSeparation", 1.0); + GapClusterizerInZ::fillPSetDescription(psd2); psd0.add("TkGapClusParameters", psd2); } psd0.add("algorithm", "DA_vect"); diff --git a/Alignment/OfflineValidation/plugins/PrimaryVertexValidation.h b/Alignment/OfflineValidation/plugins/PrimaryVertexValidation.h index 09579e315fb84..3d5f4603fd18a 100644 --- a/Alignment/OfflineValidation/plugins/PrimaryVertexValidation.h +++ b/Alignment/OfflineValidation/plugins/PrimaryVertexValidation.h @@ -34,7 +34,6 @@ #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Frameworkfwd.h" @@ -83,7 +82,7 @@ class PrimaryVertexValidation : public edm::one::EDAnalyzer getRunTime(const edm::EventSetup& iSetup) const; - bool isHit2D(const TrackingRecHit& hit) const; + bool isHit2D(const TrackingRecHit& hit, const PVValHelper::detectorPhase& thePhase) const; bool hasFirstLayerPixelHits(const reco::TransientTrack& track); std::pair pixelHitsCheck(const reco::TransientTrack& track); Measurement1D getMedian(TH1F* histo); @@ -176,7 +175,7 @@ class PrimaryVertexValidation : public edm::one::EDAnalyzer > runNumbersTimesLog_; diff --git a/Alignment/OfflineValidation/plugins/ResidualRefitting.cc b/Alignment/OfflineValidation/plugins/ResidualRefitting.cc index 5395d670f0cb0..d7ec269aad773 100644 --- a/Alignment/OfflineValidation/plugins/ResidualRefitting.cc +++ b/Alignment/OfflineValidation/plugins/ResidualRefitting.cc @@ -13,7 +13,6 @@ #include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Utilities/interface/EDMException.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -38,7 +37,7 @@ ResidualRefitting::ResidualRefitting(const edm::ParameterSet& cfg) : magFieldToken_(esConsumes()), topoToken_(esConsumes()), trackingGeometryToken_(esConsumes()), - propagatorToken_(esConsumes(edm::ESInputTag(cfg.getParameter("propagator")))), + propagatorToken_(esConsumes(edm::ESInputTag("", cfg.getParameter("propagator")))), outputFileName_(cfg.getUntrackedParameter("histoutputFile")), muons_(cfg.getParameter("muons")), muonsRemake_(cfg.getParameter("muonsRemake")), //This Feels Misalignment diff --git a/Alignment/OfflineValidation/plugins/TrackerGeometryCompare.cc b/Alignment/OfflineValidation/plugins/TrackerGeometryCompare.cc index cb1676b0aa1e4..409141aa94417 100644 --- a/Alignment/OfflineValidation/plugins/TrackerGeometryCompare.cc +++ b/Alignment/OfflineValidation/plugins/TrackerGeometryCompare.cc @@ -8,7 +8,7 @@ #include "CondFormats/AlignmentRecord/interface/TrackerAlignmentRcd.h" #include "CondFormats/AlignmentRecord/interface/TrackerAlignmentErrorExtendedRcd.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" + #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/ESTransientHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" diff --git a/Alignment/OfflineValidation/plugins/TrackerGeometryCompare.h b/Alignment/OfflineValidation/plugins/TrackerGeometryCompare.h index d26f7878ee6e5..d51082367c01e 100644 --- a/Alignment/OfflineValidation/plugins/TrackerGeometryCompare.h +++ b/Alignment/OfflineValidation/plugins/TrackerGeometryCompare.h @@ -16,7 +16,6 @@ */ #include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "Alignment/TrackerAlignment/interface/AlignableTracker.h" #include "CondFormats/Alignment/interface/SurveyErrors.h" diff --git a/Alignment/OfflineValidation/plugins/TrackerOfflineValidation.cc b/Alignment/OfflineValidation/plugins/TrackerOfflineValidation.cc index 14462e7b71643..18cfd9aa0fdd4 100644 --- a/Alignment/OfflineValidation/plugins/TrackerOfflineValidation.cc +++ b/Alignment/OfflineValidation/plugins/TrackerOfflineValidation.cc @@ -44,7 +44,6 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "DataFormats/DetId/interface/DetId.h" diff --git a/Alignment/OfflineValidation/plugins/ValidationMisalignedTracker.h b/Alignment/OfflineValidation/plugins/ValidationMisalignedTracker.h index 999d83d092db5..8ce6a353cc02f 100644 --- a/Alignment/OfflineValidation/plugins/ValidationMisalignedTracker.h +++ b/Alignment/OfflineValidation/plugins/ValidationMisalignedTracker.h @@ -10,7 +10,6 @@ #include "FWCore/Framework/interface/ESWatcher.h" // -#include "FWCore/Framework/interface/ESHandle.h" #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertex.h" diff --git a/Alignment/OfflineValidation/python/TkAlAllInOneTool/configTemplates.py b/Alignment/OfflineValidation/python/TkAlAllInOneTool/configTemplates.py index 64eff2b515174..31c75cd743cb5 100644 --- a/Alignment/OfflineValidation/python/TkAlAllInOneTool/configTemplates.py +++ b/Alignment/OfflineValidation/python/TkAlAllInOneTool/configTemplates.py @@ -157,9 +157,8 @@ ) process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cout', 'cerr'] process.MessageLogger.cerr.FwkReport.reportEvery = 1000 -process.MessageLogger.statistics.append('cout') +process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True) """ diff --git a/Alignment/OfflineValidation/scripts/PixelBaryCentrePlotConfig.json b/Alignment/OfflineValidation/scripts/PixelBaryCentrePlotConfig.json new file mode 100644 index 0000000000000..9f892042b971d --- /dev/null +++ b/Alignment/OfflineValidation/scripts/PixelBaryCentrePlotConfig.json @@ -0,0 +1,9 @@ +{ + "pixelDataBase": "frontier://FrontierProd/CMS_CONDITIONS", + "pixelLocalReco": "SiPixelTemplateDBObject_38T_v16_offline", + "substructures": {"BPIX":"BPIX","FPIX":"FPIX"}, + "baryCentreLabels": {"rereco":"Legacy reprocessing", + "prompt":"Alignment during data taking", + "EOY":"End-of-Year Re-reconstruction"}, + "colorScheme": {"rereco":419,"prompt":600,"EOY":632} +} diff --git a/Alignment/OfflineValidation/scripts/plotBaryCentre_VS_BeamSpot.py b/Alignment/OfflineValidation/scripts/plotBaryCentre_VS_BeamSpot.py new file mode 100755 index 0000000000000..cd9471ee0e380 --- /dev/null +++ b/Alignment/OfflineValidation/scripts/plotBaryCentre_VS_BeamSpot.py @@ -0,0 +1,518 @@ +#!/bin/env python + +import sys, os +from array import array +import optparse +from collections import OrderedDict +import json + +import ROOT +ROOT.gSystem.Load("libFWCoreFWLite.so") + +import CondCore.Utilities.conddblib as conddb + +# 1/lumiScaleFactor to go from 1/pb to 1/fb +lumiScaleFactor = 1000 + +grootargs = [] +def callback_rootargs(option, opt, value, parser): + grootargs.append(opt) + +def vararg_callback(option, opt_str, value, parser): + assert value is None + value = [] + + def floatable(str): + try: + float(str) + return True + except ValueError: + return False + + for arg in parser.rargs: + # stop on --foo like options + if arg[:2] == "--" and len(arg) > 2: + break + # stop on -a, but not on -3 or -3.0 + if arg[:1] == "-" and len(arg) > 1 and not floatable(arg): + break + value.append(arg) + + del parser.rargs[:len(value)] + setattr(parser.values, option.dest, value) + +def parseOptions(): + usage = ('usage: %prog [options]\n' + + '%prog -h for help') + parser = optparse.OptionParser(usage) + + parser.add_option("--inputFileName", dest="inputFileName", default="PixelBaryCentre.root",help="name of the ntuple file that contains the barycentre tree") + parser.add_option("--plotConfigFile", dest="plotConfigFile", default="PixelBaryCentrePlotConfig.json",help="json file that configs the plotting") + + parser.add_option("--usePixelQuality",action="store_true", dest="usePixelQuality", default=False,help="whether use SiPixelQuality") + parser.add_option("--showLumi",action="store_true", dest="showLumi", default=False,help="whether use integrated lumi as x-axis") + parser.add_option("--years", dest="years", default = [2017], action="callback", callback=vararg_callback, help="years to plot") + + parser.add_option("-l",action="callback",callback=callback_rootargs) + parser.add_option("-q",action="callback",callback=callback_rootargs) + parser.add_option("-b",action="callback",callback=callback_rootargs) + + return parser + + +def findRunIndex(run, runs) : + #runs has to be sorted + if(len(runs)==0) : + print("Empty run list!") + return -1 + elif(len(runs)==1) : + if(run>=runs[0]) : + return 0 + else : + print("Only one run but the run requested is before the run!") + return -1 + else : + # underflow + if(run <= runs[0]) : + return 0 + # overflow + elif(run >= runs[len(runs)-1]) : + return len(runs)-1 + else : + return ROOT.TAxis(len(runs)-1,array('d',runs)).FindBin(run) - 1 + + +def readBaryCentreAnalyzerTree(t, branch_names, accumulatedLumiPerRun, showLumi, isEOY) : + # to store lumi sections info for each run + run_maxlumi = {} + run_lumis = {} + + # y-axis of TGraph + # runs for all years // integrated luminosity as a function of run + runs = list(accumulatedLumiPerRun.keys()) + runs.sort() + + current_run = 0 + for iov in t : + # skip runs out-of-range + if(iov.run>runs[len(runs)-1] or iov.runruns[len(runs)-1] or iov.run=320413 and iov.run<=325175): + continue + + # if x-axis is luminosity + if(showLumi) : + run_index = findRunIndex(iov.run,runs) + instLumi = 0 + if(run_index==0) : + instLumi = accumulatedLumiPerRun[ runs[run_index] ] + if(run_index>0) : + instLumi = accumulatedLumiPerRun[ runs[run_index] ] - accumulatedLumiPerRun[ runs[run_index-1] ] + # remove runs with zero luminosity if x-axis is luminosity + if( instLumi==0 ) : #and accumulatedLumiPerRun[ runs[run_index] ]==0 ) : + continue + + if(len(run_lumis[iov.run])>1) : # lumi-based conditions + if(run_index==0) : + runlumi.append(0.0+instLumi*iov.ls*1.0/run_maxlumi[iov.run]) + else : + runlumi.append(accumulatedLumiPerRun[ runs[run_index-1] ]+instLumi*iov.ls*1.0/run_maxlumi[iov.run]) + + else : # run-based or only one-IOV in the run + runlumi.append(accumulatedLumiPerRun[ runs[run_index] ]) + + else: # else x-axis is run number + if(len(run_lumis[iov.run])>1) :#lumi-based conditions + runlumi.append(iov.run+iov.ls*1.0/run_maxlumi[iov.run]) + + else : # run-based or only one-IOV in the run + runlumi.append(iov.run) + + zeros.append(0) + + #10000 is to translate cm to micro-metre + for branch_name in branch_names : + pos_ = {"x":10000*getattr(iov, branch_name).x(), + "y":10000*getattr(iov, branch_name).y(), + "z":10000*getattr(iov, branch_name).z()} + + for coord in ["x","y","z"] : + pos[coord+"_"+branch_name].append(pos_[coord]) + # max/min + if(pos_[coord]>pos[coord+"max_"+branch_name]) : + pos[coord+"max_"+branch_name] = pos_[coord] + max_run = iov.run + if(pos_[coord]0) : + upper = upper * scale + else : + upper = upper / scale + if(lower>0) : + lower = lower / scale + else : + lower = lower * scale + range_ = upper - lower + + firstGraph = True + for label in labels : + if(firstGraph) : + gr[label].GetYaxis().SetRangeUser(lower, upper) + gr[label].GetYaxis().SetTitle(plotConfigJson["substructures"][substructure]+" barycentre ("+coord+") [#mum]") + gr[label].GetXaxis().SetTitle("Run Number") + gr[label].GetYaxis().CenterTitle(True) + gr[label].GetXaxis().CenterTitle(True) + gr[label].GetYaxis().SetTitleOffset(0.80) + gr[label].GetYaxis().SetTitleSize(0.055) + gr[label].GetXaxis().SetTitleOffset(0.80) + gr[label].GetXaxis().SetTitleSize(0.055) + gr[label].GetXaxis().SetMaxDigits(6) + if(showLumi) : + gr[label].GetXaxis().SetTitle("Delivered luminosity [1/fb]") + + gr[label].Draw("AP") + firstGraph = False + else : + gr[label].Draw("P") + + # dummy TGraph for pixel local reco changes and first-of-year Run + gr_dummyFirstRunOfTheYear = blackBox(-999, 10000, -999, -10000) + gr_dummyFirstRunOfTheYear.SetLineColor(ROOT.kBlack) + gr_dummyFirstRunOfTheYear.SetLineStyle(1) + gr_dummyFirstRunOfTheYear.Draw("L") + gr_dummyPixelReco = blackBox(-999, 10000, -999, -10000) + gr_dummyPixelReco.SetLineColor(ROOT.kGray+1) + gr_dummyPixelReco.SetLineStyle(3) + gr_dummyPixelReco.Draw("L") + gr_dummyFirstRunOfTheYear.SetTitle("First run of the year") + gr_dummyPixelReco.SetTitle("Pixel calibration update") + + for label in labels : + gr[label].SetTitle(plotConfigJson["baryCentreLabels"][label]) + legend = can.BuildLegend()#0.65, 0.65, 0.85, 0.85) + legend.SetShadowColor(0) + legend.SetFillColor(0) + legend.SetLineColor(1) + + for label in labels : + gr[label].SetTitle("") + + # Add legends + # and vertical lines + years_label = "" + for year in years : + years_label += str(year) + years_label += "+" + years_label = years_label.rstrip("+") + + # CMS logo + CMSworkInProgress = ROOT.TPaveText( xmax-0.3*width_, upper+range_*0.005, + xmax, upper+range_*0.055, "nb") + CMSworkInProgress.AddText("CMS #bf{#it{Preliminary} ("+years_label+" pp collisions)}") + CMSworkInProgress.SetTextAlign(32) #right/bottom aligned + CMSworkInProgress.SetTextSize(0.04) + CMSworkInProgress.SetFillColor(10) + CMSworkInProgress.Draw() + + # vertical lines + #pixel local reco + line_pixels = {} + for since in pixelLocalRecos : + if showLumi : + run_index = findRunIndex(since,runs) + integrated_lumi = accumulatedLumiPerRun[runs[run_index]] + line_pixels[since] = ROOT.TLine(integrated_lumi, lower, integrated_lumi, upper) + + else : + line_pixels[since] = ROOT.TLine(since, lower, since, upper) + + line_pixels[since].SetLineColor(ROOT.kGray+1) + line_pixels[since].SetLineStyle(3) + line_pixels[since].Draw() + + # years + line_years = {} + box_years = {} + text_years = {} + if(len(years)>1 or (not showLumi) ) : # indicate begining of the year if more than one year to show or use run number + for year in years : + if showLumi : + #first run of the year + run_index = findRunIndex(runsPerYear[year][0],runs) + integrated_lumi = accumulatedLumiPerRun[runs[run_index]] + line_years[year] = ROOT.TLine(integrated_lumi, lower, integrated_lumi, upper) + text_years[year] = ROOT.TPaveText( integrated_lumi+0.01*width_, upper-range_*0.05, + integrated_lumi+0.05*width_, upper-range_*0.015, "nb") + box_years[year] = blackBox(integrated_lumi+0.005*width_, upper-range_*0.01, integrated_lumi+0.055*width_, upper-range_*0.055) + else : + line_years[year] = ROOT.TLine(runsPerYear[year][0], lower, runsPerYear[year][0], upper) + text_years[year] = ROOT.TPaveText( runsPerYear[year][0]+0.01*width_, upper-range_*0.05, + runsPerYear[year][0]+0.05*width_, upper-range_*0.015, "nb") + box_years[year] = blackBox(runsPerYear[year][0]+0.01*width_, upper-range_*0.015, runsPerYear[year][0]+0.05*width_, upper-range_*0.05) + + + box_years[year].Draw("L") + line_years[year].Draw() + + # Add TextBox at the beginning of each year + text_years[year].AddText(str(year)) + text_years[year].SetTextAlign(22) + text_years[year].SetTextSize(0.025) + text_years[year].SetFillColor(10) + text_years[year].Draw() + + #legend.Draw() + can.Update() + + if(showLumi) : + can.SaveAs("baryCentre"+withPixelQuality+"_"+coord+"_"+substructure+"_"+years_label+"_IntegratedLumi.pdf") + can.SaveAs("baryCentre"+withPixelQuality+"_"+coord+"_"+substructure+"_"+years_label+"_IntegratedLumi.png") + else : + can.SaveAs("baryCentre"+withPixelQuality+"_"+coord+"_"+substructure+"_"+years_label+"_RunNumber.pdf") + can.SaveAs("baryCentre"+withPixelQuality+"_"+coord+"_"+substructure+"_"+years_label+"_RunNumber.png") + + ##################################################################################################################### + + +# main call +def Run(): + + #ROOT.gSystem.Load("libFWCoreFWLite.so") + parser=parseOptions() + (options,args) = parser.parse_args() + sys.argv = grootargs + + inputFileName = options.inputFileName + if os.path.isfile(inputFileName) == False : + print ("File "+inputFileName+" not exist!") + return -1 + + plotConfigFile = open(options.plotConfigFile) + plotConfigJson = json.load(plotConfigFile) + plotConfigFile.close() + + usePixelQuality = options.usePixelQuality + withPixelQuality = "" + if(usePixelQuality) : + withPixelQuality = "WithPixelQuality" + showLumi = options.showLumi + # order years from old to new + years = options.years + years.sort() + + # runs per year + runsPerYear = {} + for year in years : + runsPerYear[year] = [] + # integrated lumi vs run + accumulatedLumiPerRun = {} + + run_index = 0 + lastRun = 1 + + # get lumi per IOV + CMSSW_Dir = os.getenv("CMSSW_BASE") + for year in years : + inputLumiFile = CMSSW_Dir + "/src/Alignment/OfflineValidation/data/lumiperrun"+str(year)+".txt" + if os.path.isfile(inputLumiFile) == False : + print ("File "+inputLumiFile+" not exist!") + return -1 + lumiFile = open(inputLumiFile,'r') + lines = lumiFile.readlines() + + for line in lines : + # line = "run inst_lumi" + run = int(line.split()[0]) + integrated_lumi = float(line.split()[1])/lumiScaleFactor # 1/pb to 1/fb + + # runs per year + runsPerYear[year].append(run) + # integrated luminosity per run + # run number must be ordered from small to large in the text file + if(run_index == 0) : + accumulatedLumiPerRun[run] = integrated_lumi + else : + accumulatedLumiPerRun[run] = accumulatedLumiPerRun[lastRun]+integrated_lumi + + run_index+=1 + lastRun = run + + # close file + lumiFile.close() + + # order by key (year) + runsPerYear = OrderedDict(sorted(runsPerYear.items(), key=lambda t: t[0])) + # order by key (run number) + accumulatedLumiPerRun = OrderedDict(sorted(accumulatedLumiPerRun.items(), key=lambda t: t[0])) + + #pixel local reco update (IOVs/sinces) + pixelLocalRecos = [] + # connnect to ProdDB to access pixel local reco condition change + db = plotConfigJson["pixelDataBase"] + pixel_template = plotConfigJson["pixelLocalReco"] + db = db.replace("sqlite_file:", "").replace("sqlite:", "") + db = db.replace("frontier://FrontierProd/CMS_CONDITIONS", "pro") + db = db.replace("frontier://FrontierPrep/CMS_CONDITIONS", "dev") + + con = conddb.connect(url = conddb.make_url(db)) + session = con.session() + # get IOV table + IOV = session.get_dbtype(conddb.IOV) + iovs = set(session.query(IOV.since).filter(IOV.tag_name == pixel_template).all()) + session.close() + pixelLocalRecos = sorted([int(item[0]) for item in iovs]) + #pixelLocalRecos = [1, 186500, 195360, 197749, 200961, 203368, 204601, 206446, 238341, 246866, 253914, 255655, 271866, 276315, 278271, 280928, 290543, 297281, 298653, 299443, 300389, 301046, 302131, 303790, 303998, 304911, 313041, 314881, 316758, 317475, 317485, 317527, 317661, 317664, 318227, 320377, 321831, 322510, 322603, 323232, 324245] + + # substructures to plot + substructures = list(plotConfigJson["substructures"].keys()) + + # start barycentre plotter + bc = {} + try: + f = ROOT.TFile(inputFileName,"READ") + # read TTrees + for label in list(plotConfigJson["baryCentreLabels"].keys()) : + isEOY = False + t = ROOT.TTree() + if label == "" : + t = f.Get("PixelBaryCentreAnalyzer"+withPixelQuality+"/PixelBarycentre") + else : + t = f.Get("PixelBaryCentreAnalyzer"+withPixelQuality+"/PixelBarycentre_"+label) + if(label=="EOY") : + isEOY = True + + bc[label] = readBaryCentreAnalyzerTree(t, substructures, accumulatedLumiPerRun, showLumi, isEOY) + + except IOError: + print("File "+inputFileName+" not accessible") + + # plot + for substructure in substructures : + for coord in ['x','y','z'] : + plotbarycenter(bc,coord,plotConfigJson,substructure, runsPerYear,pixelLocalRecos,accumulatedLumiPerRun, withPixelQuality,showLumi) + + +if __name__ == "__main__": + Run() diff --git a/Alignment/OfflineValidation/src/PVValidationHelpers.cc b/Alignment/OfflineValidation/src/PVValidationHelpers.cc index 5fd5ecb2ea237..ab92f32edb16c 100644 --- a/Alignment/OfflineValidation/src/PVValidationHelpers.cc +++ b/Alignment/OfflineValidation/src/PVValidationHelpers.cc @@ -43,7 +43,7 @@ void PVValHelper::fillByIndex(std::vector& h, unsigned int index, double //************************************************************* { assert(!h.empty()); - if (index <= h.size()) { + if (index < h.size()) { h[index]->Fill(x); } else { edm::LogWarning("PVValidationHelpers") << "Trying to fill non-existing Histogram with index " << index @@ -224,7 +224,9 @@ std::pair PVValHelper::fitResiduals(TH1* hist) //************************************************************* { //float fitResult(9999); - //if (hist->GetEntries() < 20) return ; + if (hist->GetEntries() < 1) { + return std::make_pair(Measurement1D(0., 0.), Measurement1D(0., 0.)); + }; float mean = hist->GetMean(); float sigma = hist->GetRMS(); diff --git a/Alignment/OfflineValidation/src/TrackerValidationVariables.cc b/Alignment/OfflineValidation/src/TrackerValidationVariables.cc index 1b2159924d0a6..736cc0b8c0d2c 100644 --- a/Alignment/OfflineValidation/src/TrackerValidationVariables.cc +++ b/Alignment/OfflineValidation/src/TrackerValidationVariables.cc @@ -3,7 +3,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Utilities/interface/InputTag.h" diff --git a/Alignment/OfflineValidation/test/GeometryCentering_cfg.py b/Alignment/OfflineValidation/test/GeometryCentering_cfg.py index a541bbb8c9cbe..caa338802496d 100644 --- a/Alignment/OfflineValidation/test/GeometryCentering_cfg.py +++ b/Alignment/OfflineValidation/test/GeometryCentering_cfg.py @@ -5,7 +5,6 @@ process.load("Configuration.Geometry.GeometryDB_cff") process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['cout', 'cerr'] ### needed to get the geometry from Configuration.AlCa.GlobalTag import GlobalTag diff --git a/Alignment/OfflineValidation/test/PVValidation_TEMPL_cfg.py b/Alignment/OfflineValidation/test/PVValidation_TEMPL_cfg.py index 9f0c165281a25..55afdae9869fe 100644 --- a/Alignment/OfflineValidation/test/PVValidation_TEMPL_cfg.py +++ b/Alignment/OfflineValidation/test/PVValidation_TEMPL_cfg.py @@ -80,7 +80,6 @@ def customiseKinksAndBows(process): # Messages ################################################################### process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['cout', 'cerr'] process.MessageLogger.cerr.FwkReport.reportEvery = 1000 #################################################################### diff --git a/Alignment/OfflineValidation/test/PVValidation_T_cfg.py b/Alignment/OfflineValidation/test/PVValidation_T_cfg.py index 86adbd0727e8e..24ab7925009d4 100644 --- a/Alignment/OfflineValidation/test/PVValidation_T_cfg.py +++ b/Alignment/OfflineValidation/test/PVValidation_T_cfg.py @@ -75,7 +75,6 @@ def customiseKinksAndBows(process): # Messages ################################################################### process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['cout', 'cerr'] process.MessageLogger.cerr.FwkReport.reportEvery = 1000 #################################################################### diff --git a/Alignment/OfflineValidation/test/PixelBaryCentreAnalyzer_cfg.py b/Alignment/OfflineValidation/test/PixelBaryCentreAnalyzer_cfg.py new file mode 100644 index 0000000000000..5c6302bea001d --- /dev/null +++ b/Alignment/OfflineValidation/test/PixelBaryCentreAnalyzer_cfg.py @@ -0,0 +1,134 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("READ") + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('Configuration.EventContent.EventContent_cff') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +import FWCore.ParameterSet.VarParsing as VarParsing + +options = VarParsing.VarParsing() +options.register('lumisPerRun', + 1, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + "the number of lumis to be processed per-run.") +options.register('firstRun', + 290550, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + "the first run number be processed") +options.register('lastRun', + 325175, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + "the run number to stop") + +options.parseArguments() + +process.load("FWCore.MessageService.MessageLogger_cfi") +process.MessageLogger.cerr.FwkReport.reportEvery = options.lumisPerRun*1000 # do not clog output with I/O + +numberOfRuns = options.lastRun - options.firstRun + 1 +print("number of Runs "+str(numberOfRuns)) + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(options.lumisPerRun*numberOfRuns) ) + +#################################################################### +# Empty source +#################################################################### +#import FWCore.PythonUtilities.LumiList as LumiList +#DCSJson='/afs/cern.ch/cms/CAF/CMSCOMM/COMM_DQM/certification/Collisions16/13TeV/DCSOnly/json_DCSONLY.txt' + +process.source = cms.Source("EmptySource", + firstRun = cms.untracked.uint32(options.firstRun), + firstLuminosityBlock = cms.untracked.uint32(1), # probe one LS after the other + numberEventsInLuminosityBlock = cms.untracked.uint32(1), # probe one event per LS + numberEventsInRun = cms.untracked.uint32(options.lumisPerRun), # a number of events > the number of LS possible in a real run (5000 s ~ 32 h) + ) + +#################################################################### +# Connect to conditions DB +#################################################################### + +# either from Global Tag +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag,"auto:run2_data") + +tkAligns = {"prompt":"TrackerAlignment_PCL_byRun_v2_express","EOY":"TrackerAlignment_v24_offline","rereco":"TrackerAlignment_v29_offline"} + +for label in tkAligns.keys() : + + process.GlobalTag.toGet.append( + cms.PSet( + record = cms.string("TrackerAlignmentRcd"), + label = cms.untracked.string(label), + tag = cms.string(tkAligns[label]), + connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS") + ) + ) + + +beamSpots = {"prompt":"BeamSpotObjects_PCL_byLumi_v0_prompt","rereco":"BeamSpotObjects_2016_2017_2018UL_SpecialRuns_LumiBased_v1"} + +for label in beamSpots.keys() : + + process.GlobalTag.toGet.append( + cms.PSet( + record = cms.string("BeamSpotObjectsRcd"), + label = cms.untracked.string(label), + tag = cms.string(beamSpots[label]), + connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS") + ) + ) + +# ...or specify database connection and tag: +#from CondCore.CondDB.CondDB_cfi import * +#CondDBBeamSpotObjects = CondDB.clone(connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS')) +#process.dbInput = cms.ESSource("PoolDBESSource", +# CondDBBeamSpotObjects, +# toGet = cms.VPSet(cms.PSet(record = cms.string('BeamSpotObjectsRcd'), +# tag = cms.string('BeamSpotObjects_PCL_byLumi_v0_prompt') #choose your own favourite +# ) +# ) +# ) + +#################################################################### +# Load and configure analyzer +#################################################################### +bcLabels_ = cms.untracked.vstring("") +bsLabels_ = cms.untracked.vstring("") + +for label in tkAligns.keys() : + bcLabels_.append(label) + +for label in beamSpots.keys() : + bsLabels_.append(label) + +process.PixelBaryCentreAnalyzer = cms.EDAnalyzer("PixelBaryCentreAnalyzer", + usePixelQuality = cms.untracked.bool(False), + tkAlignLabels = bcLabels_, + beamSpotLabels = bsLabels_ + ) + +process.PixelBaryCentreAnalyzerWithPixelQuality = cms.EDAnalyzer("PixelBaryCentreAnalyzer", + usePixelQuality = cms.untracked.bool(True), + tkAlignLabels = bcLabels_, + beamSpotLabels = bsLabels_ + ) + + + +#################################################################### +# Output file +#################################################################### +process.TFileService = cms.Service("TFileService", + fileName=cms.string("PixelBaryCentre_2017.root") + ) + +# Put module in path: +process.p = cms.Path(process.PixelBaryCentreAnalyzer*process.PixelBaryCentreAnalyzerWithPixelQuality) diff --git a/Alignment/OfflineValidation/test/PrimaryVertexResolution_cfg.py b/Alignment/OfflineValidation/test/PrimaryVertexResolution_cfg.py index ccc675428e79f..369281f878834 100644 --- a/Alignment/OfflineValidation/test/PrimaryVertexResolution_cfg.py +++ b/Alignment/OfflineValidation/test/PrimaryVertexResolution_cfg.py @@ -59,7 +59,7 @@ def best_match(rcd): print("maxEvents : ", options.maxEvents) process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet(INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32(1000) # every 100th only # limit = cms.untracked.int32(10) # or limit to 10 printouts... diff --git a/Alignment/OfflineValidation/test/PrimaryVertexResolution_templ_cfg.py b/Alignment/OfflineValidation/test/PrimaryVertexResolution_templ_cfg.py index 183736a6654db..991829ad238f2 100644 --- a/Alignment/OfflineValidation/test/PrimaryVertexResolution_templ_cfg.py +++ b/Alignment/OfflineValidation/test/PrimaryVertexResolution_templ_cfg.py @@ -65,7 +65,7 @@ def best_match(rcd): print("outputFile : ", options.outputRootFile) process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet(INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32(1000) # every 100th only # limit = cms.untracked.int32(10) # or limit to 10 printouts... diff --git a/Alignment/OfflineValidation/test/dqmOfflinevalidator_cfg.py b/Alignment/OfflineValidation/test/dqmOfflinevalidator_cfg.py index 1b7d05c3384db..6fa9f0a6a5695 100644 --- a/Alignment/OfflineValidation/test/dqmOfflinevalidator_cfg.py +++ b/Alignment/OfflineValidation/test/dqmOfflinevalidator_cfg.py @@ -11,12 +11,12 @@ ## Message Logger ## process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet(INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32(100) # every 100th only # limit = cms.untracked.int32(10) # or limit to 10 printouts... )) -process.MessageLogger.statistics.append('cout') +process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True) ## diff --git a/Alignment/OfflineValidation/test/eopTreeWriter_cfg.py b/Alignment/OfflineValidation/test/eopTreeWriter_cfg.py index e067f965f07b2..6de2562cdd55e 100644 --- a/Alignment/OfflineValidation/test/eopTreeWriter_cfg.py +++ b/Alignment/OfflineValidation/test/eopTreeWriter_cfg.py @@ -6,7 +6,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'ERROR' process.MessageLogger.cerr.FwkReport.reportEvery = 10000 -process.MessageLogger.categories.append('TrackRefitter') +process.MessageLogger.TrackRefitter=dict() process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(False) ) diff --git a/Alignment/OfflineValidation/test/inspectData_cfg.py b/Alignment/OfflineValidation/test/inspectData_cfg.py index 9c6fac1ab2a84..e134ba3459e2f 100644 --- a/Alignment/OfflineValidation/test/inspectData_cfg.py +++ b/Alignment/OfflineValidation/test/inspectData_cfg.py @@ -39,7 +39,7 @@ # Message logger service ################################################################### process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet(INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32(1000) # every 100th only # limit = cms.untracked.int32(10) # or limit to 10 printouts... diff --git a/Alignment/OfflineValidation/test/offlinevalidator_cfg.py b/Alignment/OfflineValidation/test/offlinevalidator_cfg.py index c904eb1bbbde6..65bfa7c6ee43f 100644 --- a/Alignment/OfflineValidation/test/offlinevalidator_cfg.py +++ b/Alignment/OfflineValidation/test/offlinevalidator_cfg.py @@ -6,14 +6,14 @@ ## Message Logger #################################################################### process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet(INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32(1000) # every 100th only # limit = cms.untracked.int32(10) # or limit to 10 printouts... )) -process.MessageLogger.statistics.append('cout') +process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True) process.options = cms.untracked.PSet( Rethrow = cms.untracked.vstring("ProductNotFound") # make this exception fatal # , fileMode = cms.untracked.string('FULLMERGE') # any file order (default): caches all lumi/run products (memory!) diff --git a/Alignment/OfflineValidation/test/testCompare_cfg.py b/Alignment/OfflineValidation/test/testCompare_cfg.py index a43bb868c4f04..641a72c8e3d74 100644 --- a/Alignment/OfflineValidation/test/testCompare_cfg.py +++ b/Alignment/OfflineValidation/test/testCompare_cfg.py @@ -17,8 +17,17 @@ process.load("CondCore.DBCommon.CondDBSetup_cfi") process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('detailedInfo', - 'cout') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True) + ), + files = cms.untracked.PSet( + detailedInfo = cms.untracked.PSet( + + ) + ) ) process.source = cms.Source("EmptySource") diff --git a/Alignment/OfflineValidation/test/testIntoNtuples_cfg.py b/Alignment/OfflineValidation/test/testIntoNtuples_cfg.py index 916d1497bb10a..a6b2bda506b4b 100644 --- a/Alignment/OfflineValidation/test/testIntoNtuples_cfg.py +++ b/Alignment/OfflineValidation/test/testIntoNtuples_cfg.py @@ -16,9 +16,18 @@ process.load("CondCore.DBCommon.CondDBSetup_cfi") process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('detailedInfo', - 'cout') - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True) + ), + files = cms.untracked.PSet( + detailedInfo = cms.untracked.PSet( + + ) + ) +) from CondCore.DBCommon.CondDBSetup_cfi import * diff --git a/Alignment/OfflineValidation/test/test_all_cfg.py b/Alignment/OfflineValidation/test/test_all_cfg.py index b9578e75f02ed..aa2260a0cd7e7 100644 --- a/Alignment/OfflineValidation/test/test_all_cfg.py +++ b/Alignment/OfflineValidation/test/test_all_cfg.py @@ -44,11 +44,12 @@ class RefitType(Enum): # Messages ################################################################### process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("PrimaryVertexValidation") -process.MessageLogger.categories.append("SplitVertexResolution") -process.MessageLogger.categories.append("FilterOutLowPt") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.PrimaryVertexValidation=dict() +process.MessageLogger.SplitVertexResolution=dict() +process.MessageLogger.FilterOutLowPt=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -56,9 +57,9 @@ class RefitType(Enum): ), PrimaryVertexValidation = cms.untracked.PSet( limit = cms.untracked.int32(-1)), SplitVertexResolution = cms.untracked.PSet( limit = cms.untracked.int32(-1)), - FilterOutLowPt = cms.untracked.PSet( limit = cms.untracked.int32(-1)) + FilterOutLowPt = cms.untracked.PSet( limit = cms.untracked.int32(-1)), + enableStatistics = cms.untracked.bool(True) ) -process.MessageLogger.statistics.append('cout') #################################################################### # Produce the Transient Track Record in the event diff --git a/Alignment/SurveyAnalysis/test/run-converter_cfg.py b/Alignment/SurveyAnalysis/test/run-converter_cfg.py index 714b74c24122b..d0daec393fd78 100644 --- a/Alignment/SurveyAnalysis/test/run-converter_cfg.py +++ b/Alignment/SurveyAnalysis/test/run-converter_cfg.py @@ -14,19 +14,22 @@ process.load("Alignment.SurveyAnalysis.SurveyInfoScenario_cff") process.MessageLogger = cms.Service("MessageLogger", - test = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noLineBreaks = cms.untracked.bool(True) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - statistics = cms.untracked.vstring('cout', - 'test'), cout = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noLineBreaks = cms.untracked.bool(True) + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), + noLineBreaks = cms.untracked.bool(True), + threshold = cms.untracked.string('DEBUG') ), - categories = cms.untracked.vstring('Alignment'), - destinations = cms.untracked.vstring('cout', - 'test') + files = cms.untracked.PSet( + test = cms.untracked.PSet( + enableStatistics = cms.untracked.bool(True), + noLineBreaks = cms.untracked.bool(True), + threshold = cms.untracked.string('DEBUG') + ) + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/Alignment/TrackerAlignment/plugins/CosmicRateAnalyzer.cc b/Alignment/TrackerAlignment/plugins/CosmicRateAnalyzer.cc index 76dcab07851d9..7fc188304a817 100644 --- a/Alignment/TrackerAlignment/plugins/CosmicRateAnalyzer.cc +++ b/Alignment/TrackerAlignment/plugins/CosmicRateAnalyzer.cc @@ -6,9 +6,9 @@ /**\class CosmicRateAnalyzer CosmicRateAnalyzer.cc CosmicTrackTool/CosmicRateAnalyzer/plugins/CosmicRateAnalyzer.cc Description : - This Analyzer creates tuple, having necessary infromation for cosmic track and event rate calculations. -Tuple created by this analyzer also have some kinematical information. This tuple is input of some offline -macros that make rate plots and kinematical plots. + This Analyzer creates tuple, having necessary infromation for Cosmic Track Rate and Event Rate calculations. + Tuples created by this analyzer also have some kinematic information. This tuple is input to some offline + macros that make Rate plots and Kinematical plots. Implementation : Documentation for running this tool is described in twiki : https://twiki.cern.ch/twiki/bin/view/CMS/TkAlCosmicsRateMonitoring @@ -16,7 +16,7 @@ Implementation : Documentation for running this tool is described in twiki : */ // Originally created: Justyna Magdalena Tomaszewska,,, // Revisited by: Ashutosh Bhardwaj and Kirti Ranjan -// Further Developed by: Sumit Keshri (sumit.keshri@cern.ch) +// Further Developed by: Sumit Keshri (sumit.keshri@cern.ch) & Saumya (saumya.saumya@cern.ch) // // Created: Sat, 30 May 2015 20:14:35 GMT // @@ -55,10 +55,9 @@ Implementation : Documentation for running this tool is described in twiki : #include "DataFormats/SiStripDetId/interface/SiStripDetId.h" #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" -#include "DataFormats/TrackerCommon/interface/PixelBarrelName.h" -#include "DataFormats/TrackerCommon/interface/PixelEndcapName.h" #include "MagneticField/Engine/interface/MagneticField.h" #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "DataFormats/GeometryVector/interface/GlobalPoint.h" #include "DataFormats/SiStripCluster/interface/SiStripCluster.h" #include "DataFormats/Common/interface/DetSetVectorNew.h" #include "DataFormats/Common/interface/DetSetVector.h" @@ -92,11 +91,14 @@ class CosmicRateAnalyzer : public edm::one::EDAnalyzer magFieldToken_; + const edm::ESGetToken topoToken_; + const edm::ESGetToken latencyToken_; edm::EDGetTokenT trackTags_; edm::EDGetTokenT > clustercollectionToken_; edm::EDGetTokenT muonTags_; edm::RunNumber_t lastrunnum; - double lastruntime; + double lastruntime, magField; edm::Service fs; unsigned int DetectorID; @@ -148,6 +150,12 @@ class CosmicRateAnalyzer : public edm::one::EDAnalyzer dz; std::vector nvh; std::vector DTtime; + std::vector nh_BPIX; + std::vector nh_FPIX; + std::vector nh_TIB; + std::vector nh_TOB; + std::vector nh_TID; + std::vector nh_TEC; }; // @@ -162,7 +170,10 @@ class CosmicRateAnalyzer : public edm::one::EDAnalyzer(iConfig.getParameter("tracksInputTag"))), + : magFieldToken_(esConsumes()), + topoToken_(esConsumes()), + latencyToken_(esConsumes()), + trackTags_(consumes(iConfig.getParameter("tracksInputTag"))), clustercollectionToken_( consumes >(iConfig.getParameter("tracksInputTag"))), muonTags_(consumes(iConfig.getParameter("muonsInputTag"))) { @@ -195,6 +206,12 @@ void CosmicRateAnalyzer::ClearInEventLoop() { dz.clear(); nvh.clear(); DTtime.clear(); + nh_BPIX.clear(); + nh_FPIX.clear(); + nh_TIB.clear(); + nh_TOB.clear(); + nh_TID.clear(); + nh_TEC.clear(); } // ------------ method called for each event ------------ @@ -205,11 +222,10 @@ void CosmicRateAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup edm::Handle tracks; iEvent.getByToken(trackTags_, tracks); - edm::ESHandle magfield; - iSetup.get().get(magfield); - - edm::ESHandle tTopo; - iSetup.get().get(tTopo); + const TrackerTopology* const tTopo = &iSetup.getData(topoToken_); + const MagneticField* magneticField = &iSetup.getData(magFieldToken_); + magField = magneticField->inTesla(GlobalPoint(0, 0, 0)).mag(); + //const SiStripLatency* apvlat = &iSetup.getData(latencyToken_); // unused (for the moment) edm::Timestamp ts_begin = iEvent.getRun().beginTime(); double t_begin = stampToReal(ts_begin); @@ -219,9 +235,6 @@ void CosmicRateAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup lastruntime = t_end - t_begin; lastrunnum = iEvent.getRun().run(); - edm::ESHandle apvlat; - iSetup.get().get(apvlat); - if (!tracks->empty()) v_ntrk.push_back(tracks->size()); @@ -238,6 +251,12 @@ void CosmicRateAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup d0.push_back(itTrack1->d0()); dz.push_back(itTrack1->dz()); nvh.push_back(itTrack1->numberOfValidHits()); + nh_BPIX.push_back(itTrack1->hitPattern().numberOfValidPixelBarrelHits()); + nh_FPIX.push_back(itTrack1->hitPattern().numberOfValidPixelEndcapHits()); + nh_TIB.push_back(itTrack1->hitPattern().numberOfValidStripTIBHits()); + nh_TOB.push_back(itTrack1->hitPattern().numberOfValidStripTOBHits()); + nh_TID.push_back(itTrack1->hitPattern().numberOfValidStripTIDHits()); + nh_TEC.push_back(itTrack1->hitPattern().numberOfValidStripTECHits()); int nhitinBPIX = 0; int nhitinFPIX = 0; @@ -264,7 +283,6 @@ void CosmicRateAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup if (PixelSubdetector::PixelBarrel == subdetId1) { ++nhitinBPIX; ++nhitinPIXEL; - PixelBarrelName pxbId1(detId1); } /////////////////////////////////////////////////////////////////////////////////////////////////// // Hit information in PixelEndcap // @@ -389,7 +407,14 @@ void CosmicRateAnalyzer::beginJob() { treeEvent->Branch("dz", &dz); treeEvent->Branch("nvh", &nvh); treeEvent->Branch("ntrk", &ntrk); + treeEvent->Branch("nHitsBPIX", &nh_BPIX); + treeEvent->Branch("nHitsFPIX", &nh_FPIX); + treeEvent->Branch("nHitsTIB", &nh_TIB); + treeEvent->Branch("nHitsTOB", &nh_TOB); + treeEvent->Branch("nHitsTID", &nh_TID); + treeEvent->Branch("nHitsTEC", &nh_TEC); treeEvent->Branch("DTtime", &DTtime); + treeEvent->Branch("magField", &magField); treeRun->Branch("run_time", &run_time); treeRun->Branch("runnum", &runnum); treeRun->Branch("number_of_events", &number_of_events); diff --git a/Alignment/TrackerAlignment/plugins/CreateTrackerAlignmentRcds.cc b/Alignment/TrackerAlignment/plugins/CreateTrackerAlignmentRcds.cc index f691a6157c1ba..5e2b593aee35f 100644 --- a/Alignment/TrackerAlignment/plugins/CreateTrackerAlignmentRcds.cc +++ b/Alignment/TrackerAlignment/plugins/CreateTrackerAlignmentRcds.cc @@ -85,6 +85,13 @@ class CreateIdealTkAlRecords : public edm::one::EDAnalyzer<> { void writeToDB(); // ----------member data --------------------------- + + const edm::ESGetToken geomDetToken_; + const edm::ESGetToken ptpToken_; + const edm::ESGetToken topoToken_; + const edm::ESGetToken aliToken_; + const edm::ESGetToken aliErrorToken_; + const edm::ESGetToken aliSurfaceToken_; const std::vector skipSubDetectors_; const bool alignToGlobalTag_; const bool createReferenceRcd_; @@ -100,7 +107,13 @@ class CreateIdealTkAlRecords : public edm::one::EDAnalyzer<> { // constructors and destructor // CreateIdealTkAlRecords::CreateIdealTkAlRecords(const edm::ParameterSet& iConfig) - : skipSubDetectors_(toSubDetectors(iConfig.getUntrackedParameter >("skipSubDetectors"))), + : geomDetToken_(esConsumes()), + ptpToken_(esConsumes()), + topoToken_(esConsumes()), + aliToken_(esConsumes()), + aliErrorToken_(esConsumes()), + aliSurfaceToken_(esConsumes()), + skipSubDetectors_(toSubDetectors(iConfig.getUntrackedParameter >("skipSubDetectors"))), alignToGlobalTag_(iConfig.getUntrackedParameter("alignToGlobalTag")), createReferenceRcd_(iConfig.getUntrackedParameter("createReferenceRcd")), firstEvent_(true) {} @@ -236,19 +249,13 @@ void CreateIdealTkAlRecords::clearAlignmentInfos() { } std::unique_ptr CreateIdealTkAlRecords::retrieveGeometry(const edm::EventSetup& iSetup) { - edm::ESHandle geometricDet; - iSetup.get().get(geometricDet); - - edm::ESHandle ptp; - iSetup.get().get(ptp); - - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const auto* const tTopo = tTopoHandle.product(); + const GeometricDet* geometricDet = &iSetup.getData(geomDetToken_); + const PTrackerParameters& ptp = iSetup.getData(ptpToken_); + const TrackerTopology* tTopo = &iSetup.getData(topoToken_); TrackerGeomBuilderFromGeometricDet trackerBuilder; - return std::unique_ptr{trackerBuilder.build(&(*geometricDet), *ptp, tTopo)}; + return std::unique_ptr{trackerBuilder.build(geometricDet, ptp, tTopo)}; } void CreateIdealTkAlRecords::addAlignmentInfo(const GeomDet& det) { @@ -289,12 +296,9 @@ void CreateIdealTkAlRecords::addAlignmentInfo(const GeomDet& det) { void CreateIdealTkAlRecords::alignToGT(const edm::EventSetup& iSetup) { LogDebug("Alignment") << "Aligning to global tag\n"; - edm::ESHandle alignments; - iSetup.get().get(alignments); - edm::ESHandle alignmentErrors; - iSetup.get().get(alignmentErrors); - edm::ESHandle surfaceDeformations; - iSetup.get().get(surfaceDeformations); + const Alignments* alignments = &iSetup.getData(aliToken_); + const AlignmentErrorsExtended* alignmentErrors = &iSetup.getData(aliErrorToken_); + const AlignmentSurfaceDeformations* surfaceDeformations = &iSetup.getData(aliSurfaceToken_); if (alignments->m_align.size() != alignmentErrors->m_alignError.size()) throw cms::Exception("GeometryMismatch") diff --git a/Alignment/TrackerAlignment/plugins/MCMisalignmentScaler.cc b/Alignment/TrackerAlignment/plugins/MCMisalignmentScaler.cc index 220eafae1bf37..b74c1c9340e5c 100644 --- a/Alignment/TrackerAlignment/plugins/MCMisalignmentScaler.cc +++ b/Alignment/TrackerAlignment/plugins/MCMisalignmentScaler.cc @@ -65,6 +65,12 @@ class MCMisalignmentScaler : public edm::one::EDAnalyzer<> { static void fillDescriptions(edm::ConfigurationDescriptions&); private: + const edm::ESGetToken pixelQualityToken_; + const edm::ESGetToken stripQualityToken_; + const edm::ESGetToken geomDetToken_; + const edm::ESGetToken ptpToken_; + const edm::ESGetToken topoToken_; + const edm::ESGetToken aliToken_; using ScalerMap = std::unordered_map >; void analyze(const edm::Event&, const edm::EventSetup&) override; @@ -81,7 +87,13 @@ class MCMisalignmentScaler : public edm::one::EDAnalyzer<> { // constructors and destructor // MCMisalignmentScaler::MCMisalignmentScaler(const edm::ParameterSet& iConfig) - : scalers_{decodeSubDetectors(iConfig.getParameter("scalers"))}, + : pixelQualityToken_(esConsumes()), + stripQualityToken_(esConsumes()), + geomDetToken_(esConsumes()), + ptpToken_(esConsumes()), + topoToken_(esConsumes()), + aliToken_(esConsumes()), + scalers_{decodeSubDetectors(iConfig.getParameter("scalers"))}, pullBadModulesToIdeal_{iConfig.getUntrackedParameter("pullBadModulesToIdeal")}, outlierPullToIdealCut_{iConfig.getUntrackedParameter("outlierPullToIdealCut")} {} @@ -96,21 +108,16 @@ void MCMisalignmentScaler::analyze(const edm::Event&, const edm::EventSetup& iSe firstEvent_ = false; // get handle on bad modules - edm::ESHandle pixelModules; - iSetup.get().get(pixelModules); - edm::ESHandle stripModules; - iSetup.get().get(stripModules); + const SiPixelQuality* pixelModules = &iSetup.getData(pixelQualityToken_); + const SiStripQuality* stripModules = &iSetup.getData(stripQualityToken_); // get the tracker geometry - edm::ESHandle geometricDet; - iSetup.get().get(geometricDet); - edm::ESHandle ptp; - iSetup.get().get(ptp); - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const auto* const topology = tTopoHandle.product(); + const GeometricDet* geometricDet = &iSetup.getData(geomDetToken_); + const PTrackerParameters& ptp = iSetup.getData(ptpToken_); + const TrackerTopology* topology = &iSetup.getData(topoToken_); + TrackerGeomBuilderFromGeometricDet trackerBuilder; - auto tracker = std::unique_ptr{trackerBuilder.build(&(*geometricDet), *ptp, topology)}; + auto tracker = std::unique_ptr{trackerBuilder.build(geometricDet, ptp, topology)}; auto dets = tracker->dets(); std::sort(dets.begin(), dets.end(), [](const auto& a, const auto& b) { @@ -118,8 +125,7 @@ void MCMisalignmentScaler::analyze(const edm::Event&, const edm::EventSetup& iSe }); // get the input alignment - edm::ESHandle alignments; - iSetup.get().get(alignments); + const Alignments* alignments = &iSetup.getData(aliToken_); if (dets.size() != alignments->m_align.size()) { throw cms::Exception("GeometryMismatch") << "Size mismatch between alignments (size=" << alignments->m_align.size() diff --git a/Alignment/TrackerAlignment/plugins/MisalignedTrackerESProducer.cc b/Alignment/TrackerAlignment/plugins/MisalignedTrackerESProducer.cc index 597f02b8452a8..14eff34040714 100644 --- a/Alignment/TrackerAlignment/plugins/MisalignedTrackerESProducer.cc +++ b/Alignment/TrackerAlignment/plugins/MisalignedTrackerESProducer.cc @@ -46,6 +46,10 @@ class MisalignedTrackerESProducer : public edm::ESProducer { std::unique_ptr produce(const TrackerDigiGeometryRecord& iRecord); private: + edm::ESGetToken geomDetToken_; + edm::ESGetToken ptpToken_; + edm::ESGetToken topoToken_; + const bool theSaveToDB; /// whether or not writing to DB const bool theSaveFakeScenario; /// if theSaveToDB is true, save a fake scenario (empty alignments), irrespective of the misalignment scenario below @@ -64,7 +68,10 @@ MisalignedTrackerESProducer::MisalignedTrackerESProducer(const edm::ParameterSet theScenario(p.getParameter("scenario")), theAlignRecordName("TrackerAlignmentRcd"), theErrorRecordName("TrackerAlignmentErrorExtendedRcd") { - setWhatProduced(this); + auto cc = setWhatProduced(this); + geomDetToken_ = cc.consumes(); + ptpToken_ = cc.consumes(); + topoToken_ = cc.consumes(); } //__________________________________________________________________________________________________ @@ -73,19 +80,16 @@ MisalignedTrackerESProducer::~MisalignedTrackerESProducer() {} //__________________________________________________________________________________________________ std::unique_ptr MisalignedTrackerESProducer::produce(const TrackerDigiGeometryRecord& iRecord) { //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - iRecord.getRecord().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); + const TrackerTopology* tTopo = &iRecord.get(topoToken_); edm::LogInfo("MisalignedTracker") << "Producer called"; // Create the tracker geometry from ideal geometry - edm::ESHandle gD; - iRecord.getRecord().get(gD); - edm::ESHandle ptp; - iRecord.getRecord().get(ptp); + const GeometricDet* gD = &iRecord.get(geomDetToken_); + const PTrackerParameters& ptp = iRecord.get(ptpToken_); + TrackerGeomBuilderFromGeometricDet trackerBuilder; - std::unique_ptr theTracker(trackerBuilder.build(&(*gD), *ptp, tTopo)); + std::unique_ptr theTracker(trackerBuilder.build(gD, ptp, tTopo)); // Create the alignable hierarchy auto theAlignableTracker = std::make_unique(&(*theTracker), tTopo); diff --git a/Alignment/TrackerAlignment/plugins/TkAlCaOverlapTagger.cc b/Alignment/TrackerAlignment/plugins/TkAlCaOverlapTagger.cc index 54e1d990cbaaf..28cd34eebd324 100644 --- a/Alignment/TrackerAlignment/plugins/TkAlCaOverlapTagger.cc +++ b/Alignment/TrackerAlignment/plugins/TkAlCaOverlapTagger.cc @@ -2,7 +2,6 @@ #include "FWCore/Framework/interface/EventPrincipal.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -35,6 +34,7 @@ class TkAlCaOverlapTagger : public edm::EDProducer { void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; private: + const edm::ESGetToken topoToken_; edm::InputTag src_; edm::InputTag srcClust_; bool rejectBadMods_; @@ -44,7 +44,8 @@ class TkAlCaOverlapTagger : public edm::EDProducer { }; TkAlCaOverlapTagger::TkAlCaOverlapTagger(const edm::ParameterSet& iConfig) - : src_(iConfig.getParameter("src")), + : topoToken_(esConsumes()), + src_(iConfig.getParameter("src")), srcClust_(iConfig.getParameter("Clustersrc")), rejectBadMods_(iConfig.getParameter("rejectBadMods")), BadModsList_(iConfig.getParameter >("BadMods")) { @@ -55,9 +56,7 @@ TkAlCaOverlapTagger::~TkAlCaOverlapTagger() {} void TkAlCaOverlapTagger::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); + const TrackerTopology* tTopo = &iSetup.getData(topoToken_); edm::Handle assoMap; iEvent.getByLabel(src_, assoMap); diff --git a/Alignment/TrackerAlignment/plugins/TrackerSystematicMisalignments.cc b/Alignment/TrackerAlignment/plugins/TrackerSystematicMisalignments.cc index 7e15e84ef3874..0b43bc30556ec 100644 --- a/Alignment/TrackerAlignment/plugins/TrackerSystematicMisalignments.cc +++ b/Alignment/TrackerAlignment/plugins/TrackerSystematicMisalignments.cc @@ -39,7 +39,13 @@ // made some variables constant, removed obviously dead code and comments TrackerSystematicMisalignments::TrackerSystematicMisalignments(const edm::ParameterSet& cfg) - : theAlignableTracker(nullptr) { + : geomDetToken_(esConsumes()), + ptpToken_(esConsumes()), + topoToken_(esConsumes()), + aliToken_(esConsumes()), + aliErrorToken_(esConsumes()), + gprToken_(esConsumes()), + theAlignableTracker(nullptr) { // use existing geometry m_fromDBGeom = cfg.getUntrackedParameter("fromDBGeom"); @@ -105,27 +111,18 @@ void TrackerSystematicMisalignments::beginJob() {} void TrackerSystematicMisalignments::analyze(const edm::Event& event, const edm::EventSetup& setup) { //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - setup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); + const GeometricDet* geom = &setup.getData(geomDetToken_); + const PTrackerParameters& ptp = setup.getData(ptpToken_); + const TrackerTopology* tTopo = &setup.getData(topoToken_); - edm::ESHandle geom; - setup.get().get(geom); - edm::ESHandle ptp; - setup.get().get(ptp); - TrackerGeometry* tracker = TrackerGeomBuilderFromGeometricDet().build(&*geom, *ptp, tTopo); + TrackerGeometry* tracker = TrackerGeomBuilderFromGeometricDet().build(geom, ptp, tTopo); //take geometry from DB or randomly generate geometry if (m_fromDBGeom) { //build the tracker - edm::ESHandle alignments; - edm::ESHandle alignmentErrors; - - setup.get().get(alignments); - setup.get().get(alignmentErrors); - - edm::ESHandle globalPositionRcd; - setup.get().getRecord().get(globalPositionRcd); + const Alignments* alignments = &setup.getData(aliToken_); + const AlignmentErrorsExtended* alignmentErrors = &setup.getData(aliErrorToken_); + const Alignments* globalPositionRcd = &setup.getData(gprToken_); //apply the latest alignments GeometryAligner aligner; diff --git a/Alignment/TrackerAlignment/plugins/TrackerSystematicMisalignments.h b/Alignment/TrackerAlignment/plugins/TrackerSystematicMisalignments.h index e729c0a96481f..19b25880ad02f 100644 --- a/Alignment/TrackerAlignment/plugins/TrackerSystematicMisalignments.h +++ b/Alignment/TrackerAlignment/plugins/TrackerSystematicMisalignments.h @@ -37,6 +37,12 @@ class TrackerSystematicMisalignments : public edm::EDAnalyzer { //align::GlobalVector findSystematicMis( align::PositionType ); align::GlobalVector findSystematicMis(const align::PositionType&, const bool blindToZ, const bool blindToR); + const edm::ESGetToken geomDetToken_; + const edm::ESGetToken ptpToken_; + const edm::ESGetToken topoToken_; + const edm::ESGetToken aliToken_; + const edm::ESGetToken aliErrorToken_; + const edm::ESGetToken gprToken_; AlignableTracker* theAlignableTracker; // configurables needed for the systematic misalignment diff --git a/Alignment/TrackerAlignment/plugins/TrackerTreeGenerator.cc b/Alignment/TrackerAlignment/plugins/TrackerTreeGenerator.cc index 120cbddee3685..b95820102cf7f 100644 --- a/Alignment/TrackerAlignment/plugins/TrackerTreeGenerator.cc +++ b/Alignment/TrackerAlignment/plugins/TrackerTreeGenerator.cc @@ -72,6 +72,9 @@ class TrackerTreeGenerator : public edm::one::EDAnalyzer geomDetToken_; + const edm::ESGetToken ptpToken_; + const edm::ESGetToken topoToken_; const bool createEntryForDoubleSidedModule_; std::vector vTkTreeVar_; @@ -90,7 +93,11 @@ class TrackerTreeGenerator : public edm::one::EDAnalyzer("createEntryForDoubleSidedModule")), config_(config) { + : geomDetToken_(esConsumes()), + ptpToken_(esConsumes()), + topoToken_(esConsumes()), + createEntryForDoubleSidedModule_(config.getParameter("createEntryForDoubleSidedModule")), + config_(config) { usesResource(TFileService::kSharedResource); } @@ -100,20 +107,13 @@ TrackerTreeGenerator::TrackerTreeGenerator(const edm::ParameterSet& config) // ------------ method called to for each event ------------ void TrackerTreeGenerator::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - //iSetup.get().get(tkGeom); // now try to take directly the ideal geometry independent of used geometry in Global Tag - edm::ESHandle geometricDet; - iSetup.get().get(geometricDet); + const GeometricDet* geometricDet = &iSetup.getData(geomDetToken_); + const PTrackerParameters& ptp = iSetup.getData(ptpToken_); + const TrackerTopology* tTopo = &iSetup.getData(topoToken_); - //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); - - edm::ESHandle ptp; - iSetup.get().get(ptp); TrackerGeomBuilderFromGeometricDet trackerBuilder; - const TrackerGeometry* tkGeom = trackerBuilder.build(&(*geometricDet), *ptp, tTopo); + const TrackerGeometry* tkGeom = trackerBuilder.build(geometricDet, ptp, tTopo); AlignableTracker alignableTracker{tkGeom, tTopo}; const auto& ns = alignableTracker.trackerNameSpace(); diff --git a/Alignment/TrackerAlignment/test/alignment_forGeomComp_cfg_TEMPLATE.py b/Alignment/TrackerAlignment/test/alignment_forGeomComp_cfg_TEMPLATE.py index f1bb6dbbfcd27..4526700adf177 100644 --- a/Alignment/TrackerAlignment/test/alignment_forGeomComp_cfg_TEMPLATE.py +++ b/Alignment/TrackerAlignment/test/alignment_forGeomComp_cfg_TEMPLATE.py @@ -27,7 +27,7 @@ usedGlobalTag = process.GlobalTag.globaltag.value() process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.LOGFILE = cms.untracked.PSet( +process.MessageLogger.files.LOGFILE = cms.untracked.PSet( DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), @@ -44,12 +44,11 @@ Alignment = cms.untracked.PSet( limit = cms.untracked.int32(-1), reportEvery = cms.untracked.int32(1) - ) + ), + enableStatistics = cms.untracked.bool(True) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(True) -process.MessageLogger.destinations = ['LOGFILE'] -process.MessageLogger.statistics = ['LOGFILE'] -process.MessageLogger.categories = ['Alignment'] +process.MessageLogger.cerr.enable = cms.untracked.bool(False) + ## if alignment constants not from global tag, add this from CondCore.CondDB.CondDB_cfi import * diff --git a/Alignment/TrackerAlignment/test/cosmicRateAnalyzer_cfg.py b/Alignment/TrackerAlignment/test/cosmicRateAnalyzer_cfg.py index e414114deca39..96beb3fb0dedd 100644 --- a/Alignment/TrackerAlignment/test/cosmicRateAnalyzer_cfg.py +++ b/Alignment/TrackerAlignment/test/cosmicRateAnalyzer_cfg.py @@ -24,13 +24,13 @@ readFiles = cms.untracked.vstring() -readFiles = cms.untracked.vstring( FileUtils.loadListFromFile (os.environ['CMSSW_BASE']+'/src/CosmicRateTool/TrackAnalyzer/test/'+'fileList.txt') ) +readFiles = cms.untracked.vstring( FileUtils.loadListFromFile (os.environ['CMSSW_BASE']+'/src/Alignment/TrackerAlignment/test/'+'fileList.txt') ) process.source = cms.Source("PoolSource", fileNames = readFiles, ) process.TFileService = cms.Service("TFileService", fileName = cms.string("Cosmic_rate_tuple.root") ) -process.load("CosmicRateTool.TrackAnalyzer.cosmicRateAnalyzer_cfi") +process.load("Alignment.TrackerAlignment.cosmicRateAnalyzer_cfi") process.p = cms.Path(process.cosmicRateAnalyzer) diff --git a/Alignment/TrackerAlignment/test/trackerGeometryAnalyzer_cfg.py b/Alignment/TrackerAlignment/test/trackerGeometryAnalyzer_cfg.py index 1e43019785d1a..09856e25c4673 100644 --- a/Alignment/TrackerAlignment/test/trackerGeometryAnalyzer_cfg.py +++ b/Alignment/TrackerAlignment/test/trackerGeometryAnalyzer_cfg.py @@ -6,26 +6,32 @@ # Logging process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger = cms.Service("MessageLogger", - #statistics = cms.untracked.vstring('trackerGeometryAnalyzer'), - destinations = cms.untracked.vstring('trackerGeometryAnalyzer'), - categories = cms.untracked.vstring( - 'TrackerGeometryAnalyzer', - 'AlignableBuildProcess' - #'AlignableMap' - ), - - trackerGeometryAnalyzer = cms.untracked.PSet( - INFO = cms.untracked.PSet(limit = cms.untracked.int32( 0)), - DEBUG = cms.untracked.PSet(limit = cms.untracked.int32(-1)), - WARNING = cms.untracked.PSet(limit = cms.untracked.int32( 0)), - ERROR = cms.untracked.PSet(limit = cms.untracked.int32(-1)), - - threshold = cms.untracked.string('DEBUG'), - - TrackerGeometryAnalyzer = cms.untracked.PSet(limit = cms.untracked.int32(-1)), - AlignableBuildProcess = cms.untracked.PSet(limit = cms.untracked.int32(-1)) - #AlignableMap = cms.untracked.PSet(limit = cms.untracked.int32(-1)) - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + files = cms.untracked.PSet( + trackerGeometryAnalyzer = cms.untracked.PSet( + AlignableBuildProcess = cms.untracked.PSet( + limit = cms.untracked.int32(-1) + ), + DEBUG = cms.untracked.PSet( + limit = cms.untracked.int32(-1) + ), + ERROR = cms.untracked.PSet( + limit = cms.untracked.int32(-1) + ), + INFO = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + TrackerGeometryAnalyzer = cms.untracked.PSet( + limit = cms.untracked.int32(-1) + ), + WARNING = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('DEBUG') + ) + ) ) #=============================================================================== diff --git a/Alignment/TrackerAlignment/test/trackerTreeGenerator_cfg.py b/Alignment/TrackerAlignment/test/trackerTreeGenerator_cfg.py index 43dace7ed1895..746890a6d0209 100644 --- a/Alignment/TrackerAlignment/test/trackerTreeGenerator_cfg.py +++ b/Alignment/TrackerAlignment/test/trackerTreeGenerator_cfg.py @@ -17,7 +17,7 @@ ## process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('TrackerTreeGenerator') +process.MessageLogger.TrackerTreeGenerator=dict() process.MessageLogger.cerr.INFO.limit = 0 process.MessageLogger.cerr.default.limit = -1 process.MessageLogger.cerr.TrackerTreeGenerator = cms.untracked.PSet(limit = cms.untracked.int32(-1)) diff --git a/BigProducts/Simulation/BuildFile.xml b/BigProducts/Simulation/BuildFile.xml index df7a424be6632..af30510628117 100644 --- a/BigProducts/Simulation/BuildFile.xml +++ b/BigProducts/Simulation/BuildFile.xml @@ -1,10 +1,13 @@ + - + + + diff --git a/CUDADataFormats/CaloCommon/BuildFile.xml b/CUDADataFormats/CaloCommon/BuildFile.xml index 635af5bdaf6b3..9f9d23d5c1f84 100644 --- a/CUDADataFormats/CaloCommon/BuildFile.xml +++ b/CUDADataFormats/CaloCommon/BuildFile.xml @@ -1,5 +1,5 @@ - + diff --git a/CUDADataFormats/Common/BuildFile.xml b/CUDADataFormats/Common/BuildFile.xml index b990c1295e31a..f6b68fe69b400 100644 --- a/CUDADataFormats/Common/BuildFile.xml +++ b/CUDADataFormats/Common/BuildFile.xml @@ -1,4 +1,6 @@ + + diff --git a/CUDADataFormats/Common/src/classes.h b/CUDADataFormats/Common/src/classes.h new file mode 100644 index 0000000000000..239e071d513a2 --- /dev/null +++ b/CUDADataFormats/Common/src/classes.h @@ -0,0 +1,7 @@ +#ifndef CUDADataFormats_Common_src_classes_h +#define CUDADataFormats_Common_src_classes_h + +#include "CUDADataFormats/Common/interface/HostProduct.h" +#include "DataFormats/Common/interface/Wrapper.h" + +#endif // CUDADataFormats_Common_src_classes_h diff --git a/CUDADataFormats/Common/src/classes_def.xml b/CUDADataFormats/Common/src/classes_def.xml new file mode 100644 index 0000000000000..d8514251c807a --- /dev/null +++ b/CUDADataFormats/Common/src/classes_def.xml @@ -0,0 +1,4 @@ + + + + diff --git a/CUDADataFormats/EcalDigi/BuildFile.xml b/CUDADataFormats/EcalDigi/BuildFile.xml new file mode 100644 index 0000000000000..b479a9f9db1ec --- /dev/null +++ b/CUDADataFormats/EcalDigi/BuildFile.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/CUDADataFormats/EcalDigi/interface/DigisCollection.h b/CUDADataFormats/EcalDigi/interface/DigisCollection.h new file mode 100644 index 0000000000000..f471dbfb9fac8 --- /dev/null +++ b/CUDADataFormats/EcalDigi/interface/DigisCollection.h @@ -0,0 +1,24 @@ +#ifndef CUDADataFormats_EcalDigi_interface_DigisCollection_h +#define CUDADataFormats_EcalDigi_interface_DigisCollection_h + +#include "CUDADataFormats/CaloCommon/interface/Common.h" + +namespace ecal { + + template + struct DigisCollection : public ::calo::common::AddSize { + DigisCollection() = default; + DigisCollection(DigisCollection const &) = default; + DigisCollection &operator=(DigisCollection const &) = default; + + DigisCollection(DigisCollection &&) = default; + DigisCollection &operator=(DigisCollection &&) = default; + + // stride is statically known + typename StoragePolicy::template StorageSelector::type ids; + typename StoragePolicy::template StorageSelector::type data; + }; + +} // namespace ecal + +#endif // CUDADataFormats_EcalDigi_interface_DigisCollection_h diff --git a/CUDADataFormats/EcalDigi/src/classes.h b/CUDADataFormats/EcalDigi/src/classes.h new file mode 100644 index 0000000000000..cd60b775e229b --- /dev/null +++ b/CUDADataFormats/EcalDigi/src/classes.h @@ -0,0 +1,3 @@ +#include "CUDADataFormats/Common/interface/Product.h" +#include "CUDADataFormats/EcalDigi/interface/DigisCollection.h" +#include "DataFormats/Common/interface/Wrapper.h" diff --git a/CUDADataFormats/EcalDigi/src/classes_def.xml b/CUDADataFormats/EcalDigi/src/classes_def.xml new file mode 100644 index 0000000000000..6a3adfe4b41c5 --- /dev/null +++ b/CUDADataFormats/EcalDigi/src/classes_def.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/CUDADataFormats/EcalRecHitSoA/BuildFile.xml b/CUDADataFormats/EcalRecHitSoA/BuildFile.xml new file mode 100644 index 0000000000000..a684d9a23f1c6 --- /dev/null +++ b/CUDADataFormats/EcalRecHitSoA/BuildFile.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/CUDADataFormats/EcalRecHitSoA/interface/EcalRecHit.h b/CUDADataFormats/EcalRecHitSoA/interface/EcalRecHit.h new file mode 100644 index 0000000000000..731b8b801407f --- /dev/null +++ b/CUDADataFormats/EcalRecHitSoA/interface/EcalRecHit.h @@ -0,0 +1,45 @@ +#ifndef CUDADataFormats_EcalRecHitSoA_interface_EcalRecHit_h +#define CUDADataFormats_EcalRecHitSoA_interface_EcalRecHit_h + +#include +#include + +#include "CUDADataFormats/CaloCommon/interface/Common.h" +#include "CUDADataFormats/EcalRecHitSoA/interface/RecoTypes.h" +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" + +namespace ecal { + + template + struct RecHit : public ::calo::common::AddSize { + RecHit() = default; + RecHit(const RecHit&) = default; + RecHit& operator=(const RecHit&) = default; + + RecHit(RecHit&&) = default; + RecHit& operator=(RecHit&&) = default; + + typename StoragePolicy::template StorageSelector::type energy; + typename StoragePolicy::template StorageSelector::type time; + // should we remove the following, since already included in "extra" ? + typename StoragePolicy::template StorageSelector::type chi2; + typename StoragePolicy::template StorageSelector::type + extra; // packed uint32_t for timeError, chi2, energyError + typename StoragePolicy::template StorageSelector::type + flagBits; // store rechit condition (see Flags enum) in a bit-wise way + typename StoragePolicy::template StorageSelector::type did; + + template + typename std::enable_if::value, void>::type resize(size_t size) { + energy.resize(size); + time.resize(size); + chi2.resize(size); + extra.resize(size); + flagBits.resize(size); + did.resize(size); + } + }; + +} // namespace ecal + +#endif // CUDADataFormats_EcalRecHitSoA_interface_EcalRecHit_h diff --git a/CUDADataFormats/EcalRecHitSoA/interface/EcalUncalibratedRecHit.h b/CUDADataFormats/EcalRecHitSoA/interface/EcalUncalibratedRecHit.h new file mode 100644 index 0000000000000..78c909b029dc1 --- /dev/null +++ b/CUDADataFormats/EcalRecHitSoA/interface/EcalUncalibratedRecHit.h @@ -0,0 +1,46 @@ +#ifndef CUDADataFormats_EcalRecHitSoA_interface_EcalUncalibratedRecHit_h +#define CUDADataFormats_EcalRecHitSoA_interface_EcalUncalibratedRecHit_h + +#include +#include + +#include "CUDADataFormats/CaloCommon/interface/Common.h" +#include "CUDADataFormats/EcalRecHitSoA/interface/RecoTypes.h" +#include "DataFormats/EcalDigi/interface/EcalDataFrame.h" + +namespace ecal { + + template + struct UncalibratedRecHit : public ::calo::common::AddSize { + UncalibratedRecHit() = default; + UncalibratedRecHit(const UncalibratedRecHit&) = default; + UncalibratedRecHit& operator=(const UncalibratedRecHit&) = default; + + UncalibratedRecHit(UncalibratedRecHit&&) = default; + UncalibratedRecHit& operator=(UncalibratedRecHit&&) = default; + + typename StoragePolicy::template StorageSelector::type amplitudesAll; + typename StoragePolicy::template StorageSelector::type amplitude; + typename StoragePolicy::template StorageSelector::type chi2; + typename StoragePolicy::template StorageSelector::type pedestal; + typename StoragePolicy::template StorageSelector::type jitter; + typename StoragePolicy::template StorageSelector::type jitterError; + typename StoragePolicy::template StorageSelector::type did; + typename StoragePolicy::template StorageSelector::type flags; + + template + typename std::enable_if::value, void>::type resize(size_t size) { + amplitudesAll.resize(size * EcalDataFrame::MAXSAMPLES); + amplitude.resize(size); + pedestal.resize(size); + chi2.resize(size); + did.resize(size); + flags.resize(size); + jitter.resize(size); + jitterError.resize(size); + } + }; + +} // namespace ecal + +#endif // CUDADataFormats_EcalRecHitSoA_interface_EcalUncalibratedRecHit_h diff --git a/CUDADataFormats/EcalRecHitSoA/interface/RecoTypes.h b/CUDADataFormats/EcalRecHitSoA/interface/RecoTypes.h new file mode 100644 index 0000000000000..87c4252a5e949 --- /dev/null +++ b/CUDADataFormats/EcalRecHitSoA/interface/RecoTypes.h @@ -0,0 +1,13 @@ +#ifndef CUDADataFormats_EcalRecHitSoA_interface_RecoTypes_h +#define CUDADataFormats_EcalRecHitSoA_interface_RecoTypes_h + +namespace ecal { + namespace reco { + + using ComputationScalarType = float; + using StorageScalarType = float; + + } // namespace reco +} // namespace ecal + +#endif // CUDADataFormats_EcalRecHitSoA_interface_RecoTypes_h diff --git a/CUDADataFormats/EcalRecHitSoA/src/classes.h b/CUDADataFormats/EcalRecHitSoA/src/classes.h new file mode 100644 index 0000000000000..ef95da461e3ba --- /dev/null +++ b/CUDADataFormats/EcalRecHitSoA/src/classes.h @@ -0,0 +1,4 @@ +#include "CUDADataFormats/Common/interface/Product.h" +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalRecHit.h" +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalUncalibratedRecHit.h" +#include "DataFormats/Common/interface/Wrapper.h" diff --git a/CUDADataFormats/EcalRecHitSoA/src/classes_def.xml b/CUDADataFormats/EcalRecHitSoA/src/classes_def.xml new file mode 100644 index 0000000000000..27e315b2c2822 --- /dev/null +++ b/CUDADataFormats/EcalRecHitSoA/src/classes_def.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/CUDADataFormats/HcalDigi/BuildFile.xml b/CUDADataFormats/HcalDigi/BuildFile.xml new file mode 100644 index 0000000000000..2e8ab2fe58fcf --- /dev/null +++ b/CUDADataFormats/HcalDigi/BuildFile.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/CUDADataFormats/HcalDigi/interface/DigiCollection.h b/CUDADataFormats/HcalDigi/interface/DigiCollection.h new file mode 100644 index 0000000000000..e2f4bf0848e94 --- /dev/null +++ b/CUDADataFormats/HcalDigi/interface/DigiCollection.h @@ -0,0 +1,160 @@ +#ifndef CUDADataFormats_HcalDigi_interface_DigiCollection_h +#define CUDADataFormats_HcalDigi_interface_DigiCollection_h + +#include "CUDADataFormats/CaloCommon/interface/Common.h" + +namespace hcal { + + // FLAVOR_HE_QIE11 = 1; Phase1 upgrade + struct Flavor1 { + static constexpr int WORDS_PER_SAMPLE = 1; + static constexpr int SAMPLES_PER_WORD = 1; + static constexpr int HEADER_WORDS = 1; + + static constexpr uint8_t adc(uint16_t const* const sample_start) { return (*sample_start & 0xff); } + static constexpr uint8_t tdc(uint16_t const* const sample_start) { return (*sample_start >> 8) & 0x3f; } + static constexpr uint8_t soibit(uint16_t const* const sample_start) { return (*sample_start >> 14) & 0x1; } + }; + + // FLAVOR_HB_QIE11 = 3; Phase1 upgrade + struct Flavor3 { + static constexpr int WORDS_PER_SAMPLE = 1; + static constexpr int SAMPLES_PER_WORD = 1; + static constexpr int HEADER_WORDS = 1; + + static constexpr uint8_t adc(uint16_t const* const sample_start) { return (*sample_start & 0xff); } + static constexpr uint8_t tdc(uint16_t const* const sample_start) { return ((*sample_start >> 8) & 0x3); } + static constexpr uint8_t soibit(uint16_t const* const sample_start) { return ((*sample_start >> 14) & 0x1); } + static constexpr uint8_t capid(uint16_t const* const sample_start) { return ((*sample_start >> 10) & 0x3); } + }; + + // FLAVOR_HB_QIE10 = 5; Phase0 + struct Flavor5 { + static constexpr float WORDS_PER_SAMPLE = 0.5; + static constexpr int SAMPLES_PER_WORD = 2; + static constexpr int HEADER_WORDS = 1; + + static constexpr uint8_t adc(uint16_t const* const sample_start, uint8_t const shifter) { + return ((*sample_start >> shifter * 8) & 0x7f); + } + }; + + template + constexpr uint8_t capid_for_sample(uint16_t const* const dfstart, uint32_t const sample) { + auto const capid_first = (*dfstart >> 8) & 0x3; + return (capid_first + sample) & 0x3; // same as % 4 + } + + template <> + constexpr uint8_t capid_for_sample(uint16_t const* const dfstart, uint32_t const sample) { + return Flavor3::capid(dfstart + Flavor3::HEADER_WORDS + sample * Flavor3::WORDS_PER_SAMPLE); + } + + template + constexpr uint8_t soibit_for_sample(uint16_t const* const dfstart, uint32_t const sample) { + return Flavor::soibit(dfstart + Flavor::HEADER_WORDS + sample * Flavor::WORDS_PER_SAMPLE); + } + + template + constexpr uint8_t adc_for_sample(uint16_t const* const dfstart, uint32_t const sample) { + return Flavor::adc(dfstart + Flavor::HEADER_WORDS + sample * Flavor::WORDS_PER_SAMPLE); + } + + template + constexpr uint8_t tdc_for_sample(uint16_t const* const dfstart, uint32_t const sample) { + return Flavor::tdc(dfstart + Flavor::HEADER_WORDS + sample * Flavor::WORDS_PER_SAMPLE); + } + + template <> + constexpr uint8_t adc_for_sample(uint16_t const* const dfstart, uint32_t const sample) { + // avoid using WORDS_PER_SAMPLE and simply shift + return Flavor5::adc(dfstart + Flavor5::HEADER_WORDS + (sample >> 1), sample % 2); + } + + template + constexpr uint32_t compute_stride(uint32_t const nsamples) { + return static_cast(nsamples * Flavor::WORDS_PER_SAMPLE) + Flavor::HEADER_WORDS; + } + + template + constexpr uint32_t compute_nsamples(uint32_t const nwords) { + if constexpr (Flavor::SAMPLES_PER_WORD >= 1) + return (nwords - Flavor::HEADER_WORDS) * Flavor::SAMPLES_PER_WORD; + else + return (nwords - Flavor::HEADER_WORDS) / Flavor::WORDS_PER_SAMPLE; + } + + // + template + struct DigiCollectionBase : public ::calo::common::AddSize { + DigiCollectionBase() = default; + DigiCollectionBase(DigiCollectionBase const&) = default; + DigiCollectionBase& operator=(DigiCollectionBase const&) = default; + + DigiCollectionBase(DigiCollectionBase&&) = default; + DigiCollectionBase& operator=(DigiCollectionBase&&) = default; + + template + typename std::enable_if::value, void>::type resize(std::size_t size) { + ids.resize(size); + data.resize(size * stride); + } + + template + typename std::enable_if::value, void>::type reserve(std::size_t size) { + ids.reserve(size); + data.reserve(size * stride); + } + + template + typename std::enable_if::value, void>::type clear() { + ids.clear(); + data.clear(); + } + + typename StoragePolicy::template StorageSelector::type ids; + typename StoragePolicy::template StorageSelector::type data; + uint32_t stride{0}; + }; + + template + struct DigiCollection : public DigiCollectionBase { + using DigiCollectionBase::DigiCollectionBase; + }; + + // NOTE: base ctors will not be available + template + struct DigiCollection : public DigiCollectionBase { + DigiCollection() = default; + + DigiCollection(DigiCollection const&) = default; + DigiCollection& operator=(DigiCollection const&) = default; + + DigiCollection(DigiCollection&&) = default; + DigiCollection& operator=(DigiCollection&&) = default; + + template + typename std::enable_if::value, void>::type resize(std::size_t size) { + DigiCollectionBase::resize(size); + npresamples.resize(size); + } + + template + typename std::enable_if::value, void>::type reserve(std::size_t size) { + DigiCollectionBase::reserve(size); + npresamples.reserve(size); + } + + template + typename std::enable_if::value, void>::type clear() { + DigiCollectionBase::clear(); + npresamples.clear(); + } + + // add npresamples member + typename StoragePolicy::template StorageSelector::type npresamples; + }; + +} // namespace hcal + +#endif // CUDADataFormats_HcalDigi_interface_DigiCollection_h diff --git a/CUDADataFormats/HcalDigi/src/classes.h b/CUDADataFormats/HcalDigi/src/classes.h new file mode 100644 index 0000000000000..8c4a20318928e --- /dev/null +++ b/CUDADataFormats/HcalDigi/src/classes.h @@ -0,0 +1,3 @@ +#include "CUDADataFormats/Common/interface/Product.h" +#include "CUDADataFormats/HcalDigi/interface/DigiCollection.h" +#include "DataFormats/Common/interface/Wrapper.h" diff --git a/CUDADataFormats/HcalDigi/src/classes_def.xml b/CUDADataFormats/HcalDigi/src/classes_def.xml new file mode 100644 index 0000000000000..71997eb59ba61 --- /dev/null +++ b/CUDADataFormats/HcalDigi/src/classes_def.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CUDADataFormats/HcalRecHitSoA/BuildFile.xml b/CUDADataFormats/HcalRecHitSoA/BuildFile.xml new file mode 100644 index 0000000000000..245701de5fdb0 --- /dev/null +++ b/CUDADataFormats/HcalRecHitSoA/BuildFile.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/CUDADataFormats/HcalRecHitSoA/interface/RecHitCollection.h b/CUDADataFormats/HcalRecHitSoA/interface/RecHitCollection.h new file mode 100644 index 0000000000000..424b2c0813b4c --- /dev/null +++ b/CUDADataFormats/HcalRecHitSoA/interface/RecHitCollection.h @@ -0,0 +1,38 @@ +#ifndef CUDADataFormats_HcalRecHitCollectionSoA_interface_RecHitCollection_h +#define CUDADataFormats_HcalRecHitCollectionSoA_interface_RecHitCollection_h + +#include + +#include "CUDADataFormats/CaloCommon/interface/Common.h" +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" + +namespace hcal { + + template + struct RecHitCollection : public ::calo::common::AddSize { + RecHitCollection() = default; + RecHitCollection(const RecHitCollection&) = default; + RecHitCollection& operator=(const RecHitCollection&) = default; + + RecHitCollection(RecHitCollection&&) = default; + RecHitCollection& operator=(RecHitCollection&&) = default; + + typename StoragePolicy::template StorageSelector::type energy; + typename StoragePolicy::template StorageSelector::type chi2; + typename StoragePolicy::template StorageSelector::type energyM0; + typename StoragePolicy::template StorageSelector::type timeM0; + typename StoragePolicy::template StorageSelector::type did; + + template + typename std::enable_if::value, void>::type resize(size_t size) { + energy.resize(size); + chi2.resize(size); + energyM0.resize(size); + timeM0.resize(size); + did.resize(size); + } + }; + +} // namespace hcal + +#endif // RecoLocalCalo_HcalRecAlgos_interface_RecHitCollection_h diff --git a/CUDADataFormats/HcalRecHitSoA/src/classes.h b/CUDADataFormats/HcalRecHitSoA/src/classes.h new file mode 100644 index 0000000000000..a13782165c413 --- /dev/null +++ b/CUDADataFormats/HcalRecHitSoA/src/classes.h @@ -0,0 +1,3 @@ +#include "CUDADataFormats/Common/interface/Product.h" +#include "CUDADataFormats/HcalRecHitSoA/interface/RecHitCollection.h" +#include "DataFormats/Common/interface/Wrapper.h" diff --git a/CUDADataFormats/HcalRecHitSoA/src/classes_def.xml b/CUDADataFormats/HcalRecHitSoA/src/classes_def.xml new file mode 100644 index 0000000000000..71dd18a7daddb --- /dev/null +++ b/CUDADataFormats/HcalRecHitSoA/src/classes_def.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/CUDADataFormats/SiPixelCluster/BuildFile.xml b/CUDADataFormats/SiPixelCluster/BuildFile.xml new file mode 100644 index 0000000000000..5406d1355533f --- /dev/null +++ b/CUDADataFormats/SiPixelCluster/BuildFile.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/CUDADataFormats/SiPixelCluster/interface/SiPixelClustersCUDA.h b/CUDADataFormats/SiPixelCluster/interface/SiPixelClustersCUDA.h new file mode 100644 index 0000000000000..acdf1b34a6d79 --- /dev/null +++ b/CUDADataFormats/SiPixelCluster/interface/SiPixelClustersCUDA.h @@ -0,0 +1,63 @@ +#ifndef CUDADataFormats_SiPixelCluster_interface_SiPixelClustersCUDA_h +#define CUDADataFormats_SiPixelCluster_interface_SiPixelClustersCUDA_h + +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCompat.h" + +#include + +class SiPixelClustersCUDA { +public: + SiPixelClustersCUDA() = default; + explicit SiPixelClustersCUDA(size_t maxModules, cudaStream_t stream); + ~SiPixelClustersCUDA() = default; + + SiPixelClustersCUDA(const SiPixelClustersCUDA &) = delete; + SiPixelClustersCUDA &operator=(const SiPixelClustersCUDA &) = delete; + SiPixelClustersCUDA(SiPixelClustersCUDA &&) = default; + SiPixelClustersCUDA &operator=(SiPixelClustersCUDA &&) = default; + + void setNClusters(uint32_t nClusters) { nClusters_h = nClusters; } + + uint32_t nClusters() const { return nClusters_h; } + + uint32_t *moduleStart() { return moduleStart_d.get(); } + uint32_t *clusInModule() { return clusInModule_d.get(); } + uint32_t *moduleId() { return moduleId_d.get(); } + uint32_t *clusModuleStart() { return clusModuleStart_d.get(); } + + uint32_t const *moduleStart() const { return moduleStart_d.get(); } + uint32_t const *clusInModule() const { return clusInModule_d.get(); } + uint32_t const *moduleId() const { return moduleId_d.get(); } + uint32_t const *clusModuleStart() const { return clusModuleStart_d.get(); } + + class DeviceConstView { + public: + __device__ __forceinline__ uint32_t moduleStart(int i) const { return __ldg(moduleStart_ + i); } + __device__ __forceinline__ uint32_t clusInModule(int i) const { return __ldg(clusInModule_ + i); } + __device__ __forceinline__ uint32_t moduleId(int i) const { return __ldg(moduleId_ + i); } + __device__ __forceinline__ uint32_t clusModuleStart(int i) const { return __ldg(clusModuleStart_ + i); } + + uint32_t const *moduleStart_; + uint32_t const *clusInModule_; + uint32_t const *moduleId_; + uint32_t const *clusModuleStart_; + }; + + DeviceConstView *view() const { return view_d.get(); } + +private: + cms::cuda::device::unique_ptr moduleStart_d; // index of the first pixel of each module + cms::cuda::device::unique_ptr clusInModule_d; // number of clusters found in each module + cms::cuda::device::unique_ptr moduleId_d; // module id of each module + + // originally from rechits + cms::cuda::device::unique_ptr clusModuleStart_d; // index of the first cluster of each module + + cms::cuda::device::unique_ptr view_d; // "me" pointer + + uint32_t nClusters_h = 0; +}; + +#endif // CUDADataFormats_SiPixelCluster_interface_SiPixelClustersCUDA_h diff --git a/CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h b/CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h new file mode 100644 index 0000000000000..e9dfed7bca7a6 --- /dev/null +++ b/CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h @@ -0,0 +1,37 @@ +#ifndef CUDADataFormats_SiPixelCluster_interface_gpuClusteringConstants_h +#define CUDADataFormats_SiPixelCluster_interface_gpuClusteringConstants_h + +#include +#include + +namespace pixelGPUConstants { +#ifdef GPU_SMALL_EVENTS + // kept for testing and debugging + constexpr uint32_t maxNumberOfHits = 24 * 1024; +#else + // data at pileup 50 has 18300 +/- 3500 hits; 40000 is around 6 sigma away + // tested on MC events with 55-75 pileup events + constexpr uint32_t maxNumberOfHits = 48 * 1024; +#endif +} // namespace pixelGPUConstants + +namespace gpuClustering { +#ifdef GPU_SMALL_EVENTS + // kept for testing and debugging + constexpr uint32_t maxHitsInIter() { return 64; } +#else + // optimized for real data PU 50 + // tested on MC events with 55-75 pileup events + constexpr uint32_t maxHitsInIter() { return 160; } +#endif + constexpr uint32_t maxHitsInModule() { return 1024; } + + constexpr uint16_t maxNumModules = 2000; + constexpr int32_t maxNumClustersPerModules = maxHitsInModule(); + constexpr uint32_t maxNumClusters = pixelGPUConstants::maxNumberOfHits; + constexpr uint16_t invalidModuleId = std::numeric_limits::max() - 1; + static_assert(invalidModuleId > maxNumModules); // invalidModuleId must be > maxNumModules + +} // namespace gpuClustering + +#endif // CUDADataFormats_SiPixelCluster_interface_gpuClusteringConstants_h diff --git a/CUDADataFormats/SiPixelCluster/src/SiPixelClustersCUDA.cc b/CUDADataFormats/SiPixelCluster/src/SiPixelClustersCUDA.cc new file mode 100644 index 0000000000000..ae4a24dbbf83b --- /dev/null +++ b/CUDADataFormats/SiPixelCluster/src/SiPixelClustersCUDA.cc @@ -0,0 +1,19 @@ +#include "CUDADataFormats/SiPixelCluster/interface/SiPixelClustersCUDA.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" + +SiPixelClustersCUDA::SiPixelClustersCUDA(size_t maxModules, cudaStream_t stream) + : moduleStart_d(cms::cuda::make_device_unique(maxModules + 1, stream)), + clusInModule_d(cms::cuda::make_device_unique(maxModules, stream)), + moduleId_d(cms::cuda::make_device_unique(maxModules, stream)), + clusModuleStart_d(cms::cuda::make_device_unique(maxModules + 1, stream)) { + auto view = cms::cuda::make_host_unique(stream); + view->moduleStart_ = moduleStart_d.get(); + view->clusInModule_ = clusInModule_d.get(); + view->moduleId_ = moduleId_d.get(); + view->clusModuleStart_ = clusModuleStart_d.get(); + + view_d = cms::cuda::make_device_unique(stream); + cms::cuda::copyAsync(view_d, view, stream); +} diff --git a/CUDADataFormats/SiPixelCluster/src/classes.h b/CUDADataFormats/SiPixelCluster/src/classes.h new file mode 100644 index 0000000000000..3eee5a1fce009 --- /dev/null +++ b/CUDADataFormats/SiPixelCluster/src/classes.h @@ -0,0 +1,8 @@ +#ifndef CUDADataFormats_SiPixelCluster_src_classes_h +#define CUDADataFormats_SiPixelCluster_src_classes_h + +#include "CUDADataFormats/Common/interface/Product.h" +#include "CUDADataFormats/SiPixelCluster/interface/SiPixelClustersCUDA.h" +#include "DataFormats/Common/interface/Wrapper.h" + +#endif // CUDADataFormats_SiPixelCluster_src_classes_h diff --git a/CUDADataFormats/SiPixelCluster/src/classes_def.xml b/CUDADataFormats/SiPixelCluster/src/classes_def.xml new file mode 100644 index 0000000000000..70decb9f27df7 --- /dev/null +++ b/CUDADataFormats/SiPixelCluster/src/classes_def.xml @@ -0,0 +1,4 @@ + + + + diff --git a/CUDADataFormats/SiPixelDigi/BuildFile.xml b/CUDADataFormats/SiPixelDigi/BuildFile.xml new file mode 100644 index 0000000000000..0806768a9b657 --- /dev/null +++ b/CUDADataFormats/SiPixelDigi/BuildFile.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/CUDADataFormats/SiPixelDigi/interface/SiPixelDigiErrorsCUDA.h b/CUDADataFormats/SiPixelDigi/interface/SiPixelDigiErrorsCUDA.h new file mode 100644 index 0000000000000..bfb15c4ac9f5c --- /dev/null +++ b/CUDADataFormats/SiPixelDigi/interface/SiPixelDigiErrorsCUDA.h @@ -0,0 +1,42 @@ +#ifndef CUDADataFormats_SiPixelDigi_interface_SiPixelDigiErrorsCUDA_h +#define CUDADataFormats_SiPixelDigi_interface_SiPixelDigiErrorsCUDA_h + +#include + +#include "DataFormats/SiPixelRawData/interface/SiPixelErrorCompact.h" +#include "DataFormats/SiPixelRawData/interface/SiPixelFormatterErrors.h" +#include "HeterogeneousCore/CUDAUtilities/interface/SimpleVector.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" + +class SiPixelDigiErrorsCUDA { +public: + using SiPixelErrorCompactVector = cms::cuda::SimpleVector; + + SiPixelDigiErrorsCUDA() = default; + explicit SiPixelDigiErrorsCUDA(size_t maxFedWords, SiPixelFormatterErrors errors, cudaStream_t stream); + ~SiPixelDigiErrorsCUDA() = default; + + SiPixelDigiErrorsCUDA(const SiPixelDigiErrorsCUDA&) = delete; + SiPixelDigiErrorsCUDA& operator=(const SiPixelDigiErrorsCUDA&) = delete; + SiPixelDigiErrorsCUDA(SiPixelDigiErrorsCUDA&&) = default; + SiPixelDigiErrorsCUDA& operator=(SiPixelDigiErrorsCUDA&&) = default; + + const SiPixelFormatterErrors& formatterErrors() const { return formatterErrors_h; } + + SiPixelErrorCompactVector* error() { return error_d.get(); } + SiPixelErrorCompactVector const* error() const { return error_d.get(); } + + using HostDataError = std::pair>; + HostDataError dataErrorToHostAsync(cudaStream_t stream) const; + + void copyErrorToHostAsync(cudaStream_t stream); + +private: + cms::cuda::device::unique_ptr data_d; + cms::cuda::device::unique_ptr error_d; + cms::cuda::host::unique_ptr error_h; + SiPixelFormatterErrors formatterErrors_h; +}; + +#endif // CUDADataFormats_SiPixelDigi_interface_SiPixelDigiErrorsCUDA_h diff --git a/CUDADataFormats/SiPixelDigi/interface/SiPixelDigisCUDA.h b/CUDADataFormats/SiPixelDigi/interface/SiPixelDigisCUDA.h new file mode 100644 index 0000000000000..950f9651cf83b --- /dev/null +++ b/CUDADataFormats/SiPixelDigi/interface/SiPixelDigisCUDA.h @@ -0,0 +1,85 @@ +#ifndef CUDADataFormats_SiPixelDigi_interface_SiPixelDigisCUDA_h +#define CUDADataFormats_SiPixelDigi_interface_SiPixelDigisCUDA_h + +#include + +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCompat.h" + +class SiPixelDigisCUDA { +public: + SiPixelDigisCUDA() = default; + explicit SiPixelDigisCUDA(size_t maxFedWords, cudaStream_t stream); + ~SiPixelDigisCUDA() = default; + + SiPixelDigisCUDA(const SiPixelDigisCUDA &) = delete; + SiPixelDigisCUDA &operator=(const SiPixelDigisCUDA &) = delete; + SiPixelDigisCUDA(SiPixelDigisCUDA &&) = default; + SiPixelDigisCUDA &operator=(SiPixelDigisCUDA &&) = default; + + void setNModulesDigis(uint32_t nModules, uint32_t nDigis) { + nModules_h = nModules; + nDigis_h = nDigis; + } + + uint32_t nModules() const { return nModules_h; } + uint32_t nDigis() const { return nDigis_h; } + + uint16_t *xx() { return xx_d.get(); } + uint16_t *yy() { return yy_d.get(); } + uint16_t *adc() { return adc_d.get(); } + uint16_t *moduleInd() { return moduleInd_d.get(); } + int32_t *clus() { return clus_d.get(); } + uint32_t *pdigi() { return pdigi_d.get(); } + uint32_t *rawIdArr() { return rawIdArr_d.get(); } + + uint16_t const *xx() const { return xx_d.get(); } + uint16_t const *yy() const { return yy_d.get(); } + uint16_t const *adc() const { return adc_d.get(); } + uint16_t const *moduleInd() const { return moduleInd_d.get(); } + int32_t const *clus() const { return clus_d.get(); } + uint32_t const *pdigi() const { return pdigi_d.get(); } + uint32_t const *rawIdArr() const { return rawIdArr_d.get(); } + + cms::cuda::host::unique_ptr adcToHostAsync(cudaStream_t stream) const; + cms::cuda::host::unique_ptr clusToHostAsync(cudaStream_t stream) const; + cms::cuda::host::unique_ptr pdigiToHostAsync(cudaStream_t stream) const; + cms::cuda::host::unique_ptr rawIdArrToHostAsync(cudaStream_t stream) const; + + class DeviceConstView { + public: + __device__ __forceinline__ uint16_t xx(int i) const { return __ldg(xx_ + i); } + __device__ __forceinline__ uint16_t yy(int i) const { return __ldg(yy_ + i); } + __device__ __forceinline__ uint16_t adc(int i) const { return __ldg(adc_ + i); } + __device__ __forceinline__ uint16_t moduleInd(int i) const { return __ldg(moduleInd_ + i); } + __device__ __forceinline__ int32_t clus(int i) const { return __ldg(clus_ + i); } + + uint16_t const *xx_; + uint16_t const *yy_; + uint16_t const *adc_; + uint16_t const *moduleInd_; + int32_t const *clus_; + }; + + const DeviceConstView *view() const { return view_d.get(); } + +private: + // These are consumed by downstream device code + cms::cuda::device::unique_ptr xx_d; // local coordinates of each pixel + cms::cuda::device::unique_ptr yy_d; // + cms::cuda::device::unique_ptr adc_d; // ADC of each pixel + cms::cuda::device::unique_ptr moduleInd_d; // module id of each pixel + cms::cuda::device::unique_ptr clus_d; // cluster id of each pixel + cms::cuda::device::unique_ptr view_d; // "me" pointer + + // These are for CPU output; should we (eventually) place them to a + // separate product? + cms::cuda::device::unique_ptr pdigi_d; // packed digi (row, col, adc) of each pixel + cms::cuda::device::unique_ptr rawIdArr_d; // DetId of each pixel + + uint32_t nModules_h = 0; + uint32_t nDigis_h = 0; +}; + +#endif // CUDADataFormats_SiPixelDigi_interface_SiPixelDigisCUDA_h diff --git a/CUDADataFormats/SiPixelDigi/src/SiPixelDigiErrorsCUDA.cc b/CUDADataFormats/SiPixelDigi/src/SiPixelDigiErrorsCUDA.cc new file mode 100644 index 0000000000000..eecea35ddd622 --- /dev/null +++ b/CUDADataFormats/SiPixelDigi/src/SiPixelDigiErrorsCUDA.cc @@ -0,0 +1,40 @@ +#include + +#include "CUDADataFormats/SiPixelDigi/interface/SiPixelDigiErrorsCUDA.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/memsetAsync.h" + +SiPixelDigiErrorsCUDA::SiPixelDigiErrorsCUDA(size_t maxFedWords, SiPixelFormatterErrors errors, cudaStream_t stream) + : data_d(cms::cuda::make_device_unique(maxFedWords, stream)), + error_d(cms::cuda::make_device_unique(stream)), + error_h(cms::cuda::make_host_unique(stream)), + formatterErrors_h(std::move(errors)) { + cms::cuda::memsetAsync(data_d, 0x00, maxFedWords, stream); + + cms::cuda::make_SimpleVector(error_h.get(), maxFedWords, data_d.get()); + assert(error_h->empty()); + assert(error_h->capacity() == static_cast(maxFedWords)); + + cms::cuda::copyAsync(error_d, error_h, stream); +} + +void SiPixelDigiErrorsCUDA::copyErrorToHostAsync(cudaStream_t stream) { + cms::cuda::copyAsync(error_h, error_d, stream); +} + +SiPixelDigiErrorsCUDA::HostDataError SiPixelDigiErrorsCUDA::dataErrorToHostAsync(cudaStream_t stream) const { + // On one hand size() could be sufficient. On the other hand, if + // someone copies the SimpleVector<>, (s)he might expect the data + // buffer to actually have space for capacity() elements. + auto data = cms::cuda::make_host_unique(error_h->capacity(), stream); + + // but transfer only the required amount + if (not error_h->empty()) { + cms::cuda::copyAsync(data, data_d, error_h->size(), stream); + } + auto err = *error_h; + err.set_data(data.get()); + return HostDataError(err, std::move(data)); +} diff --git a/CUDADataFormats/SiPixelDigi/src/SiPixelDigisCUDA.cc b/CUDADataFormats/SiPixelDigi/src/SiPixelDigisCUDA.cc new file mode 100644 index 0000000000000..4e6a3fc2593fd --- /dev/null +++ b/CUDADataFormats/SiPixelDigi/src/SiPixelDigisCUDA.cc @@ -0,0 +1,46 @@ +#include "CUDADataFormats/SiPixelDigi/interface/SiPixelDigisCUDA.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" + +SiPixelDigisCUDA::SiPixelDigisCUDA(size_t maxFedWords, cudaStream_t stream) + : xx_d(cms::cuda::make_device_unique(maxFedWords, stream)), + yy_d(cms::cuda::make_device_unique(maxFedWords, stream)), + adc_d(cms::cuda::make_device_unique(maxFedWords, stream)), + moduleInd_d(cms::cuda::make_device_unique(maxFedWords, stream)), + clus_d(cms::cuda::make_device_unique(maxFedWords, stream)), + view_d(cms::cuda::make_device_unique(stream)), + pdigi_d(cms::cuda::make_device_unique(maxFedWords, stream)), + rawIdArr_d(cms::cuda::make_device_unique(maxFedWords, stream)) { + auto view = cms::cuda::make_host_unique(stream); + view->xx_ = xx_d.get(); + view->yy_ = yy_d.get(); + view->adc_ = adc_d.get(); + view->moduleInd_ = moduleInd_d.get(); + view->clus_ = clus_d.get(); + cms::cuda::copyAsync(view_d, view, stream); +} + +cms::cuda::host::unique_ptr SiPixelDigisCUDA::adcToHostAsync(cudaStream_t stream) const { + auto ret = cms::cuda::make_host_unique(nDigis(), stream); + cms::cuda::copyAsync(ret, adc_d, nDigis(), stream); + return ret; +} + +cms::cuda::host::unique_ptr SiPixelDigisCUDA::clusToHostAsync(cudaStream_t stream) const { + auto ret = cms::cuda::make_host_unique(nDigis(), stream); + cms::cuda::copyAsync(ret, clus_d, nDigis(), stream); + return ret; +} + +cms::cuda::host::unique_ptr SiPixelDigisCUDA::pdigiToHostAsync(cudaStream_t stream) const { + auto ret = cms::cuda::make_host_unique(nDigis(), stream); + cms::cuda::copyAsync(ret, pdigi_d, nDigis(), stream); + return ret; +} + +cms::cuda::host::unique_ptr SiPixelDigisCUDA::rawIdArrToHostAsync(cudaStream_t stream) const { + auto ret = cms::cuda::make_host_unique(nDigis(), stream); + cms::cuda::copyAsync(ret, rawIdArr_d, nDigis(), stream); + return ret; +} diff --git a/CUDADataFormats/SiPixelDigi/src/classes.h b/CUDADataFormats/SiPixelDigi/src/classes.h new file mode 100644 index 0000000000000..fc5d318fad688 --- /dev/null +++ b/CUDADataFormats/SiPixelDigi/src/classes.h @@ -0,0 +1,9 @@ +#ifndef CUDADataFormats_SiPixelDigi_src_classes_h +#define CUDADataFormats_SiPixelDigi_src_classes_h + +#include "CUDADataFormats/Common/interface/Product.h" +#include "CUDADataFormats/SiPixelDigi/interface/SiPixelDigiErrorsCUDA.h" +#include "CUDADataFormats/SiPixelDigi/interface/SiPixelDigisCUDA.h" +#include "DataFormats/Common/interface/Wrapper.h" + +#endif // CUDADataFormats_SiPixelDigi_src_classes_h diff --git a/CUDADataFormats/SiPixelDigi/src/classes_def.xml b/CUDADataFormats/SiPixelDigi/src/classes_def.xml new file mode 100644 index 0000000000000..ff775afdc2046 --- /dev/null +++ b/CUDADataFormats/SiPixelDigi/src/classes_def.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/CUDADataFormats/TrackingRecHit/BuildFile.xml b/CUDADataFormats/TrackingRecHit/BuildFile.xml new file mode 100644 index 0000000000000..8dc569d40b6c4 --- /dev/null +++ b/CUDADataFormats/TrackingRecHit/BuildFile.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h b/CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h new file mode 100644 index 0000000000000..967b5c6c8282f --- /dev/null +++ b/CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h @@ -0,0 +1,141 @@ +#ifndef CUDADataFormats_TrackingRecHit_interface_TrackingRecHit2DHeterogeneous_h +#define CUDADataFormats_TrackingRecHit_interface_TrackingRecHit2DHeterogeneous_h + +#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DSOAView.h" +#include "CUDADataFormats/Common/interface/HeterogeneousSoA.h" + +template +class TrackingRecHit2DHeterogeneous { +public: + template + using unique_ptr = typename Traits::template unique_ptr; + + using PhiBinner = TrackingRecHit2DSOAView::PhiBinner; + + TrackingRecHit2DHeterogeneous() = default; + + explicit TrackingRecHit2DHeterogeneous(uint32_t nHits, + pixelCPEforGPU::ParamsOnGPU const* cpeParams, + uint32_t const* hitsModuleStart, + cudaStream_t stream); + + ~TrackingRecHit2DHeterogeneous() = default; + + TrackingRecHit2DHeterogeneous(const TrackingRecHit2DHeterogeneous&) = delete; + TrackingRecHit2DHeterogeneous& operator=(const TrackingRecHit2DHeterogeneous&) = delete; + TrackingRecHit2DHeterogeneous(TrackingRecHit2DHeterogeneous&&) = default; + TrackingRecHit2DHeterogeneous& operator=(TrackingRecHit2DHeterogeneous&&) = default; + + TrackingRecHit2DSOAView* view() { return m_view.get(); } + TrackingRecHit2DSOAView const* view() const { return m_view.get(); } + + auto nHits() const { return m_nHits; } + + auto hitsModuleStart() const { return m_hitsModuleStart; } + auto hitsLayerStart() { return m_hitsLayerStart; } + auto phiBinner() { return m_phiBinner; } + auto iphi() { return m_iphi; } + + // only the local coord and detector index + cms::cuda::host::unique_ptr localCoordToHostAsync(cudaStream_t stream) const; + cms::cuda::host::unique_ptr hitsModuleStartToHostAsync(cudaStream_t stream) const; + +private: + static constexpr uint32_t n16 = 4; // number of elements in m_store16 + static constexpr uint32_t n32 = 9; // number of elements in m_store32 + static_assert(sizeof(uint32_t) == sizeof(float)); // just stating the obvious + + unique_ptr m_store16; //! + unique_ptr m_store32; //! + + unique_ptr m_PhiBinnerStore; //! + unique_ptr m_AverageGeometryStore; //! + + unique_ptr m_view; //! + + uint32_t m_nHits; + + uint32_t const* m_hitsModuleStart; // needed for legacy, this is on GPU! + + // needed as kernel params... + PhiBinner* m_phiBinner; + uint32_t* m_hitsLayerStart; + int16_t* m_iphi; +}; + +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +template +TrackingRecHit2DHeterogeneous::TrackingRecHit2DHeterogeneous(uint32_t nHits, + pixelCPEforGPU::ParamsOnGPU const* cpeParams, + uint32_t const* hitsModuleStart, + cudaStream_t stream) + : m_nHits(nHits), m_hitsModuleStart(hitsModuleStart) { + auto view = Traits::template make_host_unique(stream); + + view->m_nHits = nHits; + m_view = Traits::template make_device_unique(stream); + m_AverageGeometryStore = Traits::template make_device_unique(stream); + view->m_averageGeometry = m_AverageGeometryStore.get(); + view->m_cpeParams = cpeParams; + view->m_hitsModuleStart = hitsModuleStart; + + // if empy do not bother + if (0 == nHits) { + if constexpr (std::is_same::value) { + cms::cuda::copyAsync(m_view, view, stream); + } else { + m_view.reset(view.release()); // NOLINT: std::move() breaks CUDA version + } + return; + } + + // the single arrays are not 128 bit alligned... + // the hits are actually accessed in order only in building + // if ordering is relevant they may have to be stored phi-ordered by layer or so + // this will break 1to1 correspondence with cluster and module locality + // so unless proven VERY inefficient we keep it ordered as generated + m_store16 = Traits::template make_device_unique(nHits * n16, stream); + m_store32 = Traits::template make_device_unique(nHits * n32 + 11, stream); + m_PhiBinnerStore = Traits::template make_device_unique(stream); + + auto get16 = [&](int i) { return m_store16.get() + i * nHits; }; + auto get32 = [&](int i) { return m_store32.get() + i * nHits; }; + + // copy all the pointers + m_phiBinner = view->m_phiBinner = m_PhiBinnerStore.get(); + + view->m_xl = get32(0); + view->m_yl = get32(1); + view->m_xerr = get32(2); + view->m_yerr = get32(3); + + view->m_xg = get32(4); + view->m_yg = get32(5); + view->m_zg = get32(6); + view->m_rg = get32(7); + + m_iphi = view->m_iphi = reinterpret_cast(get16(0)); + + view->m_charge = reinterpret_cast(get32(8)); + view->m_xsize = reinterpret_cast(get16(2)); + view->m_ysize = reinterpret_cast(get16(3)); + view->m_detInd = get16(1); + + m_hitsLayerStart = view->m_hitsLayerStart = reinterpret_cast(get32(n32)); + + // transfer view + if constexpr (std::is_same::value) { + cms::cuda::copyAsync(m_view, view, stream); + } else { + m_view.reset(view.release()); // NOLINT: std::move() breaks CUDA version + } +} + +using TrackingRecHit2DGPU = TrackingRecHit2DHeterogeneous; +using TrackingRecHit2DCUDA = TrackingRecHit2DHeterogeneous; +using TrackingRecHit2DCPU = TrackingRecHit2DHeterogeneous; +using TrackingRecHit2DHost = TrackingRecHit2DHeterogeneous; + +#endif // CUDADataFormats_TrackingRecHit_interface_TrackingRecHit2DHeterogeneous_h diff --git a/CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DSOAView.h b/CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DSOAView.h new file mode 100644 index 0000000000000..7f3c59cd70faf --- /dev/null +++ b/CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DSOAView.h @@ -0,0 +1,102 @@ +#ifndef CUDADataFormats_TrackingRecHit_interface_TrackingRecHit2DSOAView_h +#define CUDADataFormats_TrackingRecHit_interface_TrackingRecHit2DSOAView_h + +#include + +#include "CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h" +#include "HeterogeneousCore/CUDAUtilities/interface/HistoContainer.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCompat.h" +#include "Geometry/TrackerGeometryBuilder/interface/phase1PixelTopology.h" + +namespace pixelCPEforGPU { + struct ParamsOnGPU; +} + +class TrackingRecHit2DSOAView { +public: + static constexpr uint32_t maxHits() { return gpuClustering::maxNumClusters; } + using hindex_type = uint32_t; // if above is <=2^32 + + using PhiBinner = + cms::cuda::HistoContainer; + + using AverageGeometry = phase1PixelTopology::AverageGeometry; + + template + friend class TrackingRecHit2DHeterogeneous; + + __device__ __forceinline__ uint32_t nHits() const { return m_nHits; } + + __device__ __forceinline__ float& xLocal(int i) { return m_xl[i]; } + __device__ __forceinline__ float xLocal(int i) const { return __ldg(m_xl + i); } + __device__ __forceinline__ float& yLocal(int i) { return m_yl[i]; } + __device__ __forceinline__ float yLocal(int i) const { return __ldg(m_yl + i); } + + __device__ __forceinline__ float& xerrLocal(int i) { return m_xerr[i]; } + __device__ __forceinline__ float xerrLocal(int i) const { return __ldg(m_xerr + i); } + __device__ __forceinline__ float& yerrLocal(int i) { return m_yerr[i]; } + __device__ __forceinline__ float yerrLocal(int i) const { return __ldg(m_yerr + i); } + + __device__ __forceinline__ float& xGlobal(int i) { return m_xg[i]; } + __device__ __forceinline__ float xGlobal(int i) const { return __ldg(m_xg + i); } + __device__ __forceinline__ float& yGlobal(int i) { return m_yg[i]; } + __device__ __forceinline__ float yGlobal(int i) const { return __ldg(m_yg + i); } + __device__ __forceinline__ float& zGlobal(int i) { return m_zg[i]; } + __device__ __forceinline__ float zGlobal(int i) const { return __ldg(m_zg + i); } + __device__ __forceinline__ float& rGlobal(int i) { return m_rg[i]; } + __device__ __forceinline__ float rGlobal(int i) const { return __ldg(m_rg + i); } + + __device__ __forceinline__ int16_t& iphi(int i) { return m_iphi[i]; } + __device__ __forceinline__ int16_t iphi(int i) const { return __ldg(m_iphi + i); } + + __device__ __forceinline__ int32_t& charge(int i) { return m_charge[i]; } + __device__ __forceinline__ int32_t charge(int i) const { return __ldg(m_charge + i); } + __device__ __forceinline__ int16_t& clusterSizeX(int i) { return m_xsize[i]; } + __device__ __forceinline__ int16_t clusterSizeX(int i) const { return __ldg(m_xsize + i); } + __device__ __forceinline__ int16_t& clusterSizeY(int i) { return m_ysize[i]; } + __device__ __forceinline__ int16_t clusterSizeY(int i) const { return __ldg(m_ysize + i); } + __device__ __forceinline__ uint16_t& detectorIndex(int i) { return m_detInd[i]; } + __device__ __forceinline__ uint16_t detectorIndex(int i) const { return __ldg(m_detInd + i); } + + __device__ __forceinline__ pixelCPEforGPU::ParamsOnGPU const& cpeParams() const { return *m_cpeParams; } + + __device__ __forceinline__ uint32_t hitsModuleStart(int i) const { return __ldg(m_hitsModuleStart + i); } + + __device__ __forceinline__ uint32_t* hitsLayerStart() { return m_hitsLayerStart; } + __device__ __forceinline__ uint32_t const* hitsLayerStart() const { return m_hitsLayerStart; } + + __device__ __forceinline__ PhiBinner& phiBinner() { return *m_phiBinner; } + __device__ __forceinline__ PhiBinner const& phiBinner() const { return *m_phiBinner; } + + __device__ __forceinline__ AverageGeometry& averageGeometry() { return *m_averageGeometry; } + __device__ __forceinline__ AverageGeometry const& averageGeometry() const { return *m_averageGeometry; } + +private: + // local coord + float *m_xl, *m_yl; + float *m_xerr, *m_yerr; + + // global coord + float *m_xg, *m_yg, *m_zg, *m_rg; + int16_t* m_iphi; + + // cluster properties + int32_t* m_charge; + int16_t* m_xsize; + int16_t* m_ysize; + uint16_t* m_detInd; + + // supporting objects + // m_averageGeometry is corrected for beam spot, not sure where to host it otherwise + AverageGeometry* m_averageGeometry; // owned by TrackingRecHit2DHeterogeneous + pixelCPEforGPU::ParamsOnGPU const* m_cpeParams; // forwarded from setup, NOT owned + uint32_t const* m_hitsModuleStart; // forwarded from clusters + + uint32_t* m_hitsLayerStart; + + PhiBinner* m_phiBinner; + + uint32_t m_nHits; +}; + +#endif // CUDADataFormats_TrackingRecHit_interface_TrackingRecHit2DSOAView_h diff --git a/CUDADataFormats/TrackingRecHit/src/TrackingRecHit2DHeterogeneous.cc b/CUDADataFormats/TrackingRecHit/src/TrackingRecHit2DHeterogeneous.cc new file mode 100644 index 0000000000000..dd3cf548e11dd --- /dev/null +++ b/CUDADataFormats/TrackingRecHit/src/TrackingRecHit2DHeterogeneous.cc @@ -0,0 +1,20 @@ +#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" + +template <> +cms::cuda::host::unique_ptr TrackingRecHit2DCUDA::localCoordToHostAsync(cudaStream_t stream) const { + auto ret = cms::cuda::make_host_unique(4 * nHits(), stream); + cms::cuda::copyAsync(ret, m_store32, 4 * nHits(), stream); + return ret; +} + +template <> +cms::cuda::host::unique_ptr TrackingRecHit2DCUDA::hitsModuleStartToHostAsync(cudaStream_t stream) const { + auto ret = cms::cuda::make_host_unique(gpuClustering::maxNumModules + 1, stream); + cudaCheck(cudaMemcpyAsync( + ret.get(), m_hitsModuleStart, sizeof(uint32_t) * (gpuClustering::maxNumModules + 1), cudaMemcpyDefault, stream)); + return ret; +} diff --git a/CUDADataFormats/TrackingRecHit/src/classes.h b/CUDADataFormats/TrackingRecHit/src/classes.h new file mode 100644 index 0000000000000..86fef25746efd --- /dev/null +++ b/CUDADataFormats/TrackingRecHit/src/classes.h @@ -0,0 +1,8 @@ +#ifndef CUDADataFormats_SiPixelCluster_src_classes_h +#define CUDADataFormats_SiPixelCluster_src_classes_h + +#include "CUDADataFormats/Common/interface/Product.h" +#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h" +#include "DataFormats/Common/interface/Wrapper.h" + +#endif // CUDADataFormats_SiPixelCluster_src_classes_h diff --git a/CUDADataFormats/TrackingRecHit/src/classes_def.xml b/CUDADataFormats/TrackingRecHit/src/classes_def.xml new file mode 100644 index 0000000000000..7e1919de510b3 --- /dev/null +++ b/CUDADataFormats/TrackingRecHit/src/classes_def.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/CUDADataFormats/TrackingRecHit/test/BuildFile.xml b/CUDADataFormats/TrackingRecHit/test/BuildFile.xml new file mode 100644 index 0000000000000..74f2818790d0f --- /dev/null +++ b/CUDADataFormats/TrackingRecHit/test/BuildFile.xml @@ -0,0 +1,3 @@ + + + diff --git a/CUDADataFormats/TrackingRecHit/test/TrackingRecHit2DCUDA_t.cpp b/CUDADataFormats/TrackingRecHit/test/TrackingRecHit2DCUDA_t.cpp new file mode 100644 index 0000000000000..3d8413b36ec96 --- /dev/null +++ b/CUDADataFormats/TrackingRecHit/test/TrackingRecHit2DCUDA_t.cpp @@ -0,0 +1,29 @@ +#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" +#include "HeterogeneousCore/CUDAUtilities/interface/requireDevices.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +namespace testTrackingRecHit2D { + + void runKernels(TrackingRecHit2DSOAView* hits); + +} + +int main() { + cms::cudatest::requireDevices(); + + cudaStream_t stream; + cudaCheck(cudaStreamCreateWithFlags(&stream, cudaStreamNonBlocking)); + + // inner scope to deallocate memory before destroying the stream + { + auto nHits = 200; + TrackingRecHit2DCUDA tkhit(nHits, nullptr, nullptr, stream); + + testTrackingRecHit2D::runKernels(tkhit.view()); + } + + cudaCheck(cudaStreamDestroy(stream)); + + return 0; +} diff --git a/CUDADataFormats/TrackingRecHit/test/TrackingRecHit2DCUDA_t.cu b/CUDADataFormats/TrackingRecHit/test/TrackingRecHit2DCUDA_t.cu new file mode 100644 index 0000000000000..06bd599d074f9 --- /dev/null +++ b/CUDADataFormats/TrackingRecHit/test/TrackingRecHit2DCUDA_t.cu @@ -0,0 +1,31 @@ +#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h" + +namespace testTrackingRecHit2D { + + __global__ void fill(TrackingRecHit2DSOAView* phits) { + assert(phits); + auto& hits = *phits; + assert(hits.nHits() == 200); + + int i = threadIdx.x; + if (i > 200) + return; + } + + __global__ void verify(TrackingRecHit2DSOAView const* phits) { + assert(phits); + auto const& hits = *phits; + assert(hits.nHits() == 200); + + int i = threadIdx.x; + if (i > 200) + return; + } + + void runKernels(TrackingRecHit2DSOAView* hits) { + assert(hits); + fill<<<1, 1024>>>(hits); + verify<<<1, 1024>>>(hits); + } + +} // namespace testTrackingRecHit2D diff --git a/CalibCalorimetry/CastorCalib/interface/CastorLedAnalysis.h b/CalibCalorimetry/CastorCalib/interface/CastorLedAnalysis.h index 9eec25118f889..8171f971a3809 100644 --- a/CalibCalorimetry/CastorCalib/interface/CastorLedAnalysis.h +++ b/CalibCalorimetry/CastorCalib/interface/CastorLedAnalysis.h @@ -7,7 +7,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h" diff --git a/CalibCalorimetry/CastorCalib/interface/CastorPedestalAnalysis.h b/CalibCalorimetry/CastorCalib/interface/CastorPedestalAnalysis.h index 04a7ee2360bb7..23e7d055ef289 100644 --- a/CalibCalorimetry/CastorCalib/interface/CastorPedestalAnalysis.h +++ b/CalibCalorimetry/CastorCalib/interface/CastorPedestalAnalysis.h @@ -7,7 +7,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/HcalDetId/interface/HcalDetId.h" #include "DataFormats/HcalDetId/interface/HcalCastorDetId.h" #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h" diff --git a/CalibCalorimetry/CastorCalib/interface/CastorPedestalsAnalysis.h b/CalibCalorimetry/CastorCalib/interface/CastorPedestalsAnalysis.h index e776ad21df6c5..c2273879efb80 100644 --- a/CalibCalorimetry/CastorCalib/interface/CastorPedestalsAnalysis.h +++ b/CalibCalorimetry/CastorCalib/interface/CastorPedestalsAnalysis.h @@ -1,7 +1,6 @@ #ifndef CastorPedestalsAnalysis_H #define CastorPedestalsAnalysis_H -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" @@ -97,6 +96,9 @@ class CastorPedestalsAnalysis : public edm::EDAnalyzer { std::string XMLtag; std::string ZSfilename; + edm::ESGetToken tok_cond_; + edm::ESGetToken tok_map_; + TH1F *CASTORMeans; TH1F *CASTORWidths; diff --git a/CalibCalorimetry/CastorCalib/plugins/CastorPedestalsAnalysis.cc b/CalibCalorimetry/CastorCalib/plugins/CastorPedestalsAnalysis.cc index 46dd00ddbe90d..05d5fdf0c9b04 100644 --- a/CalibCalorimetry/CastorCalib/plugins/CastorPedestalsAnalysis.cc +++ b/CalibCalorimetry/CastorCalib/plugins/CastorPedestalsAnalysis.cc @@ -16,6 +16,9 @@ CastorPedestalsAnalysis::CastorPedestalsAnalysis(const edm::ParameterSet& ps) firstTS = ps.getUntrackedParameter("firstTS", 0); lastTS = ps.getUntrackedParameter("lastTS", 9); firsttime = true; + + tok_cond_ = esConsumes(); + tok_map_ = esConsumes(); } CastorPedestalsAnalysis::~CastorPedestalsAnalysis() { @@ -250,15 +253,10 @@ CastorPedestalsAnalysis::~CastorPedestalsAnalysis() { // ------------ method called to for each event ------------ void CastorPedestalsAnalysis::analyze(const edm::Event& e, const edm::EventSetup& iSetup) { - using namespace edm; - using namespace std; - edm::Handle castor; e.getByLabel(castorDigiCollectionTag, castor); - edm::ESHandle conditions; - iSetup.get().get(conditions); - + auto conditions = &iSetup.getData(tok_cond_); const CastorQIEShape* shape = conditions->getCastorShape(); if (firsttime) { @@ -290,9 +288,7 @@ void CastorPedestalsAnalysis::analyze(const edm::Event& e, const edm::EventSetup // dephist[2] = new TH2F("Pedestals (ADC)","Depth 3",89, -44, 44, 72, .5, 72.5); // dephist[3] = new TH2F("Pedestals (ADC)","Depth 4",89, -44, 44, 72, .5, 72.5); - edm::ESHandle refEMap; - iSetup.get().get(refEMap); - const CastorElectronicsMap* myRefEMap = refEMap.product(); + const CastorElectronicsMap* myRefEMap = &iSetup.getData(tok_map_); std::vector listEMap = myRefEMap->allPrecisionId(); for (std::vector::const_iterator it = listEMap.begin(); it != listEMap.end(); ++it) { HcalGenericDetId mygenid(it->rawId()); @@ -301,8 +297,7 @@ void CastorPedestalsAnalysis::analyze(const edm::Event& e, const edm::EventSetup HcalCastorDetId chanid(mygenid.rawId()); a.detid = chanid; a.usedflag = false; - string type; - type = "CASTOR"; + std::string type = "CASTOR"; for (int i = 0; i != 4; i++) { a.cap[i] = 0; a.capfc[i] = 0; diff --git a/CalibCalorimetry/CastorCalib/src/CastorPedestalAnalysis.cc b/CalibCalorimetry/CastorCalib/src/CastorPedestalAnalysis.cc index d9fa4f47c10c8..47fa2977c52ed 100644 --- a/CalibCalorimetry/CastorCalib/src/CastorPedestalAnalysis.cc +++ b/CalibCalorimetry/CastorCalib/src/CastorPedestalAnalysis.cc @@ -7,11 +7,10 @@ #include "CondFormats/CastorObjects/interface/CastorPedestalWidths.h" #include "CalibCalorimetry/CastorCalib/interface/CastorPedestalAnalysis.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include -using namespace std; - CastorPedestalAnalysis::CastorPedestalAnalysis(const edm::ParameterSet& ps) : fRefPedestals(nullptr), fRefPedestalWidths(nullptr), @@ -29,17 +28,17 @@ CastorPedestalAnalysis::CastorPedestalAnalysis(const edm::ParameterSet& ps) state.push_back(true); // user cfg parameters - m_outputFileMean = ps.getUntrackedParameter("outputFileMeans", ""); + m_outputFileMean = ps.getUntrackedParameter("outputFileMeans", ""); if (!m_outputFileMean.empty()) { - cout << "Castor pedestal means will be saved to " << m_outputFileMean.c_str() << endl; + edm::LogWarning("Castor") << "Castor pedestal means will be saved to " << m_outputFileMean.c_str(); } - m_outputFileWidth = ps.getUntrackedParameter("outputFileWidths", ""); + m_outputFileWidth = ps.getUntrackedParameter("outputFileWidths", ""); if (!m_outputFileWidth.empty()) { - cout << "Castor pedestal widths will be saved to " << m_outputFileWidth.c_str() << endl; + edm::LogWarning("Castor") << "Castor pedestal widths will be saved to " << m_outputFileWidth.c_str(); } - m_outputFileROOT = ps.getUntrackedParameter("outputFileHist", ""); + m_outputFileROOT = ps.getUntrackedParameter("outputFileHist", ""); if (!m_outputFileROOT.empty()) { - cout << "Castor pedestal histograms will be saved to " << m_outputFileROOT.c_str() << endl; + edm::LogWarning("Castor") << "Castor pedestal histograms will be saved to " << m_outputFileROOT.c_str(); } m_nevtsample = ps.getUntrackedParameter("nevtsample", 0); // for compatibility with previous versions @@ -51,9 +50,9 @@ CastorPedestalAnalysis::CastorPedestalAnalysis(const edm::ParameterSet& ps) if (m_pedValflag < 0) m_pedValflag = 0; if (m_nevtsample > 0 && m_pedValflag > 0) { - cout << "WARNING - incompatible cfg options: nevtsample = " << m_nevtsample << ", pedValflag = " << m_pedValflag - << endl; - cout << "Setting pedValflag = 0" << endl; + edm::LogWarning("Castor") << "WARNING - incompatible cfg options: nevtsample = " << m_nevtsample + << ", pedValflag = " << m_pedValflag; + edm::LogWarning("Castor") << "Setting pedValflag = 0"; m_pedValflag = 0; } if (m_pedValflag > 1) @@ -146,7 +145,7 @@ void CastorPedestalAnalysis::per2CapsHists(int flag, const HcalDetId detid, const HcalQIESample& qie1, const HcalQIESample& qie2, - map >& toolT, + std::map >& toolT, const CastorDbService& cond) { // this function is due to be called for every time slice, it fills either a charge // histo for a single capID (flag=0) or a product histo for two capIDs (flag>0) @@ -155,9 +154,9 @@ void CastorPedestalAnalysis::per2CapsHists(int flag, static const int bins2 = 100; float lo = -0.5; float hi = 9.5; - map _mei; - static map > QieCalibMap; - string type = "Castor"; + std::map _mei; + static std::map > QieCalibMap; + std::string type = "Castor"; /* if(id==0){ @@ -176,8 +175,8 @@ void CastorPedestalAnalysis::per2CapsHists(int flag, // if histos for the current channel do not exist, first create them, if (_meot == toolT.end()) { - map insert; - map qiecalib; + std::map insert; + std::map qiecalib; char name[1024]; for (int i = 0; i < 4; i++) { lo = -0.5; @@ -266,7 +265,7 @@ void CastorPedestalAnalysis::per2CapsHists(int flag, // fill 2 capID histo if (flag > 0) { - map qiecalib = QieCalibMap[detid]; + std::map qiecalib = QieCalibMap[detid]; //float charge1=(qie1.adc()-qiecalib[qie1.capid()+4])/qiecalib[qie1.capid()]; //float charge2=(qie2.adc()-qiecalib[qie2.capid()+4])/qiecalib[qie2.capid()]; if (charge1 * charge2 < bins2) { @@ -292,11 +291,11 @@ void CastorPedestalAnalysis::AllChanHists(const HcalDetId detid, const HcalQIESample& qie3, const HcalQIESample& qie4, const HcalQIESample& qie5, - map >& toolT) { + std::map >& toolT) { // this function is due to be called for every channel _meot = toolT.find(detid); - map _mei = _meot->second; + std::map _mei = _meot->second; _mei[16].first->Fill(qie4.adc() + qie5.adc() - 1.); _mei[17].first->Fill(qie4.adc() + qie5.adc() - qie2.adc() - qie3.adc()); _mei[18].first->Fill(qie4.adc() + qie5.adc() - (qie0.adc() + qie1.adc() + qie2.adc() + qie3.adc()) / 2.); @@ -316,7 +315,9 @@ void CastorPedestalAnalysis::SampleAnalysis() { } //----------------------------------------------------------------------------- -void CastorPedestalAnalysis::GetPedConst(map >& toolT, TH1F* PedMeans, TH1F* PedWidths) { +void CastorPedestalAnalysis::GetPedConst(std::map >& toolT, + TH1F* PedMeans, + TH1F* PedWidths) { // Completely rewritten version oct 2006 // Compute pedestal constants and fill into CastorPedestals and CastorPedestalWidths objects float cap[4]; @@ -547,18 +548,18 @@ int CastorPedestalAnalysis::done(const CastorPedestals* fInputPedestals, castorHists.PEDMEAN->Write(); m_file->Close(); - cout << "Hcal/Castor histograms written to " << m_outputFileROOT.c_str() << endl; + edm::LogWarning("Castor") << "Hcal/Castor histograms written to " << m_outputFileROOT.c_str(); return (int)m_AllPedsOK; } //----------------------------------------------------------------------------- -void CastorPedestalAnalysis::Trendings(map >& toolT, +void CastorPedestalAnalysis::Trendings(std::map >& toolT, TH1F* Chi2, TH1F* CapidAverage, TH1F* CapidChi2) { // check stability of pedestal constants in a single long run - map > AverageValues; + std::map > AverageValues; for (_meot = toolT.begin(); _meot != toolT.end(); _meot++) { for (int i = 0; i < 4; i++) { @@ -727,8 +728,8 @@ int CastorPedestalAnalysis::CastorPedVal(int nstat[4], float RefPedSigs[4][4]; float RawPedVals[4]; float RawPedSigs[4][4]; - map isinRaw; - map isinRef; + std::map isinRaw; + std::map isinRef; std::vector RefChanns = fRefPedestals->getAllChannels(); std::vector RawChanns = fRawPedestals->getAllChannels(); std::ofstream PedValLog; diff --git a/CalibCalorimetry/CastorCalib/test/castor_localrun_pedestals_cfg.py b/CalibCalorimetry/CastorCalib/test/castor_localrun_pedestals_cfg.py index 43fd64145641c..bf1ad1c0716f3 100644 --- a/CalibCalorimetry/CastorCalib/test/castor_localrun_pedestals_cfg.py +++ b/CalibCalorimetry/CastorCalib/test/castor_localrun_pedestals_cfg.py @@ -117,7 +117,8 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['detailedInfo.txt'] +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.detailedInfo = dict(extension = 'txt') #process.p = cms.Path(process.dumpRaw*process.castorDigis*process.dump*process.m*process.dumpECA) process.p = cms.Path(process.castorDigis*process.castorpedestalsanalysis) diff --git a/CalibCalorimetry/EcalTrivialCondModules/BuildFile.xml b/CalibCalorimetry/EcalTrivialCondModules/BuildFile.xml index f12d9bd260984..48aabc6f657d9 100644 --- a/CalibCalorimetry/EcalTrivialCondModules/BuildFile.xml +++ b/CalibCalorimetry/EcalTrivialCondModules/BuildFile.xml @@ -2,6 +2,7 @@ + diff --git a/CalibCalorimetry/EcalTrivialCondModules/interface/EcalLaserCondTools.h b/CalibCalorimetry/EcalTrivialCondModules/interface/EcalLaserCondTools.h index 0356144444696..767c91a27d448 100644 --- a/CalibCalorimetry/EcalTrivialCondModules/interface/EcalLaserCondTools.h +++ b/CalibCalorimetry/EcalTrivialCondModules/interface/EcalLaserCondTools.h @@ -43,6 +43,7 @@ class EcalLaserCondTools : public edm::EDAnalyzer { * @param es events setup */ void analyze(const edm::Event& evt, const edm::EventSetup& es) override; + void from_hdf_to_db(); private: static std::string toNth(int n); diff --git a/CalibCalorimetry/EcalTrivialCondModules/python/EcalLaserCondTools_cfi.py b/CalibCalorimetry/EcalTrivialCondModules/python/EcalLaserCondTools_cfi.py new file mode 100644 index 0000000000000..5967b8a21053c --- /dev/null +++ b/CalibCalorimetry/EcalTrivialCondModules/python/EcalLaserCondTools_cfi.py @@ -0,0 +1,44 @@ +import FWCore.ParameterSet.Config as cms + +ecalLaserCondTools = cms.EDAnalyzer("EcalLaserCondTools", + #File with a list of events for whose IOVs must be filled in the database + #Use empty string to include all the IOVs found in the input files + eventListFile = cms.string(""), + + #Module verbosity level + verbosity = cms.int32(1), + + #Running mode: + # ascii_file_to_db: fill the database with corrections read from an ascii file + # hdf_file_to_db: fill the database with corrections read from a HDF5 file + # db_to_ascii_file: export IOVS from the database to an ascii file, corr_dump.txt + mode = cms.string(""), + + #List of input files for file-to-database modes + inputFiles = cms.vstring(), + + #Numbre of first IOVs to skip when importing IOVs from a file + skipIov = cms.int32(0), + + #Number of IOVs to insert in the database, use -1 to insert + #all the IOVs found in the input files + nIovs = cms.int32(-1), + + #Limit database IOV insertion for IOV after the + #provided time, expressed in unix time + fromTime = cms.int32(0), + + #If positive, IOV insertion for IOV before the + #provided time, expressed in unix time + toTime = cms.int32(-1), + + #Force p1, p2, or p3 to 1 if its value + #is lower than the provided bound value + transparencyMin = cms.double(-1.), + + #Force p1, p2, or p3 to 1 if its value + #is lower than the provided bound value + transparencyMax = cms.double(9999.) + ) + + diff --git a/CalibCalorimetry/EcalTrivialCondModules/src/EcalLaserCondTools.cc b/CalibCalorimetry/EcalTrivialCondModules/src/EcalLaserCondTools.cc index 4d8fc3cf76e93..eb836e3c4a5f7 100644 --- a/CalibCalorimetry/EcalTrivialCondModules/src/EcalLaserCondTools.cc +++ b/CalibCalorimetry/EcalTrivialCondModules/src/EcalLaserCondTools.cc @@ -10,24 +10,26 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "CondFormats/DataRecord/interface/EcalLaserAPDPNRatiosRcd.h" #include "DataFormats/EcalDetId/interface/EBDetId.h" #include "DataFormats/EcalDetId/interface/EEDetId.h" +#include "hdf5.h" + #include #include #include - -using namespace std; +#include EcalLaserCondTools::EcalLaserCondTools(const edm::ParameterSet& ps) : fout_(nullptr), eventList_(nullptr), - eventListFileName_(ps.getParameter("eventListFile")), + eventListFileName_(ps.getParameter("eventListFile")), verb_(ps.getParameter("verbosity")), - mode_(ps.getParameter("mode")), - fnames_(ps.getParameter >("laserCorrectionAsciiFiles")), + mode_(ps.getParameter("mode")), + fnames_(ps.getParameter >("inputFiles")), skipIov_(ps.getParameter("skipIov")), nIovs_(ps.getParameter("nIovs")), fromTime_(ps.getParameter("fromTime")), @@ -54,17 +56,22 @@ EcalLaserCondTools::~EcalLaserCondTools() { void EcalLaserCondTools::analyze(const edm::Event& event, const edm::EventSetup& es) { static bool done = false; + if (done && (mode_ == "ascii_file_to_db" || mode_ == "hdf_file_to_db")) { + return; + } + if (mode_ == "ascii_file_to_db") { - if (done) - return; if (verb_ > 2) - cout << "ascii_file_to_db mode" << endl; + std::cout << "ascii_file_to_db mode\n"; + if (!db_.isAvailable()) { throw cms::Exception("CondDBAccess") << "Failed to connect to PoolDBOutputService\n"; } FileReader corrReader(fnames_); corrReader.setVerbosity(verb_); fillDb(corrReader); + } else if (mode_ == "hdf_file_to_db") { + from_hdf_to_db(); } else if (mode_ == "db_to_ascii_file") { dbToAscii(es); } else { @@ -72,11 +79,190 @@ void EcalLaserCondTools::analyze(const edm::Event& event, const edm::EventSetup& } } +void EcalLaserCondTools::from_hdf_to_db() { + cond::Time_t iovStart = 0; + + hid_t file, space, memspace; + hid_t dset_rawid, dset_t2, dset; + + hsize_t dims[2] = {}; + + for (unsigned int ifile = 0; ifile < fnames_.size(); ++ifile) { + if (verb_) { + std::cout << " - converting file: " << fnames_[ifile] << "\n"; + } + + file = H5Fopen(fnames_[ifile].c_str(), H5F_ACC_RDONLY, H5P_DEFAULT); + + dset_rawid = H5Dopen(file, "cmssw_id", H5P_DEFAULT); + space = H5Dget_space(dset_rawid); + H5Sget_simple_extent_dims(space, dims, nullptr); + + unsigned int nCrystals = dims[0]; + int rawid[nCrystals]; + herr_t status; + + status = H5Dread(dset_rawid, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rawid); + if (status < 0) + throw cms::Exception("EcalLaserCondTool:HDF") << "Error while reading HD file."; + + H5Dclose(dset_rawid); + H5Sclose(space); + + dset_t2 = H5Dopen(file, "t2", H5P_DEFAULT); + space = H5Dget_space(dset_t2); + H5Sget_simple_extent_dims(space, dims, nullptr); + + unsigned int nIovs = dims[0]; + unsigned int nLME = dims[1]; + + if (verb_) { + std::cout << "Number of crystals: " << nCrystals << "\n"; + std::cout << "Number of IOVs: " << nIovs << "\n"; + std::cout << "Number of Monitoring regions: " << nLME << "\n"; + } + + int t1[nIovs], t3[nIovs], t2[nIovs][nLME]; + + // -- reading data (cmsswid, t2, t1, t3, p2, p1, p3 + if (verb_ > 1) + std::cout << " * reading t2 table " + << "\n"; + status = H5Dread(dset_t2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, t2[0]); + if (status < 0) + throw cms::Exception("EcalLaserCondTool:HDF") << "Error while reading HD file."; + + H5Dclose(dset_t2); + //H5Sclose(space); + + if (verb_ > 1) + std::cout << " * reading t1 table " + << "\n"; + dset = H5Dopen(file, "t1", H5P_DEFAULT); + status = H5Dread(dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, t1); + if (status < 0) + throw cms::Exception("EcalLaserCondTool:HDF") << "Error while reading HD file."; + + H5Dclose(dset); + + if (verb_ > 1) + std::cout << " * reading t3 table " + << "\n"; + dset = H5Dopen(file, "t3", H5P_DEFAULT); + status = H5Dread(dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, t3); + if (status < 0) + throw cms::Exception("EcalLaserCondTool:HDF") << "Error while reading HD file."; + + H5Dclose(dset); + + assert(EcalLaserCondTools::nLmes == nLME); + + // read crystal info IOV by IOV (otherwise too large) + float p1[nCrystals], p2[nCrystals], p3[nCrystals]; + hsize_t iov_dim[1] = {nCrystals}; + memspace = H5Screate_simple(1, iov_dim, nullptr); + + auto corrSet = std::make_unique(); + for (unsigned int iIov = skipIov_; iIov < nIovs && iIov < unsigned(nIovs_); ++iIov) { + EcalLaserAPDPNRatios::EcalLaserTimeStamp t; + iovStart = uint64_t(t1[iIov]) << 32; + for (size_t iLme = 0; iLme < EcalLaserCondTools::nLmes; ++iLme) { + t.t1 = edm::Timestamp(uint64_t(t1[iIov]) << 32); + t.t2 = edm::Timestamp(uint64_t(t2[iIov][iLme]) << 32); + t.t3 = edm::Timestamp(uint64_t(t3[iIov]) << 32); + corrSet->setTime(iLme, t); + } + + hsize_t offset[2] = {iIov, 0}; // shift rows: iIov, columns: 0 + hsize_t count[2] = {1, nCrystals}; // 1 row, nXtal columns + + dset = H5Dopen(file, "p1", H5P_DEFAULT); + space = H5Dget_space(dset); + status = H5Sselect_hyperslab(space, H5S_SELECT_SET, offset, nullptr, count, nullptr); + if (status < 0) + throw cms::Exception("EcalLaserCondTool:HDF") << "Error while reading HD file."; + + status = H5Dread(dset, H5T_NATIVE_FLOAT, memspace, space, H5P_DEFAULT, p1); + if (status < 0) + throw cms::Exception("EcalLaserCondTool:HDF") << "Error while reading HD file."; + + H5Dclose(dset); + //H5Sclose(space); + + dset = H5Dopen(file, "p2", H5P_DEFAULT); + space = H5Dget_space(dset); + status = H5Sselect_hyperslab(space, H5S_SELECT_SET, offset, nullptr, count, nullptr); + if (status < 0) + throw cms::Exception("EcalLaserCondTool:HDF") << "Error while reading HD file."; + + status = H5Dread(dset, H5T_NATIVE_FLOAT, memspace, space, H5P_DEFAULT, p2); + if (status < 0) + throw cms::Exception("EcalLaserCondTool:HDF") << "Error while reading HD file."; + + H5Dclose(dset); + // H5Sclose(space); + + dset = H5Dopen(file, "p3", H5P_DEFAULT); + space = H5Dget_space(dset); + status = H5Sselect_hyperslab(space, H5S_SELECT_SET, offset, nullptr, count, nullptr); + if (status < 0) + throw cms::Exception("EcalLaserCondTool:HDF") << "Error while reading HD file."; + + status = H5Dread(dset, H5T_NATIVE_FLOAT, memspace, space, H5P_DEFAULT, p3); + if (status < 0) + throw cms::Exception("EcalLaserCondTool:HDF") << "Error while reading HD file."; + H5Dclose(dset); + H5Sclose(space); + + for (size_t iXtal = 0; iXtal < nCrystals; ++iXtal) { + DetId detid = rawid[iXtal]; + + EcalLaserAPDPNRatios::EcalLaserAPDPNpair corr = EcalLaserAPDPNRatios::EcalLaserAPDPNpair(); + corr.p1 = p1[iXtal]; + corr.p2 = p2[iXtal]; + corr.p3 = p3[iXtal]; + + if (!isfinite(corr.p1) || !isfinite(corr.p2) || !isfinite(corr.p3) || corr.p1 < minP_ || corr.p1 > maxP_ || + corr.p2 < minP_ || corr.p2 > maxP_ || corr.p3 < minP_ || corr.p3 > maxP_) { + fprintf(ferr_, "%d %d %f %f %f\n", t1[iIov], (int)detid, corr.p1, corr.p2, corr.p3); + corr.p1 = corr.p2 = corr.p3 = 1; + } + corrSet->setValue((int)detid, corr); + } + + try { + //Write correction set in DB (one IOV): + //if (db_->isNewTagRequest("EcalLaserAPDPNRatiosRcd")) { + // if (verb_) + // std::cout << "First IOV, extending starting time.\n"; + // iovStart = db_->beginOfTime(); + //} + timeval t; + gettimeofday(&t, nullptr); + if (verb_ > 1) + std::cout << "[" << timeToString(t.tv_sec) << "] " + << "Write IOV " << iIov << " starting from " << timeToString(iovStart >> 32) << "... "; + db_->writeOne(corrSet.get(), iovStart, "EcalLaserAPDPNRatiosRcd"); + } catch (const cms::Exception& e) { + if (verb_ > 1) + std::cout << "Failed. "; + std::cout << "Exception catched while writting to cond DB" << e.what() << "\n"; + } + if (verb_ > 1) + std::cout << "Suceeded.\n"; + + } // loop over IOVs + + H5Sclose(memspace); + H5Fclose(file); + } // loop over input files +} + void EcalLaserCondTools::fillDb(CorrReader& r) { int iIov = 0; int processedIovs = 0; if (verb_ > 2) - cout << "Starting filling DB...\n"; + std::cout << "Starting filling DB...\n"; int t1 = 0; int t3 = 0; int t2[nLmes]; @@ -95,7 +281,7 @@ void EcalLaserCondTools::fillDb(CorrReader& r) { int n = fscanf(eventList_, "%*d %*d %*d %d%*[^\n]\n", &t); if (verb_ > 1) - cout << "Event time: t = " << t << ", " << timeToString(t) << "\n"; + std::cout << "Event time: t = " << t << ", " << timeToString(t) << "\n"; ++iline; if (n != 1) throw cms::Exception("User") << "Syntax error in event list file " << eventListFileName_ << " at line " << iline @@ -112,7 +298,7 @@ void EcalLaserCondTools::fillDb(CorrReader& r) { bool iovFound = true; if (t <= t3) { //IOV already inserted for previous event. if (verb_ > 1) - cout << "Event in same IOV than previous one.\n"; + std::cout << "Event in same IOV than previous one.\n"; continue; } @@ -127,8 +313,8 @@ void EcalLaserCondTools::fillDb(CorrReader& r) { throw cms::Exception("User") << "Found interleaved IOVs in the correction ascii file!\n"; processIov(r, t1, t2, t3); } else { - cout << "Warning: event beyond last IOV t3. Event time: " << timeToString(t) - << ". Last IOV t3: " << timeToString(t3) << "\n"; + std::cout << "Warning: event beyond last IOV t3. Event time: " << timeToString(t) + << ". Last IOV t3: " << timeToString(t3) << "\n"; } } } else @@ -159,11 +345,12 @@ void EcalLaserCondTools::processIov(CorrReader& r, int t1, int t2[EcalLaserCondT cond::Time_t iovStart = 0; if (verb_ > 1) { - cout << "t1:" << t1 << "(" << timeToString(t1) << ") \n" - << "t3: " << t3 << "(" << timeToString(t3) << ")\nt2-t1: "; + std::cout << "t1:" << t1 << "(" << timeToString(t1) << ") \n" + << "t3: " << t3 << "(" << timeToString(t3) << ")\nt2-t1: "; for (int i = 0; i < EcalLaserCondTools::nLmes; ++i) - cout << t2[i] - t1 << "\t"; - cout << "\n"; + std::cout << t2[i] - t1 << "\t"; + + std::cout << "\n"; } if (t1 < fromTime_) { std::cout << "Skipping IOV " << iIov << ", " @@ -171,8 +358,11 @@ void EcalLaserCondTools::processIov(CorrReader& r, int t1, int t2[EcalLaserCondT return; } - // if(toTime_!=-1 && t2 < toTime_) { std::cout << "Skipping IOV " << iIov << ", " << ", which is beyond 'toTime'," - // << timeToString(toTime_) << "(" << toTime_ << ").\n"; return; } + if (toTime_ != -1 && t3 < toTime_) { + std::cout << "Skipping IOV " << iIov << ", " + << ", which is beyond 'toTime'," << timeToString(toTime_) << "(" << toTime_ << ").\n"; + return; + } if (t1 == 0) { std::cout << "Skipping IOV with t1 = 0" @@ -180,7 +370,7 @@ void EcalLaserCondTools::processIov(CorrReader& r, int t1, int t2[EcalLaserCondT return; } - EcalLaserAPDPNRatios* corrSet = new EcalLaserAPDPNRatios; + auto corrSet = std::make_unique(); EcalLaserAPDPNRatios::EcalLaserTimeStamp t; iovStart = uint64_t(t1) << 32; @@ -198,15 +388,15 @@ void EcalLaserCondTools::processIov(CorrReader& r, int t1, int t2[EcalLaserCondT //EcalLaserAPDPNRatios::EcalLaserAPDPNpair corr = {0, 0, 0}; EcalLaserAPDPNRatios::EcalLaserAPDPNpair corr = EcalLaserAPDPNRatios::EcalLaserAPDPNpair(); if (verb_ > 2) - cout << "Reading " << toNth(i + 1) << " crystal\n"; + std::cout << "Reading " << toNth(i + 1) << " crystal\n"; if (!r.readPs(detid, corr)) { throw cms::Exception("LasCor") << "Failed to read " << toNth(i + 1) << " crystal correction.\n"; } - pair::iterator, bool> res = detidList.insert(int(detid)); + std::pair::iterator, bool> res = detidList.insert(int(detid)); if (!res.second) { //detid already processed - std::cout << "Duplicate det id, for IOV " << iIov << " t1 = " << t1 << " detid = " << int(detid) << endl; + std::cout << "Duplicate det id, for IOV " << iIov << " t1 = " << t1 << " detid = " << int(detid) << "\n"; } if (!isfinite(corr.p1) || !isfinite(corr.p2) || !isfinite(corr.p3) || corr.p1 < minP_ || corr.p1 > maxP_ || @@ -217,16 +407,16 @@ void EcalLaserCondTools::processIov(CorrReader& r, int t1, int t2[EcalLaserCondT if (verb_ > 2) { if (detid.subdetId() == EcalBarrel) { - cout << EBDetId(detid); + std::cout << EBDetId(detid); } else if (detid.subdetId() == EcalEndcap) { - cout << EEDetId(detid); + std::cout << EEDetId(detid); } else { - cout << (int)detid; + std::cout << (int)detid; } - cout << ": " - << "p1 = " << corr.p1 << "\t" - << "p2 = " << corr.p2 << "\t" - << "p3 = " << corr.p3 << "\n"; + std::cout << ": " + << "p1 = " << corr.p1 << "\t" + << "p2 = " << corr.p2 << "\t" + << "p3 = " << corr.p3 << "\n"; } corrSet->setValue((int)detid, corr); @@ -236,15 +426,16 @@ void EcalLaserCondTools::processIov(CorrReader& r, int t1, int t2[EcalLaserCondT //Write correction set in DB (one IOV): if (db_->isNewTagRequest("EcalLaserAPDPNRatiosRcd")) { if (verb_) - cout << "First IOV, extending starting time." << endl; + std::cout << "First IOV, extending starting time.\n"; + iovStart = db_->beginOfTime(); } timeval t; gettimeofday(&t, nullptr); if (verb_ > 1) - cout << "[" << timeToString(t.tv_sec) << "] " - << "Write IOV " << iIov << " starting from " << timeToString(iovStart >> 32) << "... "; - db_->writeOne(corrSet, iovStart, "EcalLaserAPDPNRatiosRcd"); + std::cout << "[" << timeToString(t.tv_sec) << "] " + << "Write IOV " << iIov << " starting from " << timeToString(iovStart >> 32) << "... "; + db_->writeOne(corrSet.get(), iovStart, "EcalLaserAPDPNRatiosRcd"); } catch (const cms::Exception& e) { std::cout << "Failed.\nException cathed while writting to cond DB" << e.what() << "\n"; } @@ -256,11 +447,13 @@ bool EcalLaserCondTools::FileReader::nextFile() { ++ifile_; if (ifile_ >= fnames_.size()) { if (verb_ > 1) - cout << "No more correction files.\n"; + std::cout << "No more correction files.\n"; + return false; } if (verb_ > 1) - cout << "Opening file " << fnames_[ifile_] << "\n"; + std::cout << "Opening file " << fnames_[ifile_] << "\n"; + f_ = fopen(fnames_[ifile_].c_str(), "r"); iline_ = 0; if (f_ == nullptr) { @@ -275,7 +468,8 @@ bool EcalLaserCondTools::FileReader::readTime(int& t1, int t2[EcalLaserCondTools trim(); if ((f_ == nullptr || feof(f_)) && !nextFile()) { if (verb_ > 1) - cout << "No more record\n"; + std::cout << "No more record\n"; + return false; } int i; @@ -297,7 +491,8 @@ bool EcalLaserCondTools::FileReader::readTime(int& t1, int t2[EcalLaserCondTools if (i != 'T') { if (verb_ > 1) - cout << "No more record or bad line type/marker (getc returned " << i << ")\n"; + std::cout << "No more record or bad line type/marker (getc returned " << i << ")\n"; + return false; } @@ -323,7 +518,8 @@ bool EcalLaserCondTools::FileReader::readTime(int& t1, int t2[EcalLaserCondTools bool EcalLaserCondTools::FileReader::readPs(DetId& detid, EcalLaserAPDPNRatios::EcalLaserAPDPNpair& corr) { if (f_ == nullptr) { if (verb_) - cout << "Requested to read p1..p3 parameter line while no file is closed.\n"; + std::cout << "Requested to read p1..p3 parameter line while no file is closed.\n"; + return false; } @@ -332,10 +528,12 @@ bool EcalLaserCondTools::FileReader::readPs(DetId& detid, EcalLaserAPDPNRatios:: if (i != 'P') { if (verb_ && i >= 0) - cout << "File " << fnames_[ifile_] << " line " << iline_ << ": unexpected line type, '" << (char)i - << "' while expecting 'P'\n"; + std::cout << "File " << fnames_[ifile_] << " line " << iline_ << ": unexpected line type, '" << (char)i + << "' while expecting 'P'\n"; + if (verb_ && i < 0) - cout << "Failed to read p1..p3 parameter line\n"; + std::cout << "Failed to read p1..p3 parameter line\n"; + return false; } @@ -387,8 +585,8 @@ void EcalLaserCondTools::FileReader::trim() { ungetc(c, f_); } -string EcalLaserCondTools::toNth(int n) { - stringstream s; +std::string EcalLaserCondTools::toNth(int n) { + std::stringstream s; s << n; if (n % 100 < 10 || n % 100 > 20) { switch (n % 10) { @@ -416,7 +614,7 @@ std::string EcalLaserCondTools::timeToString(time_t t) { localtime_r(&t, <); strftime(buf, sizeof(buf), "%F %R:%S", <); buf[sizeof(buf) - 1] = 0; - return string(buf); + return std::string(buf); } void EcalLaserCondTools::dbToAscii(const edm::EventSetup& es) { @@ -442,7 +640,7 @@ void EcalLaserCondTools::dbToAscii(const edm::EventSetup& es) { fprintf(fout_, "T %d\t%d", t1, t3); if (verb_) - cout << "Processing IOV " << t1 << " - " << t3 << "(" << timeToString(t1) << " - " << timeToString(t3) << "\n"; + std::cout << "Processing IOV " << t1 << " - " << t3 << "(" << timeToString(t1) << " - " << timeToString(t3) << "\n"; for (unsigned i = 0; i < t.size(); ++i) { if (t[i].t1.unixTime() != t1 || t[i].t3.unixTime() != t3) { diff --git a/CalibCalorimetry/EcalTrivialCondModules/test/ecalLaserCondTools_cfg.py b/CalibCalorimetry/EcalTrivialCondModules/test/ecalLaserCondTools_cfg.py new file mode 100644 index 0000000000000..a8b4c045b3907 --- /dev/null +++ b/CalibCalorimetry/EcalTrivialCondModules/test/ecalLaserCondTools_cfg.py @@ -0,0 +1,139 @@ +import FWCore.ParameterSet.Config as cms +import FWCore.ParameterSet.VarParsing as VarParsing + +# Export or inport Ecal laser correction to/from the condition database or +# an sqlite file. +# +# Usage: cmsRun ecalLaserCondTools_cfg.py [mode=MODE] [connect=CONNECT_STRING] [authenticationPath=AUTHENTICATION_PATH] [inputFiles=INPUT_FILE_1] [inputFiles=INPUT_FILE2 ...] +# + +# Default options: +options = VarParsing.VarParsing() + +default_file_format = 'hdf' +defaults = { + 'verbosity': 5, + 'mode': '%s_file_to_db' % default_file_format, + 'connect': 'sqlite:///output.sqlite', + 'authenticationPath': '/nfshome0/popcondev/conddb', + 'inputFiles': 'input.%s' % default_file_format, + 'tag': 'test', + 'gtag': '', + 'start': 0, + 'stop': 10, + 'firstTime': -1, + 'timeBetweenEvents': 1, + 'lastTime': -1, + 'maxEvents': 1, +} + +options.register('verbosity', + defaults['verbosity'], + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + "Vebosity level") + +options.register('mode', + defaults['mode'], + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + "Running mode: db_to_ascii_file, ascii_file_to_db, or hdf_file_to_db (default: %s)" % defaults["mode"]); + +options.register('connect', + defaults['connect'], + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + "Database connection string (default: %s)" % defaults["connect"]); + +options.register('authenticationPath', + defaults['authenticationPath'], + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + "Path to the file with the database authentication credentials") + +options.register('gtag', + defaults['gtag'], + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + "Global condition tag used when reading the database. Use empty string to use the default tag.") + + +options.register('tag', + defaults['tag'], + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + "Condition tag to use when filling the database") + +options.register('inputFiles', + defaults['inputFiles'], + VarParsing.VarParsing.multiplicity.list, + VarParsing.VarParsing.varType.string, + "List of input files for file-to-database modes") + +options.register('firstTime', + defaults['firstTime'], + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + "Time in nanoseconds of the first event generated to extract the IOVs (see EmptySource parameters).") + +options.register('timeBetween', + defaults['timeBetweenEvents'], + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + "Time in nanoseconds between two events generated to extract the IOVs (see EmptySource parameters).") + +options.register('maxEvents', + defaults['maxEvents'], + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + "Number of events to generated. Use 1 for file-to-database mode") + + +#Parse options from the command line +options.parseArguments() + +process = cms.Process("EcalLaserDB") + +process.source = cms.Source("EmptySource", + firstTime = cms.untracked.uint64(1), + timeBetweenEvents = cms.untracked.uint64(1)) + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(options.maxEvents) + +) +process.load("CondCore.CondDB.CondDB_cfi") +process.CondDB.connect = options.connect +process.CondDB.DBParameters.authenticationPath = options.authenticationPath + +if options.mode in [ 'hdf_file_to_db', 'ascii_file_to_db']: + process.PoolDBOutputService = cms.Service("PoolDBOutputService", + process.CondDB, + toPut = cms.VPSet(cms.PSet( + record = cms.string('EcalLaserAPDPNRatiosRcd'), + tag = cms.string(options.tag), + timetype = cms.untracked.string('timestamp') + ))) + +if options.mode in ['db_to_ascii_file']: + process.load('Configuration/StandardSequences/FrontierConditions_GlobalTag_cff') + if options.gtag: + process.GlobalTag.globaltag = option.gtag + + process.ecalConditions = cms.ESSource("PoolDBESSource", + process.CondDB, + #siteLocalConfig = cms.untracked.bool(True), + toGet = cms.VPSet( + cms.PSet( + record = cms.string('EcalLaserAPDPNRatiosRcd'), + tag = cms.string(options.tag), + ))) + + +process.load("CalibCalorimetry.EcalTrivialCondModules.EcalLaserCondTools_cfi") + +process.ecalLaserCondTools.mode = options.mode +process.ecalLaserCondTools.inputFiles = options.inputFiles +process.ecalLaserCondTools.verbosity = options.verbosity + +process.path = cms.Path(process.ecalLaserCondTools) diff --git a/CalibCalorimetry/HcalAlgos/interface/HcalDbASCIIIO.h b/CalibCalorimetry/HcalAlgos/interface/HcalDbASCIIIO.h index 26352c8058322..1eb1f37912a27 100644 --- a/CalibCalorimetry/HcalAlgos/interface/HcalDbASCIIIO.h +++ b/CalibCalorimetry/HcalAlgos/interface/HcalDbASCIIIO.h @@ -5,7 +5,7 @@ #define HcalDbASCIIIO_h #include - +#include #include "DataFormats/HcalDetId/interface/HcalDetId.h" #include "CondFormats/HcalObjects/interface/AllObjects.h" #include "CalibFormats/HcalObjects/interface/HcalCalibrationsSet.h" diff --git a/CalibCalorimetry/HcalAlgos/interface/HcalHardcodeParameters.h b/CalibCalorimetry/HcalAlgos/interface/HcalHardcodeParameters.h index 167586bce1123..67e0e3075bd2f 100644 --- a/CalibCalorimetry/HcalAlgos/interface/HcalHardcodeParameters.h +++ b/CalibCalorimetry/HcalAlgos/interface/HcalHardcodeParameters.h @@ -22,7 +22,8 @@ class HcalHardcodeParameters { int mcShape, int recoShape, double photoelectronsToAnalog, - const std::vector& darkCurrent); + const std::vector& darkCurrent, + const std::vector& noiseCorrelation); //construct from pset HcalHardcodeParameters(const edm::ParameterSet& p); @@ -43,6 +44,7 @@ class HcalHardcodeParameters { const int recoShape() const { return recoShape_; } const double photoelectronsToAnalog() const { return photoelectronsToAnalog_; } const double darkCurrent(unsigned index, double intlumi) const; + const double noiseCorrelation(unsigned index) const; private: //member variables @@ -54,6 +56,7 @@ class HcalHardcodeParameters { int mcShape_, recoShape_; double photoelectronsToAnalog_; std::vector darkCurrent_; + std::vector noiseCorrelation_; bool doSipmRadiationDamage_; HcalSiPMRadiationDamage sipmRadiationDamage_; }; diff --git a/CalibCalorimetry/HcalAlgos/interface/HcalLedAnalysis.h b/CalibCalorimetry/HcalAlgos/interface/HcalLedAnalysis.h index 1261a87ad0b8a..cf48a1dd9adb2 100644 --- a/CalibCalorimetry/HcalAlgos/interface/HcalLedAnalysis.h +++ b/CalibCalorimetry/HcalAlgos/interface/HcalLedAnalysis.h @@ -7,7 +7,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h" diff --git a/CalibCalorimetry/HcalAlgos/interface/HcalPedestalAnalysis.h b/CalibCalorimetry/HcalAlgos/interface/HcalPedestalAnalysis.h index ac34f1f817fc4..12fb1b29495c3 100644 --- a/CalibCalorimetry/HcalAlgos/interface/HcalPedestalAnalysis.h +++ b/CalibCalorimetry/HcalAlgos/interface/HcalPedestalAnalysis.h @@ -7,7 +7,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/HcalDetId/interface/HcalDetId.h" #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h" diff --git a/CalibCalorimetry/HcalAlgos/plugins/HcalPulseContainmentTest.cc b/CalibCalorimetry/HcalAlgos/plugins/HcalPulseContainmentTest.cc index 93abd7c544fb8..f019030824127 100644 --- a/CalibCalorimetry/HcalAlgos/plugins/HcalPulseContainmentTest.cc +++ b/CalibCalorimetry/HcalAlgos/plugins/HcalPulseContainmentTest.cc @@ -1,7 +1,6 @@ #include #include "CalibCalorimetry/HcalAlgos/interface/HcalPulseContainmentManager.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "CondFormats/DataRecord/interface/HcalTimeSlewRecord.h" @@ -31,19 +30,20 @@ class HcalPulseContainmentTest : public edm::one::EDAnalyzer tok_slew_; const HcalTimeSlew* hcalTimeSlew_delay_; }; -HcalPulseContainmentTest::HcalPulseContainmentTest(const edm::ParameterSet& iConfig) { hcalTimeSlew_delay_ = nullptr; } +HcalPulseContainmentTest::HcalPulseContainmentTest(const edm::ParameterSet& iConfig) + : tok_slew_(esConsumes(edm::ESInputTag{"", "HBHE"})), + hcalTimeSlew_delay_(nullptr) {} HcalPulseContainmentTest::~HcalPulseContainmentTest() {} void HcalPulseContainmentTest::beginJob() {} void HcalPulseContainmentTest::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - edm::ESHandle delay; - iSetup.get().get("HBHE", delay); - hcalTimeSlew_delay_ = &*delay; + hcalTimeSlew_delay_ = &iSetup.getData(tok_slew_); float fixedphase_ns = 6.0; float max_fracerror = 0.02; diff --git a/CalibCalorimetry/HcalAlgos/src/HcalDbHardcode.cc b/CalibCalorimetry/HcalAlgos/src/HcalDbHardcode.cc index bfad74393a0bb..f9ad603674683 100644 --- a/CalibCalorimetry/HcalAlgos/src/HcalDbHardcode.cc +++ b/CalibCalorimetry/HcalAlgos/src/HcalDbHardcode.cc @@ -28,7 +28,8 @@ HcalDbHardcode::HcalDbHardcode() 125, //MC shape 105, //Reco shape 0.0, //photoelectronsToAnalog - {0.0} //dark current + {0.0}, //dark current + {0.0} //noise correlation ), setHB_(false), setHE_(false), @@ -644,11 +645,13 @@ HcalSiPMParameter HcalDbHardcode::makeHardcodeSiPMParameter(HcalGenericDetId fId double intlumi) { // SiPMParameter defined for each DetId the following quantities: // SiPM type, PhotoElectronToAnalog, Dark Current, two auxiliary words + // (the second of those containing float noise correlation coefficient // These numbers come from some measurements done with SiPMs // rule for type: cells with >4 layers use larger device (3.3mm diameter), otherwise 2.8mm HcalSiPMType theType = HcalNoSiPM; double thePe2fC = getParameters(fId).photoelectronsToAnalog(); double theDC = getParameters(fId).darkCurrent(0, intlumi); + double theNoiseCN = getParameters(fId).noiseCorrelation(0); if (fId.genericSubdet() == HcalGenericDetId::HcalGenBarrel) { if (useHBUpgrade_) { HcalDetId hid(fId); @@ -656,9 +659,11 @@ HcalSiPMParameter HcalDbHardcode::makeHardcodeSiPMParameter(HcalGenericDetId fId if (nLayersInDepth > 4) { theType = HcalHBHamamatsu2; theDC = getParameters(fId).darkCurrent(1, intlumi); + theNoiseCN = getParameters(fId).noiseCorrelation(1); } else { theType = HcalHBHamamatsu1; theDC = getParameters(fId).darkCurrent(0, intlumi); + theNoiseCN = getParameters(fId).noiseCorrelation(0); } } else theType = HcalHPD; @@ -669,9 +674,11 @@ HcalSiPMParameter HcalDbHardcode::makeHardcodeSiPMParameter(HcalGenericDetId fId if (nLayersInDepth > 4) { theType = HcalHEHamamatsu2; theDC = getParameters(fId).darkCurrent(1, intlumi); + theNoiseCN = getParameters(fId).noiseCorrelation(1); } else { theType = HcalHEHamamatsu1; theDC = getParameters(fId).darkCurrent(0, intlumi); + theNoiseCN = getParameters(fId).noiseCorrelation(0); } } else theType = HcalHPD; @@ -682,7 +689,7 @@ HcalSiPMParameter HcalDbHardcode::makeHardcodeSiPMParameter(HcalGenericDetId fId theType = HcalHPD; } - return HcalSiPMParameter(fId.rawId(), theType, thePe2fC, theDC, 0, 0); + return HcalSiPMParameter(fId.rawId(), theType, thePe2fC, theDC, 0, (float)theNoiseCN); } std::unique_ptr HcalDbHardcode::makeHardcodeSiPMCharacteristics() const { diff --git a/CalibCalorimetry/HcalAlgos/src/HcalHardcodeParameters.cc b/CalibCalorimetry/HcalAlgos/src/HcalHardcodeParameters.cc index fd868f2f36da4..ecc5937be7209 100644 --- a/CalibCalorimetry/HcalAlgos/src/HcalHardcodeParameters.cc +++ b/CalibCalorimetry/HcalAlgos/src/HcalHardcodeParameters.cc @@ -11,7 +11,8 @@ HcalHardcodeParameters::HcalHardcodeParameters(double pedestal, int mcShape, int recoShape, double photoelectronsToAnalog, - const std::vector& darkCurrent) + const std::vector& darkCurrent, + const std::vector& noiseCorrelation) : pedestal_(pedestal), pedestalWidth_(pedestalWidth), gain_(gain), @@ -24,6 +25,7 @@ HcalHardcodeParameters::HcalHardcodeParameters(double pedestal, recoShape_(recoShape), photoelectronsToAnalog_(photoelectronsToAnalog), darkCurrent_(darkCurrent), + noiseCorrelation_(noiseCorrelation), doSipmRadiationDamage_(false) {} HcalHardcodeParameters::HcalHardcodeParameters(const edm::ParameterSet& p) @@ -39,6 +41,7 @@ HcalHardcodeParameters::HcalHardcodeParameters(const edm::ParameterSet& p) recoShape_(p.getParameter("recoShape")), photoelectronsToAnalog_(p.getParameter("photoelectronsToAnalog")), darkCurrent_(p.getParameter>("darkCurrent")), + noiseCorrelation_(p.getParameter>("noiseCorrelation")), doSipmRadiationDamage_(p.getParameter("doRadiationDamage")) { if (doSipmRadiationDamage_) sipmRadiationDamage_ = HcalSiPMRadiationDamage(darkCurrent_, p.getParameter("radiationDamage")); @@ -49,3 +52,5 @@ const double HcalHardcodeParameters::darkCurrent(unsigned index, double intlumi) return sipmRadiationDamage_.getDarkCurrent(intlumi, index); return darkCurrent_.at(index); } + +const double HcalHardcodeParameters::noiseCorrelation(unsigned index) const { return noiseCorrelation_.at(index); } diff --git a/CalibCalorimetry/HcalAlgos/test/MapTester.cc b/CalibCalorimetry/HcalAlgos/test/MapTester.cc index c11f61cb55e9e..3ae98d8ead613 100644 --- a/CalibCalorimetry/HcalAlgos/test/MapTester.cc +++ b/CalibCalorimetry/HcalAlgos/test/MapTester.cc @@ -35,7 +35,6 @@ #include "CalibCalorimetry/HcalAlgos/interface/HcalLogicalMapGenerator.h" #include "CalibCalorimetry/HcalAlgos/interface/HcalDbASCIIIO.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "Geometry/Records/interface/HcalRecNumberingRecord.h" // // class decleration @@ -54,9 +53,10 @@ class MapTester : public edm::EDAnalyzer { virtual void analyze(const edm::Event&, const edm::EventSetup&); // ----------member data --------------------------- + const edm::ESGetToken tok_topo_; }; -MapTester::MapTester(const edm::ParameterSet& iConfig) { +MapTester::MapTester(const edm::ParameterSet& iConfig) : tok_topo_(esConsumes()) { mapIOV_ = iConfig.getParameter("mapIOV"); generateTextfiles_ = iConfig.getParameter("generateTextfiles"); generateEmap_ = iConfig.getParameter("generateEmap"); @@ -73,11 +73,10 @@ void MapTester::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) strftime(tempbuff, 128, "%d.%b.%Y", localtime(&myTime)); - edm::ESHandle topo; - iSetup.get().get(topo); + const HcalTopology* topo = &iSetup.getData(tok_topo_); HcalLogicalMapGenerator mygen; - HcalLogicalMap mymap = mygen.createMap(&(*topo), mapIOV_); + HcalLogicalMap mymap = mygen.createMap(topo, mapIOV_); if (generateTextfiles_) mymap.printMap(mapIOV_); diff --git a/CalibCalorimetry/HcalPlugins/python/Hcal_Conditions_forGlobalTag_cff.py b/CalibCalorimetry/HcalPlugins/python/Hcal_Conditions_forGlobalTag_cff.py index 328c10f97a69b..f84d1d06275f3 100644 --- a/CalibCalorimetry/HcalPlugins/python/Hcal_Conditions_forGlobalTag_cff.py +++ b/CalibCalorimetry/HcalPlugins/python/Hcal_Conditions_forGlobalTag_cff.py @@ -47,7 +47,8 @@ recoShape = cms.int32(105), photoelectronsToAnalog = cms.double(0.3305), darkCurrent = cms.vdouble(0.0), - doRadiationDamage = cms.bool(False), + noiseCorrelation = cms.vdouble(0.0), + doRadiationDamage = cms.bool(False) ), he = cms.PSet( pedestal = cms.double(3.163), @@ -62,7 +63,8 @@ recoShape = cms.int32(105), photoelectronsToAnalog = cms.double(0.3305), darkCurrent = cms.vdouble(0.0), - doRadiationDamage = cms.bool(False), + noiseCorrelation = cms.vdouble(0.0), + doRadiationDamage = cms.bool(False) ), hf = cms.PSet( pedestal = cms.double(9.354), @@ -77,7 +79,8 @@ recoShape = cms.int32(301), photoelectronsToAnalog = cms.double(0.0), darkCurrent = cms.vdouble(0.0), - doRadiationDamage = cms.bool(False), + noiseCorrelation = cms.vdouble(0.0), + doRadiationDamage = cms.bool(False) ), ho = cms.PSet( pedestal = cms.double(12.06), @@ -92,7 +95,8 @@ recoShape = cms.int32(201), photoelectronsToAnalog = cms.double(4.0), darkCurrent = cms.vdouble(0.0), - doRadiationDamage = cms.bool(False), + noiseCorrelation = cms.vdouble(0.0), + doRadiationDamage = cms.bool(False) ), hbUpgrade = cms.PSet( pedestal = cms.double(17.3), @@ -104,9 +108,10 @@ qieOffset = cms.vdouble(0.,0.,0.,0.), qieSlope = cms.vdouble(0.05376,0.05376,0.05376,0.05376), #1/(3.1*6) where 6 is shunt factor mcShape = cms.int32(206), - recoShape = cms.int32(206), + recoShape = cms.int32(208), photoelectronsToAnalog = cms.double(40.0), darkCurrent = cms.vdouble(0.01,0.015), + noiseCorrelation = cms.vdouble(0.26,0.254), doRadiationDamage = cms.bool(True), radiationDamage = cms.PSet( temperatureBase = cms.double(20), @@ -130,9 +135,10 @@ qieOffset = cms.vdouble(0.,0.,0.,0.), qieSlope = cms.vdouble(0.05376,0.05376,0.05376,0.05376), #1/(3.1*6) where 6 is shunt factor mcShape = cms.int32(206), - recoShape = cms.int32(206), + recoShape = cms.int32(208), photoelectronsToAnalog = cms.double(40.0), darkCurrent = cms.vdouble(0.01,0.015), + noiseCorrelation = cms.vdouble(0.26,0.254), doRadiationDamage = cms.bool(True), radiationDamage = cms.PSet( temperatureBase = cms.double(20), @@ -159,7 +165,8 @@ recoShape = cms.int32(301), photoelectronsToAnalog = cms.double(0.0), darkCurrent = cms.vdouble(0.0), - doRadiationDamage = cms.bool(False), + noiseCorrelation = cms.vdouble(0.0), + doRadiationDamage = cms.bool(False) ), # types (in order): HcalHOZecotek, HcalHOHamamatsu, HcalHEHamamatsu1, HcalHEHamamatsu2, HcalHBHamamatsu1, HcalHBHamamatsu2, HcalHPD SiPMCharacteristics = cms.VPSet( diff --git a/CalibCalorimetry/HcalPlugins/src/HBHEDarkeningEP.h b/CalibCalorimetry/HcalPlugins/src/HBHEDarkeningEP.h index 4e55979f4e7ad..3b6a646032314 100644 --- a/CalibCalorimetry/HcalPlugins/src/HBHEDarkeningEP.h +++ b/CalibCalorimetry/HcalPlugins/src/HBHEDarkeningEP.h @@ -8,7 +8,6 @@ #include "FWCore/Framework/interface/ModuleFactory.h" #include "FWCore/Framework/interface/ESProducer.h" #include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "CondFormats/DataRecord/interface/HBHEDarkeningRecord.h" #include "CondFormats/HcalObjects/interface/HBHEDarkening.h" diff --git a/CalibCalorimetry/HcalPlugins/src/HcalDbProducer.cc b/CalibCalorimetry/HcalPlugins/src/HcalDbProducer.cc index 87435667c8c6e..21eca17e324cf 100644 --- a/CalibCalorimetry/HcalPlugins/src/HcalDbProducer.cc +++ b/CalibCalorimetry/HcalPlugins/src/HcalDbProducer.cc @@ -23,7 +23,6 @@ #include "FWCore/Framework/interface/ModuleFactory.h" #include "FWCore/Framework/interface/DependentRecordImplementation.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/ESProducer.h" #include "FWCore/Framework/interface/ESProductHost.h" #include "FWCore/Framework/interface/ESTransientHandle.h" diff --git a/CalibCalorimetry/HcalPlugins/src/HcalHardcodeCalibrations.cc b/CalibCalorimetry/HcalPlugins/src/HcalHardcodeCalibrations.cc index 522fdfa7b4ef5..7ec9989e7f8d4 100644 --- a/CalibCalorimetry/HcalPlugins/src/HcalHardcodeCalibrations.cc +++ b/CalibCalorimetry/HcalPlugins/src/HcalHardcodeCalibrations.cc @@ -9,7 +9,6 @@ #include #include "FWCore/Framework/interface/ValidityInterval.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/HcalDetId/interface/HcalZDCDetId.h" #include "DataFormats/HcalDetId/interface/HcalDetId.h" #include "DataFormats/HcalDetId/interface/HcalGenericDetId.h" @@ -885,6 +884,7 @@ void HcalHardcodeCalibrations::fillDescriptions(edm::ConfigurationDescriptions& desc_hb.add("recoShape", 105); desc_hb.add("photoelectronsToAnalog", 0.0); desc_hb.add>("darkCurrent", std::vector({0.0})); + desc_hb.add>("noiseCorrelation", std::vector({0.0})); desc_hb.add("doRadiationDamage", false); desc.add("hb", desc_hb); @@ -909,6 +909,7 @@ void HcalHardcodeCalibrations::fillDescriptions(edm::ConfigurationDescriptions& desc_hbUpgrade.add("recoShape", 206); desc_hbUpgrade.add("photoelectronsToAnalog", 57.5); desc_hbUpgrade.add>("darkCurrent", std::vector({0.055})); + desc_hbUpgrade.add>("noiseCorrelation", std::vector({0.26})); desc_hbUpgrade.add("doRadiationDamage", true); desc_hbUpgrade.add("radiationDamage", desc_hbRaddam); desc.add("hbUpgrade", desc_hbUpgrade); @@ -926,6 +927,7 @@ void HcalHardcodeCalibrations::fillDescriptions(edm::ConfigurationDescriptions& desc_he.add("recoShape", 105); desc_he.add("photoelectronsToAnalog", 0.0); desc_he.add>("darkCurrent", std::vector({0.0})); + desc_he.add>("noiseCorrelation", std::vector({0.0})); desc_he.add("doRadiationDamage", false); desc.add("he", desc_he); @@ -950,6 +952,7 @@ void HcalHardcodeCalibrations::fillDescriptions(edm::ConfigurationDescriptions& desc_heUpgrade.add("recoShape", 206); desc_heUpgrade.add("photoelectronsToAnalog", 57.5); desc_heUpgrade.add>("darkCurrent", std::vector({0.055})); + desc_heUpgrade.add>("noiseCorrelation", std::vector({0.26})); desc_heUpgrade.add("doRadiationDamage", true); desc_heUpgrade.add("radiationDamage", desc_heRaddam); desc.add("heUpgrade", desc_heUpgrade); @@ -967,6 +970,7 @@ void HcalHardcodeCalibrations::fillDescriptions(edm::ConfigurationDescriptions& desc_hf.add("recoShape", 301); desc_hf.add("photoelectronsToAnalog", 0.0); desc_hf.add>("darkCurrent", std::vector({0.0})); + desc_hf.add>("noiseCorrelation", std::vector({0.0})); desc_hf.add("doRadiationDamage", false); desc.add("hf", desc_hf); @@ -983,6 +987,7 @@ void HcalHardcodeCalibrations::fillDescriptions(edm::ConfigurationDescriptions& desc_hfUpgrade.add("recoShape", 301); desc_hfUpgrade.add("photoelectronsToAnalog", 0.0); desc_hfUpgrade.add>("darkCurrent", std::vector({0.0})); + desc_hfUpgrade.add>("noiseCorrelation", std::vector({0.0})); desc_hfUpgrade.add("doRadiationDamage", false); desc.add("hfUpgrade", desc_hfUpgrade); @@ -1006,6 +1011,7 @@ void HcalHardcodeCalibrations::fillDescriptions(edm::ConfigurationDescriptions& desc_ho.add("recoShape", 201); desc_ho.add("photoelectronsToAnalog", 4.0); desc_ho.add>("darkCurrent", std::vector({0.0})); + desc_ho.add>("noiseCorrelation", std::vector({0.0})); desc_ho.add("doRadiationDamage", false); desc.add("ho", desc_ho); diff --git a/CalibCalorimetry/HcalPlugins/src/HcalTextCalibrations.cc b/CalibCalorimetry/HcalPlugins/src/HcalTextCalibrations.cc index 04ed883bba79c..f0234f3f9e71d 100644 --- a/CalibCalorimetry/HcalPlugins/src/HcalTextCalibrations.cc +++ b/CalibCalorimetry/HcalPlugins/src/HcalTextCalibrations.cc @@ -9,7 +9,6 @@ #include "FWCore/Utilities/interface/Exception.h" #include "FWCore/ParameterSet/interface/FileInPath.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/ValidityInterval.h" diff --git a/CalibCalorimetry/HcalPlugins/src/HcalTimeSlewEP.h b/CalibCalorimetry/HcalPlugins/src/HcalTimeSlewEP.h index 1a2916365c6f0..9d8bac33da05c 100644 --- a/CalibCalorimetry/HcalPlugins/src/HcalTimeSlewEP.h +++ b/CalibCalorimetry/HcalPlugins/src/HcalTimeSlewEP.h @@ -8,7 +8,6 @@ #include "FWCore/Framework/interface/ModuleFactory.h" #include "FWCore/Framework/interface/ESProducer.h" #include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "CondFormats/DataRecord/interface/HcalTimeSlewRecord.h" #include "CalibCalorimetry/HcalAlgos/interface/HcalTimeSlew.h" diff --git a/CalibCalorimetry/HcalPlugins/test/HBHEDarkeningAnalyzer.cc b/CalibCalorimetry/HcalPlugins/test/HBHEDarkeningAnalyzer.cc index 07b837ed79735..2e7118eb7e281 100644 --- a/CalibCalorimetry/HcalPlugins/test/HBHEDarkeningAnalyzer.cc +++ b/CalibCalorimetry/HcalPlugins/test/HBHEDarkeningAnalyzer.cc @@ -4,7 +4,6 @@ // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -51,6 +50,10 @@ class HBHEDarkeningAnalyzer : public edm::one::EDAnalyzer { // ----------member data --------------------------- double intlumi; + edm::ESGetToken tok_topo_; + edm::ESGetToken tok_hbdark_; + edm::ESGetToken tok_hedark_; + const HBHEDarkening* hb_darkening; const HBHEDarkening* he_darkening; HBHERecalibration hb_recalibration, he_recalibration; @@ -66,7 +69,11 @@ HBHEDarkeningAnalyzer::HBHEDarkeningAnalyzer(const edm::ParameterSet& iConfig) he_darkening(NULL), hb_recalibration(intlumi, 0, iConfig.getParameter("HBmeanenergies").fullPath()), he_recalibration(intlumi, 0, iConfig.getParameter("HEmeanenergies").fullPath()), - theTopology(NULL) {} + theTopology(NULL) { + tok_topo_ = esConsumes(); + tok_hbdark_ = esConsumes(edm::ESInputTag("", "HB")); + tok_hedark_ = esConsumes(edm::ESInputTag("", "HE")); +} HBHEDarkeningAnalyzer::~HBHEDarkeningAnalyzer() {} @@ -77,17 +84,9 @@ HBHEDarkeningAnalyzer::~HBHEDarkeningAnalyzer() {} void HBHEDarkeningAnalyzer::beginJob() {} void HBHEDarkeningAnalyzer::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) { - edm::ESHandle htopo; - iSetup.get().get(htopo); - theTopology = &*htopo; - - edm::ESHandle hbdark; - iSetup.get().get("HB", hbdark); - hb_darkening = &*hbdark; - - edm::ESHandle hedark; - iSetup.get().get("HE", hedark); - he_darkening = &*hedark; + theTopology = &iSetup.getData(tok_topo_); + hb_darkening = &iSetup.getData(tok_hbdark_); + he_darkening = &iSetup.getData(tok_hedark_); //initialize recalibration classes std::vector> m_segmentation; diff --git a/CalibCalorimetry/HcalPlugins/test/HcalDbAnalyzer.cc b/CalibCalorimetry/HcalPlugins/test/HcalDbAnalyzer.cc index ee5bf8de69763..8e3b964fe190f 100644 --- a/CalibCalorimetry/HcalPlugins/test/HcalDbAnalyzer.cc +++ b/CalibCalorimetry/HcalPlugins/test/HcalDbAnalyzer.cc @@ -29,7 +29,6 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "CalibFormats/HcalObjects/interface/HcalDbService.h" @@ -87,6 +86,7 @@ class HcalDbAnalyzer : public edm::EDAnalyzer { private: // ----------member data --------------------------- + edm::ESGetToken tok_setup_; }; // @@ -101,6 +101,8 @@ class HcalDbAnalyzer : public edm::EDAnalyzer { // constructors and destructor // HcalDbAnalyzer::HcalDbAnalyzer(const edm::ParameterSet& iConfig) { + tok_setup_ = esConsumes(); + std::cout << "HcalDbAnalyzer::HcalDbAnalyzer->..." << std::endl; //now do what ever initialization is needed } @@ -117,8 +119,7 @@ HcalDbAnalyzer::~HcalDbAnalyzer() { // ------------ method called to produce the data ------------ void HcalDbAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { std::cout << "HcalDbAnalyzer::analyze->..." << std::endl; - edm::ESHandle pSetup; - iSetup.get().get(pSetup); + const HcalDbService* pSetup = &iSetup.getData(tok_setup_); std::cout << "HcalDbAnalyzer::analyze-> got HcalDbRecord: " << std::endl; std::cout << "HcalDbAnalyzer::analyze-> getting information for HB channel eta=1, phi=1, depth=1..." << std::endl; HcalDetId cell(HcalBarrel, 1, 1, 1); diff --git a/CalibCalorimetry/HcalTPGEventSetup/src/HcalTPGCoderULUT.cc b/CalibCalorimetry/HcalTPGEventSetup/src/HcalTPGCoderULUT.cc index e718140593c95..9b50b10d81f4c 100644 --- a/CalibCalorimetry/HcalTPGEventSetup/src/HcalTPGCoderULUT.cc +++ b/CalibCalorimetry/HcalTPGEventSetup/src/HcalTPGCoderULUT.cc @@ -23,7 +23,6 @@ // user include files #include "FWCore/Framework/interface/ModuleFactory.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/ESProducer.h" #include "FWCore/Framework/interface/ESProductHost.h" #include "FWCore/Utilities/interface/ReusableObjectHolder.h" diff --git a/CalibCalorimetry/HcalTPGIO/src/HcalLuttoDB.cc b/CalibCalorimetry/HcalTPGIO/src/HcalLuttoDB.cc index 7dd574871fddb..de172b9785bad 100644 --- a/CalibCalorimetry/HcalTPGIO/src/HcalLuttoDB.cc +++ b/CalibCalorimetry/HcalTPGIO/src/HcalLuttoDB.cc @@ -24,7 +24,6 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "CalibFormats/HcalObjects/interface/HcalDbService.h" @@ -75,6 +74,9 @@ class HcalLuttoDB : public edm::EDAnalyzer { std::ostream* openPerLut1(HcalElectronicsId eid); std::ostream* openPerLut2(HcalElectronicsId eid); std::ostream* openChecksums(); + edm::ESGetToken tokdb_; + edm::ESGetToken tokhcalCode_; + edm::ESGetToken tokcaloCode_; std::ostream* oc_; }; // ----------member data --------------------------- @@ -90,6 +92,9 @@ HcalLuttoDB::HcalLuttoDB(const edm::ParameterSet& iConfig) { targetfirmware_ = iConfig.getParameter("targetfirmware"); filePerCrate_ = iConfig.getUntrackedParameter("filePerCrate", true); fileformat_ = iConfig.getParameter("filePrefix"); + tokdb_ = esConsumes(); + tokhcalCode_ = esConsumes(); + tokcaloCode_ = esConsumes(); } HcalLuttoDB::~HcalLuttoDB() {} @@ -269,14 +274,11 @@ void HcalLuttoDB::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetu edm::LogInfo("Hcal") << "Beginning dump of Hcal TPG LUTS (this may take a minute or two)"; const HcalElectronicsMap* Map_; - ESHandle pSetup; - iSetup.get().get(pSetup); + const HcalDbService* pSetup = &iSetup.getData(tokdb_); Map_ = pSetup->getHcalMapping(); // get the conditions, for the decoding - edm::ESHandle inputCoder; - iSetup.get().get(inputCoder); - edm::ESHandle outTranscoder; - iSetup.get().get(outTranscoder); + const HcalTPGCoder* inputCoder = &iSetup.getData(tokhcalCode_); + const CaloTPGTranscoder* outTranscoder = &iSetup.getData(tokcaloCode_); std::vector allEID = Map_->allElectronicsId(); std::vector::iterator itreid; diff --git a/CalibMuon/CSCCalibration/test/CSCBadChamberPopCon_cfg.py b/CalibMuon/CSCCalibration/test/CSCBadChamberPopCon_cfg.py index 12a81944a5208..ff47227dd3c04 100644 --- a/CalibMuon/CSCCalibration/test/CSCBadChamberPopCon_cfg.py +++ b/CalibMuon/CSCCalibration/test/CSCBadChamberPopCon_cfg.py @@ -16,12 +16,15 @@ process.CondDBCommon.DBParameters.authenticationPath = '/afs/cern.ch/cms/DB/conddb' #process.CondDBCommon.DBParameters.messageLevel = cms.untracked.int32(3) process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) - ), - destinations = cms.untracked.vstring('cout') + ), + enable = cms.untracked.bool(True) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibMuon/CSCCalibration/test/CSCBadStripsPopCon_cfg.py b/CalibMuon/CSCCalibration/test/CSCBadStripsPopCon_cfg.py index f2eab9de01c19..9174acf6a7bbf 100644 --- a/CalibMuon/CSCCalibration/test/CSCBadStripsPopCon_cfg.py +++ b/CalibMuon/CSCCalibration/test/CSCBadStripsPopCon_cfg.py @@ -13,12 +13,15 @@ process.load("CondCore.DBCommon.CondDBCommon_cfi") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) - ), - destinations = cms.untracked.vstring('cout') + ), + enable = cms.untracked.bool(True) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibMuon/CSCCalibration/test/CSCBadWiresPopCon_cfg.py b/CalibMuon/CSCCalibration/test/CSCBadWiresPopCon_cfg.py index d21841de42097..691e35cd350a6 100644 --- a/CalibMuon/CSCCalibration/test/CSCBadWiresPopCon_cfg.py +++ b/CalibMuon/CSCCalibration/test/CSCBadWiresPopCon_cfg.py @@ -13,12 +13,15 @@ process.load("CondCore.DBCommon.CondDBCommon_cfi") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) - ), - destinations = cms.untracked.vstring('cout') + ), + enable = cms.untracked.bool(True) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibMuon/CSCCalibration/test/CSCDBChipSpeedCorrectionPopCon_cfg.py b/CalibMuon/CSCCalibration/test/CSCDBChipSpeedCorrectionPopCon_cfg.py index d8929916f2532..62807cb7e8fe2 100644 --- a/CalibMuon/CSCCalibration/test/CSCDBChipSpeedCorrectionPopCon_cfg.py +++ b/CalibMuon/CSCCalibration/test/CSCDBChipSpeedCorrectionPopCon_cfg.py @@ -13,12 +13,15 @@ process.CondDBCommon.DBParameters.authenticationPath = '/afs/cern.ch/cms/DB/conddb' process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) - ), - destinations = cms.untracked.vstring('cout') + ), + enable = cms.untracked.bool(True) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibMuon/CSCCalibration/test/CSCDBCrosstalkPopCon_cfg.py b/CalibMuon/CSCCalibration/test/CSCDBCrosstalkPopCon_cfg.py index d2cb1a2ce1dab..57c4ecca8038c 100644 --- a/CalibMuon/CSCCalibration/test/CSCDBCrosstalkPopCon_cfg.py +++ b/CalibMuon/CSCCalibration/test/CSCDBCrosstalkPopCon_cfg.py @@ -14,12 +14,15 @@ process.CondDBCommon.DBParameters.authenticationPath = '/afs/cern.ch/cms/DB/conddb' process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) - ), - destinations = cms.untracked.vstring('cout') + ), + enable = cms.untracked.bool(True) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibMuon/CSCCalibration/test/CSCDBGainsPopCon_cfg.py b/CalibMuon/CSCCalibration/test/CSCDBGainsPopCon_cfg.py index 55f8c8b5d760c..658a9d9f81f4c 100644 --- a/CalibMuon/CSCCalibration/test/CSCDBGainsPopCon_cfg.py +++ b/CalibMuon/CSCCalibration/test/CSCDBGainsPopCon_cfg.py @@ -12,12 +12,15 @@ process.CondDBCommon.DBParameters.authenticationPath = '/afs/cern.ch/cms/DB/conddb' process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) - ), - destinations = cms.untracked.vstring('cout') + ), + enable = cms.untracked.bool(True) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibMuon/CSCCalibration/test/CSCDBGasGainCorrectionPopCon_cfg.py b/CalibMuon/CSCCalibration/test/CSCDBGasGainCorrectionPopCon_cfg.py index 0ef97a42f66b2..d39863ea31625 100644 --- a/CalibMuon/CSCCalibration/test/CSCDBGasGainCorrectionPopCon_cfg.py +++ b/CalibMuon/CSCCalibration/test/CSCDBGasGainCorrectionPopCon_cfg.py @@ -12,12 +12,15 @@ process.CondDBCommon.DBParameters.authenticationPath = '/afs/cern.ch/cms/DB/conddb' process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) - ), - destinations = cms.untracked.vstring('cout') + ), + enable = cms.untracked.bool(True) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibMuon/CSCCalibration/test/CSCDBL1TPParametersPopCon_cfg.py b/CalibMuon/CSCCalibration/test/CSCDBL1TPParametersPopCon_cfg.py index 95dd1a2fcbfd4..d65b05ff05bc1 100644 --- a/CalibMuon/CSCCalibration/test/CSCDBL1TPParametersPopCon_cfg.py +++ b/CalibMuon/CSCCalibration/test/CSCDBL1TPParametersPopCon_cfg.py @@ -16,12 +16,15 @@ process.CondDBCommon.DBParameters.authenticationPath = '/afs/cern.ch/cms/DB/conddb' process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) - ), - destinations = cms.untracked.vstring('cout') + ), + enable = cms.untracked.bool(True) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibMuon/CSCCalibration/test/CSCDBNoiseMatrixPopCon_cfg.py b/CalibMuon/CSCCalibration/test/CSCDBNoiseMatrixPopCon_cfg.py index eb631dc5ca807..4dfb6da954e51 100644 --- a/CalibMuon/CSCCalibration/test/CSCDBNoiseMatrixPopCon_cfg.py +++ b/CalibMuon/CSCCalibration/test/CSCDBNoiseMatrixPopCon_cfg.py @@ -14,12 +14,15 @@ process.CondDBCommon.DBParameters.authenticationPath = '/afs/cern.ch/cms/DB/conddb' process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) - ), - destinations = cms.untracked.vstring('cout') + ), + enable = cms.untracked.bool(True) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibMuon/CSCCalibration/test/CSCDBPedestalsPopCon_cfg.py b/CalibMuon/CSCCalibration/test/CSCDBPedestalsPopCon_cfg.py index f8d4a1745270c..ad01b60724cff 100644 --- a/CalibMuon/CSCCalibration/test/CSCDBPedestalsPopCon_cfg.py +++ b/CalibMuon/CSCCalibration/test/CSCDBPedestalsPopCon_cfg.py @@ -14,12 +14,15 @@ process.CondDBCommon.DBParameters.authenticationPath = '/afs/cern.ch/cms/DB/conddb' process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) - ), - destinations = cms.untracked.vstring('cout') + ), + enable = cms.untracked.bool(True) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibMuon/CSCCalibration/test/CSCL1TPParametersPopCon_cfg.py b/CalibMuon/CSCCalibration/test/CSCL1TPParametersPopCon_cfg.py index b9f3364fb3b2d..a6a1adbc210d3 100644 --- a/CalibMuon/CSCCalibration/test/CSCL1TPParametersPopCon_cfg.py +++ b/CalibMuon/CSCCalibration/test/CSCL1TPParametersPopCon_cfg.py @@ -14,12 +14,15 @@ process.CondDBCommon.connect = cms.string("sqlite_file:DBL1TPParameters.db") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) - ), - destinations = cms.untracked.vstring('cout') + ), + enable = cms.untracked.bool(True) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibMuon/DTCalibration/BuildFile.xml b/CalibMuon/DTCalibration/BuildFile.xml index 51d4e8ddbdac6..3afccbb19aba6 100644 --- a/CalibMuon/DTCalibration/BuildFile.xml +++ b/CalibMuon/DTCalibration/BuildFile.xml @@ -11,12 +11,9 @@ - - - diff --git a/CalibMuon/DTCalibration/plugins/BuildFile.xml b/CalibMuon/DTCalibration/plugins/BuildFile.xml index c3e30ea272499..afcf86ef3c72d 100644 --- a/CalibMuon/DTCalibration/plugins/BuildFile.xml +++ b/CalibMuon/DTCalibration/plugins/BuildFile.xml @@ -12,7 +12,7 @@ - + diff --git a/CalibMuon/DTCalibration/python/dtDQMClient_cfg.py b/CalibMuon/DTCalibration/python/dtDQMClient_cfg.py index 3ad9e77effd51..70b6e8e7be346 100644 --- a/CalibMuon/DTCalibration/python/dtDQMClient_cfg.py +++ b/CalibMuon/DTCalibration/python/dtDQMClient_cfg.py @@ -9,9 +9,8 @@ class config: pass process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.debugModules = cms.untracked.vstring('') -process.MessageLogger.destinations = cms.untracked.vstring('cerr') -process.MessageLogger.categories.append('DTDQM') -process.MessageLogger.categories.append('resolution') +process.MessageLogger.DTDQM=dict() +process.MessageLogger.resolution=dict() process.MessageLogger.cerr = cms.untracked.PSet( threshold = cms.untracked.string('WARNING'), noLineBreaks = cms.untracked.bool(False), diff --git a/CalibMuon/DTCalibration/python/dtT0WireCalibration_cfg.py b/CalibMuon/DTCalibration/python/dtT0WireCalibration_cfg.py index d947fd0beca30..1c4b5e3246c06 100644 --- a/CalibMuon/DTCalibration/python/dtT0WireCalibration_cfg.py +++ b/CalibMuon/DTCalibration/python/dtT0WireCalibration_cfg.py @@ -4,8 +4,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.debugModules = cms.untracked.vstring('*') -process.MessageLogger.destinations = cms.untracked.vstring('cerr') -process.MessageLogger.categories.append('resolution') +process.MessageLogger.resolution=dict() process.MessageLogger.cerr = cms.untracked.PSet( FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(100), diff --git a/CalibMuon/DTCalibration/python/dtTPDQM_cfg.py b/CalibMuon/DTCalibration/python/dtTPDQM_cfg.py index 95741876d7d9d..240ad6b632c08 100644 --- a/CalibMuon/DTCalibration/python/dtTPDQM_cfg.py +++ b/CalibMuon/DTCalibration/python/dtTPDQM_cfg.py @@ -4,8 +4,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.debugModules = cms.untracked.vstring('*') -process.MessageLogger.destinations = cms.untracked.vstring('cerr') -process.MessageLogger.categories.append('resolution') +process.MessageLogger.resolution=dict() process.MessageLogger.cerr = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), noLineBreaks = cms.untracked.bool(False), diff --git a/CalibMuon/DTCalibration/python/dtTTrigValidSummary_cfg.py b/CalibMuon/DTCalibration/python/dtTTrigValidSummary_cfg.py index f9d78cc397b29..883dbf1bc73c2 100644 --- a/CalibMuon/DTCalibration/python/dtTTrigValidSummary_cfg.py +++ b/CalibMuon/DTCalibration/python/dtTTrigValidSummary_cfg.py @@ -4,8 +4,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.debugModules = cms.untracked.vstring('') -process.MessageLogger.destinations = cms.untracked.vstring('cerr') -process.MessageLogger.categories.append('resolution') +process.MessageLogger.resolution=dict() process.MessageLogger.cerr = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), noLineBreaks = cms.untracked.bool(False), diff --git a/CalibMuon/DTCalibration/python/messageLoggerDebug_cff.py b/CalibMuon/DTCalibration/python/messageLoggerDebug_cff.py index 058e5dc842961..0c90d870e5b5e 100644 --- a/CalibMuon/DTCalibration/python/messageLoggerDebug_cff.py +++ b/CalibMuon/DTCalibration/python/messageLoggerDebug_cff.py @@ -2,8 +2,6 @@ from FWCore.MessageService.MessageLogger_cfi import * MessageLogger.debugModules = cms.untracked.vstring('') -MessageLogger.destinations = cms.untracked.vstring('cerr') -MessageLogger.categories.append('Calibration') MessageLogger.cerr = cms.untracked.PSet( FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(100), diff --git a/CalibPPS/AlignmentRelative/plugins/PPSFastLocalSimulation.cc b/CalibPPS/AlignmentRelative/plugins/PPSFastLocalSimulation.cc index 7dd378ac75c1e..7a5e626f2653c 100644 --- a/CalibPPS/AlignmentRelative/plugins/PPSFastLocalSimulation.cc +++ b/CalibPPS/AlignmentRelative/plugins/PPSFastLocalSimulation.cc @@ -1,6 +1,6 @@ /**************************************************************************** -* Authors: -* Jan Kašpar (jan.kaspar@gmail.com) +* Authors: +* Jan Kašpar (jan.kaspar@gmail.com) ****************************************************************************/ #include "FWCore/Framework/interface/stream/EDProducer.h" @@ -349,7 +349,7 @@ void PPSFastLocalSimulation::GenerateTrack(unsigned int idx, printf(" | m=%+8.4f, sigma=%+8.4f\n", v, sigma); DetSet &hits = stripHitColl->find_or_insert(detId); - hits.push_back(TotemRPRecHit(v, sigma)); + hits.emplace_back(v, sigma); } // diamonds @@ -364,8 +364,7 @@ void PPSFastLocalSimulation::GenerateTrack(unsigned int idx, const double width = pitchDiamonds_; DetSet &hits = diamondHitColl->find_or_insert(detId); - HPTDCErrorFlags flags; - hits.push_back(CTPPSDiamondRecHit(h_loc.x(), width, 0., 0., 0., 0., 0., 0., 0., 0, flags, false)); + hits.emplace_back(h_loc.x(), width, 0., 0., 0., 0., 0., 0., 0., 0, HPTDCErrorFlags(), false); } // pixels @@ -384,7 +383,7 @@ void PPSFastLocalSimulation::GenerateTrack(unsigned int idx, const LocalError le(sigma, 0., sigma); DetSet &hits = pixelHitColl->find_or_insert(detId); - hits.push_back(CTPPSPixelRecHit(lp, le)); + hits.emplace_back(lp, le); } } } diff --git a/CalibPPS/AlignmentRelative/test/test_modify_singular_modes/template_msm_cfg.py b/CalibPPS/AlignmentRelative/test/test_modify_singular_modes/template_msm_cfg.py index 665e476b380ff..cc79ff9a5ab2f 100644 --- a/CalibPPS/AlignmentRelative/test/test_modify_singular_modes/template_msm_cfg.py +++ b/CalibPPS/AlignmentRelative/test/test_modify_singular_modes/template_msm_cfg.py @@ -4,11 +4,13 @@ # minimum of logs process.MessageLogger = cms.Service("MessageLogger", - statistics = cms.untracked.vstring(), - destinations = cms.untracked.vstring('cout'), - cout = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING') - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ) ) # data source diff --git a/CalibPPS/AlignmentRelative/test/test_modify_singular_modes/template_tba_cfg.py b/CalibPPS/AlignmentRelative/test/test_modify_singular_modes/template_tba_cfg.py index 8018f79479810..2c979c5d84089 100644 --- a/CalibPPS/AlignmentRelative/test/test_modify_singular_modes/template_tba_cfg.py +++ b/CalibPPS/AlignmentRelative/test/test_modify_singular_modes/template_tba_cfg.py @@ -4,11 +4,13 @@ # minimum of logs process.MessageLogger = cms.Service("MessageLogger", - statistics = cms.untracked.vstring(), - destinations = cms.untracked.vstring('cout'), - cout = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING') - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ) ) # random seeds diff --git a/CalibPPS/AlignmentRelative/test/test_with_mc/simple/cfg.py b/CalibPPS/AlignmentRelative/test/test_with_mc/simple/cfg.py index 6806e38c73827..2e15842a64872 100644 --- a/CalibPPS/AlignmentRelative/test/test_with_mc/simple/cfg.py +++ b/CalibPPS/AlignmentRelative/test/test_with_mc/simple/cfg.py @@ -4,11 +4,13 @@ # minimum of logs process.MessageLogger = cms.Service("MessageLogger", - statistics = cms.untracked.vstring(), - destinations = cms.untracked.vstring('cout'), - cout = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING') - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ) ) # random seeds diff --git a/CalibPPS/ESProducers/BuildFile.xml b/CalibPPS/ESProducers/BuildFile.xml new file mode 100644 index 0000000000000..c80ce7857dd4e --- /dev/null +++ b/CalibPPS/ESProducers/BuildFile.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CalibPPS/ESProducers/interface/CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon.h b/CalibPPS/ESProducers/interface/CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon.h new file mode 100644 index 0000000000000..896ae535876d1 --- /dev/null +++ b/CalibPPS/ESProducers/interface/CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon.h @@ -0,0 +1,37 @@ +/**************************************************************************** + * Authors: + * Jan Kaspar (jan.kaspar@gmail.com) + * Helena Malbouisson + * Clemencia Mora Herrera + * Christopher Misan + ****************************************************************************/ + +namespace edm { + class ParameterSet; +} + +#include "CondFormats/PPSObjects/interface/CTPPSRPAlignmentCorrectionsDataSequence.h" + +#include +#include + +class CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon { +public: + CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon(const edm::ParameterSet &p); + ~CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon(); + + CTPPSRPAlignmentCorrectionsDataSequence acsMeasured, acsReal, acsMisaligned; + CTPPSRPAlignmentCorrectionsData acMeasured, acReal, acMisaligned; + + unsigned int verbosity; + + static edm::EventID previousLS(const edm::EventID &src); + static edm::EventID nextLS(const edm::EventID &src); + +protected: + CTPPSRPAlignmentCorrectionsDataSequence Merge(const std::vector &) const; + + void PrepareSequence(const std::string &label, + CTPPSRPAlignmentCorrectionsDataSequence &seq, + const std::vector &files) const; +}; \ No newline at end of file diff --git a/CalibPPS/ESProducers/plugins/BuildFile.xml b/CalibPPS/ESProducers/plugins/BuildFile.xml index 295f6d491db3d..d490a35ba805b 100644 --- a/CalibPPS/ESProducers/plugins/BuildFile.xml +++ b/CalibPPS/ESProducers/plugins/BuildFile.xml @@ -1,10 +1,24 @@ + + + - + + + + + - + + + + + + + + diff --git a/CalibPPS/ESProducers/plugins/CTPPSCompositeESSource.cc b/CalibPPS/ESProducers/plugins/CTPPSCompositeESSource.cc new file mode 100644 index 0000000000000..ce908eaeb356d --- /dev/null +++ b/CalibPPS/ESProducers/plugins/CTPPSCompositeESSource.cc @@ -0,0 +1,528 @@ +/**************************************************************************** +* +* Authors: +* Jan Kaspar (jan.kaspar@gmail.com) +* Christopher Misan (krzysmisan@gmail.com) +* +****************************************************************************/ + +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/SourceFactory.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h" +#include "FWCore/Framework/interface/ESProducts.h" + +#include "CondFormats/RunInfo/interface/LHCInfo.h" +#include "CondFormats/PPSObjects/interface/LHCOpticalFunctionsSetCollection.h" +#include "CondFormats/PPSObjects/interface/CTPPSRPAlignmentCorrectionsData.h" +#include "CondFormats/PPSObjects/interface/PPSDirectSimulationData.h" + +#include "CondFormats/DataRecord/interface/LHCInfoRcd.h" +#include "CondFormats/DataRecord/interface/CTPPSOpticsRcd.h" +#include "CondFormats/DataRecord/interface/PPSDirectSimulationDataRcd.h" + +#include "Geometry/VeryForwardGeometryBuilder/interface/CTPPSGeometry.h" +#include "Geometry/VeryForwardGeometryBuilder/interface/CTPPSGeometryESCommon.h" +#include "Geometry/VeryForwardGeometryBuilder/interface/DetGeomDescBuilder.h" + +#include "Geometry/Records/interface/IdealGeometryRecord.h" +#include "Geometry/Records/interface/VeryForwardMisalignedGeometryRecord.h" +#include "Geometry/Records/interface/VeryForwardRealGeometryRecord.h" + +#include "CalibPPS/ESProducers/interface/CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon.h" + +#include "CLHEP/Random/RandFlat.h" +#include "CLHEP/Random/JamesRandom.h" + +#include +#include +#include +#include +#include + +#include "TFile.h" +#include "TH2D.h" + +//---------------------------------------------------------------------------------------------------- + +class CTPPSCompositeESSource : public edm::ESProducer, public edm::EventSetupRecordIntervalFinder { +public: + CTPPSCompositeESSource(const edm::ParameterSet &); + + static void fillDescriptions(edm::ConfigurationDescriptions &); + + std::unique_ptr produceLhcInfo(const LHCInfoRcd &); + std::unique_ptr produceOptics(const CTPPSOpticsRcd &); + std::unique_ptr produceDirectSimuData(const PPSDirectSimulationDataRcd &); + + std::shared_ptr produceRealAlignments(const RPRealAlignmentRecord &); + std::shared_ptr produceMisalignedAlignments(const RPMisalignedAlignmentRecord &); + + std::shared_ptr produceRealTG(const VeryForwardRealGeometryRecord &); + std::shared_ptr produceMisalignedTG(const VeryForwardMisalignedGeometryRecord &); + +private: + // config parameters + std::string compactViewTag_; + std::string lhcInfoLabel_; + std::string opticsLabel_; + unsigned int generateEveryNEvents_; + unsigned int verbosity_; + const bool isRun2_; + + // ES tokens + edm::ESGetToken tokenCompactViewReal_, tokenCompactViewMisaligned_; + + template + struct BinData { + double min, max; + T data; + }; + + struct ProfileData { + // LHCInfo + double beamEnergy, xangle, betaStar; + std::vector>> xangleBetaStarBins; + + // optics + LHCOpticalFunctionsSetCollection lhcOptical; + + // geometry + std::shared_ptr ddCompactView; + std::shared_ptr misalignedGD; + std::shared_ptr realGD; + std::shared_ptr misalignedTG; + std::shared_ptr realTG; + + // alignment + std::shared_ptr acReal, acMisaligned; + + // direct simulation configuration + PPSDirectSimulationData directSimuData; + }; + + // profile variables + std::vector> profile_bins_; + const ProfileData *currentProfile_; + + // random engine + std::unique_ptr m_engine_; + + // methods to pre-compute profile data + void buildLHCInfo(const edm::ParameterSet &profile, ProfileData &pData); + void buildOptics(const edm::ParameterSet &profile, ProfileData &pData); + void buildAlignment(const edm::ParameterSet &profile, ProfileData &pData); + void buildDirectSimuData(const edm::ParameterSet &profile, ProfileData &pData); + + // flag whether the geometry (for all profiles) has been built + bool geometryBuilt_; + + // this build method is different from all others - it is only called at the first + // geometry request since the ideal geometry must be obtained from ES; + // this method updates all profiles and builds all flavours of geometries + void buildGeometry(const DDCompactView &cpv); + + // event id for which method "setIntervalFor" set new profile + edm::EventID previously_set_eventID_; + + // method set IOV (common to all products) + void setIntervalFor(const edm::eventsetup::EventSetupRecordKey &, + const edm::IOVSyncValue &, + edm::ValidityInterval &) override; +}; + +//---------------------------------------------------------------------------------------------------- + +CTPPSCompositeESSource::CTPPSCompositeESSource(const edm::ParameterSet &conf) + : compactViewTag_(conf.getParameter("compactViewTag")), + lhcInfoLabel_(conf.getParameter("lhcInfoLabel")), + opticsLabel_(conf.getParameter("opticsLabel")), + generateEveryNEvents_(conf.getUntrackedParameter("generateEveryNEvents")), + verbosity_(conf.getUntrackedParameter("verbosity")), + isRun2_(conf.getParameter("isRun2")), + m_engine_(new CLHEP::HepJamesRandom(conf.getParameter("seed"))), + geometryBuilt_(false) { + double l_int_sum = 0; + + for (const auto &cfg : conf.getParameter>("periods")) { + double l_int = cfg.getParameter("L_int"); + + profile_bins_.emplace_back(BinData{l_int_sum, l_int_sum + l_int, ProfileData()}); + + l_int_sum += l_int; + + auto &pData = profile_bins_.back().data; + + buildLHCInfo(cfg, pData); + buildOptics(cfg, pData); + buildAlignment(cfg, pData); + buildDirectSimuData(cfg, pData); + } + + // normalise L_int sums to probabilities + for (auto &bin : profile_bins_) { + bin.min /= l_int_sum; + bin.max /= l_int_sum; + } + + // framework registrations + setWhatProduced(this, &CTPPSCompositeESSource::produceLhcInfo, edm::es::Label(lhcInfoLabel_)); + setWhatProduced(this, &CTPPSCompositeESSource::produceOptics, edm::es::Label(opticsLabel_)); + setWhatProduced(this, &CTPPSCompositeESSource::produceDirectSimuData); + + tokenCompactViewReal_ = setWhatProduced(this, &CTPPSCompositeESSource::produceRealTG) + .consumesFrom(edm::ESInputTag("", compactViewTag_)); + tokenCompactViewMisaligned_ = + setWhatProduced(this, &CTPPSCompositeESSource::produceMisalignedTG) + .consumesFrom(edm::ESInputTag("", compactViewTag_)); + + findingRecord(); + findingRecord(); + findingRecord(); + findingRecord(); + findingRecord(); + findingRecord(); + findingRecord(); +} + +//---------------------------------------------------------------------------------------------------- + +void CTPPSCompositeESSource::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { + edm::ParameterSetDescription desc; + desc.add("compactViewTag", "")->setComment("label of the geometry compact view"); + desc.add("lhcInfoLabel", "")->setComment("label of the LHCInfo record"); + desc.add("opticsLabel", "")->setComment("label of the optics record"); + desc.add("seed", 1)->setComment("random seed"); + desc.add("isRun2", false)->setComment("use diamond's run 2 geometry definition?"); + desc.addUntracked("generateEveryNEvents", 1)->setComment("how often to switch conditions"); + desc.addUntracked("verbosity", 0); + + edm::ParameterSetDescription desc_profile; + std::vector vp; + desc_profile.add("L_int", 0.)->setComment("integrated luminosity"); + + // lhcInfo + edm::ParameterSetDescription desc_profile_ctppsLHCInfo; + desc_profile_ctppsLHCInfo.add("xangle", -1) + ->setComment("constant xangle, if negative, the xangle/beta* distribution will be used"); + desc_profile_ctppsLHCInfo.add("betaStar", 0.)->setComment("constant beta*"); + desc_profile_ctppsLHCInfo.add("beamEnergy", 0.)->setComment("beam energy"); + desc_profile_ctppsLHCInfo.add("xangleBetaStarHistogramFile", "") + ->setComment("ROOT file with xangle/beta* distribution"); + desc_profile_ctppsLHCInfo.add("xangleBetaStarHistogramObject", "") + ->setComment("xangle distribution object in the ROOT file"); + desc_profile.add("ctppsLHCInfo", desc_profile_ctppsLHCInfo); + + // optics + edm::ParameterSetDescription desc_profile_ctppsOpticalFunctions; + edm::ParameterSetDescription of_desc; + of_desc.add("xangle")->setComment("half crossing angle value in urad"); + of_desc.add("fileName")->setComment("ROOT file with optical functions"); + std::vector of; + desc_profile_ctppsOpticalFunctions.addVPSet("opticalFunctions", of_desc, of) + ->setComment("list of optical functions at different crossing angles"); + + edm::ParameterSetDescription sp_desc; + sp_desc.add("rpId")->setComment("associated detector DetId"); + sp_desc.add("dirName")->setComment("associated path to the optical functions file"); + sp_desc.add("z")->setComment("longitudinal position at scoring plane/detector"); + std::vector sp; + desc_profile_ctppsOpticalFunctions.addVPSet("scoringPlanes", sp_desc, sp) + ->setComment("list of sensitive planes/detectors stations"); + desc_profile.add("ctppsOpticalFunctions", desc_profile_ctppsOpticalFunctions); + + // alignment + edm::ParameterSetDescription desc_profile_ctppsRPAlignmentCorrectionsDataXML; + desc_profile_ctppsRPAlignmentCorrectionsDataXML.add>("MeasuredFiles"); + desc_profile_ctppsRPAlignmentCorrectionsDataXML.add>("RealFiles"); + desc_profile_ctppsRPAlignmentCorrectionsDataXML.add>("MisalignedFiles"); + desc_profile.add("ctppsRPAlignmentCorrectionsDataXML", + desc_profile_ctppsRPAlignmentCorrectionsDataXML); + + // direct simu config + edm::ParameterSetDescription desc_profile_ctppsDirectSimuData; + desc_profile_ctppsDirectSimuData.add("empiricalAperture45"); + desc_profile_ctppsDirectSimuData.add("empiricalAperture56"); + + desc_profile_ctppsDirectSimuData.add("timeResolutionDiamonds45"); + desc_profile_ctppsDirectSimuData.add("timeResolutionDiamonds56"); + + edm::ParameterSetDescription eps_desc; + eps_desc.add("rpId")->setComment("RP id"); + eps_desc.add("file")->setComment("file name"); + eps_desc.add("object")->setComment("path to the efficiency histogram"); + desc_profile_ctppsDirectSimuData.addVPSet("efficienciesPerRP", eps_desc, std::vector()); + desc_profile_ctppsDirectSimuData.addVPSet("efficienciesPerPlane", eps_desc, std::vector()); + + desc_profile.add("ctppsDirectSimuData", desc_profile_ctppsDirectSimuData); + + desc.addVPSet("periods", desc_profile, vp)->setComment("profiles"); + + descriptions.add("ctppsCompositeESSource", desc); +} + +//---------------------------------------------------------------------------------------------------- + +void CTPPSCompositeESSource::buildDirectSimuData(const edm::ParameterSet &profile, ProfileData &pData) { + const auto &ctppsDirectSimuData = profile.getParameter("ctppsDirectSimuData"); + + pData.directSimuData.setEmpiricalAperture45(ctppsDirectSimuData.getParameter("empiricalAperture45")); + pData.directSimuData.setEmpiricalAperture56(ctppsDirectSimuData.getParameter("empiricalAperture56")); + + pData.directSimuData.setTimeResolutionDiamonds45( + ctppsDirectSimuData.getParameter("timeResolutionDiamonds45")); + pData.directSimuData.setTimeResolutionDiamonds56( + ctppsDirectSimuData.getParameter("timeResolutionDiamonds56")); + + for (const auto &ps : ctppsDirectSimuData.getParameterSetVector("efficienciesPerRP")) { + const auto rpId = ps.getParameter("rpId"); + const auto &file = ps.getParameter("file"); + const auto &object = ps.getParameter("object"); + pData.directSimuData.getEfficienciesPerRP()[rpId] = {file, object}; + } + + for (const auto &ps : ctppsDirectSimuData.getParameterSetVector("efficienciesPerPlane")) { + const auto rpId = ps.getParameter("rpId"); + const auto &file = ps.getParameter("file"); + const auto &object = ps.getParameter("object"); + pData.directSimuData.getEfficienciesPerPlane()[rpId] = {file, object}; + } +} + +//---------------------------------------------------------------------------------------------------- + +void CTPPSCompositeESSource::buildGeometry(const DDCompactView &cpv) { + std::unique_ptr idealGD = detgeomdescbuilder::buildDetGeomDescFromCompactView(cpv, isRun2_); + + for (auto &pb : profile_bins_) { + auto &p = pb.data; + + p.misalignedGD = CTPPSGeometryESCommon::applyAlignments(*(idealGD), p.acMisaligned.get()); + p.misalignedTG = std::make_shared(p.misalignedGD.get(), verbosity_); + + p.realGD = CTPPSGeometryESCommon::applyAlignments(*(idealGD), p.acReal.get()); + p.realTG = std::make_shared(p.realGD.get(), verbosity_); + } + + geometryBuilt_ = true; +} + +//---------------------------------------------------------------------------------------------------- + +void CTPPSCompositeESSource::buildOptics(const edm::ParameterSet &profile, ProfileData &pData) { + const auto &ctppsOpticalFunctions = profile.getParameter("ctppsOpticalFunctions"); + + struct FileInfo { + double m_xangle; + std::string m_fileName; + }; + + std::vector fileInfo; + + for (const auto &pset : ctppsOpticalFunctions.getParameter>("opticalFunctions")) { + const double &xangle = pset.getParameter("xangle"); + const std::string &fileName = pset.getParameter("fileName").fullPath(); + fileInfo.push_back({xangle, fileName}); + } + + struct RPInfo { + std::string m_dirName; + double m_scoringPlaneZ; + }; + + std::unordered_map rpInfo; + + for (const auto &pset : ctppsOpticalFunctions.getParameter>("scoringPlanes")) { + const unsigned int rpId = pset.getParameter("rpId"); + const std::string dirName = pset.getParameter("dirName"); + const double z = pset.getParameter("z"); + const RPInfo entry = {dirName, z}; + rpInfo.emplace(rpId, entry); + } + + for (const auto &fi : fileInfo) { + std::unordered_map xa_data; + + for (const auto &rpi : rpInfo) { + LHCOpticalFunctionsSet fcn(fi.m_fileName, rpi.second.m_dirName, rpi.second.m_scoringPlaneZ); + xa_data.emplace(rpi.first, std::move(fcn)); + } + + pData.lhcOptical.emplace(fi.m_xangle, xa_data); + } +} + +//---------------------------------------------------------------------------------------------------- + +void CTPPSCompositeESSource::buildAlignment(const edm::ParameterSet &cfg, ProfileData &pData) { + // load alignment data + auto ctppsRPAlignmentCorrectionsDataXMLPSet = + cfg.getParameter("ctppsRPAlignmentCorrectionsDataXML"); + ctppsRPAlignmentCorrectionsDataXMLPSet.addUntrackedParameter("verbosity", verbosity_); + + CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon ctppsRPAlignmentCorrectionsDataESSourceXMLCommon( + ctppsRPAlignmentCorrectionsDataXMLPSet); + + // store the first entry from the alignment sequence (more cannot be done) + pData.acReal = std::make_shared( + ctppsRPAlignmentCorrectionsDataESSourceXMLCommon.acsReal.empty() + ? CTPPSRPAlignmentCorrectionsData() + : ctppsRPAlignmentCorrectionsDataESSourceXMLCommon.acsReal[0].second); + + pData.acMisaligned = std::make_shared( + ctppsRPAlignmentCorrectionsDataESSourceXMLCommon.acsMisaligned.empty() + ? CTPPSRPAlignmentCorrectionsData() + : ctppsRPAlignmentCorrectionsDataESSourceXMLCommon.acsMisaligned[0].second); +} + +//---------------------------------------------------------------------------------------------------- + +void CTPPSCompositeESSource::buildLHCInfo(const edm::ParameterSet &profile, ProfileData &pData) { + const auto &ctppsLHCInfo = profile.getParameter("ctppsLHCInfo"); + + pData.beamEnergy = ctppsLHCInfo.getParameter("beamEnergy"); + pData.betaStar = ctppsLHCInfo.getParameter("betaStar"); + pData.xangle = ctppsLHCInfo.getParameter("xangle"); + + // continue only if distributed xangle/beta* shall be used + if (pData.xangle > 0) + return; + + edm::FileInPath fip(ctppsLHCInfo.getParameter("xangleBetaStarHistogramFile").c_str()); + std::unique_ptr f_in(TFile::Open(fip.fullPath().c_str())); + if (!f_in) + throw cms::Exception("PPS") << "Cannot open input file '" + << ctppsLHCInfo.getParameter("xangleBetaStarHistogramFile") << "'."; + + TH2D *h_xangle_beta_star = + (TH2D *)f_in->Get(ctppsLHCInfo.getParameter("xangleBetaStarHistogramObject").c_str()); + if (!h_xangle_beta_star) + throw cms::Exception("PPS") << "Cannot load input object '" + << ctppsLHCInfo.getParameter("xangleBetaStarHistogramObject") << "'."; + + // extract non-empty bins, calculate weights + double sum = 0.; + for (int bi = 1; bi <= h_xangle_beta_star->GetNcells(); ++bi) + sum += h_xangle_beta_star->GetBinContent(bi); + + double cw = 0.; + for (int x = 1; x <= h_xangle_beta_star->GetNbinsX(); ++x) + for (int y = 1; y <= h_xangle_beta_star->GetNbinsY(); ++y) { + const double w = h_xangle_beta_star->GetBinContent(h_xangle_beta_star->GetBin(x, y)) / sum; + if (w > 0.) { + pData.xangleBetaStarBins.push_back( + {cw, + cw + w, + std::pair(h_xangle_beta_star->GetXaxis()->GetBinCenter(x), + h_xangle_beta_star->GetYaxis()->GetBinCenter(y))}); + cw += w; + } + } +} + +//---------------------------------------------------------------------------------------------------- + +void CTPPSCompositeESSource::setIntervalFor(const edm::eventsetup::EventSetupRecordKey &key, + const edm::IOVSyncValue &iosv, + edm::ValidityInterval &oValidity) { + // determine new IOV + edm::EventID beginEvent = iosv.eventID(); + edm::EventID endEvent(beginEvent.run(), beginEvent.luminosityBlock(), beginEvent.event() + generateEveryNEvents_); + oValidity = edm::ValidityInterval(edm::IOVSyncValue(beginEvent), edm::IOVSyncValue(endEvent)); + + // stop if new profile has already been generated + if (beginEvent.run() == previously_set_eventID_.run() && + beginEvent.luminosityBlock() == previously_set_eventID_.luminosityBlock()) + return; + + previously_set_eventID_ = beginEvent; + + // randomly pick the next profile + const double u = CLHEP::RandFlat::shoot(m_engine_.get(), 0., 1.); + + for (const auto &bin : profile_bins_) { + if (bin.min <= u && u <= bin.max) { + currentProfile_ = &bin.data; + break; + } + } +} + +//---------------------------------------------------------------------------------------------------- + +std::shared_ptr CTPPSCompositeESSource::produceRealAlignments( + const RPRealAlignmentRecord &) { + return currentProfile_->acReal; +} + +//---------------------------------------------------------------------------------------------------- + +std::shared_ptr CTPPSCompositeESSource::produceMisalignedAlignments( + const RPMisalignedAlignmentRecord &) { + return currentProfile_->acMisaligned; +} + +//---------------------------------------------------------------------------------------------------- + +std::shared_ptr CTPPSCompositeESSource::produceRealTG(const VeryForwardRealGeometryRecord &iRecord) { + if (!geometryBuilt_) + buildGeometry(iRecord.getRecord().get(tokenCompactViewReal_)); + + return currentProfile_->realTG; +} + +//---------------------------------------------------------------------------------------------------- + +std::shared_ptr CTPPSCompositeESSource::produceMisalignedTG( + const VeryForwardMisalignedGeometryRecord &iRecord) { + if (!geometryBuilt_) + buildGeometry(iRecord.getRecord().get(tokenCompactViewMisaligned_)); + + return currentProfile_->misalignedTG; +} + +//---------------------------------------------------------------------------------------------------- + +std::unique_ptr CTPPSCompositeESSource::produceDirectSimuData( + const PPSDirectSimulationDataRcd &) { + return std::make_unique(currentProfile_->directSimuData); +} + +//---------------------------------------------------------------------------------------------------- + +std::unique_ptr CTPPSCompositeESSource::produceOptics(const CTPPSOpticsRcd &) { + return std::make_unique(currentProfile_->lhcOptical); +} + +//---------------------------------------------------------------------------------------------------- + +std::unique_ptr CTPPSCompositeESSource::produceLhcInfo(const LHCInfoRcd &) { + double xangle = currentProfile_->xangle; + double betaStar = currentProfile_->betaStar; + + if (currentProfile_->xangle < 0) { + const double u = CLHEP::RandFlat::shoot(m_engine_.get(), 0., 1.); + for (const auto &d : currentProfile_->xangleBetaStarBins) { + if (d.min <= u && u <= d.max) { + xangle = d.data.first; + betaStar = d.data.second; + break; + } + } + } + + auto lhcInfo = std::make_unique(); + lhcInfo->setEnergy(currentProfile_->beamEnergy); + lhcInfo->setCrossingAngle(xangle); + lhcInfo->setBetaStar(betaStar); + + edm::LogInfo("PPS") << "new LHCInfo: xangle=" << xangle << ", betaStar=" << betaStar; + + return lhcInfo; +} + +//---------------------------------------------------------------------------------------------------- + +DEFINE_FWK_EVENTSETUP_SOURCE(CTPPSCompositeESSource); diff --git a/CalibPPS/ESProducers/plugins/CTPPSRPAlignmentCorrectionsDataESSourceXML.cc b/CalibPPS/ESProducers/plugins/CTPPSRPAlignmentCorrectionsDataESSourceXML.cc index a4fc0cd635676..c6c474d8c3a70 100644 --- a/CalibPPS/ESProducers/plugins/CTPPSRPAlignmentCorrectionsDataESSourceXML.cc +++ b/CalibPPS/ESProducers/plugins/CTPPSRPAlignmentCorrectionsDataESSourceXML.cc @@ -5,6 +5,7 @@ * Jan Kaspar (jan.kaspar@gmail.com) * Helena Malbouisson * Clemencia Mora Herrera + * Christopher Misan ****************************************************************************/ #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -14,21 +15,24 @@ #include "FWCore/Framework/interface/ESProducer.h" #include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/ParameterSet/interface/FileInPath.h" #include "CondFormats/PPSObjects/interface/CTPPSRPAlignmentCorrectionsDataSequence.h" - #include "CondFormats/PPSObjects/interface/CTPPSRPAlignmentCorrectionsMethods.h" #include "CondFormats/AlignmentRecord/interface/CTPPSRPAlignmentCorrectionsDataRcd.h" // this used to be RPMeasuredAlignmentRecord.h #include "CondFormats/AlignmentRecord/interface/RPRealAlignmentRecord.h" #include "CondFormats/AlignmentRecord/interface/RPMisalignedAlignmentRecord.h" +#include "CalibPPS/ESProducers/interface/CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon.h" + #include #include #include #include +using namespace std; +using namespace edm; + /** * Loads alignment corrections to EventSetup. **/ @@ -37,74 +41,23 @@ class CTPPSRPAlignmentCorrectionsDataESSourceXML : public edm::ESProducer, publi CTPPSRPAlignmentCorrectionsDataESSourceXML(const edm::ParameterSet &p); ~CTPPSRPAlignmentCorrectionsDataESSourceXML() override; +protected: + std::unique_ptr ctppsRPAlignmentCorrectionsDataESSourceXMLCommon; + std::unique_ptr produceMeasured(const CTPPSRPAlignmentCorrectionsDataRcd &); std::unique_ptr produceReal(const RPRealAlignmentRecord &); std::unique_ptr produceMisaligned(const RPMisalignedAlignmentRecord &); -protected: - unsigned int verbosity; - CTPPSRPAlignmentCorrectionsDataSequence acsMeasured, acsReal, acsMisaligned; - CTPPSRPAlignmentCorrectionsData acMeasured, acReal, acMisaligned; - void setIntervalFor(const edm::eventsetup::EventSetupRecordKey &, const edm::IOVSyncValue &, edm::ValidityInterval &) override; - - static edm::EventID previousLS(const edm::EventID &src) { - if (src.run() == edm::EventID::maxRunNumber() && src.luminosityBlock() == edm::EventID::maxLuminosityBlockNumber()) - return src; - - if (src.luminosityBlock() == 0) - return edm::EventID(src.run() - 1, edm::EventID::maxLuminosityBlockNumber(), src.event()); - - return edm::EventID(src.run(), src.luminosityBlock() - 1, src.event()); - } - - static edm::EventID nextLS(const edm::EventID &src) { - if (src.luminosityBlock() == edm::EventID::maxLuminosityBlockNumber()) { - if (src.run() == edm::EventID::maxRunNumber()) - return src; - - return edm::EventID(src.run() + 1, 0, src.event()); - } - - return edm::EventID(src.run(), src.luminosityBlock() + 1, src.event()); - } - - /// merges an array of sequences to one - CTPPSRPAlignmentCorrectionsDataSequence Merge(const std::vector &) const; - - /// builds a sequence of corrections from provided sources and runs a few checks - void PrepareSequence(const std::string &label, - CTPPSRPAlignmentCorrectionsDataSequence &seq, - const std::vector &files) const; }; //---------------------------------------------------------------------------------------------------- -using namespace std; -using namespace edm; - -//---------------------------------------------------------------------------------------------------- -//---------------------------------------------------------------------------------------------------- - -CTPPSRPAlignmentCorrectionsDataESSourceXML::CTPPSRPAlignmentCorrectionsDataESSourceXML(const edm::ParameterSet &pSet) - : verbosity(pSet.getUntrackedParameter("verbosity", 0)) { - std::vector measuredFiles; - for (const auto &f : pSet.getParameter >("MeasuredFiles")) - measuredFiles.push_back(edm::FileInPath(f).fullPath()); - PrepareSequence("Measured", acsMeasured, measuredFiles); - - std::vector realFiles; - for (const auto &f : pSet.getParameter >("RealFiles")) - realFiles.push_back(edm::FileInPath(f).fullPath()); - PrepareSequence("Real", acsReal, realFiles); - - std::vector misalignedFiles; - for (const auto &f : pSet.getParameter >("MisalignedFiles")) - misalignedFiles.push_back(edm::FileInPath(f).fullPath()); - PrepareSequence("Misaligned", acsMisaligned, misalignedFiles); - +CTPPSRPAlignmentCorrectionsDataESSourceXML::CTPPSRPAlignmentCorrectionsDataESSourceXML(const edm::ParameterSet &pSet) { + ctppsRPAlignmentCorrectionsDataESSourceXMLCommon = + std::make_unique(pSet); setWhatProduced(this, &CTPPSRPAlignmentCorrectionsDataESSourceXML::produceMeasured); setWhatProduced(this, &CTPPSRPAlignmentCorrectionsDataESSourceXML::produceReal); setWhatProduced(this, &CTPPSRPAlignmentCorrectionsDataESSourceXML::produceMisaligned); @@ -120,101 +73,25 @@ CTPPSRPAlignmentCorrectionsDataESSourceXML::~CTPPSRPAlignmentCorrectionsDataESSo //---------------------------------------------------------------------------------------------------- -CTPPSRPAlignmentCorrectionsDataSequence CTPPSRPAlignmentCorrectionsDataESSourceXML::Merge( - const vector &seqs) const { - // find interval boundaries - map > > bounds; - - for (const auto &seq : seqs) { - for (const auto &p : seq) { - const ValidityInterval &iov = p.first; - const CTPPSRPAlignmentCorrectionsData *corr = &p.second; - - const EventID &event_first = iov.first().eventID(); - bounds[event_first].emplace_back(pair(true, corr)); - - const EventID &event_after = nextLS(iov.last().eventID()); - bounds[event_after].emplace_back(pair(false, corr)); - } - } - - // build correction sums per interval - set accumulator; - CTPPSRPAlignmentCorrectionsDataSequence result; - for (map > >::const_iterator tit = bounds.begin(); - tit != bounds.end(); - ++tit) { - for (const auto &cit : tit->second) { - bool add = cit.first; - const CTPPSRPAlignmentCorrectionsData *corr = cit.second; - - if (add) - accumulator.insert(corr); - else - accumulator.erase(corr); - } - - auto tit_next = tit; - tit_next++; - if (tit_next == bounds.end()) - break; - - const EventID &event_first = tit->first; - const EventID &event_last = previousLS(tit_next->first); - - if (verbosity) { - LogVerbatim("CTPPSRPAlignmentCorrectionsDataESSourceXML") - << " first=" << CTPPSRPAlignmentCorrectionsMethods::iovValueToString(edm::IOVSyncValue(event_first)) - << ", last=" << CTPPSRPAlignmentCorrectionsMethods::iovValueToString(edm::IOVSyncValue(event_last)) - << ": alignment blocks " << accumulator.size(); - } - - CTPPSRPAlignmentCorrectionsData corr_sum; - for (auto sit : accumulator) - corr_sum.addCorrections(*sit); - - result.insert(edm::ValidityInterval(edm::IOVSyncValue(event_first), edm::IOVSyncValue(event_last)), corr_sum); - } - - return result; -} - -//---------------------------------------------------------------------------------------------------- - -void CTPPSRPAlignmentCorrectionsDataESSourceXML::PrepareSequence(const string &label, - CTPPSRPAlignmentCorrectionsDataSequence &seq, - const vector &files) const { - if (verbosity) - LogVerbatim(">> CTPPSRPAlignmentCorrectionsDataESSourceXML") - << "CTPPSRPAlignmentCorrectionsDataESSourceXML::PrepareSequence(" << label << ")"; - - vector sequences; - sequences.reserve(files.size()); - for (const auto &file : files) - sequences.emplace_back(CTPPSRPAlignmentCorrectionsMethods::loadFromXML(file)); - - seq = Merge(sequences); -} - -//---------------------------------------------------------------------------------------------------- - std::unique_ptr CTPPSRPAlignmentCorrectionsDataESSourceXML::produceMeasured( const CTPPSRPAlignmentCorrectionsDataRcd &iRecord) { - return std::make_unique(acMeasured); + return std::make_unique( + ctppsRPAlignmentCorrectionsDataESSourceXMLCommon->acMeasured); } //---------------------------------------------------------------------------------------------------- std::unique_ptr CTPPSRPAlignmentCorrectionsDataESSourceXML::produceReal( const RPRealAlignmentRecord &iRecord) { - return std::make_unique(acReal); + return std::make_unique(ctppsRPAlignmentCorrectionsDataESSourceXMLCommon->acReal); } //---------------------------------------------------------------------------------------------------- std::unique_ptr CTPPSRPAlignmentCorrectionsDataESSourceXML::produceMisaligned( const RPMisalignedAlignmentRecord &iRecord) { - return std::make_unique(acMisaligned); + return std::make_unique( + ctppsRPAlignmentCorrectionsDataESSourceXMLCommon->acMisaligned); } //---------------------------------------------------------------------------------------------------- @@ -222,16 +99,14 @@ std::unique_ptr CTPPSRPAlignmentCorrectionsData void CTPPSRPAlignmentCorrectionsDataESSourceXML::setIntervalFor(const edm::eventsetup::EventSetupRecordKey &key, const IOVSyncValue &iosv, ValidityInterval &valInt) { - if (verbosity) { + if (ctppsRPAlignmentCorrectionsDataESSourceXMLCommon->verbosity) { time_t unixTime = iosv.time().unixTime(); char timeStr[50]; strftime(timeStr, 50, "%F %T", localtime(&unixTime)); - LogVerbatim("CTPPSRPAlignmentCorrectionsDataESSourceXML") - << ">> CTPPSRPAlignmentCorrectionsDataESSourceXML::setIntervalFor(" << key.name() << ")"; + LogInfo("PPS") << ">> CTPPSRPAlignmentCorrectionsDataESSourceXML::setIntervalFor(" << key.name() << ")"; - LogVerbatim("CTPPSRPAlignmentCorrectionsDataESSourceXML") - << " event=" << iosv.eventID() << ", UNIX timestamp=" << unixTime << " (" << timeStr << ")"; + LogInfo("PPS") << " event=" << iosv.eventID() << ", UNIX timestamp=" << unixTime << " (" << timeStr << ")"; } // // determine what sequence and corrections should be used @@ -239,18 +114,18 @@ void CTPPSRPAlignmentCorrectionsDataESSourceXML::setIntervalFor(const edm::event CTPPSRPAlignmentCorrectionsData *p_corr = nullptr; if (strcmp(key.name(), "CTPPSRPAlignmentCorrectionsDataRcd") == 0) { - p_seq = &acsMeasured; - p_corr = &acMeasured; + p_seq = &(ctppsRPAlignmentCorrectionsDataESSourceXMLCommon->acsMeasured); + p_corr = &(ctppsRPAlignmentCorrectionsDataESSourceXMLCommon->acMeasured); } if (strcmp(key.name(), "RPRealAlignmentRecord") == 0) { - p_seq = &acsReal; - p_corr = &acReal; + p_seq = &(ctppsRPAlignmentCorrectionsDataESSourceXMLCommon->acsReal); + p_corr = &(ctppsRPAlignmentCorrectionsDataESSourceXMLCommon->acReal); } if (strcmp(key.name(), "RPMisalignedAlignmentRecord") == 0) { - p_seq = &acsMisaligned; - p_corr = &acMisaligned; + p_seq = &(ctppsRPAlignmentCorrectionsDataESSourceXMLCommon->acsMisaligned); + p_corr = &(ctppsRPAlignmentCorrectionsDataESSourceXMLCommon->acMisaligned); } if (p_corr == nullptr) @@ -278,10 +153,10 @@ void CTPPSRPAlignmentCorrectionsDataESSourceXML::setIntervalFor(const edm::event valInt = it.first; *p_corr = it.second; - if (verbosity) { - LogVerbatim("CTPPSRPAlignmentCorrectionsDataESSourceXML") - << " setting validity interval [" << CTPPSRPAlignmentCorrectionsMethods::iovValueToString(valInt.first()) - << ", " << CTPPSRPAlignmentCorrectionsMethods::iovValueToString(valInt.last()) << "]"; + if (ctppsRPAlignmentCorrectionsDataESSourceXMLCommon->verbosity) { + LogInfo("PPS") << " setting validity interval [" + << CTPPSRPAlignmentCorrectionsMethods::iovValueToString(valInt.first()) << ", " + << CTPPSRPAlignmentCorrectionsMethods::iovValueToString(valInt.last()) << "]"; } return; @@ -304,15 +179,15 @@ void CTPPSRPAlignmentCorrectionsDataESSourceXML::setIntervalFor(const edm::event if (!next_exists) { valInt = ValidityInterval(iosv, iosv.endOfTime()); } else { - const EventID &event_last = previousLS(event_next_start); + const EventID &event_last = ctppsRPAlignmentCorrectionsDataESSourceXMLCommon->previousLS(event_next_start); valInt = ValidityInterval(iosv, IOVSyncValue(event_last)); } - if (verbosity) { - LogVerbatim("CTPPSRPAlignmentCorrectionsDataESSourceXML") - << " setting validity interval [" << CTPPSRPAlignmentCorrectionsMethods::iovValueToString(valInt.first()) - << ", " << CTPPSRPAlignmentCorrectionsMethods::iovValueToString(valInt.last()) - << "] (empty alignment corrections)"; + if (ctppsRPAlignmentCorrectionsDataESSourceXMLCommon->verbosity) { + LogInfo("PPS") << " setting validity interval [" + << CTPPSRPAlignmentCorrectionsMethods::iovValueToString(valInt.first()) << ", " + << CTPPSRPAlignmentCorrectionsMethods::iovValueToString(valInt.last()) + << "] (empty alignment corrections)"; } } diff --git a/CalibPPS/ESProducers/plugins/PPSPixelTopologyESSource.cc b/CalibPPS/ESProducers/plugins/PPSPixelTopologyESSource.cc new file mode 100644 index 0000000000000..fea4b5836b4e2 --- /dev/null +++ b/CalibPPS/ESProducers/plugins/PPSPixelTopologyESSource.cc @@ -0,0 +1,173 @@ +/**************************************************************************** + * + * CondFormats/PPSObjects/plugins/PPSPixelTopologyESSource.cc + * + * Description : - Loads PPSPixelTopology from the PPSPixelTopologyESSource_cfi.py + * config file. + * + * + * Author: F.Ferro ferro@ge.infn.it + * + * + ****************************************************************************/ + +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/SourceFactory.h" +#include "FWCore/Framework/interface/ModuleFactory.h" + +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h" +#include "FWCore/Framework/interface/ESProducts.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" +#include "CondFormats/DataRecord/interface/PPSPixelTopologyRcd.h" + +#include + +/** + * \brief Loads PPSPixelTopology from a config file. + **/ + +class PPSPixelTopologyESSource : public edm::ESProducer, public edm::EventSetupRecordIntervalFinder { +public: + PPSPixelTopologyESSource(const edm::ParameterSet&); + ~PPSPixelTopologyESSource() override = default; + + std::unique_ptr produce(const PPSPixelTopologyRcd&); + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + /// Set PPS Topology parameters to their values from config + void setPPSPixelTopology(const edm::ParameterSet&); + /// Fill PPSPixelTopology object + std::unique_ptr fillPPSPixelTopology(); + + // Topology parameters + std::string runType_; + double pitch_simY_; + double pitch_simX_; + double thickness_; + unsigned short no_of_pixels_simX_; + unsigned short no_of_pixels_simY_; + unsigned short no_of_pixels_; + double simX_width_; + double simY_width_; + double dead_edge_width_; + double active_edge_sigma_; + double phys_active_edge_dist_; + +protected: + /// sets infinite validity of this data + void setIntervalFor(const edm::eventsetup::EventSetupRecordKey&, + const edm::IOVSyncValue&, + edm::ValidityInterval&) override; +}; + +//---------------------------------------------------------------------------------------------------- + +PPSPixelTopologyESSource::PPSPixelTopologyESSource(const edm::ParameterSet& iConfig) + : runType_(""), + pitch_simY_(0.), + pitch_simX_(0.), + thickness_(0.), + no_of_pixels_simX_(0.), + no_of_pixels_simY_(0.), + no_of_pixels_(0.), + simX_width_(0.), + simY_width_(0.), + dead_edge_width_(0.), + active_edge_sigma_(0.), + phys_active_edge_dist_(0.) { + setPPSPixelTopology(iConfig); + setWhatProduced(this); + findingRecord(); +} + +//---------------------------------------------------------------------------------------------------- + +std::unique_ptr PPSPixelTopologyESSource::produce(const PPSPixelTopologyRcd&) { + auto topo = fillPPSPixelTopology(); + + edm::LogInfo("PPS") << "PixelTopologyESSource::produce \n" << *topo; + + return topo; +} + +//---------------------------------------------------------------------------------------------------- + +void PPSPixelTopologyESSource::setPPSPixelTopology(const edm::ParameterSet& iConfig) { + runType_ = iConfig.getParameter("RunType"); + pitch_simY_ = iConfig.getParameter("PitchSimY"); + pitch_simX_ = iConfig.getParameter("PitchSimX"); + thickness_ = iConfig.getParameter("thickness"); + no_of_pixels_simX_ = iConfig.getParameter("noOfPixelSimX"); + no_of_pixels_simY_ = iConfig.getParameter("noOfPixelSimY"); + no_of_pixels_ = iConfig.getParameter("noOfPixels"); + simX_width_ = iConfig.getParameter("simXWidth"); + simY_width_ = iConfig.getParameter("simYWidth"); + dead_edge_width_ = iConfig.getParameter("deadEdgeWidth"); + active_edge_sigma_ = iConfig.getParameter("activeEdgeSigma"); + phys_active_edge_dist_ = iConfig.getParameter("physActiveEdgeDist"); +} + +//---------------------------------------------------------------------------------------------------- + +std::unique_ptr PPSPixelTopologyESSource::fillPPSPixelTopology() { + auto p = std::make_unique(); + + p->setRunType(runType_); + p->setPitchSimY(pitch_simY_); + p->setPitchSimX(pitch_simX_); + p->setThickness(thickness_); + p->setNoPixelsSimX(no_of_pixels_simX_); + p->setNoPixelsSimY(no_of_pixels_simY_); + p->setNoPixels(no_of_pixels_); + p->setSimXWidth(simX_width_); + p->setSimYWidth(simY_width_); + p->setDeadEdgeWidth(dead_edge_width_); + p->setActiveEdgeSigma(active_edge_sigma_); + p->setPhysActiveEdgeDist(phys_active_edge_dist_); + p->setActiveEdgeX(simX_width_ / 2. - phys_active_edge_dist_); + p->setActiveEdgeY(simY_width_ / 2. - phys_active_edge_dist_); + + return p; +} + +//---------------------------------------------------------------------------------------------------- + +void PPSPixelTopologyESSource::setIntervalFor(const edm::eventsetup::EventSetupRecordKey& key, + const edm::IOVSyncValue& iosv, + edm::ValidityInterval& oValidity) { + edm::LogInfo("PPS") << ">> PPSPixelTopologyESSource::setIntervalFor(" << key.name() << ")\n" + << " run=" << iosv.eventID().run() << ", event=" << iosv.eventID().event(); + + edm::ValidityInterval infinity(iosv.beginOfTime(), iosv.endOfTime()); + oValidity = infinity; +} + +//---------------------------------------------------------------------------------------------------- + +void PPSPixelTopologyESSource::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("RunType", "Run3"); + desc.add("PitchSimY", 150e-3); + desc.add("PitchSimX", 100e-3); + desc.add("thickness", 0.23); + desc.add("noOfPixelSimX", 160); + desc.add("noOfPixelSimY", 156); + desc.add("noOfPixels", 160 * 156); + desc.add("simXWidth", 16.6); + desc.add("simYWidth", 16.2); + desc.add("deadEdgeWidth", 200e-3); + desc.add("activeEdgeSigma", 0.02); + desc.add("physActiveEdgeDist", 0.150); + + descriptions.add("ppsPixelTopologyESSource", desc); +} + +//---------------------------------------------------------------------------------------------------- + +DEFINE_FWK_EVENTSETUP_SOURCE(PPSPixelTopologyESSource); diff --git a/CalibPPS/ESProducers/plugins/TotemDAQMappingESSourceXML.cc b/CalibPPS/ESProducers/plugins/TotemDAQMappingESSourceXML.cc index c71512755b9a9..fae42206bd533 100644 --- a/CalibPPS/ESProducers/plugins/TotemDAQMappingESSourceXML.cc +++ b/CalibPPS/ESProducers/plugins/TotemDAQMappingESSourceXML.cc @@ -28,6 +28,7 @@ #include "CondFormats/PPSObjects/interface/TotemDAQMapping.h" #include "CondFormats/PPSObjects/interface/TotemAnalysisMask.h" #include "CondFormats/PPSObjects/interface/TotemFramePosition.h" +#include "Utilities/Xerces/interface/Xerces.h" #include "Utilities/Xerces/interface/XercesStrUtils.h" #include @@ -322,12 +323,7 @@ TotemDAQMappingESSourceXML::produce(const TotemReadoutRcd &) { auto mask = std::make_unique(); // initialize Xerces - try { - XMLPlatformUtils::Initialize(); - } catch (const XMLException &toCatch) { - throw cms::Exception("TotemDAQMappingESSourceXML") - << "An XMLException caught with message: " << cms::xerces::toString(toCatch.getMessage()) << ".\n"; - } + cms::concurrency::xercesInitialize(); // load mapping files for (const auto &fn : configuration[currentBlock].mappingFileNames) @@ -338,7 +334,7 @@ TotemDAQMappingESSourceXML::produce(const TotemReadoutRcd &) { ParseXML(pMask, CompleteFileName(fn), mapping, mask); // release Xerces - XMLPlatformUtils::Terminate(); + cms::concurrency::xercesTerminate(); // commit the products return edm::es::products(std::move(mapping), std::move(mask)); diff --git a/CalibPPS/ESProducers/python/ppsPixelTopologyESSourceRun2_cfi.py b/CalibPPS/ESProducers/python/ppsPixelTopologyESSourceRun2_cfi.py new file mode 100644 index 0000000000000..bf536433c2961 --- /dev/null +++ b/CalibPPS/ESProducers/python/ppsPixelTopologyESSourceRun2_cfi.py @@ -0,0 +1,17 @@ +import FWCore.ParameterSet.Config as cms + +ppsPixelTopologyESSource = cms.ESSource('PPSPixelTopologyESSource', + RunType = cms.string('Run2'), + PitchSimY = cms.double(0.15), + PitchSimX = cms.double(0.1), + thickness = cms.double(0.23), + noOfPixelSimX = cms.int32(160), + noOfPixelSimY = cms.int32(156), + noOfPixels = cms.int32(24960), + simXWidth = cms.double(16.6), + simYWidth = cms.double(24.4), + deadEdgeWidth = cms.double(0.2), + activeEdgeSigma = cms.double(0.02), + physActiveEdgeDist = cms.double(0.15), + appendToDataLabel = cms.string('') +) diff --git a/CalibPPS/ESProducers/python/ppsTopology_cff.py b/CalibPPS/ESProducers/python/ppsTopology_cff.py new file mode 100644 index 0000000000000..6e63e2b4a7a5d --- /dev/null +++ b/CalibPPS/ESProducers/python/ppsTopology_cff.py @@ -0,0 +1,9 @@ +import FWCore.ParameterSet.Config as cms + +from CalibPPS.ESProducers.ppsPixelTopologyESSource_cfi import ppsPixelTopologyESSource + +from Configuration.Eras.Modifier_ctpps_2016_cff import ctpps_2016 +from Configuration.Eras.Modifier_ctpps_2017_cff import ctpps_2017 +from Configuration.Eras.Modifier_ctpps_2018_cff import ctpps_2018 + +(ctpps_2016 | ctpps_2017 | ctpps_2018).toModify(ppsPixelTopologyESSource, RunType = cms.string('Run2'), simYWidth = cms.double(24.4) ) diff --git a/CalibPPS/ESProducers/src/CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon.cc b/CalibPPS/ESProducers/src/CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon.cc new file mode 100644 index 0000000000000..7471339c4f6d9 --- /dev/null +++ b/CalibPPS/ESProducers/src/CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon.cc @@ -0,0 +1,146 @@ +/**************************************************************************** + * Authors: + * Jan Kaspar (jan.kaspar@gmail.com) + * Helena Malbouisson + * Clemencia Mora Herrera + * Christopher Misan + ****************************************************************************/ + +#include "CalibPPS/ESProducers/interface/CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "CondFormats/PPSObjects/interface/CTPPSRPAlignmentCorrectionsMethods.h" + +#include +#include + +//---------------------------------------------------------------------------------------------------- + +CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon::CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon( + const edm::ParameterSet &pSet) + : verbosity(pSet.getUntrackedParameter("verbosity", 0)) { + std::vector measuredFiles; + for (const auto &f : pSet.getParameter >("MeasuredFiles")) + measuredFiles.push_back(edm::FileInPath(f).fullPath()); + PrepareSequence("Measured", acsMeasured, measuredFiles); + + std::vector realFiles; + for (const auto &f : pSet.getParameter >("RealFiles")) + realFiles.push_back(edm::FileInPath(f).fullPath()); + PrepareSequence("Real", acsReal, realFiles); + + std::vector misalignedFiles; + for (const auto &f : pSet.getParameter >("MisalignedFiles")) + misalignedFiles.push_back(edm::FileInPath(f).fullPath()); + PrepareSequence("Misaligned", acsMisaligned, misalignedFiles); +} + +//---------------------------------------------------------------------------------------------------- + +CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon::~CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon() {} + +//---------------------------------------------------------------------------------------------------- + +CTPPSRPAlignmentCorrectionsDataSequence CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon::Merge( + const std::vector &seqs) const { + // find interval boundaries + std::map > > bounds; + + for (const auto &seq : seqs) { + for (const auto &p : seq) { + const edm::ValidityInterval &iov = p.first; + const CTPPSRPAlignmentCorrectionsData *corr = &p.second; + + const edm::EventID &event_first = iov.first().eventID(); + bounds[event_first].emplace_back(std::pair(true, corr)); + + const edm::EventID &event_after = nextLS(iov.last().eventID()); + bounds[event_after].emplace_back(std::pair(false, corr)); + } + } + + // build correction sums per interval + std::set accumulator; + CTPPSRPAlignmentCorrectionsDataSequence result; + for (std::map > >::const_iterator + tit = bounds.begin(); + tit != bounds.end(); + ++tit) { + for (const auto &cit : tit->second) { + bool add = cit.first; + const CTPPSRPAlignmentCorrectionsData *corr = cit.second; + + if (add) + accumulator.insert(corr); + else + accumulator.erase(corr); + } + + auto tit_next = tit; + tit_next++; + if (tit_next == bounds.end()) + break; + + const edm::EventID &event_first = tit->first; + const edm::EventID &event_last = previousLS(tit_next->first); + + if (verbosity) { + edm::LogInfo("PPS") << " first=" + << CTPPSRPAlignmentCorrectionsMethods::iovValueToString(edm::IOVSyncValue(event_first)) + << ", last=" + << CTPPSRPAlignmentCorrectionsMethods::iovValueToString(edm::IOVSyncValue(event_last)) + << ": alignment blocks " << accumulator.size(); + } + + CTPPSRPAlignmentCorrectionsData corr_sum; + for (auto sit : accumulator) + corr_sum.addCorrections(*sit); + + result.insert(edm::ValidityInterval(edm::IOVSyncValue(event_first), edm::IOVSyncValue(event_last)), corr_sum); + } + + return result; +} + +//---------------------------------------------------------------------------------------------------- + +void CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon::PrepareSequence(const std::string &label, + CTPPSRPAlignmentCorrectionsDataSequence &seq, + const std::vector &files) const { + if (verbosity) + edm::LogInfo("PPS") << "PrepareSequence(" << label << ")"; + + std::vector sequences; + sequences.reserve(files.size()); + for (const auto &file : files) + sequences.emplace_back(CTPPSRPAlignmentCorrectionsMethods::loadFromXML(file)); + + seq = Merge(sequences); +} + +//---------------------------------------------------------------------------------------------------- + +edm::EventID CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon::previousLS(const edm::EventID &src) { + if (src.run() == edm::EventID::maxRunNumber() && src.luminosityBlock() == edm::EventID::maxLuminosityBlockNumber()) + return src; + + if (src.luminosityBlock() == 0) + return edm::EventID(src.run() - 1, edm::EventID::maxLuminosityBlockNumber(), src.event()); + + return edm::EventID(src.run(), src.luminosityBlock() - 1, src.event()); +} + +//---------------------------------------------------------------------------------------------------- + +edm::EventID CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon::nextLS(const edm::EventID &src) { + if (src.luminosityBlock() == edm::EventID::maxLuminosityBlockNumber()) { + if (src.run() == edm::EventID::maxRunNumber()) + return src; + + return edm::EventID(src.run() + 1, 0, src.event()); + } + + return edm::EventID(src.run(), src.luminosityBlock() + 1, src.event()); +} \ No newline at end of file diff --git a/CalibPPS/ESProducers/test/ppsTimingCalibrationAnalyzer_cfg.py b/CalibPPS/ESProducers/test/ppsTimingCalibrationAnalyzer_cfg.py index 4e49adc4cc3d4..e08377647e959 100644 --- a/CalibPPS/ESProducers/test/ppsTimingCalibrationAnalyzer_cfg.py +++ b/CalibPPS/ESProducers/test/ppsTimingCalibrationAnalyzer_cfg.py @@ -3,10 +3,12 @@ process = cms.Process('test') # minimum logging -process.MessageLogger = cms.Service('MessageLogger', - statistics = cms.untracked.vstring(), - destinations = cms.untracked.vstring('cout'), +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') ) ) diff --git a/CalibPPS/ESProducers/test/print_alignment_info_DB_cfg.py b/CalibPPS/ESProducers/test/print_alignment_info_DB_cfg.py index 8a3f7ed7887d5..56948aa78d79f 100644 --- a/CalibPPS/ESProducers/test/print_alignment_info_DB_cfg.py +++ b/CalibPPS/ESProducers/test/print_alignment_info_DB_cfg.py @@ -10,9 +10,11 @@ # minimum of logs process.MessageLogger = cms.Service("MessageLogger", - statistics = cms.untracked.vstring(), - destinations = cms.untracked.vstring('cout'), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') ) ) diff --git a/CalibPPS/ESProducers/test/print_alignment_info_XML_cfg.py b/CalibPPS/ESProducers/test/print_alignment_info_XML_cfg.py index 554d1b81542a9..655a087e621fd 100644 --- a/CalibPPS/ESProducers/test/print_alignment_info_XML_cfg.py +++ b/CalibPPS/ESProducers/test/print_alignment_info_XML_cfg.py @@ -3,9 +3,11 @@ # minimum of logs process.MessageLogger = cms.Service("MessageLogger", - statistics = cms.untracked.vstring(), - destinations = cms.untracked.vstring('cout'), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') ) ) diff --git a/CalibPPS/ESProducers/test/test_totemDAQMappingESSourceXML_cfg.py b/CalibPPS/ESProducers/test/test_totemDAQMappingESSourceXML_cfg.py index 2ae99c3cadf9c..4fbff0fd2ecb2 100644 --- a/CalibPPS/ESProducers/test/test_totemDAQMappingESSourceXML_cfg.py +++ b/CalibPPS/ESProducers/test/test_totemDAQMappingESSourceXML_cfg.py @@ -4,11 +4,9 @@ # minimum of logs process.MessageLogger = cms.Service("MessageLogger", - statistics = cms.untracked.vstring(), - destinations = cms.untracked.vstring('cerr'), - cerr = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING') - ) + cerr = cms.untracked.PSet( + threshold = cms.untracked.string('WARNING') + ) ) # raw data source diff --git a/CalibTracker/Configuration/test/testConditionAccess_sqlite_cfg.py b/CalibTracker/Configuration/test/testConditionAccess_sqlite_cfg.py index 94895ab2a9eff..ba6e334972df1 100644 --- a/CalibTracker/Configuration/test/testConditionAccess_sqlite_cfg.py +++ b/CalibTracker/Configuration/test/testConditionAccess_sqlite_cfg.py @@ -9,14 +9,21 @@ process = cms.Process("Test") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), - testConditionAccess = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('testConditionAccess.log') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + testConditionAccess = cms.untracked.PSet( + + ) + ), + testConditionAccess = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/Records/interface/SiPixelGainCalibrationForHLTGPURcd.h b/CalibTracker/Records/interface/SiPixelGainCalibrationForHLTGPURcd.h new file mode 100644 index 0000000000000..ad8f0a4032588 --- /dev/null +++ b/CalibTracker/Records/interface/SiPixelGainCalibrationForHLTGPURcd.h @@ -0,0 +1,14 @@ +#ifndef CalibTracker_Records_SiPixelGainCalibrationForHLTGPURcd_h +#define CalibTracker_Records_SiPixelGainCalibrationForHLTGPURcd_h + +#include "CondFormats/DataRecord/interface/SiPixelGainCalibrationForHLTRcd.h" +#include "FWCore/Framework/interface/DependentRecordImplementation.h" +#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" + +class SiPixelGainCalibrationForHLTGPURcd + : public edm::eventsetup::DependentRecordImplementation< + SiPixelGainCalibrationForHLTGPURcd, + edm::mpl::Vector> {}; + +#endif // CalibTracker_Records_SiPixelGainCalibrationForHLTGPURcd_h diff --git a/CalibTracker/Records/src/SiPixelGainCalibrationForHLTGPURcd.cc b/CalibTracker/Records/src/SiPixelGainCalibrationForHLTGPURcd.cc new file mode 100644 index 0000000000000..e6020eca80b1f --- /dev/null +++ b/CalibTracker/Records/src/SiPixelGainCalibrationForHLTGPURcd.cc @@ -0,0 +1,5 @@ +#include "CalibTracker/Records/interface/SiPixelGainCalibrationForHLTGPURcd.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" +#include "FWCore/Utilities/interface/typelookup.h" + +EVENTSETUP_RECORD_REG(SiPixelGainCalibrationForHLTGPURcd); diff --git a/CalibTracker/SiPixelConnectivity/interface/SiPixelFedCablingMapBuilder.h b/CalibTracker/SiPixelConnectivity/interface/SiPixelFedCablingMapBuilder.h index 6415a2c9b22fa..a13080800d6ab 100644 --- a/CalibTracker/SiPixelConnectivity/interface/SiPixelFedCablingMapBuilder.h +++ b/CalibTracker/SiPixelConnectivity/interface/SiPixelFedCablingMapBuilder.h @@ -1,9 +1,12 @@ #ifndef SiPixelFedCablingMapBuilder_H #define SiPixelFedCablingMapBuilder_H -#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" #include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingTree.h" -#include "DataFormats/DetId/interface/DetId.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include #include @@ -14,7 +17,7 @@ class PixelGeomDetUnit; class SiPixelFedCablingMapBuilder { public: //SiPixelFedCablingMapBuilder(const std::string & associatorName); - SiPixelFedCablingMapBuilder(const std::string fileName, const bool phase1 = false); + SiPixelFedCablingMapBuilder(edm::ConsumesCollector&& iCC, const std::string fileName, const bool phase1 = false); SiPixelFedCablingTree* produce(const edm::EventSetup& setup); private: @@ -27,6 +30,9 @@ class SiPixelFedCablingMapBuilder { std::string fileName_; std::string myprint(const PixelGeomDetUnit* pxUnit); bool phase1_; + + edm::ESGetToken trackerTopoToken_; + edm::ESGetToken trackerGeomToken_; }; #endif diff --git a/CalibTracker/SiPixelConnectivity/src/SiPixelFedCablingMapBuilder.cc b/CalibTracker/SiPixelConnectivity/src/SiPixelFedCablingMapBuilder.cc index 0736e2082cca6..d4b40d8c299fb 100644 --- a/CalibTracker/SiPixelConnectivity/src/SiPixelFedCablingMapBuilder.cc +++ b/CalibTracker/SiPixelConnectivity/src/SiPixelFedCablingMapBuilder.cc @@ -1,11 +1,8 @@ #include #include "CalibTracker/SiPixelConnectivity/interface/SiPixelFedCablingMapBuilder.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" #include "DataFormats/FEDRawData/interface/FEDNumbering.h" -#include "FWCore/Framework/interface/ESHandle.h" #include #include "DataFormats/TrackerCommon/interface/PixelEndcapName.h" @@ -30,16 +27,19 @@ using namespace std; using namespace sipixelobjects; -SiPixelFedCablingMapBuilder::SiPixelFedCablingMapBuilder(const string fileName, +SiPixelFedCablingMapBuilder::SiPixelFedCablingMapBuilder(edm::ConsumesCollector&& iCC, + const string fileName, const bool phase1) : fileName_(fileName) //, phase1_(phase1) not used anymore -{} +{ + trackerTopoToken_ = iCC.esConsumes(); + trackerGeomToken_ = iCC.esConsumes(); +} SiPixelFedCablingTree* SiPixelFedCablingMapBuilder::produce(const edm::EventSetup& setup) { // Access geometry edm::LogInfo("read tracker geometry..."); - edm::ESHandle pDD; - setup.get().get(pDD); + edm::ESHandle pDD = setup.getHandle(trackerGeomToken_); edm::LogInfo("tracker geometry read") << "There are: " << pDD->dets().size() << " detectors"; // Test new TrackerGeometry features @@ -86,8 +86,7 @@ SiPixelFedCablingTree* SiPixelFedCablingMapBuilder::produce(const edm::EventSetu edm::LogInfo(" version ") << version << endl; // Access topology - edm::ESHandle tTopo; - setup.get().get(tTopo); + edm::ESHandle tTopo = setup.getHandle(trackerTopoToken_); const TrackerTopology* tt = tTopo.product(); typedef TrackerGeometry::DetContainer::const_iterator ITG; diff --git a/CalibTracker/SiPixelConnectivity/test/SiPixelFedCablingMapWriter.cc b/CalibTracker/SiPixelConnectivity/test/SiPixelFedCablingMapWriter.cc index 81e2e5877ea86..2211cf59282cb 100644 --- a/CalibTracker/SiPixelConnectivity/test/SiPixelFedCablingMapWriter.cc +++ b/CalibTracker/SiPixelConnectivity/test/SiPixelFedCablingMapWriter.cc @@ -61,7 +61,7 @@ void SiPixelFedCablingMapWriter::analyze(const edm::Event& iEvent, const edm::Ev //std::cout << "-------HERE-----------" << endl; //cabling = SiPixelFedCablingMapBuilder(pixelToFedAssociator_).produce(iSetup); //cabling = SiPixelFedCablingMapBuilder(fileName_,phase1_).produce(iSetup); - cabling = SiPixelFedCablingMapBuilder(fileName_).produce(iSetup); + cabling = SiPixelFedCablingMapBuilder(consumesCollector(), fileName_).produce(iSetup); //std::cout << "-------Print Map ----------- DOES NOT WORK for phase1 " << endl; edm::LogInfo("PRINTING MAP (Does not work for phase1: ") << cabling->print(3); } diff --git a/CalibTracker/SiPixelConnectivity/test/SiPixelFedCablingMapWriter_cfg.py b/CalibTracker/SiPixelConnectivity/test/SiPixelFedCablingMapWriter_cfg.py index eafb2be175997..2720fb38a2c02 100644 --- a/CalibTracker/SiPixelConnectivity/test/SiPixelFedCablingMapWriter_cfg.py +++ b/CalibTracker/SiPixelConnectivity/test/SiPixelFedCablingMapWriter_cfg.py @@ -34,9 +34,15 @@ #process.CondDBCommon.connect = cms.string("sqlite_file:cabling.db") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('*'), - destinations = cms.untracked.vstring('out'), - out = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG')) + files = cms.untracked.PSet( + out = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG') + ) + ) ) process.load("CalibTracker.SiPixelConnectivity.PixelToLNKAssociateFromAsciiESProducer_cfi") diff --git a/CalibTracker/SiPixelConnectivity/test/SiPixelFedCablingMapWriter_phase1.py b/CalibTracker/SiPixelConnectivity/test/SiPixelFedCablingMapWriter_phase1.py index 0087828c21398..a3a6b3f5c3522 100644 --- a/CalibTracker/SiPixelConnectivity/test/SiPixelFedCablingMapWriter_phase1.py +++ b/CalibTracker/SiPixelConnectivity/test/SiPixelFedCablingMapWriter_phase1.py @@ -35,10 +35,15 @@ ) process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('*'), - destinations = cms.untracked.vstring('log'), - #log = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG')) - log = cms.untracked.PSet( threshold = cms.untracked.string('WARNING')) + files = cms.untracked.PSet( + log = cms.untracked.PSet( + threshold = cms.untracked.string('WARNING') + ) + ) ) #process.load("CalibTracker.SiPixelConnectivity.PixelToLNKAssociateFromAsciiESProducer_cfi") diff --git a/CalibTracker/SiPixelConnectivity/test/read_cfg.py b/CalibTracker/SiPixelConnectivity/test/read_cfg.py index d4d64e828b165..a29ca534d7b8e 100644 --- a/CalibTracker/SiPixelConnectivity/test/read_cfg.py +++ b/CalibTracker/SiPixelConnectivity/test/read_cfg.py @@ -10,10 +10,13 @@ process.GlobalTag.globaltag = autoCond['run2_design'] process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('DEBUG') - ), - destinations = cms.untracked.vstring('cout') + ) ) diff --git a/CalibTracker/SiPixelESProducers/BuildFile.xml b/CalibTracker/SiPixelESProducers/BuildFile.xml index 6efeef5ca0d1c..db1e6be8279dc 100644 --- a/CalibTracker/SiPixelESProducers/BuildFile.xml +++ b/CalibTracker/SiPixelESProducers/BuildFile.xml @@ -1,10 +1,12 @@ - - - + + + + + diff --git a/CalibTracker/SiPixelESProducers/interface/SiPixelDetInfoFileWriter.h b/CalibTracker/SiPixelESProducers/interface/SiPixelDetInfoFileWriter.h index bc484a9238af4..fb44a80d783ea 100644 --- a/CalibTracker/SiPixelESProducers/interface/SiPixelDetInfoFileWriter.h +++ b/CalibTracker/SiPixelESProducers/interface/SiPixelDetInfoFileWriter.h @@ -19,6 +19,8 @@ // #include "FWCore/Framework/interface/EDAnalyzer.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include #include #include @@ -34,6 +36,7 @@ class SiPixelDetInfoFileWriter : public edm::EDAnalyzer { void analyze(const edm::Event &, const edm::EventSetup &) override; private: + edm::ESGetToken trackerGeomTokenBeginRun_; std::ofstream outputFile_; std::string filePath_; }; diff --git a/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTGPU.h b/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTGPU.h new file mode 100644 index 0000000000000..aea0f4d8b0c63 --- /dev/null +++ b/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTGPU.h @@ -0,0 +1,32 @@ +#ifndef CalibTracker_SiPixelESProducers_interface_SiPixelGainCalibrationForHLTGPU_h +#define CalibTracker_SiPixelESProducers_interface_SiPixelGainCalibrationForHLTGPU_h + +#include "CondFormats/SiPixelObjects/interface/SiPixelGainCalibrationForHLT.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" + +class SiPixelGainCalibrationForHLT; +class SiPixelGainForHLTonGPU; +struct SiPixelGainForHLTonGPU_DecodingStructure; +class TrackerGeometry; + +class SiPixelGainCalibrationForHLTGPU { +public: + explicit SiPixelGainCalibrationForHLTGPU(const SiPixelGainCalibrationForHLT &gains, const TrackerGeometry &geom); + ~SiPixelGainCalibrationForHLTGPU(); + + const SiPixelGainForHLTonGPU *getGPUProductAsync(cudaStream_t cudaStream) const; + const SiPixelGainForHLTonGPU *cpuProduct() const { return gainForHLTonHost_; } + const SiPixelGainCalibrationForHLT *originalProduct() { return gains_; } + +private: + const SiPixelGainCalibrationForHLT *gains_ = nullptr; + SiPixelGainForHLTonGPU *gainForHLTonHost_ = nullptr; + struct GPUData { + ~GPUData(); + SiPixelGainForHLTonGPU *gainForHLTonGPU = nullptr; + SiPixelGainForHLTonGPU_DecodingStructure *gainDataOnGPU = nullptr; + }; + cms::cuda::ESProduct gpuData_; +}; + +#endif // CalibTracker_SiPixelESProducers_interface_SiPixelGainCalibrationForHLTGPU_h diff --git a/CalibTracker/SiPixelESProducers/interface/SiPixelROCsStatusAndMappingWrapper.h b/CalibTracker/SiPixelESProducers/interface/SiPixelROCsStatusAndMappingWrapper.h new file mode 100644 index 0000000000000..f7555a75d9bec --- /dev/null +++ b/CalibTracker/SiPixelESProducers/interface/SiPixelROCsStatusAndMappingWrapper.h @@ -0,0 +1,55 @@ +#ifndef CalibTracker_SiPixelESProducers_interface_SiPixelROCsStatusAndMappingWrapper_h +#define CalibTracker_SiPixelESProducers_interface_SiPixelROCsStatusAndMappingWrapper_h + +#include + +#include + +#include "CondFormats/SiPixelObjects/interface/SiPixelROCsStatusAndMapping.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +class SiPixelFedCablingMap; +class TrackerGeometry; +class SiPixelQuality; + +class SiPixelROCsStatusAndMappingWrapper { +public: + SiPixelROCsStatusAndMappingWrapper(SiPixelFedCablingMap const &cablingMap, + TrackerGeometry const &trackerGeom, + SiPixelQuality const *badPixelInfo); + ~SiPixelROCsStatusAndMappingWrapper(); + + bool hasQuality() const { return hasQuality_; } + + // returns pointer to GPU memory + const SiPixelROCsStatusAndMapping *getGPUProductAsync(cudaStream_t cudaStream) const; + + // returns pointer to GPU memory + const unsigned char *getModToUnpAllAsync(cudaStream_t cudaStream) const; + cms::cuda::device::unique_ptr getModToUnpRegionalAsync(std::set const &modules, + cudaStream_t cudaStream) const; + +private: + const SiPixelFedCablingMap *cablingMap_; + std::vector> modToUnpDefault; + unsigned int size; + bool hasQuality_; + + SiPixelROCsStatusAndMapping *cablingMapHost = nullptr; // pointer to struct in CPU + + struct GPUData { + ~GPUData(); + SiPixelROCsStatusAndMapping *cablingMapDevice = nullptr; // pointer to struct in GPU + }; + cms::cuda::ESProduct gpuData_; + + struct ModulesToUnpack { + ~ModulesToUnpack(); + unsigned char *modToUnpDefault = nullptr; // pointer to GPU + }; + cms::cuda::ESProduct modToUnp_; +}; + +#endif // CalibTracker_SiPixelESProducers_interface_SiPixelROCsStatusAndMappingWrapper_h diff --git a/CalibTracker/SiPixelESProducers/plugins/BuildFile.xml b/CalibTracker/SiPixelESProducers/plugins/BuildFile.xml index 5380c9d7d346b..a7c2406fcdba1 100644 --- a/CalibTracker/SiPixelESProducers/plugins/BuildFile.xml +++ b/CalibTracker/SiPixelESProducers/plugins/BuildFile.xml @@ -1,13 +1,15 @@ - - + + + + + - - + diff --git a/CalibTracker/SiPixelESProducers/plugins/SiPixelDetInfoFileWriter.cc b/CalibTracker/SiPixelESProducers/plugins/SiPixelDetInfoFileWriter.cc index 5cd3ccbb028b7..1955a0f09a263 100644 --- a/CalibTracker/SiPixelESProducers/plugins/SiPixelDetInfoFileWriter.cc +++ b/CalibTracker/SiPixelESProducers/plugins/SiPixelDetInfoFileWriter.cc @@ -6,11 +6,8 @@ #include "CalibTracker/SiPixelESProducers/interface/SiPixelDetInfoFileWriter.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonDetUnit/interface/GeomDet.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" @@ -21,6 +18,7 @@ using namespace std; SiPixelDetInfoFileWriter::SiPixelDetInfoFileWriter(const edm::ParameterSet &iConfig) { edm::LogInfo("SiPixelDetInfoFileWriter::SiPixelDetInfoFileWriter"); + trackerGeomTokenBeginRun_ = esConsumes(); filePath_ = iConfig.getUntrackedParameter("FilePath", std::string("SiPixelDetInfo.dat")); } @@ -32,9 +30,7 @@ void SiPixelDetInfoFileWriter::beginRun(const edm::Run &run, const edm::EventSet outputFile_.open(filePath_.c_str()); if (outputFile_.is_open()) { - edm::ESHandle pDD; - - iSetup.get().get(pDD); + edm::ESHandle pDD = iSetup.getHandle(trackerGeomTokenBeginRun_); edm::LogInfo("SiPixelDetInfoFileWriter::beginJob - got geometry ") << std::endl; edm::LogInfo("SiPixelDetInfoFileWriter") << " There are " << pDD->detUnits().size() << " detectors" << std::endl; diff --git a/CalibTracker/SiPixelESProducers/plugins/SiPixelGainCalibrationForHLTGPUESProducer.cc b/CalibTracker/SiPixelESProducers/plugins/SiPixelGainCalibrationForHLTGPUESProducer.cc new file mode 100644 index 0000000000000..37055ea3e00ca --- /dev/null +++ b/CalibTracker/SiPixelESProducers/plugins/SiPixelGainCalibrationForHLTGPUESProducer.cc @@ -0,0 +1,49 @@ +#include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTGPU.h" +#include "CalibTracker/Records/interface/SiPixelGainCalibrationForHLTGPURcd.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelGainCalibrationForHLT.h" +#include "CondFormats/DataRecord/interface/SiPixelGainCalibrationForHLTRcd.h" +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ModuleFactory.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" + +#include + +class SiPixelGainCalibrationForHLTGPUESProducer : public edm::ESProducer { +public: + explicit SiPixelGainCalibrationForHLTGPUESProducer(const edm::ParameterSet& iConfig); + std::unique_ptr produce(const SiPixelGainCalibrationForHLTGPURcd& iRecord); + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + edm::ESGetToken gainsToken_; + edm::ESGetToken geometryToken_; +}; + +SiPixelGainCalibrationForHLTGPUESProducer::SiPixelGainCalibrationForHLTGPUESProducer(const edm::ParameterSet& iConfig) { + auto cc = setWhatProduced(this); + gainsToken_ = cc.consumes(); + geometryToken_ = cc.consumes(); +} + +void SiPixelGainCalibrationForHLTGPUESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + descriptions.add("siPixelGainCalibrationForHLTGPU", desc); +} + +std::unique_ptr SiPixelGainCalibrationForHLTGPUESProducer::produce( + const SiPixelGainCalibrationForHLTGPURcd& iRecord) { + auto gains = iRecord.getHandle(gainsToken_); + auto geom = iRecord.getHandle(geometryToken_); + return std::make_unique(*gains, *geom); +} + +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +DEFINE_FWK_EVENTSETUP_MODULE(SiPixelGainCalibrationForHLTGPUESProducer); diff --git a/CalibTracker/SiPixelESProducers/plugins/SiPixelROCsStatusAndMappingWrapperESProducer.cc b/CalibTracker/SiPixelESProducers/plugins/SiPixelROCsStatusAndMappingWrapperESProducer.cc new file mode 100644 index 0000000000000..9c37860ca9ffe --- /dev/null +++ b/CalibTracker/SiPixelESProducers/plugins/SiPixelROCsStatusAndMappingWrapperESProducer.cc @@ -0,0 +1,68 @@ +#include + +#include "CalibTracker/SiPixelESProducers/interface/SiPixelROCsStatusAndMappingWrapper.h" +#include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h" +#include "CondFormats/DataRecord/interface/SiPixelQualityRcd.h" +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Framework/interface/ESTransientHandle.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ModuleFactory.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "RecoTracker/Record/interface/CkfComponentsRecord.h" // TODO: eventually use something more limited + +class SiPixelROCsStatusAndMappingWrapperESProducer : public edm::ESProducer { +public: + explicit SiPixelROCsStatusAndMappingWrapperESProducer(const edm::ParameterSet& iConfig); + std::unique_ptr produce(const CkfComponentsRecord& iRecord); + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + edm::ESGetToken cablingMapToken_; + edm::ESGetToken qualityToken_; + edm::ESGetToken geometryToken_; + bool useQuality_; +}; + +SiPixelROCsStatusAndMappingWrapperESProducer::SiPixelROCsStatusAndMappingWrapperESProducer( + const edm::ParameterSet& iConfig) + : useQuality_(iConfig.getParameter("UseQualityInfo")) { + auto const& component = iConfig.getParameter("ComponentName"); + auto cc = setWhatProduced(this, component); + cablingMapToken_ = cc.consumes(edm::ESInputTag{"", iConfig.getParameter("CablingMapLabel")}); + if (useQuality_) { + qualityToken_ = cc.consumes(); + } + geometryToken_ = cc.consumes(); +} + +void SiPixelROCsStatusAndMappingWrapperESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("ComponentName", ""); + desc.add("CablingMapLabel", "")->setComment("CablingMap label"); + desc.add("UseQualityInfo", false); + descriptions.addWithDefaultLabel(desc); +} + +std::unique_ptr SiPixelROCsStatusAndMappingWrapperESProducer::produce( + const CkfComponentsRecord& iRecord) { + auto cablingMap = iRecord.getTransientHandle(cablingMapToken_); + + const SiPixelQuality* quality = nullptr; + if (useQuality_) { + auto qualityInfo = iRecord.getTransientHandle(qualityToken_); + quality = qualityInfo.product(); + } + + auto geom = iRecord.getTransientHandle(geometryToken_); + + return std::make_unique(*cablingMap, *geom, quality); +} + +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +DEFINE_FWK_EVENTSETUP_MODULE(SiPixelROCsStatusAndMappingWrapperESProducer); diff --git a/CalibTracker/SiPixelESProducers/src/ES_SiPixelGainCalibrationForHLTGPU.cc b/CalibTracker/SiPixelESProducers/src/ES_SiPixelGainCalibrationForHLTGPU.cc new file mode 100644 index 0000000000000..80932fb468f71 --- /dev/null +++ b/CalibTracker/SiPixelESProducers/src/ES_SiPixelGainCalibrationForHLTGPU.cc @@ -0,0 +1,4 @@ +#include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTGPU.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(SiPixelGainCalibrationForHLTGPU); diff --git a/CalibTracker/SiPixelESProducers/src/ES_SiPixelROCsStatusAndMappingWrapper.cc b/CalibTracker/SiPixelESProducers/src/ES_SiPixelROCsStatusAndMappingWrapper.cc new file mode 100644 index 0000000000000..45767102b5958 --- /dev/null +++ b/CalibTracker/SiPixelESProducers/src/ES_SiPixelROCsStatusAndMappingWrapper.cc @@ -0,0 +1,4 @@ +#include "CalibTracker/SiPixelESProducers/interface/SiPixelROCsStatusAndMappingWrapper.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(SiPixelROCsStatusAndMappingWrapper); diff --git a/CalibTracker/SiPixelESProducers/src/SiPixelGainCalibrationForHLTGPU.cc b/CalibTracker/SiPixelESProducers/src/SiPixelGainCalibrationForHLTGPU.cc new file mode 100644 index 0000000000000..66b8d9594353b --- /dev/null +++ b/CalibTracker/SiPixelESProducers/src/SiPixelGainCalibrationForHLTGPU.cc @@ -0,0 +1,101 @@ +#include + +#include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTGPU.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelGainCalibrationForHLT.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelGainForHLTonGPU.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "Geometry/CommonDetUnit/interface/GeomDetType.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +SiPixelGainCalibrationForHLTGPU::SiPixelGainCalibrationForHLTGPU(const SiPixelGainCalibrationForHLT& gains, + const TrackerGeometry& geom) + : gains_(&gains) { + // bizzarre logic (looking for fist strip-det) don't ask + auto const& dus = geom.detUnits(); + unsigned int n_detectors = dus.size(); + for (unsigned int i = 1; i < 7; ++i) { + const auto offset = geom.offsetDU(GeomDetEnumerators::tkDetEnum[i]); + if (offset != dus.size() && dus[offset]->type().isTrackerStrip()) { + if (n_detectors > offset) + n_detectors = offset; + } + } + + LogDebug("SiPixelGainCalibrationForHLTGPU") + << "caching calibs for " << n_detectors << " pixel detectors of size " << gains.data().size() << '\n' + << "sizes " << sizeof(char) << ' ' << sizeof(uint8_t) << ' ' << sizeof(SiPixelGainForHLTonGPU::DecodingStructure); + + cudaCheck(cudaMallocHost((void**)&gainForHLTonHost_, sizeof(SiPixelGainForHLTonGPU))); + gainForHLTonHost_->v_pedestals_ = + (SiPixelGainForHLTonGPU_DecodingStructure*)this->gains_->data().data(); // so it can be used on CPU as well... + + // do not read back from the (possibly write-combined) memory buffer + auto minPed = gains.getPedLow(); + auto maxPed = gains.getPedHigh(); + auto minGain = gains.getGainLow(); + auto maxGain = gains.getGainHigh(); + auto nBinsToUseForEncoding = 253; + + // we will simplify later (not everything is needed....) + gainForHLTonHost_->minPed_ = minPed; + gainForHLTonHost_->maxPed_ = maxPed; + gainForHLTonHost_->minGain_ = minGain; + gainForHLTonHost_->maxGain_ = maxGain; + + gainForHLTonHost_->numberOfRowsAveragedOver_ = 80; + gainForHLTonHost_->nBinsToUseForEncoding_ = nBinsToUseForEncoding; + gainForHLTonHost_->deadFlag_ = 255; + gainForHLTonHost_->noisyFlag_ = 254; + + gainForHLTonHost_->pedPrecision_ = static_cast(maxPed - minPed) / nBinsToUseForEncoding; + gainForHLTonHost_->gainPrecision_ = static_cast(maxGain - minGain) / nBinsToUseForEncoding; + + LogDebug("SiPixelGainCalibrationForHLTGPU") + << "precisions g " << gainForHLTonHost_->pedPrecision_ << ' ' << gainForHLTonHost_->gainPrecision_; + + // fill the index map + auto const& ind = gains.getIndexes(); + LogDebug("SiPixelGainCalibrationForHLTGPU") << ind.size() << " " << n_detectors; + + for (auto i = 0U; i < n_detectors; ++i) { + auto p = std::lower_bound( + ind.begin(), ind.end(), dus[i]->geographicalId().rawId(), SiPixelGainCalibrationForHLT::StrictWeakOrdering()); + assert(p != ind.end() && p->detid == dus[i]->geographicalId()); + assert(p->iend <= gains.data().size()); + assert(p->iend >= p->ibegin); + assert(0 == p->ibegin % 2); + assert(0 == p->iend % 2); + assert(p->ibegin != p->iend); + assert(p->ncols > 0); + gainForHLTonHost_->rangeAndCols_[i] = std::make_pair(SiPixelGainForHLTonGPU::Range(p->ibegin, p->iend), p->ncols); + if (ind[i].detid != dus[i]->geographicalId()) + LogDebug("SiPixelGainCalibrationForHLTGPU") << ind[i].detid << "!=" << dus[i]->geographicalId(); + } +} + +SiPixelGainCalibrationForHLTGPU::~SiPixelGainCalibrationForHLTGPU() { cudaCheck(cudaFreeHost(gainForHLTonHost_)); } + +SiPixelGainCalibrationForHLTGPU::GPUData::~GPUData() { + cudaCheck(cudaFree(gainForHLTonGPU)); + cudaCheck(cudaFree(gainDataOnGPU)); +} + +const SiPixelGainForHLTonGPU* SiPixelGainCalibrationForHLTGPU::getGPUProductAsync(cudaStream_t cudaStream) const { + const auto& data = gpuData_.dataForCurrentDeviceAsync(cudaStream, [this](GPUData& data, cudaStream_t stream) { + cudaCheck(cudaMalloc((void**)&data.gainForHLTonGPU, sizeof(SiPixelGainForHLTonGPU))); + cudaCheck(cudaMalloc((void**)&data.gainDataOnGPU, this->gains_->data().size())); + // gains.data().data() is used also for non-GPU code, we cannot allocate it on aligned and write-combined memory + cudaCheck(cudaMemcpyAsync( + data.gainDataOnGPU, this->gains_->data().data(), this->gains_->data().size(), cudaMemcpyDefault, stream)); + + cudaCheck(cudaMemcpyAsync( + data.gainForHLTonGPU, this->gainForHLTonHost_, sizeof(SiPixelGainForHLTonGPU), cudaMemcpyDefault, stream)); + cudaCheck(cudaMemcpyAsync(&(data.gainForHLTonGPU->v_pedestals_), + &(data.gainDataOnGPU), + sizeof(SiPixelGainForHLTonGPU_DecodingStructure*), + cudaMemcpyDefault, + stream)); + }); + return data.gainForHLTonGPU; +} diff --git a/CalibTracker/SiPixelESProducers/src/SiPixelROCsStatusAndMappingWrapper.cc b/CalibTracker/SiPixelESProducers/src/SiPixelROCsStatusAndMappingWrapper.cc new file mode 100644 index 0000000000000..665d31b97ead2 --- /dev/null +++ b/CalibTracker/SiPixelESProducers/src/SiPixelROCsStatusAndMappingWrapper.cc @@ -0,0 +1,171 @@ +// C++ includes +#include +#include +#include +#include + +// CUDA includes +#include + +// CMSSW includes +#include "CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h" +#include "CalibTracker/SiPixelESProducers/interface/SiPixelROCsStatusAndMappingWrapper.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingTree.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelQuality.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "Geometry/CommonDetUnit/interface/GeomDetType.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" + +SiPixelROCsStatusAndMappingWrapper::SiPixelROCsStatusAndMappingWrapper(SiPixelFedCablingMap const& cablingMap, + TrackerGeometry const& trackerGeom, + SiPixelQuality const* badPixelInfo) + : cablingMap_(&cablingMap), modToUnpDefault(pixelgpudetails::MAX_SIZE), hasQuality_(badPixelInfo != nullptr) { + cudaCheck(cudaMallocHost(&cablingMapHost, sizeof(SiPixelROCsStatusAndMapping))); + + std::vector const& fedIds = cablingMap.fedIds(); + std::unique_ptr const& cabling = cablingMap.cablingTree(); + + unsigned int startFed = *(fedIds.begin()); + unsigned int endFed = *(fedIds.end() - 1); + + sipixelobjects::CablingPathToDetUnit path; + int index = 1; + + for (unsigned int fed = startFed; fed <= endFed; fed++) { + for (unsigned int link = 1; link <= pixelgpudetails::MAX_LINK; link++) { + for (unsigned int roc = 1; roc <= pixelgpudetails::MAX_ROC; roc++) { + path = {fed, link, roc}; + const sipixelobjects::PixelROC* pixelRoc = cabling->findItem(path); + cablingMapHost->fed[index] = fed; + cablingMapHost->link[index] = link; + cablingMapHost->roc[index] = roc; + if (pixelRoc != nullptr) { + cablingMapHost->rawId[index] = pixelRoc->rawId(); + cablingMapHost->rocInDet[index] = pixelRoc->idInDetUnit(); + modToUnpDefault[index] = false; + if (badPixelInfo != nullptr) + cablingMapHost->badRocs[index] = badPixelInfo->IsRocBad(pixelRoc->rawId(), pixelRoc->idInDetUnit()); + else + cablingMapHost->badRocs[index] = false; + } else { // store some dummy number + cablingMapHost->rawId[index] = gpuClustering::invalidModuleId; + cablingMapHost->rocInDet[index] = gpuClustering::invalidModuleId; + cablingMapHost->badRocs[index] = true; + modToUnpDefault[index] = true; + } + index++; + } + } + } // end of FED loop + + // Given FedId, Link and idinLnk; use the following formula + // to get the rawId and idinDU + // index = (FedID-1200) * MAX_LINK* MAX_ROC + (Link-1)* MAX_ROC + idinLnk; + // where, MAX_LINK = 48, MAX_ROC = 8 for Phase1 as mentioned Danek's email + // FedID varies between 1200 to 1338 (In total 108 FED's) + // Link varies between 1 to 48 + // idinLnk varies between 1 to 8 + + for (int i = 1; i < index; i++) { + if (cablingMapHost->rawId[i] == gpuClustering::invalidModuleId) { + cablingMapHost->moduleId[i] = gpuClustering::invalidModuleId; + } else { + /* + std::cout << cablingMapHost->rawId[i] << std::endl; + */ + auto gdet = trackerGeom.idToDetUnit(cablingMapHost->rawId[i]); + if (!gdet) { + LogDebug("SiPixelROCsStatusAndMapping") << " Not found: " << cablingMapHost->rawId[i] << std::endl; + continue; + } + cablingMapHost->moduleId[i] = gdet->index(); + } + LogDebug("SiPixelROCsStatusAndMapping") + << "----------------------------------------------------------------------------" << std::endl; + LogDebug("SiPixelROCsStatusAndMapping") + << i << std::setw(20) << cablingMapHost->fed[i] << std::setw(20) << cablingMapHost->link[i] << std::setw(20) + << cablingMapHost->roc[i] << std::endl; + LogDebug("SiPixelROCsStatusAndMapping") + << i << std::setw(20) << cablingMapHost->rawId[i] << std::setw(20) << cablingMapHost->rocInDet[i] + << std::setw(20) << cablingMapHost->moduleId[i] << std::endl; + LogDebug("SiPixelROCsStatusAndMapping") + << i << std::setw(20) << (bool)cablingMapHost->badRocs[i] << std::setw(20) << std::endl; + LogDebug("SiPixelROCsStatusAndMapping") + << "----------------------------------------------------------------------------" << std::endl; + } + + cablingMapHost->size = index - 1; +} + +SiPixelROCsStatusAndMappingWrapper::~SiPixelROCsStatusAndMappingWrapper() { cudaCheck(cudaFreeHost(cablingMapHost)); } + +const SiPixelROCsStatusAndMapping* SiPixelROCsStatusAndMappingWrapper::getGPUProductAsync( + cudaStream_t cudaStream) const { + const auto& data = gpuData_.dataForCurrentDeviceAsync(cudaStream, [this](GPUData& data, cudaStream_t stream) { + // allocate + cudaCheck(cudaMalloc(&data.cablingMapDevice, sizeof(SiPixelROCsStatusAndMapping))); + + // transfer + cudaCheck(cudaMemcpyAsync( + data.cablingMapDevice, this->cablingMapHost, sizeof(SiPixelROCsStatusAndMapping), cudaMemcpyDefault, stream)); + }); + return data.cablingMapDevice; +} + +const unsigned char* SiPixelROCsStatusAndMappingWrapper::getModToUnpAllAsync(cudaStream_t cudaStream) const { + const auto& data = + modToUnp_.dataForCurrentDeviceAsync(cudaStream, [this](ModulesToUnpack& data, cudaStream_t stream) { + cudaCheck(cudaMalloc((void**)&data.modToUnpDefault, pixelgpudetails::MAX_SIZE_BYTE_BOOL)); + cudaCheck(cudaMemcpyAsync(data.modToUnpDefault, + this->modToUnpDefault.data(), + this->modToUnpDefault.size() * sizeof(unsigned char), + cudaMemcpyDefault, + stream)); + }); + return data.modToUnpDefault; +} + +cms::cuda::device::unique_ptr SiPixelROCsStatusAndMappingWrapper::getModToUnpRegionalAsync( + std::set const& modules, cudaStream_t cudaStream) const { + auto modToUnpDevice = cms::cuda::make_device_unique(pixelgpudetails::MAX_SIZE, cudaStream); + auto modToUnpHost = cms::cuda::make_host_unique(pixelgpudetails::MAX_SIZE, cudaStream); + + std::vector const& fedIds = cablingMap_->fedIds(); + std::unique_ptr const& cabling = cablingMap_->cablingTree(); + + unsigned int startFed = *(fedIds.begin()); + unsigned int endFed = *(fedIds.end() - 1); + + sipixelobjects::CablingPathToDetUnit path; + int index = 1; + + for (unsigned int fed = startFed; fed <= endFed; fed++) { + for (unsigned int link = 1; link <= pixelgpudetails::MAX_LINK; link++) { + for (unsigned int roc = 1; roc <= pixelgpudetails::MAX_ROC; roc++) { + path = {fed, link, roc}; + const sipixelobjects::PixelROC* pixelRoc = cabling->findItem(path); + if (pixelRoc != nullptr) { + modToUnpHost[index] = (not modules.empty()) and (modules.find(pixelRoc->rawId()) == modules.end()); + } else { // store some dummy number + modToUnpHost[index] = true; + } + index++; + } + } + } + + cudaCheck(cudaMemcpyAsync(modToUnpDevice.get(), + modToUnpHost.get(), + pixelgpudetails::MAX_SIZE * sizeof(unsigned char), + cudaMemcpyHostToDevice, + cudaStream)); + return modToUnpDevice; +} + +SiPixelROCsStatusAndMappingWrapper::GPUData::~GPUData() { cudaCheck(cudaFree(cablingMapDevice)); } + +SiPixelROCsStatusAndMappingWrapper::ModulesToUnpack::~ModulesToUnpack() { cudaCheck(cudaFree(modToUnpDefault)); } diff --git a/CalibTracker/SiPixelESProducers/test/BuildFile.xml b/CalibTracker/SiPixelESProducers/test/BuildFile.xml index 20c82e979a33a..eb13367b7c0c8 100644 --- a/CalibTracker/SiPixelESProducers/test/BuildFile.xml +++ b/CalibTracker/SiPixelESProducers/test/BuildFile.xml @@ -1,10 +1,8 @@ - - diff --git a/CalibTracker/SiPixelESProducers/test/PixelFEDChannelCollectionMapTestReader.cc b/CalibTracker/SiPixelESProducers/test/PixelFEDChannelCollectionMapTestReader.cc index 008d7861fa7db..f77b7928d542f 100644 --- a/CalibTracker/SiPixelESProducers/test/PixelFEDChannelCollectionMapTestReader.cc +++ b/CalibTracker/SiPixelESProducers/test/PixelFEDChannelCollectionMapTestReader.cc @@ -2,12 +2,9 @@ #include #include #include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/SiPixelDetId/interface/PixelFEDChannel.h" #include "CalibTracker/Records/interface/SiPixelFEDChannelContainerESProducerRcd.h" @@ -25,11 +22,15 @@ class PixelFEDChannelCollectionMapTestReader : public edm::one::EDAnalyzer<> { // ----------member data --------------------------- const bool printdebug_; const std::string formatedOutput_; + edm::ESGetToken + pixelFEDChannelCollectionMapToken_; }; PixelFEDChannelCollectionMapTestReader::PixelFEDChannelCollectionMapTestReader(edm::ParameterSet const& p) : printdebug_(p.getUntrackedParameter("printDebug", true)), - formatedOutput_(p.getUntrackedParameter("outputFile", "")) { + formatedOutput_(p.getUntrackedParameter("outputFile", "")), + pixelFEDChannelCollectionMapToken_( + esConsumes()) { edm::LogInfo("PixelFEDChannelCollectionMapTestReader") << "PixelFEDChannelCollectionMapTestReader" << std::endl; } @@ -53,11 +54,9 @@ void PixelFEDChannelCollectionMapTestReader::analyze(const edm::Event& e, const } //this part gets the handle of the event source and the record (i.e. the Database) - edm::ESHandle PixelFEDChannelCollectionMapHandle; - edm::LogInfo("PixelFEDChannelCollectionMapTestReader") << "got eshandle" << std::endl; - - context.get().get(PixelFEDChannelCollectionMapHandle); - edm::LogInfo("PixelFEDChannelCollectionMapTestReader") << "got context" << std::endl; + edm::ESHandle PixelFEDChannelCollectionMapHandle = + context.getHandle(pixelFEDChannelCollectionMapToken_); + edm::LogInfo("PixelFEDChannelCollectionMapTestReader") << "got eshandle and context" << std::endl; const PixelFEDChannelCollectionMap* thePixelFEDChannelCollectionMap = PixelFEDChannelCollectionMapHandle.product(); edm::LogInfo("PixelFEDChannelCollectionMapTestReader") << "got SiPixelFEDChannelContainer* " << std::endl; diff --git a/CalibTracker/SiPixelESProducers/test/PixelFEDChannelCollectionMapTestReader_cfg.py b/CalibTracker/SiPixelESProducers/test/PixelFEDChannelCollectionMapTestReader_cfg.py index c00a534013e74..db134549a4b37 100644 --- a/CalibTracker/SiPixelESProducers/test/PixelFEDChannelCollectionMapTestReader_cfg.py +++ b/CalibTracker/SiPixelESProducers/test/PixelFEDChannelCollectionMapTestReader_cfg.py @@ -6,10 +6,12 @@ ## MessageLogger ## process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiPixelFEDChannelContainer") -process.MessageLogger.categories.append("PixelFEDChannelCollectionMapTestReader") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiPixelFEDChannelContainer=dict() +process.MessageLogger.PixelFEDChannelCollectionMapTestReader=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -18,7 +20,6 @@ SiPixelFEDChannelContainer = cms.untracked.PSet( limit = cms.untracked.int32(-1)), PixelFEDChannelCollectionMapTestReader = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') ## ## Empty Source diff --git a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainForHLTReader.cc b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainForHLTReader.cc index ada6c3a063323..9a4519ffd139b 100644 --- a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainForHLTReader.cc +++ b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainForHLTReader.cc @@ -3,11 +3,12 @@ #include "CalibTracker/SiPixelESProducers/test/SiPixelFakeGainForHLTReader.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" namespace cms { SiPixelFakeGainForHLTReader::SiPixelFakeGainForHLTReader(const edm::ParameterSet& conf) : conf_(conf), + trackerGeomToken_(esConsumes()), + trackerGeomTokenBeginRun_(esConsumes()), SiPixelGainCalibrationForHLTService_(conf), filename_(conf.getParameter("fileName")) {} @@ -17,14 +18,9 @@ namespace cms { fFile->cd(); // Get the Geometry - iSetup.get().get(tkgeom); + edm::ESHandle tkgeom = iSetup.getHandle(trackerGeomToken_); edm::LogInfo("SiPixelFakeGainForHLTReader") << " There are " << tkgeom->dets().size() << " detectors" << std::endl; - // Get the calibrationForHLT data - //iSetup.get().get(SiPixelGainCalibrationForHLT_); - //edm::LogInfo("SiPixelFakeGainForHLTReader") << "[SiPixelFakeGainForHLTReader::analyze] End Reading FakeGainForHLTects" << std::endl; - //SiPixelGainCalibrationForHLTService_.setESObjects(iSetup); - // for(TrackerGeometry::DetContainer::const_iterator it = tkgeom->dets().begin(); it != tkgeom->dets().end(); it++){ // if( dynamic_cast((*it))!=0){ // uint32_t detid=((*it)->geographicalId()).rawId(); @@ -85,17 +81,14 @@ namespace cms { char name[128]; // Get Geometry - iSetup.get().get(tkgeom); + edm::ESHandle tkgeom = iSetup.getHandle(trackerGeomTokenBeginRun_); // Get the calibrationForHLT data - //edm::ESHandle SiPixelGainCalibration_; - //iSetup.get().get(SiPixelGainCalibration_); SiPixelGainCalibrationForHLTService_.setESObjects(iSetup); edm::LogInfo("SiPixelFakeGainForHLTReader") << "[SiPixelFakeGainForHLTReader::beginJob] End Reading FakeGainForHLTects" << std::endl; // Get the list of DetId's std::vector vdetId_ = SiPixelGainCalibrationForHLTService_.getDetIds(); - //SiPixelGainCalibrationForHLT_->getDetIds(vdetId_); // Loop over DetId's for (std::vector::const_iterator detid_iter = vdetId_.begin(); detid_iter != vdetId_.end(); detid_iter++) { diff --git a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainForHLTReader.h b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainForHLTReader.h index e9a4c9bbc157a..d448ea799ac96 100644 --- a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainForHLTReader.h +++ b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainForHLTReader.h @@ -19,13 +19,9 @@ // #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -//#include "CondFormats/SiPixelObjects/interface/SiPixelGainCalibrationForHLT.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTService.h" #include "TROOT.h" @@ -47,8 +43,8 @@ namespace cms { private: edm::ParameterSet conf_; - edm::ESHandle tkgeom; - //edm::ESHandle SiPixelGainCalibrationForHLT_; + edm::ESGetToken trackerGeomToken_; + edm::ESGetToken trackerGeomTokenBeginRun_; SiPixelGainCalibrationForHLTService SiPixelGainCalibrationForHLTService_; std::map _TH1F_Pedestals_m; diff --git a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainOfflineReader.cc b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainOfflineReader.cc index 2cefd90a64e9b..66ea38075a0f3 100644 --- a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainOfflineReader.cc +++ b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainOfflineReader.cc @@ -3,12 +3,13 @@ #include "CalibTracker/SiPixelESProducers/test/SiPixelFakeGainOfflineReader.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" namespace cms { SiPixelFakeGainOfflineReader::SiPixelFakeGainOfflineReader(const edm::ParameterSet& conf) : conf_(conf), SiPixelGainCalibrationOfflineService_(conf), + trackerGeomToken_(esConsumes()), + trackerGeomTokenBeginRun_(esConsumes()), filename_(conf.getParameter("fileName")) {} void SiPixelFakeGainOfflineReader::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { @@ -17,14 +18,9 @@ namespace cms { fFile->cd(); // Get the Geometry - iSetup.get().get(tkgeom); + edm::ESHandle tkgeom = iSetup.getHandle(trackerGeomToken_); edm::LogInfo("SiPixelFakeGainOfflineReader") << " There are " << tkgeom->dets().size() << " detectors" << std::endl; - // Get the calibrationOffline data - //iSetup.get().get(SiPixelGainCalibrationOffline_); - //edm::LogInfo("SiPixelFakeGainOfflineReader") << "[SiPixelFakeGainOfflineReader::analyze] End Reading FakeGainOfflineects" << std::endl; - //SiPixelGainCalibrationOfflineService_.setESObjects(iSetup); - // for(TrackerGeometry::DetContainer::const_iterator it = tkgeom->dets().begin(); it != tkgeom->dets().end(); it++){ // if( dynamic_cast((*it))!=0){ // uint32_t detid=((*it)->geographicalId()).rawId(); @@ -91,17 +87,14 @@ namespace cms { char name[128]; // Get Geometry - iSetup.get().get(tkgeom); + edm::ESHandle tkgeom = iSetup.getHandle(trackerGeomTokenBeginRun_); // Get the calibrationOffline data - //edm::ESHandle SiPixelGainCalibrationOffline_; - //iSetup.get().get(SiPixelGainCalibrationOffline_); SiPixelGainCalibrationOfflineService_.setESObjects(iSetup); edm::LogInfo("SiPixelFakeGainOfflineReader") << "[SiPixelFakeGainOfflineReader::beginJob] End Reading FakeGainOfflineects" << std::endl; // Get the list of DetId's std::vector vdetId_ = SiPixelGainCalibrationOfflineService_.getDetIds(); - //SiPixelGainCalibrationOffline_->getDetIds(vdetId_); // Loop over DetId's for (std::vector::const_iterator detid_iter = vdetId_.begin(); detid_iter != vdetId_.end(); detid_iter++) { diff --git a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainOfflineReader.h b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainOfflineReader.h index 8613cc6f307c4..4a8f1753bef09 100644 --- a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainOfflineReader.h +++ b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainOfflineReader.h @@ -19,13 +19,9 @@ // #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -//#include "CondFormats/SiPixelObjects/interface/SiPixelGainCalibrationOffline.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineService.h" #include "TROOT.h" @@ -47,10 +43,10 @@ namespace cms { private: edm::ParameterSet conf_; - edm::ESHandle tkgeom; - //edm::ESHandle SiPixelGainCalibrationOffline_; - SiPixelGainCalibrationOfflineService SiPixelGainCalibrationOfflineService_; + SiPixelGainCalibrationOfflineService SiPixelGainCalibrationOfflineService_; + edm::ESGetToken trackerGeomToken_; + edm::ESGetToken trackerGeomTokenBeginRun_; std::map _TH1F_Pedestals_m; std::map _TH1F_Gains_m; std::string filename_; diff --git a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainReader.cc b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainReader.cc index 9943129073c13..7ca86117ea9ed 100644 --- a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainReader.cc +++ b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainReader.cc @@ -3,11 +3,14 @@ #include "CalibTracker/SiPixelESProducers/test/SiPixelFakeGainReader.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" namespace cms { SiPixelFakeGainReader::SiPixelFakeGainReader(const edm::ParameterSet& conf) - : conf_(conf), SiPixelGainCalibrationService_(conf), filename_(conf.getParameter("fileName")) {} + : conf_(conf), + trackerGeomToken_(esConsumes()), + trackerGeomTokenBeginRun_(esConsumes()), + SiPixelGainCalibrationService_(conf), + filename_(conf.getParameter("fileName")) {} void SiPixelFakeGainReader::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { unsigned int nmodules = 0; @@ -15,14 +18,9 @@ namespace cms { fFile->cd(); // Get the Geometry - iSetup.get().get(tkgeom); + edm::ESHandle tkgeom = iSetup.getHandle(trackerGeomToken_); edm::LogInfo("SiPixelFakeGainReader") << " There are " << tkgeom->dets().size() << " detectors" << std::endl; - // Get the calibration data - //iSetup.get().get(SiPixelGainCalibration_); - //edm::LogInfo("SiPixelFakeGainReader") << "[SiPixelFakeGainReader::analyze] End Reading FakeGainects" << std::endl; - //SiPixelGainCalibrationService_.setESObjects(iSetup); - // for(TrackerGeometry::DetContainer::const_iterator it = tkgeom->dets().begin(); it != tkgeom->dets().end(); it++){ // if( dynamic_cast((*it))!=0){ // uint32_t detid=((*it)->geographicalId()).rawId(); @@ -89,17 +87,14 @@ namespace cms { char name[128]; // Get Geometry - iSetup.get().get(tkgeom); + edm::ESHandle tkgeom = iSetup.getHandle(trackerGeomTokenBeginRun_); // Get the calibration data - //edm::ESHandle SiPixelGainCalibration_; - //iSetup.get().get(SiPixelGainCalibration_); SiPixelGainCalibrationService_.setESObjects(iSetup); edm::LogInfo("SiPixelFakeGainReader") << "[SiPixelFakeGainReader::beginJob] End Reading FakeGainects" << std::endl; // Get the list of DetId's std::vector vdetId_ = SiPixelGainCalibrationService_.getDetIds(); - //SiPixelGainCalibration_->getDetIds(vdetId_); // Loop over DetId's for (std::vector::const_iterator detid_iter = vdetId_.begin(); detid_iter != vdetId_.end(); detid_iter++) { diff --git a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainReader.h b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainReader.h index 7d96d3bf646ff..3b72d11eca08c 100644 --- a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainReader.h +++ b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainReader.h @@ -19,13 +19,9 @@ // #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -//#include "CondFormats/SiPixelObjects/interface/SiPixelGainCalibration.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationService.h" #include "TROOT.h" @@ -47,8 +43,8 @@ namespace cms { private: edm::ParameterSet conf_; - edm::ESHandle tkgeom; - //edm::ESHandle SiPixelGainCalibration_; + edm::ESGetToken trackerGeomToken_; + edm::ESGetToken trackerGeomTokenBeginRun_; SiPixelGainCalibrationService SiPixelGainCalibrationService_; std::map _TH1F_Pedestals_m; diff --git a/CalibTracker/SiPixelErrorEstimation/interface/SiPixelErrorEstimation.h b/CalibTracker/SiPixelErrorEstimation/interface/SiPixelErrorEstimation.h index a45822ebe8ce2..2dee8aceba9a3 100644 --- a/CalibTracker/SiPixelErrorEstimation/interface/SiPixelErrorEstimation.h +++ b/CalibTracker/SiPixelErrorEstimation/interface/SiPixelErrorEstimation.h @@ -77,6 +77,9 @@ class SiPixelErrorEstimation : public edm::EDAnalyzer { edm::EDGetTokenT tPixRecHitCollection; edm::EDGetTokenT tSimTrackContainer; edm::EDGetTokenT tTrackCollection; + edm::ESGetToken trackerTopoToken_; + edm::ESGetToken trackerGeomToken_; + edm::ESGetToken magneticFieldToken_; std::string outputFile_; std::string src_; bool checkType_; // do we check that the simHit associated with recHit is of the expected particle type ? diff --git a/CalibTracker/SiPixelErrorEstimation/src/SiPixelErrorEstimation.cc b/CalibTracker/SiPixelErrorEstimation/src/SiPixelErrorEstimation.cc index 3678bc99d791e..036f34b3073c1 100644 --- a/CalibTracker/SiPixelErrorEstimation/src/SiPixelErrorEstimation.cc +++ b/CalibTracker/SiPixelErrorEstimation/src/SiPixelErrorEstimation.cc @@ -53,6 +53,9 @@ SiPixelErrorEstimation::SiPixelErrorEstimation(const edm::ParameterSet& ps) tPixRecHitCollection = consumes(edm::InputTag("siPixelRecHits")); tSimTrackContainer = consumes(edm::InputTag("g4SimHits")); tTrackCollection = consumes(src_); + trackerTopoToken_ = esConsumes(); + trackerGeomToken_ = esConsumes(); + magneticFieldToken_ = esConsumes(); } SiPixelErrorEstimation::~SiPixelErrorEstimation() {} @@ -370,8 +373,7 @@ void SiPixelErrorEstimation::endJob() { void SiPixelErrorEstimation::analyze(const edm::Event& e, const edm::EventSetup& es) { //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); + edm::ESHandle tTopoHandle = es.getHandle(trackerTopoToken_); const TrackerTopology* const tTopo = tTopoHandle.product(); using namespace edm; @@ -392,14 +394,12 @@ void SiPixelErrorEstimation::analyze(const edm::Event& e, const edm::EventSetup& std::vector matched; TrackerHitAssociator associate(e, trackerHitAssociatorConfig_); - edm::ESHandle pDD; - es.get().get(pDD); + edm::ESHandle pDD = es.getHandle(trackerGeomToken_); const TrackerGeometry* tracker = &(*pDD); //cout << "...1..." << endl; - edm::ESHandle magneticField; - es.get().get(magneticField); + edm::ESHandle magneticField = es.getHandle(magneticFieldToken_); //const MagneticField* magField_ = magFieldHandle.product(); edm::FileInPath FileInPath_; diff --git a/CalibTracker/SiPixelGainCalibration/plugins/SiPixelCalibDigiProducer.cc b/CalibTracker/SiPixelGainCalibration/plugins/SiPixelCalibDigiProducer.cc index b8fef9d76991a..5db0ff1824d19 100644 --- a/CalibTracker/SiPixelGainCalibration/plugins/SiPixelCalibDigiProducer.cc +++ b/CalibTracker/SiPixelGainCalibration/plugins/SiPixelCalibDigiProducer.cc @@ -61,6 +61,10 @@ SiPixelCalibDigiProducer::SiPixelCalibDigiProducer(const edm::ParameterSet& iCon produces>(); if (includeErrors_) produces>(); + + calibToken_ = esConsumes(); + trackerGeomToken_ = esConsumes(); + cablingMapToken_ = esConsumes(); } SiPixelCalibDigiProducer::~SiPixelCalibDigiProducer() { @@ -249,9 +253,9 @@ void SiPixelCalibDigiProducer::setPattern() { void SiPixelCalibDigiProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { // edm::LogInfo("SiPixelCalibDigiProducer") <<"in produce() " << std::endl; using namespace edm; - iSetup.get().get(calib_); - iSetup.get().get(theGeometry_); - iSetup.get().get(theCablingMap_); + calib_ = iSetup.getHandle(calibToken_); + theGeometry_ = iSetup.getHandle(trackerGeomToken_); + theCablingMap_ = iSetup.getHandle(cablingMapToken_); pattern_repeat_ = calib_->getNTriggers() * calib_->nVCal(); if (use_realeventnumber_) { iEventCounter_ = iEvent.id().event() - 1; diff --git a/CalibTracker/SiPixelGainCalibration/plugins/SiPixelCalibDigiProducer.h b/CalibTracker/SiPixelGainCalibration/plugins/SiPixelCalibDigiProducer.h index bed3e000bbb14..49fcc7c42088f 100644 --- a/CalibTracker/SiPixelGainCalibration/plugins/SiPixelCalibDigiProducer.h +++ b/CalibTracker/SiPixelGainCalibration/plugins/SiPixelCalibDigiProducer.h @@ -26,7 +26,6 @@ #include "FWCore/Framework/interface/EDProducer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ServiceRegistry/interface/Service.h" @@ -87,6 +86,10 @@ class SiPixelCalibDigiProducer : public edm::EDProducer { edm::ESHandle theGeometry_; // the tracker geometry edm::ESHandle theCablingMap_; + edm::ESGetToken calibToken_; + edm::ESGetToken trackerGeomToken_; + edm::ESGetToken cablingMapToken_; + // worker variables std::map intermediate_data_; // data container, copied over into the event every pattern_repeat_ events diff --git a/CalibTracker/SiPixelLorentzAngle/src/SiPixelLorentzAngle.cc b/CalibTracker/SiPixelLorentzAngle/src/SiPixelLorentzAngle.cc index 34ef68147eb93..91711f8cfb253 100644 --- a/CalibTracker/SiPixelLorentzAngle/src/SiPixelLorentzAngle.cc +++ b/CalibTracker/SiPixelLorentzAngle/src/SiPixelLorentzAngle.cc @@ -9,7 +9,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/GeometryVector/interface/GlobalVector.h" #include "DataFormats/GeometryVector/interface/LocalVector.h" #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" @@ -63,6 +62,8 @@ SiPixelLorentzAngle::SiPixelLorentzAngle(edm::ParameterSet const& conf) max_drift_ = 1000.; //400.; t_trajTrack = consumes(conf.getParameter("src")); + trackerTopoToken_ = esConsumes(); + trackerGeomToken_ = esConsumes(); } // Virtual destructor needed. @@ -175,25 +176,20 @@ void SiPixelLorentzAngle::beginJob() { hitCounter_ = 0; usedHitCounter_ = 0; pixelTracksCounter_ = 0; - // edm::ESHandle estracker; //this block should not be in beginJob() - // c.get().get(estracker); - // tracker=&(* estracker); } // Functions that gets called by framework every event void SiPixelLorentzAngle::analyze(const edm::Event& e, const edm::EventSetup& es) { //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); + edm::ESHandle tTopoHandle = es.getHandle(trackerTopoToken_); const TrackerTopology* const tTopo = tTopoHandle.product(); event_counter_++; // if(event_counter_ % 500 == 0) cout << "event number " << event_counter_ << endl; cout << "event number " << event_counter_ << endl; - edm::ESHandle estracker; - es.get().get(estracker); - tracker = &(*estracker); + edm::ESHandle estracker = es.getHandle(trackerGeomToken_); + const TrackerGeometry* tracker = &(*estracker); std::unique_ptr associate; if (simData_) diff --git a/CalibTracker/SiPixelLorentzAngle/src/SiPixelLorentzAngle.h b/CalibTracker/SiPixelLorentzAngle/src/SiPixelLorentzAngle.h index 78bf54246ca83..790e30588f5b4 100644 --- a/CalibTracker/SiPixelLorentzAngle/src/SiPixelLorentzAngle.h +++ b/CalibTracker/SiPixelLorentzAngle/src/SiPixelLorentzAngle.h @@ -186,10 +186,10 @@ namespace analyzer { const TransientTrackingRecHitBuilder *RHBuilder; const KFTrajectorySmoother *theSmoother; const KFTrajectoryFitter *theFitter; - const TrackerGeometry *tracker; - const MagneticField *magfield; TrajectoryStateTransform tsTransform; edm::EDGetTokenT t_trajTrack; + edm::ESGetToken trackerTopoToken_; + edm::ESGetToken trackerGeomToken_; }; } // namespace analyzer diff --git a/CalibTracker/SiPixelLorentzAngle/test/SiPixelLorentzAngle_cfg.py b/CalibTracker/SiPixelLorentzAngle/test/SiPixelLorentzAngle_cfg.py index 16e32ca352e1a..3f40eab89988f 100644 --- a/CalibTracker/SiPixelLorentzAngle/test/SiPixelLorentzAngle_cfg.py +++ b/CalibTracker/SiPixelLorentzAngle/test/SiPixelLorentzAngle_cfg.py @@ -32,13 +32,19 @@ -process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('simul', - 'cout'), - simul = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR') - ), -) +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True) + ), + files = cms.untracked.PSet( + simul = cms.untracked.PSet( + threshold = cms.untracked.string('ERROR') + ) + ) +) process.lorentzAngle = cms.EDAnalyzer("SiPixelLorentzAngle", src = cms.string("TrackRefitter"), diff --git a/CalibTracker/SiPixelQuality/plugins/SiPixelStatusProducer.cc b/CalibTracker/SiPixelQuality/plugins/SiPixelStatusProducer.cc index aafbe44ee1750..812ced2a3b4a2 100644 --- a/CalibTracker/SiPixelQuality/plugins/SiPixelStatusProducer.cc +++ b/CalibTracker/SiPixelQuality/plugins/SiPixelStatusProducer.cc @@ -27,7 +27,13 @@ // Header file #include "CalibTracker/SiPixelQuality/plugins/SiPixelStatusProducer.h" -SiPixelStatusProducer::SiPixelStatusProducer(const edm::ParameterSet& iConfig, SiPixelTopoCache const*) { +SiPixelStatusProducer::SiPixelStatusProducer(const edm::ParameterSet& iConfig, SiPixelStatusCache const* iCache) { + //NOTE: Token for all stream replicas are identical and constructors for the replicas are called + // sequentially so there is no race condition. + iCache->trackerGeometryToken_ = esConsumes(); + iCache->trackerTopologyToken_ = esConsumes(); + iCache->siPixelFedCablingMapToken_ = esConsumes(); + /* badPixelFEDChannelCollections */ std::vector badPixelFEDChannelCollectionLabels = iConfig.getParameter("SiPixelStatusProducerParameters") @@ -50,6 +56,19 @@ SiPixelStatusProducer::~SiPixelStatusProducer() {} //-------------------------------------------------------------------------------------------------- +std::shared_ptr SiPixelStatusProducer::globalBeginRun(edm::Run const& iRun, + edm::EventSetup const& iSetup, + GlobalCache const* iCache) { + const TrackerGeometry* trackerGeometry = &iSetup.getData(iCache->trackerGeometryToken_); + const TrackerTopology* trackerTopology = &iSetup.getData(iCache->trackerTopologyToken_); + const SiPixelFedCablingMap* cablingMap = &iSetup.getData(iCache->siPixelFedCablingMapToken_); + + auto returnValue = std::make_shared(); + + returnValue->init(trackerGeometry, trackerTopology, cablingMap); + return returnValue; +} + void SiPixelStatusProducer::beginRun(edm::Run const&, edm::EventSetup const&) { /*Is it good to pass the objects stored in runCache to set class private members values * or just call runCahche every time in the calss function?*/ diff --git a/CalibTracker/SiPixelQuality/plugins/SiPixelStatusProducer.h b/CalibTracker/SiPixelQuality/plugins/SiPixelStatusProducer.h index cb8b3b492e478..54d0eae8c2127 100644 --- a/CalibTracker/SiPixelQuality/plugins/SiPixelStatusProducer.h +++ b/CalibTracker/SiPixelQuality/plugins/SiPixelStatusProducer.h @@ -50,73 +50,25 @@ #include "CalibTracker/SiPixelQuality/interface/SiPixelDetectorStatus.h" /* Cache to pertain SiPixelTopoFinder */ -class SiPixelTopoCache { +class SiPixelStatusCache { public: - SiPixelTopoCache(edm::ParameterSet const& iPSet){}; - - std::shared_ptr getSiPixelTopoFinder(edm::EventSetup const& iSetup) const { - std::shared_ptr returnValue; - - m_queue.pushAndWait([&]() { - if (!this->siPixelFedCablingMapWatcher_.check(iSetup) && !this->trackerDIGIGeoWatcher_.check(iSetup) && - !this->trackerTopoWatcher_.check(iSetup)) { - /*the condition hasn't changed so we can just use our old value*/ - returnValue = m_mostRecentSiPixelTopoFinder_; - } else { - edm::ESHandle tkGeoHandle; - iSetup.get().get(tkGeoHandle); - const TrackerGeometry* trackerGeometry = tkGeoHandle.product(); - - edm::ESHandle tkTopoHandle; - iSetup.get().get(tkTopoHandle); - const TrackerTopology* trackerTopology = tkTopoHandle.product(); - - edm::ESHandle cMapHandle; - iSetup.get().get(cMapHandle); - const SiPixelFedCablingMap* cablingMap = cMapHandle.product(); - - /*the condition has changed so we need to update*/ - //const TrackerGeometry* trackerGeometry = &iSetup.getData(trackerGeometryToken); - //const TrackerTopology* trackerTopology = &iSetup.getData(trackerTopologyToken); - //const SiPixelFedCablingMap* cablingMap = &iSetup.getData(siPixelFedCablingMapToken); - - returnValue = m_holder.makeOrGet([]() { return new SiPixelTopoFinder(); }); - returnValue->init(trackerGeometry, trackerTopology, cablingMap); - - m_mostRecentSiPixelTopoFinder_ = returnValue; - } - }); //m_queue - - return returnValue; - } - -private: - mutable edm::ReusableObjectHolder m_holder; - mutable edm::SerialTaskQueue m_queue; - - /* Condition watchers */ - /* CablingMaps */ - mutable edm::ESWatcher siPixelFedCablingMapWatcher_; - /* TrackerDIGIGeo */ - mutable edm::ESWatcher trackerDIGIGeoWatcher_; - /* TrackerTopology */ - mutable edm::ESWatcher trackerTopoWatcher_; - - /* SiPixelTopoFinder */ - mutable std::shared_ptr m_mostRecentSiPixelTopoFinder_; + //NOTE: these are only changes in the constructor call + mutable edm::ESGetToken trackerGeometryToken_; + mutable edm::ESGetToken trackerTopologyToken_; + mutable edm::ESGetToken siPixelFedCablingMapToken_; }; /*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/ class SiPixelStatusProducer : - public edm::stream::EDProducer, + public edm::stream::EDProducer, edm::RunCache, edm::LuminosityBlockSummaryCache>, edm::EndLuminosityBlockProducer, edm::Accumulator> { public: - SiPixelStatusProducer(edm::ParameterSet const& iPSet, SiPixelTopoCache const*); + SiPixelStatusProducer(edm::ParameterSet const& iPSet, SiPixelStatusCache const*); ~SiPixelStatusProducer() override; /* module description */ @@ -150,23 +102,20 @@ class SiPixelStatusProducer : /* For global or runCache */ - static std::unique_ptr initializeGlobalCache(edm::ParameterSet const& iPSet) { + static std::unique_ptr initializeGlobalCache(edm::ParameterSet const& iPSet) { edm::LogInfo("SiPixelStatusProducer") << "Init global Cache " << std::endl; - return std::make_unique(iPSet); + return std::make_unique(); } static std::shared_ptr globalBeginRun(edm::Run const& iRun, edm::EventSetup const& iSetup, - GlobalCache const* iCache) { - edm::LogInfo("SiPixelStatusProducer") << "Global beginRun " << std::endl; - return iCache->getSiPixelTopoFinder(iSetup); - } + GlobalCache const* iCache); static void globalEndRun(edm::Run const& iRun, edm::EventSetup const&, RunContext const* iContext) { /* Do nothing */ } - static void globalEndJob(SiPixelTopoCache const*) { /* Do nothing */ + static void globalEndJob(SiPixelStatusCache const*) { /* Do nothing */ } static std::shared_ptr> globalBeginLuminosityBlockSummary( @@ -228,12 +177,6 @@ class SiPixelStatusProducer : edm::EDGetTokenT> fSiPixelClusterToken_; std::vector> theBadPixelFEDChannelsTokens_; - /* - edm::ESGetToken trackerGeometryToken_; - edm::ESGetToken trackerTopologyToken_; - edm::ESGetToken siPixelFedCablingMapToken_; - */ - /*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/ /* private data member, one instance per stream */ diff --git a/CalibTracker/SiPixelQuality/test/step3_SiPixelStatusAlCaRecoProducer.py b/CalibTracker/SiPixelQuality/test/step3_SiPixelStatusAlCaRecoProducer.py index 29be3ccbcca6d..70492d8269b6d 100644 --- a/CalibTracker/SiPixelQuality/test/step3_SiPixelStatusAlCaRecoProducer.py +++ b/CalibTracker/SiPixelQuality/test/step3_SiPixelStatusAlCaRecoProducer.py @@ -7,8 +7,8 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' process.MessageLogger.cerr.FwkReport.reportEvery = 10000 -process.MessageLogger.categories.append('HLTrigReport') -process.MessageLogger.categories.append('L1GtTrigReport') +process.MessageLogger.HLTrigReport=dict() +process.MessageLogger.L1GtTrigReport=dict() process.options = cms.untracked.PSet( SkipEvent = cms.untracked.vstring('ProductNotFound'), wantSummary = cms.untracked.bool(True) diff --git a/CalibTracker/SiPixelSCurveCalibration/src/SiPixelSCurveCalibrationAnalysis.cc b/CalibTracker/SiPixelSCurveCalibration/src/SiPixelSCurveCalibrationAnalysis.cc index 491aecbf88451..db71b39e1e44e 100644 --- a/CalibTracker/SiPixelSCurveCalibration/src/SiPixelSCurveCalibrationAnalysis.cc +++ b/CalibTracker/SiPixelSCurveCalibration/src/SiPixelSCurveCalibrationAnalysis.cc @@ -4,6 +4,7 @@ #include #include +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "CondFormats/SiPixelObjects/interface/DetectorIndex.h" #include "CondFormats/SiPixelObjects/interface/ElectronicIndex.h" #include "CondFormats/SiPixelObjects/interface/LocalPixel.h" diff --git a/CalibTracker/SiPixelTools/BuildFile.xml b/CalibTracker/SiPixelTools/BuildFile.xml index 0d42698939e9e..dc20d3a4f7cfe 100644 --- a/CalibTracker/SiPixelTools/BuildFile.xml +++ b/CalibTracker/SiPixelTools/BuildFile.xml @@ -1,5 +1,4 @@ - diff --git a/CalibTracker/SiPixelTools/interface/SiPixelOfflineCalibAnalysisBase.h b/CalibTracker/SiPixelTools/interface/SiPixelOfflineCalibAnalysisBase.h index 5be413d4425de..d1f6a42240602 100644 --- a/CalibTracker/SiPixelTools/interface/SiPixelOfflineCalibAnalysisBase.h +++ b/CalibTracker/SiPixelTools/interface/SiPixelOfflineCalibAnalysisBase.h @@ -26,12 +26,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/ServiceRegistry/interface/Service.h" -//#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/Common/interface/DetSetVector.h" #include "DataFormats/DetId/interface/DetId.h" @@ -52,6 +46,7 @@ #include "DQM/SiPixelCommon/interface/SiPixelHistogramId.h" #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h" #include @@ -114,6 +109,11 @@ class SiPixelOfflineCalibAnalysisBase : public edm::EDAnalyzer { edm::ESHandle geom_; edm::ESHandle theCablingMap_; + edm::ESGetToken calibTokenBeginRun_; + edm::ESGetToken calibToken_; + edm::ESGetToken trackerGeomToken_; + edm::ESGetToken cablingMapToken_; + std::string calibrationMode_; short nTriggers_; static std::vector vCalValues_; diff --git a/CalibTracker/SiPixelTools/plugins/SiPixelErrorsDigisToCalibDigis.cc b/CalibTracker/SiPixelTools/plugins/SiPixelErrorsDigisToCalibDigis.cc index 9a20af7f83d5d..299c34e55848e 100644 --- a/CalibTracker/SiPixelTools/plugins/SiPixelErrorsDigisToCalibDigis.cc +++ b/CalibTracker/SiPixelTools/plugins/SiPixelErrorsDigisToCalibDigis.cc @@ -22,14 +22,8 @@ #include "SiPixelErrorsDigisToCalibDigis.h" // user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" - -#include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - // // constants, enums and typedefs // @@ -52,6 +46,8 @@ SiPixelErrorsDigisToCalibDigis::SiPixelErrorsDigisToCalibDigis(const edm::Parame tPixelCalibDigiError = consumes >(siPixelProducerLabel_); + trackerGeomToken_ = esConsumes(); + // std::cout<<"siPixelProducerLabel_ = "< geom_; + edm::ESGetToken trackerGeomToken_; + private: void beginJob() override; void analyze(const edm::Event&, const edm::EventSetup&) override; diff --git a/CalibTracker/SiPixelTools/src/SiPixelOfflineCalibAnalysisBase.cc b/CalibTracker/SiPixelTools/src/SiPixelOfflineCalibAnalysisBase.cc index e3ca46fdff76e..2d96f81d7fa41 100644 --- a/CalibTracker/SiPixelTools/src/SiPixelOfflineCalibAnalysisBase.cc +++ b/CalibTracker/SiPixelTools/src/SiPixelOfflineCalibAnalysisBase.cc @@ -17,11 +17,12 @@ // // +#include "FWCore/Framework/interface/MakerMacros.h" + #include "CalibTracker/SiPixelTools/interface/SiPixelOfflineCalibAnalysisBase.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetType.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "CondFormats/SiPixelObjects/interface/SiPixelFrameConverter.h" #include "CondFormats/SiPixelObjects/interface/ElectronicIndex.h" @@ -41,6 +42,12 @@ SiPixelOfflineCalibAnalysisBase::SiPixelOfflineCalibAnalysisBase(const edm::Para daqBE_ = &*edm::Service(); folderMaker_ = new SiPixelFolderOrganizer(); tPixelCalibDigi = consumes >(siPixelCalibDigiProducer_); + + calibTokenBeginRun_ = + esConsumes(); + calibToken_ = esConsumes(); + trackerGeomToken_ = esConsumes(); + cablingMapToken_ = esConsumes(); } SiPixelOfflineCalibAnalysisBase::SiPixelOfflineCalibAnalysisBase() { @@ -60,9 +67,9 @@ SiPixelOfflineCalibAnalysisBase::~SiPixelOfflineCalibAnalysisBase() {} void SiPixelOfflineCalibAnalysisBase::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { using namespace edm; - iSetup.get().get(geom_); - iSetup.get().get(theCablingMap_); - iSetup.get().get(calib_); + calib_ = iSetup.getHandle(calibToken_); + geom_ = iSetup.getHandle(trackerGeomToken_); + theCablingMap_ = iSetup.getHandle(cablingMapToken_); if (eventCounter_ == 0) this->calibrationSetup(iSetup); eventCounter_++; @@ -111,13 +118,11 @@ void SiPixelOfflineCalibAnalysisBase::analyze(const edm::Event& iEvent, const ed void SiPixelOfflineCalibAnalysisBase::beginRun(const edm::Run&, const edm::EventSetup& iSetup) { //load the calibration information from the database - iSetup.get().get(calib_); - iSetup.get().get(geom_); - iSetup.get().get(theCablingMap_); + edm::ESHandle calib = iSetup.getHandle(calibTokenBeginRun_); - calibrationMode_ = calib_->getCalibrationMode(); - nTriggers_ = calib_->getNTriggers(); - vCalValues_ = calib_->getVCalValues(); + calibrationMode_ = calib->getCalibrationMode(); + nTriggers_ = calib->getNTriggers(); + vCalValues_ = calib->getVCalValues(); std::cout << "!!!! in beginRun" << std::endl; edm::LogInfo("SiPixelOfflineCalibAnalysisBase") << "Calibration file loaded. Mode: " << calibrationMode_ << " nTriggers: " << nTriggers_ diff --git a/CalibTracker/SiPixelTools/test/prodfedfillerwords_cfg.py b/CalibTracker/SiPixelTools/test/prodfedfillerwords_cfg.py index 22e9d318a8e35..40b38a47d131b 100644 --- a/CalibTracker/SiPixelTools/test/prodfedfillerwords_cfg.py +++ b/CalibTracker/SiPixelTools/test/prodfedfillerwords_cfg.py @@ -6,23 +6,44 @@ fileNames = cms.untracked.vstring ('file:/afs/cern.ch/user/f/florez/CMSSW_2_0_4/src/FedFillerWords/Data/mysimple.root') ) -process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('output'), - threshold = cms.untracked.string('INFO'), - noLineBreaks = cms.untracked.bool(True) - ) +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + files = cms.untracked.PSet( + output = cms.untracked.PSet( + + ) + ), + noLineBreaks = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') +) process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('output'), - threshold = cms.untracked.string('ERROR'), - noLineBreaks = cms.untracked.bool(True) - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + files = cms.untracked.PSet( + output = cms.untracked.PSet( + + ) + ), + noLineBreaks = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') +) process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('output'), - threshold = cms.untracked.string('WARNING'), - noLineBreaks = cms.untracked.bool(True) - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + files = cms.untracked.PSet( + output = cms.untracked.PSet( + + ) + ), + noLineBreaks = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') +) process.filler = cms.EDProducer("SiPixelFedFillerWordEventNumber", InputLabel = cms.untracked.string('source'), diff --git a/CalibTracker/SiStripChannelGain/test/CodeExample/computeGain_cfg.py b/CalibTracker/SiStripChannelGain/test/CodeExample/computeGain_cfg.py index f06e24164ae73..dc36b1b4f759b 100644 --- a/CalibTracker/SiStripChannelGain/test/CodeExample/computeGain_cfg.py +++ b/CalibTracker/SiStripChannelGain/test/CodeExample/computeGain_cfg.py @@ -25,8 +25,13 @@ ) process.MessageLogger = cms.Service("MessageLogger", - cout = cms.untracked.PSet( threshold = cms.untracked.string('ERROR') ), - destinations = cms.untracked.vstring('cout') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') + ) ) # Conditions (Global Tag is used here): diff --git a/CalibTracker/SiStripChannelGain/test/Cosmic_B38/MergeJob_cfg.py b/CalibTracker/SiStripChannelGain/test/Cosmic_B38/MergeJob_cfg.py index eb13498baa98f..234d589f8c0bd 100644 --- a/CalibTracker/SiStripChannelGain/test/Cosmic_B38/MergeJob_cfg.py +++ b/CalibTracker/SiStripChannelGain/test/Cosmic_B38/MergeJob_cfg.py @@ -25,13 +25,16 @@ ) process.MessageLogger = cms.Service("MessageLogger", - suppressWarning = cms.untracked.vstring('TrackRefitter'), - suppressInfo = cms.untracked.vstring('TrackRefitter'), - suppressDebug = cms.untracked.vstring('TrackRefitter'), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('ERROR') ), - destinations = cms.untracked.vstring('cout') + suppressDebug = cms.untracked.vstring('TrackRefitter'), + suppressInfo = cms.untracked.vstring('TrackRefitter'), + suppressWarning = cms.untracked.vstring('TrackRefitter') ) # Conditions (Global Tag is used here): diff --git a/CalibTracker/SiStripChannelGain/test/PCL/step3_ALCA.py b/CalibTracker/SiStripChannelGain/test/PCL/step3_ALCA.py index 4d9da4520e5a3..f0274018b76a7 100644 --- a/CalibTracker/SiStripChannelGain/test/PCL/step3_ALCA.py +++ b/CalibTracker/SiStripChannelGain/test/PCL/step3_ALCA.py @@ -53,10 +53,9 @@ # Uncomment to turn on verbosity output #process.load("FWCore.MessageLogger.MessageLogger_cfi") #process.MessageLogger.threshold = cms.untracked.string('INFO') -#process.MessageLogger.cout.threshold = cms.untracked.string('INFO') #process.MessageLogger.debugModules = cms.untracked.vstring("*") -#process.MessageLogger.destinations = cms.untracked.vstring('cout') -#process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO')) +#process.MessageLogger.cerr.enable = False +#process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), enable = cms.untracked.bool(True)) #process.Tracer = cms.Service("Tracer") diff --git a/CalibTracker/SiStripChannelGain/test/UsefullCode/MakeMap/MakeMap_Merge_cfg.py b/CalibTracker/SiStripChannelGain/test/UsefullCode/MakeMap/MakeMap_Merge_cfg.py index 2d1e2377ab8ec..741a39f6a2214 100644 --- a/CalibTracker/SiStripChannelGain/test/UsefullCode/MakeMap/MakeMap_Merge_cfg.py +++ b/CalibTracker/SiStripChannelGain/test/UsefullCode/MakeMap/MakeMap_Merge_cfg.py @@ -3,8 +3,13 @@ process = cms.Process("DEDX") process.MessageLogger = cms.Service("MessageLogger", - cout = cms.untracked.PSet( threshold = cms.untracked.string('ERROR') ), - destinations = cms.untracked.vstring('cout') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') + ) ) diff --git a/CalibTracker/SiStripChannelGain/test/UsefullCode/PayloadFromASCIIfile/ProducePayloadFromASCII_cfg.py b/CalibTracker/SiStripChannelGain/test/UsefullCode/PayloadFromASCIIfile/ProducePayloadFromASCII_cfg.py index f54cd8ef047a3..788581197f408 100644 --- a/CalibTracker/SiStripChannelGain/test/UsefullCode/PayloadFromASCIIfile/ProducePayloadFromASCII_cfg.py +++ b/CalibTracker/SiStripChannelGain/test/UsefullCode/PayloadFromASCIIfile/ProducePayloadFromASCII_cfg.py @@ -3,8 +3,13 @@ process = cms.Process("APVGAIN") process.MessageLogger = cms.Service("MessageLogger", - cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), #use ERROR for less printouts - destinations = cms.untracked.vstring('cout') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ) ) diff --git a/CalibTracker/SiStripChannelGain/test/testSSTGain_MultiRun_ALCAHARVEST.py b/CalibTracker/SiStripChannelGain/test/testSSTGain_MultiRun_ALCAHARVEST.py index 2a5872ab148ed..ea1abbf3dd811 100644 --- a/CalibTracker/SiStripChannelGain/test/testSSTGain_MultiRun_ALCAHARVEST.py +++ b/CalibTracker/SiStripChannelGain/test/testSSTGain_MultiRun_ALCAHARVEST.py @@ -18,9 +18,11 @@ process.load('Configuration.StandardSequences.Services_cff') process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiStripGainsPCLHarvester") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiStripGainsPCLHarvester=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("ERROR"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -28,7 +30,6 @@ ), SiStripGainsPCLHarvester = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') process.load('Configuration.EventContent.EventContent_cff') process.load('Configuration.StandardSequences.GeometryRecoDB_cff') diff --git a/CalibTracker/SiStripChannelGain/test/testSSTGain_PCL_FromRECO_cfg.py b/CalibTracker/SiStripChannelGain/test/testSSTGain_PCL_FromRECO_cfg.py index 2841322897055..8235a468266c7 100644 --- a/CalibTracker/SiStripChannelGain/test/testSSTGain_PCL_FromRECO_cfg.py +++ b/CalibTracker/SiStripChannelGain/test/testSSTGain_PCL_FromRECO_cfg.py @@ -1,6 +1,7 @@ from __future__ import print_function # Auto generated configuration file # with command line options: stepALCA --datatier ALCARECO --conditions auto:run2_data -s ALCA:PromptCalibProdSiStripGains --eventcontent ALCARECO -n 1000 --dasquery=file dataset=/ZeroBias/Run2016C-SiStripCalMinBias-18Apr2017-v1/ALCARECO run=276243 --no_exec +import warnings import FWCore.ParameterSet.Config as cms from FWCore.ParameterSet.VarParsing import VarParsing @@ -22,7 +23,7 @@ def getFileNames_das_client(era_name): jsondict = das_client.get_data(query) status = jsondict['status'] if status != 'ok': - print("DAS query status: %s"%(status)) + warnings.warn("DAS query status: %s"%(status)) return files data = jsondict['data'] @@ -36,7 +37,7 @@ def getFileNames_das_client(era_name): jsondict = das_client.get_data(query) status = jsondict['status'] if status != 'ok': - print("DAS query status: %s"%(status)) + warnings.warn("DAS query status: %s"%(status)) return files mongo_query = jsondict['mongo_query'] @@ -61,17 +62,18 @@ def getFileNames_das_client(era_name): # Messages ################################################################### process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiStripGainsPCLWorker") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiStripGainsPCLWorker=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("DEBUG"), + enableStatistics = cms.untracked.bool(True), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), reportEvery = cms.untracked.int32(1000) ), SiStripGainsPCLWorker = cms.untracked.PSet( limit = cms.untracked.int32(-1)), ) -process.MessageLogger.statistics.append('cout') process.load('Configuration.EventContent.EventContent_cff') process.load('Configuration.StandardSequences.GeometryRecoDB_cff') @@ -88,8 +90,9 @@ def getFileNames_das_client(era_name): INPUTFILES=getFileNames_das_client(options.era) if len(INPUTFILES)==0: - print("** WARNING: ** According to a DAS query no suitable data for test is available. Skipping test") - os._exit(0) + warnings.warn("** WARNING: ** According to a DAS query no suitable data for test is available. Skipping test!") + ### since there are tests depending on this one, if the query fails, let's exit with an error + os._exit(1) myFiles = cms.untracked.vstring() myFiles.extend([INPUTFILES[0][0].replace("\"","")]) diff --git a/CalibTracker/SiStripCommon/test/testProduceCalibrationTree_cfg.py b/CalibTracker/SiStripCommon/test/testProduceCalibrationTree_cfg.py index 328d3c4c97ec6..8391465d5a7e7 100644 --- a/CalibTracker/SiStripCommon/test/testProduceCalibrationTree_cfg.py +++ b/CalibTracker/SiStripCommon/test/testProduceCalibrationTree_cfg.py @@ -88,7 +88,6 @@ def alterTriggersForUnitTest(process): process.GlobalTag = GlobalTag(process.GlobalTag, options.conditionGT, options.conditionOverwrite) process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.destinations = ['cout', 'cerr'] if(options.unitTest): process.MessageLogger.cerr.FwkReport.reportEvery = 1 else: diff --git a/CalibTracker/SiStripDCS/python/dcs_print_summary_cfg.py b/CalibTracker/SiStripDCS/python/dcs_print_summary_cfg.py index 7fbb98022f6fc..4401f56b189ba 100644 --- a/CalibTracker/SiStripDCS/python/dcs_print_summary_cfg.py +++ b/CalibTracker/SiStripDCS/python/dcs_print_summary_cfg.py @@ -3,11 +3,16 @@ process = cms.Process("summary") -process.MessageLogger = cms.Service( "MessageLogger", - debugModules = cms.untracked.vstring( "*" ), - cout = cms.untracked.PSet( threshold = cms.untracked.string( "DEBUG" ) ), - destinations = cms.untracked.vstring( "cout" ) - ) +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('DEBUG') + ), + debugModules = cms.untracked.vstring('*') +) process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) diff --git a/CalibTracker/SiStripDCS/python/dcs_trend_monitor_cfg.py b/CalibTracker/SiStripDCS/python/dcs_trend_monitor_cfg.py index 13ef5f3592fc8..df10f64eaf06d 100644 --- a/CalibTracker/SiStripDCS/python/dcs_trend_monitor_cfg.py +++ b/CalibTracker/SiStripDCS/python/dcs_trend_monitor_cfg.py @@ -3,11 +3,16 @@ process = cms.Process("plot") -process.MessageLogger = cms.Service( "MessageLogger", - debugModules = cms.untracked.vstring( "*" ), - cout = cms.untracked.PSet( threshold = cms.untracked.string( "DEBUG" ) ), - destinations = cms.untracked.vstring( "cout" ) - ) +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('DEBUG') + ), + debugModules = cms.untracked.vstring('*') +) process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) diff --git a/CalibTracker/SiStripDCS/test/TkVoltageMapCreator_cfg.py b/CalibTracker/SiStripDCS/test/TkVoltageMapCreator_cfg.py index 972b2199e940f..316dbfe5dd1f4 100644 --- a/CalibTracker/SiStripDCS/test/TkVoltageMapCreator_cfg.py +++ b/CalibTracker/SiStripDCS/test/TkVoltageMapCreator_cfg.py @@ -4,9 +4,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations.append('infos') -process.MessageLogger.infos = cms.untracked.PSet( - placeholder = cms.untracked.bool(False), +process.MessageLogger.files.infos = cms.untracked.PSet( threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/CalibTracker/SiStripDCS/test/dcs_tkMap_cfg.py b/CalibTracker/SiStripDCS/test/dcs_tkMap_cfg.py index b3deb151d4f6e..e6d6e221a3ea5 100644 --- a/CalibTracker/SiStripDCS/test/dcs_tkMap_cfg.py +++ b/CalibTracker/SiStripDCS/test/dcs_tkMap_cfg.py @@ -3,11 +3,16 @@ process = cms.Process("plot") -process.MessageLogger = cms.Service( "MessageLogger", - debugModules = cms.untracked.vstring( "*" ), - cout = cms.untracked.PSet( threshold = cms.untracked.string( "DEBUG" ) ), - destinations = cms.untracked.vstring( "cout" ) - ) +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('DEBUG') + ), + debugModules = cms.untracked.vstring('*') +) process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) diff --git a/CalibTracker/SiStripESProducers/test/fedBadChannelFromNoiseRun_cfg.py b/CalibTracker/SiStripESProducers/test/fedBadChannelFromNoiseRun_cfg.py index fea3af2d25e15..237d678c39e1c 100644 --- a/CalibTracker/SiStripESProducers/test/fedBadChannelFromNoiseRun_cfg.py +++ b/CalibTracker/SiStripESProducers/test/fedBadChannelFromNoiseRun_cfg.py @@ -2,10 +2,13 @@ process = cms.Process("fedBadChannelFromNoiseRun") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') - ), - destinations = cms.untracked.vstring('cout') + ) ) process.load("Configuration.Geometry.GeometryRecoDB_cff") diff --git a/CalibTracker/SiStripESProducers/test/mergeBadChannel_cfg.py b/CalibTracker/SiStripESProducers/test/mergeBadChannel_cfg.py index fe7538f012b90..4520518b2f8a0 100644 --- a/CalibTracker/SiStripESProducers/test/mergeBadChannel_cfg.py +++ b/CalibTracker/SiStripESProducers/test/mergeBadChannel_cfg.py @@ -2,10 +2,13 @@ process = cms.Process("BadChannelMerge") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') - ), - destinations = cms.untracked.vstring('cout') + ) ) process.load("Configuration.Geometry.GeometryRecoDB_cff") diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBReaderTemplate_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBReaderTemplate_cfg.py index 93087430dd3b7..e56c6e25b4f15 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBReaderTemplate_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBReaderTemplate_cfg.py @@ -6,16 +6,17 @@ process = cms.Process("Reader") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('reader'), - threshold = cms.untracked.string('INFO'), - # Warning: debug output can be of ~ 250Mb for Noise and Pedestals - # Use this to see only the additional information - # threshold = cms.untracked.string('WARNING'), - # Use this to see both info and additional info - # threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('TAGNAMEReader_Ideal.log') + files = cms.untracked.PSet( + TAGNAMEReader_Ideal = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('INFO') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripApvGain_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripApvGain_cfg.py index 143129157b299..2bd1a7389f6af 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripApvGain_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripApvGain_cfg.py @@ -8,11 +8,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripApvGainDummyDBWriter'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('ApvGainBuilder.log') + files = cms.untracked.PSet( + ApvGainBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBackPlaneCorrection_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBackPlaneCorrection_cfg.py index 7724013abb1dd..e53c2c4b76285 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBackPlaneCorrection_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBackPlaneCorrection_cfg.py @@ -8,11 +8,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripBackPlaneCorrectionDummyDBWriter'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('BackPlaneCorrectionBuilder.log') + files = cms.untracked.PSet( + BackPlaneCorrectionBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBadChannel_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBadChannel_cfg.py index 3f077b80ae619..d47dfec1fa328 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBadChannel_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBadChannel_cfg.py @@ -8,11 +8,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripBadChannelDummyDBWriter'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('BadChannelBuilder.log') + files = cms.untracked.PSet( + BadChannelBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBadFiber_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBadFiber_cfg.py index 2ce6f490d9ae6..aef1d53b22ca4 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBadFiber_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBadFiber_cfg.py @@ -8,11 +8,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripBadFiberDummyDBWriter'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('BadFiberBuilder.log') + files = cms.untracked.PSet( + BadFiberBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBadModule_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBadModule_cfg.py index b1afe26fd387c..ff3cb9bb4b8ee 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBadModule_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBadModule_cfg.py @@ -8,11 +8,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripBadModuleDummyDBWriter'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('BadModuleBuilder.log') + files = cms.untracked.PSet( + BadModuleBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBaseDelay_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBaseDelay_cfg.py index 0b491e1fb4633..9ca10bb693067 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBaseDelay_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripBaseDelay_cfg.py @@ -9,11 +9,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripBaseDelayDummyDBWriter'), - threshold = cms.untracked.string('INFO'), - destinations = cms.untracked.vstring('BaseDelayBuilder.log') + files = cms.untracked.PSet( + BaseDelayBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('INFO') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripClusterThreshold_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripClusterThreshold_cfg.py index 958add7f2c8f8..8794b0d9d1dc0 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripClusterThreshold_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripClusterThreshold_cfg.py @@ -8,11 +8,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripThresholdDummyDBWriter'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('ClusterThresholdBuilder.log') + files = cms.untracked.PSet( + ClusterThresholdBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripConfObject_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripConfObject_cfg.py index 013f2f9377f77..7b0f65ae0bfe2 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripConfObject_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripConfObject_cfg.py @@ -8,11 +8,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripConfObjectDummyDBWriter'), - threshold = cms.untracked.string('INFO'), - destinations = cms.untracked.vstring('ConfObjectBuilder.log') + files = cms.untracked.PSet( + ConfObjectBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('INFO') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripDetVOff_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripDetVOff_cfg.py index 4eb01c7fa0c13..0673051511cd8 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripDetVOff_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripDetVOff_cfg.py @@ -8,11 +8,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripDetVOffDummyDBWriter'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('DetVOffBuilder.log') + files = cms.untracked.PSet( + DetVOffBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripFedCabling_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripFedCabling_cfg.py index d08bf2d02e119..5557af3a2bd7e 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripFedCabling_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripFedCabling_cfg.py @@ -8,11 +8,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripFedCablingDummyDBWriter'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('CablingBuilder.log') + files = cms.untracked.PSet( + CablingBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripLatency_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripLatency_cfg.py index 57c6c72a9e49e..a37dcfa5fd3e6 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripLatency_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripLatency_cfg.py @@ -9,11 +9,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripLatencyDummyDBWriter'), - threshold = cms.untracked.string('INFO'), - destinations = cms.untracked.vstring('LatencyBuilder.log') + files = cms.untracked.PSet( + LatencyBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('INFO') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripLorentzAngle_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripLorentzAngle_cfg.py index b778e342daddc..4f3c3df42078a 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripLorentzAngle_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripLorentzAngle_cfg.py @@ -8,11 +8,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripLorentzAngleDummyDBWriter'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('LorentzAngleBuilder.log') + files = cms.untracked.PSet( + LorentzAngleBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripNoises_DecMode_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripNoises_DecMode_cfg.py index 999bb1b99c2fe..59d8138edb51d 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripNoises_DecMode_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripNoises_DecMode_cfg.py @@ -8,11 +8,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripNoisesDummyDBWriter'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('NoisesBuilder.log') + files = cms.untracked.PSet( + NoisesBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripNoises_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripNoises_cfg.py index 999bb1b99c2fe..59d8138edb51d 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripNoises_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripNoises_cfg.py @@ -8,11 +8,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripNoisesDummyDBWriter'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('NoisesBuilder.log') + files = cms.untracked.PSet( + NoisesBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripPedestals_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripPedestals_cfg.py index e69518d6c8195..d579e8d4d4832 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripPedestals_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripPedestals_cfg.py @@ -8,11 +8,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripPedestalsDummyDBWriter'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('PedestalsBuilder.log') + files = cms.untracked.PSet( + PedestalsBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripThreshold_cfg.py b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripThreshold_cfg.py index 9328dccd57b05..c6b8471eb835f 100644 --- a/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripThreshold_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/DummyCondDBWriter_SiStripThreshold_cfg.py @@ -8,11 +8,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripThresholdDummyDBWriter'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('ThresholdBuilder.log') + files = cms.untracked.PSet( + ThresholdBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/SiStripApvGainBuilderFromTag_cfg.py b/CalibTracker/SiStripESProducers/test/python/SiStripApvGainBuilderFromTag_cfg.py index d758e1bbf14e6..faba774492166 100644 --- a/CalibTracker/SiStripESProducers/test/python/SiStripApvGainBuilderFromTag_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/SiStripApvGainBuilderFromTag_cfg.py @@ -2,8 +2,13 @@ process = cms.Process("APVGAINBUILDER") process.MessageLogger = cms.Service("MessageLogger", - threshold = cms.untracked.string('INFO'), - destinations = cms.untracked.vstring('cout') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True) + ), + threshold = cms.untracked.string('INFO') ) process.source = cms.Source("EmptySource", diff --git a/CalibTracker/SiStripESProducers/test/python/SiStripBadAPVListBuilder_byHand_cfg.py b/CalibTracker/SiStripESProducers/test/python/SiStripBadAPVListBuilder_byHand_cfg.py index 6f1bdb823ff44..3b190edaaf3a7 100644 --- a/CalibTracker/SiStripESProducers/test/python/SiStripBadAPVListBuilder_byHand_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/SiStripBadAPVListBuilder_byHand_cfg.py @@ -11,11 +11,14 @@ def getFileInPath(rfile): return None process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('cout') + debugModules = cms.untracked.vstring('') ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibTracker/SiStripESProducers/test/python/SiStripBadComponentBuilder_byHand_cfg.py b/CalibTracker/SiStripESProducers/test/python/SiStripBadComponentBuilder_byHand_cfg.py index f7d1e634ba678..535425fdffae8 100644 --- a/CalibTracker/SiStripESProducers/test/python/SiStripBadComponentBuilder_byHand_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/SiStripBadComponentBuilder_byHand_cfg.py @@ -3,11 +3,14 @@ process = cms.Process("CALIB") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('cout') + debugModules = cms.untracked.vstring('') ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibTracker/SiStripESProducers/test/python/SiStripFedCablingManipulator_cfg.py b/CalibTracker/SiStripESProducers/test/python/SiStripFedCablingManipulator_cfg.py index e21d47c9e327d..73543a101176e 100644 --- a/CalibTracker/SiStripESProducers/test/python/SiStripFedCablingManipulator_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/SiStripFedCablingManipulator_cfg.py @@ -9,14 +9,21 @@ process = cms.Process("Builder") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), CablingBuilder = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('CablingBuilder.log') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + CablingBuilder = cms.untracked.PSet( + + ) + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/checkphase2cabling_cfg.py b/CalibTracker/SiStripESProducers/test/python/checkphase2cabling_cfg.py index 727d4f7e3389f..a4fb8bc022a1a 100644 --- a/CalibTracker/SiStripESProducers/test/python/checkphase2cabling_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/checkphase2cabling_cfg.py @@ -4,11 +4,14 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring("*"), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('DEBUG') ), - destinations = cms.untracked.vstring('cout') + debugModules = cms.untracked.vstring('*') ) # How to use the EmptyIOVSource: diff --git a/CalibTracker/SiStripESProducers/test/python/siStripBackPlaneCorrectionDepDummyPrinter_cfg.py b/CalibTracker/SiStripESProducers/test/python/siStripBackPlaneCorrectionDepDummyPrinter_cfg.py index 23deb55e2aedc..e6c6b5db6cc5e 100644 --- a/CalibTracker/SiStripESProducers/test/python/siStripBackPlaneCorrectionDepDummyPrinter_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/siStripBackPlaneCorrectionDepDummyPrinter_cfg.py @@ -9,9 +9,16 @@ process = cms.Process("Reader") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('BackPlaneCorrectionReaderSummary'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('BackPlaneCorrectionReader.log') + files = cms.untracked.PSet( + BackPlaneCorrectionReader = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) diff --git a/CalibTracker/SiStripESProducers/test/python/siStripBackPlaneCorrectionDummyPrinter_cfg.py b/CalibTracker/SiStripESProducers/test/python/siStripBackPlaneCorrectionDummyPrinter_cfg.py index 09c14038018c4..cf095277da9fa 100644 --- a/CalibTracker/SiStripESProducers/test/python/siStripBackPlaneCorrectionDummyPrinter_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/siStripBackPlaneCorrectionDummyPrinter_cfg.py @@ -9,9 +9,16 @@ process = cms.Process("Reader") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('BackPlaneCorrectionReaderSummary'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('BackPlaneCorrectionReader.log') + files = cms.untracked.PSet( + BackPlaneCorrectionReader = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) diff --git a/CalibTracker/SiStripESProducers/test/python/siStripClusterThresholdDummyPrinter_cfg.py b/CalibTracker/SiStripESProducers/test/python/siStripClusterThresholdDummyPrinter_cfg.py index a266c6b43ee2d..95ed8f0a17ad6 100644 --- a/CalibTracker/SiStripESProducers/test/python/siStripClusterThresholdDummyPrinter_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/siStripClusterThresholdDummyPrinter_cfg.py @@ -9,14 +9,21 @@ process = cms.Process("Reader") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring('*'), ThresholdReader = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG') ), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('ClusterThresholdReader.log') + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + ClusterThresholdReader = cms.untracked.PSet( + + ) + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/siStripDelayDummyPrinter_cfg.py b/CalibTracker/SiStripESProducers/test/python/siStripDelayDummyPrinter_cfg.py index 9fa0a4c14f076..610c0339abbbe 100644 --- a/CalibTracker/SiStripESProducers/test/python/siStripDelayDummyPrinter_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/siStripDelayDummyPrinter_cfg.py @@ -11,14 +11,18 @@ # Use this to have also debug info (WARNING: the resulting file is > 200MB. process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring("*"), - DelayReaderSummary = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - DelayReaderDebug = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG') - ), - destinations = cms.untracked.vstring('DelayReaderSummary', 'DelayReaderDebug') + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + DelayReaderDebug = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG') + ), + DelayReaderSummary = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) # How to use the EmptyIOVSource: diff --git a/CalibTracker/SiStripESProducers/test/python/siStripDetVOffDummyPrinter_cfg.py b/CalibTracker/SiStripESProducers/test/python/siStripDetVOffDummyPrinter_cfg.py index da2556aa59a9c..b51697cc53dbe 100644 --- a/CalibTracker/SiStripESProducers/test/python/siStripDetVOffDummyPrinter_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/siStripDetVOffDummyPrinter_cfg.py @@ -9,17 +9,21 @@ process = cms.Process("Reader") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring("*"), - DetVOffReaderSummary = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') - ), - DetVOffReaderDebug = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('DetVOffReaderSummary', 'DetVOffReaderDebug') + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + DetVOffReaderDebug = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG') + ), + DetVOffReaderSummary = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) # Use this instead to see only the summary diff --git a/CalibTracker/SiStripESProducers/test/python/siStripGainDummyPrinter_cfg.py b/CalibTracker/SiStripESProducers/test/python/siStripGainDummyPrinter_cfg.py index e17f64baf4707..818f1c3599a7b 100644 --- a/CalibTracker/SiStripESProducers/test/python/siStripGainDummyPrinter_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/siStripGainDummyPrinter_cfg.py @@ -10,14 +10,18 @@ # Use this to have also debug info (WARNING: the resulting file is > 200MB. process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring("*"), - GainReaderSummary = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - GainReaderDebug = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG') - ), - destinations = cms.untracked.vstring('GainReaderSummary', 'GainReaderDebug') + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + GainReaderDebug = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG') + ), + GainReaderSummary = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) # How to use the EmptyIOVSource: diff --git a/CalibTracker/SiStripESProducers/test/python/siStripGainSimDummyPrinter_cfg.py b/CalibTracker/SiStripESProducers/test/python/siStripGainSimDummyPrinter_cfg.py index 8122077f55d3f..44451b6b27897 100644 --- a/CalibTracker/SiStripESProducers/test/python/siStripGainSimDummyPrinter_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/siStripGainSimDummyPrinter_cfg.py @@ -10,17 +10,21 @@ # Use this to have also debug info (WARNING: the resulting file is > 200MB. process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring("*"), - GainReaderSummary = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') - ), - GainReaderDebug = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('GainReaderSummary', 'GainReaderDebug') + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + GainReaderDebug = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG') + ), + GainReaderSummary = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) diff --git a/CalibTracker/SiStripESProducers/test/python/siStripLorentzAngleDepDummyPrinter_cfg.py b/CalibTracker/SiStripESProducers/test/python/siStripLorentzAngleDepDummyPrinter_cfg.py index d5a9de4ad1bbf..c0de5593ae5f1 100644 --- a/CalibTracker/SiStripESProducers/test/python/siStripLorentzAngleDepDummyPrinter_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/siStripLorentzAngleDepDummyPrinter_cfg.py @@ -11,14 +11,18 @@ # Use this to have also debug info (WARNING: the resulting file is > 200MB. process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring("*"), - LorentzAngleDepReaderSummary = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - LorentzAngleDepReaderDebug = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG') - ), - destinations = cms.untracked.vstring('LorentzAngleDepReaderSummary', 'LorentzAngleDepReaderDebug') + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + LorentzAngleDepReaderDebug = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG') + ), + LorentzAngleDepReaderSummary = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) # How to use the EmptyIOVSource: diff --git a/CalibTracker/SiStripESProducers/test/python/siStripLorentzAngleDummyPrinter_cfg.py b/CalibTracker/SiStripESProducers/test/python/siStripLorentzAngleDummyPrinter_cfg.py index 7be703965c39b..2fe7fb2f2345d 100644 --- a/CalibTracker/SiStripESProducers/test/python/siStripLorentzAngleDummyPrinter_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/siStripLorentzAngleDummyPrinter_cfg.py @@ -9,17 +9,21 @@ process = cms.Process("Reader") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring("*"), - LorentzAngleReaderSummary = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') - ), - LorentzAngleReaderDebug = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('LorentzAngleReaderSummary', 'LorentzAngleReaderDebug') + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + LorentzAngleReaderDebug = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG') + ), + LorentzAngleReaderSummary = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) diff --git a/CalibTracker/SiStripESProducers/test/python/siStripLorentzAngleSimDummyPrinter_cfg.py b/CalibTracker/SiStripESProducers/test/python/siStripLorentzAngleSimDummyPrinter_cfg.py index e15e0ea19812d..5abfc18a8161b 100644 --- a/CalibTracker/SiStripESProducers/test/python/siStripLorentzAngleSimDummyPrinter_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/siStripLorentzAngleSimDummyPrinter_cfg.py @@ -9,17 +9,27 @@ process = cms.Process("Reader") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring("*"), + LorentzAngleReaderDebug = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG') + ), LorentzAngleReaderSummary = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - LorentzAngleReaderDebug = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('LorentzAngleSimReaderSummary', 'LorentzAngleSimReaderDebug') + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + LorentzAngleSimReaderDebug = cms.untracked.PSet( + + ), + LorentzAngleSimReaderSummary = cms.untracked.PSet( + + ) + ) ) diff --git a/CalibTracker/SiStripESProducers/test/python/siStripNoisesDummyPrinter_cfg.py b/CalibTracker/SiStripESProducers/test/python/siStripNoisesDummyPrinter_cfg.py index 0729d6e4b0ba1..6e577db201641 100644 --- a/CalibTracker/SiStripESProducers/test/python/siStripNoisesDummyPrinter_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/siStripNoisesDummyPrinter_cfg.py @@ -10,17 +10,27 @@ # Use this to have also debug info (WARNING: the resulting file is > 200MB. process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring("*"), + PedestalsReaderDebug = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG') + ), PedestalsReaderSummary = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - PedestalsReaderDebug = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('NoisesReaderSummary', 'NoisesReaderDebug') + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + NoisesReaderDebug = cms.untracked.PSet( + + ), + NoisesReaderSummary = cms.untracked.PSet( + + ) + ) ) #process.MessageLogger = cms.Service("MessageLogger", diff --git a/CalibTracker/SiStripESProducers/test/python/siStripPedestalsDummyPrinter_cfg.py b/CalibTracker/SiStripESProducers/test/python/siStripPedestalsDummyPrinter_cfg.py index 302a2917c4c78..5d672091159d6 100644 --- a/CalibTracker/SiStripESProducers/test/python/siStripPedestalsDummyPrinter_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/siStripPedestalsDummyPrinter_cfg.py @@ -10,17 +10,21 @@ # Use this to have also debug info (WARNING: the resulting file is > 200MB. process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring("*"), - PedestalsReaderSummary = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') - ), - PedestalsReaderDebug = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('PedestalsReaderSummary', 'PedestalsReaderDebug') + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + PedestalsReaderDebug = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG') + ), + PedestalsReaderSummary = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) # Use this instead to see only the summary diff --git a/CalibTracker/SiStripESProducers/test/python/siStripThresholdDummyPrinter_cfg.py b/CalibTracker/SiStripESProducers/test/python/siStripThresholdDummyPrinter_cfg.py index 63df3e97d5740..38556a2b73ebe 100644 --- a/CalibTracker/SiStripESProducers/test/python/siStripThresholdDummyPrinter_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/siStripThresholdDummyPrinter_cfg.py @@ -9,14 +9,21 @@ process = cms.Process("Reader") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), ThresholdReader = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('ThresholdReader.log') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + ThresholdReader = cms.untracked.PSet( + + ) + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTIB_firstIOV_cfg.py b/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTIB_firstIOV_cfg.py index 067f3d35336b1..9ab7c6eee6a2b 100644 --- a/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTIB_firstIOV_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTIB_firstIOV_cfg.py @@ -3,11 +3,15 @@ process = cms.Process("CALIB") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), - QualityReader = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - destinations = cms.untracked.vstring('QualityReader') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + QualityReader = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTIB_secondIOV_cfg.py b/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTIB_secondIOV_cfg.py index cdfcd58e96dae..f1dfe02f3d7b6 100644 --- a/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTIB_secondIOV_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTIB_secondIOV_cfg.py @@ -3,11 +3,15 @@ process = cms.Process("CALIB") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), - QualityReader = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - destinations = cms.untracked.vstring('QualityReader') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + QualityReader = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTID_firstIOV_cfg.py b/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTID_firstIOV_cfg.py index 5a000de7d1564..fc618ed629c1d 100644 --- a/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTID_firstIOV_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTID_firstIOV_cfg.py @@ -3,11 +3,15 @@ process = cms.Process("CALIB") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), - QualityReader = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - destinations = cms.untracked.vstring('QualityReader') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + QualityReader = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTID_secondIOV_cfg.py b/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTID_secondIOV_cfg.py index 1cd2dbfb247fb..c9663da51a055 100644 --- a/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTID_secondIOV_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_createTID_secondIOV_cfg.py @@ -3,11 +3,15 @@ process = cms.Process("CALIB") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), - QualityReader = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - destinations = cms.untracked.vstring('QualityReader') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + QualityReader = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_merge_cfg.py b/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_merge_cfg.py index 57c7c5cb51bda..4995094bfb26f 100644 --- a/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_merge_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/DummyCondDBWriter_SiStripBadModule_fromMultipleDBSources_merge_cfg.py @@ -9,11 +9,15 @@ process = cms.Process("Reader") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), - QualityReader = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - destinations = cms.untracked.vstring('QualityReader') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + QualityReader = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/read_DummyCondDBWriter_SiStripQuality_cfg.py b/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/read_DummyCondDBWriter_SiStripQuality_cfg.py index 4d6cd4cc856f5..e215b65201de8 100644 --- a/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/read_DummyCondDBWriter_SiStripQuality_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/testSiStripBadStripfromMultipleDBSources/read_DummyCondDBWriter_SiStripQuality_cfg.py @@ -9,11 +9,15 @@ process = cms.Process("Reader") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), - QualityReader = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - destinations = cms.untracked.vstring('QualityReader') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + QualityReader = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripESProducers/test/python/testSiStripQualityESProducer_fromBadModuleConfigurableFakeESSource_cfg.py b/CalibTracker/SiStripESProducers/test/python/testSiStripQualityESProducer_fromBadModuleConfigurableFakeESSource_cfg.py index 3a5a8d3d4f325..1f4fd209cc817 100644 --- a/CalibTracker/SiStripESProducers/test/python/testSiStripQualityESProducer_fromBadModuleConfigurableFakeESSource_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/testSiStripQualityESProducer_fromBadModuleConfigurableFakeESSource_cfg.py @@ -3,14 +3,21 @@ process = cms.Process("CALIB") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), QualityReader = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('QualityReader.log') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + QualityReader = cms.untracked.PSet( + + ) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibTracker/SiStripESProducers/test/python/testSiStripQualityESProducer_fromBadStripFakeESSource_cfg.py b/CalibTracker/SiStripESProducers/test/python/testSiStripQualityESProducer_fromBadStripFakeESSource_cfg.py index 438fcb43b9ad4..912b996093866 100644 --- a/CalibTracker/SiStripESProducers/test/python/testSiStripQualityESProducer_fromBadStripFakeESSource_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/testSiStripQualityESProducer_fromBadStripFakeESSource_cfg.py @@ -3,11 +3,15 @@ process = cms.Process("CALIB") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), - destinations = cms.untracked.vstring('QualityReader'), - QualityReader = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + QualityReader = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibTracker/SiStripESProducers/test/python/testSiStripQualityESProducer_fromQualityFakeESSource_cfg.py b/CalibTracker/SiStripESProducers/test/python/testSiStripQualityESProducer_fromQualityFakeESSource_cfg.py index a4c5ec4901db8..a1262e1c3fb00 100644 --- a/CalibTracker/SiStripESProducers/test/python/testSiStripQualityESProducer_fromQualityFakeESSource_cfg.py +++ b/CalibTracker/SiStripESProducers/test/python/testSiStripQualityESProducer_fromQualityFakeESSource_cfg.py @@ -3,14 +3,21 @@ process = cms.Process("CALIB") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), QualityReader = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('QualityReader.log') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + QualityReader = cms.untracked.PSet( + + ) + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CalibTracker/SiStripLorentzAngle/BuildFile.xml b/CalibTracker/SiStripLorentzAngle/BuildFile.xml index 7315e9ccb4ef2..f0982b90dae3f 100644 --- a/CalibTracker/SiStripLorentzAngle/BuildFile.xml +++ b/CalibTracker/SiStripLorentzAngle/BuildFile.xml @@ -1,8 +1,10 @@ + - + + diff --git a/CalibTracker/SiStripLorentzAngle/plugins/BuildFile.xml b/CalibTracker/SiStripLorentzAngle/plugins/BuildFile.xml index a21787672db34..23a7694eabef2 100644 --- a/CalibTracker/SiStripLorentzAngle/plugins/BuildFile.xml +++ b/CalibTracker/SiStripLorentzAngle/plugins/BuildFile.xml @@ -16,9 +16,7 @@ - - diff --git a/CalibTracker/SiStripLorentzAngle/python/SQLiteCheck_cfg.py b/CalibTracker/SiStripLorentzAngle/python/SQLiteCheck_cfg.py index 9324438274f44..4f303e5cc1ebb 100644 --- a/CalibTracker/SiStripLorentzAngle/python/SQLiteCheck_cfg.py +++ b/CalibTracker/SiStripLorentzAngle/python/SQLiteCheck_cfg.py @@ -4,11 +4,17 @@ process = cms.Process("Reader") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring(''), - threshold = cms.untracked.string('INFO'), - destinations = cms.untracked.vstring('SQLiteCheck.log') + files = cms.untracked.PSet( + SQLiteCheck = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('INFO') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripLorentzAngle/python/SQLiteEnsembleGenerator_cfg.py b/CalibTracker/SiStripLorentzAngle/python/SQLiteEnsembleGenerator_cfg.py index 52288a4775a05..b9123b7aed64f 100644 --- a/CalibTracker/SiStripLorentzAngle/python/SQLiteEnsembleGenerator_cfg.py +++ b/CalibTracker/SiStripLorentzAngle/python/SQLiteEnsembleGenerator_cfg.py @@ -4,11 +4,17 @@ process = cms.Process("Builder") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripLorentzAngleDummyDBWriter'), - threshold = cms.untracked.string('DEBUG'), - destinations = cms.untracked.vstring('SQLiteGenerator.log') + files = cms.untracked.PSet( + SQLiteGenerator = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('DEBUG') ) process.maxEvents = cms.untracked.PSet( diff --git a/CalibTracker/SiStripLorentzAngle/test/SiStripCalibLorentzAngle.py b/CalibTracker/SiStripLorentzAngle/test/SiStripCalibLorentzAngle.py index 996928edb98eb..ce826d92bf82c 100644 --- a/CalibTracker/SiStripLorentzAngle/test/SiStripCalibLorentzAngle.py +++ b/CalibTracker/SiStripLorentzAngle/test/SiStripCalibLorentzAngle.py @@ -47,9 +47,9 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.debugModules = cms.untracked.vstring('sistripLACalib') -process.MessageLogger.destinations = cms.untracked.vstring('LACalibDebug_Calib') +process.MessageLogger.cerr.enable = False -process.MessageLogger.LACalibDebug_Calib = cms.untracked.PSet( +process.MessageLogger.files.LACalibDebug_Calib = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), noLineBreaks = cms.untracked.bool(False), DEBUG = cms.untracked.PSet(limit = cms.untracked.int32(0)) diff --git a/CalibTracker/SiStripLorentzAngle/test/SiStripLAProfileBooker.py b/CalibTracker/SiStripLorentzAngle/test/SiStripLAProfileBooker.py index a5c0fc344f329..7e769e678905f 100644 --- a/CalibTracker/SiStripLorentzAngle/test/SiStripLAProfileBooker.py +++ b/CalibTracker/SiStripLorentzAngle/test/SiStripLAProfileBooker.py @@ -55,9 +55,9 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.debugModules = cms.untracked.vstring('sistripLAProfile') -process.MessageLogger.destinations = cms.untracked.vstring('LAProfileDebug') +process.MessageLogger.cerr.enable = False -process.MessageLogger.LAProfileDebug = cms.untracked.PSet( +process.MessageLogger.files.LAProfileDebug = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), noLineBreaks = cms.untracked.bool(False), DEBUG = cms.untracked.PSet(limit = cms.untracked.int32(0)) diff --git a/CalibTracker/SiStripLorentzAngle/test/job_scripts/template.py b/CalibTracker/SiStripLorentzAngle/test/job_scripts/template.py index ec32dd798854a..0135f0609e770 100644 --- a/CalibTracker/SiStripLorentzAngle/test/job_scripts/template.py +++ b/CalibTracker/SiStripLorentzAngle/test/job_scripts/template.py @@ -54,9 +54,9 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.debugModules = cms.untracked.vstring('sistripLAProfile') -process.MessageLogger.destinations = cms.untracked.vstring('MY_DEBUG_NUMBER') +process.MessageLogger.cerr.enable = False -process.MessageLogger.MY_DEBUG_NUMBER = cms.untracked.PSet( +process.MessageLogger.files.MY_DEBUG_NUMBER = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), noLineBreaks = cms.untracked.bool(False), DEBUG = cms.untracked.PSet(limit = cms.untracked.int32(0)) diff --git a/CalibTracker/SiStripQuality/interface/SiStripBadAPVAlgorithmFromClusterOccupancy.h b/CalibTracker/SiStripQuality/interface/SiStripBadAPVAlgorithmFromClusterOccupancy.h index ab35770a6ba5b..baa9cdd77394d 100644 --- a/CalibTracker/SiStripQuality/interface/SiStripBadAPVAlgorithmFromClusterOccupancy.h +++ b/CalibTracker/SiStripQuality/interface/SiStripBadAPVAlgorithmFromClusterOccupancy.h @@ -31,7 +31,6 @@ #include "TFile.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "CalibTracker/SiStripQuality/interface/SiStripQualityHistos.h" @@ -58,7 +57,7 @@ class SiStripBadAPVAlgorithmFromClusterOccupancy { WriteOutputFile_ = WriteOutputFile; } void setTrackerGeometry(const TrackerGeometry* tkgeom) { TkGeom = tkgeom; } - void extractBadAPVs(SiStripQuality*, HistoMap&, edm::ESHandle&); + void extractBadAPVs(SiStripQuality*, HistoMap&, const SiStripQuality*); private: struct Apv { @@ -75,7 +74,7 @@ class SiStripBadAPVAlgorithmFromClusterOccupancy { std::vector&, std::pair*, std::vector&, - edm::ESHandle&); + const SiStripQuality*); struct pHisto { pHisto() : _NEntries(0), _NBins(0){}; diff --git a/CalibTracker/SiStripQuality/interface/SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy.h b/CalibTracker/SiStripQuality/interface/SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy.h index c7642b27091bd..970507f92f52c 100644 --- a/CalibTracker/SiStripQuality/interface/SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy.h +++ b/CalibTracker/SiStripQuality/interface/SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy.h @@ -31,7 +31,6 @@ #include "TFile.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "CalibTracker/SiStripQuality/interface/SiStripQualityHistos.h" @@ -70,7 +69,7 @@ class SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy { WriteDQMHistograms_ = WriteDQMHistograms; } void setTrackerGeometry(const TrackerGeometry* tkgeom) { TkGeom = tkgeom; } - void extractBadAPVSandStrips(SiStripQuality*, HistoMap&, edm::ESHandle&); + void extractBadAPVSandStrips(SiStripQuality*, HistoMap&, const SiStripQuality*); private: struct Apv { @@ -90,7 +89,7 @@ class SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy { std::vector&, std::pair*, std::vector&, - edm::ESHandle&); + const SiStripQuality*); void iterativeSearch(Apv&, std::vector&, int); diff --git a/CalibTracker/SiStripQuality/src/SiStripBadAPVAlgorithmFromClusterOccupancy.cc b/CalibTracker/SiStripQuality/src/SiStripBadAPVAlgorithmFromClusterOccupancy.cc index a72463476c5a4..544b20a27449d 100644 --- a/CalibTracker/SiStripQuality/src/SiStripBadAPVAlgorithmFromClusterOccupancy.cc +++ b/CalibTracker/SiStripQuality/src/SiStripBadAPVAlgorithmFromClusterOccupancy.cc @@ -29,7 +29,7 @@ SiStripBadAPVAlgorithmFromClusterOccupancy::~SiStripBadAPVAlgorithmFromClusterOc void SiStripBadAPVAlgorithmFromClusterOccupancy::extractBadAPVs(SiStripQuality* siStripQuality, HistoMap& DM, - edm::ESHandle& inSiStripQuality) { + const SiStripQuality* inSiStripQuality) { LogTrace("SiStripBadAPVAlgorithmFromClusterOccupancy") << "[SiStripBadAPVAlgorithmFromClusterOccupancy::extractBadAPVs] " << std::endl; @@ -450,7 +450,7 @@ void SiStripBadAPVAlgorithmFromClusterOccupancy::AnalyzeOccupancy(SiStripQuality std::vector& medianValues, std::pair* MeanAndRms, std::vector& BadStripList, - edm::ESHandle& InSiStripQuality) { + const SiStripQuality* InSiStripQuality) { int Moduleposition; uint32_t Detid; diff --git a/CalibTracker/SiStripQuality/src/SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy.cc b/CalibTracker/SiStripQuality/src/SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy.cc index c024ace62e00a..c28ceb4d7b99f 100644 --- a/CalibTracker/SiStripQuality/src/SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy.cc +++ b/CalibTracker/SiStripQuality/src/SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy.cc @@ -33,7 +33,7 @@ SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy::~SiStripBadAPVandHotStrip } void SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy::extractBadAPVSandStrips( - SiStripQuality* siStripQuality, HistoMap& DM, edm::ESHandle& inSiStripQuality) { + SiStripQuality* siStripQuality, HistoMap& DM, const SiStripQuality* inSiStripQuality) { LogTrace("SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy") << "[SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy::extractBadAPVs] " << std::endl; @@ -471,12 +471,11 @@ void SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy::CalculateMeanAndRMS( } } -void SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy::AnalyzeOccupancy( - SiStripQuality* quality, - std::vector& medianValues, - std::pair* MeanAndRms, - std::vector& BadStripList, - edm::ESHandle& InSiStripQuality) { +void SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy::AnalyzeOccupancy(SiStripQuality* quality, + std::vector& medianValues, + std::pair* MeanAndRms, + std::vector& BadStripList, + const SiStripQuality* InSiStripQuality) { int Moduleposition; uint32_t Detid; diff --git a/CalibTracker/SiStripQuality/test/test_SiStripQualityStatistics_cfg.py b/CalibTracker/SiStripQuality/test/test_SiStripQualityStatistics_cfg.py index 5cd29d7e52e34..8f2731b3c16b6 100644 --- a/CalibTracker/SiStripQuality/test/test_SiStripQualityStatistics_cfg.py +++ b/CalibTracker/SiStripQuality/test/test_SiStripQualityStatistics_cfg.py @@ -24,9 +24,11 @@ # Messages ################################################################### process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiStripQualityStatistics") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiStripQualityStatistics=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("WARNING"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -34,7 +36,6 @@ ), SiStripQualityStatistics = cms.untracked.PSet( limit = cms.untracked.int32(-1)), ) -process.MessageLogger.statistics.append('cout') # process.MessageLogger = cms.Service("MessageLogger", # cout = cms.untracked.PSet(threshold = cms.untracked.string('WARNING')), diff --git a/Calibration/EcalAlCaRecoProducers/test/alcaSkimming.py b/Calibration/EcalAlCaRecoProducers/test/alcaSkimming.py index d86062c6e48c9..e196e9ddd676e 100644 --- a/Calibration/EcalAlCaRecoProducers/test/alcaSkimming.py +++ b/Calibration/EcalAlCaRecoProducers/test/alcaSkimming.py @@ -170,13 +170,11 @@ process.load('Calibration.EcalAlCaRecoProducers.pdfSystematics_cff') process.MessageLogger.cerr = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), noTimeStamps = cms.untracked.bool(False), FwkReport = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), reportEvery = cms.untracked.int32(1000), limit = cms.untracked.int32(10000000) ), @@ -184,11 +182,9 @@ limit = cms.untracked.int32(10000000) ), Root_NoDictionary = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), limit = cms.untracked.int32(0) ), FwkSummary = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), reportEvery = cms.untracked.int32(1), limit = cms.untracked.int32(10000000) ), diff --git a/Calibration/EcalTBTools/interface/TB06TreeH2.h b/Calibration/EcalTBTools/interface/TB06TreeH2.h index 41157064759b6..667f3023646aa 100644 --- a/Calibration/EcalTBTools/interface/TB06TreeH2.h +++ b/Calibration/EcalTBTools/interface/TB06TreeH2.h @@ -4,8 +4,7 @@ // includes #include -#include "TClonesArray.h" - +class TClonesArray; class TFile; class TTree; diff --git a/Calibration/EcalTBTools/src/TB06TreeH2.cc b/Calibration/EcalTBTools/src/TB06TreeH2.cc index 518e58040c260..0574556d9b27f 100644 --- a/Calibration/EcalTBTools/src/TB06TreeH2.cc +++ b/Calibration/EcalTBTools/src/TB06TreeH2.cc @@ -2,6 +2,7 @@ #include "Calibration/EcalTBTools/interface/TB06TreeH2.h" #include "TFile.h" #include "TTree.h" +#include "TClonesArray.h" #include diff --git a/Calibration/EcalTBTools/src/classes.h b/Calibration/EcalTBTools/src/classes.h index f75b9040a82c2..312a751e50ccc 100644 --- a/Calibration/EcalTBTools/src/classes.h +++ b/Calibration/EcalTBTools/src/classes.h @@ -1,5 +1,8 @@ #include "Calibration/EcalTBTools/interface/TB06Reco.h" #include "Calibration/EcalTBTools/interface/TB06RecoH2.h" +#include "TFile.h" +#include "TTree.h" +#include "TClonesArray.h" namespace Calibration_EcalTBTools { struct dictionary {}; diff --git a/Calibration/HcalAlCaRecoProducers/interface/AlCaEcalHcalReadoutsProducer.h b/Calibration/HcalAlCaRecoProducers/interface/AlCaEcalHcalReadoutsProducer.h index ab4c1659785d8..71980b641a95c 100644 --- a/Calibration/HcalAlCaRecoProducers/interface/AlCaEcalHcalReadoutsProducer.h +++ b/Calibration/HcalAlCaRecoProducers/interface/AlCaEcalHcalReadoutsProducer.h @@ -14,7 +14,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" diff --git a/Calibration/HcalAlCaRecoProducers/interface/AlCaHcalNoiseProducer.h b/Calibration/HcalAlCaRecoProducers/interface/AlCaHcalNoiseProducer.h index e955773e1c865..f1c5d19926916 100644 --- a/Calibration/HcalAlCaRecoProducers/interface/AlCaHcalNoiseProducer.h +++ b/Calibration/HcalAlCaRecoProducers/interface/AlCaHcalNoiseProducer.h @@ -14,7 +14,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" diff --git a/Calibration/HcalAlCaRecoProducers/plugins/AlCaGammaJetSelector.cc b/Calibration/HcalAlCaRecoProducers/plugins/AlCaGammaJetSelector.cc index e57a073207601..6312302cfde2f 100644 --- a/Calibration/HcalAlCaRecoProducers/plugins/AlCaGammaJetSelector.cc +++ b/Calibration/HcalAlCaRecoProducers/plugins/AlCaGammaJetSelector.cc @@ -25,6 +25,7 @@ #include "FWCore/Framework/interface/stream/EDFilter.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/EgammaCandidates/interface/Photon.h" @@ -143,7 +144,7 @@ bool AlCaGammaJetSelector::filter(edm::Event& iEvent, const edm::EventSetup& iSe if (!(select(photons, pfjets))) return false; - //std::cout << "good event\n"; + edm::LogVerbatim("AlCaGammaJet") << "good event\n"; nSelected_++; return true; } diff --git a/Calibration/HcalAlCaRecoProducers/plugins/AlCaHBHEMuonFilter.cc b/Calibration/HcalAlCaRecoProducers/plugins/AlCaHBHEMuonFilter.cc index 12e1244bb599c..5c79a9ba8dc5e 100644 --- a/Calibration/HcalAlCaRecoProducers/plugins/AlCaHBHEMuonFilter.cc +++ b/Calibration/HcalAlCaRecoProducers/plugins/AlCaHBHEMuonFilter.cc @@ -12,7 +12,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Run.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/LuminosityBlock.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" diff --git a/Calibration/HcalAlCaRecoProducers/plugins/AlCaHEMuonFilter.cc b/Calibration/HcalAlCaRecoProducers/plugins/AlCaHEMuonFilter.cc index 6ba6617073ffe..f2b81201adf6f 100644 --- a/Calibration/HcalAlCaRecoProducers/plugins/AlCaHEMuonFilter.cc +++ b/Calibration/HcalAlCaRecoProducers/plugins/AlCaHEMuonFilter.cc @@ -12,7 +12,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Run.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/LuminosityBlock.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" diff --git a/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsoTracksFilter.cc b/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsoTracksFilter.cc index ff8b3ea2304c8..70629da540145 100644 --- a/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsoTracksFilter.cc +++ b/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsoTracksFilter.cc @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/stream/EDFilter.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/Run.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/LuminosityBlock.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" diff --git a/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsoTracksProducerFilter.cc b/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsoTracksProducerFilter.cc index 754886ac18382..a0521f4d4f885 100644 --- a/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsoTracksProducerFilter.cc +++ b/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsoTracksProducerFilter.cc @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/stream/EDFilter.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/Run.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/LuminosityBlock.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" diff --git a/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsolatedBunchFilter.cc b/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsolatedBunchFilter.cc index 34dc963286a33..fbfafc19e220c 100644 --- a/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsolatedBunchFilter.cc +++ b/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsolatedBunchFilter.cc @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/stream/EDFilter.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/Run.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/LuminosityBlock.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" diff --git a/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsolatedBunchSelector.cc b/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsolatedBunchSelector.cc index 54332a05caa61..dba47efd6f027 100644 --- a/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsolatedBunchSelector.cc +++ b/Calibration/HcalAlCaRecoProducers/plugins/AlCaIsolatedBunchSelector.cc @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/stream/EDFilter.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/Run.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/LuminosityBlock.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" diff --git a/Calibration/HcalAlCaRecoProducers/plugins/AlCaLowPUHBHEMuonFilter.cc b/Calibration/HcalAlCaRecoProducers/plugins/AlCaLowPUHBHEMuonFilter.cc index 781be61d8cdef..da32f27fd9baf 100644 --- a/Calibration/HcalAlCaRecoProducers/plugins/AlCaLowPUHBHEMuonFilter.cc +++ b/Calibration/HcalAlCaRecoProducers/plugins/AlCaLowPUHBHEMuonFilter.cc @@ -12,7 +12,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Run.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/LuminosityBlock.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -144,10 +143,14 @@ bool AlCaLowPUHBHEMuonFilter::filter(edm::Event& iEvent, edm::EventSetup const& const std::vector& triggerNames_ = triggerNames.triggerNames(); for (unsigned int iHLT = 0; iHLT < triggerResults->size(); iHLT++) { int hlt = triggerResults->accept(iHLT); - //std::cout << "trigger names: "< 0) ok = true; #ifdef EDM_ML_DEBUG diff --git a/Calibration/HcalAlCaRecoProducers/src/AlCaDiJetsProducer.cc b/Calibration/HcalAlCaRecoProducers/src/AlCaDiJetsProducer.cc index 1bde66ae4bd2c..4672ab10cbb50 100644 --- a/Calibration/HcalAlCaRecoProducers/src/AlCaDiJetsProducer.cc +++ b/Calibration/HcalAlCaRecoProducers/src/AlCaDiJetsProducer.cc @@ -7,7 +7,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" diff --git a/Calibration/HcalAlCaRecoProducers/src/AlCaGammaJetProducer.cc b/Calibration/HcalAlCaRecoProducers/src/AlCaGammaJetProducer.cc index 197568fa38c11..944a3564b1b7c 100644 --- a/Calibration/HcalAlCaRecoProducers/src/AlCaGammaJetProducer.cc +++ b/Calibration/HcalAlCaRecoProducers/src/AlCaGammaJetProducer.cc @@ -7,7 +7,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -298,7 +297,7 @@ void AlCaGammaJetProducer::produce(edm::StreamID, edm::Event& iEvent, const edm: for (int iPho = 0; iPho < int(photon.size()); ++iPho) { edm::Ref photonRef(phoHandle, iPho); if (!photonRef) { - std::cout << "failed ref" << std::endl; + edm::LogVerbatim("AlCaGammaJet") << "failed ref"; miniLoosePhoton.push_back(-1); miniTightPhoton.push_back(-1); } else { diff --git a/Calibration/HcalAlCaRecoProducers/src/AlCaHBHEMuonProducer.cc b/Calibration/HcalAlCaRecoProducers/src/AlCaHBHEMuonProducer.cc index f9624f7e77575..9a556e426f578 100644 --- a/Calibration/HcalAlCaRecoProducers/src/AlCaHBHEMuonProducer.cc +++ b/Calibration/HcalAlCaRecoProducers/src/AlCaHBHEMuonProducer.cc @@ -16,7 +16,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Run.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" diff --git a/Calibration/HcalAlCaRecoProducers/src/AlCaHOCalibProducer.cc b/Calibration/HcalAlCaRecoProducers/src/AlCaHOCalibProducer.cc index 7192c9bb1ca1b..2f9bf7975ccc3 100644 --- a/Calibration/HcalAlCaRecoProducers/src/AlCaHOCalibProducer.cc +++ b/Calibration/HcalAlCaRecoProducers/src/AlCaHOCalibProducer.cc @@ -81,7 +81,6 @@ Ring 0 L0 : Width Tray 6:266.6, 5&4:325.6, 3:330.6, 2:341.6, 1:272.6 #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -232,8 +231,7 @@ class AlCaHOCalibProducer : public edm::one::EDProducer theHcalChStatus; - edm::ESHandle hcalSevLvlComputerHndl; + const HcalSeverityLevelComputer* theHcalSevLvlComputer; int Nevents; }; @@ -348,7 +346,7 @@ void AlCaHOCalibProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe int Noccu_old = Noccu; edm::View::const_iterator muon1; - hcalSevLvlComputerHndl = iSetup.getHandle(tok_hcalSevLvlComputer_); + theHcalSevLvlComputer = &iSetup.getData(tok_hcalSevLvlComputer_); MagneticField const& magField = iSetup.getData(tok_magField_); @@ -407,7 +405,6 @@ void AlCaHOCalibProducer::fillHOStore(const reco::TrackRef& ncosm, const CaloSubdetectorGeometry* gHO, const MagneticField& magField) { // Get Hcal Severity Level Computer, so that the severity of each rechit flag/status may be determined - // edm::ESHandle hcalSevLvlComputerHndl; int charge = ncosm->charge(); @@ -886,7 +883,7 @@ void AlCaHOCalibProducer::fillHOStore(const reco::TrackRef& ncosm, // Get Channel Quality information for the given detID unsigned theStatusValue = theHcalChStatus->getValues(id)->getValue(); // Now get severity of problems for the given detID, based on the rechit flag word and the channel quality status value - int hitSeverity = hcalSevLvlComputerHndl->getSeverityLevel(id, (*jk).flags(), theStatusValue); + int hitSeverity = theHcalSevLvlComputer->getSeverityLevel(id, (*jk).flags(), theStatusValue); tmpHOCalib.hoflag = hitSeverity; int crphi = tmpphi + 6; if (crphi > 72) diff --git a/Calibration/HcalAlCaRecoProducers/src/AlCaHcalNoiseProducer.cc b/Calibration/HcalAlCaRecoProducers/src/AlCaHcalNoiseProducer.cc index 58f3f4999f7a6..294aa251650f3 100644 --- a/Calibration/HcalAlCaRecoProducers/src/AlCaHcalNoiseProducer.cc +++ b/Calibration/HcalAlCaRecoProducers/src/AlCaHcalNoiseProducer.cc @@ -217,8 +217,8 @@ void AlCaHcalNoiseProducer::produce(edm::Event& iEvent, const edm::EventSetup& i // this fed has data -- lets copy it FEDRawData& fedDataProd = outputFEDs->FEDData(j); if (fedDataProd.size() != 0) { - // std::cout << " More than one FEDRawDataCollection with data in FED "; - // std::cout << j << " Skipping the 2nd\n"; + edm::LogWarning("HcalNoise") << " More than one FEDRawDataCollection with data in FED " << j + << " Skipping the 2nd\n"; continue; } fedDataProd.resize(size); diff --git a/Calibration/HcalAlCaRecoProducers/src/AlCaIsoTracksProducer.cc b/Calibration/HcalAlCaRecoProducers/src/AlCaIsoTracksProducer.cc index 157129f9ceab3..498b11da3fc04 100644 --- a/Calibration/HcalAlCaRecoProducers/src/AlCaIsoTracksProducer.cc +++ b/Calibration/HcalAlCaRecoProducers/src/AlCaIsoTracksProducer.cc @@ -16,7 +16,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" diff --git a/Calibration/HcalAlCaRecoProducers/src/ProducerAnalyzer.h b/Calibration/HcalAlCaRecoProducers/src/ProducerAnalyzer.h index 3f404ce48c0f0..05cb0dfc7966a 100644 --- a/Calibration/HcalAlCaRecoProducers/src/ProducerAnalyzer.h +++ b/Calibration/HcalAlCaRecoProducers/src/ProducerAnalyzer.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" diff --git a/Calibration/HcalAlCaRecoProducers/test/AlCaIsoTrackFilterProducer_cfg.py b/Calibration/HcalAlCaRecoProducers/test/AlCaIsoTrackFilterProducer_cfg.py index eecff400e4145..47ee3808f0acd 100644 --- a/Calibration/HcalAlCaRecoProducers/test/AlCaIsoTrackFilterProducer_cfg.py +++ b/Calibration/HcalAlCaRecoProducers/test/AlCaIsoTrackFilterProducer_cfg.py @@ -14,7 +14,7 @@ process.GlobalTag.globaltag=autoCond['run2_mc'] if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HcalIsoTrack') + process.MessageLogger.HcalIsoTrack=dict() process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) diff --git a/Calibration/HcalCalibAlgos/interface/CommonUsefulStuff.h b/Calibration/HcalCalibAlgos/interface/CommonUsefulStuff.h index d073da89161b9..c26f54556e5fa 100644 --- a/Calibration/HcalCalibAlgos/interface/CommonUsefulStuff.h +++ b/Calibration/HcalCalibAlgos/interface/CommonUsefulStuff.h @@ -1,9 +1,8 @@ -#ifndef CommonUsefulStuff_h -#define CommonUsefulStuff_h +#ifndef Calibration_HcalCalibALgos_CommonUsefulStuff_h +#define Calibration_HcalCalibALgos_CommonUsefulStuff_h #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" diff --git a/Calibration/HcalCalibAlgos/macros/CalibFitPlots.C b/Calibration/HcalCalibAlgos/macros/CalibFitPlots.C index c333f473f80fa..d33eb4895d878 100644 --- a/Calibration/HcalCalibAlgos/macros/CalibFitPlots.C +++ b/Calibration/HcalCalibAlgos/macros/CalibFitPlots.C @@ -952,10 +952,14 @@ void PlotHist(const char* infile, std::string name1[5] = {"Z0", "Z1", "Z2", "Z3", "Z4"}; std::string name2[5] = {"L0", "L1", "L2", "L3", "L4"}; std::string name3[5] = {"V0", "V1", "V2", "V3", "V4"}; - std::string name4[12] = {"etaB31", + std::string name4[16] = {"etaB31", "etaB32", "etaB33", "etaB34", + "etaB21", + "etaB22", + "etaB23", + "etaB24", "etaB11", "etaB12", "etaB13", @@ -971,10 +975,14 @@ void PlotHist(const char* infile, "Tracks with p = 40:60 GeV", "Tracks with p = 60:100 GeV", "Tracks with p = 20:100 GeV"}; - std::string title1[12] = {"Tracks with p = 40:60 GeV (Barrel)", + std::string title1[16] = {"Tracks with p = 40:60 GeV (Barrel)", "Tracks with p = 40:60 GeV (Transition)", "Tracks with p = 40:60 GeV (Endcap)", "Tracks with p = 40:60 GeV", + "Tracks with p = 30:40 GeV (Barrel)", + "Tracks with p = 30:40 GeV (Transition)", + "Tracks with p = 30:40 GeV (Endcap)", + "Tracks with p = 30:40 GeV", "Tracks with p = 20:30 GeV (Barrel)", "Tracks with p = 20:30 GeV (Transition)", "Tracks with p = 20:30 GeV (Endcap)", @@ -1007,7 +1015,7 @@ void PlotHist(const char* infile, TFile* file = new TFile(infile); TLine* line(0); char name[100], namep[100]; - int kmax = (mode == 4) ? 12 : (((mode < 1) && (mode > 5)) ? 6 : 5); + int kmax = (mode == 4) ? 16 : (((mode < 1) && (mode > 5)) ? 6 : 5); for (int k = 0; k < kmax; ++k) { if (mode == 1) { sprintf(name, "%s%s", prefix.c_str(), name1[k].c_str()); diff --git a/Calibration/HcalCalibAlgos/plugins/AnalyzerMinbias.cc b/Calibration/HcalCalibAlgos/plugins/AnalyzerMinbias.cc index 5e7f33e036b81..133dac4ac232b 100644 --- a/Calibration/HcalCalibAlgos/plugins/AnalyzerMinbias.cc +++ b/Calibration/HcalCalibAlgos/plugins/AnalyzerMinbias.cc @@ -42,24 +42,18 @@ #include "FWCore/Common/interface/TriggerNames.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Run.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "Geometry/Records/interface/IdealGeometryRecord.h" -#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "Geometry/CaloGeometry/interface/CaloCellGeometry.h" - #include "TFile.h" #include "TH1.h" #include "TH2.h" #include "TTree.h" -//#define EDM_ML_DEBUG +#define EDM_ML_DEBUG namespace HcalMinbias {} diff --git a/Calibration/HcalCalibAlgos/plugins/Analyzer_minbias.cc b/Calibration/HcalCalibAlgos/plugins/Analyzer_minbias.cc index af311b27c5060..4798396530c3f 100644 --- a/Calibration/HcalCalibAlgos/plugins/Analyzer_minbias.cc +++ b/Calibration/HcalCalibAlgos/plugins/Analyzer_minbias.cc @@ -16,8 +16,6 @@ #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h" #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerRecord.h" #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerObjectMapRecord.h" -#include "CondFormats/L1TObjects/interface/L1GtTriggerMenu.h" -#include "CondFormats/DataRecord/interface/L1GtTriggerMenuRcd.h" #include "DataFormats/FEDRawData/interface/FEDRawData.h" #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" #include "DataFormats/FEDRawData/interface/FEDNumbering.h" @@ -60,6 +58,7 @@ namespace cms { tok_hbheNorm_ = consumes(edm::InputTag("hbhereco")); tok_respCorr_ = esConsumes(); + tok_l1gt_ = esConsumes(); theRecalib = iConfig.getParameter("Recalib"); @@ -82,7 +81,7 @@ namespace cms { void Analyzer_minbias::beginRun(const edm::Run&, const edm::EventSetup&) { nevent_run = 0; } void Analyzer_minbias::endRun(const edm::Run& r, const edm::EventSetup&) { - edm::LogInfo("AnalyzerMB") << " Runnumber " << r.run() << " Nevents " << nevent_run; + edm::LogVerbatim("AnalyzerMB") << " Runnumber " << r.run() << " Nevents " << nevent_run; } void Analyzer_minbias::beginJob() { @@ -112,7 +111,7 @@ namespace cms { myTree->Branch("occup", &occup, "occup/F"); - edm::LogInfo("AnalyzerMB") << " Before ordering Histos "; + edm::LogVerbatim("AnalyzerMB") << " Before ordering Histos "; char str0[32]; char str1[32]; @@ -140,7 +139,7 @@ namespace cms { sprintf(str10, "vpl%d", k); sprintf(str11, "vmin%d", k); - // edm::LogInfo("AnalyzerMB")<<" "<make(str0, "h0", 320, -10., 10.); @@ -152,7 +151,7 @@ namespace cms { } else { // HF // first order moment - // edm::LogInfo("AnalyzerMB")<<" "<make(str0, "h0", 320, -10., 10.); hCalo2[i][j] = fs->make(str1, "h1", 320, -10., 10.); @@ -178,13 +177,13 @@ namespace cms { hbheSignalE = fs->make("hbheSignalE", "hbheSignalE", 320, -10., 10.); hfSignalE = fs->make("hfSignalE", "hfSignalE", 320, -10., 10.); - edm::LogInfo("AnalyzerMB") << " After ordering Histos "; + edm::LogVerbatim("AnalyzerMB") << " After ordering Histos "; std::string ccc = "noise_0.dat"; myout_hcal = new std::ofstream(ccc.c_str()); if (!myout_hcal) - edm::LogInfo("AnalyzerMB") << " Output file not open!!! "; + edm::LogVerbatim("AnalyzerMB") << " Output file not open!!! "; // for (int i = 0; i < 5; i++) { @@ -251,8 +250,8 @@ namespace cms { depth = j; ieta = l; iphi = k; - edm::LogInfo("AnalyzerMB") << " Result Plus= " << mysubd << " " << ieta << " " << iphi << " mom0 " - << mom0_MB << " mom1 " << mom1_MB << " mom2 " << mom2_MB; + edm::LogVerbatim("AnalyzerMB") << " Result Plus= " << mysubd << " " << ieta << " " << iphi << " mom0 " + << mom0_MB << " mom1 " << mom1_MB << " mom2 " << mom2_MB; myTree->Fill(); ii++; } // Pl > 0 @@ -274,8 +273,8 @@ namespace cms { depth = j; ieta = -1 * l; iphi = k; - edm::LogInfo("AnalyzerMB") << " Result Minus= " << mysubd << " " << ieta << " " << iphi << " mom0 " - << mom0_MB << " mom1 " << mom1_MB << " mom2 " << mom2_MB; + edm::LogVerbatim("AnalyzerMB") << " Result Minus= " << mysubd << " " << ieta << " " << iphi << " mom0 " + << mom0_MB << " mom1 " << mom1_MB << " mom2 " << mom2_MB; myTree->Fill(); ii++; @@ -285,7 +284,7 @@ namespace cms { } // depth } //subd - edm::LogInfo("AnalyzerMB") << " Number of cells " << ii; + edm::LogVerbatim("AnalyzerMB") << " Number of cells " << ii; // hOutputFile->Write(); // hOutputFile->cd(); @@ -308,7 +307,7 @@ namespace cms { // hfSignalE->Write() ; // hOutputFile->Close() ; - edm::LogInfo("AnalyzerMB") << " File is closed "; + edm::LogVerbatim("AnalyzerMB") << " File is closed "; return; } @@ -319,28 +318,28 @@ namespace cms { // ------------ method called to produce the data ------------ void Analyzer_minbias::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - edm::LogInfo("AnalyzerMB") << " Start Analyzer_minbias::analyze " << nevent; + edm::LogVerbatim("AnalyzerMB") << " Start Analyzer_minbias::analyze " << nevent; nevent++; nevent_run++; - using namespace edm; float rnnum = (float)iEvent.run(); - std::vector theProvenance; + std::vector theProvenance; iEvent.getAllStableProvenance(theProvenance); for (auto const& provenance : theProvenance) { - edm::LogInfo("AnalyzerMB") << " Print all process/modulelabel/product names " << provenance->processName() - << " , " << provenance->moduleLabel() << " , " << provenance->productInstanceName(); + edm::LogVerbatim("AnalyzerMB") << " Print all process/modulelabel/product names " << provenance->processName() + << " , " << provenance->moduleLabel() << " , " + << provenance->productInstanceName(); } /* edm::Handle rawdata; iEvent.getByToken(tok_data_,rawdata); if (!rawdata.isValid()) { - edm::LogInfo("AnalyzerMB")<<" No valid collection "; + edm::LogVerbatim("AnalyzerMB")<<" No valid collection "; } else { - edm::LogInfo("AnalyzerMB")<<" Valid collection "; + edm::LogVerbatim("AnalyzerMB")<<" Valid collection "; int calibType = -1 ; int numEmptyFEDs = 0 ; std::vector calibTypeCounter(8,0) ; for (int i=FEDNumbering::MINHCALFEDID; @@ -351,7 +350,7 @@ namespace cms { // int value = ((const HcalDCCHeader*)(fedData.data()))->getCalibType() ; // calibTypeCounter.at(value)++ ; // increment the counter for this calib type } - edm::LogInfo("AnalyzerMB")<<" NumFed "< >::const_iterator it = rawdata1.begin();it != rawdata1.end(); it++) { - edm::LogInfo("AnalyzerMB")<<" Many by Type product name "<< (*it).provenance()->processName()<< + edm::LogVerbatim("AnalyzerMB")<<" Many by Type product name "<< (*it).provenance()->processName()<< " "<<(*it).provenance()->moduleLabel(); if((*it).provenance()->moduleLabel() == "hltHcalCalibrationRaw") { @@ -369,28 +368,21 @@ namespace cms { for (int i=FEDNumbering::MINHCALFEDID; i<=FEDNumbering::MAXHCALFEDID; i++) { const FEDRawData& fedData = (*it)->FEDData(i) ; - edm::LogInfo("AnalyzerMB")<<" FED size "<getCalibType() ; - edm::LogInfo("AnalyzerMB")<<" Value "< pG; - // iSetup.get().get(pG); - // ====== - /* - edm::ESHandle menuRcd; - iSetup.get().get(menuRcd) ; - const L1GtTriggerMenu* menu = menuRcd.product(); + const L1GtTriggerMenu* menu = &iSetup.getData(tok_l1gt_); const AlgorithmMap& bitMap = menu->gtAlgorithmMap(); edm::Handle gtRecord; @@ -402,14 +394,14 @@ namespace cms { // << "\n\n Error: no L1GlobalTriggerReadoutRecord found with input tag " // << m_l1GtReadoutRecord // << "\n Returning empty L1GlobalTriggerRecord.\n\n"; - edm::LogInfo("AnalyzerMB")<<" No L1 trigger record "; + edm::LogVerbatim("AnalyzerMB")<<" No L1 trigger record "; } else { const DecisionWord dWord = gtRecord->decisionWord(); for (CItAlgo itAlgo = bitMap.begin(); itAlgo != bitMap.end(); itAlgo++) { bool decision=menu->gtAlgorithmResult(itAlgo->first,dWord); - if(decision == 1) edm::LogInfo("AnalyzerMB")<<" Trigger "<first<<" "<first<<" "<size(); + edm::LogVerbatim("AnalyzerMB") << " The size of the normal collection " << hbheNormal->size(); } edm::Handle hbheNS; @@ -454,7 +446,7 @@ namespace cms { } const HBHERecHitCollection HithbheNS = *(hbheNS.product()); - edm::LogInfo("AnalyzerMB") << " HBHE NS size of collection " << HithbheNS.size(); + edm::LogVerbatim("AnalyzerMB") << " HBHE NS size of collection " << HithbheNS.size(); hHBHEsize_vs_run->Fill(rnnum, (float)HithbheNS.size()); if (HithbheNS.size() != 5184) { @@ -471,7 +463,7 @@ namespace cms { } const HBHERecHitCollection HithbheMB = *(hbheMB.product()); - edm::LogInfo("AnalyzerMB") << " HBHE MB size of collection " << HithbheMB.size(); + edm::LogVerbatim("AnalyzerMB") << " HBHE MB size of collection " << HithbheMB.size(); if (HithbheMB.size() != 5184) { edm::LogWarning("AnalyzerMB") << " HBHE problem " << rnnum << " " << HithbheMB.size(); // return; @@ -487,7 +479,7 @@ namespace cms { } const HFRecHitCollection HithfNS = *(hfNS.product()); - edm::LogInfo("AnalyzerMB") << " HFE NS size of collection " << HithfNS.size(); + edm::LogVerbatim("AnalyzerMB") << " HFE NS size of collection " << HithfNS.size(); hHFsize_vs_run->Fill(rnnum, (float)HithfNS.size()); if (HithfNS.size() != 1728) { edm::LogWarning("AnalyzerMB") << " HF problem " << rnnum << " " << HithfNS.size(); @@ -504,7 +496,7 @@ namespace cms { } const HFRecHitCollection HithfMB = *(hfMB.product()); - edm::LogInfo("AnalyzerMB") << " HF MB size of collection " << HithfMB.size(); + edm::LogVerbatim("AnalyzerMB") << " HF MB size of collection " << HithfMB.size(); if (HithfMB.size() != 1728) { edm::LogWarning("AnalyzerMB") << " HF problem " << rnnum << " " << HithfMB.size(); // return; @@ -554,8 +546,8 @@ namespace cms { hbheNoiseE->Fill(energyhit); if (energyhit < -2.) - edm::LogInfo("AnalyzerMB") << " Run " << rnnum << " ieta,iphi " << hid.ieta() << " " << hid.iphi() - << energyhit; + edm::LogVerbatim("AnalyzerMB") << " Run " << rnnum << " ieta,iphi " << hid.ieta() << " " << hid.iphi() + << energyhit; // if( hid.ieta() > 0 ) { // hCalo1[hid.iphi()][hid.ieta()]->Fill(energyhit-noise_pl[hid.iphi()][hid.ieta()]); @@ -762,7 +754,7 @@ namespace cms { } // HF_MB - edm::LogInfo("AnalyzerMB") << " Event is finished "; + edm::LogVerbatim("AnalyzerMB") << " Event is finished "; } } // namespace cms diff --git a/Calibration/HcalCalibAlgos/plugins/Analyzer_minbias.h b/Calibration/HcalCalibAlgos/plugins/Analyzer_minbias.h index ddc64043ade4c..b84efb1dfb315 100644 --- a/Calibration/HcalCalibAlgos/plugins/Analyzer_minbias.h +++ b/Calibration/HcalCalibAlgos/plugins/Analyzer_minbias.h @@ -33,13 +33,14 @@ #include "Geometry/Records/interface/CaloGeometryRecord.h" #include "DataFormats/GeometryVector/interface/GlobalPoint.h" #include "DataFormats/CaloTowers/interface/CaloTowerDetId.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Run.h" #include "DataFormats/FEDRawData/interface/FEDRawData.h" #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" #include "DataFormats/FEDRawData/interface/FEDNumbering.h" #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h" +#include "CondFormats/L1TObjects/interface/L1GtTriggerMenu.h" +#include "CondFormats/DataRecord/interface/L1GtTriggerMenuRcd.h" //#include "CalibFormats/HcalObjects/interface/HcalDbService.h" #include "TFile.h" #include "TH1.h" @@ -149,6 +150,7 @@ namespace cms { edm::EDGetTokenT tok_hbheNorm_; edm::ESGetToken tok_respCorr_; + edm::ESGetToken tok_l1gt_; bool theRecalib; }; diff --git a/Calibration/HcalCalibAlgos/plugins/HOCalibAnalyzer.cc b/Calibration/HcalCalibAlgos/plugins/HOCalibAnalyzer.cc index e2fb0dd86db5f..194dcea9ff41c 100644 --- a/Calibration/HcalCalibAlgos/plugins/HOCalibAnalyzer.cc +++ b/Calibration/HcalCalibAlgos/plugins/HOCalibAnalyzer.cc @@ -1008,8 +1008,6 @@ void HOCalibAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& i Nevents++; - using namespace edm; - float pival = acos(-1.); irunold = irun = iEvent.id().run(); ievt = iEvent.id().event(); diff --git a/Calibration/HcalCalibAlgos/plugins/HcalCalibrator.cc b/Calibration/HcalCalibAlgos/plugins/HcalCalibrator.cc index 27a3b6591e97d..0fd20490ab7c1 100644 --- a/Calibration/HcalCalibAlgos/plugins/HcalCalibrator.cc +++ b/Calibration/HcalCalibAlgos/plugins/HcalCalibrator.cc @@ -47,28 +47,18 @@ to the actual calibration code in "endJob()". #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/Common/interface/Handle.h" #include "TFile.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" - -using namespace edm; -//using namespace reco; -using namespace std; - // constructor HcalCalibrator::HcalCalibrator(const edm::ParameterSet& conf) - : - - mInputFileList(conf.getUntrackedParameter("inputFileList")), - // mOutputFile(conf.getUntrackedParameter("outputFile")), - - mCalibType(conf.getUntrackedParameter("calibType")), - mCalibMethod(conf.getUntrackedParameter("calibMethod")), + : mInputFileList(conf.getUntrackedParameter("inputFileList")), + // mOutputFile(conf.getUntrackedParameter("outputFile")), + mCalibType(conf.getUntrackedParameter("calibType")), + mCalibMethod(conf.getUntrackedParameter("calibMethod")), mMinTargetE(conf.getUntrackedParameter("minTargetE")), mMaxTargetE(conf.getUntrackedParameter("maxTargetE")), mMinCellE(conf.getUntrackedParameter("minCellE")), @@ -93,12 +83,13 @@ HcalCalibrator::HcalCalibrator(const edm::ParameterSet& conf) mMaxTagJetAbsEta(conf.getUntrackedParameter("maxTagJetAbsEta")), mMinTagJetEt(conf.getUntrackedParameter("minTagJetEt")), mMinProbeJetAbsEta(conf.getUntrackedParameter("minProbeJetAbsEta")), - mPhiSymCorFileName(conf.getUntrackedParameter("phiSymCorFileName")), + mPhiSymCorFileName(conf.getUntrackedParameter("phiSymCorFileName")), mApplyPhiSymCorFlag(conf.getUntrackedParameter("applyPhiSymCorFlag")), - mOutputCorCoefFileName(conf.getUntrackedParameter("outputCorCoefFileName")), - mHistoFileName(conf.getUntrackedParameter("histoFileName")) - -{} + mOutputCorCoefFileName(conf.getUntrackedParameter("outputCorCoefFileName")), + mHistoFileName(conf.getUntrackedParameter("histoFileName")) { + tok_geom_ = esConsumes(); + tok_htopo_ = esConsumes(); +} // destructor @@ -107,25 +98,13 @@ HcalCalibrator::~HcalCalibrator() {} // ------------ method called to for each event ------------ void HcalCalibrator::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - edm::ESHandle pG; - iSetup.get().get(pG); - mTheCaloGeometry = pG.product(); - edm::ESHandle pT; - iSetup.get().get(pT); - mTheHcalTopology = pT.product(); + mTheCaloGeometry = &iSetup.getData(tok_geom_); + mTheHcalTopology = &iSetup.getData(tok_htopo_); } // ------------ method called once each job just before starting event loop ------------ -void HcalCalibrator::beginJob() { - // ESHandle theGeometry; - // ESHandle theEndcapGeometry_handle, theBarrelGeometry_handle; - // evtSetup.get().get( theGeometry ); - - // edm::ESHandle pG; - // evtSetup.get().get(pG); - // mTheCaloGeometry = pG.product(); -} +void HcalCalibrator::beginJob() {} // ------------ method called once each job just after ending the event loop ------------ diff --git a/Calibration/HcalCalibAlgos/plugins/HcalCalibrator.h b/Calibration/HcalCalibAlgos/plugins/HcalCalibrator.h index 8fe04f03546ca..103ced9f6174a 100644 --- a/Calibration/HcalCalibAlgos/plugins/HcalCalibrator.h +++ b/Calibration/HcalCalibAlgos/plugins/HcalCalibrator.h @@ -18,6 +18,8 @@ //--------------------- #include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "Geometry/Records/interface/HcalRecNumberingRecord.h" class HcalCalibrator : public edm::EDAnalyzer { public: @@ -69,6 +71,9 @@ class HcalCalibrator : public edm::EDAnalyzer { std::string mOutputCorCoefFileName; std::string mHistoFileName; + edm::ESGetToken tok_geom_; + edm::ESGetToken tok_htopo_; + const CaloGeometry* mTheCaloGeometry; const HcalTopology* mTheHcalTopology; diff --git a/Calibration/HcalCalibAlgos/plugins/HcalIsoTrkAnalyzer.cc b/Calibration/HcalCalibAlgos/plugins/HcalIsoTrkAnalyzer.cc index e3f1755622ece..c1ef9912fe9d4 100644 --- a/Calibration/HcalCalibAlgos/plugins/HcalIsoTrkAnalyzer.cc +++ b/Calibration/HcalCalibAlgos/plugins/HcalIsoTrkAnalyzer.cc @@ -28,6 +28,10 @@ #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/BeamSpot/interface/BeamSpot.h" +//Muons +#include "DataFormats/MuonReco/interface/Muon.h" +#include "DataFormats/MuonReco/interface/MuonFwd.h" +#include "DataFormats/MuonReco/interface/MuonSelectors.h" //Triggers #include "DataFormats/Common/interface/TriggerResults.h" @@ -112,7 +116,8 @@ class HcalIsoTrkAnalyzer : public edm::one::EDAnalyzer& hbhe, edm::Handle& towerHandle, edm::Handle& genParticles, - const HcalRespCorrs* respCorrs); + const HcalRespCorrs* respCorrs, + const edm::Handle& muonh); double dR(math::XYZTLorentzVector&, math::XYZTLorentzVector&); double trackP(const reco::Track*, const edm::Handle&); double rhoh(const edm::Handle&); @@ -125,6 +130,7 @@ class HcalIsoTrkAnalyzer : public edm::one::EDAnalyzer* detIds, std::vector* hitEnergies); + bool notaMuon(const reco::Track* pTrack0, const edm::Handle& muonh); l1t::L1TGlobalUtil* l1GtUtils_; edm::Service fs; @@ -168,7 +174,8 @@ class HcalIsoTrkAnalyzer : public edm::one::EDAnalyzer tok_hbhe_; edm::EDGetTokenT tok_cala_; edm::EDGetTokenT tok_ew_; - edm::EDGetTokenT> tok_alg_; + edm::EDGetTokenT > tok_alg_; + edm::EDGetTokenT tok_Muon_; edm::ESGetToken tok_ddrec_; edm::ESGetToken tok_bFieldH_; @@ -203,7 +210,7 @@ class HcalIsoTrkAnalyzer : public edm::one::EDAnalyzer>("triggers")), + : trigNames_(iConfig.getParameter >("triggers")), theTrackQuality_(iConfig.getParameter("trackQuality")), processName_(iConfig.getParameter("processName")), l1Filter_(iConfig.getParameter("l1Filter")), @@ -249,8 +256,8 @@ HcalIsoTrkAnalyzer::HcalIsoTrkAnalyzer(const edm::ParameterSet& iConfig) labelHBHE_(iConfig.getParameter("labelHBHERecHit")), labelTower_(iConfig.getParameter("labelCaloTower")), l1TrigName_(iConfig.getUntrackedParameter("l1TrigName", "L1_SingleJet60")), - oldID_(iConfig.getUntrackedParameter>("oldID")), - newDepth_(iConfig.getUntrackedParameter>("newDepth")), + oldID_(iConfig.getUntrackedParameter >("oldID")), + newDepth_(iConfig.getUntrackedParameter >("newDepth")), hep17_(iConfig.getUntrackedParameter("hep17")), nRun_(0), nLow_(0), @@ -285,6 +292,8 @@ HcalIsoTrkAnalyzer::HcalIsoTrkAnalyzer(const edm::ParameterSet& iConfig) std::string prdnam = iConfig.getUntrackedParameter("producerName", ""); edm::InputTag algTag = iConfig.getParameter("algInputTag"); edm::InputTag extTag = iConfig.getParameter("extInputTag"); + std::string labelMuon = iConfig.getParameter("labelMuon"); + for (unsigned int k = 0; k < oldID_.size(); ++k) { oldDet_.emplace_back((oldID_[k] / 10000) % 10); oldEta_.emplace_back((oldID_[k] / 100) % 100); @@ -300,7 +309,8 @@ HcalIsoTrkAnalyzer::HcalIsoTrkAnalyzer(const edm::ParameterSet& iConfig) tok_ew_ = consumes(edm::InputTag("generator")); tok_parts_ = consumes(edm::InputTag("genParticles")); tok_cala_ = consumes(labelTower_); - tok_alg_ = consumes>(algTag); + tok_alg_ = consumes >(algTag); + tok_Muon_ = consumes(labelMuon); if (modnam.empty()) { tok_recVtx_ = consumes(labelRecVtx_); @@ -310,8 +320,8 @@ HcalIsoTrkAnalyzer::HcalIsoTrkAnalyzer(const edm::ParameterSet& iConfig) edm::LogVerbatim("HcalIsoTrack") << "Labels used " << triggerEvent_ << " " << theTriggerResultsLabel_ << " " << labelBS << " " << labelRecVtx_ << " " << labelGenTrack_ << " " << edm::InputTag("ecalRecHit", labelEB_) << " " - << edm::InputTag("ecalRecHit", labelEE_) << " " << labelHBHE_ << " " - << labelTower_; + << edm::InputTag("ecalRecHit", labelEE_) << " " << labelHBHE_ << " " << labelTower_ + << " " << labelMuon; } else { tok_recVtx_ = consumes(edm::InputTag(modnam, labelRecVtx_, prdnam)); tok_EB_ = consumes(edm::InputTag(modnam, labelEB_, prdnam)); @@ -321,7 +331,8 @@ HcalIsoTrkAnalyzer::HcalIsoTrkAnalyzer(const edm::ParameterSet& iConfig) << labelBS << " " << edm::InputTag(modnam, labelRecVtx_, prdnam) << " " << labelGenTrack_ << " " << edm::InputTag(modnam, labelEB_, prdnam) << " " << edm::InputTag(modnam, labelEE_, prdnam) << " " - << edm::InputTag(modnam, labelHBHE_, prdnam) << " " << labelTower_; + << edm::InputTag(modnam, labelHBHE_, prdnam) << " " << labelTower_ << " " + << labelMuon; } tok_ddrec_ = esConsumes(); @@ -417,6 +428,10 @@ void HcalIsoTrkAnalyzer::analyze(edm::Event const& iEvent, edm::EventSetup const okC = false; } + //Get muon collection + edm::Handle muonh; + iEvent.getByToken(tok_Muon_, muonh); + //event weight for FLAT sample t_EventWeight = 1.0; edm::Handle genEventInfo; @@ -502,7 +517,7 @@ void HcalIsoTrkAnalyzer::analyze(edm::Event const& iEvent, edm::EventSetup const //L1 l1GtUtils_->retrieveL1(iEvent, iSetup, tok_alg_); - const std::vector>& finalDecisions = l1GtUtils_->decisionsFinal(); + const std::vector >& finalDecisions = l1GtUtils_->decisionsFinal(); for (const auto& decision : finalDecisions) { if (decision.first.find(l1TrigName_) != std::string::npos) { t_L1Bit = decision.second; @@ -562,7 +577,8 @@ void HcalIsoTrkAnalyzer::analyze(edm::Event const& iEvent, edm::EventSetup const hbhe, caloTower, genParticles, - respCorrs); + respCorrs, + muonh); t_TracksSaved = ntksave[0]; t_TracksLoose = ntksave[1]; t_TracksTight = ntksave[2]; @@ -670,7 +686,8 @@ void HcalIsoTrkAnalyzer::analyze(edm::Event const& iEvent, edm::EventSetup const hbhe, caloTower, genParticles, - respCorrs); + respCorrs, + muonh); t_TracksSaved += ntksave[0]; t_TracksLoose += ntksave[1]; t_TracksTight += ntksave[2]; @@ -815,7 +832,7 @@ void HcalIsoTrkAnalyzer::fillDescriptions(edm::ConfigurationDescriptions& descri "HLT_PFJet400", "HLT_PFJet450", "HLT_PFJet500"}; - desc.add>("triggers", trig); + desc.add >("triggers", trig); desc.add("processName", "HLT"); desc.add("l1Filter", ""); desc.add("l2Filter", "L2Filter"); @@ -869,6 +886,7 @@ void HcalIsoTrkAnalyzer::fillDescriptions(edm::ConfigurationDescriptions& descri desc.add("labelHBHERecHit", "hbhereco"); desc.add("labelBeamSpot", "offlineBeamSpot"); desc.add("labelCaloTower", "towerMaker"); + desc.add("labelMuon", "muons"); desc.add("algInputTag", edm::InputTag("gtStage2Digis")); desc.add("extInputTag", edm::InputTag("gtStage2Digis")); desc.addUntracked("moduleName", ""); @@ -885,8 +903,8 @@ void HcalIsoTrkAnalyzer::fillDescriptions(edm::ConfigurationDescriptions& descri desc.addUntracked("l1TrigName", "L1_SingleJet60"); desc.addUntracked("outMode", 11); std::vector dummy; - desc.addUntracked>("oldID", dummy); - desc.addUntracked>("newDepth", dummy); + desc.addUntracked >("oldID", dummy); + desc.addUntracked >("newDepth", dummy); desc.addUntracked("hep17", false); descriptions.add("HcalIsoTrkAnalyzer", desc); } @@ -906,7 +924,8 @@ std::array HcalIsoTrkAnalyzer::fillTree(std::vector& hbhe, edm::Handle& tower, edm::Handle& genParticles, - const HcalRespCorrs* respCorrs) { + const HcalRespCorrs* respCorrs, + const edm::Handle& muonh) { int nSave(0), nLoose(0), nTight(0); //Loop over tracks std::vector::const_iterator trkDetItr; @@ -966,7 +985,8 @@ std::array HcalIsoTrkAnalyzer::fillTree(std::vectorokHCAL << " eIsolation " << eIsolation; #endif t_qltyFlag = (qltyFlag && trkDetItr->okECAL && trkDetItr->okHCAL); - if (t_qltyFlag) { + bool notMuon = (muonh.isValid()) ? notaMuon(pTrack, muonh) : true; + if (t_qltyFlag && notMuon) { nselTracks++; int nNearTRKs(0); ////////////////////////////////-MIP STUFF-////////////////////////////// @@ -1395,5 +1415,30 @@ void HcalIsoTrkAnalyzer::storeEnergy(int indx, #endif } +bool HcalIsoTrkAnalyzer::notaMuon(const reco::Track* pTrack0, const edm::Handle& muonh) { + bool flag(true); + for (reco::MuonCollection::const_iterator recMuon = muonh->begin(); recMuon != muonh->end(); ++recMuon) { + if (recMuon->innerTrack().isNonnull()) { + const reco::Track* pTrack = (recMuon->innerTrack()).get(); + bool mediumMuon = (((recMuon->isPFMuon()) && (recMuon->isGlobalMuon() || recMuon->isTrackerMuon())) && + (recMuon->innerTrack()->validFraction() > 0.49)); + if (mediumMuon) { + double chiGlobal = ((recMuon->globalTrack().isNonnull()) ? recMuon->globalTrack()->normalizedChi2() : 999); + bool goodGlob = (recMuon->isGlobalMuon() && chiGlobal < 3 && + recMuon->combinedQuality().chi2LocalPosition < 12 && recMuon->combinedQuality().trkKink < 20); + mediumMuon = muon::segmentCompatibility(*recMuon) > (goodGlob ? 0.303 : 0.451); + } + if (mediumMuon) { + double dR = reco::deltaR(pTrack->eta(), pTrack->phi(), pTrack0->eta(), pTrack0->phi()); + if (dR < 0.1) { + flag = false; + break; + } + } + } + } + return flag; +} + //define this as a plug-in DEFINE_FWK_MODULE(HcalIsoTrkAnalyzer); diff --git a/Calibration/HcalCalibAlgos/plugins/HitReCalibrator.cc b/Calibration/HcalCalibAlgos/plugins/HitReCalibrator.cc index 1e291f4cc1e32..04de1ebaf9861 100644 --- a/Calibration/HcalCalibAlgos/plugins/HitReCalibrator.cc +++ b/Calibration/HcalCalibAlgos/plugins/HitReCalibrator.cc @@ -6,14 +6,8 @@ #include "RecoTracker/TrackProducer/interface/TrackProducerBase.h" #include "TrackingTools/TransientTrack/interface/TransientTrack.h" #include "DataFormats/JetReco/interface/CaloJetCollection.h" -#include "CondFormats/HcalObjects/interface/HcalRespCorrs.h" -#include "CondFormats/DataRecord/interface/HcalRespCorrsRcd.h" #include "FWCore/Utilities/interface/Exception.h" -using namespace edm; -using namespace std; -using namespace reco; - namespace cms { HitReCalibrator::HitReCalibrator(const edm::ParameterSet& iConfig) { @@ -21,6 +15,8 @@ namespace cms { tok_ho_ = consumes(iConfig.getParameter("hoInput")); tok_hf_ = consumes(iConfig.getParameter("hfInput")); allowMissingInputs_ = true; + tok_resp_ = esConsumes(); + //register your products produces("DiJetsHBHEReRecHitCollection"); @@ -37,9 +33,7 @@ namespace cms { auto miniDiJetsHORecHitCollection = std::make_unique(); auto miniDiJetsHFRecHitCollection = std::make_unique(); - edm::ESHandle recalibCorrs; - iSetup.get().get("recalibrate", recalibCorrs); - const HcalRespCorrs* jetRecalib = recalibCorrs.product(); + const HcalRespCorrs* jetRecalib = &iSetup.getData(tok_resp_); try { edm::Handle hbhe; @@ -59,7 +53,7 @@ namespace cms { } } catch (cms::Exception& e) { // can't find it! if (!allowMissingInputs_) { - cout << "No HBHE collection " << endl; + edm::LogError("HitCalib") << "No HBHE collection "; throw e; } } @@ -82,7 +76,7 @@ namespace cms { } } catch (cms::Exception& e) { // can't find it! if (!allowMissingInputs_) { - cout << " No HO collection " << endl; + edm::LogError("HitCalib") << " No HO collection "; throw e; } } diff --git a/Calibration/HcalCalibAlgos/plugins/HitReCalibrator.h b/Calibration/HcalCalibAlgos/plugins/HitReCalibrator.h index 76a0f2df079e9..e7781f71811d1 100644 --- a/Calibration/HcalCalibAlgos/plugins/HitReCalibrator.h +++ b/Calibration/HcalCalibAlgos/plugins/HitReCalibrator.h @@ -12,16 +12,15 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "DataFormats/Common/interface/Ref.h" #include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" #include "DataFormats/DetId/interface/DetId.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" - #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" +#include "CondFormats/HcalObjects/interface/HcalRespCorrs.h" +#include "CondFormats/DataRecord/interface/HcalRespCorrsRcd.h" // // class declaration @@ -51,6 +50,8 @@ namespace cms { edm::EDGetTokenT tok_hbhe_; edm::EDGetTokenT tok_ho_; edm::EDGetTokenT tok_hf_; + + edm::ESGetToken tok_resp_; }; } // end namespace cms #endif diff --git a/Calibration/HcalCalibAlgos/plugins/RecAnalyzerHF.cc b/Calibration/HcalCalibAlgos/plugins/RecAnalyzerHF.cc index e0fa8981b3366..305b144824f68 100644 --- a/Calibration/HcalCalibAlgos/plugins/RecAnalyzerHF.cc +++ b/Calibration/HcalCalibAlgos/plugins/RecAnalyzerHF.cc @@ -12,7 +12,6 @@ #include "CondFormats/HcalObjects/interface/HcalRespCorrs.h" #include "FWCore/Common/interface/TriggerNames.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Frameworkfwd.h" diff --git a/Calibration/HcalCalibAlgos/plugins/RecAnalyzerMinbias.cc b/Calibration/HcalCalibAlgos/plugins/RecAnalyzerMinbias.cc index 299dca6364470..a2f7df2318c64 100644 --- a/Calibration/HcalCalibAlgos/plugins/RecAnalyzerMinbias.cc +++ b/Calibration/HcalCalibAlgos/plugins/RecAnalyzerMinbias.cc @@ -30,7 +30,6 @@ #include "CondFormats/HcalObjects/interface/HcalRespCorrs.h" #include "FWCore/Common/interface/TriggerNames.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Frameworkfwd.h" diff --git a/Calibration/HcalCalibAlgos/plugins/ValidIsoTrkCalib.cc b/Calibration/HcalCalibAlgos/plugins/ValidIsoTrkCalib.cc index 653cfd616c639..5a768d1a3d613 100644 --- a/Calibration/HcalCalibAlgos/plugins/ValidIsoTrkCalib.cc +++ b/Calibration/HcalCalibAlgos/plugins/ValidIsoTrkCalib.cc @@ -712,17 +712,6 @@ void ValidIsoTrkCalib::analyze(const edm::Event& iEvent, const edm::EventSetup& void ValidIsoTrkCalib::beginJob() { // if(!ReadCalibFactors(calibFactorsFileName_.c_str() )) {cout<<"Cant read file with cailib coefficients!! ---"< recalibCorrs; - // iSetup.get().get("recalibrate",recalibCorrs); - // respRecalib = recalibCorrs.product(); - // - // edm::LogInfo("CalibConstants")<<" Loaded: OK "; - // - // }catch(const cms::Exception & e) { - // edm::LogWarning("CalibConstants")<<" Not Found!! "; - // } - // rootFile = new TFile(outputFileName_.c_str(),"RECREATE"); //@@@@@@@@@@@@@ diff --git a/Calibration/HcalCalibAlgos/src/HcalConstantsXMLWriter.cc b/Calibration/HcalCalibAlgos/src/HcalConstantsXMLWriter.cc index 77f7208bf39ad..4003126cf017d 100644 --- a/Calibration/HcalCalibAlgos/src/HcalConstantsXMLWriter.cc +++ b/Calibration/HcalCalibAlgos/src/HcalConstantsXMLWriter.cc @@ -15,17 +15,17 @@ #include "CondTools/Hcal/interface/StreamOutFormatTarget.h" #include #include -using namespace std; + using namespace xercesc; HcalConstantsXMLWriter::HcalConstantsXMLWriter() {} HcalConstantsXMLWriter::~HcalConstantsXMLWriter() {} -void HcalConstantsXMLWriter::writeXML(string& newfile0, - const vector& detvec, - const vector& etavec, - const vector& phivec, - const vector& depthvec, - const vector& scalevec) { +void HcalConstantsXMLWriter::writeXML(std::string& newfile0, + const std::vector& detvec, + const std::vector& etavec, + const std::vector& phivec, + const std::vector& depthvec, + const std::vector& scalevec) { int nn = newfile0.size(); char newfile[99]; for (int i = 0; i < nn; i++) { @@ -34,16 +34,16 @@ void HcalConstantsXMLWriter::writeXML(string& newfile0, char const* fend = "\0"; newfile[nn] = *fend; - cout << " New file " << newfile << endl; + std::cout << " New file " << newfile << std::endl; - filebuf fb; - fb.open(newfile, ios::out); - ostream fOut(&fb); + std::filebuf fb; + fb.open(newfile, std::ios::out); + std::ostream fOut(&fb); XMLCh tempStr[100]; XMLString::transcode("Core", tempStr, 99); - unique_ptr mDom(DOMImplementationRegistry::getDOMImplementation(tempStr)); + std::unique_ptr mDom(DOMImplementationRegistry::getDOMImplementation(tempStr)); XMLString::transcode("CalibrationConstants", tempStr, 99); mDoc = mDom->createDocument(nullptr, // root element namespace URI. @@ -60,7 +60,7 @@ void HcalConstantsXMLWriter::writeXML(string& newfile0, root->appendChild(rootelem); XMLString::transcode("Cell", tempStr, 99); - vector theDOMVec; + std::vector theDOMVec; for (unsigned int i = 0; i < detvec.size(); i++) { theDOMVec.push_back(mDoc->createElement(tempStr)); @@ -68,11 +68,11 @@ void HcalConstantsXMLWriter::writeXML(string& newfile0, rootelem->appendChild(theDOMVec[i]); } - cout << " Write Doc " << theDOMVec.size() << endl; + std::cout << " Write Doc " << theDOMVec.size() << std::endl; DOMLSOutput* output = mDom->createLSOutput(); output->setByteStream(&formTarget); domWriter->write(mDoc, output); - cout << " End of Writting " << endl; + std::cout << " End of Writting " << std::endl; mDoc->release(); output->release(); domWriter->release(); @@ -95,30 +95,30 @@ void HcalConstantsXMLWriter::newCellLine(DOMElement* detelem, int det, int eta, XMLString::transcode("scale_factor", tempStr, 99); DOMAttr* attrscale = mDoc->createAttribute(tempStr); - ostringstream ost; + std::ostringstream ost; ost << det; attrdet->setValue(XMLString::transcode(ost.str().c_str())); detelem->setAttributeNode(attrdet); - ostringstream ost1; + std::ostringstream ost1; ost1 << eta; attreta->setValue(XMLString::transcode(ost1.str().c_str())); //DOMAttr* attr3 = detelem->setAttributeNode(attreta); detelem->setAttributeNode(attreta); - ostringstream ost2; + std::ostringstream ost2; ost2 << phi; attrphi->setValue(XMLString::transcode(ost2.str().c_str())); //DOMAttr* attr4 = detelem->setAttributeNode(attrphi); detelem->setAttributeNode(attrphi); - ostringstream ost3; + std::ostringstream ost3; ost3 << depth; attrdepth->setValue(XMLString::transcode(ost3.str().c_str())); //DOMAttr* attr5 = detelem->setAttributeNode(attrdepth); detelem->setAttributeNode(attrdepth); - ostringstream ost4; + std::ostringstream ost4; ost4 << scale; attrscale->setValue(XMLString::transcode(ost4.str().c_str())); //DOMAttr* attr6 = detelem->setAttributeNode(attrscale); diff --git a/Calibration/HcalCalibAlgos/src/hcalCalib.cc b/Calibration/HcalCalibAlgos/src/hcalCalib.cc index 1f8506b81e35f..1e7d1eaa08bff 100644 --- a/Calibration/HcalCalibAlgos/src/hcalCalib.cc +++ b/Calibration/HcalCalibAlgos/src/hcalCalib.cc @@ -10,6 +10,7 @@ #include "Calibration/HcalCalibAlgos/interface/hcalCalib.h" #include "Calibration/HcalCalibAlgos/interface/hcalCalibUtils.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include @@ -36,8 +37,6 @@ #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/HcalDetId/interface/HcalDetId.h" -using namespace std; - UInt_t nEvents; TFile* histoFile; @@ -70,12 +69,10 @@ void hcalCalib::Begin(TTree* /*tree*/) { nEvents = 0; if (APPLY_PHI_SYM_COR_FLAG && !ReadPhiSymCor()) { - cout << "\nERROR: Failed to read the phi symmetry corrections." << endl; - cout << "Check if the filename is correct. If the corrections are not needed, set the corresponding flag to " - "\"false\"\n" - << endl; - - cout << "\nThe program will be terminated\n" << endl; + edm::LogError("HcalCalib") << "\nERROR: Failed to read the phi symmetry corrections.\n" + << "Check if the filename is correct. If the corrections are not needed, set the " + "corresponding flag to \"false\"\n" + << "\nThe program will be terminated\n"; exit(1); } @@ -153,14 +150,14 @@ Bool_t hcalCalib::Process(Long64_t entry) { // fChain->GetTree()->GetEntry(entry); GetEntry(entry); - set uniqueIds; // for testing: check if there are duplicate cells (AA) + std::set uniqueIds; // for testing: check if there are duplicate cells (AA) Bool_t acceptEvent = kTRUE; ++nEvents; if (!(nEvents % 100000)) - cout << "event: " << nEvents << endl; + edm::LogVerbatim("HcalCalib") << "event: " << nEvents; h1_allTrkP->Fill(targetE); @@ -169,7 +166,7 @@ Bool_t hcalCalib::Process(Long64_t entry) { ; // make local copy as the cells may be modified due to phi/depth sum, phi corrections etc - vector selectCells; + std::vector selectCells; if (cells->GetSize() == 0) return kFALSE; @@ -185,7 +182,7 @@ Bool_t hcalCalib::Process(Long64_t entry) { if (HcalDetId(thisCell->id()).subdet() != HcalBarrel && HcalDetId(thisCell->id()).subdet() != HcalEndcap && HcalDetId(thisCell->id()).subdet() != HcalForward) { - cout << "Unknown or wrong hcal subdetector: " << HcalDetId(thisCell->id()).subdet() << endl; + edm::LogWarning("HcalCalib") << "Unknown or wrong hcal subdetector: " << HcalDetId(thisCell->id()).subdet(); } // Apply phi symmetry corrections if the flag is set @@ -197,7 +194,7 @@ Bool_t hcalCalib::Process(Long64_t entry) { } if (selectCells.empty()) { - cout << "NO CELLS ABOVE THRESHOLD FOUND FOR TARGET!!!" << endl; + edm::LogWarning("HcalCalib") << "NO CELLS ABOVE THRESHOLD FOUND FOR TARGET!!!"; } if (SUM_DEPTHS) @@ -206,7 +203,7 @@ Bool_t hcalCalib::Process(Long64_t entry) { sumSmallDepths(selectCells); // depth 1,2 in twrs 15,16 // most energetic tower (IsoTracks) or centroid of probe jet (DiJets) - pair refPos; + std::pair refPos; Int_t dEtaHitRef = 999; Int_t dPhiHitRef = 999; @@ -303,10 +300,10 @@ Bool_t hcalCalib::Process(Long64_t entry) { combinePhi(selectCells); // fill the containers for the minimization prcedures - vector energies; - vector ids; + std::vector energies; + std::vector ids; - for (vector::iterator i_it = selectCells.begin(); i_it != selectCells.end(); ++i_it) { + for (std::vector::iterator i_it = selectCells.begin(); i_it != selectCells.end(); ++i_it) { // for testing : fill only unique id's if (uniqueIds.insert(i_it->id()).second) { @@ -355,11 +352,12 @@ Bool_t hcalCalib::Process(Long64_t entry) { //void hcalCalib::SlaveTerminate() {} void hcalCalib::Terminate() { - cout << "\n\nFinished reading the events.\n"; - cout << "Number of input objects: " << cellIds.size() << endl; - cout << "Performing minimization: depending on selected method can take some time...\n\n"; + edm::LogVerbatim("HcalCalib") << "\n\nFinished reading the events.\n" + << "Number of input objects: " << cellIds.size() + << "\nPerforming minimization: depending on selected method can take some time...\n\n"; - for (vector >::iterator it_rp = refIEtaIPhi.begin(); it_rp != refIEtaIPhi.end(); ++it_rp) { + for (std::vector >::iterator it_rp = refIEtaIPhi.begin(); it_rp != refIEtaIPhi.end(); + ++it_rp) { Float_t weight = (abs(it_rp->first) < 21) ? 1.0 / 72.0 : 1.0 / 36.0; h1_numEventsTwrIEta->Fill(it_rp->first, weight); } @@ -378,9 +376,9 @@ void hcalCalib::Terminate() { // for each encountered coef in depth one. if (!SUM_DEPTHS && SUM_SMALL_DEPTHS) { - vector idForSummedCells; + std::vector idForSummedCells; - for (map::iterator m_it = solution.begin(); m_it != solution.end(); ++m_it) { + for (std::map::iterator m_it = solution.begin(); m_it != solution.end(); ++m_it) { if (HcalDetId(m_it->first).ietaAbs() != 15 && HcalDetId(m_it->first).ietaAbs() != 16) continue; if (HcalDetId(m_it->first).subdet() != HcalBarrel) @@ -389,7 +387,7 @@ void hcalCalib::Terminate() { idForSummedCells.push_back(HcalDetId(m_it->first)); } - for (vector::iterator v_it = idForSummedCells.begin(); v_it != idForSummedCells.end(); ++v_it) { + for (std::vector::iterator v_it = idForSummedCells.begin(); v_it != idForSummedCells.end(); ++v_it) { UInt_t addCoefId = HcalDetId(HcalBarrel, HcalDetId(*v_it).ieta(), HcalDetId(*v_it).iphi(), 2); solution[addCoefId] = solution[*v_it]; } @@ -401,7 +399,7 @@ void hcalCalib::Terminate() { // loop over the solution from L3 and multiply by the additional factor from // the matrix inversion. Set coef outside of the valid calibration region =1. - for (map::iterator it_s = solution.begin(); it_s != solution.end(); ++it_s) { + for (std::map::iterator it_s = solution.begin(); it_s != solution.end(); ++it_s) { Int_t iEtaSol = HcalDetId(it_s->first).ieta(); if (abs(iEtaSol) < CALIB_ABS_IETA_MIN || abs(iEtaSol) > CALIB_ABS_IETA_MAX) it_s->second = 1.0; @@ -502,7 +500,7 @@ void hcalCalib::Terminate() { histoFile->Write(); histoFile->Close(); - cout << "\n Finished calibration.\n " << endl; + edm::LogVerbatim("HcalCalib") << "\n Finished calibration.\n "; } // end of Terminate() @@ -510,11 +508,11 @@ void hcalCalib::Terminate() { void hcalCalib::GetCoefFromMtrxInvOfAve() { // these maps are keyed by iEta - map aveTargetE; - map nEntries; // count hits + std::map aveTargetE; + std::map nEntries; // count hits // iEtaRef iEtaCell, energy - map > aveHitE; // add energies in the loop, normalize after that + std::map > aveHitE; // add energies in the loop, normalize after that for (unsigned int i = 0; i < cellEnergies.size(); ++i) { Int_t iEtaRef = refIEtaIPhi[i].first; @@ -536,12 +534,12 @@ void hcalCalib::GetCoefFromMtrxInvOfAve() { // scale by number of entries to get the averages Float_t norm = 1.0; - for (map::iterator m_it = aveTargetE.begin(); m_it != aveTargetE.end(); ++m_it) { + for (std::map::iterator m_it = aveTargetE.begin(); m_it != aveTargetE.end(); ++m_it) { Int_t iEta = m_it->first; norm = (nEntries[iEta] > 0) ? 1.0 / (nEntries[iEta]) : 1.0; aveTargetE[iEta] *= norm; - map::iterator n_it = (aveHitE[iEta]).begin(); + std::map::iterator n_it = (aveHitE[iEta]).begin(); Float_t sumRawE = 0; for (; n_it != (aveHitE[iEta]).end(); ++n_it) { @@ -555,7 +553,7 @@ void hcalCalib::GetCoefFromMtrxInvOfAve() { // conversion from iEta to index for the linear system // contains elements only in the valid range for *matrix inversion* - vector iEtaList; + std::vector iEtaList; for (Int_t i = -CALIB_ABS_IETA_MAX; i <= CALIB_ABS_IETA_MAX; ++i) { if (abs(i) < CALIB_ABS_IETA_MIN) @@ -576,7 +574,7 @@ void hcalCalib::GetCoefFromMtrxInvOfAve() { for (UInt_t i = 0; i < iEtaList.size(); ++i) { b(i, 0) = aveTargetE[iEtaList[i]]; - map::iterator n_it = aveHitE[iEtaList[i]].begin(); + std::map::iterator n_it = aveHitE[iEtaList[i]].begin(); for (; n_it != aveHitE[iEtaList[i]].end(); ++n_it) { if (fabs(n_it->first) > CALIB_ABS_IETA_MAX || fabs(n_it->first) < CALIB_ABS_IETA_MIN) continue; @@ -600,7 +598,8 @@ Bool_t hcalCalib::ReadPhiSymCor() { std::ifstream phiSymFile(PHI_SYM_COR_FILENAME.Data()); if (!phiSymFile) { - cout << "\nERROR: Can not find file with phi symmetry constants \"" << PHI_SYM_COR_FILENAME.Data() << "\"" << endl; + edm::LogWarning("HcalCalib") << "\nERROR: Can not find file with phi symmetry constants \"" + << PHI_SYM_COR_FILENAME.Data() << "\""; return kFALSE; } @@ -622,7 +621,7 @@ Bool_t hcalCalib::ReadPhiSymCor() { continue; std::istringstream linestream(line); - linestream >> iEta >> iPhi >> depth >> sdName >> value >> hex >> detId; + linestream >> iEta >> iPhi >> depth >> sdName >> value >> std::hex >> detId; if (sdName == "HB") sd = HcalBarrel; @@ -633,22 +632,22 @@ Bool_t hcalCalib::ReadPhiSymCor() { else if (sdName == "HF") sd = HcalForward; else { - cout << "\nInvalid detector name in phi symmetry constants file: " << sdName.Data() << endl; - cout << "Check file and rerun!\n" << endl; + edm::LogWarning("HcalCalib") << "\nInvalid detector name in phi symmetry constants file: " << sdName.Data() + << "\nCheck file and rerun!\n"; return kFALSE; } // check if the data is consistent if (HcalDetId(sd, iEta, iPhi, depth) != HcalDetId(detId)) { - cout << "\nInconsistent info in phi symmetry file: subdet, iEta, iPhi, depth do not match rawId!\n" << endl; + edm::LogWarning("HcalCalib") + << "\nInconsistent info in phi symmetry file: subdet, iEta, iPhi, depth do not match rawId!\n"; return kFALSE; } HcalDetId hId(detId); if (!topo_->valid(hId)) { - cout << "\nInvalid DetId from: iEta=" << iEta << " iPhi=" << iPhi << " depth=" << depth - << " subdet=" << sdName.Data() << " detId=" << detId << endl - << endl; + edm::LogWarning("HcalCalib") << "\nInvalid DetId from: iEta=" << iEta << " iPhi=" << iPhi << " depth=" << depth + << " subdet=" << sdName.Data() << " detId=" << detId << "\n"; return kFALSE; } diff --git a/Calibration/HcalCalibAlgos/src/hcalCalibUtils.cc b/Calibration/HcalCalibAlgos/src/hcalCalibUtils.cc index 5e865d4ff313b..cd0b396b53856 100644 --- a/Calibration/HcalCalibAlgos/src/hcalCalibUtils.cc +++ b/Calibration/HcalCalibAlgos/src/hcalCalibUtils.cc @@ -4,6 +4,7 @@ #include #include "TString.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Calibration/HcalCalibAlgos/interface/hcalCalibUtils.h" //#include "Calibration/HcalCalibAlgos/plugins/CommonUsefulStuff.h" @@ -11,9 +12,7 @@ #include "DataFormats/DetId/interface/DetId.h" #include "Geometry/HcalTowerAlgo/interface/HcalGeometry.h" -using namespace std; - -void sumDepths(vector& selectCells) { +void sumDepths(std::vector& selectCells) { // Assignes teh sum of the energy in cells with the same iEta, iPhi to the cell with depth=1. // All cells with depth>1 are removed form the container. If // the cell at depth=1 is not present: create it and follow the procedure. @@ -21,8 +20,8 @@ void sumDepths(vector& selectCells) { if (selectCells.empty()) return; - vector selectCellsDepth1; - vector selectCellsHighDepth; + std::vector selectCellsDepth1; + std::vector selectCellsHighDepth; // // NB: Here we add depth 3 for iEta==16 in *HE* to the value in the barrel @@ -31,7 +30,7 @@ void sumDepths(vector& selectCells) { // // In some documents it is described as having depth 1, the mapping in CMSSW uses depth 3. - for (vector::iterator i_it = selectCells.begin(); i_it != selectCells.end(); ++i_it) { + for (std::vector::iterator i_it = selectCells.begin(); i_it != selectCells.end(); ++i_it) { if (HcalDetId(i_it->id()).depth() == 1) { selectCellsDepth1.push_back(*i_it); } else { @@ -41,17 +40,17 @@ void sumDepths(vector& selectCells) { // case where depth 1 has zero energy, but higher depths with same (iEta, iPhi) have energy. // For iEta<15 there is one depth -> selectCellsHighDepth is empty and we do not get in the loop. - for (vector::iterator i_it2 = selectCellsHighDepth.begin(); i_it2 != selectCellsHighDepth.end(); ++i_it2) { + for (std::vector::iterator i_it2 = selectCellsHighDepth.begin(); i_it2 != selectCellsHighDepth.end(); + ++i_it2) { // protect against corrupt data if (HcalDetId(i_it2->id()).ietaAbs() < 15 && HcalDetId(i_it2->id()).depth() > 1) { - cout << "ERROR!!! there are no HB cells with depth>1 for iEta<15!\n" - << "Check the input data..." << endl; - cout << "HCalDetId: " << HcalDetId(i_it2->id()) << endl; + edm::LogWarning("HcalCalib") << "ERROR!!! there are no HB cells with depth>1 for iEta<15!\n" + << "Check the input data...\nHCalDetId: " << HcalDetId(i_it2->id()); return; } bool foundDepthOne = false; - for (vector::iterator i_it = selectCellsDepth1.begin(); i_it != selectCellsDepth1.end(); ++i_it) { + for (std::vector::iterator i_it = selectCellsDepth1.begin(); i_it != selectCellsDepth1.end(); ++i_it) { if (HcalDetId(i_it->id()).ieta() == HcalDetId(i_it2->id()).ieta() && HcalDetId(i_it->id()).iphi() == HcalDetId(i_it2->id()).iphi()) foundDepthOne = true; @@ -67,12 +66,12 @@ void sumDepths(vector& selectCells) { HcalDetId(HcalDetId(i_it2->id()).subdet(), HcalDetId(i_it2->id()).ieta(), HcalDetId(i_it2->id()).iphi(), 1); selectCellsDepth1.push_back(TCell(newId, 0.0)); - ////////// cout << "\nCreated a dummy cell in depth one to recover energy!!!\n" << endl; } } - for (vector::iterator i_it = selectCellsDepth1.begin(); i_it != selectCellsDepth1.end(); ++i_it) { - for (vector::iterator i_it2 = selectCellsHighDepth.begin(); i_it2 != selectCellsHighDepth.end(); ++i_it2) { + for (std::vector::iterator i_it = selectCellsDepth1.begin(); i_it != selectCellsDepth1.end(); ++i_it) { + for (std::vector::iterator i_it2 = selectCellsHighDepth.begin(); i_it2 != selectCellsHighDepth.end(); + ++i_it2) { if (HcalDetId(i_it->id()).ieta() == HcalDetId(i_it2->id()).ieta() && HcalDetId(i_it->id()).iphi() == HcalDetId(i_it2->id()).iphi()) { i_it->SetE(i_it->e() + i_it2->e()); @@ -87,7 +86,7 @@ void sumDepths(vector& selectCells) { return; } -void combinePhi(vector& selectCells) { +void combinePhi(std::vector& selectCells) { // Map: NxN -> N cluster // Comine the targetE of cells with the same iEta @@ -97,19 +96,19 @@ void combinePhi(vector& selectCells) { // new container for the TCells // dummy cell id created with iEta; iPhi=1; depth // if combinePhi() is run after combining depths, depth=1 - vector combinedCells; + std::vector combinedCells; - map > etaSliceE; // keyed by id of cell with iEta and **iPhi=1** + std::map > etaSliceE; // keyed by id of cell with iEta and **iPhi=1** // map the cells to the eta ring - vector::iterator i_it = selectCells.begin(); + std::vector::iterator i_it = selectCells.begin(); for (; i_it != selectCells.end(); ++i_it) { DetId id = HcalDetId(i_it->id()); UInt_t thisKey = HcalDetId(HcalDetId(id).subdet(), HcalDetId(id).ieta(), 1, HcalDetId(id).depth()); etaSliceE[thisKey].push_back(i_it->e()); } - map >::iterator m_it = etaSliceE.begin(); + std::map >::iterator m_it = etaSliceE.begin(); for (; m_it != etaSliceE.end(); ++m_it) { combinedCells.push_back(TCell(m_it->first, accumulate(m_it->second.begin(), m_it->second.end(), 0.0))); } @@ -118,40 +117,40 @@ void combinePhi(vector& selectCells) { selectCells = combinedCells; } -void combinePhi(vector& selectCells, vector& combinedCells) { +void combinePhi(std::vector& selectCells, std::vector& combinedCells) { // Map: NxN -> N cluster // Comine the targetE of cells with the same iEta if (selectCells.empty()) return; - map > etaSliceE; // keyed by id of cell with iEta and **iPhi=1** + std::map > etaSliceE; // keyed by id of cell with iEta and **iPhi=1** // map the cells to the eta ring - vector::iterator i_it = selectCells.begin(); + std::vector::iterator i_it = selectCells.begin(); for (; i_it != selectCells.end(); ++i_it) { DetId id = HcalDetId(i_it->id()); UInt_t thisKey = HcalDetId(HcalDetId(id).subdet(), HcalDetId(id).ieta(), 1, HcalDetId(id).depth()); etaSliceE[thisKey].push_back(i_it->e()); } - map >::iterator m_it = etaSliceE.begin(); + std::map >::iterator m_it = etaSliceE.begin(); for (; m_it != etaSliceE.end(); ++m_it) { combinedCells.push_back(TCell(m_it->first, accumulate(m_it->second.begin(), m_it->second.end(), 0.0))); } } -void getIEtaIPhiForHighestE(vector& selectCells, Int_t& iEtaMostE, UInt_t& iPhiMostE) { - vector summedDepthsCells = selectCells; +void getIEtaIPhiForHighestE(std::vector& selectCells, Int_t& iEtaMostE, UInt_t& iPhiMostE) { + std::vector summedDepthsCells = selectCells; sumDepths(summedDepthsCells); - vector::iterator highCell = summedDepthsCells.begin(); + std::vector::iterator highCell = summedDepthsCells.begin(); // sum depths locally to get highest energy tower Float_t highE = -999; - for (vector::iterator it = summedDepthsCells.begin(); it != summedDepthsCells.end(); ++it) { + for (std::vector::iterator it = summedDepthsCells.begin(); it != summedDepthsCells.end(); ++it) { if (highE < it->e()) { highCell = it; highE = it->e(); @@ -170,12 +169,12 @@ void getIEtaIPhiForHighestE(vector& selectCells, Int_t& iEtaMostE, UInt_t // This can not be done for iEta>20 due to segmentation => in principle the result should be restricted // to iEta<20. Attempted to minimize affect at the boundary without a sharp jump. -void filterCells3x3(vector& selectCells, Int_t iEtaMaxE, UInt_t iPhiMaxE) { - vector filteredCells; +void filterCells3x3(std::vector& selectCells, Int_t iEtaMaxE, UInt_t iPhiMaxE) { + std::vector filteredCells; Int_t dEta, dPhi; - for (vector::iterator it = selectCells.begin(); it != selectCells.end(); ++it) { + for (std::vector::iterator it = selectCells.begin(); it != selectCells.end(); ++it) { Bool_t passDEta = false; Bool_t passDPhi = false; @@ -234,12 +233,12 @@ void filterCells3x3(vector& selectCells, Int_t iEtaMaxE, UInt_t iPhiMaxE) // Size for iEta>20 is 3x3, but the segmentation changes by x2 in phi. // There is some bias in the selection of towers near the boundary -void filterCells5x5(vector& selectCells, Int_t iEtaMaxE, UInt_t iPhiMaxE) { - vector filteredCells; +void filterCells5x5(std::vector& selectCells, Int_t iEtaMaxE, UInt_t iPhiMaxE) { + std::vector filteredCells; Int_t dEta, dPhi; - for (vector::iterator it = selectCells.begin(); it != selectCells.end(); ++it) { + for (std::vector::iterator it = selectCells.begin(); it != selectCells.end(); ++it) { dEta = HcalDetId(it->id()).ieta() - iEtaMaxE; dPhi = HcalDetId(it->id()).iphi() - iPhiMaxE; @@ -265,14 +264,14 @@ void filterCells5x5(vector& selectCells, Int_t iEtaMaxE, UInt_t iPhiMaxE) // this is for the problematic layer near the HB/HE boundary // sum depths 1,2 in towers 15,16 -void sumSmallDepths(vector& selectCells) { +void sumSmallDepths(std::vector& selectCells) { if (selectCells.empty()) return; - vector newCells; // holds unaffected cells to which the modified ones are added - vector manipulatedCells; // the ones that are combined + std::vector newCells; // holds unaffected cells to which the modified ones are added + std::vector manipulatedCells; // the ones that are combined - for (vector::iterator i_it = selectCells.begin(); i_it != selectCells.end(); ++i_it) { + for (std::vector::iterator i_it = selectCells.begin(); i_it != selectCells.end(); ++i_it) { if ((HcalDetId(i_it->id()).ietaAbs() == 15 && HcalDetId(i_it->id()).depth() <= 2) || (HcalDetId(i_it->id()).ietaAbs() == 16 && HcalDetId(i_it->id()).depth() <= 2)) { manipulatedCells.push_back(*i_it); @@ -292,10 +291,10 @@ void sumSmallDepths(vector& selectCells) { // See what cells are needed to hold the combined information: // Make holders for depth=1 for each (iEta,iPhi) // if a cell with these values is present in "manupulatedCells" - vector dummyIds; // to keep track of kreated cells - vector createdCells; // cells that need to be added or they exists; + std::vector dummyIds; // to keep track of kreated cells + std::vector createdCells; // cells that need to be added or they exists; - for (vector::iterator i_it = manipulatedCells.begin(); i_it != manipulatedCells.end(); ++i_it) { + for (std::vector::iterator i_it = manipulatedCells.begin(); i_it != manipulatedCells.end(); ++i_it) { UInt_t dummyId = HcalDetId(HcalDetId(i_it->id()).subdet(), HcalDetId(i_it->id()).ieta(), HcalDetId(i_it->id()).iphi(), 1); if (find(dummyIds.begin(), dummyIds.end(), dummyId) == dummyIds.end()) { @@ -304,8 +303,8 @@ void sumSmallDepths(vector& selectCells) { } } - for (vector::iterator i_it = createdCells.begin(); i_it != createdCells.end(); ++i_it) { - for (vector::iterator i_it2 = manipulatedCells.begin(); i_it2 != manipulatedCells.end(); ++i_it2) { + for (std::vector::iterator i_it = createdCells.begin(); i_it != createdCells.end(); ++i_it) { + for (std::vector::iterator i_it2 = manipulatedCells.begin(); i_it2 != manipulatedCells.end(); ++i_it2) { if (HcalDetId(i_it->id()).ieta() == HcalDetId(i_it2->id()).ieta() && HcalDetId(i_it->id()).iphi() == HcalDetId(i_it2->id()).iphi() && HcalDetId(i_it2->id()).depth() <= 2) { i_it->SetE(i_it->e() + i_it2->e()); @@ -313,7 +312,7 @@ void sumSmallDepths(vector& selectCells) { } } - for (vector::iterator i_it = createdCells.begin(); i_it != createdCells.end(); ++i_it) { + for (std::vector::iterator i_it = createdCells.begin(); i_it != createdCells.end(); ++i_it) { newCells.push_back(*i_it); } @@ -327,9 +326,9 @@ void filterCellsInCone(std::vector& selectCells, const GlobalPoint hitPositionHcal, Float_t maxConeDist, const CaloGeometry* theCaloGeometry) { - vector filteredCells; + std::vector filteredCells; - for (vector::iterator it = selectCells.begin(); it != selectCells.end(); ++it) { + for (std::vector::iterator it = selectCells.begin(); it != selectCells.end(); ++it) { GlobalPoint recHitPoint; DetId id = it->id(); if (id.det() == DetId::Hcal) { diff --git a/Calibration/HcalCalibAlgos/test/DiJetAnalyzer.cc b/Calibration/HcalCalibAlgos/test/DiJetAnalyzer.cc index 96120c9163fc1..5b4f96fe22b2d 100644 --- a/Calibration/HcalCalibAlgos/test/DiJetAnalyzer.cc +++ b/Calibration/HcalCalibAlgos/test/DiJetAnalyzer.cc @@ -28,6 +28,8 @@ DiJetAnalyzer::DiJetAnalyzer(const edm::ParameterSet& iConfig) { tok_HF_ = consumes>>(hfRecHitName_); tok_HO_ = consumes>>(hoRecHitName_); tok_Vertex_ = consumes(pvCollName_); + + tok_geom_ = esConsumes(); } DiJetAnalyzer::~DiJetAnalyzer() {} @@ -77,12 +79,11 @@ void DiJetAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& evS } // Get geometry - edm::ESHandle geoHandle; - evSetup.get().get(geoHandle); - const HcalGeometry* HBGeom = static_cast(geoHandle->getSubdetectorGeometry(DetId::Hcal, 1)); - const HcalGeometry* HEGeom = static_cast(geoHandle->getSubdetectorGeometry(DetId::Hcal, 2)); - const CaloSubdetectorGeometry* HOGeom = geoHandle->getSubdetectorGeometry(DetId::Hcal, 3); - const CaloSubdetectorGeometry* HFGeom = geoHandle->getSubdetectorGeometry(DetId::Hcal, 4); + const CaloGeometry* geo = &evSetup.getData(tok_geom_); + const HcalGeometry* HBGeom = static_cast(geo->getSubdetectorGeometry(DetId::Hcal, 1)); + const HcalGeometry* HEGeom = static_cast(geo->getSubdetectorGeometry(DetId::Hcal, 2)); + const CaloSubdetectorGeometry* HOGeom = geo->getSubdetectorGeometry(DetId::Hcal, 3); + const CaloSubdetectorGeometry* HFGeom = geo->getSubdetectorGeometry(DetId::Hcal, 4); int HBHE_n = 0; for (edm::SortedCollection>::const_iterator ith = hbhereco->begin(); diff --git a/Calibration/HcalCalibAlgos/test/DiJetAnalyzer.h b/Calibration/HcalCalibAlgos/test/DiJetAnalyzer.h index cbbc39c5d2c5a..e27e1596d4c5b 100644 --- a/Calibration/HcalCalibAlgos/test/DiJetAnalyzer.h +++ b/Calibration/HcalCalibAlgos/test/DiJetAnalyzer.h @@ -20,7 +20,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/JetReco/interface/CaloJetCollection.h" #include "DataFormats/JetReco/interface/PFJetCollection.h" @@ -116,6 +115,8 @@ class DiJetAnalyzer : public edm::EDAnalyzer { edm::EDGetTokenT > > tok_HO_; edm::EDGetTokenT tok_Vertex_; + edm::ESGetToken tok_geom_; + // root file/histograms TFile* rootfile_; diff --git a/Calibration/HcalCalibAlgos/test/GammaJetAnalysis.cc b/Calibration/HcalCalibAlgos/test/GammaJetAnalysis.cc index dde27ba2e4b66..d1899c3264525 100644 --- a/Calibration/HcalCalibAlgos/test/GammaJetAnalysis.cc +++ b/Calibration/HcalCalibAlgos/test/GammaJetAnalysis.cc @@ -239,6 +239,7 @@ GammaJetAnalysis::GammaJetAnalysis(const edm::ParameterSet& iConfig) HLTlabel.ReplaceAll("HLT", "reHLT"); tok_TrigRes_ = consumes(edm::InputTag(prod, HLTlabel.Data(), an)); } + tok_geom_ = esConsumes(); } GammaJetAnalysis::~GammaJetAnalysis() {} @@ -662,12 +663,11 @@ void GammaJetAnalysis::analyze(const edm::Event& iEvent, const edm::EventSetup& HERE("get geometry"); // Get geometry - edm::ESHandle geoHandle; - evSetup.get().get(geoHandle); - const HcalGeometry* HBGeom = dynamic_cast(geoHandle->getSubdetectorGeometry(DetId::Hcal, 1)); - const HcalGeometry* HEGeom = dynamic_cast(geoHandle->getSubdetectorGeometry(DetId::Hcal, 2)); - const CaloSubdetectorGeometry* HOGeom = geoHandle->getSubdetectorGeometry(DetId::Hcal, 3); - const CaloSubdetectorGeometry* HFGeom = geoHandle->getSubdetectorGeometry(DetId::Hcal, 4); + const CaloGeometry* geo = &evSetup.getData(tok_geom_); + const HcalGeometry* HBGeom = dynamic_cast(geo->getSubdetectorGeometry(DetId::Hcal, 1)); + const HcalGeometry* HEGeom = dynamic_cast(geo->getSubdetectorGeometry(DetId::Hcal, 2)); + const CaloSubdetectorGeometry* HOGeom = geo->getSubdetectorGeometry(DetId::Hcal, 3); + const CaloSubdetectorGeometry* HFGeom = geo->getSubdetectorGeometry(DetId::Hcal, 4); HERE("work"); diff --git a/Calibration/HcalCalibAlgos/test/GammaJetAnalysis.h b/Calibration/HcalCalibAlgos/test/GammaJetAnalysis.h index 857be47739b0d..09d5d43f0906f 100644 --- a/Calibration/HcalCalibAlgos/test/GammaJetAnalysis.h +++ b/Calibration/HcalCalibAlgos/test/GammaJetAnalysis.h @@ -12,7 +12,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" #include "DataFormats/EgammaCandidates/interface/Photon.h" @@ -219,6 +218,7 @@ class GammaJetAnalysis : public edm::EDAnalyzer { edm::EDGetTokenT tok_PFMET_; edm::EDGetTokenT tok_PFType1MET_; edm::EDGetTokenT tok_TrigRes_; + edm::ESGetToken tok_geom_; bool doPFJets_; // use PFJets bool doGenJets_; // use GenJets int workOnAOD_; diff --git a/Calibration/HcalCalibAlgos/test/HcalConstantsASCIIWriter.cc b/Calibration/HcalCalibAlgos/test/HcalConstantsASCIIWriter.cc index 14734a609dca5..9551da7660335 100644 --- a/Calibration/HcalCalibAlgos/test/HcalConstantsASCIIWriter.cc +++ b/Calibration/HcalCalibAlgos/test/HcalConstantsASCIIWriter.cc @@ -17,23 +17,22 @@ #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/HcalDetId/interface/HcalSubdetector.h" -#include "CondFormats/HcalObjects/interface/HcalRespCorrs.h" #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" #include "HepMC/GenParticle.h" #include "HepMC/GenVertex.h" #include "CalibCalorimetry/HcalAlgos/interface/HcalDbASCIIIO.h" -#include "CondFormats/DataRecord/interface/HcalRespCorrsRcd.h" #include #include #include #include -using namespace reco; // // constructors and destructor // namespace cms { HcalConstantsASCIIWriter::HcalConstantsASCIIWriter(const edm::ParameterSet& iConfig) { + tok_geom_ = esConsumes(); + tok_resp_ = esConsumes(); // get name of output file with histogramms file_input = "Calibration/HcalCalibAlgos/data/" + iConfig.getParameter("fileInput") + ".txt"; file_output = "Calibration/HcalCalibAlgos/data/" + iConfig.getParameter("fileOutput") + ".txt"; @@ -63,14 +62,10 @@ namespace cms { void HcalConstantsASCIIWriter::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { std::cout << " Start HcalConstantsASCIIWriter::analyze " << std::endl; - edm::ESHandle r; - iSetup.get().get(r); - HcalRespCorrs* oldRespCorrs = new HcalRespCorrs(*r.product()); + HcalRespCorrs* oldRespCorrs = new HcalRespCorrs(iSetup.getData(tok_resp_)); // std::vector dd = oldRespCorrs->getAllChannels(); - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry* geo = pG.product(); + const CaloGeometry* geo = &iSetup.getData(tok_geom_); // iSetup.get().get(conditions); std::vector did = geo->getValidDetIds(); diff --git a/Calibration/HcalCalibAlgos/test/HcalConstantsASCIIWriter.h b/Calibration/HcalCalibAlgos/test/HcalConstantsASCIIWriter.h index 67066ff36f66a..65e91836e9f90 100644 --- a/Calibration/HcalCalibAlgos/test/HcalConstantsASCIIWriter.h +++ b/Calibration/HcalCalibAlgos/test/HcalConstantsASCIIWriter.h @@ -18,22 +18,24 @@ #include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" #include "DataFormats/Candidate/interface/Candidate.h" #include "DataFormats/DetId/interface/DetId.h" +#include "DataFormats/HcalDetId/interface/HcalDetId.h" #include "DataFormats/JetReco/interface/Jet.h" #include "DataFormats/JetReco/interface/CaloJet.h" #include "DataFormats/JetReco/interface/CaloJetCollection.h" #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" #include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "DataFormats/GeometryVector/interface/GlobalPoint.h" #include "DataFormats/CaloTowers/interface/CaloTowerDetId.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" +#include "CondFormats/HcalObjects/interface/HcalRespCorrs.h" +#include "CondFormats/DataRecord/interface/HcalRespCorrsRcd.h" #include "TFile.h" #include "TH1.h" #include "TH2.h" #include "TTree.h" -#include "DataFormats/HcalDetId/interface/HcalDetId.h" #include #include @@ -57,6 +59,8 @@ namespace cms { private: // ----------member data --------------------------- + edm::ESGetToken tok_geom_; + edm::ESGetToken tok_resp_; std::ofstream *myout_hcal; std::string file_input; diff --git a/Calibration/HcalCalibAlgos/test/HcalCorrPFCalculation.cc b/Calibration/HcalCalibAlgos/test/HcalCorrPFCalculation.cc index e6bd6635a0cae..c34e27de9b0dd 100644 --- a/Calibration/HcalCalibAlgos/test/HcalCorrPFCalculation.cc +++ b/Calibration/HcalCalibAlgos/test/HcalCorrPFCalculation.cc @@ -1,5 +1,3 @@ - - #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Utilities/interface/InputTag.h" @@ -105,6 +103,11 @@ class HcalCorrPFCalculation : public edm::one::EDAnalyzer tok_EB_; edm::EDGetTokenT tok_tracks_; edm::EDGetTokenT tok_gen_; + + edm::ESGetToken tok_bFieldH_; + edm::ESGetToken tok_geom_; + edm::ESGetToken tok_resp_; + edm::ESGetToken tok_pfcorr_; }; HcalCorrPFCalculation::HcalCorrPFCalculation(edm::ParameterSet const& iConfig) { @@ -119,6 +122,11 @@ HcalCorrPFCalculation::HcalCorrPFCalculation(edm::ParameterSet const& iConfig) { tok_tracks_ = consumes(edm::InputTag("generalTracks")); tok_gen_ = consumes(edm::InputTag("generatorSmeared")); + tok_bFieldH_ = esConsumes(); + tok_geom_ = esConsumes(); + tok_resp_ = esConsumes(); + tok_pfcorr_ = esConsumes(); + // outputFile_ = iConfig.getUntrackedParameter("outputFile", "myfile.root"); Respcorr_ = iConfig.getUntrackedParameter("RespcorrAdd", false); @@ -158,13 +166,8 @@ void HcalCorrPFCalculation::analyze(edm::Event const& ev, edm::EventSetup const& AddRecalib = kFALSE; try { - edm::ESHandle recalibCorrs; - c.get().get("recalibrate", recalibCorrs); - respRecalib = recalibCorrs.product(); - - edm::ESHandle pfCorrs; - c.get().get("recalibrate", pfCorrs); - pfRecalib = pfCorrs.product(); + respRecalib = &c.getData(tok_resp_); + pfRecalib = &c.getData(tok_pfcorr_); AddRecalib = kTRUE; // edm::LogVerbatim("CalibConstants")<<" OK "; @@ -206,9 +209,7 @@ void HcalCorrPFCalculation::analyze(edm::Event const& ev, edm::EventSetup const& edm::Handle generalTracks; ev.getByToken(tok_tracks_, generalTracks); - edm::ESHandle pG; - c.get().get(pG); - geo = pG.product(); + geo = &c.getData(tok_geom_); gHcal = static_cast(geo->getSubdetectorGeometry(DetId::Hcal, HcalBarrel)); @@ -222,9 +223,8 @@ void HcalCorrPFCalculation::analyze(edm::Event const& ev, edm::EventSetup const& //parameters_.dREcal = taECALCone_; //parameters_.dRHcal = taHCALCone_; - edm::ESHandle bField; - c.get().get(bField); - stepPropF = new SteppingHelixPropagator(&*bField, alongMomentum); + const MagneticField* bField = &c.getData(tok_bFieldH_); + stepPropF = new SteppingHelixPropagator(bField, alongMomentum); stepPropF->setMaterialMode(false); stepPropF->applyRadX0Correction(true); diff --git a/Calibration/HcalCalibAlgos/test/HcalIsoTrackAnalysis.cc b/Calibration/HcalCalibAlgos/test/HcalIsoTrackAnalysis.cc index 149f6a6789713..c1fdebb239cd7 100644 --- a/Calibration/HcalCalibAlgos/test/HcalIsoTrackAnalysis.cc +++ b/Calibration/HcalCalibAlgos/test/HcalIsoTrackAnalysis.cc @@ -79,6 +79,9 @@ class HcalIsoTrackAnalysis : public edm::one::EDAnalyzer tok_hbhe_; edm::EDGetTokenT tok_ew_; + edm::ESGetToken tok_bFieldH_; + edm::ESGetToken tok_geom_; + std::vector h_eta_, h_eta0_, h_eta1_, h_rat0_, h_rat1_; TH1D *h_Dxy_, *h_Dz_, *h_Chi2_, *h_DpOverP_; TH1D *h_Layer_, *h_OutHit_, *h_InMiss_, *h_OutMiss_; @@ -150,6 +153,9 @@ HcalIsoTrackAnalysis::HcalIsoTrackAnalysis(const edm::ParameterSet& iConfig) << "\nThreshold for EB " << hitEthrEB_ << " EE " << hitEthrEE0_ << ":" << hitEthrEE1_ << ":" << hitEthrEE2_ << ":" << hitEthrEE3_ << ":" << hitEthrEELo_ << ":" << hitEthrEEHi_; + + tok_bFieldH_ = esConsumes(); + tok_geom_ = esConsumes(); } void HcalIsoTrackAnalysis::analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup) { @@ -159,14 +165,10 @@ void HcalIsoTrackAnalysis::analyze(edm::Event const& iEvent, edm::EventSetup con << iEvent.bunchCrossing(); #endif //Get magnetic field - edm::ESHandle bFieldH; - iSetup.get().get(bFieldH); - const MagneticField* bField = bFieldH.product(); + const MagneticField* bField = &iSetup.getData(tok_bFieldH_); // get handles to calogeometry - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry* geo = pG.product(); + const CaloGeometry* geo = &iSetup.getData(tok_geom_); bool okC(true); //Get track collection diff --git a/Calibration/HcalCalibAlgos/test/HcalIsoTrackStudy.cc b/Calibration/HcalCalibAlgos/test/HcalIsoTrackStudy.cc index 3724f5efb3d19..69d6b099b6a26 100644 --- a/Calibration/HcalCalibAlgos/test/HcalIsoTrackStudy.cc +++ b/Calibration/HcalCalibAlgos/test/HcalIsoTrackStudy.cc @@ -185,6 +185,15 @@ class HcalIsoTrackStudy : public edm::one::EDAnalyzer tok_ew_; edm::EDGetTokenT> tok_alg_; + edm::ESGetToken tok_ddrec_; + edm::ESGetToken tok_bFieldH_; + edm::ESGetToken tok_ecalChStatus_; + edm::ESGetToken tok_sevlv_; + edm::ESGetToken tok_geom_; + edm::ESGetToken tok_caloTopology_; + edm::ESGetToken tok_htopo_; + edm::ESGetToken tok_resp_; + TTree *tree, *tree2; unsigned int t_RunNo, t_EventNo; int t_Run, t_Event, t_DataType, t_ieta, t_iphi; @@ -346,6 +355,15 @@ HcalIsoTrackStudy::HcalIsoTrackStudy(const edm::ParameterSet& iConfig) edm::LogVerbatim("HcalIsoTrack") << "Trigger[" << k << "] " << trigNames_[k]; } + tok_ddrec_ = esConsumes(); + tok_bFieldH_ = esConsumes(); + tok_ecalChStatus_ = esConsumes(); + tok_sevlv_ = esConsumes(); + tok_geom_ = esConsumes(); + tok_caloTopology_ = esConsumes(); + tok_htopo_ = esConsumes(); + tok_resp_ = esConsumes(); + for (int i = 0; i < 10; i++) phibins_.push_back(-M_PI + 0.1 * (2 * i + 1) * M_PI); for (int i = 0; i < 8; ++i) @@ -376,34 +394,16 @@ void HcalIsoTrackStudy::analyze(edm::Event const& iEvent, edm::EventSetup const& << " Luminosity " << iEvent.luminosityBlock() << " Bunch " << iEvent.bunchCrossing(); #endif //Get magnetic field and ECAL channel status - edm::ESHandle bFieldH; - iSetup.get().get(bFieldH); - const MagneticField* bField = bFieldH.product(); - - edm::ESHandle ecalChStatus; - iSetup.get().get(ecalChStatus); - const EcalChannelStatus* theEcalChStatus = ecalChStatus.product(); - - edm::ESHandle sevlv; - iSetup.get().get(sevlv); - const EcalSeverityLevelAlgo* theEcalSevlv = sevlv.product(); + const MagneticField* bField = &iSetup.getData(tok_bFieldH_); + const EcalChannelStatus* theEcalChStatus = &iSetup.getData(tok_ecalChStatus_); + const EcalSeverityLevelAlgo* theEcalSevlv = &iSetup.getData(tok_sevlv_); // get handles to calogeometry and calotopology - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry* geo = pG.product(); - - edm::ESHandle theCaloTopology; - iSetup.get().get(theCaloTopology); - const CaloTopology* caloTopology = theCaloTopology.product(); - - edm::ESHandle htopo; - iSetup.get().get(htopo); - const HcalTopology* theHBHETopology = htopo.product(); - - edm::ESHandle resp; - iSetup.get().get(resp); - HcalRespCorrs* respCorrs = new HcalRespCorrs(*resp.product()); + const CaloGeometry* geo = &iSetup.getData(tok_geom_); + const CaloTopology* caloTopology = &iSetup.getData(tok_caloTopology_); + const HcalTopology* theHBHETopology = &iSetup.getData(tok_htopo_); + const HcalRespCorrs resp = iSetup.getData(tok_resp_); + HcalRespCorrs* respCorrs = new HcalRespCorrs(resp); respCorrs->setTopo(theHBHETopology); //=== genParticle information @@ -791,9 +791,7 @@ void HcalIsoTrackStudy::beginJob() { // ------------ method called when starting to processes a run ------------ void HcalIsoTrackStudy::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) { - edm::ESHandle pHRNDC; - iSetup.get().get(pHRNDC); - hdc_ = pHRNDC.product(); + hdc_ = &iSetup.getData(tok_ddrec_); bool changed_(true); bool flag = hltConfig_.init(iRun, iSetup, processName_, changed_); diff --git a/Calibration/HcalCalibAlgos/test/ValidationHcalIsoTrackAlCaReco.cc b/Calibration/HcalCalibAlgos/test/ValidationHcalIsoTrackAlCaReco.cc index d12ef59a2704e..806e18ead6ed7 100644 --- a/Calibration/HcalCalibAlgos/test/ValidationHcalIsoTrackAlCaReco.cc +++ b/Calibration/HcalCalibAlgos/test/ValidationHcalIsoTrackAlCaReco.cc @@ -21,8 +21,6 @@ // user include files -#include "FWCore/Framework/interface/ESHandle.h" - #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/EDAnalyzer.h" diff --git a/Calibration/HcalCalibAlgos/test/ValidationHcalIsoTrackAlCaReco.h b/Calibration/HcalCalibAlgos/test/ValidationHcalIsoTrackAlCaReco.h index e546a3bd978eb..25c31d2ae0b59 100644 --- a/Calibration/HcalCalibAlgos/test/ValidationHcalIsoTrackAlCaReco.h +++ b/Calibration/HcalCalibAlgos/test/ValidationHcalIsoTrackAlCaReco.h @@ -21,8 +21,6 @@ // user include files -#include "FWCore/Framework/interface/ESHandle.h" - #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/EDAnalyzer.h" diff --git a/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_cfg.py b/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_cfg.py index 8e193d620a994..abb00f559b1b2 100644 --- a/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_cfg.py +++ b/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_cfg.py @@ -10,7 +10,7 @@ process.GlobalTag.globaltag=autoCond['run1_mc'] process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories+=cms.untracked.vstring('GammaJetAnalysis') +process.MessageLogger.GammaJetAnalysis = dict() process.MessageLogger.cerr.FwkReport.reportEvery=cms.untracked.int32(1000) #load the gammaJet analyzer diff --git a/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_data2012_cfg.py b/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_data2012_cfg.py index b5d52613afcec..313525051b162 100644 --- a/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_data2012_cfg.py +++ b/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_data2012_cfg.py @@ -10,7 +10,7 @@ process.GlobalTag.globaltag=autoCond['run1_data'] process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories+=cms.untracked.vstring('GammaJetAnalysis') +process.MessageLogger.GammaJetAnalysis=dict() process.MessageLogger.cerr.FwkReport.reportEvery=cms.untracked.int32(1000) diff --git a/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_data2012_noGJetProd_cfg.py b/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_data2012_noGJetProd_cfg.py index b5872420ecc5d..c84036ad68d58 100644 --- a/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_data2012_noGJetProd_cfg.py +++ b/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_data2012_noGJetProd_cfg.py @@ -10,7 +10,7 @@ process.GlobalTag.globaltag=autoCond['run1_data'] process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories+=cms.untracked.vstring('GammaJetAnalysis') +process.MessageLogger.GammaJetAnalysis=dict() process.MessageLogger.cerr.FwkReport.reportEvery=cms.untracked.int32(1000) #load the analyzer diff --git a/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_noGJetProd_cfg.py b/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_noGJetProd_cfg.py index b68aae0670993..47608413db77c 100644 --- a/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_noGJetProd_cfg.py +++ b/Calibration/HcalCalibAlgos/test/python/gammaJetAnalysis_noGJetProd_cfg.py @@ -10,7 +10,7 @@ process.GlobalTag.globaltag=autoCond['run2_mc'] process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories+=cms.untracked.vstring('GammaJetAnalysis') +process.MessageLogger.GammaJetAnalysis = dict() #process.MessageLogger.cerr.FwkReport.reportEvery=cms.untracked.int32(1000) #load the response corrections calculator diff --git a/Calibration/HcalCalibAlgos/test/python/hcalHBHEMuonHighEta_cfg.py b/Calibration/HcalCalibAlgos/test/python/hcalHBHEMuonHighEta_cfg.py index e790bd28607dc..522be7720d77c 100644 --- a/Calibration/HcalCalibAlgos/test/python/hcalHBHEMuonHighEta_cfg.py +++ b/Calibration/HcalCalibAlgos/test/python/hcalHBHEMuonHighEta_cfg.py @@ -20,7 +20,7 @@ process.load("Calibration.HcalCalibAlgos.hcalHBHEMuonHighEta_cfi") if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HBHEMuon') + process.MessageLogger.HBHEMuon=dict() process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100) diff --git a/Calibration/HcalCalibAlgos/test/python/hcalHBHEMuon_cfg.py b/Calibration/HcalCalibAlgos/test/python/hcalHBHEMuon_cfg.py index 6de4a1489e394..98f2306833b0e 100644 --- a/Calibration/HcalCalibAlgos/test/python/hcalHBHEMuon_cfg.py +++ b/Calibration/HcalCalibAlgos/test/python/hcalHBHEMuon_cfg.py @@ -14,7 +14,7 @@ process.load("Calibration.HcalCalibAlgos.hcalHBHEMuon_cfi") if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HBHEMuon') + process.MessageLogger.HBHEMuon=dict() process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) process.source = cms.Source("PoolSource", diff --git a/Calibration/HcalCalibAlgos/test/python/isoTrackAlCaRecoAnalysis_cfg.py b/Calibration/HcalCalibAlgos/test/python/isoTrackAlCaRecoAnalysis_cfg.py index 446eb883b6e77..882f4211b8a46 100644 --- a/Calibration/HcalCalibAlgos/test/python/isoTrackAlCaRecoAnalysis_cfg.py +++ b/Calibration/HcalCalibAlgos/test/python/isoTrackAlCaRecoAnalysis_cfg.py @@ -13,7 +13,7 @@ #process.GlobalTag.globaltag = 'START53_V15::All' if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HcalIsoTrack') + process.MessageLogger.HcalIsoTrack=dict() process.MessageLogger.cerr.FwkReport.reportEvery = 1 process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) diff --git a/Calibration/HcalCalibAlgos/test/python/isoTrackRecoAnalysis_cfg.py b/Calibration/HcalCalibAlgos/test/python/isoTrackRecoAnalysis_cfg.py index a950c2e4f72b7..1ec99dd761a5c 100644 --- a/Calibration/HcalCalibAlgos/test/python/isoTrackRecoAnalysis_cfg.py +++ b/Calibration/HcalCalibAlgos/test/python/isoTrackRecoAnalysis_cfg.py @@ -16,7 +16,7 @@ process.GlobalTag.globaltag='106X_dataRun2_v20' #106X_mcRun3_2021_realistic_v3 if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HcalIsoTrack') + process.MessageLogger.HcalIsoTrack=dict() process.MessageLogger.cerr.FwkReport.reportEvery = 1 process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) diff --git a/Calibration/HcalCalibAlgos/test/python/isoTrackStudy_cfg.py b/Calibration/HcalCalibAlgos/test/python/isoTrackStudy_cfg.py index c5af5a26721f9..2038368bd9a6b 100644 --- a/Calibration/HcalCalibAlgos/test/python/isoTrackStudy_cfg.py +++ b/Calibration/HcalCalibAlgos/test/python/isoTrackStudy_cfg.py @@ -20,7 +20,7 @@ process.GlobalTag.globaltag='106X_mcRun3_2021_realistic_v3' if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HcalIsoTrack') + process.MessageLogger.HcalIsoTrack=dict() process.MessageLogger.cerr.FwkReport.reportEvery = 1 process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) diff --git a/Calibration/HcalCalibAlgos/test/python/recAnalyzerHF_cfg.py b/Calibration/HcalCalibAlgos/test/python/recAnalyzerHF_cfg.py index 868222e1c075b..8d5c0995f2898 100644 --- a/Calibration/HcalCalibAlgos/test/python/recAnalyzerHF_cfg.py +++ b/Calibration/HcalCalibAlgos/test/python/recAnalyzerHF_cfg.py @@ -6,7 +6,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('AnalyzerHF') + process.MessageLogger.AnalyzerHF=dict() # import of standard configurations process.maxEvents = cms.untracked.PSet( diff --git a/Calibration/HcalIsolatedTrackReco/interface/ECALRegFEDSelector.h b/Calibration/HcalIsolatedTrackReco/interface/ECALRegFEDSelector.h index 6010c06dced81..1fc7d9c814723 100644 --- a/Calibration/HcalIsolatedTrackReco/interface/ECALRegFEDSelector.h +++ b/Calibration/HcalIsolatedTrackReco/interface/ECALRegFEDSelector.h @@ -12,7 +12,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" #include "DataFormats/FEDRawData/interface/FEDRawData.h" diff --git a/Calibration/HcalIsolatedTrackReco/interface/EcalIsolatedParticleCandidateProducer.h b/Calibration/HcalIsolatedTrackReco/interface/EcalIsolatedParticleCandidateProducer.h index d10e2ba80e085..b198b840e9cb5 100644 --- a/Calibration/HcalIsolatedTrackReco/interface/EcalIsolatedParticleCandidateProducer.h +++ b/Calibration/HcalIsolatedTrackReco/interface/EcalIsolatedParticleCandidateProducer.h @@ -12,6 +12,9 @@ #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "DataFormats/HcalIsolatedTrack/interface/IsolatedPixelTrackCandidate.h" + +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" // // class decleration // @@ -36,6 +39,8 @@ class EcalIsolatedParticleCandidateProducer : public edm::global::EDProducer<> { edm::EDGetTokenT tok_EB_; edm::EDGetTokenT tok_EE_; + edm::ESGetToken tok_geom_; + // ----------member data --------------------------- }; diff --git a/Calibration/HcalIsolatedTrackReco/interface/IsolatedEcalPixelTrackCandidateProducer.h b/Calibration/HcalIsolatedTrackReco/interface/IsolatedEcalPixelTrackCandidateProducer.h index a0ac1d97433a5..1a0a0068f02ad 100644 --- a/Calibration/HcalIsolatedTrackReco/interface/IsolatedEcalPixelTrackCandidateProducer.h +++ b/Calibration/HcalIsolatedTrackReco/interface/IsolatedEcalPixelTrackCandidateProducer.h @@ -13,6 +13,9 @@ #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" + // // class decleration // @@ -30,6 +33,7 @@ class IsolatedEcalPixelTrackCandidateProducer : public edm::global::EDProducer<> const edm::EDGetTokenT tok_ee; const edm::EDGetTokenT tok_eb; const edm::EDGetTokenT tok_trigcand; + const edm::ESGetToken tok_geom_; const double coneSizeEta0_; const double coneSizeEta1_; const double hitCountEthrEB_; diff --git a/Calibration/HcalIsolatedTrackReco/interface/IsolatedPixelTrackCandidateL1TProducer.h b/Calibration/HcalIsolatedTrackReco/interface/IsolatedPixelTrackCandidateL1TProducer.h index b93ad728bfb90..b2903ea6db1f9 100644 --- a/Calibration/HcalIsolatedTrackReco/interface/IsolatedPixelTrackCandidateL1TProducer.h +++ b/Calibration/HcalIsolatedTrackReco/interface/IsolatedPixelTrackCandidateL1TProducer.h @@ -42,6 +42,11 @@ #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerObjectMapFwd.h" #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerObjectMap.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" + class IsolatedPixelTrackCandidateL1TProducer : public edm::stream::EDProducer<> { public: IsolatedPixelTrackCandidateL1TProducer(const edm::ParameterSet& ps); @@ -67,6 +72,8 @@ class IsolatedPixelTrackCandidateL1TProducer : public edm::stream::EDProducer<> const edm::EDGetTokenT tok_l1_; const edm::EDGetTokenT tok_vert_; const std::vector > toks_pix_; + const edm::ESGetToken tok_bFieldH_; + const edm::ESGetToken tok_geom_; const std::string bfield_; const double prelimCone_; diff --git a/Calibration/HcalIsolatedTrackReco/interface/IsolatedPixelTrackCandidateProducer.h b/Calibration/HcalIsolatedTrackReco/interface/IsolatedPixelTrackCandidateProducer.h index 240465b88b450..905e1daf16c80 100644 --- a/Calibration/HcalIsolatedTrackReco/interface/IsolatedPixelTrackCandidateProducer.h +++ b/Calibration/HcalIsolatedTrackReco/interface/IsolatedPixelTrackCandidateProducer.h @@ -39,6 +39,11 @@ #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerObjectMapFwd.h" #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerObjectMap.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" + class IsolatedPixelTrackCandidateProducer : public edm::stream::EDProducer<> { public: IsolatedPixelTrackCandidateProducer(const edm::ParameterSet& ps); @@ -64,6 +69,8 @@ class IsolatedPixelTrackCandidateProducer : public edm::stream::EDProducer<> { const edm::EDGetTokenT tok_l1_; const edm::EDGetTokenT tok_vert_; const std::vector > toks_pix_; + const edm::ESGetToken tok_bFieldH_; + const edm::ESGetToken tok_geom_; const std::string bfield_; const double prelimCone_; diff --git a/Calibration/HcalIsolatedTrackReco/interface/SiStripRegFEDSelector.h b/Calibration/HcalIsolatedTrackReco/interface/SiStripRegFEDSelector.h index 67dc8db39f164..c8073dc5888b8 100644 --- a/Calibration/HcalIsolatedTrackReco/interface/SiStripRegFEDSelector.h +++ b/Calibration/HcalIsolatedTrackReco/interface/SiStripRegFEDSelector.h @@ -12,7 +12,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" @@ -20,23 +19,22 @@ #include "DataFormats/FEDRawData/interface/FEDNumbering.h" #include "CalibFormats/SiStripObjects/interface/SiStripRegionCabling.h" +#include "CalibTracker/Records/interface/SiStripRegionCablingRcd.h" class SiStripRegFEDSelector : public edm::EDProducer { public: SiStripRegFEDSelector(const edm::ParameterSet&); ~SiStripRegFEDSelector() override; - edm::ESHandle strip_cabling; - - double delta_; - - edm::EDGetTokenT tok_raw_; - edm::EDGetTokenT tok_seed_; - private: void beginJob() override; void produce(edm::Event&, const edm::EventSetup&) override; void endJob() override; + + const edm::EDGetTokenT tok_seed_; + const edm::EDGetTokenT tok_raw_; + const edm::ESGetToken tok_strip_; + const double delta_; }; #endif diff --git a/Calibration/HcalIsolatedTrackReco/interface/SubdetFEDSelector.h b/Calibration/HcalIsolatedTrackReco/interface/SubdetFEDSelector.h index 225096ecd0ac2..5e817320eed3b 100644 --- a/Calibration/HcalIsolatedTrackReco/interface/SubdetFEDSelector.h +++ b/Calibration/HcalIsolatedTrackReco/interface/SubdetFEDSelector.h @@ -9,7 +9,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" #include "DataFormats/FEDRawData/interface/FEDRawData.h" diff --git a/Calibration/HcalIsolatedTrackReco/src/EcalIsolatedParticleCandidateProducer.cc b/Calibration/HcalIsolatedTrackReco/src/EcalIsolatedParticleCandidateProducer.cc index a455776b361ac..f0d8fbad689d5 100644 --- a/Calibration/HcalIsolatedTrackReco/src/EcalIsolatedParticleCandidateProducer.cc +++ b/Calibration/HcalIsolatedTrackReco/src/EcalIsolatedParticleCandidateProducer.cc @@ -26,12 +26,13 @@ #include "DataFormats/Common/interface/Ref.h" #include "DataFormats/DetId/interface/DetId.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Geometry/CaloTopology/interface/EcalBarrelTopology.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "Calibration/HcalIsolatedTrackReco/interface/EcalIsolatedParticleCandidateProducer.h" +//#define EDM_ML_DEBUG + EcalIsolatedParticleCandidateProducer::EcalIsolatedParticleCandidateProducer(const edm::ParameterSet& conf) { InConeSize_ = conf.getParameter("EcalInnerConeSize"); OutConeSize_ = conf.getParameter("EcalOuterConeSize"); @@ -42,6 +43,8 @@ EcalIsolatedParticleCandidateProducer::EcalIsolatedParticleCandidateProducer(con tok_EB_ = consumes(conf.getParameter("EBrecHitCollectionLabel")); tok_EE_ = consumes(conf.getParameter("EErecHitCollectionLabel")); + tok_geom_ = esConsumes(); + //register your products produces(); } @@ -59,26 +62,29 @@ EcalIsolatedParticleCandidateProducer::~EcalIsolatedParticleCandidateProducer() void EcalIsolatedParticleCandidateProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { - // std::cout<<"get tau"< l1Taus; iEvent.getByToken(tok_l1tau_, l1Taus); - // std::cout<<"get geom"< pG; - iSetup.get().get(pG); - const CaloGeometry* geo = pG.product(); - - // std::cout<<" get ec rechit"< ecalEB; iEvent.getByToken(tok_EB_, ecalEB); edm::Handle ecalEE; iEvent.getByToken(tok_EE_, ecalEE); - // std::cout<<"get l1 trig obj"< l1trigobj; iEvent.getByToken(tok_hlt_, l1trigobj); @@ -93,8 +99,9 @@ void EcalIsolatedParticleCandidateProducer::produce(edm::StreamID, double etaTriggered = -100; double phiTriggered = -100; - // std::cout<<"find highest pT triggered obj"<pt() > ptTriggered) { ptTriggered = l1tauobjref[p]->pt(); @@ -112,8 +119,9 @@ void EcalIsolatedParticleCandidateProducer::produce(edm::StreamID, auto iptcCollection = std::make_unique(); - // std::cout<<"loop over l1taus"<begin(); tit != l1Taus->end(); tit++) { double dphi = fabs(tit->phi() - phiTriggered); if (dphi > M_PI) @@ -125,7 +133,9 @@ void EcalIsolatedParticleCandidateProducer::produce(edm::StreamID, int nhitIn = 0; double OutEnergy = 0; double InEnergy = 0; - // std::cout<<" loops over rechits"<begin(); eItr != ecalEB->end(); eItr++) { double phiD, R; const GlobalPoint& pos = geo->getPosition(eItr->detid()); @@ -173,7 +183,9 @@ void EcalIsolatedParticleCandidateProducer::produce(edm::StreamID, InEnergy += eItr->energy(); } } - // std::cout<<"create and push_back candidate"<begin()), InEnergy, OutEnergy, nhitIn, nhitOut); iptcCollection->push_back(newca); @@ -182,7 +194,9 @@ void EcalIsolatedParticleCandidateProducer::produce(edm::StreamID, //Use the ExampleData to create an ExampleData2 which // is put into the Event - // std::cout<<"put cand into event"<("RegionPSet"); diff --git a/Calibration/HcalIsolatedTrackReco/src/IPTCorrector.cc b/Calibration/HcalIsolatedTrackReco/src/IPTCorrector.cc index e8dceb4279975..662815bb4ea80 100644 --- a/Calibration/HcalIsolatedTrackReco/src/IPTCorrector.cc +++ b/Calibration/HcalIsolatedTrackReco/src/IPTCorrector.cc @@ -7,7 +7,6 @@ #include "DataFormats/HcalIsolatedTrack/interface/IsolatedPixelTrackCandidateFwd.h" // Framework #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/Utilities/interface/Exception.h" diff --git a/Calibration/HcalIsolatedTrackReco/src/IsolatedEcalPixelTrackCandidateProducer.cc b/Calibration/HcalIsolatedTrackReco/src/IsolatedEcalPixelTrackCandidateProducer.cc index 64fbf8d6b3233..c2268e29c5d7e 100644 --- a/Calibration/HcalIsolatedTrackReco/src/IsolatedEcalPixelTrackCandidateProducer.cc +++ b/Calibration/HcalIsolatedTrackReco/src/IsolatedEcalPixelTrackCandidateProducer.cc @@ -24,20 +24,20 @@ // user include files #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/Common/interface/Ref.h" #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/Math/interface/deltaR.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" #include "Calibration/HcalIsolatedTrackReco/interface/IsolatedEcalPixelTrackCandidateProducer.h" +//#define EDM_ML_DEBUG + IsolatedEcalPixelTrackCandidateProducer::IsolatedEcalPixelTrackCandidateProducer(const edm::ParameterSet& conf) : tok_ee(consumes(conf.getParameter("EERecHitSource"))), tok_eb(consumes(conf.getParameter("EBRecHitSource"))), tok_trigcand(consumes(conf.getParameter("filterLabel"))), + tok_geom_(esConsumes()), coneSizeEta0_(conf.getParameter("EcalConeSizeEta0")), coneSizeEta1_(conf.getParameter("EcalConeSizeEta1")), hitCountEthrEB_(conf.getParameter("EBHitCountEnergyThreshold")), @@ -75,11 +75,9 @@ void IsolatedEcalPixelTrackCandidateProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { #ifdef EDM_ML_DEBUG - edm::LogInfo("HcalIsoTrack") << "==============Inside IsolatedEcalPixelTrackCandidateProducer"; + edm::LogVerbatim("HcalIsoTrack") << "==============Inside IsolatedEcalPixelTrackCandidateProducer"; #endif - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry* geo = pG.product(); + const CaloGeometry* geo = &iSetup.getData(tok_geom_); edm::Handle ecalEB; iEvent.getByToken(tok_eb, ecalEB); @@ -87,7 +85,7 @@ void IsolatedEcalPixelTrackCandidateProducer::produce(edm::StreamID, edm::Handle ecalEE; iEvent.getByToken(tok_ee, ecalEE); #ifdef EDM_ML_DEBUG - edm::LogInfo("HcalIsoTrack") << "ecal Collections isValid: " << ecalEB.isValid() << "/" << ecalEE.isValid(); + edm::LogVerbatim("HcalIsoTrack") << "ecal Collections isValid: " << ecalEB.isValid() << "/" << ecalEE.isValid(); #endif edm::Handle trigCand; @@ -99,10 +97,10 @@ void IsolatedEcalPixelTrackCandidateProducer::produce(edm::StreamID, auto iptcCollection = std::make_unique(); #ifdef EDM_ML_DEBUG - edm::LogInfo("HcalIsoTrack") << "coneSize_ " << coneSizeEta0_ << "/" << coneSizeEta1_ << " hitCountEthrEB_ " - << hitCountEthrEB_ << " hitEthrEB_ " << hitEthrEB_ << " fachitCountEE_ " - << fachitCountEE_ << " hitEthrEE " << hitEthrEE0_ << ":" << hitEthrEE1_ << ":" - << hitEthrEE2_ << ":" << hitEthrEE3_; + edm::LogVerbatim("HcalIsoTrack") << "coneSize_ " << coneSizeEta0_ << "/" << coneSizeEta1_ << " hitCountEthrEB_ " + << hitCountEthrEB_ << " hitEthrEB_ " << hitEthrEB_ << " fachitCountEE_ " + << fachitCountEE_ << " hitEthrEE " << hitEthrEE0_ << ":" << hitEthrEE1_ << ":" + << hitEthrEE2_ << ":" << hitEthrEE3_; #endif for (int p = 0; p < nCand; p++) { int nhitIn(0), nhitOut(0); @@ -113,10 +111,10 @@ void IsolatedEcalPixelTrackCandidateProducer::produce(edm::StreamID, double etaAbs = std::abs(etaPhi.first); double coneSize_ = (etaAbs > 1.5) ? coneSizeEta1_ : (coneSizeEta0_ * (1.5 - etaAbs) + coneSizeEta1_ * etaAbs) / 1.5; #ifdef EDM_ML_DEBUG - edm::LogInfo("HcalIsoTrack") << "Track: eta/phi " << etaPhi.first << "/" << etaPhi.second - << " pt:" << isoPixTrackRefs[p]->track()->pt() << " cone " << coneSize_ << "\n" - << "rechit size EB/EE : " << ecalEB->size() << "/" << ecalEE->size() - << " coneSize_: " << coneSize_; + edm::LogVerbatim("HcalIsoTrack") << "Track: eta/phi " << etaPhi.first << "/" << etaPhi.second + << " pt:" << isoPixTrackRefs[p]->track()->pt() << " cone " << coneSize_ << "\n" + << "rechit size EB/EE : " << ecalEB->size() << "/" << ecalEE->size() + << " coneSize_: " << coneSize_; #endif if (etaAbs < 1.7) { int nin(0), nout(0); @@ -134,8 +132,8 @@ void IsolatedEcalPixelTrackCandidateProducer::produce(edm::StreamID, ++nout; } #ifdef EDM_ML_DEBUG - edm::LogInfo("HcalIsoTrack") << "EBRechit close to the track has E " << eItr.energy() - << " eta/phi: " << pos.eta() << "/" << pos.phi() << " deltaR: " << R; + edm::LogVerbatim("HcalIsoTrack") << "EBRechit close to the track has E " << eItr.energy() + << " eta/phi: " << pos.eta() << "/" << pos.phi() << " deltaR: " << R; #endif } } @@ -160,15 +158,15 @@ void IsolatedEcalPixelTrackCandidateProducer::produce(edm::StreamID, ++nout; } #ifdef EDM_ML_DEBUG - edm::LogInfo("HcalIsoTrack") << "EERechit close to the track has E " << eItr.energy() - << " eta/phi: " << pos.eta() << "/" << pos.phi() << " deltaR: " << R; + edm::LogVerbatim("HcalIsoTrack") << "EERechit close to the track has E " << eItr.energy() + << " eta/phi: " << pos.eta() << "/" << pos.phi() << " deltaR: " << R; #endif } } } #ifdef EDM_ML_DEBUG - edm::LogInfo("HcalIsoTrack") << "nhitIn:" << nhitIn << " inEnergy:" << inEnergy << " nhitOut:" << nhitOut - << " outEnergy:" << outEnergy; + edm::LogVerbatim("HcalIsoTrack") << "nhitIn:" << nhitIn << " inEnergy:" << inEnergy << " nhitOut:" << nhitOut + << " outEnergy:" << outEnergy; #endif reco::IsolatedPixelTrackCandidate newca(*isoPixTrackRefs[p]); newca.setEnergyIn(inEnergy); @@ -178,7 +176,7 @@ void IsolatedEcalPixelTrackCandidateProducer::produce(edm::StreamID, iptcCollection->push_back(newca); } #ifdef EDM_ML_DEBUG - edm::LogInfo("HcalIsoTrack") << "ncand:" << nCand << " outcollction size:" << iptcCollection->size(); + edm::LogVerbatim("HcalIsoTrack") << "ncand:" << nCand << " outcollction size:" << iptcCollection->size(); #endif iEvent.put(std::move(iptcCollection)); } diff --git a/Calibration/HcalIsolatedTrackReco/src/IsolatedPixelTrackCandidateL1TProducer.cc b/Calibration/HcalIsolatedTrackReco/src/IsolatedPixelTrackCandidateL1TProducer.cc index 8660df870cb56..bd265461722ef 100644 --- a/Calibration/HcalIsolatedTrackReco/src/IsolatedPixelTrackCandidateL1TProducer.cc +++ b/Calibration/HcalIsolatedTrackReco/src/IsolatedPixelTrackCandidateL1TProducer.cc @@ -8,8 +8,6 @@ #include "DataFormats/HcalIsolatedTrack/interface/IsolatedPixelTrackCandidateFwd.h" // Framework #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/ESTransientHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/Utilities/interface/Exception.h" @@ -21,16 +19,14 @@ #include "DataFormats/Math/interface/deltaR.h" //magF -#include "MagneticField/Engine/interface/MagneticField.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include "MagneticField/VolumeBasedEngine/interface/VolumeBasedMagneticField.h" //for ECAL geometry #include "Geometry/EcalAlgo/interface/EcalBarrelGeometry.h" #include "Geometry/EcalAlgo/interface/EcalEndcapGeometry.h" #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" + +//#define EDM_ML_DEBUG IsolatedPixelTrackCandidateL1TProducer::IsolatedPixelTrackCandidateL1TProducer(const edm::ParameterSet& config) : tok_hlt_(consumes(config.getParameter("L1GTSeedLabel"))), @@ -39,6 +35,8 @@ IsolatedPixelTrackCandidateL1TProducer::IsolatedPixelTrackCandidateL1TProducer(c toks_pix_( edm::vector_transform(config.getParameter >("PixelTracksSources"), [this](edm::InputTag const& tag) { return consumes(tag); })), + tok_bFieldH_(esConsumes()), + tok_geom_(esConsumes()), bfield_(config.getParameter("MagFieldRecordName")), prelimCone_(config.getParameter("ExtrapolationConeSize")), pixelIsolationConeSizeAtEC_(config.getParameter("PixelIsolationConeSizeAtEC")), @@ -79,8 +77,7 @@ void IsolatedPixelTrackCandidateL1TProducer::fillDescriptions(edm::Configuration } void IsolatedPixelTrackCandidateL1TProducer::beginRun(const edm::Run& run, const edm::EventSetup& theEventSetup) { - edm::ESHandle pG; - theEventSetup.get().get(pG); + const CaloGeometry* pG = &theEventSetup.getData(tok_geom_); const double rad(dynamic_cast(pG->getSubdetectorGeometry(DetId::Ecal, EcalBarrel)) ->avgRadiusXYFrontFaceCenter()); @@ -90,12 +87,13 @@ void IsolatedPixelTrackCandidateL1TProducer::beginRun(const edm::Run& run, const rEB_ = rad; zEE_ = zz; - edm::ESHandle vbfField; - theEventSetup.get().get(vbfField); + const MagneticField* vbfField = &theEventSetup.getData(tok_bFieldH_); const VolumeBasedMagneticField* vbfCPtr = dynamic_cast(&(*vbfField)); GlobalVector BField = vbfCPtr->inTesla(GlobalPoint(0, 0, 0)); bfVal_ = BField.mag(); - LogTrace("IsoTrack") << "rEB " << rEB_ << " zEE " << zEE_ << " B " << bfVal_ << std::endl; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("IsoTrack") << "rEB " << rEB_ << " zEE " << zEE_ << " B " << bfVal_; +#endif } void IsolatedPixelTrackCandidateL1TProducer::produce(edm::Event& theEvent, const edm::EventSetup& theEventSetup) { @@ -147,9 +145,10 @@ void IsolatedPixelTrackCandidateL1TProducer::produce(edm::Event& theEvent, const etaTriggered = p->eta(); } } - LogTrace("IsoTrack") << "Sizes " << l1tauobjref.size() << ":" << l1jetobjref.size() << " Trig " << ptTriggered << ":" - << etaTriggered << ":" << phiTriggered << std::endl; - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("IsoTrack") << "Sizes " << l1tauobjref.size() << ":" << l1jetobjref.size() << " Trig " << ptTriggered + << ":" << etaTriggered << ":" << phiTriggered; +#endif double drMaxL1Track_ = tauAssocCone_; int ntr = 0; std::vector VecSeedsatEC; @@ -174,12 +173,15 @@ void IsolatedPixelTrackCandidateL1TProducer::produce(edm::Event& theEvent, const } else { vtxMatch = true; } - LogTrace("IsoTrack") << "minZD " << minDZ << " Found " << found << ":" << vtxMatch << std::endl; - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("IsoTrack") << "minZD " << minDZ << " Found " << found << ":" << vtxMatch; +#endif //select tracks not matched to triggered L1 jet double R = reco::deltaR(etaTriggered, phiTriggered, pixelTrackRefs[iS]->eta(), pixelTrackRefs[iS]->phi()); - LogTrace("IsoTrack") << "Distance to L1 " << R << ":" << tauUnbiasCone_ << " Result " << (R < tauUnbiasCone_) - << std::endl; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("IsoTrack") << "Distance to L1 " << R << ":" << tauUnbiasCone_ << " Result " + << (R < tauUnbiasCone_); +#endif if (R < tauUnbiasCone_) continue; @@ -195,8 +197,9 @@ void IsolatedPixelTrackCandidateL1TProducer::produce(edm::Event& theEvent, const selj = tj; tmatch = true; } //loop over L1 tau - LogTrace("IsoTrack") << "tMatch " << tmatch << std::endl; - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("IsoTrack") << "tMatch " << tmatch; +#endif //propagate seed track to ECAL surface: std::pair seedCooAtEC; // in case vertex is found: @@ -215,7 +218,9 @@ void IsolatedPixelTrackCandidateL1TProducer::produce(edm::Event& theEvent, const 0); seedAtEC seed(iS, (tmatch || vtxMatch), seedCooAtEC.first, seedCooAtEC.second); VecSeedsatEC.push_back(seed); - LogTrace("IsoTrack") << "Seed " << seedCooAtEC.first << seedCooAtEC.second << std::endl; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("IsoTrack") << "Seed " << seedCooAtEC.first << seedCooAtEC.second; +#endif } for (unsigned int i = 0; i < VecSeedsatEC.size(); i++) { unsigned int iSeed = VecSeedsatEC[i].index; @@ -273,7 +278,9 @@ void IsolatedPixelTrackCandidateL1TProducer::produce(edm::Event& theEvent, const ntr++; } } - LogTrace("IsoTrack") << "Number of Isolated Track " << ntr << "\n"; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("IsoTrack") << "Number of Isolated Track " << ntr; +#endif // put the product in the event theEvent.put(std::move(trackCollection)); } diff --git a/Calibration/HcalIsolatedTrackReco/src/IsolatedPixelTrackCandidateProducer.cc b/Calibration/HcalIsolatedTrackReco/src/IsolatedPixelTrackCandidateProducer.cc index 4eef5238fb80f..b160c03ccf954 100644 --- a/Calibration/HcalIsolatedTrackReco/src/IsolatedPixelTrackCandidateProducer.cc +++ b/Calibration/HcalIsolatedTrackReco/src/IsolatedPixelTrackCandidateProducer.cc @@ -8,8 +8,6 @@ #include "DataFormats/HcalIsolatedTrack/interface/IsolatedPixelTrackCandidateFwd.h" // Framework #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/ESTransientHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/Utilities/interface/Exception.h" @@ -21,18 +19,14 @@ #include "DataFormats/Math/interface/deltaR.h" //magF -#include "MagneticField/Engine/interface/MagneticField.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include "MagneticField/VolumeBasedEngine/interface/VolumeBasedMagneticField.h" //for ECAL geometry #include "Geometry/EcalAlgo/interface/EcalBarrelGeometry.h" #include "Geometry/EcalAlgo/interface/EcalEndcapGeometry.h" #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" -//#define DebugLog +//#define EDM_ML_DEBUG IsolatedPixelTrackCandidateProducer::IsolatedPixelTrackCandidateProducer(const edm::ParameterSet& config) : tok_hlt_(consumes(config.getParameter("L1GTSeedLabel"))), @@ -41,6 +35,8 @@ IsolatedPixelTrackCandidateProducer::IsolatedPixelTrackCandidateProducer(const e toks_pix_( edm::vector_transform(config.getParameter >("PixelTracksSources"), [this](edm::InputTag const& tag) { return consumes(tag); })), + tok_bFieldH_(esConsumes()), + tok_geom_(esConsumes()), bfield_(config.getParameter("MagFieldRecordName")), prelimCone_(config.getParameter("ExtrapolationConeSize")), pixelIsolationConeSizeAtEC_(config.getParameter("PixelIsolationConeSizeAtEC")), @@ -81,8 +77,7 @@ void IsolatedPixelTrackCandidateProducer::fillDescriptions(edm::ConfigurationDes } void IsolatedPixelTrackCandidateProducer::beginRun(const edm::Run& run, const edm::EventSetup& theEventSetup) { - edm::ESHandle pG; - theEventSetup.get().get(pG); + const CaloGeometry* pG = &theEventSetup.getData(tok_geom_); const double rad(dynamic_cast(pG->getSubdetectorGeometry(DetId::Ecal, EcalBarrel)) ->avgRadiusXYFrontFaceCenter()); @@ -92,8 +87,7 @@ void IsolatedPixelTrackCandidateProducer::beginRun(const edm::Run& run, const ed rEB_ = rad; zEE_ = zz; - edm::ESHandle vbfField; - theEventSetup.get().get(vbfField); + const MagneticField* vbfField = &theEventSetup.getData(tok_bFieldH_); const VolumeBasedMagneticField* vbfCPtr = dynamic_cast(&(*vbfField)); GlobalVector BField = vbfCPtr->inTesla(GlobalPoint(0, 0, 0)); bfVal_ = BField.mag(); @@ -104,9 +98,9 @@ void IsolatedPixelTrackCandidateProducer::produce(edm::Event& theEvent, const ed //create vector of refs from input collections std::vector pixelTrackRefs; -#ifdef DebugLog - edm::LogInfo("HcalIsoTrack") << "IsolatedPixelTrakCandidate: with" << toks_pix_.size() - << " candidates to start with\n"; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HcalIsoTrack") << "IsolatedPixelTrakCandidate: with" << toks_pix_.size() + << " candidates to start with\n"; #endif for (unsigned int iPix = 0; iPix < toks_pix_.size(); iPix++) { edm::Handle iPixCol; @@ -180,8 +174,9 @@ void IsolatedPixelTrackCandidateProducer::produce(edm::Event& theEvent, const ed seedAtEC seed(iS, (tmatch || vtxMatch), seedCooAtEC.first, seedCooAtEC.second); VecSeedsatEC.push_back(seed); } -#ifdef DebugLog - edm::LogInfo("HcalIsoTrack") << "IsolatedPixelTrakCandidate: " << VecSeedsatEC.size() << " seeds after propagation\n"; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HcalIsoTrack") << "IsolatedPixelTrakCandidate: " << VecSeedsatEC.size() + << " seeds after propagation\n"; #endif for (unsigned int i = 0; i < VecSeedsatEC.size(); i++) { @@ -242,8 +237,8 @@ void IsolatedPixelTrackCandidateProducer::produce(edm::Event& theEvent, const ed } // put the product in the event theEvent.put(std::move(trackCollection)); -#ifdef DebugLog - edm::LogInfo("HcalIsoTrack") << "IsolatedPixelTrackCandidate: Final # of candiates " << ntr << "\n"; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HcalIsoTrack") << "IsolatedPixelTrackCandidate: Final # of candiates " << ntr << "\n"; #endif } diff --git a/Calibration/HcalIsolatedTrackReco/src/SiStripRegFEDSelector.cc b/Calibration/HcalIsolatedTrackReco/src/SiStripRegFEDSelector.cc index 892a37aaaf2ca..55f915c08637f 100644 --- a/Calibration/HcalIsolatedTrackReco/src/SiStripRegFEDSelector.cc +++ b/Calibration/HcalIsolatedTrackReco/src/SiStripRegFEDSelector.cc @@ -1,16 +1,15 @@ #include "Calibration/HcalIsolatedTrackReco/interface/SiStripRegFEDSelector.h" -#include "CalibTracker/Records/interface/SiStripRegionCablingRcd.h" #include "CondFormats/SiStripObjects/interface/FedChannelConnection.h" #include "DataFormats/HcalIsolatedTrack/interface/IsolatedPixelTrackCandidate.h" #include "DataFormats/HcalIsolatedTrack/interface/IsolatedPixelTrackCandidateFwd.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" -SiStripRegFEDSelector::SiStripRegFEDSelector(const edm::ParameterSet& iConfig) { - tok_seed_ = consumes(iConfig.getParameter("regSeedLabel")); - delta_ = iConfig.getParameter("delta"); - - tok_raw_ = consumes(iConfig.getParameter("rawInputLabel")); - +SiStripRegFEDSelector::SiStripRegFEDSelector(const edm::ParameterSet& iConfig) + : tok_seed_(consumes(iConfig.getParameter("regSeedLabel"))), + tok_raw_(consumes(iConfig.getParameter("rawInputLabel"))), + tok_strip_(esConsumes()), + delta_(iConfig.getParameter("delta")) { produces(); } @@ -28,12 +27,11 @@ void SiStripRegFEDSelector::produce(edm::Event& iEvent, const edm::EventSetup& i edm::Handle rawIn; iEvent.getByToken(tok_raw_, rawIn); - iSetup.get().get(strip_cabling); - + const SiStripRegionCabling* strip_cabling = &iSetup.getData(tok_strip_); std::vector stripFEDVec; //get vector of regions - const SiStripRegionCabling::Cabling ccab = strip_cabling->getRegionCabling(); + const SiStripRegionCabling::Cabling& ccab = strip_cabling->getRegionCabling(); //size of region (eta,phi) const std::pair regDim = strip_cabling->regionDimensions(); @@ -106,8 +104,8 @@ void SiStripRegFEDSelector::produce(edm::Event& iEvent, const edm::EventSetup& i // this fed has data -- lets copy it FEDRawData& fedDataProd = producedData->FEDData(j); if (fedDataProd.size() != 0) { - // std::cout << " More than one FEDRawDataCollection with data in FED "; - // std::cout << j << " Skipping the 2nd\n"; + edm::LogVerbatim("HcalIsoTrack") << " More than one FEDRawDataCollection with data in FED " << j + << " Skipping the 2nd *****"; continue; } fedDataProd.resize(size); diff --git a/Calibration/IsolatedParticles/interface/CaloPropagateTrack.h b/Calibration/IsolatedParticles/interface/CaloPropagateTrack.h index cafc19ed2f8f9..83f785170c16b 100644 --- a/Calibration/IsolatedParticles/interface/CaloPropagateTrack.h +++ b/Calibration/IsolatedParticles/interface/CaloPropagateTrack.h @@ -26,8 +26,6 @@ #include "Geometry/CaloGeometry/interface/CaloGeometry.h" #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "FWCore/Framework/interface/ESHandle.h" - namespace spr { struct propagatedTrack { @@ -127,13 +125,13 @@ namespace spr { const MagneticField* bField, bool debug = false); std::vector propagateCALO(const HepMC::GenEvent* genEvent, - edm::ESHandle& pdt, + const ParticleDataTable* pdt, const CaloGeometry* geo, const MagneticField* bField, double etaMax = 3.0, bool debug = false); std::vector propagateCALO(edm::Handle& genParticles, - edm::ESHandle& pdt, + const ParticleDataTable* pdt, const CaloGeometry* geo, const MagneticField* bField, double etaMax = 3.0, diff --git a/Calibration/IsolatedParticles/plugins/ElectronStudy.cc b/Calibration/IsolatedParticles/plugins/ElectronStudy.cc index f948a77b1e6dd..68e7dc1eb94b2 100644 --- a/Calibration/IsolatedParticles/plugins/ElectronStudy.cc +++ b/Calibration/IsolatedParticles/plugins/ElectronStudy.cc @@ -5,7 +5,6 @@ #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Utilities/interface/Exception.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -56,6 +55,10 @@ class ElectronStudy : public edm::one::EDAnalyzer { edm::EDGetTokenT tok_simTk_; edm::EDGetTokenT tok_simVtx_; + edm::ESGetToken tok_geom_; + edm::ESGetToken tok_caloTopology_; + edm::ESGetToken tok_magField_; + int hotZone_, verbose_; bool histos_; TH1F* histoR1[NPBins_ + 1][NEtaBins_ + 1]; @@ -82,6 +85,10 @@ ElectronStudy::ElectronStudy(const edm::ParameterSet& ps) { verbose_ = ps.getUntrackedParameter("Verbosity", 0); edm::LogInfo("ElectronStudy") << "Module Label: " << g4Label << " Hits: " << hitLabEB << ", " << hitLabEE; + tok_geom_ = esConsumes(); + tok_caloTopology_ = esConsumes(); + tok_magField_ = esConsumes(); + double tempP[NPBins_ + 1] = {0.0, 10.0, 20.0, 40.0, 60.0, 100.0, 500.0, 1000.0, 10000.0}; double tempEta[NEtaBins_ + 1] = {0.0, 1.2, 1.6, 3.0}; @@ -156,17 +163,9 @@ void ElectronStudy::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe edm::LogVerbatim("IsoTrack") << "Run = " << iEvent.id().run() << " Event = " << iEvent.id().event(); // get Geometry, B-field, Topology - edm::ESHandle bFieldH; - iSetup.get().get(bFieldH); - const MagneticField* bField = bFieldH.product(); - - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry* geo = pG.product(); - - edm::ESHandle theCaloTopology; - iSetup.get().get(theCaloTopology); - const CaloTopology* caloTopology = theCaloTopology.product(); + const CaloGeometry* geo = &iSetup.getData(tok_geom_); + const MagneticField* bField = &iSetup.getData(tok_magField_); + const CaloTopology* caloTopology = &iSetup.getData(tok_caloTopology_); // get PCaloHits for ecal barrel edm::Handle caloHitEB; diff --git a/Calibration/IsolatedParticles/plugins/HcalHBHEMuonSimAnalyzer.cc b/Calibration/IsolatedParticles/plugins/HcalHBHEMuonSimAnalyzer.cc index eafff19fdaa18..b50ddde681304 100644 --- a/Calibration/IsolatedParticles/plugins/HcalHBHEMuonSimAnalyzer.cc +++ b/Calibration/IsolatedParticles/plugins/HcalHBHEMuonSimAnalyzer.cc @@ -38,8 +38,6 @@ #include "MagneticField/Engine/interface/MagneticField.h" #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" -#define EDM_ML_DEBUG - class HcalHBHEMuonSimAnalyzer : public edm::one::EDAnalyzer { public: explicit HcalHBHEMuonSimAnalyzer(const edm::ParameterSet&); @@ -71,6 +69,14 @@ class HcalHBHEMuonSimAnalyzer : public edm::one::EDAnalyzer tok_caloEB_, tok_caloEE_; edm::EDGetTokenT tok_caloHH_; + edm::ESGetToken tok_ddrec_; + edm::ESGetToken tok_geom_; + edm::ESGetToken tok_caloTopology_; + edm::ESGetToken tok_topo_; + edm::ESGetToken tok_magField_; + + const HcalDDDRecConstants* hcons_; + static const int depthMax_ = 7; const int idMuon_ = 13; TTree* tree_; @@ -111,25 +117,23 @@ HcalHBHEMuonSimAnalyzer::HcalHBHEMuonSimAnalyzer(const edm::ParameterSet& iConfi maxDepth_ = depthMax_; else if (maxDepth_ < 1) maxDepth_ = 4; -#ifdef EDM_ML_DEBUG - std::cout << "Labels: " << g4Label_ << ":" << ebLabel_ << ":" << eeLabel_ << ":" << hcLabel_ << "\nVerbosity " - << verbosity_ << " MaxDepth " << maxDepth_ << " Maximum Eta " << etaMax_ << " tMin|tMax " << tMinE_ << ":" - << tMaxE_ << ":" << tMinH_ << ":" << tMaxH_ << std::endl; -#endif + + edm::LogVerbatim("HBHEMuon") << "Labels: " << g4Label_ << ":" << ebLabel_ << ":" << eeLabel_ << ":" << hcLabel_ + << "\nVerbosity " << verbosity_ << " MaxDepth " << maxDepth_ << " Maximum Eta " + << etaMax_ << " tMin|tMax " << tMinE_ << ":" << tMaxE_ << ":" << tMinH_ << ":" << tMaxH_; + + tok_ddrec_ = esConsumes(); + tok_geom_ = esConsumes(); + tok_caloTopology_ = esConsumes(); + tok_topo_ = esConsumes(); + tok_magField_ = esConsumes(); } HcalHBHEMuonSimAnalyzer::~HcalHBHEMuonSimAnalyzer() {} void HcalHBHEMuonSimAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { clearVectors(); - bool debug(false); -#ifdef EDM_ML_DEBUG - debug = ((verbosity_ / 10) > 0); -#endif - - edm::ESHandle pHRNDC; - iSetup.get().get(pHRNDC); - const HcalDDDRecConstants* hcons = &(*pHRNDC); + bool debug = ((verbosity_ / 10) > 0); runNumber_ = iEvent.id().run(); eventNumber_ = iEvent.id().event(); @@ -164,10 +168,8 @@ void HcalHBHEMuonSimAnalyzer::analyze(const edm::Event& iEvent, const edm::Event if (testN) { for (edm::PCaloHitContainer::const_iterator itr = pcalohh->begin(); itr != pcalohh->end(); ++itr) { PCaloHit hit(*itr); - DetId newid = HcalHitRelabeller::relabel(hit.id(), hcons); -#ifdef EDM_ML_DEBUG - std::cout << "Old ID " << std::hex << hit.id() << std::dec << " New " << HcalDetId(newid) << std::endl; -#endif + DetId newid = HcalHitRelabeller::relabel(hit.id(), hcons_); + edm::LogVerbatim("HBHEMuon") << "Old ID " << std::hex << hit.id() << std::dec << " New " << HcalDetId(newid); hit.setID(newid.rawId()); calohh.push_back(hit); } @@ -176,21 +178,10 @@ void HcalHBHEMuonSimAnalyzer::analyze(const edm::Event& iEvent, const edm::Event } // get handles to calogeometry and calotopology - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry* geo = pG.product(); - - edm::ESHandle bFieldH; - iSetup.get().get(bFieldH); - const MagneticField* bField = bFieldH.product(); - - edm::ESHandle theCaloTopology; - iSetup.get().get(theCaloTopology); - const CaloTopology* caloTopology = theCaloTopology.product(); - - edm::ESHandle htopo; - iSetup.get().get(htopo); - const HcalTopology* theHBHETopology = htopo.product(); + const CaloGeometry* geo = &iSetup.getData(tok_geom_); + const MagneticField* bField = &iSetup.getData(tok_magField_); + const CaloTopology* caloTopology = &iSetup.getData(tok_caloTopology_); + const HcalTopology* theHBHETopology = &iSetup.getData(tok_topo_); // Loop over all SimTracks for (edm::SimTrackContainer::const_iterator simTrkItr = SimTk->begin(); simTrkItr != SimTk->end(); simTrkItr++) { @@ -207,15 +198,15 @@ void HcalHBHEMuonSimAnalyzer::analyze(const edm::Event& iEvent, const edm::Event for (int i = 0; i < depthMax_; ++i) eHcalDepth[i] = eHcalDepthHot[i] = activeL[i] = activeHotL[i] = -10000; -#ifdef EDM_ML_DEBUG if ((verbosity_ % 10) > 0) - std::cout << "Track Type " << simTrkItr->type() << " Vertex " << simTrkItr->vertIndex() << " Charge " - << simTrkItr->charge() << " Momentum " << simTrkItr->momentum().P() << ":" - << simTrkItr->momentum().eta() << ":" << simTrkItr->momentum().phi() << " ECAL|HCAL " << trkD.okECAL - << ":" << trkD.okHCAL << " Point " << trkD.pointECAL << ":" << trkD.pointHCAL << " Direction " - << trkD.directionECAL.eta() << ":" << trkD.directionECAL.phi() << " | " << trkD.directionHCAL.eta() - << ":" << trkD.directionHCAL.phi() << std::endl; -#endif + edm::LogVerbatim("HBHEMuon") << "Track Type " << simTrkItr->type() << " Vertex " << simTrkItr->vertIndex() + << " Charge " << simTrkItr->charge() << " Momentum " << simTrkItr->momentum().P() + << ":" << simTrkItr->momentum().eta() << ":" << simTrkItr->momentum().phi() + << " ECAL|HCAL " << trkD.okECAL << ":" << trkD.okHCAL << " Point " + << trkD.pointECAL << ":" << trkD.pointHCAL << " Direction " + << trkD.directionECAL.eta() << ":" << trkD.directionECAL.phi() << " | " + << trkD.directionHCAL.eta() << ":" << trkD.directionHCAL.phi(); + bool propageback(false); spr::propagatedTrackDirection trkD_back = spr::propagateHCALBack(thisTrk, SimTk, SimVtx, geo, bField, debug); HcalDetId closestCell_back; @@ -230,12 +221,10 @@ void HcalHBHEMuonSimAnalyzer::analyze(const edm::Event& iEvent, const edm::Event etaGlob_.push_back(tkvx.momentum.eta()); phiGlob_.push_back(tkvx.momentum.phi()); pMuon_.push_back(tkvx.momentum.mag()); -#ifdef EDM_ML_DEBUG if ((verbosity_ % 10) > 0) - std::cout << "Track at vertex " << tkvx.ok << " position " << tkvx.position << " Momentum " - << tkvx.momentum.mag() << ":" << tkvx.momentum.eta() << ":" << tkvx.momentum.phi() << " Charge " - << tkvx.charge << std::endl; -#endif + edm::LogVerbatim("HBHEMuon") << "Track at vertex " << tkvx.ok << " position " << tkvx.position << " Momentum " + << tkvx.momentum.mag() << ":" << tkvx.momentum.eta() << ":" + << tkvx.momentum.phi() << " Charge " << tkvx.charge; // Energy in ECAL DetId isoCell; @@ -253,17 +242,15 @@ void HcalHBHEMuonSimAnalyzer::analyze(const edm::Event& iEvent, const edm::Event eHcal = spr::eHCALmatrix( theHBHETopology, closestCell, calohh, 0, 0, false, -100.0, -100.0, -100.0, -100.0, tMinH_, tMaxH_, debug); -#ifdef EDM_ML_DEBUG if ((verbosity_ % 10) > 0) - std::cout << "eEcal " << trkD.okECAL << ":" << eEcal << " eHcal " << eHcal << std::endl; -#endif + edm::LogVerbatim("HBHEMuon") << "eEcal " << trkD.okECAL << ":" << eEcal << " eHcal " << eHcal; HcalSubdetector subdet = HcalDetId(closestCell).subdet(); int ieta = HcalDetId(closestCell).ieta(); int iphi = HcalDetId(closestCell).iphi(); int zside = HcalDetId(closestCell).zside(); bool hbhe = (std::abs(ieta) == 16); - int depthHE = hcons->getMinDepth(1, 16, iphi, zside); + int depthHE = hcons_->getMinDepth(1, 16, iphi, zside); std::vector > ehdepth; spr::energyHCALCell((HcalDetId)closestCell, calohh, @@ -284,24 +271,16 @@ void HcalHBHEMuonSimAnalyzer::analyze(const edm::Event& iEvent, const edm::Event double actL = activeLength(DetId(hcid0)); activeL[ehdepth[i].second - 1] = actL; activeLengthTot += actL; -#ifdef EDM_ML_DEBUG if ((verbosity_ % 10) > 0) - std::cout << hcid0 << " E " << ehdepth[i].first << " L " << actL << std::endl; -#endif + edm::LogVerbatim("HBHEMuon") << hcid0 << " E " << ehdepth[i].first << " L " << actL; } HcalDetId hotCell; -#ifdef EDM_ML_DEBUG - double h3x3 = -#endif - spr::eHCALmatrix(geo, theHBHETopology, closestCell, calohh, 1, 1, hotCell, debug); + double h3x3 = spr::eHCALmatrix(geo, theHBHETopology, closestCell, calohh, 1, 1, hotCell, debug); isHot = matchId(closestCell, hotCell); -#ifdef EDM_ML_DEBUG if ((verbosity_ % 10) > 0) - std::cout << "hcal 3X3 < " << h3x3 << ">" - << " ClosestCell <" << (HcalDetId)(closestCell) << "> hotCell id < " << hotCell << "> isHot" - << isHot << std::endl; -#endif + edm::LogVerbatim("HBHEMuon") << "hcal 3X3 < " << h3x3 << "> ClosestCell <" << (HcalDetId)(closestCell) + << "> hotCell id < " << hotCell << "> isHot" << isHot; if (hotCell != HcalDetId()) { subdet = HcalDetId(hotCell).subdet(); @@ -309,7 +288,7 @@ void HcalHBHEMuonSimAnalyzer::analyze(const edm::Event& iEvent, const edm::Event iphi = HcalDetId(hotCell).iphi(); zside = HcalDetId(hotCell).zside(); hbhe = (std::abs(ieta) == 16); - depthHE = hcons->getMinDepth(1, 16, iphi, zside); + depthHE = hcons_->getMinDepth(1, 16, iphi, zside); std::vector > ehdepth; spr::energyHCALCell( hotCell, calohh, ehdepth, maxDepth_, -100.0, -100.0, -100.0, -100.0, tMinH_, tMaxH_, depthHE, debug); @@ -320,18 +299,14 @@ void HcalHBHEMuonSimAnalyzer::analyze(const edm::Event& iEvent, const edm::Event double actL = activeLength(DetId(hcid0)); activeHotL[ehdepth[i].second - 1] = actL; activeLengthHotTot += actL; -#ifdef EDM_ML_DEBUG if ((verbosity_ % 10) > 0) - std::cout << hcid0 << " E " << ehdepth[i].first << " L " << actL << std::endl; -#endif + edm::LogVerbatim("HBHEMuon") << hcid0 << " E " << ehdepth[i].first << " L " << actL; } } -#ifdef EDM_ML_DEBUG if ((verbosity_ % 10) > 0) { for (int k = 0; k < depthMax_; ++k) - std::cout << "Depth " << k << " E " << eHcalDepth[k] << ":" << eHcalDepthHot[k] << std::endl; + edm::LogVerbatim("HBHEMuon") << "Depth " << k << " E " << eHcalDepth[k] << ":" << eHcalDepthHot[k]; } -#endif matchedId_.push_back(tmpmatch); ecal3x3Energy_.push_back(eEcal); ecalDetId_.push_back(isoCell.rawId()); @@ -385,13 +360,11 @@ void HcalHBHEMuonSimAnalyzer::beginJob() { } void HcalHBHEMuonSimAnalyzer::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) { - edm::ESHandle pHRNDC; - iSetup.get().get(pHRNDC); - const HcalDDDRecConstants& hdc = (*pHRNDC); + hcons_ = &iSetup.getData(tok_ddrec_); actHB_.clear(); actHE_.clear(); - actHB_ = hdc.getThickActive(0); - actHE_ = hdc.getThickActive(1); + actHB_ = hcons_->getThickActive(0); + actHE_ = hcons_->getThickActive(1); } void HcalHBHEMuonSimAnalyzer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { diff --git a/Calibration/IsolatedParticles/plugins/HcalRaddamMuon.cc b/Calibration/IsolatedParticles/plugins/HcalRaddamMuon.cc index 813c8e3715307..e0553fc62ab26 100644 --- a/Calibration/IsolatedParticles/plugins/HcalRaddamMuon.cc +++ b/Calibration/IsolatedParticles/plugins/HcalRaddamMuon.cc @@ -140,6 +140,14 @@ class HcalRaddamMuon : public edm::one::EDAnalyzer tok_EE_; edm::EDGetTokenT tok_hbhe_; edm::EDGetTokenT tok_muon_; + + edm::ESGetToken tok_ddrec_; + edm::ESGetToken tok_geom_; + edm::ESGetToken tok_caloTopology_; + edm::ESGetToken tok_topo_; + edm::ESGetToken tok_magField_; + edm::ESGetToken tok_ecalChStatus_; + edm::ESGetToken tok_sevlv_; }; HcalRaddamMuon::HcalRaddamMuon(const edm::ParameterSet& iConfig) @@ -171,6 +179,14 @@ HcalRaddamMuon::HcalRaddamMuon(const edm::ParameterSet& iConfig) tok_hbhe_ = consumes(edm::InputTag("hbhereco")); } tok_muon_ = consumes(muonsrc_); + + tok_ddrec_ = esConsumes(); + tok_geom_ = esConsumes(); + tok_caloTopology_ = esConsumes(); + tok_topo_ = esConsumes(); + tok_magField_ = esConsumes(); + tok_ecalChStatus_ = esConsumes(); + tok_sevlv_ = esConsumes(); } HcalRaddamMuon::~HcalRaddamMuon() { @@ -197,11 +213,11 @@ void HcalRaddamMuon::analyze(const edm::Event& iEvent, const edm::EventSetup& iS iEvent.getByToken(tok_trigRes_, _Triggers); if ((verbosity_ % 10) > 1) - std::cout << "size of all triggers " << all_triggers.size() << std::endl; + edm::LogVerbatim("HBHEMuon") << "size of all triggers " << all_triggers.size(); int Ntriggers = all_triggers.size(); if ((verbosity_ % 10) > 1) - std::cout << "size of HLT MENU: " << _Triggers->size() << std::endl; + edm::LogVerbatim("HBHEMuon") << "size of HLT MENU: " << _Triggers->size(); if (_Triggers.isValid()) { const edm::TriggerNames& triggerNames_ = iEvent.triggerNames(*_Triggers); @@ -211,42 +227,26 @@ void HcalRaddamMuon::analyze(const edm::Event& iEvent, const edm::EventSetup& iS index.push_back(triggerNames_.triggerIndex(all_triggers[i])); int triggerSize = int(_Triggers->size()); if ((verbosity_ % 10) > 2) - std::cout << "outside loop " << index[i] << "\ntriggerSize " << triggerSize << std::endl; + edm::LogVerbatim("HBHEMuon") << "outside loop " << index[i] << "\ntriggerSize " << triggerSize; if (index[i] < triggerSize) { hltresults.push_back(_Triggers->accept(index[i])); if ((verbosity_ % 10) > 2) - std::cout << "trigger_info " << triggerSize << " triggerSize " << index[i] << " trigger_index " - << hltresults.at(i) << " hltresult " << std::endl; + edm::LogVerbatim("HBHEMuon") << "trigger_info " << triggerSize << " triggerSize " << index[i] + << " trigger_index " << hltresults.at(i) << " hltresult "; } else { - edm::LogInfo("TriggerBlock") << "Requested HLT path \"" + edm::LogVerbatim("HBHEMuon") << "Requested HLT path \"" << "\" does not exist"; } } } // get handles to calogeometry and calotopology - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry* geo = pG.product(); - - edm::ESHandle bFieldH; - iSetup.get().get(bFieldH); - const MagneticField* bField = bFieldH.product(); - - edm::ESHandle ecalChStatus; - iSetup.get().get(ecalChStatus); - const EcalChannelStatus* theEcalChStatus = ecalChStatus.product(); - - edm::ESHandle sevlv; - iSetup.get().get(sevlv); - - edm::ESHandle theCaloTopology; - iSetup.get().get(theCaloTopology); - const CaloTopology* caloTopology = theCaloTopology.product(); - - edm::ESHandle htopo; - iSetup.get().get(htopo); - const HcalTopology* theHBHETopology = htopo.product(); + const CaloGeometry* geo = &iSetup.getData(tok_geom_); + const MagneticField* bField = &iSetup.getData(tok_magField_); + const EcalChannelStatus* theEcalChStatus = &iSetup.getData(tok_ecalChStatus_); + const EcalSeverityLevelAlgo* sevlv = &iSetup.getData(tok_sevlv_); + const CaloTopology* caloTopology = &iSetup.getData(tok_caloTopology_); + const HcalTopology* theHBHETopology = &iSetup.getData(tok_topo_); edm::Handle bmspot; iEvent.getByToken(tok_bs_, bmspot); @@ -390,7 +390,7 @@ void HcalRaddamMuon::analyze(const edm::Event& iEvent, const edm::EventSetup& iS *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 1, 1, -100.0, @@ -400,7 +400,8 @@ void HcalRaddamMuon::analyze(const edm::Event& iEvent, const edm::EventSetup& iS false); eEcal = e3x3.first; - //std::cout<<"eEcal"< 1) + edm::LogVerbatim("HBHEMuon") << "eEcal" << eEcal; } if (trackID.okHCAL) { @@ -423,7 +424,8 @@ void HcalRaddamMuon::analyze(const edm::Event& iEvent, const edm::EventSetup& iS int iphi = ((HcalDetId)(closestCell)).iphi(); int zside = ((HcalDetId)(closestCell)).iphi(); int depthHE = theHBHETopology->dddConstants()->getMinDepth(1, 16, iphi, zside); - //std::cout<<"eHcal"< 1) + edm::LogVerbatim("HBHEMuon") << "eHcal " << eHcal; std::vector > ehdepth; spr::energyHCALCell((HcalDetId)closestCell, hbhe, @@ -440,7 +442,9 @@ void HcalRaddamMuon::analyze(const edm::Event& iEvent, const edm::EventSetup& iS (((verbosity_ / 1000) % 10) > 0)); for (unsigned int i = 0; i < ehdepth.size(); ++i) { eHcalDepth[ehdepth[i].second - 1] = ehdepth[i].first; - //std::cout< 1) + edm::LogVerbatim("HBHEMuon") + << "eHcalDepth " << i << ":" << (ehdepth[i].second - 1) << ":" << eHcalDepth[ehdepth[i].second - 1]; } eHcal = spr::eHCALmatrix(theHBHETopology, @@ -458,7 +462,8 @@ void HcalRaddamMuon::analyze(const edm::Event& iEvent, const edm::EventSetup& iS 500., useRaw_); - //std::cout<<"eHcal"< 1) + edm::LogVerbatim("HBHEMuon") << "eHcal " << eHcal; const DetId closestCellCalo(trackID.detIdHCAL); iphi = ((HcalDetId)(closestCellCalo)).iphi(); zside = ((HcalDetId)(closestCellCalo)).iphi(); @@ -479,13 +484,16 @@ void HcalRaddamMuon::analyze(const edm::Event& iEvent, const edm::EventSetup& iS (((verbosity_ / 1000) % 10) > 0)); for (unsigned int i = 0; i < ehdepthCalo.size(); ++i) { eHcalDepthCalo[ehdepthCalo[i].second - 1] = ehdepthCalo[i].first; - //std::cout< 1) + edm::LogVerbatim("HBHEMuon") << "eHcalDepthCalo " << i << ":" << (ehdepth[i].second - 1) << ":" + << eHcalDepth[ehdepth[i].second - 1]; } HcalDetId hcid0(closestCell.rawId()); activeL = activeLength(trackID.detIdHCAL); - std::cout << activeL << std::endl; + if (((verbosity_ / 10) % 10) > 0) + edm::LogVerbatim("HBHEMuon") << "activeL " << activeL; HcalDetId hotCell, hotCellCalo; h3x3 = spr::eHCALmatrix(geo, theHBHETopology, closestCell, hbhe, 1, 1, hotCell, false, useRaw_, false); h3x3Calo = spr::eHCALmatrix( @@ -494,7 +502,10 @@ void HcalRaddamMuon::analyze(const edm::Event& iEvent, const edm::EventSetup& iS isHot = matchId(closestCell, hotCell); isHotCalo = matchId(closestCellCalo, hotCellCalo); - // std::cout<<"hcal 3X3 < "<" << " ClosestCell <" << (HcalDetId)(closestCell) << "> hotCell id < " << hotCell << "> isHot" << isHot << std::endl; + if (((verbosity_ / 10) % 10) > 1) + edm::LogVerbatim("HBHEMuon") << "hcal 3X3 < " << h3x3 << ">" + << " ClosestCell <" << (HcalDetId)(closestCell) << "> hotCell id < " << hotCell + << "> isHot" << isHot; if (hotCell != HcalDetId()) { iphi = ((HcalDetId)(hotCell)).iphi(); zside = ((HcalDetId)(hotCell)).iphi(); @@ -514,7 +525,9 @@ void HcalRaddamMuon::analyze(const edm::Event& iEvent, const edm::EventSetup& iS false); //(((verbosity_/1000)%10)>0)); for (unsigned int i = 0; i < ehdepth.size(); ++i) { eHcalDepthHot[ehdepth[i].second - 1] = ehdepth[i].first; - // std::cout< 1) + edm::LogVerbatim("HBHEMuon") << "eHcalDepthHot " << i << ":" << (ehdepth[i].second - 1) << ":" + << eHcalDepthHot[ehdepth[i].second - 1]; } } @@ -539,7 +552,9 @@ void HcalRaddamMuon::analyze(const edm::Event& iEvent, const edm::EventSetup& iS false); for (unsigned int i = 0; i < ehdepthCalo.size(); ++i) { eHcalDepthHotCalo[ehdepthCalo[i].second - 1] = ehdepthCalo[i].first; - // std::cout< 1) + edm::LogVerbatim("HBHEMuon") << "eHcalDepthHotCalo " << i << ":" << (ehdepth[i].second - 1) << ":" + << eHcalDepthHot[ehdepth[i].second - 1]; } } } @@ -697,21 +712,17 @@ void HcalRaddamMuon::endJob() {} // ------------ method called when starting to processes a run ------------ void HcalRaddamMuon::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) { - edm::ESHandle pHRNDC; - iSetup.get().get(pHRNDC); - const HcalDDDRecConstants& hdc = (*pHRNDC); + const HcalDDDRecConstants* hdc = &iSetup.getData(tok_ddrec_); actHB.clear(); actHE.clear(); - actHB = hdc.getThickActive(0); - actHE = hdc.getThickActive(1); + actHB = hdc->getThickActive(0); + actHE = hdc->getThickActive(1); bool changed = true; all_triggers.clear(); if (hltConfig_.init(iRun, iSetup, "HLT", changed)) { // if init returns TRUE, initialisation has succeeded! - edm::LogInfo("TriggerBlock") << "HLT config with process name " - << "HLT" - << " successfully extracted"; + edm::LogVerbatim("HBHEMuon") << "HLT config with process name 'HLT' successfully extracted"; std::string string_search[5] = {"HLT_IsoMu_", "HLT_L1SingleMu_", "HLT_L2Mu", "HLT_Mu", "HLT_RelIso1p0Mu"}; unsigned int ntriggers = hltConfig_.size(); for (unsigned int t = 0; t < ntriggers; ++t) { @@ -723,11 +734,9 @@ void HcalRaddamMuon::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetu } } } //loop over ntriggers - // std::cout<<"all triggers size in begin run"< 2) + edm::LogVerbatim("HBHEMuon") << "actHB.size() " << actHB.size(); for (unsigned int i = 0; i < actHB.size(); ++i) { if (ieta == actHB[i].ieta && depth == actHB[i].depth) { lx = actHB[i].thick; @@ -840,15 +850,17 @@ double HcalRaddamMuon::activeLength(const DetId& id_) { } } } else { - // std::cout<<"actHE.size()"< 2) + edm::LogVerbatim("HBHEMuon") << "actHE.size() " << actHE.size(); for (unsigned int i = 0; i < actHE.size(); ++i) { if (ieta == actHE[i].ieta && depth == actHE[i].depth) { lx = actHE[i].thick; - // std::cout<<"actHE[i].thick"< 2) + edm::LogVerbatim("HBHEMuon") << "active thick " << lx; return lx; } diff --git a/Calibration/IsolatedParticles/plugins/IsoTrackCalib.cc b/Calibration/IsolatedParticles/plugins/IsoTrackCalib.cc index 2340ebeb9e54d..5e711389be3ff 100644 --- a/Calibration/IsolatedParticles/plugins/IsoTrackCalib.cc +++ b/Calibration/IsolatedParticles/plugins/IsoTrackCalib.cc @@ -75,8 +75,6 @@ #include "MagneticField/Engine/interface/MagneticField.h" #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" #include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" class IsoTrackCalib : public edm::one::EDAnalyzer { @@ -122,6 +120,9 @@ class IsoTrackCalib : public edm::one::EDAnalyzer tok_L1extCenJet_; edm::EDGetTokenT tok_L1extFwdJet_; + edm::ESGetToken tok_geom_; + edm::ESGetToken tok_magField_; + TTree* tree; int t_Run, t_Event, t_ieta; double t_EventWeight, t_l1pt, t_l1eta, t_l1phi; @@ -189,20 +190,24 @@ IsoTrackCalib::IsoTrackCalib(const edm::ParameterSet& iConfig) tok_L1extCenJet_ = consumes(L1extraCenJetSource_); tok_L1extFwdJet_ = consumes(L1extraFwdJetSource_); if (verbosity_ >= 0) { - edm::LogInfo("IsoTrack") << "Parameters read from config file \n" - << "\t minPt " << selectionParameters_.minPt << "\t theTrackQuality " << theTrackQuality_ - << "\t minQuality " << selectionParameters_.minQuality << "\t maxDxyPV " - << selectionParameters_.maxDxyPV << "\t maxDzPV " << selectionParameters_.maxDzPV - << "\t maxChi2 " << selectionParameters_.maxChi2 << "\t maxDpOverP " - << selectionParameters_.maxDpOverP << "\t minOuterHit " << selectionParameters_.minOuterHit - << "\t minLayerCrossed " << selectionParameters_.minLayerCrossed << "\t maxInMiss " - << selectionParameters_.maxInMiss << "\t maxOutMiss " << selectionParameters_.maxOutMiss - << "\t a_coneR " << a_coneR_ << "\t a_charIsoR " << a_charIsoR_ << "\t a_mipR " << a_mipR_ - << "\t isItAOD " << isItAOD; - edm::LogInfo("IsoTrack") << l1Names_.size() << " triggers to be studied"; + edm::LogVerbatim("IsoTrack") << "Parameters read from config file \n" + << "\t minPt " << selectionParameters_.minPt << "\t theTrackQuality " + << theTrackQuality_ << "\t minQuality " << selectionParameters_.minQuality + << "\t maxDxyPV " << selectionParameters_.maxDxyPV << "\t maxDzPV " + << selectionParameters_.maxDzPV << "\t maxChi2 " << selectionParameters_.maxChi2 + << "\t maxDpOverP " << selectionParameters_.maxDpOverP << "\t minOuterHit " + << selectionParameters_.minOuterHit << "\t minLayerCrossed " + << selectionParameters_.minLayerCrossed << "\t maxInMiss " + << selectionParameters_.maxInMiss << "\t maxOutMiss " + << selectionParameters_.maxOutMiss << "\t a_coneR " << a_coneR_ << "\t a_charIsoR " + << a_charIsoR_ << "\t a_mipR " << a_mipR_ << "\t isItAOD " << isItAOD; + edm::LogVerbatim("IsoTrack") << l1Names_.size() << " triggers to be studied"; for (unsigned int k = 0; k < l1Names_.size(); ++k) - edm::LogInfo("IsoTrack") << "[" << k << "]: " << l1Names_[k]; + edm::LogVerbatim("IsoTrack") << "[" << k << "]: " << l1Names_[k]; } + + tok_geom_ = esConsumes(); + tok_magField_ = esConsumes(); } IsoTrackCalib::~IsoTrackCalib() { @@ -237,21 +242,13 @@ void IsoTrackCalib::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe t_Run = iEvent.id().run(); t_Event = iEvent.id().event(); if (verbosity_ % 10 > 0) - edm::LogInfo("IsoTrack") << "Run " << t_Run << " Event " << t_Event << " Luminosity " << iEvent.luminosityBlock() - << " Bunch " << iEvent.bunchCrossing() << " starts =========="; - - //Get magnetic field and ECAL channel status - edm::ESHandle bFieldH; - iSetup.get().get(bFieldH); - const MagneticField* bField = bFieldH.product(); - - edm::ESHandle sevlv; - iSetup.get().get(sevlv); + edm::LogVerbatim("IsoTrack") << "Run " << t_Run << " Event " << t_Event << " Luminosity " + << iEvent.luminosityBlock() << " Bunch " << iEvent.bunchCrossing() + << " starts =========="; - // get handles to calogeometry and calotopology - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry* geo = pG.product(); + //Get magnetic field and geometry + const CaloGeometry* geo = &iSetup.getData(tok_geom_); + const MagneticField* bField = &iSetup.getData(tok_magField_); //Get track collection edm::Handle trkCollection; @@ -299,9 +296,9 @@ void IsoTrackCalib::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe } if (verbosity_ > 10) { if ((verbosity_ % 100) / 10 > 2) - edm::LogInfo("IsoTrack") << "Primary Vertex " << leadPV; + edm::LogVerbatim("IsoTrack") << "Primary Vertex " << leadPV; if (beamSpotH.isValid()) - edm::LogInfo("IsoTrack") << " Beam Spot " << beamSpotH->position(); + edm::LogVerbatim("IsoTrack") << " Beam Spot " << beamSpotH->position(); } // RecHits @@ -320,9 +317,9 @@ void IsoTrackCalib::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe int rec_zside = rhitItr->id().zside(); double num1_1 = rec_zside * (rec_ieta + 0.2 * (rec_depth - 1)); if (verbosity_ % 10 > 0) - edm::LogInfo("IsoTrack") << "detid/rechit/ieta/zside/depth/num " - << " = " << rhitItr->id() << "/" << rec_energy << "/" << rec_ieta << "/" << rec_zside - << "/" << rec_depth << "/" << num1_1; + edm::LogVerbatim("IsoTrack") << "detid/rechit/ieta/zside/depth/num " + << " = " << rhitItr->id() << "/" << rec_energy << "/" << rec_ieta << "/" << rec_zside + << "/" << rec_depth << "/" << num1_1; h_iEta->Fill(rec_ieta); h_Rechit_E->Fill(rec_energy); h_RecHit_iEta->Fill(rec_ieta, rec_energy); @@ -360,17 +357,17 @@ void IsoTrackCalib::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe int l1ConfCode = -1; const bool l1Conf = m_l1GtUtils.availableL1Configuration(iErrorCode, l1ConfCode); if (!l1Conf) { - edm::LogInfo("IsoTrack") << "\nL1 configuration code:" << l1ConfCode - << "\nNo valid L1 trigger configuration available." - << "\nSee text above for error code interpretation" - << "\nNo return here, in order to test each method" - << ", protected against configuration error."; + edm::LogVerbatim("IsoTrack") << "\nL1 configuration code:" << l1ConfCode + << "\nNo valid L1 trigger configuration available." + << "\nSee text above for error code interpretation" + << "\nNo return here, in order to test each method" + << ", protected against configuration error."; } const AlgorithmMap& algorithmMap = m_l1GtMenu->gtAlgorithmMap(); const std::string& menuName = m_l1GtMenu->gtTriggerMenuName(); if (verbosity_ % 10 > 0) - edm::LogInfo("IsoTrack") << "menuName " << menuName << std::endl; + edm::LogVerbatim("IsoTrack") << "menuName " << menuName << std::endl; std::vector algbits; for (CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) { @@ -380,19 +377,19 @@ void IsoTrackCalib::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe bool l1ok(false); if (verbosity_ % 10 > 0) - edm::LogInfo("IsoTrack") << algName << " " << algBitNumber << " " << decision; + edm::LogVerbatim("IsoTrack") << algName << " " << algBitNumber << " " << decision; for (unsigned int i = 0; i < l1Names_.size(); ++i) { if (algName.find(l1Names_[i]) != std::string::npos) { if (verbosity_ % 10 > 0) - edm::LogInfo("IsoTrack") << "match found" - << " " << algName << " " << decision; + edm::LogVerbatim("IsoTrack") << "match found" + << " " << algName << " " << decision; t_l1bits->at(i) = (decision > 0); if (decision > 0) l1ok = true; } } if (verbosity_ % 10 > 0) - edm::LogInfo("IsoTrack") << "l1 ok =" << l1ok; + edm::LogVerbatim("IsoTrack") << "l1 ok =" << l1ok; if (l1ok) { edm::Handle l1TauHandle; @@ -409,7 +406,7 @@ void IsoTrackCalib::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe phiTriggered = itr->phi(); } if (verbosity_ % 10 > 0) - edm::LogInfo("IsoTrack") << "tauJ pt " << itr->pt() << " eta/phi " << itr->eta() << " " << itr->phi(); + edm::LogVerbatim("IsoTrack") << "tauJ pt " << itr->pt() << " eta/phi " << itr->eta() << " " << itr->phi(); } edm::Handle l1CenJetHandle; iEvent.getByToken(tok_L1extCenJet_, l1CenJetHandle); @@ -420,7 +417,8 @@ void IsoTrackCalib::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe phiTriggered = itr->phi(); } if (verbosity_ % 10 > 0) - edm::LogInfo("IsoTrack") << "cenJ pt " << itr->pt() << " eta/phi " << itr->eta() << " " << itr->phi(); + edm::LogVerbatim("IsoTrack") << "cenJ pt " << itr->pt() << " eta/phi " << itr->eta() << " " + << itr->phi(); } edm::Handle l1FwdJetHandle; iEvent.getByToken(tok_L1extFwdJet_, l1FwdJetHandle); @@ -431,10 +429,11 @@ void IsoTrackCalib::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe phiTriggered = itr->phi(); } if (verbosity_ % 10 > 0) - edm::LogInfo("IsoTrack") << "forJ pt " << itr->pt() << " eta/phi " << itr->eta() << " " << itr->phi(); + edm::LogVerbatim("IsoTrack") << "forJ pt " << itr->pt() << " eta/phi " << itr->eta() << " " << itr->phi(); } if (verbosity_ % 10 > 0) - edm::LogInfo("IsoTrack") << "jets pt/eta/phi = " << ptTriggered << "/" << etaTriggered << "/" << phiTriggered; + edm::LogVerbatim("IsoTrack") << "jets pt/eta/phi = " << ptTriggered << "/" << etaTriggered << "/" + << phiTriggered; //////////////////////loop over tracks//////////////////////////////////////// unsigned int nTracks(0), nselTracks(0); for (trkDetItr = trkCaloDirections.begin(), nTracks = 0; trkDetItr != trkCaloDirections.end(); @@ -445,11 +444,11 @@ void IsoTrackCalib::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe t_mindR1 = deltaR(etaTriggered, v4.eta(), phiTriggered, v4.phi()); t_mindR2 = -999; if (verbosity_ % 10 > 0) - edm::LogInfo("IsoTrack") << "This track : " << nTracks << " (pt/eta/phi/p) :" << pTrack->pt() << "/" - << pTrack->eta() << "/" << pTrack->phi() << "/" << pTrack->p(); + edm::LogVerbatim("IsoTrack") << "This track : " << nTracks << " (pt/eta/phi/p) :" << pTrack->pt() << "/" + << pTrack->eta() << "/" << pTrack->phi() << "/" << pTrack->p(); if (verbosity_ % 10 > 0) - edm::LogInfo("IsoTrack") << "dr values are = " << t_mindR1; + edm::LogVerbatim("IsoTrack") << "dr values are = " << t_mindR1; t_l1pt = ptTriggered; t_l1eta = etaTriggered; @@ -480,8 +479,8 @@ void IsoTrackCalib::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe t_ieta = detId.ieta(); } if (verbosity_ % 10 > 0) - edm::LogInfo("IsoTrack") << "qltyFlag|okECAL|okHCAL : " << qltyFlag << "|" << trkDetItr->okECAL << "/" - << trkDetItr->okHCAL; + edm::LogVerbatim("IsoTrack") << "qltyFlag|okECAL|okHCAL : " << qltyFlag << "|" << trkDetItr->okECAL << "/" + << trkDetItr->okHCAL; t_qltyFlag = (qltyFlag && trkDetItr->okECAL && trkDetItr->okHCAL); t_p = pTrack->p(); h_tketa1[0]->Fill(t_ieta); @@ -554,14 +553,14 @@ void IsoTrackCalib::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe } } if (verbosity_ % 10 > 0) { - edm::LogInfo("IsoTrack") << "This track : " << nTracks << " (pt/eta/phi/p) :" << pTrack->pt() << "/" - << pTrack->eta() << "/" << pTrack->phi() << "/" << t_p; - edm::LogInfo("IsoTrack") << "e_MIP " << t_eMipDR << " Chg Isolation " << t_hmaxNearP << " eHcal" << t_eHcal - << " ieta " << t_ieta << " Quality " << t_qltyMissFlag << ":" << t_qltyPVFlag - << ":" << t_selectTk; + edm::LogVerbatim("IsoTrack") << "This track : " << nTracks << " (pt/eta/phi/p) :" << pTrack->pt() << "/" + << pTrack->eta() << "/" << pTrack->phi() << "/" << t_p; + edm::LogVerbatim("IsoTrack") << "e_MIP " << t_eMipDR << " Chg Isolation " << t_hmaxNearP << " eHcal" + << t_eHcal << " ieta " << t_ieta << " Quality " << t_qltyMissFlag << ":" + << t_qltyPVFlag << ":" << t_selectTk; for (unsigned int lll = 0; lll < t_DetIds->size(); lll++) { - edm::LogInfo("IsoTrack") << "det id is = " << t_DetIds->at(lll) << " " - << " hit enery is = " << t_HitEnergies->at(lll); + edm::LogVerbatim("IsoTrack") << "det id is = " << t_DetIds->at(lll) << " " + << " hit enery is = " << t_HitEnergies->at(lll); } } if (t_p > 20.0 && t_eMipDR < 2.0 && t_hmaxNearP < 10.0) { @@ -648,7 +647,7 @@ void IsoTrackCalib::beginJob() { void IsoTrackCalib::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) { bool changed = false; bool ok = hltConfig_.init(iRun, iSetup, "HLT", changed); - edm::LogInfo("IsoTrack") << "Run " << iRun.run() << " hltconfig.init " << ok; + edm::LogVerbatim("IsoTrack") << "Run " << iRun.run() << " hltconfig.init " << ok; int iErrorCode = -1; m_l1GtMenu = m_l1GtUtils.ptrL1TriggerMenuEventSetup(iErrorCode); @@ -656,7 +655,7 @@ void IsoTrackCalib::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup const std::string& menuName = m_l1GtMenu->gtTriggerMenuName(); if (verbosity_ % 10 > 0) - edm::LogInfo("IsoTrack") << "menuName " << menuName; + edm::LogVerbatim("IsoTrack") << "menuName " << menuName; for (CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) { std::string algName = itAlgo->first; int algBitNumber = (itAlgo->second).algoBitNumber(); @@ -666,14 +665,14 @@ void IsoTrackCalib::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup std::map, int>::iterator itr; for (itr = l1AlgoMap_.begin(); itr != l1AlgoMap_.end(); itr++) { if (verbosity_ % 10 > 0) - edm::LogInfo("IsoTrack") << " ********** " << (itr->first).first << " " << (itr->first).second << " " - << itr->second; + edm::LogVerbatim("IsoTrack") << " ********** " << (itr->first).first << " " << (itr->first).second << " " + << itr->second; } } // ------------ method called when ending the processing of a run ------------ void IsoTrackCalib::endRun(edm::Run const& iRun, edm::EventSetup const&) { - edm::LogInfo("IsoTrack") << "endRun " << iRun.run() << std::endl; + edm::LogVerbatim("IsoTrack") << "endRun " << iRun.run() << std::endl; } double IsoTrackCalib::dEta(math::XYZTLorentzVector& vec1, math::XYZTLorentzVector& vec2) { diff --git a/Calibration/IsolatedParticles/plugins/IsoTrackCalibration.cc b/Calibration/IsolatedParticles/plugins/IsoTrackCalibration.cc index 2582e9113d915..cd1163a30fbdf 100644 --- a/Calibration/IsolatedParticles/plugins/IsoTrackCalibration.cc +++ b/Calibration/IsolatedParticles/plugins/IsoTrackCalibration.cc @@ -1,6 +1,3 @@ - -//#define DebugLog - // system include files #include #include @@ -65,8 +62,6 @@ #include "Geometry/CaloTopology/interface/CaloTopology.h" #include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h" #include "Geometry/CaloTopology/interface/EcalTrigTowerConstituentsMap.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" #include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" #include "SimDataFormats/PileupSummaryInfo/interface/PileupSummaryInfo.h" #include "DataFormats/JetReco/interface/PFJet.h" @@ -110,6 +105,9 @@ class IsoTrackCalibration : public edm::one::EDAnalyzer tok_hbhe_; edm::EDGetTokenT tok_ew_; + edm::ESGetToken tok_geom_; + edm::ESGetToken tok_magField_; + TTree *tree; int t_Run, t_Event, t_nVtx, t_nTrk, t_ieta; double t_EventWeight, t_p, t_pt, t_phi; @@ -177,24 +175,26 @@ IsoTrackCalibration::IsoTrackCalibration(const edm::ParameterSet &iConfig) : nRu tok_hbhe_ = consumes(edm::InputTag("hbhereco")); } -#ifdef DebugLog if (verbosity_ >= 0) { - std::cout << "Parameters read from config file \n" - << "\t minPt " << selectionParameters_.minPt << "\t theTrackQuality " << theTrackQuality_ - << "\t minQuality " << selectionParameters_.minQuality << "\t maxDxyPV " << selectionParameters_.maxDxyPV - << "\t maxDzPV " << selectionParameters_.maxDzPV << "\t maxChi2 " << selectionParameters_.maxChi2 - << "\t maxDpOverP " << selectionParameters_.maxDpOverP << "\t minOuterHit " - << selectionParameters_.minOuterHit << "\t minLayerCrossed " << selectionParameters_.minLayerCrossed - << "\t maxInMiss " << selectionParameters_.maxInMiss << "\t maxOutMiss " - << selectionParameters_.maxOutMiss << "\t a_coneR " << a_coneR_ << "\t a_charIsoR " << a_charIsoR_ - << "\t a_mipR " << a_mipR_ << "\t isMC " << isMC_ << "\t isQCD " << isQCD_ << "\t isAOD " << isAOD_ - << std::endl; - std::cout << trigNames_.size() << " triggers to be studied:"; + edm::LogVerbatim("IsoTrack") << "Parameters read from config file \n" + << "\t minPt " << selectionParameters_.minPt << "\t theTrackQuality " + << theTrackQuality_ << "\t minQuality " << selectionParameters_.minQuality + << "\t maxDxyPV " << selectionParameters_.maxDxyPV << "\t maxDzPV " + << selectionParameters_.maxDzPV << "\t maxChi2 " << selectionParameters_.maxChi2 + << "\t maxDpOverP " << selectionParameters_.maxDpOverP << "\t minOuterHit " + << selectionParameters_.minOuterHit << "\t minLayerCrossed " + << selectionParameters_.minLayerCrossed << "\t maxInMiss " + << selectionParameters_.maxInMiss << "\t maxOutMiss " + << selectionParameters_.maxOutMiss << "\t a_coneR " << a_coneR_ << "\t a_charIsoR " + << a_charIsoR_ << "\t a_mipR " << a_mipR_ << "\t isMC " << isMC_ << "\t isQCD " + << isQCD_ << "\t isAOD " << isAOD_; + edm::LogVerbatim("IsoTrack") << trigNames_.size() << " triggers to be studied:"; for (unsigned int k = 0; k < trigNames_.size(); ++k) - std::cout << " " << trigNames_[k]; - std::cout << std::endl; + edm::LogVerbatim("IsoTrack") << "[" << k << "] " << trigNames_[k]; } -#endif + + tok_geom_ = esConsumes(); + tok_magField_ = esConsumes(); } IsoTrackCalibration::~IsoTrackCalibration() { @@ -205,23 +205,15 @@ IsoTrackCalibration::~IsoTrackCalibration() { void IsoTrackCalibration::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { t_Run = iEvent.id().run(); t_Event = iEvent.id().event(); -#ifdef DebugLog if (verbosity_ % 10 > 0) - std::cout << "Run " << t_Run << " Event " << t_Event << " Luminosity " << iEvent.luminosityBlock() << " Bunch " - << iEvent.bunchCrossing() << " starts ==========" << std::endl; -#endif - //Get magnetic field and ECAL channel status - edm::ESHandle bFieldH; - iSetup.get().get(bFieldH); - const MagneticField *bField = bFieldH.product(); - - edm::ESHandle sevlv; - iSetup.get().get(sevlv); - - // get handles to calogeometry and calotopology - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry *geo = pG.product(); + edm::LogVerbatim("IsoTrack") << "Run " << t_Run << " Event " << t_Event << " Luminosity " + << iEvent.luminosityBlock() << " Bunch " << iEvent.bunchCrossing() + << " starts =========="; + //Get magnetic field + const MagneticField *bField = &iSetup.getData(tok_magField_); + + // get handles to calogeometry + const CaloGeometry *geo = &iSetup.getData(tok_geom_); //Get track collection edm::Handle trkCollection; @@ -249,14 +241,11 @@ void IsoTrackCalibration::analyze(const edm::Event &iEvent, const edm::EventSetu } else if (beamSpotH.isValid()) { leadPV = beamSpotH->position(); } -#ifdef DebugLog if ((verbosity_ / 100) % 10 > 0) { - std::cout << "Primary Vertex " << leadPV; + edm::LogVerbatim("IsoTrack") << "Primary Vertex " << leadPV; if (beamSpotH.isValid()) - std::cout << " Beam Spot " << beamSpotH->position(); - std::cout << std::endl; + edm::LogVerbatim("IsoTrack") << " Beam Spot " << beamSpotH->position(); } -#endif // RecHits edm::Handle barrelRecHitsHandle; @@ -275,9 +264,7 @@ void IsoTrackCalibration::analyze(const edm::Event &iEvent, const edm::EventSetu edm::Handle triggerEventHandle; iEvent.getByToken(tok_trigEvt_, triggerEventHandle); if (!triggerEventHandle.isValid()) { -#ifdef DebugLog - std::cout << "Error! Can't get the product " << triggerEvent_.label() << std::endl; -#endif + edm::LogVerbatim("IsoTrack") << "Error! Can't get the product " << triggerEvent_.label(); } else { /////////////////////////////TriggerResults edm::Handle triggerResults; @@ -291,11 +278,9 @@ void IsoTrackCalibration::analyze(const edm::Event &iEvent, const edm::EventSetu for (unsigned int i = 0; i < trigNames_.size(); ++i) { if (triggerNames_[iHLT].find(trigNames_[i]) != std::string::npos) { triggerOK = true; -#ifdef DebugLog if (verbosity_ % 10 > 0) - std::cout << "This is the trigger we are looking for " << triggerNames_[iHLT] << " Flag " << hlt - << std::endl; -#endif + edm::LogVerbatim("IsoTrack") + << "This is the trigger we are looking for " << triggerNames_[iHLT] << " Flag " << hlt; } } } @@ -316,11 +301,9 @@ void IsoTrackCalibration::analyze(const edm::Event &iEvent, const edm::EventSetu for (trkDetItr = trkCaloDirections.begin(), nTracks = 0; trkDetItr != trkCaloDirections.end(); trkDetItr++, nTracks++) { const reco::Track *pTrack = &(*(trkDetItr->trkItr)); -#ifdef DebugLog if (verbosity_ % 10 > 0) - std::cout << "This track : " << nTracks << " (pt/eta/phi/p) :" << pTrack->pt() << "/" << pTrack->eta() << "/" - << pTrack->phi() << "/" << pTrack->p() << std::endl; -#endif + edm::LogVerbatim("IsoTrack") << "This track : " << nTracks << " (pt/eta/phi/p) :" << pTrack->pt() << "/" + << pTrack->eta() << "/" << pTrack->phi() << "/" << pTrack->p(); t_ieta = 0; if (trkDetItr->okHCAL) { @@ -348,11 +331,9 @@ void IsoTrackCalibration::analyze(const edm::Event &iEvent, const edm::EventSetu oneCutParameters.maxOutMiss = 2; t_qltyPVFlag = spr::goodTrack(pTrack, leadPV, oneCutParameters, ((verbosity_ / 100) % 10 > 2)); -#ifdef DebugLog if (verbosity_ % 10 > 0) - std::cout << "qltyFlag|okECAL|okHCAL : " << qltyFlag << "|" << trkDetItr->okECAL << "/" << trkDetItr->okHCAL - << std::endl; -#endif + edm::LogVerbatim("IsoTrack") << "qltyFlag|okECAL|okHCAL : " << qltyFlag << "|" << trkDetItr->okECAL << "/" + << trkDetItr->okHCAL; if (qltyFlag && trkDetItr->okECAL && trkDetItr->okHCAL) { nselTracks++; int nRH_eMipDR(0), nNearTRKs(0); @@ -426,19 +407,17 @@ void IsoTrackCalibration::analyze(const edm::Event &iEvent, const edm::EventSetu t_p = pTrack->p(); t_pt = pTrack->pt(); t_phi = pTrack->phi(); -#ifdef DebugLog if (verbosity_ % 10 > 0) { - std::cout << "This track : " << nTracks << " (pt/eta/phi/p) :" << pTrack->pt() << "/" << pTrack->eta() - << "/" << pTrack->phi() << "/" << t_p << std::endl; - std::cout << "e_MIP " << t_eMipDR << " Chg Isolation " << t_hmaxNearP << " eHcal" << t_eHcal << " ieta " - << t_ieta << " Quality " << t_qltyMissFlag << ":" << t_qltyPVFlag << ":" << t_selectTk - << std::endl; + edm::LogVerbatim("IsoTrack") << "This track : " << nTracks << " (pt/eta/phi/p) :" << pTrack->pt() << "/" + << pTrack->eta() << "/" << pTrack->phi() << "/" << t_p; + edm::LogVerbatim("IsoTrack") << "e_MIP " << t_eMipDR << " Chg Isolation " << t_hmaxNearP << " eHcal" + << t_eHcal << " ieta " << t_ieta << " Quality " << t_qltyMissFlag << ":" + << t_qltyPVFlag << ":" << t_selectTk; for (unsigned int lll = 0; lll < t_DetIds->size(); lll++) { - std::cout << "det id is = " << t_DetIds->at(lll) << " " - << " hit enery is = " << t_HitEnergies->at(lll) << std::endl; + edm::LogVerbatim("IsoTrack") + << "det id is = " << t_DetIds->at(lll) << " hit enery is = " << t_HitEnergies->at(lll); } } -#endif tree->Fill(); } // end of conditions on t_eMipDR and t_hmaxNearP } // end of loose check of track quality diff --git a/Calibration/IsolatedParticles/plugins/IsoTrig.cc b/Calibration/IsolatedParticles/plugins/IsoTrig.cc index 445fcba1197b3..b9d72b3a90f4a 100644 --- a/Calibration/IsolatedParticles/plugins/IsoTrig.cc +++ b/Calibration/IsolatedParticles/plugins/IsoTrig.cc @@ -67,7 +67,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ServiceRegistry/interface/Service.h" @@ -185,14 +184,18 @@ class IsoTrig : public edm::one::EDAnalyzer tok_l2cand_; std::vector> tok_pixtks_; + edm::ESGetToken tok_geom_; + edm::ESGetToken tok_magField_; + std::vector pixelTrackRefsHB_, pixelTrackRefsHE_; - edm::ESHandle bFieldH_; - edm::ESHandle pG_; edm::Handle hbhe_; edm::Handle barrelRecHitsHandle_; edm::Handle endcapRecHitsHandle_; edm::Handle beamSpotH_; edm::Handle recVtxs_; + + const MagneticField *bField_; + const CaloGeometry *geo_; math::XYZPoint leadPV_; std::map trigList_; @@ -413,6 +416,9 @@ IsoTrig::IsoTrig(const edm::ParameterSet &iConfig) pLimits_[i] = pl[i]; rEB_ = 123.8; zEE_ = 317.0; + + tok_geom_ = esConsumes(); + tok_magField_ = esConsumes(); } IsoTrig::~IsoTrig() { @@ -562,10 +568,9 @@ void IsoTrig::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { HLTConfigProvider const &hltConfig = hltPrescaleProvider_.hltConfigProvider(); - iSetup.get().get(bFieldH_); - iSetup.get().get(pG_); - const MagneticField *bField = bFieldH_.product(); - GlobalVector BField = bField->inTesla(GlobalPoint(0, 0, 0)); + bField_ = &iSetup.getData(tok_magField_); + geo_ = &iSetup.getData(tok_geom_); + GlobalVector BField = bField_->inTesla(GlobalPoint(0, 0, 0)); bfVal_ = BField.mag(); trigger::TriggerEvent triggerEvent; @@ -1211,10 +1216,9 @@ void IsoTrig::StudyTrkEbyP(edm::Handle &trkCollection) { edm::LogVerbatim("IsoTrack") << "trkCollection.isValid is false"; } else { std::vector::const_iterator trkDetItr; - const MagneticField *bField = bFieldH_.product(); - const CaloGeometry *geo = pG_.product(); std::vector trkCaloDirections1; - spr::propagateCALO(trkCollection, geo, bField, theTrackQuality_, trkCaloDirections1, ((verbosity_ / 100) % 10 > 2)); + spr::propagateCALO( + trkCollection, geo_, bField_, theTrackQuality_, trkCaloDirections1, ((verbosity_ / 100) % 10 > 2)); unsigned int nTracks = 0; int nRH_eMipDR = 0, nNearTRKs = 0; std::vector selFlags; @@ -1225,7 +1229,7 @@ void IsoTrig::StudyTrkEbyP(edm::Handle &trkCollection) { edm::LogVerbatim("IsoTrack") << "track no. " << nTracks << " p(): " << pTrack->p(); if (pTrack->p() > 20) { math::XYZTLorentzVector v2(pTrack->px(), pTrack->py(), pTrack->pz(), pTrack->p()); - eMipDR = spr::eCone_ecal(geo, + eMipDR = spr::eCone_ecal(geo_, barrelRecHitsHandle_, endcapRecHitsHandle_, trkDetItr->pointHCAL, @@ -1256,7 +1260,7 @@ void IsoTrig::StudyTrkEbyP(edm::Handle &trkCollection) { if ((verbosity_ / 1000) % 10 > 1) edm::LogVerbatim("IsoTrack") << "coneh " << conehmaxNearP << "ok " << trkDetItr->okECAL << " " << trkDetItr->okHCAL; - double e1 = spr::eCone_ecal(geo, + double e1 = spr::eCone_ecal(geo_, barrelRecHitsHandle_, endcapRecHitsHandle_, trkDetItr->pointHCAL, @@ -1264,7 +1268,7 @@ void IsoTrig::StudyTrkEbyP(edm::Handle &trkCollection) { a_neutR1_, trkDetItr->directionECAL, nRH_eMipDR); - double e2 = spr::eCone_ecal(geo, + double e2 = spr::eCone_ecal(geo_, barrelRecHitsHandle_, endcapRecHitsHandle_, trkDetItr->pointHCAL, @@ -1293,7 +1297,7 @@ void IsoTrig::StudyTrkEbyP(edm::Handle &trkCollection) { int nRecHitsCone = -99, ietaHotCell = -99, iphiHotCell = -99; GlobalPoint gposHotCell(0., 0., 0.); std::vector coneRecHitDetIds; - hCone = spr::eCone_hcal(geo, + hCone = spr::eCone_hcal(geo_, hbhe_, trkDetItr->pointHCAL, trkDetItr->pointECAL, @@ -1443,10 +1447,9 @@ void IsoTrig::studyMipCut(edm::Handle &trkCollection, edm::LogWarning("IsoTrack") << "trkCollection.isValid is false"; } else { std::vector::const_iterator trkDetItr; - const MagneticField *bField = bFieldH_.product(); - const CaloGeometry *geo = pG_.product(); std::vector trkCaloDirections1; - spr::propagateCALO(trkCollection, geo, bField, theTrackQuality_, trkCaloDirections1, ((verbosity_ / 100) % 10 > 2)); + spr::propagateCALO( + trkCollection, geo_, bField_, theTrackQuality_, trkCaloDirections1, ((verbosity_ / 100) % 10 > 2)); if (verbosity_ % 10 > 0) edm::LogVerbatim("IsoTrack") << "Number of L2cands:" << L2cands->size() << " to be matched to something out of " << trkCaloDirections1.size() << " reco tracks"; @@ -1480,7 +1483,7 @@ void IsoTrig::studyMipCut(edm::Handle &trkCollection, mindP1 = dp1; mindRvec = v2; int nRH_eMipDR = 0, nNearTRKs = 0; - eMipDR = spr::eCone_ecal(geo, + eMipDR = spr::eCone_ecal(geo_, barrelRecHitsHandle_, endcapRecHitsHandle_, trkDetItr->pointHCAL, @@ -1505,7 +1508,7 @@ void IsoTrig::studyMipCut(edm::Handle &trkCollection, bool qltyPVFlag = spr::goodTrack(pTrack, leadPV_, oneCutParameters, ((verbosity_ / 100) % 10 > 1)); conehmaxNearP = spr::chargeIsolationCone( nTracks, trkCaloDirections1, a_charIsoR_, nNearTRKs, ((verbosity_ / 100) % 10 > 1)); - double e1 = spr::eCone_ecal(geo, + double e1 = spr::eCone_ecal(geo_, barrelRecHitsHandle_, endcapRecHitsHandle_, trkDetItr->pointHCAL, @@ -1513,7 +1516,7 @@ void IsoTrig::studyMipCut(edm::Handle &trkCollection, a_neutR1_, trkDetItr->directionECAL, nRH_eMipDR); - double e2 = spr::eCone_ecal(geo, + double e2 = spr::eCone_ecal(geo_, barrelRecHitsHandle_, endcapRecHitsHandle_, trkDetItr->pointHCAL, @@ -1539,7 +1542,7 @@ void IsoTrig::studyMipCut(edm::Handle &trkCollection, int nRecHitsCone = -99, ietaHotCell = -99, iphiHotCell = -99; GlobalPoint gposHotCell(0., 0., 0.); std::vector coneRecHitDetIds; - hCone = spr::eCone_hcal(geo, + hCone = spr::eCone_hcal(geo_, hbhe_, trkDetItr->pointHCAL, trkDetItr->pointECAL, @@ -1685,11 +1688,9 @@ void IsoTrig::studyTrigger(edm::Handle &trkCollection, void IsoTrig::studyIsolation(edm::Handle &trkCollection, std::vector &goodTks) { if (trkCollection.isValid()) { - // get handles to calogeometry and calotopology - const CaloGeometry *geo = pG_.product(); - const MagneticField *bField = bFieldH_.product(); std::vector trkCaloDirections; - spr::propagateCALO(trkCollection, geo, bField, theTrackQuality_, trkCaloDirections, ((verbosity_ / 100) % 10 > 2)); + spr::propagateCALO( + trkCollection, geo_, bField_, theTrackQuality_, trkCaloDirections, ((verbosity_ / 100) % 10 > 2)); std::vector::const_iterator trkDetItr; if ((verbosity_ / 1000) % 10 > 1) { @@ -1734,7 +1735,7 @@ void IsoTrig::studyIsolation(edm::Handle &trkCollection, if (selectTk && trkDetItr->okECAL && trkDetItr->okHCAL) { ngoodTk++; int nRH_eMipDR = 0, nNearTRKs = 0; - double e1 = spr::eCone_ecal(geo, + double e1 = spr::eCone_ecal(geo_, barrelRecHitsHandle_, endcapRecHitsHandle_, trkDetItr->pointHCAL, @@ -1742,7 +1743,7 @@ void IsoTrig::studyIsolation(edm::Handle &trkCollection, a_neutR1_, trkDetItr->directionECAL, nRH_eMipDR); - double e2 = spr::eCone_ecal(geo, + double e2 = spr::eCone_ecal(geo_, barrelRecHitsHandle_, endcapRecHitsHandle_, trkDetItr->pointHCAL, @@ -1750,7 +1751,7 @@ void IsoTrig::studyIsolation(edm::Handle &trkCollection, a_neutR2_, trkDetItr->directionECAL, nRH_eMipDR); - eMipDR = spr::eCone_ecal(geo, + eMipDR = spr::eCone_ecal(geo_, barrelRecHitsHandle_, endcapRecHitsHandle_, trkDetItr->pointHCAL, @@ -1765,7 +1766,7 @@ void IsoTrig::studyIsolation(edm::Handle &trkCollection, int nRecHitsCone = -99, ietaHotCell = -99, iphiHotCell = -99; GlobalPoint gposHotCell(0., 0., 0.); std::vector coneRecHitDetIds; - hCone = spr::eCone_hcal(geo, + hCone = spr::eCone_hcal(geo_, hbhe_, trkDetItr->pointHCAL, trkDetItr->pointECAL, @@ -1836,10 +1837,8 @@ void IsoTrig::chgIsolation(double &etaTriggered, std::vector maxP; std::vector::const_iterator trkDetItr; - const MagneticField *bField = bFieldH_.product(); - const CaloGeometry *geo = pG_.product(); std::vector trkCaloDirections1; - spr::propagateCALO(trkCollection, geo, bField, theTrackQuality_, trkCaloDirections1, ((verbosity_ / 100) % 10 > 2)); + spr::propagateCALO(trkCollection, geo_, bField_, theTrackQuality_, trkCaloDirections1, ((verbosity_ / 100) % 10 > 2)); if (verbosity_ % 10 > 0) edm::LogVerbatim("IsoTrack") << "Propagated TrkCollection"; for (unsigned int k = 0; k < pixelIsolationConeSizeAtEC_.size(); ++k) @@ -1958,11 +1957,9 @@ void IsoTrig::getGoodTracks(const edm::Event &iEvent, edm::Handleclear(); std::vector nGood(4, 0); if (trkCollection.isValid()) { - // get handles to calogeometry and calotopology - const CaloGeometry *geo = pG_.product(); - const MagneticField *bField = bFieldH_.product(); std::vector trkCaloDirections; - spr::propagateCALO(trkCollection, geo, bField, theTrackQuality_, trkCaloDirections, ((verbosity_ / 100) % 10 > 2)); + spr::propagateCALO( + trkCollection, geo_, bField_, theTrackQuality_, trkCaloDirections, ((verbosity_ / 100) % 10 > 2)); // get the trigger jet edm::Handle l1trigobj; @@ -2013,7 +2010,7 @@ void IsoTrig::getGoodTracks(const edm::Event &iEvent, edm::HandleokECAL && trkDetItr->okHCAL && mindR > 1.0) { int nRH_eMipDR(0), nNearTRKs(0); - double eMipDR = spr::eCone_ecal(geo, + double eMipDR = spr::eCone_ecal(geo_, barrelRecHitsHandle_, endcapRecHitsHandle_, trkDetItr->pointHCAL, diff --git a/Calibration/IsolatedParticles/plugins/IsolatedGenParticles.cc b/Calibration/IsolatedParticles/plugins/IsolatedGenParticles.cc index f47bb4c4259ce..16114e7a9500f 100644 --- a/Calibration/IsolatedParticles/plugins/IsolatedGenParticles.cc +++ b/Calibration/IsolatedParticles/plugins/IsolatedGenParticles.cc @@ -50,7 +50,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -155,6 +154,12 @@ class IsolatedGenParticles : public edm::one::EDAnalyzer tok_L1extCenJet_; edm::EDGetTokenT tok_L1extFwdJet_; + edm::ESGetToken tok_geom_; + edm::ESGetToken tok_caloTopology_; + edm::ESGetToken tok_topo_; + edm::ESGetToken tok_magField_; + edm::ESGetToken tok_pdt_; + TH1I *h_L1AlgoNames; TH1I *h_NEventProc; TH2D *h_pEta[Particles]; @@ -359,6 +364,12 @@ IsolatedGenParticles::IsolatedGenParticles(const edm::ParameterSet &iConfig) << " a_neutIsoR " << a_neutIsoR_ << " a_mipR " << a_mipR_ << " debug " << verbosity_ << " debugL1Info " << debugL1Info_ << "\n" << " Isolation Flag " << a_Isolation_ << " with cut " << pCutIsolate_ << " GeV"; + + tok_geom_ = esConsumes(); + tok_caloTopology_ = esConsumes(); + tok_topo_ = esConsumes(); + tok_magField_ = esConsumes(); + tok_pdt_ = esConsumes(); } void IsolatedGenParticles::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { @@ -389,14 +400,10 @@ void IsolatedGenParticles::analyze(const edm::Event &iEvent, const edm::EventSet clearTreeVectors(); nEventProc++; - - edm::ESHandle bFieldH; - iSetup.get().get(bFieldH); - const MagneticField *bField = bFieldH.product(); + const MagneticField *bField = &iSetup.getData(tok_magField_); // get particle data table - edm::ESHandle pdt; - iSetup.getData(pdt); + const HepPDT::ParticleDataTable *pdt = &iSetup.getData(tok_pdt_); // get handle to HEPMCProduct edm::Handle hepmc; @@ -406,17 +413,9 @@ void IsolatedGenParticles::analyze(const edm::Event &iEvent, const edm::EventSet else iEvent.getByToken(tok_genParticles_, genParticles); - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry *geo = pG.product(); - - edm::ESHandle theCaloTopology; - iSetup.get().get(theCaloTopology); - const CaloTopology *caloTopology = theCaloTopology.product(); - - edm::ESHandle htopo; - iSetup.get().get(htopo); - const HcalTopology *theHBHETopology = htopo.product(); + const CaloGeometry *geo = &iSetup.getData(tok_geom_); + const CaloTopology *caloTopology = &iSetup.getData(tok_caloTopology_); + const HcalTopology *theHBHETopology = &iSetup.getData(tok_topo_); //===================== save L1 Trigger information ======================= // get L1TriggerReadout records diff --git a/Calibration/IsolatedParticles/plugins/IsolatedTracksHcalScale.cc b/Calibration/IsolatedParticles/plugins/IsolatedTracksHcalScale.cc index ca1009e0ea9b2..f651667ee3830 100644 --- a/Calibration/IsolatedParticles/plugins/IsolatedTracksHcalScale.cc +++ b/Calibration/IsolatedParticles/plugins/IsolatedTracksHcalScale.cc @@ -63,7 +63,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -77,7 +76,6 @@ #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" #include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" #include "Geometry/CaloTopology/interface/CaloSubdetectorTopology.h" -#include "Geometry/CaloTopology/interface/HcalTopology.h" #include "Geometry/CaloTopology/interface/CaloTopology.h" #include "MagneticField/Engine/interface/MagneticField.h" @@ -136,6 +134,12 @@ class IsolatedTracksHcalScale : public edm::one::EDAnalyzer tok_caloEE_; edm::EDGetTokenT tok_caloHH_; + edm::ESGetToken tok_geom_; + edm::ESGetToken tok_caloTopology_; + edm::ESGetToken tok_magField_; + edm::ESGetToken tok_ecalChStatus_; + edm::ESGetToken tok_sevlv_; + int nEventProc_; TTree *tree_; @@ -208,6 +212,12 @@ IsolatedTracksHcalScale::IsolatedTracksHcalScale(const edm::ParameterSet &iConfi << a_charIsoR_ << "\t a_neutIsoR " << a_neutIsoR_ << "\t a_mipR " << a_mipR_ << "\t time Range (" << tMinE_ << ":" << tMaxE_ << ")"; } + + tok_geom_ = esConsumes(); + tok_caloTopology_ = esConsumes(); + tok_magField_ = esConsumes(); + tok_ecalChStatus_ = esConsumes(); + tok_sevlv_ = esConsumes(); } void IsolatedTracksHcalScale::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { @@ -232,23 +242,11 @@ void IsolatedTracksHcalScale::fillDescriptions(edm::ConfigurationDescriptions &d } void IsolatedTracksHcalScale::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { - edm::ESHandle bFieldH; - iSetup.get().get(bFieldH); - const MagneticField *bField = bFieldH.product(); - - // get handles to calogeometry and calotopology - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry *geo = pG.product(); - - edm::ESHandle theCaloTopology; - iSetup.get().get(theCaloTopology); - const CaloTopology *caloTopology = theCaloTopology.product(); - - // Retrieve the good/bad ECAL channels from the DB - edm::ESHandle ecalChStatus; - iSetup.get().get(ecalChStatus); - const EcalChannelStatus *theEcalChStatus = ecalChStatus.product(); + const CaloGeometry *geo = &iSetup.getData(tok_geom_); + const MagneticField *bField = &iSetup.getData(tok_magField_); + const EcalChannelStatus *theEcalChStatus = &iSetup.getData(tok_ecalChStatus_); + const EcalSeverityLevelAlgo *sevlv = &iSetup.getData(tok_sevlv_); + const CaloTopology *caloTopology = &iSetup.getData(tok_caloTopology_); clearTreeVectors(); @@ -447,16 +445,13 @@ void IsolatedTracksHcalScale::analyze(const edm::Event &iEvent, const edm::Event HcalDetId closestCell = (HcalDetId)(trkDetItr->detIdHCAL); - edm::ESHandle sevlv; - iSetup.get().get(sevlv); - e11x11_20SigP = spr::eECALmatrix(trkDetItr->detIdECAL, barrelRecHitsHandle, endcapRecHitsHandle, *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 5, 5, 0.060, @@ -469,7 +464,7 @@ void IsolatedTracksHcalScale::analyze(const edm::Event &iEvent, const edm::Event *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 7, 7, 0.060, diff --git a/Calibration/IsolatedParticles/plugins/IsolatedTracksNxN.cc b/Calibration/IsolatedParticles/plugins/IsolatedTracksNxN.cc index 516040870754b..1e330f34ed674 100644 --- a/Calibration/IsolatedParticles/plugins/IsolatedTracksNxN.cc +++ b/Calibration/IsolatedParticles/plugins/IsolatedTracksNxN.cc @@ -102,7 +102,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -201,6 +200,13 @@ class IsolatedTracksNxN : public edm::one::EDAnalyzer edm::EDGetTokenT tok_caloEE_; edm::EDGetTokenT tok_caloHH_; + edm::ESGetToken tok_geom_; + edm::ESGetToken tok_caloTopology_; + edm::ESGetToken tok_topo_; + edm::ESGetToken tok_magField_; + edm::ESGetToken tok_ecalChStatus_; + edm::ESGetToken tok_sevlv_; + edm::ESGetToken tok_htmap_; static constexpr size_t NPBins = 15; static constexpr size_t NEtaBins = 3; double genPartPBins[NPBins + 1], genPartEtaBins[NEtaBins + 1]; @@ -539,6 +545,14 @@ IsolatedTracksNxN::IsolatedTracksNxN(const edm::ParameterSet &iConfig) << "\n debugL1Info " << debugL1Info_ << "\t L1TriggerAlgoInfo " << L1TriggerAlgoInfo_ << "\n"; } + + tok_geom_ = esConsumes(); + tok_caloTopology_ = esConsumes(); + tok_topo_ = esConsumes(); + tok_magField_ = esConsumes(); + tok_ecalChStatus_ = esConsumes(); + tok_sevlv_ = esConsumes(); + tok_htmap_ = esConsumes(); } IsolatedTracksNxN::~IsolatedTracksNxN() { @@ -752,9 +766,7 @@ void IsolatedTracksNxN::fillDescriptions(edm::ConfigurationDescriptions &descrip void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { bool haveIsoTrack = false; - edm::ESHandle bFieldH; - iSetup.get().get(bFieldH); - const MagneticField *bField = bFieldH.product(); + const MagneticField *bField = &iSetup.getData(tok_magField_); clearTreeVectors(); @@ -1029,17 +1041,9 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup //=================================================================================== // get handles to calogeometry and calotopology - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry *geo = pG.product(); - - edm::ESHandle theCaloTopology; - iSetup.get().get(theCaloTopology); - const CaloTopology *caloTopology = theCaloTopology.product(); - - edm::ESHandle htopo; - iSetup.get().get(htopo); - const HcalTopology *theHBHETopology = htopo.product(); + const CaloGeometry *geo = &iSetup.getData(tok_geom_); + const CaloTopology *caloTopology = &iSetup.getData(tok_caloTopology_); + const HcalTopology *theHBHETopology = &iSetup.getData(tok_topo_); edm::Handle barrelRecHitsHandle; edm::Handle endcapRecHitsHandle; @@ -1047,14 +1051,11 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup iEvent.getByToken(tok_EE_, endcapRecHitsHandle); // Retrieve the good/bad ECAL channels from the DB - edm::ESHandle ecalChStatus; - iSetup.get().get(ecalChStatus); - const EcalChannelStatus *theEcalChStatus = ecalChStatus.product(); + const EcalChannelStatus *theEcalChStatus = &iSetup.getData(tok_ecalChStatus_); + const EcalSeverityLevelAlgo *sevlv = &iSetup.getData(tok_sevlv_); // Retrieve trigger tower map - edm::ESHandle hTtmap; - iSetup.get().get(hTtmap); - const EcalTrigTowerConstituentsMap &ttMap = *hTtmap; + const EcalTrigTowerConstituentsMap &ttMap = iSetup.getData(tok_htmap_); edm::Handle hbhe; iEvent.getByToken(tok_hbhe_, hbhe); @@ -1259,9 +1260,6 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup simTrackP = matchedSimTrk->momentum().P(); } - edm::ESHandle sevlv; - iSetup.get().get(sevlv); - // get ECal Tranverse Profile std::pair e7x7P, e9x9P, e11x11P, e15x15P; std::pair e7x7_10SigP, e9x9_10SigP, e11x11_10SigP, e15x15_10SigP; @@ -1281,7 +1279,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 3, 3, -100.0, @@ -1294,7 +1292,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 4, 4, -100.0, @@ -1307,7 +1305,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 5, 5, -100.0, @@ -1320,7 +1318,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 7, 7, -100.0, @@ -1334,7 +1332,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 3, 3, 0.030, @@ -1347,7 +1345,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 4, 4, 0.030, @@ -1360,7 +1358,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 5, 5, 0.030, @@ -1373,7 +1371,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 7, 7, 0.030, @@ -1387,7 +1385,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, ttMap, 3, 3, @@ -1401,7 +1399,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, ttMap, 4, 4, @@ -1415,7 +1413,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, ttMap, 5, 5, @@ -1429,7 +1427,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, ttMap, 7, 7, @@ -1445,7 +1443,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 3, 3, 0.060, @@ -1458,7 +1456,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 4, 4, 0.060, @@ -1471,7 +1469,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 5, 5, 0.060, @@ -1484,7 +1482,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 7, 7, 0.060, @@ -1498,7 +1496,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 3, 3, 0.075, @@ -1511,7 +1509,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 4, 4, 0.075, @@ -1524,7 +1522,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 5, 5, 0.075, @@ -1537,7 +1535,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 7, 7, 0.075, @@ -1551,7 +1549,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 3, 3, 0.090, @@ -1564,7 +1562,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 4, 4, 0.090, @@ -1577,7 +1575,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 5, 5, 0.090, @@ -1590,7 +1588,7 @@ void IsolatedTracksNxN::analyze(const edm::Event &iEvent, const edm::EventSetup *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 7, 7, 0.090, diff --git a/Calibration/IsolatedParticles/plugins/StudyCaloGen.cc b/Calibration/IsolatedParticles/plugins/StudyCaloGen.cc index 3ec4967aa84ea..c3539fe48a83e 100644 --- a/Calibration/IsolatedParticles/plugins/StudyCaloGen.cc +++ b/Calibration/IsolatedParticles/plugins/StudyCaloGen.cc @@ -14,7 +14,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -84,6 +83,12 @@ class StudyCaloGen : public edm::one::EDAnalyzer { edm::EDGetTokenT tok_hepmc_; edm::EDGetTokenT tok_genParticles_; + edm::ESGetToken tok_geom_; + edm::ESGetToken tok_caloTopology_; + edm::ESGetToken tok_topo_; + edm::ESGetToken tok_magField_; + edm::ESGetToken tok_pdt_; + bool useHepMC_; double a_coneR_, a_charIsoR_, a_neutIsoR_, a_mipR_; int verbosity_; @@ -262,6 +267,12 @@ StudyCaloGen::StudyCaloGen(const edm::ParameterSet &iConfig) << " etaMax " << etaMax_ << "\n a_coneR " << a_coneR_ << " a_charIsoR " << a_charIsoR_ << " a_neutIsoR " << a_neutIsoR_ << " a_mipR " << a_mipR_ << " debug " << verbosity_ << "\nIsolation Flag " << a_Isolation_ << " with cut " << pCutIsolate_ << " GeV"; + + tok_geom_ = esConsumes(); + tok_caloTopology_ = esConsumes(); + tok_topo_ = esConsumes(); + tok_magField_ = esConsumes(); + tok_pdt_ = esConsumes(); } void StudyCaloGen::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { @@ -283,14 +294,10 @@ void StudyCaloGen::analyze(const edm::Event &iEvent, const edm::EventSetup &iSet clearTreeVectors(); nEventProc++; - - edm::ESHandle bFieldH; - iSetup.get().get(bFieldH); - const MagneticField *bField = bFieldH.product(); + const MagneticField *bField = &iSetup.getData(tok_magField_); // get particle data table - edm::ESHandle pdt; - iSetup.getData(pdt); + const HepPDT::ParticleDataTable *pdt = &iSetup.getData(tok_pdt_); // get handle to HEPMCProduct edm::Handle hepmc; @@ -300,17 +307,9 @@ void StudyCaloGen::analyze(const edm::Event &iEvent, const edm::EventSetup &iSet else iEvent.getByToken(tok_genParticles_, genParticles); - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry *geo = pG.product(); - - edm::ESHandle theCaloTopology; - iSetup.get().get(theCaloTopology); - const CaloTopology *caloTopology = theCaloTopology.product(); - - edm::ESHandle htopo; - iSetup.get().get(htopo); - const HcalTopology *theHBHETopology = htopo.product(); + const CaloGeometry *geo = &iSetup.getData(tok_geom_); + const CaloTopology *caloTopology = &iSetup.getData(tok_caloTopology_); + const HcalTopology *theHBHETopology = &iSetup.getData(tok_topo_); GlobalPoint posVec, posECAL; math::XYZTLorentzVector momVec; diff --git a/Calibration/IsolatedParticles/plugins/StudyCaloResponse.cc b/Calibration/IsolatedParticles/plugins/StudyCaloResponse.cc index 46dcbefeed35b..a19e5cc8f6b17 100644 --- a/Calibration/IsolatedParticles/plugins/StudyCaloResponse.cc +++ b/Calibration/IsolatedParticles/plugins/StudyCaloResponse.cc @@ -135,6 +135,13 @@ class StudyCaloResponse : public edm::one::EDAnalyzer tok_hbhe_; edm::EDGetTokenT tok_ew_; + edm::ESGetToken tok_geom_; + edm::ESGetToken tok_caloTopology_; + edm::ESGetToken tok_topo_; + edm::ESGetToken tok_magField_; + edm::ESGetToken tok_ecalChStatus_; + edm::ESGetToken tok_sevlv_; + TH1I *h_nHLT, *h_HLTAccept, *h_HLTCorr, *h_numberPV; TH1I *h_goodPV, *h_goodRun; TH2I* h_nHLTvsRN; @@ -174,9 +181,9 @@ StudyCaloResponse::StudyCaloResponse(const edm::ParameterSet& iConfig) isItAOD_(iConfig.getUntrackedParameter("isItAOD", false)), vetoTrigger_(iConfig.getUntrackedParameter("vetoTrigger", false)), doTree_(iConfig.getUntrackedParameter("doTree", false)), - vetoMuon_(iConfig.getUntrackedParameter("vetoMuon", false)), + vetoMuon_(iConfig.getUntrackedParameter("vetoMuon", true)), vetoEcal_(iConfig.getUntrackedParameter("vetoEcal", false)), - cutMuon_(iConfig.getUntrackedParameter("cutMuon", 0.001)), + cutMuon_(iConfig.getUntrackedParameter("cutMuon", 0.1)), cutEcal_(iConfig.getUntrackedParameter("cutEcal", 2.0)), cutRatio_(iConfig.getUntrackedParameter("cutRatio", 0.90)), puWeights_(iConfig.getUntrackedParameter >("puWeights")), @@ -217,6 +224,13 @@ StudyCaloResponse::StudyCaloResponse(const edm::ParameterSet& iConfig) } tok_ew_ = consumes(edm::InputTag("generator")); + tok_geom_ = esConsumes(); + tok_caloTopology_ = esConsumes(); + tok_topo_ = esConsumes(); + tok_magField_ = esConsumes(); + tok_ecalChStatus_ = esConsumes(); + tok_sevlv_ = esConsumes(); + edm::LogVerbatim("IsoTrack") << "Verbosity " << verbosity_ << " with " << trigNames_.size() << " triggers:"; for (unsigned int k = 0; k < trigNames_.size(); ++k) edm::LogVerbatim("IsoTrack") << " [" << k << "] " << trigNames_[k]; @@ -277,8 +291,8 @@ void StudyCaloResponse::fillDescriptions(edm::ConfigurationDescriptions& descrip desc.addUntracked("isItAOD", false); desc.addUntracked("vetoTrigger", false); desc.addUntracked("doTree", false); - desc.addUntracked("vetoMuon", false); - desc.addUntracked("cutMuon", 0.001); + desc.addUntracked("vetoMuon", true); + desc.addUntracked("cutMuon", 0.1); desc.addUntracked("vetoEcal", false); desc.addUntracked("cutEcal", 2.0); desc.addUntracked("cutRatio", 0.9); @@ -312,6 +326,7 @@ void StudyCaloResponse::analyze(edm::Event const& iEvent, edm::EventSetup const& iEvent.getByToken(tok_trigEvt, triggerEventHandle); bool ok(false); + std::string triggerUse("None"); if (!triggerEventHandle.isValid()) { edm::LogWarning("IsoTrack") << "Error! Can't get the product " << triggerEvent_.label(); } else { @@ -361,6 +376,8 @@ void StudyCaloResponse::analyze(edm::Event const& iEvent, edm::EventSetup const& if (verbosity_ % 10 > 0) edm::LogVerbatim("IsoTrack") << newtriggerName; if (hlt > 0) { + if (!ok) + triggerUse = newtriggerName; ok = true; tr_TrigName.push_back(newtriggerName); } @@ -386,31 +403,19 @@ void StudyCaloResponse::analyze(edm::Event const& iEvent, edm::EventSetup const& h_HLTCorr->Fill(iflg); } } + if ((verbosity_ / 10) % 10 > 0) + edm::LogVerbatim("IsoTrack") << "Trigger check gives " << ok << " with " << triggerUse; //Look at the tracks if (ok) { h_goodRun->Fill(RunNo); tr_goodRun = RunNo; // get handles to calogeometry and calotopology - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry* geo = pG.product(); - - edm::ESHandle theCaloTopology; - iSetup.get().get(theCaloTopology); - const CaloTopology* caloTopology = theCaloTopology.product(); - - edm::ESHandle htopo; - iSetup.get().get(htopo); - const HcalTopology* theHBHETopology = htopo.product(); - - edm::ESHandle bFieldH; - iSetup.get().get(bFieldH); - const MagneticField* bField = bFieldH.product(); - - edm::ESHandle ecalChStatus; - iSetup.get().get(ecalChStatus); - const EcalChannelStatus* theEcalChStatus = ecalChStatus.product(); + const CaloGeometry* geo = &iSetup.getData(tok_geom_); + const CaloTopology* caloTopology = &iSetup.getData(tok_caloTopology_); + const HcalTopology* theHBHETopology = &iSetup.getData(tok_topo_); + const MagneticField* bField = &iSetup.getData(tok_magField_); + const EcalChannelStatus* theEcalChStatus = &iSetup.getData(tok_ecalChStatus_); edm::Handle recVtxs; iEvent.getByToken(tok_recVtx_, recVtxs); @@ -533,15 +538,13 @@ void StudyCaloResponse::analyze(edm::Event const& iEvent, edm::EventSetup const& recMuon != muonEventHandle->end(); ++recMuon) { if (((recMuon->isPFMuon()) && (recMuon->isGlobalMuon() || recMuon->isTrackerMuon())) && - (recMuon->innerTrack()->validFraction() > 0.49)) { + (recMuon->innerTrack()->validFraction() > 0.49) && (recMuon->innerTrack().isNonnull())) { chiGlobal = ((recMuon->globalTrack().isNonnull()) ? recMuon->globalTrack()->normalizedChi2() : 999); goodGlob = (recMuon->isGlobalMuon() && chiGlobal < 3 && recMuon->combinedQuality().chi2LocalPosition < 12 && recMuon->combinedQuality().trkKink < 20); if (muon::segmentCompatibility(*recMuon) > (goodGlob ? 0.303 : 0.451)) { - dr = reco::deltaR(pTrack->momentum().eta(), - pTrack->momentum().phi(), - recMuon->momentum().eta(), - recMuon->momentum().phi()); + const reco::Track* pTrack0 = (recMuon->innerTrack()).get(); + dr = reco::deltaR(pTrack0->eta(), pTrack0->phi(), pTrack->eta(), pTrack->phi()); if (dr < cutMuon_) { vetoMuon = true; break; @@ -559,8 +562,7 @@ void StudyCaloResponse::analyze(edm::Event const& iEvent, edm::EventSetup const& double maxNearP31x31 = spr::chargeIsolationEcal(ntrk, trkCaloDets, geo, caloTopology, 15, 15, ((verbosity_ / 1000) % 10 > 0)); - edm::ESHandle sevlv; - iSetup.get().get(sevlv); + const EcalSeverityLevelAlgo* sevlv = &iSetup.getData(tok_sevlv_); edm::Handle barrelRecHitsHandle; edm::Handle endcapRecHitsHandle; @@ -575,7 +577,7 @@ void StudyCaloResponse::analyze(edm::Event const& iEvent, edm::EventSetup const& *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 3, 3, 0.030, @@ -589,7 +591,7 @@ void StudyCaloResponse::analyze(edm::Event const& iEvent, edm::EventSetup const& *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 5, 5, 0.030, @@ -603,7 +605,7 @@ void StudyCaloResponse::analyze(edm::Event const& iEvent, edm::EventSetup const& *theEcalChStatus, geo, caloTopology, - sevlv.product(), + sevlv, 7, 7, 0.030, @@ -907,7 +909,7 @@ void StudyCaloResponse::beginJob() { etaBin_[ie], (etaBin_[ie + 1] - 1), pvBin_[i - 4], - pvBin_[i - 3], + (pvBin_[i - 3] - 1), TrkNames[7].c_str()); } else { sprintf(htit, diff --git a/Calibration/IsolatedParticles/src/CaloPropagateTrack.cc b/Calibration/IsolatedParticles/src/CaloPropagateTrack.cc index e4f8f70e2f657..f614558ad70bd 100644 --- a/Calibration/IsolatedParticles/src/CaloPropagateTrack.cc +++ b/Calibration/IsolatedParticles/src/CaloPropagateTrack.cc @@ -363,7 +363,7 @@ namespace spr { } std::vector propagateCALO(const HepMC::GenEvent* genEvent, - edm::ESHandle& pdt, + const ParticleDataTable* pdt, const CaloGeometry* geo, const MagneticField* bField, double etaMax, @@ -454,7 +454,7 @@ namespace spr { } std::vector propagateCALO(edm::Handle& genParticles, - edm::ESHandle& pdt, + const ParticleDataTable* pdt, const CaloGeometry* geo, const MagneticField* bField, double etaMax, diff --git a/Calibration/IsolatedParticles/test/CaloPropagationTest.cc b/Calibration/IsolatedParticles/test/CaloPropagationTest.cc index ce4f2c65cea75..3fd4fdf4d3f8d 100644 --- a/Calibration/IsolatedParticles/test/CaloPropagationTest.cc +++ b/Calibration/IsolatedParticles/test/CaloPropagationTest.cc @@ -22,7 +22,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -50,26 +49,26 @@ class CaloPropagationTest : public edm::one::EDAnalyzer<> { void beginJob() override {} void analyze(edm::Event const& iEvent, edm::EventSetup const&) override; void endJob() override {} + +private: + const edm::ESGetToken tok_geom_; + const edm::ESGetToken tok_magField_; + const edm::ESGetToken tok_ctmap_; }; -CaloPropagationTest::CaloPropagationTest(const edm::ParameterSet&) {} +CaloPropagationTest::CaloPropagationTest(const edm::ParameterSet&) + : tok_geom_(esConsumes()), + tok_magField_(esConsumes()), + tok_ctmap_(esConsumes()) {} CaloPropagationTest::~CaloPropagationTest() {} // ------------ method called to produce the data ------------ void CaloPropagationTest::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry* geo = pG.product(); + const CaloGeometry* geo = &iSetup.getData(tok_geom_); const HcalGeometry* gHB = (const HcalGeometry*)(geo->getSubdetectorGeometry(DetId::Hcal, HcalBarrel)); - - edm::ESHandle bFieldH; - iSetup.get().get(bFieldH); - const MagneticField* bField = bFieldH.product(); - - edm::ESHandle ct; - iSetup.get().get(ct); - const CaloTowerConstituentsMap* ctmap = ct.product(); + const MagneticField* bField = &iSetup.getData(tok_magField_); + const CaloTowerConstituentsMap* ctmap = &iSetup.getData(tok_ctmap_); const std::vector& ids = gHB->getValidDetIds(DetId::Hcal, 0); bool debug(false); diff --git a/Calibration/IsolatedParticles/test/HLT_IsoTrig_Data_New1.py b/Calibration/IsolatedParticles/test/python/HLT_IsoTrig_Data_New1.py similarity index 100% rename from Calibration/IsolatedParticles/test/HLT_IsoTrig_Data_New1.py rename to Calibration/IsolatedParticles/test/python/HLT_IsoTrig_Data_New1.py diff --git a/Calibration/IsolatedParticles/test/HLT_IsoTrig_MC_New0.py b/Calibration/IsolatedParticles/test/python/HLT_IsoTrig_MC_New0.py similarity index 100% rename from Calibration/IsolatedParticles/test/HLT_IsoTrig_MC_New0.py rename to Calibration/IsolatedParticles/test/python/HLT_IsoTrig_MC_New0.py diff --git a/Calibration/IsolatedParticles/test/HLT_IsoTrig_MC_New1.py b/Calibration/IsolatedParticles/test/python/HLT_IsoTrig_MC_New1.py similarity index 100% rename from Calibration/IsolatedParticles/test/HLT_IsoTrig_MC_New1.py rename to Calibration/IsolatedParticles/test/python/HLT_IsoTrig_MC_New1.py diff --git a/Calibration/IsolatedParticles/test/HLT_IsoTrig_MC_New2.py b/Calibration/IsolatedParticles/test/python/HLT_IsoTrig_MC_New2.py similarity index 100% rename from Calibration/IsolatedParticles/test/HLT_IsoTrig_MC_New2.py rename to Calibration/IsolatedParticles/test/python/HLT_IsoTrig_MC_New2.py diff --git a/Calibration/IsolatedParticles/test/electronStudy_cfg.py b/Calibration/IsolatedParticles/test/python/electronStudy_cfg.py similarity index 100% rename from Calibration/IsolatedParticles/test/electronStudy_cfg.py rename to Calibration/IsolatedParticles/test/python/electronStudy_cfg.py diff --git a/Calibration/IsolatedParticles/test/proto_runIsoTrackCalibration_cfg.py b/Calibration/IsolatedParticles/test/python/proto_runIsoTrackCalibration_cfg.py similarity index 100% rename from Calibration/IsolatedParticles/test/proto_runIsoTrackCalibration_cfg.py rename to Calibration/IsolatedParticles/test/python/proto_runIsoTrackCalibration_cfg.py diff --git a/Calibration/IsolatedParticles/test/proto_runIsoTrig_cfg.py b/Calibration/IsolatedParticles/test/python/proto_runIsoTrig_cfg.py similarity index 100% rename from Calibration/IsolatedParticles/test/proto_runIsoTrig_cfg.py rename to Calibration/IsolatedParticles/test/python/proto_runIsoTrig_cfg.py diff --git a/Calibration/IsolatedParticles/test/proto_runIsolatedGenParticles_cfg.py b/Calibration/IsolatedParticles/test/python/proto_runIsolatedGenParticles_cfg.py similarity index 100% rename from Calibration/IsolatedParticles/test/proto_runIsolatedGenParticles_cfg.py rename to Calibration/IsolatedParticles/test/python/proto_runIsolatedGenParticles_cfg.py diff --git a/Calibration/IsolatedParticles/test/proto_runIsolatedParticlesGeneratedJets_cfg.py b/Calibration/IsolatedParticles/test/python/proto_runIsolatedParticlesGeneratedJets_cfg.py similarity index 100% rename from Calibration/IsolatedParticles/test/proto_runIsolatedParticlesGeneratedJets_cfg.py rename to Calibration/IsolatedParticles/test/python/proto_runIsolatedParticlesGeneratedJets_cfg.py diff --git a/Calibration/IsolatedParticles/test/proto_runIsolatedTracksHcal_cfg.py b/Calibration/IsolatedParticles/test/python/proto_runIsolatedTracksHcal_cfg.py similarity index 95% rename from Calibration/IsolatedParticles/test/proto_runIsolatedTracksHcal_cfg.py rename to Calibration/IsolatedParticles/test/python/proto_runIsolatedTracksHcal_cfg.py index 6bbd29824d25f..95d2286106140 100644 --- a/Calibration/IsolatedParticles/test/proto_runIsolatedTracksHcal_cfg.py +++ b/Calibration/IsolatedParticles/test/python/proto_runIsolatedTracksHcal_cfg.py @@ -4,8 +4,8 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 10 -process.MessageLogger.categories.append('L1GtTrigReport') -process.MessageLogger.categories.append('HLTrigReport') +process.MessageLogger.L1GtTrigReport=dict() +process.MessageLogger.HLTrigReport=dict() process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(False) diff --git a/Calibration/IsolatedParticles/test/proto_runIsolatedTracksNxNData_cfg.py b/Calibration/IsolatedParticles/test/python/proto_runIsolatedTracksNxNData_cfg.py similarity index 97% rename from Calibration/IsolatedParticles/test/proto_runIsolatedTracksNxNData_cfg.py rename to Calibration/IsolatedParticles/test/python/proto_runIsolatedTracksNxNData_cfg.py index 6c543119127fb..00b6b784ff0cc 100644 --- a/Calibration/IsolatedParticles/test/proto_runIsolatedTracksNxNData_cfg.py +++ b/Calibration/IsolatedParticles/test/python/proto_runIsolatedTracksNxNData_cfg.py @@ -5,8 +5,8 @@ process.load("RecoLocalCalo.EcalRecAlgos.EcalSeverityLevelESProducer_cfi") process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 1000000 -process.MessageLogger.categories.append('L1GtTrigReport') -process.MessageLogger.categories.append('HLTrigReport') +process.MessageLogger.L1GtTrigReport=dict() +process.MessageLogger.HLTrigReport=dict() process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) diff --git a/Calibration/IsolatedParticles/test/proto_runIsolatedTracksNxNNzsData_cfg.py b/Calibration/IsolatedParticles/test/python/proto_runIsolatedTracksNxNNzsData_cfg.py similarity index 100% rename from Calibration/IsolatedParticles/test/proto_runIsolatedTracksNxNNzsData_cfg.py rename to Calibration/IsolatedParticles/test/python/proto_runIsolatedTracksNxNNzsData_cfg.py diff --git a/Calibration/IsolatedParticles/test/proto_runStudyCaloGen_cfg.py b/Calibration/IsolatedParticles/test/python/proto_runStudyCaloGen_cfg.py similarity index 100% rename from Calibration/IsolatedParticles/test/proto_runStudyCaloGen_cfg.py rename to Calibration/IsolatedParticles/test/python/proto_runStudyCaloGen_cfg.py diff --git a/Calibration/IsolatedParticles/test/python/proto_runStudyCaloResponseMC_cfg.py b/Calibration/IsolatedParticles/test/python/proto_runStudyCaloResponseMC_cfg.py new file mode 100644 index 0000000000000..8c177761b91de --- /dev/null +++ b/Calibration/IsolatedParticles/test/python/proto_runStudyCaloResponseMC_cfg.py @@ -0,0 +1,36 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("StudyCaloResponse") + +process.load("Calibration.IsolatedParticles.studyCaloResponse_cfi") +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff') +process.load("RecoLocalCalo.EcalRecAlgos.EcalSeverityLevelESProducer_cfi") +process.load("FWCore.MessageService.MessageLogger_cfi") +process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.autoCond import autoCond +process.GlobalTag.globaltag=autoCond['run2_mc'] + +if hasattr(process,'MessageLogger'): + process.MessageLogger.IsoTrack=dict() + +process.MessageLogger.cerr.FwkReport.reportEvery = cms.untracked.int32(10000) +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100) ) +process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) + +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring( +'/store/mc/RunIILowPUAutumn18MiniAOD/QCD_Pt-15to7000_TuneCP5_Flat2018_13TeV_pythia8/MINIAODSIM/NoPU_102X_upgrade2018_realistic_v15-v2/00000/0227F562-C82C-814E-9D51-F8895E245DD5.root',) + ) + +process.studyCaloResponse.verbosity = 110 +process.studyCaloResponse.vetoMuon = True +process.studyCaloResponse.vetoEcal = True +process.studyCaloResponse.triggers = [] + +process.TFileService = cms.Service("TFileService", + fileName = cms.string('studyCaloResponseMC.root') + ) + +process.p = cms.Path(process.studyCaloResponse) diff --git a/Calibration/IsolatedParticles/test/proto_runStudyCaloResponse_cfg.py b/Calibration/IsolatedParticles/test/python/proto_runStudyCaloResponse_cfg.py similarity index 100% rename from Calibration/IsolatedParticles/test/proto_runStudyCaloResponse_cfg.py rename to Calibration/IsolatedParticles/test/python/proto_runStudyCaloResponse_cfg.py diff --git a/Calibration/IsolatedParticles/test/proto_runStudyTriggerHLT_cfg.py b/Calibration/IsolatedParticles/test/python/proto_runStudyTriggerHLT_cfg.py similarity index 100% rename from Calibration/IsolatedParticles/test/proto_runStudyTriggerHLT_cfg.py rename to Calibration/IsolatedParticles/test/python/proto_runStudyTriggerHLT_cfg.py diff --git a/Calibration/IsolatedParticles/test/runCaloPropagationTest_cfg.py b/Calibration/IsolatedParticles/test/python/runCaloPropagationTest_cfg.py similarity index 100% rename from Calibration/IsolatedParticles/test/runCaloPropagationTest_cfg.py rename to Calibration/IsolatedParticles/test/python/runCaloPropagationTest_cfg.py diff --git a/Calibration/LumiAlCaRecoProducers/python/ALCARECOAlCaPCCRandom_cff.py b/Calibration/LumiAlCaRecoProducers/python/ALCARECOAlCaPCCRandom_cff.py index 8185c8cfbb089..149eb1d7f3854 100644 --- a/Calibration/LumiAlCaRecoProducers/python/ALCARECOAlCaPCCRandom_cff.py +++ b/Calibration/LumiAlCaRecoProducers/python/ALCARECOAlCaPCCRandom_cff.py @@ -10,12 +10,14 @@ ) from EventFilter.SiPixelRawToDigi.SiPixelRawToDigi_cfi import siPixelDigis -siPixelDigisForLumiR = siPixelDigis.clone() -siPixelDigisForLumiR.InputLabel = cms.InputTag("hltFEDSelectorLumiPixels") +siPixelDigisForLumiR = siPixelDigis.cpu.clone( + InputLabel = "hltFEDSelectorLumiPixels" +) from RecoLocalTracker.SiPixelClusterizer.SiPixelClusterizerPreSplitting_cfi import siPixelClustersPreSplitting -siPixelClustersForLumiR = siPixelClustersPreSplitting.clone() -siPixelClustersForLumiR.src = cms.InputTag("siPixelDigisForLumiR") +siPixelClustersForLumiR = siPixelClustersPreSplitting.cpu.clone( + src = "siPixelDigisForLumiR" +) from Calibration.LumiAlCaRecoProducers.alcaPCCProducer_cfi import alcaPCCProducer alcaPCCProducerRandom = alcaPCCProducer.clone() diff --git a/Calibration/LumiAlCaRecoProducers/python/ALCARECOAlCaPCCZeroBias_cff.py b/Calibration/LumiAlCaRecoProducers/python/ALCARECOAlCaPCCZeroBias_cff.py index 0ef9e074cc817..cce52734afeb0 100644 --- a/Calibration/LumiAlCaRecoProducers/python/ALCARECOAlCaPCCZeroBias_cff.py +++ b/Calibration/LumiAlCaRecoProducers/python/ALCARECOAlCaPCCZeroBias_cff.py @@ -10,12 +10,14 @@ ) from EventFilter.SiPixelRawToDigi.SiPixelRawToDigi_cfi import siPixelDigis -siPixelDigisForLumiZB = siPixelDigis.clone() -siPixelDigisForLumiZB.InputLabel = cms.InputTag("hltFEDSelectorLumiPixels") +siPixelDigisForLumiZB = siPixelDigis.cpu.clone( + InputLabel = "hltFEDSelectorLumiPixels" +) from RecoLocalTracker.SiPixelClusterizer.SiPixelClusterizerPreSplitting_cfi import siPixelClustersPreSplitting -siPixelClustersForLumiZB = siPixelClustersPreSplitting.clone() -siPixelClustersForLumiZB.src = cms.InputTag("siPixelDigisForLumiZB") +siPixelClustersForLumiZB = siPixelClustersPreSplitting.cpu.clone( + src = "siPixelDigisForLumiZB" +) from Calibration.LumiAlCaRecoProducers.alcaPCCProducer_cfi import alcaPCCProducer alcaPCCProducerZeroBias = alcaPCCProducer.clone() diff --git a/Calibration/LumiAlCaRecoProducers/python/ALCARECOLumiPixels_cff.py b/Calibration/LumiAlCaRecoProducers/python/ALCARECOLumiPixels_cff.py index d88e1d4c27506..25c7e5e60cb26 100644 --- a/Calibration/LumiAlCaRecoProducers/python/ALCARECOLumiPixels_cff.py +++ b/Calibration/LumiAlCaRecoProducers/python/ALCARECOLumiPixels_cff.py @@ -9,12 +9,14 @@ ) from EventFilter.SiPixelRawToDigi.SiPixelRawToDigi_cfi import siPixelDigis -siPixelDigisForLumi = siPixelDigis.clone() -siPixelDigisForLumi.InputLabel = cms.InputTag("hltFEDSelectorLumiPixels") +siPixelDigisForLumi = siPixelDigis.cpu.clone( + InputLabel = "hltFEDSelectorLumiPixels" +) from RecoLocalTracker.SiPixelClusterizer.SiPixelClusterizerPreSplitting_cfi import siPixelClustersPreSplitting -siPixelClustersForLumi = siPixelClustersPreSplitting.clone() -siPixelClustersForLumi.src = cms.InputTag("siPixelDigisForLumi") +siPixelClustersForLumi = siPixelClustersPreSplitting.cpu.clone( + src = "siPixelDigisForLumi" +) # Sequence # seqALCARECOLumiPixels = cms.Sequence(ALCARECOLumiPixelsHLT + siPixelDigisForLumi + siPixelClustersForLumi) diff --git a/Calibration/LumiAlCaRecoProducers/test/PCC_Random_Event_Integrator_cfg.py b/Calibration/LumiAlCaRecoProducers/test/PCC_Random_Event_Integrator_cfg.py index cdf5658f0bd09..6f7764abeaf01 100644 --- a/Calibration/LumiAlCaRecoProducers/test/PCC_Random_Event_Integrator_cfg.py +++ b/Calibration/LumiAlCaRecoProducers/test/PCC_Random_Event_Integrator_cfg.py @@ -121,78 +121,39 @@ process.ALCARECOStreamPromptCalibProdOutPath = cms.EndPath(process.ALCARECOStreamPromptCalibProdPCC) process.MessageLogger = cms.Service("MessageLogger", - categories = cms.untracked.vstring('FwkJob', - 'FwkReport', - 'FwkSummary', - 'Root_NoDictionary'), cerr = cms.untracked.PSet( FwkJob = cms.untracked.PSet( - limit = cms.untracked.int32(0), - optionalPSet = cms.untracked.bool(True) + limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(10000000), - optionalPSet = cms.untracked.bool(True), reportEvery = cms.untracked.int32(100000) ), FwkSummary = cms.untracked.PSet( limit = cms.untracked.int32(10000000), - optionalPSet = cms.untracked.bool(True), reportEvery = cms.untracked.int32(1) ), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), Root_NoDictionary = cms.untracked.PSet( - limit = cms.untracked.int32(0), - optionalPSet = cms.untracked.bool(True) + limit = cms.untracked.int32(0) ), default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) ), noTimeStamps = cms.untracked.bool(False), - optionalPSet = cms.untracked.bool(True), - threshold = cms.untracked.string('INFO') - ), - cerr_stats = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), - output = cms.untracked.string('cerr'), - threshold = cms.untracked.string('WARNING') - ), - cout = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) + threshold = cms.untracked.string('INFO'), + enableStatistics = cms.untracked.bool(True), + statisticsThreshold = cms.untracked.string('WARNING') ), debugModules = cms.untracked.vstring(), - debugs = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ), default = cms.untracked.PSet( ), - destinations = cms.untracked.vstring('warnings', - 'errors', - 'infos', - 'debugs', - 'cout', - 'cerr'), - errors = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ), - infos = cms.untracked.PSet( - Root_NoDictionary = cms.untracked.PSet( - limit = cms.untracked.int32(0), - optionalPSet = cms.untracked.bool(True) - ), - optionalPSet = cms.untracked.bool(True), - placeholder = cms.untracked.bool(True) - ), - statistics = cms.untracked.vstring('cerr_stats'), suppressDebug = cms.untracked.vstring(), suppressInfo = cms.untracked.vstring(), - suppressWarning = cms.untracked.vstring(), - warnings = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ) + suppressWarning = cms.untracked.vstring() ) #added line for additional output summary ` process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) diff --git a/Calibration/LumiAlCaRecoProducers/test/PCC_Random_cfg.py b/Calibration/LumiAlCaRecoProducers/test/PCC_Random_cfg.py index 5f4c5bb6673dd..d62c9a5be3963 100644 --- a/Calibration/LumiAlCaRecoProducers/test/PCC_Random_cfg.py +++ b/Calibration/LumiAlCaRecoProducers/test/PCC_Random_cfg.py @@ -116,78 +116,39 @@ process.ALCARECOStreamPromptCalibProdOutPath = cms.EndPath(process.ALCARECOStreamPromptCalibProdPCC) process.MessageLogger = cms.Service("MessageLogger", - categories = cms.untracked.vstring('FwkJob', - 'FwkReport', - 'FwkSummary', - 'Root_NoDictionary'), cerr = cms.untracked.PSet( FwkJob = cms.untracked.PSet( - limit = cms.untracked.int32(0), - optionalPSet = cms.untracked.bool(True) + limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(10000000), - optionalPSet = cms.untracked.bool(True), reportEvery = cms.untracked.int32(100000) ), FwkSummary = cms.untracked.PSet( limit = cms.untracked.int32(10000000), - optionalPSet = cms.untracked.bool(True), reportEvery = cms.untracked.int32(1) ), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), Root_NoDictionary = cms.untracked.PSet( - limit = cms.untracked.int32(0), - optionalPSet = cms.untracked.bool(True) + limit = cms.untracked.int32(0) ), default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) ), noTimeStamps = cms.untracked.bool(False), - optionalPSet = cms.untracked.bool(True), - threshold = cms.untracked.string('INFO') - ), - cerr_stats = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), - output = cms.untracked.string('cerr'), - threshold = cms.untracked.string('WARNING') - ), - cout = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) + threshold = cms.untracked.string('INFO'), + enableStatistics = cms.untracked.bool(True), + statisticsThreshold = cms.untracked.string('WARNING') ), debugModules = cms.untracked.vstring(), - debugs = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ), default = cms.untracked.PSet( ), - destinations = cms.untracked.vstring('warnings', - 'errors', - 'infos', - 'debugs', - 'cout', - 'cerr'), - errors = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ), - infos = cms.untracked.PSet( - Root_NoDictionary = cms.untracked.PSet( - limit = cms.untracked.int32(0), - optionalPSet = cms.untracked.bool(True) - ), - optionalPSet = cms.untracked.bool(True), - placeholder = cms.untracked.bool(True) - ), - statistics = cms.untracked.vstring('cerr_stats'), suppressDebug = cms.untracked.vstring(), suppressInfo = cms.untracked.vstring(), - suppressWarning = cms.untracked.vstring(), - warnings = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ) + suppressWarning = cms.untracked.vstring() ) #added line for additional output summary ` process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) diff --git a/Calibration/LumiAlCaRecoProducers/test/PCC_ZeroBias_cfg.py b/Calibration/LumiAlCaRecoProducers/test/PCC_ZeroBias_cfg.py index c07d275a71135..394c1b7856688 100644 --- a/Calibration/LumiAlCaRecoProducers/test/PCC_ZeroBias_cfg.py +++ b/Calibration/LumiAlCaRecoProducers/test/PCC_ZeroBias_cfg.py @@ -120,23 +120,16 @@ process.ALCARECOStreamPromptCalibProdOutPath = cms.EndPath(process.ALCARECOStreamPromptCalibProdPCC) process.MessageLogger = cms.Service("MessageLogger", - categories = cms.untracked.vstring('FwkJob', - 'FwkReport', - 'FwkSummary', - 'Root_NoDictionary'), cerr = cms.untracked.PSet( FwkJob = cms.untracked.PSet( - limit = cms.untracked.int32(0), - optionalPSet = cms.untracked.bool(True) + limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(10000000), - optionalPSet = cms.untracked.bool(True), reportEvery = cms.untracked.int32(10000) ), FwkSummary = cms.untracked.PSet( limit = cms.untracked.int32(10000000), - optionalPSet = cms.untracked.bool(True), reportEvery = cms.untracked.int32(1) ), INFO = cms.untracked.PSet( @@ -144,54 +137,22 @@ ), Root_NoDictionary = cms.untracked.PSet( limit = cms.untracked.int32(0), - optionalPSet = cms.untracked.bool(True) ), default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) ), noTimeStamps = cms.untracked.bool(False), - optionalPSet = cms.untracked.bool(True), - threshold = cms.untracked.string('INFO') - ), - cerr_stats = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), - output = cms.untracked.string('cerr'), - threshold = cms.untracked.string('WARNING') - ), - cout = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) + threshold = cms.untracked.string('INFO'), + enableStatistics = cms.untracked.bool(True), + statisticsThreshold = cms.untracked.string('WARNING') ), debugModules = cms.untracked.vstring(), - debugs = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ), default = cms.untracked.PSet( ), - destinations = cms.untracked.vstring('warnings', - 'errors', - 'infos', - 'debugs', - 'cout', - 'cerr'), - errors = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ), - infos = cms.untracked.PSet( - Root_NoDictionary = cms.untracked.PSet( - limit = cms.untracked.int32(0), - optionalPSet = cms.untracked.bool(True) - ), - optionalPSet = cms.untracked.bool(True), - placeholder = cms.untracked.bool(True) - ), - statistics = cms.untracked.vstring('cerr_stats'), suppressDebug = cms.untracked.vstring(), suppressInfo = cms.untracked.vstring(), - suppressWarning = cms.untracked.vstring(), - warnings = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ) + suppressWarning = cms.untracked.vstring() ) #added line for additional output summary ` process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) diff --git a/Calibration/LumiAlCaRecoProducers/test/raw_ZeroBias_cfg.py b/Calibration/LumiAlCaRecoProducers/test/raw_ZeroBias_cfg.py index 9de5f216f59ce..5d11ac45c1df6 100644 --- a/Calibration/LumiAlCaRecoProducers/test/raw_ZeroBias_cfg.py +++ b/Calibration/LumiAlCaRecoProducers/test/raw_ZeroBias_cfg.py @@ -65,78 +65,39 @@ process.ALCARECOStreamPromptCalibProdOutPath = cms.EndPath(process.ALCARECOStreamPromptCalibProdPCC) process.MessageLogger = cms.Service("MessageLogger", - categories = cms.untracked.vstring('FwkJob', - 'FwkReport', - 'FwkSummary', - 'Root_NoDictionary'), cerr = cms.untracked.PSet( FwkJob = cms.untracked.PSet( - limit = cms.untracked.int32(0), - optionalPSet = cms.untracked.bool(True) + limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(10000000), - optionalPSet = cms.untracked.bool(True), reportEvery = cms.untracked.int32(1000000) ), FwkSummary = cms.untracked.PSet( limit = cms.untracked.int32(10000000), - optionalPSet = cms.untracked.bool(True), reportEvery = cms.untracked.int32(1000000) ), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), Root_NoDictionary = cms.untracked.PSet( - limit = cms.untracked.int32(0), - optionalPSet = cms.untracked.bool(True) + limit = cms.untracked.int32(0) ), default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) ), noTimeStamps = cms.untracked.bool(False), - optionalPSet = cms.untracked.bool(True), - threshold = cms.untracked.string('INFO') - ), - cerr_stats = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), - output = cms.untracked.string('cerr'), - threshold = cms.untracked.string('WARNING') - ), - cout = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) + threshold = cms.untracked.string('INFO'), + enableStatistics = cms.untracked.bool(True), + statisticsThreshold = cms.untracked.string('WARNING') ), debugModules = cms.untracked.vstring(), - debugs = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ), default = cms.untracked.PSet( ), - destinations = cms.untracked.vstring('warnings', - 'errors', - 'infos', - 'debugs', - 'cout', - 'cerr'), - errors = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ), - infos = cms.untracked.PSet( - Root_NoDictionary = cms.untracked.PSet( - limit = cms.untracked.int32(0), - optionalPSet = cms.untracked.bool(True) - ), - optionalPSet = cms.untracked.bool(True), - placeholder = cms.untracked.bool(True) - ), - statistics = cms.untracked.vstring('cerr_stats'), suppressDebug = cms.untracked.vstring(), suppressInfo = cms.untracked.vstring(), - suppressWarning = cms.untracked.vstring(), - warnings = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ) + suppressWarning = cms.untracked.vstring() ) process.PoolDBESSource = cms.ESSource("PoolDBESSource", diff --git a/Calibration/LumiAlCaRecoProducers/test/raw_corr_Random_cfg.py b/Calibration/LumiAlCaRecoProducers/test/raw_corr_Random_cfg.py index c1972acfca3ed..adc42e9ee62e8 100644 --- a/Calibration/LumiAlCaRecoProducers/test/raw_corr_Random_cfg.py +++ b/Calibration/LumiAlCaRecoProducers/test/raw_corr_Random_cfg.py @@ -77,80 +77,47 @@ # process.MessageLogger = cms.Service("MessageLogger", - categories = cms.untracked.vstring('FwkJob', - 'FwkReport', - 'FwkSummary', - 'Root_NoDictionary'), cerr = cms.untracked.PSet( FwkJob = cms.untracked.PSet( - limit = cms.untracked.int32(0), - optionalPSet = cms.untracked.bool(True) + limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(10000000), - optionalPSet = cms.untracked.bool(True), reportEvery = cms.untracked.int32(100000) ), FwkSummary = cms.untracked.PSet( limit = cms.untracked.int32(10000000), - optionalPSet = cms.untracked.bool(True), reportEvery = cms.untracked.int32(10000) ), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), Root_NoDictionary = cms.untracked.PSet( - limit = cms.untracked.int32(0), - optionalPSet = cms.untracked.bool(True) + limit = cms.untracked.int32(0) ), default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) ), noTimeStamps = cms.untracked.bool(False), - optionalPSet = cms.untracked.bool(True), - threshold = cms.untracked.string('INFO') - ), - cerr_stats = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), - output = cms.untracked.string('cerr'), - threshold = cms.untracked.string('WARNING') - ), - cout = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) + threshold = cms.untracked.string('INFO'), + enableStatistics = cms.untracked.bool(True), + statisticsThreshold = cms.untracked.string('WARNING') ), debugModules = cms.untracked.vstring(), - debugs = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ), default = cms.untracked.PSet( ), - destinations = cms.untracked.vstring('warnings', - 'errors', - 'infos', - 'debugs', - 'cout', - 'cerr'), - errors = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ), - infos = cms.untracked.PSet( - #Root_NoDictionary = cms.untracked.PSet( - # limit = cms.untracked.int32(0), - # optionalPSet = cms.untracked.bool(True) - #), - #optionalPSet = cms.untracked.bool(True), - #placeholder = cms.untracked.bool(True) - threshold = cms.untracked.string('INFO') + files = cms.untracked.PSet( + infos = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ), + warnings = cms.untracked.PSet( + threshold = cms.untracked.string('WARNING') + ) ), - statistics = cms.untracked.vstring('cerr_stats'), suppressDebug = cms.untracked.vstring(), suppressInfo = cms.untracked.vstring(), - suppressWarning = cms.untracked.vstring(), - warnings = cms.untracked.PSet( - #placeholder = cms.untracked.bool(True) - threshold = cms.untracked.string('WARNING') - ) + suppressWarning = cms.untracked.vstring() ) #added line for additional output summary ` process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True)) diff --git a/Calibration/TkAlCaRecoProducers/interface/AlcaBeamSpotFromDB.h b/Calibration/TkAlCaRecoProducers/interface/AlcaBeamSpotFromDB.h index 364549089db6f..c4d7ca238a465 100644 --- a/Calibration/TkAlCaRecoProducers/interface/AlcaBeamSpotFromDB.h +++ b/Calibration/TkAlCaRecoProducers/interface/AlcaBeamSpotFromDB.h @@ -19,6 +19,8 @@ ________________________________________________________________**/ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDProducer.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "CondFormats/BeamSpotObjects/interface/BeamSpotObjects.h" +#include "CondFormats/DataRecord/interface/BeamSpotObjectsRcd.h" class AlcaBeamSpotFromDB : public edm::one::EDProducer { public: @@ -26,6 +28,7 @@ class AlcaBeamSpotFromDB : public edm::one::EDProducer beamSpotToken_; void beginJob() final; void endLuminosityBlockProduce(edm::LuminosityBlock &lumiSeg, const edm::EventSetup &iSetup) final; void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) final; diff --git a/Calibration/TkAlCaRecoProducers/interface/AlcaBeamSpotHarvester.h b/Calibration/TkAlCaRecoProducers/interface/AlcaBeamSpotHarvester.h index 29aa0d9906c68..3141ca7b00fab 100644 --- a/Calibration/TkAlCaRecoProducers/interface/AlcaBeamSpotHarvester.h +++ b/Calibration/TkAlCaRecoProducers/interface/AlcaBeamSpotHarvester.h @@ -7,28 +7,26 @@ * \author L. Uplegger F. Yumiceva - Fermilab */ #include "Calibration/TkAlCaRecoProducers/interface/AlcaBeamSpotManager.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "RecoVertex/BeamSpotProducer/interface/BeamSpotWrite2Txt.h" // #include "FWCore/ParameterSet/interface/ParameterSet.h" -class AlcaBeamSpotHarvester : public edm::EDAnalyzer { +class AlcaBeamSpotHarvester : public edm::one::EDAnalyzer<> { public: /// Constructor AlcaBeamSpotHarvester(const edm::ParameterSet &); /// Destructor - ~AlcaBeamSpotHarvester() override; + ~AlcaBeamSpotHarvester() override = default; // Operations - void beginJob(void) override; - void endJob(void) override; void analyze(const edm::Event &, const edm::EventSetup &) override; - void beginRun(const edm::Run &, const edm::EventSetup &) override; - void endRun(const edm::Run &, const edm::EventSetup &) override; - void beginLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) override; - void endLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) override; + void beginRun(const edm::Run &, const edm::EventSetup &); + void endRun(const edm::Run &, const edm::EventSetup &); + void beginLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &); + void endLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &); protected: private: diff --git a/Calibration/TkAlCaRecoProducers/plugins/AlcaBeamSpotFromDB.cc b/Calibration/TkAlCaRecoProducers/plugins/AlcaBeamSpotFromDB.cc index 80a56b9ef2b60..0486c3abbbab9 100644 --- a/Calibration/TkAlCaRecoProducers/plugins/AlcaBeamSpotFromDB.cc +++ b/Calibration/TkAlCaRecoProducers/plugins/AlcaBeamSpotFromDB.cc @@ -19,15 +19,12 @@ ________________________________________________________________**/ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ServiceRegistry/interface/Service.h" - -#include "CondFormats/BeamSpotObjects/interface/BeamSpotObjects.h" -#include "CondFormats/DataRecord/interface/BeamSpotObjectsRcd.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/IOVSyncValue.h" #include "FWCore/Framework/interface/LuminosityBlock.h" -AlcaBeamSpotFromDB::AlcaBeamSpotFromDB(const edm::ParameterSet &iConfig) { +AlcaBeamSpotFromDB::AlcaBeamSpotFromDB(const edm::ParameterSet &iConfig) + : beamSpotToken_(esConsumes()) { produces("alcaBeamSpot"); } @@ -39,9 +36,7 @@ void AlcaBeamSpotFromDB::produce(edm::Event &iEvent, const edm::EventSetup &iSet //-------------------------------------------------------------------------------------------------- void AlcaBeamSpotFromDB::endLuminosityBlockProduce(edm::LuminosityBlock &lumiSeg, const edm::EventSetup &iSetup) { // read DB object - edm::ESHandle beamhandle; - iSetup.get().get(beamhandle); - const BeamSpotObjects *spotDB = beamhandle.product(); + const BeamSpotObjects *spotDB = &iSetup.getData(beamSpotToken_); // translate from BeamSpotObjects to reco::BeamSpot reco::BeamSpot::Point apoint(spotDB->GetX(), spotDB->GetY(), spotDB->GetZ()); diff --git a/Calibration/TkAlCaRecoProducers/plugins/AlcaBeamSpotHarvester.cc b/Calibration/TkAlCaRecoProducers/plugins/AlcaBeamSpotHarvester.cc index 4fcdd3d108748..d1a1408c72f07 100644 --- a/Calibration/TkAlCaRecoProducers/plugins/AlcaBeamSpotHarvester.cc +++ b/Calibration/TkAlCaRecoProducers/plugins/AlcaBeamSpotHarvester.cc @@ -8,7 +8,6 @@ #include "Calibration/TkAlCaRecoProducers/interface/AlcaBeamSpotHarvester.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/FileBlock.h" @@ -51,15 +50,6 @@ AlcaBeamSpotHarvester::AlcaBeamSpotHarvester(const edm::ParameterSet &iConfig) .getUntrackedParameter("TxtFileName")), theAlcaBeamSpotManager_(iConfig, consumesCollector()) {} -//-------------------------------------------------------------------------------------------------- -AlcaBeamSpotHarvester::~AlcaBeamSpotHarvester() {} - -//-------------------------------------------------------------------------------------------------- -void AlcaBeamSpotHarvester::beginJob() {} - -//-------------------------------------------------------------------------------------------------- -void AlcaBeamSpotHarvester::endJob() {} - //-------------------------------------------------------------------------------------------------- void AlcaBeamSpotHarvester::analyze(const edm::Event &iEvent, const edm::EventSetup &) { // edm::LogInfo("AlcaBeamSpotHarvester") diff --git a/Calibration/TkAlCaRecoProducers/plugins/AlcaBeamSpotProducer.cc b/Calibration/TkAlCaRecoProducers/plugins/AlcaBeamSpotProducer.cc index c90866c7e3335..46d9a27f51f55 100644 --- a/Calibration/TkAlCaRecoProducers/plugins/AlcaBeamSpotProducer.cc +++ b/Calibration/TkAlCaRecoProducers/plugins/AlcaBeamSpotProducer.cc @@ -23,7 +23,6 @@ #include "CondFormats/BeamSpotObjects/interface/BeamSpotObjects.h" #include "CondFormats/DataRecord/interface/BeamSpotObjectsRcd.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/LuminosityBlock.h" diff --git a/Calibration/TkAlCaRecoProducers/plugins/CalibrationTrackSelectorFromDetIdList.cc b/Calibration/TkAlCaRecoProducers/plugins/CalibrationTrackSelectorFromDetIdList.cc index 0c8c634c9b375..ebee011e06f49 100644 --- a/Calibration/TkAlCaRecoProducers/plugins/CalibrationTrackSelectorFromDetIdList.cc +++ b/Calibration/TkAlCaRecoProducers/plugins/CalibrationTrackSelectorFromDetIdList.cc @@ -54,6 +54,9 @@ class dso_hidden CalibrationTrackSelectorFromDetIdList final : public edm::strea std::vector::iterator hitsBegin, std::vector::iterator hitsEnd); + const edm::ESGetToken geometryToken_; + const edm::ESGetToken magFieldToken_; + std::vector detidsels_; bool m_verbose; @@ -62,7 +65,9 @@ class dso_hidden CalibrationTrackSelectorFromDetIdList final : public edm::strea }; CalibrationTrackSelectorFromDetIdList::CalibrationTrackSelectorFromDetIdList(const edm::ParameterSet &iConfig) - : detidsels_() { + : geometryToken_(esConsumes()), + magFieldToken_(esConsumes()), + detidsels_() { std::vector selconfigs = iConfig.getParameter>("selections"); for (std::vector::const_iterator selconfig = selconfigs.begin(); selconfig != selconfigs.end(); @@ -154,8 +159,8 @@ TrackCandidate CalibrationTrackSelectorFromDetIdList::makeCandidate( } void CalibrationTrackSelectorFromDetIdList::beginRun(edm::Run const &run, const edm::EventSetup &iSetup) { - iSetup.get().get(theGeometry); - iSetup.get().get(theMagField); + theGeometry = iSetup.getHandle(geometryToken_); + theMagField = iSetup.getHandle(magFieldToken_); if (m_verbose) { for (const auto &detidsel : detidsels_) { diff --git a/Calibration/TkAlCaRecoProducers/plugins/PCLMetadataWriter.cc b/Calibration/TkAlCaRecoProducers/plugins/PCLMetadataWriter.cc index 3d0c782b69b0c..08d56e4b2a2f0 100644 --- a/Calibration/TkAlCaRecoProducers/plugins/PCLMetadataWriter.cc +++ b/Calibration/TkAlCaRecoProducers/plugins/PCLMetadataWriter.cc @@ -1,28 +1,48 @@ - -/* - * See header file for a description of this class. +/** \class PCLMetadataWriter + * No description available. * * \author G. Cerminara - CERN */ -#include "Calibration/TkAlCaRecoProducers/plugins/PCLMetadataWriter.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - #include "CondCore/DBOutputService/interface/PoolDBOutputService.h" #include "CondFormats/Common/interface/DropBoxMetadata.h" #include "CondFormats/DataRecord/interface/DropBoxMetadataRcd.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/MessageLogger/interface/JobReport.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include +#include #include +class PCLMetadataWriter : public edm::one::EDAnalyzer<> { +public: + /// Constructor + PCLMetadataWriter(const edm::ParameterSet &); + + /// Destructor + ~PCLMetadataWriter() override = default; + + // Operations + void analyze(const edm::Event &, const edm::EventSetup &) override; + void beginRun(const edm::Run &, const edm::EventSetup &); + void endRun(const edm::Run &, const edm::EventSetup &); + +protected: +private: + const edm::ESGetToken dropBoxToken_; + bool readFromDB; + std::map> recordMap; +}; + using namespace std; using namespace edm; -PCLMetadataWriter::PCLMetadataWriter(const edm::ParameterSet &pSet) { +PCLMetadataWriter::PCLMetadataWriter(const edm::ParameterSet &pSet) + : dropBoxToken_(esConsumes()) { readFromDB = pSet.getParameter("readFromDB"); vector recordsToMap = pSet.getParameter>("recordsToMap"); @@ -48,8 +68,6 @@ PCLMetadataWriter::PCLMetadataWriter(const edm::ParameterSet &pSet) { } } -PCLMetadataWriter::~PCLMetadataWriter() {} - void PCLMetadataWriter::analyze(const edm::Event &event, const edm::EventSetup &eSetup) {} void PCLMetadataWriter::beginRun(const edm::Run &run, const edm::EventSetup &eSetup) {} @@ -59,10 +77,7 @@ void PCLMetadataWriter::endRun(const edm::Run &run, const edm::EventSetup &eSetu if (readFromDB) { // Read the objects - edm::ESHandle mdPayload; - eSetup.get().get(mdPayload); - - metadata = mdPayload.product(); + metadata = &eSetup.getData(dropBoxToken_); } // get the PoolDBOutputService diff --git a/Calibration/TkAlCaRecoProducers/plugins/PCLMetadataWriter.h b/Calibration/TkAlCaRecoProducers/plugins/PCLMetadataWriter.h deleted file mode 100644 index 7a123aff0a49e..0000000000000 --- a/Calibration/TkAlCaRecoProducers/plugins/PCLMetadataWriter.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef PCLMetadataWriter_H -#define PCLMetadataWriter_H - -/** \class PCLMetadataWriter - * No description available. - * - * \author G. Cerminara - CERN - */ - -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include -#include - -class PCLMetadataWriter : public edm::EDAnalyzer { -public: - /// Constructor - PCLMetadataWriter(const edm::ParameterSet &); - - /// Destructor - ~PCLMetadataWriter() override; - - // Operations - // virtual void beginJob (void); - // virtual void endJob (void); - void analyze(const edm::Event &, const edm::EventSetup &) override; - void beginRun(const edm::Run &, const edm::EventSetup &) override; - void endRun(const edm::Run &, const edm::EventSetup &) override; - // virtual void beginLuminosityBlock(const edm::LuminosityBlock&, const - // edm::EventSetup&); virtual void endLuminosityBlock (const - // edm::LuminosityBlock&, const edm::EventSetup&); - -protected: -private: - bool readFromDB; - std::map> recordMap; -}; -#endif diff --git a/Calibration/TkAlCaRecoProducers/src/AlcaBeamSpotManager.cc b/Calibration/TkAlCaRecoProducers/src/AlcaBeamSpotManager.cc index 9c14de9691c05..944a3b3eb4a6f 100644 --- a/Calibration/TkAlCaRecoProducers/src/AlcaBeamSpotManager.cc +++ b/Calibration/TkAlCaRecoProducers/src/AlcaBeamSpotManager.cc @@ -6,7 +6,6 @@ #include "Calibration/TkAlCaRecoProducers/interface/AlcaBeamSpotManager.h" #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include diff --git a/Calibration/TkAlCaRecoProducers/src/CalibrationTrackSelector.cc b/Calibration/TkAlCaRecoProducers/src/CalibrationTrackSelector.cc index f36ddcbf7ecfa..c3dff27cae74e 100644 --- a/Calibration/TkAlCaRecoProducers/src/CalibrationTrackSelector.cc +++ b/Calibration/TkAlCaRecoProducers/src/CalibrationTrackSelector.cc @@ -231,9 +231,9 @@ bool CalibrationTrackSelector::isHit2D(const TrackingRecHit &hit) const { else if (dynamic_cast(&hit)) return false; // crazy hit... else { - edm::LogError("UnkownType") << "@SUB=CalibrationTrackSelector::isHit2D" - << "Tracker hit not in pixel and neither SiStripRecHit2D nor " - << "SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D."; + edm::LogError("UnknownType") << "@SUB=CalibrationTrackSelector::isHit2D" + << "Tracker hit not in pixel and neither SiStripRecHit2D nor " + << "SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D."; return false; } } diff --git a/Calibration/TkAlCaRecoProducers/test/Alca_BeamFit_Workflow.py b/Calibration/TkAlCaRecoProducers/test/Alca_BeamFit_Workflow.py index 5eaf1a5c95334..37c18def6cccf 100644 --- a/Calibration/TkAlCaRecoProducers/test/Alca_BeamFit_Workflow.py +++ b/Calibration/TkAlCaRecoProducers/test/Alca_BeamFit_Workflow.py @@ -3,8 +3,8 @@ process = cms.Process("alcaBeamSpotWorkflow") # initialize MessageLogger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories = ["AlcaBeamSpotProducer"] -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) + +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), default = cms.untracked.PSet( @@ -15,7 +15,7 @@ limit = cms.untracked.int32(0) ) ) -#process.MessageLogger.statistics.append('cout') +#process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True) process.load("Calibration.TkAlCaRecoProducers.AlcaBeamSpotProducer_cff") diff --git a/Calibration/TkAlCaRecoProducers/test/Alca_BeamSpot_Harvester.py b/Calibration/TkAlCaRecoProducers/test/Alca_BeamSpot_Harvester.py index a9988cb54e914..a26d72110ecd2 100644 --- a/Calibration/TkAlCaRecoProducers/test/Alca_BeamSpot_Harvester.py +++ b/Calibration/TkAlCaRecoProducers/test/Alca_BeamSpot_Harvester.py @@ -18,8 +18,8 @@ # initialize MessageLogger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories = ["AlcaBeamSpotHarvester","AlcaBeamSpotManager"] -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) + +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), default = cms.untracked.PSet( @@ -34,7 +34,7 @@ limit = cms.untracked.int32(0) ) ) -#process.MessageLogger.statistics.append('cout') +#process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True) process.load("Calibration.TkAlCaRecoProducers.AlcaBeamSpotHarvester_cff") diff --git a/Calibration/Tools/bin/coeffCompare.cpp b/Calibration/Tools/bin/coeffCompare.cpp index 4f6fc7beaef6d..9060d77936bda 100644 --- a/Calibration/Tools/bin/coeffCompare.cpp +++ b/Calibration/Tools/bin/coeffCompare.cpp @@ -176,9 +176,6 @@ int main(int argc, char* argv[]) { int rad = static_cast(sqrt((ix - 50) * (ix - 50) + (iy - 50) * (iy - 50))); if (rad < EEradStart || rad > EEradEnd) continue; - double phiTemp = atan2(iy - 50, ix - 50); - if (phiTemp < 0) - phiTemp += 2 * PI_GRECO; if (!EEDetId::validDetId(ix, iy, -1)) continue; EEDetId det = EEDetId(ix, iy, -1, EEDetId::XYMODE); diff --git a/Calibration/Tools/bin/coeffCompareInvEE.cpp b/Calibration/Tools/bin/coeffCompareInvEE.cpp index 579b530bdc41c..adc671dd2dbd8 100644 --- a/Calibration/Tools/bin/coeffCompareInvEE.cpp +++ b/Calibration/Tools/bin/coeffCompareInvEE.cpp @@ -117,9 +117,6 @@ int main(int argc, char* argv[]) { int rad = static_cast(sqrt((ix - 50) * (ix - 50) + (iy - 50) * (iy - 50))); if (rad < EEradStart || rad > EEradEnd) continue; - double phiTemp = atan2(iy - 50, ix - 50); - if (phiTemp < 0) - phiTemp += 2 * PI_GRECO; if (!EEDetId::validDetId(ix, iy, -1)) continue; EEDetId det = EEDetId(ix, iy, -1, EEDetId::XYMODE); diff --git a/Calibration/Tools/plugins/SingleEleCalibSelector.cc b/Calibration/Tools/plugins/SingleEleCalibSelector.cc index 1b00d9db1afb2..9e263cb34a10a 100644 --- a/Calibration/Tools/plugins/SingleEleCalibSelector.cc +++ b/Calibration/Tools/plugins/SingleEleCalibSelector.cc @@ -2,6 +2,7 @@ #include "CommonTools/UtilAlgos/interface/ParameterAdapter.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" // Geometry #include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" diff --git a/Calibration/Tools/src/ZIterativeAlgorithmWithFit.cc b/Calibration/Tools/src/ZIterativeAlgorithmWithFit.cc index a67542d5504c7..463907bd29132 100644 --- a/Calibration/Tools/src/ZIterativeAlgorithmWithFit.cc +++ b/Calibration/Tools/src/ZIterativeAlgorithmWithFit.cc @@ -365,13 +365,8 @@ void ZIterativeAlgorithmWithFit::gausfit( double sigma = gausa->GetParameter(2); double nor = gausa->GetParameter(0); - double xmi = p1 - 5 * sigma; - double xma = p1 + 5 * sigma; + double xmi, xma, xmin_fit, xmax_fit; double chi2 = 100; - - double xmin_fit = p1 - nsigmalow * sigma; - double xmax_fit = p1 + nsigmaup * sigma; - int iter = 0; while ((chi2 > 1. && iter < 5) || iter < 2) { diff --git a/CaloOnlineTools/EcalTools/python/ecalHexDisplay_cfg.py b/CaloOnlineTools/EcalTools/python/ecalHexDisplay_cfg.py index e8f8b8507960f..37fe29e5f776c 100644 --- a/CaloOnlineTools/EcalTools/python/ecalHexDisplay_cfg.py +++ b/CaloOnlineTools/EcalTools/python/ecalHexDisplay_cfg.py @@ -18,13 +18,16 @@ process.counter = cms.OutputModule("AsciiOutputModule") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), default = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) - ), - destinations = cms.untracked.vstring('cout') + ), + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ) ) process.p = cms.Path(process.hexDump) diff --git a/CaloOnlineTools/EcalTools/python/ecalURecHitHists_cfg.py b/CaloOnlineTools/EcalTools/python/ecalURecHitHists_cfg.py index f6bae51ec476f..44ac59a39a0de 100644 --- a/CaloOnlineTools/EcalTools/python/ecalURecHitHists_cfg.py +++ b/CaloOnlineTools/EcalTools/python/ecalURecHitHists_cfg.py @@ -32,12 +32,14 @@ ) process.MessageLogger = cms.Service("MessageLogger", - suppressInfo = cms.untracked.vstring('ecalEBunpacker'), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') ), - categories = cms.untracked.vstring('EcalURecHitHists'), - destinations = cms.untracked.vstring('cout') + suppressInfo = cms.untracked.vstring('ecalEBunpacker') ) process.p = cms.Path(process.ecalEBunpacker*process.ecalUncalibHit*process.ecalURecHitHists) diff --git a/CaloOnlineTools/HcalOnlineDb/interface/HcalLutGenerator.h b/CaloOnlineTools/HcalOnlineDb/interface/HcalLutGenerator.h index 3ce2c1cf0d3a5..7c80b402c7154 100644 --- a/CaloOnlineTools/HcalOnlineDb/interface/HcalLutGenerator.h +++ b/CaloOnlineTools/HcalOnlineDb/interface/HcalLutGenerator.h @@ -5,6 +5,12 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "CalibFormats/HcalObjects/interface/HcalTPGRecord.h" +#include "CalibFormats/HcalObjects/interface/HcalTPGCoder.h" +#include "CalibFormats/HcalObjects/interface/HcalDbService.h" +#include "CalibFormats/HcalObjects/interface/HcalDbRecord.h" +#include "CondFormats/HcalObjects/interface/HcalChannelQuality.h" +#include "CondFormats/DataRecord/interface/HcalChannelQualityRcd.h" class HcalLutGenerator : public edm::EDAnalyzer { public: @@ -17,6 +23,9 @@ class HcalLutGenerator : public edm::EDAnalyzer { std::string _tag; std::string _lin_file; uint32_t _status_word_to_mask; + edm::ESGetToken tok_inCoder_; + edm::ESGetToken tok_dbservice_; + edm::ESGetToken tok_hcalChStatus_; }; #endif diff --git a/CaloOnlineTools/HcalOnlineDb/interface/LMap.h b/CaloOnlineTools/HcalOnlineDb/interface/LMap.h index f8eab70495073..6c92a29ae357a 100644 --- a/CaloOnlineTools/HcalOnlineDb/interface/LMap.h +++ b/CaloOnlineTools/HcalOnlineDb/interface/LMap.h @@ -23,7 +23,7 @@ #include #include #include - +#include #include "CaloOnlineTools/HcalOnlineDb/interface/ConfigurationDatabase.hh" #include "DataFormats/HcalDetId/interface/HcalSubdetector.h" #include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h" diff --git a/CaloOnlineTools/HcalOnlineDb/plugins/HcalLutAnalyzer.cc b/CaloOnlineTools/HcalOnlineDb/plugins/HcalLutAnalyzer.cc index b180f24b6a8f9..1605a68e18802 100644 --- a/CaloOnlineTools/HcalOnlineDb/plugins/HcalLutAnalyzer.cc +++ b/CaloOnlineTools/HcalOnlineDb/plugins/HcalLutAnalyzer.cc @@ -27,7 +27,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "CalibCalorimetry/HcalTPGAlgos/interface/XMLProcessor.h" @@ -70,6 +69,8 @@ class HcalLutAnalyzer : public edm::one::EDAnalyzer { double Ymax; double Pmin; double Pmax; + + edm::ESGetToken tok_htopo_; }; HcalLutAnalyzer::HcalLutAnalyzer(const edm::ParameterSet& iConfig) { @@ -87,13 +88,14 @@ HcalLutAnalyzer::HcalLutAnalyzer(const edm::ParameterSet& iConfig) { Ymax = iConfig.getParameter("Ymax"); Pmin = iConfig.getParameter("Pmin"); Pmax = iConfig.getParameter("Pmax"); + + tok_htopo_ = esConsumes(); } void HcalLutAnalyzer::analyze(const edm::Event&, const edm::EventSetup& iSetup) { using namespace std; - edm::ESHandle topology; - iSetup.get().get(topology); + const HcalTopology* topology = &iSetup.getData(tok_htopo_); typedef std::vector vstring; typedef std::map LUTINPUT; diff --git a/CaloOnlineTools/HcalOnlineDb/src/HcalLutGenerator.cc b/CaloOnlineTools/HcalOnlineDb/src/HcalLutGenerator.cc index ce87219584056..146cd6f00966a 100644 --- a/CaloOnlineTools/HcalOnlineDb/src/HcalLutGenerator.cc +++ b/CaloOnlineTools/HcalOnlineDb/src/HcalLutGenerator.cc @@ -2,11 +2,9 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/HcalDetId/interface/HcalDetId.h" -#include "CalibFormats/HcalObjects/interface/HcalTPGRecord.h" -#include "CalibFormats/HcalObjects/interface/HcalTPGCoder.h" +#include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h" #include "CaloOnlineTools/HcalOnlineDb/interface/HcalLutManager.h" #include "CalibFormats/CaloTPG/interface/CaloTPGRecord.h" -#include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h" #include "CaloOnlineTools/HcalOnlineDb/interface/LMap.h" @@ -19,13 +17,17 @@ HcalLutGenerator::HcalLutGenerator(const edm::ParameterSet& iConfig) { _tag = iConfig.getParameter("tag"); _lin_file = iConfig.getParameter("HO_master_file"); _status_word_to_mask = iConfig.getParameter("status_word_to_mask"); + tok_inCoder_ = esConsumes(); + tok_dbservice_ = esConsumes(); + tok_hcalChStatus_ = esConsumes(edm::ESInputTag("", "withTopo")); } HcalLutGenerator::~HcalLutGenerator() {} void HcalLutGenerator::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - edm::ESHandle inputCoder; - iSetup.get().get(inputCoder); + const HcalTPGCoder* inputCoder = &iSetup.getData(tok_inCoder_); + const HcalDbService* hcalcond = &iSetup.getData(tok_dbservice_); + const HcalChannelQuality* _cq = &iSetup.getData(tok_hcalChStatus_); edm::ESHandle outTranscoder; iSetup.get().get(outTranscoder); @@ -33,14 +35,7 @@ void HcalLutGenerator::analyze(const edm::Event& iEvent, const edm::EventSetup& edm::ESHandle transcoder; transcoder.swap(outTranscoder); - edm::ESHandle hcalcond; - iSetup.get().get(hcalcond); - - edm::ESHandle hCQ; - iSetup.get().get("withTopo", hCQ); - const HcalChannelQuality* _cq = &(*hCQ); - - HcalLutManager manager(hcalcond.product(), _cq, _status_word_to_mask); + HcalLutManager manager(hcalcond, _cq, _status_word_to_mask); bool split_by_crate = true; manager.createLutXmlFiles_HBEFFromCoder_HOFromAscii_ZDC(_tag, *inputCoder, *transcoder, _lin_file, split_by_crate); diff --git a/CaloOnlineTools/HcalOnlineDb/src/WriteL1TriggerObjectsTxt.cc b/CaloOnlineTools/HcalOnlineDb/src/WriteL1TriggerObjectsTxt.cc index 59a013dfdba3a..73351259099e4 100644 --- a/CaloOnlineTools/HcalOnlineDb/src/WriteL1TriggerObjectsTxt.cc +++ b/CaloOnlineTools/HcalOnlineDb/src/WriteL1TriggerObjectsTxt.cc @@ -25,7 +25,6 @@ #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "CalibFormats/HcalObjects/interface/HcalCalibrations.h" @@ -47,17 +46,19 @@ class WriteL1TriggerObjectsTxt : public edm::one::EDAnalyzer tok_dbservice_; }; WriteL1TriggerObjectsTxt::WriteL1TriggerObjectsTxt(const edm::ParameterSet& iConfig) - : tagName_(iConfig.getParameter("TagName")) {} + : tagName_(iConfig.getParameter("TagName")), + tok_dbservice_(esConsumes()) {} + WriteL1TriggerObjectsTxt::~WriteL1TriggerObjectsTxt() {} void WriteL1TriggerObjectsTxt::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { using namespace edm; - edm::ESHandle conditions; - iSetup.get().get(conditions); + const HcalDbService* conditions = &iSetup.getData(tok_dbservice_); const HcalLutMetadata* metadata = conditions->getHcalLutMetadata(); const HcalTopology* topo = metadata->topo(); diff --git a/CaloOnlineTools/HcalOnlineDb/test/template.py b/CaloOnlineTools/HcalOnlineDb/test/template.py index fce141f01b798..7f688a2bf4948 100644 --- a/CaloOnlineTools/HcalOnlineDb/test/template.py +++ b/CaloOnlineTools/HcalOnlineDb/test/template.py @@ -4,7 +4,7 @@ process = cms.Process("TEST", Run3) process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append('LUT') +process.MessageLogger.LUT=dict() process.source = cms.Source("EmptySource") process.source.firstRun = cms.untracked.uint32( __RUN__ ) diff --git a/CommonTools/Egamma/src/ConversionTools.cc b/CommonTools/Egamma/src/ConversionTools.cc index 8da634a7220e3..b9ccab93c39dd 100644 --- a/CommonTools/Egamma/src/ConversionTools.cc +++ b/CommonTools/Egamma/src/ConversionTools.cc @@ -69,10 +69,8 @@ bool ConversionTools::matchesConversion(const reco::GsfElectron &ele, ele.reco::GsfElectron::closestCtfTrackRef().key() == it->key()) return true; if (allowAmbiguousGsfMatch) { - for (reco::GsfTrackRefVector::const_iterator tk = ele.ambiguousGsfTracksBegin(); - tk != ele.ambiguousGsfTracksEnd(); - ++tk) { - if (tk->isNonnull() && tk->id() == it->id() && tk->key() == it->key()) + for (auto const &tk : ele.ambiguousGsfTracks()) { + if (tk.isNonnull() && tk.id() == it->id() && tk.key() == it->key()) return true; } } diff --git a/CommonTools/MVAUtils/BuildFile.xml b/CommonTools/MVAUtils/BuildFile.xml index 9c7589c0a58b1..83842b6afd9db 100644 --- a/CommonTools/MVAUtils/BuildFile.xml +++ b/CommonTools/MVAUtils/BuildFile.xml @@ -1,4 +1,4 @@ - + diff --git a/CommonTools/MVAUtils/bin/BuildFile.xml b/CommonTools/MVAUtils/bin/BuildFile.xml new file mode 100644 index 0000000000000..147f2d969912d --- /dev/null +++ b/CommonTools/MVAUtils/bin/BuildFile.xml @@ -0,0 +1,4 @@ + + + + diff --git a/CommonTools/MVAUtils/bin/convertXMLToGBRForestROOT.cc b/CommonTools/MVAUtils/bin/convertXMLToGBRForestROOT.cc new file mode 100644 index 0000000000000..3c7c9f5805fd7 --- /dev/null +++ b/CommonTools/MVAUtils/bin/convertXMLToGBRForestROOT.cc @@ -0,0 +1,34 @@ +#include "CommonTools/MVAUtils/interface/GBRForestTools.h" + +#include "TFile.h" + +#include +#include + +int main(int argc, char **argv) { + if (argc != 3) { + std::cout << "Please pass a (gzipped) BDT weight file and a name for the output ROOT file." << std::endl; + return 1; + } + + char *inputFileName = argv[1]; + char *outputFileName = argv[2]; + + if (!std::filesystem::exists(inputFileName)) { + std::cout << "Input file " << inputFileName << " does not exists." << std::endl; + return 1; + } + + if (std::filesystem::exists(outputFileName)) { + std::cout << "Output file " << outputFileName << " already exists." << std::endl; + return 1; + } + + auto gbrForest = createGBRForest(inputFileName); + std::cout << "Read GBRForest " << inputFileName << " successfully." << std::endl; + + TFile{outputFileName, "RECREATE"}.WriteObject(gbrForest.get(), "gbrForest"); + std::cout << "GBRForest written to " << outputFileName << " successfully." << std::endl; + + return 0; +} diff --git a/CommonTools/MVAUtils/interface/GBRForestTools.h b/CommonTools/MVAUtils/interface/GBRForestTools.h index 2be0532c1e5f8..86dbabf12fe95 100644 --- a/CommonTools/MVAUtils/interface/GBRForestTools.h +++ b/CommonTools/MVAUtils/interface/GBRForestTools.h @@ -10,7 +10,7 @@ // Author: Jonas Rembser //-------------------------------------------------------------------------------------------------- -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "FWCore/ParameterSet/interface/FileInPath.h" #include diff --git a/CommonTools/MVAUtils/interface/TMVAEvaluator.h b/CommonTools/MVAUtils/interface/TMVAEvaluator.h index ac857e70162da..8ff692adceae8 100644 --- a/CommonTools/MVAUtils/interface/TMVAEvaluator.h +++ b/CommonTools/MVAUtils/interface/TMVAEvaluator.h @@ -7,7 +7,7 @@ #include #include -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Utilities/interface/thread_safety_macros.h" #include "TMVA/IMethod.h" diff --git a/CommonTools/MVAUtils/src/GBRForestTools.cc b/CommonTools/MVAUtils/src/GBRForestTools.cc index a277c1f63022e..71e39cd60f23e 100644 --- a/CommonTools/MVAUtils/src/GBRForestTools.cc +++ b/CommonTools/MVAUtils/src/GBRForestTools.cc @@ -3,11 +3,14 @@ #include "FWCore/ParameterSet/interface/FileInPath.h" #include "FWCore/Utilities/interface/Exception.h" +#include "TFile.h" + #include #include #include #include #include +#include namespace { @@ -117,6 +120,16 @@ namespace { } std::unique_ptr init(const std::string& weightsFileFullPath, std::vector& varNames) { + // + // Load weights file, for ROOT file + // + if (reco::details::hasEnding(weightsFileFullPath, ".root")) { + TFile gbrForestFile(weightsFileFullPath.c_str()); + std::unique_ptr up(gbrForestFile.Get("gbrForest")); + gbrForestFile.Close("nodelete"); + return up; + } + // // Load weights file, for gzipped or raw xml file // diff --git a/CommonTools/ParticleFlow/interface/ElectronIDPFCandidateSelectorDefinition.h b/CommonTools/ParticleFlow/interface/ElectronIDPFCandidateSelectorDefinition.h index c825aa70abaaf..73974e8c5f59c 100644 --- a/CommonTools/ParticleFlow/interface/ElectronIDPFCandidateSelectorDefinition.h +++ b/CommonTools/ParticleFlow/interface/ElectronIDPFCandidateSelectorDefinition.h @@ -81,8 +81,7 @@ namespace pf2pat { int match = -1; // try first the non-ambiguous tracks - for (reco::GsfElectronCollection::const_iterator it = electrons->begin(), ed = electrons->end(); it != ed; - ++it) { + for (auto it = electrons->begin(), ed = electrons->end(); it != ed; ++it) { if (it->gsfTrack() == PfTk) { match = it - electrons->begin(); break; @@ -90,9 +89,8 @@ namespace pf2pat { } // then the ambiguous ones if (match == -1) { - for (reco::GsfElectronCollection::const_iterator it = electrons->begin(), ed = electrons->end(); it != ed; - ++it) { - if (std::count(it->ambiguousGsfTracksBegin(), it->ambiguousGsfTracksEnd(), PfTk) > 0) { + for (auto it = electrons->begin(), ed = electrons->end(); it != ed; ++it) { + if (std::count(it->ambiguousGsfTracks().begin(), it->ambiguousGsfTracks().end(), PfTk) > 0) { match = it - electrons->begin(); break; } diff --git a/CommonTools/ParticleFlow/plugins/BuildFile.xml b/CommonTools/ParticleFlow/plugins/BuildFile.xml index 310e92f763712..500651fce9c9d 100644 --- a/CommonTools/ParticleFlow/plugins/BuildFile.xml +++ b/CommonTools/ParticleFlow/plugins/BuildFile.xml @@ -11,7 +11,6 @@ - diff --git a/CommonTools/ParticleFlow/plugins/DeltaBetaWeights.cc b/CommonTools/ParticleFlow/plugins/DeltaBetaWeights.cc index 275bfe220c3f0..b6f8165d64213 100644 --- a/CommonTools/ParticleFlow/plugins/DeltaBetaWeights.cc +++ b/CommonTools/ParticleFlow/plugins/DeltaBetaWeights.cc @@ -1,4 +1,5 @@ #include "CommonTools/ParticleFlow/plugins/DeltaBetaWeights.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" DeltaBetaWeights::DeltaBetaWeights(const edm::ParameterSet& iConfig) : src_(iConfig.getParameter("src")), diff --git a/CommonTools/ParticleFlow/plugins/SealModule.cc b/CommonTools/ParticleFlow/plugins/SealModule.cc index 86f9c40d2672d..eb561b1381c31 100644 --- a/CommonTools/ParticleFlow/plugins/SealModule.cc +++ b/CommonTools/ParticleFlow/plugins/SealModule.cc @@ -1,7 +1,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CommonTools/ParticleFlow/plugins/PFMET.h" -#include "CommonTools/ParticleFlow/plugins/Type1PFMET.h" #include "CommonTools/ParticleFlow/plugins/PFPileUp.h" #include "CommonTools/ParticleFlow/plugins/PFCandidateFwdPtrCollectionFilter.h" #include "CommonTools/ParticleFlow/plugins/PFJetFwdPtrProducer.h" @@ -10,7 +9,6 @@ #include "CommonTools/ParticleFlow/plugins/DeltaBetaWeights.h" DEFINE_FWK_MODULE(PFMET); -DEFINE_FWK_MODULE(Type1PFMET); DEFINE_FWK_MODULE(PFPileUp); DEFINE_FWK_MODULE(PFCandidateFwdPtrCollectionStringFilter); diff --git a/CommonTools/ParticleFlow/plugins/Type1PFMET.cc b/CommonTools/ParticleFlow/plugins/Type1PFMET.cc deleted file mode 100644 index 7534e187925ae..0000000000000 --- a/CommonTools/ParticleFlow/plugins/Type1PFMET.cc +++ /dev/null @@ -1,98 +0,0 @@ - -// user include files -#include "CommonTools/ParticleFlow/plugins/Type1PFMET.h" - -#include "DataFormats/METReco/interface/MET.h" -#include "DataFormats/METReco/interface/CaloMET.h" -#include "DataFormats/JetReco/interface/PFJet.h" - -//using namespace std; - -using namespace reco; - -// PRODUCER CONSTRUCTORS ------------------------------------------ -Type1PFMET::Type1PFMET(const edm::ParameterSet& iConfig) { - tokenUncorMet = consumes(iConfig.getParameter("inputUncorMetLabel")); - tokenUncorJets = consumes(iConfig.getParameter("inputUncorJetsTag")); - correctorToken = consumes(iConfig.getParameter("corrector")); - jetPTthreshold = iConfig.getParameter("jetPTthreshold"); - jetEMfracLimit = iConfig.getParameter("jetEMfracLimit"); - jetMufracLimit = iConfig.getParameter("jetMufracLimit"); - produces(); -} -Type1PFMET::Type1PFMET() {} - -// PRODUCER DESTRUCTORS ------------------------------------------- -Type1PFMET::~Type1PFMET() {} - -// PRODUCER METHODS ----------------------------------------------- -void Type1PFMET::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - Handle inputUncorJets; - iEvent.getByToken(tokenUncorJets, inputUncorJets); - Handle corrector; - iEvent.getByToken(correctorToken, corrector); - Handle inputUncorMet; //Define Inputs - iEvent.getByToken(tokenUncorMet, inputUncorMet); //Get Inputs - std::unique_ptr output(new METCollection()); //Create empty output - run(*(inputUncorMet.product()), - *(corrector.product()), - *(inputUncorJets.product()), - jetPTthreshold, - jetEMfracLimit, - jetMufracLimit, - &*output); //Invoke the algorithm - iEvent.put(std::move(output)); //Put output into Event -} - -void Type1PFMET::run(const METCollection& uncorMET, - const reco::JetCorrector& corrector, - const PFJetCollection& uncorJet, - double jetPTthreshold, - double jetEMfracLimit, - double jetMufracLimit, - METCollection* corMET) { - if (!corMET) { - std::cerr << "Type1METAlgo_run-> undefined output MET collection. Stop. " << std::endl; - return; - } - - double DeltaPx = 0.0; - double DeltaPy = 0.0; - double DeltaSumET = 0.0; - // ---------------- Calculate jet corrections, but only for those uncorrected jets - // ---------------- which are above the given threshold. This requires that the - // ---------------- uncorrected jets be matched with the corrected jets. - for (PFJetCollection::const_iterator jet = uncorJet.begin(); jet != uncorJet.end(); ++jet) { - if (jet->pt() > jetPTthreshold) { - double emEFrac = jet->chargedEmEnergyFraction() + jet->neutralEmEnergyFraction(); - double muEFrac = jet->chargedMuEnergyFraction(); - if (emEFrac < jetEMfracLimit && muEFrac < jetMufracLimit) { - double corr = corrector.correction(*jet) - 1.; // correction itself - DeltaPx += jet->px() * corr; - DeltaPy += jet->py() * corr; - DeltaSumET += jet->et() * corr; - } - } - } - //----------------- Calculate and set deltas for new MET correction - CorrMETData delta; - delta.mex = -DeltaPx; //correction to MET (from Jets) is negative, - delta.mey = -DeltaPy; //since MET points in direction opposite of jets - delta.sumet = DeltaSumET; - //----------------- Fill holder with corrected MET (= uncorrected + delta) values - const MET* u = &(uncorMET.front()); - double corrMetPx = u->px() + delta.mex; - double corrMetPy = u->py() + delta.mey; - MET::LorentzVector correctedMET4vector(corrMetPx, corrMetPy, 0., sqrt(corrMetPx * corrMetPx + corrMetPy * corrMetPy)); - //----------------- get previous corrections and push into new corrections - std::vector corrections = u->mEtCorr(); - corrections.push_back(delta); - //----------------- Push onto MET Collection - MET result = MET(u->sumEt() + delta.sumet, corrections, correctedMET4vector, u->vertex(), u->isWeighted()); - corMET->push_back(result); - - return; -} - -// DEFINE_FWK_MODULE(Type1PFMET); //define this as a plug-in diff --git a/CommonTools/ParticleFlow/plugins/Type1PFMET.h b/CommonTools/ParticleFlow/plugins/Type1PFMET.h deleted file mode 100644 index 8e6a2a95b518d..0000000000000 --- a/CommonTools/ParticleFlow/plugins/Type1PFMET.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef PhysicsTools_PFCandProducer_Type1PFMET_h -#define PhysicsTools_PFCandProducer_Type1PFMET_h - -/**\class Type1PFMET -\brief Computes the Type-1 corrections for pfMET. A specific version of the Type1MET class from the JetMETCorrections/Type1MET package. - -\todo Unify with the Type1MET class from the JetMETCorrections/Type1MET package - -\author Michal Bluj -\date February 2009 -*/ - -// system include files -#include -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/JetReco/interface/PFJetCollection.h" -#include "DataFormats/METReco/interface/METFwd.h" -#include "JetMETCorrections/JetCorrector/interface/JetCorrector.h" - -// PRODUCER CLASS DEFINITION ------------------------------------- -class Type1PFMET : public edm::EDProducer { -public: - explicit Type1PFMET(const edm::ParameterSet&); - explicit Type1PFMET(); - ~Type1PFMET() override; - void produce(edm::Event&, const edm::EventSetup&) override; - -private: - edm::EDGetTokenT tokenUncorMet; - edm::EDGetTokenT tokenUncorJets; - edm::EDGetTokenT correctorToken; - double jetPTthreshold; - double jetEMfracLimit; - double jetMufracLimit; - void run(const reco::METCollection& uncorMET, - const reco::JetCorrector& corrector, - const reco::PFJetCollection& uncorJet, - double jetPTthreshold, - double jetEMfracLimit, - double jetMufracLimit, - reco::METCollection* corMET); -}; - -#endif diff --git a/CommonTools/ParticleFlow/python/pfTaus_cff.py b/CommonTools/ParticleFlow/python/pfTaus_cff.py index 1e6ba6b511991..17b535d90a7f9 100644 --- a/CommonTools/ParticleFlow/python/pfTaus_cff.py +++ b/CommonTools/ParticleFlow/python/pfTaus_cff.py @@ -53,14 +53,10 @@ PFTauProducer = "pfTausCombiner" ) pfTausProducerSansRefs = hpsPFTauProducerSansRefs.clone( - src = "pfTausCombiner" -) -pfTausProducerSansRefs = cms.EDProducer( - "RecoTauCleaner", - src = cms.InputTag("pfTausCombiner"), - outputSelection = cms.string(""), - verbosity = cms.int32(0), - cleaners = cms.VPSet( + src = "pfTausCombiner", + outputSelection = "", + verbosity = 0, + cleaners = [ cleaners.unitCharge, cms.PSet( name = cms.string("leadStripPtLt2_5"), @@ -77,7 +73,7 @@ src = cms.InputTag("pfTausSelectionDiscriminator"), ), cleaners.combinedIsolation - ) + ] ) #cloning discriminants diff --git a/CommonTools/ParticleFlow/python/pfType1MET_cff.py b/CommonTools/ParticleFlow/python/pfType1MET_cff.py index 777c896d2637b..fbe479cc3b0bd 100644 --- a/CommonTools/ParticleFlow/python/pfType1MET_cff.py +++ b/CommonTools/ParticleFlow/python/pfType1MET_cff.py @@ -1,7 +1,7 @@ import FWCore.ParameterSet.Config as cms from CommonTools.ParticleFlow.pfMET_cfi import * -from CommonTools.ParticleFlow.pfType1MET_cfi import * +from JetMETCorrections.Type1MET.pfType1MET_cfi import * pfRawMET = pfMET.clone(alias="pfRawMET") #pfRawMET.hfCalibFactor = 1. diff --git a/CommonTools/ParticleFlow/python/pfType1MET_cfi.py b/CommonTools/ParticleFlow/python/pfType1MET_cfi.py deleted file mode 100644 index 43e6646b70c51..0000000000000 --- a/CommonTools/ParticleFlow/python/pfType1MET_cfi.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Type-1 met corrections (AK4PFJets) -# remember about including ES producer definition e.g. JetMETCorrections.Configuration.L2L3Corrections_Summer08Redigi_cff - -pfType1MET = cms.EDProducer("Type1PFMET", - inputUncorJetsTag = cms.InputTag("ak4PFJets"), - jetEMfracLimit = cms.double(0.95), # to remove electron which give rise to jets - jetMufracLimit = cms.double(0.95), # to remove electron which give rise to jets - metType = cms.string("PFMET"), - jetPTthreshold = cms.double(20.0), - # pfMET should be not corrected for HF 0.7 - inputUncorMetLabel = cms.InputTag("pfMET"), - corrector = cms.InputTag("ak4PFL2L3Corrector") -) - diff --git a/CommonTools/ParticleFlow/src/PFPileUpAlgo.cc b/CommonTools/ParticleFlow/src/PFPileUpAlgo.cc index 41d01027a063b..2829ccdd1971b 100644 --- a/CommonTools/ParticleFlow/src/PFPileUpAlgo.cc +++ b/CommonTools/ParticleFlow/src/PFPileUpAlgo.cc @@ -1,6 +1,7 @@ #include "CommonTools/ParticleFlow/interface/PFPileUpAlgo.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" #include "DataFormats/VertexReco/interface/Vertex.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" void PFPileUpAlgo::process(const PFCollection& pfCandidates, const reco::VertexCollection& vertices) { pfCandidatesFromVtx_.clear(); diff --git a/CommonTools/PileupAlgos/interface/PuppiAlgo.h b/CommonTools/PileupAlgos/interface/PuppiAlgo.h index 8e484994e29a3..b3c9ede5eb2c2 100644 --- a/CommonTools/PileupAlgos/interface/PuppiAlgo.h +++ b/CommonTools/PileupAlgos/interface/PuppiAlgo.h @@ -30,7 +30,7 @@ class PuppiAlgo { inline int algoId(unsigned int iAlgo) const { return fAlgoId.at(iAlgo); } inline bool isCharged(unsigned int iAlgo) const { return fCharged.at(iAlgo); } inline double coneSize(unsigned int iAlgo) const { return fConeSize.at(iAlgo); } - inline double neutralPt(int iNPV) const { return cur_NeutralPtMin + iNPV * cur_NeutralPtSlope; } + inline double neutralPt(double const iPUProxy) const { return cur_NeutralPtMin + iPUProxy * cur_NeutralPtSlope; } inline double rms() const { return cur_RMS; } inline double median() const { return cur_Med; } diff --git a/CommonTools/PileupAlgos/interface/PuppiContainer.h b/CommonTools/PileupAlgos/interface/PuppiContainer.h index d28d7a06db3b6..479cf542a4585 100644 --- a/CommonTools/PileupAlgos/interface/PuppiContainer.h +++ b/CommonTools/PileupAlgos/interface/PuppiContainer.h @@ -10,7 +10,7 @@ class PuppiContainer { PuppiContainer(const edm::ParameterSet &iConfig); ~PuppiContainer(); void initialize(const std::vector &iRecoObjects); - void setNPV(int iNPV) { fNPV = iNPV; } + void setPUProxy(double const iPUProxy) { fPUProxy = iPUProxy; } std::vector const &pfParticles() const { return fPFParticles; } std::vector const &puppiWeights(); @@ -61,7 +61,7 @@ class PuppiContainer { double fPtMaxNeutrals; double fPtMaxNeutralsStartSlope; int fNAlgos; - int fNPV; + double fPUProxy; std::vector fPuppiAlgo; }; #endif diff --git a/CommonTools/PileupAlgos/plugins/PuppiProducer.cc b/CommonTools/PileupAlgos/plugins/PuppiProducer.cc index 45758bbdeb816..cfbeb0cc02ff9 100644 --- a/CommonTools/PileupAlgos/plugins/PuppiProducer.cc +++ b/CommonTools/PileupAlgos/plugins/PuppiProducer.cc @@ -42,6 +42,12 @@ PuppiProducer::PuppiProducer(const edm::ParameterSet& iConfig) { tokenPFCandidates_ = consumes(iConfig.getParameter("candName")); tokenVertices_ = consumes(iConfig.getParameter("vertexName")); + fUsePUProxyValue = iConfig.getParameter("usePUProxyValue"); + + if (fUsePUProxyValue) { + puProxyValueToken_ = consumes(iConfig.getParameter("PUProxyValue")); + } + ptokenPupOut_ = produces>(); ptokenP4PupOut_ = produces>(); ptokenValues_ = produces>(); @@ -74,11 +80,14 @@ void PuppiProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { iEvent.getByToken(tokenVertices_, hVertexProduct); const reco::VertexCollection* pvCol = hVertexProduct.product(); - int npv = 0; - const reco::VertexCollection::const_iterator vtxEnd = pvCol->end(); - for (reco::VertexCollection::const_iterator vtxIter = pvCol->begin(); vtxEnd != vtxIter; ++vtxIter) { - if (!vtxIter->isFake() && vtxIter->ndof() >= fVtxNdofCut && std::abs(vtxIter->z()) <= fVtxZCut) - npv++; + double puProxyValue = 0.; + if (fUsePUProxyValue) { + puProxyValue = iEvent.get(puProxyValueToken_); + } else { + for (auto const& vtx : *pvCol) { + if (!vtx.isFake() && vtx.ndof() >= fVtxNdofCut && std::abs(vtx.z()) <= fVtxZCut) + ++puProxyValue; + } } std::vector lWeights; @@ -224,7 +233,7 @@ void PuppiProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { } fPuppiContainer->initialize(fRecoObjCollection); - fPuppiContainer->setNPV(npv); + fPuppiContainer->setPUProxy(puProxyValue); //Compute the weights and get the particles lWeights = fPuppiContainer->puppiWeights(); @@ -396,6 +405,8 @@ void PuppiProducer::fillDescriptions(edm::ConfigurationDescriptions& description desc.add("invertPuppi", false); desc.add("useExp", false); desc.add("MinPuppiWeight", .01); + desc.add("usePUProxyValue", false); + desc.add("PUProxyValue", edm::InputTag("")); PuppiAlgo::fillDescriptionsPuppiAlgo(desc); diff --git a/CommonTools/PileupAlgos/plugins/PuppiProducer.h b/CommonTools/PileupAlgos/plugins/PuppiProducer.h index 46bc5431bf9ef..befcf4c6a7f0a 100644 --- a/CommonTools/PileupAlgos/plugins/PuppiProducer.h +++ b/CommonTools/PileupAlgos/plugins/PuppiProducer.h @@ -45,6 +45,7 @@ class PuppiProducer : public edm::stream::EDProducer<> { edm::EDGetTokenT tokenPuppiContainer_; edm::EDGetTokenT tokenPuppiCandidates_; edm::EDGetTokenT tokenPackedPuppiCandidates_; + edm::EDGetTokenT puProxyValueToken_; edm::EDPutTokenT> ptokenPupOut_; edm::EDPutTokenT> ptokenP4PupOut_; edm::EDPutTokenT> ptokenValues_; @@ -74,6 +75,7 @@ class PuppiProducer : public edm::stream::EDProducer<> { bool fClonePackedCands; int fVtxNdofCut; double fVtxZCut; + bool fUsePUProxyValue; std::unique_ptr fPuppiContainer; std::vector fRecoObjCollection; }; diff --git a/CommonTools/PileupAlgos/python/Puppi_cff.py b/CommonTools/PileupAlgos/python/Puppi_cff.py index 4be504877437e..107aea9a49cab 100644 --- a/CommonTools/PileupAlgos/python/Puppi_cff.py +++ b/CommonTools/PileupAlgos/python/Puppi_cff.py @@ -24,46 +24,23 @@ ) ) -puppi = cms.EDProducer("PuppiProducer",#cms.PSet(#"PuppiProducer", - puppiDiagnostics = cms.bool(False), - puppiNoLep = cms.bool(False), - UseFromPVLooseTight = cms.bool(False), - UseDeltaZCut = cms.bool(True), - EtaMinUseDeltaZ = cms.double(2.4), - DeltaZCut = cms.double(0.3), - NumOfPUVtxsForCharged = cms.uint32(2), - DeltaZCutForChargedFromPUVtxs = cms.double(0.2), - PtMaxCharged = cms.double(20.), - EtaMaxCharged = cms.double(99999.), - PtMaxPhotons = cms.double(-1.), - EtaMaxPhotons = cms.double(2.5), - PtMaxNeutrals = cms.double(200.), - PtMaxNeutralsStartSlope = cms.double(20.), - candName = cms.InputTag('particleFlow'), - vertexName = cms.InputTag('offlinePrimaryVertices'), +# from cfipython/, generated by PuppiProducer::fillDescriptions +import CommonTools.PileupAlgos.PuppiProducer_cfi as _mod +puppi = _mod.PuppiProducer.clone( + EtaMinUseDeltaZ = 2.4, + NumOfPUVtxsForCharged = 2, + PtMaxCharged = 20., + PtMaxNeutralsStartSlope = 20., #candName = cms.string('packedPFCandidates'), #vertexName = cms.string('offlineSlimmedPrimaryVertices'), - applyCHS = cms.bool (True), - invertPuppi = cms.bool (False), - useExp = cms.bool (False), - MinPuppiWeight = cms.double(0.01), - useExistingWeights = cms.bool(False), - clonePackedCands = cms.bool(False), # should only be set to True for MiniAOD - vtxNdofCut = cms.int32(4), - vtxZCut = cms.double(24), - algos = cms.VPSet( - cms.PSet( - etaMin = cms.vdouble(0.), - etaMax = cms.vdouble(2.5), - ptMin = cms.vdouble(0.), - MinNeutralPt = cms.vdouble(0.2), - MinNeutralPtSlope = cms.vdouble(0.015), - RMSEtaSF = cms.vdouble(1.0), - MedEtaSF = cms.vdouble(1.0), - EtaMaxExtrap = cms.double(2.0), + clonePackedCands = False, # should only be set to True for MiniAOD + algos = { + 0: dict( puppiAlgos = puppiCentral - ), - cms.PSet( + ) + } #only one PSet is defined in reference +) +puppi.algos.append(cms.PSet( etaMin = cms.vdouble( 2.5, 3.0), etaMax = cms.vdouble( 3.0, 10.0), ptMin = cms.vdouble( 0.0, 0.0), @@ -73,7 +50,8 @@ MedEtaSF = cms.vdouble(0.90, 0.75), EtaMaxExtrap = cms.double( 2.0), puppiAlgos = puppiForward - ), + ) +) # cms.PSet( # etaMin = cms.double(3.0), # etaMax = cms.double(10.0), @@ -87,8 +65,6 @@ # EtaMaxExtrap = cms.double(2.0), # puppiAlgos = puppiForward # ) - ) -) from Configuration.Eras.Modifier_phase2_common_cff import phase2_common phase2_common.toModify( diff --git a/CommonTools/PileupAlgos/src/PuppiContainer.cc b/CommonTools/PileupAlgos/src/PuppiContainer.cc index 196b7762c4693..72d91d5425aa7 100644 --- a/CommonTools/PileupAlgos/src/PuppiContainer.cc +++ b/CommonTools/PileupAlgos/src/PuppiContainer.cc @@ -37,7 +37,7 @@ void PuppiContainer::initialize(const std::vector &iRecoObjects) { fRawAlphas.resize(0); fAlphaMed.resize(0); fAlphaRMS.resize(0); - fNPV = 1.; + fPUProxy = 1.; //Link to the RecoObjects fRecoParticles = &iRecoObjects; fPFParticles.reserve(iRecoObjects.size()); @@ -71,7 +71,6 @@ void PuppiContainer::initialize(const std::vector &iRecoObjects) { // charged candidates assigned to LV if (std::abs(rParticle.id) == 1) fPFParticlesForVarChargedPV.push_back(pCand); - // if(fNPV < rParticle.vtxId) fNPV = rParticle.vtxId; } } @@ -304,7 +303,7 @@ std::vector const &PuppiContainer::puppiWeights() { << " -- id : " << rParticle.id << " -- NAlgos: " << lNAlgos << std::endl; } //Basic Cuts - if (pWeight * fPFParticles[i0].pt < fPuppiAlgo[pPupId].neutralPt(fNPV) && rParticle.id == 0) + if (pWeight * fPFParticles[i0].pt < fPuppiAlgo[pPupId].neutralPt(fPUProxy) && rParticle.id == 0) pWeight = 0; //threshold cut on the neutral Pt // Protect high pT photons (important for gamma to hadronic recoil balance) if (fPtMaxPhotons > 0 && rParticle.pdgId == 22 && std::abs(fPFParticles[i0].eta) < fEtaMaxPhotons && diff --git a/CommonTools/RecoAlgos/plugins/BuildFile.xml b/CommonTools/RecoAlgos/plugins/BuildFile.xml index 1391d81bd6a18..14976ed78b0e4 100644 --- a/CommonTools/RecoAlgos/plugins/BuildFile.xml +++ b/CommonTools/RecoAlgos/plugins/BuildFile.xml @@ -16,5 +16,4 @@ - diff --git a/CommonTools/RecoAlgos/src/PrimaryVertexSorting.cc b/CommonTools/RecoAlgos/src/PrimaryVertexSorting.cc index 9cdf9daf91870..dc8990f1c8103 100644 --- a/CommonTools/RecoAlgos/src/PrimaryVertexSorting.cc +++ b/CommonTools/RecoAlgos/src/PrimaryVertexSorting.cc @@ -10,6 +10,7 @@ #include "fastjet/Selector.hh" #include "fastjet/PseudoJet.hh" #include "FWCore/Utilities/interface/isFinite.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" using namespace fastjet; using namespace std; diff --git a/CommonTools/TriggerUtils/src/GenericTriggerEventFlag.cc b/CommonTools/TriggerUtils/src/GenericTriggerEventFlag.cc index 59474bed9f21e..3bfed0d0caae0 100644 --- a/CommonTools/TriggerUtils/src/GenericTriggerEventFlag.cc +++ b/CommonTools/TriggerUtils/src/GenericTriggerEventFlag.cc @@ -203,7 +203,7 @@ void GenericTriggerEventFlag::initRun(const edm::Run& run, const edm::EventSetup if (stage2_) { l1uGt_->retrieveL1Setup(setup); - const std::vector > prescales = l1uGt_->prescales(); + const std::vector > prescales = l1uGt_->prescales(); for (const auto& ip : prescales) algoNames.push_back(ip.first); } else { diff --git a/CommonTools/TriggerUtils/test/GenericTriggerEventFlag_AlCaRecoTriggerBitsRcd_create_cfg.py b/CommonTools/TriggerUtils/test/GenericTriggerEventFlag_AlCaRecoTriggerBitsRcd_create_cfg.py index 2eeeba9738928..82d9b8c8462c5 100644 --- a/CommonTools/TriggerUtils/test/GenericTriggerEventFlag_AlCaRecoTriggerBitsRcd_create_cfg.py +++ b/CommonTools/TriggerUtils/test/GenericTriggerEventFlag_AlCaRecoTriggerBitsRcd_create_cfg.py @@ -3,9 +3,7 @@ process = cms.Process( "CREATE" ) process.load( "FWCore.MessageLogger.MessageLogger_cfi" ) -process.MessageLogger.cerr = cms.untracked.PSet( - placeholder = cms.untracked.bool( True ) -) +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32( 1 ) diff --git a/CommonTools/TriggerUtils/test/GenericTriggerEventFlag_AlCaRecoTriggerBitsRcd_read_cfg.py b/CommonTools/TriggerUtils/test/GenericTriggerEventFlag_AlCaRecoTriggerBitsRcd_read_cfg.py index 295fe3e71fc7d..7acb905832b00 100644 --- a/CommonTools/TriggerUtils/test/GenericTriggerEventFlag_AlCaRecoTriggerBitsRcd_read_cfg.py +++ b/CommonTools/TriggerUtils/test/GenericTriggerEventFlag_AlCaRecoTriggerBitsRcd_read_cfg.py @@ -3,9 +3,7 @@ process = cms.Process( "READ" ) process.load( "FWCore.MessageLogger.MessageLogger_cfi" ) -process.MessageLogger.cerr = cms.untracked.PSet( - placeholder = cms.untracked.bool( True ) -) +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32( 250 ) diff --git a/CommonTools/TriggerUtils/test/GenericTriggerEventFlag_AlCaRecoTriggerBitsRcd_update_cfg.py b/CommonTools/TriggerUtils/test/GenericTriggerEventFlag_AlCaRecoTriggerBitsRcd_update_cfg.py index c7023afa2de4d..a2f0dc688c0db 100644 --- a/CommonTools/TriggerUtils/test/GenericTriggerEventFlag_AlCaRecoTriggerBitsRcd_update_cfg.py +++ b/CommonTools/TriggerUtils/test/GenericTriggerEventFlag_AlCaRecoTriggerBitsRcd_update_cfg.py @@ -3,9 +3,7 @@ process = cms.Process( "UPDATE" ) process.load( "FWCore.MessageLogger.MessageLogger_cfi" ) -process.MessageLogger.cerr = cms.untracked.PSet( - placeholder = cms.untracked.bool( True ) -) +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32( 1 ) diff --git a/CommonTools/TriggerUtils/test/genericTriggerEventFlagTest_cfg.py b/CommonTools/TriggerUtils/test/genericTriggerEventFlagTest_cfg.py index da4637a283fc6..3dc867ecc0b5c 100644 --- a/CommonTools/TriggerUtils/test/genericTriggerEventFlagTest_cfg.py +++ b/CommonTools/TriggerUtils/test/genericTriggerEventFlagTest_cfg.py @@ -4,7 +4,7 @@ ## Logging process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append( 'GenericTriggerEventFlag' ) + process.MessageLogger.cerr.threshold = 'INFO' process.MessageLogger.cerr.GenericTriggerEventFlag = cms.untracked.PSet( limit = cms.untracked.int32( -1 ) ) process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool( True ) ) diff --git a/CondCore/AlignmentPlugins/plugins/TrackerAlignmentErrorExtended_PayloadInspector.cc b/CondCore/AlignmentPlugins/plugins/TrackerAlignmentErrorExtended_PayloadInspector.cc index a5e5366c12930..1fa0aafc23f6b 100644 --- a/CondCore/AlignmentPlugins/plugins/TrackerAlignmentErrorExtended_PayloadInspector.cc +++ b/CondCore/AlignmentPlugins/plugins/TrackerAlignmentErrorExtended_PayloadInspector.cc @@ -41,6 +41,8 @@ namespace { + using namespace cond::payloadInspector; + const std::map > partLimits = { {AlignmentPI::BPix, std::make_pair(AlignmentPI::BPixL1o, AlignmentPI::BPixL4i)}, {AlignmentPI::FPix, std::make_pair(AlignmentPI::FPixmL1, AlignmentPI::FPixpL3)}, @@ -55,17 +57,15 @@ namespace { // inherit from one of the predefined plot class: Histogram1D template - class TrackerAlignmentErrorExtendedValue : public cond::payloadInspector::Histogram1D { + class TrackerAlignmentErrorExtendedValue : public Histogram1D { public: TrackerAlignmentErrorExtendedValue() - : cond::payloadInspector::Histogram1D( + : Histogram1D( "TrackerAlignmentErrorExtendedValue", "TrackerAlignmentErrorExtendedValue sqrt(d_{" + getStringFromIndex(i) + "})", 500, 0.0, - 500.0) { - Base::setSingleIov(true); - } + 500.0) {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -108,16 +108,15 @@ namespace { // *************************************************/ template - class TrackerAlignmentErrorExtendedSummary : public cond::payloadInspector::PlotImage { + class TrackerAlignmentErrorExtendedSummary : public PlotImage { public: TrackerAlignmentErrorExtendedSummary() - : cond::payloadInspector::PlotImage("Summary per Tracker Partition of sqrt(d_{" + - getStringFromIndex(i) + "}) of APE matrix") { - setSingleIov(true); - } + : PlotImage("Summary per Tracker Partition of sqrt(d_{" + + getStringFromIndex(i) + "}) of APE matrix") {} - bool fill(const std::vector >& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::vector alignErrors = payload->m_alignError; @@ -243,16 +242,15 @@ namespace { // TrackerMap of sqrt(d_ii) of 1 IOV // *************************************************/ template - class TrackerAlignmentErrorExtendedTrackerMap : public cond::payloadInspector::PlotImage { + class TrackerAlignmentErrorExtendedTrackerMap : public PlotImage { public: TrackerAlignmentErrorExtendedTrackerMap() - : cond::payloadInspector::PlotImage("Tracker Map of sqrt(d_{" + getStringFromIndex(i) + - "}) of APE matrix") { - setSingleIov(true); - } + : PlotImage("Tracker Map of sqrt(d_{" + getStringFromIndex(i) + + "}) of APE matrix") {} - bool fill(const std::vector >& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::string titleMap = "APE #sqrt{d_{" + getStringFromIndex(i) + "}} value (payload : " + std::get<1>(iov) + ")"; @@ -325,18 +323,16 @@ namespace { // Partition details of 1 IOV // *************************************************/ template - class TrackerAlignmentErrorExtendedDetail : public cond::payloadInspector::PlotImage { + class TrackerAlignmentErrorExtendedDetail : public PlotImage { public: TrackerAlignmentErrorExtendedDetail() - : cond::payloadInspector::PlotImage("Details for " + - AlignmentPI::getStringFromPart(q)) { - setSingleIov(true); - } + : PlotImage("Details for " + AlignmentPI::getStringFromPart(q)) {} - bool fill(const std::vector >& iovs) override { - gStyle->SetPaintTextFormat(".1f"); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); - auto iov = iovs.front(); + gStyle->SetPaintTextFormat(".1f"); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::vector alignErrors = payload->m_alignError; @@ -506,29 +502,36 @@ namespace { // Tracker Aligment Extended Errors grand summary comparison of 2 IOVs // *************************************************/ - template - class TrackerAlignmentErrorExtendedComparatorBase - : public cond::payloadInspector::PlotImage { + template + class TrackerAlignmentErrorExtendedComparatorBase : public PlotImage { public: TrackerAlignmentErrorExtendedComparatorBase() - : cond::payloadInspector::PlotImage("Summary per Tracker region of sqrt(d_{" + - getStringFromIndex(i) + "}) of APE matrix") {} + : PlotImage("Summary per Tracker region of sqrt(d_{" + + getStringFromIndex(i) + "}) of APE matrix") {} - bool fill(const std::vector >& iovs) override { - gStyle->SetPaintTextFormat(".1f"); - - std::vector > sorted_iovs = iovs; - - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); + bool fill() override { + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; + + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); + + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); + gStyle->SetPaintTextFormat(".1f"); - std::shared_ptr last_payload = fetchPayload(std::get<1>(lastiov)); - std::shared_ptr first_payload = fetchPayload(std::get<1>(firstiov)); + std::shared_ptr last_payload = this->fetchPayload(std::get<1>(lastiov)); + std::shared_ptr first_payload = this->fetchPayload(std::get<1>(firstiov)); std::vector f_alignErrors = first_payload->m_alignError; std::vector l_alignErrors = last_payload->m_alignError; @@ -730,7 +733,7 @@ namespace { legend.SetTextSize(0.025); legend.Draw("same"); - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); canvas.SaveAs(fileName.c_str()); return true; @@ -739,20 +742,10 @@ namespace { }; template - class TrackerAlignmentErrorExtendedComparator : public TrackerAlignmentErrorExtendedComparatorBase { - public: - TrackerAlignmentErrorExtendedComparator() : TrackerAlignmentErrorExtendedComparatorBase() { - this->setSingleIov(false); - } - }; + using TrackerAlignmentErrorExtendedComparator = TrackerAlignmentErrorExtendedComparatorBase; template - class TrackerAlignmentErrorExtendedComparatorTwoTags : public TrackerAlignmentErrorExtendedComparatorBase { - public: - TrackerAlignmentErrorExtendedComparatorTwoTags() : TrackerAlignmentErrorExtendedComparatorBase() { - this->setTwoTags(true); - } - }; + using TrackerAlignmentErrorExtendedComparatorTwoTags = TrackerAlignmentErrorExtendedComparatorBase; // diagonal elements typedef TrackerAlignmentErrorExtendedComparator TrackerAlignmentErrorExtendedXXComparator; diff --git a/CondCore/AlignmentPlugins/plugins/TrackerAlignment_PayloadInspector.cc b/CondCore/AlignmentPlugins/plugins/TrackerAlignment_PayloadInspector.cc index 0800f259a0215..0bee612603bf5 100644 --- a/CondCore/AlignmentPlugins/plugins/TrackerAlignment_PayloadInspector.cc +++ b/CondCore/AlignmentPlugins/plugins/TrackerAlignment_PayloadInspector.cc @@ -46,6 +46,8 @@ namespace { + using namespace cond::payloadInspector; + // M.M. 2017/09/29 // Hardcoded Tracker Global Position Record // Without accessing the ES, it is not possible to access to the GPR with the PI technology, @@ -62,26 +64,34 @@ namespace { // Size of the movement over all partitions //******************************************// - template - class TrackerAlignmentComparatorBase : public cond::payloadInspector::PlotImage { + template + class TrackerAlignmentComparatorBase : public PlotImage { public: TrackerAlignmentComparatorBase() - : cond::payloadInspector::PlotImage("comparison of " + AlignmentPI::getStringFromCoordinate(coord) + - " coordinate between two geometries") {} - - bool fill(const std::vector > &iovs) override { - std::vector > sorted_iovs = iovs; - - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const &t1, auto const &t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); + : PlotImage("comparison of " + AlignmentPI::getStringFromCoordinate(coord) + + " coordinate between two geometries") {} + + bool fill() override { + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; + + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); + + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); - - std::shared_ptr last_payload = fetchPayload(std::get<1>(lastiov)); - std::shared_ptr first_payload = fetchPayload(std::get<1>(firstiov)); + std::shared_ptr last_payload = this->fetchPayload(std::get<1>(lastiov)); + std::shared_ptr first_payload = this->fetchPayload(std::get<1>(firstiov)); std::string lastIOVsince = std::to_string(std::get<0>(lastiov)); std::string firstIOVsince = std::to_string(std::get<0>(firstiov)); @@ -261,7 +271,7 @@ namespace { t1.SetTextColor(kBlue); t1.DrawLatex(0.6, 0.93, Form("IOV %s - %s ", lastIOVsince.c_str(), firstIOVsince.c_str())); - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); canvas.SaveAs(fileName.c_str()); return true; @@ -269,16 +279,10 @@ namespace { }; template - class TrackerAlignmentCompare : public TrackerAlignmentComparatorBase { - public: - TrackerAlignmentCompare() : TrackerAlignmentComparatorBase() { this->setSingleIov(false); } - }; + using TrackerAlignmentCompare = TrackerAlignmentComparatorBase; template - class TrackerAlignmentCompareTwoTags : public TrackerAlignmentComparatorBase { - public: - TrackerAlignmentCompareTwoTags() : TrackerAlignmentComparatorBase() { this->setTwoTags(true); } - }; + using TrackerAlignmentCompareTwoTags = TrackerAlignmentComparatorBase; typedef TrackerAlignmentCompare TrackerAlignmentCompareX; typedef TrackerAlignmentCompare TrackerAlignmentCompareY; @@ -301,16 +305,15 @@ namespace { //******************************************// template - class TrackerAlignmentSummary : public cond::payloadInspector::PlotImage { + class TrackerAlignmentSummary : public PlotImage { public: TrackerAlignmentSummary() - : cond::payloadInspector::PlotImage("Comparison of all coordinates between two geometries for " + - getStringFromPart(q)) { - setSingleIov(false); - } + : PlotImage("Comparison of all coordinates between two geometries for " + + getStringFromPart(q)) {} - bool fill(const std::vector > &iovs) override { - std::vector > sorted_iovs = iovs; + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto sorted_iovs = tag.iovs; // make absolute sure the IOVs are sortd by since std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const &t1, auto const &t2) { @@ -498,10 +501,10 @@ namespace { //******************************************// template - class BPixBarycenterHistory : public cond::payloadInspector::HistoryPlot { + class BPixBarycenterHistory : public HistoryPlot { public: BPixBarycenterHistory() - : cond::payloadInspector::HistoryPlot( + : HistoryPlot( " Barrel Pixel " + AlignmentPI::getStringFromCoordinate(coord) + " positions vs time", AlignmentPI::getStringFromCoordinate(coord) + " position [cm]") {} ~BPixBarycenterHistory() override = default; @@ -561,15 +564,13 @@ namespace { /************************************************ Display of Tracker Detector barycenters *************************************************/ - class TrackerAlignmentBarycenters : public cond::payloadInspector::PlotImage { + class TrackerAlignmentBarycenters : public PlotImage { public: - TrackerAlignmentBarycenters() - : cond::payloadInspector::PlotImage("Display of Tracker Alignment Barycenters") { - setSingleIov(true); - } + TrackerAlignmentBarycenters() : PlotImage("Display of Tracker Alignment Barycenters") {} - bool fill(const std::vector > &iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); unsigned int run = std::get<0>(iov); @@ -688,29 +689,38 @@ namespace { /************************************************ Comparator of Tracker Detector barycenters *************************************************/ - class TrackerAlignmentBarycentersComparatorBase : public cond::payloadInspector::PlotImage { + template + class TrackerAlignmentBarycentersComparatorBase : public PlotImage { public: TrackerAlignmentBarycentersComparatorBase() - : cond::payloadInspector::PlotImage("Comparison of Tracker Alignment Barycenters") {} - - bool fill(const std::vector > &iovs) override { - std::vector > sorted_iovs = iovs; - - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const &t1, auto const &t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); + : PlotImage("Comparison of Tracker Alignment Barycenters") {} + + bool fill() override { + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; + + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); + + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - auto firstiov = sorted_iovs.front(); unsigned int first_run = std::get<0>(firstiov); - - auto lastiov = sorted_iovs.back(); unsigned int last_run = std::get<0>(lastiov); - std::shared_ptr last_payload = fetchPayload(std::get<1>(lastiov)); + std::shared_ptr last_payload = this->fetchPayload(std::get<1>(lastiov)); std::vector last_alignments = last_payload->m_align; - std::shared_ptr first_payload = fetchPayload(std::get<1>(firstiov)); + std::shared_ptr first_payload = this->fetchPayload(std::get<1>(firstiov)); std::vector first_alignments = first_payload->m_align; isInitialPhase0 = (first_alignments.size() == AlignmentPI::phase0size) ? true : false; @@ -782,7 +792,7 @@ namespace { t1.DrawLatex(0.5, 0.96, Form("Tracker Alignment Barycenters Diff, IOV %i - IOV %i", last_run, first_run)); t1.SetTextSize(0.025); - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); canvas.SaveAs(fileName.c_str()); return true; @@ -793,44 +803,43 @@ namespace { bool isFinalPhase0; }; - class TrackerAlignmentBarycentersCompare : public TrackerAlignmentBarycentersComparatorBase { - public: - TrackerAlignmentBarycentersCompare() : TrackerAlignmentBarycentersComparatorBase() { this->setSingleIov(false); } - }; - - class TrackerAlignmentBarycentersCompareTwoTags : public TrackerAlignmentBarycentersComparatorBase { - public: - TrackerAlignmentBarycentersCompareTwoTags() : TrackerAlignmentBarycentersComparatorBase() { - this->setTwoTags(true); - } - }; + using TrackerAlignmentBarycentersCompare = TrackerAlignmentBarycentersComparatorBase<1, MULTI_IOV>; + using TrackerAlignmentBarycentersCompareTwoTags = TrackerAlignmentBarycentersComparatorBase<2, SINGLE_IOV>; /************************************************ Comparator of Pixel Tracker Detector barycenters *************************************************/ - class PixelBarycentersComparatorBase : public cond::payloadInspector::PlotImage { + template + class PixelBarycentersComparatorBase : public PlotImage { public: - PixelBarycentersComparatorBase() - : cond::payloadInspector::PlotImage("Comparison of Pixel Barycenters") {} - - bool fill(const std::vector > &iovs) override { - std::vector > sorted_iovs = iovs; - - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const &t1, auto const &t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); + PixelBarycentersComparatorBase() : PlotImage("Comparison of Pixel Barycenters") {} + + bool fill() override { + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; + + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); + + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - auto firstiov = sorted_iovs.front(); unsigned int first_run = std::get<0>(firstiov); - - auto lastiov = sorted_iovs.back(); unsigned int last_run = std::get<0>(lastiov); - std::shared_ptr last_payload = fetchPayload(std::get<1>(lastiov)); + std::shared_ptr last_payload = this->fetchPayload(std::get<1>(lastiov)); std::vector last_alignments = last_payload->m_align; - std::shared_ptr first_payload = fetchPayload(std::get<1>(firstiov)); + std::shared_ptr first_payload = this->fetchPayload(std::get<1>(firstiov)); std::vector first_alignments = first_payload->m_align; TCanvas canvas("Pixel Barycenter Summary", "Pixel Barycenter summary", 1200, 1200); @@ -1029,7 +1038,7 @@ namespace { t1.DrawLatex(c - 1, z0f + 1., Form("(%.2f)", z0f)); } - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); canvas.SaveAs(fileName.c_str()); return true; @@ -1040,15 +1049,8 @@ namespace { bool isFinalPhase0; }; - class PixelBarycentersCompare : public PixelBarycentersComparatorBase { - public: - PixelBarycentersCompare() : PixelBarycentersComparatorBase() { this->setSingleIov(false); } - }; - - class PixelBarycentersCompareTwoTags : public PixelBarycentersComparatorBase { - public: - PixelBarycentersCompareTwoTags() : PixelBarycentersComparatorBase() { this->setTwoTags(true); } - }; + using PixelBarycentersCompare = PixelBarycentersComparatorBase<1, MULTI_IOV>; + using PixelBarycentersCompareTwoTags = PixelBarycentersComparatorBase<2, SINGLE_IOV>; } // namespace diff --git a/CondCore/AlignmentPlugins/plugins/TrackerSurfaceDeformations_PayloadInspector.cc b/CondCore/AlignmentPlugins/plugins/TrackerSurfaceDeformations_PayloadInspector.cc index 0e7c3eb71ee43..a0093da6249fe 100644 --- a/CondCore/AlignmentPlugins/plugins/TrackerSurfaceDeformations_PayloadInspector.cc +++ b/CondCore/AlignmentPlugins/plugins/TrackerSurfaceDeformations_PayloadInspector.cc @@ -44,13 +44,13 @@ namespace { - class TrackerSurfaceDeformationsTest : public cond::payloadInspector::Histogram1D { + using namespace cond::payloadInspector; + + class TrackerSurfaceDeformationsTest : public Histogram1D { public: TrackerSurfaceDeformationsTest() - : cond::payloadInspector::Histogram1D( - "TrackerSurfaceDeformationsTest", "TrackerSurfaceDeformationsTest", 2, 0.0, 2.0) { - Base::setSingleIov(true); - } + : Histogram1D( + "TrackerSurfaceDeformationsTest", "TrackerSurfaceDeformationsTest", 2, 0.0, 2.0) {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -84,17 +84,14 @@ namespace { //******************************************************* template - class TrackerAlignmentSurfaceDeformationsSummary - : public cond::payloadInspector::PlotImage { + class TrackerAlignmentSurfaceDeformationsSummary : public PlotImage { public: TrackerAlignmentSurfaceDeformationsSummary() - : cond::payloadInspector::PlotImage("Details for " + - AlignmentPI::getStringFromPart(q)) { - setSingleIov(true); - } + : PlotImage("Details for " + AlignmentPI::getStringFromPart(q)) {} - bool fill(const std::vector > &iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); auto listOfItems = payload->items(); @@ -180,17 +177,14 @@ namespace { //******************************************************* template - class TrackerAlignmentSurfaceDeformationsComparison - : public cond::payloadInspector::PlotImage { + class TrackerAlignmentSurfaceDeformationsComparison : public PlotImage { public: TrackerAlignmentSurfaceDeformationsComparison() - : cond::payloadInspector::PlotImage("Details for " + - AlignmentPI::getStringFromPart(q)) { - setSingleIov(false); - } + : PlotImage("Details for " + AlignmentPI::getStringFromPart(q)) {} - bool fill(const std::vector > &iovs) override { - std::vector > sorted_iovs = iovs; + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto sorted_iovs = tag.iovs; // make absolute sure the IOVs are sortd by since std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const &t1, auto const &t2) { @@ -304,16 +298,16 @@ namespace { // TrackerMap of single parameter // *************************************************/ template - class SurfaceDeformationTrackerMap : public cond::payloadInspector::PlotImage { + class SurfaceDeformationTrackerMap : public PlotImage { public: SurfaceDeformationTrackerMap() - : cond::payloadInspector::PlotImage( - "Tracker Map of Tracker Surface deformations - parameter: " + std::to_string(par)) { - setSingleIov(true); - } + : PlotImage( + "Tracker Map of Tracker Surface deformations - parameter: " + std::to_string(par)) {} + + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); - bool fill(const std::vector > &iovs) override { - auto iov = iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); auto listOfItems = payload->items(); @@ -400,16 +394,15 @@ namespace { // TrackerMap of single parameter // *************************************************/ template - class SurfaceDeformationsTkMapDelta : public cond::payloadInspector::PlotImage { + class SurfaceDeformationsTkMapDelta : public PlotImage { public: SurfaceDeformationsTkMapDelta() - : cond::payloadInspector::PlotImage( - "Tracker Map of Tracker Surface deformations differences - parameter: " + std::to_string(m_par)) { - setSingleIov(false); - } + : PlotImage( + "Tracker Map of Tracker Surface deformations differences - parameter: " + std::to_string(m_par)) {} - bool fill(const std::vector > &iovs) override { - std::vector > sorted_iovs = iovs; + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto sorted_iovs = tag.iovs; // make absolute sure the IOVs are sortd by since std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const &t1, auto const &t2) { @@ -570,20 +563,19 @@ namespace { // *************************************************/ template - class TrackerSurfaceDeformationsComparator : public cond::payloadInspector::PlotImage { + class TrackerSurfaceDeformationsComparator : public PlotImage { public: TrackerSurfaceDeformationsComparator() - : cond::payloadInspector::PlotImage( - "Summary per Tracker region of parameter " + std::to_string(m_par) + " of Surface Deformations") { - setSingleIov(false); - } + : PlotImage("Summary per Tracker region of parameter " + + std::to_string(m_par) + " of Surface Deformations") {} + + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto sorted_iovs = tag.iovs; - bool fill(const std::vector > &iovs) override { TGaxis::SetMaxDigits(3); gStyle->SetPaintTextFormat(".1f"); - std::vector > sorted_iovs = iovs; - // make absolute sure the IOVs are sortd by since std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const &t1, auto const &t2) { return std::get<0>(t1) < std::get<0>(t2); diff --git a/CondCore/BeamSpotPlugins/interface/BeamSpotPayloadInspectorHelper.h b/CondCore/BeamSpotPlugins/interface/BeamSpotPayloadInspectorHelper.h index ba621222b25bb..917a1d03043d6 100644 --- a/CondCore/BeamSpotPlugins/interface/BeamSpotPayloadInspectorHelper.h +++ b/CondCore/BeamSpotPlugins/interface/BeamSpotPayloadInspectorHelper.h @@ -14,6 +14,7 @@ #include #include #include "TCanvas.h" +#include "TStyle.h" #include "TH2F.h" #include "TLatex.h" @@ -219,6 +220,8 @@ namespace BeamSpotPI { auto tagname = tag.name; auto iov = tag.iovs.front(); + gStyle->SetHistMinimumZero(kTRUE); + m_payload = this->fetchPayload(std::get<1>(iov)); TCanvas canvas("Beam Spot Parameters Summary", "BeamSpot Parameters summary", isOnline_ ? 1500 : 1000, 1000); @@ -310,9 +313,9 @@ namespace BeamSpotPI { auto ltx = TLatex(); ltx.SetTextFont(62); if (isOnline_) { - ltx.SetTextSize(0.040); + ltx.SetTextSize(0.030); } else { - ltx.SetTextSize(0.032); + ltx.SetTextSize(0.025); } ltx.SetTextAlign(11); diff --git a/CondCore/CTPPSPlugins/src/plugin.cc b/CondCore/CTPPSPlugins/src/plugin.cc index 63646c805f0e1..28eab28ee1ade 100644 --- a/CondCore/CTPPSPlugins/src/plugin.cc +++ b/CondCore/CTPPSPlugins/src/plugin.cc @@ -15,6 +15,10 @@ #include "CondFormats/DataRecord/interface/PPSTimingCalibrationRcd.h" #include "CondFormats/PPSObjects/interface/LHCOpticalFunctionsSetCollection.h" #include "CondFormats/DataRecord/interface/CTPPSOpticsRcd.h" +#include "CondFormats/PPSObjects/interface/PPSDirectSimulationData.h" +#include "CondFormats/DataRecord/interface/PPSDirectSimulationDataRcd.h" +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" +#include "CondFormats/DataRecord/interface/PPSPixelTopologyRcd.h" REGISTER_PLUGIN(CTPPSBeamParametersRcd, CTPPSBeamParameters); REGISTER_PLUGIN(CTPPSPixelDAQMappingRcd, CTPPSPixelDAQMapping); @@ -25,3 +29,5 @@ REGISTER_PLUGIN(RPRealAlignmentRecord, CTPPSRPAlignmentCorrectionsData); REGISTER_PLUGIN(RPMisalignedAlignmentRecord, CTPPSRPAlignmentCorrectionsData); REGISTER_PLUGIN(PPSTimingCalibrationRcd, PPSTimingCalibration); REGISTER_PLUGIN(CTPPSOpticsRcd, LHCOpticalFunctionsSetCollection); +REGISTER_PLUGIN(PPSDirectSimulationDataRcd, PPSDirectSimulationData); +REGISTER_PLUGIN(PPSPixelTopologyRcd, PPSPixelTopology); diff --git a/CondCore/CondDB/interface/Auth.h b/CondCore/CondDB/interface/Auth.h index 84529c0daa66d..f49bdcdcb010e 100644 --- a/CondCore/CondDB/interface/Auth.h +++ b/CondCore/CondDB/interface/Auth.h @@ -30,6 +30,16 @@ namespace cond { static constexpr unsigned int COND_AUTHENTICATION_KEY_SIZE = 30; static constexpr unsigned int COND_DB_KEY_SIZE = 30; + static constexpr size_t COND_SESSION_HASH_SIZE = 16; + + static constexpr int COND_SESSION_HASH_CODE = 4; + static constexpr int COND_DBKEY_CREDENTIAL_CODE = 1; + + static constexpr int COND_DBTAG_LOCK_ACCESS_CODE = 8; + static constexpr int COND_DBTAG_WRITE_ACCESS_CODE = 2; + static constexpr int COND_DBTAG_READ_ACCESS_CODE = 1; + static constexpr int COND_DBTAG_NO_PROTECTION_CODE = 0; + static constexpr const char* const COND_AUTH_PATH_PROPERTY = "AuthenticationFile"; } // namespace auth diff --git a/CondCore/CondDB/interface/ConnectionPool.h b/CondCore/CondDB/interface/ConnectionPool.h index f291d9cf2ba11..9aaab9d705870 100644 --- a/CondCore/CondDB/interface/ConnectionPool.h +++ b/CondCore/CondDB/interface/ConnectionPool.h @@ -63,15 +63,15 @@ namespace cond { private: std::string m_authPath = std::string(""); int m_authSys = 0; + std::string m_authenticationService = std::string(""); coral::MsgLevel m_messageLevel = coral::Error; - std::unique_ptr m_msgReporter; + CoralMsgReporter* m_msgReporter = nullptr; bool m_loggingEnabled = false; //The frontier security option is turned on for all sessions //usig this wrapper of the CORAL connection setup for configuring the server access std::string m_frontierSecurity = std::string(""); // this one has to be moved! cond::CoralServiceManager* m_pluginManager = nullptr; - std::map m_dbTypes; }; } // namespace persistency } // namespace cond diff --git a/CondCore/CondDB/interface/DecodingKey.h b/CondCore/CondDB/interface/DecodingKey.h index fa11b60090340..d77bffc45d71e 100644 --- a/CondCore/CondDB/interface/DecodingKey.h +++ b/CondCore/CondDB/interface/DecodingKey.h @@ -30,6 +30,7 @@ namespace cond { class DecodingKey { public: + static constexpr const char* const KEY_FMT_VERSION = "2.0"; static constexpr const char* const FILE_NAME = "db.key"; static constexpr const char* const FILE_PATH = ".cms_cond/db.key"; static constexpr size_t DEFAULT_KEY_SIZE = 100; @@ -49,6 +50,8 @@ namespace cond { void flush(); + const std::string& version() const; + const std::string& principalName() const; const std::string& principalKey() const; @@ -69,6 +72,8 @@ namespace cond { private: std::string m_fileName; + std::string m_version; + bool m_mode; std::string m_pwd; @@ -89,7 +94,16 @@ inline cond::auth::KeyGenerator::KeyGenerator() : m_iteration(0) {} inline cond::auth::ServiceCredentials::ServiceCredentials() : connectionString(""), userName(""), password("") {} inline cond::auth::DecodingKey::DecodingKey() - : m_fileName(""), m_mode(true), m_pwd(""), m_principalName(""), m_principalKey(""), m_owner(""), m_services() {} + : m_fileName(""), + m_version(""), + m_mode(true), + m_pwd(""), + m_principalName(""), + m_principalKey(""), + m_owner(""), + m_services() {} + +inline const std::string& cond::auth::DecodingKey::version() const { return m_version; } inline const std::string& cond::auth::DecodingKey::principalName() const { return m_principalName; } diff --git a/CondCore/CondDB/interface/IOVEditor.h b/CondCore/CondDB/interface/IOVEditor.h index 4018aa4c1328c..7b34847b7b6ab 100644 --- a/CondCore/CondDB/interface/IOVEditor.h +++ b/CondCore/CondDB/interface/IOVEditor.h @@ -45,6 +45,9 @@ namespace cond { // IOVEditor& operator=(const IOVEditor& rhs); + // + ~IOVEditor(); + // loads to tag to edit void load(const std::string& tag); @@ -66,9 +69,6 @@ namespace cond { cond::Time_t lastValidatedTime() const; void setLastValidatedTime(cond::Time_t time); - // flag (hack) for the validation - void setValidationMode(); - // register a new insertion. // if checkType==true, the payload corresponding to the specified id is verified to be the same type as the iov payloadObjectType void insert(cond::Time_t since, const cond::Hash& payloadHash, bool checkType = false); @@ -86,6 +86,10 @@ namespace cond { bool flush(const std::string& logText); bool flush(const std::string& logText, bool forceInsertion); + bool isLocked() const; + void lock(); + void unlock(); + private: bool flush(const std::string& logText, const boost::posix_time::ptime& operationTime, bool forceInsertion); void checkTransaction(const std::string& ctx); diff --git a/CondCore/CondDB/interface/Logger.h b/CondCore/CondDB/interface/Logger.h index 399db18216d2d..5a6f3015414be 100644 --- a/CondCore/CondDB/interface/Logger.h +++ b/CondCore/CondDB/interface/Logger.h @@ -14,13 +14,14 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" // #include +#include #include namespace cond { namespace persistency { - class ConnectionPool; + class MsgDispatcher; template class EchoedLogStream { @@ -93,7 +94,10 @@ namespace cond { virtual ~Logger(); // - void setDbDestination(const std::string& connectionString, ConnectionPool& connectionPool); + void subscribeCoralMessages(const std::weak_ptr& dispatcher); + + // + void setDbDestination(const std::string& connectionString); // void start(); @@ -124,12 +128,12 @@ namespace cond { private: std::string m_jobName; std::string m_connectionString; - ConnectionPool* m_sharedConnectionPool; bool m_started; boost::posix_time::ptime m_startTime; boost::posix_time::ptime m_endTime; int m_retCode; std::stringstream m_log; + std::weak_ptr m_dispatcher; }; } // namespace persistency diff --git a/CondCore/CondDB/plugins/RelationalAuthenticationService.cc b/CondCore/CondDB/plugins/RelationalAuthenticationService.cc index e085b608ffa67..ab90af1cb562b 100644 --- a/CondCore/CondDB/plugins/RelationalAuthenticationService.cc +++ b/CondCore/CondDB/plugins/RelationalAuthenticationService.cc @@ -86,5 +86,9 @@ cond::RelationalAuthenticationService::RelationalAuthenticationService::credenti return *creds; } +std::string cond::RelationalAuthenticationService::RelationalAuthenticationService::principalName() { + return m_db.keyPrincipalName(); +} + DEFINE_CORALSERVICE(cond::RelationalAuthenticationService::RelationalAuthenticationService, "COND/Services/RelationalAuthenticationService"); diff --git a/CondCore/CondDB/plugins/RelationalAuthenticationService.h b/CondCore/CondDB/plugins/RelationalAuthenticationService.h index c5e648c1469ce..171c7c9046f4b 100644 --- a/CondCore/CondDB/plugins/RelationalAuthenticationService.h +++ b/CondCore/CondDB/plugins/RelationalAuthenticationService.h @@ -2,6 +2,7 @@ #define COND_XMLAUTHENTITACTIONSERVICE_H #include "CondCore/CondDB/interface/CredentialStore.h" +#include "CondCore/CondDB/src/IDbAuthentication.h" // #include "RelationalAccess/IAuthenticationService.h" #include "CoralKernel/Service.h" @@ -23,7 +24,9 @@ namespace cond { /** */ - class RelationalAuthenticationService : public coral::Service, virtual public coral::IAuthenticationService { + class RelationalAuthenticationService : public coral::Service, + virtual public coral::IAuthenticationService, + virtual public persistency::IDbAuthentication { public: /// Standard Constructor explicit RelationalAuthenticationService(const std::string& name); @@ -49,6 +52,8 @@ namespace cond { const coral::IAuthenticationCredentials& credentials(const std::string& connectionString, const std::string& role) const override; + std::string principalName() override; + private: /// The input file with the data std::string m_authenticationPath; diff --git a/CondCore/CondDB/src/ConnectionPool.cc b/CondCore/CondDB/src/ConnectionPool.cc index 247bf2d1c841b..23a09456a0b52 100644 --- a/CondCore/CondDB/src/ConnectionPool.cc +++ b/CondCore/CondDB/src/ConnectionPool.cc @@ -1,5 +1,6 @@ #include "CondCore/CondDB/interface/ConnectionPool.h" #include "DbConnectionString.h" +#include "IDbAuthentication.h" #include "SessionImpl.h" #include "IOVSchema.h" #include "CoralMsgReporter.h" @@ -10,6 +11,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" // coral includes #include "RelationalAccess/ConnectionService.h" +#include "RelationalAccess/IAuthenticationService.h" #include "RelationalAccess/IWebCacheControl.h" #include "RelationalAccess/ISessionProxy.h" #include "RelationalAccess/IConnectionServiceConfiguration.h" @@ -23,6 +25,8 @@ namespace cond { ConnectionPool::ConnectionPool() { m_pluginManager = new cond::CoralServiceManager; + m_msgReporter = new CoralMsgReporter; + coral::MessageStream::installMsgReporter(m_msgReporter); configure(); } @@ -73,12 +77,10 @@ namespace cond { coralConfig.disableConnectionSharing(); // message streaming coral::MessageStream::setMsgVerbosity(m_messageLevel); - if (m_msgReporter.get() != nullptr) { - m_msgReporter->setOutputLevel(m_messageLevel); - coral::MessageStream::installMsgReporter(static_cast(m_msgReporter.get())); - } + m_msgReporter->setOutputLevel(m_messageLevel); + // authentication - std::string authServiceName("CORAL/Services/EnvironmentAuthenticationService"); + m_authenticationService = std::string("CORAL/Services/EnvironmentAuthenticationService"); std::string authPath = m_authPath; // authentication if (authPath.empty()) { @@ -114,12 +116,12 @@ namespace cond { servName = "COND/Services/XMLAuthenticationService"; } if (!authPath.empty()) { - authServiceName = servName; + m_authenticationService = servName; coral::Context::instance().PropertyManager().property(cond::auth::COND_AUTH_PATH_PROPERTY)->set(authPath); - coral::Context::instance().loadComponent(authServiceName, m_pluginManager); + coral::Context::instance().loadComponent(m_authenticationService, m_pluginManager); } - coralConfig.setAuthenticationService(authServiceName); + coralConfig.setAuthenticationService(m_authenticationService); } void ConnectionPool::configure() { @@ -152,7 +154,19 @@ namespace cond { bool writeCapable) { std::shared_ptr coralSession = createCoralSession(connectionString, transactionId, writeCapable); - return Session(std::make_shared(coralSession, connectionString)); + + std::string principalName(""); + if (!m_authenticationService.empty()) { + // need to hard-code somewhere the target name... + if (m_authenticationService == "COND/Services/RelationalAuthenticationService") { + coral::IHandle authSvc = + coral::Context::instance().query(m_authenticationService); + IDbAuthentication* dbAuth = dynamic_cast(authSvc.get()); + principalName = dbAuth->principalName(); + } + } + + return Session(std::make_shared(coralSession, connectionString, principalName)); } Session ConnectionPool::createSession(const std::string& connectionString, bool writeCapable) { @@ -171,9 +185,7 @@ namespace cond { void ConnectionPool::setMessageVerbosity(coral::MsgLevel level) { m_messageLevel = level; } - void ConnectionPool::setLogDestination(Logger& logger) { - m_msgReporter = std::make_unique(logger); - } + void ConnectionPool::setLogDestination(Logger& logger) { m_msgReporter->subscribe(logger); } } // namespace persistency } // namespace cond diff --git a/CondCore/CondDB/src/CoralMsgReporter.cc b/CondCore/CondDB/src/CoralMsgReporter.cc index 603a23be845ae..5eff8d9618ee2 100644 --- a/CondCore/CondDB/src/CoralMsgReporter.cc +++ b/CondCore/CondDB/src/CoralMsgReporter.cc @@ -7,9 +7,17 @@ #include "CondCore/CondDB/interface/Logger.h" #include "CoralMsgReporter.h" +cond::persistency::MsgDispatcher::MsgDispatcher(Logger& logger) { m_recipient = &logger; } + +void cond::persistency::MsgDispatcher::unsubscribe() { m_recipient = nullptr; } + +bool cond::persistency::MsgDispatcher::hasRecipient() { return m_recipient != nullptr; } + +cond::persistency::Logger& cond::persistency::MsgDispatcher::recipient() { return *m_recipient; } + /// Default constructor -cond::persistency::CoralMsgReporter::CoralMsgReporter(Logger& logger) - : m_logger(logger), m_level(coral::Error), m_format(0), m_mutex() { +cond::persistency::CoralMsgReporter::CoralMsgReporter() + : m_dispatcher(), m_level(coral::Error), m_format(0), m_mutex() { // Use a non-default format? //char* msgformat = getenv ( "CORAL_MSGFORMAT" ); if (getenv("CORAL_MESSAGEREPORTER_FORMATTED")) @@ -79,58 +87,61 @@ coral::MsgLevel cond::persistency::CoralMsgReporter::outputLevel() const { retur /// Modify output level void cond::persistency::CoralMsgReporter::setOutputLevel(coral::MsgLevel lvl) { m_level = lvl; } +void reportToRecipient(const std::string& msg, int lvl, cond::persistency::Logger& recipient) { + switch (lvl) { + case coral::Nil: + case coral::Verbose: + case coral::Debug: + recipient.logDebug() << "CORAL: " << msg; + break; + case coral::Info: + recipient.logInfo() << "CORAL: " << msg; + break; + case coral::Warning: + recipient.logWarning() << "CORAL: " << msg; + break; + case coral::Error: + recipient.logError() << "CORAL: " << msg; + break; + } +} + /// Report message to stdout -void cond::persistency::CoralMsgReporter::report(int lvl, const std::string& src, const std::string& msg) { +void cond::persistency::CoralMsgReporter::report(int lvl, const std::string&, const std::string& msg) { if (lvl < m_level) return; std::lock_guard lock(m_mutex); - std::stringstream out; - /** - if ( m_format == 1 ) // COOL format - { - // Formatted CORAL reporter (as in COOL) - //std::ostream& out = std::cout; - const std::string::size_type src_name_maxsize = 36; - if ( src.size() <= src_name_maxsize ) - { - out << src << std::string( src_name_maxsize-src.size(), ' ' ); - } - else - { - out << src.substr( 0, src_name_maxsize-3 ) << "..."; - } - switch ( lvl ) - { - case 0: out << " Nil "; break; - case 1: out << " Verbose "; break; - case 2: out << " Debug "; break; - case 3: out << " Info "; break; - case 4: out << " Warning "; break; - case 5: out << " Error "; break; - case 6: out << " Fatal "; break; - case 7: out << " Always "; break; - default: out << " Unknown "; break; - } - out << msg << std::endl; + if (m_dispatcher.get() && m_dispatcher->hasRecipient()) { + reportToRecipient(msg, lvl, m_dispatcher->recipient()); } - else{ - **/ // Default CORAL reporter + std::string level(""); switch (lvl) { case coral::Nil: + level = "Nil"; + break; case coral::Verbose: + level = "Verbose"; + break; case coral::Debug: - m_logger.logDebug() << "CORAL: " << msg; + level = "Debug"; break; case coral::Info: - m_logger.logInfo() << "CORAL: " << msg; + level = "Info"; break; case coral::Warning: - m_logger.logWarning() << "CORAL: " << msg; + level = "Warning"; break; case coral::Error: - m_logger.logError() << "CORAL: " << msg; + level = "Error"; break; } + std::cout << msg << " " << level << " " << msg << std::endl; +} + +void cond::persistency::CoralMsgReporter::subscribe(Logger& logger) { + m_dispatcher.reset(new MsgDispatcher(logger)); + std::weak_ptr callBack(m_dispatcher); + logger.subscribeCoralMessages(callBack); } diff --git a/CondCore/CondDB/src/CoralMsgReporter.h b/CondCore/CondDB/src/CoralMsgReporter.h index aef1aaa9c2c58..7d51372c58b43 100644 --- a/CondCore/CondDB/src/CoralMsgReporter.h +++ b/CondCore/CondDB/src/CoralMsgReporter.h @@ -4,6 +4,7 @@ //#include "CondCore/CondDB/interface/Logger.h" #include +#include #include "CoralBase/MessageStream.h" namespace cond { @@ -12,16 +13,28 @@ namespace cond { class Logger; - class CoralMsgReporter : public coral::IMsgReporter { + class MsgDispatcher { public: - // Empty ctr is suppressed - CoralMsgReporter() = delete; + MsgDispatcher() = delete; + explicit MsgDispatcher(Logger& logger); + virtual ~MsgDispatcher() {} + + void unsubscribe(); + + bool hasRecipient(); + Logger& recipient(); + private: + Logger* m_recipient = nullptr; + }; + + class CoralMsgReporter : public coral::IMsgReporter { + public: /// Default constructor - explicit CoralMsgReporter(Logger& logger); + CoralMsgReporter(); /// Destructor - ~CoralMsgReporter() override {} + ~CoralMsgReporter() override{}; /// Release reference to reporter void release() override { delete this; } @@ -35,9 +48,11 @@ namespace cond { /// Report a message void report(int lvl, const std::string& src, const std::string& msg) override; + void subscribe(Logger& logger); + private: // the destination of the streams... - Logger& m_logger; + std::shared_ptr m_dispatcher; /// The current message level threshold coral::MsgLevel m_level; diff --git a/CondCore/CondDB/src/CredentialStore.cc b/CondCore/CondDB/src/CredentialStore.cc index 0720081710a29..e4d9ca0338904 100644 --- a/CondCore/CondDB/src/CredentialStore.cc +++ b/CondCore/CondDB/src/CredentialStore.cc @@ -35,10 +35,7 @@ coral_bridge::AuthenticationCredentialSet::AuthenticationCredentialSet() : m_dat coral_bridge::AuthenticationCredentialSet::~AuthenticationCredentialSet() { reset(); } void coral_bridge::AuthenticationCredentialSet::reset() { - for (std::map, coral::AuthenticationCredentials*>::iterator iData = - m_data.begin(); - iData != m_data.end(); - ++iData) + for (auto iData = m_data.begin(); iData != m_data.end(); ++iData) delete iData->second; m_data.clear(); } @@ -119,18 +116,20 @@ coral_bridge::AuthenticationCredentialSet::data() const { return m_data; } -static const std::string SEQUENCE_TABLE_NAME("COND_CREDENTIAL_SEQUENCE"); +static const std::string TABLE_PREFIX("DB_"); +static const std::string LEGACY_TABLE_PREFIX("COND_"); +static const std::string SEQUENCE_TABLE("CREDENTIAL_SEQUENCE"); static const std::string SEQUENCE_NAME_COL("NAME"); static const std::string SEQUENCE_VALUE_COL("VALUE"); -static const std::string COND_AUTHENTICATION_TABLE("COND_AUTHENTICATION"); +static const std::string AUTHENTICATION_TABLE("AUTHENTICATION"); static const std::string PRINCIPAL_ID_COL("P_ID"); static const std::string PRINCIPAL_NAME_COL("P_NAME"); static const std::string VERIFICATION_COL("CRED0"); static const std::string PRINCIPAL_KEY_COL("CRED1"); static const std::string ADMIN_KEY_COL("CRED2"); -static const std::string COND_AUTHORIZATION_TABLE("COND_AUTHORIZATION"); +static const std::string AUTHORIZATION_TABLE("AUTHORIZATION"); static const std::string AUTH_ID_COL("AUTH_ID"); static const std::string P_ID_COL("P_ID"); static const std::string ROLE_COL("C_ROLE"); @@ -138,7 +137,7 @@ static const std::string SCHEMA_COL("C_SCHEMA"); static const std::string AUTH_KEY_COL("CRED3"); static const std::string C_ID_COL("C_ID"); -static const std::string COND_CREDENTIAL_TABLE("COND_CREDENTIAL"); +static const std::string CREDENTIAL_TABLE("CREDENTIAL"); static const std::string CONNECTION_ID_COL("CONN_ID"); static const std::string CONNECTION_LABEL_COL("CONN_LABEL"); static const std::string USERNAME_COL("CRED4"); @@ -148,6 +147,20 @@ static const std::string CONNECTION_KEY_COL("CRED7"); const std::string DEFAULT_DATA_SOURCE("Cond_Default_Authentication"); +std::string tname(const std::string& tableName, const std::string& schemaVersion) { + std::string prefix(TABLE_PREFIX); + if (schemaVersion.empty()) + prefix = LEGACY_TABLE_PREFIX; + return prefix + tableName; +} + +std::string to_lower(const std::string& s) { + std::string str(s); + for (auto& c : str) + c = tolower(c); + return str; +} + // implementation functions and helpers namespace cond { @@ -155,6 +168,7 @@ namespace cond { std::string ret = userName; if (!serviceName.empty()) { ret += "@" + serviceName; + ret = to_lower(ret); } return ret; } @@ -188,8 +202,11 @@ namespace cond { std::string adminKey; PrincipalData() : id(-1), verifKey(""), principalKey(""), adminKey("") {} }; - bool selectPrincipal(coral::ISchema& schema, const std::string& principal, PrincipalData& destination) { - std::unique_ptr query(schema.tableHandle(COND_AUTHENTICATION_TABLE).newQuery()); + bool selectPrincipal(const std::string& schemaVersion, + coral::ISchema& schema, + const std::string& principal, + PrincipalData& destination) { + std::unique_ptr query(schema.tableHandle(tname(AUTHENTICATION_TABLE, schemaVersion)).newQuery()); coral::AttributeList readBuff; readBuff.extend(PRINCIPAL_ID_COL); readBuff.extend(VERIFICATION_COL); @@ -227,8 +244,11 @@ namespace cond { CredentialData() : id(-1), userName(""), password(""), connectionKey("") {} }; - bool selectConnection(coral::ISchema& schema, const std::string& connectionLabel, CredentialData& destination) { - std::unique_ptr query(schema.tableHandle(COND_CREDENTIAL_TABLE).newQuery()); + bool selectConnection(const std::string& schemaVersion, + coral::ISchema& schema, + const std::string& connectionLabel, + CredentialData& destination) { + std::unique_ptr query(schema.tableHandle(tname(CREDENTIAL_TABLE, schemaVersion)).newQuery()); coral::AttributeList readBuff; readBuff.extend(CONNECTION_ID_COL); readBuff.extend(USERNAME_COL); @@ -267,12 +287,13 @@ namespace cond { AuthorizationData() : id(-1), connectionId(-1), key("") {} }; - bool selectAuthorization(coral::ISchema& schema, + bool selectAuthorization(const std::string& schemaVersion, + coral::ISchema& schema, int principalId, const std::string& role, const std::string& connectionString, AuthorizationData& destination) { - std::unique_ptr query(schema.tableHandle(COND_AUTHORIZATION_TABLE).newQuery()); + std::unique_ptr query(schema.tableHandle(tname(AUTHORIZATION_TABLE, schemaVersion)).newQuery()); coral::AttributeList readBuff; readBuff.extend(AUTH_ID_COL); readBuff.extend(C_ID_COL); @@ -305,9 +326,12 @@ namespace cond { return found; } - bool getNextSequenceValue(coral::ISchema& schema, const std::string& sequenceName, int& value) { + bool getNextSequenceValue(const std::string& schemaVersion, + coral::ISchema& schema, + const std::string& sequenceName, + int& value) { bool ret = false; - std::unique_ptr query(schema.tableHandle(SEQUENCE_TABLE_NAME).newQuery()); + std::unique_ptr query(schema.tableHandle(tname(SEQUENCE_TABLE, schemaVersion)).newQuery()); query->limitReturnedRows(1, 0); query->addToOutputList(SEQUENCE_VALUE_COL); query->defineOutputType(SEQUENCE_VALUE_COL, coral::AttributeSpecification::typeNameForType()); @@ -334,18 +358,19 @@ namespace cond { iAttribute->data() = sequenceName; ++iAttribute; iAttribute->data() = value; - schema.tableHandle(SEQUENCE_TABLE_NAME).dataEditor().updateRows(setClause, whClause, updateData); + schema.tableHandle(tname(SEQUENCE_TABLE, schemaVersion)).dataEditor().updateRows(setClause, whClause, updateData); return ret; } - std::pair updatePrincipalData(coral::ISchema& schema, + std::pair updatePrincipalData(const std::string& schemaVersion, + coral::ISchema& schema, const std::string& authenticationKey, const std::string& principalName, const std::string& adminKey, bool init /**= false **/, std::stringstream& log) { PrincipalData princData; - bool found = selectPrincipal(schema, principalName, princData); + bool found = selectPrincipal(schemaVersion, schema, principalName, princData); auth::Cipher cipher0(authenticationKey); auth::Cipher cipher1(adminKey); @@ -354,7 +379,9 @@ namespace cond { std::string principalKey(""); int principalId = princData.id; - coral::ITableDataEditor& editor = schema.tableHandle(COND_AUTHENTICATION_TABLE).dataEditor(); + std::string authentication_table_name = tname(AUTHENTICATION_TABLE, schemaVersion); + + coral::ITableDataEditor& editor = schema.tableHandle(authentication_table_name).dataEditor(); if (found) { log << "Updating existing principal " << principalName << " (id: " << principalId << " )" << std::endl; principalKey = cipher1.b64decrypt(princData.adminKey); @@ -380,10 +407,10 @@ namespace cond { auth::KeyGenerator gen; principalKey = gen.make(auth::COND_DB_KEY_SIZE); } - coral::ITableDataEditor& editor0 = schema.tableHandle(COND_AUTHENTICATION_TABLE).dataEditor(); + coral::ITableDataEditor& editor0 = schema.tableHandle(authentication_table_name).dataEditor(); - if (!getNextSequenceValue(schema, COND_AUTHENTICATION_TABLE, principalId)) - throwException("Can't find " + COND_AUTHENTICATION_TABLE + " sequence.", "CredentialStore::updatePrincipal"); + if (!getNextSequenceValue(schemaVersion, schema, authentication_table_name, principalId)) + throwException("Can't find " + authentication_table_name + " sequence.", "CredentialStore::updatePrincipal"); log << "Creating new principal " << principalName << " (id: " << principalId << " )" << std::endl; coral::AttributeList authData; editor0.rowBuffer(authData); @@ -398,7 +425,8 @@ namespace cond { return std::make_pair(principalId, principalKey); } - bool setPermissionData(coral::ISchema& schema, + bool setPermissionData(const std::string& schemaVersion, + coral::ISchema& schema, int principalId, const std::string& principalKey, const std::string& role, @@ -412,9 +440,10 @@ namespace cond { auth::Cipher cipher(principalKey); std::string encryptedConnectionKey = cipher.b64encrypt(connectionKey); AuthorizationData authData; - bool found = selectAuthorization(schema, principalId, role, connectionString, authData); + bool found = selectAuthorization(schemaVersion, schema, principalId, role, connectionString, authData); - coral::ITableDataEditor& editor = schema.tableHandle(COND_AUTHORIZATION_TABLE).dataEditor(); + std::string authorization_table_name = tname(AUTHORIZATION_TABLE, schemaVersion); + coral::ITableDataEditor& editor = schema.tableHandle(authorization_table_name).dataEditor(); if (found) { log << "Updating permission for principal id " << principalId << " to access resource " << connectionString << " with role " << role << std::endl; @@ -430,8 +459,8 @@ namespace cond { editor.updateRows(setCl, whereCl, updateData); } else { int next = -1; - if (!getNextSequenceValue(schema, COND_AUTHORIZATION_TABLE, next)) - throwException("Can't find " + COND_AUTHORIZATION_TABLE + " sequence.", "CredentialStore::setPermission"); + if (!getNextSequenceValue(schemaVersion, schema, authorization_table_name, next)) + throwException("Can't find " + authorization_table_name + " sequence.", "CredentialStore::setPermission"); log << "Setting permission for principal id " << principalId << " to access resource " << connectionString << " with role " << role << std::endl; coral::AttributeList insertData; @@ -452,7 +481,8 @@ namespace cond { return true; } - std::pair updateConnectionData(coral::ISchema& schema, + std::pair updateConnectionData(const std::string& schemaVersion, + coral::ISchema& schema, const std::string& adminKey, const std::string& connectionLabel, const std::string& userName, @@ -460,12 +490,13 @@ namespace cond { bool forceUpdate, std::stringstream& log) { CredentialData credsData; - bool found = selectConnection(schema, connectionLabel, credsData); + bool found = selectConnection(schemaVersion, schema, connectionLabel, credsData); int connId = credsData.id; auth::Cipher adminCipher(adminKey); std::string connectionKey(""); - coral::ITableDataEditor& editor = schema.tableHandle(COND_CREDENTIAL_TABLE).dataEditor(); + std::string credential_table_name = tname(CREDENTIAL_TABLE, schemaVersion); + coral::ITableDataEditor& editor = schema.tableHandle(credential_table_name).dataEditor(); if (found) { connectionKey = adminCipher.b64decrypt(credsData.connectionKey); auth::Cipher cipher(connectionKey); @@ -498,8 +529,8 @@ namespace cond { std::string encryptedPassword = cipher.b64encrypt(password); std::string encryptedLabel = cipher.b64encrypt(connectionLabel); - if (!getNextSequenceValue(schema, COND_CREDENTIAL_TABLE, connId)) - throwException("Can't find " + COND_CREDENTIAL_TABLE + " sequence.", "CredentialStore::updateConnection"); + if (!getNextSequenceValue(schemaVersion, schema, credential_table_name, connId)) + throwException("Can't find " + credential_table_name + " sequence.", "CredentialStore::updateConnection"); log << "Creating new connection " << connectionLabel << std::endl; coral::AttributeList insertData; insertData.extend(CONNECTION_ID_COL); @@ -592,8 +623,10 @@ void cond::CredentialStore::startSession(bool readMode) { openSession(connTokens.second, userName, password, true); coral::ISchema& schema = m_session->nominalSchema(); - if (!schema.existsTable(COND_AUTHENTICATION_TABLE) || !schema.existsTable(COND_AUTHORIZATION_TABLE) || - !schema.existsTable(COND_CREDENTIAL_TABLE)) { + const std::string& schemaVersion = m_key.version(); + if (!schema.existsTable(tname(AUTHENTICATION_TABLE, schemaVersion)) || + !schema.existsTable(tname(AUTHORIZATION_TABLE, schemaVersion)) || + !schema.existsTable(tname(CREDENTIAL_TABLE, schemaVersion))) { throwException("Credential database does not exists in \"" + storeConnectionString + "\"", "CredentialStore::startSession"); } @@ -601,7 +634,7 @@ void cond::CredentialStore::startSession(bool readMode) { const std::string& principalName = m_key.principalName(); // now authenticate... PrincipalData princData; - if (!selectPrincipal(m_session->nominalSchema(), principalName, princData)) { + if (!selectPrincipal(schemaVersion, m_session->nominalSchema(), principalName, princData)) { throwException("Invalid credentials provided.(0)", "CredentialStore::startSession"); } auth::Cipher cipher0(m_key.principalKey()); @@ -623,8 +656,8 @@ void cond::CredentialStore::startSession(bool readMode) { // first find the credentials for WRITING in the security tables std::unique_ptr query(schema.newQuery()); - query->addToTableList(COND_AUTHORIZATION_TABLE, "AUTHO"); - query->addToTableList(COND_CREDENTIAL_TABLE, "CREDS"); + query->addToTableList(tname(AUTHORIZATION_TABLE, schemaVersion), "AUTHO"); + query->addToTableList(tname(CREDENTIAL_TABLE, schemaVersion), "CREDS"); coral::AttributeList readBuff; readBuff.extend("CREDS." + CONNECTION_LABEL_COL); readBuff.extend("CREDS." + CONNECTION_KEY_COL); @@ -662,8 +695,8 @@ void cond::CredentialStore::startSession(bool readMode) { auth::Cipher cipher1(connectionKey); const std::string& encryptedUserName = row["CREDS." + USERNAME_COL].data(); const std::string& encryptedPassword = row["CREDS." + PASSWORD_COL].data(); - const std::string& verificationKey = row["CREDS." + VERIFICATION_KEY_COL].data(); - if (cipher1.b64decrypt(verificationKey) != connLabel) { + std::string verificationKey = cipher1.b64decrypt(row["CREDS." + VERIFICATION_KEY_COL].data()); + if (verificationKey != connLabel) { throwException("Could not decrypt credentials.Provided key is invalid.", "CredentialStore::startSession"); } writeUserName = cipher1.b64decrypt(encryptedUserName); @@ -738,7 +771,7 @@ std::string cond::CredentialStore::setUpForConnectionString(const std::string& c return setUpForService(serviceName, authPath); } -void addSequence(coral::ISchema& schema, const std::string& name) { +void addSequence(const std::string& schemaVersion, coral::ISchema& schema, const std::string& name) { // Create the entry in the table coral::AttributeList insertData; insertData.extend(SEQUENCE_NAME_COL); @@ -747,7 +780,7 @@ void addSequence(coral::ISchema& schema, const std::string& name) { iAttribute->data() = name; ++iAttribute; iAttribute->data() = -1; - schema.tableHandle(SEQUENCE_TABLE_NAME).dataEditor().insertRow(insertData); + schema.tableHandle(tname(SEQUENCE_TABLE, schemaVersion)).dataEditor().insertRow(insertData); } bool cond::CredentialStore::createSchema(const std::string& connectionString, @@ -757,14 +790,15 @@ bool cond::CredentialStore::createSchema(const std::string& connectionString, session.startSuper(connectionString, userName, password); coral::ISchema& schema = m_session->nominalSchema(); - if (schema.existsTable(COND_AUTHENTICATION_TABLE)) { + std::string authentication_table_name = tname(AUTHENTICATION_TABLE, m_key.version()); + if (schema.existsTable(authentication_table_name)) { throwException("Credential database, already exists.", "CredentialStore::create"); } m_log << "Creating sequence table." << std::endl; + std::string sequence_table_name = tname(SEQUENCE_TABLE, m_key.version()); coral::TableDescription dseq; - dseq.setName(SEQUENCE_TABLE_NAME); - + dseq.setName(sequence_table_name); dseq.insertColumn(SEQUENCE_NAME_COL, coral::AttributeSpecification::typeNameForType()); dseq.setNotNullConstraint(SEQUENCE_NAME_COL); dseq.insertColumn(SEQUENCE_VALUE_COL, coral::AttributeSpecification::typeNameForType()); @@ -776,9 +810,9 @@ bool cond::CredentialStore::createSchema(const std::string& connectionString, m_log << "Creating authentication table." << std::endl; // authentication table - addSequence(schema, COND_AUTHENTICATION_TABLE); + addSequence(m_key.version(), schema, authentication_table_name); coral::TableDescription descr0; - descr0.setName(COND_AUTHENTICATION_TABLE); + descr0.setName(authentication_table_name); descr0.insertColumn(PRINCIPAL_ID_COL, coral::AttributeSpecification::typeNameForType()); descr0.insertColumn( PRINCIPAL_NAME_COL, coral::AttributeSpecification::typeNameForType(), columnSize, false); @@ -801,10 +835,11 @@ bool cond::CredentialStore::createSchema(const std::string& connectionString, schema.createTable(descr0); m_log << "Creating authorization table." << std::endl; + std::string authorization_table_name = tname(AUTHORIZATION_TABLE, m_key.version()); // authorization table - addSequence(schema, COND_AUTHORIZATION_TABLE); + addSequence(m_key.version(), schema, authorization_table_name); coral::TableDescription descr1; - descr1.setName(COND_AUTHORIZATION_TABLE); + descr1.setName(authorization_table_name); descr1.insertColumn(AUTH_ID_COL, coral::AttributeSpecification::typeNameForType()); descr1.insertColumn(P_ID_COL, coral::AttributeSpecification::typeNameForType()); descr1.insertColumn(ROLE_COL, coral::AttributeSpecification::typeNameForType(), columnSize, false); @@ -828,10 +863,11 @@ bool cond::CredentialStore::createSchema(const std::string& connectionString, schema.createTable(descr1); m_log << "Creating credential table." << std::endl; + std::string credential_table_name = tname(CREDENTIAL_TABLE, m_key.version()); // credential table - addSequence(schema, COND_CREDENTIAL_TABLE); + addSequence(m_key.version(), schema, credential_table_name); coral::TableDescription descr2; - descr2.setName(COND_CREDENTIAL_TABLE); + descr2.setName(credential_table_name); descr2.insertColumn(CONNECTION_ID_COL, coral::AttributeSpecification::typeNameForType()); descr2.insertColumn( CONNECTION_LABEL_COL, coral::AttributeSpecification::typeNameForType(), columnSize, false); @@ -856,13 +892,13 @@ bool cond::CredentialStore::createSchema(const std::string& connectionString, schema.createTable(descr2); try { - schema.tableHandle(COND_AUTHENTICATION_TABLE) + schema.tableHandle(authentication_table_name) .privilegeManager() .grantToUser(m_serviceData->userName, coral::ITablePrivilegeManager::Select); - schema.tableHandle(COND_AUTHORIZATION_TABLE) + schema.tableHandle(authorization_table_name) .privilegeManager() .grantToUser(m_serviceData->userName, coral::ITablePrivilegeManager::Select); - schema.tableHandle(COND_CREDENTIAL_TABLE) + schema.tableHandle(credential_table_name) .privilegeManager() .grantToUser(m_serviceData->userName, coral::ITablePrivilegeManager::Select); } catch (const coral::Exception& e) { @@ -872,12 +908,13 @@ bool cond::CredentialStore::createSchema(const std::string& connectionString, m_log << "Granting ADMIN access permission." << std::endl; auth::KeyGenerator gen; m_principalKey = gen.make(auth::COND_DB_KEY_SIZE); - auto princData = - updatePrincipalData(schema, m_key.principalKey(), m_key.principalName(), m_principalKey, true, m_log); + auto princData = updatePrincipalData( + m_key.version(), schema, m_key.principalKey(), m_key.principalName(), m_principalKey, true, m_log); std::string credentialAccessLabel = schemaLabel(m_serviceName, userName); - auto connParams = - updateConnectionData(schema, m_principalKey, credentialAccessLabel, userName, password, true, m_log); - bool ret = setPermissionData(schema, + auto connParams = updateConnectionData( + m_key.version(), schema, m_principalKey, credentialAccessLabel, userName, password, true, m_log); + bool ret = setPermissionData(m_key.version(), + schema, princData.first, m_principalKey, auth::COND_ADMIN_ROLE, @@ -897,10 +934,10 @@ bool cond::CredentialStore::drop(const std::string& connectionString, m_log << "Dropping AUTHORIZATION, CREDENTIAL, AUTHENTICATION and SEQUENCE tables." << std::endl; coral::ISchema& schema = m_session->nominalSchema(); - schema.dropIfExistsTable(COND_AUTHORIZATION_TABLE); - schema.dropIfExistsTable(COND_CREDENTIAL_TABLE); - schema.dropIfExistsTable(COND_AUTHENTICATION_TABLE); - schema.dropIfExistsTable(SEQUENCE_TABLE_NAME); + schema.dropIfExistsTable(tname(AUTHORIZATION_TABLE, m_key.version())); + schema.dropIfExistsTable(tname(CREDENTIAL_TABLE, m_key.version())); + schema.dropIfExistsTable(tname(AUTHENTICATION_TABLE, m_key.version())); + schema.dropIfExistsTable(tname(SEQUENCE_TABLE, m_key.version())); session.close(); return true; } @@ -918,7 +955,7 @@ bool cond::CredentialStore::resetAdmin(const std::string& userName, const std::s const std::string& principalName = m_key.principalName(); const std::string& authenticationKey = m_key.principalKey(); PrincipalData princData; - if (!selectPrincipal(schema, principalName, princData)) { + if (!selectPrincipal(m_key.version(), schema, principalName, princData)) { std::string msg("User \""); msg += principalName + "\" has not been found."; throwException(msg, "CredentialStore::resetAdmin"); @@ -926,11 +963,12 @@ bool cond::CredentialStore::resetAdmin(const std::string& userName, const std::s auth::Cipher cipher0(authenticationKey); m_principalKey = cipher0.b64decrypt(princData.principalKey); - auto p = updatePrincipalData(schema, authenticationKey, principalName, m_principalKey, false, m_log); + auto p = updatePrincipalData(m_key.version(), schema, authenticationKey, principalName, m_principalKey, false, m_log); std::string credentialAccessLabel = schemaLabel(m_serviceName, userName); - auto connParams = - updateConnectionData(schema, m_principalKey, credentialAccessLabel, userName, password, true, m_log); - bool ret = setPermissionData(schema, + auto connParams = updateConnectionData( + m_key.version(), schema, m_principalKey, credentialAccessLabel, userName, password, true, m_log); + bool ret = setPermissionData(m_key.version(), + schema, p.first, m_principalKey, auth::COND_ADMIN_ROLE, @@ -948,7 +986,8 @@ bool cond::CredentialStore::updatePrincipal(const std::string& principalName, CSScopedSession session(*this); session.start(false); coral::ISchema& schema = m_session->nominalSchema(); - auto princData = updatePrincipalData(schema, authenticationKey, principalName, m_principalKey, false, m_log); + auto princData = + updatePrincipalData(m_key.version(), schema, authenticationKey, principalName, m_principalKey, false, m_log); bool ret = false; if (setAdmin) { int princId = princData.first; @@ -961,11 +1000,12 @@ bool cond::CredentialStore::updatePrincipal(const std::string& principalName, } std::string connLabel = permissions.front().connectionLabel; CredentialData credsData; - if (!selectConnection(schema, connLabel, credsData)) { + if (!selectConnection(m_key.version(), schema, connLabel, credsData)) { throwException("Credential Store connection has not been defined.", "CredentialStore::updatePrincipal"); } auth::Cipher adminCipher(m_principalKey); - ret = setPermissionData(schema, + ret = setPermissionData(m_key.version(), + schema, princId, princKey, auth::COND_ADMIN_ROLE, @@ -988,7 +1028,7 @@ bool cond::CredentialStore::setPermission(const std::string& principal, coral::ISchema& schema = m_session->nominalSchema(); PrincipalData princData; - bool found = selectPrincipal(schema, principal, princData); + bool found = selectPrincipal(m_key.version(), schema, principal, princData); if (!found) { std::string msg = "Principal \"" + principal + "\" does not exist in the database."; @@ -997,7 +1037,7 @@ bool cond::CredentialStore::setPermission(const std::string& principal, m_log << "Principal " << principal << " id: " << princData.id << std::endl; CredentialData credsData; - found = selectConnection(schema, connectionLabel, credsData); + found = selectConnection(m_key.version(), schema, connectionLabel, credsData); if (!found) { std::string msg = "Connection named \"" + connectionLabel + "\" does not exist in the database."; @@ -1005,7 +1045,8 @@ bool cond::CredentialStore::setPermission(const std::string& principal, } auth::Cipher cipher(m_principalKey); - bool ret = setPermissionData(schema, + bool ret = setPermissionData(m_key.version(), + schema, princData.id, cipher.b64decrypt(princData.adminKey), role, @@ -1028,7 +1069,7 @@ bool cond::CredentialStore::unsetPermission(const std::string& principal, coral::ISchema& schema = m_session->nominalSchema(); PrincipalData princData; - bool found = selectPrincipal(schema, principal, princData); + bool found = selectPrincipal(m_key.version(), schema, principal, princData); if (!found) { std::string msg = "Principal \"" + principal + "\" does not exist in the database."; @@ -1036,7 +1077,7 @@ bool cond::CredentialStore::unsetPermission(const std::string& principal, } m_log << "Removing permission for principal " << principal << " (id: " << princData.id << ") to access resource " << connectionString << " with role " << role << std::endl; - coral::ITableDataEditor& editor = schema.tableHandle(COND_AUTHORIZATION_TABLE).dataEditor(); + coral::ITableDataEditor& editor = schema.tableHandle(tname(AUTHORIZATION_TABLE, m_key.version())).dataEditor(); coral::AttributeList deleteData; deleteData.extend(P_ID_COL); deleteData.extend(ROLE_COL); @@ -1061,7 +1102,8 @@ bool cond::CredentialStore::updateConnection(const std::string& connectionLabel, m_session->transaction().start(); coral::ISchema& schema = m_session->nominalSchema(); - updateConnectionData(schema, m_principalKey, connectionLabel, userName, password, true, m_log); + std::string connLabel = to_lower(connectionLabel); + updateConnectionData(m_key.version(), schema, m_principalKey, connLabel, userName, password, true, m_log); session.close(); return true; @@ -1073,7 +1115,7 @@ bool cond::CredentialStore::removePrincipal(const std::string& principal) { coral::ISchema& schema = m_session->nominalSchema(); PrincipalData princData; - bool found = selectPrincipal(schema, principal, princData); + bool found = selectPrincipal(m_key.version(), schema, principal, princData); if (!found) { std::string msg = "Principal \"" + principal + "\" does not exist in the database."; @@ -1082,7 +1124,7 @@ bool cond::CredentialStore::removePrincipal(const std::string& principal) { m_log << "Removing principal " << principal << " (id: " << princData.id << ")" << std::endl; - coral::ITableDataEditor& editor0 = schema.tableHandle(COND_AUTHORIZATION_TABLE).dataEditor(); + coral::ITableDataEditor& editor0 = schema.tableHandle(tname(AUTHORIZATION_TABLE, m_key.version())).dataEditor(); coral::AttributeList deleteData0; deleteData0.extend(P_ID_COL); @@ -1090,7 +1132,7 @@ bool cond::CredentialStore::removePrincipal(const std::string& principal) { std::string whereClause0 = P_ID_COL + " = :" + P_ID_COL; editor0.deleteRows(whereClause0, deleteData0); - coral::ITableDataEditor& editor1 = schema.tableHandle(COND_AUTHENTICATION_TABLE).dataEditor(); + coral::ITableDataEditor& editor1 = schema.tableHandle(tname(AUTHENTICATION_TABLE, m_key.version())).dataEditor(); coral::AttributeList deleteData1; deleteData1.extend(PRINCIPAL_ID_COL); @@ -1109,7 +1151,7 @@ bool cond::CredentialStore::removeConnection(const std::string& connectionLabel) coral::ISchema& schema = m_session->nominalSchema(); CredentialData credsData; - bool found = selectConnection(schema, connectionLabel, credsData); + bool found = selectConnection(m_key.version(), schema, connectionLabel, credsData); if (!found) { std::string msg = "Connection named \"" + connectionLabel + "\" does not exist in the database."; @@ -1117,7 +1159,7 @@ bool cond::CredentialStore::removeConnection(const std::string& connectionLabel) } m_log << "Removing connection " << connectionLabel << std::endl; - coral::ITableDataEditor& editor0 = schema.tableHandle(COND_AUTHORIZATION_TABLE).dataEditor(); + coral::ITableDataEditor& editor0 = schema.tableHandle(tname(AUTHORIZATION_TABLE, m_key.version())).dataEditor(); coral::AttributeList deleteData0; deleteData0.extend(C_ID_COL); @@ -1125,7 +1167,7 @@ bool cond::CredentialStore::removeConnection(const std::string& connectionLabel) std::string whereClause0 = C_ID_COL + " = :" + C_ID_COL; editor0.deleteRows(whereClause0, deleteData0); - coral::ITableDataEditor& editor1 = schema.tableHandle(COND_CREDENTIAL_TABLE).dataEditor(); + coral::ITableDataEditor& editor1 = schema.tableHandle(tname(CREDENTIAL_TABLE, m_key.version())).dataEditor(); coral::AttributeList deleteData1; deleteData1.extend(CONNECTION_ID_COL); @@ -1146,8 +1188,8 @@ bool cond::CredentialStore::selectForUser(coral_bridge::AuthenticationCredential auth::Cipher cipher(m_principalKey); std::unique_ptr query(schema.newQuery()); - query->addToTableList(COND_AUTHORIZATION_TABLE, "AUTHO"); - query->addToTableList(COND_CREDENTIAL_TABLE, "CREDS"); + query->addToTableList(tname(AUTHORIZATION_TABLE, m_key.version()), "AUTHO"); + query->addToTableList(tname(CREDENTIAL_TABLE, m_key.version()), "CREDS"); coral::AttributeList readBuff; readBuff.extend("AUTHO." + ROLE_COL); readBuff.extend("AUTHO." + SCHEMA_COL); @@ -1182,10 +1224,10 @@ bool cond::CredentialStore::selectForUser(coral_bridge::AuthenticationCredential const std::string& connectionLabel = row["CREDS." + CONNECTION_LABEL_COL].data(); const std::string& encryptedUserName = row["CREDS." + USERNAME_COL].data(); const std::string& encryptedPassword = row["CREDS." + PASSWORD_COL].data(); - const std::string& encryptedLabel = row["CREDS." + VERIFICATION_KEY_COL].data(); std::string authKey = cipher.b64decrypt(encryptedAuthKey); auth::Cipher connCipher(authKey); - if (connCipher.b64decrypt(encryptedLabel) == connectionLabel) { + std::string verificationString = connCipher.b64decrypt(row["CREDS." + VERIFICATION_KEY_COL].data()); + if (verificationString == connectionLabel) { destinationData.registerCredentials( connectionString, role, connCipher.b64decrypt(encryptedUserName), connCipher.b64decrypt(encryptedPassword)); } @@ -1203,8 +1245,8 @@ std::pair cond::CredentialStore::getUserCredentials(co auth::Cipher cipher(m_principalKey); std::unique_ptr query(schema.newQuery()); - query->addToTableList(COND_AUTHORIZATION_TABLE, "AUTHO"); - query->addToTableList(COND_CREDENTIAL_TABLE, "CREDS"); + query->addToTableList(tname(AUTHORIZATION_TABLE, m_key.version()), "AUTHO"); + query->addToTableList(tname(CREDENTIAL_TABLE, m_key.version()), "CREDS"); coral::AttributeList readBuff; readBuff.extend("AUTHO." + AUTH_KEY_COL); readBuff.extend("CREDS." + CONNECTION_LABEL_COL); @@ -1242,10 +1284,10 @@ std::pair cond::CredentialStore::getUserCredentials(co const std::string& connectionLabel = row["CREDS." + CONNECTION_LABEL_COL].data(); const std::string& encryptedUserName = row["CREDS." + USERNAME_COL].data(); const std::string& encryptedPassword = row["CREDS." + PASSWORD_COL].data(); - const std::string& encryptedLabel = row["CREDS." + VERIFICATION_KEY_COL].data(); std::string authKey = cipher.b64decrypt(encryptedAuthKey); auth::Cipher connCipher(authKey); - if (connCipher.b64decrypt(encryptedLabel) == connectionLabel) { + std::string verificationString = connCipher.b64decrypt(row["CREDS." + VERIFICATION_KEY_COL].data()); + if (verificationString == connectionLabel) { ret.first = connCipher.b64decrypt(encryptedUserName); ret.second = connCipher.b64decrypt(encryptedPassword); } @@ -1262,7 +1304,7 @@ bool cond::CredentialStore::importForPrincipal(const std::string& principal, coral::ISchema& schema = m_session->nominalSchema(); PrincipalData princData; - bool found = selectPrincipal(schema, principal, princData); + bool found = selectPrincipal(m_key.version(), schema, principal, princData); if (!found) { std::string msg = "Principal \"" + principal + "\" does not exist in the database."; @@ -1286,11 +1328,18 @@ bool cond::CredentialStore::importForPrincipal(const std::string& principal, std::string userName = iConn->second->valueForItem(coral::IAuthenticationCredentials::userItem()); std::string password = iConn->second->valueForItem(coral::IAuthenticationCredentials::passwordItem()); // first import the connections - std::pair conn = updateConnectionData( - schema, m_principalKey, schemaLabel(serviceName, userName), userName, password, forceUpdateConnection, m_log); + std::pair conn = updateConnectionData(m_key.version(), + schema, + m_principalKey, + schemaLabel(serviceName, userName), + userName, + password, + forceUpdateConnection, + m_log); auth::Cipher cipher(m_principalKey); // than set the permission for the specific role - setPermissionData(schema, princData.id, princKey, role, connectionString, conn.first, conn.second, m_log); + setPermissionData( + m_key.version(), schema, princData.id, princKey, role, connectionString, conn.first, conn.second, m_log); imported = true; } session.close(); @@ -1302,7 +1351,7 @@ bool cond::CredentialStore::listPrincipals(std::vector& destination session.start(true); coral::ISchema& schema = m_session->nominalSchema(); - std::unique_ptr query(schema.tableHandle(COND_AUTHENTICATION_TABLE).newQuery()); + std::unique_ptr query(schema.tableHandle(tname(AUTHENTICATION_TABLE, m_key.version())).newQuery()); coral::AttributeList readBuff; readBuff.extend(PRINCIPAL_NAME_COL); query->defineOutput(readBuff); @@ -1323,7 +1372,7 @@ bool cond::CredentialStore::listConnections(std::mapnominalSchema(); - std::unique_ptr query(schema.tableHandle(COND_CREDENTIAL_TABLE).newQuery()); + std::unique_ptr query(schema.tableHandle(tname(CREDENTIAL_TABLE, m_key.version())).newQuery()); coral::AttributeList readBuff; readBuff.extend(CONNECTION_LABEL_COL); readBuff.extend(USERNAME_COL); @@ -1370,9 +1419,9 @@ bool cond::CredentialStore::selectPermissions(const std::string& principalName, session.start(true); coral::ISchema& schema = m_session->nominalSchema(); std::unique_ptr query(schema.newQuery()); - query->addToTableList(COND_AUTHENTICATION_TABLE, "AUTHE"); - query->addToTableList(COND_AUTHORIZATION_TABLE, "AUTHO"); - query->addToTableList(COND_CREDENTIAL_TABLE, "CREDS"); + query->addToTableList(tname(AUTHENTICATION_TABLE, m_key.version()), "AUTHE"); + query->addToTableList(tname(AUTHORIZATION_TABLE, m_key.version()), "AUTHO"); + query->addToTableList(tname(CREDENTIAL_TABLE, m_key.version()), "CREDS"); coral::AttributeList readBuff; readBuff.extend("AUTHE." + PRINCIPAL_NAME_COL); readBuff.extend("AUTHO." + ROLE_COL); @@ -1429,8 +1478,8 @@ bool cond::CredentialStore::exportAll(coral_bridge::AuthenticationCredentialSet& session.start(true); coral::ISchema& schema = m_session->nominalSchema(); std::unique_ptr query(schema.newQuery()); - query->addToTableList(COND_AUTHORIZATION_TABLE, "AUTHO"); - query->addToTableList(COND_CREDENTIAL_TABLE, "CREDS"); + query->addToTableList(tname(AUTHORIZATION_TABLE, m_key.version()), "AUTHO"); + query->addToTableList(tname(CREDENTIAL_TABLE, m_key.version()), "CREDS"); coral::AttributeList readBuff; readBuff.extend("AUTHO." + ROLE_COL); readBuff.extend("AUTHO." + SCHEMA_COL); diff --git a/CondCore/CondDB/src/DbCore.h b/CondCore/CondDB/src/DbCore.h index 42dc567b6fbf1..f79b0fd09810a 100644 --- a/CondCore/CondDB/src/DbCore.h +++ b/CondCore/CondDB/src/DbCore.h @@ -29,6 +29,7 @@ #include "RelationalAccess/IQuery.h" #include "RelationalAccess/TableDescription.h" #include "RelationalAccess/ITable.h" +#include "RelationalAccess/IColumn.h" #include "RelationalAccess/ITableDataEditor.h" #include "RelationalAccess/IBulkOperation.h" #include "RelationalAccess/IBulkOperation.h" diff --git a/CondCore/CondDB/src/DecodingKey.cc b/CondCore/CondDB/src/DecodingKey.cc index 5bbbf85188971..585d4f7a2bf7a 100644 --- a/CondCore/CondDB/src/DecodingKey.cc +++ b/CondCore/CondDB/src/DecodingKey.cc @@ -19,6 +19,7 @@ static const char* b64str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxy static const std::string KEY_HEADER("Cond_Authentication_Key"); +static const std::string VERSIONPREFIX("V="); static const std::string NAMEPREFIX("N="); static const std::string KEYPREFIX("K="); static const std::string OWNERPREFIX("O="); @@ -95,6 +96,7 @@ std::string cond::auth::KeyGenerator::makeWithRandomSize(size_t maxSize) { std::string cond::auth::DecodingKey::templateFile() { std::stringstream s; + s << VERSIONPREFIX << KEY_FMT_VERSION << std::endl; s << NAMEPREFIX << "" << std::endl; s << OWNERPREFIX << "" << std::endl; s << KEYPREFIX << "" << std::endl; @@ -116,6 +118,7 @@ size_t cond::auth::DecodingKey::init(const std::string& keyFileName, const std:: m_fileName = keyFileName; m_pwd = password; m_mode = readMode; + m_version.clear(); m_principalName.clear(); m_principalKey.clear(); m_owner.clear(); @@ -141,7 +144,9 @@ size_t cond::auth::DecodingKey::init(const std::string& keyFileName, const std:: std::string line; getline(str, line, LineSeparator); if (line.size() > 3) { - if (line.substr(0, 2) == NAMEPREFIX) { + if (line.substr(0, 2) == VERSIONPREFIX) { + m_version = line.substr(2); + } else if (line.substr(0, 2) == NAMEPREFIX) { m_principalName = line.substr(2); } else if (line.substr(0, 2) == KEYPREFIX) { m_principalKey = line.substr(2); @@ -193,6 +198,7 @@ size_t cond::auth::DecodingKey::createFromInputFile(const std::string& inputFile std::string msg("Provided input file name is empty."); throwException(msg, "DecodingKey::readFromInputFile"); } + m_version.clear(); m_principalName.clear(); m_principalKey.clear(); m_owner.clear(); @@ -205,7 +211,9 @@ size_t cond::auth::DecodingKey::createFromInputFile(const std::string& inputFile getline(inputFile, line); params.clear(); if (line.size() > 3) { - if (line.substr(0, 2) == NAMEPREFIX) { + if (line.substr(0, 2) == VERSIONPREFIX) { + m_version = line.substr(2); + } else if (line.substr(0, 2) == NAMEPREFIX) { m_principalName = line.substr(2); } else if (line.substr(0, 2) == KEYPREFIX) { m_principalKey = line.substr(2); @@ -237,6 +245,7 @@ size_t cond::auth::DecodingKey::createFromInputFile(const std::string& inputFile } void cond::auth::DecodingKey::list(std::ostream& out) { + out << VERSIONPREFIX << m_version << std::endl; out << NAMEPREFIX << m_principalName << std::endl; out << KEYPREFIX << m_principalKey << std::endl; out << OWNERPREFIX << m_owner << std::endl; @@ -254,6 +263,9 @@ void cond::auth::DecodingKey::flush() { if (outFile.is_open()) { std::stringstream content; content << KEY_HEADER << LineSeparator; + if (!m_version.empty()) { + content << VERSIONPREFIX << m_version << LineSeparator; + } if (!m_principalName.empty()) { content << NAMEPREFIX << m_principalName << LineSeparator; } diff --git a/CondCore/CondDB/src/IDbAuthentication.h b/CondCore/CondDB/src/IDbAuthentication.h new file mode 100644 index 0000000000000..2fc748d10bb67 --- /dev/null +++ b/CondCore/CondDB/src/IDbAuthentication.h @@ -0,0 +1,17 @@ +#ifndef CondCore_CondDB_IDbAuthentication_h +#define CondCore_CondDB_IDbAuthentication_h + +#include + +namespace cond { + + namespace persistency { + + class IDbAuthentication { + public: + virtual ~IDbAuthentication() {} + virtual std::string principalName() = 0; + }; + } // namespace persistency +} // namespace cond +#endif diff --git a/CondCore/CondDB/src/IDbSchema.h b/CondCore/CondDB/src/IDbSchema.h index 3edd4f1bc1270..ab64dc8fa448e 100644 --- a/CondCore/CondDB/src/IDbSchema.h +++ b/CondCore/CondDB/src/IDbSchema.h @@ -23,7 +23,8 @@ namespace cond { std::string& objectType, cond::SynchronizationType& synchronizationType, cond::Time_t& endOfValidity, - cond::Time_t& lastValidatedTime) = 0; + cond::Time_t& lastValidatedTime, + int& protectionCode) = 0; virtual bool getMetadata(const std::string& name, std::string& description, boost::posix_time::ptime& insertionTime, @@ -47,7 +48,8 @@ namespace cond { virtual void updateValidity(const std::string& name, cond::Time_t lastValidatedTime, const boost::posix_time::ptime& updateTime) = 0; - virtual void setValidationMode() = 0; + virtual void setProtectionCode(const std::string& name, int code) = 0; + virtual void unsetProtectionCode(const std::string& name, int code) = 0; }; class IPayloadTable { @@ -103,39 +105,23 @@ namespace cond { virtual void erase(const std::string& tag) = 0; }; - class ITagMigrationTable { + class ITagAccessPermissionTable { public: - virtual ~ITagMigrationTable() {} + virtual ~ITagAccessPermissionTable() {} virtual bool exists() = 0; virtual void create() = 0; - virtual bool select(const std::string& sourceAccount, - const std::string& sourceTag, - std::string& tagName, - int& statusCode) = 0; - virtual void insert(const std::string& sourceAccount, - const std::string& sourceTag, - const std::string& tagName, - int statusCode, - const boost::posix_time::ptime& insertionTime) = 0; - virtual void updateValidationCode(const std::string& sourceAccount, - const std::string& sourceTag, - int statusCode) = 0; - }; - - class IPayloadMigrationTable { - public: - virtual ~IPayloadMigrationTable() {} - virtual bool exists() = 0; - virtual void create() = 0; - virtual bool select(const std::string& sourceAccount, const std::string& sourceToken, std::string& payloadId) = 0; - virtual void insert(const std::string& sourceAccount, - const std::string& sourceToken, - const std::string& payloadId, - const boost::posix_time::ptime& insertionTime) = 0; - virtual void update(const std::string& sourceAccount, - const std::string& sourceToken, - const std::string& payloadId, - const boost::posix_time::ptime& insertionTime) = 0; + virtual bool getAccessPermission(const std::string& tagName, + const std::string& credential, + int credentialType, + int accessType) = 0; + virtual void setAccessPermission(const std::string& tagName, + const std::string& credential, + int credentialType, + int accessType) = 0; + virtual void removeAccessPermission(const std::string& tagName, + const std::string& credential, + int credentialType) = 0; + virtual void removeEntriesForCredential(const std::string& credential, int credentialType) = 0; }; class ITagLogTable { @@ -161,6 +147,7 @@ namespace cond { virtual IIOVTable& iovTable() = 0; virtual IPayloadTable& payloadTable() = 0; virtual ITagLogTable& tagLogTable() = 0; + virtual ITagAccessPermissionTable& tagAccessPermissionTable() = 0; }; class IGTTable { diff --git a/CondCore/CondDB/src/IOVEditor.cc b/CondCore/CondDB/src/IOVEditor.cc index efeae1e85afe6..68ebf1f8c848d 100644 --- a/CondCore/CondDB/src/IOVEditor.cc +++ b/CondCore/CondDB/src/IOVEditor.cc @@ -1,4 +1,5 @@ #include "CondCore/CondDB/interface/IOVEditor.h" +#include "CondCore/CondDB/interface/Auth.h" #include "CondCore/CondDB/interface/Utils.h" #include "SessionImpl.h" // @@ -33,8 +34,8 @@ namespace cond { // buffer for the iov sequence std::vector > iovBuffer; std::vector > deleteBuffer; - bool validationMode = false; std::set changes; + int protectionCode = 0; }; IOVEditor::IOVEditor() : m_data(), m_session() {} @@ -59,6 +60,8 @@ namespace cond { IOVEditor::IOVEditor(const IOVEditor& rhs) : m_data(rhs.m_data), m_session(rhs.m_session) {} + IOVEditor::~IOVEditor() {} + IOVEditor& IOVEditor::operator=(const IOVEditor& rhs) { m_data = rhs.m_data; m_session = rhs.m_session; @@ -73,9 +76,32 @@ namespace cond { m_data->payloadType, m_data->synchronizationType, m_data->endOfValidity, - m_data->lastValidatedTime)) { + m_data->lastValidatedTime, + m_data->protectionCode)) { cond::throwException("Tag \"" + tag + "\" has not been found in the database.", "IOVEditor::load"); } + if (m_data->protectionCode) { + if (m_data->protectionCode & cond::auth::COND_DBTAG_WRITE_ACCESS_CODE) { + bool writeAllowed = m_session->iovSchema().tagAccessPermissionTable().getAccessPermission( + tag, + m_session->principalName, + cond::auth::COND_DBKEY_CREDENTIAL_CODE, + cond::auth::COND_DBTAG_WRITE_ACCESS_CODE); + if (!writeAllowed) + cond::throwException( + "Tag \"" + tag + "\" can't be accessed for update by db-user \"" + m_session->principalName + "\".", + "IOVEditor::load"); + } + if (m_data->protectionCode & cond::auth::COND_DBTAG_LOCK_ACCESS_CODE) { + bool mylock = m_session->iovSchema().tagAccessPermissionTable().getAccessPermission( + tag, m_session->sessionHash, cond::auth::COND_SESSION_HASH_CODE, cond::auth::COND_DBTAG_LOCK_ACCESS_CODE); + if (!mylock) + cond::throwException( + "Tag \"" + tag + "\" can't be accessed for update, because it has been locked by an other session. \"" + + m_session->principalName + "\".", + "IOVEditor::load"); + } + } m_data->tag = tag; m_data->exists = true; m_data->change = false; @@ -131,11 +157,6 @@ namespace cond { } } - void IOVEditor::setValidationMode() { - if (m_data.get()) - m_data->validationMode = true; - } - void IOVEditor::insert(cond::Time_t since, const cond::Hash& payloadHash, bool checkType) { boost::posix_time::ptime now = boost::posix_time::microsec_clock::universal_time(); insert(since, payloadHash, now, checkType); @@ -173,8 +194,8 @@ namespace cond { if (m_data->change || m_data->metadataChange) { if (m_data->metadataChange && m_data->description.empty()) throwException("A non-empty description string is mandatory.", "IOVEditor::flush"); - if (m_data->validationMode) - m_session->iovSchema().tagTable().setValidationMode(); + //if (m_data->validationMode) + // m_session->iovSchema().tagTable().setValidationMode(); if (!m_data->exists) { // set the creation time ( only available in the migration from v1...) if (m_data->creationTime.is_not_a_date_time()) @@ -300,6 +321,52 @@ namespace cond { return flush(logText, boost::posix_time::microsec_clock::universal_time(), forceInsertion); } + bool IOVEditor::isLocked() const { return m_data->protectionCode & cond::auth::COND_DBTAG_LOCK_ACCESS_CODE; } + + void IOVEditor::lock() { + if (isLocked()) + return; + checkTransaction("IOVEditor::lock"); + m_session->iovSchema().tagAccessPermissionTable().setAccessPermission(m_data->tag, + m_session->sessionHash, + cond::auth::COND_SESSION_HASH_CODE, + cond::auth::COND_DBTAG_LOCK_ACCESS_CODE); + m_data->protectionCode |= cond::auth::COND_DBTAG_LOCK_ACCESS_CODE; + m_session->iovSchema().tagTable().setProtectionCode(m_data->tag, cond::auth::COND_DBTAG_LOCK_ACCESS_CODE); + m_session->lockedTags.insert(m_data->tag); + std::string lt("-"); + std::string action("Lock set by session "); + action += m_session->sessionHash; + m_session->iovSchema().tagLogTable().insert(m_data->tag, + boost::posix_time::microsec_clock::universal_time(), + cond::getUserName(), + cond::getHostName(), + cond::getCommand(), + action, + lt); + } + + void IOVEditor::unlock() { + if (!isLocked()) + return; + checkTransaction("IOVEditor::unlock"); + m_session->iovSchema().tagAccessPermissionTable().removeAccessPermission( + m_data->tag, m_session->sessionHash, cond::auth::COND_SESSION_HASH_CODE); + m_data->protectionCode &= cond::auth::COND_DBTAG_WRITE_ACCESS_CODE; + m_session->iovSchema().tagTable().unsetProtectionCode(m_data->tag, cond::auth::COND_DBTAG_LOCK_ACCESS_CODE); + m_session->lockedTags.erase(m_data->tag); + std::string lt("-"); + std::string action("Lock released by session "); + action += m_session->sessionHash; + m_session->iovSchema().tagLogTable().insert(m_data->tag, + boost::posix_time::microsec_clock::universal_time(), + cond::getUserName(), + cond::getHostName(), + cond::getCommand(), + action, + lt); + } + void IOVEditor::checkTransaction(const std::string& ctx) { if (!m_session.get()) throwException("The session is not active.", ctx); diff --git a/CondCore/CondDB/src/IOVProxy.cc b/CondCore/CondDB/src/IOVProxy.cc index 12edf2ac79b70..d62671d87e208 100644 --- a/CondCore/CondDB/src/IOVProxy.cc +++ b/CondCore/CondDB/src/IOVProxy.cc @@ -144,12 +144,14 @@ namespace cond { checkTransaction("IOVProxyNew::load"); + int dummy; if (!m_session->iovSchema().tagTable().select(tagName, m_data->tagInfo.timeType, m_data->tagInfo.payloadType, m_data->tagInfo.synchronizationType, m_data->tagInfo.endOfValidity, - m_data->tagInfo.lastValidatedTime)) { + m_data->tagInfo.lastValidatedTime, + dummy)) { throwException("Tag \"" + tagName + "\" has not been found in the database.", "IOVProxy::load"); } m_data->tagInfo.name = tagName; diff --git a/CondCore/CondDB/src/IOVSchema.cc b/CondCore/CondDB/src/IOVSchema.cc index 1d3d80697dad9..2994b5f16fab7 100644 --- a/CondCore/CondDB/src/IOVSchema.cc +++ b/CondCore/CondDB/src/IOVSchema.cc @@ -1,4 +1,5 @@ #include "CondCore/CondDB/interface/Exception.h" +#include "CondCore/CondDB/interface/Auth.h" #include "IOVSchema.h" // #include @@ -32,7 +33,15 @@ namespace cond { return tmp; } - TAG::Table::Table(coral::ISchema& schema) : m_schema(schema) {} + TAG::Table::Table(coral::ISchema& schema) : m_schema(schema) { + if (exists()) { + std::set columns; + int ncols = m_schema.tableHandle(tname).description().numberOfColumns(); + for (int i = 0; i < ncols; i++) + columns.insert(m_schema.tableHandle(tname).description().columnDescription(i).name()); + m_isProtectable = columns.count(PROTECTION_CODE::name); + } + } bool TAG::Table::Table::exists() { return existsTable(m_schema, tname); } @@ -48,10 +57,12 @@ namespace cond { DESCRIPTION, LAST_VALIDATED_TIME, INSERTION_TIME, - MODIFICATION_TIME> + MODIFICATION_TIME, + PROTECTION_CODE> descr(tname); descr.setPrimaryKey(); createTable(m_schema, descr.get()); + m_isProtectable = true; } bool TAG::Table::select(const std::string& name) { @@ -68,13 +79,24 @@ namespace cond { std::string& objectType, cond::SynchronizationType& synchronizationType, cond::Time_t& endOfValidity, - cond::Time_t& lastValidatedTime) { - Query q(m_schema); - q.addCondition(name); - for (const auto& row : q) - std::tie(timeType, objectType, synchronizationType, endOfValidity, lastValidatedTime) = row; - - return q.retrievedRows(); + cond::Time_t& lastValidatedTime, + int& protectionCode) { + if (isProtectable()) { + Query q( + m_schema); + q.addCondition(name); + for (const auto& row : q) + std::tie(timeType, objectType, synchronizationType, endOfValidity, lastValidatedTime, protectionCode) = row; + return q.retrievedRows(); + } else { + Query q(m_schema); + q.addCondition(name); + for (const auto& row : q) + std::tie(timeType, objectType, synchronizationType, endOfValidity, lastValidatedTime) = row; + protectionCode = 0; + + return q.retrievedRows(); + } } bool TAG::Table::getMetadata(const std::string& name, @@ -96,25 +118,49 @@ namespace cond { const std::string& description, cond::Time_t lastValidatedTime, const boost::posix_time::ptime& insertionTime) { - RowBuffer - dataToInsert(std::tie(name, - timeType, - objectType, - synchronizationType, - endOfValidity, - description, - lastValidatedTime, - insertionTime, - insertionTime)); - insertInTable(m_schema, tname, dataToInsert.get()); + if (isProtectable()) { + RowBuffer + dataToInsert(std::tie(name, + timeType, + objectType, + synchronizationType, + endOfValidity, + description, + lastValidatedTime, + insertionTime, + insertionTime, + cond::auth::COND_DBTAG_NO_PROTECTION_CODE)); + insertInTable(m_schema, tname, dataToInsert.get()); + } else { + RowBuffer + dataToInsert(std::tie(name, + timeType, + objectType, + synchronizationType, + endOfValidity, + description, + lastValidatedTime, + insertionTime, + insertionTime)); + insertInTable(m_schema, tname, dataToInsert.get()); + } } void TAG::Table::update(const std::string& name, @@ -147,6 +193,38 @@ namespace cond { updateTable(m_schema, tname, buffer); } + void TAG::Table::setProtectionCode(const std::string& name, int code) { + if (!isProtectable()) { + throwException("Tag in this schema are not protectable.", "TAG::Table::create"); + } + Query q(m_schema); + q.addCondition(name); + int newCode = 0; + for (const auto& row : q) + std::tie(newCode) = row; + newCode |= code; + UpdateBuffer buffer; + buffer.setColumnData(std::tie(newCode)); + buffer.addWhereCondition(name); + updateTable(m_schema, tname, buffer); + } + + void TAG::Table::unsetProtectionCode(const std::string& name, int code) { + if (!isProtectable()) { + throwException("Tag in this schema are not protectable.", "TAG::Table::unsetProtectionCode"); + } + Query q(m_schema); + q.addCondition(name); + int presentCode = 0; + for (const auto& row : q) + std::tie(presentCode) = row; + int newCode = presentCode & (~code); + UpdateBuffer buffer; + buffer.setColumnData(std::tie(newCode)); + buffer.addWhereCondition(name); + updateTable(m_schema, tname, buffer); + } + IOV::Table::Table(coral::ISchema& schema) : m_schema(schema) {} bool IOV::Table::exists() { return existsTable(m_schema, tname); } @@ -340,6 +418,61 @@ namespace cond { insertInTable(m_schema, tname, dataToInsert.get()); } + TAG_AUTHORIZATION::Table::Table(coral::ISchema& schema) : m_schema(schema) {} + + bool TAG_AUTHORIZATION::Table::exists() { return existsTable(m_schema, tname); } + + void TAG_AUTHORIZATION::Table::create() { + if (exists()) { + throwException("TAG_AUTHORIZATION table already exists in this schema.", "TAG_AUTHORIZATION::create"); + } + TableDescription descr(tname); + descr.setPrimaryKey(); + descr.setForeignKey("TAG_NAME_FK"); + createTable(m_schema, descr.get()); + } + + bool TAG_AUTHORIZATION::Table::getAccessPermission(const std::string& tagName, + const std::string& credential, + int credentialType, + int accessType) { + Query q(m_schema); + q.addCondition(tagName); + q.addCondition(credential); + q.addCondition(credentialType); + int allowedAccess = 0; + for (auto row : q) { + allowedAccess = std::get<0>(row); + } + return allowedAccess & accessType; + } + + void TAG_AUTHORIZATION::Table::setAccessPermission(const std::string& tagName, + const std::string& credential, + int credentialType, + int accessType) { + RowBuffer dataToInsert( + std::tie(tagName, accessType, credential, credentialType)); + insertInTable(m_schema, tname, dataToInsert.get()); + } + + void TAG_AUTHORIZATION::Table::removeAccessPermission(const std::string& tagName, + const std::string& credential, + int credentialType) { + DeleteBuffer buffer; + buffer.addWhereCondition(tagName); + buffer.addWhereCondition(credential); + buffer.addWhereCondition(credentialType); + deleteFromTable(m_schema, tname, buffer); + } + + void TAG_AUTHORIZATION::Table::removeEntriesForCredential(const std::string& credential, int credentialType) { + DeleteBuffer buffer; + buffer.addWhereCondition(credential); + buffer.addWhereCondition(credentialType); + deleteFromTable(m_schema, tname, buffer); + } + PAYLOAD::Table::Table(coral::ISchema& schema) : m_schema(schema) {} bool PAYLOAD::Table::exists() { return existsTable(m_schema, tname); } @@ -413,7 +546,11 @@ namespace cond { } IOVSchema::IOVSchema(coral::ISchema& schema) - : m_tagTable(schema), m_iovTable(schema), m_tagLogTable(schema), m_payloadTable(schema) {} + : m_tagTable(schema), + m_iovTable(schema), + m_tagLogTable(schema), + m_tagAccessPermissionTable(schema), + m_payloadTable(schema) {} bool IOVSchema::exists() { if (!m_tagTable.exists()) @@ -432,6 +569,7 @@ namespace cond { m_payloadTable.create(); m_iovTable.create(); m_tagLogTable.create(); + m_tagAccessPermissionTable.create(); created = true; } return created; @@ -443,6 +581,13 @@ namespace cond { ITagLogTable& IOVSchema::tagLogTable() { return m_tagLogTable; } + ITagAccessPermissionTable& IOVSchema::tagAccessPermissionTable() { + if (!m_tagTable.isProtectable()) { + throwException("Tag in this schema are not protectable.", "IOVSchema::tagAccessPermissionTable"); + } + return m_tagAccessPermissionTable; + } + IPayloadTable& IOVSchema::payloadTable() { return m_payloadTable; } } // namespace persistency diff --git a/CondCore/CondDB/src/IOVSchema.h b/CondCore/CondDB/src/IOVSchema.h index 23bdb8bdbc63b..a268795fd1dc0 100644 --- a/CondCore/CondDB/src/IOVSchema.h +++ b/CondCore/CondDB/src/IOVSchema.h @@ -20,6 +20,7 @@ namespace cond { conddb_column(LAST_VALIDATED_TIME, cond::Time_t); conddb_column(INSERTION_TIME, boost::posix_time::ptime); conddb_column(MODIFICATION_TIME, boost::posix_time::ptime); + conddb_column(PROTECTION_CODE, int); class Table : public ITagTable { public: @@ -33,7 +34,8 @@ namespace cond { std::string& objectType, cond::SynchronizationType& synchronizationType, cond::Time_t& endOfValidity, - cond::Time_t& lastValidatedTime) override; + cond::Time_t& lastValidatedTime, + int& protectionCode) override; bool getMetadata(const std::string& name, std::string& description, boost::posix_time::ptime& insertionTime, @@ -57,10 +59,14 @@ namespace cond { void updateValidity(const std::string& name, cond::Time_t lastValidatedTime, const boost::posix_time::ptime& updateTime) override; - void setValidationMode() override {} + void setProtectionCode(const std::string& name, int code) override; + void unsetProtectionCode(const std::string& name, int code) override; + + bool isProtectable() { return m_isProtectable; } private: coral::ISchema& m_schema; + bool m_isProtectable = false; }; } @@ -180,6 +186,36 @@ namespace cond { }; } + conddb_table(TAG_AUTHORIZATION) { + conddb_column(TAG_NAME, std::string); + conddb_column(ACCESS_TYPE, int); + conddb_column(CREDENTIAL, std::string); + conddb_column(CREDENTIAL_TYPE, int); + + class Table : public ITagAccessPermissionTable { + public: + explicit Table(coral::ISchema& schema); + ~Table() override {} + bool exists() override; + void create() override; + bool getAccessPermission(const std::string& tagName, + const std::string& credential, + int credentialType, + int accessType) override; + void setAccessPermission(const std::string& tagName, + const std::string& credential, + int credentialType, + int accessType) override; + void removeAccessPermission(const std::string& tagName, + const std::string& credential, + int credentialType) override; + void removeEntriesForCredential(const std::string& credential, int credentialType) override; + + private: + coral::ISchema& m_schema; + }; + } + conddb_table(TAG_LOG) { conddb_column(TAG_NAME, std::string); conddb_column(EVENT_TIME, boost::posix_time::ptime); @@ -217,12 +253,14 @@ namespace cond { ITagTable& tagTable() override; IIOVTable& iovTable() override; ITagLogTable& tagLogTable() override; + ITagAccessPermissionTable& tagAccessPermissionTable() override; IPayloadTable& payloadTable() override; private: TAG::Table m_tagTable; IOV::Table m_iovTable; TAG_LOG::Table m_tagLogTable; + TAG_AUTHORIZATION::Table m_tagAccessPermissionTable; PAYLOAD::Table m_payloadTable; }; diff --git a/CondCore/CondDB/src/Logger.cc b/CondCore/CondDB/src/Logger.cc index 8d6a592e1fa60..e51177948177c 100644 --- a/CondCore/CondDB/src/Logger.cc +++ b/CondCore/CondDB/src/Logger.cc @@ -1,10 +1,13 @@ #include "CondCore/CondDB/interface/Logger.h" -#include "CondCore/CondDB/interface/ConnectionPool.h" +#include "CondCore/CondDB/interface/Auth.h" #include "CondCore/CondDB/interface/Exception.h" // #include "DbCore.h" +#include "CoralMsgReporter.h" #include "RelationalAccess/ITransaction.h" // +#include "RelationalAccess/ConnectionService.h" +#include "RelationalAccess/ISessionProxy.h" #include #include // @@ -45,7 +48,6 @@ namespace cond { Logger::Logger(const std::string& jobName) : m_jobName(jobName), m_connectionString(""), - m_sharedConnectionPool(nullptr), m_started(false), m_startTime(), m_endTime(), @@ -53,13 +55,16 @@ namespace cond { m_log() {} // - Logger::~Logger() {} - - void Logger::setDbDestination(const std::string& connectionString, ConnectionPool& connectionPool) { - m_connectionString = connectionString; - m_sharedConnectionPool = &connectionPool; + Logger::~Logger() { + auto dispatcher = m_dispatcher.lock(); + if (dispatcher.get()) + dispatcher->unsubscribe(); } + void Logger::subscribeCoralMessages(const std::weak_ptr& dispatcher) { m_dispatcher = dispatcher; } + + void Logger::setDbDestination(const std::string& connectionString) { m_connectionString = connectionString; } + // void Logger::start() { if (!m_started) { @@ -114,13 +119,12 @@ namespace cond { // void Logger::saveOnDb() { if (!m_log.str().empty()) { - if (m_sharedConnectionPool == nullptr) { - throwException("Connection pool handle has not been provided.", "Logger::saveOnDb"); - } if (m_connectionString.empty()) { throwException("Connection string for destination database has not been provided.", "Logger::saveOnDb"); } - auto coralSession = m_sharedConnectionPool->createCoralSession(m_connectionString, true); + coral::ConnectionService connServ; + std::unique_ptr coralSession( + connServ.connect(m_connectionString, auth::COND_WRITER_ROLE, coral::Update)); coralSession->transaction().start(false); try { O2O_RUN::Table destinationTable(coralSession->nominalSchema()); diff --git a/CondCore/CondDB/src/SessionImpl.cc b/CondCore/CondDB/src/SessionImpl.cc index 20ee54dfd1c5d..512e2b22ce2ad 100644 --- a/CondCore/CondDB/src/SessionImpl.cc +++ b/CondCore/CondDB/src/SessionImpl.cc @@ -1,4 +1,6 @@ #include "CondCore/CondDB/interface/Exception.h" +#include "CondCore/CondDB/interface/Auth.h" +#include "CondCore/CondDB/interface/DecodingKey.h" #include "SessionImpl.h" #include @@ -30,8 +32,13 @@ namespace cond { SessionImpl::SessionImpl() : coralSession() {} - SessionImpl::SessionImpl(std::shared_ptr& session, const std::string& connectionStr) - : coralSession(session), connectionString(connectionStr) {} + SessionImpl::SessionImpl(std::shared_ptr& session, + const std::string& connectionStr, + const std::string& principalNm) + : coralSession(session), sessionHash(""), connectionString(connectionStr), principalName(principalNm) { + cond::auth::KeyGenerator kg; + sessionHash = kg.make(cond::auth::COND_SESSION_HASH_SIZE); + } SessionImpl::~SessionImpl() { close(); } @@ -40,6 +47,11 @@ namespace cond { if (coralSession->transaction().isActive()) { coralSession->transaction().rollback(); } + if (!lockedTags.empty()) { + coralSession->transaction().start(true); + releaseTagLocks(); + coralSession->transaction().commit(); + } coralSession.reset(); } transaction.reset(); @@ -98,6 +110,24 @@ namespace cond { return transaction->isActive(); } + void SessionImpl::releaseTagLocks() { + iovSchema().tagAccessPermissionTable().removeEntriesForCredential(sessionHash, + cond::auth::COND_SESSION_HASH_CODE); + std::string lt("-"); + std::string action("Lock removed by session "); + action += sessionHash; + for (const auto& tag : lockedTags) { + iovSchema().tagTable().unsetProtectionCode(tag, cond::auth::COND_DBTAG_LOCK_ACCESS_CODE); + iovSchema().tagLogTable().insert(tag, + boost::posix_time::microsec_clock::universal_time(), + cond::getUserName(), + cond::getHostName(), + cond::getCommand(), + action, + lt); + } + } + void SessionImpl::openIovDb(SessionImpl::FailureOnOpeningPolicy policy) { if (!transaction.get()) throwException("The transaction is not active.", "SessionImpl::openIovDb"); diff --git a/CondCore/CondDB/src/SessionImpl.h b/CondCore/CondDB/src/SessionImpl.h index d925fc467cdf6..ced545814a3af 100644 --- a/CondCore/CondDB/src/SessionImpl.h +++ b/CondCore/CondDB/src/SessionImpl.h @@ -43,7 +43,9 @@ namespace cond { public: SessionImpl(); - SessionImpl(std::shared_ptr& session, const std::string& connectionString); + SessionImpl(std::shared_ptr& session, + const std::string& connectionString, + const std::string& principalName); ~SessionImpl(); @@ -65,14 +67,17 @@ namespace cond { public: // allows for session shared among more services. To be changed to unique_ptr when we stop needing this feature. std::shared_ptr coralSession; - // not really useful outside the ORA bridging... + std::string sessionHash; std::string connectionString; + std::string principalName; + std::set lockedTags; std::unique_ptr transaction; std::unique_ptr iovSchemaHandle; std::unique_ptr gtSchemaHandle; std::unique_ptr runInfoSchemaHandle; private: + void releaseTagLocks(); std::recursive_mutex transactionMutex; std::unique_lock transactionLock; }; diff --git a/CondCore/DBOutputService/interface/OnlineDBOutputService.h b/CondCore/DBOutputService/interface/OnlineDBOutputService.h index 910fe2acd900a..e72dbed396b21 100644 --- a/CondCore/DBOutputService/interface/OnlineDBOutputService.h +++ b/CondCore/DBOutputService/interface/OnlineDBOutputService.h @@ -82,7 +82,6 @@ namespace cond { cond::Time_t m_runNumber; size_t m_latencyInLumisections; std::string m_omsServiceUrl; - std::string m_lastLumiUrl; std::string m_lastLumiFile; std::string m_preLoadConnectionString; bool m_debug; diff --git a/CondCore/DBOutputService/interface/PoolDBOutputService.h b/CondCore/DBOutputService/interface/PoolDBOutputService.h index d7c87728db99c..f87e8b0c20a09 100644 --- a/CondCore/DBOutputService/interface/PoolDBOutputService.h +++ b/CondCore/DBOutputService/interface/PoolDBOutputService.h @@ -44,6 +44,12 @@ namespace cond { // return the database session in use cond::persistency::Session session() const; + // + void lockRecords(); + + // + void releaseLocks(); + // void startTransaction(); void commitTransaction(); diff --git a/CondCore/DBOutputService/src/OnlineDBOutputService.cc b/CondCore/DBOutputService/src/OnlineDBOutputService.cc index 24f109d043a3a..babbf7d2a7731 100644 --- a/CondCore/DBOutputService/src/OnlineDBOutputService.cc +++ b/CondCore/DBOutputService/src/OnlineDBOutputService.cc @@ -9,7 +9,7 @@ static size_t getHtmlCallback(void* contents, size_t size, size_t nmemb, void* p return size * nmemb; } -bool getInfoFromDAQ(const std::string& urlString, std::string& info) { +bool getInfoFromService(const std::string& urlString, std::string& info) { CURL* curl; CURLcode res; std::string htmlBuffer; @@ -58,7 +58,7 @@ namespace cond { cond::Time_t getLastLumiFromOMS(const std::string& omsServiceUrl) { cond::Time_t lastLumiProcessed = cond::time::MIN_VAL; std::string info(""); - if (!getInfoFromDAQ(omsServiceUrl, info)) + if (!getInfoFromService(omsServiceUrl, info)) throw Exception("Can't get data from OMS Service."); std::istringstream sinfo(info); std::string srun; @@ -80,22 +80,13 @@ namespace cond { cond::service::OnlineDBOutputService::OnlineDBOutputService(const edm::ParameterSet& iConfig, edm::ActivityRegistry& iAR) : PoolDBOutputService(iConfig, iAR), - m_runNumber(iConfig.getUntrackedParameter("runNumber", 0)), + m_runNumber(iConfig.getUntrackedParameter("runNumber", 1)), m_latencyInLumisections(iConfig.getUntrackedParameter("latency", 1)), m_omsServiceUrl(iConfig.getUntrackedParameter("omsServiceUrl", "")), - m_lastLumiUrl(iConfig.getUntrackedParameter("lastLumiUrl", "")), m_preLoadConnectionString(iConfig.getUntrackedParameter("preLoadConnectionString", "")), m_debug(iConfig.getUntrackedParameter("debugLogging", false)) { if (m_omsServiceUrl.empty()) { - if (!m_lastLumiUrl.empty()) { - startTransaction(); - auto lastRun = PoolDBOutputService::session().getLastRun(); - if (lastRun.isOnGoing()) { - m_runNumber = lastRun.run; - } - } else { - m_lastLumiFile = iConfig.getUntrackedParameter("lastLumiFile", ""); - } + m_lastLumiFile = iConfig.getUntrackedParameter("lastLumiFile", ""); } } @@ -110,23 +101,13 @@ cond::Time_t cond::service::OnlineDBOutputService::getLastLumiProcessed() { << " Current run: " << cond::time::unpack(lastLumiProcessed).first << " lumi id:" << cond::time::unpack(lastLumiProcessed).second; } else { - if (!m_lastLumiUrl.empty()) { - std::string info(""); - if (!getInfoFromDAQ(m_lastLumiUrl, info)) - throw Exception("Can't get last Lumisection from DAQ."); - unsigned int lastL = boost::lexical_cast(info); - lastLumiProcessed = cond::time::lumiTime(m_runNumber, lastL); - logger().logInfo() << "Last lumi: " << lastLumiProcessed << " Current run: " << m_runNumber - << " lumi id:" << lastL; + if (!m_lastLumiFile.empty()) { + lastLumiProcessed = cond::getLatestLumiFromFile(m_lastLumiFile); + auto upkTime = cond::time::unpack(lastLumiProcessed); + logger().logInfo() << "Last lumi: " << lastLumiProcessed << " Current run: " << upkTime.first + << " lumi id:" << upkTime.second; } else { - if (m_lastLumiFile.empty()) { - throw Exception("File name for last lumi has not been provided."); - } else { - lastLumiProcessed = cond::getLatestLumiFromFile(m_lastLumiFile); - auto upkTime = cond::time::unpack(lastLumiProcessed); - logger().logInfo() << "Last lumi: " << lastLumiProcessed << " Current run: " << upkTime.first - << " lumi id:" << upkTime.second; - } + lastLumiProcessed = cond::time::lumiTime(m_runNumber, 1); } } return lastLumiProcessed; diff --git a/CondCore/DBOutputService/src/PoolDBOutputService.cc b/CondCore/DBOutputService/src/PoolDBOutputService.cc index f9e4d4c75a707..3f156f23f34f1 100644 --- a/CondCore/DBOutputService/src/PoolDBOutputService.cc +++ b/CondCore/DBOutputService/src/PoolDBOutputService.cc @@ -46,7 +46,6 @@ cond::service::PoolDBOutputService::PoolDBOutputService(const edm::ParameterSet& m_timetype = cond::time::timeTypeFromName(timetypestr); m_autoCommit = iConfig.getUntrackedParameter("autoCommit", false); m_writeTransactionDelay = iConfig.getUntrackedParameter("writeTransactionDelay", 0); - edm::ParameterSet connectionPset = iConfig.getParameter("DBParameters"); m_connection.setParameters(connectionPset); m_connection.setLogDestination(m_logger); @@ -55,10 +54,9 @@ cond::service::PoolDBOutputService::PoolDBOutputService(const edm::ParameterSet& m_session = m_connection.createSession(connectionString, true); bool saveLogsOnDb = iConfig.getUntrackedParameter("saveLogsOnDB", false); if (saveLogsOnDb) - m_logger.setDbDestination(connectionString, m_connection); + m_logger.setDbDestination(connectionString); // implicit start doStartTransaction(); - typedef std::vector Parameters; Parameters toPut = iConfig.getParameter("toPut"); for (Parameters::iterator itToPut = toPut.begin(); itToPut != toPut.end(); ++itToPut) @@ -93,6 +91,36 @@ cond::persistency::Session cond::service::PoolDBOutputService::newReadOnlySessio cond::persistency::Session cond::service::PoolDBOutputService::session() const { return m_session; } +void cond::service::PoolDBOutputService::lockRecords() { + std::lock_guard lock(m_mutex); + doStartTransaction(); + cond::persistency::TransactionScope scope(m_session.transaction()); + this->initDB(); + for (auto& iR : m_records) { + if (iR.second.m_isNewTag == false) { + cond::persistency::IOVEditor editor = m_session.editIov(iR.second.m_tag); + editor.lock(); + } + } + doCommitTransaction(); + scope.close(); +} + +void cond::service::PoolDBOutputService::releaseLocks() { + std::lock_guard lock(m_mutex); + doStartTransaction(); + cond::persistency::TransactionScope scope(m_session.transaction()); + this->initDB(); + for (auto& iR : m_records) { + if (iR.second.m_isNewTag == false) { + cond::persistency::IOVEditor editor = m_session.editIov(iR.second.m_tag); + editor.unlock(); + } + } + doCommitTransaction(); + scope.close(); +} + std::string cond::service::PoolDBOutputService::tag(const std::string& recordName) { return this->lookUpRecord(recordName).m_tag; } diff --git a/CondCore/DBOutputService/test/python/testIOVPayloadAnalyzer_cfg.py b/CondCore/DBOutputService/test/python/testIOVPayloadAnalyzer_cfg.py index 73aeb9d4bc656..1ba7580d61037 100644 --- a/CondCore/DBOutputService/test/python/testIOVPayloadAnalyzer_cfg.py +++ b/CondCore/DBOutputService/test/python/testIOVPayloadAnalyzer_cfg.py @@ -10,7 +10,7 @@ process.PoolDBOutputService = cms.Service("PoolDBOutputService", DBParameters = cms.PSet( - messageLevel = cms.untracked.int32(0), + messageLevel = cms.untracked.int32(3), authenticationPath = cms.untracked.string('.') ), timetype = cms.untracked.string('runnumber'), diff --git a/CondCore/DBOutputService/test/python/testLumiBasedUpdateAnalyzer_cfg.py b/CondCore/DBOutputService/test/python/testLumiBasedUpdateAnalyzer_cfg.py index 5cc6c027a4622..6fa65189230a0 100644 --- a/CondCore/DBOutputService/test/python/testLumiBasedUpdateAnalyzer_cfg.py +++ b/CondCore/DBOutputService/test/python/testLumiBasedUpdateAnalyzer_cfg.py @@ -9,8 +9,13 @@ ) process.MessageLogger = cms.Service("MessageLogger", - cout = cms.untracked.PSet(threshold = cms.untracked.string('DEBUG')), - destinations = cms.untracked.vstring('cout') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('DEBUG') + ) ) process.OnlineDBOutputService = cms.Service("OnlineDBOutputService", @@ -18,13 +23,12 @@ messageLevel = cms.untracked.int32(2), authenticationPath = cms.untracked.string('.') ), - #timetype = cms.untracked.string('runnumber'), jobName = cms.untracked.string("TestLumiBasedUpdate"), autoCommit = cms.untracked.bool(True), connect = cms.string('sqlite_file:test_lumi.db'), preLoadConnectionString = cms.untracked.string('sqlite_file:test_lumi.db'), #omsServiceUrl = cms.untracked.string('http://cmsoms-services.cms:9949/urn:xdaq-application:lid=100/getRunAndLumiSection'), - lastLumiFile = cms.untracked.string('lastLumi.txt'), + #lastLumiFile = cms.untracked.string('lastLumi.txt'), toPut = cms.VPSet(cms.PSet( record = cms.string('PedestalsRcd'), tag = cms.string('mytest'), diff --git a/CondCore/DBOutputService/test/python/testLumiBasedUpdateAnalyzer_oracle.cfg.py b/CondCore/DBOutputService/test/python/testLumiBasedUpdateAnalyzer_oracle.cfg.py index 9b2843be2a2b5..5276120555a44 100644 --- a/CondCore/DBOutputService/test/python/testLumiBasedUpdateAnalyzer_oracle.cfg.py +++ b/CondCore/DBOutputService/test/python/testLumiBasedUpdateAnalyzer_oracle.cfg.py @@ -30,17 +30,16 @@ process.OnlineDBOutputService = cms.Service("OnlineDBOutputService", DBParameters = cms.PSet( messageLevel = cms.untracked.int32(1), - authenticationPath = cms.untracked.string('/build/gg') + authenticationPath = cms.untracked.string('.') ), #timetype = cms.untracked.string('runnumber'), jobName = cms.untracked.string("TestLumiBasedUpdate"), connect = cms.string('oracle://cms_orcoff_prep/CMS_CONDITIONS'), preLoadConnectionString = cms.untracked.string('frontier://FrontierPrep/CMS_CONDITIONS'), runNumber = cms.untracked.uint64(options.runNumber), - #lastLumiFile = cms.untracked.string('/build/gg/last_lumi.txt'), + #lastLumiFile = cms.untracked.string('last_lumi.txt'), writeTransactionDelay = cms.untracked.uint32(options.transDelay), autoCommit = cms.untracked.bool(True), - lastLumiFile = cms.untracked.string('lastLumi.txt'), saveLogsOnDB = cms.untracked.bool(True), toPut = cms.VPSet(cms.PSet( record = cms.string('PedestalsRcd'), @@ -51,7 +50,6 @@ ) process.mytest = cms.EDAnalyzer("LumiBasedUpdateAnalyzer", - lastLumiFile = cms.untracked.string('/build/gg/last_lumi.txt'), record = cms.string('PedestalsRcd') ) diff --git a/CondCore/DBOutputService/test/stubs/IOVPayloadAnalyzer.cc b/CondCore/DBOutputService/test/stubs/IOVPayloadAnalyzer.cc index 61867e7f13231..ae60463dc3e51 100644 --- a/CondCore/DBOutputService/test/stubs/IOVPayloadAnalyzer.cc +++ b/CondCore/DBOutputService/test/stubs/IOVPayloadAnalyzer.cc @@ -41,5 +41,5 @@ void IOVPayloadAnalyzer::analyze(const edm::Event& evt, const edm::EventSetup& e //std::cout <<" tinfo name="< LumiBasedUpdateAnalyzer::LumiBasedUpdateAnalyzer(const edm::ParameterSet& iConfig) - : m_record(iConfig.getParameter("record")) { - m_lastLumiFile = iConfig.getUntrackedParameter("lastLumiFile", ""); - std::cout << "LumiBasedUpdateAnalyzer::LumiBasedUpdateAnalyzer" << std::endl; - m_prevLumi = 0; - m_prevLumiTime = std::chrono::steady_clock::now(); - m_omsServiceUrl = iConfig.getUntrackedParameter("omsServiceUrl", ""); -} + : m_record(iConfig.getParameter("record")) {} LumiBasedUpdateAnalyzer::~LumiBasedUpdateAnalyzer() { std::cout << "LumiBasedUpdateAnalyzer::~LumiBasedUpdateAnalyzer" << std::endl; } @@ -27,23 +21,14 @@ void LumiBasedUpdateAnalyzer::analyze(const edm::Event& evt, const edm::EventSet return; } mydbservice->logger().start(); - unsigned int irun = evt.id().run(); - cond::Time_t lastLumi = cond::time::MIN_VAL; - if (!m_omsServiceUrl.empty()) { - lastLumi = cond::getLastLumiFromOMS(m_omsServiceUrl); - } else { - lastLumi = cond::getLatestLumiFromFile(m_lastLumiFile); - if (lastLumi == m_prevLumi) { - mydbservice->logger().logInfo() << "Last lumi:" << lastLumi << " Prev lumi:" << m_prevLumi; - mydbservice->logger().end(1); - return; - } - m_prevLumi = lastLumi; - m_prevLumiTime = std::chrono::steady_clock::now(); + if (!m_tagLocks) { + mydbservice->lockRecords(); + m_tagLocks = true; } - unsigned int lumiId = cond::time::unpack(lastLumi).second; - mydbservice->logger().logInfo() << "Last lumi: " << lastLumi << " run: " << cond::time::unpack(lastLumi).first - << " lumiid:" << lumiId; + ::sleep(2); + //unsigned int irun = evt.id().run(); + unsigned int irun = evt.getLuminosityBlock().run(); + unsigned int lumiId = evt.getLuminosityBlock().luminosityBlock(); std::string tag = mydbservice->tag(m_record); std::cout << "tag " << tag << std::endl; std::cout << "run " << irun << std::endl; @@ -62,8 +47,12 @@ void LumiBasedUpdateAnalyzer::analyze(const edm::Event& evt, const edm::EventSet mydbservice->logger().logError() << e.what(); ret = -1; } - //::sleep(13); mydbservice->logger().end(ret); } -void LumiBasedUpdateAnalyzer::endJob() {} +void LumiBasedUpdateAnalyzer::endJob() { + if (m_tagLocks) { + edm::Service mydbservice; + mydbservice->releaseLocks(); + } +} DEFINE_FWK_MODULE(LumiBasedUpdateAnalyzer); diff --git a/CondCore/DBOutputService/test/stubs/LumiBasedUpdateAnalyzer.h b/CondCore/DBOutputService/test/stubs/LumiBasedUpdateAnalyzer.h index 1da4c4a57f92f..390eed9a1658d 100644 --- a/CondCore/DBOutputService/test/stubs/LumiBasedUpdateAnalyzer.h +++ b/CondCore/DBOutputService/test/stubs/LumiBasedUpdateAnalyzer.h @@ -22,10 +22,7 @@ class LumiBasedUpdateAnalyzer : public edm::EDAnalyzer { private: std::string m_record; - std::string m_lastLumiFile; - cond::Time_t m_prevLumi; - std::chrono::time_point m_prevLumiTime; - std::string m_omsServiceUrl; + bool m_tagLocks; // ----------member data --------------------------- }; #endif diff --git a/CondCore/EcalPlugins/plugins/ESChannelStatus_PayloadInspector.cc b/CondCore/EcalPlugins/plugins/ESChannelStatus_PayloadInspector.cc index b1b57fad4c219..1de368e5e8201 100644 --- a/CondCore/EcalPlugins/plugins/ESChannelStatus_PayloadInspector.cc +++ b/CondCore/EcalPlugins/plugins/ESChannelStatus_PayloadInspector.cc @@ -120,12 +120,12 @@ namespace { /************************************************************************ 2d plot of ES channel status difference between 2 IOVs ************************************************************************/ - class ESChannelStatusDiff : public cond::payloadInspector::PlotImage { + template + class ESChannelStatusDiffBase : public cond::payloadInspector::PlotImage { public: - ESChannelStatusDiff() : cond::payloadInspector::PlotImage("ES channel status difference") { - setSingleIov(false); - } - bool fill(const std::vector >& iovs) override { + ESChannelStatusDiffBase() + : cond::payloadInspector::PlotImage("ES channel status difference") {} + bool fill() override { TH2F*** esmap = new TH2F**[2]; std::string title[2][2] = {{"ES+F", "ES-F"}, {"ES+R", "ES-R"}}; for (int plane = 0; plane < 2; plane++) { @@ -135,12 +135,32 @@ namespace { Form("esmap%i%i", plane, side), title[plane][side].c_str(), IX_MAX, 0, IX_MAX, IY_MAX, 0, IY_MAX); } Int_t escount = 0; - unsigned int run[2], irun = 0; + unsigned int run[2] = {0, 0}; int stat[kESChannels]; - for (auto const& iov : iovs) { - std::shared_ptr payload = fetchPayload(std::get<1>(iov)); - run[irun] = std::get<0>(iov); - // std::cout << " irun " << irun << " IOV " << run[irun] << std::endl; + std::string l_tagname[2]; + // std::cout << " running with " << nIOVs << " IOVs and " << ntags << " tags " << std::endl; + auto iovs = cond::payloadInspector::PlotBase::getTag<0>().iovs; + l_tagname[0] = cond::payloadInspector::PlotBase::getTag<0>().name; + auto firstiov = iovs.front(); + run[0] = std::get<0>(firstiov); + std::tuple lastiov; + if (ntags == 2) { + auto tag2iovs = cond::payloadInspector::PlotBase::getTag<1>().iovs; + l_tagname[1] = cond::payloadInspector::PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = iovs.back(); + l_tagname[1] = l_tagname[0]; + } + run[1] = std::get<0>(lastiov); + for (int irun = 0; irun < nIOVs; irun++) { + std::shared_ptr payload; + if (irun == 0) { + payload = this->fetchPayload(std::get<1>(firstiov)); + } else { + payload = this->fetchPayload(std::get<1>(lastiov)); + } + // std::cout << " irun " << irun << " tag " << l_tagname[irun] << " IOV " << run[irun] << std ::endl; if (payload.get()) { for (int id = 0; id < kESChannels; id++) // looping over all the ES channels if (ESDetId::validHashIndex(id)) { @@ -171,8 +191,7 @@ namespace { } // 2nd IOV } // validHashIndex } // payload - irun++; - } // loop over IOVs + } // loop over IOVs gStyle->SetOptStat(0); gStyle->SetPalette(1); @@ -180,8 +199,15 @@ namespace { TLatex t1; t1.SetNDC(); t1.SetTextAlign(26); - t1.SetTextSize(0.05); - t1.DrawLatex(0.5, 0.96, Form("ES Channel Status, IOV %i - %i", run[1], run[0])); + int len = l_tagname[0].length() + l_tagname[1].length(); + if (ntags == 2 && len < 60) { + t1.SetTextSize(0.03); + t1.DrawLatex( + 0.5, 0.96, Form("%s IOV %i - %s IOV %i", l_tagname[1].c_str(), run[1], l_tagname[0].c_str(), run[0])); + } else { + t1.SetTextSize(0.05); + t1.DrawLatex(0.5, 0.96, Form("ES Channel Status, IOV %i - %i", run[1], run[0])); + } t1.SetTextSize(0.025); float xmi[2] = {0.0, 0.5}; @@ -213,15 +239,18 @@ namespace { // t1.DrawLatex(0.1, 0.94, Form("Number of dead strips %i (%f)", Nbdead, percent)); t1.DrawLatex(0.5, 0.92, Form("Number of different strips %i", Nbdead)); - std::string ImageName(m_imageFileName); + std::string ImageName(this->m_imageFileName); canvas.SaveAs(ImageName.c_str()); return true; } // fill method }; + using ESChannelStatusDiffOneTag = ESChannelStatusDiffBase; + using ESChannelStatusDiffTwoTags = ESChannelStatusDiffBase; } // namespace // Register the classes as boost python plugin PAYLOAD_INSPECTOR_MODULE(ESChannelStatus) { PAYLOAD_INSPECTOR_CLASS(ESChannelStatusPlot); - PAYLOAD_INSPECTOR_CLASS(ESChannelStatusDiff); + PAYLOAD_INSPECTOR_CLASS(ESChannelStatusDiffOneTag); + PAYLOAD_INSPECTOR_CLASS(ESChannelStatusDiffTwoTags); } diff --git a/CondCore/EcalPlugins/plugins/EcalChannelStatus_PayloadInspector.cc b/CondCore/EcalPlugins/plugins/EcalChannelStatus_PayloadInspector.cc index 22de294cd308d..45691dfd60369 100644 --- a/CondCore/EcalPlugins/plugins/EcalChannelStatus_PayloadInspector.cc +++ b/CondCore/EcalPlugins/plugins/EcalChannelStatus_PayloadInspector.cc @@ -271,24 +271,42 @@ namespace { /********************************************************************** 2d plot of ECAL barrel channel status difference between 2 IOVs ***********************************************************************/ - class EcalChannelStatusEBDiff : public cond::payloadInspector::PlotImage { + template + class EcalChannelStatusEBDiffBase : public cond::payloadInspector::PlotImage { public: - EcalChannelStatusEBDiff() - : cond::payloadInspector::PlotImage("ECAL Barrel channel status difference") { - setSingleIov(false); - } - bool fill(const std::vector > &iovs) override { + EcalChannelStatusEBDiffBase() + : cond::payloadInspector::PlotImage("ECAL Barrel channel status difference") {} + bool fill() override { TH2F *ebmap = new TH2F("ebmap", "", MAX_IPHI, 0, MAX_IPHI, 2 * MAX_IETA, -MAX_IETA, MAX_IETA); TH2F *ebmap_coarse = new TH2F("ebmap_coarse", "", MAX_IPHI / 20, 0, MAX_IPHI, 2, -MAX_IETA, MAX_IETA); Int_t ebcount = 0; - unsigned int run[2], irun = 0, status[kEBChannels]; - for (auto const &iov : iovs) { - std::shared_ptr payload = fetchPayload(std::get<1>(iov)); + unsigned int run[2] = {0, 0}, status[kEBChannels]; + std::string l_tagname[2]; + auto iovs = cond::payloadInspector::PlotBase::getTag<0>().iovs; + l_tagname[0] = cond::payloadInspector::PlotBase::getTag<0>().name; + auto firstiov = iovs.front(); + run[0] = std::get<0>(firstiov); + std::tuple lastiov; + if (ntags == 2) { + auto tag2iovs = cond::payloadInspector::PlotBase::getTag<1>().iovs; + l_tagname[1] = cond::payloadInspector::PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = iovs.back(); + l_tagname[1] = l_tagname[0]; + } + run[1] = std::get<0>(lastiov); + for (int irun = 0; irun < nIOVs; irun++) { + std::shared_ptr payload; + if (irun == 0) { + payload = this->fetchPayload(std::get<1>(firstiov)); + } else { + payload = this->fetchPayload(std::get<1>(lastiov)); + } if (payload.get()) { // looping over the EB channels, via the dense-index, mapped into EBDetId's if (payload->barrelItems().empty()) return false; - run[irun] = std::get<0>(iov); for (int cellid = EBDetId::MIN_HASH; cellid < EBDetId::kSizeForDenseIndexing; ++cellid) { uint32_t rawid = EBDetId::unhashIndex(cellid); // check the existence of ECAL channel status, for a given ECAL barrel channel @@ -317,8 +335,7 @@ namespace { } } } // loop over cellid - irun++; - } // if payload.get() + } // if payload.get() else return false; } // loop over IOV's @@ -370,8 +387,20 @@ namespace { ebmap_coarse->SetMarkerSize(1.3); ebmap_coarse->Draw("text,same"); - t1.SetTextSize(0.05); - t1.DrawLatex(0.5, 0.96, Form("EB Channel Status Masks (Diff), IOV: %i vs %i", run[0], run[1])); + int len = l_tagname[0].length() + l_tagname[1].length(); + if (ntags == 2 && len < 60) { + t1.SetTextSize(0.03); + t1.DrawLatex(0.5, + 0.96, + Form("EB Channel Status Masks (Diff), %s IOV %i - %s IOV %i", + l_tagname[1].c_str(), + run[1], + l_tagname[0].c_str(), + run[0])); + } else { + t1.SetTextSize(0.05); + t1.DrawLatex(0.5, 0.96, Form("EB Channel Status Masks (Diff), IOV: %i vs %i", run[0], run[1])); + } char txt[80]; sprintf(txt, "Net difference: %d channel(s)", ebcount); @@ -379,30 +408,52 @@ namespace { t1.SetTextSize(0.045); t1.DrawLatex(0.5, 0.91, txt); - std::string ImageName(m_imageFileName); + std::string ImageName(this->m_imageFileName); c1.SaveAs(ImageName.c_str()); return true; } // fill method }; + using EcalChannelStatusEBDiffOneTag = EcalChannelStatusEBDiffBase; + using EcalChannelStatusEBDiffTwoTags = EcalChannelStatusEBDiffBase; /************************************************************************ 2d plot of ECAL endcaps channel status difference between 2 IOVs ************************************************************************/ - class EcalChannelStatusEEDiff : public cond::payloadInspector::PlotImage { + template + class EcalChannelStatusEEDiffBase : public cond::payloadInspector::PlotImage { public: - EcalChannelStatusEEDiff() - : cond::payloadInspector::PlotImage("ECAL Endcaps channel status difference") { - setSingleIov(true); + EcalChannelStatusEEDiffBase() + : cond::payloadInspector::PlotImage("ECAL Endcaps channel status difference") { } - bool fill(const std::vector > &iovs) override { + bool fill() override { TH2F *eemap = new TH2F("eemap", "", 2 * IX_MAX, 0, 2 * IX_MAX, IY_MAX, 0, IY_MAX); TH2F *eemap_coarse = new TH2F("eemap_coarse", "", 2, 0, 2 * IX_MAX, 1, 0, IY_MAX); TH2F *eetemp = new TH2F("eetemp", "", 2 * IX_MAX, 0, 2 * IX_MAX, IY_MAX, 0, IY_MAX); Int_t eecount = 0; - unsigned int run[2], irun = 0, status[kEEChannels]; - for (auto const &iov : iovs) { - std::shared_ptr payload = fetchPayload(std::get<1>(iov)); - run[irun] = std::get<0>(iov); + unsigned int run[2]{0, 0}, status[kEEChannels]; + std::string l_tagname[2]; + auto iovs = cond::payloadInspector::PlotBase::getTag<0>().iovs; + l_tagname[0] = cond::payloadInspector::PlotBase::getTag<0>().name; + auto firstiov = iovs.front(); + run[0] = std::get<0>(firstiov); + std::tuple lastiov; + if (ntags == 2) { + auto tag2iovs = cond::payloadInspector::PlotBase::getTag<1>().iovs; + l_tagname[1] = cond::payloadInspector::PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + lastiov = tag2iovs.front(); + } else { + lastiov = iovs.back(); + l_tagname[1] = l_tagname[0]; + } + run[1] = std::get<0>(lastiov); + for (int irun = 0; irun < nIOVs; irun++) { + std::shared_ptr payload; + if (irun == 0) { + payload = this->fetchPayload(std::get<1>(firstiov)); + } else { + payload = this->fetchPayload(std::get<1>(lastiov)); + } if (payload.get()) { if (payload->endcapItems().empty()) return false; @@ -440,9 +491,8 @@ namespace { } // any difference ? } // 2nd IOV, fill the plots } // validDetId - irun++; - } // get the payload - } // loop over payloads + } // get the payload + } // loop over payloads gStyle->SetOptStat(0); //set the background color to white @@ -509,8 +559,20 @@ namespace { eemap_coarse->Draw("same,text"); t1.SetTextColor(1); - t1.SetTextSize(0.055); - t1.DrawLatex(0.5, 0.96, Form("EE Channel Status Masks (Diff), IOV %i vs %i", run[0], run[1])); + int len = l_tagname[0].length() + l_tagname[1].length(); + if (ntags == 2 && len < 60) { + t1.SetTextSize(0.03); + t1.DrawLatex(0.5, + 0.96, + Form("EE Channel Status Masks (Diff), %s IOV %i - %s IOV %i", + l_tagname[1].c_str(), + run[1], + l_tagname[0].c_str(), + run[0])); + } else { + t1.SetTextSize(0.05); + t1.DrawLatex(0.5, 0.96, Form("EE Channel Status Masks (Diff), IOV %i vs %i", run[0], run[1])); + } char txt[80]; sprintf(txt, "Net difference: %d channel(s)", eecount); @@ -522,11 +584,13 @@ namespace { t1.DrawLatex(0.14, 0.84, "EE-"); t1.DrawLatex(0.86, 0.84, "EE+"); - std::string ImageName(m_imageFileName); + std::string ImageName(this->m_imageFileName); c1.SaveAs(ImageName.c_str()); return true; } // fill method }; + using EcalChannelStatusEEDiffOneTag = EcalChannelStatusEEDiffBase; + using EcalChannelStatusEEDiffTwoTags = EcalChannelStatusEEDiffBase; /***************************************** 2d plot of EcalChannelStatus Error Summary of 1 IOV @@ -628,7 +692,9 @@ namespace { PAYLOAD_INSPECTOR_MODULE(EcalChannelStatus) { PAYLOAD_INSPECTOR_CLASS(EcalChannelStatusEBMap); PAYLOAD_INSPECTOR_CLASS(EcalChannelStatusEEMap); - PAYLOAD_INSPECTOR_CLASS(EcalChannelStatusEBDiff); - PAYLOAD_INSPECTOR_CLASS(EcalChannelStatusEEDiff); + PAYLOAD_INSPECTOR_CLASS(EcalChannelStatusEBDiffOneTag); + PAYLOAD_INSPECTOR_CLASS(EcalChannelStatusEBDiffTwoTags); + PAYLOAD_INSPECTOR_CLASS(EcalChannelStatusEEDiffOneTag); + PAYLOAD_INSPECTOR_CLASS(EcalChannelStatusEEDiffTwoTags); PAYLOAD_INSPECTOR_CLASS(EcalChannelStatusSummaryPlot); } diff --git a/CondCore/EcalPlugins/plugins/EcalPedestals_PayloadInspector.cc b/CondCore/EcalPlugins/plugins/EcalPedestals_PayloadInspector.cc index 86ca285de502d..432f949d50337 100644 --- a/CondCore/EcalPlugins/plugins/EcalPedestals_PayloadInspector.cc +++ b/CondCore/EcalPlugins/plugins/EcalPedestals_PayloadInspector.cc @@ -395,12 +395,12 @@ namespace { /************************************************************ 2d plot of ECAL pedestals difference between 2 IOVs *************************************************************/ - class EcalPedestalsDiff : public cond::payloadInspector::PlotImage { + template + class EcalPedestalsDiffBase : public cond::payloadInspector::PlotImage { public: - EcalPedestalsDiff() : cond::payloadInspector::PlotImage("ECAL Barrel channel status difference") { - setSingleIov(false); - } - bool fill(const std::vector >& iovs) override { + EcalPedestalsDiffBase() + : cond::payloadInspector::PlotImage("ECAL pedestals difference") {} + bool fill() override { uint32_t gainValues[kGains] = {12, 6, 1}; TH2F** barrel_m = new TH2F*[kGains]; TH2F** endc_p_m = new TH2F*[kGains]; @@ -467,14 +467,34 @@ namespace { EBtot[gId] = 0; EEtot[gId] = 0; } - unsigned int run[2], irun = 0; - // unsigned int irun = 0; + unsigned int run[2] = {0, 0}; + std::string l_tagname[2]; double meanEB[kGains][kEBChannels], rmsEB[kGains][kEBChannels], meanEE[kGains][kEEChannels], rmsEE[kGains][kEEChannels]; - for (auto const& iov : iovs) { - std::shared_ptr payload = fetchPayload(std::get<1>(iov)); - run[irun] = std::get<0>(iov); - // std::cout << "run " << irun << " : " << run[irun] << std::endl; + + // std::cout << " running with " << nIOVs << " IOVs and " << ntags << " tags " << std::endl; + auto iovs = cond::payloadInspector::PlotBase::getTag<0>().iovs; + l_tagname[0] = cond::payloadInspector::PlotBase::getTag<0>().name; + auto firstiov = iovs.front(); + run[0] = std::get<0>(firstiov); + std::tuple lastiov; + if (ntags == 2) { + auto tag2iovs = cond::payloadInspector::PlotBase::getTag<1>().iovs; + l_tagname[1] = cond::payloadInspector::PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = iovs.back(); + l_tagname[1] = l_tagname[0]; + } + run[1] = std::get<0>(lastiov); + for (int irun = 0; irun < nIOVs; irun++) { + std::shared_ptr payload; + if (irun == 0) { + payload = this->fetchPayload(std::get<1>(firstiov)); + } else { + payload = this->fetchPayload(std::get<1>(lastiov)); + } + // std::cout << " irun " << irun << " tag " << l_tagname[irun] << " IOV " << run[irun] << std ::endl; if (payload.get()) { if (payload->barrelItems().empty()) return false; @@ -614,7 +634,6 @@ namespace { } // if payload.get() else return false; - irun++; } // loop over IOVs gStyle->SetPalette(1); @@ -623,9 +642,15 @@ namespace { TLatex t1; t1.SetNDC(); t1.SetTextAlign(26); - t1.SetTextSize(0.05); - t1.DrawLatex(0.5, 0.96, Form("Ecal Pedestals, IOV %i - %i", run[1], run[0])); - + int len = l_tagname[0].length() + l_tagname[1].length(); + if (ntags == 2 && len < 58) { + t1.SetTextSize(0.025); + t1.DrawLatex( + 0.5, 0.96, Form("%s IOV %i - %s IOV %i", l_tagname[1].c_str(), run[1], l_tagname[0].c_str(), run[0])); + } else { + t1.SetTextSize(0.05); + t1.DrawLatex(0.5, 0.96, Form("Ecal Pedestals, IOV %i - %i", run[1], run[0])); + } float xmi[3] = {0.0, 0.24, 0.76}; float xma[3] = {0.24, 0.76, 1.00}; TPad*** pad = new TPad**[6]; @@ -678,11 +703,13 @@ namespace { DrawEE(endc_p_r[gId], pEEmin[gId], pEEmax[gId]); } - std::string ImageName(m_imageFileName); + std::string ImageName(this->m_imageFileName); canvas.SaveAs(ImageName.c_str()); return true; } // fill method - }; // class EcalPedestalsDiff + }; // class EcalPedestalsDiffBase + using EcalPedestalsDiffOneTag = EcalPedestalsDiffBase; + using EcalPedestalsDiffTwoTags = EcalPedestalsDiffBase; /************************************************* 2d histogram of ECAL barrel pedestal of 1 IOV @@ -1427,7 +1454,8 @@ namespace { PAYLOAD_INSPECTOR_MODULE(EcalPedestals) { PAYLOAD_INSPECTOR_CLASS(EcalPedestalsHist); PAYLOAD_INSPECTOR_CLASS(EcalPedestalsPlot); - PAYLOAD_INSPECTOR_CLASS(EcalPedestalsDiff); + PAYLOAD_INSPECTOR_CLASS(EcalPedestalsDiffOneTag); + PAYLOAD_INSPECTOR_CLASS(EcalPedestalsDiffTwoTags); PAYLOAD_INSPECTOR_CLASS(EcalPedestalsEBMean12Map); PAYLOAD_INSPECTOR_CLASS(EcalPedestalsEBMean6Map); PAYLOAD_INSPECTOR_CLASS(EcalPedestalsEBMean1Map); diff --git a/CondCore/EgammaPlugins/src/plugins.cc b/CondCore/EgammaPlugins/src/plugins.cc index 746d234484a92..91790b22e5330 100644 --- a/CondCore/EgammaPlugins/src/plugins.cc +++ b/CondCore/EgammaPlugins/src/plugins.cc @@ -1,16 +1,10 @@ #include "CondCore/ESSources/interface/registration_macros.h" #include "CondFormats/EgammaObjects/interface/ElectronLikelihoodCalibration.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" -#include "CondFormats/EgammaObjects/interface/GBRForestD.h" #include "CondFormats/DataRecord/interface/ElectronLikelihoodPdfsRcd.h" -#include "CondFormats/DataRecord/interface/GBRWrapperRcd.h" -#include "CondFormats/DataRecord/interface/GBRDWrapperRcd.h" #include "CondFormats/DataRecord/interface/PhotonConversionMVAComputerRcd.h" #include "CondFormats/PhysicsToolsObjects/interface/MVAComputer.h" using namespace PhysicsTools::Calibration; REGISTER_PLUGIN(ElectronLikelihoodPdfsRcd, ElectronLikelihoodCalibration); -REGISTER_PLUGIN(GBRWrapperRcd, GBRForest); -REGISTER_PLUGIN(GBRDWrapperRcd, GBRForestD); REGISTER_PLUGIN(PhotonConversionMVAComputerRcd, MVAComputerContainer); diff --git a/CondCore/GBRForestPlugins/BuildFile.xml b/CondCore/GBRForestPlugins/BuildFile.xml new file mode 100644 index 0000000000000..a291de99a4cdc --- /dev/null +++ b/CondCore/GBRForestPlugins/BuildFile.xml @@ -0,0 +1,4 @@ + + + + diff --git a/CondCore/GBRForestPlugins/src/plugins.cc b/CondCore/GBRForestPlugins/src/plugins.cc new file mode 100644 index 0000000000000..fee49ac9aec8b --- /dev/null +++ b/CondCore/GBRForestPlugins/src/plugins.cc @@ -0,0 +1,8 @@ +#include "CondCore/ESSources/interface/registration_macros.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForestD.h" +#include "CondFormats/DataRecord/interface/GBRWrapperRcd.h" +#include "CondFormats/DataRecord/interface/GBRDWrapperRcd.h" + +REGISTER_PLUGIN(GBRWrapperRcd, GBRForest); +REGISTER_PLUGIN(GBRDWrapperRcd, GBRForestD); diff --git a/CondCore/HLTPlugins/src/plugin.cc b/CondCore/HLTPlugins/src/plugin.cc index 516361bc7bb66..5156aa85d9349 100644 --- a/CondCore/HLTPlugins/src/plugin.cc +++ b/CondCore/HLTPlugins/src/plugin.cc @@ -6,9 +6,5 @@ #include "CondFormats/HLTObjects/interface/HLTPrescaleTableCond.h" #include "CondFormats/DataRecord/interface/HLTPrescaleTableRcd.h" -#include "CondFormats/HLTObjects/interface/L1TObjScalingConstants.h" -#include "CondFormats/DataRecord/interface/L1TObjScalingRcd.h" - REGISTER_PLUGIN(AlCaRecoTriggerBitsRcd, AlCaRecoTriggerBits); REGISTER_PLUGIN(HLTPrescaleTableRcd, trigger::HLTPrescaleTableCond); -REGISTER_PLUGIN(L1TObjScalingRcd, L1TObjScalingConstants); diff --git a/CondCore/PopCon/test/PopConEffExample.py b/CondCore/PopCon/test/PopConEffExample.py index 97c1befb06f80..50a1b1454fa1d 100644 --- a/CondCore/PopCon/test/PopConEffExample.py +++ b/CondCore/PopCon/test/PopConEffExample.py @@ -6,10 +6,13 @@ process.CondDBCommon.connect = 'sqlite_file:pop_test.db' process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') - ), - destinations = cms.untracked.vstring('cout') + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CondCore/PopCon/test/PopConEffExampleTargetDB.py b/CondCore/PopCon/test/PopConEffExampleTargetDB.py old mode 100755 new mode 100644 index be4ebb566b142..1b865ac2f725e --- a/CondCore/PopCon/test/PopConEffExampleTargetDB.py +++ b/CondCore/PopCon/test/PopConEffExampleTargetDB.py @@ -6,10 +6,13 @@ process.CondDBCommon.connect = 'sqlite_file:pop_test2.db' process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') - ), - destinations = cms.untracked.vstring('cout') + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CondCore/PopCon/test/PopConExample1.py b/CondCore/PopCon/test/PopConExample1.py index 8f3d574ab0725..594eb94721fd2 100644 --- a/CondCore/PopCon/test/PopConExample1.py +++ b/CondCore/PopCon/test/PopConExample1.py @@ -2,11 +2,14 @@ process = cms.Process("TEST") -process.MessageLogger=cms.Service("MessageLogger", - destinations=cms.untracked.vstring("cout"), - cout=cms.untracked.PSet( - threshold=cms.untracked.string("INFO") - ) +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ) ) process.load("CondCore.DBCommon.CondDBCommon_cfi") diff --git a/CondCore/SiPixelPlugins/README.md b/CondCore/SiPixelPlugins/README.md new file mode 100644 index 0000000000000..aacdbccf5e25b --- /dev/null +++ b/CondCore/SiPixelPlugins/README.md @@ -0,0 +1,20 @@ +# CondCore/SiPixelPlugins + +This package contains a series of `cmssw` plugins for inspecting SiPixel conditions. +The available inspectors are: + +| Record | Object | Inspector | +| --------------------------------------|---------------------------------| --------------------------------------------------| +| `SiPixelLorentzAngleRcd` | `SiPixelLorentzAngle` | [SiPixelLorentzAngle_PayloadInspector.cc](https://github.com/cms-sw/cmssw/blob/master/CondCore/SiPixelPlugins/plugins/SiPixelLorentzAngle_PayloadInspector.cc) | +| `SiPixelGenErrorDBObjectRcd` | `SiPixelGenErrorDBObject` | [SiPixelGenErrorDBObject_PayloadInspector.cc](https://github.com/cms-sw/cmssw/blob/master/CondCore/SiPixelPlugins/plugins/SiPixelGenErrorDBObject_PayloadInspector.cc) | +| `SiPixelGainCalibrationOfflineRcd` | `SiPixelGainCalibrationOffline` | [SiPixelGainCalibrationOffline_PayloadInspector.cc](https://github.com/cms-sw/cmssw/blob/master/CondCore/SiPixelPlugins/plugins/SiPixelGainCalibrationOffline_PayloadInspector.cc) | +| `SiPixelGainCalibrationForHLTRcd` | `SiPixelGainCalibrationForHLT` | [SiPixelGainCalibrationForHLT_PayloadInspector.cc](https://github.com/cms-sw/cmssw/blob/master/CondCore/SiPixelPlugins/plugins/SiPixelGainCalibrationForHLT_PayloadInspector.cc) | +| NOT IMPLEMENTED | `SiPixelVCal` | [SiPixelVCal_PayloadInspector.cc](https://github.com/cms-sw/cmssw/blob/master/CondCore/SiPixelPlugins/plugins/SiPixelVCal_PayloadInspector.cc) | +| `SiPixelTemplateDBObjectRcd` | `SiPixelTemplateDBObject` | [SiPixelTemplateDBObject_PayloadInspector.cc](https://github.com/cms-sw/cmssw/blob/master/CondCore/SiPixelPlugins/plugins/SiPixelTemplateDBObject_PayloadInspector.cc) | +| `SiPixel2DTemplateDBObjectRcd` | `SiPixel2DTemplateDBObject` | [SiPixel2DTemplateDBObject_PayloadInspector.cc](https://github.com/cms-sw/cmssw/blob/master/CondCore/SiPixelPlugins/plugins/SiPixel2DTemplateDBObject_PayloadInspector.cc) | +| `SiPixelQualityFromDbRcd` | `SiPixelQuality` | [SiPixelQuality_PayloadInspector.cc](https://github.com/cms-sw/cmssw/blob/master/CondCore/SiPixelPlugins/plugins/SiPixelQuality_PayloadInspector.cc) | +| `SiPixelStatusScenarioProbabilityRcd` | `SiPixelQualityProbabilities` | [SiPixelQualityProbabilities_PayloadInspector.cc](https://github.com/cms-sw/cmssw/blob/master/CondCore/SiPixelPlugins/plugins/SiPixelQualityProbabilities_PayloadInspector.cc) | +| `SiPixelStatusScenariosRcd` | `SiPixelFEDChannelContainer` | [SiPixelFEDChannelContainer_PayloadInspector.cc](https://github.com/cms-sw/cmssw/blob/master/CondCore/SiPixelPlugins/plugins/SiPixelFEDChannelContainer_PayloadInspector.cc) | + +Plots will be shown within the **cmsDbBrowser** [payload inspector](https://cms-conddb.cern.ch/cmsDbBrowser/payload_inspector/Prod) application. +In the `CondCore/SiPixelPlugins/test` directory a few bash scripts to inspect conditions from command line are available. \ No newline at end of file diff --git a/CondCore/SiPixelPlugins/interface/SiPixelPayloadInspectorHelper.h b/CondCore/SiPixelPlugins/interface/SiPixelPayloadInspectorHelper.h index 4d745498766df..b6f61b1168d07 100644 --- a/CondCore/SiPixelPlugins/interface/SiPixelPayloadInspectorHelper.h +++ b/CondCore/SiPixelPlugins/interface/SiPixelPayloadInspectorHelper.h @@ -227,10 +227,13 @@ namespace SiPixelPI { if (lay > 0) { canv.cd(lay); - s_title = "Barrel Pixel Layer" + std::to_string(lay); + s_title = "Barrel Pixel Layer " + std::to_string(lay); } else { canv.cd(ring); - s_title = "Forward Pixel Ring" + std::to_string(ring); + if (ring > 4) { + ring = ring - 4; + } + s_title = "Forward Pixel Ring " + std::to_string(ring); } gStyle->SetPadRightMargin(0.125); diff --git a/CondCore/SiPixelPlugins/interface/SiPixelTemplateHelper.h b/CondCore/SiPixelPlugins/interface/SiPixelTemplateHelper.h new file mode 100644 index 0000000000000..8f5d4fdf7b175 --- /dev/null +++ b/CondCore/SiPixelPlugins/interface/SiPixelTemplateHelper.h @@ -0,0 +1,407 @@ +#ifndef CONDCORE_SIPIXELPLUGINS_SIPIXELTEMPLATEHELPER_H +#define CONDCORE_SIPIXELPLUGINS_SIPIXELTEMPLATEHELPER_H + +#include "CondCore/Utilities/interface/PayloadInspectorModule.h" +#include "CondCore/Utilities/interface/PayloadInspector.h" +#include "CondCore/CondDB/interface/Time.h" +#include "CondCore/SiPixelPlugins/interface/SiPixelPayloadInspectorHelper.h" +#include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelTemplateDBObject.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelGenErrorDBObject.h" +#include "CondFormats/SiPixelTransient/interface/SiPixelTemplate.h" + +#include +#include +#include +#include + +// include ROOT +#include "TH2F.h" +#include "TH1F.h" +#include "TLegend.h" +#include "TCanvas.h" +#include "TLine.h" +#include "TStyle.h" +#include "TLatex.h" +#include "TPave.h" +#include "TPaveStats.h" +#include "TGaxis.h" + +namespace templateHelper { + + using namespace cond::payloadInspector; + + //************************************************ + // Display of Template/GenError Titles + // *************************************************/ + template + class SiPixelTitles_Display : public PlotImage { + public: + SiPixelTitles_Display() : PlotImage("Table of SiPixelTemplate/GenError titles") { + if constexpr (std::is_same_v) { + isTemplate_ = false; + label_ = "SiPixelGenErrorDBObject_PayloadInspector"; + } else { + isTemplate_ = true; + label_ = "SiPixelTemplateDBObject_PayloadInspector"; + } + } + + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); + auto tagname = tag.name; + std::vector thePixelTemp_; + std::shared_ptr payload = this->fetchPayload(std::get<1>(iov)); + + std::string IOVsince = std::to_string(std::get<0>(iov)); + + if (payload.get()) { + if (!TransientType::pushfile(*payload, thePixelTemp_)) { + throw cms::Exception(label_) << "\nERROR:" << (isTemplate_ ? "Templates" : "GenErrors") + << " not filled correctly." + << " Check the conditions. Using " + << (isTemplate_ ? "SiPixelTemplateDBObject" : "SiPixelGenErrorDBObject") + << " version " << payload->version() << "\n\n"; + } + + unsigned int mapsize = thePixelTemp_.size(); + float pitch = 1. / (mapsize * 1.1); + + float y, x1, x2; + std::vector y_x1, y_x2, y_line; + std::vector s_x1, s_x2, s_x3; + + // starting table at y=1.0 (top of the canvas) + // first column is at 0.02, second column at 0.32 NDC + y = 1.0; + x1 = 0.02; + x2 = x1 + 0.30; + + y -= pitch; + y_x1.push_back(y); + s_x1.push_back(Form("#scale[1.2]{%s}", (isTemplate_ ? "Template ID" : "GenError ID"))); + y_x2.push_back(y); + s_x2.push_back(Form("#scale[1.2]{#color[4]{%s} in IOV: #color[4]{%s}}", tagname.c_str(), IOVsince.c_str())); + + y -= pitch / 2.; + y_line.push_back(y); + + for (const auto& element : thePixelTemp_) { + y -= pitch; + y_x1.push_back(y); + s_x1.push_back(std::to_string(element.head.ID)); + + y_x2.push_back(y); + s_x2.push_back(Form("#color[2]{%s}", element.head.title)); + + y_line.push_back(y - (pitch / 2.)); + } + + const auto& c_title = fmt::sprintf("%s titles", (isTemplate_ ? "Template" : "GenError")); + TCanvas canvas(c_title.c_str(), c_title.c_str(), 2000, std::max(y_x1.size(), y_x2.size()) * 40); + TLatex l; + // Draw the columns titles + l.SetTextAlign(12); + + float newpitch = 1 / (std::max(y_x1.size(), y_x2.size()) * 1.1); + float factor = newpitch / pitch; + l.SetTextSize(newpitch - 0.002); + canvas.cd(); + for (unsigned int i = 0; i < y_x1.size(); i++) { + l.DrawLatexNDC(x1, 1 - (1 - y_x1[i]) * factor, s_x1[i].c_str()); + } + + for (unsigned int i = 0; i < y_x2.size(); i++) { + l.DrawLatexNDC(x2, 1 - (1 - y_x2[i]) * factor, s_x2[i].c_str()); + } + + canvas.cd(); + canvas.Update(); + + TLine lines[y_line.size()]; + unsigned int iL = 0; + for (const auto& line : y_line) { + lines[iL] = TLine(gPad->GetUxmin(), 1 - (1 - line) * factor, gPad->GetUxmax(), 1 - (1 - line) * factor); + lines[iL].SetLineWidth(1); + lines[iL].SetLineStyle(9); + lines[iL].SetLineColor(2); + lines[iL].Draw("same"); + iL++; + } + + std::string fileName(this->m_imageFileName); + canvas.SaveAs(fileName.c_str()); + + } // if paylaod.get() + return true; + } + + protected: + bool isTemplate_; + std::string label_; + }; + + /************************************************ + // header plotting + *************************************************/ + template + class SiPixelHeaderTable : public PlotImage { + public: + SiPixelHeaderTable() : PlotImage("SiPixel CPE Header summary") { + if constexpr (std::is_same_v) { + isTemplate_ = false; + label_ = "SiPixelGenErrorDBObject_PayloadInspector"; + } else { + isTemplate_ = true; + label_ = "SiPixelTemplateDBObject_PayloadInspector"; + } + } + + bool fill() override { + gStyle->SetHistMinimumZero(); // will display zero as zero in the text map + gStyle->SetPalette(kMint); // for the ghost plot (colored BPix and FPix bins) + + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); + auto tagname = tag.name; + std::vector thePixelTemp_; + std::shared_ptr payload = this->fetchPayload(std::get<1>(iov)); + + if (payload.get()) { + if (!TransientType::pushfile(*payload, thePixelTemp_)) { + throw cms::Exception(label_) << "\nERROR:" << (isTemplate_ ? "Templates" : "GenErrors") + << " not filled correctly." + << " Check the conditions. Using " + << (isTemplate_ ? "SiPixelTemplateDBObject" : "SiPixelGenErrorDBObject") + << payload->version() << "\n\n"; + } + + // store the map of ID / interesting quantities + TransientType templ(thePixelTemp_); + TCanvas canvas("Header Summary", "Header summary", 1400, 1000); + canvas.cd(); + + unsigned int tempSize = thePixelTemp_.size(); + + canvas.SetTopMargin(0.07); + canvas.SetBottomMargin(0.06); + canvas.SetLeftMargin(0.17); + canvas.SetRightMargin(0.03); + canvas.Modified(); + canvas.SetGrid(); + + auto h2_Header = std::make_unique("Header", ";;", tempSize, 0, tempSize, 12, 0., 12.); + auto h2_ghost = std::make_unique("ghost", ";;", tempSize, 0, tempSize, 12, 0., 12.); + h2_Header->SetStats(false); + h2_ghost->SetStats(false); + + int tempVersion = -999; + + for (const auto& theTemp : thePixelTemp_ | boost::adaptors::indexed(1)) { + auto tempValue = theTemp.value(); + auto idx = theTemp.index(); + float uH = -99.; + if (tempValue.head.Bfield != 0.) { + uH = roundoff(tempValue.head.lorxwidth / tempValue.head.zsize / tempValue.head.Bfield, 4); + } + + // clang-format off + h2_Header->SetBinContent(idx, 12, tempValue.head.ID); //!< template ID number + h2_Header->SetBinContent(idx, 11, tempValue.head.Bfield); //!< Bfield in Tesla + h2_Header->SetBinContent(idx, 10, uH); //!< hall mobility + h2_Header->SetBinContent(idx, 9, tempValue.head.xsize); //!< pixel size (for future use in upgraded geometry) + h2_Header->SetBinContent(idx, 8, tempValue.head.ysize); //!< pixel size (for future use in upgraded geometry) + h2_Header->SetBinContent(idx, 7, tempValue.head.zsize); //!< pixel size (for future use in upgraded geometry) + h2_Header->SetBinContent(idx, 6, tempValue.head.NTy); //!< number of Template y entries + h2_Header->SetBinContent(idx, 5, tempValue.head.NTyx); //!< number of Template y-slices of x entries + h2_Header->SetBinContent(idx, 4, tempValue.head.NTxx); //!< number of Template x-entries in each slice + h2_Header->SetBinContent(idx, 3, tempValue.head.Dtype); //!< detector type (0=BPix, 1=FPix) + h2_Header->SetBinContent(idx, 2, tempValue.head.qscale); //!< Charge scaling to match cmssw and pixelav + h2_Header->SetBinContent(idx, 1, tempValue.head.Vbias); //!< detector bias potential in Volts + // clang-format on + + h2_Header->GetYaxis()->SetBinLabel(12, (isTemplate_ ? "TemplateID" : "GenErrorID")); + h2_Header->GetYaxis()->SetBinLabel(11, "B-field [T]"); + h2_Header->GetYaxis()->SetBinLabel(10, "#mu_{H} [1/T]"); + h2_Header->GetYaxis()->SetBinLabel(9, "x-size [#mum]"); + h2_Header->GetYaxis()->SetBinLabel(8, "y-size [#mum]"); + h2_Header->GetYaxis()->SetBinLabel(7, "z-size [#mum]"); + h2_Header->GetYaxis()->SetBinLabel(6, "NTy"); + h2_Header->GetYaxis()->SetBinLabel(5, "NTyx"); + h2_Header->GetYaxis()->SetBinLabel(4, "NTxx"); + h2_Header->GetYaxis()->SetBinLabel(3, "DetectorType"); + h2_Header->GetYaxis()->SetBinLabel(2, "qScale"); + h2_Header->GetYaxis()->SetBinLabel(1, "VBias [V]"); + h2_Header->GetXaxis()->SetBinLabel(idx, ""); + + for (unsigned int iy = 1; iy <= 12; iy++) { + if (tempValue.head.Dtype != 0 || uH < 0) { + h2_ghost->SetBinContent(idx, iy, 1); + } else { + h2_ghost->SetBinContent(idx, iy, -1); + } + h2_ghost->GetYaxis()->SetBinLabel(iy, h2_Header->GetYaxis()->GetBinLabel(iy)); + h2_ghost->GetXaxis()->SetBinLabel(idx, ""); + } + + if (tempValue.head.templ_version != tempVersion) { + tempVersion = tempValue.head.templ_version; + } + } + + h2_Header->GetXaxis()->LabelsOption("h"); + h2_Header->GetXaxis()->SetNdivisions(500 + tempSize, false); + h2_Header->GetYaxis()->SetLabelSize(0.05); + h2_Header->SetMarkerSize(1.5); + + h2_ghost->GetXaxis()->LabelsOption("h"); + h2_ghost->GetXaxis()->SetNdivisions(500 + tempSize, false); + h2_ghost->GetYaxis()->SetLabelSize(0.05); + + canvas.cd(); + h2_ghost->Draw("col"); + h2_Header->Draw("TEXTsame"); + + TPaveText ksPt(0, 0, 0.88, 0.04, "NDC"); + ksPt.SetBorderSize(0); + ksPt.SetFillColor(0); + const char* textToAdd = Form("%s Version: #color[2]{%i}. Payload hash: #color[2]{%s}", + (isTemplate_ ? "Template" : "GenError"), + tempVersion, + (std::get<1>(iov)).c_str()); + ksPt.AddText(textToAdd); + ksPt.Draw(); + + auto ltx = TLatex(); + ltx.SetTextFont(62); + ltx.SetTextSize(0.040); + ltx.SetTextAlign(11); + ltx.DrawLatexNDC( + gPad->GetLeftMargin(), + 1 - gPad->GetTopMargin() + 0.01, + ("#color[4]{" + tagname + "}, IOV: #color[4]{" + std::to_string(std::get<0>(iov)) + "}").c_str()); + + std::string fileName(this->m_imageFileName); + canvas.SaveAs(fileName.c_str()); + } + return true; + } + + float roundoff(float value, unsigned char prec) { + float pow_10 = pow(10.0f, (float)prec); + return round(value * pow_10) / pow_10; + } + + protected: + bool isTemplate_; + std::string label_; + }; + + //*********************************************** + // TH2Poly Map of IDs + //***********************************************/ + template + class SiPixelIDs : public PlotImage { + public: + SiPixelIDs() : PlotImage("SiPixelMap of Template / GenError ID Values") { + if constexpr (std::is_same_v) { + isTemplate_ = false; + label_ = "SiPixelGenErrorDBObject_PayloadInspector"; + } else { + isTemplate_ = true; + label_ = "SiPixelTemplateDBObject_PayloadInspector"; + } + } + + bool fill() override { + gStyle->SetPalette(kRainBow); + + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); + std::shared_ptr payload = this->fetchPayload(std::get<1>(iov)); + + std::string barrelName_ = fmt::sprintf("%sIDsBarrel", (isTemplate_ ? "template" : "genError")); + std::string endcapName_ = fmt::sprintf("%sIDsForward", (isTemplate_ ? "template" : "genError")); + std::string title_ = fmt::sprintf("%s IDs", (isTemplate_ ? "template" : "genError")); + + if (payload.get()) { + // Book the TH2Poly + Phase1PixelMaps theMaps("text"); + if (myType == SiPixelPI::t_barrel) { + theMaps.bookBarrelHistograms(barrelName_, title_.c_str(), title_.c_str()); + // book the barrel bins of the TH2Poly + theMaps.bookBarrelBins(barrelName_); + } else if (myType == SiPixelPI::t_forward) { + theMaps.bookForwardHistograms(endcapName_, title_.c_str(), title_.c_str()); + // book the forward bins of the TH2Poly + theMaps.bookForwardBins(endcapName_); + } + + std::map templMap; + if constexpr (std::is_same_v) { + templMap = payload->getGenErrorIDs(); + } else { + templMap = payload->getTemplateIDs(); + } + + if (templMap.size() == SiPixelPI::phase0size || templMap.size() > SiPixelPI::phase1size) { + edm::LogError(label_) + << "There are " << templMap.size() + << " DetIds in this payload. SiPixelIDs maps are not supported for non-Phase1 Pixel geometries !"; + TCanvas canvas("Canv", "Canv", 1200, 1000); + SiPixelPI::displayNotSupported(canvas, templMap.size()); + std::string fileName(this->m_imageFileName); + canvas.SaveAs(fileName.c_str()); + return false; + } else { + if (templMap.size() < SiPixelPI::phase1size) { + edm::LogWarning(label_) << "\n ********* WARNING! ********* \n There are " << templMap.size() + << " DetIds in this payload !" + << "\n **************************** \n"; + } + } + + /* + std::vector detids; + std::transform(templMap.begin(), + templMap.end(), + std::back_inserter(detids), + [](const std::map::value_type& pair) { return pair.first; }); + */ + + for (auto const& entry : templMap) { + COUT << "DetID: " << entry.first << fmt::sprintf("%s ID ", (isTemplate_ ? "Template" : "GenError")) + << entry.second << std::endl; + auto detid = DetId(entry.first); + if ((detid.subdetId() == PixelSubdetector::PixelBarrel) && (myType == SiPixelPI::t_barrel)) { + theMaps.fillBarrelBin(barrelName_, entry.first, entry.second); + } else if ((detid.subdetId() == PixelSubdetector::PixelEndcap) && (myType == SiPixelPI::t_forward)) { + theMaps.fillForwardBin(endcapName_, entry.first, entry.second); + } + } + + theMaps.beautifyAllHistograms(); + + TCanvas canvas("Canv", "Canv", (myType == SiPixelPI::t_barrel) ? 1200 : 1500, 1000); + if (myType == SiPixelPI::t_barrel) { + theMaps.DrawBarrelMaps(barrelName_, canvas); + } else if (myType == SiPixelPI::t_forward) { + theMaps.DrawForwardMaps(endcapName_, canvas); + } + + canvas.cd(); + + std::string fileName(this->m_imageFileName); + canvas.SaveAs(fileName.c_str()); + } + return true; + } + + protected: + bool isTemplate_; + std::string label_; + }; +} // namespace templateHelper + +#endif diff --git a/CondCore/SiPixelPlugins/plugins/BuildFile.xml b/CondCore/SiPixelPlugins/plugins/BuildFile.xml index 9ad92c25b96b0..8745d3be21ea8 100644 --- a/CondCore/SiPixelPlugins/plugins/BuildFile.xml +++ b/CondCore/SiPixelPlugins/plugins/BuildFile.xml @@ -34,6 +34,14 @@ + + + + + + + + @@ -49,6 +57,20 @@ + + + + + + + + + + + + + + diff --git a/CondCore/SiPixelPlugins/plugins/SiPixel2DTemplateDBObject_PayloadInspector.cc b/CondCore/SiPixelPlugins/plugins/SiPixel2DTemplateDBObject_PayloadInspector.cc new file mode 100644 index 0000000000000..fa8083434656d --- /dev/null +++ b/CondCore/SiPixelPlugins/plugins/SiPixel2DTemplateDBObject_PayloadInspector.cc @@ -0,0 +1,79 @@ +/*! + \file SiPixel2DTemplateDBObject_PayloadInspector + \Payload Inspector Plugin for SiPixel2DTemplateDBObject + \author M. Musich + \version $Revision: 1.0 $ + \date $Date: 2020/04/16 18:00:00 $ +*/ + +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "CondCore/Utilities/interface/PayloadInspectorModule.h" +#include "CondCore/Utilities/interface/PayloadInspector.h" +#include "CondCore/CondDB/interface/Time.h" +#include "CondCore/SiPixelPlugins/interface/SiPixelPayloadInspectorHelper.h" +#include "CondCore/SiPixelPlugins/interface/Phase1PixelMaps.h" +#include "CondCore/SiPixelPlugins/interface/SiPixelTemplateHelper.h" + +#include "CalibTracker/StandaloneTrackerTopology/interface/StandaloneTrackerTopology.h" + +// the data format of the condition to be inspected +#include "CondFormats/SiPixelObjects/interface/SiPixel2DTemplateDBObject.h" +#include "CondFormats/SiPixelTransient/interface/SiPixelTemplate2D.h" +#include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" +#include "DataFormats/DetId/interface/DetId.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include +#include +#include +#include +#include +#include + +// include ROOT +#include "TH2.h" +#include "TProfile2D.h" +#include "TH2Poly.h" +#include "TGraph.h" +#include "TH2F.h" +#include "TLegend.h" +#include "TCanvas.h" +#include "TLine.h" +#include "TGraph.h" +#include "TStyle.h" +#include "TLatex.h" +#include "TPave.h" +#include "TPaveStats.h" +#include "TGaxis.h" + +namespace { + + //*********************************************** + // Display of Template Titles + // **********************************************/ + using namespace templateHelper; + using SiPixel2DTemplateTitles_Display = + SiPixelTitles_Display; + + //*********************************************** + // Display of 2DTemplate Header + // **********************************************/ + using SiPixel2DTemplateHeaderTable = + SiPixelHeaderTable; + + //*********************************************** + // TH2Poly Map of IDs + //***********************************************/ + using SiPixel2DTemplateIDsBPixMap = SiPixelIDs; + using SiPixel2DTemplateIDsFPixMap = SiPixelIDs; + +} // namespace + +// Register the classes as boost python plugin +PAYLOAD_INSPECTOR_MODULE(SiPixel2DTemplateDBObject) { + PAYLOAD_INSPECTOR_CLASS(SiPixel2DTemplateTitles_Display); + PAYLOAD_INSPECTOR_CLASS(SiPixel2DTemplateHeaderTable); + PAYLOAD_INSPECTOR_CLASS(SiPixel2DTemplateIDsBPixMap); + PAYLOAD_INSPECTOR_CLASS(SiPixel2DTemplateIDsFPixMap); +} diff --git a/CondCore/SiPixelPlugins/plugins/SiPixelFEDChannelContainer_PayloadInspector.cc b/CondCore/SiPixelPlugins/plugins/SiPixelFEDChannelContainer_PayloadInspector.cc new file mode 100644 index 0000000000000..0aa7ac3eec571 --- /dev/null +++ b/CondCore/SiPixelPlugins/plugins/SiPixelFEDChannelContainer_PayloadInspector.cc @@ -0,0 +1,477 @@ +/*! + \file SiPixelFEDChannelContainer_PayloadInspector + \Payload Inspector Plugin for SiPixelFEDChannelContainer + \author M. Musich + \version $Revision: 1.0 $ + \date $Date: 2020/02/22 10:00:00 $ +*/ + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "CondCore/CondDB/interface/ConnectionPool.h" + +#include "CondCore/Utilities/interface/PayloadInspectorModule.h" +#include "CondCore/Utilities/interface/PayloadInspector.h" +#include "CondCore/CondDB/interface/Time.h" +#include "CondCore/SiPixelPlugins/interface/SiPixelPayloadInspectorHelper.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "CalibTracker/StandaloneTrackerTopology/interface/StandaloneTrackerTopology.h" + +#include "CondFormats/SiPixelObjects/interface/CablingPathToDetUnit.h" +#include "CondFormats/SiPixelObjects/interface/LocalPixel.h" +#include "CondFormats/SiPixelObjects/interface/PixelIndices.h" +#include "CondFormats/SiPixelObjects/interface/PixelROC.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelFedCabling.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingTree.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelFrameConverter.h" + +// the data format of the condition to be inspected +#include "CondFormats/SiPixelObjects/interface/SiPixelFEDChannelContainer.h" +#include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" +#include "DataFormats/DetId/interface/DetId.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include +#include +#include +#include + +// include ROOT +#include "TH2F.h" +#include "TLegend.h" +#include "TCanvas.h" +#include "TLine.h" +#include "TGraph.h" +#include "TGaxis.h" +#include "TStyle.h" +#include "TLatex.h" +#include "TPave.h" +#include "TPaveStats.h" + +namespace { + + using namespace cond::payloadInspector; + + /************************************************ + 1d histogram of SiPixelFEDChannelContainer of 1 IOV + *************************************************/ + + class SiPixelFEDChannelContainerTest : public PlotImage { + public: + SiPixelFEDChannelContainerTest() + : PlotImage("SiPixelFEDChannelContainer scenarios count"), + m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( + edm::FileInPath("Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml").fullPath())} { + // for inputs + PlotBase::addInputParam("Scenarios"); + + // hardcoded connection to the MC cabling tag, though luck + m_condDbCabling = "frontier://FrontierProd/CMS_CONDITIONS"; + m_CablingTagName = "SiPixelFedCablingMap_phase1_v7"; + + m_connectionPool.setParameters(m_connectionPset); + m_connectionPool.configure(); + } + + bool fill() override { + std::vector the_scenarios = {}; + + auto paramValues = PlotBase::inputParamValues(); + auto ip = paramValues.find("Scenarios"); + if (ip != paramValues.end()) { + auto input = boost::lexical_cast(ip->second); + typedef boost::tokenizer> tokenizer; + boost::char_separator sep{","}; + tokenizer tok{input, sep}; + for (const auto& t : tok) { + the_scenarios.push_back(t); + } + } else { + edm::LogWarning("SiPixelFEDChannelContainerTest") + << "\n WARNING!!!! \n The needed parameter Scenarios has not been passed. Will use all the scenarios in " + "the file!" + << "\n Buckle your seatbelts... this might take a while... \n\n"; + the_scenarios.push_back("all"); + } + + int nlad_list[n_layers] = {6, 14, 22, 32}; + int divide_roc = 1; + + // --------------------- BOOK HISTOGRAMS + std::array h_bpix_occ; + std::array h_fpix_occ; + + // barrel + for (unsigned int lay = 1; lay <= 4; lay++) { + int nlad = nlad_list[lay - 1]; + + std::string name = "occ_Layer_" + std::to_string(lay); + std::string title = "; Module # ; Ladder #"; + h_bpix_occ[lay - 1] = new TH2D(name.c_str(), + title.c_str(), + 72 * divide_roc, + -4.5, + 4.5, + (nlad * 4 + 2) * divide_roc, + -nlad - 0.5, + nlad + 0.5); + } + + // endcaps + for (unsigned int ring = 1; ring <= n_rings; ring++) { + int n = ring == 1 ? 92 : 140; + float y = ring == 1 ? 11.5 : 17.5; + std::string name = "occ_ring_" + std::to_string(ring); + std::string title = "; Disk # ; Blade/Panel #"; + + h_fpix_occ[ring - 1] = new TH2D(name.c_str(), title.c_str(), 56 * divide_roc, -3.5, 3.5, n * divide_roc, -y, y); + } + + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); + + // open db session for the cabling map + edm::LogPrint("SiPixelFEDChannelContainerTest") << "[SiPixelFEDChannelContainerTest::" << __func__ << "] " + << "Query the condition database " << m_condDbCabling; + + cond::persistency::Session condDbSession = m_connectionPool.createSession(m_condDbCabling); + condDbSession.transaction().start(true); + + // query the database + edm::LogPrint("SiPixelFEDChannelContainerTest") << "[SiPixelFEDChannelContainerTest::" << __func__ << "] " + << "Reading IOVs from tag " << m_CablingTagName; + + const auto MIN_VAL = cond::timeTypeSpecs[cond::runnumber].beginValue; + const auto MAX_VAL = cond::timeTypeSpecs[cond::runnumber].endValue; + + // get the list of payloads for the Cabling Map + std::vector> m_cabling_iovs; + condDbSession.readIov(m_CablingTagName).selectRange(MIN_VAL, MAX_VAL, m_cabling_iovs); + + std::vector listOfCablingIOVs; + std::transform(m_cabling_iovs.begin(), + m_cabling_iovs.end(), + std::back_inserter(listOfCablingIOVs), + [](std::tuple myIOV2) -> unsigned int { return std::get<0>(myIOV2); }); + + edm::LogPrint("SiPixelFEDChannelContainerTest") + << " Number of SiPixelFedCablngMap payloads: " << listOfCablingIOVs.size() << std::endl; + + auto it = std::find( + listOfCablingIOVs.begin(), listOfCablingIOVs.end(), closest_from_below(listOfCablingIOVs, std::get<0>(iov))); + int index = std::distance(listOfCablingIOVs.begin(), it); + + edm::LogPrint("SiPixelFEDChannelContainerTest") + << " using the SiPixelFedCablingMap with hash: " << std::get<1>(m_cabling_iovs.at(index)) << std::endl; + + auto theCablingMap = condDbSession.fetchPayload(std::get<1>(m_cabling_iovs.at(index))); + theCablingMap->initializeRocs(); + // auto theCablingTree = (*theCablingMap).cablingTree(); + + //auto map = theCablingMap->det2fedMap(); + //for (const auto &element : map){ + // std::cout << element.first << " " << element.second << std::endl; + //} + + std::shared_ptr payload = fetchPayload(std::get<1>(iov)); + const auto& scenarioMap = payload->getScenarioMap(); + + auto pIndexConverter = PixelIndices(numColumns, numRows); + + for (const auto& scenario : scenarioMap) { + std::string scenName = scenario.first; + + if (std::find_if(the_scenarios.begin(), the_scenarios.end(), compareKeys(scenName)) != the_scenarios.end() || + the_scenarios[0] == "all") { + edm::LogPrint("SiPixelFEDChannelContainerTest") << "\t Found Scenario: " << scenName << " ==> dumping it"; + } else { + continue; + } + + //if (strcmp(scenName.c_str(),"320824_103") != 0) continue; + + const auto& theDetSetBadPixelFedChannels = payload->getDetSetBadPixelFedChannels(scenName); + for (const auto& disabledChannels : *theDetSetBadPixelFedChannels) { + const auto t_detid = disabledChannels.detId(); + int subid = DetId(t_detid).subdetId(); + LogDebug("SiPixelFEDChannelContainerTest") << fmt::sprintf("DetId : %i \n", t_detid) << std::endl; + + std::bitset<16> badRocsFromFEDChannels; + + for (const auto& ch : disabledChannels) { + std::string toOut_ = fmt::sprintf("fed : %i | link : %2i | roc_first : %2i | roc_last: %2i \n", + ch.fed, + ch.link, + ch.roc_first, + ch.roc_last); + + LogDebug("SiPixelFEDChannelContainerTest") << toOut_ << std::endl; + const std::vector& path = + theCablingMap->pathToDetUnit(disabledChannels.detId()); + for (unsigned int i_roc = ch.roc_first; i_roc <= ch.roc_last; ++i_roc) { + for (const auto p : path) { + const sipixelobjects::PixelROC* myroc = theCablingMap->findItem(p); + if (myroc->idInDetUnit() == static_cast(i_roc)) { + sipixelobjects::LocalPixel::RocRowCol local = {39, 25}; //corresponding to center of ROC row,col + sipixelobjects::GlobalPixel global = myroc->toGlobal(sipixelobjects::LocalPixel(local)); + int chipIndex(0), colROC(0), rowROC(0); + + pIndexConverter.transformToROC(global.col, global.row, chipIndex, colROC, rowROC); + + LogDebug("SiPixelFEDChannelContainerTest") + << " => i_roc:" << i_roc << " " << global.col << "-" << global.row << " | => " << chipIndex + << " : (" << colROC << "," << rowROC << ")" << std::endl; + + badRocsFromFEDChannels[chipIndex] = true; + } + } + } + } + + LogDebug("SiPixelFEDChannelContainerTest") << badRocsFromFEDChannels << std::endl; + + auto myDetId = DetId(t_detid); + + if (subid == PixelSubdetector::PixelBarrel) { + auto layer = m_trackerTopo.pxbLayer(myDetId); + auto s_ladder = SiPixelPI::signed_ladder(myDetId, m_trackerTopo, true); + auto s_module = SiPixelPI::signed_module(myDetId, m_trackerTopo, true); + + bool isFlipped = SiPixelPI::isBPixOuterLadder(myDetId, m_trackerTopo, false); + if ((layer > 1 && s_module < 0)) + isFlipped = !isFlipped; + + auto ladder = m_trackerTopo.pxbLadder(myDetId); + auto module = m_trackerTopo.pxbModule(myDetId); + LogDebug("SiPixelFEDChannelContainerTest") + << "layer:" << layer << " ladder:" << ladder << " module:" << module << " signed ladder: " << s_ladder + << " signed module: " << s_module << std::endl; + + auto rocsToMask = + SiPixelPI::maskedBarrelRocsToBins(layer, s_ladder, s_module, badRocsFromFEDChannels, isFlipped); + for (const auto& bin : rocsToMask) { + double x = h_bpix_occ[layer - 1]->GetXaxis()->GetBinCenter(std::get<0>(bin)); + double y = h_bpix_occ[layer - 1]->GetYaxis()->GetBinCenter(std::get<1>(bin)); + h_bpix_occ[layer - 1]->Fill(x, y, 1); + } + } // if it's barrel + else if (subid == PixelSubdetector::PixelEndcap) { + auto ring = SiPixelPI::ring(myDetId, m_trackerTopo, true); + auto s_blade = SiPixelPI::signed_blade(myDetId, m_trackerTopo, true); + auto s_disk = SiPixelPI::signed_disk(myDetId, m_trackerTopo, true); + auto s_blade_panel = SiPixelPI::signed_blade_panel(myDetId, m_trackerTopo, true); + auto panel = m_trackerTopo.pxfPanel(t_detid); + + //bool isFlipped = (s_disk > 0) ? (std::abs(s_blade)%2==0) : (std::abs(s_blade)%2==1); + bool isFlipped = (s_disk > 0) ? (panel == 1) : (panel == 2); + + LogDebug("SiPixelFEDChannelContainerTest") + << "ring:" << ring << " blade: " << s_blade << " panel: " << panel + << " signed blade/panel: " << s_blade_panel << " disk: " << s_disk << std::endl; + + auto rocsToMask = + SiPixelPI::maskedForwardRocsToBins(ring, s_blade, panel, s_disk, badRocsFromFEDChannels, isFlipped); + for (const auto& bin : rocsToMask) { + double x = h_fpix_occ[ring - 1]->GetXaxis()->GetBinCenter(std::get<0>(bin)); + double y = h_fpix_occ[ring - 1]->GetYaxis()->GetBinCenter(std::get<1>(bin)); + h_fpix_occ[ring - 1]->Fill(x, y, 1); + } // if it's endcap + } else { + throw cms::Exception("LogicError") << "Unknown Pixel SubDet ID " << std::endl; + } + } // loop on the channels + } // loop on the scenarios + + gStyle->SetOptStat(0); + //========================= + TCanvas canvas("Summary", "Summary", 1200, 1600); + canvas.Divide(2, 3); + canvas.SetBottomMargin(0.11); + canvas.SetLeftMargin(0.13); + canvas.SetRightMargin(0.05); + canvas.Modified(); + + // dress the plots + for (unsigned int lay = 1; lay <= n_layers; lay++) { + SiPixelPI::dress_occup_plot(canvas, h_bpix_occ[lay - 1], lay, 0, 1); + } + + canvas.Update(); + canvas.Modified(); + canvas.cd(); + + for (unsigned int ring = 1; ring <= n_rings; ring++) { + SiPixelPI::dress_occup_plot(canvas, h_fpix_occ[ring - 1], 0, n_layers + ring, 1); + } + + auto unpacked = SiPixelPI::unpack(std::get<0>(iov)); + + for (unsigned int lay = 1; lay <= n_layers; lay++) { + canvas.cd(lay); + auto ltx = TLatex(); + ltx.SetTextFont(62); + ltx.SetTextColor(kBlue); + ltx.SetTextSize(0.055); + ltx.SetTextAlign(11); + ltx.DrawLatexNDC(gPad->GetLeftMargin(), + 1 - gPad->GetTopMargin() + 0.01, + unpacked.first == 0 + ? ("IOV:" + std::to_string(unpacked.second)).c_str() + : (std::to_string(unpacked.first) + "," + std::to_string(unpacked.second)).c_str()); + } + + for (unsigned int ring = 1; ring <= n_rings; ring++) { + canvas.cd(n_layers + ring); + auto ltx = TLatex(); + ltx.SetTextFont(62); + ltx.SetTextColor(kBlue); + ltx.SetTextSize(0.050); + ltx.SetTextAlign(11); + ltx.DrawLatexNDC(gPad->GetLeftMargin(), + 1 - gPad->GetTopMargin() + 0.01, + unpacked.first == 0 + ? ("IOV:" + std::to_string(unpacked.second)).c_str() + : (std::to_string(unpacked.first) + "," + std::to_string(unpacked.second)).c_str()); + } + + std::string fileName(m_imageFileName); + canvas.SaveAs(fileName.c_str()); + + // close the DB session + condDbSession.transaction().commit(); + + return true; + } + + public: + inline unsigned int closest_from_above(std::vector const& vec, unsigned int value) { + auto const it = std::lower_bound(vec.begin(), vec.end(), value); + return vec.at(it - vec.begin() - 1); + } + + inline unsigned int closest_from_below(std::vector const& vec, unsigned int value) { + auto const it = std::upper_bound(vec.begin(), vec.end(), value); + return vec.at(it - vec.begin() - 1); + } + + // auxilliary check + struct compareKeys { + std::string key; + compareKeys(std::string const& i) : key(i) {} + + bool operator()(std::string const& i) { return (key == i); } + }; + + private: + // tough luck, we can only do phase-1... + static constexpr int numColumns = 416; + static constexpr int numRows = 160; + static constexpr int n_rings = 2; + static constexpr int n_layers = 4; + + TrackerTopology m_trackerTopo; + edm::ParameterSet m_connectionPset; + cond::persistency::ConnectionPool m_connectionPool; + std::string m_CablingTagName; + std::string m_condDbCabling; + }; + + /************************************************ + 1d histogram of SiPixelFEDChannelContainer of 1 IOV + *************************************************/ + + class SiPixelFEDChannelContainerScenarios : public PlotImage { + public: + SiPixelFEDChannelContainerScenarios() + : PlotImage("SiPixelFEDChannelContainer scenarios count") {} + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto tagname = tag.name; + auto iov = tag.iovs.front(); + + TGaxis::SetMaxDigits(3); + + std::shared_ptr payload = fetchPayload(std::get<1>(iov)); + std::vector scenarios = payload->getScenarioList(); + sort(scenarios.begin(), scenarios.end()); + + TCanvas canvas("Canv", "Canv", 1200, 1000); + canvas.cd(); + canvas.SetGrid(); + auto h1 = std::make_unique("Count", + "SiPixelFEDChannelContainer Bad Roc count;Scenario index;n. of bad ROCs", + scenarios.size(), + 1, + scenarios.size()); + h1->SetStats(false); + + canvas.SetTopMargin(0.06); + canvas.SetBottomMargin(0.12); + canvas.SetLeftMargin(0.12); + canvas.SetRightMargin(0.05); + canvas.Modified(); + + int scenarioIndex = 0; + for (const auto& scenario : scenarios) { + scenarioIndex++; + int badRocCount = 0; + LogDebug("SiPixelFEDChannelContainerScenarios") << scenario << std::endl; + auto badChannelCollection = payload->getDetSetBadPixelFedChannels(scenario); + for (const auto& disabledChannels : *badChannelCollection) { + for (const auto& ch : disabledChannels) { + int local_bad_rocs = ch.roc_last - ch.roc_first; + badRocCount += local_bad_rocs; + } // loop on the channels + } // loop on the DetSetVector + + h1->SetBinContent(scenarioIndex, badRocCount); + } // loop on scenarios + + TGaxis::SetExponentOffset(-0.1, 0.01, "y"); // Y offset + TGaxis::SetExponentOffset(-0.03, -0.10, "x"); // Y and Y offset for X axis + + h1->SetTitle(""); + h1->GetYaxis()->SetRangeUser(0., h1->GetMaximum() * 1.30); + h1->SetFillColor(kRed); + h1->SetMarkerStyle(20); + h1->SetMarkerSize(1); + h1->Draw("bar2"); + + SiPixelPI::makeNicePlotStyle(h1.get()); + + canvas.Update(); + + TLegend legend = TLegend(0.30, 0.88, 0.95, 0.94); + //legend.SetHeader(("#splitline{Payload hash: #bf{" + (std::get<1>(iov)) + "}}{Total Scenarios:"+std::to_string(scenarioIndex)+"}").c_str(),"C"); // option "C" allows to center the header + + legend.SetHeader(fmt::sprintf("Payload hash: #bf{%s}", std::get<1>(iov)).c_str(), "C"); + legend.AddEntry(h1.get(), fmt::sprintf("total scenarios: #bf{%s}", std::to_string(scenarioIndex)).c_str(), "F"); + legend.SetTextSize(0.025); + legend.Draw("same"); + + auto ltx = TLatex(); + ltx.SetTextFont(62); + //ltx.SetTextColor(kBlue); + //ltx.SetTextAlign(11); + ltx.SetTextSize(0.040); + ltx.DrawLatexNDC( + gPad->GetLeftMargin(), + 1 - gPad->GetTopMargin() + 0.01, + fmt::sprintf("#color[4]{%s} IOV: #color[4]{%s}", tagname, std::to_string(std::get<0>(iov))).c_str()); + + std::string fileName(m_imageFileName); + canvas.SaveAs(fileName.c_str()); + + return true; + + } // fill + }; + +} // namespace + +// Register the classes as boost python plugin +PAYLOAD_INSPECTOR_MODULE(SiPixelFEDChannelContainer) { + PAYLOAD_INSPECTOR_CLASS(SiPixelFEDChannelContainerTest); + PAYLOAD_INSPECTOR_CLASS(SiPixelFEDChannelContainerScenarios); +} diff --git a/CondCore/SiPixelPlugins/plugins/SiPixelGenErrorDBObject_PayloadInspector.cc b/CondCore/SiPixelPlugins/plugins/SiPixelGenErrorDBObject_PayloadInspector.cc index 4c67867a28aae..02f93e99515e3 100644 --- a/CondCore/SiPixelPlugins/plugins/SiPixelGenErrorDBObject_PayloadInspector.cc +++ b/CondCore/SiPixelPlugins/plugins/SiPixelGenErrorDBObject_PayloadInspector.cc @@ -1,6 +1,6 @@ /*! - \file SiPixelTemplateDBObject_PayloadInspector - \Payload Inspector Plugin for SiPixelTemplateDBObject + \file SiPixelGenErrorDBObject_PayloadInspector + \Payload Inspector Plugin for SiPixelGenError \author M. Musich \version $Revision: 1.0 $ \date $Date: 2020/04/16 18:00:00 $ @@ -13,6 +13,7 @@ #include "CondCore/CondDB/interface/Time.h" #include "CondCore/SiPixelPlugins/interface/SiPixelPayloadInspectorHelper.h" #include "CondCore/SiPixelPlugins/interface/Phase1PixelMaps.h" +#include "CondCore/SiPixelPlugins/interface/SiPixelTemplateHelper.h" #include "CalibTracker/StandaloneTrackerTopology/interface/StandaloneTrackerTopology.h" @@ -48,186 +49,29 @@ namespace { - /************************************************ - // header plotting - *************************************************/ - class SiPixelGenErrorHeaderTable - : public cond::payloadInspector::PlotImage { - public: - SiPixelGenErrorHeaderTable() - : cond::payloadInspector::PlotImage( - "SiPixelGenErrorDBObject Header summary") {} + //*********************************************** + // Display of Template Titles + // **********************************************/ + using namespace templateHelper; + using SiPixelGenErrorTitles_Display = + SiPixelTitles_Display; - bool fill() override { - gStyle->SetHistMinimumZero(); // will display zero as zero in the text map + //*********************************************** + // Display of GenError Header + // **********************************************/ + using SiPixelGenErrorHeaderTable = SiPixelHeaderTable; - auto tag = PlotBase::getTag<0>(); - auto iov = tag.iovs.front(); - auto tagname = tag.name; - std::vector thePixelTemp_; - std::shared_ptr payload = fetchPayload(std::get<1>(iov)); - - if (payload.get()) { - if (!SiPixelGenError::pushfile(*payload, thePixelTemp_)) { - throw cms::Exception("SiPixelGenErrorDBObject_PayloadInspector") - << "\nERROR: GenErrors not filled correctly. Check the conditions. Using " - "SiPixelGenErrorDBObject version " - << payload->version() << "\n\n"; - } - - // store the map of ID / interesting quantities - SiPixelGenError templ(thePixelTemp_); - TCanvas canvas("GenError Header Summary", "GenError Header summary", 1400, 1000); - canvas.cd(); - - unsigned int tempSize = thePixelTemp_.size(); - - canvas.SetTopMargin(0.07); - canvas.SetBottomMargin(0.06); - canvas.SetLeftMargin(0.17); - canvas.SetRightMargin(0.03); - canvas.Modified(); - canvas.SetGrid(); - - auto h2_GenErrorHeaders = std::make_unique("Header", ";;", tempSize, 0, tempSize, 6, 0., 6.); - h2_GenErrorHeaders->SetStats(false); - - for (const auto& theTemp : thePixelTemp_ | boost::adaptors::indexed(1)) { - auto tempValue = theTemp.value(); - auto tempIndex = theTemp.index(); - float uH = -99.; - if (tempValue.head.Bfield != 0.) { - uH = roundoff(tempValue.head.lorxwidth / tempValue.head.zsize / tempValue.head.Bfield, 4); - } - h2_GenErrorHeaders->SetBinContent(tempIndex, 6, tempValue.head.ID); - h2_GenErrorHeaders->SetBinContent(tempIndex, 5, tempValue.head.Bfield); - h2_GenErrorHeaders->SetBinContent(tempIndex, 4, uH); - h2_GenErrorHeaders->SetBinContent(tempIndex, 3, tempValue.head.xsize); - h2_GenErrorHeaders->SetBinContent(tempIndex, 2, tempValue.head.ysize); - h2_GenErrorHeaders->SetBinContent(tempIndex, 1, tempValue.head.zsize); - h2_GenErrorHeaders->GetYaxis()->SetBinLabel(6, "GenErrorID"); - h2_GenErrorHeaders->GetYaxis()->SetBinLabel(5, "B-field [T]"); - h2_GenErrorHeaders->GetYaxis()->SetBinLabel(4, "#mu_{H} [1/T]"); - h2_GenErrorHeaders->GetYaxis()->SetBinLabel(3, "x-size [#mum]"); - h2_GenErrorHeaders->GetYaxis()->SetBinLabel(2, "y-size [#mum]"); - h2_GenErrorHeaders->GetYaxis()->SetBinLabel(1, "z-size [#mum]"); - h2_GenErrorHeaders->GetXaxis()->SetBinLabel(tempIndex, ""); - } - - h2_GenErrorHeaders->GetXaxis()->LabelsOption("h"); - h2_GenErrorHeaders->GetXaxis()->SetNdivisions(500 + tempSize, false); - h2_GenErrorHeaders->GetYaxis()->SetLabelSize(0.05); - h2_GenErrorHeaders->SetMarkerSize(1.5); - - canvas.cd(); - h2_GenErrorHeaders->Draw("TEXT"); - - auto ltx = TLatex(); - ltx.SetTextFont(62); - ltx.SetTextColor(kBlue); - ltx.SetTextSize(0.045); - ltx.SetTextAlign(11); - ltx.DrawLatexNDC(gPad->GetLeftMargin(), - 1 - gPad->GetTopMargin() + 0.01, - (tagname + ", IOV:" + std::to_string(std::get<0>(iov))).c_str()); - - std::string fileName(m_imageFileName); - canvas.SaveAs(fileName.c_str()); - } - return true; - } - - float roundoff(float value, unsigned char prec) { - float pow_10 = pow(10.0f, (float)prec); - return round(value * pow_10) / pow_10; - } - }; - - /************************************************ - // testing TH2Poly classes for plotting - *************************************************/ - template - class SiPixelGenErrorIDs - : public cond::payloadInspector::PlotImage { - public: - SiPixelGenErrorIDs() - : cond::payloadInspector::PlotImage( - "SiPixelGenError ID Values") {} - - bool fill() override { - gStyle->SetPalette(kRainBow); - - auto tag = PlotBase::getTag<0>(); - auto iov = tag.iovs.front(); - std::shared_ptr payload = fetchPayload(std::get<1>(iov)); - - if (payload.get()) { - // Book the TH2Poly - Phase1PixelMaps theMaps("text"); - if (myType == SiPixelPI::t_barrel) { - theMaps.bookBarrelHistograms("generrorIDsBarrel", "genErrorIDs", "genError IDs"); - // book the barrel bins of the TH2Poly - theMaps.bookBarrelBins("generrorIDsBarrel"); - } else if (myType == SiPixelPI::t_forward) { - theMaps.bookForwardHistograms("generrorIDsForward", "genErrorIDs", "genError IDs"); - // book the forward bins of the TH2Poly - theMaps.bookForwardBins("generrorIDsForward"); - } - - std::map templMap = payload->getGenErrorIDs(); - - if (templMap.size() == SiPixelPI::phase0size || templMap.size() > SiPixelPI::phase1size) { - edm::LogError("SiPixelGenErrorDBObject_PayloadInspector") - << "There are " << templMap.size() - << " DetIds in this payload. SiPixelTempateIDs maps are not supported for non-Phase1 Pixel geometries !"; - TCanvas canvas("Canv", "Canv", 1200, 1000); - SiPixelPI::displayNotSupported(canvas, templMap.size()); - std::string fileName(m_imageFileName); - canvas.SaveAs(fileName.c_str()); - return false; - } else { - if (templMap.size() < SiPixelPI::phase1size) { - edm::LogWarning("SiPixelGenErrorDBObject_PayloadInspector") - << "\n ********* WARNING! ********* \n There are " << templMap.size() << " DetIds in this payload !" - << "\n **************************** \n"; - } - } - - for (auto const& entry : templMap) { - COUT << "DetID: " << entry.first << " generror ID: " << entry.second << std::endl; - auto detid = DetId(entry.first); - if ((detid.subdetId() == PixelSubdetector::PixelBarrel) && (myType == SiPixelPI::t_barrel)) { - theMaps.fillBarrelBin("generrorIDsBarrel", entry.first, entry.second); - } else if ((detid.subdetId() == PixelSubdetector::PixelEndcap) && (myType == SiPixelPI::t_forward)) { - theMaps.fillForwardBin("generrorIDsForward", entry.first, entry.second); - } - } - - theMaps.beautifyAllHistograms(); - - TCanvas canvas("Canv", "Canv", (myType == SiPixelPI::t_barrel) ? 1200 : 1500, 1000); - if (myType == SiPixelPI::t_barrel) { - theMaps.DrawBarrelMaps("generrorIDsBarrel", canvas); - } else if (myType == SiPixelPI::t_forward) { - theMaps.DrawForwardMaps("generrorIDsForward", canvas); - } - - canvas.cd(); - - std::string fileName(m_imageFileName); - canvas.SaveAs(fileName.c_str()); - } - return true; - } - }; - - using SiPixelGenErrorIDsBPixMap = SiPixelGenErrorIDs; - using SiPixelGenErrorIDsFPixMap = SiPixelGenErrorIDs; + //*********************************************** + // TH2Poly Map of IDs + //***********************************************/ + using SiPixelGenErrorIDsBPixMap = SiPixelIDs; + using SiPixelGenErrorIDsFPixMap = SiPixelIDs; } // namespace // Register the classes as boost python plugin PAYLOAD_INSPECTOR_MODULE(SiPixelGenErrorDBObject) { + PAYLOAD_INSPECTOR_CLASS(SiPixelGenErrorTitles_Display); PAYLOAD_INSPECTOR_CLASS(SiPixelGenErrorHeaderTable); PAYLOAD_INSPECTOR_CLASS(SiPixelGenErrorIDsBPixMap); PAYLOAD_INSPECTOR_CLASS(SiPixelGenErrorIDsFPixMap); diff --git a/CondCore/SiPixelPlugins/plugins/SiPixelQualityProbabilities_PayloadInspector.cc b/CondCore/SiPixelPlugins/plugins/SiPixelQualityProbabilities_PayloadInspector.cc new file mode 100644 index 0000000000000..4f443978c4927 --- /dev/null +++ b/CondCore/SiPixelPlugins/plugins/SiPixelQualityProbabilities_PayloadInspector.cc @@ -0,0 +1,120 @@ +/*! + \file SiPixelQualityProbabilities_PayloadInspector + \Payload Inspector Plugin for SiPixelQualityProbabilities + \author M. Musich + \version $Revision: 1.0 $ + \date $Date: 2019/10/22 19:16:00 $ +*/ + +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "CondCore/Utilities/interface/PayloadInspectorModule.h" +#include "CondCore/Utilities/interface/PayloadInspector.h" +#include "CondCore/CondDB/interface/Time.h" +#include "CondCore/SiPixelPlugins/interface/SiPixelPayloadInspectorHelper.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" +#include "CalibTracker/StandaloneTrackerTopology/interface/StandaloneTrackerTopology.h" + +// the data format of the condition to be inspected +#include "CondFormats/SiPixelObjects/interface/SiPixelQualityProbabilities.h" +#include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" +#include "DataFormats/DetId/interface/DetId.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include +#include +#include + +// include ROOT +#include "TH2F.h" +#include "TLegend.h" +#include "TCanvas.h" +#include "TLine.h" +#include "TGraph.h" +#include "TGaxis.h" +#include "TStyle.h" +#include "TLatex.h" +#include "TPave.h" +#include "TPaveStats.h" + +namespace { + + using namespace cond::payloadInspector; + + /************************************************ + 1d histogram of SiPixelQualityProbabilities of 1 IOV + *************************************************/ + + class SiPixelQualityProbabilitiesScenariosCount : public PlotImage { + public: + SiPixelQualityProbabilitiesScenariosCount() + : PlotImage("SiPixelQualityProbabilities scenarios count") {} + + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); + std::shared_ptr payload = fetchPayload(std::get<1>(iov)); + auto PUbins = payload->getPileUpBins(); + auto span = PUbins.back() - PUbins.front(); + + TGaxis::SetMaxDigits(3); + + TCanvas canvas("Canv", "Canv", 1200, 1000); + canvas.cd(); + auto h1 = std::make_unique("Count", + "SiPixelQualityProbablities Scenarios count;PU bin;n. of scenarios", + span, + PUbins.front(), + PUbins.back()); + h1->SetStats(false); + + canvas.SetTopMargin(0.06); + canvas.SetBottomMargin(0.12); + canvas.SetLeftMargin(0.12); + canvas.SetRightMargin(0.05); + canvas.Modified(); + + for (const auto &bin : PUbins) { + h1->SetBinContent(bin + 1, payload->nelements(bin)); + } + + h1->SetTitle(""); + h1->GetYaxis()->SetRangeUser(0., h1->GetMaximum() * 1.30); + h1->SetFillColor(kRed); + h1->SetMarkerStyle(20); + h1->SetMarkerSize(1); + h1->Draw("bar2"); + + SiPixelPI::makeNicePlotStyle(h1.get()); + + canvas.Update(); + + TLegend legend = TLegend(0.40, 0.88, 0.95, 0.94); + legend.SetHeader(("Payload hash: #bf{" + (std::get<1>(iov)) + "}").c_str(), + "C"); // option "C" allows to center the header + //legend.AddEntry(h1.get(), ("IOV: " + std::to_string(std::get<0>(iov))).c_str(), "PL"); + legend.SetTextSize(0.025); + legend.Draw("same"); + + auto ltx = TLatex(); + ltx.SetTextFont(62); + //ltx.SetTextColor(kBlue); + ltx.SetTextSize(0.05); + ltx.SetTextAlign(11); + ltx.DrawLatexNDC(gPad->GetLeftMargin() + 0.1, + 1 - gPad->GetTopMargin() + 0.01, + ("SiPixelQualityProbabilities IOV:" + std::to_string(std::get<0>(iov))).c_str()); + + std::string fileName(m_imageFileName); + canvas.SaveAs(fileName.c_str()); + + return true; + } + }; + +} // namespace + +// Register the classes as boost python plugin +PAYLOAD_INSPECTOR_MODULE(SiPixelQualityProbabilities) { + PAYLOAD_INSPECTOR_CLASS(SiPixelQualityProbabilitiesScenariosCount); +} diff --git a/CondCore/SiPixelPlugins/plugins/SiPixelTemplateDBObject_PayloadInspector.cc b/CondCore/SiPixelPlugins/plugins/SiPixelTemplateDBObject_PayloadInspector.cc index a1e6faadb77a9..322cfdc8244f6 100644 --- a/CondCore/SiPixelPlugins/plugins/SiPixelTemplateDBObject_PayloadInspector.cc +++ b/CondCore/SiPixelPlugins/plugins/SiPixelTemplateDBObject_PayloadInspector.cc @@ -13,6 +13,7 @@ #include "CondCore/CondDB/interface/Time.h" #include "CondCore/SiPixelPlugins/interface/SiPixelPayloadInspectorHelper.h" #include "CondCore/SiPixelPlugins/interface/Phase1PixelMaps.h" +#include "CondCore/SiPixelPlugins/interface/SiPixelTemplateHelper.h" #include "CalibTracker/StandaloneTrackerTopology/interface/StandaloneTrackerTopology.h" @@ -48,14 +49,15 @@ namespace { + using namespace cond::payloadInspector; + /************************************************ test class *************************************************/ - class SiPixelTemplateDBObjectTest - : public cond::payloadInspector::Histogram1D { + class SiPixelTemplateDBObjectTest : public Histogram1D { public: SiPixelTemplateDBObjectTest() - : cond::payloadInspector::Histogram1D( + : Histogram1D( "SiPixelTemplateDBObject test", "SiPixelTemplateDBObject test", 10, 0.0, 100.) {} bool fill() override { @@ -108,107 +110,11 @@ namespace { } // fill }; - /************************************************ - // header plotting - *************************************************/ - class SiPixelTemplateHeaderTable - : public cond::payloadInspector::PlotImage { - public: - SiPixelTemplateHeaderTable() - : cond::payloadInspector::PlotImage( - "SiPixelTemplateDBObject Header summary") {} - - bool fill() override { - gStyle->SetHistMinimumZero(); // will display zero as zero in the text map - - auto tag = PlotBase::getTag<0>(); - auto iov = tag.iovs.front(); - auto tagname = tag.name; - std::vector thePixelTemp_; - std::shared_ptr payload = fetchPayload(std::get<1>(iov)); - - if (payload.get()) { - if (!SiPixelTemplate::pushfile(*payload, thePixelTemp_)) { - throw cms::Exception("SiPixelTemplateDBObject_PayloadInspector") - << "\nERROR: Templates not filled correctly. Check the conditions. Using " - "SiPixelTemplateDBObject version " - << payload->version() << "\n\n"; - } - - // store the map of ID / interesting quantities - SiPixelTemplate templ(thePixelTemp_); - TCanvas canvas("Template Header Summary", "Template Header summary", 1400, 1000); - canvas.cd(); - - unsigned int tempSize = thePixelTemp_.size(); - - canvas.SetTopMargin(0.07); - canvas.SetBottomMargin(0.06); - canvas.SetLeftMargin(0.17); - canvas.SetRightMargin(0.03); - canvas.Modified(); - canvas.SetGrid(); - - auto h2_TemplateHeaders = std::make_unique("Header", ";;", tempSize, 0, tempSize, 6, 0., 6.); - h2_TemplateHeaders->SetStats(false); - - for (const auto& theTemp : thePixelTemp_ | boost::adaptors::indexed(1)) { - auto tempValue = theTemp.value(); - auto tempIndex = theTemp.index(); - float uH = -99.; - if (tempValue.head.Bfield != 0.) { - uH = roundoff(tempValue.head.lorxwidth / tempValue.head.zsize / tempValue.head.Bfield, 4); - } - h2_TemplateHeaders->SetBinContent(tempIndex, 6, tempValue.head.ID); - h2_TemplateHeaders->SetBinContent(tempIndex, 5, tempValue.head.Bfield); - h2_TemplateHeaders->SetBinContent(tempIndex, 4, uH); - h2_TemplateHeaders->SetBinContent(tempIndex, 3, tempValue.head.xsize); - h2_TemplateHeaders->SetBinContent(tempIndex, 2, tempValue.head.ysize); - h2_TemplateHeaders->SetBinContent(tempIndex, 1, tempValue.head.zsize); - h2_TemplateHeaders->GetYaxis()->SetBinLabel(6, "TemplateID"); - h2_TemplateHeaders->GetYaxis()->SetBinLabel(5, "B-field [T]"); - h2_TemplateHeaders->GetYaxis()->SetBinLabel(4, "#mu_{H} [1/T]"); - h2_TemplateHeaders->GetYaxis()->SetBinLabel(3, "x-size [#mum]"); - h2_TemplateHeaders->GetYaxis()->SetBinLabel(2, "y-size [#mum]"); - h2_TemplateHeaders->GetYaxis()->SetBinLabel(1, "z-size [#mum]"); - h2_TemplateHeaders->GetXaxis()->SetBinLabel(tempIndex, ""); - } - - h2_TemplateHeaders->GetXaxis()->LabelsOption("h"); - h2_TemplateHeaders->GetXaxis()->SetNdivisions(500 + tempSize, false); - h2_TemplateHeaders->GetYaxis()->SetLabelSize(0.05); - h2_TemplateHeaders->SetMarkerSize(1.5); - - canvas.cd(); - h2_TemplateHeaders->Draw("TEXT"); - - auto ltx = TLatex(); - ltx.SetTextFont(62); - ltx.SetTextColor(kBlue); - ltx.SetTextSize(0.045); - ltx.SetTextAlign(11); - ltx.DrawLatexNDC(gPad->GetLeftMargin(), - 1 - gPad->GetTopMargin() + 0.01, - (tagname + ", IOV:" + std::to_string(std::get<0>(iov))).c_str()); - - std::string fileName(m_imageFileName); - canvas.SaveAs(fileName.c_str()); - } - return true; - } - - float roundoff(float value, unsigned char prec) { - float pow_10 = pow(10.0f, (float)prec); - return round(value * pow_10) / pow_10; - } - }; - /************************************************ // testing TH2Poly classes for plotting *************************************************/ template - class SiPixelTemplateLA - : public cond::payloadInspector::PlotImage { + class SiPixelTemplateLA : public PlotImage { struct header_info { int ID; //!< template ID number float lorywidth; //!< estimate of y-lorentz width for optimal resolution @@ -225,9 +131,7 @@ namespace { }; public: - SiPixelTemplateLA() - : cond::payloadInspector::PlotImage( - "SiPixelTemplate assumed value of uH") {} + SiPixelTemplateLA() : PlotImage("SiPixelTemplate assumed value of uH") {} bool fill() override { gStyle->SetPalette(kRainBow); @@ -333,100 +237,31 @@ namespace { using SiPixelTemplateLABPixMap = SiPixelTemplateLA; using SiPixelTemplateLAFPixMap = SiPixelTemplateLA; - /************************************************ - // testing TH2Poly classes for plotting - *************************************************/ - template - class SiPixelTemplateIDs - : public cond::payloadInspector::PlotImage { - public: - SiPixelTemplateIDs() - : cond::payloadInspector::PlotImage( - "SiPixelTemplate ID Values") {} + using namespace templateHelper; - bool fill() override { - gStyle->SetPalette(kRainBow); + //************************************************ + // Display of Template Titles + // *************************************************/ + using SiPixelTemplateTitles_Display = + SiPixelTitles_Display; - auto tag = PlotBase::getTag<0>(); - auto iov = tag.iovs.front(); - std::shared_ptr payload = fetchPayload(std::get<1>(iov)); - - if (payload.get()) { - // Book the TH2Poly - Phase1PixelMaps theMaps("text"); - if (myType == SiPixelPI::t_barrel) { - theMaps.bookBarrelHistograms("templateIDsBarrel", "templateIDs", "template IDs"); - // book the barrel bins of the TH2Poly - theMaps.bookBarrelBins("templateIDsBarrel"); - } else if (myType == SiPixelPI::t_forward) { - theMaps.bookForwardHistograms("templateIDsForward", "templateIDs", "template IDs"); - // book the forward bins of the TH2Poly - theMaps.bookForwardBins("templateIDsForward"); - } - - std::map templMap = payload->getTemplateIDs(); - - if (templMap.size() == SiPixelPI::phase0size || templMap.size() > SiPixelPI::phase1size) { - edm::LogError("SiPixelTemplateDBObject_PayloadInspector") - << "There are " << templMap.size() - << " DetIds in this payload. SiPixelTempateIDs maps are not supported for non-Phase1 Pixel geometries !"; - TCanvas canvas("Canv", "Canv", 1200, 1000); - SiPixelPI::displayNotSupported(canvas, templMap.size()); - std::string fileName(m_imageFileName); - canvas.SaveAs(fileName.c_str()); - return false; - } else { - if (templMap.size() < SiPixelPI::phase1size) { - edm::LogWarning("SiPixelTemplateDBObject_PayloadInspector") - << "\n ********* WARNING! ********* \n There are " << templMap.size() << " DetIds in this payload !" - << "\n **************************** \n"; - } - } - - /* - std::vector detids; - std::transform(templMap.begin(), - templMap.end(), - std::back_inserter(detids), - [](const std::map::value_type& pair) { return pair.first; }); - */ - - for (auto const& entry : templMap) { - COUT << "DetID: " << entry.first << " template ID: " << entry.second << std::endl; - auto detid = DetId(entry.first); - if ((detid.subdetId() == PixelSubdetector::PixelBarrel) && (myType == SiPixelPI::t_barrel)) { - theMaps.fillBarrelBin("templateIDsBarrel", entry.first, entry.second); - } else if ((detid.subdetId() == PixelSubdetector::PixelEndcap) && (myType == SiPixelPI::t_forward)) { - theMaps.fillForwardBin("templateIDsForward", entry.first, entry.second); - } - } - - theMaps.beautifyAllHistograms(); - - TCanvas canvas("Canv", "Canv", (myType == SiPixelPI::t_barrel) ? 1200 : 1500, 1000); - if (myType == SiPixelPI::t_barrel) { - theMaps.DrawBarrelMaps("templateIDsBarrel", canvas); - } else if (myType == SiPixelPI::t_forward) { - theMaps.DrawForwardMaps("templateIDsForward", canvas); - } - - canvas.cd(); - - std::string fileName(m_imageFileName); - canvas.SaveAs(fileName.c_str()); - } - return true; - } - }; + //*********************************************** + // Display of Template Header + // **********************************************/ + using SiPixelTemplateHeaderTable = SiPixelHeaderTable; - using SiPixelTemplateIDsBPixMap = SiPixelTemplateIDs; - using SiPixelTemplateIDsFPixMap = SiPixelTemplateIDs; + //*********************************************** + // TH2Poly Map of IDs + //***********************************************/ + using SiPixelTemplateIDsBPixMap = SiPixelIDs; + using SiPixelTemplateIDsFPixMap = SiPixelIDs; } // namespace // Register the classes as boost python plugin PAYLOAD_INSPECTOR_MODULE(SiPixelTemplateDBObject) { PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateDBObjectTest); + PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateTitles_Display); PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateHeaderTable); PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateIDsBPixMap); PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateIDsFPixMap); diff --git a/CondCore/SiPixelPlugins/test/test.sh b/CondCore/SiPixelPlugins/test/test.sh new file mode 100644 index 0000000000000..4aac8a63c5a3a --- /dev/null +++ b/CondCore/SiPixelPlugins/test/test.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# Save current working dir so img can be outputted there later +W_DIR=$(pwd); +# Set SCRAM architecture var +SCRAM_ARCH=slc6_amd64_gcc630; +export SCRAM_ARCH; +source /afs/cern.ch/cms/cmsset_default.sh; +eval `scram run -sh`; + +mkdir -p $W_DIR/results + +getPayloadData.py \ + --plugin pluginSiPixel2DTemplateDBObject_PayloadInspector \ + --plot plot_SiPixel2DTemplateHeaderTable \ + --tag SiPixel2DTemplateDBObject_phase2_IT_v6.1.5_25x100_unirradiated_den_v2_mc \ + --time_type Run \ + --iovs '{"start_iov": "1", "end_iov": "1"}' \ + --db Prod \ + --test + +mv *.png $W_DIR/results/SiPixelTemplate2DHeader.png + +getPayloadData.py \ + --plugin pluginSiPixelFEDChannelContainer_PayloadInspector \ + --plot plot_SiPixelFEDChannelContainerTest \ + --tag SiPixelStatusScenarios_UltraLegacy2018_v0_mc \ + --time_type Run --iovs '{"start_iov": "1", "end_iov" : "1"}' \ + --db Prod \ + --input_params '{"Scenarios":"320824_103,316758_983,320934_254"}' \ + --test ; + +mv *.png $W_DIR/results/SiPixelFEDChannelContainer.png + + +getPayloadData.py \ + --plugin pluginSiPixelFEDChannelContainer_PayloadInspector \ + --plot plot_SiPixelFEDChannelContainerScenarios \ + --tag SiPixelStatusScenarios_UltraLegacy2018_v0_mc \ + --time_type Run --iovs '{"start_iov": "1", "end_iov" : "1"}' \ + --db Prod \ + --test ; + +mv *.png $W_DIR/results/SiPixelFEDChannelScenarios.png diff --git a/CondCore/SiPixelPlugins/test/testSiPixelPayloadInspector.cpp b/CondCore/SiPixelPlugins/test/testSiPixelPayloadInspector.cpp index b48ec13f4da23..18c594ee4e255 100644 --- a/CondCore/SiPixelPlugins/test/testSiPixelPayloadInspector.cpp +++ b/CondCore/SiPixelPlugins/test/testSiPixelPayloadInspector.cpp @@ -8,6 +8,7 @@ #include "CondCore/SiPixelPlugins/plugins/SiPixelGenErrorDBObject_PayloadInspector.cc" #include "CondCore/SiPixelPlugins/plugins/SiPixelVCal_PayloadInspector.cc" #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "CondCore/SiPixelPlugins/plugins/SiPixelQualityProbabilities_PayloadInspector.cc" #include "FWCore/PluginManager/interface/PluginManager.h" #include "FWCore/PluginManager/interface/standard.h" #include "FWCore/PluginManager/interface/SharedLibrary.h" @@ -188,6 +189,18 @@ int main(int argc, char** argv) { histo24.process(connectionString, PI::mk_input(tag, end, end)); edm::LogPrint("testSiPixelPayloadInspector") << histo24.data() << std::endl; + // SiPixelQualityProbabilities + + tag = "SiPixelQualityProbabilities_UltraLegacy2018_v0_mc"; + start = boost::lexical_cast(1); + end = boost::lexical_cast(1); + + std::cout << "## Exercising SiPixelQualityProbabilities plots " << std::endl; + + SiPixelQualityProbabilitiesScenariosCount histo25; + histo25.process(connectionString, PI::mk_input(tag, start, start)); + std::cout << histo25.data() << std::endl; + inputs.clear(); #if PY_MAJOR_VERSION >= 3 // TODO I don't know why this Py_INCREF is necessary... diff --git a/CondCore/SiPixelPlugins/test/testSiPixelTemplateDBObject.sh b/CondCore/SiPixelPlugins/test/testSiPixelTemplateDBObject.sh index 73b894ad128d1..24c9454c293c8 100755 --- a/CondCore/SiPixelPlugins/test/testSiPixelTemplateDBObject.sh +++ b/CondCore/SiPixelPlugins/test/testSiPixelTemplateDBObject.sh @@ -78,3 +78,25 @@ getPayloadData.py \ --test ; mv *.png $W_DIR/plots_Template/HeaderTable.png + +getPayloadData.py \ + --plugin pluginSiPixelTemplateDBObject_PayloadInspector \ + --plot plot_SiPixelTemplateTitles_Display \ + --tag SiPixelTemplateDBObject38Tv3_express \ + --time_type Run \ + --iovs '{"start_iov": "326083", "end_iov": "326083"}' \ + --db Prod \ + --test ; + +mv *.png $W_DIR/plots_Template/HeaderTitles.png + +getPayloadData.py \ + --plugin pluginSiPixel2DTemplateDBObject_PayloadInspector \ + --plot plot_SiPixel2DTemplateHeaderTable \ + --tag SiPixel2DTemplateDBObject_38T_v1_express \ + --time_type Run \ + --iovs '{"start_iov": "326083", "end_iov": "326083"}' \ + --db Prod \ + --test ; + +mv *.png $W_DIR/plots_Template/2DHeaderTable.png diff --git a/CondCore/SiStripPlugins/interface/SiStripPayloadInspectorHelper.h b/CondCore/SiStripPlugins/interface/SiStripPayloadInspectorHelper.h index d7e1edc2913c3..a227de7772127 100644 --- a/CondCore/SiStripPlugins/interface/SiStripPayloadInspectorHelper.h +++ b/CondCore/SiStripPlugins/interface/SiStripPayloadInspectorHelper.h @@ -837,19 +837,21 @@ namespace SiStripPI { } break; case FIRE: { - double stops[NRGBs] = {0.00, 0.20, 0.80, 1.00}; - double red[NRGBs] = {1.00, 1.00, 1.00, 0.50}; - double green[NRGBs] = {1.00, 1.00, 0.00, 0.00}; - double blue[NRGBs] = {0.20, 0.00, 0.00, 0.00}; - TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont); + const int NCOLs = 4; + double stops[NCOLs] = {0.00, 0.20, 0.80, 1.00}; + double red[NCOLs] = {1.00, 1.00, 1.00, 0.50}; + double green[NCOLs] = {1.00, 1.00, 0.00, 0.00}; + double blue[NCOLs] = {0.20, 0.00, 0.00, 0.00}; + TColor::CreateGradientColorTable(NCOLs, stops, red, green, blue, NCont); } break; case ANTIFIRE: { - double stops[NRGBs] = {0.00, 0.20, 0.80, 1.00}; - double red[NRGBs] = {0.50, 1.00, 1.00, 1.00}; - double green[NRGBs] = {0.00, 0.00, 1.00, 1.00}; - double blue[NRGBs] = {0.00, 0.00, 0.00, 0.20}; - TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont); + const int NCOLs = 4; + double stops[NCOLs] = {0.00, 0.20, 0.80, 1.00}; + double red[NCOLs] = {0.50, 1.00, 1.00, 1.00}; + double green[NCOLs] = {0.00, 0.00, 1.00, 1.00}; + double blue[NCOLs] = {0.00, 0.00, 0.00, 0.20}; + TColor::CreateGradientColorTable(NCOLs, stops, red, green, blue, NCont); } break; case LOGREDBLUE: { diff --git a/CondCore/SiStripPlugins/interface/SiStripTkMaps.h b/CondCore/SiStripPlugins/interface/SiStripTkMaps.h new file mode 100644 index 0000000000000..bb60f52b80ac1 --- /dev/null +++ b/CondCore/SiStripPlugins/interface/SiStripTkMaps.h @@ -0,0 +1,340 @@ +#ifndef CONDCORE_SISTRIPPLUGINS_SISTRIPTKMAPS_H +#define CONDCORE_SISTRIPPLUGINS_SISTRIPTKMAPS_H + +// CMSSW includes +#include "CalibTracker/StandaloneTrackerTopology/interface/StandaloneTrackerTopology.h" +#include "DataFormats/SiPixelDetId/interface/PXBDetId.h" +#include "DataFormats/SiPixelDetId/interface/PXFDetId.h" +#include "DataFormats/TrackerCommon/interface/PixelBarrelName.h" +#include "DataFormats/TrackerCommon/interface/PixelEndcapName.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +// ROOT includes +#include "TArrow.h" +#include "TPaletteAxis.h" +#include "TGaxis.h" +#include "TCanvas.h" +#include "TColor.h" +#include "TGraph.h" +#include "TLatex.h" +#include "TH2Poly.h" +#include "TStyle.h" + +// STL includes +#include +#include +#include +#include +#include + +// boost includes +#include +#include + +#define MYOUT LogDebug("SiStripTkMaps") + +/*-------------------------------------------------------------------- +/ Ancillary class to build SiStrip Tracker maps +/--------------------------------------------------------------------*/ +class SiStripTkMaps { +public: + SiStripTkMaps(const char* option) + : m_option{option}, + m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( + edm::FileInPath("Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml").fullPath())} {} + + ~SiStripTkMaps() = default; + + //============================================================================ + void bookMap(const std::string mapTitle, const std::string zAxisTitle) { + double minx = 0xFFFFFF, maxx = -0xFFFFFF, miny = 0xFFFFFF, maxy = -0xFFFFFFF; + readVertices(minx, maxx, miny, maxy); + + // set the titles + m_zAxisTitle = zAxisTitle; + m_mapTitle = mapTitle; + + TGaxis::SetMaxDigits(2); + + // margin of the box + static constexpr int margin = 5; + m_trackerMap = + new TH2Poly("Tracker Map", m_mapTitle.c_str(), minx - margin, maxx + margin, miny - margin, maxy + margin); + m_trackerMap->SetFloat(); + m_trackerMap->SetOption(m_option); + m_trackerMap->SetStats(false); + m_trackerMap->GetZaxis()->SetLabelSize(0.03); + m_trackerMap->GetZaxis()->SetTitleOffset(0.5); + m_trackerMap->GetZaxis()->SetTitleSize(0.05); + m_trackerMap->GetZaxis()->SetTitle(m_zAxisTitle.c_str()); + m_trackerMap->GetZaxis()->CenterTitle(); + + for (const auto& pair : m_bins) { + m_trackerMap->AddBin(pair.second->Clone()); + } + } + + //============================================================================ + void fill(long rawid, double val) { + m_trackerMap->Fill(TString::Format("%ld", rawid), val); + m_values.push_back(val); + } + + //============================================================================ + void drawMap(TCanvas& canvas, std::string option = "") { + // margins + static constexpr float tmargin_ = 0.08; + static constexpr float bmargin_ = 0.02; + static constexpr float lmargin_ = 0.02; + static constexpr float rmargin_ = 0.08; + + // window size + static constexpr int wH_ = 3000; + static constexpr int hH_ = 850; + + canvas.cd(); + adjustCanvasMargins(canvas.cd(), tmargin_, bmargin_, lmargin_, rmargin_); + canvas.Update(); + + m_trackerMap->SetTitle(""); + if (!option.empty()) { + m_trackerMap->Draw(option.c_str()); + } else { + m_trackerMap->Draw(); + } + + canvas.SetFrameLineColor(0); + gPad->Update(); + TPaletteAxis* palette = (TPaletteAxis*)m_trackerMap->GetListOfFunctions()->FindObject("palette"); + if (palette != nullptr) { + palette->SetLabelSize(0.02); + palette->SetX1NDC(1 - rmargin_); + palette->SetX2NDC(1 - rmargin_ + lmargin_); + } + + // if not right size, and not drawn in same mode + if (canvas.GetWindowHeight() != hH_ && canvas.GetWindowWidth() != wH_ && option.find("same") == std::string::npos) { + canvas.SetWindowSize(wH_, hH_); + } + + // call the map dressing + dressMap(canvas); + } + + //============================================================================ + const TH2Poly* getTheMap() { return m_trackerMap; } + + //============================================================================ + inline const std::string& getTheMapTitle() { return m_mapTitle; } + + //============================================================================ + inline const std::string& getTheZAxisTitle() { return m_zAxisTitle; } + + //============================================================================ + inline const std::vector& getTheFilledIds() { return m_detIdVector; } + + //============================================================================ + inline const std::vector& getTheFilledValues() { return m_values; } + + //============================================================================ + void setZAxisRange(double xmin, double xmax) { m_trackerMap->GetZaxis()->SetRangeUser(xmin, xmax); } + +private: + // private members + Option_t* m_option; + std::string m_mapTitle = ""; + std::string m_zAxisTitle = ""; + double m_axmin, m_axmax; + std::map> m_bins; + std::vector m_detIdVector; + std::vector m_values; + TrackerTopology m_trackerTopo; + TH2Poly* m_trackerMap{nullptr}; + + // private methods + //============================================================================ + void dressMap(TCanvas& canv) { + std::array barrelNames = { + {"TIB L2", "TIB L1", "TIB L4", "TIB L3", "TOB L2", "TOB L1", "TOB L4", " TOB L3", "TOB L6", "TOB L5"}}; + std::array endcapNames = {{"TID", "TEC", "TID", "TEC"}}; + std::array disknumbering = {{"+1", "+2", "+3", "+1", "+2", "+3", "+4", "+5", + "+6", "+7", "+8", "+9", "-1", "-2", "-3", "-1", + "-2", "-3", "-4", "-5", "-6", "-7", "-8", "-9"}}; + + static constexpr std::array b_coordx = { + {0.1, 0.1, 0.26, 0.26, 0.41, 0.41, 0.56, 0.56, 0.725, 0.725, 0.05, 0.17}}; + static constexpr std::array b_coordy = { + {0.70, 0.45, 0.70, 0.45, 0.70, 0.46, 0.70, 0.46, 0.70, 0.46, 0.85, 0.85}}; + + static constexpr std::array e_coordx = {{0.01, 0.21, 0.01, 0.21}}; + static constexpr std::array e_coordy = {{0.89, 0.89, 0.17, 0.17}}; + + static constexpr std::array n_coordx = {{0.01, 0.087, 0.165, 0.227, 0.305, 0.383, 0.461, 0.539, + 0.616, 0.694, 0.772, 0.850, 0.01, 0.087, 0.165, 0.227, + 0.305, 0.383, 0.461, 0.539, 0.617, 0.695, 0.773, 0.851}}; + + static constexpr std::array n_coordy = {{0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, + 0.85, 0.85, 0.85, 0.85, 0.13, 0.13, 0.13, 0.13, + 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13}}; + + canv.cd(); + for (const auto& name : barrelNames | boost::adaptors::indexed(0)) { + auto ltx = TLatex(); + ltx.SetTextFont(62); + ltx.SetTextSize(0.035); + ltx.SetTextAlign(11); + ltx.DrawLatexNDC(b_coordx[name.index()], b_coordy[name.index()], name.value().c_str()); + } + + for (const auto& name : endcapNames | boost::adaptors::indexed(0)) { + auto ltx = TLatex(); + ltx.SetTextFont(62); + ltx.SetTextSize(0.05); + ltx.SetTextAlign(11); + ltx.DrawLatexNDC(e_coordx[name.index()], e_coordy[name.index()], name.value().c_str()); + } + + for (const auto& name : disknumbering | boost::adaptors::indexed(0)) { + auto ltx = TLatex(); + ltx.SetTextFont(62); + ltx.SetTextSize(0.035); + ltx.SetTextAlign(11); + ltx.DrawLatexNDC(n_coordx[name.index()], n_coordy[name.index()], name.value().c_str()); + } + + auto ltx = TLatex(); + ltx.SetTextFont(62); + ltx.SetTextSize(0.045); + ltx.SetTextAlign(11); + ltx.DrawLatexNDC(gPad->GetLeftMargin(), 1 - gPad->GetTopMargin() + 0.03, m_mapTitle.c_str()); + + // barrel axes + drawArrows(0.09, 0.23, 0.24, 0.45, "#phi", "z"); + // endcap axes + drawArrows(0.85, 0.89, 0.83, 0.95, "x", "y"); + + canv.Modified(); + canv.Update(); // make sure it's really (re)drawn + } + + //============================================================================ + void drawArrows(const float x_X1, + const float x_X2, + const float x_Y1, + const float y_Y2, + const char* x_label, + const char* y_label) { + auto arrow_X = TArrow(); + arrow_X.SetLineColor(kBlue); + arrow_X.SetLineWidth(2); + arrow_X.SetOption("|>"); + arrow_X.SetArrowSize(10); + arrow_X.DrawLineNDC(x_X1, x_Y1, x_X2, x_Y1); + + auto arrow_Y = TArrow(); + arrow_Y.SetLineColor(kBlue); + arrow_Y.SetLineWidth(2); + arrow_Y.SetOption("|>"); + arrow_Y.SetArrowSize(10); + arrow_Y.DrawLineNDC(x_X2, x_Y1, x_X2, y_Y2); + + auto text_X = TLatex(); + text_X.SetTextSize(0.04); + text_X.SetTextAlign(11); + text_X.SetTextColor(kBlue); + text_X.DrawLatexNDC(x_X1, x_Y1 - 0.03, x_label); + + auto text_Y = TLatex(); + text_Y.SetTextSize(0.04); + text_Y.SetTextAlign(11); + text_Y.SetTextColor(kBlue); + text_Y.DrawLatexNDC(x_X2 + 0.005, y_Y2 - 0.01, y_label); + } + + //============================================================================ + void adjustCanvasMargins(TVirtualPad* pad, const float top, const float bottom, const float left, const float right) { + if (top > 0) { + pad->SetTopMargin(top); + } + if (bottom > 0) { + pad->SetBottomMargin(bottom); + } + if (left > 0) { + pad->SetLeftMargin(left); + } + if (right > 0) { + pad->SetRightMargin(right); + } + } + + //============================================================================ + void readVertices(double& minx, double& maxx, double& miny, double& maxy) { + std::ifstream in; + + // TPolyline vertices stored at https://github.com/cms-data/DQM-SiStripMonitorClient + in.open(edm::FileInPath("DQM/SiStripMonitorClient/data/Geometry/tracker_map_bare").fullPath().c_str()); + + if (!in.good()) { + throw cms::Exception("FileError") << "SiStripTkMaps: problem opening vertices file!!" << std::endl; + return; + } + + while (in.good()) { + long detid = 0; + double x[5], y[5]; + + std::string line; + std::getline(in, line); + typedef boost::tokenizer> tokenizer; + boost::char_separator sep{" "}; + tokenizer tok{line, sep}; + + int ix{0}, iy{0}; + bool isPixel{false}; + for (const auto& t : tok | boost::adaptors::indexed(0)) { + int i = t.index(); + if (i == 0) { + detid = atoll((t.value()).c_str()); + + // Drop Pixel Data + DetId detId(detid); + if (detId.subdetId() == PixelSubdetector::PixelBarrel || detId.subdetId() == PixelSubdetector::PixelEndcap) { + isPixel = true; + break; + } + } else { + if (i % 2 == 0) { + x[ix] = atof((t.value()).c_str()); + if (x[ix] < minx) { + minx = x[ix]; + } + if (x[ix] > maxx) { + maxx = x[ix]; + } + ++ix; + } else { + y[iy] = atof((t.value()).c_str()); + if (y[iy] < miny) { + miny = y[iy]; + } + if (y[iy] > maxy) { + maxy = y[iy]; + } + ++iy; + } // else + } // else + } // loop on entries + + if (isPixel) { + continue; + } + + m_bins[detid] = std::make_shared(ix, x, y); + m_bins[detid]->SetName(TString::Format("%ld", detid)); + m_bins[detid]->SetTitle(TString::Format("Module ID=%ld", detid)); + m_detIdVector.push_back(detid); + } + } +}; + +#endif diff --git a/CondCore/SiStripPlugins/plugins/BuildFile.xml b/CondCore/SiStripPlugins/plugins/BuildFile.xml index 8571d57487480..a8f487dae7221 100644 --- a/CondCore/SiStripPlugins/plugins/BuildFile.xml +++ b/CondCore/SiStripPlugins/plugins/BuildFile.xml @@ -19,6 +19,7 @@ + @@ -27,6 +28,7 @@ + diff --git a/CondCore/SiStripPlugins/plugins/SiStripApvGain_PayloadInspector.cc b/CondCore/SiStripPlugins/plugins/SiStripApvGain_PayloadInspector.cc index 78e2a41673f99..93aeb2d9f7185 100644 --- a/CondCore/SiStripPlugins/plugins/SiStripApvGain_PayloadInspector.cc +++ b/CondCore/SiStripPlugins/plugins/SiStripApvGain_PayloadInspector.cc @@ -40,17 +40,17 @@ namespace { + using namespace cond::payloadInspector; + /************************************************ 1d histogram of SiStripApvGains of 1 IOV *************************************************/ // inherit from one of the predefined plot class: Histogram1D - class SiStripApvGainsValue : public cond::payloadInspector::Histogram1D { + class SiStripApvGainsValue : public Histogram1D { public: SiStripApvGainsValue() - : cond::payloadInspector::Histogram1D( - "SiStripApv Gains values", "SiStripApv Gains values", 200, 0.0, 2.0) { - Base::setSingleIov(true); + : Histogram1D("SiStripApv Gains values", "SiStripApv Gains values", 200, 0.0, 2.0) { } bool fill() override { @@ -81,17 +81,15 @@ namespace { *************************************************/ // inherit from one of the predefined plot class: Histogram1D - class SiStripApvBarrelGainsByLayer : public cond::payloadInspector::Histogram1D { + class SiStripApvBarrelGainsByLayer : public Histogram1D { public: SiStripApvBarrelGainsByLayer() - : cond::payloadInspector::Histogram1D("SiStripApv Gains averages by Barrel layer", - "Barrel layer (0-3: TIB), (4-9: TOB)", - 10, - 0, - 10, - "average SiStripApv Gain") { - Base::setSingleIov(true); - } + : Histogram1D("SiStripApv Gains averages by Barrel layer", + "Barrel layer (0-3: TIB), (4-9: TOB)", + 10, + 0, + 10, + "average SiStripApv Gain") {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -142,21 +140,18 @@ namespace { SiStripApvGains for Tracker Barrel of 1 IOV *************************************************/ - class SiStripApvAbsoluteBarrelGainsByLayer : public cond::payloadInspector::Histogram2D { + class SiStripApvAbsoluteBarrelGainsByLayer : public Histogram2D { public: SiStripApvAbsoluteBarrelGainsByLayer() - : cond::payloadInspector::Histogram2D("SiStripApv Gains by Barrel layer", - "Barrel layer (0-3: TIB), (4-9: TOB)", - 10, - 0, - 10, - "SiStripApv Gain", - 200, - 0.0, - 2.0) { - Base::setSingleIov(true); - } - + : Histogram2D("SiStripApv Gains by Barrel layer", + "Barrel layer (0-3: TIB), (4-9: TOB)", + 10, + 0, + 10, + "SiStripApv Gain", + 200, + 0.0, + 2.0) {} bool fill() override { auto tag = PlotBase::getTag<0>(); for (auto const& iov : tag.iovs) { @@ -191,17 +186,15 @@ namespace { *************************************************/ // inherit from one of the predefined plot class: Histogram1D - class SiStripApvEndcapMinusGainsByDisk : public cond::payloadInspector::Histogram1D { + class SiStripApvEndcapMinusGainsByDisk : public Histogram1D { public: SiStripApvEndcapMinusGainsByDisk() - : cond::payloadInspector::Histogram1D("SiStripApv Gains averages by Endcap (minus) disk", - "Endcap (minus) disk (0-2: TID), (3-11: TEC)", - 12, - 0, - 12, - "average SiStripApv Gain") { - Base::setSingleIov(true); - } + : Histogram1D("SiStripApv Gains averages by Endcap (minus) disk", + "Endcap (minus) disk (0-2: TID), (3-11: TEC)", + 12, + 0, + 12, + "average SiStripApv Gain") {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -261,17 +254,15 @@ namespace { *************************************************/ // inherit from one of the predefined plot class: Histogram1D - class SiStripApvEndcapPlusGainsByDisk : public cond::payloadInspector::Histogram1D { + class SiStripApvEndcapPlusGainsByDisk : public Histogram1D { public: SiStripApvEndcapPlusGainsByDisk() - : cond::payloadInspector::Histogram1D("SiStripApv Gains averages by Endcap (plus) disk", - "Endcap (plus) disk (0-2: TID), (3-11: TEC)", - 12, - 0, - 12, - "average SiStripApv Gain") { - Base::setSingleIov(true); - } + : Histogram1D("SiStripApv Gains averages by Endcap (plus) disk", + "Endcap (plus) disk (0-2: TID), (3-11: TEC)", + 12, + 0, + 12, + "average SiStripApv Gain") {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -330,20 +321,18 @@ namespace { 2D histogram of absolute (i.e. not average) SiStripApv Gains on the Endcap- for 1 IOV ************************************************/ - class SiStripApvAbsoluteEndcapMinusGainsByDisk : public cond::payloadInspector::Histogram2D { + class SiStripApvAbsoluteEndcapMinusGainsByDisk : public Histogram2D { public: SiStripApvAbsoluteEndcapMinusGainsByDisk() - : cond::payloadInspector::Histogram2D("SiStripApv Gains averages by Endcap (minus) disk", - "Endcap (minus) disk (0-2: TID), (3-11: TEC)", - 12, - 0, - 12, - "SiStripApv Gain", - 200, - 0.0, - 2.0) { - Base::setSingleIov(true); - } + : Histogram2D("SiStripApv Gains averages by Endcap (minus) disk", + "Endcap (minus) disk (0-2: TID), (3-11: TEC)", + 12, + 0, + 12, + "SiStripApv Gain", + 200, + 0.0, + 2.0) {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -390,21 +379,18 @@ namespace { 2D histogram of absolute (i.e. not average) SiStripApv Gains on the Endcap+ for 1 IOV ************************************************/ - class SiStripApvAbsoluteEndcapPlusGainsByDisk : public cond::payloadInspector::Histogram2D { + class SiStripApvAbsoluteEndcapPlusGainsByDisk : public Histogram2D { public: SiStripApvAbsoluteEndcapPlusGainsByDisk() - : cond::payloadInspector::Histogram2D("SiStripApv Gains averages by Endcap (plus) disk", - "Endcap (plus) disk (0-2: TID), (3-11: TEC)", - 12, - 0, - 12, - "SiStripApv Gain", - 200, - 0.0, - 2.0) { - Base::setSingleIov(true); - } - + : Histogram2D("SiStripApv Gains averages by Endcap (plus) disk", + "Endcap (plus) disk (0-2: TID), (3-11: TEC)", + 12, + 0, + 12, + "SiStripApv Gain", + 200, + 0.0, + 2.0) {} bool fill() override { auto tag = PlotBase::getTag<0>(); for (auto const& iov : tag.iovs) { @@ -449,15 +435,13 @@ namespace { /************************************************ TrackerMap of SiStripApvGains (average gain per detid) *************************************************/ - class SiStripApvGainsAverageTrackerMap : public cond::payloadInspector::PlotImage { + class SiStripApvGainsAverageTrackerMap : public PlotImage { public: - SiStripApvGainsAverageTrackerMap() - : cond::payloadInspector::PlotImage("Tracker Map of average SiStripGains") { - setSingleIov(true); - } + SiStripApvGainsAverageTrackerMap() : PlotImage("Tracker Map of average SiStripGains") {} - bool fill(const std::vector>& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::string titleMap = "SiStrip APV Gain average per module (payload : " + std::get<1>(iov) + ")"; @@ -498,15 +482,14 @@ namespace { /************************************************ TrackerMap of SiStripApvGains (module with default) *************************************************/ - class SiStripApvGainsDefaultTrackerMap : public cond::payloadInspector::PlotImage { + class SiStripApvGainsDefaultTrackerMap : public PlotImage { public: SiStripApvGainsDefaultTrackerMap() - : cond::payloadInspector::PlotImage("Tracker Map of SiStripGains to default") { - setSingleIov(true); - } + : PlotImage("Tracker Map of SiStripGains to default") {} - bool fill(const std::vector>& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::unique_ptr tmap = std::make_unique("SiStripApvGains"); @@ -568,33 +551,44 @@ namespace { TrackerMap of SiStripApvGains (ratio with previous gain per detid) *************************************************/ - class SiStripApvGainsRatioWithPreviousIOVTrackerMapBase : public cond::payloadInspector::PlotImage { + template + class SiStripApvGainsRatioTrackerMapBase : public PlotImage { public: - SiStripApvGainsRatioWithPreviousIOVTrackerMapBase() - : cond::payloadInspector::PlotImage("Tracker Map of ratio of SiStripGains with previous IOV") { - cond::payloadInspector::PlotBase::addInputParam("nsigma"); + SiStripApvGainsRatioTrackerMapBase() + : PlotImage("Tracker Map of ratio of SiStripGains with previous IOV") { + PlotBase::addInputParam("nsigma"); } - bool fill(const std::vector>& iovs) override { + bool fill() override { + // determine n. sigmas unsigned int nsigma(1); - auto paramValues = cond::payloadInspector::PlotBase::inputParamValues(); + auto paramValues = PlotBase::inputParamValues(); auto ip = paramValues.find("nsigma"); if (ip != paramValues.end()) { nsigma = boost::lexical_cast(ip->second); } - std::vector> sorted_iovs = iovs; - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; + + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - std::shared_ptr last_payload = fetchPayload(std::get<1>(lastiov)); - std::shared_ptr first_payload = fetchPayload(std::get<1>(firstiov)); + std::shared_ptr last_payload = this->fetchPayload(std::get<1>(lastiov)); + std::shared_ptr first_payload = this->fetchPayload(std::get<1>(firstiov)); std::string titleMap = "SiStrip APV Gain ratio per module average (IOV: "; @@ -652,65 +646,62 @@ namespace { //========================= auto range = SiStripPI::getTheRange(cachedRatio, nsigma); - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); tmap->save(true, range.first, range.second, fileName); return true; } }; - class SiStripApvGainsAvgDeviationRatioWithPreviousIOVTrackerMap - : public SiStripApvGainsRatioWithPreviousIOVTrackerMapBase { - public: - SiStripApvGainsAvgDeviationRatioWithPreviousIOVTrackerMap() : SiStripApvGainsRatioWithPreviousIOVTrackerMapBase() { - this->setSingleIov(false); - } - }; - - class SiStripApvGainsAvgDeviationRatioTrackerMapTwoTags : public SiStripApvGainsRatioWithPreviousIOVTrackerMapBase { - public: - SiStripApvGainsAvgDeviationRatioTrackerMapTwoTags() : SiStripApvGainsRatioWithPreviousIOVTrackerMapBase() { - this->setTwoTags(true); - } - }; + using SiStripApvGainsAvgDeviationRatioWithPreviousIOVTrackerMap = SiStripApvGainsRatioTrackerMapBase<1, MULTI_IOV>; + using SiStripApvGainsAvgDeviationRatioTrackerMapTwoTags = SiStripApvGainsRatioTrackerMapBase<2, SINGLE_IOV>; /************************************************ TrackerMap of SiStripApvGains (ratio for largest deviation with previous gain per detid) *************************************************/ - class SiStripApvGainsRatioMaxDeviationWithPreviousIOVTrackerMapBase - : public cond::payloadInspector::PlotImage { + template + class SiStripApvGainsRatioMaxDeviationTrackerMapBase : public PlotImage { public: - SiStripApvGainsRatioMaxDeviationWithPreviousIOVTrackerMapBase() - : cond::payloadInspector::PlotImage( + SiStripApvGainsRatioMaxDeviationTrackerMapBase() + : PlotImage( "Tracker Map of ratio (for largest deviation) of SiStripGains with previous IOV") { - cond::payloadInspector::PlotBase::addInputParam("nsigma"); + PlotBase::addInputParam("nsigma"); } - bool fill(const std::vector>& iovs) override { + bool fill() override { unsigned int nsigma(1); - - auto paramValues = cond::payloadInspector::PlotBase::inputParamValues(); + auto paramValues = PlotBase::inputParamValues(); auto ip = paramValues.find("nsigma"); if (ip != paramValues.end()) { nsigma = boost::lexical_cast(ip->second); - std::cout << "using custom z-axis saturation: " << nsigma << " sigmas" << std::endl; + edm::LogPrint("SiStripApvGain_PayloadInspector") + << "using custom z-axis saturation: " << nsigma << " sigmas" << std::endl; } else { - std::cout << "using default saturation: " << nsigma << " sigmas" << std::endl; + edm::LogPrint("SiStripApvGain_PayloadInspector") + << "using default saturation: " << nsigma << " sigmas" << std::endl; } - std::vector> sorted_iovs = iovs; + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - std::shared_ptr last_payload = fetchPayload(std::get<1>(lastiov)); - std::shared_ptr first_payload = fetchPayload(std::get<1>(firstiov)); + std::shared_ptr last_payload = this->fetchPayload(std::get<1>(lastiov)); + std::shared_ptr first_payload = this->fetchPayload(std::get<1>(firstiov)); std::string titleMap = "SiStrip APV Gain ratio for largest deviation per module (IOV: "; @@ -787,43 +778,30 @@ namespace { //========================= - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); tmap->save(true, range.first, range.second, fileName); return true; } }; - class SiStripApvGainsMaxDeviationRatioWithPreviousIOVTrackerMap - : public SiStripApvGainsRatioMaxDeviationWithPreviousIOVTrackerMapBase { - public: - SiStripApvGainsMaxDeviationRatioWithPreviousIOVTrackerMap() - : SiStripApvGainsRatioMaxDeviationWithPreviousIOVTrackerMapBase() { - this->setSingleIov(false); - } - }; + using SiStripApvGainsMaxDeviationRatioWithPreviousIOVTrackerMap = + SiStripApvGainsRatioMaxDeviationTrackerMapBase<1, MULTI_IOV>; - class SiStripApvGainsMaxDeviationRatioTrackerMapTwoTags - : public SiStripApvGainsRatioMaxDeviationWithPreviousIOVTrackerMapBase { - public: - SiStripApvGainsMaxDeviationRatioTrackerMapTwoTags() - : SiStripApvGainsRatioMaxDeviationWithPreviousIOVTrackerMapBase() { - this->setTwoTags(true); - } - }; + using SiStripApvGainsMaxDeviationRatioTrackerMapTwoTags = + SiStripApvGainsRatioMaxDeviationTrackerMapBase<2, SINGLE_IOV>; /************************************************ TrackerMap of SiStripApvGains (maximum gain per detid) *************************************************/ - class SiStripApvGainsMaximumTrackerMap : public cond::payloadInspector::PlotImage { + class SiStripApvGainsMaximumTrackerMap : public PlotImage { public: SiStripApvGainsMaximumTrackerMap() - : cond::payloadInspector::PlotImage("Tracker Map of SiStripAPVGains (maximum per DetId)") { - setSingleIov(true); - } + : PlotImage("Tracker Map of SiStripAPVGains (maximum per DetId)") {} - bool fill(const std::vector>& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::string titleMap = "SiStrip APV Gain maximum per module (payload : " + std::get<1>(iov) + ")"; @@ -868,15 +846,15 @@ namespace { /************************************************ TrackerMap of SiStripApvGains (minimum gain per detid) *************************************************/ - class SiStripApvGainsMinimumTrackerMap : public cond::payloadInspector::PlotImage { + class SiStripApvGainsMinimumTrackerMap : public PlotImage { public: SiStripApvGainsMinimumTrackerMap() - : cond::payloadInspector::PlotImage("Tracker Map of SiStripAPVGains (minimum per DetId)") { - setSingleIov(true); - } + : PlotImage("Tracker Map of SiStripAPVGains (minimum per DetId)") {} + + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); - bool fill(const std::vector>& iovs) override { - auto iov = iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::string titleMap = "SiStrip APV Gain minumum per module (payload : " + std::get<1>(iov) + ")"; @@ -922,11 +900,10 @@ namespace { time history histogram of SiStripApvGains *************************************************/ - class SiStripApvGainByRunMeans : public cond::payloadInspector::HistoryPlot { + class SiStripApvGainByRunMeans : public HistoryPlot { public: SiStripApvGainByRunMeans() - : cond::payloadInspector::HistoryPlot("SiStripApv Gains average", - "average Strip APV gain value") {} + : HistoryPlot("SiStripApv Gains average", "average Strip APV gain value") {} ~SiStripApvGainByRunMeans() override = default; float getFromPayload(SiStripApvGain& payload) override { @@ -953,11 +930,11 @@ namespace { *************************************************/ template - class SiStripApvGainProperties : public cond::payloadInspector::HistoryPlot { + class SiStripApvGainProperties : public HistoryPlot { public: SiStripApvGainProperties() - : cond::payloadInspector::HistoryPlot("SiStripApv Gains " + estimatorType(est), - estimatorType(est) + " Strip APV gain value") {} + : HistoryPlot("SiStripApv Gains " + estimatorType(est), + estimatorType(est) + " Strip APV gain value") {} ~SiStripApvGainProperties() override = default; float getFromPayload(SiStripApvGain& payload) override { @@ -1020,11 +997,11 @@ namespace { time history histogram of TIB SiStripApvGains *************************************************/ - class SiStripApvTIBGainByRunMeans : public cond::payloadInspector::HistoryPlot { + class SiStripApvTIBGainByRunMeans : public HistoryPlot { public: SiStripApvTIBGainByRunMeans() - : cond::payloadInspector::HistoryPlot("SiStripApv Gains average", - "average Tracker Inner Barrel APV gain value") {} + : HistoryPlot("SiStripApv Gains average", + "average Tracker Inner Barrel APV gain value") {} ~SiStripApvTIBGainByRunMeans() override = default; float getFromPayload(SiStripApvGain& payload) override { @@ -1055,11 +1032,10 @@ namespace { time history histogram of TOB SiStripApvGains *************************************************/ - class SiStripApvTOBGainByRunMeans : public cond::payloadInspector::HistoryPlot { + class SiStripApvTOBGainByRunMeans : public HistoryPlot { public: SiStripApvTOBGainByRunMeans() - : cond::payloadInspector::HistoryPlot("SiStripApv Gains average", - "average Tracker Outer Barrel gain value") {} + : HistoryPlot("SiStripApv Gains average", "average Tracker Outer Barrel gain value") {} ~SiStripApvTOBGainByRunMeans() override = default; float getFromPayload(SiStripApvGain& payload) override { @@ -1090,11 +1066,11 @@ namespace { time history histogram of TID SiStripApvGains *************************************************/ - class SiStripApvTIDGainByRunMeans : public cond::payloadInspector::HistoryPlot { + class SiStripApvTIDGainByRunMeans : public HistoryPlot { public: SiStripApvTIDGainByRunMeans() - : cond::payloadInspector::HistoryPlot("SiStripApv Gains average", - "average Tracker Inner Disks APV gain value") {} + : HistoryPlot("SiStripApv Gains average", "average Tracker Inner Disks APV gain value") { + } ~SiStripApvTIDGainByRunMeans() override = default; float getFromPayload(SiStripApvGain& payload) override { @@ -1124,11 +1100,11 @@ namespace { time history histogram of TEC SiStripApvGains *************************************************/ - class SiStripApvTECGainByRunMeans : public cond::payloadInspector::HistoryPlot { + class SiStripApvTECGainByRunMeans : public HistoryPlot { public: SiStripApvTECGainByRunMeans() - : cond::payloadInspector::HistoryPlot("SiStripApv Gains average in TEC", - "average Tracker Endcaps APV gain value") {} + : HistoryPlot("SiStripApv Gains average in TEC", + "average Tracker Endcaps APV gain value") {} ~SiStripApvTECGainByRunMeans() override = default; float getFromPayload(SiStripApvGain& payload) override { @@ -1159,15 +1135,12 @@ namespace { test class *************************************************/ - class SiStripApvGainsTest : public cond::payloadInspector::Histogram1D { + class SiStripApvGainsTest : public Histogram1D { public: SiStripApvGainsTest() - : cond::payloadInspector::Histogram1D( - "SiStripApv Gains test", "SiStripApv Gains test", 10, 0.0, 10.0), + : Histogram1D("SiStripApv Gains test", "SiStripApv Gains test", 10, 0.0, 10.0), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( - edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} { - Base::setSingleIov(true); - } + edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -1207,23 +1180,32 @@ namespace { Compare Gains from 2 IOVs, 2 pads canvas, firsr for ratio, second for scatter plot *************************************************/ - class SiStripApvGainsComparatorBase : public cond::payloadInspector::PlotImage { + template + class SiStripApvGainsComparatorBase : public PlotImage { public: - SiStripApvGainsComparatorBase() : cond::payloadInspector::PlotImage("SiStripGains Comparison") {} - - bool fill(const std::vector>& iovs) override { - std::vector> sorted_iovs = iovs; - - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); + SiStripApvGainsComparatorBase() : PlotImage("SiStripGains Comparison") {} - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); + bool fill() override { + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; + + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); + + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - std::shared_ptr last_payload = fetchPayload(std::get<1>(lastiov)); - std::shared_ptr first_payload = fetchPayload(std::get<1>(firstiov)); + std::shared_ptr last_payload = this->fetchPayload(std::get<1>(lastiov)); + std::shared_ptr first_payload = this->fetchPayload(std::get<1>(firstiov)); std::string lastIOVsince = std::to_string(std::get<0>(lastiov)); std::string firstIOVsince = std::to_string(std::get<0>(firstiov)); @@ -1391,47 +1373,49 @@ namespace { legend2.Draw("same"); - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); canvas.SaveAs(fileName.c_str()); return true; } }; - class SiStripApvGainsComparatorSingleTag : public SiStripApvGainsComparatorBase { - public: - SiStripApvGainsComparatorSingleTag() : SiStripApvGainsComparatorBase() { setSingleIov(false); } - }; - - class SiStripApvGainsComparatorTwoTags : public SiStripApvGainsComparatorBase { - public: - SiStripApvGainsComparatorTwoTags() : SiStripApvGainsComparatorBase() { setTwoTags(true); } - }; + using SiStripApvGainsComparatorSingleTag = SiStripApvGainsComparatorBase<1, MULTI_IOV>; + using SiStripApvGainsComparatorTwoTags = SiStripApvGainsComparatorBase<2, SINGLE_IOV>; //*******************************************// // Compare Gains from 2 IOVs //******************************************// - class SiStripApvGainsValuesComparatorBase : public cond::payloadInspector::PlotImage { + template + class SiStripApvGainsValuesComparatorBase : public PlotImage { public: SiStripApvGainsValuesComparatorBase() - : cond::payloadInspector::PlotImage("Comparison of SiStrip APV gains values") {} + : PlotImage("Comparison of SiStrip APV gains values") {} - bool fill(const std::vector>& iovs) override { + bool fill() override { TH1F::SetDefaultSumw2(true); - std::vector> sorted_iovs = iovs; + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - std::shared_ptr last_payload = fetchPayload(std::get<1>(lastiov)); - std::shared_ptr first_payload = fetchPayload(std::get<1>(firstiov)); + std::shared_ptr last_payload = this->fetchPayload(std::get<1>(lastiov)); + std::shared_ptr first_payload = this->fetchPayload(std::get<1>(firstiov)); std::string lastIOVsince = std::to_string(std::get<0>(lastiov)); std::string firstIOVsince = std::to_string(std::get<0>(firstiov)); @@ -1567,50 +1551,52 @@ namespace { hratio->GetXaxis()->SetLabelFont(43); // Absolute font size in pixel (precision 3) hratio->GetXaxis()->SetTitleOffset(3.); - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); canvas.SaveAs(fileName.c_str()); return true; } }; - class SiStripApvGainsValuesComparatorSingleTag : public SiStripApvGainsValuesComparatorBase { - public: - SiStripApvGainsValuesComparatorSingleTag() : SiStripApvGainsValuesComparatorBase() { setSingleIov(false); } - }; - - class SiStripApvGainsValuesComparatorTwoTags : public SiStripApvGainsValuesComparatorBase { - public: - SiStripApvGainsValuesComparatorTwoTags() : SiStripApvGainsValuesComparatorBase() { setTwoTags(true); } - }; + using SiStripApvGainsValuesComparatorSingleTag = SiStripApvGainsValuesComparatorBase<1, MULTI_IOV>; + using SiStripApvGainsValuesComparatorTwoTags = SiStripApvGainsValuesComparatorBase<2, SINGLE_IOV>; //*******************************************// // Compare Gains ratio from 2 IOVs, region by region //******************************************// - class SiStripApvGainsRatioComparatorByRegionBase : public cond::payloadInspector::PlotImage { + template + class SiStripApvGainsRatioComparatorByRegionBase : public PlotImage { public: SiStripApvGainsRatioComparatorByRegionBase() - : cond::payloadInspector::PlotImage("Module by Module Comparison of SiStrip APV gains"), + : PlotImage("Module by Module Comparison of SiStrip APV gains"), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} - bool fill(const std::vector>& iovs) override { + bool fill() override { //gStyle->SetPalette(5); SiStripPI::setPaletteStyle(SiStripPI::GRAY); - std::vector> sorted_iovs = iovs; + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - std::shared_ptr last_payload = fetchPayload(std::get<1>(lastiov)); - std::shared_ptr first_payload = fetchPayload(std::get<1>(firstiov)); + std::shared_ptr last_payload = this->fetchPayload(std::get<1>(lastiov)); + std::shared_ptr first_payload = this->fetchPayload(std::get<1>(firstiov)); std::string lastIOVsince = std::to_string(std::get<0>(lastiov)); std::string firstIOVsince = std::to_string(std::get<0>(firstiov)); @@ -1739,7 +1725,7 @@ namespace { hpfx_tmp->SetMarkerStyle(20); hpfx_tmp->Draw("same"); - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); canvas.SaveAs(fileName.c_str()); delete hpfx_tmp; @@ -1784,42 +1770,42 @@ namespace { } }; - class SiStripApvGainsRatioComparatorByRegionSingleTag : public SiStripApvGainsRatioComparatorByRegionBase { - public: - SiStripApvGainsRatioComparatorByRegionSingleTag() : SiStripApvGainsRatioComparatorByRegionBase() { - setSingleIov(false); - } - }; - - class SiStripApvGainsRatioComparatorByRegionTwoTags : public SiStripApvGainsRatioComparatorByRegionBase { - public: - SiStripApvGainsRatioComparatorByRegionTwoTags() : SiStripApvGainsRatioComparatorByRegionBase() { setTwoTags(true); } - }; + using SiStripApvGainsRatioComparatorByRegionSingleTag = SiStripApvGainsRatioComparatorByRegionBase<1, MULTI_IOV>; + using SiStripApvGainsRatioComparatorByRegionTwoTags = SiStripApvGainsRatioComparatorByRegionBase<2, SINGLE_IOV>; /************************************************ Compare Gains for each tracker region *************************************************/ - class SiStripApvGainsComparatorByRegionBase : public cond::payloadInspector::PlotImage { + template + class SiStripApvGainsComparatorByRegionBase : public PlotImage { public: SiStripApvGainsComparatorByRegionBase() - : cond::payloadInspector::PlotImage("SiStripGains Comparison By Region"), + : PlotImage("SiStripGains Comparison By Region"), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} - bool fill(const std::vector>& iovs) override { - std::vector> sorted_iovs = iovs; - - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); - - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); + bool fill() override { + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; + + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); + + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - std::shared_ptr last_payload = fetchPayload(std::get<1>(lastiov)); - std::shared_ptr first_payload = fetchPayload(std::get<1>(firstiov)); + std::shared_ptr last_payload = this->fetchPayload(std::get<1>(lastiov)); + std::shared_ptr first_payload = this->fetchPayload(std::get<1>(firstiov)); std::vector detid; last_payload->getDetIds(detid); @@ -1955,7 +1941,7 @@ namespace { legend.AddEntry(hlast.get(), ("IOV: " + std::to_string(std::get<0>(lastiov))).c_str(), "PL"); legend.Draw("same"); - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); canvas.SaveAs(fileName.c_str()); return true; @@ -1965,31 +1951,23 @@ namespace { TrackerTopology m_trackerTopo; }; - class SiStripApvGainsComparatorByRegionSingleTag : public SiStripApvGainsComparatorByRegionBase { - public: - SiStripApvGainsComparatorByRegionSingleTag() : SiStripApvGainsComparatorByRegionBase() { setSingleIov(false); } - }; - - class SiStripApvGainsComparatorByRegionTwoTags : public SiStripApvGainsComparatorByRegionBase { - public: - SiStripApvGainsComparatorByRegionTwoTags() : SiStripApvGainsComparatorByRegionBase() { setTwoTags(true); } - }; + using SiStripApvGainsComparatorByRegionSingleTag = SiStripApvGainsComparatorByRegionBase<1, MULTI_IOV>; + using SiStripApvGainsComparatorByRegionTwoTags = SiStripApvGainsComparatorByRegionBase<2, SINGLE_IOV>; /************************************************ Plot gain averages by region *************************************************/ - class SiStripApvGainsByRegion : public cond::payloadInspector::PlotImage { + class SiStripApvGainsByRegion : public PlotImage { public: SiStripApvGainsByRegion() - : cond::payloadInspector::PlotImage("SiStripGains By Region"), + : PlotImage("SiStripGains By Region"), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( - edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} { - setSingleIov(true); - } + edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} - bool fill(const std::vector>& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::vector detid; diff --git a/CondCore/SiStripPlugins/plugins/SiStripBackPlaneCorrection_PayloadInspector.cc b/CondCore/SiStripPlugins/plugins/SiStripBackPlaneCorrection_PayloadInspector.cc index 1971d763b25dd..bea719907a3b1 100644 --- a/CondCore/SiStripPlugins/plugins/SiStripBackPlaneCorrection_PayloadInspector.cc +++ b/CondCore/SiStripPlugins/plugins/SiStripBackPlaneCorrection_PayloadInspector.cc @@ -33,18 +33,18 @@ namespace { + using namespace cond::payloadInspector; + /************************************************ 1d histogram of SiStripBackPlaneCorrection of 1 IOV *************************************************/ // inherit from one of the predefined plot class: Histogram1D - class SiStripBackPlaneCorrectionValue : public cond::payloadInspector::Histogram1D { + class SiStripBackPlaneCorrectionValue : public Histogram1D { public: SiStripBackPlaneCorrectionValue() - : cond::payloadInspector::Histogram1D( - "SiStrip BackPlaneCorrection values", "SiStrip BackPlaneCorrection values", 100, 0.0, 0.1) { - Base::setSingleIov(true); - } + : Histogram1D( + "SiStrip BackPlaneCorrection values", "SiStrip BackPlaneCorrection values", 100, 0.0, 0.1) {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -65,15 +65,14 @@ namespace { /************************************************ TrackerMap of SiStrip BackPlane Correction *************************************************/ - class SiStripBackPlaneCorrection_TrackerMap : public cond::payloadInspector::PlotImage { + class SiStripBackPlaneCorrection_TrackerMap : public PlotImage { public: SiStripBackPlaneCorrection_TrackerMap() - : cond::payloadInspector::PlotImage("Tracker Map SiStrip Backplane correction") { - setSingleIov(true); - } + : PlotImage("Tracker Map SiStrip Backplane correction") {} - bool fill(const std::vector > &iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::unique_ptr tmap = std::make_unique("SiStripBackPlaneCorrection"); @@ -106,17 +105,16 @@ namespace { Plot SiStrip BackPlane Correction averages by partition *************************************************/ - class SiStripBackPlaneCorrectionByRegion : public cond::payloadInspector::PlotImage { + class SiStripBackPlaneCorrectionByRegion : public PlotImage { public: SiStripBackPlaneCorrectionByRegion() - : cond::payloadInspector::PlotImage("SiStripBackPlaneCorrection By Region"), + : PlotImage("SiStripBackPlaneCorrection By Region"), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( - edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} { - setSingleIov(true); - } + edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} - bool fill(const std::vector > &iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); SiStripDetSummary summaryBP{&m_trackerTopo}; diff --git a/CondCore/SiStripPlugins/plugins/SiStripBadStrip_PayloadInspector.cc b/CondCore/SiStripPlugins/plugins/SiStripBadStrip_PayloadInspector.cc index 054e6a6dcb191..c9bc2f20f944a 100644 --- a/CondCore/SiStripPlugins/plugins/SiStripBadStrip_PayloadInspector.cc +++ b/CondCore/SiStripPlugins/plugins/SiStripBadStrip_PayloadInspector.cc @@ -22,6 +22,7 @@ // needed for the tracker map #include "CommonTools/TrackerMap/interface/TrackerMap.h" +#include "CondCore/SiStripPlugins/interface/SiStripTkMaps.h" // auxilliary functions #include "CondCore/SiStripPlugins/interface/SiStripPayloadInspectorHelper.h" @@ -46,17 +47,16 @@ namespace { + using namespace cond::payloadInspector; + /************************************************ test class *************************************************/ - class SiStripBadStripTest : public cond::payloadInspector::Histogram1D { + class SiStripBadStripTest : public Histogram1D { public: SiStripBadStripTest() - : cond::payloadInspector::Histogram1D( - "SiStrip Bad Strip test", "SiStrip Bad Strip test", 10, 0.0, 10.0) { - Base::setSingleIov(true); - } + : Histogram1D("SiStrip Bad Strip test", "SiStrip Bad Strip test", 10, 0.0, 10.0) {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -95,18 +95,19 @@ namespace { /************************************************ TrackerMap of SiStripBadStrip (bad strip per detid) *************************************************/ - class SiStripBadModuleTrackerMap : public cond::payloadInspector::PlotImage { + class SiStripBadModuleTrackerMap : public PlotImage { public: - SiStripBadModuleTrackerMap() - : cond::payloadInspector::PlotImage("Tracker Map of SiStrip Bad Strips") { - setSingleIov(true); - } + SiStripBadModuleTrackerMap() : PlotImage("Tracker Map of SiStrip Bad Strips") {} - bool fill(const std::vector >& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); + auto tagname = PlotBase::getTag<0>().name; std::shared_ptr payload = fetchPayload(std::get<1>(iov)); - std::string titleMap = "Module with at least a bad Strip (payload : " + std::get<1>(iov) + ")"; + auto theIOVsince = std::to_string(std::get<0>(iov)); + + std::string titleMap = "Modules w/ at least 1 bad Strip, Run: " + theIOVsince + " (tag: " + tagname + ")"; std::unique_ptr tmap = std::make_unique("SiStripBadStrips"); tmap->setTitle(titleMap); @@ -131,21 +132,23 @@ namespace { /************************************************ TrackerMap of SiStripBadStrip (bad strips fraction) *************************************************/ - class SiStripBadStripFractionTrackerMap : public cond::payloadInspector::PlotImage { + class SiStripBadStripFractionTrackerMap : public PlotImage { public: SiStripBadStripFractionTrackerMap() - : cond::payloadInspector::PlotImage("Tracker Map of SiStrip Bad Components fraction") { - setSingleIov(true); - } + : PlotImage("Tracker Map of SiStrip Bad Components fraction") {} - bool fill(const std::vector >& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); + auto tagname = PlotBase::getTag<0>().name; std::shared_ptr payload = fetchPayload(std::get<1>(iov)); edm::FileInPath fp_ = edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"); SiStripDetInfoFileReader* reader = new SiStripDetInfoFileReader(fp_.fullPath()); - std::string titleMap = "Fraction of bad Strips per module (payload : " + std::get<1>(iov) + ")"; + auto theIOVsince = std::to_string(std::get<0>(iov)); + + std::string titleMap = "Fraction of bad Strips per module, Run: " + theIOVsince + " (tag: " + tagname + ")"; std::unique_ptr tmap = std::make_unique("SiStripBadStrips"); tmap->setTitle(titleMap); @@ -184,15 +187,74 @@ namespace { } }; + /************************************************ + TrackerMap of SiStripBadStrip (bad strips fraction) + *************************************************/ + class SiStripBadStripFractionTkMap : public PlotImage { + public: + SiStripBadStripFractionTkMap() + : PlotImage("Tracker Map of SiStrip Bad Components fraction") {} + + bool fill() override { + //SiStripPI::setPaletteStyle(SiStripPI::DEFAULT); + gStyle->SetPalette(1); + + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); + auto tagname = PlotBase::getTag<0>().name; + std::shared_ptr payload = fetchPayload(std::get<1>(iov)); + + edm::FileInPath fp_ = edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"); + SiStripDetInfoFileReader* reader = new SiStripDetInfoFileReader(fp_.fullPath()); + + auto theIOVsince = std::to_string(std::get<0>(iov)); + + std::string titleMap = + "Fraction of bad Strips per module, Run: " + theIOVsince + " (tag:#color[2]{" + tagname + "})"; + + SiStripTkMaps myMap("COLZA0 L"); + myMap.bookMap(titleMap, "Fraction of bad Strips per module"); + + SiStripTkMaps ghost("AL"); + ghost.bookMap(titleMap, ""); + + std::vector detid; + payload->getDetIds(detid); + + std::map badStripsPerDetId; + + for (const auto& d : detid) { + SiStripBadStrip::Range range = payload->getRange(d); + for (std::vector::const_iterator badStrip = range.first; badStrip != range.second; ++badStrip) { + badStripsPerDetId[d] += payload->decode(*badStrip).range; + } + float fraction = badStripsPerDetId[d] / (128. * reader->getNumberOfApvsAndStripLength(d).first); + if (fraction > 0.) { + myMap.fill(d, fraction); + } + } // loop over detIds + + //========================= + + std::string fileName(m_imageFileName); + TCanvas canvas("Bad Components fraction", "bad components fraction"); + myMap.drawMap(canvas, ""); + ghost.drawMap(canvas, "same"); + canvas.SaveAs(fileName.c_str()); + + delete reader; + return true; + } + }; + /************************************************ time history histogram of bad components fraction *************************************************/ - class SiStripBadStripFractionByRun : public cond::payloadInspector::HistoryPlot { + class SiStripBadStripFractionByRun : public HistoryPlot { public: SiStripBadStripFractionByRun() - : cond::payloadInspector::HistoryPlot("SiStrip Bad Strip fraction per run", - "Bad Strip fraction [%]") {} + : HistoryPlot("SiStrip Bad Strip fraction per run", "Bad Strip fraction [%]") {} ~SiStripBadStripFractionByRun() override = default; float getFromPayload(SiStripBadStrip& payload) override { @@ -231,11 +293,11 @@ namespace { time history histogram of bad components fraction (TIB) *************************************************/ - class SiStripBadStripTIBFractionByRun : public cond::payloadInspector::HistoryPlot { + class SiStripBadStripTIBFractionByRun : public HistoryPlot { public: SiStripBadStripTIBFractionByRun() - : cond::payloadInspector::HistoryPlot("SiStrip Inner Barrel Bad Strip fraction per run", - "TIB Bad Strip fraction [%]") {} + : HistoryPlot("SiStrip Inner Barrel Bad Strip fraction per run", + "TIB Bad Strip fraction [%]") {} ~SiStripBadStripTIBFractionByRun() override = default; float getFromPayload(SiStripBadStrip& payload) override { @@ -277,11 +339,11 @@ namespace { time history histogram of bad components fraction (TOB) *************************************************/ - class SiStripBadStripTOBFractionByRun : public cond::payloadInspector::HistoryPlot { + class SiStripBadStripTOBFractionByRun : public HistoryPlot { public: SiStripBadStripTOBFractionByRun() - : cond::payloadInspector::HistoryPlot("SiStrip Outer Barrel Bad Strip fraction per run", - "TOB Bad Strip fraction [%]") {} + : HistoryPlot("SiStrip Outer Barrel Bad Strip fraction per run", + "TOB Bad Strip fraction [%]") {} ~SiStripBadStripTOBFractionByRun() override = default; float getFromPayload(SiStripBadStrip& payload) override { @@ -323,11 +385,11 @@ namespace { time history histogram of bad components fraction (TID) *************************************************/ - class SiStripBadStripTIDFractionByRun : public cond::payloadInspector::HistoryPlot { + class SiStripBadStripTIDFractionByRun : public HistoryPlot { public: SiStripBadStripTIDFractionByRun() - : cond::payloadInspector::HistoryPlot("SiStrip Inner Disks Bad Strip fraction per run", - "TID Bad Strip fraction [%]") {} + : HistoryPlot("SiStrip Inner Disks Bad Strip fraction per run", + "TID Bad Strip fraction [%]") {} ~SiStripBadStripTIDFractionByRun() override = default; float getFromPayload(SiStripBadStrip& payload) override { @@ -369,11 +431,11 @@ namespace { time history histogram of bad components fraction (TEC) *************************************************/ - class SiStripBadStripTECFractionByRun : public cond::payloadInspector::HistoryPlot { + class SiStripBadStripTECFractionByRun : public HistoryPlot { public: SiStripBadStripTECFractionByRun() - : cond::payloadInspector::HistoryPlot("SiStrip Endcaps Bad Strip fraction per run", - "TEC Bad Strip fraction [%]") {} + : HistoryPlot("SiStrip Endcaps Bad Strip fraction per run", + "TEC Bad Strip fraction [%]") {} ~SiStripBadStripTECFractionByRun() override = default; float getFromPayload(SiStripBadStrip& payload) override { @@ -415,17 +477,16 @@ namespace { Plot BadStrip by region *************************************************/ - class SiStripBadStripByRegion : public cond::payloadInspector::PlotImage { + class SiStripBadStripByRegion : public PlotImage { public: SiStripBadStripByRegion() - : cond::payloadInspector::PlotImage("SiStrip BadStrip By Region"), + : PlotImage("SiStrip BadStrip By Region"), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( - edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} { - setSingleIov(true); - } + edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} - bool fill(const std::vector >& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::vector detid; @@ -549,26 +610,35 @@ namespace { Plot BadStrip by region comparison *************************************************/ - class SiStripBadStripByRegionComparisonBase : public cond::payloadInspector::PlotImage { + template + class SiStripBadStripByRegionComparisonBase : public PlotImage { public: SiStripBadStripByRegionComparisonBase() - : cond::payloadInspector::PlotImage("SiStrip BadStrip By Region Comparison"), + : PlotImage("SiStrip BadStrip By Region Comparison"), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} - bool fill(const std::vector >& iovs) override { - std::vector > sorted_iovs = iovs; - - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); - - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); + bool fill() override { + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; + + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); + + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - std::shared_ptr last_payload = fetchPayload(std::get<1>(lastiov)); - std::shared_ptr first_payload = fetchPayload(std::get<1>(firstiov)); + std::shared_ptr last_payload = this->fetchPayload(std::get<1>(lastiov)); + std::shared_ptr first_payload = this->fetchPayload(std::get<1>(firstiov)); std::string lastIOVsince = std::to_string(std::get<0>(lastiov)); std::string firstIOVsince = std::to_string(std::get<0>(firstiov)); @@ -747,7 +817,7 @@ namespace { legend.SetTextSize(0.025); legend.Draw("same"); - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); canvas.SaveAs(fileName.c_str()); return true; @@ -757,37 +827,40 @@ namespace { TrackerTopology m_trackerTopo; }; - class SiStripBadStripByRegionComparisonSingleTag : public SiStripBadStripByRegionComparisonBase { - public: - SiStripBadStripByRegionComparisonSingleTag() : SiStripBadStripByRegionComparisonBase() { setSingleIov(false); } - }; - - class SiStripBadStripByRegionComparisonTwoTags : public SiStripBadStripByRegionComparisonBase { - public: - SiStripBadStripByRegionComparisonTwoTags() : SiStripBadStripByRegionComparisonBase() { setTwoTags(true); } - }; + using SiStripBadStripByRegionComparisonSingleTag = SiStripBadStripByRegionComparisonBase<1, MULTI_IOV>; + using SiStripBadStripByRegionComparisonTwoTags = SiStripBadStripByRegionComparisonBase<2, SINGLE_IOV>; /************************************************ TrackerMap of SiStripBadStrip (bad strips fraction difference) *************************************************/ - class SiStripBadStripFractionComparisonTrackerMapBase : public cond::payloadInspector::PlotImage { + + template + class SiStripBadStripFractionComparisonTrackerMapBase : public PlotImage { public: SiStripBadStripFractionComparisonTrackerMapBase() - : cond::payloadInspector::PlotImage("Tracker Map of SiStrip bad strip fraction difference") {} + : PlotImage("Tracker Map of SiStrip bad strip fraction difference") {} - bool fill(const std::vector >& iovs) override { - std::vector > sorted_iovs = iovs; - - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); - - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); + bool fill() override { + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; + + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); + + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - std::shared_ptr last_payload = fetchPayload(std::get<1>(lastiov)); - std::shared_ptr first_payload = fetchPayload(std::get<1>(firstiov)); + std::shared_ptr last_payload = this->fetchPayload(std::get<1>(lastiov)); + std::shared_ptr first_payload = this->fetchPayload(std::get<1>(firstiov)); std::string lastIOVsince = std::to_string(std::get<0>(lastiov)); std::string firstIOVsince = std::to_string(std::get<0>(firstiov)); @@ -856,15 +929,15 @@ namespace { } } - /* - std::cout<<"In 2 but not in 1:"<< countLastButNotFirst << std::endl; - std::cout<<"In 1 but not in 2:"<< countFirstButNotLast << std::endl; - std::cout<<"In both:"<< countBoth << std::endl; - */ +#ifdef MMDEBUG + std::cout << "In 2 but not in 1:" << countLastButNotFirst << std::endl; + std::cout << "In 1 but not in 2:" << countFirstButNotLast << std::endl; + std::cout << "In both:" << countBoth << std::endl; +#endif //========================= - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); tmap->save(true, 0, 0, fileName); delete reader; @@ -872,35 +945,25 @@ namespace { } }; - class SiStripBadStripFractionComparisonTrackerMapSingleTag : public SiStripBadStripFractionComparisonTrackerMapBase { - public: - SiStripBadStripFractionComparisonTrackerMapSingleTag() : SiStripBadStripFractionComparisonTrackerMapBase() { - setSingleIov(false); - } - }; - - class SiStripBadStripFractionComparisonTrackerMapTwoTags : public SiStripBadStripFractionComparisonTrackerMapBase { - public: - SiStripBadStripFractionComparisonTrackerMapTwoTags() : SiStripBadStripFractionComparisonTrackerMapBase() { - setTwoTags(true); - } - }; + using SiStripBadStripFractionComparisonTrackerMapSingleTag = + SiStripBadStripFractionComparisonTrackerMapBase<1, MULTI_IOV>; + using SiStripBadStripFractionComparisonTrackerMapTwoTags = + SiStripBadStripFractionComparisonTrackerMapBase<2, SINGLE_IOV>; /************************************************ Plot BadStrip Quality analysis *************************************************/ - class SiStripBadStripQualityAnalysis : public cond::payloadInspector::PlotImage { + class SiStripBadStripQualityAnalysis : public PlotImage { public: SiStripBadStripQualityAnalysis() - : cond::payloadInspector::PlotImage("SiStrip BadStrip Quality Analysis"), + : PlotImage("SiStrip BadStrip Quality Analysis"), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( - edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} { - setSingleIov(true); - } + edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} - bool fill(const std::vector >& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); SiStripQuality* siStripQuality_ = new SiStripQuality(); @@ -1070,29 +1133,38 @@ namespace { Plot BadStrip Quality Comparison *************************************************/ - class SiStripBadStripQualityComparisonBase : public cond::payloadInspector::PlotImage { + template + class SiStripBadStripQualityComparisonBase : public PlotImage { public: SiStripBadStripQualityComparisonBase() - : cond::payloadInspector::PlotImage("SiStrip BadStrip Quality Comparison Analysis"), + : PlotImage("SiStrip BadStrip Quality Comparison Analysis"), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} - bool fill(const std::vector >& iovs) override { + bool fill() override { //SiStripPI::setPaletteStyle(SiStripPI::BLUERED); gStyle->SetPalette(kTemperatureMap); - std::vector > sorted_iovs = iovs; + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - std::shared_ptr last_payload = fetchPayload(std::get<1>(lastiov)); - std::shared_ptr first_payload = fetchPayload(std::get<1>(firstiov)); + std::shared_ptr last_payload = this->fetchPayload(std::get<1>(lastiov)); + std::shared_ptr first_payload = this->fetchPayload(std::get<1>(firstiov)); std::string lastIOVsince = std::to_string(std::get<0>(lastiov)); std::string firstIOVsince = std::to_string(std::get<0>(firstiov)); @@ -1266,7 +1338,7 @@ namespace { 0.96, ("#DeltaIOV: " + std::to_string(std::get<0>(lastiov)) + " - " + std::to_string(std::get<0>(firstiov))) .c_str()); - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); canv.SaveAs(fileName.c_str()); delete f_siStripQuality_; @@ -1279,15 +1351,8 @@ namespace { TrackerTopology m_trackerTopo; }; - class SiStripBadStripQualityComparisonSingleTag : public SiStripBadStripQualityComparisonBase { - public: - SiStripBadStripQualityComparisonSingleTag() : SiStripBadStripQualityComparisonBase() { setSingleIov(false); } - }; - - class SiStripBadStripQualityComparisonTwoTags : public SiStripBadStripQualityComparisonBase { - public: - SiStripBadStripQualityComparisonTwoTags() : SiStripBadStripQualityComparisonBase() { setTwoTags(true); } - }; + using SiStripBadStripQualityComparisonSingleTag = SiStripBadStripQualityComparisonBase<1, MULTI_IOV>; + using SiStripBadStripQualityComparisonTwoTags = SiStripBadStripQualityComparisonBase<2, SINGLE_IOV>; } // namespace @@ -1296,6 +1361,7 @@ PAYLOAD_INSPECTOR_MODULE(SiStripBadStrip) { PAYLOAD_INSPECTOR_CLASS(SiStripBadStripTest); PAYLOAD_INSPECTOR_CLASS(SiStripBadModuleTrackerMap); PAYLOAD_INSPECTOR_CLASS(SiStripBadStripFractionTrackerMap); + PAYLOAD_INSPECTOR_CLASS(SiStripBadStripFractionTkMap); PAYLOAD_INSPECTOR_CLASS(SiStripBadStripFractionByRun); PAYLOAD_INSPECTOR_CLASS(SiStripBadStripTIBFractionByRun); PAYLOAD_INSPECTOR_CLASS(SiStripBadStripTOBFractionByRun); diff --git a/CondCore/SiStripPlugins/plugins/SiStripConfObject_PayloadInspector.cc b/CondCore/SiStripPlugins/plugins/SiStripConfObject_PayloadInspector.cc index 2457710634c13..a637f6f1022aa 100644 --- a/CondCore/SiStripPlugins/plugins/SiStripConfObject_PayloadInspector.cc +++ b/CondCore/SiStripPlugins/plugins/SiStripConfObject_PayloadInspector.cc @@ -36,14 +36,14 @@ namespace { + using namespace cond::payloadInspector; + // test class - class SiStripConfObjectTest : public cond::payloadInspector::Histogram1D { + class SiStripConfObjectTest : public Histogram1D { public: SiStripConfObjectTest() - : cond::payloadInspector::Histogram1D( - "SiStrip Configuration Object test", "SiStrip Configuration Object test", 1, 0.0, 1.0) { - Base::setSingleIov(true); - } + : Histogram1D( + "SiStrip Configuration Object test", "SiStrip Configuration Object test", 1, 0.0, 1.0) {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -69,14 +69,13 @@ namespace { }; // display class - class SiStripConfObjectDisplay : public cond::payloadInspector::PlotImage { + class SiStripConfObjectDisplay : public PlotImage { public: - SiStripConfObjectDisplay() : cond::payloadInspector::PlotImage("Display Configuration Values") { - setSingleIov(true); - } + SiStripConfObjectDisplay() : PlotImage("Display Configuration Values") {} - bool fill(const std::vector >& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); unsigned int run = std::get<0>(iov); diff --git a/CondCore/SiStripPlugins/plugins/SiStripDetVOff_PayloadInspector.cc b/CondCore/SiStripPlugins/plugins/SiStripDetVOff_PayloadInspector.cc index 45df74aba9bce..a7a60ae57a92d 100644 --- a/CondCore/SiStripPlugins/plugins/SiStripDetVOff_PayloadInspector.cc +++ b/CondCore/SiStripPlugins/plugins/SiStripDetVOff_PayloadInspector.cc @@ -25,18 +25,18 @@ namespace { - class SiStripDetVOff_LV : public cond::payloadInspector::TimeHistoryPlot { + using namespace cond::payloadInspector; + + class SiStripDetVOff_LV : public TimeHistoryPlot { public: - SiStripDetVOff_LV() - : cond::payloadInspector::TimeHistoryPlot("Nr of mod with LV OFF vs time", "nLVOff") {} + SiStripDetVOff_LV() : TimeHistoryPlot("Nr of mod with LV OFF vs time", "nLVOff") {} int getFromPayload(SiStripDetVOff& payload) override { return payload.getLVoffCounts(); } }; - class SiStripDetVOff_HV : public cond::payloadInspector::TimeHistoryPlot { + class SiStripDetVOff_HV : public TimeHistoryPlot { public: - SiStripDetVOff_HV() - : cond::payloadInspector::TimeHistoryPlot("Nr of mod with HV OFF vs time", "nHVOff") {} + SiStripDetVOff_HV() : TimeHistoryPlot("Nr of mod with HV OFF vs time", "nHVOff") {} int getFromPayload(SiStripDetVOff& payload) override { return payload.getHVoffCounts(); } }; @@ -44,15 +44,13 @@ namespace { /************************************************ TrackerMap of Module VOff *************************************************/ - class SiStripDetVOff_IsModuleVOff_TrackerMap : public cond::payloadInspector::PlotImage { + class SiStripDetVOff_IsModuleVOff_TrackerMap : public PlotImage { public: - SiStripDetVOff_IsModuleVOff_TrackerMap() - : cond::payloadInspector::PlotImage("Tracker Map IsModuleVOff") { - setSingleIov(true); - } + SiStripDetVOff_IsModuleVOff_TrackerMap() : PlotImage("Tracker Map IsModuleVOff") {} - bool fill(const std::vector >& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::unique_ptr tmap = std::make_unique("SiStripIsModuleVOff"); @@ -79,15 +77,13 @@ namespace { /************************************************ TrackerMap of Module HVOff *************************************************/ - class SiStripDetVOff_IsModuleHVOff_TrackerMap : public cond::payloadInspector::PlotImage { + class SiStripDetVOff_IsModuleHVOff_TrackerMap : public PlotImage { public: - SiStripDetVOff_IsModuleHVOff_TrackerMap() - : cond::payloadInspector::PlotImage("Tracker Map IsModuleHVOff") { - setSingleIov(true); - } + SiStripDetVOff_IsModuleHVOff_TrackerMap() : PlotImage("Tracker Map IsModuleHVOff") {} - bool fill(const std::vector >& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::unique_ptr tmap = std::make_unique("SiStripIsModuleHVOff"); @@ -114,15 +110,13 @@ namespace { /************************************************ TrackerMap of Module LVOff *************************************************/ - class SiStripDetVOff_IsModuleLVOff_TrackerMap : public cond::payloadInspector::PlotImage { + class SiStripDetVOff_IsModuleLVOff_TrackerMap : public PlotImage { public: - SiStripDetVOff_IsModuleLVOff_TrackerMap() - : cond::payloadInspector::PlotImage("Tracker Map IsModuleLVOff") { - setSingleIov(true); - } + SiStripDetVOff_IsModuleLVOff_TrackerMap() : PlotImage("Tracker Map IsModuleLVOff") {} - bool fill(const std::vector >& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::unique_ptr tmap = std::make_unique("SiStripIsModuleLVOff"); @@ -150,15 +144,77 @@ namespace { test class *************************************************/ - class SiStripDetVOffTest : public cond::payloadInspector::Histogram1D { + namespace SiStripDetVOffPI { + enum type { t_LV = 0, t_HV = 1, t_V }; + } + + template + class SiStripDetVOffListOfModules : public Histogram1DD { + public: + SiStripDetVOffListOfModules() + : Histogram1DD( + "SiStrip Off modules", "SiStrip Off modules", 15148, 0., 15148., "DetId of VOff module") {} + + bool fill() override { + auto tag = PlotBase::getTag<0>(); + for (auto const& iov : tag.iovs) { + std::shared_ptr payload = Base::fetchPayload(std::get<1>(iov)); + if (payload.get()) { + std::vector detid; + payload->getDetIds(detid); + int i = 0; // count modules + + //std::cout.precision(1); + + for (const auto& d : detid) { + switch (my_type) { + case SiStripDetVOffPI::t_LV: { + if (payload->IsModuleLVOff(d)) { + //std::cout << "is LV: " << i << " " << std::fixed << double(d) << std::endl; + fillWithBinAndValue(i, double(d)); + } + break; + } + case SiStripDetVOffPI::t_HV: { + if (payload->IsModuleHVOff(d)) { + //std::cout << "is HV: " << i << " " << std::fixed << double(d) << std::endl; + fillWithBinAndValue(i, double(d)); + } + break; + } + case SiStripDetVOffPI::t_V: { + if (payload->IsModuleVOff(d)) { + //std::cout << "is V: " << i << " " << std::fixed << double(d) << std::endl; + fillWithBinAndValue(i, double(d)); + } + break; + } + default: + edm::LogError("SiStripDetVOffListOfModules") << "Unrecognized type: " << my_type << std::endl; + break; + } // switch + i++; // increase counting of modules + } // loop on detids + } // if gets the payload + } // loop on iovs + return true; + } // fill() + }; + + using SiStripVOffListOfModules = SiStripDetVOffListOfModules; + using SiStripLVOffListOfModules = SiStripDetVOffListOfModules; + using SiStripHVOffListOfModules = SiStripDetVOffListOfModules; + + /************************************************ + test class + *************************************************/ + + class SiStripDetVOffTest : public Histogram1D { public: SiStripDetVOffTest() - : cond::payloadInspector::Histogram1D( - "SiStrip DetVOff test", "SiStrip DetVOff test", 10, 0.0, 10.0), + : Histogram1D("SiStrip DetVOff test", "SiStrip DetVOff test", 10, 0.0, 10.0), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( - edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} { - Base::setSingleIov(true); - } + edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -204,17 +260,16 @@ namespace { Plot DetVOff by region *************************************************/ - class SiStripDetVOffByRegion : public cond::payloadInspector::PlotImage { + class SiStripDetVOffByRegion : public PlotImage { public: SiStripDetVOffByRegion() - : cond::payloadInspector::PlotImage("SiStrip DetVOff By Region"), + : PlotImage("SiStrip DetVOff By Region"), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( - edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} { - setSingleIov(true); - } + edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} - bool fill(const std::vector >& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::vector detid; @@ -389,5 +444,8 @@ PAYLOAD_INSPECTOR_MODULE(SiStripDetVOff) { PAYLOAD_INSPECTOR_CLASS(SiStripDetVOff_IsModuleLVOff_TrackerMap); PAYLOAD_INSPECTOR_CLASS(SiStripDetVOff_IsModuleHVOff_TrackerMap); PAYLOAD_INSPECTOR_CLASS(SiStripDetVOffTest); + PAYLOAD_INSPECTOR_CLASS(SiStripVOffListOfModules); + PAYLOAD_INSPECTOR_CLASS(SiStripLVOffListOfModules); + PAYLOAD_INSPECTOR_CLASS(SiStripHVOffListOfModules); PAYLOAD_INSPECTOR_CLASS(SiStripDetVOffByRegion); } diff --git a/CondCore/SiStripPlugins/plugins/SiStripFedCabling_PayloadInspector.cc b/CondCore/SiStripPlugins/plugins/SiStripFedCabling_PayloadInspector.cc index 995cc8e2a2f31..bc64031b8ef9b 100644 --- a/CondCore/SiStripPlugins/plugins/SiStripFedCabling_PayloadInspector.cc +++ b/CondCore/SiStripPlugins/plugins/SiStripFedCabling_PayloadInspector.cc @@ -27,18 +27,18 @@ namespace { + using namespace cond::payloadInspector; + /************************************************ TrackerMap of SiStrip FED Cabling *************************************************/ - class SiStripFedCabling_TrackerMap : public cond::payloadInspector::PlotImage { + class SiStripFedCabling_TrackerMap : public PlotImage { public: - SiStripFedCabling_TrackerMap() - : cond::payloadInspector::PlotImage("Tracker Map SiStrip Fed Cabling") { - setSingleIov(true); - } + SiStripFedCabling_TrackerMap() : PlotImage("Tracker Map SiStrip Fed Cabling") {} - bool fill(const std::vector >& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::unique_ptr tmap = std::make_unique("SiStripFedCabling"); @@ -75,14 +75,13 @@ namespace { /************************************************ Summary Plot of SiStrip FED Cabling *************************************************/ - class SiStripFedCabling_Summary : public cond::payloadInspector::PlotImage { + class SiStripFedCabling_Summary : public PlotImage { public: - SiStripFedCabling_Summary() : cond::payloadInspector::PlotImage("SiStrip Fed Cabling Summary") { - setSingleIov(true); - } + SiStripFedCabling_Summary() : PlotImage("SiStrip Fed Cabling Summary") {} - bool fill(const std::vector >& iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); int IOV = std::get<0>(iov); std::vector activeDetIds; diff --git a/CondCore/SiStripPlugins/plugins/SiStripLatency_PayloadInspector.cc b/CondCore/SiStripPlugins/plugins/SiStripLatency_PayloadInspector.cc index 9364008a917ee..80827e9e67137 100644 --- a/CondCore/SiStripPlugins/plugins/SiStripLatency_PayloadInspector.cc +++ b/CondCore/SiStripPlugins/plugins/SiStripLatency_PayloadInspector.cc @@ -40,17 +40,16 @@ namespace { + using namespace cond::payloadInspector; + /************************************************ *************** test class ****************** *************************************************/ - class SiStripLatencyTest : public cond::payloadInspector::Histogram1D { + class SiStripLatencyTest : public Histogram1D { public: SiStripLatencyTest() - : cond::payloadInspector::Histogram1D( - "SiStripLatency values", "SiStripLatency values", 5, 0.0, 5.0) { - Base::setSingleIov(true); - } + : Histogram1D("SiStripLatency values", "SiStripLatency values", 5, 0.0, 5.0) {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -68,13 +67,9 @@ namespace { /*********************************************** // 1d histogram of mode of 1 IOV ************************************************/ - class SiStripLatencyMode : public cond::payloadInspector::Histogram1D { + class SiStripLatencyMode : public Histogram1D { public: - SiStripLatencyMode() - : cond::payloadInspector::Histogram1D( - "SiStripLatency mode", "SiStripLatency mode", 70, -10, 60) { - Base::setSingleIov(true); - } + SiStripLatencyMode() : Histogram1D("SiStripLatency mode", "SiStripLatency mode", 70, -10, 60) {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -100,10 +95,9 @@ namespace { *******************1D histo of mode as a function of the run**************** *****************************************************************************/ - class SiStripLatencyModeHistory : public cond::payloadInspector::HistoryPlot { + class SiStripLatencyModeHistory : public HistoryPlot { public: - SiStripLatencyModeHistory() - : cond::payloadInspector::HistoryPlot("Mode vs run number", "Mode vs run number") {} + SiStripLatencyModeHistory() : HistoryPlot("Mode vs run number", "Mode vs run number") {} uint16_t getFromPayload(SiStripLatency& payload) override { uint16_t singlemode = payload.singleMode(); @@ -114,11 +108,10 @@ namespace { /**************************************************************************** *****************number of modes per run ************************************* **************************************************************************/ - class SiStripLatencyNumbOfModeHistory : public cond::payloadInspector::HistoryPlot { + class SiStripLatencyNumbOfModeHistory : public HistoryPlot { public: SiStripLatencyNumbOfModeHistory() - : cond::payloadInspector::HistoryPlot("Number of modes vs run ", - "Number of modes vs run") {} + : HistoryPlot("Number of modes vs run ", "Number of modes vs run") {} int getFromPayload(SiStripLatency& payload) override { std::vector modes; diff --git a/CondCore/SiStripPlugins/plugins/SiStripLorentzAngle_PayloadInspector.cc b/CondCore/SiStripPlugins/plugins/SiStripLorentzAngle_PayloadInspector.cc index 2c66589867673..6c11481e65438 100644 --- a/CondCore/SiStripPlugins/plugins/SiStripLorentzAngle_PayloadInspector.cc +++ b/CondCore/SiStripPlugins/plugins/SiStripLorentzAngle_PayloadInspector.cc @@ -15,6 +15,8 @@ #include "CommonTools/TrackerMap/interface/TrackerMap.h" #include "CondCore/SiStripPlugins/interface/SiStripPayloadInspectorHelper.h" +#include "CondCore/SiStripPlugins/interface/SiStripTkMaps.h" + #include "CalibTracker/StandaloneTrackerTopology/interface/StandaloneTrackerTopology.h" #include @@ -33,18 +35,18 @@ namespace { + using namespace cond::payloadInspector; + /************************************************ 1d histogram of SiStripLorentzAngle of 1 IOV *************************************************/ // inherit from one of the predefined plot class: Histogram1D - class SiStripLorentzAngleValue : public cond::payloadInspector::Histogram1D { + class SiStripLorentzAngleValue : public Histogram1D { public: SiStripLorentzAngleValue() - : cond::payloadInspector::Histogram1D( - "SiStrip LorentzAngle values", "SiStrip LorentzAngle values", 100, 0.0, 0.05) { - Base::setSingleIov(true); - } + : Histogram1D( + "SiStrip LorentzAngle values", "SiStrip LorentzAngle values", 100, 0.0, 0.05) {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -65,15 +67,14 @@ namespace { /************************************************ TrackerMap of SiStrip Lorentz Angle *************************************************/ - class SiStripLorentzAngle_TrackerMap : public cond::payloadInspector::PlotImage { + class SiStripLorentzAngle_TrackerMap : public PlotImage { public: SiStripLorentzAngle_TrackerMap() - : cond::payloadInspector::PlotImage("Tracker Map SiStrip Lorentz Angle") { - setSingleIov(true); - } + : PlotImage("Tracker Map SiStrip Lorentz Angle") {} - bool fill(const std::vector > &iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); std::unique_ptr tmap = std::make_unique("SiStripLorentzAngle"); @@ -102,21 +103,61 @@ namespace { } }; + /************************************************ + SiStripTkMaps of SiStrip Lorentz Angle + *************************************************/ + class SiStripLorentzAngleTkMap : public PlotImage { + public: + SiStripLorentzAngleTkMap() : PlotImage("Tracker Map SiStrip Lorentz Angle") {} + + bool fill() override { + //SiStripPI::setPaletteStyle(SiStripPI::DEFAULT); + gStyle->SetPalette(1); + + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); + auto tagname = PlotBase::getTag<0>().name; + + std::shared_ptr payload = fetchPayload(std::get<1>(iov)); + + auto theIOVsince = std::to_string(std::get<0>(iov)); + std::string titleMap = "SiStrip Lorentz Angle Map, Run: " + theIOVsince + " (tag:#color[2]{" + tagname + "})"; + + SiStripTkMaps myMap("COLZA L"); + myMap.bookMap(titleMap, "SiStrip #mu_{H}=(tan#theta_{L}/B) [1/T]"); + + std::map LAMap_ = payload->getLorentzAngles(); + + for (const auto &element : LAMap_) { + myMap.fill(element.first, element.second); + } // loop over the LA MAP + + std::string fileName(m_imageFileName); + TCanvas canvas("LA map", "LA map"); + myMap.drawMap(canvas, ""); + canvas.SaveAs(fileName.c_str()); + +#ifdef MMDEBUG + canvas.SaveAs("test.root"); +#endif + return true; + } + }; + /************************************************ Plot Lorentz Angle averages by partition *************************************************/ - class SiStripLorentzAngleByRegion : public cond::payloadInspector::PlotImage { + class SiStripLorentzAngleByRegion : public PlotImage { public: SiStripLorentzAngleByRegion() - : cond::payloadInspector::PlotImage("SiStripLorentzAngle By Region"), + : PlotImage("SiStripLorentzAngle By Region"), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( - edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} { - setSingleIov(true); - } + edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} - bool fill(const std::vector > &iovs) override { - auto iov = iovs.front(); + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); std::shared_ptr payload = fetchPayload(std::get<1>(iov)); SiStripDetSummary summaryLA{&m_trackerTopo}; @@ -221,20 +262,18 @@ namespace { Plot SiStripLorentz Angle averages by partition comparison *************************************************/ - template - class SiStripLorentzAngleComparatorByRegionBase - : public cond::payloadInspector::PlotImage { + template + class SiStripLorentzAngleComparatorByRegionBase : public PlotImage { public: SiStripLorentzAngleComparatorByRegionBase() - : cond::payloadInspector::PlotImage( - "SiStripLorentzAngle By Region Comparison"), + : PlotImage("SiStripLorentzAngle By Region Comparison"), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} bool fill() override { // trick to deal with the multi-ioved tag and two tag case at the same time - auto theIOVs = cond::payloadInspector::PlotBase::getTag<0>().iovs; - auto tagname1 = cond::payloadInspector::PlotBase::getTag<0>().name; + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; std::string tagname2 = ""; auto firstiov = theIOVs.front(); std::tuple lastiov; @@ -243,8 +282,8 @@ namespace { assert(this->m_plotAnnotations.ntags < 3); if (this->m_plotAnnotations.ntags == 2) { - auto tag2iovs = cond::payloadInspector::PlotBase::getTag<1>().iovs; - tagname2 = cond::payloadInspector::PlotBase::getTag<1>().name; + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; lastiov = tag2iovs.front(); } else { lastiov = theIOVs.back(); @@ -396,15 +435,14 @@ namespace { } }; - using SiStripLorentzAngleByRegionCompareSingleTag = - SiStripLorentzAngleComparatorByRegionBase<1, cond::payloadInspector::MULTI_IOV>; - using SiStripLorentzAngleByRegionCompareTwoTags = - SiStripLorentzAngleComparatorByRegionBase<2, cond::payloadInspector::SINGLE_IOV>; + using SiStripLorentzAngleByRegionCompareSingleTag = SiStripLorentzAngleComparatorByRegionBase<1, MULTI_IOV>; + using SiStripLorentzAngleByRegionCompareTwoTags = SiStripLorentzAngleComparatorByRegionBase<2, SINGLE_IOV>; } // namespace PAYLOAD_INSPECTOR_MODULE(SiStripLorentzAngle) { PAYLOAD_INSPECTOR_CLASS(SiStripLorentzAngleValue); + PAYLOAD_INSPECTOR_CLASS(SiStripLorentzAngleTkMap); PAYLOAD_INSPECTOR_CLASS(SiStripLorentzAngle_TrackerMap); PAYLOAD_INSPECTOR_CLASS(SiStripLorentzAngleByRegion); PAYLOAD_INSPECTOR_CLASS(SiStripLorentzAngleByRegionCompareSingleTag); diff --git a/CondCore/SiStripPlugins/plugins/SiStripNoises_PayloadInspector.cc b/CondCore/SiStripPlugins/plugins/SiStripNoises_PayloadInspector.cc index 75b4978c7f667..0c7ae062c84f0 100644 --- a/CondCore/SiStripPlugins/plugins/SiStripNoises_PayloadInspector.cc +++ b/CondCore/SiStripPlugins/plugins/SiStripNoises_PayloadInspector.cc @@ -47,16 +47,16 @@ namespace { + using namespace cond::payloadInspector; + /************************************************ test class *************************************************/ - class SiStripNoisesTest - : public cond::payloadInspector::Histogram1D { + class SiStripNoisesTest : public Histogram1D { public: SiStripNoisesTest() - : cond::payloadInspector::Histogram1D( - "SiStrip Noise test", "SiStrip Noise test", 10, 0.0, 10.0), + : Histogram1D("SiStrip Noise test", "SiStrip Noise test", 10, 0.0, 10.0), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} @@ -100,13 +100,10 @@ namespace { SiStrip Noise Profile of 1 IOV for one selected DetId *************************************************/ - class SiStripNoisePerDetId - : public cond::payloadInspector::PlotImage { + class SiStripNoisePerDetId : public PlotImage { public: - SiStripNoisePerDetId() - : cond::payloadInspector::PlotImage( - "SiStrip Noise values Per DetId") { - cond::payloadInspector::PlotBase::addInputParam("DetIds"); + SiStripNoisePerDetId() : PlotImage("SiStrip Noise values Per DetId") { + PlotBase::addInputParam("DetIds"); } bool fill() override { @@ -117,7 +114,7 @@ namespace { std::vector the_detids = {}; - auto paramValues = cond::payloadInspector::PlotBase::inputParamValues(); + auto paramValues = PlotBase::inputParamValues(); auto ip = paramValues.find("DetIds"); if (ip != paramValues.end()) { auto input = boost::lexical_cast(ip->second); @@ -150,7 +147,7 @@ namespace { TCanvas canvas("ByDetId", "ByDetId", sides.second * 800, sides.first * 600); canvas.Divide(sides.second, sides.first); edm::FileInPath fp_ = edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"); - SiStripDetInfoFileReader* reader = new SiStripDetInfoFileReader(fp_.fullPath()); + auto reader = std::make_unique(fp_.fullPath()); for (const auto& the_detid : the_detids) { edm::LogPrint("SiStripNoisePerDetId") << "DetId:" << the_detid << std::endl; @@ -272,12 +269,10 @@ namespace { *************************************************/ // inherit from one of the predefined plot class: Histogram1D - class SiStripNoiseValue - : public cond::payloadInspector::Histogram1D { + class SiStripNoiseValue : public Histogram1D { public: SiStripNoiseValue() - : cond::payloadInspector::Histogram1D( - "SiStrip Noise values", "SiStrip Noise values", 100, 0.0, 10.0) {} + : Histogram1D("SiStrip Noise values", "SiStrip Noise values", 100, 0.0, 10.0) {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -306,13 +301,12 @@ namespace { *************************************************/ // inherit from one of the predefined plot class: Histogram1D - class SiStripNoiseValuePerDetId - : public cond::payloadInspector::Histogram1D { + class SiStripNoiseValuePerDetId : public Histogram1D { public: SiStripNoiseValuePerDetId() - : cond::payloadInspector::Histogram1D( + : Histogram1D( "SiStrip Noise values per DetId", "SiStrip Noise values per DetId", 100, 0.0, 10.0) { - cond::payloadInspector::PlotBase::addInputParam("DetId"); + PlotBase::addInputParam("DetId"); } bool fill() override { @@ -320,7 +314,7 @@ namespace { for (auto const& iov : tag.iovs) { std::shared_ptr payload = Base::fetchPayload(std::get<1>(iov)); unsigned int the_detid(0xFFFFFFFF); - auto paramValues = cond::payloadInspector::PlotBase::inputParamValues(); + auto paramValues = PlotBase::inputParamValues(); auto ip = paramValues.find("DetId"); if (ip != paramValues.end()) { the_detid = boost::lexical_cast(ip->second); @@ -345,12 +339,9 @@ namespace { // inherit from one of the predefined plot class: PlotImage template - class SiStripNoiseDistribution - : public cond::payloadInspector::PlotImage { + class SiStripNoiseDistribution : public PlotImage { public: - SiStripNoiseDistribution() - : cond::payloadInspector::PlotImage("SiStrip Noise values") { - } + SiStripNoiseDistribution() : PlotImage("SiStrip Noise values") {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -466,25 +457,33 @@ namespace { *************************************************/ // inherit from one of the predefined plot class: PlotImage - template - class SiStripNoiseDistributionComparisonBase : public cond::payloadInspector::PlotImage { + template + class SiStripNoiseDistributionComparisonBase : public PlotImage { public: SiStripNoiseDistributionComparisonBase() - : cond::payloadInspector::PlotImage("SiStrip Noise values comparison") {} - - bool fill(const std::vector>& iovs) override { - std::vector> sorted_iovs = iovs; - - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); + : PlotImage("SiStrip Noise values comparison") {} - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); + bool fill() override { + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; + + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); + + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - std::shared_ptr f_payload = fetchPayload(std::get<1>(firstiov)); - std::shared_ptr l_payload = fetchPayload(std::get<1>(lastiov)); + std::shared_ptr f_payload = this->fetchPayload(std::get<1>(firstiov)); + std::shared_ptr l_payload = this->fetchPayload(std::get<1>(lastiov)); auto f_mon = std::unique_ptr(new SiStripPI::Monitor1D( op_mode_, @@ -634,7 +633,7 @@ namespace { legend.SetTextSize(0.025); legend.Draw("same"); - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); canvas.SaveAs(fileName.c_str()); return true; @@ -647,20 +646,10 @@ namespace { }; template - class SiStripNoiseDistributionComparisonSingleTag : public SiStripNoiseDistributionComparisonBase { - public: - SiStripNoiseDistributionComparisonSingleTag() : SiStripNoiseDistributionComparisonBase() { - this->setSingleIov(false); - } - }; + using SiStripNoiseDistributionComparisonSingleTag = SiStripNoiseDistributionComparisonBase; template - class SiStripNoiseDistributionComparisonTwoTags : public SiStripNoiseDistributionComparisonBase { - public: - SiStripNoiseDistributionComparisonTwoTags() : SiStripNoiseDistributionComparisonBase() { - this->setTwoTags(true); - } - }; + using SiStripNoiseDistributionComparisonTwoTags = SiStripNoiseDistributionComparisonBase; typedef SiStripNoiseDistributionComparisonSingleTag SiStripNoiseValueComparisonPerStripSingleTag; @@ -678,24 +667,32 @@ namespace { // inherit from one of the predefined plot class: PlotImage - class SiStripNoiseValueComparisonBase : public cond::payloadInspector::PlotImage { + template + class SiStripNoiseValueComparisonBase : public PlotImage { public: - SiStripNoiseValueComparisonBase() - : cond::payloadInspector::PlotImage("SiStrip Noise values comparison") {} - - bool fill(const std::vector>& iovs) override { - std::vector> sorted_iovs = iovs; + SiStripNoiseValueComparisonBase() : PlotImage("SiStrip Noise values comparison") {} - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); - - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); + bool fill() override { + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; + + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); + + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - std::shared_ptr f_payload = fetchPayload(std::get<1>(firstiov)); - std::shared_ptr l_payload = fetchPayload(std::get<1>(lastiov)); + std::shared_ptr f_payload = this->fetchPayload(std::get<1>(firstiov)); + std::shared_ptr l_payload = this->fetchPayload(std::get<1>(lastiov)); auto h_first = std::make_unique("f_Noise", @@ -778,34 +775,25 @@ namespace { legend.SetTextSize(0.025); legend.Draw("same"); - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); canvas.SaveAs(fileName.c_str()); return true; } }; - class SiStripNoiseValueComparisonSingleTag : public SiStripNoiseValueComparisonBase { - public: - SiStripNoiseValueComparisonSingleTag() : SiStripNoiseValueComparisonBase() { setSingleIov(false); } - }; - - class SiStripNoiseValueComparisonTwoTags : public SiStripNoiseValueComparisonBase { - public: - SiStripNoiseValueComparisonTwoTags() : SiStripNoiseValueComparisonBase() { setTwoTags(true); } - }; + using SiStripNoiseValueComparisonSingleTag = SiStripNoiseValueComparisonBase<1, MULTI_IOV>; + using SiStripNoiseValueComparisonTwoTags = SiStripNoiseValueComparisonBase<2, SINGLE_IOV>; /************************************************ SiStrip Noise Tracker Map *************************************************/ template - class SiStripNoiseTrackerMap - : public cond::payloadInspector::PlotImage { + class SiStripNoiseTrackerMap : public PlotImage { public: SiStripNoiseTrackerMap() - : cond::payloadInspector::PlotImage( - "Tracker Map of SiStripNoise " + estimatorType(est) + " per module") {} + : PlotImage("Tracker Map of SiStripNoise " + estimatorType(est) + " per module") {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -904,13 +892,13 @@ namespace { SiStrip Noise Tracker Map (ratio with previous gain per detid) *************************************************/ - template - class SiStripNoiseRatioWithPreviousIOVTrackerMapBase : public cond::payloadInspector::PlotImage { + template + class SiStripNoiseRatioWithPreviousIOVTrackerMapBase : public PlotImage { public: SiStripNoiseRatioWithPreviousIOVTrackerMapBase() - : cond::payloadInspector::PlotImage("Tracker Map of ratio of SiStripNoises " + - estimatorType(est) + "with previous IOV") { - cond::payloadInspector::PlotBase::addInputParam("nsigma"); + : PlotImage("Tracker Map of ratio of SiStripNoises " + estimatorType(est) + + "with previous IOV") { + PlotBase::addInputParam("nsigma"); } std::map computeEstimator(std::shared_ptr payload) { @@ -969,25 +957,35 @@ namespace { return info_per_detid; } - bool fill(const std::vector>& iovs) override { + bool fill() override { unsigned int nsigma(1); - auto paramValues = cond::payloadInspector::PlotBase::inputParamValues(); + auto paramValues = PlotBase::inputParamValues(); auto ip = paramValues.find("nsigma"); if (ip != paramValues.end()) { nsigma = boost::lexical_cast(ip->second); } - std::vector> sorted_iovs = iovs; - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); - std::shared_ptr last_payload = fetchPayload(std::get<1>(lastiov)); - std::shared_ptr first_payload = fetchPayload(std::get<1>(firstiov)); + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } + + std::shared_ptr last_payload = this->fetchPayload(std::get<1>(lastiov)); + std::shared_ptr first_payload = this->fetchPayload(std::get<1>(firstiov)); std::string titleMap = "SiStripNoise " + estimatorType(est) + " ratio per module average (IOV: "; @@ -1016,7 +1014,7 @@ namespace { } auto range = SiStripPI::getTheRange(cachedRatio, nsigma); - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); if (est == SiStripPI::rms && (range.first < 0.)) { tmap->save(true, 0., range.second, fileName); } else { @@ -1028,21 +1026,12 @@ namespace { }; template - class SiStripNoiseRatioWithPreviousIOVTrackerMapSingleTag - : public SiStripNoiseRatioWithPreviousIOVTrackerMapBase { - public: - SiStripNoiseRatioWithPreviousIOVTrackerMapSingleTag() : SiStripNoiseRatioWithPreviousIOVTrackerMapBase() { - this->setSingleIov(false); - } - }; + using SiStripNoiseRatioWithPreviousIOVTrackerMapSingleTag = + SiStripNoiseRatioWithPreviousIOVTrackerMapBase; template - class SiStripNoiseRatioWithPreviousIOVTrackerMapTwoTags : public SiStripNoiseRatioWithPreviousIOVTrackerMapBase { - public: - SiStripNoiseRatioWithPreviousIOVTrackerMapTwoTags() : SiStripNoiseRatioWithPreviousIOVTrackerMapBase() { - this->setTwoTags(true); - } - }; + using SiStripNoiseRatioWithPreviousIOVTrackerMapTwoTags = + SiStripNoiseRatioWithPreviousIOVTrackerMapBase; typedef SiStripNoiseRatioWithPreviousIOVTrackerMapSingleTag SiStripNoiseMin_RatioWithPreviousIOVTrackerMapSingleTag; @@ -1067,12 +1056,10 @@ namespace { *************************************************/ template - class SiStripNoiseByRegion - : public cond::payloadInspector::PlotImage { + class SiStripNoiseByRegion : public PlotImage { public: SiStripNoiseByRegion() - : cond::payloadInspector::PlotImage( - "SiStrip Noise " + estimatorType(est) + " by Region"), + : PlotImage("SiStrip Noise " + estimatorType(est) + " by Region"), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} @@ -1194,28 +1181,35 @@ namespace { SiStrip Noise Comparator *************************************************/ - template - class SiStripNoiseComparatorByRegionBase : public cond::payloadInspector::PlotImage { + template + class SiStripNoiseComparatorByRegionBase : public PlotImage { public: SiStripNoiseComparatorByRegionBase() - : cond::payloadInspector::PlotImage("SiStrip Noise " + estimatorType(est) + - " comparator by Region"), + : PlotImage("SiStrip Noise " + estimatorType(est) + " comparator by Region"), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} - bool fill(const std::vector>& iovs) override { - std::vector> sorted_iovs = iovs; - - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); - - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); + bool fill() override { + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; + + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); + + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - std::shared_ptr f_payload = fetchPayload(std::get<1>(firstiov)); - std::shared_ptr l_payload = fetchPayload(std::get<1>(lastiov)); + std::shared_ptr f_payload = this->fetchPayload(std::get<1>(firstiov)); + std::shared_ptr l_payload = this->fetchPayload(std::get<1>(lastiov)); SiStripDetSummary f_summaryNoise{&m_trackerTopo}; SiStripDetSummary l_summaryNoise{&m_trackerTopo}; @@ -1363,7 +1357,7 @@ namespace { legend.SetTextSize(0.025); legend.Draw("same"); - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); canvas.SaveAs(fileName.c_str()); return true; @@ -1374,16 +1368,10 @@ namespace { }; template - class SiStripNoiseComparatorByRegionSingleTag : public SiStripNoiseComparatorByRegionBase { - public: - SiStripNoiseComparatorByRegionSingleTag() : SiStripNoiseComparatorByRegionBase() { this->setSingleIov(false); } - }; + using SiStripNoiseComparatorByRegionSingleTag = SiStripNoiseComparatorByRegionBase; template - class SiStripNoiseComparatorByRegionTwoTags : public SiStripNoiseComparatorByRegionBase { - public: - SiStripNoiseComparatorByRegionTwoTags() : SiStripNoiseComparatorByRegionBase() { this->setTwoTags(true); } - }; + using SiStripNoiseComparatorByRegionTwoTags = SiStripNoiseComparatorByRegionBase; typedef SiStripNoiseComparatorByRegionSingleTag SiStripNoiseComparatorMeanByRegionSingleTag; typedef SiStripNoiseComparatorByRegionSingleTag SiStripNoiseComparatorMinByRegionSingleTag; @@ -1398,12 +1386,10 @@ namespace { /************************************************ Noise linearity *************************************************/ - class SiStripNoiseLinearity - : public cond::payloadInspector::PlotImage { + class SiStripNoiseLinearity : public PlotImage { public: SiStripNoiseLinearity() - : cond::payloadInspector::PlotImage( - "Linearity of Strip Noise as a fuction of strip length") {} + : PlotImage("Linearity of Strip Noise as a fuction of strip length") {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -1524,10 +1510,10 @@ namespace { *************************************************/ template - class NoiseHistory : public cond::payloadInspector::HistoryPlot> { + class NoiseHistory : public HistoryPlot> { public: NoiseHistory() - : cond::payloadInspector::HistoryPlot>( + : HistoryPlot>( "Average " + SiStripPI::getStringFromSubdet(sub) + " noise vs run number", "average " + SiStripPI::getStringFromSubdet(sub) + " Noise") {} @@ -1569,10 +1555,10 @@ namespace { *************************************************/ template - class NoiseRunHistory : public cond::payloadInspector::RunHistoryPlot> { + class NoiseRunHistory : public RunHistoryPlot> { public: NoiseRunHistory() - : cond::payloadInspector::RunHistoryPlot>( + : RunHistoryPlot>( "Average " + SiStripPI::getStringFromSubdet(sub) + " noise vs run number", "average " + SiStripPI::getStringFromSubdet(sub) + " Noise") {} @@ -1614,10 +1600,10 @@ namespace { *************************************************/ template - class NoiseTimeHistory : public cond::payloadInspector::TimeHistoryPlot> { + class NoiseTimeHistory : public TimeHistoryPlot> { public: NoiseTimeHistory() - : cond::payloadInspector::TimeHistoryPlot>( + : TimeHistoryPlot>( "Average " + SiStripPI::getStringFromSubdet(sub) + " noise vs run number", "average " + SiStripPI::getStringFromSubdet(sub) + " Noise") {} @@ -1658,17 +1644,16 @@ namespace { template Noise run history per layer *************************************************/ template - class NoiseLayerRunHistory : public cond::payloadInspector::PlotImage { + class NoiseLayerRunHistory : public PlotImage { public: NoiseLayerRunHistory() - : cond::payloadInspector::PlotImage("SiStrip Noise values comparison"), + : PlotImage("SiStrip Noise values comparison"), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( - edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} { - setSingleIov(false); - } + edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} - bool fill(const std::vector>& iovs) override { - std::vector> sorted_iovs = iovs; + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto sorted_iovs = tag.iovs; // make absolute sure the IOVs are sortd by since std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { diff --git a/CondCore/SiStripPlugins/plugins/SiStripPedestals_PayloadInspector.cc b/CondCore/SiStripPlugins/plugins/SiStripPedestals_PayloadInspector.cc index ef5899cb742aa..11a0715977dc8 100644 --- a/CondCore/SiStripPlugins/plugins/SiStripPedestals_PayloadInspector.cc +++ b/CondCore/SiStripPlugins/plugins/SiStripPedestals_PayloadInspector.cc @@ -46,16 +46,16 @@ namespace { + using namespace cond::payloadInspector; + /************************************************ test class *************************************************/ - class SiStripPedestalsTest - : public cond::payloadInspector::Histogram1D { + class SiStripPedestalsTest : public Histogram1D { public: SiStripPedestalsTest() - : cond::payloadInspector::Histogram1D( - "SiStrip Pedestals test", "SiStrip Pedestals test", 10, 0.0, 10.0), + : Histogram1D("SiStrip Pedestals test", "SiStrip Pedestals test", 10, 0.0, 10.0), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} @@ -99,13 +99,10 @@ namespace { SiStrip Pedestals Profile of 1 IOV for one selected DetId *************************************************/ - class SiStripPedestalPerDetId - : public cond::payloadInspector::PlotImage { + class SiStripPedestalPerDetId : public PlotImage { public: - SiStripPedestalPerDetId() - : cond::payloadInspector::PlotImage( - "SiStrip Pedestal values per DetId") { - cond::payloadInspector::PlotBase::addInputParam("DetIds"); + SiStripPedestalPerDetId() : PlotImage("SiStrip Pedestal values per DetId") { + PlotBase::addInputParam("DetIds"); } bool fill() override { @@ -116,7 +113,7 @@ namespace { std::vector the_detids = {}; - auto paramValues = cond::payloadInspector::PlotBase::inputParamValues(); + auto paramValues = PlotBase::inputParamValues(); auto ip = paramValues.find("DetIds"); if (ip != paramValues.end()) { auto input = boost::lexical_cast(ip->second); @@ -148,7 +145,7 @@ namespace { TCanvas canvas("ByDetId", "ByDetId", sides.second * 800, sides.first * 600); canvas.Divide(sides.second, sides.first); edm::FileInPath fp_ = edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"); - SiStripDetInfoFileReader* reader = new SiStripDetInfoFileReader(fp_.fullPath()); + auto reader = std::make_unique(fp_.fullPath()); for (const auto& the_detid : the_detids) { edm::LogPrint("SiStripNoisePerDetId") << "DetId:" << the_detid << std::endl; @@ -270,11 +267,10 @@ namespace { *************************************************/ // inherit from one of the predefined plot class: Histogram1D - class SiStripPedestalsValue - : public cond::payloadInspector::Histogram1D { + class SiStripPedestalsValue : public Histogram1D { public: SiStripPedestalsValue() - : cond::payloadInspector::Histogram1D( + : Histogram1D( "SiStrip Pedestals values", "SiStrip Pedestals values", 300, 0.0, 300.0) {} bool fill() override { @@ -304,13 +300,12 @@ namespace { *************************************************/ // inherit from one of the predefined plot class: Histogram1D - class SiStripPedestalsValuePerDetId - : public cond::payloadInspector::Histogram1D { + class SiStripPedestalsValuePerDetId : public Histogram1D { public: SiStripPedestalsValuePerDetId() - : cond::payloadInspector::Histogram1D( + : Histogram1D( "SiStrip Pedestal values per DetId", "SiStrip Pedestal values per DetId", 100, 0.0, 10.0) { - cond::payloadInspector::PlotBase::addInputParam("DetId"); + PlotBase::addInputParam("DetId"); } bool fill() override { @@ -318,7 +313,7 @@ namespace { for (auto const& iov : tag.iovs) { std::shared_ptr payload = Base::fetchPayload(std::get<1>(iov)); unsigned int the_detid(0xFFFFFFFF); - auto paramValues = cond::payloadInspector::PlotBase::inputParamValues(); + auto paramValues = PlotBase::inputParamValues(); auto ip = paramValues.find("DetId"); if (ip != paramValues.end()) { the_detid = boost::lexical_cast(ip->second); @@ -343,12 +338,9 @@ namespace { // inherit from one of the predefined plot class: PlotImage template - class SiStripPedestalDistribution - : public cond::payloadInspector::PlotImage { + class SiStripPedestalDistribution : public PlotImage { public: - SiStripPedestalDistribution() - : cond::payloadInspector::PlotImage( - "SiStrip Pedestal values") {} + SiStripPedestalDistribution() : PlotImage("SiStrip Pedestal values") {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -463,25 +455,33 @@ namespace { // inherit from one of the predefined plot class: PlotImage - template - class SiStripPedestalDistributionComparisonBase : public cond::payloadInspector::PlotImage { + template + class SiStripPedestalDistributionComparisonBase : public PlotImage { public: SiStripPedestalDistributionComparisonBase() - : cond::payloadInspector::PlotImage("SiStrip Pedestal values comparison") {} - - bool fill(const std::vector>& iovs) override { - std::vector> sorted_iovs = iovs; - - // make absolute sure the IOVs are sortd by since - std::sort(begin(sorted_iovs), end(sorted_iovs), [](auto const& t1, auto const& t2) { - return std::get<0>(t1) < std::get<0>(t2); - }); + : PlotImage("SiStrip Pedestal values comparison") {} - auto firstiov = sorted_iovs.front(); - auto lastiov = sorted_iovs.back(); + bool fill() override { + // trick to deal with the multi-ioved tag and two tag case at the same time + auto theIOVs = PlotBase::getTag<0>().iovs; + auto tagname1 = PlotBase::getTag<0>().name; + std::string tagname2 = ""; + auto firstiov = theIOVs.front(); + std::tuple lastiov; + + // we don't support (yet) comparison with more than 2 tags + assert(this->m_plotAnnotations.ntags < 3); + + if (this->m_plotAnnotations.ntags == 2) { + auto tag2iovs = PlotBase::getTag<1>().iovs; + tagname2 = PlotBase::getTag<1>().name; + lastiov = tag2iovs.front(); + } else { + lastiov = theIOVs.back(); + } - std::shared_ptr f_payload = fetchPayload(std::get<1>(firstiov)); - std::shared_ptr l_payload = fetchPayload(std::get<1>(lastiov)); + std::shared_ptr f_payload = this->fetchPayload(std::get<1>(firstiov)); + std::shared_ptr l_payload = this->fetchPayload(std::get<1>(lastiov)); auto f_mon = std::unique_ptr(new SiStripPI::Monitor1D( op_mode_, @@ -630,7 +630,7 @@ namespace { legend.SetTextSize(0.025); legend.Draw("same"); - std::string fileName(m_imageFileName); + std::string fileName(this->m_imageFileName); canvas.SaveAs(fileName.c_str()); return true; @@ -643,20 +643,12 @@ namespace { }; template - class SiStripPedestalDistributionComparisonSingleTag : public SiStripPedestalDistributionComparisonBase { - public: - SiStripPedestalDistributionComparisonSingleTag() : SiStripPedestalDistributionComparisonBase() { - this->setSingleIov(false); - } - }; + using SiStripPedestalDistributionComparisonSingleTag = + SiStripPedestalDistributionComparisonBase; template - class SiStripPedestalDistributionComparisonTwoTags : public SiStripPedestalDistributionComparisonBase { - public: - SiStripPedestalDistributionComparisonTwoTags() : SiStripPedestalDistributionComparisonBase() { - this->setTwoTags(true); - } - }; + using SiStripPedestalDistributionComparisonTwoTags = + SiStripPedestalDistributionComparisonBase; typedef SiStripPedestalDistributionComparisonSingleTag SiStripPedestalValueComparisonPerStripSingleTag; @@ -676,12 +668,10 @@ namespace { *************************************************/ // inherit from one of the predefined plot class PlotImage - class SiStripZeroPedestalsFraction_TrackerMap - : public cond::payloadInspector::PlotImage { + class SiStripZeroPedestalsFraction_TrackerMap : public PlotImage { public: SiStripZeroPedestalsFraction_TrackerMap() - : cond::payloadInspector::PlotImage( - "Tracker Map of Zero SiStripPedestals fraction per module") {} + : PlotImage("Tracker Map of Zero SiStripPedestals fraction per module") {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -689,7 +679,7 @@ namespace { std::shared_ptr payload = fetchPayload(std::get<1>(iov)); edm::FileInPath fp_ = edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"); - SiStripDetInfoFileReader* reader = new SiStripDetInfoFileReader(fp_.fullPath()); + auto reader = std::make_unique(fp_.fullPath()); std::string titleMap = "Tracker Map of Zero SiStrip Pedestals fraction per module (payload : " + std::get<1>(iov) + ")"; @@ -735,12 +725,11 @@ namespace { *************************************************/ template - class SiStripPedestalsTrackerMap - : public cond::payloadInspector::PlotImage { + class SiStripPedestalsTrackerMap : public PlotImage { public: SiStripPedestalsTrackerMap() - : cond::payloadInspector::PlotImage( - "Tracker Map of SiStripPedestals " + estimatorType(est) + " per module") {} + : PlotImage("Tracker Map of SiStripPedestals " + estimatorType(est) + + " per module") {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -821,12 +810,10 @@ namespace { *************************************************/ template - class SiStripPedestalsByRegion - : public cond::payloadInspector::PlotImage { + class SiStripPedestalsByRegion : public PlotImage { public: SiStripPedestalsByRegion() - : cond::payloadInspector::PlotImage( - "SiStrip Pedestals " + estimatorType(est) + " by Region"), + : PlotImage("SiStrip Pedestals " + estimatorType(est) + " by Region"), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} diff --git a/CondCore/SiStripPlugins/plugins/SiStripThreshold_PayloadInspector.cc b/CondCore/SiStripPlugins/plugins/SiStripThreshold_PayloadInspector.cc index be534eee6f44e..a8f589f069f81 100644 --- a/CondCore/SiStripPlugins/plugins/SiStripThreshold_PayloadInspector.cc +++ b/CondCore/SiStripPlugins/plugins/SiStripThreshold_PayloadInspector.cc @@ -44,19 +44,18 @@ using namespace std; namespace { + using namespace cond::payloadInspector; + /************************************************ test class *************************************************/ - class SiStripThresholdTest : public cond::payloadInspector::Histogram1D { + class SiStripThresholdTest : public Histogram1D { public: SiStripThresholdTest() - : cond::payloadInspector::Histogram1D( - "SiStrip Threshold test", "SiStrip Threshold test", 10, 0.0, 10.0), + : Histogram1D("SiStrip Threshold test", "SiStrip Threshold test", 10, 0.0, 10.0), m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile( - edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} { - Base::setSingleIov(true); - } + edm::FileInPath("Geometry/TrackerCommonData/data/trackerParameters.xml").fullPath())} {} bool fill() override { auto tag = PlotBase::getTag<0>(); @@ -86,17 +85,14 @@ namespace { 1d histogram of SiStripThresholds of 1 IOV - High Threshold *************************************************************/ - class SiStripThresholdValueHigh : public cond::payloadInspector::Histogram1D { + class SiStripThresholdValueHigh : public Histogram1D { public: SiStripThresholdValueHigh() - : cond::payloadInspector::Histogram1D("SiStrip High threshold values (checked per APV)", - "SiStrip High threshold values (cheched per APV)", - 10, - 0.0, - 10) { - Base::setSingleIov(true); - } - + : Histogram1D("SiStrip High threshold values (checked per APV)", + "SiStrip High threshold values (cheched per APV)", + 10, + 0.0, + 10) {} bool fill() override { auto tag = PlotBase::getTag<0>(); edm::FileInPath fp_ = edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"); @@ -132,17 +128,14 @@ namespace { 1d histogram of SiStripThresholds of 1 IOV - Low Threshold *************************************************************/ - class SiStripThresholdValueLow : public cond::payloadInspector::Histogram1D { + class SiStripThresholdValueLow : public Histogram1D { public: SiStripThresholdValueLow() - : cond::payloadInspector::Histogram1D("SiStrip Low threshold values (checked per APV)", - "SiStrip Low threshold values (cheched per APV)", - 10, - 0.0, - 10) { - Base::setSingleIov(true); - } - + : Histogram1D("SiStrip Low threshold values (checked per APV)", + "SiStrip Low threshold values (cheched per APV)", + 10, + 0.0, + 10) {} bool fill() override { auto tag = PlotBase::getTag<0>(); edm::FileInPath fp_ = edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"); diff --git a/CondCore/SiStripPlugins/test/BuildFile.xml b/CondCore/SiStripPlugins/test/BuildFile.xml index 30a735359bc72..9c66b2210ad9d 100644 --- a/CondCore/SiStripPlugins/test/BuildFile.xml +++ b/CondCore/SiStripPlugins/test/BuildFile.xml @@ -2,5 +2,6 @@ + diff --git a/CondCore/SiStripPlugins/test/test.sh b/CondCore/SiStripPlugins/test/test.sh index 1bd7848842d7f..8b8e14d6e5533 100755 --- a/CondCore/SiStripPlugins/test/test.sh +++ b/CondCore/SiStripPlugins/test/test.sh @@ -95,3 +95,48 @@ getPayloadData.py \ --test; mv *.png $W_DIR/results/SiStripConfObjectDisplay.png + +###################### +# Test DetVOff +###################### +getPayloadData.py \ + --plugin pluginSiStripDetVOff_PayloadInspector \ + --plot plot_SiStripDetVOffTest \ + --tag SiStripDetVOff_v3_offline \ + --time_type Time \ + --iovs '{"start_iov": "685006631803433472", "end_iov": "6850066318803433472"}' \ + --db Prod \ + --test ; + +###################### +# Test dumping of switched off modules +###################### +getPayloadData.py \ + --plugin pluginSiStripDetVOff_PayloadInspector \ + --plot plot_SiStripLVOffListOfModules \ + --tag SiStripDetVOff_v3_offline \ + --time_type Time \ + --iovs '{"start_iov": "6850066318803433472", "end_iov": "6850066318803433472"}' \ + --db Prod \ + --test; + +###################### +# Test SiStripTkMaps +###################### +getPayloadData.py \ + --plugin pluginSiStripBadStrip_PayloadInspector \ + --plot plot_SiStripBadStripFractionTkMap \ + --tag SiStripBadComponents_startupMC_for2017_v1_mc \ + --time_type Run \ + --iovs '{"start_iov": "1", "end_iov": "1"}' \ + --db Prod \ + --test ; + +getPayloadData.py \ + --plugin pluginSiStripLorentzAngle_PayloadInspector \ + --plot plot_SiStripLorentzAngleTkMap \ + --tag SiStripLorentzAngleDeco_GR10_v1_prompt \ + --time_type Run \ + --iovs '{"start_iov": "1", "end_iov": "1"}' \ + --db Prod \ + --test; diff --git a/CondCore/SiStripPlugins/test/testSiStripPayloadInspector.cpp b/CondCore/SiStripPlugins/test/testSiStripPayloadInspector.cpp index 6815ec4f7ac6f..1b0a6e2823c59 100644 --- a/CondCore/SiStripPlugins/test/testSiStripPayloadInspector.cpp +++ b/CondCore/SiStripPlugins/test/testSiStripPayloadInspector.cpp @@ -7,6 +7,7 @@ #include "CondCore/SiStripPlugins/plugins/SiStripThreshold_PayloadInspector.cc" #include "CondCore/SiStripPlugins/plugins/SiStripLatency_PayloadInspector.cc" #include "CondCore/SiStripPlugins/plugins/SiStripFedCabling_PayloadInspector.cc" +#include "CondCore/SiStripPlugins/plugins/SiStripBadStrip_PayloadInspector.cc" #include "FWCore/PluginManager/interface/PluginManager.h" #include "FWCore/PluginManager/interface/standard.h" @@ -143,6 +144,17 @@ int main(int argc, char** argv) { histo14.process(connectionString, PI::mk_input(tag, start, start)); edm::LogPrint("testSiStripPayloadInspector") << histo14.data() << std::endl; + // test SiStripTkMaps + tag = "SiStripBadComponents_startupMC_for2017_v1_mc"; + start = boost::lexical_cast(1); + end = boost::lexical_cast(1); + + edm::LogPrint("testSiStripPayloadInspector") << "## Exercising SiStripTkMaps plots " << std::endl; + + SiStripBadStripFractionTkMap histoTkMap; + histoTkMap.process(connectionString, PI::mk_input(tag, start, start)); + edm::LogPrint("testSiStripPayloadInspector") << histoTkMap.data() << std::endl; + inputs.clear(); #if PY_MAJOR_VERSION >= 3 // TODO I don't know why this Py_INCREF is necessary... diff --git a/CondCore/Utilities/BuildFile.xml b/CondCore/Utilities/BuildFile.xml index b90d344ba45f7..be456fe512a22 100644 --- a/CondCore/Utilities/BuildFile.xml +++ b/CondCore/Utilities/BuildFile.xml @@ -14,7 +14,7 @@ - + diff --git a/CondCore/Utilities/interface/PayloadInspector.h b/CondCore/Utilities/interface/PayloadInspector.h index 991b33f867196..11d873675082d 100644 --- a/CondCore/Utilities/interface/PayloadInspector.h +++ b/CondCore/Utilities/interface/PayloadInspector.h @@ -12,6 +12,7 @@ #include #include "FWCore/Utilities/interface/GlobalIdentifier.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include @@ -74,6 +75,11 @@ namespace cond { if (value.first) { ss << "\"" << entryLabel << "\":" << value.second; } + } else if constexpr (std::is_same_v) { + if ((value - int(value)) == 0) { + ss.precision(0); + } + ss << "\"" << entryLabel << "\":" << std::fixed << value; } else { ss << "\"" << entryLabel << "\":" << value; } @@ -701,21 +707,31 @@ namespace cond { }; // - template - class Histogram1D : public Plot2D { + template + class Histogram1 : public Plot2D { public: - typedef Plot2D Base; + typedef Plot2D Base; // naive implementation, essentially provided as an example... - Histogram1D(const std::string& title, - const std::string& xLabel, - size_t nbins, - float min, - float max, - const std::string& yLabel = "entries") + Histogram1(const std::string& title, + const std::string& xLabel, + size_t nbins, + float min, + float max, + const std::string& yLabel = "entries") : Base("Histo1D", title, xLabel, yLabel), m_nbins(nbins), m_min(min), m_max(max) {} // void init() override { + if (m_nbins < 1) { + edm::LogError("payloadInspector::Histogram1D()") + << " trying to book an histogram with less then 1 bin!" << std::endl; + } + + if (m_min > m_max) { + edm::LogError("payloadInspector::Histogram1D()") + << " trying to book an histogram with minimum " << m_min << "> maximum" << m_max << " !" << std::endl; + } + Base::m_plotData.clear(); float binSize = (m_max - m_min) / m_nbins; if (binSize > 0) { @@ -728,7 +744,7 @@ namespace cond { } // to be used to fill the histogram! - void fillWithValue(float value, float weight = 1) { + void fillWithValue(AxisType value, AxisType weight = 1) { // ignoring underflow/overflows ( they can be easily added - the total entries as well ) if (!Base::m_plotData.empty() && (value < m_max) && (value >= m_min)) { size_t ibin = (value - m_min) / m_binSize; @@ -737,7 +753,7 @@ namespace cond { } // to be used to fill the histogram! - void fillWithBinAndValue(size_t bin, float weight = 1) { + void fillWithBinAndValue(size_t bin, AxisType weight = 1) { if (bin < Base::m_plotData.size()) { std::get<1>(Base::m_plotData[bin]) = weight; } @@ -749,7 +765,7 @@ namespace cond { for (auto iov : tag.iovs) { std::shared_ptr payload = Base::fetchPayload(std::get<1>(iov)); if (payload.get()) { - float value = getFromPayload(*payload); + AxisType value = getFromPayload(*payload); fillWithValue(value); } } @@ -757,7 +773,7 @@ namespace cond { } // implement this one if you use the default fill implementation, otherwise ignore it... - virtual float getFromPayload(PayloadType& payload) { return 0; } + virtual AxisType getFromPayload(PayloadType& payload) { return 0; } private: float m_binSize = 0; @@ -766,6 +782,16 @@ namespace cond { float m_max; }; + // clever way to reduce the number of templated arguments + // see https://stackoverflow.com/questions/3881633/reducing-number-of-template-arguments-for-class + // for reference + + template + using Histogram1D = Histogram1; + + template + using Histogram1DD = Histogram1; + // template class Histogram2D : public Plot3D { @@ -791,6 +817,22 @@ namespace cond { // void init() override { + // some protections + if ((m_nxbins < 1) || (m_nybins < 1)) { + edm::LogError("payloadInspector::Histogram2D()") + << " trying to book an histogram with less then 1 bin!" << std::endl; + } + + if (m_xmin > m_xmax) { + edm::LogError("payloadInspector::Histogram2D()") << " trying to book an histogram with x-minimum " << m_xmin + << "> x-maximum" << m_xmax << " !" << std::endl; + } + + if (m_ymin > m_ymax) { + edm::LogError("payloadInspector::Histogram2D()") << " trying to book an histogram with y-minimum " << m_ymin + << "> y-maximum" << m_ymax << " !" << std::endl; + } + Base::m_plotData.clear(); float xbinSize = (m_xmax - m_xmin) / m_nxbins; float ybinSize = (m_ymax - m_ymin) / m_nybins; diff --git a/CondCore/Utilities/python/conddblib.py b/CondCore/Utilities/python/conddblib.py index e4fc42b993e0c..04c04bbf7f354 100644 --- a/CondCore/Utilities/python/conddblib.py +++ b/CondCore/Utilities/python/conddblib.py @@ -150,6 +150,8 @@ class Synchronization(enum.Enum): pcl = 'pcl' offline = 'offline' +synch_list = list(x.value for x in list(Synchronization)) + class TimeType(enum.Enum): Run = 'Run' Time = 'Time' diff --git a/CondCore/Utilities/scripts/conddb b/CondCore/Utilities/scripts/conddb index 88cb91efdd806..50acef57e2999 100755 --- a/CondCore/Utilities/scripts/conddb +++ b/CondCore/Utilities/scripts/conddb @@ -21,6 +21,8 @@ import socket import calendar import sqlalchemy +from prettytable import PrettyTable + import CondCore.Utilities.conddblib as conddb import CondCore.Utilities.cond2xml as cond2xml import CondCore.Utilities.conddb_serialization_metadata as serialization_metadata @@ -34,6 +36,7 @@ from CondCore.Utilities.tier0 import Tier0Handler, Tier0Error, tier0Url # TODO: Support the old connection string syntax, e.g. sqlite_file://... maxSince = 18446744073709551615 +sizeOfTimestamp = 19 # Utility functions @@ -902,6 +905,273 @@ def listTags_(args): return 0 + +def listParentTags_(args): + connection = connect(args) + session = connection.session() + + IOV = session.get_dbtype(conddb.IOV) + Tag = session.get_dbtype(conddb.Tag) + + query_result = session.query(IOV.tag_name).filter(IOV.payload_hash == args.hash_name).all() + tag_names = map(lambda entry : entry[0], query_result) + + listOfOccur=[] + + for tag in tag_names: + synchro = session.query(Tag.synchronization).filter(Tag.name == tag).all() + iovs = session.query(IOV.since).filter(IOV.tag_name == tag).filter(IOV.payload_hash == args.hash_name).all() + times = session.query(IOV.insertion_time).filter(IOV.tag_name == tag).filter(IOV.payload_hash == args.hash_name).all() + + synchronization = [item[0] for item in synchro] + listOfIOVs = [item[0] for item in iovs] + listOfTimes = [str(item[0]) for item in times] + + for iEntry in range(0,len(listOfIOVs)): + listOfOccur.append({"tag": tag, + "synchronization" : synchronization[0], + "since" : listOfIOVs[iEntry] , + "insertion_time" : listOfTimes[iEntry] }) + + t = PrettyTable(['hash', 'since','tag','synch','insertion time']) + for element in listOfOccur: + t.add_row([args.hash_name,element['since'],element['tag'],element['synchronization'],element['insertion_time']]) + + print(t) + + + + +def diffGlobalTagsAtRun_(args): + connection = connect(args) + session = connection.session() + + IOV = session.get_dbtype(conddb.IOV) + TAG = session.get_dbtype(conddb.Tag) + GT = session.get_dbtype(conddb.GlobalTag) + GTMAP = session.get_dbtype(conddb.GlobalTagMap) + RUNINFO = session.get_dbtype(conddb.RunInfo) + + #################################### + # Get the time info for the test run + #################################### + + if(not args.lastIOV): + + if(args.testRunNumber<0): + raise Exception("Run %s (default) can't be matched with an existing run in the database. \n\t\t Please specify a run with the option --run." % args.testRunNumber) + + bestRun = session.query(RUNINFO.run_number, RUNINFO.start_time, RUNINFO.end_time).filter(RUNINFO.run_number == int(args.testRunNumber)).first() + if bestRun is None: + raise Exception("Run %s can't be matched with an existing run in the database." % args.testRunNumber) + + print("Run",args.testRunNumber," |Start time",bestRun[1]," |End time",bestRun[2],".") + + #################################### + # Get the Global Tag snapshots + #################################### + + refSnap = session.query(GT.snapshot_time).\ + filter(GT.name == args.refGT).all()[0][0] + + tarSnap = session.query(GT.snapshot_time).\ + filter(GT.name == args.tarGT).all()[0][0] + + print("reference GT (",args.refGT ,") snapshot: ",refSnap," | target GT (",args.tarGT,") snapshot",tarSnap) + + #################################### + # Get the Global Tag maps + #################################### + + GTMap_ref = session.query(GTMAP.record, GTMAP.label, GTMAP.tag_name).\ + filter(GTMAP.global_tag_name == args.refGT).\ + order_by(GTMAP.record, GTMAP.label).\ + all() + + GTMap_tar = session.query(GTMAP.record, GTMAP.label, GTMAP.tag_name).\ + filter(GTMAP.global_tag_name == args.tarGT).\ + order_by(GTMAP.record, GTMAP.label).\ + all() + + text_file = open(("diff_%s_vs_%s.twiki") % (args.refGT,args.tarGT), "w") + + differentTags = {} + + for element in GTMap_ref: + RefRecord = element[0] + RefLabel = element[1] + RefTag = element[2] + + for element2 in GTMap_tar: + if (RefRecord == element2[0] and RefLabel==element2[1]): + if RefTag != element2[2]: + differentTags[(RefRecord,RefLabel)]=(RefTag,element2[2]) + + #################################### + ## Search for Records,Label not-found in the other list + #################################### + + temp1 = [item for item in GTMap_ref if (item[0],item[1]) not in list(zip(list(zip(*GTMap_tar))[0],list(zip(*GTMap_tar))[1]))] + for elem in temp1: + differentTags[(elem[0],elem[1])]=(elem[2],"") + + temp2 = [item for item in GTMap_tar if (item[0],item[1]) not in list(zip(list(zip(*GTMap_ref))[0],list(zip(*GTMap_ref))[1]))] + for elem in temp2: + differentTags[(elem[0],elem[1])]=("",elem[2]) + + text_file.write("| *Record* | *"+args.refGT+"* | *"+args.tarGT+"* | Remarks | \n") + + t = PrettyTable() + + if(args.isVerbose): + t.field_names = ['/','',args.refGT,args.tarGT,refSnap,tarSnap] + else: + t.field_names = ['/','',args.refGT,args.tarGT] + + t.hrules=1 + + if(args.isVerbose): + t.add_row(['Record','label','Reference Tag','Target Tag','hash1:time1:since1','hash2:time2:since2']) + else: + t.add_row(['Record','label','Reference Tag','Target Tag']) + + isDifferent=False + + #################################### + # Loop on the difference + #################################### + + for Rcd in sorted(differentTags): + + # empty lists at the beginning + refTagIOVs=[] + tarTagIOVs=[] + + if( differentTags[Rcd][0]!=""): + refTagIOVs = session.query(IOV.since,IOV.payload_hash,IOV.insertion_time).filter(IOV.tag_name == differentTags[Rcd][0]).all() + refTagInfo = session.query(TAG.synchronization,TAG.time_type).filter(TAG.name == differentTags[Rcd][0]).all()[0] + if( differentTags[Rcd][1]!=""): + tarTagIOVs = session.query(IOV.since,IOV.payload_hash,IOV.insertion_time).filter(IOV.tag_name == differentTags[Rcd][1]).all() + tarTagInfo = session.query(TAG.synchronization,TAG.time_type).filter(TAG.name == differentTags[Rcd][1]).all()[0] + + if(differentTags[Rcd][0]!="" and differentTags[Rcd][1]!=""): + if(tarTagInfo[1] != refTagInfo[1]): + print(colors.bold_red+" *** Warning *** found mismatched time type for",Rcd,"entry. \n"+differentTags[Rcd][0],"has time type",refTagInfo[1],"while",differentTags[Rcd][1],"has time type",tarTagInfo[1]+". These need to be checked by hand. \n\n"+ colors.end) + + if(args.lastIOV): + + if(sorted(differentTags).index(Rcd)==0): + print("\n") + print(33 * "=") + print("|| COMPARING ONLY THE LAST IOV ||") + print(33 * "=") + print("\n") + + lastSinceRef=-1 + lastSinceTar=-1 + + hash_lastRefTagIOV = "" + time_lastRefTagIOV = "" + + hash_lastTarTagIOV = "" + time_lastTarTagIOV = "" + + for i in refTagIOVs: + if (i[0]>lastSinceRef): + lastSinceRef = i[0] + hash_lastRefTagIOV = i[1] + time_lastRefTagIOV = str(i[2]) + + for j in tarTagIOVs: + if (j[0]>lastSinceTar): + lastSinceTar = j[0] + hash_lastTarTagIOV = j[1] + time_lastTarTagIOV = str(j[2]) + + if(hash_lastRefTagIOV!=hash_lastTarTagIOV): + isDifferent=True + text_file.write("| ="+Rcd[0]+"= ("+Rcd[1]+") | =="+differentTags[Rcd][0]+"== | =="+differentTags[Rcd][1]+"== | | \n") + text_file.write("|^|"+hash_lastRefTagIOV+"
("+time_lastRefTagIOV+") "+ str(lastSinceRef) +" | "+hash_lastTarTagIOV+"
("+time_lastTarTagIOV+") " + str(lastSinceTar)+" | ^| \n") + + if(args.isVerbose): + t.add_row([Rcd[0],Rcd[1],differentTags[Rcd][0],differentTags[Rcd][1],str(hash_lastRefTagIOV)+"\n"+str(time_lastRefTagIOV)+"\n"+str(lastSinceRef),str(hash_lastTarTagIOV)+"\n"+str(time_lastTarTagIOV)+"\n"+str(lastSinceTar)]) + else: + t.add_row([Rcd[0],Rcd[1],differentTags[Rcd][0]+"\n"+str(hash_lastRefTagIOV),differentTags[Rcd][1]+"\n"+str(hash_lastTarTagIOV)]) + + else: + + ### reset all defaults + + theGoodRefIOV=-1 + theGoodTarIOV=-1 + sinceRefTagIOV=0 + sinceTarTagIOV=0 + + RefIOVtime = datetime.datetime(1970, 1, 1, 0, 0, 0) + TarIOVtime = datetime.datetime(1970, 1, 1, 0, 0, 0) + + theRefPayload="" + theTarPayload="" + theRefTime="" + theTarTime="" + + ### loop on the reference IOV list + for refIOV in refTagIOVs: + + ## logic for retrieving the the last payload active on a given IOV + ## - the new IOV since is less than the run under consideration + ## - the payload insertion time is lower than the GT snapshot + ## - finall either: + ## - the new IOV since is larger then the last saved + ## - the new IOV since is equal to the last saved but it has a more recent insertion time + + if ( (refIOV[0] <= int(args.testRunNumber)) and (refIOV[0]>sinceRefTagIOV) or ((refIOV[0]==sinceRefTagIOV) and (refIOV[2]>RefIOVtime)) and (refIOV[2]<=refSnap) ): + sinceRefTagIOV = refIOV[0] + RefIOVtime = refIOV[2] + theGoodRefIOV=sinceRefTagIOV + theRefPayload=refIOV[1] + theRefTime=str(refIOV[2]) + + ### loop on the target IOV list + for tarIOV in tarTagIOVs: + if ( (tarIOV[0] <= int(args.testRunNumber)) and (tarIOV[0]>sinceTarTagIOV) or ((tarIOV[0]==sinceTarTagIOV) and (tarIOV[2]>=TarIOVtime)) and (tarIOV[2]<=tarSnap) ): + sinceTarTagIOV = tarIOV[0] + tarIOVtime = tarIOV[2] + theGoodTarIOV=sinceTarTagIOV + theTarPayload=tarIOV[1] + theTarTime=str(tarIOV[2]) + + #print Rcd[0],theRefPayload,theTarPayload + + if(theRefPayload!=theTarPayload): + isDifferent=True + text_file.write("| ="+Rcd[0]+"= ("+Rcd[1]+") | =="+differentTags[Rcd][0]+"== | =="+differentTags[Rcd][1]+"== |\n") + text_file.write("|^|"+theRefPayload+" ("+theRefTime+") | "+theTarPayload+" ("+theTarTime+") |\n") + + ### determinte if it is to be shown + + isMatched=False + tokens=args.stringToMatch.split(",") + decisions = [bool(Rcd[0].find(x)!=-1) for x in tokens] + for decision in decisions: + isMatched = (isMatched or decision) + + if(args.isVerbose): + if (args.stringToMatch=="" or isMatched): + t.add_row([Rcd[0],Rcd[1],differentTags[Rcd][0],differentTags[Rcd][1],str(theRefPayload)+"\n"+str(theRefTime)+"\n"+str(theGoodRefIOV),str(theTarPayload)+"\n"+str(theTarTime)+"\n"+str(theGoodTarIOV)]) + else: + if (args.stringToMatch=="" or isMatched): + t.add_row([Rcd[0],Rcd[1],differentTags[Rcd][0]+"\n"+str(theRefPayload),differentTags[Rcd][1]+"\n"+str(theTarPayload)]) + + if(not isDifferent): + if(args.isVerbose): + t.add_row(["None","None","None","None","None","None"]) + else: + t.add_row(["None","None","None"]) + print(t) + + + def listGTsForTag_(args): connection = connect(args) session = connection.session() @@ -926,17 +1196,89 @@ def listGTs_(args): ['GT_name', 'Description', 'Release', 'Snapshot_time', 'Insertion_time'], ) + def listRuns_(args): connection = connect(args) session = connection.session() RunInfo = session.get_dbtype(conddb.RunInfo) - table = session.query(RunInfo.run_number,RunInfo.start_time,RunInfo.end_time).\ - order_by(RunInfo.run_number).\ - all() + fromRun = None + toRun = None + match = args.match + limit = None + if args.last: + match = session.query(sqlalchemy.func.max(RunInfo.run_number)).one()[0] + if match is None: + fromTime = getattr(args, 'from') + if fromTime is not None: + fromTime = unicode(fromTime,'utf-8') + fromRun = fromTime + start = None + if fromTime.isnumeric(): + if len(fromTime) >= sizeOfTimestamp: + start = datetime.datetime.utcfromtimestamp( int(fromTime) >> 32 ) + else: + start = datetime.datetime.strptime(fromTime,'%Y-%m-%d %H:%M:%S') + if start is not None: + fromRun = session.query(sqlalchemy.func.min(RunInfo.run_number)).filter(RunInfo.end_time > start).one()[0] + logging.debug('run lower boundary: %s (%s)'%(fromRun, start.strftime('%Y-%m-%d %H:%M:%S'))) + toTime = getattr(args, 'to') + if toTime is not None: + toTime = unicode(toTime,'utf-8') + toRun = toTime + end = None + if toTime.isnumeric(): + if len(toTime) >= sizeOfTimestamp: + end = datetime.datetime.utcfromtimestamp( int(toTime) >> 32 ) + else: + end=datetime.datetime.strptime(toTime,'%Y-%m-%d %H:%M:%S') + if end is not None: + toRun = session.query(sqlalchemy.func.max(RunInfo.run_number)).filter(RunInfo.start_time < end).one()[0] + logging.debug('run upper boundary: %s (%s)' %(toRun,end.strftime('%Y-%m-%d %H:%M:%S'))) + q = session.query(RunInfo.run_number,RunInfo.start_time,RunInfo.end_time) + sel = False + if match is not None: + q = q.filter(RunInfo.run_number == match) + else: + if fromRun is not None: + q = q.filter(RunInfo.run_number >= fromRun) + sel = True + if toRun is not None: + q = q.filter(RunInfo.run_number <= toRun) + sel = True + if not sel and args.limit is not None: + limit = args.limit + q = q.order_by(RunInfo.run_number.desc()) + q = q.limit(limit) + q = q.from_self() + table = q.order_by(RunInfo.run_number).all() + if len(table)==0: + sel = '' + msg = 'No Run found' + if args.match is not None: + sel = 'matching Run=%s' %args.match + else: + fromTime = getattr(args, 'from') + if fromTime is not None: + sel = "with from='%s'"%fromTime + if args.to is not None: + if len(sel): + sel = sel +' and ' + else: + sel = 'with ' + sel = sel + "to='%s'"%args.to + msg = msg + ' %s'%sel + print(msg) + return 1 + else: + if limit is not None: + logging.info('Run entries limited to %s'%limit) + else: + logging.info('Found %s Run entries.'%len(table)) for i in range(len(table)): table[i] = table[i] + ( (calendar.timegm( table[i][1].utctimetuple() ) << 32), (calendar.timegm( table[i][2].utctimetuple() ) << 32) ) output_table(args, table, ['Run_number','Start_time','End_time','Start_IOV','End_IOV'], ) + return 0 def showFcsr_(args): connection = connect(args) @@ -1722,7 +2064,7 @@ def edit(args): editMatch = editRe.match(line) if editMatch: description,synchronization,endOfValidity = editMatch.groups() - if synchronization not in tuple(conddb.Synchronization): + if synchronization not in conddb.synch_list: raise Exception('Invalid Synchronization value set: "%s"' %synchronization ) if int(endOfValidity)< -1: raise Exception('Invalid End Of Validity set: "%s"' %endOfValidity ) @@ -2154,6 +2496,19 @@ def main(): parser_listTags = parser_subparsers.add_parser('listTags', description='Lists all the Tags available in the DB.') parser_listTags.set_defaults(func=listTags_) + parser_listParentTags = parser_subparsers.add_parser('listParentTags', description='Lists all the Tags available in the DB, containing the matched payload hash.') + parser_listParentTags.add_argument('hash_name', help="Payload hash to match.") + parser_listParentTags.set_defaults(func=listParentTags_) + + parser_diffGlobalTagsAtRun = parser_subparsers.add_parser('diffGlobalTagsAtRun', description='Diffs two global tags, but showing only the differences relevant for a given run number.') + parser_diffGlobalTagsAtRun.add_argument('--last', '-L', dest='lastIOV', action='store_true', default=False, help='Diff the Global tags at the last open IOV.') + parser_diffGlobalTagsAtRun.add_argument('--reference', '-R', dest='refGT', help="Reference Global Tag") + parser_diffGlobalTagsAtRun.add_argument('--target', '-T', dest='tarGT', help="Target Global Tag") + parser_diffGlobalTagsAtRun.add_argument('--run', '-r', dest='testRunNumber', help="target run to compare",default=-1) + parser_diffGlobalTagsAtRun.add_argument('--verbose','-v',help='returns more info', dest='isVerbose',action='store_true',default=False) + parser_diffGlobalTagsAtRun.add_argument('--match','-m',help='print only matching',dest='stringToMatch',action='store',default='') + parser_diffGlobalTagsAtRun.set_defaults(func=diffGlobalTagsAtRun_) + parser_listGTsForTag = parser_subparsers.add_parser('listGTsForTag', description='Lists the GTs which contain a given tag.') parser_listGTsForTag.add_argument('name', help="Name of the tag.") parser_listGTsForTag.set_defaults(func=listGTsForTag_) @@ -2161,7 +2516,12 @@ def main(): parser_listGTs = parser_subparsers.add_parser('listGTs', description='Lists the GTs available in the DB.') parser_listGTs.set_defaults(func=listGTs_) - parser_listRuns = parser_subparsers.add_parser('listRuns', description='Lists all the Runs available in the DB.') + parser_listRuns = parser_subparsers.add_parser('listRuns', description='Lists all the Runs available in the DB, possibly applying the optional search criteria.') + parser_listRuns.add_argument('--limit','-L',type=int,default=50,help='Limit on the number of Run entries returned. The returned results are the latest N Runs. Only applies when no selection is specified.') + parser_listRuns.add_argument('--from', '-f', type=str, help='Select items from this "Time" onwards. Supported "Time" formats: Run, encoded TimeStamp, string TimeStamp (format: YYYY-mm-dd hh24:MM:SS)') + parser_listRuns.add_argument('--to', '-t', type=str, help='Ignore items from this "Time" onwards. Supported "Time" formats: Run, encoded TimeStamp, string TimeStamp (format: YYYY-mm-dd hh24:MM:SS)') + parser_listRuns.add_argument('--match', '-m', type=int, help='Search an exact match with this Run.') + parser_listRuns.add_argument('--last','-l', action='store_true', help='Select the last available Run entry.') parser_listRuns.set_defaults(func=listRuns_) parser_diff = parser_subparsers.add_parser('diff', description='Compares the contents of two objects. For tags, their IOVs are compared to determine which ranges have different payloads. For global tags, their tag names are compared. Both objects must be of the same type. If there is more than one valid pair (ambiguity), all diffs are listed.') diff --git a/CondCore/Utilities/src/CondDBTools.cc b/CondCore/Utilities/src/CondDBTools.cc index c067105587a92..27e523338ccb7 100644 --- a/CondCore/Utilities/src/CondDBTools.cc +++ b/CondCore/Utilities/src/CondDBTools.cc @@ -4,7 +4,6 @@ // #include "CondCore/CondDB/src/DbCore.h" // -#include #include #include #include diff --git a/CondCore/Utilities/src/CondFormats.h b/CondCore/Utilities/src/CondFormats.h index 53f7aaee6d801..c6d5fa054aa5a 100644 --- a/CondCore/Utilities/src/CondFormats.h +++ b/CondCore/Utilities/src/CondFormats.h @@ -67,8 +67,8 @@ #include "CondFormats/EcalObjects/interface/EcalPulseShapes.h" #include "CondFormats/EcalObjects/interface/EcalPulseCovariances.h" #include "CondFormats/EcalObjects/interface/EcalPulseSymmCovariances.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" -#include "CondFormats/EgammaObjects/interface/GBRForestD.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForestD.h" #include "CondFormats/HcalObjects/interface/AbsOOTPileupCorrection.h" #include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h" #include "CondFormats/HcalObjects/interface/OOTPileupCorrectionBuffer.h" diff --git a/CondFormats/CSCObjects/src/CSCDBL1TPParametersExtended.cc b/CondFormats/CSCObjects/src/CSCDBL1TPParametersExtended.cc index a20637e4fc7b1..2723dcee92f42 100644 --- a/CondFormats/CSCObjects/src/CSCDBL1TPParametersExtended.cc +++ b/CondFormats/CSCObjects/src/CSCDBL1TPParametersExtended.cc @@ -1,5 +1,7 @@ #include "CondFormats/CSCObjects/interface/CSCDBL1TPParametersExtended.h" +#include + CSCDBL1TPParametersExtended::CSCDBL1TPParametersExtended() { paramsInt_.resize(paramNamesInt_.size()); paramsBool_.resize(paramNamesBool_.size()); @@ -8,21 +10,21 @@ CSCDBL1TPParametersExtended::CSCDBL1TPParametersExtended() { CSCDBL1TPParametersExtended::~CSCDBL1TPParametersExtended() {} int CSCDBL1TPParametersExtended::getValueInt(const std::string& s) const { - const int index = find(paramNamesInt_.begin(), paramNamesInt_.end(), s) - paramNamesInt_.begin(); + const int index = std::find(paramNamesInt_.begin(), paramNamesInt_.end(), s) - paramNamesInt_.begin(); return paramsInt_[index]; } bool CSCDBL1TPParametersExtended::getValueBool(const std::string& s) const { - const int index = find(paramNamesBool_.begin(), paramNamesBool_.end(), s) - paramNamesBool_.begin(); + const int index = std::find(paramNamesBool_.begin(), paramNamesBool_.end(), s) - paramNamesBool_.begin(); return paramsBool_[index]; } void CSCDBL1TPParametersExtended::setValue(const std::string& s, int v) { - const int index = find(paramNamesInt_.begin(), paramNamesInt_.end(), s) - paramNamesInt_.begin(); + const int index = std::find(paramNamesInt_.begin(), paramNamesInt_.end(), s) - paramNamesInt_.begin(); paramsInt_[index] = v; } void CSCDBL1TPParametersExtended::setValue(const std::string& s, bool v) { - const int index = find(paramNamesBool_.begin(), paramNamesBool_.end(), s) - paramNamesBool_.begin(); + const int index = std::find(paramNamesBool_.begin(), paramNamesBool_.end(), s) - paramNamesBool_.begin(); paramsBool_[index] = v; } diff --git a/CondFormats/Common/interface/FileBlob.h b/CondFormats/Common/interface/FileBlob.h index 88d234b1a1bd2..0742295317a04 100644 --- a/CondFormats/Common/interface/FileBlob.h +++ b/CondFormats/Common/interface/FileBlob.h @@ -6,6 +6,7 @@ #include #include #include +#include class FileBlob { public: diff --git a/CondFormats/DataRecord/interface/HcalCombinedRecordsGPU.h b/CondFormats/DataRecord/interface/HcalCombinedRecordsGPU.h new file mode 100644 index 0000000000000..c802c599ed4c5 --- /dev/null +++ b/CondFormats/DataRecord/interface/HcalCombinedRecordsGPU.h @@ -0,0 +1,19 @@ +#ifndef CondFormats_DataRecord_interface_HcalCombinedRecordsGPU_h +#define CondFormats_DataRecord_interface_HcalCombinedRecordsGPU_h + +#include "CondFormats/DataRecord/interface/HcalPedestalWidthsRcd.h" +#include "CondFormats/DataRecord/interface/HcalPedestalsRcd.h" +#include "CondFormats/DataRecord/interface/HcalQIEDataRcd.h" +#include "CondFormats/DataRecord/interface/HcalQIETypesRcd.h" +#include "FWCore/Framework/interface/DependentRecordImplementation.h" + +template +class HcalCombinedRecord : public edm::eventsetup::DependentRecordImplementation, + edm::mpl::Vector> {}; + +using HcalConvertedPedestalsRcd = HcalCombinedRecord; + +using HcalConvertedPedestalWidthsRcd = + HcalCombinedRecord; + +#endif // CondFormats_DataRecord_interface_HcalCombinedRecordsGPU_h diff --git a/CondFormats/DataRecord/interface/L1TObjScalingRcd.h b/CondFormats/DataRecord/interface/L1TObjScalingRcd.h deleted file mode 100644 index 842216d433e2d..0000000000000 --- a/CondFormats/DataRecord/interface/L1TObjScalingRcd.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef L1TObjScalingRcd_L1TObjScalingRcd_h -#define L1TObjScalingRcd_L1TObjScalingRcd_h -// -*- C++ -*- -// -// Package: HLTrigger/HLTcore -// Class : L1TObjScalingRcd -// -/**\class L1TObjScalingRcd L1TObjScalingRcd.h HLTrigger/HLTcore/interface/L1TObjScalingRcd.h - - Description: Holds scaling constants for L1T objects. - - Usage: - Holds constants {A,B,C} such that the pt or Et of a L1T object - can be scaled by ptScaled = A + B*pt + C*pt^2. - A cut can then be applied on ptScaled. - Initial use case is the implementation of the "offline thresholds" - in L1T Phase2 in CMS-TDR-021 described in CMS-TDR-021. - -*/ -// -// Author: Thiago Tomei -// Created: Fri, 04 Sep 2020 17:04:33 GMT -// - -#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" - -class L1TObjScalingRcd : public edm::eventsetup::EventSetupRecordImplementation {}; - -#endif diff --git a/CondFormats/DataRecord/interface/PPSDirectSimulationDataRcd.h b/CondFormats/DataRecord/interface/PPSDirectSimulationDataRcd.h new file mode 100644 index 0000000000000..75589df1a4838 --- /dev/null +++ b/CondFormats/DataRecord/interface/PPSDirectSimulationDataRcd.h @@ -0,0 +1,10 @@ + +#ifndef CTPPSBeamParametersRcd_PPSDirectSimulationDataRcd_h +#define CTPPSBeamParametersRcd_PPSDirectSimulationDataRcd_h + +#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" + +class PPSDirectSimulationDataRcd : public edm::eventsetup::EventSetupRecordImplementation { +}; + +#endif diff --git a/CondFormats/DataRecord/interface/PPSPixelTopologyRcd.h b/CondFormats/DataRecord/interface/PPSPixelTopologyRcd.h new file mode 100644 index 0000000000000..8ffdc20ba11a4 --- /dev/null +++ b/CondFormats/DataRecord/interface/PPSPixelTopologyRcd.h @@ -0,0 +1,10 @@ +// Author: F.Ferro + +#ifndef CondFormats_DataRecord_PPSPixelTopologyRcd_h +#define CondFormats_DataRecord_PPSPixelTopologyRcd_h + +#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" + +class PPSPixelTopologyRcd : public edm::eventsetup::EventSetupRecordImplementation {}; + +#endif diff --git a/CondFormats/DataRecord/src/HcalCombinedRecordsGPU.cc b/CondFormats/DataRecord/src/HcalCombinedRecordsGPU.cc new file mode 100644 index 0000000000000..6da5efbef4f20 --- /dev/null +++ b/CondFormats/DataRecord/src/HcalCombinedRecordsGPU.cc @@ -0,0 +1,5 @@ +#include "CondFormats/DataRecord/interface/HcalCombinedRecordsGPU.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +EVENTSETUP_RECORD_REG(HcalConvertedPedestalsRcd); +EVENTSETUP_RECORD_REG(HcalConvertedPedestalWidthsRcd); diff --git a/CondFormats/DataRecord/src/L1TObjScalingRcd.cc b/CondFormats/DataRecord/src/L1TObjScalingRcd.cc deleted file mode 100644 index 9101b9642bab4..0000000000000 --- a/CondFormats/DataRecord/src/L1TObjScalingRcd.cc +++ /dev/null @@ -1,15 +0,0 @@ -// -*- C++ -*- -// -// Package: HLTrigger/HLTcore -// Class : L1TObjScalingRcd -// -// Implementation: -// [Notes on implementation] -// -// Author: Thiago Tomei -// Created: Fri, 04 Sep 2020 17:04:33 GMT - -#include "CondFormats/DataRecord/interface/L1TObjScalingRcd.h" -#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" - -EVENTSETUP_RECORD_REG(L1TObjScalingRcd); diff --git a/CondFormats/DataRecord/src/PPSDirectSimulationDataRcd.cc b/CondFormats/DataRecord/src/PPSDirectSimulationDataRcd.cc new file mode 100644 index 0000000000000..6020897b7e691 --- /dev/null +++ b/CondFormats/DataRecord/src/PPSDirectSimulationDataRcd.cc @@ -0,0 +1,6 @@ + + +#include "CondFormats/DataRecord/interface/PPSDirectSimulationDataRcd.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +EVENTSETUP_RECORD_REG(PPSDirectSimulationDataRcd); diff --git a/CondFormats/DataRecord/src/PPSPixelTopologyRcd.cc b/CondFormats/DataRecord/src/PPSPixelTopologyRcd.cc new file mode 100644 index 0000000000000..cc6aca4ce1055 --- /dev/null +++ b/CondFormats/DataRecord/src/PPSPixelTopologyRcd.cc @@ -0,0 +1,14 @@ +// -*- C++ -*- +// +// Package: CondFormats/DataRecord +// Class : PPSPixelTopologyRcd +// +// Implementation: +// [Notes on implementation] +// +// Author: F.Ferro + +#include "CondFormats/DataRecord/interface/PPSPixelTopologyRcd.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +EVENTSETUP_RECORD_REG(PPSPixelTopologyRcd); diff --git a/CondFormats/EcalObjects/src/EcalMustacheSCParameters.cc b/CondFormats/EcalObjects/src/EcalMustacheSCParameters.cc index 04469103d4c1d..153e4d97893a4 100644 --- a/CondFormats/EcalObjects/src/EcalMustacheSCParameters.cc +++ b/CondFormats/EcalObjects/src/EcalMustacheSCParameters.cc @@ -1,4 +1,5 @@ #include "CondFormats/EcalObjects/interface/EcalMustacheSCParameters.h" +#include float EcalMustacheSCParameters::sqrtLogClustETuning() const { return sqrtLogClustETuning_; } diff --git a/CondFormats/EcalObjects/src/EcalSCDynamicDPhiParameters.cc b/CondFormats/EcalObjects/src/EcalSCDynamicDPhiParameters.cc index 8734384db5f88..27f740ee880d8 100644 --- a/CondFormats/EcalObjects/src/EcalSCDynamicDPhiParameters.cc +++ b/CondFormats/EcalObjects/src/EcalSCDynamicDPhiParameters.cc @@ -1,4 +1,5 @@ #include "CondFormats/EcalObjects/interface/EcalSCDynamicDPhiParameters.h" +#include const EcalSCDynamicDPhiParameters::DynamicDPhiParameters* EcalSCDynamicDPhiParameters::dynamicDPhiParameters( double clustE, double absSeedEta) const { diff --git a/CondFormats/EgammaObjects/doc/EgammaObjects.doc b/CondFormats/EgammaObjects/doc/EgammaObjects.doc index c9e324fb17b5d..ad59552c1fc89 100644 --- a/CondFormats/EgammaObjects/doc/EgammaObjects.doc +++ b/CondFormats/EgammaObjects/doc/EgammaObjects.doc @@ -22,8 +22,6 @@ - ElectronLikelihoodCalibration - ElectronLikelihoodCategoryData -- GBRForest -- GBRTree \subsection pluginai Plugins diff --git a/CondFormats/EgammaObjects/src/GBRForest.cxx b/CondFormats/EgammaObjects/src/GBRForest.cxx deleted file mode 100644 index a0ca7006da1cb..0000000000000 --- a/CondFormats/EgammaObjects/src/GBRForest.cxx +++ /dev/null @@ -1,4 +0,0 @@ -#include "CondFormats/EgammaObjects/interface/GBRForest.h" - -//_______________________________________________________________________ -GBRForest::GBRForest() : fInitialResponse(0.) {} diff --git a/CondFormats/EgammaObjects/src/GBRTree2D.cxx b/CondFormats/EgammaObjects/src/GBRTree2D.cxx deleted file mode 100644 index c2965b64d29ce..0000000000000 --- a/CondFormats/EgammaObjects/src/GBRTree2D.cxx +++ /dev/null @@ -1 +0,0 @@ -#include "CondFormats/EgammaObjects/interface/GBRTree2D.h" diff --git a/CondFormats/EgammaObjects/src/GBRTreeD.cc b/CondFormats/EgammaObjects/src/GBRTreeD.cc deleted file mode 100644 index df50d2f7e31ba..0000000000000 --- a/CondFormats/EgammaObjects/src/GBRTreeD.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "CondFormats/EgammaObjects/interface/GBRTreeD.h" - -//_______________________________________________________________________ -GBRTreeD::~GBRTreeD() {} diff --git a/CondFormats/EgammaObjects/src/T_EventSetup_GBRDWrapper.cc b/CondFormats/EgammaObjects/src/T_EventSetup_GBRDWrapper.cc deleted file mode 100644 index fe337c7af7fd5..0000000000000 --- a/CondFormats/EgammaObjects/src/T_EventSetup_GBRDWrapper.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "CondFormats/EgammaObjects/interface/GBRForestD.h" -#include "FWCore/Utilities/interface/typelookup.h" - -TYPELOOKUP_DATA_REG(GBRForestD); diff --git a/CondFormats/EgammaObjects/src/T_EventSetup_GBRWrapper.cc b/CondFormats/EgammaObjects/src/T_EventSetup_GBRWrapper.cc deleted file mode 100644 index a68115f597214..0000000000000 --- a/CondFormats/EgammaObjects/src/T_EventSetup_GBRWrapper.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "CondFormats/EgammaObjects/interface/GBRForest.h" -#include "FWCore/Utilities/interface/typelookup.h" - -TYPELOOKUP_DATA_REG(GBRForest); diff --git a/CondFormats/EgammaObjects/src/classes.h b/CondFormats/EgammaObjects/src/classes.h index b394925ab63ab..072ab2eb78218 100644 --- a/CondFormats/EgammaObjects/src/classes.h +++ b/CondFormats/EgammaObjects/src/classes.h @@ -9,11 +9,5 @@ namespace CondFormats_EgammaObjects { std::vector d; std::vector::iterator d1; std::vector::const_iterator d2; - GBRTree e1; - GBRForest e2; - GBRTree2D e3; - GBRForest2D e4; - GBRTreeD e5; - GBRForestD e6; }; } // namespace CondFormats_EgammaObjects diff --git a/CondFormats/EgammaObjects/src/classes_def.xml b/CondFormats/EgammaObjects/src/classes_def.xml index 959b2aa6acb13..2b6f64c2549be 100644 --- a/CondFormats/EgammaObjects/src/classes_def.xml +++ b/CondFormats/EgammaObjects/src/classes_def.xml @@ -4,19 +4,4 @@ - - - - - - - - - - - - - - - diff --git a/CondFormats/EgammaObjects/src/headers.h b/CondFormats/EgammaObjects/src/headers.h index 8a7cb74329a99..750542a13571f 100644 --- a/CondFormats/EgammaObjects/src/headers.h +++ b/CondFormats/EgammaObjects/src/headers.h @@ -1,9 +1,3 @@ #include "CondFormats/PhysicsToolsObjects/interface/Histogram.h" #include "CondFormats/EgammaObjects/interface/ElectronLikelihoodCategoryData.h" #include "CondFormats/EgammaObjects/interface/ElectronLikelihoodCalibration.h" -#include "CondFormats/EgammaObjects/interface/GBRTree.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" -#include "CondFormats/EgammaObjects/interface/GBRTree2D.h" -#include "CondFormats/EgammaObjects/interface/GBRForest2D.h" -#include "CondFormats/EgammaObjects/interface/GBRTreeD.h" -#include "CondFormats/EgammaObjects/interface/GBRForestD.h" diff --git a/CondFormats/EgammaObjects/test/testSerializationEgammaObjects.cpp b/CondFormats/EgammaObjects/test/testSerializationEgammaObjects.cpp index aa356db71f27e..56dd8cce0d031 100644 --- a/CondFormats/EgammaObjects/test/testSerializationEgammaObjects.cpp +++ b/CondFormats/EgammaObjects/test/testSerializationEgammaObjects.cpp @@ -6,16 +6,7 @@ int main() { testSerialization(); testSerialization(); testSerialization(); - testSerialization(); - testSerialization(); - testSerialization(); - testSerialization(); - testSerialization(); - testSerialization(); testSerialization>(); - testSerialization>(); - testSerialization>(); - testSerialization>(); return 0; } diff --git a/CondFormats/GBRForest/BuildFile.xml b/CondFormats/GBRForest/BuildFile.xml new file mode 100644 index 0000000000000..06d9b6fbc34cd --- /dev/null +++ b/CondFormats/GBRForest/BuildFile.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/CondFormats/EgammaObjects/interface/GBRForest.h b/CondFormats/GBRForest/interface/GBRForest.h similarity index 97% rename from CondFormats/EgammaObjects/interface/GBRForest.h rename to CondFormats/GBRForest/interface/GBRForest.h index 83e0f2604b273..72e5a230423dd 100644 --- a/CondFormats/EgammaObjects/interface/GBRForest.h +++ b/CondFormats/GBRForest/interface/GBRForest.h @@ -17,7 +17,7 @@ ////////////////////////////////////////////////////////////////////////// #include "CondFormats/Serialization/interface/Serializable.h" -#include "CondFormats/EgammaObjects/interface/GBRTree.h" +#include "CondFormats/GBRForest/interface/GBRTree.h" #include #include diff --git a/CondFormats/EgammaObjects/interface/GBRForest2D.h b/CondFormats/GBRForest/interface/GBRForest2D.h similarity index 100% rename from CondFormats/EgammaObjects/interface/GBRForest2D.h rename to CondFormats/GBRForest/interface/GBRForest2D.h diff --git a/CondFormats/EgammaObjects/interface/GBRForestD.h b/CondFormats/GBRForest/interface/GBRForestD.h similarity index 100% rename from CondFormats/EgammaObjects/interface/GBRForestD.h rename to CondFormats/GBRForest/interface/GBRForestD.h diff --git a/CondFormats/EgammaObjects/interface/GBRTree.h b/CondFormats/GBRForest/interface/GBRTree.h similarity index 100% rename from CondFormats/EgammaObjects/interface/GBRTree.h rename to CondFormats/GBRForest/interface/GBRTree.h diff --git a/CondFormats/EgammaObjects/interface/GBRTree2D.h b/CondFormats/GBRForest/interface/GBRTree2D.h similarity index 100% rename from CondFormats/EgammaObjects/interface/GBRTree2D.h rename to CondFormats/GBRForest/interface/GBRTree2D.h diff --git a/CondFormats/EgammaObjects/interface/GBRTreeD.h b/CondFormats/GBRForest/interface/GBRTreeD.h similarity index 100% rename from CondFormats/EgammaObjects/interface/GBRTreeD.h rename to CondFormats/GBRForest/interface/GBRTreeD.h diff --git a/CondFormats/GBRForest/src/GBRForest.cxx b/CondFormats/GBRForest/src/GBRForest.cxx new file mode 100644 index 0000000000000..566cc6c1e8c9a --- /dev/null +++ b/CondFormats/GBRForest/src/GBRForest.cxx @@ -0,0 +1,4 @@ +#include "CondFormats/GBRForest/interface/GBRForest.h" + +//_______________________________________________________________________ +GBRForest::GBRForest() : fInitialResponse(0.) {} diff --git a/CondFormats/EgammaObjects/src/GBRForest2D.cxx b/CondFormats/GBRForest/src/GBRForest2D.cxx similarity index 79% rename from CondFormats/EgammaObjects/src/GBRForest2D.cxx rename to CondFormats/GBRForest/src/GBRForest2D.cxx index 81adc41da8c33..4589dff932697 100644 --- a/CondFormats/EgammaObjects/src/GBRForest2D.cxx +++ b/CondFormats/GBRForest/src/GBRForest2D.cxx @@ -1,4 +1,4 @@ -#include "CondFormats/EgammaObjects/interface/GBRForest2D.h" +#include "CondFormats/GBRForest/interface/GBRForest2D.h" //#include #include "TMVA/DecisionTree.h" #include "TMVA/MethodBDT.h" diff --git a/CondFormats/EgammaObjects/src/GBRForestD.cc b/CondFormats/GBRForest/src/GBRForestD.cc similarity index 79% rename from CondFormats/EgammaObjects/src/GBRForestD.cc rename to CondFormats/GBRForest/src/GBRForestD.cc index f852285251038..009a3a6e5cee2 100644 --- a/CondFormats/EgammaObjects/src/GBRForestD.cc +++ b/CondFormats/GBRForest/src/GBRForestD.cc @@ -1,4 +1,4 @@ -#include "CondFormats/EgammaObjects/interface/GBRForestD.h" +#include "CondFormats/GBRForest/interface/GBRForestD.h" //_______________________________________________________________________ GBRForestD::GBRForestD() : fInitialResponse(0.) {} diff --git a/CondFormats/EgammaObjects/src/GBRTree.cxx b/CondFormats/GBRForest/src/GBRTree.cxx similarity index 89% rename from CondFormats/EgammaObjects/src/GBRTree.cxx rename to CondFormats/GBRForest/src/GBRTree.cxx index ab436f0642dfa..3512c7e2e0751 100644 --- a/CondFormats/EgammaObjects/src/GBRTree.cxx +++ b/CondFormats/GBRForest/src/GBRTree.cxx @@ -1,4 +1,4 @@ -#include "CondFormats/EgammaObjects/interface/GBRTree.h" +#include "CondFormats/GBRForest/interface/GBRTree.h" //_______________________________________________________________________ GBRTree::GBRTree() {} diff --git a/CondFormats/GBRForest/src/GBRTree2D.cxx b/CondFormats/GBRForest/src/GBRTree2D.cxx new file mode 100644 index 0000000000000..a19739e4124c0 --- /dev/null +++ b/CondFormats/GBRForest/src/GBRTree2D.cxx @@ -0,0 +1 @@ +#include "CondFormats/GBRForest/interface/GBRTree2D.h" diff --git a/CondFormats/GBRForest/src/GBRTreeD.cc b/CondFormats/GBRForest/src/GBRTreeD.cc new file mode 100644 index 0000000000000..f938dbd0dd87a --- /dev/null +++ b/CondFormats/GBRForest/src/GBRTreeD.cc @@ -0,0 +1,4 @@ +#include "CondFormats/GBRForest/interface/GBRTreeD.h" + +//_______________________________________________________________________ +GBRTreeD::~GBRTreeD() {} diff --git a/CondFormats/GBRForest/src/T_EventSetup_GBRDWrapper.cc b/CondFormats/GBRForest/src/T_EventSetup_GBRDWrapper.cc new file mode 100644 index 0000000000000..8900afea5542d --- /dev/null +++ b/CondFormats/GBRForest/src/T_EventSetup_GBRDWrapper.cc @@ -0,0 +1,4 @@ +#include "CondFormats/GBRForest/interface/GBRForestD.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(GBRForestD); diff --git a/CondFormats/GBRForest/src/T_EventSetup_GBRWrapper.cc b/CondFormats/GBRForest/src/T_EventSetup_GBRWrapper.cc new file mode 100644 index 0000000000000..f3b58afedf454 --- /dev/null +++ b/CondFormats/GBRForest/src/T_EventSetup_GBRWrapper.cc @@ -0,0 +1,4 @@ +#include "CondFormats/GBRForest/interface/GBRForest.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(GBRForest); diff --git a/CondFormats/GBRForest/src/classes.h b/CondFormats/GBRForest/src/classes.h new file mode 100644 index 0000000000000..fe037ff681a89 --- /dev/null +++ b/CondFormats/GBRForest/src/classes.h @@ -0,0 +1,12 @@ +#include "CondFormats/GBRForest/src/headers.h" + +namespace CondFormats_GBRForest { + struct dictionary { + GBRTree e1; + GBRForest e2; + GBRTree2D e3; + GBRForest2D e4; + GBRTreeD e5; + GBRForestD e6; + }; +} // namespace CondFormats_GBRForest diff --git a/CondFormats/GBRForest/src/classes_def.xml b/CondFormats/GBRForest/src/classes_def.xml new file mode 100644 index 0000000000000..58df871adcf61 --- /dev/null +++ b/CondFormats/GBRForest/src/classes_def.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/CondFormats/GBRForest/src/headers.h b/CondFormats/GBRForest/src/headers.h new file mode 100644 index 0000000000000..1b1c58639ea69 --- /dev/null +++ b/CondFormats/GBRForest/src/headers.h @@ -0,0 +1,6 @@ +#include "CondFormats/GBRForest/interface/GBRTree.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRTree2D.h" +#include "CondFormats/GBRForest/interface/GBRForest2D.h" +#include "CondFormats/GBRForest/interface/GBRTreeD.h" +#include "CondFormats/GBRForest/interface/GBRForestD.h" diff --git a/CondFormats/GBRForest/test/BuildFile.xml b/CondFormats/GBRForest/test/BuildFile.xml new file mode 100644 index 0000000000000..a2f250b4befc7 --- /dev/null +++ b/CondFormats/GBRForest/test/BuildFile.xml @@ -0,0 +1,3 @@ + + + diff --git a/CondFormats/GBRForest/test/testSerializationGBRForest.cpp b/CondFormats/GBRForest/test/testSerializationGBRForest.cpp new file mode 100644 index 0000000000000..ed68ea49e2517 --- /dev/null +++ b/CondFormats/GBRForest/test/testSerializationGBRForest.cpp @@ -0,0 +1,17 @@ +#include "CondFormats/Serialization/interface/Test.h" + +#include "CondFormats/GBRForest/src/headers.h" + +int main() { + testSerialization(); + testSerialization(); + testSerialization(); + testSerialization(); + testSerialization(); + testSerialization(); + testSerialization>(); + testSerialization>(); + testSerialization>(); + + return 0; +} diff --git a/CondFormats/GEMObjects/interface/GEMeMap.h b/CondFormats/GEMObjects/interface/GEMeMap.h index 7242430068a09..1aff4ff78324a 100644 --- a/CondFormats/GEMObjects/interface/GEMeMap.h +++ b/CondFormats/GEMObjects/interface/GEMeMap.h @@ -59,7 +59,9 @@ class GEMeMap { static const int vfatVerV3_ = 3; // VFAT v3 static const int vfatTypeV3_ = 11; // VFAT v3 static const int chipIdMask_ = 0xfff; // chipId mask for 12 bits - static const int maxGEBs_ = 32; // 5 bits for GEB id + static const int maxGEBs_ = 24; // 5 bits for GEB id + static const int maxGEB1_ = 12; // 5 bits for GEB id + static const int maxGEB2_ = 12; // 5 bits for GEB id static const int maxAMCs_ = 15; // 4 bits for AMC no. static const int maxVFatGE0_ = 12; // vFat per eta partition, not known yet for ME0 static const int maxVFatGE11_ = 3; // vFat per eta partition in GE11 diff --git a/CondFormats/GEMObjects/src/GEMeMap.cc b/CondFormats/GEMObjects/src/GEMeMap.cc index ea8aef5b8430a..828f7a2b5248d 100644 --- a/CondFormats/GEMObjects/src/GEMeMap.cc +++ b/CondFormats/GEMObjects/src/GEMeMap.cc @@ -28,10 +28,10 @@ void GEMeMap::convert(GEMROMapping& romap) { abs(imap.gemNum[ix] % 100), 0); dc.vfatVer = imap.vfatVer[ix]; - romap.add(ec, dc); } } + // chamberType to vfatType for (auto imap : theVFatMap_) { for (unsigned int ix = 0; ix < imap.vfatAdd.size(); ix++) { @@ -74,19 +74,24 @@ void GEMeMap::convert(GEMROMapping& romap) { void GEMeMap::convertDummy(GEMROMapping& romap) { // 12 bits for vfat, 5 bits for geb, 8 bit long GLIB serial number - unsigned int fedId = FEDNumbering::MINGEMFEDID; - uint8_t amcNum = 0; //amc - uint8_t gebId = 0; + unsigned int fedId = 0; - for (int re = -1; re <= 1; re = re + 2) { - for (int st = GEMDetId::minStationId0; st <= GEMDetId::maxStationId; ++st) { - int maxVFat = maxVFatGE11_; + for (int st = GEMDetId::minStationId0; st <= GEMDetId::maxStationId; ++st) { + for (int re = -1; re <= 1; re = re + 2) { + uint8_t amcNum = 1; //amc + uint8_t gebId = 0; + int maxVFat = 0; int maxLayerId = GEMDetId::maxLayerId; - if (GEMSubDetId::station(st) == GEMSubDetId::Station::GE21) - maxVFat = maxVFatGE21_; - if (GEMSubDetId::station(st) == GEMSubDetId::Station::GE0) { + if (st == 0) { maxVFat = maxVFatGE0_; + fedId = (re == 1 ? FEDNumbering::MINGE0FEDID + 1 : FEDNumbering::MINGE0FEDID); maxLayerId = GEMDetId::maxLayerId0; + } else if (st == 1) { + maxVFat = maxVFatGE11_; + fedId = (re == 1 ? FEDNumbering::MINGEMFEDID + 1 : FEDNumbering::MINGEMFEDID); + } else if (st == 2) { + maxVFat = maxVFatGE21_; + fedId = (re == 1 ? FEDNumbering::MINGE21FEDID + 1 : FEDNumbering::MINGE21FEDID); } for (int ch = 1; ch <= GEMDetId::maxChamberId; ++ch) { @@ -101,7 +106,6 @@ void GEMeMap::convertDummy(GEMROMapping& romap) { GEMROMapping::chamDC dc; dc.detId = gemId; dc.vfatVer = vfatVerV3_; - romap.add(ec, dc); uint16_t chipPos = 0; @@ -123,18 +127,16 @@ void GEMeMap::convertDummy(GEMROMapping& romap) { } } - // 1 geb per chamber - gebId++; // 5 bits for gebId - if (gebId == maxGEBs_) { - // 24 gebs per amc + if (st > 0 && gebId == maxGEB1_) { gebId = 0; - amcNum++; - } - if (amcNum == maxAMCs_) { + amcNum += 2; // only odd amc No. is used for GE11 + } else if (st == 0 && gebId == maxGEBs_) { gebId = 0; - amcNum = 0; - fedId++; + amcNum++; + } else { + // 1 geb per chamber + gebId++; } } } diff --git a/CondFormats/HLTObjects/interface/L1TObjScalingConstants.h b/CondFormats/HLTObjects/interface/L1TObjScalingConstants.h deleted file mode 100644 index a2c7c87049eda..0000000000000 --- a/CondFormats/HLTObjects/interface/L1TObjScalingConstants.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef HLTObjects_L1TObjScalingConstants_h -#define HLTObjects_L1TObjScalingConstants_h - -#include "CondFormats/Serialization/interface/Serializable.h" - -#include - -class L1TObjScalingConstants { -public: - struct Scaling { - float m_constant; - float m_linear; - float m_quadratic; - COND_SERIALIZABLE; - }; - - std::vector m_constants; - COND_SERIALIZABLE; -}; - -#endif // HLTObjects_L1TObjScalingConstants_h diff --git a/CondFormats/HLTObjects/src/T_EventSetup_L1TObjScalingConstants.cc b/CondFormats/HLTObjects/src/T_EventSetup_L1TObjScalingConstants.cc deleted file mode 100644 index c222b5b2154f0..0000000000000 --- a/CondFormats/HLTObjects/src/T_EventSetup_L1TObjScalingConstants.cc +++ /dev/null @@ -1,6 +0,0 @@ -// T_EventSetup_L1TObjScalingConstants.cc - -#include "CondFormats/HLTObjects/interface/L1TObjScalingConstants.h" -#include "FWCore/Utilities/interface/typelookup.h" - -TYPELOOKUP_DATA_REG(L1TObjScalingConstants); diff --git a/CondFormats/HLTObjects/src/classes.h b/CondFormats/HLTObjects/src/classes.h index 2b82ebcf0b0c7..a950a043c8e1c 100644 --- a/CondFormats/HLTObjects/src/classes.h +++ b/CondFormats/HLTObjects/src/classes.h @@ -1,3 +1,2 @@ #include "CondFormats/HLTObjects/interface/AlCaRecoTriggerBits.h" #include "CondFormats/HLTObjects/interface/HLTPrescaleTableCond.h" -#include "CondFormats/HLTObjects/interface/L1TObjScalingConstants.h" diff --git a/CondFormats/HLTObjects/src/classes_def.xml b/CondFormats/HLTObjects/src/classes_def.xml index 12b827726f929..118786db49aa7 100644 --- a/CondFormats/HLTObjects/src/classes_def.xml +++ b/CondFormats/HLTObjects/src/classes_def.xml @@ -4,8 +4,5 @@ - - - diff --git a/CondFormats/HLTObjects/test/testSerializationHLTObjects.cpp b/CondFormats/HLTObjects/test/testSerializationHLTObjects.cpp index fe35e546cf6cb..a03146fb0ff97 100644 --- a/CondFormats/HLTObjects/test/testSerializationHLTObjects.cpp +++ b/CondFormats/HLTObjects/test/testSerializationHLTObjects.cpp @@ -6,8 +6,6 @@ int main() { testSerialization(); testSerialization>>(); //testSerialization(); never serialized in the old DB - testSerialization(); - testSerialization>(); - testSerialization>(); + return 0; } diff --git a/CondFormats/HcalObjects/BuildFile.xml b/CondFormats/HcalObjects/BuildFile.xml index e89b6fb3f2369..0ed8951b0ee63 100644 --- a/CondFormats/HcalObjects/BuildFile.xml +++ b/CondFormats/HcalObjects/BuildFile.xml @@ -1,13 +1,15 @@ + + - - - - + + + + diff --git a/CondFormats/HcalObjects/interface/HcalConvertedEffectivePedestalWidthsGPU.h b/CondFormats/HcalObjects/interface/HcalConvertedEffectivePedestalWidthsGPU.h new file mode 100644 index 0000000000000..b2232d5d647a2 --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalConvertedEffectivePedestalWidthsGPU.h @@ -0,0 +1,12 @@ +#ifndef CondFormats_HcalObjects_interface_HcalConvertedEffectivePedestalWidthsGPU_h +#define CondFormats_HcalObjects_interface_HcalConvertedEffectivePedestalWidthsGPU_h + +#include "CondFormats/HcalObjects/interface/HcalConvertedPedestalWidthsGPU.h" + +// similar to converted effective pedestals +class HcalConvertedEffectivePedestalWidthsGPU final : public HcalConvertedPedestalWidthsGPU { +public: + using HcalConvertedPedestalWidthsGPU::HcalConvertedPedestalWidthsGPU; +}; + +#endif // RecoLocalCalo_HcalRecAlgos_interface_HcalConvertedEffectivePedestalWidthsGPU_h diff --git a/CondFormats/HcalObjects/interface/HcalConvertedEffectivePedestalsGPU.h b/CondFormats/HcalObjects/interface/HcalConvertedEffectivePedestalsGPU.h new file mode 100644 index 0000000000000..311485ac7275a --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalConvertedEffectivePedestalsGPU.h @@ -0,0 +1,14 @@ +#ifndef CondFormats_HcalObjects_interface_HcalConvertedEffectivePedestalsGPU_h +#define CondFormats_HcalObjects_interface_HcalConvertedEffectivePedestalsGPU_h + +#include "CondFormats/HcalObjects/interface/HcalConvertedPedestalsGPU.h" + +// Separate access to effective and regular pedestals +// No need to transfer/rearrange effective or vice versa if they are not going +// to be used +class HcalConvertedEffectivePedestalsGPU final : public HcalConvertedPedestalsGPU { +public: + using HcalConvertedPedestalsGPU::HcalConvertedPedestalsGPU; +}; + +#endif // RecoLocalCalo_HcalRecAlgos_interface_HcalConvertedEffectivePedestalsGPU_h diff --git a/CondFormats/HcalObjects/interface/HcalConvertedPedestalWidthsGPU.h b/CondFormats/HcalObjects/interface/HcalConvertedPedestalWidthsGPU.h new file mode 100644 index 0000000000000..bf212265fe5ae --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalConvertedPedestalWidthsGPU.h @@ -0,0 +1,43 @@ +#ifndef CondFormats_HcalObjects_interface_HcalConvertedPedestalWidthsGPU_h +#define CondFormats_HcalObjects_interface_HcalConvertedPedestalWidthsGPU_h + +#include "CondFormats/HcalObjects/interface/HcalPedestalWidths.h" +#include "CondFormats/HcalObjects/interface/HcalPedestals.h" +#include "CondFormats/HcalObjects/interface/HcalQIEData.h" +#include "CondFormats/HcalObjects/interface/HcalQIETypes.h" +#include "FWCore/Utilities/interface/propagate_const_array.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalConvertedPedestalWidthsGPU { +public: + struct Product { + edm::propagate_const_array> values; + }; + +#ifndef __CUDACC__ + // order matters! + HcalConvertedPedestalWidthsGPU(HcalPedestals const&, + HcalPedestalWidths const&, + HcalQIEData const&, + HcalQIETypes const&); + + // will trigger deallocation of Product thru ~Product + ~HcalConvertedPedestalWidthsGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + +private: + uint64_t totalChannels_; + std::vector> values_; + + cms::cuda::ESProduct product_; +#endif +}; + +#endif diff --git a/CondFormats/HcalObjects/interface/HcalConvertedPedestalsGPU.h b/CondFormats/HcalObjects/interface/HcalConvertedPedestalsGPU.h new file mode 100644 index 0000000000000..84824fbeb1d2a --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalConvertedPedestalsGPU.h @@ -0,0 +1,42 @@ +#ifndef CondFormats_HcalObjects_interface_HcalConvertedPedestalsGPU_h +#define CondFormats_HcalObjects_interface_HcalConvertedPedestalsGPU_h + +#include "CondFormats/HcalObjects/interface/HcalPedestals.h" +#include "CondFormats/HcalObjects/interface/HcalQIEData.h" +#include "CondFormats/HcalObjects/interface/HcalQIETypes.h" +#include "FWCore/Utilities/interface/propagate_const_array.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalConvertedPedestalsGPU { +public: + struct Product { + edm::propagate_const_array> values; + }; + +#ifndef __CUDACC__ + // order matters! + HcalConvertedPedestalsGPU(HcalPedestals const&, HcalQIEData const&, HcalQIETypes const&); + + // will trigger deallocation of Product thru ~Product + ~HcalConvertedPedestalsGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + + uint32_t offsetForHashes() const { return offsetForHashes_; } + +protected: + uint64_t totalChannels_; + uint32_t offsetForHashes_; + std::vector> values_; + + cms::cuda::ESProduct product_; +#endif +}; + +#endif diff --git a/CondFormats/HcalObjects/interface/HcalGainWidthsGPU.h b/CondFormats/HcalObjects/interface/HcalGainWidthsGPU.h new file mode 100644 index 0000000000000..4851239f171df --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalGainWidthsGPU.h @@ -0,0 +1,40 @@ +#ifndef CondFormats_HcalObjects_interface_HcalGainWidthsGPU_h +#define CondFormats_HcalObjects_interface_HcalGainWidthsGPU_h + +#include "CondFormats/HcalObjects/interface/HcalGainWidths.h" +#include "FWCore/Utilities/interface/propagate_const_array.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalGainWidthsGPU { +public: + struct Product { + edm::propagate_const_array> value0; + edm::propagate_const_array> value1; + edm::propagate_const_array> value2; + edm::propagate_const_array> value3; + }; + +#ifndef __CUDACC__ + // rearrange reco params + HcalGainWidthsGPU(HcalGainWidths const &); + + // will trigger deallocation of Product thru ~Product + ~HcalGainWidthsGPU() = default; + + // get device pointers + Product const &getProduct(cudaStream_t) const; + +private: + uint64_t totalChannels_; + std::vector> value0_, value1_, value2_, value3_; + + cms::cuda::ESProduct product_; +#endif +}; + +#endif diff --git a/CondFormats/HcalObjects/interface/HcalGainsGPU.h b/CondFormats/HcalObjects/interface/HcalGainsGPU.h new file mode 100644 index 0000000000000..030146ffc7cdf --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalGainsGPU.h @@ -0,0 +1,37 @@ +#ifndef CondFormats_HcalObjects_interface_HcalGainsGPU_h +#define CondFormats_HcalObjects_interface_HcalGainsGPU_h + +#include "CondFormats/HcalObjects/interface/HcalGains.h" +#include "FWCore/Utilities/interface/propagate_const_array.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalGainsGPU { +public: + struct Product { + edm::propagate_const_array> values; + }; + +#ifndef __CUDACC__ + // rearrange reco params + HcalGainsGPU(HcalGains const&); + + // will trigger deallocation of Product thru ~Product + ~HcalGainsGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + +private: + uint64_t totalChannels_; + std::vector> values_; + + cms::cuda::ESProduct product_; +#endif +}; + +#endif diff --git a/CondFormats/HcalObjects/interface/HcalLUTCorrsGPU.h b/CondFormats/HcalObjects/interface/HcalLUTCorrsGPU.h new file mode 100644 index 0000000000000..699dfb9706147 --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalLUTCorrsGPU.h @@ -0,0 +1,36 @@ +#ifndef CondFormats_HcalObjects_interface_HcalLUTCorrsGPU_h +#define CondFormats_HcalObjects_interface_HcalLUTCorrsGPU_h + +#include "CondFormats/HcalObjects/interface/HcalLUTCorrs.h" +#include "FWCore/Utilities/interface/propagate_const_array.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalLUTCorrsGPU { +public: + struct Product { + edm::propagate_const_array> value; + }; + +#ifndef __CUDACC__ + // rearrange reco params + HcalLUTCorrsGPU(HcalLUTCorrs const&); + + // will trigger deallocation of Product thru ~Product + ~HcalLUTCorrsGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + +private: + std::vector> value_; + + cms::cuda::ESProduct product_; +#endif +}; + +#endif diff --git a/CondFormats/HcalObjects/interface/HcalPedestalWidthsGPU.h b/CondFormats/HcalObjects/interface/HcalPedestalWidthsGPU.h new file mode 100644 index 0000000000000..b39ed2545c5e2 --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalPedestalWidthsGPU.h @@ -0,0 +1,71 @@ +#ifndef CondFormats_HcalObjects_interface_HcalPedestalWidthsGPU_h +#define CondFormats_HcalObjects_interface_HcalPedestalWidthsGPU_h + +#include "CondFormats/HcalObjects/interface/HcalPedestalWidths.h" +#include "FWCore/Utilities/interface/propagate_const_array.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalPedestalWidthsGPU { +public: + struct Product { + edm::propagate_const_array> sigma00; + edm::propagate_const_array> sigma01; + edm::propagate_const_array> sigma02; + edm::propagate_const_array> sigma03; + edm::propagate_const_array> sigma10; + edm::propagate_const_array> sigma11; + edm::propagate_const_array> sigma12; + edm::propagate_const_array> sigma13; + edm::propagate_const_array> sigma20; + edm::propagate_const_array> sigma21; + edm::propagate_const_array> sigma22; + edm::propagate_const_array> sigma23; + edm::propagate_const_array> sigma30; + edm::propagate_const_array> sigma31; + edm::propagate_const_array> sigma32; + edm::propagate_const_array> sigma33; + }; + +#ifndef __CUDACC__ + // rearrange reco params + HcalPedestalWidthsGPU(HcalPedestalWidths const&); + + // will trigger deallocation of Product thru ~Product + ~HcalPedestalWidthsGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + + // as in cpu version + bool unitIsADC() const { return unitIsADC_; } + +private: + bool unitIsADC_; + uint64_t totalChannels_; + std::vector> sigma00_; + std::vector> sigma01_; + std::vector> sigma02_; + std::vector> sigma03_; + std::vector> sigma10_; + std::vector> sigma11_; + std::vector> sigma12_; + std::vector> sigma13_; + std::vector> sigma20_; + std::vector> sigma21_; + std::vector> sigma22_; + std::vector> sigma23_; + std::vector> sigma30_; + std::vector> sigma31_; + std::vector> sigma32_; + std::vector> sigma33_; + + cms::cuda::ESProduct product_; +#endif +}; + +#endif diff --git a/CondFormats/HcalObjects/interface/HcalPedestalsGPU.h b/CondFormats/HcalObjects/interface/HcalPedestalsGPU.h new file mode 100644 index 0000000000000..957f6f88ef2fa --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalPedestalsGPU.h @@ -0,0 +1,46 @@ +#ifndef CondFormats_HcalObjects_interface_HcalPedestalsGPU_h +#define CondFormats_HcalObjects_interface_HcalPedestalsGPU_h + +#include "CondFormats/HcalObjects/interface/HcalPedestals.h" +#include "FWCore/Utilities/interface/propagate_const_array.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalPedestalsGPU { +public: + struct Product { + edm::propagate_const_array> values; + edm::propagate_const_array> widths; + }; + +#ifndef __CUDACC__ + // rearrange reco params + HcalPedestalsGPU(HcalPedestals const &); + + // will trigger deallocation of Product thru ~Product + ~HcalPedestalsGPU() = default; + + // get device pointers + Product const &getProduct(cudaStream_t) const; + + // as in cpu version + bool unitIsADC() const { return unitIsADC_; } + + uint32_t offsetForHashes() const { return offsetForHashes_; } + +private: + bool unitIsADC_; + uint64_t totalChannels_; + uint32_t offsetForHashes_; + std::vector> values_; + std::vector> widths_; + + cms::cuda::ESProduct product_; +#endif +}; + +#endif diff --git a/CondFormats/HcalObjects/interface/HcalQIECodersGPU.h b/CondFormats/HcalObjects/interface/HcalQIECodersGPU.h new file mode 100644 index 0000000000000..0ed389f9c9cca --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalQIECodersGPU.h @@ -0,0 +1,41 @@ +#ifndef CondFormats_HcalObjects_interface_HcalQIECodersGPU_h +#define CondFormats_HcalObjects_interface_HcalQIECodersGPU_h + +#include "CondFormats/HcalObjects/interface/HcalQIEData.h" +#include "FWCore/Utilities/interface/propagate_const_array.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalQIECodersGPU { +public: + static constexpr uint32_t numValuesPerChannel = 16; + + struct Product { + edm::propagate_const_array> offsets; + edm::propagate_const_array> slopes; + }; + +#ifndef __CUDACC__ + // rearrange reco params + HcalQIECodersGPU(HcalQIEData const &); + + // will trigger deallocation of Product thru ~Product + ~HcalQIECodersGPU() = default; + + // get device pointers + Product const &getProduct(cudaStream_t) const; + +private: + uint64_t totalChannels_; + std::vector> offsets_; + std::vector> slopes_; + + cms::cuda::ESProduct product_; +#endif +}; + +#endif diff --git a/CondFormats/HcalObjects/interface/HcalQIETypesGPU.h b/CondFormats/HcalObjects/interface/HcalQIETypesGPU.h new file mode 100644 index 0000000000000..cdb49764c9145 --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalQIETypesGPU.h @@ -0,0 +1,36 @@ +#ifndef CondFormats_HcalObjects_interface_HcalQIETypesGPU_h +#define CondFormats_HcalObjects_interface_HcalQIETypesGPU_h + +#include "CondFormats/HcalObjects/interface/HcalQIETypes.h" +#include "FWCore/Utilities/interface/propagate_const_array.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalQIETypesGPU { +public: + struct Product { + edm::propagate_const_array> values; + }; + +#ifndef __CUDACC__ + // rearrange reco params + HcalQIETypesGPU(HcalQIETypes const&); + + // will trigger deallocation of Product thru ~Product + ~HcalQIETypesGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + +private: + std::vector> values_; + + cms::cuda::ESProduct product_; +#endif +}; + +#endif diff --git a/CondFormats/HcalObjects/interface/HcalRecoParamsGPU.h b/CondFormats/HcalObjects/interface/HcalRecoParamsGPU.h new file mode 100644 index 0000000000000..f85d26a431ebb --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalRecoParamsGPU.h @@ -0,0 +1,40 @@ +#ifndef CondFormats_HcalObjects_interface_HcalRecoParamsGPU_h +#define CondFormats_HcalObjects_interface_HcalRecoParamsGPU_h + +#include "FWCore/Utilities/interface/propagate_const_array.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalRecoParams; + +class HcalRecoParamsGPU { +public: + struct Product { + edm::propagate_const_array> param1; + edm::propagate_const_array> param2; + }; + +#ifndef __CUDACC__ + // rearrange reco params + HcalRecoParamsGPU(HcalRecoParams const&); + + // will trigger deallocation of Product thru ~Product + ~HcalRecoParamsGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + +private: + uint64_t totalChannels_; // hb + he + std::vector> param1_; + std::vector> param2_; + + cms::cuda::ESProduct product_; +#endif +}; + +#endif diff --git a/CondFormats/HcalObjects/interface/HcalRespCorrsGPU.h b/CondFormats/HcalObjects/interface/HcalRespCorrsGPU.h new file mode 100644 index 0000000000000..6bc570ab52575 --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalRespCorrsGPU.h @@ -0,0 +1,36 @@ +#ifndef CondFormats_HcalObjects_interface_HcalRespCorrsGPU_h +#define CondFormats_HcalObjects_interface_HcalRespCorrsGPU_h + +#include "CondFormats/HcalObjects/interface/HcalRespCorrs.h" +#include "FWCore/Utilities/interface/propagate_const_array.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalRespCorrsGPU { +public: + struct Product { + edm::propagate_const_array> values; + }; + +#ifndef __CUDACC__ + // rearrange reco params + HcalRespCorrsGPU(HcalRespCorrs const&); + + // will trigger deallocation of Product thru ~Product + ~HcalRespCorrsGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + +private: + std::vector> values_; + + cms::cuda::ESProduct product_; +#endif +}; + +#endif diff --git a/CondFormats/HcalObjects/interface/HcalSiPMCharacteristicsGPU.h b/CondFormats/HcalObjects/interface/HcalSiPMCharacteristicsGPU.h new file mode 100644 index 0000000000000..9615d8011a256 --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalSiPMCharacteristicsGPU.h @@ -0,0 +1,43 @@ +#ifndef CondFormats_HcalObjects_interface_HcalSiPMCharacteristicsGPU_h +#define CondFormats_HcalObjects_interface_HcalSiPMCharacteristicsGPU_h + +#include "CondFormats/HcalObjects/interface/HcalSiPMCharacteristics.h" +#include "FWCore/Utilities/interface/propagate_const_array.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalSiPMCharacteristicsGPU { +public: + struct Product { + edm::propagate_const_array> pixels; + edm::propagate_const_array> parLin1; + edm::propagate_const_array> parLin2; + edm::propagate_const_array> parLin3; + edm::propagate_const_array> crossTalk; + edm::propagate_const_array> auxi1; + edm::propagate_const_array> auxi2; + }; + +#ifndef __CUDACC__ + // rearrange reco params + HcalSiPMCharacteristicsGPU(HcalSiPMCharacteristics const &); + + // will trigger deallocation of Product thru ~Product + ~HcalSiPMCharacteristicsGPU() = default; + + // get device pointers + Product const &getProduct(cudaStream_t) const; + +private: + std::vector> pixels_, auxi1_; + std::vector> parLin1_, parLin2_, parLin3_, crossTalk_, auxi2_; + + cms::cuda::ESProduct product_; +#endif +}; + +#endif diff --git a/CondFormats/HcalObjects/interface/HcalSiPMParametersGPU.h b/CondFormats/HcalObjects/interface/HcalSiPMParametersGPU.h new file mode 100644 index 0000000000000..10a69f70defa2 --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalSiPMParametersGPU.h @@ -0,0 +1,42 @@ +#ifndef CondFormats_HcalObjects_interface_HcalSiPMParametersGPU_h +#define CondFormats_HcalObjects_interface_HcalSiPMParametersGPU_h + +#include "CondFormats/HcalObjects/interface/HcalSiPMParameters.h" +#include "FWCore/Utilities/interface/propagate_const_array.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalSiPMParametersGPU { +public: + struct Product { + edm::propagate_const_array> type; + edm::propagate_const_array> auxi1; + edm::propagate_const_array> fcByPE; + edm::propagate_const_array> darkCurrent; + edm::propagate_const_array> auxi2; + }; + +#ifndef __CUDACC__ + // rearrange reco params + HcalSiPMParametersGPU(HcalSiPMParameters const &); + + // will trigger deallocation of Product thru ~Product + ~HcalSiPMParametersGPU() = default; + + // get device pointers + Product const &getProduct(cudaStream_t) const; + +private: + uint64_t totalChannels_; + std::vector> type_, auxi1_; + std::vector> fcByPE_, darkCurrent_, auxi2_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_HcalRecAlgos_interface_HcalSiPMParametersGPU_h diff --git a/CondFormats/HcalObjects/interface/HcalTimeCorrsGPU.h b/CondFormats/HcalObjects/interface/HcalTimeCorrsGPU.h new file mode 100644 index 0000000000000..bac5be06198d4 --- /dev/null +++ b/CondFormats/HcalObjects/interface/HcalTimeCorrsGPU.h @@ -0,0 +1,36 @@ +#ifndef CondFormats_HcalObjects_interface_HcalTimeCorrsGPU_h +#define CondFormats_HcalObjects_interface_HcalTimeCorrsGPU_h + +#include "CondFormats/HcalObjects/interface/HcalTimeCorrs.h" +#include "FWCore/Utilities/interface/propagate_const_array.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalTimeCorrsGPU { +public: + struct Product { + edm::propagate_const_array> value; + }; + +#ifndef __CUDACC__ + // rearrange reco params + HcalTimeCorrsGPU(HcalTimeCorrs const&); + + // will trigger deallocation of Product thru ~Product + ~HcalTimeCorrsGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + +private: + std::vector> value_; + + cms::cuda::ESProduct product_; +#endif +}; + +#endif diff --git a/CondFormats/HcalObjects/src/HcalConvertedEffectivePedestalWidthsGPU.cc b/CondFormats/HcalObjects/src/HcalConvertedEffectivePedestalWidthsGPU.cc new file mode 100644 index 0000000000000..dfc9a9e099ea1 --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalConvertedEffectivePedestalWidthsGPU.cc @@ -0,0 +1,4 @@ +#include "CondFormats/HcalObjects/interface/HcalConvertedEffectivePedestalWidthsGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +TYPELOOKUP_DATA_REG(HcalConvertedEffectivePedestalWidthsGPU); diff --git a/CondFormats/HcalObjects/src/HcalConvertedEffectivePedestalsGPU.cc b/CondFormats/HcalObjects/src/HcalConvertedEffectivePedestalsGPU.cc new file mode 100644 index 0000000000000..92cb76edc6d6f --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalConvertedEffectivePedestalsGPU.cc @@ -0,0 +1,4 @@ +#include "CondFormats/HcalObjects/interface/HcalConvertedEffectivePedestalsGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +TYPELOOKUP_DATA_REG(HcalConvertedEffectivePedestalsGPU); diff --git a/CondFormats/HcalObjects/src/HcalConvertedPedestalWidthsGPU.cc b/CondFormats/HcalObjects/src/HcalConvertedPedestalWidthsGPU.cc new file mode 100644 index 0000000000000..c03bef2e3439b --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalConvertedPedestalWidthsGPU.cc @@ -0,0 +1,150 @@ +#include + +#include "CondFormats/HcalObjects/interface/HcalConvertedPedestalWidthsGPU.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +namespace { + float convert( + float const value, float const width, int const i, HcalQIECoder const& coder, HcalQIEShape const& shape) { + float const y = value; + float const x = width; + unsigned const x1 = static_cast(std::floor(y)); + unsigned const x2 = static_cast(std::floor(y + 1.)); + unsigned iun = static_cast(i); + float const y1 = coder.charge(shape, x1, iun); + float const y2 = coder.charge(shape, x2, iun); + return (y2 - y1) * x; + } +} // namespace + +// FIXME: add proper getters to conditions +HcalConvertedPedestalWidthsGPU::HcalConvertedPedestalWidthsGPU(HcalPedestals const& pedestals, + HcalPedestalWidths const& pedestalWidths, + HcalQIEData const& qieData, + HcalQIETypes const& qieTypes) + : totalChannels_{pedestals.getAllContainers()[0].second.size() + pedestals.getAllContainers()[1].second.size()}, + values_(totalChannels_ * 4) { +#ifdef HCAL_MAHI_CPUDEBUG + std::cout << "hello from converted pedestal widths" << std::endl; + std::cout << "pedestals HB values = " << pedestals.getAllContainers()[0].second.size() + << " HE values = " << pedestals.getAllContainers()[1].second.size() << std::endl; + std::cout << "qiedata HB values = " << qieData.getAllContainers()[0].second.size() + << " HE values = " << qieData.getAllContainers()[1].second.size() << std::endl; +#endif + + // retrieve all collections + auto const pedestalsAll = pedestals.getAllContainers(); + auto const pedestalWidthsAll = pedestalWidths.getAllContainers(); + auto const qieDataAll = qieData.getAllContainers(); + auto const qieTypesAll = qieTypes.getAllContainers(); + + // have to convert to fc if stored in adc + auto const unitIsADC = pedestals.isADC(); + + // fill in barrel + auto const& pedestalBarrelValues = pedestalsAll[0].second; + auto const& pedestalWidthBarrelValues = pedestalWidthsAll[0].second; + auto const& qieDataBarrelValues = qieDataAll[0].second; + auto const& qieTypesBarrelValues = qieTypesAll[0].second; + +#ifdef HCAL_MAHI_CPUDEBUG + assert(pedestalWidthBarrelValues.size() == pedestalBarrelValues.size()); + assert(pedestalBarrelValues.size() == qieDataBarrelValues.size()); + assert(pedestalBarrelValues.size() == qieTypesBarrelValues.size()); +#endif + + for (uint64_t i = 0; i < pedestalBarrelValues.size(); ++i) { + auto const& qieCoder = qieDataBarrelValues[i]; + auto const qieType = qieTypesBarrelValues[i].getValue() > 1 ? 1 : 0; + auto const& qieShape = qieData.getShape(qieType); + + values_[i * 4] = + unitIsADC + ? convert( + pedestalBarrelValues[i].getValue(0), pedestalWidthBarrelValues[i].getWidth(0), 0, qieCoder, qieShape) + : pedestalWidthBarrelValues[i].getWidth(0); + values_[i * 4 + 1] = + unitIsADC + ? convert( + pedestalBarrelValues[i].getValue(1), pedestalWidthBarrelValues[i].getWidth(1), 1, qieCoder, qieShape) + : pedestalWidthBarrelValues[i].getWidth(1); + values_[i * 4 + 2] = + unitIsADC + ? convert( + pedestalBarrelValues[i].getValue(2), pedestalWidthBarrelValues[i].getWidth(2), 2, qieCoder, qieShape) + : pedestalWidthBarrelValues[i].getWidth(2); + values_[i * 4 + 3] = + unitIsADC + ? convert( + pedestalBarrelValues[i].getValue(3), pedestalWidthBarrelValues[i].getWidth(3), 3, qieCoder, qieShape) + : pedestalWidthBarrelValues[i].getWidth(3); + } + + // fill in endcap + auto const& pedestalEndcapValues = pedestalsAll[1].second; + auto const& pedestalWidthEndcapValues = pedestalWidthsAll[1].second; + auto const& qieDataEndcapValues = qieDataAll[1].second; + auto const& qieTypesEndcapValues = qieTypesAll[1].second; + +#ifdef HCAL_MAHI_CPUDEBUG + assert(pedestalWidthEndcapValues.size() == pedestalEndcapValues.size()); + assert(pedestalEndcapValues.size() == qieDataEndcapValues.size()); + assert(pedestalEndcapValues.size() == qieTypesEndcapValues.size()); +#endif + + auto const offset = pedestalWidthBarrelValues.size(); + for (uint64_t i = 0; i < pedestalEndcapValues.size(); ++i) { + auto const& qieCoder = qieDataEndcapValues[i]; + auto const qieType = qieTypesEndcapValues[i].getValue() > 1 ? 1 : 0; + auto const& qieShape = qieData.getShape(qieType); + auto const off = offset + i; + + values_[off * 4] = + unitIsADC + ? convert( + pedestalEndcapValues[i].getValue(0), pedestalWidthEndcapValues[i].getWidth(0), 0, qieCoder, qieShape) + : pedestalWidthEndcapValues[i].getWidth(0); + values_[off * 4 + 1] = + unitIsADC + ? convert( + pedestalEndcapValues[i].getValue(1), pedestalWidthEndcapValues[i].getWidth(1), 1, qieCoder, qieShape) + : pedestalWidthEndcapValues[i].getWidth(1); + values_[off * 4 + 2] = + unitIsADC + ? convert( + pedestalEndcapValues[i].getValue(2), pedestalWidthEndcapValues[i].getWidth(2), 2, qieCoder, qieShape) + : pedestalWidthEndcapValues[i].getWidth(2); + values_[off * 4 + 3] = + unitIsADC + ? convert( + pedestalEndcapValues[i].getValue(3), pedestalWidthEndcapValues[i].getWidth(3), 3, qieCoder, qieShape) + : pedestalWidthEndcapValues[i].getWidth(3); + +#ifdef HCAL_MAHI_CPUDEBUG + if (pedestalEndcapValues[i].rawId() == DETID_TO_DEBUG) { + for (int i = 0; i < 4; i++) + printf("pedestalWidth(%d) = %f original pedestalWidth(%d) = %f\n", + i, + values_[off * 4 + i], + i, + pedestalWidthEndcapValues[i].getWidth(3)); + } +#endif + } +} + +HcalConvertedPedestalWidthsGPU::Product const& HcalConvertedPedestalWidthsGPU::getProduct(cudaStream_t stream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + stream, [this](HcalConvertedPedestalWidthsGPU::Product& product, cudaStream_t stream) { + // allocate + product.values = cms::cuda::make_device_unique(values_.size(), stream); + + // transfer + cms::cuda::copyAsync(product.values, values_, stream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalConvertedPedestalWidthsGPU); diff --git a/CondFormats/HcalObjects/src/HcalConvertedPedestalsGPU.cc b/CondFormats/HcalObjects/src/HcalConvertedPedestalsGPU.cc new file mode 100644 index 0000000000000..5d44f1fd6bd2e --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalConvertedPedestalsGPU.cc @@ -0,0 +1,122 @@ +#include + +#include "CondFormats/HcalObjects/interface/HcalConvertedPedestalsGPU.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +namespace { + float convert(float const x, int const i, HcalQIECoder const& coder, HcalQIEShape const& shape) { + int const x1 = static_cast(std::floor(x)); + int const x2 = static_cast(std::floor(x + 1)); + float const y2 = coder.charge(shape, x2, i); + float const y1 = coder.charge(shape, x1, i); + return (y2 - y1) * (x - x1) + y1; + } +} // namespace + +// FIXME: add proper getters to conditions +HcalConvertedPedestalsGPU::HcalConvertedPedestalsGPU(HcalPedestals const& pedestals, + HcalQIEData const& qieData, + HcalQIETypes const& qieTypes) + : totalChannels_{pedestals.getAllContainers()[0].second.size() + pedestals.getAllContainers()[1].second.size()}, + offsetForHashes_{static_cast(pedestals.getAllContainers()[0].second.size())}, + values_(totalChannels_ * 4) { +#ifdef HCAL_MAHI_CPUDEBUG + std::cout << "hello from converted pedestals" << std::endl; + std::cout << "pedestals HB values = " << pedestals.getAllContainers()[0].second.size() + << " HE values = " << pedestals.getAllContainers()[1].second.size() << std::endl; + std::cout << "qiedata HB values = " << qieData.getAllContainers()[0].second.size() + << " HE values = " << qieData.getAllContainers()[1].second.size() << std::endl; +#endif + + // retrieve all collections + auto const pedestalsAll = pedestals.getAllContainers(); + auto const qieDataAll = qieData.getAllContainers(); + auto const qieTypesAll = qieTypes.getAllContainers(); + + // have to convert to fc if stored in adc + auto const unitIsADC = pedestals.isADC(); + + // fill in barrel + auto const& pedestalBarrelValues = pedestalsAll[0].second; + auto const& qieDataBarrelValues = qieDataAll[0].second; + auto const& qieTypesBarrelValues = qieTypesAll[0].second; + +#ifdef HCAL_MAHI_CPUDEBUG + assert(pedestalBarrelValues.size() == qieDataBarrelValues.size()); + assert(pedestalBarrelValues.size() == qieTypesBarrelValues.size()); +#endif + + for (uint64_t i = 0; i < pedestalBarrelValues.size(); ++i) { + auto const& qieCoder = qieDataBarrelValues[i]; + auto const qieType = qieTypesBarrelValues[i].getValue() > 1 ? 1 : 0; + auto const& qieShape = qieData.getShape(qieType); + + values_[i * 4] = unitIsADC ? convert(pedestalBarrelValues[i].getValue(0), 0, qieCoder, qieShape) + : pedestalBarrelValues[i].getValue(0); + values_[i * 4 + 1] = unitIsADC ? convert(pedestalBarrelValues[i].getValue(1), 1, qieCoder, qieShape) + : pedestalBarrelValues[i].getValue(1); + values_[i * 4 + 2] = unitIsADC ? convert(pedestalBarrelValues[i].getValue(2), 2, qieCoder, qieShape) + : pedestalBarrelValues[i].getValue(2); + values_[i * 4 + 3] = unitIsADC ? convert(pedestalBarrelValues[i].getValue(3), 3, qieCoder, qieShape) + : pedestalBarrelValues[i].getValue(3); + } + + // fill in endcap + auto const& pedestalEndcapValues = pedestalsAll[1].second; + auto const& qieDataEndcapValues = qieDataAll[1].second; + auto const& qieTypesEndcapValues = qieTypesAll[1].second; + +#ifdef HCAL_MAHI_CPUDEBUG + assert(pedestalEndcapValues.size() == qieDataEndcapValues.size()); + assert(pedestalEndcapValues.size() == qieTypesEndcapValues.size()); +#endif + + auto const offset = pedestalBarrelValues.size(); + for (uint64_t i = 0; i < pedestalEndcapValues.size(); ++i) { + auto const& qieCoder = qieDataEndcapValues[i]; + auto const qieType = qieTypesEndcapValues[i].getValue() > 1 ? 1 : 0; + auto const& qieShape = qieData.getShape(qieType); + auto const off = offset + i; + + values_[off * 4] = unitIsADC ? convert(pedestalEndcapValues[i].getValue(0), 0, qieCoder, qieShape) + : pedestalEndcapValues[i].getValue(0); + values_[off * 4 + 1] = unitIsADC ? convert(pedestalEndcapValues[i].getValue(1), 1, qieCoder, qieShape) + : pedestalEndcapValues[i].getValue(1); + values_[off * 4 + 2] = unitIsADC ? convert(pedestalEndcapValues[i].getValue(2), 2, qieCoder, qieShape) + : pedestalEndcapValues[i].getValue(2); + values_[off * 4 + 3] = unitIsADC ? convert(pedestalEndcapValues[i].getValue(3), 3, qieCoder, qieShape) + : pedestalEndcapValues[i].getValue(3); + +#ifdef HCAL_MAHI_CPUDEBUG + if (pedestalEndcapValues[i].rawId() == DETID_TO_DEBUG) { + printf("qietype = %d\n", qieType); + printf("ped0 = %f ped1 = %f ped2 = %f ped3 = %f\n", + pedestalEndcapValues[i].getValue(0), + pedestalEndcapValues[i].getValue(1), + pedestalEndcapValues[i].getValue(2), + pedestalEndcapValues[i].getValue(3)); + printf("converted: ped0 = %f ped1 = %f ped2 = %f ped3 = %f\n", + values_[off * 4], + values_[off * 4 + 1], + values_[off * 4 + 2], + values_[off * 4 + 3]); + } +#endif + } +} + +HcalConvertedPedestalsGPU::Product const& HcalConvertedPedestalsGPU::getProduct(cudaStream_t stream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + stream, [this](HcalConvertedPedestalsGPU::Product& product, cudaStream_t stream) { + // allocate + product.values = cms::cuda::make_device_unique(values_.size(), stream); + + // transfer + cms::cuda::copyAsync(product.values, values_, stream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalConvertedPedestalsGPU); diff --git a/CondFormats/HcalObjects/src/HcalGainWidthsGPU.cc b/CondFormats/HcalObjects/src/HcalGainWidthsGPU.cc new file mode 100644 index 0000000000000..fc86ce24b8e2c --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalGainWidthsGPU.cc @@ -0,0 +1,54 @@ +#include "CondFormats/HcalObjects/interface/HcalGainWidths.h" +#include "CondFormats/HcalObjects/interface/HcalGainWidthsGPU.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +// FIXME: add proper getters to conditions +HcalGainWidthsGPU::HcalGainWidthsGPU(HcalGainWidths const& gains) + : totalChannels_{gains.getAllContainers()[0].second.size() + gains.getAllContainers()[1].second.size()}, + value0_(totalChannels_), + value1_(totalChannels_), + value2_(totalChannels_), + value3_(totalChannels_) { + auto const gainContainers = gains.getAllContainers(); + + // fill in eb + auto const& barrelValues = gainContainers[0].second; + for (uint64_t i = 0; i < barrelValues.size(); ++i) { + value0_[i] = barrelValues[i].getValue(0); + value1_[i] = barrelValues[i].getValue(1); + value2_[i] = barrelValues[i].getValue(2); + value3_[i] = barrelValues[i].getValue(3); + } + + // fill in ee + auto const& endcapValues = gainContainers[1].second; + auto const offset = barrelValues.size(); + for (uint64_t i = 0; i < endcapValues.size(); ++i) { + value0_[i + offset] = endcapValues[i].getValue(0); + value1_[i + offset] = endcapValues[i].getValue(1); + value2_[i + offset] = endcapValues[i].getValue(2); + value3_[i + offset] = endcapValues[i].getValue(3); + } +} + +HcalGainWidthsGPU::Product const& HcalGainWidthsGPU::getProduct(cudaStream_t stream) const { + auto const& product = + product_.dataForCurrentDeviceAsync(stream, [this](HcalGainWidthsGPU::Product& product, cudaStream_t stream) { + // allocate + product.value0 = cms::cuda::make_device_unique(value0_.size(), stream); + product.value1 = cms::cuda::make_device_unique(value1_.size(), stream); + product.value2 = cms::cuda::make_device_unique(value2_.size(), stream); + product.value3 = cms::cuda::make_device_unique(value3_.size(), stream); + + // transfer + cms::cuda::copyAsync(product.value0, value0_, stream); + cms::cuda::copyAsync(product.value1, value1_, stream); + cms::cuda::copyAsync(product.value2, value2_, stream); + cms::cuda::copyAsync(product.value3, value3_, stream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalGainWidthsGPU); diff --git a/CondFormats/HcalObjects/src/HcalGainsGPU.cc b/CondFormats/HcalObjects/src/HcalGainsGPU.cc new file mode 100644 index 0000000000000..27f7d548aa7b2 --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalGainsGPU.cc @@ -0,0 +1,46 @@ +#include "CondFormats/HcalObjects/interface/HcalGains.h" +#include "CondFormats/HcalObjects/interface/HcalGainsGPU.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +// FIXME: add proper getters to conditions +HcalGainsGPU::HcalGainsGPU(HcalGains const& gains) + : totalChannels_{gains.getAllContainers()[0].second.size() + gains.getAllContainers()[1].second.size()}, + values_(totalChannels_ * 4) { + auto const gainContainers = gains.getAllContainers(); + + // fill in eb + auto const& barrelValues = gainContainers[0].second; + for (uint64_t i = 0; i < barrelValues.size(); ++i) { + values_[i * 4] = barrelValues[i].getValue(0); + values_[i * 4 + 1] = barrelValues[i].getValue(1); + values_[i * 4 + 2] = barrelValues[i].getValue(2); + values_[i * 4 + 3] = barrelValues[i].getValue(3); + } + + // fill in ee + auto const& endcapValues = gainContainers[1].second; + auto const offset = barrelValues.size(); + for (uint64_t i = 0; i < endcapValues.size(); ++i) { + auto const off = offset + i; + values_[off * 4] = endcapValues[i].getValue(0); + values_[off * 4 + 1] = endcapValues[i].getValue(1); + values_[off * 4 + 2] = endcapValues[i].getValue(2); + values_[off * 4 + 3] = endcapValues[i].getValue(3); + } +} + +HcalGainsGPU::Product const& HcalGainsGPU::getProduct(cudaStream_t stream) const { + auto const& product = + product_.dataForCurrentDeviceAsync(stream, [this](HcalGainsGPU::Product& product, cudaStream_t stream) { + // allocate + product.values = cms::cuda::make_device_unique(values_.size(), stream); + + // transfer + cms::cuda::copyAsync(product.values, values_, stream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalGainsGPU); diff --git a/CondFormats/HcalObjects/src/HcalLUTCorrsGPU.cc b/CondFormats/HcalObjects/src/HcalLUTCorrsGPU.cc new file mode 100644 index 0000000000000..889125e92783b --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalLUTCorrsGPU.cc @@ -0,0 +1,38 @@ +#include "CondFormats/HcalObjects/interface/HcalLUTCorrs.h" +#include "CondFormats/HcalObjects/interface/HcalLUTCorrsGPU.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +// FIXME: add proper getters to conditions +HcalLUTCorrsGPU::HcalLUTCorrsGPU(HcalLUTCorrs const& lutcorrs) + : value_(lutcorrs.getAllContainers()[0].second.size() + lutcorrs.getAllContainers()[1].second.size()) { + auto const containers = lutcorrs.getAllContainers(); + + // fill in eb + auto const& barrelValues = containers[0].second; + for (uint64_t i = 0; i < barrelValues.size(); ++i) { + value_[i] = barrelValues[i].getValue(); + } + + // fill in ee + auto const& endcapValues = containers[1].second; + auto const offset = barrelValues.size(); + for (uint64_t i = 0; i < endcapValues.size(); ++i) { + value_[i + offset] = endcapValues[i].getValue(); + } +} + +HcalLUTCorrsGPU::Product const& HcalLUTCorrsGPU::getProduct(cudaStream_t stream) const { + auto const& product = + product_.dataForCurrentDeviceAsync(stream, [this](HcalLUTCorrsGPU::Product& product, cudaStream_t stream) { + // allocate + product.value = cms::cuda::make_device_unique(value_.size(), stream); + + // transfer + cms::cuda::copyAsync(product.value, value_, stream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalLUTCorrsGPU); diff --git a/CondFormats/HcalObjects/src/HcalPedestalWidthsGPU.cc b/CondFormats/HcalObjects/src/HcalPedestalWidthsGPU.cc new file mode 100644 index 0000000000000..5e006aba764f8 --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalPedestalWidthsGPU.cc @@ -0,0 +1,121 @@ +#include "CondFormats/HcalObjects/interface/HcalPedestalWidths.h" +#include "CondFormats/HcalObjects/interface/HcalPedestalWidthsGPU.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +// FIXME: add proper getters to conditions +HcalPedestalWidthsGPU::HcalPedestalWidthsGPU(HcalPedestalWidths const& pedestals) + : unitIsADC_{pedestals.isADC()}, + totalChannels_{pedestals.getAllContainers()[0].second.size() + pedestals.getAllContainers()[1].second.size()}, + sigma00_(totalChannels_), + sigma01_(totalChannels_), + sigma02_(totalChannels_), + sigma03_(totalChannels_), + sigma10_(totalChannels_), + sigma11_(totalChannels_), + sigma12_(totalChannels_), + sigma13_(totalChannels_), + sigma20_(totalChannels_), + sigma21_(totalChannels_), + sigma22_(totalChannels_), + sigma23_(totalChannels_), + sigma30_(totalChannels_), + sigma31_(totalChannels_), + sigma32_(totalChannels_), + sigma33_(totalChannels_) { + auto const containers = pedestals.getAllContainers(); + + // fill in hb + auto const& barrelValues = containers[0].second; + for (uint64_t i = 0; i < barrelValues.size(); ++i) { + sigma00_[i] = *(barrelValues[i].getValues() /* + 0 */); + sigma01_[i] = *(barrelValues[i].getValues() + 1); + sigma02_[i] = *(barrelValues[i].getValues() + 2); + sigma03_[i] = *(barrelValues[i].getValues() + 3); + sigma10_[i] = *(barrelValues[i].getValues() + 3); + sigma11_[i] = *(barrelValues[i].getValues() + 5); + sigma12_[i] = *(barrelValues[i].getValues() + 6); + sigma13_[i] = *(barrelValues[i].getValues() + 7); + sigma20_[i] = *(barrelValues[i].getValues() + 8); + sigma21_[i] = *(barrelValues[i].getValues() + 9); + sigma22_[i] = *(barrelValues[i].getValues() + 10); + sigma23_[i] = *(barrelValues[i].getValues() + 11); + sigma30_[i] = *(barrelValues[i].getValues() + 12); + sigma31_[i] = *(barrelValues[i].getValues() + 13); + sigma32_[i] = *(barrelValues[i].getValues() + 14); + sigma33_[i] = *(barrelValues[i].getValues() + 15); + } + + // fill in he + auto const& endcapValues = containers[1].second; + auto const offset = barrelValues.size(); + for (uint64_t i = 0; i < endcapValues.size(); ++i) { + sigma00_[i + offset] = *(endcapValues[i].getValues() /* + 0 */); + sigma01_[i + offset] = *(endcapValues[i].getValues() + 1); + sigma02_[i + offset] = *(endcapValues[i].getValues() + 2); + sigma03_[i + offset] = *(endcapValues[i].getValues() + 3); + sigma10_[i + offset] = *(endcapValues[i].getValues() + 3); + sigma11_[i + offset] = *(endcapValues[i].getValues() + 5); + sigma12_[i + offset] = *(endcapValues[i].getValues() + 6); + sigma13_[i + offset] = *(endcapValues[i].getValues() + 7); + sigma20_[i + offset] = *(endcapValues[i].getValues() + 8); + sigma21_[i + offset] = *(endcapValues[i].getValues() + 9); + sigma22_[i + offset] = *(endcapValues[i].getValues() + 10); + sigma23_[i + offset] = *(endcapValues[i].getValues() + 11); + sigma30_[i + offset] = *(endcapValues[i].getValues() + 12); + sigma31_[i + offset] = *(endcapValues[i].getValues() + 13); + sigma32_[i + offset] = *(endcapValues[i].getValues() + 14); + sigma33_[i + offset] = *(endcapValues[i].getValues() + 15); + } +} + +HcalPedestalWidthsGPU::Product const& HcalPedestalWidthsGPU::getProduct(cudaStream_t stream) const { + auto const& product = + product_.dataForCurrentDeviceAsync(stream, [this](HcalPedestalWidthsGPU::Product& product, cudaStream_t stream) { + // allocate + product.sigma00 = cms::cuda::make_device_unique(sigma00_.size(), stream); + product.sigma01 = cms::cuda::make_device_unique(sigma01_.size(), stream); + product.sigma02 = cms::cuda::make_device_unique(sigma02_.size(), stream); + product.sigma03 = cms::cuda::make_device_unique(sigma03_.size(), stream); + + product.sigma10 = cms::cuda::make_device_unique(sigma10_.size(), stream); + product.sigma11 = cms::cuda::make_device_unique(sigma11_.size(), stream); + product.sigma12 = cms::cuda::make_device_unique(sigma12_.size(), stream); + product.sigma13 = cms::cuda::make_device_unique(sigma13_.size(), stream); + + product.sigma20 = cms::cuda::make_device_unique(sigma20_.size(), stream); + product.sigma21 = cms::cuda::make_device_unique(sigma21_.size(), stream); + product.sigma22 = cms::cuda::make_device_unique(sigma22_.size(), stream); + product.sigma23 = cms::cuda::make_device_unique(sigma23_.size(), stream); + + product.sigma30 = cms::cuda::make_device_unique(sigma30_.size(), stream); + product.sigma31 = cms::cuda::make_device_unique(sigma31_.size(), stream); + product.sigma32 = cms::cuda::make_device_unique(sigma32_.size(), stream); + product.sigma33 = cms::cuda::make_device_unique(sigma33_.size(), stream); + + // transfer + cms::cuda::copyAsync(product.sigma00, sigma00_, stream); + cms::cuda::copyAsync(product.sigma01, sigma01_, stream); + cms::cuda::copyAsync(product.sigma02, sigma02_, stream); + cms::cuda::copyAsync(product.sigma03, sigma03_, stream); + + cms::cuda::copyAsync(product.sigma10, sigma10_, stream); + cms::cuda::copyAsync(product.sigma11, sigma11_, stream); + cms::cuda::copyAsync(product.sigma12, sigma12_, stream); + cms::cuda::copyAsync(product.sigma13, sigma13_, stream); + + cms::cuda::copyAsync(product.sigma20, sigma20_, stream); + cms::cuda::copyAsync(product.sigma21, sigma21_, stream); + cms::cuda::copyAsync(product.sigma22, sigma22_, stream); + cms::cuda::copyAsync(product.sigma23, sigma23_, stream); + + cms::cuda::copyAsync(product.sigma30, sigma30_, stream); + cms::cuda::copyAsync(product.sigma31, sigma31_, stream); + cms::cuda::copyAsync(product.sigma32, sigma32_, stream); + cms::cuda::copyAsync(product.sigma33, sigma33_, stream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalPedestalWidthsGPU); diff --git a/CondFormats/HcalObjects/src/HcalPedestalsGPU.cc b/CondFormats/HcalObjects/src/HcalPedestalsGPU.cc new file mode 100644 index 0000000000000..57088a4f39621 --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalPedestalsGPU.cc @@ -0,0 +1,65 @@ +#include "CondFormats/HcalObjects/interface/HcalPedestals.h" +#include "CondFormats/HcalObjects/interface/HcalPedestalsGPU.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +// FIXME: add proper getters to conditions +HcalPedestalsGPU::HcalPedestalsGPU(HcalPedestals const& pedestals) + : unitIsADC_{pedestals.isADC()}, + totalChannels_{pedestals.getAllContainers()[0].second.size() + pedestals.getAllContainers()[1].second.size()}, + offsetForHashes_{static_cast(pedestals.getAllContainers()[0].second.size())}, + values_(totalChannels_ * 4), + widths_(totalChannels_ * 4) { +#ifdef HCAL_MAHI_CPUDEBUG + std::cout << "unitIsADC = " << unitIsADC_ << std::endl; +#endif + + auto const containers = pedestals.getAllContainers(); + + // fill in eb + auto const& barrelValues = containers[0].second; + for (uint64_t i = 0; i < barrelValues.size(); ++i) { + values_[i * 4] = barrelValues[i].getValue(0); + values_[i * 4 + 1] = barrelValues[i].getValue(1); + values_[i * 4 + 2] = barrelValues[i].getValue(2); + values_[i * 4 + 3] = barrelValues[i].getValue(3); + + widths_[i * 4] = barrelValues[i].getWidth(0); + widths_[i * 4 + 1] = barrelValues[i].getWidth(1); + widths_[i * 4 + 2] = barrelValues[i].getWidth(2); + widths_[i * 4 + 3] = barrelValues[i].getWidth(3); + } + + // fill in ee + auto const& endcapValues = containers[1].second; + auto const offset = barrelValues.size(); + for (uint64_t i = 0; i < endcapValues.size(); ++i) { + auto const off = offset + i; + values_[off * 4] = endcapValues[i].getValue(0); + values_[off * 4 + 1] = endcapValues[i].getValue(1); + values_[off * 4 + 2] = endcapValues[i].getValue(2); + values_[off * 4 + 3] = endcapValues[i].getValue(3); + + widths_[off * 4] = endcapValues[i].getWidth(0); + widths_[off * 4 + 1] = endcapValues[i].getWidth(1); + widths_[off * 4 + 2] = endcapValues[i].getWidth(2); + widths_[off * 4 + 3] = endcapValues[i].getWidth(3); + } +} + +HcalPedestalsGPU::Product const& HcalPedestalsGPU::getProduct(cudaStream_t stream) const { + auto const& product = + product_.dataForCurrentDeviceAsync(stream, [this](HcalPedestalsGPU::Product& product, cudaStream_t stream) { + // allocate + product.values = cms::cuda::make_device_unique(values_.size(), stream); + product.widths = cms::cuda::make_device_unique(widths_.size(), stream); + + // transfer + cms::cuda::copyAsync(product.values, values_, stream); + cms::cuda::copyAsync(product.widths, widths_, stream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalPedestalsGPU); diff --git a/CondFormats/HcalObjects/src/HcalQIECodersGPU.cc b/CondFormats/HcalObjects/src/HcalQIECodersGPU.cc new file mode 100644 index 0000000000000..2b9d9d4821e64 --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalQIECodersGPU.cc @@ -0,0 +1,51 @@ +#include "CondFormats/HcalObjects/interface/HcalQIECodersGPU.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +HcalQIECodersGPU::HcalQIECodersGPU(HcalQIEData const& qiedata) + : totalChannels_{qiedata.getAllContainers()[0].second.size() + qiedata.getAllContainers()[1].second.size()}, + offsets_(totalChannels_ * numValuesPerChannel), + slopes_(totalChannels_ * numValuesPerChannel) { + auto const containers = qiedata.getAllContainers(); + + // fill in hb + auto const& barrelValues = containers[0].second; + for (uint64_t i = 0; i < barrelValues.size(); ++i) { + for (uint32_t k = 0; k < 4; k++) + for (uint32_t l = 0; l < 4; l++) { + auto const linear = k * 4 + l; + offsets_[i * numValuesPerChannel + linear] = barrelValues[i].offset(k, l); + slopes_[i * numValuesPerChannel + linear] = barrelValues[i].slope(k, l); + } + } + + // fill in he + auto const& endcapValues = containers[1].second; + auto const offset = barrelValues.size(); + for (uint64_t i = 0; i < endcapValues.size(); ++i) { + auto const off = (i + offset) * numValuesPerChannel; + for (uint32_t k = 0; k < 4; k++) + for (uint32_t l = 0; l < 4; l++) { + auto const linear = k * 4u + l; + offsets_[off + linear] = endcapValues[i].offset(k, l); + slopes_[off + linear] = endcapValues[i].slope(k, l); + } + } +} + +HcalQIECodersGPU::Product const& HcalQIECodersGPU::getProduct(cudaStream_t stream) const { + auto const& product = + product_.dataForCurrentDeviceAsync(stream, [this](HcalQIECodersGPU::Product& product, cudaStream_t stream) { + // allocate + product.offsets = cms::cuda::make_device_unique(offsets_.size(), stream); + product.slopes = cms::cuda::make_device_unique(slopes_.size(), stream); + + // transfer + cms::cuda::copyAsync(product.offsets, offsets_, stream); + cms::cuda::copyAsync(product.slopes, slopes_, stream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalQIECodersGPU); diff --git a/CondFormats/HcalObjects/src/HcalQIETypesGPU.cc b/CondFormats/HcalObjects/src/HcalQIETypesGPU.cc new file mode 100644 index 0000000000000..77a7bf81c33f0 --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalQIETypesGPU.cc @@ -0,0 +1,38 @@ +#include "CondFormats/HcalObjects/interface/HcalQIETypes.h" +#include "CondFormats/HcalObjects/interface/HcalQIETypesGPU.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +// FIXME: add proper getters to conditions +HcalQIETypesGPU::HcalQIETypesGPU(HcalQIETypes const& parameters) + : values_(parameters.getAllContainers()[0].second.size() + parameters.getAllContainers()[1].second.size()) { + auto const containers = parameters.getAllContainers(); + + // fill in eb + auto const& barrelValues = containers[0].second; + for (uint64_t i = 0; i < barrelValues.size(); ++i) { + values_[i] = barrelValues[i].getValue(); + } + + // fill in ee + auto const& endcapValues = containers[1].second; + auto const offset = barrelValues.size(); + for (uint64_t i = 0; i < endcapValues.size(); ++i) { + values_[i + offset] = endcapValues[i].getValue(); + } +} + +HcalQIETypesGPU::Product const& HcalQIETypesGPU::getProduct(cudaStream_t stream) const { + auto const& product = + product_.dataForCurrentDeviceAsync(stream, [this](HcalQIETypesGPU::Product& product, cudaStream_t stream) { + // allocate + product.values = cms::cuda::make_device_unique(values_.size(), stream); + + // transfer + cms::cuda::copyAsync(product.values, values_, stream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalQIETypesGPU); diff --git a/CondFormats/HcalObjects/src/HcalRecoParamsGPU.cc b/CondFormats/HcalObjects/src/HcalRecoParamsGPU.cc new file mode 100644 index 0000000000000..195028acf5746 --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalRecoParamsGPU.cc @@ -0,0 +1,44 @@ +#include "CondFormats/HcalObjects/interface/HcalRecoParams.h" +#include "CondFormats/HcalObjects/interface/HcalRecoParamsGPU.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +// FIXME: add proper getters to conditions +HcalRecoParamsGPU::HcalRecoParamsGPU(HcalRecoParams const& recoParams) + : totalChannels_{recoParams.getAllContainers()[0].second.size() + recoParams.getAllContainers()[1].second.size()}, + param1_(totalChannels_), + param2_(totalChannels_) { + auto const& containers = recoParams.getAllContainers(); + + // fill in eb + auto const& barrelValues = containers[0].second; + for (uint64_t i = 0; i < barrelValues.size(); ++i) { + param1_[i] = barrelValues[i].param1(); + param2_[i] = barrelValues[i].param2(); + } + + // fill in ee + auto const& endcapValues = containers[1].second; + auto const offset = barrelValues.size(); + for (uint64_t i = 0; i < endcapValues.size(); ++i) { + param1_[i + offset] = endcapValues[i].param1(); + param2_[i + offset] = endcapValues[i].param2(); + } +} + +HcalRecoParamsGPU::Product const& HcalRecoParamsGPU::getProduct(cudaStream_t stream) const { + auto const& product = + product_.dataForCurrentDeviceAsync(stream, [this](HcalRecoParamsGPU::Product& product, cudaStream_t stream) { + // allocate + product.param1 = cms::cuda::make_device_unique(param1_.size(), stream); + product.param2 = cms::cuda::make_device_unique(param2_.size(), stream); + + // transfer + cms::cuda::copyAsync(product.param1, param1_, stream); + cms::cuda::copyAsync(product.param2, param2_, stream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalRecoParamsGPU); diff --git a/CondFormats/HcalObjects/src/HcalRespCorrsGPU.cc b/CondFormats/HcalObjects/src/HcalRespCorrsGPU.cc new file mode 100644 index 0000000000000..f688191352353 --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalRespCorrsGPU.cc @@ -0,0 +1,38 @@ +#include "CondFormats/HcalObjects/interface/HcalRespCorrs.h" +#include "CondFormats/HcalObjects/interface/HcalRespCorrsGPU.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +// FIXME: add proper getters to conditions +HcalRespCorrsGPU::HcalRespCorrsGPU(HcalRespCorrs const& respcorrs) + : values_(respcorrs.getAllContainers()[0].second.size() + respcorrs.getAllContainers()[1].second.size()) { + auto const containers = respcorrs.getAllContainers(); + + // fill in eb + auto const& barrelValues = containers[0].second; + for (uint64_t i = 0; i < barrelValues.size(); ++i) { + values_[i] = barrelValues[i].getValue(); + } + + // fill in ee + auto const& endcapValues = containers[1].second; + auto const offset = barrelValues.size(); + for (uint64_t i = 0; i < endcapValues.size(); ++i) { + values_[i + offset] = endcapValues[i].getValue(); + } +} + +HcalRespCorrsGPU::Product const& HcalRespCorrsGPU::getProduct(cudaStream_t stream) const { + auto const& product = + product_.dataForCurrentDeviceAsync(stream, [this](HcalRespCorrsGPU::Product& product, cudaStream_t stream) { + // allocate + product.values = cms::cuda::make_device_unique(values_.size(), stream); + + // transfer + cms::cuda::copyAsync(product.values, values_, stream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalRespCorrsGPU); diff --git a/CondFormats/HcalObjects/src/HcalSiPMCharacteristicsGPU.cc b/CondFormats/HcalObjects/src/HcalSiPMCharacteristicsGPU.cc new file mode 100644 index 0000000000000..059eb8617c37d --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalSiPMCharacteristicsGPU.cc @@ -0,0 +1,63 @@ +#include "CondFormats/HcalObjects/interface/HcalSiPMCharacteristics.h" +#include "CondFormats/HcalObjects/interface/HcalSiPMCharacteristicsGPU.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +HcalSiPMCharacteristicsGPU::HcalSiPMCharacteristicsGPU(HcalSiPMCharacteristics const& parameters) + : pixels_(parameters.getTypes()), + auxi1_(parameters.getTypes()), + parLin1_(parameters.getTypes()), + parLin2_(parameters.getTypes()), + parLin3_(parameters.getTypes()), + crossTalk_(parameters.getTypes()), + auxi2_(parameters.getTypes()) { + for (uint32_t i = 0; i < parameters.getTypes(); i++) { + auto const type = parameters.getType(i); +#ifdef HCAL_MAHI_CPUDEBUG + printf("index = %u type = %d\n", i, type); +#endif + + // for now... + if (static_cast(type) != i + 1) + throw cms::Exception("HcalSiPMCharacteristics") + << "Wrong assumption for HcalSiPMcharacteristics type values, " + << "should be type value <- type index + 1" << std::endl + << "Observed type value = " << type << " and index = " << i << std::endl; + + pixels_[i] = parameters.getPixels(type); + auxi1_[i] = parameters.getAuxi1(type); + parLin1_[i] = parameters.getNonLinearities(type)[0]; + parLin2_[i] = parameters.getNonLinearities(type)[1]; + parLin3_[i] = parameters.getNonLinearities(type)[2]; + crossTalk_[i] = parameters.getCrossTalk(type); + auxi2_[i] = parameters.getAuxi2(type); + } +} + +HcalSiPMCharacteristicsGPU::Product const& HcalSiPMCharacteristicsGPU::getProduct(cudaStream_t stream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + stream, [this](HcalSiPMCharacteristicsGPU::Product& product, cudaStream_t stream) { + // allocate + product.pixels = cms::cuda::make_device_unique(pixels_.size(), stream); + product.auxi1 = cms::cuda::make_device_unique(auxi1_.size(), stream); + product.parLin1 = cms::cuda::make_device_unique(parLin1_.size(), stream); + product.parLin2 = cms::cuda::make_device_unique(parLin2_.size(), stream); + product.parLin3 = cms::cuda::make_device_unique(parLin3_.size(), stream); + product.crossTalk = cms::cuda::make_device_unique(crossTalk_.size(), stream); + product.auxi2 = cms::cuda::make_device_unique(auxi2_.size(), stream); + + // transfer + cms::cuda::copyAsync(product.pixels, pixels_, stream); + cms::cuda::copyAsync(product.auxi1, auxi1_, stream); + cms::cuda::copyAsync(product.parLin1, parLin1_, stream); + cms::cuda::copyAsync(product.parLin2, parLin2_, stream); + cms::cuda::copyAsync(product.parLin3, parLin3_, stream); + cms::cuda::copyAsync(product.crossTalk, crossTalk_, stream); + cms::cuda::copyAsync(product.auxi2, auxi2_, stream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalSiPMCharacteristicsGPU); diff --git a/CondFormats/HcalObjects/src/HcalSiPMParametersGPU.cc b/CondFormats/HcalObjects/src/HcalSiPMParametersGPU.cc new file mode 100644 index 0000000000000..88120e02e54b5 --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalSiPMParametersGPU.cc @@ -0,0 +1,61 @@ +#include "CondFormats/HcalObjects/interface/HcalSiPMParameters.h" +#include "CondFormats/HcalObjects/interface/HcalSiPMParametersGPU.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +HcalSiPMParametersGPU::HcalSiPMParametersGPU(HcalSiPMParameters const& parameters) + : totalChannels_{parameters.getAllContainers()[0].second.size() + parameters.getAllContainers()[1].second.size()}, + type_(totalChannels_), + auxi1_(totalChannels_), + fcByPE_(totalChannels_), + darkCurrent_(totalChannels_), + auxi2_(totalChannels_) { + auto const containers = parameters.getAllContainers(); + + // fill in eb + auto const& barrelValues = containers[0].second; + for (uint64_t i = 0; i < barrelValues.size(); ++i) { + auto const& item = barrelValues[i]; + type_[i] = item.getType(); + auxi1_[i] = item.getauxi1(); + fcByPE_[i] = item.getFCByPE(); + darkCurrent_[i] = item.getDarkCurrent(); + auxi2_[i] = item.getauxi2(); + } + + // fill in ee + auto const& endcapValues = containers[1].second; + auto const offset = barrelValues.size(); + for (uint64_t i = 0; i < endcapValues.size(); ++i) { + auto const off = offset + i; + auto const& item = endcapValues[i]; + type_[off] = item.getType(); + auxi1_[off] = item.getauxi1(); + fcByPE_[off] = item.getFCByPE(); + darkCurrent_[off] = item.getDarkCurrent(); + auxi2_[off] = item.getauxi2(); + } +} + +HcalSiPMParametersGPU::Product const& HcalSiPMParametersGPU::getProduct(cudaStream_t stream) const { + auto const& product = + product_.dataForCurrentDeviceAsync(stream, [this](HcalSiPMParametersGPU::Product& product, cudaStream_t stream) { + // allocate + product.type = cms::cuda::make_device_unique(type_.size(), stream); + product.auxi1 = cms::cuda::make_device_unique(auxi1_.size(), stream); + product.fcByPE = cms::cuda::make_device_unique(fcByPE_.size(), stream); + product.darkCurrent = cms::cuda::make_device_unique(darkCurrent_.size(), stream); + product.auxi2 = cms::cuda::make_device_unique(auxi2_.size(), stream); + + // transfer + cms::cuda::copyAsync(product.type, type_, stream); + cms::cuda::copyAsync(product.auxi1, auxi1_, stream); + cms::cuda::copyAsync(product.fcByPE, fcByPE_, stream); + cms::cuda::copyAsync(product.darkCurrent, darkCurrent_, stream); + cms::cuda::copyAsync(product.auxi2, auxi2_, stream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalSiPMParametersGPU); diff --git a/CondFormats/HcalObjects/src/HcalTimeCorrsGPU.cc b/CondFormats/HcalObjects/src/HcalTimeCorrsGPU.cc new file mode 100644 index 0000000000000..02ce05132479c --- /dev/null +++ b/CondFormats/HcalObjects/src/HcalTimeCorrsGPU.cc @@ -0,0 +1,38 @@ +#include "CondFormats/HcalObjects/interface/HcalTimeCorrs.h" +#include "CondFormats/HcalObjects/interface/HcalTimeCorrsGPU.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +// FIXME: add proper getters to conditions +HcalTimeCorrsGPU::HcalTimeCorrsGPU(HcalTimeCorrs const& timecorrs) + : value_(timecorrs.getAllContainers()[0].second.size() + timecorrs.getAllContainers()[1].second.size()) { + auto const containers = timecorrs.getAllContainers(); + + // fill in eb + auto const& barrelValues = containers[0].second; + for (uint64_t i = 0; i < barrelValues.size(); ++i) { + value_[i] = barrelValues[i].getValue(); + } + + // fill in ee + auto const& endcapValues = containers[1].second; + auto const offset = barrelValues.size(); + for (uint64_t i = 0; i < endcapValues.size(); ++i) { + value_[i + offset] = endcapValues[i].getValue(); + } +} + +HcalTimeCorrsGPU::Product const& HcalTimeCorrsGPU::getProduct(cudaStream_t stream) const { + auto const& product = + product_.dataForCurrentDeviceAsync(stream, [this](HcalTimeCorrsGPU::Product& product, cudaStream_t stream) { + // allocate + product.value = cms::cuda::make_device_unique(value_.size(), stream); + + // transfer + cms::cuda::copyAsync(product.value, value_, stream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalTimeCorrsGPU); diff --git a/CondFormats/JetMETObjects/interface/JetCorrectorParameters.h b/CondFormats/JetMETObjects/interface/JetCorrectorParameters.h index 6c0d1d4ead67c..37e9942ffafd2 100644 --- a/CondFormats/JetMETObjects/interface/JetCorrectorParameters.h +++ b/CondFormats/JetMETObjects/interface/JetCorrectorParameters.h @@ -83,11 +83,20 @@ class JetCorrectorParameters { return true; if (xMin(0) > other.xMin(0)) return false; - if (xMin(1) < other.xMin(1)) - return true; - if (xMin(1) > other.xMin(1)) - return false; - return (xMin(2) < other.xMin(2)); + auto const sz = mMin.size(); + auto const otherSz = other.mMin.size(); + if (sz > 1 and otherSz > 1) { + if (xMin(1) < other.xMin(1)) + return true; + if (xMin(1) > other.xMin(1)) + return false; + if (sz > 2 and otherSz > 2) { + return (xMin(2) < other.xMin(2)); + } + } + //xMins were equal up until one of them + // ran out of values + return sz < otherSz; } private: diff --git a/CondFormats/JetMETObjects/src/JetCorrectorParameters.cc b/CondFormats/JetMETObjects/src/JetCorrectorParameters.cc index f807374586bbe..5b392cb0b0a10 100644 --- a/CondFormats/JetMETObjects/src/JetCorrectorParameters.cc +++ b/CondFormats/JetMETObjects/src/JetCorrectorParameters.cc @@ -116,6 +116,8 @@ JetCorrectorParameters::JetCorrectorParameters(const std::string& fFile, const s std::string line; std::string currentDefinitions = ""; while (std::getline(input, line)) { + if (line.empty()) + continue; std::string section = getSection(line); std::string tmp = getDefinitions(line); if (!section.empty() && tmp.empty()) { diff --git a/CondFormats/PCLConfig/plugins/AlignPCLThresholdsReader.cc b/CondFormats/PCLConfig/plugins/AlignPCLThresholdsReader.cc index df4aa17c9331e..e899bf6fa4c1c 100644 --- a/CondFormats/PCLConfig/plugins/AlignPCLThresholdsReader.cc +++ b/CondFormats/PCLConfig/plugins/AlignPCLThresholdsReader.cc @@ -2,7 +2,6 @@ #include #include #include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -21,12 +20,14 @@ namespace edmtest { void analyze(const edm::Event& e, const edm::EventSetup& c) override; // ----------member data --------------------------- + const edm::ESGetToken thresholdToken_; const bool printdebug_; const std::string formatedOutput_; }; AlignPCLThresholdsReader::AlignPCLThresholdsReader(edm::ParameterSet const& p) - : printdebug_(p.getUntrackedParameter("printDebug", true)), + : thresholdToken_(esConsumes()), + printdebug_(p.getUntrackedParameter("printDebug", true)), formatedOutput_(p.getUntrackedParameter("outputFile", "")) { edm::LogInfo("AlignPCLThresholdsReader") << "AlignPCLThresholdsReader" << std::endl; } @@ -50,11 +51,13 @@ namespace edmtest { } //this part gets the handle of the event source and the record (i.e. the Database) - edm::ESHandle thresholdHandle; + edm::ESHandle thresholdHandle = context.getHandle(thresholdToken_); edm::LogInfo("AlignPCLThresholdsReader") << "got eshandle" << std::endl; - context.get().get(thresholdHandle); - edm::LogInfo("AlignPCLThresholdsReader") << "got context" << std::endl; + if (!thresholdHandle.isValid()) { + edm::LogError("AlignPCLThresholdsReader") << " Could not get Handle" << std::endl; + return; + } const AlignPCLThresholds* thresholds = thresholdHandle.product(); edm::LogInfo("AlignPCLThresholdsReader") << "got AlignPCLThresholds* " << std::endl; diff --git a/CondFormats/PCLConfig/test/AlignPCLThresholdsReader_cfg.py b/CondFormats/PCLConfig/test/AlignPCLThresholdsReader_cfg.py index af1810cf68061..324bf01a43adf 100644 --- a/CondFormats/PCLConfig/test/AlignPCLThresholdsReader_cfg.py +++ b/CondFormats/PCLConfig/test/AlignPCLThresholdsReader_cfg.py @@ -6,10 +6,12 @@ ## MessageLogger ## process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("AlignPCLThresholdsReader") -process.MessageLogger.categories.append("AlignPCLThresholds") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.AlignPCLThresholdsReader=dict() +process.MessageLogger.AlignPCLThresholds=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -18,7 +20,6 @@ AlignPCLThresholdsReader = cms.untracked.PSet( limit = cms.untracked.int32(-1)), AlignPCLThresholds = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') ## ## Empty Source diff --git a/CondFormats/PCLConfig/test/AlignPCLThresholdsWriter_cfg.py b/CondFormats/PCLConfig/test/AlignPCLThresholdsWriter_cfg.py index a6b677ce18790..ed0d445d651b6 100644 --- a/CondFormats/PCLConfig/test/AlignPCLThresholdsWriter_cfg.py +++ b/CondFormats/PCLConfig/test/AlignPCLThresholdsWriter_cfg.py @@ -7,10 +7,12 @@ ## MessageLogger ## process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("AlignPCLThresholdsWriter") -process.MessageLogger.categories.append("AlignPCLThresholds") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.AlignPCLThresholdsWriter=dict() +process.MessageLogger.AlignPCLThresholds=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -19,7 +21,6 @@ AlignPCLThresholdsWriter = cms.untracked.PSet( limit = cms.untracked.int32(-1)), AlignPCLThresholds = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') ## ## Empty source diff --git a/CondFormats/PPSObjects/interface/PPSDirectSimulationData.h b/CondFormats/PPSObjects/interface/PPSDirectSimulationData.h new file mode 100644 index 0000000000000..e597e8a759d74 --- /dev/null +++ b/CondFormats/PPSObjects/interface/PPSDirectSimulationData.h @@ -0,0 +1,52 @@ +#ifndef CondFormats_PPSObjects_PPSDirectSimulationData_h +#define CondFormats_PPSObjects_PPSDirectSimulationData_h + +#include +#include "CondFormats/Serialization/interface/Serializable.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "TH2F.h" + +class PPSDirectSimulationData { +public: + PPSDirectSimulationData(); + ~PPSDirectSimulationData(); + + typedef std::pair FileObject; + + // Getters + const std::string& getEmpiricalAperture45() const; + const std::string& getEmpiricalAperture56() const; + + const std::string& getTimeResolutionDiamonds45() const; + const std::string& getTimeResolutionDiamonds56() const; + + std::map& getEfficienciesPerRP(); + std::map& getEfficienciesPerPlane(); + + // Setters + void setEmpiricalAperture45(std::string s); + void setEmpiricalAperture56(std::string s); + + void setTimeResolutionDiamonds45(std::string s); + void setTimeResolutionDiamonds56(std::string s); + + // utility methods + std::map> loadEffeciencyHistogramsPerRP() const; + std::map> loadEffeciencyHistogramsPerPlane() const; + +private: + std::string empiricalAperture45_; + std::string empiricalAperture56_; + + std::string timeResolutionDiamonds45_; + std::string timeResolutionDiamonds56_; + + std::map efficienciesPerRP_, efficienciesPerPlane_; + + static std::unique_ptr loadObject(const std::string& file, const std::string& object); + static std::string replace(std::string input, const std::string& from, const std::string& to); + + COND_SERIALIZABLE +}; + +#endif \ No newline at end of file diff --git a/CondFormats/PPSObjects/interface/PPSPixelTopology.h b/CondFormats/PPSObjects/interface/PPSPixelTopology.h new file mode 100644 index 0000000000000..a1968d17ca0ac --- /dev/null +++ b/CondFormats/PPSObjects/interface/PPSPixelTopology.h @@ -0,0 +1,150 @@ +#ifndef CondFormats_PPSObjects_PPSPixelTopology_h +#define CondFormats_PPSObjects_PPSPixelTopology_h +// -*- C++ -*- +// +// Package: PPSObjects +// Class: PPSPixelTopology +// +/**\class PPSPixelTopology PPSPixelTopology.h CondFormats/PPSObjects/src/PPSPixelTopology.cc + + Description: Internal topology of PPS detectors + + Implementation: + +*/ +// + +#include "CondFormats/Serialization/interface/Serializable.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "CondFormats/PPSObjects/interface/CTPPSPixelIndices.h" +#include + +class PPSPixelTopology { +public: + // Constructor + PPSPixelTopology(); + // Destructor + ~PPSPixelTopology(); + + class PixelInfo { + public: + PixelInfo(double lower_simX_border, + double higher_simX_border, + double lower_simY_border, + double higher_simY_border, + double eff_factor, + unsigned short pixel_row_no, + unsigned short pixel_col_no) + : lower_simX_border_(lower_simX_border), + higher_simX_border_(higher_simX_border), + lower_simY_border_(lower_simY_border), + higher_simY_border_(higher_simY_border), + eff_factor_(eff_factor), + pixel_row_no_(pixel_row_no), + pixel_col_no_(pixel_col_no) + //, + // pixel_index_(pixel_col_no * PPSPixelTopology::no_of_pixels_simX_ + pixel_row_no) + {} + + inline double higherSimXBorder() const { return higher_simX_border_; } + inline double lowerSimXBorder() const { return lower_simX_border_; } + inline double higherSimYBorder() const { return higher_simY_border_; } + inline double lowerSimYBorder() const { return lower_simY_border_; } + inline double effFactor() const { return eff_factor_; } + inline unsigned short pixelRowNo() const { return pixel_row_no_; } + inline unsigned short pixelColNo() const { return pixel_col_no_; } + // inline unsigned short pixelIndex() const { return pixel_index_; } + + private: + double lower_simX_border_; + double higher_simX_border_; + double lower_simY_border_; + double higher_simY_border_; + double eff_factor_; + unsigned short pixel_row_no_; + unsigned short pixel_col_no_; + // unsigned short pixel_index_; + COND_SERIALIZABLE; + }; + + unsigned short pixelIndex(PixelInfo pI) const; + bool isPixelHit(float xLocalCoordinate, float yLocalCoordinate, bool is3x2) const; + PixelInfo getPixelsInvolved(double x, double y, double sigma, double& hit_pos_x, double& hit_pos_y) const; + + void pixelRange( + unsigned int arow, unsigned int acol, double& lower_x, double& higher_x, double& lower_y, double& higher_y) const; + + // Getters + + std::string getRunType() const; + double getPitchSimY() const; + double getPitchSimX() const; + double getThickness() const; + unsigned short getNoPixelsSimX() const; + unsigned short getNoPixelsSimY() const; + unsigned short getNoPixels() const; + double getSimXWidth() const; + double getSimYWidth() const; + double getDeadEdgeWidth() const; + double getActiveEdgeSigma() const; + double getPhysActiveEdgeDist() const; + double getActiveEdgeX() const; + double getActiveEdgeY() const; + + // Setters + + void setRunType(std::string rt); + void setPitchSimY(double psy); + void setPitchSimX(double psx); + void setThickness(double tss); + void setNoPixelsSimX(unsigned short npx); + void setNoPixelsSimY(unsigned short npy); + void setNoPixels(unsigned short np); + void setSimXWidth(double sxw); + void setSimYWidth(double syw); + void setDeadEdgeWidth(double dew); + void setActiveEdgeSigma(double aes); + void setPhysActiveEdgeDist(double pae); + void setActiveEdgeX(double aex); + void setActiveEdgeY(double aey); + + void printInfo(std::stringstream& s); + +private: + /* +Geometrical and topological information on RPix silicon detector. +Uses coordinate a frame with origin in the center of the wafer. +*/ + + double activeEdgeFactor(double x, double y) const; + double distanceFromTopActiveEdge(double x, double y) const; + double distanceFromBottomActiveEdge(double x, double y) const; + double distanceFromRightActiveEdge(double x, double y) const; + double distanceFromLeftActiveEdge(double x, double y) const; + unsigned int row(double x) const; + unsigned int col(double y) const; + void rowCol2Index(unsigned int arow, unsigned int acol, unsigned int& index) const; + void index2RowCol(unsigned int& arow, unsigned int& acol, unsigned int index) const; + + std::string runType_; + double pitch_simY_; + double pitch_simX_; + double thickness_; + unsigned short no_of_pixels_simX_; + unsigned short no_of_pixels_simY_; + unsigned short no_of_pixels_; + double simX_width_; + double simY_width_; + double dead_edge_width_; + double active_edge_sigma_; + double phys_active_edge_dist_; + + double active_edge_x_; + double active_edge_y_; + + COND_SERIALIZABLE; +}; + +std::ostream& operator<<(std::ostream&, PPSPixelTopology); + +#endif diff --git a/CondFormats/PPSObjects/src/PPSDirectSimulationData.cc b/CondFormats/PPSObjects/src/PPSDirectSimulationData.cc new file mode 100644 index 0000000000000..2c001292144c6 --- /dev/null +++ b/CondFormats/PPSObjects/src/PPSDirectSimulationData.cc @@ -0,0 +1,110 @@ +#include "CondFormats/PPSObjects/interface/PPSDirectSimulationData.h" + +#include "DataFormats/CTPPSDetId/interface/CTPPSDetId.h" +#include "DataFormats/CTPPSDetId/interface/TotemRPDetId.h" +#include "DataFormats/CTPPSDetId/interface/CTPPSPixelDetId.h" +#include "DataFormats/CTPPSDetId/interface/CTPPSDiamondDetId.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" + +#include "TFile.h" + +#include +#include + +PPSDirectSimulationData::PPSDirectSimulationData() + : empiricalAperture45_(""), + empiricalAperture56_(""), + + timeResolutionDiamonds45_(""), + timeResolutionDiamonds56_("") {} + +PPSDirectSimulationData::~PPSDirectSimulationData() {} + +// Getters +const std::string &PPSDirectSimulationData::getEmpiricalAperture45() const { return empiricalAperture45_; } +const std::string &PPSDirectSimulationData::getEmpiricalAperture56() const { return empiricalAperture56_; } + +const std::string &PPSDirectSimulationData::getTimeResolutionDiamonds45() const { return timeResolutionDiamonds45_; } +const std::string &PPSDirectSimulationData::getTimeResolutionDiamonds56() const { return timeResolutionDiamonds56_; } + +std::map &PPSDirectSimulationData::getEfficienciesPerRP() { + return efficienciesPerRP_; +} +std::map &PPSDirectSimulationData::getEfficienciesPerPlane() { + return efficienciesPerPlane_; +}; + +// Setters +void PPSDirectSimulationData::setEmpiricalAperture45(std::string s) { empiricalAperture45_ = s; } +void PPSDirectSimulationData::setEmpiricalAperture56(std::string s) { empiricalAperture56_ = s; } + +void PPSDirectSimulationData::setTimeResolutionDiamonds45(std::string s) { timeResolutionDiamonds45_ = s; } +void PPSDirectSimulationData::setTimeResolutionDiamonds56(std::string s) { timeResolutionDiamonds56_ = s; } + +std::map> PPSDirectSimulationData::loadEffeciencyHistogramsPerRP() const { + std::map> result; + + for (const auto &it : efficienciesPerRP_) + result[it.first] = loadObject(it.second.first, it.second.second); + + return result; +} + +std::map> PPSDirectSimulationData::loadEffeciencyHistogramsPerPlane() const { + std::map> result; + + for (const auto &it : efficienciesPerPlane_) { + CTPPSDetId rpId(it.first); + + if (rpId.subdetId() == CTPPSDetId::sdTrackingStrip) { + for (unsigned int pl = 0; pl < 10; ++pl) { + TotemRPDetId plId(rpId.arm(), rpId.station(), rpId.rp(), pl); + result[plId] = loadObject(it.second.first, replace(it.second.second, "", std::to_string(pl))); + } + } + + if (rpId.subdetId() == CTPPSDetId::sdTrackingPixel) { + for (unsigned int pl = 0; pl < 6; ++pl) { + CTPPSPixelDetId plId(rpId.arm(), rpId.station(), rpId.rp(), pl); + result[plId] = loadObject(it.second.first, replace(it.second.second, "", std::to_string(pl))); + } + } + + if (rpId.subdetId() == CTPPSDetId::sdTimingDiamond) { + for (unsigned int pl = 0; pl < 4; ++pl) { + CTPPSDiamondDetId plId(rpId.arm(), rpId.station(), rpId.rp(), pl); + result[plId] = loadObject(it.second.first, replace(it.second.second, "", std::to_string(pl))); + } + } + } + + return result; +} + +std::unique_ptr PPSDirectSimulationData::loadObject(const std::string &file, const std::string &object) { + edm::FileInPath fip(file.c_str()); + TFile *f_in = TFile::Open(fip.fullPath().c_str()); + if (!f_in) + throw cms::Exception("PPS") << "Cannot open file '" << fip.fullPath() << "'."; + + TH2F *o_in = (TH2F *)f_in->Get(object.c_str()); + if (!o_in) + throw cms::Exception("PPS") << "Cannot load object '" << object << "' from file '" << fip.fullPath() << "'."; + + // disassociate histogram from the file + o_in->SetDirectory(nullptr); + + delete f_in; + + return std::unique_ptr(o_in); +} + +std::string PPSDirectSimulationData::replace(std::string input, const std::string &from, const std::string &to) { + size_t start_pos = 0; + while ((start_pos = input.find(from, start_pos)) != std::string::npos) { + input.replace(start_pos, from.length(), to); + start_pos += to.length(); + } + return input; +} \ No newline at end of file diff --git a/CondFormats/PPSObjects/src/PPSPixelTopology.cc b/CondFormats/PPSObjects/src/PPSPixelTopology.cc new file mode 100644 index 0000000000000..13d20b8a0547c --- /dev/null +++ b/CondFormats/PPSObjects/src/PPSPixelTopology.cc @@ -0,0 +1,277 @@ +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" +//#include + +// Constructors + +PPSPixelTopology::PPSPixelTopology() + : runType_(""), + pitch_simY_(0.), + pitch_simX_(0.), + thickness_(0.), + no_of_pixels_simX_(0.), + no_of_pixels_simY_(0.), + no_of_pixels_(0.), + simX_width_(0.), + simY_width_(0.), + dead_edge_width_(0.), + active_edge_sigma_(0.), + phys_active_edge_dist_(0.), + active_edge_x_(0.), + active_edge_y_(0.) {} + +// Destructor +PPSPixelTopology::~PPSPixelTopology() {} + +unsigned short PPSPixelTopology::pixelIndex(PixelInfo pI) const { + return no_of_pixels_simX_ * pI.pixelColNo() + pI.pixelRowNo(); +} + +bool PPSPixelTopology::isPixelHit(float xLocalCoordinate, float yLocalCoordinate, bool is3x2 = true) const { + // check hit fiducial boundaries + double xModuleSize = 2 * ((no_of_pixels_simX_ / 2. + 1) * pitch_simX_ + dead_edge_width_); + if (xLocalCoordinate < -xModuleSize / 2. || xLocalCoordinate > xModuleSize / 2.) + return false; + + double yModuleSize = (no_of_pixels_simY_ + 4.) * pitch_simY_ + 2. * dead_edge_width_; + double y2x2top = no_of_pixels_simY_ / 6. * pitch_simY_ + dead_edge_width_; + if (is3x2 && (yLocalCoordinate < -yModuleSize / 2. || yLocalCoordinate > yModuleSize / 2.)) + return false; + + if (!is3x2 && (yLocalCoordinate < -yModuleSize / 2. || yLocalCoordinate > y2x2top)) + return false; + + return true; +} + +PPSPixelTopology::PixelInfo PPSPixelTopology::getPixelsInvolved( + double x, double y, double sigma, double& hit_pos_x, double& hit_pos_y) const { + //hit position wrt the bottom left corner of the sensor (-8.3, -12.2) in sensor view, rocs behind + hit_pos_x = x + simX_width_ / 2.; + hit_pos_y = y + simY_width_ / 2.; + if (!(hit_pos_x * hit_pos_y > 0)) + throw cms::Exception("PPSPixelTopology") << "pixel out of reference frame"; + + double hit_factor = activeEdgeFactor(x, y); + + unsigned int interested_row = row(x); + unsigned int interested_col = col(y); + double low_pixel_range_x, high_pixel_range_x, low_pixel_range_y, high_pixel_range_y; + pixelRange( + interested_row, interested_col, low_pixel_range_x, high_pixel_range_x, low_pixel_range_y, high_pixel_range_y); + + return PPSPixelTopology::PixelInfo(low_pixel_range_x, + high_pixel_range_x, + low_pixel_range_y, + high_pixel_range_y, + hit_factor, + interested_row, + interested_col); +} + +void PPSPixelTopology::pixelRange( + unsigned int arow, unsigned int acol, double& lower_x, double& higher_x, double& lower_y, double& higher_y) const { + // x and y in the system of Geant4 SIMULATION + arow = (2 * ROCSizeInX - 1) - arow; + if (arow > (2 * ROCSizeInX - 1) || acol > (3 * ROCSizeInY - 1)) + throw cms::Exception("PPSPixelTopology") << "pixel rows or columns exceeding limits"; + + // rows (x segmentation) + if (arow == 0) { + lower_x = dead_edge_width_ - phys_active_edge_dist_; // 50 um + higher_x = dead_edge_width_ + pitch_simX_; // 300 um + } else if (arow <= (ROCSizeInX - 2)) { + lower_x = dead_edge_width_ + arow * pitch_simX_; + higher_x = dead_edge_width_ + (arow + 1) * pitch_simX_; + } else if (arow == (ROCSizeInX - 1)) { + lower_x = dead_edge_width_ + arow * pitch_simX_; + higher_x = dead_edge_width_ + (arow + 2) * pitch_simX_; + } else if (arow == ROCSizeInX) { + lower_x = dead_edge_width_ + (arow + 1) * pitch_simX_; + higher_x = dead_edge_width_ + (arow + 3) * pitch_simX_; + } else if (arow <= (2 * ROCSizeInX - 2)) { + lower_x = dead_edge_width_ + (arow + 2) * pitch_simX_; + higher_x = dead_edge_width_ + (arow + 3) * pitch_simX_; + } else if (arow == (2 * ROCSizeInX - 1)) { + lower_x = dead_edge_width_ + (arow + 2) * pitch_simX_; + higher_x = dead_edge_width_ + (arow + 3) * pitch_simX_ + phys_active_edge_dist_; + } + // columns (y segmentation) + if (acol == 0) { + lower_y = dead_edge_width_ - phys_active_edge_dist_; // 50 um + higher_y = dead_edge_width_ + pitch_simY_; // 350 um + } else if (acol <= (ROCSizeInY - 2)) { + lower_y = dead_edge_width_ + acol * pitch_simY_; + higher_y = dead_edge_width_ + (acol + 1) * pitch_simY_; + } else if (acol == (ROCSizeInY - 1)) { + lower_y = dead_edge_width_ + acol * pitch_simY_; + higher_y = dead_edge_width_ + (acol + 2) * pitch_simY_; + } else if (acol == ROCSizeInY) { + lower_y = dead_edge_width_ + (acol + 1) * pitch_simY_; + higher_y = dead_edge_width_ + (acol + 3) * pitch_simY_; + } else if (acol <= (2 * ROCSizeInY - 2)) { + lower_y = dead_edge_width_ + (acol + 2) * pitch_simY_; + higher_y = dead_edge_width_ + (acol + 3) * pitch_simY_; + } else if (acol == (2 * ROCSizeInY - 1)) { + lower_y = dead_edge_width_ + (acol + 2) * pitch_simY_; + higher_y = dead_edge_width_ + (acol + 4) * pitch_simY_; + } else if (acol == (2 * ROCSizeInY)) { + lower_y = dead_edge_width_ + (acol + 3) * pitch_simY_; + higher_y = dead_edge_width_ + (acol + 5) * pitch_simY_; + } else if (acol <= (3 * ROCSizeInY - 2)) { + lower_y = dead_edge_width_ + (acol + 4) * pitch_simY_; + higher_y = dead_edge_width_ + (acol + 5) * pitch_simY_; + } else if (acol == (3 * ROCSizeInY - 1)) { + lower_y = dead_edge_width_ + (acol + 4) * pitch_simY_; + higher_y = dead_edge_width_ + (acol + 5) * pitch_simY_ + phys_active_edge_dist_; + } + + lower_x = lower_x - simX_width_ / 2.; + lower_y = lower_y - simY_width_ / 2.; + higher_x = higher_x - simX_width_ / 2.; + higher_y = higher_y - simY_width_ / 2.; +} + +double PPSPixelTopology::activeEdgeFactor(double x, double y) const { + const double inv_sigma = 1. / active_edge_sigma_; // precaching + const double topEdgeFactor = std::erf(-distanceFromTopActiveEdge(x, y) * inv_sigma) * 0.5 + 0.5; + const double bottomEdgeFactor = std::erf(-distanceFromBottomActiveEdge(x, y) * inv_sigma) * 0.5 + 0.5; + const double rightEdgeFactor = std::erf(-distanceFromRightActiveEdge(x, y) * inv_sigma) * 0.5 + 0.5; + const double leftEdgeFactor = std::erf(-distanceFromLeftActiveEdge(x, y) * inv_sigma) * 0.5 + 0.5; + + const double aEF = topEdgeFactor * bottomEdgeFactor * rightEdgeFactor * leftEdgeFactor; + + if (aEF > 1.) + throw cms::Exception("PPSPixelTopology") << " pixel active edge factor > 1"; + + return aEF; +} + +double PPSPixelTopology::distanceFromTopActiveEdge(double x, double y) const { return (y - active_edge_y_); } +double PPSPixelTopology::distanceFromBottomActiveEdge(double x, double y) const { return (-y - active_edge_y_); } +double PPSPixelTopology::distanceFromRightActiveEdge(double x, double y) const { return (x - active_edge_x_); } +double PPSPixelTopology::distanceFromLeftActiveEdge(double x, double y) const { return (-x - active_edge_x_); } + +unsigned int PPSPixelTopology::row(double x) const { + // x in the G4 simulation system + x = x + simX_width_ / 2.; + + // now x in the system centered in the bottom left corner of the sensor (sensor view, rocs behind) + if (x < 0. || x > simX_width_) + throw cms::Exception("PPSPixelTopology") << " pixel out of reference frame"; + + // rows (x segmentation) + unsigned int arow; + if (x <= (dead_edge_width_ + pitch_simX_)) + arow = 0; + else if (x <= (dead_edge_width_ + (ROCSizeInX - 1) * pitch_simX_)) + arow = int((x - dead_edge_width_ - pitch_simX_) / pitch_simX_) + 1; + else if (x <= (dead_edge_width_ + (ROCSizeInX + 1) * pitch_simX_)) + arow = (ROCSizeInX - 1); + else if (x <= (dead_edge_width_ + (ROCSizeInX + 3) * pitch_simX_)) + arow = ROCSizeInX; + else if (x <= (dead_edge_width_ + (2 * ROCSizeInX + 2) * pitch_simX_)) + arow = int((x - dead_edge_width_ - pitch_simX_) / pitch_simX_) - 1; + else + arow = (2 * ROCSizeInX - 1); + + arow = (2 * ROCSizeInX - 1) - arow; + if (arow > (2 * ROCSizeInX - 1)) + throw cms::Exception("PPSPixelTopology") << " pixel row number exceeding limit"; + + return arow; +} + +unsigned int PPSPixelTopology::col(double y) const { + // y in the G4 simulation system + unsigned int column; + + // columns (y segmentation) + // now y in the system centered in the bottom left corner of the sensor (sensor view, rocs behind) + y = y + simY_width_ / 2.; + if (y < 0. || y > simY_width_) + throw cms::Exception("PPSPixelTopology") << "pixel out of reference frame"; + + if (y <= (dead_edge_width_ + pitch_simY_)) + column = 0; + else if (y <= (dead_edge_width_ + (ROCSizeInY - 1) * pitch_simY_)) + column = int((y - dead_edge_width_ - pitch_simY_) / pitch_simY_) + 1; + else if (y <= (dead_edge_width_ + (ROCSizeInY + 1) * pitch_simY_)) + column = ROCSizeInY - 1; + else if (y <= (dead_edge_width_ + (ROCSizeInY + 3) * pitch_simY_)) + column = ROCSizeInY; + else if (y <= (dead_edge_width_ + (2 * ROCSizeInY + 1) * pitch_simY_)) + column = int((y - dead_edge_width_ - pitch_simY_) / pitch_simY_) - 1; + else if (y <= (dead_edge_width_ + (2 * ROCSizeInY + 3) * pitch_simY_)) + column = 2 * ROCSizeInY - 1; + else if (y <= (dead_edge_width_ + (2 * ROCSizeInY + 5) * pitch_simY_)) + column = 2 * ROCSizeInY; + else if (y <= (dead_edge_width_ + (3 * ROCSizeInY + 3) * pitch_simY_)) + column = int((y - dead_edge_width_ - pitch_simY_) / pitch_simY_) - 3; + else + column = (3 * ROCSizeInY - 1); + + return column; +} + +void PPSPixelTopology::rowCol2Index(unsigned int arow, unsigned int acol, unsigned int& index) const { + index = acol * no_of_pixels_simX_ + arow; +} + +void PPSPixelTopology::index2RowCol(unsigned int& arow, unsigned int& acol, unsigned int index) const { + acol = index / no_of_pixels_simX_; + arow = index % no_of_pixels_simX_; +} + +// Getters + +std::string PPSPixelTopology::getRunType() const { return runType_; } +double PPSPixelTopology::getPitchSimY() const { return pitch_simY_; } +double PPSPixelTopology::getPitchSimX() const { return pitch_simX_; } +double PPSPixelTopology::getThickness() const { return thickness_; } +unsigned short PPSPixelTopology::getNoPixelsSimX() const { return no_of_pixels_simX_; } +unsigned short PPSPixelTopology::getNoPixelsSimY() const { return no_of_pixels_simY_; } +unsigned short PPSPixelTopology::getNoPixels() const { return no_of_pixels_; } +double PPSPixelTopology::getSimXWidth() const { return simX_width_; } +double PPSPixelTopology::getSimYWidth() const { return simY_width_; } +double PPSPixelTopology::getDeadEdgeWidth() const { return dead_edge_width_; } +double PPSPixelTopology::getActiveEdgeSigma() const { return active_edge_sigma_; } +double PPSPixelTopology::getPhysActiveEdgeDist() const { return phys_active_edge_dist_; } +double PPSPixelTopology::getActiveEdgeX() const { return active_edge_x_; } +double PPSPixelTopology::getActiveEdgeY() const { return active_edge_y_; } + +// Setters + +void PPSPixelTopology::setRunType(std::string rt) { runType_ = rt; } +void PPSPixelTopology::setPitchSimY(double psy) { pitch_simY_ = psy; } +void PPSPixelTopology::setPitchSimX(double psx) { pitch_simX_ = psx; } +void PPSPixelTopology::setThickness(double tss) { thickness_ = tss; } +void PPSPixelTopology::setNoPixelsSimX(unsigned short npx) { no_of_pixels_simX_ = npx; } +void PPSPixelTopology::setNoPixelsSimY(unsigned short npy) { no_of_pixels_simY_ = npy; } +void PPSPixelTopology::setNoPixels(unsigned short np) { no_of_pixels_ = np; } +void PPSPixelTopology::setSimXWidth(double sxw) { simX_width_ = sxw; } +void PPSPixelTopology::setSimYWidth(double syw) { simY_width_ = syw; } +void PPSPixelTopology::setDeadEdgeWidth(double dew) { dead_edge_width_ = dew; } +void PPSPixelTopology::setActiveEdgeSigma(double aes) { active_edge_sigma_ = aes; } +void PPSPixelTopology::setPhysActiveEdgeDist(double pae) { phys_active_edge_dist_ = pae; } +void PPSPixelTopology::setActiveEdgeX(double aex) { active_edge_x_ = aex; } +void PPSPixelTopology::setActiveEdgeY(double aey) { active_edge_y_ = aey; } + +void PPSPixelTopology::printInfo(std::stringstream& s) { + s << "\n PPS Topology parameters : \n" + << "\n runType_ = " << runType_ << "\n pitch_simY_ = " << pitch_simY_ << "\n pitch_simX_ = " << pitch_simX_ + << "\n thickness_ = " << thickness_ << "\n no_of_pixels_simX_ " << no_of_pixels_simX_ + << "\n no_of_pixels_simY_ " << no_of_pixels_simY_ << "\n no_of_pixels_ " << no_of_pixels_ << "\n simX_width_ " + << simX_width_ << "\n simY_width_ " << simY_width_ << "\n dead_edge_width_ " << dead_edge_width_ + << "\n active_edge_sigma_ " << active_edge_sigma_ << "\n phys_active_edge_dist_ " << phys_active_edge_dist_ + + << "\n active_edge_x_ " << active_edge_x_ << "\n active_edge_y_ " << active_edge_y_ + + << std::endl; +} + +std::ostream& operator<<(std::ostream& os, PPSPixelTopology info) { + std::stringstream ss; + info.printInfo(ss); + os << ss.str(); + return os; +} diff --git a/CondFormats/PPSObjects/src/T_EventSetup_PPSDirectSimulationData.cc b/CondFormats/PPSObjects/src/T_EventSetup_PPSDirectSimulationData.cc new file mode 100644 index 0000000000000..031cabc993a50 --- /dev/null +++ b/CondFormats/PPSObjects/src/T_EventSetup_PPSDirectSimulationData.cc @@ -0,0 +1,4 @@ +#include "CondFormats/PPSObjects/interface/PPSDirectSimulationData.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(PPSDirectSimulationData); diff --git a/CondFormats/PPSObjects/src/T_EventSetup_PPSPixelTopology.cc b/CondFormats/PPSObjects/src/T_EventSetup_PPSPixelTopology.cc new file mode 100644 index 0000000000000..2e31820bb054b --- /dev/null +++ b/CondFormats/PPSObjects/src/T_EventSetup_PPSPixelTopology.cc @@ -0,0 +1,4 @@ +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(PPSPixelTopology); diff --git a/CondFormats/PPSObjects/src/classes.h b/CondFormats/PPSObjects/src/classes.h index a807863549254..148f38e44e475 100644 --- a/CondFormats/PPSObjects/src/classes.h +++ b/CondFormats/PPSObjects/src/classes.h @@ -19,5 +19,6 @@ namespace CondFormats_CTPPSPixelObjects { LHCOpticalFunctionsSetCollection lhc_ofsc; LHCInterpolatedOpticalFunctionsSet lhc_iofs; LHCInterpolatedOpticalFunctionsSetCollection lhc_iofsc; + PPSPixelTopology pps_pt; }; } // namespace CondFormats_CTPPSPixelObjects diff --git a/CondFormats/PPSObjects/src/classes_def.xml b/CondFormats/PPSObjects/src/classes_def.xml index 522f9de2cd61d..2b8be486f99ef 100644 --- a/CondFormats/PPSObjects/src/classes_def.xml +++ b/CondFormats/PPSObjects/src/classes_def.xml @@ -66,5 +66,6 @@ - + + \ No newline at end of file diff --git a/CondFormats/PPSObjects/src/headers.h b/CondFormats/PPSObjects/src/headers.h index a5202bc64b5e8..bb179fd8df892 100644 --- a/CondFormats/PPSObjects/src/headers.h +++ b/CondFormats/PPSObjects/src/headers.h @@ -10,3 +10,6 @@ #include "CondFormats/PPSObjects/interface/LHCOpticalFunctionsSetCollection.h" #include "CondFormats/PPSObjects/interface/LHCInterpolatedOpticalFunctionsSet.h" #include "CondFormats/PPSObjects/interface/LHCInterpolatedOpticalFunctionsSetCollection.h" + +#include "CondFormats/PPSObjects/interface/PPSDirectSimulationData.h" +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" diff --git a/CondFormats/PhysicsToolsObjects/test/SiStripDeDx2DBuilder_cfg.py b/CondFormats/PhysicsToolsObjects/test/SiStripDeDx2DBuilder_cfg.py index 9c0d873a65ce8..5f25b75fac292 100644 --- a/CondFormats/PhysicsToolsObjects/test/SiStripDeDx2DBuilder_cfg.py +++ b/CondFormats/PhysicsToolsObjects/test/SiStripDeDx2DBuilder_cfg.py @@ -9,14 +9,21 @@ process = cms.Process("SiStripDeDxMipBuilder") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), cablingBuilder = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('dedxmipBuilder.log') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + dedxmipBuilder = cms.untracked.PSet( + + ) + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/CondFormats/PhysicsToolsObjects/test/SiStripDeDx2DReader_cfg.py b/CondFormats/PhysicsToolsObjects/test/SiStripDeDx2DReader_cfg.py index a8016538b4e4b..511a8d0da88be 100644 --- a/CondFormats/PhysicsToolsObjects/test/SiStripDeDx2DReader_cfg.py +++ b/CondFormats/PhysicsToolsObjects/test/SiStripDeDx2DReader_cfg.py @@ -9,14 +9,21 @@ process = cms.Process("DeDxMipReader") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), - fedcablingReader = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('dedxReader.log') + debugModules = cms.untracked.vstring(''), + fedcablingReader = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ), + files = cms.untracked.PSet( + dedxReader = cms.untracked.PSet( + + ) + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/CondFormats/PhysicsToolsObjects/test/SiStripDeDx3DBuilder_cfg.py b/CondFormats/PhysicsToolsObjects/test/SiStripDeDx3DBuilder_cfg.py index dc3ab9d504658..607c6bac032dd 100644 --- a/CondFormats/PhysicsToolsObjects/test/SiStripDeDx3DBuilder_cfg.py +++ b/CondFormats/PhysicsToolsObjects/test/SiStripDeDx3DBuilder_cfg.py @@ -9,14 +9,21 @@ process = cms.Process("SiStripDeDxMipBuilder") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), cablingBuilder = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('SiStripDeDx3DBuilder.log') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + SiStripDeDx3DBuilder = cms.untracked.PSet( + + ) + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/CondFormats/PhysicsToolsObjects/test/SiStripDeDx3DReader_cfg.py b/CondFormats/PhysicsToolsObjects/test/SiStripDeDx3DReader_cfg.py index ebdb9cba3f3b6..a25deabafcfcf 100644 --- a/CondFormats/PhysicsToolsObjects/test/SiStripDeDx3DReader_cfg.py +++ b/CondFormats/PhysicsToolsObjects/test/SiStripDeDx3DReader_cfg.py @@ -9,14 +9,21 @@ process = cms.Process("DeDxMipReader") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), - fedcablingReader = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('SiStripDeDx3DReader.log') + debugModules = cms.untracked.vstring(''), + fedcablingReader = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ), + files = cms.untracked.PSet( + SiStripDeDx3DReader = cms.untracked.PSet( + + ) + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/CondFormats/PhysicsToolsObjects/test/SiStripDeDxBuilder_cfg.py b/CondFormats/PhysicsToolsObjects/test/SiStripDeDxBuilder_cfg.py index 8bcebf836c63f..c17a75fc03387 100644 --- a/CondFormats/PhysicsToolsObjects/test/SiStripDeDxBuilder_cfg.py +++ b/CondFormats/PhysicsToolsObjects/test/SiStripDeDxBuilder_cfg.py @@ -9,14 +9,21 @@ process = cms.Process("SiStripDeDxMipBuilder") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), cablingBuilder = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('dedxmipBuilder.log') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + dedxmipBuilder = cms.untracked.PSet( + + ) + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/CondFormats/PhysicsToolsObjects/test/SiStripDeDxReader_cfg.py b/CondFormats/PhysicsToolsObjects/test/SiStripDeDxReader_cfg.py index 10b9036c5f5d0..6853bd4f01caf 100644 --- a/CondFormats/PhysicsToolsObjects/test/SiStripDeDxReader_cfg.py +++ b/CondFormats/PhysicsToolsObjects/test/SiStripDeDxReader_cfg.py @@ -9,14 +9,21 @@ process = cms.Process("DeDxMipReader") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), - fedcablingReader = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('dedxReader.log') + debugModules = cms.untracked.vstring(''), + fedcablingReader = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ), + files = cms.untracked.PSet( + dedxReader = cms.untracked.PSet( + + ) + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/CondFormats/SiPixelObjects/interface/SiPixelGainForHLTonGPU.h b/CondFormats/SiPixelObjects/interface/SiPixelGainForHLTonGPU.h new file mode 100644 index 0000000000000..aa5a127927b90 --- /dev/null +++ b/CondFormats/SiPixelObjects/interface/SiPixelGainForHLTonGPU.h @@ -0,0 +1,74 @@ +#ifndef CondFormats_SiPixelObjects_interface_SiPixelGainForHLTonGPU_h +#define CondFormats_SiPixelObjects_interface_SiPixelGainForHLTonGPU_h + +#include +#include +#include + +// including would pull in the dependency on all of CUDA; +// instead, just define away the CUDA specific attributes to keep GCC happy. +#ifndef __CUDACC__ +#ifndef __host__ +#define __host__ +#endif // __host__ +#ifndef __device__ +#define __device__ +#endif // __device__ +#endif // __CUDACC__ + +#include "CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cuda_assert.h" + +struct SiPixelGainForHLTonGPU_DecodingStructure { + uint8_t gain; + uint8_t ped; +}; + +// copy of SiPixelGainCalibrationForHLT +class SiPixelGainForHLTonGPU { +public: + using DecodingStructure = SiPixelGainForHLTonGPU_DecodingStructure; + + using Range = std::pair; + + inline __host__ __device__ std::pair getPedAndGain( + uint32_t moduleInd, int col, int row, bool& isDeadColumn, bool& isNoisyColumn) const { + auto range = rangeAndCols_[moduleInd].first; + auto nCols = rangeAndCols_[moduleInd].second; + + // determine what averaged data block we are in (there should be 1 or 2 of these depending on if plaquette is 1 by X or 2 by X + unsigned int lengthOfColumnData = (range.second - range.first) / nCols; + unsigned int lengthOfAveragedDataInEachColumn = 2; // we always only have two values per column averaged block + unsigned int numberOfDataBlocksToSkip = row / numberOfRowsAveragedOver_; + + auto offset = range.first + col * lengthOfColumnData + lengthOfAveragedDataInEachColumn * numberOfDataBlocksToSkip; + + assert(offset < range.second); + assert(offset < 3088384); + assert(0 == offset % 2); + + DecodingStructure const* __restrict__ lp = v_pedestals_; + auto s = lp[offset / 2]; + + isDeadColumn = (s.ped & 0xFF) == deadFlag_; + isNoisyColumn = (s.ped & 0xFF) == noisyFlag_; + + return std::make_pair(decodePed(s.ped & 0xFF), decodeGain(s.gain & 0xFF)); + } + + constexpr float decodeGain(unsigned int gain) const { return gain * gainPrecision_ + minGain_; } + constexpr float decodePed(unsigned int ped) const { return ped * pedPrecision_ + minPed_; } + + DecodingStructure* v_pedestals_; + std::pair rangeAndCols_[gpuClustering::maxNumModules]; + + float minPed_, maxPed_, minGain_, maxGain_; + float pedPrecision_, gainPrecision_; + + unsigned int numberOfRowsAveragedOver_; // this is 80!!!! + unsigned int nBinsToUseForEncoding_; + unsigned int deadFlag_; + unsigned int noisyFlag_; +}; + +#endif // CondFormats_SiPixelObjects_interface_SiPixelGainForHLTonGPU_h diff --git a/CondFormats/SiPixelObjects/interface/SiPixelROCsStatusAndMapping.h b/CondFormats/SiPixelObjects/interface/SiPixelROCsStatusAndMapping.h new file mode 100644 index 0000000000000..f7cd8dedca941 --- /dev/null +++ b/CondFormats/SiPixelObjects/interface/SiPixelROCsStatusAndMapping.h @@ -0,0 +1,25 @@ +#ifndef CondFormats_SiPixelObjects_interface_SiPixelROCsStatusAndMapping_h +#define CondFormats_SiPixelObjects_interface_SiPixelROCsStatusAndMapping_h + +namespace pixelgpudetails { + // Maximum fed for phase1 is 150 but not all of them are filled + // Update the number FED based on maximum fed found in the cabling map + constexpr unsigned int MAX_FED = 150; + constexpr unsigned int MAX_LINK = 48; // maximum links/channels for Phase 1 + constexpr unsigned int MAX_ROC = 8; + constexpr unsigned int MAX_SIZE = MAX_FED * MAX_LINK * MAX_ROC; + constexpr unsigned int MAX_SIZE_BYTE_BOOL = MAX_SIZE * sizeof(unsigned char); +} // namespace pixelgpudetails + +struct SiPixelROCsStatusAndMapping { + alignas(128) unsigned int fed[pixelgpudetails::MAX_SIZE]; + alignas(128) unsigned int link[pixelgpudetails::MAX_SIZE]; + alignas(128) unsigned int roc[pixelgpudetails::MAX_SIZE]; + alignas(128) unsigned int rawId[pixelgpudetails::MAX_SIZE]; + alignas(128) unsigned int rocInDet[pixelgpudetails::MAX_SIZE]; + alignas(128) unsigned int moduleId[pixelgpudetails::MAX_SIZE]; + alignas(128) unsigned char badRocs[pixelgpudetails::MAX_SIZE]; + alignas(128) unsigned int size = 0; +}; + +#endif // CondFormats_SiPixelObjects_interface_SiPixelROCsStatusAndMapping_h diff --git a/CondFormats/SiPixelObjects/test/FastSiPixelFEDChannelContainerFromQuality_cfg.py b/CondFormats/SiPixelObjects/test/FastSiPixelFEDChannelContainerFromQuality_cfg.py index 9d3b108680f96..15136981a0249 100644 --- a/CondFormats/SiPixelObjects/test/FastSiPixelFEDChannelContainerFromQuality_cfg.py +++ b/CondFormats/SiPixelObjects/test/FastSiPixelFEDChannelContainerFromQuality_cfg.py @@ -7,11 +7,12 @@ ## MessageLogger ## process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("FastSiPixelFEDChannelContainerFromQuality") -process.MessageLogger.categories.append("SiPixelFEDChannelContainer") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.FastSiPixelFEDChannelContainerFromQuality=dict() +process.MessageLogger.SiPixelFEDChannelContainer=dict() process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string("INFO"), + enableStatistics = cms.untracked.bool(True), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), reportEvery = cms.untracked.int32(1000) @@ -19,7 +20,6 @@ FastSiPixelFEDChannelContainerFromQuality = cms.untracked.PSet( limit = cms.untracked.int32(-1)), SiPixelFEDChannelContainer = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') ## ## Empty Source diff --git a/CondFormats/SiPixelObjects/test/SiPixelBadFEDChannelSimulationSanityChecker_cfg.py b/CondFormats/SiPixelObjects/test/SiPixelBadFEDChannelSimulationSanityChecker_cfg.py index 9bb1960122880..b61a8e73695f3 100644 --- a/CondFormats/SiPixelObjects/test/SiPixelBadFEDChannelSimulationSanityChecker_cfg.py +++ b/CondFormats/SiPixelObjects/test/SiPixelBadFEDChannelSimulationSanityChecker_cfg.py @@ -6,11 +6,13 @@ ## MessageLogger ## process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiPixelBadFEDChannelSimulationSanityChecker") -process.MessageLogger.categories.append("SiPixelFEDChannelContainer") -process.MessageLogger.categories.append("SiPixelQualityProbabilities") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiPixelBadFEDChannelSimulationSanityChecker=dict() +process.MessageLogger.SiPixelFEDChannelContainer=dict() +process.MessageLogger.SiPixelQualityProbabilities=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -20,7 +22,7 @@ SiPixelFEDChannelContainer = cms.untracked.PSet( limit = cms.untracked.int32(-1)), SiPixelQualityProbabilities = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') +process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True) ## ## Empty Source diff --git a/CondFormats/SiPixelObjects/test/SiPixelFEDChannelContainerFromQualityConverter_cfg.py b/CondFormats/SiPixelObjects/test/SiPixelFEDChannelContainerFromQualityConverter_cfg.py index 4a7915a0002dd..a376c95525ce4 100644 --- a/CondFormats/SiPixelObjects/test/SiPixelFEDChannelContainerFromQualityConverter_cfg.py +++ b/CondFormats/SiPixelObjects/test/SiPixelFEDChannelContainerFromQualityConverter_cfg.py @@ -5,10 +5,12 @@ ## MessageLogger ## process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiPixelFEDChannelContainerFromQualityConverter") -process.MessageLogger.categories.append("SiPixelFEDChannelContainer") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiPixelFEDChannelContainerFromQualityConverter=dict() +process.MessageLogger.SiPixelFEDChannelContainer=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -17,7 +19,6 @@ SiPixelFEDChannelContainerFromQualityConverter = cms.untracked.PSet( limit = cms.untracked.int32(-1)), SiPixelFEDChannelContainer = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') ## ## Empty source diff --git a/CondFormats/SiPixelObjects/test/SiPixelFEDChannelContainerTestReader_cfg.py b/CondFormats/SiPixelObjects/test/SiPixelFEDChannelContainerTestReader_cfg.py index 6cd08e5be9a09..f98d2f7e54d91 100644 --- a/CondFormats/SiPixelObjects/test/SiPixelFEDChannelContainerTestReader_cfg.py +++ b/CondFormats/SiPixelObjects/test/SiPixelFEDChannelContainerTestReader_cfg.py @@ -6,10 +6,12 @@ ## MessageLogger ## process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiPixelFEDChannelContainerTestReader") -process.MessageLogger.categories.append("SiPixelFEDChannelContainer") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiPixelFEDChannelContainerTestReader=dict() +process.MessageLogger.SiPixelFEDChannelContainer=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -18,7 +20,6 @@ SiPixelFEDChannelContainerTestReader = cms.untracked.PSet( limit = cms.untracked.int32(-1)), SiPixelFEDChannelContainer = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') ## ## Empty Source diff --git a/CondFormats/SiPixelObjects/test/SiPixelFEDChannelContainerWriteFromASCII_cfg.py b/CondFormats/SiPixelObjects/test/SiPixelFEDChannelContainerWriteFromASCII_cfg.py index fc354b0b820dc..b4c48ee3dfc1c 100644 --- a/CondFormats/SiPixelObjects/test/SiPixelFEDChannelContainerWriteFromASCII_cfg.py +++ b/CondFormats/SiPixelObjects/test/SiPixelFEDChannelContainerWriteFromASCII_cfg.py @@ -5,10 +5,12 @@ ## MessageLogger ## process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiPixelFEDChannelContainerWriteFromASCII") -process.MessageLogger.categories.append("SiPixelFEDChannelContainer") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiPixelFEDChannelContainerWriteFromASCII=dict() +process.MessageLogger.SiPixelFEDChannelContainer=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -17,7 +19,6 @@ SiPixelFEDChannelContainerWriteFromASCII = cms.untracked.PSet( limit = cms.untracked.int32(-1)), SiPixelFEDChannelContainer = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') ## ## Empty source diff --git a/CondFormats/SiPixelObjects/test/SiPixelQualityProbabilitiesTestReader_cfg.py b/CondFormats/SiPixelObjects/test/SiPixelQualityProbabilitiesTestReader_cfg.py index c23b308f35527..6807eb2cc0b51 100644 --- a/CondFormats/SiPixelObjects/test/SiPixelQualityProbabilitiesTestReader_cfg.py +++ b/CondFormats/SiPixelObjects/test/SiPixelQualityProbabilitiesTestReader_cfg.py @@ -6,10 +6,12 @@ ## MessageLogger ## process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiPixelQualityProbabilitiesTestReader") -process.MessageLogger.categories.append("SiPixelQualityProbabilities") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiPixelQualityProbabilitiesTestReader=dict() +process.MessageLogger.SiPixelQualityProbabilities=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -18,7 +20,6 @@ SiPixelQualityProbabilitiesTestReader = cms.untracked.PSet( limit = cms.untracked.int32(-1)), SiPixelQualityProbabilities = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') ## ## Empty Source diff --git a/CondFormats/SiPixelObjects/test/SiPixelQualityProbabilitiesTestWriter_cfg.py b/CondFormats/SiPixelObjects/test/SiPixelQualityProbabilitiesTestWriter_cfg.py index 2a6fdcb25743b..6f933e5c13bae 100644 --- a/CondFormats/SiPixelObjects/test/SiPixelQualityProbabilitiesTestWriter_cfg.py +++ b/CondFormats/SiPixelObjects/test/SiPixelQualityProbabilitiesTestWriter_cfg.py @@ -5,10 +5,12 @@ ## MessageLogger ## process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiPixelQualityProbabilitiesTestWriter") -process.MessageLogger.categories.append("SiPixelQualityProbabilities") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiPixelQualityProbabilitiesTestWriter=dict() +process.MessageLogger.SiPixelQualityProbabilities=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -17,7 +19,7 @@ SiPixelQualityProbabilitiesTestWriter = cms.untracked.PSet( limit = cms.untracked.int32(-1)), SiPixelQualityProbabilities = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') + ## ## Empty source diff --git a/CondFormats/SiPixelObjects/test/SiPixelQualityProbabilitiesWriteFromASCII_cfg.py b/CondFormats/SiPixelObjects/test/SiPixelQualityProbabilitiesWriteFromASCII_cfg.py index 7e1bd3eacbe59..dc338d8cb8218 100644 --- a/CondFormats/SiPixelObjects/test/SiPixelQualityProbabilitiesWriteFromASCII_cfg.py +++ b/CondFormats/SiPixelObjects/test/SiPixelQualityProbabilitiesWriteFromASCII_cfg.py @@ -5,10 +5,12 @@ ## MessageLogger ## process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiPixelQualityProbabilitiesWriteFromASCII") -process.MessageLogger.categories.append("SiPixelQualityProbabilities") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiPixelQualityProbabilitiesWriteFromASCII=dict() +process.MessageLogger.SiPixelQualityProbabilities=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -17,7 +19,6 @@ SiPixelQualityProbabilitiesWriteFromASCII = cms.untracked.PSet( limit = cms.untracked.int32(-1)), SiPixelQualityProbabilities = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') ## ## Empty source diff --git a/CondFormats/SiPixelObjects/test/read_cfg.py b/CondFormats/SiPixelObjects/test/read_cfg.py index 330e840eb40bc..8efff7badb0de 100644 --- a/CondFormats/SiPixelObjects/test/read_cfg.py +++ b/CondFormats/SiPixelObjects/test/read_cfg.py @@ -12,9 +12,15 @@ )) process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('*'), - destinations = cms.untracked.vstring('read'), - read = cms.untracked.PSet( threshold = cms.untracked.string('INFO')) + files = cms.untracked.PSet( + read = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) process.readstruct = cms.EDAnalyzer("SiPixelFedCablingMapAnalyzer") diff --git a/CondFormats/SiPixelTransient/interface/SiPixelGenError.h b/CondFormats/SiPixelTransient/interface/SiPixelGenError.h index 6b68e1f0749a2..9e3b9c713a098 100644 --- a/CondFormats/SiPixelTransient/interface/SiPixelGenError.h +++ b/CondFormats/SiPixelTransient/interface/SiPixelGenError.h @@ -112,10 +112,18 @@ struct SiPixelGenErrorStore { //!< template storage structure // ****************************************************************************************** class SiPixelGenError { public: - SiPixelGenError(const std::vector& thePixelTemp) : thePixelTemp_(thePixelTemp) { - id_current_ = -1; - index_id_ = -1; - } //!< Constructor for cases in which template store already exists + SiPixelGenError(const std::vector& thePixelTemp) + : id_current_(-1), + index_id_(-1), + lorxwidth_(0), + lorywidth_(0), + lorxbias_(0), + lorybias_(0), + fbin_{0, 0, 0}, + xsize_(0), + ysize_(0), + zsize_(0), + thePixelTemp_(thePixelTemp) {} //!< Constructor for cases in which template store already exists // Load the private store with info from the file with the index (int) filenum from directory dir: // ${dir}generror_summary_zp${filenum}.out diff --git a/CondFormats/SiPixelTransient/interface/SiPixelTemplate.h b/CondFormats/SiPixelTransient/interface/SiPixelTemplate.h index 1a1c058e8d06b..2b9990fd83b5d 100644 --- a/CondFormats/SiPixelTransient/interface/SiPixelTemplate.h +++ b/CondFormats/SiPixelTransient/interface/SiPixelTemplate.h @@ -207,29 +207,20 @@ struct SiPixelTemplateHeader { //!< template header structure struct SiPixelTemplateStore { //!< template storage structure SiPixelTemplateHeader head; #ifndef SI_PIXEL_TEMPLATE_USE_BOOST - float cotbetaY[TEMP_ENTRY_SIZEY]; - float cotbetaX[TEMP_ENTRY_SIZEX_B]; - float cotalphaX[TEMP_ENTRY_SIZEX_A]; + std::array cotbetaY; + std::array cotbetaX; + std::array cotalphaX; //!< 60 y templates spanning cluster lengths from 0px to +18px SiPixelTemplateEntry enty[TEMP_ENTRY_SIZEY]; //!< 60 Barrel x templates spanning cluster lengths from -6px (-1.125Rad) to +6px (+1.125Rad) in each of 60 slices SiPixelTemplateEntry entx[TEMP_ENTRY_SIZEX_B][TEMP_ENTRY_SIZEX_A]; - void destroy(){}; #else - float* cotbetaY = nullptr; - float* cotbetaX = nullptr; - float* cotalphaX = nullptr; + std::vector cotbetaY; + std::vector cotbetaX; + std::vector cotalphaX; boost::multi_array enty; //!< use 1d entry to store [60] entries //!< use 2d entry to store [60][60] entries boost::multi_array entx; - void destroy() { // deletes arrays created by pushfile method of SiPixelTemplate - if (cotbetaY != nullptr) - delete[] cotbetaY; - if (cotbetaX != nullptr) - delete[] cotbetaX; - if (cotalphaX != nullptr) - delete[] cotalphaX; - } #endif }; diff --git a/CondFormats/SiPixelTransient/interface/SiPixelTemplate2D.h b/CondFormats/SiPixelTransient/interface/SiPixelTemplate2D.h index 4e7323277aa59..bc06cd78e0684 100644 --- a/CondFormats/SiPixelTransient/interface/SiPixelTemplate2D.h +++ b/CondFormats/SiPixelTransient/interface/SiPixelTemplate2D.h @@ -100,14 +100,10 @@ struct SiPixelTemplateHeader2D { //!< template header structure }; struct SiPixelTemplateStore2D { //!< template storage structure - SiPixelTemplateHeader2D head; - SiPixelTemplateEntry2D** entry = nullptr; //!< use 2d entry to store BPix and FPix entries [dynamically allocated] - void destroy() { // deletes arrays created by pushfile method of SiPixelTemplate - if (entry != nullptr) { - delete[] entry[0]; - delete[] entry; - } - } + SiPixelTemplateHeader2D head; //!< Header information + + //!< use 2d entry to store BPix and FPix entries [dynamically allocated] + std::vector> entry; }; // ****************************************************************************************** diff --git a/CondFormats/SiPixelTransient/interface/SiPixelTemplateDefs.h b/CondFormats/SiPixelTransient/interface/SiPixelTemplateDefs.h index 8ca5b703d755c..f92939ab92609 100644 --- a/CondFormats/SiPixelTransient/interface/SiPixelTemplateDefs.h +++ b/CondFormats/SiPixelTransient/interface/SiPixelTemplateDefs.h @@ -40,7 +40,7 @@ #define T2HY 10 // = T2YSIZE/2 #define T2HYP1 T2HY + 1 // = T2YSIZE/2+1 #define T2HX 3 // = T2XSIZE/2 -#define TEMP_ENTRY_SIZEX_A 60 -#define TEMP_ENTRY_SIZEX_B 60 -#define TEMP_ENTRY_SIZEY 60 +#define TEMP_ENTRY_SIZEX_A 80 +#define TEMP_ENTRY_SIZEX_B 80 +#define TEMP_ENTRY_SIZEY 100 #endif diff --git a/CondFormats/SiPixelTransient/src/SiPixelTemplate.cc b/CondFormats/SiPixelTransient/src/SiPixelTemplate.cc index 9597a44d8f2b6..0abd8ce445fbe 100644 --- a/CondFormats/SiPixelTransient/src/SiPixelTemplate.cc +++ b/CondFormats/SiPixelTransient/src/SiPixelTemplate.cc @@ -235,9 +235,9 @@ bool SiPixelTemplate::pushfile(int filenum, std::vector& p // next, layout the 1-d/2-d structures needed to store template - theCurrentTemp.cotbetaY = new float[theCurrentTemp.head.NTy]; - theCurrentTemp.cotbetaX = new float[theCurrentTemp.head.NTyx]; - theCurrentTemp.cotalphaX = new float[theCurrentTemp.head.NTxx]; + theCurrentTemp.cotbetaY = std::vector(theCurrentTemp.head.NTy); + theCurrentTemp.cotbetaX = std::vector(theCurrentTemp.head.NTyx); + theCurrentTemp.cotalphaX = std::vector(theCurrentTemp.head.NTxx); theCurrentTemp.enty.resize(boost::extents[theCurrentTemp.head.NTy]); @@ -814,9 +814,9 @@ bool SiPixelTemplate::pushfile(const SiPixelTemplateDBObject& dbobject, std::vec #ifdef SI_PIXEL_TEMPLATE_USE_BOOST // next, layout the 1-d/2-d structures needed to store template - theCurrentTemp.cotbetaY = new float[theCurrentTemp.head.NTy]; - theCurrentTemp.cotbetaX = new float[theCurrentTemp.head.NTyx]; - theCurrentTemp.cotalphaX = new float[theCurrentTemp.head.NTxx]; + theCurrentTemp.cotbetaY = std::vector(theCurrentTemp.head.NTy); + theCurrentTemp.cotbetaX = std::vector(theCurrentTemp.head.NTyx); + theCurrentTemp.cotalphaX = std::vector(theCurrentTemp.head.NTxx); theCurrentTemp.enty.resize(boost::extents[theCurrentTemp.head.NTy]); theCurrentTemp.entx.resize(boost::extents[theCurrentTemp.head.NTyx][theCurrentTemp.head.NTxx]); @@ -3153,18 +3153,18 @@ int SiPixelTemplate::qbin(int id, auto yxratio = 0.f; { - auto j = std::lower_bound(templ.cotbetaX, templ.cotbetaX + Nyx, acotb); - if (j == templ.cotbetaX + Nyx) { + auto j = std::lower_bound(templ.cotbetaX.begin(), templ.cotbetaX.begin() + Nyx, acotb); + if (j == templ.cotbetaX.begin() + Nyx) { --j; yxratio = 1.f; - } else if (j == templ.cotbetaX) { + } else if (j == templ.cotbetaX.begin()) { ++j; yxratio = 0.f; } else { yxratio = (acotb - (*(j - 1))) / ((*j) - (*(j - 1))); } - iyhigh = j - templ.cotbetaX; + iyhigh = j - templ.cotbetaX.begin(); iylow = iyhigh - 1; } @@ -3173,18 +3173,18 @@ int SiPixelTemplate::qbin(int id, auto xxratio = 0.f; { - auto j = std::lower_bound(templ.cotalphaX, templ.cotalphaX + Nxx, cota); - if (j == templ.cotalphaX + Nxx) { + auto j = std::lower_bound(templ.cotalphaX.begin(), templ.cotalphaX.begin() + Nxx, cota); + if (j == templ.cotalphaX.begin() + Nxx) { --j; xxratio = 1.f; - } else if (j == templ.cotalphaX) { + } else if (j == templ.cotalphaX.begin()) { ++j; xxratio = 0.f; } else { xxratio = (cota - (*(j - 1))) / ((*j) - (*(j - 1))); } - ihigh = j - templ.cotalphaX; + ihigh = j - templ.cotalphaX.begin(); ilow = ihigh - 1; } diff --git a/CondFormats/SiPixelTransient/src/SiPixelTemplate2D.cc b/CondFormats/SiPixelTransient/src/SiPixelTemplate2D.cc index 87aff5bb8416d..4000ed799f84d 100644 --- a/CondFormats/SiPixelTransient/src/SiPixelTemplate2D.cc +++ b/CondFormats/SiPixelTransient/src/SiPixelTemplate2D.cc @@ -166,10 +166,9 @@ bool SiPixelTemplate2D::pushfile(int filenum, std::vector W_eff &&& - float eff_charge_cut_high, //!< Use edge if < W_eff &&& + float eff_charge_cut_low, //!< Use edge if > w_eff &&& + float eff_charge_cut_high, //!< Use edge if < w_eff &&& float size_cut //!< Use edge when size == cuts ) { //cout<<" in PixelCPEGeneric:generic_position_formula - "<= size_cut) || ((W_eff / pitch < eff_charge_cut_low) | (W_eff / pitch > eff_charge_cut_high))) { - W_eff = pitch * 0.5f * sum_of_edge; // ave. length of edge pixels (first+last) (cm) + if ((size >= size_cut) || ((w_eff / pitch < eff_charge_cut_low) | (w_eff / pitch > eff_charge_cut_high))) { + w_eff = pitch * 0.5f * sum_of_edge; // ave. length of edge pixels (first+last) (cm) // usedEdgeAlgo = true; } //--- Finally, compute the position in this projection - float Qdiff = Q_l - Q_f; - float Qsum = Q_l + Q_f; + float qdiff = q_l - q_f; + float qsum = q_l + q_f; //--- Temporary fix for clusters with both first and last pixel with charge = 0 - if (Qsum == 0) - Qsum = 1.0f; + if (qsum == 0) + qsum = 1.0f; - //float hit_pos = geom_center + 0.5f*(Qdiff/Qsum) * W_eff + half_lorentz_shift; - float hit_pos = geom_center + 0.5f * (Qdiff / Qsum) * W_eff; + //float hit_pos = geom_center + 0.5f*(qdiff/qsum) * w_eff + half_lorentz_shift; + float hit_pos = geom_center + 0.5f * (qdiff / qsum) * w_eff; return hit_pos; } diff --git a/CondTools/BeamSpot/test/BeamSpotOnlineHLTRcdReader_cfg.py b/CondTools/BeamSpot/test/BeamSpotOnlineHLTRcdReader_cfg.py index 492ad875512c2..c11db68926bd5 100644 --- a/CondTools/BeamSpot/test/BeamSpotOnlineHLTRcdReader_cfg.py +++ b/CondTools/BeamSpot/test/BeamSpotOnlineHLTRcdReader_cfg.py @@ -3,7 +3,6 @@ process = cms.Process("READ") process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['cout', 'cerr'] process.MessageLogger.cerr.FwkReport.reportEvery = 100000 # do not clog output with IO process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10000000) ) # large number of events is needed since we probe 5000LS for run (see below) @@ -66,4 +65,4 @@ ) # Put module in path: -process.p = cms.Path(process.beamspotonlinereader) \ No newline at end of file +process.p = cms.Path(process.beamspotonlinereader) diff --git a/CondTools/BeamSpot/test/BeamSpotOnlineLegacyRcdReader_cfg.py b/CondTools/BeamSpot/test/BeamSpotOnlineLegacyRcdReader_cfg.py index 6a21912732dad..096d7322de93f 100644 --- a/CondTools/BeamSpot/test/BeamSpotOnlineLegacyRcdReader_cfg.py +++ b/CondTools/BeamSpot/test/BeamSpotOnlineLegacyRcdReader_cfg.py @@ -3,7 +3,6 @@ process = cms.Process("READ") process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['cout', 'cerr'] process.MessageLogger.cerr.FwkReport.reportEvery = 100000 # do not clog output with IO process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10000000) ) # large number of events is needed since we probe 5000LS for run (see below) @@ -67,4 +66,4 @@ ) # Put module in path: -process.p = cms.Path(process.beamspotonlinereader) \ No newline at end of file +process.p = cms.Path(process.beamspotonlinereader) diff --git a/CondTools/BeamSpot/test/BeamSpotRcdRead_cfg.py b/CondTools/BeamSpot/test/BeamSpotRcdRead_cfg.py index 9132e1e07331f..2469a9cf397f1 100644 --- a/CondTools/BeamSpot/test/BeamSpotRcdRead_cfg.py +++ b/CondTools/BeamSpot/test/BeamSpotRcdRead_cfg.py @@ -3,7 +3,6 @@ process = cms.Process("READ") process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['cout', 'cerr'] process.MessageLogger.cerr.FwkReport.reportEvery = 1000000 # do not clog output with IO process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10000000) ) # large number of events is needed since we probe 5000LS for run (see below) diff --git a/CondTools/DQM/plugins/DQMReferenceHistogramRootFileEventSetupAnalyzer.cc b/CondTools/DQM/plugins/DQMReferenceHistogramRootFileEventSetupAnalyzer.cc index f2a79385d95bb..7ec38ab5406f9 100644 --- a/CondTools/DQM/plugins/DQMReferenceHistogramRootFileEventSetupAnalyzer.cc +++ b/CondTools/DQM/plugins/DQMReferenceHistogramRootFileEventSetupAnalyzer.cc @@ -4,13 +4,12 @@ #include #include -#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Run.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Utilities/interface/Exception.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "CondFormats/Common/interface/FileBlob.h" @@ -18,7 +17,7 @@ #include "DQMServices/Core/interface/DQMStore.h" namespace edmtest { - class DQMReferenceHistogramRootFileEventSetupAnalyzer : public edm::EDAnalyzer { + class DQMReferenceHistogramRootFileEventSetupAnalyzer : public edm::one::EDAnalyzer<> { public: typedef dqm::legacy::MonitorElement MonitorElement; typedef dqm::legacy::DQMStore DQMStore; @@ -26,26 +25,32 @@ namespace edmtest { explicit DQMReferenceHistogramRootFileEventSetupAnalyzer(int i); ~DQMReferenceHistogramRootFileEventSetupAnalyzer() override; void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - void beginRun(edm::Run const&, edm::EventSetup const&) override; + void beginRun(edm::Run const&, edm::EventSetup const&); private: + const edm::ESGetToken fileBlobToken_; bool init_; }; DQMReferenceHistogramRootFileEventSetupAnalyzer::DQMReferenceHistogramRootFileEventSetupAnalyzer( - const edm::ParameterSet& ps) { + const edm::ParameterSet& ps) + : fileBlobToken_(esConsumes()) { init_ = false; - //std::cout << "DQMReferenceHistogramRootFileEventSetupAnalyzer(const edm::ParameterSet &ps)" << std::endl; + edm::LogPrint("DQMReferenceHistogramRootFileEventSetupAnalyzer") + << "DQMReferenceHistogramRootFileEventSetupAnalyzer(const edm::ParameterSet &ps)" << std::endl; } - DQMReferenceHistogramRootFileEventSetupAnalyzer::DQMReferenceHistogramRootFileEventSetupAnalyzer(int i) { + DQMReferenceHistogramRootFileEventSetupAnalyzer::DQMReferenceHistogramRootFileEventSetupAnalyzer(int i) + : fileBlobToken_(esConsumes()) { init_ = false; - //std::cout << "DQMReferenceHistogramRootFileEventSetupAnalyzer(int i) " << i << std::endl; + edm::LogPrint("DQMReferenceHistogramRootFileEventSetupAnalyzer") + << "DQMReferenceHistogramRootFileEventSetupAnalyzer(int i) " << i << std::endl; } DQMReferenceHistogramRootFileEventSetupAnalyzer::~DQMReferenceHistogramRootFileEventSetupAnalyzer() { init_ = false; - //std::cout << "~DQMReferenceHistogramRootFileEventSetupAnalyzer" << std::endl; + edm::LogPrint("DQMReferenceHistogramRootFileEventSetupAnalyzer") + << "~DQMReferenceHistogramRootFileEventSetupAnalyzer" << std::endl; } void DQMReferenceHistogramRootFileEventSetupAnalyzer::analyze(const edm::Event& iEvent, @@ -54,7 +59,8 @@ namespace edmtest { } void DQMReferenceHistogramRootFileEventSetupAnalyzer::beginRun(edm::Run const& run, edm::EventSetup const& iSetup) { - //std::cout << "DQMReferenceHistogramRootFileEventSetupAnalyzer::beginRun()" << std::endl; + edm::LogPrint("DQMReferenceHistogramRootFileEventSetupAnalyzer") + << "DQMReferenceHistogramRootFileEventSetupAnalyzer::beginRun()" << std::endl; if (!init_) { init_ = true; edm::eventsetup::EventSetupRecordKey recordKey( @@ -63,9 +69,8 @@ namespace edmtest { throw cms::Exception("Record not found") << "Record \"DQMReferenceHistogramRootFileRcd" << "\" does not exist!" << std::endl; } - edm::ESHandle rootgeo; - iSetup.get().get(rootgeo); - //std::cout<<"ROOT FILE IN MEMORY"< > tb((*rootgeo).getUncompressedBlob()); // char filename[128]; // sprintf(filename, "mem:%p,%ul", &(*tb)[0], (unsigned long) tb->size()); @@ -82,10 +87,10 @@ namespace edmtest { remove(outfile.c_str()); std::vector mes = dqm->getAllContents(""); - // for (std::vector::iterator i = mes.begin(), e = mes.end(); i != e; ++i) - // std::cout << "ME '" << (*i)->getFullname() << "'\n"; + for (std::vector::iterator i = mes.begin(), e = mes.end(); i != e; ++i) + edm::LogPrint("DQMReferenceHistogramRootFileEventSetupAnalyzer") << "ME '" << (*i)->getFullname() << "'\n"; - //std::cout<<"SIZE FILE = "<size()< namespace edmtest { - class DQMSummaryEventSetupAnalyzer : public edm::EDAnalyzer { + class DQMSummaryEventSetupAnalyzer : public edm::one::EDAnalyzer<> { public: explicit DQMSummaryEventSetupAnalyzer(const edm::ParameterSet& pset); explicit DQMSummaryEventSetupAnalyzer(int i); ~DQMSummaryEventSetupAnalyzer() override; void analyze(const edm::Event& event, const edm::EventSetup& setup) override; + + private: + const edm::ESGetToken dqmSummaryToken_; }; - DQMSummaryEventSetupAnalyzer::DQMSummaryEventSetupAnalyzer(const edm::ParameterSet& pset) { - std::cout << "DQMSummaryEventSetupAnalyzer" << std::endl; + DQMSummaryEventSetupAnalyzer::DQMSummaryEventSetupAnalyzer(const edm::ParameterSet& pset) + : dqmSummaryToken_(esConsumes()) { + edm::LogPrint("DQMSummaryEventSetupAnalyzer") << "DQMSummaryEventSetupAnalyzer" << std::endl; } - DQMSummaryEventSetupAnalyzer::DQMSummaryEventSetupAnalyzer(int i) { - std::cout << "DQMSummaryEventSetupAnalyzer" << i << std::endl; + DQMSummaryEventSetupAnalyzer::DQMSummaryEventSetupAnalyzer(int i) : dqmSummaryToken_(esConsumes()) { + edm::LogPrint("DQMSummaryEventSetupAnalyzer") << "DQMSummaryEventSetupAnalyzer" << i << std::endl; } DQMSummaryEventSetupAnalyzer::~DQMSummaryEventSetupAnalyzer() { - std::cout << "~DQMSummaryEventSetupAnalyzer" << std::endl; + edm::LogPrint("DQMSummaryEventSetupAnalyzer") << "~DQMSummaryEventSetupAnalyzer" << std::endl; } void DQMSummaryEventSetupAnalyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) { - std::cout << "### DQMSummaryEventSetupAnalyzer::analyze" << std::endl; - std::cout << "--- RUN NUMBER: " << event.id().run() << std::endl; - std::cout << "--- EVENT NUMBER: " << event.id().event() << std::endl; + edm::LogPrint("DQMSummaryEventSetupAnalyzer") << "### DQMSummaryEventSetupAnalyzer::analyze" << std::endl; + edm::LogPrint("DQMSummaryEventSetupAnalyzer") << "--- RUN NUMBER: " << event.id().run() << std::endl; + edm::LogPrint("DQMSummaryEventSetupAnalyzer") << "--- EVENT NUMBER: " << event.id().event() << std::endl; edm::eventsetup::EventSetupRecordKey recordKey( edm::eventsetup::EventSetupRecordKey::TypeTag::findType("DQMSummaryRcd")); if (recordKey.type() == edm::eventsetup::EventSetupRecordKey::TypeTag()) { throw cms::Exception("Record not found") << "Record \"DQMSummaryRcd" << "\" does not exist!" << std::endl; } - edm::ESHandle sum; - std::cout << "got EShandle" << std::endl; - setup.get().get(sum); - std::cout << "got the Event Setup" << std::endl; + + edm::LogPrint("DQMSummaryEventSetupAnalyzer") << "got EShandle" << std::endl; + edm::ESHandle sum = setup.getHandle(dqmSummaryToken_); + edm::LogPrint("DQMSummaryEventSetupAnalyzer") << "got the Event Setup" << std::endl; const DQMSummary* summary = sum.product(); - std::cout << "got DQMSummary* " << std::endl; - std::cout << "print result" << std::endl; + edm::LogPrint("DQMSummaryEventSetupAnalyzer") << "got DQMSummary* " << std::endl; + edm::LogPrint("DQMSummaryEventSetupAnalyzer") << "print result" << std::endl; summary->printAllValues(); } diff --git a/CondTools/DQM/plugins/DQMXMLFileEventSetupAnalyzer.cc b/CondTools/DQM/plugins/DQMXMLFileEventSetupAnalyzer.cc index 9eda93e7dbda4..16fb5d2517323 100644 --- a/CondTools/DQM/plugins/DQMXMLFileEventSetupAnalyzer.cc +++ b/CondTools/DQM/plugins/DQMXMLFileEventSetupAnalyzer.cc @@ -4,13 +4,12 @@ #include #include -#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Run.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Utilities/interface/Exception.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "CondFormats/Common/interface/FileBlob.h" @@ -18,39 +17,43 @@ #include "DQMServices/Core/interface/DQMStore.h" namespace edmtest { - class DQMXMLFileEventSetupAnalyzer : public edm::EDAnalyzer { + class DQMXMLFileEventSetupAnalyzer : public edm::one::EDAnalyzer<> { public: explicit DQMXMLFileEventSetupAnalyzer(const edm::ParameterSet& pset); explicit DQMXMLFileEventSetupAnalyzer(int i); ~DQMXMLFileEventSetupAnalyzer() override; void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - void beginRun(edm::Run const&, edm::EventSetup const&) override; + void beginRun(edm::Run const&, edm::EventSetup const&); private: + const edm::ESGetToken fileBlobToken_; bool init_; std::string labelToGet_; }; DQMXMLFileEventSetupAnalyzer::DQMXMLFileEventSetupAnalyzer(const edm::ParameterSet& ps) - : labelToGet_(ps.getParameter("labelToGet")) { + : fileBlobToken_( + esConsumes(edm::ESInputTag("", ps.getParameter("labelToGet")))), + labelToGet_(ps.getParameter("labelToGet")) { init_ = false; - //std::cout << "DQMXMLFileEventSetupAnalyzer(const edm::ParameterSet &ps)" << std::endl; + edm::LogPrint("DQMXMLFileEventSetupAnalyzer") + << "DQMXMLFileEventSetupAnalyzer(const edm::ParameterSet &ps)" << std::endl; } DQMXMLFileEventSetupAnalyzer::DQMXMLFileEventSetupAnalyzer(int i) { init_ = false; - //std::cout << "DQMXMLFileEventSetupAnalyzer(int i) " << i << std::endl; + edm::LogPrint("DQMXMLFileEventSetupAnalyzer") << "DQMXMLFileEventSetupAnalyzer(int i) " << i << std::endl; } DQMXMLFileEventSetupAnalyzer::~DQMXMLFileEventSetupAnalyzer() { init_ = false; - //std::cout << "~DQMXMLFileEventSetupAnalyzer" << std::endl; + edm::LogPrint("DQMXMLFileEventSetupAnalyzer") << "~DQMXMLFileEventSetupAnalyzer" << std::endl; } void DQMXMLFileEventSetupAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { return; } void DQMXMLFileEventSetupAnalyzer::beginRun(edm::Run const& run, edm::EventSetup const& iSetup) { - //std::cout << "DQMXMLFileEventSetupAnalyzer::beginRun()" << std::endl; + edm::LogPrint("DQMXMLFileEventSetupAnalyzer") << "DQMXMLFileEventSetupAnalyzer::beginRun()" << std::endl; if (!init_) { init_ = true; edm::eventsetup::EventSetupRecordKey recordKey( @@ -59,9 +62,9 @@ namespace edmtest { throw cms::Exception("Record not found") << "Record \"DQMXMLFileRcd" << "\" does not exist!" << std::endl; } - edm::ESHandle rootgeo; - iSetup.get().get(labelToGet_, rootgeo); - //std::cout<<"XML FILE IN MEMORY 1 with label " << labelToGet_ < > tb1((*rootgeo).getUncompressedBlob()); //here you can implement the stream for putting the TFile on disk... std::string outfile1("XML1_retrieved.xml"); diff --git a/CondTools/DT/test/dbgeom_dump.py b/CondTools/DT/test/dbgeom_dump.py index 14e5547539bb9..628a2c68f87a1 100644 --- a/CondTools/DT/test/dbgeom_dump.py +++ b/CondTools/DT/test/dbgeom_dump.py @@ -6,18 +6,28 @@ process = cms.Process("TEST") # CondDB -process.load("CondCore.DBCommon.CondDBSetup_cfi") +process.load("CondCore.CondDB.CondDB_cfi") # Geometry process.load("Geometry.CMSCommonData.cmsSimIdealGeometryXML_cfi") process.load("Geometry.DTGeometry.dtGeometry_cfi") process.load("Geometry.MuonNumbering.muonNumberingInitialization_cfi") process.load("Geometry.CommonTopologies.globalTrackingGeometry_cfi") +process.load("Geometry.MuonNumbering.muonGeometryConstants_cff") +process.load('Configuration.StandardSequences.DD4hep_GeometrySim_cff') +process.load('FWCore.MessageService.MessageLogger_cfi') + +process.MessageLogger = cms.Service("MessageLogger", + destinations = cms.untracked.vstring('myLogDT'), + myLogDT = cms.untracked.PSet( + threshold = cms.untracked.string('INFO'), + ) +) -#process.load("Geometry.MuonCommonData.muonIdealGeometryXML_cfi") -#process.load("Geometry.DTGeometryBuilder.dtGeometry_cfi") - +process.muonGeometryConstants.fromDD4Hep = True process.DTGeometryESModule.applyAlignment = cms.bool(False) +process.DTGeometryESModule.fromDDD = cms.bool(True) +process.DTGeometryESModule.fromDD4hep = cms.bool(False) process.source = cms.Source("EmptySource", numberEventsInRun = cms.untracked.uint32(1), diff --git a/CondTools/Ecal/src/EcalTPGWeightIdMapHandler.cc b/CondTools/Ecal/src/EcalTPGWeightIdMapHandler.cc index cb3790ccaab4e..67aba5bdc1dc4 100644 --- a/CondTools/Ecal/src/EcalTPGWeightIdMapHandler.cc +++ b/CondTools/Ecal/src/EcalTPGWeightIdMapHandler.cc @@ -281,7 +281,7 @@ void popcon::EcalTPGWeightIdMapHandler::readxmlFile() { unsigned int wloc[5]; EcalTPGWeights w; EcalTPGWeightIdMap* weightMap = new EcalTPGWeightIdMap; - int ngroups, igroups; + int ngroups, igroups = 0; edm::LogInfo("EcalTPGWeightIdMapHandler") << "found " << igroups << "Weight groups"; for (int i = 0; i < 5; i++) std::getline(fxml, dummyLine); // skip first lines diff --git a/CondTools/Geometry/plugins/CSCRecoIdealDBLoader.cc b/CondTools/Geometry/plugins/CSCRecoIdealDBLoader.cc index a16ea17040234..40c29446fd2c7 100644 --- a/CondTools/Geometry/plugins/CSCRecoIdealDBLoader.cc +++ b/CondTools/Geometry/plugins/CSCRecoIdealDBLoader.cc @@ -31,7 +31,7 @@ class CSCRecoIdealDBLoader : public edm::one::EDAnalyzer { }; CSCRecoIdealDBLoader::CSCRecoIdealDBLoader(const edm::ParameterSet& iC) { - fromDD4Hep_ = iC.getParameter("fromDD4Hep"); + fromDD4Hep_ = iC.getUntrackedParameter("fromDD4Hep", false); } void CSCRecoIdealDBLoader::beginRun(const edm::Run&, edm::EventSetup const& es) { diff --git a/CondTools/Geometry/plugins/DTRecoIdealDBLoader.cc b/CondTools/Geometry/plugins/DTRecoIdealDBLoader.cc index 7f88ad2694086..5868a325a66f1 100644 --- a/CondTools/Geometry/plugins/DTRecoIdealDBLoader.cc +++ b/CondTools/Geometry/plugins/DTRecoIdealDBLoader.cc @@ -1,5 +1,8 @@ #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "CondCore/DBOutputService/interface/PoolDBOutputService.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/ESTransientHandle.h" #include "FWCore/Framework/interface/ESHandle.h" @@ -12,16 +15,26 @@ #include "Geometry/MuonNumbering/interface/MuonGeometryConstants.h" #include "Geometry/DTGeometryBuilder/src/DTGeometryParsFromDD.h" #include "DetectorDescription/Core/interface/DDCompactView.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" +#include "DetectorDescription/DDCMS/interface/DDCompactView.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" class DTRecoIdealDBLoader : public edm::one::EDAnalyzer { public: - DTRecoIdealDBLoader(edm::ParameterSet const&) {} + DTRecoIdealDBLoader(edm::ParameterSet const&); void beginRun(edm::Run const& iEvent, edm::EventSetup const&) override; void analyze(edm::Event const& iEvent, edm::EventSetup const&) override {} void endRun(edm::Run const& iEvent, edm::EventSetup const&) override {} + +private: + bool fromDD4Hep_; }; +DTRecoIdealDBLoader::DTRecoIdealDBLoader(const edm::ParameterSet& iC) { + fromDD4Hep_ = iC.getUntrackedParameter("fromDD4Hep", false); +} + void DTRecoIdealDBLoader::beginRun(const edm::Run&, edm::EventSetup const& es) { RecoIdealGeometry* rig = new RecoIdealGeometry; edm::Service mydbservice; @@ -30,16 +43,22 @@ void DTRecoIdealDBLoader::beginRun(const edm::Run&, edm::EventSetup const& es) { return; } - edm::ESTransientHandle pDD; edm::ESHandle pMNDC; - es.get().get(pDD); - es.get().get(pMNDC); - - const DDCompactView& cpv = *pDD; DTGeometryParsFromDD dtgp; - dtgp.build(&cpv, *pMNDC, *rig); - + if (fromDD4Hep_) { + edm::ESTransientHandle pDD; + es.get().get(pDD); + es.get().get(pMNDC); + const cms::DDCompactView& cpv = *pDD; + dtgp.build(&cpv, *pMNDC, *rig); + } else { + edm::ESTransientHandle pDD; + es.get().get(pDD); + es.get().get(pMNDC); + const DDCompactView& cpv = *pDD; + dtgp.build(&cpv, *pMNDC, *rig); + } if (mydbservice->isNewTagRequest("DTRecoGeometryRcd")) { mydbservice->createNewIOV( rig, mydbservice->beginOfTime(), mydbservice->endOfTime(), "DTRecoGeometryRcd"); diff --git a/CondTools/Geometry/plugins/GEMRecoIdealDBLoader.cc b/CondTools/Geometry/plugins/GEMRecoIdealDBLoader.cc index 5f83c137c9907..715b9691bfb7b 100644 --- a/CondTools/Geometry/plugins/GEMRecoIdealDBLoader.cc +++ b/CondTools/Geometry/plugins/GEMRecoIdealDBLoader.cc @@ -3,24 +3,39 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/Framework/interface/MakerMacros.h" - +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "CondCore/DBOutputService/interface/PoolDBOutputService.h" #include "CondFormats/GeometryObjects/interface/RecoIdealGeometry.h" #include "DetectorDescription/Core/interface/DDCompactView.h" +#include "DetectorDescription/DDCMS/interface/DDCompactView.h" #include "Geometry/GEMGeometryBuilder/src/GEMGeometryParsFromDD.h" #include "Geometry/MuonNumbering/interface/MuonGeometryConstants.h" #include "Geometry/Records/interface/GEMRecoGeometryRcd.h" #include "Geometry/Records/interface/MuonNumberingRecord.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "CondCore/DBOutputService/interface/PoolDBOutputService.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" class GEMRecoIdealDBLoader : public edm::one::EDAnalyzer { public: - GEMRecoIdealDBLoader(const edm::ParameterSet&) {} + GEMRecoIdealDBLoader(const edm::ParameterSet&); void beginRun(edm::Run const& iEvent, edm::EventSetup const&) override; void analyze(edm::Event const& iEvent, edm::EventSetup const&) override {} void endRun(edm::Run const& iEvent, edm::EventSetup const&) override {} + +private: + bool fromDD4Hep_; }; +GEMRecoIdealDBLoader::GEMRecoIdealDBLoader(const edm::ParameterSet& iC) { + fromDD4Hep_ = iC.getUntrackedParameter("fromDD4Hep", false); // set true for DD4HEP +} + void GEMRecoIdealDBLoader::beginRun(const edm::Run&, edm::EventSetup const& es) { edm::LogInfo("GEMRecoIdealDBLoader") << "GEMRecoIdealDBLoader::beginRun"; @@ -31,17 +46,25 @@ void GEMRecoIdealDBLoader::beginRun(const edm::Run&, edm::EventSetup const& es) } if (mydbservice->isNewTagRequest("GEMRecoGeometryRcd")) { - edm::ESTransientHandle pDD; edm::ESHandle pMNDC; - es.get().get(pDD); - es.get().get(pMNDC); - - const DDCompactView& cpv = *pDD; GEMGeometryParsFromDD rpcpd; - RecoIdealGeometry* rig = new RecoIdealGeometry; - rpcpd.build(&cpv, *pMNDC, *rig); + if (fromDD4Hep_) { + edm::LogVerbatim("GEMRecoIdealDBLoader") << "(0) GEMRecoIdealDBLoader - DD4HEP "; + edm::ESTransientHandle pDD; + es.get().get(pDD); + es.get().get(pMNDC); + const cms::DDCompactView& cpv = *pDD; + rpcpd.build(&cpv, *pMNDC, *rig); + } else { + edm::LogVerbatim("GEMRecoIdealDBLoader") << "(0) GEMRecoIdealDBLoader - DDD "; + edm::ESTransientHandle pDD; + es.get().get(pDD); + es.get().get(pMNDC); + const DDCompactView& cpv = *pDD; + rpcpd.build(&cpv, *pMNDC, *rig); + } mydbservice->createNewIOV( rig, mydbservice->beginOfTime(), mydbservice->endOfTime(), "GEMRecoGeometryRcd"); } else { diff --git a/CondTools/Geometry/plugins/ME0RecoIdealDBLoader.cc b/CondTools/Geometry/plugins/ME0RecoIdealDBLoader.cc index f3b18d83201f6..fefc349635770 100644 --- a/CondTools/Geometry/plugins/ME0RecoIdealDBLoader.cc +++ b/CondTools/Geometry/plugins/ME0RecoIdealDBLoader.cc @@ -3,24 +3,37 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/Framework/interface/MakerMacros.h" - +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "CondCore/DBOutputService/interface/PoolDBOutputService.h" #include "CondFormats/GeometryObjects/interface/RecoIdealGeometry.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" #include "DetectorDescription/Core/interface/DDCompactView.h" +#include "DetectorDescription/DDCMS/interface/DDCompactView.h" #include "Geometry/GEMGeometryBuilder/src/ME0GeometryParsFromDD.h" #include "Geometry/MuonNumbering/interface/MuonGeometryConstants.h" #include "Geometry/Records/interface/ME0RecoGeometryRcd.h" #include "Geometry/Records/interface/MuonNumberingRecord.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" class ME0RecoIdealDBLoader : public edm::one::EDAnalyzer { public: - ME0RecoIdealDBLoader(const edm::ParameterSet&) {} + ME0RecoIdealDBLoader(const edm::ParameterSet&); void beginRun(edm::Run const& iEvent, edm::EventSetup const&) override; void analyze(edm::Event const& iEvent, edm::EventSetup const&) override {} void endRun(edm::Run const& iEvent, edm::EventSetup const&) override {} + +private: + bool fromDD4Hep_; }; +ME0RecoIdealDBLoader::ME0RecoIdealDBLoader(const edm::ParameterSet& iC) { + fromDD4Hep_ = iC.getUntrackedParameter("fromDD4Hep", false); // set true for DD4HEP +} + void ME0RecoIdealDBLoader::beginRun(const edm::Run&, edm::EventSetup const& es) { edm::LogInfo("ME0RecoIdealDBLoader") << "ME0RecoIdealDBLoader::beginRun"; @@ -31,17 +44,24 @@ void ME0RecoIdealDBLoader::beginRun(const edm::Run&, edm::EventSetup const& es) } if (mydbservice->isNewTagRequest("ME0RecoGeometryRcd")) { - edm::ESTransientHandle pDD; edm::ESHandle pMNDC; - es.get().get(pDD); - es.get().get(pMNDC); - - const DDCompactView& cpv = *pDD; ME0GeometryParsFromDD me0pd; - RecoIdealGeometry* rig = new RecoIdealGeometry; - me0pd.build(&cpv, *pMNDC, *rig); - + if (fromDD4Hep_) { + edm::LogVerbatim("ME0RecoIdealDBLoader") << "(0) ME0RecoIdealDBLoader - DD4HEP "; + edm::ESTransientHandle pDD; + es.get().get(pDD); + es.get().get(pMNDC); + const cms::DDCompactView& cpv = *pDD; + me0pd.build(&cpv, *pMNDC, *rig); + } else { + edm::LogVerbatim("ME0RecoIdealDBLoader") << "(0) ME0RecoIdealDBLoader - DDD "; + edm::ESTransientHandle pDD; + es.get().get(pDD); + es.get().get(pMNDC); + const DDCompactView& cpv = *pDD; + me0pd.build(&cpv, *pMNDC, *rig); + } mydbservice->createNewIOV( rig, mydbservice->beginOfTime(), mydbservice->endOfTime(), "ME0RecoGeometryRcd"); } else { diff --git a/CondTools/Geometry/plugins/PPSGeometryBuilder.cc b/CondTools/Geometry/plugins/PPSGeometryBuilder.cc index 20b4728ba45fa..af320fbdd1c5c 100644 --- a/CondTools/Geometry/plugins/PPSGeometryBuilder.cc +++ b/CondTools/Geometry/plugins/PPSGeometryBuilder.cc @@ -37,6 +37,7 @@ class PPSGeometryBuilder : public edm::one::EDAnalyzer<> { bool fromDD4hep_; std::string compactViewTag_; + bool isRun2_; edm::ESGetToken ddToken_; edm::ESGetToken dd4hepToken_; edm::ESWatcher watcherIdealGeometry_; @@ -46,6 +47,7 @@ class PPSGeometryBuilder : public edm::one::EDAnalyzer<> { PPSGeometryBuilder::PPSGeometryBuilder(const edm::ParameterSet& iConfig) : fromDD4hep_(iConfig.getUntrackedParameter("fromDD4hep", false)), compactViewTag_(iConfig.getUntrackedParameter("compactViewTag", "XMLIdealGeometryESSource_CTPPS")), + isRun2_(iConfig.getUntrackedParameter("isRun2", false)), ddToken_(esConsumes(edm::ESInputTag("", compactViewTag_))), dd4hepToken_(esConsumes(edm::ESInputTag("", compactViewTag_))) {} @@ -63,7 +65,7 @@ void PPSGeometryBuilder::analyze(const edm::Event& iEvent, const edm::EventSetup auto const& myCompactView = iSetup.getData(ddToken_); // Build geometry - geoInfoRoot = detgeomdescbuilder::buildDetGeomDescFromCompactView(myCompactView); + geoInfoRoot = detgeomdescbuilder::buildDetGeomDescFromCompactView(myCompactView, isRun2_); } // DD4hep else { @@ -71,7 +73,7 @@ void PPSGeometryBuilder::analyze(const edm::Event& iEvent, const edm::EventSetup auto const& myCompactView = iSetup.getData(dd4hepToken_); // Build geometry - geoInfoRoot = detgeomdescbuilder::buildDetGeomDescFromCompactView(myCompactView); + geoInfoRoot = detgeomdescbuilder::buildDetGeomDescFromCompactView(myCompactView, isRun2_); } } diff --git a/CondTools/Geometry/plugins/RPCRecoIdealDBLoader.cc b/CondTools/Geometry/plugins/RPCRecoIdealDBLoader.cc index af2c25713a707..cfac40f81ea20 100644 --- a/CondTools/Geometry/plugins/RPCRecoIdealDBLoader.cc +++ b/CondTools/Geometry/plugins/RPCRecoIdealDBLoader.cc @@ -14,16 +14,26 @@ #include "Geometry/Records/interface/MuonNumberingRecord.h" #include "Geometry/MuonNumbering/interface/MuonGeometryConstants.h" #include "Geometry/RPCGeometryBuilder/src/RPCGeometryParsFromDD.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" +#include "DetectorDescription/DDCMS/interface/DDCompactView.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" class RPCRecoIdealDBLoader : public edm::one::EDAnalyzer { public: - RPCRecoIdealDBLoader(const edm::ParameterSet&) {} + RPCRecoIdealDBLoader(const edm::ParameterSet&); void beginRun(edm::Run const& iEvent, edm::EventSetup const&) override; void analyze(edm::Event const& iEvent, edm::EventSetup const&) override {} void endRun(edm::Run const& iEvent, edm::EventSetup const&) override {} + +private: + bool fromDD4Hep_; }; +RPCRecoIdealDBLoader::RPCRecoIdealDBLoader(const edm::ParameterSet& iC) { + fromDD4Hep_ = iC.getUntrackedParameter("fromDD4Hep", false); +} + void RPCRecoIdealDBLoader::beginRun(const edm::Run&, edm::EventSetup const& es) { RecoIdealGeometry* rig = new RecoIdealGeometry; edm::Service mydbservice; @@ -32,16 +42,22 @@ void RPCRecoIdealDBLoader::beginRun(const edm::Run&, edm::EventSetup const& es) return; } - edm::ESTransientHandle pDD; edm::ESHandle pMNDC; - es.get().get(pDD); - es.get().get(pMNDC); - - const DDCompactView& cpv = *pDD; RPCGeometryParsFromDD rpcpd; - rpcpd.build(&cpv, *pMNDC, *rig); - + if (fromDD4Hep_) { + edm::ESTransientHandle pDD; + es.get().get(pDD); + es.get().get(pMNDC); + const cms::DDCompactView& cpv = *pDD; + rpcpd.build(&cpv, *pMNDC, *rig); + } else { + edm::ESTransientHandle pDD; + es.get().get(pDD); + es.get().get(pMNDC); + const DDCompactView& cpv = *pDD; + rpcpd.build(&cpv, *pMNDC, *rig); + } if (mydbservice->isNewTagRequest("RPCRecoGeometryRcd")) { mydbservice->createNewIOV( rig, mydbservice->beginOfTime(), mydbservice->endOfTime(), "RPCRecoGeometryRcd"); diff --git a/CondTools/Geometry/test/dtgeometrywriter.py b/CondTools/Geometry/test/dtgeometrywriter.py index 287c4542e33be..fb96947e7e2f9 100644 --- a/CondTools/Geometry/test/dtgeometrywriter.py +++ b/CondTools/Geometry/test/dtgeometrywriter.py @@ -4,6 +4,16 @@ process.load('CondCore.CondDB.CondDB_cfi') process.load('Configuration.StandardSequences.GeometryExtended_cff') process.load('Geometry.MuonNumbering.muonNumberingInitialization_cfi') +process.load("Geometry.MuonNumbering.muonGeometryConstants_cff") +process.load('Configuration.StandardSequences.DD4hep_GeometrySim_cff') +process.load('FWCore.MessageService.MessageLogger_cfi') + +process.MessageLogger = cms.Service("MessageLogger", + destinations = cms.untracked.vstring('myLog'), + myLog = cms.untracked.PSet( + threshold = cms.untracked.string('INFO'), + ) +) process.source = cms.Source("EmptyIOVSource", lastValue = cms.uint64(1), @@ -12,7 +22,8 @@ interval = cms.uint64(1) ) -process.DTGeometryWriter = cms.EDAnalyzer("DTRecoIdealDBLoader") +process.DTGeometryWriter = cms.EDAnalyzer("DTRecoIdealDBLoader", + fromDD4Hep = cms.untracked.bool(False)) process.CondDB.timetype = cms.untracked.string('runnumber') process.CondDB.connect = cms.string('sqlite_file:myfile.db') diff --git a/CondTools/Geometry/test/gemgeometrywriter.py b/CondTools/Geometry/test/gemgeometrywriter.py index cf4dd289c81df..19e72ea81dddc 100644 --- a/CondTools/Geometry/test/gemgeometrywriter.py +++ b/CondTools/Geometry/test/gemgeometrywriter.py @@ -2,8 +2,18 @@ process = cms.Process("GEMGeometryWriter") process.load('CondCore.CondDB.CondDB_cfi') -process.load('Configuration.Geometry.GeometryExtended2019_cff') +process.load('Configuration.Geometry.GeometryExtended2021_cff') process.load('Geometry.MuonNumbering.muonNumberingInitialization_cfi') +process.load("Geometry.MuonNumbering.muonGeometryConstants_cff") +process.load('Configuration.StandardSequences.DD4hep_GeometrySim_cff') +process.load('FWCore.MessageService.MessageLogger_cfi') + +process.MessageLogger = cms.Service("MessageLogger", + destinations = cms.untracked.vstring('myLog'), + myLog = cms.untracked.PSet( + threshold = cms.untracked.string('INFO'), + ) +) process.source = cms.Source("EmptyIOVSource", lastValue = cms.uint64(1), diff --git a/CondTools/Geometry/test/geometrywriter.py b/CondTools/Geometry/test/geometrywriter.py index f0a4d9f3b2569..c6b4c962bb32c 100644 --- a/CondTools/Geometry/test/geometrywriter.py +++ b/CondTools/Geometry/test/geometrywriter.py @@ -18,11 +18,6 @@ ZIP = cms.untracked.bool(True) ) -process.TrackerGeometricDetESModule = cms.ESProducer( "TrackerGeometricDetESModule", - fromDDD = cms.bool( True ) - ) - - process.TrackerGeometryWriter = cms.EDAnalyzer("PGeometricDetBuilder",fromDD4hep=cms.bool( False )) process.TrackerParametersWriter = cms.EDAnalyzer("PTrackerParametersDBBuilder", fromDD4hep=cms.bool( False )) diff --git a/CondTools/Geometry/test/me0geometrywriter.py b/CondTools/Geometry/test/me0geometrywriter.py index 7e9cbf2c52f57..fc8efd659df39 100644 --- a/CondTools/Geometry/test/me0geometrywriter.py +++ b/CondTools/Geometry/test/me0geometrywriter.py @@ -2,8 +2,18 @@ process = cms.Process("ME0GeometryWriter") process.load('CondCore.CondDB.CondDB_cfi') -process.load('Configuration.Geometry.GeometryExtended2026D41_cff') +process.load('Configuration.Geometry.GeometryExtended2026D49_cff') process.load('Geometry.MuonNumbering.muonNumberingInitialization_cfi') +process.load("Geometry.MuonNumbering.muonGeometryConstants_cff") +process.load('Configuration.StandardSequences.DD4hep_GeometrySimPhase2_cff') +process.load('FWCore.MessageService.MessageLogger_cfi') + +process.MessageLogger = cms.Service("MessageLogger", + destinations = cms.untracked.vstring('myLog'), + myLog = cms.untracked.PSet( + threshold = cms.untracked.string('INFO'), + ) +) process.source = cms.Source("EmptyIOVSource", lastValue = cms.uint64(1), diff --git a/CondTools/Geometry/test/ppsgeometrywriter_DD4hep.py b/CondTools/Geometry/test/ppsgeometrywriter_DD4hep.py index df831b9fd83a9..7b9ffed69ca48 100644 --- a/CondTools/Geometry/test/ppsgeometrywriter_DD4hep.py +++ b/CondTools/Geometry/test/ppsgeometrywriter_DD4hep.py @@ -37,11 +37,12 @@ ) # geometry -process.load("Geometry.VeryForwardGeometry.dd4hep.geometryRPFromDD_2018_cfi") +process.load("Geometry.VeryForwardGeometry.dd4hep.geometryRPFromDD_2021_cfi") # DB writer process.ppsGeometryBuilder = cms.EDAnalyzer("PPSGeometryBuilder", fromDD4hep = cms.untracked.bool(True), + isRun2 = cms.untracked.bool(False), compactViewTag = cms.untracked.string('XMLIdealGeometryESSource_CTPPS') ) diff --git a/CondTools/Geometry/test/ppsgeometrywriter_oldDD.py b/CondTools/Geometry/test/ppsgeometrywriter_oldDD.py index 227850425e807..7a2428dedd4e9 100644 --- a/CondTools/Geometry/test/ppsgeometrywriter_oldDD.py +++ b/CondTools/Geometry/test/ppsgeometrywriter_oldDD.py @@ -37,10 +37,11 @@ ) # geometry -process.load("Geometry.VeryForwardGeometry.geometryRPFromDD_2018_cfi") +process.load("Geometry.VeryForwardGeometry.geometryRPFromDD_2021_cfi") # DB writer process.ppsGeometryBuilder = cms.EDAnalyzer("PPSGeometryBuilder", + isRun2 = cms.untracked.bool(False), compactViewTag = cms.untracked.string('XMLIdealGeometryESSource_CTPPS') ) diff --git a/CondTools/Geometry/test/rpcgeometrywriter.py b/CondTools/Geometry/test/rpcgeometrywriter.py index 91810948591fc..639b1696a45ff 100644 --- a/CondTools/Geometry/test/rpcgeometrywriter.py +++ b/CondTools/Geometry/test/rpcgeometrywriter.py @@ -4,6 +4,16 @@ process.load('CondCore.CondDB.CondDB_cfi') process.load('Configuration.StandardSequences.GeometryExtended_cff') process.load('Geometry.MuonNumbering.muonNumberingInitialization_cfi') +process.load("Geometry.MuonNumbering.muonGeometryConstants_cff") +process.load('Configuration.StandardSequences.DD4hep_GeometrySim_cff') +process.load('FWCore.MessageService.MessageLogger_cfi') + +process.MessageLogger = cms.Service("MessageLogger", + destinations = cms.untracked.vstring('myLog'), + myLog = cms.untracked.PSet( + threshold = cms.untracked.string('INFO'), + ) +) process.source = cms.Source("EmptyIOVSource", lastValue = cms.uint64(1), @@ -12,7 +22,8 @@ interval = cms.uint64(1) ) -process.RPCGeometryWriter = cms.EDAnalyzer("RPCRecoIdealDBLoader") +process.RPCGeometryWriter = cms.EDAnalyzer("RPCRecoIdealDBLoader", + fromDD4Hep = cms.untracked.bool(False)) process.CondDB.timetype = cms.untracked.string('runnumber') process.CondDB.connect = cms.string('sqlite_file:myfile.db') diff --git a/CondTools/Geometry/test/writehelpers/createExtended2017Plan1Payloads.sh b/CondTools/Geometry/test/writehelpers/createExtended2017Plan1Payloads.sh index 3106724c58f8a..d2916a28a1edf 100755 --- a/CondTools/Geometry/test/writehelpers/createExtended2017Plan1Payloads.sh +++ b/CondTools/Geometry/test/writehelpers/createExtended2017Plan1Payloads.sh @@ -41,6 +41,18 @@ sed -i '{s/Extended2017Plan1/Extended2017Plan1ZeroMaterial/g}' geometryExtended2 sed -i '{s/\/ge/\/gez/g}' geometryExtended2017Plan1_xmlwriter.py cmsRun geometryExtended2017Plan1_xmlwriter.py +sed -i '{s/Extended2017Plan1ZeroMaterial/Extended2017Plan1FlatMinus05Percent/g}' geometryExtended2017Plan1_xmlwriter.py +sed -i '{s/\/gez/\/geFM05/g}' geometryExtended2017Plan1_xmlwriter.py +cmsRun geometryExtended2017Plan1_xmlwriter.py + +sed -i '{s/Extended2017Plan1FlatMinus10Percent/Extended2017Plan1FlatPlus05Percent/g}' geometryExtended2017Plan1_xmlwriter.py +sed -i '{s/\/geFM10/\/geFP05/g}' geometryExtended2017Plan1_xmlwriter.py +cmsRun geometryExtended2017Plan1_xmlwriter.py + +sed -i '{s/Extended2017Plan1FlatPlus05Percent/Extended2017Plan1FlatPlus10Percent/g}' geometryExtended2017Plan1_xmlwriter.py +sed -i '{s/\/geFP05/\/geFP10/g}' geometryExtended2017Plan1_xmlwriter.py +cmsRun geometryExtended2017Plan1_xmlwriter.py + # Read the one big XML file and output a record to the # database with the an identifying tag # This is repeated several times below. The sed commands @@ -54,6 +66,22 @@ sed -i '{s/Extended/Extended2017Plan1ZeroMaterial/g}' xmlgeometrywriter.py sed -i '{s/\/ge/\/gez/g}' xmlgeometrywriter.py cmsRun xmlgeometrywriter.py +sed -i '{s/Extended2017Plan1ZeroMaterial/Extended2017Plan1FlatMinus05Percent/g}' xmlgeometrywriter.py +sed -i '{s/\/gez/\/geFM05/g}' xmlgeometrywriter.py +cmsRun xmlgeometrywriter.py + +sed -i '{s/Extended2017Plan1FlatMinus05Percent/Extended2017Plan1FlatMinus10Percent/g}' xmlgeometrywriter.py +sed -i '{s/\/geFM05/\/geFM10/g}' xmlgeometrywriter.py +cmsRun xmlgeometrywriter.py + +sed -i '{s/Extended2017Plan1FlatMinus10Percent/Extended2017Plan1FlatPlus05Percent/g}' xmlgeometrywriter.py +sed -i '{s/\/geFM10/\/geFP05/g}' xmlgeometrywriter.py +cmsRun xmlgeometrywriter.py + +sed -i '{s/Extended2017Plan1FlatPlus05Percent/Extended2017Plan1FlatPlus10Percent/g}' xmlgeometrywriter.py +sed -i '{s/\/geFP05/\/geFP10/g}' xmlgeometrywriter.py +cmsRun xmlgeometrywriter.py + # All the database objects were written into one database # (myfile.db) in the steps above. Extract the different # pieces into separate database files. These are the payloads diff --git a/CondTools/Geometry/test/writehelpers/createExtended2018Payloads.sh b/CondTools/Geometry/test/writehelpers/createExtended2018Payloads.sh index 86a9eda48eda5..190fc25fad321 100755 --- a/CondTools/Geometry/test/writehelpers/createExtended2018Payloads.sh +++ b/CondTools/Geometry/test/writehelpers/createExtended2018Payloads.sh @@ -45,6 +45,22 @@ sed -i '{s/Extended2018ZeroMaterial/Extended2018DetailedCavern/g}' geometryExten sed -i '{s/\/gez/\/geDC/g}' geometryExtended2018_xmlwriter.py cmsRun geometryExtended2018_xmlwriter.py +sed -i '{s/Extended2018DetailedCavern/Extended2018FlatMinus05Percent/g}' geometryExtended2018_xmlwriter.py +sed -i '{s/\/geDC/\/geFM05/g}' geometryExtended2018_xmlwriter.py +cmsRun geometryExtended2018_xmlwriter.py + +sed -i '{s/Extended2018FlatMinus05Percent/Extended2018FlatMinus10Percent/g}' geometryExtended2018_xmlwriter.py +sed -i '{s/\/geFM05/\/geFM10/g}' geometryExtended2018_xmlwriter.py +cmsRun geometryExtended2018_xmlwriter.py + +sed -i '{s/Extended2018FlatMinus10Percent/Extended2018FlatPlus05Percent/g}' geometryExtended2018_xmlwriter.py +sed -i '{s/\/geFM10/\/geFP05/g}' geometryExtended2018_xmlwriter.py +cmsRun geometryExtended2018_xmlwriter.py + +sed -i '{s/Extended2018FlatPlus05Percent/Extended2018FlatPlus10Percent/g}' geometryExtended2018_xmlwriter.py +sed -i '{s/\/geFP05/\/geFP10/g}' geometryExtended2018_xmlwriter.py +cmsRun geometryExtended2018_xmlwriter.py + # Read the one big XML file and output a record to the # database with the an identifying tag # This is repeated several times below. The sed commands @@ -62,6 +78,22 @@ sed -i '{s/Extended2018ZeroMaterial/Extended2018DetailedCavern/g}' xmlgeometrywr sed -i '{s/\/gez/\/geDC/g}' xmlgeometrywriter.py cmsRun xmlgeometrywriter.py +sed -i '{s/Extended2018DetailedCavern/Extended2018FlatMinus05Percent/g}' xmlgeometrywriter.py +sed -i '{s/\/geDC/\/geFM05/g}' xmlgeometrywriter.py +cmsRun xmlgeometrywriter.py + +sed -i '{s/Extended2018FlatMinus05Percent/Extended2018FlatMinus10Percent/g}' xmlgeometrywriter.py +sed -i '{s/\/geFM05/\/geFM10/g}' xmlgeometrywriter.py +cmsRun xmlgeometrywriter.py + +sed -i '{s/Extended2018FlatMinus10Percent/Extended2018FlatPlus05Percent/g}' xmlgeometrywriter.py +sed -i '{s/\/geFM10/\/geFP05/g}' xmlgeometrywriter.py +cmsRun xmlgeometrywriter.py + +sed -i '{s/Extended2018FlatPlus05Percent/Extended2018FlatPlus10Percent/g}' xmlgeometrywriter.py +sed -i '{s/\/geFP05/\/geFP10/g}' xmlgeometrywriter.py +cmsRun xmlgeometrywriter.py + # All the database objects were written into one database # (myfile.db) in the steps above. Extract the different # pieces into separate database files. These are the payloads diff --git a/CondTools/Geometry/test/writehelpers/createExtended2019Payloads.sh b/CondTools/Geometry/test/writehelpers/createExtended2019Payloads.sh deleted file mode 100755 index 6323981f3b542..0000000000000 --- a/CondTools/Geometry/test/writehelpers/createExtended2019Payloads.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - - -if [ $# -ne 1 ] -then - echo Error: createExtended2019Payloads.sh requires exactly one argument which is the tag - exit 1 -fi -mytag=$1 -echo ${mytag} - -# Set the tag in all the scripts and the metadata text files -sed -i {s/TagXX/${mytag}/g} *.py -sed -i {s/TagXX/${mytag}/g} *.txt -sed -i {s/TagXX/${mytag}/g} splitExtended2019Database.sh - -# First read in the little XML files and create the -# large XML file for the Phase1_R30F12_HCal Ideal scenario. -# Input cff Output file -# GeometryExtended2019_cff geSingleBigFile.xml -cmsRun geometryExtended2019_xmlwriter.py - -# Now convert the content of the large XML file into -# a "blob" and write it to the database. -# Also reads in the little XML files again and fills -# the DDCompactView. From the DDCompactView the -# reco parts of the database are also filled. -cmsRun geometryExtended2019_writer.py - -# All the database objects were written into one database -# (myfile.db) in the steps above. Extract the different -# pieces into separate database files. These are the payloads -# that get uploaded to the dropbox. There is one for each tag -./splitExtended2019Database.sh diff --git a/CondTools/Geometry/test/writehelpers/createExtended2021Payloads.sh b/CondTools/Geometry/test/writehelpers/createExtended2021Payloads.sh index 58c3d82702996..a3f2dd50670fb 100755 --- a/CondTools/Geometry/test/writehelpers/createExtended2021Payloads.sh +++ b/CondTools/Geometry/test/writehelpers/createExtended2021Payloads.sh @@ -27,6 +27,65 @@ cmsRun geometryExtended2021_xmlwriter.py # reco parts of the database are also filled. cmsRun geometryExtended2021_writer.py +# Now put the other scenarios into the database. +# Input the many XML files referenced by the cff file and +# output a single big XML file. +# This is repeated several times below. The sed commands +# serve to give the following sequence of input and output +# files +# +# Input cff Output file +# GeometryIdeal_cff giSingleBigFile.xml +# +sed -i '{s/Extended2021/Extended2021ZeroMaterial/g}' geometryExtended2021_xmlwriter.py +sed -i '{s/\/ge/\/gez/g}' geometryExtended2021_xmlwriter.py +cmsRun geometryExtended2021_xmlwriter.py + +sed -i '{s/Extended2021ZeroMaterial/Extended2021FlatMinus05Percent/g}' geometryExtended2021_xmlwriter.py +sed -i '{s/\/gez/\/geFM05/g}' geometryExtended2021_xmlwriter.py +cmsRun geometryExtended2021_xmlwriter.py + +sed -i '{s/Extended2021FlatMinus05Percent/Extended2021FlatMinus10Percent/g}' geometryExtended2021_xmlwriter.py +sed -i '{s/\/geFM05/\/geFM10/g}' geometryExtended2021_xmlwriter.py +cmsRun geometryExtended2021_xmlwriter.py + +sed -i '{s/Extended2021FlatMinus10Percent/Extended2021FlatPlus05Percent/g}' geometryExtended2021_xmlwriter.py +sed -i '{s/\/geFM10/\/geFP05/g}' geometryExtended2021_xmlwriter.py +cmsRun geometryExtended2021_xmlwriter.py + +sed -i '{s/Extended2021FlatPlus05Percent/Extended2021FlatPlus10Percent/g}' geometryExtended2021_xmlwriter.py +sed -i '{s/\/geFP05/\/geFP10/g}' geometryExtended2021_xmlwriter.py +cmsRun geometryExtended2021_xmlwriter.py + +# Read the one big XML file and output a record to the +# database with the an identifying tag +# This is repeated several times below. The sed commands +# serve to give the following sequence of input file and output +# tag +# +# Input file Output tag +# gezSingleBigFile.xml XMLFILE_Geometry_${mytag}_Extended2021ZeroMaterial_mc +# +sed -i '{s/Extended/Extended2021ZeroMaterial/g}' xmlgeometrywriter.py +sed -i '{s/\/ge/\/gez/g}' xmlgeometrywriter.py +cmsRun xmlgeometrywriter.py + +sed -i '{s/Extended2021ZeroMaterial/Extended2021FlatMinus05Percent/g}' xmlgeometrywriter.py +sed -i '{s/\/gez/\/geFM05/g}' xmlgeometrywriter.py +cmsRun xmlgeometrywriter.py + +sed -i '{s/Extended2021FlatMinus05Percent/Extended2021FlatMinus10Percent/g}' xmlgeometrywriter.py +sed -i '{s/\/geFM05/\/geFM10/g}' xmlgeometrywriter.py +cmsRun xmlgeometrywriter.py + +sed -i '{s/Extended2021FlatMinus10Percent/Extended2021FlatPlus05Percent/g}' xmlgeometrywriter.py +sed -i '{s/\/geFM10/\/geFP05/g}' xmlgeometrywriter.py +cmsRun xmlgeometrywriter.py + +sed -i '{s/Extended2021FlatPlus05Percent/Extended2021FlatPlus10Percent/g}' xmlgeometrywriter.py +sed -i '{s/\/geFP05/\/geFP10/g}' xmlgeometrywriter.py +cmsRun xmlgeometrywriter.py + # All the database objects were written into one database # (myfile.db) in the steps above. Extract the different # pieces into separate database files. These are the payloads diff --git a/CondTools/Geometry/test/writehelpers/createPPS2017RECOPayloads.sh b/CondTools/Geometry/test/writehelpers/createPPS2017RECOPayloads.sh new file mode 100755 index 0000000000000..c4c6ee3b52095 --- /dev/null +++ b/CondTools/Geometry/test/writehelpers/createPPS2017RECOPayloads.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +if [ $# -ne 1 ] +then + echo Error: createPPS2017RECOPayloads.sh requires exactly one argument which is the tag + exit 1 +fi +mytag=$1 +echo ${mytag} + +# Set the tag in all the scripts and the metadata text files +sed -i {s/TagXX/${mytag}/g} geometryCTPPS2017_writer.py +sed -i {s/TagXX/${mytag}/g} geometryCTPPS2017*.txt +sed -i {s/TagXX/${mytag}/g} splitPPS2017Database.sh + +# First read in the little XML files and create the +# Input cff Output file +# geometryRPFromDD_2017_cfi ge2017SingleBigFile.xml +cmsRun geometryCTPPS2017_xmlwriter.py + +# Now convert the content of the large XML file into +# a "blob" and write it to the database. +# Also reads in the little XML files again and fills +# the DDCompactView. From the DDCompactView the +# reco parts of the database are also filled. +cmsRun geometryCTPPS2017_writer.py + +# All the database objects were written into one database +# (myfile.db) in the steps above. Extract the different +# pieces into separate database files. These are the payloads +# that get uploaded to the dropbox. There is one for each tag +./splitPPS2017Database.sh diff --git a/CondTools/Geometry/test/writehelpers/createPPS2018RECOPayloads.sh b/CondTools/Geometry/test/writehelpers/createPPS2018RECOPayloads.sh new file mode 100755 index 0000000000000..b96717e4ed1ec --- /dev/null +++ b/CondTools/Geometry/test/writehelpers/createPPS2018RECOPayloads.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +if [ $# -ne 1 ] +then + echo Error: createPPS2018RECOPayloads.sh requires exactly one argument which is the tag + exit 1 +fi +mytag=$1 +echo ${mytag} + +# Set the tag in all the scripts and the metadata text files +sed -i {s/TagXX/${mytag}/g} geometryCTPPS2018_writer.py +sed -i {s/TagXX/${mytag}/g} geometryCTPPS2018*.txt +sed -i {s/TagXX/${mytag}/g} splitPPS2018Database.sh + +# First read in the little XML files and create the +# Input cff Output file +# geometryRPFromDD_2018_cfi ge2018SingleBigFile.xml +cmsRun geometryCTPPS2018_xmlwriter.py + +# Now convert the content of the large XML file into +# a "blob" and write it to the database. +# Also reads in the little XML files again and fills +# the DDCompactView. From the DDCompactView the +# reco parts of the database are also filled. +cmsRun geometryCTPPS2018_writer.py + +# All the database objects were written into one database +# (myfile.db) in the steps above. Extract the different +# pieces into separate database files. These are the payloads +# that get uploaded to the dropbox. There is one for each tag +./splitPPS2018Database.sh diff --git a/CondTools/Geometry/test/writehelpers/geometryCTPPS2017_writer.py b/CondTools/Geometry/test/writehelpers/geometryCTPPS2017_writer.py index 5a2375a8520b4..a395a6bf584a3 100644 --- a/CondTools/Geometry/test/writehelpers/geometryCTPPS2017_writer.py +++ b/CondTools/Geometry/test/writehelpers/geometryCTPPS2017_writer.py @@ -4,6 +4,9 @@ process.load('CondCore.CondDB.CondDB_cfi') +# geometry +process.load("Geometry.VeryForwardGeometry.dd4hep.geometryRPFromDD_2017_cfi") + process.source = cms.Source("EmptyIOVSource", lastValue = cms.uint64(1), timetype = cms.string('runnumber'), @@ -21,12 +24,21 @@ ZIP = cms.untracked.bool(True) ) +# DB writer +process.ppsGeometryBuilder = cms.EDAnalyzer("PPSGeometryBuilder", + fromDD4hep = cms.untracked.bool(True), + isRun2 = cms.untracked.bool(True), + compactViewTag = cms.untracked.string('XMLIdealGeometryESSource_CTPPS') +) + process.CondDB.timetype = cms.untracked.string('runnumber') process.CondDB.connect = cms.string('sqlite_file:myfile.db') process.PoolDBOutputService = cms.Service("PoolDBOutputService", process.CondDB, toPut = cms.VPSet(cms.PSet(record = cms.string('GeometryFileRcd'), - tag = cms.string('XMLFILE_CTPPS_Geometry_2017_TagXX')) + tag = cms.string('XMLFILE_CTPPS_Geometry_2017_TagXX')), + cms.PSet(record = cms.string('VeryForwardIdealGeometryRecord'), + tag = cms.string('PPSRECO_Geometry_2017_TagXX')) ) ) @@ -34,5 +46,5 @@ input = cms.untracked.int32(1) ) -process.p1 = cms.Path(process.XMLGeometryWriter) +process.p1 = cms.Path(process.XMLGeometryWriter+process.ppsGeometryBuilder) diff --git a/CondTools/Geometry/test/writehelpers/geometryCTPPS2018_writer.py b/CondTools/Geometry/test/writehelpers/geometryCTPPS2018_writer.py index 12db9758baaf6..a1ebc1b1ed2f5 100644 --- a/CondTools/Geometry/test/writehelpers/geometryCTPPS2018_writer.py +++ b/CondTools/Geometry/test/writehelpers/geometryCTPPS2018_writer.py @@ -4,6 +4,9 @@ process.load('CondCore.CondDB.CondDB_cfi') +# geometry +process.load("Geometry.VeryForwardGeometry.dd4hep.geometryRPFromDD_2018_cfi") + process.source = cms.Source("EmptyIOVSource", lastValue = cms.uint64(1), timetype = cms.string('runnumber'), @@ -21,12 +24,21 @@ ZIP = cms.untracked.bool(True) ) +# DB writer +process.ppsGeometryBuilder = cms.EDAnalyzer("PPSGeometryBuilder", + fromDD4hep = cms.untracked.bool(True), + isRun2 = cms.untracked.bool(True), + compactViewTag = cms.untracked.string('XMLIdealGeometryESSource_CTPPS') +) + process.CondDB.timetype = cms.untracked.string('runnumber') process.CondDB.connect = cms.string('sqlite_file:myfile.db') process.PoolDBOutputService = cms.Service("PoolDBOutputService", process.CondDB, toPut = cms.VPSet(cms.PSet(record = cms.string('GeometryFileRcd'), - tag = cms.string('XMLFILE_CTPPS_Geometry_2018_101YV1')) + tag = cms.string('XMLFILE_CTPPS_Geometry_2018_TagXX')), + cms.PSet(record = cms.string('VeryForwardIdealGeometryRecord'), + tag = cms.string('PPSRECO_Geometry_2018_TagXX')) ) ) @@ -34,5 +46,5 @@ input = cms.untracked.int32(1) ) -process.p1 = cms.Path(process.XMLGeometryWriter) +process.p1 = cms.Path(process.XMLGeometryWriter+process.ppsGeometryBuilder) diff --git a/CondTools/Geometry/test/writehelpers/geometryExtended2016_writer.py b/CondTools/Geometry/test/writehelpers/geometryExtended2016_writer.py index b69ea4b2d7a3a..5594b88513657 100644 --- a/CondTools/Geometry/test/writehelpers/geometryExtended2016_writer.py +++ b/CondTools/Geometry/test/writehelpers/geometryExtended2016_writer.py @@ -1,7 +1,7 @@ import FWCore.ParameterSet.Config as cms process = cms.Process("GeometryWriter") -process.load("CondCore.DBCommon.CondDBCommon_cfi") +process.load('CondCore.CondDB.CondDB_cfi') # This will read all the little XML files and from # that fill the DDCompactView. The modules that fill @@ -28,11 +28,6 @@ ZIP = cms.untracked.bool(True) ) -process.TrackerGeometricDetESModule = cms.ESProducer( "TrackerGeometricDetESModule", - fromDDD = cms.bool( True ) - ) - - process.TrackerGeometryWriter = cms.EDAnalyzer("PGeometricDetBuilder",fromDD4hep=cms.bool(False)) process.TrackerParametersWriter = cms.EDAnalyzer("PTrackerParametersDBBuilder",fromDD4hep=cms.bool(False)) @@ -44,11 +39,11 @@ process.RPCGeometryWriter = cms.EDAnalyzer("RPCRecoIdealDBLoader") -process.CondDBCommon.BlobStreamerName = cms.untracked.string('TBufferBlobStreamingService') -process.CondDBCommon.timetype = cms.untracked.string('runnumber') -process.CondDBCommon.connect = cms.string('sqlite_file:myfile.db') +process.CondDB.BlobStreamerName = cms.untracked.string('TBufferBlobStreamingService') +process.CondDB.timetype = cms.untracked.string('runnumber') +process.CondDB.connect = cms.string('sqlite_file:myfile.db') process.PoolDBOutputService = cms.Service("PoolDBOutputService", - process.CondDBCommon, + process.CondDB, toPut = cms.VPSet(cms.PSet(record = cms.string('GeometryFileRcd'),tag = cms.string('XMLFILE_Geometry_TagXX_Extended2016_mc')), cms.PSet(record = cms.string('IdealGeometryRecord'),tag = cms.string('TKRECO_Geometry_TagXX')), cms.PSet(record = cms.string('PTrackerParametersRcd'),tag = cms.string('TKParameters_Geometry_TagXX')), diff --git a/CondTools/Geometry/test/writehelpers/geometryExtended2016_xmlwriter.py b/CondTools/Geometry/test/writehelpers/geometryExtended2016_xmlwriter.py index 36ee0fa74d941..a3ece63d6d1ce 100644 --- a/CondTools/Geometry/test/writehelpers/geometryExtended2016_xmlwriter.py +++ b/CondTools/Geometry/test/writehelpers/geometryExtended2016_xmlwriter.py @@ -1,7 +1,7 @@ import FWCore.ParameterSet.Config as cms process = cms.Process("GeometryXMLWriter") -process.load('CondCore.DBCommon.CondDBCommon_cfi') + process.load('Configuration.Geometry.GeometryExtended2016_cff') process.source = cms.Source("EmptyIOVSource", diff --git a/CondTools/Geometry/test/writehelpers/geometryExtended2017Plan1_writer.py b/CondTools/Geometry/test/writehelpers/geometryExtended2017Plan1_writer.py index c7aa13f75850b..fdb0409b33408 100644 --- a/CondTools/Geometry/test/writehelpers/geometryExtended2017Plan1_writer.py +++ b/CondTools/Geometry/test/writehelpers/geometryExtended2017Plan1_writer.py @@ -29,10 +29,6 @@ ZIP = cms.untracked.bool(True) ) -process.TrackerGeometricDetESModule = cms.ESProducer( "TrackerGeometricDetESModule", - fromDDD = cms.bool( True ) - ) - process.TrackerGeometryWriter = cms.EDAnalyzer("PGeometricDetBuilder",fromDD4hep=cms.bool(False)) process.TrackerParametersWriter = cms.EDAnalyzer("PTrackerParametersDBBuilder",fromDD4hep=cms.bool(False)) diff --git a/CondTools/Geometry/test/writehelpers/geometryExtended2017_writer.py b/CondTools/Geometry/test/writehelpers/geometryExtended2017_writer.py index bac4ff06b7188..1872e14d4206e 100644 --- a/CondTools/Geometry/test/writehelpers/geometryExtended2017_writer.py +++ b/CondTools/Geometry/test/writehelpers/geometryExtended2017_writer.py @@ -28,9 +28,6 @@ XMLFileName = cms.untracked.string("./geSingleBigFile.xml"), ZIP = cms.untracked.bool(True) ) -process.TrackerGeometricDetESModule = cms.ESProducer( "TrackerGeometricDetESModule", - fromDDD = cms.bool( True ) - ) process.TrackerGeometryWriter = cms.EDAnalyzer("PGeometricDetBuilder",fromDD4hep=cms.bool(False)) process.TrackerParametersWriter = cms.EDAnalyzer("PTrackerParametersDBBuilder",fromDD4hep=cms.bool(False)) diff --git a/CondTools/Geometry/test/writehelpers/geometryExtended2018_writer.py b/CondTools/Geometry/test/writehelpers/geometryExtended2018_writer.py index 17f5258d3dcb1..cb002e33f0108 100644 --- a/CondTools/Geometry/test/writehelpers/geometryExtended2018_writer.py +++ b/CondTools/Geometry/test/writehelpers/geometryExtended2018_writer.py @@ -28,9 +28,6 @@ XMLFileName = cms.untracked.string("./geSingleBigFile.xml"), ZIP = cms.untracked.bool(True) ) -process.TrackerGeometricDetESModule = cms.ESProducer( "TrackerGeometricDetESModule", - fromDDD = cms.bool( True ) - ) process.TrackerGeometryWriter = cms.EDAnalyzer("PGeometricDetBuilder",fromDD4hep=cms.bool(False)) process.TrackerParametersWriter = cms.EDAnalyzer("PTrackerParametersDBBuilder",fromDD4hep=cms.bool(False)) diff --git a/CondTools/Geometry/test/writehelpers/geometryExtended2019_writer.py b/CondTools/Geometry/test/writehelpers/geometryExtended2019_writer.py deleted file mode 100644 index 7b7b074fc0d2d..0000000000000 --- a/CondTools/Geometry/test/writehelpers/geometryExtended2019_writer.py +++ /dev/null @@ -1,75 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("GeometryWriter") - -process.load('CondCore.CondDB.CondDB_cfi') - -# This will read all the little XML files and from -# that fill the DDCompactView. The modules that fill -# the reco part of the database need the DDCompactView. -process.load('Configuration.Geometry.GeometryExtended2019_cff') -process.load('Geometry.MuonNumbering.muonNumberingInitialization_cfi') -process.load('Geometry.CaloEventSetup.CaloGeometryDBWriter_cfi') -process.load('CondTools.Geometry.HcalParametersWriter_cff') - -process.source = cms.Source("EmptyIOVSource", - lastValue = cms.uint64(1), - timetype = cms.string('runnumber'), - firstValue = cms.uint64(1), - interval = cms.uint64(1) - ) - -# This reads the big XML file and the only way to fill the -# nonreco part of the database is to read this file. It -# somewhat duplicates the information read from the little -# XML files, but there is no way to directly build the -# DDCompactView from this. -process.XMLGeometryWriter = cms.EDAnalyzer("XMLGeometryBuilder", - XMLFileName = cms.untracked.string("./geSingleBigFile.xml"), - ZIP = cms.untracked.bool(True) - ) -process.TrackerGeometricDetESModule = cms.ESProducer( "TrackerGeometricDetESModule", - fromDDD = cms.bool( True ) - ) - -process.TrackerGeometryWriter = cms.EDAnalyzer("PGeometricDetBuilder",fromDD4hep=cms.bool(False)) -process.TrackerParametersWriter = cms.EDAnalyzer("PTrackerParametersDBBuilder",fromDD4hep=cms.bool(False)) - -process.CaloGeometryWriter = cms.EDAnalyzer("PCaloGeometryBuilder") - -process.CSCGeometryWriter = cms.EDAnalyzer("CSCRecoIdealDBLoader") - -process.DTGeometryWriter = cms.EDAnalyzer("DTRecoIdealDBLoader") - -process.RPCGeometryWriter = cms.EDAnalyzer("RPCRecoIdealDBLoader") - -process.GEMGeometryWriter = cms.EDAnalyzer("GEMRecoIdealDBLoader") - -process.CondDB.timetype = cms.untracked.string('runnumber') -process.CondDB.connect = cms.string('sqlite_file:myfile.db') -process.PoolDBOutputService = cms.Service("PoolDBOutputService", - process.CondDB, - toPut = cms.VPSet(cms.PSet(record = cms.string('GeometryFileRcd'),tag = cms.string('XMLFILE_Geometry_TagXX_Extended2019_mc')), - cms.PSet(record = cms.string('IdealGeometryRecord'),tag = cms.string('TKRECO_Geometry_TagXX')), - cms.PSet(record = cms.string('PTrackerParametersRcd'),tag = cms.string('TKParameters_Geometry_TagXX')), - cms.PSet(record = cms.string('PEcalBarrelRcd'), tag = cms.string('EBRECO_Geometry_TagXX')), - cms.PSet(record = cms.string('PEcalEndcapRcd'), tag = cms.string('EERECO_Geometry_TagXX')), - cms.PSet(record = cms.string('PEcalPreshowerRcd'),tag = cms.string('EPRECO_Geometry_TagXX')), - cms.PSet(record = cms.string('PHcalRcd'), tag = cms.string('HCALRECO_Geometry_TagXX')), - cms.PSet(record = cms.string('HcalParametersRcd'), tag = cms.string('HCALParameters_Geometry_TagXX')), - cms.PSet(record = cms.string('PCaloTowerRcd'), tag = cms.string('CTRECO_Geometry_TagXX')), - cms.PSet(record = cms.string('PZdcRcd'), tag = cms.string('ZDCRECO_Geometry_TagXX')), - cms.PSet(record = cms.string('PCastorRcd'), tag = cms.string('CASTORRECO_Geometry_TagXX')), - cms.PSet(record = cms.string('CSCRecoGeometryRcd'),tag = cms.string('CSCRECO_Geometry_TagXX')), - cms.PSet(record = cms.string('CSCRecoDigiParametersRcd'),tag = cms.string('CSCRECODIGI_Geometry_TagXX')), - cms.PSet(record = cms.string('DTRecoGeometryRcd'),tag = cms.string('DTRECO_Geometry_TagXX')), - cms.PSet(record = cms.string('RPCRecoGeometryRcd'),tag = cms.string('RPCRECO_Geometry_TagXX')), - cms.PSet(record = cms.string('GEMRecoGeometryRcd'),tag = cms.string('GEMRECO_Geometry_TagXX')) - ) - ) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(1) - ) - -process.p1 = cms.Path(process.XMLGeometryWriter+process.TrackerGeometryWriter+process.TrackerParametersWriter+process.CaloGeometryWriter+process.HcalParametersWriter+process.CSCGeometryWriter+process.DTGeometryWriter+process.RPCGeometryWriter+process.GEMGeometryWriter) diff --git a/CondTools/Geometry/test/writehelpers/geometryExtended2019_xmlwriter.py b/CondTools/Geometry/test/writehelpers/geometryExtended2019_xmlwriter.py deleted file mode 100644 index d492a5d9fd40e..0000000000000 --- a/CondTools/Geometry/test/writehelpers/geometryExtended2019_xmlwriter.py +++ /dev/null @@ -1,25 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("GeometryXMLWriter") - -process.load('Configuration.Geometry.GeometryExtended2019_cff') - -process.source = cms.Source("EmptyIOVSource", - lastValue = cms.uint64(1), - timetype = cms.string('runnumber'), - firstValue = cms.uint64(1), - interval = cms.uint64(1) - ) - -process.BigXMLWriter = cms.EDAnalyzer("OutputDDToDDL", - rotNumSeed = cms.int32(0), - fileName = cms.untracked.string("./geSingleBigFile.xml") - ) - - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(1) - ) - -process.p1 = cms.Path(process.BigXMLWriter) - diff --git a/CondTools/Geometry/test/writehelpers/geometryExtended2021_writer.py b/CondTools/Geometry/test/writehelpers/geometryExtended2021_writer.py index 889ba608efbc2..b1b29f2b3e191 100644 --- a/CondTools/Geometry/test/writehelpers/geometryExtended2021_writer.py +++ b/CondTools/Geometry/test/writehelpers/geometryExtended2021_writer.py @@ -9,6 +9,8 @@ # the reco part of the database need the DDCompactView. process.load('Configuration.Geometry.GeometryExtended2021_cff') process.load('Geometry.MuonNumbering.muonNumberingInitialization_cfi') +process.load("Geometry.MuonNumbering.muonGeometryConstants_cff") +process.load('Configuration.StandardSequences.DD4hep_GeometrySim_cff') process.load('Geometry.CaloEventSetup.CaloGeometryDBWriter_cfi') process.load('CondTools.Geometry.HcalParametersWriter_cff') @@ -28,20 +30,17 @@ XMLFileName = cms.untracked.string("./geSingleBigFile.xml"), ZIP = cms.untracked.bool(True) ) -process.TrackerGeometricDetESModule = cms.ESProducer( "TrackerGeometricDetESModule", - fromDDD = cms.bool( True ) - ) process.TrackerGeometryWriter = cms.EDAnalyzer("PGeometricDetBuilder",fromDD4hep=cms.bool(False)) process.TrackerParametersWriter = cms.EDAnalyzer("PTrackerParametersDBBuilder",fromDD4hep=cms.bool(False)) process.CaloGeometryWriter = cms.EDAnalyzer("PCaloGeometryBuilder") -process.CSCGeometryWriter = cms.EDAnalyzer("CSCRecoIdealDBLoader") +process.CSCGeometryWriter = cms.EDAnalyzer("CSCRecoIdealDBLoader",fromDD4Hep = cms.untracked.bool(False)) -process.DTGeometryWriter = cms.EDAnalyzer("DTRecoIdealDBLoader") +process.DTGeometryWriter = cms.EDAnalyzer("DTRecoIdealDBLoader",fromDD4Hep = cms.untracked.bool(False)) -process.RPCGeometryWriter = cms.EDAnalyzer("RPCRecoIdealDBLoader") +process.RPCGeometryWriter = cms.EDAnalyzer("RPCRecoIdealDBLoader",fromDD4Hep = cms.untracked.bool(False)) process.GEMGeometryWriter = cms.EDAnalyzer("GEMRecoIdealDBLoader") @@ -65,8 +64,8 @@ cms.PSet(record = cms.string('DTRecoGeometryRcd'),tag = cms.string('DTRECO_Geometry_TagXX')), cms.PSet(record = cms.string('RPCRecoGeometryRcd'),tag = cms.string('RPCRECO_Geometry_TagXX')), cms.PSet(record = cms.string('GEMRecoGeometryRcd'),tag = cms.string('GEMRECO_Geometry_TagXX')) - ) - ) + ) + ) process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) diff --git a/CondTools/Geometry/test/writehelpers/geometryExtended2026_writer.py b/CondTools/Geometry/test/writehelpers/geometryExtended2026_writer.py index 50e8ea2aca18c..312b007e15c31 100644 --- a/CondTools/Geometry/test/writehelpers/geometryExtended2026_writer.py +++ b/CondTools/Geometry/test/writehelpers/geometryExtended2026_writer.py @@ -3,12 +3,16 @@ process = cms.Process("GeometryWriter") process.load('CondCore.CondDB.CondDB_cfi') - -# This will read all the little XML files and from -# that fill the DDCompactView. The modules that fill -# the reco part of the database need the DDCompactView. -process.load('Configuration.Geometry.GeometryExtended2026D41_cff') +# +# FIXME: the command "./createExtended2026Payloads.sh 113YV12" (i.e 113YV12 is a tag just for test) creates a problem related to: +# 1) Tracker, if Configuration.Geometry.GeometryExtended2026D49_cff is used (Scenario2026D49 has to be set in DD4hep_GeometrySimPhase2_cff) +# 2) GEM, if Configuration.Geometry.GeometryExtended2026D77_cff is used (Scenario2026D77 has to be set in DD4hep_GeometrySimPhase2_cff) +# Please add the right Scenario (D49 or D77 or ..) also in geometryExtended2026_xmlwriter.py and in splitExtended2026Database.sh +# +process.load('Configuration.Geometry.GeometryExtended2026D49_cff') process.load('Geometry.MuonNumbering.muonNumberingInitialization_cfi') +process.load("Geometry.MuonNumbering.muonGeometryConstants_cff") +process.load('Configuration.StandardSequences.DD4hep_GeometrySimPhase2_cff') process.load('Geometry.CaloEventSetup.CaloGeometry2026DBWriter_cfi') process.load('CondTools.Geometry.HcalParametersWriter_cff') @@ -19,18 +23,10 @@ interval = cms.uint64(1) ) -# This reads the big XML file and the only way to fill the -# nonreco part of the database is to read this file. It -# somewhat duplicates the information read from the little -# XML files, but there is no way to directly build the -# DDCompactView from this. process.XMLGeometryWriter = cms.EDAnalyzer("XMLGeometryBuilder", - XMLFileName = cms.untracked.string("./geD17SingleBigFile.xml"), + XMLFileName = cms.untracked.string("./geD49SingleBigFile.xml"), ZIP = cms.untracked.bool(True) ) -process.TrackerGeometricDetESModule = cms.ESProducer( "TrackerGeometricDetESModule", - fromDDD = cms.bool( True ) - ) process.TrackerGeometryWriter = cms.EDAnalyzer("PGeometricDetBuilder",fromDD4hep=cms.bool(False)) process.TrackerParametersWriter = cms.EDAnalyzer("PTrackerParametersDBBuilder",fromDD4hep=cms.bool(False)) @@ -40,14 +36,16 @@ EcalP = cms.untracked.bool(False), HGCal = cms.untracked.bool(False)) -process.CSCGeometryWriter = cms.EDAnalyzer("CSCRecoIdealDBLoader") +process.CSCGeometryWriter = cms.EDAnalyzer("CSCRecoIdealDBLoader",fromDD4Hep = cms.untracked.bool(False)) -process.DTGeometryWriter = cms.EDAnalyzer("DTRecoIdealDBLoader") +process.DTGeometryWriter = cms.EDAnalyzer("DTRecoIdealDBLoader",fromDD4Hep = cms.untracked.bool(False)) -process.RPCGeometryWriter = cms.EDAnalyzer("RPCRecoIdealDBLoader") +process.RPCGeometryWriter = cms.EDAnalyzer("RPCRecoIdealDBLoader",fromDD4Hep = cms.untracked.bool(False)) process.GEMGeometryWriter = cms.EDAnalyzer("GEMRecoIdealDBLoader") +process.ME0GeometryWriter = cms.EDAnalyzer("ME0RecoIdealDBLoader") + process.CondDB.timetype = cms.untracked.string('runnumber') process.CondDB.connect = cms.string('sqlite_file:myfile.db') process.PoolDBOutputService = cms.Service("PoolDBOutputService", @@ -76,4 +74,4 @@ input = cms.untracked.int32(1) ) -process.p1 = cms.Path(process.XMLGeometryWriter+process.TrackerGeometryWriter+process.TrackerParametersWriter+process.CaloGeometryWriter+process.HcalParametersWriter+process.CSCGeometryWriter+process.DTGeometryWriter+process.RPCGeometryWriter+process.GEMGeometryWriter) +process.p1 = cms.Path(process.XMLGeometryWriter+process.TrackerGeometryWriter+process.TrackerParametersWriter+process.CaloGeometryWriter+process.HcalParametersWriter+process.CSCGeometryWriter+process.DTGeometryWriter+process.RPCGeometryWriter+process.GEMGeometryWriter+process.ME0GeometryWriter) diff --git a/CondTools/Geometry/test/writehelpers/geometryExtended2026_xmlwriter.py b/CondTools/Geometry/test/writehelpers/geometryExtended2026_xmlwriter.py index 397567e7c9634..8386fd2d38a7f 100644 --- a/CondTools/Geometry/test/writehelpers/geometryExtended2026_xmlwriter.py +++ b/CondTools/Geometry/test/writehelpers/geometryExtended2026_xmlwriter.py @@ -2,7 +2,7 @@ process = cms.Process("GeometryXMLWriter") -process.load('Configuration.Geometry.GeometryExtended2026D41_cff') +process.load('Configuration.Geometry.GeometryExtended2026D49_cff') process.source = cms.Source("EmptyIOVSource", lastValue = cms.uint64(1), @@ -13,7 +13,7 @@ process.BigXMLWriter = cms.EDAnalyzer("OutputDDToDDL", rotNumSeed = cms.int32(0), - fileName = cms.untracked.string("./geD41SingleBigFile.xml") + fileName = cms.untracked.string("./geD49SingleBigFile.xml") ) diff --git a/CondTools/Geometry/test/writehelpers/geometrywriter.py b/CondTools/Geometry/test/writehelpers/geometrywriter.py index 5e1d6cff83b5e..cf57f026593ac 100644 --- a/CondTools/Geometry/test/writehelpers/geometrywriter.py +++ b/CondTools/Geometry/test/writehelpers/geometrywriter.py @@ -28,9 +28,6 @@ XMLFileName = cms.untracked.string("./geSingleBigFile.xml"), ZIP = cms.untracked.bool(True) ) -process.TrackerGeometricDetESModule = cms.ESProducer( "TrackerGeometricDetESModule", - fromDDD = cms.bool( True ) - ) process.TrackerGeometryWriter = cms.EDAnalyzer("PGeometricDetBuilder",fromDD4hep=cms.bool(False)) process.TrackerParametersWriter = cms.EDAnalyzer("PTrackerParametersDBBuilder",fromDD4hep=cms.bool(False)) diff --git a/CondTools/Geometry/test/writehelpers/splitExtended2019Database.sh b/CondTools/Geometry/test/writehelpers/splitExtended2019Database.sh deleted file mode 100755 index 8af6e5c04d6f4..0000000000000 --- a/CondTools/Geometry/test/writehelpers/splitExtended2019Database.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -conddb_import -f sqlite_file:myfile.db -c sqlite_file:GeometryFileExtended2019.db -t XMLFILE_Geometry_TagXX_Extended2019_mc -i XMLFILE_Geometry_TagXX_Extended2019_mc -conddb_import -f sqlite_file:myfile.db -c sqlite_file:TKRECO_Geometry.db -t TKRECO_Geometry_TagXX -i TKRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:TKParameters_Geometry.db -t TKParameters_Geometry_TagXX -i TKParameters_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:EBRECO_Geometry.db -t EBRECO_Geometry_TagXX -i EBRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:EERECO_Geometry.db -t EERECO_Geometry_TagXX -i EERECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:EPRECO_Geometry.db -t EPRECO_Geometry_TagXX -i EPRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:HCALRECO_Geometry.db -t HCALRECO_Geometry_TagXX -i HCALRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:HCALParameters_Geometry.db -t HCALParameters_Geometry_TagXX -i HCALParameters_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:CTRECO_Geometry.db -t CTRECO_Geometry_TagXX -i CTRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:ZDCRECO_Geometry.db -t ZDCRECO_Geometry_TagXX -i ZDCRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:CASTORRECO_Geometry.db -t CASTORRECO_Geometry_TagXX -i CASTORRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:CSCRECO_Geometry.db -t CSCRECO_Geometry_TagXX -i CSCRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:CSCRECODIGI_Geometry.db -t CSCRECODIGI_Geometry_TagXX -i CSCRECODIGI_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:DTRECO_Geometry.db -t DTRECO_Geometry_TagXX -i DTRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:RPCRECO_Geometry.db -t RPCRECO_Geometry_TagXX -i RPCRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:GEMRECO_Geometry.db -t GEMRECO_Geometry_TagXX -i GEMRECO_Geometry_TagXX diff --git a/CondTools/Geometry/test/writehelpers/splitExtended2026Database.sh b/CondTools/Geometry/test/writehelpers/splitExtended2026Database.sh index f03ac4e27bed4..f0003a5b7ce0a 100755 --- a/CondTools/Geometry/test/writehelpers/splitExtended2026Database.sh +++ b/CondTools/Geometry/test/writehelpers/splitExtended2026Database.sh @@ -1,19 +1,19 @@ #!/bin/sh -conddb_import -f sqlite_file:myfile.db -c sqlite_file:GeometryFileExtended2026D41.db -t XMLFILE_Geometry_TagXX_Extended2026D41_mc -i XMLFILE_Geometry_TagXX_Extended2026D41_mc -conddb_import -f sqlite_file:myfile.db -c sqlite_file:TKRECO_Geometry.db -t TKRECO_Geometry_TagXX -i TKRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:TKParameters_Geometry.db -t TKParameters_Geometry_TagXX -i TKParameters_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:EBRECO_Geometry.db -t EBRECO_Geometry_TagXX -i EBRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:HCALRECO_Geometry.db -t HCALRECO_Geometry_TagXX -i HCALRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:HCALParameters_Geometry.db -t HCALParameters_Geometry_TagXX -i HCALParameters_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:HGCALRECO_Geometry.db -t HGCALRECO_Geometry_TagXX -i HGCALRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:HGCALParameters_Geometry.db -t HGCALParameters_Geometry_TagXX -i HGCALParameters_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:CTRECO_Geometry.db -t CTRECO_Geometry_TagXX -i CTRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:ZDCRECO_Geometry.db -t ZDCRECO_Geometry_TagXX -i ZDCRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:CASTORRECO_Geometry.db -t CASTORRECO_Geometry_TagXX -i CASTORRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:CSCRECO_Geometry.db -t CSCRECO_Geometry_TagXX -i CSCRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:CSCRECODIGI_Geometry.db -t CSCRECODIGI_Geometry_TagXX -i CSCRECODIGI_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:DTRECO_Geometry.db -t DTRECO_Geometry_TagXX -i DTRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:RPCRECO_Geometry.db -t RPCRECO_Geometry_TagXX -i RPCRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:GEMRECO_Geometry.db -t GEMRECO_Geometry_TagXX -i GEMRECO_Geometry_TagXX -conddb_import -f sqlite_file:myfile.db -c sqlite_file:ME0RECO_Geometry.db -t ME0RECO_Geometry_TagXX -i ME0RECO_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:GeometryFileExtended2026D49.db -t XMLFILE_Geometry_TagXX_Extended2026D49_mc -i XMLFILE_Geometry_TagXX_Extended2026D49_mc +conddb -f sqlite_file:myfile.db -c sqlite_file:TKRECO_Geometry.db -t TKRECO_Geometry_TagXX -i TKRECO_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:TKParameters_Geometry.db -t TKParameters_Geometry_TagXX -i TKParameters_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:EBRECO_Geometry.db -t EBRECO_Geometry_TagXX -i EBRECO_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:HCALRECO_Geometry.db -t HCALRECO_Geometry_TagXX -i HCALRECO_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:HCALParameters_Geometry.db -t HCALParameters_Geometry_TagXX -i HCALParameters_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:HGCALRECO_Geometry.db -t HGCALRECO_Geometry_TagXX -i HGCALRECO_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:HGCALParameters_Geometry.db -t HGCALParameters_Geometry_TagXX -i HGCALParameters_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:CTRECO_Geometry.db -t CTRECO_Geometry_TagXX -i CTRECO_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:ZDCRECO_Geometry.db -t ZDCRECO_Geometry_TagXX -i ZDCRECO_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:CASTORRECO_Geometry.db -t CASTORRECO_Geometry_TagXX -i CASTORRECO_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:CSCRECO_Geometry.db -t CSCRECO_Geometry_TagXX -i CSCRECO_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:CSCRECODIGI_Geometry.db -t CSCRECODIGI_Geometry_TagXX -i CSCRECODIGI_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:DTRECO_Geometry.db -t DTRECO_Geometry_TagXX -i DTRECO_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:RPCRECO_Geometry.db -t RPCRECO_Geometry_TagXX -i RPCRECO_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:GEMRECO_Geometry.db -t GEMRECO_Geometry_TagXX -i GEMRECO_Geometry_TagXX +conddb -f sqlite_file:myfile.db -c sqlite_file:ME0RECO_Geometry.db -t ME0RECO_Geometry_TagXX -i ME0RECO_Geometry_TagXX diff --git a/CondTools/Geometry/test/writehelpers/splitPPS2017Database.sh b/CondTools/Geometry/test/writehelpers/splitPPS2017Database.sh new file mode 100755 index 0000000000000..16fcedf670640 --- /dev/null +++ b/CondTools/Geometry/test/writehelpers/splitPPS2017Database.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +conddb --yes --db myfile.db copy PPSRECO_Geometry_2017_TagXX --destdb PPSRECO_Geometry.db +conddb --yes --db myfile.db copy XMLFILE_CTPPS_Geometry_2017_TagXX --destdb XMLFILE_CTPPS_Geometry.db diff --git a/CondTools/Geometry/test/writehelpers/splitPPS2018Database.sh b/CondTools/Geometry/test/writehelpers/splitPPS2018Database.sh new file mode 100755 index 0000000000000..91d0a1998fd5a --- /dev/null +++ b/CondTools/Geometry/test/writehelpers/splitPPS2018Database.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +conddb --yes --db myfile.db copy PPSRECO_Geometry_2018_TagXX --destdb PPSRECO_Geometry.db +conddb --yes --db myfile.db copy XMLFILE_CTPPS_Geometry_2018_TagXX --destdb XMLFILE_CTPPS_Geometry.db diff --git a/CondTools/HLT/test/AlCaRecoTriggerBitsRcdRead_TEMPL_cfg.py b/CondTools/HLT/test/AlCaRecoTriggerBitsRcdRead_TEMPL_cfg.py index fdf8063bbf0c9..a3cccaf738a15 100644 --- a/CondTools/HLT/test/AlCaRecoTriggerBitsRcdRead_TEMPL_cfg.py +++ b/CondTools/HLT/test/AlCaRecoTriggerBitsRcdRead_TEMPL_cfg.py @@ -22,7 +22,7 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet(INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32(1000) )) diff --git a/CondTools/HLT/test/AlCaRecoTriggerBitsRcdRead_cfg.py b/CondTools/HLT/test/AlCaRecoTriggerBitsRcdRead_cfg.py index da2ddaee8c264..5717dd975db21 100644 --- a/CondTools/HLT/test/AlCaRecoTriggerBitsRcdRead_cfg.py +++ b/CondTools/HLT/test/AlCaRecoTriggerBitsRcdRead_cfg.py @@ -3,7 +3,7 @@ process = cms.Process("READ") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet(INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32(1000) )) diff --git a/CondTools/HLT/test/AlCaRecoTriggerBitsRcdUpdate_TEMPL_cfg.py b/CondTools/HLT/test/AlCaRecoTriggerBitsRcdUpdate_TEMPL_cfg.py index 5fc8957f0f897..6b478462ac724 100644 --- a/CondTools/HLT/test/AlCaRecoTriggerBitsRcdUpdate_TEMPL_cfg.py +++ b/CondTools/HLT/test/AlCaRecoTriggerBitsRcdUpdate_TEMPL_cfg.py @@ -59,7 +59,7 @@ options.parseArguments() process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet(INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32(1) )) diff --git a/CondTools/HLT/test/AlCaRecoTriggerBitsRcdUpdate_cfg.py b/CondTools/HLT/test/AlCaRecoTriggerBitsRcdUpdate_cfg.py index 3e82230768c0a..2c83d52e4d2c1 100644 --- a/CondTools/HLT/test/AlCaRecoTriggerBitsRcdUpdate_cfg.py +++ b/CondTools/HLT/test/AlCaRecoTriggerBitsRcdUpdate_cfg.py @@ -23,7 +23,7 @@ process = cms.Process("UPDATEDB") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet(INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32(1) )) diff --git a/CondTools/Hcal/bin/corrGains.cc b/CondTools/Hcal/bin/corrGains.cc index 58898266e591d..3bafe7c6e05f7 100644 --- a/CondTools/Hcal/bin/corrGains.cc +++ b/CondTools/Hcal/bin/corrGains.cc @@ -8,7 +8,6 @@ #include "CondFormats/HcalObjects/interface/HcalGains.h" #include "CondFormats/HcalObjects/interface/HcalRespCorrs.h" #include "Geometry/CaloTopology/interface/HcalTopology.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" @@ -26,20 +25,20 @@ class corrGains : public edm::one::EDAnalyzer { void analyze(edm::Event const&, edm::EventSetup const&) override; void endRun(edm::Run const& iEvent, edm::EventSetup const&) override {} std::string fileIn, fileOut, fileCorr; + edm::ESGetToken tok_htopo_; }; corrGains::corrGains(const edm::ParameterSet& iConfig) { fileIn = iConfig.getUntrackedParameter("FileIn"); fileOut = iConfig.getUntrackedParameter("FileOut"); fileCorr = iConfig.getUntrackedParameter("FileCorr"); + tok_htopo_ = esConsumes(); } corrGains::~corrGains() {} void corrGains::analyze(edm::Event const&, edm::EventSetup const& iSetup) { - edm::ESHandle htopo; - iSetup.get().get(htopo); - HcalTopology topo = (*htopo); + HcalTopology topo = iSetup.getData(tok_htopo_); HcalGains gainsIn(&topo); ; diff --git a/CondTools/Hcal/bin/corrResps.cc b/CondTools/Hcal/bin/corrResps.cc index 14776e77ff407..a8a98d914a029 100644 --- a/CondTools/Hcal/bin/corrResps.cc +++ b/CondTools/Hcal/bin/corrResps.cc @@ -6,7 +6,6 @@ #include "CalibCalorimetry/HcalAlgos/interface/HcalDbASCIIIO.h" #include "CondFormats/HcalObjects/interface/HcalRespCorrs.h" #include "Geometry/CaloTopology/interface/HcalTopology.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" @@ -24,20 +23,20 @@ class corrResps : public edm::one::EDAnalyzer { void analyze(edm::Event const&, edm::EventSetup const&) override; void endRun(edm::Run const& iEvent, edm::EventSetup const&) override {} std::string fileIn, fileOut, fileCorr; + edm::ESGetToken tok_htopo_; }; corrResps::corrResps(const edm::ParameterSet& iConfig) { fileIn = iConfig.getUntrackedParameter("FileIn"); fileOut = iConfig.getUntrackedParameter("FileOut"); fileCorr = iConfig.getUntrackedParameter("FileCorr"); + tok_htopo_ = esConsumes(); } corrResps::~corrResps() {} void corrResps::analyze(edm::Event const&, edm::EventSetup const& iSetup) { - edm::ESHandle htopo; - iSetup.get().get(htopo); - HcalTopology topo = (*htopo); + HcalTopology topo = iSetup.getData(tok_htopo_); HcalRespCorrs respIn(&topo); std::ifstream inStream(fileIn.c_str()); diff --git a/CondTools/Hcal/bin/modGains.cc b/CondTools/Hcal/bin/modGains.cc index 071e4e2b435c1..1df7954528fec 100644 --- a/CondTools/Hcal/bin/modGains.cc +++ b/CondTools/Hcal/bin/modGains.cc @@ -10,7 +10,6 @@ #include "CondFormats/HcalObjects/interface/HcalGains.h" #include "CondFormats/HcalObjects/interface/HcalRespCorrs.h" #include "Geometry/CaloTopology/interface/HcalTopology.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" @@ -32,6 +31,7 @@ class modGains : public edm::one::EDAnalyzer { std::string fileIn, fileOut, fileCorr; double val; bool vectorop; + edm::ESGetToken tok_htopo_; }; modGains::modGains(const edm::ParameterSet& iConfig) : vectorop(false) { @@ -40,6 +40,7 @@ modGains::modGains(const edm::ParameterSet& iConfig) : vectorop(false) { fileOut = iConfig.getUntrackedParameter("FileOut"); fileCorr = iConfig.getUntrackedParameter("FileCorr"); val = iConfig.getUntrackedParameter("ScalarFactor"); + tok_htopo_ = esConsumes(); if ((std::strcmp(s_operation.c_str(), "add") == 0) || (std::strcmp(s_operation.c_str(), "sub") == 0) || (std::strcmp(s_operation.c_str(), "mult") == 0) || @@ -57,9 +58,7 @@ modGains::modGains(const edm::ParameterSet& iConfig) : vectorop(false) { modGains::~modGains() {} void modGains::analyze(edm::Event const&, edm::EventSetup const& iSetup) { - edm::ESHandle htopo; - iSetup.get().get(htopo); - HcalTopology topo = (*htopo); + HcalTopology topo = iSetup.getData(tok_htopo_); // get base conditions std::cerr << fileIn << std::endl; diff --git a/CondTools/Hcal/bin/scaleGains.cc b/CondTools/Hcal/bin/scaleGains.cc index 61909bb30b5ba..baff28773c9be 100644 --- a/CondTools/Hcal/bin/scaleGains.cc +++ b/CondTools/Hcal/bin/scaleGains.cc @@ -6,7 +6,6 @@ #include "CalibCalorimetry/HcalAlgos/interface/HcalDbASCIIIO.h" #include "CondFormats/HcalObjects/interface/HcalGains.h" #include "Geometry/CaloTopology/interface/HcalTopology.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" @@ -25,20 +24,20 @@ class scaleGains : public edm::one::EDAnalyzer { void endRun(edm::Run const& iEvent, edm::EventSetup const&) override {} std::string fileIn, fileOut; double scale; + edm::ESGetToken tok_htopo_; }; scaleGains::scaleGains(const edm::ParameterSet& iConfig) { fileIn = iConfig.getUntrackedParameter("FileIn"); fileOut = iConfig.getUntrackedParameter("FileOut"); scale = iConfig.getUntrackedParameter("Scale"); + tok_htopo_ = esConsumes(); } scaleGains::~scaleGains() {} void scaleGains::analyze(edm::Event const&, edm::EventSetup const& iSetup) { - edm::ESHandle htopo; - iSetup.get().get(htopo); - HcalTopology topo = (*htopo); + HcalTopology topo = iSetup.getData(tok_htopo_); HcalGains gainsIn(&topo); ; diff --git a/CondTools/Hcal/interface/BoostIODBReader.h b/CondTools/Hcal/interface/BoostIODBReader.h index 1855fa5619149..95fc36c19357e 100644 --- a/CondTools/Hcal/interface/BoostIODBReader.h +++ b/CondTools/Hcal/interface/BoostIODBReader.h @@ -29,7 +29,6 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Utilities/interface/Exception.h" @@ -60,8 +59,8 @@ BoostIODBReader::BoostIODBReader(const edm::ParameterSet& template void BoostIODBReader::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - edm::ESHandle p; - iSetup.get().get(p); + edm::ESGetToken tok = esConsumes(); + const DataType* p = &iSetup.getData(tok); std::ofstream of(outputFile_.c_str(), std::ios_base::binary); if (!of.is_open()) diff --git a/CondTools/Hcal/interface/CastorChannelQualityHandler.h b/CondTools/Hcal/interface/CastorChannelQualityHandler.h index 1f12c5b216d4e..563bf6586c1d5 100644 --- a/CondTools/Hcal/interface/CastorChannelQualityHandler.h +++ b/CondTools/Hcal/interface/CastorChannelQualityHandler.h @@ -12,7 +12,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/CastorElectronicsMapHandler.h b/CondTools/Hcal/interface/CastorElectronicsMapHandler.h index 1fb80ea63bf51..47274118fc180 100644 --- a/CondTools/Hcal/interface/CastorElectronicsMapHandler.h +++ b/CondTools/Hcal/interface/CastorElectronicsMapHandler.h @@ -12,7 +12,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/CastorGainWidthsHandler.h b/CondTools/Hcal/interface/CastorGainWidthsHandler.h index ee124e051a91a..90169a1c22c01 100644 --- a/CondTools/Hcal/interface/CastorGainWidthsHandler.h +++ b/CondTools/Hcal/interface/CastorGainWidthsHandler.h @@ -12,7 +12,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/CastorGainsHandler.h b/CondTools/Hcal/interface/CastorGainsHandler.h index 0335af5dc1232..665f95f2a8d26 100644 --- a/CondTools/Hcal/interface/CastorGainsHandler.h +++ b/CondTools/Hcal/interface/CastorGainsHandler.h @@ -12,7 +12,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/CastorPedestalWidthsHandler.h b/CondTools/Hcal/interface/CastorPedestalWidthsHandler.h index 0192adcc2cab5..e46ed1ef2d72f 100644 --- a/CondTools/Hcal/interface/CastorPedestalWidthsHandler.h +++ b/CondTools/Hcal/interface/CastorPedestalWidthsHandler.h @@ -12,7 +12,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/CastorPedestalsHandler.h b/CondTools/Hcal/interface/CastorPedestalsHandler.h index 3748e2e742636..2bed060b134e7 100644 --- a/CondTools/Hcal/interface/CastorPedestalsHandler.h +++ b/CondTools/Hcal/interface/CastorPedestalsHandler.h @@ -12,7 +12,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/CastorQIEDataHandler.h b/CondTools/Hcal/interface/CastorQIEDataHandler.h index 6e3c1c123d157..3c7bf2e8f5865 100644 --- a/CondTools/Hcal/interface/CastorQIEDataHandler.h +++ b/CondTools/Hcal/interface/CastorQIEDataHandler.h @@ -12,7 +12,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/CastorRecoParamsHandler.h b/CondTools/Hcal/interface/CastorRecoParamsHandler.h index 208770d2324ef..cccd8b7293b14 100644 --- a/CondTools/Hcal/interface/CastorRecoParamsHandler.h +++ b/CondTools/Hcal/interface/CastorRecoParamsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/CastorSaturationCorrsHandler.h b/CondTools/Hcal/interface/CastorSaturationCorrsHandler.h index aa2a20b3b0819..2b9d4b3a97938 100644 --- a/CondTools/Hcal/interface/CastorSaturationCorrsHandler.h +++ b/CondTools/Hcal/interface/CastorSaturationCorrsHandler.h @@ -9,7 +9,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalAutoPedestalValidator.h b/CondTools/Hcal/interface/HcalAutoPedestalValidator.h index 5b18340b322b1..a90a0f725d15b 100644 --- a/CondTools/Hcal/interface/HcalAutoPedestalValidator.h +++ b/CondTools/Hcal/interface/HcalAutoPedestalValidator.h @@ -14,7 +14,6 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/EventSetup.h" @@ -49,6 +48,8 @@ class HcalAutoPedestalValidator : public edm::EDAnalyzer { private: std::string outfile; double epsilon; + edm::ESGetToken m_tok1; + edm::ESGetToken m_tok2; // vecDetId getMissingDetIds(std::vector &); }; #endif diff --git a/CondTools/Hcal/interface/HcalChannelQualityHandler.h b/CondTools/Hcal/interface/HcalChannelQualityHandler.h index 47d4006af33cd..5be4bead3ff97 100644 --- a/CondTools/Hcal/interface/HcalChannelQualityHandler.h +++ b/CondTools/Hcal/interface/HcalChannelQualityHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalDcsMapHandler.h b/CondTools/Hcal/interface/HcalDcsMapHandler.h index 74d9b1cc5cb8e..6ef959f94460e 100644 --- a/CondTools/Hcal/interface/HcalDcsMapHandler.h +++ b/CondTools/Hcal/interface/HcalDcsMapHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalDcsValuesHandler.h b/CondTools/Hcal/interface/HcalDcsValuesHandler.h index c38d36fda9663..92c4f5d9518bb 100644 --- a/CondTools/Hcal/interface/HcalDcsValuesHandler.h +++ b/CondTools/Hcal/interface/HcalDcsValuesHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalElectronicsMapHandler.h b/CondTools/Hcal/interface/HcalElectronicsMapHandler.h index 683bb40e0fc00..a1d7739bdd6d7 100644 --- a/CondTools/Hcal/interface/HcalElectronicsMapHandler.h +++ b/CondTools/Hcal/interface/HcalElectronicsMapHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalFlagHFDigiTimeParamsHandler.h b/CondTools/Hcal/interface/HcalFlagHFDigiTimeParamsHandler.h index 8b22b06d571ec..66de39348811b 100644 --- a/CondTools/Hcal/interface/HcalFlagHFDigiTimeParamsHandler.h +++ b/CondTools/Hcal/interface/HcalFlagHFDigiTimeParamsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalFrontEndMapHandler.h b/CondTools/Hcal/interface/HcalFrontEndMapHandler.h index db20b38fb6df0..2977c3a8c8c8c 100644 --- a/CondTools/Hcal/interface/HcalFrontEndMapHandler.h +++ b/CondTools/Hcal/interface/HcalFrontEndMapHandler.h @@ -9,7 +9,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalGainWidthsHandler.h b/CondTools/Hcal/interface/HcalGainWidthsHandler.h index ec46d798c74f0..0134736ebc881 100644 --- a/CondTools/Hcal/interface/HcalGainWidthsHandler.h +++ b/CondTools/Hcal/interface/HcalGainWidthsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalGainsCheck.h b/CondTools/Hcal/interface/HcalGainsCheck.h index d34c261a7893a..6a39c30475d95 100644 --- a/CondTools/Hcal/interface/HcalGainsCheck.h +++ b/CondTools/Hcal/interface/HcalGainsCheck.h @@ -16,7 +16,6 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/EventSetup.h" @@ -65,6 +64,9 @@ class HcalGainsCheck : public edm::EDAnalyzer { bool emapflag; bool validategainsflag; double epsilon; + edm::ESGetToken m_tok1; + edm::ESGetToken m_tok2; + edm::ESGetToken m_tokmap; TFile* f; //plots: diff --git a/CondTools/Hcal/interface/HcalGainsHandler.h b/CondTools/Hcal/interface/HcalGainsHandler.h index e5d9372a97780..c867a1e0d5ca4 100644 --- a/CondTools/Hcal/interface/HcalGainsHandler.h +++ b/CondTools/Hcal/interface/HcalGainsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalL1TriggerObjectsHandler.h b/CondTools/Hcal/interface/HcalL1TriggerObjectsHandler.h index 22d4fcd3ca7bf..821bf0297b513 100644 --- a/CondTools/Hcal/interface/HcalL1TriggerObjectsHandler.h +++ b/CondTools/Hcal/interface/HcalL1TriggerObjectsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalLUTCorrsHandler.h b/CondTools/Hcal/interface/HcalLUTCorrsHandler.h index ffdff7103ea37..df0ddead82ef3 100644 --- a/CondTools/Hcal/interface/HcalLUTCorrsHandler.h +++ b/CondTools/Hcal/interface/HcalLUTCorrsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalLongRecoParamsHandler.h b/CondTools/Hcal/interface/HcalLongRecoParamsHandler.h index c610c20efa13f..bb391cd26525e 100644 --- a/CondTools/Hcal/interface/HcalLongRecoParamsHandler.h +++ b/CondTools/Hcal/interface/HcalLongRecoParamsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalLutMetadataHandler.h b/CondTools/Hcal/interface/HcalLutMetadataHandler.h index 5e3bd16e7ea92..cc321e0ce9772 100644 --- a/CondTools/Hcal/interface/HcalLutMetadataHandler.h +++ b/CondTools/Hcal/interface/HcalLutMetadataHandler.h @@ -15,7 +15,6 @@ PopCon handler for the HCAL LUT metadata condition #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalMCParamsHandler.h b/CondTools/Hcal/interface/HcalMCParamsHandler.h index 3f84ac87241eb..0492c09032ff6 100644 --- a/CondTools/Hcal/interface/HcalMCParamsHandler.h +++ b/CondTools/Hcal/interface/HcalMCParamsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalPFCorrsHandler.h b/CondTools/Hcal/interface/HcalPFCorrsHandler.h index 80452353fb3d0..394a3eb63a990 100644 --- a/CondTools/Hcal/interface/HcalPFCorrsHandler.h +++ b/CondTools/Hcal/interface/HcalPFCorrsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalPedestalWidthsCheck.h b/CondTools/Hcal/interface/HcalPedestalWidthsCheck.h index 9ce8064c1278a..d96c775bb88fe 100644 --- a/CondTools/Hcal/interface/HcalPedestalWidthsCheck.h +++ b/CondTools/Hcal/interface/HcalPedestalWidthsCheck.h @@ -16,7 +16,6 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/EventSetup.h" @@ -55,6 +54,9 @@ class HcalPedestalWidthsCheck : public edm::EDAnalyzer { bool checkemapflag; bool validateflag; double epsilon; + edm::ESGetToken m_tok1; + edm::ESGetToken m_tok2; + edm::ESGetToken m_tokmap; // vecDetId getMissingDetIds(std::vector &); }; #endif diff --git a/CondTools/Hcal/interface/HcalPedestalWidthsHandler.h b/CondTools/Hcal/interface/HcalPedestalWidthsHandler.h index c9f9933e69032..8d838f5305552 100644 --- a/CondTools/Hcal/interface/HcalPedestalWidthsHandler.h +++ b/CondTools/Hcal/interface/HcalPedestalWidthsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalPedestalsCheck.h b/CondTools/Hcal/interface/HcalPedestalsCheck.h index 60922dc4cc490..3112ee24c211f 100644 --- a/CondTools/Hcal/interface/HcalPedestalsCheck.h +++ b/CondTools/Hcal/interface/HcalPedestalsCheck.h @@ -16,7 +16,6 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/EventSetup.h" @@ -55,6 +54,9 @@ class HcalPedestalsCheck : public edm::EDAnalyzer { bool validatepedestalsflag; bool checkemapflag; double epsilon; + edm::ESGetToken m_tok1; + edm::ESGetToken m_tok2; + edm::ESGetToken m_tokmap; // vecDetId getMissingDetIds(std::vector &); }; #endif diff --git a/CondTools/Hcal/interface/HcalPedestalsHandler.h b/CondTools/Hcal/interface/HcalPedestalsHandler.h index f30bb2be9b4a4..0501742f01321 100644 --- a/CondTools/Hcal/interface/HcalPedestalsHandler.h +++ b/CondTools/Hcal/interface/HcalPedestalsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalQIEDataCheck.h b/CondTools/Hcal/interface/HcalQIEDataCheck.h index 97562876578d3..3ea71c0b1b3ae 100644 --- a/CondTools/Hcal/interface/HcalQIEDataCheck.h +++ b/CondTools/Hcal/interface/HcalQIEDataCheck.h @@ -15,7 +15,6 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/EventSetup.h" @@ -49,6 +48,9 @@ class HcalQIEDataCheck : public edm::EDAnalyzer { std::string dumpupdate; bool checkemapflag; bool validateflag; + edm::ESGetToken m_tok1; + edm::ESGetToken m_tok2; + edm::ESGetToken m_tokmap; // double epsilon; // vecDetId getMissingDetIds(std::vector &); }; diff --git a/CondTools/Hcal/interface/HcalQIEDataHandler.h b/CondTools/Hcal/interface/HcalQIEDataHandler.h index 717acf7264a16..80041723aa9c1 100644 --- a/CondTools/Hcal/interface/HcalQIEDataHandler.h +++ b/CondTools/Hcal/interface/HcalQIEDataHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalQIETypesHandler.h b/CondTools/Hcal/interface/HcalQIETypesHandler.h index 243735cb8bd8d..e8c7b3f9acf75 100644 --- a/CondTools/Hcal/interface/HcalQIETypesHandler.h +++ b/CondTools/Hcal/interface/HcalQIETypesHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalRecoParamsHandler.h b/CondTools/Hcal/interface/HcalRecoParamsHandler.h index 9bf4d092b99ed..598857e2cc0ed 100644 --- a/CondTools/Hcal/interface/HcalRecoParamsHandler.h +++ b/CondTools/Hcal/interface/HcalRecoParamsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalRespCorrsHandler.h b/CondTools/Hcal/interface/HcalRespCorrsHandler.h index 36c1a921260d0..48cf40fb14edd 100644 --- a/CondTools/Hcal/interface/HcalRespCorrsHandler.h +++ b/CondTools/Hcal/interface/HcalRespCorrsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalSiPMCharacteristicsHandler.h b/CondTools/Hcal/interface/HcalSiPMCharacteristicsHandler.h index 16020dd98b56e..c884e35d2896d 100644 --- a/CondTools/Hcal/interface/HcalSiPMCharacteristicsHandler.h +++ b/CondTools/Hcal/interface/HcalSiPMCharacteristicsHandler.h @@ -9,7 +9,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalSiPMParametersHandler.h b/CondTools/Hcal/interface/HcalSiPMParametersHandler.h index 269d5fe6abdfe..73a5803349e6a 100644 --- a/CondTools/Hcal/interface/HcalSiPMParametersHandler.h +++ b/CondTools/Hcal/interface/HcalSiPMParametersHandler.h @@ -9,7 +9,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalTPChannelParametersHandler.h b/CondTools/Hcal/interface/HcalTPChannelParametersHandler.h index 74750ceb29ab2..6df30706d2119 100644 --- a/CondTools/Hcal/interface/HcalTPChannelParametersHandler.h +++ b/CondTools/Hcal/interface/HcalTPChannelParametersHandler.h @@ -9,7 +9,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalTPParametersHandler.h b/CondTools/Hcal/interface/HcalTPParametersHandler.h index de3216efac1fa..61207aeef49d6 100644 --- a/CondTools/Hcal/interface/HcalTPParametersHandler.h +++ b/CondTools/Hcal/interface/HcalTPParametersHandler.h @@ -9,7 +9,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalTimeCorrsHandler.h b/CondTools/Hcal/interface/HcalTimeCorrsHandler.h index 4c064ca8b8ff9..a96d0e45eb564 100644 --- a/CondTools/Hcal/interface/HcalTimeCorrsHandler.h +++ b/CondTools/Hcal/interface/HcalTimeCorrsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalTimingParamsHandler.h b/CondTools/Hcal/interface/HcalTimingParamsHandler.h index 9ce394c9aedb7..774cf5dd20cde 100644 --- a/CondTools/Hcal/interface/HcalTimingParamsHandler.h +++ b/CondTools/Hcal/interface/HcalTimingParamsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalValidationCorrsHandler.h b/CondTools/Hcal/interface/HcalValidationCorrsHandler.h index da6829791ffb0..e81b4c87bbc43 100644 --- a/CondTools/Hcal/interface/HcalValidationCorrsHandler.h +++ b/CondTools/Hcal/interface/HcalValidationCorrsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalZDCLowGainFractionsHandler.h b/CondTools/Hcal/interface/HcalZDCLowGainFractionsHandler.h index 1738bd2ccf15d..29a5d1ef4d004 100644 --- a/CondTools/Hcal/interface/HcalZDCLowGainFractionsHandler.h +++ b/CondTools/Hcal/interface/HcalZDCLowGainFractionsHandler.h @@ -9,7 +9,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/interface/HcalZSThresholdsHandler.h b/CondTools/Hcal/interface/HcalZSThresholdsHandler.h index 43cc74d026264..a619710b3a190 100644 --- a/CondTools/Hcal/interface/HcalZSThresholdsHandler.h +++ b/CondTools/Hcal/interface/HcalZSThresholdsHandler.h @@ -11,7 +11,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CondCore/PopCon/interface/PopConSourceHandler.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/EventSetup.h" diff --git a/CondTools/Hcal/plugins/CastorChannelQualityPopConAnalyzer.cc b/CondTools/Hcal/plugins/CastorChannelQualityPopConAnalyzer.cc index 15d5995664ffa..175865a0a80a0 100644 --- a/CondTools/Hcal/plugins/CastorChannelQualityPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/CastorChannelQualityPopConAnalyzer.cc @@ -11,7 +11,8 @@ class CastorChannelQualityPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class CastorChannelQualityPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new CastorChannelQuality(*objecthandle.product()); + myDBObject = new CastorChannelQuality(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class CastorChannelQualityPopConAnalyzer : public popcon::PopConAnalyzer m_tok; CastorChannelQuality* myDBObject; }; diff --git a/CondTools/Hcal/plugins/CastorDumpConditions.cc b/CondTools/Hcal/plugins/CastorDumpConditions.cc index a60ec31087c33..133f69c9c0bbf 100644 --- a/CondTools/Hcal/plugins/CastorDumpConditions.cc +++ b/CondTools/Hcal/plugins/CastorDumpConditions.cc @@ -27,7 +27,6 @@ // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" @@ -132,9 +131,8 @@ void CastorDumpConditions::dumpIt(const std::vector& mDumpRequest, const std::string name) { if (std::find(mDumpRequest.begin(), mDumpRequest.end(), name) != mDumpRequest.end()) { int myrun = e.id().run(); - edm::ESHandle p; - context.get().get(p); - S myobject(*p.product()); + edm::ESGetToken tok = esConsumes(); + const S& myobject = context.getData(tok); std::ostringstream file; file << file_prefix << name.c_str() << "_Run" << myrun << ".txt"; diff --git a/CondTools/Hcal/plugins/CastorElectronicsMapPopConAnalyzer.cc b/CondTools/Hcal/plugins/CastorElectronicsMapPopConAnalyzer.cc index c8d1df05644b9..1b9a9aeff1935 100644 --- a/CondTools/Hcal/plugins/CastorElectronicsMapPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/CastorElectronicsMapPopConAnalyzer.cc @@ -11,7 +11,8 @@ class CastorElectronicsMapPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class CastorElectronicsMapPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new CastorElectronicsMap(*objecthandle.product()); + myDBObject = new CastorElectronicsMap(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class CastorElectronicsMapPopConAnalyzer : public popcon::PopConAnalyzer m_tok; CastorElectronicsMap* myDBObject; }; diff --git a/CondTools/Hcal/plugins/CastorGainWidthsPopConAnalyzer.cc b/CondTools/Hcal/plugins/CastorGainWidthsPopConAnalyzer.cc index ce2974143a832..789f004ef0321 100644 --- a/CondTools/Hcal/plugins/CastorGainWidthsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/CastorGainWidthsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class CastorGainWidthsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class CastorGainWidthsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new CastorGainWidths(*objecthandle.product()); + myDBObject = new CastorGainWidths(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class CastorGainWidthsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; CastorGainWidths* myDBObject; }; diff --git a/CondTools/Hcal/plugins/CastorGainsPopConAnalyzer.cc b/CondTools/Hcal/plugins/CastorGainsPopConAnalyzer.cc index ff7e50e5b5bc8..9b1e79301f67d 100644 --- a/CondTools/Hcal/plugins/CastorGainsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/CastorGainsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class CastorGainsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class CastorGainsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new CastorGains(*objecthandle.product()); + myDBObject = new CastorGains(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,7 +31,7 @@ class CastorGainsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; CastorGains* myDBObject; }; diff --git a/CondTools/Hcal/plugins/CastorPedestalWidthsPopConAnalyzer.cc b/CondTools/Hcal/plugins/CastorPedestalWidthsPopConAnalyzer.cc index 01589a6eebbf9..050e27ebe06b8 100644 --- a/CondTools/Hcal/plugins/CastorPedestalWidthsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/CastorPedestalWidthsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class CastorPedestalWidthsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class CastorPedestalWidthsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new CastorPedestalWidths(*objecthandle.product()); + myDBObject = new CastorPedestalWidths(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class CastorPedestalWidthsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; CastorPedestalWidths* myDBObject; }; diff --git a/CondTools/Hcal/plugins/CastorPedestalsPopConAnalyzer.cc b/CondTools/Hcal/plugins/CastorPedestalsPopConAnalyzer.cc index 4cd0a295653d1..e9163370a9e50 100644 --- a/CondTools/Hcal/plugins/CastorPedestalsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/CastorPedestalsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class CastorPedestalsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class CastorPedestalsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new CastorPedestals(*objecthandle.product()); + myDBObject = new CastorPedestals(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class CastorPedestalsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; CastorPedestals* myDBObject; }; diff --git a/CondTools/Hcal/plugins/CastorQIEDataPopConAnalyzer.cc b/CondTools/Hcal/plugins/CastorQIEDataPopConAnalyzer.cc index 0d566ec1226df..c4bfcdce64a0c 100644 --- a/CondTools/Hcal/plugins/CastorQIEDataPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/CastorQIEDataPopConAnalyzer.cc @@ -11,7 +11,8 @@ class CastorQIEDataPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class CastorQIEDataPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new CastorQIEData(*objecthandle.product()); + myDBObject = new CastorQIEData(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class CastorQIEDataPopConAnalyzer : public popcon::PopConAnalyzer m_tok; CastorQIEData* myDBObject; }; diff --git a/CondTools/Hcal/plugins/CastorRecoParamsPopConAnalyzer.cc b/CondTools/Hcal/plugins/CastorRecoParamsPopConAnalyzer.cc index 98120de571bc2..cc8ffd8aaee5d 100644 --- a/CondTools/Hcal/plugins/CastorRecoParamsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/CastorRecoParamsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class CastorRecoParamsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class CastorRecoParamsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new CastorRecoParams(*objecthandle.product()); + myDBObject = new CastorRecoParams(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class CastorRecoParamsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; CastorRecoParams* myDBObject; }; diff --git a/CondTools/Hcal/plugins/CastorSaturationCorrsPopConAnalyzer.cc b/CondTools/Hcal/plugins/CastorSaturationCorrsPopConAnalyzer.cc index 60b86c56480c7..53314989782c7 100644 --- a/CondTools/Hcal/plugins/CastorSaturationCorrsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/CastorSaturationCorrsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class CastorSaturationCorrsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class CastorSaturationCorrsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new CastorSaturationCorrs(*objecthandle.product()); + myDBObject = new CastorSaturationCorrs(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class CastorSaturationCorrsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; CastorSaturationCorrs* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalAutoPedestalValidator.cc b/CondTools/Hcal/plugins/HcalAutoPedestalValidator.cc index 2c04edbe9fd3d..289fc49d40f41 100644 --- a/CondTools/Hcal/plugins/HcalAutoPedestalValidator.cc +++ b/CondTools/Hcal/plugins/HcalAutoPedestalValidator.cc @@ -3,6 +3,8 @@ HcalAutoPedestalValidator::HcalAutoPedestalValidator(edm::ParameterSet const& ps) { outfile = ps.getUntrackedParameter("outFile", "changed.bool"); epsilon = ps.getUntrackedParameter("deltaP", .25); + m_tok1 = esConsumes(edm::ESInputTag("", "update")); + m_tok2 = esConsumes(edm::ESInputTag("", "reference")); } HcalAutoPedestalValidator::~HcalAutoPedestalValidator() {} @@ -10,14 +12,10 @@ HcalAutoPedestalValidator::~HcalAutoPedestalValidator() {} void HcalAutoPedestalValidator::analyze(const edm::Event& ev, const edm::EventSetup& es) { using namespace edm::eventsetup; // get fake pedestals from file ("new pedestals") - edm::ESHandle newPeds; - es.get().get("update", newPeds); - const HcalPedestals* myNewPeds = newPeds.product(); + const HcalPedestals* myNewPeds = &es.getData(m_tok1); // get DB pedestals from Frontier/OrcoX ("reference") - edm::ESHandle refPeds; - es.get().get("reference", refPeds); - const HcalPedestals* myRefPeds = refPeds.product(); + const HcalPedestals* myRefPeds = &es.getData(m_tok2); std::vector listNewChan = myNewPeds->getAllChannels(); std::vector listRefChan = myRefPeds->getAllChannels(); diff --git a/CondTools/Hcal/plugins/HcalChannelQualityPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalChannelQualityPopConAnalyzer.cc index 1b176c0fe389e..23f4e3476eabc 100644 --- a/CondTools/Hcal/plugins/HcalChannelQualityPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalChannelQualityPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalChannelQualityPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalChannelQualityPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get("withTopo", objecthandle); - myDBObject = new HcalChannelQuality(*objecthandle.product()); + myDBObject = new HcalChannelQuality(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalChannelQualityPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalChannelQuality* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalDcsMapPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalDcsMapPopConAnalyzer.cc index f237bcd817be8..003bfce375706 100644 --- a/CondTools/Hcal/plugins/HcalDcsMapPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalDcsMapPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalDcsMapPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalDcsMapPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalDcsMap(*objecthandle.product()); + myDBObject = new HcalDcsMap(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalDcsMapPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalDcsMap* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalDcsValuesPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalDcsValuesPopConAnalyzer.cc index 32180f7b7f5ee..d9751ca1768d5 100644 --- a/CondTools/Hcal/plugins/HcalDcsValuesPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalDcsValuesPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalDcsValuesPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalDcsValuesPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalDcsValues(*objecthandle.product()); + myDBObject = new HcalDcsValues(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalDcsValuesPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalDcsValues* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalDumpConditions.cc b/CondTools/Hcal/plugins/HcalDumpConditions.cc index 40c8131bdaffa..d9bcbad238841 100644 --- a/CondTools/Hcal/plugins/HcalDumpConditions.cc +++ b/CondTools/Hcal/plugins/HcalDumpConditions.cc @@ -18,7 +18,6 @@ September 21, 2009 Added HcalLutMetadata - Gena Kukartsev #include #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/EventSetup.h" @@ -41,6 +40,8 @@ namespace edmtest { explicit HcalDumpConditions(edm::ParameterSet const& p) { front = p.getUntrackedParameter("outFilePrefix", "Dump"); mDumpRequest = p.getUntrackedParameter >("dump", std::vector()); + m_toktopo = esConsumes(); + m_tokdb = esConsumes(); } explicit HcalDumpConditions(int i) {} @@ -65,6 +66,8 @@ namespace edmtest { private: std::string front; std::vector mDumpRequest; + edm::ESGetToken m_toktopo; + edm::ESGetToken m_tokdb; }; template @@ -75,12 +78,9 @@ namespace edmtest { const HcalTopology* topo, const std::string label) { if (std::find(mDumpRequest.begin(), mDumpRequest.end(), name) != mDumpRequest.end()) { - edm::ESHandle p; - if (!label.empty()) - context.get().get(label, p); - else - context.get().get(p); - S myobject(*p.product()); + edm::ESGetToken tok = + ((!label.empty()) ? esConsumes(edm::ESInputTag("", label)) : esConsumes()); + S myobject = context.getData(tok); if (topo) myobject.setTopo(topo); @@ -97,9 +97,8 @@ namespace edmtest { const edm::EventSetup& context, const std::string name) { if (std::find(mDumpRequest.begin(), mDumpRequest.end(), name) != mDumpRequest.end()) { - edm::ESHandle p; - context.get().get(p); - S myobject(*p.product()); + edm::ESGetToken tok = esConsumes(); + const S& myobject = context.getData(tok); writeToFile(myobject, e, name); @@ -119,9 +118,7 @@ namespace edmtest { } void HcalDumpConditions::analyze(const edm::Event& e, const edm::EventSetup& context) { - edm::ESHandle topology; - context.get().get(topology); - const HcalTopology* topo = &(*topology); + const HcalTopology* topo = &context.getData(m_toktopo); using namespace edm::eventsetup; std::cout << "HcalDumpConditions::analyze-> I AM IN RUN NUMBER " << e.id().run() << std::endl; @@ -164,13 +161,12 @@ namespace edmtest { dumpIt(mDumpRequest, e, context, "TPChannelParameters", topo); dumpIt(mDumpRequest, e, context, "TPParameters"); - edm::ESHandle pSetup; + const HcalDbService* pSetup = &context.getData(m_tokdb); if (std::find(mDumpRequest.begin(), mDumpRequest.end(), std::string("CalibrationsSet")) != mDumpRequest.end() || std::find(mDumpRequest.begin(), mDumpRequest.end(), std::string("CalibrationWidthsSet")) != mDumpRequest.end()) { - context.get().get(pSetup); if (std::find(mDumpRequest.begin(), mDumpRequest.end(), std::string("CalibrationsSet")) != mDumpRequest.end()) { - writeToFile(*pSetup->getHcalCalibrationsSet(), e, "CalibrationsSet"); + writeToFile(*(pSetup->getHcalCalibrationsSet()), e, "CalibrationsSet"); } if (std::find(mDumpRequest.begin(), mDumpRequest.end(), std::string("CalibrationWidthsSet")) != mDumpRequest.end()) { diff --git a/CondTools/Hcal/plugins/HcalElectronicsMapPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalElectronicsMapPopConAnalyzer.cc index b024e67dad579..5ce566d881100 100644 --- a/CondTools/Hcal/plugins/HcalElectronicsMapPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalElectronicsMapPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalElectronicsMapPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalElectronicsMapPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalElectronicsMap(*objecthandle.product()); + myDBObject = new HcalElectronicsMap(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalElectronicsMapPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalElectronicsMap* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalFlagHFDigiTimeParamsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalFlagHFDigiTimeParamsPopConAnalyzer.cc index 90164540727da..7f91c42149da0 100644 --- a/CondTools/Hcal/plugins/HcalFlagHFDigiTimeParamsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalFlagHFDigiTimeParamsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalFlagHFDigiTimeParamsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalFlagHFDigiTimeParamsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalFlagHFDigiTimeParams(*objecthandle.product()); + myDBObject = new HcalFlagHFDigiTimeParams(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalFlagHFDigiTimeParamsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalFlagHFDigiTimeParams* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalFrontEndMapPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalFrontEndMapPopConAnalyzer.cc index ded57990ff483..fa2625c0a8c24 100644 --- a/CondTools/Hcal/plugins/HcalFrontEndMapPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalFrontEndMapPopConAnalyzer.cc @@ -9,7 +9,8 @@ class HcalFrontEndMapPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -20,9 +21,7 @@ class HcalFrontEndMapPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalFrontEndMap(*objecthandle.product()); + myDBObject = new HcalFrontEndMap(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -30,6 +29,7 @@ class HcalFrontEndMapPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalFrontEndMap* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalGainWidthsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalGainWidthsPopConAnalyzer.cc index 82f6f1c780f85..ac98faa6f64da 100644 --- a/CondTools/Hcal/plugins/HcalGainWidthsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalGainWidthsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalGainWidthsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalGainWidthsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalGainWidths(*objecthandle.product()); + myDBObject = new HcalGainWidths(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalGainWidthsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalGainWidths* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalGainsCheck.cc b/CondTools/Hcal/plugins/HcalGainsCheck.cc index 0b76092f36fb1..5f131ba2c37dd 100644 --- a/CondTools/Hcal/plugins/HcalGainsCheck.cc +++ b/CondTools/Hcal/plugins/HcalGainsCheck.cc @@ -8,6 +8,9 @@ HcalGainsCheck::HcalGainsCheck(edm::ParameterSet const& ps) { emapflag = ps.getUntrackedParameter("checkEmap", false); validategainsflag = ps.getUntrackedParameter("validateGains", false); epsilon = ps.getUntrackedParameter("deltaG", 1000000); + m_tok1 = esConsumes(edm::ESInputTag("", "update")); + m_tok2 = esConsumes(edm::ESInputTag("", "reference")); + m_tokmap = esConsumes(edm::ESInputTag("", "reference")); } void HcalGainsCheck::beginJob() { @@ -48,19 +51,13 @@ void HcalGainsCheck::analyze(const edm::Event& ev, const edm::EventSetup& es) { bool epsilonflag = false; bool notequalsflag = false; // get new gains - edm::ESHandle newGains; - es.get().get("update", newGains); - const HcalGains* myNewGains = newGains.product(); + const HcalGains* myNewGains = &es.getData(m_tok1); // get reference gains - edm::ESHandle refGains; - es.get().get("reference", refGains); - const HcalGains* myRefGains = refGains.product(); + const HcalGains* myRefGains = &es.getData(m_tok2); // get e-map from reference - edm::ESHandle refEMap; - es.get().get("reference", refEMap); - const HcalElectronicsMap* myRefEMap = refEMap.product(); + const HcalElectronicsMap* myRefEMap = &es.getData(m_tokmap); // dump gains: if (dumpupdate != "null") { @@ -162,7 +159,7 @@ void HcalGainsCheck::analyze(const edm::Event& ev, const edm::EventSetup& es) { // or if it doesn't exist, the reference if (outfile != "null") { - HcalGains* resultGains = new HcalGains(refGains->topo()); + HcalGains* resultGains = new HcalGains(myRefGains->topo()); for (std::vector::const_iterator it = listRefChan.begin(); it != listRefChan.end(); it++) { DetId mydetid = *it; HcalGenericDetId myId(*it); diff --git a/CondTools/Hcal/plugins/HcalGainsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalGainsPopConAnalyzer.cc index d2f2d2d8934c2..3c328451b8ba3 100644 --- a/CondTools/Hcal/plugins/HcalGainsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalGainsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalGainsPopConAnalyzer : public popcon::PopConAnalyzer HcalGainsPopConAnalyzer(const edm::ParameterSet& pset) : popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalGainsPopConAnalyzer : public popcon::PopConAnalyzer void analyze(const edm::Event& ev, const edm::EventSetup& esetup) override { //Using ES to get the data: - edm::ESHandle objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalGains(*objecthandle.product()); + myDBObject = new HcalGains(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalGainsPopConAnalyzer : public popcon::PopConAnalyzer private: popcon::PopCon m_populator; SourceHandler m_source; + edm::ESGetToken m_tok; HcalGains* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalL1TriggerObjectsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalL1TriggerObjectsPopConAnalyzer.cc index d11979d641e0f..aa4348c0298d2 100644 --- a/CondTools/Hcal/plugins/HcalL1TriggerObjectsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalL1TriggerObjectsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalL1TriggerObjectsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalL1TriggerObjectsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalL1TriggerObjects(*objecthandle.product()); + myDBObject = new HcalL1TriggerObjects(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalL1TriggerObjectsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalL1TriggerObjects* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalLUTCorrsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalLUTCorrsPopConAnalyzer.cc index f70ec152f483d..d95360b7c5d31 100644 --- a/CondTools/Hcal/plugins/HcalLUTCorrsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalLUTCorrsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalLUTCorrsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalLUTCorrsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalLUTCorrs(*objecthandle.product()); + myDBObject = new HcalLUTCorrs(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalLUTCorrsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalLUTCorrs* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalLongRecoParamsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalLongRecoParamsPopConAnalyzer.cc index 302454d3c86d7..d1554d09d8667 100644 --- a/CondTools/Hcal/plugins/HcalLongRecoParamsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalLongRecoParamsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalLongRecoParamsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalLongRecoParamsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalLongRecoParams(*objecthandle.product()); + myDBObject = new HcalLongRecoParams(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalLongRecoParamsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalLongRecoParams* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalLutMetadataPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalLutMetadataPopConAnalyzer.cc index a8a701902e303..54787f37435b1 100644 --- a/CondTools/Hcal/plugins/HcalLutMetadataPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalLutMetadataPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalLutMetadataPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalLutMetadataPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalLutMetadata(*objecthandle.product()); + myDBObject = new HcalLutMetadata(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalLutMetadataPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalLutMetadata* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalMCParamsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalMCParamsPopConAnalyzer.cc index 42ad82487b8a6..47ad92d9e60d8 100644 --- a/CondTools/Hcal/plugins/HcalMCParamsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalMCParamsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalMCParamsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalMCParamsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalMCParams(*objecthandle.product()); + myDBObject = new HcalMCParams(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalMCParamsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalMCParams* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalPFCorrsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalPFCorrsPopConAnalyzer.cc index dac82fe7c5d07..ca78b7f025cf0 100644 --- a/CondTools/Hcal/plugins/HcalPFCorrsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalPFCorrsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalPFCorrsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalPFCorrsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalPFCorrs(*objecthandle.product()); + myDBObject = new HcalPFCorrs(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalPFCorrsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalPFCorrs* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalPedestalWidthsCheck.cc b/CondTools/Hcal/plugins/HcalPedestalWidthsCheck.cc index 9879b6f570c57..1bb4ed45a3cac 100644 --- a/CondTools/Hcal/plugins/HcalPedestalWidthsCheck.cc +++ b/CondTools/Hcal/plugins/HcalPedestalWidthsCheck.cc @@ -7,6 +7,9 @@ HcalPedestalWidthsCheck::HcalPedestalWidthsCheck(edm::ParameterSet const& ps) { checkemapflag = ps.getUntrackedParameter("checkEmap", false); validateflag = ps.getUntrackedParameter("validateWidths", false); epsilon = ps.getUntrackedParameter("deltaW", 0); + m_tok1 = esConsumes(edm::ESInputTag("", "update")); + m_tok2 = esConsumes(edm::ESInputTag("", "reference")); + m_tokmap = esConsumes(edm::ESInputTag("", "reference")); } HcalPedestalWidthsCheck::~HcalPedestalWidthsCheck() {} @@ -15,19 +18,13 @@ void HcalPedestalWidthsCheck::analyze(const edm::Event& ev, const edm::EventSetu using namespace edm::eventsetup; // get fake pedestals from file ("new pedestals") - edm::ESHandle newPeds; - es.get().get("update", newPeds); - const HcalPedestalWidths* myNewPeds = newPeds.product(); + const HcalPedestalWidths* myNewPeds = &es.getData(m_tok1); // get DB pedestals from Frontier/OrcoX ("reference") - edm::ESHandle refPeds; - es.get().get("reference", refPeds); - const HcalPedestalWidths* myRefPeds = refPeds.product(); + const HcalPedestalWidths* myRefPeds = &es.getData(m_tok2); // get e-map from reference - edm::ESHandle refEMap; - es.get().get("reference", refEMap); - const HcalElectronicsMap* myRefEMap = refEMap.product(); + const HcalElectronicsMap* myRefEMap = &es.getData(m_tokmap); // dump pedestals: if (dumpupdate != "null") { diff --git a/CondTools/Hcal/plugins/HcalPedestalWidthsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalPedestalWidthsPopConAnalyzer.cc index 9fc367e7e9939..628f0fe171c91 100644 --- a/CondTools/Hcal/plugins/HcalPedestalWidthsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalPedestalWidthsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalPedestalWidthsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalPedestalWidthsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalPedestalWidths(*objecthandle.product()); + myDBObject = new HcalPedestalWidths(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalPedestalWidthsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalPedestalWidths* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalPedestalsCheck.cc b/CondTools/Hcal/plugins/HcalPedestalsCheck.cc index aa1462afe7500..a38aef3e00099 100644 --- a/CondTools/Hcal/plugins/HcalPedestalsCheck.cc +++ b/CondTools/Hcal/plugins/HcalPedestalsCheck.cc @@ -7,6 +7,9 @@ HcalPedestalsCheck::HcalPedestalsCheck(edm::ParameterSet const& ps) { checkemapflag = ps.getUntrackedParameter("checkEmap", true); validatepedestalsflag = ps.getUntrackedParameter("validatePedestals", false); epsilon = ps.getUntrackedParameter("deltaP", 0); + m_tok1 = esConsumes(edm::ESInputTag("", "update")); + m_tok2 = esConsumes(edm::ESInputTag("", "reference")); + m_tokmap = esConsumes(edm::ESInputTag("", "reference")); } HcalPedestalsCheck::~HcalPedestalsCheck() {} @@ -15,19 +18,13 @@ void HcalPedestalsCheck::analyze(const edm::Event& ev, const edm::EventSetup& es using namespace edm::eventsetup; // get fake pedestals from file ("new pedestals") - edm::ESHandle newPeds; - es.get().get("update", newPeds); - const HcalPedestals* myNewPeds = newPeds.product(); + const HcalPedestals* myNewPeds = &es.getData(m_tok1); // get DB pedestals from Frontier/OrcoX ("reference") - edm::ESHandle refPeds; - es.get().get("reference", refPeds); - const HcalPedestals* myRefPeds = refPeds.product(); + const HcalPedestals* myRefPeds = &es.getData(m_tok2); // get e-map from reference - edm::ESHandle refEMap; - es.get().get("reference", refEMap); - const HcalElectronicsMap* myRefEMap = refEMap.product(); + const HcalElectronicsMap* myRefEMap = &es.getData(m_tokmap); // dump pedestals: if (!(dumprefs == "null")) { diff --git a/CondTools/Hcal/plugins/HcalPedestalsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalPedestalsPopConAnalyzer.cc index 80b74001b1411..236303265d766 100644 --- a/CondTools/Hcal/plugins/HcalPedestalsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalPedestalsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalPedestalsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalPedestalsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalPedestals(*objecthandle.product()); + myDBObject = new HcalPedestals(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalPedestalsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalPedestals* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalQIEDataCheck.cc b/CondTools/Hcal/plugins/HcalQIEDataCheck.cc index 4e9637fddb4b7..2e7d1626d727c 100644 --- a/CondTools/Hcal/plugins/HcalQIEDataCheck.cc +++ b/CondTools/Hcal/plugins/HcalQIEDataCheck.cc @@ -7,6 +7,9 @@ HcalQIEDataCheck::HcalQIEDataCheck(edm::ParameterSet const& ps) { checkemapflag = ps.getUntrackedParameter("checkEmap", false); validateflag = ps.getUntrackedParameter("validateQIEs", false); // epsilon = ps.getUntrackedParameter("deltaQIE",0); + m_tok1 = esConsumes(edm::ESInputTag("", "update")); + m_tok2 = esConsumes(edm::ESInputTag("", "reference")); + m_tokmap = esConsumes(edm::ESInputTag("", "reference")); } HcalQIEDataCheck::~HcalQIEDataCheck() {} @@ -14,17 +17,9 @@ HcalQIEDataCheck::~HcalQIEDataCheck() {} void HcalQIEDataCheck::analyze(const edm::Event& ev, const edm::EventSetup& es) { using namespace edm::eventsetup; - edm::ESHandle newQIEs; - es.get().get("update", newQIEs); - const HcalQIEData* myNewQIEs = newQIEs.product(); - - edm::ESHandle refQIEs; - es.get().get("reference", refQIEs); - const HcalQIEData* myRefQIEs = refQIEs.product(); - - edm::ESHandle refEMap; - es.get().get("reference", refEMap); - const HcalElectronicsMap* myRefEMap = refEMap.product(); + const HcalQIEData* myNewQIEs = &es.getData(m_tok1); + const HcalQIEData* myRefQIEs = &es.getData(m_tok2); + const HcalElectronicsMap* myRefEMap = &es.getData(m_tokmap); if (dumpupdate != "null") { std::ofstream outStream(dumpupdate.c_str()); diff --git a/CondTools/Hcal/plugins/HcalQIEDataPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalQIEDataPopConAnalyzer.cc index d5d12011e9224..939e1911bc435 100644 --- a/CondTools/Hcal/plugins/HcalQIEDataPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalQIEDataPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalQIEDataPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalQIEDataPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalQIEData(*objecthandle.product()); + myDBObject = new HcalQIEData(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalQIEDataPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalQIEData* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalQIETypesPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalQIETypesPopConAnalyzer.cc index 51aa10cec2b10..6b3684913f539 100644 --- a/CondTools/Hcal/plugins/HcalQIETypesPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalQIETypesPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalQIETypesPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalQIETypesPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalQIETypes(*objecthandle.product()); + myDBObject = new HcalQIETypes(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalQIETypesPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalQIETypes* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalRecoParamsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalRecoParamsPopConAnalyzer.cc index 36b87bd383e8c..e9fea433d58f0 100644 --- a/CondTools/Hcal/plugins/HcalRecoParamsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalRecoParamsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalRecoParamsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalRecoParamsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalRecoParams(*objecthandle.product()); + myDBObject = new HcalRecoParams(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalRecoParamsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalRecoParams* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalRespCorrsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalRespCorrsPopConAnalyzer.cc index fad9e69009090..a8e2e9f78b2a1 100644 --- a/CondTools/Hcal/plugins/HcalRespCorrsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalRespCorrsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalRespCorrsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalRespCorrsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalRespCorrs(*objecthandle.product()); + myDBObject = new HcalRespCorrs(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalRespCorrsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalRespCorrs* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalSiPMCharacteristicsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalSiPMCharacteristicsPopConAnalyzer.cc index b9296c9754824..0dc7d238de4e0 100644 --- a/CondTools/Hcal/plugins/HcalSiPMCharacteristicsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalSiPMCharacteristicsPopConAnalyzer.cc @@ -9,7 +9,8 @@ class HcalSiPMCharacteristicsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -20,9 +21,7 @@ class HcalSiPMCharacteristicsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalSiPMCharacteristics(*objecthandle.product()); + myDBObject = new HcalSiPMCharacteristics(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -30,6 +29,7 @@ class HcalSiPMCharacteristicsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalSiPMCharacteristics* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalSiPMParametersPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalSiPMParametersPopConAnalyzer.cc index 8e978c6787378..90fdf7bcdac71 100644 --- a/CondTools/Hcal/plugins/HcalSiPMParametersPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalSiPMParametersPopConAnalyzer.cc @@ -9,7 +9,8 @@ class HcalSiPMParametersPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -20,9 +21,7 @@ class HcalSiPMParametersPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalSiPMParameters(*objecthandle.product()); + myDBObject = new HcalSiPMParameters(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -30,6 +29,7 @@ class HcalSiPMParametersPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalSiPMParameters* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalTPChannelParametersPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalTPChannelParametersPopConAnalyzer.cc index 37c2599582da3..19f49de61d297 100644 --- a/CondTools/Hcal/plugins/HcalTPChannelParametersPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalTPChannelParametersPopConAnalyzer.cc @@ -9,7 +9,8 @@ class HcalTPChannelParametersPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -20,9 +21,7 @@ class HcalTPChannelParametersPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalTPChannelParameters(*objecthandle.product()); + myDBObject = new HcalTPChannelParameters(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -30,6 +29,7 @@ class HcalTPChannelParametersPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalTPChannelParameters* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalTPParametersPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalTPParametersPopConAnalyzer.cc index 8f71ce1c730d7..2c36d05e543b1 100644 --- a/CondTools/Hcal/plugins/HcalTPParametersPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalTPParametersPopConAnalyzer.cc @@ -9,7 +9,8 @@ class HcalTPParametersPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -20,9 +21,7 @@ class HcalTPParametersPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalTPParameters(*objecthandle.product()); + myDBObject = new HcalTPParameters(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -30,6 +29,7 @@ class HcalTPParametersPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalTPParameters* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalTimeCorrsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalTimeCorrsPopConAnalyzer.cc index bcde68779500b..f90289a303e5a 100644 --- a/CondTools/Hcal/plugins/HcalTimeCorrsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalTimeCorrsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalTimeCorrsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalTimeCorrsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalTimeCorrs(*objecthandle.product()); + myDBObject = new HcalTimeCorrs(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalTimeCorrsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalTimeCorrs* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalTimingParamsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalTimingParamsPopConAnalyzer.cc index 3de95cf61e066..c028084df5c3f 100644 --- a/CondTools/Hcal/plugins/HcalTimingParamsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalTimingParamsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalTimingParamsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalTimingParamsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalTimingParams(*objecthandle.product()); + myDBObject = new HcalTimingParams(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalTimingParamsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalTimingParams* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalValidationCorrsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalValidationCorrsPopConAnalyzer.cc index 37bcc0aeda58c..69010142cfea3 100644 --- a/CondTools/Hcal/plugins/HcalValidationCorrsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalValidationCorrsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalValidationCorrsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalValidationCorrsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalValidationCorrs(*objecthandle.product()); + myDBObject = new HcalValidationCorrs(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalValidationCorrsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalValidationCorrs* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalZDCLowGainFractionsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalZDCLowGainFractionsPopConAnalyzer.cc index c46987a4c77e0..97f30fa045437 100644 --- a/CondTools/Hcal/plugins/HcalZDCLowGainFractionsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalZDCLowGainFractionsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalZDCLowGainFractionsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -23,10 +24,7 @@ class HcalZDCLowGainFractionsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - - myDBObject = new HcalZDCLowGainFractions(*objecthandle.product()); + myDBObject = new HcalZDCLowGainFractions(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -34,6 +32,7 @@ class HcalZDCLowGainFractionsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalZDCLowGainFractions* myDBObject; }; diff --git a/CondTools/Hcal/plugins/HcalZSThresholdsPopConAnalyzer.cc b/CondTools/Hcal/plugins/HcalZSThresholdsPopConAnalyzer.cc index ad57a574571bd..ace8be1062ae9 100644 --- a/CondTools/Hcal/plugins/HcalZSThresholdsPopConAnalyzer.cc +++ b/CondTools/Hcal/plugins/HcalZSThresholdsPopConAnalyzer.cc @@ -11,7 +11,8 @@ class HcalZSThresholdsPopConAnalyzer : public popcon::PopConAnalyzer(pset), m_populator(pset), - m_source(pset.getParameter("Source")) {} + m_source(pset.getParameter("Source")), + m_tok(esConsumes()) {} private: void endJob() override { @@ -22,9 +23,7 @@ class HcalZSThresholdsPopConAnalyzer : public popcon::PopConAnalyzer objecthandle; - esetup.get().get(objecthandle); - myDBObject = new HcalZSThresholds(*objecthandle.product()); + myDBObject = new HcalZSThresholds(esetup.getData(m_tok)); } void write() { m_populator.write(m_source); } @@ -32,6 +31,7 @@ class HcalZSThresholdsPopConAnalyzer : public popcon::PopConAnalyzer m_tok; HcalZSThresholds* myDBObject; }; diff --git a/CondTools/Hcal/test/BuildFile.xml b/CondTools/Hcal/test/BuildFile.xml index 7b4a7ae810c0a..b9787439fa220 100644 --- a/CondTools/Hcal/test/BuildFile.xml +++ b/CondTools/Hcal/test/BuildFile.xml @@ -26,3 +26,7 @@ + + + + diff --git a/CondTools/Hcal/test/HcalConditionsTest.cc b/CondTools/Hcal/test/HcalConditionsTest.cc index af690e8d42ff3..32fab2ee0e87a 100644 --- a/CondTools/Hcal/test/HcalConditionsTest.cc +++ b/CondTools/Hcal/test/HcalConditionsTest.cc @@ -16,7 +16,6 @@ R.Ofierzynski - 2.Oct. 2007 #include #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/EventSetup.h" @@ -24,7 +23,7 @@ R.Ofierzynski - 2.Oct. 2007 #include "CondFormats/DataRecord/interface/HcalPedestalsRcd.h" #include "CondFormats/DataRecord/interface/HcalQIEDataRcd.h" -#include "CondFormats/DataRecord/interface/HcalQIETypeRcd.h" +#include "CondFormats/DataRecord/interface/HcalQIETypesRcd.h" #include "CondFormats/DataRecord/interface/HcalPedestalWidthsRcd.h" #include "CondFormats/DataRecord/interface/HcalGainsRcd.h" #include "CondFormats/DataRecord/interface/HcalElectronicsMapRcd.h" @@ -36,112 +35,76 @@ R.Ofierzynski - 2.Oct. 2007 #include "CalibFormats/HcalObjects/interface/HcalDbService.h" #include "CalibFormats/HcalObjects/interface/HcalDbRecord.h" +#include "Geometry/Records/interface/HcalRecNumberingRecord.h" +#include "Geometry/CaloTopology/interface/HcalTopology.h" #include "FWCore/Framework/interface/IOVSyncValue.h" -namespace edmtest -{ - class HcalConditionsTest : public edm::EDAnalyzer - { +namespace edmtest { + class HcalConditionsTest : public edm::EDAnalyzer { public: - explicit HcalConditionsTest(edm::ParameterSet const& p) - { - front = p.getUntrackedParameter("outFilePrefix","Dump"); + explicit HcalConditionsTest(edm::ParameterSet const& p) { + front = p.getUntrackedParameter("outFilePrefix", "Dump"); + tok_ = esConsumes(); + tok_htopo_ = esConsumes(); } - explicit HcalConditionsTest(int i) - { } - virtual ~ HcalConditionsTest() { } + explicit HcalConditionsTest(int i) { + tok_ = esConsumes(); + tok_htopo_ = esConsumes(); + } + virtual ~HcalConditionsTest() {} virtual void analyze(const edm::Event& e, const edm::EventSetup& c); - template void dumpIt(S* myS, SRcd* mySRcd, const edm::Event& e, const edm::EventSetup& context, std::string name); + template + void dumpIt(S* myS, SRcd* mySRcd, const edm::Event& e, const edm::EventSetup& context, std::string name); private: std::string front; + edm::ESGetToken tok_; + edm::ESGetToken tok_htopo_; }; - - template - void HcalConditionsTest::dumpIt(S* myS, SRcd* mySRcd, const edm::Event& e, const edm::EventSetup& context, std::string name) - { + template + void HcalConditionsTest::dumpIt( + S* myS, SRcd* mySRcd, const edm::Event& e, const edm::EventSetup& context, std::string name) { + edm::ESGetToken tok = esConsumes(); int myrun = e.id().run(); - edm::ESHandle p; - context.get().get(p); - S* myobject = new S(*p.product()); - + const S* myobject = &context.getData(tok); + std::ostringstream file; file << front << name.c_str() << "_Run" << myrun << ".txt"; - std::ofstream outStream(file.str().c_str() ); + std::ofstream outStream(file.str().c_str()); std::cout << "HcalConditionsTest: ---- Dumping " << name.c_str() << " ----" << std::endl; - HcalDbASCIIIO::dumpObject (outStream, (*myobject) ); + HcalDbASCIIIO::dumpObject(outStream, (*myobject)); - if ( context.get().validityInterval().first() == edm::IOVSyncValue::invalidIOVSyncValue() ) + if (context.get().validityInterval().first() == edm::IOVSyncValue::invalidIOVSyncValue()) std::cout << "error: invalid IOV sync value !" << std::endl; - } - - void - HcalConditionsTest::analyze(const edm::Event& e, const edm::EventSetup& context) - { + void HcalConditionsTest::analyze(const edm::Event& e, const edm::EventSetup& context) { using namespace edm::eventsetup; - std::cout <<"HcalConditionsTest::analyze-> I AM IN RUN NUMBER "< conditions; - context.get().get(conditions); - - int cell = HcalDetId (HcalBarrel, -1, 4, 1).rawId(); - - const HcalCalibrations& calibrations=conditions->getHcalCalibrations(cell); - - - -// int iov = 0; -// // e-map -// edm::ESHandle p; -// context.get().get(p); -// HcalElectronicsMap* myemap = new HcalElectronicsMap(*p.product()); -// myemap->sort(); -// -// // dump emap -// std::ostringstream filenameE; -// filenameE << front << "HcalElectronicsMap" << "_" << iov << ".txt"; -// std::ofstream outStreamE(filenameE.str().c_str()); -// std::cout << "--- Dumping Electronics Map ---" << std::endl; -// HcalDbASCIIIO::dumpObject (outStreamE, (*myemap) ); -// -// std::cout <<" Hcal peds for channel HB eta=15, phi=5, depth=2 "<getValues (channelID); -// if (values) std::cout << "pedestals for channel " << channelID << ": " -// << values [0] << '/' << values [1] << '/' << values [2] << '/' << values [3] << std::endl; -// values = mypedW->getValues (channelID); -// if (values) std::cout << "pedestal widths for channel " << channelID << ": " -// << values [0] << '/' << values [1] << '/' << values [2] << '/' << values [3] << std::endl; -// values = mygain->getValues (channelID); -// if (values) std::cout << "gains for channel " << channelID << ": " -// << values [0] << '/' << values [1] << '/' << values [2] << '/' << values [3] << std::endl; -// values = mygainW->getValues (channelID); -// if (values) std::cout << "gain widts for channel " << channelID << ": " -// << values [0] << '/' << values [1] << '/' << values [2] << '/' << values [3] << std::endl; + std::cout << "HcalConditionsTest::analyze-> I AM IN RUN NUMBER " << e.id().run() << std::endl; + const HcalTopology* topo = &context.getData(tok_htopo_); + + dumpIt(new HcalElectronicsMap, new HcalElectronicsMapRcd, e, context, "ElectronicsMap"); + dumpIt(new HcalQIEData, new HcalQIEDataRcd, e, context, "QIEData"); + dumpIt(new HcalQIETypes, new HcalQIETypesRcd, e, context, "QIETypes"); + dumpIt(new HcalPedestals(topo, false), new HcalPedestalsRcd, e, context, "Pedestals"); + dumpIt(new HcalPedestalWidths(topo, false), new HcalPedestalWidthsRcd, e, context, "PedestalWidths"); + dumpIt(new HcalGains, new HcalGainsRcd, e, context, "Gains"); + dumpIt(new HcalGainWidths, new HcalGainWidthsRcd, e, context, "GainWidths"); + dumpIt(new HcalRespCorrs, new HcalRespCorrsRcd, e, context, "RespCorrs"); + dumpIt(new HcalChannelQuality, new HcalChannelQualityRcd, e, context, "ChannelQuality"); + dumpIt(new HcalZSThresholds, new HcalZSThresholdsRcd, e, context, "ZSThresholds"); + + // get conditions + const auto& conditions = &context.getData(tok_); + int cell = HcalDetId(HcalBarrel, -1, 4, 1).rawId(); + const HcalCalibrations& calibrations = conditions->getHcalCalibrations(cell); + std::cout << HcalDetId(cell) << " RespCorr " << calibrations.respcorr() << " TimeCorr " << calibrations.timecorr() + << std::endl; } + DEFINE_FWK_MODULE(HcalConditionsTest); -} +} // namespace edmtest diff --git a/CondTools/L1Trigger/test/L1ConfigWriteIOVDummy_cfg.py b/CondTools/L1Trigger/test/L1ConfigWriteIOVDummy_cfg.py index d4791b90f9579..824e1090cf70d 100644 --- a/CondTools/L1Trigger/test/L1ConfigWriteIOVDummy_cfg.py +++ b/CondTools/L1Trigger/test/L1ConfigWriteIOVDummy_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWriteIOVDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1Trigger/test/L1ConfigWriteIOVOnline_cfg.py b/CondTools/L1Trigger/test/L1ConfigWriteIOVOnline_cfg.py index 49e3b89e469b9..65c7e556cd81f 100644 --- a/CondTools/L1Trigger/test/L1ConfigWriteIOVOnline_cfg.py +++ b/CondTools/L1Trigger/test/L1ConfigWriteIOVOnline_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWriteIOVOnline") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1Trigger/test/L1ConfigWritePayloadCondDB_cfg.py b/CondTools/L1Trigger/test/L1ConfigWritePayloadCondDB_cfg.py index 424b866412b70..ebf95ec1e07ff 100644 --- a/CondTools/L1Trigger/test/L1ConfigWritePayloadCondDB_cfg.py +++ b/CondTools/L1Trigger/test/L1ConfigWritePayloadCondDB_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1Trigger/test/L1ConfigWritePayloadDummy_cfg.py b/CondTools/L1Trigger/test/L1ConfigWritePayloadDummy_cfg.py index 040666885ebcc..c019351e82a31 100644 --- a/CondTools/L1Trigger/test/L1ConfigWritePayloadDummy_cfg.py +++ b/CondTools/L1Trigger/test/L1ConfigWritePayloadDummy_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1Trigger/test/L1ConfigWritePayloadOnline_cfg.py b/CondTools/L1Trigger/test/L1ConfigWritePayloadOnline_cfg.py index a71b73f114e40..ad7a7db47ce31 100644 --- a/CondTools/L1Trigger/test/L1ConfigWritePayloadOnline_cfg.py +++ b/CondTools/L1Trigger/test/L1ConfigWritePayloadOnline_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadOnline") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1Trigger/test/L1ConfigWriteRSIOVOnline_cfg.py b/CondTools/L1Trigger/test/L1ConfigWriteRSIOVOnline_cfg.py index ed13f29961792..b6819ce33fd2e 100644 --- a/CondTools/L1Trigger/test/L1ConfigWriteRSIOVOnline_cfg.py +++ b/CondTools/L1Trigger/test/L1ConfigWriteRSIOVOnline_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWriteRSIOVOnline") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1Trigger/test/L1ConfigWriteRSOnline_cfg.py b/CondTools/L1Trigger/test/L1ConfigWriteRSOnline_cfg.py index d94bb4e140027..d76fda0d6e265 100644 --- a/CondTools/L1Trigger/test/L1ConfigWriteRSOnline_cfg.py +++ b/CondTools/L1Trigger/test/L1ConfigWriteRSOnline_cfg.py @@ -5,7 +5,7 @@ process = cms.Process("L1ConfigWriteRSOnline") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1Trigger/test/L1ConfigWriteRSPayloadOnline_cfg.py b/CondTools/L1Trigger/test/L1ConfigWriteRSPayloadOnline_cfg.py index 39431b91006ac..eafd37f2bfe14 100644 --- a/CondTools/L1Trigger/test/L1ConfigWriteRSPayloadOnline_cfg.py +++ b/CondTools/L1Trigger/test/L1ConfigWriteRSPayloadOnline_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWriteRSPayloadOnline") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1Trigger/test/L1ConfigWriteSingleIOV_cfg.py b/CondTools/L1Trigger/test/L1ConfigWriteSingleIOV_cfg.py index 316e41da2a696..257cfd7e3869f 100644 --- a/CondTools/L1Trigger/test/L1ConfigWriteSingleIOV_cfg.py +++ b/CondTools/L1Trigger/test/L1ConfigWriteSingleIOV_cfg.py @@ -4,7 +4,7 @@ process = cms.Process("L1ConfigWriteIOVDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1Trigger/test/L1ConfigWriteSinglePayload_cfg.py b/CondTools/L1Trigger/test/L1ConfigWriteSinglePayload_cfg.py index e0868eedcb849..1249a34699979 100644 --- a/CondTools/L1Trigger/test/L1ConfigWriteSinglePayload_cfg.py +++ b/CondTools/L1Trigger/test/L1ConfigWriteSinglePayload_cfg.py @@ -5,7 +5,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1Trigger/test/L1GtRunSettingsViewer_cfg.py b/CondTools/L1Trigger/test/L1GtRunSettingsViewer_cfg.py index 0be30d4710ebc..cec89ae4720ca 100644 --- a/CondTools/L1Trigger/test/L1GtRunSettingsViewer_cfg.py +++ b/CondTools/L1Trigger/test/L1GtRunSettingsViewer_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigValidation") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1Trigger/test/init_cfg.py b/CondTools/L1Trigger/test/init_cfg.py index 7bbe5dbcf5bab..474ccb639f823 100644 --- a/CondTools/L1Trigger/test/init_cfg.py +++ b/CondTools/L1Trigger/test/init_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1Trigger/test/l1o2otestanalyzer_cfg.py b/CondTools/L1Trigger/test/l1o2otestanalyzer_cfg.py index f8e65e2c1d84e..34e419892ad52 100644 --- a/CondTools/L1Trigger/test/l1o2otestanalyzer_cfg.py +++ b/CondTools/L1Trigger/test/l1o2otestanalyzer_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigValidation") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1Trigger/test/validate-l1Key.py b/CondTools/L1Trigger/test/validate-l1Key.py index 61f9a61cef069..b78ad8bf1dfc7 100644 --- a/CondTools/L1Trigger/test/validate-l1Key.py +++ b/CondTools/L1Trigger/test/validate-l1Key.py @@ -109,9 +109,10 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['*'] -process.MessageLogger.categories = ['*'] -process.MessageLogger.destinations = ['cout'] + +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO'), DEBUG=cms.untracked.PSet( limit=cms.untracked.int32(-1) diff --git a/CondTools/L1TriggerExt/test/L1ConfigWriteIOVDummyExt_cfg.py b/CondTools/L1TriggerExt/test/L1ConfigWriteIOVDummyExt_cfg.py index 3442b9108d437..9f7716cff1eaa 100644 --- a/CondTools/L1TriggerExt/test/L1ConfigWriteIOVDummyExt_cfg.py +++ b/CondTools/L1TriggerExt/test/L1ConfigWriteIOVDummyExt_cfg.py @@ -10,7 +10,7 @@ process = cms.Process("L1ConfigWriteIOVDummyExt") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1TriggerExt/test/L1ConfigWriteIOVOnlineExt_cfg.py b/CondTools/L1TriggerExt/test/L1ConfigWriteIOVOnlineExt_cfg.py index 40cbfd7459307..c21763852d01b 100644 --- a/CondTools/L1TriggerExt/test/L1ConfigWriteIOVOnlineExt_cfg.py +++ b/CondTools/L1TriggerExt/test/L1ConfigWriteIOVOnlineExt_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWriteIOVOnlineExt") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1TriggerExt/test/L1ConfigWritePayloadCondDBExt_cfg.py b/CondTools/L1TriggerExt/test/L1ConfigWritePayloadCondDBExt_cfg.py index 9adbe1650f147..9c6bf7223ed39 100644 --- a/CondTools/L1TriggerExt/test/L1ConfigWritePayloadCondDBExt_cfg.py +++ b/CondTools/L1TriggerExt/test/L1ConfigWritePayloadCondDBExt_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1TriggerExt/test/L1ConfigWritePayloadDummyExt_cfg.py b/CondTools/L1TriggerExt/test/L1ConfigWritePayloadDummyExt_cfg.py index d840617977b1c..617bea7c348e3 100644 --- a/CondTools/L1TriggerExt/test/L1ConfigWritePayloadDummyExt_cfg.py +++ b/CondTools/L1TriggerExt/test/L1ConfigWritePayloadDummyExt_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1TriggerExt/test/L1ConfigWritePayloadOnlineExt_cfg.py b/CondTools/L1TriggerExt/test/L1ConfigWritePayloadOnlineExt_cfg.py index 400d951e16ea3..c1f66c111e641 100644 --- a/CondTools/L1TriggerExt/test/L1ConfigWritePayloadOnlineExt_cfg.py +++ b/CondTools/L1TriggerExt/test/L1ConfigWritePayloadOnlineExt_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadOnline") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') process.MessageLogger.suppressInfo = cms.untracked.vstring('L1TMuonBarrelParamsOnlineProd') # suppressDebug, suppressWarning diff --git a/CondTools/L1TriggerExt/test/L1ConfigWriteRSIOVOnlineExt_cfg.py b/CondTools/L1TriggerExt/test/L1ConfigWriteRSIOVOnlineExt_cfg.py index c114bc28677df..4a36127755797 100644 --- a/CondTools/L1TriggerExt/test/L1ConfigWriteRSIOVOnlineExt_cfg.py +++ b/CondTools/L1TriggerExt/test/L1ConfigWriteRSIOVOnlineExt_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWriteRSIOVOnline") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1TriggerExt/test/L1ConfigWriteRSOnlineExt_cfg.py b/CondTools/L1TriggerExt/test/L1ConfigWriteRSOnlineExt_cfg.py index f482033d54d29..601e1445cf211 100644 --- a/CondTools/L1TriggerExt/test/L1ConfigWriteRSOnlineExt_cfg.py +++ b/CondTools/L1TriggerExt/test/L1ConfigWriteRSOnlineExt_cfg.py @@ -5,7 +5,7 @@ process = cms.Process("L1ConfigWriteRSOnline") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1TriggerExt/test/L1ConfigWriteRSPayloadOnlineExt_cfg.py b/CondTools/L1TriggerExt/test/L1ConfigWriteRSPayloadOnlineExt_cfg.py index 3eb923c9cd54f..3b6ebeea149a8 100644 --- a/CondTools/L1TriggerExt/test/L1ConfigWriteRSPayloadOnlineExt_cfg.py +++ b/CondTools/L1TriggerExt/test/L1ConfigWriteRSPayloadOnlineExt_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWriteRSPayloadOnline") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1TriggerExt/test/L1ConfigWriteSingleIOVExt_cfg.py b/CondTools/L1TriggerExt/test/L1ConfigWriteSingleIOVExt_cfg.py index be6d626bc8f3e..660c3b4951546 100644 --- a/CondTools/L1TriggerExt/test/L1ConfigWriteSingleIOVExt_cfg.py +++ b/CondTools/L1TriggerExt/test/L1ConfigWriteSingleIOVExt_cfg.py @@ -4,7 +4,7 @@ process = cms.Process("L1ConfigWriteIOVDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1TriggerExt/test/L1ConfigWriteSinglePayloadExt_cfg.py b/CondTools/L1TriggerExt/test/L1ConfigWriteSinglePayloadExt_cfg.py index 08bddc4c4d8bf..ff8e7a9184db2 100644 --- a/CondTools/L1TriggerExt/test/L1ConfigWriteSinglePayloadExt_cfg.py +++ b/CondTools/L1TriggerExt/test/L1ConfigWriteSinglePayloadExt_cfg.py @@ -4,7 +4,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1TriggerExt/test/init_cfg.py b/CondTools/L1TriggerExt/test/init_cfg.py index d18aa6a4d2f7d..55c41b0e30e28 100644 --- a/CondTools/L1TriggerExt/test/init_cfg.py +++ b/CondTools/L1TriggerExt/test/init_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/L1TriggerExt/test/l1o2otestanalyzer_cfg.py b/CondTools/L1TriggerExt/test/l1o2otestanalyzer_cfg.py index 631580134df86..de0b09b120625 100644 --- a/CondTools/L1TriggerExt/test/l1o2otestanalyzer_cfg.py +++ b/CondTools/L1TriggerExt/test/l1o2otestanalyzer_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigValidation") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/RPC/src/RPCLBLinkNameParser.cc b/CondTools/RPC/src/RPCLBLinkNameParser.cc index 66734dc632eea..6cc37953d42e0 100644 --- a/CondTools/RPC/src/RPCLBLinkNameParser.cc +++ b/CondTools/RPC/src/RPCLBLinkNameParser.cc @@ -1,7 +1,7 @@ #include "CondTools/RPC/interface/RPCLBLinkNameParser.h" #include - +#include #include "FWCore/Utilities/interface/Exception.h" void RPCLBLinkNameParser::parse(std::string const& name, RPCLBLink& lb_link) { diff --git a/CondTools/RPC/test/L1RPCConeDefinitionWriteSinglePayload_cfg.py b/CondTools/RPC/test/L1RPCConeDefinitionWriteSinglePayload_cfg.py index 85cd0b6d74a0e..fddee5ef66070 100644 --- a/CondTools/RPC/test/L1RPCConeDefinitionWriteSinglePayload_cfg.py +++ b/CondTools/RPC/test/L1RPCConeDefinitionWriteSinglePayload_cfg.py @@ -6,7 +6,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/RPC/test/L1RPCConfigWriteSinglePayload_cfg.py b/CondTools/RPC/test/L1RPCConfigWriteSinglePayload_cfg.py index edbc0c810c0ed..81e3f3a75b477 100644 --- a/CondTools/RPC/test/L1RPCConfigWriteSinglePayload_cfg.py +++ b/CondTools/RPC/test/L1RPCConfigWriteSinglePayload_cfg.py @@ -6,7 +6,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/CondTools/RPC/test/RPCCPPFLinkMapPopConAnalyzer_cfg.py b/CondTools/RPC/test/RPCCPPFLinkMapPopConAnalyzer_cfg.py index 833d60086675d..ca4bd90f9469e 100644 --- a/CondTools/RPC/test/RPCCPPFLinkMapPopConAnalyzer_cfg.py +++ b/CondTools/RPC/test/RPCCPPFLinkMapPopConAnalyzer_cfg.py @@ -31,8 +31,7 @@ , interval = cms.uint64(1) ) -process.MessageLogger.destinations.append("RPCCPPFLinkMapPopConAnalyzer_log") -process.MessageLogger.RPCCPPFLinkMapPopConAnalyzer_log = cms.untracked.PSet( +process.MessageLogger.files.RPCCPPFLinkMapPopConAnalyzer_log = cms.untracked.PSet( threshold = cms.untracked.string("INFO") , FwkReport = cms.untracked.PSet( reportEvery = cms.untracked.int32(1) diff --git a/CondTools/RPC/test/RPCDCCLinkMapPopConAnalyzer_cfg.py b/CondTools/RPC/test/RPCDCCLinkMapPopConAnalyzer_cfg.py index 3dbaab9fc8b68..4f83f6584ac3a 100644 --- a/CondTools/RPC/test/RPCDCCLinkMapPopConAnalyzer_cfg.py +++ b/CondTools/RPC/test/RPCDCCLinkMapPopConAnalyzer_cfg.py @@ -30,8 +30,7 @@ , interval = cms.uint64(1) ) -process.MessageLogger.destinations.append("RPCDCCLinkMapPopConAnalyzer_log") -process.MessageLogger.RPCDCCLinkMapPopConAnalyzer_log = cms.untracked.PSet( +process.MessageLogger.files.RPCDCCLinkMapPopConAnalyzer_log = cms.untracked.PSet( threshold = cms.untracked.string("INFO") , FwkReport = cms.untracked.PSet( reportEvery = cms.untracked.int32(1) diff --git a/CondTools/RPC/test/RPCLBLinkMapPopConAnalyzer_cfg.py b/CondTools/RPC/test/RPCLBLinkMapPopConAnalyzer_cfg.py index fbadc94c8630a..7470697481949 100644 --- a/CondTools/RPC/test/RPCLBLinkMapPopConAnalyzer_cfg.py +++ b/CondTools/RPC/test/RPCLBLinkMapPopConAnalyzer_cfg.py @@ -30,8 +30,7 @@ , interval = cms.uint64(1) ) -process.MessageLogger.destinations.append("RPCLBLinkMapPopConAnalyzer_log") -process.MessageLogger.RPCLBLinkMapPopConAnalyzer_log = cms.untracked.PSet( +process.MessageLogger.files.RPCLBLinkMapPopConAnalyzer_log = cms.untracked.PSet( threshold = cms.untracked.string("INFO") , FwkReport = cms.untracked.PSet( reportEvery = cms.untracked.int32(1) diff --git a/CondTools/RPC/test/RPCOMTFLinkMapPopConAnalyzer_cfg.py b/CondTools/RPC/test/RPCOMTFLinkMapPopConAnalyzer_cfg.py index 060fed18d376c..a2df9dd01fed8 100644 --- a/CondTools/RPC/test/RPCOMTFLinkMapPopConAnalyzer_cfg.py +++ b/CondTools/RPC/test/RPCOMTFLinkMapPopConAnalyzer_cfg.py @@ -31,8 +31,7 @@ , interval = cms.uint64(1) ) -process.MessageLogger.destinations.append("RPCOMTFLinkMapPopConAnalyzer_log") -process.MessageLogger.RPCOMTFLinkMapPopConAnalyzer_log = cms.untracked.PSet( +process.MessageLogger.files.RPCOMTFLinkMapPopConAnalyzer_log = cms.untracked.PSet( threshold = cms.untracked.string("INFO") , FwkReport = cms.untracked.PSet( reportEvery = cms.untracked.int32(1) diff --git a/CondTools/RPC/test/RPCTwinMuxLinkMapPopConAnalyzer_cfg.py b/CondTools/RPC/test/RPCTwinMuxLinkMapPopConAnalyzer_cfg.py index 76d16962c4cfc..313f93e6c2444 100644 --- a/CondTools/RPC/test/RPCTwinMuxLinkMapPopConAnalyzer_cfg.py +++ b/CondTools/RPC/test/RPCTwinMuxLinkMapPopConAnalyzer_cfg.py @@ -30,8 +30,7 @@ , interval = cms.uint64(1) ) -process.MessageLogger.destinations.append("RPCTwinMuxLinkMapPopConAnalyzer_log") -process.MessageLogger.RPCTwinMuxLinkMapPopConAnalyzer_log = cms.untracked.PSet( +process.MessageLogger.files.RPCTwinMuxLinkMapPopConAnalyzer_log = cms.untracked.PSet( threshold = cms.untracked.string("INFO") , FwkReport = cms.untracked.PSet( reportEvery = cms.untracked.int32(1) diff --git a/CondTools/SiPhase2Tracker/plugins/DTCCablingMapTestReader.cc b/CondTools/SiPhase2Tracker/plugins/DTCCablingMapTestReader.cc index 1b0505644afe2..b3068668aa694 100644 --- a/CondTools/SiPhase2Tracker/plugins/DTCCablingMapTestReader.cc +++ b/CondTools/SiPhase2Tracker/plugins/DTCCablingMapTestReader.cc @@ -24,7 +24,6 @@ Description: [one line class summary] #include #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" @@ -50,6 +49,9 @@ class DTCCablingMapTestReader : public edm::one::EDAnalyzer<> { void beginJob() override; void analyze(const edm::Event&, const edm::EventSetup&) override; void endJob() override; + + // ----------member data --------------------------- + const edm::ESGetToken cablingMapToken_; }; void DTCCablingMapTestReader::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { @@ -60,7 +62,7 @@ void DTCCablingMapTestReader::fillDescriptions(edm::ConfigurationDescriptions& d descriptions.add("DTCCablingMapTestReader", desc); } -DTCCablingMapTestReader::DTCCablingMapTestReader(const edm::ParameterSet& iConfig) {} +DTCCablingMapTestReader::DTCCablingMapTestReader(const edm::ParameterSet& iConfig) : cablingMapToken_(esConsumes()) {} DTCCablingMapTestReader::~DTCCablingMapTestReader() {} @@ -68,9 +70,7 @@ void DTCCablingMapTestReader::analyze(const edm::Event& iEvent, const edm::Event using namespace edm; using namespace std; - edm::ESHandle cablingMapHandle; - iSetup.get().get(cablingMapHandle); - TrackerDetToDTCELinkCablingMap const* p_cablingMap = cablingMapHandle.product(); + const auto p_cablingMap = &iSetup.getData(cablingMapToken_); { ostringstream dump_DetToElink; diff --git a/CondTools/SiPhase2Tracker/plugins/SiPhase2OuterTrackerLorentzAngleWriter.cc b/CondTools/SiPhase2Tracker/plugins/SiPhase2OuterTrackerLorentzAngleWriter.cc index 1bf799887e70e..489e9d6653cad 100644 --- a/CondTools/SiPhase2Tracker/plugins/SiPhase2OuterTrackerLorentzAngleWriter.cc +++ b/CondTools/SiPhase2Tracker/plugins/SiPhase2OuterTrackerLorentzAngleWriter.cc @@ -56,6 +56,8 @@ class SiPhase2OuterTrackerLorentzAngleWriter : public edm::one::EDAnalyzer<> { void endJob() override; // ----------member data --------------------------- + const edm::ESGetToken topoToken_; + const edm::ESGetToken geomToken_; std::string m_record; std::string m_tag; float m_value; @@ -65,7 +67,9 @@ class SiPhase2OuterTrackerLorentzAngleWriter : public edm::one::EDAnalyzer<> { // constructors and destructor // SiPhase2OuterTrackerLorentzAngleWriter::SiPhase2OuterTrackerLorentzAngleWriter(const edm::ParameterSet& iConfig) - : m_record(iConfig.getParameter("record")), + : topoToken_(esConsumes()), + geomToken_(esConsumes()), + m_record(iConfig.getParameter("record")), m_tag(iConfig.getParameter("tag")), m_value(iConfig.getParameter("value")) {} @@ -101,13 +105,10 @@ void SiPhase2OuterTrackerLorentzAngleWriter::analyze(const edm::Event& iEvent, c std::unordered_map detsLAtoDB; // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); + const TrackerTopology* const tTopo = &iSetup.getData(topoToken_); // Retrieve old style tracker geometry from geometry - edm::ESHandle pDD; - iSetup.get().get(pDD); + const TrackerGeometry* pDD = &iSetup.getData(geomToken_); edm::LogInfo("SiPhase2OuterTrackerLorentzAngleWriter") << " There are " << pDD->detUnits().size() << " modules in this geometry." << std::endl; diff --git a/CondTools/SiPhase2Tracker/test/DTCCablingMapProducer_dump.py b/CondTools/SiPhase2Tracker/test/DTCCablingMapProducer_dump.py index 479a7ee61f563..51c067da2fe4a 100644 --- a/CondTools/SiPhase2Tracker/test/DTCCablingMapProducer_dump.py +++ b/CondTools/SiPhase2Tracker/test/DTCCablingMapProducer_dump.py @@ -4,16 +4,13 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring( - 'cerr', - 'cout' - ), - cerr = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') - ), - cout = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') - ), + cerr = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ) ) # Load CondDB service diff --git a/CondTools/SiPhase2Tracker/test/DTCCablingMapTestProducer_dump.py b/CondTools/SiPhase2Tracker/test/DTCCablingMapTestProducer_dump.py index ab40259d05ac9..e2e1862c79dd3 100644 --- a/CondTools/SiPhase2Tracker/test/DTCCablingMapTestProducer_dump.py +++ b/CondTools/SiPhase2Tracker/test/DTCCablingMapTestProducer_dump.py @@ -4,16 +4,13 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring( - 'cerr', - 'cout' - ), - cerr = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') - ), - cout = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') - ), + cerr = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ) ) # Load CondDB service diff --git a/CondTools/SiPhase2Tracker/test/SiPhase2OuterTrackerLorentzAngleWriter_cfg.py b/CondTools/SiPhase2Tracker/test/SiPhase2OuterTrackerLorentzAngleWriter_cfg.py index ece038cf6bc53..6347288bf8556 100644 --- a/CondTools/SiPhase2Tracker/test/SiPhase2OuterTrackerLorentzAngleWriter_cfg.py +++ b/CondTools/SiPhase2Tracker/test/SiPhase2OuterTrackerLorentzAngleWriter_cfg.py @@ -10,10 +10,12 @@ # Messages ################################################################### process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiPhase2OuterTrackerLorentzAngleWriter") -process.MessageLogger.categories.append("SiPhase2OuterTrackerLorentzAngle") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiPhase2OuterTrackerLorentzAngleWriter=dict() +process.MessageLogger.SiPhase2OuterTrackerLorentzAngle=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -22,7 +24,6 @@ SiPhase2OuterTrackerLorentzAngleWriter = cms.untracked.PSet( limit = cms.untracked.int32(-1)), SiPhase2OuterTrackerLorentzAngle = cms.untracked.PSet( limit = cms.untracked.int32(-1)), ) -process.MessageLogger.statistics.append('cout') tag = 'SiPhase2OuterTrackerLorentzAngle_T15' suffix = 'v0' diff --git a/CondTools/SiPixel/test/SiPixelBadModuleByHandBuilderFromROCList_cfg.py b/CondTools/SiPixel/test/SiPixelBadModuleByHandBuilderFromROCList_cfg.py index 81da2bc39406d..1c0e70d00a797 100644 --- a/CondTools/SiPixel/test/SiPixelBadModuleByHandBuilderFromROCList_cfg.py +++ b/CondTools/SiPixel/test/SiPixelBadModuleByHandBuilderFromROCList_cfg.py @@ -6,10 +6,13 @@ process.TrackerTopologyEP = cms.ESProducer("TrackerTopologyEP") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') - ), - destinations = cms.untracked.vstring('cout') + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CondTools/SiPixel/test/SiPixelBadModuleByHandBuilder_cfg.py b/CondTools/SiPixel/test/SiPixelBadModuleByHandBuilder_cfg.py index 4bcb9432b93bc..b8e891beb46d6 100644 --- a/CondTools/SiPixel/test/SiPixelBadModuleByHandBuilder_cfg.py +++ b/CondTools/SiPixel/test/SiPixelBadModuleByHandBuilder_cfg.py @@ -7,10 +7,13 @@ process.TrackerTopologyEP = cms.ESProducer("TrackerTopologyEP") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') - ), - destinations = cms.untracked.vstring('cout') + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CondTools/SiPixel/test/SiPixelCalibConfigurationObjectMaker_cfg.py b/CondTools/SiPixel/test/SiPixelCalibConfigurationObjectMaker_cfg.py index 358f8005d8267..727a37a33db76 100644 --- a/CondTools/SiPixel/test/SiPixelCalibConfigurationObjectMaker_cfg.py +++ b/CondTools/SiPixel/test/SiPixelCalibConfigurationObjectMaker_cfg.py @@ -18,7 +18,12 @@ input = cms.untracked.int32(1) ) process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('cout') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True) + ) ) process.PoolDBOutputService = cms.Service("PoolDBOutputService", diff --git a/CondTools/SiPixel/test/SiPixelDynamicInefficiencyDB_cfg.py b/CondTools/SiPixel/test/SiPixelDynamicInefficiencyDB_cfg.py index d8241988294ad..f4bd52f2d531c 100644 --- a/CondTools/SiPixel/test/SiPixelDynamicInefficiencyDB_cfg.py +++ b/CondTools/SiPixel/test/SiPixelDynamicInefficiencyDB_cfg.py @@ -7,8 +7,8 @@ process = cms.Process("SiPixelInclusiveBuilder") process.load("FWCore.MessageService.MessageLogger_cfi") -#process.MessageLogger.destinations = cms.untracked.vstring("cout") -#process.MessageLogger.cout = cms.untracked.PSet(threshold = cms.untracked.string("INFO")) +#process.MessageLogger.cerr.enable = False +#process.MessageLogger.cout = dict(threshold = "INFO", enable = True) process.load("Configuration.StandardSequences.MagneticField_cff") diff --git a/CondTools/SiPixel/test/SiPixelDynamicInefficiencyReader_cfg.py b/CondTools/SiPixel/test/SiPixelDynamicInefficiencyReader_cfg.py index 94261d534bd63..884b95bfa1ba4 100644 --- a/CondTools/SiPixel/test/SiPixelDynamicInefficiencyReader_cfg.py +++ b/CondTools/SiPixel/test/SiPixelDynamicInefficiencyReader_cfg.py @@ -19,10 +19,13 @@ process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('WARNING') - ), - destinations = cms.untracked.vstring('cout') + ) ) process.Timing = cms.Service("Timing") diff --git a/CondTools/SiPixel/test/SiPixelGainCalibScaler_cfg.py b/CondTools/SiPixel/test/SiPixelGainCalibScaler_cfg.py index 80eee74a06e02..ebdb27f28ead5 100644 --- a/CondTools/SiPixel/test/SiPixelGainCalibScaler_cfg.py +++ b/CondTools/SiPixel/test/SiPixelGainCalibScaler_cfg.py @@ -30,9 +30,11 @@ ## MessageLogger ## process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiPixelGainCalibScaler") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiPixelGainCalibScaler=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -40,7 +42,6 @@ ), SiPixelGainCalibScaler = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') process.load("Configuration.Geometry.GeometryRecoDB_cff") # Ideal geometry and interface process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') diff --git a/CondTools/SiPixel/test/SiPixelInclusiveBuilder_cfg.py b/CondTools/SiPixel/test/SiPixelInclusiveBuilder_cfg.py index 65f951191fbe6..3c2db72a7a31e 100644 --- a/CondTools/SiPixel/test/SiPixelInclusiveBuilder_cfg.py +++ b/CondTools/SiPixel/test/SiPixelInclusiveBuilder_cfg.py @@ -8,8 +8,8 @@ process = cms.Process("SiPixelInclusiveBuilder") process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = cms.untracked.vstring("cout") -process.MessageLogger.cout = cms.untracked.PSet(threshold = cms.untracked.string("INFO")) +process.MessageLogger.cerr.enable = False +process.MessageLogger.cout = dict(enable = True, threshold = "INFO") process.load("Configuration.StandardSequences.MagneticField_cff") diff --git a/CondTools/SiPixel/test/SiPixelInclusiveReader_sqlite_cfg.py b/CondTools/SiPixel/test/SiPixelInclusiveReader_sqlite_cfg.py index 017406b576aed..ee6cf9c8a96d8 100644 --- a/CondTools/SiPixel/test/SiPixelInclusiveReader_sqlite_cfg.py +++ b/CondTools/SiPixel/test/SiPixelInclusiveReader_sqlite_cfg.py @@ -9,10 +9,13 @@ process.GlobalTag.globaltag = 'MC_31X_V3::All' process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') - ), - destinations = cms.untracked.vstring('cout') + ) ) diff --git a/CondTools/SiPixel/test/SiPixelLorentzAngleDB_cfg.py b/CondTools/SiPixel/test/SiPixelLorentzAngleDB_cfg.py index df601781acba9..ae20854e22503 100644 --- a/CondTools/SiPixel/test/SiPixelLorentzAngleDB_cfg.py +++ b/CondTools/SiPixel/test/SiPixelLorentzAngleDB_cfg.py @@ -8,8 +8,8 @@ process = cms.Process("SiPixelInclusiveBuilder") process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = cms.untracked.vstring("cout") -process.MessageLogger.cout = cms.untracked.PSet(threshold = cms.untracked.string("INFO")) +process.MessageLogger.cerr.enable = False +process.MessageLogger.cout = dict(enable = True, threshold = "INFO") process.load("Configuration.StandardSequences.MagneticField_cff") diff --git a/CondTools/SiPixel/test/SiPixelLorentzAngleReader_cfg.py b/CondTools/SiPixel/test/SiPixelLorentzAngleReader_cfg.py index 0a053ad8c5c97..00cadb169352a 100644 --- a/CondTools/SiPixel/test/SiPixelLorentzAngleReader_cfg.py +++ b/CondTools/SiPixel/test/SiPixelLorentzAngleReader_cfg.py @@ -19,10 +19,13 @@ process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('WARNING') - ), - destinations = cms.untracked.vstring('cout') + ) ) process.Timing = cms.Service("Timing") diff --git a/CondTools/SiPixel/test/SiPixelTemplateDBObjectUploader.cc b/CondTools/SiPixel/test/SiPixelTemplateDBObjectUploader.cc index 7c730e023c508..1740153b3833b 100644 --- a/CondTools/SiPixel/test/SiPixelTemplateDBObjectUploader.cc +++ b/CondTools/SiPixel/test/SiPixelTemplateDBObjectUploader.cc @@ -36,23 +36,19 @@ void SiPixelTemplateDBObjectUploader::beginJob() {} void SiPixelTemplateDBObjectUploader::analyze(const edm::Event& iEvent, const edm::EventSetup& es) { //--- Make the POOL-ORA object to store the database object - SiPixelTemplateDBObject* obj = new SiPixelTemplateDBObject; - - // Local variables - const char* tempfile; - int m; + SiPixelTemplateDBObject obj; // Set the number of templates to be passed to the dbobject - obj->setNumOfTempl(theTemplateCalibrations.size()); + obj.setNumOfTempl(theTemplateCalibrations.size()); // Set the version of the template dbobject - this is an external parameter - obj->setVersion(theVersion); + obj.setVersion(theVersion); // Open the template file(s) - for (m = 0; m < obj->numOfTempl(); ++m) { + for (int m = 0; m < obj.numOfTempl(); ++m) { edm::FileInPath file(theTemplateCalibrations[m].c_str()); - tempfile = (file.fullPath()).c_str(); - std::ifstream in_file(tempfile, std::ios::in); + auto tempfile = (file.fullPath()); + std::ifstream in_file(tempfile.c_str(), std::ios::in); if (in_file.is_open()) { edm::LogInfo("Template Info") << "Opened Template File: " << file.fullPath().c_str(); @@ -77,8 +73,8 @@ void SiPixelTemplateDBObjectUploader::analyze(const edm::Event& iEvent, const ed temp.c[1] = title_char[j + 1]; temp.c[2] = title_char[j + 2]; temp.c[3] = title_char[j + 3]; - obj->push_back(temp.f); - obj->setMaxIndex(obj->maxIndex() + 1); + obj.push_back(temp.f); + obj.setMaxIndex(obj.maxIndex() + 1); } // Check if the magnetic field is the same as in the header of the input files @@ -96,8 +92,8 @@ void SiPixelTemplateDBObjectUploader::analyze(const edm::Event& iEvent, const ed // Fill the dbobject in_file >> tempstore; while (!in_file.eof()) { - obj->setMaxIndex(obj->maxIndex() + 1); - obj->push_back(tempstore); + obj.setMaxIndex(obj.maxIndex() + 1); + obj.push_back(tempstore); in_file >> tempstore; } @@ -182,7 +178,7 @@ void SiPixelTemplateDBObjectUploader::analyze(const edm::Event& iEvent, const ed thisID = (short)theBarrelTemplateIds[iter]; } - if (thisID == 10000 || (!(*obj).putTemplateID(detid.rawId(), thisID))) + if (thisID == 10000 || (!obj.putTemplateID(detid.rawId(), thisID))) std::cout << " Could not fill barrel layer " << layer << ", module " << module << "\n"; // ----- debug: std::cout << "This is a barrel element with: layer " << layer << ", ladder " << ladder << " and module " @@ -235,7 +231,7 @@ void SiPixelTemplateDBObjectUploader::analyze(const edm::Event& iEvent, const ed thisID = (short)theEndcapTemplateIds[iter]; } - if (thisID == 10000 || (!(*obj).putTemplateID(detid.rawId(), thisID))) + if (thisID == 10000 || (!obj.putTemplateID(detid.rawId(), thisID))) std::cout << " Could not fill endcap det unit" << side << ", disk " << disk << ", blade " << blade << ", and panel " << panel << ".\n"; // ----- debug: @@ -249,7 +245,7 @@ void SiPixelTemplateDBObjectUploader::analyze(const edm::Event& iEvent, const ed //Print out the assignment of this detID short mapnum; std::cout << "checking map:\n"; - mapnum = (*obj).getTemplateID(detid.rawId()); + mapnum = obj.getTemplateID(detid.rawId()); std::cout << "The DetID: " << detid.rawId() << " is mapped to the template: " << mapnum << ".\n\n"; } } @@ -259,9 +255,9 @@ void SiPixelTemplateDBObjectUploader::analyze(const edm::Event& iEvent, const ed if (!poolDbService.isAvailable()) // Die if not available throw cms::Exception("NotAvailable") << "PoolDBOutputService not available"; if (poolDbService->isNewTagRequest("SiPixelTemplateDBObjectRcd")) - poolDbService->writeOne(obj, poolDbService->beginOfTime(), "SiPixelTemplateDBObjectRcd"); + poolDbService->writeOne(&obj, poolDbService->beginOfTime(), "SiPixelTemplateDBObjectRcd"); else - poolDbService->writeOne(obj, poolDbService->currentTime(), "SiPixelTemplateDBObjectRcd"); + poolDbService->writeOne(&obj, poolDbService->currentTime(), "SiPixelTemplateDBObjectRcd"); } void SiPixelTemplateDBObjectUploader::endJob() {} diff --git a/CondTools/SiPixel/test/SiPixelVCalDB_cfg.py b/CondTools/SiPixel/test/SiPixelVCalDB_cfg.py index edc4379312887..33b4940729f0c 100755 --- a/CondTools/SiPixel/test/SiPixelVCalDB_cfg.py +++ b/CondTools/SiPixel/test/SiPixelVCalDB_cfg.py @@ -55,8 +55,8 @@ ) # MESSAGER -process.MessageLogger.destinations = cms.untracked.vstring('cout') -process.MessageLogger.cout = cms.untracked.PSet(threshold = cms.untracked.string(threshold)) +process.MessageLogger.cerr.enable = False +process.MessageLogger.cout = dict(enable = True, threshold = threshold) # BACK UP DATABASE FILE user = getpass.getuser() diff --git a/CondTools/SiPixel/test/SiPixelVCalReader_cfg.py b/CondTools/SiPixel/test/SiPixelVCalReader_cfg.py old mode 100755 new mode 100644 index 3fa3bd2ac6853..a8ac21fb9fea5 --- a/CondTools/SiPixel/test/SiPixelVCalReader_cfg.py +++ b/CondTools/SiPixel/test/SiPixelVCalReader_cfg.py @@ -55,8 +55,13 @@ fileName = cms.string(outfile) ) process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('cout'), - cout = cms.untracked.PSet(threshold = cms.untracked.string(threshold)) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ) ) process.Timing = cms.Service("Timing") diff --git a/CondTools/SiStrip/test/SiStripApvGainRescaler_cfg.py b/CondTools/SiStrip/test/SiStripApvGainRescaler_cfg.py index 558988df18f0d..d2f6c949cbbd1 100644 --- a/CondTools/SiStrip/test/SiStripApvGainRescaler_cfg.py +++ b/CondTools/SiStrip/test/SiStripApvGainRescaler_cfg.py @@ -26,9 +26,11 @@ ## MessageLogger ## process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiStripGain2RescaleByGain1") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiStripGain2RescaleByGain1=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -36,7 +38,6 @@ ), SiStripGain2RescaleByGain1 = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') from Configuration.AlCa.GlobalTag import GlobalTag diff --git a/CondTools/SiStrip/test/SiStripBadModuleByHandBuilder_cfg.py b/CondTools/SiStrip/test/SiStripBadModuleByHandBuilder_cfg.py index b2b5230f9ec27..cc194957585b0 100644 --- a/CondTools/SiStrip/test/SiStripBadModuleByHandBuilder_cfg.py +++ b/CondTools/SiStrip/test/SiStripBadModuleByHandBuilder_cfg.py @@ -2,10 +2,13 @@ process = cms.Process("ICALIB") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') - ), - destinations = cms.untracked.vstring('cout') + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/CondTools/SiStrip/test/SiStripCablingTrackerMap_cfg.py b/CondTools/SiStrip/test/SiStripCablingTrackerMap_cfg.py index 101f33053a78e..6dfbb88ceef1c 100644 --- a/CondTools/SiStrip/test/SiStripCablingTrackerMap_cfg.py +++ b/CondTools/SiStrip/test/SiStripCablingTrackerMap_cfg.py @@ -4,11 +4,18 @@ process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), cablingReader = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('cablingMap.log') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + cablingMap = cms.untracked.PSet( + + ) + ) ) import CalibTracker.Configuration.Common.PoolDBESSource_cfi diff --git a/CondTools/SiStrip/test/SiStripChannelGainFromDBMiscalibrator_cfg.py b/CondTools/SiStrip/test/SiStripChannelGainFromDBMiscalibrator_cfg.py index 7508051f312a7..0a2f3c6193b73 100644 --- a/CondTools/SiStrip/test/SiStripChannelGainFromDBMiscalibrator_cfg.py +++ b/CondTools/SiStrip/test/SiStripChannelGainFromDBMiscalibrator_cfg.py @@ -27,9 +27,11 @@ ## MessageLogger ## process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiStripChannelGainFromDBMiscalibrator") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiStripChannelGainFromDBMiscalibrator=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("WARNING"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -37,7 +39,6 @@ ), SiStripChannelGainFromDBMiscalibrator = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') process.load("Configuration.Geometry.GeometryRecoDB_cff") # Ideal geometry and interface process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') diff --git a/CondTools/SiStrip/test/SiStripDetVOffReader_cfg.py b/CondTools/SiStrip/test/SiStripDetVOffReader_cfg.py index 2a328cd53939b..d805890b7dc94 100644 --- a/CondTools/SiStrip/test/SiStripDetVOffReader_cfg.py +++ b/CondTools/SiStrip/test/SiStripDetVOffReader_cfg.py @@ -2,11 +2,17 @@ process = cms.Process("DetVOffReader") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring(''), - threshold = cms.untracked.string('INFO'), - destinations = cms.untracked.vstring('SiStripDetVOffReader.log') + files = cms.untracked.PSet( + SiStripDetVOffReader = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('INFO') ) process.source = cms.Source("EmptyIOVSource", diff --git a/CondTools/SiStrip/test/SiStripNoiseBuilder_cfg.py b/CondTools/SiStrip/test/SiStripNoiseBuilder_cfg.py index b315b2e7f051f..c7bb77d06bde3 100644 --- a/CondTools/SiStrip/test/SiStripNoiseBuilder_cfg.py +++ b/CondTools/SiStrip/test/SiStripNoiseBuilder_cfg.py @@ -2,9 +2,14 @@ process = cms.Process("ICALIB") process.MessageLogger = cms.Service("MessageLogger", - cout = cms.untracked.PSet(threshold = cms.untracked.string('INFO')), - destinations = cms.untracked.vstring('cout') - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ) +) process.source = cms.Source("EmptyIOVSource", firstValue = cms.uint64(1), diff --git a/CondTools/SiStrip/test/SiStripNoiseFromDBMiscalibrator_cfg.py b/CondTools/SiStrip/test/SiStripNoiseFromDBMiscalibrator_cfg.py index 9e57629503ea7..c7cb014443985 100644 --- a/CondTools/SiStrip/test/SiStripNoiseFromDBMiscalibrator_cfg.py +++ b/CondTools/SiStrip/test/SiStripNoiseFromDBMiscalibrator_cfg.py @@ -28,9 +28,11 @@ ## MessageLogger ## process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append("SiStripNoisesFromDBMiscalibrator") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False +process.MessageLogger.SiStripNoisesFromDBMiscalibrator=dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), @@ -38,7 +40,6 @@ ), SiStripNoisesFromDBMiscalibrator = cms.untracked.PSet( limit = cms.untracked.int32(-1)) ) -process.MessageLogger.statistics.append('cout') process.load("Configuration.Geometry.GeometryRecoDB_cff") # Ideal geometry and interface process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') diff --git a/CondTools/SiStrip/test/SiStripSummaryBuilder_cfg.py b/CondTools/SiStrip/test/SiStripSummaryBuilder_cfg.py index a6ea01d9a5905..0eb1d6f75e036 100644 --- a/CondTools/SiStrip/test/SiStripSummaryBuilder_cfg.py +++ b/CondTools/SiStrip/test/SiStripSummaryBuilder_cfg.py @@ -2,10 +2,17 @@ process = cms.Process("ICALIB") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('SiStripSummaryBuilder.log') + files = cms.untracked.PSet( + SiStripSummaryBuilder = cms.untracked.PSet( + + ) + ) ) # different !! diff --git a/CondTools/SiStrip/test/SiStripSummaryReader_cfg.py b/CondTools/SiStrip/test/SiStripSummaryReader_cfg.py index 97a13a190cd08..985b01f6e1c65 100644 --- a/CondTools/SiStrip/test/SiStripSummaryReader_cfg.py +++ b/CondTools/SiStrip/test/SiStripSummaryReader_cfg.py @@ -3,10 +3,17 @@ process = cms.Process("SiStripSummaryReader") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('SiStripSummaryReader.log') + files = cms.untracked.PSet( + SiStripSummaryReader = cms.untracked.PSet( + + ) + ) ) diff --git a/CondTools/SiStrip/test/SiStripThresholdBuilder_cfg.py b/CondTools/SiStrip/test/SiStripThresholdBuilder_cfg.py index 727b981a429e4..65831dda781c1 100644 --- a/CondTools/SiStrip/test/SiStripThresholdBuilder_cfg.py +++ b/CondTools/SiStrip/test/SiStripThresholdBuilder_cfg.py @@ -9,14 +9,21 @@ process = cms.Process("Builder") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), ThresholdBuilder = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('ThresholdBuilder.log') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + ThresholdBuilder = cms.untracked.PSet( + + ) + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/CondTools/SiStrip/test/SiStripThresholdReader_cfg.py b/CondTools/SiStrip/test/SiStripThresholdReader_cfg.py index dcedcdc02ccc7..c7e83c5b77b25 100644 --- a/CondTools/SiStrip/test/SiStripThresholdReader_cfg.py +++ b/CondTools/SiStrip/test/SiStripThresholdReader_cfg.py @@ -9,14 +9,21 @@ process = cms.Process("Reader") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring(''), ThresholdReader = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('ThresholdReader.log') + debugModules = cms.untracked.vstring(''), + files = cms.untracked.PSet( + ThresholdReader = cms.untracked.PSet( + + ) + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/Configuration/AlCa/python/GlobalTag.py b/Configuration/AlCa/python/GlobalTag.py index 9f3aac6436869..bcc2347b7d9f1 100644 --- a/Configuration/AlCa/python/GlobalTag.py +++ b/Configuration/AlCa/python/GlobalTag.py @@ -71,6 +71,13 @@ def GlobalTag(essource = None, globaltag = None, conditions = None): raise Exception('no correspondence for '+globaltag+'\navailable keys are\n'+','.join(autoCond.keys())) if 'phase1_2017_design' == globaltag: sys.stderr.write('Warning: %s now points to %s. This has reco-Beamspot centered to (0,0,0)\n'%(globaltag,autoCond[globaltag])) + if 'phase2_realistic' == globaltag: + sys.stderr.write('*'*120+'\n\t\t\t\t\t\t WARNING!\n The key %s now points to %s.'\ + '\n Usage of this key is discretionary and users are cautioned to use it at their own risk!'\ + '\n This Global Tag contains tags suited for an Inner Tracker layout with rectangular (25x100um2) pixel cells (T15,T21).'\ + '\n If this is not the geometry you are expecting to use, please consult:' \ + '\n https://github.com/cms-sw/cmssw/blob/master/Configuration/AlCa/python/autoCondPhase2.py' \ + ' to retrieve the right key.\n'%(globaltag,autoCond[globaltag])+'*'*120+'\n') autoKey = autoCond[globaltag] if isinstance(autoKey, tuple) or isinstance(autoKey, list): globaltag = autoKey[0] diff --git a/Configuration/AlCa/python/autoCond.py b/Configuration/AlCa/python/autoCond.py index eda933d4c64e4..1858744627cd8 100644 --- a/Configuration/AlCa/python/autoCond.py +++ b/Configuration/AlCa/python/autoCond.py @@ -2,86 +2,88 @@ ### NEW KEYS ### # GlobalTag for MC production with perfectly aligned and calibrated detector for Run1 - 'run1_design' : '112X_mcRun1_design_v1', + 'run1_design' : '113X_mcRun1_design_v2', # GlobalTag for MC production (pp collisions) with realistic alignment and calibrations for Run1 - 'run1_mc' : '112X_mcRun1_realistic_v1', + 'run1_mc' : '113X_mcRun1_realistic_v2', # GlobalTag for MC production (Heavy Ions collisions) with realistic alignment and calibrations for Run1 - 'run1_mc_hi' : '112X_mcRun1_HeavyIon_v1', + 'run1_mc_hi' : '113X_mcRun1_HeavyIon_v2', # GlobalTag for MC production (p-Pb collisions) with realistic alignment and calibrations for Run1 - 'run1_mc_pa' : '112X_mcRun1_pA_v2', + 'run1_mc_pa' : '113X_mcRun1_pA_v2', # GlobalTag for MC production with pessimistic alignment and calibrations for Run2 - 'run2_mc_50ns' : '112X_mcRun2_startup_v1', - # GlobalTag for MC production (L1 Trigger Stage1) with starup-like alignment and calibrations for Run2, L1 trigger in Stage1 mode - 'run2_mc_l1stage1' : '112X_mcRun2_asymptotic_l1stage1_v1', + 'run2_mc_50ns' : '113X_mcRun2_startup_v2', + # GlobalTag for MC production (2015 L1 Trigger Stage1) with startup-like alignment and calibrations for Run2, L1 trigger in Stage1 mode + 'run2_mc_l1stage1' : '113X_mcRun2_asymptotic_l1stage1_v3', # GlobalTag for MC production with perfectly aligned and calibrated detector for Run2 - 'run2_design' : '112X_mcRun2_design_v1', + 'run2_design' : '113X_mcRun2_design_v3', #GlobalTag for MC production with optimistic alignment and calibrations for 2016, prior to VFP change - 'run2_mc_pre_vfp' : '112X_mcRun2_asymptotic_preVFP_v2', + 'run2_mc_pre_vfp' : '113X_mcRun2_asymptotic_preVFP_v3', #GlobalTag for MC production with optimistic alignment and calibrations for 2016, after VFP change - 'run2_mc' : '112X_mcRun2_asymptotic_v2', + 'run2_mc' : '113X_mcRun2_asymptotic_v3', # GlobalTag for MC production (cosmics) with starup-like alignment and calibrations for Run2, Strip tracker in peak mode - 'run2_mc_cosmics' : '112X_mcRun2cosmics_asymptotic_deco_v2', + 'run2_mc_cosmics' : '113X_mcRun2cosmics_asymptotic_deco_v3', # GlobalTag for MC production (Heavy Ions collisions) with optimistic alignment and calibrations for Run2 - 'run2_mc_hi' : '112X_mcRun2_HeavyIon_v1', + 'run2_mc_hi' : '113X_mcRun2_HeavyIon_v3', # GlobalTag for MC production (p-Pb collisions) with realistic alignment and calibrations for Run2 - 'run2_mc_pa' : '112X_mcRun2_pA_v1', + 'run2_mc_pa' : '113X_mcRun2_pA_v3', # GlobalTag for Run1 data reprocessing - 'run1_data' : '112X_dataRun2_v7', + 'run1_data' : '113X_dataRun2_v4', # GlobalTag for Run2 data reprocessing - 'run2_data' : '112X_dataRun2_v7', + 'run2_data' : '113X_dataRun2_v4', # GlobalTag for Run2 data 2018B relvals only: HEM-15-16 fail - 'run2_data_HEfail' : '112X_dataRun2_HEfail_v7', + 'run2_data_HEfail' : '113X_dataRun2_HEfail_v4', # GlobalTag for Run2 data relvals: allows customization to run with fixed L1 menu - 'run2_data_relval' : '112X_dataRun2_relval_v7', + 'run2_data_relval' : '113X_dataRun2_relval_v4', # GlobalTag for Run2 HI data - 'run2_data_promptlike_hi' : '112X_dataRun2_PromptLike_HI_v3', + 'run2_data_promptlike_hi' : '113X_dataRun2_PromptLike_HI_v4', # GlobalTag for Run1 HLT: it points to the online GT - 'run1_hlt' : '101X_dataRun2_HLT_frozen_v10', + 'run1_hlt' : '101X_dataRun2_HLT_frozen_v11', # GlobalTag for Run2 HLT: it points to the online GT - 'run2_hlt' : '101X_dataRun2_HLT_frozen_v10', + 'run2_hlt' : '101X_dataRun2_HLT_frozen_v11', # GlobalTag for Run2 HLT RelVals: customizations to run with fixed L1 Menu - 'run2_hlt_relval' : '103X_dataRun2_HLT_relval_v9', - 'run2_hlt_relval_hi' : '103X_dataRun2_HLT_relval_HI_v5', + 'run2_hlt_relval' : '112X_dataRun2_HLT_relval_v4', + 'run2_hlt_relval_hi' : '112X_dataRun2_HLT_relval_HI_v3', # GlobalTag for Run2 HLT for HI (not 2018 HI): it points to the online GT - 'run2_hlt_hi' : '101X_dataRun2_HLTHI_frozen_v10', + 'run2_hlt_hi' : '101X_dataRun2_HLTHI_frozen_v11', # GlobalTag for Run3 data relvals (express GT) - 'run3_data_express' : '111X_dataRun3_Express_v4', + 'run3_data_express' : '112X_dataRun3_Express_v3', # GlobalTag for Run3 data relvals - 'run3_data_promptlike' : '111X_dataRun3_Prompt_v4', + 'run3_data_promptlike' : '112X_dataRun3_Prompt_v3', # GlobalTag for MC production with perfectly aligned and calibrated detector for Phase1 2017 (and 0,0,~0-centred beamspot) - 'phase1_2017_design' : '112X_mc2017_design_v1', + 'phase1_2017_design' : '113X_mc2017_design_v4', # GlobalTag for MC production with realistic conditions for Phase1 2017 detector - 'phase1_2017_realistic' : '112X_mc2017_realistic_v3', + 'phase1_2017_realistic' : '113X_mc2017_realistic_v4', # GlobalTag for MC production (cosmics) with realistic alignment and calibrations for Phase1 2017 detector, Strip tracker in DECO mode - 'phase1_2017_cosmics' : '112X_mc2017cosmics_realistic_deco_v3', + 'phase1_2017_cosmics' : '113X_mc2017cosmics_realistic_deco_v4', # GlobalTag for MC production (cosmics) with realistic alignment and calibrations for Phase1 2017 detector, Strip tracker in PEAK mode - 'phase1_2017_cosmics_peak' : '112X_mc2017cosmics_realistic_peak_v3', + 'phase1_2017_cosmics_peak' : '113X_mc2017cosmics_realistic_peak_v4', # GlobalTag for MC production with perfectly aligned and calibrated detector for full Phase1 2018 (and 0,0,0-centred beamspot) - 'phase1_2018_design' : '112X_upgrade2018_design_v3', + 'phase1_2018_design' : '113X_upgrade2018_design_v4', # GlobalTag for MC production with realistic conditions for full Phase1 2018 detector - 'phase1_2018_realistic' : '112X_upgrade2018_realistic_v6', + 'phase1_2018_realistic' : '113X_upgrade2018_realistic_v4', + # GlobalTag for MC production with realistic run-dependent (RD) conditions for full Phase1 2018 detector + 'phase1_2018_realistic_rd' : '113X_upgrade2018_realistic_RD_v3', # GlobalTag for MC production with realistic conditions for full Phase1 2018 detector for Heavy Ion - 'phase1_2018_realistic_hi' : '112X_upgrade2018_realistic_HI_v5', + 'phase1_2018_realistic_hi' : '113X_upgrade2018_realistic_HI_v4', # GlobalTag for MC production with realistic conditions for full Phase1 2018 detector: HEM-15-16 fail - 'phase1_2018_realistic_HEfail' : '112X_upgrade2018_realistic_HEfail_v6', + 'phase1_2018_realistic_HEfail' : '113X_upgrade2018_realistic_HEfail_v4', # GlobalTag for MC production (cosmics) with realistic conditions for full Phase1 2018 detector, Strip tracker in DECO mode - 'phase1_2018_cosmics' : '112X_upgrade2018cosmics_realistic_deco_v6', + 'phase1_2018_cosmics' : '113X_upgrade2018cosmics_realistic_deco_v4', # GlobalTag for MC production (cosmics) with realistic conditions for full Phase1 2018 detector, Strip tracker in PEAK mode - 'phase1_2018_cosmics_peak' : '112X_upgrade2018cosmics_realistic_peak_v6', + 'phase1_2018_cosmics_peak' : '113X_upgrade2018cosmics_realistic_peak_v4', # GlobalTag for MC production with perfectly aligned and calibrated detector for Phase1 2021 - 'phase1_2021_design' : '112X_mcRun3_2021_design_v11', # GT containing design conditions for Phase1 2021 + 'phase1_2021_design' : '113X_mcRun3_2021_design_v5', # GT containing design conditions for Phase1 2021 # GlobalTag for MC production with realistic conditions for Phase1 2021 - 'phase1_2021_realistic' : '112X_mcRun3_2021_realistic_v13', # GT containing realistic conditions for Phase1 2021 + 'phase1_2021_realistic' : '113X_mcRun3_2021_realistic_v7', # GT containing realistic conditions for Phase1 2021 # GlobalTag for MC production (cosmics) with realistic conditions for Phase1 2021, Strip tracker in DECO mode - 'phase1_2021_cosmics' : '112X_mcRun3_2021cosmics_realistic_deco_v13', + 'phase1_2021_cosmics' : '113X_mcRun3_2021cosmics_realistic_deco_v6', # GlobalTag for MC production with realistic conditions for Phase1 2021 detector for Heavy Ion - 'phase1_2021_realistic_hi' : '112X_mcRun3_2021_realistic_HI_v13', + 'phase1_2021_realistic_hi' : '113X_mcRun3_2021_realistic_HI_v5', # GlobalTag for MC production with realistic conditions for Phase1 2023 - 'phase1_2023_realistic' : '112X_mcRun3_2023_realistic_v13', # GT containing realistic conditions for Phase1 2023 + 'phase1_2023_realistic' : '113X_mcRun3_2023_realistic_v5', # GT containing realistic conditions for Phase1 2023 # GlobalTag for MC production with realistic conditions for Phase1 2024 - 'phase1_2024_realistic' : '112X_mcRun3_2024_realistic_v13', # GT containing realistic conditions for Phase1 2024 + 'phase1_2024_realistic' : '113X_mcRun3_2024_realistic_v5', # GT containing realistic conditions for Phase1 2024 # GlobalTag for MC production with realistic conditions for Phase2 - 'phase2_realistic' : '112X_mcRun4_realistic_v4' + 'phase2_realistic' : '113X_mcRun4_realistic_v6' } aliases = { diff --git a/Configuration/AlCa/python/autoCondPhase2.py b/Configuration/AlCa/python/autoCondPhase2.py index 23bcacb4b6427..4b43c7ffb1f87 100644 --- a/Configuration/AlCa/python/autoCondPhase2.py +++ b/Configuration/AlCa/python/autoCondPhase2.py @@ -52,15 +52,15 @@ } allTags["GenError"] = { - 'T15' : ( ','.join( [ 'SiPixelGenErrorDBObject_phase2_IT_v6.1.5_25x100_v0_mc' ,SiPixelGenErrorRecord,connectionString, "", "2020-07-24 10:00:00"] ), ), # cell is 25um (local-x) x 100um (local-y) , VBias=350V - 'T21' : ( ','.join( [ 'SiPixelGenErrorDBObject_phase2_IT_v6.1.5_25x100_v0_mc',SiPixelGenErrorRecord,connectionString, "", "2020-07-24 10:00:00"] ), ), # cell is 25um (local-x) x 100um (local-y) , VBias=350V - 'T22' : ( ','.join( [ 'SiPixelGenErrorDBObject_phase2_IT_v6.1.5_50x50_v1_mc' ,SiPixelGenErrorRecord,connectionString, "", "2020-08-17 21:00:00"] ), ), # cell is 50um (local-x) x 50um (local-y) , VBias=350V + 'T15' : ( ','.join( [ 'SiPixelGenErrorDBObject_phase2_IT_v6.1.5_25x100_v3_mc',SiPixelGenErrorRecord,connectionString, "", "2021-01-27 10:00:00"] ), ), # cell is 25um (local-x) x 100um (local-y) , VBias=350V + 'T21' : ( ','.join( [ 'SiPixelGenErrorDBObject_phase2_IT_v6.1.5_25x100_v3_mc',SiPixelGenErrorRecord,connectionString, "", "2021-01-27 10:00:00"] ), ), # cell is 25um (local-x) x 100um (local-y) , VBias=350V + 'T22' : ( ','.join( [ 'SiPixelGenErrorDBObject_phase2_IT_v6.1.5_50x50_v5_mc' ,SiPixelGenErrorRecord,connectionString, "", "2021-01-27 10:00:00"] ), ), # cell is 50um (local-x) x 50um (local-y) , VBias=350V } allTags["Template"] = { - 'T15' : ( ','.join( [ 'SiPixelTemplateDBObject_phase2_IT_v6.1.5_25x100_v0_mc',SiPixelTemplatesRecord,connectionString, "", "2020-07-24 10:00:00"] ), ), # cell is 25um (local-x) x 100um (local-y) , VBias=350V - 'T21' : ( ','.join( [ 'SiPixelTemplateDBObject_phase2_IT_v6.1.5_25x100_v0_mc',SiPixelTemplatesRecord,connectionString, "", "2020-07-24 10:00:00"] ), ), # cell is 25um (local-x) x 100um (local-y) , VBias=350V - 'T22' : ( ','.join( [ 'SiPixelTemplateDBObject_phase2_IT_v6.1.5_50x50_v1_mc' ,SiPixelTemplatesRecord,connectionString, "", "2020-08-17 21:00:00"] ), ), # cell is 50um (local-x) x 50um (local-y) , VBias=350V + 'T15' : ( ','.join( [ 'SiPixelTemplateDBObject_phase2_IT_v6.1.5_25x100_v3_mc',SiPixelTemplatesRecord,connectionString, "", "2021-01-27 10:00:00"] ), ), # cell is 25um (local-x) x 100um (local-y) , VBias=350V + 'T21' : ( ','.join( [ 'SiPixelTemplateDBObject_phase2_IT_v6.1.5_25x100_v3_mc',SiPixelTemplatesRecord,connectionString, "", "2021-01-27 10:00:00"] ), ), # cell is 25um (local-x) x 100um (local-y) , VBias=350V + 'T22' : ( ','.join( [ 'SiPixelTemplateDBObject_phase2_IT_v6.1.5_50x50_v5_mc' ,SiPixelTemplatesRecord,connectionString, "", "2021-01-27 10:00:00"] ), ), # cell is 50um (local-x) x 50um (local-y) , VBias=350V } ## diff --git a/Configuration/Applications/python/ConfigBuilder.py b/Configuration/Applications/python/ConfigBuilder.py index 672e4fef0d37a..f3811486cb1c7 100644 --- a/Configuration/Applications/python/ConfigBuilder.py +++ b/Configuration/Applications/python/ConfigBuilder.py @@ -86,7 +86,8 @@ class Options: defaultOptions.timeoutOutput = False defaultOptions.nThreads = '1' defaultOptions.nStreams = '0' -defaultOptions.nConcurrentLumis = '1' +defaultOptions.nConcurrentLumis = '0' +defaultOptions.nConcurrentIOVs = '1' # some helper routines def dumpPython(process,name): @@ -336,9 +337,8 @@ def executeAndRemember(self, command): def addCommon(self): if 'HARVESTING' in self.stepMap.keys() or 'ALCAHARVEST' in self.stepMap.keys(): - self.process.options = cms.untracked.PSet( Rethrow = cms.untracked.vstring('ProductNotFound'),fileMode = cms.untracked.string('FULLMERGE')) - else: - self.process.options = cms.untracked.PSet( ) + self.process.options.Rethrow = ['ProductNotFound'] + self.process.options.fileMode = 'FULLMERGE' self.addedObjects.append(("","options")) @@ -365,9 +365,9 @@ def addCommon(self): def addMaxEvents(self): """Here we decide how many evts will be processed""" - self.process.maxEvents=cms.untracked.PSet(input=cms.untracked.int32(int(self._options.number))) + self.process.maxEvents.input = int(self._options.number) if self._options.number_out: - self.process.maxEvents.output = cms.untracked.int32(int(self._options.number_out)) + self.process.maxEvents.output = int(self._options.number_out) self.addedObjects.append(("","maxEvents")) def addSource(self): @@ -2238,14 +2238,16 @@ def prepare(self, doChecking = False): if self._options.nThreads is not "1": self.pythonCfgCode +="\n" self.pythonCfgCode +="#Setup FWK for multithreaded\n" - self.pythonCfgCode +="process.options.numberOfThreads=cms.untracked.uint32("+self._options.nThreads+")\n" - self.pythonCfgCode +="process.options.numberOfStreams=cms.untracked.uint32("+self._options.nStreams+")\n" - self.pythonCfgCode +="process.options.numberOfConcurrentLuminosityBlocks=cms.untracked.uint32("+self._options.nConcurrentLumis+")\n" + self.pythonCfgCode +="process.options.numberOfThreads = "+self._options.nThreads+"\n" + self.pythonCfgCode +="process.options.numberOfStreams = "+self._options.nStreams+"\n" + self.pythonCfgCode +="process.options.numberOfConcurrentLuminosityBlocks = "+self._options.nConcurrentLumis+"\n" + self.pythonCfgCode +="process.options.eventSetup.numberOfConcurrentIOVs = "+self._options.nConcurrentIOVs+"\n" if int(self._options.nConcurrentLumis) > 1: self.pythonCfgCode +="if hasattr(process, 'DQMStore'): process.DQMStore.assertLegacySafe=cms.untracked.bool(False)\n" - self.process.options.numberOfThreads=cms.untracked.uint32(int(self._options.nThreads)) - self.process.options.numberOfStreams=cms.untracked.uint32(int(self._options.nStreams)) - self.process.options.numberOfConcurrentLuminosityBlocks=cms.untracked.uint32(int(self._options.nConcurrentLumis)) + self.process.options.numberOfThreads = int(self._options.nThreads) + self.process.options.numberOfStreams = int(self._options.nStreams) + self.process.options.numberOfConcurrentLuminosityBlocks = int(self._options.nConcurrentLumis) + self.process.options.eventSetup.numberOfConcurrentIOVs = int(self._options.nConcurrentIOVs) #repacked version if self._options.isRepacked: self.pythonCfgCode +="\n" diff --git a/Configuration/Applications/python/Options.py b/Configuration/Applications/python/Options.py index a8b5b695eb0bb..8ef1d14d79c27 100644 --- a/Configuration/Applications/python/Options.py +++ b/Configuration/Applications/python/Options.py @@ -385,16 +385,21 @@ expertSettings.add_option("--nThreads", help="How many threads should CMSSW use (default is 1)", - default="1", + default=defaultOptions.nThreads, dest='nThreads' ) expertSettings.add_option("--nStreams", - help="How many streams should CMSSW use (default is 0 which makes it same as nThreads)", - default="0", + help="How many streams should CMSSW use if nThreads > 1 (default is 0 which makes it same as nThreads)", + default=defaultOptions.nStreams, dest='nStreams' ) expertSettings.add_option("--nConcurrentLumis", - help="How many concurrent LuminosityBlocks should CMSSW use (default is 1)", - default="1", + help="How many concurrent LuminosityBlocks should CMSSW use if nThreads > 1 (default is 0 which means 1 for 1 stream and 2 for >= 2 streams)", + default=defaultOptions.nConcurrentLumis, dest='nConcurrentLumis' ) +expertSettings.add_option("--nConcurrentIOVs", + help="How many concurrent IOVs should CMSSW use if nThreads > 1 (default is 1)", + default=defaultOptions.nConcurrentIOVs, + dest='nConcurrentIOVs' + ) diff --git a/Configuration/Applications/python/cmsDriverOptions.py b/Configuration/Applications/python/cmsDriverOptions.py index a17374412298c..c621c64673a7b 100755 --- a/Configuration/Applications/python/cmsDriverOptions.py +++ b/Configuration/Applications/python/cmsDriverOptions.py @@ -72,6 +72,13 @@ def OptionsFromItems(items): #now adjust the given parameters before passing it to the ConfigBuilder + # concurrency options + nStreams = options.nStreams if options.nStreams != '0' else options.nThreads + if options.nConcurrentLumis == '0': + options.nConcurrentLumis = '1' if nStreams == '1' else '2' + if options.nConcurrentIOVs == '0': + options.nConcurrentIOVs = options.nConcurrentLumis + #trail a "/" to dirin and dirout if options.dirin!='' and (not options.dirin.endswith('/')): options.dirin+='/' if options.dirout!='' and (not options.dirout.endswith('/')): options.dirout+='/' diff --git a/Configuration/DataProcessing/python/Impl/cosmics.py b/Configuration/DataProcessing/python/Impl/cosmics.py index 01d0e8df036c6..2546ba55e2acf 100644 --- a/Configuration/DataProcessing/python/Impl/cosmics.py +++ b/Configuration/DataProcessing/python/Impl/cosmics.py @@ -75,8 +75,6 @@ def visualizationProcessing(self, globalTag, **args): args['customs'].append('Configuration/DataProcessing/RecoTLR.customiseCosmicData') process = Reco.visualizationProcessing(self,globalTag, **args) - process.reconstructionCosmics.remove(process.lumiProducer) - return process def alcaHarvesting(self, globalTag, datasetName, **args): diff --git a/Configuration/EcalTB/python/reco_application_tbsim_DetSim-Digi_cfg.py b/Configuration/EcalTB/python/reco_application_tbsim_DetSim-Digi_cfg.py index fed45ec98c6fc..be9d3f9cc93c6 100644 --- a/Configuration/EcalTB/python/reco_application_tbsim_DetSim-Digi_cfg.py +++ b/Configuration/EcalTB/python/reco_application_tbsim_DetSim-Digi_cfg.py @@ -167,28 +167,10 @@ # modify the default behavior of the MessageLogger -process.MessageLogger.destinations=cms.untracked.vstring('cout' - ,'cerr' - ,'G4msg' - ) -process.MessageLogger.categories=cms.untracked.vstring('FwkJob' - ,'FwkReport' - ,'FwkSummary' - ,'Root_NoDictionary' - ,'TimeReport' - ,'TimeModule' - ,'TimeEvent' - ,'MemoryCheck' - ,'PhysicsList' - ,'G4cout' - ,'G4cerr' - ,'BeamProfileVtxGenerator' - ) - process.MessageLogger.debugModules = cms.untracked.vstring('g4SimHits','generatorSmeared') #Configuring the G4msg.log output -process.MessageLogger.G4msg = cms.untracked.PSet( +process.MessageLogger.files = dict( G4msg = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(True) #First eliminate unneeded output ,threshold = cms.untracked.string('INFO') @@ -212,7 +194,7 @@ ,G4cerr = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ,BeamProfileVtxGenerator = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ) - +) #Add these 3 lines to put back the summary for timing information at the end of the logfile #(needed for TimeReport report) process.options = cms.untracked.PSet( diff --git a/Configuration/Eras/python/Era_Phase2C11I13M9_cff.py b/Configuration/Eras/python/Era_Phase2C11I13M9_cff.py new file mode 100644 index 0000000000000..0b90e8f67d21c --- /dev/null +++ b/Configuration/Eras/python/Era_Phase2C11I13M9_cff.py @@ -0,0 +1,6 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Phase2C11I13_cff import Phase2C11I13 +from Configuration.Eras.Modifier_phase2_GE0_cff import phase2_GE0 + +Phase2C11I13M9 = cms.ModifierChain(Phase2C11I13, phase2_GE0) diff --git a/Configuration/Eras/python/Era_Phase2C11I13T22M9_cff.py b/Configuration/Eras/python/Era_Phase2C11I13T22M9_cff.py new file mode 100644 index 0000000000000..b314ebffb385b --- /dev/null +++ b/Configuration/Eras/python/Era_Phase2C11I13T22M9_cff.py @@ -0,0 +1,7 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Phase2C11I13_cff import Phase2C11I13 +from Configuration.Eras.Modifier_phase2_squarePixels_cff import phase2_squarePixels +from Configuration.Eras.Modifier_phase2_GE0_cff import phase2_GE0 + +Phase2C11I13T22M9 = cms.ModifierChain(Phase2C11I13, phase2_squarePixels, phase2_GE0) diff --git a/Configuration/Eras/python/Era_Phase2C11I13T23M9_cff.py b/Configuration/Eras/python/Era_Phase2C11I13T23M9_cff.py new file mode 100644 index 0000000000000..75c3211a4934b --- /dev/null +++ b/Configuration/Eras/python/Era_Phase2C11I13T23M9_cff.py @@ -0,0 +1,7 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Phase2C11I13_cff import Phase2C11I13 +from Configuration.Eras.Modifier_phase2_3DPixels_cff import phase2_3DPixels +from Configuration.Eras.Modifier_phase2_GE0_cff import phase2_GE0 + +Phase2C11I13T23M9 = cms.ModifierChain(Phase2C11I13, phase2_3DPixels, phase2_GE0) diff --git a/Configuration/Eras/python/Era_Phase2C11I13_cff.py b/Configuration/Eras/python/Era_Phase2C11I13_cff.py new file mode 100644 index 0000000000000..0fd002802421f --- /dev/null +++ b/Configuration/Eras/python/Era_Phase2C11I13_cff.py @@ -0,0 +1,6 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Phase2C11_cff import Phase2C11 +from Configuration.Eras.Modifier_phase2_etlV4_cff import phase2_etlV4 + +Phase2C11I13 = cms.ModifierChain(Phase2C11, phase2_etlV4) diff --git a/Configuration/Eras/python/Era_Phase2C11T22_cff.py b/Configuration/Eras/python/Era_Phase2C11T22_cff.py new file mode 100644 index 0000000000000..5d340eb2516d2 --- /dev/null +++ b/Configuration/Eras/python/Era_Phase2C11T22_cff.py @@ -0,0 +1,6 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Phase2C11_cff import Phase2C11 +from Configuration.Eras.Modifier_phase2_squarePixels_cff import phase2_squarePixels + +Phase2C11T22 = cms.ModifierChain(Phase2C11, phase2_squarePixels) diff --git a/Configuration/Eras/python/Era_Phase2C11T23_cff.py b/Configuration/Eras/python/Era_Phase2C11T23_cff.py new file mode 100644 index 0000000000000..0fb689099980f --- /dev/null +++ b/Configuration/Eras/python/Era_Phase2C11T23_cff.py @@ -0,0 +1,6 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Phase2C11_cff import Phase2C11 +from Configuration.Eras.Modifier_phase2_3DPixels_cff import phase2_3DPixels + +Phase2C11T23 = cms.ModifierChain(Phase2C11, phase2_3DPixels) diff --git a/Configuration/Eras/python/Era_Phase2C11_etlV4_cff.py b/Configuration/Eras/python/Era_Phase2C11_etlV4_cff.py deleted file mode 100644 index 2e7ba054f8db8..0000000000000 --- a/Configuration/Eras/python/Era_Phase2C11_etlV4_cff.py +++ /dev/null @@ -1,6 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.Eras.Era_Phase2C11_cff import Phase2C11 -from Configuration.Eras.Modifier_phase2_etlV4_cff import phase2_etlV4 - -Phase2C11_etlV4 = cms.ModifierChain(Phase2C11, phase2_etlV4) diff --git a/Configuration/Eras/python/Modifier_phase2_3DPixels_cff.py b/Configuration/Eras/python/Modifier_phase2_3DPixels_cff.py new file mode 100644 index 0000000000000..c382310d17195 --- /dev/null +++ b/Configuration/Eras/python/Modifier_phase2_3DPixels_cff.py @@ -0,0 +1,3 @@ +import FWCore.ParameterSet.Config as cms + +phase2_3DPixels = cms.Modifier() diff --git a/Configuration/Eras/python/Modifier_phase2_squarePixels_cff.py b/Configuration/Eras/python/Modifier_phase2_squarePixels_cff.py new file mode 100644 index 0000000000000..79cc205b7ff19 --- /dev/null +++ b/Configuration/Eras/python/Modifier_phase2_squarePixels_cff.py @@ -0,0 +1,3 @@ +import FWCore.ParameterSet.Config as cms + +phase2_squarePixels = cms.Modifier() diff --git a/Configuration/Eras/python/Modifier_run2_nanoAOD_106Xv2_cff.py b/Configuration/Eras/python/Modifier_run2_nanoAOD_106Xv2_cff.py new file mode 100644 index 0000000000000..55266c5feace0 --- /dev/null +++ b/Configuration/Eras/python/Modifier_run2_nanoAOD_106Xv2_cff.py @@ -0,0 +1,3 @@ +import FWCore.ParameterSet.Config as cms + +run2_nanoAOD_106Xv2 = cms.Modifier() diff --git a/Configuration/Generator/python/BsToMuMu_forSTEAM_13TeV_cfi.py b/Configuration/Generator/python/BsToMuMu_forSTEAM_13TeV_cfi.py index 8db225e1d7667..40eb85a81e675 100644 --- a/Configuration/Generator/python/BsToMuMu_forSTEAM_13TeV_cfi.py +++ b/Configuration/Generator/python/BsToMuMu_forSTEAM_13TeV_cfi.py @@ -13,9 +13,9 @@ ExternalDecays = cms.PSet( #using alternative name for decayer EvtGen1 = cms.untracked.PSet( - #uses latest evt and decay tables from evtgen 1.6 - decay_table = cms.string('GeneratorInterface/EvtGenInterface/data/DECAY_2014_NOLONGLIFE.DEC'), - particle_property_file = cms.FileInPath('GeneratorInterface/EvtGenInterface/data/evt_2014.pdl'), + #uses latest evt and decay tables from evtgen + decay_table = cms.string('GeneratorInterface/EvtGenInterface/data/DECAY_NOLONGLIFE.DEC'), + particle_property_file = cms.FileInPath('GeneratorInterface/EvtGenInterface/data/evt.pdl'), convertPythiaCodes = cms.untracked.bool(False), #here we will use the user.dec store in the release user_decay_file = cms.vstring('GeneratorInterface/ExternalDecays/data/Bs_mumu.dec'), diff --git a/Configuration/Generator/python/BuToKstarJPsiToMuMu_forSTEAM_13TeV_cfi.py b/Configuration/Generator/python/BuToKstarJPsiToMuMu_forSTEAM_13TeV_cfi.py index 09c261f2fc696..124771b00fabc 100644 --- a/Configuration/Generator/python/BuToKstarJPsiToMuMu_forSTEAM_13TeV_cfi.py +++ b/Configuration/Generator/python/BuToKstarJPsiToMuMu_forSTEAM_13TeV_cfi.py @@ -10,9 +10,9 @@ maxEventsToPrint = cms.untracked.int32(0), ExternalDecays = cms.PSet( EvtGen130 = cms.untracked.PSet( - #uses latest evt and decay tables from evtgen 1.6 - decay_table = cms.string('GeneratorInterface/EvtGenInterface/data/DECAY_2014_NOLONGLIFE.DEC'), - particle_property_file = cms.FileInPath('GeneratorInterface/EvtGenInterface/data/evt_2014.pdl'), + #uses latest evt and decay tables from evtgen + decay_table = cms.string('GeneratorInterface/EvtGenInterface/data/DECAY_NOLONGLIFE.DEC'), + particle_property_file = cms.FileInPath('GeneratorInterface/EvtGenInterface/data/evt.pdl'), convertPythiaCodes = cms.untracked.bool(False), #user_decay_file = cms.vstring('GeneratorInterface/ExternalDecays/data/Bu_Kstarmumu_Kspi.dec'), #content was dump in the embed string below. This should test this feature. diff --git a/Configuration/Generator/python/GluGluTo2Jets_M_300_2000_14TeV_Exhume_cff.py b/Configuration/Generator/python/GluGluTo2Jets_M_300_2000_14TeV_Exhume_cff.py new file mode 100644 index 0000000000000..552969ae3e8e5 --- /dev/null +++ b/Configuration/Generator/python/GluGluTo2Jets_M_300_2000_14TeV_Exhume_cff.py @@ -0,0 +1,48 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.Pythia8CommonSettings_cfi import * + +generator = cms.EDFilter("ExhumeGeneratorFilter", + ExhumeParameters = cms.PSet( + AlphaEw = cms.double(0.0072974), + B = cms.double(4.0), + MuonMass = cms.double(0.1057), + BottomMass = cms.double(4.65), + CharmMass = cms.double(1.28), + StrangeMass = cms.double(0.095), + TauMass = cms.double(1.78), + TopMass = cms.double(172.8), + WMass = cms.double(80.38), + ZMass = cms.double(91.187), + HiggsMass = cms.double(125.1), + HiggsVev = cms.double(246.0), + LambdaQCD = cms.double(80.0), + MinQt2 = cms.double(0.64), + PDF = cms.double(11000), + Rg = cms.double(1.2), + Survive = cms.double(0.03) + ), + ExhumeProcess = cms.PSet( + MassRangeHigh = cms.double(2000.0), + MassRangeLow = cms.double(300.0), + ProcessType = cms.string('GG'), + ThetaMin = cms.double(0.3) + ), + PythiaParameters = cms.PSet( + parameterSets = cms.vstring() + ), + comEnergy = cms.double(14000.0), + maxEventsToPrint = cms.untracked.int32(2), + pythiaHepMCVerbosity = cms.untracked.bool(False), + pythiaPylistVerbosity = cms.untracked.int32(1) +) + +# Production Info +configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('GluGluTo2Jets 300 < Mx < 2000 7TeV ExHume'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +ProductionFilterSequence = cms.Sequence(generator) + diff --git a/Configuration/Generator/python/MCTunes2017/PythiaCP5CR1TuneSettings_cfi.py b/Configuration/Generator/python/MCTunes2017/PythiaCP5CR1TuneSettings_cfi.py index f039e8772218e..f39990484b53e 100644 --- a/Configuration/Generator/python/MCTunes2017/PythiaCP5CR1TuneSettings_cfi.py +++ b/Configuration/Generator/python/MCTunes2017/PythiaCP5CR1TuneSettings_cfi.py @@ -4,7 +4,6 @@ pythia8CP5CR1TuneSettings = cms.vstring( 'Tune:pp 14', 'Tune:ee 7', - 'PDF:pSet=20', 'MultipartonInteractions:alphaSvalue=0.118', 'MultipartonInteractions:alphaSorder=2', 'MultipartonInteractions:bProfile=2', @@ -28,5 +27,9 @@ 'TimeShower:alphaSorder=2', 'TimeShower:alphaSvalue=0.118', 'SigmaTotal:zeroAXB=off', + 'SigmaTotal:mode = 0', + 'SigmaTotal:sigmaEl = 21.89', + 'SigmaTotal:sigmaTot = 100.309', + 'PDF:pSet=LHAPDF6:NNPDF31_nnlo_as_0118', ) ) diff --git a/Configuration/Generator/python/MCTunes2017/PythiaCP5CR2TuneSettings_cfi.py b/Configuration/Generator/python/MCTunes2017/PythiaCP5CR2TuneSettings_cfi.py index e33363d81f37b..d2e4f20f69cad 100644 --- a/Configuration/Generator/python/MCTunes2017/PythiaCP5CR2TuneSettings_cfi.py +++ b/Configuration/Generator/python/MCTunes2017/PythiaCP5CR2TuneSettings_cfi.py @@ -4,7 +4,6 @@ pythia8CP5CR2TuneSettings = cms.vstring( 'Tune:pp 14', 'Tune:ee 7', - 'PDF:pSet=20', 'MultipartonInteractions:bProfile=2', 'MultipartonInteractions:pT0Ref=1.454', 'MultipartonInteractions:ecmPow=0.0555', @@ -22,5 +21,9 @@ 'MultipartonInteractions:alphaSorder=2', 'TimeShower:alphaSorder=2', 'TimeShower:alphaSvalue=0.118', + 'SigmaTotal:mode = 0', + 'SigmaTotal:sigmaEl = 21.89', + 'SigmaTotal:sigmaTot = 100.309', + 'PDF:pSet=LHAPDF6:NNPDF31_nnlo_as_0118', ) ) diff --git a/Configuration/Geometry/README.md b/Configuration/Geometry/README.md index 43f60e144b624..d7183d29425d6 100644 --- a/Configuration/Geometry/README.md +++ b/Configuration/Geometry/README.md @@ -7,6 +7,10 @@ Different versions of various subdetectors can be combined. The available versio Tracker: * T3: 2021 baseline after separating tracker specific material * T4: as T3, but with zero material +* T5: as T3, but with tracker material budget reduced by 5% +* T6: as T3, but with tracker material budget reduced by 10% +* T7: as T3, but with tracker material budget increased by 5% +* T8: as T3, but with tracker material budget increased by 10% Calorimeters: * C1: 2021 baseline @@ -16,15 +20,21 @@ Muon system: PPS: * P2: 2021 baseline (after using its own material files for pixel) +* P3: 2021 baseline (same as P2 but removing common materials) The script also handles the common and forward elements of the geometry: * O3: 2021 baseline * O4: as O3, but with zero material +* O5: as O3, but with trackermaterial removed (they are in T5, T6, T7, T8) * F1: 2021 baseline Several detector combinations have been generated: -* 2021 = T3+C1+M1+P2+O3+F1 -* 2021ZeroMaterial = T4+C1+M1+P2+O4+F1 +* 2021 = T3+C1+M1+P3+O3+F1 +* 2021ZeroMaterial = T4+C1+M1+P3+O4+F1 +* 2021FlatMinus05Percent = T5+C1+M1+P3+O5+F1 +* 2021FlatMinus10Percent = T6+C1+M1+P3+O5+F1 +* 2021FlatPlus05Percent = T7+C1+M1+P3+O5+F1 +* 2021FlatPlus10Percent = T8+C1+M1+P3+O5+F1 # Phase 2 Geometries @@ -38,6 +48,7 @@ Tracker: (TFPX: Changed sensors spacing within all double-disks + Increased distance between Disks 6 and 7 + TBPX portcards between Disks 6 and 7.) * T22: Phase2 tilted tracker. Outer Tracker (v8.0.0): same as T21. Inner Tracker: Based on (v6.1.5) (T21), but with 50x50 pixel aspect ratio everywhere. * T23: Phase2 tilted tracker. Outer Tracker (v8.0.0): same as T21. Inner Tracker: Based on (v6.1.5) (T21), but with 3D sensors in TBPX L1 + TBPX L2 + TFPX R1. +* T24: Phase2 tilted tracker. Tracker detector description itself is identical to T21 (OT800 IT615). Change of paradigm, entire description reworked to be compatible with DD4hep library. Calorimeters: * C9: HGCal (v11 post TDR HGCal Geometry w/ corner centering for HE part) + Phase2 HCAL and EB + Tracker cables @@ -84,7 +95,11 @@ Several detector combinations have been generated: * D70 = T21+C13+M7+I11+O6+F6 * D71 = T21+C14+M7+I11+O7+F6 * D72 = T21+C11+M6+I12+O5+F4 -* D73 = T21+C11+M6+I13+O5+F4 * D74 = T21+C14+M9+I11+O7+F6 +* D75 = T21+C14+M7+I13+O7+F6 +* D76 = T21+C14+M9+I13+O7+F6 +* D77 = T24+C14+M9+I13+O7+F6 +* D78 = T22+C14+M9+I13+O7+F6 +* D79 = T23+C14+M9+I13+O7+F6 D49 is the HLT TDR baseline. diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatMinus05PercentReco_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatMinus05PercentReco_cff.py new file mode 100644 index 0000000000000..baa90c588d4bb --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatMinus05PercentReco_cff.py @@ -0,0 +1,51 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hepExtended2021FlatMinus05Percent_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "EcalEndcap", + "EcalPreshower", + "TOWER", + ) +) +from Geometry.EcalAlgo.EcalGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# pps + + diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatMinus05Percent_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatMinus05Percent_cff.py new file mode 100644 index 0000000000000..80a97e64cbfcb --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatMinus05Percent_cff.py @@ -0,0 +1,14 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hep_cff import * +DDDetectorESProducer.confGeomXMLFiles = cms.FileInPath("Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus05Percent.xml") + +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * + diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatMinus10PercentReco_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatMinus10PercentReco_cff.py new file mode 100644 index 0000000000000..df54dc50f4562 --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatMinus10PercentReco_cff.py @@ -0,0 +1,51 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hepExtended2021FlatMinus10Percent_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "EcalEndcap", + "EcalPreshower", + "TOWER", + ) +) +from Geometry.EcalAlgo.EcalGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# pps + + diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatMinus10Percent_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatMinus10Percent_cff.py new file mode 100644 index 0000000000000..e61adc7b57a64 --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatMinus10Percent_cff.py @@ -0,0 +1,14 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hep_cff import * +DDDetectorESProducer.confGeomXMLFiles = cms.FileInPath("Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus10Percent.xml") + +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * + diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatPlus05PercentReco_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatPlus05PercentReco_cff.py new file mode 100644 index 0000000000000..ccba5634ea627 --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatPlus05PercentReco_cff.py @@ -0,0 +1,51 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hepExtended2021FlatPlus05Percent_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "EcalEndcap", + "EcalPreshower", + "TOWER", + ) +) +from Geometry.EcalAlgo.EcalGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# pps + + diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatPlus05Percent_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatPlus05Percent_cff.py new file mode 100644 index 0000000000000..ee5a8f375f1eb --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatPlus05Percent_cff.py @@ -0,0 +1,14 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hep_cff import * +DDDetectorESProducer.confGeomXMLFiles = cms.FileInPath("Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus05Percent.xml") + +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * + diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatPlus10PercentReco_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatPlus10PercentReco_cff.py new file mode 100644 index 0000000000000..c6ca65066ff16 --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatPlus10PercentReco_cff.py @@ -0,0 +1,51 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hepExtended2021FlatPlus10Percent_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "EcalEndcap", + "EcalPreshower", + "TOWER", + ) +) +from Geometry.EcalAlgo.EcalGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# pps + + diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatPlus10Percent_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatPlus10Percent_cff.py new file mode 100644 index 0000000000000..2f79141d07e3d --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2021FlatPlus10Percent_cff.py @@ -0,0 +1,14 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hep_cff import * +DDDetectorESProducer.confGeomXMLFiles = cms.FileInPath("Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus10Percent.xml") + +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * + diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D73Reco_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D73Reco_cff.py deleted file mode 100644 index 6d8166f885a3d..0000000000000 --- a/Configuration/Geometry/python/GeometryDD4hepExtended2026D73Reco_cff.py +++ /dev/null @@ -1,60 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# This config was generated automatically using generate2026Geometry.py -# If you notice a mistake, please update the generating script, not just this config - -from Configuration.Geometry.GeometryDD4hepExtended2026D73_cff import * - -# tracker -from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * -from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * -from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * -from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * -from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * -trackerGeometry.applyAlignment = cms.bool(False) - -# calo -from Geometry.CaloEventSetup.HGCalV9Topology_cfi import * -from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import * -from Geometry.CaloEventSetup.CaloTopology_cfi import * -from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * -CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", - SelectedCalos = cms.vstring("HCAL", - "ZDC", - "EcalBarrel", - "TOWER", - "HGCalEESensitive", - "HGCalHESiliconSensitive", - "HGCalHEScintillatorSensitive" - ) -) -from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import * -from Geometry.HcalEventSetup.HcalGeometry_cfi import * -from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * -from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * -from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * -from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * -from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * -from Geometry.EcalMapping.EcalMapping_cfi import * -from Geometry.EcalMapping.EcalMappingRecord_cfi import * - -# muon -from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * -from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * -from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * -from Geometry.GEMGeometryBuilder.me0Geometry_cfi import * -from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * -from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * - -# forward -from Geometry.ForwardGeometry.ForwardGeometry_cfi import * - -# timing -from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import * -from Geometry.MTDGeometryBuilder.mtdParameters_cff import * -from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * -from Geometry.MTDNumberingBuilder.mtdTopology_cfi import * -from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import * -from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import * -mtdGeometry.applyAlignment = cms.bool(False) - diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D73_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D73_cff.py deleted file mode 100644 index a456c0d65dea2..0000000000000 --- a/Configuration/Geometry/python/GeometryDD4hepExtended2026D73_cff.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# This config was generated automatically using generate2026Geometry.py -# If you notice a mistake, please update the generating script, not just this config - -from Configuration.Geometry.GeometryDD4hep_cff import * -DDDetectorESProducer.confGeomXMLFiles = cms.FileInPath("Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D73.xml") - -from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * -from Geometry.EcalCommonData.ecalSimulationParameters_cff import * -from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * -from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import * -from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import * -from Geometry.MuonNumbering.muonGeometryConstants_cff import * -from Geometry.MuonNumbering.muonOffsetESProducer_cff import * -from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D75Reco_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D75Reco_cff.py new file mode 100644 index 0000000000000..c8dee1f2babbe --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D75Reco_cff.py @@ -0,0 +1,60 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hepExtended2026D75_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.HGCalV9Topology_cfi import * +from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import * +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "TOWER", + "HGCalEESensitive", + "HGCalHESiliconSensitive", + "HGCalHEScintillatorSensitive" + ) +) +from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * +from Geometry.GEMGeometryBuilder.me0Geometry_cfi import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# timing +from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import * +from Geometry.MTDGeometryBuilder.mtdParameters_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * +from Geometry.MTDNumberingBuilder.mtdTopology_cfi import * +from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import * +from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import * +mtdGeometry.applyAlignment = cms.bool(False) + diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D75_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D75_cff.py new file mode 100644 index 0000000000000..4c50773a5cea7 --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D75_cff.py @@ -0,0 +1,16 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hep_cff import * +DDDetectorESProducer.confGeomXMLFiles = cms.FileInPath("Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D75.xml") + +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import * +from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D76Reco_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D76Reco_cff.py new file mode 100644 index 0000000000000..90a139dd82fd6 --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D76Reco_cff.py @@ -0,0 +1,59 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hepExtended2026D76_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.HGCalV9Topology_cfi import * +from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import * +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "TOWER", + "HGCalEESensitive", + "HGCalHESiliconSensitive", + "HGCalHEScintillatorSensitive" + ) +) +from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# timing +from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import * +from Geometry.MTDGeometryBuilder.mtdParameters_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * +from Geometry.MTDNumberingBuilder.mtdTopology_cfi import * +from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import * +from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import * +mtdGeometry.applyAlignment = cms.bool(False) + diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D76_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D76_cff.py new file mode 100644 index 0000000000000..1905e4de5a22b --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D76_cff.py @@ -0,0 +1,16 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hep_cff import * +DDDetectorESProducer.confGeomXMLFiles = cms.FileInPath("Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D76.xml") + +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import * +from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D77Reco_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D77Reco_cff.py new file mode 100644 index 0000000000000..ac04bc34bc21f --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D77Reco_cff.py @@ -0,0 +1,59 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hepExtended2026D77_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.HGCalV9Topology_cfi import * +from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import * +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "TOWER", + "HGCalEESensitive", + "HGCalHESiliconSensitive", + "HGCalHEScintillatorSensitive" + ) +) +from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# timing +from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import * +from Geometry.MTDGeometryBuilder.mtdParameters_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * +from Geometry.MTDNumberingBuilder.mtdTopology_cfi import * +from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import * +from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import * +mtdGeometry.applyAlignment = cms.bool(False) + diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D77_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D77_cff.py new file mode 100644 index 0000000000000..c1f3646fe0813 --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D77_cff.py @@ -0,0 +1,16 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hep_cff import * +DDDetectorESProducer.confGeomXMLFiles = cms.FileInPath("Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D77.xml") + +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import * +from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D78Reco_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D78Reco_cff.py new file mode 100644 index 0000000000000..4a15652363de3 --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D78Reco_cff.py @@ -0,0 +1,59 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hepExtended2026D78_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.HGCalV9Topology_cfi import * +from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import * +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "TOWER", + "HGCalEESensitive", + "HGCalHESiliconSensitive", + "HGCalHEScintillatorSensitive" + ) +) +from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# timing +from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import * +from Geometry.MTDGeometryBuilder.mtdParameters_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * +from Geometry.MTDNumberingBuilder.mtdTopology_cfi import * +from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import * +from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import * +mtdGeometry.applyAlignment = cms.bool(False) + diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D78_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D78_cff.py new file mode 100644 index 0000000000000..93f796743f7f0 --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D78_cff.py @@ -0,0 +1,16 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hep_cff import * +DDDetectorESProducer.confGeomXMLFiles = cms.FileInPath("Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D78.xml") + +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import * +from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D79Reco_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D79Reco_cff.py new file mode 100644 index 0000000000000..5746f21245a91 --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D79Reco_cff.py @@ -0,0 +1,59 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hepExtended2026D79_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.HGCalV9Topology_cfi import * +from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import * +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "TOWER", + "HGCalEESensitive", + "HGCalHESiliconSensitive", + "HGCalHEScintillatorSensitive" + ) +) +from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# timing +from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import * +from Geometry.MTDGeometryBuilder.mtdParameters_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * +from Geometry.MTDNumberingBuilder.mtdTopology_cfi import * +from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import * +from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import * +mtdGeometry.applyAlignment = cms.bool(False) + diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D79_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D79_cff.py new file mode 100644 index 0000000000000..4e9e4f72c1241 --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D79_cff.py @@ -0,0 +1,16 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryDD4hep_cff import * +DDDetectorESProducer.confGeomXMLFiles = cms.FileInPath("Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D79.xml") + +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import * +from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * diff --git a/Configuration/Geometry/python/GeometryExtended2015FlatMinus05PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2015FlatMinus05PercentReco_cff.py new file mode 100644 index 0000000000000..e962074c96de6 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2015FlatMinus05PercentReco_cff.py @@ -0,0 +1,5 @@ +import FWCore.ParameterSet.Config as cms + +# Ideal geometry, needed for transient ECAL alignement +from Configuration.Geometry.GeometryExtended2015FlatMinus05Percent_cff import * +from Configuration.Geometry.GeometryReco_cff import * diff --git a/Configuration/Geometry/python/GeometryExtended2015FlatMinus10PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2015FlatMinus10PercentReco_cff.py new file mode 100644 index 0000000000000..2ca2db94ca706 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2015FlatMinus10PercentReco_cff.py @@ -0,0 +1,5 @@ +import FWCore.ParameterSet.Config as cms + +# Ideal geometry, needed for transient ECAL alignement +from Configuration.Geometry.GeometryExtended2015FlatMinus10Percent_cff import * +from Configuration.Geometry.GeometryReco_cff import * diff --git a/Configuration/Geometry/python/GeometryExtended2015FlatPlus05PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2015FlatPlus05PercentReco_cff.py new file mode 100644 index 0000000000000..f5e07dfdd003d --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2015FlatPlus05PercentReco_cff.py @@ -0,0 +1,5 @@ +import FWCore.ParameterSet.Config as cms + +# Ideal geometry, needed for transient ECAL alignement +from Configuration.Geometry.GeometryExtended2015FlatPlus05Percent_cff import * +from Configuration.Geometry.GeometryReco_cff import * diff --git a/Configuration/Geometry/python/GeometryExtended2015FlatPlus10PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2015FlatPlus10PercentReco_cff.py new file mode 100644 index 0000000000000..bdddbe8480eca --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2015FlatPlus10PercentReco_cff.py @@ -0,0 +1,5 @@ +import FWCore.ParameterSet.Config as cms + +# Ideal geometry, needed for transient ECAL alignement +from Configuration.Geometry.GeometryExtended2015FlatPlus10Percent_cff import * +from Configuration.Geometry.GeometryReco_cff import * diff --git a/Configuration/Geometry/python/GeometryExtended2017FlatMinus05Percent_cff.py b/Configuration/Geometry/python/GeometryExtended2017FlatMinus05Percent_cff.py deleted file mode 100644 index 80f59dbab8aec..0000000000000 --- a/Configuration/Geometry/python/GeometryExtended2017FlatMinus05Percent_cff.py +++ /dev/null @@ -1,11 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# 2017 Geometry configuration with tracker material modified by -5% -# -from Geometry.CMSCommonData.cmsExtendedGeometry2017FlatMinus05PercentXML_cfi import * -from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * -from Geometry.EcalCommonData.ecalSimulationParameters_cff import * -from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * -from Geometry.MuonNumbering.muonGeometryConstants_cff import * - diff --git a/Configuration/Geometry/python/GeometryExtended2017FlatMinus10Percent_cff.py b/Configuration/Geometry/python/GeometryExtended2017FlatMinus10Percent_cff.py deleted file mode 100644 index ab8869cbf6f4e..0000000000000 --- a/Configuration/Geometry/python/GeometryExtended2017FlatMinus10Percent_cff.py +++ /dev/null @@ -1,11 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# 2017 Geometry configuration with tracker material modified by -10% -# -from Geometry.CMSCommonData.cmsExtendedGeometry2017FlatMinus10PercentXML_cfi import * -from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * -from Geometry.EcalCommonData.ecalSimulationParameters_cff import * -from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * -from Geometry.MuonNumbering.muonGeometryConstants_cff import * - diff --git a/Configuration/Geometry/python/GeometryExtended2017FlatPlus05Percent_cff.py b/Configuration/Geometry/python/GeometryExtended2017FlatPlus05Percent_cff.py deleted file mode 100644 index 3d88d5b36311f..0000000000000 --- a/Configuration/Geometry/python/GeometryExtended2017FlatPlus05Percent_cff.py +++ /dev/null @@ -1,11 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# 2017 Geometry configuration with tracker material modified by +5% -# -from Geometry.CMSCommonData.cmsExtendedGeometry2017FlatPlus05PercentXML_cfi import * -from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * -from Geometry.EcalCommonData.ecalSimulationParameters_cff import * -from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * -from Geometry.MuonNumbering.muonGeometryConstants_cff import * - diff --git a/Configuration/Geometry/python/GeometryExtended2017FlatPlus10Percent_cff.py b/Configuration/Geometry/python/GeometryExtended2017FlatPlus10Percent_cff.py deleted file mode 100644 index d4b82b61b2ebd..0000000000000 --- a/Configuration/Geometry/python/GeometryExtended2017FlatPlus10Percent_cff.py +++ /dev/null @@ -1,11 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# 2017 Geometry configuration with tracker material modified by +10% -# -from Geometry.CMSCommonData.cmsExtendedGeometry2017FlatPlus10PercentXML_cfi import * -from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * -from Geometry.EcalCommonData.ecalSimulationParameters_cff import * -from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * -from Geometry.MuonNumbering.muonGeometryConstants_cff import * - diff --git a/Configuration/Geometry/python/GeometryExtended2017Plan1FlatMinus05PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatMinus05PercentReco_cff.py new file mode 100644 index 0000000000000..26822276c2505 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatMinus05PercentReco_cff.py @@ -0,0 +1,31 @@ +import FWCore.ParameterSet.Config as cms + +# Ideal geometry, needed for transient ECAL alignement +from Configuration.Geometry.GeometryExtended2017Plan1FlatMinus05Percent_cff import * + +# Reconstruction geometry services +# Tracking Geometry +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * + +#Tracker +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * + +#Muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * + +# Alignment +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# Calorimeters +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometry_cff import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * diff --git a/Configuration/Geometry/python/GeometryExtended2017Plan1FlatMinus05Percent_cff.py b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatMinus05Percent_cff.py new file mode 100644 index 0000000000000..a7d9f8ae38a23 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatMinus05Percent_cff.py @@ -0,0 +1,11 @@ +import FWCore.ParameterSet.Config as cms + +# +# 2017 Geometry configuration with tracker material modified by -5% +# +from Geometry.CMSCommonData.cmsExtendedGeometry2017Plan1FlatMinus05PercentXML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * + diff --git a/Configuration/Geometry/python/GeometryExtended2017Plan1FlatMinus10PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatMinus10PercentReco_cff.py new file mode 100644 index 0000000000000..1843399b3279b --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatMinus10PercentReco_cff.py @@ -0,0 +1,31 @@ +import FWCore.ParameterSet.Config as cms + +# Ideal geometry, needed for transient ECAL alignement +from Configuration.Geometry.GeometryExtended2017Plan1FlatMinus10Percent_cff import * + +# Reconstruction geometry services +# Tracking Geometry +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * + +#Tracker +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * + +#Muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * + +# Alignment +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# Calorimeters +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometry_cff import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * diff --git a/Configuration/Geometry/python/GeometryExtended2017Plan1FlatMinus10Percent_cff.py b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatMinus10Percent_cff.py new file mode 100644 index 0000000000000..fc57f13f3507b --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatMinus10Percent_cff.py @@ -0,0 +1,11 @@ +import FWCore.ParameterSet.Config as cms + +# +# 2017 Geometry configuration with tracker material modified by -10% +# +from Geometry.CMSCommonData.cmsExtendedGeometry2017Plan1FlatMinus10PercentXML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * + diff --git a/Configuration/Geometry/python/GeometryExtended2017Plan1FlatPlus05PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatPlus05PercentReco_cff.py new file mode 100644 index 0000000000000..4b88ecd1cd364 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatPlus05PercentReco_cff.py @@ -0,0 +1,31 @@ +import FWCore.ParameterSet.Config as cms + +# Ideal geometry, needed for transient ECAL alignement +from Configuration.Geometry.GeometryExtended2017Plan1FlatPlus05Percent_cff import * + +# Reconstruction geometry services +# Tracking Geometry +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * + +#Tracker +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * + +#Muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * + +# Alignment +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# Calorimeters +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometry_cff import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * diff --git a/Configuration/Geometry/python/GeometryExtended2017Plan1FlatPlus05Percent_cff.py b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatPlus05Percent_cff.py new file mode 100644 index 0000000000000..de897406384e3 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatPlus05Percent_cff.py @@ -0,0 +1,11 @@ +import FWCore.ParameterSet.Config as cms + +# +# 2017 Geometry configuration with tracker material modified by +5% +# +from Geometry.CMSCommonData.cmsExtendedGeometry2017Plan1FlatPlus05PercentXML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * + diff --git a/Configuration/Geometry/python/GeometryExtended2017Plan1FlatPlus10PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatPlus10PercentReco_cff.py new file mode 100644 index 0000000000000..73d37e33728dd --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatPlus10PercentReco_cff.py @@ -0,0 +1,31 @@ +import FWCore.ParameterSet.Config as cms + +# Ideal geometry, needed for transient ECAL alignement +from Configuration.Geometry.GeometryExtended2017Plan1FlatPlus10Percent_cff import * + +# Reconstruction geometry services +# Tracking Geometry +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * + +#Tracker +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * + +#Muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * + +# Alignment +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# Calorimeters +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometry_cff import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * diff --git a/Configuration/Geometry/python/GeometryExtended2017Plan1FlatPlus10Percent_cff.py b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatPlus10Percent_cff.py new file mode 100644 index 0000000000000..7f4931aece034 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2017Plan1FlatPlus10Percent_cff.py @@ -0,0 +1,11 @@ +import FWCore.ParameterSet.Config as cms + +# +# 2017 Geometry configuration with tracker material modified by +10% +# +from Geometry.CMSCommonData.cmsExtendedGeometry2017Plan1FlatPlus10PercentXML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * + diff --git a/Configuration/Geometry/python/GeometryExtended2018FlatMinus05PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2018FlatMinus05PercentReco_cff.py new file mode 100644 index 0000000000000..acd5b40ee93a2 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2018FlatMinus05PercentReco_cff.py @@ -0,0 +1,32 @@ +import FWCore.ParameterSet.Config as cms + +# Ideal geometry, needed for transient ECAL alignement +from Configuration.Geometry.GeometryExtended2018FlatMinus05Percent_cff import * + +# Reconstruction geometry services +# Tracking Geometry +#bah - well, this is not a cfi! +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * + +#Tracker +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * + +#Muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * + +# Alignment +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# Calorimeters +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometry_cff import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * diff --git a/Configuration/Geometry/python/GeometryExtended2018FlatMinus10PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2018FlatMinus10PercentReco_cff.py new file mode 100644 index 0000000000000..b199febc3d8e1 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2018FlatMinus10PercentReco_cff.py @@ -0,0 +1,32 @@ +import FWCore.ParameterSet.Config as cms + +# Ideal geometry, needed for transient ECAL alignement +from Configuration.Geometry.GeometryExtended2018FlatMinus10Percent_cff import * + +# Reconstruction geometry services +# Tracking Geometry +#bah - well, this is not a cfi! +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * + +#Tracker +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * + +#Muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * + +# Alignment +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# Calorimeters +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometry_cff import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * diff --git a/Configuration/Geometry/python/GeometryExtended2018FlatPlus05PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2018FlatPlus05PercentReco_cff.py new file mode 100644 index 0000000000000..8b34163ec9edc --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2018FlatPlus05PercentReco_cff.py @@ -0,0 +1,32 @@ +import FWCore.ParameterSet.Config as cms + +# Ideal geometry, needed for transient ECAL alignement +from Configuration.Geometry.GeometryExtended2018FlatPlus05Percent_cff import * + +# Reconstruction geometry services +# Tracking Geometry +#bah - well, this is not a cfi! +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * + +#Tracker +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * + +#Muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * + +# Alignment +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# Calorimeters +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometry_cff import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * diff --git a/Configuration/Geometry/python/GeometryExtended2018FlatPlus10PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2018FlatPlus10PercentReco_cff.py new file mode 100644 index 0000000000000..0551a6f017b7d --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2018FlatPlus10PercentReco_cff.py @@ -0,0 +1,32 @@ +import FWCore.ParameterSet.Config as cms + +# Ideal geometry, needed for transient ECAL alignement +from Configuration.Geometry.GeometryExtended2018FlatPlus10Percent_cff import * + +# Reconstruction geometry services +# Tracking Geometry +#bah - well, this is not a cfi! +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * + +#Tracker +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * + +#Muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * + +# Alignment +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# Calorimeters +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometry_cff import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * diff --git a/Configuration/Geometry/python/GeometryExtended2021FlatMinus05PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2021FlatMinus05PercentReco_cff.py new file mode 100644 index 0000000000000..c53844ea4c3d4 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2021FlatMinus05PercentReco_cff.py @@ -0,0 +1,51 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryExtended2021FlatMinus05Percent_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "EcalEndcap", + "EcalPreshower", + "TOWER", + ) +) +from Geometry.EcalAlgo.EcalGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# pps + + diff --git a/Configuration/Geometry/python/GeometryExtended2021FlatMinus05Percent_cff.py b/Configuration/Geometry/python/GeometryExtended2021FlatMinus05Percent_cff.py new file mode 100644 index 0000000000000..ac204a484c471 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2021FlatMinus05Percent_cff.py @@ -0,0 +1,12 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Geometry.CMSCommonData.cmsExtendedGeometry2021FlatMinus05PercentXML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * + diff --git a/Configuration/Geometry/python/GeometryExtended2021FlatMinus10PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2021FlatMinus10PercentReco_cff.py new file mode 100644 index 0000000000000..ed15597f8f3b2 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2021FlatMinus10PercentReco_cff.py @@ -0,0 +1,51 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryExtended2021FlatMinus10Percent_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "EcalEndcap", + "EcalPreshower", + "TOWER", + ) +) +from Geometry.EcalAlgo.EcalGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# pps + + diff --git a/Configuration/Geometry/python/GeometryExtended2021FlatMinus10Percent_cff.py b/Configuration/Geometry/python/GeometryExtended2021FlatMinus10Percent_cff.py new file mode 100644 index 0000000000000..63e3f88b9141c --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2021FlatMinus10Percent_cff.py @@ -0,0 +1,12 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Geometry.CMSCommonData.cmsExtendedGeometry2021FlatMinus10PercentXML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * + diff --git a/Configuration/Geometry/python/GeometryExtended2021FlatPlus05PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2021FlatPlus05PercentReco_cff.py new file mode 100644 index 0000000000000..a7e1f216b0fc1 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2021FlatPlus05PercentReco_cff.py @@ -0,0 +1,51 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryExtended2021FlatPlus05Percent_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "EcalEndcap", + "EcalPreshower", + "TOWER", + ) +) +from Geometry.EcalAlgo.EcalGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# pps + + diff --git a/Configuration/Geometry/python/GeometryExtended2021FlatPlus05Percent_cff.py b/Configuration/Geometry/python/GeometryExtended2021FlatPlus05Percent_cff.py new file mode 100644 index 0000000000000..7238ea157a7b5 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2021FlatPlus05Percent_cff.py @@ -0,0 +1,12 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Geometry.CMSCommonData.cmsExtendedGeometry2021FlatPlus05PercentXML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * + diff --git a/Configuration/Geometry/python/GeometryExtended2021FlatPlus10PercentReco_cff.py b/Configuration/Geometry/python/GeometryExtended2021FlatPlus10PercentReco_cff.py new file mode 100644 index 0000000000000..3285feb4a19db --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2021FlatPlus10PercentReco_cff.py @@ -0,0 +1,51 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryExtended2021FlatPlus10Percent_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "EcalEndcap", + "EcalPreshower", + "TOWER", + ) +) +from Geometry.EcalAlgo.EcalGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# pps + + diff --git a/Configuration/Geometry/python/GeometryExtended2021FlatPlus10Percent_cff.py b/Configuration/Geometry/python/GeometryExtended2021FlatPlus10Percent_cff.py new file mode 100644 index 0000000000000..a5bd0128b335d --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2021FlatPlus10Percent_cff.py @@ -0,0 +1,12 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Geometry.CMSCommonData.cmsExtendedGeometry2021FlatPlus10PercentXML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * + diff --git a/Configuration/Geometry/python/GeometryExtended2026D73Reco_cff.py b/Configuration/Geometry/python/GeometryExtended2026D73Reco_cff.py deleted file mode 100644 index da47300decc90..0000000000000 --- a/Configuration/Geometry/python/GeometryExtended2026D73Reco_cff.py +++ /dev/null @@ -1,60 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# This config was generated automatically using generate2026Geometry.py -# If you notice a mistake, please update the generating script, not just this config - -from Configuration.Geometry.GeometryExtended2026D73_cff import * - -# tracker -from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * -from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * -from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * -from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * -from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * -trackerGeometry.applyAlignment = cms.bool(False) - -# calo -from Geometry.CaloEventSetup.HGCalV9Topology_cfi import * -from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import * -from Geometry.CaloEventSetup.CaloTopology_cfi import * -from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * -CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", - SelectedCalos = cms.vstring("HCAL", - "ZDC", - "EcalBarrel", - "TOWER", - "HGCalEESensitive", - "HGCalHESiliconSensitive", - "HGCalHEScintillatorSensitive" - ) -) -from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import * -from Geometry.HcalEventSetup.HcalGeometry_cfi import * -from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * -from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * -from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * -from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * -from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * -from Geometry.EcalMapping.EcalMapping_cfi import * -from Geometry.EcalMapping.EcalMappingRecord_cfi import * - -# muon -from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * -from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * -from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * -from Geometry.GEMGeometryBuilder.me0Geometry_cfi import * -from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * -from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * - -# forward -from Geometry.ForwardGeometry.ForwardGeometry_cfi import * - -# timing -from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import * -from Geometry.MTDGeometryBuilder.mtdParameters_cff import * -from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * -from Geometry.MTDNumberingBuilder.mtdTopology_cfi import * -from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import * -from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import * -mtdGeometry.applyAlignment = cms.bool(False) - diff --git a/Configuration/Geometry/python/GeometryExtended2026D73_cff.py b/Configuration/Geometry/python/GeometryExtended2026D73_cff.py deleted file mode 100644 index bc15c76f0c940..0000000000000 --- a/Configuration/Geometry/python/GeometryExtended2026D73_cff.py +++ /dev/null @@ -1,14 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# This config was generated automatically using generate2026Geometry.py -# If you notice a mistake, please update the generating script, not just this config - -from Geometry.CMSCommonData.cmsExtendedGeometry2026D73XML_cfi import * -from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * -from Geometry.EcalCommonData.ecalSimulationParameters_cff import * -from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * -from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import * -from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import * -from Geometry.MuonNumbering.muonGeometryConstants_cff import * -from Geometry.MuonNumbering.muonOffsetESProducer_cff import * -from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * diff --git a/Configuration/Geometry/python/GeometryExtended2026D75Reco_cff.py b/Configuration/Geometry/python/GeometryExtended2026D75Reco_cff.py new file mode 100644 index 0000000000000..abf7c8d989dab --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D75Reco_cff.py @@ -0,0 +1,60 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryExtended2026D75_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.HGCalV9Topology_cfi import * +from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import * +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "TOWER", + "HGCalEESensitive", + "HGCalHESiliconSensitive", + "HGCalHEScintillatorSensitive" + ) +) +from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * +from Geometry.GEMGeometryBuilder.me0Geometry_cfi import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# timing +from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import * +from Geometry.MTDGeometryBuilder.mtdParameters_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * +from Geometry.MTDNumberingBuilder.mtdTopology_cfi import * +from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import * +from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import * +mtdGeometry.applyAlignment = cms.bool(False) + diff --git a/Configuration/Geometry/python/GeometryExtended2026D75_cff.py b/Configuration/Geometry/python/GeometryExtended2026D75_cff.py new file mode 100644 index 0000000000000..1b6328cbf541e --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D75_cff.py @@ -0,0 +1,14 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Geometry.CMSCommonData.cmsExtendedGeometry2026D75XML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import * +from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * diff --git a/Configuration/Geometry/python/GeometryExtended2026D76Reco_cff.py b/Configuration/Geometry/python/GeometryExtended2026D76Reco_cff.py new file mode 100644 index 0000000000000..c20edae6c093d --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D76Reco_cff.py @@ -0,0 +1,59 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryExtended2026D76_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.HGCalV9Topology_cfi import * +from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import * +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "TOWER", + "HGCalEESensitive", + "HGCalHESiliconSensitive", + "HGCalHEScintillatorSensitive" + ) +) +from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# timing +from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import * +from Geometry.MTDGeometryBuilder.mtdParameters_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * +from Geometry.MTDNumberingBuilder.mtdTopology_cfi import * +from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import * +from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import * +mtdGeometry.applyAlignment = cms.bool(False) + diff --git a/Configuration/Geometry/python/GeometryExtended2026D76_cff.py b/Configuration/Geometry/python/GeometryExtended2026D76_cff.py new file mode 100644 index 0000000000000..e24801665d236 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D76_cff.py @@ -0,0 +1,14 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Geometry.CMSCommonData.cmsExtendedGeometry2026D76XML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import * +from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * diff --git a/Configuration/Geometry/python/GeometryExtended2026D77Reco_cff.py b/Configuration/Geometry/python/GeometryExtended2026D77Reco_cff.py new file mode 100644 index 0000000000000..b3ca0f86cbe6b --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D77Reco_cff.py @@ -0,0 +1,59 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryExtended2026D77_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.HGCalV9Topology_cfi import * +from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import * +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "TOWER", + "HGCalEESensitive", + "HGCalHESiliconSensitive", + "HGCalHEScintillatorSensitive" + ) +) +from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# timing +from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import * +from Geometry.MTDGeometryBuilder.mtdParameters_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * +from Geometry.MTDNumberingBuilder.mtdTopology_cfi import * +from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import * +from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import * +mtdGeometry.applyAlignment = cms.bool(False) + diff --git a/Configuration/Geometry/python/GeometryExtended2026D77_cff.py b/Configuration/Geometry/python/GeometryExtended2026D77_cff.py new file mode 100644 index 0000000000000..c9eb31a311e8b --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D77_cff.py @@ -0,0 +1,14 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Geometry.CMSCommonData.cmsExtendedGeometry2026D77XML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import * +from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * diff --git a/Configuration/Geometry/python/GeometryExtended2026D78Reco_cff.py b/Configuration/Geometry/python/GeometryExtended2026D78Reco_cff.py new file mode 100644 index 0000000000000..a3d69d5167bca --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D78Reco_cff.py @@ -0,0 +1,59 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryExtended2026D78_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.HGCalV9Topology_cfi import * +from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import * +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "TOWER", + "HGCalEESensitive", + "HGCalHESiliconSensitive", + "HGCalHEScintillatorSensitive" + ) +) +from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# timing +from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import * +from Geometry.MTDGeometryBuilder.mtdParameters_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * +from Geometry.MTDNumberingBuilder.mtdTopology_cfi import * +from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import * +from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import * +mtdGeometry.applyAlignment = cms.bool(False) + diff --git a/Configuration/Geometry/python/GeometryExtended2026D78_cff.py b/Configuration/Geometry/python/GeometryExtended2026D78_cff.py new file mode 100644 index 0000000000000..0c7535a9b8345 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D78_cff.py @@ -0,0 +1,14 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Geometry.CMSCommonData.cmsExtendedGeometry2026D78XML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import * +from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * diff --git a/Configuration/Geometry/python/GeometryExtended2026D79Reco_cff.py b/Configuration/Geometry/python/GeometryExtended2026D79Reco_cff.py new file mode 100644 index 0000000000000..feaaab90d27cf --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D79Reco_cff.py @@ -0,0 +1,59 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryExtended2026D79_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.HGCalV9Topology_cfi import * +from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import * +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "TOWER", + "HGCalEESensitive", + "HGCalHESiliconSensitive", + "HGCalHEScintillatorSensitive" + ) +) +from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# timing +from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import * +from Geometry.MTDGeometryBuilder.mtdParameters_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * +from Geometry.MTDNumberingBuilder.mtdTopology_cfi import * +from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import * +from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import * +mtdGeometry.applyAlignment = cms.bool(False) + diff --git a/Configuration/Geometry/python/GeometryExtended2026D79_cff.py b/Configuration/Geometry/python/GeometryExtended2026D79_cff.py new file mode 100644 index 0000000000000..602856b757895 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D79_cff.py @@ -0,0 +1,14 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Geometry.CMSCommonData.cmsExtendedGeometry2026D79XML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import * +from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * diff --git a/Configuration/Geometry/python/dict2021Geometry.py b/Configuration/Geometry/python/dict2021Geometry.py index 148afaec35e3d..238366a036290 100644 --- a/Configuration/Geometry/python/dict2021Geometry.py +++ b/Configuration/Geometry/python/dict2021Geometry.py @@ -115,7 +115,34 @@ 'Geometry/CMSCommonData/data/FieldParameters.xml', ], "era" : "run3_common, stage2L1Trigger_2021", - } + }, + "O5" : { + 1 : [ + 'Geometry/CMSCommonData/data/materials/2021/v2/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v3/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2021/v3/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2017/v1/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase/2018/v1/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2021/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam/2021/v1/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml', + 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml', + ], + 5 : [ + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ], + "era" : "run3_common, stage2L1Trigger_2021", + }, } trackerDict = { @@ -125,36 +152,851 @@ "T1" : { 1 : [ 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', - 'Geometry/TrackerCommonData/data/pixfwdMaterials/2021/v1/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/pixfwdMaterials/2021/v1/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdSupportRingParameters.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeInnerZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeInnerZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeOuterZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeOuterZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v1/pixbar.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', + 'Geometry/TrackerCommonData/data/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/tibmodpar.xml', + 'Geometry/TrackerCommonData/data/tibmodule0.xml', + 'Geometry/TrackerCommonData/data/tibmodule0a.xml', + 'Geometry/TrackerCommonData/data/tibmodule0b.xml', + 'Geometry/TrackerCommonData/data/tibmodule2.xml', + 'Geometry/TrackerCommonData/data/tibstringpar.xml', + 'Geometry/TrackerCommonData/data/tibstring0ll.xml', + 'Geometry/TrackerCommonData/data/tibstring0lr.xml', + 'Geometry/TrackerCommonData/data/tibstring0ul.xml', + 'Geometry/TrackerCommonData/data/tibstring0ur.xml', + 'Geometry/TrackerCommonData/data/tibstring0.xml', + 'Geometry/TrackerCommonData/data/tibstring1ll.xml', + 'Geometry/TrackerCommonData/data/tibstring1lr.xml', + 'Geometry/TrackerCommonData/data/tibstring1ul.xml', + 'Geometry/TrackerCommonData/data/tibstring1ur.xml', + 'Geometry/TrackerCommonData/data/tibstring1.xml', + 'Geometry/TrackerCommonData/data/tibstring2ll.xml', + 'Geometry/TrackerCommonData/data/tibstring2lr.xml', + 'Geometry/TrackerCommonData/data/tibstring2ul.xml', + 'Geometry/TrackerCommonData/data/tibstring2ur.xml', + 'Geometry/TrackerCommonData/data/tibstring2.xml', + 'Geometry/TrackerCommonData/data/tibstring3ll.xml', + 'Geometry/TrackerCommonData/data/tibstring3lr.xml', + 'Geometry/TrackerCommonData/data/tibstring3ul.xml', + 'Geometry/TrackerCommonData/data/tibstring3ur.xml', + 'Geometry/TrackerCommonData/data/tibstring3.xml', + 'Geometry/TrackerCommonData/data/tiblayerpar.xml', + 'Geometry/TrackerCommonData/data/tiblayer0.xml', + 'Geometry/TrackerCommonData/data/tiblayer1.xml', + 'Geometry/TrackerCommonData/data/tiblayer2.xml', + 'Geometry/TrackerCommonData/data/tiblayer3.xml', + 'Geometry/TrackerCommonData/data/tib.xml', + 'Geometry/TrackerCommonData/data/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/tidmodpar.xml', + 'Geometry/TrackerCommonData/data/tidmodule0.xml', + 'Geometry/TrackerCommonData/data/tidmodule0r.xml', + 'Geometry/TrackerCommonData/data/tidmodule0l.xml', + 'Geometry/TrackerCommonData/data/tidmodule1.xml', + 'Geometry/TrackerCommonData/data/tidmodule1r.xml', + 'Geometry/TrackerCommonData/data/tidmodule1l.xml', + 'Geometry/TrackerCommonData/data/tidmodule2.xml', + 'Geometry/TrackerCommonData/data/tidringpar.xml', + 'Geometry/TrackerCommonData/data/tidring0.xml', + 'Geometry/TrackerCommonData/data/tidring0f.xml', + 'Geometry/TrackerCommonData/data/tidring0b.xml', + 'Geometry/TrackerCommonData/data/tidring1.xml', + 'Geometry/TrackerCommonData/data/tidring1f.xml', + 'Geometry/TrackerCommonData/data/tidring1b.xml', + 'Geometry/TrackerCommonData/data/tidring2.xml', + 'Geometry/TrackerCommonData/data/tid.xml', + 'Geometry/TrackerCommonData/data/tidf.xml', + 'Geometry/TrackerCommonData/data/tidb.xml', + 'Geometry/TrackerCommonData/data/tibtidservices.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', + 'Geometry/TrackerCommonData/data/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/tobmodpar.xml', + 'Geometry/TrackerCommonData/data/tobmodule0.xml', + 'Geometry/TrackerCommonData/data/tobmodule2.xml', + 'Geometry/TrackerCommonData/data/tobmodule4.xml', + 'Geometry/TrackerCommonData/data/tobrodpar.xml', + 'Geometry/TrackerCommonData/data/tobrod0c.xml', + 'Geometry/TrackerCommonData/data/tobrod0l.xml', + 'Geometry/TrackerCommonData/data/tobrod0h.xml', + 'Geometry/TrackerCommonData/data/tobrod0.xml', + 'Geometry/TrackerCommonData/data/tobrod1l.xml', + 'Geometry/TrackerCommonData/data/tobrod1h.xml', + 'Geometry/TrackerCommonData/data/tobrod1.xml', + 'Geometry/TrackerCommonData/data/tobrod2c.xml', + 'Geometry/TrackerCommonData/data/tobrod2l.xml', + 'Geometry/TrackerCommonData/data/tobrod2h.xml', + 'Geometry/TrackerCommonData/data/tobrod2.xml', + 'Geometry/TrackerCommonData/data/tobrod3l.xml', + 'Geometry/TrackerCommonData/data/tobrod3h.xml', + 'Geometry/TrackerCommonData/data/tobrod3.xml', + 'Geometry/TrackerCommonData/data/tobrod4c.xml', + 'Geometry/TrackerCommonData/data/tobrod4l.xml', + 'Geometry/TrackerCommonData/data/tobrod4h.xml', + 'Geometry/TrackerCommonData/data/tobrod4.xml', + 'Geometry/TrackerCommonData/data/tobrod5l.xml', + 'Geometry/TrackerCommonData/data/tobrod5h.xml', + 'Geometry/TrackerCommonData/data/tobrod5.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', + 'Geometry/TrackerCommonData/data/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/tecmodpar.xml', + 'Geometry/TrackerCommonData/data/tecmodule0.xml', + 'Geometry/TrackerCommonData/data/tecmodule0r.xml', + 'Geometry/TrackerCommonData/data/tecmodule0s.xml', + 'Geometry/TrackerCommonData/data/tecmodule1.xml', + 'Geometry/TrackerCommonData/data/tecmodule1r.xml', + 'Geometry/TrackerCommonData/data/tecmodule1s.xml', + 'Geometry/TrackerCommonData/data/tecmodule2.xml', + 'Geometry/TrackerCommonData/data/tecmodule3.xml', + 'Geometry/TrackerCommonData/data/tecmodule4.xml', + 'Geometry/TrackerCommonData/data/tecmodule4r.xml', + 'Geometry/TrackerCommonData/data/tecmodule4s.xml', + 'Geometry/TrackerCommonData/data/tecmodule5.xml', + 'Geometry/TrackerCommonData/data/tecmodule6.xml', + 'Geometry/TrackerCommonData/data/tecpetpar.xml', + 'Geometry/TrackerCommonData/data/tecring0.xml', + 'Geometry/TrackerCommonData/data/tecring1.xml', + 'Geometry/TrackerCommonData/data/tecring2.xml', + 'Geometry/TrackerCommonData/data/tecring3.xml', + 'Geometry/TrackerCommonData/data/tecring4.xml', + 'Geometry/TrackerCommonData/data/tecring5.xml', + 'Geometry/TrackerCommonData/data/tecring6.xml', + 'Geometry/TrackerCommonData/data/tecring0f.xml', + 'Geometry/TrackerCommonData/data/tecring1f.xml', + 'Geometry/TrackerCommonData/data/tecring2f.xml', + 'Geometry/TrackerCommonData/data/tecring3f.xml', + 'Geometry/TrackerCommonData/data/tecring4f.xml', + 'Geometry/TrackerCommonData/data/tecring5f.xml', + 'Geometry/TrackerCommonData/data/tecring6f.xml', + 'Geometry/TrackerCommonData/data/tecring0b.xml', + 'Geometry/TrackerCommonData/data/tecring1b.xml', + 'Geometry/TrackerCommonData/data/tecring2b.xml', + 'Geometry/TrackerCommonData/data/tecring3b.xml', + 'Geometry/TrackerCommonData/data/tecring4b.xml', + 'Geometry/TrackerCommonData/data/tecring5b.xml', + 'Geometry/TrackerCommonData/data/tecring6b.xml', + 'Geometry/TrackerCommonData/data/tecpetalf.xml', + 'Geometry/TrackerCommonData/data/tecpetalb.xml', + 'Geometry/TrackerCommonData/data/tecpetal0.xml', + 'Geometry/TrackerCommonData/data/tecpetal0f.xml', + 'Geometry/TrackerCommonData/data/tecpetal0b.xml', + 'Geometry/TrackerCommonData/data/tecpetal3.xml', + 'Geometry/TrackerCommonData/data/tecpetal3f.xml', + 'Geometry/TrackerCommonData/data/tecpetal3b.xml', + 'Geometry/TrackerCommonData/data/tecpetal6f.xml', + 'Geometry/TrackerCommonData/data/tecpetal6b.xml', + 'Geometry/TrackerCommonData/data/tecpetal8f.xml', + 'Geometry/TrackerCommonData/data/tecpetal8b.xml', + 'Geometry/TrackerCommonData/data/tecwheel/2021/v1/tecwheel.xml', + 'Geometry/TrackerCommonData/data/tecwheela.xml', + 'Geometry/TrackerCommonData/data/tecwheelb.xml', + 'Geometry/TrackerCommonData/data/tecwheelc.xml', + 'Geometry/TrackerCommonData/data/tecwheeld.xml', + 'Geometry/TrackerCommonData/data/tecwheel6.xml', + 'Geometry/TrackerCommonData/data/tecservices.xml', + 'Geometry/TrackerCommonData/data/tecbackplate.xml', + 'Geometry/TrackerCommonData/data/tec.xml', + 'Geometry/TrackerCommonData/data/Run2/tracker.xml', + 'Geometry/TrackerCommonData/data/trackerpixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', + 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', + 'Geometry/TrackerCommonData/data/trackertib.xml', + 'Geometry/TrackerCommonData/data/trackertid.xml', + 'Geometry/TrackerCommonData/data/trackertob.xml', + 'Geometry/TrackerCommonData/data/trackertec.xml', + 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', + 'Geometry/TrackerCommonData/data/trackerother.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', + 'Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + ], + "sim" : [ + 'from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import *', + ], + "reco" : [ + 'from Geometry.CommonTopologies.globalTrackingGeometry_cfi import *', + 'from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import *', + 'from Geometry.TrackerGeometryBuilder.trackerParameters_cff import *', + 'from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import *', + 'from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import *', + 'trackerGeometry.applyAlignment = cms.bool(False)', + ], + }, + "T2" : { + 1 : [ + 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/pixfwdMaterials/2017ZeroMaterial/v1/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdSupportRingParameters.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeInnerZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeInnerZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeOuterZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeOuterZminus.xml', + 'Geometry/TrackerCommonData/data/pixbarmaterial/2017ZeroMaterial/v1/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v1/pixbar.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', + 'Geometry/TrackerCommonData/data/tibtidcommonmaterial/2017ZeroMaterial/v1/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/tibmaterial/2017ZeroMaterial/v1/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/tibmodpar.xml', + 'Geometry/TrackerCommonData/data/tibmodule0.xml', + 'Geometry/TrackerCommonData/data/tibmodule0a.xml', + 'Geometry/TrackerCommonData/data/tibmodule0b.xml', + 'Geometry/TrackerCommonData/data/tibmodule2.xml', + 'Geometry/TrackerCommonData/data/tibstringpar.xml', + 'Geometry/TrackerCommonData/data/tibstring0ll.xml', + 'Geometry/TrackerCommonData/data/tibstring0lr.xml', + 'Geometry/TrackerCommonData/data/tibstring0ul.xml', + 'Geometry/TrackerCommonData/data/tibstring0ur.xml', + 'Geometry/TrackerCommonData/data/tibstring0.xml', + 'Geometry/TrackerCommonData/data/tibstring1ll.xml', + 'Geometry/TrackerCommonData/data/tibstring1lr.xml', + 'Geometry/TrackerCommonData/data/tibstring1ul.xml', + 'Geometry/TrackerCommonData/data/tibstring1ur.xml', + 'Geometry/TrackerCommonData/data/tibstring1.xml', + 'Geometry/TrackerCommonData/data/tibstring2ll.xml', + 'Geometry/TrackerCommonData/data/tibstring2lr.xml', + 'Geometry/TrackerCommonData/data/tibstring2ul.xml', + 'Geometry/TrackerCommonData/data/tibstring2ur.xml', + 'Geometry/TrackerCommonData/data/tibstring2.xml', + 'Geometry/TrackerCommonData/data/tibstring3ll.xml', + 'Geometry/TrackerCommonData/data/tibstring3lr.xml', + 'Geometry/TrackerCommonData/data/tibstring3ul.xml', + 'Geometry/TrackerCommonData/data/tibstring3ur.xml', + 'Geometry/TrackerCommonData/data/tibstring3.xml', + 'Geometry/TrackerCommonData/data/tiblayerpar.xml', + 'Geometry/TrackerCommonData/data/tiblayer0.xml', + 'Geometry/TrackerCommonData/data/tiblayer1.xml', + 'Geometry/TrackerCommonData/data/tiblayer2.xml', + 'Geometry/TrackerCommonData/data/tiblayer3.xml', + 'Geometry/TrackerCommonData/data/tib.xml', + 'Geometry/TrackerCommonData/data/tidmaterial/2017ZeroMaterial/v1/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/tidmodpar.xml', + 'Geometry/TrackerCommonData/data/tidmodule0.xml', + 'Geometry/TrackerCommonData/data/tidmodule0r.xml', + 'Geometry/TrackerCommonData/data/tidmodule0l.xml', + 'Geometry/TrackerCommonData/data/tidmodule1.xml', + 'Geometry/TrackerCommonData/data/tidmodule1r.xml', + 'Geometry/TrackerCommonData/data/tidmodule1l.xml', + 'Geometry/TrackerCommonData/data/tidmodule2.xml', + 'Geometry/TrackerCommonData/data/tidringpar.xml', + 'Geometry/TrackerCommonData/data/tidring0.xml', + 'Geometry/TrackerCommonData/data/tidring0f.xml', + 'Geometry/TrackerCommonData/data/tidring0b.xml', + 'Geometry/TrackerCommonData/data/tidring1.xml', + 'Geometry/TrackerCommonData/data/tidring1f.xml', + 'Geometry/TrackerCommonData/data/tidring1b.xml', + 'Geometry/TrackerCommonData/data/tidring2.xml', + 'Geometry/TrackerCommonData/data/tid.xml', + 'Geometry/TrackerCommonData/data/tidf.xml', + 'Geometry/TrackerCommonData/data/tidb.xml', + 'Geometry/TrackerCommonData/data/tibtidservices.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', + 'Geometry/TrackerCommonData/data/tobmaterial/2017ZeroMaterial/v1/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/tobmodpar.xml', + 'Geometry/TrackerCommonData/data/tobmodule0.xml', + 'Geometry/TrackerCommonData/data/tobmodule2.xml', + 'Geometry/TrackerCommonData/data/tobmodule4.xml', + 'Geometry/TrackerCommonData/data/tobrodpar.xml', + 'Geometry/TrackerCommonData/data/tobrod0c.xml', + 'Geometry/TrackerCommonData/data/tobrod0l.xml', + 'Geometry/TrackerCommonData/data/tobrod0h.xml', + 'Geometry/TrackerCommonData/data/tobrod0.xml', + 'Geometry/TrackerCommonData/data/tobrod1l.xml', + 'Geometry/TrackerCommonData/data/tobrod1h.xml', + 'Geometry/TrackerCommonData/data/tobrod1.xml', + 'Geometry/TrackerCommonData/data/tobrod2c.xml', + 'Geometry/TrackerCommonData/data/tobrod2l.xml', + 'Geometry/TrackerCommonData/data/tobrod2h.xml', + 'Geometry/TrackerCommonData/data/tobrod2.xml', + 'Geometry/TrackerCommonData/data/tobrod3l.xml', + 'Geometry/TrackerCommonData/data/tobrod3h.xml', + 'Geometry/TrackerCommonData/data/tobrod3.xml', + 'Geometry/TrackerCommonData/data/tobrod4c.xml', + 'Geometry/TrackerCommonData/data/tobrod4l.xml', + 'Geometry/TrackerCommonData/data/tobrod4h.xml', + 'Geometry/TrackerCommonData/data/tobrod4.xml', + 'Geometry/TrackerCommonData/data/tobrod5l.xml', + 'Geometry/TrackerCommonData/data/tobrod5h.xml', + 'Geometry/TrackerCommonData/data/tobrod5.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', + 'Geometry/TrackerCommonData/data/tecmaterial/2017ZeroMaterial/v1/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/tecmodpar.xml', + 'Geometry/TrackerCommonData/data/tecmodule0.xml', + 'Geometry/TrackerCommonData/data/tecmodule0r.xml', + 'Geometry/TrackerCommonData/data/tecmodule0s.xml', + 'Geometry/TrackerCommonData/data/tecmodule1.xml', + 'Geometry/TrackerCommonData/data/tecmodule1r.xml', + 'Geometry/TrackerCommonData/data/tecmodule1s.xml', + 'Geometry/TrackerCommonData/data/tecmodule2.xml', + 'Geometry/TrackerCommonData/data/tecmodule3.xml', + 'Geometry/TrackerCommonData/data/tecmodule4.xml', + 'Geometry/TrackerCommonData/data/tecmodule4r.xml', + 'Geometry/TrackerCommonData/data/tecmodule4s.xml', + 'Geometry/TrackerCommonData/data/tecmodule5.xml', + 'Geometry/TrackerCommonData/data/tecmodule6.xml', + 'Geometry/TrackerCommonData/data/tecpetpar.xml', + 'Geometry/TrackerCommonData/data/tecring0.xml', + 'Geometry/TrackerCommonData/data/tecring1.xml', + 'Geometry/TrackerCommonData/data/tecring2.xml', + 'Geometry/TrackerCommonData/data/tecring3.xml', + 'Geometry/TrackerCommonData/data/tecring4.xml', + 'Geometry/TrackerCommonData/data/tecring5.xml', + 'Geometry/TrackerCommonData/data/tecring6.xml', + 'Geometry/TrackerCommonData/data/tecring0f.xml', + 'Geometry/TrackerCommonData/data/tecring1f.xml', + 'Geometry/TrackerCommonData/data/tecring2f.xml', + 'Geometry/TrackerCommonData/data/tecring3f.xml', + 'Geometry/TrackerCommonData/data/tecring4f.xml', + 'Geometry/TrackerCommonData/data/tecring5f.xml', + 'Geometry/TrackerCommonData/data/tecring6f.xml', + 'Geometry/TrackerCommonData/data/tecring0b.xml', + 'Geometry/TrackerCommonData/data/tecring1b.xml', + 'Geometry/TrackerCommonData/data/tecring2b.xml', + 'Geometry/TrackerCommonData/data/tecring3b.xml', + 'Geometry/TrackerCommonData/data/tecring4b.xml', + 'Geometry/TrackerCommonData/data/tecring5b.xml', + 'Geometry/TrackerCommonData/data/tecring6b.xml', + 'Geometry/TrackerCommonData/data/tecpetalf.xml', + 'Geometry/TrackerCommonData/data/tecpetalb.xml', + 'Geometry/TrackerCommonData/data/tecpetal0.xml', + 'Geometry/TrackerCommonData/data/tecpetal0f.xml', + 'Geometry/TrackerCommonData/data/tecpetal0b.xml', + 'Geometry/TrackerCommonData/data/tecpetal3.xml', + 'Geometry/TrackerCommonData/data/tecpetal3f.xml', + 'Geometry/TrackerCommonData/data/tecpetal3b.xml', + 'Geometry/TrackerCommonData/data/tecpetal6f.xml', + 'Geometry/TrackerCommonData/data/tecpetal6b.xml', + 'Geometry/TrackerCommonData/data/tecpetal8f.xml', + 'Geometry/TrackerCommonData/data/tecpetal8b.xml', + 'Geometry/TrackerCommonData/data/tecwheel/2021/v1/tecwheel.xml', + 'Geometry/TrackerCommonData/data/tecwheela.xml', + 'Geometry/TrackerCommonData/data/tecwheelb.xml', + 'Geometry/TrackerCommonData/data/tecwheelc.xml', + 'Geometry/TrackerCommonData/data/tecwheeld.xml', + 'Geometry/TrackerCommonData/data/tecwheel6.xml', + 'Geometry/TrackerCommonData/data/tecservices.xml', + 'Geometry/TrackerCommonData/data/tecbackplate.xml', + 'Geometry/TrackerCommonData/data/tec.xml', + 'Geometry/TrackerCommonData/data/Run2/tracker.xml', + 'Geometry/TrackerCommonData/data/trackerpixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', + 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', + 'Geometry/TrackerCommonData/data/trackertib.xml', + 'Geometry/TrackerCommonData/data/trackertid.xml', + 'Geometry/TrackerCommonData/data/trackertob.xml', + 'Geometry/TrackerCommonData/data/trackertec.xml', + 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', + 'Geometry/TrackerCommonData/data/trackerother.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', + 'Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + ], + "sim" : [ + 'from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import *', + ], + "reco" : [ + 'from Geometry.CommonTopologies.globalTrackingGeometry_cfi import *', + 'from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import *', + 'from Geometry.TrackerGeometryBuilder.trackerParameters_cff import *', + 'from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import *', + 'from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import *', + 'trackerGeometry.applyAlignment = cms.bool(False)', + ], + }, + "T3" : { + 1 : [ + 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/pixfwdMaterials/2021/v2/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbar.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', + 'Geometry/TrackerCommonData/data/tibtidcommonmaterial/2021/v1/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/tibmaterial/2021/v1/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/tibmodpar.xml', + 'Geometry/TrackerCommonData/data/tibmodule0.xml', + 'Geometry/TrackerCommonData/data/tibmodule0a.xml', + 'Geometry/TrackerCommonData/data/tibmodule0b.xml', + 'Geometry/TrackerCommonData/data/tibmodule2.xml', + 'Geometry/TrackerCommonData/data/tibstringpar.xml', + 'Geometry/TrackerCommonData/data/tibstring0ll.xml', + 'Geometry/TrackerCommonData/data/tibstring0lr.xml', + 'Geometry/TrackerCommonData/data/tibstring0ul.xml', + 'Geometry/TrackerCommonData/data/tibstring0ur.xml', + 'Geometry/TrackerCommonData/data/tibstring0.xml', + 'Geometry/TrackerCommonData/data/tibstring1ll.xml', + 'Geometry/TrackerCommonData/data/tibstring1lr.xml', + 'Geometry/TrackerCommonData/data/tibstring1ul.xml', + 'Geometry/TrackerCommonData/data/tibstring1ur.xml', + 'Geometry/TrackerCommonData/data/tibstring1.xml', + 'Geometry/TrackerCommonData/data/tibstring2ll.xml', + 'Geometry/TrackerCommonData/data/tibstring2lr.xml', + 'Geometry/TrackerCommonData/data/tibstring2ul.xml', + 'Geometry/TrackerCommonData/data/tibstring2ur.xml', + 'Geometry/TrackerCommonData/data/tibstring2.xml', + 'Geometry/TrackerCommonData/data/tibstring3ll.xml', + 'Geometry/TrackerCommonData/data/tibstring3lr.xml', + 'Geometry/TrackerCommonData/data/tibstring3ul.xml', + 'Geometry/TrackerCommonData/data/tibstring3ur.xml', + 'Geometry/TrackerCommonData/data/tibstring3.xml', + 'Geometry/TrackerCommonData/data/tiblayerpar.xml', + 'Geometry/TrackerCommonData/data/tiblayer0.xml', + 'Geometry/TrackerCommonData/data/tiblayer1.xml', + 'Geometry/TrackerCommonData/data/tiblayer2.xml', + 'Geometry/TrackerCommonData/data/tiblayer3.xml', + 'Geometry/TrackerCommonData/data/tib.xml', + 'Geometry/TrackerCommonData/data/tidmaterial/2021/v1/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/tidmodpar.xml', + 'Geometry/TrackerCommonData/data/tidmodule0.xml', + 'Geometry/TrackerCommonData/data/tidmodule0r.xml', + 'Geometry/TrackerCommonData/data/tidmodule0l.xml', + 'Geometry/TrackerCommonData/data/tidmodule1.xml', + 'Geometry/TrackerCommonData/data/tidmodule1r.xml', + 'Geometry/TrackerCommonData/data/tidmodule1l.xml', + 'Geometry/TrackerCommonData/data/tidmodule2.xml', + 'Geometry/TrackerCommonData/data/tidringpar.xml', + 'Geometry/TrackerCommonData/data/tidring0.xml', + 'Geometry/TrackerCommonData/data/tidring0f.xml', + 'Geometry/TrackerCommonData/data/tidring0b.xml', + 'Geometry/TrackerCommonData/data/tidring1.xml', + 'Geometry/TrackerCommonData/data/tidring1f.xml', + 'Geometry/TrackerCommonData/data/tidring1b.xml', + 'Geometry/TrackerCommonData/data/tidring2.xml', + 'Geometry/TrackerCommonData/data/tid.xml', + 'Geometry/TrackerCommonData/data/tidf.xml', + 'Geometry/TrackerCommonData/data/tidb.xml', + 'Geometry/TrackerCommonData/data/tibtidservices.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', + 'Geometry/TrackerCommonData/data/tobmaterial/2021/v1/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/tobmodpar.xml', + 'Geometry/TrackerCommonData/data/tobmodule0.xml', + 'Geometry/TrackerCommonData/data/tobmodule2.xml', + 'Geometry/TrackerCommonData/data/tobmodule4.xml', + 'Geometry/TrackerCommonData/data/tobrodpar.xml', + 'Geometry/TrackerCommonData/data/tobrod0c.xml', + 'Geometry/TrackerCommonData/data/tobrod0l.xml', + 'Geometry/TrackerCommonData/data/tobrod0h.xml', + 'Geometry/TrackerCommonData/data/tobrod0.xml', + 'Geometry/TrackerCommonData/data/tobrod1l.xml', + 'Geometry/TrackerCommonData/data/tobrod1h.xml', + 'Geometry/TrackerCommonData/data/tobrod1.xml', + 'Geometry/TrackerCommonData/data/tobrod2c.xml', + 'Geometry/TrackerCommonData/data/tobrod2l.xml', + 'Geometry/TrackerCommonData/data/tobrod2h.xml', + 'Geometry/TrackerCommonData/data/tobrod2.xml', + 'Geometry/TrackerCommonData/data/tobrod3l.xml', + 'Geometry/TrackerCommonData/data/tobrod3h.xml', + 'Geometry/TrackerCommonData/data/tobrod3.xml', + 'Geometry/TrackerCommonData/data/tobrod4c.xml', + 'Geometry/TrackerCommonData/data/tobrod4l.xml', + 'Geometry/TrackerCommonData/data/tobrod4h.xml', + 'Geometry/TrackerCommonData/data/tobrod4.xml', + 'Geometry/TrackerCommonData/data/tobrod5l.xml', + 'Geometry/TrackerCommonData/data/tobrod5h.xml', + 'Geometry/TrackerCommonData/data/tobrod5.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', + 'Geometry/TrackerCommonData/data/tecmaterial/2021/v1/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/tecmodpar.xml', + 'Geometry/TrackerCommonData/data/tecmodule0.xml', + 'Geometry/TrackerCommonData/data/tecmodule0r.xml', + 'Geometry/TrackerCommonData/data/tecmodule0s.xml', + 'Geometry/TrackerCommonData/data/tecmodule1.xml', + 'Geometry/TrackerCommonData/data/tecmodule1r.xml', + 'Geometry/TrackerCommonData/data/tecmodule1s.xml', + 'Geometry/TrackerCommonData/data/tecmodule2.xml', + 'Geometry/TrackerCommonData/data/tecmodule3.xml', + 'Geometry/TrackerCommonData/data/tecmodule4.xml', + 'Geometry/TrackerCommonData/data/tecmodule4r.xml', + 'Geometry/TrackerCommonData/data/tecmodule4s.xml', + 'Geometry/TrackerCommonData/data/tecmodule5.xml', + 'Geometry/TrackerCommonData/data/tecmodule6.xml', + 'Geometry/TrackerCommonData/data/tecpetpar.xml', + 'Geometry/TrackerCommonData/data/tecring0.xml', + 'Geometry/TrackerCommonData/data/tecring1.xml', + 'Geometry/TrackerCommonData/data/tecring2.xml', + 'Geometry/TrackerCommonData/data/tecring3.xml', + 'Geometry/TrackerCommonData/data/tecring4.xml', + 'Geometry/TrackerCommonData/data/tecring5.xml', + 'Geometry/TrackerCommonData/data/tecring6.xml', + 'Geometry/TrackerCommonData/data/tecring0f.xml', + 'Geometry/TrackerCommonData/data/tecring1f.xml', + 'Geometry/TrackerCommonData/data/tecring2f.xml', + 'Geometry/TrackerCommonData/data/tecring3f.xml', + 'Geometry/TrackerCommonData/data/tecring4f.xml', + 'Geometry/TrackerCommonData/data/tecring5f.xml', + 'Geometry/TrackerCommonData/data/tecring6f.xml', + 'Geometry/TrackerCommonData/data/tecring0b.xml', + 'Geometry/TrackerCommonData/data/tecring1b.xml', + 'Geometry/TrackerCommonData/data/tecring2b.xml', + 'Geometry/TrackerCommonData/data/tecring3b.xml', + 'Geometry/TrackerCommonData/data/tecring4b.xml', + 'Geometry/TrackerCommonData/data/tecring5b.xml', + 'Geometry/TrackerCommonData/data/tecring6b.xml', + 'Geometry/TrackerCommonData/data/tecpetalf.xml', + 'Geometry/TrackerCommonData/data/tecpetalb.xml', + 'Geometry/TrackerCommonData/data/tecpetal0.xml', + 'Geometry/TrackerCommonData/data/tecpetal0f.xml', + 'Geometry/TrackerCommonData/data/tecpetal0b.xml', + 'Geometry/TrackerCommonData/data/tecpetal3.xml', + 'Geometry/TrackerCommonData/data/tecpetal3f.xml', + 'Geometry/TrackerCommonData/data/tecpetal3b.xml', + 'Geometry/TrackerCommonData/data/tecpetal6f.xml', + 'Geometry/TrackerCommonData/data/tecpetal6b.xml', + 'Geometry/TrackerCommonData/data/tecpetal8f.xml', + 'Geometry/TrackerCommonData/data/tecpetal8b.xml', + 'Geometry/TrackerCommonData/data/tecwheel/2021/v1/tecwheel.xml', + 'Geometry/TrackerCommonData/data/tecwheela.xml', + 'Geometry/TrackerCommonData/data/tecwheelb.xml', + 'Geometry/TrackerCommonData/data/tecwheelc.xml', + 'Geometry/TrackerCommonData/data/tecwheeld.xml', + 'Geometry/TrackerCommonData/data/tecwheel6.xml', + 'Geometry/TrackerCommonData/data/tecservices.xml', + 'Geometry/TrackerCommonData/data/tecbackplate.xml', + 'Geometry/TrackerCommonData/data/tec.xml', + 'Geometry/TrackerCommonData/data/Run2/tracker.xml', + 'Geometry/TrackerCommonData/data/trackerpixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', + 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', + 'Geometry/TrackerCommonData/data/trackertib.xml', + 'Geometry/TrackerCommonData/data/trackertid.xml', + 'Geometry/TrackerCommonData/data/trackertob.xml', + 'Geometry/TrackerCommonData/data/trackertec.xml', + 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', + 'Geometry/TrackerCommonData/data/trackerother.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', + 'Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + ], + "sim" : [ + 'from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import *', + ], + "reco" : [ + 'from Geometry.CommonTopologies.globalTrackingGeometry_cfi import *', + 'from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import *', + 'from Geometry.TrackerGeometryBuilder.trackerParameters_cff import *', + 'from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import *', + 'from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import *', + 'trackerGeometry.applyAlignment = cms.bool(False)', + ], + }, + "T4" : { + 1 : [ + 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', + 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbar.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', + 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/tibmodpar.xml', + 'Geometry/TrackerCommonData/data/tibmodule0.xml', + 'Geometry/TrackerCommonData/data/tibmodule0a.xml', + 'Geometry/TrackerCommonData/data/tibmodule0b.xml', + 'Geometry/TrackerCommonData/data/tibmodule2.xml', + 'Geometry/TrackerCommonData/data/tibstringpar.xml', + 'Geometry/TrackerCommonData/data/tibstring0ll.xml', + 'Geometry/TrackerCommonData/data/tibstring0lr.xml', + 'Geometry/TrackerCommonData/data/tibstring0ul.xml', + 'Geometry/TrackerCommonData/data/tibstring0ur.xml', + 'Geometry/TrackerCommonData/data/tibstring0.xml', + 'Geometry/TrackerCommonData/data/tibstring1ll.xml', + 'Geometry/TrackerCommonData/data/tibstring1lr.xml', + 'Geometry/TrackerCommonData/data/tibstring1ul.xml', + 'Geometry/TrackerCommonData/data/tibstring1ur.xml', + 'Geometry/TrackerCommonData/data/tibstring1.xml', + 'Geometry/TrackerCommonData/data/tibstring2ll.xml', + 'Geometry/TrackerCommonData/data/tibstring2lr.xml', + 'Geometry/TrackerCommonData/data/tibstring2ul.xml', + 'Geometry/TrackerCommonData/data/tibstring2ur.xml', + 'Geometry/TrackerCommonData/data/tibstring2.xml', + 'Geometry/TrackerCommonData/data/tibstring3ll.xml', + 'Geometry/TrackerCommonData/data/tibstring3lr.xml', + 'Geometry/TrackerCommonData/data/tibstring3ul.xml', + 'Geometry/TrackerCommonData/data/tibstring3ur.xml', + 'Geometry/TrackerCommonData/data/tibstring3.xml', + 'Geometry/TrackerCommonData/data/tiblayerpar.xml', + 'Geometry/TrackerCommonData/data/tiblayer0.xml', + 'Geometry/TrackerCommonData/data/tiblayer1.xml', + 'Geometry/TrackerCommonData/data/tiblayer2.xml', + 'Geometry/TrackerCommonData/data/tiblayer3.xml', + 'Geometry/TrackerCommonData/data/tib.xml', + 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/tidmodpar.xml', + 'Geometry/TrackerCommonData/data/tidmodule0.xml', + 'Geometry/TrackerCommonData/data/tidmodule0r.xml', + 'Geometry/TrackerCommonData/data/tidmodule0l.xml', + 'Geometry/TrackerCommonData/data/tidmodule1.xml', + 'Geometry/TrackerCommonData/data/tidmodule1r.xml', + 'Geometry/TrackerCommonData/data/tidmodule1l.xml', + 'Geometry/TrackerCommonData/data/tidmodule2.xml', + 'Geometry/TrackerCommonData/data/tidringpar.xml', + 'Geometry/TrackerCommonData/data/tidring0.xml', + 'Geometry/TrackerCommonData/data/tidring0f.xml', + 'Geometry/TrackerCommonData/data/tidring0b.xml', + 'Geometry/TrackerCommonData/data/tidring1.xml', + 'Geometry/TrackerCommonData/data/tidring1f.xml', + 'Geometry/TrackerCommonData/data/tidring1b.xml', + 'Geometry/TrackerCommonData/data/tidring2.xml', + 'Geometry/TrackerCommonData/data/tid.xml', + 'Geometry/TrackerCommonData/data/tidf.xml', + 'Geometry/TrackerCommonData/data/tidb.xml', + 'Geometry/TrackerCommonData/data/tibtidservices.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', + 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/tobmodpar.xml', + 'Geometry/TrackerCommonData/data/tobmodule0.xml', + 'Geometry/TrackerCommonData/data/tobmodule2.xml', + 'Geometry/TrackerCommonData/data/tobmodule4.xml', + 'Geometry/TrackerCommonData/data/tobrodpar.xml', + 'Geometry/TrackerCommonData/data/tobrod0c.xml', + 'Geometry/TrackerCommonData/data/tobrod0l.xml', + 'Geometry/TrackerCommonData/data/tobrod0h.xml', + 'Geometry/TrackerCommonData/data/tobrod0.xml', + 'Geometry/TrackerCommonData/data/tobrod1l.xml', + 'Geometry/TrackerCommonData/data/tobrod1h.xml', + 'Geometry/TrackerCommonData/data/tobrod1.xml', + 'Geometry/TrackerCommonData/data/tobrod2c.xml', + 'Geometry/TrackerCommonData/data/tobrod2l.xml', + 'Geometry/TrackerCommonData/data/tobrod2h.xml', + 'Geometry/TrackerCommonData/data/tobrod2.xml', + 'Geometry/TrackerCommonData/data/tobrod3l.xml', + 'Geometry/TrackerCommonData/data/tobrod3h.xml', + 'Geometry/TrackerCommonData/data/tobrod3.xml', + 'Geometry/TrackerCommonData/data/tobrod4c.xml', + 'Geometry/TrackerCommonData/data/tobrod4l.xml', + 'Geometry/TrackerCommonData/data/tobrod4h.xml', + 'Geometry/TrackerCommonData/data/tobrod4.xml', + 'Geometry/TrackerCommonData/data/tobrod5l.xml', + 'Geometry/TrackerCommonData/data/tobrod5h.xml', + 'Geometry/TrackerCommonData/data/tobrod5.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', + 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/tecmodpar.xml', + 'Geometry/TrackerCommonData/data/tecmodule0.xml', + 'Geometry/TrackerCommonData/data/tecmodule0r.xml', + 'Geometry/TrackerCommonData/data/tecmodule0s.xml', + 'Geometry/TrackerCommonData/data/tecmodule1.xml', + 'Geometry/TrackerCommonData/data/tecmodule1r.xml', + 'Geometry/TrackerCommonData/data/tecmodule1s.xml', + 'Geometry/TrackerCommonData/data/tecmodule2.xml', + 'Geometry/TrackerCommonData/data/tecmodule3.xml', + 'Geometry/TrackerCommonData/data/tecmodule4.xml', + 'Geometry/TrackerCommonData/data/tecmodule4r.xml', + 'Geometry/TrackerCommonData/data/tecmodule4s.xml', + 'Geometry/TrackerCommonData/data/tecmodule5.xml', + 'Geometry/TrackerCommonData/data/tecmodule6.xml', + 'Geometry/TrackerCommonData/data/tecpetpar.xml', + 'Geometry/TrackerCommonData/data/tecring0.xml', + 'Geometry/TrackerCommonData/data/tecring1.xml', + 'Geometry/TrackerCommonData/data/tecring2.xml', + 'Geometry/TrackerCommonData/data/tecring3.xml', + 'Geometry/TrackerCommonData/data/tecring4.xml', + 'Geometry/TrackerCommonData/data/tecring5.xml', + 'Geometry/TrackerCommonData/data/tecring6.xml', + 'Geometry/TrackerCommonData/data/tecring0f.xml', + 'Geometry/TrackerCommonData/data/tecring1f.xml', + 'Geometry/TrackerCommonData/data/tecring2f.xml', + 'Geometry/TrackerCommonData/data/tecring3f.xml', + 'Geometry/TrackerCommonData/data/tecring4f.xml', + 'Geometry/TrackerCommonData/data/tecring5f.xml', + 'Geometry/TrackerCommonData/data/tecring6f.xml', + 'Geometry/TrackerCommonData/data/tecring0b.xml', + 'Geometry/TrackerCommonData/data/tecring1b.xml', + 'Geometry/TrackerCommonData/data/tecring2b.xml', + 'Geometry/TrackerCommonData/data/tecring3b.xml', + 'Geometry/TrackerCommonData/data/tecring4b.xml', + 'Geometry/TrackerCommonData/data/tecring5b.xml', + 'Geometry/TrackerCommonData/data/tecring6b.xml', + 'Geometry/TrackerCommonData/data/tecpetalf.xml', + 'Geometry/TrackerCommonData/data/tecpetalb.xml', + 'Geometry/TrackerCommonData/data/tecpetal0.xml', + 'Geometry/TrackerCommonData/data/tecpetal0f.xml', + 'Geometry/TrackerCommonData/data/tecpetal0b.xml', + 'Geometry/TrackerCommonData/data/tecpetal3.xml', + 'Geometry/TrackerCommonData/data/tecpetal3f.xml', + 'Geometry/TrackerCommonData/data/tecpetal3b.xml', + 'Geometry/TrackerCommonData/data/tecpetal6f.xml', + 'Geometry/TrackerCommonData/data/tecpetal6b.xml', + 'Geometry/TrackerCommonData/data/tecpetal8f.xml', + 'Geometry/TrackerCommonData/data/tecpetal8b.xml', + 'Geometry/TrackerCommonData/data/tecwheel/2021/v1/tecwheel.xml', + 'Geometry/TrackerCommonData/data/tecwheela.xml', + 'Geometry/TrackerCommonData/data/tecwheelb.xml', + 'Geometry/TrackerCommonData/data/tecwheelc.xml', + 'Geometry/TrackerCommonData/data/tecwheeld.xml', + 'Geometry/TrackerCommonData/data/tecwheel6.xml', + 'Geometry/TrackerCommonData/data/tecservices.xml', + 'Geometry/TrackerCommonData/data/tecbackplate.xml', + 'Geometry/TrackerCommonData/data/tec.xml', + 'Geometry/TrackerCommonData/data/Run2/tracker.xml', + 'Geometry/TrackerCommonData/data/trackerpixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', + 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', + 'Geometry/TrackerCommonData/data/trackertib.xml', + 'Geometry/TrackerCommonData/data/trackertid.xml', + 'Geometry/TrackerCommonData/data/trackertob.xml', + 'Geometry/TrackerCommonData/data/trackertec.xml', + 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', + 'Geometry/TrackerCommonData/data/trackerother.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', + 'Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + ], + "sim" : [ + 'from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import *', + ], + "reco" : [ + 'from Geometry.CommonTopologies.globalTrackingGeometry_cfi import *', + 'from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import *', + 'from Geometry.TrackerGeometryBuilder.trackerParameters_cff import *', + 'from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import *', + 'from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import *', + 'trackerGeometry.applyAlignment = cms.bool(False)', + ], + }, + "T5" : { + 1 : [ + 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/tecmaterial.xml', 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdCylinder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdDisks.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwd.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdSupportRingParameters.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDiskZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDiskZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDiskZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDiskZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeInnerZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeInnerZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeOuterZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeOuterZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarmaterial.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarladder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v1/pixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbar.xml', 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', - 'Geometry/TrackerCommonData/data/tibtidcommonmaterial.xml', - 'Geometry/TrackerCommonData/data/tibmaterial.xml', 'Geometry/TrackerCommonData/data/tibmodpar.xml', 'Geometry/TrackerCommonData/data/tibmodule0.xml', 'Geometry/TrackerCommonData/data/tibmodule0a.xml', @@ -187,7 +1029,6 @@ 'Geometry/TrackerCommonData/data/tiblayer2.xml', 'Geometry/TrackerCommonData/data/tiblayer3.xml', 'Geometry/TrackerCommonData/data/tib.xml', - 'Geometry/TrackerCommonData/data/tidmaterial.xml', 'Geometry/TrackerCommonData/data/tidmodpar.xml', 'Geometry/TrackerCommonData/data/tidmodule0.xml', 'Geometry/TrackerCommonData/data/tidmodule0r.xml', @@ -210,7 +1051,6 @@ 'Geometry/TrackerCommonData/data/tibtidservices.xml', 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', - 'Geometry/TrackerCommonData/data/tobmaterial.xml', 'Geometry/TrackerCommonData/data/tobmodpar.xml', 'Geometry/TrackerCommonData/data/tobmodule0.xml', 'Geometry/TrackerCommonData/data/tobmodule2.xml', @@ -237,8 +1077,7 @@ 'Geometry/TrackerCommonData/data/tobrod5l.xml', 'Geometry/TrackerCommonData/data/tobrod5h.xml', 'Geometry/TrackerCommonData/data/tobrod5.xml', - 'Geometry/TrackerCommonData/data/v2/tob.xml', - 'Geometry/TrackerCommonData/data/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', 'Geometry/TrackerCommonData/data/tecmodpar.xml', 'Geometry/TrackerCommonData/data/tecmodule0.xml', 'Geometry/TrackerCommonData/data/tecmodule0r.xml', @@ -308,8 +1147,8 @@ 'Geometry/TrackerCommonData/data/trackerother.xml', 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', - 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', - 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI.xml', + 'Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml', 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', ], @@ -325,39 +1164,43 @@ 'trackerGeometry.applyAlignment = cms.bool(False)', ], }, - "T2" : { + "T6" : { 1 : [ 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', - 'Geometry/TrackerCommonData/data/pixfwdMaterials/2017ZeroMaterial/v1/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/tecmaterial.xml', 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdCylinder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdDisks.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwd.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdSupportRingParameters.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDiskZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDiskZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDiskZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDiskZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeInnerZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeInnerZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeOuterZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeOuterZminus.xml', - 'Geometry/TrackerCommonData/data/pixbarmaterial/2017ZeroMaterial/v1/pixbarmaterial.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarladder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v1/pixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbar.xml', 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', - 'Geometry/TrackerCommonData/data/tibtidcommonmaterial/2017ZeroMaterial/v1/tibtidcommonmaterial.xml', - 'Geometry/TrackerCommonData/data/tibmaterial/2017ZeroMaterial/v1/tibmaterial.xml', 'Geometry/TrackerCommonData/data/tibmodpar.xml', 'Geometry/TrackerCommonData/data/tibmodule0.xml', 'Geometry/TrackerCommonData/data/tibmodule0a.xml', @@ -390,7 +1233,6 @@ 'Geometry/TrackerCommonData/data/tiblayer2.xml', 'Geometry/TrackerCommonData/data/tiblayer3.xml', 'Geometry/TrackerCommonData/data/tib.xml', - 'Geometry/TrackerCommonData/data/tidmaterial/2017ZeroMaterial/v1/tidmaterial.xml', 'Geometry/TrackerCommonData/data/tidmodpar.xml', 'Geometry/TrackerCommonData/data/tidmodule0.xml', 'Geometry/TrackerCommonData/data/tidmodule0r.xml', @@ -413,7 +1255,6 @@ 'Geometry/TrackerCommonData/data/tibtidservices.xml', 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', - 'Geometry/TrackerCommonData/data/tobmaterial/2017ZeroMaterial/v1/tobmaterial.xml', 'Geometry/TrackerCommonData/data/tobmodpar.xml', 'Geometry/TrackerCommonData/data/tobmodule0.xml', 'Geometry/TrackerCommonData/data/tobmodule2.xml', @@ -440,8 +1281,7 @@ 'Geometry/TrackerCommonData/data/tobrod5l.xml', 'Geometry/TrackerCommonData/data/tobrod5h.xml', 'Geometry/TrackerCommonData/data/tobrod5.xml', - 'Geometry/TrackerCommonData/data/v2/tob.xml', - 'Geometry/TrackerCommonData/data/tecmaterial/2017ZeroMaterial/v1/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', 'Geometry/TrackerCommonData/data/tecmodpar.xml', 'Geometry/TrackerCommonData/data/tecmodule0.xml', 'Geometry/TrackerCommonData/data/tecmodule0r.xml', @@ -511,7 +1351,8 @@ 'Geometry/TrackerCommonData/data/trackerother.xml', 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', - 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', + 'Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml', 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', ], @@ -527,14 +1368,21 @@ 'trackerGeometry.applyAlignment = cms.bool(False)', ], }, - "T3" : { + "T7" : { 1 : [ 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', - 'Geometry/TrackerCommonData/data/pixfwdMaterials/2021/v2/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/tecmaterial.xml', 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', @@ -544,22 +1392,19 @@ 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarmaterial.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer3.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbar.xml', 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', - 'Geometry/TrackerCommonData/data/tibtidcommonmaterial/2021/v1/tibtidcommonmaterial.xml', - 'Geometry/TrackerCommonData/data/tibmaterial/2021/v1/tibmaterial.xml', 'Geometry/TrackerCommonData/data/tibmodpar.xml', 'Geometry/TrackerCommonData/data/tibmodule0.xml', 'Geometry/TrackerCommonData/data/tibmodule0a.xml', @@ -592,7 +1437,6 @@ 'Geometry/TrackerCommonData/data/tiblayer2.xml', 'Geometry/TrackerCommonData/data/tiblayer3.xml', 'Geometry/TrackerCommonData/data/tib.xml', - 'Geometry/TrackerCommonData/data/tidmaterial/2021/v1/tidmaterial.xml', 'Geometry/TrackerCommonData/data/tidmodpar.xml', 'Geometry/TrackerCommonData/data/tidmodule0.xml', 'Geometry/TrackerCommonData/data/tidmodule0r.xml', @@ -615,7 +1459,6 @@ 'Geometry/TrackerCommonData/data/tibtidservices.xml', 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', - 'Geometry/TrackerCommonData/data/tobmaterial/2021/v1/tobmaterial.xml', 'Geometry/TrackerCommonData/data/tobmodpar.xml', 'Geometry/TrackerCommonData/data/tobmodule0.xml', 'Geometry/TrackerCommonData/data/tobmodule2.xml', @@ -642,8 +1485,7 @@ 'Geometry/TrackerCommonData/data/tobrod5l.xml', 'Geometry/TrackerCommonData/data/tobrod5h.xml', 'Geometry/TrackerCommonData/data/tobrod5.xml', - 'Geometry/TrackerCommonData/data/v2/tob.xml', - 'Geometry/TrackerCommonData/data/tecmaterial/2021/v1/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', 'Geometry/TrackerCommonData/data/tecmodpar.xml', 'Geometry/TrackerCommonData/data/tecmodule0.xml', 'Geometry/TrackerCommonData/data/tecmodule0r.xml', @@ -713,8 +1555,8 @@ 'Geometry/TrackerCommonData/data/trackerother.xml', 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', - 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', - 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI.xml', + 'Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml', 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', ], @@ -730,14 +1572,21 @@ 'trackerGeometry.applyAlignment = cms.bool(False)', ], }, - "T4" : { + "T8" : { 1 : [ 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', - 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/tecmaterial.xml', 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', @@ -747,22 +1596,19 @@ 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', - 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/pixbarmaterial.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer3.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbar.xml', 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', - 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/tibtidcommonmaterial.xml', - 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/tibmaterial.xml', 'Geometry/TrackerCommonData/data/tibmodpar.xml', 'Geometry/TrackerCommonData/data/tibmodule0.xml', 'Geometry/TrackerCommonData/data/tibmodule0a.xml', @@ -795,7 +1641,6 @@ 'Geometry/TrackerCommonData/data/tiblayer2.xml', 'Geometry/TrackerCommonData/data/tiblayer3.xml', 'Geometry/TrackerCommonData/data/tib.xml', - 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/tidmaterial.xml', 'Geometry/TrackerCommonData/data/tidmodpar.xml', 'Geometry/TrackerCommonData/data/tidmodule0.xml', 'Geometry/TrackerCommonData/data/tidmodule0r.xml', @@ -818,7 +1663,6 @@ 'Geometry/TrackerCommonData/data/tibtidservices.xml', 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', - 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/tobmaterial.xml', 'Geometry/TrackerCommonData/data/tobmodpar.xml', 'Geometry/TrackerCommonData/data/tobmodule0.xml', 'Geometry/TrackerCommonData/data/tobmodule2.xml', @@ -845,8 +1689,7 @@ 'Geometry/TrackerCommonData/data/tobrod5l.xml', 'Geometry/TrackerCommonData/data/tobrod5h.xml', 'Geometry/TrackerCommonData/data/tobrod5.xml', - 'Geometry/TrackerCommonData/data/v2/tob.xml', - 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', 'Geometry/TrackerCommonData/data/tecmodpar.xml', 'Geometry/TrackerCommonData/data/tecmodule0.xml', 'Geometry/TrackerCommonData/data/tecmodule0r.xml', @@ -916,7 +1759,8 @@ 'Geometry/TrackerCommonData/data/trackerother.xml', 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', - 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', + 'Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml', 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', ], @@ -940,15 +1784,15 @@ "default" : 1, "C1" : { 1 : [ + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/eecon.xml', + 'Geometry/EcalCommonData/data/escon.xml', 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', 'Geometry/EcalCommonData/data/ebalgo.xml', - 'Geometry/EcalCommonData/data/ebcon.xml', 'Geometry/EcalCommonData/data/ebrot.xml', - 'Geometry/EcalCommonData/data/eecon.xml', 'Geometry/EcalCommonData/data/eefixed/2021/v1/eefixed.xml', 'Geometry/EcalCommonData/data/eehier.xml', 'Geometry/EcalCommonData/data/eealgo.xml', - 'Geometry/EcalCommonData/data/escon.xml', 'Geometry/EcalCommonData/data/esalgo.xml', 'Geometry/EcalCommonData/data/eeF.xml', 'Geometry/EcalCommonData/data/eeB.xml', @@ -958,22 +1802,22 @@ 'Geometry/HcalCommonData/data/hcalcablealgo.xml', 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', - 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', - 'Geometry/HcalCommonData/data/hcalSimNumbering/2021/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/2021/v1/hcalSimNumbering.xml', 'Geometry/HcalCommonData/data/hcalRecNumbering/2021/hcalRecNumbering.xml', ], 3 : [ 'Geometry/EcalSimData/data/ecalsens.xml', - 'Geometry/HcalCommonData/data/hcalsenspmf.xml', + 'Geometry/HcalCommonData/data/hcalsens/2021/v1/hcalsenspmf.xml', 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2021/v1/CaloUtil.xml', ], 4 : [ - 'Geometry/HcalSimData/data/HcalProdCuts.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2021/v2/HcalProdCuts.xml', 'Geometry/EcalSimData/data/EcalProdCuts.xml', 'Geometry/EcalSimData/data/ESProdCuts.xml', ], @@ -1083,7 +1927,7 @@ 'Geometry/ForwardSimData/data/zdcsens.xml', ], 4 : [ - 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml', 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', ], "reco" :[ @@ -1125,8 +1969,8 @@ 'Geometry/VeryForwardData/data/RP_Box/RP_Box_123.xml', 'Geometry/VeryForwardData/data/RP_Box/RP_Box_124.xml', 'Geometry/VeryForwardData/data/RP_Box/RP_Box_125.xml', - 'Geometry/VeryForwardData/data/RP_Hybrid.xml', - 'Geometry/VeryForwardData/data/RP_Materials.xml', + 'Geometry/VeryForwardData/data/RP_Hybrid/v1/RP_Hybrid.xml', + 'Geometry/VeryForwardData/data/RP_Materials/v1/RP_Materials.xml', 'Geometry/VeryForwardData/data/RP_Transformations.xml', 'Geometry/VeryForwardData/data/RP_Detectors_Assembly.xml', 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_000.xml', @@ -1228,8 +2072,8 @@ 'Geometry/VeryForwardData/data/RP_Box/RP_Box_123.xml', 'Geometry/VeryForwardData/data/RP_Box/RP_Box_124.xml', 'Geometry/VeryForwardData/data/RP_Box/RP_Box_125.xml', - 'Geometry/VeryForwardData/data/RP_Hybrid.xml', - 'Geometry/VeryForwardData/data/RP_Materials.xml', + 'Geometry/VeryForwardData/data/RP_Hybrid/v1/RP_Hybrid.xml', + 'Geometry/VeryForwardData/data/RP_Materials/v1/RP_Materials.xml', 'Geometry/VeryForwardData/data/RP_Transformations.xml', 'Geometry/VeryForwardData/data/RP_Detectors_Assembly.xml', 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_000.xml', @@ -1300,6 +2144,109 @@ ], "reco" :[ + ], + }, + "P3" : { + 2 : [ + 'Geometry/ForwardCommonData/data/Run2/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/VeryForwardData/data/RP_Box.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_000.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_001.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_002.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_003.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_004.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_005.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_020.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_021.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_022.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_023.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_024.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_025.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_100.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_101.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_102.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_103.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_104.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_105.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_120.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_121.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_122.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_123.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_124.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_125.xml', + 'Geometry/VeryForwardData/data/RP_Hybrid/v1/RP_Hybrid.xml', + 'Geometry/VeryForwardData/data/RP_Materials/v2/RP_Materials.xml', + 'Geometry/VeryForwardData/data/RP_Transformations.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_000.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_001.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_002.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_004.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_005.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_020.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_021.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_022.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_024.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_025.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_100.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_101.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_102.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_104.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_105.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_120.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_121.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_122.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_124.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_125.xml', + 'Geometry/VeryForwardData/data/RP_Device.xml', + 'Geometry/VeryForwardData/data/RP_Vertical_Device.xml', + 'Geometry/VeryForwardData/data/RP_Horizontal_Device.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Right_Station/v1/CTPPS_220_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Left_Station/v1/CTPPS_220_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Right_Station/v1/CTPPS_210_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Left_Station/v1/CTPPS_210_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_Stations_Assembly.xml', + 'Geometry/VeryForwardData/data/CTPPS_Cuts_Per_Region.xml', + 'Geometry/VeryForwardData/data/RP_Sensitive_Dets.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Materials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Transformations.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Parameters.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Station_Parameters.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Horizontal_Pot.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern1_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern2_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern2_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment5.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Detector_Assembly.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Sensitive_Dets_TimingHits.xml', + 'Geometry/VeryForwardData/data/ppstrackerMaterials/v2/ppstrackerMaterials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module/v3/CTPPS_Pixel_Module.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module_2x2/v3/CTPPS_Pixel_Module_2x2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_003.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_023.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_103.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_123.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Sens.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/RP_Dist_Beam_Cent.xml', + ], + "sim" : [ + + ], + "reco" :[ + ], }, } @@ -1307,8 +2254,12 @@ allDicts = [ commonDict, trackerDict, caloDict, muonDict, forwardDict, ppsDict ] detectorVersionDict = { - ("O3","T3","C1","M1","F1","P2") : "2021", - ("O4","T4","C1","M1","F1","P2") : "2021ZeroMaterial", + ("O3","T3","C1","M1","F1","P3") : "2021", + ("O4","T4","C1","M1","F1","P3") : "2021ZeroMaterial", + ("O5","T5","C1","M1","F1","P3") : "2021FlatMinus05Percent", + ("O5","T6","C1","M1","F1","P3") : "2021FlatMinus10Percent", + ("O5","T7","C1","M1","F1","P3") : "2021FlatPlus05Percent", + ("O5","T8","C1","M1","F1","P3") : "2021FlatPlus10Percent", } -deprecatedSubdets = set([ "T1", "T2", "O1", "O2", "P1" ]) +deprecatedSubdets = set([ "T1", "T2", "O1", "O2", "P1", "P2" ]) diff --git a/Configuration/Geometry/python/dict2026Geometry.py b/Configuration/Geometry/python/dict2026Geometry.py index 24ac86cb76d1f..b2aa9e7953f2c 100644 --- a/Configuration/Geometry/python/dict2026Geometry.py +++ b/Configuration/Geometry/python/dict2026Geometry.py @@ -221,7 +221,7 @@ 'from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import *', 'trackerGeometry.applyAlignment = cms.bool(False)', ], - "era" : "phase2_tracker, trackingPhase2PU140", + "era" : "phase2_tracker, phase2_squarePixels, trackingPhase2PU140", }, "T23" : { 1 : [ @@ -255,6 +255,41 @@ 'from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import *', 'trackerGeometry.applyAlignment = cms.bool(False)', ], + "era" : "phase2_tracker, phase2_3DPixels, trackingPhase2PU140", + }, + "T24" : { + 1 : [ + 'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/pixbar.xml', + 'Geometry/TrackerCommonData/data/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/tracker.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixel.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerStructureTopology.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelsens.xml', + 'Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII/v1/trackingMaterialGroups_ForPhaseII.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + ], + "sim" : [ + 'from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import *', + ], + "reco" : [ + 'from Geometry.CommonTopologies.globalTrackingGeometry_cfi import *', + 'from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import *', + 'from Geometry.TrackerGeometryBuilder.trackerParameters_cff import *', + 'from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import *', + 'from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import *', + 'trackerGeometry.applyAlignment = cms.bool(False)', + ], "era" : "phase2_tracker, trackingPhase2PU140", } } @@ -295,7 +330,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', ], 4 : [ @@ -348,7 +383,7 @@ 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', - 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml', 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/hcalRecNumbering.xml', @@ -373,7 +408,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v5c/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/ForwardSimData/data/hfnosesens.xml', ], @@ -453,7 +488,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', ], 4 : [ @@ -531,7 +566,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v5/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/ForwardSimData/data/hfnosesens.xml', ], @@ -612,7 +647,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', ], 4 : [ @@ -665,7 +700,7 @@ 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', - 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml', 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/hcalRecNumbering.xml', @@ -686,7 +721,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', ], 4 : [ @@ -1238,9 +1273,13 @@ ("O6","T21","C13","M7","F6","I11") : "D70", ("O7","T21","C14","M7","F6","I11") : "D71", ("O5","T21","C11","M6","F4","I12") : "D72", - ("O5","T21","C11","M6","F4","I13") : "D73", ("O7","T21","C14","M9","F6","I11") : "D74", + ("O7","T21","C14","M7","F6","I13") : "D75", + ("O7","T21","C14","M9","F6","I13") : "D76", + ("O7","T24","C14","M9","F6","I13") : "D77", + ("O7","T22","C14","M9","F6","I13") : "D78", + ("O7","T23","C14","M9","F6","I13") : "D79", } -deprecatedDets = set([ "D1", "D2", "D3", "D5", "D6" , "D7", "D4", "D8" , "D9", "D12", "D13", "D15", "D10", "D11", "D14", "D16", "D17", "D18", "D19", "D20", "D21", "D22", "D23", "D24", "D25", "D26", "D27", "D28", "D29", "D30", "D31", "D32", "D33", "D34", "D36", "D37", "D38", "D39", "D40", "D42", "D35", "D41", "D43", "D44", "D45", "D46", "D48", "D47", "D51", "D52", "D53", "D54", "D55", "D56", "D57", "D58", "D59", "D61", "D62", "D63" ]) +deprecatedDets = set([ "D1", "D2", "D3", "D5", "D6" , "D7", "D4", "D8" , "D9", "D12", "D13", "D15", "D10", "D11", "D14", "D16", "D17", "D18", "D19", "D20", "D21", "D22", "D23", "D24", "D25", "D26", "D27", "D28", "D29", "D30", "D31", "D32", "D33", "D34", "D36", "D37", "D38", "D39", "D40", "D42", "D35", "D41", "D43", "D44", "D45", "D46", "D48", "D47", "D51", "D52", "D53", "D54", "D55", "D56", "D57", "D58", "D59", "D61", "D62", "D63", "D73" ]) deprecatedSubdets = set([ "T1", "T2" ,"T3", "T4", "T5", "T6", "T7", "T8", "T9", "T10", "T11", "T12", "T13", "T14", "T16", "T17", "T18", "T19", "T20", "C1", "C2", "C3", "C5", "C7", "M1", "I1", "I2", "I3", "I4", "I6", "I8", "O1", "F1", "C4", "C6", "C8", "M2", "M3", "I5", "I7", "I9", "O2", "O3", "M5" ]) diff --git a/Configuration/ProcessModifiers/python/PixelCPEGeneric_cff.py b/Configuration/ProcessModifiers/python/PixelCPEGeneric_cff.py new file mode 100644 index 0000000000000..5f931ef217364 --- /dev/null +++ b/Configuration/ProcessModifiers/python/PixelCPEGeneric_cff.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +# This modifier is to run the Pixel Generic CPE algorithm in Phase-2 workflows +PixelCPEGeneric = cms.Modifier() diff --git a/Configuration/ProcessModifiers/python/allSonicTriton_cff.py b/Configuration/ProcessModifiers/python/allSonicTriton_cff.py new file mode 100644 index 0000000000000..1de0813bff065 --- /dev/null +++ b/Configuration/ProcessModifiers/python/allSonicTriton_cff.py @@ -0,0 +1,6 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.ProcessModifiers.enableSonicTriton_cff import enableSonicTriton + +# collect all SonicTriton-related process modifiers here +allSonicTriton = cms.ModifierChain(enableSonicTriton) diff --git a/Configuration/ProcessModifiers/python/displacedTrackValidation_cff.py b/Configuration/ProcessModifiers/python/displacedTrackValidation_cff.py new file mode 100644 index 0000000000000..a7a851c69564e --- /dev/null +++ b/Configuration/ProcessModifiers/python/displacedTrackValidation_cff.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +# This modifier turns on the dedicated displaced tracking validation +displacedTrackValidation = cms.Modifier() diff --git a/Configuration/ProcessModifiers/python/displacedTracking_cff.py b/Configuration/ProcessModifiers/python/displacedTracking_cff.py new file mode 100644 index 0000000000000..fa5f808b6c481 --- /dev/null +++ b/Configuration/ProcessModifiers/python/displacedTracking_cff.py @@ -0,0 +1,5 @@ +import FWCore.ParameterSet.Config as cms + +# This modifier is for activating displacedGeneralStep step for phase1 tracking + +displacedTracking = cms.Modifier() diff --git a/Configuration/ProcessModifiers/python/enableSonicTriton_cff.py b/Configuration/ProcessModifiers/python/enableSonicTriton_cff.py new file mode 100644 index 0000000000000..8034f48d20ef4 --- /dev/null +++ b/Configuration/ProcessModifiers/python/enableSonicTriton_cff.py @@ -0,0 +1,3 @@ +import FWCore.ParameterSet.Config as cms + +enableSonicTriton = cms.Modifier() diff --git a/Configuration/ProcessModifiers/python/fineCalo_cff.py b/Configuration/ProcessModifiers/python/fineCalo_cff.py new file mode 100644 index 0000000000000..f838de53a6424 --- /dev/null +++ b/Configuration/ProcessModifiers/python/fineCalo_cff.py @@ -0,0 +1,3 @@ +import FWCore.ParameterSet.Config as cms + +fineCalo = cms.Modifier() diff --git a/Configuration/ProcessModifiers/python/mlpf_cff.py b/Configuration/ProcessModifiers/python/mlpf_cff.py new file mode 100644 index 0000000000000..d1cedca2a2e53 --- /dev/null +++ b/Configuration/ProcessModifiers/python/mlpf_cff.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +# This modifier is for activating MLPF reconstruction in 2021 +mlpf = cms.Modifier() diff --git a/Configuration/ProcessModifiers/python/phase2_PixelCPEGeneric_cff.py b/Configuration/ProcessModifiers/python/phase2_PixelCPEGeneric_cff.py deleted file mode 100644 index 699fd95523c3e..0000000000000 --- a/Configuration/ProcessModifiers/python/phase2_PixelCPEGeneric_cff.py +++ /dev/null @@ -1,4 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# This modifier is to run the Pixel Generic CPE algorithm in Phase-2 workflows -phase2_PixelCPEGeneric = cms.Modifier() diff --git a/Configuration/ProcessModifiers/python/seedingDeepCore_cff.py b/Configuration/ProcessModifiers/python/seedingDeepCore_cff.py new file mode 100644 index 0000000000000..9ec8ae8bcdcd9 --- /dev/null +++ b/Configuration/ProcessModifiers/python/seedingDeepCore_cff.py @@ -0,0 +1,5 @@ +import FWCore.ParameterSet.Config as cms + +# This modifier is for activating DeepCore seeding for the JetCore tracking iteration + +seedingDeepCore = cms.Modifier() diff --git a/Configuration/PyReleaseValidation/README.md b/Configuration/PyReleaseValidation/README.md new file mode 100644 index 0000000000000..bc96f79aa2f69 --- /dev/null +++ b/Configuration/PyReleaseValidation/README.md @@ -0,0 +1,61 @@ +# runTheMatrix.py + +## Upgrade workflows + +To list the upgrade workflows: +``` +runTheMatrix.py --what upgrade -n +``` + +To make an upgrade workflow visible to the regular matrix, add it to: +* [relval_2017.py](./python/relval_2017.py) (for Run 2 and Run 3) +* [relval_2026.py](./python/relval_2026.py) (for Phase 2) + +All workflows in the regular matrix can be run in IB tests, +so this should only be done for fully functional workflows. + +To add a workflow to the PR tests, modify the `'limited'` list in +[runTheMatrix.py](./scripts/runTheMatrix.py). +(This should be done sparingly to limit the computational burden of PR tests.) + +### Special workflow offsets + +Special workflows are defined in [upgradeWorkflowComponents.py](./python/upgradeWorkflowComponents.py). +Each workflow must have a unique offset. +The base `UpgradeWorkflow` class can be extended to implement a particular special workflow, +specifying which steps to modify and for which conditions to create the workflow. + +The offsets currently in use are: +* 0.1: Tracking-only validation and DQM +* 0.2: Tracking Run-2 era, `Run2_2017_trackingRun2` +* 0.3: 0.1 + 0.2 +* 0.4: LowPU tracking era, `Run2_2017_trackingLowPU` +* 0.5: Pixel tracking only + 0.1 +* 0.6: HE Collapse (old depth segmentation for 2018) +* 0.7: trackingMkFit modifier +* 0.8: BPH Parking (Run-2) +* 0.9: Vector hits +* 0.12: Neutron background +* 0.13: MLPF algorithm +* 0.15: JME NanoAOD +* 0.17: Run-3 deep core seeding for JetCore iteration +* 0.21: Production-like sequence +* 0.24: 0 Tesla (Run-2, Run-3) +* 0.61: `phase2_ecal_devel` era +* 0.91: Track DNN modifier +* 0.97: Premixing stage1 +* 0.98: Premixing stage2 +* 0.99: Premixing stage1+stage2 +* 0.999: 0.99 with Phase-2 premixing with PU50 +* 0.9821: Production-like premixing stage2 +* 0.9921: Production-like premixing stage1+stage2 +* 0.911: DD4Hep +* 0.101: Phase-2 aging, 1000fb-1 +* 0.103: Phase-2 aging, 3000fb-1 +* 0.501: Patatrack, pixel only CPU +* 0.502: Patatrack, pixel only GPU +* 0.511: Patatrack, ECAL only CPU +* 0.512: Patatrack, ECAL only GPU +* 0.521: Patatrack, HCAL only CPU +* 0.522: Patatrack, HCAL only GPU +* 0.9001: Sonic Triton diff --git a/Configuration/PyReleaseValidation/python/MatrixReader.py b/Configuration/PyReleaseValidation/python/MatrixReader.py index e7a71eecb50e4..e67034266b47f 100644 --- a/Configuration/PyReleaseValidation/python/MatrixReader.py +++ b/Configuration/PyReleaseValidation/python/MatrixReader.py @@ -48,6 +48,7 @@ def reset(self, what='all'): 'relval_production': 'prod-' , 'relval_ged': 'ged-', 'relval_upgrade':'upg-', + 'relval_gpu':'gpu-', 'relval_2017':'2017-', 'relval_2026':'2026-', 'relval_identity':'id-', @@ -63,6 +64,7 @@ def reset(self, what='all'): 'relval_production', 'relval_ged', 'relval_upgrade', + 'relval_gpu', 'relval_2017', 'relval_2026', 'relval_identity', @@ -77,6 +79,7 @@ def reset(self, what='all'): 'relval_production':True, 'relval_ged':True, 'relval_upgrade':False, + 'relval_gpu':False, 'relval_2017':True, 'relval_2026':True, 'relval_identity':False, diff --git a/Configuration/PyReleaseValidation/python/MatrixUtil.py b/Configuration/PyReleaseValidation/python/MatrixUtil.py index eaccc918d574e..d3cd4862c0de9 100644 --- a/Configuration/PyReleaseValidation/python/MatrixUtil.py +++ b/Configuration/PyReleaseValidation/python/MatrixUtil.py @@ -117,7 +117,7 @@ def __init__(self,dataSet,dataSetParent='',label='',run=[],ls={},files=1000,even self.dataSetParent = dataSetParent def das(self, das_options, dataset): - if len(self.run) is not 0 or self.ls: + if len(self.run) != 0 or self.ls: queries = self.queries(dataset)[:3] if len(self.run) != 0: command = ";".join(["dasgoclient %s --query '%s'" % (das_options, query) for query in queries]) @@ -184,7 +184,7 @@ def queries(self, dataset): site = " site=%s" % os.environ["CMSSW_DAS_QUERY_SITES"] else: site = "" - if len(self.run) is not 0: + if len(self.run) != 0: return ["file {0}={1} run={2}{3}".format(query_by, query_source, query_run, site) for query_run in self.run] #return ["file {0}={1} run={2} ".format(query_by, query_source, query_run) for query_run in self.run] else: diff --git a/Configuration/PyReleaseValidation/python/relval_2017.py b/Configuration/PyReleaseValidation/python/relval_2017.py index d7218ad988efd..193ab79bcd384 100644 --- a/Configuration/PyReleaseValidation/python/relval_2017.py +++ b/Configuration/PyReleaseValidation/python/relval_2017.py @@ -24,17 +24,21 @@ # (HE collapse: TTbar, TTbar PU, TTbar design) # (ParkingBPH: TTbar) # (TTbar PU with JME NanoAOD) -# (Patatrack pixel-only: ZMM - on CPU, on GPU, both, auto) -# (Patatrack pixel-only: TTbar - on CPU, on GPU, both, auto) -# (Patatrack ECAL-only: TTbar - on CPU, on GPU, both, auto) -# (Patatrack HCAL-only: TTbar - on CPU, on GPU, both, auto) -# 2021 (ZMM, TTbar, ZEE, MinBias, TTbar PU, TTbar PU premix, ZEE PU, TTbar design) -# (TTbar trackingOnly, pixelTrackingOnly, trackingMkFit) -# (Patatrack pixel-only: ZMM - on CPU, on GPU, both, auto) -# (Patatrack pixel-only: TTbar - on CPU, on GPU, both, auto) -# (Patatrack ECAL-only: TTbar - on CPU, on GPU, both, auto) -# (Patatrack HCAL-only: TTbar - on CPU, on GPU, both, auto) +# (Patatrack pixel-only: ZMM - on CPU) +# (Patatrack pixel-only: TTbar - on CPU) +# (Patatrack ECAL-only: TTbar - on CPU) +# (Patatrack HCAL-only: TTbar - on CPU) +# 2021 (DD4HEP: TTbar, ZMM) +# (ele guns 10, 35, 1000; pho guns 10, 35; mu guns 1, 10, 100, 1000, QCD 3TeV, QCD Flat) +# (ZMM, TTbar, ZEE, MinBias, TTbar PU, TTbar PU premix, ZEE PU, TTbar design) +# (TTbar trackingOnly, pixelTrackingOnly, trackingMkFit, trackdnn) +# (Patatrack pixel-only: ZMM - on CPU) +# (Patatrack pixel-only: TTbar - on CPU) +# (Patatrack ECAL-only: TTbar - on CPU) +# (Patatrack HCAL-only: TTbar - on CPU) # (TTbar 0T, TTbar PU 0T) +# (TTbar PU MLPF) +# (QCD 1.8TeV DeepCore) # 2023 (TTbar, TTbar PU, TTbar PU premix) # 2024 (TTbar, TTbar PU, TTbar PU premix) numWFIB = [10001.0,10002.0,10003.0,10004.0,10005.0,10006.0,10007.0,10008.0,10009.0,10059.0,10071.0, @@ -47,20 +51,23 @@ 10824.6,11024.6,11224.6, 10824.8, 11024.15, - 10842.501,10842.502, # 10842.503,10842.504, - 10824.501,10824.502, # 10824.503,10824.504, - 10824.511,10824.512, # 10824.513,10824.514, - 10824.521,10824.522, # 10824.523,10824.524, - 11624.911, 11642.911, + 10842.501, + 10824.501, + 10824.511, + 10824.521, + 11634.911, 11650.911, + 11601.0,11602.0,11603.0,11604.0,11605.0,11606.0,11607.0,11608.0,11609.0,11630.0,11643.0, 11650.0,11634.0,11646.0,11640.0,11834.0,11834.99,11846.0,12024.0, - 11634.1,11634.5,11634.7, - 11650.501,11650.502, # 11650.503,11650.504, - 11634.501,11634.502, # 11634.503,11634.504, - 11634.511,11634.512, # 11634.513,11634.514, - 11634.521,11634.522, # 11634.523,11634.524 + 11634.1,11634.5,11634.7,11634.91, + 11650.501, + 11634.501, + 11634.511, + 11634.521, 11634.24,11834.24, + 11834.13, + 11723.17, 12434.0,12634.0,12634.99, - 12834.0,13034.0,13034.99] + 12834.0,13034.0,13034.99,] for numWF in numWFIB: if not numWF in _upgrade_workflows: continue workflows[numWF] = _upgrade_workflows[numWF] diff --git a/Configuration/PyReleaseValidation/python/relval_2026.py b/Configuration/PyReleaseValidation/python/relval_2026.py index 5d18d5f19e907..5c9d77f537d60 100644 --- a/Configuration/PyReleaseValidation/python/relval_2026.py +++ b/Configuration/PyReleaseValidation/python/relval_2026.py @@ -17,7 +17,7 @@ numWFIB.extend([23234.0]) #2026D49 numWFIB.extend([23461.97]) #2026D49 premixing stage1 (NuGun+PU) numWFIB.extend([23434.99,23434.999]) #2026D49 premixing combined stage1+stage2 (ttbar+PU200, ttbar+PU50 for PR test) -numWFIB.extend([23234.21,23434.21]) #2026D49 prodlike, prodlike PU +numWFIB.extend([23234.21,23434.21,23434.9921]) #2026D49 prodlike, prodlike PU, prodlike premix stage1+stage2 numWFIB.extend([23234.103]) #2026D49 aging numWFIB.extend([23234.9]) #2026D49 vector hits numWFIB.extend([28234.0]) #2026D60 @@ -30,8 +30,13 @@ numWFIB.extend([32234.0]) #2026D70 numWFIB.extend([32634.0]) #2026D71 numWFIB.extend([33034.0]) #2026D72 -numWFIB.extend([33434.0]) #2026D73 numWFIB.extend([33834.0]) #2026D74 +numWFIB.extend([34234.0]) #2026D75 +numWFIB.extend([34634.0]) #2026D76 +numWFIB.extend([34834.999]) #2026D76 premixing combined stage1+stage2 (ttbar+PU50 for PR test) +numWFIB.extend([35034.0]) #2026D77 +numWFIB.extend([35434.0]) #2026D78 +numWFIB.extend([35834.0]) #2026D79 for numWF in numWFIB: workflows[numWF] = _upgrade_workflows[numWF] diff --git a/Configuration/PyReleaseValidation/python/relval_gpu.py b/Configuration/PyReleaseValidation/python/relval_gpu.py new file mode 100644 index 0000000000000..4e49467a0e2e8 --- /dev/null +++ b/Configuration/PyReleaseValidation/python/relval_gpu.py @@ -0,0 +1,48 @@ + +# import the definition of the steps and input files: +from Configuration.PyReleaseValidation.relval_steps import * + +# here only define the workflows as a combination of the steps defined above: +workflows = Matrix() + +# each workflow defines a name and a list of steps to be done. +# if no explicit name/label given for the workflow (first arg), +# the name of step1 will be used + +from Configuration.PyReleaseValidation.relval_upgrade import workflows as _upgrade_workflows + +#just define all of them + +#WFs to run in IB: +# mc 2018 (Patatrack pixel-only: ZMM - on GPU, both CPU and GPU, auto) +# (Patatrack pixel-only: TTbar - on GPU, both CPU and GPU, auto) +# (Patatrack ECAL-only: TTbar - on GPU, both CPU and GPU, auto) +# (Patatrack HCAL-only: TTbar - on GPU, both CPU and GPU, auto) +# mc 2021 (Patatrack pixel-only: ZMM - on GPU, both CPU and GPU, auto) +# (Patatrack pixel-only: TTbar - on GPU, both CPU and GPU, auto) +# (Patatrack ECAL-only: TTbar - on GPU, both CPU and GPU, auto) +# (Patatrack HCAL-only: TTbar - on GPU, both CPU and GPU, auto) +numWFIB = [ + 10842.502, # 10842.503,10842.504, + 10824.502, # 10824.503,10824.504, + 10824.512, # 10824.513,10824.514, + 10824.522, # 10824.523,10824.524, + 11650.502, # 11650.503,11650.504, + 11634.502, # 11634.503,11634.504, + 11634.512, # 11634.513,11634.514, + 11634.522, # 11634.523,11634.524 + ] +for numWF in numWFIB: + if not numWF in _upgrade_workflows: continue + workflows[numWF] = _upgrade_workflows[numWF] + +# data 2018 (Patatrack pixel-only: RunHLTPhy2018D, RunJetHT2018D on GPU) +# (Patatrack ECAL-only: RunHLTPhy2018D, RunJetHT2018D on GPU) +# (Patatrack HCAL-only: RunHLTPhy2018D, RunJetHT2018D on GPU) + +workflows[136.885502] = ['',['RunHLTPhy2018D','HLTDR2_2018','RECODR2_2018reHLT_Patatrack_PixelOnlyGPU','HARVEST2018_pixelTrackingOnly']] +workflows[136.888502] = ['',['RunJetHT2018D','HLTDR2_2018','RECODR2_2018reHLT_Patatrack_PixelOnlyGPU','HARVEST2018_pixelTrackingOnly']] +workflows[136.885512] = ['',['RunHLTPhy2018D','HLTDR2_2018','RECODR2_2018reHLT_ECALOnlyGPU','HARVEST2018_ECALOnly']] +workflows[136.888512] = ['',['RunJetHT2018D','HLTDR2_2018','RECODR2_2018reHLT_ECALOnlyGPU','HARVEST2018_ECALOnly']] +workflows[136.885522] = ['',['RunHLTPhy2018D','HLTDR2_2018','RECODR2_2018reHLT_HCALOnlyGPU','HARVEST2018_HCALOnly']] +workflows[136.888522] = ['',['RunJetHT2018D','HLTDR2_2018','RECODR2_2018reHLT_HCALOnlyGPU','HARVEST2018_HCALOnly']] diff --git a/Configuration/PyReleaseValidation/python/relval_premix.py b/Configuration/PyReleaseValidation/python/relval_premix.py index 29484ea268ee4..2493f28c2b1f4 100644 --- a/Configuration/PyReleaseValidation/python/relval_premix.py +++ b/Configuration/PyReleaseValidation/python/relval_premix.py @@ -48,6 +48,7 @@ workflows[250202.18]=['',['TTbar_13UP18','DIGIPRMXUP18_PU25','RECOPRMXUP18_PU25','HARVESTUP18_PU25']] workflows[250202.181]=['',['TTbar_13UP18','PREMIXUP18_PU25','DIGIPRMXLOCALUP18_PU25','RECOPRMXUP18_PU25','HARVESTUP18_PU25']] workflows[250202.182]=['',['TTbar_13UP18_RD','DIGIPRMXUP18_PU25_RD','RECOPRMXUP18_PU25_RD','HARVESTUP18_PU25_RD']] +workflows[250202.183]=['',['TTbar_13UP18_RD','DIGIPRMXUP18_PU25_RD_IB','RECOPRMXUP18_PU25_RD','HARVESTUP18_PU25_RD']] workflows[250203.18]=['',['H125GGgluonfusion_13UP18','DIGIPRMXUP18_PU25','RECOPRMXUP18_PU25','HARVESTUP18_PU25']] workflows[250204.18]=['',['QQH1352T_13UP18','DIGIPRMXUP18_PU25','RECOPRMXUP18_PU25','HARVESTUP18_PU25']] workflows[250205.18]=['',['ZTT_13UP18','DIGIPRMXUP18_PU25','RECOPRMXUP18_PU25','HARVESTUP18_PU25']] diff --git a/Configuration/PyReleaseValidation/python/relval_standard.py b/Configuration/PyReleaseValidation/python/relval_standard.py index 343867a0a0522..e3abf667d608e 100644 --- a/Configuration/PyReleaseValidation/python/relval_standard.py +++ b/Configuration/PyReleaseValidation/python/relval_standard.py @@ -39,8 +39,8 @@ #workflows.addOverride(1303.17,overridesEv5) #####Prod2018 with concurrentlumi -workflows[1302.181] = ['', ['ProdTTbar_13UP18ml','DIGIUP18PROD1ml','RECOPRODUP18ml','MINIAODMCUP18ml','NANOPRODUP18ml']] -workflows[1304.181] = ['', ['ProdZEE_13UP18ml','DIGIUP18PROD1ml','RECOPRODUP18ml','MINIAODMCUP18ml','NANOPRODUP18ml']] +workflows[1302.181] = ['', ['ProdTTbar_13UP18ml','DIGIUP18PROD1','RECOPRODUP18','MINIAODMCUP18','NANOPRODUP18']] +workflows[1304.181] = ['', ['ProdZEE_13UP18ml','DIGIUP18PROD1','RECOPRODUP18','MINIAODMCUP18','NANOPRODUP18']] ### data ### workflows[4.5] = ['', ['RunCosmicsA','RECOCOSD','ALCACOSD','HARVESTDC']] @@ -362,6 +362,7 @@ ### NANOAOD wf on 2018 prompt reco MINIADD workflows[136.8521] = ['',['RunJetHT2018A_nano','NANOEDM2018_102Xv1','HARVESTNANOAOD2018_102Xv1']] workflows[136.8522] = ['',['RunJetHT2018A_nanoUL','NANOEDM2018_106Xv1','HARVESTNANOAOD2018_106Xv1']] +workflows[136.8523] = ['',['RunJetHT2018C_nanoULremini','NANOEDM2018_106Xv2','HARVESTNANOAOD2018_106Xv2']] ### run 2018B ### workflows[136.861] = ['',['RunHLTPhy2018B','HLTDR2_2018','RECODR2_2018reHLT_Offline','HARVEST2018']] @@ -414,33 +415,27 @@ ### run 2018D pixel tracks ### workflows[136.8855] = ['',['RunHLTPhy2018D','HLTDR2_2018','RECODR2_2018reHLT_Prompt_pixelTrackingOnly','HARVEST2018_pixelTrackingOnly']] workflows[136.885501] = ['',['RunHLTPhy2018D','HLTDR2_2018','RECODR2_2018reHLT_Patatrack_PixelOnlyCPU','HARVEST2018_pixelTrackingOnly']] -workflows[136.885502] = ['',['RunHLTPhy2018D','HLTDR2_2018','RECODR2_2018reHLT_Patatrack_PixelOnlyGPU','HARVEST2018_pixelTrackingOnly']] workflows[136.8885] = ['',['RunJetHT2018D','HLTDR2_2018','RECODR2_2018reHLT_Prompt_pixelTrackingOnly','HARVEST2018_pixelTrackingOnly']] workflows[136.888501] = ['',['RunJetHT2018D','HLTDR2_2018','RECODR2_2018reHLT_Patatrack_PixelOnlyCPU','HARVEST2018_pixelTrackingOnly']] -workflows[136.888502] = ['',['RunJetHT2018D','HLTDR2_2018','RECODR2_2018reHLT_Patatrack_PixelOnlyGPU','HARVEST2018_pixelTrackingOnly']] ### run 2018D ECAL-only ### workflows[136.885511] = ['',['RunHLTPhy2018D','HLTDR2_2018','RECODR2_2018reHLT_ECALOnlyCPU','HARVEST2018_ECALOnly']] -workflows[136.885512] = ['',['RunHLTPhy2018D','HLTDR2_2018','RECODR2_2018reHLT_ECALOnlyGPU','HARVEST2018_ECALOnly']] workflows[136.888511] = ['',['RunJetHT2018D','HLTDR2_2018','RECODR2_2018reHLT_ECALOnlyCPU','HARVEST2018_ECALOnly']] -workflows[136.888512] = ['',['RunJetHT2018D','HLTDR2_2018','RECODR2_2018reHLT_ECALOnlyGPU','HARVEST2018_ECALOnly']] ### run 2018D HCAL-only ### workflows[136.885521] = ['',['RunHLTPhy2018D','HLTDR2_2018','RECODR2_2018reHLT_HCALOnlyCPU','HARVEST2018_HCALOnly']] -workflows[136.885522] = ['',['RunHLTPhy2018D','HLTDR2_2018','RECODR2_2018reHLT_HCALOnlyGPU','HARVEST2018_HCALOnly']] workflows[136.888521] = ['',['RunJetHT2018D','HLTDR2_2018','RECODR2_2018reHLT_HCALOnlyCPU','HARVEST2018_HCALOnly']] -workflows[136.888522] = ['',['RunJetHT2018D','HLTDR2_2018','RECODR2_2018reHLT_HCALOnlyGPU','HARVEST2018_HCALOnly']] # multi-run harvesting workflows[137.8] = ['',['RunEGamma2018C','HLTDR2_2018','RECODR2_2018reHLT_skimEGamma_Offline_L1TEgDQM', 'RunEGamma2018D','HLTDR2_2018','RECODR2_2018reHLT_skimEGamma_Prompt_L1TEgDQM','HARVEST2018_L1TEgDQM_MULTIRUN']] ### LS2 - MWGR ### -workflows[138.1] = ['',['RunCosmics2020GEM','RECOCOSDRUN3','ALCACOSDRUN3','HARVESTDCRUN3']] +workflows[138.1] = ['',['RunCosmics2020','RECOCOSDRUN3','ALCACOSDRUN3','HARVESTDCRUN3']] workflows[138.2] = ['',['RunCosmics2020','RECOCOSDEXPRUN3','ALCACOSDEXPRUN3','HARVESTDCEXPRUN3']] #### Test of lumi section boundary crossing with run2 2018D #### -workflows[136.8861] = ['',['RunEGamma2018Dml1','HLTDR2_2018ml','RECODR2_2018reHLT_skimEGamma_Prompt_L1TEgDQMml','HARVEST2018_L1TEgDQM_Prompt']] -workflows[136.8862] = ['',['RunEGamma2018Dml2','HLTDR2_2018ml','RECODR2_2018reHLT_skimEGamma_Prompt_L1TEgDQMml','HARVEST2018_L1TEgDQM_Prompt']] +workflows[136.8861] = ['',['RunEGamma2018Dml1','HLTDR2_2018ml','RECODR2_2018reHLT_skimEGamma_Prompt_L1TEgDQM','HARVEST2018_L1TEgDQM_Prompt']] +workflows[136.8862] = ['',['RunEGamma2018Dml2','HLTDR2_2018ml','RECODR2_2018reHLT_skimEGamma_Prompt_L1TEgDQM','HARVEST2018_L1TEgDQM_Prompt']] ### fastsim ### workflows[5.1] = ['TTbar', ['TTbarFS','HARVESTFS']] @@ -679,7 +674,7 @@ workflows[1363.18] = ['', ['VBFHToBB_M125_Pow_py8_Evt_13UP18','DIGIUP18','RECOUP18','HARVESTUP18','NANOUP18']] #2018 workflows starting from gridpacks LHE generation with multiple concurrent lumi sections -workflows[1361.181] = ['', ['GluGluHToZZTo4L_M125_Pow_py8_Evt_13UP18ml','DIGIUP18ml','RECOUP18ml','HARVESTUP18','NANOUP18ml']] +workflows[1361.181] = ['', ['GluGluHToZZTo4L_M125_Pow_py8_Evt_13UP18ml','DIGIUP18','RECOUP18','HARVESTUP18','NANOUP18']] # fullSim 13TeV normal workflows starting from pLHE workflows[1370] = ['', ['GluGluHToGG_M125_Pow_MINLO_NNLOPS_py8_13','Hadronizer_TuneCUETP8M1_13TeV_powhegEmissionVeto_2p_HToGG_M125_13','DIGIUP15','RECOUP15','HARVESTUP15','NANOUP15Had']] @@ -705,8 +700,6 @@ workflows[158.1] = ['',['QCD_Pt_80_120_13_HI','DIGIHI2018PPRECO','RECOHI2018PPRECO','HARVESTHI2018PPRECO']] workflows[158.2] = ['',['PhotonJets_Pt_10_13_HI','DIGIHI2018PPRECO','RECOHI2018PPRECO','HARVESTHI2018PPRECO']] workflows[158.3] = ['',['ZEEMM_13_HI','DIGIHI2018PPRECO','RECOHI2018PPRECO','HARVESTHI2018PPRECO']] -# 158.0 with multiple concurrent lumi sections -workflows[158.181] = ['',['HydjetQ_B12_5020GeV_2018_ppReco_ml','DIGIHI2018PPRECOml','RECOHI2018PPRECOml','ALCARECOHI2018PPRECOml','HARVESTHI2018PPRECO']] workflows[159] = ['',['HydjetQ_B12_5020GeV_2021_ppReco','DIGIHI2021PPRECO','RECOHI2021PPRECOMB','ALCARECOHI2021PPRECO','HARVESTHI2021PPRECO']] workflows[159.1] = ['',['QCD_Pt_80_120_14_HI_2021','DIGIHI2021PPRECO','RECOHI2021PPRECO','HARVESTHI2021PPRECO']] workflows[159.2] = ['',['PhotonJets_Pt_10_14_HI_2021','DIGIHI2021PPRECO','RECOHI2021PPRECO','HARVESTHI2021PPRECO']] diff --git a/Configuration/PyReleaseValidation/python/relval_steps.py b/Configuration/PyReleaseValidation/python/relval_steps.py index 2c1cc0df069c2..3556eda005ada 100644 --- a/Configuration/PyReleaseValidation/python/relval_steps.py +++ b/Configuration/PyReleaseValidation/python/relval_steps.py @@ -6,10 +6,6 @@ from Configuration.AlCa.autoPCL import autoPCL from .upgradeWorkflowComponents import step3_trackingOnly -concurrentLumis = {'--nStreams': 4, - '--nConcurrentLumis': 2, - } - # step1 gensim: for run1 step1Defaults = {'--relval' : None, # need to be explicitly set '-s' : 'GEN,SIM', @@ -459,6 +455,8 @@ steps['RunDisplacedJet2018C']={'INPUT':InputInfo(dataSet='/DisplacedJet/Run2018C-v1/RAW',label='2018C',events=100000,location='STD', ls=Run2018C)} steps['RunCharmonium2018C']={'INPUT':InputInfo(dataSet='/Charmonium/Run2018C-v1/RAW',label='2018C',events=100000,location='STD', ls=Run2018C)} +steps['RunJetHT2018C_nanoULremini']={'INPUT':InputInfo(dataSet='/JetHT/Run2018C-UL2018_MiniAODv2-v1/MINIAOD',label='2018C',events=100000,location='STD', ls=Run2018C)} + #### run2 2018D #### Run2018D={320822: [[1, 100]]} steps['RunHLTPhy2018D']={'INPUT':InputInfo(dataSet='/HLTPhysics/Run2018D-v1/RAW',label='2018D',events=100000,location='STD', ls=Run2018D)} @@ -494,9 +492,8 @@ steps['RunCosmics2015C']={'INPUT':InputInfo(dataSet='/Cosmics/Run2015C-v1/RAW',label='2015C',run=[256259],events=100000,location='STD')} steps['RunCosmics2016B']={'INPUT':InputInfo(dataSet='/Cosmics/Run2016B-v1/RAW',label='2016B',run=[272133],events=100000,location='STD')} -### LS2 - MWGR ### -steps['RunCosmics2020']={'INPUT':InputInfo(dataSet='/ExpressCosmics/Commissioning2019-Express-v1/FEVT',label='2020GR0',run=[334393],events=100000,location='STD')} -steps['RunCosmics2020GEM']={'INPUT':InputInfo(dataSet='/ExpressCosmics/Commissioning2020-Express-v1/FEVT',label='2020GR4',run=[337973],events=100000,location='STD')} +### LS2 - MWGR#5 2020 - CSC, DAQ, DCS, DQM, DT, ECAL, GEM, HCAL, RPC, TCDS, TRACKER, TRG ### +steps['RunCosmics2020']={'INPUT':InputInfo(dataSet='/ExpressCosmics/Commissioning2020-Express-v1/FEVT',label='2020GR5',ls={338714: [[1, 10000]]},events=100000,location='STD')} #### Test of lumi section boundary crossing with run2 2018D #### Run2018Dml1={320822: [[1,1]] , 320823: [[1,1]]} @@ -520,9 +517,9 @@ def gen2018(fragment,howMuch): def gen2018prod(fragment,howMuch): global step1Up2018ProdDefaults return merge([{'cfg':fragment},howMuch,step1Up2018ProdDefaults]) -def gen2018prodml(fragment,howMuch): #Prod with concurrentLumis +def gen2018prodml(fragment,howMuch): #Prod with multiple lumis global step1Up2018ProdDefaults - return merge([{'cfg':fragment},howMuch,{'--customise_commands': '"process.source.numberEventsInLuminosityBlock=cms.untracked.uint32(5)"'},concurrentLumis,step1Up2018ProdDefaults]) #this setting is to allow job to cross LS in IB + return merge([{'cfg':fragment},howMuch,{'--customise_commands': '"process.source.numberEventsInLuminosityBlock=cms.untracked.uint32(5)"'},step1Up2018ProdDefaults]) #this setting is to allow job to cross LS in IB def gen2018hiprod(fragment,howMuch): global step1Up2018HiProdDefaults return merge([{'cfg':fragment},howMuch,step1Up2018HiProdDefaults]) @@ -981,7 +978,6 @@ def genS(fragment,howMuch): steps['HydjetQ_MinBias_XeXe_5442GeV_2017']=merge([{'-n':1},hiDefaults2017,gen2017('Hydjet_Quenched_MinBias_XeXe_5442GeV_cfi',U2000by1)]) steps['HydjetQ_B12_5020GeV_2018']=merge([{'-n':1},hiDefaults2018,gen2018prod('Hydjet_Quenched_B12_5020GeV_cfi',U2000by1)]) steps['HydjetQ_B12_5020GeV_2018_ppReco']=merge([{'-n':1},hiDefaults2018_ppReco,gen2018hiprod('Hydjet_Quenched_B12_5020GeV_cfi',U2000by1)]) -steps['HydjetQ_B12_5020GeV_2018_ppReco_ml']=merge([concurrentLumis,steps['HydjetQ_B12_5020GeV_2018_ppReco']]) steps['HydjetQ_B12_5020GeV_2021_ppReco']=merge([{'-n':1},hiDefaults2021_ppReco,gen2021hiprod('Hydjet_Quenched_B12_5020GeV_cfi',U2000by1)]) steps['QCD_Pt_80_120_13_HI']=merge([hiDefaults2018_ppReco,gen2018hiprod('QCD_Pt_80_120_13TeV_TuneCUETP8M1_cfi',Kby(9,150))]) @@ -1462,7 +1458,7 @@ def lhegensim2018(fragment,howMuch): # Run-Dependent MC def gen2018RD(fragment,howMuch): global step1Up2018Defaults - return merge([{'cfg':fragment},howMuch,{'--customise_commands': "\"process.source.numberEventsInLuminosityBlock=cms.untracked.uint32(5) \\n process.GlobalTag.toGet = cms.VPSet( cms.PSet( record = cms.string('EcalLaserAPDPNRatiosRcd'), tag = cms.string('EcalLaserAPDPNRatios_Run_Dep_MC'), connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS') ) ) \""},step1Up2018Defaults]) + return merge([{'cfg':fragment},howMuch,{'--conditions':'auto:phase1_2018_realistic_rd','--customise_commands': "\"process.source.numberEventsInLuminosityBlock=cms.untracked.uint32(5) \""},step1Up2018Defaults]) steps['ZEE_13UP18_RD']=gen2018RD('ZEE_13TeV_TuneCUETP8M1_cfi',Kby(10,50)) steps['ZMM_13UP18_RD']=gen2018RD('ZMM_13TeV_TuneCUETP8M1_cfi',Kby(10,50)) @@ -1560,7 +1556,7 @@ def gen2018RD(fragment,howMuch): # Workflows for multiple concurrent lumi blocks def lhegensim2018ml(fragment,howMuch): - return merge([{'cfg':fragment},howMuch,{'--customise_commands': '"process.source.numberEventsInLuminosityBlock=cms.untracked.uint32(5)"'},concurrentLumis,step1LHEGenSimUp2018Default]) + return merge([{'cfg':fragment},howMuch,{'--customise_commands': '"process.source.numberEventsInLuminosityBlock=cms.untracked.uint32(5)"'},step1LHEGenSimUp2018Default]) steps['GluGluHToZZTo4L_M125_Pow_py8_Evt_13UP18ml']=lhegensim2018ml('Configuration/Generator/python/GGHZZ4L_JHUGen_Pow_NNPDF30_LHE_13TeV_cfi.py',Kby(9,50)) @@ -1667,10 +1663,8 @@ def lhegensim2018ml(fragment,howMuch): steps['DIGIUP15_PU50']=merge([PU50,step2Upg2015Defaults50ns]) steps['DIGIUP17']=merge([step2Upg2017Defaults]) steps['DIGIUP18']=merge([step2Upg2018Defaults]) -steps['DIGIUP18ml']=merge([concurrentLumis,step2Upg2018Defaults]) steps['DIGIUP17PROD1']=merge([{'-s':'DIGI,L1,DIGI2RAW,HLT:@relval2017','--eventcontent':'RAWSIM','--datatier':'GEN-SIM-RAW'},step2Upg2017Defaults]) steps['DIGIUP18PROD1']=merge([{'-s':'DIGI,L1,DIGI2RAW,HLT:@relval2018','--eventcontent':'RAWSIM','--datatier':'GEN-SIM-RAW'},step2Upg2018Defaults]) -steps['DIGIUP18PROD1ml']=merge([concurrentLumis,steps['DIGIUP18PROD1']]) steps['DIGIUP17_PU25']=merge([PU25UP17,step2Upg2017Defaults]) steps['DIGIUP18_PU25']=merge([PU25UP18,step2Upg2018Defaults]) @@ -1708,7 +1702,6 @@ def lhegensim2018ml(fragment,howMuch): steps['DIGIHI2021PPRECO']=merge([{'-s':'DIGI:pdigi_hi,L1,DIGI2RAW,HLT:@fake2'}, hiDefaults2021_ppReco, {'--pileup':'HiMixNoPU'}, step2Upg2015Defaults]) steps['DIGIHI2018PPRECO']=merge([{'-s':'DIGI:pdigi_hi,L1,DIGI2RAW,HLT:HIon'}, hiDefaults2018_ppReco, {'--pileup':'HiMixNoPU'}, step2Upg2015Defaults]) -steps['DIGIHI2018PPRECOml']=merge([concurrentLumis,steps['DIGIHI2018PPRECO']]) steps['DIGIHI2018']=merge([{'-s':'DIGI:pdigi_hi,L1,DIGI2RAW,HLT:@fake2'}, hiDefaults2018, {'--pileup':'HiMixNoPU'}, step2Upg2015Defaults]) steps['DIGIHI2017']=merge([{'-s':'DIGI:pdigi_hi,L1,DIGI2RAW,HLT:@fake2'}, hiDefaults2017, step2Upg2015Defaults]) steps['DIGIHI2015']=merge([{'-s':'DIGI:pdigi_hi,L1,DIGI2RAW,HLT:@fake'}, hiDefaults2015, {'--pileup':'HiMixNoPU'}, step2Upg2015Defaults]) @@ -1812,7 +1805,10 @@ def lhegensim2018ml(fragment,howMuch): '--pileup_input':'das:/RelValPREMIXUP18_PU25/%s/PREMIX'%baseDataSetRelease[24] } -steps['DIGIPRMXUP18_PU25_RD']=merge([digiPremixRD2018, {'--customise_commands':"\"process.EcalLaserCorrectionServiceMC = cms.ESProducer('EcalLaserCorrectionServiceMC') \\n process.GlobalTag.toGet = cms.VPSet( cms.PSet( record = cms.string('EcalLaserAPDPNRatiosMCRcd'), tag = cms.string('EcalLaserAPDPNRatios_Run_Dep_MC_first_IOV'), connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS') ), cms.PSet( record = cms.string('EcalLaserAPDPNRatiosRcd'), tag = cms.string('EcalLaserAPDPNRatios_Run_Dep_MC'), connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS') ) ) \\n process.mixData.workers.ecal.timeDependent=True \\n process.source.firstLuminosityBlockForEachRun = cms.untracked.VLuminosityBlockID(*[cms.LuminosityBlockID(x,y) for x,y in ((315257, 1), (316082, 222), (316720, 445), (317527, 668), (320917, 890), (321414, 1112), (321973, 1334), (322492, 1556), (324245, 1779))]) \""}, digiPremixUp2018Defaults25ns]) +steps['DIGIPRMXUP18_PU25_RD']=merge([digiPremixRD2018, {'--conditions':'auto:phase1_2018_realistic_rd', '--customise_commands':"\"process.EcalLaserCorrectionServiceMC = cms.ESProducer('EcalLaserCorrectionServiceMC') \\n process.mixData.workers.ecal.timeDependent=True \\n process.source.firstLuminosityBlockForEachRun = cms.untracked.VLuminosityBlockID(*[cms.LuminosityBlockID(x,y) for x,y in ((315257, 1), (316082, 222), (316720, 445), (317527, 668), (320917, 890), (321414, 1112), (321973, 1334), (322492, 1556), (324245, 1779))]) \""}, digiPremixUp2018Defaults25ns]) + +# configuration to simulate cross run number boundary in IB, given 5 events per lumi +steps['DIGIPRMXUP18_PU25_RD_IB']=merge([digiPremixRD2018, {'--conditions':'auto:phase1_2018_realistic_rd', '--customise_commands':"\"process.EcalLaserCorrectionServiceMC = cms.ESProducer('EcalLaserCorrectionServiceMC') \\n process.mixData.workers.ecal.timeDependent=True \\n process.source.setRunNumberForEachLumi = cms.untracked.vuint32(315257,316083) \""}, digiPremixUp2018Defaults25ns]) premixProd25ns = {'-s' : 'DIGI,DATAMIX,L1,DIGI2RAW,HLT:@relval2016', '--eventcontent' : 'PREMIXRAW', @@ -1879,7 +1875,7 @@ def lhegensim2018ml(fragment,howMuch): steps['HLTDR2_2018']=merge( [ {'-s':'L1REPACK:Full,HLT:@%s'%hltKey2018,},{'--conditions':'auto:run2_hlt_relval'},{'--era' : 'Run2_2018'},steps['HLTD'] ] ) # special setting for lumi section boundary crossing in RunEGamma2018Dml -steps['HLTDR2_2018ml']=merge( [ {'--customise_commands':'"process.source.skipEvents=cms.untracked.uint32(7000)"'},concurrentLumis,steps['HLTDR2_2018'] ] ) +steps['HLTDR2_2018ml']=merge( [ {'--customise_commands':'"process.source.skipEvents=cms.untracked.uint32(7000)"'},steps['HLTDR2_2018'] ] ) steps['HLTDR2_2018_hBStar']=merge( [ {'--era' : 'Run2_2018_highBetaStar'},steps['HLTDR2_2018'] ] ) @@ -2218,7 +2214,6 @@ def gen2021HiMix(fragment,howMuch): steps['RECOUP17_PU25']=merge([PU25UP17,steps['RECOUP17']]) steps['RECOUP18']=merge([{'--conditions':'auto:phase1_2018_realistic','--era' : 'Run2_2018','--geometry' : 'DB:Extended'},steps['RECOUP15']]) -steps['RECOUP18ml']=merge([concurrentLumis,steps['RECOUP18']]) steps['RECOUP18_PU25']=merge([PU25UP18,steps['RECOUP18']]) # for Run1 PPb data workflow @@ -2334,7 +2329,6 @@ def gen2021HiMix(fragment,howMuch): steps['RECODR2_2018reHLT_Offline']=merge([{'--conditions':'auto:run2_data'},steps['RECODR2_2018reHLT']]) steps['RECODR2_2018reHLT_ZBOffline']=merge([{'--conditions':'auto:run2_data','-s':'RAW2DIGI,L1Reco,RECO,EI,PAT,ALCA:SiStripCalZeroBias+SiStripCalMinBias+TkAlMinBias+EcalESAlign,DQM:@rerecoZeroBias+@ExtraHLT+@miniAODDQM'},steps['RECODR2_2018reHLT']]) steps['RECODR2_2018reHLT_skimEGamma_Prompt_L1TEgDQM']=merge([{'--conditions':'auto:run2_data'},steps['RECODR2_2018reHLT_skimEGamma_L1TEgDQM']]) -steps['RECODR2_2018reHLT_skimEGamma_Prompt_L1TEgDQMml']=merge([concurrentLumis,steps['RECODR2_2018reHLT_skimEGamma_Prompt_L1TEgDQM']]) steps['RECODR2_2018reHLT_skimEGamma_Offline_L1TEgDQM']=merge([{'--conditions':'auto:run2_data'},steps['RECODR2_2018reHLT_skimEGamma_L1TEgDQM']]) steps['RECODR2_2018reHLT_skimJetHT_Prompt']=merge([{'--conditions':'auto:run2_data'},steps['RECODR2_2018reHLT_skimJetHT']]) steps['RECODR2_2018reHLT_skimJetHT_Offline']=merge([{'--conditions':'auto:run2_data'},steps['RECODR2_2018reHLT_skimJetHT']]) @@ -2373,7 +2367,6 @@ def gen2021HiMix(fragment,howMuch): steps['RECOPRODUP17']=merge([{ '--era' :'Run2_2017','--conditions': 'auto:phase1_2017_realistic'},steps['RECOPRODUP15']]) ## for 2018 PROD steps['RECOPRODUP18']=merge([{ '-s':'RAW2DIGI,L1Reco,RECO,RECOSIM,EI','--era' :'Run2_2018','--conditions': 'auto:phase1_2018_realistic','--datatier':'AODSIM','--eventcontent':'AODSIM'},step3Up2015Defaults]) -steps['RECOPRODUP18ml']=merge([concurrentLumis,steps['RECOPRODUP18']]) steps['RECOPRODUP18bParking']=merge([{ '-s':'RAW2DIGI,L1Reco,RECO,RECOSIM,EI','--era' :'Run2_2018,bParking','--conditions': 'auto:phase1_2018_realistic','--datatier':'AODSIM','--eventcontent':'AODSIM'},step3Up2015Defaults]) ## steps['RECOCOS']=merge([{'-s':'RAW2DIGI,L1Reco,RECO,DQM','--scenario':'cosmics','--datatier':'GEN-SIM-RECO,DQMIO','--eventcontent':'RECOSIM,DQM'},stCond,step3Defaults]) @@ -2433,7 +2426,7 @@ def gen2021HiMix(fragment,howMuch): steps['RECOPRMXUP18_PU25_L1TMuDQM']=merge([{'-s':'RAW2DIGI,L1Reco,RECO,RECOSIM,EI,PAT,VALIDATION:@standardValidationNoHLT+@miniAODValidation,DQM:@standardDQMFakeHLT+@miniAODDQM+@L1TMuon'},steps['RECOPRMXUP18_PU25']]) #Run-Dependent RECO -step_RECO18_RD = {'--customise_commands':"\"process.EcalLaserCorrectionServiceMC = cms.ESProducer('EcalLaserCorrectionServiceMC') \\n process.GlobalTag.toGet = cms.VPSet( cms.PSet( record = cms.string('EcalLaserAPDPNRatiosMCRcd'), tag = cms.string('EcalLaserAPDPNRatios_Run_Dep_MC_first_IOV'), connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS') ), cms.PSet( record = cms.string('EcalLaserAPDPNRatiosRcd'), tag = cms.string('EcalLaserAPDPNRatios_Run_Dep_MC'), connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS') ) ) \\n \""} +step_RECO18_RD = {'--conditions':'auto:phase1_2018_realistic_rd', '--customise_commands':"\"process.EcalLaserCorrectionServiceMC = cms.ESProducer('EcalLaserCorrectionServiceMC') \\n \""} steps['RECOPRMXUP18_PU25_RD']=merge([step_RECO18_RD, steps['RECOPRMXUP18_PU25']]) steps['RECOPRMXUP18_PU25_L1TEgDQM_RD']=merge([step_RECO18_RD, steps['RECOPRMXUP18_PU25_L1TEgDQM']]) steps['RECOPRMXUP18_PU25_L1TMuDQM_RD']=merge([step_RECO18_RD, steps['RECOPRMXUP18_PU25_L1TMuDQM']]) @@ -2497,7 +2490,6 @@ def gen2021HiMix(fragment,howMuch): '--era':'Run2_2018_pp_on_AA', '--procModifiers':'genJetSubEvent', },step3Up2015Defaults]) -steps['RECOHI2018PPRECOml']=merge([concurrentLumis,steps['RECOHI2018PPRECOMB']]) steps['REMINIAODHI2018PPRECO']=merge([{'-s':'PAT,VALIDATION:@miniAODValidation,DQM:@miniAODDQM', '--datatier':'MINIAODSIM,DQMIO', @@ -2517,7 +2509,6 @@ def gen2021HiMix(fragment,howMuch): '--datatier':'ALCARECO', '--eventcontent':'ALCARECO' }]) -steps['ALCARECOHI2018PPRECOml']=merge([concurrentLumis,steps['ALCARECOHI2018PPRECO']]) steps['RECOHI2018']=merge([hiDefaults2018,{'-s':'RAW2DIGI,L1Reco,RECO,VALIDATION,DQM'},step3Up2015Defaults]) steps['RECOHI2017']=merge([hiDefaults2017,{'-s':'RAW2DIGI,L1Reco,RECO,EI,PAT,VALIDATION:@standardValidationNoHLT+@miniAODValidation,DQM:@standardDQMFakeHLT+@miniAODDQM'},step3Up2015Defaults]) @@ -3119,7 +3110,6 @@ def gen2021HiMix(fragment,howMuch): steps['MINIAODMCUP18'] =merge([{'--conditions':'auto:phase1_2018_realistic','--era':'Run2_2018'},stepMiniAODMC]) steps['MINIAODMCUP18bParking'] =merge([{'--conditions':'auto:phase1_2018_realistic','--era':'Run2_2018,bParking'},stepMiniAODMC]) steps['MINIAODMCUP18FS'] =merge([{'--filein':'file:step1.root','--fast':'','--conditions':'auto:phase1_2018_realistic','--era':'Run2_2018_FastSim'},stepMiniAODMC]) -steps['MINIAODMCUP18ml'] =merge([concurrentLumis,steps['MINIAODMCUP18']]) stepNanoAODDefaults = { '-s': 'NANO,DQM:@nanoAODDQM', '-n': 1000 } stepNanoGenDefaults = { '-s': 'NANOGEN,DQM:@nanogenDQM', '-n': 1000 } @@ -3165,8 +3155,6 @@ def gen2021HiMix(fragment,howMuch): steps['NANOUP18'] = merge([{'--conditions': 'auto:phase1_2018_realistic', '--era': 'Run2_2018','-n':'10', '--filein':'file:step3_inMINIAODSIM.root', '--nThreads':'2'}, stepNanoEDMMCProd ]) steps['NANOUP18Had']=merge([{'--filein':'file:step4_inMINIAODSIM.root'},steps['NANOUP18']]) steps['NANOPRODUP18']=merge([{'--filein':'file:step4.root'},steps['NANOUP18']]) -steps['NANOUP18ml']=merge([concurrentLumis,steps['NANOUP18']]) -steps['NANOPRODUP18ml']=merge([{'--filein':'file:step4.root'},steps['NANOUP18ml']]) steps['NANOEDM2017'] = merge([{'--conditions': 'auto:run2_data_relval', '--era': 'Run2_2017'}, stepNanoEDMData ]) steps['NANOEDM2017_94XMiniAODv1'] = merge([{'--era': 'Run2_2017,run2_nanoAOD_94XMiniAODv1'}, steps['NANOEDM2017'] ]) steps['NANOEDM2017_94XMiniAODv2'] = merge([{'--era': 'Run2_2017,run2_nanoAOD_94XMiniAODv2'}, steps['NANOEDM2017'] ]) @@ -3174,6 +3162,7 @@ def gen2021HiMix(fragment,howMuch): steps['NANOEDM2018'] = merge([ {'--conditions': 'auto:run2_data', '--era': 'Run2_2018'}, stepNanoEDMData ]) steps['NANOEDM2018_102Xv1'] = merge([ {'--era': 'Run2_2018,run2_nanoAOD_102Xv1'}, steps['NANOEDM2018'] ]) steps['NANOEDM2018_106Xv1'] = merge([ {'--era': 'Run2_2018,run2_nanoAOD_106Xv1'}, steps['NANOEDM2018'] ]) +steps['NANOEDM2018_106Xv2'] = merge([ {'--era': 'Run2_2018,run2_nanoAOD_106Xv2'}, steps['NANOEDM2018'] ]) steps['HARVESTNANOAODMC2017']=merge([{'-s':'HARVESTING:@nanoAODDQM','--conditions': 'auto:phase1_2017_realistic','--era': 'Run2_2017'},steps['HARVESTUP15']]) steps['HARVESTNANOAODMC2017_94XMiniAODv1']=merge([{'--era': 'Run2_2017,run2_nanoAOD_94XMiniAODv1'},steps['HARVESTNANOAODMC2017']]) @@ -3189,6 +3178,7 @@ def gen2021HiMix(fragment,howMuch): steps['HARVESTNANOAOD2018']=merge([{'--conditions': 'auto:run2_data', '--era':'Run2_2018'}, steps['HARVESTNANOAOD2017']]) steps['HARVESTNANOAOD2018_102Xv1']=merge([{'--era':'Run2_2018,run2_nanoAOD_102Xv1'}, steps['HARVESTNANOAOD2018']]) steps['HARVESTNANOAOD2018_106Xv1']=merge([{'--era':'Run2_2018,run2_nanoAOD_106Xv1'}, steps['HARVESTNANOAOD2018']]) +steps['HARVESTNANOAOD2018_106Xv2']=merge([{'--era':'Run2_2018,run2_nanoAOD_106Xv2'}, steps['HARVESTNANOAOD2018']]) steps['NANOMERGE'] = { '-s': 'ENDJOB', '-n': 1000 , '--eventcontent' : 'NANOAODSIM','--datatier': 'NANOAODSIM', '--conditions': 'auto:run2_mc' } @@ -3240,6 +3230,7 @@ def gen2021HiMix(fragment,howMuch): defaultDataSets['2023']='CMSSW_11_2_0_pre8-112X_mcRun3_2023_realistic_v10-v' defaultDataSets['2024']='CMSSW_11_2_0_pre8-112X_mcRun3_2024_realistic_v10-v' defaultDataSets['2026D49']='CMSSW_11_2_0_pre8-112X_mcRun4_realistic_v3_2026D49noPU-v' +defaultDataSets['2026D76']='CMSSW_11_3_0_pre3-113X_mcRun4_realistic_v3_2026D76noPU-v' puDataSets = {} for key, value in defaultDataSets.items(): puDataSets[key+'PU'] = value diff --git a/Configuration/PyReleaseValidation/python/relval_upgrade.py b/Configuration/PyReleaseValidation/python/relval_upgrade.py index 70b9a167cd1de..e1fd636c5f613 100644 --- a/Configuration/PyReleaseValidation/python/relval_upgrade.py +++ b/Configuration/PyReleaseValidation/python/relval_upgrade.py @@ -39,15 +39,14 @@ def makeStepName(key,frag,step,suffix): if 'HARVEST' in step: hasHarvest = True for specialType,specialWF in six.iteritems(upgradeWFs): - if (specialType is not 'baseline') and ( ('PU' in step and step.replace('PU','') in specialWF.PU) or (step in specialWF.steps) ): + if (specialType != 'baseline') and ( ('PU' in step and step.replace('PU','') in specialWF.PU) or (step in specialWF.steps) ): stepList[specialType].append(stepMaker(key,frag[:-4],step,specialWF.suffix)) # hack to add an extra step - if (specialType == 'ProdLike' or specialType == 'TestOldDigiProdLike') and 'RecoGlobal' in step: - stepList[specialType].append(stepMaker(key,frag[:-4],step.replace('RecoGlobal','MiniAOD'),specialWF.suffix)) - elif specialType == 'ProdLike' and 'Reco' in step: - stepList[specialType].append(stepMaker(key,frag[:-4],step.replace('Reco','MiniAOD'),specialWF.suffix)) + if 'ProdLike' in specialType: + if 'Reco' in step: # handles both Reco and RecoGlobal + stepList[specialType].append(stepMaker(key,frag[:-4],step.replace('RecoGlobal','MiniAOD').replace('Reco','MiniAOD'),specialWF.suffix)) # similar hacks for premixing - elif 'PMX' in specialType: + if 'PMX' in specialType: if 'GenSim' in step: s = step.replace('GenSim','Premix')+'PU' # later processing requires to have PU here if step in specialWF.PU: diff --git a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py index 5e0d53e1bdb0f..4ef52a9e8e0c3 100644 --- a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py +++ b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py @@ -50,10 +50,18 @@ '2026D71PU', '2026D72', '2026D72PU', - '2026D73', - '2026D73PU', '2026D74', '2026D74PU', + '2026D75', + '2026D75PU', + '2026D76', + '2026D76PU', + '2026D77', + '2026D77PU', + '2026D78', + '2026D78PU', + '2026D79', + '2026D79PU', ] # pre-generation of WF numbers @@ -63,7 +71,7 @@ } numWFSkip=200 # temporary measure to keep other WF numbers the same -numWFConflict = [[20000,23200],[23600,28200],[28600,29800],[50000,51000]] +numWFConflict = [[20000,23200],[23600,28200],[28600,29800],[33400,33800],[50000,51000]] numWFAll={ 2017: [], 2026: [] @@ -311,6 +319,30 @@ def condition_(self, fragment, stepList, key, hasHarvest): '--procModifiers': 'trackingMkFit' } +#DeepCore seeding for JetCore iteration workflow +class UpgradeWorkflow_seedingDeepCore(UpgradeWorkflow): + def setup_(self, step, stepName, stepDict, k, properties): + if 'Reco' in step or 'HARVEST' in step: stepDict[stepName][k] = merge([{'--procModifiers': 'seedingDeepCore'}, stepDict[step][k]]) + def condition(self, fragment, stepList, key, hasHarvest): + result = (fragment=="QCD_Pt_1800_2400_14" or fragment=="TTbar_14TeV" ) and ('2021' in key or '2024' in key) and hasHarvest + if result: + # skip ALCA and Nano + skipList = [s for s in stepList if (("ALCA" in s) or ("Nano" in s))] + for skip in skipList: + stepList.remove(skip) + return result +upgradeWFs['seedingDeepCore'] = UpgradeWorkflow_seedingDeepCore( + steps = [ + 'Reco', + 'HARVEST', + 'RecoGlobal', + 'HARVESTGlobal', + ], + PU = [], + suffix = '_seedingDeepCore', + offset = 0.17, +) + # Vector Hits workflows class UpgradeWorkflow_vectorHits(UpgradeWorkflow): def setup_(self, step, stepName, stepDict, k, properties): @@ -328,6 +360,50 @@ def condition(self, fragment, stepList, key, hasHarvest): offset = 0.9, ) + +# Track DNN workflows +class UpgradeWorkflow_trackdnn(UpgradeWorkflow): + def setup_(self, step, stepName, stepDict, k, properties): + stepDict[stepName][k] = merge([{'--procModifiers': 'trackdnn'}, stepDict[step][k]]) + + def condition(self, fragment, stepList, key, hasHarvest): + return fragment=="TTbar_14TeV" and '2021' in key +upgradeWFs['trackdnn'] = UpgradeWorkflow_trackdnn( + steps = [ + 'Reco', + ], + PU = [ + 'Reco', + ], + suffix = '_trackdnn', + offset = 0.91, +) + + +# MLPF workflows +class UpgradeWorkflow_mlpf(UpgradeWorkflow): + def setup_(self, step, stepName, stepDict, k, properties): + if 'Reco' in step: + stepDict[stepName][k] = merge([self.step3, stepDict[step][k]]) + def condition(self, fragment, stepList, key, hasHarvest): + return fragment=="TTbar_14TeV" and '2021' in key + +upgradeWFs['mlpf'] = UpgradeWorkflow_mlpf( + steps = [ + 'Reco', + ], + PU = [ + 'Reco', + ], + suffix = '_mlpf', + offset = 0.13, +) +upgradeWFs['mlpf'].step3 = { + '--datatier': 'GEN-SIM-RECO,RECOSIM,MINIAODSIM,DQMIO', + '--eventcontent': 'FEVTDEBUGHLT,RECOSIM,MINIAODSIM,DQM', + '--procModifiers': 'mlpf' +} + # Patatrack workflows class UpgradeWorkflowPatatrack(UpgradeWorkflow): def condition(self, fragment, stepList, key, hasHarvest): @@ -359,6 +435,8 @@ def condition_(self, fragment, stepList, key, hasHarvest): steps = [ 'Reco', 'HARVEST', + 'RecoFakeHLT', + 'HARVESTFakeHLT', 'RecoGlobal', 'HARVESTGlobal', ], @@ -388,6 +466,8 @@ def condition_(self, fragment, stepList, key, hasHarvest): steps = [ 'Reco', 'HARVEST', + 'RecoFakeHLT', + 'HARVESTFakeHLT', 'RecoGlobal', 'HARVESTGlobal', ], @@ -417,6 +497,8 @@ def condition_(self, fragment, stepList, key, hasHarvest): steps = [ 'Reco', 'HARVEST', + 'RecoFakeHLT', + 'HARVESTFakeHLT', 'RecoGlobal', 'HARVESTGlobal', ], @@ -445,6 +527,8 @@ def condition_(self, fragment, stepList, key, hasHarvest): steps = [ 'Reco', 'HARVEST', + 'RecoFakeHLT', + 'HARVESTFakeHLT', 'RecoGlobal', 'HARVESTGlobal', ], @@ -474,6 +558,8 @@ def condition_(self, fragment, stepList, key, hasHarvest): steps = [ 'Reco', 'HARVEST', + 'RecoFakeHLT', + 'HARVESTFakeHLT', 'RecoGlobal', 'HARVESTGlobal', ], @@ -502,6 +588,8 @@ def condition_(self, fragment, stepList, key, hasHarvest): steps = [ 'Reco', 'HARVEST', + 'RecoFakeHLT', + 'HARVESTFakeHLT', 'RecoGlobal', 'HARVESTGlobal', ], @@ -877,6 +965,54 @@ def condition(self, fragment, stepList, key, hasHarvest): offset = 0.999, ) +class UpgradeWorkflowPremixProdLike(UpgradeWorkflowPremix,UpgradeWorkflow_ProdLike): + def setup_(self, step, stepName, stepDict, k, properties): + # copy steps, then apply specializations + UpgradeWorkflowPremix.setup_(self, step, stepName, stepDict, k, properties) + UpgradeWorkflow_ProdLike.setup_(self, step, stepName, stepDict, k, properties) + def condition(self, fragment, stepList, key, hasHarvest): + # use both conditions + return UpgradeWorkflowPremix.condition(self, fragment, stepList, key, hasHarvest) and UpgradeWorkflow_ProdLike.condition(self, fragment, stepList, key, hasHarvest) +# premix stage2 +upgradeWFs['PMXS2ProdLike'] = UpgradeWorkflowPremixProdLike( + steps = [], + PU = [ + 'Digi', + 'DigiTrigger', + 'RecoLocal', + 'Reco', + 'RecoGlobal', + 'Nano', + 'HARVEST', + 'HARVESTGlobal', + 'MiniAOD', + 'ALCA', + ], + suffix = '_PMXS2ProdLike', + offset = 0.9821, +) +# premix combined stage1+stage2 +upgradeWFs['PMXS1S2ProdLike'] = UpgradeWorkflowPremixProdLike( + steps = [], + PU = [ + 'GenSim', + 'GenSimHLBeamSpot', + 'GenSimHLBeamSpot14', + 'Digi', + 'DigiTrigger', + 'RecoLocal', + 'Reco', + 'RecoGlobal', + 'Nano', + 'HARVEST', + 'HARVESTGlobal', + 'MiniAOD', + 'ALCA', + ], + suffix = '_PMXS1S2ProdLike', + offset = 0.9921, +) + class UpgradeWorkflow_DD4hep(UpgradeWorkflow): def setup_(self, step, stepName, stepDict, k, properties): if 'Run3' in stepDict[step][k]['--era']: @@ -886,8 +1022,7 @@ def setup_(self, step, stepName, stepDict, k, properties): dd4hepGeom+=stepDict[step][k]['--geometry'] stepDict[stepName][k] = merge([{'--geometry' : dd4hepGeom, '--procModifiers': 'dd4hep'}, stepDict[step][k]]) def condition(self, fragment, stepList, key, hasHarvest): - return ((fragment=='TTbar_13' or fragment=='ZMM_13' or fragment=='SingleMuPt10') and '2021' in key) \ - or ((fragment=='TTbar_14TeV' or fragment=='ZMM_14' or fragment=='SingleMuPt10') and '2026' in key) + return '2021' in key or '2026' in key upgradeWFs['DD4hep'] = UpgradeWorkflow_DD4hep( steps = [ 'GenSim', @@ -907,6 +1042,41 @@ def condition(self, fragment, stepList, key, hasHarvest): ) upgradeWFs['DD4hep'].allowReuse = False +class UpgradeWorkflow_SonicTriton(UpgradeWorkflow): + def setup_(self, step, stepName, stepDict, k, properties): + stepDict[stepName][k] = merge([{'--procModifiers': 'allSonicTriton'}, stepDict[step][k]]) + def condition(self, fragment, stepList, key, hasHarvest): + return (fragment=='TTbar_13' and '2021' in key) \ + or (fragment=='TTbar_14TeV' and '2026' in key) +upgradeWFs['SonicTriton'] = UpgradeWorkflow_SonicTriton( + steps = [ + 'GenSim', + 'GenSimHLBeamSpot', + 'GenSimHLBeamSpot14', + 'Digi', + 'DigiTrigger', + 'Reco', + 'RecoGlobal', + 'HARVEST', + 'HARVESTGlobal', + 'ALCA', + ], + PU = [ + 'GenSim', + 'GenSimHLBeamSpot', + 'GenSimHLBeamSpot14', + 'Digi', + 'DigiTrigger', + 'Reco', + 'RecoGlobal', + 'HARVEST', + 'HARVESTGlobal', + 'ALCA', + ], + suffix = '_SonicTriton', + offset = 0.9001, +) + # check for duplicate offsets offsets = [specialWF.offset for specialType,specialWF in six.iteritems(upgradeWFs)] seen = set() @@ -1005,18 +1175,19 @@ def condition(self, fragment, stepList, key, hasHarvest): 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'], }, '2026D64' : { - 'Geom' : 'Extended2026D64', # N.B.: Geometry with square 50x50 um2 pixels in the Inner Tracker. + 'Geom' : 'Extended2026D64', # N.B.: Geometry with square 50x50 um2 pixels in the Inner Tracker. 'HLTmenu': '@fake2', 'GT' : 'auto:phase2_realistic_T22', - 'Era' : 'Phase2C11', + 'ProcessModifier': 'PixelCPEGeneric', # This swaps template reco CPE for generic reco CPE + 'Era' : 'Phase2C11T22', # customized for square pixels 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'], }, '2026D65' : { - 'Geom' : 'Extended2026D65', # N.B.: Geometry with 3D pixels in the Inner Tracker. + 'Geom' : 'Extended2026D65', # N.B.: Geometry with 3D pixels in the Inner Tracker. 'HLTmenu': '@fake2', - 'GT' : 'auto:phase2_realistic_T23', # This symbolic GT has no pixel template / GenError informations. - 'ProcessModifier': 'phase2_PixelCPEGeneric', # This modifier removes all need for IT template information. DO NOT USE for standard planar sensors. - 'Era' : 'Phase2C11', + 'GT' : 'auto:phase2_realistic_T23', # This symbolic GT has no pixel template / GenError informations. + 'ProcessModifier': 'PixelCPEGeneric', # This swaps template reco CPE for generic reco CPE + 'Era' : 'Phase2C11T23', # customizes for 3D Pixels 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'], }, '2026D66' : { @@ -1065,21 +1236,51 @@ def condition(self, fragment, stepList, key, hasHarvest): 'Geom' : 'Extended2026D72', 'HLTmenu': '@fake2', 'GT' : 'auto:phase2_realistic_T21', - 'Era' : 'Phase2C11_etlV4', + 'Era' : 'Phase2C11I13', 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'], }, - '2026D73' : { - 'Geom' : 'Extended2026D73', + '2026D74' : { + 'Geom' : 'Extended2026D74', 'HLTmenu': '@fake2', 'GT' : 'auto:phase2_realistic_T21', - 'Era' : 'Phase2C11_etlV4', + 'Era' : 'Phase2C11M9', 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'], }, - '2026D74' : { - 'Geom' : 'Extended2026D74', + '2026D75' : { + 'Geom' : 'Extended2026D75', 'HLTmenu': '@fake2', 'GT' : 'auto:phase2_realistic_T21', - 'Era' : 'Phase2C11M9', + 'Era' : 'Phase2C11I13', + 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'], + }, + '2026D76' : { + 'Geom' : 'Extended2026D76', + 'HLTmenu': '@fake2', + 'GT' : 'auto:phase2_realistic_T21', + 'Era' : 'Phase2C11I13M9', + 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'], + }, + '2026D77' : { + 'Geom' : 'Extended2026D77', + 'HLTmenu': '@fake2', + 'GT' : 'auto:phase2_realistic_T21', + 'Era' : 'Phase2C11I13M9', + 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'], + }, + '2026D78' : { + 'Geom' : 'Extended2026D78', # N.B.: Geometry with square 50x50 um2 pixels in the Inner Tracker. + 'HLTmenu': '@fake2', + 'GT' : 'auto:phase2_realistic_T22', + 'ProcessModifier': 'PixelCPEGeneric', # This swaps template reco CPE for generic reco CPE + 'Era' : 'Phase2C11I13T22M9', # customized for square pixels and Muon M9 + 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'], + }, + '2026D79' : { + 'Geom' : 'Extended2026D79', # N.B.: Geometry with 3D pixels in the Inner Tracker. + 'HLTmenu': '@fake2', + 'GT' : 'auto:phase2_realistic_T23', + 'ProcessModifier': 'PixelCPEGeneric', # This swaps template reco CPE for generic reco CPE + 'Era' : 'Phase2C11I13T23M9', # customizes for 3D Pixels and Muon M9 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'], }, } @@ -1227,5 +1428,6 @@ def __init__(self, howMuch, dataset): ('Upsilon1SToMuMu_forSTEAM_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,50),'Upsilon1SToMuMu_14')), ('TenTau_E_15_500_Eta3p1_pythia8_cfi', UpgradeFragment(Kby(9,100),'TenTau_15_500_Eta3p1')), ('QCD_Pt_1800_2400_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,50), 'QCD_Pt_1800_2400_14')), - ('DisplacedSUSY_stopToBottom_M_800_500mm_TuneCP5_14TeV_pythia8_cff', UpgradeFragment(Kby(9,50),'DisplacedSUSY_stopToB_M_800_500mm_14')), + ('DisplacedSUSY_stopToBottom_M_800_500mm_TuneCP5_14TeV_pythia8_cff', UpgradeFragment(Kby(9,50),'DisplacedSUSY_14TeV')), + ('GluGluTo2Jets_M_300_2000_14TeV_Exhume_cff',UpgradeFragment(Kby(9,100),'GluGluTo2Jets_14TeV')), ]) diff --git a/Configuration/PyReleaseValidation/scripts/runTheMatrix.py b/Configuration/PyReleaseValidation/scripts/runTheMatrix.py index 75612a27615d9..d726ef440f958 100755 --- a/Configuration/PyReleaseValidation/scripts/runTheMatrix.py +++ b/Configuration/PyReleaseValidation/scripts/runTheMatrix.py @@ -76,19 +76,21 @@ def runSelected(opt): 158.01, #reMiniAOD of 2018 HI MC with pp-like reco 312.0, #2021/Run3 HI MC Pyquen_ZeemumuJets_pt10 with pp-like reco 1306.0, #SingleMu Pt1 UP15 - 1325.7, #test NanoAOD from existing MINI + 1325.81, #test NanoAOD from existing MINI UL 106Xv1 + 136.8523, #test NanoAOD from existing reMINI UL 106Xv2 1330, #Run2 MC Zmm 135.4, #Run 2 Zee ttbar 10042.0, #2017 ZMM 10024.0, #2017 ttbar 10224.0, #2017 ttbar PU 10824.0, #2018 ttbar - 11624.911, #2021 DD4hep ttbar +#temporarly remove DD4HEP from the short matrix 11634.911, #2021 DD4hep ttbar 11634.0, #2021 ttbar 12434.0, #2023 ttbar 23234.0, #2026D49 ttbar (HLT TDR baseline w/ HGCal v11) - 23434.999, #2026D49 ttbar premixing stage1+stage2, PU50 28234.0, #2026D60 (exercise HF nose) + 34634.0, #2026D76 ttbar (2021 new baseline) + 34834.999, #2026D76 ttbar premixing stage1+stage2, PU50 25202.0, #2016 ttbar UP15 PU 250202.181, #2018 ttbar stage1 + stage2 premix ], diff --git a/Configuration/Skimming/python/PDWG_EXOHSCP_cff.py b/Configuration/Skimming/python/PDWG_EXOHSCP_cff.py deleted file mode 100644 index fdfa2d8c482f5..0000000000000 --- a/Configuration/Skimming/python/PDWG_EXOHSCP_cff.py +++ /dev/null @@ -1,206 +0,0 @@ -TRACK_PT = 20.0 -import FWCore.ParameterSet.Config as cms -import Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi - -from RecoTracker.MeasurementDet.MeasurementTrackerEventProducer_cfi import * - -generalTracksSkim = Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi.AlignmentTrackSelector.clone( - src = 'generalTracks', -# src = 'TrackRefitter', - filter = False, - applyBasicCuts = True, - ptMin = TRACK_PT, - ptMax = cms.double(999999.0), - nHitMin = 5, - chi2nMax = 10., -) -trackerSeq = cms.Sequence( generalTracksSkim) - - -from RecoVertex.BeamSpotProducer.BeamSpot_cff import * -from RecoTracker.TrackProducer.TrackRefitters_cff import * -TrackRefitterSkim = TrackRefitter.clone() -TrackRefitterSkim.src = "generalTracksSkim" - - -from RecoTracker.DeDx.dedxEstimators_cff import dedxHarmonic2 -dedxSkimNPHarm2 = dedxHarmonic2.clone() -dedxSkimNPHarm2.tracks = cms.InputTag("TrackRefitterSkim") -dedxSkimNPHarm2.UsePixel = cms.bool(False) - -DedxFilter = cms.EDFilter("HSCPFilter", - inputMuonCollection = cms.InputTag("muons"), - inputTrackCollection = cms.InputTag("TrackRefitterSkim"), - inputDedxCollection = cms.InputTag("dedxSkimNPHarm2"), - SAMuPtMin = cms.double(60), - trkPtMin = cms.double(TRACK_PT), - dedxMin =cms.double(3.0), - dedxMaxLeft =cms.double(2.8), - ndedxHits = cms.int32(3), - etaMin= cms.double(-2.4), - etaMax= cms.double(2.4), - chi2nMax = cms.double(10), - dxyMax = cms.double(2.0), - dzMax = cms.double(5), - filter = cms.bool(True) - -) - -dedxSeq = cms.Sequence(offlineBeamSpot + MeasurementTrackerEvent + TrackRefitterSkim + dedxSkimNPHarm2+DedxFilter) - - -from TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff import * -from TrackingTools.TrackAssociator.default_cfi import * - -muonEcalDetIdsEXOHSCP = cms.EDProducer("InterestingEcalDetIdProducer", - inputCollection = cms.InputTag("muons") - ) -highPtTrackEcalDetIds = cms.EDProducer("HighPtTrackEcalDetIdProducer", - #TrackAssociatorParameterBlock - TrackAssociatorParameters=TrackAssociatorParameterBlock.TrackAssociatorParameters, - inputCollection = cms.InputTag("generalTracksSkim"), - TrackPt=cms.double(TRACK_PT) - ) - - - -detIdProduceSeq = cms.Sequence(muonEcalDetIdsEXOHSCP+highPtTrackEcalDetIds) - -reducedHSCPEcalRecHitsEB = cms.EDProducer("ReducedRecHitCollectionProducer", - recHitsLabel = cms.InputTag("ecalRecHit","EcalRecHitsEB"), - interestingDetIdCollections = cms.VInputTag( - #high p_t tracker track ids - cms.InputTag("highPtTrackEcalDetIds"), - #muons - cms.InputTag("muonEcalDetIdsEXOHSCP") - ), - reducedHitsCollection = cms.string('') -) -reducedHSCPEcalRecHitsEE = cms.EDProducer("ReducedRecHitCollectionProducer", - recHitsLabel = cms.InputTag("ecalRecHit","EcalRecHitsEE"), - interestingDetIdCollections = cms.VInputTag( - #high p_t tracker track ids - cms.InputTag("highPtTrackEcalDetIds"), - #muons - cms.InputTag("muonEcalDetIdsEXOHSCP") - ), - reducedHitsCollection = cms.string('') -) - - -ecalSeq = cms.Sequence(detIdProduceSeq+reducedHSCPEcalRecHitsEB+reducedHSCPEcalRecHitsEE) - - -reducedHSCPhbhereco = cms.EDProducer("ReduceHcalRecHitCollectionProducer", - recHitsLabel = cms.InputTag("hbhereco",""), - TrackAssociatorParameters=TrackAssociatorParameterBlock.TrackAssociatorParameters, - inputCollection = cms.InputTag("generalTracksSkim"), - TrackPt=cms.double(TRACK_PT), - reducedHitsCollection = cms.string('') -) - -hcalSeq = cms.Sequence(reducedHSCPhbhereco) - -muonsSkim = cms.EDProducer("UpdatedMuonInnerTrackRef", - MuonTag = cms.untracked.InputTag("muons"), - OldTrackTag = cms.untracked.InputTag("generalTracks"), - NewTrackTag = cms.untracked.InputTag("generalTracksSkim"), - maxInvPtDiff = cms.untracked.double(0.005), - minDR = cms.untracked.double(0.01), -) -muonSeq = cms.Sequence(muonsSkim) - - - -TrackAssociatorParametersForHSCPIsol = TrackAssociatorParameterBlock.TrackAssociatorParameters.clone() -TrackAssociatorParametersForHSCPIsol.useHO = cms.bool(False) -TrackAssociatorParametersForHSCPIsol.CSCSegmentCollectionLabel = cms.InputTag("cscSegments") -TrackAssociatorParametersForHSCPIsol.DTRecSegment4DCollectionLabel = cms.InputTag("dt4DSegments") -TrackAssociatorParametersForHSCPIsol.EERecHitCollectionLabel = cms.InputTag("ecalRecHit","EcalRecHitsEE") -TrackAssociatorParametersForHSCPIsol.EBRecHitCollectionLabel = cms.InputTag("ecalRecHit","EcalRecHitsEB") -TrackAssociatorParametersForHSCPIsol.HBHERecHitCollectionLabel = cms.InputTag("hbhereco") - - -HSCPIsolation01 = cms.EDProducer("ProduceIsolationMap", - inputCollection = cms.InputTag("generalTracksSkim"), - IsolationConeDR = cms.double(0.1), - TkIsolationPtCut = cms.double(10), - TKLabel = cms.InputTag("generalTracks"), - TrackAssociatorParameters=TrackAssociatorParametersForHSCPIsol, -) - -HSCPIsolation03 = HSCPIsolation01.clone() -HSCPIsolation03.IsolationConeDR = cms.double(0.3) - -HSCPIsolation05 = HSCPIsolation01.clone() -HSCPIsolation05.IsolationConeDR = cms.double(0.5) - -exoticaRecoIsoPhotonSeq = cms.EDFilter("MonoPhotonSkimmer", - phoTag = cms.InputTag("photons::RECO"), - selectEE = cms.bool(True), - ecalisoOffsetEB = cms.double(4.2), - ecalisoSlopeEB = cms.double(0.006), - hcalisoOffsetEB = cms.double(2.2), - hcalisoSlopeEB = cms.double(0.0025), - hadoveremEB = cms.double(0.05), - minPhoEtEB = cms.double(20.), - trackIsoOffsetEB = cms.double(2.), - trackIsoSlopeEB = cms.double(0.001), - etaWidthEB = cms.double(0.013), - - ecalisoOffsetEE = cms.double(4.2), - ecalisoSlopeEE = cms.double(0.006), - hcalisoOffsetEE = cms.double(2.2), - hcalisoSlopeEE = cms.double(0.0025), - hadoveremEE = cms.double(0.05), - minPhoEtEE = cms.double(20.), - trackIsoOffsetEE = cms.double(2.), - trackIsoSlopeEE = cms.double(0.001), - etaWidthEE = cms.double(0.03), - - - -) - - -exoticaHSCPSeq = cms.Sequence(trackerSeq+dedxSeq+ecalSeq+hcalSeq+muonSeq+HSCPIsolation01+HSCPIsolation03+HSCPIsolation05) -exoticaHSCPIsoPhotonSeq = cms.Sequence(exoticaRecoIsoPhotonSeq + trackerSeq+ecalSeq+hcalSeq+muonSeq+HSCPIsolation01+HSCPIsolation03+HSCPIsolation05) - -EXOHSCPSkim_EventContent=cms.PSet( - outputCommands = cms.untracked.vstring( - "drop *", - "keep GenEventInfoProduct_generator_*_*", - "keep L1GlobalTriggerReadoutRecord_*_*_*", - "keep recoVertexs_offlinePrimaryVertices_*_*", - "keep recoMuons_muonsSkim_*_*", - "keep SiStripClusteredmNewDetSetVector_generalTracksSkim_*_*", - "keep SiPixelClusteredmNewDetSetVector_generalTracksSkim_*_*", - "keep recoTracks_generalTracksSkim_*_*", - "keep recoTrackExtras_generalTracksSkim_*_*", - "keep TrackingRecHitsOwned_generalTracksSkim_*_*", - 'keep *_dt1DRecHits_*_*', - 'keep *_dt4DSegments_*_*', - 'keep *_csc2DRecHits_*_*', - 'keep *_cscSegments_*_*', - 'keep *_rpcRecHits_*_*', - 'keep recoTracks_standAloneMuons_*_*', - 'keep recoTrackExtras_standAloneMuons_*_*', - 'keep TrackingRecHitsOwned_standAloneMuons_*_*', - 'keep recoTracks_globalMuons_*_*', - 'keep recoTrackExtras_globalMuons_*_*', - 'keep TrackingRecHitsOwned_globalMuons_*_*', - 'keep EcalRecHitsSorted_reducedHSCPEcalRecHitsEB_*_*', - 'keep EcalRecHitsSorted_reducedHSCPEcalRecHitsEE_*_*', - 'keep HBHERecHitsSorted_reducedHSCPhbhereco__*', - 'keep edmTriggerResults_TriggerResults__*', - 'keep *_hltTriggerSummaryAOD_*_*', - 'keep *_HSCPIsolation01__*', - 'keep *_HSCPIsolation03__*', - 'keep *_HSCPIsolation05__*', - 'keep recoPFJets_ak4PFJets__*', - 'keep recoPFMETs_pfMet__*', - 'keep recoBeamSpot_offlineBeamSpot__*', - ) - ) - - diff --git a/Configuration/Skimming/python/Skims_PDWG_cff.py b/Configuration/Skimming/python/Skims_PDWG_cff.py index 77af8c63d57dc..71d2b19336a2b 100644 --- a/Configuration/Skimming/python/Skims_PDWG_cff.py +++ b/Configuration/Skimming/python/Skims_PDWG_cff.py @@ -199,17 +199,6 @@ # dataTier = cms.untracked.string('AOD') # ) -from Configuration.Skimming.PDWG_EXOHSCP_cff import * -EXOHSCPPath = cms.Path(exoticaHSCPSeq) -SKIMStreamEXOHSCP = cms.FilteredStream( - responsible = 'PDWG', - name = 'EXOHSCP', - paths = (EXOHSCPPath), - content = EXOHSCPSkim_EventContent.outputCommands, - selectEvents = cms.untracked.PSet(), - dataTier = cms.untracked.string('USER') - ) - from Configuration.Skimming.PDWG_HWWSkim_cff import * HWWmmPath = cms.Path(diMuonSequence) HWWeePath = cms.Path(diElectronSequence) diff --git a/Configuration/StandardSequences/python/Analysis_cff.py b/Configuration/StandardSequences/python/Analysis_cff.py deleted file mode 100644 index eed79d78067fe..0000000000000 --- a/Configuration/StandardSequences/python/Analysis_cff.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# Analysis sequences -# -from HiggsAnalysis.Configuration.HiggsAnalysis_cff import * -from TopQuarkAnalysis.Configuration.TopQuarkAnalysis_cff import * - diff --git a/Configuration/StandardSequences/python/Eras.py b/Configuration/StandardSequences/python/Eras.py index 046f12b27d95e..89498f54a4fa7 100644 --- a/Configuration/StandardSequences/python/Eras.py +++ b/Configuration/StandardSequences/python/Eras.py @@ -42,9 +42,14 @@ def __init__(self): 'Phase2C9_dd4hep', 'Phase2C10_dd4hep', 'Phase2C11_dd4hep', - 'Phase2C11_etlV4', + 'Phase2C11I13', + 'Phase2C11T22', + 'Phase2C11T23', 'Phase2C12_dd4hep', 'Phase2C11M9', + 'Phase2C11I13M9', + 'Phase2C11I13T22M9', + 'Phase2C11I13T23M9' ] internalUseMods = ['run2_common', 'run2_25ns_specific', @@ -59,12 +64,13 @@ def __init__(self): 'phase2_common', 'phase2_tracker', 'phase2_muon', 'phase2_GEM', 'phase2_GE0', 'phase2_hgcal', 'phase2_timing', 'phase2_hfnose', 'phase2_hgcalV10', 'phase2_hgcalV11', 'phase2_hgcalV12', - 'phase2_timing_layer', 'phase2_hcal', 'phase2_ecal','phase2_ecal_devel', + 'phase2_timing_layer', 'phase2_etlV4', 'phase2_hcal', 'phase2_ecal','phase2_ecal_devel', 'phase2_trigger', + 'phase2_squarePixels', 'phase2_3DPixels', 'trackingLowPU', 'trackingPhase1', 'ctpps_2016', 'ctpps_2017', 'ctpps_2018', 'ctpps_2021', 'trackingPhase2PU140','highBetaStar_2018', 'tracker_apv_vfp30_2016', 'pf_badHcalMitigation', 'run2_miniAOD_80XLegacy','run2_miniAOD_94XFall17', 'run2_nanoAOD_92X', 'run2_nanoAOD_94XMiniAODv1', 'run2_nanoAOD_94XMiniAODv2', 'run2_nanoAOD_94X2016', - 'run2_miniAOD_devel', 'run2_nanoAOD_102Xv1', 'run2_nanoAOD_106Xv1', + 'run2_miniAOD_devel', 'run2_nanoAOD_102Xv1', 'run2_nanoAOD_106Xv1', 'run2_nanoAOD_106Xv2', 'hcalHardcodeConditions', 'hcalSkipPacker', 'run2_HLTconditions_2016','run2_HLTconditions_2017','run2_HLTconditions_2018', 'bParking'] diff --git a/Configuration/StandardSequences/python/GeometryConf.py b/Configuration/StandardSequences/python/GeometryConf.py index 23216da822671..da3db6f1b32f8 100644 --- a/Configuration/StandardSequences/python/GeometryConf.py +++ b/Configuration/StandardSequences/python/GeometryConf.py @@ -20,18 +20,36 @@ 'Extended2015dev': 'Extended2015dev,Extended2015devReco', 'Extended2016' : 'Extended2016,Extended2016Reco', 'Extended2017' : 'Extended2017,Extended2017Reco', - 'Extended2018' : 'Extended2018,Extended2018Reco', 'Extended2017Plan1' : 'Extended2017Plan1,Extended2017Plan1Reco', - 'Extended2017Plan1ZeroMaterial' : 'Extended2017Plan1ZeroMaterial,Extended2017Plan1ZeroMaterialReco', + 'Extended2017Plan1ZeroMaterial' : 'Extended2017Plan1ZeroMaterial,Extended2017Plan1ZeroMaterialReco', + 'Extended2017Plan1FlatMinus05Percent' : 'Extended2017Plan1FlatMinus05Percent,Extended2017Plan1FlatMinus05PercentReco', + 'Extended2017Plan1FlatMinus10Percent' : 'Extended2017Plan1FlatMinus10Percent,Extended2017Plan1FlatMinus10PercentReco', + 'Extended2017Plan1FlatPlus05Percent' : 'Extended2017Plan1FlatPlus05Percent,Extended2017Plan1FlatPlus05PercentReco', + 'Extended2017Plan1FlatPlus10Percent' : 'Extended2017Plan1FlatPlus10Percent,Extended2017Plan1FlatPlus10PercentReco', + 'Extended2018' : 'Extended2018,Extended2018Reco', + 'Extended2018ZeroMaterial' : 'Extended2018ZeroMaterial,Extended2018RecoZeroMaterial', + 'Extended2018FlatMinus05Percent' : 'Extended2018FlatMinus05Percent,Extended2018FlatMinus05PercentReco', + 'Extended2018FlatMinus10Percent' : 'Extended2018FlatMinus10Percent,Extended2018FlatMinus10PercentReco', + 'Extended2018FlatPlus05Percent' : 'Extended2018FlatPlus05Percent,Extended2018FlatPlus05PercentReco', + 'Extended2018FlatPlus10Percent' : 'Extended2018FlatPlus10Percent,Extended2018FlatPlus10PercentReco', 'Extended2021' : 'Extended2021,Extended2021Reco', 'DD4hepExtended2021' : 'DD4hepExtended2021,DD4hepExtended2021Reco', 'Extended2021ZeroMaterial' : 'Extended2021ZeroMaterial,Extended2021ZeroMaterialReco', 'DD4hepExtended2021ZeroMaterial' : 'DD4hepExtended2021ZeroMaterial,DD4hepExtended2021ZeroMaterialReco', + 'Extended2021FlatMinus05Percent' : 'Extended2021FlatMinus05Percent,Extended2021FlatMinus05PercentReco', + 'DD4hepExtended2021FlatMinus05Percent' : 'DD4hepExtended2021FlatMinus05Percent,DD4hepExtended2021FlatMinus05PercentReco', + 'Extended2021FlatMinus10Percent' : 'Extended2021FlatMinus10Percent,Extended2021FlatMinus10PercentReco', + 'DD4hepExtended2021FlatMinus10Percent' : 'DD4hepExtended2021FlatMinus10Percent,DD4hepExtended2021FlatMinus10PercentReco', + 'Extended2021FlatPlus05Percent' : 'Extended2021FlatPlus05Percent,Extended2021FlatPls05PercentReco', + 'DD4hepExtended2021FlatPlus05Percent' : 'DD4hepExtended2021FlatPlus05Percent,DD4hepExtended2021FlatPls05PercentReco', + 'Extended2021FlatPlus10Percent' : 'Extended2021FlatPlus10Percent,Extended2021FlatPlus10PercentReco', + 'DD4hepExtended2021FlatPlus10Percent' : 'DD4hepExtended2021FlatPlus10Percent,DD4hepExtended2021FlatPlus10PercentReco', 'All' : 'Configuration.Geometry.GeometrySimAll_cff,Reco', 'ECALHCAL' : 'Configuration.Geometry.GeometrySimECALHCAL_cff,Configuration.Geometry.GeometryRecoECALHCAL_cff', 'TrackerOnly' : 'Configuration.Geometry.GeometrySimTracker_cff,Configuration.Geometry.GeometryRecoTracker_cff', 'HCal' : 'Configuration.Geometry.GeometrySimHCAL_cff,Configuration.Geometry.GeometryRecoHCAL_cff', 'Extended2026D49' : 'Extended2026D49,Extended2026D49Reco', + 'DD4hepExtended2026D49' : 'DD4hepExtended2026D49,DD4hepExtended2026D49Reco', 'Extended2026D50' : 'Extended2026D50,Extended2026D50Reco', 'Extended2026D60' : 'Extended2026D60,Extended2026D60Reco', 'Extended2026D64' : 'Extended2026D64,Extended2026D64Reco', @@ -43,7 +61,11 @@ 'Extended2026D70' : 'Extended2026D70,Extended2026D70Reco', 'Extended2026D71' : 'Extended2026D71,Extended2026D71Reco', 'Extended2026D72' : 'Extended2026D72,Extended2026D72Reco', - 'Extended2026D73' : 'Extended2026D73,Extended2026D73Reco', 'Extended2026D74' : 'Extended2026D74,Extended2026D74Reco', - 'DD4hepExtended2026D49' : 'DD4hepExtended2026D49,DD4hepExtended2026D49Reco', + 'Extended2026D75' : 'Extended2026D75,Extended2026D75Reco', + 'Extended2026D76' : 'Extended2026D76,Extended2026D76Reco', + 'Extended2026D77' : 'Extended2026D77,Extended2026D77Reco', + 'DD4hepExtended2026D77' : 'DD4hepExtended2026D77,DD4hepExtended2026D77Reco', + 'Extended2026D78' : 'Extended2026D78,Extended2026D78Reco', + 'Extended2026D79' : 'Extended2026D79,Extended2026D79Reco', } diff --git a/Configuration/StandardSequences/python/MagneticField_cff.py b/Configuration/StandardSequences/python/MagneticField_cff.py index 96513076ee90b..8278f98863ab5 100644 --- a/Configuration/StandardSequences/python/MagneticField_cff.py +++ b/Configuration/StandardSequences/python/MagneticField_cff.py @@ -5,6 +5,11 @@ import FWCore.ParameterSet.Config as cms from MagneticField.Engine.volumeBasedMagneticFieldFromDB_cfi import * +from MagneticField.Engine.volumeBasedMagneticFieldFromDB_dd4hep_cfi import VolumeBasedMagneticFieldESProducer as _VolumeBasedMagneticFieldESProducer_dd4hep + +from Configuration.ProcessModifiers.dd4hep_cff import dd4hep +dd4hep.toReplaceWith(VolumeBasedMagneticFieldESProducer, _VolumeBasedMagneticFieldESProducer_dd4hep) + # Parabolic parametrized magnetic field used for track building (scaled to nominal map closest to current from runInfo) from MagneticField.ParametrizedEngine.autoParabolicParametrizedField_cfi import ParametrizedMagneticFieldProducer as ParabolicParametrizedMagneticFieldProducer ParabolicParametrizedMagneticFieldProducer.label = "ParabolicMf" diff --git a/Configuration/StandardSequences/python/RawToDigi_cff.py b/Configuration/StandardSequences/python/RawToDigi_cff.py index d0af52de00a47..102e8b1132f71 100644 --- a/Configuration/StandardSequences/python/RawToDigi_cff.py +++ b/Configuration/StandardSequences/python/RawToDigi_cff.py @@ -1,9 +1,10 @@ import FWCore.ParameterSet.Config as cms +from Configuration.ProcessModifiers.gpu_cff import gpu # This object is used to selectively make changes for different running # scenarios. In this case it makes changes for Run 2. -from EventFilter.SiPixelRawToDigi.SiPixelRawToDigi_cfi import * +from EventFilter.SiPixelRawToDigi.siPixelDigis_cff import * from EventFilter.SiStripRawToDigi.SiStripDigis_cfi import * @@ -45,7 +46,7 @@ from EventFilter.CTPPSRawToDigi.ctppsRawToDigi_cff import * RawToDigiTask = cms.Task(L1TRawToDigiTask, - siPixelDigis, + siPixelDigisTask, siStripDigis, ecalDigisTask, ecalPreshowerDigis, @@ -60,10 +61,10 @@ ) RawToDigi = cms.Sequence(RawToDigiTask) -RawToDigiTask_noTk = RawToDigiTask.copyAndExclude([siPixelDigis, siStripDigis]) +RawToDigiTask_noTk = RawToDigiTask.copyAndExclude([siPixelDigisTask, siStripDigis]) RawToDigi_noTk = cms.Sequence(RawToDigiTask_noTk) -RawToDigiTask_pixelOnly = cms.Task(siPixelDigis) +RawToDigiTask_pixelOnly = cms.Task(siPixelDigisTask, scalersRawToDigi) RawToDigi_pixelOnly = cms.Sequence(RawToDigiTask_pixelOnly) RawToDigiTask_ecalOnly = cms.Task(ecalDigisTask, ecalPreshowerDigis, scalersRawToDigi) @@ -73,8 +74,8 @@ RawToDigi_hcalOnly = cms.Sequence(RawToDigiTask_hcalOnly) scalersRawToDigi.scalersInputTag = 'rawDataCollector' -siPixelDigis.InputLabel = 'rawDataCollector' -ecalDigis.InputLabel = 'rawDataCollector' +siPixelDigis.cpu.InputLabel = 'rawDataCollector' +(~gpu).toModify(ecalDigis, InputLabel='rawDataCollector') ecalPreshowerDigis.sourceTag = 'rawDataCollector' hcalDigis.InputLabel = 'rawDataCollector' muonCSCDigis.InputObjects = 'rawDataCollector' diff --git a/Configuration/StandardSequences/python/ReconstructionCosmics_cff.py b/Configuration/StandardSequences/python/ReconstructionCosmics_cff.py index 844abb4bdd6da..96d93684f2ad9 100644 --- a/Configuration/StandardSequences/python/ReconstructionCosmics_cff.py +++ b/Configuration/StandardSequences/python/ReconstructionCosmics_cff.py @@ -2,7 +2,6 @@ # # luminosity # -from RecoLuminosity.LumiProducer.lumiProducer_cff import * from RecoLuminosity.LumiProducer.bunchSpacingProducer_cfi import * # no bunchspacing in cosmics bunchSpacingProducer.overrideBunchSpacing= cms.bool(True) @@ -53,9 +52,9 @@ muonsLocalRecoCosmicsTask = cms.Task(muonlocalrecoTask,muonlocalrecoT0SegTask) muonsLocalRecoCosmics = cms.Sequence(muonsLocalRecoCosmicsTask) -localReconstructionCosmicsTask = cms.Task(bunchSpacingProducer,trackerCosmicsTask,caloCosmicsTask,muonsLocalRecoCosmicsTask,vertexrecoCosmicsTask,lumiProducer) +localReconstructionCosmicsTask = cms.Task(bunchSpacingProducer,trackerCosmicsTask,caloCosmicsTask,muonsLocalRecoCosmicsTask,vertexrecoCosmicsTask) localReconstructionCosmics = cms.Sequence(localReconstructionCosmicsTask) -localReconstructionCosmics_HcalNZSTask = cms.Task(bunchSpacingProducer,trackerCosmicsTask,caloCosmics_HcalNZSTask,muonsLocalRecoCosmicsTask,vertexrecoCosmicsTask,lumiProducer) +localReconstructionCosmics_HcalNZSTask = cms.Task(bunchSpacingProducer,trackerCosmicsTask,caloCosmics_HcalNZSTask,muonsLocalRecoCosmicsTask,vertexrecoCosmicsTask) localReconstructionCosmics_HcalNZS = cms.Sequence(localReconstructionCosmics_HcalNZSTask) diff --git a/Configuration/StandardSequences/python/ReconstructionHeavyIons_cff.py b/Configuration/StandardSequences/python/ReconstructionHeavyIons_cff.py index 9018e59afd835..15826a5c2cf25 100644 --- a/Configuration/StandardSequences/python/ReconstructionHeavyIons_cff.py +++ b/Configuration/StandardSequences/python/ReconstructionHeavyIons_cff.py @@ -31,7 +31,6 @@ from RecoHI.Configuration.Reconstruction_hiPF_cff import * from RecoLocalCalo.Castor.Castor_cff import * from RecoHI.HiEgammaAlgos.HiElectronSequence_cff import * -from RecoLuminosity.LumiProducer.lumiProducer_cff import * #-------------------------------------------------------------------------- from RecoPixelVertexing.PixelLowPtUtilities.siPixelClusterShapeCache_cfi import * diff --git a/Configuration/StandardSequences/python/Reconstruction_cff.py b/Configuration/StandardSequences/python/Reconstruction_cff.py index 4a9f5ee6eaa82..1bc338526c4a6 100644 --- a/Configuration/StandardSequences/python/Reconstruction_cff.py +++ b/Configuration/StandardSequences/python/Reconstruction_cff.py @@ -1,6 +1,5 @@ import FWCore.ParameterSet.Config as cms -from RecoLuminosity.LumiProducer.lumiProducer_cff import * from RecoLuminosity.LumiProducer.bunchSpacingProducer_cfi import * from RecoLocalMuon.Configuration.RecoLocalMuon_cff import * from RecoLocalCalo.Configuration.RecoLocalCalo_cff import * diff --git a/Configuration/StandardSequences/python/Services_cff.py b/Configuration/StandardSequences/python/Services_cff.py index 0365d5f22bf51..ef1da8dec1d59 100644 --- a/Configuration/StandardSequences/python/Services_cff.py +++ b/Configuration/StandardSequences/python/Services_cff.py @@ -14,3 +14,9 @@ def _addCUDAServices(process): from Configuration.ProcessModifiers.gpu_cff import gpu modifyConfigurationStandardSequencesServicesAddCUDAServices_ = gpu.makeProcessModifier(_addCUDAServices) + +# load TritonService when SONIC workflow is enabled +def _addTritonService(process): + process.load("HeterogeneousCore.SonicTriton.TritonService_cff") +from Configuration.ProcessModifiers.enableSonicTriton_cff import enableSonicTriton +modifyConfigurationStandardSequencesServicesAddTritonService_ = enableSonicTriton.makeProcessModifier(_addTritonService) diff --git a/DPGAnalysis/HcalTools/python/remoteMonitoring_LED_IterMethod_cfg.py b/DPGAnalysis/HcalTools/python/remoteMonitoring_LED_IterMethod_cfg.py index c7d9fdaf2e857..6200a1d7ae481 100644 --- a/DPGAnalysis/HcalTools/python/remoteMonitoring_LED_IterMethod_cfg.py +++ b/DPGAnalysis/HcalTools/python/remoteMonitoring_LED_IterMethod_cfg.py @@ -419,14 +419,18 @@ process.p = cms.Path(process.hcalDigis*process.Analyzer) process.MessageLogger = cms.Service("MessageLogger", - categories = cms.untracked.vstring(''), - destinations = cms.untracked.vstring('cout'), - debugModules = cms.untracked.vstring('*'), - cout = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - WARNING = cms.untracked.PSet(limit = cms.untracked.int32(0)) - ) - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + WARNING = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ), + debugModules = cms.untracked.vstring('*') +) diff --git a/DPGAnalysis/SiStripTools/python/MessageLogger_cff.py b/DPGAnalysis/SiStripTools/python/MessageLogger_cff.py index 4b578036ee682..1abc0f27bc22c 100644 --- a/DPGAnalysis/SiStripTools/python/MessageLogger_cff.py +++ b/DPGAnalysis/SiStripTools/python/MessageLogger_cff.py @@ -4,7 +4,7 @@ #---------------------------------------------------------------- -MessageLogger.cout.placeholder = cms.untracked.bool(False) +MessageLogger.cout.enable = True MessageLogger.cout.threshold = cms.untracked.string("INFO") MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -13,7 +13,7 @@ reportEvery = cms.untracked.int32(10000) ) -MessageLogger.cerr.placeholder = cms.untracked.bool(False) +MessageLogger.cerr.enable = True MessageLogger.cerr.threshold = cms.untracked.string("WARNING") MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/python/filtertest/MessageLogger_cff.py b/DPGAnalysis/SiStripTools/python/filtertest/MessageLogger_cff.py index 92107a3f8fb71..ad1d535153023 100644 --- a/DPGAnalysis/SiStripTools/python/filtertest/MessageLogger_cff.py +++ b/DPGAnalysis/SiStripTools/python/filtertest/MessageLogger_cff.py @@ -2,23 +2,19 @@ from FWCore.MessageLogger.MessageLogger_cfi import MessageLogger -MessageLogger.categories.append("L1AcceptBunchCrossingNoCollection") -MessageLogger.categories.append("EventWithHistoryFilterConfiguration") - -MessageLogger.infos.placeholder = cms.untracked.bool(False) -MessageLogger.infos.threshold = cms.untracked.string("INFO") -MessageLogger.infos.default = cms.untracked.PSet( - limit = cms.untracked.int32(10000000) - ) -MessageLogger.infos.FwkReport = cms.untracked.PSet( - reportEvery = cms.untracked.int32(10000) - ) -MessageLogger.infos.L1AcceptBunchCrossingNoCollection = cms.untracked.PSet( - limit = cms.untracked.int32(100) - ) -MessageLogger.cerr.L1AcceptBunchCrossingNoCollection = cms.untracked.PSet( - limit = cms.untracked.int32(100) +MessageLogger.EventWithHistoryFilterConfiguration = dict() +MessageLogger.files.infos = dict( + threshold = cms.untracked.string("INFO"), + default = cms.untracked.PSet( + limit = cms.untracked.int32(10000000) + ), + FwkReport = cms.untracked.PSet( + reportEvery = cms.untracked.int32(10000) + ), + L1AcceptBunchCrossingNoCollection = cms.untracked.PSet( + limit = cms.untracked.int32(100) ) +) MessageLogger.cerr.threshold = cms.untracked.string("WARNING") diff --git a/DPGAnalysis/SiStripTools/test/BigEventsDebugger_cfg.py b/DPGAnalysis/SiStripTools/test/BigEventsDebugger_cfg.py index 5d456624591cb..d7aa89236ebcb 100644 --- a/DPGAnalysis/SiStripTools/test/BigEventsDebugger_cfg.py +++ b/DPGAnalysis/SiStripTools/test/BigEventsDebugger_cfg.py @@ -24,7 +24,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("WARNING") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -33,7 +33,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/ByMultiplicityFilterTest_cfg.py b/DPGAnalysis/SiStripTools/test/ByMultiplicityFilterTest_cfg.py index 6ac7768c70427..65b7ebc711399 100644 --- a/DPGAnalysis/SiStripTools/test/ByMultiplicityFilterTest_cfg.py +++ b/DPGAnalysis/SiStripTools/test/ByMultiplicityFilterTest_cfg.py @@ -24,7 +24,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -33,7 +33,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/CondDBWriter_SiStripConfObjectAPVPhaseOffsets_cfg.py b/DPGAnalysis/SiStripTools/test/CondDBWriter_SiStripConfObjectAPVPhaseOffsets_cfg.py index 15956ca6f4e76..bff2e9adbab0e 100644 --- a/DPGAnalysis/SiStripTools/test/CondDBWriter_SiStripConfObjectAPVPhaseOffsets_cfg.py +++ b/DPGAnalysis/SiStripTools/test/CondDBWriter_SiStripConfObjectAPVPhaseOffsets_cfg.py @@ -8,11 +8,17 @@ process = cms.Process("CondDBWriterAPVPhaseOffsets") -process.MessageLogger = cms.Service( - "MessageLogger", +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('siStripConfObjectDummyDBWriter'), - threshold = cms.untracked.string('INFO'), - destinations = cms.untracked.vstring('ConfObjectBuilder.log') + files = cms.untracked.PSet( + ConfObjectBuilder = cms.untracked.PSet( + + ) + ), + threshold = cms.untracked.string('INFO') ) process.maxEvents = cms.untracked.PSet( diff --git a/DPGAnalysis/SiStripTools/test/MultiplicityMonitor_cfg.py b/DPGAnalysis/SiStripTools/test/MultiplicityMonitor_cfg.py index 620fbff3f47be..2ad8e34df7113 100644 --- a/DPGAnalysis/SiStripTools/test/MultiplicityMonitor_cfg.py +++ b/DPGAnalysis/SiStripTools/test/MultiplicityMonitor_cfg.py @@ -35,7 +35,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -44,7 +44,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/MultiplicityProducerTest_cfg.py b/DPGAnalysis/SiStripTools/test/MultiplicityProducerTest_cfg.py index 901352a89f2ae..149725a253aeb 100644 --- a/DPGAnalysis/SiStripTools/test/MultiplicityProducerTest_cfg.py +++ b/DPGAnalysis/SiStripTools/test/MultiplicityProducerTest_cfg.py @@ -34,7 +34,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -43,7 +43,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/MultiplicityProducerTest_pixelphase1_cfg.py b/DPGAnalysis/SiStripTools/test/MultiplicityProducerTest_pixelphase1_cfg.py index 2d44208c5e09f..0c634430551ab 100644 --- a/DPGAnalysis/SiStripTools/test/MultiplicityProducerTest_pixelphase1_cfg.py +++ b/DPGAnalysis/SiStripTools/test/MultiplicityProducerTest_pixelphase1_cfg.py @@ -34,7 +34,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -43,7 +43,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/OOTmultiplicity_cfg.py b/DPGAnalysis/SiStripTools/test/OOTmultiplicity_cfg.py index 16a296cc3c76b..82678811cd040 100644 --- a/DPGAnalysis/SiStripTools/test/OOTmultiplicity_cfg.py +++ b/DPGAnalysis/SiStripTools/test/OOTmultiplicity_cfg.py @@ -27,8 +27,8 @@ #---------------------------------------------------------------- -process.MessageLogger.categories.extend(cms.vstring("CondDBESSource")) -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) + +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -40,7 +40,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_cfg.py b/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_cfg.py index 48adf59ca5172..29db344081eb5 100644 --- a/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_cfg.py +++ b/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_cfg.py @@ -52,18 +52,14 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations.extend(cms.vstring("detids")) -process.MessageLogger.categories.extend(cms.vstring("GeometricDetBuilding","DuplicateHitFinder","BuildingTrackerDetId", - "SubDetectorGeometricDetType","BuildingGeomDetUnits","LookingForFirstStrip", - "BuildingSubDetTypeMap","SubDetTypeMapContent","NumberOfLayers","IsThereTest")) -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = True process.MessageLogger.cout.threshold = cms.untracked.string("INFO") #process.MessageLogger.cout.threshold = cms.untracked.string("WARNING") #process.MessageLogger.debugModules = cms.untracked.vstring("*") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(0) ) -process.MessageLogger.detids = cms.untracked.PSet( +process.MessageLogger.files =dict(detids = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -95,7 +91,8 @@ limit = cms.untracked.int32(100000000) ), threshold = cms.untracked.string("DEBUG") - ) + ) +) process.MessageLogger.cout.DuplicateHitFinder = cms.untracked.PSet( limit = cms.untracked.int32(100000000) ) @@ -106,7 +103,6 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_phase2_cfg.py b/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_phase2_cfg.py index 8f4f20d1ec671..297d811e9d1b1 100644 --- a/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_phase2_cfg.py +++ b/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_phase2_cfg.py @@ -34,17 +34,13 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations.extend(cms.vstring("detids")) -process.MessageLogger.categories.extend(cms.vstring("GeometricDetBuilding","DuplicateHitFinder","BuildingTrackerDetId", - "SubDetectorGeometricDetType","BuildingGeomDetUnits","LookingForFirstStrip", - "BuildingSubDetTypeMap","SubDetTypeMapContent","NumberOfLayers","IsThereTest")) -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = True process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.debugModules = cms.untracked.vstring("*") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(0) ) -process.MessageLogger.detids = cms.untracked.PSet( +process.MessageLogger.files = dict( detids = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -77,6 +73,7 @@ ), threshold = cms.untracked.string("DEBUG") ) +) process.MessageLogger.cout.DuplicateHitFinder = cms.untracked.PSet( limit = cms.untracked.int32(100000000) ) @@ -87,7 +84,6 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_pixelphase1_cfg.py b/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_pixelphase1_cfg.py index 344dd1c53c2df..8c6f83a43a29d 100644 --- a/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_pixelphase1_cfg.py +++ b/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_pixelphase1_cfg.py @@ -34,18 +34,14 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations.extend(cms.vstring("detids")) -process.MessageLogger.categories.extend(cms.vstring("GeometricDetBuilding","DuplicateHitFinder","BuildingTrackerDetId", - "SubDetectorGeometricDetType","BuildingGeomDetUnits","LookingForFirstStrip", - "BuildingSubDetTypeMap","SubDetTypeMapContent","NumberOfLayers","IsThereTest")) -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = True process.MessageLogger.cout.threshold = cms.untracked.string("INFO") #process.MessageLogger.cout.threshold = cms.untracked.string("WARNING") process.MessageLogger.debugModules = cms.untracked.vstring("*") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(0) ) -process.MessageLogger.detids = cms.untracked.PSet( +process.MessageLogger.files = dict(detids = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -78,6 +74,7 @@ ), threshold = cms.untracked.string("DEBUG") ) +) process.MessageLogger.cout.DuplicateHitFinder = cms.untracked.PSet( limit = cms.untracked.int32(100000000) ) @@ -88,7 +85,6 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_vtxpos_cfg.py b/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_vtxpos_cfg.py index cefea5bae631c..bec1bd6b21e4d 100644 --- a/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_vtxpos_cfg.py +++ b/DPGAnalysis/SiStripTools/test/OccupancyPlotsTest_vtxpos_cfg.py @@ -34,7 +34,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("WARNING") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -43,7 +43,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/TIDTECInnerRingInvestigator_cfg.py b/DPGAnalysis/SiStripTools/test/TIDTECInnerRingInvestigator_cfg.py index 3f8c8f92b65d9..2d2dd0736e465 100644 --- a/DPGAnalysis/SiStripTools/test/TIDTECInnerRingInvestigator_cfg.py +++ b/DPGAnalysis/SiStripTools/test/TIDTECInnerRingInvestigator_cfg.py @@ -24,7 +24,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -33,7 +33,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_GR09_cfg.py b/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_GR09_cfg.py index 914a7ec79cb3b..be26ce0f44e6b 100644 --- a/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_GR09_cfg.py +++ b/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_GR09_cfg.py @@ -4,9 +4,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations.append('infos') -process.MessageLogger.infos = cms.untracked.PSet( - placeholder = cms.untracked.bool(False), +process.MessageLogger.files.infos = cms.untracked.PSet( threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_db_cfg.py b/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_db_cfg.py index f27c03b560068..1fdbcf794e9c0 100644 --- a/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_db_cfg.py +++ b/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_db_cfg.py @@ -16,9 +16,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations.append('infos') -process.MessageLogger.infos = cms.untracked.PSet( - placeholder = cms.untracked.bool(False), +process.MessageLogger.files.infos = cms.untracked.PSet( threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_dbfile_cfg.py b/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_dbfile_cfg.py index b013ce6823872..fabd3c919143e 100644 --- a/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_dbfile_cfg.py +++ b/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_dbfile_cfg.py @@ -4,9 +4,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations.append('infos') -process.MessageLogger.infos = cms.untracked.PSet( - placeholder = cms.untracked.bool(False), +process.MessageLogger.files.infos = cms.untracked.PSet( threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_fakesource_cfg.py b/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_fakesource_cfg.py index 7bea95c1be5eb..c99645e7e8e83 100644 --- a/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_fakesource_cfg.py +++ b/DPGAnalysis/SiStripTools/test/apvcyclephaseproducer_test_fakesource_cfg.py @@ -4,9 +4,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations.append('infos') -process.MessageLogger.infos = cms.untracked.PSet( - placeholder = cms.untracked.bool(False), +process.MessageLogger.files.infos = cms.untracked.PSet( threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/apvphaseproducertest_cfg.py b/DPGAnalysis/SiStripTools/test/apvphaseproducertest_cfg.py index bf9ed53020b3d..338a3500f4d18 100644 --- a/DPGAnalysis/SiStripTools/test/apvphaseproducertest_cfg.py +++ b/DPGAnalysis/SiStripTools/test/apvphaseproducertest_cfg.py @@ -27,7 +27,7 @@ #---------------------------------------------------------------- -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -36,7 +36,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/apvshotanalyzer_cfg.py b/DPGAnalysis/SiStripTools/test/apvshotanalyzer_cfg.py index 45fa482f3db0f..29f79c8d0f40a 100644 --- a/DPGAnalysis/SiStripTools/test/apvshotanalyzer_cfg.py +++ b/DPGAnalysis/SiStripTools/test/apvshotanalyzer_cfg.py @@ -24,7 +24,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -33,7 +33,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/bsvsbpix_cfg.py b/DPGAnalysis/SiStripTools/test/bsvsbpix_cfg.py index 39cbeec4b498f..12fbde7da3c08 100644 --- a/DPGAnalysis/SiStripTools/test/bsvsbpix_cfg.py +++ b/DPGAnalysis/SiStripTools/test/bsvsbpix_cfg.py @@ -24,7 +24,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -33,7 +33,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/commonmodeanalyzer_cfg.py b/DPGAnalysis/SiStripTools/test/commonmodeanalyzer_cfg.py index ae6fe2e52336a..4caca131ced56 100644 --- a/DPGAnalysis/SiStripTools/test/commonmodeanalyzer_cfg.py +++ b/DPGAnalysis/SiStripTools/test/commonmodeanalyzer_cfg.py @@ -24,7 +24,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -33,7 +33,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/cosmicstracks_cfg.py b/DPGAnalysis/SiStripTools/test/cosmicstracks_cfg.py index 672d8ed6f8ce5..921ade7507cd1 100644 --- a/DPGAnalysis/SiStripTools/test/cosmicstracks_cfg.py +++ b/DPGAnalysis/SiStripTools/test/cosmicstracks_cfg.py @@ -25,7 +25,7 @@ #---------------------------------------------------------------- -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -34,7 +34,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/eventwithhistoryfiltertest_cfg.py b/DPGAnalysis/SiStripTools/test/eventwithhistoryfiltertest_cfg.py index f6da7a1f065c7..4b066f476e303 100644 --- a/DPGAnalysis/SiStripTools/test/eventwithhistoryfiltertest_cfg.py +++ b/DPGAnalysis/SiStripTools/test/eventwithhistoryfiltertest_cfg.py @@ -24,7 +24,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -33,7 +33,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/manyfederrors_cfg.py b/DPGAnalysis/SiStripTools/test/manyfederrors_cfg.py index 73de7d5586bc5..220aad9bd6862 100644 --- a/DPGAnalysis/SiStripTools/test/manyfederrors_cfg.py +++ b/DPGAnalysis/SiStripTools/test/manyfederrors_cfg.py @@ -24,7 +24,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("DEBUG") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -33,7 +33,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/overlapproblem_EndCapsOTPhase2_cfg.py b/DPGAnalysis/SiStripTools/test/overlapproblem_EndCapsOTPhase2_cfg.py index 0943e7937fe0c..8e2585ad4bb65 100644 --- a/DPGAnalysis/SiStripTools/test/overlapproblem_EndCapsOTPhase2_cfg.py +++ b/DPGAnalysis/SiStripTools/test/overlapproblem_EndCapsOTPhase2_cfg.py @@ -19,19 +19,16 @@ process.load("DPGAnalysis.SiStripTools.processOptions_cff") process.load("DPGAnalysis.SiStripTools.MessageLogger_cff") -process.MessageLogger.destinations.extend(cms.vstring("tkdetlayers")) -process.MessageLogger.categories.extend(cms.vstring("NoCluster","ClusterFound","TkDetLayers","DiskNames", - "BuildingPixelForwardLayer","BuildingPhase2OTECRingedLayer", - "BuildingPixelBarrel","BuildingPixelBarrelLayer","BuildingPhase2OTBarrelLayer","Phase2OTBarrelRodRadii")) -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = True #process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.threshold = cms.untracked.string("DEBUG") process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.tkdetlayers = cms.untracked.PSet ( +process.MessageLogger.files = dict(tkdetlayers = cms.untracked.PSet ( threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), TkDetLayers = cms.untracked.PSet(limit = cms.untracked.int32(100000)) ) +) process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(0) ) diff --git a/DPGAnalysis/SiStripTools/test/seedmultiplicity_cfg.py b/DPGAnalysis/SiStripTools/test/seedmultiplicity_cfg.py index 11ed01ba01524..3de9779077c8a 100644 --- a/DPGAnalysis/SiStripTools/test/seedmultiplicity_cfg.py +++ b/DPGAnalysis/SiStripTools/test/seedmultiplicity_cfg.py @@ -24,7 +24,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("WARNING") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -33,7 +33,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/seedmultiplicity_highmult_cfg.py b/DPGAnalysis/SiStripTools/test/seedmultiplicity_highmult_cfg.py index 1b8f04d45d6a4..47eb41ba37d88 100644 --- a/DPGAnalysis/SiStripTools/test/seedmultiplicity_highmult_cfg.py +++ b/DPGAnalysis/SiStripTools/test/seedmultiplicity_highmult_cfg.py @@ -24,7 +24,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("WARNING") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -33,7 +33,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/seedmultiplicity_test_cfg.py b/DPGAnalysis/SiStripTools/test/seedmultiplicity_test_cfg.py index 16500382bbdc4..e39c0a3352c5f 100644 --- a/DPGAnalysis/SiStripTools/test/seedmultiplicity_test_cfg.py +++ b/DPGAnalysis/SiStripTools/test/seedmultiplicity_test_cfg.py @@ -24,7 +24,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -33,7 +33,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(True) +process.MessageLogger.cerr.enable = cms.untracked.bool(False) #process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") #process.MessageLogger.cerr.default = cms.untracked.PSet( # limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/ssqhistorytest_cfg.py b/DPGAnalysis/SiStripTools/test/ssqhistorytest_cfg.py index ed0855ad61a22..9b9172e9ec651 100644 --- a/DPGAnalysis/SiStripTools/test/ssqhistorytest_cfg.py +++ b/DPGAnalysis/SiStripTools/test/ssqhistorytest_cfg.py @@ -27,7 +27,7 @@ #---------------------------------------------------------------- -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -36,7 +36,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/ssqhistorytest_fakesource_cfg.py b/DPGAnalysis/SiStripTools/test/ssqhistorytest_fakesource_cfg.py index a71489f2b2c28..131808d630d85 100644 --- a/DPGAnalysis/SiStripTools/test/ssqhistorytest_fakesource_cfg.py +++ b/DPGAnalysis/SiStripTools/test/ssqhistorytest_fakesource_cfg.py @@ -32,7 +32,7 @@ #---------------------------------------------------------------- -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -41,7 +41,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/SiStripTools/test/trackerdpganalysis_cfg.py b/DPGAnalysis/SiStripTools/test/trackerdpganalysis_cfg.py index 9664cc018e064..a865d98ac6517 100644 --- a/DPGAnalysis/SiStripTools/test/trackerdpganalysis_cfg.py +++ b/DPGAnalysis/SiStripTools/test/trackerdpganalysis_cfg.py @@ -4,9 +4,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations.append('infos') -process.MessageLogger.infos = cms.untracked.PSet( - placeholder = cms.untracked.bool(False), +process.MessageLogger.files.infos = cms.untracked.PSet( threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/DPGAnalysis/Skims/interface/TriggerMatchProducer.h b/DPGAnalysis/Skims/interface/TriggerMatchProducer.h index 74e630be275ff..1d7f62ffa77a2 100644 --- a/DPGAnalysis/Skims/interface/TriggerMatchProducer.h +++ b/DPGAnalysis/Skims/interface/TriggerMatchProducer.h @@ -6,30 +6,35 @@ // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/Candidate/interface/ShallowCloneCandidate.h" -#include "HLTrigger/HLTcore/interface/HLTPrescaleProvider.h" - -#include "DataFormats/HLTReco/interface/TriggerObject.h" #include "DataFormats/Common/interface/TriggerResults.h" #include "DataFormats/HLTReco/interface/TriggerEvent.h" +#include "DataFormats/HLTReco/interface/TriggerObject.h" +#include "DataFormats/Math/interface/deltaR.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HLTrigger/HLTcore/interface/HLTConfigProvider.h" +#include "HLTrigger/HLTcore/interface/HLTPrescaleProvider.h" #include +#include +#include +#include // forward declarations template -class TriggerMatchProducer : public edm::EDProducer { +class TriggerMatchProducer : public edm::stream::EDProducer<> { public: explicit TriggerMatchProducer(const edm::ParameterSet&); ~TriggerMatchProducer() override; private: void beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) override; - void beginJob() override; void produce(edm::Event&, const edm::EventSetup&) override; - void endJob() override; // ----------member data -------------------------- @@ -48,5 +53,200 @@ class TriggerMatchProducer : public edm::EDProducer { bool changed_; HLTPrescaleProvider hltPrescaleProvider_; }; -#include "DPGAnalysis/Skims/src/TriggerMatchProducer.icc" + +template +TriggerMatchProducer::TriggerMatchProducer(const edm::ParameterSet& iConfig) + : hltPrescaleProvider_(iConfig, consumesCollector(), *this) { + _inputProducer = iConfig.template getParameter("InputProducer"); + _inputProducerToken = consumes >(_inputProducer); + + // **************** Trigger ******************* // + const edm::InputTag dTriggerEventTag("hltTriggerSummaryAOD", "", "HLT"); + triggerEventTag_ = iConfig.getUntrackedParameter("triggerEventTag", dTriggerEventTag); + triggerEventToken_ = consumes(triggerEventTag_); + + const edm::InputTag dTriggerResults("TriggerResults", "", "HLT"); + // By default, trigger results are labeled "TriggerResults" with process name "HLT" in the event. + triggerResultsTag_ = iConfig.getUntrackedParameter("triggerResultsTag", dTriggerResults); + triggerResultsToken_ = consumes(triggerResultsTag_); + + // const edm::InputTag dHLTTag("HLT_Ele15_LW_L1R", "","HLT8E29"); + hltTag_ = iConfig.getUntrackedParameter("hltTag", "HLT_Ele*"); + + delRMatchingCut_ = iConfig.getUntrackedParameter("triggerDelRMatch", 0.30); + // ******************************************** // + //Trigger path VS l1 trigger filter. Trigger Path is default. + // isFilter_ = iConfig.getUntrackedParameter("isTriggerFilter",false); + // printIndex_ = iConfig.getUntrackedParameter("verbose",false); + + produces >(); + produces >("R"); + + filterName_ = ""; +} + +template +TriggerMatchProducer::~TriggerMatchProducer() {} + +// +// member functions +// + +// ------------ method called to produce the data ------------ +template +void TriggerMatchProducer::produce(edm::Event& event, const edm::EventSetup& eventSetup) { + using namespace std; + using namespace edm; + using namespace reco; + using namespace trigger; + + HLTConfigProvider const& hltConfig = hltPrescaleProvider_.hltConfigProvider(); + + // Create the output collection + std::unique_ptr > outColRef(new edm::RefToBaseVector); + std::unique_ptr > outColPtr(new edm::PtrVector); + + // Get the input collection + edm::Handle > candHandle; + try { + event.getByToken(_inputProducerToken, candHandle); + } catch (cms::Exception& ex) { + edm::LogError("TriggerMatchProducer") << "Error! Can't get collection: " << _inputProducer; + throw ex; + } + + // Trigger Info + edm::Handle trgEvent; + event.getByToken(triggerEventToken_, trgEvent); + edm::Handle pTrgResults; + event.getByToken(triggerResultsToken_, pTrgResults); + + //gracefully choose the single appropriate HLT path from the list of desired paths + std::vector activeHLTPathsInThisEvent = hltConfig.triggerNames(); + std::map triggerInMenu; + std::map triggerUnprescaled; + // for (std::vector::const_iterator iMyHLT = hltTags_.begin(); + // iMyHLT != hltTags_.end(); ++iMyHLT) { + // if ( triggerInMenu.find((*iMyHLT).label()) == triggerInMenu.end() ) + // triggerInMenu[(*iMyHLT).label()] = false; + // if ( triggerUnprescaled.find((*iMyHLT).label()) == triggerUnprescaled.end() ) + // triggerUnprescaled[(*iMyHLT).label()] = false; + // } + for (std::vector::const_iterator iHLT = activeHLTPathsInThisEvent.begin(); + iHLT != activeHLTPathsInThisEvent.end(); + ++iHLT) { + // cout << "######## " << *iHLT << endl; + + if (TString(*iHLT).Contains(TRegexp(hltTag_))) { + triggerInMenu[*iHLT] = true; + if (hltPrescaleProvider_.prescaleValue(event, eventSetup, *iHLT) == 1) + triggerUnprescaled[*iHLT] = true; + } + } + + // Some sanity checks + if (not trgEvent.isValid()) { + edm::LogInfo("info") << "******** Following Trigger Summary Object Not Found: " << triggerEventTag_; + + event.put(std::move(outColRef), "R"); + event.put(std::move(outColPtr)); + return; + } + + //--------------------------------------------------------------------------- + + edm::InputTag filterTag; + // loop over these objects to see whether they match + const trigger::TriggerObjectCollection& TOC(trgEvent->getObjects()); + + std::vector index; + std::vector filters; + // if(isFilter_){ + //----------------------------------------------------------------------- + for (std::map::const_iterator iMyHLT = triggerInMenu.begin(); iMyHLT != triggerInMenu.end(); + ++iMyHLT) { + if (!(iMyHLT->second && triggerUnprescaled[iMyHLT->first])) + continue; + + int triggerIndex = -1; + edm::InputTag filterTag; + try { + filters = hltConfig.moduleLabels(iMyHLT->first); + triggerIndex = hltConfig.triggerIndex(iMyHLT->first); + } catch (std::exception const&) { + cout << "bad trigger\n"; + } + // Results from TriggerResults product + if (triggerIndex == -1 || !(pTrgResults->wasrun(triggerIndex)) || !(pTrgResults->accept(triggerIndex)) || + (pTrgResults->error(triggerIndex))) { + continue; + } + + for (std::vector::iterator filter = filters.begin(); filter != filters.end(); ++filter) { + edm::InputTag testTag(*filter, "", triggerEventTag_.process()); + int testindex = trgEvent->filterIndex(testTag); + if (!(testindex >= trgEvent->sizeFilters())) { + filterName_ = *filter; + filterTag = testTag; + } + } + + //using last filter tag + index.push_back(trgEvent->filterIndex(filterTag)); + // std::cout << "TrgPath" << iMyHLT->first << "hltTag_.label() " << + // filterTag.label() << " filter name " << + // filterName_ << " sizeFilters " << + // trgEvent->sizeFilters() << std::endl; + } + + // Loop over the candidate collection + edm::PtrVector ptrVect; + edm::RefToBaseVector refs; + for (size_t i = 0; i < candHandle->size(); ++i) { + ptrVect.push_back(candHandle->ptrAt(i)); + refs.push_back(candHandle->refAt(i)); + } + // find how many objects there are + unsigned int counter = 0; + for (typename edm::View::const_iterator j = candHandle->begin(); j != candHandle->end(); ++j, ++counter) { + bool hltTrigger = false; + for (unsigned int idx = 0; idx < index.size(); ++idx) { + if (hltTrigger) + continue; + const trigger::Keys& KEYS(trgEvent->filterKeys(index[idx])); + const size_type nK(KEYS.size()); + // Get cut decision for each candidate + // Did this candidate cause a HLT trigger? + + for (int ipart = 0; ipart != nK; ++ipart) { + const trigger::TriggerObject& TO = TOC[KEYS[ipart]]; + double dRval = deltaR(j->eta(), j->phi(), TO.eta(), TO.phi()); + hltTrigger = dRval < delRMatchingCut_; + if (hltTrigger) + break; + } + } + + if (hltTrigger) { + outColRef->push_back(refs[counter]); + outColPtr->push_back(ptrVect[counter]); + } + } + event.put(std::move(outColRef), "R"); + event.put(std::move(outColPtr)); +} + +// ---- method called once each job just before starting event loop --- +template +void TriggerMatchProducer::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) { + // std::cout << "calling init(" << "iRun" << ", " << "iSetup" << ", " << triggerEventTag_.process() << ", " << "changed_" << ") in beginRun()" << std::endl; + if (!hltPrescaleProvider_.init(iRun, iSetup, triggerEventTag_.process(), changed_)) { + edm::LogError("TriggerMatchProducer") << "Error! Can't initialize HLTConfigProvider"; + throw cms::Exception("HLTConfigProvider::init() returned non 0"); + } + // HLTConfigProvider const& hltConfig = hltPrescaleProvider_.hltConfigProvider(); + // if(printIndex_ && changed_) + // std::cout << "HLT configuration changed !" << std::endl; + // std::vector filters = hltConfig.moduleLabels( hltTag_.label() ); +} #endif diff --git a/DPGAnalysis/Skims/python/BeamSplash_cfg.py b/DPGAnalysis/Skims/python/BeamSplash_cfg.py index a562e3f7ae4b8..b37eb53f2657e 100644 --- a/DPGAnalysis/Skims/python/BeamSplash_cfg.py +++ b/DPGAnalysis/Skims/python/BeamSplash_cfg.py @@ -4,8 +4,8 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") # activate the following lines to get some output -#process.MessageLogger.destinations = cms.untracked.vstring("cout") -#process.MessageLogger.cout = cms.untracked.PSet(threshold = cms.untracked.string("INFO")) +#process.MessageLogger.cerr.enable = False +#process.MessageLogger.cout = dict(enable = True, threshold = "INFO") process.skimming = cms.EDFilter("BeamSplash", energycuttot = cms.untracked.double(1000.0), diff --git a/DPGAnalysis/Skims/python/ECALActivity_cfg.py b/DPGAnalysis/Skims/python/ECALActivity_cfg.py index dc922cf652e14..0e78b5b141bd3 100644 --- a/DPGAnalysis/Skims/python/ECALActivity_cfg.py +++ b/DPGAnalysis/Skims/python/ECALActivity_cfg.py @@ -4,8 +4,8 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") # activate the following lines to get some output -#process.MessageLogger.destinations = cms.untracked.vstring("cout") -#process.MessageLogger.cout = cms.untracked.PSet(threshold = cms.untracked.string("INFO")) +#process.MessageLogger.cerr.enable = False +#process.MessageLogger.cout = dict(enable = True, threshold = "INFO") process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) diff --git a/DPGAnalysis/Skims/python/EcalTangentSkim_cfg.py b/DPGAnalysis/Skims/python/EcalTangentSkim_cfg.py index 4a270d687783e..176368748a063 100644 --- a/DPGAnalysis/Skims/python/EcalTangentSkim_cfg.py +++ b/DPGAnalysis/Skims/python/EcalTangentSkim_cfg.py @@ -4,9 +4,15 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger = cms.Service( - "MessageLogger", - destinations = cms.untracked.vstring('output.txt') +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + files = cms.untracked.PSet( + output = cms.untracked.PSet( + extension = cms.untracked.string('txt') + ) + ) ) process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) diff --git a/DPGAnalysis/Skims/python/bsc_activity_cfg.py b/DPGAnalysis/Skims/python/bsc_activity_cfg.py index d77916b636d32..eac0a18a5cc95 100644 --- a/DPGAnalysis/Skims/python/bsc_activity_cfg.py +++ b/DPGAnalysis/Skims/python/bsc_activity_cfg.py @@ -4,8 +4,8 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") # activate the following lines to get some output -#process.MessageLogger.destinations = cms.untracked.vstring("cout") -#process.MessageLogger.cout = cms.untracked.PSet(threshold = cms.untracked.string("INFO")) +#process.MessageLogger.cerr.enable = False +#process.MessageLogger.cout = dict(enable = True, threshold = "INFO") process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) diff --git a/DPGAnalysis/Skims/python/bscnobeamhalo_cfg.py b/DPGAnalysis/Skims/python/bscnobeamhalo_cfg.py index 7c583dd48f792..3c3bb073a00e4 100644 --- a/DPGAnalysis/Skims/python/bscnobeamhalo_cfg.py +++ b/DPGAnalysis/Skims/python/bscnobeamhalo_cfg.py @@ -4,8 +4,8 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") # activate the following lines to get some output -#process.MessageLogger.destinations = cms.untracked.vstring("cout") -#process.MessageLogger.cout = cms.untracked.PSet(threshold = cms.untracked.string("INFO")) +#process.MessageLogger.cerr.enable = False +#process.MessageLogger.cout = dict(enable = True, threshold = "INFO") process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) diff --git a/DPGAnalysis/Skims/src/JetHTJetPlusHOFilter.cc b/DPGAnalysis/Skims/src/JetHTJetPlusHOFilter.cc index 53893fb5a2709..2631ca34ba595 100644 --- a/DPGAnalysis/Skims/src/JetHTJetPlusHOFilter.cc +++ b/DPGAnalysis/Skims/src/JetHTJetPlusHOFilter.cc @@ -22,7 +22,7 @@ Skimming of JetHT data set for the study of HO absolute weight calculation // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" +#include "FWCore/Framework/interface/stream/EDFilter.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -38,7 +38,7 @@ using namespace std; using namespace edm; using namespace reco; -class JetHTJetPlusHOFilter : public edm::EDFilter { +class JetHTJetPlusHOFilter : public edm::stream::EDFilter<> { public: explicit JetHTJetPlusHOFilter(const edm::ParameterSet&); ~JetHTJetPlusHOFilter() override; diff --git a/DPGAnalysis/Skims/src/LogErrorEventFilter.cc b/DPGAnalysis/Skims/src/LogErrorEventFilter.cc index 950f2e8a7021e..141b2378e8f71 100644 --- a/DPGAnalysis/Skims/src/LogErrorEventFilter.cc +++ b/DPGAnalysis/Skims/src/LogErrorEventFilter.cc @@ -16,7 +16,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/MessageLogger/interface/ErrorSummaryEntry.h" +#include "DataFormats/Common/interface/ErrorSummaryEntry.h" #include #include diff --git a/DPGAnalysis/Skims/src/TriggerMatchProducer.icc b/DPGAnalysis/Skims/src/TriggerMatchProducer.icc deleted file mode 100644 index 4999e588cb0c2..0000000000000 --- a/DPGAnalysis/Skims/src/TriggerMatchProducer.icc +++ /dev/null @@ -1,212 +0,0 @@ -#include -#include "DataFormats/Math/interface/deltaR.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "HLTrigger/HLTcore/interface/HLTConfigProvider.h" -#include - -#include -#include - -template -TriggerMatchProducer::TriggerMatchProducer(const edm::ParameterSet& iConfig) - : hltPrescaleProvider_(iConfig, consumesCollector(), *this) { - _inputProducer = iConfig.template getParameter("InputProducer"); - _inputProducerToken = consumes >(_inputProducer); - - // **************** Trigger ******************* // - const edm::InputTag dTriggerEventTag("hltTriggerSummaryAOD", "", "HLT"); - triggerEventTag_ = iConfig.getUntrackedParameter("triggerEventTag", dTriggerEventTag); - triggerEventToken_ = consumes(triggerEventTag_); - - const edm::InputTag dTriggerResults("TriggerResults", "", "HLT"); - // By default, trigger results are labeled "TriggerResults" with process name "HLT" in the event. - triggerResultsTag_ = iConfig.getUntrackedParameter("triggerResultsTag", dTriggerResults); - triggerResultsToken_ = consumes(triggerResultsTag_); - - // const edm::InputTag dHLTTag("HLT_Ele15_LW_L1R", "","HLT8E29"); - hltTag_ = iConfig.getUntrackedParameter("hltTag", "HLT_Ele*"); - - delRMatchingCut_ = iConfig.getUntrackedParameter("triggerDelRMatch", 0.30); - // ******************************************** // - //Trigger path VS l1 trigger filter. Trigger Path is default. - // isFilter_ = iConfig.getUntrackedParameter("isTriggerFilter",false); - // printIndex_ = iConfig.getUntrackedParameter("verbose",false); - - produces >(); - produces >("R"); -} - -template -TriggerMatchProducer::~TriggerMatchProducer() {} - -// -// member functions -// - -// ------------ method called to produce the data ------------ -template -void TriggerMatchProducer::produce(edm::Event& event, const edm::EventSetup& eventSetup) { - using namespace std; - using namespace edm; - using namespace reco; - using namespace trigger; - - HLTConfigProvider const& hltConfig = hltPrescaleProvider_.hltConfigProvider(); - - // Create the output collection - std::unique_ptr > outColRef(new edm::RefToBaseVector); - std::unique_ptr > outColPtr(new edm::PtrVector); - - // Get the input collection - edm::Handle > candHandle; - try { - event.getByToken(_inputProducerToken, candHandle); - } catch (cms::Exception& ex) { - edm::LogError("TriggerMatchProducer") << "Error! Can't get collection: " << _inputProducer; - throw ex; - } - - // Trigger Info - edm::Handle trgEvent; - event.getByToken(triggerEventToken_, trgEvent); - edm::Handle pTrgResults; - event.getByToken(triggerResultsToken_, pTrgResults); - - //gracefully choose the single appropriate HLT path from the list of desired paths - std::vector activeHLTPathsInThisEvent = hltConfig.triggerNames(); - std::map triggerInMenu; - std::map triggerUnprescaled; - // for (std::vector::const_iterator iMyHLT = hltTags_.begin(); - // iMyHLT != hltTags_.end(); ++iMyHLT) { - // if ( triggerInMenu.find((*iMyHLT).label()) == triggerInMenu.end() ) - // triggerInMenu[(*iMyHLT).label()] = false; - // if ( triggerUnprescaled.find((*iMyHLT).label()) == triggerUnprescaled.end() ) - // triggerUnprescaled[(*iMyHLT).label()] = false; - // } - for (std::vector::const_iterator iHLT = activeHLTPathsInThisEvent.begin(); - iHLT != activeHLTPathsInThisEvent.end(); - ++iHLT) { - // cout << "######## " << *iHLT << endl; - - if (TString(*iHLT).Contains(TRegexp(hltTag_))) { - triggerInMenu[*iHLT] = true; - if (hltPrescaleProvider_.prescaleValue(event, eventSetup, *iHLT) == 1) - triggerUnprescaled[*iHLT] = true; - } - } - - // Some sanity checks - if (not trgEvent.isValid()) { - edm::LogInfo("info") << "******** Following Trigger Summary Object Not Found: " << triggerEventTag_; - - event.put(std::move(outColRef), "R"); - event.put(std::move(outColPtr)); - return; - } - - //--------------------------------------------------------------------------- - - edm::InputTag filterTag; - // loop over these objects to see whether they match - const trigger::TriggerObjectCollection& TOC(trgEvent->getObjects()); - - std::vector index; - std::vector filters; - // if(isFilter_){ - //----------------------------------------------------------------------- - for (std::map::const_iterator iMyHLT = triggerInMenu.begin(); iMyHLT != triggerInMenu.end(); - ++iMyHLT) { - if (!(iMyHLT->second && triggerUnprescaled[iMyHLT->first])) - continue; - - int triggerIndex = -1; - edm::InputTag filterTag; - try { - filters = hltConfig.moduleLabels(iMyHLT->first); - triggerIndex = hltConfig.triggerIndex(iMyHLT->first); - } catch (std::exception const&) { - cout << "bad trigger\n"; - } - // Results from TriggerResults product - if (triggerIndex == -1 || !(pTrgResults->wasrun(triggerIndex)) || !(pTrgResults->accept(triggerIndex)) || - (pTrgResults->error(triggerIndex))) { - continue; - } - - for (std::vector::iterator filter = filters.begin(); filter != filters.end(); ++filter) { - edm::InputTag testTag(*filter, "", triggerEventTag_.process()); - int testindex = trgEvent->filterIndex(testTag); - if (!(testindex >= trgEvent->sizeFilters())) { - filterName_ = *filter; - filterTag = testTag; - } - } - - //using last filter tag - index.push_back(trgEvent->filterIndex(filterTag)); - // std::cout << "TrgPath" << iMyHLT->first << "hltTag_.label() " << - // filterTag.label() << " filter name " << - // filterName_ << " sizeFilters " << - // trgEvent->sizeFilters() << std::endl; - } - - // Loop over the candidate collection - edm::PtrVector ptrVect; - edm::RefToBaseVector refs; - for (size_t i = 0; i < candHandle->size(); ++i) { - ptrVect.push_back(candHandle->ptrAt(i)); - refs.push_back(candHandle->refAt(i)); - } - // find how many objects there are - unsigned int counter = 0; - for (typename edm::View::const_iterator j = candHandle->begin(); j != candHandle->end(); ++j, ++counter) { - bool hltTrigger = false; - for (unsigned int idx = 0; idx < index.size(); ++idx) { - if (hltTrigger) - continue; - const trigger::Keys& KEYS(trgEvent->filterKeys(index[idx])); - const size_type nK(KEYS.size()); - // Get cut decision for each candidate - // Did this candidate cause a HLT trigger? - - for (int ipart = 0; ipart != nK; ++ipart) { - const trigger::TriggerObject& TO = TOC[KEYS[ipart]]; - double dRval = deltaR(j->eta(), j->phi(), TO.eta(), TO.phi()); - hltTrigger = dRval < delRMatchingCut_; - if (hltTrigger) - break; - } - } - - if (hltTrigger) { - outColRef->push_back(refs[counter]); - outColPtr->push_back(ptrVect[counter]); - } - } - event.put(std::move(outColRef), "R"); - event.put(std::move(outColPtr)); -} - -// ---- method called once each job just before starting event loop --- -template -void TriggerMatchProducer::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) { - // std::cout << "calling init(" << "iRun" << ", " << "iSetup" << ", " << triggerEventTag_.process() << ", " << "changed_" << ") in beginRun()" << std::endl; - if (!hltPrescaleProvider_.init(iRun, iSetup, triggerEventTag_.process(), changed_)) { - edm::LogError("TriggerMatchProducer") << "Error! Can't initialize HLTConfigProvider"; - throw cms::Exception("HLTConfigProvider::init() returned non 0"); - } - // HLTConfigProvider const& hltConfig = hltPrescaleProvider_.hltConfigProvider(); - // if(printIndex_ && changed_) - // std::cout << "HLT configuration changed !" << std::endl; - // std::vector filters = hltConfig.moduleLabels( hltTag_.label() ); -} - -template -void TriggerMatchProducer::beginJob() { - filterName_ = ""; -} - -template -void TriggerMatchProducer::endJob() {} diff --git a/DQM/BeamMonitor/plugins/BeamMonitor.cc b/DQM/BeamMonitor/plugins/BeamMonitor.cc index 9f85fab6aa5f4..38a5105eb0fb2 100644 --- a/DQM/BeamMonitor/plugins/BeamMonitor.cc +++ b/DQM/BeamMonitor/plugins/BeamMonitor.cc @@ -519,7 +519,7 @@ void BeamMonitor::beginLuminosityBlock(const LuminosityBlock& lumiSeg, const Eve DBloggerReturn_ = 0; if (onlineDbService_.isAvailable()) { onlineDbService_->logger().start(); - onlineDbService_->logger().logInfo() << "BeamMonitor::beginLuminosityBlock"; + onlineDbService_->logger().logInfo() << "BeamMonitor::beginLuminosityBlock - LS: " << lumiSeg.luminosityBlock(); } int nthlumi = lumiSeg.luminosityBlock(); @@ -1394,16 +1394,16 @@ void BeamMonitor::FitAndFill(const LuminosityBlock& lumiSeg, int& lastlumi, int& << " [epoch in microseconds]"; try { onlineDbService_->writeForNextLumisection(BSOnline, recordName_); + onlineDbService_->logger().logInfo() + << "BeamMonitor::FitAndFill - [PayloadCreation] writeForNextLumisection executed correctly"; } catch (const std::exception& e) { onlineDbService_->logger().logError() << "BeamMonitor - Error writing record: " << recordName_ << " for Run: " << frun << " - Lumi: " << fitLS.second; onlineDbService_->logger().logError() << "Error is: " << e.what(); onlineDbService_->logger().logError() << "RESULTS OF DEFAULT FIT WAS:"; onlineDbService_->logger().logError() << "\n" << bs; - DBloggerReturn_ = -1; + DBloggerReturn_ = 2; } - onlineDbService_->logger().logInfo() - << "BeamMonitor::FitAndFill - [PayloadCreation] writeForNextLumisection executed correctly"; } edm::LogInfo("BeamMonitor") << "FitAndFill::[PayloadCreation] BeamSpotOnline payload created \n" << std::endl; @@ -1418,6 +1418,7 @@ void BeamMonitor::FitAndFill(const LuminosityBlock& lumiSeg, int& lastlumi, int& onlineDbService_->logger().logInfo() << "BeamMonitor::FitAndFill - Beam fit fails!!!"; onlineDbService_->logger().logInfo() << "BeamMonitor::FitAndFill - Output beam spot for DIP"; onlineDbService_->logger().logInfo() << "\n" << bs; + DBloggerReturn_ = 2; } hs[k_sigmaX0_lumi]->ShiftFillLast(bs.BeamWidthX(), bs.BeamWidthXError(), fitNLumi_); @@ -1444,6 +1445,7 @@ void BeamMonitor::FitAndFill(const LuminosityBlock& lumiSeg, int& lastlumi, int& onlineDbService_->logger().logInfo() << "BeamMonitor::FitAndFill - No fitting"; onlineDbService_->logger().logInfo() << "BeamMonitor::FitAndFill - Output fake beam spot for DIP"; onlineDbService_->logger().logInfo() << "\n" << bs; + DBloggerReturn_ = 2; } hs[k_sigmaX0_lumi]->ShiftFillLast(bs.BeamWidthX(), bs.BeamWidthXError(), fitNLumi_); diff --git a/DQM/BeamMonitor/plugins/FakeBeamMonitor.cc b/DQM/BeamMonitor/plugins/FakeBeamMonitor.cc index ef40289c19feb..0600349e5c4c8 100644 --- a/DQM/BeamMonitor/plugins/FakeBeamMonitor.cc +++ b/DQM/BeamMonitor/plugins/FakeBeamMonitor.cc @@ -513,7 +513,7 @@ void FakeBeamMonitor::beginLuminosityBlock(const LuminosityBlock& lumiSeg, const DBloggerReturn_ = 0; if (onlineDbService_.isAvailable()) { onlineDbService_->logger().start(); - onlineDbService_->logger().logInfo() << "FakeBeamMonitor::beginLuminosityBlock"; + onlineDbService_->logger().logInfo() << "FakeBeamMonitor::beginLuminosityBlock - LS: " << lumiSeg.luminosityBlock(); } int nthlumi = lumiSeg.luminosityBlock(); @@ -1416,16 +1416,16 @@ void FakeBeamMonitor::FitAndFill(const LuminosityBlock& lumiSeg, int& lastlumi, << creationTime << " [epoch in microseconds]"; try { onlineDbService_->writeForNextLumisection(BSOnline, recordName_); + onlineDbService_->logger().logInfo() + << "FakeBeamMonitor::FitAndFill - [PayloadCreation] writeForNextLumisection executed correctly"; } catch (const std::exception& e) { onlineDbService_->logger().logError() << "FakeBeamMonitor - Error writing record: " << recordName_ << " for Run: " << frun << " - Lumi: " << fitLS.second; onlineDbService_->logger().logError() << "Error is: " << e.what(); onlineDbService_->logger().logError() << "RESULTS OF DEFAULT FIT WAS:"; onlineDbService_->logger().logError() << "\n" << bs; - DBloggerReturn_ = -1; + DBloggerReturn_ = 2; } - onlineDbService_->logger().logInfo() - << "FakeBeamMonitor::FitAndFill - [PayloadCreation] writeForNextLumisection executed correctly"; } edm::LogInfo("FakeBeamMonitor") << "FitAndFill::[PayloadCreation] BeamSpotOnline payload created \n" << std::endl; diff --git a/DQM/BeamMonitor/test/2011_44X_HI_Test_beam_dqm_sourceclient-live_cfg.py b/DQM/BeamMonitor/test/2011_44X_HI_Test_beam_dqm_sourceclient-live_cfg.py index b198ed72ef6dc..f216cd667b3b2 100644 --- a/DQM/BeamMonitor/test/2011_44X_HI_Test_beam_dqm_sourceclient-live_cfg.py +++ b/DQM/BeamMonitor/test/2011_44X_HI_Test_beam_dqm_sourceclient-live_cfg.py @@ -20,7 +20,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['dqmBeamMonitor'] -process.MessageLogger.categories = ['BeamMonitor'] +process.MessageLogger.BeamMonitor = dict() process.MessageLogger.cerr.threshold = "INFO" #-------------------------- diff --git a/DQM/BeamMonitor/test/2011_44X_Test_beam_dqm_sourceclient-live_cfg.py b/DQM/BeamMonitor/test/2011_44X_Test_beam_dqm_sourceclient-live_cfg.py index f843c2da26616..f62e984bd4544 100644 --- a/DQM/BeamMonitor/test/2011_44X_Test_beam_dqm_sourceclient-live_cfg.py +++ b/DQM/BeamMonitor/test/2011_44X_Test_beam_dqm_sourceclient-live_cfg.py @@ -18,7 +18,7 @@ ####---Massage logger Services----#### process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['dqmBeamMonitor'] -process.MessageLogger.categories = ['BeamMonitor'] +process.MessageLogger.BeamMonitor = dict() process.MessageLogger.cerr.threshold = "INFO" diff --git a/DQM/BeamMonitor/test/2012_PixelTracksVertices_44XOnwards_Test_beam_dqm_sourceclient-live_cfg.py b/DQM/BeamMonitor/test/2012_PixelTracksVertices_44XOnwards_Test_beam_dqm_sourceclient-live_cfg.py index 6a61fd380a64e..6f06aa2262432 100644 --- a/DQM/BeamMonitor/test/2012_PixelTracksVertices_44XOnwards_Test_beam_dqm_sourceclient-live_cfg.py +++ b/DQM/BeamMonitor/test/2012_PixelTracksVertices_44XOnwards_Test_beam_dqm_sourceclient-live_cfg.py @@ -13,7 +13,7 @@ ####---Massage logger Services----#### process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['dqmBeamMonitor'] -process.MessageLogger.categories = ['BeamMonitor'] +process.MessageLogger.BeamMonitor = dict() process.MessageLogger.cerr.threshold = "INFO" diff --git a/DQM/BeamMonitor/test/2012_PixelTracksVertices_Test_beamspotproblem_dqm_sourceclient-live_cfg.py b/DQM/BeamMonitor/test/2012_PixelTracksVertices_Test_beamspotproblem_dqm_sourceclient-live_cfg.py index 65499f6fa842e..a19fd8509d5b0 100644 --- a/DQM/BeamMonitor/test/2012_PixelTracksVertices_Test_beamspotproblem_dqm_sourceclient-live_cfg.py +++ b/DQM/BeamMonitor/test/2012_PixelTracksVertices_Test_beamspotproblem_dqm_sourceclient-live_cfg.py @@ -9,7 +9,7 @@ ####---Massage logger Services----#### process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['BeamSpotProblemMonitor'] -process.MessageLogger.categories = ['BeamSpotProblemMonitor'] +process.MessageLogger.BeamSpotProblemMonitor = dict() process.MessageLogger.cerr.threshold = "INFO" diff --git a/DQM/BeamMonitor/test/2012_ReducedTrackingSteps_44XOnwards_Test_beam_dqm_sourceclient-live_cfg.py b/DQM/BeamMonitor/test/2012_ReducedTrackingSteps_44XOnwards_Test_beam_dqm_sourceclient-live_cfg.py index 50bbc9a1111b1..54fb04e4bc60f 100644 --- a/DQM/BeamMonitor/test/2012_ReducedTrackingSteps_44XOnwards_Test_beam_dqm_sourceclient-live_cfg.py +++ b/DQM/BeamMonitor/test/2012_ReducedTrackingSteps_44XOnwards_Test_beam_dqm_sourceclient-live_cfg.py @@ -14,7 +14,7 @@ ####---Massage logger Services----#### process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['dqmBeamMonitor'] -process.MessageLogger.categories = ['BeamMonitor'] +process.MessageLogger.BeamMonitor = dict() process.MessageLogger.cerr.threshold = "INFO" diff --git a/DQM/BeamMonitor/test/Alca_BeamMonitor_DQM.py b/DQM/BeamMonitor/test/Alca_BeamMonitor_DQM.py index 8a1f7e743f5de..b50aa161faa6a 100644 --- a/DQM/BeamMonitor/test/Alca_BeamMonitor_DQM.py +++ b/DQM/BeamMonitor/test/Alca_BeamMonitor_DQM.py @@ -60,8 +60,8 @@ # initialize MessageLogger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories = ["AlcaBeamMonitor"] -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) + +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), default = cms.untracked.PSet( @@ -72,7 +72,7 @@ limit = cms.untracked.int32(0) ) ) -#process.MessageLogger.statistics.append('cout') +#process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True) process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) diff --git a/DQM/BeamMonitor/test/Alca_BeamMonitor_HARVESTING.py b/DQM/BeamMonitor/test/Alca_BeamMonitor_HARVESTING.py index 522c310fb49eb..459884960db08 100644 --- a/DQM/BeamMonitor/test/Alca_BeamMonitor_HARVESTING.py +++ b/DQM/BeamMonitor/test/Alca_BeamMonitor_HARVESTING.py @@ -11,8 +11,8 @@ # initialize MessageLogger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories = ["AlcaBeamMonitorClient"] -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) + +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), default = cms.untracked.PSet( @@ -23,7 +23,7 @@ limit = cms.untracked.int32(0) ) ) -#process.MessageLogger.statistics.append('cout') +#process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True) process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) diff --git a/DQM/BeamMonitor/test/Alca_BeamMonitor_file.py b/DQM/BeamMonitor/test/Alca_BeamMonitor_file.py index 64a694c83c308..411278346ef57 100644 --- a/DQM/BeamMonitor/test/Alca_BeamMonitor_file.py +++ b/DQM/BeamMonitor/test/Alca_BeamMonitor_file.py @@ -39,8 +39,8 @@ # initialize MessageLogger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories = ["AlcaBeamMonitor"] -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) + +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), default = cms.untracked.PSet( @@ -51,7 +51,7 @@ limit = cms.untracked.int32(0) ) ) -#process.MessageLogger.statistics.append('cout') +#process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True) process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(2000) ) diff --git a/DQM/BeamMonitor/test/HeavyIonBeamMonitor_cfg.py b/DQM/BeamMonitor/test/HeavyIonBeamMonitor_cfg.py index 82b77f81841a8..f23cd36fc5c6f 100644 --- a/DQM/BeamMonitor/test/HeavyIonBeamMonitor_cfg.py +++ b/DQM/BeamMonitor/test/HeavyIonBeamMonitor_cfg.py @@ -20,7 +20,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['dqmBeamMonitor'] -process.MessageLogger.categories = ['BeamMonitor'] +process.MessageLogger.BeamMonitor = dict() process.MessageLogger.cerr.threshold = "INFO" #-------------------------- diff --git a/DQM/BeamMonitor/test/Online_BeamMonitor_file.py b/DQM/BeamMonitor/test/Online_BeamMonitor_file.py index 908bb5984dbd6..def23db610923 100644 --- a/DQM/BeamMonitor/test/Online_BeamMonitor_file.py +++ b/DQM/BeamMonitor/test/Online_BeamMonitor_file.py @@ -26,8 +26,8 @@ # initialize MessageLogger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories = ["OnlineBeamMonitor"] -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) + +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), default = cms.untracked.PSet( @@ -38,7 +38,7 @@ limit = cms.untracked.int32(0) ) ) -#process.MessageLogger.statistics.append('cout') +#process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True) process.source = cms.Source("EmptySource") process.source.numberEventsInRun=cms.untracked.uint32(20) process.source.firstRun = cms.untracked.uint32(336055) diff --git a/DQM/CTPPS/plugins/CTPPSPixelDQMSource.cc b/DQM/CTPPS/plugins/CTPPSPixelDQMSource.cc index 6b65179139b08..33df852b9f3c3 100644 --- a/DQM/CTPPS/plugins/CTPPSPixelDQMSource.cc +++ b/DQM/CTPPS/plugins/CTPPSPixelDQMSource.cc @@ -732,14 +732,15 @@ void CTPPSPixelDQMSource::analyze(edm::Event const &event, edm::EventSetup const hRPotActivBX[index]->Fill(event.bunchCrossing()); hRPotActivBXall[index]->Fill(event.bunchCrossing(), float(RPdigiSize[index])); } - int rocf[NplaneMAX]; + + int planesFiredAtROC[NROCsMAX]; // how many planes registered hits on ROC r for (int r = 0; r < NROCsMAX; r++) - rocf[r] = 0; + planesFiredAtROC[r] = 0; for (int p = 0; p < NplaneMAX; p++) { int indp = getPlaneIndex(arm, stn, rp, p); for (int r = 0; r < NROCsMAX; r++) if (HitsMultROC[indp][r] > 0) - ++rocf[r]; + ++planesFiredAtROC[r]; for (int r = 0; r < NROCsMAX; r++) { if (onlinePlots) h2HitsMultROC[index]->Fill(p, r, HitsMultROC[indp][r]); @@ -748,9 +749,9 @@ void CTPPSPixelDQMSource::analyze(edm::Event const &event, edm::EventSetup const } int max = 0; for (int r = 0; r < NROCsMAX; r++) - if (max < rocf[r]) - max = rocf[r]; - if (max >= 4 && onlinePlots) + if (max < planesFiredAtROC[r]) + max = planesFiredAtROC[r]; + if (max >= 4 && onlinePlots) // fill only if there are at least 4 aligned ROCs firing hRPotActivBXroc[index]->Fill(event.bunchCrossing()); } // end for(int rp=0; rp + diff --git a/DQM/EcalCommon/interface/DQWorker.h b/DQM/EcalCommon/interface/DQWorker.h index 66d7b9154deba..b4e6204c19577 100644 --- a/DQM/EcalCommon/interface/DQWorker.h +++ b/DQM/EcalCommon/interface/DQWorker.h @@ -12,6 +12,11 @@ #include "tbb/concurrent_unordered_map.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/CaloTopology/interface/CaloTopology.h" +#include "Geometry/CaloTopology/interface/EcalTrigTowerConstituentsMap.h" +#include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h" + namespace edm { class Run; class LuminosityBlock; @@ -63,6 +68,27 @@ namespace ecaldqm { virtual void bookMEs(DQMStore::IBooker &); virtual void releaseMEs(); + // old ecaldqmGetSetupObjects (old global vars) + // These are objects obtained from EventSetup and stored + // inside each module (which inherit from DQWorker). + // Before, EcalCommon functions could access these through + // global functions, but now we need to pass them from the + // modules to functions in EcalCommon, such as in + // EcalDQMCommonUtils, MESetBinningUtils, all MESets, etc. + // + // The global variables were removed as they were against + // CMSSW rules, and potentially led to undefined behavior + // (data race) at IOV boundaries. They also relied on a mutex + // which leads to poor multi-threading performance. + // Original issue here: + // https://github.com/cms-sw/cmssw/issues/28858 + void setSetupObjects(edm::EventSetup const &); + EcalElectronicsMapping const *GetElectronicsMap(); + EcalTrigTowerConstituentsMap const *GetTrigTowerMap(); + CaloGeometry const *GetGeometry(); + CaloTopology const *GetTopology(); + EcalDQMSetupObjects const getEcalDQMSetupObjects(); + void setTime(time_t _t) { timestamp_.now = _t; } void setRunNumber(edm::RunNumber_t _r) { timestamp_.iRun = _r; } void setLumiNumber(edm::LuminosityBlockNumber_t _l) { timestamp_.iLumi = _l; } @@ -84,6 +110,9 @@ namespace ecaldqm { // common parameters bool onlineMode_; bool willConvertToEDM_; + + private: + EcalDQMSetupObjects edso_; }; typedef DQWorker *(*WorkerFactory)(); diff --git a/DQM/EcalCommon/interface/EcalDQMCommonUtils.h b/DQM/EcalCommon/interface/EcalDQMCommonUtils.h index b08b7a001479c..6c16b3e063719 100644 --- a/DQM/EcalCommon/interface/EcalDQMCommonUtils.h +++ b/DQM/EcalCommon/interface/EcalDQMCommonUtils.h @@ -6,7 +6,6 @@ #include #include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/CaloTopology/interface/CaloTopology.h" #include "Geometry/CaloTopology/interface/EcalTrigTowerConstituentsMap.h" #include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h" @@ -120,39 +119,39 @@ namespace ecaldqm { extern double const etaBound; // returns DCC ID (1 - 54) - unsigned dccId(DetId const &); + unsigned dccId(DetId const &, EcalElectronicsMapping const *); unsigned dccId(EcalElectronicsId const &); unsigned memDCCId(unsigned); // convert from dccId skipping DCCs without MEM unsigned memDCCIndex(unsigned); // reverse conversion // returns TCC ID (1 - 108) - unsigned tccId(DetId const &); - unsigned tccId(EcalElectronicsId const &); + unsigned tccId(DetId const &, EcalElectronicsMapping const *); + unsigned tccId(EcalElectronicsId const &, EcalElectronicsMapping const *); // returns the data tower id - pass only - unsigned towerId(DetId const &); + unsigned towerId(DetId const &, EcalElectronicsMapping const *); unsigned towerId(EcalElectronicsId const &); - unsigned ttId(DetId const &); - unsigned ttId(EcalElectronicsId const &); + unsigned ttId(DetId const &, EcalElectronicsMapping const *); + unsigned ttId(EcalElectronicsId const &, EcalElectronicsMapping const *); - unsigned rtHalf(DetId const &); + unsigned rtHalf(DetId const &, EcalElectronicsMapping const *); std::pair innerTCCs(unsigned); std::pair outerTCCs(unsigned); std::vector scConstituents(EcalScDetId const &); - EcalPnDiodeDetId pnForCrystal(DetId const &, char); + EcalPnDiodeDetId pnForCrystal(DetId const &, char, EcalElectronicsMapping const *); unsigned dccId(std::string const &); std::string smName(unsigned); int zside(DetId const &); - double eta(EBDetId const &); - double eta(EEDetId const &); + double eta(EBDetId const &, CaloGeometry const *); + double eta(EEDetId const &, CaloGeometry const *); double phi(EBDetId const &); double phi(EEDetId const &); double phi(EcalTrigTowerDetId const &); @@ -169,22 +168,6 @@ namespace ecaldqm { unsigned nSuperCrystals(unsigned); bool ccuExists(unsigned, unsigned); - - bool checkElectronicsMap(bool = true); - EcalElectronicsMapping const *getElectronicsMap(); - void setElectronicsMap(EcalElectronicsMapping const *); - - bool checkTrigTowerMap(bool = true); - EcalTrigTowerConstituentsMap const *getTrigTowerMap(); - void setTrigTowerMap(EcalTrigTowerConstituentsMap const *); - - bool checkGeometry(bool = true); - CaloGeometry const *getGeometry(); - void setGeometry(CaloGeometry const *); - - bool checkTopology(bool = true); - CaloTopology const *getTopology(); - void setTopology(CaloTopology const *); } // namespace ecaldqm #endif diff --git a/DQM/EcalCommon/interface/EcalDQMonitor.h b/DQM/EcalCommon/interface/EcalDQMonitor.h index 0bb3cbde3b3d8..ba29b63bf9114 100644 --- a/DQM/EcalCommon/interface/EcalDQMonitor.h +++ b/DQM/EcalCommon/interface/EcalDQMonitor.h @@ -30,7 +30,6 @@ namespace ecaldqm { static void fillDescriptions(edm::ParameterSetDescription &); protected: - void ecaldqmGetSetupObjects(edm::EventSetup const &); void ecaldqmBeginRun(edm::Run const &, edm::EventSetup const &); void ecaldqmEndRun(edm::Run const &, edm::EventSetup const &); void ecaldqmBeginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) const; diff --git a/DQM/EcalCommon/interface/MESet.h b/DQM/EcalCommon/interface/MESet.h index 4f7ad5189d967..2abd1ff9056e3 100644 --- a/DQM/EcalCommon/interface/MESet.h +++ b/DQM/EcalCommon/interface/MESet.h @@ -8,6 +8,11 @@ #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/EcalDetId/interface/EcalElectronicsId.h" +#include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h" +#include "Geometry/CaloTopology/interface/EcalTrigTowerConstituentsMap.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/CaloTopology/interface/CaloTopology.h" + #include "FWCore/Utilities/interface/Exception.h" #include @@ -22,6 +27,16 @@ namespace ecaldqm { Interface between ME bins and DetId */ + // struct made to simplify passing multiple setup + // variables (see DQWorker.h for implementation) + // to MESet functions + struct EcalDQMSetupObjects { + EcalElectronicsMapping const *electronicsMap; + EcalTrigTowerConstituentsMap const *trigtowerMap; + CaloGeometry const *geometry; + CaloTopology const *topology; + }; + class StatusManager; class MESet { @@ -39,55 +54,68 @@ namespace ecaldqm { virtual MESet *clone(std::string const & = "") const; - virtual void book(DQMStore::IBooker &) {} - virtual bool retrieve(DQMStore::IGetter &, std::string * = nullptr) const { return false; } + virtual void book(DQMStore::IBooker &, EcalElectronicsMapping const *) {} + virtual bool retrieve(EcalElectronicsMapping const *, DQMStore::IGetter &, std::string * = nullptr) const { + return false; + } virtual void clear() const; - virtual void fill(DetId const &, double = 1., double = 1., double = 1.) {} - virtual void fill(EcalElectronicsId const &, double = 1., double = 1., double = 1.) {} - virtual void fill(int, double = 1., double = 1., double = 1.) {} - virtual void fill(double, double = 1., double = 1.) {} - - virtual void setBinContent(DetId const &, double) {} - virtual void setBinContent(EcalElectronicsId const &, double) {} - virtual void setBinContent(int, double) {} - virtual void setBinContent(DetId const &, int, double) {} - virtual void setBinContent(EcalElectronicsId const &, int, double) {} - virtual void setBinContent(int, int, double) {} - - virtual void setBinError(DetId const &, double) {} - virtual void setBinError(EcalElectronicsId const &, double) {} - virtual void setBinError(int, double) {} - virtual void setBinError(DetId const &, int, double) {} - virtual void setBinError(EcalElectronicsId const &, int, double) {} - virtual void setBinError(int, int, double) {} - - virtual void setBinEntries(DetId const &, double) {} - virtual void setBinEntries(EcalElectronicsId const &, double) {} - virtual void setBinEntries(int, double) {} - virtual void setBinEntries(DetId const &, int, double) {} - virtual void setBinEntries(EcalElectronicsId const &, int, double) {} - virtual void setBinEntries(int, int, double) {} - - virtual double getBinContent(DetId const &, int = 0) const { return 0.; } - virtual double getBinContent(EcalElectronicsId const &, int = 0) const { return 0.; } - virtual double getBinContent(int, int = 0) const { return 0.; } - - virtual double getBinError(DetId const &, int = 0) const { return 0.; } - virtual double getBinError(EcalElectronicsId const &, int = 0) const { return 0.; } - virtual double getBinError(int, int = 0) const { return 0.; } - - virtual double getBinEntries(DetId const &, int = 0) const { return 0.; } - virtual double getBinEntries(EcalElectronicsId const &, int = 0) const { return 0.; } - virtual double getBinEntries(int, int = 0) const { return 0.; } + // Overloaded functions deal with different ids or + // inputs to fill, setBinContent, etc and each determines + // the correct bin to fill based on what is passed. + // + // Note: not every fill, setBinContent, etc necessarily uses + // EcalDQMSetupObjects, but they are passed one anyway to + // avoid accidentally casting a DetId or a EcalElectronicsId + // to an int or a double and have it exercute the wrong function. + // This would be tricky to debug if this error is made, so it + // makes more sense for these functions to look consistent in + // terms of passing EcalDQMSetupObjects. + virtual void fill(EcalDQMSetupObjects const, DetId const &, double = 1., double = 1., double = 1.) {} + virtual void fill(EcalDQMSetupObjects const, EcalElectronicsId const &, double = 1., double = 1., double = 1.) {} + virtual void fill(EcalDQMSetupObjects const, int, double = 1., double = 1., double = 1.) {} + virtual void fill(EcalDQMSetupObjects const, double, double = 1., double = 1.) {} + + virtual void setBinContent(EcalDQMSetupObjects const, DetId const &, double) {} + virtual void setBinContent(EcalDQMSetupObjects const, EcalElectronicsId const &, double) {} + virtual void setBinContent(EcalDQMSetupObjects const, int, double) {} + virtual void setBinContent(EcalDQMSetupObjects const, DetId const &, int, double) {} + virtual void setBinContent(EcalDQMSetupObjects const, EcalElectronicsId const &, int, double) {} + virtual void setBinContent(EcalDQMSetupObjects const, int, int, double) {} + + virtual void setBinError(EcalDQMSetupObjects const, DetId const &, double) {} + virtual void setBinError(EcalDQMSetupObjects const, EcalElectronicsId const &, double) {} + virtual void setBinError(EcalDQMSetupObjects const, int, double) {} + virtual void setBinError(EcalDQMSetupObjects const, DetId const &, int, double) {} + virtual void setBinError(EcalDQMSetupObjects const, EcalElectronicsId const &, int, double) {} + virtual void setBinError(EcalDQMSetupObjects const, int, int, double) {} + + virtual void setBinEntries(EcalDQMSetupObjects const, DetId const &, double) {} + virtual void setBinEntries(EcalDQMSetupObjects const, EcalElectronicsId const &, double) {} + virtual void setBinEntries(EcalDQMSetupObjects const, int, double) {} + virtual void setBinEntries(EcalDQMSetupObjects const, DetId const &, int, double) {} + virtual void setBinEntries(EcalDQMSetupObjects const, EcalElectronicsId const &, int, double) {} + virtual void setBinEntries(EcalDQMSetupObjects const, int, int, double) {} + + virtual double getBinContent(EcalDQMSetupObjects const, DetId const &, int = 0) const { return 0.; } + virtual double getBinContent(EcalDQMSetupObjects const, EcalElectronicsId const &, int = 0) const { return 0.; } + virtual double getBinContent(EcalDQMSetupObjects const, int, int = 0) const { return 0.; } + + virtual double getBinError(EcalDQMSetupObjects const, DetId const &, int = 0) const { return 0.; } + virtual double getBinError(EcalDQMSetupObjects const, EcalElectronicsId const &, int = 0) const { return 0.; } + virtual double getBinError(EcalDQMSetupObjects const, int, int = 0) const { return 0.; } + + virtual double getBinEntries(EcalDQMSetupObjects const, DetId const &, int = 0) const { return 0.; } + virtual double getBinEntries(EcalDQMSetupObjects const, EcalElectronicsId const &, int = 0) const { return 0.; } + virtual double getBinEntries(EcalDQMSetupObjects const, int, int = 0) const { return 0.; } // title, axis virtual void setAxisTitle(std::string const &, int = 1); - virtual void reset(double = 0., double = 0., double = 0.); + virtual void reset(EcalElectronicsMapping const *, double = 0., double = 0., double = 0.); virtual void resetAll(double = 0., double = 0., double = 0.); - virtual bool maskMatches(DetId const &, uint32_t, StatusManager const *) const; + virtual bool maskMatches(DetId const &, uint32_t, StatusManager const *, EcalTrigTowerConstituentsMap const *) const; virtual std::string const &getPath() const { return path_; } binning::ObjectType getObjType() const { return otype_; } @@ -149,9 +177,9 @@ namespace ecaldqm { bool operator==(ConstBin const &_rhs) const { return meSet_ != nullptr && meSet_ == _rhs.meSet_ && iME == _rhs.iME && iBin == _rhs.iBin; } - bool isChannel() const { + bool isChannel(EcalElectronicsMapping const *electronicsMap) const { if (meSet_) - return binning::isValidIdBin(otype, meSet_->getBinType(), iME, iBin); + return binning::isValidIdBin(electronicsMap, otype, meSet_->getBinType(), iME, iBin); else return false; } @@ -244,8 +272,9 @@ namespace ecaldqm { */ struct const_iterator { const_iterator() : bin_() {} - const_iterator(MESet const &_meSet, unsigned _iME = 0, int _iBin = 1) : bin_(_meSet, _iME, _iBin) {} - const_iterator(MESet const &, DetId const &); + const_iterator(EcalElectronicsMapping const *, MESet const &_meSet, unsigned _iME = 0, int _iBin = 1) + : bin_(_meSet, _iME, _iBin) {} + const_iterator(EcalElectronicsMapping const *, MESet const &, DetId const &); const_iterator(const_iterator const &_orig) : bin_(_orig.bin_) {} const_iterator &operator=(const_iterator const &_rhs) { bin_ = _rhs.bin_; @@ -255,7 +284,7 @@ namespace ecaldqm { bool operator!=(const_iterator const &_rhs) const { return !(bin_ == _rhs.bin_); } ConstBin const *operator->() const { return &bin_; } const_iterator &operator++(); - const_iterator &toNextChannel(); + const_iterator &toNextChannel(EcalElectronicsMapping const *); bool up(); bool down(); bool left(); @@ -267,10 +296,12 @@ namespace ecaldqm { struct iterator : public const_iterator { iterator() : const_iterator(), bin_() {} - iterator(MESet &_meSet, unsigned _iME = 0, int _iBin = 1) : const_iterator(_meSet, _iME, _iBin), bin_(_meSet) { + iterator(EcalElectronicsMapping const *electronicsMap, MESet &_meSet, unsigned _iME = 0, int _iBin = 1) + : const_iterator(electronicsMap, _meSet, _iME, _iBin), bin_(_meSet) { bin_.ConstBin::operator=(const_iterator::bin_); } - iterator(MESet &_meSet, DetId const &_id) : const_iterator(_meSet, _id), bin_(_meSet) { + iterator(EcalElectronicsMapping const *electronicsMap, MESet &_meSet, DetId const &_id) + : const_iterator(electronicsMap, _meSet, _id), bin_(_meSet) { bin_.ConstBin::operator=(const_iterator::bin_); } iterator(iterator const &_orig) : const_iterator(_orig), bin_(_orig.bin_) {} @@ -286,8 +317,8 @@ namespace ecaldqm { bin_.ConstBin::operator=(const_iterator::bin_); return *this; } - const_iterator &toNextChannel() { - const_iterator::toNextChannel(); + const_iterator &toNextChannel(EcalElectronicsMapping const *electronicsMap) { + const_iterator::toNextChannel(electronicsMap); bin_.ConstBin::operator=(const_iterator::bin_); return *this; } @@ -316,22 +347,28 @@ namespace ecaldqm { Bin bin_; }; - virtual const_iterator begin() const { return const_iterator(*this); } + virtual const_iterator begin(EcalElectronicsMapping const *electronicsMap) const { + return const_iterator(electronicsMap, *this); + } - virtual const_iterator end() const { return const_iterator(*this, -1, -1); } + virtual const_iterator end(EcalElectronicsMapping const *electronicsMap) const { + return const_iterator(electronicsMap, *this, -1, -1); + } - virtual const_iterator beginChannel() const { - const_iterator itr(*this, 0, 0); - return itr.toNextChannel(); + virtual const_iterator beginChannel(EcalElectronicsMapping const *electronicsMap) const { + const_iterator itr(electronicsMap, *this, 0, 0); + return itr.toNextChannel(electronicsMap); } - virtual iterator begin() { return iterator(*this); } + virtual iterator begin(EcalElectronicsMapping const *electronicsMap) { return iterator(electronicsMap, *this); } - virtual iterator end() { return iterator(*this, -1, -1); } + virtual iterator end(EcalElectronicsMapping const *electronicsMap) { + return iterator(electronicsMap, *this, -1, -1); + } - virtual iterator beginChannel() { - iterator itr(*this, 0, 0); - itr.toNextChannel(); + virtual iterator beginChannel(EcalElectronicsMapping const *electronicsMap) { + iterator itr(electronicsMap, *this, 0, 0); + itr.toNextChannel(electronicsMap); return itr; } }; diff --git a/DQM/EcalCommon/interface/MESetBinningUtils.h b/DQM/EcalCommon/interface/MESetBinningUtils.h index 716ffea2f5590..71134f6871556 100644 --- a/DQM/EcalCommon/interface/MESetBinningUtils.h +++ b/DQM/EcalCommon/interface/MESetBinningUtils.h @@ -2,6 +2,7 @@ #define MESetBinningUtils_H #include "DQMServices/Core/interface/DQMStore.h" +#include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h" #include @@ -125,27 +126,27 @@ namespace ecaldqm { } }; - AxisSpecs getBinning(ObjectType, BinningType, bool, int, unsigned); + AxisSpecs getBinning(EcalElectronicsMapping const *, ObjectType, BinningType, bool, int, unsigned); - int findBin1D(ObjectType, BinningType, DetId const &); - int findBin1D(ObjectType, BinningType, EcalElectronicsId const &); - int findBin1D(ObjectType, BinningType, int); + int findBin1D(EcalElectronicsMapping const *, ObjectType, BinningType, DetId const &); + int findBin1D(EcalElectronicsMapping const *, ObjectType, BinningType, EcalElectronicsId const &); + int findBin1D(EcalElectronicsMapping const *, ObjectType, BinningType, int); - int findBin2D(ObjectType, BinningType, DetId const &); - int findBin2D(ObjectType, BinningType, EcalElectronicsId const &); - int findBin2D(ObjectType, BinningType, int); + int findBin2D(EcalElectronicsMapping const *, ObjectType, BinningType, DetId const &); + int findBin2D(EcalElectronicsMapping const *, ObjectType, BinningType, EcalElectronicsId const &); + int findBin2D(EcalElectronicsMapping const *, ObjectType, BinningType, int); - unsigned findPlotIndex(ObjectType, DetId const &); - unsigned findPlotIndex(ObjectType, EcalElectronicsId const &); - unsigned findPlotIndex(ObjectType, int, BinningType _btype = kDCC); + unsigned findPlotIndex(EcalElectronicsMapping const *, ObjectType, DetId const &); + unsigned findPlotIndex(EcalElectronicsMapping const *, ObjectType, EcalElectronicsId const &); + unsigned findPlotIndex(EcalElectronicsMapping const *, ObjectType, int, BinningType _btype = kDCC); ObjectType getObject(ObjectType, unsigned); unsigned getNObjects(ObjectType); - bool isValidIdBin(ObjectType, BinningType, unsigned, int); + bool isValidIdBin(EcalElectronicsMapping const *, ObjectType, BinningType, unsigned, int); - std::string channelName(uint32_t, BinningType _btype = kDCC); + std::string channelName(EcalElectronicsMapping const *, uint32_t, BinningType _btype = kDCC); uint32_t idFromName(std::string const &); uint32_t idFromBin(ObjectType, BinningType, unsigned, int); @@ -165,18 +166,18 @@ namespace ecaldqm { AxisSpecs getBinningEB_(BinningType, bool, int); AxisSpecs getBinningEE_(BinningType, bool, int, int); - AxisSpecs getBinningSM_(BinningType, bool, unsigned, int); + AxisSpecs getBinningSM_(BinningType, bool, unsigned, int, EcalElectronicsMapping const *); AxisSpecs getBinningSMMEM_(BinningType, bool, unsigned, int); AxisSpecs getBinningEcal_(BinningType, bool, int); AxisSpecs getBinningMEM_(BinningType, bool, int, int); - int findBinCrystal_(ObjectType, DetId const &, int = -1); - int findBinCrystal_(ObjectType, EcalElectronicsId const &); - int findBinTriggerTower_(ObjectType, DetId const &); - int findBinPseudoStrip_(ObjectType, DetId const &); + int findBinCrystal_(EcalElectronicsMapping const *, ObjectType, DetId const &, int = -1); + int findBinCrystal_(EcalElectronicsMapping const *, ObjectType, EcalElectronicsId const &); + int findBinTriggerTower_(EcalElectronicsMapping const *, ObjectType, DetId const &); + int findBinPseudoStrip_(EcalElectronicsMapping const *, ObjectType, DetId const &); int findBinRCT_(ObjectType, DetId const &); - int findBinSuperCrystal_(ObjectType, DetId const &, int = -1); - int findBinSuperCrystal_(ObjectType, EcalElectronicsId const &); + int findBinSuperCrystal_(EcalElectronicsMapping const *, ObjectType, DetId const &, int = -1); + int findBinSuperCrystal_(EcalElectronicsMapping const *, ObjectType, EcalElectronicsId const &); } // namespace binning } // namespace ecaldqm diff --git a/DQM/EcalCommon/interface/MESetDet0D.h b/DQM/EcalCommon/interface/MESetDet0D.h index 97976ee0ab08a..c52254831aee1 100644 --- a/DQM/EcalCommon/interface/MESetDet0D.h +++ b/DQM/EcalCommon/interface/MESetDet0D.h @@ -18,19 +18,25 @@ namespace ecaldqm { MESet *clone(std::string const & = "") const override; - void fill(DetId const &, double, double = 0., double = 0.) override; - void fill(EcalElectronicsId const &, double, double = 0., double = 0.) override; - void fill(int, double, double = 0., double = 0.) override; - - void setBinContent(DetId const &_id, int, double _value) override { fill(_id, _value); } - void setBinContent(EcalElectronicsId const &_id, int, double _value) override { fill(_id, _value); } - void setBinContent(int _dcctccid, int, double _value) override { fill(_dcctccid, _value); } - - double getBinContent(DetId const &, int = 0) const override; - double getBinContent(EcalElectronicsId const &, int = 0) const override; - double getBinContent(int, int = 0) const override; - - void reset(double = 0., double = 0., double = 0.) override; + void fill(EcalDQMSetupObjects const, DetId const &, double, double = 0., double = 0.) override; + void fill(EcalDQMSetupObjects const, EcalElectronicsId const &, double, double = 0., double = 0.) override; + void fill(EcalDQMSetupObjects const, int, double, double = 0., double = 0.) override; + + void setBinContent(EcalDQMSetupObjects const edso, DetId const &_id, int, double _value) override { + fill(edso, _id, _value); + } + void setBinContent(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, int, double _value) override { + fill(edso, _id, _value); + } + void setBinContent(EcalDQMSetupObjects const edso, int _dcctccid, int, double _value) override { + fill(edso, _dcctccid, _value); + } + + double getBinContent(EcalDQMSetupObjects const, DetId const &, int = 0) const override; + double getBinContent(EcalDQMSetupObjects const, EcalElectronicsId const &, int = 0) const override; + double getBinContent(EcalDQMSetupObjects const, int, int = 0) const override; + + void reset(EcalElectronicsMapping const *, double = 0., double = 0., double = 0.) override; }; } // namespace ecaldqm diff --git a/DQM/EcalCommon/interface/MESetDet1D.h b/DQM/EcalCommon/interface/MESetDet1D.h index 318855215eb51..1c548e208c15f 100644 --- a/DQM/EcalCommon/interface/MESetDet1D.h +++ b/DQM/EcalCommon/interface/MESetDet1D.h @@ -22,53 +22,53 @@ namespace ecaldqm { MESet *clone(std::string const & = "") const override; - void book(DQMStore::IBooker &) override; + void book(DQMStore::IBooker &, EcalElectronicsMapping const *) override; - void fill(DetId const &, double = 1., double = 1., double = 0.) override; - void fill(EcalElectronicsId const &, double = 1., double = 1., double = 0.) override; - void fill(int, double = 1., double = 1., double = 0.) override; + void fill(EcalDQMSetupObjects const, DetId const &, double = 1., double = 1., double = 0.) override; + void fill(EcalDQMSetupObjects const, EcalElectronicsId const &, double = 1., double = 1., double = 0.) override; + void fill(EcalDQMSetupObjects const, int, double = 1., double = 1., double = 0.) override; - void setBinContent(DetId const &, double) override; - void setBinContent(EcalElectronicsId const &, double) override; - void setBinContent(int, double) override; - void setBinContent(DetId const &, int, double) override; - void setBinContent(EcalElectronicsId const &, int, double) override; - void setBinContent(int, int, double) override; + void setBinContent(EcalDQMSetupObjects const, DetId const &, double) override; + void setBinContent(EcalDQMSetupObjects const, EcalElectronicsId const &, double) override; + void setBinContent(EcalDQMSetupObjects const, int, double) override; + void setBinContent(EcalDQMSetupObjects const, DetId const &, int, double) override; + void setBinContent(EcalDQMSetupObjects const, EcalElectronicsId const &, int, double) override; + void setBinContent(EcalDQMSetupObjects const, int, int, double) override; - void setBinError(DetId const &, double) override; - void setBinError(EcalElectronicsId const &, double) override; - void setBinError(int, double) override; - void setBinError(DetId const &, int, double) override; - void setBinError(EcalElectronicsId const &, int, double) override; - void setBinError(int, int, double) override; + void setBinError(EcalDQMSetupObjects const, DetId const &, double) override; + void setBinError(EcalDQMSetupObjects const, EcalElectronicsId const &, double) override; + void setBinError(EcalDQMSetupObjects const, int, double) override; + void setBinError(EcalDQMSetupObjects const, DetId const &, int, double) override; + void setBinError(EcalDQMSetupObjects const, EcalElectronicsId const &, int, double) override; + void setBinError(EcalDQMSetupObjects const, int, int, double) override; - void setBinEntries(DetId const &, double) override; - void setBinEntries(EcalElectronicsId const &, double) override; - void setBinEntries(int, double) override; - void setBinEntries(DetId const &, int, double) override; - void setBinEntries(EcalElectronicsId const &, int, double) override; - void setBinEntries(int, int, double) override; + void setBinEntries(EcalDQMSetupObjects const, DetId const &, double) override; + void setBinEntries(EcalDQMSetupObjects const, EcalElectronicsId const &, double) override; + void setBinEntries(EcalDQMSetupObjects const, int, double) override; + void setBinEntries(EcalDQMSetupObjects const, DetId const &, int, double) override; + void setBinEntries(EcalDQMSetupObjects const, EcalElectronicsId const &, int, double) override; + void setBinEntries(EcalDQMSetupObjects const, int, int, double) override; - double getBinContent(DetId const &, int = 0) const override; - double getBinContent(EcalElectronicsId const &, int = 0) const override; - double getBinContent(int, int = 0) const override; + double getBinContent(EcalDQMSetupObjects const, DetId const &, int = 0) const override; + double getBinContent(EcalDQMSetupObjects const, EcalElectronicsId const &, int = 0) const override; + double getBinContent(EcalDQMSetupObjects const, int, int = 0) const override; - double getBinError(DetId const &, int = 0) const override; - double getBinError(EcalElectronicsId const &, int = 0) const override; - double getBinError(int, int = 0) const override; + double getBinError(EcalDQMSetupObjects const, DetId const &, int = 0) const override; + double getBinError(EcalDQMSetupObjects const, EcalElectronicsId const &, int = 0) const override; + double getBinError(EcalDQMSetupObjects const, int, int = 0) const override; - double getBinEntries(DetId const &, int = 0) const override; - double getBinEntries(EcalElectronicsId const &, int = 0) const override; - double getBinEntries(int, int = 0) const override; + double getBinEntries(EcalDQMSetupObjects const, DetId const &, int = 0) const override; + double getBinEntries(EcalDQMSetupObjects const, EcalElectronicsId const &, int = 0) const override; + double getBinEntries(EcalDQMSetupObjects const, int, int = 0) const override; - int findBin(DetId const &) const; - int findBin(EcalElectronicsId const &) const; - int findBin(int) const; - int findBin(DetId const &, double, double = 0.) const override; - int findBin(EcalElectronicsId const &, double, double = 0.) const override; - int findBin(int, double, double = 0.) const override; + int findBin(EcalDQMSetupObjects const, DetId const &) const; + int findBin(EcalDQMSetupObjects const, EcalElectronicsId const &) const; + int findBin(EcalDQMSetupObjects const, int) const; + int findBin(EcalDQMSetupObjects const, DetId const &, double, double = 0.) const override; + int findBin(EcalDQMSetupObjects const, EcalElectronicsId const &, double, double = 0.) const override; + int findBin(EcalDQMSetupObjects const, int, double, double = 0.) const override; - void reset(double = 0., double = 0., double = 0.) override; + void reset(EcalElectronicsMapping const *, double = 0., double = 0., double = 0.) override; }; } // namespace ecaldqm diff --git a/DQM/EcalCommon/interface/MESetDet2D.h b/DQM/EcalCommon/interface/MESetDet2D.h index 63ba73e52d1a2..1a3d93659a0d0 100644 --- a/DQM/EcalCommon/interface/MESetDet2D.h +++ b/DQM/EcalCommon/interface/MESetDet2D.h @@ -20,47 +20,47 @@ namespace ecaldqm { MESet *clone(std::string const & = "") const override; - void book(DQMStore::IBooker &) override; + void book(DQMStore::IBooker &, EcalElectronicsMapping const *) override; - void fill(DetId const &, double = 1., double = 0., double = 0.) override; - void fill(EcalElectronicsId const &, double = 1., double = 0., double = 0.) override; - void fill(int, double = 1., double = 1., double = 1.) override; + void fill(EcalDQMSetupObjects const, DetId const &, double = 1., double = 0., double = 0.) override; + void fill(EcalDQMSetupObjects const, EcalElectronicsId const &, double = 1., double = 0., double = 0.) override; + void fill(EcalDQMSetupObjects const, int, double = 1., double = 1., double = 1.) override; using MESetEcal::setBinContent; - void setBinContent(DetId const &, double) override; - void setBinContent(EcalElectronicsId const &, double) override; - void setBinContent(int, double) override; + void setBinContent(EcalDQMSetupObjects const, DetId const &, double) override; + void setBinContent(EcalDQMSetupObjects const, EcalElectronicsId const &, double) override; + void setBinContent(EcalDQMSetupObjects const, int, double) override; using MESetEcal::setBinError; - void setBinError(DetId const &, double) override; - void setBinError(EcalElectronicsId const &, double) override; - void setBinError(int, double) override; + void setBinError(EcalDQMSetupObjects const, DetId const &, double) override; + void setBinError(EcalDQMSetupObjects const, EcalElectronicsId const &, double) override; + void setBinError(EcalDQMSetupObjects const, int, double) override; using MESetEcal::setBinEntries; - void setBinEntries(DetId const &, double) override; - void setBinEntries(EcalElectronicsId const &, double) override; - void setBinEntries(int, double) override; + void setBinEntries(EcalDQMSetupObjects const, DetId const &, double) override; + void setBinEntries(EcalDQMSetupObjects const, EcalElectronicsId const &, double) override; + void setBinEntries(EcalDQMSetupObjects const, int, double) override; using MESetEcal::getBinContent; - double getBinContent(DetId const &, int = 0) const override; - double getBinContent(EcalElectronicsId const &, int = 0) const override; - double getBinContent(int, int = 0) const override; + double getBinContent(EcalDQMSetupObjects const, DetId const &, int = 0) const override; + double getBinContent(EcalDQMSetupObjects const, EcalElectronicsId const &, int = 0) const override; + double getBinContent(EcalDQMSetupObjects const, int, int = 0) const override; using MESetEcal::getBinError; - double getBinError(DetId const &, int = 0) const override; - double getBinError(EcalElectronicsId const &, int = 0) const override; - double getBinError(int, int = 0) const override; + double getBinError(EcalDQMSetupObjects const, DetId const &, int = 0) const override; + double getBinError(EcalDQMSetupObjects const, EcalElectronicsId const &, int = 0) const override; + double getBinError(EcalDQMSetupObjects const, int, int = 0) const override; using MESetEcal::getBinEntries; - double getBinEntries(DetId const &, int = 0) const override; - double getBinEntries(EcalElectronicsId const &, int = 0) const override; - double getBinEntries(int, int) const override; + double getBinEntries(EcalDQMSetupObjects const, DetId const &, int = 0) const override; + double getBinEntries(EcalDQMSetupObjects const, EcalElectronicsId const &, int = 0) const override; + double getBinEntries(EcalDQMSetupObjects const, int, int) const override; using MESetEcal::findBin; - int findBin(DetId const &) const; - int findBin(EcalElectronicsId const &) const; + int findBin(EcalDQMSetupObjects const, DetId const &) const; + int findBin(EcalDQMSetupObjects const, EcalElectronicsId const &) const; - void reset(double = 0., double = 0., double = 0.) override; + void reset(EcalElectronicsMapping const *, double = 0., double = 0., double = 0.) override; protected: void fill_(unsigned, int, double) override; diff --git a/DQM/EcalCommon/interface/MESetEcal.h b/DQM/EcalCommon/interface/MESetEcal.h index 135354ccb14a3..4875a5ceae40d 100644 --- a/DQM/EcalCommon/interface/MESetEcal.h +++ b/DQM/EcalCommon/interface/MESetEcal.h @@ -29,45 +29,45 @@ namespace ecaldqm { MESet *clone(std::string const & = "") const override; - void book(DQMStore::IBooker &) override; - bool retrieve(DQMStore::IGetter &, std::string * = nullptr) const override; + void book(DQMStore::IBooker &, EcalElectronicsMapping const *) override; + bool retrieve(EcalElectronicsMapping const *, DQMStore::IGetter &, std::string * = nullptr) const override; - void fill(DetId const &, double = 1., double = 1., double = 1.) override; - void fill(EcalElectronicsId const &, double = 1., double = 1., double = 1.) override; - void fill(int, double = 1., double = 1., double = 1.) override; - void fill(double, double = 1., double = 1.) override; + void fill(EcalDQMSetupObjects const, DetId const &, double = 1., double = 1., double = 1.) override; + void fill(EcalDQMSetupObjects const, EcalElectronicsId const &, double = 1., double = 1., double = 1.) override; + void fill(EcalDQMSetupObjects const, int, double = 1., double = 1., double = 1.) override; + void fill(EcalDQMSetupObjects const, double, double = 1., double = 1.) override; - void setBinContent(DetId const &, int, double) override; - void setBinContent(EcalElectronicsId const &, int, double) override; - void setBinContent(int, int, double) override; + void setBinContent(EcalDQMSetupObjects const, DetId const &, int, double) override; + void setBinContent(EcalDQMSetupObjects const, EcalElectronicsId const &, int, double) override; + void setBinContent(EcalDQMSetupObjects const, int, int, double) override; - void setBinError(DetId const &, int, double) override; - void setBinError(EcalElectronicsId const &, int, double) override; - void setBinError(int, int, double) override; + void setBinError(EcalDQMSetupObjects const, DetId const &, int, double) override; + void setBinError(EcalDQMSetupObjects const, EcalElectronicsId const &, int, double) override; + void setBinError(EcalDQMSetupObjects const, int, int, double) override; - void setBinEntries(DetId const &, int, double) override; - void setBinEntries(EcalElectronicsId const &, int, double) override; - void setBinEntries(int, int, double) override; + void setBinEntries(EcalDQMSetupObjects const, DetId const &, int, double) override; + void setBinEntries(EcalDQMSetupObjects const, EcalElectronicsId const &, int, double) override; + void setBinEntries(EcalDQMSetupObjects const, int, int, double) override; - double getBinContent(DetId const &, int) const override; - double getBinContent(EcalElectronicsId const &, int) const override; - double getBinContent(int, int) const override; + double getBinContent(EcalDQMSetupObjects const, DetId const &, int) const override; + double getBinContent(EcalDQMSetupObjects const, EcalElectronicsId const &, int) const override; + double getBinContent(EcalDQMSetupObjects const, int, int) const override; - double getBinError(DetId const &, int) const override; - double getBinError(EcalElectronicsId const &, int) const override; - double getBinError(int, int) const override; + double getBinError(EcalDQMSetupObjects const, DetId const &, int) const override; + double getBinError(EcalDQMSetupObjects const, EcalElectronicsId const &, int) const override; + double getBinError(EcalDQMSetupObjects const, int, int) const override; - double getBinEntries(DetId const &, int) const override; - double getBinEntries(EcalElectronicsId const &, int) const override; - double getBinEntries(int, int) const override; + double getBinEntries(EcalDQMSetupObjects const, DetId const &, int) const override; + double getBinEntries(EcalDQMSetupObjects const, EcalElectronicsId const &, int) const override; + double getBinEntries(EcalDQMSetupObjects const, int, int) const override; - virtual int findBin(DetId const &, double, double = 0.) const; - virtual int findBin(EcalElectronicsId const &, double, double = 0.) const; - virtual int findBin(int, double, double = 0.) const; + virtual int findBin(EcalDQMSetupObjects const, DetId const &, double, double = 0.) const; + virtual int findBin(EcalDQMSetupObjects const, EcalElectronicsId const &, double, double = 0.) const; + virtual int findBin(EcalDQMSetupObjects const, int, double, double = 0.) const; bool isVariableBinning() const override; - std::vector generatePaths() const; + std::vector generatePaths(EcalElectronicsMapping const *) const; protected: unsigned logicalDimensions_; diff --git a/DQM/EcalCommon/interface/MESetMulti.h b/DQM/EcalCommon/interface/MESetMulti.h index 43804ca226693..d1a71fd377b30 100644 --- a/DQM/EcalCommon/interface/MESetMulti.h +++ b/DQM/EcalCommon/interface/MESetMulti.h @@ -22,89 +22,130 @@ namespace ecaldqm { MESet *clone(std::string const & = "") const override; - void book(DQMStore::IBooker &) override; - bool retrieve(DQMStore::IGetter &, std::string * = nullptr) const override; + void book(DQMStore::IBooker &, EcalElectronicsMapping const *) override; + bool retrieve(EcalElectronicsMapping const *, DQMStore::IGetter &, std::string * = nullptr) const override; void clear() const override; - void fill(DetId const &_id, double _xyw = 1., double _yw = 1., double _w = 1.) override { - current_->fill(_id, _xyw, _yw, _w); + void fill( + EcalDQMSetupObjects const edso, DetId const &_id, double _xyw = 1., double _yw = 1., double _w = 1.) override { + current_->fill(edso, _id, _xyw, _yw, _w); } - void fill(EcalElectronicsId const &_id, double _xyw = 1., double _yw = 1., double _w = 1.) override { - current_->fill(_id, _xyw, _yw, _w); + void fill(EcalDQMSetupObjects const edso, + EcalElectronicsId const &_id, + double _xyw = 1., + double _yw = 1., + double _w = 1.) override { + current_->fill(edso, _id, _xyw, _yw, _w); } - void fill(int _dcctccid, double _xyw = 1., double _yw = 1., double _w = 1.) override { - current_->fill(_dcctccid, _xyw, _yw, _w); + void fill( + EcalDQMSetupObjects const edso, int _dcctccid, double _xyw = 1., double _yw = 1., double _w = 1.) override { + current_->fill(edso, _dcctccid, _xyw, _yw, _w); + } + void fill(EcalDQMSetupObjects const edso, double _x, double _yw = 1., double _w = 1.) override { + current_->fill(edso, _x, _yw, _w); } - void fill(double _x, double _yw = 1., double _w = 1.) override { current_->fill(_x, _yw, _w); } - void setBinContent(DetId const &_id, double _content) override { current_->setBinContent(_id, _content); } - void setBinContent(EcalElectronicsId const &_id, double _content) override { - current_->setBinContent(_id, _content); + void setBinContent(EcalDQMSetupObjects const edso, DetId const &_id, double _content) override { + current_->setBinContent(edso, _id, _content); + } + void setBinContent(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, double _content) override { + current_->setBinContent(edso, _id, _content); + } + void setBinContent(EcalDQMSetupObjects const edso, int _dcctccid, double _content) override { + current_->setBinContent(edso, _dcctccid, _content); } - void setBinContent(int _dcctccid, double _content) override { current_->setBinContent(_dcctccid, _content); } - void setBinContent(DetId const &_id, int _bin, double _content) override { - current_->setBinContent(_id, _bin, _content); + void setBinContent(EcalDQMSetupObjects const edso, DetId const &_id, int _bin, double _content) override { + current_->setBinContent(edso, _id, _bin, _content); } - void setBinContent(EcalElectronicsId const &_id, int _bin, double _content) override { - current_->setBinContent(_id, _bin, _content); + void setBinContent(EcalDQMSetupObjects const edso, + EcalElectronicsId const &_id, + int _bin, + double _content) override { + current_->setBinContent(edso, _id, _bin, _content); } - void setBinContent(int _dcctccid, int _bin, double _content) override { - current_->setBinContent(_dcctccid, _bin, _content); + void setBinContent(EcalDQMSetupObjects const edso, int _dcctccid, int _bin, double _content) override { + current_->setBinContent(edso, _dcctccid, _bin, _content); } - void setBinError(DetId const &_id, double _error) override { current_->setBinError(_id, _error); } - void setBinError(EcalElectronicsId const &_id, double _error) override { current_->setBinError(_id, _error); } - void setBinError(int _dcctccid, double _error) override { current_->setBinError(_dcctccid, _error); } - void setBinError(DetId const &_id, int _bin, double _error) override { current_->setBinError(_id, _bin, _error); } - void setBinError(EcalElectronicsId const &_id, int _bin, double _error) override { - current_->setBinError(_id, _bin, _error); + void setBinError(EcalDQMSetupObjects const edso, DetId const &_id, double _error) override { + current_->setBinError(edso, _id, _error); + } + void setBinError(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, double _error) override { + current_->setBinError(edso, _id, _error); + } + void setBinError(EcalDQMSetupObjects const edso, int _dcctccid, double _error) override { + current_->setBinError(edso, _dcctccid, _error); } - void setBinError(int _dcctccid, int _bin, double _error) override { - current_->setBinError(_dcctccid, _bin, _error); + void setBinError(EcalDQMSetupObjects const edso, DetId const &_id, int _bin, double _error) override { + current_->setBinError(edso, _id, _bin, _error); + } + void setBinError(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, int _bin, double _error) override { + current_->setBinError(edso, _id, _bin, _error); + } + void setBinError(EcalDQMSetupObjects const edso, int _dcctccid, int _bin, double _error) override { + current_->setBinError(edso, _dcctccid, _bin, _error); } - void setBinEntries(DetId const &_id, double _entries) override { current_->setBinEntries(_id, _entries); } - void setBinEntries(EcalElectronicsId const &_id, double _entries) override { - current_->setBinEntries(_id, _entries); + void setBinEntries(EcalDQMSetupObjects const edso, DetId const &_id, double _entries) override { + current_->setBinEntries(edso, _id, _entries); + } + void setBinEntries(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, double _entries) override { + current_->setBinEntries(edso, _id, _entries); } - void setBinEntries(int _dcctccid, double _entries) override { current_->setBinEntries(_dcctccid, _entries); } - void setBinEntries(DetId const &_id, int _bin, double _entries) override { - current_->setBinEntries(_id, _bin, _entries); + void setBinEntries(EcalDQMSetupObjects const edso, int _dcctccid, double _entries) override { + current_->setBinEntries(edso, _dcctccid, _entries); } - void setBinEntries(EcalElectronicsId const &_id, int _bin, double _entries) override { - current_->setBinEntries(_id, _bin, _entries); + void setBinEntries(EcalDQMSetupObjects const edso, DetId const &_id, int _bin, double _entries) override { + current_->setBinEntries(edso, _id, _bin, _entries); } - void setBinEntries(int _dcctccid, int _bin, double _entries) override { - current_->setBinEntries(_dcctccid, _bin, _entries); + void setBinEntries(EcalDQMSetupObjects const edso, + EcalElectronicsId const &_id, + int _bin, + double _entries) override { + current_->setBinEntries(edso, _id, _bin, _entries); + } + void setBinEntries(EcalDQMSetupObjects const edso, int _dcctccid, int _bin, double _entries) override { + current_->setBinEntries(edso, _dcctccid, _bin, _entries); } - double getBinContent(DetId const &_id, int _bin = 0) const override { return current_->getBinContent(_id, _bin); } - double getBinContent(EcalElectronicsId const &_id, int _bin = 0) const override { - return current_->getBinContent(_id, _bin); + double getBinContent(EcalDQMSetupObjects const edso, DetId const &_id, int _bin = 0) const override { + return current_->getBinContent(edso, _id, _bin); + } + double getBinContent(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, int _bin = 0) const override { + return current_->getBinContent(edso, _id, _bin); } - double getBinContent(int _dcctccid, int _bin = 0) const override { - return current_->getBinContent(_dcctccid, _bin); + double getBinContent(EcalDQMSetupObjects const edso, int _dcctccid, int _bin = 0) const override { + return current_->getBinContent(edso, _dcctccid, _bin); } - double getBinError(DetId const &_id, int _bin = 0) const override { return current_->getBinError(_id, _bin); } - double getBinError(EcalElectronicsId const &_id, int _bin = 0) const override { - return current_->getBinError(_id, _bin); + double getBinError(EcalDQMSetupObjects const edso, DetId const &_id, int _bin = 0) const override { + return current_->getBinError(edso, _id, _bin); + } + double getBinError(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, int _bin = 0) const override { + return current_->getBinError(edso, _id, _bin); + } + double getBinError(EcalDQMSetupObjects const edso, int _dcctccid, int _bin = 0) const override { + return current_->getBinError(edso, _dcctccid, _bin); } - double getBinError(int _dcctccid, int _bin = 0) const override { return current_->getBinError(_dcctccid, _bin); } - double getBinEntries(DetId const &_id, int _bin = 0) const override { return current_->getBinEntries(_id, _bin); } - double getBinEntries(EcalElectronicsId const &_id, int _bin = 0) const override { - return current_->getBinEntries(_id, _bin); + double getBinEntries(EcalDQMSetupObjects const edso, DetId const &_id, int _bin = 0) const override { + return current_->getBinEntries(edso, _id, _bin); + } + double getBinEntries(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, int _bin = 0) const override { + return current_->getBinEntries(edso, _id, _bin); } - double getBinEntries(int _dcctccid, int _bin = 0) const override { - return current_->getBinEntries(_dcctccid, _bin); + double getBinEntries(EcalDQMSetupObjects const edso, int _dcctccid, int _bin = 0) const override { + return current_->getBinEntries(edso, _dcctccid, _bin); } - void reset(double = 0., double = 0., double = 0.) override; + void reset(EcalElectronicsMapping const *, double = 0., double = 0., double = 0.) override; void resetAll(double = 0., double = 0., double = 0.) override; - bool maskMatches(DetId const &_id, uint32_t _mask, StatusManager const *_statusManager) const override { - return current_ && current_->maskMatches(_id, _mask, _statusManager); + bool maskMatches(DetId const &_id, + uint32_t _mask, + StatusManager const *_statusManager, + EcalTrigTowerConstituentsMap const *trigTowerMap) const override { + return current_ && current_->maskMatches(_id, _mask, _statusManager, trigTowerMap); } bool isVariableBinning() const override { return current_->isVariableBinning(); } @@ -118,12 +159,24 @@ namespace ecaldqm { unsigned getMultiplicity() const { return sets_.size(); } unsigned getIndex(PathReplacements const &) const; - const_iterator begin() const override { return const_iterator(*current_); } - const_iterator end() const override { return const_iterator(*current_, -1, -1); } - const_iterator beginChannel() const override { return current_->beginChannel(); } - iterator begin() override { return iterator(*current_); } - iterator end() override { return iterator(*current_, -1, -1); } - iterator beginChannel() override { return current_->beginChannel(); } + const_iterator begin(EcalElectronicsMapping const *electronicsMap) const override { + return const_iterator(electronicsMap, *current_); + } + const_iterator end(EcalElectronicsMapping const *electronicsMap) const override { + return const_iterator(electronicsMap, *current_, -1, -1); + } + const_iterator beginChannel(EcalElectronicsMapping const *electronicsMap) const override { + return current_->beginChannel(electronicsMap); + } + iterator begin(EcalElectronicsMapping const *electronicsMap) override { + return iterator(electronicsMap, *current_); + } + iterator end(EcalElectronicsMapping const *electronicsMap) override { + return iterator(electronicsMap, *current_, -1, -1); + } + iterator beginChannel(EcalElectronicsMapping const *electronicsMap) override { + return current_->beginChannel(electronicsMap); + } protected: mutable MESet *current_; diff --git a/DQM/EcalCommon/interface/MESetNonObject.h b/DQM/EcalCommon/interface/MESetNonObject.h index 9ff584ef2b949..78ae254addc1f 100644 --- a/DQM/EcalCommon/interface/MESetNonObject.h +++ b/DQM/EcalCommon/interface/MESetNonObject.h @@ -20,26 +20,26 @@ namespace ecaldqm { MESet *clone(std::string const & = "") const override; - void book(DQMStore::IBooker &) override; - bool retrieve(DQMStore::IGetter &, std::string * = nullptr) const override; + void book(DQMStore::IBooker &, EcalElectronicsMapping const *) override; + bool retrieve(EcalElectronicsMapping const *, DQMStore::IGetter &, std::string * = nullptr) const override; - void fill(double, double = 1., double = 1.) override; + void fill(EcalDQMSetupObjects const, double, double = 1., double = 1.) override; - void setBinContent(int, double) override; + void setBinContent(EcalDQMSetupObjects const, int, double) override; - void setBinError(int, double) override; + void setBinError(EcalDQMSetupObjects const, int, double) override; - void setBinEntries(int, double) override; + void setBinEntries(EcalDQMSetupObjects const, int, double) override; - double getBinContent(int, int = 0) const override; + double getBinContent(EcalDQMSetupObjects const, int, int = 0) const override; double getFloatValue() const; - double getBinError(int, int = 0) const override; + double getBinError(EcalDQMSetupObjects const, int, int = 0) const override; - double getBinEntries(int, int = 0) const override; + double getBinEntries(EcalDQMSetupObjects const, int, int = 0) const override; - int findBin(double, double = 0.) const; + int findBin(EcalDQMSetupObjects const, double, double = 0.) const; bool isVariableBinning() const override; diff --git a/DQM/EcalCommon/interface/MESetProjection.h b/DQM/EcalCommon/interface/MESetProjection.h index 08f7579fc1a56..63fa018bb03b8 100644 --- a/DQM/EcalCommon/interface/MESetProjection.h +++ b/DQM/EcalCommon/interface/MESetProjection.h @@ -21,27 +21,27 @@ namespace ecaldqm { MESet *clone(std::string const & = "") const override; - void fill(DetId const &, double = 1., double = 0., double = 0.) override; - void fill(int, double = 1., double = 1., double = 0.) override; - void fill(double, double = 1., double = 0.) override; + void fill(EcalDQMSetupObjects const, DetId const &, double = 1., double = 0., double = 0.) override; + void fill(EcalDQMSetupObjects const, int, double = 1., double = 1., double = 0.) override; + void fill(EcalDQMSetupObjects const, double, double = 1., double = 0.) override; using MESetEcal::setBinContent; - void setBinContent(DetId const &, double) override; + void setBinContent(EcalDQMSetupObjects const, DetId const &, double) override; using MESetEcal::setBinError; - void setBinError(DetId const &, double) override; + void setBinError(EcalDQMSetupObjects const, DetId const &, double) override; using MESetEcal::setBinEntries; - void setBinEntries(DetId const &, double) override; + void setBinEntries(EcalDQMSetupObjects const, DetId const &, double) override; using MESetEcal::getBinContent; - double getBinContent(DetId const &, int = 0) const override; + double getBinContent(EcalDQMSetupObjects const, DetId const &, int = 0) const override; using MESetEcal::getBinError; - double getBinError(DetId const &, int = 0) const override; + double getBinError(EcalDQMSetupObjects const, DetId const &, int = 0) const override; using MESetEcal::getBinEntries; - double getBinEntries(DetId const &, int = 0) const override; + double getBinEntries(EcalDQMSetupObjects const, DetId const &, int = 0) const override; }; } // namespace ecaldqm diff --git a/DQM/EcalCommon/interface/MESetTrend.h b/DQM/EcalCommon/interface/MESetTrend.h index c8548396016f5..c0b1ac81aaba6 100644 --- a/DQM/EcalCommon/interface/MESetTrend.h +++ b/DQM/EcalCommon/interface/MESetTrend.h @@ -24,17 +24,17 @@ namespace ecaldqm { MESet *clone(std::string const & = "") const override; - void book(DQMStore::IBooker &) override; + void book(DQMStore::IBooker &, EcalElectronicsMapping const *) override; - void fill(DetId const &, double, double = 1., double = 1.) override; - void fill(EcalElectronicsId const &, double, double = 1., double = 1.) override; - void fill(int, double, double = 1., double = 1.) override; - void fill(double, double = 1., double = 1.) override; + void fill(EcalDQMSetupObjects const, DetId const &, double, double = 1., double = 1.) override; + void fill(EcalDQMSetupObjects const, EcalElectronicsId const &, double, double = 1., double = 1.) override; + void fill(EcalDQMSetupObjects const, int, double, double = 1., double = 1.) override; + void fill(EcalDQMSetupObjects const, double, double = 1., double = 1.) override; - int findBin(DetId const &, double, double = 0.) const override; - int findBin(EcalElectronicsId const &, double, double = 0.) const override; - int findBin(int, double, double = 0.) const override; - int findBin(double, double = 0.) const; + int findBin(EcalDQMSetupObjects const, DetId const &, double, double = 0.) const override; + int findBin(EcalDQMSetupObjects const, EcalElectronicsId const &, double, double = 0.) const override; + int findBin(EcalDQMSetupObjects const, int, double, double = 0.) const override; + int findBin(EcalDQMSetupObjects const, double, double = 0.) const; bool isVariableBinning() const override { return true; } diff --git a/DQM/EcalCommon/interface/StatusManager.h b/DQM/EcalCommon/interface/StatusManager.h index 364de187efa4f..05c381be3b006 100644 --- a/DQM/EcalCommon/interface/StatusManager.h +++ b/DQM/EcalCommon/interface/StatusManager.h @@ -9,6 +9,8 @@ #include "CondFormats/EcalObjects/interface/EcalDQMChannelStatus.h" #include "CondFormats/EcalObjects/interface/EcalDQMTowerStatus.h" +#include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h" + namespace ecaldqm { class StatusManager { @@ -16,7 +18,7 @@ namespace ecaldqm { StatusManager(); ~StatusManager() {} - void readFromStream(std::istream &); + void readFromStream(std::istream &, EcalElectronicsMapping const *); void readFromObj(EcalDQMChannelStatus const &, EcalDQMTowerStatus const &); void writeToStream(std::ostream &) const; void writeToObj(EcalDQMChannelStatus &, EcalDQMTowerStatus &) const; diff --git a/DQM/EcalCommon/plugins/EcalMEFormatter.cc b/DQM/EcalCommon/plugins/EcalMEFormatter.cc index 08e0f3fbfcc6d..b9e7a0baa396a 100644 --- a/DQM/EcalCommon/plugins/EcalMEFormatter.cc +++ b/DQM/EcalCommon/plugins/EcalMEFormatter.cc @@ -27,7 +27,8 @@ void EcalMEFormatter::fillDescriptions(edm::ConfigurationDescriptions &_descs) { void EcalMEFormatter::dqmEndLuminosityBlock(DQMStore::IBooker &, DQMStore::IGetter &_igetter, edm::LuminosityBlock const &, - edm::EventSetup const &) { + edm::EventSetup const &_es) { + setSetupObjects(_es); format_(_igetter, true); } @@ -40,7 +41,7 @@ void EcalMEFormatter::format_(DQMStore::IGetter &_igetter, bool _checkLumi) { if (_checkLumi && !mItr.second->getLumiFlag()) continue; mItr.second->clear(); - if (!mItr.second->retrieve(_igetter, &failedPath)) { + if (!mItr.second->retrieve(GetElectronicsMap(), _igetter, &failedPath)) { if (verbosity_ > 0) edm::LogWarning("EcalDQM") << "Could not find ME " << mItr.first << "@" << failedPath; continue; diff --git a/DQM/EcalCommon/src/DQWorker.cc b/DQM/EcalCommon/src/DQWorker.cc index 4f3757bc8b482..6099e16dfe2bc 100644 --- a/DQM/EcalCommon/src/DQWorker.cc +++ b/DQM/EcalCommon/src/DQWorker.cc @@ -9,9 +9,21 @@ #include "DataFormats/Provenance/interface/EventID.h" +#include "Geometry/EcalMapping/interface/EcalMappingRcd.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "Geometry/Records/interface/CaloTopologyRecord.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" + namespace ecaldqm { DQWorker::DQWorker() - : name_(""), MEs_(), booked_(false), timestamp_(), verbosity_(0), onlineMode_(false), willConvertToEDM_(true) {} + : name_(""), + MEs_(), + booked_(false), + timestamp_(), + verbosity_(0), + onlineMode_(false), + willConvertToEDM_(true), + edso_() {} DQWorker::~DQWorker() noexcept(false) {} @@ -67,10 +79,64 @@ namespace ecaldqm { if (booked_) return; for (MESetCollection::iterator mItr(MEs_.begin()); mItr != MEs_.end(); ++mItr) - mItr->second->book(_booker); + mItr->second->book(_booker, GetElectronicsMap()); booked_ = true; } + void DQWorker::setSetupObjects(edm::EventSetup const &_es) { + edm::ESHandle elecMapHandle; + _es.get().get(elecMapHandle); + edso_.electronicsMap = elecMapHandle.product(); + + edm::ESHandle ttMapHandle; + _es.get().get(ttMapHandle); + edso_.trigtowerMap = ttMapHandle.product(); + + edm::ESHandle geomHandle; + _es.get().get(geomHandle); + edso_.geometry = geomHandle.product(); + + edm::ESHandle topoHandle; + _es.get().get(topoHandle); + edso_.topology = topoHandle.product(); + } + + EcalElectronicsMapping const *DQWorker::GetElectronicsMap() { + if (!edso_.electronicsMap) + throw cms::Exception("InvalidCall") << "Electronics Mapping not initialized"; + return edso_.electronicsMap; + } + + EcalTrigTowerConstituentsMap const *DQWorker::GetTrigTowerMap() { + if (!edso_.trigtowerMap) + throw cms::Exception("InvalidCall") << "TrigTowerConstituentsMap not initialized"; + return edso_.trigtowerMap; + } + + CaloGeometry const *DQWorker::GetGeometry() { + if (!edso_.geometry) + throw cms::Exception("InvalidCall") << "CaloGeometry not initialized"; + return edso_.geometry; + } + + CaloTopology const *DQWorker::GetTopology() { + if (!edso_.topology) + throw cms::Exception("InvalidCall") << "CaloTopology not initialized"; + return edso_.topology; + } + + EcalDQMSetupObjects const DQWorker::getEcalDQMSetupObjects() { + if (!edso_.electronicsMap) + throw cms::Exception("InvalidCall") << "Electronics Mapping not initialized"; + if (!edso_.trigtowerMap) + throw cms::Exception("InvalidCall") << "TrigTowerConstituentsMap not initialized"; + if (!edso_.geometry) + throw cms::Exception("InvalidCall") << "CaloGeometry not initialized"; + if (!edso_.topology) + throw cms::Exception("InvalidCall") << "CaloTopology not initialized"; + return edso_; + } + void DQWorker::print_(std::string const &_message, int _threshold /* = 0*/) const { if (verbosity_ > _threshold) edm::LogInfo("EcalDQM") << name_ << ": " << _message; diff --git a/DQM/EcalCommon/src/EcalDQMCommonUtils.cc b/DQM/EcalCommon/src/EcalDQMCommonUtils.cc index 8243dc99ae1a1..7a2235d8e2786 100644 --- a/DQM/EcalCommon/src/EcalDQMCommonUtils.cc +++ b/DQM/EcalCommon/src/EcalDQMCommonUtils.cc @@ -13,9 +13,7 @@ namespace ecaldqm { const double etaBound(1.479); - unsigned dccId(const DetId &_id) { - EcalElectronicsMapping const *map(getElectronicsMap()); - + unsigned dccId(const DetId &_id, const EcalElectronicsMapping *map) { unsigned subdet(_id.subdetId()); if (subdet == EcalBarrel) @@ -53,9 +51,7 @@ namespace ecaldqm { return (itr - memDCC.begin()); } - unsigned tccId(const DetId &_id) { - EcalElectronicsMapping const *map(getElectronicsMap()); - + unsigned tccId(const DetId &_id, const EcalElectronicsMapping *map) { unsigned subdet(_id.subdetId()); if (subdet == EcalBarrel) @@ -74,9 +70,11 @@ namespace ecaldqm { return 0; } - unsigned tccId(const EcalElectronicsId &_id) { return getElectronicsMap()->getTriggerElectronicsId(_id).tccId(); } + unsigned tccId(const EcalElectronicsId &_id, const EcalElectronicsMapping *map) { + return map->getTriggerElectronicsId(_id).tccId(); + } - unsigned towerId(const DetId &_id) { + unsigned towerId(const DetId &_id, const EcalElectronicsMapping *map) { unsigned subdet(_id.subdetId()); if (subdet == EcalBarrel) @@ -85,9 +83,9 @@ namespace ecaldqm { return EcalTrigTowerDetId(_id).iTT(); else if (subdet == EcalEndcap) { if (isEcalScDetId(_id)) - return getElectronicsMap()->getDCCandSC(EcalScDetId(_id)).second; + return map->getDCCandSC(EcalScDetId(_id)).second; else - return getElectronicsMap()->getElectronicsId(EEDetId(_id)).towerId(); + return map->getElectronicsId(EEDetId(_id)).towerId(); } throw cms::Exception("InvalidDetId") << "EcalDQMCommonUtils::towerId(" << std::hex << uint32_t(_id) << ")" @@ -98,15 +96,15 @@ namespace ecaldqm { unsigned towerId(const EcalElectronicsId &_id) { return _id.towerId(); } - unsigned ttId(const DetId &_id) { + unsigned ttId(const DetId &_id, const EcalElectronicsMapping *map) { unsigned subdet(_id.subdetId()); if (subdet == EcalBarrel) return EBDetId(_id).tower().iTT(); else if (subdet == EcalTriggerTower) - return getElectronicsMap()->iTT(EcalTrigTowerDetId(_id)); + return map->iTT(EcalTrigTowerDetId(_id)); else if (subdet == EcalEndcap && !isEcalScDetId(_id)) - return getElectronicsMap()->getTriggerElectronicsId(_id).ttId(); + return map->getTriggerElectronicsId(_id).ttId(); throw cms::Exception("InvalidDetId") << "EcalDQMCommonUtils::ttId(" << std::hex << uint32_t(_id) << ")" << std::endl; @@ -114,15 +112,17 @@ namespace ecaldqm { return 0; } - unsigned ttId(const EcalElectronicsId &_id) { return getElectronicsMap()->getTriggerElectronicsId(_id).ttId(); } + unsigned ttId(const EcalElectronicsId &_id, const EcalElectronicsMapping *map) { + return map->getTriggerElectronicsId(_id).ttId(); + } - unsigned rtHalf(DetId const &_id) { + unsigned rtHalf(DetId const &_id, const EcalElectronicsMapping *electronicsMap) { if (_id.subdetId() == EcalBarrel) { int ic(EBDetId(_id).ic()); if ((ic - 1) / 20 > 4 && (ic - 1) % 20 < 10) return 1; } else { - unsigned iDCC(dccId(_id) - 1); + unsigned iDCC(dccId(_id, electronicsMap) - 1); if ((iDCC == kEEm05 || iDCC == kEEp05) && EEDetId(_id).ix() > 50) return 1; } @@ -206,11 +206,11 @@ namespace ecaldqm { return 0; } - double eta(const EBDetId &_ebid) { + double eta(const EBDetId &_ebid, const CaloGeometry *geometry) { return _ebid.approxEta() + (_ebid.zside() < 0 ? 0.5 : -0.5) * EBDetId::crystalUnitToEta; } - double eta(const EEDetId &_id) { return getGeometry()->getPosition(_id).eta(); } + double eta(const EEDetId &_id, const CaloGeometry *geometry) { return geometry->getPosition(_id).eta(); } double phi(EBDetId const &_ebid) { const double degToRad(0.0174533); @@ -410,99 +410,4 @@ namespace ecaldqm { else return _towerId <= 68; } - - /* - Note on concurrency compatibility: - Call to getters bellow must always happen after - EcalDQMonitor::ecaldqmGetSetupObjects or equivalent. - As long as check-set-get are executed in this order - within each thread, the following functions are - thread-safe. -*/ - - std::mutex mapMutex; - EcalElectronicsMapping const *electronicsMap(nullptr); - EcalTrigTowerConstituentsMap const *trigtowerMap(nullptr); - CaloGeometry const *geometry(nullptr); - CaloTopology const *topology(nullptr); - - bool checkElectronicsMap(bool _throw /* = true*/) { - std::lock_guard lock(mapMutex); - if (electronicsMap) - return true; - if (_throw) - throw cms::Exception("InvalidCall") << "ElectronicsMapping not initialized"; - return false; - } - - EcalElectronicsMapping const *getElectronicsMap() { - if (!electronicsMap) - checkElectronicsMap(); - return electronicsMap; - } - - void setElectronicsMap(EcalElectronicsMapping const *_map) { - std::lock_guard lock(mapMutex); - electronicsMap = _map; - } - - bool checkTrigTowerMap(bool _throw /* = true*/) { - std::lock_guard lock(mapMutex); - if (trigtowerMap) - return true; - if (_throw) - throw cms::Exception("InvalidCall") << "TrigTowerConstituentsMap not initialized"; - return false; - } - - EcalTrigTowerConstituentsMap const *getTrigTowerMap() { - if (!trigtowerMap) - checkTrigTowerMap(); - return trigtowerMap; - } - - void setTrigTowerMap(EcalTrigTowerConstituentsMap const *_map) { - std::lock_guard lock(mapMutex); - trigtowerMap = _map; - } - - bool checkGeometry(bool _throw /* = true*/) { - std::lock_guard lock(mapMutex); - if (geometry) - return true; - if (_throw) - throw cms::Exception("InvalidCall") << "CaloGeometry not initialized"; - return false; - } - - CaloGeometry const *getGeometry() { - if (!geometry) - checkGeometry(); - return geometry; - } - - void setGeometry(CaloGeometry const *_geom) { - std::lock_guard lock(mapMutex); - geometry = _geom; - } - - bool checkTopology(bool _throw /* = true*/) { - std::lock_guard lock(mapMutex); - if (topology) - return true; - if (_throw) - throw cms::Exception("InvalidCall") << "CaloTopology not initialized"; - return false; - } - - CaloTopology const *getTopology() { - if (!topology) - checkTopology(); - return topology; - } - - void setTopology(CaloTopology const *_geom) { - std::lock_guard lock(mapMutex); - topology = _geom; - } } // namespace ecaldqm diff --git a/DQM/EcalCommon/src/EcalDQMCommonUtils2.cc b/DQM/EcalCommon/src/EcalDQMCommonUtils2.cc index da44a7bfc9157..05c96e17567b4 100644 --- a/DQM/EcalCommon/src/EcalDQMCommonUtils2.cc +++ b/DQM/EcalCommon/src/EcalDQMCommonUtils2.cc @@ -7,7 +7,7 @@ #include "CalibCalorimetry/EcalLaserAnalyzer/interface/MEEEGeom.h" namespace ecaldqm { - EcalPnDiodeDetId pnForCrystal(DetId const &_id, char _ab) { + EcalPnDiodeDetId pnForCrystal(DetId const &_id, char _ab, const EcalElectronicsMapping *electronicsMap) { bool pnA(_ab == 'a' || _ab == 'A'); if (!isCrystalId(_id)) @@ -17,7 +17,7 @@ namespace ecaldqm { EBDetId ebid(_id); int lmmod(MEEBGeom::lmmod(ebid.ieta(), ebid.iphi())); - switch (dccId(_id)) { + switch (dccId(_id, electronicsMap)) { case 10: switch (lmmod) { case 1: diff --git a/DQM/EcalCommon/src/EcalDQMonitor.cc b/DQM/EcalCommon/src/EcalDQMonitor.cc index 13d28f1f64c74..7b9fae7420a7a 100644 --- a/DQM/EcalCommon/src/EcalDQMonitor.cc +++ b/DQM/EcalCommon/src/EcalDQMonitor.cc @@ -61,29 +61,6 @@ namespace ecaldqm { _desc.addUntracked("commonParameters", commonParameters); } - void EcalDQMonitor::ecaldqmGetSetupObjects(edm::EventSetup const &_es) { - // NB: a more minimal solution may rely on ESWatchers - // but then here the cost is rather minimal - // set up electronicsMap in EcalDQMCommonUtils - edm::ESHandle elecMapHandle; - _es.get().get(elecMapHandle); - setElectronicsMap(elecMapHandle.product()); - - // set up trigTowerMap in EcalDQMCommonUtils - edm::ESHandle ttMapHandle; - _es.get().get(ttMapHandle); - setTrigTowerMap(ttMapHandle.product()); - - edm::ESHandle geomHandle; - _es.get().get(geomHandle); - setGeometry(geomHandle.product()); - - // set up trigTowerMap in EcalDQMCommonUtils - edm::ESHandle topoHandle; - _es.get().get(topoHandle); - setTopology(topoHandle.product()); - } - void EcalDQMonitor::ecaldqmBeginRun(edm::Run const &_run, edm::EventSetup const &_es) { executeOnWorkers_( [&_run, &_es](DQWorker *worker) { diff --git a/DQM/EcalCommon/src/MESet.cc b/DQM/EcalCommon/src/MESet.cc index 5d4fb6a07f67e..7f913706d0e33 100644 --- a/DQM/EcalCommon/src/MESet.cc +++ b/DQM/EcalCommon/src/MESet.cc @@ -95,7 +95,10 @@ namespace ecaldqm { mes_[iME]->setAxisTitle(_title, _axis); } - void MESet::reset(double _content /* = 0.*/, double _err /* = 0.*/, double _entries /* = 0.*/) { + void MESet::reset(EcalElectronicsMapping const *electronicsMap, + double _content /* = 0.*/, + double _err /* = 0.*/, + double _entries /* = 0.*/) { if (!active_) return; @@ -164,7 +167,10 @@ namespace ecaldqm { return path.Data(); } - bool MESet::maskMatches(DetId const &_id, uint32_t _mask, StatusManager const *_statusManager) const { + bool MESet::maskMatches(DetId const &_id, + uint32_t _mask, + StatusManager const *_statusManager, + EcalTrigTowerConstituentsMap const *trigTowerMap) const { if (!_statusManager) return false; @@ -187,7 +193,7 @@ namespace ecaldqm { return true; if (searchNeighborsInTower) { - std::vector ids(getTrigTowerMap()->constituentsOf(ttId)); + std::vector ids(trigTowerMap->constituentsOf(ttId)); for (std::vector::iterator idItr(ids.begin()); idItr != ids.end(); ++idItr) if ((_statusManager->getStatus(idItr->rawId()) & _mask) != 0) return true; @@ -230,7 +236,7 @@ namespace ecaldqm { case EcalTriggerTower: { EcalTrigTowerDetId ttId(_id); - std::vector ids(getTrigTowerMap()->constituentsOf(ttId)); + std::vector ids(trigTowerMap->constituentsOf(ttId)); for (std::vector::iterator idItr(ids.begin()); idItr != ids.end(); ++idItr) if ((_statusManager->getStatus(idItr->rawId()) & _mask) != 0) return true; @@ -334,14 +340,17 @@ namespace ecaldqm { return *this; } - MESet::const_iterator::const_iterator(MESet const &_meSet, DetId const &_id) : bin_() { + MESet::const_iterator::const_iterator(EcalElectronicsMapping const *electronicsMap, + MESet const &_meSet, + DetId const &_id) + : bin_() { binning::ObjectType otype(_meSet.getObjType()); - unsigned iME(binning::findPlotIndex(otype, _id)); + unsigned iME(binning::findPlotIndex(electronicsMap, otype, _id)); if (iME == unsigned(-1)) return; binning::BinningType btype(_meSet.getBinType()); - int bin(binning::findBin2D(otype, btype, _id)); + int bin(binning::findBin2D(electronicsMap, otype, btype, _id)); if (bin == 0) return; @@ -401,12 +410,12 @@ namespace ecaldqm { return *this; } - MESet::const_iterator &MESet::const_iterator::toNextChannel() { + MESet::const_iterator &MESet::const_iterator::toNextChannel(const EcalElectronicsMapping *electronicsMap) { if (!bin_.getMESet()) return *this; do operator++(); - while (bin_.iME != unsigned(-1) && !bin_.isChannel()); + while (bin_.iME != unsigned(-1) && !bin_.isChannel(electronicsMap)); return *this; } diff --git a/DQM/EcalCommon/src/MESetBinningUtils.cc b/DQM/EcalCommon/src/MESetBinningUtils.cc index 307858b9a7d69..064a8ac774167 100644 --- a/DQM/EcalCommon/src/MESetBinningUtils.cc +++ b/DQM/EcalCommon/src/MESetBinningUtils.cc @@ -11,7 +11,12 @@ namespace ecaldqm { namespace binning { - AxisSpecs getBinning(ObjectType _otype, BinningType _btype, bool _isMap, int _axis, unsigned _iME) { + AxisSpecs getBinning(EcalElectronicsMapping const *electronicsMap, + ObjectType _otype, + BinningType _btype, + bool _isMap, + int _axis, + unsigned _iME) { if (_otype >= nObjType || _btype >= unsigned(nPresetBinnings)) return AxisSpecs(); // you are on your own @@ -25,14 +30,14 @@ namespace ecaldqm { case kEEp: return getBinningEE_(_btype, _isMap, 1, _axis); case kSM: - return getBinningSM_(_btype, _isMap, _iME, _axis); + return getBinningSM_(_btype, _isMap, _iME, _axis, electronicsMap); case kEBSM: - return getBinningSM_(_btype, _isMap, _iME + 9, _axis); + return getBinningSM_(_btype, _isMap, _iME + 9, _axis, electronicsMap); case kEESM: if (_iME <= kEEmHigh) - return getBinningSM_(_btype, _isMap, _iME, _axis); + return getBinningSM_(_btype, _isMap, _iME, _axis, electronicsMap); else - return getBinningSM_(_btype, _isMap, _iME + nEBDCC, _axis); + return getBinningSM_(_btype, _isMap, _iME + nEBDCC, _axis, electronicsMap); case kSMMEM: return getBinningSMMEM_(_btype, _isMap, _iME, _axis); case kEBSMMEM: @@ -55,17 +60,20 @@ namespace ecaldqm { } } - int findBin1D(ObjectType _otype, BinningType _btype, const DetId &_id) { + int findBin1D(EcalElectronicsMapping const *electronicsMap, + ObjectType _otype, + BinningType _btype, + const DetId &_id) { switch (_otype) { case kSM: case kEBSM: case kEESM: if (_btype == kSuperCrystal) - return towerId(_id); + return towerId(_id, electronicsMap); else if (_btype == kTriggerTower) { - unsigned tccid(tccId(_id)); + unsigned tccid(tccId(_id, electronicsMap)); if (tccid <= 36 || tccid >= 73) { // EE - unsigned bin(ttId(_id)); + unsigned bin(ttId(_id, electronicsMap)); bool outer((tccid >= 19 && tccid <= 36) || (tccid >= 73 && tccid <= 90)); // For the following, the constants nTTInner and nTTOuter are defined in // EcalDQMCommonUtils.h. @@ -80,45 +88,45 @@ namespace ecaldqm { // outer2. return bin; } else - return ttId(_id); + return ttId(_id, electronicsMap); } else break; case kEcal: if (_btype == kDCC) - return dccId(_id); + return dccId(_id, electronicsMap); else if (_btype == kTCC) - return tccId(_id); + return tccId(_id, electronicsMap); else break; case kEB: if (_btype == kDCC) - return dccId(_id) - 9; + return dccId(_id, electronicsMap) - 9; else if (_btype == kTCC) - return tccId(_id) - 36; + return tccId(_id, electronicsMap) - 36; else break; case kEEm: if (_btype == kDCC) - return dccId(_id); + return dccId(_id, electronicsMap); else if (_btype == kTCC) - return tccId(_id); + return tccId(_id, electronicsMap); else break; case kEEp: if (_btype == kDCC) - return dccId(_id) - 45; + return dccId(_id, electronicsMap) - 45; else if (_btype == kTCC) - return tccId(_id) - 72; + return tccId(_id, electronicsMap) - 72; else break; case kEE: if (_btype == kDCC) { - int bin(dccId(_id)); + int bin(dccId(_id, electronicsMap)); if (bin >= 46) bin -= 36; return bin; } else if (_btype == kTCC) { - int bin(tccId(_id)); + int bin(tccId(_id, electronicsMap)); if (bin >= 72) bin -= 36; return bin; @@ -138,7 +146,10 @@ namespace ecaldqm { return 0; } - int findBin1D(ObjectType _otype, BinningType _btype, const EcalElectronicsId &_id) { + int findBin1D(EcalElectronicsMapping const *electronicsMap, + ObjectType _otype, + BinningType _btype, + const EcalElectronicsId &_id) { switch (_otype) { case kSM: case kEBSM: @@ -146,9 +157,9 @@ namespace ecaldqm { if (_btype == kSuperCrystal) return towerId(_id); else if (_btype == kTriggerTower) { - unsigned tccid(tccId(_id)); + unsigned tccid(tccId(_id, electronicsMap)); if (tccid <= 36 || tccid >= 73) { // EE - unsigned bin(ttId(_id)); + unsigned bin(ttId(_id, electronicsMap)); bool outer((tccid >= 19 && tccid <= 36) || (tccid >= 73 && tccid <= 90)); // For the following, the constants nTTInner and nTTOuter are defined in // EcalDQMCommonUtils.h. @@ -163,35 +174,35 @@ namespace ecaldqm { // outer2. return bin; } else - return ttId(_id); + return ttId(_id, electronicsMap); } else break; case kEcal: if (_btype == kDCC) return dccId(_id); else if (_btype == kTCC) - return tccId(_id); + return tccId(_id, electronicsMap); else break; case kEB: if (_btype == kDCC) return dccId(_id) - 9; else if (_btype == kTCC) - return tccId(_id) - 36; + return tccId(_id, electronicsMap) - 36; else break; case kEEm: if (_btype == kDCC) return dccId(_id); else if (_btype == kTCC) - return tccId(_id); + return tccId(_id, electronicsMap); else break; case kEEp: if (_btype == kDCC) return dccId(_id) - 45; else if (_btype == kTCC) - return tccId(_id) - 72; + return tccId(_id, electronicsMap) - 72; else break; case kEE: @@ -201,7 +212,7 @@ namespace ecaldqm { bin -= 36; return bin; } else if (_btype == kTCC) { - int bin(tccId(_id)); + int bin(tccId(_id, electronicsMap)); if (bin >= 72) bin -= 36; return bin; @@ -214,7 +225,7 @@ namespace ecaldqm { return 0; } - int findBin1D(ObjectType _otype, BinningType _btype, int _dcctccid) { + int findBin1D(EcalElectronicsMapping const *electronicsMap, ObjectType _otype, BinningType _btype, int _dcctccid) { if (_otype == kEcal && _btype == kDCC) return _dcctccid; else if (_otype == kEcal && _btype == kTCC) @@ -239,22 +250,25 @@ namespace ecaldqm { return 0; } - int findBin2D(ObjectType _otype, BinningType _btype, const DetId &_id) { + int findBin2D(EcalElectronicsMapping const *electronicsMap, + ObjectType _otype, + BinningType _btype, + const DetId &_id) { if (_otype >= nObjType || _btype >= unsigned(nPresetBinnings)) return 0; switch (_btype) { case kCrystal: - return findBinCrystal_(_otype, _id); + return findBinCrystal_(electronicsMap, _otype, _id); break; case kTriggerTower: - return findBinTriggerTower_(_otype, _id); + return findBinTriggerTower_(electronicsMap, _otype, _id); break; case kSuperCrystal: - return findBinSuperCrystal_(_otype, _id); + return findBinSuperCrystal_(electronicsMap, _otype, _id); break; case kPseudoStrip: - return findBinPseudoStrip_(_otype, _id); + return findBinPseudoStrip_(electronicsMap, _otype, _id); break; case kRCT: return findBinRCT_(_otype, _id); @@ -264,23 +278,26 @@ namespace ecaldqm { } } - int findBin2D(ObjectType _otype, BinningType _btype, const EcalElectronicsId &_id) { + int findBin2D(EcalElectronicsMapping const *electronicsMap, + ObjectType _otype, + BinningType _btype, + const EcalElectronicsId &_id) { if (_otype >= nObjType || _btype >= unsigned(nPresetBinnings)) return 0; switch (_btype) { case kCrystal: - return findBinCrystal_(_otype, _id); + return findBinCrystal_(electronicsMap, _otype, _id); break; case kSuperCrystal: - return findBinSuperCrystal_(_otype, _id); + return findBinSuperCrystal_(electronicsMap, _otype, _id); break; default: return 0; } } - int findBin2D(ObjectType _otype, BinningType _btype, int _dccid) { + int findBin2D(EcalElectronicsMapping const *electronicsMap, ObjectType _otype, BinningType _btype, int _dccid) { if (_otype != kEcal || _btype != kDCC) return 0; @@ -296,7 +313,7 @@ namespace ecaldqm { return (nbinsX + 2) * ybin + xbin; } - unsigned findPlotIndex(ObjectType _otype, const DetId &_id) { + unsigned findPlotIndex(EcalElectronicsMapping const *electronicsMap, ObjectType _otype, const DetId &_id) { if (getNObjects(_otype) == 1) return 0; @@ -334,7 +351,7 @@ namespace ecaldqm { case kMEM2P: if (_id.subdetId() == EcalLaserPnDiode) { - unsigned iDCC(dccId(_id) - 1); + unsigned iDCC(dccId(_id, electronicsMap) - 1); if (iDCC >= kEBmLow && iDCC <= kEBpHigh) return 1; else @@ -343,18 +360,23 @@ namespace ecaldqm { return -1; default: - return findPlotIndex(_otype, dccId(_id)); + return findPlotIndex(electronicsMap, _otype, dccId(_id, electronicsMap)); } } - unsigned findPlotIndex(ObjectType _otype, const EcalElectronicsId &_id) { + unsigned findPlotIndex(EcalElectronicsMapping const *electronicsMap, + ObjectType _otype, + const EcalElectronicsId &_id) { if (getNObjects(_otype) == 1) return 0; - return findPlotIndex(_otype, _id.dccId()); + return findPlotIndex(electronicsMap, _otype, _id.dccId()); } - unsigned findPlotIndex(ObjectType _otype, int _dcctccid, BinningType _btype /* = kDCC*/) { + unsigned findPlotIndex(EcalElectronicsMapping const *electronicsMap, + ObjectType _otype, + int _dcctccid, + BinningType _btype /* = kDCC*/) { if (getNObjects(_otype) == 1) return 0; @@ -363,8 +385,9 @@ namespace ecaldqm { switch (_otype) { case kSM: if (_btype == kPseudoStrip) { - iSM = iSM <= kEEmTCCHigh ? (iSM + 1) % 18 / 2 - : iSM >= kEEpTCCLow ? (iSM + 1 - 72) % 18 / 2 + 45 : (iSM + 1) - kEEmTCCHigh; + iSM = iSM <= kEEmTCCHigh ? (iSM + 1) % 18 / 2 + : iSM >= kEEpTCCLow ? (iSM + 1 - 72) % 18 / 2 + 45 + : (iSM + 1) - kEEmTCCHigh; return iSM; } else return iSM; @@ -536,7 +559,8 @@ namespace ecaldqm { } } - bool isValidIdBin(ObjectType _otype, BinningType _btype, unsigned _iME, int _bin) { + bool isValidIdBin( + EcalElectronicsMapping const *electronicsMap, ObjectType _otype, BinningType _btype, unsigned _iME, int _bin) { if (_otype == kEEm || _otype == kEEp) { if (_btype == kCrystal || _btype == kTriggerTower) return EEDetId::validDetId(_bin % 102, _bin / 102, 1); @@ -571,7 +595,7 @@ namespace ecaldqm { int ix(_bin % (nX + 2) + xlow_(iSM)); int iy(_bin / (nX + 2) + ylow_(iSM)); int z(iSM <= kEEmHigh ? -1 : 1); - return EEDetId::validDetId(ix, iy, 1) && iSM == dccId(EEDetId(ix, iy, z)) - 1; + return EEDetId::validDetId(ix, iy, 1) && iSM == dccId(EEDetId(ix, iy, z), electronicsMap) - 1; } else if (_btype == kSuperCrystal) { int nX(nEESMX / 5); if (iSM == kEEm02 || iSM == kEEm08 || iSM == kEEp02 || iSM == kEEp08) @@ -581,14 +605,16 @@ namespace ecaldqm { int ix(_bin % (nX + 2) + xlow_(iSM) / 5); int iy(_bin / (nX + 2) + ylow_(iSM) / 5); int z(iSM <= kEEmHigh ? -1 : 1); - return EcalScDetId::validDetId(ix, iy, z) && iSM == dccId(EcalScDetId(ix, iy, z)) - 1; + return EcalScDetId::validDetId(ix, iy, z) && iSM == dccId(EcalScDetId(ix, iy, z), electronicsMap) - 1; } } return true; } - std::string channelName(uint32_t _rawId, BinningType _btype /* = kDCC*/) { + std::string channelName(const EcalElectronicsMapping *electronicsMap, + uint32_t _rawId, + BinningType _btype /* = kDCC*/) { // assume the following IDs for respective binning types: // Crystal: EcalElectronicsId // TriggerTower: EcalTriggerElectronicsId (pstrip and channel ignored) @@ -610,13 +636,13 @@ namespace ecaldqm { << eid.stripId() << " xtal " << eid.xtalId(); if (eid.dccId() >= kEBmLow + 1 && eid.dccId() <= kEBpHigh + 1) { - EBDetId ebid(getElectronicsMap()->getDetId(eid)); + EBDetId ebid(electronicsMap->getDetId(eid)); ss << " (EB ieta " << std::showpos << ebid.ieta() << std::noshowpos << " iphi " << ebid.iphi() << ")"; } else { - EEDetId eeid(getElectronicsMap()->getDetId(eid)); + EEDetId eeid(electronicsMap->getDetId(eid)); ss << " (EE ix " << eeid.ix() << " iy " << eeid.iy() << ")"; } - EcalTriggerElectronicsId teid(getElectronicsMap()->getTriggerElectronicsId(eid)); + EcalTriggerElectronicsId teid(electronicsMap->getTriggerElectronicsId(eid)); ss << " (TCC " << teid.tccId() << " TT " << teid.ttId() << " pstrip " << teid.pseudoStripId() << " chan " << teid.channelId() << ")"; break; @@ -626,7 +652,7 @@ namespace ecaldqm { case kTriggerTower: { // EB-03 DCC 12 TCC 18 TT 3 EcalTriggerElectronicsId teid(_rawId); - EcalElectronicsId eid(getElectronicsMap()->getElectronicsId(teid)); + EcalElectronicsId eid(electronicsMap->getElectronicsId(teid)); ss << smName(eid.dccId()) << " DCC " << eid.dccId() << " TCC " << teid.tccId() << " TT " << teid.ttId(); break; } @@ -635,10 +661,10 @@ namespace ecaldqm { EcalElectronicsId eid(_rawId); ss << smName(eid.dccId()) << " DCC " << eid.dccId() << " CCU " << eid.towerId(); if (eid.dccId() >= kEBmLow + 1 && eid.dccId() <= kEBpHigh + 1) { - EcalTrigTowerDetId ttid(EBDetId(getElectronicsMap()->getDetId(eid)).tower()); + EcalTrigTowerDetId ttid(EBDetId(electronicsMap->getDetId(eid)).tower()); ss << " (EBTT ieta " << std::showpos << ttid.ieta() << std::noshowpos << " iphi " << ttid.iphi() << ")"; } else { - EcalScDetId scid(EEDetId(getElectronicsMap()->getDetId(eid)).sc()); + EcalScDetId scid(EEDetId(electronicsMap->getDetId(eid)).sc()); ss << " (EESC ix " << scid.ix() << " iy " << scid.iy() << ")"; } break; @@ -646,7 +672,7 @@ namespace ecaldqm { case kTCC: { // EB-03 TCC 12 int tccid(_rawId - nDCC); - int dccid(getElectronicsMap()->DCCid(getElectronicsMap()->getTrigTowerDetId(tccid, 1))); + int dccid(electronicsMap->DCCid(electronicsMap->getTrigTowerDetId(tccid, 1))); ss << smName(dccid) << " TCC " << (_rawId - nDCC); break; } diff --git a/DQM/EcalCommon/src/MESetBinningUtils2.cc b/DQM/EcalCommon/src/MESetBinningUtils2.cc index 2f1810a1e3979..d037e8698c063 100644 --- a/DQM/EcalCommon/src/MESetBinningUtils2.cc +++ b/DQM/EcalCommon/src/MESetBinningUtils2.cc @@ -222,7 +222,8 @@ namespace ecaldqm { return specs; } - AxisSpecs getBinningSM_(BinningType _btype, bool _isMap, unsigned _iObj, int _axis) { + AxisSpecs getBinningSM_( + BinningType _btype, bool _isMap, unsigned _iObj, int _axis, const EcalElectronicsMapping *electronicsMap) { AxisSpecs specs; unsigned iSM(_iObj); @@ -232,7 +233,7 @@ namespace ecaldqm { if (!_isMap) { switch (_btype) { case kCrystal: - specs.nbins = isBarrel ? 1700 : getElectronicsMap()->dccConstituents(iSM + 1).size(); + specs.nbins = isBarrel ? 1700 : electronicsMap->dccConstituents(iSM + 1).size(); specs.low = 0.; specs.high = specs.nbins; specs.title = "crystal"; @@ -426,7 +427,10 @@ namespace ecaldqm { return specs; } - int findBinCrystal_(ObjectType _otype, const DetId &_id, int _iSM /* = -1*/) { + int findBinCrystal_(const EcalElectronicsMapping *electronicsMap, + ObjectType _otype, + const DetId &_id, + int _iSM /* = -1*/) { int xbin(0), ybin(0); int nbinsX(0); int subdet(_id.subdetId()); @@ -468,7 +472,7 @@ namespace ecaldqm { break; case kSM: case kEESM: { - int iSM(_iSM >= 0 ? _iSM : dccId(_id) - 1); + int iSM(_iSM >= 0 ? _iSM : dccId(_id, electronicsMap) - 1); xbin = ix - xlow_(iSM); ybin = iy - ylow_(iSM); if (iSM == kEEm02 || iSM == kEEm08 || iSM == kEEp02 || iSM == kEEp08) @@ -492,17 +496,17 @@ namespace ecaldqm { nbinsX = 10; break; case kMEM: - xbin = memDCCIndex(dccId(_id)) + 1; + xbin = memDCCIndex(dccId(_id, electronicsMap)) + 1; ybin = pnid.iPnId(); nbinsX = 44; break; case kEBMEM: - xbin = memDCCIndex(dccId(_id)) - 3; + xbin = memDCCIndex(dccId(_id, electronicsMap)) - 3; ybin = pnid.iPnId(); nbinsX = 36; break; case kEEMEM: - xbin = memDCCIndex(dccId(_id)) + 1; + xbin = memDCCIndex(dccId(_id, electronicsMap)) + 1; if (xbin > kEEmHigh + 1) xbin -= 36; ybin = pnid.iPnId(); @@ -516,8 +520,8 @@ namespace ecaldqm { return (nbinsX + 2) * ybin + xbin; } - int findBinCrystal_(ObjectType _otype, EcalElectronicsId const &_id) { - return findBinCrystal_(_otype, getElectronicsMap()->getDetId(_id)); + int findBinCrystal_(const EcalElectronicsMapping *electronicsMap, ObjectType _otype, EcalElectronicsId const &_id) { + return findBinCrystal_(electronicsMap, _otype, electronicsMap->getDetId(_id)); } int findBinRCT_(ObjectType _otype, DetId const &_id) { @@ -536,7 +540,7 @@ namespace ecaldqm { return (nbinsX + 2) * ybin + xbin; } - int findBinTriggerTower_(ObjectType _otype, DetId const &_id) { + int findBinTriggerTower_(const EcalElectronicsMapping *electronicsMap, ObjectType _otype, DetId const &_id) { int xbin(0); int ybin(0); int nbinsX(0); @@ -571,32 +575,35 @@ namespace ecaldqm { break; } } else if (subdet == EcalEndcap) { - unsigned tccid(tccId(_id)); + unsigned tccid(tccId(_id, electronicsMap)); unsigned iSM(tccid <= 36 ? tccid % 18 / 2 : (tccid - 72) % 18 / 2); - return findBinCrystal_(_otype, _id, iSM); + return findBinCrystal_(electronicsMap, _otype, _id, iSM); } return (nbinsX + 2) * ybin + xbin; } - int findBinPseudoStrip_(ObjectType _otype, DetId const &_id) { + int findBinPseudoStrip_(const EcalElectronicsMapping *electronicsMap, ObjectType _otype, DetId const &_id) { int xbin(0); int ybin(0); int nbinsX(0); int subdet(_id.subdetId()); if ((subdet == EcalTriggerTower && !isEndcapTTId(_id)) || subdet == EcalBarrel) { - return findBinTriggerTower_(_otype, _id); + return findBinTriggerTower_(electronicsMap, _otype, _id); } else if (subdet == EcalEndcap) { - unsigned tccid(tccId(_id)); + unsigned tccid(tccId(_id, electronicsMap)); unsigned iSM(tccid <= 36 ? tccid % 18 / 2 : (tccid - 72) % 18 / 2); - return findBinCrystal_(_otype, _id, iSM); + return findBinCrystal_(electronicsMap, _otype, _id, iSM); } return (nbinsX + 2) * ybin + xbin; } - int findBinSuperCrystal_(ObjectType _otype, const DetId &_id, int _iSM /* -1*/) { + int findBinSuperCrystal_(const EcalElectronicsMapping *electronicsMap, + ObjectType _otype, + const DetId &_id, + int _iSM /* -1*/) { int xbin(0); int ybin(0); int nbinsX(0); @@ -641,7 +648,7 @@ namespace ecaldqm { break; case kSM: case kEESM: { - int iSM(_iSM >= 0 ? _iSM : dccId(_id) - 1); + int iSM(_iSM >= 0 ? _iSM : dccId(_id, electronicsMap) - 1); xbin = ix - xlow_(iSM) / 5; ybin = iy - ylow_(iSM) / 5; if (iSM == kEEm02 || iSM == kEEm08 || iSM == kEEp02 || iSM == kEEp08) @@ -673,7 +680,7 @@ namespace ecaldqm { break; case kSM: case kEESM: { - int iSM(_iSM >= 0 ? _iSM : dccId(_id) - 1); + int iSM(_iSM >= 0 ? _iSM : dccId(_id, electronicsMap) - 1); xbin = (ix - xlow_(iSM) - 1) / 5 + 1; ybin = (iy - ylow_(iSM) - 1) / 5 + 1; if (iSM == kEEm02 || iSM == kEEm08 || iSM == kEEp02 || iSM == kEEp08) @@ -712,7 +719,9 @@ namespace ecaldqm { return (nbinsX + 2) * ybin + xbin; } - int findBinSuperCrystal_(ObjectType _otype, const EcalElectronicsId &_id) { + int findBinSuperCrystal_(const EcalElectronicsMapping *electronicsMap, + ObjectType _otype, + const EcalElectronicsId &_id) { int xbin(0); int ybin(0); int nbinsX(0); @@ -730,14 +739,16 @@ namespace ecaldqm { case kSM: case kEBSM: xbin = (towerid - 1) / 4 + 1; - ybin = (isEBm ? towerid - 1 : 68 - towerid) % 4 + 1; + //In by SM plots, using towerid, the ybinning always increases from 1 to 4, + //whereas using iphi it flips for EB- and EB+ + ybin = (towerid - 1) % 4 + 1; nbinsX = 17; break; default: break; } } else { - return findBinSuperCrystal_(_otype, EEDetId(getElectronicsMap()->getDetId(_id)).sc()); + return findBinSuperCrystal_(electronicsMap, _otype, EEDetId(electronicsMap->getDetId(_id)).sc()); } return (nbinsX + 2) * ybin + xbin; diff --git a/DQM/EcalCommon/src/MESetDet0D.cc b/DQM/EcalCommon/src/MESetDet0D.cc index 94a1658a2f39a..5a69bca8d8429 100644 --- a/DQM/EcalCommon/src/MESetDet0D.cc +++ b/DQM/EcalCommon/src/MESetDet0D.cc @@ -27,67 +27,67 @@ namespace ecaldqm { return copy; } - void MESetDet0D::fill(DetId const &_id, double _value, double, double) { + void MESetDet0D::fill(EcalDQMSetupObjects const edso, DetId const &_id, double _value, double, double) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); mes_[iME]->Fill(_value); } - void MESetDet0D::fill(EcalElectronicsId const &_id, double _value, double, double) { + void MESetDet0D::fill(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, double _value, double, double) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); mes_[iME]->Fill(_value); } - void MESetDet0D::fill(int _dcctccid, double _value, double, double) { + void MESetDet0D::fill(EcalDQMSetupObjects const edso, int _dcctccid, double _value, double, double) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); mes_[iME]->Fill(_value); } - double MESetDet0D::getBinContent(DetId const &_id, int) const { + double MESetDet0D::getBinContent(EcalDQMSetupObjects const edso, DetId const &_id, int) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); return mes_[iME]->getFloatValue(); } - double MESetDet0D::getBinContent(EcalElectronicsId const &_id, int) const { + double MESetDet0D::getBinContent(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, int) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); return mes_[iME]->getFloatValue(); } - double MESetDet0D::getBinContent(int _dcctccid, int) const { + double MESetDet0D::getBinContent(EcalDQMSetupObjects const edso, int _dcctccid, int) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); return mes_[iME]->getFloatValue(); } - void MESetDet0D::reset(double _value /* = 0.*/, double, double) { + void MESetDet0D::reset(EcalElectronicsMapping const *electronicsMap, double _value /* = 0.*/, double, double) { unsigned nME(mes_.size()); for (unsigned iME(0); iME < nME; iME++) mes_[iME]->Fill(_value); diff --git a/DQM/EcalCommon/src/MESetDet1D.cc b/DQM/EcalCommon/src/MESetDet1D.cc index 5f8c10a32589d..1d6e25ce7cea9 100644 --- a/DQM/EcalCommon/src/MESetDet1D.cc +++ b/DQM/EcalCommon/src/MESetDet1D.cc @@ -34,8 +34,8 @@ namespace ecaldqm { return copy; } - void MESetDet1D::book(DQMStore::IBooker &_ibooker) { - MESetEcal::book(_ibooker); + void MESetDet1D::book(DQMStore::IBooker &_ibooker, const EcalElectronicsMapping *electronicsMap) { + MESetEcal::book(_ibooker, electronicsMap); if (btype_ == binning::kDCC) { for (unsigned iME(0); iME < mes_.size(); iME++) { @@ -44,18 +44,18 @@ namespace ecaldqm { binning::ObjectType actualObject(binning::getObject(otype_, iME)); if (actualObject == binning::kEB) { for (int iBin(1); iBin <= me->getNbinsX(); iBin++) - me->setBinLabel(iBin, binning::channelName(iBin + kEBmLow)); + me->setBinLabel(iBin, binning::channelName(electronicsMap, iBin + kEBmLow)); } else if (actualObject == binning::kEE) { for (int iBin(1); iBin <= me->getNbinsX() / 2; iBin++) { - me->setBinLabel(iBin, binning::channelName(iBin)); - me->setBinLabel(iBin + me->getNbinsX() / 2, binning::channelName(iBin + 45)); + me->setBinLabel(iBin, binning::channelName(electronicsMap, iBin)); + me->setBinLabel(iBin + me->getNbinsX() / 2, binning::channelName(electronicsMap, iBin + 45)); } } else if (actualObject == binning::kEEm) { for (int iBin(1); iBin <= me->getNbinsX(); iBin++) - me->setBinLabel(iBin, binning::channelName(iBin)); + me->setBinLabel(iBin, binning::channelName(electronicsMap, iBin)); } else if (actualObject == binning::kEEp) { for (int iBin(1); iBin <= me->getNbinsX(); iBin++) - me->setBinLabel(iBin, binning::channelName(iBin + 45)); + me->setBinLabel(iBin, binning::channelName(electronicsMap, iBin + 45)); } } } else if (btype_ == binning::kTriggerTower) { @@ -107,15 +107,16 @@ namespace ecaldqm { } } - void MESetDet1D::fill(DetId const &_id, double _wy /* = 1.*/, double _w /* = 1.*/, double) { + void MESetDet1D::fill( + EcalDQMSetupObjects const edso, DetId const &_id, double _wy /* = 1.*/, double _w /* = 1.*/, double) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); if (kind_ == MonitorElement::Kind::TH2F || kind_ == MonitorElement::Kind::TPROFILE2D) fill_(iME, xbin, _wy, _w); @@ -123,15 +124,16 @@ namespace ecaldqm { fill_(iME, xbin, _wy); } - void MESetDet1D::fill(EcalElectronicsId const &_id, double _wy /* = 1.*/, double _w /* = 1.*/, double) { + void MESetDet1D::fill( + EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, double _wy /* = 1.*/, double _w /* = 1.*/, double) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); if (kind_ == MonitorElement::Kind::TH2F || kind_ == MonitorElement::Kind::TPROFILE2D) fill_(iME, xbin, _wy, _w); @@ -139,15 +141,16 @@ namespace ecaldqm { fill_(iME, xbin, _wy); } - void MESetDet1D::fill(int _dcctccid, double _wy /* = 1.*/, double _w /* = 1.*/, double) { + void MESetDet1D::fill( + EcalDQMSetupObjects const edso, int _dcctccid, double _wy /* = 1.*/, double _w /* = 1.*/, double) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _dcctccid)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _dcctccid)); if (kind_ == MonitorElement::Kind::TH2F || kind_ == MonitorElement::Kind::TPROFILE2D) fill_(iME, xbin, _wy, _w); @@ -155,17 +158,17 @@ namespace ecaldqm { fill_(iME, xbin, _wy); } - void MESetDet1D::setBinContent(DetId const &_id, double _content) { + void MESetDet1D::setBinContent(EcalDQMSetupObjects const edso, DetId const &_id, double _content) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); if (kind_ == MonitorElement::Kind::TH2F || kind_ == MonitorElement::Kind::TPROFILE2D) { int nbinsY(me->getTH1()->GetNbinsY()); @@ -175,17 +178,17 @@ namespace ecaldqm { me->setBinContent(xbin, _content); } - void MESetDet1D::setBinContent(EcalElectronicsId const &_id, double _content) { + void MESetDet1D::setBinContent(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, double _content) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); if (kind_ == MonitorElement::Kind::TH2F || kind_ == MonitorElement::Kind::TPROFILE2D) { int nbinsY(me->getTH1()->GetNbinsY()); @@ -195,17 +198,17 @@ namespace ecaldqm { me->setBinContent(xbin, _content); } - void MESetDet1D::setBinContent(int _dcctccid, double _content) { + void MESetDet1D::setBinContent(EcalDQMSetupObjects const edso, int _dcctccid, double _content) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _dcctccid)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _dcctccid)); if (kind_ == MonitorElement::Kind::TH2F || kind_ == MonitorElement::Kind::TPROFILE2D) { int nbinsY(me->getTH1()->GetNbinsY()); @@ -215,65 +218,68 @@ namespace ecaldqm { me->setBinContent(xbin, _content); } - void MESetDet1D::setBinContent(DetId const &_id, int _ybin, double _content) { + void MESetDet1D::setBinContent(EcalDQMSetupObjects const edso, DetId const &_id, int _ybin, double _content) { if (!active_) return; if (kind_ != MonitorElement::Kind::TH2F && kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); me->setBinContent(xbin, _ybin, _content); } - void MESetDet1D::setBinContent(EcalElectronicsId const &_id, int _ybin, double _content) { + void MESetDet1D::setBinContent(EcalDQMSetupObjects const edso, + EcalElectronicsId const &_id, + int _ybin, + double _content) { if (!active_) return; if (kind_ != MonitorElement::Kind::TH2F && kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); me->setBinContent(xbin, _ybin, _content); } - void MESetDet1D::setBinContent(int _dcctccid, int _ybin, double _content) { + void MESetDet1D::setBinContent(EcalDQMSetupObjects const edso, int _dcctccid, int _ybin, double _content) { if (!active_) return; if (kind_ != MonitorElement::Kind::TH2F && kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _dcctccid)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _dcctccid)); me->setBinContent(xbin, _ybin, _content); } - void MESetDet1D::setBinError(DetId const &_id, double _error) { + void MESetDet1D::setBinError(EcalDQMSetupObjects const edso, DetId const &_id, double _error) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); if (kind_ == MonitorElement::Kind::TH2F || kind_ == MonitorElement::Kind::TPROFILE2D) { int nbinsY(me->getTH1()->GetNbinsY()); @@ -283,17 +289,17 @@ namespace ecaldqm { me->setBinError(xbin, _error); } - void MESetDet1D::setBinError(EcalElectronicsId const &_id, double _error) { + void MESetDet1D::setBinError(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, double _error) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); if (kind_ == MonitorElement::Kind::TH2F || kind_ == MonitorElement::Kind::TPROFILE2D) { int nbinsY(me->getTH1()->GetNbinsY()); @@ -303,17 +309,17 @@ namespace ecaldqm { me->setBinError(xbin, _error); } - void MESetDet1D::setBinError(int _dcctccid, double _error) { + void MESetDet1D::setBinError(EcalDQMSetupObjects const edso, int _dcctccid, double _error) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _dcctccid)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _dcctccid)); if (kind_ == MonitorElement::Kind::TH2F || kind_ == MonitorElement::Kind::TPROFILE2D) { int nbinsY(me->getTH1()->GetNbinsY()); @@ -323,67 +329,67 @@ namespace ecaldqm { me->setBinError(xbin, _error); } - void MESetDet1D::setBinError(DetId const &_id, int _ybin, double _error) { + void MESetDet1D::setBinError(EcalDQMSetupObjects const edso, DetId const &_id, int _ybin, double _error) { if (!active_) return; if (kind_ != MonitorElement::Kind::TH2F && kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); me->setBinError(xbin, _ybin, _error); } - void MESetDet1D::setBinError(EcalElectronicsId const &_id, int _ybin, double _error) { + void MESetDet1D::setBinError(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, int _ybin, double _error) { if (!active_) return; if (kind_ != MonitorElement::Kind::TH2F && kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); me->setBinError(xbin, _ybin, _error); } - void MESetDet1D::setBinError(int _dcctccid, int _ybin, double _error) { + void MESetDet1D::setBinError(EcalDQMSetupObjects const edso, int _dcctccid, int _ybin, double _error) { if (!active_) return; if (kind_ != MonitorElement::Kind::TH2F && kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _dcctccid)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _dcctccid)); me->setBinError(xbin, _ybin, _error); } - void MESetDet1D::setBinEntries(DetId const &_id, double _entries) { + void MESetDet1D::setBinEntries(EcalDQMSetupObjects const edso, DetId const &_id, double _entries) { if (!active_) return; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); if (kind_ == MonitorElement::Kind::TPROFILE2D) { int nbinsX(me->getTH1()->GetNbinsX()); @@ -394,19 +400,19 @@ namespace ecaldqm { me->setBinEntries(xbin, _entries); } - void MESetDet1D::setBinEntries(EcalElectronicsId const &_id, double _entries) { + void MESetDet1D::setBinEntries(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, double _entries) { if (!active_) return; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); if (kind_ == MonitorElement::Kind::TPROFILE2D) { int nbinsX(me->getTH1()->GetNbinsX()); @@ -417,19 +423,19 @@ namespace ecaldqm { me->setBinEntries(xbin, _entries); } - void MESetDet1D::setBinEntries(int _dcctccid, double _entries) { + void MESetDet1D::setBinEntries(EcalDQMSetupObjects const edso, int _dcctccid, double _entries) { if (!active_) return; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _dcctccid)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _dcctccid)); if (kind_ == MonitorElement::Kind::TPROFILE2D) { int nbinsX(me->getTH1()->GetNbinsX()); @@ -440,298 +446,310 @@ namespace ecaldqm { me->setBinEntries(xbin, _entries); } - void MESetDet1D::setBinEntries(DetId const &_id, int _ybin, double _entries) { + void MESetDet1D::setBinEntries(EcalDQMSetupObjects const edso, DetId const &_id, int _ybin, double _entries) { if (!active_) return; if (kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); int nbinsX(me->getTH1()->GetNbinsX()); me->setBinEntries((nbinsX + 2) * _ybin + xbin, _entries); } - void MESetDet1D::setBinEntries(EcalElectronicsId const &_id, int _ybin, double _entries) { + void MESetDet1D::setBinEntries(EcalDQMSetupObjects const edso, + EcalElectronicsId const &_id, + int _ybin, + double _entries) { if (!active_) return; if (kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); int nbinsX(me->getTH1()->GetNbinsX()); me->setBinEntries((nbinsX + 2) * _ybin + xbin, _entries); } - void MESetDet1D::setBinEntries(int _dcctccid, int _ybin, double _entries) { + void MESetDet1D::setBinEntries(EcalDQMSetupObjects const edso, int _dcctccid, int _ybin, double _entries) { if (!active_) return; if (kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _dcctccid)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _dcctccid)); int nbinsX(me->getTH1()->GetNbinsX()); me->setBinEntries((nbinsX + 2) * _ybin + xbin, _entries); } - double MESetDet1D::getBinContent(DetId const &_id, int _ybin /* = 0*/) const { + double MESetDet1D::getBinContent(EcalDQMSetupObjects const edso, DetId const &_id, int _ybin /* = 0*/) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); int nbinsX(me->getTH1()->GetNbinsX()); return me->getBinContent((nbinsX + 2) * _ybin + xbin); } - double MESetDet1D::getBinContent(EcalElectronicsId const &_id, int _ybin /* = 0*/) const { + double MESetDet1D::getBinContent(EcalDQMSetupObjects const edso, + EcalElectronicsId const &_id, + int _ybin /* = 0*/) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); int nbinsX(me->getTH1()->GetNbinsX()); return me->getBinContent((nbinsX + 2) * _ybin + xbin); } - double MESetDet1D::getBinContent(int _dcctccid, int _ybin /* = 0*/) const { + double MESetDet1D::getBinContent(EcalDQMSetupObjects const edso, int _dcctccid, int _ybin /* = 0*/) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _dcctccid)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _dcctccid)); int nbinsX(me->getTH1()->GetNbinsX()); return me->getBinContent((nbinsX + 2) * _ybin + xbin); } - double MESetDet1D::getBinError(DetId const &_id, int _ybin /* = 0*/) const { + double MESetDet1D::getBinError(EcalDQMSetupObjects const edso, DetId const &_id, int _ybin /* = 0*/) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); int nbinsX(me->getTH1()->GetNbinsX()); return me->getBinError((nbinsX + 2) * _ybin + xbin); } - double MESetDet1D::getBinError(EcalElectronicsId const &_id, int _ybin /* = 0*/) const { + double MESetDet1D::getBinError(EcalDQMSetupObjects const edso, + EcalElectronicsId const &_id, + int _ybin /* = 0*/) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); int nbinsX(me->getTH1()->GetNbinsX()); return me->getBinError((nbinsX + 2) * _ybin + xbin); } - double MESetDet1D::getBinError(int _dcctccid, int _ybin /* = 0*/) const { + double MESetDet1D::getBinError(EcalDQMSetupObjects const edso, int _dcctccid, int _ybin /* = 0*/) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _dcctccid)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _dcctccid)); int nbinsX(me->getTH1()->GetNbinsX()); return me->getBinError((nbinsX + 2) * _ybin + xbin); } - double MESetDet1D::getBinEntries(DetId const &_id, int _ybin /* = 0*/) const { + double MESetDet1D::getBinEntries(EcalDQMSetupObjects const edso, DetId const &_id, int _ybin /* = 0*/) const { if (!active_) return 0.; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); int nbinsX(me->getTH1()->GetNbinsX()); return me->getBinEntries((nbinsX + 2) * _ybin + xbin); } - double MESetDet1D::getBinEntries(EcalElectronicsId const &_id, int _ybin /* = 0*/) const { + double MESetDet1D::getBinEntries(EcalDQMSetupObjects const edso, + EcalElectronicsId const &_id, + int _ybin /* = 0*/) const { if (!active_) return 0.; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); int nbinsX(me->getTH1()->GetNbinsX()); return me->getBinEntries((nbinsX + 2) * _ybin + xbin); } - double MESetDet1D::getBinEntries(int _dcctccid, int _ybin /* = 0*/) const { + double MESetDet1D::getBinEntries(EcalDQMSetupObjects const edso, int _dcctccid, int _ybin /* = 0*/) const { if (!active_) return 0.; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _dcctccid)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _dcctccid)); int nbinsX(me->getTH1()->GetNbinsX()); return me->getBinEntries((nbinsX + 2) * _ybin + xbin); } - int MESetDet1D::findBin(DetId const &_id) const { + int MESetDet1D::findBin(EcalDQMSetupObjects const edso, DetId const &_id) const { if (!active_) return -1; if (kind_ == MonitorElement::Kind::TPROFILE || kind_ == MonitorElement::Kind::TPROFILE2D) return -1; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - return binning::findBin1D(obj, btype_, _id); + return binning::findBin1D(edso.electronicsMap, obj, btype_, _id); } - int MESetDet1D::findBin(EcalElectronicsId const &_id) const { + int MESetDet1D::findBin(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id) const { if (!active_) return -1; if (kind_ == MonitorElement::Kind::TPROFILE || kind_ == MonitorElement::Kind::TPROFILE2D) return -1; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - return binning::findBin1D(obj, btype_, _id); + return binning::findBin1D(edso.electronicsMap, obj, btype_, _id); } - int MESetDet1D::findBin(int _dcctccid) const { + int MESetDet1D::findBin(EcalDQMSetupObjects const edso, int _dcctccid) const { if (!active_) return -1; if (kind_ == MonitorElement::Kind::TPROFILE || kind_ == MonitorElement::Kind::TPROFILE2D) return -1; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - return binning::findBin1D(obj, btype_, _dcctccid); + return binning::findBin1D(edso.electronicsMap, obj, btype_, _dcctccid); } - int MESetDet1D::findBin(DetId const &_id, double _y, double) const { + int MESetDet1D::findBin(EcalDQMSetupObjects const edso, DetId const &_id, double _y, double) const { if (!active_) return -1; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) return -1; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); int nbinsX(me->getTH1()->GetNbinsX()); return xbin + (nbinsX + 2) * me->getTH1()->GetYaxis()->FindBin(_y); } - int MESetDet1D::findBin(EcalElectronicsId const &_id, double _y, double) const { + int MESetDet1D::findBin(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, double _y, double) const { if (!active_) return -1; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) return -1; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _id)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _id)); int nbinsX(me->getTH1()->GetNbinsX()); return xbin + (nbinsX + 2) * me->getTH1()->GetYaxis()->FindBin(_y); } - int MESetDet1D::findBin(int _dcctccid, double _y, double) const { + int MESetDet1D::findBin(EcalDQMSetupObjects const edso, int _dcctccid, double _y, double) const { if (!active_) return -1; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) return -1; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid)); checkME_(iME); MonitorElement *me(mes_[iME]); binning::ObjectType obj(binning::getObject(otype_, iME)); - int xbin(binning::findBin1D(obj, btype_, _dcctccid)); + int xbin(binning::findBin1D(edso.electronicsMap, obj, btype_, _dcctccid)); int nbinsX(me->getTH1()->GetNbinsX()); return xbin + (nbinsX + 2) * me->getTH1()->GetYaxis()->FindBin(_y); } - void MESetDet1D::reset(double _content /* = 0.*/, double _err /* = 0.*/, double _entries /* = 0.*/) { + void MESetDet1D::reset(EcalElectronicsMapping const *, + double _content /* = 0.*/, + double _err /* = 0.*/, + double _entries /* = 0.*/) { unsigned nME(binning::getNObjects(otype_)); bool isProfile(kind_ == MonitorElement::Kind::TPROFILE || kind_ == MonitorElement::Kind::TPROFILE2D); diff --git a/DQM/EcalCommon/src/MESetDet2D.cc b/DQM/EcalCommon/src/MESetDet2D.cc index 0acdc2bcfa9c8..58c914930c8e2 100644 --- a/DQM/EcalCommon/src/MESetDet2D.cc +++ b/DQM/EcalCommon/src/MESetDet2D.cc @@ -31,8 +31,8 @@ namespace ecaldqm { return copy; } - void MESetDet2D::book(DQMStore::IBooker &_ibooker) { - MESetEcal::book(_ibooker); + void MESetDet2D::book(DQMStore::IBooker &_ibooker, const EcalElectronicsMapping *electronicsMap) { + MESetEcal::book(_ibooker, electronicsMap); if (btype_ == binning::kCrystal) { for (unsigned iME(0); iME < mes_.size(); iME++) { @@ -41,16 +41,16 @@ namespace ecaldqm { binning::ObjectType actualObject(binning::getObject(otype_, iME)); if (actualObject == binning::kMEM) { for (int iBin(1); iBin <= me->getNbinsX(); ++iBin) - me->setBinLabel(iBin, binning::channelName(memDCCId(iBin - 1))); + me->setBinLabel(iBin, binning::channelName(electronicsMap, memDCCId(iBin - 1))); } if (actualObject == binning::kEBMEM) { for (int iBin(1); iBin <= me->getNbinsX(); ++iBin) - me->setBinLabel(iBin, binning::channelName(iBin + kEBmLow)); + me->setBinLabel(iBin, binning::channelName(electronicsMap, iBin + kEBmLow)); } if (actualObject == binning::kEEMEM) { for (int iBin(1); iBin <= me->getNbinsX() / 2; ++iBin) { - me->setBinLabel(iBin, binning::channelName(memDCCId(iBin - 1))); - me->setBinLabel(iBin + me->getNbinsX() / 2, binning::channelName(memDCCId(iBin + 39))); + me->setBinLabel(iBin, binning::channelName(electronicsMap, memDCCId(iBin - 1))); + me->setBinLabel(iBin + me->getNbinsX() / 2, binning::channelName(electronicsMap, memDCCId(iBin + 39))); } } } @@ -75,11 +75,11 @@ namespace ecaldqm { resetAll(0., 0., -1.); } - void MESetDet2D::fill(DetId const &_id, double _w /* = 1.*/, double, double) { + void MESetDet2D::fill(EcalDQMSetupObjects const edso, DetId const &_id, double _w /* = 1.*/, double, double) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); @@ -87,32 +87,33 @@ namespace ecaldqm { int bin; if (btype_ == binning::kRCT) { - bin = binning::findBin2D(obj, btype_, _id); + bin = binning::findBin2D(edso.electronicsMap, obj, btype_, _id); fill_(iME, bin, _w); } else { if (isEndcapTTId(_id)) { - std::vector ids(getTrigTowerMap()->constituentsOf(EcalTrigTowerDetId(_id))); + std::vector ids(edso.trigtowerMap->constituentsOf(EcalTrigTowerDetId(_id))); unsigned nId(ids.size()); for (unsigned iId(0); iId < nId; iId++) { - bin = binning::findBin2D(obj, binning::kTriggerTower, ids[iId]); + bin = binning::findBin2D(edso.electronicsMap, obj, binning::kTriggerTower, ids[iId]); fill_(iME, bin, _w); } } else { - bin = binning::findBin2D(obj, btype_, _id); + bin = binning::findBin2D(edso.electronicsMap, obj, btype_, _id); fill_(iME, bin, _w); } } } - void MESetDet2D::fill(EcalElectronicsId const &_id, double _w /* = 1.*/, double, double) { + void MESetDet2D::fill( + EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, double _w /* = 1.*/, double, double) { if (!active_) return; unsigned iME(0); if (btype_ == binning::kPseudoStrip) - iME = binning::findPlotIndex(otype_, _id.dccId(), binning::kPseudoStrip); + iME = binning::findPlotIndex(edso.electronicsMap, otype_, _id.dccId(), binning::kPseudoStrip); else - iME = binning::findPlotIndex(otype_, _id); + iME = binning::findPlotIndex(edso.electronicsMap, otype_, _id); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); @@ -122,36 +123,36 @@ namespace ecaldqm { if (btype_ == binning::kPseudoStrip) { EcalElectronicsId stid(_id); std::vector ids( - getElectronicsMap()->pseudoStripConstituents(stid.dccId(), stid.towerId(), stid.stripId())); + edso.electronicsMap->pseudoStripConstituents(stid.dccId(), stid.towerId(), stid.stripId())); unsigned nId(ids.size()); for (unsigned iId(0); iId < nId; iId++) { - bin = binning::findBin2D(obj, btype_, ids[iId]); + bin = binning::findBin2D(edso.electronicsMap, obj, btype_, ids[iId]); fill_(iME, bin, _w); } } else { - bin = binning::findBin2D(obj, btype_, _id); + bin = binning::findBin2D(edso.electronicsMap, obj, btype_, _id); fill_(iME, bin, _w); } } - void MESetDet2D::fill(int _dcctccid, double _w /* = 1.*/, double, double) { + void MESetDet2D::fill(EcalDQMSetupObjects const edso, int _dcctccid, double _w /* = 1.*/, double, double) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int bin(binning::findBin2D(obj, btype_, _dcctccid)); + int bin(binning::findBin2D(edso.electronicsMap, obj, btype_, _dcctccid)); fill_(iME, bin, _w); } - void MESetDet2D::setBinContent(DetId const &_id, double _content) { + void MESetDet2D::setBinContent(EcalDQMSetupObjects const edso, DetId const &_id, double _content) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); @@ -159,49 +160,49 @@ namespace ecaldqm { int bin; if (isEndcapTTId(_id)) { - std::vector ids(getTrigTowerMap()->constituentsOf(EcalTrigTowerDetId(_id))); + std::vector ids(edso.trigtowerMap->constituentsOf(EcalTrigTowerDetId(_id))); unsigned nId(ids.size()); for (unsigned iId(0); iId < nId; iId++) { - bin = binning::findBin2D(obj, binning::kTriggerTower, ids[iId]); + bin = binning::findBin2D(edso.electronicsMap, obj, binning::kTriggerTower, ids[iId]); mes_[iME]->setBinContent(bin, _content); } } else { - bin = binning::findBin2D(obj, btype_, _id); + bin = binning::findBin2D(edso.electronicsMap, obj, btype_, _id); mes_[iME]->setBinContent(bin, _content); } } - void MESetDet2D::setBinContent(EcalElectronicsId const &_id, double _content) { + void MESetDet2D::setBinContent(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, double _content) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int bin(binning::findBin2D(obj, btype_, _id)); + int bin(binning::findBin2D(edso.electronicsMap, obj, btype_, _id)); mes_[iME]->setBinContent(bin, _content); } - void MESetDet2D::setBinContent(int _dcctccid, double _content) { + void MESetDet2D::setBinContent(EcalDQMSetupObjects const edso, int _dcctccid, double _content) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int bin(binning::findBin2D(obj, btype_, _dcctccid)); + int bin(binning::findBin2D(edso.electronicsMap, obj, btype_, _dcctccid)); mes_[iME]->setBinContent(bin, _content); } - void MESetDet2D::setBinError(DetId const &_id, double _error) { + void MESetDet2D::setBinError(EcalDQMSetupObjects const edso, DetId const &_id, double _error) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); @@ -209,51 +210,51 @@ namespace ecaldqm { int bin; if (isEndcapTTId(_id)) { - std::vector ids(getTrigTowerMap()->constituentsOf(EcalTrigTowerDetId(_id))); + std::vector ids(edso.trigtowerMap->constituentsOf(EcalTrigTowerDetId(_id))); unsigned nId(ids.size()); for (unsigned iId(0); iId < nId; iId++) { - bin = binning::findBin2D(obj, binning::kTriggerTower, ids[iId]); + bin = binning::findBin2D(edso.electronicsMap, obj, binning::kTriggerTower, ids[iId]); mes_[iME]->setBinError(bin, _error); } } else { - bin = binning::findBin2D(obj, btype_, _id); + bin = binning::findBin2D(edso.electronicsMap, obj, btype_, _id); mes_[iME]->setBinError(bin, _error); } } - void MESetDet2D::setBinError(EcalElectronicsId const &_id, double _error) { + void MESetDet2D::setBinError(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, double _error) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int bin(binning::findBin2D(obj, btype_, _id)); + int bin(binning::findBin2D(edso.electronicsMap, obj, btype_, _id)); mes_[iME]->setBinError(bin, _error); } - void MESetDet2D::setBinError(int _dcctccid, double _error) { + void MESetDet2D::setBinError(EcalDQMSetupObjects const edso, int _dcctccid, double _error) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int bin(binning::findBin2D(obj, btype_, _dcctccid)); + int bin(binning::findBin2D(edso.electronicsMap, obj, btype_, _dcctccid)); mes_[iME]->setBinError(bin, _error); } - void MESetDet2D::setBinEntries(DetId const &_id, double _entries) { + void MESetDet2D::setBinEntries(EcalDQMSetupObjects const edso, DetId const &_id, double _entries) { if (!active_) return; if (kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); @@ -261,51 +262,51 @@ namespace ecaldqm { int bin; if (isEndcapTTId(_id)) { - std::vector ids(getTrigTowerMap()->constituentsOf(EcalTrigTowerDetId(_id))); + std::vector ids(edso.trigtowerMap->constituentsOf(EcalTrigTowerDetId(_id))); unsigned nId(ids.size()); for (unsigned iId(0); iId < nId; iId++) { - bin = binning::findBin2D(obj, binning::kTriggerTower, ids[iId]); + bin = binning::findBin2D(edso.electronicsMap, obj, binning::kTriggerTower, ids[iId]); mes_[iME]->setBinEntries(bin, _entries); } } else { - bin = binning::findBin2D(obj, btype_, _id); + bin = binning::findBin2D(edso.electronicsMap, obj, btype_, _id); mes_[iME]->setBinEntries(bin, _entries); } } - void MESetDet2D::setBinEntries(EcalElectronicsId const &_id, double _entries) { + void MESetDet2D::setBinEntries(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, double _entries) { if (!active_) return; if (kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int bin(binning::findBin2D(obj, btype_, _id)); + int bin(binning::findBin2D(edso.electronicsMap, obj, btype_, _id)); mes_[iME]->setBinEntries(bin, _entries); } - void MESetDet2D::setBinEntries(int _dcctccid, double _entries) { + void MESetDet2D::setBinEntries(EcalDQMSetupObjects const edso, int _dcctccid, double _entries) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int bin(binning::findBin2D(obj, btype_, _dcctccid)); + int bin(binning::findBin2D(edso.electronicsMap, obj, btype_, _dcctccid)); mes_[iME]->setBinEntries(bin, _entries); } - double MESetDet2D::getBinContent(DetId const &_id, int) const { + double MESetDet2D::getBinContent(EcalDQMSetupObjects const edso, DetId const &_id, int) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); @@ -313,48 +314,48 @@ namespace ecaldqm { int bin; if (isEndcapTTId(_id)) { - std::vector ids(getTrigTowerMap()->constituentsOf(EcalTrigTowerDetId(_id))); - bin = binning::findBin2D(obj, binning::kTriggerTower, ids[0]); + std::vector ids(edso.trigtowerMap->constituentsOf(EcalTrigTowerDetId(_id))); + bin = binning::findBin2D(edso.electronicsMap, obj, binning::kTriggerTower, ids[0]); } else { - bin = binning::findBin2D(obj, btype_, _id); + bin = binning::findBin2D(edso.electronicsMap, obj, btype_, _id); } return mes_[iME]->getBinContent(bin); } - double MESetDet2D::getBinContent(EcalElectronicsId const &_id, int) const { + double MESetDet2D::getBinContent(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, int) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int bin(binning::findBin2D(obj, btype_, _id)); + int bin(binning::findBin2D(edso.electronicsMap, obj, btype_, _id)); return mes_[iME]->getBinContent(bin); } - double MESetDet2D::getBinContent(int _dcctccid, int) const { + double MESetDet2D::getBinContent(EcalDQMSetupObjects const edso, int _dcctccid, int) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int bin(binning::findBin2D(obj, btype_, _dcctccid)); + int bin(binning::findBin2D(edso.electronicsMap, obj, btype_, _dcctccid)); return mes_[iME]->getBinContent(bin); } - double MESetDet2D::getBinError(DetId const &_id, int) const { + double MESetDet2D::getBinError(EcalDQMSetupObjects const edso, DetId const &_id, int) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); @@ -362,50 +363,50 @@ namespace ecaldqm { int bin; if (isEndcapTTId(_id)) { - std::vector ids(getTrigTowerMap()->constituentsOf(EcalTrigTowerDetId(_id))); - bin = binning::findBin2D(obj, binning::kTriggerTower, ids[0]); + std::vector ids(edso.trigtowerMap->constituentsOf(EcalTrigTowerDetId(_id))); + bin = binning::findBin2D(edso.electronicsMap, obj, binning::kTriggerTower, ids[0]); } else { - bin = binning::findBin2D(obj, btype_, _id); + bin = binning::findBin2D(edso.electronicsMap, obj, btype_, _id); } return mes_[iME]->getBinError(bin); } - double MESetDet2D::getBinError(EcalElectronicsId const &_id, int) const { + double MESetDet2D::getBinError(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, int) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int bin(binning::findBin2D(obj, btype_, _id)); + int bin(binning::findBin2D(edso.electronicsMap, obj, btype_, _id)); return mes_[iME]->getBinError(bin); } - double MESetDet2D::getBinError(int _dcctccid, int) const { + double MESetDet2D::getBinError(EcalDQMSetupObjects const edso, int _dcctccid, int) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int bin(binning::findBin2D(obj, btype_, _dcctccid)); + int bin(binning::findBin2D(edso.electronicsMap, obj, btype_, _dcctccid)); return mes_[iME]->getBinError(bin); } - double MESetDet2D::getBinEntries(DetId const &_id, int) const { + double MESetDet2D::getBinEntries(EcalDQMSetupObjects const edso, DetId const &_id, int) const { if (!active_) return 0.; if (kind_ != MonitorElement::Kind::TPROFILE2D) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); @@ -413,10 +414,10 @@ namespace ecaldqm { int bin; if (isEndcapTTId(_id)) { - std::vector ids(getTrigTowerMap()->constituentsOf(EcalTrigTowerDetId(_id))); - bin = binning::findBin2D(obj, binning::kTriggerTower, ids[0]); + std::vector ids(edso.trigtowerMap->constituentsOf(EcalTrigTowerDetId(_id))); + bin = binning::findBin2D(edso.electronicsMap, obj, binning::kTriggerTower, ids[0]); } else { - bin = binning::findBin2D(obj, btype_, _id); + bin = binning::findBin2D(edso.electronicsMap, obj, btype_, _id); } double entries(mes_[iME]->getBinEntries(bin)); @@ -426,18 +427,18 @@ namespace ecaldqm { return entries; } - double MESetDet2D::getBinEntries(EcalElectronicsId const &_id, int) const { + double MESetDet2D::getBinEntries(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, int) const { if (!active_) return 0.; if (kind_ != MonitorElement::Kind::TPROFILE2D) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int bin(binning::findBin2D(obj, btype_, _id)); + int bin(binning::findBin2D(edso.electronicsMap, obj, btype_, _id)); double entries(mes_[iME]->getBinEntries(bin)); if (entries < 0.) @@ -446,16 +447,16 @@ namespace ecaldqm { return entries; } - double MESetDet2D::getBinEntries(int _dcctccid, int) const { + double MESetDet2D::getBinEntries(EcalDQMSetupObjects const edso, int _dcctccid, int) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - int bin(binning::findBin2D(obj, btype_, _dcctccid)); + int bin(binning::findBin2D(edso.electronicsMap, obj, btype_, _dcctccid)); double entries(mes_[iME]->getBinEntries(bin)); if (entries < 0.) @@ -464,35 +465,38 @@ namespace ecaldqm { return entries; } - int MESetDet2D::findBin(DetId const &_id) const { + int MESetDet2D::findBin(EcalDQMSetupObjects const edso, DetId const &_id) const { if (!active_) return 0; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); if (isEndcapTTId(_id)) { - std::vector ids(getTrigTowerMap()->constituentsOf(EcalTrigTowerDetId(_id))); - return binning::findBin2D(obj, binning::kTriggerTower, ids[0]); + std::vector ids(edso.trigtowerMap->constituentsOf(EcalTrigTowerDetId(_id))); + return binning::findBin2D(edso.electronicsMap, obj, binning::kTriggerTower, ids[0]); } else - return binning::findBin2D(obj, btype_, _id); + return binning::findBin2D(edso.electronicsMap, obj, btype_, _id); } - int MESetDet2D::findBin(EcalElectronicsId const &_id) const { + int MESetDet2D::findBin(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id) const { if (!active_) return 0; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); binning::ObjectType obj(binning::getObject(otype_, iME)); - return binning::findBin2D(obj, btype_, _id); + return binning::findBin2D(edso.electronicsMap, obj, btype_, _id); } - void MESetDet2D::reset(double _content /* = 0.*/, double _err /* = 0.*/, double _entries /* = 0.*/) { + void MESetDet2D::reset(EcalElectronicsMapping const *electronicsMap, + double _content /* = 0.*/, + double _err /* = 0.*/, + double _entries /* = 0.*/) { unsigned nME(binning::getNObjects(otype_)); bool isProfile(kind_ == MonitorElement::Kind::TPROFILE2D); @@ -507,7 +511,7 @@ namespace ecaldqm { for (int ix(1); ix <= nbinsX; ix++) { for (int iy(1); iy <= nbinsY; iy++) { int bin((nbinsX + 2) * iy + ix); - if (!binning::isValidIdBin(obj, btype_, iME, bin)) + if (!binning::isValidIdBin(electronicsMap, obj, btype_, iME, bin)) continue; me->setBinContent(bin, _content); me->setBinError(bin, _err); diff --git a/DQM/EcalCommon/src/MESetEcal.cc b/DQM/EcalCommon/src/MESetEcal.cc index 850898186c10a..af100cf713a72 100644 --- a/DQM/EcalCommon/src/MESetEcal.cc +++ b/DQM/EcalCommon/src/MESetEcal.cc @@ -67,7 +67,7 @@ namespace ecaldqm { return copy; } - void MESetEcal::book(DQMStore::IBooker &_ibooker) { + void MESetEcal::book(DQMStore::IBooker &_ibooker, EcalElectronicsMapping const *electronicsMap) { using namespace std; auto oldscope = MonitorElementData::Scope::RUN; @@ -76,7 +76,7 @@ namespace ecaldqm { clear(); - vector mePaths(generatePaths()); + vector mePaths(generatePaths(electronicsMap)); for (unsigned iME(0); iME < mePaths.size(); iME++) { string &path(mePaths[iME]); @@ -99,7 +99,7 @@ namespace ecaldqm { zaxis = *zaxis_; if (xaxis.nbins == 0) { // uses preset - binning::AxisSpecs xdef(binning::getBinning(actualObject, btype_, isMap, 1, iME)); + binning::AxisSpecs xdef(binning::getBinning(electronicsMap, actualObject, btype_, isMap, 1, iME)); if (xaxis.labels || !xaxis.title.empty()) { // PSet specifies title / label only std::string *labels(xaxis.labels); std::string title(xaxis.title); @@ -112,7 +112,7 @@ namespace ecaldqm { } if (isMap && yaxis.nbins == 0) { - binning::AxisSpecs ydef(binning::getBinning(actualObject, btype_, isMap, 2, iME)); + binning::AxisSpecs ydef(binning::getBinning(electronicsMap, actualObject, btype_, isMap, 2, iME)); if (yaxis.labels || !yaxis.title.empty()) { // PSet specifies title / label only std::string *labels(yaxis.labels); std::string title(yaxis.title); @@ -277,10 +277,12 @@ namespace ecaldqm { active_ = true; } - bool MESetEcal::retrieve(DQMStore::IGetter &_igetter, std::string *_failedPath /* = 0*/) const { + bool MESetEcal::retrieve(EcalElectronicsMapping const *electronicsMap, + DQMStore::IGetter &_igetter, + std::string *_failedPath /* = 0*/) const { clear(); - std::vector mePaths(generatePaths()); + std::vector mePaths(generatePaths(electronicsMap)); if (mePaths.empty()) { if (_failedPath) _failedPath->clear(); @@ -307,37 +309,46 @@ namespace ecaldqm { return true; } - void MESetEcal::fill(DetId const &_id, double _x /* = 1.*/, double _wy /* = 1.*/, double _w /* = 1.*/) { + void MESetEcal::fill(EcalDQMSetupObjects const edso, + DetId const &_id, + double _x /* = 1.*/, + double _wy /* = 1.*/, + double _w /* = 1.*/) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); fill_(iME, _x, _wy, _w); } - void MESetEcal::fill(EcalElectronicsId const &_id, double _x /* = 1.*/, double _wy /* = 1.*/, double _w /* = 1.*/) { + void MESetEcal::fill(EcalDQMSetupObjects const edso, + EcalElectronicsId const &_id, + double _x /* = 1.*/, + double _wy /* = 1.*/, + double _w /* = 1.*/) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); fill_(iME, _x, _wy, _w); } - void MESetEcal::fill(int _dcctccid, double _x /* = 1.*/, double _wy /* = 1.*/, double _w /* = 1.*/) { + void MESetEcal::fill( + EcalDQMSetupObjects const edso, int _dcctccid, double _x /* = 1.*/, double _wy /* = 1.*/, double _w /* = 1.*/) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); fill_(iME, _x, _wy, _w); } - void MESetEcal::fill(double _x, double _wy /* = 1.*/, double _w /* = 1.*/) { + void MESetEcal::fill(EcalDQMSetupObjects const edso, double _x, double _wy /* = 1.*/, double _w /* = 1.*/) { if (!active_) return; @@ -347,223 +358,232 @@ namespace ecaldqm { fill_(0, _x, _wy, _w); } - void MESetEcal::setBinContent(DetId const &_id, int _bin, double _content) { + void MESetEcal::setBinContent(EcalDQMSetupObjects const edso, DetId const &_id, int _bin, double _content) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); mes_[iME]->setBinContent(_bin, _content); } - void MESetEcal::setBinContent(EcalElectronicsId const &_id, int _bin, double _content) { + void MESetEcal::setBinContent(EcalDQMSetupObjects const edso, + EcalElectronicsId const &_id, + int _bin, + double _content) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); mes_[iME]->setBinContent(_bin, _content); } - void MESetEcal::setBinContent(int _dcctccid, int _bin, double _content) { + void MESetEcal::setBinContent(EcalDQMSetupObjects const edso, int _dcctccid, int _bin, double _content) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); mes_[iME]->setBinContent(_bin, _content); } - void MESetEcal::setBinError(DetId const &_id, int _bin, double _error) { + void MESetEcal::setBinError(EcalDQMSetupObjects const edso, DetId const &_id, int _bin, double _error) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); mes_[iME]->setBinError(_bin, _error); } - void MESetEcal::setBinError(EcalElectronicsId const &_id, int _bin, double _error) { + void MESetEcal::setBinError(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, int _bin, double _error) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); mes_[iME]->setBinError(_bin, _error); } - void MESetEcal::setBinError(int _dcctccid, int _bin, double _error) { + void MESetEcal::setBinError(EcalDQMSetupObjects const edso, int _dcctccid, int _bin, double _error) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); mes_[iME]->setBinError(_bin, _error); } - void MESetEcal::setBinEntries(DetId const &_id, int _bin, double _entries) { + void MESetEcal::setBinEntries(EcalDQMSetupObjects const edso, DetId const &_id, int _bin, double _entries) { if (!active_) return; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); mes_[iME]->setBinEntries(_bin, _entries); } - void MESetEcal::setBinEntries(EcalElectronicsId const &_id, int _bin, double _entries) { + void MESetEcal::setBinEntries(EcalDQMSetupObjects const edso, + EcalElectronicsId const &_id, + int _bin, + double _entries) { if (!active_) return; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); mes_[iME]->setBinEntries(_bin, _entries); } - void MESetEcal::setBinEntries(int _dcctccid, int _bin, double _entries) { + void MESetEcal::setBinEntries(EcalDQMSetupObjects const edso, int _dcctccid, int _bin, double _entries) { if (!active_) return; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); mes_[iME]->setBinEntries(_bin, _entries); } - double MESetEcal::getBinContent(DetId const &_id, int _bin) const { + double MESetEcal::getBinContent(EcalDQMSetupObjects const edso, DetId const &_id, int _bin) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); return mes_[iME]->getBinContent(_bin); } - double MESetEcal::getBinContent(EcalElectronicsId const &_id, int _bin) const { + double MESetEcal::getBinContent(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, int _bin) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); return mes_[iME]->getBinContent(_bin); } - double MESetEcal::getBinContent(int _dcctccid, int _bin) const { + double MESetEcal::getBinContent(EcalDQMSetupObjects const edso, int _dcctccid, int _bin) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); return mes_[iME]->getBinContent(_bin); } - double MESetEcal::getBinError(DetId const &_id, int _bin) const { + double MESetEcal::getBinError(EcalDQMSetupObjects const edso, DetId const &_id, int _bin) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); return mes_[iME]->getBinError(_bin); } - double MESetEcal::getBinError(EcalElectronicsId const &_id, int _bin) const { + double MESetEcal::getBinError(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, int _bin) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); return mes_[iME]->getBinError(_bin); } - double MESetEcal::getBinError(int _dcctccid, int _bin) const { + double MESetEcal::getBinError(EcalDQMSetupObjects const edso, int _dcctccid, int _bin) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); return mes_[iME]->getBinError(_bin); } - double MESetEcal::getBinEntries(DetId const &_id, int _bin) const { + double MESetEcal::getBinEntries(EcalDQMSetupObjects const edso, DetId const &_id, int _bin) const { if (!active_) return 0.; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); return mes_[iME]->getBinEntries(_bin); } - double MESetEcal::getBinEntries(EcalElectronicsId const &_id, int _bin) const { + double MESetEcal::getBinEntries(EcalDQMSetupObjects const edso, EcalElectronicsId const &_id, int _bin) const { if (!active_) return 0.; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); return mes_[iME]->getBinEntries(_bin); } - double MESetEcal::getBinEntries(int _dcctccid, int _bin) const { + double MESetEcal::getBinEntries(EcalDQMSetupObjects const edso, int _dcctccid, int _bin) const { if (!active_) return 0.; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); return mes_[iME]->getBinEntries(_bin); } - int MESetEcal::findBin(DetId const &_id, double _x, double _y /* = 0.*/) const { + int MESetEcal::findBin(EcalDQMSetupObjects const edso, DetId const &_id, double _x, double _y /* = 0.*/) const { if (!active_) return -1; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); return mes_[iME]->getTH1()->FindBin(_x, _y); } - int MESetEcal::findBin(EcalElectronicsId const &_id, double _x, double _y /* = 0.*/) const { + int MESetEcal::findBin(EcalDQMSetupObjects const edso, + EcalElectronicsId const &_id, + double _x, + double _y /* = 0.*/) const { if (!active_) return -1; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); return mes_[iME]->getTH1()->FindBin(_x, _y); } - int MESetEcal::findBin(int _dcctccid, double _x, double _y /* = 0.*/) const { + int MESetEcal::findBin(EcalDQMSetupObjects const edso, int _dcctccid, double _x, double _y /* = 0.*/) const { if (!active_) return -1; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); return mes_[iME]->getTH1()->FindBin(_x, _y); @@ -573,7 +593,7 @@ namespace ecaldqm { return (xaxis_ && xaxis_->edges) || (yaxis_ && yaxis_->edges) || (zaxis_ && zaxis_->edges); } - std::vector MESetEcal::generatePaths() const { + std::vector MESetEcal::generatePaths(EcalElectronicsMapping const *electronicsMap) const { using namespace std; vector paths(0); @@ -630,18 +650,18 @@ namespace ecaldqm { replacements["prefix"] = "EB"; replacements["supercrystal"] = "trigger tower"; } - replacements["sm"] = binning::channelName(iME + 1); + replacements["sm"] = binning::channelName(electronicsMap, iME + 1); break; case binning::kEBSM: replacements["subdet"] = "EcalBarrel"; replacements["prefix"] = "EB"; - replacements["sm"] = binning::channelName(iME + kEBmLow + 1); + replacements["sm"] = binning::channelName(electronicsMap, iME + kEBmLow + 1); replacements["supercrystal"] = "trigger tower"; break; case binning::kEESM: replacements["subdet"] = "EcalEndcap"; replacements["prefix"] = "EE"; - replacements["sm"] = binning::channelName(iME <= kEEmHigh ? iME + 1 : iME + 37); + replacements["sm"] = binning::channelName(electronicsMap, iME <= kEEmHigh ? iME + 1 : iME + 37); replacements["supercrystal"] = "super crystal"; break; case binning::kSMMEM: { @@ -654,19 +674,19 @@ namespace ecaldqm { replacements["subdet"] = "EcalBarrel"; replacements["prefix"] = "EB"; } - replacements["sm"] = binning::channelName(iDCC + 1); + replacements["sm"] = binning::channelName(electronicsMap, iDCC + 1); } break; case binning::kEBSMMEM: { unsigned iDCC(memDCCId(iME + 4) - 1); replacements["subdet"] = "EcalBarrel"; replacements["prefix"] = "EB"; - replacements["sm"] = binning::channelName(iDCC + 1); + replacements["sm"] = binning::channelName(electronicsMap, iDCC + 1); } break; case binning::kEESMMEM: { unsigned iDCC(memDCCId(iME < 4 ? iME : iME + 36) - 1); replacements["subdet"] = "EcalEndcap"; replacements["prefix"] = "EE"; - replacements["sm"] = binning::channelName(iDCC + 1); + replacements["sm"] = binning::channelName(electronicsMap, iDCC + 1); } default: break; diff --git a/DQM/EcalCommon/src/MESetMulti.cc b/DQM/EcalCommon/src/MESetMulti.cc index e6f0cd6a17b0e..3156d5e60b612 100644 --- a/DQM/EcalCommon/src/MESetMulti.cc +++ b/DQM/EcalCommon/src/MESetMulti.cc @@ -94,16 +94,18 @@ namespace ecaldqm { return copy; } - void MESetMulti::book(DQMStore::IBooker &_ibooker) { + void MESetMulti::book(DQMStore::IBooker &_ibooker, EcalElectronicsMapping const *electronicsMap) { for (unsigned iS(0); iS < sets_.size(); ++iS) - sets_[iS]->book(_ibooker); + sets_[iS]->book(_ibooker, electronicsMap); active_ = true; } - bool MESetMulti::retrieve(DQMStore::IGetter &_igetter, std::string *_failedPath /* = 0*/) const { + bool MESetMulti::retrieve(EcalElectronicsMapping const *electronicsMap, + DQMStore::IGetter &_igetter, + std::string *_failedPath /* = 0*/) const { for (unsigned iS(0); iS < sets_.size(); ++iS) - if (!sets_[iS]->retrieve(_igetter, _failedPath)) + if (!sets_[iS]->retrieve(electronicsMap, _igetter, _failedPath)) return false; active_ = true; @@ -117,9 +119,12 @@ namespace ecaldqm { active_ = false; } - void MESetMulti::reset(double _content /* = 0*/, double _error /* = 0.*/, double _entries /* = 0.*/) { + void MESetMulti::reset(EcalElectronicsMapping const *electronicsMap, + double _content /* = 0*/, + double _error /* = 0.*/, + double _entries /* = 0.*/) { for (unsigned iS(0); iS < sets_.size(); ++iS) - sets_[iS]->reset(_content, _error, _entries); + sets_[iS]->reset(electronicsMap, _content, _error, _entries); } void MESetMulti::resetAll(double _content /* = 0*/, double _error /* = 0.*/, double _entries /* = 0.*/) { diff --git a/DQM/EcalCommon/src/MESetNonObject.cc b/DQM/EcalCommon/src/MESetNonObject.cc index bcd6b251d8961..e5c942ff6bdf2 100644 --- a/DQM/EcalCommon/src/MESetNonObject.cc +++ b/DQM/EcalCommon/src/MESetNonObject.cc @@ -54,7 +54,7 @@ namespace ecaldqm { return copy; } - void MESetNonObject::book(DQMStore::IBooker &_ibooker) { + void MESetNonObject::book(DQMStore::IBooker &_ibooker, EcalElectronicsMapping const *electronicsMap) { using namespace std; clear(); @@ -182,7 +182,9 @@ namespace ecaldqm { active_ = true; } - bool MESetNonObject::retrieve(DQMStore::IGetter &_igetter, std::string *_failedPath /* = 0*/) const { + bool MESetNonObject::retrieve(EcalElectronicsMapping const *electronicsMap, + DQMStore::IGetter &_igetter, + std::string *_failedPath /* = 0*/) const { mes_.clear(); MonitorElement *me(_igetter.get(path_)); @@ -198,7 +200,7 @@ namespace ecaldqm { return true; } - void MESetNonObject::fill(double _x, double _wy /* = 1.*/, double _w /* = 1.*/) { + void MESetNonObject::fill(EcalDQMSetupObjects const edso, double _x, double _wy /* = 1.*/, double _w /* = 1.*/) { if (!active_) return; @@ -222,7 +224,7 @@ namespace ecaldqm { } } - void MESetNonObject::setBinContent(int _bin, double _content) { + void MESetNonObject::setBinContent(EcalDQMSetupObjects const edso, int _bin, double _content) { if (!active_) return; if (kind_ == MonitorElement::Kind::REAL) @@ -234,7 +236,7 @@ namespace ecaldqm { mes_[0]->setBinContent(_bin, _content); } - void MESetNonObject::setBinError(int _bin, double _error) { + void MESetNonObject::setBinError(EcalDQMSetupObjects const edso, int _bin, double _error) { if (!active_) return; if (kind_ == MonitorElement::Kind::REAL) @@ -246,7 +248,7 @@ namespace ecaldqm { mes_[0]->setBinError(_bin, _error); } - void MESetNonObject::setBinEntries(int _bin, double _entries) { + void MESetNonObject::setBinEntries(EcalDQMSetupObjects const edso, int _bin, double _entries) { if (!active_) return; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) @@ -258,7 +260,7 @@ namespace ecaldqm { mes_[0]->setBinEntries(_bin, _entries); } - double MESetNonObject::getBinContent(int _bin, int) const { + double MESetNonObject::getBinContent(EcalDQMSetupObjects const edso, int _bin, int) const { if (!active_) return 0.; if (kind_ == MonitorElement::Kind::REAL) @@ -277,7 +279,7 @@ namespace ecaldqm { return 0.; } - double MESetNonObject::getBinError(int _bin, int) const { + double MESetNonObject::getBinError(EcalDQMSetupObjects const edso, int _bin, int) const { if (!active_) return 0.; if (kind_ == MonitorElement::Kind::REAL) @@ -289,7 +291,7 @@ namespace ecaldqm { return mes_[0]->getBinError(_bin); } - double MESetNonObject::getBinEntries(int _bin, int) const { + double MESetNonObject::getBinEntries(EcalDQMSetupObjects const edso, int _bin, int) const { if (!active_) return 0.; if (kind_ != MonitorElement::Kind::TPROFILE && kind_ != MonitorElement::Kind::TPROFILE2D) @@ -301,7 +303,7 @@ namespace ecaldqm { return mes_[0]->getBinEntries(_bin); } - int MESetNonObject::findBin(double _x, double _y /* = 0.*/) const { + int MESetNonObject::findBin(EcalDQMSetupObjects const edso, double _x, double _y /* = 0.*/) const { if (!active_) return 0; diff --git a/DQM/EcalCommon/src/MESetProjection.cc b/DQM/EcalCommon/src/MESetProjection.cc index 36e3714e8d767..8f83320a2a0b6 100644 --- a/DQM/EcalCommon/src/MESetProjection.cc +++ b/DQM/EcalCommon/src/MESetProjection.cc @@ -39,11 +39,11 @@ namespace ecaldqm { return copy; } - void MESetProjection::fill(DetId const &_id, double _w /* = 1.*/, double, double) { + void MESetProjection::fill(EcalDQMSetupObjects const edso, DetId const &_id, double _w /* = 1.*/, double, double) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); int subdet(_id.subdetId()); @@ -51,23 +51,23 @@ namespace ecaldqm { if (subdet == EcalBarrel) { EBDetId ebid(_id); if (btype_ == binning::kProjEta) - fill_(iME, eta(ebid), _w, 0.); + fill_(iME, eta(ebid, edso.geometry), _w, 0.); else if (btype_ == binning::kProjPhi) fill_(iME, phi(ebid), _w, 0.); } else if (subdet == EcalEndcap) { EEDetId eeid(_id); if (btype_ == binning::kProjEta) - fill_(iME, eta(eeid), _w, 0.); + fill_(iME, eta(eeid, edso.geometry), _w, 0.); if (btype_ == binning::kProjPhi) { fill_(iME, phi(eeid), _w, 0.); } } else if (isEndcapTTId(_id)) { EcalTrigTowerDetId ttid(_id); - std::vector ids(getTrigTowerMap()->constituentsOf(ttid)); + std::vector ids(edso.trigtowerMap->constituentsOf(ttid)); unsigned nIds(ids.size()); if (btype_ == binning::kProjEta) { for (unsigned iId(0); iId < nIds; iId++) - fill_(iME, eta(EEDetId(ids[iId])), _w / nIds, 0.); + fill_(iME, eta(EEDetId(ids[iId]), edso.geometry), _w / nIds, 0.); } else if (btype_ == binning::kProjPhi) { for (unsigned iId(0); iId < nIds; iId++) fill_(iME, phi(EEDetId(ids[iId])), _w / nIds, 0.); @@ -85,11 +85,12 @@ namespace ecaldqm { } } - void MESetProjection::fill(int _subdet, double _x /* = 1.*/, double _w /* = 1.*/, double) { + void MESetProjection::fill( + EcalDQMSetupObjects const edso, int _subdet, double _x /* = 1.*/, double _w /* = 1.*/, double) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _subdet, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _subdet, btype_)); checkME_(iME); if (btype_ == binning::kProjPhi) @@ -98,7 +99,7 @@ namespace ecaldqm { mes_[iME]->Fill(_x, _w); } - void MESetProjection::fill(double _x, double _w /* = 1.*/, double) { + void MESetProjection::fill(EcalDQMSetupObjects const edso, double _x, double _w /* = 1.*/, double) { if (!active_) return; if (btype_ != binning::kProjEta) @@ -120,23 +121,23 @@ namespace ecaldqm { mes_[iME]->Fill(_x, _w); } - void MESetProjection::setBinContent(DetId const &_id, double _content) { + void MESetProjection::setBinContent(EcalDQMSetupObjects const edso, DetId const &_id, double _content) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); if (isEndcapTTId(_id)) { EcalTrigTowerDetId ttid(_id); - std::vector ids(getTrigTowerMap()->constituentsOf(ttid)); + std::vector ids(edso.trigtowerMap->constituentsOf(ttid)); unsigned nIds(ids.size()); std::set bins; if (btype_ == binning::kProjEta) { for (unsigned iId(0); iId < nIds; iId++) { - int bin(me->getTH1()->FindBin(eta(EEDetId(ids[iId])))); + int bin(me->getTH1()->FindBin(eta(EEDetId(ids[iId]), edso.geometry))); if (bins.find(bin) != bins.end()) continue; me->setBinContent(bin, _content); @@ -157,12 +158,12 @@ namespace ecaldqm { if (subdet == EcalBarrel) { EBDetId ebid(_id); if (btype_ == binning::kProjEta) - x = eta(ebid); + x = eta(ebid, edso.geometry); else if (btype_ == binning::kProjPhi) x = phi(ebid); } else if (subdet == EcalEndcap) { if (btype_ == binning::kProjEta) - x = eta(EEDetId(_id)); + x = eta(EEDetId(_id), edso.geometry); else if (btype_ == binning::kProjPhi) x = phi(EEDetId(_id)); } else if (subdet == EcalTriggerTower) { @@ -181,23 +182,23 @@ namespace ecaldqm { me->setBinContent(bin, _content); } - void MESetProjection::setBinError(DetId const &_id, double _error) { + void MESetProjection::setBinError(EcalDQMSetupObjects const edso, DetId const &_id, double _error) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); if (isEndcapTTId(_id)) { EcalTrigTowerDetId ttid(_id); - std::vector ids(getTrigTowerMap()->constituentsOf(ttid)); + std::vector ids(edso.trigtowerMap->constituentsOf(ttid)); unsigned nIds(ids.size()); std::set bins; if (btype_ == binning::kProjEta) { for (unsigned iId(0); iId < nIds; iId++) { - int bin(me->getTH1()->FindBin(eta(EEDetId(ids[iId])))); + int bin(me->getTH1()->FindBin(eta(EEDetId(ids[iId]), edso.geometry))); if (bins.find(bin) != bins.end()) continue; me->setBinError(bin, _error); @@ -218,12 +219,12 @@ namespace ecaldqm { if (subdet == EcalBarrel) { EBDetId ebid(_id); if (btype_ == binning::kProjEta) - x = eta(ebid); + x = eta(ebid, edso.geometry); else if (btype_ == binning::kProjPhi) x = phi(ebid); } else if (subdet == EcalEndcap) { if (btype_ == binning::kProjEta) - x = eta(EEDetId(_id)); + x = eta(EEDetId(_id), edso.geometry); else if (btype_ == binning::kProjPhi) x = phi(EEDetId(_id)); } else if (subdet == EcalTriggerTower) { @@ -242,23 +243,23 @@ namespace ecaldqm { me->setBinError(bin, _error); } - void MESetProjection::setBinEntries(DetId const &_id, double _entries) { + void MESetProjection::setBinEntries(EcalDQMSetupObjects const edso, DetId const &_id, double _entries) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); if (isEndcapTTId(_id)) { EcalTrigTowerDetId ttid(_id); - std::vector ids(getTrigTowerMap()->constituentsOf(ttid)); + std::vector ids(edso.trigtowerMap->constituentsOf(ttid)); unsigned nIds(ids.size()); std::set bins; if (btype_ == binning::kProjEta) { for (unsigned iId(0); iId < nIds; iId++) { - int bin(me->getTH1()->FindBin(eta(EEDetId(ids[iId])))); + int bin(me->getTH1()->FindBin(eta(EEDetId(ids[iId]), edso.geometry))); if (bins.find(bin) != bins.end()) continue; me->setBinEntries(bin, _entries); @@ -279,12 +280,12 @@ namespace ecaldqm { if (subdet == EcalBarrel) { EBDetId ebid(_id); if (btype_ == binning::kProjEta) - x = eta(ebid); + x = eta(ebid, edso.geometry); else if (btype_ == binning::kProjPhi) x = phi(ebid); } else if (subdet == EcalEndcap) { if (btype_ == binning::kProjEta) - x = eta(EEDetId(_id)); + x = eta(EEDetId(_id), edso.geometry); else if (btype_ == binning::kProjPhi) x = phi(EEDetId(_id)); } else if (subdet == EcalTriggerTower) { @@ -303,20 +304,20 @@ namespace ecaldqm { me->setBinEntries(bin, _entries); } - double MESetProjection::getBinContent(DetId const &_id, int) const { + double MESetProjection::getBinContent(EcalDQMSetupObjects const edso, DetId const &_id, int) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); if (isEndcapTTId(_id)) { EcalTrigTowerDetId ttid(_id); - std::vector ids(getTrigTowerMap()->constituentsOf(ttid)); + std::vector ids(edso.trigtowerMap->constituentsOf(ttid)); if (btype_ == binning::kProjEta) { - int bin(me->getTH1()->FindBin(eta(EEDetId(ids[0])))); + int bin(me->getTH1()->FindBin(eta(EEDetId(ids[0]), edso.geometry))); return me->getBinContent(bin); } else if (btype_ == binning::kProjPhi) { int bin(me->getTH1()->FindBin(phi(EEDetId(ids[0])))); @@ -330,12 +331,12 @@ namespace ecaldqm { if (subdet == EcalBarrel) { EBDetId ebid(_id); if (btype_ == binning::kProjEta) - x = eta(ebid); + x = eta(ebid, edso.geometry); else if (btype_ == binning::kProjPhi) x = phi(ebid); } else if (subdet == EcalEndcap) { if (btype_ == binning::kProjEta) - x = eta(EEDetId(_id)); + x = eta(EEDetId(_id), edso.geometry); else if (btype_ == binning::kProjPhi) x = phi(EEDetId(_id)); } else if (subdet == EcalTriggerTower) { @@ -354,20 +355,20 @@ namespace ecaldqm { return me->getBinContent(bin); } - double MESetProjection::getBinError(DetId const &_id, int) const { + double MESetProjection::getBinError(EcalDQMSetupObjects const edso, DetId const &_id, int) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); if (isEndcapTTId(_id)) { EcalTrigTowerDetId ttid(_id); - std::vector ids(getTrigTowerMap()->constituentsOf(ttid)); + std::vector ids(edso.trigtowerMap->constituentsOf(ttid)); if (btype_ == binning::kProjEta) { - int bin(me->getTH1()->FindBin(eta(EEDetId(ids[0])))); + int bin(me->getTH1()->FindBin(eta(EEDetId(ids[0]), edso.geometry))); return me->getBinError(bin); } else if (btype_ == binning::kProjPhi) { int bin(me->getTH1()->FindBin(phi(EEDetId(ids[0])))); @@ -381,12 +382,12 @@ namespace ecaldqm { if (subdet == EcalBarrel) { EBDetId ebid(_id); if (btype_ == binning::kProjEta) - x = eta(ebid); + x = eta(ebid, edso.geometry); else if (btype_ == binning::kProjPhi) x = phi(ebid); } else if (subdet == EcalEndcap) { if (btype_ == binning::kProjEta) - x = eta(EEDetId(_id)); + x = eta(EEDetId(_id), edso.geometry); else if (btype_ == binning::kProjPhi) x = phi(EEDetId(_id)); } else if (subdet == EcalTriggerTower) { @@ -405,20 +406,20 @@ namespace ecaldqm { return me->getBinError(bin); } - double MESetProjection::getBinEntries(DetId const &_id, int) const { + double MESetProjection::getBinEntries(EcalDQMSetupObjects const edso, DetId const &_id, int) const { if (!active_) return 0.; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); MonitorElement *me(mes_[iME]); if (isEndcapTTId(_id)) { EcalTrigTowerDetId ttid(_id); - std::vector ids(getTrigTowerMap()->constituentsOf(ttid)); + std::vector ids(edso.trigtowerMap->constituentsOf(ttid)); if (btype_ == binning::kProjEta) { - int bin(me->getTH1()->FindBin(eta(EEDetId(ids[0])))); + int bin(me->getTH1()->FindBin(eta(EEDetId(ids[0]), edso.geometry))); return me->getBinEntries(bin); } else if (btype_ == binning::kProjPhi) { int bin(me->getTH1()->FindBin(phi(EEDetId(ids[0])))); @@ -432,12 +433,12 @@ namespace ecaldqm { if (subdet == EcalBarrel) { EBDetId ebid(_id); if (btype_ == binning::kProjEta) - x = eta(ebid); + x = eta(ebid, edso.geometry); else if (btype_ == binning::kProjPhi) x = phi(ebid); } else if (subdet == EcalEndcap) { if (btype_ == binning::kProjEta) - x = eta(EEDetId(_id)); + x = eta(EEDetId(_id), edso.geometry); else if (btype_ == binning::kProjPhi) x = phi(EEDetId(_id)); } else if (subdet == EcalTriggerTower) { diff --git a/DQM/EcalCommon/src/MESetTrend.cc b/DQM/EcalCommon/src/MESetTrend.cc index f2ede8feeef27..22ba09a8db642 100644 --- a/DQM/EcalCommon/src/MESetTrend.cc +++ b/DQM/EcalCommon/src/MESetTrend.cc @@ -48,7 +48,7 @@ namespace ecaldqm { return copy; } - void MESetTrend::book(DQMStore::IBooker &_ibooker) { + void MESetTrend::book(DQMStore::IBooker &_ibooker, EcalElectronicsMapping const *electronicsMap) { binning::AxisSpecs xaxis; if (xaxis_) xaxis = *xaxis_; @@ -74,7 +74,7 @@ namespace ecaldqm { binning::AxisSpecs const *xaxisTemp(xaxis_); xaxis_ = &xaxis; - MESetEcal::book(_ibooker); + MESetEcal::book(_ibooker, electronicsMap); xaxis_ = xaxisTemp; @@ -86,40 +86,46 @@ namespace ecaldqm { setAxisTitle("LumiSections"); } - void MESetTrend::fill(DetId const &_id, double _t, double _wy /* = 1.*/, double _w /* = 1.*/) { + void MESetTrend::fill( + EcalDQMSetupObjects const edso, DetId const &_id, double _t, double _wy /* = 1.*/, double _w /* = 1.*/) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); if (shift_(unsigned(_t))) fill_(iME, _t + 0.5, _wy, _w); } - void MESetTrend::fill(EcalElectronicsId const &_id, double _t, double _wy /* = 1.*/, double _w /* = 1.*/) { + void MESetTrend::fill(EcalDQMSetupObjects const edso, + EcalElectronicsId const &_id, + double _t, + double _wy /* = 1.*/, + double _w /* = 1.*/) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); if (shift_(unsigned(_t))) fill_(iME, _t + 0.5, _wy, _w); } - void MESetTrend::fill(int _dcctccid, double _t, double _wy /* = 1.*/, double _w /* = 1.*/) { + void MESetTrend::fill( + EcalDQMSetupObjects const edso, int _dcctccid, double _t, double _wy /* = 1.*/, double _w /* = 1.*/) { if (!active_) return; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); if (shift_(unsigned(_t))) fill_(iME, _t + 0.5, _wy, _w); } - void MESetTrend::fill(double _t, double _wy /* = 1.*/, double _w /* = 1.*/) { + void MESetTrend::fill(EcalDQMSetupObjects const edso, double _t, double _wy /* = 1.*/, double _w /* = 1.*/) { if (!active_) return; if (mes_.size() != 1) @@ -129,37 +135,40 @@ namespace ecaldqm { fill_(0, _t + 0.5, _wy, _w); } - int MESetTrend::findBin(DetId const &_id, double _t, double _y /* = 0.*/) const { + int MESetTrend::findBin(EcalDQMSetupObjects const edso, DetId const &_id, double _t, double _y /* = 0.*/) const { if (!active_) return -1; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); return mes_[iME]->getTH1()->FindBin(_t + 0.5, _y); } - int MESetTrend::findBin(EcalElectronicsId const &_id, double _t, double _y /* = 0.*/) const { + int MESetTrend::findBin(EcalDQMSetupObjects const edso, + EcalElectronicsId const &_id, + double _t, + double _y /* = 0.*/) const { if (!active_) return -1; - unsigned iME(binning::findPlotIndex(otype_, _id)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id)); checkME_(iME); return mes_[iME]->getTH1()->FindBin(_t + 0.5, _y); } - int MESetTrend::findBin(int _dcctccid, double _t, double _y /* = 0.*/) const { + int MESetTrend::findBin(EcalDQMSetupObjects const edso, int _dcctccid, double _t, double _y /* = 0.*/) const { if (!active_) return -1; - unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_)); + unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _dcctccid, btype_)); checkME_(iME); return mes_[iME]->getTH1()->FindBin(_t + 0.5, _y); } - int MESetTrend::findBin(double _t, double _y /* = 0.*/) const { + int MESetTrend::findBin(EcalDQMSetupObjects const edso, double _t, double _y /* = 0.*/) const { if (!active_) return -1; if (mes_.size() != 1) diff --git a/DQM/EcalCommon/src/StatusManager.cc b/DQM/EcalCommon/src/StatusManager.cc index 779c95a48152f..a944cd866be34 100644 --- a/DQM/EcalCommon/src/StatusManager.cc +++ b/DQM/EcalCommon/src/StatusManager.cc @@ -121,7 +121,7 @@ namespace ecaldqm { 0x1 << EcalDQMStatusHelper::PHYSICS_BAD_CHANNEL_ERROR; } - void StatusManager::readFromStream(std::istream &_input) { + void StatusManager::readFromStream(std::istream &_input, const EcalElectronicsMapping *electronicsMap) { TPRegexp linePat( "^[ ]*(Crystal|TT|PN)[ ]+(EB[0-9+-]*|EE[0-9+-]*|[0-9]+)[ " "]+([0-9]+)[ ]([a-zA-Z_]+)"); @@ -183,7 +183,7 @@ namespace ecaldqm { status_.insert( std::pair(EcalTrigTowerDetId(zside, EcalBarrel, iEta, iPhi).rawId(), statusVal)); } else if (module.Contains("EE")) { - std::vector scIds(getElectronicsMap()->getEcalScDetId(dccId(module.Data()), channel, false)); + std::vector scIds(electronicsMap->getEcalScDetId(dccId(module.Data()), channel, false)); for (unsigned iS(0); iS != scIds.size(); ++iS) status_.insert(std::pair(scIds[iS].rawId(), statusVal)); } diff --git a/DQM/EcalMonitorClient/plugins/EcalDQMonitorClient.cc b/DQM/EcalMonitorClient/plugins/EcalDQMonitorClient.cc index 81f4dabfcc5d1..419120d9daa56 100644 --- a/DQM/EcalMonitorClient/plugins/EcalDQMonitorClient.cc +++ b/DQM/EcalMonitorClient/plugins/EcalDQMonitorClient.cc @@ -35,11 +35,13 @@ EcalDQMonitorClient::EcalDQMonitorClient(edm::ParameterSet const& _ps) }, "initialization"); - if (_ps.existsAs("PNMaskFile", false)) { - std::ifstream maskFile(_ps.getUntrackedParameter("PNMaskFile").fullPath()); - if (maskFile.is_open()) - statusManager_.readFromStream(maskFile); - } + // This is no longer used since run 2 + // + //if (_ps.existsAs("PNMaskFile", false)) { + // std::ifstream maskFile(_ps.getUntrackedParameter("PNMaskFile").fullPath()); + // if (maskFile.is_open()) + // statusManager_.readFromStream(maskFile); + //} } EcalDQMonitorClient::~EcalDQMonitorClient() {} @@ -62,7 +64,9 @@ void EcalDQMonitorClient::fillDescriptions(edm::ConfigurationDescriptions& _desc } void EcalDQMonitorClient::beginRun(edm::Run const& _run, edm::EventSetup const& _es) { - ecaldqmGetSetupObjects(_es); + executeOnWorkers_([&_es](ecaldqm::DQWorker* worker) { worker->setSetupObjects(_es); }, + "ecaldqmGetSetupObjects", + "Getting EventSetup Objects"); if (_es.find(edm::eventsetup::EventSetupRecordKey::makeKey()) && _es.find(edm::eventsetup::EventSetupRecordKey::makeKey())) { diff --git a/DQM/EcalMonitorClient/src/CalibrationSummaryClient.cc b/DQM/EcalMonitorClient/src/CalibrationSummaryClient.cc index 259e1cdff531f..8df563dbd5130 100644 --- a/DQM/EcalMonitorClient/src/CalibrationSummaryClient.cc +++ b/DQM/EcalMonitorClient/src/CalibrationSummaryClient.cc @@ -144,8 +144,9 @@ namespace ecaldqm { : nullptr); MESet const& sPNIntegrity(sources_.at("PNIntegrity")); - MESet::iterator qEnd(meQualitySummary.end()); - for (MESet::iterator qItr(meQualitySummary.beginChannel()); qItr != qEnd; qItr.toNextChannel()) { + MESet::iterator qEnd(meQualitySummary.end(GetElectronicsMap())); + for (MESet::iterator qItr(meQualitySummary.beginChannel(GetElectronicsMap())); qItr != qEnd; + qItr.toNextChannel(GetElectronicsMap())) { DetId id(qItr->getId()); int status(kGood); @@ -153,7 +154,7 @@ namespace ecaldqm { if (status == kGood && sLaser) { for (map::iterator wlItr(laserWlToME_.begin()); wlItr != laserWlToME_.end(); ++wlItr) { sLaser->use(wlItr->second); - if (sLaser->getBinContent(id) == kBad) { + if (sLaser->getBinContent(getEcalDQMSetupObjects(), id) == kBad) { status = kBad; break; } @@ -165,7 +166,7 @@ namespace ecaldqm { if (id.subdetId() == EcalEndcap) { for (map::iterator wlItr(ledWlToME_.begin()); wlItr != ledWlToME_.end(); ++wlItr) { sLed->use(wlItr->second); - if (sLed->getBinContent(id) == kBad) { + if (sLed->getBinContent(getEcalDQMSetupObjects(), id) == kBad) { status = kBad; break; } @@ -176,7 +177,7 @@ namespace ecaldqm { if (status == kGood && sTestPulse) { for (map::iterator gainItr(tpGainToME_.begin()); gainItr != tpGainToME_.end(); ++gainItr) { sTestPulse->use(gainItr->second); - if (sTestPulse->getBinContent(id) == kBad) { + if (sTestPulse->getBinContent(getEcalDQMSetupObjects(), id) == kBad) { status = kBad; break; } @@ -186,7 +187,7 @@ namespace ecaldqm { if (status == kGood && sPedestal) { for (map::iterator gainItr(pedGainToME_.begin()); gainItr != pedGainToME_.end(); ++gainItr) { sPedestal->use(gainItr->second); - if (sPedestal->getBinContent(id) == kBad) { + if (sPedestal->getBinContent(getEcalDQMSetupObjects(), id) == kBad) { status = kBad; break; } @@ -210,13 +211,13 @@ namespace ecaldqm { int status(kGood); - if (sPNIntegrity.getBinContent(id) == kBad) + if (sPNIntegrity.getBinContent(getEcalDQMSetupObjects(), id) == kBad) status = kBad; if (status == kGood && sLaserPN) { for (map::iterator wlItr(laserWlToME_.begin()); wlItr != laserWlToME_.end(); ++wlItr) { sLaserPN->use(wlItr->second); - if (sLaserPN->getBinContent(id) == kBad) { + if (sLaserPN->getBinContent(getEcalDQMSetupObjects(), id) == kBad) { status = kBad; break; } @@ -226,7 +227,7 @@ namespace ecaldqm { if (status == kGood && sLedPN) { for (map::iterator wlItr(ledWlToME_.begin()); wlItr != ledWlToME_.end(); ++wlItr) { sLedPN->use(wlItr->second); - if (sLedPN->getBinContent(id) == kBad) { + if (sLedPN->getBinContent(getEcalDQMSetupObjects(), id) == kBad) { status = kBad; break; } @@ -236,7 +237,7 @@ namespace ecaldqm { if (status == kGood && sTestPulsePN) { for (map::iterator gainItr(tpPNGainToME_.begin()); gainItr != tpPNGainToME_.end(); ++gainItr) { sTestPulsePN->use(gainItr->second); - if (sTestPulsePN->getBinContent(id) == kBad) { + if (sTestPulsePN->getBinContent(getEcalDQMSetupObjects(), id) == kBad) { status = kBad; break; } @@ -247,14 +248,14 @@ namespace ecaldqm { for (map::iterator gainItr(pedPNGainToME_.begin()); gainItr != pedPNGainToME_.end(); ++gainItr) { sPedestalPN->use(gainItr->second); - if (sPedestalPN->getBinContent(id) == kBad) { + if (sPedestalPN->getBinContent(getEcalDQMSetupObjects(), id) == kBad) { status = kBad; break; } } } - mePNQualitySummary.setBinContent(id, status); + mePNQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, status); } } } diff --git a/DQM/EcalMonitorClient/src/CertificationClient.cc b/DQM/EcalMonitorClient/src/CertificationClient.cc index 5b549ff548d0d..104b82b00132b 100644 --- a/DQM/EcalMonitorClient/src/CertificationClient.cc +++ b/DQM/EcalMonitorClient/src/CertificationClient.cc @@ -21,15 +21,17 @@ namespace ecaldqm { double meanValue(0.); for (int iDCC(0); iDCC < nDCC; ++iDCC) { - double certValue(sDAQ.getBinContent(iDCC + 1) * sDCS.getBinContent(iDCC + 1) * sDQM.getBinContent(iDCC + 1)); + double certValue(sDAQ.getBinContent(getEcalDQMSetupObjects(), iDCC + 1) * + sDCS.getBinContent(getEcalDQMSetupObjects(), iDCC + 1) * + sDQM.getBinContent(getEcalDQMSetupObjects(), iDCC + 1)); - meCertificationContents.fill(iDCC + 1, certValue); - meCertificationMap.setBinContent(iDCC + 1, certValue); + meCertificationContents.fill(getEcalDQMSetupObjects(), iDCC + 1, certValue); + meCertificationMap.setBinContent(getEcalDQMSetupObjects(), iDCC + 1, certValue); meanValue += certValue * nCrystals(iDCC + 1); } - meCertification.fill(meanValue / nChannels); + meCertification.fill(getEcalDQMSetupObjects(), meanValue / nChannels); } DEFINE_ECALDQM_WORKER(CertificationClient); diff --git a/DQM/EcalMonitorClient/src/DQWorkerClient.cc b/DQM/EcalMonitorClient/src/DQWorkerClient.cc index d517cbc891cbb..5584cd4c489f4 100644 --- a/DQM/EcalMonitorClient/src/DQWorkerClient.cc +++ b/DQM/EcalMonitorClient/src/DQWorkerClient.cc @@ -100,7 +100,7 @@ namespace ecaldqm { continue; if (verbosity_ > 1) edm::LogInfo("EcalDQM") << name_ << ": Retrieving source " << sItr->first; - if (!sItr->second->retrieve(_igetter, &failedPath)) { + if (!sItr->second->retrieve(GetElectronicsMap(), _igetter, &failedPath)) { if (verbosity_ > 1) edm::LogWarning("EcalDQM") << name_ << ": Could not find source " << sItr->first << "@" << failedPath; return false; @@ -126,19 +126,19 @@ namespace ecaldqm { multi->use(iS); if (multi->getKind() == MonitorElement::Kind::TH2F) { multi->resetAll(-1.); - multi->reset(kUnknown); + multi->reset(GetElectronicsMap(), kUnknown); } else - multi->reset(-1.); + multi->reset(GetElectronicsMap(), -1.); } } else { if (meset->getKind() == MonitorElement::Kind::TH2F) { meset->resetAll(-1.); - meset->reset(kUnknown); + meset->reset(GetElectronicsMap(), kUnknown); } else - meset->reset(-1.); + meset->reset(GetElectronicsMap(), -1.); } } else - meset->reset(); + meset->reset(GetElectronicsMap()); } } @@ -159,13 +159,14 @@ namespace ecaldqm { void DQWorkerClient::towerAverage_(MESet& _target, MESet const& _source, float _threshold) { bool isQuality(_threshold > 0.); - MESet::iterator tEnd(_target.end()); - for (MESet::iterator tItr(_target.beginChannel()); tItr != tEnd; tItr.toNextChannel()) { + MESet::iterator tEnd(_target.end(GetElectronicsMap())); + for (MESet::iterator tItr(_target.beginChannel(GetElectronicsMap())); tItr != tEnd; + tItr.toNextChannel(GetElectronicsMap())) { DetId towerId(tItr->getId()); std::vector cryIds; if (towerId.subdetId() == EcalTriggerTower) - cryIds = getTrigTowerMap()->constituentsOf(EcalTrigTowerDetId(towerId)); + cryIds = GetTrigTowerMap()->constituentsOf(EcalTrigTowerDetId(towerId)); else { cryIds = scConstituents(EcalScDetId(towerId)); } @@ -177,7 +178,7 @@ namespace ecaldqm { float nValid(0.); bool masked(false); for (unsigned iId(0); iId < cryIds.size(); ++iId) { - float content(_source.getBinContent(cryIds[iId])); + float content(_source.getBinContent(getEcalDQMSetupObjects(), cryIds[iId])); if (isQuality) { if (content < 0. || content == 2.) continue; diff --git a/DQM/EcalMonitorClient/src/IntegrityClient.cc b/DQM/EcalMonitorClient/src/IntegrityClient.cc index 90af212519a03..9972d0a57c0b3 100644 --- a/DQM/EcalMonitorClient/src/IntegrityClient.cc +++ b/DQM/EcalMonitorClient/src/IntegrityClient.cc @@ -44,8 +44,9 @@ namespace ecaldqm { // Fill Channel Status Map MEs // Record is checked for updates at every endLumi and filled here - MESet::iterator chSEnd(meChStatus.end()); - for (MESet::iterator chSItr(meChStatus.beginChannel()); chSItr != chSEnd; chSItr.toNextChannel()) { + MESet::iterator chSEnd(meChStatus.end(GetElectronicsMap())); + for (MESet::iterator chSItr(meChStatus.beginChannel(GetElectronicsMap())); chSItr != chSEnd; + chSItr.toNextChannel(GetElectronicsMap())) { DetId id(chSItr->getId()); EcalChannelStatusMap::const_iterator chIt(nullptr); @@ -67,27 +68,28 @@ namespace ecaldqm { } // Channel Status Map - MESet::iterator qEnd(meQuality.end()); - MESet::const_iterator occItr(sOccupancy); - for (MESet::iterator qItr(meQuality.beginChannel()); qItr != qEnd; qItr.toNextChannel()) { + MESet::iterator qEnd(meQuality.end(GetElectronicsMap())); + MESet::const_iterator occItr(GetElectronicsMap(), sOccupancy); + for (MESet::iterator qItr(meQuality.beginChannel(GetElectronicsMap())); qItr != qEnd; + qItr.toNextChannel(GetElectronicsMap())) { occItr = qItr; DetId id(qItr->getId()); - bool doMask(meQuality.maskMatches(id, mask, statusManager_)); + bool doMask(meQuality.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); float entries(occItr->getBinContent()); - float gain(sGain.getBinContent(id)); - float chid(sChId.getBinContent(id)); - float gainswitch(sGainSwitch.getBinContent(id)); + float gain(sGain.getBinContent(getEcalDQMSetupObjects(), id)); + float chid(sChId.getBinContent(getEcalDQMSetupObjects(), id)); + float gainswitch(sGainSwitch.getBinContent(getEcalDQMSetupObjects(), id)); - float towerid(sTowerId.getBinContent(id)); - float blocksize(sBlockSize.getBinContent(id)); + float towerid(sTowerId.getBinContent(getEcalDQMSetupObjects(), id)); + float blocksize(sBlockSize.getBinContent(getEcalDQMSetupObjects(), id)); if (entries + gain + chid + gainswitch + towerid + blocksize < 1.) { qItr->setBinContent(doMask ? kMUnknown : kUnknown); - meQualitySummary.setBinContent(id, doMask ? kMUnknown : kUnknown); + meQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMUnknown : kUnknown); continue; } @@ -96,10 +98,10 @@ namespace ecaldqm { if (chErr > errFractionThreshold_) { qItr->setBinContent(doMask ? kMBad : kBad); - meQualitySummary.setBinContent(id, doMask ? kMBad : kBad); + meQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMBad : kBad); } else { qItr->setBinContent(doMask ? kMGood : kGood); - meQualitySummary.setBinContent(id, doMask ? kMGood : kGood); + meQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMGood : kGood); } } @@ -109,16 +111,21 @@ namespace ecaldqm { MESet const& sBXTCC(sources_.at("BXTCC")); std::vector hasMismatchDCC(nDCC, false); for (unsigned iDCC(0); iDCC < nDCC; ++iDCC) { - if (sBXSRP.getBinContent(iDCC + 1) > 50. || sBXTCC.getBinContent(iDCC + 1) > 50.) // "any" => 50 + if (sBXSRP.getBinContent(getEcalDQMSetupObjects(), iDCC + 1) > 50. || + sBXTCC.getBinContent(getEcalDQMSetupObjects(), iDCC + 1) > 50.) // "any" => 50 hasMismatchDCC[iDCC] = true; } // Analyze mismatch statistics - for (MESet::iterator qsItr(meQualitySummary.beginChannel()); qsItr != meQualitySummary.end(); - qsItr.toNextChannel()) { + for (MESet::iterator qsItr(meQualitySummary.beginChannel(GetElectronicsMap())); + qsItr != meQualitySummary.end(GetElectronicsMap()); + qsItr.toNextChannel(GetElectronicsMap())) { DetId id(qsItr->getId()); - unsigned iDCC(dccId(id) - 1); + unsigned iDCC(dccId(id, GetElectronicsMap()) - 1); if (hasMismatchDCC[iDCC]) - meQualitySummary.setBinContent(id, meQualitySummary.maskMatches(id, mask, statusManager_) ? kMBad : kBad); + meQualitySummary.setBinContent( + getEcalDQMSetupObjects(), + id, + meQualitySummary.maskMatches(id, mask, statusManager_, GetTrigTowerMap()) ? kMBad : kBad); } } // producePlots() diff --git a/DQM/EcalMonitorClient/src/LaserClient.cc b/DQM/EcalMonitorClient/src/LaserClient.cc index 18f35c80f68e3..1fdb69ebfbd2b 100644 --- a/DQM/EcalMonitorClient/src/LaserClient.cc +++ b/DQM/EcalMonitorClient/src/LaserClient.cc @@ -111,17 +111,18 @@ namespace ecaldqm { sTiming.use(wlItr->second); sPNAmplitude.use(wlItr->second); - MESet::iterator qEnd(meQuality.end()); + MESet::iterator qEnd(meQuality.end(GetElectronicsMap())); - MESet::const_iterator tItr(sTiming); - MESet::const_iterator aItr(sAmplitude); + MESet::const_iterator tItr(GetElectronicsMap(), sTiming); + MESet::const_iterator aItr(GetElectronicsMap(), sAmplitude); int wl(wlItr->first - 1); - bool enabled(wl < 0 ? false : sCalibStatus.getBinContent(wl) > 0 ? true : false); - for (MESet::iterator qItr(meQuality.beginChannel()); qItr != qEnd; qItr.toNextChannel()) { + bool enabled(wl < 0 ? false : sCalibStatus.getBinContent(getEcalDQMSetupObjects(), wl) > 0 ? true : false); + for (MESet::iterator qItr(meQuality.beginChannel(GetElectronicsMap())); qItr != qEnd; + qItr.toNextChannel(GetElectronicsMap())) { DetId id(qItr->getId()); - bool doMask(meQuality.maskMatches(id, mask, statusManager_)); + bool doMask(meQuality.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); aItr = qItr; @@ -135,8 +136,8 @@ namespace ecaldqm { float aMean(aItr->getBinContent()); float aRms(aItr->getBinError() * sqrt(aEntries)); - meAmplitudeMean.fill(id, aMean); - meAmplitudeRMS.setBinContent(id, aRms); + meAmplitudeMean.fill(getEcalDQMSetupObjects(), id, aMean); + meAmplitudeRMS.setBinContent(getEcalDQMSetupObjects(), id, aRms); tItr = qItr; @@ -148,9 +149,9 @@ namespace ecaldqm { float tMean(tItr->getBinContent()); float tRms(tItr->getBinError() * sqrt(tEntries)); - meTimingMean.fill(id, tMean); - meTimingRMS.fill(id, tRms); - meTimingRMSMap.setBinContent(id, tRms); + meTimingMean.fill(getEcalDQMSetupObjects(), id, tMean); + meTimingRMS.fill(getEcalDQMSetupObjects(), id, tRms); + meTimingRMSMap.setBinContent(getEcalDQMSetupObjects(), id, tRms); float intensity(aMean / expectedAmplitude_[wlItr->second]); if (isForward(id)) @@ -178,23 +179,23 @@ namespace ecaldqm { for (unsigned iPN(0); iPN < 10; ++iPN) { EcalPnDiodeDetId id(subdet, iDCC + 1, iPN + 1); - bool doMask(mePNQualitySummary.maskMatches(id, mask, statusManager_)); + bool doMask(mePNQualitySummary.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); - float pEntries(sPNAmplitude.getBinEntries(id)); + float pEntries(sPNAmplitude.getBinEntries(getEcalDQMSetupObjects(), id)); if (pEntries < minChannelEntries_) { - mePNQualitySummary.setBinContent(id, doMask ? kMUnknown : kUnknown); + mePNQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMUnknown : kUnknown); continue; } - float pMean(sPNAmplitude.getBinContent(id)); - float pRms(sPNAmplitude.getBinError(id) * sqrt(pEntries)); + float pMean(sPNAmplitude.getBinContent(getEcalDQMSetupObjects(), id)); + float pRms(sPNAmplitude.getBinError(getEcalDQMSetupObjects(), id) * sqrt(pEntries)); float intensity(pMean / expectedPNAmplitude_[wlItr->second]); if (intensity < tolerancePNAmp_ || pRms > pMean * tolerancePNRMSRatio_) - mePNQualitySummary.setBinContent(id, doMask ? kMBad : kBad); + mePNQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMBad : kBad); else - mePNQualitySummary.setBinContent(id, doMask ? kMGood : kGood); + mePNQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMGood : kGood); } } } diff --git a/DQM/EcalMonitorClient/src/LedClient.cc b/DQM/EcalMonitorClient/src/LedClient.cc index cbf1036548e47..b70422d96d394 100644 --- a/DQM/EcalMonitorClient/src/LedClient.cc +++ b/DQM/EcalMonitorClient/src/LedClient.cc @@ -107,17 +107,18 @@ namespace ecaldqm { sTiming.use(wlItr->second); sPNAmplitude.use(wlItr->second); - MESet::iterator qEnd(meQuality.end()); + MESet::iterator qEnd(meQuality.end(GetElectronicsMap())); - MESet::const_iterator tItr(sTiming); - MESet::const_iterator aItr(sAmplitude); + MESet::const_iterator tItr(GetElectronicsMap(), sTiming); + MESet::const_iterator aItr(GetElectronicsMap(), sAmplitude); int wl(wlItr->first + 3); - bool enabled(wl < 0 ? false : sCalibStatus.getBinContent(wl) > 0 ? true : false); - for (MESet::iterator qItr(meQuality.beginChannel()); qItr != qEnd; qItr.toNextChannel()) { + bool enabled(wl < 0 ? false : sCalibStatus.getBinContent(getEcalDQMSetupObjects(), wl) > 0 ? true : false); + for (MESet::iterator qItr(meQuality.beginChannel(GetElectronicsMap())); qItr != qEnd; + qItr.toNextChannel(GetElectronicsMap())) { DetId id(qItr->getId()); - bool doMask(meQuality.maskMatches(id, mask, statusManager_)); + bool doMask(meQuality.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); aItr = qItr; @@ -131,8 +132,8 @@ namespace ecaldqm { float aMean(aItr->getBinContent()); float aRms(aItr->getBinError() * sqrt(aEntries)); - meAmplitudeMean.fill(id, aMean); - meAmplitudeRMS.setBinContent(id, aRms); + meAmplitudeMean.fill(getEcalDQMSetupObjects(), id, aMean); + meAmplitudeRMS.setBinContent(getEcalDQMSetupObjects(), id, aRms); tItr = qItr; @@ -144,8 +145,8 @@ namespace ecaldqm { float tMean(tItr->getBinContent()); float tRms(tItr->getBinError() * sqrt(tEntries)); - meTimingMean.fill(id, tMean); - meTimingRMSMap.setBinContent(id, tRms); + meTimingMean.fill(getEcalDQMSetupObjects(), id, tMean); + meTimingRMSMap.setBinContent(getEcalDQMSetupObjects(), id, tRms); float intensity(aMean / expectedAmplitude_[wlItr->second]); if (isForward(id)) @@ -170,23 +171,23 @@ namespace ecaldqm { for (unsigned iPN(0); iPN < 10; ++iPN) { EcalPnDiodeDetId id(EcalEndcap, iDCC + 1, iPN + 1); - bool doMask(mePNQualitySummary.maskMatches(id, mask, statusManager_)); + bool doMask(mePNQualitySummary.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); - float pEntries(sPNAmplitude.getBinEntries(id)); + float pEntries(sPNAmplitude.getBinEntries(getEcalDQMSetupObjects(), id)); if (pEntries < minChannelEntries_) { - mePNQualitySummary.setBinContent(id, doMask ? kMUnknown : kUnknown); + mePNQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMUnknown : kUnknown); continue; } - float pMean(sPNAmplitude.getBinContent(id)); - float pRms(sPNAmplitude.getBinError(id) * sqrt(pEntries)); + float pMean(sPNAmplitude.getBinContent(getEcalDQMSetupObjects(), id)); + float pRms(sPNAmplitude.getBinError(getEcalDQMSetupObjects(), id) * sqrt(pEntries)); float intensity(pMean / expectedPNAmplitude_[wlItr->second]); if (intensity < tolerancePNAmp_ || pRms > pMean * tolerancePNRMSRatio_) - mePNQualitySummary.setBinContent(id, doMask ? kMBad : kBad); + mePNQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMBad : kBad); else - mePNQualitySummary.setBinContent(id, doMask ? kMGood : kGood); + mePNQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMGood : kGood); } } } diff --git a/DQM/EcalMonitorClient/src/OccupancyClient.cc b/DQM/EcalMonitorClient/src/OccupancyClient.cc index 97fe019ee55b5..bdab3a6b72012 100644 --- a/DQM/EcalMonitorClient/src/OccupancyClient.cc +++ b/DQM/EcalMonitorClient/src/OccupancyClient.cc @@ -46,9 +46,10 @@ namespace ecaldqm { int numCrystals[nPhiRings]; // this is static, but is easier to count now std::fill_n(numCrystals, nPhiRings, 0); - MESet::const_iterator dEnd(sDigi.end()); - MESet::const_iterator rItr(sRecHitThr); - for (MESet::const_iterator dItr(sDigi.beginChannel()); dItr != dEnd; dItr.toNextChannel()) { + MESet::const_iterator dEnd(sDigi.end(GetElectronicsMap())); + MESet::const_iterator rItr(GetElectronicsMap(), sRecHitThr); + for (MESet::const_iterator dItr(sDigi.beginChannel(GetElectronicsMap())); dItr != dEnd; + dItr.toNextChannel(GetElectronicsMap())) { rItr = dItr; float entries(dItr->getBinContent()); @@ -62,7 +63,7 @@ namespace ecaldqm { std::vector ids(scConstituents(EcalScDetId(id))); if (ids.empty()) continue; - ieta = getTrigTowerMap()->towerOf(ids[0]).ieta(); + ieta = GetTrigTowerMap()->towerOf(ids[0]).ieta(); } unsigned index(ieta < 0 ? ieta + 28 : ieta + 27); @@ -82,10 +83,11 @@ namespace ecaldqm { std::vector Nrhentries(nDCC, 0.); // (filtered) rechits // second round to find hot towers - for (MESet::const_iterator dItr(sDigi.beginChannel()); dItr != dEnd; dItr.toNextChannel()) { + for (MESet::const_iterator dItr(sDigi.beginChannel(GetElectronicsMap())); dItr != dEnd; + dItr.toNextChannel(GetElectronicsMap())) { DetId id(dItr->getId()); - bool doMask(meQualitySummary.maskMatches(id, mask, statusManager_)); + bool doMask(meQualitySummary.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); rItr = dItr; @@ -99,7 +101,7 @@ namespace ecaldqm { std::vector ids(scConstituents(EcalScDetId(id))); if (ids.empty()) continue; - ieta = getTrigTowerMap()->towerOf(ids[0]).ieta(); + ieta = GetTrigTowerMap()->towerOf(ids[0]).ieta(); } unsigned index(ieta < 0 ? ieta + 28 : ieta + 27); @@ -115,10 +117,10 @@ namespace ecaldqm { quality = doMask ? kMBad : kBad; } - meQualitySummary.setBinContent(id, double(quality)); + meQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, double(quality)); // Keep count of digis & rechits for Occupancy analysis - unsigned iDCC(dccId(id) - 1); + unsigned iDCC(dccId(id, GetElectronicsMap()) - 1); if (entries > minHits_) Nentries[iDCC] += entries; if (rhentries > minHits_) @@ -130,7 +132,7 @@ namespace ecaldqm { for (unsigned iTT(0); iTT < EcalTrigTowerDetId::kSizeForDenseIndexing; ++iTT) { EcalTrigTowerDetId ttid(EcalTrigTowerDetId::detIdFromDenseIndex(iTT)); - float entries(sTPDigiThr.getBinContent(ttid)); + float entries(sTPDigiThr.getBinContent(getEcalDQMSetupObjects(), ttid)); unsigned index(ttid.ieta() < 0 ? ttid.ieta() + 28 : ttid.ieta() + 27); @@ -150,7 +152,7 @@ namespace ecaldqm { for (unsigned iTT(0); iTT < EcalTrigTowerDetId::kSizeForDenseIndexing; ++iTT) { EcalTrigTowerDetId ttid(EcalTrigTowerDetId::detIdFromDenseIndex(iTT)); - float entries(sTPDigiThr.getBinContent(ttid)); + float entries(sTPDigiThr.getBinContent(getEcalDQMSetupObjects(), ttid)); unsigned index(ttid.ieta() < 0 ? ttid.ieta() + 28 : ttid.ieta() + 27); @@ -164,15 +166,18 @@ namespace ecaldqm { if (quality != kBad) continue; - std::vector ids(getTrigTowerMap()->constituentsOf(ttid)); + std::vector ids(GetTrigTowerMap()->constituentsOf(ttid)); for (unsigned iD(0); iD < ids.size(); ++iD) { DetId& id(ids[iD]); - int quality(meQualitySummary.getBinContent(id)); + int quality(meQualitySummary.getBinContent(getEcalDQMSetupObjects(), id)); if (quality == kMBad || quality == kBad) continue; - meQualitySummary.setBinContent(id, meQualitySummary.maskMatches(id, mask, statusManager_) ? kMBad : kBad); + meQualitySummary.setBinContent( + getEcalDQMSetupObjects(), + id, + meQualitySummary.maskMatches(id, mask, statusManager_, GetTrigTowerMap()) ? kMBad : kBad); } } @@ -199,10 +204,11 @@ namespace ecaldqm { rmsFEDEE = sqrt(abs(rmsFEDEE - meanFEDEE * meanFEDEE)); // Analyze FED statistics float meanFED(0.), rmsFED(0.), nRMS(5.); - for (MESet::iterator qsItr(meQualitySummary.beginChannel()); qsItr != meQualitySummary.end(); - qsItr.toNextChannel()) { + for (MESet::iterator qsItr(meQualitySummary.beginChannel(GetElectronicsMap())); + qsItr != meQualitySummary.end(GetElectronicsMap()); + qsItr.toNextChannel(GetElectronicsMap())) { DetId id(qsItr->getId()); - unsigned iDCC(dccId(id) - 1); + unsigned iDCC(dccId(id, GetElectronicsMap()) - 1); if (iDCC >= kEBmLow && iDCC <= kEBpHigh) { meanFED = meanFEDEB; rmsFED = rmsFEDEB; @@ -212,7 +218,10 @@ namespace ecaldqm { } float threshold(meanFED < nRMS * rmsFED ? minHits_ : meanFED - nRMS * rmsFED); if (meanFED > 1000. && Nrhentries[iDCC] < threshold) - meQualitySummary.setBinContent(id, meQualitySummary.maskMatches(id, mask, statusManager_) ? kMBad : kBad); + meQualitySummary.setBinContent( + getEcalDQMSetupObjects(), + id, + meQualitySummary.maskMatches(id, mask, statusManager_, GetTrigTowerMap()) ? kMBad : kBad); } } // producePlots() diff --git a/DQM/EcalMonitorClient/src/PNIntegrityClient.cc b/DQM/EcalMonitorClient/src/PNIntegrityClient.cc index 2744f1fddcdd8..74f17864812dc 100644 --- a/DQM/EcalMonitorClient/src/PNIntegrityClient.cc +++ b/DQM/EcalMonitorClient/src/PNIntegrityClient.cc @@ -41,27 +41,27 @@ namespace ecaldqm { EcalPnDiodeDetId id(subdet, iDCC + 1, iPN + 1); - bool doMask(meQualitySummary.maskMatches(id, mask, statusManager_)); + bool doMask(meQualitySummary.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); - float entries(sOccupancy.getBinContent(id)); + float entries(sOccupancy.getBinContent(getEcalDQMSetupObjects(), id)); - float chid(sMEMChId.getBinContent(id)); - float gain(sMEMGain.getBinContent(id)); + float chid(sMEMChId.getBinContent(getEcalDQMSetupObjects(), id)); + float gain(sMEMGain.getBinContent(getEcalDQMSetupObjects(), id)); - float blocksize(sMEMBlockSize.getBinContent(id)); - float towerid(sMEMTowerId.getBinContent(id)); + float blocksize(sMEMBlockSize.getBinContent(getEcalDQMSetupObjects(), id)); + float towerid(sMEMTowerId.getBinContent(getEcalDQMSetupObjects(), id)); if (entries + gain + chid + blocksize + towerid < 1.) { - meQualitySummary.setBinContent(id, doMask ? kMUnknown : kUnknown); + meQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMUnknown : kUnknown); continue; } float chErr((gain + chid + blocksize + towerid) / (entries + gain + chid + blocksize + towerid)); if (chErr > errFractionThreshold_) - meQualitySummary.setBinContent(id, doMask ? kMBad : kBad); + meQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMBad : kBad); else - meQualitySummary.setBinContent(id, doMask ? kMGood : kGood); + meQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMGood : kGood); } } } diff --git a/DQM/EcalMonitorClient/src/PedestalClient.cc b/DQM/EcalMonitorClient/src/PedestalClient.cc index f900b1798a444..780585aa75555 100644 --- a/DQM/EcalMonitorClient/src/PedestalClient.cc +++ b/DQM/EcalMonitorClient/src/PedestalClient.cc @@ -147,12 +147,13 @@ namespace ecaldqm { break; } - MESet::iterator qEnd(meQuality.end()); - MESet::const_iterator pItr(sPedestal); - for (MESet::iterator qItr(meQuality.beginChannel()); qItr != qEnd; qItr.toNextChannel()) { + MESet::iterator qEnd(meQuality.end(GetElectronicsMap())); + MESet::const_iterator pItr(GetElectronicsMap(), sPedestal); + for (MESet::iterator qItr(meQuality.beginChannel(GetElectronicsMap())); qItr != qEnd; + qItr.toNextChannel(GetElectronicsMap())) { DetId id(qItr->getId()); - bool doMask(meQuality.maskMatches(id, mask, statusManager_)); + bool doMask(meQuality.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); pItr = qItr; @@ -166,8 +167,8 @@ namespace ecaldqm { float mean(pItr->getBinContent()); float rms(pItr->getBinError() * sqrt(entries)); - meMean.fill(id, mean); - meRMS.fill(id, rms); + meMean.fill(getEcalDQMSetupObjects(), id, mean); + meRMS.fill(getEcalDQMSetupObjects(), id, rms); float toleranceRMS_ = (id.subdetId() == EcalBarrel) ? toleranceRMSEB_[gainItr->second] : toleranceRMSEE_[gainItr->second]; @@ -214,24 +215,24 @@ namespace ecaldqm { EcalPnDiodeDetId id(subdet, iDCC + 1, iPN + 1); - bool doMask(mePNQualitySummary.maskMatches(id, mask, statusManager_)); + bool doMask(mePNQualitySummary.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); - float entries(sPNPedestal.getBinEntries(id)); + float entries(sPNPedestal.getBinEntries(getEcalDQMSetupObjects(), id)); if (entries < minChannelEntries_) { - mePNQualitySummary.setBinContent(id, doMask ? kMUnknown : kUnknown); + mePNQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMUnknown : kUnknown); continue; } - float mean(sPNPedestal.getBinContent(id)); - float rms(sPNPedestal.getBinError(id) * sqrt(entries)); + float mean(sPNPedestal.getBinContent(getEcalDQMSetupObjects(), id)); + float rms(sPNPedestal.getBinError(getEcalDQMSetupObjects(), id) * sqrt(entries)); - mePNRMS.fill(id, rms); + mePNRMS.fill(getEcalDQMSetupObjects(), id, rms); if (abs(mean - expectedPNMean_) > tolerancePNMean_ || rms > tolerancePNRMS_[gainItr->second]) - mePNQualitySummary.setBinContent(id, doMask ? kMBad : kBad); + mePNQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMBad : kBad); else - mePNQualitySummary.setBinContent(id, doMask ? kMGood : kGood); + mePNQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMGood : kGood); } } } diff --git a/DQM/EcalMonitorClient/src/PresampleClient.cc b/DQM/EcalMonitorClient/src/PresampleClient.cc index 28250146e6887..1ca59c7baf506 100644 --- a/DQM/EcalMonitorClient/src/PresampleClient.cc +++ b/DQM/EcalMonitorClient/src/PresampleClient.cc @@ -48,19 +48,20 @@ namespace ecaldqm { uint32_t mask(1 << EcalDQMStatusHelper::PEDESTAL_ONLINE_HIGH_GAIN_MEAN_ERROR | 1 << EcalDQMStatusHelper::PEDESTAL_ONLINE_HIGH_GAIN_RMS_ERROR); - MESet::iterator qEnd(meQuality.end()); + MESet::iterator qEnd(meQuality.end(GetElectronicsMap())); - MESet::const_iterator pItr(sPedestal); - MESet::const_iterator pLSItr(sPedestalByLS); + MESet::const_iterator pItr(GetElectronicsMap(), sPedestal); + MESet::const_iterator pLSItr(GetElectronicsMap(), sPedestalByLS); double maxEB(0.), minEB(0.), maxEE(0.), minEE(0.); double rmsMaxEB(0.), rmsMaxEE(0.); - for (MESet::iterator qItr(meQuality.beginChannel()); qItr != qEnd; qItr.toNextChannel()) { + for (MESet::iterator qItr(meQuality.beginChannel(GetElectronicsMap())); qItr != qEnd; + qItr.toNextChannel(GetElectronicsMap())) { pItr = qItr; pLSItr = qItr; DetId id(qItr->getId()); - bool doMask(meQuality.maskMatches(id, mask, statusManager_)); + bool doMask(meQuality.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); double rmsThresh(toleranceRMS_); @@ -72,8 +73,8 @@ namespace ecaldqm { if (entries < minChannelEntries_) { qItr->setBinContent(doMask ? kMUnknown : kUnknown); - meQualitySummary.setBinContent(id, doMask ? kMUnknown : kUnknown); - meRMSMap.setBinContent(id, -1.); + meQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMUnknown : kUnknown); + meRMSMap.setBinContent(getEcalDQMSetupObjects(), id, -1.); continue; } @@ -82,26 +83,26 @@ namespace ecaldqm { double rms(pItr->getBinError() * std::sqrt(entries)); double rmsLS(pLSItr->getBinError() * std::sqrt(entriesLS)); - int dccid(dccId(id)); + int dccid(dccId(id, GetElectronicsMap())); - meMean.fill(dccid, mean); - meRMS.fill(dccid, rms); - meRMSMap.setBinContent(id, rms); - meRMSMapAllByLumi.setBinContent(id, rmsLS); + meMean.fill(getEcalDQMSetupObjects(), dccid, mean); + meRMS.fill(getEcalDQMSetupObjects(), dccid, rms); + meRMSMap.setBinContent(getEcalDQMSetupObjects(), id, rms); + meRMSMapAllByLumi.setBinContent(getEcalDQMSetupObjects(), id, rmsLS); if (((mean > expectedMean_ + toleranceHigh_) || (mean < expectedMean_ - toleranceLow_)) || rms > rmsThresh) { qItr->setBinContent(doMask ? kMBad : kBad); - meQualitySummary.setBinContent(id, doMask ? kMBad : kBad); + meQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMBad : kBad); if (!doMask) - meErrorsSummary.fill(id); + meErrorsSummary.fill(getEcalDQMSetupObjects(), id); } else { qItr->setBinContent(doMask ? kMGood : kGood); - meQualitySummary.setBinContent(id, doMask ? kMGood : kGood); + meQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMGood : kGood); } // Fill Presample Trend plots: // Use PedestalByLS which only contains digis from "current" LS - float chStatus(sChStatus.getBinContent(id)); + float chStatus(sChStatus.getBinContent(getEcalDQMSetupObjects(), id)); if (entriesLS < minChannelEntries_) continue; if (chStatus != EcalChannelStatusCode::kOk) @@ -131,10 +132,10 @@ namespace ecaldqm { MESet& meTrendMean(MEs_.at("TrendMean")); MESet& meTrendRMS(MEs_.at("TrendRMS")); - meTrendMean.fill(EcalBarrel, double(timestamp_.iLumi), maxEB - minEB); - meTrendMean.fill(EcalEndcap, double(timestamp_.iLumi), maxEE - minEE); - meTrendRMS.fill(EcalBarrel, double(timestamp_.iLumi), rmsMaxEB); - meTrendRMS.fill(EcalEndcap, double(timestamp_.iLumi), rmsMaxEE); + meTrendMean.fill(getEcalDQMSetupObjects(), EcalBarrel, double(timestamp_.iLumi), maxEB - minEB); + meTrendMean.fill(getEcalDQMSetupObjects(), EcalEndcap, double(timestamp_.iLumi), maxEE - minEE); + meTrendRMS.fill(getEcalDQMSetupObjects(), EcalBarrel, double(timestamp_.iLumi), rmsMaxEB); + meTrendRMS.fill(getEcalDQMSetupObjects(), EcalEndcap, double(timestamp_.iLumi), rmsMaxEE); } DEFINE_ECALDQM_WORKER(PresampleClient); diff --git a/DQM/EcalMonitorClient/src/RawDataClient.cc b/DQM/EcalMonitorClient/src/RawDataClient.cc index 4bd31aceb07f2..65caaa9c34d10 100644 --- a/DQM/EcalMonitorClient/src/RawDataClient.cc +++ b/DQM/EcalMonitorClient/src/RawDataClient.cc @@ -32,19 +32,20 @@ namespace ecaldqm { std::vector dccStatus(nDCC, 1); for (unsigned iDCC(0); iDCC < nDCC; ++iDCC) { - double entries(sEntries.getBinContent(iDCC + 1)); - if (entries > 1. && - sL1ADCC.getBinContent(iDCC + 1) > synchErrThresholdFactor_ * std::log(entries) / std::log(10.)) + double entries(sEntries.getBinContent(getEcalDQMSetupObjects(), iDCC + 1)); + if (entries > 1. && sL1ADCC.getBinContent(getEcalDQMSetupObjects(), iDCC + 1) > + synchErrThresholdFactor_ * std::log(entries) / std::log(10.)) dccStatus[iDCC] = 0; } - MESet::iterator meEnd(meQualitySummary.end()); - for (MESet::iterator meItr(meQualitySummary.beginChannel()); meItr != meEnd; meItr.toNextChannel()) { + MESet::iterator meEnd(meQualitySummary.end(GetElectronicsMap())); + for (MESet::iterator meItr(meQualitySummary.beginChannel(GetElectronicsMap())); meItr != meEnd; + meItr.toNextChannel(GetElectronicsMap())) { DetId id(meItr->getId()); - bool doMask(meQualitySummary.maskMatches(id, mask, statusManager_)); + bool doMask(meQualitySummary.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); - int dccid(dccId(id)); + int dccid(dccId(id, GetElectronicsMap())); if (dccStatus[dccid - 1] == 0) { meItr->setBinContent(doMask ? kMUnknown : kUnknown); @@ -54,7 +55,7 @@ namespace ecaldqm { int towerStatus(doMask ? kMGood : kGood); float towerEntries(0.); for (unsigned iS(0); iS < nFEFlags; iS++) { - float entries(sFEStatus.getBinContent(id, iS + 1)); + float entries(sFEStatus.getBinContent(getEcalDQMSetupObjects(), id, iS + 1)); towerEntries += entries; if (entries > 0. && iS != Enabled && iS != Suppressed && iS != FIFOFull && iS != FIFOFullL1ADesync && iS != ForcedZS) @@ -66,7 +67,7 @@ namespace ecaldqm { meItr->setBinContent(towerStatus); if (towerStatus == kBad) - meErrorsSummary.fill(dccid); + meErrorsSummary.fill(getEcalDQMSetupObjects(), dccid); } } diff --git a/DQM/EcalMonitorClient/src/SelectiveReadoutClient.cc b/DQM/EcalMonitorClient/src/SelectiveReadoutClient.cc index 7550c80f89e0d..530f66042e274 100644 --- a/DQM/EcalMonitorClient/src/SelectiveReadoutClient.cc +++ b/DQM/EcalMonitorClient/src/SelectiveReadoutClient.cc @@ -28,21 +28,22 @@ namespace ecaldqm { MESet const& sMedIntMap(sources_.at("MedIntMap")); MESet const& sLowIntMap(sources_.at("LowIntMap")); - MESet::const_iterator ruItr(sRUForcedMap); - MESet::const_iterator frItr(sFullReadoutMap); - MESet::const_iterator zs1Itr(sZS1Map); - MESet::const_iterator zsItr(sZSMap); - MESet::const_iterator zsfrItr(sZSFullReadoutMap); - MESet::const_iterator frdItr(sFRDroppedMap); + MESet::const_iterator ruItr(GetElectronicsMap(), sRUForcedMap); + MESet::const_iterator frItr(GetElectronicsMap(), sFullReadoutMap); + MESet::const_iterator zs1Itr(GetElectronicsMap(), sZS1Map); + MESet::const_iterator zsItr(GetElectronicsMap(), sZSMap); + MESet::const_iterator zsfrItr(GetElectronicsMap(), sZSFullReadoutMap); + MESet::const_iterator frdItr(GetElectronicsMap(), sFRDroppedMap); - MESet::iterator frdRateItr(meFRDropped); - MESet::iterator zsrRateItr(meZSReadout); - MESet::iterator frRateItr(meFR); - MESet::iterator ruRateItr(meRUForced); - MESet::iterator zs1RateItr(meZS1); + MESet::iterator frdRateItr(GetElectronicsMap(), meFRDropped); + MESet::iterator zsrRateItr(GetElectronicsMap(), meZSReadout); + MESet::iterator frRateItr(GetElectronicsMap(), meFR); + MESet::iterator ruRateItr(GetElectronicsMap(), meRUForced); + MESet::iterator zs1RateItr(GetElectronicsMap(), meZS1); - MESet::const_iterator cEnd(sFlagCounterMap.end()); - for (MESet::const_iterator cItr(sFlagCounterMap.beginChannel()); cItr != cEnd; cItr.toNextChannel()) { + MESet::const_iterator cEnd(sFlagCounterMap.end(GetElectronicsMap())); + for (MESet::const_iterator cItr(sFlagCounterMap.beginChannel(GetElectronicsMap())); cItr != cEnd; + cItr.toNextChannel(GetElectronicsMap())) { ruItr = cItr; frItr = cItr; zs1Itr = cItr; @@ -75,15 +76,15 @@ namespace ecaldqm { for (unsigned iTT(0); iTT < EcalTrigTowerDetId::kSizeForDenseIndexing; ++iTT) { EcalTrigTowerDetId id(EcalTrigTowerDetId::detIdFromDenseIndex(iTT)); - float nHigh(sHighIntMap.getBinContent(id)); - float nMed(sMedIntMap.getBinContent(id)); - float nLow(sLowIntMap.getBinContent(id)); + float nHigh(sHighIntMap.getBinContent(getEcalDQMSetupObjects(), id)); + float nMed(sMedIntMap.getBinContent(getEcalDQMSetupObjects(), id)); + float nLow(sLowIntMap.getBinContent(getEcalDQMSetupObjects(), id)); float total(nHigh + nMed + nLow); if (total > 0.) { - meHighInterest.setBinContent(id, nHigh / total); - meMedInterest.setBinContent(id, nMed / total); - meLowInterest.setBinContent(id, nLow / total); + meHighInterest.setBinContent(getEcalDQMSetupObjects(), id, nHigh / total); + meMedInterest.setBinContent(getEcalDQMSetupObjects(), id, nMed / total); + meLowInterest.setBinContent(getEcalDQMSetupObjects(), id, nLow / total); } } } diff --git a/DQM/EcalMonitorClient/src/SummaryClient.cc b/DQM/EcalMonitorClient/src/SummaryClient.cc index 747cb599c1a72..e0543a49af96a 100644 --- a/DQM/EcalMonitorClient/src/SummaryClient.cc +++ b/DQM/EcalMonitorClient/src/SummaryClient.cc @@ -40,12 +40,12 @@ namespace ecaldqm { for (unsigned iDCC(0); iDCC < nDCC; ++iDCC) { int dccid(iDCC + 1); - meReportSummaryContents.fill(dccid, -1.); + meReportSummaryContents.fill(getEcalDQMSetupObjects(), dccid, -1.); } - meReportSummary.fill(-1.); + meReportSummary.fill(getEcalDQMSetupObjects(), -1.); - meReportSummaryMap.reset(-1.); + meReportSummaryMap.reset(GetElectronicsMap(), -1.); } void SummaryClient::producePlots(ProcessType _pType) { @@ -54,9 +54,9 @@ namespace ecaldqm { for (unsigned iDCC(0); iDCC < nDCC; ++iDCC) { int dccid(iDCC + 1); - meReportSummaryContents.fill(dccid, -1.); + meReportSummaryContents.fill(getEcalDQMSetupObjects(), dccid, -1.); } - meReportSummary.fill(-1.); + meReportSummary.fill(getEcalDQMSetupObjects(), -1.); MESet const& sIntegrityByLumi(sources_.at("IntegrityByLumi")); MESet const& sDesyncByLumi(sources_.at("DesyncByLumi")); @@ -66,8 +66,9 @@ namespace ecaldqm { double integrityByLumi[nDCC]; double rawDataByLumi[nDCC]; for (unsigned iDCC(0); iDCC < nDCC; ++iDCC) { - integrityByLumi[iDCC] = sIntegrityByLumi.getBinContent(iDCC + 1); - rawDataByLumi[iDCC] = sDesyncByLumi.getBinContent(iDCC + 1) + sFEByLumi.getBinContent(iDCC + 1); + integrityByLumi[iDCC] = sIntegrityByLumi.getBinContent(getEcalDQMSetupObjects(), iDCC + 1); + rawDataByLumi[iDCC] = sDesyncByLumi.getBinContent(getEcalDQMSetupObjects(), iDCC + 1) + + sFEByLumi.getBinContent(getEcalDQMSetupObjects(), iDCC + 1); } MESet& meQualitySummary(MEs_.at("QualitySummary")); @@ -97,28 +98,31 @@ namespace ecaldqm { MESet const& sBXTCC(sources_.at("BXTCC")); std::vector hasMismatchDCC(nDCC, false); for (unsigned iDCC(0); iDCC < nDCC; ++iDCC) { - if (sBXSRP.getBinContent(iDCC + 1) > 50. || sBXTCC.getBinContent(iDCC + 1) > 50.) // "any" = 50 + if (sBXSRP.getBinContent(getEcalDQMSetupObjects(), iDCC + 1) > 50. || + sBXTCC.getBinContent(getEcalDQMSetupObjects(), iDCC + 1) > 50.) // "any" = 50 hasMismatchDCC[iDCC] = true; } // Get RawData mask uint32_t mask(1 << EcalDQMStatusHelper::STATUS_FLAG_ERROR); - MESet::iterator qEnd(meQualitySummary.end()); - for (MESet::iterator qItr(meQualitySummary.beginChannel()); qItr != qEnd; qItr.toNextChannel()) { + MESet::iterator qEnd(meQualitySummary.end(GetElectronicsMap())); + for (MESet::iterator qItr(meQualitySummary.beginChannel(GetElectronicsMap())); qItr != qEnd; + qItr.toNextChannel(GetElectronicsMap())) { DetId id(qItr->getId()); - unsigned iDCC(dccId(id) - 1); + unsigned iDCC(dccId(id, GetElectronicsMap()) - 1); // Initialize individual Quality Summaries // NOTE: These represent quality over *cumulative* statistics - int integrity(sIntegrity ? (int)sIntegrity->getBinContent(id) : kUnknown); - int presample(sPresample ? (int)sPresample->getBinContent(id) : kUnknown); - int hotcell(sHotCell ? (int)sHotCell->getBinContent(id) : kUnknown); - int timing(sTiming ? (int)sTiming->getBinContent(id) : kUnknown); - int trigprim(sTriggerPrimitives ? (int)sTriggerPrimitives->getBinContent(id) : kUnknown); - int rawdata(sRawData.getBinContent(id)); + int integrity(sIntegrity ? (int)sIntegrity->getBinContent(getEcalDQMSetupObjects(), id) : kUnknown); + int presample(sPresample ? (int)sPresample->getBinContent(getEcalDQMSetupObjects(), id) : kUnknown); + int hotcell(sHotCell ? (int)sHotCell->getBinContent(getEcalDQMSetupObjects(), id) : kUnknown); + int timing(sTiming ? (int)sTiming->getBinContent(getEcalDQMSetupObjects(), id) : kUnknown); + int trigprim(sTriggerPrimitives ? (int)sTriggerPrimitives->getBinContent(getEcalDQMSetupObjects(), id) + : kUnknown); + int rawdata(sRawData.getBinContent(getEcalDQMSetupObjects(), id)); - double rawdataLS(sFEStatusErrMapByLumi.getBinContent(id)); // Includes FE=Disabled + double rawdataLS(sFEStatusErrMapByLumi.getBinContent(getEcalDQMSetupObjects(), id)); // Includes FE=Disabled // If there are no RawData or Integrity errors in this LS, set them back to GOOD //if(integrity == kBad && integrityByLumi[iDCC] == 0.) integrity = kGood; @@ -161,7 +165,7 @@ namespace ecaldqm { // Keep running count of good channels in RawData only: Uses LS stats only. // LS-based reports only use RawData as input to save on having to run other workers - bool isMasked(meQualitySummary.maskMatches(id, mask, statusManager_)); + bool isMasked(meQualitySummary.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); if (rawdataLS == 0. || isMasked) { // channel != kBad in rawdata dccGoodRaw[iDCC] += 1.; totalGoodRaw += 1.; @@ -241,9 +245,9 @@ namespace ecaldqm { int dccid(iDCC + 1); float frac(dccGood[iDCC] / dccChannels[iDCC]); float fracRaw(dccGoodRaw[iDCC] / dccChannels[iDCC]); - meReportSummaryMap.setBinContent(dccid, frac); + meReportSummaryMap.setBinContent(getEcalDQMSetupObjects(), dccid, frac); float fracLS(onlineMode_ ? frac : fracRaw); - meReportSummaryContents.fill(dccid, fracLS); // reported by LS + meReportSummaryContents.fill(getEcalDQMSetupObjects(), dccid, fracLS); // reported by LS if (1. - frac > fedBadFraction_) nBad += 1.; @@ -251,12 +255,12 @@ namespace ecaldqm { float totalGoodLS(onlineMode_ ? totalGood : totalGoodRaw); if (totalChannels > 0.) - meReportSummary.fill(totalGoodLS / totalChannels); // reported by LS + meReportSummary.fill(getEcalDQMSetupObjects(), totalGoodLS / totalChannels); // reported by LS if (onlineMode_) { if (totalChannels > 0.) - MEs_.at("GlobalSummary").setBinContent(1, totalGood / totalChannels); - MEs_.at("NBadFEDs").setBinContent(1, nBad); + MEs_.at("GlobalSummary").setBinContent(getEcalDQMSetupObjects(), 1, totalGood / totalChannels); + MEs_.at("NBadFEDs").setBinContent(getEcalDQMSetupObjects(), 1, nBad); } } // producePlots() diff --git a/DQM/EcalMonitorClient/src/TestPulseClient.cc b/DQM/EcalMonitorClient/src/TestPulseClient.cc index 9981f077eb3ff..d06ab087c78d9 100644 --- a/DQM/EcalMonitorClient/src/TestPulseClient.cc +++ b/DQM/EcalMonitorClient/src/TestPulseClient.cc @@ -141,13 +141,14 @@ namespace ecaldqm { break; } - MESet::iterator qEnd(meQuality.end()); - MESet::iterator rItr(meAmplitudeRMS); - MESet::const_iterator aItr(sAmplitude); - for (MESet::iterator qItr(meQuality.beginChannel()); qItr != qEnd; qItr.toNextChannel()) { + MESet::iterator qEnd(meQuality.end(GetElectronicsMap())); + MESet::iterator rItr(GetElectronicsMap(), meAmplitudeRMS); + MESet::const_iterator aItr(GetElectronicsMap(), sAmplitude); + for (MESet::iterator qItr(meQuality.beginChannel(GetElectronicsMap())); qItr != qEnd; + qItr.toNextChannel(GetElectronicsMap())) { DetId id(qItr->getId()); - bool doMask(meQuality.maskMatches(id, mask, statusManager_)); + bool doMask(meQuality.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); aItr = qItr; rItr = qItr; @@ -205,21 +206,21 @@ namespace ecaldqm { EcalPnDiodeDetId id(subdet, iDCC + 1, iPN + 1); - bool doMask(mePNQualitySummary.maskMatches(id, mask, statusManager_)); + bool doMask(mePNQualitySummary.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); - float amp(sPNAmplitude.getBinContent(id)); - float entries(sPNAmplitude.getBinEntries(id)); - float rms(sPNAmplitude.getBinError(id) * sqrt(entries)); + float amp(sPNAmplitude.getBinContent(getEcalDQMSetupObjects(), id)); + float entries(sPNAmplitude.getBinEntries(getEcalDQMSetupObjects(), id)); + float rms(sPNAmplitude.getBinError(getEcalDQMSetupObjects(), id) * sqrt(entries)); if (entries < minChannelEntries_) { - mePNQualitySummary.setBinContent(id, doMask ? kMUnknown : kUnknown); + mePNQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMUnknown : kUnknown); continue; } if (amp < PNAmplitudeThreshold_[gainItr->second] || rms > tolerancePNRMS_[gainItr->second]) - mePNQualitySummary.setBinContent(id, doMask ? kMBad : kBad); + mePNQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMBad : kBad); else - mePNQualitySummary.setBinContent(id, doMask ? kMGood : kGood); + mePNQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMGood : kGood); } } } diff --git a/DQM/EcalMonitorClient/src/TimingClient.cc b/DQM/EcalMonitorClient/src/TimingClient.cc index f26a80d1ed033..80580c73ca944 100644 --- a/DQM/EcalMonitorClient/src/TimingClient.cc +++ b/DQM/EcalMonitorClient/src/TimingClient.cc @@ -56,16 +56,17 @@ namespace ecaldqm { uint32_t mask(1 << EcalDQMStatusHelper::PHYSICS_BAD_CHANNEL_WARNING); - MESet::iterator qEnd(meQuality.end()); + MESet::iterator qEnd(meQuality.end(GetElectronicsMap())); - MESet::iterator rItr(meRMSMap); - MESet::const_iterator tItr(sTimeMap); - MESet::const_iterator tLSItr(sTimeMapByLS); + MESet::iterator rItr(GetElectronicsMap(), meRMSMap); + MESet::const_iterator tItr(GetElectronicsMap(), sTimeMap); + MESet::const_iterator tLSItr(GetElectronicsMap(), sTimeMapByLS); float EBentries(0.), EEentries(0.); float EBmean(0.), EEmean(0.); float EBrms(0.), EErms(0.); - for (MESet::iterator qItr(meQuality.beginChannel()); qItr != qEnd; qItr.toNextChannel()) { + for (MESet::iterator qItr(meQuality.beginChannel(GetElectronicsMap())); qItr != qEnd; + qItr.toNextChannel(GetElectronicsMap())) { tItr = qItr; rItr = qItr; @@ -81,7 +82,7 @@ namespace ecaldqm { rmsThresh = toleranceRMSFwd_; } - bool doMask(meQuality.maskMatches(id, mask, statusManager_)); + bool doMask(meQuality.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); float entries(tItr->getBinEntries()); @@ -94,11 +95,11 @@ namespace ecaldqm { float mean(tItr->getBinContent()); float rms(tItr->getBinError() * sqrt(entries)); - meMeanSM.fill(id, mean); - meMeanAll.fill(id, mean); - meProjEta.fill(id, mean); - meProjPhi.fill(id, mean); - meRMSAll.fill(id, rms); + meMeanSM.fill(getEcalDQMSetupObjects(), id, mean); + meMeanAll.fill(getEcalDQMSetupObjects(), id, mean); + meProjEta.fill(getEcalDQMSetupObjects(), id, mean); + meProjPhi.fill(getEcalDQMSetupObjects(), id, mean); + meRMSAll.fill(getEcalDQMSetupObjects(), id, rms); rItr->setBinContent(rms); bool negative(false); @@ -109,19 +110,19 @@ namespace ecaldqm { if (ebid.zside() < 0) { negative = true; EBDetId posId(EBDetId::switchZSide(ebid)); - posTime = sTimeMap.getBinContent(posId); + posTime = sTimeMap.getBinContent(getEcalDQMSetupObjects(), posId); } } else { EEDetId eeid(id); if (eeid.zside() < 0) { negative = true; EEDetId posId(EEDetId::switchZSide(eeid)); - posTime = sTimeMap.getBinContent(posId); + posTime = sTimeMap.getBinContent(getEcalDQMSetupObjects(), posId); } } if (negative) { - meFwdBkwdDiff.fill(id, posTime - mean); - meFwdvBkwd.fill(id, mean, posTime); + meFwdBkwdDiff.fill(getEcalDQMSetupObjects(), id, posTime - mean); + meFwdvBkwd.fill(getEcalDQMSetupObjects(), id, mean, posTime); } if (std::abs(mean) > meanThresh || rms > rmsThresh) @@ -134,7 +135,7 @@ namespace ecaldqm { float entriesLS(tLSItr->getBinEntries()); float meanLS(tLSItr->getBinContent()); float rmsLS(tLSItr->getBinError() * sqrt(entriesLS)); - float chStatus(sChStatus.getBinContent(id)); + float chStatus(sChStatus.getBinContent(getEcalDQMSetupObjects(), id)); if (entriesLS < minChannelEntries) continue; @@ -159,26 +160,27 @@ namespace ecaldqm { MESet& meTrendRMS(MEs_.at("TrendRMS")); if (EBentries > 0.) { if (std::abs(EBmean) > 0.) - meTrendMean.fill(EcalBarrel, double(timestamp_.iLumi), EBmean / EBentries); + meTrendMean.fill(getEcalDQMSetupObjects(), EcalBarrel, double(timestamp_.iLumi), EBmean / EBentries); if (std::abs(EBrms) > 0.) - meTrendRMS.fill(EcalBarrel, double(timestamp_.iLumi), EBrms / EBentries); + meTrendRMS.fill(getEcalDQMSetupObjects(), EcalBarrel, double(timestamp_.iLumi), EBrms / EBentries); } if (EEentries > 0.) { if (std::abs(EEmean) > 0.) - meTrendMean.fill(EcalEndcap, double(timestamp_.iLumi), EEmean / EEentries); + meTrendMean.fill(getEcalDQMSetupObjects(), EcalEndcap, double(timestamp_.iLumi), EEmean / EEentries); if (std::abs(EErms) > 0.) - meTrendRMS.fill(EcalEndcap, double(timestamp_.iLumi), EErms / EEentries); + meTrendRMS.fill(getEcalDQMSetupObjects(), EcalEndcap, double(timestamp_.iLumi), EErms / EEentries); } - MESet::iterator qsEnd(meQualitySummary.end()); + MESet::iterator qsEnd(meQualitySummary.end(GetElectronicsMap())); - for (MESet::iterator qsItr(meQualitySummary.beginChannel()); qsItr != qsEnd; qsItr.toNextChannel()) { + for (MESet::iterator qsItr(meQualitySummary.beginChannel(GetElectronicsMap())); qsItr != qsEnd; + qsItr.toNextChannel(GetElectronicsMap())) { DetId tId(qsItr->getId()); std::vector ids; if (tId.subdetId() == EcalTriggerTower) - ids = getTrigTowerMap()->constituentsOf(EcalTrigTowerDetId(tId)); + ids = GetTrigTowerMap()->constituentsOf(EcalTrigTowerDetId(tId)); else ids = scConstituents(EcalScDetId(tId)); @@ -193,7 +195,7 @@ namespace ecaldqm { } // tower entries != sum(channel entries) because of the difference in timing cut at the source - float summaryEntries(sTimeAllMap.getBinEntries(tId)); + float summaryEntries(sTimeAllMap.getBinEntries(getEcalDQMSetupObjects(), tId)); float towerEntries(0.); float towerMean(0.); @@ -204,9 +206,9 @@ namespace ecaldqm { for (std::vector::iterator idItr(ids.begin()); idItr != ids.end(); ++idItr) { DetId& id(*idItr); - doMask |= meQuality.maskMatches(id, mask, statusManager_); + doMask |= meQuality.maskMatches(id, mask, statusManager_, GetTrigTowerMap()); - MESet::const_iterator tmItr(sTimeMap, id); + MESet::const_iterator tmItr(GetElectronicsMap(), sTimeMap, id); float entries(tmItr->getBinEntries()); if (entries < 0.) diff --git a/DQM/EcalMonitorClient/src/TowerStatusTask.cc b/DQM/EcalMonitorClient/src/TowerStatusTask.cc index 76148ae071c53..0425c85cb07d9 100644 --- a/DQM/EcalMonitorClient/src/TowerStatusTask.cc +++ b/DQM/EcalMonitorClient/src/TowerStatusTask.cc @@ -50,13 +50,13 @@ namespace ecaldqm { for (unsigned id(0); id < EcalTrigTowerDetId::kEBTotalTowers; id++) { if (daqHndl->barrel(id).getStatusCode() != 0) { EcalTrigTowerDetId ttid(EcalTrigTowerDetId::detIdFromDenseIndex(id)); - daqStatus_[dccId(ttid) - 1] -= 25. / 1700.; + daqStatus_[dccId(ttid, GetElectronicsMap()) - 1] -= 25. / 1700.; } } for (unsigned id(0); id < EcalScDetId::kSizeForDenseIndexing; id++) { if (daqHndl->endcap(id).getStatusCode() != 0) { EcalScDetId scid(EcalScDetId::unhashIndex(id)); - unsigned dccid(dccId(scid)); + unsigned dccid(dccId(scid, GetElectronicsMap())); daqStatus_[dccid - 1] -= double(scConstituents(scid).size()) / nCrystals(dccid); } } @@ -73,13 +73,13 @@ namespace ecaldqm { for (unsigned id(0); id < EcalTrigTowerDetId::kEBTotalTowers; id++) { if (dcsHndl->barrel(id).getStatusCode() != 0) { EcalTrigTowerDetId ttid(EcalTrigTowerDetId::detIdFromDenseIndex(id)); - dcsStatus_[dccId(ttid) - 1] -= 25. / 1700.; + dcsStatus_[dccId(ttid, GetElectronicsMap()) - 1] -= 25. / 1700.; } } for (unsigned id(0); id < EcalScDetId::kSizeForDenseIndexing; id++) { if (dcsHndl->endcap(id).getStatusCode() != 0) { EcalScDetId scid(EcalScDetId::unhashIndex(id)); - unsigned dccid(dccId(scid)); + unsigned dccid(dccId(scid, GetElectronicsMap())); dcsStatus_[dccid - 1] -= double(scConstituents(scid).size()) / nCrystals(dccid); } } @@ -103,19 +103,19 @@ namespace ecaldqm { meSummaryMap = &MEs_.at(_type + "SummaryMap"); meContents = &MEs_.at(_type + "Contents"); - meSummary->reset(-1.); + meSummary->reset(GetElectronicsMap(), -1.); meSummaryMap->resetAll(-1.); - meSummaryMap->reset(); - meContents->reset(-1.); + meSummaryMap->reset(GetElectronicsMap()); + meContents->reset(GetElectronicsMap(), -1.); float totalFraction(0.); for (int iDCC(0); iDCC < nDCC; iDCC++) { - meSummaryMap->setBinContent(iDCC + 1, _status[iDCC]); - meContents->fill(iDCC + 1, _status[iDCC]); + meSummaryMap->setBinContent(getEcalDQMSetupObjects(), iDCC + 1, _status[iDCC]); + meContents->fill(getEcalDQMSetupObjects(), iDCC + 1, _status[iDCC]); totalFraction += _status[iDCC] / nCrystals(iDCC + 1); } - meSummary->fill(totalFraction); + meSummary->fill(getEcalDQMSetupObjects(), totalFraction); } DEFINE_ECALDQM_WORKER(TowerStatusTask); diff --git a/DQM/EcalMonitorClient/src/TrigPrimClient.cc b/DQM/EcalMonitorClient/src/TrigPrimClient.cc index 406ec472baaaf..78fdc48dde37f 100644 --- a/DQM/EcalMonitorClient/src/TrigPrimClient.cc +++ b/DQM/EcalMonitorClient/src/TrigPrimClient.cc @@ -53,7 +53,7 @@ namespace ecaldqm { for (unsigned iTT(0); iTT < EcalTrigTowerDetId::kSizeForDenseIndexing; iTT++) { EcalTrigTowerDetId ttid(EcalTrigTowerDetId::detIdFromDenseIndex(iTT)); - bool doMask(meEmulQualitySummary.maskMatches(ttid, mask, statusManager_)); + bool doMask(meEmulQualitySummary.maskMatches(ttid, mask, statusManager_, GetTrigTowerMap())); if (sourceFromEmul_) { sEtEmulError = &sources_.at("EtEmulError"); @@ -64,7 +64,7 @@ namespace ecaldqm { float tMax(0.5); float nMax(0.); for (int iBin(0); iBin < 6; iBin++) { - float entries(sMatchedIndex->getBinContent(ttid, iBin + 1)); + float entries(sMatchedIndex->getBinContent(getEcalDQMSetupObjects(), ttid, iBin + 1)); towerEntries += entries; if (entries > nMax) { @@ -72,28 +72,28 @@ namespace ecaldqm { tMax = iBin == 0 ? -0.5 : iBin + 0.5; // historical reasons.. much clearer to say "no entry = -0.5" } } - meTimingSummary->setBinContent(ttid, tMax); + meTimingSummary->setBinContent(getEcalDQMSetupObjects(), ttid, tMax); if (towerEntries < minEntries_) { - meEmulQualitySummary.setBinContent(ttid, doMask ? kMUnknown : kUnknown); + meEmulQualitySummary.setBinContent(getEcalDQMSetupObjects(), ttid, doMask ? kMUnknown : kUnknown); continue; } float nonsingleFraction(1. - nMax / towerEntries); if (nonsingleFraction > 0.) { - meNonSingleSummary->setBinContent(ttid, nonsingleFraction); + meNonSingleSummary->setBinContent(getEcalDQMSetupObjects(), ttid, nonsingleFraction); } - if (sEtEmulError->getBinContent(ttid) / towerEntries > errorFractionThreshold_) { - meEmulQualitySummary.setBinContent(ttid, doMask ? kMBad : kBad); + if (sEtEmulError->getBinContent(getEcalDQMSetupObjects(), ttid) / towerEntries > errorFractionThreshold_) { + meEmulQualitySummary.setBinContent(getEcalDQMSetupObjects(), ttid, doMask ? kMBad : kBad); } else { - meEmulQualitySummary.setBinContent(ttid, doMask ? kMGood : kGood); + meEmulQualitySummary.setBinContent(getEcalDQMSetupObjects(), ttid, doMask ? kMGood : kGood); } } // Keep count for Occupancy analysis - unsigned iDCC(dccId(ttid) - 1); - Nentries[iDCC] += sTPDigiThrAll.getBinContent(ttid); + unsigned iDCC(dccId(ttid, GetElectronicsMap()) - 1); + Nentries[iDCC] += sTPDigiThrAll.getBinContent(getEcalDQMSetupObjects(), ttid); } // Fill TTF4 v Masking ME @@ -112,10 +112,10 @@ namespace ecaldqm { // Loop over all TTs for (unsigned iTT(0); iTT < EcalTrigTowerDetId::kSizeForDenseIndexing; iTT++) { EcalTrigTowerDetId ttid(EcalTrigTowerDetId::detIdFromDenseIndex(iTT)); - unsigned iDCC(dccId(ttid) - 1); - bool isMasked(sTTMaskMapAll.getBinContent(ttid) > 0.); - bool hasTTF4(sTTFlags4.getBinContent(ttid) > 0.); - bool hasTTF4InThisLumiSection(sTTFlags4ByLumi.getBinContent(ttid) > 0.); + unsigned iDCC(dccId(ttid, GetElectronicsMap()) - 1); + bool isMasked(sTTMaskMapAll.getBinContent(getEcalDQMSetupObjects(), ttid) > 0.); + bool hasTTF4(sTTFlags4.getBinContent(getEcalDQMSetupObjects(), ttid) > 0.); + bool hasTTF4InThisLumiSection(sTTFlags4ByLumi.getBinContent(getEcalDQMSetupObjects(), ttid) > 0.); if (hasTTF4InThisLumiSection) { nWithTTF4[iDCC]++; if (ttid.subDet() == EcalBarrel) @@ -125,26 +125,26 @@ namespace ecaldqm { } if (isMasked) { if (hasTTF4) { - meTTF4vMask.setBinContent(ttid, 12); // Masked, has TTF4 + meTTF4vMask.setBinContent(getEcalDQMSetupObjects(), ttid, 12); // Masked, has TTF4 } else { - meTTF4vMask.setBinContent(ttid, 11); // Masked, no TTF4 + meTTF4vMask.setBinContent(getEcalDQMSetupObjects(), ttid, 11); // Masked, no TTF4 } if (hasTTF4InThisLumiSection) { - meTTF4vMaskByLumi.setBinContent(ttid, 12); // Masked, has TTF4 + meTTF4vMaskByLumi.setBinContent(getEcalDQMSetupObjects(), ttid, 12); // Masked, has TTF4 } else { - meTTF4vMaskByLumi.setBinContent(ttid, 11); // Masked, no TTF4 + meTTF4vMaskByLumi.setBinContent(getEcalDQMSetupObjects(), ttid, 11); // Masked, no TTF4 } } else { if (hasTTF4) - meTTF4vMask.setBinContent(ttid, 13); // not Masked, has TTF4 + meTTF4vMask.setBinContent(getEcalDQMSetupObjects(), ttid, 13); // not Masked, has TTF4 if (hasTTF4InThisLumiSection) - meTTF4vMaskByLumi.setBinContent(ttid, 13); // not Masked, has TTF4 + meTTF4vMaskByLumi.setBinContent(getEcalDQMSetupObjects(), ttid, 13); // not Masked, has TTF4 } } // TT loop // Fill trend plots for number of TTs with TTF4 flag set - meTrendTTF4Flags.fill(EcalBarrel, double(timestamp_.iLumi), nWithTTF4_EB); - meTrendTTF4Flags.fill(EcalEndcap, double(timestamp_.iLumi), nWithTTF4_EE); + meTrendTTF4Flags.fill(getEcalDQMSetupObjects(), EcalBarrel, double(timestamp_.iLumi), nWithTTF4_EB); + meTrendTTF4Flags.fill(getEcalDQMSetupObjects(), EcalEndcap, double(timestamp_.iLumi), nWithTTF4_EE); // Quality check: set an entire FED to BAD if a more than 80% of the TTs in that FED show any DCC-SRP flag mismatch errors // Fill flag mismatch statistics @@ -153,18 +153,20 @@ namespace ecaldqm { MESet const& sTTFMismatch(sources_.at("TTFMismatch")); for (unsigned iTT(0); iTT < EcalTrigTowerDetId::kSizeForDenseIndexing; iTT++) { EcalTrigTowerDetId ttid(EcalTrigTowerDetId::detIdFromDenseIndex(iTT)); - unsigned iDCC(dccId(ttid) - 1); - if (sTTFMismatch.getBinContent(ttid) > 0.) + unsigned iDCC(dccId(ttid, GetElectronicsMap()) - 1); + if (sTTFMismatch.getBinContent(getEcalDQMSetupObjects(), ttid) > 0.) nTTFMismath[iDCC]++; nTTs[iDCC]++; } // Analyze flag mismatch statistics and TTF4 fraction statistics for (unsigned iTT(0); iTT < EcalTrigTowerDetId::kSizeForDenseIndexing; iTT++) { EcalTrigTowerDetId ttid(EcalTrigTowerDetId::detIdFromDenseIndex(iTT)); - unsigned iDCC(dccId(ttid) - 1); + unsigned iDCC(dccId(ttid, GetElectronicsMap()) - 1); if (nTTFMismath[iDCC] > 0.8 * nTTs[iDCC] || nWithTTF4[iDCC] > TTF4MaskingAlarmThreshold_ * nTTs[iDCC]) { - meEmulQualitySummary.setBinContent(ttid, - meEmulQualitySummary.maskMatches(ttid, mask, statusManager_) ? kMBad : kBad); + meEmulQualitySummary.setBinContent( + getEcalDQMSetupObjects(), + ttid, + meEmulQualitySummary.maskMatches(ttid, mask, statusManager_, GetTrigTowerMap()) ? kMBad : kBad); } } @@ -193,7 +195,7 @@ namespace ecaldqm { float meanFED(0.), rmsFED(0.), nRMS(5.); for (unsigned iTT(0); iTT < EcalTrigTowerDetId::kSizeForDenseIndexing; iTT++) { EcalTrigTowerDetId ttid(EcalTrigTowerDetId::detIdFromDenseIndex(iTT)); - unsigned iDCC(dccId(ttid) - 1); + unsigned iDCC(dccId(ttid, GetElectronicsMap()) - 1); if (iDCC >= kEBmLow && iDCC <= kEBpHigh) { meanFED = meanFEDEB; rmsFED = rmsFEDEB; @@ -203,8 +205,10 @@ namespace ecaldqm { } float threshold(meanFED < nRMS * rmsFED ? minEntries_ : meanFED - nRMS * rmsFED); if ((meanFED > 100. && Nentries[iDCC] < threshold) && statsCheckEnabled) - meEmulQualitySummary.setBinContent(ttid, - meEmulQualitySummary.maskMatches(ttid, mask, statusManager_) ? kMBad : kBad); + meEmulQualitySummary.setBinContent( + getEcalDQMSetupObjects(), + ttid, + meEmulQualitySummary.maskMatches(ttid, mask, statusManager_, GetTrigTowerMap()) ? kMBad : kBad); } } // producePlots() diff --git a/DQM/EcalMonitorDbModule/interface/DBWriterWorkers.h b/DQM/EcalMonitorDbModule/interface/DBWriterWorkers.h index e0fef73dae1b7..08e6ca102770e 100644 --- a/DQM/EcalMonitorDbModule/interface/DBWriterWorkers.h +++ b/DQM/EcalMonitorDbModule/interface/DBWriterWorkers.h @@ -9,16 +9,18 @@ #include "OnlineDB/EcalCondDB/interface/EcalCondDBInterface.h" #include "OnlineDB/EcalCondDB/interface/MonRunDat.h" +#include "DQM/EcalCommon/interface/DQWorker.h" + #include namespace ecaldqm { - class DBWriterWorker { + class DBWriterWorker : public DQWorker { public: typedef dqm::legacy::DQMStore DQMStore; typedef dqm::legacy::MonitorElement MonitorElement; DBWriterWorker(std::string const &, edm::ParameterSet const &); - virtual ~DBWriterWorker() {} + ~DBWriterWorker() override {} void retrieveSource(DQMStore::IGetter &); virtual bool run(EcalCondDBInterface *, MonRunIOV &) = 0; diff --git a/DQM/EcalMonitorDbModule/interface/EcalCondDBReader.h b/DQM/EcalMonitorDbModule/interface/EcalCondDBReader.h index 107104a387b7d..5a47624e56afe 100644 --- a/DQM/EcalMonitorDbModule/interface/EcalCondDBReader.h +++ b/DQM/EcalMonitorDbModule/interface/EcalCondDBReader.h @@ -12,7 +12,12 @@ class EcalCondDBReader : public DQMEDHarvester { ~EcalCondDBReader() override; private: - void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override; + void dqmEndRun(DQMStore::IBooker &, DQMStore::IGetter &, edm::Run const &, edm::EventSetup const &) override; + + EcalElectronicsMapping const *electronicsMap; + void setElectronicsMap(edm::EventSetup const &); + EcalElectronicsMapping const *GetElectronicsMap(); + ecaldqm::EcalDQMSetupObjects const getEcalDQMSetupObjects(); // DON'T CHANGE - ORDER MATTERS IN DB enum Tasks { diff --git a/DQM/EcalMonitorDbModule/interface/EcalCondDBWriter.h b/DQM/EcalMonitorDbModule/interface/EcalCondDBWriter.h index 8ac0a7ca16976..23d825d26e290 100644 --- a/DQM/EcalMonitorDbModule/interface/EcalCondDBWriter.h +++ b/DQM/EcalMonitorDbModule/interface/EcalCondDBWriter.h @@ -13,6 +13,7 @@ class EcalCondDBWriter : public DQMEDHarvester { ~EcalCondDBWriter() override; private: + void beginRun(edm::Run const &, edm::EventSetup const &) override; void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override; // DON'T CHANGE - ORDER MATTERS IN DB diff --git a/DQM/EcalMonitorDbModule/interface/EcalDQMStatusWriter.h b/DQM/EcalMonitorDbModule/interface/EcalDQMStatusWriter.h index f0a1822f731f7..0b58719e6846a 100644 --- a/DQM/EcalMonitorDbModule/interface/EcalDQMStatusWriter.h +++ b/DQM/EcalMonitorDbModule/interface/EcalDQMStatusWriter.h @@ -6,6 +6,11 @@ #include "CondFormats/EcalObjects/interface/EcalDQMChannelStatus.h" #include "CondFormats/EcalObjects/interface/EcalDQMTowerStatus.h" +#include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h" +#include "Geometry/EcalMapping/interface/EcalMappingRcd.h" + +#include + class EcalDQMStatusWriter : public edm::EDAnalyzer { public: EcalDQMStatusWriter(edm::ParameterSet const &); @@ -13,10 +18,16 @@ class EcalDQMStatusWriter : public edm::EDAnalyzer { private: void analyze(edm::Event const &, edm::EventSetup const &) override; + void beginRun(edm::Run const &, edm::EventSetup const &) override; EcalDQMChannelStatus channelStatus_; EcalDQMTowerStatus towerStatus_; unsigned firstRun_; + std::ifstream inputFile_; + + EcalElectronicsMapping const *electronicsMap; + void setElectronicsMap(edm::EventSetup const &); + EcalElectronicsMapping const *GetElectronicsMap(); }; #endif diff --git a/DQM/EcalMonitorDbModule/interface/LogicIDTranslation.h b/DQM/EcalMonitorDbModule/interface/LogicIDTranslation.h index 6634889562eea..454064c8a08b7 100644 --- a/DQM/EcalMonitorDbModule/interface/LogicIDTranslation.h +++ b/DQM/EcalMonitorDbModule/interface/LogicIDTranslation.h @@ -11,10 +11,12 @@ #include "DataFormats/EcalDetId/interface/EcalSubdetector.h" #include "DataFormats/EcalDetId/interface/EcalTrigTowerDetId.h" +#include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h" + namespace ecaldqm { EcalLogicID ecalID(); EcalLogicID subdetID(EcalSubdetector); - EcalLogicID crystalID(DetId const &); + EcalLogicID crystalID(DetId const &, EcalElectronicsMapping const *); EcalLogicID towerID(EcalElectronicsId const &); EcalLogicID memChannelID(EcalPnDiodeDetId const &); EcalLogicID memTowerID(EcalElectronicsId const &); diff --git a/DQM/EcalMonitorDbModule/plugins/EcalCondDBReader.cc b/DQM/EcalMonitorDbModule/plugins/EcalCondDBReader.cc index a6bea3d5f120a..0fa79be46288a 100644 --- a/DQM/EcalMonitorDbModule/plugins/EcalCondDBReader.cc +++ b/DQM/EcalMonitorDbModule/plugins/EcalCondDBReader.cc @@ -9,6 +9,8 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include "Geometry/EcalMapping/interface/EcalMappingRcd.h" + EcalCondDBReader::EcalCondDBReader(edm::ParameterSet const &_ps) : db_(nullptr), monIOV_(), @@ -145,10 +147,33 @@ EcalCondDBReader::~EcalCondDBReader() { delete meSet_; } -void EcalCondDBReader::dqmEndJob(DQMStore::IBooker &_ibooker, DQMStore::IGetter &) { - meSet_->book(_ibooker); +void EcalCondDBReader::dqmEndRun(DQMStore::IBooker &_ibooker, + DQMStore::IGetter &, + edm::Run const &, + edm::EventSetup const &_es) { + setElectronicsMap(_es); + meSet_->book(_ibooker, GetElectronicsMap()); std::map values(worker_->run(db_, monIOV_, formula_)); for (std::map::const_iterator vItr(values.begin()); vItr != values.end(); ++vItr) - meSet_->setBinContent(vItr->first, vItr->second); + meSet_->setBinContent(getEcalDQMSetupObjects(), vItr->first, vItr->second); +} + +void EcalCondDBReader::setElectronicsMap(edm::EventSetup const &_es) { + edm::ESHandle elecMapHandle; + _es.get().get(elecMapHandle); + electronicsMap = elecMapHandle.product(); +} + +EcalElectronicsMapping const *EcalCondDBReader::GetElectronicsMap() { + if (!electronicsMap) + throw cms::Exception("InvalidCall") << "Electronics Mapping not initialized"; + return electronicsMap; +} + +ecaldqm::EcalDQMSetupObjects const EcalCondDBReader::getEcalDQMSetupObjects() { + if (!electronicsMap) + throw cms::Exception("InvalidCall") << "Electronics Mapping not initialized"; + ecaldqm::EcalDQMSetupObjects edso = {electronicsMap, nullptr, nullptr, nullptr}; + return edso; } diff --git a/DQM/EcalMonitorDbModule/plugins/EcalCondDBWriter.cc b/DQM/EcalMonitorDbModule/plugins/EcalCondDBWriter.cc index 979b81bf16142..bc386c281a030 100644 --- a/DQM/EcalMonitorDbModule/plugins/EcalCondDBWriter.cc +++ b/DQM/EcalMonitorDbModule/plugins/EcalCondDBWriter.cc @@ -119,6 +119,12 @@ EcalCondDBWriter::~EcalCondDBWriter() { delete workers_[iC]; } +void EcalCondDBWriter::beginRun(edm::Run const &_run, edm::EventSetup const &_es) { + for (unsigned iC(0); iC < nTasks; ++iC) + if (workers_[iC]) + workers_[iC]->setSetupObjects(_es); +} + void EcalCondDBWriter::dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &_igetter) { if (executed_) return; diff --git a/DQM/EcalMonitorDbModule/plugins/EcalDQMStatusWriter.cc b/DQM/EcalMonitorDbModule/plugins/EcalDQMStatusWriter.cc index 2379a69517665..7808034340355 100644 --- a/DQM/EcalMonitorDbModule/plugins/EcalDQMStatusWriter.cc +++ b/DQM/EcalMonitorDbModule/plugins/EcalDQMStatusWriter.cc @@ -12,14 +12,20 @@ #include EcalDQMStatusWriter::EcalDQMStatusWriter(edm::ParameterSet const &_ps) - : channelStatus_(), towerStatus_(), firstRun_(_ps.getUntrackedParameter("firstRun")) { - std::ifstream inputFile(_ps.getUntrackedParameter("inputFile")); - if (!inputFile.is_open()) + : channelStatus_(), + towerStatus_(), + firstRun_(_ps.getUntrackedParameter("firstRun")), + inputFile_(_ps.getUntrackedParameter("inputFile")) { + if (!inputFile_.is_open()) throw cms::Exception("Invalid input for EcalDQMStatusWriter"); +} + +void EcalDQMStatusWriter::beginRun(edm::Run const &_run, edm::EventSetup const &_es) { + setElectronicsMap(_es); ecaldqm::StatusManager statusManager; - statusManager.readFromStream(inputFile); + statusManager.readFromStream(inputFile_, GetElectronicsMap()); statusManager.writeToObj(channelStatus_, towerStatus_); } @@ -34,4 +40,16 @@ void EcalDQMStatusWriter::analyze(edm::Event const &, edm::EventSetup const &_es firstRun_ = dbOutput.endOfTime(); // avoid accidentally re-writing the conditions } +void EcalDQMStatusWriter::setElectronicsMap(edm::EventSetup const &_es) { + edm::ESHandle elecMapHandle; + _es.get().get(elecMapHandle); + electronicsMap = elecMapHandle.product(); +} + +EcalElectronicsMapping const *EcalDQMStatusWriter::GetElectronicsMap() { + if (!electronicsMap) + throw cms::Exception("InvalidCall") << "Electronics Mapping not initialized"; + return electronicsMap; +} + DEFINE_FWK_MODULE(EcalDQMStatusWriter); diff --git a/DQM/EcalMonitorDbModule/src/DBWriterWorkers.cc b/DQM/EcalMonitorDbModule/src/DBWriterWorkers.cc index 7fecd416f3339..9358863829ff4 100644 --- a/DQM/EcalMonitorDbModule/src/DBWriterWorkers.cc +++ b/DQM/EcalMonitorDbModule/src/DBWriterWorkers.cc @@ -57,7 +57,7 @@ namespace ecaldqm { bool qualityOK(int _quality) { return (_quality != kBad && _quality != kUnknown); } DBWriterWorker::DBWriterWorker(std::string const &_name, edm::ParameterSet const &_ps) - : name_(_name), runTypes_(), source_(), active_(false) { + : DQWorker(), name_(_name), runTypes_(), source_(), active_(false) { edm::ParameterSet const ¶ms(_ps.getUntrackedParameterSet(name_)); std::vector runTypes(params.getUntrackedParameter>("runTypes")); @@ -79,7 +79,7 @@ namespace ecaldqm { void DBWriterWorker::retrieveSource(DQMStore::IGetter &_igetter) { std::string failedPath; for (MESetCollection::iterator sItr(this->source_.begin()); sItr != this->source_.end(); ++sItr) { - if (!sItr->second->retrieve(_igetter, &failedPath)) { + if (!sItr->second->retrieve(GetElectronicsMap(), _igetter, &failedPath)) { edm::LogError("EcalDQM") << name_ << ": MESet " << sItr->first << "@" << failedPath << " not found"; this->active_ = false; return; @@ -136,19 +136,20 @@ namespace ecaldqm { if (verbosity_ > 1) edm::LogInfo("EcalDQM") << " Looping over crystals"; - MESet::const_iterator dEnd(digiME.end()); - MESet::const_iterator qItr(qualityME); - for (MESet::const_iterator dItr(digiME.beginChannel()); dItr != dEnd; dItr.toNextChannel()) { + MESet::const_iterator dEnd(digiME.end(GetElectronicsMap())); + MESet::const_iterator qItr(GetElectronicsMap(), qualityME); + for (MESet::const_iterator dItr(digiME.beginChannel(GetElectronicsMap())); dItr != dEnd; + dItr.toNextChannel(GetElectronicsMap())) { DetId id(dItr->getId()); int nDigis(dItr->getBinContent()); - int gain(gainME.getBinContent(id)); - int chid(chidME.getBinContent(id)); - int gainswitch(gainswitchME.getBinContent(id)); + int gain(gainME.getBinContent(getEcalDQMSetupObjects(), id)); + int chid(chidME.getBinContent(getEcalDQMSetupObjects(), id)); + int gainswitch(gainswitchME.getBinContent(getEcalDQMSetupObjects(), id)); qItr = dItr; if (gain > 0 || chid > 0 || gainswitch > 0) { - MonCrystalConsistencyDat &data(crystalConsistencies[crystalID(id)]); + MonCrystalConsistencyDat &data(crystalConsistencies[crystalID(id, GetElectronicsMap())]); data.setProcessedEvents(nDigis); data.setProblematicEvents(gain + chid + gainswitch); data.setProblemsGainZero(gain); @@ -172,22 +173,22 @@ namespace ecaldqm { continue; EcalElectronicsId eid(iDCC + 1, iTower, 1, 1); - std::vector channels(getElectronicsMap()->dccTowerConstituents(iDCC + 1, iTower)); + std::vector channels(GetElectronicsMap()->dccTowerConstituents(iDCC + 1, iTower)); int nDigis(0); bool towerBad(false); for (unsigned iD(0); iD < channels.size(); ++iD) { - int n(digiME.getBinContent(channels[iD])); + int n(digiME.getBinContent(getEcalDQMSetupObjects(), channels[iD])); if (n > nDigis) nDigis = n; - int channelStatus(qualityME.getBinContent(channels[iD])); + int channelStatus(qualityME.getBinContent(getEcalDQMSetupObjects(), channels[iD])); if (channelStatus == kBad || channelStatus == kMBad) towerBad = true; } - int towerid(toweridME.getBinContent(eid)); - int blocksize(blocksizeME.getBinContent(eid)); - int l1a(l1aME.getBinContent(iDCC + 1, iTower)); - int bx(bxME.getBinContent(iDCC + 1, iTower)); + int towerid(toweridME.getBinContent(getEcalDQMSetupObjects(), eid)); + int blocksize(blocksizeME.getBinContent(getEcalDQMSetupObjects(), eid)); + int l1a(l1aME.getBinContent(getEcalDQMSetupObjects(), iDCC + 1, iTower)); + int bx(bxME.getBinContent(getEcalDQMSetupObjects(), iDCC + 1, iTower)); if (towerid > 0 || blocksize > 0 || l1a > 0 || bx > 0) { MonTTConsistencyDat &data(towerConsistencies[towerID(eid)]); @@ -215,9 +216,9 @@ namespace ecaldqm { for (unsigned iPN(1); iPN <= 10; ++iPN) { EcalPnDiodeDetId pnid(subdet, iDCC + 1, iPN); - int nDigis(memdigiME.getBinContent(pnid)); - int memchid(memchidME.getBinContent(pnid)); - int memgain(memgainME.getBinContent(pnid)); + int nDigis(memdigiME.getBinContent(getEcalDQMSetupObjects(), pnid)); + int memchid(memchidME.getBinContent(getEcalDQMSetupObjects(), pnid)); + int memgain(memgainME.getBinContent(getEcalDQMSetupObjects(), pnid)); if (memchid > 0 || memgain > 0) { MonMemChConsistencyDat &data(memChannelConsistencies[memChannelID(pnid)]); @@ -227,7 +228,7 @@ namespace ecaldqm { data.setProblemsID(memchid); data.setProblemsGainZero(memgain); - int channelStatus(pnqualityME.getBinContent(pnid)); + int channelStatus(pnqualityME.getBinContent(getEcalDQMSetupObjects(), pnid)); bool channelBad(channelStatus == kBad || channelStatus == kMBad); data.setTaskStatus(channelBad); @@ -242,16 +243,16 @@ namespace ecaldqm { bool towerBad(false); for (unsigned iPN(1); iPN <= 10; ++iPN) { EcalPnDiodeDetId pnid(subdet, iDCC + 1, iPN); - int n(memdigiME.getBinContent(pnid)); + int n(memdigiME.getBinContent(getEcalDQMSetupObjects(), pnid)); if (n > nDigis) nDigis = n; - int channelStatus(pnqualityME.getBinContent(pnid)); + int channelStatus(pnqualityME.getBinContent(getEcalDQMSetupObjects(), pnid)); if (channelStatus == kBad || channelStatus == kMBad) towerBad = true; } - int towerid(memtoweridME.getBinContent(eid)); - int blocksize(memblocksizeME.getBinContent(eid)); + int towerid(memtoweridME.getBinContent(getEcalDQMSetupObjects(), eid)); + int blocksize(memblocksizeME.getBinContent(getEcalDQMSetupObjects(), eid)); if (towerid > 0 || blocksize > 0) { MonMemTTConsistencyDat &data(memTowerConsistencies[memTowerID(eid)]); @@ -368,11 +369,12 @@ namespace ecaldqm { static_cast(pnME).use(iM); static_cast(pnQualityME).use(iM); - MESet::const_iterator aEnd(ampME.end()); - MESet::const_iterator qItr(qualityME); - MESet::const_iterator oItr(aopME); - MESet::const_iterator tItr(timeME); - for (MESet::const_iterator aItr(ampME.beginChannel()); aItr != aEnd; aItr.toNextChannel()) { + MESet::const_iterator aEnd(ampME.end(GetElectronicsMap())); + MESet::const_iterator qItr(GetElectronicsMap(), qualityME); + MESet::const_iterator oItr(GetElectronicsMap(), aopME); + MESet::const_iterator tItr(GetElectronicsMap(), timeME); + for (MESet::const_iterator aItr(ampME.beginChannel(GetElectronicsMap())); aItr != aEnd; + aItr.toNextChannel(GetElectronicsMap())) { float aEntries(aItr->getBinEntries()); if (aEntries < 1.) continue; @@ -397,7 +399,7 @@ namespace ecaldqm { int channelStatus(qItr->getBinContent()); bool channelBad(channelStatus == kBad || channelStatus == kMBad); - EcalLogicID logicID(crystalID(id)); + EcalLogicID logicID(crystalID(id, GetElectronicsMap())); switch (wl) { case 1: { @@ -464,18 +466,18 @@ namespace ecaldqm { for (unsigned iPN(1); iPN <= 10; ++iPN) { EcalPnDiodeDetId pnid(subdet, iDCC + 1, iPN); - float entries(pnME.getBinEntries(pnid)); + float entries(pnME.getBinEntries(getEcalDQMSetupObjects(), pnid)); if (entries < 1.) continue; - float mean(pnME.getBinContent(pnid)); - float rms(pnME.getBinError(pnid) * std::sqrt(entries)); + float mean(pnME.getBinContent(getEcalDQMSetupObjects(), pnid)); + float rms(pnME.getBinError(getEcalDQMSetupObjects(), pnid) * std::sqrt(entries)); - float pedestalEntries(pnPedestalME.getBinEntries(pnid)); - float pedestalMean(pnPedestalME.getBinContent(pnid)); - float pedestalRms(pnPedestalME.getBinError(pnid) * std::sqrt(pedestalEntries)); + float pedestalEntries(pnPedestalME.getBinEntries(getEcalDQMSetupObjects(), pnid)); + float pedestalMean(pnPedestalME.getBinContent(getEcalDQMSetupObjects(), pnid)); + float pedestalRms(pnPedestalME.getBinError(getEcalDQMSetupObjects(), pnid) * std::sqrt(pedestalEntries)); - int channelStatus(pnQualityME.getBinContent(pnid)); + int channelStatus(pnQualityME.getBinContent(getEcalDQMSetupObjects(), pnid)); bool channelBad(channelStatus == kBad || channelStatus == kMBad); switch (wl) { @@ -626,9 +628,10 @@ namespace ecaldqm { static_cast(pedestalME).use(iM); static_cast(qualityME).use(iM); - MESet::const_iterator pEnd(pedestalME.end()); - MESet::const_iterator qItr(qualityME); - for (MESet::const_iterator pItr(pedestalME.beginChannel()); pItr != pEnd; pItr.toNextChannel()) { + MESet::const_iterator pEnd(pedestalME.end(GetElectronicsMap())); + MESet::const_iterator qItr(GetElectronicsMap(), qualityME); + for (MESet::const_iterator pItr(pedestalME.beginChannel(GetElectronicsMap())); pItr != pEnd; + pItr.toNextChannel(GetElectronicsMap())) { float entries(pItr->getBinEntries()); if (entries < 1.) continue; @@ -638,7 +641,7 @@ namespace ecaldqm { float mean(pItr->getBinContent()); float rms(pItr->getBinError() * std::sqrt(entries)); - EcalLogicID logicID(crystalID(pItr->getId())); + EcalLogicID logicID(crystalID(pItr->getId(), GetElectronicsMap())); if (pedestals.find(logicID) == pedestals.end()) { MonPedestalsDat &insertion(pedestals[logicID]); insertion.setPedMeanG1(-1.); @@ -690,12 +693,12 @@ namespace ecaldqm { for (unsigned iPN(1); iPN <= 10; ++iPN) { EcalPnDiodeDetId pnid(subdet, iDCC + 1, iPN); - float entries(pnPedestalME.getBinEntries(pnid)); + float entries(pnPedestalME.getBinEntries(getEcalDQMSetupObjects(), pnid)); if (entries < 1.) continue; - float mean(pnPedestalME.getBinContent(pnid)); - float rms(pnPedestalME.getBinError(pnid) * std::sqrt(entries)); + float mean(pnPedestalME.getBinContent(getEcalDQMSetupObjects(), pnid)); + float rms(pnPedestalME.getBinError(getEcalDQMSetupObjects(), pnid) * std::sqrt(entries)); EcalLogicID logicID(lmPNID(pnid)); if (pnPedestals.find(logicID) == pnPedestals.end()) { @@ -719,7 +722,7 @@ namespace ecaldqm { break; } - int channelStatus(pnQualityME.getBinContent(pnid)); + int channelStatus(pnQualityME.getBinContent(getEcalDQMSetupObjects(), pnid)); bool channelBad(channelStatus == kBad || channelStatus == kMBad); if (channelBad) data.setTaskStatus(true); @@ -758,9 +761,10 @@ namespace ecaldqm { MESet const &pedestalME(source_.at("Pedestal")); MESet const &qualityME(source_.at("Quality")); - MESet::const_iterator pEnd(pedestalME.end()); - MESet::const_iterator qItr(qualityME); - for (MESet::const_iterator pItr(pedestalME.beginChannel()); pItr != pEnd; pItr.toNextChannel()) { + MESet::const_iterator pEnd(pedestalME.end(GetElectronicsMap())); + MESet::const_iterator qItr(GetElectronicsMap(), qualityME); + for (MESet::const_iterator pItr(pedestalME.beginChannel(GetElectronicsMap())); pItr != pEnd; + pItr.toNextChannel(GetElectronicsMap())) { float entries(pItr->getBinEntries()); if (entries < 1.) continue; @@ -770,7 +774,7 @@ namespace ecaldqm { float mean(pItr->getBinContent()); float rms(pItr->getBinError() * std::sqrt(entries)); - MonPedestalsOnlineDat &data(pedestals[crystalID(pItr->getId())]); + MonPedestalsOnlineDat &data(pedestals[crystalID(pItr->getId(), GetElectronicsMap())]); data.setADCMeanG12(mean); data.setADCRMSG12(rms); @@ -857,9 +861,10 @@ namespace ecaldqm { static_cast(shapeME).use(iM); static_cast(qualityME).use(iM); - MESet::const_iterator aEnd(amplitudeME.end()); - MESet::const_iterator qItr(qualityME); - for (MESet::const_iterator aItr(amplitudeME.beginChannel()); aItr != aEnd; aItr.toNextChannel()) { + MESet::const_iterator aEnd(amplitudeME.end(GetElectronicsMap())); + MESet::const_iterator qItr(GetElectronicsMap(), qualityME); + for (MESet::const_iterator aItr(amplitudeME.beginChannel(GetElectronicsMap())); aItr != aEnd; + aItr.toNextChannel(GetElectronicsMap())) { float entries(aItr->getBinEntries()); if (entries < 1.) continue; @@ -869,7 +874,7 @@ namespace ecaldqm { float mean(aItr->getBinContent()); float rms(aItr->getBinError() * std::sqrt(entries)); - EcalLogicID logicID(crystalID(aItr->getId())); + EcalLogicID logicID(crystalID(aItr->getId(), GetElectronicsMap())); if (amplitude.find(logicID) == amplitude.end()) { MonTestPulseDat &insertion(amplitude[logicID]); insertion.setADCMeanG1(-1.); @@ -907,7 +912,7 @@ namespace ecaldqm { for (unsigned iSM(0); iSM < 54; ++iSM) { std::vector samples(10, 0.); - std::vector ids(getElectronicsMap()->dccConstituents(iSM + 1)); + std::vector ids(GetElectronicsMap()->dccConstituents(iSM + 1)); unsigned nId(ids.size()); unsigned nChannels(0); EcalLogicID logicID; @@ -915,15 +920,15 @@ namespace ecaldqm { DetId &id(ids[iD]); if (iD == 0) - logicID = crystalID(id); + logicID = crystalID(id, GetElectronicsMap()); - if (shapeME.getBinEntries(id, 1) < 1.) + if (shapeME.getBinEntries(getEcalDQMSetupObjects(), id, 1) < 1.) continue; ++nChannels; for (int i(0); i < 10; ++i) - samples[i] += shapeME.getBinContent(id, i + 1); + samples[i] += shapeME.getBinContent(getEcalDQMSetupObjects(), id, i + 1); } if (nChannels == 0) @@ -960,15 +965,15 @@ namespace ecaldqm { for (unsigned iPN(1); iPN <= 10; ++iPN) { EcalPnDiodeDetId pnid(subdet, iDCC + 1, iPN); - float entries(pnAmplitudeME.getBinEntries(pnid)); + float entries(pnAmplitudeME.getBinEntries(getEcalDQMSetupObjects(), pnid)); if (entries < 1.) continue; - float mean(pnAmplitudeME.getBinContent(pnid)); - float rms(pnAmplitudeME.getBinError(pnid) * std::sqrt(entries)); - float pedestalEntries(pnPedestalME.getBinEntries(pnid)); - float pedestalMean(pnPedestalME.getBinContent(pnid)); - float pedestalRms(pnPedestalME.getBinError(pnid) * std::sqrt(pedestalEntries)); + float mean(pnAmplitudeME.getBinContent(getEcalDQMSetupObjects(), pnid)); + float rms(pnAmplitudeME.getBinError(getEcalDQMSetupObjects(), pnid) * std::sqrt(entries)); + float pedestalEntries(pnPedestalME.getBinEntries(getEcalDQMSetupObjects(), pnid)); + float pedestalMean(pnPedestalME.getBinContent(getEcalDQMSetupObjects(), pnid)); + float pedestalRms(pnPedestalME.getBinError(getEcalDQMSetupObjects(), pnid) * std::sqrt(pedestalEntries)); EcalLogicID logicID(lmPNID(pnid)); if (pnAmplitude.find(logicID) == pnAmplitude.end()) { @@ -1001,7 +1006,7 @@ namespace ecaldqm { break; } - int channelStatus(pnQualityME.getBinContent(pnid)); + int channelStatus(pnQualityME.getBinContent(getEcalDQMSetupObjects(), pnid)); bool channelBad(channelStatus == kBad || channelStatus == kMBad); if (channelBad) data.setTaskStatus(true); @@ -1042,9 +1047,10 @@ namespace ecaldqm { MESet const &timingME(source_.at("Timing")); MESet const &qualityME(source_.at("Quality")); - MESet::const_iterator tEnd(timingME.end()); - MESet::const_iterator qItr(qualityME); - for (MESet::const_iterator tItr(timingME.beginChannel()); tItr != tEnd; tItr.toNextChannel()) { + MESet::const_iterator tEnd(timingME.end(GetElectronicsMap())); + MESet::const_iterator qItr(GetElectronicsMap(), qualityME); + for (MESet::const_iterator tItr(timingME.beginChannel(GetElectronicsMap())); tItr != tEnd; + tItr.toNextChannel(GetElectronicsMap())) { float entries(tItr->getBinEntries()); if (entries < 1.) continue; @@ -1054,7 +1060,7 @@ namespace ecaldqm { float mean(tItr->getBinContent()); float rms(tItr->getBinError() * std::sqrt(entries)); - MonTimingCrystalDat &data(timing[crystalID(tItr->getId())]); + MonTimingCrystalDat &data(timing[crystalID(tItr->getId(), GetElectronicsMap())]); data.setTimingMean(mean); data.setTimingRMS(rms); @@ -1139,11 +1145,12 @@ x PNDiodeTask.Pedestal (i13, i14) // static_cast(pnME).use(iM); // static_cast(pnQualityME).use(iM); - MESet::const_iterator aEnd(ampME.end()); - MESet::const_iterator qItr(qualityME); - MESet::const_iterator oItr(aopME); - MESet::const_iterator tItr(timeME); - for (MESet::const_iterator aItr(ampME.beginChannel()); aItr != aEnd; aItr.toNextChannel()) { + MESet::const_iterator aEnd(ampME.end(GetElectronicsMap())); + MESet::const_iterator qItr(GetElectronicsMap(), qualityME); + MESet::const_iterator oItr(GetElectronicsMap(), aopME); + MESet::const_iterator tItr(GetElectronicsMap(), timeME); + for (MESet::const_iterator aItr(ampME.beginChannel(GetElectronicsMap())); aItr != aEnd; + aItr.toNextChannel(GetElectronicsMap())) { float aEntries(aItr->getBinEntries()); if (aEntries < 1.) continue; @@ -1168,7 +1175,7 @@ x PNDiodeTask.Pedestal (i13, i14) int channelStatus(qItr->getBinContent()); bool channelBad(channelStatus == kBad || channelStatus == kMBad); - EcalLogicID logicID(crystalID(id)); + EcalLogicID logicID(crystalID(id, GetElectronicsMap())); switch (wl) { case 1: { @@ -1295,9 +1302,10 @@ x PNDiodeTask.Pedestal (i13, i14) MESet const &occupancyME(source_.at("Occupancy")); MESet const &energyME(source_.at("Energy")); - MESet::const_iterator oEnd(occupancyME.end()); - MESet::const_iterator eItr(energyME); - for (MESet::const_iterator oItr(occupancyME.beginChannel()); oItr != oEnd; oItr.toNextChannel()) { + MESet::const_iterator oEnd(occupancyME.end(GetElectronicsMap())); + MESet::const_iterator eItr(GetElectronicsMap(), energyME); + for (MESet::const_iterator oItr(occupancyME.beginChannel(GetElectronicsMap())); oItr != oEnd; + oItr.toNextChannel(GetElectronicsMap())) { if (oItr->getME()->getTH1()->GetEntries() < 1000.) continue; @@ -1310,7 +1318,7 @@ x PNDiodeTask.Pedestal (i13, i14) int eEntries(eItr->getBinEntries()); float energy(eEntries > 10 ? eItr->getBinContent() : -1.); - MonOccupancyDat &data(occupancy[crystalID(oItr->getId())]); + MonOccupancyDat &data(occupancy[crystalID(oItr->getId(), GetElectronicsMap())]); data.setEventsOverLowThreshold(entries); data.setEventsOverHighThreshold(eEntries); data.setAvgEnergy(energy); diff --git a/DQM/EcalMonitorDbModule/src/LogicIDTranslation.cc b/DQM/EcalMonitorDbModule/src/LogicIDTranslation.cc index 85149bb24976c..ec1480a693709 100644 --- a/DQM/EcalMonitorDbModule/src/LogicIDTranslation.cc +++ b/DQM/EcalMonitorDbModule/src/LogicIDTranslation.cc @@ -18,8 +18,8 @@ namespace ecaldqm { } } - EcalLogicID crystalID(DetId const &_id) { - unsigned iDCC(dccId(_id) - 1); + EcalLogicID crystalID(DetId const &_id, EcalElectronicsMapping const *electronicsMap) { + unsigned iDCC(dccId(_id, electronicsMap) - 1); if (iDCC <= kEEmHigh || iDCC >= kEEpLow) { EEDetId eeid(_id); return EcalLogicID("EE_crystal_number", diff --git a/DQM/EcalMonitorTasks/interface/EcalFEDMonitor.h b/DQM/EcalMonitorTasks/interface/EcalFEDMonitor.h index a257800f4260c..5e6c124e3f2a9 100644 --- a/DQM/EcalMonitorTasks/interface/EcalFEDMonitor.h +++ b/DQM/EcalMonitorTasks/interface/EcalFEDMonitor.h @@ -21,23 +21,29 @@ #include "DQM/EcalCommon/interface/EcalDQMCommonUtils.h" +#include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h" + #include // Making the class templated temporarily, until HLT sequence can be fixed (is using EBHltTask and EEHltTask currently) template class EcalFEDMonitorTemp : public DQMEDAnalyzer { public: - EcalFEDMonitorTemp(edm::ParameterSet const&); + EcalFEDMonitorTemp(edm::ParameterSet const &); ~EcalFEDMonitorTemp() override {} private: - void analyze(edm::Event const&, edm::EventSetup const&) override; - void dqmBeginRun(edm::Run const&, edm::EventSetup const&) override; + void analyze(edm::Event const &, edm::EventSetup const &) override; + void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override; - void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override; + void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override; enum MEs { kEBOccupancy, kEBFatal, kEBNonFatal, kEEOccupancy, kEEFatal, kEENonFatal, nMEs }; + EcalElectronicsMapping const *electronicsMap; + void setElectronicsMap(edm::EventSetup const &); + EcalElectronicsMapping const *GetElectronicsMap(); + std::string folderName_; edm::EDGetTokenT FEDRawDataToken_; @@ -50,7 +56,7 @@ class EcalFEDMonitorTemp : public DQMEDAnalyzer { edm::EDGetTokenT towerIdErrorsToken_; edm::EDGetTokenT blockSizeErrorsToken_; - std::vector MEs_; + std::vector MEs_; }; #endif diff --git a/DQM/EcalMonitorTasks/plugins/EcalDQMonitorTask.cc b/DQM/EcalMonitorTasks/plugins/EcalDQMonitorTask.cc index be91d9afd06af..68cda8f06f8c4 100644 --- a/DQM/EcalMonitorTasks/plugins/EcalDQMonitorTask.cc +++ b/DQM/EcalMonitorTasks/plugins/EcalDQMonitorTask.cc @@ -99,7 +99,9 @@ void EcalDQMonitorTask::fillDescriptions(edm::ConfigurationDescriptions& _descs) } void EcalDQMonitorTask::bookHistograms(DQMStore::IBooker& _ibooker, edm::Run const&, edm::EventSetup const& _es) { - ecaldqmGetSetupObjects(_es); + executeOnWorkers_([&_es](ecaldqm::DQWorker* worker) { worker->setSetupObjects(_es); }, + "ecaldqmGetSetupObjects", + "Getting EventSetup Objects"); executeOnWorkers_([&_ibooker](ecaldqm::DQWorker* worker) { worker->bookMEs(_ibooker); }, "bookMEs", "Booking MEs"); } diff --git a/DQM/EcalMonitorTasks/plugins/EcalFEDMonitor.cc b/DQM/EcalMonitorTasks/plugins/EcalFEDMonitor.cc index e1a2931934fcc..67b3db366d4eb 100644 --- a/DQM/EcalMonitorTasks/plugins/EcalFEDMonitor.cc +++ b/DQM/EcalMonitorTasks/plugins/EcalFEDMonitor.cc @@ -33,12 +33,7 @@ EcalFEDMonitorTemp::EcalFEDMonitorTemp(edm::ParameterSet const& _ps) template void EcalFEDMonitorTemp::dqmBeginRun(edm::Run const&, edm::EventSetup const& _es) { - if (!ecaldqm::checkElectronicsMap(false)) { - // set up ecaldqm::electronicsMap in EcalDQMCommonUtils - edm::ESHandle elecMapHandle; - _es.get().get(elecMapHandle); - ecaldqm::setElectronicsMap(elecMapHandle.product()); - } + setElectronicsMap(_es); } template @@ -114,7 +109,7 @@ void EcalFEDMonitorTemp::analyze(edm::Event const& _evt, edm::EventSetup if ((SUBDET == EcalBarrel || SUBDET < 0) && _evt.getByToken(ebGainErrorsToken_, ebHndl)) { EBDetIdCollection::const_iterator ebEnd(ebHndl->end()); for (EBDetIdCollection::const_iterator ebItr(ebHndl->begin()); ebItr != ebEnd; ++ebItr) { - unsigned iDCC(ecaldqm::dccId(*ebItr) - 1); + unsigned iDCC(ecaldqm::dccId(*ebItr, GetElectronicsMap()) - 1); double normalization(ecaldqm::nCrystals(iDCC + 1)); if (normalization < 1.) @@ -126,7 +121,7 @@ void EcalFEDMonitorTemp::analyze(edm::Event const& _evt, edm::EventSetup if ((SUBDET == EcalEndcap || SUBDET < 0) && _evt.getByToken(eeGainErrorsToken_, eeHndl)) { EEDetIdCollection::const_iterator eeEnd(eeHndl->end()); for (EEDetIdCollection::const_iterator eeItr(eeHndl->begin()); eeItr != eeEnd; ++eeItr) { - unsigned iDCC(ecaldqm::dccId(*eeItr) - 1); + unsigned iDCC(ecaldqm::dccId(*eeItr, GetElectronicsMap()) - 1); double normalization(ecaldqm::nCrystals(iDCC + 1)); if (normalization < 1.) @@ -139,7 +134,7 @@ void EcalFEDMonitorTemp::analyze(edm::Event const& _evt, edm::EventSetup if ((SUBDET == EcalBarrel || SUBDET < 0) && _evt.getByToken(ebChIdErrorsToken_, ebHndl)) { EBDetIdCollection::const_iterator ebEnd(ebHndl->end()); for (EBDetIdCollection::const_iterator ebItr(ebHndl->begin()); ebItr != ebEnd; ++ebItr) { - unsigned iDCC(ecaldqm::dccId(*ebItr) - 1); + unsigned iDCC(ecaldqm::dccId(*ebItr, GetElectronicsMap()) - 1); double normalization(ecaldqm::nCrystals(iDCC + 1)); if (normalization < 1.) @@ -151,7 +146,7 @@ void EcalFEDMonitorTemp::analyze(edm::Event const& _evt, edm::EventSetup if ((SUBDET == EcalEndcap || SUBDET < 0) && _evt.getByToken(eeChIdErrorsToken_, eeHndl)) { EEDetIdCollection::const_iterator eeEnd(eeHndl->end()); for (EEDetIdCollection::const_iterator eeItr(eeHndl->begin()); eeItr != eeEnd; ++eeItr) { - unsigned iDCC(ecaldqm::dccId(*eeItr) - 1); + unsigned iDCC(ecaldqm::dccId(*eeItr, GetElectronicsMap()) - 1); double normalization(ecaldqm::nCrystals(iDCC + 1)); if (normalization < 1.) @@ -164,7 +159,7 @@ void EcalFEDMonitorTemp::analyze(edm::Event const& _evt, edm::EventSetup if ((SUBDET == EcalBarrel || SUBDET < 0) && _evt.getByToken(ebGainSwitchErrorsToken_, ebHndl)) { EBDetIdCollection::const_iterator ebEnd(ebHndl->end()); for (EBDetIdCollection::const_iterator ebItr(ebHndl->begin()); ebItr != ebEnd; ++ebItr) { - unsigned iDCC(ecaldqm::dccId(*ebItr) - 1); + unsigned iDCC(ecaldqm::dccId(*ebItr, GetElectronicsMap()) - 1); double normalization(ecaldqm::nCrystals(iDCC + 1)); if (normalization < 1.) @@ -176,7 +171,7 @@ void EcalFEDMonitorTemp::analyze(edm::Event const& _evt, edm::EventSetup if ((SUBDET == EcalEndcap || SUBDET < 0) && _evt.getByToken(eeGainSwitchErrorsToken_, eeHndl)) { EEDetIdCollection::const_iterator eeEnd(eeHndl->end()); for (EEDetIdCollection::const_iterator eeItr(eeHndl->begin()); eeItr != eeEnd; ++eeItr) { - unsigned iDCC(ecaldqm::dccId(*eeItr) - 1); + unsigned iDCC(ecaldqm::dccId(*eeItr, GetElectronicsMap()) - 1); double normalization(ecaldqm::nCrystals(iDCC + 1)); if (normalization < 1.) @@ -229,6 +224,20 @@ void EcalFEDMonitorTemp::analyze(edm::Event const& _evt, edm::EventSetup } } +template +void EcalFEDMonitorTemp::setElectronicsMap(edm::EventSetup const& _es) { + edm::ESHandle elecMapHandle; + _es.get().get(elecMapHandle); + electronicsMap = elecMapHandle.product(); +} + +template +EcalElectronicsMapping const* EcalFEDMonitorTemp::GetElectronicsMap() { + if (!electronicsMap) + throw cms::Exception("InvalidCall") << "Electronics Mapping not initialized"; + return electronicsMap; +} + typedef EcalFEDMonitorTemp EBHltTask; typedef EcalFEDMonitorTemp EEHltTask; typedef EcalFEDMonitorTemp<-1> EcalFEDMonitor; diff --git a/DQM/EcalMonitorTasks/python/PNDiodeTask_cfi.py b/DQM/EcalMonitorTasks/python/PNDiodeTask_cfi.py index cb7a51dccf35a..5eed2b714d5d7 100644 --- a/DQM/EcalMonitorTasks/python/PNDiodeTask_cfi.py +++ b/DQM/EcalMonitorTasks/python/PNDiodeTask_cfi.py @@ -1,5 +1,12 @@ import FWCore.ParameterSet.Config as cms +MEMErrorTypes = [ + 'TOWERID', + 'BLOCKSIZE', + 'CHID', + 'GAIN' +] + ecalPNDiodeTask = cms.untracked.PSet( MEs = cms.untracked.PSet( OccupancySummary = cms.untracked.PSet( @@ -9,6 +16,24 @@ btype = cms.untracked.string('Crystal'), description = cms.untracked.string('Occupancy of PN digis in calibration events.') ), + MEMErrors = cms.untracked.PSet( + path = cms.untracked.string('Ecal/MEM/IntegrityTask MEMErrors'), + kind = cms.untracked.string('TH2F'), + xaxis = cms.untracked.PSet( + high = cms.untracked.double(55), + nbins = cms.untracked.int32(108), + low = cms.untracked.double(1), + ), + yaxis = cms.untracked.PSet( + high = cms.untracked.double(3.5), + nbins = cms.untracked.int32(4), + low = cms.untracked.double(-0.5), + labels = cms.untracked.vstring(MEMErrorTypes) + ), + otype = cms.untracked.string('Ecal'), + btype = cms.untracked.string('User'), + description = cms.untracked.string('Integrity error and error type counter for MEM boxes. Each x-axis tick corresponds to one SuperModule (SM) as indexed by DCC Id and contains two bins corresponding to the MEM boxes (DCC tower Ids = 69, 70). Nominally, this plot should be empty. Mapping from DCC Id to SM name appears below.
01:EE-07  19:EB-10  37:EB+10
02:EE-08 20:EB-11 38:EB+11
03:EE-09 21:EB-12 39:EB+12
04:EE-01 22:EB-13 40:EB+13
05:EE-02 23:EB-14 41:EB+14
06:EE-03 24:EB-15 42:EB+15
07:EE-04 25:EB-16 43:EB+16
08:EE-05 26:EB-17 44:EB+17
09:EE-06 27:EB-18 45:EB+18
10:EB-01 28:EB+01 46:EE+07
11:EB-02 29:EB+02 47:EE+08
12:EB-03 30:EB+03 48:EE+09
13:EB-04 31:EB+04 49:EE+01
14:EB-05 32:EB+05 50:EE+02
15:EB-06 33:EB+06 51:EE+03
16:EB-07 34:EB+07 52:EE+04
17:EB-08 35:EB+08 53:EE+05
18:EB-09 36:EB+09 54:EE+06
') + ), MEMTowerId = cms.untracked.PSet( # path = cms.untracked.string('Ecal/Errors/Integrity/MEMTowerId/'), path = cms.untracked.string('%(subdet)s/%(prefix)sIntegrityTask/MemTTId/%(prefix)sIT MemTTId %(sm)s'), diff --git a/DQM/EcalMonitorTasks/python/RawDataTask_cfi.py b/DQM/EcalMonitorTasks/python/RawDataTask_cfi.py index 2955f4802c611..26dbf239b31f1 100644 --- a/DQM/EcalMonitorTasks/python/RawDataTask_cfi.py +++ b/DQM/EcalMonitorTasks/python/RawDataTask_cfi.py @@ -285,8 +285,24 @@ btype = cms.untracked.string('SuperCrystal'), perLumi = cms.untracked.bool(True), description = cms.untracked.string('FE status error occupancy map for this lumisection. Nominal FE status flags such as ENABLED, SUPPRESSED, FIFOFILL, FIFOFULLL1ADESYNC, and FORCEDZS are NOT included.') + ), + FEStatusMEM = cms.untracked.PSet( + path = cms.untracked.string('Ecal/MEM/StatusFlagsTask MEM front-end status bits'), + kind = cms.untracked.string('TH2F'), + xaxis = cms.untracked.PSet( + high = cms.untracked.double(55), + nbins = cms.untracked.int32(108), + low = cms.untracked.double(1), + ), + yaxis = cms.untracked.PSet( + high = cms.untracked.double(15.5), + nbins = cms.untracked.int32(16), + low = cms.untracked.double(-0.5), + labels = cms.untracked.vstring(statuses) + ), + otype = cms.untracked.string('Ecal'), + btype = cms.untracked.string('User'), + description = cms.untracked.string('Front-end (FE) status counter for MEM boxes. Each x-axis tick corresponds to one SuperModule (SM) as indexed by DCC Id and contains two bins corresponding to the MEM boxes (DCC tower Ids = 69, 70). Nominal status is SUPPRESSED. EE+/-2,3,7,8 are not connected to MEM boxes and instead appear with status DISABLED. Mapping from DCC Id to SM name appears below.
01:EE-07  19:EB-10  37:EB+10
02:EE-08 20:EB-11 38:EB+11
03:EE-09 21:EB-12 39:EB+12
04:EE-01 22:EB-13 40:EB+13
05:EE-02 23:EB-14 41:EB+14
06:EE-03 24:EB-15 42:EB+15
07:EE-04 25:EB-16 43:EB+16
08:EE-05 26:EB-17 44:EB+17
09:EE-06 27:EB-18 45:EB+18
10:EB-01 28:EB+01 46:EE+07
11:EB-02 29:EB+02 47:EE+08
12:EB-03 30:EB+03 48:EE+09
13:EB-04 31:EB+04 49:EE+01
14:EB-05 32:EB+05 50:EE+02
15:EB-06 33:EB+06 51:EE+03
16:EB-07 34:EB+07 52:EE+04
17:EB-08 35:EB+08 53:EE+05
18:EB-09 36:EB+09 54:EE+06
') ) ) ) - - diff --git a/DQM/EcalMonitorTasks/src/ClusterTask.cc b/DQM/EcalMonitorTasks/src/ClusterTask.cc index 3e3e38110b316..e5c476dd001cf 100644 --- a/DQM/EcalMonitorTasks/src/ClusterTask.cc +++ b/DQM/EcalMonitorTasks/src/ClusterTask.cc @@ -173,9 +173,9 @@ namespace ecaldqm { for (unsigned iT(0); iT != nTriggerTypes; ++iT) { if (!triggered_[iT]) continue; - meTriggers.fill(iT + 0.5); + meTriggers.fill(getEcalDQMSetupObjects(), iT + 0.5); if (triggered_.count() == 1) - meExclusiveTriggers.fill(iT + 0.5); + meExclusiveTriggers.fill(getEcalDQMSetupObjects(), iT + 0.5); } } @@ -248,7 +248,7 @@ namespace ecaldqm { if (id.null()) { GlobalPoint gp(position.x(), position.y(), position.z()); CaloSubdetectorGeometry const* subgeom( - getGeometry()->getSubdetectorGeometry(DetId::Ecal, isBarrel ? EcalBarrel : EcalEndcap)); + GetGeometry()->getSubdetectorGeometry(DetId::Ecal, isBarrel ? EcalBarrel : EcalEndcap)); id = subgeom->getClosestCell(gp); } @@ -264,26 +264,26 @@ namespace ecaldqm { if (subdet == EcalEndcap && position.z() < 0.) subdet = -EcalEndcap; - meBCE.fill(id, energy); + meBCE.fill(getEcalDQMSetupObjects(), id, energy); - meBCEMap.fill(id, energy); - meBCEMapProjEta.fill(posEta, energy); - meBCEMapProjPhi.fill(subdet, posPhi, energy); - meBCEtMapProjEta.fill(posEta, et); - meBCEtMapProjPhi.fill(subdet, posPhi, et); + meBCEMap.fill(getEcalDQMSetupObjects(), id, energy); + meBCEMapProjEta.fill(getEcalDQMSetupObjects(), posEta, energy); + meBCEMapProjPhi.fill(getEcalDQMSetupObjects(), subdet, posPhi, energy); + meBCEtMapProjEta.fill(getEcalDQMSetupObjects(), posEta, et); + meBCEtMapProjPhi.fill(getEcalDQMSetupObjects(), subdet, posPhi, et); - meBCOccupancy.fill(id); - meBCOccupancyProjEta.fill(posEta); - meBCOccupancyProjPhi.fill(subdet, posPhi); + meBCOccupancy.fill(getEcalDQMSetupObjects(), id); + meBCOccupancyProjEta.fill(getEcalDQMSetupObjects(), posEta); + meBCOccupancyProjPhi.fill(getEcalDQMSetupObjects(), subdet, posPhi); float size(bcItr->size()); - meBCSize.fill(id, size); - meTrendBCSize.fill(id, double(timestamp_.iLumi), size); + meBCSize.fill(getEcalDQMSetupObjects(), id, size); + meTrendBCSize.fill(getEcalDQMSetupObjects(), id, double(timestamp_.iLumi), size); - meBCSizeMap.fill(id, size); - meBCSizeMapProjEta.fill(posEta, size); - meBCSizeMapProjPhi.fill(subdet, posPhi, size); + meBCSizeMap.fill(getEcalDQMSetupObjects(), id, size); + meBCSizeMapProjEta.fill(getEcalDQMSetupObjects(), posEta, size); + meBCSizeMapProjPhi.fill(getEcalDQMSetupObjects(), subdet, posPhi, size); int zside(position.z() > 0 ? 1 : 0); nBC[zside]++; @@ -304,12 +304,12 @@ namespace ecaldqm { } if (isBarrel) { - meBCNum.fill(EcalBarrel, nBC[0] + nBC[1]); - meTrendNBC.fill(EcalBarrel, double(timestamp_.iLumi), nBC[0] + nBC[1]); + meBCNum.fill(getEcalDQMSetupObjects(), EcalBarrel, nBC[0] + nBC[1]); + meTrendNBC.fill(getEcalDQMSetupObjects(), EcalBarrel, double(timestamp_.iLumi), nBC[0] + nBC[1]); } else { - meBCNum.fill(-EcalEndcap, nBC[0]); - meBCNum.fill(EcalEndcap, nBC[1]); - meTrendNBC.fill(EcalEndcap, double(timestamp_.iLumi), nBC[0] + nBC[1]); + meBCNum.fill(getEcalDQMSetupObjects(), -EcalEndcap, nBC[0]); + meBCNum.fill(getEcalDQMSetupObjects(), EcalEndcap, nBC[1]); + meTrendNBC.fill(getEcalDQMSetupObjects(), EcalEndcap, double(timestamp_.iLumi), nBC[0] + nBC[1]); } // if(ievt_ % massCalcPrescale_ != 0) return; @@ -404,7 +404,7 @@ namespace ecaldqm { GlobalPoint gp(position.x(), position.y(), position.z()); CaloSubdetectorGeometry const* subgeom( - getGeometry()->getSubdetectorGeometry(DetId::Ecal, isBarrel ? EcalBarrel : EcalEndcap)); + GetGeometry()->getSubdetectorGeometry(DetId::Ecal, isBarrel ? EcalBarrel : EcalEndcap)); seedId = subgeom->getClosestCell(gp); } @@ -422,37 +422,37 @@ namespace ecaldqm { float rawEnergy(scItr->rawEnergy()); float size(scItr->size()); - meSCE.fill(seedId, energy); - meSCELow.fill(seedId, energy); + meSCE.fill(getEcalDQMSetupObjects(), seedId, energy); + meSCELow.fill(getEcalDQMSetupObjects(), seedId, energy); - meSCRawE.fill(seedId, rawEnergy); - meSCRawELow.fill(seedId, rawEnergy); + meSCRawE.fill(getEcalDQMSetupObjects(), seedId, rawEnergy); + meSCRawELow.fill(getEcalDQMSetupObjects(), seedId, rawEnergy); - meSCNBCs.fill(seedId, scItr->clustersSize()); - meSCNcrystals.fill(seedId, size); + meSCNBCs.fill(getEcalDQMSetupObjects(), seedId, scItr->clustersSize()); + meSCNcrystals.fill(getEcalDQMSetupObjects(), seedId, size); if (doExtra_) - meSCSizeVsEnergy->fill(subdet, energy, size); + meSCSizeVsEnergy->fill(getEcalDQMSetupObjects(), subdet, energy, size); - meTrendSCSize.fill(seedId, double(timestamp_.iLumi), size); + meTrendSCSize.fill(getEcalDQMSetupObjects(), seedId, double(timestamp_.iLumi), size); - meSCSeedEnergy.fill(seedId, seedItr->energy()); - meSCClusterVsSeed.fill(seedId, seedItr->energy(), energy); + meSCSeedEnergy.fill(getEcalDQMSetupObjects(), seedId, seedItr->energy()); + meSCClusterVsSeed.fill(getEcalDQMSetupObjects(), seedId, seedItr->energy(), energy); - meSCSeedOccupancy.fill(seedId); + meSCSeedOccupancy.fill(getEcalDQMSetupObjects(), seedId); if (doExtra_ && energy > energyThreshold_) - meSCSeedOccupancyHighE->fill(seedId); + meSCSeedOccupancyHighE->fill(getEcalDQMSetupObjects(), seedId); if (scItr->size() == 1) - meSingleCrystalCluster.fill(seedId); + meSingleCrystalCluster.fill(getEcalDQMSetupObjects(), seedId); - float e3x3(EcalClusterTools::e3x3(*scItr->seed(), hits, getTopology())); - float e3x3Full(noZS::EcalClusterTools::e3x3(*scItr->seed(), hits, getTopology())); + float e3x3(EcalClusterTools::e3x3(*scItr->seed(), hits, GetTopology())); + float e3x3Full(noZS::EcalClusterTools::e3x3(*scItr->seed(), hits, GetTopology())); - meSCR9.fill(seedId, e3x3 / energy); - meSCR9Raw.fill(seedId, e3x3 / rawEnergy); - meSCR9Full.fill(seedId, e3x3Full / energy); - meSCR9FullRaw.fill(seedId, e3x3Full / rawEnergy); + meSCR9.fill(getEcalDQMSetupObjects(), seedId, e3x3 / energy); + meSCR9Raw.fill(getEcalDQMSetupObjects(), seedId, e3x3 / rawEnergy); + meSCR9Full.fill(getEcalDQMSetupObjects(), seedId, e3x3Full / energy); + meSCR9FullRaw.fill(getEcalDQMSetupObjects(), seedId, e3x3Full / rawEnergy); if (doExtra_) { for (unsigned iT(0); iT != nTriggerTypes; ++iT) { @@ -460,29 +460,29 @@ namespace ecaldqm { continue; static_cast(meSCSeedOccupancyTrig)->use(trigTypeToME_[iT]); - meSCSeedOccupancyTrig->fill(seedId); + meSCSeedOccupancyTrig->fill(getEcalDQMSetupObjects(), seedId); // exclusive if (triggered_.count() == 1) { static_cast(meSCSeedTimeTrigEx)->use(trigTypeToME_[iT]); static_cast(meSCSeedTimeMapTrigEx)->use(trigTypeToME_[iT]); - meSCSeedTimeTrigEx->fill(subdet, seedItr->time()); - meSCSeedTimeMapTrigEx->fill(seedId, seedItr->time()); + meSCSeedTimeTrigEx->fill(getEcalDQMSetupObjects(), subdet, seedItr->time()); + meSCSeedTimeMapTrigEx->fill(getEcalDQMSetupObjects(), seedId, seedItr->time()); } } - meSCOccupancyProjEta->fill(subdet, scItr->eta()); - meSCOccupancyProjPhi->fill(subdet, phi(scItr->phi())); + meSCOccupancyProjEta->fill(getEcalDQMSetupObjects(), subdet, scItr->eta()); + meSCOccupancyProjPhi->fill(getEcalDQMSetupObjects(), subdet, phi(scItr->phi())); if (isBarrel) { float e1(EcalClusterTools::eMax(*scItr, ebHits_)); if (e1 > swissCrossMaxThreshold_) { - float e4(EcalClusterTools::eTop(*scItr, ebHits_, getTopology()) + - EcalClusterTools::eRight(*scItr, ebHits_, getTopology()) + - EcalClusterTools::eBottom(*scItr, ebHits_, getTopology()) + - EcalClusterTools::eLeft(*scItr, ebHits_, getTopology())); + float e4(EcalClusterTools::eTop(*scItr, ebHits_, GetTopology()) + + EcalClusterTools::eRight(*scItr, ebHits_, GetTopology()) + + EcalClusterTools::eBottom(*scItr, ebHits_, GetTopology()) + + EcalClusterTools::eLeft(*scItr, ebHits_, GetTopology())); - meSCSwissCross->fill(1. - e4 / e1); + meSCSwissCross->fill(getEcalDQMSetupObjects(), 1. - e4 / e1); } } } @@ -499,8 +499,8 @@ namespace ecaldqm { // } } - MEs_.at("SCNum").fill(subdet, nSC); - MEs_.at("TrendNSC").fill(subdet, double(timestamp_.iLumi), nSC); + MEs_.at("SCNum").fill(getEcalDQMSetupObjects(), subdet, nSC); + MEs_.at("TrendNSC").fill(getEcalDQMSetupObjects(), subdet, double(timestamp_.iLumi), nSC); // if(ievt_ % massCalcPrescale_ != 0) return; diff --git a/DQM/EcalMonitorTasks/src/EnergyTask.cc b/DQM/EcalMonitorTasks/src/EnergyTask.cc index 8171b9a662d15..7670fce2e20dd 100644 --- a/DQM/EcalMonitorTasks/src/EnergyTask.cc +++ b/DQM/EcalMonitorTasks/src/EnergyTask.cc @@ -28,7 +28,7 @@ namespace ecaldqm { void EnergyTask::beginEvent(edm::Event const& _evt, edm::EventSetup const& _es, bool const& ByLumiResetSwitch, bool&) { if (ByLumiResetSwitch) { - MEs_.at("HitMapAllByLumi").reset(); + MEs_.at("HitMapAllByLumi").reset(GetElectronicsMap()); } } @@ -55,11 +55,11 @@ namespace ecaldqm { DetId id(hitItr->id()); - meHitMap.fill(id, energy); - meHitMapAll.fill(id, energy); - meHitMapAllByLumi.fill(id, energy); - meHit.fill(id, energy); - meHitAll.fill(id, energy); + meHitMap.fill(getEcalDQMSetupObjects(), id, energy); + meHitMapAll.fill(getEcalDQMSetupObjects(), id, energy); + meHitMapAllByLumi.fill(getEcalDQMSetupObjects(), id, energy); + meHit.fill(getEcalDQMSetupObjects(), id, energy); + meHitAll.fill(getEcalDQMSetupObjects(), id, energy); // look for the seeds // float e3x3(energy); @@ -67,7 +67,7 @@ namespace ecaldqm { // EcalRecHitCollection::const_iterator neighborItr; // float neighborE; - // std::vector window(getTopology()->getWindow(id, 3, 3)); + // std::vector window(GetTopology()->getWindow(id, 3, 3)); // for(std::vector::iterator idItr(window.begin()); idItr != window.end(); ++idItr){ // if((neighborItr = _hits.find(*idItr)) == _hits.end()) continue; // if(isPhysicsRun_ && neighborItr->checkFlagMask(notGood)) continue; diff --git a/DQM/EcalMonitorTasks/src/IntegrityTask.cc b/DQM/EcalMonitorTasks/src/IntegrityTask.cc index 80257f02b9c70..c4228f45890e6 100644 --- a/DQM/EcalMonitorTasks/src/IntegrityTask.cc +++ b/DQM/EcalMonitorTasks/src/IntegrityTask.cc @@ -11,8 +11,8 @@ namespace ecaldqm { bool const& ByLumiResetSwitch, bool&) { if (ByLumiResetSwitch) { - MEs_.at("MapByLumi").reset(); - MEs_.at("ByLumi").reset(); + MEs_.at("MapByLumi").reset(GetElectronicsMap()); + MEs_.at("ByLumi").reset(GetElectronicsMap()); } } @@ -46,14 +46,14 @@ namespace ecaldqm { MESet& meTrendNErrors(MEs_.at("TrendNErrors")); std::for_each(_ids.begin(), _ids.end(), [&](typename IDCollection::value_type const& id) { - set->fill(id); - int dccid(dccId(id)); - meByLumi.fill(dccid); - meTotal.fill(dccid); + set->fill(getEcalDQMSetupObjects(), id); + int dccid(dccId(id, GetElectronicsMap())); + meByLumi.fill(getEcalDQMSetupObjects(), dccid); + meTotal.fill(getEcalDQMSetupObjects(), dccid); // Fill Integrity Errors Map with channel errors for this lumi - meMapByLumi.fill(id); + meMapByLumi.fill(getEcalDQMSetupObjects(), id); - meTrendNErrors.fill(double(timestamp_.iLumi), 1.); + meTrendNErrors.fill(getEcalDQMSetupObjects(), double(timestamp_.iLumi), 1.); }); } @@ -80,23 +80,23 @@ namespace ecaldqm { MESet& meTrendNErrors(MEs_.at("TrendNErrors")); std::for_each(_ids.begin(), _ids.end(), [&](EcalElectronicsIdCollection::value_type const& id) { - set->fill(id); + set->fill(getEcalDQMSetupObjects(), id); int dccid(id.dccId()); double nCrystals(0.); - std::vector chIds(getElectronicsMap()->dccTowerConstituents(dccid, id.towerId())); + std::vector chIds(GetElectronicsMap()->dccTowerConstituents(dccid, id.towerId())); if (dccid <= kEEmHigh + 1 || dccid >= kEEpLow + 1) nCrystals = chIds.size(); else nCrystals = 25.; - meByLumi.fill(dccid, nCrystals); - meTotal.fill(dccid, nCrystals); + meByLumi.fill(getEcalDQMSetupObjects(), dccid, nCrystals); + meTotal.fill(getEcalDQMSetupObjects(), dccid, nCrystals); // Fill Integrity Errors Map with tower errors for this lumi // Since binned by crystal for compatibility with channel errors, // fill with constituent channels of tower for (std::vector::iterator chItr(chIds.begin()); chItr != chIds.end(); ++chItr) - meMapByLumi.fill(*chItr); + meMapByLumi.fill(getEcalDQMSetupObjects(), *chItr); - meTrendNErrors.fill(double(timestamp_.iLumi), nCrystals); + meTrendNErrors.fill(getEcalDQMSetupObjects(), double(timestamp_.iLumi), nCrystals); }); } diff --git a/DQM/EcalMonitorTasks/src/LaserTask.cc b/DQM/EcalMonitorTasks/src/LaserTask.cc index a6abcfaec086a..00776b30491b4 100644 --- a/DQM/EcalMonitorTasks/src/LaserTask.cc +++ b/DQM/EcalMonitorTasks/src/LaserTask.cc @@ -101,7 +101,7 @@ namespace ecaldqm { } } for (unsigned iWL(0); iWL < nWavelength; iWL++) { - meCalibStatus.fill(double(iWL), LaserStatus[iWL] ? 1 : 0); + meCalibStatus.fill(getEcalDQMSetupObjects(), double(iWL), LaserStatus[iWL] ? 1 : 0); } } @@ -126,16 +126,16 @@ namespace ecaldqm { for (typename DigiCollection::const_iterator digiItr(_digis.begin()); digiItr != _digis.end(); ++digiItr) { const DetId& id(digiItr->id()); - unsigned iDCC(dccId(id) - 1); + unsigned iDCC(dccId(id, GetElectronicsMap()) - 1); inData[iDCC] = true; if (!enable_[iDCC]) continue; - if (rtHalf(id) != rtHalf_[iDCC]) + if (rtHalf(id, GetElectronicsMap()) != rtHalf_[iDCC]) continue; - meOccupancy.fill(id); + meOccupancy.fill(getEcalDQMSetupObjects(), id); ++nReadouts[iDCC]; @@ -196,7 +196,7 @@ namespace ecaldqm { static_cast(meSignalRate).use(iME); } - meSignalRate.fill(iDCC + 1, enable_[iDCC] ? 1 : 0); + meSignalRate.fill(getEcalDQMSetupObjects(), iDCC + 1, enable_[iDCC] ? 1 : 0); } if (enable) @@ -209,11 +209,11 @@ namespace ecaldqm { for (typename DigiCollection::const_iterator digiItr(_digis.begin()); digiItr != _digis.end(); ++digiItr) { const DetId& id(digiItr->id()); - unsigned iDCC(dccId(id) - 1); + unsigned iDCC(dccId(id, GetElectronicsMap()) - 1); if (!enable_[iDCC]) continue; - if (rtHalf(id) != rtHalf_[iDCC]) + if (rtHalf(id, GetElectronicsMap()) != rtHalf_[iDCC]) continue; EcalDataFrame dataFrame(*digiItr); @@ -224,10 +224,10 @@ namespace ecaldqm { } for (int iSample(0); iSample < EcalDataFrame::MAXSAMPLES; iSample++) - meShape.fill(id, iSample + 0.5, float(dataFrame.sample(iSample).adc())); + meShape.fill(getEcalDQMSetupObjects(), id, iSample + 0.5, float(dataFrame.sample(iSample).adc())); - EcalPnDiodeDetId pnidA(pnForCrystal(id, 'a')); - EcalPnDiodeDetId pnidB(pnForCrystal(id, 'b')); + EcalPnDiodeDetId pnidA(pnForCrystal(id, 'a', GetElectronicsMap())); + EcalPnDiodeDetId pnidB(pnForCrystal(id, 'b', GetElectronicsMap())); if (pnidA.null() || pnidB.null()) continue; pnAmp_.insert(std::make_pair(pnidA.rawId(), 0.)); @@ -256,7 +256,7 @@ namespace ecaldqm { if (ampItr == pnAmp_.end()) continue; - unsigned iDCC(dccId(id) - 1); + unsigned iDCC(dccId(id, GetElectronicsMap()) - 1); double pedestal(0.); for (int iSample(0); iSample < 4; iSample++) @@ -275,7 +275,7 @@ namespace ecaldqm { static_cast(mePNAmplitude).use(iME); } - mePNAmplitude.fill(id, max); + mePNAmplitude.fill(getEcalDQMSetupObjects(), id, max); ampItr->second = max; } @@ -300,11 +300,11 @@ namespace ecaldqm { for (EcalUncalibratedRecHitCollection::const_iterator uhitItr(_uhits.begin()); uhitItr != _uhits.end(); ++uhitItr) { const DetId& id(uhitItr->id()); - unsigned iDCC(dccId(id) - 1); + unsigned iDCC(dccId(id, GetElectronicsMap()) - 1); if (!enable_[iDCC]) continue; - if (rtHalf(id) != rtHalf_[iDCC]) + if (rtHalf(id, GetElectronicsMap()) != rtHalf_[iDCC]) continue; if (iME != wlToME_[wavelength_[iDCC]]) { @@ -318,14 +318,14 @@ namespace ecaldqm { float amp(max((double)uhitItr->amplitude(), 0.)); float jitter(max((double)uhitItr->jitter() + 5.0, 0.)); - meAmplitude.fill(id, amp); - meAmplitudeSummary.fill(id, amp); - meTiming.fill(id, jitter); + meAmplitude.fill(getEcalDQMSetupObjects(), id, amp); + meAmplitudeSummary.fill(getEcalDQMSetupObjects(), id, amp); + meTiming.fill(getEcalDQMSetupObjects(), id, jitter); float aop(0.); - map::iterator ampItrA(pnAmp_.find(pnForCrystal(id, 'a'))); - map::iterator ampItrB(pnAmp_.find(pnForCrystal(id, 'b'))); + map::iterator ampItrA(pnAmp_.find(pnForCrystal(id, 'a', GetElectronicsMap()))); + map::iterator ampItrB(pnAmp_.find(pnForCrystal(id, 'b', GetElectronicsMap()))); if (ampItrA == pnAmp_.end() && ampItrB == pnAmp_.end()) continue; else if (ampItrB == pnAmp_.end()) @@ -335,7 +335,7 @@ namespace ecaldqm { else aop = amp / (ampItrA->second + ampItrB->second) * 2.; - meAOverP.fill(id, aop); + meAOverP.fill(getEcalDQMSetupObjects(), id, aop); } } diff --git a/DQM/EcalMonitorTasks/src/LedTask.cc b/DQM/EcalMonitorTasks/src/LedTask.cc index 98c06f270b938..834b2895d7fbd 100644 --- a/DQM/EcalMonitorTasks/src/LedTask.cc +++ b/DQM/EcalMonitorTasks/src/LedTask.cc @@ -105,7 +105,7 @@ namespace ecaldqm { } } for (unsigned iWL(0); iWL < 2; iWL++) { - meCalibStatus.fill(double(iWL + 3), LedStatus[iWL] ? 1 : 0); + meCalibStatus.fill(getEcalDQMSetupObjects(), double(iWL + 3), LedStatus[iWL] ? 1 : 0); } } @@ -125,17 +125,17 @@ namespace ecaldqm { for (EEDigiCollection::const_iterator digiItr(_digis.begin()); digiItr != _digis.end(); ++digiItr) { const DetId& id(digiItr->id()); - unsigned iDCC(dccId(id) - 1); + unsigned iDCC(dccId(id, GetElectronicsMap()) - 1); if (iDCC >= kEBmLow && iDCC <= kEBpHigh) continue; unsigned index(iDCC <= kEEmHigh ? iDCC : iDCC - nEBDCC); if (!enable_[index]) continue; - if (rtHalf(id) != rtHalf_[index]) + if (rtHalf(id, GetElectronicsMap()) != rtHalf_[index]) continue; - meOccupancy.fill(id); + meOccupancy.fill(getEcalDQMSetupObjects(), id); ++nReadouts[index]; @@ -186,7 +186,8 @@ namespace ecaldqm { static_cast(meSignalRate).use(iME); } - meSignalRate.fill((index <= kEEmHigh ? index : index + nEBDCC) + 1, enable_[index] ? 1 : 0); + meSignalRate.fill( + getEcalDQMSetupObjects(), (index <= kEEmHigh ? index : index + nEBDCC) + 1, enable_[index] ? 1 : 0); } if (!enable && isemptyLS >= 0) @@ -204,14 +205,14 @@ namespace ecaldqm { for (EEDigiCollection::const_iterator digiItr(_digis.begin()); digiItr != _digis.end(); ++digiItr) { const DetId& id(digiItr->id()); - unsigned iDCC(dccId(id) - 1); + unsigned iDCC(dccId(id, GetElectronicsMap()) - 1); if (iDCC >= kEBmLow && iDCC <= kEBpHigh) continue; unsigned index(iDCC <= kEEmHigh ? iDCC : iDCC - nEBDCC); if (!enable_[index]) continue; - if (rtHalf(id) != rtHalf_[index]) + if (rtHalf(id, GetElectronicsMap()) != rtHalf_[index]) continue; if (iME != wlToME_[wavelength_[index]]) { @@ -223,10 +224,10 @@ namespace ecaldqm { EcalDataFrame dataFrame(*digiItr); for (int iSample(0); iSample < 10; iSample++) - meShape.fill(id, iSample + 0.5, float(dataFrame.sample(iSample).adc())); + meShape.fill(getEcalDQMSetupObjects(), id, iSample + 0.5, float(dataFrame.sample(iSample).adc())); - EcalPnDiodeDetId pnidA(pnForCrystal(id, 'a')); - EcalPnDiodeDetId pnidB(pnForCrystal(id, 'b')); + EcalPnDiodeDetId pnidA(pnForCrystal(id, 'a', GetElectronicsMap())); + EcalPnDiodeDetId pnidB(pnForCrystal(id, 'b', GetElectronicsMap())); if (pnidA.null() || pnidB.null()) continue; pnAmp_.insert(std::make_pair(pnidA.rawId(), 0.)); @@ -249,7 +250,7 @@ namespace ecaldqm { if (ampItr == pnAmp_.end()) continue; - unsigned iDCC(dccId(id) - 1); + unsigned iDCC(dccId(id, GetElectronicsMap()) - 1); if (iDCC >= kEBmLow && iDCC <= kEBpHigh) continue; unsigned index(iDCC <= kEEmHigh ? iDCC : iDCC - nEBDCC); @@ -271,7 +272,7 @@ namespace ecaldqm { static_cast(mePNAmplitude).use(iME); } - mePNAmplitude.fill(id, max); + mePNAmplitude.fill(getEcalDQMSetupObjects(), id, max); ampItr->second = max; } @@ -290,14 +291,14 @@ namespace ecaldqm { for (EcalUncalibratedRecHitCollection::const_iterator uhitItr(_uhits.begin()); uhitItr != _uhits.end(); ++uhitItr) { EEDetId id(uhitItr->id()); - unsigned iDCC(dccId(id) - 1); + unsigned iDCC(dccId(id, GetElectronicsMap()) - 1); if (iDCC >= kEBmLow && iDCC <= kEBpHigh) continue; unsigned index(iDCC <= kEEmHigh ? iDCC : iDCC - nEBDCC); if (!enable_[index]) continue; - if (rtHalf(id) != rtHalf_[index]) + if (rtHalf(id, GetElectronicsMap()) != rtHalf_[index]) continue; if (iME != wlToME_[wavelength_[index]]) { @@ -311,14 +312,14 @@ namespace ecaldqm { float amp(max((double)uhitItr->amplitude(), 0.)); float jitter(max((double)uhitItr->jitter() + 5.0, 0.)); - meAmplitude.fill(id, amp); - meAmplitudeSummary.fill(id, amp); - meTiming.fill(id, jitter); + meAmplitude.fill(getEcalDQMSetupObjects(), id, amp); + meAmplitudeSummary.fill(getEcalDQMSetupObjects(), id, amp); + meTiming.fill(getEcalDQMSetupObjects(), id, jitter); float aop(0.); - map::iterator ampItrA(pnAmp_.find(pnForCrystal(id, 'a'))); - map::iterator ampItrB(pnAmp_.find(pnForCrystal(id, 'b'))); + map::iterator ampItrA(pnAmp_.find(pnForCrystal(id, 'a', GetElectronicsMap()))); + map::iterator ampItrB(pnAmp_.find(pnForCrystal(id, 'b', GetElectronicsMap()))); if (ampItrA == pnAmp_.end() && ampItrB == pnAmp_.end()) continue; else if (ampItrB == pnAmp_.end()) @@ -328,7 +329,7 @@ namespace ecaldqm { else aop = amp / (ampItrA->second + ampItrB->second) * 2.; - meAOverP.fill(id, aop); + meAOverP.fill(getEcalDQMSetupObjects(), id, aop); } } diff --git a/DQM/EcalMonitorTasks/src/OccupancyTask.cc b/DQM/EcalMonitorTasks/src/OccupancyTask.cc index 23a7fd608be0a..7ca08f8d0a707 100644 --- a/DQM/EcalMonitorTasks/src/OccupancyTask.cc +++ b/DQM/EcalMonitorTasks/src/OccupancyTask.cc @@ -30,9 +30,9 @@ namespace ecaldqm { bool const& ByLumiResetSwitch, bool&) { if (ByLumiResetSwitch) { - MEs_.at("DigiAllByLumi").reset(); - MEs_.at("TPDigiThrAllByLumi").reset(); - MEs_.at("RecHitThrAllByLumi").reset(); + MEs_.at("DigiAllByLumi").reset(GetElectronicsMap()); + MEs_.at("TPDigiThrAllByLumi").reset(GetElectronicsMap()); + MEs_.at("RecHitThrAllByLumi").reset(GetElectronicsMap()); } } @@ -40,7 +40,7 @@ namespace ecaldqm { MESet& meDCC(MEs_.at("DCC")); for (EcalRawDataCollection::const_iterator dcchItr(_dcchs.begin()); dcchItr != _dcchs.end(); ++dcchItr) - meDCC.fill(dcchItr->id()); + meDCC.fill(getEcalDQMSetupObjects(), dcchItr->id()); } template @@ -56,17 +56,17 @@ namespace ecaldqm { std::for_each(_digis.begin(), _digis.end(), [&](typename DigiCollection::Digi const& digi) { DetId id(digi.id()); - meDigi.fill(id); - meDigiProjEta.fill(id); - meDigiProjPhi.fill(id); - meDigiAll.fill(id); - meDigiAllByLumi.fill(id); - meDigiDCC.fill(id); + meDigi.fill(getEcalDQMSetupObjects(), id); + meDigiProjEta.fill(getEcalDQMSetupObjects(), id); + meDigiProjPhi.fill(getEcalDQMSetupObjects(), id); + meDigiAll.fill(getEcalDQMSetupObjects(), id); + meDigiAllByLumi.fill(getEcalDQMSetupObjects(), id); + meDigiDCC.fill(getEcalDQMSetupObjects(), id); }); int iSubdet(_collection == kEBDigi ? EcalBarrel : EcalEndcap); - meDigi1D.fill(iSubdet, double(_digis.size())); - meTrendNDigi.fill(iSubdet, double(timestamp_.iLumi), double(_digis.size())); + meDigi1D.fill(getEcalDQMSetupObjects(), iSubdet, double(_digis.size())); + meTrendNDigi.fill(getEcalDQMSetupObjects(), iSubdet, double(timestamp_.iLumi), double(_digis.size())); } void OccupancyTask::runOnTPDigis(EcalTrigPrimDigiCollection const& _digis) { @@ -89,11 +89,11 @@ namespace ecaldqm { // meTPDigiProjPhi.fill(id); // meTPDigiAll.fill(id); if (digi.compressedEt() > tpThreshold_) { - meTPDigiThrProjEta.fill(id); - meTPDigiThrProjPhi.fill(id); - meTPDigiThrAll.fill(id); - meTPDigiThrAllByLumi.fill(id); - meTPDigiRCT.fill(id); + meTPDigiThrProjEta.fill(getEcalDQMSetupObjects(), id); + meTPDigiThrProjPhi.fill(getEcalDQMSetupObjects(), id); + meTPDigiThrAll.fill(getEcalDQMSetupObjects(), id); + meTPDigiThrAllByLumi.fill(getEcalDQMSetupObjects(), id); + meTPDigiRCT.fill(getEcalDQMSetupObjects(), id); if (id.subDet() == EcalBarrel) nFilteredEB += 1.; else @@ -101,8 +101,8 @@ namespace ecaldqm { } }); - meTrendNTPDigi.fill(EcalBarrel, double(timestamp_.iLumi), nFilteredEB); - meTrendNTPDigi.fill(EcalEndcap, double(timestamp_.iLumi), nFilteredEE); + meTrendNTPDigi.fill(getEcalDQMSetupObjects(), EcalBarrel, double(timestamp_.iLumi), nFilteredEB); + meTrendNTPDigi.fill(getEcalDQMSetupObjects(), EcalEndcap, double(timestamp_.iLumi), nFilteredEE); } void OccupancyTask::runOnRecHits(EcalRecHitCollection const& _hits, Collections _collection) { @@ -126,15 +126,15 @@ namespace ecaldqm { std::for_each(_hits.begin(), _hits.end(), [&](EcalRecHitCollection::value_type const& hit) { DetId id(hit.id()); - meRecHitAll.fill(id); - meRecHitProjEta.fill(id); - meRecHitProjPhi.fill(id); + meRecHitAll.fill(getEcalDQMSetupObjects(), id); + meRecHitProjEta.fill(getEcalDQMSetupObjects(), id); + meRecHitProjPhi.fill(getEcalDQMSetupObjects(), id); if (!hit.checkFlagMask(mask) && hit.energy() > recHitThreshold_) { - meRecHitThrProjEta.fill(id); - meRecHitThrProjPhi.fill(id); - meRecHitThrAll.fill(id); - meRecHitThrAllByLumi.fill(id); + meRecHitThrProjEta.fill(getEcalDQMSetupObjects(), id); + meRecHitThrProjPhi.fill(getEcalDQMSetupObjects(), id); + meRecHitThrAll.fill(getEcalDQMSetupObjects(), id); + meRecHitThrAllByLumi.fill(getEcalDQMSetupObjects(), id); nFiltered += 1.; bool isPlusFar(iSubdet == EcalBarrel ? (EBDetId(id).iphi() > 100 && EBDetId(id).iphi() < 280) : zside(id) > 0); if (isPlusFar) @@ -144,10 +144,10 @@ namespace ecaldqm { } }); - meRecHitThr1D.fill(iSubdet, nFiltered); - meTrendNRecHitThr.fill(iSubdet, double(timestamp_.iLumi), nFiltered); - meRecHitThrmvp.fill(iSubdet, nRHThrp, nRHThrm); - meRecHitThrpm.fill(iSubdet, nRHThrp - nRHThrm); + meRecHitThr1D.fill(getEcalDQMSetupObjects(), iSubdet, nFiltered); + meTrendNRecHitThr.fill(getEcalDQMSetupObjects(), iSubdet, double(timestamp_.iLumi), nFiltered); + meRecHitThrmvp.fill(getEcalDQMSetupObjects(), iSubdet, nRHThrp, nRHThrm); + meRecHitThrpm.fill(getEcalDQMSetupObjects(), iSubdet, nRHThrp - nRHThrm); } DEFINE_ECALDQM_WORKER(OccupancyTask); diff --git a/DQM/EcalMonitorTasks/src/PNDiodeTask.cc b/DQM/EcalMonitorTasks/src/PNDiodeTask.cc index af1ed4bdf500f..dd0226313863b 100644 --- a/DQM/EcalMonitorTasks/src/PNDiodeTask.cc +++ b/DQM/EcalMonitorTasks/src/PNDiodeTask.cc @@ -28,37 +28,50 @@ namespace ecaldqm { if (_ids.empty()) return; - MESet* set(nullptr); - + MESet* meMEMErrors = &MEs_.at("MEMErrors"); + + // MEM Box Integrity Errors (TowerIds 69 and 70) + // errorType matches to the following labels in DQM plot + // 0 = TOWERID + // 1 = BLOCKSIZE + // 2 = CHID + // 3 = GAIN + int errorType(-1); switch (_collection) { case kMEMTowerIdErrors: - set = &MEs_.at("MEMTowerId"); + errorType = 0; break; case kMEMBlockSizeErrors: - set = &MEs_.at("MEMBlockSize"); + errorType = 1; break; case kMEMChIdErrors: - set = &MEs_.at("MEMChId"); + errorType = 2; break; case kMEMGainErrors: - set = &MEs_.at("MEMGain"); + errorType = 3; break; default: return; } - std::for_each(_ids.begin(), _ids.end(), [&](EcalElectronicsIdCollection::value_type const& id) { - if (id.towerId() == 69) { - edm::LogWarning("EcalDQM") - << "PNDiodeTask::runOnErrors : one of the ids in the electronics ID collection is unphysical in lumi " - "number " - << timestamp_.iLumi << ", event number " - << timestamp_ - .iEvt; // Added March 2018 because some events have this unphysical tower ID and cause the ECAL calibration application to crash. - } else { - set->fill(EcalElectronicsId(id.dccId(), id.towerId(), 1, id.xtalId())); - } - }); + // Integrity errors for MEM boxes (towerIds 69/70) + // Plot contains two bins per dccId. Integer number + // bins correspond to towerId 69 and half integer + // number bins correspond to towerId 70. + std::for_each(_ids.begin(), + _ids.end(), + [&](EcalElectronicsIdCollection::value_type const& id) { + if (id.towerId() == 69) + meMEMErrors->fill(getEcalDQMSetupObjects(), id.dccId() + 0.0, errorType); + else if (id.towerId() == 70) + meMEMErrors->fill(getEcalDQMSetupObjects(), id.dccId() + 0.5, errorType); + else { + edm::LogWarning("EcalDQM") + << "PNDiodeTask::runOnErrors : one of the ids in the electronics ID collection does not " + << "correspond to one of the MEM box towerIds (69/70) in lumi number " << timestamp_.iLumi + << ", event number " << timestamp_.iEvt; + } + }); } void PNDiodeTask::runOnPnDigis(EcalPnDiodeDigiCollection const& _digis) { @@ -69,16 +82,16 @@ namespace ecaldqm { std::for_each(_digis.begin(), _digis.end(), [&](EcalPnDiodeDigiCollection::value_type const& digi) { const EcalPnDiodeDetId& id(digi.id()); - if (!enable_[dccId(id) - 1]) + if (!enable_[dccId(id, GetElectronicsMap()) - 1]) return; - meOccupancy.fill(id); - meOccupancySummary.fill(id); + meOccupancy.fill(getEcalDQMSetupObjects(), id); + meOccupancySummary.fill(getEcalDQMSetupObjects(), id); for (int iSample(0); iSample < 4; iSample++) { if (digi.sample(iSample).gainId() != 1) break; - mePedestal.fill(id, double(digi.sample(iSample).adc())); + mePedestal.fill(getEcalDQMSetupObjects(), id, double(digi.sample(iSample).adc())); } }); } diff --git a/DQM/EcalMonitorTasks/src/PedestalTask.cc b/DQM/EcalMonitorTasks/src/PedestalTask.cc index f39f37ffb3e6e..12d28dc040e19 100644 --- a/DQM/EcalMonitorTasks/src/PedestalTask.cc +++ b/DQM/EcalMonitorTasks/src/PedestalTask.cc @@ -65,7 +65,7 @@ namespace ecaldqm { for (typename DigiCollection::const_iterator digiItr(_digis.begin()); digiItr != _digis.end(); ++digiItr) { DetId id(digiItr->id()); - int iDCC(dccId(id) - 1); + int iDCC(dccId(id, GetElectronicsMap()) - 1); if (!enable_[iDCC]) continue; @@ -96,10 +96,10 @@ namespace ecaldqm { static_cast(mePedestal).use(iME); } - meOccupancy.fill(id); + meOccupancy.fill(getEcalDQMSetupObjects(), id); for (int iSample(0); iSample < EcalDataFrame::MAXSAMPLES; iSample++) - mePedestal.fill(id, double(dataFrame.sample(iSample).adc())); + mePedestal.fill(getEcalDQMSetupObjects(), id, double(dataFrame.sample(iSample).adc())); } } @@ -111,7 +111,7 @@ namespace ecaldqm { for (EcalPnDiodeDigiCollection::const_iterator digiItr(_digis.begin()); digiItr != _digis.end(); ++digiItr) { EcalPnDiodeDetId id(digiItr->id()); - int iDCC(dccId(id) - 1); + int iDCC(dccId(id, GetElectronicsMap()) - 1); if (!enable_[iDCC]) continue; @@ -137,7 +137,7 @@ namespace ecaldqm { } for (int iSample(0); iSample < 50; iSample++) - mePNPedestal.fill(id, double(digiItr->sample(iSample).adc())); + mePNPedestal.fill(getEcalDQMSetupObjects(), id, double(digiItr->sample(iSample).adc())); } } diff --git a/DQM/EcalMonitorTasks/src/PresampleTask.cc b/DQM/EcalMonitorTasks/src/PresampleTask.cc index ff0ff2a642ca2..9a04b451554ec 100644 --- a/DQM/EcalMonitorTasks/src/PresampleTask.cc +++ b/DQM/EcalMonitorTasks/src/PresampleTask.cc @@ -38,7 +38,7 @@ namespace ecaldqm { // 1 pt:10 LS in Trend plots mePedestalByLS = &MEs_.at("PedestalByLS"); if (timestamp_.iLumi % 10 == 0) - mePedestalByLS->reset(); + mePedestalByLS->reset(GetElectronicsMap()); } } @@ -74,8 +74,8 @@ namespace ecaldqm { } // PulseMaxCheck for (int iSample(0); iSample < nSamples_; ++iSample) { - mePedestal.fill(id, double(dataFrame.sample(iSample).adc())); - mePedestalByLS->fill(id, double(dataFrame.sample(iSample).adc())); + mePedestal.fill(getEcalDQMSetupObjects(), id, double(dataFrame.sample(iSample).adc())); + mePedestalByLS->fill(getEcalDQMSetupObjects(), id, double(dataFrame.sample(iSample).adc())); } } // _digis loop diff --git a/DQM/EcalMonitorTasks/src/RawDataTask.cc b/DQM/EcalMonitorTasks/src/RawDataTask.cc index 92a4fa6d9dffa..e15adf4b56d69 100644 --- a/DQM/EcalMonitorTasks/src/RawDataTask.cc +++ b/DQM/EcalMonitorTasks/src/RawDataTask.cc @@ -27,9 +27,9 @@ namespace ecaldqm { l1A_ = 0; feL1Offset_ = _evt.isRealData() ? 1 : 0; if (ByLumiResetSwitch) { - MEs_.at("DesyncByLumi").reset(); - MEs_.at("FEByLumi").reset(); - MEs_.at("FEStatusErrMapByLumi").reset(); + MEs_.at("DesyncByLumi").reset(GetElectronicsMap()); + MEs_.at("FEByLumi").reset(GetElectronicsMap()); + MEs_.at("FEStatusErrMapByLumi").reset(GetElectronicsMap()); } } @@ -49,7 +49,7 @@ namespace ecaldqm { if (length > 1) { // FED header is one 64 bit word const uint64_t* pData(reinterpret_cast(fedData.data())); if ((pData[length - 1] & 0x4) != 0) - meCRC.fill(iFED - 600); + meCRC.fill(getEcalDQMSetupObjects(), iFED - 600); } } } @@ -70,6 +70,7 @@ namespace ecaldqm { MESet& meL1AFE(MEs_.at("L1AFE")); MESet& meFEStatus(MEs_.at("FEStatus")); MESet& meFEStatusErrMapByLumi(MEs_.at("FEStatusErrMapByLumi")); + MESet& meFEStatusMEM(MEs_.at("FEStatusMEM")); MESet& meDesyncByLumi(MEs_.at("DesyncByLumi")); MESet& meDesyncTotal(MEs_.at("DesyncTotal")); MESet& meFEByLumi(MEs_.at("FEByLumi")); @@ -104,21 +105,21 @@ namespace ecaldqm { short dccL1AShort(dccL1A & 0xfff); int dccBX(dcchItr->getBX()); - meOrbitDiff.fill(dccId, dcchItr->getOrbit() - orbit_); - meBXDCCDiff.fill(dccId, dccBX - bx_); + meOrbitDiff.fill(getEcalDQMSetupObjects(), dccId, dcchItr->getOrbit() - orbit_); + meBXDCCDiff.fill(getEcalDQMSetupObjects(), dccId, dccBX - bx_); if (dccBX == -1) - meBXFEInvalid.fill(dccId, 68.5); + meBXFEInvalid.fill(getEcalDQMSetupObjects(), dccId, 68.5); if (dcchItr->getRunNumber() != int(runNumber_)) - meRunNumber.fill(dccId); + meRunNumber.fill(getEcalDQMSetupObjects(), dccId); if (dcchItr->getOrbit() != orbit_) - meOrbit.fill(dccId); + meOrbit.fill(getEcalDQMSetupObjects(), dccId); if (dcchItr->getBasicTriggerType() != triggerType_) - meTriggerType.fill(dccId); + meTriggerType.fill(getEcalDQMSetupObjects(), dccId); if (dccL1A != l1A_) - meL1ADCC.fill(dccId); + meL1ADCC.fill(getEcalDQMSetupObjects(), dccId); if (dccBX != bx_) - meBXDCC.fill(dccId); + meBXDCC.fill(getEcalDQMSetupObjects(), dccId); const vector& feStatus(dcchItr->getFEStatus()); const vector& feBxs(dcchItr->getFEBxs()); @@ -134,34 +135,43 @@ namespace ecaldqm { short status(feStatus[iFE]); if (feBxs[iFE] != -1 && dccBX != -1) { - meBXFEDiff.fill(dccId, feBxs[iFE] - dccBX); + meBXFEDiff.fill(getEcalDQMSetupObjects(), dccId, feBxs[iFE] - dccBX); } if (feBxs[iFE] == -1) - meBXFEInvalid.fill(dccId, iFE + 0.5); + meBXFEInvalid.fill(getEcalDQMSetupObjects(), dccId, iFE + 0.5); if (status != BXDesync && status != L1ABXDesync) { // BX desync not detected in the DCC if (feBxs[iFE] != dccBX && feBxs[iFE] != -1 && dccBX != -1) { - meBXFE.fill(dccId, iFE + 0.5); + meBXFE.fill(getEcalDQMSetupObjects(), dccId, iFE + 0.5); feDesync += 1.; } } if (status != L1ADesync && status != L1ABXDesync) { if (feL1s[iFE] + feL1Offset_ != dccL1AShort && feL1s[iFE] != -1 && dccL1AShort != 0) { - meL1AFE.fill(dccId, iFE + 0.5); + meL1AFE.fill(getEcalDQMSetupObjects(), dccId, iFE + 0.5); feDesync += 1.; } } - if (iFE >= 68) + if (iFE >= 68) { + // FE Status for MEM boxes (towerIds 69 and 70) + // Plot contains two bins per dccId. Integer number + // bins correspond to towerId 69 and half integer + // number bins correspond to towerId 70. + if (iFE + 1 == 69) + meFEStatusMEM.fill(getEcalDQMSetupObjects(), dccId + 0.0, status); + else if (iFE + 1 == 70) + meFEStatusMEM.fill(getEcalDQMSetupObjects(), dccId + 0.5, status); continue; + } - DetId id(getElectronicsMap()->dccTowerConstituents(dccId, iFE + 1).at(0)); - meFEStatus.fill(id, status); + DetId id(GetElectronicsMap()->dccTowerConstituents(dccId, iFE + 1).at(0)); + meFEStatus.fill(getEcalDQMSetupObjects(), id, status); // Fill FE Status Error Map with error states only if (status != Enabled && status != Suppressed && status != FIFOFull && status != FIFOFullL1ADesync && status != ForcedZS) - meFEStatusErrMapByLumi.fill(id, status); + meFEStatusErrMapByLumi.fill(getEcalDQMSetupObjects(), id, status); switch (status) { case Timeout: @@ -182,12 +192,12 @@ namespace ecaldqm { } if (feDesync > 0.) { - meDesyncByLumi.fill(dccId, feDesync); - meDesyncTotal.fill(dccId, feDesync); - meTrendNSyncErrors.fill(double(timestamp_.iLumi), feDesync); + meDesyncByLumi.fill(getEcalDQMSetupObjects(), dccId, feDesync); + meDesyncTotal.fill(getEcalDQMSetupObjects(), dccId, feDesync); + meTrendNSyncErrors.fill(getEcalDQMSetupObjects(), double(timestamp_.iLumi), feDesync); } if (statusError > 0.) - meFEByLumi.fill(dccId, statusError); + meFEByLumi.fill(getEcalDQMSetupObjects(), dccId, statusError); const vector& tccBx(dcchItr->getTCCBx()); const vector& tccL1(dcchItr->getTCCLv1()); @@ -196,17 +206,17 @@ namespace ecaldqm { if (dccId <= kEEmHigh + 1 || dccId >= kEEpLow + 1) { for (int iTCC(0); iTCC < 4; iTCC++) { if (tccBx[iTCC] != dccBX && tccBx[iTCC] != -1 && dccBX != -1) - meBXTCC.fill(dccId); + meBXTCC.fill(getEcalDQMSetupObjects(), dccId); if (tccL1[iTCC] != dccL1AShort && tccL1[iTCC] != -1 && dccL1AShort != 0) - meL1ATCC.fill(dccId); + meL1ATCC.fill(getEcalDQMSetupObjects(), dccId); } } else { if (tccBx[0] != dccBX && tccBx[0] != -1 && dccBX != -1) - meBXTCC.fill(dccId); + meBXTCC.fill(getEcalDQMSetupObjects(), dccId); if (tccL1[0] != dccL1AShort && tccL1[0] != -1 && dccL1AShort != 0) - meL1ATCC.fill(dccId); + meL1ATCC.fill(getEcalDQMSetupObjects(), dccId); } } @@ -214,10 +224,10 @@ namespace ecaldqm { short srpL1(dcchItr->getSRPLv1()); if (srpBx != dccBX && srpBx != -1 && dccBX != -1) - meBXSRP.fill(dccId); + meBXSRP.fill(getEcalDQMSetupObjects(), dccId); if (srpL1 != dccL1AShort && srpL1 != -1 && dccL1AShort != 0) - meL1ASRP.fill(dccId); + meL1ASRP.fill(getEcalDQMSetupObjects(), dccId); const int calibBX(3490); @@ -225,11 +235,11 @@ namespace ecaldqm { if (runType < 0 || runType > 22) runType = 0; if (dccBX < calibBX) - meEventTypePreCalib.fill(dccId, runType, 1. / 54.); + meEventTypePreCalib.fill(getEcalDQMSetupObjects(), dccId, runType, 1. / 54.); else if (dccBX == calibBX) - meEventTypeCalib.fill(dccId, runType, 1. / 54.); + meEventTypeCalib.fill(getEcalDQMSetupObjects(), dccId, runType, 1. / 54.); else - meEventTypePostCalib.fill(dccId, runType, 1. / 54.); + meEventTypePostCalib.fill(getEcalDQMSetupObjects(), dccId, runType, 1. / 54.); } } diff --git a/DQM/EcalMonitorTasks/src/RecoSummaryTask.cc b/DQM/EcalMonitorTasks/src/RecoSummaryTask.cc index f213a8cb8627b..d3c1926db5035 100644 --- a/DQM/EcalMonitorTasks/src/RecoSummaryTask.cc +++ b/DQM/EcalMonitorTasks/src/RecoSummaryTask.cc @@ -63,7 +63,7 @@ namespace ecaldqm { int subdet(isBarrel ? EcalBarrel : EcalEndcap); for (EcalRecHitCollection::const_iterator hitItr(_hits.begin()); hitItr != _hits.end(); ++hitItr) { - meRecoFlag.fill(subdet, hitItr->recoFlag()); + meRecoFlag.fill(getEcalDQMSetupObjects(), subdet, hitItr->recoFlag()); float energy(hitItr->energy()); int signedSubdet; @@ -76,7 +76,7 @@ namespace ecaldqm { if (energy > 3.) { EBDetId ebId(hitItr->id()); if (ebId.ieta() != 85) - meSwissCross->fill(EcalTools::swissCross(ebId, _hits, 0.)); + meSwissCross->fill(getEcalDQMSetupObjects(), EcalTools::swissCross(ebId, _hits, 0.)); } if (energy > maxE[0]) @@ -97,18 +97,18 @@ namespace ecaldqm { } if (energy > rechitThreshold) { - meChi2.fill(signedSubdet, hitItr->chi2()); - meTime.fill(signedSubdet, hitItr->time()); + meChi2.fill(getEcalDQMSetupObjects(), signedSubdet, hitItr->chi2()); + meTime.fill(getEcalDQMSetupObjects(), signedSubdet, hitItr->time()); } } if (isBarrel) { - meEnergyMax.fill(EcalBarrel, maxE[0]); + meEnergyMax.fill(getEcalDQMSetupObjects(), EcalBarrel, maxE[0]); ebHits_ = &_hits; } else { - meEnergyMax.fill(-EcalEndcap, maxE[0]); - meEnergyMax.fill(EcalEndcap, maxE[1]); + meEnergyMax.fill(getEcalDQMSetupObjects(), -EcalEndcap, maxE[0]); + meEnergyMax.fill(getEcalDQMSetupObjects(), EcalEndcap, maxE[1]); eeHits_ = &_hits; } @@ -120,7 +120,7 @@ namespace ecaldqm { int subdet(_collections == kEBReducedRecHit ? EcalBarrel : EcalEndcap); for (EcalRecHitCollection::const_iterator hitItr(_hits.begin()); hitItr != _hits.end(); ++hitItr) - meRecoFlag.fill(subdet, hitItr->recoFlag()); + meRecoFlag.fill(getEcalDQMSetupObjects(), subdet, hitItr->recoFlag()); } void RecoSummaryTask::runOnBasicClusters(edm::View const& _bcs, Collections _collection) { @@ -148,7 +148,7 @@ namespace ecaldqm { EcalRecHitCollection::const_iterator hItr(hitCol->find(haf[iH].first)); if (hItr == hitCol->end()) continue; - meRecoFlag.fill(subdet, hItr->recoFlag()); + meRecoFlag.fill(getEcalDQMSetupObjects(), subdet, hItr->recoFlag()); } } } diff --git a/DQM/EcalMonitorTasks/src/SelectiveReadoutTask.cc b/DQM/EcalMonitorTasks/src/SelectiveReadoutTask.cc index d53ed47e5b67a..f3541d367041a 100644 --- a/DQM/EcalMonitorTasks/src/SelectiveReadoutTask.cc +++ b/DQM/EcalMonitorTasks/src/SelectiveReadoutTask.cc @@ -74,8 +74,8 @@ namespace ecaldqm { // DCC event size for (int iFED(601); iFED <= 654; iFED++) { float size(_fedRaw.FEDData(iFED).size() / 1024.); - meDCCSize.fill(iFED - 600, size); - meDCCSizeProf.fill(iFED - 600, size); + meDCCSize.fill(getEcalDQMSetupObjects(), iFED - 600, size); + meDCCSizeProf.fill(getEcalDQMSetupObjects(), iFED - 600, size); if (iFED - 601 <= kEEmHigh) eemSize += size; else if (iFED - 601 >= kEEpLow) @@ -84,9 +84,9 @@ namespace ecaldqm { ebSize += size; } - meEventSize.fill(-EcalEndcap, eemSize / 9.); - meEventSize.fill(EcalEndcap, eepSize / 9.); - meEventSize.fill(EcalBarrel, ebSize / 36.); + meEventSize.fill(getEcalDQMSetupObjects(), -EcalEndcap, eemSize / 9.); + meEventSize.fill(getEcalDQMSetupObjects(), EcalEndcap, eepSize / 9.); + meEventSize.fill(getEcalDQMSetupObjects(), EcalBarrel, ebSize / 36.); } void SelectiveReadoutTask::runOnRawData(EcalRawDataCollection const& _dcchs) { @@ -113,7 +113,7 @@ namespace ecaldqm { DetId const& id(srf.id()); int flag(srf.value()); - meFlagCounterMap.fill(id); + meFlagCounterMap.fill(getEcalDQMSetupObjects(), id); unsigned iRU(-1); if (id.subdetId() == EcalTriggerTower) @@ -124,24 +124,24 @@ namespace ecaldqm { switch (flag & ~EcalSrFlag::SRF_FORCED_MASK) { case EcalSrFlag::SRF_FULL: - meFullReadoutMap.fill(id); + meFullReadoutMap.fill(getEcalDQMSetupObjects(), id); nFR += 1.; break; case EcalSrFlag::SRF_ZS1: - meZS1Map.fill(id); + meZS1Map.fill(getEcalDQMSetupObjects(), id); // fallthrough case EcalSrFlag::SRF_ZS2: - meZSMap.fill(id); + meZSMap.fill(getEcalDQMSetupObjects(), id); break; default: break; } if (flag & EcalSrFlag::SRF_FORCED_MASK) - meRUForcedMap.fill(id); + meRUForcedMap.fill(getEcalDQMSetupObjects(), id); }); - MEs_.at("FullReadout").fill(_col == kEBSrFlag ? EcalBarrel : EcalEndcap, nFR); + MEs_.at("FullReadout").fill(getEcalDQMSetupObjects(), _col == kEBSrFlag ? EcalBarrel : EcalEndcap, nFR); } template @@ -222,14 +222,14 @@ namespace ecaldqm { bool highInterest((flags_[iRU] & ~EcalSrFlag::SRF_FORCED_MASK) == EcalSrFlag::SRF_FULL); if (highInterest) { - meHighIntOutput.fill(id, ZSFIRValue); - if (isEB || dccId(id) - 1 <= kEEmHigh) + meHighIntOutput.fill(getEcalDQMSetupObjects(), id, ZSFIRValue); + if (isEB || dccId(id, GetElectronicsMap()) - 1 <= kEEmHigh) nHighInt[0] += 1; else nHighInt[1] += 1; } else { - meLowIntOutput.fill(id, ZSFIRValue); - if (isEB || dccId(id) - 1 <= kEEmHigh) + meLowIntOutput.fill(getEcalDQMSetupObjects(), id, ZSFIRValue); + if (isEB || dccId(id, GetElectronicsMap()) - 1 <= kEEmHigh) nLowInt[0] += 1; else nLowInt[1] += 1; @@ -237,13 +237,14 @@ namespace ecaldqm { } if (isEB) { - meHighIntPayload.fill(EcalBarrel, nHighInt[0] * bytesPerCrystal / 1024. / nEBDCC); - meLowIntPayload.fill(EcalBarrel, nLowInt[0] * bytesPerCrystal / 1024. / nEBDCC); + meHighIntPayload.fill(getEcalDQMSetupObjects(), EcalBarrel, nHighInt[0] * bytesPerCrystal / 1024. / nEBDCC); + meLowIntPayload.fill(getEcalDQMSetupObjects(), EcalBarrel, nLowInt[0] * bytesPerCrystal / 1024. / nEBDCC); } else { - meHighIntPayload.fill(-EcalEndcap, nHighInt[0] * bytesPerCrystal / 1024. / (nEEDCC / 2)); - meHighIntPayload.fill(EcalEndcap, nHighInt[1] * bytesPerCrystal / 1024. / (nEEDCC / 2)); - meLowIntPayload.fill(-EcalEndcap, nLowInt[0] * bytesPerCrystal / 1024. / (nEEDCC / 2)); - meLowIntPayload.fill(EcalEndcap, nLowInt[1] * bytesPerCrystal / 1024. / (nEEDCC / 2)); + meHighIntPayload.fill( + getEcalDQMSetupObjects(), -EcalEndcap, nHighInt[0] * bytesPerCrystal / 1024. / (nEEDCC / 2)); + meHighIntPayload.fill(getEcalDQMSetupObjects(), EcalEndcap, nHighInt[1] * bytesPerCrystal / 1024. / (nEEDCC / 2)); + meLowIntPayload.fill(getEcalDQMSetupObjects(), -EcalEndcap, nLowInt[0] * bytesPerCrystal / 1024. / (nEEDCC / 2)); + meLowIntPayload.fill(getEcalDQMSetupObjects(), EcalEndcap, nLowInt[1] * bytesPerCrystal / 1024. / (nEEDCC / 2)); } unsigned iRU(isEB ? 0 : EcalTrigTowerDetId::kEBTotalTowers); @@ -256,29 +257,29 @@ namespace ecaldqm { double towerSize(sizes[iTower] * bytesPerCrystal); - meTowerSize.fill(id, towerSize); + meTowerSize.fill(getEcalDQMSetupObjects(), id, towerSize); if (flags_[iRU] < 0) continue; - int dccid(dccId(id)); - int towerid(towerId(id)); + int dccid(dccId(id, GetElectronicsMap())); + int towerid(towerId(id, GetElectronicsMap())); if (suppressed_.find(std::make_pair(dccid, towerid)) != suppressed_.end()) continue; int flag(flags_[iRU] & ~EcalSrFlag::SRF_FORCED_MASK); - bool ruFullyReadout(sizes[iTower] == getElectronicsMap()->dccTowerConstituents(dccid, towerid).size()); + bool ruFullyReadout(sizes[iTower] == GetElectronicsMap()->dccTowerConstituents(dccid, towerid).size()); if (ruFullyReadout && (flag == EcalSrFlag::SRF_ZS1 || flag == EcalSrFlag::SRF_ZS2)) { - meZSFullReadoutMap.fill(id); - meZSFullReadout.fill(id); + meZSFullReadoutMap.fill(getEcalDQMSetupObjects(), id); + meZSFullReadout.fill(getEcalDQMSetupObjects(), id); } if (sizes[iTower] == 0 && flag == EcalSrFlag::SRF_FULL) { - meFRDroppedMap.fill(id); - meFRDropped.fill(id); + meFRDroppedMap.fill(getEcalDQMSetupObjects(), id); + meFRDropped.fill(getEcalDQMSetupObjects(), id); } } } diff --git a/DQM/EcalMonitorTasks/src/TestPulseTask.cc b/DQM/EcalMonitorTasks/src/TestPulseTask.cc index d6c008212448e..de35ca709ff15 100644 --- a/DQM/EcalMonitorTasks/src/TestPulseTask.cc +++ b/DQM/EcalMonitorTasks/src/TestPulseTask.cc @@ -102,9 +102,9 @@ namespace ecaldqm { for (typename DigiCollection::const_iterator digiItr(_digis.begin()); digiItr != _digis.end(); ++digiItr) { DetId id(digiItr->id()); - meOccupancy.fill(id); + meOccupancy.fill(getEcalDQMSetupObjects(), id); - int iDCC(dccId(id) - 1); + int iDCC(dccId(id, GetElectronicsMap()) - 1); if (!enable_[iDCC]) continue; @@ -118,7 +118,7 @@ namespace ecaldqm { } for (int iSample(0); iSample < 10; iSample++) - meShape.fill(id, iSample + 0.5, float(dataFrame.sample(iSample).adc())); + meShape.fill(getEcalDQMSetupObjects(), id, iSample + 0.5, float(dataFrame.sample(iSample).adc())); } } @@ -130,7 +130,7 @@ namespace ecaldqm { for (EcalPnDiodeDigiCollection::const_iterator digiItr(_digis.begin()); digiItr != _digis.end(); ++digiItr) { EcalPnDiodeDetId const& id(digiItr->id()); - int iDCC(dccId(id) - 1); + int iDCC(dccId(id, GetElectronicsMap()) - 1); if (!enable_[iDCC]) continue; @@ -167,7 +167,7 @@ namespace ecaldqm { double amplitude(max - pedestal); - mePNAmplitude.fill(id, amplitude); + mePNAmplitude.fill(getEcalDQMSetupObjects(), id, amplitude); } } @@ -179,7 +179,7 @@ namespace ecaldqm { for (EcalUncalibratedRecHitCollection::const_iterator uhitItr(_uhits.begin()); uhitItr != _uhits.end(); ++uhitItr) { DetId id(uhitItr->id()); - int iDCC(dccId(id) - 1); + int iDCC(dccId(id, GetElectronicsMap()) - 1); if (!enable_[iDCC]) continue; @@ -189,7 +189,7 @@ namespace ecaldqm { static_cast(meAmplitude).use(iME); } - meAmplitude.fill(id, uhitItr->amplitude()); + meAmplitude.fill(getEcalDQMSetupObjects(), id, uhitItr->amplitude()); } } diff --git a/DQM/EcalMonitorTasks/src/TimingTask.cc b/DQM/EcalMonitorTasks/src/TimingTask.cc index 55d329bd8accc..1287b2e5d26e7 100644 --- a/DQM/EcalMonitorTasks/src/TimingTask.cc +++ b/DQM/EcalMonitorTasks/src/TimingTask.cc @@ -54,7 +54,7 @@ namespace ecaldqm { if (ByLumiResetSwitch) { meTimeMapByLS = &MEs_.at("TimeMapByLS"); if (timestamp_.iLumi % 10 == 0) - meTimeMapByLS->reset(); + meTimeMapByLS->reset(GetElectronicsMap()); } } @@ -100,7 +100,7 @@ namespace ecaldqm { } if (energy > energyThreshold) - meChi2.fill(signedSubdet, hit.chi2()); + meChi2.fill(getEcalDQMSetupObjects(), signedSubdet, hit.chi2()); // Apply cut on chi2 of pulse shape fit if (hit.chi2() > chi2Threshold) @@ -110,18 +110,18 @@ namespace ecaldqm { if (hit.timeError() > timeErrorThreshold_) return; - meTimeAmp.fill(id, energy, time); - meTimeAmpAll.fill(id, energy, time); + meTimeAmp.fill(getEcalDQMSetupObjects(), id, energy, time); + meTimeAmpAll.fill(getEcalDQMSetupObjects(), id, energy, time); if (energy > timingVsBXThreshold_ && signedSubdet == EcalBarrel) - meTimingVsBX.fill(bxBin_, time); + meTimingVsBX.fill(getEcalDQMSetupObjects(), bxBin_, time); if (energy > energyThreshold) { - meTimeAll.fill(id, time); - meTimeMap.fill(id, time); - meTimeMapByLS->fill(id, time); - meTime1D.fill(id, time); - meTimeAllMap.fill(id, time); + meTimeAll.fill(getEcalDQMSetupObjects(), id, time); + meTimeMap.fill(getEcalDQMSetupObjects(), id, time); + meTimeMapByLS->fill(getEcalDQMSetupObjects(), id, time); + meTime1D.fill(getEcalDQMSetupObjects(), id, time); + meTimeAllMap.fill(getEcalDQMSetupObjects(), id, time); } }); } @@ -163,8 +163,8 @@ namespace ecaldqm { continue; // Fill MEs - meTimeAmpBXm.fill(id, amp, uhitItr->outOfTimeAmplitude(4)); // BX-1 - meTimeAmpBXp.fill(id, amp, uhitItr->outOfTimeAmplitude(6)); // BX+1 + meTimeAmpBXm.fill(getEcalDQMSetupObjects(), id, amp, uhitItr->outOfTimeAmplitude(4)); // BX-1 + meTimeAmpBXp.fill(getEcalDQMSetupObjects(), id, amp, uhitItr->outOfTimeAmplitude(6)); // BX+1 } } diff --git a/DQM/EcalMonitorTasks/src/TrigPrimTask.cc b/DQM/EcalMonitorTasks/src/TrigPrimTask.cc index c53c9e485e7a4..25806b87c8b5a 100644 --- a/DQM/EcalMonitorTasks/src/TrigPrimTask.cc +++ b/DQM/EcalMonitorTasks/src/TrigPrimTask.cc @@ -62,9 +62,9 @@ namespace ecaldqm { towerReadouts_.clear(); if (ByLumiResetSwitch) { - MEs_.at("EtSummaryByLumi").reset(); - MEs_.at("TTFlags4ByLumi").reset(); - MEs_.at("LHCStatusByLumi").reset(-1); + MEs_.at("EtSummaryByLumi").reset(GetElectronicsMap()); + MEs_.at("TTFlags4ByLumi").reset(GetElectronicsMap()); + MEs_.at("LHCStatusByLumi").reset(GetElectronicsMap(), -1); } if (!lhcStatusSet) { @@ -73,7 +73,7 @@ namespace ecaldqm { edm::Handle tcdsData; _evt.getByToken(lhcStatusInfoRecordToken_, tcdsData); if (tcdsData.isValid()) { - meLHCStatusByLumi.fill(double(tcdsData->getBST().getBeamMode())); + meLHCStatusByLumi.fill(getEcalDQMSetupObjects(), double(tcdsData->getBST().getBeamMode())); lhcStatusSet = true; } } @@ -102,7 +102,7 @@ namespace ecaldqm { if ((*ttItr).second > 0) { const EcalTrigTowerDetId ttid((*ttItr).first); //if(ttid.subDet() == EcalBarrel) - meTTMaskMap.fill(ttid, 1); + meTTMaskMap.fill(getEcalDQMSetupObjects(), ttid, 1); } //masked } //loop on towers @@ -110,7 +110,7 @@ namespace ecaldqm { if ((*stItr).second > 0) { const EcalElectronicsId stid((*stItr).first); //if(stid.subdet() == EcalEndcap); - meTTMaskMap.fill(stid, 1); + meTTMaskMap.fill(getEcalDQMSetupObjects(), stid, 1); } //masked } //loop on pseudo-strips @@ -173,7 +173,7 @@ namespace ecaldqm { template void TrigPrimTask::runOnDigis(DigiCollection const& _digis) { for (typename DigiCollection::const_iterator digiItr(_digis.begin()); digiItr != _digis.end(); ++digiItr) { - EcalTrigTowerDetId ttid(getTrigTowerMap()->towerOf(digiItr->id())); + EcalTrigTowerDetId ttid(GetTrigTowerMap()->towerOf(digiItr->id())); towerReadouts_[ttid.rawId()]++; } } @@ -213,25 +213,25 @@ namespace ecaldqm { nTP[1] += 1.; else nTP[2] += 2.; - meEtVsBx.fill(ttid, bxBin_, et); + meEtVsBx.fill(getEcalDQMSetupObjects(), ttid, bxBin_, et); } - meEtReal.fill(ttid, et); - meEtRealMap.fill(ttid, et); - meEtSummary.fill(ttid, et); - meEtSummaryByLumi.fill(ttid, et); + meEtReal.fill(getEcalDQMSetupObjects(), ttid, et); + meEtRealMap.fill(getEcalDQMSetupObjects(), ttid, et); + meEtSummary.fill(getEcalDQMSetupObjects(), ttid, et); + meEtSummaryByLumi.fill(getEcalDQMSetupObjects(), ttid, et); int interest(tpItr->ttFlag() & 0x3); switch (interest) { case 0: - meLowIntMap.fill(ttid); + meLowIntMap.fill(getEcalDQMSetupObjects(), ttid); break; case 1: - meMedIntMap.fill(ttid); + meMedIntMap.fill(getEcalDQMSetupObjects(), ttid); break; case 3: - meHighIntMap.fill(ttid); + meHighIntMap.fill(getEcalDQMSetupObjects(), ttid); break; default: break; @@ -239,21 +239,21 @@ namespace ecaldqm { // Fill TT Flag MEs int ttF(tpItr->ttFlag()); - meTTFlags.fill(ttid, 1.0 * ttF); - meTTFlagsVsEt.fill(ttid, et, 1.0 * ttF); + meTTFlags.fill(getEcalDQMSetupObjects(), ttid, 1.0 * ttF); + meTTFlagsVsEt.fill(getEcalDQMSetupObjects(), ttid, et, 1.0 * ttF); // Monitor occupancy of TTF=4 // which contains info about TT auto-masking if (ttF >= 4) { - meTTFlags4.fill(ttid); - meTTFlags4ByLumi.fill(ttid); + meTTFlags4.fill(getEcalDQMSetupObjects(), ttid); + meTTFlags4ByLumi.fill(getEcalDQMSetupObjects(), ttid); } - if ((ttF == 1 || ttF == 3) && towerReadouts_[ttid.rawId()] != getTrigTowerMap()->constituentsOf(ttid).size()) - meTTFMismatch.fill(ttid); + if ((ttF == 1 || ttF == 3) && towerReadouts_[ttid.rawId()] != GetTrigTowerMap()->constituentsOf(ttid).size()) + meTTFMismatch.fill(getEcalDQMSetupObjects(), ttid); } - meOccVsBx.fill(EcalBarrel, bxBin_, nTP[0]); - meOccVsBx.fill(-EcalEndcap, bxBin_, nTP[1]); - meOccVsBx.fill(EcalEndcap, bxBin_, nTP[2]); + meOccVsBx.fill(getEcalDQMSetupObjects(), EcalBarrel, bxBin_, nTP[0]); + meOccVsBx.fill(getEcalDQMSetupObjects(), -EcalEndcap, bxBin_, nTP[1]); + meOccVsBx.fill(getEcalDQMSetupObjects(), EcalEndcap, bxBin_, nTP[2]); // Set TT/Strip Masking status in Ecal3P view // Status Records are read-in at beginRun() but filled here @@ -266,8 +266,8 @@ namespace ecaldqm { for (EcalTPGTowerStatusMap::const_iterator ttItr(TTStatusMap.begin()); ttItr != TTStatusMap.end(); ++ttItr) { const EcalTrigTowerDetId ttid(ttItr->first); if (ttItr->second > 0) - meTTMaskMapAll.setBinContent(ttid, 1); // TT is masked - } // TTs + meTTMaskMapAll.setBinContent(getEcalDQMSetupObjects(), ttid, 1); // TT is masked + } // TTs // Fill from Strip Status Rcd const EcalTPGStripStatus* StripStatus(StripStatusRcd.product()); @@ -276,10 +276,10 @@ namespace ecaldqm { const EcalTriggerElectronicsId stid(stItr->first); // Since ME has kTriggerTower binning, convert to EcalTrigTowerDetId first // In principle, setBinContent() could be implemented for EcalTriggerElectronicsId class as well - const EcalTrigTowerDetId ttid(getElectronicsMap()->getTrigTowerDetId(stid.tccId(), stid.ttId())); + const EcalTrigTowerDetId ttid(GetElectronicsMap()->getTrigTowerDetId(stid.tccId(), stid.ttId())); if (stItr->second > 0) - meTTMaskMapAll.setBinContent(ttid, 1); // PseudoStrip is masked - } // PseudoStrips + meTTMaskMapAll.setBinContent(getEcalDQMSetupObjects(), ttid, 1); // PseudoStrip is masked + } // PseudoStrips } // TrigPrimTask::runOnRealTPs() @@ -307,9 +307,9 @@ namespace ecaldqm { } } - meEtMaxEmul.fill(ttid, maxEt); + meEtMaxEmul.fill(getEcalDQMSetupObjects(), ttid, maxEt); if (maxEt > 0.) - meEmulMaxIndex.fill(ttid, iMax); + meEmulMaxIndex.fill(getEcalDQMSetupObjects(), ttid, iMax); bool match(true); bool matchFG(true); @@ -324,7 +324,7 @@ namespace ecaldqm { if (realEt > 0) { int ttF(realItr->ttFlag()); if ((ttF == 1 || ttF == 3) && - towerReadouts_[ttid.rawId()] == getTrigTowerMap()->constituentsOf(ttid).size()) { + towerReadouts_[ttid.rawId()] == GetTrigTowerMap()->constituentsOf(ttid).size()) { if (et != realEt) match = false; if (tpItr->fineGrain() != realItr->fineGrain()) @@ -354,12 +354,13 @@ namespace ecaldqm { matchedIndex.push_back(0); // no Et match found => no emul // Fill Real vs Emulated TP Et - meRealvEmulEt.fill(ttid, realEt, (*tpItr)[2].compressedEt()); // iDigi=2:in-time BX + meRealvEmulEt.fill( + getEcalDQMSetupObjects(), ttid, realEt, (*tpItr)[2].compressedEt()); // iDigi=2:in-time BX // Fill matchedIndex ME for (std::vector::iterator matchItr(matchedIndex.begin()); matchItr != matchedIndex.end(); ++matchItr) { - meMatchedIndex.fill(ttid, *matchItr + 0.5); + meMatchedIndex.fill(getEcalDQMSetupObjects(), ttid, *matchItr + 0.5); // timing information is only within emulated TPs (real TPs have one time sample) // if(HLTCaloBit_) MEs_[kTimingCalo].fill(ttid, float(*matchItr)); @@ -373,9 +374,9 @@ namespace ecaldqm { } if (!match) - meEtEmulError.fill(ttid); + meEtEmulError.fill(getEcalDQMSetupObjects(), ttid); if (!matchFG) - meFGEmulError.fill(ttid); + meFGEmulError.fill(getEcalDQMSetupObjects(), ttid); } } diff --git a/DQM/GEM/BuildFile.xml b/DQM/GEM/BuildFile.xml index a1fdbaede7c39..3426b1493c859 100644 --- a/DQM/GEM/BuildFile.xml +++ b/DQM/GEM/BuildFile.xml @@ -1,3 +1,12 @@ + + + + + + + + + diff --git a/DQM/GEM/interface/GEMDQMBase.h b/DQM/GEM/interface/GEMDQMBase.h new file mode 100644 index 0000000000000..381b36f28604c --- /dev/null +++ b/DQM/GEM/interface/GEMDQMBase.h @@ -0,0 +1,465 @@ +#ifndef DQM_GEM_INTERFACE_GEMDQMBase_h +#define DQM_GEM_INTERFACE_GEMDQMBase_h + +#include +#include + +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/PluginManager/interface/ModuleDef.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "DQMServices/Core/interface/DQMEDAnalyzer.h" +#include "DQMServices/Core/interface/DQMEDAnalyzer.h" +#include "DQMServices/Core/interface/DQMStore.h" +#include "DQMServices/Core/interface/MonitorElement.h" + +#include "CondFormats/GEMObjects/interface/GEMeMap.h" +#include "Validation/MuonGEMHits/interface/GEMValidationUtils.h" + +#include "DataFormats/GEMDigi/interface/GEMDigiCollection.h" + +#include "Geometry/GEMGeometry/interface/GEMGeometry.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" + +class GEMDQMBase : public DQMEDAnalyzer { +public: + // Borrwed from DQMOffline/Muon/interface/GEMOfflineDQMBase.h + class BookingHelper { + public: + BookingHelper(DQMStore::IBooker &ibooker, const TString &name_suffix, const TString &title_suffix) + : ibooker_(&ibooker), name_suffix_(name_suffix), title_suffix_(title_suffix) {} + + ~BookingHelper() {} + + MonitorElement *book1D(TString name, + TString title, + int nbinsx, + double xlow, + double xup, + TString x_title = "", + TString y_title = "Entries") { + name += name_suffix_; + title += title_suffix_ + ";" + x_title + ";" + y_title; + return ibooker_->book1D(name, title, nbinsx, xlow, xup); + } + + MonitorElement *book1D(TString name, + TString title, + std::vector &x_binning, + TString x_title = "", + TString y_title = "Entries") { + name += name_suffix_; + title += title_suffix_ + ";" + x_title + ";" + y_title; + TH1F *h_obj = new TH1F(name, title, x_binning.size() - 1, &x_binning[0]); + return ibooker_->book1D(name, h_obj); + } + + MonitorElement *book2D(TString name, + TString title, + int nbinsx, + double xlow, + double xup, + int nbinsy, + double ylow, + double yup, + TString x_title = "", + TString y_title = "") { + name += name_suffix_; + title += title_suffix_ + ";" + x_title + ";" + y_title; + return ibooker_->book2D(name, title, nbinsx, xlow, xup, nbinsy, ylow, yup); + } + + private: + DQMStore::IBooker *ibooker_; + const TString name_suffix_; + const TString title_suffix_; + }; // BookingHelper + + template + class MEMapInfT { + public: + MEMapInfT() : bOperating_(false){}; + + MEMapInfT( + GEMDQMBase *pDQMBase, TString strName, TString strTitle, TString strTitleX = "", TString strTitleY = "Entries") + : pDQMBase_(pDQMBase), strName_(strName), strTitle_(strTitle), strTitleX_(strTitleX), strTitleY_(strTitleY){}; + + MEMapInfT(GEMDQMBase *pDQMBase, + TString strName, + TString strTitle, + Int_t nBinsX, + Double_t dXL, + Double_t dXH, + TString strTitleX = "", + TString strTitleY = "Entries") + : pDQMBase_(pDQMBase), + strName_(strName), + strTitle_(strTitle), + strTitleX_(strTitleX), + strTitleY_(strTitleY), + bOperating_(true), + nBinsX_(nBinsX), + dXL_(dXL), + dXH_(dXH), + nBinsY_(-1){}; + + MEMapInfT(GEMDQMBase *pDQMBase, + TString strName, + TString strTitle, + std::vector &x_binning, + TString strTitleX = "", + TString strTitleY = "Entries") + : pDQMBase_(pDQMBase), + strName_(strName), + strTitle_(strTitle), + strTitleX_(strTitleX), + strTitleY_(strTitleY), + bOperating_(true), + nBinsX_(-1), + nBinsY_(-1) { + for (Int_t i = 0; i < (Int_t)x_binning.size(); i++) + x_binning_.push_back(x_binning[i]); + }; + + MEMapInfT(GEMDQMBase *pDQMBase, + TString strName, + TString strTitle, + Int_t nBinsX, + Double_t dXL, + Double_t dXH, + Int_t nBinsY, + Double_t dYL, + Double_t dYH, + TString strTitleX = "", + TString strTitleY = "") + : pDQMBase_(pDQMBase), + strName_(strName), + strTitle_(strTitle), + strTitleX_(strTitleX), + strTitleY_(strTitleY), + bOperating_(true), + nBinsX_(nBinsX), + dXL_(dXL), + dXH_(dXH), + nBinsY_(nBinsY), + dYL_(dYL), + dYH_(dYH){}; + + ~MEMapInfT(){}; + + Bool_t isOperating() { return bOperating_; }; + void SetOperating(Bool_t bOperating) { bOperating_ = bOperating; }; + void turnOn() { bOperating_ = true; }; + void turnOff() { bOperating_ = false; }; + + TString GetName() { return strName_; }; + void SetName(TString strName) { strName_ = strName; }; + TString GetTitle() { return strTitle_; }; + void SetTitle(TString strTitle) { strTitle_ = strTitle; }; + TString GetTitleX() { return strTitleX_; }; + void SetTitleX(TString strTitleX) { strTitleX_ = strTitleX; }; + TString GetTitleY() { return strTitleY_; }; + void SetTitleY(TString strTitleY) { strTitleY_ = strTitleY; }; + + Int_t GetNbinsX() { return nBinsX_; }; + void SetNbinsX(Int_t nBinsX) { nBinsX_ = nBinsX; }; + Double_t GetBinLowEdgeX() { return dXL_; }; + void SetBinLowEdgeX(Double_t dXL) { dXL_ = dXL; }; + Double_t GetBinHighEdgeX() { return dXH_; }; + void SetBinHighEdgeX(Double_t dXH) { dXH_ = dXH; }; + // FIXME: x_binning_ + + Int_t GetNbinsY() { return nBinsY_; }; + void SetNbinsY(Int_t nBinsY) { nBinsY_ = nBinsY; }; + Double_t GetBinLowEdgeY() { return dYL_; }; + void SetBinLowEdgeY(Double_t dYL) { dYL_ = dYL; }; + Double_t GetBinHighEdgeY() { return dYH_; }; + void SetBinHighEdgeY(Double_t dYH) { dYH_ = dYH; }; + + void SetBinConfX(Int_t nBins, Double_t dL = 0.5, Double_t dH = -1048576.0) { + nBinsX_ = nBins; + dXL_ = dL; + if (dH <= dL) + dH = dL + nBins; + dXH_ = dH; + }; + + void SetBinConfY(Int_t nBins, Double_t dL = 0.5, Double_t dH = -1048576.0) { + nBinsY_ = nBins; + dYL_ = dL; + if (dH <= dL) + dH = dL + nBins; + dYH_ = dH; + }; + + M &map() { return mapHist; } + int bookND(BookingHelper &bh, K key) { + if (!bOperating_) + return 0; + if (nBinsY_ > 0 && nBinsX_ > 0) { + mapHist[key] = bh.book2D(strName_, strTitle_, nBinsX_, dXL_, dXH_, nBinsY_, dYL_, dYH_, strTitleX_, strTitleY_); + return 0; + } else if (!x_binning_.empty()) { + mapHist[key] = bh.book1D(strName_, strTitle_, nBinsX_, dXL_, dXH_, strTitleX_, strTitleY_); + return 0; + } else if (nBinsX_ > 0) { + mapHist[key] = bh.book1D(strName_, strTitle_, nBinsX_, dXL_, dXH_, strTitleX_, strTitleY_); + return 0; + } + + return -1; + }; + + dqm::impl::MonitorElement *FindHist(K key) { + if (mapHist.find(key) == mapHist.end()) { + std::cout << "" << std::endl; // FIXME: It's about sending a message + return nullptr; + } + return mapHist[key]; + }; + + int SetLabelForChambers(K key, Int_t nAxis, Int_t nNumBin = -1) { + if (nNumBin <= 0) { + if (nAxis == 1) + nNumBin = nBinsX_; + else if (nAxis == 2) + nNumBin = nBinsY_; + else + return -1; + } + dqm::impl::MonitorElement *histCurr = FindHist(key); + if (histCurr == nullptr) + return -999; + for (Int_t i = 1; i <= nNumBin; i++) { + histCurr->setBinLabel(i, Form("%i", i), nAxis); + } + return 0; + }; + + int SetLabelForVFATs(K key, Int_t nNumEtaPartitions, Int_t nAxis, Int_t nNumBin = -1) { + if (nNumBin <= 0) { + if (nAxis == 1) + nNumBin = nBinsX_; + else if (nAxis == 2) + nNumBin = nBinsY_; + else + return -1; + } + dqm::impl::MonitorElement *histCurr = FindHist(key); + if (histCurr == nullptr) + return -999; + for (Int_t i = 0; i < nNumBin; i++) { + Int_t nIEta = pDQMBase_->getIEtaFromVFAT(std::get<1>(key), i); + histCurr->setBinLabel(i + 1, Form("%i (%i)", i, nIEta), nAxis); + } + return 0; + }; + + int Fill(K key, Double_t x) { + if (!bOperating_) + return 0; + dqm::impl::MonitorElement *hist = FindHist(key); + if (hist == nullptr) + return -999; + hist->Fill(x); + return 0; + }; + + int Fill(K key, Double_t x, Double_t y) { + if (!bOperating_) + return 0; + dqm::impl::MonitorElement *hist = FindHist(key); + if (hist == nullptr) + return -999; + hist->Fill(x, y); + return 0; + }; + + int FillBits(K key, Double_t x, UInt_t bits) { + if (!bOperating_) + return 0; + dqm::impl::MonitorElement *hist = FindHist(key); + if (hist == nullptr) + return -999; + + if (nBinsY_ <= 0) + return -888; + UInt_t unMask = 0x1; + for (Int_t i = 1; i <= nBinsY_; i++) { + if ((unMask & bits) != 0) + hist->Fill(x, i); + unMask <<= 1; + } + + return 0; + }; + + private: + GEMDQMBase *pDQMBase_; + + M mapHist; + TString strName_, strTitle_, strTitleX_, strTitleY_; + Bool_t bOperating_; + + std::vector x_binning_; + Int_t nBinsX_; + Double_t dXL_, dXH_; + Int_t nBinsY_; + Double_t dYL_, dYH_; + }; + + typedef MEMapInfT MEMap2Inf; + typedef MEMapInfT MEMap3Inf; + typedef MEMapInfT MEMap4Inf; + + class MEStationInfo { + public: + MEStationInfo() : nNumChambers_(-1){}; + MEStationInfo(Int_t nRegion, + Int_t nStation, + Int_t nLayer, + Int_t nNumChambers, + Int_t nNumEtaPartitions, + Int_t nMaxVFAT, + Int_t nNumStrip) + : nRegion_(nRegion), + nStation_(nStation), + nLayer_(nLayer), + nNumChambers_(nNumChambers), + nNumEtaPartitions_(nNumEtaPartitions), + nMaxVFAT_(nMaxVFAT), + nNumStrip_(nNumStrip){}; + + bool operator==(const MEStationInfo &other) const { + return (nRegion_ == other.nRegion_ && nStation_ == other.nStation_ && nLayer_ == other.nLayer_ && + nNumChambers_ == other.nNumChambers_ && nNumEtaPartitions_ == other.nNumEtaPartitions_ && + nMaxVFAT_ == other.nMaxVFAT_ && nNumStrip_ == other.nNumStrip_); + }; + + Int_t nRegion_; + Int_t nStation_; + Int_t nLayer_; + Int_t nNumChambers_; + Int_t nNumEtaPartitions_; + Int_t nMaxVFAT_; + Int_t nNumStrip_; + }; + +public: + explicit GEMDQMBase(const edm::ParameterSet &cfg); + ~GEMDQMBase() override{}; + +protected: + int initGeometry(edm::EventSetup const &iSetup); + int loadChambers(); + + int GenerateMEPerChamber(DQMStore::IBooker &ibooker); + virtual int ProcessWithMEMap2(BookingHelper &bh, ME2IdsKey key) { return 0; }; // must be overrided + virtual int ProcessWithMEMap3(BookingHelper &bh, ME3IdsKey key) { return 0; }; // must be overrided + virtual int ProcessWithMEMap4(BookingHelper &bh, ME4IdsKey key) { return 0; }; // must be overrided + virtual int ProcessWithMEMap3WithChamber(BookingHelper &bh, ME4IdsKey key) { return 0; }; // must be overrided + + int keyToRegion(ME2IdsKey key) { return std::get<0>(key); }; + int keyToRegion(ME3IdsKey key) { return std::get<0>(key); }; + int keyToRegion(ME4IdsKey key) { return std::get<0>(key); }; + int keyToStation(ME2IdsKey key) { return std::get<1>(key); }; + int keyToStation(ME3IdsKey key) { return std::get<1>(key); }; + int keyToStation(ME4IdsKey key) { return std::get<1>(key); }; + int keyToLayer(ME3IdsKey key) { return std::get<2>(key); }; + int keyToLayer(ME4IdsKey key) { return std::get<2>(key); }; + int keyToChamber(ME4IdsKey key) { return std::get<3>(key); }; + int keyToIEta(ME4IdsKey key) { return std::get<3>(key); }; + + ME3IdsKey key4Tokey3(ME4IdsKey key) { + auto keyNew = ME3IdsKey{keyToRegion(key), keyToStation(key), keyToLayer(key)}; + return keyNew; + }; + + int SortingLayers(std::vector &listLayers); + dqm::impl::MonitorElement *CreateSummaryHist(DQMStore::IBooker &ibooker, TString strName); + + template + inline bool checkRefs(const std::vector &); + + int getNumEtaPartitions(const GEMStation *); + inline int getVFATNumber(const int, const int, const int); + inline int getVFATNumberGE11(const int, const int, const int); + inline int getVFATNumberByStrip(const int, const int, const int); + inline int getIEtaFromVFAT(const int station, const int vfat); + inline int getIEtaFromVFATGE11(const int vfat); + inline int getMaxVFAT(const int); + inline int getDetOccXBin(const int, const int, const int); + + std::string log_category_; + + const GEMGeometry *GEMGeometry_; + + std::vector gemChambers_; + + std::map MEMap2Check_; + std::map MEMap3Check_; + std::map MEMap3WithChCheck_; + std::map MEMap4Check_; + + int nMaxNumCh_; + std::map mapStationToIdx_; + std::map mapStationInfo_; + + Int_t nNumEtaPartitionGE0_; + Int_t nNumEtaPartitionGE11_; + Int_t nNumEtaPartitionGE21_; +}; + +// Borrwed from DQMOffline/Muon/interface/GEMOfflineDQMBase.h +template +inline bool GEMDQMBase::checkRefs(const std::vector &refs) { + if (refs.empty()) + return false; + if (refs.front() == nullptr) + return false; + return true; +} + +// The 'get...' functions in the below are borrwed from DQMOffline/Muon/interface/GEMOfflineDQMBase.h +inline int GEMDQMBase::getMaxVFAT(const int station) { + if (station == 1) + return GEMeMap::maxVFatGE11_; + else if (station == 2) + return GEMeMap::maxVFatGE21_; + else + return -1; +} + +inline int GEMDQMBase::getVFATNumber(const int station, const int ieta, const int vfat_phi) { + if (station == 1) + return getVFATNumberGE11(station, ieta, vfat_phi); + return getVFATNumberGE11(station, ieta, vfat_phi); // FIXME: What about GE21 and GE0? +} + +inline int GEMDQMBase::getVFATNumberGE11(const int station, const int ieta, const int vfat_phi) { + return vfat_phi * nNumEtaPartitionGE11_ + (8 - ieta); +} + +inline int GEMDQMBase::getVFATNumberByStrip(const int station, const int ieta, const int strip) { + const int vfat_phi = (strip % GEMeMap::maxChan_) ? strip / GEMeMap::maxChan_ : strip / GEMeMap::maxChan_ - 1; + return getVFATNumber(station, ieta, vfat_phi); +} + +inline int GEMDQMBase::getIEtaFromVFAT(const int station, const int vfat) { + if (station == 1) + return getIEtaFromVFATGE11(vfat); + return getIEtaFromVFATGE11(vfat); // FIXME: What about GE21 and GE0? +} + +inline int GEMDQMBase::getIEtaFromVFATGE11(const int vfat) { return 8 - (vfat % nNumEtaPartitionGE11_); } + +inline int GEMDQMBase::getDetOccXBin(const int chamber, const int layer, const int n_chambers) { + return n_chambers * (chamber - 1) + layer; +} + +#endif // DQM_GEM_INTERFACE_GEMDQMBase_h diff --git a/DQM/GEM/plugins/BuildFile.xml b/DQM/GEM/plugins/BuildFile.xml index 93b7aed74e564..a469275194e23 100644 --- a/DQM/GEM/plugins/BuildFile.xml +++ b/DQM/GEM/plugins/BuildFile.xml @@ -3,9 +3,9 @@ + - - + diff --git a/DQM/GEM/plugins/GEMDAQStatusSource.cc b/DQM/GEM/plugins/GEMDAQStatusSource.cc new file mode 100644 index 0000000000000..e8b978b8311f9 --- /dev/null +++ b/DQM/GEM/plugins/GEMDAQStatusSource.cc @@ -0,0 +1,410 @@ +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/PluginManager/interface/ModuleDef.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "DQMServices/Core/interface/DQMEDAnalyzer.h" +#include "DQMServices/Core/interface/DQMStore.h" +#include "DQMServices/Core/interface/MonitorElement.h" + +#include "Validation/MuonGEMHits/interface/GEMValidationUtils.h" + +#include "DataFormats/GEMDigi/interface/GEMDigiCollection.h" +#include "DataFormats/GEMDigi/interface/GEMVfatStatusDigiCollection.h" +#include "DataFormats/GEMDigi/interface/GEMGEBdataCollection.h" +#include "DataFormats/GEMDigi/interface/GEMAMCdataCollection.h" +#include "DataFormats/GEMDigi/interface/GEMAMC13EventCollection.h" + +#include "DQM/GEM/interface/GEMDQMBase.h" + +#include + +//---------------------------------------------------------------------------------------------------- + +class GEMDAQStatusSource : public GEMDQMBase { +public: + explicit GEMDAQStatusSource(const edm::ParameterSet &cfg); + ~GEMDAQStatusSource() override{}; + static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); + +protected: + void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override{}; + void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override; + void analyze(edm::Event const &e, edm::EventSetup const &eSetup) override; + +private: + int ProcessWithMEMap3(BookingHelper &bh, ME3IdsKey key) override; + int ProcessWithMEMap3WithChamber(BookingHelper &bh, ME4IdsKey key) override; + + void SetLabelAMCStatus(MonitorElement *h2Status); + void SetLabelGEBStatus(MonitorElement *h2Status); + void SetLabelVFATStatus(MonitorElement *h2Status); + + edm::EDGetToken tagDigi_; + edm::EDGetToken tagVFAT_; + edm::EDGetToken tagGEB_; + edm::EDGetToken tagAMC_; + edm::EDGetToken tagAMC13_; + + MonitorElement *h2AMCStatusPos_; + MonitorElement *h2AMCStatusNeg_; + MonitorElement *h2AMCNumGEBPos_; + MonitorElement *h2AMCNumGEBNeg_; + + MEMap3Inf mapStatusGEB_; + MEMap3Inf mapStatusVFAT_; + MEMap3Inf mapGEBNumVFAT_; + + MEMap4Inf mapStatusVFATPerCh_; + + MonitorElement *h2SummaryStatus; + + Int_t nBXMin_, nBXMax_; + + std::map mapFEDIdToRe_; + Int_t nAMCSlots_; + + int nBitAMC_ = 7; + int nBitGEB_ = 17; + int nBitVFAT_ = 9; +}; + +using namespace std; +using namespace edm; + +GEMDAQStatusSource::GEMDAQStatusSource(const edm::ParameterSet &cfg) : GEMDQMBase(cfg) { + tagDigi_ = consumes(cfg.getParameter("digisInputLabel")); + tagVFAT_ = consumes(cfg.getParameter("VFATInputLabel")); + tagGEB_ = consumes(cfg.getParameter("GEBInputLabel")); + tagAMC_ = consumes(cfg.getParameter("AMCInputLabel")); + tagAMC13_ = consumes(cfg.getParameter("AMC13InputLabel")); + + nAMCSlots_ = cfg.getParameter("AMCSlots"); +} + +void GEMDAQStatusSource::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { + edm::ParameterSetDescription desc; + desc.add("digisInputLabel", edm::InputTag("muonGEMDigis", "")); + desc.add("VFATInputLabel", edm::InputTag("muonGEMDigis", "vfatStatus")); + desc.add("GEBInputLabel", edm::InputTag("muonGEMDigis", "gebStatus")); + desc.add("AMCInputLabel", edm::InputTag("muonGEMDigis", "AMCdata")); + desc.add("AMC13InputLabel", edm::InputTag("muonGEMDigis", "AMC13Event")); + + desc.add("AMCSlots", 13); + desc.addUntracked("logCategory", "GEMDAQStatusSource"); + + descriptions.add("GEMDAQStatusSource", desc); +} + +void GEMDAQStatusSource::SetLabelAMCStatus(MonitorElement *h2Status) { + unsigned int unBinPos = 1; + h2Status->setBinLabel(unBinPos++, "Good", 2); + h2Status->setBinLabel(unBinPos++, "BC0 not locked", 2); + h2Status->setBinLabel(unBinPos++, "DAQ not ready", 2); + h2Status->setBinLabel(unBinPos++, "DAQ clock not locked", 2); + h2Status->setBinLabel(unBinPos++, "MMCM not locked", 2); + h2Status->setBinLabel(unBinPos++, "Back pressure", 2); + h2Status->setBinLabel(unBinPos++, "GLIB out-of-sync", 2); +} + +void GEMDAQStatusSource::SetLabelGEBStatus(MonitorElement *h2Status) { + unsigned int unBinPos = 1; + h2Status->setBinLabel(unBinPos++, "Good", 2); + h2Status->setBinLabel(unBinPos++, "BX mismatch GLIB OH", 2); + h2Status->setBinLabel(unBinPos++, "BX mismatch GLIB VFAT", 2); + h2Status->setBinLabel(unBinPos++, "OOS GLIB OH", 2); + h2Status->setBinLabel(unBinPos++, "OOS GLIB VFAT", 2); + h2Status->setBinLabel(unBinPos++, "No VFAT marker", 2); + h2Status->setBinLabel(unBinPos++, "Event size warn", 2); + h2Status->setBinLabel(unBinPos++, "L1AFIFO near full", 2); + h2Status->setBinLabel(unBinPos++, "InFIFO near full", 2); + h2Status->setBinLabel(unBinPos++, "EvtFIFO near full", 2); + h2Status->setBinLabel(unBinPos++, "Event size overflow", 2); + h2Status->setBinLabel(unBinPos++, "L1AFIFO full", 2); + h2Status->setBinLabel(unBinPos++, "InFIFO full", 2); + h2Status->setBinLabel(unBinPos++, "EvtFIFO full", 2); + h2Status->setBinLabel(unBinPos++, "Input FIFO underflow", 2); + h2Status->setBinLabel(unBinPos++, "Stuck data", 2); + h2Status->setBinLabel(unBinPos++, "Event FIFO underflow", 2); +} + +void GEMDAQStatusSource::SetLabelVFATStatus(MonitorElement *h2Status) { + unsigned int unBinPos = 1; + h2Status->setBinLabel(unBinPos++, "Good", 2); + h2Status->setBinLabel(unBinPos++, "CRC fail", 2); + h2Status->setBinLabel(unBinPos++, "b1010 fail", 2); + h2Status->setBinLabel(unBinPos++, "b1100 fail", 2); + h2Status->setBinLabel(unBinPos++, "b1110 fail", 2); + h2Status->setBinLabel(unBinPos++, "Hamming error", 2); + h2Status->setBinLabel(unBinPos++, "AFULL", 2); + h2Status->setBinLabel(unBinPos++, "SEUlogic", 2); + h2Status->setBinLabel(unBinPos++, "SUEI2C", 2); +} + +void GEMDAQStatusSource::bookHistograms(DQMStore::IBooker &ibooker, edm::Run const &, edm::EventSetup const &iSetup) { + initGeometry(iSetup); + if (GEMGeometry_ == nullptr) + return; + loadChambers(); + + nBXMin_ = -10; + nBXMax_ = 10; + + mapFEDIdToRe_[1467] = -1; // FIXME: Need more systematic way + mapFEDIdToRe_[1468] = 1; + + ibooker.cd(); + ibooker.setCurrentFolder("GEM/DAQStatus"); + + h2AMCStatusPos_ = ibooker.book2D("amc_statusflagPos", + "Status of AMC slots (positive region);AMC slot;", + nAMCSlots_, + -0.5, + nAMCSlots_ - 0.5, + nBitAMC_, + 0.5, + nBitAMC_ + 0.5); + h2AMCStatusNeg_ = ibooker.book2D("amc_statusflagNeg", + "Status of AMC slots (negative region);AMC slot;", + nAMCSlots_, + -0.5, + nAMCSlots_ - 0.5, + nBitAMC_, + 0.5, + nBitAMC_ + 0.5); + h2AMCNumGEBPos_ = ibooker.book2D("amc_numGEBsPos", + "Number of GEBs in AMCs (positive region);AMC slot;Number of GEBs", + nAMCSlots_, + -0.5, + nAMCSlots_ - 0.5, + 41, + -0.5, + 41 - 0.5); + h2AMCNumGEBNeg_ = ibooker.book2D("amc_numGEBsNeg", + "Number of GEBs in AMCs (negative region);AMC slot;Number of GEBs", + nAMCSlots_, + -0.5, + nAMCSlots_ - 0.5, + 41, + -0.5, + 41 - 0.5); + + SetLabelAMCStatus(h2AMCStatusPos_); + SetLabelAMCStatus(h2AMCStatusNeg_); + + mapStatusGEB_ = + MEMap3Inf(this, "geb_input_status", "GEB Input Status", 36, 0.5, 36.5, nBitGEB_, 0.5, nBitGEB_ + 0.5, "Chamber"); + mapStatusVFAT_ = + MEMap3Inf(this, "vfat_status", "VFAT Quality Status", 24, 0.5, 24.5, nBitVFAT_, 0.5, nBitVFAT_ + 0.5, "VFAT"); + mapGEBNumVFAT_ = MEMap3Inf(this, + "geb_numVFATs", + "Number of VFATs in GEBs", + 36, + 0.5, + 36.5, + 24 + 1, + -0.5, + 24 + 0.5); // FIXME: The maximum number of VFATs is different for each stations + + mapStatusVFATPerCh_ = + MEMap4Inf(this, "vfat_status", "VFAT Quality Status", 24, 0.5, 24.5, nBitVFAT_, 0.5, nBitVFAT_ + 0.5, "VFAT"); + + GenerateMEPerChamber(ibooker); + + h2SummaryStatus = CreateSummaryHist(ibooker, "summaryStatus"); +} + +int GEMDAQStatusSource::ProcessWithMEMap3(BookingHelper &bh, ME3IdsKey key) { + MEStationInfo &stationInfo = mapStationInfo_[key]; + + mapStatusGEB_.SetBinConfX(stationInfo.nNumChambers_); + mapStatusGEB_.bookND(bh, key); + mapStatusGEB_.SetLabelForChambers(key, 1); + + SetLabelGEBStatus(mapStatusGEB_.FindHist(key)); + + mapStatusVFAT_.SetBinConfX(stationInfo.nMaxVFAT_); + mapStatusVFAT_.bookND(bh, key); + mapStatusVFAT_.SetLabelForVFATs(key, stationInfo.nNumEtaPartitions_, 1); + + SetLabelVFATStatus(mapStatusVFAT_.FindHist(key)); + + mapGEBNumVFAT_.SetBinConfX(stationInfo.nNumChambers_); + mapGEBNumVFAT_.bookND(bh, key); + mapGEBNumVFAT_.SetLabelForChambers(key, 1); + + return 0; +} + +int GEMDAQStatusSource::ProcessWithMEMap3WithChamber(BookingHelper &bh, ME4IdsKey key) { + ME3IdsKey key3 = key4Tokey3(key); + MEStationInfo &stationInfo = mapStationInfo_[key3]; + + mapStatusVFATPerCh_.SetBinConfX(stationInfo.nMaxVFAT_); + mapStatusVFATPerCh_.bookND(bh, key); + mapStatusVFATPerCh_.SetLabelForVFATs(key, stationInfo.nNumEtaPartitions_, 1); + SetLabelVFATStatus(mapStatusVFATPerCh_.FindHist(key)); + + return 0; +} + +void GEMDAQStatusSource::analyze(edm::Event const &event, edm::EventSetup const &eventSetup) { + edm::Handle gemDigis; + edm::Handle gemVFAT; + edm::Handle gemGEB; + edm::Handle gemAMC; + edm::Handle gemAMC13; + + event.getByToken(tagDigi_, gemDigis); + event.getByToken(tagVFAT_, gemVFAT); + event.getByToken(tagGEB_, gemGEB); + event.getByToken(tagAMC_, gemAMC); + event.getByToken(tagAMC13_, gemAMC13); + + std::vector listAMCRegion; + + for (GEMAMC13EventCollection::DigiRangeIterator amc13It = gemAMC13->begin(); amc13It != gemAMC13->end(); ++amc13It) { + const GEMAMC13EventCollection::Range &range = (*amc13It).second; + for (auto amc13 = range.first; amc13 != range.second; ++amc13) { + for (int r = 0; r < int(amc13->nAMC()); r++) { + listAMCRegion.push_back(mapFEDIdToRe_[(UInt_t)amc13->sourceId()]); + } + } + } + + int nIdxAMCFull = 0; + MonitorElement *h2AMCStatus, *h2AMCNumGEB; + + for (GEMAMCdataCollection::DigiRangeIterator amcIt = gemAMC->begin(); amcIt != gemAMC->end(); ++amcIt) { + const GEMAMCdataCollection::Range &range = (*amcIt).second; + for (auto amc = range.first; amc != range.second; ++amc) { + uint64_t unBit = 1; + bool bErr = false; + + if (nIdxAMCFull >= (int)listAMCRegion.size()) { + edm::LogError(log_category_) << "+++ Error : Mismatch of the number of AMCs in AMC13 and the actual AMCs +++\n"; + break; + } + + if (listAMCRegion[nIdxAMCFull] > 0) { + h2AMCStatus = h2AMCStatusPos_; + h2AMCNumGEB = h2AMCNumGEBPos_; + } else { + h2AMCStatus = h2AMCStatusNeg_; + h2AMCNumGEB = h2AMCNumGEBNeg_; + } + + unBit++; + if (!amc->bc0locked()) { + h2AMCStatus->Fill(amc->amcNum(), unBit); + bErr = true; + } + unBit++; + if (!amc->daqReady()) { + h2AMCStatus->Fill(amc->amcNum(), unBit); + bErr = true; + } + unBit++; + if (!amc->daqClockLocked()) { + h2AMCStatus->Fill(amc->amcNum(), unBit); + bErr = true; + } + unBit++; + if (!amc->mmcmLocked()) { + h2AMCStatus->Fill(amc->amcNum(), unBit); + bErr = true; + } + unBit++; + if (amc->backPressure()) { + h2AMCStatus->Fill(amc->amcNum(), unBit); + bErr = true; + } + unBit++; + if (amc->oosGlib()) { + h2AMCStatus->Fill(amc->amcNum(), unBit); + bErr = true; + } + if (!bErr) + h2AMCStatus->Fill(amc->amcNum(), 1); + + h2AMCNumGEB->Fill(amc->amcNum(), amc->gebs()->size()); + + nIdxAMCFull++; + } + } + + // WARNING: ME4IdsKey for region, station, layer, chamber (not iEta) + std::map mapChamberStatus; + + for (GEMGEBdataCollection::DigiRangeIterator gebIt = gemGEB->begin(); gebIt != gemGEB->end(); ++gebIt) { + GEMDetId gid = (*gebIt).first; + ME3IdsKey key3{gid.region(), gid.station(), gid.layer()}; + ME4IdsKey key4{gid.region(), gid.station(), gid.layer(), gid.chamber()}; // WARNING: Chamber, not iEta + + const GEMGEBdataCollection::Range &range = (*gebIt).second; + for (auto GEBStatus = range.first; GEBStatus != range.second; ++GEBStatus) { + uint64_t unBit = 1; + uint64_t unStatus = 0; + + unStatus |= (GEBStatus->bxmVvV() << unBit++); + unStatus |= (GEBStatus->bxmAvV() << unBit++); + unStatus |= (GEBStatus->oOScVvV() << unBit++); + unStatus |= (GEBStatus->oOScAvV() << unBit++); + unStatus |= (GEBStatus->noVFAT() << unBit++); + unStatus |= (GEBStatus->evtSzW() << unBit++); + unStatus |= (GEBStatus->l1aNF() << unBit++); + unStatus |= (GEBStatus->inNF() << unBit++); + unStatus |= (GEBStatus->evtNF() << unBit++); + unStatus |= (GEBStatus->evtSzOFW() << unBit++); + unStatus |= (GEBStatus->l1aF() << unBit++); + unStatus |= (GEBStatus->inF() << unBit++); + unStatus |= (GEBStatus->evtF() << unBit++); + unStatus |= (GEBStatus->inUfw() << unBit++); + unStatus |= (GEBStatus->stuckData() << unBit++); + unStatus |= (GEBStatus->evUfw() << unBit++); + + if (unStatus == 0) { + unStatus = 0x01; // Good + } else { // Error! + mapChamberStatus[key4] = false; + } + + mapStatusGEB_.FillBits(key3, gid.chamber(), unStatus); + + mapGEBNumVFAT_.Fill(key3, gid.chamber(), GEBStatus->vFATs()->size()); + } + } + + for (GEMVfatStatusDigiCollection::DigiRangeIterator vfatIt = gemVFAT->begin(); vfatIt != gemVFAT->end(); ++vfatIt) { + GEMDetId gid = (*vfatIt).first; + ME3IdsKey key3{gid.region(), gid.station(), gid.layer()}; + ME4IdsKey key4Ch{gid.region(), gid.station(), gid.layer(), gid.chamber()}; // WARNING: Chamber, not iEta + const GEMVfatStatusDigiCollection::Range &range = (*vfatIt).second; + + for (auto vfatStat = range.first; vfatStat != range.second; ++vfatStat) { + uint64_t unQFVFAT = vfatStat->quality(); + if ((unQFVFAT & ~0x1) == 0) { + unQFVFAT |= 0x1; // If no error, then it should be 'Good' + } else { // Error! + mapChamberStatus[key4Ch] = false; + } + + Int_t nIdxVFAT = getVFATNumber(gid.station(), gid.roll(), vfatStat->phi()); + mapStatusVFAT_.FillBits(key3, nIdxVFAT, unQFVFAT); + mapStatusVFATPerCh_.FillBits(key4Ch, nIdxVFAT, unQFVFAT); + } + } + + // Summarizing the error occupancy + for (auto const &[key4, bErr] : mapChamberStatus) { + ME3IdsKey key3 = key4Tokey3(key4); + Int_t nChamber = keyToChamber(key4); + h2SummaryStatus->Fill(nChamber, mapStationToIdx_[key3]); + } +} + +DEFINE_FWK_MODULE(GEMDAQStatusSource); diff --git a/DQM/GEM/plugins/GEMDQMHarvester.cc b/DQM/GEM/plugins/GEMDQMHarvester.cc index e548826b696b8..3e1cb78407e92 100644 --- a/DQM/GEM/plugins/GEMDQMHarvester.cc +++ b/DQM/GEM/plugins/GEMDQMHarvester.cc @@ -34,18 +34,23 @@ class GEMDQMHarvester : public DQMEDHarvester { edm::EventSetup const &) override; void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override{}; // Cannot use; it is called after dqmSaver - void refineSummaryHistogram(edm::Service &); - void refineSummaryHistogramCore(TH3F *, std::string &, TH2F *&, std::string strTmpPrefix = "tmp_"); - - void fillUnderOverflowBunchCrossing(edm::Service &, std::string); - - Float_t m_fReportSummary; + void drawSummaryHistogram(edm::Service &store); + void createSummaryHist(edm::Service &store, MonitorElement *h2Src, MonitorElement *&h2Sum); + void refineSummaryHistogram(MonitorElement *h2Sum, + MonitorElement *h2SrcDigiOcc, + MonitorElement *h2SrcDigiMal, + MonitorElement *h2SrcCStatus); + + Float_t fReportSummary_; std::string strOutFile_; + + std::string strDirSummary_; }; GEMDQMHarvester::GEMDQMHarvester(const edm::ParameterSet &cfg) { - m_fReportSummary = -1.0; + fReportSummary_ = -1.0; strOutFile_ = cfg.getParameter("fromFile"); + strDirSummary_ = "GEM/EventInfo"; } void GEMDQMHarvester::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { @@ -59,91 +64,63 @@ void GEMDQMHarvester::dqmEndLuminosityBlock(DQMStore::IBooker &, edm::LuminosityBlock const &, edm::EventSetup const &) { edm::Service store; - refineSummaryHistogram(store); - - store->setCurrentFolder("GEM/StatusDigi"); - auto listME = store->getMEs(); - - for (const auto &strName : listME) { - if (strName.find("vfatStatus_BC_") != std::string::npos) { - fillUnderOverflowBunchCrossing(store, strName); - } - } + drawSummaryHistogram(store); } -void GEMDQMHarvester::refineSummaryHistogram(edm::Service &store) { - std::string strDirCurr = "GEM/EventInfo"; - std::string strNameSrc = "reportSummaryMapPreliminary"; - std::string strNewName = "reportSummaryMap"; - - store->setCurrentFolder(strDirCurr); +void GEMDQMHarvester::createSummaryHist(edm::Service &store, MonitorElement *h2Src, MonitorElement *&h2Sum) { + store->setCurrentFolder(strDirSummary_); - MonitorElement *h3Curr = store->get(strDirCurr + "/" + strNameSrc); - if (h3Curr) { - TH2F *h2New = nullptr; + Int_t nBinX = h2Src->getNbinsX(), nBinY = h2Src->getNbinsY(); + h2Sum = store->book2D("reportSummaryMap", "", nBinX, 0.5, nBinX + 0.5, nBinY, 0.5, nBinY + 0.5); - refineSummaryHistogramCore(h3Curr->getTH3F(), strNewName, h2New); - store->book2D(strNewName, h2New); - } - - store->bookFloat("reportSummary")->Fill(m_fReportSummary); + for (Int_t i = 1; i <= nBinX; i++) + h2Sum->setBinLabel(i, h2Src->getTH2F()->GetXaxis()->GetBinLabel(i), 1); + for (Int_t i = 1; i <= nBinY; i++) + h2Sum->setBinLabel(i, h2Src->getTH2F()->GetYaxis()->GetBinLabel(i), 2); } -void GEMDQMHarvester::refineSummaryHistogramCore(TH3F *h3Src, - std::string &strNewName, - TH2F *&h2New, - std::string strTmpPrefix) { - Int_t i, j; - - Int_t nNBinX = h3Src->GetNbinsX(); - Int_t nNBinY = h3Src->GetNbinsY(); +void GEMDQMHarvester::drawSummaryHistogram(edm::Service &store) { + std::string strSrcDigiOcc = "GEM/digi/summaryOccDigi"; + std::string strSrcDigiMal = "GEM/digi/summaryMalfuncDigi"; + std::string strSrcCStatus = "GEM/DAQStatus/summaryStatus"; - Float_t arrfBinX[128], arrfBinY[32]; + store->setCurrentFolder(strDirSummary_); - Float_t fNumPass, fNumError, fNumTotal; + MonitorElement *h2SrcDigiOcc = store->get(strSrcDigiOcc); + MonitorElement *h2SrcDigiMal = store->get(strSrcDigiMal); + MonitorElement *h2SrcCStatus = store->get(strSrcCStatus); - for (i = 0; i <= nNBinX; i++) - arrfBinX[i] = h3Src->GetXaxis()->GetBinLowEdge(i + 1); - for (i = 0; i <= nNBinY; i++) - arrfBinY[i] = h3Src->GetYaxis()->GetBinLowEdge(i + 1); - - h2New = new TH2F(strNewName.c_str(), h3Src->GetTitle(), nNBinX, arrfBinX, nNBinY, arrfBinY); - - fNumTotal = fNumPass = fNumError = 0.0; - - for (i = 0; i < nNBinX; i++) { - h2New->GetXaxis()->SetBinLabel(i + 1, h3Src->GetXaxis()->GetBinLabel(i + 1)); - for (j = 0; j < nNBinY; j++) { - h2New->GetYaxis()->SetBinLabel(j + 1, h3Src->GetYaxis()->GetBinLabel(j + 1)); - - if (h3Src->GetBinContent(i + 1, j + 1, 2) != 0) { - h2New->SetBinContent(i + 1, j + 1, 2); - fNumError += 1.0; - } else if (h3Src->GetBinContent(i + 1, j + 1, 1) != 0) { - h2New->SetBinContent(i + 1, j + 1, 1); - fNumPass += 1.0; - } - - fNumTotal += 1.0; - } + if (h2SrcDigiOcc != nullptr && h2SrcDigiMal != nullptr && h2SrcCStatus != nullptr) { + MonitorElement *h2Sum = nullptr; + createSummaryHist(store, h2SrcCStatus, h2Sum); + refineSummaryHistogram(h2Sum, h2SrcDigiOcc, h2SrcDigiMal, h2SrcCStatus); } - if (fNumPass > 0.0 || fNumError > 0.0) - m_fReportSummary = fNumPass / fNumTotal; + store->bookFloat("reportSummary")->Fill(fReportSummary_); } -void GEMDQMHarvester::fillUnderOverflowBunchCrossing(edm::Service &store, std::string strNameSrc) { - std::string strDirCurr = "GEM/StatusDigi"; - - store->setCurrentFolder(strDirCurr); - MonitorElement *h2Curr = store->get(strDirCurr + "/" + strNameSrc); - - Int_t nNBinX = h2Curr->getNbinsX(); - Int_t nNBinY = h2Curr->getNbinsY(); - - for (Int_t i = 0; i < nNBinY; i++) { - h2Curr->setBinContent(1, i, h2Curr->getBinContent(0, i) + h2Curr->getBinContent(1, i)); - h2Curr->setBinContent(nNBinX, i, h2Curr->getBinContent(nNBinX, i) + h2Curr->getBinContent(nNBinX + 1, i)); +// FIXME: Need more study about how to summarize +void GEMDQMHarvester::refineSummaryHistogram(MonitorElement *h2Sum, + MonitorElement *h2SrcDigiOcc, + MonitorElement *h2SrcDigiMal, + MonitorElement *h2SrcCStatus) { + Int_t nBinY = h2Sum->getNbinsY(); + for (Int_t j = 1; j <= nBinY; j++) { + Int_t nBinX = (Int_t)(h2SrcDigiOcc->getBinContent(0, j) + 0.5); + h2Sum->setBinContent(0, j, nBinX); + for (Int_t i = 1; i <= nBinX; i++) { + Float_t fDigiOcc = h2SrcDigiOcc->getBinContent(i, j); + Float_t fDigiMal = h2SrcDigiMal->getBinContent(i, j); + Float_t fCStatus = h2SrcCStatus->getBinContent(i, j); + + Float_t fRes = 0; + if (fCStatus > 0 || fDigiMal > 0) + fRes = 2; + else if (fDigiOcc > 0) + fRes = 1; + + h2Sum->setBinContent(i, j, fRes); + } } } diff --git a/DQM/GEM/plugins/GEMDQMSource.cc b/DQM/GEM/plugins/GEMDQMSource.cc deleted file mode 100644 index 86cce9c026453..0000000000000 --- a/DQM/GEM/plugins/GEMDQMSource.cc +++ /dev/null @@ -1,232 +0,0 @@ -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/PluginManager/interface/ModuleDef.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "DQMServices/Core/interface/DQMEDAnalyzer.h" -#include "DQMServices/Core/interface/DQMStore.h" -#include "DQMServices/Core/interface/MonitorElement.h" - -#include "DataFormats/GEMRecHit/interface/GEMRecHit.h" -#include "DataFormats/GEMRecHit/interface/GEMRecHitCollection.h" -#include "DataFormats/GEMDigi/interface/GEMDigiCollection.h" - -#include "Geometry/GEMGeometry/interface/GEMGeometry.h" -#include "Geometry/Records/interface/MuonGeometryRecord.h" - -#include - -//---------------------------------------------------------------------------------------------------- - -class GEMDQMSource : public DQMEDAnalyzer { -public: - GEMDQMSource(const edm::ParameterSet& cfg); - ~GEMDQMSource() override{}; - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - -protected: - void dqmBeginRun(edm::Run const&, edm::EventSetup const&) override{}; - void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override; - void analyze(edm::Event const& e, edm::EventSetup const& eSetup) override; - -private: - edm::EDGetToken tagRecHit_; - - float fGlobXMin_, fGlobXMax_; - float fGlobYMin_, fGlobYMax_; - - int nIdxFirstStrip_; - int nClusterSizeBinNum_; - - const GEMGeometry* initGeometry(edm::EventSetup const& iSetup); - int findVFAT(float min_, float max_, float x_, int roll_); - - const GEMGeometry* GEMGeometry_; - - std::vector gemChambers_; - - std::unordered_map recHitME_; - std::unordered_map VFAT_vs_ClusterSize_; - std::unordered_map StripsFired_vs_eta_; - std::unordered_map rh_vs_eta_; - std::unordered_map recGlobalPos; -}; - -using namespace std; -using namespace edm; - -int GEMDQMSource::findVFAT(float min_, float max_, float x_, int roll_) { - float step = abs(max_ - min_) / 3.0; - if (x_ < (min(min_, max_) + step)) { - return 8 - roll_; - } else if (x_ < (min(min_, max_) + 2.0 * step)) { - return 16 - roll_; - } else { - return 24 - roll_; - } -} - -const GEMGeometry* GEMDQMSource::initGeometry(edm::EventSetup const& iSetup) { - const GEMGeometry* GEMGeometry_ = nullptr; - try { - edm::ESHandle hGeom; - iSetup.get().get(hGeom); - GEMGeometry_ = &*hGeom; - } catch (edm::eventsetup::NoProxyException& e) { - edm::LogError("MuonGEMBaseValidation") << "+++ Error : GEM geometry is unavailable on event loop. +++\n"; - return nullptr; - } - return GEMGeometry_; -} - -GEMDQMSource::GEMDQMSource(const edm::ParameterSet& cfg) { - tagRecHit_ = consumes(cfg.getParameter("recHitsInputLabel")); - - nIdxFirstStrip_ = cfg.getParameter("idxFirstStrip"); - nClusterSizeBinNum_ = cfg.getParameter("ClusterSizeBinNum"); - - fGlobXMin_ = cfg.getParameter("global_x_bound_min"); - fGlobXMax_ = cfg.getParameter("global_x_bound_max"); - fGlobYMin_ = cfg.getParameter("global_y_bound_min"); - fGlobYMax_ = cfg.getParameter("global_y_bound_max"); -} - -void GEMDQMSource::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - edm::ParameterSetDescription desc; - desc.add("recHitsInputLabel", edm::InputTag("gemRecHits", "")); - - desc.add("idxFirstStrip", 0); - desc.add("ClusterSizeBinNum", 9); - - desc.add("global_x_bound_min", -350); - desc.add("global_x_bound_max", 350); - desc.add("global_y_bound_min", -260); - desc.add("global_y_bound_max", 260); - - descriptions.add("GEMDQMSource", desc); -} - -void GEMDQMSource::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const&, edm::EventSetup const& iSetup) { - std::vector listLayerOcc; - - GEMGeometry_ = initGeometry(iSetup); - if (GEMGeometry_ == nullptr) - return; - - const std::vector& superChambers_ = GEMGeometry_->superChambers(); - for (auto sch : superChambers_) { - int n_lay = sch->nChambers(); - for (int l = 0; l < n_lay; l++) { - Bool_t bExist = false; - for (const auto& ch : gemChambers_) - if (ch.id() == sch->chamber(l + 1)->id()) - bExist = true; - if (bExist) - continue; - - gemChambers_.push_back(*sch->chamber(l + 1)); - } - } - - ibooker.cd(); - ibooker.setCurrentFolder("GEM/recHit"); - - for (const auto& ch : gemChambers_) { - GEMDetId gid = ch.id(); - - std::string strIdxName = "Gemini_" + to_string(gid.chamber()) + "_GE" + (gid.region() > 0 ? "p" : "m") + - to_string(gid.station()) + "_" + to_string(gid.layer()); - std::string strIdxTitle = "GEMINIm" + to_string(gid.chamber()) + " in GE" + (gid.region() > 0 ? "+" : "-") + - to_string(gid.station()) + "/" + to_string(gid.layer()); - - std::string strStId = (gid.region() > 0 ? "p" : "m") + std::to_string(gid.station()); - std::string strStT = (gid.region() > 0 ? "+" : "-") + std::to_string(gid.station()); - - std::string strLa = std::to_string(gid.layer()); - std::string strCh = std::to_string(gid.chamber()); - - string hName = "recHit_" + strIdxName; - string hTitle = "recHit " + strIdxTitle; - hTitle += ";VFAT;"; - recHitME_[gid] = ibooker.book1D(hName, hTitle, 24, 0, 24); - - string hName_2 = "VFAT_vs_ClusterSize_" + strIdxName; - string hTitle_2 = "VFAT vs ClusterSize " + strIdxTitle; - hTitle_2 += ";Cluster size;VFAT"; - VFAT_vs_ClusterSize_[gid] = - ibooker.book2D(hName_2, hTitle_2, nClusterSizeBinNum_, 1, nClusterSizeBinNum_ + 1, 24, 0, 24); - - string hName_fired = "StripFired_" + strIdxName; - string hTitle_fired = "StripsFired " + strIdxTitle; - hTitle_fired += ";Strip;iEta"; - StripsFired_vs_eta_[gid] = ibooker.book2D(hName_fired, hTitle_fired, 384, 1, 385, 8, 1, 9); - - string hName_rh = "recHit_x_" + strIdxName; - string hTitle_rh = "recHit local x " + strIdxTitle; - hTitle_rh += ";Local x (cm);iEta"; - rh_vs_eta_[gid] = ibooker.book2D(hName_rh, hTitle_rh, 50, -25, 25, 8, 1, 9); - - GEMDetId lid(gid.region(), gid.ring(), gid.station(), gid.layer(), 0, 0); - Int_t nIdxOcc = 0; - - for (; nIdxOcc < (Int_t)listLayerOcc.size(); nIdxOcc++) - if (listLayerOcc[nIdxOcc] == lid) - break; - if (nIdxOcc >= (Int_t)listLayerOcc.size()) - listLayerOcc.push_back(lid); - } - - for (auto gid : listLayerOcc) { - std::string strIdxName = - std::string("GE") + (gid.region() > 0 ? "p" : "m") + to_string(gid.station()) + "_" + to_string(gid.layer()); - std::string strIdxTitle = - std::string("GE") + (gid.region() > 0 ? "+" : "-") + to_string(gid.station()) + "/" + to_string(gid.layer()); - - string hName_rh = "recHit_globalPos_Gemini_" + strIdxName; - string hTitle_rh = "recHit global position Gemini chamber : " + strIdxTitle; - hTitle_rh += ";Global X (cm);Global Y (cm)"; - recGlobalPos[gid] = ibooker.book2D(hName_rh, hTitle_rh, 100, fGlobXMin_, fGlobXMax_, 100, fGlobYMin_, fGlobYMax_); - } -} - -void GEMDQMSource::analyze(edm::Event const& event, edm::EventSetup const& eventSetup) { - const GEMGeometry* GEMGeometry_ = initGeometry(eventSetup); - if (GEMGeometry_ == nullptr) - return; - - edm::Handle gemRecHits; - event.getByToken(this->tagRecHit_, gemRecHits); - if (!gemRecHits.isValid()) { - edm::LogError("GEMDQMSource") << "GEM recHit is not valid.\n"; - return; - } - for (const auto& ch : gemChambers_) { - GEMDetId cId = ch.id(); - for (auto roll : ch.etaPartitions()) { - GEMDetId rId = roll->id(); - const auto& recHitsRange = gemRecHits->get(rId); - auto gemRecHit = recHitsRange.first; - for (auto hit = gemRecHit; hit != recHitsRange.second; ++hit) { - Int_t nIdxStrip = hit->firstClusterStrip() + 0.5 * hit->clusterSize() - nIdxFirstStrip_; - Int_t nVfat = 8 * ((Int_t)(nIdxStrip / (roll->nstrips() / 3)) + 1) - rId.roll(); // Strip:Start at 0 - recHitME_[cId]->Fill(nVfat); - rh_vs_eta_[cId]->Fill(hit->localPosition().x(), rId.roll()); - Int_t nCLSOverflow = (hit->clusterSize() <= nClusterSizeBinNum_ ? hit->clusterSize() : nClusterSizeBinNum_); - VFAT_vs_ClusterSize_[cId]->Fill(nCLSOverflow, nVfat); - for (int i = hit->firstClusterStrip(); i < (hit->firstClusterStrip() + hit->clusterSize()); i++) { - StripsFired_vs_eta_[cId]->Fill(i, rId.roll()); - } - - GlobalPoint recHitGP = GEMGeometry_->idToDet(hit->gemId())->surface().toGlobal(hit->localPosition()); - GEMDetId idLayer(rId.region(), rId.ring(), rId.station(), rId.layer(), 0, 0); - recGlobalPos[idLayer]->Fill(recHitGP.x(), recHitGP.y()); - } - } - } -} - -DEFINE_FWK_MODULE(GEMDQMSource); diff --git a/DQM/GEM/plugins/GEMDQMSourceDigi.cc b/DQM/GEM/plugins/GEMDQMSourceDigi.cc deleted file mode 100644 index 7736b684aba87..0000000000000 --- a/DQM/GEM/plugins/GEMDQMSourceDigi.cc +++ /dev/null @@ -1,152 +0,0 @@ -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/PluginManager/interface/ModuleDef.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "DQMServices/Core/interface/DQMEDAnalyzer.h" -#include "DQMServices/Core/interface/DQMEDAnalyzer.h" -#include "DQMServices/Core/interface/DQMStore.h" -#include "DQMServices/Core/interface/MonitorElement.h" - -#include "DataFormats/GEMDigi/interface/GEMDigiCollection.h" - -#include "Geometry/GEMGeometry/interface/GEMGeometry.h" -#include "Geometry/Records/interface/MuonGeometryRecord.h" - -#include - -//---------------------------------------------------------------------------------------------------- - -class GEMDQMSourceDigi : public DQMEDAnalyzer { -public: - GEMDQMSourceDigi(const edm::ParameterSet& cfg); - ~GEMDQMSourceDigi() override{}; - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - -protected: - void dqmBeginRun(edm::Run const&, edm::EventSetup const&) override{}; - void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override; - void analyze(edm::Event const& e, edm::EventSetup const& eSetup) override; - -private: - edm::EDGetToken tagDigi_; - - const GEMGeometry* initGeometry(edm::EventSetup const& iSetup); - int findVFAT(float min_, float max_, float x_, int roll_); - - const GEMGeometry* GEMGeometry_; - - std::vector gemChambers_; - - std::unordered_map Digi_2D_; - std::unordered_map Digi_1D_; - std::unordered_map BxVsVFAT; -}; - -using namespace std; -using namespace edm; - -int GEMDQMSourceDigi::findVFAT(float min_, float max_, float x_, int roll_) { - float step = max_ / 3; - if (x_ < (min_ + step)) { - return 8 - roll_; - } else if (x_ < (min_ + 2 * step)) { - return 16 - roll_; - } else { - return 24 - roll_; - } -} - -const GEMGeometry* GEMDQMSourceDigi::initGeometry(edm::EventSetup const& iSetup) { - const GEMGeometry* GEMGeometry_ = nullptr; - try { - edm::ESHandle hGeom; - iSetup.get().get(hGeom); - GEMGeometry_ = &*hGeom; - } catch (edm::eventsetup::NoProxyException& e) { - edm::LogError("MuonGEMBaseValidation") << "+++ Error : GEM geometry is unavailable on event loop. +++\n"; - return nullptr; - } - - return GEMGeometry_; -} - -GEMDQMSourceDigi::GEMDQMSourceDigi(const edm::ParameterSet& cfg) { - tagDigi_ = consumes(cfg.getParameter("digisInputLabel")); -} - -void GEMDQMSourceDigi::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - edm::ParameterSetDescription desc; - desc.add("digisInputLabel", edm::InputTag("muonGEMDigis", "")); - descriptions.add("GEMDQMSourceDigi", desc); -} - -void GEMDQMSourceDigi::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const&, edm::EventSetup const& iSetup) { - GEMGeometry_ = initGeometry(iSetup); - if (GEMGeometry_ == nullptr) - return; - - const std::vector& superChambers_ = GEMGeometry_->superChambers(); - for (auto sch : superChambers_) { - int n_lay = sch->nChambers(); - for (int l = 0; l < n_lay; l++) { - Bool_t bExist = false; - for (const auto& ch : gemChambers_) - if (ch.id() == sch->chamber(l + 1)->id()) - bExist = true; - if (bExist) - continue; - - gemChambers_.push_back(*sch->chamber(l + 1)); - } - } - ibooker.cd(); - ibooker.setCurrentFolder("GEM/digi"); - for (const auto& ch : gemChambers_) { - GEMDetId gid = ch.id(); - - std::string strIdxName = "Gemini_" + to_string(gid.chamber()) + "_GE" + (gid.region() > 0 ? "p" : "m") + - to_string(gid.station()) + "_" + to_string(gid.layer()); - std::string strIdxTitle = "GEMINIm" + to_string(gid.chamber()) + " in GE" + (gid.region() > 0 ? "+" : "-") + - to_string(gid.station()) + "/" + to_string(gid.layer()); - - string hName_digi = "Digi_Strips_" + strIdxName; - string hTitle_digi = "Digi Strip " + strIdxTitle; - string hAxis_digi = ";Strip;iEta"; - Digi_2D_[ch.id()] = ibooker.book2D(hName_digi, hTitle_digi + hAxis_digi, 384, 1, 385, 8, 0.5, 8.5); - Digi_1D_[ch.id()] = ibooker.book1D(hName_digi + "_VFAT", hTitle_digi + " VFAT" + hAxis_digi, 24, 0, 24); - - string hNameBx = "bx_vs_VFAT_" + strIdxName; - string hTitleBx = "bx vs VFAT " + strIdxTitle; - hTitleBx += ";Bunch crossing;VFAT"; - BxVsVFAT[ch.id()] = ibooker.book2D(hNameBx, hTitleBx, 10, -5, 5, 24, 0, 24); - } -} - -void GEMDQMSourceDigi::analyze(edm::Event const& event, edm::EventSetup const& eventSetup) { - const GEMGeometry* GEMGeometry_ = initGeometry(eventSetup); - if (GEMGeometry_ == nullptr) - return; - - edm::Handle gemDigis; - event.getByToken(this->tagDigi_, gemDigis); - for (const auto& ch : gemChambers_) { - GEMDetId cId = ch.id(); - for (auto roll : ch.etaPartitions()) { - GEMDetId rId = roll->id(); - const auto& digis_in_det = gemDigis->get(rId); - for (auto d = digis_in_det.first; d != digis_in_det.second; ++d) { - auto nVFAT = findVFAT(1, roll->nstrips(), d->strip(), rId.roll()); - Digi_2D_[cId]->Fill(d->strip(), rId.roll()); - Digi_1D_[cId]->Fill(nVFAT); - BxVsVFAT[cId]->Fill(d->bx(), nVFAT); - } - } - } -} - -DEFINE_FWK_MODULE(GEMDQMSourceDigi); diff --git a/DQM/GEM/plugins/GEMDQMStatusDigi.cc b/DQM/GEM/plugins/GEMDQMStatusDigi.cc deleted file mode 100644 index 6bd747f42ac9e..0000000000000 --- a/DQM/GEM/plugins/GEMDQMStatusDigi.cc +++ /dev/null @@ -1,763 +0,0 @@ -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/PluginManager/interface/ModuleDef.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "Geometry/GEMGeometry/interface/GEMGeometry.h" -#include "CondFormats/GEMObjects/interface/GEMeMap.h" -#include "Geometry/Records/interface/MuonGeometryRecord.h" - -#include "DQMServices/Core/interface/MonitorElement.h" -#include "DQMServices/Core/interface/DQMEDAnalyzer.h" -#include "DQMServices/Core/interface/DQMStore.h" - -#include "DataFormats/GEMDigi/interface/GEMVfatStatusDigiCollection.h" -#include "DataFormats/GEMDigi/interface/GEMGEBdataCollection.h" -#include "DataFormats/GEMDigi/interface/GEMAMCdataCollection.h" -#include "DataFormats/GEMDigi/interface/GEMDigiCollection.h" - -#include -#include - -#include -#include - -//---------------------------------------------------------------------------------------------------- - -using namespace dqm::impl; - -class GEMDQMStatusDigi : public DQMEDAnalyzer { -public: - GEMDQMStatusDigi(const edm::ParameterSet &cfg); - ~GEMDQMStatusDigi() override{}; - static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); - -protected: - void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override; - void bookHistogramsChamberPart(DQMStore::IBooker &, GEMDetId &); - void bookHistogramsStationPart(DQMStore::IBooker &, GEMDetId &); - void bookHistogramsAMCPart(DQMStore::IBooker &); - - int SetInfoChambers(); - - Int_t seekIdx(std::vector &listLayers, UInt_t unId); - void seekIdxSummary(GEMDetId gid, Int_t &nIdxLayer, Int_t &nIdxChamber); - - void analyze(edm::Event const &e, edm::EventSetup const &eSetup) override; - -private: - const GEMGeometry *initGeometry(edm::EventSetup const &iSetup); - - void AddLabel(); - - std::string suffixChamber(GEMDetId &id); - std::string suffixLayer(GEMDetId &id); - - Bool_t FillBits(MonitorElement *monitor, uint64_t unVal, int nNumBits); - Bool_t FillBits(MonitorElement *monitor, uint64_t unVal, int nNumBits, int nY); - - bool bDebugMode_; - - const GEMGeometry *GEMGeometry_; - std::shared_ptr GEMROMapping_; - std::vector gemChambers_; - - int nNCh_; - - int cBit_ = 9; - int qVFATBit_ = 5; - int fVFATBit_ = 4; - int eBit_ = 17; - int amcStatusBit_ = 7; - - int nIdxFirstStrip_; - - int nNBxBin_; - int nNBxRange_; - - std::string strFmtSummaryLabel_; - bool bFlipSummary_; - bool bPerSuperchamber_; - - edm::EDGetToken tagVFAT_; - edm::EDGetToken tagGEB_; - edm::EDGetToken tagAMC_; - edm::EDGetToken tagDigi_; - - std::vector listAMCSlots_; - - std::vector m_listLayers; - std::vector m_listChambers; - - MonitorElement *h1_vfat_qualityflag_; - MonitorElement *h2_vfat_qualityflag_; - - std::unordered_map listVFATQualityFlag_; - std::unordered_map listVFATBC_; - std::unordered_map listVFATEC_; - - std::unordered_map listGEBInputStatus_; - std::unordered_map listGEBInputID_; - std::unordered_map listGEBVFATWordCnt_; - std::unordered_map listGEBVFATWordCntT_; - std::unordered_map listGEBZeroSupWordsCnt_; - std::unordered_map listGEBbcOH_; - std::unordered_map listGEBecOH_; - std::unordered_map listGEBOHCRC_; - - std::unordered_map m_mapStatusFill; - std::unordered_map m_mapStatusErr; - - MonitorElement *h3SummaryStatusPre_; - const Int_t m_nIdxSummaryFill = 1, m_nIdxSummaryErr = 2; - - MonitorElement *h1_amc_ttsState_; - MonitorElement *h1_amc_davCnt_; - MonitorElement *h1_amc_buffState_; - MonitorElement *h1_amc_oosGlib_; - MonitorElement *h1_amc_chTimeOut_; - MonitorElement *h2AMCStatus_; - - MonitorElement *m_summaryReport_; -}; - -const GEMGeometry *GEMDQMStatusDigi::initGeometry(edm::EventSetup const &iSetup) { - const GEMGeometry *GEMGeometry_ = nullptr; - try { - edm::ESHandle hGeom; - iSetup.get().get(hGeom); - GEMGeometry_ = &*hGeom; - } catch (edm::eventsetup::NoProxyException &e) { - edm::LogError("MuonGEMBaseValidation") << "+++ Error : GEM geometry is unavailable on event loop. +++\n"; - return nullptr; - } - return GEMGeometry_; -} - -using namespace std; -using namespace edm; - -GEMDQMStatusDigi::GEMDQMStatusDigi(const edm::ParameterSet &cfg) { - tagVFAT_ = consumes(cfg.getParameter("VFATInputLabel")); - tagGEB_ = consumes(cfg.getParameter("GEBInputLabel")); - tagAMC_ = consumes(cfg.getParameter("AMCInputLabel")); - tagDigi_ = consumes(cfg.getParameter("digisInputLabel")); - - listAMCSlots_ = cfg.getParameter>("AMCSlots"); - - strFmtSummaryLabel_ = cfg.getParameter("summaryLabelFmt"); - bFlipSummary_ = cfg.getParameter("flipSummary"); - bPerSuperchamber_ = cfg.getParameter("perSuperchamber"); - - nIdxFirstStrip_ = cfg.getParameter("idxFirstStrip"); - - nNBxRange_ = cfg.getParameter("bxRange"); - nNBxBin_ = cfg.getParameter("bxBin"); - - bDebugMode_ = cfg.getParameter("debugMode"); -} - -void GEMDQMStatusDigi::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { - edm::ParameterSetDescription desc; - desc.add("VFATInputLabel", edm::InputTag("muonGEMDigis", "vfatStatus")); - desc.add("GEBInputLabel", edm::InputTag("muonGEMDigis", "gebStatus")); - desc.add("AMCInputLabel", edm::InputTag("muonGEMDigis", "AMCdata")); - desc.add("digisInputLabel", edm::InputTag("muonGEMDigis", "")); - - std::vector listAMCSlotsDef = {1, 3, 5, 7, 9, 11, 13, 15}; - desc.add>("AMCSlots", listAMCSlotsDef); // TODO: Find how to get this from the geometry - - desc.add("summaryLabelFmt", "GE%(station_signed)+i/%(layer)i"); - desc.add("flipSummary", false); - desc.add("perSuperchamber", true); - - desc.add("idxFirstStrip", 0); - - desc.add("bxRange", 10); - desc.add("bxBin", 20); - - desc.add("debugMode", false); - - descriptions.add("GEMDQMStatusDigi", desc); -} - -std::string GEMDQMStatusDigi::suffixChamber(GEMDetId &id) { - return "Gemini_" + to_string(id.chamber()) + "_GE" + (id.region() > 0 ? "p" : "m") + to_string(id.station()) + "_" + - to_string(id.layer()); -} - -std::string GEMDQMStatusDigi::suffixLayer(GEMDetId &id) { - return std::string("st_") + (id.region() >= 0 ? "p" : "m") + std::to_string(id.station()) + - (bPerSuperchamber_ ? "_la_" + std::to_string(id.layer()) : ""); -} - -int GEMDQMStatusDigi::SetInfoChambers() { - const std::vector &superChambers_ = GEMGeometry_->superChambers(); - for (auto sch : superChambers_) { - int nLayer = sch->nChambers(); - for (int l = 0; l < nLayer; l++) { - Bool_t bExist = false; - for (const auto &ch : gemChambers_) - if (ch.id() == sch->chamber(l + 1)->id()) - bExist = true; - if (bExist) - continue; - - gemChambers_.push_back(*sch->chamber(l + 1)); - } - } - - // End: Loading the GEM geometry - - // Start: Set the configurations - - m_listLayers.clear(); - - // Summarizing geometry configurations - for (const auto &ch : gemChambers_) { - GEMDetId gid = ch.id(); - - GEMDetId layerID(gid.region(), gid.ring(), gid.station(), (bPerSuperchamber_ ? gid.layer() : 0), 0, 0); - Bool_t bOcc = false; - - for (auto lid : m_listLayers) { - if (lid == layerID) { - bOcc = true; - break; - } - } - - if (!bOcc) - m_listLayers.push_back(layerID); - - GEMDetId chamberID(0, 1, 1, (bPerSuperchamber_ ? 0 : gid.layer()), gid.chamber(), 0); - bOcc = false; - - for (auto cid : m_listChambers) { - if (cid == chamberID) { - bOcc = true; - break; - } - } - - if (!bOcc) - m_listChambers.push_back(chamberID); - } - - // Preliminary for sorting the summaries - auto lambdaLayer = [this](GEMDetId a, GEMDetId b) -> Bool_t { - Int_t nFlipSign = (this->bFlipSummary_ ? -1 : 1); - Int_t nA = nFlipSign * a.region() * (20 * a.station() + a.layer()); - Int_t nB = nFlipSign * b.region() * (20 * b.station() + b.layer()); - return nA > nB; - }; - - auto lambdaChamber = [](GEMDetId a, GEMDetId b) -> Bool_t { - Int_t nA = 20 * a.chamber() + a.layer(); - Int_t nB = 20 * b.chamber() + b.layer(); - return nA < nB; - }; - - // Sorting the summaries - std::sort(m_listLayers.begin(), m_listLayers.end(), lambdaLayer); - std::sort(m_listChambers.begin(), m_listChambers.end(), lambdaChamber); - - nNCh_ = (int)m_listChambers.size(); - - return 0; -} - -void GEMDQMStatusDigi::bookHistogramsChamberPart(DQMStore::IBooker &ibooker, GEMDetId &gid) { - std::string hName, hTitle; - - UInt_t unBinPos; - - std::string strIdxName = suffixChamber(gid); - std::string strIdxTitle = "GEMINIm" + to_string(gid.chamber()) + " in GE" + (gid.region() > 0 ? "+" : "-") + - to_string(gid.station()) + "/" + to_string(gid.layer()); - - const GEMChamber *ch = GEMGeometry_->chamber(gid); - Int_t nVFAT = 0; - Int_t nEtas = ch->nEtaPartitions(); - if (gid.station() == 1) - nVFAT = nEtas * GEMeMap::maxVFatGE11_; - if (gid.station() == 2) - nVFAT = nEtas * GEMeMap::maxVFatGE21_; - - hName = "vfatStatus_QualityFlag_" + strIdxName; - hTitle = "VFAT quality " + strIdxTitle; - hTitle += ";VFAT;"; - listVFATQualityFlag_[gid] = ibooker.book2D(hName, hTitle, nVFAT, 0, nVFAT, 9, 0, 9); - - hName = "vfatStatus_BC_" + strIdxName; - hTitle = "VFAT bunch crossing " + strIdxTitle; - hTitle += ";Bunch crossing;VFAT"; - listVFATBC_[gid] = ibooker.book2D(hName, hTitle, nNBxBin_, -nNBxRange_, nNBxRange_, nVFAT, 0, nVFAT); - - hName = "vfatStatus_EC_" + strIdxName; - hTitle = "VFAT event counter " + strIdxTitle; - hTitle += ";Event counter;VFAT"; - listVFATEC_[gid] = ibooker.book2D(hName, hTitle, 256, 0, 256, nVFAT, 0, nVFAT); - - unBinPos = 1; - listVFATQualityFlag_[gid]->setBinLabel(unBinPos++, "Good", 2); - listVFATQualityFlag_[gid]->setBinLabel(unBinPos++, "CRC fail", 2); - listVFATQualityFlag_[gid]->setBinLabel(unBinPos++, "b1010 fail", 2); - listVFATQualityFlag_[gid]->setBinLabel(unBinPos++, "b1100 fail", 2); - listVFATQualityFlag_[gid]->setBinLabel(unBinPos++, "b1110 fail", 2); - listVFATQualityFlag_[gid]->setBinLabel(unBinPos++, "Hamming error", 2); - listVFATQualityFlag_[gid]->setBinLabel(unBinPos++, "AFULL", 2); - listVFATQualityFlag_[gid]->setBinLabel(unBinPos++, "SEUlogic", 2); - listVFATQualityFlag_[gid]->setBinLabel(unBinPos++, "SUEI2C", 2); - - m_mapStatusFill[gid] = false; - m_mapStatusErr[gid] = false; -} - -void GEMDQMStatusDigi::bookHistogramsStationPart(DQMStore::IBooker &ibooker, GEMDetId &lid) { - UInt_t unBinPos; - - Int_t re = lid.region(); - UInt_t st = lid.station(); - UInt_t la = lid.layer(); - - auto newbookGEB = [this](DQMStore::IBooker &ibooker, - std::string strName, - std::string strTitle, - std::string strAxis, - GEMDetId &lid, - int nLayer, - int nStation, - int re, - int nBin, - float fMin, - float fMax) -> MonitorElement * { - strName = strName + "_" + suffixLayer(lid); - strTitle = strTitle + ", station: " + (re >= 0 ? "+" : "-") + std::to_string(nStation); - - if (bPerSuperchamber_) { - strTitle += ", layer: " + std::to_string(nLayer); - } - - strTitle += ";Chamber;" + strAxis; - - auto hNew = ibooker.book2D(strName, strTitle, this->nNCh_, 0, this->nNCh_, nBin, fMin, fMax); - - for (Int_t i = 0; i < this->nNCh_; i++) { - auto &gid = this->m_listChambers[i]; - Int_t nCh = gid.chamber() + (this->bPerSuperchamber_ ? 0 : gid.layer() - 1); - hNew->setBinLabel(i + 1, std::to_string(nCh), 1); - } - - return hNew; - }; - - listGEBInputStatus_[lid] = - newbookGEB(ibooker, "geb_input_status", "inputStatus", "", lid, la, st, re, eBit_, 0, eBit_); - listGEBInputID_[lid] = newbookGEB(ibooker, "geb_input_ID", "inputID", "Input ID", lid, la, st, re, 32, 0, 32); - listGEBVFATWordCnt_[lid] = - newbookGEB(ibooker, "geb_no_vfats", "nvfats in header", "Number of VFATs in header", lid, la, st, re, 25, 0, 25); - listGEBVFATWordCntT_[lid] = newbookGEB( - ibooker, "geb_no_vfatsT", "nvfats in trailer", "Number of VFATs in trailer", lid, la, st, re, 25, 0, 25); - listGEBZeroSupWordsCnt_[lid] = newbookGEB( - ibooker, "geb_zeroSupWordsCnt", "zeroSupWordsCnt", "Zero sup. words count", lid, la, st, re, 10, 0, 10); - - if (bDebugMode_) { - listGEBbcOH_[lid] = - newbookGEB(ibooker, "geb_bcOH", "OH bunch crossing", "OH bunch crossing", lid, la, st, re, 3600, 0, 3600); - listGEBecOH_[lid] = - newbookGEB(ibooker, "geb_ecOH", "OH event coounter", "OH event counter", lid, la, st, re, 256, 0, 256); - listGEBOHCRC_[lid] = - newbookGEB(ibooker, "geb_OHCRC", "CRC of OH data", "CRC of OH data", lid, la, st, re, 65536, 0, 65536); - } - - unBinPos = 1; - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "Good", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "BX mismatch GLIB OH", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "BX mismatch GLIB VFAT", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "OOS GLIB OH", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "OOS GLIB VFAT", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "No VFAT marker", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "Event size warn", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "L1AFIFO near full", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "InFIFO near full", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "EvtFIFO near full", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "Event size overflow", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "L1AFIFO full", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "InFIFO full", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "EvtFIFO full", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "Input FIFO underflow", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "Stuck data", 2); - listGEBInputStatus_[lid]->setBinLabel(unBinPos++, "Event FIFO underflow", 2); -} - -void GEMDQMStatusDigi::bookHistogramsAMCPart(DQMStore::IBooker &ibooker) { - h2AMCStatus_ = ibooker.book2D("amc_statusflag", - "Status of AMC slots;AMC slot;", - listAMCSlots_.size(), - 0, - listAMCSlots_.size(), - amcStatusBit_, - 0, - amcStatusBit_); - - uint32_t unBinPos = 1; - h2AMCStatus_->setBinLabel(unBinPos++, "Good", 2); - h2AMCStatus_->setBinLabel(unBinPos++, "BC0 not locked", 2); - h2AMCStatus_->setBinLabel(unBinPos++, "DAQ not ready", 2); - h2AMCStatus_->setBinLabel(unBinPos++, "DAQ clock not locked", 2); - h2AMCStatus_->setBinLabel(unBinPos++, "MMCM not locked", 2); - h2AMCStatus_->setBinLabel(unBinPos++, "Back pressure", 2); - h2AMCStatus_->setBinLabel(unBinPos++, "GLIB out-of-sync", 2); -} - -// To make labels like python, with std::(unordered_)map -std::string printfWithMap(std::string strFmt, std::unordered_map mapArg) { - std::string strRes = strFmt; - char szOutFmt[64]; - size_t unPos, unPosEnd; - - for (unPos = strRes.find('%'); unPos != std::string::npos; unPos = strRes.find('%', unPos + 1)) { - unPosEnd = strRes.find(')', unPos); - if (strRes[unPos + 1] != '(' || unPosEnd == std::string::npos) - break; // Syntax error - - // Extracting the key - std::string strKey = strRes.substr(unPos + 2, unPosEnd - (unPos + 2)); - - // To treat formats like '%5i' or '%02i', extracting '5' or '02' - // After do this, - std::string strOptNum = "%"; - unPosEnd++; - - for (;; unPosEnd++) { - if (!('0' <= strRes[unPosEnd] && strRes[unPosEnd] <= '9') && strRes[unPosEnd] != '+') - break; - strOptNum += strRes[unPosEnd]; - } - - if (strRes[unPosEnd] != 'i' && strRes[unPosEnd] != 'd') - break; // Syntax error - strOptNum += strRes[unPosEnd]; - unPosEnd++; - - sprintf(szOutFmt, strOptNum.c_str(), mapArg[strKey]); - strRes = strRes.substr(0, unPos) + szOutFmt + strRes.substr(unPosEnd); - } - - if (unPos != std::string::npos) { // It means... an syntax error occurs! - std::cerr << "ERROR: Syntax error on printfWithMap(); " << std::endl; - return ""; - } - - return strRes; -} - -void GEMDQMStatusDigi::bookHistograms(DQMStore::IBooker &ibooker, edm::Run const &, edm::EventSetup const &iSetup) { - // Start: Loading the GEM geometry - - GEMGeometry_ = initGeometry(iSetup); - if (GEMGeometry_ == nullptr) - return; - - SetInfoChambers(); - - // End: Set the configurations - - // Start: Setting books - - ibooker.cd(); - ibooker.setCurrentFolder("GEM/StatusDigi"); - - for (const auto &ch : gemChambers_) { - GEMDetId gid = ch.id(); - bookHistogramsChamberPart(ibooker, gid); - } - - for (auto lid : m_listLayers) { - bookHistogramsStationPart(ibooker, lid); - } - - bookHistogramsAMCPart(ibooker); - - h1_vfat_qualityflag_ = ibooker.book1D("vfat_quality_flag", "quality and flag", 9, 0, 9); - h2_vfat_qualityflag_ = ibooker.book2D("vfat_quality_flag_per_geb", "quality and flag", nNCh_, 0, nNCh_, 9, 0, 9); - - h1_amc_ttsState_ = ibooker.book1D("amc_ttsState", "ttsState", 10, 0, 10); - h1_amc_davCnt_ = ibooker.book1D("amc_davCnt", "davCnt", 10, 0, 10); - h1_amc_buffState_ = ibooker.book1D("amc_buffState", "buffState", 10, 0, 10); - h1_amc_oosGlib_ = ibooker.book1D("amc_oosGlib", "oosGlib", 10, 0, 10); - h1_amc_chTimeOut_ = ibooker.book1D("amc_chTimeOut", "chTimeOut", 10, 0, 10); - - ibooker.cd(); - ibooker.setCurrentFolder("GEM/EventInfo"); - - h3SummaryStatusPre_ = ibooker.book3D( - "reportSummaryMapPreliminary", ";Chamber;", nNCh_, 0, nNCh_, m_listLayers.size(), 0, m_listLayers.size(), 2, 0, 1); - - for (Int_t i = 0; i < nNCh_; i++) { - auto &gid = this->m_listChambers[i]; - Int_t nCh = gid.chamber() + (bPerSuperchamber_ ? 0 : gid.layer() - 1); - h3SummaryStatusPre_->setBinLabel(i + 1, std::to_string(nCh), 1); - } - - Int_t nIdxLayer = 0; - std::unordered_map mapArg; - - // Start: Labeling section - - for (auto lid : m_listLayers) { - mapArg["station_signed"] = lid.region() * lid.station(); - mapArg["region"] = lid.region(); - mapArg["station"] = lid.station(); - mapArg["layer"] = lid.layer(); - mapArg["chamber"] = lid.chamber(); - - h3SummaryStatusPre_->setBinLabel(nIdxLayer + 1, printfWithMap(strFmtSummaryLabel_, mapArg), 2); - nIdxLayer++; - } -} - -Bool_t GEMDQMStatusDigi::FillBits(MonitorElement *monitor, uint64_t unVal, int nNumBits) { - int i = 0; - uint64_t unFlag = 1; - - if (monitor == nullptr) - return false; - - for (; i < nNumBits; i++, unFlag <<= 1) { - if ((unVal & unFlag) != 0) { - monitor->Fill(i); - } - } - - return true; -} - -Bool_t GEMDQMStatusDigi::FillBits(MonitorElement *monitor, uint64_t unVal, int nNumBits, int nX) { - int i = 0; - uint64_t unFlag = 1; - - if (monitor == nullptr) - return false; - - for (; i < nNumBits; i++, unFlag <<= 1) { - if ((unVal & unFlag) != 0) { - monitor->Fill(nX, i); - } - } - - return true; -} - -Int_t GEMDQMStatusDigi::seekIdx(std::vector &listLayers, UInt_t unId) { - if (unId < 256) - return -1; - - GEMDetId id(unId); - for (Int_t nIdx = 0; nIdx < (Int_t)listLayers.size(); nIdx++) - if (id == listLayers[nIdx]) - return nIdx; - return -1; -} - -void GEMDQMStatusDigi::seekIdxSummary(GEMDetId gid, Int_t &nIdxLayer, Int_t &nIdxChamber) { - Int_t nLayer = (bPerSuperchamber_ ? gid.layer() : 0); - GEMDetId layerId(gid.region(), gid.ring(), gid.station(), nLayer, 0, 0); - GEMDetId chamberId(0, 1, 1, gid.layer() - nLayer, gid.chamber(), 0); - - nIdxLayer = seekIdx(m_listLayers, layerId) + 1; - nIdxChamber = seekIdx(m_listChambers, chamberId) + 1; -} - -void GEMDQMStatusDigi::analyze(edm::Event const &event, edm::EventSetup const &eventSetup) { - Bool_t bIsNotEmpty = true; - - edm::Handle gemVFAT; - edm::Handle gemGEB; - edm::Handle gemAMC; - edm::Handle gemDigis; - - event.getByToken(tagVFAT_, gemVFAT); - event.getByToken(tagGEB_, gemGEB); - event.getByToken(tagAMC_, gemAMC); - event.getByToken(tagDigi_, gemDigis); - - for (GEMVfatStatusDigiCollection::DigiRangeIterator vfatIt = gemVFAT->begin(); vfatIt != gemVFAT->end(); ++vfatIt) { - GEMDetId gemid = (*vfatIt).first; - GEMDetId gemchId = gemid.chamberId(); - GEMDetId gemOnlychId(0, 1, 1, (bPerSuperchamber_ ? 0 : gemid.layer()), gemid.chamber(), 0); - const GEMChamber *ch = GEMGeometry_->chamber(gemchId); - Int_t maxEtaPs = ch->nEtaPartitions(); - - int nIdx = seekIdx(m_listChambers, gemOnlychId); - int nRoll = gemid.roll(); - const GEMVfatStatusDigiCollection::Range &range = (*vfatIt).second; - - for (auto vfatStat = range.first; vfatStat != range.second; ++vfatStat) { - bIsNotEmpty = true; - - uint64_t unQFVFAT = vfatStat->quality() /* | (vfatStat->flag() << qVFATBit_)*/; - if ((unQFVFAT & ~0x1) == 0) { - unQFVFAT |= 0x1; // If no error, then it should be 'Good' - } else { // Error!! - Int_t nIdxLayer, nIdxChamber; - seekIdxSummary(gemchId, nIdxLayer, nIdxChamber); - h3SummaryStatusPre_->setBinContent(nIdxChamber, nIdxLayer, m_nIdxSummaryErr, 1.0); - } - - FillBits(h1_vfat_qualityflag_, unQFVFAT, qVFATBit_ + fVFATBit_); - FillBits(h2_vfat_qualityflag_, unQFVFAT, qVFATBit_ + fVFATBit_, nIdx); // They could be there - - int nVFAT = (maxEtaPs - nRoll) + maxEtaPs * vfatStat->phi(); - bIsNotEmpty = FillBits(listVFATQualityFlag_[gemchId], unQFVFAT, qVFATBit_ + fVFATBit_, nVFAT); - - if (!bIsNotEmpty) { - edm::LogError("BadGeometry") << "Wrong detId which is not in the current geometry (VFAT status): " << gemchId - << std::endl; - continue; - } - - listVFATEC_[gemchId]->Fill(vfatStat->ec(), nVFAT); - } - } - - for (GEMGEBdataCollection::DigiRangeIterator gebIt = gemGEB->begin(); gebIt != gemGEB->end(); ++gebIt) { - GEMDetId gemid = (*gebIt).first; - GEMDetId lid(gemid.region(), gemid.ring(), gemid.station(), (bPerSuperchamber_ ? gemid.layer() : 0), 0, 0); - GEMDetId chid(0, 1, 1, (bPerSuperchamber_ ? 0 : gemid.layer()), gemid.chamber(), 0); - - Int_t nCh = seekIdx(m_listChambers, chid); - - const GEMGEBdataCollection::Range &range = (*gebIt).second; - for (auto GEBStatus = range.first; GEBStatus != range.second; ++GEBStatus) { - bIsNotEmpty = true; - - uint64_t unBit = 1; - uint64_t unStatus = 0; - - unStatus |= (GEBStatus->bxmVvV() << unBit++); - unStatus |= (GEBStatus->bxmAvV() << unBit++); - unStatus |= (GEBStatus->oOScVvV() << unBit++); - unStatus |= (GEBStatus->oOScAvV() << unBit++); - unStatus |= (GEBStatus->noVFAT() << unBit++); - unStatus |= (GEBStatus->evtSzW() << unBit++); - unStatus |= (GEBStatus->l1aNF() << unBit++); - unStatus |= (GEBStatus->inNF() << unBit++); - unStatus |= (GEBStatus->evtNF() << unBit++); - unStatus |= (GEBStatus->evtSzOFW() << unBit++); - unStatus |= (GEBStatus->l1aF() << unBit++); - unStatus |= (GEBStatus->inF() << unBit++); - unStatus |= (GEBStatus->evtF() << unBit++); - unStatus |= (GEBStatus->inUfw() << unBit++); - unStatus |= (GEBStatus->stuckData() << unBit++); - unStatus |= (GEBStatus->evUfw() << unBit++); - - if (unStatus != 0) { // Error! - Int_t nIdxLayer, nIdxChamber; - seekIdxSummary(gemid, nIdxLayer, nIdxChamber); - h3SummaryStatusPre_->setBinContent(nIdxChamber, nIdxLayer, m_nIdxSummaryErr, 1.0); - } else { - unStatus = 0x01; // Good - } - - bIsNotEmpty = FillBits(listGEBInputStatus_[lid], unStatus, eBit_, nCh); - - if (!bIsNotEmpty) { - edm::LogError("BadGeometry") << "Wrong detId which is not in the current geometry (GEB status): " << lid - << std::endl; - continue; - } - - listGEBInputID_[lid]->Fill(nCh, GEBStatus->inputID()); - listGEBVFATWordCnt_[lid]->Fill(nCh, GEBStatus->vfatWordCnt() / 3); - listGEBVFATWordCntT_[lid]->Fill(nCh, GEBStatus->vfatWordCntT() / 3); - listGEBZeroSupWordsCnt_[lid]->Fill(nCh, GEBStatus->zeroSupWordsCnt()); - - if (bDebugMode_) { - listGEBbcOH_[lid]->Fill(nCh, GEBStatus->bcOH()); - listGEBecOH_[lid]->Fill(nCh, GEBStatus->ecOH()); - listGEBOHCRC_[lid]->Fill(nCh, GEBStatus->crc()); - } - } - } - - auto findAMCIdx = [this](Int_t nAMCnum) -> Int_t { - for (Int_t i = 0; i < (Int_t)listAMCSlots_.size(); i++) - if (listAMCSlots_[i] == nAMCnum) - return i; - return -1; - }; - - for (GEMAMCdataCollection::DigiRangeIterator amcIt = gemAMC->begin(); amcIt != gemAMC->end(); ++amcIt) { - const GEMAMCdataCollection::Range &range = (*amcIt).second; - for (auto amc = range.first; amc != range.second; ++amc) { - Int_t nIdAMC = findAMCIdx(amc->amcNum()); - uint64_t unBit = 1; - uint64_t unStatus = 0; - - unStatus |= (!amc->bc0locked() << unBit++); - unStatus |= (!amc->daqReady() << unBit++); - unStatus |= (!amc->daqClockLocked() << unBit++); - unStatus |= (!amc->mmcmLocked() << unBit++); - unStatus |= (amc->backPressure() << unBit++); - unStatus |= (amc->oosGlib() << unBit++); - - if (unStatus == 0) { - unStatus = 0x01; // Good - } - - FillBits(h2AMCStatus_, unStatus, amcStatusBit_, nIdAMC); - - h1_amc_ttsState_->Fill(amc->ttsState()); - h1_amc_davCnt_->Fill(amc->davCnt()); - h1_amc_buffState_->Fill(amc->buffState()); - h1_amc_oosGlib_->Fill(amc->oosGlib()); - h1_amc_chTimeOut_->Fill(amc->linkTo()); - } - } - - // Checking if there is a fire (data) - for (const auto &ch : gemChambers_) { - GEMDetId cId = ch.id(); - Bool_t bIsHit = false; - - // Because every fired strip in a same VFAT shares a same bx, we keep bx from only one strip - std::unordered_map mapBXVFAT; - - GEMDetId chIdDigi(cId.region(), cId.ring(), cId.station(), cId.layer(), cId.chamber(), 2); - GEMDetId chIdBx(cId.region(), cId.ring(), cId.station(), cId.layer(), cId.chamber(), 3); - - Int_t maxEtaPs = ch.nEtaPartitions(); - Int_t nNumVFAT = GEMeMap::maxVFatGE11_; - if (cId.station() == 2) - nNumVFAT = GEMeMap::maxVFatGE21_; - - for (auto roll : ch.etaPartitions()) { - GEMDetId rId = roll->id(); - const auto &digis_in_det = gemDigis->get(rId); - - for (auto d = digis_in_det.first; d != digis_in_det.second; ++d) { - Int_t nIdxStrip = d->strip() - nIdxFirstStrip_; - Int_t nVFAT = maxEtaPs * ((Int_t)(nIdxStrip / (roll->nstrips() / nNumVFAT)) + 1) - rId.roll(); - - bIsHit = true; - mapBXVFAT[nVFAT] = d->bx(); - } - } - - for (auto bx : mapBXVFAT) - listVFATBC_[cId]->Fill(bx.second, bx.first); - - if (bIsHit) { // Data occur! - Int_t nIdxLayer, nIdxChamber; - seekIdxSummary(cId, nIdxLayer, nIdxChamber); - h3SummaryStatusPre_->setBinContent(nIdxChamber, nIdxLayer, m_nIdxSummaryFill, 1.0); - } - } -} - -DEFINE_FWK_MODULE(GEMDQMStatusDigi); diff --git a/DQM/GEM/plugins/GEMDigiSource.cc b/DQM/GEM/plugins/GEMDigiSource.cc new file mode 100644 index 0000000000000..f1c3e72821c81 --- /dev/null +++ b/DQM/GEM/plugins/GEMDigiSource.cc @@ -0,0 +1,224 @@ +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/PluginManager/interface/ModuleDef.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "DQMServices/Core/interface/DQMEDAnalyzer.h" +#include "DQMServices/Core/interface/DQMEDAnalyzer.h" +#include "DQMServices/Core/interface/DQMStore.h" +#include "DQMServices/Core/interface/MonitorElement.h" + +#include "Validation/MuonGEMHits/interface/GEMValidationUtils.h" + +#include "DataFormats/GEMDigi/interface/GEMDigiCollection.h" + +#include "DataFormats/Scalers/interface/LumiScalers.h" + +#include "DQM/GEM/interface/GEMDQMBase.h" + +#include + +//---------------------------------------------------------------------------------------------------- + +class GEMDigiSource : public GEMDQMBase { +public: + explicit GEMDigiSource(const edm::ParameterSet& cfg); + ~GEMDigiSource() override{}; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +protected: + void dqmBeginRun(edm::Run const&, edm::EventSetup const&) override{}; + void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override; + void analyze(edm::Event const& e, edm::EventSetup const& eSetup) override; + +private: + int ProcessWithMEMap3(BookingHelper& bh, ME3IdsKey key) override; + int ProcessWithMEMap3WithChamber(BookingHelper& bh, ME4IdsKey key) override; + + edm::EDGetToken tagDigi_; + + edm::EDGetTokenT lumiScalers_; + + MEMap3Inf mapTotalDigi_layer_; + MEMap3Inf mapStripOcc_ieta_; + MEMap3Inf mapStripOcc_phi_; + MEMap3Inf mapTotalStripPerEvt_; + MEMap3Inf mapBX_layer_; + + MEMap4Inf mapStripOccPerCh_; + MEMap4Inf mapBXPerCh_; + + MonitorElement *h2SummaryOcc, *h2SummaryMal; + + Int_t nBXMin_, nBXMax_; +}; + +using namespace std; +using namespace edm; + +GEMDigiSource::GEMDigiSource(const edm::ParameterSet& cfg) : GEMDQMBase(cfg) { + tagDigi_ = consumes(cfg.getParameter("digisInputLabel")); + lumiScalers_ = consumes( + cfg.getUntrackedParameter("lumiCollection", edm::InputTag("scalersRawToDigi"))); +} + +void GEMDigiSource::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("digisInputLabel", edm::InputTag("muonGEMDigis", "")); + desc.addUntracked("logCategory", "GEMDigiSource"); + descriptions.add("GEMDigiSource", desc); +} + +void GEMDigiSource::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const&, edm::EventSetup const& iSetup) { + initGeometry(iSetup); + if (GEMGeometry_ == nullptr) + return; + loadChambers(); + + nBXMin_ = -10; + nBXMax_ = 10; + + mapTotalDigi_layer_ = MEMap3Inf(this, "digi_det", "Digi Occupancy", 36, 0.5, 36.5, 24, 0.5, 24.5, "Chamber", "VFAT"); + mapStripOcc_ieta_ = MEMap3Inf( + this, "strip_ieta_occ", "Strip Digi Occupancy per eta partition", 8, 0.5, 8.5, "iEta", "Number of fired strips"); + mapStripOcc_phi_ = MEMap3Inf(this, + "strip_phi_occ", + "Strip Digi Phi (degree) Occupancy ", + 108, + -5, + 355, + "#phi (degree)", + "Number of fired strips"); + mapTotalStripPerEvt_ = MEMap3Inf(this, + "total_strips_per_event", + "Total number of strip digis per event for each layers ", + 50, + -0.5, + 99.5, + "Number of fired strips", + "Events"); + mapBX_layer_ = + MEMap3Inf(this, "bx", "Strip Digi Bunch Crossing ", 21, nBXMin_ - 0.5, nBXMax_ + 0.5, "Bunch crossing"); + + mapStripOccPerCh_ = MEMap4Inf(this, "strip_occ", "Strip Digi Occupancy ", 1, 0.5, 1.5, 1, 0.5, 1.5, "Strip", "iEta"); + mapBXPerCh_ = MEMap4Inf(this, + "bx_ch", + "Strip Digi Bunch Crossing ", + 21, + nBXMin_ - 0.5, + nBXMax_ + 0.5, + 1, + 0.5, + 1.5, + "Bunch crossing", + "VFAT"); + + ibooker.cd(); + ibooker.setCurrentFolder("GEM/digi"); + GenerateMEPerChamber(ibooker); + + h2SummaryOcc = CreateSummaryHist(ibooker, "summaryOccDigi"); + h2SummaryMal = CreateSummaryHist(ibooker, "summaryMalfuncDigi"); +} + +int GEMDigiSource::ProcessWithMEMap3(BookingHelper& bh, ME3IdsKey key) { + MEStationInfo& stationInfo = mapStationInfo_[key]; + + mapTotalDigi_layer_.SetBinConfX(stationInfo.nNumChambers_); + mapTotalDigi_layer_.SetBinConfY(stationInfo.nMaxVFAT_); + mapTotalDigi_layer_.bookND(bh, key); + mapTotalDigi_layer_.SetLabelForChambers(key, 1); + mapTotalDigi_layer_.SetLabelForVFATs(key, stationInfo.nNumEtaPartitions_, 2); + + mapStripOcc_ieta_.SetBinConfX(stationInfo.nNumEtaPartitions_); + mapStripOcc_ieta_.bookND(bh, key); + mapTotalDigi_layer_.SetLabelForChambers(key, 1); // For eta partitions + + mapStripOcc_phi_.bookND(bh, key); + mapTotalStripPerEvt_.bookND(bh, key); + mapBX_layer_.bookND(bh, key); + + return 0; +} + +int GEMDigiSource::ProcessWithMEMap3WithChamber(BookingHelper& bh, ME4IdsKey key) { + ME3IdsKey key3 = key4Tokey3(key); + MEStationInfo& stationInfo = mapStationInfo_[key3]; + + int nNumVFATPerRoll = stationInfo.nMaxVFAT_ / stationInfo.nNumEtaPartitions_; + int nNumCh = stationInfo.nNumStrip_; + + mapStripOccPerCh_.SetBinConfX(nNumCh * nNumVFATPerRoll); + mapStripOccPerCh_.SetBinConfY(stationInfo.nNumEtaPartitions_); + mapStripOccPerCh_.bookND(bh, key); + mapStripOccPerCh_.SetLabelForChambers(key, 2); // For eta partitions + + mapBXPerCh_.SetBinConfY(stationInfo.nMaxVFAT_); + mapBXPerCh_.bookND(bh, key); + mapBXPerCh_.SetLabelForVFATs(key, stationInfo.nNumEtaPartitions_, 2); + + return 0; +} + +void GEMDigiSource::analyze(edm::Event const& event, edm::EventSetup const& eventSetup) { + edm::Handle gemDigis; + event.getByToken(this->tagDigi_, gemDigis); + edm::Handle lumiScalers; + event.getByToken(lumiScalers_, lumiScalers); + + std::map total_strip_layer; + for (const auto& ch : gemChambers_) { + GEMDetId gid = ch.id(); + ME2IdsKey key2{gid.region(), gid.station()}; + ME3IdsKey key3{gid.region(), gid.station(), gid.layer()}; + ME4IdsKey key4Ch{gid.region(), gid.station(), gid.layer(), gid.chamber()}; + std::map bTagVFAT; + bTagVFAT.clear(); + const BoundPlane& surface = GEMGeometry_->idToDet(gid)->surface(); + if (total_strip_layer.find(key3) == total_strip_layer.end()) + total_strip_layer[key3] = 0; + for (auto roll : ch.etaPartitions()) { + GEMDetId rId = roll->id(); + const auto& digis_in_det = gemDigis->get(rId); + for (auto d = digis_in_det.first; d != digis_in_det.second; ++d) { + // Filling of digi occupancy + Int_t nIdxVFAT = getVFATNumberByStrip(gid.station(), rId.roll(), d->strip()); + mapTotalDigi_layer_.Fill(key3, gid.chamber(), nIdxVFAT); + + // Filling of strip + mapStripOcc_ieta_.Fill(key3, rId.roll()); // Roll + + GlobalPoint strip_global_pos = surface.toGlobal(roll->centreOfStrip(d->strip())); + Float_t fPhiDeg = ((Float_t)strip_global_pos.phi()) * 180.0 / 3.141592; + if (fPhiDeg < -5.0) + fPhiDeg += 360.0; + mapStripOcc_phi_.Fill(key3, fPhiDeg); // Phi + + mapStripOccPerCh_.Fill(key4Ch, d->strip(), rId.roll()); // Per chamber + + // For total strips + total_strip_layer[key3]++; + + // Filling of bx + Int_t nBX = std::min(std::max((Int_t)d->bx(), nBXMin_), nBXMax_); // For under/overflow + if (bTagVFAT.find(nIdxVFAT) == bTagVFAT.end()) { + mapBX_layer_.Fill(key3, nBX); + mapBXPerCh_.Fill(key4Ch, nBX, nIdxVFAT); + } + + // Occupancy on a chamber + h2SummaryOcc->Fill(gid.chamber(), mapStationToIdx_[key3]); + + bTagVFAT[nIdxVFAT] = true; + } + } + } + for (auto [key, num_total_strip] : total_strip_layer) + mapTotalStripPerEvt_.Fill(key, num_total_strip); +} + +DEFINE_FWK_MODULE(GEMDigiSource); diff --git a/DQM/GEM/plugins/GEMRecHitSource.cc b/DQM/GEM/plugins/GEMRecHitSource.cc new file mode 100644 index 0000000000000..1961d30c3f8c7 --- /dev/null +++ b/DQM/GEM/plugins/GEMRecHitSource.cc @@ -0,0 +1,202 @@ +#include "DQM/GEM/interface/GEMDQMBase.h" + +#include "DataFormats/GEMRecHit/interface/GEMRecHit.h" +#include "DataFormats/GEMRecHit/interface/GEMRecHitCollection.h" +#include "DataFormats/GEMDigi/interface/GEMDigiCollection.h" + +#include + +//---------------------------------------------------------------------------------------------------- + +class GEMRecHitSource : public GEMDQMBase { +public: + explicit GEMRecHitSource(const edm::ParameterSet& cfg); + ~GEMRecHitSource() override{}; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +protected: + void dqmBeginRun(edm::Run const&, edm::EventSetup const&) override{}; + void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override; + void analyze(edm::Event const& e, edm::EventSetup const& eSetup) override; + +private: + int ProcessWithMEMap3(BookingHelper& bh, ME3IdsKey key) override; + int ProcessWithMEMap4(BookingHelper& bh, ME4IdsKey key) override; + int ProcessWithMEMap3WithChamber(BookingHelper& bh, ME4IdsKey key) override; + + edm::EDGetToken tagRecHit_; + + float fGlobXMin_, fGlobXMax_; + float fGlobYMin_, fGlobYMax_; + + int nIdxFirstStrip_; + int nClusterSizeBinNum_; + + MEMap3Inf mapTotalRecHit_layer_; + MEMap3Inf mapRecHitOcc_ieta_; + MEMap3Inf mapRecHitOcc_phi_; + MEMap3Inf mapTotalRecHitPerEvt_; + MEMap4Inf mapCLSRecHit_ieta_; + + MEMap4Inf mapCLSPerCh_; + + Int_t nCLSMax_; + + std::unordered_map recHitME_; + std::unordered_map VFAT_vs_ClusterSize_; + std::unordered_map StripsFired_vs_eta_; + std::unordered_map rh_vs_eta_; + std::unordered_map recGlobalPos; +}; + +using namespace std; +using namespace edm; + +GEMRecHitSource::GEMRecHitSource(const edm::ParameterSet& cfg) : GEMDQMBase(cfg) { + tagRecHit_ = consumes(cfg.getParameter("recHitsInputLabel")); + + nIdxFirstStrip_ = cfg.getParameter("idxFirstStrip"); + nClusterSizeBinNum_ = cfg.getParameter("ClusterSizeBinNum"); + + fGlobXMin_ = cfg.getParameter("global_x_bound_min"); + fGlobXMax_ = cfg.getParameter("global_x_bound_max"); + fGlobYMin_ = cfg.getParameter("global_y_bound_min"); + fGlobYMax_ = cfg.getParameter("global_y_bound_max"); +} + +void GEMRecHitSource::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("recHitsInputLabel", edm::InputTag("gemRecHits", "")); + + desc.add("idxFirstStrip", 0); + desc.add("ClusterSizeBinNum", 9); + + desc.add("global_x_bound_min", -350); + desc.add("global_x_bound_max", 350); + desc.add("global_y_bound_min", -260); + desc.add("global_y_bound_max", 260); + + desc.addUntracked("logCategory", "GEMRecHitSource"); + + descriptions.add("GEMRecHitSource", desc); +} + +void GEMRecHitSource::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const&, edm::EventSetup const& iSetup) { + std::vector listLayerOcc; + + initGeometry(iSetup); + if (GEMGeometry_ == nullptr) + return; + loadChambers(); + + ibooker.cd(); + ibooker.setCurrentFolder("GEM/recHit"); + + nCLSMax_ = 10; + + mapTotalRecHit_layer_ = + MEMap3Inf(this, "rechit_det", "Rec. Hit Occupancy", 36, 0.5, 36.5, 8, 0.5, 8.5, "Chamber", "iEta"); + mapRecHitOcc_ieta_ = MEMap3Inf( + this, "rechit_ieta_occ", "RecHit Digi Occupancy per eta partition", 8, 0.5, 8.5, "iEta", "Number of recHits"); + mapRecHitOcc_phi_ = MEMap3Inf( + this, "rechit_phi_occ", "RecHit Digi Phi (degree) Occupancy ", 108, -5, 355, "#phi (degree)", "Number of recHits"); + mapTotalRecHitPerEvt_ = MEMap3Inf(this, + "total_rechit_per_event", + "Total number of rec. hits per event for each layers ", + 50, + -0.5, + 99.5, + "Number of recHits", + "Events"); + mapCLSRecHit_ieta_ = MEMap4Inf( + this, "cls", "Cluster size of rec. hits", nCLSMax_, 0.5, nCLSMax_ + 0.5, "Cluster size", "Number of recHits"); + + mapCLSPerCh_ = MEMap4Inf( + this, "cls", "Cluster size of rec. hits", nCLSMax_, 0.5, nCLSMax_ + 0.5, 1, 0.5, 1.5, "Cluster size", "iEta"); + + GenerateMEPerChamber(ibooker); +} + +int GEMRecHitSource::ProcessWithMEMap3(BookingHelper& bh, ME3IdsKey key) { + MEStationInfo& stationInfo = mapStationInfo_[key]; + + mapTotalRecHit_layer_.SetBinConfX(stationInfo.nNumChambers_); + mapTotalRecHit_layer_.SetBinConfY(stationInfo.nNumEtaPartitions_); + mapTotalRecHit_layer_.bookND(bh, key); + mapTotalRecHit_layer_.SetLabelForChambers(key, 1); + mapTotalRecHit_layer_.SetLabelForChambers(key, 2); // No worries, it's same as the eta partition labelling + + mapRecHitOcc_ieta_.SetBinConfX(stationInfo.nNumEtaPartitions_); + mapRecHitOcc_ieta_.bookND(bh, key); + + mapRecHitOcc_phi_.bookND(bh, key); + mapTotalRecHitPerEvt_.bookND(bh, key); + + return 0; +} + +int GEMRecHitSource::ProcessWithMEMap4(BookingHelper& bh, ME4IdsKey key) { + mapCLSRecHit_ieta_.bookND(bh, key); + + return 0; +} + +int GEMRecHitSource::ProcessWithMEMap3WithChamber(BookingHelper& bh, ME4IdsKey key) { + ME3IdsKey key3 = key4Tokey3(key); + MEStationInfo& stationInfo = mapStationInfo_[key3]; + + mapCLSPerCh_.SetBinConfY(stationInfo.nNumEtaPartitions_); + mapCLSPerCh_.bookND(bh, key); + mapCLSPerCh_.SetLabelForChambers(key, 2); // For eta partitions + + return 0; +} + +void GEMRecHitSource::analyze(edm::Event const& event, edm::EventSetup const& eventSetup) { + edm::Handle gemRecHits; + event.getByToken(this->tagRecHit_, gemRecHits); + if (!gemRecHits.isValid()) { + edm::LogError(log_category_) << "GEM recHit is not valid.\n"; + return; + } + std::map total_rechit_layer; + for (const auto& ch : gemChambers_) { + GEMDetId gid = ch.id(); + ME3IdsKey key3{gid.region(), gid.station(), gid.layer()}; + ME4IdsKey key4Ch{gid.region(), gid.station(), gid.layer(), gid.chamber()}; + for (auto ieta : ch.etaPartitions()) { + GEMDetId rId = ieta->id(); + ME4IdsKey key4iEta{gid.region(), gid.station(), gid.layer(), rId.roll()}; + if (total_rechit_layer.find(key3) == total_rechit_layer.end()) + total_rechit_layer[key3] = 0; + const auto& recHitsRange = gemRecHits->get(rId); + auto gemRecHit = recHitsRange.first; + for (auto hit = gemRecHit; hit != recHitsRange.second; ++hit) { + // Filling of digi occupancy + mapTotalRecHit_layer_.Fill(key3, gid.chamber(), rId.roll()); + + // Filling of strip (iEta) + mapRecHitOcc_ieta_.Fill(key3, rId.roll()); + + // Filling of strip (phi) + GlobalPoint recHitGP = GEMGeometry_->idToDet(hit->gemId())->surface().toGlobal(hit->localPosition()); + Float_t fPhiDeg = ((Float_t)recHitGP.phi()) * 180.0 / 3.141592; + if (fPhiDeg < -5.0) + fPhiDeg += 360.0; + mapRecHitOcc_phi_.Fill(key3, fPhiDeg); + + // For total recHits + total_rechit_layer[key3]++; + + // Filling of cluster size (CLS) + Int_t nCLS = std::min(hit->clusterSize(), nCLSMax_); // For overflow + mapCLSRecHit_ieta_.Fill(key4iEta, nCLS); + mapCLSPerCh_.Fill(key4Ch, rId.roll(), nCLS); + } + } + } + for (auto [key, num_total_rechit] : total_rechit_layer) + mapTotalRecHitPerEvt_.Fill(key, num_total_rechit); +} + +DEFINE_FWK_MODULE(GEMRecHitSource); diff --git a/DQM/GEM/python/GEMDQM_cff.py b/DQM/GEM/python/GEMDQM_cff.py index 49f033a8be96d..10cc365cf8521 100644 --- a/DQM/GEM/python/GEMDQM_cff.py +++ b/DQM/GEM/python/GEMDQM_cff.py @@ -1,13 +1,13 @@ import FWCore.ParameterSet.Config as cms -from DQM.GEM.GEMDQMSource_cfi import * -from DQM.GEM.GEMDQMSourceDigi_cfi import * -from DQM.GEM.GEMDQMStatusDigi_cfi import * +from DQM.GEM.GEMDigiSource_cfi import * +from DQM.GEM.GEMRecHitSource_cfi import * +from DQM.GEM.GEMDAQStatusSource_cfi import * from DQM.GEM.GEMDQMHarvester_cfi import * GEMDQM = cms.Sequence( - GEMDQMSource - *GEMDQMSourceDigi - *GEMDQMStatusDigi + GEMDigiSource + *GEMRecHitSource + *GEMDAQStatusSource +GEMDQMHarvester ) diff --git a/DQM/GEM/src/GEMDQMBase.cc b/DQM/GEM/src/GEMDQMBase.cc new file mode 100644 index 0000000000000..471c8fa91cf3d --- /dev/null +++ b/DQM/GEM/src/GEMDQMBase.cc @@ -0,0 +1,191 @@ +#include "DQM/GEM/interface/GEMDQMBase.h" + +using namespace std; +using namespace edm; + +GEMDQMBase::GEMDQMBase(const edm::ParameterSet& cfg) { + log_category_ = cfg.getUntrackedParameter("logCategory"); + + nNumEtaPartitionGE0_ = 0; + nNumEtaPartitionGE11_ = 0; + nNumEtaPartitionGE21_ = 0; +} + +int GEMDQMBase::initGeometry(edm::EventSetup const& iSetup) { + GEMGeometry_ = nullptr; + try { + edm::ESHandle hGeom; + iSetup.get().get(hGeom); + GEMGeometry_ = &*hGeom; + } catch (edm::eventsetup::NoProxyException& e) { + edm::LogError(log_category_) << "+++ Error : GEM geometry is unavailable on event loop. +++\n"; + return -1; + } + + return 0; +} + +// Borrowed from DQMOffline/Muon/src/GEMOfflineDQMBase.cc +int GEMDQMBase::getNumEtaPartitions(const GEMStation* station) { + const auto&& superchambers = station->superChambers(); + if (not checkRefs(superchambers)) { + edm::LogError(log_category_) << "failed to get a valid vector of GEMSuperChamber ptrs" << std::endl; + return 0; + } + + const auto& chambers = superchambers.front()->chambers(); + if (not checkRefs(chambers)) { + edm::LogError(log_category_) << "failed to get a valid vector of GEMChamber ptrs" << std::endl; + return 0; + } + + return chambers.front()->nEtaPartitions(); +} + +int GEMDQMBase::loadChambers() { + if (GEMGeometry_ == nullptr) + return -1; + gemChambers_.clear(); + const std::vector& superChambers_ = GEMGeometry_->superChambers(); + for (auto sch : superChambers_) { // FIXME: This loop can be merged into the below loop + int n_lay = sch->nChambers(); + for (int l = 0; l < n_lay; l++) { + Bool_t bExist = false; + for (const auto& ch : gemChambers_) { + if (ch.id() == sch->chamber(l + 1)->id()) { + bExist = true; + break; + } + } + if (bExist) + continue; + gemChambers_.push_back(*sch->chamber(l + 1)); + } + } + + // Borrwed from DQMOffline/Muon/src/GEMOfflineMonitor.cc + nMaxNumCh_ = 0; + for (const GEMRegion* region : GEMGeometry_->regions()) { + const int region_number = region->region(); + + for (const GEMStation* station : region->stations()) { + const auto&& superchambers = station->superChambers(); + + const int station_number = station->station(); + const int num_superchambers = superchambers.size(); + const int num_layers = superchambers.front()->nChambers(); + const int max_vfat = getMaxVFAT(station->station()); // the numer of VFATs per GEMEtaPartition + const int num_etas = getNumEtaPartitions(station); // the number of eta partitions per GEMChamber + const int num_vfat = num_etas * max_vfat; // the number of VFATs per GEMChamber + const int num_strip = GEMeMap::maxChan_; // the number of strips (channels) per VFAT + + nMaxNumCh_ = std::max(nMaxNumCh_, num_superchambers); + + for (int layer_number = 1; layer_number <= num_layers; layer_number++) { + ME3IdsKey key3(region_number, station_number, layer_number); + mapStationInfo_[key3] = MEStationInfo( + region_number, station_number, layer_number, num_superchambers, num_etas, num_vfat, num_strip); + } + } + } + + if (mapStationInfo_.find(ME3IdsKey(-1, 0, 1)) != mapStationInfo_.end()) + nNumEtaPartitionGE0_ = mapStationInfo_[ME3IdsKey(-1, 0, 1)].nNumEtaPartitions_; + if (mapStationInfo_.find(ME3IdsKey(-1, 1, 1)) != mapStationInfo_.end()) + nNumEtaPartitionGE11_ = mapStationInfo_[ME3IdsKey(-1, 1, 1)].nNumEtaPartitions_; + if (mapStationInfo_.find(ME3IdsKey(-1, 2, 1)) != mapStationInfo_.end()) + nNumEtaPartitionGE21_ = mapStationInfo_[ME3IdsKey(-1, 2, 1)].nNumEtaPartitions_; + + return 0; +} + +int GEMDQMBase::SortingLayers(std::vector& listLayers) { + std::sort(listLayers.begin(), listLayers.end(), [](ME3IdsKey key1, ME3IdsKey key2) { + Int_t re1 = std::get<0>(key1), st1 = std::get<1>(key1), la1 = std::get<2>(key1); + Int_t re2 = std::get<0>(key2), st2 = std::get<1>(key2), la2 = std::get<2>(key2); + if (re1 < 0 && re2 > 0) + return false; + if (re1 > 0 && re2 < 0) + return true; + Bool_t bRes = (re1 < 0); // == re2 < 0 + Int_t sum1 = 256 * std::abs(re1) + 16 * st1 + 1 * la1; + Int_t sum2 = 256 * std::abs(re2) + 16 * st2 + 1 * la2; + if (sum1 <= sum2) + return bRes; + return !bRes; + }); + + return 0; +} + +dqm::impl::MonitorElement* GEMDQMBase::CreateSummaryHist(DQMStore::IBooker& ibooker, TString strName) { + std::vector listLayers; + for (auto const& [key, stationInfo] : mapStationInfo_) + listLayers.push_back(key); + SortingLayers(listLayers); + for (Int_t i = 0; i < (Int_t)listLayers.size(); i++) + mapStationToIdx_[listLayers[i]] = i + 1; + + auto h2Res = + ibooker.book2D(strName, "", nMaxNumCh_, 0.5, nMaxNumCh_ + 0.5, listLayers.size(), 0.5, listLayers.size() + 0.5); + + if (h2Res == nullptr) + return nullptr; + + for (Int_t i = 1; i <= nMaxNumCh_; i++) + h2Res->setBinLabel(i, Form("%i", i), 1); + for (Int_t i = 1; i <= (Int_t)listLayers.size(); i++) { + auto key = listLayers[i - 1]; + h2Res->setBinLabel(i, Form("GE%+i/%iL%i", keyToRegion(key), keyToStation(key), keyToLayer(key)), 2); + Int_t nNumCh = mapStationInfo_[key].nNumChambers_; + h2Res->setBinContent(0, i, nNumCh); + } + + return h2Res; +} + +int GEMDQMBase::GenerateMEPerChamber(DQMStore::IBooker& ibooker) { + MEMap2Check_.clear(); + MEMap3Check_.clear(); + MEMap3WithChCheck_.clear(); + MEMap4Check_.clear(); + for (const auto& ch : gemChambers_) { + GEMDetId gid = ch.id(); + ME2IdsKey key2{gid.region(), gid.station()}; + ME3IdsKey key3{gid.region(), gid.station(), gid.layer()}; + ME4IdsKey key3WithChamber{gid.region(), gid.station(), gid.layer(), gid.chamber()}; + if (!MEMap2Check_[key2]) { + auto strSuffixName = GEMUtils::getSuffixName(key2); + auto strSuffixTitle = GEMUtils::getSuffixTitle(key2); + BookingHelper bh2(ibooker, strSuffixName, strSuffixTitle); + ProcessWithMEMap2(bh2, key2); + MEMap2Check_[key2] = true; + } + if (!MEMap3Check_[key3]) { + auto strSuffixName = GEMUtils::getSuffixName(key3); + auto strSuffixTitle = GEMUtils::getSuffixTitle(key3); + BookingHelper bh3(ibooker, strSuffixName, strSuffixTitle); + ProcessWithMEMap3(bh3, key3); + MEMap3Check_[key3] = true; + } + if (!MEMap3WithChCheck_[key3WithChamber]) { + auto strSuffixName = GEMUtils::getSuffixName(key3) + Form("_ch%02i", gid.chamber()); + auto strSuffixTitle = GEMUtils::getSuffixTitle(key3) + Form(" Chamber %02i", gid.chamber()); + BookingHelper bh3Ch(ibooker, strSuffixName, strSuffixTitle); + ProcessWithMEMap3WithChamber(bh3Ch, key3WithChamber); + MEMap3WithChCheck_[key3WithChamber] = true; + } + for (auto iEta : ch.etaPartitions()) { + GEMDetId rId = iEta->id(); + ME4IdsKey key4{gid.region(), gid.station(), gid.layer(), rId.roll()}; + if (!MEMap4Check_[key4]) { + auto strSuffixName = GEMUtils::getSuffixName(key3) + Form("_ieta%02i", rId.roll()); + auto strSuffixTitle = GEMUtils::getSuffixTitle(key3) + Form(" iEta %02i", rId.roll()); + BookingHelper bh4(ibooker, strSuffixName, strSuffixTitle); + ProcessWithMEMap4(bh4, key4); + MEMap4Check_[key4] = true; + } + } + } + return 0; +} diff --git a/DQM/HLTEvF/plugins/TrigObjTnPHistColl.cc b/DQM/HLTEvF/plugins/TrigObjTnPHistColl.cc index 120fe6f94171a..1f5f4914e5b5a 100644 --- a/DQM/HLTEvF/plugins/TrigObjTnPHistColl.cc +++ b/DQM/HLTEvF/plugins/TrigObjTnPHistColl.cc @@ -1,6 +1,7 @@ #include "TrigObjTnPHistColl.h" #include "FWCore/Common/interface/TriggerNames.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" namespace { std::vector convertToFloat(const std::vector& vecD) { diff --git a/DQM/HLTEvF/test/hlt_dqm_sourceclient-file_cfg.py b/DQM/HLTEvF/test/hlt_dqm_sourceclient-file_cfg.py index 8e93f48f5f95c..317b7d8de6471 100644 --- a/DQM/HLTEvF/test/hlt_dqm_sourceclient-file_cfg.py +++ b/DQM/HLTEvF/test/hlt_dqm_sourceclient-file_cfg.py @@ -67,7 +67,7 @@ # # Message Logger # process.load("FWCore.MessageService.MessageLogger_cfi") -# #process.MessageLogger.categories = ['hltResults'] +# # # process.MessageLogger.destinations = ['cout', 'detailedInfo', 'critical'] # process.MessageLogger.cout = cms.untracked.PSet( # #threshold = cms.untracked.string('ERROR'), @@ -80,7 +80,7 @@ # limit = cms.untracked.int32(-1) ## DEBUG, all messages # ) # ) -# process.MessageLogger.categories = ['Status', 'Parameter'] +# # # copy stdout to a file # process.MessageLogger.detailedInfo = process.MessageLogger.cout # process.MessageLogger.debugModules = ['hltResults'] diff --git a/DQM/HLTEvF/test/hlt_muon_dqm-file_cfg.py b/DQM/HLTEvF/test/hlt_muon_dqm-file_cfg.py index 7ac625942dc15..3f507f2619404 100644 --- a/DQM/HLTEvF/test/hlt_muon_dqm-file_cfg.py +++ b/DQM/HLTEvF/test/hlt_muon_dqm-file_cfg.py @@ -64,7 +64,7 @@ # # Message Logger # process.load("FWCore.MessageService.MessageLogger_cfi") -# process.MessageLogger.categories = ['hltResults'] +# # #process.MessageLogger.destinations = ['cout', 'detailedInfo', 'critical'] # process.MessageLogger.cout = cms.untracked.PSet( # #threshold = cms.untracked.string('ERROR'), @@ -77,7 +77,7 @@ # limit = cms.untracked.int32(-1) ## DEBUG, all messages # ) # ) -# process.MessageLogger.categories = ['Status', 'Parameter'] +# # # copy stdout to a file # process.MessageLogger.detailedInfo = process.MessageLogger.cout # process.MessageLogger.debugModules = ['hltResults'] diff --git a/DQM/Integration/python/clients/beam_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/beam_dqm_sourceclient-live_cfg.py index 4f6ad7bd592ba..efdde1512fcf7 100644 --- a/DQM/Integration/python/clients/beam_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/beam_dqm_sourceclient-live_cfg.py @@ -4,6 +4,8 @@ # Define here the BeamSpotOnline record name, # it will be used both in BeamMonitor setup and in payload creation/upload BSOnlineRecordName = 'BeamSpotOnlineLegacyObjectsRcd' +BSOnlineTag = 'BeamSpotOnlineTestLegacy' +BSOnlineJobName = 'BeamSpotOnlineTestLegacy' #from Configuration.Eras.Era_Run2_2018_cff import Run2_2018 #process = cms.Process("BeamMonitor", Run2_2018) FIXME @@ -11,6 +13,11 @@ from Configuration.Eras.Era_Run2_2018_pp_on_AA_cff import Run2_2018_pp_on_AA process = cms.Process("BeamMonitor", Run2_2018_pp_on_AA) +# Configure tag and jobName if running Playback system +if "dqm_cmssw/playback" in str(sys.argv[1]): + BSOnlineTag = BSOnlineTag + 'Playback' + BSOnlineJobName = BSOnlineJobName + 'Playback' + # process.MessageLogger = cms.Service("MessageLogger", debugModules = cms.untracked.vstring('*'), @@ -28,12 +35,6 @@ live=False unitTest=True -# Switch to veto the upload of the BeamSpot conditions to the DB -# when False it performs the upload -noDB = True -if 'noDB=False' in sys.argv: - noDB=False - #--------------- # Input sources if unitTest: @@ -68,10 +69,12 @@ # Conditions if (live): process.load("DQM.Integration.config.FrontierCondition_GT_cfi") + process.GlobalTag.DBParameters.authenticationPath = cms.untracked.string('.') else: process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') from Configuration.AlCa.GlobalTag import GlobalTag as gtCustomise process.GlobalTag = gtCustomise(process.GlobalTag, 'auto:run2_data', '') + process.GlobalTag.DBParameters.authenticationPath = cms.untracked.string('.') # you may need to set manually the GT in the line below #process.GlobalTag.globaltag = '100X_upgrade2018_realistic_v10' @@ -291,7 +294,7 @@ process.muonDTDigis.inputLabel = rawDataInputTag process.muonRPCDigis.InputLabel = rawDataInputTag process.scalersRawToDigi.scalersInputTag = rawDataInputTag -process.siPixelDigis.InputLabel = rawDataInputTag +process.siPixelDigis.cpu.InputLabel = rawDataInputTag process.siStripDigis.ProductLabel = rawDataInputTag process.load("RecoVertex.BeamSpotProducer.BeamSpot_cfi") @@ -352,37 +355,58 @@ #--------- # Upload BeamSpotOnlineObject (LegacyRcd) to CondDB -process.OnlineDBOutputService = cms.Service("OnlineDBOutputService", - - DBParameters = cms.PSet( - messageLevel = cms.untracked.int32(0), - authenticationPath = cms.untracked.string('.') - ), - - # Upload to CondDB - connect = cms.string('oracle://cms_orcoff_prep/CMS_CONDITIONS'), - preLoadConnectionString = cms.untracked.string('frontier://FrontierPrep/CMS_CONDITIONS'), - - runNumber = cms.untracked.uint64(options.runNumber), - lastLumiFile = cms.untracked.string(''), - writeTransactionDelay = cms.untracked.uint32(options.transDelay), - latency = cms.untracked.uint32(2), - autoCommit = cms.untracked.bool(True), - saveLogsOnDB = cms.untracked.bool(True), - jobName = cms.untracked.string("BeamSpotOnlineLegacyTest"), # name of the DB log record - toPut = cms.VPSet(cms.PSet( - record = cms.string(BSOnlineRecordName), - tag = cms.string('BSOnlineLegacy_tag'), - timetype = cms.untracked.string('Lumi'), - onlyAppendUpdatePolicy = cms.untracked.bool(True) - )) -) - -# If not live or noDB: produce a (local) SQLITE file -if not live or noDB: - process.OnlineDBOutputService.connect = cms.string('sqlite_file:BeamSpotOnlineLegacy.db') - process.OnlineDBOutputService.preLoadConnectionString = cms.untracked.string('sqlite_file:BeamSpotOnlineLegacy.db') - process.OnlineDBOutputService.saveLogsOnDB = cms.untracked.bool(False) +if unitTest == False: + process.OnlineDBOutputService = cms.Service("OnlineDBOutputService", + + DBParameters = cms.PSet( + messageLevel = cms.untracked.int32(0), + authenticationPath = cms.untracked.string('.') + ), + + # Upload to CondDB + connect = cms.string('oracle://cms_orcon_prod/CMS_CONDITIONS'), + preLoadConnectionString = cms.untracked.string('frontier://FrontierProd/CMS_CONDITIONS'), + + runNumber = cms.untracked.uint64(options.runNumber), + #lastLumiFile = cms.untracked.string('last_lumi.txt'), + #lastLumiUrl = cms.untracked.string('http://ru-c2e14-11-01.cms:11100/urn:xdaq-application:lid=52/getLatestLumiSection'), + omsServiceUrl = cms.untracked.string('http://cmsoms-services.cms:9949/urn:xdaq-application:lid=100/getRunAndLumiSection'), + writeTransactionDelay = cms.untracked.uint32(options.transDelay), + latency = cms.untracked.uint32(2), + autoCommit = cms.untracked.bool(True), + saveLogsOnDB = cms.untracked.bool(True), + jobName = cms.untracked.string(BSOnlineJobName), # name of the DB log record + toPut = cms.VPSet(cms.PSet( + record = cms.string(BSOnlineRecordName), + tag = cms.string(BSOnlineTag), + timetype = cms.untracked.string('Lumi'), + onlyAppendUpdatePolicy = cms.untracked.bool(True) + )) + ) +else: + process.OnlineDBOutputService = cms.Service("OnlineDBOutputService", + + DBParameters = cms.PSet( + messageLevel = cms.untracked.int32(0), + authenticationPath = cms.untracked.string('.') + ), + + # Upload to CondDB + connect = cms.string('sqlite_file:BeamSpotOnlineLegacy.db'), + preLoadConnectionString = cms.untracked.string('sqlite_file:BeamSpotOnlineLegacy.db'), + runNumber = cms.untracked.uint64(options.runNumber), + lastLumiFile = cms.untracked.string('last_lumi.txt'), + #lastLumiUrl = cms.untracked.string('http://ru-c2e14-11-01.cms:11100/urn:xdaq-application:lid=52/getLatestLumiSection'), + writeTransactionDelay = cms.untracked.uint32(options.transDelay), + latency = cms.untracked.uint32(2), + autoCommit = cms.untracked.bool(True), + toPut = cms.VPSet(cms.PSet( + record = cms.string(BSOnlineRecordName), + tag = cms.string(BSOnlineTag), + timetype = cms.untracked.string('Lumi'), + onlyAppendUpdatePolicy = cms.untracked.bool(True) + )) + ) #--------- # Final path diff --git a/DQM/Integration/python/clients/beamfake_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/beamfake_dqm_sourceclient-live_cfg.py index 5291832c36310..d9cb03527386b 100644 --- a/DQM/Integration/python/clients/beamfake_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/beamfake_dqm_sourceclient-live_cfg.py @@ -5,11 +5,18 @@ # Define here the BeamSpotOnline record name, # it will be used both in FakeBeamMonitor setup and in payload creation/upload BSOnlineRecordName = 'BeamSpotOnlineLegacyObjectsRcd' +BSOnlineTag = 'BeamSpotOnlineTestLegacy' +BSOnlineJobName = 'BeamSpotOnlineTestLegacy' import sys from Configuration.Eras.Era_Run2_2018_cff import Run2_2018 process = cms.Process("FakeBeamMonitor", Run2_2018) +# Configure tag and jobName if running Playback system +if "dqm_cmssw/playback" in str(sys.argv[1]): + BSOnlineTag = BSOnlineTag + 'Playback' + BSOnlineJobName = BSOnlineJobName + 'Playback' + # process.MessageLogger = cms.Service("MessageLogger", debugModules = cms.untracked.vstring('*'), @@ -142,15 +149,16 @@ runNumber = cms.untracked.uint64(options.runNumber), #lastLumiFile = cms.untracked.string('last_lumi.txt'), - lastLumiUrl = cms.untracked.string('http://ru-c2e14-11-01.cms:11100/urn:xdaq-application:lid=52/getLatestLumiSection'), + #lastLumiUrl = cms.untracked.string('http://ru-c2e14-11-01.cms:11100/urn:xdaq-application:lid=52/getLatestLumiSection'), + omsServiceUrl = cms.untracked.string('http://cmsoms-services.cms:9949/urn:xdaq-application:lid=100/getRunAndLumiSection'), writeTransactionDelay = cms.untracked.uint32(options.transDelay), latency = cms.untracked.uint32(2), autoCommit = cms.untracked.bool(True), saveLogsOnDB = cms.untracked.bool(True), - jobName = cms.untracked.string("BeamSpotOnlineLegacyTest"), # name of the DB log record + jobName = cms.untracked.string(BSOnlineJobName), # name of the DB log record toPut = cms.VPSet(cms.PSet( record = cms.string(BSOnlineRecordName), - tag = cms.string('BeamSpotOnlineTestLegacy'), + tag = cms.string(BSOnlineTag), timetype = cms.untracked.string('Lumi'), onlyAppendUpdatePolicy = cms.untracked.bool(True) )) @@ -174,7 +182,7 @@ autoCommit = cms.untracked.bool(True), toPut = cms.VPSet(cms.PSet( record = cms.string(BSOnlineRecordName), - tag = cms.string('BeamSpotOnlineTestLegacy'), + tag = cms.string(BSOnlineTag), timetype = cms.untracked.string('Lumi'), onlyAppendUpdatePolicy = cms.untracked.bool(True) )) diff --git a/DQM/Integration/python/clients/beamhlt_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/beamhlt_dqm_sourceclient-live_cfg.py index 99bc6fa431066..2b7eb6965f27a 100644 --- a/DQM/Integration/python/clients/beamhlt_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/beamhlt_dqm_sourceclient-live_cfg.py @@ -4,6 +4,8 @@ # Define once the BeamSpotOnline record name, # will be used both in BeamMonitor setup and in payload creation/upload BSOnlineRecordName = 'BeamSpotOnlineHLTObjectsRcd' +BSOnlineTag = 'BeamSpotOnlineTestHLT' +BSOnlineJobName = 'BeamSpotOnlineTestHLT' #from Configuration.Eras.Era_Run2_2018_cff import Run2_2018 #process = cms.Process("BeamMonitor", Run2_2018) # FIMXE @@ -11,6 +13,11 @@ from Configuration.Eras.Era_Run2_2018_pp_on_AA_cff import Run2_2018_pp_on_AA process = cms.Process("BeamMonitor", Run2_2018_pp_on_AA) +# Configure tag and jobName if running Playback system +if "dqm_cmssw/playback" in str(sys.argv[1]): + BSOnlineTag = BSOnlineTag + 'Playback' + BSOnlineJobName = BSOnlineJobName + 'Playback' + # Message logger #process.load("FWCore.MessageLogger.MessageLogger_cfi") #process.MessageLogger = cms.Service("MessageLogger", @@ -25,28 +32,28 @@ # destinations = cms.untracked.vstring('cerr'), #) -unitTest=False +# switch +live = True # FIXME +unitTest = False + if 'unitTest=True' in sys.argv: + live=False unitTest=True -# Switch to veto the upload of the BeamSpot conditions to the DB -# when False it performs the upload -noDB = True -if 'noDB=False' in sys.argv: - noDB=False - # Common part for PP and H.I Running #----------------------------- if unitTest: process.load("DQM.Integration.config.unittestinputsource_cfi") from DQM.Integration.config.unittestinputsource_cfi import options -else: +elif live: # for live online DQM in P5 process.load("DQM.Integration.config.inputsource_cfi") from DQM.Integration.config.inputsource_cfi import options - # new stream label process.source.streamLabel = cms.untracked.string('streamDQMOnlineBeamspot') +else: + process.load("DQM.Integration.config.fileinputsource_cfi") + from DQM.Integration.config.fileinputsource_cfi import options # for testing in lxplus #process.load("DQM.Integration.config.fileinputsource_cfi") @@ -79,7 +86,8 @@ # Calibration #--------------- # Condition for P5 cluster -#process.load("DQM.Integration.config.FrontierCondition_GT_cfi") +process.load("DQM.Integration.config.FrontierCondition_GT_cfi") +process.GlobalTag.DBParameters.authenticationPath = cms.untracked.string('.') # Condition for lxplus: change and possibly customise the GT #from Configuration.AlCa.GlobalTag import GlobalTag as gtCustomise #process.GlobalTag = gtCustomise(process.GlobalTag, 'auto:run2_data', '') @@ -156,37 +164,55 @@ #--------- # Upload BeamSpotOnlineObject (HLTRcd) to CondDB - process.OnlineDBOutputService = cms.Service("OnlineDBOutputService", - + if unitTest == False: + process.OnlineDBOutputService = cms.Service("OnlineDBOutputService", DBParameters = cms.PSet( messageLevel = cms.untracked.int32(0), authenticationPath = cms.untracked.string('.') ), # Upload to CondDB - connect = cms.string('oracle://cms_orcoff_prep/CMS_CONDITIONS'), - preLoadConnectionString = cms.untracked.string('frontier://FrontierPrep/CMS_CONDITIONS'), - + connect = cms.string('oracle://cms_orcon_prod/CMS_CONDITIONS'), + preLoadConnectionString = cms.untracked.string('frontier://FrontierProd/CMS_CONDITIONS'), runNumber = cms.untracked.uint64(options.runNumber), - lastLumiFile = cms.untracked.string(''), + #lastLumiFile = cms.untracked.string('last_lumi.txt'), + #lastLumiUrl = cms.untracked.string('http://ru-c2e14-11-01.cms:11100/urn:xdaq-application:lid=52/getLatestLumiSection'), + omsServiceUrl = cms.untracked.string('http://cmsoms-services.cms:9949/urn:xdaq-application:lid=100/getRunAndLumiSection'), writeTransactionDelay = cms.untracked.uint32(options.transDelay), latency = cms.untracked.uint32(2), autoCommit = cms.untracked.bool(True), saveLogsOnDB = cms.untracked.bool(True), - jobName = cms.untracked.string("BeamSpotOnlineHLTTest"), # name of the DB log record + jobName = cms.untracked.string(BSOnlineJobName), # name of the DB log record toPut = cms.VPSet(cms.PSet( record = cms.string(BSOnlineRecordName), - tag = cms.string('BSOnlineHLT_tag'), + tag = cms.string(BSOnlineTag), timetype = cms.untracked.string('Lumi'), onlyAppendUpdatePolicy = cms.untracked.bool(True) )) - ) + ) + else: + process.OnlineDBOutputService = cms.Service("OnlineDBOutputService", + DBParameters = cms.PSet( + messageLevel = cms.untracked.int32(0), + authenticationPath = cms.untracked.string('.') + ), - # If not live or noDB: produce a (local) SQLITE file - if unitTest or noDB: - process.OnlineDBOutputService.connect = cms.string('sqlite_file:BeamSpotOnlineHLT.db') - process.OnlineDBOutputService.preLoadConnectionString = cms.untracked.string('sqlite_file:BeamSpotOnlineHLT.db') - process.OnlineDBOutputService.saveLogsOnDB = cms.untracked.bool(False) + # Upload to CondDB + connect = cms.string('sqlite_file:BeamSpotOnlineHLT.db'), + preLoadConnectionString = cms.untracked.string('sqlite_file:BeamSpotOnlineHLT.db'), + runNumber = cms.untracked.uint64(options.runNumber), + lastLumiFile = cms.untracked.string('last_lumi.txt'), + #lastLumiUrl = cms.untracked.string('http://ru-c2e14-11-01.cms:11100/urn:xdaq-application:lid=52/getLatestLumiSection'), + writeTransactionDelay = cms.untracked.uint32(options.transDelay), + latency = cms.untracked.uint32(2), + autoCommit = cms.untracked.bool(True), + toPut = cms.VPSet(cms.PSet( + record = cms.string(BSOnlineRecordName), + tag = cms.string(BSOnlineTag), + timetype = cms.untracked.string('Lumi'), + onlyAppendUpdatePolicy = cms.untracked.bool(True) + )) + ) process.p = cms.Path( process.hltTriggerTypeFilter * process.dqmcommon diff --git a/DQM/Integration/python/clients/beamhltfake_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/beamhltfake_dqm_sourceclient-live_cfg.py index b927e8846b1b4..3c0b1b34672cd 100644 --- a/DQM/Integration/python/clients/beamhltfake_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/beamhltfake_dqm_sourceclient-live_cfg.py @@ -4,11 +4,18 @@ # Define here the BeamSpotOnline record name, # it will be used both in FakeBeamMonitor setup and in payload creation/upload BSOnlineRecordName = 'BeamSpotOnlineHLTObjectsRcd' +BSOnlineTag = 'BeamSpotOnlineTestHLT' +BSOnlineJobName = 'BeamSpotOnlineTestHLT' import sys from Configuration.Eras.Era_Run2_2018_cff import Run2_2018 process = cms.Process("FakeBeamMonitor", Run2_2018) +# Configure tag and jobName if running Playback system +if "dqm_cmssw/playback" in str(sys.argv[1]): + BSOnlineTag = BSOnlineTag + 'Playback' + BSOnlineJobName = BSOnlineJobName + 'Playback' + # switch live = True # FIXME unitTest = False @@ -116,15 +123,16 @@ preLoadConnectionString = cms.untracked.string('frontier://FrontierProd/CMS_CONDITIONS'), runNumber = cms.untracked.uint64(options.runNumber), #lastLumiFile = cms.untracked.string('last_lumi.txt'), - lastLumiUrl = cms.untracked.string('http://ru-c2e14-11-01.cms:11100/urn:xdaq-application:lid=52/getLatestLumiSection'), + #lastLumiUrl = cms.untracked.string('http://ru-c2e14-11-01.cms:11100/urn:xdaq-application:lid=52/getLatestLumiSection'), + omsServiceUrl = cms.untracked.string('http://cmsoms-services.cms:9949/urn:xdaq-application:lid=100/getRunAndLumiSection'), writeTransactionDelay = cms.untracked.uint32(options.transDelay), latency = cms.untracked.uint32(2), autoCommit = cms.untracked.bool(True), saveLogsOnDB = cms.untracked.bool(True), - jobName = cms.untracked.string("BeamSpotOnlineHLTTest"), # name of the DB log record + jobName = cms.untracked.string(BSOnlineJobName), # name of the DB log record toPut = cms.VPSet(cms.PSet( record = cms.string(BSOnlineRecordName), - tag = cms.string('BeamSpotOnlineTestHLT'), + tag = cms.string(BSOnlineTag), timetype = cms.untracked.string('Lumi'), onlyAppendUpdatePolicy = cms.untracked.bool(True) )) @@ -149,7 +157,7 @@ autoCommit = cms.untracked.bool(True), toPut = cms.VPSet(cms.PSet( record = cms.string(BSOnlineRecordName), - tag = cms.string('BeamSpotOnlineTestHLT'), + tag = cms.string(BSOnlineTag), timetype = cms.untracked.string('Lumi'), onlyAppendUpdatePolicy = cms.untracked.bool(True) )) diff --git a/DQM/Integration/python/clients/beampixel_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/beampixel_dqm_sourceclient-live_cfg.py index 75f0545a5c5ba..f909104a39834 100644 --- a/DQM/Integration/python/clients/beampixel_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/beampixel_dqm_sourceclient-live_cfg.py @@ -122,7 +122,7 @@ process.muonDTDigis.inputLabel = cms.InputTag("rawDataCollector") process.muonRPCDigis.InputLabel = cms.InputTag("rawDataCollector") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataCollector") - process.siPixelDigis.InputLabel = cms.InputTag("rawDataCollector") + process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataCollector") process.siStripDigis.ProductLabel = cms.InputTag("rawDataCollector") @@ -175,7 +175,7 @@ process.muonDTDigis.inputLabel = cms.InputTag("rawDataRepacker") process.muonRPCDigis.InputLabel = cms.InputTag("rawDataRepacker") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataRepacker") - process.siPixelDigis.InputLabel = cms.InputTag("rawDataRepacker") + process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataRepacker") process.siStripDigis.ProductLabel = cms.InputTag("rawDataRepacker") diff --git a/DQM/Integration/python/clients/csc_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/csc_dqm_sourceclient-live_cfg.py index 77b1e6b88b699..747ec4d01b07a 100644 --- a/DQM/Integration/python/clients/csc_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/csc_dqm_sourceclient-live_cfg.py @@ -189,7 +189,7 @@ process.muonDTDigis.inputLabel = cms.InputTag("rawDataCollector") process.muonRPCDigis.InputLabel = cms.InputTag("rawDataCollector") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataCollector") -process.siPixelDigis.InputLabel = cms.InputTag("rawDataCollector") +process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataCollector") process.siStripDigis.ProductLabel = cms.InputTag("rawDataCollector") process.cscMonitor.FEDRawDataCollectionTag = cms.InputTag("rawDataCollector") process.dqmCSCClient.InputObjects = cms.untracked.InputTag("rawDataCollector") @@ -214,7 +214,7 @@ process.muonDTDigis.inputLabel = cms.InputTag("rawDataRepacker") process.muonRPCDigis.InputLabel = cms.InputTag("rawDataRepacker") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataRepacker") - process.siPixelDigis.InputLabel = cms.InputTag("rawDataRepacker") + process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataRepacker") process.siStripDigis.ProductLabel = cms.InputTag("rawDataRepacker") process.cscMonitor.FEDRawDataCollectionTag = cms.InputTag("rawDataRepacker") process.dqmCSCClient.InputObjects = cms.untracked.InputTag("rawDataRepacker") diff --git a/DQM/Integration/python/clients/fed_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/fed_dqm_sourceclient-live_cfg.py index 6feff0263b749..b28f92d0f8d4e 100644 --- a/DQM/Integration/python/clients/fed_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/fed_dqm_sourceclient-live_cfg.py @@ -48,8 +48,8 @@ # Pixel sequence: process.load('Configuration.StandardSequences.MagneticField_cff') process.load('EventFilter.SiPixelRawToDigi.SiPixelRawToDigi_cfi') -process.siPixelDigis.Timing = False -process.siPixelDigis.IncludeErrors = True +process.siPixelDigis.cpu.Timing = False +process.siPixelDigis.cpu.IncludeErrors = True process.load('DQM.SiPixelMonitorRawData.SiPixelMonitorHLT_cfi') process.SiPixelHLTSource.saveFile = False process.SiPixelHLTSource.slowDown = False @@ -92,7 +92,7 @@ # Setting raw data collection label for all subsytem modules, depending on run type: if (process.runType.getRunType() == process.runType.hi_run): process.l1tStage2Fed.rawTag = cms.InputTag('rawDataRepacker') - process.siPixelDigis.InputLabel = cms.InputTag('rawDataRepacker') + process.siPixelDigis.cpu.InputLabel = cms.InputTag('rawDataRepacker') process.SiPixelHLTSource.RawInput = cms.InputTag('rawDataRepacker') process.siStripFEDCheck.RawDataTag = cms.InputTag('rawDataRepacker') process.esRawToDigi.sourceTag = cms.InputTag('rawDataRepacker') @@ -105,7 +105,7 @@ process.cscDQMEvF.InputObjects = cms.untracked.InputTag('rawDataRepacker') else: process.l1tStage2Fed.rawTag = cms.InputTag('rawDataCollector') - process.siPixelDigis.InputLabel = cms.InputTag('rawDataCollector') + process.siPixelDigis.cpu.InputLabel = cms.InputTag('rawDataCollector') process.SiPixelHLTSource.RawInput = cms.InputTag('rawDataCollector') process.siStripFEDCheck.RawDataTag = cms.InputTag('rawDataCollector') process.esRawToDigi.sourceTag = cms.InputTag('rawDataCollector') @@ -126,7 +126,7 @@ # Modules for the FED process.FEDModulesPath = cms.Path( process.l1tStage2Fed - + process.siPixelDigis + + process.siPixelDigis + process.SiPixelHLTSource + process.siStripFEDCheck + process.esRawToDigi diff --git a/DQM/Integration/python/clients/l1t_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/l1t_dqm_sourceclient-live_cfg.py index 301a79f2b2865..b2358e79a1bb6 100644 --- a/DQM/Integration/python/clients/l1t_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/l1t_dqm_sourceclient-live_cfg.py @@ -182,7 +182,7 @@ process.muonDTDigis.inputLabel = cms.InputTag("rawDataCollector") process.muonRPCDigis.InputLabel = cms.InputTag("rawDataCollector") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataCollector") -process.siPixelDigis.InputLabel = cms.InputTag("rawDataCollector") +process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataCollector") process.siStripDigis.ProductLabel = cms.InputTag("rawDataCollector") process.bxTiming.FedSource = cms.untracked.InputTag("rawDataCollector") process.l1s.fedRawData = cms.InputTag("rawDataCollector") @@ -201,7 +201,7 @@ process.muonDTDigis.inputLabel = cms.InputTag("rawDataRepacker") process.muonRPCDigis.InputLabel = cms.InputTag("rawDataRepacker") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataRepacker") - process.siPixelDigis.InputLabel = cms.InputTag("rawDataRepacker") + process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataRepacker") process.siStripDigis.ProductLabel = cms.InputTag("rawDataRepacker") process.bxTiming.FedSource = cms.untracked.InputTag("rawDataRepacker") process.l1s.fedRawData = cms.InputTag("rawDataRepacker") diff --git a/DQM/Integration/python/clients/l1temulator_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/l1temulator_dqm_sourceclient-live_cfg.py index 9701c71d14a3c..e2c9f057f04b1 100644 --- a/DQM/Integration/python/clients/l1temulator_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/l1temulator_dqm_sourceclient-live_cfg.py @@ -197,7 +197,7 @@ process.muonDTDigis.inputLabel = cms.InputTag("rawDataCollector") process.muonRPCDigis.InputLabel = cms.InputTag("rawDataCollector") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataCollector") -process.siPixelDigis.InputLabel = cms.InputTag("rawDataCollector") +process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataCollector") process.siStripDigis.ProductLabel = cms.InputTag("rawDataCollector") #-------------------------------------------------- @@ -219,7 +219,7 @@ process.muonDTDigis.inputLabel = cms.InputTag("rawDataRepacker") process.muonRPCDigis.InputLabel = cms.InputTag("rawDataRepacker") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataRepacker") - process.siPixelDigis.InputLabel = cms.InputTag("rawDataRepacker") + process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataRepacker") process.siStripDigis.ProductLabel = cms.InputTag("rawDataRepacker") diff --git a/DQM/Integration/python/clients/l1tstage1_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/l1tstage1_dqm_sourceclient-live_cfg.py index b8ae0bcf233b4..93df769c2dfe4 100644 --- a/DQM/Integration/python/clients/l1tstage1_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/l1tstage1_dqm_sourceclient-live_cfg.py @@ -192,7 +192,7 @@ process.muonDTDigis.inputLabel = cms.InputTag("rawDataCollector") process.muonRPCDigis.InputLabel = cms.InputTag("rawDataCollector") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataCollector") -process.siPixelDigis.InputLabel = cms.InputTag("rawDataCollector") +process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataCollector") process.siStripDigis.ProductLabel = cms.InputTag("rawDataCollector") process.bxTiming.FedSource = cms.untracked.InputTag("rawDataCollector") process.l1s.fedRawData = cms.InputTag("rawDataCollector") @@ -211,7 +211,7 @@ process.muonDTDigis.inputLabel = cms.InputTag("rawDataRepacker") process.muonRPCDigis.InputLabel = cms.InputTag("rawDataRepacker") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataRepacker") - process.siPixelDigis.InputLabel = cms.InputTag("rawDataRepacker") + process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataRepacker") process.siStripDigis.ProductLabel = cms.InputTag("rawDataRepacker") process.bxTiming.FedSource = cms.untracked.InputTag("rawDataRepacker") process.l1s.fedRawData = cms.InputTag("rawDataRepacker") diff --git a/DQM/Integration/python/clients/l1tstage1emulator_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/l1tstage1emulator_dqm_sourceclient-live_cfg.py index 6200618c0fe44..4ed9c5e298890 100644 --- a/DQM/Integration/python/clients/l1tstage1emulator_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/l1tstage1emulator_dqm_sourceclient-live_cfg.py @@ -206,7 +206,7 @@ process.muonDTDigis.inputLabel = cms.InputTag("rawDataCollector") process.muonRPCDigis.InputLabel = cms.InputTag("rawDataCollector") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataCollector") -process.siPixelDigis.InputLabel = cms.InputTag("rawDataCollector") +process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataCollector") process.siStripDigis.ProductLabel = cms.InputTag("rawDataCollector") #-------------------------------------------------- @@ -228,7 +228,7 @@ process.muonDTDigis.inputLabel = cms.InputTag("rawDataRepacker") process.muonRPCDigis.InputLabel = cms.InputTag("rawDataRepacker") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataRepacker") - process.siPixelDigis.InputLabel = cms.InputTag("rawDataRepacker") + process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataRepacker") process.siStripDigis.ProductLabel = cms.InputTag("rawDataRepacker") diff --git a/DQM/Integration/python/clients/l1tstage2_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/l1tstage2_dqm_sourceclient-live_cfg.py index c5788228cac1f..0c7f4707b6d8b 100644 --- a/DQM/Integration/python/clients/l1tstage2_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/l1tstage2_dqm_sourceclient-live_cfg.py @@ -138,7 +138,7 @@ process.muonRPCDigis.InputLabel = cms.InputTag("rawDataRepacker") process.muonGEMDigis.InputLabel = cms.InputTag("rawDataRepacker") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataRepacker") - process.siPixelDigis.InputLabel = cms.InputTag("rawDataRepacker") + process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataRepacker") process.siStripDigis.ProductLabel = cms.InputTag("rawDataRepacker") process.tcdsDigis.InputLabel = cms.InputTag("rawDataRepacker") process.tcdsRawToDigi.InputLabel = cms.InputTag("rawDataRepacker") diff --git a/DQM/Integration/python/clients/l1tstage2emulator_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/l1tstage2emulator_dqm_sourceclient-live_cfg.py index 91f1f564366d0..7b6372229555c 100644 --- a/DQM/Integration/python/clients/l1tstage2emulator_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/l1tstage2emulator_dqm_sourceclient-live_cfg.py @@ -137,7 +137,7 @@ process.muonRPCDigis.InputLabel = cms.InputTag("rawDataRepacker") process.muonGEMDigis.InputLabel = cms.InputTag("rawDataRepacker") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataRepacker") - process.siPixelDigis.InputLabel = cms.InputTag("rawDataRepacker") + process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataRepacker") process.siStripDigis.ProductLabel = cms.InputTag("rawDataRepacker") process.tcdsDigis.InputLabel = cms.InputTag("rawDataRepacker") process.tcdsRawToDigi.InputLabel = cms.InputTag("rawDataRepacker") diff --git a/DQM/Integration/python/clients/lumi_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/lumi_dqm_sourceclient-live_cfg.py index 47acfcdc471f2..e439454513880 100644 --- a/DQM/Integration/python/clients/lumi_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/lumi_dqm_sourceclient-live_cfg.py @@ -49,7 +49,7 @@ process.load("Configuration.StandardSequences.EndOfProcess_cff") process.load("Configuration.EventContent.EventContent_cff") process.load("Configuration.StandardSequences.Reconstruction_cff") -process.siPixelDigis.InputLabel = cms.InputTag("hltFEDSelectorLumiPixels") +process.siPixelDigis.cpu.InputLabel = cms.InputTag("hltFEDSelectorLumiPixels") process.reconstruction_step = cms.Sequence( process.siPixelDigis + diff --git a/DQM/Integration/python/clients/physics_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/physics_dqm_sourceclient-live_cfg.py index 76b6ae553949c..fef661979c427 100644 --- a/DQM/Integration/python/clients/physics_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/physics_dqm_sourceclient-live_cfg.py @@ -56,7 +56,7 @@ process.dqmSaverPB ) -process.siPixelDigis.InputLabel = cms.InputTag("rawDataCollector") +process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataCollector") ### process customizations included here from DQM.Integration.config.online_customizations_cfi import * @@ -69,4 +69,4 @@ print("Running with run type = ", process.runType.getRunType()) if (process.runType.getRunType() == process.runType.hi_run): - process.siPixelDigis.InputLabel = cms.InputTag("rawDataRepacker") + process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataRepacker") diff --git a/DQM/Integration/python/clients/pixel_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/pixel_dqm_sourceclient-live_cfg.py index 5c45b5f46ca9c..b849be77b6e63 100644 --- a/DQM/Integration/python/clients/pixel_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/pixel_dqm_sourceclient-live_cfg.py @@ -104,18 +104,18 @@ # PixelPhase1 Real data raw to digi process.load("EventFilter.SiPixelRawToDigi.SiPixelRawToDigi_cfi") -process.siPixelDigis.IncludeErrors = True +process.siPixelDigis.cpu.IncludeErrors = True if (process.runType.getRunType() == process.runType.hi_run): #-------------------------------- # Heavy Ion Configuration Changes #-------------------------------- - process.siPixelDigis.InputLabel = cms.InputTag("rawDataRepacker") + process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataRepacker") process.siStripDigis.ProductLabel = cms.InputTag("rawDataRepacker") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataRepacker") else : - process.siPixelDigis.InputLabel = cms.InputTag("rawDataCollector") - process.siStripDigis.InputLabel = cms.InputTag("rawDataCollector") + process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataCollector") + process.siStripDigis.InputLabel = cms.InputTag("rawDataCollector") ## Collision Reconstruction process.load("Configuration.StandardSequences.RawToDigi_Data_cff") diff --git a/DQM/Integration/python/clients/pixellumi_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/pixellumi_dqm_sourceclient-live_cfg.py index bd15690ede85a..50213e303b8de 100644 --- a/DQM/Integration/python/clients/pixellumi_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/pixellumi_dqm_sourceclient-live_cfg.py @@ -79,7 +79,7 @@ #----------------------- # Real data raw to digi process.load("EventFilter.SiPixelRawToDigi.SiPixelRawToDigi_cfi") -process.siPixelDigis.IncludeErrors = True +process.siPixelDigis.cpu.IncludeErrors = True # Local Reconstruction process.load("RecoLocalTracker.SiPixelClusterizer.SiPixelClusterizer_cfi") @@ -92,13 +92,13 @@ # SelectEvents = cms.vstring('HLT_600Tower*','HLT_L1*','HLT_Jet*','HLT_*Cosmic*','HLT_HT*','HLT_MinBias_*','HLT_Physics*', 'HLT_ZeroBias*','HLT_HcalNZS*')) -process.siPixelDigis.InputLabel = cms.InputTag("rawDataCollector") +process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataCollector") #-------------------------------- # Heavy Ion Configuration Changes #-------------------------------- if (process.runType.getRunType() == process.runType.hi_run): process.load('Configuration.StandardSequences.RawToDigi_Repacked_cff') - process.siPixelDigis.InputLabel = cms.InputTag("rawDataRepacker") + process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataRepacker") if not unitTest: process.source.SelectEvents = cms.untracked.vstring('HLT_HIL1MinimumBiasHF2AND*') diff --git a/DQM/Integration/python/clients/scal_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/scal_dqm_sourceclient-live_cfg.py index 893443f74f1a2..2decc1b774251 100644 --- a/DQM/Integration/python/clients/scal_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/scal_dqm_sourceclient-live_cfg.py @@ -100,7 +100,7 @@ process.muonDTDigis.inputLabel = cms.InputTag("rawDataRepacker") process.muonRPCDigis.InputLabel = cms.InputTag("rawDataRepacker") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataRepacker") - process.siPixelDigis.InputLabel = cms.InputTag("rawDataRepacker") + process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataRepacker") process.siStripDigis.ProductLabel = cms.InputTag("rawDataRepacker") diff --git a/DQM/Integration/python/clients/sistrip_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/sistrip_dqm_sourceclient-live_cfg.py index 37e219bd456c2..889fc8a978d22 100644 --- a/DQM/Integration/python/clients/sistrip_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/sistrip_dqm_sourceclient-live_cfg.py @@ -502,7 +502,7 @@ process.muonDTDigis.inputLabel = cms.InputTag("rawDataCollector") process.muonRPCDigis.InputLabel = cms.InputTag("rawDataCollector") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataCollector") -process.siPixelDigis.InputLabel = cms.InputTag("rawDataCollector") +process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataCollector") process.siStripDigis.ProductLabel = cms.InputTag("rawDataCollector") process.siStripFEDMonitor.RawDataTag = cms.untracked.InputTag("rawDataCollector") #-------------------------------------------------- @@ -523,7 +523,7 @@ process.muonDTDigis.inputLabel = cms.InputTag("rawDataRepacker") process.muonRPCDigis.InputLabel = cms.InputTag("rawDataRepacker") process.scalersRawToDigi.scalersInputTag = cms.InputTag("rawDataRepacker") - process.siPixelDigis.InputLabel = cms.InputTag("rawDataRepacker") + process.siPixelDigis.cpu.InputLabel = cms.InputTag("rawDataRepacker") process.siStripDigis.ProductLabel = cms.InputTag("rawDataRepacker") process.siStripFEDMonitor.RawDataTag = cms.untracked.InputTag("rawDataRepacker") diff --git a/DQM/Integration/python/config/FrontierCondition_GT_autoExpress_cfi.py b/DQM/Integration/python/config/FrontierCondition_GT_autoExpress_cfi.py index 0f9d82935786a..92653dab8d754 100644 --- a/DQM/Integration/python/config/FrontierCondition_GT_autoExpress_cfi.py +++ b/DQM/Integration/python/config/FrontierCondition_GT_autoExpress_cfi.py @@ -7,7 +7,7 @@ # It should be kept in synch with Express processing at Tier0: what the url # https://cmsweb.cern.ch/t0wmadatasvc/prod/express_config # would tell you. -GlobalTag.globaltag = "111X_dataRun3_Express_v4" +GlobalTag.globaltag = "112X_dataRun3_Express_v2" # ===== auto -> Automatically get the GT string from current Tier0 configuration via a Tier0Das call. # This needs a valid proxy to access the cern.ch network from the .cms one. diff --git a/DQM/Integration/python/config/FrontierCondition_GT_cfi.py b/DQM/Integration/python/config/FrontierCondition_GT_cfi.py index fafa0c11ecc74..e6ed62c481ded 100644 --- a/DQM/Integration/python/config/FrontierCondition_GT_cfi.py +++ b/DQM/Integration/python/config/FrontierCondition_GT_cfi.py @@ -1,3 +1,3 @@ import FWCore.ParameterSet.Config as cms from Configuration.StandardSequences.FrontierConditions_GlobalTag_cff import * -GlobalTag.globaltag = "111X_dataRun3_HLT_v3" +GlobalTag.globaltag = "112X_dataRun3_HLT_v1" diff --git a/DQM/L1TMonitor/interface/L1TStage2CaloLayer1.h b/DQM/L1TMonitor/interface/L1TStage2CaloLayer1.h index b75d0fd0a0b82..efa18ac022dac 100644 --- a/DQM/L1TMonitor/interface/L1TStage2CaloLayer1.h +++ b/DQM/L1TMonitor/interface/L1TStage2CaloLayer1.h @@ -155,7 +155,7 @@ namespace CaloL1Information { dqm::reco::MonitorElement *last20Mismatches_; - std::vector> runMismatchList; + std::vector>> runMismatchList; }; struct perStreamMonitoringDataHolder { @@ -166,7 +166,7 @@ namespace CaloL1Information { int streamNumMaxEvtMismatchECAL{0}; int streamNumMaxEvtMismatchHCAL{0}; int streamNumMaxEvtMismatch{0}; - std::vector> streamMismatchList; + std::vector>> streamMismatchList; }; struct perLumiBlockMonitoringInformation { @@ -178,11 +178,11 @@ namespace CaloL1Information { int lumiNumMaxEvtMismatchHCAL{0}; int lumiNumMaxEvtMismatch{0}; - std::vector> lumiMismatchList; + std::vector>> lumiMismatchList; }; struct perRunSummaryMonitoringInformation { - std::vector> runMismatchList; + std::vector>> runMismatchList; }; } // namespace CaloL1Information @@ -248,19 +248,21 @@ class L1TStage2CaloLayer1 CaloL1Information::perRunSummaryMonitoringInformation *) const override; private: - void updateMismatch( - const edm::Event &e, - int mismatchType, - std::vector> &streamMismatches) const; + void updateMismatch(const edm::Event &e, + int mismatchType, + std::vector>> + &streamMismatches) const; - void mergeMismatchVectors(std::vector> &, - std::vector> &) const; + void mergeMismatchVectors( + std::vector>> &, + std::vector>> &) const; - bool isLaterMismatch(std::tuple &candidateMismatch, - std::tuple &comparisonMismatch) const; + bool isLaterMismatch( + std::tuple> &candidateMismatch, + std::tuple> &comparisonMismatch) const; - int findIndex(std::tuple, - std::vector>, + int findIndex(std::tuple>, + std::vector>>, int lowerIndexToSearch, int upperIndexToSearch) const; // Input and config info diff --git a/DQM/L1TMonitor/interface/L1TStage2RegionalMuonCandComp.h b/DQM/L1TMonitor/interface/L1TStage2RegionalMuonCandComp.h index f679c4d30a852..28bbf0e5b3bfa 100644 --- a/DQM/L1TMonitor/interface/L1TStage2RegionalMuonCandComp.h +++ b/DQM/L1TMonitor/interface/L1TStage2RegionalMuonCandComp.h @@ -63,6 +63,10 @@ class L1TStage2RegionalMuonCandComp : public DQMEDAnalyzer { RPT2 }; enum tfs { BMTFBIN = 1, OMTFNEGBIN, OMTFPOSBIN, EMTFNEGBIN, EMTFPOSBIN }; + int numSummaryBins_{ + TRACKADDRBAD}; // In Run-2 we didn't have the last two bins. This is incremented in source file if we configure for Run-3. + int numErrBins_{ + RTRACKADDR}; // In Run-2 we didn't have the last two bins. This is incremented in source file if we configure for Run-3. bool incBin[RPT2 + 1]; edm::EDGetTokenT muonToken1; @@ -74,7 +78,7 @@ class L1TStage2RegionalMuonCandComp : public DQMEDAnalyzer { bool ignoreBadTrkAddr; std::vector ignoreBin; bool verbose; - bool isBmtf; + bool hasDisplacementInfo; MonitorElement* summary; MonitorElement* errorSummaryNum; diff --git a/DQM/L1TMonitor/interface/L1TStage2uGMT.h b/DQM/L1TMonitor/interface/L1TStage2uGMT.h index 0c19f63af5183..3b42ddd51bcd7 100644 --- a/DQM/L1TMonitor/interface/L1TStage2uGMT.h +++ b/DQM/L1TMonitor/interface/L1TStage2uGMT.h @@ -77,6 +77,8 @@ class L1TStage2uGMT : public DQMEDAnalyzer { MonitorElement* ugmtEMTFBX; MonitorElement* ugmtEMTFnMuons; MonitorElement* ugmtEMTFhwPt; + MonitorElement* ugmtEMTFhwPtUnconstrained; + MonitorElement* ugmtEMTFhwDXY; MonitorElement* ugmtEMTFhwEta; MonitorElement* ugmtEMTFhwPhiPos; MonitorElement* ugmtEMTFhwPhiNeg; diff --git a/DQM/L1TMonitor/python/L1TStage2BMTF_cff.py b/DQM/L1TMonitor/python/L1TStage2BMTF_cff.py index 9c8381c866f3a..2f3008ec2be8c 100644 --- a/DQM/L1TMonitor/python/L1TStage2BMTF_cff.py +++ b/DQM/L1TMonitor/python/L1TStage2BMTF_cff.py @@ -39,7 +39,7 @@ l1tStage2BmtfSecond.bmtfSource = cms.InputTag("bmtfDigis","BMTF2") l1tStage2BmtfSecond.monitorDir = cms.untracked.string("L1T/L1TStage2BMTF/L1TStage2BMTF-Secondary") l1tStage2BmtfSecond.verbose = cms.untracked.bool(False) -l1tStage2BmtfSecond.isBmtf = cms.untracked.bool(True) +l1tStage2BmtfSecond.hasDisplacementInfo = cms.untracked.bool(True) # sequences l1tStage2BmtfOnlineDQMSeq = cms.Sequence( diff --git a/DQM/L1TMonitor/python/L1TStage2uGMT_cff.py b/DQM/L1TMonitor/python/L1TStage2uGMT_cff.py index c00390ff7beac..27f41eb379110 100644 --- a/DQM/L1TMonitor/python/L1TStage2uGMT_cff.py +++ b/DQM/L1TMonitor/python/L1TStage2uGMT_cff.py @@ -54,6 +54,10 @@ displacedQuantities = cms.untracked.bool(False) ) +## Era: Run3_2021; Displaced muons from EMTF used in uGMT from Run-3 +stage2L1Trigger_2021.toModify(l1tStage2uGMTIntermediateEMTFNeg, displacedQuantities = cms.untracked.bool(True)) +stage2L1Trigger_2021.toModify(l1tStage2uGMTIntermediateEMTFPos, displacedQuantities = cms.untracked.bool(True)) + # zero suppression DQM l1tStage2uGMTZeroSupp = DQMEDAnalyzer( "L1TMP7ZeroSupp", @@ -129,7 +133,7 @@ ## Era: Run3_2021; Displaced muons from BMTF used in uGMT from Run-3 from Configuration.Eras.Modifier_stage2L1Trigger_2021_cff import stage2L1Trigger_2021 -stage2L1Trigger_2021.toModify(l1tStage2BmtfOutVsuGMTIn, isBmtf = cms.untracked.bool(True)) +stage2L1Trigger_2021.toModify(l1tStage2BmtfOutVsuGMTIn, hasDisplacementInfo = cms.untracked.bool(True)) # compares the unpacked OMTF output regional muon collection with the unpacked uGMT input regional muon collection from OMTF # only muons that do not match are filled in the histograms @@ -159,6 +163,9 @@ verbose = cms.untracked.bool(False), ) +## Era: Run3_2021; Displaced muons from EMTF used in uGMT from Run-3 +stage2L1Trigger_2021.toModify(l1tStage2EmtfOutVsuGMTIn, hasDisplacementInfo = cms.untracked.bool(True)) + # The five modules below compare the primary unpacked uGMT muon collection to goes to uGT board 0 # to the unpacked uGMT muon collections that are sent to uGT boards 1 to 5. # Only muons that do not match are filled in the histograms diff --git a/DQM/L1TMonitor/python/L1TdeStage2BMTFSecond_cff.py b/DQM/L1TMonitor/python/L1TdeStage2BMTFSecond_cff.py index e89a775927457..7bb5830598de9 100644 --- a/DQM/L1TMonitor/python/L1TdeStage2BMTFSecond_cff.py +++ b/DQM/L1TMonitor/python/L1TdeStage2BMTFSecond_cff.py @@ -14,7 +14,7 @@ l1tdeStage2BmtfSecond.summaryTitle = cms.untracked.string("Summary of comparison between BMTF2 muons and BMTF2 emulator muons") l1tdeStage2BmtfSecond.ignoreBin = cms.untracked.vint32(ignoreBinsDeStage2Bmtf) l1tdeStage2BmtfSecond.verbose = cms.untracked.bool(False) -l1tdeStage2BmtfSecond.isBmtf = cms.untracked.bool(True) +l1tdeStage2BmtfSecond.hasDisplacementInfo = cms.untracked.bool(True) diff --git a/DQM/L1TMonitor/python/L1TdeStage2BMTF_cfi.py b/DQM/L1TMonitor/python/L1TdeStage2BMTF_cfi.py index f5d967b2d18cf..195ba1806a810 100644 --- a/DQM/L1TMonitor/python/L1TdeStage2BMTF_cfi.py +++ b/DQM/L1TMonitor/python/L1TdeStage2BMTF_cfi.py @@ -17,6 +17,6 @@ summaryTitle = cms.untracked.string("Summary of comparison between BMTF muons and BMTF emulator muons"), ignoreBin = cms.untracked.vint32(ignoreBinsDeStage2Bmtf), verbose = cms.untracked.bool(False), - isBmtf = cms.untracked.bool(True) + hasDisplacementInfo = cms.untracked.bool(True) ) diff --git a/DQM/L1TMonitor/python/L1TdeStage2uGMT_cff.py b/DQM/L1TMonitor/python/L1TdeStage2uGMT_cff.py index 15114f493df1f..847bdf683b421 100644 --- a/DQM/L1TMonitor/python/L1TdeStage2uGMT_cff.py +++ b/DQM/L1TMonitor/python/L1TdeStage2uGMT_cff.py @@ -66,6 +66,10 @@ verbose = cms.untracked.bool(False), ) +## Era: Run3_2021; Displaced muons from EMTF used in uGMT from Run-3 +stage2L1Trigger_2021.toModify(l1tStage2uGMTIntermediateEMTFNegEmul, displacedQuantities = cms.untracked.bool(True)) +stage2L1Trigger_2021.toModify(l1tStage2uGMTIntermediateEMTFPosEmul, displacedQuantities = cms.untracked.bool(True)) + # compares the unpacked uGMT muon collection to the emulated uGMT muon collection # only muons that do not match are filled in the histograms l1tdeStage2uGMT = DQMEDAnalyzer( diff --git a/DQM/L1TMonitor/src/BxTiming.cc b/DQM/L1TMonitor/src/BxTiming.cc index 187840dfb5683..4d7f667eb798e 100644 --- a/DQM/L1TMonitor/src/BxTiming.cc +++ b/DQM/L1TMonitor/src/BxTiming.cc @@ -143,22 +143,16 @@ void BxTiming::bookHistograms(DQMStore::IBooker &ibooker, edm::Run const &, edm: for (int i = 0; i < nfed_; i++) { lbl.clear(); lbl += "BxOccyOneFed"; - char *ii = new char[1000]; - std::sprintf(ii, "%d", i); - lbl += ii; + lbl += std::to_string(i); hBxOccyOneFed[i] = ibooker.book1D(lbl.data(), lbl.data(), norb_ + 1, -0.5, norb_ + 0.5); - delete[] ii; } ibooker.setCurrentFolder(histFolder_); for (int i = 0; i < nttype_; i++) { lbl.clear(); lbl += "BxOccyGtTrigType"; - char *ii = new char[16]; - std::sprintf(ii, "%d", i + 1); - lbl += ii; + lbl += std::to_string(i + 1); hBxOccyGtTrigType[i] = ibooker.book1D(lbl.data(), lbl.data(), norb_ + 1, -0.5, norb_ + 0.5); - delete[] ii; } ibooker.setCurrentFolder(histFolder_ + "/SingleBit"); @@ -168,11 +162,8 @@ void BxTiming::bookHistograms(DQMStore::IBooker &ibooker, edm::Run const &, edm: lbl.clear(); lbl += SysLabel[i]; lbl += "BxOccyGtBit"; - char *ii = new char[1000]; - std::sprintf(ii, "%d", listGtBits_.at(j)); - lbl += ii; + lbl += std::to_string(listGtBits_.at(j)); hBxOccyTrigBit[i][j] = ibooker.book1D(lbl.data(), lbl.data(), norb_ + 1, -0.5, norb_ + 0.5); - delete[] ii; } } } @@ -226,22 +217,16 @@ void BxTiming::bookHistograms(DQMStore::IBooker &ibooker, edm::Run const &, edm: hBxOccyOneFed[i]->setAxisTitle("bx", 1); lbl.clear(); lbl += " FED "; - char *ii = new char[1000]; - std::sprintf(ii, "%d", i); - lbl += ii; + lbl += std::to_string(i); lbl += " occupancy"; hBxOccyOneFed[i]->setAxisTitle(lbl, 2); - delete[] ii; } for (int i = 0; i < nttype_; i++) { hBxOccyGtTrigType[i]->setAxisTitle("bx", 1); lbl.clear(); lbl += "GT occupancy for trigger type "; - char *ii = new char[16]; - std::sprintf(ii, "%d", i + 1); - lbl += ii; + lbl += std::to_string(i + 1); hBxOccyGtTrigType[i]->setAxisTitle(lbl, 2); - delete[] ii; } for (int i = 0; i < NSYS; i++) { @@ -250,11 +235,8 @@ void BxTiming::bookHistograms(DQMStore::IBooker &ibooker, edm::Run const &, edm: lbl.clear(); lbl += SysLabel[i]; lbl += " Bx occupancy for Trigger bit "; - char *ii = new char[10]; - std::sprintf(ii, "%d", listGtBits_.at(j)); - lbl += ii; + lbl += std::to_string(listGtBits_.at(j)); hBxOccyTrigBit[i][j]->setAxisTitle(lbl, 2); - delete[] ii; } } } diff --git a/DQM/L1TMonitor/src/L1TStage2CaloLayer1.cc b/DQM/L1TMonitor/src/L1TStage2CaloLayer1.cc index 86ca56bf10bca..fcb1d91d91ff8 100644 --- a/DQM/L1TMonitor/src/L1TStage2CaloLayer1.cc +++ b/DQM/L1TMonitor/src/L1TStage2CaloLayer1.cc @@ -346,12 +346,38 @@ void L1TStage2CaloLayer1::dqmAnalyze(const edm::Event& event, void L1TStage2CaloLayer1::updateMismatch( const edm::Event& e, int mismatchType, - std::vector>& streamMismatches) const { - std::tuple mismatchToInsert = { - e.getRun().id(), e.getLuminosityBlock().id(), e.id(), mismatchType}; + std::vector>>& streamMismatches) + const { + //check if this combination of Run/Lumi/Event already exists in the stream mismatch list + //if it does, update that entry, otherwise insert a new one with this particular combination. + for (auto mismatchIterator = streamMismatches.begin(); mismatchIterator != streamMismatches.end(); + ++mismatchIterator) { + if (e.getRun().id() == std::get<0>(*mismatchIterator) && + e.getLuminosityBlock().id() == std::get<1>(*mismatchIterator) && e.id() == std::get<2>(*mismatchIterator)) { + //the run, lumi and event exist. Check if this kind of mismatch has been reported before + std::vector& mismatchTypeVector = std::get<3>(*mismatchIterator); + for (auto mismatchTypeIterator = mismatchTypeVector.begin(); mismatchTypeIterator != mismatchTypeVector.end(); + ++mismatchTypeIterator) { + if (mismatchType == *mismatchTypeIterator) { + //this has already been reported + return; + } + } + //A mismatch exists, but it is not a type that has been previously reported. + //Insert it into the vector of types of mismatches reported + mismatchTypeVector.push_back(mismatchType); + return; + } + } + + //The run/lumi/event does not exist in the list, construct an entry + std::vector newMismatchTypeVector; + newMismatchTypeVector.push_back(mismatchType); + std::tuple> mismatchToInsert = { + e.getRun().id(), e.getLuminosityBlock().id(), e.id(), newMismatchTypeVector}; streamMismatches.push_back(mismatchToInsert); - //This 20 is potentially a non-obvious constant "magic number" - //this matches the mismatch detail histogram, but should be upgraded to not use the constant in this manner. + + //maintain the mismatch vector size at 20. if (streamMismatches.size() > 20) streamMismatches.erase(streamMismatches.begin()); } @@ -607,8 +633,8 @@ void L1TStage2CaloLayer1::globalEndLuminosityBlockSummary( // based on Run, Lumisection, and event number //false otherwise bool L1TStage2CaloLayer1::isLaterMismatch( - std::tuple& candidateMismatch, - std::tuple& comparisonMismatch) const { + std::tuple>& candidateMismatch, + std::tuple>& comparisonMismatch) const { //check the run. If the run ID of the candidate mismatch is less than the run ID of the comparison mismatch, it is earlier, if (std::get<0>(candidateMismatch) < std::get<0>(comparisonMismatch)) return false; @@ -637,8 +663,8 @@ bool L1TStage2CaloLayer1::isLaterMismatch( //will find an interger we add to the iterator to get the proper location to find the insertion location //will return -1 if the mismatch should not be inserted into the list int L1TStage2CaloLayer1::findIndex( - std::tuple candidateMismatch, - std::vector> comparisonList, + std::tuple> candidateMismatch, + std::vector>> comparisonList, int lowerIndexToSearch, int upperIndexToSearch) const { //Start by getting the spot in the the vector to start searching @@ -697,8 +723,9 @@ int L1TStage2CaloLayer1::findIndex( //will shuffle the candidate mismatch list into the comparison mismatch list. void L1TStage2CaloLayer1::mergeMismatchVectors( - std::vector>& candidateMismatchList, - std::vector>& comparisonMismatchList) const { + std::vector>>& candidateMismatchList, + std::vector>>& comparisonMismatchList) + const { //okay now we loop over our candidate mismatches for (auto candidateIterator = candidateMismatchList.begin(); candidateIterator != candidateMismatchList.end(); ++candidateIterator) { @@ -748,7 +775,17 @@ void L1TStage2CaloLayer1::globalEndRunSummary( std::to_string(std::get<1>(*mismatchIterator).luminosityBlock()) + ":" + std::to_string(std::get<2>(*mismatchIterator).event()); theRunCache->last20Mismatches_->setBinLabel(ibin, binLabel, 2); - theRunCache->last20Mismatches_->setBinContent(std::get<3>(*mismatchIterator) + 1, ibin, 1); + //Get the vector of mismatches for this particular event and iterate through it. + //Set the bin content to 1 for each type of mismatch seen + std::vector mismatchTypeVector = std::get<3>(*mismatchIterator); + for (auto mismatchTypeIterator = mismatchTypeVector.begin(); mismatchTypeIterator != mismatchTypeVector.end(); + ++mismatchTypeIterator) { + theRunCache->last20Mismatches_->setBinContent(*mismatchTypeIterator + 1, ibin, 1); + } ++ibin; } + //remove the remaining empty string labels to prevent overlap + for (int emptyBinIndex = ibin; emptyBinIndex <= 20; ++emptyBinIndex) { + theRunCache->last20Mismatches_->setBinLabel(emptyBinIndex, std::to_string(emptyBinIndex), 2); + } } diff --git a/DQM/L1TMonitor/src/L1TStage2MuonComp.cc b/DQM/L1TMonitor/src/L1TStage2MuonComp.cc index 37c62dcd634f0..51c1c53058490 100644 --- a/DQM/L1TMonitor/src/L1TStage2MuonComp.cc +++ b/DQM/L1TMonitor/src/L1TStage2MuonComp.cc @@ -12,8 +12,11 @@ L1TStage2MuonComp::L1TStage2MuonComp(const edm::ParameterSet& ps) enable2DComp( ps.getUntrackedParameter("enable2DComp")), // When true eta-phi comparison plots are also produced displacedQuantities_(ps.getUntrackedParameter("displacedQuantities")) { + if (displacedQuantities_) { + numErrBins_ += 2; + } // First include all bins - for (unsigned int i = 1; i <= RIDX; i++) { + for (int i = 1; i <= numErrBins_; i++) { incBin[i] = true; } // Then check the list of bins to ignore @@ -74,9 +77,6 @@ void L1TStage2MuonComp::bookHistograms(DQMStore::IBooker& ibooker, const edm::Ru summary->setBinLabel(DXYBAD, "dXY mismatch", 1); } - if (displacedQuantities_) { - numErrBins_ += 2; - } errorSummaryNum = ibooker.book1D( "errorSummaryNum", summaryTitle.c_str(), numErrBins_, 1, numErrBins_ + 1); // range to match bin numbering errorSummaryNum->setBinLabel(RBXRANGE, "BX range mismatch", 1); diff --git a/DQM/L1TMonitor/src/L1TStage2RegionalMuonCandComp.cc b/DQM/L1TMonitor/src/L1TStage2RegionalMuonCandComp.cc index 95f05d94d2734..8bd1f2fdbfaf2 100644 --- a/DQM/L1TMonitor/src/L1TStage2RegionalMuonCandComp.cc +++ b/DQM/L1TMonitor/src/L1TStage2RegionalMuonCandComp.cc @@ -12,9 +12,13 @@ L1TStage2RegionalMuonCandComp::L1TStage2RegionalMuonCandComp(const edm::Paramete ignoreBadTrkAddr(ps.getUntrackedParameter("ignoreBadTrackAddress")), ignoreBin(ps.getUntrackedParameter>("ignoreBin")), verbose(ps.getUntrackedParameter("verbose")), - isBmtf(ps.getUntrackedParameter("isBmtf")) { + hasDisplacementInfo(ps.getUntrackedParameter("hasDisplacementInfo")) { + if (hasDisplacementInfo) { + numErrBins_ += 2; + numSummaryBins_ += 2; + } // First include all bins - for (unsigned int i = 1; i <= RPT2; i++) { + for (int i = 1; i <= numErrBins_; i++) { incBin[i] = true; } // Then check the list of bins to ignore @@ -41,7 +45,7 @@ void L1TStage2RegionalMuonCandComp::fillDescriptions(edm::ConfigurationDescripti desc.addUntracked("ignoreBadTrackAddress", false)->setComment("Ignore muon track address mismatches."); desc.addUntracked>("ignoreBin", std::vector())->setComment("List of bins to ignore"); desc.addUntracked("verbose", false); - desc.addUntracked("isBmtf", false); + desc.addUntracked("hasDisplacementInfo", false); descriptions.add("l1tStage2RegionalMuonCandComp", desc); } @@ -53,16 +57,14 @@ void L1TStage2RegionalMuonCandComp::bookHistograms(DQMStore::IBooker& ibooker, trkAddrIgnoreText = " (Bad track addresses ignored)"; } - int nbins = 17; - if (isBmtf) { - nbins += 2; - } - // Subsystem Monitoring and Muon Output ibooker.setCurrentFolder(monitorDir); - summary = ibooker.book1D( - "summary", (summaryTitle + trkAddrIgnoreText).c_str(), nbins, 1, nbins + 1); // range to match bin numbering + summary = ibooker.book1D("summary", + (summaryTitle + trkAddrIgnoreText).c_str(), + numSummaryBins_, + 1, + numSummaryBins_ + 1); // range to match bin numbering summary->setBinLabel(BXRANGEGOOD, "BX range match", 1); summary->setBinLabel(BXRANGEBAD, "BX range mismatch", 1); summary->setBinLabel(NMUONGOOD, "muon collection size match", 1); @@ -80,21 +82,16 @@ void L1TStage2RegionalMuonCandComp::bookHistograms(DQMStore::IBooker& ibooker, summary->setBinLabel(PROCBAD, "processor mismatch", 1); summary->setBinLabel(TFBAD, "track finder type mismatch", 1); summary->setBinLabel(TRACKADDRBAD, "track address mismatch", 1); - if (isBmtf) { + if (hasDisplacementInfo) { summary->setBinLabel(DXYBAD, "DXY mismatch", 1); summary->setBinLabel(PT2BAD, "P_{T} unconstrained mismatch", 1); } - int nbinsNum = 14; - if (isBmtf) { - nbinsNum += 2; - } - errorSummaryNum = ibooker.book1D("errorSummaryNum", (summaryTitle + trkAddrIgnoreText).c_str(), - nbinsNum, + numErrBins_, 1, - nbinsNum + 1); // range to match bin numbering + numErrBins_ + 1); // range to match bin numbering errorSummaryNum->setBinLabel(RBXRANGE, "BX range mismatch", 1); errorSummaryNum->setBinLabel(RNMUON, "muon collection size mismatch", 1); errorSummaryNum->setBinLabel(RMUON, "mismatching muons", 1); @@ -109,7 +106,7 @@ void L1TStage2RegionalMuonCandComp::bookHistograms(DQMStore::IBooker& ibooker, errorSummaryNum->setBinLabel(RPROC, "processor mismatch", 1); errorSummaryNum->setBinLabel(RTF, "track finder type mismatch", 1); errorSummaryNum->setBinLabel(RTRACKADDR, "track address mismatch", 1); - if (isBmtf) { + if (hasDisplacementInfo) { errorSummaryNum->setBinLabel(RDXY, "DXY mismatch", 1); errorSummaryNum->setBinLabel(RPT2, "P_{T} unconstrained mismatch", 1); } @@ -125,8 +122,8 @@ void L1TStage2RegionalMuonCandComp::bookHistograms(DQMStore::IBooker& ibooker, // This needs to come after the calls to setBinLabel. errorSummaryNum->getTH1F()->GetXaxis()->SetCanExtend(false); - errorSummaryDen = - ibooker.book1D("errorSummaryDen", "denominators", nbinsNum, 1, nbinsNum + 1); // range to match bin numbering + errorSummaryDen = ibooker.book1D( + "errorSummaryDen", "denominators", numErrBins_, 1, numErrBins_ + 1); // range to match bin numbering errorSummaryDen->setBinLabel(RBXRANGE, "# events", 1); errorSummaryDen->setBinLabel(RNMUON, "# muon collections", 1); for (int i = RMUON; i <= errorSummaryDen->getNbinsX(); ++i) { @@ -195,7 +192,7 @@ void L1TStage2RegionalMuonCandComp::bookHistograms(DQMStore::IBooker& ibooker, 15.5); muColl1TrkAddr->setAxisTitle("key", 1); muColl1TrkAddr->setAxisTitle("value", 2); - if (isBmtf) { + if (hasDisplacementInfo) { muColl1hwDXY = ibooker.book1D("muhwDXYColl1", (muonColl1Title + " HW DXY" + trkAddrIgnoreText).c_str(), 4, 0, 4); muColl1hwDXY->setAxisTitle("Hardware DXY", 1); muColl1hwPtUnconstrained = ibooker.book1D("muhwPtUnconstrainedColl1", @@ -266,7 +263,7 @@ void L1TStage2RegionalMuonCandComp::bookHistograms(DQMStore::IBooker& ibooker, 15.5); muColl2TrkAddr->setAxisTitle("key", 1); muColl2TrkAddr->setAxisTitle("value", 2); - if (isBmtf) { + if (hasDisplacementInfo) { muColl2hwDXY = ibooker.book1D("muhwDXYColl2", (muonColl2Title + " HW DXY" + trkAddrIgnoreText).c_str(), 4, 0, 4); muColl2hwDXY->setAxisTitle("Hardware DXY", 1); muColl2hwPtUnconstrained = ibooker.book1D("muhwPtUnconstrainedColl2", @@ -337,7 +334,7 @@ void L1TStage2RegionalMuonCandComp::analyze(const edm::Event& e, const edm::Even muColl1trackFinderType->Fill(muonIt1->trackFinderType()); muColl1hwHF->Fill(muonIt1->hwHF()); muColl1TrkAddrSize->Fill(muon1TrackAddr.size()); - if (isBmtf) { + if (hasDisplacementInfo) { muColl1hwDXY->Fill(muonIt1->hwDXY()); muColl1hwPtUnconstrained->Fill(muonIt1->hwPtUnconstrained()); } @@ -361,7 +358,7 @@ void L1TStage2RegionalMuonCandComp::analyze(const edm::Event& e, const edm::Even muColl2trackFinderType->Fill(muonIt2->trackFinderType()); muColl2hwHF->Fill(muonIt2->hwHF()); muColl2TrkAddrSize->Fill(muon2TrackAddr.size()); - if (isBmtf) { + if (hasDisplacementInfo) { muColl2hwDXY->Fill(muonIt2->hwDXY()); muColl2hwPtUnconstrained->Fill(muonIt2->hwPtUnconstrained()); } @@ -377,16 +374,7 @@ void L1TStage2RegionalMuonCandComp::analyze(const edm::Event& e, const edm::Even muonIt1 = muonBxColl1->begin(iBx); muonIt2 = muonBxColl2->begin(iBx); - //std::cout << "Analysing muons from BX " << iBx << std::endl; while (muonIt1 != muonBxColl1->end(iBx) && muonIt2 != muonBxColl2->end(iBx)) { - //std::cout << "Coll 1 muon: hwPt=" << muonIt1->hwPt() << ", hwEta=" << muonIt1->hwEta() << ", hwPhi=" << muonIt1->hwPhi() - // << ", hwSign=" << muonIt1->hwSign() << ", hwSignValid=" << muonIt1->hwSignValid() - // << ", hwQual=" << muonIt1->hwQual() << ", link=" << muonIt1->link() << ", processor=" << muonIt1->processor() - // << ", trackFinderType=" << muonIt1->trackFinderType() << std::endl; - //std::cout << "Coll 2 muon: hwPt=" << muonIt2->hwPt() << ", hwEta=" << muonIt2->hwEta() << ", hwPhi=" << muonIt2->hwPhi() - // << ", hwSign=" << muonIt2->hwSign() << ", hwSignValid=" << muonIt2->hwSignValid() - // << ", hwQual=" << muonIt2->hwQual() << ", link=" << muonIt2->link() << ", processor=" << muonIt2->processor() - // << ", trackFinderType=" << muonIt2->trackFinderType() << std::endl; summary->Fill(MUONALL); for (int i = RMUON; i <= errorSummaryDen->getNbinsX(); ++i) { errorSummaryDen->Fill(i); @@ -503,7 +491,7 @@ void L1TStage2RegionalMuonCandComp::analyze(const edm::Event& e, const edm::Even errorSummaryNum->Fill(RTRACKADDR); } - if (isBmtf) { + if (hasDisplacementInfo) { if (muonIt1->hwDXY() != muonIt2->hwDXY()) { muonMismatch = true; summary->Fill(DXYBAD); @@ -538,7 +526,7 @@ void L1TStage2RegionalMuonCandComp::analyze(const edm::Event& e, const edm::Even muColl1trackFinderType->Fill(muonIt1->trackFinderType()); muColl1hwHF->Fill(muonIt1->hwHF()); muColl1TrkAddrSize->Fill(muon1TrackAddr.size()); - if (isBmtf) { + if (hasDisplacementInfo) { muColl1hwDXY->Fill(muonIt1->hwDXY()); muColl1hwPtUnconstrained->Fill(muonIt1->hwPtUnconstrained()); } @@ -558,7 +546,7 @@ void L1TStage2RegionalMuonCandComp::analyze(const edm::Event& e, const edm::Even muColl2trackFinderType->Fill(muonIt2->trackFinderType()); muColl2hwHF->Fill(muonIt2->hwHF()); muColl2TrkAddrSize->Fill(muon2TrackAddr.size()); - if (isBmtf) { + if (hasDisplacementInfo) { muColl2hwDXY->Fill(muonIt2->hwDXY()); muColl2hwPtUnconstrained->Fill(muonIt2->hwPtUnconstrained()); } diff --git a/DQM/L1TMonitor/src/L1TStage2uGMT.cc b/DQM/L1TMonitor/src/L1TStage2uGMT.cc index 780cd9598e7d8..1996d092b82d0 100644 --- a/DQM/L1TMonitor/src/L1TStage2uGMT.cc +++ b/DQM/L1TMonitor/src/L1TStage2uGMT.cc @@ -176,6 +176,15 @@ void L1TStage2uGMT::bookHistograms(DQMStore::IBooker& ibooker, const edm::Run&, ugmtEMTFhwPt = ibooker.book1D("ugmtEMTFhwPt", "uGMT EMTF HW p_{T}", 512, -0.5, 511.5); ugmtEMTFhwPt->setAxisTitle("Hardware p_{T}", 1); + if (displacedQuantities_) { + ugmtEMTFhwPtUnconstrained = + ibooker.book1D("ugmtEMTFhwPtUnconstrained", "uGMT EMTF Input HW p_{T} unconstrained", 256, -0.5, 255.5); + ugmtEMTFhwPtUnconstrained->setAxisTitle("Hardware p_{T} unconstrained", 1); + + ugmtEMTFhwDXY = ibooker.book1D("ugmtEMTFhwDXY", "uGMT EMTF Input HW impact parameter", 4, -0.5, 3.5); + ugmtEMTFhwDXY->setAxisTitle("Hardware dXY", 1); + } + ugmtEMTFhwEta = ibooker.book1D("ugmtEMTFhwEta", "uGMT EMTF HW #eta", 461, -230.5, 230.5); ugmtEMTFhwEta->setAxisTitle("Hardware #eta", 1); @@ -790,6 +799,10 @@ void L1TStage2uGMT::analyze(const edm::Event& e, const edm::EventSetup& c) { ++EMTF) { ugmtEMTFBX->Fill(itBX); ugmtEMTFhwPt->Fill(EMTF->hwPt()); + if (displacedQuantities_) { + ugmtEMTFhwPtUnconstrained->Fill(EMTF->hwPtUnconstrained()); + ugmtEMTFhwDXY->Fill(EMTF->hwDXY()); + } ugmtEMTFhwEta->Fill(EMTF->hwEta()); ugmtEMTFhwSign->Fill(EMTF->hwSign()); ugmtEMTFhwSignValid->Fill(EMTF->hwSignValid()); diff --git a/DQM/L1TMonitor/src/L1TdeStage2uGT.cc b/DQM/L1TMonitor/src/L1TdeStage2uGT.cc index 5f7e2b28915d3..186d989552be4 100644 --- a/DQM/L1TMonitor/src/L1TdeStage2uGT.cc +++ b/DQM/L1TMonitor/src/L1TdeStage2uGT.cc @@ -146,7 +146,7 @@ void L1TdeStage2uGT::analyze(const edm::Event& event, const edm::EventSetup& es) if (it_data->getAlgoDecisionFinal(algoBit) != it_emul->getAlgoDecisionFinal(algoBit)) { bool unprescaled = true; // check the prescale factor - int prescale = -999; + double prescale = -999; bool dummy = gtUtil_.getPrescaleByBit(algoBit, prescale); if (not dummy) edm::LogWarning("L1TdeStage2uGT") << "Could not find prescale value for algobit: " << algoBit << std::endl; diff --git a/DQM/L1TMonitor/test/l1t_dqm_sourceclient-file_cfg.py b/DQM/L1TMonitor/test/l1t_dqm_sourceclient-file_cfg.py index dc950c94ebc9d..972e2a4ef756e 100644 --- a/DQM/L1TMonitor/test/l1t_dqm_sourceclient-file_cfg.py +++ b/DQM/L1TMonitor/test/l1t_dqm_sourceclient-file_cfg.py @@ -286,25 +286,19 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['l1tGt'] -process.MessageLogger.categories.append('L1TGT') -process.MessageLogger.destinations = ['L1TDQM_errors', - 'L1TDQM_warnings', - 'L1TDQM_info', - 'L1TDQM_debug' - ] - -process.MessageLogger.L1TDQM_errors = cms.untracked.PSet( + +process.MessageLogger.files.L1TDQM_errors = cms.untracked.PSet( threshold = cms.untracked.string('ERROR'), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1TDQM_warnings = cms.untracked.PSet( +process.MessageLogger.files.L1TDQM_warnings = cms.untracked.PSet( threshold = cms.untracked.string('WARNING'), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(0) ) ) -process.MessageLogger.L1TDQM_info = cms.untracked.PSet( +process.MessageLogger.files.L1TDQM_info = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -312,7 +306,7 @@ L1TGT = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1TDQM_debug = cms.untracked.PSet( +process.MessageLogger.files.L1TDQM_debug = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(0) ), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/DQM/MuonMonitor/plugins/BuildFile.xml b/DQM/MuonMonitor/plugins/BuildFile.xml index 73ab5d0ce1388..f481e976b5fdd 100644 --- a/DQM/MuonMonitor/plugins/BuildFile.xml +++ b/DQM/MuonMonitor/plugins/BuildFile.xml @@ -9,6 +9,5 @@ - diff --git a/DQM/Physics/interface/TopDQMHelpers.h b/DQM/Physics/interface/TopDQMHelpers.h index 6f4757b00b47a..a70ce7db9f6c6 100644 --- a/DQM/Physics/interface/TopDQMHelpers.h +++ b/DQM/Physics/interface/TopDQMHelpers.h @@ -12,6 +12,7 @@ #include #include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Framework/interface/EDConsumerBase.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/PatCandidates/interface/Muon.h" #include "DataFormats/PatCandidates/interface/Electron.h" diff --git a/DQM/Physics/src/EwkTauDQM.h b/DQM/Physics/src/EwkTauDQM.h index 3bbb4724e7f5e..2fb9a2ae271da 100644 --- a/DQM/Physics/src/EwkTauDQM.h +++ b/DQM/Physics/src/EwkTauDQM.h @@ -60,6 +60,7 @@ class EwkTauDQM : public DQMOneEDAnalyzer<> { #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/InputTag.h" #include diff --git a/DQM/Physics/src/TopDiLeptonOfflineDQM.cc b/DQM/Physics/src/TopDiLeptonOfflineDQM.cc index fa57726fbdad5..1e89d74a14912 100644 --- a/DQM/Physics/src/TopDiLeptonOfflineDQM.cc +++ b/DQM/Physics/src/TopDiLeptonOfflineDQM.cc @@ -10,6 +10,7 @@ #include "DataFormats/JetReco/interface/PFJet.h" #include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Framework/interface/EDConsumerBase.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/EDGetToken.h" namespace TopDiLeptonOffline { diff --git a/DQM/Physics/test/PFJet_topDQM_production_cfg.py b/DQM/Physics/test/PFJet_topDQM_production_cfg.py index e750e0a8ab0b4..06fbcaab3b774 100644 --- a/DQM/Physics/test/PFJet_topDQM_production_cfg.py +++ b/DQM/Physics/test/PFJet_topDQM_production_cfg.py @@ -116,11 +116,8 @@ ## configure message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('TopSingleLeptonDQM' ) process.MessageLogger.cerr.TopSingleLeptonDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) -process.MessageLogger.categories.append('SingleTopTChannelLeptonDQM' ) process.MessageLogger.cerr.SingleTopTChannelLeptonDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) -process.MessageLogger.categories.append('TopDiLeptonOfflineDQM') process.MessageLogger.cerr.TopDiLeptonOfflineDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) process.MessageLogger.cerr.FwkReport.reportEvery = 1 diff --git a/DQM/Physics/test/topDQM_cfg.py b/DQM/Physics/test/topDQM_cfg.py index 0c339cf61b209..34949a210ba90 100644 --- a/DQM/Physics/test/topDQM_cfg.py +++ b/DQM/Physics/test/topDQM_cfg.py @@ -44,9 +44,6 @@ ## configure message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('TopSingleLeptonDQM' ) -process.MessageLogger.cerr.TopSingleLeptonDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) -process.MessageLogger.categories.append('TopDiLeptonOfflineDQM') process.MessageLogger.cerr.TopDiLeptonOfflineDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) ## check the event content diff --git a/DQM/Physics/test/topDQM_production_PU_cfg.py b/DQM/Physics/test/topDQM_production_PU_cfg.py index fc985b3a71598..6f66b5cc00888 100644 --- a/DQM/Physics/test/topDQM_production_PU_cfg.py +++ b/DQM/Physics/test/topDQM_production_PU_cfg.py @@ -98,9 +98,9 @@ ## configure message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -#process.MessageLogger.categories.append('TopSingleLeptonDQM' ) +# #process.MessageLogger.cerr.TopSingleLeptonDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) -#process.MessageLogger.categories.append('TopDiLeptonOfflineDQM') +# #process.MessageLogger.cerr.TopDiLeptonOfflineDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) process.MessageLogger.cerr.FwkReport.reportEvery = 1000 @@ -208,9 +208,7 @@ ## configure message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('TopSingleLeptonDQM' ) process.MessageLogger.cerr.TopSingleLeptonDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) -process.MessageLogger.categories.append('TopDiLeptonOfflineDQM') process.MessageLogger.cerr.TopDiLeptonOfflineDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) diff --git a/DQM/Physics/test/topDQM_production_cfg.py b/DQM/Physics/test/topDQM_production_cfg.py index 79977c27762d1..8c45904a47945 100644 --- a/DQM/Physics/test/topDQM_production_cfg.py +++ b/DQM/Physics/test/topDQM_production_cfg.py @@ -61,11 +61,8 @@ ## configure message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('TopSingleLeptonDQM' ) process.MessageLogger.cerr.TopSingleLeptonDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) -process.MessageLogger.categories.append('TopDiLeptonOfflineDQM') process.MessageLogger.cerr.TopDiLeptonOfflineDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) -process.MessageLogger.categories.append('SingleTopTChannelLeptonDQM' ) process.MessageLogger.cerr.SingleTopTChannelLeptonDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) process.MessageLogger.cerr.FwkReport.reportEvery = 100 process.MEtoEDMConverter.deleteAfterCopy = cms.untracked.bool(False) ## line added to avoid crash when changing run number diff --git a/DQM/Physics/test/topDQM_production_miniAOD.py b/DQM/Physics/test/topDQM_production_miniAOD.py index 18e0621e140d0..d59793cacef0d 100644 --- a/DQM/Physics/test/topDQM_production_miniAOD.py +++ b/DQM/Physics/test/topDQM_production_miniAOD.py @@ -54,11 +54,8 @@ ## configure message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('TopSingleLeptonDQM' ) process.MessageLogger.cerr.TopSingleLeptonDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) -process.MessageLogger.categories.append('TopDiLeptonOfflineDQM') process.MessageLogger.cerr.TopDiLeptonOfflineDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) -process.MessageLogger.categories.append('SingleTopTChannelLeptonDQM' ) process.MessageLogger.cerr.SingleTopTChannelLeptonDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) process.MessageLogger.cerr.FwkReport.reportEvery = 100 diff --git a/DQM/RPCMonitorClient/interface/RPCDCSSummary.h b/DQM/RPCMonitorClient/interface/RPCDCSSummary.h index 63453f1a4c620..67450efcb81de 100644 --- a/DQM/RPCMonitorClient/interface/RPCDCSSummary.h +++ b/DQM/RPCMonitorClient/interface/RPCDCSSummary.h @@ -34,8 +34,10 @@ class RPCDCSSummary : public DQMEDHarvester { MonitorElement *DCSMap_; MonitorElement *totalDCSFraction; - MonitorElement *dcsWheelFractions[5]; - MonitorElement *dcsDiskFractions[10]; + constexpr static int kNWheels = 5; + MonitorElement *dcsWheelFractions[kNWheels]; + constexpr static int kNDisks = 10; + MonitorElement *dcsDiskFractions[kNDisks]; std::pair FEDRange_; int numberOfDisks_; int NumberOfFeds_; diff --git a/DQM/RPCMonitorClient/interface/RPCDaqInfo.h b/DQM/RPCMonitorClient/interface/RPCDaqInfo.h index 894fdbd9c01cf..01570b456838c 100644 --- a/DQM/RPCMonitorClient/interface/RPCDaqInfo.h +++ b/DQM/RPCMonitorClient/interface/RPCDaqInfo.h @@ -29,8 +29,10 @@ class RPCDaqInfo : public DQMEDHarvester { MonitorElement *DaqFraction_; MonitorElement *DaqMap_; - MonitorElement *daqWheelFractions[5]; - MonitorElement *daqDiskFractions[10]; + constexpr static int kNWheels = 5; + MonitorElement *daqWheelFractions[kNWheels]; + constexpr static int kNDisks = 10; + MonitorElement *daqDiskFractions[kNDisks]; std::pair FEDRange_; diff --git a/DQM/RPCMonitorClient/interface/RPCDataCertification.h b/DQM/RPCMonitorClient/interface/RPCDataCertification.h index 78909225e7f18..931da1c79f09e 100644 --- a/DQM/RPCMonitorClient/interface/RPCDataCertification.h +++ b/DQM/RPCMonitorClient/interface/RPCDataCertification.h @@ -27,8 +27,10 @@ class RPCDataCertification : public DQMEDHarvester { MonitorElement* CertMap_; MonitorElement* totalCertFraction; - MonitorElement* certWheelFractions[5]; - MonitorElement* certDiskFractions[10]; + constexpr static int kNWheels = 5; + MonitorElement* certWheelFractions[kNWheels]; + constexpr static int kNDisks = 10; + MonitorElement* certDiskFractions[kNDisks]; std::pair FEDRange_; int numberOfDisks_; int NumberOfFeds_; diff --git a/DQM/RPCMonitorClient/interface/RPCDcsInfoClient.h b/DQM/RPCMonitorClient/interface/RPCDcsInfoClient.h index 445cb18ddb917..566bc23df85d3 100644 --- a/DQM/RPCMonitorClient/interface/RPCDcsInfoClient.h +++ b/DQM/RPCMonitorClient/interface/RPCDcsInfoClient.h @@ -8,18 +8,15 @@ class RPCDcsInfoClient : public DQMEDHarvester { public: RPCDcsInfoClient(const edm::ParameterSet &ps); - ~RPCDcsInfoClient() override; + ~RPCDcsInfoClient() override = default; protected: - void beginJob() override; void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override; //performed in the endJob private: - std::string dcsinfofolder_; - std::string eventinfofolder_; - std::string dqmprovinfofolder_; - - std::vector DCS; + const std::string dcsinfofolder_; + const std::string eventinfofolder_; + const std::string dqmprovinfofolder_; }; #endif diff --git a/DQM/RPCMonitorClient/python/RPCDcsInfoClient_cfi.py b/DQM/RPCMonitorClient/python/RPCDcsInfoClient_cfi.py index de40a5053e93a..042f77434bec2 100644 --- a/DQM/RPCMonitorClient/python/RPCDcsInfoClient_cfi.py +++ b/DQM/RPCMonitorClient/python/RPCDcsInfoClient_cfi.py @@ -3,6 +3,5 @@ rpcDcsInfoClient = DQMEDHarvester("RPCDcsInfoClient", dcsInfoFolder = cms.untracked.string("RPC/DCSInfo"), - eventInfoFolder = cms.untracked.string("RPC/EventInfo"), dqmProvInfoFolder = cms.untracked.string("Info/EventInfo") ) diff --git a/DQM/RPCMonitorClient/src/RPCDCSSummary.cc b/DQM/RPCMonitorClient/src/RPCDCSSummary.cc index ab917aa24ac15..a329e21aeff3c 100644 --- a/DQM/RPCMonitorClient/src/RPCDCSSummary.cc +++ b/DQM/RPCMonitorClient/src/RPCDCSSummary.cc @@ -126,7 +126,7 @@ void RPCDCSSummary::myBooker(DQMStore::IBooker& ibooker) { limit = 2; for (int i = -1 * limit; i <= limit; i++) { //loop on wheels and disks - if (i > -3 && i < 3) { //wheels + if (i > -3 && i < kNWheels - 2) { //wheels std::stringstream streams; streams << "RPC_Wheel" << i; dcsWheelFractions[i + 2] = ibooker.bookFloat(streams.str()); @@ -140,8 +140,10 @@ void RPCDCSSummary::myBooker(DQMStore::IBooker& ibooker) { if (i > 0) offset--; //used to skip case equale to zero std::stringstream streams; - streams << "RPC_Disk" << i; - dcsDiskFractions[i + 2] = ibooker.bookFloat(streams.str()); - dcsDiskFractions[i + 2]->Fill(defaultValue_); + if (i > -3 && i < kNDisks - 2) { + streams << "RPC_Disk" << i; + dcsDiskFractions[i + 2] = ibooker.bookFloat(streams.str()); + dcsDiskFractions[i + 2]->Fill(defaultValue_); + } } } diff --git a/DQM/RPCMonitorClient/src/RPCDaqInfo.cc b/DQM/RPCMonitorClient/src/RPCDaqInfo.cc index eb5e81b8791c6..41838ddaeb8ac 100644 --- a/DQM/RPCMonitorClient/src/RPCDaqInfo.cc +++ b/DQM/RPCMonitorClient/src/RPCDaqInfo.cc @@ -67,7 +67,7 @@ void RPCDaqInfo::myBooker(DQMStore::IBooker& ibooker) { limit = 2; for (int i = -1 * limit; i <= limit; i++) { //loop on wheels and disks - if (i > -3 && i < 3) { //wheels + if (i > -3 && i < kNWheels - 2) { //wheels std::stringstream streams; streams << "RPC_Wheel" << i; daqWheelFractions[i + 2] = ibooker.bookFloat(streams.str()); @@ -81,10 +81,12 @@ void RPCDaqInfo::myBooker(DQMStore::IBooker& ibooker) { if (i > 0) offset--; //used to skip case equale to zero - std::stringstream streams; - streams << "RPC_Disk" << i; - daqDiskFractions[i + 2] = ibooker.bookFloat(streams.str()); - daqDiskFractions[i + 2]->Fill(-1); + if (i > -3 && i < kNDisks - 2) { + std::stringstream streams; + streams << "RPC_Disk" << i; + daqDiskFractions[i + 2] = ibooker.bookFloat(streams.str()); + daqDiskFractions[i + 2]->Fill(-1); + } } //daq summary for RPCs diff --git a/DQM/RPCMonitorClient/src/RPCDataCertification.cc b/DQM/RPCMonitorClient/src/RPCDataCertification.cc index c0d90e89aa87a..db8f35b29212b 100644 --- a/DQM/RPCMonitorClient/src/RPCDataCertification.cc +++ b/DQM/RPCMonitorClient/src/RPCDataCertification.cc @@ -125,7 +125,7 @@ void RPCDataCertification::myBooker(DQMStore::IBooker& ibooker) { limit = 2; for (int i = -1 * limit; i <= limit; i++) { //loop on wheels and disks - if (i > -3 && i < 3) { //wheels + if (i > -3 && i < kNWheels - 2) { //wheels std::stringstream streams; streams << "RPC_Wheel" << i; certWheelFractions[i + 2] = ibooker.bookFloat(streams.str()); @@ -138,9 +138,11 @@ void RPCDataCertification::myBooker(DQMStore::IBooker& ibooker) { int offset = numberOfDisks_; if (i > 0) offset--; //used to skip case equale to zero - std::stringstream streams; - streams << "RPC_Disk" << i; - certDiskFractions[i + 2] = ibooker.bookFloat(streams.str()); - certDiskFractions[i + 2]->Fill(defaultValue_); + if (i > -3 && i < kNDisks - 2) { + std::stringstream streams; + streams << "RPC_Disk" << i; + certDiskFractions[i + 2] = ibooker.bookFloat(streams.str()); + certDiskFractions[i + 2]->Fill(defaultValue_); + } } } diff --git a/DQM/RPCMonitorClient/src/RPCDcsInfoClient.cc b/DQM/RPCMonitorClient/src/RPCDcsInfoClient.cc index 979626ae38ff9..ed782d6bb4ab4 100644 --- a/DQM/RPCMonitorClient/src/RPCDcsInfoClient.cc +++ b/DQM/RPCMonitorClient/src/RPCDcsInfoClient.cc @@ -1,72 +1,67 @@ #include "DQM/RPCMonitorClient/interface/RPCDcsInfoClient.h" #include "FWCore/Framework/interface/LuminosityBlock.h" -RPCDcsInfoClient::RPCDcsInfoClient(const edm::ParameterSet& ps) { - dcsinfofolder_ = ps.getUntrackedParameter("dcsInfoFolder", "RPC/DCSInfo"); - eventinfofolder_ = ps.getUntrackedParameter("eventInfoFolder", "RPC/EventInfo"); - dqmprovinfofolder_ = ps.getUntrackedParameter("dqmProvInfoFolder", "Info/EventInfo"); - - DCS.clear(); - DCS.resize(10); // start with 10 LS, resize later -} - -RPCDcsInfoClient::~RPCDcsInfoClient() {} - -void RPCDcsInfoClient::beginJob() {} +RPCDcsInfoClient::RPCDcsInfoClient(const edm::ParameterSet& ps) + : dcsinfofolder_(ps.getUntrackedParameter("dcsInfoFolder", "RPC/DCSInfo")), + eventinfofolder_(ps.getUntrackedParameter("eventInfoFolder", "RPC/EventInfo")), + dqmprovinfofolder_(ps.getUntrackedParameter("dqmProvInfoFolder", "Info/EventInfo")) {} void RPCDcsInfoClient::dqmEndJob(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) { // book ibooker.cd(); ibooker.setCurrentFolder(dcsinfofolder_); - unsigned int nlsmax = DCS.size(); - MonitorElement* reportSummaryMap_ = igetter.get(dqmprovinfofolder_ + "/reportSummaryMap"); - MonitorElement* lumiNumber_ = igetter.get(eventinfofolder_ + "/iLumiSection"); + MonitorElement* reportSummaryMap = igetter.get(dqmprovinfofolder_ + "/reportSummaryMap"); + MonitorElement* eventInfoLumi = igetter.get(eventinfofolder_ + "/iLumiSection"); - if (!reportSummaryMap_) + if (!reportSummaryMap) return; - if (TH2F* h2 = reportSummaryMap_->getTH2F()) { - nlsmax = lumiNumber_->getIntValue(); - int hvStatus = 0; - const char* label_name = "RPC"; - unsigned int rpc_num = 0; - if (nlsmax > DCS.size()) - DCS.resize(nlsmax); - - for (int ybin = 0; ybin < h2->GetNbinsY(); ++ybin) { - if (strcmp(h2->GetYaxis()->GetBinLabel(ybin + 1), label_name) == 0) - rpc_num = ybin + 1; - } + TH2F* h2 = reportSummaryMap->getTH2F(); + if (!h2) + return; + const int maxLS = reportSummaryMap->getNbinsX(); - for (unsigned int nlumi = 0; nlumi < nlsmax; ++nlumi) { - int rpc_dcsbit = h2->GetBinContent(nlumi + 1, rpc_num); - if (rpc_dcsbit != -1) { - hvStatus = 1; // set to 1 because HV was on (!) - } else { - hvStatus = 0; // set to 0 because HV was off (!) - } - DCS[nlumi] = hvStatus; + int nLS = eventInfoLumi->getIntValue(); + if (nLS <= 0 or nLS > maxLS) { + // If the nLS from the event info is not valid, we take the value from the + // reportSummaryMap. The histogram is initialized with -1 value then filled + // with non-negative value for valid LSs. + // Note that we start from the first bin, since many runs have small nLS. + for (nLS = 1; nLS <= maxLS; ++nLS) { + const double dcsBit = h2->GetBinContent(nLS, 1); + if (dcsBit == -1) + break; } } - std::string meName = dcsinfofolder_ + "/rpcHVStatus"; - unsigned int dcssize = DCS.size(); - MonitorElement* rpcHVStatus = ibooker.book2D("rpcHVStatus", "RPC HV Status", dcssize, 1., dcssize + 1, 1, 0.5, 1.5); + MonitorElement* rpcHVStatus = ibooker.book2D("rpcHVStatus", "RPC HV Status", nLS, 1., nLS + 1, 1, 0.5, 1.5); rpcHVStatus->setAxisTitle("Luminosity Section", 1); rpcHVStatus->setBinLabel(1, "", 2); - int lsCounter = 0; - // fill - for (unsigned int i = 0; i < nlsmax; i++) { - rpcHVStatus->setBinContent(i + 1, 1, DCS[i]); - lsCounter += DCS[i]; + // Find bin number of RPC from the EventInfo's reportSummaryMap + int binRPC = 0; + for (int i = 1, nbinsY = reportSummaryMap->getNbinsY(); i <= nbinsY; ++i) { + const std::string binLabel = h2->GetYaxis()->GetBinLabel(i); + if (binLabel == "RPC") { + binRPC = i; + break; + } } + if (binRPC == 0) + return; - meName = dcsinfofolder_ + "/rpcHV"; - MonitorElement* rpcHV = ibooker.bookInt("rpcHV"); - - rpcHV->Fill(lsCounter); + // Take bin contents from the reportSummaryMap and fill into the RPC DCSInfo + int nLSRPC = 0; + for (int i = 1; i <= nLS; ++i) { + const double dcsBit = h2->GetBinContent(i, binRPC); + const int hvStatus = (dcsBit != -1) ? 1 : 0; + if (hvStatus != 0) { + ++nLSRPC; + rpcHVStatus->setBinContent(i, 1, hvStatus); + } + } - return; + MonitorElement* rpcHV = ibooker.bookInt("rpcHV"); + rpcHV->Fill(nLSRPC); } diff --git a/DQM/SiOuterTracker/plugins/BuildFile.xml b/DQM/SiOuterTracker/plugins/BuildFile.xml index bc7692bcf370e..01697f5c77605 100644 --- a/DQM/SiOuterTracker/plugins/BuildFile.xml +++ b/DQM/SiOuterTracker/plugins/BuildFile.xml @@ -3,7 +3,5 @@ - - diff --git a/DQM/SiOuterTracker/plugins/OuterTrackerMonitorTTCluster.cc b/DQM/SiOuterTracker/plugins/OuterTrackerMonitorTTCluster.cc index 754541db709b1..5621559e02dca 100644 --- a/DQM/SiOuterTracker/plugins/OuterTrackerMonitorTTCluster.cc +++ b/DQM/SiOuterTracker/plugins/OuterTrackerMonitorTTCluster.cc @@ -17,33 +17,34 @@ // // system include files -#include -#include #include #include #include // user include files +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/Utilities/interface/EDGetToken.h" + +#include "DataFormats/Common/interface/DetSetVectorNew.h" #include "DataFormats/L1TrackTrigger/interface/TTCluster.h" +#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" #include "DataFormats/SiStripDetId/interface/StripSubdetector.h" #include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/ServiceRegistry/interface/Service.h" + #include "Geometry/CommonDetUnit/interface/GeomDet.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" + #include "DQMServices/Core/interface/DQMEDAnalyzer.h" #include "DQMServices/Core/interface/DQMStore.h" -#include "DataFormats/Common/interface/DetSetVectorNew.h" -#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/EDGetToken.h" class OuterTrackerMonitorTTCluster : public DQMEDAnalyzer { public: @@ -51,7 +52,7 @@ class OuterTrackerMonitorTTCluster : public DQMEDAnalyzer { ~OuterTrackerMonitorTTCluster() override; void analyze(const edm::Event &, const edm::EventSetup &) override; void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override; - + void dqmBeginRun(const edm::Run &iRun, const edm::EventSetup &iSetup) override; // TTCluster stacks MonitorElement *Cluster_IMem_Barrel = nullptr; MonitorElement *Cluster_IMem_Endcap_Disc = nullptr; @@ -77,12 +78,19 @@ class OuterTrackerMonitorTTCluster : public DQMEDAnalyzer { edm::ParameterSet conf_; edm::EDGetTokenT>> tagTTClustersToken_; std::string topFolderName_; + const edm::ESGetToken geomToken_; + const edm::ESGetToken topoToken_; + const TrackerGeometry *tkGeom_ = nullptr; + const TrackerTopology *tTopo_ = nullptr; }; // // constructors and destructor // -OuterTrackerMonitorTTCluster::OuterTrackerMonitorTTCluster(const edm::ParameterSet &iConfig) : conf_(iConfig) { +OuterTrackerMonitorTTCluster::OuterTrackerMonitorTTCluster(const edm::ParameterSet &iConfig) + : conf_(iConfig), + geomToken_(esConsumes()), + topoToken_(esConsumes()) { topFolderName_ = conf_.getParameter("TopFolderName"); tagTTClustersToken_ = consumes>>( conf_.getParameter("TTClusters")); @@ -96,6 +104,10 @@ OuterTrackerMonitorTTCluster::~OuterTrackerMonitorTTCluster() { // // member functions // +void OuterTrackerMonitorTTCluster::dqmBeginRun(const edm::Run &iRun, const edm::EventSetup &iSetup) { + tkGeom_ = &(iSetup.getData(geomToken_)); + tTopo_ = &(iSetup.getData(topoToken_)); +} // ------------ method called for each event ------------ void OuterTrackerMonitorTTCluster::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { @@ -103,17 +115,6 @@ void OuterTrackerMonitorTTCluster::analyze(const edm::Event &iEvent, const edm:: edm::Handle>> Phase2TrackerDigiTTClusterHandle; iEvent.getByToken(tagTTClustersToken_, Phase2TrackerDigiTTClusterHandle); - /// Geometry - edm::ESHandle tTopoHandle; - const TrackerTopology *tTopo; - iSetup.get().get(tTopoHandle); - tTopo = tTopoHandle.product(); - - edm::ESHandle tGeometryHandle; - const TrackerGeometry *theTrackerGeometry; - iSetup.get().get(tGeometryHandle); - theTrackerGeometry = tGeometryHandle.product(); - /// Loop over the input Clusters typename edmNew::DetSetVector>::const_iterator inputIter; typename edmNew::DetSet>::const_iterator contentIter; @@ -129,12 +130,12 @@ void OuterTrackerMonitorTTCluster::analyze(const edm::Event &iEvent, const edm:: edm::Ref>, TTCluster> tempCluRef = edmNew::makeRefTo(Phase2TrackerDigiTTClusterHandle, contentIter); - DetId detIdClu = theTrackerGeometry->idToDet(tempCluRef->getDetId())->geographicalId(); + DetId detIdClu = tkGeom_->idToDet(tempCluRef->getDetId())->geographicalId(); unsigned int memberClu = tempCluRef->getStackMember(); unsigned int widClu = tempCluRef->findWidth(); MeasurementPoint mp = tempCluRef->findAverageLocalCoordinates(); - const GeomDet *theGeomDet = theTrackerGeometry->idToDet(detIdClu); + const GeomDet *theGeomDet = tkGeom_->idToDet(detIdClu); Global3DPoint posClu = theGeomDet->surface().toGlobal(theGeomDet->topology().localPosition(mp)); double r = posClu.perp(); @@ -149,9 +150,9 @@ void OuterTrackerMonitorTTCluster::analyze(const edm::Event &iEvent, const edm:: if (detIdClu.subdetId() == static_cast(StripSubdetector::TOB)) // Phase 2 Outer Tracker Barrel { if (memberClu == 0) - Cluster_IMem_Barrel->Fill(tTopo->layer(detIdClu)); + Cluster_IMem_Barrel->Fill(tTopo_->layer(detIdClu)); else - Cluster_OMem_Barrel->Fill(tTopo->layer(detIdClu)); + Cluster_OMem_Barrel->Fill(tTopo_->layer(detIdClu)); Cluster_Barrel_XY->Fill(posClu.x(), posClu.y()); @@ -159,25 +160,25 @@ void OuterTrackerMonitorTTCluster::analyze(const edm::Event &iEvent, const edm:: else if (detIdClu.subdetId() == static_cast(StripSubdetector::TID)) // Phase 2 Outer Tracker Endcap { if (memberClu == 0) { - Cluster_IMem_Endcap_Disc->Fill(tTopo->layer(detIdClu)); // returns wheel - Cluster_IMem_Endcap_Ring->Fill(tTopo->tidRing(detIdClu)); + Cluster_IMem_Endcap_Disc->Fill(tTopo_->layer(detIdClu)); // returns wheel + Cluster_IMem_Endcap_Ring->Fill(tTopo_->tidRing(detIdClu)); } else { - Cluster_OMem_Endcap_Disc->Fill(tTopo->layer(detIdClu)); // returns wheel - Cluster_OMem_Endcap_Ring->Fill(tTopo->tidRing(detIdClu)); + Cluster_OMem_Endcap_Disc->Fill(tTopo_->layer(detIdClu)); // returns wheel + Cluster_OMem_Endcap_Ring->Fill(tTopo_->tidRing(detIdClu)); } if (posClu.z() > 0) { Cluster_Endcap_Fw_XY->Fill(posClu.x(), posClu.y()); if (memberClu == 0) - Cluster_IMem_Endcap_Ring_Fw[tTopo->layer(detIdClu) - 1]->Fill(tTopo->tidRing(detIdClu)); + Cluster_IMem_Endcap_Ring_Fw[tTopo_->layer(detIdClu) - 1]->Fill(tTopo_->tidRing(detIdClu)); else - Cluster_OMem_Endcap_Ring_Fw[tTopo->layer(detIdClu) - 1]->Fill(tTopo->tidRing(detIdClu)); + Cluster_OMem_Endcap_Ring_Fw[tTopo_->layer(detIdClu) - 1]->Fill(tTopo_->tidRing(detIdClu)); } else { Cluster_Endcap_Bw_XY->Fill(posClu.x(), posClu.y()); if (memberClu == 0) - Cluster_IMem_Endcap_Ring_Bw[tTopo->layer(detIdClu) - 1]->Fill(tTopo->tidRing(detIdClu)); + Cluster_IMem_Endcap_Ring_Bw[tTopo_->layer(detIdClu) - 1]->Fill(tTopo_->tidRing(detIdClu)); else - Cluster_OMem_Endcap_Ring_Bw[tTopo->layer(detIdClu) - 1]->Fill(tTopo->tidRing(detIdClu)); + Cluster_OMem_Endcap_Ring_Bw[tTopo_->layer(detIdClu) - 1]->Fill(tTopo_->tidRing(detIdClu)); } } // end if isEndcap diff --git a/DQM/SiOuterTracker/plugins/OuterTrackerMonitorTTStub.cc b/DQM/SiOuterTracker/plugins/OuterTrackerMonitorTTStub.cc index 5fc437528f311..dc79940c7f97f 100644 --- a/DQM/SiOuterTracker/plugins/OuterTrackerMonitorTTStub.cc +++ b/DQM/SiOuterTracker/plugins/OuterTrackerMonitorTTStub.cc @@ -18,33 +18,34 @@ // // system include files -#include -#include #include #include #include // user include files +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/Utilities/interface/EDGetToken.h" + +#include "DataFormats/Common/interface/DetSetVectorNew.h" +#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" #include "DataFormats/L1TrackTrigger/interface/TTStub.h" #include "DataFormats/SiStripDetId/interface/StripSubdetector.h" #include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/ServiceRegistry/interface/Service.h" + #include "Geometry/CommonDetUnit/interface/GeomDet.h" #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" + #include "DQMServices/Core/interface/DQMEDAnalyzer.h" #include "DQMServices/Core/interface/DQMStore.h" -#include "DataFormats/Common/interface/DetSetVectorNew.h" -#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/EDGetToken.h" class OuterTrackerMonitorTTStub : public DQMEDAnalyzer { public: @@ -52,6 +53,7 @@ class OuterTrackerMonitorTTStub : public DQMEDAnalyzer { ~OuterTrackerMonitorTTStub() override; void analyze(const edm::Event &, const edm::EventSetup &) override; void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override; + void dqmBeginRun(const edm::Run &iRun, const edm::EventSetup &iSetup) override; // TTStub stacks // Global position of the stubs @@ -70,14 +72,12 @@ class OuterTrackerMonitorTTStub : public DQMEDAnalyzer { MonitorElement *Stub_Endcap_Ring_Bw[5] = {nullptr, nullptr, nullptr, nullptr, nullptr}; // TTStub per EC ring // Stub distribution - MonitorElement *Stub_Eta = nullptr; // TTstub eta distribution - MonitorElement *Stub_Phi = nullptr; // TTstub phi distribution - MonitorElement *Stub_R = nullptr; // TTstub r distribution - MonitorElement *Stub_bendFE = nullptr; // TTstub trigger bend - MonitorElement *Stub_bendBE = nullptr; // TTstub hardware bend - MonitorElement *Stub_rawBend = nullptr; // TTstub raw bend - MonitorElement *Stub_bendOffset = nullptr; // TTstub bend offset - MonitorElement *Stub_isPS = nullptr; // is this stub a PS module? + MonitorElement *Stub_Eta = nullptr; // TTstub eta distribution + MonitorElement *Stub_Phi = nullptr; // TTstub phi distribution + MonitorElement *Stub_R = nullptr; // TTstub r distribution + MonitorElement *Stub_bendFE = nullptr; // TTstub trigger bend + MonitorElement *Stub_bendBE = nullptr; // TTstub hardware bend + MonitorElement *Stub_isPS = nullptr; // is this stub a PS module? // STUB Displacement - offset MonitorElement *Stub_Barrel_W = nullptr; // TTstub Pos-Corr Displacement (layer) @@ -97,10 +97,17 @@ class OuterTrackerMonitorTTStub : public DQMEDAnalyzer { edm::ParameterSet conf_; edm::EDGetTokenT>> tagTTStubsToken_; std::string topFolderName_; + const edm::ESGetToken geomToken_; + const edm::ESGetToken topoToken_; + const TrackerGeometry *tkGeom_ = nullptr; + const TrackerTopology *tTopo_ = nullptr; }; // constructors and destructor -OuterTrackerMonitorTTStub::OuterTrackerMonitorTTStub(const edm::ParameterSet &iConfig) : conf_(iConfig) { +OuterTrackerMonitorTTStub::OuterTrackerMonitorTTStub(const edm::ParameterSet &iConfig) + : conf_(iConfig), + geomToken_(esConsumes()), + topoToken_(esConsumes()) { // now do what ever initialization is needed topFolderName_ = conf_.getParameter("TopFolderName"); tagTTStubsToken_ = @@ -112,6 +119,10 @@ OuterTrackerMonitorTTStub::~OuterTrackerMonitorTTStub() { // (e.g. close files, deallocate resources etc.) } +void OuterTrackerMonitorTTStub::dqmBeginRun(const edm::Run &iRun, const edm::EventSetup &iSetup) { + tkGeom_ = &(iSetup.getData(geomToken_)); + tTopo_ = &(iSetup.getData(topoToken_)); +} // member functions // ------------ method called for each event ------------ @@ -120,17 +131,6 @@ void OuterTrackerMonitorTTStub::analyze(const edm::Event &iEvent, const edm::Eve edm::Handle>> Phase2TrackerDigiTTStubHandle; iEvent.getByToken(tagTTStubsToken_, Phase2TrackerDigiTTStubHandle); - /// Geometry - edm::ESHandle tTopoHandle; - const TrackerTopology *tTopo; - iSetup.get().get(tTopoHandle); - tTopo = tTopoHandle.product(); - - edm::ESHandle tGeometryHandle; - const TrackerGeometry *theTrackerGeometry; - iSetup.get().get(tGeometryHandle); - theTrackerGeometry = tGeometryHandle.product(); - /// Loop over input Stubs typename edmNew::DetSetVector>::const_iterator inputIter; typename edmNew::DetSet>::const_iterator contentIter; @@ -147,7 +147,7 @@ void OuterTrackerMonitorTTStub::analyze(const edm::Event &iEvent, const edm::Eve /// Get det ID (place of the stub) // tempStubRef->getDetId() gives the stackDetId, not rawId - DetId detIdStub = theTrackerGeometry->idToDet((tempStubRef->clusterRef(0))->getDetId())->geographicalId(); + DetId detIdStub = tkGeom_->idToDet((tempStubRef->clusterRef(0))->getDetId())->geographicalId(); /// Get trigger displacement/offset double rawBend = tempStubRef->rawBend(); @@ -155,7 +155,7 @@ void OuterTrackerMonitorTTStub::analyze(const edm::Event &iEvent, const edm::Eve /// Define position stub by position inner cluster MeasurementPoint mp = (tempStubRef->clusterRef(0))->findAverageLocalCoordinates(); - const GeomDet *theGeomDet = theTrackerGeometry->idToDet(detIdStub); + const GeomDet *theGeomDet = tkGeom_->idToDet(detIdStub); Global3DPoint posStub = theGeomDet->surface().toGlobal(theGeomDet->topology().localPosition(mp)); Stub_Eta->Fill(posStub.eta()); @@ -164,18 +164,16 @@ void OuterTrackerMonitorTTStub::analyze(const edm::Event &iEvent, const edm::Eve Stub_RZ->Fill(posStub.z(), posStub.perp()); Stub_bendFE->Fill(tempStubRef->bendFE()); Stub_bendBE->Fill(tempStubRef->bendBE()); - Stub_rawBend->Fill(rawBend); - Stub_bendOffset->Fill(bendOffset); Stub_isPS->Fill(tempStubRef->moduleTypePS()); if (detIdStub.subdetId() == static_cast(StripSubdetector::TOB)) { // Phase 2 Outer Tracker Barrel - Stub_Barrel->Fill(tTopo->layer(detIdStub)); + Stub_Barrel->Fill(tTopo_->layer(detIdStub)); Stub_Barrel_XY->Fill(posStub.x(), posStub.y()); - Stub_Barrel_W->Fill(tTopo->layer(detIdStub), rawBend - bendOffset); - Stub_Barrel_O->Fill(tTopo->layer(detIdStub), bendOffset); + Stub_Barrel_W->Fill(tTopo_->layer(detIdStub), rawBend - bendOffset); + Stub_Barrel_O->Fill(tTopo_->layer(detIdStub), bendOffset); } else if (detIdStub.subdetId() == static_cast(StripSubdetector::TID)) { // Phase 2 Outer Tracker Endcap - int disc = tTopo->layer(detIdStub); // returns wheel - int ring = tTopo->tidRing(detIdStub); + int disc = tTopo_->layer(detIdStub); // returns wheel + int ring = tTopo_->tidRing(detIdStub); Stub_Endcap_Disc->Fill(disc); Stub_Endcap_Ring->Fill(ring); Stub_Endcap_Disc_W->Fill(disc, rawBend - bendOffset); @@ -317,26 +315,6 @@ void OuterTrackerMonitorTTStub::bookHistograms(DQMStore::IBooker &iBooker, Stub_bendBE->setAxisTitle("Hardware bend", 1); Stub_bendBE->setAxisTitle("# L1 Stubs ", 2); - // TTStub raw bend - HistoName = "Stub_rawBend"; - Stub_rawBend = iBooker.book1D(HistoName, - HistoName, - psTTStub_bend.getParameter("Nbinsx"), - psTTStub_bend.getParameter("xmin"), - psTTStub_bend.getParameter("xmax")); - Stub_rawBend->setAxisTitle("Raw bend", 1); - Stub_rawBend->setAxisTitle("# L1 Stubs ", 2); - - // TTStub bend offset - HistoName = "Stub_bendOffset"; - Stub_bendOffset = iBooker.book1D(HistoName, - HistoName, - psTTStub_bend.getParameter("Nbinsx"), - psTTStub_bend.getParameter("xmin"), - psTTStub_bend.getParameter("xmax")); - Stub_bendOffset->setAxisTitle("Bend offset", 1); - Stub_bendOffset->setAxisTitle("# L1 Stubs ", 2); - // TTStub, is PS? edm::ParameterSet psTTStub_isPS = conf_.getParameter("TH1TTStub_isPS"); HistoName = "Stub_isPS"; diff --git a/DQM/SiOuterTracker/plugins/OuterTrackerMonitorTTTrack.cc b/DQM/SiOuterTracker/plugins/OuterTrackerMonitorTTTrack.cc index 2a5b82b159e32..552b566d6b00b 100644 --- a/DQM/SiOuterTracker/plugins/OuterTrackerMonitorTTTrack.cc +++ b/DQM/SiOuterTracker/plugins/OuterTrackerMonitorTTTrack.cc @@ -5,8 +5,6 @@ // Modified by: Emily MacDonald (emily.kaelyn.macdonald@cern.ch) // system include files -#include -#include #include #include #include @@ -14,37 +12,30 @@ #include // user include files +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/ServiceRegistry/interface/Service.h" + #include "CommonTools/Statistics/interface/ChiSquaredProbability.h" #include "DataFormats/Common/interface/DetSetVector.h" #include "DataFormats/Common/interface/DetSetVectorNew.h" #include "DataFormats/Common/interface/Ptr.h" #include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/Common/interface/DetSetVectorNew.h" +#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" #include "DataFormats/L1TrackTrigger/interface/TTCluster.h" #include "DataFormats/L1TrackTrigger/interface/TTStub.h" #include "DataFormats/L1TrackTrigger/interface/TTTrack.h" #include "DataFormats/SiStripDetId/interface/StripSubdetector.h" #include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "Geometry/CommonDetUnit/interface/GeomDet.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" -#include "SimTracker/TrackTriggerAssociation/interface/TTClusterAssociationMap.h" -#include "SimTracker/TrackTriggerAssociation/interface/TTStubAssociationMap.h" -#include "SimTracker/TrackTriggerAssociation/interface/TTTrackAssociationMap.h" + #include "DQMServices/Core/interface/DQMEDAnalyzer.h" #include "DQMServices/Core/interface/DQMStore.h" -#include "DataFormats/Common/interface/DetSetVectorNew.h" -#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/EDGetToken.h" class OuterTrackerMonitorTTTrack : public DQMEDAnalyzer { public: @@ -52,7 +43,6 @@ class OuterTrackerMonitorTTTrack : public DQMEDAnalyzer { ~OuterTrackerMonitorTTTrack() override; void analyze(const edm::Event &, const edm::EventSetup &) override; void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override; - /// Low-quality TTTracks (All tracks) MonitorElement *Track_All_N = nullptr; // Number of tracks per event MonitorElement *Track_All_NStubs = nullptr; // Number of stubs per track @@ -122,8 +112,6 @@ OuterTrackerMonitorTTTrack::~OuterTrackerMonitorTTTrack() { // (e.g. close files, deallocate resources etc.) } -// member functions - // ------------ method called for each event ------------ void OuterTrackerMonitorTTTrack::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { // L1 Primaries diff --git a/DQM/SiOuterTracker/python/OuterTrackerMonitorTTStub_cfi.py b/DQM/SiOuterTracker/python/OuterTrackerMonitorTTStub_cfi.py index 97a171ab5c28a..229d78eaf5f20 100644 --- a/DQM/SiOuterTracker/python/OuterTrackerMonitorTTStub_cfi.py +++ b/DQM/SiOuterTracker/python/OuterTrackerMonitorTTStub_cfi.py @@ -49,9 +49,9 @@ #TTStub bend distribution TH1TTStub_bend = cms.PSet( - Nbinsx = cms.int32(60), - xmin = cms.double(-8.5), - xmax = cms.double(8.5) + Nbinsx = cms.int32(69), + xmin = cms.double(-8.625), + xmax = cms.double(8.625) ), #TTStub, isPS? diff --git a/DQM/SiPixelMonitorClient/interface/SiPixelActionExecutor.h b/DQM/SiPixelMonitorClient/interface/SiPixelActionExecutor.h index 034e72872e767..01e643bab055b 100644 --- a/DQM/SiPixelMonitorClient/interface/SiPixelActionExecutor.h +++ b/DQM/SiPixelMonitorClient/interface/SiPixelActionExecutor.h @@ -8,10 +8,6 @@ #include "DQM/SiPixelMonitorClient/interface/SiPixelConfigParser.h" #include "DQM/SiPixelMonitorClient/interface/SiPixelConfigWriter.h" #include "DQMServices/Core/interface/DQMStore.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" #include #include #include @@ -112,7 +108,6 @@ class SiPixelActionExecutor { SiPixelConfigParser *configParser_; SiPixelConfigWriter *configWriter_; - edm::ESHandle theCablingMap; std::vector summaryMENames; std::vector tkMapMENames; diff --git a/DQM/SiPixelMonitorClient/interface/SiPixelCertification.h b/DQM/SiPixelMonitorClient/interface/SiPixelCertification.h index 51137512b4024..88bdcf86723c6 100644 --- a/DQM/SiPixelMonitorClient/interface/SiPixelCertification.h +++ b/DQM/SiPixelMonitorClient/interface/SiPixelCertification.h @@ -6,20 +6,8 @@ #include #include -// FWCore -#include "DQMServices/Core/interface/DQMEDHarvester.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/LuminosityBlock.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" - // DQM -#include "DQMServices/Core/interface/DQMStore.h" +#include "DQMServices/Core/interface/DQMEDHarvester.h" class SiPixelCertification : public DQMEDHarvester { public: diff --git a/DQM/SiPixelMonitorClient/interface/SiPixelDaqInfo.h b/DQM/SiPixelMonitorClient/interface/SiPixelDaqInfo.h index 69e749222ad35..e6eeb3b9258ac 100644 --- a/DQM/SiPixelMonitorClient/interface/SiPixelDaqInfo.h +++ b/DQM/SiPixelMonitorClient/interface/SiPixelDaqInfo.h @@ -6,21 +6,11 @@ #include #include -// FWCore -#include "DQMServices/Core/interface/DQMEDHarvester.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/LuminosityBlock.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" - // DQM -#include "DQMServices/Core/interface/DQMStore.h" +#include "DQMServices/Core/interface/DQMEDHarvester.h" +#include "CondFormats/DataRecord/interface/RunSummaryRcd.h" +#include "CondFormats/RunInfo/interface/RunInfo.h" #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" class SiPixelDaqInfo : public DQMEDHarvester { @@ -53,6 +43,7 @@ class SiPixelDaqInfo : public DQMEDHarvester { // define Token(-s) edm::EDGetTokenT daqSourceToken_; + edm::ESGetToken runInfoToken_; }; #endif diff --git a/DQM/SiPixelMonitorClient/interface/SiPixelDataQuality.h b/DQM/SiPixelMonitorClient/interface/SiPixelDataQuality.h index f91efba7e9cbf..4e349913022d6 100644 --- a/DQM/SiPixelMonitorClient/interface/SiPixelDataQuality.h +++ b/DQM/SiPixelMonitorClient/interface/SiPixelDataQuality.h @@ -7,11 +7,6 @@ #include "DQM/SiPixelMonitorClient/interface/SiPixelLayoutParser.h" #include "DQMServices/Core/interface/DQMStore.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - #include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h" #include "CondFormats/SiPixelObjects/interface/DetectorIndex.h" #include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h" @@ -58,7 +53,7 @@ class SiPixelDataQuality { void fillGlobalQualityPlot(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, bool init, - edm::ESHandle theCablingMap, + const SiPixelFedCablingMap *theCablingMap, int nFEDs, bool Tier0Flag, int lumisec); @@ -82,7 +77,6 @@ class SiPixelDataQuality { std::ofstream myfile_; int nevents_; bool endOfModules_; - edm::ESHandle theCablingMap; // Final combined Data Quality Flags: MonitorElement *SummaryReportMap; diff --git a/DQM/SiPixelMonitorClient/interface/SiPixelDcsInfo.h b/DQM/SiPixelMonitorClient/interface/SiPixelDcsInfo.h index 84b75dd55cb67..a2f84de13ca4e 100644 --- a/DQM/SiPixelMonitorClient/interface/SiPixelDcsInfo.h +++ b/DQM/SiPixelMonitorClient/interface/SiPixelDcsInfo.h @@ -6,20 +6,8 @@ #include #include -// FWCore -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/LuminosityBlock.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" - // DQM #include "DQMServices/Core/interface/DQMEDHarvester.h" -#include "DQMServices/Core/interface/DQMStore.h" class SiPixelDcsInfo : public DQMEDHarvester { public: diff --git a/DQM/SiPixelMonitorClient/interface/SiPixelEDAClient.h b/DQM/SiPixelMonitorClient/interface/SiPixelEDAClient.h index 2b7c01e00a060..7e81edc708333 100644 --- a/DQM/SiPixelMonitorClient/interface/SiPixelEDAClient.h +++ b/DQM/SiPixelMonitorClient/interface/SiPixelEDAClient.h @@ -3,7 +3,6 @@ #include "DQMServices/Core/interface/DQMEDHarvester.h" #include "DQMServices/Core/interface/DQMStore.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/LuminosityBlock.h" #include "FWCore/Framework/interface/Run.h" @@ -73,7 +72,9 @@ class SiPixelEDAClient : public DQMEDHarvester { std::ostringstream html_out_; edm::EDGetTokenT inputSourceToken_; - edm::ESHandle theCablingMap; + SiPixelFedCablingMap theCablingMap; + + edm::ESGetToken cablingMapToken_; }; #endif diff --git a/DQM/SiPixelMonitorClient/interface/SiPixelInformationExtractor.h b/DQM/SiPixelMonitorClient/interface/SiPixelInformationExtractor.h index 90bda458235dc..76a8358d79c30 100644 --- a/DQM/SiPixelMonitorClient/interface/SiPixelInformationExtractor.h +++ b/DQM/SiPixelMonitorClient/interface/SiPixelInformationExtractor.h @@ -8,11 +8,6 @@ #include "DQM/SiPixelMonitorClient/interface/SiPixelConfigWriter.h" #include "DQM/SiPixelMonitorClient/interface/SiPixelLayoutParser.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - #include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h" #include "CondFormats/SiPixelObjects/interface/DetectorIndex.h" #include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h" @@ -64,7 +59,7 @@ class SiPixelInformationExtractor { bool init, float noiseRate, int noiseRateDenominator, - edm::ESHandle theCablingMap); + const SiPixelFedCablingMap *theCablingMap); private: void getItemList(const std::multimap &req_map, diff --git a/DQM/SiPixelMonitorClient/src/SiPixelDaqInfo.cc b/DQM/SiPixelMonitorClient/src/SiPixelDaqInfo.cc index b19c14e8cf607..f05d308b3c13c 100644 --- a/DQM/SiPixelMonitorClient/src/SiPixelDaqInfo.cc +++ b/DQM/SiPixelMonitorClient/src/SiPixelDaqInfo.cc @@ -1,6 +1,4 @@ -#include "CondFormats/DataRecord/interface/RunSummaryRcd.h" -#include "CondFormats/RunInfo/interface/RunInfo.h" -#include "CondFormats/RunInfo/interface/RunSummary.h" + #include "DQM/SiPixelMonitorClient/interface/SiPixelDaqInfo.h" #include "DataFormats/FEDRawData/interface/FEDNumbering.h" #include "DataFormats/FEDRawData/interface/FEDRawData.h" @@ -23,6 +21,7 @@ SiPixelDaqInfo::SiPixelDaqInfo(const edm::ParameterSet &ps) { // set Token(-s) daqSourceToken_ = consumes(ps.getUntrackedParameter("daqSource", "source")); + runInfoToken_ = esConsumes(); } SiPixelDaqInfo::~SiPixelDaqInfo() {} @@ -44,9 +43,8 @@ void SiPixelDaqInfo::dqmEndLuminosityBlock(DQMStore::IBooker &iBooker, if (auto runInfoRec = iSetup.tryToGet()) { // get fed summary information - ESHandle sumFED; - runInfoRec->get(sumFED); - vector FedsInIds = sumFED->m_fed_in; + const RunInfo &sumFED = runInfoRec->get(runInfoToken_); + vector FedsInIds = sumFED.m_fed_in; int FedCount = 0; int FedCountBarrel = 0; diff --git a/DQM/SiPixelMonitorClient/src/SiPixelDataQuality.cc b/DQM/SiPixelMonitorClient/src/SiPixelDataQuality.cc index 6c6fcca2a9757..cf85896ee51b4 100644 --- a/DQM/SiPixelMonitorClient/src/SiPixelDataQuality.cc +++ b/DQM/SiPixelMonitorClient/src/SiPixelDataQuality.cc @@ -790,7 +790,7 @@ void SiPixelDataQuality::computeGlobalQualityFlagByLumi(DQMStore::IGetter &iGett void SiPixelDataQuality::fillGlobalQualityPlot(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, bool init, - edm::ESHandle theCablingMap, + const SiPixelFedCablingMap *theCablingMap, int nFEDs, bool Tier0Flag, int lumisec) { @@ -916,7 +916,7 @@ void SiPixelDataQuality::fillGlobalQualityPlot(DQMStore::IBooker &iBooker, modCounter_++; detId = getDetId(me); for (int fedid = 0; fedid != 40; ++fedid) { - SiPixelFrameConverter converter(theCablingMap.product(), fedid); + SiPixelFrameConverter converter(theCablingMap, fedid); uint32_t newDetId = detId; if (converter.hasDetUnit(newDetId)) { fedId = fedid; diff --git a/DQM/SiPixelMonitorClient/src/SiPixelEDAClient.cc b/DQM/SiPixelMonitorClient/src/SiPixelEDAClient.cc index 0f2cdcc52b5de..f7c67fe92b3d4 100644 --- a/DQM/SiPixelMonitorClient/src/SiPixelEDAClient.cc +++ b/DQM/SiPixelMonitorClient/src/SiPixelEDAClient.cc @@ -96,6 +96,7 @@ SiPixelEDAClient::SiPixelEDAClient(const edm::ParameterSet &ps) { sipixelDataQuality_ = new SiPixelDataQuality(offlineXMLfile_); inputSourceToken_ = consumes(ps.getUntrackedParameter("inputSource", "source")); + cablingMapToken_ = esConsumes(); // cout<<"...leaving SiPixelEDAClient::SiPixelEDAClient. "<getBinContent(i + 1); } } - eSetup.get().get(theCablingMap); + // copy is intentional to allow using the SiPixelFedCablingMap in dqmEndJob() where accessing EventSetup products is not allowed + theCablingMap = eSetup.getData(cablingMapToken_); firstLumi = false; } @@ -234,11 +236,11 @@ void SiPixelEDAClient::dqmEndLuminosityBlock(DQMStore::IBooker &iBooker, init = true; iBooker.cd(); iGetter.cd(); - sipixelDataQuality_->fillGlobalQualityPlot(iBooker, iGetter, init, theCablingMap, nFEDs_, Tier0Flag_, nLumiSecs_); + sipixelDataQuality_->fillGlobalQualityPlot(iBooker, iGetter, init, &theCablingMap, nFEDs_, Tier0Flag_, nLumiSecs_); init = true; if (noiseRate_ >= 0.) sipixelInformationExtractor_->findNoisyPixels( - iBooker, iGetter, init, noiseRate_, noiseRateDenominator_, theCablingMap); + iBooker, iGetter, init, noiseRate_, noiseRateDenominator_, &theCablingMap); } // cout<<"...leaving SiPixelEDAClient::endLuminosityBlock. "<fillGlobalQualityPlot(iBooker, iGetter, init, theCablingMap, nFEDs_, Tier0Flag_, nLumiSecs_); + sipixelDataQuality_->fillGlobalQualityPlot(iBooker, iGetter, init, &theCablingMap, nFEDs_, Tier0Flag_, nLumiSecs_); init = true; if (noiseRate_ >= 0.) sipixelInformationExtractor_->findNoisyPixels( - iBooker, iGetter, init, noiseRate_, noiseRateDenominator_, theCablingMap); + iBooker, iGetter, init, noiseRate_, noiseRateDenominator_, &theCablingMap); } } diff --git a/DQM/SiPixelMonitorClient/src/SiPixelInformationExtractor.cc b/DQM/SiPixelMonitorClient/src/SiPixelInformationExtractor.cc index 47382b8e71376..262cf2673fc6b 100644 --- a/DQM/SiPixelMonitorClient/src/SiPixelInformationExtractor.cc +++ b/DQM/SiPixelMonitorClient/src/SiPixelInformationExtractor.cc @@ -348,7 +348,7 @@ void SiPixelInformationExtractor::findNoisyPixels(DQMStore::IBooker &iBooker, bool init, float noiseRate_, int noiseRateDenominator_, - edm::ESHandle theCablingMap) { + const SiPixelFedCablingMap *theCablingMap) { if (init) { endOfModules_ = false; nevents_ = noiseRateDenominator_; @@ -447,7 +447,7 @@ void SiPixelInformationExtractor::findNoisyPixels(DQMStore::IBooker &iBooker, std::vector, float>> noisyPixels = (*it).second; // now convert into online conventions: for (int fedid = 0; fedid <= 40; ++fedid) { - SiPixelFrameConverter converter(theCablingMap.product(), fedid); + SiPixelFrameConverter converter(theCablingMap, fedid); uint32_t newDetId = detid; if (converter.hasDetUnit(newDetId)) { realfedID = fedid; @@ -486,7 +486,7 @@ void SiPixelInformationExtractor::findNoisyPixels(DQMStore::IBooker &iBooker, counter++; sipixelobjects::ElectronicIndex cabling; - SiPixelFrameConverter formatter(theCablingMap.product(), realfedID); + SiPixelFrameConverter formatter(theCablingMap, realfedID); sipixelobjects::DetectorIndex detector = {detid, offlineRow, offlineColumn}; formatter.toCabling(cabling, detector); // cabling should now contain cabling.roc and cabling.dcol and diff --git a/DQM/SiPixelMonitorCluster/BuildFile.xml b/DQM/SiPixelMonitorCluster/BuildFile.xml index f317bf3773a72..696e1ce65a1d6 100644 --- a/DQM/SiPixelMonitorCluster/BuildFile.xml +++ b/DQM/SiPixelMonitorCluster/BuildFile.xml @@ -1,5 +1,4 @@ - diff --git a/DQM/SiPixelMonitorCluster/interface/SiPixelClusterModule.h b/DQM/SiPixelMonitorCluster/interface/SiPixelClusterModule.h index a05f59b60ee56..40eed7459d5a5 100644 --- a/DQM/SiPixelMonitorCluster/interface/SiPixelClusterModule.h +++ b/DQM/SiPixelMonitorCluster/interface/SiPixelClusterModule.h @@ -22,19 +22,10 @@ #include "DQMServices/Core/interface/DQMStore.h" #include "DataFormats/Common/interface/DetSetVectorNew.h" #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - #include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "Geometry/CommonDetUnit/interface/GeomDet.h" -#include "Geometry/CommonDetUnit/interface/GeomDetType.h" -#include "Geometry/CommonDetUnit/interface/GluedGeomDet.h" -#include "Geometry/CommonTopologies/interface/PixelTopology.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/CommonDetUnit/interface/PixelGeomDetType.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h" #include class SiPixelClusterModule { @@ -55,7 +46,7 @@ class SiPixelClusterModule { /// Book histograms void book(const edm::ParameterSet &iConfig, - const edm::EventSetup &iSetup, + const TrackerTopology *pTT, DQMStore::IBooker &iBooker, int type = 0, bool twoD = true, @@ -63,6 +54,7 @@ class SiPixelClusterModule { bool isUpgrade = false); /// Fill histograms int fill(const edmNew::DetSetVector &input, + const TrackerTopology *pTT, const TrackerGeometry *tracker, int *barrelClusterTotal, int *fpixPClusterTotal, @@ -83,7 +75,6 @@ class SiPixelClusterModule { bool isUpgrade = false); private: - const TrackerTopology *pTT; uint32_t id_; int ncols_; int nrows_; diff --git a/DQM/SiPixelMonitorCluster/interface/SiPixelClusterSource.h b/DQM/SiPixelMonitorCluster/interface/SiPixelClusterSource.h index 177e767862ac6..bf0a4c5c70c57 100644 --- a/DQM/SiPixelMonitorCluster/interface/SiPixelClusterSource.h +++ b/DQM/SiPixelMonitorCluster/interface/SiPixelClusterSource.h @@ -23,36 +23,13 @@ #include // user include files -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" - #include "DQMServices/Core/interface/DQMEDAnalyzer.h" -#include "DQMServices/Core/interface/DQMStore.h" - #include "DQM/SiPixelMonitorCluster/interface/SiPixelClusterModule.h" - -#include "DataFormats/Common/interface/DetSetVectorNew.h" -#include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" #include "DataFormats/SiPixelDigi/interface/PixelDigi.h" - -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "Geometry/CommonDetUnit/interface/GeomDet.h" -#include "Geometry/CommonDetUnit/interface/GeomDetType.h" -#include "Geometry/CommonDetUnit/interface/GluedGeomDet.h" -#include "Geometry/CommonTopologies/interface/PixelTopology.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/CommonDetUnit/interface/PixelGeomDetType.h" -#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include class SiPixelClusterSource : public DQMEDAnalyzer { @@ -123,6 +100,11 @@ class SiPixelClusterSource : public DQMEDAnalyzer { // define Token(-s) edm::EDGetTokenT> srcToken_; edm::EDGetTokenT> digisrcToken_; + + edm::ESGetToken trackerTopoToken_; + edm::ESGetToken trackerGeomToken_; + edm::ESGetToken trackerTopoTokenBeginRun_; + edm::ESGetToken trackerGeomTokenBeginRun_; }; #endif diff --git a/DQM/SiPixelMonitorCluster/src/SiPixelClusterModule.cc b/DQM/SiPixelMonitorCluster/src/SiPixelClusterModule.cc index ab399e96c36b9..1c15633659866 100644 --- a/DQM/SiPixelMonitorCluster/src/SiPixelClusterModule.cc +++ b/DQM/SiPixelMonitorCluster/src/SiPixelClusterModule.cc @@ -56,16 +56,12 @@ SiPixelClusterModule::~SiPixelClusterModule() {} // Book histograms // void SiPixelClusterModule::book(const edm::ParameterSet &iConfig, - const edm::EventSetup &iSetup, + const TrackerTopology *pTT, DQMStore::IBooker &iBooker, int type, bool twoD, bool reducedSet, bool isUpgrade) { - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - pTT = tTopoHandle.product(); - bool barrel = DetId(id_).subdetId() == static_cast(PixelSubdetector::PixelBarrel); bool endcap = DetId(id_).subdetId() == static_cast(PixelSubdetector::PixelEndcap); bool isHalfModule = false; @@ -539,6 +535,7 @@ void SiPixelClusterModule::book(const edm::ParameterSet &iConfig, // Fill histograms // int SiPixelClusterModule::fill(const edmNew::DetSetVector &input, + const TrackerTopology *pTT, const TrackerGeometry *tracker, int *barrelClusterTotal, int *fpixPClusterTotal, diff --git a/DQM/SiPixelMonitorCluster/src/SiPixelClusterSource.cc b/DQM/SiPixelMonitorCluster/src/SiPixelClusterSource.cc index f8219893c3d7e..84f087b3c4940 100644 --- a/DQM/SiPixelMonitorCluster/src/SiPixelClusterSource.cc +++ b/DQM/SiPixelMonitorCluster/src/SiPixelClusterSource.cc @@ -21,15 +21,13 @@ // Framework #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/Framework/interface/MakerMacros.h" // DQM Framework #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h" #include "DQMServices/Core/interface/DQMStore.h" // Geometry -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" // DataFormats #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/TrackerCommon/interface/PixelBarrelName.h" @@ -37,7 +35,6 @@ #include "DataFormats/TrackerCommon/interface/PixelEndcapName.h" #include "DataFormats/SiPixelDetId/interface/PixelEndcapNameUpgrade.h" #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" // #include #include @@ -71,6 +68,12 @@ SiPixelClusterSource::SiPixelClusterSource(const edm::ParameterSet &iConfig) // set Token(-s) srcToken_ = consumes>(conf_.getParameter("src")); digisrcToken_ = consumes>(conf_.getParameter("digisrc")); + + trackerTopoToken_ = esConsumes(); + trackerGeomToken_ = esConsumes(); + trackerTopoTokenBeginRun_ = esConsumes(); + trackerGeomTokenBeginRun_ = esConsumes(); + firstRun = true; topFolderName_ = conf_.getParameter("TopFolderName"); } @@ -228,16 +231,14 @@ void SiPixelClusterSource::analyze(const edm::Event &iEvent, const edm::EventSet iEvent.getByToken(srcToken_, input); auto const &clustColl = *(input.product()); - edm::ESHandle pDD; - iSetup.get().get(pDD); + edm::ESHandle pDD = iSetup.getHandle(trackerGeomToken_); const TrackerGeometry *tracker = &(*pDD); edm::Handle> digiinput; iEvent.getByToken(digisrcToken_, digiinput); const edm::DetSetVector diginp = *(digiinput.product()); - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); + edm::ESHandle tTopoHandle = iSetup.getHandle(trackerTopoToken_); const TrackerTopology *pTT = tTopoHandle.product(); int lumiSection = (int)iEvent.luminosityBlock(); @@ -251,6 +252,7 @@ void SiPixelClusterSource::analyze(const edm::Event &iEvent, const edm::EventSet for (struct_iter = thePixelStructure.begin(); struct_iter != thePixelStructure.end(); struct_iter++) { int numberOfFpixClusters = (*struct_iter) .second->fill(*input, + pTT, tracker, &nEventsBarrel, &nEventsFPIXp, @@ -311,11 +313,9 @@ void SiPixelClusterSource::analyze(const edm::Event &iEvent, const edm::EventSet //------------------------------------------------------------------ void SiPixelClusterSource::buildStructure(const edm::EventSetup &iSetup) { LogInfo("PixelDQM") << " SiPixelClusterSource::buildStructure"; - edm::ESHandle pDD; - iSetup.get().get(pDD); + edm::ESHandle pDD = iSetup.getHandle(trackerGeomTokenBeginRun_); - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); + edm::ESHandle tTopoHandle = iSetup.getHandle(trackerTopoTokenBeginRun_); const TrackerTopology *pTT = tTopoHandle.product(); LogVerbatim("PixelDQM") << " *** Geometry node for TrackerGeom is " << &(*pDD) << std::endl; @@ -396,11 +396,14 @@ void SiPixelClusterSource::bookMEs(DQMStore::IBooker &iBooker, const edm::EventS SiPixelFolderOrganizer theSiPixelFolder(false); + edm::ESHandle tTopoHandle = iSetup.getHandle(trackerTopoTokenBeginRun_); + const TrackerTopology *pTT = tTopoHandle.product(); + for (struct_iter = thePixelStructure.begin(); struct_iter != thePixelStructure.end(); struct_iter++) { /// Create folder tree and book histograms if (modOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 0, isUpgrade)) { - (*struct_iter).second->book(conf_, iSetup, iBooker, 0, twoDimOn, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, pTT, iBooker, 0, twoDimOn, reducedSet, isUpgrade); } else { if (!isPIB) throw cms::Exception("LogicError") << "[SiPixelClusterSource::bookMEs] Creation of DQM folder " @@ -409,49 +412,49 @@ void SiPixelClusterSource::bookMEs(DQMStore::IBooker &iBooker, const edm::EventS } if (ladOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 1, isUpgrade)) { - (*struct_iter).second->book(conf_, iSetup, iBooker, 1, twoDimOn, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, pTT, iBooker, 1, twoDimOn, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH LADDER-FOLDER\n"; } } if (layOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 2, isUpgrade)) { - (*struct_iter).second->book(conf_, iSetup, iBooker, 2, twoDimOn, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, pTT, iBooker, 2, twoDimOn, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH LAYER-FOLDER\n"; } } if (phiOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 3, isUpgrade)) { - (*struct_iter).second->book(conf_, iSetup, iBooker, 3, twoDimOn, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, pTT, iBooker, 3, twoDimOn, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH PHI-FOLDER\n"; } } if (bladeOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 4, isUpgrade)) { - (*struct_iter).second->book(conf_, iSetup, iBooker, 4, twoDimOn, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, pTT, iBooker, 4, twoDimOn, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH BLADE-FOLDER\n"; } } if (diskOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 5, isUpgrade)) { - (*struct_iter).second->book(conf_, iSetup, iBooker, 5, twoDimOn, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, pTT, iBooker, 5, twoDimOn, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH DISK-FOLDER\n"; } } if (ringOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 6, isUpgrade)) { - (*struct_iter).second->book(conf_, iSetup, iBooker, 6, twoDimOn, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, pTT, iBooker, 6, twoDimOn, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH RING-FOLDER\n"; } } if (smileyOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 7, isUpgrade)) { - (*struct_iter).second->book(conf_, iSetup, iBooker, 7, twoDimOn, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, pTT, iBooker, 7, twoDimOn, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH BARREL-FOLDER\n"; } diff --git a/DQM/SiPixelMonitorDigi/interface/SiPixelDigiModule.h b/DQM/SiPixelMonitorDigi/interface/SiPixelDigiModule.h index b7e2366d37bbc..0fc5af04e13a7 100644 --- a/DQM/SiPixelMonitorDigi/interface/SiPixelDigiModule.h +++ b/DQM/SiPixelMonitorDigi/interface/SiPixelDigiModule.h @@ -23,22 +23,8 @@ #include "DQMServices/Core/interface/DQMStore.h" #include "DataFormats/SiPixelDigi/interface/PixelDigi.h" #include "DataFormats/Common/interface/DetSetVector.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h" -#include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h" -#include "CondFormats/SiPixelObjects/interface/SiPixelFrameReverter.h" -#include "CondFormats/SiPixelObjects/interface/GlobalPixel.h" - -#include "FWCore/Framework/interface/ESHandle.h" -#include "Geometry/CommonTopologies/interface/PixelTopology.h" -#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/CommonDetUnit/interface/GeomDetType.h" -#include "Geometry/CommonDetUnit/interface/GeomDet.h" -#include "Geometry/CommonDetUnit/interface/GluedGeomDet.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h" -#include "Geometry/CommonDetUnit/interface/PixelGeomDetType.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include class SiPixelDigiModule { @@ -59,7 +45,7 @@ class SiPixelDigiModule { /// Book histograms void book(const edm::ParameterSet& iConfig, - const edm::EventSetup& iSetup, + const TrackerTopology* pTT, DQMStore::IBooker& iBooker, int type = 0, bool twoD = true, @@ -74,7 +60,7 @@ class SiPixelDigiModule { // bool twoD=true, bool reducedSet=false, bool twoDimModOn = true, bool twoDimOnlyLayDisk = false, // int &nDigisA, int &nDigisB); int fill(const edm::DetSetVector& input, - const edm::EventSetup& iSetup, + const TrackerTopology* pTT, MonitorElement* combBarrel, MonitorElement* chanBarrel, std::vector& chanBarrelL, diff --git a/DQM/SiPixelMonitorDigi/interface/SiPixelDigiSource.h b/DQM/SiPixelMonitorDigi/interface/SiPixelDigiSource.h index faf2716baaa95..99c1eb5c4f9cd 100644 --- a/DQM/SiPixelMonitorDigi/interface/SiPixelDigiSource.h +++ b/DQM/SiPixelMonitorDigi/interface/SiPixelDigiSource.h @@ -21,29 +21,15 @@ #include // user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "DQMServices/Core/interface/DQMStore.h" -#include "DQMServices/Core/interface/DQMOneEDAnalyzer.h" - +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/CommonTopologies/interface/PixelTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "DQM/SiPixelMonitorDigi/interface/SiPixelDigiModule.h" - -#include "DataFormats/Common/interface/DetSetVector.h" -#include "DataFormats/SiPixelDigi/interface/PixelDigi.h" -#include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" - -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include #include -class SiPixelDigiSource : public DQMOneLumiEDAnalyzer<> { +class SiPixelDigiSource : public DQMOneEDAnalyzer> { public: explicit SiPixelDigiSource(const edm::ParameterSet& conf); ~SiPixelDigiSource() override; @@ -53,9 +39,9 @@ class SiPixelDigiSource : public DQMOneLumiEDAnalyzer<> { void analyze(const edm::Event&, const edm::EventSetup&) override; void dqmBeginRun(const edm::Run&, edm::EventSetup const&) override; void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override; - - void dqmBeginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - void dqmEndLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; + std::shared_ptr globalBeginLuminosityBlock(const edm::LuminosityBlock& lumi, + const edm::EventSetup& iSetup) const override; + void globalEndLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; virtual void buildStructure(edm::EventSetup const&); virtual void bookMEs(DQMStore::IBooker&, const edm::EventSetup& iSetup); @@ -239,7 +225,10 @@ class SiPixelDigiSource : public DQMOneLumiEDAnalyzer<> { int nDigisB; //define Token(-s) - edm::EDGetTokenT > srcToken_; + edm::EDGetTokenT> srcToken_; + edm::ESGetToken trackerTopoToken_; + edm::ESGetToken trackerTopoTokenBeginRun_; + edm::ESGetToken trackerGeomTokenBeginRun_; int noOfLayers; int noOfDisks; }; diff --git a/DQM/SiPixelMonitorDigi/src/SiPixelDigiModule.cc b/DQM/SiPixelMonitorDigi/src/SiPixelDigiModule.cc index c578075d2ba11..1a05fc6400f21 100644 --- a/DQM/SiPixelMonitorDigi/src/SiPixelDigiModule.cc +++ b/DQM/SiPixelMonitorDigi/src/SiPixelDigiModule.cc @@ -19,8 +19,6 @@ #include "DataFormats/SiPixelDetId/interface/PixelEndcapNameUpgrade.h" #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" // // Constructors @@ -39,7 +37,7 @@ SiPixelDigiModule::~SiPixelDigiModule() {} // Book histograms // void SiPixelDigiModule::book(const edm::ParameterSet& iConfig, - const edm::EventSetup& iSetup, + const TrackerTopology* pTT, DQMStore::IBooker& iBooker, int type, bool twoD, @@ -47,11 +45,6 @@ void SiPixelDigiModule::book(const edm::ParameterSet& iConfig, bool reducedSet, bool additInfo, bool isUpgrade) { - //isUpgrade = iConfig.getUntrackedParameter("isUpgrade"); - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology* pTT = tTopoHandle.product(); - bool barrel = DetId(id_).subdetId() == static_cast(PixelSubdetector::PixelBarrel); bool endcap = DetId(id_).subdetId() == static_cast(PixelSubdetector::PixelEndcap); bool isHalfModule = false; @@ -321,7 +314,7 @@ void SiPixelDigiModule::book(const edm::ParameterSet& iConfig, // Fill histograms // int SiPixelDigiModule::fill(const edm::DetSetVector& input, - const edm::EventSetup& iSetup, + const TrackerTopology* pTT, MonitorElement* combBarrel, MonitorElement* chanBarrel, std::vector& chanBarrelL, @@ -340,10 +333,6 @@ int SiPixelDigiModule::fill(const edm::DetSetVector& input, int& nDigisA, int& nDigisB, bool isUpgrade) { - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology* pTT = tTopoHandle.product(); - bool barrel = DetId(id_).subdetId() == static_cast(PixelSubdetector::PixelBarrel); bool endcap = DetId(id_).subdetId() == static_cast(PixelSubdetector::PixelEndcap); bool isHalfModule = false; diff --git a/DQM/SiPixelMonitorDigi/src/SiPixelDigiSource.cc b/DQM/SiPixelMonitorDigi/src/SiPixelDigiSource.cc index f1c954a66a0ab..400225c3d45bf 100644 --- a/DQM/SiPixelMonitorDigi/src/SiPixelDigiSource.cc +++ b/DQM/SiPixelMonitorDigi/src/SiPixelDigiSource.cc @@ -17,6 +17,7 @@ // #include "DQM/SiPixelMonitorDigi/interface/SiPixelDigiSource.h" // Framework +#include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -25,11 +26,7 @@ #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h" #include "DQMServices/Core/interface/DQMStore.h" // Geometry -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/CommonTopologies/interface/PixelTopology.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" // DataFormats #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" @@ -71,6 +68,10 @@ SiPixelDigiSource::SiPixelDigiSource(const edm::ParameterSet& iConfig) //set Token(-s) srcToken_ = consumes >(conf_.getParameter("src")); + trackerTopoToken_ = esConsumes(); + trackerTopoTokenBeginRun_ = esConsumes(); + trackerGeomTokenBeginRun_ = esConsumes(); + topFolderName_ = conf_.getParameter("TopFolderName"); firstRun = true; @@ -100,15 +101,66 @@ SiPixelDigiSource::~SiPixelDigiSource() { LogInfo("PixelDQM") << "SiPixelDigiSource::~SiPixelDigiSource: Destructor" << endl; } -void SiPixelDigiSource::dqmBeginLuminosityBlock(const edm::LuminosityBlock& lb, edm::EventSetup const&) { +std::shared_ptr SiPixelDigiSource::globalBeginLuminosityBlock(const edm::LuminosityBlock& lumi, + const edm::EventSetup& iSetup) const { + unsigned int currentLS = lumi.id().luminosityBlock(); + bool resetCounters = (currentLS % 10 == 0) ? true : false; + return std::make_shared(resetCounters); +} + +void SiPixelDigiSource::globalEndLuminosityBlock(const edm::LuminosityBlock& lb, edm::EventSetup const&) { int thisls = lb.id().luminosityBlock(); + const bool resetCounters = luminosityBlockCache(lb.index()); + + float averageBPIXFed = float(nBPIXDigis) / 32.; + float averageFPIXFed = float(nFPIXDigis) / 8.; - if (modOn && thisls % 10 == 0 && averageDigiOccupancy) { + if (averageDigiOccupancy) { + for (int i = 0; i != 40; i++) { + float averageOcc = 0.; + if (i < 32) { + if (averageBPIXFed > 0.) + averageOcc = nDigisPerFed[i] / averageBPIXFed; + } else { + if (averageFPIXFed > 0.) + averageOcc = nDigisPerFed[i] / averageFPIXFed; + } + if (!modOn) { + averageDigiOccupancy->Fill( + i, + nDigisPerFed[i]); //In offline we fill all digis and normalise at the end of the run for thread safe behaviour. + avgfedDigiOccvsLumi->setBinContent(thisls, i + 1, nDigisPerFed[i]); //Same plot vs lumi section + } + if (modOn) { + if (thisls % 10 == 0) + averageDigiOccupancy->Fill( + i, + averageOcc); // "modOn" basically mean Online DQM, in this case fill histos with actual value of digi fraction per fed for each ten lumisections + if (avgfedDigiOccvsLumi && thisls % 5 == 0) + avgfedDigiOccvsLumi->setBinContent( + int(thisls / 5), + i + 1, + averageOcc); //fill with the mean over 5 lumisections, previous code was filling this histo only with last event of each 10th lumisection + } + } + + if (modOn && thisls % 10 == 0) { + avgBarrelFedOccvsLumi->setBinContent( + int(thisls / 10), averageBPIXFed); // vs lumisection for barrel, filled every 10 lumi sections + avgEndcapFedOccvsLumi->setBinContent( + int(thisls / 10), averageFPIXFed); // vs lumisection for endcap, filled every 10 lumi sections + } + } + + //reset counters + + if (modOn && resetCounters && averageDigiOccupancy) { nBPIXDigis = 0; nFPIXDigis = 0; for (int i = 0; i != 40; i++) nDigisPerFed[i] = 0; } + if (!modOn && averageDigiOccupancy) { nBPIXDigis = 0; nFPIXDigis = 0; @@ -116,7 +168,7 @@ void SiPixelDigiSource::dqmBeginLuminosityBlock(const edm::LuminosityBlock& lb, nDigisPerFed[i] = 0; } - if (modOn && thisls % 10 == 0) { + if (modOn && resetCounters) { ROCMapToReset = true; //the ROC map is reset each 10 lumisections for (int i = 0; i < 2; i++) @@ -159,50 +211,6 @@ void SiPixelDigiSource::dqmBeginLuminosityBlock(const edm::LuminosityBlock& lb, } } -void SiPixelDigiSource::dqmEndLuminosityBlock(const edm::LuminosityBlock& lb, edm::EventSetup const&) { - int thisls = lb.id().luminosityBlock(); - - float averageBPIXFed = float(nBPIXDigis) / 32.; - float averageFPIXFed = float(nFPIXDigis) / 8.; - - if (averageDigiOccupancy) { - for (int i = 0; i != 40; i++) { - float averageOcc = 0.; - if (i < 32) { - if (averageBPIXFed > 0.) - averageOcc = nDigisPerFed[i] / averageBPIXFed; - } else { - if (averageFPIXFed > 0.) - averageOcc = nDigisPerFed[i] / averageFPIXFed; - } - if (!modOn) { - averageDigiOccupancy->Fill( - i, - nDigisPerFed[i]); //In offline we fill all digis and normalise at the end of the run for thread safe behaviour. - avgfedDigiOccvsLumi->setBinContent(thisls, i + 1, nDigisPerFed[i]); //Same plot vs lumi section - } - if (modOn) { - if (thisls % 10 == 0) - averageDigiOccupancy->Fill( - i, - averageOcc); // "modOn" basically mean Online DQM, in this case fill histos with actual value of digi fraction per fed for each ten lumisections - if (avgfedDigiOccvsLumi && thisls % 5 == 0) - avgfedDigiOccvsLumi->setBinContent( - int(thisls / 5), - i + 1, - averageOcc); //fill with the mean over 5 lumisections, previous code was filling this histo only with last event of each 10th lumisection - } - } - - if (modOn && thisls % 10 == 0) { - avgBarrelFedOccvsLumi->setBinContent( - int(thisls / 10), averageBPIXFed); // vs lumisection for barrel, filled every 10 lumi sections - avgEndcapFedOccvsLumi->setBinContent( - int(thisls / 10), averageFPIXFed); // vs lumisection for endcap, filled every 10 lumi sections - } - } -} - void SiPixelDigiSource::dqmBeginRun(const edm::Run& r, const edm::EventSetup& iSetup) { LogInfo("PixelDQM") << " SiPixelDigiSource::beginJob - Initialisation ... " << std::endl; LogInfo("PixelDQM") << "Mod/Lad/Lay/Phi " << modOn << "/" << ladOn << "/" << layOn << "/" << phiOn << std::endl; @@ -316,8 +324,7 @@ void SiPixelDigiSource::bookHistograms(DQMStore::IBooker& iBooker, edm::Run cons // Method called for every event //------------------------------------------------------------------ void SiPixelDigiSource::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); + edm::ESHandle tTopoHandle = iSetup.getHandle(trackerTopoToken_); const TrackerTopology* pTT = tTopoHandle.product(); // get input data @@ -343,7 +350,7 @@ void SiPixelDigiSource::analyze(const edm::Event& iEvent, const edm::EventSetup& for (struct_iter = thePixelStructure.begin(); struct_iter != thePixelStructure.end(); struct_iter++) { int numberOfDigisMod = (*struct_iter) .second->fill(*input, - iSetup, + pTT, meNDigisCOMBBarrel_, meNDigisCHANBarrel_, meNDigisCHANBarrelLs_, @@ -1095,13 +1102,11 @@ void SiPixelDigiSource::analyze(const edm::Event& iEvent, const edm::EventSetup& // Build data structure //------------------------------------------------------------------ void SiPixelDigiSource::buildStructure(const edm::EventSetup& iSetup) { - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); + edm::ESHandle tTopoHandle = iSetup.getHandle(trackerTopoTokenBeginRun_); const TrackerTopology* pTT = tTopoHandle.product(); LogInfo("PixelDQM") << " SiPixelDigiSource::buildStructure"; - edm::ESHandle pDD; - iSetup.get().get(pDD); + edm::ESHandle pDD = iSetup.getHandle(trackerGeomTokenBeginRun_); LogVerbatim("PixelDQM") << " *** Geometry node for TrackerGeom is " << &(*pDD) << std::endl; LogVerbatim("PixelDQM") << " *** I have " << pDD->dets().size() << " detectors" << std::endl; @@ -1258,11 +1263,14 @@ void SiPixelDigiSource::bookMEs(DQMStore::IBooker& iBooker, const edm::EventSetu SiPixelFolderOrganizer theSiPixelFolder(false); + edm::ESHandle tTopoHandle = iSetup.getHandle(trackerTopoTokenBeginRun_); + const TrackerTopology* pTT = tTopoHandle.product(); + for (struct_iter = thePixelStructure.begin(); struct_iter != thePixelStructure.end(); struct_iter++) { /// Create folder tree and book histograms if (modOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 0, isUpgrade)) { - (*struct_iter).second->book(conf_, iSetup, iBooker, 0, twoDimOn, hiRes, reducedSet, twoDimModOn, isUpgrade); + (*struct_iter).second->book(conf_, pTT, iBooker, 0, twoDimOn, hiRes, reducedSet, twoDimModOn, isUpgrade); } else { if (!isPIB) throw cms::Exception("LogicError") << "[SiPixelDigiSource::bookMEs] Creation of DQM folder failed"; @@ -1270,15 +1278,14 @@ void SiPixelDigiSource::bookMEs(DQMStore::IBooker& iBooker, const edm::EventSetu } if (ladOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 1, isUpgrade)) { - (*struct_iter).second->book(conf_, iSetup, iBooker, 1, twoDimOn, hiRes, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, pTT, iBooker, 1, twoDimOn, hiRes, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH LADDER-FOLDER\n"; } } if (layOn || twoDimOnlyLayDisk) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 2, isUpgrade)) { - (*struct_iter) - .second->book(conf_, iSetup, iBooker, 2, twoDimOn, hiRes, reducedSet, twoDimOnlyLayDisk, isUpgrade); + (*struct_iter).second->book(conf_, pTT, iBooker, 2, twoDimOn, hiRes, reducedSet, twoDimOnlyLayDisk, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH LAYER-FOLDER\n"; } @@ -1286,29 +1293,28 @@ void SiPixelDigiSource::bookMEs(DQMStore::IBooker& iBooker, const edm::EventSetu if (phiOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 3, isUpgrade)) { - (*struct_iter).second->book(conf_, iSetup, iBooker, 3, twoDimOn, hiRes, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, pTT, iBooker, 3, twoDimOn, hiRes, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH PHI-FOLDER\n"; } } if (bladeOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 4, isUpgrade)) { - (*struct_iter).second->book(conf_, iSetup, iBooker, 4, twoDimOn, hiRes, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, pTT, iBooker, 4, twoDimOn, hiRes, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH BLADE-FOLDER\n"; } } if (diskOn || twoDimOnlyLayDisk) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 5, isUpgrade)) { - (*struct_iter) - .second->book(conf_, iSetup, iBooker, 5, twoDimOn, hiRes, reducedSet, twoDimOnlyLayDisk, isUpgrade); + (*struct_iter).second->book(conf_, pTT, iBooker, 5, twoDimOn, hiRes, reducedSet, twoDimOnlyLayDisk, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH DISK-FOLDER\n"; } } if (ringOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 6, isUpgrade)) { - (*struct_iter).second->book(conf_, iSetup, iBooker, 6, twoDimOn, hiRes, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, pTT, iBooker, 6, twoDimOn, hiRes, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH RING-FOLDER\n"; } diff --git a/DQM/SiPixelMonitorRawData/interface/SiPixelHLTSource.h b/DQM/SiPixelMonitorRawData/interface/SiPixelHLTSource.h index 37d5f63016ba7..720373211e626 100644 --- a/DQM/SiPixelMonitorRawData/interface/SiPixelHLTSource.h +++ b/DQM/SiPixelMonitorRawData/interface/SiPixelHLTSource.h @@ -23,25 +23,15 @@ #include // user include files -#include "DQMServices/Core/interface/DQMStore.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" - #include "DQMServices/Core/interface/DQMEDAnalyzer.h" #include "DataFormats/Common/interface/DetSetVector.h" #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" #include "DataFormats/SiPixelRawData/interface/SiPixelRawDataError.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" - #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" class SiPixelHLTSource : public DQMEDAnalyzer { public: @@ -57,7 +47,7 @@ class SiPixelHLTSource : public DQMEDAnalyzer { edm::ParameterSet conf_; edm::EDGetTokenT rawin_; edm::EDGetTokenT> errin_; - edm::ESHandle pDD; + edm::ESGetToken trackerGeomToken_; bool saveFile; bool slowDown; std::string dirName_; diff --git a/DQM/SiPixelMonitorRawData/interface/SiPixelRawDataErrorSource.h b/DQM/SiPixelMonitorRawData/interface/SiPixelRawDataErrorSource.h index f31970dcd4ebf..d202fb04a99fa 100644 --- a/DQM/SiPixelMonitorRawData/interface/SiPixelRawDataErrorSource.h +++ b/DQM/SiPixelMonitorRawData/interface/SiPixelRawDataErrorSource.h @@ -28,28 +28,17 @@ #include // user include files -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "DQMServices/Core/interface/DQMOneEDAnalyzer.h" -#include "DQMServices/Core/interface/DQMStore.h" - +#include "DQMServices/Core/interface/DQMEDAnalyzer.h" #include "DQM/SiPixelMonitorRawData/interface/SiPixelRawDataErrorModule.h" - #include "DataFormats/Common/interface/DetSetVector.h" -#include "DataFormats/SiPixelRawData/interface/SiPixelRawDataError.h" - -#include "DataFormats/Common/interface/Handle.h" #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include -class SiPixelRawDataErrorSource : public DQMOneLumiEDAnalyzer<> { +class SiPixelRawDataErrorSource : public DQMEDAnalyzer { public: explicit SiPixelRawDataErrorSource(const edm::ParameterSet &conf); ~SiPixelRawDataErrorSource() override; @@ -67,6 +56,8 @@ class SiPixelRawDataErrorSource : public DQMOneLumiEDAnalyzer<> { edm::ParameterSet conf_; edm::EDGetTokenT> src_; edm::EDGetTokenT inputSourceToken_; + edm::ESGetToken trackerTopoTokenBeginRun_; + edm::ESGetToken trackerGeomTokenBeginRun_; std::string topFolderName_; bool saveFile; bool isPIB; diff --git a/DQM/SiPixelMonitorRawData/src/SiPixelHLTSource.cc b/DQM/SiPixelMonitorRawData/src/SiPixelHLTSource.cc index 90f6d7c59d581..d721ff6444106 100644 --- a/DQM/SiPixelMonitorRawData/src/SiPixelHLTSource.cc +++ b/DQM/SiPixelMonitorRawData/src/SiPixelHLTSource.cc @@ -20,6 +20,7 @@ // Framework #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/Framework/interface/MakerMacros.h" // DQM Framework #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h" #include "DQM/SiPixelCommon/interface/SiPixelHistogramId.h" @@ -50,6 +51,7 @@ SiPixelHLTSource::SiPixelHLTSource(const edm::ParameterSet &iConfig) : conf_(iConfig), rawin_(consumes(conf_.getParameter("RawInput"))), errin_(consumes>(conf_.getParameter("ErrorInput"))), + trackerGeomToken_(esConsumes()), saveFile(conf_.getUntrackedParameter("saveFile", false)), slowDown(conf_.getUntrackedParameter("slowDown", false)), dirName_(conf_.getUntrackedParameter("DirName", "Pixel/FEDIntegrity/")) { @@ -65,7 +67,7 @@ SiPixelHLTSource::~SiPixelHLTSource() { void SiPixelHLTSource::dqmBeginRun(const edm::Run &r, const edm::EventSetup &iSetup) { LogInfo("PixelDQM") << " SiPixelHLTSource::beginJob - Initialisation ... " << std::endl; - iSetup.get().get(pDD); + if (firstRun) { eventNo = 0; @@ -83,6 +85,7 @@ void SiPixelHLTSource::bookHistograms(DQMStore::IBooker &iBooker, edm::Run const //------------------------------------------------------------------ void SiPixelHLTSource::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { eventNo++; + edm::ESHandle pDD = iSetup.getHandle(trackerGeomToken_); // get raw input data edm::Handle rawinput; iEvent.getByToken(rawin_, rawinput); diff --git a/DQM/SiPixelMonitorRawData/src/SiPixelRawDataErrorSource.cc b/DQM/SiPixelMonitorRawData/src/SiPixelRawDataErrorSource.cc index f808c9dd1d4ee..a5d4e2a2fca77 100644 --- a/DQM/SiPixelMonitorRawData/src/SiPixelRawDataErrorSource.cc +++ b/DQM/SiPixelMonitorRawData/src/SiPixelRawDataErrorSource.cc @@ -26,6 +26,7 @@ // Framework #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/Framework/interface/MakerMacros.h" // DQM Framework #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h" #include "DQM/SiPixelCommon/interface/SiPixelHistogramId.h" @@ -33,10 +34,7 @@ // Geometry #include "Geometry/CommonTopologies/interface/PixelTopology.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" // DataFormats #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/FEDRawData/interface/FEDNumbering.h" @@ -69,6 +67,8 @@ SiPixelRawDataErrorSource::SiPixelRawDataErrorSource(const edm::ParameterSet &iC << endl; topFolderName_ = conf_.getParameter("TopFolderName"); inputSourceToken_ = consumes(conf_.getUntrackedParameter("inputSource", "source")); + trackerTopoTokenBeginRun_ = esConsumes(); + trackerGeomTokenBeginRun_ = esConsumes(); } SiPixelRawDataErrorSource::~SiPixelRawDataErrorSource() { @@ -185,12 +185,9 @@ void SiPixelRawDataErrorSource::analyze(const edm::Event &iEvent, const edm::Eve void SiPixelRawDataErrorSource::buildStructure(const edm::EventSetup &iSetup) { LogInfo("PixelDQM") << " SiPixelRawDataErrorSource::buildStructure"; - edm::ESHandle pDD; - edm::ESHandle tTopoHandle; - - iSetup.get().get(pDD); - iSetup.get().get(tTopoHandle); + edm::ESHandle pDD = iSetup.getHandle(trackerGeomTokenBeginRun_); + edm::ESHandle tTopoHandle = iSetup.getHandle(trackerTopoTokenBeginRun_); const TrackerTopology *pTT = tTopoHandle.product(); LogVerbatim("PixelDQM") << " *** Geometry node for TrackerGeom is " << &(*pDD) << std::endl; diff --git a/DQM/SiPixelMonitorRecHit/interface/SiPixelRecHitModule.h b/DQM/SiPixelMonitorRecHit/interface/SiPixelRecHitModule.h index 10c8d40c01928..757bd7c8eca89 100644 --- a/DQM/SiPixelMonitorRecHit/interface/SiPixelRecHitModule.h +++ b/DQM/SiPixelMonitorRecHit/interface/SiPixelRecHitModule.h @@ -29,6 +29,8 @@ detector segment (detID) #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include class SiPixelRecHitModule { @@ -48,7 +50,7 @@ class SiPixelRecHitModule { /// Book histograms void book(const edm::ParameterSet &iConfig, DQMStore::IBooker &iBooker, - const edm::EventSetup &iSetup, + const TrackerTopology *pTT, int type = 0, bool twoD = true, bool reducedSet = false, diff --git a/DQM/SiPixelMonitorRecHit/interface/SiPixelRecHitSource.h b/DQM/SiPixelMonitorRecHit/interface/SiPixelRecHitSource.h index 087b9cd94e602..dc1e5b109a1e0 100644 --- a/DQM/SiPixelMonitorRecHit/interface/SiPixelRecHitSource.h +++ b/DQM/SiPixelMonitorRecHit/interface/SiPixelRecHitSource.h @@ -25,12 +25,7 @@ #include // user include files -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" - #include "DQMServices/Core/interface/DQMEDAnalyzer.h" -#include "DQMServices/Core/interface/DQMStore.h" #include "DQM/SiPixelMonitorRecHit/interface/SiPixelRecHitModule.h" @@ -38,14 +33,10 @@ #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h" #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h" - -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include class SiPixelRecHitSource : public DQMEDAnalyzer { @@ -67,6 +58,8 @@ class SiPixelRecHitSource : public DQMEDAnalyzer { private: edm::ParameterSet conf_; edm::EDGetTokenT src_; + edm::ESGetToken trackerTopoTokenBeginRun_; + edm::ESGetToken trackerGeomTokenBeginRun_; bool saveFile; bool isPIB; diff --git a/DQM/SiPixelMonitorRecHit/src/SiPixelRecHitModule.cc b/DQM/SiPixelMonitorRecHit/src/SiPixelRecHitModule.cc index 3ae5cb1ff4844..606c243fcfc9c 100644 --- a/DQM/SiPixelMonitorRecHit/src/SiPixelRecHitModule.cc +++ b/DQM/SiPixelMonitorRecHit/src/SiPixelRecHitModule.cc @@ -17,19 +17,7 @@ #include "DataFormats/TrackerCommon/interface/PixelEndcapName.h" #include "DataFormats/SiPixelDetId/interface/PixelEndcapNameUpgrade.h" #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" -#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" - -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" - -#include "FWCore/Framework/interface/EventSetup.h" // Constructors // SiPixelRecHitModule::SiPixelRecHitModule() : id_(0) {} @@ -45,15 +33,11 @@ SiPixelRecHitModule::~SiPixelRecHitModule() {} // void SiPixelRecHitModule::book(const edm::ParameterSet &iConfig, DQMStore::IBooker &iBooker, - const edm::EventSetup &iSetup, + const TrackerTopology *pTT, int type, bool twoD, bool reducedSet, bool isUpgrade) { - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology *pTT = tTopoHandle.product(); - bool barrel = DetId(id_).subdetId() == static_cast(PixelSubdetector::PixelBarrel); bool endcap = DetId(id_).subdetId() == static_cast(PixelSubdetector::PixelEndcap); bool isHalfModule = false; diff --git a/DQM/SiPixelMonitorRecHit/src/SiPixelRecHitSource.cc b/DQM/SiPixelMonitorRecHit/src/SiPixelRecHitSource.cc index 8465d50e62215..d084e640cc6a9 100644 --- a/DQM/SiPixelMonitorRecHit/src/SiPixelRecHitSource.cc +++ b/DQM/SiPixelMonitorRecHit/src/SiPixelRecHitSource.cc @@ -25,14 +25,12 @@ // Framework #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/Framework/interface/MakerMacros.h" // DQM Framework #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h" #include "DQMServices/Core/interface/DQMStore.h" // Geometry -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" // DataFormats #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/TrackerCommon/interface/PixelBarrelName.h" @@ -51,6 +49,8 @@ using namespace edm; SiPixelRecHitSource::SiPixelRecHitSource(const edm::ParameterSet &iConfig) : conf_(iConfig), src_(consumes(conf_.getParameter("src"))), + trackerTopoTokenBeginRun_(esConsumes()), + trackerGeomTokenBeginRun_(esConsumes()), saveFile(conf_.getUntrackedParameter("saveFile", false)), isPIB(conf_.getUntrackedParameter("isPIB", false)), slowDown(conf_.getUntrackedParameter("slowDown", false)), @@ -176,12 +176,9 @@ void SiPixelRecHitSource::analyze(const edm::Event &iEvent, const edm::EventSetu void SiPixelRecHitSource::buildStructure(const edm::EventSetup &iSetup) { LogInfo("PixelDQM") << " SiPixelRecHitSource::buildStructure"; - edm::ESHandle pDD; - edm::ESHandle tTopoHandle; - - iSetup.get().get(pDD); - iSetup.get().get(tTopoHandle); + edm::ESHandle pDD = iSetup.getHandle(trackerGeomTokenBeginRun_); + edm::ESHandle tTopoHandle = iSetup.getHandle(trackerTopoTokenBeginRun_); const TrackerTopology *pTT = tTopoHandle.product(); LogVerbatim("PixelDQM") << " *** Geometry node for TrackerGeom is " << &(*pDD) << std::endl; @@ -247,11 +244,14 @@ void SiPixelRecHitSource::bookMEs(DQMStore::IBooker &iBooker, const edm::EventSe SiPixelFolderOrganizer theSiPixelFolder(false); + edm::ESHandle tTopoHandle = iSetup.getHandle(trackerTopoTokenBeginRun_); + const TrackerTopology *pTT = tTopoHandle.product(); + for (struct_iter = thePixelStructure.begin(); struct_iter != thePixelStructure.end(); struct_iter++) { /// Create folder tree and book histograms if (modOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 0, isUpgrade)) { - (*struct_iter).second->book(conf_, iBooker, iSetup, 0, twoDimOn, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, iBooker, pTT, 0, twoDimOn, reducedSet, isUpgrade); } else { if (!isPIB) throw cms::Exception("LogicError") << "[SiPixelDigiSource::bookMEs] Creation of DQM folder failed"; @@ -259,42 +259,42 @@ void SiPixelRecHitSource::bookMEs(DQMStore::IBooker &iBooker, const edm::EventSe } if (ladOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 1, isUpgrade)) { - (*struct_iter).second->book(conf_, iBooker, iSetup, 1, twoDimOn, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, iBooker, pTT, 1, twoDimOn, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH LADDER-FOLDER\n"; } } if (layOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 2, isUpgrade)) { - (*struct_iter).second->book(conf_, iBooker, iSetup, 2, twoDimOn, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, iBooker, pTT, 2, twoDimOn, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH LAYER-FOLDER\n"; } } if (phiOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 3, isUpgrade)) { - (*struct_iter).second->book(conf_, iBooker, iSetup, 3, twoDimOn, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, iBooker, pTT, 3, twoDimOn, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH PHI-FOLDER\n"; } } if (bladeOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 4, isUpgrade)) { - (*struct_iter).second->book(conf_, iBooker, iSetup, 4, twoDimOn, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, iBooker, pTT, 4, twoDimOn, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH BLADE-FOLDER\n"; } } if (diskOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 5, isUpgrade)) { - (*struct_iter).second->book(conf_, iBooker, iSetup, 5, twoDimOn, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, iBooker, pTT, 5, twoDimOn, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH DISK-FOLDER\n"; } } if (ringOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 6, isUpgrade)) { - (*struct_iter).second->book(conf_, iBooker, iSetup, 6, twoDimOn, reducedSet, isUpgrade); + (*struct_iter).second->book(conf_, iBooker, pTT, 6, twoDimOn, reducedSet, isUpgrade); } else { LogDebug("PixelDQM") << "PROBLEM WITH RING-FOLDER\n"; } diff --git a/DQM/SiPixelMonitorTrack/BuildFile.xml b/DQM/SiPixelMonitorTrack/BuildFile.xml index e95a45b7debcb..0a2e6d3eb2130 100644 --- a/DQM/SiPixelMonitorTrack/BuildFile.xml +++ b/DQM/SiPixelMonitorTrack/BuildFile.xml @@ -1,5 +1,4 @@ - @@ -11,7 +10,6 @@ - diff --git a/DQM/SiPixelMonitorTrack/interface/SiPixelHitEfficiencyModule.h b/DQM/SiPixelMonitorTrack/interface/SiPixelHitEfficiencyModule.h index dd7db455fe2b1..e4c39a599bd57 100644 --- a/DQM/SiPixelMonitorTrack/interface/SiPixelHitEfficiencyModule.h +++ b/DQM/SiPixelMonitorTrack/interface/SiPixelHitEfficiencyModule.h @@ -15,10 +15,9 @@ #include -//#include "DataFormats/GeometryCommonDetAlgo/interface/MeasurementVector.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DQMServices/Core/interface/DQMStore.h" #include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h" #include "DataFormats/TrajectoryState/interface/LocalTrajectoryParameters.h" #include @@ -37,7 +36,7 @@ class SiPixelHitEfficiencyModule { ~SiPixelHitEfficiencyModule(); void book( - const edm::ParameterSet &, edm::EventSetup const &, DQMStore::IBooker &, int type = 0, bool isUpgrade = false); + const edm::ParameterSet &, const TrackerTopology *, DQMStore::IBooker &, int type = 0, bool isUpgrade = false); void fill(const TrackerTopology *pTT, const LocalTrajectoryParameters <p, bool isHitValid, diff --git a/DQM/SiPixelMonitorTrack/interface/SiPixelHitEfficiencySource.h b/DQM/SiPixelMonitorTrack/interface/SiPixelHitEfficiencySource.h index f61d33fa26885..892aa41173fe0 100644 --- a/DQM/SiPixelMonitorTrack/interface/SiPixelHitEfficiencySource.h +++ b/DQM/SiPixelMonitorTrack/interface/SiPixelHitEfficiencySource.h @@ -17,12 +17,6 @@ #include "DQM/SiPixelMonitorTrack/interface/SiPixelHitEfficiencyModule.h" #include "DQMServices/Core/interface/DQMEDAnalyzer.h" #include "DQMServices/Core/interface/DQMStore.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" // Files added for monitoring track quantities #include "Alignment/OfflineValidation/interface/TrackerValidationVariables.h" @@ -38,6 +32,17 @@ #include "Geometry/TrackerGeometryBuilder/interface/RectangularPixelTopology.h" #include "RecoTracker/MeasurementDet/interface/MeasurementTrackerEvent.h" #include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" + +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "RecoTracker/MeasurementDet/interface/MeasurementTracker.h" +#include "RecoTracker/Record/interface/CkfComponentsRecord.h" +#include "TrackingTools/KalmanUpdators/interface/Chi2MeasurementEstimator.h" +#include "TrackingTools/Records/interface/TrackingComponentsRecord.h" +#include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelClusterParameterEstimator.h" + #include class SiPixelHitEfficiencySource : public DQMEDAnalyzer { @@ -60,6 +65,15 @@ class SiPixelHitEfficiencySource : public DQMEDAnalyzer { edm::EDGetTokenT measurementTrackerEventToken_; + edm::ESGetToken trackerTopoToken_; + edm::ESGetToken trackerGeomToken_; + edm::ESGetToken measurementTrackerToken_; + edm::ESGetToken chi2MeasurementEstimatorBaseToken_; + edm::ESGetToken propagatorToken_; + edm::ESGetToken pixelClusterParameterEstimatorToken_; + edm::ESGetToken trackerTopoTokenBeginRun_; + edm::ESGetToken trackerGeomTokenBeginRun_; + bool applyEdgeCut_; double nSigma_EdgeCut_; diff --git a/DQM/SiPixelMonitorTrack/interface/SiPixelTrackResidualModule.h b/DQM/SiPixelMonitorTrack/interface/SiPixelTrackResidualModule.h index f621b496ed5f4..b128ffb9dbf82 100644 --- a/DQM/SiPixelMonitorTrack/interface/SiPixelTrackResidualModule.h +++ b/DQM/SiPixelMonitorTrack/interface/SiPixelTrackResidualModule.h @@ -14,10 +14,11 @@ #ifndef SiPixelMonitorTrack_SiPixelTrackResidualModule_h #define SiPixelMonitorTrack_SiPixelTrackResidualModule_h -#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DQMServices/Core/interface/DQMStore.h" #include "DataFormats/GeometryCommonDetAlgo/interface/MeasurementVector.h" #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include namespace edm { @@ -34,7 +35,7 @@ class SiPixelTrackResidualModule { ~SiPixelTrackResidualModule(); void book(const edm::ParameterSet &, - edm::EventSetup const &, + const TrackerTopology *, DQMStore::IBooker &, bool reducedSet = true, int type = 0, diff --git a/DQM/SiPixelMonitorTrack/interface/SiPixelTrackResidualSource.h b/DQM/SiPixelMonitorTrack/interface/SiPixelTrackResidualSource.h index 5c189517d88c7..135be5c2f8218 100644 --- a/DQM/SiPixelMonitorTrack/interface/SiPixelTrackResidualSource.h +++ b/DQM/SiPixelMonitorTrack/interface/SiPixelTrackResidualSource.h @@ -19,28 +19,26 @@ #include "DQM/SiPixelMonitorTrack/interface/SiPixelTrackResidualModule.h" #include "DQMServices/Core/interface/DQMEDAnalyzer.h" #include "DQMServices/Core/interface/DQMStore.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" // Files added for monitoring track quantities #include "Alignment/OfflineValidation/interface/TrackerValidationVariables.h" #include "Alignment/TrackerAlignment/interface/TrackerAlignableId.h" #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h" -//#include "DataFormats/SiPixelDetId/interface/PixelBarrelNameWrapper.h" #include "DataFormats/TrackerCommon/interface/PixelBarrelName.h" #include "DataFormats/SiPixelDetId/interface/PixelBarrelNameUpgrade.h" #include "DataFormats/TrackerCommon/interface/PixelEndcapName.h" #include "DataFormats/SiPixelDetId/interface/PixelEndcapNameUpgrade.h" #include "DataFormats/TrackReco/interface/Track.h" - #include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" -#include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" +#include "TrackingTools/Records/interface/TransientTrackRecord.h" +#include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHitBuilder.h" +#include "TrackingTools/Records/interface/TransientRecHitRecord.h" #include "DataFormats/SiPixelDigi/interface/PixelDigi.h" #include @@ -90,6 +88,13 @@ class SiPixelTrackResidualSource : public DQMEDAnalyzer { edm::InputTag digisrc_; edm::EDGetTokenT> digisrcToken_; + edm::ESGetToken trackerTopoToken_; + edm::ESGetToken trackerGeomToken_; + edm::ESGetToken transientTrackBuilderToken_; + edm::ESGetToken transientTrackingRecHitBuilderToken_; + edm::ESGetToken trackerTopoTokenBeginRun_; + edm::ESGetToken trackerGeomTokenBeginRun_; + bool debug_; bool modOn; bool reducedSet; diff --git a/DQM/SiPixelMonitorTrack/src/SiPixelHitEfficiencyModule.cc b/DQM/SiPixelMonitorTrack/src/SiPixelHitEfficiencyModule.cc index a6e38a60f75f2..2d34f1d084f94 100644 --- a/DQM/SiPixelMonitorTrack/src/SiPixelHitEfficiencyModule.cc +++ b/DQM/SiPixelMonitorTrack/src/SiPixelHitEfficiencyModule.cc @@ -16,11 +16,6 @@ #include "DQM/SiPixelCommon/interface/SiPixelHistogramId.h" #include "DQM/SiPixelMonitorTrack/interface/SiPixelHitEfficiencyModule.h" #include "DQMServices/Core/interface/DQMStore.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/Utilities/interface/InputTag.h" - // Data Formats #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/TrackerCommon/interface/PixelBarrelName.h" @@ -28,10 +23,8 @@ #include "DataFormats/TrackerCommon/interface/PixelEndcapName.h" #include "DataFormats/SiPixelDetId/interface/PixelEndcapNameUpgrade.h" #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" using namespace std; @@ -42,14 +35,10 @@ SiPixelHitEfficiencyModule::SiPixelHitEfficiencyModule(uint32_t id) : id_(id) { SiPixelHitEfficiencyModule::~SiPixelHitEfficiencyModule() {} void SiPixelHitEfficiencyModule::book(const edm::ParameterSet &iConfig, - edm::EventSetup const &iSetup, + const TrackerTopology *pTT, DQMStore::IBooker &iBooker, int type, bool isUpgrade) { - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology *pTT = tTopoHandle.product(); - bool barrel = DetId(id_).subdetId() == static_cast(PixelSubdetector::PixelBarrel); bool endcap = DetId(id_).subdetId() == static_cast(PixelSubdetector::PixelEndcap); bool isHalfModule = false; diff --git a/DQM/SiPixelMonitorTrack/src/SiPixelHitEfficiencySource.cc b/DQM/SiPixelMonitorTrack/src/SiPixelHitEfficiencySource.cc index 9fa9037d0a5e4..45b5deacbdc09 100644 --- a/DQM/SiPixelMonitorTrack/src/SiPixelHitEfficiencySource.cc +++ b/DQM/SiPixelMonitorTrack/src/SiPixelHitEfficiencySource.cc @@ -17,53 +17,34 @@ #include #include -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Framework/interface/MakerMacros.h" -#include "DataFormats/Common/interface/Handle.h" #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h" - #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/TrackerCommon/interface/PixelBarrelName.h" #include "DataFormats/SiPixelDetId/interface/PixelBarrelNameUpgrade.h" #include "DataFormats/TrackerCommon/interface/PixelEndcapName.h" #include "DataFormats/SiPixelDetId/interface/PixelEndcapNameUpgrade.h" #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" - #include "DataFormats/TrackingRecHit/interface/TrackingRecHitFwd.h" #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" - -#include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelClusterParameterEstimator.h" -#include "RecoTracker/TransientTrackingRecHit/interface/TkTransientTrackingRecHitBuilder.h" -//#include "RecoLocalTracker/SiPixelRecHits/plugins/PixelCPEGenericESProducer.h" - #include "TrackingTools/MeasurementDet/interface/LayerMeasurements.h" #include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" #include "TrackingTools/PatternTools/interface/Trajectory.h" -#include "TrackingTools/Records/interface/TrackingComponentsRecord.h" #include "TrackingTools/Records/interface/TransientRecHitRecord.h" #include "TrackingTools/TrackAssociator/interface/TrackDetectorAssociator.h" #include "TrackingTools/TrackFitters/interface/TrajectoryFitter.h" #include "TrackingTools/TrackFitters/interface/TrajectoryStateCombiner.h" #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" #include "TrackingTools/TransientTrack/interface/TransientTrack.h" +#include "TrackingTools/DetLayers/interface/BarrelDetLayer.h" +#include "TrackingTools/MeasurementDet/interface/LayerMeasurements.h" #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h" #include "DQM/SiPixelMonitorTrack/interface/SiPixelHitEfficiencySource.h" -#include "DQMServices/Core/interface/DQMStore.h" - -#include "RecoTracker/MeasurementDet/interface/MeasurementTracker.h" -#include "RecoTracker/MeasurementDet/interface/MeasurementTrackerEvent.h" -#include "RecoTracker/Record/interface/CkfComponentsRecord.h" -#include "TrackingTools/DetLayers/interface/BarrelDetLayer.h" -#include "TrackingTools/KalmanUpdators/interface/Chi2MeasurementEstimator.h" -#include "TrackingTools/MeasurementDet/interface/LayerMeasurements.h" -#include "TrackingTools/Records/interface/TrackingComponentsRecord.h" using namespace std; using namespace edm; @@ -92,6 +73,17 @@ SiPixelHitEfficiencySource::SiPixelHitEfficiencySource(const edm::ParameterSet & measurementTrackerEventToken_ = consumes(std::string("MeasurementTrackerEvent")); + trackerTopoToken_ = esConsumes(); + trackerGeomToken_ = esConsumes(); + measurementTrackerToken_ = esConsumes(); + chi2MeasurementEstimatorBaseToken_ = + esConsumes(edm::ESInputTag("", "Chi2")); + propagatorToken_ = esConsumes(edm::ESInputTag("", "PropagatorWithMaterial")); + pixelClusterParameterEstimatorToken_ = + esConsumes(edm::ESInputTag("", "PixelCPEGeneric")); + trackerTopoTokenBeginRun_ = esConsumes(); + trackerGeomTokenBeginRun_ = esConsumes(); + firstRun = true; LogInfo("PixelDQM") << "SiPixelHitEfficiencySource constructor" << endl; @@ -162,8 +154,7 @@ void SiPixelHitEfficiencySource::dqmBeginRun(const edm::Run &r, edm::EventSetup firstRun = false; } - edm::ESHandle TG; - iSetup.get().get(TG); + edm::ESHandle TG = iSetup.getHandle(trackerGeomTokenBeginRun_); if (debug_) LogVerbatim("PixelDQM") << "TrackerGeometry " << &(*TG) << " size is " << TG->dets().size() << endl; @@ -192,48 +183,52 @@ void SiPixelHitEfficiencySource::bookHistograms(DQMStore::IBooker &iBooker, // book residual histograms in theSiPixelFolder - one (x,y) pair of histograms // per det SiPixelFolderOrganizer theSiPixelFolder(false); + + edm::ESHandle tTopoHandle = iSetup.getHandle(trackerTopoTokenBeginRun_); + const TrackerTopology *pTT = tTopoHandle.product(); + for (std::map::iterator pxd = theSiPixelStructure.begin(); pxd != theSiPixelStructure.end(); pxd++) { if (modOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*pxd).first, 0, isUpgrade)) - (*pxd).second->book(pSet_, iSetup, iBooker, 0, isUpgrade); + (*pxd).second->book(pSet_, pTT, iBooker, 0, isUpgrade); else throw cms::Exception("LogicError") << "SiPixelHitEfficiencySource Folder Creation Failed! "; } if (ladOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*pxd).first, 1, isUpgrade)) - (*pxd).second->book(pSet_, iSetup, iBooker, 1, isUpgrade); + (*pxd).second->book(pSet_, pTT, iBooker, 1, isUpgrade); else throw cms::Exception("LogicError") << "SiPixelHitEfficiencySource ladder Folder Creation Failed! "; } if (layOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*pxd).first, 2, isUpgrade)) - (*pxd).second->book(pSet_, iSetup, iBooker, 2, isUpgrade); + (*pxd).second->book(pSet_, pTT, iBooker, 2, isUpgrade); else throw cms::Exception("LogicError") << "SiPixelHitEfficiencySource layer Folder Creation Failed! "; } if (phiOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*pxd).first, 3, isUpgrade)) - (*pxd).second->book(pSet_, iSetup, iBooker, 3, isUpgrade); + (*pxd).second->book(pSet_, pTT, iBooker, 3, isUpgrade); else throw cms::Exception("LogicError") << "SiPixelHitEfficiencySource phi Folder Creation Failed! "; } if (bladeOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*pxd).first, 4, isUpgrade)) - (*pxd).second->book(pSet_, iSetup, iBooker, 4, isUpgrade); + (*pxd).second->book(pSet_, pTT, iBooker, 4, isUpgrade); else throw cms::Exception("LogicError") << "SiPixelHitEfficiencySource Blade Folder Creation Failed! "; } if (diskOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*pxd).first, 5, isUpgrade)) - (*pxd).second->book(pSet_, iSetup, iBooker, 5, isUpgrade); + (*pxd).second->book(pSet_, pTT, iBooker, 5, isUpgrade); else throw cms::Exception("LogicError") << "SiPixelHitEfficiencySource Disk Folder Creation Failed! "; } if (ringOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*pxd).first, 6, isUpgrade)) - (*pxd).second->book(pSet_, iSetup, iBooker, 6, isUpgrade); + (*pxd).second->book(pSet_, pTT, iBooker, 6, isUpgrade); else throw cms::Exception("LogicError") << "SiPixelHitEfficiencySource Ring Folder Creation Failed! "; } @@ -286,8 +281,7 @@ void SiPixelHitEfficiencySource::bookHistograms(DQMStore::IBooker &iBooker, } void SiPixelHitEfficiencySource::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); + edm::ESHandle tTopoHandle = iSetup.getHandle(trackerTopoToken_); const TrackerTopology *pTT = tTopoHandle.product(); edm::Handle vertexCollectionHandle; @@ -352,16 +346,12 @@ void SiPixelHitEfficiencySource::analyze(const edm::Event &iEvent, const edm::Ev float maxlxmatch_ = 0.2; float maxlymatch_ = 0.2; bool keepOriginalMissingHit_ = true; - ESHandle measurementTrackerHandle; - - iSetup.get().get(measurementTrackerHandle); + edm::ESHandle measurementTrackerHandle = iSetup.getHandle(measurementTrackerToken_); - edm::ESHandle est; - iSetup.get().get("Chi2", est); + edm::ESHandle est = iSetup.getHandle(chi2MeasurementEstimatorBaseToken_); edm::Handle measurementTrackerEventHandle; iEvent.getByToken(measurementTrackerEventToken_, measurementTrackerEventHandle); - edm::ESHandle prop; - iSetup.get().get("PropagatorWithMaterial", prop); + edm::ESHandle prop = iSetup.getHandle(propagatorToken_); Propagator *thePropagator = prop.product()->clone(); // determines direction of the propagator => inward if (extrapolateFrom_ >= extrapolateTo_) { @@ -737,12 +727,11 @@ void SiPixelHitEfficiencySource::analyze(const edm::Event &iEvent, const edm::Ev float dx_cl[2]; float dy_cl[2]; dx_cl[0] = dx_cl[1] = dy_cl[0] = dy_cl[1] = -9999.; - ESHandle cpEstimator; - iSetup.get().get("PixelCPEGeneric", cpEstimator); + edm::ESHandle cpEstimator = + iSetup.getHandle(pixelClusterParameterEstimatorToken_); if (cpEstimator.isValid()) { const PixelClusterParameterEstimator &cpe(*cpEstimator); - edm::ESHandle tracker; - iSetup.get().get(tracker); + edm::ESHandle tracker = iSetup.getHandle(trackerGeomToken_); if (tracker.isValid()) { const TrackerGeometry *tkgeom = &(*tracker); edm::Handle> clusterCollectionHandle; diff --git a/DQM/SiPixelMonitorTrack/src/SiPixelTrackResidualModule.cc b/DQM/SiPixelMonitorTrack/src/SiPixelTrackResidualModule.cc index 8792c091d5d9f..7c75ef1ef121c 100644 --- a/DQM/SiPixelMonitorTrack/src/SiPixelTrackResidualModule.cc +++ b/DQM/SiPixelMonitorTrack/src/SiPixelTrackResidualModule.cc @@ -15,13 +15,6 @@ #include "DQM/SiPixelCommon/interface/SiPixelHistogramId.h" #include "DQM/SiPixelMonitorTrack/interface/SiPixelTrackResidualModule.h" -#include "DQMServices/Core/interface/DQMStore.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" // Data Formats #include "DataFormats/DetId/interface/DetId.h" @@ -41,15 +34,11 @@ SiPixelTrackResidualModule::SiPixelTrackResidualModule(uint32_t id) : id_(id) { SiPixelTrackResidualModule::~SiPixelTrackResidualModule() {} void SiPixelTrackResidualModule::book(const edm::ParameterSet &iConfig, - edm::EventSetup const &iSetup, + const TrackerTopology *pTT, DQMStore::IBooker &iBooker, bool reducedSet, int type, bool isUpgrade) { - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology *pTT = tTopoHandle.product(); - bool barrel = DetId(id_).subdetId() == static_cast(PixelSubdetector::PixelBarrel); bool endcap = DetId(id_).subdetId() == static_cast(PixelSubdetector::PixelEndcap); bool isHalfModule = false; diff --git a/DQM/SiPixelMonitorTrack/src/SiPixelTrackResidualSource.cc b/DQM/SiPixelMonitorTrack/src/SiPixelTrackResidualSource.cc index 050b2747ddfd2..dba902bde3f2e 100644 --- a/DQM/SiPixelMonitorTrack/src/SiPixelTrackResidualSource.cc +++ b/DQM/SiPixelMonitorTrack/src/SiPixelTrackResidualSource.cc @@ -17,16 +17,12 @@ #include #include -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Framework/interface/MakerMacros.h" -#include "DataFormats/Common/interface/Handle.h" #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h" #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" -//#include "DataFormats/SiPixelDetId/interface/PixelBarrelNameWrapper.h" #include "DataFormats/TrackerCommon/interface/PixelBarrelName.h" #include "DataFormats/SiPixelDetId/interface/PixelBarrelNameUpgrade.h" #include "DataFormats/TrackingRecHit/interface/TrackingRecHitFwd.h" @@ -34,28 +30,17 @@ #include "Geometry/CommonTopologies/interface/PixelTopology.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "RecoTracker/TransientTrackingRecHit/interface/TkTransientTrackingRecHitBuilder.h" - -#include "TrackingTools/Records/interface/TrackingComponentsRecord.h" -#include "TrackingTools/Records/interface/TransientRecHitRecord.h" #include "TrackingTools/TrackFitters/interface/TrajectoryFitter.h" #include "TrackingTools/TrackFitters/interface/TrajectoryStateCombiner.h" #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h" #include "DQM/SiPixelMonitorTrack/interface/SiPixelTrackResidualSource.h" -#include "DQMServices/Core/interface/DQMStore.h" // Claudia new libraries #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "TrackingTools/Records/interface/TrackingComponentsRecord.h" -#include "TrackingTools/Records/interface/TransientRecHitRecord.h" -#include "TrackingTools/Records/interface/TransientTrackRecord.h" #include "TrackingTools/TransientTrack/interface/TransientTrack.h" -#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" -#include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h" -#include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHitBuilder.h" using namespace std; using namespace edm; @@ -94,6 +79,15 @@ SiPixelTrackResidualSource::SiPixelTrackResidualSource(const edm::ParameterSet & digisrc_ = pSet_.getParameter("digisrc"); digisrcToken_ = consumes>(pSet_.getParameter("digisrc")); + trackerTopoToken_ = esConsumes(); + trackerGeomToken_ = esConsumes(); + transientTrackBuilderToken_ = + esConsumes(edm::ESInputTag("", "TransientTrackBuilder")); + transientTrackingRecHitBuilderToken_ = + esConsumes(edm::ESInputTag("", ttrhbuilder_)); + trackerTopoTokenBeginRun_ = esConsumes(); + trackerGeomTokenBeginRun_ = esConsumes(); + LogInfo("PixelDQM") << "SiPixelTrackResidualSource constructor" << endl; LogInfo("PixelDQM") << "Mod/Lad/Lay/Phi " << modOn << "/" << ladOn << "/" << layOn << "/" << phiOn << std::endl; LogInfo("PixelDQM") << "Blade/Disk/Ring" << bladeOn << "/" << diskOn << "/" << ringOn << std::endl; @@ -118,12 +112,10 @@ SiPixelTrackResidualSource::~SiPixelTrackResidualSource() { void SiPixelTrackResidualSource::dqmBeginRun(const edm::Run &r, edm::EventSetup const &iSetup) { LogInfo("PixelDQM") << "SiPixelTrackResidualSource beginRun()" << endl; // retrieve TrackerGeometry for pixel dets - edm::ESHandle TG; - iSetup.get().get(TG); + edm::ESHandle TG = iSetup.getHandle(trackerGeomTokenBeginRun_); if (debug_) LogVerbatim("PixelDQM") << "TrackerGeometry " << &(*TG) << " size is " << TG->dets().size() << endl; - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); + edm::ESHandle tTopoHandle = iSetup.getHandle(trackerTopoTokenBeginRun_); const TrackerTopology *pTT = tTopoHandle.product(); // build theSiPixelStructure with the pixel barrel and endcap dets from @@ -160,6 +152,10 @@ void SiPixelTrackResidualSource::bookHistograms(DQMStore::IBooker &iBooker, // book residual histograms in theSiPixelFolder - one (x,y) pair of histograms // per det SiPixelFolderOrganizer theSiPixelFolder(false); + + edm::ESHandle tTopoHandle = iSetup.getHandle(trackerTopoTokenBeginRun_); + const TrackerTopology *pTT = tTopoHandle.product(); + std::stringstream nameX, titleX, nameY, titleY; if (ladOn) { @@ -185,43 +181,43 @@ void SiPixelTrackResidualSource::bookHistograms(DQMStore::IBooker &iBooker, pxd++) { if (modOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*pxd).first, 0, isUpgrade)) - (*pxd).second->book(pSet_, iSetup, iBooker, reducedSet, 0, isUpgrade); + (*pxd).second->book(pSet_, pTT, iBooker, reducedSet, 0, isUpgrade); else throw cms::Exception("LogicError") << "SiPixelTrackResidualSource Folder Creation Failed! "; } if (ladOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*pxd).first, 1, isUpgrade)) { - (*pxd).second->book(pSet_, iSetup, iBooker, reducedSet, 1, isUpgrade); + (*pxd).second->book(pSet_, pTT, iBooker, reducedSet, 1, isUpgrade); } else throw cms::Exception("LogicError") << "SiPixelTrackResidualSource ladder Folder Creation Failed! "; } if (layOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*pxd).first, 2, isUpgrade)) - (*pxd).second->book(pSet_, iSetup, iBooker, reducedSet, 2, isUpgrade); + (*pxd).second->book(pSet_, pTT, iBooker, reducedSet, 2, isUpgrade); else throw cms::Exception("LogicError") << "SiPixelTrackResidualSource layer Folder Creation Failed! "; } if (phiOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*pxd).first, 3, isUpgrade)) - (*pxd).second->book(pSet_, iSetup, iBooker, reducedSet, 3, isUpgrade); + (*pxd).second->book(pSet_, pTT, iBooker, reducedSet, 3, isUpgrade); else throw cms::Exception("LogicError") << "SiPixelTrackResidualSource phi Folder Creation Failed! "; } if (bladeOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*pxd).first, 4, isUpgrade)) - (*pxd).second->book(pSet_, iSetup, iBooker, reducedSet, 4, isUpgrade); + (*pxd).second->book(pSet_, pTT, iBooker, reducedSet, 4, isUpgrade); else throw cms::Exception("LogicError") << "SiPixelTrackResidualSource Blade Folder Creation Failed! "; } if (diskOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*pxd).first, 5, isUpgrade)) - (*pxd).second->book(pSet_, iSetup, iBooker, reducedSet, 5, isUpgrade); + (*pxd).second->book(pSet_, pTT, iBooker, reducedSet, 5, isUpgrade); else throw cms::Exception("LogicError") << "SiPixelTrackResidualSource Disk Folder Creation Failed! "; } if (ringOn) { if (theSiPixelFolder.setModuleFolder(iBooker, (*pxd).first, 6, isUpgrade)) - (*pxd).second->book(pSet_, iSetup, iBooker, reducedSet, 6, isUpgrade); + (*pxd).second->book(pSet_, pTT, iBooker, reducedSet, 6, isUpgrade); else throw cms::Exception("LogicError") << "SiPixelTrackResidualSource Ring Folder Creation Failed! "; } @@ -826,15 +822,13 @@ void SiPixelTrackResidualSource::bookHistograms(DQMStore::IBooker &iBooker, void SiPixelTrackResidualSource::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); + edm::ESHandle tTopoHandle = iSetup.getHandle(trackerTopoToken_); const TrackerTopology *tTopo = tTopoHandle.product(); // retrieve TrackerGeometry again and MagneticField for use in transforming // a TrackCandidate's P(ersistent)TrajectoryStateoOnDet (PTSoD) to a // TrajectoryStateOnSurface (TSoS) - ESHandle TG; - iSetup.get().get(TG); + edm::ESHandle TG = iSetup.getHandle(trackerGeomToken_); const TrackerGeometry *theTrackerGeometry = TG.product(); // analytic triplet method to calculate the track residuals in the pixe barrel @@ -901,13 +895,12 @@ void SiPixelTrackResidualSource::analyze(const edm::Event &iEvent, const edm::Ev // // transient track builder, needs B-field from data base (global tag in .py) // - edm::ESHandle theB; - iSetup.get().get("TransientTrackBuilder", theB); + edm::ESHandle theB = iSetup.getHandle(transientTrackBuilderToken_); // get the TransienTrackingRecHitBuilder needed for extracting the global // position of the hits in the pixel - edm::ESHandle theTrackerRecHitBuilder; - iSetup.get().get(ttrhbuilder_, theTrackerRecHitBuilder); + edm::ESHandle theTrackerRecHitBuilder = + iSetup.getHandle(transientTrackingRecHitBuilderToken_); // check that tracks are valid if (TracksForRes.failedToGet()) @@ -915,15 +908,6 @@ void SiPixelTrackResidualSource::analyze(const edm::Event &iEvent, const edm::Ev if (!TracksForRes.isValid()) return; - // get tracker geometry - edm::ESHandle pDD; - iSetup.get().get(pDD); - - if (!pDD.isValid()) { - cout << "Unable to find TrackerDigiGeometry. Return\n"; - return; - } - int kk = -1; //---------------------------------------------------------------------------- // Residuals: diff --git a/DQM/SiPixelPhase1Common/interface/HistogramManager.h b/DQM/SiPixelPhase1Common/interface/HistogramManager.h index 990fcbca344f2..84bba8ed9602a 100644 --- a/DQM/SiPixelPhase1Common/interface/HistogramManager.h +++ b/DQM/SiPixelPhase1Common/interface/HistogramManager.h @@ -103,6 +103,7 @@ class HistogramManager { int range_y_nbins; double range_y_min; double range_y_max; + bool statsOverflows; // can be used in "custom" harvesting in online. edm::LuminosityBlock const* lumisection = nullptr; diff --git a/DQM/SiPixelPhase1Common/plugins/SiPixelPhase1DeadFEDChannels.cc b/DQM/SiPixelPhase1Common/plugins/SiPixelPhase1DeadFEDChannels.cc index 64a4acc18d886..f30d5e4660622 100644 --- a/DQM/SiPixelPhase1Common/plugins/SiPixelPhase1DeadFEDChannels.cc +++ b/DQM/SiPixelPhase1Common/plugins/SiPixelPhase1DeadFEDChannels.cc @@ -47,6 +47,8 @@ namespace { private: edm::EDGetTokenT pixelFEDChannelCollectionToken_; + edm::ESGetToken trackerGeomToken_; + edm::ESGetToken cablingMapToken_; bool firstEvent_; const TrackerGeometry* trackerGeometry_ = nullptr; @@ -56,6 +58,8 @@ namespace { SiPixelPhase1DeadFEDChannels::SiPixelPhase1DeadFEDChannels(const edm::ParameterSet& iConfig) : SiPixelPhase1Base(iConfig) { pixelFEDChannelCollectionToken_ = consumes(edm::InputTag("siPixelDigis")); + trackerGeomToken_ = esConsumes(); + cablingMapToken_ = esConsumes(); firstEvent_ = true; }; @@ -64,12 +68,10 @@ namespace { return; if (firstEvent_) { - edm::ESHandle tmpTkGeometry; - iSetup.get().get(tmpTkGeometry); + edm::ESHandle tmpTkGeometry = iSetup.getHandle(trackerGeomToken_); trackerGeometry_ = &(*tmpTkGeometry); - edm::ESHandle pixelCabling; - iSetup.get().get(pixelCabling); + edm::ESHandle pixelCabling = iSetup.getHandle(cablingMapToken_); cablingMap = pixelCabling.product(); firstEvent_ = false; diff --git a/DQM/SiPixelPhase1Common/plugins/SiPixelPhase1RawData.cc b/DQM/SiPixelPhase1Common/plugins/SiPixelPhase1RawData.cc index 0a67d0597cc19..e776a33345f28 100644 --- a/DQM/SiPixelPhase1Common/plugins/SiPixelPhase1RawData.cc +++ b/DQM/SiPixelPhase1Common/plugins/SiPixelPhase1RawData.cc @@ -11,9 +11,6 @@ #include "DataFormats/SiPixelRawData/interface/SiPixelRawDataError.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "DataFormats/GeometryVector/interface/LocalPoint.h" - namespace { class SiPixelPhase1RawData final : public SiPixelPhase1Base { diff --git a/DQM/SiPixelPhase1Common/python/HistogramManager_cfi.py b/DQM/SiPixelPhase1Common/python/HistogramManager_cfi.py index af8e4185c01d4..306decf7eb8da 100644 --- a/DQM/SiPixelPhase1Common/python/HistogramManager_cfi.py +++ b/DQM/SiPixelPhase1Common/python/HistogramManager_cfi.py @@ -49,6 +49,9 @@ # Setting this to False hides all plots of this HistogramManager. It does not even record any data. enabled = cms.bool(True), + # If this is set to False Overflows will not be used for statistics evaluation (i.e. Mean,RMS) + statsOverflows = cms.bool(True), + # a.k.a. online harvesting. Might be useful in offline for custom harvesting, # but the main purpose is online, where this is on by default. perLumiHarvesting = cms.bool(False), diff --git a/DQM/SiPixelPhase1Common/src/GeometryInterface.cc b/DQM/SiPixelPhase1Common/src/GeometryInterface.cc index 931cc6374055f..0ded28340fafd 100644 --- a/DQM/SiPixelPhase1Common/src/GeometryInterface.cc +++ b/DQM/SiPixelPhase1Common/src/GeometryInterface.cc @@ -12,11 +12,6 @@ // general plotting helpers #include "DQM/SiPixelPhase1Common/interface/SiPixelCoordinates.h" -// edm stuff -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Utilities/interface/ESInputTag.h" - // Tracker Geometry/Topology stuff #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" diff --git a/DQM/SiPixelPhase1Common/src/HistogramManager.cc b/DQM/SiPixelPhase1Common/src/HistogramManager.cc index e084cce375570..fd485c776c9b6 100644 --- a/DQM/SiPixelPhase1Common/src/HistogramManager.cc +++ b/DQM/SiPixelPhase1Common/src/HistogramManager.cc @@ -9,7 +9,6 @@ #include // Geometry stuff -#include "FWCore/Framework/interface/ESHandle.h" #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" @@ -33,7 +32,8 @@ HistogramManager::HistogramManager(const edm::ParameterSet& iconfig, GeometryInt range_x_max(iconfig.getParameter("range_max")), range_y_nbins(iconfig.getParameter("range_y_nbins")), range_y_min(iconfig.getParameter("range_y_min")), - range_y_max(iconfig.getParameter("range_y_max")) { + range_y_max(iconfig.getParameter("range_y_max")), + statsOverflows(iconfig.getParameter("statsOverflows")) { auto spec_configs = iconfig.getParameter("specs"); for (const auto& spec : spec_configs) { // this would fit better in SummationSpecification(...), but it has to @@ -296,6 +296,8 @@ void HistogramManager::book(DQMStore::IBooker& iBooker, edm::EventSetup const& i GeometryInterface::Value binwidth_y = 0; std::string title, xlabel, ylabel, zlabel; bool do_profile = false; + bool statsOverflows = true; + ; }; std::map toBeBooked; @@ -343,6 +345,7 @@ void HistogramManager::book(DQMStore::IBooker& iBooker, edm::EventSetup const& i // create new histo MEInfo& mei = toBeBooked[significantvalues]; mei.title = this->title; + mei.statsOverflows = this->statsOverflows; if (bookCounters) mei.title = "Number of " + mei.title + " per Event and " + geometryInterface.pretty(*(s.steps[0].columns.end() - 1)); @@ -519,6 +522,7 @@ void HistogramManager::book(DQMStore::IBooker& iBooker, edm::EventSetup const& i assert(!"Illegal Histogram kind."); } h.th1 = h.me->getTH1(); + h.me->setStatOverflows(mei.statsOverflows); } } } @@ -601,6 +605,7 @@ void HistogramManager::executeGroupBy(SummationStep const& step, } else { new_histo.th1->Add(th1); } + new_histo.me->setStatOverflows(e.second.me->getStatOverflows()); } t.swap(out); } @@ -682,6 +687,7 @@ void HistogramManager::executeExtend(SummationStep const& step, } else { assert(!"Reduction type not supported"); } + new_histo.me->setStatOverflows(e.second.me->getStatOverflows()); } else { assert(!"2D extend not implemented in harvesting."); } diff --git a/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1RecHits.cc b/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1RecHits.cc index d3b05430bada2..fb6665bc3567b 100644 --- a/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1RecHits.cc +++ b/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1RecHits.cc @@ -11,7 +11,6 @@ #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/GeometryVector/interface/LocalPoint.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" @@ -35,6 +34,8 @@ namespace { edm::EDGetTokenT srcToken_; edm::EDGetTokenT offlinePrimaryVerticesToken_; + edm::ESGetToken trackerGeomToken_; + bool onlyValid_; bool applyVertexCut_; }; @@ -44,6 +45,8 @@ namespace { offlinePrimaryVerticesToken_ = consumes(std::string("offlinePrimaryVertices")); + trackerGeomToken_ = esConsumes(); + onlyValid_ = iConfig.getParameter("onlyValidHits"); applyVertexCut_ = iConfig.getUntrackedParameter("VertexCut", true); @@ -53,8 +56,7 @@ namespace { if (!checktrigger(iEvent, iSetup, DCS)) return; - edm::ESHandle tracker; - iSetup.get().get(tracker); + edm::ESHandle tracker = iSetup.getHandle(trackerGeomToken_); assert(tracker.isValid()); edm::Handle tracks; diff --git a/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1TrackClusters.cc b/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1TrackClusters.cc index 9d933ddf22f62..e20d91d101f99 100644 --- a/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1TrackClusters.cc +++ b/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1TrackClusters.cc @@ -17,7 +17,6 @@ #include "DataFormats/SiPixelCluster/interface/SiPixelClusterShapeCache.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" @@ -83,6 +82,10 @@ namespace { edm::EDGetTokenT tracksToken_; edm::EDGetTokenT offlinePrimaryVerticesToken_; edm::EDGetTokenT pixelClusterShapeCacheToken_; + + edm::ESGetToken trackerTopoToken_; + edm::ESGetToken trackerGeomToken_; + edm::ESGetToken clusterShapeHitFilterToken_; }; SiPixelPhase1TrackClusters::SiPixelPhase1TrackClusters(const edm::ParameterSet& iConfig) @@ -95,6 +98,11 @@ namespace { pixelClusterShapeCacheToken_ = consumes(iConfig.getParameter("clusterShapeCache")); + + trackerTopoToken_ = esConsumes(); + trackerGeomToken_ = esConsumes(); + clusterShapeHitFilterToken_ = + esConsumes(edm::ESInputTag("", "ClusterShapeHitFilter")); } void SiPixelPhase1TrackClusters::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { @@ -108,16 +116,13 @@ namespace { } // get geometry - edm::ESHandle tracker; - iSetup.get().get(tracker); + edm::ESHandle tracker = iSetup.getHandle(trackerGeomToken_); assert(tracker.isValid()); - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); + edm::ESHandle tTopoHandle = iSetup.getHandle(trackerTopoToken_); auto const& tkTpl = *tTopoHandle; - edm::ESHandle shapeFilterH; - iSetup.get().get("ClusterShapeHitFilter", shapeFilterH); + edm::ESHandle shapeFilterH = iSetup.getHandle(clusterShapeHitFilterToken_); auto const& shapeFilter = *shapeFilterH; edm::Handle vertices; diff --git a/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1TrackEfficiency.cc b/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1TrackEfficiency.cc index ae05624d07783..6b840f1623f55 100644 --- a/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1TrackEfficiency.cc +++ b/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1TrackEfficiency.cc @@ -12,7 +12,6 @@ #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" @@ -56,6 +55,13 @@ namespace { edm::EDGetTokenT tracker_; //new bool applyVertexCut_; + edm::ESGetToken trackerTopoToken_; + edm::ESGetToken trackerGeomToken_; + edm::ESGetToken propagatorToken_; + edm::ESGetToken chi2MeasurementEstimatorBaseToken_; + edm::ESGetToken measurementTrackerToken_; + edm::ESGetToken pixelClusterParameterEstimatorToken_; + const TrackerTopology* trackerTopology_; const Propagator* trackerPropagator_; const MeasurementEstimator* chi2MeasurementEstimator_; @@ -71,6 +77,15 @@ namespace { trajTrackCollectionToken_ = consumes(iConfig.getParameter("trajectoryInput")); clustersToken_ = consumes>(iConfig.getParameter("clusters")); + + trackerTopoToken_ = esConsumes(); + trackerGeomToken_ = esConsumes(); + propagatorToken_ = esConsumes(edm::ESInputTag("", "PropagatorWithMaterial")); + chi2MeasurementEstimatorBaseToken_ = + esConsumes(edm::ESInputTag("", "Chi2")); + measurementTrackerToken_ = esConsumes(); + pixelClusterParameterEstimatorToken_ = + esConsumes(edm::ESInputTag("", "PixelCPEGeneric")); } void SiPixelPhase1TrackEfficiency::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { @@ -78,8 +93,7 @@ namespace { return; // get geometry - edm::ESHandle tracker; - iSetup.get().get(tracker); + edm::ESHandle tracker = iSetup.getHandle(trackerGeomToken_); assert(tracker.isValid()); // get primary vertex @@ -87,28 +101,25 @@ namespace { iEvent.getByToken(vtxToken_, vertices); // TrackerTopology for module informations - edm::ESHandle trackerTopologyHandle; - iSetup.get().get(trackerTopologyHandle); + edm::ESHandle trackerTopologyHandle = iSetup.getHandle(trackerTopoToken_); trackerTopology_ = trackerTopologyHandle.product(); // Tracker propagator for propagating tracks to other layers - edm::ESHandle propagatorHandle; - iSetup.get().get("PropagatorWithMaterial", propagatorHandle); + edm::ESHandle propagatorHandle = iSetup.getHandle(propagatorToken_); std::unique_ptr propagatorUniquePtr(propagatorHandle.product()->clone()); trackerPropagator_ = propagatorUniquePtr.get(); const_cast(trackerPropagator_)->setPropagationDirection(oppositeToMomentum); // Measurement estimator - edm::ESHandle chi2MeasurementEstimatorHandle; - iSetup.get().get("Chi2", chi2MeasurementEstimatorHandle); + edm::ESHandle chi2MeasurementEstimatorHandle = + iSetup.getHandle(chi2MeasurementEstimatorBaseToken_); chi2MeasurementEstimator_ = chi2MeasurementEstimatorHandle.product(); //Tracker edm::Handle trackerMeas; iEvent.getByToken(tracker_, trackerMeas); - edm::ESHandle measurementTrackerHandle; - iSetup.get().get(measurementTrackerHandle); + edm::ESHandle measurementTrackerHandle = iSetup.getHandle(measurementTrackerToken_); //vertices if (!vertices.isValid()) @@ -139,8 +150,7 @@ namespace { return; // - edm::ESHandle cpEstimator; - iSetup.get().get("PixelCPEGeneric", cpEstimator); + edm::ESHandle cpEstimator = iSetup.getHandle(pixelClusterParameterEstimatorToken_); if (!cpEstimator.isValid()) return; diff --git a/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1TrackResiduals.cc b/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1TrackResiduals.cc index 6f51b313ec9fc..04bf6d6ed2568 100644 --- a/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1TrackResiduals.cc +++ b/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1TrackResiduals.cc @@ -10,8 +10,6 @@ #include "Alignment/OfflineValidation/interface/TrackerValidationVariables.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" @@ -33,6 +31,8 @@ namespace { TrackerValidationVariables validator; edm::EDGetTokenT offlinePrimaryVerticesToken_; + edm::ESGetToken trackerGeomToken_; + bool applyVertexCut_; }; @@ -41,14 +41,15 @@ namespace { applyVertexCut_ = iConfig.getUntrackedParameter("VertexCut", true); offlinePrimaryVerticesToken_ = consumes(iConfig.getParameter("vertices")); + + trackerGeomToken_ = esConsumes(); } void SiPixelPhase1TrackResiduals::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { if (!checktrigger(iEvent, iSetup, DCS)) return; - edm::ESHandle tracker; - iSetup.get().get(tracker); + edm::ESHandle tracker = iSetup.getHandle(trackerGeomToken_); assert(tracker.isValid()); edm::Handle vertices; diff --git a/DQM/SiStripCommissioningDbClients/interface/ApvTimingHistosUsingDb.h b/DQM/SiStripCommissioningDbClients/interface/ApvTimingHistosUsingDb.h index e4b37da564036..212986469b36a 100644 --- a/DQM/SiStripCommissioningDbClients/interface/ApvTimingHistosUsingDb.h +++ b/DQM/SiStripCommissioningDbClients/interface/ApvTimingHistosUsingDb.h @@ -7,7 +7,10 @@ class ApvTimingHistosUsingDb : public CommissioningHistosUsingDb, public ApvTimingHistograms { public: - ApvTimingHistosUsingDb(const edm::ParameterSet& pset, DQMStore*, SiStripConfigDb* const); + ApvTimingHistosUsingDb(const edm::ParameterSet& pset, + DQMStore*, + SiStripConfigDb* const, + edm::ESGetToken tTopoToken); ~ApvTimingHistosUsingDb() override; diff --git a/DQM/SiStripCommissioningDbClients/interface/CalibrationHistosUsingDb.h b/DQM/SiStripCommissioningDbClients/interface/CalibrationHistosUsingDb.h index 030bab61a11b9..29596677edb7c 100644 --- a/DQM/SiStripCommissioningDbClients/interface/CalibrationHistosUsingDb.h +++ b/DQM/SiStripCommissioningDbClients/interface/CalibrationHistosUsingDb.h @@ -15,6 +15,7 @@ class CalibrationHistosUsingDb : public CommissioningHistosUsingDb, public Calib CalibrationHistosUsingDb(const edm::ParameterSet& pset, DQMStore*, SiStripConfigDb* const, + edm::ESGetToken tTopoToken, const sistrip::RunType& task = sistrip::CALIBRATION); ~CalibrationHistosUsingDb() override; diff --git a/DQM/SiStripCommissioningDbClients/interface/CommissioningHistosUsingDb.h b/DQM/SiStripCommissioningDbClients/interface/CommissioningHistosUsingDb.h index 6d5e7fe636c02..6cca7ae38dbdf 100644 --- a/DQM/SiStripCommissioningDbClients/interface/CommissioningHistosUsingDb.h +++ b/DQM/SiStripCommissioningDbClients/interface/CommissioningHistosUsingDb.h @@ -2,6 +2,7 @@ #ifndef DQM_SiStripCommissioningClients_CommissioningHistosUsingDb_H #define DQM_SiStripCommissioningClients_CommissioningHistosUsingDb_H +#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "DataFormats/SiStripCommon/interface/SiStripConstants.h" #include "DQM/SiStripCommissioningClients/interface/CommissioningHistograms.h" #include "OnlineDB/SiStripConfigDb/interface/SiStripConfigDb.h" @@ -12,12 +13,15 @@ class SiStripConfigDb; class SiStripFedCabling; +class TrackerTopology; class CommissioningHistosUsingDb : public virtual CommissioningHistograms { // ---------- public interface ---------- public: - CommissioningHistosUsingDb(SiStripConfigDb* const, sistrip::RunType = sistrip::UNDEFINED_RUN_TYPE); + CommissioningHistosUsingDb(SiStripConfigDb* const, + edm::ESGetToken tTopoToken, + sistrip::RunType = sistrip::UNDEFINED_RUN_TYPE); ~CommissioningHistosUsingDb() override; @@ -82,6 +86,8 @@ class CommissioningHistosUsingDb : public virtual CommissioningHistograms { bool uploadAnal_; bool uploadConf_; + + edm::ESGetToken tTopoToken_; }; inline void CommissioningHistosUsingDb::doUploadConf(bool upload) { uploadConf_ = upload; } diff --git a/DQM/SiStripCommissioningDbClients/interface/DaqScopeModeHistosUsingDb.h b/DQM/SiStripCommissioningDbClients/interface/DaqScopeModeHistosUsingDb.h index 8531c10b4914f..18656fad8502c 100644 --- a/DQM/SiStripCommissioningDbClients/interface/DaqScopeModeHistosUsingDb.h +++ b/DQM/SiStripCommissioningDbClients/interface/DaqScopeModeHistosUsingDb.h @@ -6,7 +6,10 @@ class DaqScopeModeHistosUsingDb : public CommissioningHistosUsingDb, public DaqScopeModeHistograms { public: - DaqScopeModeHistosUsingDb(const edm::ParameterSet& pset, DQMStore*, SiStripConfigDb* const); + DaqScopeModeHistosUsingDb(const edm::ParameterSet& pset, + DQMStore*, + SiStripConfigDb* const, + edm::ESGetToken tTopoToken); ~DaqScopeModeHistosUsingDb() override; diff --git a/DQM/SiStripCommissioningDbClients/interface/FastFedCablingHistosUsingDb.h b/DQM/SiStripCommissioningDbClients/interface/FastFedCablingHistosUsingDb.h index fb1915af0fedd..fb750ce509db0 100644 --- a/DQM/SiStripCommissioningDbClients/interface/FastFedCablingHistosUsingDb.h +++ b/DQM/SiStripCommissioningDbClients/interface/FastFedCablingHistosUsingDb.h @@ -7,7 +7,10 @@ class FastFedCablingHistosUsingDb : public CommissioningHistosUsingDb, public FastFedCablingHistograms { public: - FastFedCablingHistosUsingDb(const edm::ParameterSet& pset, DQMStore*, SiStripConfigDb* const); + FastFedCablingHistosUsingDb(const edm::ParameterSet& pset, + DQMStore*, + SiStripConfigDb* const, + edm::ESGetToken tTopoToken); ~FastFedCablingHistosUsingDb() override; diff --git a/DQM/SiStripCommissioningDbClients/interface/FineDelayHistosUsingDb.h b/DQM/SiStripCommissioningDbClients/interface/FineDelayHistosUsingDb.h index 8ae75fd2192ee..6d84abad8de8a 100644 --- a/DQM/SiStripCommissioningDbClients/interface/FineDelayHistosUsingDb.h +++ b/DQM/SiStripCommissioningDbClients/interface/FineDelayHistosUsingDb.h @@ -2,6 +2,7 @@ #ifndef DQM_SiStripCommissioningClients_FineDelayHistosUsingDb_H #define DQM_SiStripCommissioningClients_FineDelayHistosUsingDb_H +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "DQM/SiStripCommissioningClients/interface/SamplingHistograms.h" #include "DQM/SiStripCommissioningDbClients/interface/CommissioningHistosUsingDb.h" #include "OnlineDB/SiStripConfigDb/interface/SiStripConfigDb.h" @@ -12,7 +13,11 @@ class TrackerGeometry; class FineDelayHistosUsingDb : public CommissioningHistosUsingDb, public SamplingHistograms { public: - FineDelayHistosUsingDb(const edm::ParameterSet& pset, DQMStore*, SiStripConfigDb* const); + FineDelayHistosUsingDb(const edm::ParameterSet& pset, + DQMStore*, + SiStripConfigDb* const, + edm::ESGetToken tTopoToken, + edm::ESGetToken tkGeomToken); ~FineDelayHistosUsingDb() override; @@ -31,6 +36,7 @@ class FineDelayHistosUsingDb : public CommissioningHistosUsingDb, public Samplin std::map delays_; + edm::ESGetToken tkGeomToken_; const TrackerGeometry* tracker_; bool cosmic_; diff --git a/DQM/SiStripCommissioningDbClients/interface/LatencyHistosUsingDb.h b/DQM/SiStripCommissioningDbClients/interface/LatencyHistosUsingDb.h index 52e2948c50868..a9c477534c598 100644 --- a/DQM/SiStripCommissioningDbClients/interface/LatencyHistosUsingDb.h +++ b/DQM/SiStripCommissioningDbClients/interface/LatencyHistosUsingDb.h @@ -10,7 +10,10 @@ class LatencyHistosUsingDb : public CommissioningHistosUsingDb, public SamplingHistograms { public: - LatencyHistosUsingDb(const edm::ParameterSet& pset, DQMStore*, SiStripConfigDb* const); + LatencyHistosUsingDb(const edm::ParameterSet& pset, + DQMStore*, + SiStripConfigDb* const, + edm::ESGetToken tTopoToken); ~LatencyHistosUsingDb() override; diff --git a/DQM/SiStripCommissioningDbClients/interface/NoiseHistosUsingDb.h b/DQM/SiStripCommissioningDbClients/interface/NoiseHistosUsingDb.h index 1caf383581004..1860287cf36fa 100644 --- a/DQM/SiStripCommissioningDbClients/interface/NoiseHistosUsingDb.h +++ b/DQM/SiStripCommissioningDbClients/interface/NoiseHistosUsingDb.h @@ -7,7 +7,10 @@ class NoiseHistosUsingDb : public CommissioningHistosUsingDb, public NoiseHistograms { public: - NoiseHistosUsingDb(const edm::ParameterSet& pset, DQMStore*, SiStripConfigDb* const); + NoiseHistosUsingDb(const edm::ParameterSet& pset, + DQMStore*, + SiStripConfigDb* const, + edm::ESGetToken tTopoToken); ~NoiseHistosUsingDb() override; diff --git a/DQM/SiStripCommissioningDbClients/interface/OptoScanHistosUsingDb.h b/DQM/SiStripCommissioningDbClients/interface/OptoScanHistosUsingDb.h index 1ba4b2d7020bc..bad820661f5de 100644 --- a/DQM/SiStripCommissioningDbClients/interface/OptoScanHistosUsingDb.h +++ b/DQM/SiStripCommissioningDbClients/interface/OptoScanHistosUsingDb.h @@ -7,7 +7,10 @@ class OptoScanHistosUsingDb : public CommissioningHistosUsingDb, public OptoScanHistograms { public: - OptoScanHistosUsingDb(const edm::ParameterSet& pset, DQMStore*, SiStripConfigDb* const); + OptoScanHistosUsingDb(const edm::ParameterSet& pset, + DQMStore*, + SiStripConfigDb* const, + edm::ESGetToken tTopoToken); ~OptoScanHistosUsingDb() override; diff --git a/DQM/SiStripCommissioningDbClients/interface/PedestalsHistosUsingDb.h b/DQM/SiStripCommissioningDbClients/interface/PedestalsHistosUsingDb.h index 6cd3d3b60da85..2ea5ec8a5a989 100644 --- a/DQM/SiStripCommissioningDbClients/interface/PedestalsHistosUsingDb.h +++ b/DQM/SiStripCommissioningDbClients/interface/PedestalsHistosUsingDb.h @@ -7,7 +7,10 @@ class PedestalsHistosUsingDb : public CommissioningHistosUsingDb, public PedestalsHistograms { public: - PedestalsHistosUsingDb(const edm::ParameterSet& pset, DQMStore*, SiStripConfigDb* const); + PedestalsHistosUsingDb(const edm::ParameterSet& pset, + DQMStore*, + SiStripConfigDb* const, + edm::ESGetToken tTopoToken); ~PedestalsHistosUsingDb() override; diff --git a/DQM/SiStripCommissioningDbClients/interface/PedsFullNoiseHistosUsingDb.h b/DQM/SiStripCommissioningDbClients/interface/PedsFullNoiseHistosUsingDb.h index 74b9e29244296..70a3e3b6710f5 100644 --- a/DQM/SiStripCommissioningDbClients/interface/PedsFullNoiseHistosUsingDb.h +++ b/DQM/SiStripCommissioningDbClients/interface/PedsFullNoiseHistosUsingDb.h @@ -7,7 +7,10 @@ class PedsFullNoiseHistosUsingDb : public CommissioningHistosUsingDb, public PedsFullNoiseHistograms { public: - PedsFullNoiseHistosUsingDb(const edm::ParameterSet& pset, DQMStore*, SiStripConfigDb* const); + PedsFullNoiseHistosUsingDb(const edm::ParameterSet& pset, + DQMStore*, + SiStripConfigDb* const, + edm::ESGetToken tTopoToken); ~PedsFullNoiseHistosUsingDb() override; diff --git a/DQM/SiStripCommissioningDbClients/interface/PedsOnlyHistosUsingDb.h b/DQM/SiStripCommissioningDbClients/interface/PedsOnlyHistosUsingDb.h index f37cefddb9fac..de83f70145c79 100644 --- a/DQM/SiStripCommissioningDbClients/interface/PedsOnlyHistosUsingDb.h +++ b/DQM/SiStripCommissioningDbClients/interface/PedsOnlyHistosUsingDb.h @@ -7,7 +7,10 @@ class PedsOnlyHistosUsingDb : public CommissioningHistosUsingDb, public PedsOnlyHistograms { public: - PedsOnlyHistosUsingDb(const edm::ParameterSet& pset, DQMStore*, SiStripConfigDb* const); + PedsOnlyHistosUsingDb(const edm::ParameterSet& pset, + DQMStore*, + SiStripConfigDb* const, + edm::ESGetToken tTopoToken); ~PedsOnlyHistosUsingDb() override; diff --git a/DQM/SiStripCommissioningDbClients/interface/VpspScanHistosUsingDb.h b/DQM/SiStripCommissioningDbClients/interface/VpspScanHistosUsingDb.h index dbf2ffa6fbc23..94df5e8bd5213 100644 --- a/DQM/SiStripCommissioningDbClients/interface/VpspScanHistosUsingDb.h +++ b/DQM/SiStripCommissioningDbClients/interface/VpspScanHistosUsingDb.h @@ -7,7 +7,10 @@ class VpspScanHistosUsingDb : public CommissioningHistosUsingDb, public VpspScanHistograms { public: - VpspScanHistosUsingDb(const edm::ParameterSet& pset, DQMStore*, SiStripConfigDb* const); + VpspScanHistosUsingDb(const edm::ParameterSet& pset, + DQMStore*, + SiStripConfigDb* const, + edm::ESGetToken tTopoToken); ~VpspScanHistosUsingDb() override; diff --git a/DQM/SiStripCommissioningDbClients/plugins/SiStripCommissioningOfflineDbClient.cc b/DQM/SiStripCommissioningDbClients/plugins/SiStripCommissioningOfflineDbClient.cc index 3986ca200efbe..0f6219e630ba0 100644 --- a/DQM/SiStripCommissioningDbClients/plugins/SiStripCommissioningOfflineDbClient.cc +++ b/DQM/SiStripCommissioningDbClients/plugins/SiStripCommissioningOfflineDbClient.cc @@ -27,7 +27,9 @@ using namespace sistrip; SiStripCommissioningOfflineDbClient::SiStripCommissioningOfflineDbClient(const edm::ParameterSet& pset) : SiStripCommissioningOfflineClient(pset), uploadAnal_(pset.getUntrackedParameter("UploadAnalyses", false)), - uploadConf_(pset.getUntrackedParameter("UploadHwConfig", false)) { + uploadConf_(pset.getUntrackedParameter("UploadHwConfig", false)), + tTopoToken_{esConsumes()}, + tkGeomToken_{esConsumes()} { LogTrace(mlDqmClient_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]" << " Constructing object..."; if (!uploadConf_) { @@ -85,30 +87,30 @@ void SiStripCommissioningOfflineDbClient::createHistos(const edm::ParameterSet& // Create corresponding "commissioning histograms" object if (runType_ == sistrip::FAST_CABLING) { - histos_ = new FastFedCablingHistosUsingDb(pset, bei_, db); + histos_ = new FastFedCablingHistosUsingDb(pset, bei_, db, tTopoToken_); } else if (runType_ == sistrip::APV_TIMING) { - histos_ = new ApvTimingHistosUsingDb(pset, bei_, db); + histos_ = new ApvTimingHistosUsingDb(pset, bei_, db, tTopoToken_); } else if (runType_ == sistrip::OPTO_SCAN) { - histos_ = new OptoScanHistosUsingDb(pset, bei_, db); + histos_ = new OptoScanHistosUsingDb(pset, bei_, db, tTopoToken_); } else if (runType_ == sistrip::VPSP_SCAN) { - histos_ = new VpspScanHistosUsingDb(pset, bei_, db); + histos_ = new VpspScanHistosUsingDb(pset, bei_, db, tTopoToken_); } else if (runType_ == sistrip::PEDESTALS) { - histos_ = new PedestalsHistosUsingDb(pset, bei_, db); + histos_ = new PedestalsHistosUsingDb(pset, bei_, db, tTopoToken_); } else if (runType_ == sistrip::PEDS_ONLY) { - histos_ = new PedsOnlyHistosUsingDb(pset, bei_, db); + histos_ = new PedsOnlyHistosUsingDb(pset, bei_, db, tTopoToken_); } else if (runType_ == sistrip::PEDS_FULL_NOISE) { - histos_ = new PedsFullNoiseHistosUsingDb(pset, bei_, db); + histos_ = new PedsFullNoiseHistosUsingDb(pset, bei_, db, tTopoToken_); } else if (runType_ == sistrip::NOISE) { - histos_ = new NoiseHistosUsingDb(pset, bei_, db); + histos_ = new NoiseHistosUsingDb(pset, bei_, db, tTopoToken_); } else if (runType_ == sistrip::APV_LATENCY) { - histos_ = new LatencyHistosUsingDb(pset, bei_, db); + histos_ = new LatencyHistosUsingDb(pset, bei_, db, tTopoToken_); } else if (runType_ == sistrip::FINE_DELAY) { - histos_ = new FineDelayHistosUsingDb(pset, bei_, db); + histos_ = new FineDelayHistosUsingDb(pset, bei_, db, tTopoToken_, tkGeomToken_); } else if (runType_ == sistrip::CALIBRATION || runType_ == sistrip::CALIBRATION_DECO || runType_ == sistrip::CALIBRATION_SCAN || runType_ == sistrip::CALIBRATION_SCAN_DECO) { - histos_ = new CalibrationHistosUsingDb(pset, bei_, db, runType_); + histos_ = new CalibrationHistosUsingDb(pset, bei_, db, tTopoToken_, runType_); } else if (runType_ == sistrip::DAQ_SCOPE_MODE) { - histos_ = new DaqScopeModeHistosUsingDb(pset, bei_, db); + histos_ = new DaqScopeModeHistosUsingDb(pset, bei_, db, tTopoToken_); } else if (runType_ == sistrip::UNDEFINED_RUN_TYPE) { histos_ = nullptr; edm::LogError(mlDqmClient_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]" diff --git a/DQM/SiStripCommissioningDbClients/plugins/SiStripCommissioningOfflineDbClient.h b/DQM/SiStripCommissioningDbClients/plugins/SiStripCommissioningOfflineDbClient.h index e17ac4c615a34..56d94e21b62d0 100644 --- a/DQM/SiStripCommissioningDbClients/plugins/SiStripCommissioningOfflineDbClient.h +++ b/DQM/SiStripCommissioningDbClients/plugins/SiStripCommissioningOfflineDbClient.h @@ -2,10 +2,15 @@ #ifndef DQM_SiStripCommissioningDbClients_SiStripCommissioningOfflineDbClient_H #define DQM_SiStripCommissioningDbClients_SiStripCommissioningOfflineDbClient_H +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "DataFormats/SiStripCommon/interface/SiStripConstants.h" #include "DQM/SiStripCommissioningClients/interface/SiStripCommissioningOfflineClient.h" #include "DQM/SiStripCommissioningClients/interface/SiStripTFile.h" +class TrackerTopology; +class TrackerGeometry; + /** @class SiStripCommissioningOfflineDbClient @author R.Bainbridge, M.Wingham @@ -31,6 +36,9 @@ class SiStripCommissioningOfflineDbClient : public SiStripCommissioningOfflineCl bool uploadAnal_; bool uploadConf_; + + edm::ESGetToken tTopoToken_; + edm::ESGetToken tkGeomToken_; }; #endif // DQM_SiStripCommissioningDbClients_SiStripCommissioningOfflineDbClient_H diff --git a/DQM/SiStripCommissioningDbClients/src/ApvTimingHistosUsingDb.cc b/DQM/SiStripCommissioningDbClients/src/ApvTimingHistosUsingDb.cc index 58268ac6bbfdd..89e811762caa3 100644 --- a/DQM/SiStripCommissioningDbClients/src/ApvTimingHistosUsingDb.cc +++ b/DQM/SiStripCommissioningDbClients/src/ApvTimingHistosUsingDb.cc @@ -11,9 +11,12 @@ using namespace sistrip; // ----------------------------------------------------------------------------- /** */ -ApvTimingHistosUsingDb::ApvTimingHistosUsingDb(const edm::ParameterSet& pset, DQMStore* bei, SiStripConfigDb* const db) +ApvTimingHistosUsingDb::ApvTimingHistosUsingDb(const edm::ParameterSet& pset, + DQMStore* bei, + SiStripConfigDb* const db, + edm::ESGetToken tTopoToken) : CommissioningHistograms(pset.getParameter("ApvTimingParameters"), bei, sistrip::APV_TIMING), - CommissioningHistosUsingDb(db, sistrip::APV_TIMING), + CommissioningHistosUsingDb(db, tTopoToken, sistrip::APV_TIMING), ApvTimingHistograms(pset.getParameter("ApvTimingParameters"), bei) { LogTrace(mlDqmClient_) << "[ApvTimingHistosUsingDb::" << __func__ << "]" << " Constructing object..."; diff --git a/DQM/SiStripCommissioningDbClients/src/CalibrationHistosUsingDb.cc b/DQM/SiStripCommissioningDbClients/src/CalibrationHistosUsingDb.cc index 25620d00b0eb2..3389dd2d81402 100644 --- a/DQM/SiStripCommissioningDbClients/src/CalibrationHistosUsingDb.cc +++ b/DQM/SiStripCommissioningDbClients/src/CalibrationHistosUsingDb.cc @@ -20,9 +20,10 @@ std::string getBasePath(const std::string& path) { CalibrationHistosUsingDb::CalibrationHistosUsingDb(const edm::ParameterSet& pset, DQMStore* bei, SiStripConfigDb* const db, + edm::ESGetToken tTopoToken, const sistrip::RunType& task) : CommissioningHistograms(pset.getParameter("CalibrationParameters"), bei, task), - CommissioningHistosUsingDb(db, task), + CommissioningHistosUsingDb(db, tTopoToken, task), CalibrationHistograms(pset.getParameter("CalibrationParameters"), bei, task) { LogTrace(mlDqmClient_) << "[CalibrationHistosUsingDb::" << __func__ << "]" << " Constructing object..."; diff --git a/DQM/SiStripCommissioningDbClients/src/CommissioningHistosUsingDb.cc b/DQM/SiStripCommissioningDbClients/src/CommissioningHistosUsingDb.cc index 550adaf710f1e..36084094c1398 100644 --- a/DQM/SiStripCommissioningDbClients/src/CommissioningHistosUsingDb.cc +++ b/DQM/SiStripCommissioningDbClients/src/CommissioningHistosUsingDb.cc @@ -1,6 +1,3 @@ -#include "FWCore/Framework/interface/ESHandle.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" - #include "DQM/SiStripCommissioningDbClients/interface/CommissioningHistosUsingDb.h" #include "CalibFormats/SiStripObjects/interface/NumberOfDevices.h" #include "CalibFormats/SiStripObjects/interface/SiStripFecCabling.h" @@ -17,14 +14,17 @@ using namespace sistrip; // ----------------------------------------------------------------------------- /** */ -CommissioningHistosUsingDb::CommissioningHistosUsingDb(SiStripConfigDb* const db, sistrip::RunType type) +CommissioningHistosUsingDb::CommissioningHistosUsingDb(SiStripConfigDb* const db, + edm::ESGetToken tTopoToken, + sistrip::RunType type) : CommissioningHistograms(), runType_(type), db_(db), cabling_(nullptr), detInfo_(), uploadAnal_(true), - uploadConf_(false) { + uploadConf_(false), + tTopoToken_{tTopoToken} { LogTrace(mlDqmClient_) << "[" << __PRETTY_FUNCTION__ << "]" << " Constructing object..."; } @@ -76,12 +76,11 @@ void CommissioningHistosUsingDb::configure(const edm::ParameterSet&, const edm:: cabling_->terse(ss); LogTrace(mlDqmClient_) << ss.str(); - edm::ESHandle tTopo; - setup.get().get(tTopo); + const auto& tTopo = setup.getData(tTopoToken_); std::stringstream sss; sss << "[CommissioningHistosUsingDb::" << __func__ << "]" << " Summary of FED cabling:" << std::endl; - cabling_->summary(sss, tTopo.product()); + cabling_->summary(sss, &tTopo); edm::LogVerbatim(mlDqmClient_) << sss.str(); } } diff --git a/DQM/SiStripCommissioningDbClients/src/DaqScopeModeHistosUsingDb.cc b/DQM/SiStripCommissioningDbClients/src/DaqScopeModeHistosUsingDb.cc index a02a285280711..b4fa60351d5f0 100644 --- a/DQM/SiStripCommissioningDbClients/src/DaqScopeModeHistosUsingDb.cc +++ b/DQM/SiStripCommissioningDbClients/src/DaqScopeModeHistosUsingDb.cc @@ -11,10 +11,11 @@ using namespace sistrip; // ----------------------------------------------------------------------------- DaqScopeModeHistosUsingDb::DaqScopeModeHistosUsingDb(const edm::ParameterSet& pset, DQMStore* bei, - SiStripConfigDb* const db) + SiStripConfigDb* const db, + edm::ESGetToken tTopoToken) : CommissioningHistograms( pset.getParameter("DaqScopeModeParameters"), bei, sistrip::DAQ_SCOPE_MODE), - CommissioningHistosUsingDb(db, sistrip::DAQ_SCOPE_MODE), + CommissioningHistosUsingDb(db, tTopoToken, sistrip::DAQ_SCOPE_MODE), DaqScopeModeHistograms(pset.getParameter("DaqScopeModeParameters"), bei) { LogTrace(mlDqmClient_) << "[DaqScopeModeHistosUsingDb::" << __func__ << "]" << " Constructing object..."; diff --git a/DQM/SiStripCommissioningDbClients/src/FastFedCablingHistosUsingDb.cc b/DQM/SiStripCommissioningDbClients/src/FastFedCablingHistosUsingDb.cc index 607a56e41edf7..8f2eccae99fdf 100644 --- a/DQM/SiStripCommissioningDbClients/src/FastFedCablingHistosUsingDb.cc +++ b/DQM/SiStripCommissioningDbClients/src/FastFedCablingHistosUsingDb.cc @@ -12,10 +12,11 @@ using namespace sistrip; /** */ FastFedCablingHistosUsingDb::FastFedCablingHistosUsingDb(const edm::ParameterSet& pset, DQMStore* bei, - SiStripConfigDb* const db) + SiStripConfigDb* const db, + edm::ESGetToken tTopoToken) : CommissioningHistograms( pset.getParameter("FastFedCablingParameters"), bei, sistrip::FAST_CABLING), - CommissioningHistosUsingDb(db, sistrip::FAST_CABLING), + CommissioningHistosUsingDb(db, tTopoToken, sistrip::FAST_CABLING), FastFedCablingHistograms(pset.getParameter("FastFedCablingParameters"), bei) { LogTrace(mlDqmClient_) << "[FastFedCablingHistosUsingDb::" << __func__ << "]" << " Constructing object..."; diff --git a/DQM/SiStripCommissioningDbClients/src/FineDelayHistosUsingDb.cc b/DQM/SiStripCommissioningDbClients/src/FineDelayHistosUsingDb.cc index 2817df34552f0..8ad5f1bfbe444 100644 --- a/DQM/SiStripCommissioningDbClients/src/FineDelayHistosUsingDb.cc +++ b/DQM/SiStripCommissioningDbClients/src/FineDelayHistosUsingDb.cc @@ -20,10 +20,15 @@ using namespace sistrip; // ----------------------------------------------------------------------------- /** */ -FineDelayHistosUsingDb::FineDelayHistosUsingDb(const edm::ParameterSet& pset, DQMStore* bei, SiStripConfigDb* const db) +FineDelayHistosUsingDb::FineDelayHistosUsingDb(const edm::ParameterSet& pset, + DQMStore* bei, + SiStripConfigDb* const db, + edm::ESGetToken tTopoToken, + edm::ESGetToken tkGeomToken) : CommissioningHistograms(pset.getParameter("FineDelayParameters"), bei, sistrip::FINE_DELAY), - CommissioningHistosUsingDb(db, sistrip::FINE_DELAY), + CommissioningHistosUsingDb(db, tTopoToken, sistrip::FINE_DELAY), SamplingHistograms(pset.getParameter("FineDelayParameters"), bei, sistrip::FINE_DELAY), + tkGeomToken_{tkGeomToken}, tracker_(nullptr) { LogTrace(mlDqmClient_) << "[FineDelayHistosUsingDb::" << __func__ << "]" << " Constructing object..."; @@ -41,10 +46,7 @@ FineDelayHistosUsingDb::~FineDelayHistosUsingDb() { /** */ void FineDelayHistosUsingDb::configure(const edm::ParameterSet& pset, const edm::EventSetup& setup) { CommissioningHistosUsingDb::configure(pset, setup); - // get geometry - edm::ESHandle estracker; - setup.get().get(estracker); - tracker_ = &(*estracker); + tracker_ = &setup.getData(tkGeomToken_); SamplingHistograms::configure(pset, setup); cosmic_ = this->pset().getParameter("cosmic"); } diff --git a/DQM/SiStripCommissioningDbClients/src/LatencyHistosUsingDb.cc b/DQM/SiStripCommissioningDbClients/src/LatencyHistosUsingDb.cc index b52eace80b979..8eb78d2d66d5e 100644 --- a/DQM/SiStripCommissioningDbClients/src/LatencyHistosUsingDb.cc +++ b/DQM/SiStripCommissioningDbClients/src/LatencyHistosUsingDb.cc @@ -12,9 +12,12 @@ using namespace sistrip; // ----------------------------------------------------------------------------- /** */ -LatencyHistosUsingDb::LatencyHistosUsingDb(const edm::ParameterSet& pset, DQMStore* bei, SiStripConfigDb* const db) +LatencyHistosUsingDb::LatencyHistosUsingDb(const edm::ParameterSet& pset, + DQMStore* bei, + SiStripConfigDb* const db, + edm::ESGetToken tTopoToken) : CommissioningHistograms(pset.getParameter("LatencyParameters"), bei, sistrip::APV_LATENCY), - CommissioningHistosUsingDb(db, sistrip::APV_LATENCY), + CommissioningHistosUsingDb(db, tTopoToken, sistrip::APV_LATENCY), SamplingHistograms(pset.getParameter("LatencyParameters"), bei, sistrip::APV_LATENCY) { LogTrace(mlDqmClient_) << "[LatencyHistosUsingDb::" << __func__ << "]" << " Constructing object..."; diff --git a/DQM/SiStripCommissioningDbClients/src/NoiseHistosUsingDb.cc b/DQM/SiStripCommissioningDbClients/src/NoiseHistosUsingDb.cc index 32eb9991a7290..6c938cbd211c3 100644 --- a/DQM/SiStripCommissioningDbClients/src/NoiseHistosUsingDb.cc +++ b/DQM/SiStripCommissioningDbClients/src/NoiseHistosUsingDb.cc @@ -11,9 +11,12 @@ using namespace sistrip; // ----------------------------------------------------------------------------- /** */ -NoiseHistosUsingDb::NoiseHistosUsingDb(const edm::ParameterSet& pset, DQMStore* bei, SiStripConfigDb* const db) +NoiseHistosUsingDb::NoiseHistosUsingDb(const edm::ParameterSet& pset, + DQMStore* bei, + SiStripConfigDb* const db, + edm::ESGetToken tTopoToken) : CommissioningHistograms(pset.getParameter("NoiseParameters"), bei, sistrip::NOISE), - CommissioningHistosUsingDb(db, sistrip::NOISE), + CommissioningHistosUsingDb(db, tTopoToken, sistrip::NOISE), NoiseHistograms(pset.getParameter("NoiseParameters"), bei) { LogTrace(mlDqmClient_) << "[NoiseHistosUsingDb::" << __func__ << "]" << " Constructing object..."; diff --git a/DQM/SiStripCommissioningDbClients/src/OptoScanHistosUsingDb.cc b/DQM/SiStripCommissioningDbClients/src/OptoScanHistosUsingDb.cc index 92ab52e6b4e2f..ded8e00cb2542 100644 --- a/DQM/SiStripCommissioningDbClients/src/OptoScanHistosUsingDb.cc +++ b/DQM/SiStripCommissioningDbClients/src/OptoScanHistosUsingDb.cc @@ -10,9 +10,12 @@ using namespace sistrip; // ----------------------------------------------------------------------------- /** */ -OptoScanHistosUsingDb::OptoScanHistosUsingDb(const edm::ParameterSet& pset, DQMStore* bei, SiStripConfigDb* const db) +OptoScanHistosUsingDb::OptoScanHistosUsingDb(const edm::ParameterSet& pset, + DQMStore* bei, + SiStripConfigDb* const db, + edm::ESGetToken tTopoToken) : CommissioningHistograms(pset.getParameter("OptoScanParameters"), bei, sistrip::OPTO_SCAN), - CommissioningHistosUsingDb(db, sistrip::OPTO_SCAN), + CommissioningHistosUsingDb(db, tTopoToken, sistrip::OPTO_SCAN), OptoScanHistograms(pset.getParameter("OptoScanParameters"), bei) { LogTrace(mlDqmClient_) << "[OptoScanHistosUsingDb::" << __func__ << "]" << " Constructing object..."; diff --git a/DQM/SiStripCommissioningDbClients/src/PedestalsHistosUsingDb.cc b/DQM/SiStripCommissioningDbClients/src/PedestalsHistosUsingDb.cc index 421bd8f055384..ddbb41580a8b3 100644 --- a/DQM/SiStripCommissioningDbClients/src/PedestalsHistosUsingDb.cc +++ b/DQM/SiStripCommissioningDbClients/src/PedestalsHistosUsingDb.cc @@ -11,9 +11,12 @@ using namespace sistrip; // ----------------------------------------------------------------------------- /** */ -PedestalsHistosUsingDb::PedestalsHistosUsingDb(const edm::ParameterSet& pset, DQMStore* bei, SiStripConfigDb* const db) +PedestalsHistosUsingDb::PedestalsHistosUsingDb(const edm::ParameterSet& pset, + DQMStore* bei, + SiStripConfigDb* const db, + edm::ESGetToken tTopoToken) : CommissioningHistograms(pset.getParameter("PedestalsParameters"), bei, sistrip::PEDESTALS), - CommissioningHistosUsingDb(db, sistrip::PEDESTALS), + CommissioningHistosUsingDb(db, tTopoToken, sistrip::PEDESTALS), PedestalsHistograms(pset.getParameter("PedestalsParameters"), bei) { LogTrace(mlDqmClient_) << "[PedestalsHistosUsingDb::" << __func__ << "]" << " Constructing object..."; diff --git a/DQM/SiStripCommissioningDbClients/src/PedsFullNoiseHistosUsingDb.cc b/DQM/SiStripCommissioningDbClients/src/PedsFullNoiseHistosUsingDb.cc index 7b9271a359f19..504b0e600bc44 100644 --- a/DQM/SiStripCommissioningDbClients/src/PedsFullNoiseHistosUsingDb.cc +++ b/DQM/SiStripCommissioningDbClients/src/PedsFullNoiseHistosUsingDb.cc @@ -13,10 +13,11 @@ using namespace sistrip; /** */ PedsFullNoiseHistosUsingDb::PedsFullNoiseHistosUsingDb(const edm::ParameterSet& pset, DQMStore* bei, - SiStripConfigDb* const db) + SiStripConfigDb* const db, + edm::ESGetToken tTopoToken) : CommissioningHistograms( pset.getParameter("PedsFullNoiseParameters"), bei, sistrip::PEDS_FULL_NOISE), - CommissioningHistosUsingDb(db, sistrip::PEDS_FULL_NOISE), + CommissioningHistosUsingDb(db, tTopoToken, sistrip::PEDS_FULL_NOISE), PedsFullNoiseHistograms(pset.getParameter("PedsFullNoiseParameters"), bei) { LogTrace(mlDqmClient_) << "[PedsFullNoiseHistosUsingDb::" << __func__ << "]" << " Constructing object..."; diff --git a/DQM/SiStripCommissioningDbClients/src/PedsOnlyHistosUsingDb.cc b/DQM/SiStripCommissioningDbClients/src/PedsOnlyHistosUsingDb.cc index 962c6ef3e1b65..3adc8fecf4176 100644 --- a/DQM/SiStripCommissioningDbClients/src/PedsOnlyHistosUsingDb.cc +++ b/DQM/SiStripCommissioningDbClients/src/PedsOnlyHistosUsingDb.cc @@ -11,9 +11,12 @@ using namespace sistrip; // ----------------------------------------------------------------------------- /** */ -PedsOnlyHistosUsingDb::PedsOnlyHistosUsingDb(const edm::ParameterSet& pset, DQMStore* bei, SiStripConfigDb* const db) +PedsOnlyHistosUsingDb::PedsOnlyHistosUsingDb(const edm::ParameterSet& pset, + DQMStore* bei, + SiStripConfigDb* const db, + edm::ESGetToken tTopoToken) : CommissioningHistograms(pset.getParameter("PedsOnlyParameters"), bei, sistrip::PEDS_ONLY), - CommissioningHistosUsingDb(db, sistrip::PEDS_ONLY), + CommissioningHistosUsingDb(db, tTopoToken, sistrip::PEDS_ONLY), PedsOnlyHistograms(pset.getParameter("PedsOnlyParameters"), bei) { LogTrace(mlDqmClient_) << "[PedsOnlyHistosUsingDb::" << __func__ << "]" << " Constructing object..."; diff --git a/DQM/SiStripCommissioningDbClients/src/VpspScanHistosUsingDb.cc b/DQM/SiStripCommissioningDbClients/src/VpspScanHistosUsingDb.cc index 8c66002778a12..1d2d2eee38425 100644 --- a/DQM/SiStripCommissioningDbClients/src/VpspScanHistosUsingDb.cc +++ b/DQM/SiStripCommissioningDbClients/src/VpspScanHistosUsingDb.cc @@ -10,9 +10,12 @@ using namespace sistrip; // ----------------------------------------------------------------------------- /** */ -VpspScanHistosUsingDb::VpspScanHistosUsingDb(const edm::ParameterSet& pset, DQMStore* bei, SiStripConfigDb* const db) +VpspScanHistosUsingDb::VpspScanHistosUsingDb(const edm::ParameterSet& pset, + DQMStore* bei, + SiStripConfigDb* const db, + edm::ESGetToken tTopoToken) : CommissioningHistograms(pset.getParameter("VpspScanParameters"), bei, sistrip::VPSP_SCAN), - CommissioningHistosUsingDb(db, sistrip::VPSP_SCAN), + CommissioningHistosUsingDb(db, tTopoToken, sistrip::VPSP_SCAN), VpspScanHistograms(pset.getParameter("VpspScanParameters"), bei) { LogTrace(mlDqmClient_) << "[VpspScanHistosUsingDb::" << __func__ << "]" << " Constructing object..."; diff --git a/DQM/SiStripCommissioningSources/interface/CalibrationScanTask.h b/DQM/SiStripCommissioningSources/interface/CalibrationScanTask.h index 011746677f2d2..0f6140de545e1 100644 --- a/DQM/SiStripCommissioningSources/interface/CalibrationScanTask.h +++ b/DQM/SiStripCommissioningSources/interface/CalibrationScanTask.h @@ -4,6 +4,8 @@ #include "DQM/SiStripCommissioningSources/interface/CommissioningTask.h" #include +class SiStripPedestals; + /** @class CalibrationScanTask */ @@ -14,7 +16,7 @@ class CalibrationScanTask : public CommissioningTask { const sistrip::RunType&, const char* filename, uint32_t run, - const edm::EventSetup& setup); + const SiStripPedestals& pedestals); ~CalibrationScanTask() override; void setCurrentFolder(const std::string&); diff --git a/DQM/SiStripCommissioningSources/interface/CalibrationTask.h b/DQM/SiStripCommissioningSources/interface/CalibrationTask.h index fe1f094d62873..31d7ab27d0edb 100644 --- a/DQM/SiStripCommissioningSources/interface/CalibrationTask.h +++ b/DQM/SiStripCommissioningSources/interface/CalibrationTask.h @@ -4,6 +4,8 @@ #include "DQM/SiStripCommissioningSources/interface/CommissioningTask.h" #include +class SiStripPedestals; + /** @class CalibrationTask */ @@ -14,7 +16,7 @@ class CalibrationTask : public CommissioningTask { const sistrip::RunType&, const char* filename, uint32_t run, - const edm::EventSetup& setup); + const SiStripPedestals& pedestals); ~CalibrationTask() override; void setCurrentFolder(const std::string&); diff --git a/DQM/SiStripCommissioningSources/interface/NoiseTask.h b/DQM/SiStripCommissioningSources/interface/NoiseTask.h index 6ef082ab954ea..b1550b3364fa5 100644 --- a/DQM/SiStripCommissioningSources/interface/NoiseTask.h +++ b/DQM/SiStripCommissioningSources/interface/NoiseTask.h @@ -6,6 +6,10 @@ #include "DataFormats/Common/interface/DetSet.h" #include "DQM/SiStripCommissioningSources/interface/CommissioningTask.h" #include "DQMServices/Core/interface/DQMStore.h" +#include "CondFormats/DataRecord/interface/SiStripNoisesRcd.h" +#include "CondFormats/DataRecord/interface/SiStripPedestalsRcd.h" +#include "CondFormats/SiStripObjects/interface/SiStripNoises.h" +#include "CondFormats/SiStripObjects/interface/SiStripPedestals.h" // Forward Declarations class ApvAnalysisFactory; @@ -18,7 +22,10 @@ class SiStripRawDigi; */ class NoiseTask : public CommissioningTask { public: - NoiseTask(DQMStore *, const FedChannelConnection &); + NoiseTask(DQMStore *, + const FedChannelConnection &, + edm::ESGetToken pedestalToken, + edm::ESGetToken noiseToken); ~NoiseTask() override; private: @@ -30,6 +37,8 @@ class NoiseTask : public CommissioningTask { std::vector cm_; ApvAnalysisFactory *pApvFactory_; + edm::ESGetToken pedestalToken_; + edm::ESGetToken noiseToken_; }; #endif // DQM_SISTRIPCOMMISSIONINGSOURCES_NOISETASK_H diff --git a/DQM/SiStripCommissioningSources/interface/SiStripCommissioningSource.h b/DQM/SiStripCommissioningSources/interface/SiStripCommissioningSource.h index 38cf973366a1b..48ff8d6dee355 100644 --- a/DQM/SiStripCommissioningSources/interface/SiStripCommissioningSource.h +++ b/DQM/SiStripCommissioningSources/interface/SiStripCommissioningSource.h @@ -4,6 +4,7 @@ #include "FWCore/Utilities/interface/EDGetToken.h" #include "CalibFormats/SiStripObjects/interface/SiStripFecCabling.h" #include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h" +#include "CondFormats/DataRecord/interface/SiStripFedCablingRcd.h" #include "DataFormats/Common/interface/DetSetVector.h" #include "DataFormats/Common/interface/DetSetVectorNew.h" #include "DataFormats/SiStripCommon/interface/SiStripConstants.h" @@ -14,6 +15,10 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DQMServices/Core/interface/DQMStore.h" +#include "CondFormats/DataRecord/interface/SiStripNoisesRcd.h" +#include "CondFormats/DataRecord/interface/SiStripPedestalsRcd.h" +#include "CondFormats/SiStripObjects/interface/SiStripNoises.h" +#include "CondFormats/SiStripObjects/interface/SiStripPedestals.h" #include #include #include @@ -91,6 +96,7 @@ class SiStripCommissioningSource : public edm::EDAnalyzer { DQMStore* dqm_; /** */ + edm::ESGetToken fedCablingToken_; SiStripFedCabling* fedCabling_; /** */ @@ -156,6 +162,9 @@ class SiStripCommissioningSource : public edm::EDAnalyzer { /** parameters to pass to the tasks */ edm::ParameterSet parameters_; + + edm::ESGetToken pedestalToken_; + edm::ESGetToken noiseToken_; }; #endif // DQM_SiStripCommissioningSources_SiStripCommissioningSource_H diff --git a/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayHit.cc b/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayHit.cc index bf52618b77313..304dba411d27c 100644 --- a/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayHit.cc +++ b/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayHit.cc @@ -28,6 +28,7 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Utilities/interface/InputTag.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -44,12 +45,6 @@ #include #include #include -#include -#include "CondFormats/DataRecord/interface/SiStripNoisesRcd.h" -#include -#include -#include "CondFormats/DataRecord/interface/SiStripNoisesRcd.h" -#include #include "DataFormats/GeometryVector/interface/GlobalPoint.h" #include "DataFormats/GeometryVector/interface/GlobalVector.h" @@ -76,7 +71,7 @@ SiStripFineDelayHit::SiStripFineDelayHit(const edm::ParameterSet& iConfig) : eve //register your products produces >("FineDelaySelection"); //now do what ever other initialization is needed - anglefinder_ = new SiStripFineDelayTLA(iConfig); + anglefinder_ = new SiStripFineDelayTLA(iConfig, consumesCollector()); cosmic_ = iConfig.getParameter("cosmic"); field_ = iConfig.getParameter("MagneticField"); maxAngle_ = iConfig.getParameter("MaxTrackAngle"); @@ -101,6 +96,11 @@ SiStripFineDelayHit::SiStripFineDelayHit(const edm::ParameterSet& iConfig) : eve explorationWindow_ = iConfig.getParameter("ExplorationWindow"); noTracking_ = iConfig.getParameter("NoTracking"); mode_ = 0; + + tkGeomToken_ = esConsumes(); + tTopoToken_ = esConsumes(); + fedCablingToken_ = esConsumes(); + noiseToken_ = esConsumes(); } SiStripFineDelayHit::~SiStripFineDelayHit() { @@ -402,8 +402,7 @@ void SiStripFineDelayHit::produce(edm::Event& iEvent, const edm::EventSetup& iSe // iEvent.getByLabel(trackLabel_,trackCollection); iEvent.getByToken(trackCollectionToken_, trackCollection); const reco::TrackCollection* tracks = trackCollection.product(); - edm::ESHandle tracker; - iSetup.get().get(tracker); + const auto& tracker = iSetup.getData(tkGeomToken_); if (!tracks->empty()) { anglefinder_->init(iEvent, iSetup); LogDebug("produce") << "Found " << tracks->size() << " tracks."; @@ -427,8 +426,7 @@ void SiStripFineDelayHit::produce(edm::Event& iEvent, const edm::EventSetup& iSe iEvent.getByToken(trackToken_, TrajectoryCollection); trajVec = *(TrajectoryCollection.product()); // Get TrackerTopology - edm::ESHandle tTopo; - iSetup.get().get(tTopo); + const auto tTopo = &iSetup.getData(tTopoToken_); // loop on tracks for (reco::TrackCollection::const_iterator itrack = tracks->begin(); itrack < tracks->end(); itrack++) { // first check the track Pt @@ -452,17 +450,17 @@ void SiStripFineDelayHit::produce(edm::Event& iEvent, const edm::EventSetup& iSe else if (((layerCode >> 6) & 0x3) == 3) subdet = StripSubdetector::TEC; int32_t layerIdx = (layerCode & 0xF) * (((layerCode >> 4) & 0x3) ? -1 : 1); - intersections = detId(*tracker, tTopo.product(), &(*itrack), trajVec, subdet, layerIdx); + intersections = detId(tracker, tTopo, &(*itrack), trajVec, subdet, layerIdx); } else { // for latency scans, no layer is specified -> no cut on detid - intersections = detId(*tracker, tTopo.product(), &(*itrack), trajVec); + intersections = detId(tracker, tTopo, &(*itrack), trajVec); } LogDebug("produce") << " Found " << intersections.size() << " interesting intersections." << std::endl; for (std::vector > >::iterator it = intersections.begin(); it < intersections.end(); it++) { std::pair candidateCluster = - closestCluster(*tracker, &(*itrack), it->first, *clusterSet, *hitSet); + closestCluster(tracker, &(*itrack), it->first, *clusterSet, *hitSet); if (candidateCluster.first) { LogDebug("produce") << " Found a cluster." << std::endl; // cut on the distance @@ -529,8 +527,7 @@ void SiStripFineDelayHit::produce(edm::Event& iEvent, const edm::EventSetup& iSe void SiStripFineDelayHit::produceNoTracking(edm::Event& iEvent, const edm::EventSetup& iSetup) { event_ = &iEvent; // Get TrackerTopology - edm::ESHandle tTopo; - iSetup.get().get(tTopo); + const auto tTopo = &iSetup.getData(tTopoToken_); // container for the selected hits std::vector > output; output.reserve(100); @@ -549,7 +546,7 @@ void SiStripFineDelayHit::produceNoTracking(edm::Event& iEvent, const edm::Event else if (((layerCode >> 6) & 0x3) == 3) subdet = StripSubdetector::TEC; int32_t layerIdx = (layerCode & 0xF) * (((layerCode >> 4) & 0x3) ? -1 : 1); - DeviceMask mask = deviceMask(subdet, layerIdx, tTopo.product()); + DeviceMask mask = deviceMask(subdet, layerIdx, tTopo); // look at the clusters edm::Handle > clusters; // iEvent.getByLabel(clusterLabel_,clusters); @@ -580,10 +577,9 @@ void SiStripFineDelayHit::produceNoTracking(edm::Event& iEvent, const edm::Event // 1.5< noise <8 // charge<250 // 50 > s/n > 10 - edm::ESHandle noiseHandle_; - iSetup.get().get(noiseHandle_); - SiStripNoises::Range detNoiseRange = noiseHandle_->getRange(DSViter->id()); - float noise = noiseHandle_->getNoise(leadingPosition, detNoiseRange); + const auto& noises = iSetup.getData(noiseToken_); + SiStripNoises::Range detNoiseRange = noises.getRange(DSViter->id()); + float noise = noises.getNoise(leadingPosition, detNoiseRange); if (noise < 1.5) continue; if (leadingCharge >= 250 || noise >= 8 || leadingCharge / noise > 50 || leadingCharge / noise < 10) @@ -613,11 +609,10 @@ void SiStripFineDelayHit::produceNoTracking(edm::Event& iEvent, const edm::Event // ------------ method called once each job just before starting event loop ------------ void SiStripFineDelayHit::beginRun(const edm::Run& run, const edm::EventSetup& iSetup) { // Retrieve FED cabling object - edm::ESHandle cabling; - iSetup.get().get(cabling); - auto feds = cabling->fedIds(); + const auto& cabling = iSetup.getData(fedCablingToken_); + auto feds = cabling.fedIds(); for (auto fedid = feds.begin(); fedid < feds.end(); ++fedid) { - auto connections = cabling->fedConnections(*fedid); + auto connections = cabling.fedConnections(*fedid); for (std::vector::const_iterator conn = connections.begin(); conn < connections.end(); ++conn) { /* diff --git a/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayHit.h b/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayHit.h index 3f6880cea4761..27fe4ecb97e96 100644 --- a/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayHit.h +++ b/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayHit.h @@ -24,6 +24,10 @@ #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include #include "DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayTLA.h" +#include +#include "CondFormats/DataRecord/interface/SiStripNoisesRcd.h" +#include +#include #include "DataFormats/TrackerCommon/interface/TrackerTopology.h" #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h" @@ -84,6 +88,11 @@ class SiStripFineDelayHit : public edm::EDProducer { edm::EDGetTokenT > clustersToken_; edm::EDGetTokenT > trackToken_; std::map connectionMap_; + + edm::ESGetToken tkGeomToken_; + edm::ESGetToken tTopoToken_; + edm::ESGetToken fedCablingToken_; + edm::ESGetToken noiseToken_; }; #endif diff --git a/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayTLA.cc b/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayTLA.cc index c4482dde601ba..991a660718a36 100644 --- a/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayTLA.cc +++ b/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayTLA.cc @@ -5,12 +5,10 @@ #include "DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayTLA.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" #include "DataFormats/GeometryVector/interface/GlobalVector.h" #include "DataFormats/GeometryVector/interface/LocalVector.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonDetUnit/interface/GeomDet.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "Geometry/CommonDetUnit/interface/GluedGeomDet.h" #include "Geometry/CommonTopologies/interface/Topology.h" #include "Geometry/CommonTopologies/interface/StripTopology.h" @@ -23,14 +21,10 @@ #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h" using namespace std; -SiStripFineDelayTLA::SiStripFineDelayTLA(edm::ParameterSet const& conf) : conf_(conf) {} +SiStripFineDelayTLA::SiStripFineDelayTLA(edm::ParameterSet const& conf, edm::ConsumesCollector iC) + : conf_(conf), tkGeomToken_(iC.esConsumes()) {} -void SiStripFineDelayTLA::init(const edm::Event& e, const edm::EventSetup& es) { - // get geometry - edm::ESHandle estracker; - es.get().get(estracker); - tracker = &(*estracker); -} +void SiStripFineDelayTLA::init(const edm::Event& e, const edm::EventSetup& es) { tracker = &es.getData(tkGeomToken_); } // Virtual destructor needed. SiStripFineDelayTLA::~SiStripFineDelayTLA() {} diff --git a/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayTLA.h b/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayTLA.h index 4f7c688b03f83..168b350b02f3f 100644 --- a/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayTLA.h +++ b/DQM/SiStripCommissioningSources/plugins/tracking/SiStripFineDelayTLA.h @@ -11,6 +11,9 @@ #include "DataFormats/TrackReco/interface/Track.h" #include "DataFormats/GeometryVector/interface/LocalVector.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" + class TrackerGeometry; class TrackingRecHit; class TrajectorySeed; @@ -18,7 +21,7 @@ class Trajectory; class SiStripFineDelayTLA { public: - explicit SiStripFineDelayTLA(const edm::ParameterSet& conf); + explicit SiStripFineDelayTLA(const edm::ParameterSet& conf, edm::ConsumesCollector iC); virtual ~SiStripFineDelayTLA(); void init(const edm::Event& e, const edm::EventSetup& c); @@ -31,6 +34,7 @@ class SiStripFineDelayTLA { private: edm::ParameterSet conf_; const TrackerGeometry* tracker; + edm::ESGetToken tkGeomToken_; }; #endif diff --git a/DQM/SiStripCommissioningSources/src/CalibrationScanTask.cc b/DQM/SiStripCommissioningSources/src/CalibrationScanTask.cc index 33a1441249936..8621889bf3650 100644 --- a/DQM/SiStripCommissioningSources/src/CalibrationScanTask.cc +++ b/DQM/SiStripCommissioningSources/src/CalibrationScanTask.cc @@ -2,9 +2,6 @@ #include "DataFormats/SiStripCommon/interface/SiStripHistoTitle.h" #include "DQMServices/Core/interface/DQMStore.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include #include #include @@ -21,7 +18,7 @@ CalibrationScanTask::CalibrationScanTask(DQMStore* dqm, const sistrip::RunType& rtype, const char* filename, uint32_t run, - const edm::EventSetup& setup) + const SiStripPedestals& pedestals) : CommissioningTask(dqm, conn, "CalibrationScanTask"), runType_(rtype), nBins_(0), @@ -41,9 +38,7 @@ CalibrationScanTask::CalibrationScanTask(DQMStore* dqm, LogDebug("Commissioning") << "[CalibrationScanTask::CalibrationScanTask] Constructing object..."; // load the pedestals - edm::ESHandle pedestalsHandle; - setup.get().get(pedestalsHandle); - SiStripPedestals::Range detPedRange = pedestalsHandle->getRange(conn.detId()); + SiStripPedestals::Range detPedRange = pedestals.getRange(conn.detId()); int start = conn.apvPairNumber() * 256; int stop = start + 256; int value = 0; @@ -52,7 +47,7 @@ CalibrationScanTask::CalibrationScanTask(DQMStore* dqm, if (conn.detId() == 0) return; for (int strip = start; strip < stop; ++strip) { - value = int(pedestalsHandle->getPed(strip, detPedRange)); + value = int(pedestals.getPed(strip, detPedRange)); if (value > 895) value -= 1024; ped.push_back(value); diff --git a/DQM/SiStripCommissioningSources/src/CalibrationTask.cc b/DQM/SiStripCommissioningSources/src/CalibrationTask.cc index 32845a9047366..aac03374da741 100644 --- a/DQM/SiStripCommissioningSources/src/CalibrationTask.cc +++ b/DQM/SiStripCommissioningSources/src/CalibrationTask.cc @@ -2,9 +2,6 @@ #include "DataFormats/SiStripCommon/interface/SiStripHistoTitle.h" #include "DQMServices/Core/interface/DQMStore.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include #include #include @@ -21,7 +18,7 @@ CalibrationTask::CalibrationTask(DQMStore* dqm, const sistrip::RunType& rtype, const char* filename, uint32_t run, - const edm::EventSetup& setup) + const SiStripPedestals& pedestals) : CommissioningTask(dqm, conn, "CalibrationTask"), runType_(rtype), nBins_(0), @@ -40,15 +37,13 @@ CalibrationTask::CalibrationTask(DQMStore* dqm, LogDebug("Commissioning") << "[CalibrationTask::CalibrationTask] Constructing object..."; // load the pedestals - edm::ESHandle pedestalsHandle; - setup.get().get(pedestalsHandle); - SiStripPedestals::Range detPedRange = pedestalsHandle->getRange(conn.detId()); + SiStripPedestals::Range detPedRange = pedestals.getRange(conn.detId()); int start = conn.apvPairNumber() * 256; int stop = start + 256; int value = 0; ped.reserve(256); for (int strip = start; strip < stop; ++strip) { - value = int(pedestalsHandle->getPed(strip, detPedRange)); + value = int(pedestals.getPed(strip, detPedRange)); if (value > 895) value -= 1024; ped.push_back(value); diff --git a/DQM/SiStripCommissioningSources/src/NoiseTask.cc b/DQM/SiStripCommissioningSources/src/NoiseTask.cc index 122492d032b30..0765d7327328a 100644 --- a/DQM/SiStripCommissioningSources/src/NoiseTask.cc +++ b/DQM/SiStripCommissioningSources/src/NoiseTask.cc @@ -29,7 +29,11 @@ std::ostream &operator<<(std::ostream &rOut, ApvAnalysis::PedestalType &rPEDS) { // ----------------------------------------------------------------------------- // -NoiseTask::NoiseTask(DQMStore *dqm, const FedChannelConnection &conn) : CommissioningTask(dqm, conn, "NoiseTask") { +NoiseTask::NoiseTask(DQMStore *dqm, + const FedChannelConnection &conn, + edm::ESGetToken pedestalToken, + edm::ESGetToken noiseToken) + : CommissioningTask(dqm, conn, "NoiseTask"), pedestalToken_(pedestalToken), noiseToken_(noiseToken) { //@@ NOT GUARANTEED TO BE THREAD SAFE! pApvFactory_ = edm::Service().operator->()->getApvFactory(); @@ -138,12 +142,8 @@ void NoiseTask::book() { LogTrace(mlDqmSource_) << "[NoiseTask::" << __func__ << "] " << "Retrieving Pedestals from DB"; - // Directly retrieve Pedestals from EventSetup - edm::ESHandle pedestals; - eventSetup()->get().get(pedestals); - - // Cache Pedestals - pDBPedestals = std::make_unique(*pedestals); + // Directly retrieve Pedestals from EventSetup, and cache + pDBPedestals = std::make_unique(eventSetup()->getData(pedestalToken_)); LogTrace(mlDqmSource_) << "[NoiseTask::" << __func__ << "] " << "Done Retrieving Pedestals from DB"; @@ -155,12 +155,8 @@ void NoiseTask::book() { LogTrace(mlDqmSource_) << "[NoiseTask::" << __func__ << "] " << "Retrieving Noises from DB"; - // Directly retrieve Noises from EventSetup - edm::ESHandle noises; - eventSetup()->get().get(noises); - - // Cache Pedestals - pDBNoises = std::make_unique(*noises); + // Directly retrieve Noises from EventSetup, and cache + pDBNoises = std::make_unique(eventSetup()->getData(noiseToken_)); LogTrace(mlDqmSource_) << "[NoiseTask::" << __func__ << "] " << "Done Retrieving Noises from DB"; diff --git a/DQM/SiStripCommissioningSources/src/SiStripCommissioningSource.cc b/DQM/SiStripCommissioningSources/src/SiStripCommissioningSource.cc index e18a172be473b..66f2faca3bad4 100644 --- a/DQM/SiStripCommissioningSources/src/SiStripCommissioningSource.cc +++ b/DQM/SiStripCommissioningSources/src/SiStripCommissioningSource.cc @@ -1,6 +1,5 @@ #include "DQM/SiStripCommissioningSources/interface/SiStripCommissioningSource.h" #include "CalibFormats/SiStripObjects/interface/SiStripFecCabling.h" -#include "CondFormats/DataRecord/interface/SiStripFedCablingRcd.h" #include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h" #include "DQM/SiStripCommissioningSources/interface/ApvTimingTask.h" #include "DQM/SiStripCommissioningSources/interface/Averages.h" @@ -24,7 +23,6 @@ #include "DataFormats/SiStripCommon/interface/SiStripEventSummary.h" #include "DataFormats/SiStripCommon/interface/SiStripFecKey.h" #include "DataFormats/SiStripCommon/interface/SiStripFedKey.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -53,7 +51,7 @@ using namespace sistrip; // SiStripCommissioningSource::SiStripCommissioningSource(const edm::ParameterSet& pset) : dqm_(nullptr), - fedCabling_(nullptr), + fedCablingToken_(esConsumes()), fecCabling_(nullptr), inputModuleLabel_(pset.getParameter("InputModuleLabel")), inputModuleLabelAlt_(pset.existsAs("InputModuleLabelAlt") @@ -96,6 +94,14 @@ SiStripCommissioningSource::SiStripCommissioningSource(const edm::ParameterSet& << " Constructing object..."; tasks_.clear(); tasks_.resize(1024, VecOfTasks(96, static_cast(nullptr))); + + if (task_ == sistrip::NOISE) { + noiseToken_ = esConsumes(); + } + if (task_ == sistrip::NOISE || task_ == sistrip::CALIBRATION_SCAN || task_ == sistrip::CALIBRATION_SCAN_DECO || + task_ == sistrip::CALIBRATION || task_ == sistrip::CALIBRATION_DECO) { + pedestalToken_ = esConsumes(); + } } // ----------------------------------------------------------------------------- @@ -145,12 +151,11 @@ void SiStripCommissioningSource::beginRun(edm::Run const& run, const edm::EventS // ---------- FED and FEC cabling ---------- - edm::ESHandle fed_cabling; - setup.get().get(fed_cabling); - fedCabling_ = const_cast(fed_cabling.product()); + const auto& fed_cabling = setup.getData(fedCablingToken_); + fedCabling_ = const_cast(&fed_cabling); LogDebug(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]" << "Initialized FED cabling. Number of FEDs is " << fedCabling_->fedIds().size(); - fecCabling_ = new SiStripFecCabling(*fed_cabling); + fecCabling_ = new SiStripFecCabling(fed_cabling); if (fecCabling_->crates().empty()) { std::stringstream ss; ss << "[SiStripCommissioningSource::" << __func__ << "]" @@ -981,17 +986,17 @@ void SiStripCommissioningSource::createTasks(sistrip::RunType run_type, const ed } else if (task_ == sistrip::PEDS_ONLY) { tasks_[iconn->fedId()][iconn->fedCh()] = new PedsOnlyTask(dqm(), *iconn); } else if (task_ == sistrip::NOISE) { - tasks_[iconn->fedId()][iconn->fedCh()] = new NoiseTask(dqm(), *iconn); + tasks_[iconn->fedId()][iconn->fedCh()] = new NoiseTask(dqm(), *iconn, pedestalToken_, noiseToken_); } else if (task_ == sistrip::PEDS_FULL_NOISE) { tasks_[iconn->fedId()][iconn->fedCh()] = new PedsFullNoiseTask(dqm(), *iconn, parameters_); } else if (task_ == sistrip::DAQ_SCOPE_MODE) { tasks_[iconn->fedId()][iconn->fedCh()] = new DaqScopeModeTask(dqm(), *iconn, parameters_); } else if (task_ == sistrip::CALIBRATION_SCAN || task_ == sistrip::CALIBRATION_SCAN_DECO) { tasks_[iconn->fedId()][iconn->fedCh()] = - new CalibrationScanTask(dqm(), *iconn, task_, filename_.c_str(), run_, setup); + new CalibrationScanTask(dqm(), *iconn, task_, filename_.c_str(), run_, setup.getData(pedestalToken_)); } else if (task_ == sistrip::CALIBRATION || task_ == sistrip::CALIBRATION_DECO) { tasks_[iconn->fedId()][iconn->fedCh()] = - new CalibrationTask(dqm(), *iconn, task_, filename_.c_str(), run_, setup); + new CalibrationTask(dqm(), *iconn, task_, filename_.c_str(), run_, setup.getData(pedestalToken_)); } else if (task_ == sistrip::UNDEFINED_RUN_TYPE) { edm::LogWarning(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]" << " Undefined CommissioningTask" diff --git a/DQM/SiStripMonitorClient/interface/SiStripActionExecutor.h b/DQM/SiStripMonitorClient/interface/SiStripActionExecutor.h index c5eb693815e1c..84f90e6051258 100644 --- a/DQM/SiStripMonitorClient/interface/SiStripActionExecutor.h +++ b/DQM/SiStripMonitorClient/interface/SiStripActionExecutor.h @@ -8,8 +8,6 @@ #include "DQMServices/Core/interface/DQMStore.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include @@ -30,26 +28,29 @@ class SiStripActionExecutor { virtual ~SiStripActionExecutor(); bool readConfiguration(); - bool readTkMapConfiguration(const edm::EventSetup& eSetup); + bool readTkMapConfiguration(const SiStripDetCabling* detCabling, + const TkDetMap* tkDetMap, + const TrackerTopology* tTopo); void saveMEs(DQMStore& dqm_store, std::string fname); void createSummary(DQMStore& dqm_store); void createSummaryOffline(DQMStore& dqm_store); - void createTkMap(const edm::ParameterSet& tkmapPset, - DQMStore& dqm_store, - std::string& map_type, - const edm::EventSetup& eSetup); + void createTkMap(const edm::ParameterSet& tkmapPset, DQMStore& dqm_store, const std::string& map_type); void createOfflineTkMap(const edm::ParameterSet& tkmapPset, DQMStore& dqm_store, std::string& map_type, - const edm::EventSetup& eSetup); - void createTkInfoFile(std::vector tkhmap_names, TTree* tkinfo_tree, DQMStore& dqm_store); + const SiStripQuality* stripQuality); + void createTkInfoFile(std::vector tkhmap_names, + TTree* tkinfo_tree, + DQMStore& dqm_store, + const GeometricDet* geomDet); void createStatus(DQMStore& dqm_store); void fillDummyStatus(); void fillStatus(DQMStore& dqm_store, - edm::ESHandle const& fedcabling, - edm::EventSetup const& eSetup); + const SiStripDetCabling* cabling, + const TkDetMap* tkDetMap, + const TrackerTopology* tTopo); void fillStatusAtLumi(DQMStore& dqm_store); void createDummyShiftReport(); diff --git a/DQM/SiStripMonitorClient/interface/SiStripQualityChecker.h b/DQM/SiStripMonitorClient/interface/SiStripQualityChecker.h index 3965ab0f389b9..c6d105feadfa7 100644 --- a/DQM/SiStripMonitorClient/interface/SiStripQualityChecker.h +++ b/DQM/SiStripMonitorClient/interface/SiStripQualityChecker.h @@ -2,8 +2,6 @@ #define _SiStripQualityChecker_h_ #include "DQMServices/Core/interface/DQMStore.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include @@ -14,6 +12,7 @@ #include class TkDetMap; +class TrackerTopology; class SiStripDetCabling; class SiStripQualityChecker { @@ -27,10 +26,13 @@ class SiStripQualityChecker { void bookStatus(DQMStore& dqm_store); void resetStatus(); void fillDummyStatus(); - void fillStatus(DQMStore& dqm_store, const edm::ESHandle& cabling, const edm::EventSetup& eSetup); + void fillStatus(DQMStore& dqm_store, + const SiStripDetCabling* cabling, + const TkDetMap* tkDetMap, + const TrackerTopology* tTopo); void fillStatusAtLumi(DQMStore& dqm_store); void printStatusReport(); - void fillFaultyModuleStatus(DQMStore& dqm_store, const edm::EventSetup& eSetup); + void fillFaultyModuleStatus(DQMStore& dqm_store, const TrackerTopology* tTopo); private: struct SubDetMEs { @@ -40,12 +42,9 @@ class SiStripQualityChecker { std::string detectorTag; }; - void fillDetectorStatus(DQMStore& dqm_store, const edm::ESHandle& cabling); - void fillSubDetStatus(DQMStore& dqm_store, - const edm::ESHandle& cabling, - SubDetMEs& mes, - unsigned int xbin, - float& gflag); + void fillDetectorStatus(DQMStore& dqm_store, const SiStripDetCabling* cabling); + void fillSubDetStatus( + DQMStore& dqm_store, const SiStripDetCabling* cabling, SubDetMEs& mes, unsigned int xbin, float& gflag); void getModuleStatus(DQMStore& dqm_store, std::vector& layer_mes, int& errdet, diff --git a/DQM/SiStripMonitorClient/interface/SiStripTrackerMapCreator.h b/DQM/SiStripMonitorClient/interface/SiStripTrackerMapCreator.h index 879457b1c4852..24b40ff8a44ca 100644 --- a/DQM/SiStripMonitorClient/interface/SiStripTrackerMapCreator.h +++ b/DQM/SiStripMonitorClient/interface/SiStripTrackerMapCreator.h @@ -17,40 +17,35 @@ class TkDetMap; class TrackerTopology; -namespace edm { - class EventSetup; -} +class SiStripQuality; +class GeometricDet; class SiStripTrackerMapCreator { public: typedef dqm::harvesting::MonitorElement MonitorElement; typedef dqm::harvesting::DQMStore DQMStore; - SiStripTrackerMapCreator(edm::EventSetup const& eSetup); + SiStripTrackerMapCreator(const SiStripDetCabling* detCabling, const TkDetMap* tkDetMap, const TrackerTopology* tTopo); bool readConfiguration(); - void create(edm::ParameterSet const& tkmapPset, - DQMStore& dqm_store, - std::string const& htype, - edm::EventSetup const& eSetup); + void create(edm::ParameterSet const& tkmapPset, DQMStore& dqm_store, std::string const& htype); void createForOffline(edm::ParameterSet const& tkmapPset, DQMStore& dqm_store, std::string& htype, - edm::EventSetup const& eSetup); - void createInfoFile(std::vector const& map_names, TTree* tkinfo_tree, DQMStore& dqm_store); + const SiStripQuality*); + void createInfoFile(std::vector const& map_names, + TTree* tkinfo_tree, + DQMStore& dqm_store, + const GeometricDet* geomDet); private: void paintTkMapFromAlarm(uint32_t det_id, - const TrackerTopology* tTopo, DQMStore& dqm_store, bool isBad, std::map& badmodmap); - void setTkMapFromHistogram(DQMStore& dqm_store, std::string const& htype, edm::EventSetup const& eSetup); - void setTkMapFromAlarm(DQMStore& dqm_store, edm::EventSetup const& eSetup); - uint16_t getDetectorFlagAndComment(DQMStore* dqm_store, - uint32_t det_id, - TrackerTopology const* tTopo, - std::ostringstream& comment); + void setTkMapFromHistogram(DQMStore& dqm_store, std::string const& htype); + void setTkMapFromAlarm(DQMStore& dqm_store, const SiStripQuality* stripQuality); + uint16_t getDetectorFlagAndComment(DQMStore* dqm_store, uint32_t det_id, std::ostringstream& comment); void paintTkMapFromHistogram(MonitorElement const* me, std::string const& map_type, @@ -60,8 +55,8 @@ class SiStripTrackerMapCreator { uint16_t getDetectorFlag(uint32_t const det_id) { return detFlag_.find(det_id) != detFlag_.end() ? detFlag_[det_id] : 0; } - void printBadModuleList(std::map const& badmodmap, edm::EventSetup const& eSetup); - void printTopModules(std::vector>& topNmodVec, edm::EventSetup const& eSetup); + void printBadModuleList(std::map const& badmodmap); + void printTopModules(std::vector>& topNmodVec); std::unique_ptr trackerMap_{nullptr}; std::string sRunNumber; @@ -71,13 +66,11 @@ class SiStripTrackerMapCreator { float tkMapMax_; float tkMapMin_; float meanToMaxFactor_{2.5}; - bool useSSQuality_; bool ResidualsRMS_; - std::string ssqLabel_; int nDet_; + const SiStripDetCabling* detCabling_; TkDetMap const* tkDetMap_; - edm::EventSetup const& eSetup_; - edm::ESHandle detCabling_; + const TrackerTopology* tTopo_; DetId cachedDetId_{}; int16_t cachedLayer_{}; std::map detFlag_; diff --git a/DQM/SiStripMonitorClient/plugins/SiStripAnalyser.cc b/DQM/SiStripMonitorClient/plugins/SiStripAnalyser.cc index 6e37e4be95efa..881ca6ea9e6fe 100644 --- a/DQM/SiStripMonitorClient/plugins/SiStripAnalyser.cc +++ b/DQM/SiStripMonitorClient/plugins/SiStripAnalyser.cc @@ -22,11 +22,6 @@ #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" #include "DataFormats/SiStripDetId/interface/StripSubdetector.h" -#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" -#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" -#include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h" -#include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h" - #include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h" #include "DQM/SiStripMonitorClient/interface/SiStripUtility.h" @@ -38,7 +33,7 @@ #include SiStripAnalyser::SiStripAnalyser(edm::ParameterSet const& ps) - : condDataMon_{ps}, + : condDataMon_{ps, consumesCollector()}, actionExecutor_{ps}, tkMapPSet_{ps.getParameter("TkmapParameters")}, summaryFrequency_{ps.getUntrackedParameter("SummaryCreationFrequency", 1)}, @@ -46,6 +41,13 @@ SiStripAnalyser::SiStripAnalyser(edm::ParameterSet const& ps) globalStatusFilling_{ps.getUntrackedParameter("GlobalStatusFilling", 1)}, shiftReportFrequency_{ps.getUntrackedParameter("ShiftReportFrequency", 1)}, rawDataToken_{consumes(ps.getUntrackedParameter("RawDataTag"))}, + detCablingToken_(esConsumes()), + tTopoToken_(esConsumes()), + tTopoTokenELB_(esConsumes()), + tTopoTokenBR_(esConsumes()), + tkDetMapToken_(esConsumes()), + tkDetMapTokenELB_(esConsumes()), + tkDetMapTokenBR_(esConsumes()), printFaultyModuleList_{ps.getUntrackedParameter("PrintFaultyModuleList", true)} { std::string const localPath{"DQM/SiStripMonitorClient/test/loader.html"}; std::ifstream fin{edm::FileInPath(localPath).fullPath(), std::ios::in}; @@ -71,17 +73,15 @@ void SiStripAnalyser::beginRun(edm::Run const& run, edm::EventSetup const& eSetu edm::LogInfo("SiStripAnalyser") << "SiStripAnalyser:: Begining of Run"; // Check latest Fed cabling and create TrackerMapCreator - unsigned long long const cacheID = eSetup.get().cacheIdentifier(); - if (m_cacheID_ != cacheID) { - m_cacheID_ = cacheID; + if (fedCablingWatcher_.check(eSetup)) { edm::LogInfo("SiStripAnalyser") << "SiStripAnalyser::beginRun: " << " Change in Cabling, recrated TrackerMap"; - if (!actionExecutor_.readTkMapConfiguration(eSetup)) { + detCabling_ = &eSetup.getData(detCablingToken_); + if (!actionExecutor_.readTkMapConfiguration( + detCabling_, &eSetup.getData(tkDetMapTokenBR_), &eSetup.getData(tTopoTokenBR_))) { edm::LogInfo("SiStripAnalyser") << "SiStripAnalyser:: Error to read configuration file!! TrackerMap " "will not be produced!!!"; } - eSetup.get().get(fedCabling_); - eSetup.get().get(detCabling_); } condDataMon_.beginRun(run.run(), eSetup); if (globalStatusFilling_) { @@ -103,7 +103,7 @@ void SiStripAnalyser::analyze(edm::Event const& e, edm::EventSetup const& eSetup actionExecutor_.createDummyShiftReport(); } else { auto& dqm_store = *edm::Service{}; - actionExecutor_.fillStatus(dqm_store, detCabling_, eSetup); + actionExecutor_.fillStatus(dqm_store, detCabling_, &eSetup.getData(tkDetMapToken_), &eSetup.getData(tTopoToken_)); if (shiftReportFrequency_ != -1) actionExecutor_.createShiftReport(dqm_store); } @@ -128,7 +128,8 @@ void SiStripAnalyser::endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, ed auto& dqm_store = *edm::Service{}; // Fill Global Status if (globalStatusFilling_ > 0) { - actionExecutor_.fillStatus(dqm_store, detCabling_, eSetup); + actionExecutor_.fillStatus( + dqm_store, detCabling_, &eSetup.getData(tkDetMapTokenELB_), &eSetup.getData(tTopoTokenELB_)); } // -- Create summary monitor elements according to the frequency if (summaryFrequency_ != -1 && nLumiSecs_ > 0 && nLumiSecs_ % summaryFrequency_ == 0) { diff --git a/DQM/SiStripMonitorClient/plugins/SiStripAnalyser.h b/DQM/SiStripMonitorClient/plugins/SiStripAnalyser.h index 9fac84b3571c4..ad45ee4ee6280 100644 --- a/DQM/SiStripMonitorClient/plugins/SiStripAnalyser.h +++ b/DQM/SiStripMonitorClient/plugins/SiStripAnalyser.h @@ -11,13 +11,17 @@ #include "DQM/SiStripMonitorClient/interface/SiStripActionExecutor.h" #include "DQM/SiStripMonitorSummary/interface/SiStripClassToMonitorCondData.h" #include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/LuminosityBlock.h" #include "FWCore/Framework/interface/Run.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/EDGetToken.h" +#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" +#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" +#include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h" + #include #include #include @@ -61,10 +65,13 @@ class SiStripAnalyser : public edm::EDAnalyzer { std::string outputFilePath_; std::string outputFileName_; - edm::ESHandle fedCabling_; - edm::ESHandle detCabling_; + const SiStripDetCabling* detCabling_; + edm::ESGetToken detCablingToken_; + edm::ESWatcher fedCablingWatcher_; + edm::ESGetToken tTopoToken_, tTopoTokenELB_, tTopoTokenBR_; + edm::ESGetToken tkDetMapToken_, tkDetMapTokenELB_, tkDetMapTokenBR_; + edm::ESGetToken stripQualityToken_; - unsigned long long m_cacheID_; int nLumiSecs_{}; int nEvents_{}; bool trackerFEDsFound_{false}; diff --git a/DQM/SiStripMonitorClient/plugins/SiStripBadComponentInfo.cc b/DQM/SiStripMonitorClient/plugins/SiStripBadComponentInfo.cc index 03592503ae617..259b92631e41e 100644 --- a/DQM/SiStripMonitorClient/plugins/SiStripBadComponentInfo.cc +++ b/DQM/SiStripMonitorClient/plugins/SiStripBadComponentInfo.cc @@ -23,7 +23,12 @@ // -- Contructor // SiStripBadComponentInfo::SiStripBadComponentInfo(edm::ParameterSet const& pSet) - : bookedStatus_(false), nSubSystem_(6), qualityLabel_(pSet.getParameter("StripQualityLabel")) { + : bookedStatus_(false), + nSubSystem_(6), + qualityToken_(esConsumes( + edm::ESInputTag{"", pSet.getParameter("StripQualityLabel")})), + tTopoToken_(esConsumes()), + fedCablingToken_(esConsumes()) { addBadCompFromFedErr_ = pSet.getUntrackedParameter("AddBadComponentsFromFedErrors", false); fedErrCutoff_ = float(pSet.getUntrackedParameter("FedErrorBadComponentsCutoff", 0.8)); // Create MessageSender @@ -41,12 +46,12 @@ void SiStripBadComponentInfo::checkBadComponents(edm::EventSetup const& eSetup) LogDebug("SiStripBadComponentInfo") << "SiStripBadComponentInfo:: Begining of Run"; // Retrieve tracker topology from geometry - eSetup.get().get(tTopo_); - eSetup.get().get(fedCabling_); + tTopo_ = &eSetup.getData(tTopoToken_); + fedCabling_ = &eSetup.getData(fedCablingToken_); + siStripQuality_ = &eSetup.getData(qualityToken_); - eSetup.get().get(qualityLabel_, siStripQuality_); if (!addBadCompFromFedErr_) { - fillBadComponentMaps(siStripQuality_.product()); + fillBadComponentMaps(siStripQuality_); } } diff --git a/DQM/SiStripMonitorClient/plugins/SiStripBadComponentInfo.h b/DQM/SiStripMonitorClient/plugins/SiStripBadComponentInfo.h index 9a2711417ab35..8c15df31c4837 100644 --- a/DQM/SiStripMonitorClient/plugins/SiStripBadComponentInfo.h +++ b/DQM/SiStripMonitorClient/plugins/SiStripBadComponentInfo.h @@ -66,11 +66,13 @@ class SiStripBadComponentInfo : public DQMEDHarvester { bool bookedStatus_; int nSubSystem_; - std::string qualityLabel_; - edm::ESHandle siStripQuality_; - edm::ESHandle tTopo_; - edm::ESHandle fedCabling_; + const SiStripQuality* siStripQuality_; + const TrackerTopology* tTopo_; + const SiStripFedCabling* fedCabling_; + edm::ESGetToken qualityToken_; + edm::ESGetToken tTopoToken_; + edm::ESGetToken fedCablingToken_; bool addBadCompFromFedErr_; float fedErrCutoff_; }; diff --git a/DQM/SiStripMonitorClient/plugins/SiStripCertificationInfo.cc b/DQM/SiStripMonitorClient/plugins/SiStripCertificationInfo.cc index 0c13cfa3ca21f..c30cb43009979 100644 --- a/DQM/SiStripMonitorClient/plugins/SiStripCertificationInfo.cc +++ b/DQM/SiStripMonitorClient/plugins/SiStripCertificationInfo.cc @@ -7,19 +7,9 @@ #include "DQM/SiStripMonitorClient/interface/SiStripUtility.h" #include "SiStripCertificationInfo.h" -#include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h" -#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" -#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" - -#include "DataFormats/SiStripDetId/interface/StripSubdetector.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" - #include "DataFormats/Histograms/interface/DQMToken.h" //Run Info -#include "CondFormats/DataRecord/interface/RunSummaryRcd.h" -#include "CondFormats/RunInfo/interface/RunSummary.h" #include "CondFormats/RunInfo/interface/RunInfo.h" #include @@ -32,24 +22,20 @@ SiStripCertificationInfo::SiStripCertificationInfo(edm::ParameterSet const&) { consumes(edm::InputTag("siStripOfflineAnalyser", "DQMGenerationSiStripAnalyserRun")); consumes(edm::InputTag("siStripOfflineAnalyser", "DQMGenerationSiStripAnalyserLumi")); + detCablingToken_ = esConsumes(); + tTopoToken_ = esConsumes(); + runInfoToken_ = esConsumes(); } void SiStripCertificationInfo::beginRun(edm::Run const& run, edm::EventSetup const& eSetup) { edm::LogInfo("SiStripCertificationInfo") << "SiStripCertificationInfo:: Begining of Run"; - unsigned long long cacheID = eSetup.get().cacheIdentifier(); - if (m_cacheID_ != cacheID) { - m_cacheID_ = cacheID; - } - eSetup.get().get(detCabling_); + detCabling_ = &eSetup.getData(detCablingToken_); constexpr int siStripFedIdMin{FEDNumbering::MINSiStripFEDID}; constexpr int siStripFedIdMax{FEDNumbering::MAXSiStripFEDID}; - if (auto runInfoRec = eSetup.tryToGet()) { - edm::ESHandle sumFED; - runInfoRec->get(sumFED); - - if (sumFED.isValid()) { + if (eSetup.tryToGet()) { + if (auto sumFED = eSetup.getHandle(runInfoToken_)) { for (auto const fedID : sumFED->m_fed_in) { if (fedID >= siStripFedIdMin && fedID <= siStripFedIdMax) ++nFEDConnected_; @@ -180,9 +166,7 @@ void SiStripCertificationInfo::fillSiStripCertificationMEs(DQMStore& dqm_store, } //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - eSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); + const auto tTopo = &eSetup.getData(tTopoToken_); resetSiStripCertificationMEs(dqm_store); std::string mdir = "MechanicalView"; diff --git a/DQM/SiStripMonitorClient/plugins/SiStripCertificationInfo.h b/DQM/SiStripMonitorClient/plugins/SiStripCertificationInfo.h index b3a3167cd49a8..456d10c8489ae 100644 --- a/DQM/SiStripMonitorClient/plugins/SiStripCertificationInfo.h +++ b/DQM/SiStripMonitorClient/plugins/SiStripCertificationInfo.h @@ -29,6 +29,12 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "DQMServices/Core/interface/DQMStore.h" +#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" +#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "CondFormats/DataRecord/interface/RunSummaryRcd.h" + #include #include #include @@ -36,6 +42,7 @@ #include class SiStripDetCabling; +class RunInfo; class SiStripCertificationInfo : public edm::EDAnalyzer { public: @@ -70,10 +77,13 @@ class SiStripCertificationInfo : public edm::EDAnalyzer { MonitorElement* SiStripCertificationSummaryMap{nullptr}; bool sistripCertificationBooked_{false}; - unsigned long long m_cacheID_{}; edm::ESHandle detCabling_{}; int nFEDConnected_{}; + + edm::ESGetToken detCablingToken_; + edm::ESGetToken tTopoToken_; + edm::ESGetToken runInfoToken_; }; #endif diff --git a/DQM/SiStripMonitorClient/plugins/SiStripDaqInfo.cc b/DQM/SiStripMonitorClient/plugins/SiStripDaqInfo.cc index 5ac5afcddf6e8..bfade30f3e445 100644 --- a/DQM/SiStripMonitorClient/plugins/SiStripDaqInfo.cc +++ b/DQM/SiStripMonitorClient/plugins/SiStripDaqInfo.cc @@ -8,16 +8,10 @@ #include "DQM/SiStripMonitorClient/interface/SiStripUtility.h" #include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" - //Run Info -#include "CondFormats/DataRecord/interface/RunSummaryRcd.h" -#include "CondFormats/RunInfo/interface/RunSummary.h" #include "CondFormats/RunInfo/interface/RunInfo.h" // FED cabling and numbering -#include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h" -#include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h" #include "DataFormats/FEDRawData/interface/FEDNumbering.h" #include @@ -29,7 +23,10 @@ #include #include -SiStripDaqInfo::SiStripDaqInfo(edm::ParameterSet const&) { +SiStripDaqInfo::SiStripDaqInfo(edm::ParameterSet const&) + : fedCablingToken_{esConsumes()}, + tTopoToken_{esConsumes()}, + runInfoToken_{esConsumes()} { edm::LogInfo("SiStripDaqInfo") << "SiStripDaqInfo::Deleting SiStripDaqInfo "; } @@ -94,12 +91,8 @@ void SiStripDaqInfo::beginRun(edm::Run const& run, edm::EventSetup const& eSetup edm::LogInfo("SiStripDaqInfo") << "SiStripDaqInfo:: Begining of Run"; // Check latest Fed cabling and create TrackerMapCreator - unsigned long long cacheID = eSetup.get().cacheIdentifier(); - if (m_cacheID_ != cacheID) { - m_cacheID_ = cacheID; - - eSetup.get().get(fedCabling_); - + if (fedCablingWatcher_.check(eSetup)) { + fedCabling_ = &eSetup.getData(fedCablingToken_); readFedIds(fedCabling_, eSetup); } auto& dqm_store = *edm::Service{}; @@ -116,14 +109,10 @@ void SiStripDaqInfo::beginRun(edm::Run const& run, edm::EventSetup const& eSetup constexpr int siStripFedIdMin{FEDNumbering::MINSiStripFEDID}; constexpr int siStripFedIdMax{FEDNumbering::MAXSiStripFEDID}; - auto runInfoRec = eSetup.tryToGet(); - if (!runInfoRec) + if (!eSetup.tryToGet()) return; - - edm::ESHandle sumFED; - runInfoRec->get(sumFED); - - if (!sumFED.isValid()) + auto sumFED = eSetup.getHandle(runInfoToken_); + if (!sumFED) return; auto const& fedsInIds = sumFED->m_fed_in; @@ -145,11 +134,9 @@ void SiStripDaqInfo::analyze(edm::Event const& event, edm::EventSetup const& eSe // // -- Read Sub Detector FEDs // -void SiStripDaqInfo::readFedIds(const edm::ESHandle& fedcabling, edm::EventSetup const& iSetup) { +void SiStripDaqInfo::readFedIds(const SiStripFedCabling* fedcabling, edm::EventSetup const& iSetup) { //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); + const auto tTopo = &iSetup.getData(tTopoToken_); auto feds = fedCabling_->fedIds(); @@ -176,9 +163,7 @@ void SiStripDaqInfo::readSubdetFedFractions(DQMStore& dqm_store, std::vector const& fed_ids, edm::EventSetup const& iSetup) { //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); + const auto tTopo = &iSetup.getData(tTopoToken_); constexpr int siStripFedIdMin{FEDNumbering::MINSiStripFEDID}; constexpr int siStripFedIdMax{FEDNumbering::MAXSiStripFEDID}; diff --git a/DQM/SiStripMonitorClient/plugins/SiStripDaqInfo.h b/DQM/SiStripMonitorClient/plugins/SiStripDaqInfo.h index 84190d7ac7b01..2cf689834af1f 100644 --- a/DQM/SiStripMonitorClient/plugins/SiStripDaqInfo.h +++ b/DQM/SiStripMonitorClient/plugins/SiStripDaqInfo.h @@ -23,12 +23,17 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/LuminosityBlock.h" #include "FWCore/Framework/interface/Run.h" #include "FWCore/Framework/interface/EventSetup.h" #include "DQMServices/Core/interface/DQMStore.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h" +#include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h" +#include "CondFormats/DataRecord/interface/RunSummaryRcd.h" + #include #include #include @@ -37,6 +42,7 @@ class SiStripFedCabling; class TrackerTopology; +class RunInfo; class SiStripDaqInfo : public edm::EDAnalyzer { public: @@ -49,7 +55,7 @@ class SiStripDaqInfo : public edm::EDAnalyzer { void beginRun(edm::Run const& run, edm::EventSetup const& eSetup) override; void analyze(edm::Event const&, edm::EventSetup const&) override; - void readFedIds(edm::ESHandle const& fedcabling, edm::EventSetup const& iSetup); + void readFedIds(const SiStripFedCabling* fedcabling, edm::EventSetup const& iSetup); void readSubdetFedFractions(DQMStore& dqm_store, std::vector const& fed_ids, edm::EventSetup const& iSetup); void bookStatus(DQMStore& dqm_store); void fillDummyStatus(DQMStore& dqm_store); @@ -66,10 +72,13 @@ class SiStripDaqInfo : public edm::EDAnalyzer { std::map subDetMEsMap_; - unsigned long long m_cacheID_{}; int nFedTotal_{}; bool bookedStatus_{false}; - edm::ESHandle fedCabling_; + const SiStripFedCabling* fedCabling_; + edm::ESWatcher fedCablingWatcher_; + edm::ESGetToken fedCablingToken_; + edm::ESGetToken tTopoToken_; + edm::ESGetToken runInfoToken_; }; #endif diff --git a/DQM/SiStripMonitorClient/plugins/SiStripDcsInfo.cc b/DQM/SiStripMonitorClient/plugins/SiStripDcsInfo.cc index 089743528fdc8..044eab4d0e75e 100644 --- a/DQM/SiStripMonitorClient/plugins/SiStripDcsInfo.cc +++ b/DQM/SiStripMonitorClient/plugins/SiStripDcsInfo.cc @@ -3,22 +3,12 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DQMServices/Core/interface/DQMStore.h" +#include "CondFormats/RunInfo/interface/RunInfo.h" #include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h" #include "SiStripDcsInfo.h" #include "DQM/SiStripMonitorClient/interface/SiStripUtility.h" -#include "CondFormats/SiStripObjects/interface/SiStripDetVOff.h" -#include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h" -#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" -#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" - -//Run Info -#include "CondFormats/DataRecord/interface/RunSummaryRcd.h" -#include "CondFormats/RunInfo/interface/RunSummary.h" -#include "CondFormats/RunInfo/interface/RunInfo.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" - #include #include #include @@ -29,7 +19,16 @@ // // -- Contructor // -SiStripDcsInfo::SiStripDcsInfo(edm::ParameterSet const& pSet) { +SiStripDcsInfo::SiStripDcsInfo(edm::ParameterSet const& pSet) + : tTopoToken0_(esConsumes()), + tTopoToken1_(esConsumes()), + tTopoToken2_(esConsumes()), + tTopoToken3_(esConsumes()), + detVOffToken0_(esConsumes()), + detVOffToken1_(esConsumes()), + detVOffToken2_(esConsumes()), + detCablingToken_(esConsumes()), + runInfoToken_(esConsumes()) { LogDebug("SiStripDcsInfo") << "SiStripDcsInfo::Deleting SiStripDcsInfo "; } @@ -53,12 +52,9 @@ void SiStripDcsInfo::beginRun(edm::Run const& run, edm::EventSetup const& eSetup constexpr int siStripFedIdMax{FEDNumbering::MAXSiStripFEDID}; // Count Tracker FEDs from RunInfo - - if (auto runInfoRec = eSetup.tryToGet()) { - edm::ESHandle sumFED; - runInfoRec->get(sumFED); - - if (sumFED.isValid()) { + // + if (eSetup.tryToGet()) { + if (auto sumFED = eSetup.getHandle(runInfoToken_)) { std::vector FedsInIds = sumFED->m_fed_in; for (unsigned int it = 0; it < FedsInIds.size(); ++it) { int fedID = FedsInIds[it]; @@ -88,7 +84,7 @@ void SiStripDcsInfo::beginLuminosityBlock(edm::LuminosityBlock const& lumiSeg, e for (auto& subDetME : SubDetMEsMap) { subDetME.second.FaultyDetectors.clear(); } - readStatus(eSetup); + readStatus(eSetup, 0); nLumiAnalysed_++; } @@ -98,7 +94,7 @@ void SiStripDcsInfo::endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm if (nFEDConnected_ == 0) return; auto& dqm_store = *edm::Service{}; - readStatus(eSetup); + readStatus(eSetup, 1); fillStatus(dqm_store); } @@ -111,7 +107,7 @@ void SiStripDcsInfo::endRun(edm::Run const& run, edm::EventSetup const& eSetup) for (auto& subDetME : SubDetMEsMap) { subDetME.second.FaultyDetectors.clear(); } - readStatus(eSetup); + readStatus(eSetup, 2); auto& dqm_store = *edm::Service{}; addBadModules(dqm_store); } @@ -147,17 +143,12 @@ void SiStripDcsInfo::bookStatus(DQMStore& dqm_store) { } void SiStripDcsInfo::readCabling(edm::EventSetup const& eSetup) { - //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - eSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); - - unsigned long long cacheID = eSetup.get().cacheIdentifier(); - if (m_cacheIDCabling_ != cacheID) { - m_cacheIDCabling_ = cacheID; + const auto tTopo = &eSetup.getData(tTopoToken3_); + + if (fedCablingWatcher_.check(eSetup)) { LogDebug("SiStripDcsInfo") << "SiStripDcsInfo::readCabling : " << " Change in Cache"; - eSetup.get().get(detCabling_); + detCabling_ = &eSetup.getData(detCablingToken_); std::vector SelectedDetIds; detCabling_->addActiveDetectorsRawIds(SelectedDetIds); @@ -187,15 +178,12 @@ void SiStripDcsInfo::readCabling(edm::EventSetup const& eSetup) { // // -- Get Faulty Detectors // -void SiStripDcsInfo::readStatus(edm::EventSetup const& eSetup) { - //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - eSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); - - eSetup.get().get(siStripDetVOff_); +void SiStripDcsInfo::readStatus(edm::EventSetup const& eSetup, int transition) { + const auto tTopo = &eSetup.getData(transition == 0 ? tTopoToken0_ : (transition == 1 ? tTopoToken1_ : tTopoToken2_)); + const auto& detVOff = + eSetup.getData(transition == 0 ? detVOffToken0_ : (transition == 1 ? detVOffToken1_ : detVOffToken2_)); std::vector FaultyDetIds; - siStripDetVOff_->getDetIds(FaultyDetIds); + detVOff.getDetIds(FaultyDetIds); LogDebug("SiStripDcsInfo") << " SiStripDcsInfo::readStatus : " << " Faulty Detectors " << FaultyDetIds.size(); // Read and fille bad modules diff --git a/DQM/SiStripMonitorClient/plugins/SiStripDcsInfo.h b/DQM/SiStripMonitorClient/plugins/SiStripDcsInfo.h index fb657b5c9714a..698b470306948 100644 --- a/DQM/SiStripMonitorClient/plugins/SiStripDcsInfo.h +++ b/DQM/SiStripMonitorClient/plugins/SiStripDcsInfo.h @@ -23,12 +23,19 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/LuminosityBlock.h" #include "FWCore/Framework/interface/Run.h" #include "FWCore/Framework/interface/EventSetup.h" #include "DQMServices/Core/interface/DQMStore.h" +#include "CondFormats/SiStripObjects/interface/SiStripDetVOff.h" +#include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h" +#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" +#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "CondFormats/DataRecord/interface/RunSummaryRcd.h" + #include #include #include @@ -38,6 +45,7 @@ class SiStripDetVOff; class SiStripDetCabling; +class RunInfo; class SiStripDcsInfo : public edm::EDAnalyzer { public: @@ -55,7 +63,7 @@ class SiStripDcsInfo : public edm::EDAnalyzer { void analyze(edm::Event const&, edm::EventSetup const&) override; void bookStatus(DQMStore& dqm_store); - void readStatus(edm::EventSetup const&); + void readStatus(edm::EventSetup const&, int transition); void readCabling(edm::EventSetup const&); void addBadModules(DQMStore& dqm_store); void fillStatus(DQMStore& dqm_store); @@ -72,11 +80,9 @@ class SiStripDcsInfo : public edm::EDAnalyzer { }; std::map SubDetMEsMap{}; - unsigned long long m_cacheIDCabling_{}; unsigned long long m_cacheIDDcs_{}; bool bookedStatus_{false}; - edm::ESHandle siStripDetVOff_{}; int nFEDConnected_{}; int nLumiAnalysed_{}; @@ -86,6 +92,11 @@ class SiStripDcsInfo : public edm::EDAnalyzer { static constexpr float MinAcceptableDcsDetFrac_{0.90}; static constexpr float MaxAcceptableBadDcsLumi_{2}; - edm::ESHandle detCabling_{}; + const SiStripDetCabling* detCabling_; + edm::ESGetToken tTopoToken0_, tTopoToken1_, tTopoToken2_, tTopoToken3_; + edm::ESGetToken detVOffToken0_, detVOffToken1_, detVOffToken2_; + edm::ESWatcher fedCablingWatcher_; + edm::ESGetToken detCablingToken_; // beginRun + edm::ESGetToken runInfoToken_; }; #endif diff --git a/DQM/SiStripMonitorClient/plugins/SiStripOfflineDQM.cc b/DQM/SiStripMonitorClient/plugins/SiStripOfflineDQM.cc index 7887ad1e3cf94..325ecbf97a6e7 100644 --- a/DQM/SiStripMonitorClient/plugins/SiStripOfflineDQM.cc +++ b/DQM/SiStripMonitorClient/plugins/SiStripOfflineDQM.cc @@ -36,14 +36,8 @@ #include "SiStripOfflineDQM.h" //Run Info -#include "CondFormats/DataRecord/interface/RunSummaryRcd.h" -#include "CondFormats/RunInfo/interface/RunSummary.h" #include "CondFormats/RunInfo/interface/RunInfo.h" -// Cabling -#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" -#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" - #include #include #include @@ -52,15 +46,41 @@ #include SiStripOfflineDQM::SiStripOfflineDQM(edm::ParameterSet const& pSet) - : configPar_{pSet}, - actionExecutor_{pSet}, - usedWithEDMtoMEConverter_{configPar_.getUntrackedParameter("UsedWithEDMtoMEConverter", false)}, - createSummary_{configPar_.getUntrackedParameter("CreateSummary", false)}, - createTkInfoFile_{configPar_.getUntrackedParameter("CreateTkInfoFile", false)}, - inputFileName_{configPar_.getUntrackedParameter("InputFileName", "")}, - outputFileName_{configPar_.getUntrackedParameter("OutputFileName", "")}, - globalStatusFilling_{configPar_.getUntrackedParameter("GlobalStatusFilling", 1)}, - printFaultyModuleList_{configPar_.getUntrackedParameter("PrintFaultyModuleList", false)} { + : actionExecutor_{pSet}, + usedWithEDMtoMEConverter_{pSet.getUntrackedParameter("UsedWithEDMtoMEConverter", false)}, + createSummary_{pSet.getUntrackedParameter("CreateSummary", false)}, + createTkMap_{pSet.getUntrackedParameter("CreateTkMap", false)}, + createTkInfoFile_{pSet.getUntrackedParameter("CreateTkInfoFile", false)}, + inputFileName_{pSet.getUntrackedParameter("InputFileName", "")}, + outputFileName_{pSet.getUntrackedParameter("OutputFileName", "")}, + globalStatusFilling_{pSet.getUntrackedParameter("GlobalStatusFilling", 1)}, + printFaultyModuleList_{pSet.getUntrackedParameter("PrintFaultyModuleList", false)}, + detCablingToken_{globalStatusFilling_ > 0 || createTkMap_ + ? decltype(detCablingToken_){esConsumes()} + : decltype(detCablingToken_){}}, + tTopoToken_{globalStatusFilling_ > 0 || createTkMap_ + ? decltype(tTopoToken_){esConsumes()} + : decltype(tTopoToken_){}}, + tkDetMapToken_{globalStatusFilling_ > 0 || createTkMap_ + ? decltype(tkDetMapToken_){esConsumes()} + : decltype(tkDetMapToken_){}}, + geomDetToken_{createTkMap_ && createTkInfoFile_ ? decltype(geomDetToken_){esConsumes()} + : decltype(geomDetToken_){}}, + runInfoToken_{esConsumes()} { + if (createTkMap_) { + using QualityToken = edm::ESGetToken; + for (const auto& ps : pSet.getUntrackedParameter>("TkMapOptions")) { + edm::ParameterSet tkMapPSet = ps; + const auto map_type = ps.getUntrackedParameter("mapName", ""); + tkMapPSet.augment(pSet.getUntrackedParameter("TkmapParameters")); + const bool useSSQ = tkMapPSet.getUntrackedParameter("useSSQuality", false); + auto token = useSSQ ? QualityToken{esConsumes( + edm::ESInputTag{"", tkMapPSet.getUntrackedParameter("ssqLabel", "")})} + : QualityToken{}; + tkMapOptions_.emplace_back(map_type, std::move(tkMapPSet), useSSQ, std::move(token)); + } + } + if (createTkInfoFile_) { tkinfoTree_ = edm::Service {} ->make("TkDetIdInfo", ""); @@ -92,10 +112,8 @@ void SiStripOfflineDQM::beginRun(edm::Run const& run, edm::EventSetup const& eSe edm::LogInfo("BeginRun") << "SiStripOfflineDQM:: Begining of Run"; int nFEDs = 0; - if (auto runInfoRec = eSetup.tryToGet()) { - edm::ESHandle sumFED; - runInfoRec->get(sumFED); - if (sumFED.isValid()) { + if (eSetup.tryToGet()) { + if (auto sumFED = eSetup.getHandle(runInfoToken_)) { constexpr int siStripFedIdMin{FEDNumbering::MINSiStripFEDID}; constexpr int siStripFedIdMax{FEDNumbering::MAXSiStripFEDID}; @@ -131,10 +149,6 @@ void SiStripOfflineDQM::endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, void SiStripOfflineDQM::endRun(edm::Run const& run, edm::EventSetup const& eSetup) { edm::LogInfo("EndOfRun") << "SiStripOfflineDQM::endRun"; - // Access Cabling - edm::ESHandle det_cabling; - eSetup.get().get(det_cabling); - auto& dqm_store = *edm::Service{}; if (globalStatusFilling_ > 0) { actionExecutor_.createStatus(dqm_store); @@ -143,7 +157,8 @@ void SiStripOfflineDQM::endRun(edm::Run const& run, edm::EventSetup const& eSetu return; } // Fill Global Status - actionExecutor_.fillStatus(dqm_store, det_cabling, eSetup); + actionExecutor_.fillStatus( + dqm_store, &eSetup.getData(detCablingToken_), &eSetup.getData(tkDetMapToken_), &eSetup.getData(tTopoToken_)); } if (usedWithEDMtoMEConverter_) @@ -154,21 +169,19 @@ void SiStripOfflineDQM::endRun(edm::Run const& run, edm::EventSetup const& eSetu actionExecutor_.createSummaryOffline(dqm_store); // Create TrackerMap - bool const create_tkmap = configPar_.getUntrackedParameter("CreateTkMap", false); - if (create_tkmap) { - auto const tkMapOptions = configPar_.getUntrackedParameter>("TkMapOptions"); - if (actionExecutor_.readTkMapConfiguration(eSetup)) { - std::vector map_names; - for (auto const& ps : tkMapOptions) { - edm::ParameterSet tkMapPSet = ps; - std::string map_type = ps.getUntrackedParameter("mapName", ""); - map_names.push_back(map_type); - tkMapPSet.augment(configPar_.getUntrackedParameter("TkmapParameters")); - edm::LogInfo("TkMapParameters") << tkMapPSet; - actionExecutor_.createOfflineTkMap(tkMapPSet, dqm_store, map_type, eSetup); + if (createTkMap_) { + if (actionExecutor_.readTkMapConfiguration( + &eSetup.getData(detCablingToken_), &eSetup.getData(tkDetMapToken_), &eSetup.getData(tTopoToken_))) { + std::vector mapNames; + for (const auto& mapOptions : tkMapOptions_) { + edm::LogInfo("TkMapParameters") << mapOptions.pset; + std::string map_type = mapOptions.type; + actionExecutor_.createOfflineTkMap( + mapOptions.pset, dqm_store, map_type, mapOptions.useSSQ ? &eSetup.getData(mapOptions.token) : nullptr); + mapNames.push_back(map_type); } if (createTkInfoFile_) { - actionExecutor_.createTkInfoFile(map_names, tkinfoTree_, dqm_store); + actionExecutor_.createTkInfoFile(mapNames, tkinfoTree_, dqm_store, &eSetup.getData(geomDetToken_)); } } } diff --git a/DQM/SiStripMonitorClient/plugins/SiStripOfflineDQM.h b/DQM/SiStripMonitorClient/plugins/SiStripOfflineDQM.h index 135a104eff073..d8eabb0f7b168 100644 --- a/DQM/SiStripMonitorClient/plugins/SiStripOfflineDQM.h +++ b/DQM/SiStripMonitorClient/plugins/SiStripOfflineDQM.h @@ -31,6 +31,11 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DQMServices/Core/interface/DQMStore.h" +// Cabling +#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" +#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" +#include "CondFormats/DataRecord/interface/RunSummaryRcd.h" + #include #include #include @@ -39,6 +44,7 @@ #include class SiStripDetCabling; +class RunInfo; class SiStripOfflineDQM : public edm::one::EDProducer detCablingToken_; + edm::ESGetToken tTopoToken_; + edm::ESGetToken tkDetMapToken_; + edm::ESGetToken geomDetToken_; + edm::ESGetToken runInfoToken_; + + struct MapOptions { + std::string type; + edm::ParameterSet pset; + bool useSSQ; + edm::ESGetToken token; + + MapOptions(const std::string type_, + edm::ParameterSet&& pset_, + bool useSSQ_, + edm::ESGetToken&& token_) + : type(type_), pset(std::move(pset_)), useSSQ(useSSQ_), token(std::move(token_)) {} + }; + std::vector tkMapOptions_; }; #endif diff --git a/DQM/SiStripMonitorClient/src/SiStripActionExecutor.cc b/DQM/SiStripMonitorClient/src/SiStripActionExecutor.cc index 945e99f77a667..0d1412d4f7df3 100644 --- a/DQM/SiStripMonitorClient/src/SiStripActionExecutor.cc +++ b/DQM/SiStripMonitorClient/src/SiStripActionExecutor.cc @@ -38,8 +38,10 @@ bool SiStripActionExecutor::readConfiguration() { // // -- Read Configuration File // -bool SiStripActionExecutor::readTkMapConfiguration(edm::EventSetup const& eSetup) { - tkMapCreator_ = std::make_unique(eSetup); +bool SiStripActionExecutor::readTkMapConfiguration(const SiStripDetCabling* detCabling, + const TkDetMap* tkDetMap, + const TrackerTopology* tTopo) { + tkMapCreator_ = std::make_unique(detCabling, tkDetMap, tTopo); return tkMapCreator_.get() != nullptr; } // @@ -75,10 +77,9 @@ void SiStripActionExecutor::createSummaryOffline(DQMStore& dqm_store) { // void SiStripActionExecutor::createTkMap(edm::ParameterSet const& tkmapPset, DQMStore& dqm_store, - std::string& map_type, - edm::EventSetup const& eSetup) { + const std::string& map_type) { if (tkMapCreator_) - tkMapCreator_->create(tkmapPset, dqm_store, map_type, eSetup); + tkMapCreator_->create(tkmapPset, dqm_store, map_type); } // // -- create tracker map for offline @@ -86,20 +87,21 @@ void SiStripActionExecutor::createTkMap(edm::ParameterSet const& tkmapPset, void SiStripActionExecutor::createOfflineTkMap(edm::ParameterSet const& tkmapPset, DQMStore& dqm_store, std::string& map_type, - edm::EventSetup const& eSetup) { + const SiStripQuality* stripQuality) { if (tkMapCreator_) - tkMapCreator_->createForOffline(tkmapPset, dqm_store, map_type, eSetup); + tkMapCreator_->createForOffline(tkmapPset, dqm_store, map_type, stripQuality); } // // -- create root file with detId info from tracker maps // void SiStripActionExecutor::createTkInfoFile(std::vector map_names, TTree* tkinfo_tree, - DQMStore& dqm_store) { + DQMStore& dqm_store, + const GeometricDet* geomDet) { if (!tkMapCreator_) return; - tkMapCreator_->createInfoFile(map_names, tkinfo_tree, dqm_store); + tkMapCreator_->createInfoFile(map_names, tkinfo_tree, dqm_store, geomDet); } // // -- Create Status Monitor Elements @@ -114,9 +116,10 @@ void SiStripActionExecutor::createStatus(DQMStore& dqm_store) { void SiStripActionExecutor::fillDummyStatus() { qualityChecker_->fillDummyStatus(); } void SiStripActionExecutor::fillStatus(DQMStore& dqm_store, - edm::ESHandle const& detcabling, - edm::EventSetup const& eSetup) { - qualityChecker_->fillStatus(dqm_store, detcabling, eSetup); + const SiStripDetCabling* detcabling, + const TkDetMap* tkDetMap, + const TrackerTopology* tTopo) { + qualityChecker_->fillStatus(dqm_store, detcabling, tkDetMap, tTopo); } void SiStripActionExecutor::fillStatusAtLumi(DQMStore& dqm_store) { qualityChecker_->fillStatusAtLumi(dqm_store); } diff --git a/DQM/SiStripMonitorClient/src/SiStripQualityChecker.cc b/DQM/SiStripMonitorClient/src/SiStripQualityChecker.cc index 32fefcdc183fd..fb3b6885196d6 100644 --- a/DQM/SiStripMonitorClient/src/SiStripQualityChecker.cc +++ b/DQM/SiStripMonitorClient/src/SiStripQualityChecker.cc @@ -193,26 +193,25 @@ void SiStripQualityChecker::resetStatus() { // -- Fill Status // void SiStripQualityChecker::fillStatus(DQMStore& dqm_store, - const edm::ESHandle& cabling, - const edm::EventSetup& eSetup) { + const SiStripDetCabling* cabling, + const TkDetMap* tkDetMap, + const TrackerTopology* tTopo) { if (!bookedStripStatus_) bookStatus(dqm_store); - edm::ESHandle tkMapHandle; - eSetup.get().get(tkMapHandle); - tkDetMap_ = tkMapHandle.product(); + tkDetMap_ = tkDetMap; fillDummyStatus(); fillDetectorStatus(dqm_store, cabling); int faulty_moduleflag = pSet_.getUntrackedParameter("PrintFaultyModuleList", false); if (faulty_moduleflag) - fillFaultyModuleStatus(dqm_store, eSetup); + fillFaultyModuleStatus(dqm_store, tTopo); } // // Fill Detector Status // -void SiStripQualityChecker::fillDetectorStatus(DQMStore& dqm_store, const edm::ESHandle& cabling) { +void SiStripQualityChecker::fillDetectorStatus(DQMStore& dqm_store, const SiStripDetCabling* cabling) { unsigned int xbin = 0; float global_flag = 0; dqm_store.cd(); @@ -243,11 +242,8 @@ void SiStripQualityChecker::fillDetectorStatus(DQMStore& dqm_store, const edm::E // // -- Fill Sub detector Reports // -void SiStripQualityChecker::fillSubDetStatus(DQMStore& dqm_store, - const edm::ESHandle& cabling, - SubDetMEs& mes, - unsigned int xbin, - float& gflag) { +void SiStripQualityChecker::fillSubDetStatus( + DQMStore& dqm_store, const SiStripDetCabling* cabling, SubDetMEs& mes, unsigned int xbin, float& gflag) { int status_flag = pSet_.getUntrackedParameter("GlobalStatusFilling", 1); if (status_flag < 1) return; @@ -483,15 +479,10 @@ void SiStripQualityChecker::fillStatusHistogram(MonitorElement const* me, // // -- Create Monitor Elements for Modules // -void SiStripQualityChecker::fillFaultyModuleStatus(DQMStore& dqm_store, const edm::EventSetup& eSetup) { +void SiStripQualityChecker::fillFaultyModuleStatus(DQMStore& dqm_store, const TrackerTopology* tTopo) { if (badModuleList.empty()) return; - //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - eSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); - dqm_store.cd(); std::string mdir = "MechanicalView"; if (!SiStripUtility::goToDir(dqm_store, mdir)) diff --git a/DQM/SiStripMonitorClient/src/SiStripTrackerMapCreator.cc b/DQM/SiStripMonitorClient/src/SiStripTrackerMapCreator.cc index 1f48be9ca94f7..d9da603bbc8fc 100644 --- a/DQM/SiStripMonitorClient/src/SiStripTrackerMapCreator.cc +++ b/DQM/SiStripMonitorClient/src/SiStripTrackerMapCreator.cc @@ -7,7 +7,6 @@ #include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/EventSetup.h" #include "CalibFormats/SiStripObjects/interface/SiStripQuality.h" #include "CalibTracker/Records/interface/SiStripQualityRcd.h" @@ -20,30 +19,23 @@ #include -SiStripTrackerMapCreator::SiStripTrackerMapCreator(const edm::EventSetup& eSetup) : eSetup_{eSetup} { - eSetup_.get().get(detCabling_); - edm::ESHandle tkDetMapHandle; - eSetup_.get().get(tkDetMapHandle); - tkDetMap_ = tkDetMapHandle.product(); -} +SiStripTrackerMapCreator::SiStripTrackerMapCreator(const SiStripDetCabling* detCabling, + const TkDetMap* tkDetMap, + const TrackerTopology* tTopo) + : detCabling_(detCabling), tkDetMap_(tkDetMap), tTopo_(tTopo) {} // // -- Create Geometric and Fed Tracker Map // void SiStripTrackerMapCreator::create(const edm::ParameterSet& tkmapPset, DQMStore& dqm_store, - std::string const& map_type, - const edm::EventSetup& eSetup) { + std::string const& map_type) { const SiStripFedCabling* fedcabling = detCabling_->fedCabling(); if (!fedcabling) return; - edm::ESHandle tTopoHandle; - eSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); - - trackerMap_ = std::make_unique(tkmapPset, fedcabling, tTopo); + trackerMap_ = std::make_unique(tkmapPset, fedcabling, tTopo_); std::string tmap_title = " Tracker Map from " + map_type; trackerMap_->setTitle(tmap_title); @@ -51,15 +43,13 @@ void SiStripTrackerMapCreator::create(const edm::ParameterSet& tkmapPset, tkMapMax_ = 0.0; tkMapMin_ = 0.0; meanToMaxFactor_ = 2.5; - useSSQuality_ = false; - ssqLabel_ = ""; stripTopLevelDir_ = "SiStrip"; if (map_type == "QTestAlarm") { - setTkMapFromAlarm(dqm_store, eSetup); + setTkMapFromAlarm(dqm_store, nullptr); } else { trackerMap_->fill_all_blank(); - setTkMapFromHistogram(dqm_store, map_type, eSetup); + setTkMapFromHistogram(dqm_store, map_type); setTkMapRange(map_type); } trackerMap_->printonline(); @@ -69,7 +59,7 @@ void SiStripTrackerMapCreator::create(const edm::ParameterSet& tkmapPset, void SiStripTrackerMapCreator::createForOffline(const edm::ParameterSet& tkmapPset, DQMStore& dqm_store, std::string& map_type, - const edm::EventSetup& eSetup) { + const SiStripQuality* stripQuality) { // Determine the strip top level dirctory in the DQM file: it is the // path where MechanicalView is minus one directory std::string const mdir{"MechanicalView"}; @@ -89,15 +79,9 @@ void SiStripTrackerMapCreator::createForOffline(const edm::ParameterSet& tkmapPs if (!fedcabling) return; - edm::ESHandle tTopoHandle; - eSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); - - trackerMap_ = std::make_unique(tkmapPset, fedcabling, tTopo); + trackerMap_ = std::make_unique(tkmapPset, fedcabling, tTopo_); meanToMaxFactor_ = tkmapPset.getUntrackedParameter("meanToMaxFact", 2.5); - useSSQuality_ = tkmapPset.getUntrackedParameter("useSSQuality", false); - ssqLabel_ = tkmapPset.getUntrackedParameter("ssqLabel", ""); bool tkMapPSU = tkmapPset.getUntrackedParameter("psuMap", false); bool tkMapFED = tkmapPset.getUntrackedParameter("fedMap", false); std::string namesuffix = tkmapPset.getUntrackedParameter("mapSuffix", ""); @@ -132,9 +116,9 @@ void SiStripTrackerMapCreator::createForOffline(const edm::ParameterSet& tkmapPs topModLabel_ = " top Modules " + map_type; if (map_type == "QTestAlarm") { - setTkMapFromAlarm(dqm_store, eSetup); + setTkMapFromAlarm(dqm_store, stripQuality); } else { - setTkMapFromHistogram(dqm_store, map_type, eSetup); + setTkMapFromHistogram(dqm_store, map_type); } // if not overwitten by manual configuration min=0 and max= mean value * meanToMaxFactor_ setTkMapRangeOffline(); @@ -148,7 +132,7 @@ void SiStripTrackerMapCreator::createForOffline(const edm::ParameterSet& tkmapPs if (map_type == "ResidualsMean") { ResidualsRMS_ = false; - setTkMapFromHistogram(dqm_store, map_type, eSetup); + setTkMapFromHistogram(dqm_store, map_type); edm::LogInfo("TkMapToBeSaved") << "Ready to save TkMap " << map_type << namesuffix << " with range set to " << tkMapMin_ << " - " << tkMapMax_; trackerMap_->save(true, 0.0000000001, 0.005, map_type + namesuffix + ".svg"); @@ -161,7 +145,7 @@ void SiStripTrackerMapCreator::createForOffline(const edm::ParameterSet& tkmapPs tmap_title = " Tracker Map from " + map_type; } trackerMap_->setTitle(tmap_title); - setTkMapFromHistogram(dqm_store, map_type, eSetup); + setTkMapFromHistogram(dqm_store, map_type); edm::LogInfo("TkMapToBeSaved") << "Ready to save TkMap " << map_type << namesuffix << " with range set to 0.0 - 1.0"; trackerMap_->save(true, 0.0, 1.0, map_type + namesuffix + ".svg"); @@ -190,22 +174,11 @@ void SiStripTrackerMapCreator::createForOffline(const edm::ParameterSet& tkmapPs // // -- Fill Tracker Map with QTest Alarms and SiStripQuality bad modules // -void SiStripTrackerMapCreator::setTkMapFromAlarm(DQMStore& dqm_store, const edm::EventSetup& eSetup) { - //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - eSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); - +void SiStripTrackerMapCreator::setTkMapFromAlarm(DQMStore& dqm_store, const SiStripQuality* stripQuality) { nDet_ = 0; tkMapMax_ = 0.0; tkMapMin_ = 0.0; - edm::ESHandle ssq; - - if (useSSQuality_) { - eSetup_.get().get(ssqLabel_, ssq); - } - trackerMap_->fillc_all_blank(); std::map badmodmap; @@ -219,27 +192,26 @@ void SiStripTrackerMapCreator::setTkMapFromAlarm(DQMStore& dqm_store, const edm: continue; if (detId_save != detId) { detId_save = detId; - bool isBad = useSSQuality_ && ssq->IsModuleBad(detId); - paintTkMapFromAlarm(detId, tTopo, dqm_store, isBad, badmodmap); + bool isBad = stripQuality && stripQuality->IsModuleBad(detId); + paintTkMapFromAlarm(detId, dqm_store, isBad, badmodmap); } else { edm::LogWarning("TwiceTheSameDetId") << "The detid " << detId << " was found already in the loop on SiStripDetCabling"; } } - printBadModuleList(badmodmap, eSetup); + printBadModuleList(badmodmap); } // // // -- Paint Tracker Map with QTest Alarms // void SiStripTrackerMapCreator::paintTkMapFromAlarm(uint32_t const det_id, - TrackerTopology const* tTopo, DQMStore& dqm_store, bool const isBad, std::map& badmodmap) { std::ostringstream comment; uint16_t flag = 0; - flag = getDetectorFlagAndComment(&dqm_store, det_id, tTopo, comment); + flag = getDetectorFlagAndComment(&dqm_store, det_id, comment); int rval, gval, bval; SiStripUtility::getDetectorStatusColor(flag, rval, gval, bval); @@ -253,7 +225,7 @@ void SiStripTrackerMapCreator::paintTkMapFromAlarm(uint32_t const det_id, trackerMap_->fillc(det_id, rval, gval, bval); if (flag != 0 || isBad) { - uint lay = tTopo->layer(SiStripDetId(det_id)); + uint lay = tTopo_->layer(SiStripDetId(det_id)); std::string layer = " Layer " + std::to_string(lay); badmodmap[det_id] = comment.str() + layer; } @@ -263,9 +235,7 @@ void SiStripTrackerMapCreator::paintTkMapFromAlarm(uint32_t const det_id, // // -- Paint Tracker Map from TkHistoMap Histograms -void SiStripTrackerMapCreator::setTkMapFromHistogram(DQMStore& dqm_store, - std::string const& htype, - edm::EventSetup const& eSetup) { +void SiStripTrackerMapCreator::setTkMapFromHistogram(DQMStore& dqm_store, std::string const& htype) { dqm_store.cd(); std::string const mdir{"MechanicalView"}; @@ -319,7 +289,7 @@ void SiStripTrackerMapCreator::setTkMapFromHistogram(DQMStore& dqm_store, } dqm_store.cd(); if (topNmodVec) - printTopModules(*topNmodVec, eSetup); + printTopModules(*topNmodVec); } void SiStripTrackerMapCreator::paintTkMapFromHistogram(MonitorElement const* me, @@ -368,7 +338,6 @@ void SiStripTrackerMapCreator::paintTkMapFromHistogram(MonitorElement const* me, // uint16_t SiStripTrackerMapCreator::getDetectorFlagAndComment(DQMStore* const dqm_store, uint32_t const det_id, - const TrackerTopology* tTopo, std::ostringstream& comment) { comment << "Module " << det_id; uint16_t flag = 0; @@ -402,7 +371,7 @@ uint16_t SiStripTrackerMapCreator::getDetectorFlagAndComment(DQMStore* const dqm dqm_store->cd(); folder_organizer.setSiStripFolderName(stripTopLevelDir_); - folder_organizer.getSubDetFolder(det_id, tTopo, subdet_folder); + folder_organizer.getSubDetFolder(det_id, tTopo_, subdet_folder); LogDebug("SearchBadModule") << det_id << " " << subdet_folder << " " << stripTopLevelDir_; @@ -436,7 +405,8 @@ uint16_t SiStripTrackerMapCreator::getDetectorFlagAndComment(DQMStore* const dqm // void SiStripTrackerMapCreator::createInfoFile(std::vector const& map_names, TTree* tkinfo_tree, - DQMStore& dqm_store) { + DQMStore& dqm_store, + const GeometricDet* geomDet) { std::map tkhmap_value; int qtalarm_flag = 0; uint32_t det_id = 0; @@ -481,9 +451,7 @@ void SiStripTrackerMapCreator::createInfoFile(std::vector const& ma } } - edm::ESHandle geomDetHandle; - eSetup_.get().get(geomDetHandle); - const auto detidList = TrackerGeometryUtils::getSiStripDetIds(*geomDetHandle); + const auto detidList = TrackerGeometryUtils::getSiStripDetIds(*geomDet); for (auto const id : detidList) { det_id = id; for (uint32_t ih = 0; ih < nHists; ++ih) { @@ -504,13 +472,8 @@ void SiStripTrackerMapCreator::createInfoFile(std::vector const& ma // DQMStore-explicit usages -void SiStripTrackerMapCreator::printBadModuleList(std::map const& badmodmap, - const edm::EventSetup& eSetup) { +void SiStripTrackerMapCreator::printBadModuleList(std::map const& badmodmap) { // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - eSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); - bool tibDone = false, tidSide1Done = false, tidSide2Done = false, tobDone = false, tecSide1Done = false, tecSide2Done = false; constexpr unsigned int tibFirst = 369120277 - 1, tidSide1First = 402664197 - 1, tidSide2First = 402672389 - 1, @@ -523,17 +486,17 @@ void SiStripTrackerMapCreator::printBadModuleList(std::maptidSide(ssdetid) == 1) + if (tTopo_->tidSide(ssdetid) == 1) ntids1++; - if (tTopo->tidSide(ssdetid) == 2) + if (tTopo_->tidSide(ssdetid) == 2) ntids2++; } if (ssdetid.subDetector() == SiStripDetId::TOB) ntob++; if (ssdetid.subDetector() == SiStripDetId::TEC) { - if (tTopo->tecSide(ssdetid) == 1) + if (tTopo_->tecSide(ssdetid) == 1) ntecs1++; - if (tTopo->tecSide(ssdetid) == 2) + if (tTopo_->tecSide(ssdetid) == 2) ntecs2++; } } @@ -592,13 +555,7 @@ void SiStripTrackerMapCreator::printBadModuleList(std::map>& topNmodVec, - const edm::EventSetup& eSetup) { - //////////////Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - eSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); - +void SiStripTrackerMapCreator::printTopModules(std::vector>& topNmodVec) { if (topNmodVec.empty()) return; @@ -617,20 +574,20 @@ void SiStripTrackerMapCreator::printTopModules(std::vectortidSide(ssdetid) == 1) + if (tTopo_->tidSide(ssdetid) == 1) subdetector = "TID/MINUS "; - if (tTopo->tidSide(ssdetid) == 2) + if (tTopo_->tidSide(ssdetid) == 2) subdetector = "TID/PLUS "; } if (ssdetid.subDetector() == SiStripDetId::TOB) subdetector = "TOB "; if (ssdetid.subDetector() == SiStripDetId::TEC) { - if (tTopo->tecSide(ssdetid) == 1) + if (tTopo_->tecSide(ssdetid) == 1) subdetector = "TEC/MINUS "; - if (tTopo->tecSide(ssdetid) == 2) + if (tTopo_->tecSide(ssdetid) == 2) subdetector = "TEC/PLUS "; } - uint16_t flag = getDetectorFlagAndComment(nullptr, det_id, tTopo, comment); + uint16_t flag = getDetectorFlagAndComment(nullptr, det_id, comment); if (flag == 0) edm::LogVerbatim("TopModules") << subdetector << comment.str() << " value: " << aPair.first; } diff --git a/DQM/SiStripMonitorHardware/interface/SiStripSpyUtilities.h b/DQM/SiStripMonitorHardware/interface/SiStripSpyUtilities.h index b30697466031f..bab67eb957c5c 100644 --- a/DQM/SiStripMonitorHardware/interface/SiStripSpyUtilities.h +++ b/DQM/SiStripMonitorHardware/interface/SiStripSpyUtilities.h @@ -11,18 +11,12 @@ #include "DataFormats/Common/interface/DetSetVector.h" #include "DataFormats/SiStripDigi/interface/SiStripRawDigi.h" -#include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h" -#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" -#include "CondFormats/SiStripObjects/interface/SiStripPedestals.h" -#include "CondFormats/SiStripObjects/interface/SiStripNoises.h" - // Other classes class EventSetup; namespace sistrip { - class SpyUtilities { - public: + namespace SpyUtilities { struct Frame { uint32_t detId; uint16_t digitalLow; @@ -43,78 +37,50 @@ namespace sistrip { uint16_t maxTickHeight; }; - SpyUtilities(); - ~SpyUtilities(); - - //get cabling for an eventSetup: internal counter to see if cabling has changed. - const SiStripFedCabling* getCabling(const edm::EventSetup&); //!< Updates the cabling object from the DB. - const SiStripDetCabling* getDetCabling(const edm::EventSetup&); //!< Updates the det cabling object from the DB. - - edm::ESHandle getPedestalHandle(const edm::EventSetup& eventSetup); - edm::ESHandle getNoiseHandle(const edm::EventSetup& eventSetup); - //fill variables from frame - static const Frame extractFrameInfo(const edm::DetSetVector::detset& channelDigis, - bool aPrintDebug = false); + const Frame extractFrameInfo(const edm::DetSetVector::detset& channelDigis, + bool aPrintDebug = false); - static void getMajorityHeader(const edm::DetSetVector* aInputDigis, - uint16_t& firstHeaderBit, - bool printResult = true); + void getMajorityHeader(const edm::DetSetVector* aInputDigis, + uint16_t& firstHeaderBit, + bool printResult = true); //check frame is valid - static const bool isValid(const Frame& aFrame, const FrameQuality& aQuality, const uint16_t aExpectedPos); + const bool isValid(const Frame& aFrame, const FrameQuality& aQuality, const uint16_t aExpectedPos); //extract range, threshold and apvAddress - static const uint16_t range(const Frame& aFrame); + const uint16_t range(const Frame& aFrame); - static const uint16_t threshold(const Frame& aFrame); + const uint16_t threshold(const Frame& aFrame); - static const uint8_t extractAPVaddress(const Frame& aFrame); + const uint8_t extractAPVaddress(const Frame& aFrame); //find position of the first header and trailer bit - static const uint16_t findHeaderBits(const edm::DetSetVector::detset& channelDigis, - const uint16_t threshold); + const uint16_t findHeaderBits(const edm::DetSetVector::detset& channelDigis, + const uint16_t threshold); - static const uint16_t findTrailerBits(const edm::DetSetVector::detset& channelDigis, - const uint16_t threshold); + const uint16_t findTrailerBits(const edm::DetSetVector::detset& channelDigis, + const uint16_t threshold); //find both APV addresses and error bits - static const std::pair findAPVErrorBits(const edm::DetSetVector::detset& channelDigis, - const uint16_t threshold, - const uint16_t aFirstBits); - - static const std::pair findAPVAddresses( - const edm::DetSetVector::detset& channelDigis, - const uint16_t threshold, - const uint16_t aFirstBits); - - static std::string print(const Frame& aFrame, std::string aErr); - - static void fedIndex(uint32_t aFedIndex, uint16_t& aFedId, uint16_t& aFedChannel); - - static std::pair findMajorityValue(std::vector& values, const uint16_t aFedId = 0); + const std::pair findAPVErrorBits(const edm::DetSetVector::detset& channelDigis, + const uint16_t threshold, + const uint16_t aFirstBits); - static void fillFEDMajorities(const std::map& channelValues, - std::vector& fedMajoritiesToFill); + const std::pair findAPVAddresses(const edm::DetSetVector::detset& channelDigis, + const uint16_t threshold, + const uint16_t aFirstBits); - private: - // Cabling - const SiStripFedCabling* cabling_; //!< The cabling object. - uint32_t cacheId_; //!< DB cache ID used to establish if the cabling has changed during the run. + std::string print(const Frame& aFrame, std::string aErr); - // DetCabling - const SiStripDetCabling* detCabling_; //!< The cabling object. - uint32_t cacheIdDet_; //!< DB cache ID used to establish if the cabling has changed during the run. + void fedIndex(uint32_t aFedIndex, uint16_t& aFedId, uint16_t& aFedChannel); - //used to see if the pedestals have changed. - uint32_t pedsCacheId_; - edm::ESHandle pedsHandle_; + std::pair findMajorityValue(std::vector& values, const uint16_t aFedId = 0); - //used to see if the noises have changed. - uint32_t noiseCacheId_; - edm::ESHandle noiseHandle_; - }; + void fillFEDMajorities(const std::map& channelValues, + std::vector& fedMajoritiesToFill); + } // namespace SpyUtilities } // namespace sistrip #endif // DQM_SiStripMonitorHardware_SiStripSpyUtilities_H diff --git a/DQM/SiStripMonitorHardware/src/BuildTrackerMap.cc b/DQM/SiStripMonitorHardware/src/BuildTrackerMap.cc index 15077576d3dca..a0e69e88f57dc 100644 --- a/DQM/SiStripMonitorHardware/src/BuildTrackerMap.cc +++ b/DQM/SiStripMonitorHardware/src/BuildTrackerMap.cc @@ -29,7 +29,6 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/Utilities/interface/Exception.h" @@ -97,6 +96,10 @@ class BuildTrackerMapPlugin : public edm::EDAnalyzer { edm::ParameterSet pset_; std::vector tkmap_; + + edm::ESGetToken fedCablingToken_; + edm::ESGetToken tTopoToken_; + edm::ESGetToken tkDetMapToken_; }; // @@ -113,7 +116,10 @@ BuildTrackerMapPlugin::BuildTrackerMapPlugin(const edm::ParameterSet& iConfig) tkHistoMapNameVec_(iConfig.getUntrackedParameter>("TkHistoMapNameVec")), minVal_(iConfig.getUntrackedParameter>("MinValueVec")), maxVal_(iConfig.getUntrackedParameter>("MaxValueVec")), - pset_(iConfig.getParameter("TkmapParameters")) { + pset_(iConfig.getParameter("TkmapParameters")), + fedCablingToken_(esConsumes<>()), + tTopoToken_(esConsumes<>()), + tkDetMapToken_(esConsumes<>()) { // for (unsigned int i(0); i<34; i++){ // if (i<4) histName_[i] << "TIB/layer_" << i+1 << "/" << tkDetMapName_ << "_TIB_L" << i+1; // else if (i<7) histName_[i] << "TID/side_1/wheel_" << i-3 << "/" << tkDetMapName_ << "_TIDM_D" << i-3; @@ -286,25 +292,18 @@ void BuildTrackerMapPlugin::read(bool aMechView, void BuildTrackerMapPlugin::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { static bool firstEvent = true; - edm::ESHandle fedcabling; - iSetup.get().get(fedcabling); - - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); - if (tkHistoMapVec_.empty() && (!tkHistoMapNameVec_.empty())) { - edm::ESHandle tkDetMapHandle; - iSetup.get().get(tkDetMapHandle); - const TkDetMap* tkDetMap = tkDetMapHandle.product(); + const auto tkDetMap = &iSetup.getData(tkDetMapToken_); read(mechanicalView_, fileName_, tkDetMap, tkHistoMapVec_, isValidMap_); if (doDiff_) read(mechanicalView_, fileNameDiff_, tkDetMap, tkHistoMapVecDiff_, isValidMapDiff_); } if (firstEvent) { + const auto fedcabling = &iSetup.getData(fedCablingToken_); + const auto tTopo = &iSetup.getData(tTopoToken_); for (unsigned int i(0); i < tkHistoMapNameVec_.size(); i++) { - tkmap_.push_back(new TrackerMap(pset_, &(*fedcabling), tTopo)); + tkmap_.push_back(new TrackerMap(pset_, fedcabling, tTopo)); } } diff --git a/DQM/SiStripMonitorHardware/src/SiStripCMMonitor.cc b/DQM/SiStripMonitorHardware/src/SiStripCMMonitor.cc index 10894530065e3..aee63c29abf3c 100644 --- a/DQM/SiStripMonitorHardware/src/SiStripCMMonitor.cc +++ b/DQM/SiStripMonitorHardware/src/SiStripCMMonitor.cc @@ -22,7 +22,7 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -73,7 +73,7 @@ class SiStripCMMonitorPlugin : public DQMEDAnalyzer { void analyze(const edm::Event&, const edm::EventSetup&) override; void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override; //update the cabling if necessary - void updateCabling(const edm::EventSetup& eventSetup); + void updateCabling(const SiStripFedCablingRcd& cablingRcd); void fillMaps(uint32_t aDetId, unsigned short aChInModule, std::pair aMedians); @@ -92,9 +92,13 @@ class SiStripCMMonitorPlugin : public DQMEDAnalyzer { //print debug messages when problems are found: 1=error debug, 2=light debug, 3=full debug unsigned int printDebug_; //FED cabling - uint32_t cablingCacheId_; const SiStripFedCabling* cabling_; + edm::ESWatcher fedCablingWatcher_; + edm::ESGetToken fedCablingToken_; + edm::ESGetToken tTopoToken_; + edm::ESGetToken tkDetMapToken_; + //add parameter to save computing time if TkHistoMap are not filled bool doTkHistoMap_; @@ -121,9 +125,10 @@ SiStripCMMonitorPlugin::SiStripCMMonitorPlugin(const edm::ParameterSet& iConfig) fillWithEvtNum_(iConfig.getUntrackedParameter("FillWithEventNumber", false)), fillWithLocalEvtNum_(iConfig.getUntrackedParameter("FillWithLocalEventNumber", false)), printDebug_(iConfig.getUntrackedParameter("PrintDebugMessages", 1)), - cablingCacheId_(0) - -{ + fedCablingWatcher_(this, &SiStripCMMonitorPlugin::updateCabling), + fedCablingToken_(esConsumes<>()), + tTopoToken_(esConsumes<>()), + tkDetMapToken_(esConsumes()) { rawDataToken_ = consumes(rawDataTag_); //print config to debug log std::ostringstream debugStream; @@ -169,10 +174,7 @@ void SiStripCMMonitorPlugin::bookHistograms(DQMStore::IBooker& ibooker, const edm::EventSetup& eSetup) { ibooker.setCurrentFolder(folderName_); - edm::ESHandle tkDetMapHandle; - eSetup.get().get(tkDetMapHandle); - const TkDetMap* tkDetMap = tkDetMapHandle.product(); - + const auto tkDetMap = &eSetup.getData(tkDetMapToken_); cmHists_.bookTopLevelHistograms(ibooker, tkDetMap); if (fillAllDetailedHistograms_) @@ -181,15 +183,12 @@ void SiStripCMMonitorPlugin::bookHistograms(DQMStore::IBooker& ibooker, // ------------ method called to for each event ------------ void SiStripCMMonitorPlugin::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); + const auto tTopo = &iSetup.getData(tTopoToken_); + + fedCablingWatcher_.check(iSetup); //static bool firstEvent = true; //static bool isBeingFilled = false; - //update cabling - updateCabling(iSetup); //get raw data edm::Handle rawDataCollectionHandle; @@ -418,14 +417,8 @@ SiStripCMMonitorPlugin::endJob() } */ -void SiStripCMMonitorPlugin::updateCabling(const edm::EventSetup& eventSetup) { - uint32_t currentCacheId = eventSetup.get().cacheIdentifier(); - if (cablingCacheId_ != currentCacheId) { - edm::ESHandle cablingHandle; - eventSetup.get().get(cablingHandle); - cabling_ = cablingHandle.product(); - cablingCacheId_ = currentCacheId; - } +void SiStripCMMonitorPlugin::updateCabling(const SiStripFedCablingRcd& cablingRcd) { + cabling_ = &cablingRcd.get(fedCablingToken_); } void SiStripCMMonitorPlugin::fillMaps(uint32_t aDetId, diff --git a/DQM/SiStripMonitorHardware/src/SiStripFEDDataCheck.cc b/DQM/SiStripMonitorHardware/src/SiStripFEDDataCheck.cc index 6023a84989a09..e947d3168f425 100644 --- a/DQM/SiStripMonitorHardware/src/SiStripFEDDataCheck.cc +++ b/DQM/SiStripMonitorHardware/src/SiStripFEDDataCheck.cc @@ -19,7 +19,7 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" @@ -64,7 +64,7 @@ class SiStripFEDCheckPlugin : public DQMOneEDAnalyzer<> { bool hasFatalError(const FEDRawData& fedData, unsigned int fedId) const; bool hasNonFatalError(const FEDRawData& fedData, unsigned int fedId) const; - void updateCabling(const edm::EventSetup& eventSetup); + void updateCabling(const SiStripFedCablingRcd& cablingRcd); inline void fillPresent(unsigned int fedId, bool present); inline void fillFatalError(unsigned int fedId, bool fatalError); @@ -101,9 +101,12 @@ class SiStripFEDCheckPlugin : public DQMOneEDAnalyzer<> { bool doPayloadChecks_, checkChannelLengths_, checkPacketCodes_, checkFELengths_, checkChannelStatusBits_, verbose_; //Cabling - uint32_t cablingCacheId_; const SiStripFedCabling* cabling_; + edm::ESWatcher fedCablingWatcher_; + edm::ESGetToken fedCablingToken_; + edm::ESGetToken tTopoToken_; + unsigned int siStripFedIdMin_; unsigned int siStripFedIdMax_; @@ -139,7 +142,9 @@ SiStripFEDCheckPlugin::SiStripFEDCheckPlugin(const edm::ParameterSet& iConfig) checkFELengths_(iConfig.getUntrackedParameter("CheckFELengths", true)), checkChannelStatusBits_(iConfig.getUntrackedParameter("CheckChannelStatus", true)), verbose_(iConfig.getUntrackedParameter("verbose", false)), - cablingCacheId_(0) { + fedCablingWatcher_(this, &SiStripFEDCheckPlugin::updateCabling), + fedCablingToken_(esConsumes<>()), + tTopoToken_(esConsumes<>()) { rawDataToken_ = consumes(rawDataTag_); if (printDebug_ && !doPayloadChecks_ && (checkChannelLengths_ || checkPacketCodes_ || checkFELengths_)) { std::stringstream ss; @@ -170,13 +175,8 @@ SiStripFEDCheckPlugin::~SiStripFEDCheckPlugin() {} // ------------ method called to for each event ------------ void SiStripFEDCheckPlugin::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); - - //update cabling - updateCabling(iSetup); + const auto tTopo = &iSetup.getData(tTopoToken_); + fedCablingWatcher_.check(iSetup); //get raw data edm::Handle rawDataCollectionHandle; @@ -355,14 +355,8 @@ void SiStripFEDCheckPlugin::bookHistograms(DQMStore::IBooker& ibooker, // ------------ method called once each run just after ending the event loop ------------ void SiStripFEDCheckPlugin::dqmEndRun(edm::Run const&, edm::EventSetup const&) { updateHistograms(); } -void SiStripFEDCheckPlugin::updateCabling(const edm::EventSetup& eventSetup) { - uint32_t currentCacheId = eventSetup.get().cacheIdentifier(); - if (cablingCacheId_ != currentCacheId) { - edm::ESHandle cablingHandle; - eventSetup.get().get(cablingHandle); - cabling_ = cablingHandle.product(); - cablingCacheId_ = currentCacheId; - } +void SiStripFEDCheckPlugin::updateCabling(const SiStripFedCablingRcd& cablingRcd) { + cabling_ = &cablingRcd.get(fedCablingToken_); } void SiStripFEDCheckPlugin::fillPresent(unsigned int fedId, bool present) { diff --git a/DQM/SiStripMonitorHardware/src/SiStripFEDEmulatorModule.cc b/DQM/SiStripMonitorHardware/src/SiStripFEDEmulatorModule.cc index 673a238bd05c4..3a7f86f91aec7 100644 --- a/DQM/SiStripMonitorHardware/src/SiStripFEDEmulatorModule.cc +++ b/DQM/SiStripMonitorHardware/src/SiStripFEDEmulatorModule.cc @@ -14,7 +14,7 @@ #include "FWCore/Framework/interface/EDProducer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -78,8 +78,19 @@ namespace sistrip { std::unique_ptr algorithms_; //!< object for zero-suppression - //utilities for cabling etc... - SpyUtilities utility_; + edm::ESGetToken fedCablingToken_; + edm::ESGetToken pedestalsToken_; + edm::ESGetToken noisesToken_; + const SiStripFedCabling* fedCabling_; + const SiStripPedestals* pedestals_; + const SiStripNoises* noises_; + + edm::ESWatcher cablingWatcher_; + edm::ESWatcher pedestalsWatcher_; + edm::ESWatcher noisesWatcher_; + void updateFedCabling(const SiStripFedCablingRcd& rcd); + void updatePedestals(const SiStripPedestalsRcd& rcd); + void updateNoises(const SiStripNoisesRcd& rcd); }; } // namespace sistrip @@ -96,7 +107,13 @@ namespace sistrip { spyVirginRawDigisTag_(iConfig.getParameter("SpyVirginRawDigisTag")), byModule_(iConfig.getParameter("ByModule")), algorithms_(SiStripRawProcessingFactory::create(iConfig.getParameter("Algorithms"), - consumesCollector())) { + consumesCollector())), + fedCablingToken_(esConsumes<>()), + pedestalsToken_(esConsumes<>()), + noisesToken_(esConsumes<>()), + cablingWatcher_(this, &sistrip::FEDEmulatorModule::updateFedCabling), + pedestalsWatcher_(this, &sistrip::FEDEmulatorModule::updatePedestals), + noisesWatcher_(this, &sistrip::FEDEmulatorModule::updateNoises) { spyReorderedDigisToken_ = consumes >(spyReorderedDigisTag_); spyVirginRawDigisToken_ = consumes >(spyVirginRawDigisTag_); @@ -122,12 +139,17 @@ namespace sistrip { FEDEmulatorModule::~FEDEmulatorModule() {} + void FEDEmulatorModule::updateFedCabling(const SiStripFedCablingRcd& rcd) { + fedCabling_ = &rcd.get(fedCablingToken_); + } + void FEDEmulatorModule::updatePedestals(const SiStripPedestalsRcd& rcd) { pedestals_ = &rcd.get(pedestalsToken_); } + void FEDEmulatorModule::updateNoises(const SiStripNoisesRcd& rcd) { noises_ = &rcd.get(noisesToken_); } + // ------------ method called to for each event ------------ void FEDEmulatorModule::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - //update cabling and pedestals - const SiStripFedCabling* lCabling = utility_.getCabling(iSetup); - edm::ESHandle lPedsHandle = utility_.getPedestalHandle(iSetup); - edm::ESHandle lNoiseHandle = utility_.getNoiseHandle(iSetup); + cablingWatcher_.check(iSetup); + pedestalsWatcher_.check(iSetup); + noisesWatcher_.check(iSetup); //initialise the algorithms object for the zero suppression algorithms_->initialize(iSetup); @@ -202,7 +224,7 @@ namespace sistrip { uint16_t lFedChannel = 0; sistrip::SpyUtilities::fedIndex(lDetId, lFedId, lFedChannel); - const FedChannelConnection& lConnection = lCabling->fedConnection(lFedId, lFedChannel); + const FedChannelConnection& lConnection = fedCabling_->fedConnection(lFedId, lFedChannel); lDetId = lConnection.detId(); lNPairs = lConnection.nApvPairs(); lPair = lConnection.apvPairNumber(); @@ -212,8 +234,8 @@ namespace sistrip { //get the pedestal values //stored by module in the database - fedEmulator_.retrievePedestals(lPedsHandle); - fedEmulator_.retrieveNoises(lNoiseHandle); + fedEmulator_.retrievePedestals(pedestals_); // FIXME maybe move into FEDEmulator then? + fedEmulator_.retrieveNoises(noises_); //last option: fill medians from these ped subtr data //if want something else, need to call a method to fill diff --git a/DQM/SiStripMonitorHardware/src/SiStripFEDMonitor.cc b/DQM/SiStripMonitorHardware/src/SiStripFEDMonitor.cc index 9ac6b61463fe3..7f417c3c0c3a7 100644 --- a/DQM/SiStripMonitorHardware/src/SiStripFEDMonitor.cc +++ b/DQM/SiStripMonitorHardware/src/SiStripFEDMonitor.cc @@ -27,7 +27,7 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/LuminosityBlock.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" @@ -82,7 +82,7 @@ class SiStripFEDMonitorPlugin : public DQMOneEDAnalyzer& pair1, const std::pair& pair2); @@ -108,9 +108,13 @@ class SiStripFEDMonitorPlugin : public DQMOneEDAnalyzer fedCablingWatcher_; + edm::ESGetToken fedCablingToken_; + edm::ESGetToken tTopoToken_; + edm::ESGetToken tkDetMapToken_; + //add parameter to save computing time if TkHistoMap/Median/FeMajCheck are not enabled bool doTkHistoMap_; bool doMedHists_; @@ -138,7 +142,10 @@ SiStripFEDMonitorPlugin::SiStripFEDMonitorPlugin(const edm::ParameterSet& iConfi fillAllDetailedHistograms_(iConfig.getUntrackedParameter("FillAllDetailedHistograms", false)), fillWithEvtNum_(iConfig.getUntrackedParameter("FillWithEventNumber", false)), printDebug_(iConfig.getUntrackedParameter("PrintDebugMessages", 1)), - cablingCacheId_(0), + fedCablingWatcher_(this, &SiStripFEDMonitorPlugin::updateCabling), + fedCablingToken_(esConsumes<>()), + tTopoToken_(esConsumes<>()), + tkDetMapToken_(esConsumes()), maxFedBufferSize_(0), fullDebugMode_(iConfig.getUntrackedParameter("FullDebugMode", false)) { std::string subFolderName = iConfig.getUntrackedParameter("HistogramFolderName", "ReadoutView"); @@ -190,13 +197,8 @@ SiStripFEDMonitorPlugin::~SiStripFEDMonitorPlugin() {} // ------------ method called to for each event ------------ void SiStripFEDMonitorPlugin::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); - - //update cabling - updateCabling(iSetup); + const auto tTopo = &iSetup.getData(tTopoToken_); + fedCablingWatcher_.check(iSetup); //get raw data edm::Handle rawDataCollectionHandle; @@ -481,10 +483,7 @@ void SiStripFEDMonitorPlugin::bookHistograms(DQMStore::IBooker& ibooker, const edm::EventSetup& eSetup) { ibooker.setCurrentFolder(folderName_); - edm::ESHandle tkDetMapHandle; - eSetup.get().get(tkDetMapHandle); - const TkDetMap* tkDetMap = tkDetMapHandle.product(); - + const auto tkDetMap = &eSetup.getData(tkDetMapToken_); fedHists_.bookTopLevelHistograms(ibooker, tkDetMap); if (fillAllDetailedHistograms_) @@ -529,14 +528,8 @@ void SiStripFEDMonitorPlugin::globalEndLuminosityBlock(const edm::LuminosityBloc } } -void SiStripFEDMonitorPlugin::updateCabling(const edm::EventSetup& eventSetup) { - uint32_t currentCacheId = eventSetup.get().cacheIdentifier(); - if (cablingCacheId_ != currentCacheId) { - edm::ESHandle cablingHandle; - eventSetup.get().get(cablingHandle); - cabling_ = cablingHandle.product(); - cablingCacheId_ = currentCacheId; - } +void SiStripFEDMonitorPlugin::updateCabling(const SiStripFedCablingRcd& cablingRcd) { + cabling_ = &cablingRcd.get(fedCablingToken_); } // diff --git a/DQM/SiStripMonitorHardware/src/SiStripShotFilter.cc b/DQM/SiStripMonitorHardware/src/SiStripShotFilter.cc index bfddc7a9cb29d..3a9c05aea57d3 100644 --- a/DQM/SiStripMonitorHardware/src/SiStripShotFilter.cc +++ b/DQM/SiStripMonitorHardware/src/SiStripShotFilter.cc @@ -22,7 +22,7 @@ #include "FWCore/Framework/interface/EDFilter.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -61,14 +61,15 @@ class SiStripShotFilter : public edm::EDFilter { void endJob() override; //update the cabling if necessary - void updateCabling(const edm::EventSetup& eventSetup); + void updateCabling(const SiStripFedCablingRcd& cablingRcd); //path to output file std::ofstream fOut_; std::string fOutPath_; //FED cabling - uint32_t cablingCacheId_; const SiStripFedCabling* cabling_; + edm::ESWatcher fedCablingWatcher_; + edm::ESGetToken fedCablingToken_; edm::InputTag digicollection_; edm::EDGetTokenT > digiToken_; @@ -81,7 +82,8 @@ class SiStripShotFilter : public edm::EDFilter { SiStripShotFilter::SiStripShotFilter(const edm::ParameterSet& iConfig) : fOutPath_(iConfig.getUntrackedParameter("OutputFilePath", "shotChannels.dat")), - cablingCacheId_(0), + fedCablingWatcher_(this, &SiStripShotFilter::updateCabling), + fedCablingToken_(esConsumes<>()), digicollection_(iConfig.getParameter("DigiCollection")), zs_(iConfig.getUntrackedParameter("ZeroSuppressed", true)) @@ -97,9 +99,7 @@ SiStripShotFilter::~SiStripShotFilter() {} // ------------ method called to for each event ------------ bool SiStripShotFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) { - //update cabling - updateCabling(iSetup); - + fedCablingWatcher_.check(iSetup); //get digi data edm::Handle > digis; iEvent.getByToken(digiToken_, digis); @@ -158,14 +158,8 @@ void SiStripShotFilter::beginJob() { // ------------ method called once each job just after ending the event loop ------------ void SiStripShotFilter::endJob() { fOut_.close(); } -void SiStripShotFilter::updateCabling(const edm::EventSetup& eventSetup) { - uint32_t currentCacheId = eventSetup.get().cacheIdentifier(); - if (cablingCacheId_ != currentCacheId) { - edm::ESHandle cablingHandle; - eventSetup.get().get(cablingHandle); - cabling_ = cablingHandle.product(); - cablingCacheId_ = currentCacheId; - } +void SiStripShotFilter::updateCabling(const SiStripFedCablingRcd& cablingRcd) { + cabling_ = &cablingRcd.get(fedCablingToken_); } #include "FWCore/Framework/interface/MakerMacros.h" diff --git a/DQM/SiStripMonitorHardware/src/SiStripSpyDigiConverterModule.cc b/DQM/SiStripMonitorHardware/src/SiStripSpyDigiConverterModule.cc index e33d3b2b33b03..70e249cc9fbd8 100644 --- a/DQM/SiStripMonitorHardware/src/SiStripSpyDigiConverterModule.cc +++ b/DQM/SiStripMonitorHardware/src/SiStripSpyDigiConverterModule.cc @@ -9,19 +9,18 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/Common/interface/Handle.h" #include "DataFormats/Common/interface/DetSetVector.h" +#include "CondFormats/DataRecord/interface/SiStripFedCablingRcd.h" #include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h" #include "DataFormats/SiStripDigi/interface/SiStripRawDigi.h" #include "DQM/SiStripMonitorHardware/interface/SiStripSpyDigiConverter.h" #include "DQM/SiStripMonitorHardware/interface/SiStripSpyUtilities.h" -class SiStripFedCabling; - /** @file DQM/SiStripMonitorHardware/interface/SiStripSpyDigiConverterModule.cc @class SiStripSpyDigiConverterModule @@ -49,7 +48,10 @@ namespace sistrip { const uint32_t expectedHeaderBit_; //utilities for cabling etc... - SpyUtilities utility_; + edm::ESGetToken fedCablingToken_; + const SiStripFedCabling* fedCabling_; + edm::ESWatcher cablingWatcher_; + void updateFedCabling(const SiStripFedCablingRcd& rcd); }; } // namespace sistrip @@ -63,7 +65,9 @@ namespace sistrip { storeReorderedDigis_(pset.getParameter("StoreReorderedDigis")), storeModuleDigis_(pset.getParameter("StoreModuleDigis")), discardDigisWithAPVAddressError_(pset.getParameter("DiscardDigisWithWrongAPVAddress")), - expectedHeaderBit_(pset.getParameter("ExpectedPositionOfFirstHeaderBit")) { + expectedHeaderBit_(pset.getParameter("ExpectedPositionOfFirstHeaderBit")), + fedCablingToken_(esConsumes<>()), + cablingWatcher_(this, &sistrip::SpyDigiConverterModule::updateFedCabling) { productToken_ = consumes(productLabel_); if (edm::isDebugEnabled()) { LogTrace("SiStripSpyDigiConverter") << "[sistrip::SpyDigiConverterModule::" << __func__ << "]" @@ -98,6 +102,10 @@ namespace sistrip { } } // end of destructor. + void SpyDigiConverterModule::updateFedCabling(const SiStripFedCablingRcd& rcd) { + fedCabling_ = &rcd.get(fedCablingToken_); + } + /** Retrieves cabling map from EventSetup and spy channel scope mode digis from Event, creates DetSetVectors of SiStripRawDigis, at verious levels of @@ -107,7 +115,7 @@ namespace sistrip { void SpyDigiConverterModule::produce(edm::Event& event, const edm::EventSetup& setup) { static bool lFirstEvent = true; - const SiStripFedCabling* lCabling = utility_.getCabling(setup); + cablingWatcher_.check(setup); if (!(storePayloadDigis_ || storeReorderedDigis_ || storeModuleDigis_ || storeAPVAddress_)) return; @@ -147,7 +155,7 @@ namespace sistrip { // Merge into modules if (storeModuleDigis_) { - moduleDigis = sistrip::SpyDigiConverter::mergeModuleChannels(reorderedDigis.get(), *lCabling); + moduleDigis = sistrip::SpyDigiConverter::mergeModuleChannels(reorderedDigis.get(), *fedCabling_); } //add to event diff --git a/DQM/SiStripMonitorHardware/src/SiStripSpyDisplayModule.cc b/DQM/SiStripMonitorHardware/src/SiStripSpyDisplayModule.cc index 0e68cef69724f..f725f37778fd6 100644 --- a/DQM/SiStripMonitorHardware/src/SiStripSpyDisplayModule.cc +++ b/DQM/SiStripMonitorHardware/src/SiStripSpyDisplayModule.cc @@ -19,7 +19,7 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" // Needed for the SST cabling @@ -123,7 +123,10 @@ class SiStripSpyDisplayModule : public edm::EDAnalyzer { std::vector detIDs_; //!< Vector of detIDs that are of interest (config-specified). //now from utility class // edm::ESHandle cabling_; //!< The Strip Tracker cabling object. - sistrip::SpyUtilities utility_; + edm::ESGetToken detCablingToken_; + const SiStripDetCabling* detCabling_; + edm::ESWatcher cablingWatcher_; + void updateDetCabling(const SiStripDetCablingRcd& rcd); // Data input labels //=================== @@ -182,6 +185,8 @@ using namespace std; // SiStripSpyDisplayModule::SiStripSpyDisplayModule(const edm::ParameterSet& iConfig) : detIDs_(iConfig.getParameter >("detIDs")), + detCablingToken_(esConsumes<>()), + cablingWatcher_(this, &SiStripSpyDisplayModule::updateDetCabling), inputScopeModeRawDigiLabel_(iConfig.getParameter("InputScopeModeRawDigiLabel")), inputPayloadRawDigiLabel_(iConfig.getParameter("InputPayloadRawDigiLabel")), inputReorderedPayloadRawDigiLabel_(iConfig.getParameter("InputReorderedPayloadRawDigiLabel")), @@ -218,6 +223,11 @@ SiStripSpyDisplayModule::~SiStripSpyDisplayModule() { // // member functions // +// + +void SiStripSpyDisplayModule::updateDetCabling(const SiStripDetCablingRcd& rcd) { + detCabling_ = &rcd.get(detCablingToken_); +} void SiStripSpyDisplayModule::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) { // Retrieve FED cabling object @@ -246,8 +256,7 @@ void SiStripSpyDisplayModule::analyze(const edm::Event& iEvent, const edm::Event using namespace edm; using namespace std; - //retrieve cabling - const SiStripDetCabling* lCabling = utility_.getDetCabling(iSetup); + cablingWatcher_.check(iSetup); // Set up the event-level histogram folder //----------------------------------------- @@ -288,7 +297,7 @@ void SiStripSpyDisplayModule::analyze(const edm::Event& iEvent, const edm::Event // Loop over detIDs as obtained from the SpyChannelMonitor config file. for (std::vector::iterator d = detIDs_.begin(); d != detIDs_.end(); ++d) { // TODO: Need some error checking here, probably... - const std::vector& conns = lCabling->getConnections(*d); + const std::vector& conns = detCabling_->getConnections(*d); //cout << "________________________________________________" << endl; //cout << "FED channels found in detId " << *d << " is " << conns.size() << endl; if (!(conns.size())) { diff --git a/DQM/SiStripMonitorHardware/src/SiStripSpyEventMatcherModule.cc b/DQM/SiStripMonitorHardware/src/SiStripSpyEventMatcherModule.cc index b3d6c0172bb65..bfbbd31457608 100644 --- a/DQM/SiStripMonitorHardware/src/SiStripSpyEventMatcherModule.cc +++ b/DQM/SiStripMonitorHardware/src/SiStripSpyEventMatcherModule.cc @@ -7,9 +7,11 @@ #include "FWCore/Framework/interface/EDFilter.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h" +#include "CondFormats/DataRecord/interface/SiStripFedCablingRcd.h" #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" #include "DataFormats/FEDRawData/interface/FEDRawData.h" #include "EventFilter/SiStripRawToDigi/interface/SiStripFEDBuffer.h" @@ -50,7 +52,10 @@ namespace sistrip { const edm::InputTag primaryStreamRawDataTag_; edm::EDGetTokenT primaryStreamRawDataToken_; std::unique_ptr spyEventMatcher_; - std::unique_ptr utils_; + edm::ESGetToken fedCablingToken_; + const SiStripFedCabling* fedCabling_; + edm::ESWatcher cablingWatcher_; + void updateFedCabling(const SiStripFedCablingRcd& rcd); }; } // namespace sistrip @@ -64,7 +69,8 @@ namespace sistrip { doMerge_(config.getParameter("MergeData")), primaryStreamRawDataTag_(config.getParameter("PrimaryEventRawDataTag")), spyEventMatcher_(new SpyEventMatcher(config)), - utils_(new SpyUtilities) { + fedCablingToken_(esConsumes<>()), + cablingWatcher_(this, &SpyEventMatcherModule::updateFedCabling) { primaryStreamRawDataToken_ = consumes(primaryStreamRawDataTag_); if (doMerge_) { produces("RawSpyData"); @@ -80,14 +86,18 @@ namespace sistrip { SpyEventMatcherModule::~SpyEventMatcherModule() {} + void SpyEventMatcherModule::updateFedCabling(const SiStripFedCablingRcd& rcd) { + fedCabling_ = &rcd.get(fedCablingToken_); + } + void SpyEventMatcherModule::beginJob() { spyEventMatcher_->initialize(); } bool SpyEventMatcherModule::filter(edm::Event& event, const edm::EventSetup& eventSetup) { - const SiStripFedCabling& cabling = *(utils_->getCabling(eventSetup)); + cablingWatcher_.check(eventSetup); uint8_t apvAddress = 0; uint32_t eventId = 0; try { - findL1IDandAPVAddress(event, cabling, eventId, apvAddress); + findL1IDandAPVAddress(event, *fedCabling_, eventId, apvAddress); } catch (const cms::Exception& e) { LogError(messageLabel_) << e.what(); return (filterNonMatchingEvents_ ? false : true); @@ -95,7 +105,7 @@ namespace sistrip { const SpyEventMatcher::SpyEventList* matches = spyEventMatcher_->matchesForEvent(eventId, apvAddress); if (matches) { if (doMerge_) { - copyData(eventId, apvAddress, matches, event, cabling); + copyData(eventId, apvAddress, matches, event, *fedCabling_); } return true; } else { diff --git a/DQM/SiStripMonitorHardware/src/SiStripSpyMonitorModule.cc b/DQM/SiStripMonitorHardware/src/SiStripSpyMonitorModule.cc index 07acd9b5fe114..812a21bbd50e4 100644 --- a/DQM/SiStripMonitorHardware/src/SiStripSpyMonitorModule.cc +++ b/DQM/SiStripMonitorHardware/src/SiStripSpyMonitorModule.cc @@ -12,7 +12,7 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -102,7 +102,6 @@ class SiStripSpyMonitorModule : public DQMEDAnalyzer { uint16_t firstHeaderBit_; uint16_t firstTrailerBit_; - sistrip::SpyUtilities utility_; sistrip::SpyUtilities::FrameQuality frameQuality_; std::ofstream outfile_[20]; @@ -110,6 +109,12 @@ class SiStripSpyMonitorModule : public DQMEDAnalyzer { std::map outfileMap_; bool writeCabling_; + + edm::ESGetToken tkDetMapToken_; + edm::ESGetToken fedCablingToken_; + const SiStripFedCabling* fedCabling_; + edm::ESWatcher cablingWatcher_; + void updateFedCabling(const SiStripFedCablingRcd& rcd); }; using edm::LogError; @@ -138,7 +143,10 @@ SiStripSpyMonitorModule::SiStripSpyMonitorModule(const edm::ParameterSet& iConfi firstHeaderBit_(0), firstTrailerBit_(0), outfileNames_(iConfig.getUntrackedParameter >("OutputErrors")), - writeCabling_(iConfig.getUntrackedParameter("WriteCabling", false)) { + writeCabling_(iConfig.getUntrackedParameter("WriteCabling", false)), + tkDetMapToken_(esConsumes()), + fedCablingToken_(esConsumes<>()), + cablingWatcher_(this, &SiStripSpyMonitorModule::updateFedCabling) { spyScopeRawDigisToken_ = consumes >(spyScopeRawDigisTag_); spyPedSubtrDigisToken_ = consumes >(spyPedSubtrDigisTag_); @@ -177,6 +185,10 @@ SiStripSpyMonitorModule::~SiStripSpyMonitorModule() { outfileNames_.clear(); } +void SiStripSpyMonitorModule::updateFedCabling(const SiStripFedCablingRcd& rcd) { + fedCabling_ = &rcd.get(fedCablingToken_); +} + void SiStripSpyMonitorModule::dqmBeginRun(const edm::Run& r, const edm::EventSetup& c) { evt_ = 0; firstHeaderBit_ = 0; @@ -191,10 +203,7 @@ void SiStripSpyMonitorModule::bookHistograms(DQMStore::IBooker& ibooker, LogInfo("SiStripSpyMonitorModule") << " Histograms will be written in " << folderName_ << ". Current folder is : " << ibooker.pwd() << std::endl; - edm::ESHandle tkDetMapHandle; - eSetup.get().get(tkDetMapHandle); - const TkDetMap* tkDetMap = tkDetMapHandle.product(); - + const auto tkDetMap = &eSetup.getData(tkDetMapToken_); //this propagates dqm_ to the histoclass, must be called ! histManager_.bookTopLevelHistograms(ibooker, tkDetMap); @@ -210,13 +219,13 @@ void SiStripSpyMonitorModule::bookHistograms(DQMStore::IBooker& ibooker, // ------------ method called to for each event ------------ void SiStripSpyMonitorModule::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { //update cabling and pedestals - const SiStripFedCabling* lCabling = utility_.getCabling(iSetup); + cablingWatcher_.check(iSetup); if (evt_ == 0 && writeCabling_) { std::ofstream lOutCabling; lOutCabling.open("trackerDetId_FEDIdChNum_list.txt", std::ios::out); for (uint16_t lFedId = sistrip::FED_ID_MIN; lFedId <= sistrip::FED_ID_MAX; ++lFedId) { //loop on feds for (uint16_t lFedChannel = 0; lFedChannel < sistrip::FEDCH_PER_FED; lFedChannel++) { //loop on channels - const FedChannelConnection& lConnection = lCabling->fedConnection(lFedId, lFedChannel); + const FedChannelConnection& lConnection = fedCabling_->fedConnection(lFedId, lFedChannel); if (!lConnection.isConnected()) continue; uint32_t lDetId = lConnection.detId(); @@ -321,7 +330,7 @@ void SiStripSpyMonitorModule::analyze(const edm::Event& iEvent, const edm::Event uint32_t lFedIndex = sistrip::FEDCH_PER_FED * lFedId + lFedChannel; - const FedChannelConnection& lConnection = lCabling->fedConnection(lFedId, lFedChannel); + const FedChannelConnection& lConnection = fedCabling_->fedConnection(lFedId, lFedChannel); if (!lConnection.isConnected()) continue; diff --git a/DQM/SiStripMonitorHardware/src/SiStripSpyUnpackerModule.cc b/DQM/SiStripMonitorHardware/src/SiStripSpyUnpackerModule.cc index 45d71a5e2dc94..39571b4ab7b26 100644 --- a/DQM/SiStripMonitorHardware/src/SiStripSpyUnpackerModule.cc +++ b/DQM/SiStripMonitorHardware/src/SiStripSpyUnpackerModule.cc @@ -11,12 +11,13 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Framework/interface/MakerMacros.h" // Needed for the FED cabling #include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h" +#include "CondFormats/DataRecord/interface/SiStripFedCablingRcd.h" #include "CondFormats/SiStripObjects/interface/FedChannelConnection.h" #include "DataFormats/FEDRawData/interface/FEDNumbering.h" @@ -39,9 +40,7 @@ namespace sistrip { class SpyUnpacker; - class SpyUtilities; } // namespace sistrip -class SiStripFedCabling; using edm::LogError; using edm::LogInfo; @@ -78,8 +77,10 @@ namespace sistrip { SpyUnpacker* unpacker_; //!< //utilities for cabling etc... - SpyUtilities utility_; - + edm::ESGetToken fedCablingToken_; + const SiStripFedCabling* fedCabling_; + edm::ESWatcher cablingWatcher_; + void updateFedCabling(const SiStripFedCablingRcd& rcd); }; // end of SpyUnpackerModule class. } // end of namespace sistrip. @@ -94,7 +95,9 @@ namespace sistrip { allowIncompleteEvents_(pset.getParameter("AllowIncompleteEvents")), storeCounters_(pset.getParameter("StoreCounters")), storeScopeRawDigis_(pset.getParameter("StoreScopeRawDigis")), - unpacker_(nullptr) { + unpacker_(nullptr), + fedCablingToken_(esConsumes<>()), + cablingWatcher_(this, &sistrip::SpyUnpackerModule::updateFedCabling) { productToken_ = consumes(productLabel_); if ((fed_ids_.empty())) { @@ -133,6 +136,10 @@ namespace sistrip { } } + void SpyUnpackerModule::updateFedCabling(const SiStripFedCablingRcd& rcd) { + fedCabling_ = &rcd.get(fedCablingToken_); + } + /*! \brief Scope mode digis and event counter producer. * Retrieves cabling map from EventSetup and FEDRawDataCollection * from Event, creates a DetSetVector of SiStripRawDigis, uses the @@ -140,8 +147,7 @@ namespace sistrip { * attaches the container to the Event. */ void SpyUnpackerModule::produce(edm::Event& event, const edm::EventSetup& setup) { - const SiStripFedCabling* lCabling = utility_.getCabling(setup); - + cablingWatcher_.check(setup); //retrieve FED raw data (by label, which is "source" by default) edm::Handle buffers; event.getByToken(productToken_, buffers); @@ -157,7 +163,7 @@ namespace sistrip { //create digis // Using FED IDs... unpacker_->createDigis( - *lCabling, *buffers, digis.get(), fed_ids_, pTotalCounts.get(), pL1ACounts.get(), pGlobalRun.get()); + *fedCabling_, *buffers, digis.get(), fed_ids_, pTotalCounts.get(), pL1ACounts.get(), pGlobalRun.get()); // Add digis to event if (storeScopeRawDigis_) diff --git a/DQM/SiStripMonitorHardware/src/SiStripSpyUtilities.cc b/DQM/SiStripMonitorHardware/src/SiStripSpyUtilities.cc index a15dc4decb1d4..df182fee7a96a 100644 --- a/DQM/SiStripMonitorHardware/src/SiStripSpyUtilities.cc +++ b/DQM/SiStripMonitorHardware/src/SiStripSpyUtilities.cc @@ -1,13 +1,4 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" - -// Needed for the FED cabling and pedestals -#include "CondFormats/DataRecord/interface/SiStripFedCablingRcd.h" -#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" -#include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h" -#include "CondFormats/DataRecord/interface/SiStripPedestalsRcd.h" -#include "CondFormats/DataRecord/interface/SiStripNoisesRcd.h" #include "DQM/SiStripMonitorHardware/interface/SiStripFEDSpyBuffer.h" #include "DQM/SiStripMonitorHardware/interface/SiStripSpyUtilities.h" @@ -17,95 +8,6 @@ using edm::LogInfo; using edm::LogWarning; namespace sistrip { - SpyUtilities::SpyUtilities() - : cabling_(nullptr), - cacheId_(0), - detCabling_(nullptr), - cacheIdDet_(0), - pedsCacheId_(0), - pedsHandle_(nullptr), - noiseCacheId_(0), - noiseHandle_(nullptr) {} - - SpyUtilities::~SpyUtilities() { - if (cabling_) - cabling_ = nullptr; - if (detCabling_) - detCabling_ = nullptr; - } - - const SiStripFedCabling* SpyUtilities::getCabling(const edm::EventSetup& setup) { - uint32_t cache_id = setup.get().cacheIdentifier(); - - if (cacheId_ != cache_id) { // If the cache ID has changed since the last update... - // Update the cabling object - edm::ESHandle c; - setup.get().get(c); - cabling_ = c.product(); - - // if ( edm::isDebugEnabled() ) { - // if ( !cacheId_ ) { // First time cabling has been retrieved - print it out in full. - // std::stringstream ss; - // ss << "[sistrip::SpyChannelUnpackerModule::" << __func__ << "]" - // << " Updating cabling for first time..." << std::endl - // << " Terse print out of FED cabling:" << std::endl; - // //cabling_->terse(ss); - // //LogTrace("SiStripMonitorHardwareUnpacker") << ss.str(); - // } // end of cacheId_ check - // } // end of debugEnabled check - - // if ( edm::isDebugEnabled() ) { - // std::stringstream sss; - // sss << "[sistrip::SpyUtilities::" << __func__ << "]" - // << " Summary of FED cabling:" << std::endl; - // cabling_->summary(sss); - // LogTrace("SiStripSpyUtilities") << sss.str(); - // } - - // Update the cache ID with the new value. - cacheId_ = cache_id; - - } // end of new cache ID check - - return cabling_; - } - - const SiStripDetCabling* SpyUtilities::getDetCabling(const edm::EventSetup& setup) { - uint32_t cache_id = setup.get().cacheIdentifier(); //.get( cabling_ ); - - if (cacheIdDet_ != cache_id) { // If the cache ID has changed since the last update... - // Update the cabling object - edm::ESHandle c; - setup.get().get(c); - detCabling_ = c.product(); - cacheIdDet_ = cache_id; - } // end of new cache ID check - - return detCabling_; - } - - edm::ESHandle SpyUtilities::getPedestalHandle(const edm::EventSetup& eventSetup) { - //check if new pedestal values are available - uint32_t lCacheId = eventSetup.get().cacheIdentifier(); - if (lCacheId != pedsCacheId_) { - eventSetup.get().get(pedsHandle_); - pedsCacheId_ = lCacheId; - } - - return pedsHandle_; - } - - edm::ESHandle SpyUtilities::getNoiseHandle(const edm::EventSetup& eventSetup) { - //check if new noise values are available - uint32_t lCacheId = eventSetup.get().cacheIdentifier(); - if (lCacheId != noiseCacheId_) { - eventSetup.get().get(noiseHandle_); - noiseCacheId_ = lCacheId; - } - - return noiseHandle_; - } - const SpyUtilities::Frame SpyUtilities::extractFrameInfo( const edm::DetSetVector::detset& channelDigis, bool aPrintDebug) { SpyUtilities::Frame lFrame; diff --git a/DQM/SiStripMonitorPedestals/interface/SiStripMonitorPedestals.h b/DQM/SiStripMonitorPedestals/interface/SiStripMonitorPedestals.h index 914474cf6133f..4e3f1d75fe738 100644 --- a/DQM/SiStripMonitorPedestals/interface/SiStripMonitorPedestals.h +++ b/DQM/SiStripMonitorPedestals/interface/SiStripMonitorPedestals.h @@ -23,7 +23,7 @@ // user include files #include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -92,7 +92,7 @@ class SiStripMonitorPedestals : public DQMOneEDAnalyzer<> { DQMStore *dqmStore_; edm::ParameterSet conf_; std::map PedMEs; - edm::ESHandle detcabling; + const SiStripDetCabling *detcabling; edm::ParameterSet pedsPSet_; bool analyzed; bool firstEvent; @@ -109,7 +109,13 @@ class SiStripMonitorPedestals : public DQMOneEDAnalyzer<> { int NumCMstripsInGroup_; std::string runTypeFlag_; std::string outPutFileName; - unsigned long long m_cacheID_; + + edm::ESGetToken tTopoToken_; + edm::ESGetToken detCablingToken_; + edm::ESWatcher detCablingWatcher_; + edm::ESGetToken pedestalToken_; + edm::ESGetToken noiseToken_; + edm::ESGetToken qualityToken_; static const std::string RunMode1; static const std::string RunMode2; diff --git a/DQM/SiStripMonitorPedestals/interface/SiStripMonitorQuality.h b/DQM/SiStripMonitorPedestals/interface/SiStripMonitorQuality.h index 75695d14b5fe5..8090e242b17b7 100644 --- a/DQM/SiStripMonitorPedestals/interface/SiStripMonitorQuality.h +++ b/DQM/SiStripMonitorPedestals/interface/SiStripMonitorQuality.h @@ -23,7 +23,7 @@ // user include files #include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/Event.h" @@ -58,12 +58,17 @@ class SiStripMonitorQuality : public DQMOneEDAnalyzer<> { DQMStore *dqmStore_; edm::ParameterSet conf_; - edm::ESHandle detCabling_; - edm::ESHandle stripQuality_; + const SiStripDetCabling *detCabling_; + const SiStripQuality *stripQuality_; std::map QualityMEs; std::string dataLabel_; + edm::ESGetToken tTopoToken_; + edm::ESGetToken detCablingToken_; + edm::ESGetToken qualityToken_; + edm::ESWatcher qualityWatcher_; + unsigned long long m_cacheID_; }; diff --git a/DQM/SiStripMonitorPedestals/interface/SiStripMonitorRawData.h b/DQM/SiStripMonitorPedestals/interface/SiStripMonitorRawData.h index 2699065aa9d7a..426faf2068ab8 100644 --- a/DQM/SiStripMonitorPedestals/interface/SiStripMonitorRawData.h +++ b/DQM/SiStripMonitorPedestals/interface/SiStripMonitorRawData.h @@ -23,7 +23,7 @@ // user include files #include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Utilities/interface/EDGetToken.h" @@ -62,10 +62,10 @@ class SiStripMonitorRawData : public DQMOneEDAnalyzer<> { DQMStore *dqmStore_; edm::ParameterSet conf_; - edm::ESHandle detcabling; std::vector SelectedDetIds; - unsigned long long m_cacheID_; + edm::ESGetToken detCablingToken_; + edm::ESWatcher detCablingWatcher_; }; #endif diff --git a/DQM/SiStripMonitorPedestals/src/SiStripMonitorPedestals.cc b/DQM/SiStripMonitorPedestals/src/SiStripMonitorPedestals.cc index 489df38a03b66..025fe69bc3480 100644 --- a/DQM/SiStripMonitorPedestals/src/SiStripMonitorPedestals.cc +++ b/DQM/SiStripMonitorPedestals/src/SiStripMonitorPedestals.cc @@ -60,7 +60,8 @@ SiStripMonitorPedestals::SiStripMonitorPedestals(edm::ParameterSet const &iConfi nEvTot_(0), nIteration_(0), apvFactory_(nullptr), - m_cacheID_(0) { + tTopoToken_(esConsumes()), + detCablingToken_(esConsumes()) { // retrieve producer name of input StripDigiCollection std::string digiProducer = conf_.getParameter("DigiProducer"); std::string digiType = "VirginRaw"; @@ -73,6 +74,13 @@ SiStripMonitorPedestals::SiStripMonitorPedestals(edm::ParameterSet const &iConfi theEventIterNumber_ = pedsPSet_.getParameter("NumberOfEventsForIteration"); NumCMstripsInGroup_ = pedsPSet_.getParameter("NumCMstripsInGroup"); runTypeFlag_ = conf_.getParameter("RunTypeFlag"); + + if (runTypeFlag_ == RunMode1 || runTypeFlag_ == RunMode3) { + pedestalToken_ = esConsumes(); + noiseToken_ = esConsumes(); + qualityToken_ = esConsumes( + edm::ESInputTag{"", iConfig.getParameter("StripQualityLabel")}); + } } // // -- Destructor @@ -91,10 +99,8 @@ SiStripMonitorPedestals::~SiStripMonitorPedestals() { void SiStripMonitorPedestals::bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &run, const edm::EventSetup &eSetup) { - unsigned long long cacheID = eSetup.get().cacheIdentifier(); - if (m_cacheID_ != cacheID) { - m_cacheID_ = cacheID; - eSetup.get().get(detcabling); + if (detCablingWatcher_.check(eSetup)) { + detcabling = &eSetup.getData(detCablingToken_); edm::LogInfo("SiStripMonitorPedestals") << "SiStripMonitorPedestals::bookHistograms: " << " Creating MEs for new Cabling "; createMEs(ibooker, eSetup); @@ -108,10 +114,7 @@ void SiStripMonitorPedestals::bookHistograms(DQMStore::IBooker &ibooker, // -- Create Monitor Elements // void SiStripMonitorPedestals::createMEs(DQMStore::IBooker &ibooker, const edm::EventSetup &es) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); + const auto tTopo = &es.getData(tTopoToken_); std::vector SelectedDetIds; @@ -274,7 +277,7 @@ void SiStripMonitorPedestals::analyze(const edm::Event &iEvent, const edm::Event edm::LogInfo("SiStripMonitorPedestals") << "SiStripMonitorPedestals::analyze: Run " << iEvent.id().run() << " Event " << iEvent.id().event(); - eSetup.get().get(detcabling); + detcabling = &eSetup.getData(detCablingToken_); if (runTypeFlag_ != RunMode2 && runTypeFlag_ != RunMode3) return; @@ -493,15 +496,9 @@ void SiStripMonitorPedestals::resetMEs(uint32_t idet) { // -- Fill CondDB Monitoring Elements // void SiStripMonitorPedestals::fillCondDBMEs(edm::EventSetup const &eSetup) { - // get Pedestal and Noise ES handle - edm::ESHandle pedestalHandle; - edm::ESHandle noiseHandle; - edm::ESHandle qualityHandle; - - eSetup.get().get(pedestalHandle); - eSetup.get().get(noiseHandle); - std::string quality_label = conf_.getParameter("StripQualityLabel"); - eSetup.get().get(quality_label, qualityHandle); + const auto &pedestals = eSetup.getData(pedestalToken_); + const auto &noises = eSetup.getData(noiseToken_); + const auto &quality = eSetup.getData(qualityToken_); for (std::map::const_iterator i = PedMEs.begin(); i != PedMEs.end(); i++) { uint32_t detid = i->first; @@ -510,14 +507,14 @@ void SiStripMonitorPedestals::fillCondDBMEs(edm::EventSetup const &eSetup) { << " Get Ped/Noise/Bad Strips from CondDb for DetId " << detid; int nStrip = detcabling->nApvPairs(detid) * 256; // Get range of pedestal and noise for the detid - SiStripNoises::Range noiseRange = noiseHandle->getRange(detid); - SiStripPedestals::Range pedRange = pedestalHandle->getRange(detid); - SiStripQuality::Range qualityRange = qualityHandle->getRange(detid); + SiStripNoises::Range noiseRange = noises.getRange(detid); + SiStripPedestals::Range pedRange = pedestals.getRange(detid); + SiStripQuality::Range qualityRange = quality.getRange(detid); for (int istrip = 0; istrip < nStrip; ++istrip) { try { // Fill Pedestals - (local_modmes.PedsPerStripDB)->Fill(istrip + 1, pedestalHandle->getPed(istrip, pedRange)); + (local_modmes.PedsPerStripDB)->Fill(istrip + 1, pedestals.getPed(istrip, pedRange)); } catch (cms::Exception &e) { edm::LogError("SiStripMonitorPedestals") << "[SiStripMonitorPedestals::analyze] cms::Exception accessing " "SiStripPedestalsService_.getPedestal(" @@ -526,7 +523,7 @@ void SiStripMonitorPedestals::fillCondDBMEs(edm::EventSetup const &eSetup) { } try { // Fill Noises - (local_modmes.CMSubNoisePerStripDB)->Fill(istrip + 1, noiseHandle->getNoise(istrip, noiseRange)); + (local_modmes.CMSubNoisePerStripDB)->Fill(istrip + 1, noises.getNoise(istrip, noiseRange)); } catch (cms::Exception &e) { edm::LogError("SiStripMonitorPedestals") << "[SiStripMonitorPedestals::analyze] cms::Exception accessing " @@ -536,7 +533,7 @@ void SiStripMonitorPedestals::fillCondDBMEs(edm::EventSetup const &eSetup) { } try { // Fill BadStripsNoise - (local_modmes.BadStripsDB)->Fill(istrip + 1, qualityHandle->IsStripBad(qualityRange, istrip) ? 1. : 0.); + (local_modmes.BadStripsDB)->Fill(istrip + 1, quality.IsStripBad(qualityRange, istrip) ? 1. : 0.); } catch (cms::Exception &e) { edm::LogError("SiStripMonitorPedestals") << "[SiStripMonitorPedestals::analyze] cms::Exception accessing " diff --git a/DQM/SiStripMonitorPedestals/src/SiStripMonitorQuality.cc b/DQM/SiStripMonitorPedestals/src/SiStripMonitorQuality.cc index cb0c9334ee2d7..d1bb97f58907b 100644 --- a/DQM/SiStripMonitorPedestals/src/SiStripMonitorQuality.cc +++ b/DQM/SiStripMonitorPedestals/src/SiStripMonitorQuality.cc @@ -43,9 +43,10 @@ SiStripMonitorQuality::SiStripMonitorQuality(edm::ParameterSet const &iConfig) : dqmStore_(edm::Service().operator->()), conf_(iConfig), - m_cacheID_(0) - -{ + tTopoToken_(esConsumes()), + detCablingToken_(esConsumes()), + qualityToken_(esConsumes( + edm::ESInputTag{"", iConfig.getParameter("StripQualityLabel")})) { edm::LogInfo("SiStripMonitorQuality") << "SiStripMonitorQuality " << " Constructing....... "; } @@ -58,20 +59,13 @@ SiStripMonitorQuality::~SiStripMonitorQuality() { void SiStripMonitorQuality::bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &run, const edm::EventSetup &eSetup) { - unsigned long long cacheID = eSetup.get().cacheIdentifier(); - if (m_cacheID_ == cacheID) + if (!qualityWatcher_.check(eSetup)) return; - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - eSetup.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); - - m_cacheID_ = cacheID; + const auto tTopo = &eSetup.getData(tTopoToken_); - std::string quality_label = conf_.getParameter("StripQualityLabel"); - eSetup.get().get(quality_label, stripQuality_); - eSetup.get().get(detCabling_); + stripQuality_ = &eSetup.getData(qualityToken_); + detCabling_ = &eSetup.getData(detCablingToken_); edm::LogInfo("SiStripMonitorQuality") << "SiStripMonitorQuality::analyze: " << " Reading SiStripQuality " << std::endl; @@ -122,20 +116,12 @@ void SiStripMonitorQuality::bookHistograms(DQMStore::IBooker &ibooker, // ------------ method called to produce the data ------------ void SiStripMonitorQuality::analyze(edm::Event const &iEvent, edm::EventSetup const &eSetup) { - unsigned long long cacheID = eSetup.get().cacheIdentifier(); - if (m_cacheID_ == cacheID) + if (!qualityWatcher_.check(eSetup)) return; - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - eSetup.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); - - m_cacheID_ = cacheID; - - std::string quality_label = conf_.getParameter("StripQualityLabel"); - eSetup.get().get(quality_label, stripQuality_); - eSetup.get().get(detCabling_); + const auto tTopo = &eSetup.getData(tTopoToken_); + stripQuality_ = &eSetup.getData(qualityToken_); + detCabling_ = &eSetup.getData(detCablingToken_); edm::LogInfo("SiStripMonitorQuality") << "SiStripMonitorQuality::analyze: " << " Reading SiStripQuality " << std::endl; diff --git a/DQM/SiStripMonitorPedestals/src/SiStripMonitorRawData.cc b/DQM/SiStripMonitorPedestals/src/SiStripMonitorRawData.cc index 6e8fcb4018e58..3a84c12efe31c 100644 --- a/DQM/SiStripMonitorPedestals/src/SiStripMonitorRawData.cc +++ b/DQM/SiStripMonitorPedestals/src/SiStripMonitorRawData.cc @@ -43,7 +43,7 @@ SiStripMonitorRawData::SiStripMonitorRawData(edm::ParameterSet const &iConfig) : BadFedNumber(nullptr), dqmStore_(edm::Service().operator->()), conf_(iConfig), - m_cacheID_(0) + detCablingToken_(esConsumes()) { // retrieve producer name of input StripDigiCollection @@ -66,15 +66,13 @@ SiStripMonitorRawData::~SiStripMonitorRawData() { void SiStripMonitorRawData::bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &run, const edm::EventSetup &eSetup) { - unsigned long long cacheID = eSetup.get().cacheIdentifier(); - if (BadFedNumber) BadFedNumber->Reset(); - if (m_cacheID_ != cacheID) { - m_cacheID_ = cacheID; - eSetup.get().get(detcabling); + + if (detCablingWatcher_.check(eSetup)) { SelectedDetIds.clear(); - detcabling->addActiveDetectorsRawIds(SelectedDetIds); + const auto &detcabling = eSetup.getData(detCablingToken_); + detcabling.addActiveDetectorsRawIds(SelectedDetIds); edm::LogInfo("SiStripMonitorRawData") << "SiStripMonitorRawData::bookHistograms: " << " Creating MEs for new Cabling "; @@ -92,7 +90,7 @@ void SiStripMonitorRawData::analyze(edm::Event const &iEvent, edm::EventSetup co edm::LogInfo("SiStripMonitorRawData") << "SiStripMonitorRawData::analyze: Run " << iEvent.id().run() << " Event " << iEvent.id().event(); - iSetup.get().get(detcabling); + const auto &detcabling = iSetup.getData(detCablingToken_); // get DigiCollection object from Event edm::Handle> digi_collection; @@ -103,7 +101,7 @@ void SiStripMonitorRawData::analyze(edm::Event const &iEvent, edm::EventSetup co ++idetid) { std::vector>::const_iterator digis = digi_collection->find((*idetid)); if (digis == digi_collection->end() || digis->data.empty() || digis->data.size() > 768) { - std::vector fed_conns = detcabling->getConnections((*idetid)); + std::vector fed_conns = detcabling.getConnections((*idetid)); for (unsigned int k = 0; k < fed_conns.size(); k++) { if (fed_conns[k] && fed_conns[k]->isConnected()) { float fed_id = fed_conns[k]->fedId() + 0.01 * fed_conns[k]->fedCh(); diff --git a/DQM/SiStripMonitorSummary/interface/SiStripApvGainsDQM.h b/DQM/SiStripMonitorSummary/interface/SiStripApvGainsDQM.h index 46c87bc558e6e..9e677d61bb14a 100644 --- a/DQM/SiStripMonitorSummary/interface/SiStripApvGainsDQM.h +++ b/DQM/SiStripMonitorSummary/interface/SiStripApvGainsDQM.h @@ -1,43 +1,31 @@ #ifndef SiStripMonitorSummary_SiStripApvGainsDQM_h #define SiStripMonitorSummary_SiStripApvGainsDQM_h -#include "FWCore/Framework/interface/ESHandle.h" - #include "DQM/SiStripMonitorSummary/interface/SiStripBaseCondObjDQM.h" #include "CondFormats/DataRecord/interface/SiStripApvGainRcd.h" #include "CondFormats/SiStripObjects/interface/SiStripApvGain.h" -class SiStripApvGainsDQM : public SiStripBaseCondObjDQM { +class SiStripApvGainsDQM : public SiStripBaseCondObjDQMGet { public: - SiStripApvGainsDQM(const edm::EventSetup &eSetup, + SiStripApvGainsDQM(edm::ESGetToken token, edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet); + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo, + const TkDetMap *tkDetMap); ~SiStripApvGainsDQM() override; void getActiveDetIds(const edm::EventSetup &eSetup) override; - void fillModMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) override; - void fillSummaryMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) override; + void fillModMEs(const std::vector &selectedDetIds) override; + void fillSummaryMEs(const std::vector &selectedDetIds) override; - void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_, const TrackerTopology *tTopo) override; + void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_) override; void fillMEsForLayer( - /*std::map selModMEsMap_, */ uint32_t selDetId_, const TrackerTopology *tTopo) override; - - unsigned long long getCache(const edm::EventSetup &eSetup) override { - return eSetup.get().cacheIdentifier(); - } - - void getConditionObject(const edm::EventSetup &eSetup) override { - eSetup.get().get(gainHandle_); - cacheID_memory = cacheID_current; - } - -private: - edm::ESHandle gainHandle_; + /*std::map selModMEsMap_, */ uint32_t selDetId_) override; }; #endif diff --git a/DQM/SiStripMonitorSummary/interface/SiStripBackPlaneCorrectionDQM.h b/DQM/SiStripMonitorSummary/interface/SiStripBackPlaneCorrectionDQM.h index 332ba0a5d1e83..7288677216cfe 100644 --- a/DQM/SiStripMonitorSummary/interface/SiStripBackPlaneCorrectionDQM.h +++ b/DQM/SiStripMonitorSummary/interface/SiStripBackPlaneCorrectionDQM.h @@ -6,35 +6,26 @@ #include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h" #include "CondFormats/SiStripObjects/interface/SiStripBackPlaneCorrection.h" -class SiStripBackPlaneCorrectionDQM : public SiStripBaseCondObjDQM { +class SiStripBackPlaneCorrectionDQM + : public SiStripBaseCondObjDQMGet { public: - SiStripBackPlaneCorrectionDQM(const edm::EventSetup &eSetup, + SiStripBackPlaneCorrectionDQM(edm::ESGetToken token, edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet); + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo, + const TkDetMap *tkDetMap); ~SiStripBackPlaneCorrectionDQM() override; void getActiveDetIds(const edm::EventSetup &eSetup) override; - void fillModMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) override{}; - void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_, const TrackerTopology *tTopo) override{}; + void fillModMEs(const std::vector &selectedDetIds) override{}; + void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_) override{}; - void fillSummaryMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) override; + void fillSummaryMEs(const std::vector &selectedDetIds) override; void fillMEsForLayer( - /*std::map selModMEsMap_, */ uint32_t selDetId_, const TrackerTopology *tTopo) override; - - unsigned long long getCache(const edm::EventSetup &eSetup) override { - return eSetup.get().cacheIdentifier(); - } - - void getConditionObject(const edm::EventSetup &eSetup) override { - eSetup.get().get(bpcorrectionHandle_); - cacheID_memory = cacheID_current; - } - -private: - edm::ESHandle bpcorrectionHandle_; + /*std::map selModMEsMap_, */ uint32_t selDetId_) override; }; #endif diff --git a/DQM/SiStripMonitorSummary/interface/SiStripBaseCondObjDQM.h b/DQM/SiStripMonitorSummary/interface/SiStripBaseCondObjDQM.h index 64845fe5cdc42..50c6c0b5b5045 100644 --- a/DQM/SiStripMonitorSummary/interface/SiStripBaseCondObjDQM.h +++ b/DQM/SiStripMonitorSummary/interface/SiStripBaseCondObjDQM.h @@ -1,17 +1,15 @@ #ifndef SiStripMonitorSummary_SiStripBaseCondObjDQM_h #define SiStripMonitorSummary_SiStripBaseCondObjDQM_h -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "DataFormats/DetId/interface/DetId.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" - #include "DataFormats/SiStripDetId/interface/SiStripDetId.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" #include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h" #include "DQM/SiStripCommon/interface/SiStripHistoId.h" @@ -20,9 +18,6 @@ #include "CalibTracker/SiStripCommon/interface/SiStripDetInfoFileReader.h" -#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" -#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" - #include "CommonTools/TrackerMap/interface/TrackerMap.h" #include "DQM/SiStripCommon/interface/TkHistoMap.h" /// ADDITON OF TK_HISTO_MAP @@ -39,10 +34,10 @@ class SiStripBaseCondObjDQM { typedef dqm::legacy::DQMStore DQMStore; typedef dqm::legacy::MonitorElement MonitorElement; - SiStripBaseCondObjDQM(const edm::EventSetup &eSetup, - edm::RunNumber_t iRun, + SiStripBaseCondObjDQM(edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet); + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo); virtual ~SiStripBaseCondObjDQM(){}; @@ -56,13 +51,12 @@ class SiStripBaseCondObjDQM { uint32_t requestedSide, uint32_t requestedLayer); - std::vector getCabledModules(); - void selectModules(std::vector &detIds_, const TrackerTopology *tTopo); + void selectModules(std::vector &detIds_); // virtual void fillTopSummaryMEs()=0; - virtual unsigned long long getCache(const edm::EventSetup &eSetup_) = 0; virtual void getConditionObject(const edm::EventSetup &eSetup_) = 0; + virtual bool checkChanged(const edm::EventSetup &eSetup) = 0; virtual void end(); @@ -83,25 +77,22 @@ class SiStripBaseCondObjDQM { MonitorElement *SummaryDistr; }; - void getModMEs(ModMEs &CondObj_ME, const uint32_t &detId_, const TrackerTopology *tTopo); - void getSummaryMEs(ModMEs &CondObj_ME, const uint32_t &detId_, const TrackerTopology *tTopo); - std::pair getLayerNameAndId(const uint32_t &detId_, const TrackerTopology *tTopo); - std::pair getStringNameAndId(const uint32_t &detId_, const TrackerTopology *tTopo); - std::vector GetSameLayerDetId(const std::vector &activeDetIds, - uint32_t selDetId, - const TrackerTopology *tTopo); - - virtual void fillModMEs(const std::vector &selectedDetIds, const edm::EventSetup &es); - virtual void fillSummaryMEs(const std::vector &selectedDetIds, const edm::EventSetup &es); - virtual void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_, const TrackerTopology *tTopo) = 0; + void getModMEs(ModMEs &CondObj_ME, const uint32_t &detId_); + void getSummaryMEs(ModMEs &CondObj_ME, const uint32_t &detId_); + std::pair getLayerNameAndId(const uint32_t &detId_); + std::pair getStringNameAndId(const uint32_t &detId_); + std::vector GetSameLayerDetId(const std::vector &activeDetIds, uint32_t selDetId); + + virtual void fillModMEs(const std::vector &selectedDetIds); + virtual void fillSummaryMEs(const std::vector &selectedDetIds); + virtual void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_) = 0; virtual void fillMEsForLayer( - /*std::map selModMEsMap_, */ uint32_t selDetId_, const TrackerTopology *tTopo) = 0; + /*std::map selModMEsMap_, */ uint32_t selDetId_) = 0; void fillTkMap(const uint32_t &detid, const float &value); SiStripDetInfoFileReader *reader; - const edm::EventSetup &eSetup_; edm::ParameterSet hPSet_; edm::ParameterSet fPSet_; @@ -123,24 +114,19 @@ class SiStripBaseCondObjDQM { std::vector activeDetIds; std::vector all_DetIds; - unsigned long long cacheID_memory; - unsigned long long cacheID_current; - std::unique_ptr Tk_HM_; std::unique_ptr Tk_HM_H; std::unique_ptr Tk_HM_L; TrackerMap *tkMap; + const TrackerTopology *tTopo_; + private: - void bookProfileMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, const uint32_t &detId_, const TrackerTopology *tTopo); - void bookCumulMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, const uint32_t &detId_, const TrackerTopology *tTopo); - void bookSummaryProfileMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, - const uint32_t &detId_, - const TrackerTopology *tTopo); - void bookSummaryCumulMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, - const uint32_t &detId_, - const TrackerTopology *tTopo); - void bookSummaryMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, const uint32_t &detId_, const TrackerTopology *tTopo); + void bookProfileMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, const uint32_t &detId_); + void bookCumulMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, const uint32_t &detId_); + void bookSummaryProfileMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, const uint32_t &detId_); + void bookSummaryCumulMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, const uint32_t &detId_); + void bookSummaryMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, const uint32_t &detId_); void bookTkMap(const std::string &TkMapname); @@ -150,8 +136,6 @@ class SiStripBaseCondObjDQM { std::vector ModulesToBeIncluded_; std::vector SubDetectorsToBeExcluded_; - edm::ESHandle detCablingHandle_; - std::string condDataMonitoringMode_; SiStripHistoId hidmanager; @@ -160,4 +144,27 @@ class SiStripBaseCondObjDQM { edm::RunNumber_t runNumber_; }; +template +class SiStripBaseCondObjDQMGet : public SiStripBaseCondObjDQM { +public: + using tokentype = typename edm::ESGetToken; + SiStripBaseCondObjDQMGet(tokentype token, + edm::RunNumber_t iRun, + edm::ParameterSet const &hPSet, + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo) + : SiStripBaseCondObjDQM{iRun, hPSet, fPSet, tTopo}, token_{token} {} + ~SiStripBaseCondObjDQMGet() override {} + + void getConditionObject(const edm::EventSetup &eSetup) override { condObj_ = &eSetup.getData(token_); } + bool checkChanged(const edm::EventSetup &eSetup) override { return watcher_.check(eSetup); } + +protected: + const CondObj *condObj_; + +private: + tokentype token_; + edm::ESWatcher watcher_; +}; + #endif diff --git a/DQM/SiStripMonitorSummary/interface/SiStripCablingDQM.h b/DQM/SiStripMonitorSummary/interface/SiStripCablingDQM.h index 47264994ddffe..d1c1a06a7b934 100644 --- a/DQM/SiStripMonitorSummary/interface/SiStripCablingDQM.h +++ b/DQM/SiStripMonitorSummary/interface/SiStripCablingDQM.h @@ -3,46 +3,30 @@ #include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" #include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" -#include "CalibTracker/SiStripCommon/interface/SiStripDetInfoFileReader.h" -#include "CondFormats/DataRecord/interface/SiStripNoisesRcd.h" -#include "CondFormats/DataRecord/interface/SiStripPedestalsRcd.h" -#include "CondFormats/SiStripObjects/interface/SiStripNoises.h" -#include "CondFormats/SiStripObjects/interface/SiStripPedestals.h" + #include "DQM/SiStripMonitorSummary/interface/SiStripBaseCondObjDQM.h" -#include "FWCore/Framework/interface/ESHandle.h" -class SiStripCablingDQM : public SiStripBaseCondObjDQM { +class SiStripCablingDQM : public SiStripBaseCondObjDQMGet { public: - SiStripCablingDQM(const edm::EventSetup &eSetup, + SiStripCablingDQM(edm::ESGetToken token, edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet); + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo, + const TkDetMap *tkDetMap); ~SiStripCablingDQM() override; - void fillModMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) override { ; } - void fillSummaryMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) override { ; } + void fillModMEs(const std::vector &selectedDetIds) override { ; } + void fillSummaryMEs(const std::vector &selectedDetIds) override { ; } - void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_, const TrackerTopology *tTopo) override { ; } + void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_) override { ; } void fillMEsForLayer( - /*std::map selModMEsMap_, */ uint32_t selDetId_, const TrackerTopology *tTopo) override { + /*std::map selModMEsMap_, */ uint32_t selDetId_) override { ; } void getActiveDetIds(const edm::EventSetup &eSetup) override; - unsigned long long getCache(const edm::EventSetup &eSetup) override { - return eSetup.get().cacheIdentifier(); - } - - void getConditionObject(const edm::EventSetup &eSetup) override { - eSetup.get().get(cablingHandle_); - cacheID_memory = cacheID_current; - } - -private: - // SiStripDetInfoFileReader* reader; - // std::pair getLayerNameAndId(const uint32_t&); - edm::ESHandle cablingHandle_; }; #endif diff --git a/DQM/SiStripMonitorSummary/interface/SiStripClassToMonitorCondData.h b/DQM/SiStripMonitorSummary/interface/SiStripClassToMonitorCondData.h index 5eb462de81412..90dee10c06960 100644 --- a/DQM/SiStripMonitorSummary/interface/SiStripClassToMonitorCondData.h +++ b/DQM/SiStripMonitorSummary/interface/SiStripClassToMonitorCondData.h @@ -6,26 +6,41 @@ // Class : SiStripClassToMonitorCondData // // Original Author: Evelyne Delmeire +// SiStripClassToMonitorCondData+SiStripCondDataMonitor -> SiStripMonitorCondData: Pieter David // // system include files #include +#include +#include +#include +#include // user include files -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Frameworkfwd.h" - #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - +#include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" - #include "DQMServices/Core/interface/DQMStore.h" -#include -#include -#include -#include + +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "CondFormats/DataRecord/interface/SiStripPedestalsRcd.h" +#include "CondFormats/DataRecord/interface/SiStripNoisesRcd.h" +#include "CondFormats/DataRecord/interface/SiStripApvGainRcd.h" +#include "CondFormats/DataRecord/interface/SiStripLorentzAngleRcd.h" +#include "CondFormats/DataRecord/interface/SiStripThresholdRcd.h" +#include "CalibTracker/Records/interface/SiStripQualityRcd.h" +#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" + +class TkDetMap; +class SiStripPedestals; +class SiStripNoises; +class SiStripQuality; +class SiStripApvGain; +class SiStripLorentzAngle; +class SiStripBackPlaneCorrection; +class SiStripThreshold; +class SiStripDetCabling; class SiStripPedestalsDQM; class SiStripNoisesDQM; @@ -41,15 +56,13 @@ class SiStripClassToMonitorCondData { typedef dqm::legacy::MonitorElement MonitorElement; typedef dqm::legacy::DQMStore DQMStore; - explicit SiStripClassToMonitorCondData(edm::ParameterSet const &iConfig); - + SiStripClassToMonitorCondData(edm::ParameterSet const &iConfig, edm::ConsumesCollector iC); ~SiStripClassToMonitorCondData(); - void beginJob(); void beginRun(edm::RunNumber_t iRun, edm::EventSetup const &eSetup); void analyseCondData(const edm::EventSetup &); - void endRun(edm::EventSetup const &eSetup); - void endJob(); + void end(); + void save(); void getModMEsOnDemand(edm::EventSetup const &eSetup, uint32_t requestedDetId); void getLayerMEsOnDemand(edm::EventSetup const &eSetup, @@ -70,10 +83,6 @@ class SiStripClassToMonitorCondData { bool monitorHighThreshold_; bool monitorCabling_; - bool gainRenormalisation_; - - std::string outPutFileName; - std::unique_ptr pedestalsDQM_; std::unique_ptr noisesDQM_; std::unique_ptr qualityDQM_; @@ -83,6 +92,20 @@ class SiStripClassToMonitorCondData { std::unique_ptr cablingDQM_; std::unique_ptr lowthresholdDQM_; std::unique_ptr highthresholdDQM_; + + edm::ESGetToken tkDetMapToken_; + edm::ESGetToken tTopoToken_; + + edm::ESGetToken pedestalsToken_; + edm::ESGetToken noiseToken_; + edm::ESGetToken simGainToken_; + edm::ESGetToken gainTokenForNoise_; + edm::ESGetToken gainToken_; + edm::ESGetToken qualityToken_; + edm::ESGetToken lorentzAngleToken_; + edm::ESGetToken backplaneCorrectionToken_; + edm::ESGetToken thresholdToken_; + edm::ESGetToken detCablingToken_; }; #endif diff --git a/DQM/SiStripMonitorSummary/interface/SiStripLorentzAngleDQM.h b/DQM/SiStripMonitorSummary/interface/SiStripLorentzAngleDQM.h index 7ac7fa9402aec..204c0a5ea7a25 100644 --- a/DQM/SiStripMonitorSummary/interface/SiStripLorentzAngleDQM.h +++ b/DQM/SiStripMonitorSummary/interface/SiStripLorentzAngleDQM.h @@ -6,35 +6,25 @@ #include "CondFormats/DataRecord/interface/SiStripLorentzAngleRcd.h" #include "CondFormats/SiStripObjects/interface/SiStripLorentzAngle.h" -class SiStripLorentzAngleDQM : public SiStripBaseCondObjDQM { +class SiStripLorentzAngleDQM : public SiStripBaseCondObjDQMGet { public: - SiStripLorentzAngleDQM(const edm::EventSetup &eSetup, + SiStripLorentzAngleDQM(edm::ESGetToken token, edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet); + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo, + const TkDetMap *tkDetMap); ~SiStripLorentzAngleDQM() override; void getActiveDetIds(const edm::EventSetup &eSetup) override; - void fillModMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) override{}; - void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_, const TrackerTopology *tTopo) override{}; + void fillModMEs(const std::vector &selectedDetIds) override{}; + void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_) override{}; - void fillSummaryMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) override; + void fillSummaryMEs(const std::vector &selectedDetIds) override; void fillMEsForLayer( - /*std::map selModMEsMap_, */ uint32_t selDetId_, const TrackerTopology *tTopo) override; - - unsigned long long getCache(const edm::EventSetup &eSetup) override { - return eSetup.get().cacheIdentifier(); - } - - void getConditionObject(const edm::EventSetup &eSetup) override { - eSetup.get().get(lorentzangleHandle_); - cacheID_memory = cacheID_current; - } - -private: - edm::ESHandle lorentzangleHandle_; + /*std::map selModMEsMap_, */ uint32_t selDetId_) override; }; #endif diff --git a/DQM/SiStripMonitorSummary/interface/SiStripNoisesDQM.h b/DQM/SiStripMonitorSummary/interface/SiStripNoisesDQM.h index 43ad1f727caf0..08d1447c0e35e 100644 --- a/DQM/SiStripMonitorSummary/interface/SiStripNoisesDQM.h +++ b/DQM/SiStripMonitorSummary/interface/SiStripNoisesDQM.h @@ -3,40 +3,30 @@ #include "DQM/SiStripMonitorSummary/interface/SiStripBaseCondObjDQM.h" -#include "CondFormats/DataRecord/interface/SiStripApvGainRcd.h" #include "CondFormats/DataRecord/interface/SiStripNoisesRcd.h" #include "CondFormats/SiStripObjects/interface/SiStripApvGain.h" #include "CondFormats/SiStripObjects/interface/SiStripNoises.h" -class SiStripNoisesDQM : public SiStripBaseCondObjDQM { +class SiStripNoisesDQM : public SiStripBaseCondObjDQMGet { public: - SiStripNoisesDQM(const edm::EventSetup &eSetup, + SiStripNoisesDQM(edm::ESGetToken noiseToken, edm::RunNumber_t iRun, - edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet); + edm::ParameterSet const& hPSet, + edm::ParameterSet const& fPSet, + const TrackerTopology* tTopo, + const TkDetMap* tkDetMap, + const SiStripApvGain* gainHandle); ~SiStripNoisesDQM() override; - void getActiveDetIds(const edm::EventSetup &eSetup) override; + void getActiveDetIds(const edm::EventSetup& eSetup) override; - void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_, const TrackerTopology *tTopo) override; + void fillMEsForDet(const ModMEs& selModME_, uint32_t selDetId_) override; void fillMEsForLayer( - /*std::map selModMEsMap_, */ uint32_t selDetId_, const TrackerTopology *tTopo) override; - - unsigned long long getCache(const edm::EventSetup &eSetup) override { - return eSetup.get().cacheIdentifier(); - } - - void getConditionObject(const edm::EventSetup &eSetup) override { - eSetup.get().get(noiseHandle_); - cacheID_memory = cacheID_current; - } + /*std::map selModMEsMap_, */ uint32_t selDetId_) override; private: - bool gainRenormalisation_; - bool simGainRenormalisation_; - edm::ESHandle noiseHandle_; - edm::ESHandle gainHandle_; + const SiStripApvGain* gainHandle_ = nullptr; }; #endif diff --git a/DQM/SiStripMonitorSummary/interface/SiStripPedestalsDQM.h b/DQM/SiStripMonitorSummary/interface/SiStripPedestalsDQM.h index 23083e655be36..f5c05378fe41c 100644 --- a/DQM/SiStripMonitorSummary/interface/SiStripPedestalsDQM.h +++ b/DQM/SiStripMonitorSummary/interface/SiStripPedestalsDQM.h @@ -6,35 +6,25 @@ #include "CondFormats/DataRecord/interface/SiStripPedestalsRcd.h" #include "CondFormats/SiStripObjects/interface/SiStripPedestals.h" -class SiStripPedestalsDQM : public SiStripBaseCondObjDQM { +class SiStripPedestalsDQM : public SiStripBaseCondObjDQMGet { public: - SiStripPedestalsDQM(const edm::EventSetup &eSetup, + SiStripPedestalsDQM(edm::ESGetToken token, edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet); + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo, + const TkDetMap *tkDetMap); ~SiStripPedestalsDQM() override; void getActiveDetIds(const edm::EventSetup &eSetup) override; - void fillModMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) override; - void fillSummaryMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) override; + void fillModMEs(const std::vector &selectedDetIds) override; + void fillSummaryMEs(const std::vector &selectedDetIds) override; - void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_, const TrackerTopology *tTopo) override; + void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_) override; void fillMEsForLayer( - /*std::map selModMEsMap_, */ uint32_t selDetId_, const TrackerTopology *tTopo) override; - - unsigned long long getCache(const edm::EventSetup &eSetup) override { - return eSetup.get().cacheIdentifier(); - } - - void getConditionObject(const edm::EventSetup &eSetup) override { - eSetup.get().get(pedestalHandle_); - cacheID_memory = cacheID_current; - } - -private: - edm::ESHandle pedestalHandle_; + /*std::map selModMEsMap_, */ uint32_t selDetId_) override; }; #endif diff --git a/DQM/SiStripMonitorSummary/interface/SiStripQualityDQM.h b/DQM/SiStripMonitorSummary/interface/SiStripQualityDQM.h index 173618bbd618b..d257f5edf6fd4 100644 --- a/DQM/SiStripMonitorSummary/interface/SiStripQualityDQM.h +++ b/DQM/SiStripMonitorSummary/interface/SiStripQualityDQM.h @@ -3,55 +3,31 @@ #include "DQM/SiStripMonitorSummary/interface/SiStripBaseCondObjDQM.h" -/* #include "CalibTracker/SiStripCommon/interface/SiStripDetInfoFileReader.h" */ - -/* #include "CondFormats/SiStripObjects/interface/SiStripNoises.h" */ -/* #include "CondFormats/DataRecord/interface/SiStripNoisesRcd.h" */ -/* #include "CondFormats/SiStripObjects/interface/SiStripPedestals.h" */ -/* #include "CondFormats/DataRecord/interface/SiStripPedestalsRcd.h" */ - -/* #include "CondFormats/DataRecord/interface/SiStripBadStripRcd.h" */ -/* #include "CondFormats/SiStripObjects/interface/SiStripBadStrip.h" */ - -/* #include "CondFormats/SiStripObjects/interface/SiStripDetVOff.h" */ - -/* #include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" */ -/* #include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" */ - #include "CalibFormats/SiStripObjects/interface/SiStripQuality.h" #include "CalibTracker/Records/interface/SiStripQualityRcd.h" -class SiStripQualityDQM : public SiStripBaseCondObjDQM { +class SiStripQualityDQM : public SiStripBaseCondObjDQMGet { public: - SiStripQualityDQM(const edm::EventSetup &eSetup, + SiStripQualityDQM(edm::ESGetToken token, edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet); + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo, + const TkDetMap *tkDetMap); ~SiStripQualityDQM() override; void getActiveDetIds(const edm::EventSetup &eSetup) override; - void fillModMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) override; - void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_, const TrackerTopology *tTopo) override; + void fillModMEs(const std::vector &selectedDetIds) override; + void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_) override; - void fillSummaryMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) override; + void fillSummaryMEs(const std::vector &selectedDetIds) override; void fillMEsForLayer( - /*std::map selModMEsMap_, */ uint32_t selDetId_, const TrackerTopology *tTopo) override; - void fillGrandSummaryMEs(const edm::EventSetup &eSetup); - - unsigned long long getCache(const edm::EventSetup &eSetup) override { - return eSetup.get().cacheIdentifier(); - } - - void getConditionObject(const edm::EventSetup &eSetup) override { - eSetup.get().get(qualityLabel_, qualityHandle_); - cacheID_memory = cacheID_current; - } + /*std::map selModMEsMap_, */ uint32_t selDetId_) override; + void fillGrandSummaryMEs(); private: - std::string qualityLabel_; - edm::ESHandle qualityHandle_; int NTkBadComponent[4]; // k: 0=BadModule, 1=BadFiber, 2=BadApv, 3=BadStrips int NBadComponent[4][19][4]; std::stringstream ssV[4][19]; diff --git a/DQM/SiStripMonitorSummary/interface/SiStripThresholdDQM.h b/DQM/SiStripMonitorSummary/interface/SiStripThresholdDQM.h index 5c4273d669f9b..93de5a099a220 100644 --- a/DQM/SiStripMonitorSummary/interface/SiStripThresholdDQM.h +++ b/DQM/SiStripMonitorSummary/interface/SiStripThresholdDQM.h @@ -6,35 +6,27 @@ #include "CondFormats/DataRecord/interface/SiStripThresholdRcd.h" #include "CondFormats/SiStripObjects/interface/SiStripThreshold.h" -class SiStripThresholdDQM : public SiStripBaseCondObjDQM { +class SiStripThresholdDQM : public SiStripBaseCondObjDQMGet { public: - SiStripThresholdDQM(const edm::EventSetup &eSetup, + SiStripThresholdDQM(edm::ESGetToken token, edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet); + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo, + const TkDetMap *tkDetMap); ~SiStripThresholdDQM() override; void getActiveDetIds(const edm::EventSetup &eSetup) override; - void fillModMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) override; - void fillSummaryMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) override; + void fillModMEs(const std::vector &selectedDetIds) override; + void fillSummaryMEs(const std::vector &selectedDetIds) override; - void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_, const TrackerTopology *tTopo) override; + void fillMEsForDet(const ModMEs &selModME_, uint32_t selDetId_) override; void fillMEsForLayer( - /*std::map selModMEsMap_, */ uint32_t selDetId_, const TrackerTopology *tTopo) override; - - unsigned long long getCache(const edm::EventSetup &eSetup) override { - return eSetup.get().cacheIdentifier(); - } - - void getConditionObject(const edm::EventSetup &eSetup) override { - eSetup.get().get(thresholdHandle_); - cacheID_memory = cacheID_current; - } + /*std::map selModMEsMap_, */ uint32_t selDetId_) override; private: - edm::ESHandle thresholdHandle_; std::string WhichThreshold; }; diff --git a/DQM/SiStripMonitorSummary/plugins/BuildFile.xml b/DQM/SiStripMonitorSummary/plugins/BuildFile.xml index d1f817031dfe3..cd39b6c292b72 100644 --- a/DQM/SiStripMonitorSummary/plugins/BuildFile.xml +++ b/DQM/SiStripMonitorSummary/plugins/BuildFile.xml @@ -8,9 +8,7 @@ - - diff --git a/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateBadStripAndNoise.cc b/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateBadStripAndNoise.cc index a0e6cf7215616..d28cb19644378 100644 --- a/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateBadStripAndNoise.cc +++ b/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateBadStripAndNoise.cc @@ -7,7 +7,10 @@ #include "DataFormats/SiStripDetId/interface/SiStripDetId.h" SiStripCorrelateBadStripAndNoise::SiStripCorrelateBadStripAndNoise(const edm::ParameterSet &iConfig) - : cacheID_quality(0xFFFFFFFF), cacheID_noise(0xFFFFFFFF) { + : qualityToken_{esConsumes()}, + noiseToken_{esConsumes()}, + tTopoToken_{esConsumes()}, + tkGeomToken_{esConsumes()} { // now do what ever initialization is needed file = new TFile("correlTest.root", "RECREATE"); tkmap = new TrackerMap(); @@ -18,27 +21,17 @@ SiStripCorrelateBadStripAndNoise::~SiStripCorrelateBadStripAndNoise() {} // void SiStripCorrelateBadStripAndNoise::beginRun(const edm::Run &run, const edm::EventSetup &es) { - if (getNoiseCache(es) == cacheID_noise && getQualityCache(es) == cacheID_quality) - return; - cacheID_noise = getNoiseCache(es); - cacheID_quality = getQualityCache(es); + if (noiseWatcher_.check(es) || qualityWatcher_.check(es)) { + edm::LogInfo("") << "[SiStripCorrelateBadStripAndNoise::beginRun]" << std::endl; - edm::LogInfo("") << "[SiStripCorrelateBadStripAndNoise::beginRun] cacheID_quality " << cacheID_quality - << " cacheID_noise " << cacheID_noise << std::endl; + quality_ = &es.getData(qualityToken_); + noises_ = &es.getData(noiseToken_); - es.get().get(qualityHandle_); - es.get().get(noiseHandle_); - - DoAnalysis(es); + DoAnalysis(es); + } } void SiStripCorrelateBadStripAndNoise::DoAnalysis(const edm::EventSetup &es) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - edm::ESHandle tGeomHandle; - es.get().get(tGeomHandle); - // Loop on quality bad stirps // for each strip, look at the noise // evalaute the mean apv noise and the ratio among strip noise and @@ -47,30 +40,29 @@ void SiStripCorrelateBadStripAndNoise::DoAnalysis(const edm::EventSetup &es) { // Fill an histo per subdet and layer (and plus && minus for TEC/TID) edm::LogInfo("") << "[Doanalysis]"; - iterateOnDets(tTopoHandle.product(), tGeomHandle.product()); + iterateOnDets(es.getData(tTopoToken_), es.getData(tkGeomToken_)); } -void SiStripCorrelateBadStripAndNoise::iterateOnDets(const TrackerTopology *tTopo, const TrackerGeometry *tGeom) { - SiStripQuality::RegistryIterator rbegin = qualityHandle_->getRegistryVectorBegin(); - SiStripQuality::RegistryIterator rend = qualityHandle_->getRegistryVectorEnd(); - - for (SiStripBadStrip::RegistryIterator rp = rbegin; rp != rend; ++rp) { +void SiStripCorrelateBadStripAndNoise::iterateOnDets(const TrackerTopology &tTopo, const TrackerGeometry &tGeom) { + const auto rbegin = quality_->getRegistryVectorBegin(); + const auto rend = quality_->getRegistryVectorEnd(); + for (auto rp = rbegin; rp != rend; ++rp) { const uint32_t detid = rp->detid; - SiStripQuality::Range sqrange = SiStripQuality::Range(qualityHandle_->getDataVectorBegin() + rp->ibegin, - qualityHandle_->getDataVectorBegin() + rp->iend); + auto sqrange = + SiStripQuality::Range(quality_->getDataVectorBegin() + rp->ibegin, quality_->getDataVectorBegin() + rp->iend); iterateOnBadStrips(detid, tTopo, tGeom, sqrange); } } void SiStripCorrelateBadStripAndNoise::iterateOnBadStrips(const uint32_t &detid, - const TrackerTopology *tTopo, - const TrackerGeometry *tGeom, + const TrackerTopology &tTopo, + const TrackerGeometry &tGeom, SiStripQuality::Range &sqrange) { float percentage = 0; for (int it = 0; it < sqrange.second - sqrange.first; it++) { - unsigned int firstStrip = qualityHandle_->decode(*(sqrange.first + it)).firstStrip; - unsigned int range = qualityHandle_->decode(*(sqrange.first + it)).range; + unsigned int firstStrip = quality_->decode(*(sqrange.first + it)).firstStrip; + unsigned int range = quality_->decode(*(sqrange.first + it)).range; correlateWithNoise(detid, tTopo, firstStrip, range); @@ -78,7 +70,7 @@ void SiStripCorrelateBadStripAndNoise::iterateOnBadStrips(const uint32_t &detid, percentage += range; } if (percentage != 0) - percentage /= dynamic_cast(tGeom->idToDet(detid))->specificTopology().nstrips(); + percentage /= dynamic_cast(tGeom.idToDet(detid))->specificTopology().nstrips(); if (percentage > 1) edm::LogError("SiStripQualityStatistics") << "PROBLEM detid " << detid << " value " << percentage << std::endl; @@ -89,12 +81,12 @@ void SiStripCorrelateBadStripAndNoise::iterateOnBadStrips(const uint32_t &detid, } void SiStripCorrelateBadStripAndNoise::correlateWithNoise(const uint32_t &detid, - const TrackerTopology *tTopo, + const TrackerTopology &tTopo, const uint32_t &firstStrip, const uint32_t &range) { std::vector histos; - SiStripNoises::Range noiseRange = noiseHandle_->getRange(detid); + SiStripNoises::Range noiseRange = noises_->getRange(detid); edm::LogInfo("Domenico") << "detid " << detid << " first " << firstStrip << " range " << range; float meanAPVNoise = getMeanNoise(noiseRange, firstStrip / 128, 128); @@ -121,13 +113,13 @@ float SiStripCorrelateBadStripAndNoise::getMeanNoise(const SiStripNoises::Range const uint32_t &range) { float mean = 0; for (size_t istrip = firstStrip; istrip < firstStrip + range; istrip++) { - mean += noiseHandle_->getNoise(istrip, noiseRange); + mean += noises_->getNoise(istrip, noiseRange); } return mean / (1. * range); } void SiStripCorrelateBadStripAndNoise::getHistos(const uint32_t &detid, - const TrackerTopology *tTopo, + const TrackerTopology &tTopo, std::vector &histos) { histos.clear(); @@ -136,16 +128,16 @@ void SiStripCorrelateBadStripAndNoise::getHistos(const uint32_t &detid, SiStripDetId a(detid); if (a.subdetId() == 3) { subdet = 0; - component = tTopo->tibLayer(detid); + component = tTopo.tibLayer(detid); } else if (a.subdetId() == 4) { subdet = 1; - component = tTopo->tidSide(detid) == 2 ? tTopo->tidWheel(detid) : tTopo->tidWheel(detid) + 3; + component = tTopo.tidSide(detid) == 2 ? tTopo.tidWheel(detid) : tTopo.tidWheel(detid) + 3; } else if (a.subdetId() == 5) { subdet = 2; - component = tTopo->tobLayer(detid); + component = tTopo.tobLayer(detid); } else if (a.subdetId() == 6) { subdet = 3; - component = tTopo->tecSide(detid) == 2 ? tTopo->tecWheel(detid) : tTopo->tecWheel(detid) + 9; + component = tTopo.tecSide(detid) == 2 ? tTopo.tecWheel(detid) : tTopo.tecWheel(detid) + 9; } int index = 100 + subdet * 100 + component; diff --git a/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateBadStripAndNoise.h b/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateBadStripAndNoise.h index e6327c1ce053a..6fc5b41045035 100644 --- a/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateBadStripAndNoise.h +++ b/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateBadStripAndNoise.h @@ -24,7 +24,7 @@ #include "CalibFormats/SiStripObjects/interface/SiStripQuality.h" #include "CondFormats/SiStripObjects/interface/SiStripNoises.h" #include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -56,23 +56,16 @@ class SiStripCorrelateBadStripAndNoise : public edm::EDAnalyzer { void endJob() override; void DoAnalysis(const edm::EventSetup &); - void getHistos(const uint32_t &detid, const TrackerTopology *tTopo, std::vector &histos); + void getHistos(const uint32_t &detid, const TrackerTopology &tTopo, std::vector &histos); TH2F *getHisto(const long unsigned int &index); - unsigned long long getNoiseCache(const edm::EventSetup &eSetup) { - return eSetup.get().cacheIdentifier(); - } - unsigned long long getQualityCache(const edm::EventSetup &eSetup) { - return eSetup.get().cacheIdentifier(); - } - - void iterateOnDets(const TrackerTopology *tTopo, const TrackerGeometry *tGeom); + void iterateOnDets(const TrackerTopology &tTopo, const TrackerGeometry &tGeom); void iterateOnBadStrips(const uint32_t &detid, - const TrackerTopology *tTopo, - const TrackerGeometry *tGeom, + const TrackerTopology &tTopo, + const TrackerGeometry &tGeom, SiStripQuality::Range &sqrange); void correlateWithNoise(const uint32_t &detid, - const TrackerTopology *tTopo, + const TrackerTopology &tTopo, const uint32_t &firstStrip, const uint32_t &range); float getMeanNoise(const SiStripNoises::Range &noiseRange, const uint32_t &first, const uint32_t &range); @@ -80,14 +73,17 @@ class SiStripCorrelateBadStripAndNoise : public edm::EDAnalyzer { // ----------member data --------------------------- SiStripDetInfoFileReader *fr; - edm::ESHandle qualityHandle_; - edm::ESHandle noiseHandle_; + edm::ESWatcher qualityWatcher_; + edm::ESWatcher noiseWatcher_; + edm::ESGetToken qualityToken_; + edm::ESGetToken noiseToken_; + edm::ESGetToken tTopoToken_; + edm::ESGetToken tkGeomToken_; + const SiStripQuality *quality_; + const SiStripNoises *noises_; TFile *file; std::vector vTH2; TrackerMap *tkmap; - - unsigned long long cacheID_quality; - unsigned long long cacheID_noise; }; diff --git a/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateNoise.cc b/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateNoise.cc index 9344bc9330571..72b60feac3740 100644 --- a/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateNoise.cc +++ b/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateNoise.cc @@ -7,7 +7,12 @@ #include "TCanvas.h" SiStripCorrelateNoise::SiStripCorrelateNoise(const edm::ParameterSet &iConfig) - : refNoise(nullptr), oldGain(nullptr), newGain(nullptr), cacheID_noise(0xFFFFFFFF), cacheID_gain(0xFFFFFFFF) { + : noiseToken_{esConsumes()}, + gainToken_{esConsumes()}, + tTopoToken_{esConsumes()}, + refNoise(nullptr), + oldGain(nullptr), + newGain(nullptr) { // now do what ever initialization is needed file = new TFile("correlTest.root", "RECREATE"); @@ -20,50 +25,33 @@ SiStripCorrelateNoise::~SiStripCorrelateNoise() {} // void SiStripCorrelateNoise::beginRun(const edm::Run &run, const edm::EventSetup &es) { - if (getNoiseCache(es) == cacheID_noise) - return; - - edm::LogInfo("") << "[SiStripCorrelateNoise::beginRun] cacheID_noise " << cacheID_noise << std::endl; - - es.get().get(noiseHandle_); - SiStripNoises *aNoise = new SiStripNoises(*noiseHandle_.product()); - - // Check if gain is the same from one noise iov to the other, otherwise cache - // the new gain (and the old one) to rescale - - checkGainCache(es); - - if (cacheID_noise != 0xFFFFFFFF) { - char dir[128]; - theRun = run.run(); - sprintf(dir, "Run_%d", theRun); - file->cd(""); - file->mkdir(dir); - file->cd(dir); - DoAnalysis(es, *noiseHandle_.product(), *refNoise); - DoPlots(); + if (noiseWatcher_.check(es)) { + auto aNoise = std::make_unique(es.getData(noiseToken_)); + // Check if gain is the same from one noise iov to the other, otherwise cache + // the new gain (and the old one) to rescale + checkGainCache(es); + if (refNoise) { + char dir[128]; + theRun = run.run(); + sprintf(dir, "Run_%d", theRun); + file->cd(""); + file->mkdir(dir); + file->cd(dir); + DoAnalysis(es, *aNoise, *refNoise); + DoPlots(); + } + refNoise = std::move(aNoise); } - - cacheID_noise = getNoiseCache(es); - if (refNoise != nullptr) - delete refNoise; - refNoise = aNoise; } void SiStripCorrelateNoise::checkGainCache(const edm::EventSetup &es) { equalGain = true; - if (getGainCache(es) != cacheID_gain) { - es.get().get(gainHandle_); - if (oldGain != nullptr) - delete oldGain; - - oldGain = newGain; - newGain = new SiStripApvGain(*gainHandle_.product()); - - if (cacheID_gain != 0xFFFFFFFF) + if (gainWatcher_.check(es)) { + if (oldGain) { equalGain = false; - cacheID_gain = getGainCache(es); - edm::LogInfo("") << "[SiStripCorrelateNoise::checkGainCache] cacheID_gain " << cacheID_gain << std::endl; + } + oldGain = std::move(newGain); + newGain = std::make_unique(es.getData(gainToken_)); } } @@ -106,10 +94,7 @@ void SiStripCorrelateNoise::DoAnalysis(const edm::EventSetup &es, edm::LogInfo("") << "[Doanalysis]"; - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); + const auto tTopo = &es.getData(tTopoToken_); std::vector histos; @@ -153,16 +138,6 @@ float SiStripCorrelateNoise::getGainRatio(const uint32_t &detid, const uint16_t return oldGain->getApvGain(apv, oldRange) / newGain->getApvGain(apv, newRange); } -float SiStripCorrelateNoise::getMeanNoise(const SiStripNoises::Range &noiseRange, - const uint32_t &firstStrip, - const uint32_t &range) { - float mean = 0; - for (size_t istrip = firstStrip; istrip < firstStrip + range; istrip++) { - mean += noiseHandle_->getNoise(istrip, noiseRange); - } - return mean / (1. * range); -} - void SiStripCorrelateNoise::getHistos(const uint32_t &detid, const TrackerTopology *tTopo, std::vector &histos) { diff --git a/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateNoise.h b/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateNoise.h index 4dab5eab044aa..8105df4505451 100644 --- a/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateNoise.h +++ b/DQM/SiStripMonitorSummary/plugins/SiStripCorrelateNoise.h @@ -24,7 +24,7 @@ #include "CondFormats/SiStripObjects/interface/SiStripApvGain.h" #include "CondFormats/SiStripObjects/interface/SiStripNoises.h" #include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -61,14 +61,7 @@ class SiStripCorrelateNoise : public edm::EDAnalyzer { void getHistos(const uint32_t &detid, const TrackerTopology *tTopo, std::vector &histos); TH1F *getHisto(const long unsigned int &index); - unsigned long long getNoiseCache(const edm::EventSetup &eSetup) { - return eSetup.get().cacheIdentifier(); - } - unsigned long long getGainCache(const edm::EventSetup &eSetup) { - return eSetup.get().cacheIdentifier(); - } void checkGainCache(const edm::EventSetup &es); - float getMeanNoise(const SiStripNoises::Range &noiseRange, const uint32_t &first, const uint32_t &range); float getGainRatio(const uint32_t &detid, const uint16_t &apv); @@ -80,20 +73,19 @@ class SiStripCorrelateNoise : public edm::EDAnalyzer { }; SiStripDetInfoFileReader *fr; - edm::ESHandle gainHandle_; - edm::ESHandle noiseHandle_; + edm::ESWatcher noiseWatcher_; + edm::ESWatcher gainWatcher_; + edm::ESGetToken noiseToken_; + edm::ESGetToken gainToken_; + edm::ESGetToken tTopoToken_; uint32_t theRun; - SiStripNoises *refNoise; - - SiStripApvGain *oldGain, *newGain; + std::unique_ptr refNoise; + std::unique_ptr oldGain, newGain; bool equalGain; TFile *file; std::vector vTH1; TrackerMap *tkmap; - - unsigned long long cacheID_noise; - unsigned long long cacheID_gain; }; diff --git a/DQM/SiStripMonitorSummary/plugins/SiStripMonitorCondData.cc b/DQM/SiStripMonitorSummary/plugins/SiStripMonitorCondData.cc index 4723937fd5b14..8ed481072bf18 100644 --- a/DQM/SiStripMonitorSummary/plugins/SiStripMonitorCondData.cc +++ b/DQM/SiStripMonitorSummary/plugins/SiStripMonitorCondData.cc @@ -6,230 +6,45 @@ // Original Author: Evelyne Delmeire // +#include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/Run.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "DataFormats/Common/interface/Handle.h" +#include "DQM/SiStripMonitorSummary/interface/SiStripClassToMonitorCondData.h" -#include "DQM/SiStripCommon/interface/ExtractTObject.h" -#include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h" -#include "DQM/SiStripCommon/interface/SiStripHistoId.h" -#include "DQMServices/Core/interface/DQMStore.h" +class SiStripMonitorCondData : public edm::EDAnalyzer { +public: + explicit SiStripMonitorCondData(const edm::ParameterSet &); -#include "SiStripMonitorCondData.h" + ~SiStripMonitorCondData() override; -#include "DQM/SiStripMonitorSummary/interface/SiStripApvGainsDQM.h" -#include "DQM/SiStripMonitorSummary/interface/SiStripBackPlaneCorrectionDQM.h" -#include "DQM/SiStripMonitorSummary/interface/SiStripCablingDQM.h" -#include "DQM/SiStripMonitorSummary/interface/SiStripLorentzAngleDQM.h" -#include "DQM/SiStripMonitorSummary/interface/SiStripNoisesDQM.h" -#include "DQM/SiStripMonitorSummary/interface/SiStripPedestalsDQM.h" -#include "DQM/SiStripMonitorSummary/interface/SiStripQualityDQM.h" -#include "DQM/SiStripMonitorSummary/interface/SiStripThresholdDQM.h" + void beginRun(edm::Run const &run, edm::EventSetup const &eSetup) override; + void analyze(const edm::Event &, const edm::EventSetup &) override; + void endRun(edm::Run const &run, edm::EventSetup const &eSetup) override; -#include "TH1F.h" -#include "TH2F.h" -#include "TProfile.h" +private: + SiStripClassToMonitorCondData moni_; +}; -// std -#include -#include -#include -#include -#include +SiStripMonitorCondData::SiStripMonitorCondData(edm::ParameterSet const &iConfig) + : moni_(iConfig, consumesCollector()) {} -// -// ----- Constructor -// -SiStripMonitorCondData::SiStripMonitorCondData(edm::ParameterSet const &iConfig) : conf_(iConfig) { - monitorPedestals_ = iConfig.getParameter("MonitorSiStripPedestal"); - monitorNoises_ = iConfig.getParameter("MonitorSiStripNoise"); - monitorLowThreshold_ = iConfig.getParameter("MonitorSiStripLowThreshold"); - monitorHighThreshold_ = iConfig.getParameter("MonitorSiStripHighThreshold"); - monitorQuality_ = iConfig.getParameter("MonitorSiStripQuality"); - monitorApvGains_ = iConfig.getParameter("MonitorSiStripApvGain"); - monitorLorentzAngle_ = iConfig.getParameter("MonitorSiStripLorentzAngle"); - monitorBackPlaneCorrection_ = iConfig.getParameter("MonitorSiStripBackPlaneCorrection"); - monitorCabling_ = iConfig.getParameter("MonitorSiStripCabling"); -} -// ----- - -// -// ----- Destructor -// SiStripMonitorCondData::~SiStripMonitorCondData() {} -// ----- -// -// ----- beginRun -// void SiStripMonitorCondData::beginRun(edm::Run const &run, edm::EventSetup const &eSetup) { - if (monitorPedestals_) { - pedestalsDQM_ = - std::make_unique(eSetup, - run.run(), - conf_.getParameter("SiStripPedestalsDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); - } - - if (monitorNoises_) { - noisesDQM_ = std::make_unique(eSetup, - run.run(), - conf_.getParameter("SiStripNoisesDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); - } - - if (monitorLowThreshold_) { - lowthresholdDQM_ = - std::make_unique(eSetup, - run.run(), - conf_.getParameter("SiStripLowThresholdDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); - } - - if (monitorHighThreshold_) { - highthresholdDQM_ = - std::make_unique(eSetup, - run.run(), - conf_.getParameter("SiStripHighThresholdDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); - } - - if (monitorQuality_) { - qualityDQM_ = std::make_unique(eSetup, - run.run(), - conf_.getParameter("SiStripQualityDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); - } - - if (monitorApvGains_) { - apvgainsDQM_ = - std::make_unique(eSetup, - run.run(), - conf_.getParameter("SiStripApvGainsDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); - } - - if (monitorLorentzAngle_) { - lorentzangleDQM_ = - std::make_unique(eSetup, - run.run(), - conf_.getParameter("SiStripLorentzAngleDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); - } - - if (monitorBackPlaneCorrection_) { - bpcorrectionDQM_ = std::make_unique( - eSetup, - run.run(), - conf_.getParameter("SiStripBackPlaneCorrectionDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); - } - if (monitorCabling_) { - cablingDQM_ = std::make_unique(eSetup, - run.run(), - conf_.getParameter("SiStripCablingDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); - } -} // beginRun -// ----- - -// -// ----- beginJob -// -void SiStripMonitorCondData::beginJob(void) {} // beginJob -// ----- + moni_.beginRun(run.run(), eSetup); +} -// -// ----- Analyze -// void SiStripMonitorCondData::analyze(edm::Event const &iEvent, edm::EventSetup const &eSetup) { - if (monitorPedestals_) { - pedestalsDQM_->analysis(eSetup); - } - if (monitorNoises_) { - noisesDQM_->analysis(eSetup); - } - if (monitorLowThreshold_) { - lowthresholdDQM_->analysis(eSetup); - } - if (monitorHighThreshold_) { - highthresholdDQM_->analysis(eSetup); - } - if (monitorApvGains_) { - apvgainsDQM_->analysis(eSetup); - } - if (monitorLorentzAngle_) { - lorentzangleDQM_->analysis(eSetup); - } - if (monitorBackPlaneCorrection_) { - bpcorrectionDQM_->analysis(eSetup); - } - if (monitorQuality_) { - qualityDQM_->analysis(eSetup); - qualityDQM_->fillGrandSummaryMEs(eSetup); - } // fillGrand. for SiStripquality - if (monitorCabling_) { - cablingDQM_->analysis(eSetup); - } -} // analyze -// ----- + moni_.analyseCondData(eSetup); +} -// -// ----- endRun -// void SiStripMonitorCondData::endRun(edm::Run const &run, edm::EventSetup const &eSetup) { - if (monitorPedestals_) { - pedestalsDQM_->end(); - } - if (monitorNoises_) { - noisesDQM_->end(); - } - if (monitorLowThreshold_) { - lowthresholdDQM_->end(); - } - if (monitorHighThreshold_) { - highthresholdDQM_->end(); - } - if (monitorApvGains_) { - apvgainsDQM_->end(); - } - if (monitorLorentzAngle_) { - lorentzangleDQM_->end(); - } - if (monitorBackPlaneCorrection_) { - bpcorrectionDQM_->end(); - } - if (monitorQuality_) { - qualityDQM_->end(); - } - if (monitorCabling_) { - cablingDQM_->end(); - } - - bool outputMEsInRootFile = conf_.getParameter("OutputMEsInRootFile"); - std::string outputFileName = conf_.getParameter("OutputFileName"); - - DQMStore *dqmStore_ = edm::Service().operator->(); - - if (outputMEsInRootFile) { - dqmStore_->save(outputFileName); - } - -} // endRun -// ----- - -// -// ----- endJob -// -void SiStripMonitorCondData::endJob(void) {} -// endJob -// ----- + moni_.end(); + moni_.save(); +} #include "FWCore/Framework/interface/MakerMacros.h" DEFINE_FWK_MODULE(SiStripMonitorCondData); diff --git a/DQM/SiStripMonitorSummary/plugins/SiStripMonitorCondData.h b/DQM/SiStripMonitorSummary/plugins/SiStripMonitorCondData.h deleted file mode 100644 index 4f88de09df9d0..0000000000000 --- a/DQM/SiStripMonitorSummary/plugins/SiStripMonitorCondData.h +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef SiStripMonitorSummary_SiStripMonitorSummary_h -#define SiStripMonitorSummary_SiStripMonitorSummary_h - -// -*- C++ -*- -// -// Package: SiStripMonitorSummary -// Class : SiStripMonitorCondData -// -// Original Author: Evelyne Delmeire -// - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DQMServices/Core/interface/DQMStore.h" -#include -#include -#include - -class SiStripPedestalsDQM; -class SiStripNoisesDQM; -class SiStripThresholdDQM; -class SiStripQualityDQM; -class SiStripApvGainsDQM; -class SiStripLorentzAngleDQM; -class SiStripBackPlaneCorrectionDQM; -class SiStripCablingDQM; - -class SiStripMonitorCondData : public edm::EDAnalyzer { -public: - typedef dqm::legacy::MonitorElement MonitorElement; - typedef dqm::legacy::DQMStore DQMStore; - - explicit SiStripMonitorCondData(const edm::ParameterSet &); - - ~SiStripMonitorCondData() override; - - void beginJob() override; - void beginRun(edm::Run const &run, edm::EventSetup const &eSetup) override; - void analyze(const edm::Event &, const edm::EventSetup &) override; - void endRun(edm::Run const &run, edm::EventSetup const &eSetup) override; - void endJob() override; - -private: - edm::ParameterSet conf_; - - bool monitorPedestals_; - bool monitorNoises_; - bool monitorLowThreshold_; - bool monitorHighThreshold_; - bool monitorQuality_; - bool monitorApvGains_; - bool monitorLorentzAngle_; - bool monitorBackPlaneCorrection_; - bool monitorCabling_; - - std::string outPutFileName; - - std::unique_ptr pedestalsDQM_; - std::unique_ptr noisesDQM_; - std::unique_ptr lowthresholdDQM_; - std::unique_ptr highthresholdDQM_; - std::unique_ptr qualityDQM_; - std::unique_ptr apvgainsDQM_; - std::unique_ptr lorentzangleDQM_; - std::unique_ptr bpcorrectionDQM_; - std::unique_ptr cablingDQM_; -}; - -#endif diff --git a/DQM/SiStripMonitorSummary/plugins/SiStripMonitorCondDataOnDemandExample.cc b/DQM/SiStripMonitorSummary/plugins/SiStripMonitorCondDataOnDemandExample.cc index fd5e083840068..19f1a38cd3ecd 100644 --- a/DQM/SiStripMonitorSummary/plugins/SiStripMonitorCondDataOnDemandExample.cc +++ b/DQM/SiStripMonitorSummary/plugins/SiStripMonitorCondDataOnDemandExample.cc @@ -31,8 +31,9 @@ // // ----- Constructor // -SiStripMonitorCondDataOnDemandExample::SiStripMonitorCondDataOnDemandExample(edm::ParameterSet const &iConfig) - : conf_(iConfig) {} +SiStripMonitorCondDataOnDemandExample::SiStripMonitorCondDataOnDemandExample(edm::ParameterSet const &iConfig) { + condDataMonitoring_ = std::make_unique(iConfig, consumesCollector()); +} // ----- // @@ -46,9 +47,7 @@ SiStripMonitorCondDataOnDemandExample::~SiStripMonitorCondDataOnDemandExample() // void SiStripMonitorCondDataOnDemandExample::beginRun(edm::Run const &run, edm::EventSetup const &eSetup) { eventCounter_ = 0; - condDataMonitoring_ = new SiStripClassToMonitorCondData(conf_); condDataMonitoring_->beginRun(run.run(), eSetup); - } // beginRun // ----- @@ -85,7 +84,7 @@ void SiStripMonitorCondDataOnDemandExample::analyze(edm::Event const &iEvent, ed // ----- endRun // void SiStripMonitorCondDataOnDemandExample::endRun(edm::Run const &run, edm::EventSetup const &eSetup) { - condDataMonitoring_->endRun(eSetup); + condDataMonitoring_->save(); } // endRun // ----- diff --git a/DQM/SiStripMonitorSummary/plugins/SiStripMonitorCondDataOnDemandExample.h b/DQM/SiStripMonitorSummary/plugins/SiStripMonitorCondDataOnDemandExample.h index 5efd1176d0d89..4ece18f90a71e 100644 --- a/DQM/SiStripMonitorSummary/plugins/SiStripMonitorCondDataOnDemandExample.h +++ b/DQM/SiStripMonitorSummary/plugins/SiStripMonitorCondDataOnDemandExample.h @@ -41,8 +41,7 @@ class SiStripMonitorCondDataOnDemandExample : public edm::EDAnalyzer { private: int eventCounter_; - edm::ParameterSet conf_; - SiStripClassToMonitorCondData *condDataMonitoring_; + std::unique_ptr condDataMonitoring_; }; #endif diff --git a/DQM/SiStripMonitorSummary/plugins/SiStripPlotGain.cc b/DQM/SiStripMonitorSummary/plugins/SiStripPlotGain.cc index 6c6f6dd1ba661..d777cbe9becbb 100644 --- a/DQM/SiStripMonitorSummary/plugins/SiStripPlotGain.cc +++ b/DQM/SiStripMonitorSummary/plugins/SiStripPlotGain.cc @@ -1,10 +1,7 @@ #include "DQM/SiStripMonitorSummary/plugins/SiStripPlotGain.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" -#include "DataFormats/SiStripDetId/interface/SiStripDetId.h" - -SiStripPlotGain::SiStripPlotGain(const edm::ParameterSet &iConfig) : cacheID(0xFFFFFFFF) { +SiStripPlotGain::SiStripPlotGain(const edm::ParameterSet &iConfig) + : gainToken_{esConsumes()}, tTopoToken_{esConsumes()} { // now do what ever initialization is needed file = new TFile("correlTest.root", "RECREATE"); tkmap = new TrackerMap(); @@ -15,24 +12,16 @@ SiStripPlotGain::~SiStripPlotGain() {} // void SiStripPlotGain::beginRun(const edm::Run &run, const edm::EventSetup &es) { - if (getCache(es) == cacheID) - return; - cacheID = getCache(es); - - edm::LogInfo("") << "[SiStripPlotGain::beginRun] cacheID " << cacheID << std::endl; - - es.get().get(Handle_); - DoAnalysis(es, *Handle_.product()); + if (gainWatcher_.check(es)) { + edm::LogInfo("") << "[SiStripPlotGain::beginRun] cacheID " << es.get().cacheIdentifier() + << std::endl; + DoAnalysis(es.getData(tTopoToken_), es.getData(gainToken_)); + } } -void SiStripPlotGain::DoAnalysis(const edm::EventSetup &es, const SiStripApvGain &gain) { +void SiStripPlotGain::DoAnalysis(const TrackerTopology &tTopo, const SiStripApvGain &gain) { edm::LogInfo("") << "[Doanalysis]"; - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); - std::vector histos; SiStripApvGain::RegistryPointers p = gain.getRegistryPointers(); @@ -58,24 +47,23 @@ void SiStripPlotGain::DoAnalysis(const edm::EventSetup &es, const SiStripApvGain } } -void SiStripPlotGain::getHistos(const uint32_t &detid, const TrackerTopology *tTopo, std::vector &histos) { +void SiStripPlotGain::getHistos(DetId detid, const TrackerTopology &tTopo, std::vector &histos) { histos.clear(); int subdet = -999; int component = -999; - SiStripDetId a(detid); - if (a.subdetId() == 3) { + if (detid.subdetId() == 3) { subdet = 0; - component = tTopo->tibLayer(detid); - } else if (a.subdetId() == 4) { + component = tTopo.tibLayer(detid); + } else if (detid.subdetId() == 4) { subdet = 1; - component = tTopo->tidSide(detid) == 2 ? tTopo->tidWheel(detid) : tTopo->tidWheel(detid) + 3; - } else if (a.subdetId() == 5) { + component = tTopo.tidSide(detid) == 2 ? tTopo.tidWheel(detid) : tTopo.tidWheel(detid) + 3; + } else if (detid.subdetId() == 5) { subdet = 2; - component = tTopo->tobLayer(detid); - } else if (a.subdetId() == 6) { + component = tTopo.tobLayer(detid); + } else if (detid.subdetId() == 6) { subdet = 3; - component = tTopo->tecSide(detid) == 2 ? tTopo->tecWheel(detid) : tTopo->tecWheel(detid) + 9; + component = tTopo.tecSide(detid) == 2 ? tTopo.tecWheel(detid) : tTopo.tecWheel(detid) + 9; } int index = 100 + subdet * 100 + component; diff --git a/DQM/SiStripMonitorSummary/plugins/SiStripPlotGain.h b/DQM/SiStripMonitorSummary/plugins/SiStripPlotGain.h index d5eeccd376c8a..778d60c7fcd14 100644 --- a/DQM/SiStripMonitorSummary/plugins/SiStripPlotGain.h +++ b/DQM/SiStripMonitorSummary/plugins/SiStripPlotGain.h @@ -23,7 +23,7 @@ // user include files #include "CondFormats/SiStripObjects/interface/SiStripApvGain.h" #include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -35,6 +35,8 @@ #include "CalibTracker/Records/interface/SiStripDependentRecords.h" #include "CalibTracker/SiStripCommon/interface/SiStripDetInfoFileReader.h" #include "CommonTools/TrackerMap/interface/TrackerMap.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "TFile.h" #include "TH1F.h" @@ -55,24 +57,20 @@ class SiStripPlotGain : public edm::EDAnalyzer { void analyze(const edm::Event &, const edm::EventSetup &) override{}; void endJob() override; - void DoAnalysis(const edm::EventSetup &es, const SiStripApvGain &); - void getHistos(const uint32_t &detid, const TrackerTopology *tTopo, std::vector &histos); + void DoAnalysis(const TrackerTopology &tTopo, const SiStripApvGain &); + void getHistos(DetId detid, const TrackerTopology &tTopo, std::vector &histos); TH1F *getHisto(const long unsigned int &index); - unsigned long long getCache(const edm::EventSetup &eSetup) { - return eSetup.get().cacheIdentifier(); - } - // ----------member data --------------------------- SiStripDetInfoFileReader *fr; - edm::ESHandle Handle_; + edm::ESWatcher gainWatcher_; + edm::ESGetToken gainToken_; + edm::ESGetToken tTopoToken_; TFile *file; std::vector vTH1; TrackerMap *tkmap; - - unsigned long long cacheID; }; diff --git a/DQM/SiStripMonitorSummary/src/SiStripApvGainsDQM.cc b/DQM/SiStripMonitorSummary/src/SiStripApvGainsDQM.cc index e66e34ac7b4a1..43deec401dd72 100644 --- a/DQM/SiStripMonitorSummary/src/SiStripApvGainsDQM.cc +++ b/DQM/SiStripMonitorSummary/src/SiStripApvGainsDQM.cc @@ -1,93 +1,66 @@ #include "DQM/SiStripMonitorSummary/interface/SiStripApvGainsDQM.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" -#include "DQMServices/Core/interface/DQMStore.h" #include "TCanvas.h" -// ----- -SiStripApvGainsDQM::SiStripApvGainsDQM(const edm::EventSetup &eSetup, +SiStripApvGainsDQM::SiStripApvGainsDQM(edm::ESGetToken token, edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet) - : SiStripBaseCondObjDQM(eSetup, iRun, hPSet, fPSet) { - // Build the Histo_TkMap: + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo, + const TkDetMap *tkDetMap) + : SiStripBaseCondObjDQMGet{token, iRun, hPSet, fPSet, tTopo} { if (HistoMaps_On_) { - edm::ESHandle tkDetMapHandle; - eSetup.get().get(tkDetMapHandle); - Tk_HM_ = std::make_unique(tkDetMapHandle.product(), "SiStrip/Histo_Map", "MeanApvGain_TkMap", 0.); + Tk_HM_ = std::make_unique(tkDetMap, "SiStrip/Histo_Map", "MeanApvGain_TkMap", 0.); } } -// ----- -// ----- SiStripApvGainsDQM::~SiStripApvGainsDQM() {} -// ----- -// ----- void SiStripApvGainsDQM::getActiveDetIds(const edm::EventSetup &eSetup) { getConditionObject(eSetup); - gainHandle_->getDetIds(activeDetIds); + condObj_->getDetIds(activeDetIds); } -// ----- - -// ----- -void SiStripApvGainsDQM::fillModMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); +void SiStripApvGainsDQM::fillModMEs(const std::vector &selectedDetIds) { ModMEs CondObj_ME; - - for (std::vector::const_iterator detIter_ = selectedDetIds.begin(); detIter_ != selectedDetIds.end(); - ++detIter_) { - fillMEsForDet(CondObj_ME, *detIter_, tTopo); + for (const auto detIter : selectedDetIds) { + fillMEsForDet(CondObj_ME, detIter); } } -// ----- -void SiStripApvGainsDQM::fillMEsForDet(const ModMEs &_selModME_, uint32_t selDetId_, const TrackerTopology *tTopo) { +void SiStripApvGainsDQM::fillMEsForDet(const ModMEs &_selModME_, uint32_t selDetId_) { ModMEs selModME_ = _selModME_; std::vector DetIds; - gainHandle_->getDetIds(DetIds); + condObj_->getDetIds(DetIds); - SiStripApvGain::Range gainRange = gainHandle_->getRange(selDetId_); + const auto gainRange = condObj_->getRange(selDetId_); int nApv = reader->getNumberOfApvsAndStripLength(selDetId_).first; - getModMEs(selModME_, selDetId_, tTopo); + getModMEs(selModME_, selDetId_); for (int iapv = 0; iapv < nApv; ++iapv) { if (CondObj_fillId_ == "onlyProfile" || CondObj_fillId_ == "ProfileAndCumul") { - selModME_.ProfileDistr->Fill(iapv + 1, gainHandle_->getApvGain(iapv, gainRange)); + selModME_.ProfileDistr->Fill(iapv + 1, condObj_->getApvGain(iapv, gainRange)); } if (CondObj_fillId_ == "onlyCumul" || CondObj_fillId_ == "ProfileAndCumul") { - selModME_.CumulDistr->Fill(gainHandle_->getApvGain(iapv, gainRange)); + selModME_.CumulDistr->Fill(condObj_->getApvGain(iapv, gainRange)); } // Fill the TkMap if (fPSet_.getParameter("TkMap_On") || hPSet_.getParameter("TkMap_On")) { - fillTkMap(selDetId_, gainHandle_->getApvGain(iapv, gainRange)); + fillTkMap(selDetId_, condObj_->getApvGain(iapv, gainRange)); } } } -// ----- -void SiStripApvGainsDQM::fillSummaryMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); - - for (std::vector::const_iterator detIter_ = selectedDetIds.begin(); detIter_ != selectedDetIds.end(); - detIter_++) { - fillMEsForLayer(/*SummaryMEsMap_,*/ *detIter_, tTopo); +void SiStripApvGainsDQM::fillSummaryMEs(const std::vector &selectedDetIds) { + for (const auto det : selectedDetIds) { + fillMEsForLayer(/*SummaryMEsMap_,*/ det); } - for (std::map::iterator iter = SummaryMEsMap_.begin(); iter != SummaryMEsMap_.end(); iter++) { - ModMEs selME; - selME = iter->second; - + for (const auto &itm : SummaryMEsMap_) { + ModMEs selME = itm.second; if (hPSet_.getParameter("FillSummaryProfileAtLayerLevel") && fPSet_.getParameter("OutputSummaryProfileAtLayerLevelAsImage")) { TCanvas c1("c1"); @@ -107,9 +80,8 @@ void SiStripApvGainsDQM::fillSummaryMEs(const std::vector &selectedDet } } -// ----- void SiStripApvGainsDQM::fillMEsForLayer( - /*std::map selMEsMap_, */ uint32_t selDetId_, const TrackerTopology *tTopo) { + /*std::map selMEsMap_, */ uint32_t selDetId_) { int subdetectorId_ = ((selDetId_ >> 25) & 0x7); if (subdetectorId_ < 3 || subdetectorId_ > 6) { @@ -120,13 +92,13 @@ void SiStripApvGainsDQM::fillMEsForLayer( } // ---- - std::map::iterator selMEsMapIter_ = SummaryMEsMap_.find(getLayerNameAndId(selDetId_, tTopo).second); + const auto selMEsMapIter_ = SummaryMEsMap_.find(getLayerNameAndId(selDetId_).second); ModMEs selME_; if (selMEsMapIter_ != SummaryMEsMap_.end()) selME_ = selMEsMapIter_->second; - getSummaryMEs(selME_, selDetId_, tTopo); + getSummaryMEs(selME_, selDetId_); - SiStripApvGain::Range gainRange = gainHandle_->getRange(selDetId_); + const auto gainRange = condObj_->getRange(selDetId_); int nApv = reader->getNumberOfApvsAndStripLength(selDetId_).first; float meanApvGain = 0; @@ -139,16 +111,16 @@ void SiStripApvGainsDQM::fillMEsForLayer( hSummaryOfProfile_description = hPSet_.getParameter("SummaryOfProfile_description"); std::string hSummaryOfProfile_name; - hSummaryOfProfile_name = hidmanager.createHistoLayer( - hSummaryOfProfile_description, "layer", getLayerNameAndId(selDetId_, tTopo).first, ""); + hSummaryOfProfile_name = + hidmanager.createHistoLayer(hSummaryOfProfile_description, "layer", getLayerNameAndId(selDetId_).first, ""); for (int iapv = 0; iapv < nApv; ++iapv) { - meanApvGain = meanApvGain + gainHandle_->getApvGain(iapv, gainRange); - selME_.SummaryOfProfileDistr->Fill(iapv + 1, gainHandle_->getApvGain(iapv, gainRange)); + meanApvGain = meanApvGain + condObj_->getApvGain(iapv, gainRange); + selME_.SummaryOfProfileDistr->Fill(iapv + 1, condObj_->getApvGain(iapv, gainRange)); // Fill the TkMap if (fPSet_.getParameter("TkMap_On") || hPSet_.getParameter("TkMap_On")) { - fillTkMap(selDetId_, gainHandle_->getApvGain(iapv, gainRange)); + fillTkMap(selDetId_, condObj_->getApvGain(iapv, gainRange)); } } // iapv @@ -167,8 +139,7 @@ void SiStripApvGainsDQM::fillMEsForLayer( hSummary_description = hPSet_.getParameter("Summary_description"); std::string hSummary_name; - hSummary_name = - hidmanager.createHistoLayer(hSummary_description, "layer", getLayerNameAndId(selDetId_, tTopo).first, ""); + hSummary_name = hidmanager.createHistoLayer(hSummary_description, "layer", getLayerNameAndId(selDetId_).first, ""); // get detIds belonging to same layer to fill X-axis with detId-number @@ -176,7 +147,7 @@ void SiStripApvGainsDQM::fillMEsForLayer( sameLayerDetIds_.clear(); - sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, selDetId_, tTopo); + sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, selDetId_); unsigned int iBin = 0; for (unsigned int i = 0; i < sameLayerDetIds_.size(); i++) { @@ -186,8 +157,8 @@ void SiStripApvGainsDQM::fillMEsForLayer( } for (int iapv = 0; iapv < nApv; ++iapv) { - meanApvGain = meanApvGain + gainHandle_->getApvGain(iapv, gainRange); - selME_.SummaryDistr->Fill(iBin, gainHandle_->getApvGain(iapv, gainRange)); + meanApvGain = meanApvGain + condObj_->getApvGain(iapv, gainRange); + selME_.SummaryDistr->Fill(iBin, condObj_->getApvGain(iapv, gainRange)); } // iapv meanApvGain = meanApvGain / nApv; @@ -196,4 +167,3 @@ void SiStripApvGainsDQM::fillMEsForLayer( } // if Fill ... } -// ----- diff --git a/DQM/SiStripMonitorSummary/src/SiStripBackPlaneCorrectionDQM.cc b/DQM/SiStripMonitorSummary/src/SiStripBackPlaneCorrectionDQM.cc index b2fcc98a9fa01..0aa04521d822c 100644 --- a/DQM/SiStripMonitorSummary/src/SiStripBackPlaneCorrectionDQM.cc +++ b/DQM/SiStripMonitorSummary/src/SiStripBackPlaneCorrectionDQM.cc @@ -1,20 +1,19 @@ #include "DQM/SiStripMonitorSummary/interface/SiStripBackPlaneCorrectionDQM.h" -#include "DQMServices/Core/interface/DQMStore.h" #include "DataFormats/TrackerCommon/interface/SiStripSubStructure.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "TCanvas.h" // ----- -SiStripBackPlaneCorrectionDQM::SiStripBackPlaneCorrectionDQM(const edm::EventSetup &eSetup, - edm::RunNumber_t iRun, - edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet) - : SiStripBaseCondObjDQM(eSetup, iRun, hPSet, fPSet) { - // Build the Histo_TkMap: +SiStripBackPlaneCorrectionDQM::SiStripBackPlaneCorrectionDQM( + edm::ESGetToken token, + edm::RunNumber_t iRun, + edm::ParameterSet const &hPSet, + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo, + const TkDetMap *tkDetMap) + : SiStripBaseCondObjDQMGet{ + token, iRun, hPSet, fPSet, tTopo} { if (HistoMaps_On_) { - edm::ESHandle tkDetMapHandle; - eSetup.get().get(tkDetMapHandle); - Tk_HM_ = std::make_unique(tkDetMapHandle.product(), "SiStrip/Histo_Map", "BP_TkMap", 0.); + Tk_HM_ = std::make_unique(tkDetMap, "SiStrip/Histo_Map", "BP_TkMap", 0.); } } // ----- @@ -28,7 +27,7 @@ void SiStripBackPlaneCorrectionDQM::getActiveDetIds(const edm::EventSetup &eSetu getConditionObject(eSetup); std::map::const_iterator BPMapIter_; - std::map BPMap_ = bpcorrectionHandle_->getBackPlaneCorrections(); + std::map BPMap_ = condObj_->getBackPlaneCorrections(); for (BPMapIter_ = BPMap_.begin(); BPMapIter_ != BPMap_.end(); BPMapIter_++) { activeDetIds.push_back((*BPMapIter_).first); @@ -37,13 +36,7 @@ void SiStripBackPlaneCorrectionDQM::getActiveDetIds(const edm::EventSetup &eSetu // ----- // ----- -void SiStripBackPlaneCorrectionDQM::fillSummaryMEs(const std::vector &selectedDetIds, - const edm::EventSetup &es) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); - +void SiStripBackPlaneCorrectionDQM::fillSummaryMEs(const std::vector &selectedDetIds) { // ----- // BP on layer-level : fill at once all detIds belonging to same layer when // encountering first detID in the layer @@ -58,18 +51,18 @@ void SiStripBackPlaneCorrectionDQM::fillSummaryMEs(const std::vector & << subDetId_ << " and detId " << selectedDetIds[i] << " therefore no filling!" << std::endl; } else if (SummaryOnLayerLevel_On_) { if (fillNext) { - fillMEsForLayer(/*SummaryMEsMap_,*/ selectedDetIds[i], tTopo); + fillMEsForLayer(/*SummaryMEsMap_,*/ selectedDetIds[i]); } - if (getLayerNameAndId(selectedDetIds[i + 1], tTopo) == getLayerNameAndId(selectedDetIds[i], tTopo)) { + if (getLayerNameAndId(selectedDetIds[i + 1]) == getLayerNameAndId(selectedDetIds[i])) { fillNext = false; } else { fillNext = true; } } else if (SummaryOnStringLevel_On_) { if (fillNext) { - fillMEsForLayer(/*SummaryMEsMap_,*/ selectedDetIds[i], tTopo); + fillMEsForLayer(/*SummaryMEsMap_,*/ selectedDetIds[i]); } - if (getStringNameAndId(selectedDetIds[i + 1], tTopo) == getStringNameAndId(selectedDetIds[i], tTopo)) { + if (getStringNameAndId(selectedDetIds[i + 1]) == getStringNameAndId(selectedDetIds[i])) { fillNext = false; } else { fillNext = true; @@ -123,7 +116,7 @@ void SiStripBackPlaneCorrectionDQM::fillSummaryMEs(const std::vector & // ----- void SiStripBackPlaneCorrectionDQM::fillMEsForLayer( - /*std::map selMEsMap_,*/ uint32_t selDetId_, const TrackerTopology *tTopo) { + /*std::map selMEsMap_,*/ uint32_t selDetId_) { SiStripHistoId hidmanager; std::string hSummaryOfProfile_description; @@ -148,52 +141,50 @@ void SiStripBackPlaneCorrectionDQM::fillMEsForLayer( if (SummaryOnStringLevel_On_) { // FILLING FOR STRING LEVEL - hSummary_name = hidmanager.createHistoLayer( - hSummaryOfProfile_description, "layer", getStringNameAndId(selDetId_, tTopo).first, ""); - std::map::iterator selMEsMapIter_ = - SummaryMEsMap_.find(getStringNameAndId(selDetId_, tTopo).second); + hSummary_name = + hidmanager.createHistoLayer(hSummaryOfProfile_description, "layer", getStringNameAndId(selDetId_).first, ""); + std::map::iterator selMEsMapIter_ = SummaryMEsMap_.find(getStringNameAndId(selDetId_).second); ModMEs selME_; if (selMEsMapIter_ != SummaryMEsMap_.end()) selME_ = selMEsMapIter_->second; - getSummaryMEs(selME_, selDetId_, tTopo); + getSummaryMEs(selME_, selDetId_); // ----- sameLayerDetIds_.clear(); if (selSubDetId_ == 3) { // TIB - if (tTopo->tibIsInternalString(selDetId_)) { + if (tTopo_->tibIsInternalString(selDetId_)) { SiStripSubStructure::getTIBDetectors( - activeDetIds, sameLayerDetIds_, tTopo, tTopo->tibLayer(selDetId_), 0, 1, tTopo->tibString(selDetId_)); + activeDetIds, sameLayerDetIds_, tTopo_, tTopo_->tibLayer(selDetId_), 0, 1, tTopo_->tibString(selDetId_)); } - if (tTopo->tibIsExternalString(selDetId_)) { + if (tTopo_->tibIsExternalString(selDetId_)) { SiStripSubStructure::getTIBDetectors( - activeDetIds, sameLayerDetIds_, tTopo, tTopo->tibLayer(selDetId_), 0, 2, tTopo->tibString(selDetId_)); + activeDetIds, sameLayerDetIds_, tTopo_, tTopo_->tibLayer(selDetId_), 0, 2, tTopo_->tibString(selDetId_)); } } else if (selSubDetId_ == 4) { // TID - SiStripSubStructure::getTIDDetectors(activeDetIds, sameLayerDetIds_, tTopo, 0, 0, 0, 0); + SiStripSubStructure::getTIDDetectors(activeDetIds, sameLayerDetIds_, tTopo_, 0, 0, 0, 0); } else if (selSubDetId_ == 5) { // TOB SiStripSubStructure::getTOBDetectors( - activeDetIds, sameLayerDetIds_, tTopo, tTopo->tobLayer(selDetId_), 0, tTopo->tobRod(selDetId_)); + activeDetIds, sameLayerDetIds_, tTopo_, tTopo_->tobLayer(selDetId_), 0, tTopo_->tobRod(selDetId_)); } else if (selSubDetId_ == 6) { // TEC - SiStripSubStructure::getTECDetectors(activeDetIds, sameLayerDetIds_, tTopo, 0, 0, 0, 0, 0, 0); + SiStripSubStructure::getTECDetectors(activeDetIds, sameLayerDetIds_, tTopo_, 0, 0, 0, 0, 0, 0); } // ----- for (unsigned int i = 0; i < sameLayerDetIds_.size(); i++) { - selME_.SummaryOfProfileDistr->Fill(i + 1, bpcorrectionHandle_->getBackPlaneCorrection(sameLayerDetIds_[i])); + selME_.SummaryOfProfileDistr->Fill(i + 1, condObj_->getBackPlaneCorrection(sameLayerDetIds_[i])); // Fill the Histo_TkMap+TkMap with the BP: if (HistoMaps_On_) - Tk_HM_->fill(sameLayerDetIds_[i], bpcorrectionHandle_->getBackPlaneCorrection(sameLayerDetIds_[i])); + Tk_HM_->fill(sameLayerDetIds_[i], condObj_->getBackPlaneCorrection(sameLayerDetIds_[i])); - std::cout << sameLayerDetIds_[i] << "\t" << bpcorrectionHandle_->getBackPlaneCorrection(sameLayerDetIds_[i]) - << std::endl; + std::cout << sameLayerDetIds_[i] << "\t" << condObj_->getBackPlaneCorrection(sameLayerDetIds_[i]) << std::endl; if (fPSet_.getParameter("TkMap_On") || hPSet_.getParameter("TkMap_On")) { - fillTkMap(sameLayerDetIds_[i], bpcorrectionHandle_->getBackPlaneCorrection(sameLayerDetIds_[i])); + fillTkMap(sameLayerDetIds_[i], condObj_->getBackPlaneCorrection(sameLayerDetIds_[i])); } } @@ -210,43 +201,42 @@ void SiStripBackPlaneCorrectionDQM::fillMEsForLayer( return; } - hSummaryOfCumul_name = hidmanager.createHistoLayer( - hSummaryOfCumul_description, "layer", getStringNameAndId(selDetId_, tTopo).first, ""); + hSummaryOfCumul_name = + hidmanager.createHistoLayer(hSummaryOfCumul_description, "layer", getStringNameAndId(selDetId_).first, ""); for (unsigned int i = 0; i < sameLayerDetIds_.size(); i++) { - selME_.SummaryOfCumulDistr->Fill(bpcorrectionHandle_->getBackPlaneCorrection(sameLayerDetIds_[i])); + selME_.SummaryOfCumulDistr->Fill(condObj_->getBackPlaneCorrection(sameLayerDetIds_[i])); } } // FILLING FOR STRING LEVEL else { // FILLING FOR LAYER LEVEL - std::map::iterator selMEsMapIter_ = - SummaryMEsMap_.find(getLayerNameAndId(selDetId_, tTopo).second); + std::map::iterator selMEsMapIter_ = SummaryMEsMap_.find(getLayerNameAndId(selDetId_).second); ModMEs selME_; if (selMEsMapIter_ != SummaryMEsMap_.end()) selME_ = selMEsMapIter_->second; - getSummaryMEs(selME_, selDetId_, tTopo); + getSummaryMEs(selME_, selDetId_); if (hPSet_.getParameter("FillSummaryProfileAtLayerLevel")) { - hSummary_name = hidmanager.createHistoLayer( - hSummaryOfProfile_description, "layer", getLayerNameAndId(selDetId_, tTopo).first, ""); + hSummary_name = + hidmanager.createHistoLayer(hSummaryOfProfile_description, "layer", getLayerNameAndId(selDetId_).first, ""); // ----- sameLayerDetIds_.clear(); - sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, selDetId_, tTopo); + sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, selDetId_); for (unsigned int i = 0; i < sameLayerDetIds_.size(); i++) { - selME_.SummaryOfProfileDistr->Fill(i + 1, bpcorrectionHandle_->getBackPlaneCorrection(sameLayerDetIds_[i])); + selME_.SummaryOfProfileDistr->Fill(i + 1, condObj_->getBackPlaneCorrection(sameLayerDetIds_[i])); // Fill the Histo_TkMap with BP: if (HistoMaps_On_) - Tk_HM_->fill(sameLayerDetIds_[i], bpcorrectionHandle_->getBackPlaneCorrection(sameLayerDetIds_[i])); + Tk_HM_->fill(sameLayerDetIds_[i], condObj_->getBackPlaneCorrection(sameLayerDetIds_[i])); if (fPSet_.getParameter("TkMap_On") || hPSet_.getParameter("TkMap_On")) { - fillTkMap(sameLayerDetIds_[i], bpcorrectionHandle_->getBackPlaneCorrection(sameLayerDetIds_[i])); + fillTkMap(sameLayerDetIds_[i], condObj_->getBackPlaneCorrection(sameLayerDetIds_[i])); } } } // if Fill ... @@ -265,11 +255,11 @@ void SiStripBackPlaneCorrectionDQM::fillMEsForLayer( return; } - hSummaryOfCumul_name = hidmanager.createHistoLayer( - hSummaryOfCumul_description, "layer", getLayerNameAndId(selDetId_, tTopo).first, ""); + hSummaryOfCumul_name = + hidmanager.createHistoLayer(hSummaryOfCumul_description, "layer", getLayerNameAndId(selDetId_).first, ""); for (unsigned int i = 0; i < sameLayerDetIds_.size(); i++) { - selME_.SummaryOfCumulDistr->Fill(bpcorrectionHandle_->getBackPlaneCorrection(sameLayerDetIds_[i])); + selME_.SummaryOfCumulDistr->Fill(condObj_->getBackPlaneCorrection(sameLayerDetIds_[i])); } } // if Fill ... } // FILLING FOR LAYER LEVEL diff --git a/DQM/SiStripMonitorSummary/src/SiStripBaseCondObjDQM.cc b/DQM/SiStripMonitorSummary/src/SiStripBaseCondObjDQM.cc index 4145453f99476..8ae18b14c0741 100644 --- a/DQM/SiStripMonitorSummary/src/SiStripBaseCondObjDQM.cc +++ b/DQM/SiStripMonitorSummary/src/SiStripBaseCondObjDQM.cc @@ -5,18 +5,11 @@ #include "TCanvas.h" -// ----- - -SiStripBaseCondObjDQM::SiStripBaseCondObjDQM(const edm::EventSetup &eSetup, - edm::RunNumber_t iRun, +SiStripBaseCondObjDQM::SiStripBaseCondObjDQM(edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet) - : eSetup_(eSetup), - hPSet_(hPSet), - fPSet_(fPSet), - cacheID_memory(0), - dqmStore_(edm::Service().operator->()), - runNumber_(iRun) { + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo) + : hPSet_(hPSet), fPSet_(fPSet), tTopo_(tTopo), dqmStore_(edm::Service().operator->()), runNumber_(iRun) { reader = new SiStripDetInfoFileReader( edm::FileInPath(std::string("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat")).fullPath()); @@ -46,55 +39,42 @@ SiStripBaseCondObjDQM::SiStripBaseCondObjDQM(const edm::EventSetup &eSetup, minValue = hPSet_.getParameter("minValue"); maxValue = hPSet_.getParameter("maxValue"); } -// ----- -//====================================== -// ----- void SiStripBaseCondObjDQM::analysis(const edm::EventSetup &eSetup_) { - cacheID_current = getCache(eSetup_); - - if (cacheID_memory == cacheID_current) - return; - - getConditionObject(eSetup_); + if (checkChanged(eSetup_)) { + getConditionObject(eSetup_); - // The OR of the two conditions allows to switch on this feature for all the - // components (if the FillConditions_PSet has the ActiveDetIds_On =true) or - // for single MEs (if the PSet for a ME has the ActiveDetIds_On =true) - if (fPSet_.getParameter("ActiveDetIds_On") || hPSet_.getParameter("ActiveDetIds_On")) - getActiveDetIds(eSetup_); - else - activeDetIds = reader->getAllDetIds(); + // The OR of the two conditions allows to switch on this feature for all the + // components (if the FillConditions_PSet has the ActiveDetIds_On =true) or + // for single MEs (if the PSet for a ME has the ActiveDetIds_On =true) + if (fPSet_.getParameter("ActiveDetIds_On") || hPSet_.getParameter("ActiveDetIds_On")) + getActiveDetIds(eSetup_); + else + activeDetIds = reader->getAllDetIds(); - edm::ESHandle tTopoHandle; - eSetup_.get().get(tTopoHandle); - const TrackerTopology *tTopo = tTopoHandle.product(); + selectModules(activeDetIds); - selectModules(activeDetIds, tTopo); - - if (Mod_On_) { - fillModMEs(activeDetIds, eSetup_); - } - if (SummaryOnLayerLevel_On_ || SummaryOnStringLevel_On_) { - fillSummaryMEs(activeDetIds, eSetup_); - } + if (Mod_On_) { + fillModMEs(activeDetIds); + } + if (SummaryOnLayerLevel_On_ || SummaryOnStringLevel_On_) { + fillSummaryMEs(activeDetIds); + } - if (fPSet_.getParameter("TkMap_On") || hPSet_.getParameter("TkMap_On")) { - std::string filename = hPSet_.getParameter("TkMapName"); - if (!filename.empty()) { - constexpr unsigned int kSLen = 128; - char sRun[kSLen]; - snprintf(sRun, kSLen, "_Run_%d", runNumber_); - filename.insert(filename.find('.'), sRun); + if (fPSet_.getParameter("TkMap_On") || hPSet_.getParameter("TkMap_On")) { + std::string filename = hPSet_.getParameter("TkMapName"); + if (!filename.empty()) { + constexpr unsigned int kSLen = 128; + char sRun[kSLen]; + snprintf(sRun, kSLen, "_Run_%d", runNumber_); + filename.insert(filename.find('.'), sRun); - saveTkMap(filename, minValue, maxValue); + saveTkMap(filename, minValue, maxValue); + } } } } -// ----- -//===================================== -// ----- void SiStripBaseCondObjDQM::analysisOnDemand(const edm::EventSetup &eSetup_, std::string requestedSubDetector, uint32_t requestedSide, @@ -105,72 +85,41 @@ void SiStripBaseCondObjDQM::analysisOnDemand(const edm::EventSetup &eSetup_, std::vector requestedDetIds_; requestedDetIds_.clear(); - edm::ESHandle tTopoHandle; - eSetup_.get().get(tTopoHandle); - const TrackerTopology *tTopo = tTopoHandle.product(); - if (requestedSubDetector == "TIB") { - SiStripSubStructure::getTIBDetectors(activeDetIds, requestedDetIds_, tTopo, requestedLayer, 0, 0, 0); + SiStripSubStructure::getTIBDetectors(activeDetIds, requestedDetIds_, tTopo_, requestedLayer, 0, 0, 0); } else if (requestedSubDetector == "TID") { - SiStripSubStructure::getTIDDetectors(activeDetIds, requestedDetIds_, tTopo, requestedSide, requestedLayer, 0, 0); + SiStripSubStructure::getTIDDetectors(activeDetIds, requestedDetIds_, tTopo_, requestedSide, requestedLayer, 0, 0); } else if (requestedSubDetector == "TOB") { - SiStripSubStructure::getTOBDetectors(activeDetIds, requestedDetIds_, tTopo, requestedLayer, 0, 0); + SiStripSubStructure::getTOBDetectors(activeDetIds, requestedDetIds_, tTopo_, requestedLayer, 0, 0); } else if (requestedSubDetector == "TEC") { SiStripSubStructure::getTECDetectors( - activeDetIds, requestedDetIds_, tTopo, requestedSide, requestedLayer, 0, 0, 0, 0); + activeDetIds, requestedDetIds_, tTopo_, requestedSide, requestedLayer, 0, 0, 0, 0); } analysisOnDemand(eSetup_, requestedDetIds_); } -// ----- -//=========================================== -// ----- void SiStripBaseCondObjDQM::analysisOnDemand(const edm::EventSetup &eSetup_, uint32_t detIdOnDemand) { - unsigned long long cacheID_current = getCache(eSetup_); - - if (cacheID_memory == cacheID_current) - return; - - getConditionObject(eSetup_); + if (checkChanged(eSetup_)) { + getConditionObject(eSetup_); - std::vector vdetIdsOnDemand_; - vdetIdsOnDemand_.push_back(detIdOnDemand); // fillModMEs needs a vector + std::vector vdetIdsOnDemand_; + vdetIdsOnDemand_.push_back(detIdOnDemand); // fillModMEs needs a vector - fillModMEs(vdetIdsOnDemand_, eSetup_); + fillModMEs(vdetIdsOnDemand_); + } } -// ----- -//=============================================== -// ----- + void SiStripBaseCondObjDQM::analysisOnDemand(const edm::EventSetup &eSetup_, const std::vector &detIdsOnDemand) { - unsigned long long cacheID_current = getCache(eSetup_); - - if (cacheID_memory == cacheID_current) - return; - - getConditionObject(eSetup_); - - fillSummaryMEs(detIdsOnDemand, eSetup_); -} -// ----- -//==================================== -// ----- -std::vector SiStripBaseCondObjDQM::getCabledModules() { - std::vector cabledDetIds_; - eSetup_.get().get(detCablingHandle_); - detCablingHandle_->addActiveDetectorsRawIds(cabledDetIds_); - - return cabledDetIds_; + if (checkChanged(eSetup_)) { + getConditionObject(eSetup_); + fillSummaryMEs(detIdsOnDemand); + } } -// ----- - -//========================================================= -// ----- //#FIXME : very long method. please factorize it - -void SiStripBaseCondObjDQM::selectModules(std::vector &detIds_, const TrackerTopology *tTopo) { +void SiStripBaseCondObjDQM::selectModules(std::vector &detIds_) { edm::LogInfo("SiStripBaseCondObjDQM") << "[SiStripBaseCondObjDQM::selectModules] input detIds_: " << detIds_.size() << std::endl; @@ -184,12 +133,10 @@ void SiStripBaseCondObjDQM::selectModules(std::vector &detIds_, const } std::vector modulesToBeIncluded; - for (std::vector::const_iterator detid = detIds_.begin(); detid != detIds_.end(); ++detid) { - for (std::vector::const_iterator detidsel = included_subdetsels.begin(); - detidsel != included_subdetsels.end(); - ++detidsel) { - if (detidsel->isSelected(*detid)) { - modulesToBeIncluded.push_back(*detid); + for (const auto detid : detIds_) { + for (const auto &detidsel : included_subdetsels) { + if (detidsel.isSelected(detid)) { + modulesToBeIncluded.push_back(detid); break; // std::cout << "detId: " << *detid << " is selected" << // std::endl; @@ -202,18 +149,16 @@ void SiStripBaseCondObjDQM::selectModules(std::vector &detIds_, const std::vector excluded_subdetsels; std::vector excluded_subdets = fPSet_.getParameter>("ModulesToBeExcluded_DetIdSelector"); - for (std::vector::const_iterator wsdps = excluded_subdets.begin(); wsdps != excluded_subdets.end(); - ++wsdps) { - excluded_subdetsels.push_back(DetIdSelector(*wsdps)); + excluded_subdetsels.reserve(excluded_subdets.size()); + for (const auto &wsdps : excluded_subdets) { + excluded_subdetsels.push_back(DetIdSelector(wsdps)); } std::vector modulesToBeExcluded; - for (std::vector::const_iterator detid = detIds_.begin(); detid != detIds_.end(); ++detid) { - for (std::vector::const_iterator detidsel = excluded_subdetsels.begin(); - detidsel != excluded_subdetsels.end(); - ++detidsel) { - if (detidsel->isSelected(*detid)) { - modulesToBeExcluded.push_back(*detid); + for (const auto detid : detIds_) { + for (const auto &detidsel : excluded_subdetsels) { + if (detidsel.isSelected(detid)) { + modulesToBeExcluded.push_back(detid); break; } } @@ -256,9 +201,8 @@ void SiStripBaseCondObjDQM::selectModules(std::vector &detIds_, const std::sort(detIds_.begin(), detIds_.end()); if (!modulesToBeExcluded.empty()) { - for (std::vector::const_iterator mod = modulesToBeExcluded.begin(); mod != modulesToBeExcluded.end(); - mod++) { - std::vector::iterator detid = std::lower_bound(detIds_.begin(), detIds_.end(), *mod); + for (const auto mod : modulesToBeExcluded) { + auto detid = std::lower_bound(detIds_.begin(), detIds_.end(), mod); if (detid != detIds_.end()) detIds_.erase(detid); detid--; @@ -271,32 +215,28 @@ void SiStripBaseCondObjDQM::selectModules(std::vector &detIds_, const if (*(SubDetectorsToBeExcluded_.begin()) != "none") { std::vector tmp; - for (std::vector::const_iterator modIter_ = SubDetectorsToBeExcluded_.begin(); - modIter_ != SubDetectorsToBeExcluded_.end(); - modIter_++) { + for (const auto &mod : SubDetectorsToBeExcluded_) { tmp.clear(); - if (*modIter_ == "TIB") { - SiStripSubStructure::getTIBDetectors(detIds_, tmp, tTopo, 0, 0, 0, 0); - } else if (*modIter_ == "TOB") { - SiStripSubStructure::getTOBDetectors(detIds_, tmp, tTopo, 0, 0, 0); - } else if (*modIter_ == "TID") { - SiStripSubStructure::getTIDDetectors(detIds_, tmp, tTopo, 0, 0, 0, 0); - } else if (*modIter_ == "TEC") { - SiStripSubStructure::getTECDetectors(detIds_, tmp, tTopo, 0, 0, 0, 0, 0, 0); + if (mod == "TIB") { + SiStripSubStructure::getTIBDetectors(detIds_, tmp, tTopo_, 0, 0, 0, 0); + } else if (mod == "TOB") { + SiStripSubStructure::getTOBDetectors(detIds_, tmp, tTopo_, 0, 0, 0); + } else if (mod == "TID") { + SiStripSubStructure::getTIDDetectors(detIds_, tmp, tTopo_, 0, 0, 0, 0); + } else if (mod == "TEC") { + SiStripSubStructure::getTECDetectors(detIds_, tmp, tTopo_, 0, 0, 0, 0, 0, 0); } else { edm::LogWarning("SiStripBaseCondObjDQM") << "[SiStripBaseCondObjDQM::selectModules] PLEASE CHECK : no " "correct (name) subdetector to be excluded in your cfg" << std::endl; } - std::vector::iterator iterBegin_ = - std::lower_bound(detIds_.begin(), detIds_.end(), *min_element(tmp.begin(), tmp.end())); + const auto iterBegin_ = std::lower_bound(detIds_.begin(), detIds_.end(), *min_element(tmp.begin(), tmp.end())); - std::vector::iterator iterEnd_ = - std::lower_bound(detIds_.begin(), detIds_.end(), *max_element(tmp.begin(), tmp.end())); + const auto iterEnd_ = std::lower_bound(detIds_.begin(), detIds_.end(), *max_element(tmp.begin(), tmp.end())); - for (std::vector::iterator detIter_ = iterEnd_; detIter_ != iterBegin_ - 1; detIter_--) { + for (auto detIter_ = iterEnd_; detIter_ != iterBegin_ - 1; detIter_--) { detIds_.erase(detIter_); } @@ -315,36 +255,36 @@ void SiStripBaseCondObjDQM::selectModules(std::vector &detIds_, const for (unsigned int i = 1; i < 5; i++) { tmp.clear(); - SiStripSubStructure::getTIBDetectors(detIds_, tmp, tTopo, i, 0, 0, 0); + SiStripSubStructure::getTIBDetectors(detIds_, tmp, tTopo_, i, 0, 0, 0); if (!tmp.empty()) { layerDetIds.push_back(*(tmp.begin())); } } for (unsigned int i = 1; i < 7; i++) { tmp.clear(); - SiStripSubStructure::getTOBDetectors(detIds_, tmp, tTopo, i, 0, 0); + SiStripSubStructure::getTOBDetectors(detIds_, tmp, tTopo_, i, 0, 0); if (!tmp.empty()) { layerDetIds.push_back(*(tmp.begin())); } } for (unsigned int i = 1; i < 4; i++) { tmp.clear(); - SiStripSubStructure::getTIDDetectors(detIds_, tmp, tTopo, 1, i, 0, 0); + SiStripSubStructure::getTIDDetectors(detIds_, tmp, tTopo_, 1, i, 0, 0); if (!tmp.empty()) { layerDetIds.push_back(*(tmp.begin())); } - SiStripSubStructure::getTIDDetectors(detIds_, tmp, tTopo, 2, i, 0, 0); + SiStripSubStructure::getTIDDetectors(detIds_, tmp, tTopo_, 2, i, 0, 0); if (!tmp.empty()) { layerDetIds.push_back(*(tmp.begin())); } } for (unsigned int i = 1; i < 10; i++) { tmp.clear(); - SiStripSubStructure::getTECDetectors(detIds_, tmp, tTopo, 1, i, 0, 0, 0, 0); + SiStripSubStructure::getTECDetectors(detIds_, tmp, tTopo_, 1, i, 0, 0, 0, 0); if (!tmp.empty()) { layerDetIds.push_back(*(tmp.begin())); } - SiStripSubStructure::getTECDetectors(detIds_, tmp, tTopo, 2, i, 0, 0, 0, 0); + SiStripSubStructure::getTECDetectors(detIds_, tmp, tTopo_, 2, i, 0, 0, 0, 0); if (!tmp.empty()) { layerDetIds.push_back(*(tmp.begin())); } @@ -356,12 +296,9 @@ void SiStripBaseCondObjDQM::selectModules(std::vector &detIds_, const // ----- } // selectModules -// ----- -//================================================= -// ----- -void SiStripBaseCondObjDQM::getModMEs(ModMEs &CondObj_ME, const uint32_t &detId_, const TrackerTopology *tTopo) { - std::map::const_iterator ModMEsMap_iter = ModMEsMap_.find(detId_); +void SiStripBaseCondObjDQM::getModMEs(ModMEs &CondObj_ME, const uint32_t &detId_) { + const auto ModMEsMap_iter = ModMEsMap_.find(detId_); if (ModMEsMap_iter != ModMEsMap_.end()) { CondObj_ME = ModMEsMap_iter->second; @@ -381,30 +318,27 @@ void SiStripBaseCondObjDQM::getModMEs(ModMEs &CondObj_ME, const uint32_t &detId_ // --> profile defined for all CondData if ((CondObj_fillId_ == "ProfileAndCumul" || CondObj_fillId_ == "onlyProfile")) { - bookProfileMEs(CondObj_ME, detId_, tTopo); + bookProfileMEs(CondObj_ME, detId_); } // --> cumul currently only defined for noise and apvgain if ((CondObj_fillId_ == "ProfileAndCumul" || CondObj_fillId_ == "onlyCumul") && (CondObj_name_ == "noise" || CondObj_name_ == "apvgain")) - bookCumulMEs(CondObj_ME, detId_, tTopo); + bookCumulMEs(CondObj_ME, detId_); ModMEsMap_.insert(std::make_pair(detId_, CondObj_ME)); } -// ---- -//=============================================== -// ----- //%FIXME: very long method, factorize -void SiStripBaseCondObjDQM::getSummaryMEs(ModMEs &CondObj_ME, const uint32_t &detId_, const TrackerTopology *tTopo) { +void SiStripBaseCondObjDQM::getSummaryMEs(ModMEs &CondObj_ME, const uint32_t &detId_) { std::map::const_iterator SummaryMEsMap_iter; if (CondObj_name_ == "lorentzangle" && SummaryOnStringLevel_On_) { - SummaryMEsMap_iter = SummaryMEsMap_.find(getStringNameAndId(detId_, tTopo).second); + SummaryMEsMap_iter = SummaryMEsMap_.find(getStringNameAndId(detId_).second); } else if (CondObj_name_ == "bpcorrection" && SummaryOnStringLevel_On_) { - SummaryMEsMap_iter = SummaryMEsMap_.find(getStringNameAndId(detId_, tTopo).second); + SummaryMEsMap_iter = SummaryMEsMap_.find(getStringNameAndId(detId_).second); } else { - SummaryMEsMap_iter = SummaryMEsMap_.find(getLayerNameAndId(detId_, tTopo).second); + SummaryMEsMap_iter = SummaryMEsMap_.find(getLayerNameAndId(detId_).second); } if (SummaryMEsMap_iter != SummaryMEsMap_.end()) { @@ -423,7 +357,7 @@ void SiStripBaseCondObjDQM::getSummaryMEs(ModMEs &CondObj_ME, const uint32_t &de CondObj_name_ == "lorentzangle")) { if (hPSet_.getParameter("FillSummaryProfileAtLayerLevel")) if (!CondObj_ME.SummaryOfProfileDistr) { - bookSummaryProfileMEs(CondObj_ME, detId_, tTopo); + bookSummaryProfileMEs(CondObj_ME, detId_); } } @@ -432,7 +366,7 @@ void SiStripBaseCondObjDQM::getSummaryMEs(ModMEs &CondObj_ME, const uint32_t &de (CondObj_name_ == "lorentzangle" || CondObj_name_ == "bpcorrection" || CondObj_name_ == "noise")) { if (hPSet_.getParameter("FillCumulativeSummaryAtLayerLevel")) if (!CondObj_ME.SummaryOfCumulDistr) { - bookSummaryCumulMEs(CondObj_ME, detId_, tTopo); + bookSummaryCumulMEs(CondObj_ME, detId_); } } @@ -442,29 +376,27 @@ void SiStripBaseCondObjDQM::getSummaryMEs(ModMEs &CondObj_ME, const uint32_t &de CondObj_name_ == "apvgain" || CondObj_name_ == "pedestal" || CondObj_name_ == "quality") { if (hPSet_.getParameter("FillSummaryAtLayerLevel")) if (!CondObj_ME.SummaryDistr) { - bookSummaryMEs(CondObj_ME, detId_, tTopo); + bookSummaryMEs(CondObj_ME, detId_); } } if (CondObj_name_ == "lorentzangle" && SummaryOnStringLevel_On_) { // FIXME getStringNameandId takes time. not need to call it every timne. put // the call at the beginning of the method and caache the string - SummaryMEsMap_.insert(std::make_pair(getStringNameAndId(detId_, tTopo).second, CondObj_ME)); + SummaryMEsMap_.insert(std::make_pair(getStringNameAndId(detId_).second, CondObj_ME)); } else if (CondObj_name_ == "bpcorrection" && SummaryOnStringLevel_On_) { // FIXME getStringNameandId takes time. not need to call it every timne. put // the call at the beginning of the method and caache the string - SummaryMEsMap_.insert(std::make_pair(getStringNameAndId(detId_, tTopo).second, CondObj_ME)); + SummaryMEsMap_.insert(std::make_pair(getStringNameAndId(detId_).second, CondObj_ME)); } else { - SummaryMEsMap_.insert(std::make_pair(getLayerNameAndId(detId_, tTopo).second, CondObj_ME)); + SummaryMEsMap_.insert(std::make_pair(getLayerNameAndId(detId_).second, CondObj_ME)); } } // ---- //==================================================== // ----- -void SiStripBaseCondObjDQM::bookProfileMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, - const uint32_t &detId_, - const TrackerTopology *tTopo) { +void SiStripBaseCondObjDQM::bookProfileMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, const uint32_t &detId_) { int hProfile_NchX = 0; double hProfile_LowX = 0; double hProfile_HighX = 0; @@ -490,7 +422,7 @@ void SiStripBaseCondObjDQM::bookProfileMEs(SiStripBaseCondObjDQM::ModMEs &CondOb hProfile_HighX = nApv + 0.5; } - folder_organizer.setDetectorFolder(detId_, tTopo); + folder_organizer.setDetectorFolder(detId_, tTopo_); std::string hProfile_Name; hProfile_Name = hidmanager.createHistoId(hProfile_description, "det", detId_); @@ -506,9 +438,7 @@ void SiStripBaseCondObjDQM::bookProfileMEs(SiStripBaseCondObjDQM::ModMEs &CondOb //============================================= // ----- -void SiStripBaseCondObjDQM::bookCumulMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, - const uint32_t &detId_, - const TrackerTopology *tTopo) { +void SiStripBaseCondObjDQM::bookCumulMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, const uint32_t &detId_) { int hCumul_NchX = 0; double hCumul_LowX = 0; double hCumul_HighX = 0; @@ -524,7 +454,7 @@ void SiStripBaseCondObjDQM::bookCumulMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ hCumul_LowX = hPSet_.getParameter("Cumul_LowX"); hCumul_HighX = hPSet_.getParameter("Cumul_HighX"); - folder_organizer.setDetectorFolder(detId_, tTopo); + folder_organizer.setDetectorFolder(detId_, tTopo_); std::string hCumul_name; hCumul_name = hidmanager.createHistoId(hCumul_description, "det", detId_); @@ -542,9 +472,7 @@ void SiStripBaseCondObjDQM::bookCumulMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ //=========================================== // ----- //#FIXME: same comments: factorize, and remove any reference to derived classes -void SiStripBaseCondObjDQM::bookSummaryProfileMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, - const uint32_t &detId_, - const TrackerTopology *tTopo) { +void SiStripBaseCondObjDQM::bookSummaryProfileMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, const uint32_t &detId_) { std::vector sameLayerDetIds_; int hSummaryOfProfile_NchX = 0; @@ -567,11 +495,11 @@ void SiStripBaseCondObjDQM::bookSummaryProfileMEs(SiStripBaseCondObjDQM::ModMEs int nStrip, nApv, layerId_; if (CondObj_name_ == "lorentzangle" && SummaryOnStringLevel_On_) { - layerId_ = getStringNameAndId(detId_, tTopo).second; + layerId_ = getStringNameAndId(detId_).second; } else if (CondObj_name_ == "bpcorrection" && SummaryOnStringLevel_On_) { - layerId_ = getStringNameAndId(detId_, tTopo).second; + layerId_ = getStringNameAndId(detId_).second; } else { - layerId_ = getLayerNameAndId(detId_, tTopo).second; + layerId_ = getLayerNameAndId(detId_).second; } if (CondObj_name_ == "pedestal" || CondObj_name_ == "noise" || CondObj_name_ == "lowthreshold" || @@ -600,16 +528,16 @@ void SiStripBaseCondObjDQM::bookSummaryProfileMEs(SiStripBaseCondObjDQM::ModMEs switch (DetId(detId_).subdetId()) { case StripSubdetector::TIB: SiStripSubStructure::getTIBDetectors( - activeDetIds, sameLayerDetIds_, tTopo, tTopo->tibLayer(detId_), 0, 0, tTopo->tibString(detId_)); + activeDetIds, sameLayerDetIds_, tTopo_, tTopo_->tibLayer(detId_), 0, 0, tTopo_->tibString(detId_)); break; case StripSubdetector::TID: - SiStripSubStructure::getTIDDetectors(activeDetIds, sameLayerDetIds_, tTopo, 0, 0, 0, 0); + SiStripSubStructure::getTIDDetectors(activeDetIds, sameLayerDetIds_, tTopo_, 0, 0, 0, 0); break; case StripSubdetector::TOB: - SiStripSubStructure::getTOBDetectors(activeDetIds, sameLayerDetIds_, tTopo, tTopo->tobLayer(detId_), 0, 0); + SiStripSubStructure::getTOBDetectors(activeDetIds, sameLayerDetIds_, tTopo_, tTopo_->tobLayer(detId_), 0, 0); break; case StripSubdetector::TEC: - SiStripSubStructure::getTECDetectors(activeDetIds, sameLayerDetIds_, tTopo, 0, 0, 0, 0, 0, 0); + SiStripSubStructure::getTECDetectors(activeDetIds, sameLayerDetIds_, tTopo_, 0, 0, 0, 0, 0, 0); break; } @@ -627,23 +555,23 @@ void SiStripBaseCondObjDQM::bookSummaryProfileMEs(SiStripBaseCondObjDQM::ModMEs switch (DetId(detId_).subdetId()) { case StripSubdetector::TIB: - if (tTopo->tibIsInternalString(detId_)) { + if (tTopo_->tibIsInternalString(detId_)) { SiStripSubStructure::getTIBDetectors( - activeDetIds, sameLayerDetIds_, tTopo, tTopo->tibLayer(detId_), 0, 1, tTopo->tibString(detId_)); - } else if (tTopo->tibIsExternalString(detId_)) { + activeDetIds, sameLayerDetIds_, tTopo_, tTopo_->tibLayer(detId_), 0, 1, tTopo_->tibString(detId_)); + } else if (tTopo_->tibIsExternalString(detId_)) { SiStripSubStructure::getTIBDetectors( - activeDetIds, sameLayerDetIds_, tTopo, tTopo->tibLayer(detId_), 0, 2, tTopo->tibString(detId_)); + activeDetIds, sameLayerDetIds_, tTopo_, tTopo_->tibLayer(detId_), 0, 2, tTopo_->tibString(detId_)); } break; case StripSubdetector::TID: - SiStripSubStructure::getTIDDetectors(activeDetIds, sameLayerDetIds_, tTopo, 0, 0, 0, 0); + SiStripSubStructure::getTIDDetectors(activeDetIds, sameLayerDetIds_, tTopo_, 0, 0, 0, 0); break; case StripSubdetector::TOB: SiStripSubStructure::getTOBDetectors( - activeDetIds, sameLayerDetIds_, tTopo, tTopo->tobLayer(detId_), 0, tTopo->tobRod(detId_)); + activeDetIds, sameLayerDetIds_, tTopo_, tTopo_->tobLayer(detId_), 0, tTopo_->tobRod(detId_)); break; case StripSubdetector::TEC: - SiStripSubStructure::getTECDetectors(activeDetIds, sameLayerDetIds_, tTopo, 0, 0, 0, 0, 0, 0); + SiStripSubStructure::getTECDetectors(activeDetIds, sameLayerDetIds_, tTopo_, 0, 0, 0, 0, 0, 0); break; } @@ -672,9 +600,9 @@ void SiStripBaseCondObjDQM::bookSummaryProfileMEs(SiStripBaseCondObjDQM::ModMEs uint32_t layer_ = 0; - layer_ = folder_organizer.GetSubDetAndLayer(detId_, tTopo).second; + layer_ = folder_organizer.GetSubDetAndLayer(detId_, tTopo_).second; - folder_organizer.setLayerFolder(detId_, tTopo, layer_); + folder_organizer.setLayerFolder(detId_, tTopo_, layer_); std::string hSummaryOfProfile_name; @@ -690,11 +618,11 @@ void SiStripBaseCondObjDQM::bookSummaryProfileMEs(SiStripBaseCondObjDQM::ModMEs // --- if ((CondObj_name_ == "lorentzangle" || CondObj_name_ == "bpcorrection") && SummaryOnStringLevel_On_) { - hSummaryOfProfile_name = hidmanager.createHistoLayer( - hSummaryOfProfile_description, "layer", getStringNameAndId(detId_, tTopo).first, ""); + hSummaryOfProfile_name = + hidmanager.createHistoLayer(hSummaryOfProfile_description, "layer", getStringNameAndId(detId_).first, ""); } else { hSummaryOfProfile_name = - hidmanager.createHistoLayer(hSummaryOfProfile_description, "layer", getLayerNameAndId(detId_, tTopo).first, ""); + hidmanager.createHistoLayer(hSummaryOfProfile_description, "layer", getLayerNameAndId(detId_).first, ""); } std::string hSummaryOfProfile_title; @@ -743,17 +671,17 @@ void SiStripBaseCondObjDQM::bookSummaryProfileMEs(SiStripBaseCondObjDQM::ModMEs // Label with module position instead of detIds: char sameLayerDetIds_Name[1024]; if (subdetectorId_ == 3) { // re-abelling for TIB - if (tTopo->tibIsZPlusSide(sameLayerDetIds_[i])) { - sprintf(sameLayerDetIds_Name, "%i", tTopo->tibModule(sameLayerDetIds_[i])); - } else if (tTopo->tibIsZMinusSide(sameLayerDetIds_[i])) { - sprintf(sameLayerDetIds_Name, "%i", -tTopo->tibModule(sameLayerDetIds_[i])); + if (tTopo_->tibIsZPlusSide(sameLayerDetIds_[i])) { + sprintf(sameLayerDetIds_Name, "%i", tTopo_->tibModule(sameLayerDetIds_[i])); + } else if (tTopo_->tibIsZMinusSide(sameLayerDetIds_[i])) { + sprintf(sameLayerDetIds_Name, "%i", -tTopo_->tibModule(sameLayerDetIds_[i])); } CondObj_ME.SummaryOfProfileDistr->setBinLabel(iBin, sameLayerDetIds_Name); } else if (subdetectorId_ == 5) { // re-abelling for TOB - if (tTopo->tobIsZPlusSide(sameLayerDetIds_[i])) { - sprintf(sameLayerDetIds_Name, "%i", tTopo->tobModule(sameLayerDetIds_[i])); - } else if (tTopo->tobIsZMinusSide(sameLayerDetIds_[i])) { - sprintf(sameLayerDetIds_Name, "%i", -tTopo->tobModule(sameLayerDetIds_[i])); + if (tTopo_->tobIsZPlusSide(sameLayerDetIds_[i])) { + sprintf(sameLayerDetIds_Name, "%i", tTopo_->tobModule(sameLayerDetIds_[i])); + } else if (tTopo_->tobIsZMinusSide(sameLayerDetIds_[i])) { + sprintf(sameLayerDetIds_Name, "%i", -tTopo_->tobModule(sameLayerDetIds_[i])); } CondObj_ME.SummaryOfProfileDistr->setBinLabel(iBin, sameLayerDetIds_Name); } @@ -764,13 +692,8 @@ void SiStripBaseCondObjDQM::bookSummaryProfileMEs(SiStripBaseCondObjDQM::ModMEs } // if "lorentzangle" } -// ---- -//============================================================= -// ----- -void SiStripBaseCondObjDQM::bookSummaryCumulMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, - const uint32_t &detId_, - const TrackerTopology *tTopo) { +void SiStripBaseCondObjDQM::bookSummaryCumulMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, const uint32_t &detId_) { int hSummaryOfCumul_NchX = 0; double hSummaryOfCumul_LowX = 0; double hSummaryOfCumul_HighX = 0; @@ -788,9 +711,9 @@ void SiStripBaseCondObjDQM::bookSummaryCumulMEs(SiStripBaseCondObjDQM::ModMEs &C uint32_t layer_ = 0; - layer_ = folder_organizer.GetSubDetAndLayer(detId_, tTopo).second; + layer_ = folder_organizer.GetSubDetAndLayer(detId_, tTopo_).second; - folder_organizer.setLayerFolder(detId_, tTopo, layer_); + folder_organizer.setLayerFolder(detId_, tTopo_, layer_); std::string hSummaryOfCumul_name; @@ -808,10 +731,10 @@ void SiStripBaseCondObjDQM::bookSummaryCumulMEs(SiStripBaseCondObjDQM::ModMEs &C // LA and BP Histos are plotted for each string: if ((CondObj_name_ == "lorentzangle" || CondObj_name_ == "bpcorrection") && SummaryOnStringLevel_On_) { hSummaryOfCumul_name = - hidmanager.createHistoLayer(hSummaryOfCumul_description, "layer", getStringNameAndId(detId_, tTopo).first, ""); + hidmanager.createHistoLayer(hSummaryOfCumul_description, "layer", getStringNameAndId(detId_).first, ""); } else { hSummaryOfCumul_name = - hidmanager.createHistoLayer(hSummaryOfCumul_description, "layer", getLayerNameAndId(detId_, tTopo).first, ""); + hidmanager.createHistoLayer(hSummaryOfCumul_description, "layer", getLayerNameAndId(detId_).first, ""); } std::string hSummaryOfCumul_title; @@ -823,14 +746,9 @@ void SiStripBaseCondObjDQM::bookSummaryCumulMEs(SiStripBaseCondObjDQM::ModMEs &C CondObj_ME.SummaryOfCumulDistr->setAxisTitle(hSummaryOfCumul_xTitle, 1); CondObj_ME.SummaryOfCumulDistr->setAxisTitle(hSummaryOfCumul_yTitle, 2); } -// ----- -//================================================ -// ----- // FIXME same as before: factorize -void SiStripBaseCondObjDQM::bookSummaryMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, - const uint32_t &detId_, - const TrackerTopology *tTopo) { +void SiStripBaseCondObjDQM::bookSummaryMEs(SiStripBaseCondObjDQM::ModMEs &CondObj_ME, const uint32_t &detId_) { std::vector sameLayerDetIds_; int hSummary_NchX = 0; @@ -855,7 +773,7 @@ void SiStripBaseCondObjDQM::bookSummaryMEs(SiStripBaseCondObjDQM::ModMEs &CondOb sameLayerDetIds_.clear(); - sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, detId_, tTopo); + sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, detId_); hSummary_NchX = sameLayerDetIds_.size(); hSummary_LowX = 0.5; @@ -863,9 +781,9 @@ void SiStripBaseCondObjDQM::bookSummaryMEs(SiStripBaseCondObjDQM::ModMEs &CondOb uint32_t layer_ = 0; - layer_ = folder_organizer.GetSubDetAndLayer(detId_, tTopo).second; + layer_ = folder_organizer.GetSubDetAndLayer(detId_, tTopo_).second; - folder_organizer.setLayerFolder(detId_, tTopo, layer_); + folder_organizer.setLayerFolder(detId_, tTopo_, layer_); std::string hSummary_name; @@ -880,8 +798,7 @@ void SiStripBaseCondObjDQM::bookSummaryMEs(SiStripBaseCondObjDQM::ModMEs &CondOb } // --- - hSummary_name = - hidmanager.createHistoLayer(hSummary_description, "layer", getLayerNameAndId(detId_, tTopo).first, ""); + hSummary_name = hidmanager.createHistoLayer(hSummary_description, "layer", getLayerNameAndId(detId_).first, ""); std::string hSummary_title; hSummary_title = hSummary_name; @@ -905,13 +822,9 @@ void SiStripBaseCondObjDQM::bookSummaryMEs(SiStripBaseCondObjDQM::ModMEs &CondOb if (iBin % 100 == 0) CondObj_ME.SummaryDistr->setBinLabel(iBin, sameLayerDetIds_Name); } - // ----- } -//========================================================== -// ----- -std::pair SiStripBaseCondObjDQM::getLayerNameAndId(const uint32_t &detId_, - const TrackerTopology *tTopo) { +std::pair SiStripBaseCondObjDQM::getLayerNameAndId(const uint32_t &detId_) { int subdetectorId_ = ((detId_ >> 25) & 0x7); int layerId_ = 0; @@ -920,7 +833,7 @@ std::pair SiStripBaseCondObjDQM::getLayerNameAndId(const if (subdetectorId_ == 3) { // TIB for (unsigned int i = 1; i < 5; i++) { - if (tTopo->tibLayer(detId_) == i) { + if (tTopo_->tibLayer(detId_) == i) { layerName << "TIB__layer__" << i; layerId_ = 300 + i; } @@ -930,10 +843,10 @@ std::pair SiStripBaseCondObjDQM::getLayerNameAndId(const else if (subdetectorId_ == 4) { // TIDD - if (tTopo->tidSide(detId_) == 1) { // TIDD side 1 + if (tTopo_->tidSide(detId_) == 1) { // TIDD side 1 for (unsigned int i = 1; i < 4; i++) { - if (tTopo->tidWheel(detId_) == i) { + if (tTopo_->tidWheel(detId_) == i) { layerName << "TID__side__1__wheel__" << i; layerId_ = 410 + i; } @@ -941,10 +854,10 @@ std::pair SiStripBaseCondObjDQM::getLayerNameAndId(const } - else if (tTopo->tidSide(detId_) == 2) { // TIDD side 2 + else if (tTopo_->tidSide(detId_) == 2) { // TIDD side 2 for (unsigned int i = 1; i < 4; i++) { - if (tTopo->tidWheel(detId_) == i) { + if (tTopo_->tidWheel(detId_) == i) { layerName << "TID__side__2__wheel__" << i; layerId_ = 420 + i; } @@ -956,7 +869,7 @@ std::pair SiStripBaseCondObjDQM::getLayerNameAndId(const else if (subdetectorId_ == 5) { // TOB for (unsigned int i = 1; i < 7; i++) { - if (tTopo->tobLayer(detId_) == i) { + if (tTopo_->tobLayer(detId_) == i) { layerName << "TOB__layer__" << i; layerId_ = 500 + i; } @@ -966,10 +879,10 @@ std::pair SiStripBaseCondObjDQM::getLayerNameAndId(const else if (subdetectorId_ == 6) { // TEC - if (tTopo->tecSide(detId_) == 1) { // TEC side 1 + if (tTopo_->tecSide(detId_) == 1) { // TEC side 1 for (unsigned int i = 1; i < 10; i++) { - if (tTopo->tecWheel(detId_) == i) { + if (tTopo_->tecWheel(detId_) == i) { layerName << "TEC__side__1__wheel__" << i; layerId_ = 610 + i; } @@ -977,10 +890,10 @@ std::pair SiStripBaseCondObjDQM::getLayerNameAndId(const } - else if (tTopo->tecSide(detId_) == 2) { // TEC side 2 + else if (tTopo_->tecSide(detId_) == 2) { // TEC side 2 for (unsigned int i = 1; i < 10; i++) { - if (tTopo->tecWheel(detId_) == i) { + if (tTopo_->tecWheel(detId_) == i) { layerName << "TEC__side__2__wheel__" << i; layerId_ = 620 + i; } @@ -991,69 +904,65 @@ std::pair SiStripBaseCondObjDQM::getLayerNameAndId(const return std::make_pair(layerName.str(), layerId_); } -//================================================= -//--------------- - -std::pair SiStripBaseCondObjDQM::getStringNameAndId(const uint32_t &detId_, - const TrackerTopology *tTopo) { +std::pair SiStripBaseCondObjDQM::getStringNameAndId(const uint32_t &detId_) { int subdetectorId_ = ((detId_ >> 25) & 0x7); int layerStringId_ = 0; std::stringstream layerStringName; - if (subdetectorId_ == 3) { // TIB - if (tTopo->tibLayer(detId_) == 1 && tTopo->tibIsInternalString(detId_)) { // 1st layer int + if (subdetectorId_ == 3) { // TIB + if (tTopo_->tibLayer(detId_) == 1 && tTopo_->tibIsInternalString(detId_)) { // 1st layer int for (unsigned int i = 1; i < 27; i++) { - if (tTopo->tibString(detId_) == i) { + if (tTopo_->tibString(detId_) == i) { layerStringName << "TIB_L1_Int_Str_" << i; layerStringId_ = 30110 + i; } } - } else if (tTopo->tibLayer(detId_) == 1 && tTopo->tibIsExternalString(detId_)) { // 1st layer ext + } else if (tTopo_->tibLayer(detId_) == 1 && tTopo_->tibIsExternalString(detId_)) { // 1st layer ext for (unsigned int i = 1; i < 31; i++) { - if (tTopo->tibString(detId_) == i) { + if (tTopo_->tibString(detId_) == i) { layerStringName << "TIB_L1_Ext_Str_" << i; layerStringId_ = 301200 + i; } } - } else if (tTopo->tibLayer(detId_) == 2 && tTopo->tibIsInternalString(detId_)) { // 2nd layer int + } else if (tTopo_->tibLayer(detId_) == 2 && tTopo_->tibIsInternalString(detId_)) { // 2nd layer int for (unsigned int i = 1; i < 35; i++) { - if (tTopo->tibString(detId_) == i) { + if (tTopo_->tibString(detId_) == i) { layerStringName << "TIB_L2_Int_Str_" << i; layerStringId_ = 302100 + i; } } - } else if (tTopo->tibLayer(detId_) == 2 && tTopo->tibIsExternalString(detId_)) { // 2nd layer ext + } else if (tTopo_->tibLayer(detId_) == 2 && tTopo_->tibIsExternalString(detId_)) { // 2nd layer ext for (unsigned int i = 1; i < 39; i++) { - if (tTopo->tibString(detId_) == i) { + if (tTopo_->tibString(detId_) == i) { layerStringName << "TIB_L2_Ext_Str_" << i; layerStringId_ = 302200 + i; } } - } else if (tTopo->tibLayer(detId_) == 3 && tTopo->tibIsInternalString(detId_)) { // 3rd layer int + } else if (tTopo_->tibLayer(detId_) == 3 && tTopo_->tibIsInternalString(detId_)) { // 3rd layer int for (unsigned int i = 1; i < 45; i++) { - if (tTopo->tibString(detId_) == i) { + if (tTopo_->tibString(detId_) == i) { layerStringName << "TIB_L3_Int_Str_" << i; layerStringId_ = 303100 + i; } } - } else if (tTopo->tibLayer(detId_) == 3 && tTopo->tibIsExternalString(detId_)) { // 3rd layer ext + } else if (tTopo_->tibLayer(detId_) == 3 && tTopo_->tibIsExternalString(detId_)) { // 3rd layer ext for (unsigned int i = 1; i < 47; i++) { - if (tTopo->tibString(detId_) == i) { + if (tTopo_->tibString(detId_) == i) { layerStringName << "TIB_L3_Ext_Str_" << i; layerStringId_ = 303200 + i; } } - } else if (tTopo->tibLayer(detId_) == 4 && tTopo->tibIsInternalString(detId_)) { // 4th layer int + } else if (tTopo_->tibLayer(detId_) == 4 && tTopo_->tibIsInternalString(detId_)) { // 4th layer int for (unsigned int i = 1; i < 53; i++) { - if (tTopo->tibString(detId_) == i) { + if (tTopo_->tibString(detId_) == i) { layerStringName << "TIB_L4_Int_Str_" << i; layerStringId_ = 304100 + i; } } - } else if (tTopo->tibLayer(detId_) == 4 && tTopo->tibIsExternalString(detId_)) { // 4th layer ext + } else if (tTopo_->tibLayer(detId_) == 4 && tTopo_->tibIsExternalString(detId_)) { // 4th layer ext for (unsigned int i = 1; i < 57; i++) { - if (tTopo->tibString(detId_) == i) { + if (tTopo_->tibString(detId_) == i) { layerStringName << "TIB_L4_Ext_Str_" << i; layerStringId_ = 304200 + i; } @@ -1061,45 +970,45 @@ std::pair SiStripBaseCondObjDQM::getStringNameAndId(const } } // TIB - else if (subdetectorId_ == 5) { // TOB - if (tTopo->tobLayer(detId_) == 1) { // 1st layer + else if (subdetectorId_ == 5) { // TOB + if (tTopo_->tobLayer(detId_) == 1) { // 1st layer for (unsigned int i = 1; i < 43; i++) { - if (tTopo->tobRod(detId_) == i) { + if (tTopo_->tobRod(detId_) == i) { layerStringName << "TOB_L1_Rod_" << i; layerStringId_ = 50100 + i; } } - } else if (tTopo->tobLayer(detId_) == 2) { // 2nd layer + } else if (tTopo_->tobLayer(detId_) == 2) { // 2nd layer for (unsigned int i = 1; i < 49; i++) { - if (tTopo->tobRod(detId_) == i) { + if (tTopo_->tobRod(detId_) == i) { layerStringName << "TOB_L2_Rod_" << i; layerStringId_ = 50200 + i; } } - } else if (tTopo->tobLayer(detId_) == 3) { // 3rd layer + } else if (tTopo_->tobLayer(detId_) == 3) { // 3rd layer for (unsigned int i = 1; i < 55; i++) { - if (tTopo->tobRod(detId_) == i) { + if (tTopo_->tobRod(detId_) == i) { layerStringName << "TOB_L3_Rod_" << i; layerStringId_ = 50300 + i; } } - } else if (tTopo->tobLayer(detId_) == 4) { // 4th layer + } else if (tTopo_->tobLayer(detId_) == 4) { // 4th layer for (unsigned int i = 1; i < 61; i++) { - if (tTopo->tobRod(detId_) == i) { + if (tTopo_->tobRod(detId_) == i) { layerStringName << "TOB_L4_Rod_" << i; layerStringId_ = 50400 + i; } } - } else if (tTopo->tobLayer(detId_) == 5) { // 5th layer + } else if (tTopo_->tobLayer(detId_) == 5) { // 5th layer for (unsigned int i = 1; i < 67; i++) { - if (tTopo->tobRod(detId_) == i) { + if (tTopo_->tobRod(detId_) == i) { layerStringName << "TOB_L5_Rod_" << i; layerStringId_ = 50500 + i; } } - } else if (tTopo->tobLayer(detId_) == 6) { // 6st layer + } else if (tTopo_->tobLayer(detId_) == 6) { // 6st layer for (unsigned int i = 1; i < 75; i++) { - if (tTopo->tobRod(detId_) == i) { + if (tTopo_->tobRod(detId_) == i) { layerStringName << "TOB_L6_Rod_" << i; layerStringId_ = 50600 + i; } @@ -1110,40 +1019,35 @@ std::pair SiStripBaseCondObjDQM::getStringNameAndId(const return std::make_pair(layerStringName.str(), layerStringId_); } -//======================== std::vector SiStripBaseCondObjDQM::GetSameLayerDetId(const std::vector &activeDetIds, - uint32_t selDetId, - const TrackerTopology *tTopo) { + uint32_t selDetId) { std::vector sameLayerDetIds; sameLayerDetIds.clear(); switch (DetId(selDetId).subdetId()) { case StripSubdetector::TIB: - SiStripSubStructure::getTIBDetectors(activeDetIds, sameLayerDetIds, tTopo, tTopo->tibLayer(selDetId), 0, 0, 0); + SiStripSubStructure::getTIBDetectors(activeDetIds, sameLayerDetIds, tTopo_, tTopo_->tibLayer(selDetId), 0, 0, 0); break; case StripSubdetector::TID: SiStripSubStructure::getTIDDetectors( - activeDetIds, sameLayerDetIds, tTopo, tTopo->tidSide(selDetId), tTopo->tidWheel(selDetId), 0, 0); + activeDetIds, sameLayerDetIds, tTopo_, tTopo_->tidSide(selDetId), tTopo_->tidWheel(selDetId), 0, 0); break; case StripSubdetector::TOB: - SiStripSubStructure::getTOBDetectors(activeDetIds, sameLayerDetIds, tTopo, tTopo->tobLayer(selDetId), 0, 0); + SiStripSubStructure::getTOBDetectors(activeDetIds, sameLayerDetIds, tTopo_, tTopo_->tobLayer(selDetId), 0, 0); break; case StripSubdetector::TEC: SiStripSubStructure::getTECDetectors( - activeDetIds, sameLayerDetIds, tTopo, tTopo->tecSide(selDetId), tTopo->tecWheel(selDetId), 0, 0, 0, 0); + activeDetIds, sameLayerDetIds, tTopo_, tTopo_->tecSide(selDetId), tTopo_->tecWheel(selDetId), 0, 0, 0, 0); break; } return sameLayerDetIds; } -//========================== void SiStripBaseCondObjDQM::bookTkMap(const std::string &TkMapname) { tkMap = new TrackerMap(TkMapname); } -//========================== void SiStripBaseCondObjDQM::fillTkMap(const uint32_t &detid, const float &value) { tkMap->fill(detid, value); } -//========================== void SiStripBaseCondObjDQM::saveTkMap(const std::string &TkMapname, double minValue, double maxValue) { if (!tkMapScaler.empty()) { // check that saturation is below x% below minValue and above minValue, and @@ -1189,41 +1093,26 @@ void SiStripBaseCondObjDQM::saveTkMap(const std::string &TkMapname, double minVa tkMap->showPalette(true); } -//========================== void SiStripBaseCondObjDQM::end() { edm::LogInfo("SiStripBaseCondObjDQM") << "SiStripBaseCondObjDQM::end" << std::endl; } -//========================== -void SiStripBaseCondObjDQM::fillModMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); - +void SiStripBaseCondObjDQM::fillModMEs(const std::vector &selectedDetIds) { ModMEs CondObj_ME; - - for (std::vector::const_iterator detIter_ = selectedDetIds.begin(); detIter_ != selectedDetIds.end(); - ++detIter_) { - fillMEsForDet(CondObj_ME, *detIter_, tTopo); + for (const auto det : selectedDetIds) { + fillMEsForDet(CondObj_ME, det); } } //========================== -void SiStripBaseCondObjDQM::fillSummaryMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); - - for (std::vector::const_iterator detIter_ = selectedDetIds.begin(); detIter_ != selectedDetIds.end(); - detIter_++) { - fillMEsForLayer(/*SummaryMEsMap_,*/ *detIter_, tTopo); +void SiStripBaseCondObjDQM::fillSummaryMEs(const std::vector &selectedDetIds) { + for (const auto det : selectedDetIds) { + fillMEsForLayer(/*SummaryMEsMap_,*/ det); } - for (std::map::iterator iter = SummaryMEsMap_.begin(); iter != SummaryMEsMap_.end(); iter++) { + for (const auto &itm : SummaryMEsMap_) { ModMEs selME; - selME = iter->second; + selME = itm.second; if (hPSet_.getParameter("FillSummaryProfileAtLayerLevel") && fPSet_.getParameter("OutputSummaryProfileAtLayerLevelAsImage")) { diff --git a/DQM/SiStripMonitorSummary/src/SiStripCablingDQM.cc b/DQM/SiStripMonitorSummary/src/SiStripCablingDQM.cc index 5fc7c83f59af8..85dbeb23c9cc8 100644 --- a/DQM/SiStripMonitorSummary/src/SiStripCablingDQM.cc +++ b/DQM/SiStripMonitorSummary/src/SiStripCablingDQM.cc @@ -1,44 +1,31 @@ #include "DQM/SiStripMonitorSummary/interface/SiStripCablingDQM.h" #include "DQMServices/Core/interface/DQMStore.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "DataFormats/SiStripDetId/interface/StripSubdetector.h" #include "TCanvas.h" -using namespace std; -// ----- -SiStripCablingDQM::SiStripCablingDQM(const edm::EventSetup &eSetup, +SiStripCablingDQM::SiStripCablingDQM(edm::ESGetToken token, edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet) - : SiStripBaseCondObjDQM(eSetup, iRun, hPSet, fPSet) { - // Build the Histo_TkMap: + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo, + const TkDetMap *tkDetMap) + : SiStripBaseCondObjDQMGet{token, iRun, hPSet, fPSet, tTopo} { if (HistoMaps_On_) { - edm::ESHandle tkDetMapHandle; - eSetup.get().get(tkDetMapHandle); - Tk_HM_ = std::make_unique(tkDetMapHandle.product(), "SiStrip/Histo_Map", "Cabling_TkMap", 0.); + Tk_HM_ = std::make_unique(tkDetMap, "SiStrip/Histo_Map", "Cabling_TkMap", 0.); } } -// ----- -// ----- SiStripCablingDQM::~SiStripCablingDQM() {} -// ----- -// ----- void SiStripCablingDQM::getActiveDetIds(const edm::EventSetup &eSetup) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - eSetup.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); - // Get active and total detIds getConditionObject(eSetup); - if (!cablingHandle_.isValid()) { + if (!condObj_) { edm::LogError("InvalidCablingHandle") << "Invalid Cabling Handle"; return; } - cablingHandle_->addActiveDetectorsRawIds(activeDetIds); - cablingHandle_->addAllDetectorsRawIds(activeDetIds); + condObj_->addActiveDetectorsRawIds(activeDetIds); + condObj_->addAllDetectorsRawIds(activeDetIds); // Initialize arrays for counting: int counterTIB[4]; @@ -58,34 +45,31 @@ void SiStripCablingDQM::getActiveDetIds(const edm::EventSetup &eSetup) { counterTEC[i][j] = 0; } - std::vector::const_iterator idet = activeDetIds.begin(); - // fill arrays for counting and fill Histo_Map with value for connected : - for (; idet != activeDetIds.end(); ++idet) { - uint32_t detId = *idet; + for (const auto detId : activeDetIds) { StripSubdetector subdet(detId); if (HistoMaps_On_) { - Tk_HM_->fill(detId, cablingHandle_->nApvPairs(detId) * 2); + Tk_HM_->fill(detId, condObj_->nApvPairs(detId) * 2); } if (fPSet_.getParameter("TkMap_On") || hPSet_.getParameter("TkMap_On")) { int32_t n_conn = 0; - for (uint32_t connDet_i = 0; connDet_i < cablingHandle_->getConnections(detId).size(); connDet_i++) { - if (cablingHandle_->getConnections(detId)[connDet_i] != nullptr && - cablingHandle_->getConnections(detId)[connDet_i]->isConnected() != 0) + for (uint32_t connDet_i = 0; connDet_i < condObj_->getConnections(detId).size(); connDet_i++) { + if (condObj_->getConnections(detId)[connDet_i] != nullptr && + condObj_->getConnections(detId)[connDet_i]->isConnected() != 0) n_conn++; } fillTkMap(detId, n_conn * 2.); } switch (subdet.subdetId()) { case StripSubdetector::TIB: { - int i = tTopo->tibLayer(detId) - 1; + int i = tTopo_->tibLayer(detId) - 1; counterTIB[i]++; break; } case StripSubdetector::TID: { - int j = tTopo->tidWheel(detId) - 1; - int side = tTopo->tidSide(detId); + int j = tTopo_->tidWheel(detId) - 1; + int side = tTopo_->tidSide(detId); if (side == 2) { counterTID[0][j]++; } else if (side == 1) { @@ -94,13 +78,13 @@ void SiStripCablingDQM::getActiveDetIds(const edm::EventSetup &eSetup) { break; } case StripSubdetector::TOB: { - int i = tTopo->tobLayer(detId) - 1; + int i = tTopo_->tobLayer(detId) - 1; counterTOB[i]++; break; } case StripSubdetector::TEC: { - int j = tTopo->tecWheel(detId) - 1; - int side = tTopo->tecSide(detId); + int j = tTopo_->tecWheel(detId) - 1; + int side = tTopo_->tecSide(detId); if (side == 2) { counterTEC[0][j]++; } else if (side == 1) { diff --git a/DQM/SiStripMonitorSummary/src/SiStripClassToMonitorCondData.cc b/DQM/SiStripMonitorSummary/src/SiStripClassToMonitorCondData.cc index ab93af84fde54..9e050f2adae5e 100644 --- a/DQM/SiStripMonitorSummary/src/SiStripClassToMonitorCondData.cc +++ b/DQM/SiStripMonitorSummary/src/SiStripClassToMonitorCondData.cc @@ -44,21 +44,13 @@ #include "CalibFormats/SiStripObjects/interface/SiStripQuality.h" #include "CalibTracker/Records/interface/SiStripQualityRcd.h" -#include "TH1F.h" -#include "TH2F.h" -#include "TProfile.h" - // std #include -#include -//#include -//#include #include -// -// ----- Constructor -// -SiStripClassToMonitorCondData::SiStripClassToMonitorCondData(edm::ParameterSet const &iConfig) : conf_(iConfig) { +SiStripClassToMonitorCondData::SiStripClassToMonitorCondData(edm::ParameterSet const& iConfig, + edm::ConsumesCollector iC) + : conf_(iConfig) { monitorPedestals_ = iConfig.getParameter("MonitorSiStripPedestal"); monitorNoises_ = iConfig.getParameter("MonitorSiStripNoise"); monitorQuality_ = iConfig.getParameter("MonitorSiStripQuality"); @@ -68,99 +60,106 @@ SiStripClassToMonitorCondData::SiStripClassToMonitorCondData(edm::ParameterSet c monitorLowThreshold_ = iConfig.getParameter("MonitorSiStripLowThreshold"); monitorHighThreshold_ = iConfig.getParameter("MonitorSiStripHighThreshold"); monitorCabling_ = iConfig.getParameter("MonitorSiStripCabling"); + tkDetMapToken_ = iC.esConsumes(); + tTopoToken_ = iC.esConsumes(); + if (monitorPedestals_) { + pedestalsToken_ = iC.esConsumes(); + } + if (monitorNoises_) { + noiseToken_ = iC.esConsumes(); + const auto& hPSet = iConfig.getParameter("SiStripNoisesDQM_PSet"); + if (hPSet.getParameter("SimGainRenormalisation")) { + simGainToken_ = iC.esConsumes(); + } else if (hPSet.getParameter("GainRenormalisation")) { + gainTokenForNoise_ = iC.esConsumes(); + } + } + if (monitorQuality_) { + const auto& fPSet = conf_.getParameter("FillConditions_PSet"); + const auto& qualityLabel = fPSet.getParameter("StripQualityLabel"); + qualityToken_ = iC.esConsumes(edm::ESInputTag{"", qualityLabel}); + } + if (monitorApvGains_) { + gainToken_ = iC.esConsumes(); + } + if (monitorLorentzAngle_) { + lorentzAngleToken_ = iC.esConsumes(); + } + if (monitorBackPlaneCorrection_) { + backplaneCorrectionToken_ = iC.esConsumes(); + } + if (monitorLowThreshold_ || monitorHighThreshold_) { + thresholdToken_ = iC.esConsumes(); + } + if (monitorCabling_) { + detCablingToken_ = iC.esConsumes(); + } } -// ----- -// -// ----- Destructor -// SiStripClassToMonitorCondData::~SiStripClassToMonitorCondData() {} -// ----- -// -// ----- beginRun -// -void SiStripClassToMonitorCondData::beginRun(edm::RunNumber_t iRun, edm::EventSetup const &eSetup) { +void SiStripClassToMonitorCondData::beginRun(edm::RunNumber_t iRun, edm::EventSetup const& eSetup) { + const auto tTopo = &eSetup.getData(tTopoToken_); + const auto& fPSet = conf_.getParameter("FillConditions_PSet"); + const TkDetMap* tkDetMap{nullptr}; + if (fPSet.getParameter("HistoMaps_On")) { + tkDetMap = &eSetup.getData(tkDetMapToken_); + } if (monitorPedestals_) { - pedestalsDQM_ = - std::make_unique(eSetup, - iRun, - conf_.getParameter("SiStripPedestalsDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); + const auto& hPSet = conf_.getParameter("SiStripPedestalsDQM_PSet"); + pedestalsDQM_ = std::make_unique(pedestalsToken_, iRun, hPSet, fPSet, tTopo, tkDetMap); } if (monitorNoises_) { - noisesDQM_ = std::make_unique(eSetup, - iRun, - conf_.getParameter("SiStripNoisesDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); + const auto& hPSet = conf_.getParameter("SiStripNoisesDQM_PSet"); + const SiStripApvGain* gain = nullptr; + if (hPSet.getParameter("SimGainRenormalisation")) { + gain = &eSetup.getData(simGainToken_); + } else if (hPSet.getParameter("GainRenormalisation")) { + gain = &eSetup.getData(gainTokenForNoise_); + } + noisesDQM_ = std::make_unique(noiseToken_, iRun, hPSet, fPSet, tTopo, tkDetMap, gain); } if (monitorQuality_) { - qualityDQM_ = std::make_unique(eSetup, - iRun, - conf_.getParameter("SiStripQualityDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); + const auto& hPSet = conf_.getParameter("SiStripQualityDQM_PSet"); + qualityDQM_ = std::make_unique(qualityToken_, iRun, hPSet, fPSet, tTopo, tkDetMap); } if (monitorApvGains_) { - apvgainsDQM_ = - std::make_unique(eSetup, - iRun, - conf_.getParameter("SiStripApvGainsDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); + const auto& hPSet = conf_.getParameter("SiStripApvGainsDQM_PSet"); + apvgainsDQM_ = std::make_unique(gainToken_, iRun, hPSet, fPSet, tTopo, tkDetMap); } if (monitorLorentzAngle_) { + const auto& hPSet = conf_.getParameter("SiStripLorentzAngleDQM_PSet"); lorentzangleDQM_ = - std::make_unique(eSetup, - iRun, - conf_.getParameter("SiStripLorentzAngleDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); + std::make_unique(lorentzAngleToken_, iRun, hPSet, fPSet, tTopo, tkDetMap); } if (monitorBackPlaneCorrection_) { - bpcorrectionDQM_ = std::make_unique( - eSetup, - iRun, - conf_.getParameter("SiStripBackPlaneCorrectionDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); + const auto& hPSet = conf_.getParameter("SiStripBackPlaneCorrectionDQM_PSet"); + bpcorrectionDQM_ = + std::make_unique(backplaneCorrectionToken_, iRun, hPSet, fPSet, tTopo, tkDetMap); } if (monitorLowThreshold_) { - lowthresholdDQM_ = - std::make_unique(eSetup, - iRun, - conf_.getParameter("SiStripLowThresholdDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); + const auto& hPSet = conf_.getParameter("SiStripLowThresholdDQM_PSet"); + lowthresholdDQM_ = std::make_unique(thresholdToken_, iRun, hPSet, fPSet, tTopo, tkDetMap); } if (monitorHighThreshold_) { - highthresholdDQM_ = - std::make_unique(eSetup, - iRun, - conf_.getParameter("SiStripHighThresholdDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); + const auto& hPSet = conf_.getParameter("SiStripHighThresholdDQM_PSet"); + highthresholdDQM_ = std::make_unique(thresholdToken_, iRun, hPSet, fPSet, tTopo, tkDetMap); } if (monitorCabling_) { - cablingDQM_ = std::make_unique(eSetup, - iRun, - conf_.getParameter("SiStripCablingDQM_PSet"), - conf_.getParameter("FillConditions_PSet")); + const auto& hPSet = conf_.getParameter("SiStripCablingDQM_PSet"); + cablingDQM_ = std::make_unique(detCablingToken_, iRun, hPSet, fPSet, tTopo, tkDetMap); } -} // beginRun -// ----- - -// -// ----- beginJob -// -void SiStripClassToMonitorCondData::beginJob(void) {} // beginJob +} -// -// ----- getModuleMEsOnDemand -// -void SiStripClassToMonitorCondData::getModMEsOnDemand(edm::EventSetup const &eSetup, uint32_t requestedDetId) { +void SiStripClassToMonitorCondData::getModMEsOnDemand(edm::EventSetup const& eSetup, uint32_t requestedDetId) { if (monitorPedestals_) { pedestalsDQM_->analysisOnDemand(eSetup, requestedDetId); } @@ -169,7 +168,7 @@ void SiStripClassToMonitorCondData::getModMEsOnDemand(edm::EventSetup const &eSe } if (monitorQuality_) { qualityDQM_->analysisOnDemand(eSetup, requestedDetId); - qualityDQM_->fillGrandSummaryMEs(eSetup); + qualityDQM_->fillGrandSummaryMEs(); } // fillGrand. for SiStripquality if (monitorApvGains_) { apvgainsDQM_->analysisOnDemand(eSetup, requestedDetId); @@ -195,7 +194,7 @@ void SiStripClassToMonitorCondData::getModMEsOnDemand(edm::EventSetup const &eSe // // ----- getlayerMEsOnDemand // -void SiStripClassToMonitorCondData::getLayerMEsOnDemand(edm::EventSetup const &eSetup, +void SiStripClassToMonitorCondData::getLayerMEsOnDemand(edm::EventSetup const& eSetup, std::string requestedSubDetector, uint32_t requestedSide, uint32_t requestedLayer) { @@ -207,7 +206,7 @@ void SiStripClassToMonitorCondData::getLayerMEsOnDemand(edm::EventSetup const &e } if (monitorQuality_) { qualityDQM_->analysisOnDemand(eSetup, requestedSubDetector, requestedSide, requestedLayer); - qualityDQM_->fillGrandSummaryMEs(eSetup); + qualityDQM_->fillGrandSummaryMEs(); } if (monitorApvGains_) { apvgainsDQM_->analysisOnDemand(eSetup, requestedSubDetector, requestedSide, requestedLayer); @@ -232,7 +231,7 @@ void SiStripClassToMonitorCondData::getLayerMEsOnDemand(edm::EventSetup const &e // // ----- Analyze // -void SiStripClassToMonitorCondData::analyseCondData(edm::EventSetup const &eSetup) { +void SiStripClassToMonitorCondData::analyseCondData(edm::EventSetup const& eSetup) { if (monitorPedestals_) { pedestalsDQM_->analysis(eSetup); } @@ -241,7 +240,7 @@ void SiStripClassToMonitorCondData::analyseCondData(edm::EventSetup const &eSetu } if (monitorQuality_) { qualityDQM_->analysis(eSetup); - qualityDQM_->fillGrandSummaryMEs(eSetup); + qualityDQM_->fillGrandSummaryMEs(); } // fillGrand. for SiStripquality if (monitorApvGains_) { apvgainsDQM_->analysis(eSetup); @@ -265,23 +264,43 @@ void SiStripClassToMonitorCondData::analyseCondData(edm::EventSetup const &eSetu } // analyze // ----- -// -// ----- endRun -// -void SiStripClassToMonitorCondData::endRun(edm::EventSetup const &eSetup) { +void SiStripClassToMonitorCondData::end() { + if (monitorPedestals_) { + pedestalsDQM_->end(); + } + if (monitorNoises_) { + noisesDQM_->end(); + } + if (monitorLowThreshold_) { + lowthresholdDQM_->end(); + } + if (monitorHighThreshold_) { + highthresholdDQM_->end(); + } + if (monitorApvGains_) { + apvgainsDQM_->end(); + } + if (monitorLorentzAngle_) { + lorentzangleDQM_->end(); + } + if (monitorBackPlaneCorrection_) { + bpcorrectionDQM_->end(); + } + if (monitorQuality_) { + qualityDQM_->end(); + } + if (monitorCabling_) { + cablingDQM_->end(); + } +} + +void SiStripClassToMonitorCondData::save() { bool outputMEsInRootFile = conf_.getParameter("OutputMEsInRootFile"); std::string outputFileName = conf_.getParameter("OutputFileName"); - DQMStore *dqmStore_ = edm::Service().operator->(); + DQMStore* dqmStore_ = edm::Service().operator->(); if (outputMEsInRootFile) { dqmStore_->save(outputFileName); } - -} // endRun -// ----- - -// -// ----- endJob -// -void SiStripClassToMonitorCondData::endJob(void) {} // endJob +} diff --git a/DQM/SiStripMonitorSummary/src/SiStripLorentzAngleDQM.cc b/DQM/SiStripMonitorSummary/src/SiStripLorentzAngleDQM.cc index 509998cc3e2ad..95a7ddf91049b 100644 --- a/DQM/SiStripMonitorSummary/src/SiStripLorentzAngleDQM.cc +++ b/DQM/SiStripMonitorSummary/src/SiStripLorentzAngleDQM.cc @@ -1,49 +1,34 @@ #include "DQM/SiStripMonitorSummary/interface/SiStripLorentzAngleDQM.h" -#include "DQMServices/Core/interface/DQMStore.h" #include "DataFormats/SiStripDetId/interface/StripSubdetector.h" #include "DataFormats/TrackerCommon/interface/SiStripSubStructure.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "TCanvas.h" -// ----- -SiStripLorentzAngleDQM::SiStripLorentzAngleDQM(const edm::EventSetup &eSetup, +SiStripLorentzAngleDQM::SiStripLorentzAngleDQM(edm::ESGetToken token, edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet) - : SiStripBaseCondObjDQM(eSetup, iRun, hPSet, fPSet) { - // Build the Histo_TkMap: + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo, + const TkDetMap *tkDetMap) + : SiStripBaseCondObjDQMGet{token, iRun, hPSet, fPSet, tTopo} { if (HistoMaps_On_) { - edm::ESHandle tkDetMapHandle; - eSetup.get().get(tkDetMapHandle); - Tk_HM_ = std::make_unique(tkDetMapHandle.product(), "SiStrip/Histo_Map", "LA_TkMap", 0.); + Tk_HM_ = std::make_unique(tkDetMap, "SiStrip/Histo_Map", "LA_TkMap", 0.); } } -// ----- -// ----- SiStripLorentzAngleDQM::~SiStripLorentzAngleDQM() {} -// ----- -// ----- void SiStripLorentzAngleDQM::getActiveDetIds(const edm::EventSetup &eSetup) { getConditionObject(eSetup); std::map::const_iterator LAMapIter_; - std::map LAMap_ = lorentzangleHandle_->getLorentzAngles(); + std::map LAMap_ = condObj_->getLorentzAngles(); for (LAMapIter_ = LAMap_.begin(); LAMapIter_ != LAMap_.end(); LAMapIter_++) { activeDetIds.push_back((*LAMapIter_).first); } } -// ----- - -// ----- -void SiStripLorentzAngleDQM::fillSummaryMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); +void SiStripLorentzAngleDQM::fillSummaryMEs(const std::vector &selectedDetIds) { // ----- // LA on layer-level : fill at once all detIds belonging to same layer when // encountering first detID in the layer @@ -58,18 +43,18 @@ void SiStripLorentzAngleDQM::fillSummaryMEs(const std::vector &selecte << subDetId_ << " and detId " << selectedDetIds[i] << " therefore no filling!" << std::endl; } else if (SummaryOnLayerLevel_On_) { if (fillNext) { - fillMEsForLayer(/*SummaryMEsMap_,*/ selectedDetIds[i], tTopo); + fillMEsForLayer(/*SummaryMEsMap_,*/ selectedDetIds[i]); } - if (getLayerNameAndId(selectedDetIds[i + 1], tTopo) == getLayerNameAndId(selectedDetIds[i], tTopo)) { + if (getLayerNameAndId(selectedDetIds[i + 1]) == getLayerNameAndId(selectedDetIds[i])) { fillNext = false; } else { fillNext = true; } } else if (SummaryOnStringLevel_On_) { if (fillNext) { - fillMEsForLayer(/*SummaryMEsMap_,*/ selectedDetIds[i], tTopo); + fillMEsForLayer(/*SummaryMEsMap_,*/ selectedDetIds[i]); } - if (getStringNameAndId(selectedDetIds[i + 1], tTopo) == getStringNameAndId(selectedDetIds[i], tTopo)) { + if (getStringNameAndId(selectedDetIds[i + 1]) == getStringNameAndId(selectedDetIds[i])) { fillNext = false; } else { fillNext = true; @@ -119,11 +104,9 @@ void SiStripLorentzAngleDQM::fillSummaryMEs(const std::vector &selecte } } } -// ----- -// ----- void SiStripLorentzAngleDQM::fillMEsForLayer( - /*std::map selMEsMap_,*/ uint32_t selDetId_, const TrackerTopology *tTopo) { + /*std::map selMEsMap_,*/ uint32_t selDetId_) { SiStripHistoId hidmanager; std::string hSummaryOfProfile_description; @@ -145,57 +128,55 @@ void SiStripLorentzAngleDQM::fillMEsForLayer( if (SummaryOnStringLevel_On_) { // FILLING FOR STRING LEVEL - hSummary_name = hidmanager.createHistoLayer( - hSummaryOfProfile_description, "layer", getStringNameAndId(selDetId_, tTopo).first, ""); - std::map::iterator selMEsMapIter_ = - SummaryMEsMap_.find(getStringNameAndId(selDetId_, tTopo).second); + hSummary_name = + hidmanager.createHistoLayer(hSummaryOfProfile_description, "layer", getStringNameAndId(selDetId_).first, ""); + std::map::iterator selMEsMapIter_ = SummaryMEsMap_.find(getStringNameAndId(selDetId_).second); ModMEs selME_; if (selMEsMapIter_ != SummaryMEsMap_.end()) selME_ = selMEsMapIter_->second; - getSummaryMEs(selME_, selDetId_, tTopo); + getSummaryMEs(selME_, selDetId_); // ----- sameLayerDetIds_.clear(); switch (DetId(selDetId_).subdetId()) { case StripSubdetector::TIB: - if (tTopo->tibIsInternalString(selDetId_)) { + if (tTopo_->tibIsInternalString(selDetId_)) { SiStripSubStructure::getTIBDetectors( - activeDetIds, sameLayerDetIds_, tTopo, tTopo->tibLayer(selDetId_), 0, 1, tTopo->tibString(selDetId_)); + activeDetIds, sameLayerDetIds_, tTopo_, tTopo_->tibLayer(selDetId_), 0, 1, tTopo_->tibString(selDetId_)); } - if (tTopo->tibIsExternalString(selDetId_)) { + if (tTopo_->tibIsExternalString(selDetId_)) { SiStripSubStructure::getTIBDetectors( - activeDetIds, sameLayerDetIds_, tTopo, tTopo->tibLayer(selDetId_), 0, 2, tTopo->tibString(selDetId_)); + activeDetIds, sameLayerDetIds_, tTopo_, tTopo_->tibLayer(selDetId_), 0, 2, tTopo_->tibString(selDetId_)); } break; case StripSubdetector::TID: - SiStripSubStructure::getTIDDetectors(activeDetIds, sameLayerDetIds_, tTopo, 0, 0, 0, 0); + SiStripSubStructure::getTIDDetectors(activeDetIds, sameLayerDetIds_, tTopo_, 0, 0, 0, 0); break; case StripSubdetector::TOB: SiStripSubStructure::getTOBDetectors( - activeDetIds, sameLayerDetIds_, tTopo, tTopo->tobLayer(selDetId_), 0, tTopo->tobRod(selDetId_)); + activeDetIds, sameLayerDetIds_, tTopo_, tTopo_->tobLayer(selDetId_), 0, tTopo_->tobRod(selDetId_)); break; case StripSubdetector::TEC: - SiStripSubStructure::getTECDetectors(activeDetIds, sameLayerDetIds_, tTopo, 0, 0, 0, 0, 0, 0); + SiStripSubStructure::getTECDetectors(activeDetIds, sameLayerDetIds_, tTopo_, 0, 0, 0, 0, 0, 0); break; } // ----- for (unsigned int i = 0; i < sameLayerDetIds_.size(); i++) { - selME_.SummaryOfProfileDistr->Fill(i + 1, lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i])); + selME_.SummaryOfProfileDistr->Fill(i + 1, condObj_->getLorentzAngle(sameLayerDetIds_[i])); // Fill the Histo_TkMap+TkMap with the LA: if (HistoMaps_On_) - Tk_HM_->fill(sameLayerDetIds_[i], lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i])); + Tk_HM_->fill(sameLayerDetIds_[i], condObj_->getLorentzAngle(sameLayerDetIds_[i])); - std::cout << sameLayerDetIds_[i] << "\t" << lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i]) - << std::endl; + std::cout << sameLayerDetIds_[i] << "\t" << condObj_->getLorentzAngle(sameLayerDetIds_[i]) << std::endl; if (fPSet_.getParameter("TkMap_On") || hPSet_.getParameter("TkMap_On")) { - fillTkMap(sameLayerDetIds_[i], lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i])); + fillTkMap(sameLayerDetIds_[i], condObj_->getLorentzAngle(sameLayerDetIds_[i])); } } @@ -211,43 +192,42 @@ void SiStripLorentzAngleDQM::fillMEsForLayer( return; } - hSummaryOfCumul_name = hidmanager.createHistoLayer( - hSummaryOfCumul_description, "layer", getStringNameAndId(selDetId_, tTopo).first, ""); + hSummaryOfCumul_name = + hidmanager.createHistoLayer(hSummaryOfCumul_description, "layer", getStringNameAndId(selDetId_).first, ""); for (unsigned int i = 0; i < sameLayerDetIds_.size(); i++) { - selME_.SummaryOfCumulDistr->Fill(lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i])); + selME_.SummaryOfCumulDistr->Fill(condObj_->getLorentzAngle(sameLayerDetIds_[i])); } } // FILLING FOR STRING LEVEL else { // FILLING FOR LAYER LEVEL - std::map::iterator selMEsMapIter_ = - SummaryMEsMap_.find(getLayerNameAndId(selDetId_, tTopo).second); + std::map::iterator selMEsMapIter_ = SummaryMEsMap_.find(getLayerNameAndId(selDetId_).second); ModMEs selME_; if (selMEsMapIter_ != SummaryMEsMap_.end()) selME_ = selMEsMapIter_->second; - getSummaryMEs(selME_, selDetId_, tTopo); + getSummaryMEs(selME_, selDetId_); if (hPSet_.getParameter("FillSummaryProfileAtLayerLevel")) { - hSummary_name = hidmanager.createHistoLayer( - hSummaryOfProfile_description, "layer", getLayerNameAndId(selDetId_, tTopo).first, ""); + hSummary_name = + hidmanager.createHistoLayer(hSummaryOfProfile_description, "layer", getLayerNameAndId(selDetId_).first, ""); // ----- sameLayerDetIds_.clear(); - sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, selDetId_, tTopo); + sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, selDetId_); for (unsigned int i = 0; i < sameLayerDetIds_.size(); i++) { - selME_.SummaryOfProfileDistr->Fill(i + 1, lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i])); + selME_.SummaryOfProfileDistr->Fill(i + 1, condObj_->getLorentzAngle(sameLayerDetIds_[i])); // Fill the Histo_TkMap with LA: if (HistoMaps_On_) - Tk_HM_->fill(sameLayerDetIds_[i], lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i])); + Tk_HM_->fill(sameLayerDetIds_[i], condObj_->getLorentzAngle(sameLayerDetIds_[i])); if (fPSet_.getParameter("TkMap_On") || hPSet_.getParameter("TkMap_On")) { - fillTkMap(sameLayerDetIds_[i], lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i])); + fillTkMap(sameLayerDetIds_[i], condObj_->getLorentzAngle(sameLayerDetIds_[i])); } } } // if Fill ... @@ -265,13 +245,12 @@ void SiStripLorentzAngleDQM::fillMEsForLayer( return; } - hSummaryOfCumul_name = hidmanager.createHistoLayer( - hSummaryOfCumul_description, "layer", getLayerNameAndId(selDetId_, tTopo).first, ""); + hSummaryOfCumul_name = + hidmanager.createHistoLayer(hSummaryOfCumul_description, "layer", getLayerNameAndId(selDetId_).first, ""); for (unsigned int i = 0; i < sameLayerDetIds_.size(); i++) { - selME_.SummaryOfCumulDistr->Fill(lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i])); + selME_.SummaryOfCumulDistr->Fill(condObj_->getLorentzAngle(sameLayerDetIds_[i])); } } // if Fill ... } // FILLING FOR LAYER LEVEL } -// ----- diff --git a/DQM/SiStripMonitorSummary/src/SiStripNoisesDQM.cc b/DQM/SiStripMonitorSummary/src/SiStripNoisesDQM.cc index 854cacea65580..a482111de4ce0 100644 --- a/DQM/SiStripMonitorSummary/src/SiStripNoisesDQM.cc +++ b/DQM/SiStripMonitorSummary/src/SiStripNoisesDQM.cc @@ -1,70 +1,53 @@ #include "DQM/SiStripMonitorSummary/interface/SiStripNoisesDQM.h" -#include "DQMServices/Core/interface/DQMStore.h" - -#include "TCanvas.h" - -// ----- -SiStripNoisesDQM::SiStripNoisesDQM(const edm::EventSetup &eSetup, +SiStripNoisesDQM::SiStripNoisesDQM(edm::ESGetToken noiseToken, edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet) - : SiStripBaseCondObjDQM(eSetup, iRun, hPSet, fPSet) { - gainRenormalisation_ = hPSet_.getParameter("GainRenormalisation"); - simGainRenormalisation_ = hPSet_.getParameter("SimGainRenormalisation"); - if (gainRenormalisation_ && !simGainRenormalisation_) { - eSetup.get().get(gainHandle_); - } - if (simGainRenormalisation_) { - eSetup.get().get(gainHandle_); - } - + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo, + const TkDetMap *tkDetMap, + const SiStripApvGain *gainHandle) + : SiStripBaseCondObjDQMGet{noiseToken, iRun, hPSet, fPSet, tTopo}, + gainHandle_{gainHandle} { // Build the Histo_TkMap: if (HistoMaps_On_) { - edm::ESHandle tkDetMapHandle; - eSetup.get().get(tkDetMapHandle); - Tk_HM_ = std::make_unique(tkDetMapHandle.product(), "SiStrip/Histo_Map", "MeanNoise_TkMap", 0.); + Tk_HM_ = std::make_unique(tkDetMap, "SiStrip/Histo_Map", "MeanNoise_TkMap", 0.); } } -// ----- -// ----- SiStripNoisesDQM::~SiStripNoisesDQM() {} -// ----- -// ----- void SiStripNoisesDQM::getActiveDetIds(const edm::EventSetup &eSetup) { getConditionObject(eSetup); - noiseHandle_->getDetIds(activeDetIds); + condObj_->getDetIds(activeDetIds); } -// ----- -void SiStripNoisesDQM::fillMEsForDet(const ModMEs &_selModME_, uint32_t selDetId_, const TrackerTopology *tTopo) { +void SiStripNoisesDQM::fillMEsForDet(const ModMEs &_selModME_, uint32_t selDetId_) { ModMEs selModME_ = _selModME_; std::vector DetIds; - noiseHandle_->getDetIds(DetIds); + condObj_->getDetIds(DetIds); - SiStripNoises::Range noiseRange = noiseHandle_->getRange(selDetId_); + const auto noiseRange = condObj_->getRange(selDetId_); int nStrip = reader->getNumberOfApvsAndStripLength(selDetId_).first * 128; - getModMEs(selModME_, selDetId_, tTopo); + getModMEs(selModME_, selDetId_); float gainFactor; float stripnoise; SiStripApvGain::Range gainRange; - if (gainRenormalisation_ || simGainRenormalisation_) { + if (gainHandle_) { gainRange = gainHandle_->getRange(selDetId_); } for (int istrip = 0; istrip < nStrip; ++istrip) { - if (gainRenormalisation_ || simGainRenormalisation_) + if (gainHandle_) gainFactor = gainHandle_->getStripGain(istrip, gainRange) ? gainHandle_->getStripGain(istrip, gainRange) : 1.; else gainFactor = 1; - stripnoise = noiseHandle_->getNoise(istrip, noiseRange) / gainFactor; + stripnoise = condObj_->getNoise(istrip, noiseRange) / gainFactor; if (CondObj_fillId_ == "onlyProfile" || CondObj_fillId_ == "ProfileAndCumul") { selModME_.ProfileDistr->Fill(istrip + 1, stripnoise); } @@ -83,7 +66,7 @@ void SiStripNoisesDQM::fillMEsForDet(const ModMEs &_selModME_, uint32_t selDetId // should be avoided... void SiStripNoisesDQM::fillMEsForLayer( - /*std::map selMEsMap_,*/ uint32_t selDetId_, const TrackerTopology *tTopo) { + /*std::map selMEsMap_,*/ uint32_t selDetId_) { // ---- int subdetectorId_ = ((selDetId_ >> 25) & 0x7); @@ -95,13 +78,13 @@ void SiStripNoisesDQM::fillMEsForLayer( } // ---- - std::map::iterator selMEsMapIter_ = SummaryMEsMap_.find(getLayerNameAndId(selDetId_, tTopo).second); + const auto selMEsMapIter_ = SummaryMEsMap_.find(getLayerNameAndId(selDetId_).second); ModMEs selME_; if (selMEsMapIter_ != SummaryMEsMap_.end()) selME_ = selMEsMapIter_->second; - getSummaryMEs(selME_, selDetId_, tTopo); + getSummaryMEs(selME_, selDetId_); - SiStripNoises::Range noiseRange = noiseHandle_->getRange(selDetId_); + const auto noiseRange = condObj_->getRange(selDetId_); int nStrip = reader->getNumberOfApvsAndStripLength(selDetId_).first * 128; float stripnoise = -1.; @@ -109,7 +92,7 @@ void SiStripNoisesDQM::fillMEsForLayer( int Nbadstrips = 0; SiStripApvGain::Range gainRange; - if (gainRenormalisation_ || simGainRenormalisation_) { + if (gainHandle_) { gainRange = gainHandle_->getRange(selDetId_); } float gainFactor = 1; @@ -122,16 +105,16 @@ void SiStripNoisesDQM::fillMEsForLayer( hSummaryOfProfile_description = hPSet_.getParameter("SummaryOfProfile_description"); std::string hSummaryOfProfile_name; - hSummaryOfProfile_name = hidmanager.createHistoLayer( - hSummaryOfProfile_description, "layer", getLayerNameAndId(selDetId_, tTopo).first, ""); + hSummaryOfProfile_name = + hidmanager.createHistoLayer(hSummaryOfProfile_description, "layer", getLayerNameAndId(selDetId_).first, ""); } if (hPSet_.getParameter("FillCumulativeSummaryAtLayerLevel")) { std::string hSummaryOfCumul_description; hSummaryOfCumul_description = hPSet_.getParameter("Cumul_description"); std::string hSummaryOfCumul_name; - hSummaryOfCumul_name = hidmanager.createHistoLayer( - hSummaryOfCumul_description, "layer", getStringNameAndId(selDetId_, tTopo).first, ""); + hSummaryOfCumul_name = + hidmanager.createHistoLayer(hSummaryOfCumul_description, "layer", getStringNameAndId(selDetId_).first, ""); } if (hPSet_.getParameter("FillSummaryAtLayerLevel")) { // --> cumul summary @@ -139,18 +122,17 @@ void SiStripNoisesDQM::fillMEsForLayer( hSummary_description = hPSet_.getParameter("Summary_description"); std::string hSummary_name; - hSummary_name = - hidmanager.createHistoLayer(hSummary_description, "layer", getLayerNameAndId(selDetId_, tTopo).first, ""); + hSummary_name = hidmanager.createHistoLayer(hSummary_description, "layer", getLayerNameAndId(selDetId_).first, ""); } for (int istrip = 0; istrip < nStrip; ++istrip) { - if (gainRenormalisation_ || simGainRenormalisation_) { + if (gainHandle_) { gainFactor = gainHandle_->getStripGain(istrip, gainRange) ? gainHandle_->getStripGain(istrip, gainRange) : 1.; } else { gainFactor = 1.; } - stripnoise = noiseHandle_->getNoise(istrip, noiseRange) / gainFactor; + stripnoise = condObj_->getNoise(istrip, noiseRange) / gainFactor; meanNoise += stripnoise; if (hPSet_.getParameter("FillSummaryProfileAtLayerLevel")) { if (CondObj_fillId_ == "onlyProfile" || CondObj_fillId_ == "ProfileAndCumul") { @@ -176,7 +158,7 @@ void SiStripNoisesDQM::fillMEsForLayer( // get detIds belonging to same layer to fill X-axis with detId-number std::vector sameLayerDetIds_; - sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, selDetId_, tTopo); + sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, selDetId_); std::vector::const_iterator ibound = lower_bound(sameLayerDetIds_.begin(), sameLayerDetIds_.end(), selDetId_); diff --git a/DQM/SiStripMonitorSummary/src/SiStripPedestalsDQM.cc b/DQM/SiStripMonitorSummary/src/SiStripPedestalsDQM.cc index 2a469daabaa9b..b33f5d8db5137 100644 --- a/DQM/SiStripMonitorSummary/src/SiStripPedestalsDQM.cc +++ b/DQM/SiStripMonitorSummary/src/SiStripPedestalsDQM.cc @@ -1,81 +1,54 @@ #include "DQM/SiStripMonitorSummary/interface/SiStripPedestalsDQM.h" -#include "DQMServices/Core/interface/DQMStore.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "TCanvas.h" -// ----- -SiStripPedestalsDQM::SiStripPedestalsDQM(const edm::EventSetup &eSetup, +SiStripPedestalsDQM::SiStripPedestalsDQM(edm::ESGetToken token, edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet) - : SiStripBaseCondObjDQM(eSetup, iRun, hPSet, fPSet) { - // Build the Histo_TkMap: + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo, + const TkDetMap *tkDetMap) + : SiStripBaseCondObjDQMGet{token, iRun, hPSet, fPSet, tTopo} { if (HistoMaps_On_) { - edm::ESHandle tkDetMapHandle; - eSetup.get().get(tkDetMapHandle); - Tk_HM_ = std::make_unique(tkDetMapHandle.product(), "SiStrip/Histo_Map", "MeanPed_TkMap", 0.); + Tk_HM_ = std::make_unique(tkDetMap, "SiStrip/Histo_Map", "MeanPed_TkMap", 0.); } } -// ----- -// ----- SiStripPedestalsDQM::~SiStripPedestalsDQM() {} -// ----- -// ----- void SiStripPedestalsDQM::getActiveDetIds(const edm::EventSetup &eSetup) { getConditionObject(eSetup); - pedestalHandle_->getDetIds(activeDetIds); + condObj_->getDetIds(activeDetIds); } -// ----- - -// ----- -void SiStripPedestalsDQM::fillModMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); +void SiStripPedestalsDQM::fillModMEs(const std::vector &selectedDetIds) { ModMEs CondObj_ME; - - for (std::vector::const_iterator detIter_ = selectedDetIds.begin(); detIter_ != selectedDetIds.end(); - detIter_++) { - fillMEsForDet(CondObj_ME, *detIter_, tTopo); + for (const auto det : selectedDetIds) { + fillMEsForDet(CondObj_ME, det); } } -// ----- -// ----- -void SiStripPedestalsDQM::fillMEsForDet(const ModMEs &_selModME_, uint32_t selDetId_, const TrackerTopology *tTopo) { +void SiStripPedestalsDQM::fillMEsForDet(const ModMEs &_selModME_, uint32_t selDetId_) { ModMEs selModME_ = _selModME_; - getModMEs(selModME_, selDetId_, tTopo); + getModMEs(selModME_, selDetId_); - SiStripPedestals::Range pedRange = pedestalHandle_->getRange(selDetId_); + const auto pedRange = condObj_->getRange(selDetId_); int nStrip = reader->getNumberOfApvsAndStripLength(selDetId_).first * 128; for (int istrip = 0; istrip < nStrip; ++istrip) { if (CondObj_fillId_ == "onlyProfile" || CondObj_fillId_ == "ProfileAndCumul") { - selModME_.ProfileDistr->Fill(istrip + 1, pedestalHandle_->getPed(istrip, pedRange)); + selModME_.ProfileDistr->Fill(istrip + 1, condObj_->getPed(istrip, pedRange)); } } // istrip } -// ----- - -// ----- -void SiStripPedestalsDQM::fillSummaryMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); - - for (std::vector::const_iterator detIter_ = selectedDetIds.begin(); detIter_ != selectedDetIds.end(); - detIter_++) { - fillMEsForLayer(/*SummaryMEsMap_,*/ *detIter_, tTopo); + +void SiStripPedestalsDQM::fillSummaryMEs(const std::vector &selectedDetIds) { + for (const auto det : selectedDetIds) { + fillMEsForLayer(/*SummaryMEsMap_,*/ det); } - for (std::map::iterator iter = SummaryMEsMap_.begin(); iter != SummaryMEsMap_.end(); iter++) { + for (const auto &itm : SummaryMEsMap_) { ModMEs selME; - selME = iter->second; + selME = itm.second; if (hPSet_.getParameter("FillSummaryProfileAtLayerLevel") && fPSet_.getParameter("OutputSummaryProfileAtLayerLevelAsImage")) { @@ -98,11 +71,8 @@ void SiStripPedestalsDQM::fillSummaryMEs(const std::vector &selectedDe } } -// ----- - -// ----- void SiStripPedestalsDQM::fillMEsForLayer( - /*std::map selMEsMap_,*/ uint32_t selDetId_, const TrackerTopology *tTopo) { + /*std::map selMEsMap_,*/ uint32_t selDetId_) { // ---- int subdetectorId_ = ((selDetId_ >> 25) & 0x7); @@ -117,13 +87,13 @@ void SiStripPedestalsDQM::fillMEsForLayer( // // Cumulative distribution with average Ped value on a layer (not // needed): - std::map::iterator selMEsMapIter_ = SummaryMEsMap_.find(getLayerNameAndId(selDetId_, tTopo).second); + const auto selMEsMapIter_ = SummaryMEsMap_.find(getLayerNameAndId(selDetId_).second); ModMEs selME_; if (selMEsMapIter_ != SummaryMEsMap_.end()) selME_ = selMEsMapIter_->second; - getSummaryMEs(selME_, selDetId_, tTopo); + getSummaryMEs(selME_, selDetId_); - SiStripPedestals::Range pedRange = pedestalHandle_->getRange(selDetId_); + const auto pedRange = condObj_->getRange(selDetId_); int nStrip = reader->getNumberOfApvsAndStripLength(selDetId_).first * 128; @@ -137,17 +107,17 @@ void SiStripPedestalsDQM::fillMEsForLayer( std::string hSummaryOfProfile_name; - hSummaryOfProfile_name = hidmanager.createHistoLayer( - hSummaryOfProfile_description, "layer", getLayerNameAndId(selDetId_, tTopo).first, ""); + hSummaryOfProfile_name = + hidmanager.createHistoLayer(hSummaryOfProfile_description, "layer", getLayerNameAndId(selDetId_).first, ""); for (int istrip = 0; istrip < nStrip; ++istrip) { if (CondObj_fillId_ == "onlyProfile" || CondObj_fillId_ == "ProfileAndCumul") { - selME_.SummaryOfProfileDistr->Fill(istrip + 1, pedestalHandle_->getPed(istrip, pedRange)); + selME_.SummaryOfProfileDistr->Fill(istrip + 1, condObj_->getPed(istrip, pedRange)); } // fill the TkMap if (fPSet_.getParameter("TkMap_On") || hPSet_.getParameter("TkMap_On")) { - fillTkMap(selDetId_, pedestalHandle_->getPed(istrip, pedRange)); + fillTkMap(selDetId_, condObj_->getPed(istrip, pedRange)); } } // istrip @@ -160,12 +130,11 @@ void SiStripPedestalsDQM::fillMEsForLayer( hSummary_description = hPSet_.getParameter("Summary_description"); std::string hSummary_name; - hSummary_name = - hidmanager.createHistoLayer(hSummary_description, "layer", getLayerNameAndId(selDetId_, tTopo).first, ""); + hSummary_name = hidmanager.createHistoLayer(hSummary_description, "layer", getLayerNameAndId(selDetId_).first, ""); float meanPedestal = 0; for (int istrip = 0; istrip < nStrip; ++istrip) { - meanPedestal = meanPedestal + pedestalHandle_->getPed(istrip, pedRange); + meanPedestal = meanPedestal + condObj_->getPed(istrip, pedRange); } // istrip @@ -178,7 +147,7 @@ void SiStripPedestalsDQM::fillMEsForLayer( sameLayerDetIds_.clear(); - sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, selDetId_, tTopo); + sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, selDetId_); unsigned int iBin = 0; for (unsigned int i = 0; i < sameLayerDetIds_.size(); i++) { @@ -195,4 +164,3 @@ void SiStripPedestalsDQM::fillMEsForLayer( } // if Fill ... } -// ----- diff --git a/DQM/SiStripMonitorSummary/src/SiStripQualityDQM.cc b/DQM/SiStripMonitorSummary/src/SiStripQualityDQM.cc index b48aaaaa693f9..f3cd603603d96 100644 --- a/DQM/SiStripMonitorSummary/src/SiStripQualityDQM.cc +++ b/DQM/SiStripMonitorSummary/src/SiStripQualityDQM.cc @@ -1,85 +1,54 @@ #include "DQM/SiStripMonitorSummary/interface/SiStripQualityDQM.h" #include "DQMServices/Core/interface/DQMStore.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "TCanvas.h" -// ----- -SiStripQualityDQM::SiStripQualityDQM(const edm::EventSetup &eSetup, +SiStripQualityDQM::SiStripQualityDQM(edm::ESGetToken token, edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet) - : SiStripBaseCondObjDQM(eSetup, iRun, hPSet, fPSet) { - qualityLabel_ = fPSet.getParameter("StripQualityLabel"); - - // Build the Histo_TkMap: + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo, + const TkDetMap *tkDetMap) + : SiStripBaseCondObjDQMGet{token, iRun, hPSet, fPSet, tTopo} { if (HistoMaps_On_) { - edm::ESHandle tkDetMapHandle; - eSetup.get().get(tkDetMapHandle); - Tk_HM_ = std::make_unique(tkDetMapHandle.product(), "SiStrip/Histo_Map", "Quality_TkMap", 0.); + Tk_HM_ = std::make_unique(tkDetMap, "SiStrip/Histo_Map", "Quality_TkMap", 0.); } } -// ----- -// ----- SiStripQualityDQM::~SiStripQualityDQM() {} -// ----- -// ----- void SiStripQualityDQM::getActiveDetIds(const edm::EventSetup &eSetup) { getConditionObject(eSetup); - qualityHandle_->getDetIds(activeDetIds); + condObj_->getDetIds(activeDetIds); } -// ----- - -//================================================ -// ----- -void SiStripQualityDQM::fillModMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); +void SiStripQualityDQM::fillModMEs(const std::vector &selectedDetIds) { ModMEs CondObj_ME; - - for (std::vector::const_iterator detIter_ = selectedDetIds.begin(); detIter_ != selectedDetIds.end(); - detIter_++) { - fillMEsForDet(CondObj_ME, *detIter_, tTopo); + for (const auto det : selectedDetIds) { + fillMEsForDet(CondObj_ME, det); } } -// ----- -//=================================================== -// ----- -void SiStripQualityDQM::fillMEsForDet(const ModMEs &_selModME_, uint32_t selDetId_, const TrackerTopology *tTopo) { +void SiStripQualityDQM::fillMEsForDet(const ModMEs &_selModME_, uint32_t selDetId_) { ModMEs selModME_ = _selModME_; - getModMEs(selModME_, selDetId_, tTopo); + getModMEs(selModME_, selDetId_); - SiStripQuality::Range qualityRange = qualityHandle_->getRange(selDetId_); + const auto qualityRange = condObj_->getRange(selDetId_); int nStrip = reader->getNumberOfApvsAndStripLength(selDetId_).first * 128; for (int istrip = 0; istrip < nStrip; ++istrip) { - selModME_.ProfileDistr->Fill(istrip + 1, qualityHandle_->IsStripBad(qualityRange, istrip) ? 0. : 1.); + selModME_.ProfileDistr->Fill(istrip + 1, condObj_->IsStripBad(qualityRange, istrip) ? 0. : 1.); } // istrip } -// ----- - -//==================================================== -// ----- -void SiStripQualityDQM::fillSummaryMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); - - for (std::vector::const_iterator detIter_ = selectedDetIds.begin(); detIter_ != selectedDetIds.end(); - detIter_++) { - fillMEsForLayer(/*SummaryMEsMap_,*/ *detIter_, tTopo); + +void SiStripQualityDQM::fillSummaryMEs(const std::vector &selectedDetIds) { + for (const auto det : selectedDetIds) { + fillMEsForLayer(/*SummaryMEsMap_,*/ det); } - for (std::map::iterator iter = SummaryMEsMap_.begin(); iter != SummaryMEsMap_.end(); iter++) { + for (const auto &itm : SummaryMEsMap_) { ModMEs selME; - selME = iter->second; + selME = itm.second; if (hPSet_.getParameter("FillSummaryAtLayerLevel") && fPSet_.getParameter("OutputSummaryAtLayerLevelAsImage")) { @@ -91,12 +60,9 @@ void SiStripQualityDQM::fillSummaryMEs(const std::vector &selectedDetI } } } -// ----- -//================================================= -// ----- void SiStripQualityDQM::fillMEsForLayer( - /* std::map selMEsMap_,*/ uint32_t selDetId_, const TrackerTopology *tTopo) { + /* std::map selMEsMap_,*/ uint32_t selDetId_) { float numberOfBadStrips = 0; SiStripHistoId hidmanager; @@ -118,21 +84,19 @@ void SiStripQualityDQM::fillMEsForLayer( } // ---- - hSummary_name = - hidmanager.createHistoLayer(hSummary_description, "layer", getLayerNameAndId(selDetId_, tTopo).first, ""); + hSummary_name = hidmanager.createHistoLayer(hSummary_description, "layer", getLayerNameAndId(selDetId_).first, ""); - std::map::iterator selMEsMapIter_ = - SummaryMEsMap_.find(getLayerNameAndId(selDetId_, tTopo).second); + const auto selMEsMapIter_ = SummaryMEsMap_.find(getLayerNameAndId(selDetId_).second); ModMEs selME_; if (selMEsMapIter_ != SummaryMEsMap_.end()) selME_ = selMEsMapIter_->second; - getSummaryMEs(selME_, selDetId_, tTopo); + getSummaryMEs(selME_, selDetId_); std::vector sameLayerDetIds_; sameLayerDetIds_.clear(); - sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, selDetId_, tTopo); + sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, selDetId_); // ----- // unsigned int iBin=0; @@ -146,13 +110,13 @@ void SiStripQualityDQM::fillMEsForLayer( //%%%%%%%%%%%%%%%%%%%%%%% END %%%%%%%%%% for (unsigned int i = 0; i < sameLayerDetIds_.size(); i++) { - SiStripQuality::Range qualityRange = qualityHandle_->getRange(sameLayerDetIds_[i]); + const auto qualityRange = condObj_->getRange(sameLayerDetIds_[i]); int nStrip = reader->getNumberOfApvsAndStripLength(sameLayerDetIds_[i]).first * 128; numberOfBadStrips = 0; for (int istrip = 0; istrip < nStrip; ++istrip) { - if (qualityHandle_->IsStripBad(qualityRange, istrip)) { + if (condObj_->IsStripBad(qualityRange, istrip)) { numberOfBadStrips++; } } @@ -176,15 +140,8 @@ void SiStripQualityDQM::fillMEsForLayer( } } // if Fill ... } -// ----- - -//============================= -void SiStripQualityDQM::fillGrandSummaryMEs(const edm::EventSetup &eSetup) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - eSetup.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); +void SiStripQualityDQM::fillGrandSummaryMEs() { std::string hSummary_BadObjects_xTitle = hPSet_.getParameter("Summary_BadObjects_histo_xTitle"); std::string hSummary_BadModules_name = hPSet_.getParameter("Summary_BadModules_histo_name"); @@ -240,14 +197,12 @@ void SiStripQualityDQM::fillGrandSummaryMEs(const edm::EventSetup &eSetup) { std::stringstream ss; ss.str(""); - std::vector detids = reader->getAllDetIds(); - std::vector::const_iterator idet = detids.begin(); - for (; idet != detids.end(); ++idet) { - ss << "detid " << (*idet) << " IsModuleUsable " << qualityHandle_->IsModuleUsable((*idet)) << "\n"; + for (const auto det : reader->getAllDetIds()) { + ss << "detid " << det << " IsModuleUsable " << condObj_->IsModuleUsable(det) << "\n"; } LogDebug("SiStripQualityDQM") << ss.str() << std::endl; - std::vector BC = qualityHandle_->getBadComponentList(); + std::vector BC = condObj_->getBadComponentList(); for (size_t i = 0; i < BC.size(); ++i) { //&&&&&&&&&&&&& @@ -273,7 +228,7 @@ void SiStripQualityDQM::fillGrandSummaryMEs(const edm::EventSetup &eSetup) { // TIB //&&&&&&&&&&&&&&&&& - component = tTopo->tibLayer(BC[i].detid); + component = tTopo_->tibLayer(BC[i].detid); SetBadComponents(0, component, BC[i]); } else if (a.subdetId() == SiStripDetId::TID) { @@ -281,7 +236,7 @@ void SiStripQualityDQM::fillGrandSummaryMEs(const edm::EventSetup &eSetup) { // TID //&&&&&&&&&&&&&&&&& - component = tTopo->tidSide(BC[i].detid) == 2 ? tTopo->tidWheel(BC[i].detid) : tTopo->tidWheel(BC[i].detid) + 3; + component = tTopo_->tidSide(BC[i].detid) == 2 ? tTopo_->tidWheel(BC[i].detid) : tTopo_->tidWheel(BC[i].detid) + 3; SetBadComponents(1, component, BC[i]); } else if (a.subdetId() == SiStripDetId::TOB) { @@ -289,7 +244,7 @@ void SiStripQualityDQM::fillGrandSummaryMEs(const edm::EventSetup &eSetup) { // TOB //&&&&&&&&&&&&&&&&& - component = tTopo->tobLayer(BC[i].detid); + component = tTopo_->tobLayer(BC[i].detid); SetBadComponents(2, component, BC[i]); } else if (a.subdetId() == SiStripDetId::TEC) { @@ -297,7 +252,7 @@ void SiStripQualityDQM::fillGrandSummaryMEs(const edm::EventSetup &eSetup) { // TEC //&&&&&&&&&&&&&&&&& - component = tTopo->tecSide(BC[i].detid) == 2 ? tTopo->tecWheel(BC[i].detid) : tTopo->tecWheel(BC[i].detid) + 9; + component = tTopo_->tecSide(BC[i].detid) == 2 ? tTopo_->tecWheel(BC[i].detid) : tTopo_->tecWheel(BC[i].detid) + 9; SetBadComponents(3, component, BC[i]); } } @@ -306,8 +261,8 @@ void SiStripQualityDQM::fillGrandSummaryMEs(const edm::EventSetup &eSetup) { // Single Strip Info //&&&&&&&&&&&&&&&&&& - SiStripQuality::RegistryIterator rbegin = qualityHandle_->getRegistryVectorBegin(); - SiStripQuality::RegistryIterator rend = qualityHandle_->getRegistryVectorEnd(); + SiStripQuality::RegistryIterator rbegin = condObj_->getRegistryVectorBegin(); + SiStripQuality::RegistryIterator rend = condObj_->getRegistryVectorEnd(); for (SiStripBadStrip::RegistryIterator rp = rbegin; rp != rend; ++rp) { uint32_t detid = rp->detid; @@ -317,23 +272,23 @@ void SiStripQualityDQM::fillGrandSummaryMEs(const edm::EventSetup &eSetup) { SiStripDetId a(detid); if (a.subdetId() == 3) { subdet = 0; - component = tTopo->tibLayer(detid); + component = tTopo_->tibLayer(detid); } else if (a.subdetId() == 4) { subdet = 1; - component = tTopo->tidSide(detid) == 2 ? tTopo->tidWheel(detid) : tTopo->tidWheel(detid) + 3; + component = tTopo_->tidSide(detid) == 2 ? tTopo_->tidWheel(detid) : tTopo_->tidWheel(detid) + 3; } else if (a.subdetId() == 5) { subdet = 2; - component = tTopo->tobLayer(detid); + component = tTopo_->tobLayer(detid); } else if (a.subdetId() == 6) { subdet = 3; - component = tTopo->tecSide(detid) == 2 ? tTopo->tecWheel(detid) : tTopo->tecWheel(detid) + 9; + component = tTopo_->tecSide(detid) == 2 ? tTopo_->tecWheel(detid) : tTopo_->tecWheel(detid) + 9; } - SiStripQuality::Range sqrange = SiStripQuality::Range(qualityHandle_->getDataVectorBegin() + rp->ibegin, - qualityHandle_->getDataVectorBegin() + rp->iend); + SiStripQuality::Range sqrange = + SiStripQuality::Range(condObj_->getDataVectorBegin() + rp->ibegin, condObj_->getDataVectorBegin() + rp->iend); for (int it = 0; it < sqrange.second - sqrange.first; it++) { - unsigned int range = qualityHandle_->decode(*(sqrange.first + it)).range; + unsigned int range = condObj_->decode(*(sqrange.first + it)).range; NTkBadComponent[3] += range; NBadComponent[subdet][0][3] += range; NBadComponent[subdet][component][3] += range; @@ -464,7 +419,6 @@ void SiStripQualityDQM::fillGrandSummaryMEs(const edm::EventSetup &eSetup) { } } -//===================== void SiStripQualityDQM::SetBadComponents(int i, int component, SiStripQuality::BadComponent &BC) { int napv = reader->getNumberOfApvsAndStripLength(BC.detid).first; diff --git a/DQM/SiStripMonitorSummary/src/SiStripThresholdDQM.cc b/DQM/SiStripMonitorSummary/src/SiStripThresholdDQM.cc index 050888fff9313..df8626ea34b64 100644 --- a/DQM/SiStripMonitorSummary/src/SiStripThresholdDQM.cc +++ b/DQM/SiStripMonitorSummary/src/SiStripThresholdDQM.cc @@ -1,22 +1,15 @@ #include "DQM/SiStripMonitorSummary/interface/SiStripThresholdDQM.h" -#include "DQMServices/Core/interface/DQMStore.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" -#include "TCanvas.h" - -// ----- -SiStripThresholdDQM::SiStripThresholdDQM(const edm::EventSetup &eSetup, +SiStripThresholdDQM::SiStripThresholdDQM(edm::ESGetToken token, edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, - edm::ParameterSet const &fPSet) - : SiStripBaseCondObjDQM(eSetup, iRun, hPSet, fPSet) { + edm::ParameterSet const &fPSet, + const TrackerTopology *tTopo, + const TkDetMap *tkDetMap) + : SiStripBaseCondObjDQMGet{token, iRun, hPSet, fPSet, tTopo} { WhichThreshold = hPSet.getParameter("WhichThreshold"); - // Build the Histo_TkMap: if (HistoMaps_On_) { - edm::ESHandle tkDetMapHandle; - eSetup.get().get(tkDetMapHandle); - const TkDetMap *tkDetMap = tkDetMapHandle.product(); if (WhichThreshold == "Low") Tk_HM_L = std::make_unique(tkDetMap, "SiStrip/Histo_Map", "LowThresh_TkMap", 0.); if (WhichThreshold == "High") @@ -24,81 +17,48 @@ SiStripThresholdDQM::SiStripThresholdDQM(const edm::EventSetup &eSetup, } } -// ----- - -// ----- SiStripThresholdDQM::~SiStripThresholdDQM() {} -// ----- -// ----- void SiStripThresholdDQM::getActiveDetIds(const edm::EventSetup &eSetup) { getConditionObject(eSetup); - thresholdHandle_->getDetIds(activeDetIds); + condObj_->getDetIds(activeDetIds); } -// ----- - -//===================================================================================== - -// ----- -void SiStripThresholdDQM::fillModMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); +void SiStripThresholdDQM::fillModMEs(const std::vector &selectedDetIds) { ModMEs CondObj_ME; - - for (std::vector::const_iterator detIter_ = selectedDetIds.begin(); detIter_ != selectedDetIds.end(); - detIter_++) { - fillMEsForDet(CondObj_ME, *detIter_, tTopo); + for (const auto det : selectedDetIds) { + fillMEsForDet(CondObj_ME, det); } } -// ----- - -//====================================================================================== -// ----- -void SiStripThresholdDQM::fillMEsForDet(const ModMEs &_selModME_, uint32_t selDetId_, const TrackerTopology *tTopo) { +void SiStripThresholdDQM::fillMEsForDet(const ModMEs &_selModME_, uint32_t selDetId_) { ModMEs selModME_ = _selModME_; std::vector DetIds; - thresholdHandle_->getDetIds(DetIds); + condObj_->getDetIds(DetIds); - SiStripThreshold::Range ThresholdRange = thresholdHandle_->getRange(selDetId_); + const auto ThresholdRange = condObj_->getRange(selDetId_); int nStrip = reader->getNumberOfApvsAndStripLength(selDetId_).first * 128; - getModMEs(selModME_, selDetId_, tTopo); + getModMEs(selModME_, selDetId_); for (int istrip = 0; istrip < nStrip; ++istrip) { if (CondObj_fillId_ == "onlyProfile" || CondObj_fillId_ == "ProfileAndCumul") { if (WhichThreshold == "Low") - selModME_.ProfileDistr->Fill(istrip + 1, thresholdHandle_->getData(istrip, ThresholdRange).getLth()); + selModME_.ProfileDistr->Fill(istrip + 1, condObj_->getData(istrip, ThresholdRange).getLth()); if (WhichThreshold == "High") - selModME_.ProfileDistr->Fill(istrip + 1, thresholdHandle_->getData(istrip, ThresholdRange).getHth()); + selModME_.ProfileDistr->Fill(istrip + 1, condObj_->getData(istrip, ThresholdRange).getHth()); } } // istrip } -// ----- - -//======================================================================================= -// ----- -void SiStripThresholdDQM::fillSummaryMEs(const std::vector &selectedDetIds, const edm::EventSetup &es) { - // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); - - for (std::vector::const_iterator detIter_ = selectedDetIds.begin(); detIter_ != selectedDetIds.end(); - detIter_++) { - fillMEsForLayer(/*SummaryMEsMap_,*/ *detIter_, tTopo); +void SiStripThresholdDQM::fillSummaryMEs(const std::vector &selectedDetIds) { + for (const auto det : selectedDetIds) { + fillMEsForLayer(/*SummaryMEsMap_,*/ det); } } -// ----- -//======================================================================================= -// ----- void SiStripThresholdDQM::fillMEsForLayer( - /*std::map selMEsMap_,*/ uint32_t selDetId_, const TrackerTopology *tTopo) { + /*std::map selMEsMap_,*/ uint32_t selDetId_) { // ---- int subdetectorId_ = ((selDetId_ >> 25) & 0x7); @@ -110,14 +70,14 @@ void SiStripThresholdDQM::fillMEsForLayer( } // ---- - std::map::iterator selMEsMapIter_ = SummaryMEsMap_.find(getLayerNameAndId(selDetId_, tTopo).second); + const auto selMEsMapIter_ = SummaryMEsMap_.find(getLayerNameAndId(selDetId_).second); ModMEs selME_; if (selMEsMapIter_ != SummaryMEsMap_.end()) selME_ = selMEsMapIter_->second; - getSummaryMEs(selME_, selDetId_, tTopo); + getSummaryMEs(selME_, selDetId_); - SiStripThreshold::Range ThresholdRange = thresholdHandle_->getRange(selDetId_); + const auto ThresholdRange = condObj_->getRange(selDetId_); int nStrip = reader->getNumberOfApvsAndStripLength(selDetId_).first * 128; @@ -131,20 +91,20 @@ void SiStripThresholdDQM::fillMEsForLayer( std::string hSummaryOfProfile_name; - hSummaryOfProfile_name = hidmanager.createHistoLayer( - hSummaryOfProfile_description, "layer", getLayerNameAndId(selDetId_, tTopo).first, ""); + hSummaryOfProfile_name = + hidmanager.createHistoLayer(hSummaryOfProfile_description, "layer", getLayerNameAndId(selDetId_).first, ""); for (int istrip = 0; istrip < nStrip; ++istrip) { if (CondObj_fillId_ == "onlyProfile" || CondObj_fillId_ == "ProfileAndCumul") { if (WhichThreshold == "Low") { - selME_.SummaryOfProfileDistr->Fill(istrip + 1, thresholdHandle_->getData(istrip, ThresholdRange).getLth()); + selME_.SummaryOfProfileDistr->Fill(istrip + 1, condObj_->getData(istrip, ThresholdRange).getLth()); if (fPSet_.getParameter("TkMap_On") || hPSet_.getParameter("TkMap_On")) - fillTkMap(selDetId_, thresholdHandle_->getData(istrip, ThresholdRange).getLth()); + fillTkMap(selDetId_, condObj_->getData(istrip, ThresholdRange).getLth()); } if (WhichThreshold == "High") { - selME_.SummaryOfProfileDistr->Fill(istrip + 1, thresholdHandle_->getData(istrip, ThresholdRange).getHth()); + selME_.SummaryOfProfileDistr->Fill(istrip + 1, condObj_->getData(istrip, ThresholdRange).getHth()); if (fPSet_.getParameter("TkMap_On") || hPSet_.getParameter("TkMap_On")) - fillTkMap(selDetId_, thresholdHandle_->getData(istrip, ThresholdRange).getHth()); + fillTkMap(selDetId_, condObj_->getData(istrip, ThresholdRange).getHth()); } } } // istrip @@ -158,15 +118,14 @@ void SiStripThresholdDQM::fillMEsForLayer( hSummary_description = hPSet_.getParameter("Summary_description"); std::string hSummary_name; - hSummary_name = - hidmanager.createHistoLayer(hSummary_description, "layer", getLayerNameAndId(selDetId_, tTopo).first, ""); + hSummary_name = hidmanager.createHistoLayer(hSummary_description, "layer", getLayerNameAndId(selDetId_).first, ""); float meanLowThreshold = 0; float meanHighThreshold = 0; for (int istrip = 0; istrip < nStrip; ++istrip) { - meanLowThreshold = meanLowThreshold + thresholdHandle_->getData(istrip, ThresholdRange).getLth(); - meanHighThreshold = meanHighThreshold + thresholdHandle_->getData(istrip, ThresholdRange).getHth(); + meanLowThreshold = meanLowThreshold + condObj_->getData(istrip, ThresholdRange).getLth(); + meanHighThreshold = meanHighThreshold + condObj_->getData(istrip, ThresholdRange).getHth(); } // istrip meanLowThreshold = meanLowThreshold / nStrip; @@ -175,7 +134,7 @@ void SiStripThresholdDQM::fillMEsForLayer( // ----- // get detIds belonging to same layer to fill X-axis with detId-number - std::vector sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, selDetId_, tTopo); + std::vector sameLayerDetIds_ = GetSameLayerDetId(activeDetIds, selDetId_); unsigned int iBin = 0; for (unsigned int i = 0; i < sameLayerDetIds_.size(); i++) { @@ -197,4 +156,3 @@ void SiStripThresholdDQM::fillMEsForLayer( } // if Fill ... } -// ----- diff --git a/DQM/SiTrackerPhase2/plugins/Phase2ITMonitorCluster.cc b/DQM/SiTrackerPhase2/plugins/Phase2ITMonitorCluster.cc index 6aa9ec92ca102..20f7f04643d7f 100644 --- a/DQM/SiTrackerPhase2/plugins/Phase2ITMonitorCluster.cc +++ b/DQM/SiTrackerPhase2/plugins/Phase2ITMonitorCluster.cc @@ -261,8 +261,8 @@ void Phase2ITMonitorCluster::fillDescriptions(edm::ConfigurationDescriptions& de psd0.add("title", "NumberClusters;Number of Clusters;"); psd0.add("xmin", 0.0); psd0.add("switch", true); - psd0.add("xmax", 0.0); - psd0.add("NxBins", 50); + psd0.add("xmax", 300000.0); + psd0.add("NxBins", 150); desc.add("GlobalNClusters", psd0); } { @@ -325,8 +325,8 @@ void Phase2ITMonitorCluster::fillDescriptions(edm::ConfigurationDescriptions& de psd0.add("title", "NumberOfClutsers;Number of Clusters;"); psd0.add("xmin", 0.0); psd0.add("switch", true); - psd0.add("xmax", 0.0); - psd0.add("NxBins", 50); + psd0.add("xmax", 20000.0); + psd0.add("NxBins", 150); desc.add("NClustersLayer", psd0); } { diff --git a/DQM/SiTrackerPhase2/plugins/Phase2ITMonitorRecHit.cc b/DQM/SiTrackerPhase2/plugins/Phase2ITMonitorRecHit.cc index 54b3b82cc70e6..655b96dd3d6c0 100644 --- a/DQM/SiTrackerPhase2/plugins/Phase2ITMonitorRecHit.cc +++ b/DQM/SiTrackerPhase2/plugins/Phase2ITMonitorRecHit.cc @@ -270,8 +270,8 @@ void Phase2ITMonitorRecHit::fillDescriptions(edm::ConfigurationDescriptions& des psd0.add("title", "NumberRecHits;Number of RecHits;"); psd0.add("xmin", 0.0); psd0.add("switch", true); - psd0.add("xmax", 0.0); - psd0.add("NxBins", 50); + psd0.add("xmax", 250000.0); + psd0.add("NxBins", 250); desc.add("GlobalNumberRecHits", psd0); } { @@ -333,8 +333,8 @@ void Phase2ITMonitorRecHit::fillDescriptions(edm::ConfigurationDescriptions& des psd0.add("title", "NumberRecHits;Number of RecHits;"); psd0.add("xmin", 0.0); psd0.add("switch", true); - psd0.add("xmax", 0.0); - psd0.add("NxBins", 50); + psd0.add("xmax", 150000.0); + psd0.add("NxBins", 150); desc.add("LocalNumberRecHits", psd0); } { @@ -392,8 +392,8 @@ void Phase2ITMonitorRecHit::fillDescriptions(edm::ConfigurationDescriptions& des psd0.add("title", "Cluster_SizeY;cluster size y;"); psd0.add("xmin", -0.5); psd0.add("switch", true); - psd0.add("xmax", 20.5); - psd0.add("NxBins", 21); + psd0.add("xmax", 25.5); + psd0.add("NxBins", 26); desc.add("LocalClusterSizeY", psd0); } { @@ -419,7 +419,7 @@ void Phase2ITMonitorRecHit::fillDescriptions(edm::ConfigurationDescriptions& des { edm::ParameterSetDescription psd0; psd0.add("name", "RecHit_X_error_Vs_eta"); - psd0.add("title", "RecHit_X_error_Vs_eta;#eta;x error #times 10^{6}"); + psd0.add("title", "RecHit_X_error_Vs_eta;#eta;x error [#mum]"); psd0.add("switch", true); psd0.add("NxBins", 82); psd0.add("xmax", 4.1); @@ -431,7 +431,7 @@ void Phase2ITMonitorRecHit::fillDescriptions(edm::ConfigurationDescriptions& des { edm::ParameterSetDescription psd0; psd0.add("name", "RecHit_Y_error_Vs_eta"); - psd0.add("title", "RecHit_Y_error_Vs_eta;#eta;y error #times 10^{6}"); + psd0.add("title", "RecHit_Y_error_Vs_eta;#eta;y error [#mum]"); psd0.add("switch", true); psd0.add("NxBins", 82); psd0.add("xmax", 4.1); diff --git a/DQM/SiTrackerPhase2/plugins/Phase2OTMonitorCluster.cc b/DQM/SiTrackerPhase2/plugins/Phase2OTMonitorCluster.cc index 3533db537cf1e..6ff1f20b7f23d 100644 --- a/DQM/SiTrackerPhase2/plugins/Phase2OTMonitorCluster.cc +++ b/DQM/SiTrackerPhase2/plugins/Phase2OTMonitorCluster.cc @@ -275,8 +275,8 @@ void Phase2OTMonitorCluster::fillDescriptions(edm::ConfigurationDescriptions& de psd0.add("title", ";Number of clusters per event;"); psd0.add("xmin", 0.0); psd0.add("switch", true); - psd0.add("xmax", 0.0); - psd0.add("NxBins", 50); + psd0.add("xmax", 350000.0); + psd0.add("NxBins", 150); desc.add("GlobalNClusters", psd0); } { @@ -338,8 +338,8 @@ void Phase2OTMonitorCluster::fillDescriptions(edm::ConfigurationDescriptions& de psd0.add("name", "NumberOfClustersLayerP"); psd0.add("title", ";Number of clusters per event(macro pixel sensor);"); psd0.add("xmin", 0.0); - psd0.add("xmax", 0.0); - psd0.add("NxBins", 50); + psd0.add("xmax", 28000.0); + psd0.add("NxBins", 150); psd0.add("switch", true); desc.add("NClustersLayer_P", psd0); } @@ -348,8 +348,8 @@ void Phase2OTMonitorCluster::fillDescriptions(edm::ConfigurationDescriptions& de psd0.add("name", "NumberOfClustersLayerS"); psd0.add("title", ";Number of clusters per event(strip sensor);"); psd0.add("xmin", 0.0); - psd0.add("xmax", 0.0); - psd0.add("NxBins", 50); + psd0.add("xmax", 28000.0); + psd0.add("NxBins", 150); psd0.add("switch", true); desc.add("NClustersLayer_S", psd0); } diff --git a/DQM/TrackerCommon/interface/TriggerHelper.h b/DQM/TrackerCommon/interface/TriggerHelper.h index aad0190593ce0..06ae22eaee3a4 100644 --- a/DQM/TrackerCommon/interface/TriggerHelper.h +++ b/DQM/TrackerCommon/interface/TriggerHelper.h @@ -18,7 +18,6 @@ \author Volker Adler */ -#include "CondFormats/DataRecord/interface/AlCaRecoTriggerBitsRcd.h" #include "DataFormats/Common/interface/TriggerResults.h" #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h" #include "DataFormats/Scalers/interface/DcsStatus.h" @@ -26,11 +25,15 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Run.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/ESGetToken.h" #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h" #include "L1Trigger/GlobalTriggerAnalyzer/interface/L1GtUtils.h" #include +class AlCaRecoTriggerBits; +class AlCaRecoTriggerBitsRcd; namespace edm { class ConsumesCollector; class ParameterSet; @@ -50,11 +53,13 @@ class TriggerHelper { bool errorReplyDcs_; bool andOrGt_; edm::InputTag gtInputTag_; + edm::EDGetTokenT gtInputToken_; std::string gtDBKey_; std::vector gtLogicalExpressions_; bool errorReplyGt_; bool andOrL1_; std::string l1DBKey_; + edm::ESGetToken alcaRecotriggerBitsToken_; std::vector l1LogicalExpressions_; bool errorReplyL1_; bool andOrHlt_; @@ -119,13 +124,17 @@ class TriggerHelper { template TriggerHelper::TriggerHelper(const edm::ParameterSet &config, edm::ConsumesCollector &&iC, T &module) - : TriggerHelper(config, iC, module) {} + : TriggerHelper(config, iC, module) { + gtInputTag_ = config.getParameter("gtInputTag"); + gtInputToken_ = iC.consumes(gtInputTag_); + alcaRecotriggerBitsToken_ = iC.esConsumes(); +} template TriggerHelper::TriggerHelper(const edm::ParameterSet &config, edm::ConsumesCollector &iC, T &module) : TriggerHelper(config) { if (onL1_ && (!l1DBKey_.empty() || !l1LogicalExpressions_.empty())) { - l1Gt_.reset(new L1GtUtils(config, iC, false, module, L1GtUtils::UseEventSetupIn::Event)); + l1Gt_ = std::make_unique(config, iC, false, module, L1GtUtils::UseEventSetupIn::Event); } } diff --git a/DQM/TrackerCommon/plugins/DetectorStateFilter.cc b/DQM/TrackerCommon/plugins/DetectorStateFilter.cc index 9577d37054cf5..77ae01a2088e8 100644 --- a/DQM/TrackerCommon/plugins/DetectorStateFilter.cc +++ b/DQM/TrackerCommon/plugins/DetectorStateFilter.cc @@ -6,9 +6,6 @@ #include "DataFormats/FEDRawData/interface/FEDNumbering.h" #include "DataFormats/FEDRawData/interface/FEDRawData.h" #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" - -#include - // // -- Constructor // @@ -39,10 +36,11 @@ bool DetectorStateFilter::filter(edm::Event &evt, edm::EventSetup const &es) { nSelectedEvents_++; } else detectorOn_ = false; - if (verbose_) - std::cout << " Total Events " << nEvents_ << " Selected Events " << nSelectedEvents_ << " DCS States : " - << " BPix " << (*dcsStatus)[0].ready(DcsStatus::BPIX) << " FPix " - << (*dcsStatus)[0].ready(DcsStatus::FPIX) << " Detector State " << detectorOn_ << std::endl; + //if (verbose_) + edm::LogInfo("DetectorStatusFilter") + << " Total Events " << nEvents_ << " Selected Events " << nSelectedEvents_ << " DCS States : " + << " BPix " << (*dcsStatus)[0].ready(DcsStatus::BPIX) << " FPix " << (*dcsStatus)[0].ready(DcsStatus::FPIX) + << " Detector State " << detectorOn_ << std::endl; } else if (detectorType_ == "sistrip" && !dcsStatus->empty()) { if ((*dcsStatus)[0].ready(DcsStatus::TIBTID) && (*dcsStatus)[0].ready(DcsStatus::TOB) && (*dcsStatus)[0].ready(DcsStatus::TECp) && (*dcsStatus)[0].ready(DcsStatus::TECm)) { @@ -50,12 +48,12 @@ bool DetectorStateFilter::filter(edm::Event &evt, edm::EventSetup const &es) { nSelectedEvents_++; } else detectorOn_ = false; - if (verbose_) - std::cout << " Total Events " << nEvents_ << " Selected Events " << nSelectedEvents_ << " DCS States : " - << " TEC- " << (*dcsStatus)[0].ready(DcsStatus::TECm) << " TEC+ " - << (*dcsStatus)[0].ready(DcsStatus::TECp) << " TIB/TID " << (*dcsStatus)[0].ready(DcsStatus::TIBTID) - << " TOB " << (*dcsStatus)[0].ready(DcsStatus::TOB) << " Detector States " << detectorOn_ - << std::endl; + //if (verbose_) + edm::LogInfo("DetectorStatusFilter") + << " Total Events " << nEvents_ << " Selected Events " << nSelectedEvents_ << " DCS States : " + << " TEC- " << (*dcsStatus)[0].ready(DcsStatus::TECm) << " TEC+ " << (*dcsStatus)[0].ready(DcsStatus::TECp) + << " TIB/TID " << (*dcsStatus)[0].ready(DcsStatus::TIBTID) << " TOB " + << (*dcsStatus)[0].ready(DcsStatus::TOB) << " Detector States " << detectorOn_ << std::endl; } } else { edm::LogError("DetectorStatusFilter") << "ERROR: DcsStatusCollection not found !"; @@ -63,9 +61,9 @@ bool DetectorStateFilter::filter(edm::Event &evt, edm::EventSetup const &es) { } else { detectorOn_ = true; nSelectedEvents_++; - if (verbose_) - std::cout << "Total MC Events " << nEvents_ << " Selected Events " << nSelectedEvents_ << " Detector States " - << detectorOn_ << std::endl; + //if (verbose_) + edm::LogInfo("DetectorStatusFilter") << "Total MC Events " << nEvents_ << " Selected Events " << nSelectedEvents_ + << " Detector States " << detectorOn_ << std::endl; } return detectorOn_; } diff --git a/DQM/TrackerCommon/plugins/SimpleEventFilter.cc b/DQM/TrackerCommon/plugins/SimpleEventFilter.cc index fd3464a59342d..010ceed1e044a 100644 --- a/DQM/TrackerCommon/plugins/SimpleEventFilter.cc +++ b/DQM/TrackerCommon/plugins/SimpleEventFilter.cc @@ -1,6 +1,5 @@ #include "DQM/TrackerCommon/plugins/SimpleEventFilter.h" -#include - +#include "FWCore/MessageLogger/interface/MessageLogger.h" // // -- Constructor // @@ -19,8 +18,9 @@ bool SimpleEventFilter::filter(edm::Event &, edm::EventSetup const &) { bool ret = true; if (nEvent_ % nInterval_ != 0) ret = false; - if (verbose_ && !ret) - std::cout << ">>> filtering event" << nEvent_ << std::endl; + //if (verbose_ && !ret) + if (!ret) + edm::LogInfo("SimpleEventFilter") << ">>> filtering event" << nEvent_ << std::endl; return ret; } diff --git a/DQM/TrackerCommon/plugins/SimpleEventFilter.h b/DQM/TrackerCommon/plugins/SimpleEventFilter.h index 3b1d1e127725f..44694aebfdef0 100644 --- a/DQM/TrackerCommon/plugins/SimpleEventFilter.h +++ b/DQM/TrackerCommon/plugins/SimpleEventFilter.h @@ -1,10 +1,10 @@ #ifndef SimpleEventFilter_H #define SimpleEventFilter_H -#include "FWCore/Framework/interface/EDFilter.h" +#include "FWCore/Framework/interface/stream/EDFilter.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -class SimpleEventFilter : public edm::EDFilter { +class SimpleEventFilter : public edm::stream::EDFilter<> { public: SimpleEventFilter(const edm::ParameterSet &); ~SimpleEventFilter() override; diff --git a/DQM/TrackerCommon/src/TriggerHelper.cc b/DQM/TrackerCommon/src/TriggerHelper.cc index a9c39adc4207b..31366101d4dfb 100644 --- a/DQM/TrackerCommon/src/TriggerHelper.cc +++ b/DQM/TrackerCommon/src/TriggerHelper.cc @@ -1,13 +1,10 @@ // // - -#include "DQM/TrackerCommon/interface/TriggerHelper.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" - #include "CondFormats/HLTObjects/interface/AlCaRecoTriggerBits.h" +#include "CondFormats/DataRecord/interface/AlCaRecoTriggerBitsRcd.h" #include "DataFormats/L1GlobalTrigger/interface/L1GtLogicParser.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "DQM/TrackerCommon/interface/TriggerHelper.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include @@ -45,7 +42,6 @@ TriggerHelper::TriggerHelper(const edm::ParameterSet &config) } if (config.exists("andOrGt")) { andOrGt_ = config.getParameter("andOrGt"); - gtInputTag_ = config.getParameter("gtInputTag"); gtLogicalExpressions_ = config.getParameter>("gtStatusBits"); errorReplyGt_ = config.getParameter("errorReplyGt"); if (config.exists("gtDBKey")) @@ -216,10 +212,10 @@ bool TriggerHelper::acceptGt(const edm::Event &event) { // Accessing the L1GlobalTriggerReadoutRecord edm::Handle gtReadoutRecord; - event.getByLabel(gtInputTag_, gtReadoutRecord); + event.getByToken(gtInputToken_, gtReadoutRecord); if (!gtReadoutRecord.isValid()) { - edm::LogError("TriggerHelper") << "L1GlobalTriggerReadoutRecord product with InputTag \"" << gtInputTag_.encode() - << "\" not in event ==> decision: " << errorReplyGt_; + //edm::LogError("TriggerHelper") << "L1GlobalTriggerReadoutRecord product with InputTag \"" << gtInputTag_.encode() + // << "\" not in event ==> decision: " << errorReplyGt_; return errorReplyGt_; } @@ -440,8 +436,7 @@ bool TriggerHelper::acceptHltLogicalExpression(const edm::Handle TriggerHelper::expressionsFromDB(const std::string &key, const edm::EventSetup &setup) { - edm::ESHandle logicalExpressions; - setup.get().get(logicalExpressions); + const AlCaRecoTriggerBits *logicalExpressions = &(setup.getData(alcaRecotriggerBitsToken_)); const std::map &expressionMap = logicalExpressions->m_alcarecoToTrig; std::map::const_iterator listIter = expressionMap.find(key); if (listIter == expressionMap.end()) { diff --git a/DQM/TrackerCommon/test/AlCaRecoTriggerBits_SiStripDQM_create_cfg.py b/DQM/TrackerCommon/test/AlCaRecoTriggerBits_SiStripDQM_create_cfg.py index e0a7a9c6e0ede..e05dd7322836f 100644 --- a/DQM/TrackerCommon/test/AlCaRecoTriggerBits_SiStripDQM_create_cfg.py +++ b/DQM/TrackerCommon/test/AlCaRecoTriggerBits_SiStripDQM_create_cfg.py @@ -3,9 +3,7 @@ process = cms.Process( "CREATE" ) process.load( "FWCore.MessageLogger.MessageLogger_cfi" ) -process.MessageLogger.cerr = cms.untracked.PSet( - placeholder = cms.untracked.bool( True ) -) +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32( 1 ) diff --git a/DQM/TrackerCommon/test/AlCaRecoTriggerBits_SiStripDQM_read_cfg.py b/DQM/TrackerCommon/test/AlCaRecoTriggerBits_SiStripDQM_read_cfg.py index d5409f3f94b61..f6c7730370150 100644 --- a/DQM/TrackerCommon/test/AlCaRecoTriggerBits_SiStripDQM_read_cfg.py +++ b/DQM/TrackerCommon/test/AlCaRecoTriggerBits_SiStripDQM_read_cfg.py @@ -3,9 +3,7 @@ process = cms.Process( "READ" ) process.load( "FWCore.MessageLogger.MessageLogger_cfi" ) -process.MessageLogger.cerr = cms.untracked.PSet( - placeholder = cms.untracked.bool( True ) -) +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32( 250 ) diff --git a/DQM/TrackingMonitor/interface/LogMessageMonitor.h b/DQM/TrackingMonitor/interface/LogMessageMonitor.h index e637b1a0b3c5e..a1353ebd59a92 100644 --- a/DQM/TrackingMonitor/interface/LogMessageMonitor.h +++ b/DQM/TrackingMonitor/interface/LogMessageMonitor.h @@ -31,8 +31,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/MessageLogger/interface/ErrorSummaryEntry.h" +#include "DataFormats/Common/interface/ErrorSummaryEntry.h" #include #include diff --git a/DQM/TrackingMonitor/src/LogMessageMonitor.cc b/DQM/TrackingMonitor/src/LogMessageMonitor.cc index 8087d758361ed..35a596b4a9b80 100644 --- a/DQM/TrackingMonitor/src/LogMessageMonitor.cc +++ b/DQM/TrackingMonitor/src/LogMessageMonitor.cc @@ -119,8 +119,6 @@ void LogMessageMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& // Check that errors is valid if (!errors.isValid()) return; - // Compare severity level of error with ELseveritylevel instance el : "-e" should be the lowest error - edm::ELseverityLevel el("-e"); // Find the total number of errors in iEvent if (errors->empty()) { diff --git a/DQM/TrackingMonitorClient/interface/TrackingCertificationInfo.h b/DQM/TrackingMonitorClient/interface/TrackingCertificationInfo.h index e9b944f482659..7786be32cdf9f 100644 --- a/DQM/TrackingMonitorClient/interface/TrackingCertificationInfo.h +++ b/DQM/TrackingMonitorClient/interface/TrackingCertificationInfo.h @@ -19,19 +19,22 @@ #include "DQMServices/Core/interface/DQMEDHarvester.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/LuminosityBlock.h" #include "FWCore/Framework/interface/Run.h" #include "FWCore/Framework/interface/EventSetup.h" #include "DQMServices/Core/interface/DQMStore.h" -#include #include #include #include #include class SiStripDetCabling; +class SiStripDetCablingRcd; +class RunInfo; +class RunInfoRcd; class TrackingCertificationInfo : public DQMEDHarvester { public: @@ -86,7 +89,6 @@ class TrackingCertificationInfo : public DQMEDHarvester { MonitorElement* TrackingLSCertification; - edm::ESHandle detCabling_; edm::ParameterSet pSet_; bool trackingCertificationBooked_; @@ -100,6 +102,12 @@ class TrackingCertificationInfo : public DQMEDHarvester { unsigned long long m_cacheID_; + edm::ESGetToken runInfoToken_; + const RunInfo* sumFED_ = nullptr; + edm::ESGetToken detCablingToken_; + edm::ESWatcher fedDetCablingWatcher_; + const SiStripDetCabling* detCabling_; + std::vector SubDetFolder; }; #endif diff --git a/DQM/TrackingMonitorClient/interface/TrackingQualityChecker.h b/DQM/TrackingMonitorClient/interface/TrackingQualityChecker.h index 2633dca4c084b..a38302419ff77 100644 --- a/DQM/TrackingMonitorClient/interface/TrackingQualityChecker.h +++ b/DQM/TrackingMonitorClient/interface/TrackingQualityChecker.h @@ -6,7 +6,6 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include #include #include #include diff --git a/DQM/TrackingMonitorClient/plugins/TrackingAnalyzer.cc b/DQM/TrackingMonitorClient/plugins/TrackingAnalyzer.cc index b891533ea8992..d1f22a2d3c812 100644 --- a/DQM/TrackingMonitorClient/plugins/TrackingAnalyzer.cc +++ b/DQM/TrackingMonitorClient/plugins/TrackingAnalyzer.cc @@ -26,7 +26,6 @@ #include "DQM/TrackingMonitorClient/interface/TrackingActionExecutor.h" #include "DQM/TrackingMonitorClient/interface/TrackingUtility.h" -#include #include #include #include @@ -39,9 +38,11 @@ // -- Constructor // TrackingAnalyser::TrackingAnalyser(edm::ParameterSet const& ps) - : verbose_(ps.getUntrackedParameter("verbose", false)) { - if (verbose_) - std::cout << "[TrackingAnalyser::TrackingAnalyser]" << std::endl; + : verbose_(ps.getUntrackedParameter("verbose", false)), + fedCablingToken_(esConsumes()), + detCablingToken_(esConsumes()) { + edm::LogInfo("TrackingAnalyser") << "Creating TrackingAnalyser "; + // Get TkMap ParameterSet // tkMapPSet_ = ps.getParameter("TkmapParameters"); @@ -50,8 +51,8 @@ TrackingAnalyser::TrackingAnalyser(edm::ParameterSet const& ps) char buf[BUF_SIZE]; if (!fin) { - std::cerr << "Input File: loader.html" - << " could not be opened!" << std::endl; + edm::LogError("TrackingAnalyzer") << "Input File: loader.html" + << " could not be opened!" << std::endl; return; } @@ -60,7 +61,6 @@ TrackingAnalyser::TrackingAnalyser(edm::ParameterSet const& ps) } fin.close(); - edm::LogInfo("TrackingAnalyser") << " TrackingAnalyser::Creating TrackingAnalyser "; staticUpdateFrequency_ = ps.getUntrackedParameter("StaticUpdateFrequency", 1); globalStatusFilling_ = ps.getUntrackedParameter("GlobalStatusFilling", 1); shiftReportFrequency_ = ps.getUntrackedParameter("ShiftReportFrequency", 1); @@ -80,9 +80,7 @@ TrackingAnalyser::TrackingAnalyser(edm::ParameterSet const& ps) // // -- Destructor // -TrackingAnalyser::~TrackingAnalyser() { - edm::LogInfo("TrackingAnalyser") << "TrackingAnalyser::Deleting TrackingAnalyser "; -} +TrackingAnalyser::~TrackingAnalyser() { edm::LogInfo("TrackingAnalyser") << "Deleting TrackingAnalyser "; } // // -- Begin Job // @@ -91,18 +89,14 @@ void TrackingAnalyser::beginJob() { nLumiSecs_ = 0; } // -- Begin Run // void TrackingAnalyser::beginRun(edm::Run const& run, edm::EventSetup const& eSetup) { - edm::LogInfo("TrackingAnalyser") << "TrackingAnalyser:: Begining of Run"; + edm::LogInfo("TrackingAnalyser") << " Begining of Run"; - if (verbose_) - std::cout << "[TrackingAnalyser::beginRun]" << std::endl; // Check latest Fed cabling and create TrackerMapCreator - unsigned long long cacheID = eSetup.get().cacheIdentifier(); - if (m_cacheID_ != cacheID) { - m_cacheID_ = cacheID; - edm::LogInfo("TrackingAnalyser") << "TrackingAnalyser::beginRun: " + if (fedCablingWatcher_.check(eSetup)) { //this should check if cabling record has changed + edm::LogInfo("TrackingAnalyser") << "beginRun: " << " Change in Cabling, recrated TrackerMap"; - eSetup.get().get(fedCabling_); - eSetup.get().get(detCabling_); + fedCabling_ = &eSetup.getData(fedCablingToken_); + detCabling_ = &eSetup.getData(detCablingToken_); } } // @@ -112,9 +106,7 @@ void TrackingAnalyser::dqmBeginLuminosityBlock(DQMStore::IBooker& ibooker_, DQMStore::IGetter& igetter_, edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& eSetup) { - edm::LogInfo("TrackingAnalyser") << "TrackingAnalyser:: Begin of LS transition"; - if (verbose_) - std::cout << "[TrackingAnalyser::dqmBeginLuminosityBlock]" << std::endl; + edm::LogInfo("TrackingAnalyser") << " Begin of LS transition"; } // @@ -124,14 +116,13 @@ void TrackingAnalyser::dqmEndLuminosityBlock(DQMStore::IBooker& ibooker_, DQMStore::IGetter& igetter_, edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& eSetup) { - edm::LogInfo("TrackingAnalyser") << "TrackingAnalyser:: End of LS transition, performing the DQM client operation"; - if (verbose_) - std::cout << "[TrackingAnalyser::endLuminosityBlock]" << std::endl; + edm::LogInfo("TrackingAnalyser") << " End of LS transition, performing the DQM client operation"; + nLumiSecs_++; if (verbose_) - std::cout << "[TrackingAnalyser::endLuminosityBlock] globalStatusFilling_ " - << (globalStatusFilling_ ? "YES" : "NOPE") << std::endl; + edm::LogInfo("TrackingAnalyser") << "[TrackingAnalyser::endLuminosityBlock] globalStatusFilling_ " + << (globalStatusFilling_ ? "YES" : "NOPE") << std::endl; if (globalStatusFilling_) actionExecutor_->createGlobalStatus(ibooker_, igetter_); @@ -139,11 +130,11 @@ void TrackingAnalyser::dqmEndLuminosityBlock(DQMStore::IBooker& ibooker_, checkTrackerFEDsInLS(igetter_, iLS); checkTrackerFEDsWdataInLS(igetter_, iLS); if (verbose_) - std::cout << "[TrackingAnalyser::endLuminosityBlock] trackerFEDsFound_ " << (trackerFEDsFound_ ? "YES" : "NOPE") - << std::endl; + edm::LogInfo("TrackingAnalyser") << "endLuminosityBlock trackerFEDsFound_ " << (trackerFEDsFound_ ? "YES" : "NOPE") + << std::endl; if (verbose_) - std::cout << "[TrackingAnalyser::endLuminosityBlock] trackerFEDsWdataFound_ " - << (trackerFEDsWdataFound_ ? "YES" : "NOPE") << std::endl; + edm::LogInfo("TrackingAnalyser") << "endLuminosityBlock trackerFEDsWdataFound_ " + << (trackerFEDsWdataFound_ ? "YES" : "NOPE") << std::endl; if (!trackerFEDsFound_) { actionExecutor_->fillDummyGlobalStatus(); @@ -162,20 +153,19 @@ void TrackingAnalyser::dqmEndLuminosityBlock(DQMStore::IBooker& ibooker_, } if (verbose_) - std::cout << "====================================================== " << std::endl; + edm::LogInfo("TrackingAnalyser") << "====================================================== " << std::endl; if (verbose_) - std::cout << " ===> Iteration # " << nLumiSecs_ << " " << lumiSeg.luminosityBlock() << std::endl; + edm::LogInfo("TrackingAnalyser") << " ===> Iteration # " << nLumiSecs_ << " " << lumiSeg.luminosityBlock() + << std::endl; if (verbose_) - std::cout << "====================================================== " << std::endl; + edm::LogInfo("TrackingAnalyser") << "====================================================== " << std::endl; } // // -- End Job // void TrackingAnalyser::dqmEndJob(DQMStore::IBooker& ibooker_, DQMStore::IGetter& igetter_) { - edm::LogInfo("TrackingAnalyser") << "TrackingAnalyser:: endjob called!"; - if (verbose_) - std::cout << "[TrackingAnalyser::dqmEndJob]" << std::endl; + edm::LogInfo("TrackingAnalyser") << " endjob called!"; if (globalStatusFilling_) actionExecutor_->createGlobalStatus(ibooker_, igetter_); @@ -194,36 +184,36 @@ void TrackingAnalyser::checkTrackerFEDsInLS(DQMStore::IGetter& igetter, double i TProfile* tmpP = tmpME->getTProfile(); size_t ibin = tmpP->GetXaxis()->FindBin(iLS); if (verbose_) - std::cout << "iLS: " << iLS << " ibin: " << ibin; + edm::LogInfo("TrackingAnalyser") << "iLS: " << iLS << " ibin: " << ibin; nFEDinLS = tmpME->getBinContent(ibin); if (verbose_) - std::cout << " ---> nFEDinLS: " << nFEDinLS; + edm::LogInfo("TrackingAnalyser") << " ---> nFEDinLS: " << nFEDinLS; } trackerFEDsFound_ = (nFEDinLS > 0); if (verbose_) - std::cout << " ---> trackerFEDsFound_: " << trackerFEDsFound_ << std::endl; + edm::LogInfo("TrackingAnalyser") << " ---> trackerFEDsFound_: " << trackerFEDsFound_ << std::endl; } void TrackingAnalyser::checkTrackerFEDsWdataInLS(DQMStore::IGetter& igetter, double iLS) { double nFEDinLS = 0.; MonitorElement* tmpME = igetter.get(nFEDinfoDir_ + "/" + nFEDinWdataVsLSname_); if (verbose_) - std::cout << "found " << nFEDinfoDir_ << "/" << nFEDinWdataVsLSname_ << " ? " << (tmpME ? "YES" : "NOPE") - << std::endl; + edm::LogInfo("TrackingAnalyser") << "found " << nFEDinfoDir_ << "/" << nFEDinWdataVsLSname_ << " ? " + << (tmpME ? "YES" : "NOPE") << std::endl; if (tmpME) { TProfile* tmpP = tmpME->getTProfile(); size_t ibin = tmpP->GetXaxis()->FindBin(iLS); if (verbose_) - std::cout << "iLS: " << iLS << " ibin: " << ibin; + edm::LogInfo("TrackingAnalyser") << "iLS: " << iLS << " ibin: " << ibin; nFEDinLS = tmpME->getBinContent(ibin); if (verbose_) - std::cout << " ---> nFEDinLS: " << nFEDinLS; + edm::LogInfo("TrackingAnalyser") << " ---> nFEDinLS: " << nFEDinLS; } trackerFEDsWdataFound_ = (nFEDinLS > 0); if (verbose_) - std::cout << " ---> trackerFEDsWdataFound_: " << trackerFEDsWdataFound_ << std::endl; + edm::LogInfo("TrackingAnalyser") << " ---> trackerFEDsWdataFound_: " << trackerFEDsWdataFound_ << std::endl; } #include "FWCore/Framework/interface/MakerMacros.h" diff --git a/DQM/TrackingMonitorClient/plugins/TrackingAnalyzer.h b/DQM/TrackingMonitorClient/plugins/TrackingAnalyzer.h index 47c6f9ffb1252..e4bf99d27c7d0 100644 --- a/DQM/TrackingMonitorClient/plugins/TrackingAnalyzer.h +++ b/DQM/TrackingMonitorClient/plugins/TrackingAnalyzer.h @@ -8,7 +8,7 @@ #include "FWCore/Framework/interface/LuminosityBlock.h" #include "FWCore/Framework/interface/Run.h" #include "FWCore/Framework/interface/EventSetup.h" - +#include "FWCore/Framework/interface/ESWatcher.h" #include "DQMServices/Core/interface/DQMStore.h" #include @@ -21,6 +21,8 @@ class SiStripFedCabling; class SiStripDetCabling; class TrackingActionExecutor; class FEDRawDataCollection; +class SiStripFedCablingRcd; +class SiStripDetCablingRcd; class TrackingAnalyser : public DQMEDHarvester { public: @@ -69,8 +71,11 @@ class TrackingAnalyser : public DQMEDHarvester { std::string outputFileName_; edm::ParameterSet tkMapPSet_; - edm::ESHandle fedCabling_; - edm::ESHandle detCabling_; + edm::ESGetToken fedCablingToken_; + edm::ESGetToken detCablingToken_; + edm::ESWatcher fedCablingWatcher_; + const SiStripFedCabling* fedCabling_; + const SiStripDetCabling* detCabling_; TrackingActionExecutor* actionExecutor_; unsigned long long m_cacheID_; diff --git a/DQM/TrackingMonitorClient/plugins/TrackingDQMClientHeavyIons.h b/DQM/TrackingMonitorClient/plugins/TrackingDQMClientHeavyIons.h index 66b0e9d64db41..c8e8a4a9d56c8 100644 --- a/DQM/TrackingMonitorClient/plugins/TrackingDQMClientHeavyIons.h +++ b/DQM/TrackingMonitorClient/plugins/TrackingDQMClientHeavyIons.h @@ -3,9 +3,9 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "DQMServices/Core/interface/DQMEDHarvester.h" +#include "DQMServices/Core/interface/DQMStore.h" #include #include -#include "DQMServices/Core/interface/DQMStore.h" #include #include #include diff --git a/DQM/TrackingMonitorClient/plugins/TrackingOfflineDQM.cc b/DQM/TrackingMonitorClient/plugins/TrackingOfflineDQM.cc index 6173788123a80..d084f4be12c78 100644 --- a/DQM/TrackingMonitorClient/plugins/TrackingOfflineDQM.cc +++ b/DQM/TrackingMonitorClient/plugins/TrackingOfflineDQM.cc @@ -35,11 +35,11 @@ #include "CondFormats/DataRecord/interface/RunSummaryRcd.h" #include "CondFormats/RunInfo/interface/RunSummary.h" #include "CondFormats/RunInfo/interface/RunInfo.h" + // Cabling #include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" #include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" -#include #include #include #include @@ -53,7 +53,8 @@ * @param roPARAMETER_SET * Regular Parameter Set that represent read configuration file */ -TrackingOfflineDQM::TrackingOfflineDQM(edm::ParameterSet const& pSet) : configPar_(pSet) { +TrackingOfflineDQM::TrackingOfflineDQM(edm::ParameterSet const& pSet) + : configPar_(pSet), runInfoToken_(esConsumes()) { // Action Executor actionExecutor_ = new TrackingActionExecutor(pSet); @@ -86,22 +87,20 @@ void TrackingOfflineDQM::beginJob() { edm::LogInfo("BeginJobDone") << "TrackingO * Event Setup object with Geometry, Magnetic Field, etc. */ void TrackingOfflineDQM::beginRun(edm::Run const& run, edm::EventSetup const& eSetup) { - edm::LogInfo("BeginRun") << "TrackingOfflineDQM:: Begining of Run"; + edm::LogInfo("BeginRun") << " Begining of Run"; int nFEDs = 0; int nPixelFEDs = 0; - - if (auto runInfoRec = eSetup.tryToGet()) { - edm::ESHandle sumFED; - runInfoRec->get(sumFED); - - if (sumFED.isValid()) { + edm::ESHandle runInfoRec = eSetup.getHandle(runInfoToken_); + if (runInfoRec.isValid()) { + sumFED_ = runInfoRec.product(); + if (sumFED_ != nullptr) { const int siStripFedIdMin = FEDNumbering::MINSiStripFEDID; const int siStripFedIdMax = FEDNumbering::MAXSiStripFEDID; const int siPixelFedIdMin = FEDNumbering::MINSiPixelFEDID; const int siPixelFedIdMax = FEDNumbering::MAXSiPixelFEDID; - std::vector FedsInIds = sumFED->m_fed_in; + std::vector FedsInIds = sumFED_->m_fed_in; for (auto fedID : FedsInIds) { if (fedID >= siPixelFedIdMin && fedID <= siPixelFedIdMax) { ++nPixelFEDs; @@ -127,7 +126,7 @@ void TrackingOfflineDQM::dqmEndLuminosityBlock(DQMStore::IBooker& ibooker_, DQMStore::IGetter& igetter_, edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& iSetup) { - edm::LogInfo("TrackingOfflineDQM") << "TrackingOfflineDQM::dqmBeginLuminosityBlock"; + edm::LogInfo("TrackingOfflineDQM") << "dqmBeginLuminosityBlock"; if (globalStatusFilling_ > 0) { actionExecutor_->createLSStatus(ibooker_, igetter_); @@ -145,7 +144,7 @@ void TrackingOfflineDQM::dqmEndLuminosityBlock(DQMStore::IBooker& ibooker_, * */ void TrackingOfflineDQM::dqmEndJob(DQMStore::IBooker& ibooker_, DQMStore::IGetter& igetter_) { - edm::LogInfo("TrackingOfflineDQM") << "TrackingOfflineDQM::dqmEndJob"; + edm::LogInfo("TrackingOfflineDQM") << "dqmEndJob"; if (globalStatusFilling_ > 0) { actionExecutor_->createGlobalStatus(ibooker_, igetter_); diff --git a/DQM/TrackingMonitorClient/plugins/TrackingOfflineDQM.h b/DQM/TrackingMonitorClient/plugins/TrackingOfflineDQM.h index 0a732d43008da..d76e9185a95ae 100644 --- a/DQM/TrackingMonitorClient/plugins/TrackingOfflineDQM.h +++ b/DQM/TrackingMonitorClient/plugins/TrackingOfflineDQM.h @@ -38,6 +38,8 @@ class TrackingActionExecutor; class SiStripDetCabling; +class RunInfo; +class RunInfoRcd; class TrackingOfflineDQM : public DQMEDHarvester { public: @@ -67,7 +69,6 @@ class TrackingOfflineDQM : public DQMEDHarvester { bool openInputFile(); TrackingActionExecutor* actionExecutor_; - std::string inputFileName_; std::string outputFileName_; int globalStatusFilling_; @@ -76,5 +77,7 @@ class TrackingOfflineDQM : public DQMEDHarvester { bool allpixelFEDsFound_; edm::ParameterSet configPar_; + edm::ESGetToken runInfoToken_; + const RunInfo* sumFED_ = nullptr; }; #endif diff --git a/DQM/TrackingMonitorClient/src/TrackingCertificationInfo.cc b/DQM/TrackingMonitorClient/src/TrackingCertificationInfo.cc index d1e503acae8b8..7299cf5428d4a 100644 --- a/DQM/TrackingMonitorClient/src/TrackingCertificationInfo.cc +++ b/DQM/TrackingMonitorClient/src/TrackingCertificationInfo.cc @@ -18,7 +18,6 @@ #include "CondFormats/RunInfo/interface/RunSummary.h" #include "CondFormats/RunInfo/interface/RunInfo.h" -#include #include #include #include @@ -33,15 +32,16 @@ TrackingCertificationInfo::TrackingCertificationInfo(edm::ParameterSet const& pS trackingLSCertificationBooked_(false), nFEDConnected_(0), allPixelFEDConnected_(true), - m_cacheID_(0) { + m_cacheID_(0), + runInfoToken_(esConsumes()), + detCablingToken_(esConsumes()) { // Create MessageSender edm::LogInfo("TrackingCertificationInfo") << "TrackingCertificationInfo::Deleting TrackingCertificationInfo "; verbose_ = pSet_.getUntrackedParameter("verbose", false); TopFolderName_ = pSet_.getUntrackedParameter("TopFolderName", "Tracking"); if (verbose_) - std::cout << "[TrackingCertificationInfo::TrackingCertificationInfo] TopFolderName_: " << TopFolderName_ - << std::endl; + edm::LogInfo("TrackingCertificationInfo") << "TopFolderName_: " << TopFolderName_ << std::endl; TrackingMEs tracking_mes; // load variables for Global certification @@ -60,8 +60,7 @@ TrackingCertificationInfo::TrackingCertificationInfo(edm::ParameterSet const& pS tracking_mes.TrackingFlag = nullptr; if (verbose_) - std::cout << "[TrackingQualityChecker::TrackingCertificationInfo] inserting " << QTname << " in TrackingMEsMap" - << std::endl; + edm::LogInfo("TrackingCertificationInfo") << " inserting " << QTname << " in TrackingMEsMap" << std::endl; TrackingMEsMap.insert(std::pair(QTname, tracking_mes)); } @@ -74,8 +73,7 @@ TrackingCertificationInfo::TrackingCertificationInfo(edm::ParameterSet const& pS tracking_ls_mes.TrackingFlag = nullptr; if (verbose_) - std::cout << "[TrackingQualityChecker::TrackingCertificationInfo] inserting " << QTname << " in TrackingMEsMap" - << std::endl; + edm::LogInfo("TrackingCertificationInfo") << " inserting " << QTname << " in TrackingMEsMap" << std::endl; TrackingLSMEsMap.insert(std::pair(QTname, tracking_ls_mes)); } @@ -85,7 +83,7 @@ TrackingCertificationInfo::TrackingCertificationInfo(edm::ParameterSet const& pS } TrackingCertificationInfo::~TrackingCertificationInfo() { - edm::LogInfo("TrackingCertificationInfo") << "TrackingCertificationInfo::Deleting TrackingCertificationInfo "; + edm::LogInfo("TrackingCertificationInfo") << "Deleting TrackingCertificationInfo "; } // // -- Begin Job @@ -95,15 +93,14 @@ void TrackingCertificationInfo::beginJob() {} // -- Begin Run // void TrackingCertificationInfo::beginRun(edm::Run const& run, edm::EventSetup const& eSetup) { - if (verbose_) - std::cout << "[TrackingCertificationInfo::beginRun] starting .." << std::endl; + edm::LogInfo("TrackingCertificationInfo") << "beginRun starting .." << std::endl; + + detCabling_ = &(eSetup.getData(detCablingToken_)); - edm::LogInfo("TrackingCertificationInfo") << "TrackingCertificationInfo:: Begining of Run"; unsigned long long cacheID = eSetup.get().cacheIdentifier(); if (m_cacheID_ != cacheID) { m_cacheID_ = cacheID; } - eSetup.get().get(detCabling_); nFEDConnected_ = 0; int nPixelFEDConnected_ = 0; @@ -113,12 +110,11 @@ void TrackingCertificationInfo::beginRun(edm::Run const& run, edm::EventSetup co const int siPixelFedIdMax = FEDNumbering::MAXSiPixelFEDID; const int siPixelFeds = (siPixelFedIdMax - siPixelFedIdMin + 1); - if (auto runInfoRec = eSetup.tryToGet()) { - edm::ESHandle sumFED; - runInfoRec->get(sumFED); - - if (sumFED.isValid()) { - std::vector FedsInIds = sumFED->m_fed_in; + edm::ESHandle runInfoRec = eSetup.getHandle(runInfoToken_); + if (runInfoRec.isValid()) { + sumFED_ = runInfoRec.product(); + if (sumFED_ != nullptr) { + std::vector FedsInIds = sumFED_->m_fed_in; for (auto fedID : FedsInIds) { if (fedID >= siPixelFedIdMin && fedID <= siPixelFedIdMax) { ++nFEDConnected_; @@ -138,8 +134,9 @@ void TrackingCertificationInfo::beginRun(edm::Run const& run, edm::EventSetup co // void TrackingCertificationInfo::bookTrackingCertificationMEs(DQMStore::IBooker& ibooker_, DQMStore::IGetter& igetter_) { if (verbose_) - std::cout << "[TrackingCertificationInfo::bookTrackingCertificationMEs] starting .. trackingCertificationBooked_: " - << trackingCertificationBooked_ << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "bookTrackingCertificationMEs starting .. trackingCertificationBooked_: " << trackingCertificationBooked_ + << std::endl; if (!trackingCertificationBooked_) { ibooker_.cd(); @@ -174,11 +171,11 @@ void TrackingCertificationInfo::bookTrackingCertificationMEs(DQMStore::IBooker& for (std::map::iterator it = TrackingMEsMap.begin(); it != TrackingMEsMap.end(); it++) { std::string meQTname = it->first; if (verbose_) - std::cout << "[TrackingCertificationInfo::bookStatus] meQTname: " << meQTname << std::endl; + edm::LogInfo("TrackingCertificationInfo") << "bookStatus meQTname: " << meQTname << std::endl; it->second.TrackingFlag = ibooker_.bookFloat("Track" + meQTname); if (verbose_) - std::cout << "[TrackingCertificationInfo::bookStatus] " << it->first << " exists ? " << it->second.TrackingFlag - << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "bookStatus " << it->first << " exists ? " << it->second.TrackingFlag << std::endl; } trackingCertificationBooked_ = true; @@ -186,8 +183,8 @@ void TrackingCertificationInfo::bookTrackingCertificationMEs(DQMStore::IBooker& } if (verbose_) - std::cout << "[TrackingCertificationInfo::bookStatus] trackingCertificationBooked_: " - << trackingCertificationBooked_ << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "bookStatus trackingCertificationBooked_: " << trackingCertificationBooked_ << std::endl; } // @@ -196,8 +193,9 @@ void TrackingCertificationInfo::bookTrackingCertificationMEs(DQMStore::IBooker& void TrackingCertificationInfo::bookTrackingCertificationMEsAtLumi(DQMStore::IBooker& ibooker_, DQMStore::IGetter& igetter_) { if (verbose_) - std::cout << "[TrackingCertificationInfo::bookTrackingCertificationMEs] starting .. trackingCertificationBooked_: " - << trackingCertificationBooked_ << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "bookTrackingCertificationMEs starting .. trackingCertificationBooked_: " << trackingCertificationBooked_ + << std::endl; if (!trackingLSCertificationBooked_) { ibooker_.cd(); @@ -220,11 +218,11 @@ void TrackingCertificationInfo::bookTrackingCertificationMEsAtLumi(DQMStore::IBo it++) { std::string meQTname = it->first; if (verbose_) - std::cout << "[TrackingCertificationInfo::bookStatus] meQTname: " << meQTname << std::endl; + edm::LogInfo("TrackingCertificationInfo") << "bookStatus meQTname: " << meQTname << std::endl; it->second.TrackingFlag = ibooker_.bookFloat("Track" + meQTname); if (verbose_) - std::cout << "[TrackingCertificationInfo::bookStatus] " << it->first << " exists ? " << it->second.TrackingFlag - << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "bookStatus " << it->first << " exists ? " << it->second.TrackingFlag << std::endl; } trackingLSCertificationBooked_ = true; @@ -232,8 +230,9 @@ void TrackingCertificationInfo::bookTrackingCertificationMEsAtLumi(DQMStore::IBo } if (verbose_) - std::cout << "[TrackingCertificationInfo::bookStatus] trackingCertificationBooked_: " - << trackingCertificationBooked_ << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "[TrackingCertificationInfo::bookStatus] trackingCertificationBooked_: " << trackingCertificationBooked_ + << std::endl; } // @@ -244,7 +243,7 @@ void TrackingCertificationInfo::dqmEndLuminosityBlock(DQMStore::IBooker& ibooker DQMStore::IGetter& igetter_, edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& eSetup) { - edm::LogInfo("TrackingDaqInfo") << "TrackingDaqInfo::endLuminosityBlock"; + edm::LogInfo("TrackingCertificationInfo") << "endLuminosityBlock"; bookTrackingCertificationMEsAtLumi(ibooker_, igetter_); fillDummyTrackingCertificationAtLumi(ibooker_, igetter_); @@ -258,10 +257,8 @@ void TrackingCertificationInfo::dqmEndLuminosityBlock(DQMStore::IBooker& ibooker // -- End of Run // void TrackingCertificationInfo::dqmEndJob(DQMStore::IBooker& ibooker_, DQMStore::IGetter& igetter_) { - if (verbose_) - std::cout << "[TrackingCertificationInfo::dqmEndJob]" << std::endl; + edm::LogInfo("TrackingCertificationInfo") << "dqmEndJob" << std::endl; - edm::LogInfo("TrackingCertificationInfo") << "TrackingCertificationInfo:: End Run"; bookTrackingCertificationMEs(ibooker_, igetter_); fillDummyTrackingCertification(ibooker_, igetter_); @@ -270,15 +267,14 @@ void TrackingCertificationInfo::dqmEndJob(DQMStore::IBooker& ibooker_, DQMStore: else fillDummyTrackingCertification(ibooker_, igetter_); - if (verbose_) - std::cout << "[TrackingCertificationInfo::endRun] DONE" << std::endl; + edm::LogInfo("TrackingCertificationInfo") << "[TrackingCertificationInfo::endRun] DONE" << std::endl; } // // --Fill Tracking Certification // void TrackingCertificationInfo::fillTrackingCertificationMEs(DQMStore::IBooker& ibooker_, DQMStore::IGetter& igetter_) { if (!trackingCertificationBooked_) { - // edm::LogError("TrackingCertificationInfo") << " TrackingCertificationInfo::fillTrackingCertificationMEs : MEs missing "; + edm::LogError("TrackingCertificationInfo") << "fillTrackingCertificationMEs : MEs missing " << std::endl; return; } @@ -286,13 +282,13 @@ void TrackingCertificationInfo::fillTrackingCertificationMEs(DQMStore::IBooker& std::string tracking_dir = ""; TrackingUtility::getTopFolderPath(ibooker_, igetter_, TopFolderName_, tracking_dir); if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] tracking_dir: " << tracking_dir - << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "fillTrackingCertificationMEs tracking_dir: " << tracking_dir << std::endl; std::vector all_mes = igetter_.getContents(tracking_dir + "/EventInfo/reportSummaryContents"); float fval = 1.0; if (verbose_) - std::cout << "all_mes: " << all_mes.size() << std::endl; + edm::LogInfo("TrackingCertificationInfo") << "all_mes: " << all_mes.size() << std::endl; if (checkPixelFEDs_) { float val = 1.; @@ -306,8 +302,8 @@ void TrackingCertificationInfo::fillTrackingCertificationMEs(DQMStore::IBooker& it->second.TrackingFlag->Fill(val); TH2F* th2d = TrackingCertificationSummaryMap->getTH2F(); if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] xbin: " << xbin << " val: " << val - << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "fillTrackingCertificationMEs xbin: " << xbin << " val: " << val << std::endl; th2d->SetBinContent(xbin + 1, 1, val); } xbin++; @@ -321,7 +317,7 @@ void TrackingCertificationInfo::fillTrackingCertificationMEs(DQMStore::IBooker& if (!me) continue; if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] me: " << me->getName() << std::endl; + edm::LogInfo("TrackingCertificationInfo") << "fillTrackingCertificationMEs me: " << me->getName() << std::endl; if (me->kind() == MonitorElement::Kind::REAL) { const std::string& name = me->getName(); float val = me->getFloatValue(); @@ -329,35 +325,36 @@ void TrackingCertificationInfo::fillTrackingCertificationMEs(DQMStore::IBooker& for (std::map::const_iterator it = TrackingMEsMap.begin(); it != TrackingMEsMap.end(); it++) { if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] ME: " << it->first << " [" - << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() - << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "fillTrackingCertificationMEs ME: " << it->first << " [" << it->second.TrackingFlag->getFullname() + << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl; std::string type = it->first; if (name.find(type) != std::string::npos) { if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] type: " << type - << " <---> name: " << name << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "fillTrackingCertificationMEs type: " << type << " <---> name: " << name << std::endl; it->second.TrackingFlag->Fill(val); if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] xbin: " << xbin << " val: " << val - << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "fillTrackingCertificationMEs xbin: " << xbin << " val: " << val << std::endl; TH2F* th2d = TrackingCertificationSummaryMap->getTH2F(); th2d->SetBinContent(xbin + 1, 1, val); xbin++; break; } if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] ME: " << it->first << " [" - << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() - << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "[TrackingCertificationInfo::fillTrackingCertificationMEs] ME: " << it->first << " [" + << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() + << std::endl; } fval = fminf(fval, val); } } if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] TrackingCertification: " << fval - << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "fillTrackingCertificationMEs TrackingCertification: " << fval << std::endl; TrackingCertification->Fill(fval); } @@ -430,7 +427,7 @@ void TrackingCertificationInfo::fillDummyTrackingCertificationAtLumi(DQMStore::I void TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi(DQMStore::IBooker& ibooker_, DQMStore::IGetter& igetter_) { if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] starting .." << std::endl; + edm::LogInfo("TrackingCertificationInfo") << "fillTrackingCertificationMEsAtLumi starting .." << std::endl; if (!trackingLSCertificationBooked_) { return; } @@ -440,51 +437,54 @@ void TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi(DQMStore::IBo std::string tracking_dir = ""; TrackingUtility::getTopFolderPath(ibooker_, igetter_, TopFolderName_, tracking_dir); if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] tracking_dir: " << tracking_dir - << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "fillTrackingCertificationMEsAtLumi tracking_dir: " << tracking_dir << std::endl; if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] tracking_dir: " << tracking_dir - << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "fillTrackingCertificationMEsAtLumi tracking_dir: " << tracking_dir << std::endl; std::vector all_mes = igetter_.getContents(tracking_dir + "/EventInfo/reportSummaryContents"); if (verbose_) - std::cout << "all_mes: " << all_mes.size() << std::endl; + edm::LogInfo("TrackingCertificationInfo") << "all_mes: " << all_mes.size() << std::endl; for (std::vector::const_iterator ime = all_mes.begin(); ime != all_mes.end(); ime++) { MonitorElement* me = (*ime); if (!me) continue; if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] me: " << me->getName() << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "fillTrackingCertificationMEsAtLumi me: " << me->getName() << std::endl; if (me->kind() == MonitorElement::Kind::REAL) { const std::string& name = me->getName(); float val = me->getFloatValue(); if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] val: " << val << std::endl; + edm::LogInfo("TrackingCertificationInfo") << "fillTrackingCertificationMEsAtLumi val: " << val << std::endl; for (std::map::const_iterator it = TrackingLSMEsMap.begin(); it != TrackingLSMEsMap.end(); it++) { if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] ME: " << it->first << " [" - << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() - << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "fillTrackingCertificationMEsAtLumi ME: " << it->first << " [" + << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() + << std::endl; std::string type = it->first; if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] type: " << type << std::endl; + edm::LogInfo("TrackingCertificationInfo") << "fillTrackingCertificationMEsAtLumi type: " << type << std::endl; if (name.find(type) != std::string::npos) { if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] type: " << type - << " <---> name: " << name << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "fillTrackingCertificationMEsAtLumi type: " << type << " <---> name: " << name << std::endl; it->second.TrackingFlag->Fill(val); break; } if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] ME: " << it->first << " [" - << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() - << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "fillTrackingCertificationMEsAtLumi ME: " << it->first << " [" + << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() + << std::endl; } } } @@ -495,8 +495,8 @@ void TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi(DQMStore::IBo if (me_dqm && me_dqm->kind() == MonitorElement::Kind::REAL) global_dqm_flag = me_dqm->getFloatValue(); if (verbose_) - std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] global_dqm_flag: " << global_dqm_flag - << std::endl; + edm::LogInfo("TrackingCertificationInfo") + << "fillTrackingCertificationMEsAtLumi global_dqm_flag: " << global_dqm_flag << std::endl; TrackingLSCertification->Reset(); TrackingLSCertification->Fill(global_dqm_flag); diff --git a/DQM/TrackingMonitorClient/src/TrackingQualityChecker.cc b/DQM/TrackingMonitorClient/src/TrackingQualityChecker.cc index 3f711dc6a6b10..4221bac50904e 100644 --- a/DQM/TrackingMonitorClient/src/TrackingQualityChecker.cc +++ b/DQM/TrackingMonitorClient/src/TrackingQualityChecker.cc @@ -33,12 +33,11 @@ TrackingQualityChecker::TrackingQualityChecker(edm::ParameterSet const& ps) tracking_mes.HistoDir = meQTset.getParameter("dir"); tracking_mes.HistoName = meQTset.getParameter("name"); if (verbose_) - std::cout << "[TrackingQualityChecker::TrackingQualityChecker] inserting " << QTname << " in TrackingMEsMap" - << std::endl; + edm::LogInfo("TrackingQualityChecker") << " inserting " << QTname << " in TrackingMEsMap" << std::endl; TrackingMEsMap.insert(std::pair(QTname, tracking_mes)); } if (verbose_) - std::cout << "[TrackingQualityChecker::TrackingQualityChecker] created TrackingMEsMap" << std::endl; + edm::LogInfo("TrackingQualityChecker") << " created TrackingMEsMap" << std::endl; TrackingLSMEs tracking_ls_mes; std::vector TrackingLSQualityMEs = @@ -52,12 +51,11 @@ TrackingQualityChecker::TrackingQualityChecker(edm::ParameterSet const& ps) tracking_ls_mes.TrackingFlag = nullptr; if (verbose_) - std::cout << "[TrackingQualityChecker::TrackingQualityChecker] inserting " << QTname << " in TrackingMEsMap" - << std::endl; + edm::LogInfo("TrackingQualityChecker") << " inserting " << QTname << " in TrackingMEsMap" << std::endl; TrackingLSMEsMap.insert(std::pair(QTname, tracking_ls_mes)); } if (verbose_) - std::cout << "[TrackingQualityChecker::TrackingQualityChecker] created TrackingLSMEsMap" << std::endl; + edm::LogInfo("TrackingQualityChecker") << " created TrackingLSMEsMap" << std::endl; } // // -- Destructor @@ -71,8 +69,8 @@ TrackingQualityChecker::~TrackingQualityChecker() { // void TrackingQualityChecker::bookGlobalStatus(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) { if (verbose_) - std::cout << "[TrackingQualityChecker::bookGlobalStatus] already booked ? " - << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::bookGlobalStatus] already booked ? " + << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl; if (!bookedTrackingGlobalStatus_) { ibooker.cd(); @@ -91,7 +89,7 @@ void TrackingQualityChecker::bookGlobalStatus(DQMStore::IBooker& ibooker, DQMSto size_t nQT = TrackingMEsMap.size(); if (verbose_) - std::cout << "[TrackingQualityChecker::bookGlobalStatus] nQT: " << nQT << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::bookGlobalStatus] nQT: " << nQT << std::endl; TrackGlobalSummaryReportMap = ibooker.book2D(hname, htitle, nQT, 0.5, float(nQT) + 0.5, 1, 0.5, 1.5); TrackGlobalSummaryReportMap->setAxisTitle("Track Quality Type", 1); TrackGlobalSummaryReportMap->setAxisTitle("QTest Flag", 2); @@ -107,10 +105,11 @@ void TrackingQualityChecker::bookGlobalStatus(DQMStore::IBooker& ibooker, DQMSto std::string meQTname = it->first; it->second.TrackingFlag = ibooker.bookFloat("Track" + meQTname); if (verbose_) - std::cout << "[TrackingQualityChecker::bookGlobalStatus] " << it->first << " exists ? " - << it->second.TrackingFlag << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::bookGlobalStatus] " << it->first + << " exists ? " << it->second.TrackingFlag << std::endl; if (verbose_) - std::cout << "[TrackingQualityChecker::bookGlobalStatus] DONE w/ TrackingMEsMap" << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::bookGlobalStatus] DONE w/ TrackingMEsMap" << std::endl; } bookedTrackingGlobalStatus_ = true; @@ -120,8 +119,8 @@ void TrackingQualityChecker::bookGlobalStatus(DQMStore::IBooker& ibooker, DQMSto void TrackingQualityChecker::bookLSStatus(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) { if (verbose_) - std::cout << "[TrackingQualityChecker::bookLSStatus] already booked ? " - << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::bookLSStatus] already booked ? " + << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl; if (!bookedTrackingLSStatus_) { ibooker.cd(); @@ -140,7 +139,7 @@ void TrackingQualityChecker::bookLSStatus(DQMStore::IBooker& ibooker, DQMStore:: if (verbose_) { size_t nQT = TrackingLSMEsMap.size(); - std::cout << "[TrackingQualityChecker::bookLSStatus] nQT: " << nQT << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::bookLSStatus] nQT: " << nQT << std::endl; } ibooker.setCurrentFolder(TopFolderName_ + "/EventInfo/reportSummaryContents"); @@ -149,10 +148,11 @@ void TrackingQualityChecker::bookLSStatus(DQMStore::IBooker& ibooker, DQMStore:: std::string meQTname = it->first; it->second.TrackingFlag = ibooker.bookFloat("Track" + meQTname); if (verbose_) - std::cout << "[TrackingQualityChecker::bookLSStatus] " << it->first << " exists ? " << it->second.TrackingFlag - << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::bookLSStatus] " << it->first << " exists ? " + << it->second.TrackingFlag << std::endl; if (verbose_) - std::cout << "[TrackingQualityChecker::bookLSStatus] DONE w/ TrackingLSMEsMap" << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::bookLSStatus] DONE w/ TrackingLSMEsMap" << std::endl; } bookedTrackingLSStatus_ = true; @@ -165,12 +165,13 @@ void TrackingQualityChecker::bookLSStatus(DQMStore::IBooker& ibooker, DQMStore:: // void TrackingQualityChecker::fillDummyGlobalStatus() { if (verbose_) - std::cout << "[TrackingQualityChecker::fillDummyGlobalStatus] starting ..." << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::fillDummyGlobalStatus] starting ..." << std::endl; resetGlobalStatus(); if (verbose_) - std::cout << "[TrackingQualityChecker::fillDummyGlobalStatus] already booked ? " - << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillDummyGlobalStatus] already booked ? " + << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl; if (bookedTrackingGlobalStatus_) { TrackGlobalSummaryReportGlobal->Fill(-1.0); @@ -181,24 +182,26 @@ void TrackingQualityChecker::fillDummyGlobalStatus() { for (std::map::iterator it = TrackingMEsMap.begin(); it != TrackingMEsMap.end(); it++) it->second.TrackingFlag->Fill(-1.0); if (verbose_) - std::cout << "[TrackingQualityChecker::fillDummyGlobalStatus] DONE w/ TrackingMEsMap" << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::fillDummyGlobalStatus] DONE w/ TrackingMEsMap" << std::endl; } } void TrackingQualityChecker::fillDummyLSStatus() { if (verbose_) - std::cout << "[TrackingQualityChecker::fillDummyLSStatus] starting ..." << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillDummyLSStatus] starting ..." << std::endl; resetLSStatus(); if (verbose_) - std::cout << "[TrackingQualityChecker::fillDummyLSStatus] already booked ? " - << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillDummyLSStatus] already booked ? " + << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl; if (bookedTrackingLSStatus_) { TrackLSSummaryReportGlobal->Fill(-1.0); for (std::map::iterator it = TrackingLSMEsMap.begin(); it != TrackingLSMEsMap.end(); it++) it->second.TrackingFlag->Fill(-1.0); if (verbose_) - std::cout << "[TrackingQualityChecker::fillDummyLSStatus] DONE w/ TrackingLSMEsMap" << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::fillDummyLSStatus] DONE w/ TrackingLSMEsMap" << std::endl; } } @@ -207,8 +210,8 @@ void TrackingQualityChecker::fillDummyLSStatus() { // void TrackingQualityChecker::resetGlobalStatus() { if (verbose_) - std::cout << "[TrackingQualityChecker::resetGlobalStatus] already booked ? " - << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::resetGlobalStatus] already booked ? " + << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl; if (bookedTrackingGlobalStatus_) { TrackGlobalSummaryReportGlobal->Reset(); TrackGlobalSummaryReportMap->Reset(); @@ -216,30 +219,34 @@ void TrackingQualityChecker::resetGlobalStatus() { for (std::map::iterator it = TrackingMEsMap.begin(); it != TrackingMEsMap.end(); it++) { MonitorElement* me = it->second.TrackingFlag; if (verbose_) - std::cout << "[TrackingQualityChecker::resetGlobalStatus] " << it->second.HistoName << " exist ? " - << (it->second.TrackingFlag == nullptr ? "nope" : "yes") << " ---> " << me << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::resetGlobalStatus] " << it->second.HistoName << " exist ? " + << (it->second.TrackingFlag == nullptr ? "nope" : "yes") << " ---> " << me << std::endl; me->Reset(); } if (verbose_) - std::cout << "[TrackingQualityChecker::resetGlobalStatus] DONE w/ TrackingMEsMap" << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::resetGlobalStatus] DONE w/ TrackingMEsMap" << std::endl; } } void TrackingQualityChecker::resetLSStatus() { if (verbose_) - std::cout << "[TrackingQualityChecker::resetLSStatus] already booked ? " - << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::resetLSStatus] already booked ? " + << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl; if (bookedTrackingLSStatus_) { TrackLSSummaryReportGlobal->Reset(); for (std::map::iterator it = TrackingLSMEsMap.begin(); it != TrackingLSMEsMap.end(); it++) { MonitorElement* me = it->second.TrackingFlag; if (verbose_) - std::cout << "[TrackingQualityChecker::resetLSStatus] " << it->second.HistoLSName << " exist ? " - << (it->second.TrackingFlag == nullptr ? "nope" : "yes") << " ---> " << me << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::resetLSStatus] " << it->second.HistoLSName << " exist ? " + << (it->second.TrackingFlag == nullptr ? "nope" : "yes") << " ---> " << me << std::endl; me->Reset(); } if (verbose_) - std::cout << "[TrackingQualityChecker::resetLSStatus] DONE w/ TrackingLSMEsMap" << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::resetLSStatus] DONE w/ TrackingLSMEsMap" << std::endl; } } @@ -248,29 +255,29 @@ void TrackingQualityChecker::resetLSStatus() { // void TrackingQualityChecker::fillGlobalStatus(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) { if (verbose_) - std::cout << "[TrackingQualityChecker::fillGlobalStatus] already booked ? " - << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillGlobalStatus] already booked ? " + << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl; if (!bookedTrackingGlobalStatus_) bookGlobalStatus(ibooker, igetter); fillDummyGlobalStatus(); fillTrackingStatus(ibooker, igetter); if (verbose_) - std::cout << "[TrackingQualityChecker::fillGlobalStatus] DONE" << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillGlobalStatus] DONE" << std::endl; ibooker.cd(); } void TrackingQualityChecker::fillLSStatus(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) { if (verbose_) - std::cout << "[TrackingQualityChecker::fillLSStatus] already booked ? " - << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillLSStatus] already booked ? " + << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl; if (!bookedTrackingLSStatus_) bookLSStatus(ibooker, igetter); fillDummyLSStatus(); fillTrackingStatusAtLumi(ibooker, igetter); if (verbose_) - std::cout << "[TrackingQualityChecker::fillLSStatus] DONE" << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillLSStatus] DONE" << std::endl; ibooker.cd(); } @@ -287,9 +294,9 @@ void TrackingQualityChecker::fillTrackingStatus(DQMStore::IBooker& ibooker, DQMS int ibin = 0; for (std::map::iterator it = TrackingMEsMap.begin(); it != TrackingMEsMap.end(); it++) { if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] ME: " << it->first << " [" - << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() - << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "fillTrackingStatus ME: " << it->first << " [" << it->second.TrackingFlag->getFullname() + << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl; ibin++; @@ -298,14 +305,14 @@ void TrackingQualityChecker::fillTrackingStatus(DQMStore::IBooker& ibooker, DQMS std::vector tmpMEvec = igetter.getContents(ibooker.pwd() + "/" + localMEdirpath); if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] tmpMEvec: " << tmpMEvec.size() << std::endl; + edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus tmpMEvec: " << tmpMEvec.size() << std::endl; MonitorElement* me = nullptr; size_t nMEs = 0; for (auto ime : tmpMEvec) { std::string name = ime->getName(); if (verbose_) - std::cout << "name: " << name << " <-- --> " << MEname << std::endl; + edm::LogInfo("TrackingQualityChecker") << "name: " << name << " <-- --> " << MEname << std::endl; if (name.find(MEname) != std::string::npos) { me = ime; nMEs++; @@ -313,71 +320,74 @@ void TrackingQualityChecker::fillTrackingStatus(DQMStore::IBooker& ibooker, DQMS } // only one ME found if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] nMEs: " << nMEs << std::endl; + edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus nMEs: " << nMEs << std::endl; if (nMEs == 1) { float status = 0.; for (auto ime : tmpMEvec) { std::string name = ime->getName(); if (verbose_) - std::cout << "name: " << name << " [" << MEname << "]" << std::endl; + edm::LogInfo("TrackingQualityChecker") << "name: " << name << " [" << MEname << "]" << std::endl; if (name.find(MEname) != std::string::npos) { me = ime; if (verbose_) - std::cout << "inside the loop nQTme: " << me->getQReports().size() << "[" << ime->getFullname() << "]" - << std::endl; + edm::LogInfo("TrackingQualityChecker") << "inside the loop nQTme: " << me->getQReports().size() << "[" + << ime->getFullname() << "]" << std::endl; } } if (verbose_) - std::cout << "me: " << me << "[" << me->getName() << ", " << me->getFullname() << "]" << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "me: " << me << "[" << me->getName() << ", " << me->getFullname() << "]" << std::endl; if (!me) continue; if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] status: " << status << std::endl; + edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus status: " << status << std::endl; std::vector qt_reports = me->getQReports(); size_t nQTme = qt_reports.size(); if (verbose_) - std::cout << "nQTme: " << nQTme << std::endl; + edm::LogInfo("TrackingQualityChecker") << "nQTme: " << nQTme << std::endl; if (nQTme != 0) { if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] qt_reports: " << qt_reports.size() << std::endl; + edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus qt_reports: " << qt_reports.size() << std::endl; // loop on possible QTs for (auto iQT : qt_reports) { status += iQT->getQTresult(); if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] iQT: " << iQT->getQRName() << std::endl; + edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus iQT: " << iQT->getQRName() << std::endl; if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] MEname: " << MEname - << " status: " << iQT->getQTresult() << " exists ? " << (it->second.TrackingFlag ? "yes " : "no ") - << it->second.TrackingFlag << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "fillTrackingStatus MEname: " << MEname << " status: " << iQT->getQTresult() << " exists ? " + << (it->second.TrackingFlag ? "yes " : "no ") << it->second.TrackingFlag << std::endl; if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] iQT message: " << iQT->getMessage() << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "fillTrackingStatus iQT message: " << iQT->getMessage() << std::endl; if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] iQT status: " << iQT->getStatus() << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "fillTrackingStatus iQT status: " << iQT->getStatus() << std::endl; } status = status / float(nQTme); if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] MEname: " << MEname << " status: " << status - << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "fillTrackingStatus MEname: " << MEname << " status: " << status << std::endl; it->second.TrackingFlag->Fill(status); if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] TrackGlobalSummaryReportMap: " - << TrackGlobalSummaryReportMap << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "fillTrackingStatus TrackGlobalSummaryReportMap: " << TrackGlobalSummaryReportMap << std::endl; fillStatusHistogram(TrackGlobalSummaryReportMap, ibin, 1, status); } if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] gstatus: " << gstatus << " x status: " << status - << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "fillTrackingStatus gstatus: " << gstatus << " x status: " << status << std::endl; if (status < 0.) gstatus = -1.; else gstatus += status; if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] ===> gstatus: " << gstatus << std::endl; + edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus ===> gstatus: " << gstatus << std::endl; if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] ME: " << it->first << " [" - << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() - << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "fillTrackingStatus ME: " << it->first << " [" << it->second.TrackingFlag->getFullname() + << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl; } else { // more than 1 ME w/ the same root => they need to be considered together float status = 1.; @@ -388,30 +398,31 @@ void TrackingQualityChecker::fillTrackingStatus(DQMStore::IBooker& ibooker, DQMS me = ime; if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] status: " << status << std::endl; + edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus status: " << status << std::endl; std::vector qt_reports = me->getQReports(); size_t nQTme = qt_reports.size(); if (verbose_) - std::cout << "nQTme: " << nQTme << "[" << name << ", " << ime->getFullname() << "]" << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "nQTme: " << nQTme << "[" << name << ", " << ime->getFullname() << "]" << std::endl; if (nQTme != 0) { if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] qt_reports: " << qt_reports.size() - << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "fillTrackingStatus qt_reports: " << qt_reports.size() << std::endl; // loop on possible QTs for (auto iQT : qt_reports) { tmp_status += iQT->getQTresult(); if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] iQT: " << iQT->getQRName() << std::endl; + edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus iQT: " << iQT->getQRName() << std::endl; if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] MEname: " << MEname - << " status: " << iQT->getQTresult() << " exists ? " - << (it->second.TrackingFlag ? "yes " : "no ") << it->second.TrackingFlag << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "fillTrackingStatus MEname: " << MEname << " status: " << iQT->getQTresult() << " exists ? " + << (it->second.TrackingFlag ? "yes " : "no ") << it->second.TrackingFlag << std::endl; if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] iQT message: " << iQT->getMessage() - << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "fillTrackingStatus iQT message: " << iQT->getMessage() << std::endl; if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] iQT status: " << iQT->getStatus() - << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "fillTrackingStatus iQT status: " << iQT->getStatus() << std::endl; } tmp_status = tmp_status / float(nQTme); } @@ -423,12 +434,12 @@ void TrackingQualityChecker::fillTrackingStatus(DQMStore::IBooker& ibooker, DQMS else gstatus += status; if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] MEname: " << MEname << " status: " << status - << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "fillTrackingStatus MEname: " << MEname << " status: " << status << std::endl; it->second.TrackingFlag->Fill(status); if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] TrackGlobalSummaryReportMap: " - << TrackGlobalSummaryReportMap << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "fillTrackingStatus TrackGlobalSummaryReportMap: " << TrackGlobalSummaryReportMap << std::endl; fillStatusHistogram(TrackGlobalSummaryReportMap, ibin, 1, status); } @@ -447,7 +458,7 @@ void TrackingQualityChecker::fillTrackingStatus(DQMStore::IBooker& ibooker, DQMS } if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] gstatus: " << gstatus << std::endl; + edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus gstatus: " << gstatus << std::endl; size_t nQT = TrackingMEsMap.size(); if (gstatus < 1.) gstatus = -1.; @@ -455,12 +466,12 @@ void TrackingQualityChecker::fillTrackingStatus(DQMStore::IBooker& ibooker, DQMS gstatus = gstatus / float(nQT); if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] ===> gstatus: " << gstatus << std::endl; + edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus ===> gstatus: " << gstatus << std::endl; TrackGlobalSummaryReportGlobal->Fill(gstatus); ibooker.cd(); if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatus] DONE" << std::endl; + edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus DONE" << std::endl; } // @@ -477,7 +488,8 @@ void TrackingQualityChecker::fillStatusHistogram(MonitorElement* me, int xbin, i // void TrackingQualityChecker::fillTrackingStatusAtLumi(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) { if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] starting .. " << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::fillTrackingStatusAtLumi] starting .. " << std::endl; float gstatus = 1.0; ibooker.cd(); @@ -488,9 +500,9 @@ void TrackingQualityChecker::fillTrackingStatusAtLumi(DQMStore::IBooker& ibooker for (std::map::iterator it = TrackingLSMEsMap.begin(); it != TrackingLSMEsMap.end(); it++) { if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ME: " << it->first << " [" - << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() - << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ME: " << it->first + << " [" << it->second.TrackingFlag->getFullname() + << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl; ibin++; @@ -503,7 +515,8 @@ void TrackingQualityChecker::fillTrackingStatusAtLumi(DQMStore::IBooker& ibooker std::vector tmpMEvec = igetter.getContents(ibooker.pwd() + "/" + localMEdirpath); if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] tmpMEvec: " << tmpMEvec.size() << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::fillTrackingStatusAtLumi] tmpMEvec: " << tmpMEvec.size() << std::endl; MonitorElement* me = nullptr; @@ -529,8 +542,9 @@ void TrackingQualityChecker::fillTrackingStatusAtLumi(DQMStore::IBooker& ibooker if (me->kind() == MonitorElement::Kind::TH1F) { float x_mean = me->getMean(); if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] MEname: " << MEname << " x_mean: " << x_mean - << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::fillTrackingStatusAtLumi] MEname: " << MEname << " x_mean: " << x_mean + << std::endl; if (x_mean <= lower_cut || x_mean > upper_cut) status = 0.0; else @@ -548,39 +562,44 @@ void TrackingQualityChecker::fillTrackingStatusAtLumi(DQMStore::IBooker& ibooker if (me->kind() == MonitorElement::Kind::TH1F) { float x_mean = me->getMean(); if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] MEname: " << MEname << "[" - << me->getName() << "] x_mean: " << x_mean << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::fillTrackingStatusAtLumi] MEname: " << MEname << "[" << me->getName() + << "] x_mean: " << x_mean << std::endl; if (x_mean <= lower_cut || x_mean > upper_cut) tmp_status = 0.0; else tmp_status = 1.0; if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] tmp_status: " << tmp_status << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::fillTrackingStatusAtLumi] tmp_status: " << tmp_status << std::endl; } } status = fminf(tmp_status, status); if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ==> status: " << status << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ==> status: " << status << std::endl; } // loop on tmpMEvec } it->second.TrackingFlag->Fill(status); if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ===> status: " << status << " [" << gstatus - << "]" << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ===> status: " << status << " [" << gstatus << "]" + << std::endl; if (status == 0.0) gstatus = -1.0; else gstatus = gstatus * status; if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ===> gstatus: " << gstatus << std::endl; + edm::LogInfo("TrackingQualityChecker") + << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ===> gstatus: " << gstatus << std::endl; if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ME: " << it->first << " [" - << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() - << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ME: " << it->first + << " [" << it->second.TrackingFlag->getFullname() + << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl; } TrackLSSummaryReportGlobal->Fill(gstatus); ibooker.cd(); if (verbose_) - std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] DONE" << std::endl; + edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillTrackingStatusAtLumi] DONE" << std::endl; } diff --git a/DQM/TrackingMonitorSource/plugins/StandaloneTrackMonitor.cc b/DQM/TrackingMonitorSource/plugins/StandaloneTrackMonitor.cc index a71292e30e265..7a615bf694b9e 100644 --- a/DQM/TrackingMonitorSource/plugins/StandaloneTrackMonitor.cc +++ b/DQM/TrackingMonitorSource/plugins/StandaloneTrackMonitor.cc @@ -47,16 +47,11 @@ class StandaloneTrackMonitor : public DQMEDAnalyzer { protected: void analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup) override; - void processHit(const TrackingRecHit& recHit, - edm::EventSetup const& iSetup, - const TrackerGeometry& tkGeom, - double wfac = 1); - void processClusters(edm::Event const& iEvent, - edm::EventSetup const& iSetup, - const TrackerGeometry& tkGeom, - double wfac = 1); + void processHit(const TrackingRecHit& recHit, edm::EventSetup const& iSetup, double wfac = 1); + void processClusters(edm::Event const& iEvent, edm::EventSetup const& iSetup, double wfac = 1); void addClusterToMap(uint32_t detid, const SiStripCluster* cluster); void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override; + void dqmBeginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) override; private: edm::ParameterSet parameters_; @@ -157,6 +152,8 @@ class StandaloneTrackMonitor : public DQMEDAnalyzer { std::vector vpu_; std::map > clusterMap_; + const edm::ESGetToken geomToken_; + const TrackerGeometry* tkGeom_ = nullptr; }; // ----------------------------- @@ -184,7 +181,8 @@ StandaloneTrackMonitor::StandaloneTrackMonitor(const edm::ParameterSet& ps) haveAllHistograms_(parameters_.getUntrackedParameter("haveAllHistograms", false)), puScaleFactorFile_( parameters_.getUntrackedParameter("puScaleFactorFile", "PileupScaleFactor_run203002.root")), - verbose_(parameters_.getUntrackedParameter("verbose", false)) { + verbose_(parameters_.getUntrackedParameter("verbose", false)), + geomToken_(esConsumes()) { trackEtaH_ = nullptr; trackEtaerrH_ = nullptr; trackCosThetaH_ = nullptr; @@ -263,6 +261,10 @@ StandaloneTrackMonitor::StandaloneTrackMonitor(const edm::ParameterSet& ps) } } +void StandaloneTrackMonitor::dqmBeginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) { + tkGeom_ = &(iSetup.getData(geomToken_)); +} + void StandaloneTrackMonitor::bookHistograms(DQMStore::IBooker& iBook, edm::Run const& iRun, edm::EventSetup const& iSetup) { @@ -459,9 +461,6 @@ void StandaloneTrackMonitor::bookHistograms(DQMStore::IBooker& iBook, } void StandaloneTrackMonitor::analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup) { // Get event setup (to get global transformation) - edm::ESHandle geomHandle; - iSetup.get().get(geomHandle); - const TrackerGeometry& tkGeom = (*geomHandle); siStripClusterInfo_.initEvent(iSetup); @@ -631,7 +630,7 @@ void StandaloneTrackMonitor::analyze(edm::Event const& iEvent, edm::EventSetup c ++nStripTID; // Find on-track clusters - processHit(hit, iSetup, tkGeom, wfac); + processHit(hit, iSetup, wfac); } } } @@ -655,12 +654,9 @@ void StandaloneTrackMonitor::analyze(edm::Event const& iEvent, edm::EventSetup c nTracksH_->Fill(ntracks); // off track cluster properties - processClusters(iEvent, iSetup, tkGeom, wfac); + processClusters(iEvent, iSetup, wfac); } -void StandaloneTrackMonitor::processClusters(edm::Event const& iEvent, - edm::EventSetup const& iSetup, - const TrackerGeometry& tkGeom, - double wfac) { +void StandaloneTrackMonitor::processClusters(edm::Event const& iEvent, edm::EventSetup const& iSetup, double wfac) { // SiStripClusters edm::Handle > clusterHandle; iEvent.getByToken(clusterToken_, clusterHandle); @@ -686,7 +682,7 @@ void StandaloneTrackMonitor::processClusters(edm::Event const& iEvent, float charge = siStripClusterInfo_.charge(); float width = siStripClusterInfo_.width(); - const GeomDetUnit* detUnit = tkGeom.idToDetUnit(detId); + const GeomDetUnit* detUnit = tkGeom_->idToDetUnit(detId); float thickness = detUnit->surface().bounds().thickness(); // unit cm if (thickness > 0.035) { hOffTrkClusChargeThickH_->Fill(charge, wfac); @@ -701,12 +697,9 @@ void StandaloneTrackMonitor::processClusters(edm::Event const& iEvent, edm::LogError("StandaloneTrackMonitor") << "ClusterCollection " << clusterTag_ << " not valid!!" << std::endl; } } -void StandaloneTrackMonitor::processHit(const TrackingRecHit& recHit, - edm::EventSetup const& iSetup, - const TrackerGeometry& tkGeom, - double wfac) { +void StandaloneTrackMonitor::processHit(const TrackingRecHit& recHit, edm::EventSetup const& iSetup, double wfac) { uint32_t detid = recHit.geographicalId(); - const GeomDetUnit* detUnit = tkGeom.idToDetUnit(detid); + const GeomDetUnit* detUnit = tkGeom_->idToDetUnit(detid); float thickness = detUnit->surface().bounds().thickness(); // unit cm auto const& thit = static_cast(recHit); diff --git a/DQM/TrackingMonitorSource/python/EDModules2monitor_cfi.py b/DQM/TrackingMonitorSource/python/EDModules2monitor_cfi.py index ec96ad91605c7..532e686b1aa7f 100644 --- a/DQM/TrackingMonitorSource/python/EDModules2monitor_cfi.py +++ b/DQM/TrackingMonitorSource/python/EDModules2monitor_cfi.py @@ -16,23 +16,23 @@ # apparentely there are not LogError in RecoLocalTracker/SubCollectionProducers/src/TrackClusterRemover.cc pluginsMonName['Clusterizer'] = cms.string ( 'TrackClusterRemover' ) -modulesLabel ['Clusterizer'] = cms.vstring( 'lowPtTripletStepClusters', 'pixelPairStepClusters', 'detachedTripletStepClusters', 'mixedTripletStepClusters', 'pixelLessStepClusters', 'tobTecStepClusters' ) # TrackClusterRemover +modulesLabel ['Clusterizer'] = cms.vstring( 'lowPtTripletStepClusters', 'pixelPairStepClusters', 'detachedTripletStepClusters', 'mixedTripletStepClusters', 'pixelLessStepClusters', 'tobTecStepClusters', 'displacedGeneralStepClusters' ) # TrackClusterRemover categories ['Clusterizer'] = cms.vstring( ) # initialStepSeeds,lowPtTripletStepSeeds, pixelPairStepSeeds, detachedTripletStepSeeds, : TooManyClusters (SeedGeneratorFromRegionHitsEDProducer), # photonConvTrajSeedFromSingleLeg : (PhotonConversionTrajectorySeedProducerFromSingleLeg) pluginsMonName['Seeding'] = cms.string ( 'Seeding' ) -modulesLabel ['Seeding'] = cms.vstring( 'initialStepSeeds', 'lowPtTripletStepSeeds', 'pixelPairStepSeeds', 'detachedTripletStepSeeds', 'mixedTripletStepSeedsA', 'mixedTripletStepSeedsB', 'mixedTripletStepSeeds', 'pixelLessStepSeeds', 'tobTecStepSeeds', 'photonConvTrajSeedFromSingleLeg') +modulesLabel ['Seeding'] = cms.vstring( 'initialStepSeeds', 'lowPtTripletStepSeeds', 'pixelPairStepSeeds', 'detachedTripletStepSeeds', 'mixedTripletStepSeedsA', 'mixedTripletStepSeedsB', 'mixedTripletStepSeeds', 'pixelLessStepSeeds', 'tobTecStepSeeds', 'displacedGeneralStepSeeds','photonConvTrajSeedFromSingleLeg') categories ['Seeding'] = cms.vstring( 'TooManyClusters', 'TooManyPairs', 'TooManyTriplets', 'TooManySeeds' ) # RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc pluginsMonName['TrackCandidate'] = cms.string ( 'TrackCandidate' ) -modulesLabel ['TrackCandidate'] = cms.vstring( 'initialStepTrackCandidates', 'lowPtTripletStepTrackCandidates', 'pixelPairStepTrackCandidates', 'detachedTripletStepTrackCandidates', 'mixedTripletStepTrackCandidates', 'pixelLessStepTrackCandidates', 'tobTecStepTrackCandidates', 'convTrackCandidates' ) +modulesLabel ['TrackCandidate'] = cms.vstring( 'initialStepTrackCandidates', 'lowPtTripletStepTrackCandidates', 'pixelPairStepTrackCandidates', 'detachedTripletStepTrackCandidates', 'mixedTripletStepTrackCandidates', 'pixelLessStepTrackCandidates', 'tobTecStepTrackCandidates', 'displacedGeneralStepTrackCandidates', 'convTrackCandidates' ) categories ['TrackCandidate'] = cms.vstring( 'TooManySeeds', 'CkfPattern', 'BaseCkfTrajectoryBuilder_InfiniteLoop' ) # TrackProducer:FailedPropagation pluginsMonName['TrackFinder'] = cms.string ( 'TrackFinder' ) -modulesLabel ['TrackFinder'] = cms.vstring( 'pixelTracks', 'initialStepTracks', 'lowPtTripletStepTracks', 'pixelPairStepTracks', 'detachedTripletStepTracks', 'mixedTripletStepTracks', 'pixelLessStepTracks', 'tobTecStepTracks', 'generalTracks' ) +modulesLabel ['TrackFinder'] = cms.vstring( 'pixelTracks', 'initialStepTracks', 'lowPtTripletStepTracks', 'pixelPairStepTracks', 'detachedTripletStepTracks', 'mixedTripletStepTracks', 'pixelLessStepTracks', 'tobTecStepTracks', 'displacedGeneralStepTracks', 'generalTracks' ) categories ['TrackFinder'] = cms.vstring( 'FailedPropagation' ) @@ -60,6 +60,9 @@ 'tobTecStepSeeds_iter6', 'tobTecStepTrackCandidates_iter6', 'tobTecStepTracks_iter6', + 'displacedGeneralStepSeeds_iter7', + 'displacedGeneralStepTrackCandidates_iter7', + 'displacedGeneralStepTracks_iter7', 'photonConvTrajSeedFromSingleLeg', 'convTrackCandidates', 'convStepTracks', @@ -96,6 +99,9 @@ 'tobTecStepSeeds_iter6', 'tobTecStepTrackCandidates_iter6', 'tobTecStepTracks_iter6', + 'displacedGeneralStepSeeds_iter7', + 'displacedGeneralStepTrackCandidates_iter7', + 'displacedGeneralStepTracks_iter7' ) categories['IterTracking'] = cms.vstring( 'TooManyClusters', diff --git a/DQM/TrackingMonitorSource/python/IterTrackingModules4seedMonitoring_cfi.py b/DQM/TrackingMonitorSource/python/IterTrackingModules4seedMonitoring_cfi.py index f0a59c8c2f918..874c4e3c9786d 100644 --- a/DQM/TrackingMonitorSource/python/IterTrackingModules4seedMonitoring_cfi.py +++ b/DQM/TrackingMonitorSource/python/IterTrackingModules4seedMonitoring_cfi.py @@ -123,6 +123,19 @@ clusterMax = cms.double(100000), ) +seedMonitoring['displacedGeneralStep'] = cms.PSet( + seedInputTag = cms.InputTag("displacedGeneralStepSeeds"), + trackCandInputTag= cms.InputTag("displacedGeneralStepTrackCandidates"), + trackSeedSizeBin = cms.int32(400), + trackSeedSizeMin = cms.double(0), + trackSeedSizeMax = cms.double(100000), + TCSizeMax = cms.double(199.5), + clusterLabel = cms.vstring('Strip'), + clusterBin = cms.int32(100), + clusterMax = cms.double(100000), +) + + seedMonitoring['muonSeededStepInOut'] = cms.PSet( seedInputTag = cms.InputTag("muonSeededSeedsInOut"), trackCandInputTag = cms.InputTag("muonSeededTrackCandidatesInOut"), diff --git a/DQM/TrigXMonitor/test/l1scalers_dqm_file_cfg.py b/DQM/TrigXMonitor/test/l1scalers_dqm_file_cfg.py index d5bc6b8fe305d..e9713c5dc2561 100644 --- a/DQM/TrigXMonitor/test/l1scalers_dqm_file_cfg.py +++ b/DQM/TrigXMonitor/test/l1scalers_dqm_file_cfg.py @@ -88,7 +88,7 @@ # Message Logger #process.load("FWCore.MessageService.MessageLogger_cfi") -#process.MessageLogger.categories = ['hltResults'] +# #process.MessageLogger.destinations = ['cout', 'detailedInfo', 'critical'] #process.MessageLogger.cout = cms.untracked.PSet( #threshold = cms.untracked.string('ERROR'), @@ -102,7 +102,7 @@ #) # ) -# process.MessageLogger.categories = ['Status', 'Parameter'] +# # # copy stdout to a file process.MessageLogger.detailedInfo = process.MessageLogger.cout # process.MessageLogger.debugModules = ['hltResults'] diff --git a/DQM/TrigXMonitor/test/scal_dqm-file_cfg.py b/DQM/TrigXMonitor/test/scal_dqm-file_cfg.py index 12976fd777706..3f803da6ee4b9 100644 --- a/DQM/TrigXMonitor/test/scal_dqm-file_cfg.py +++ b/DQM/TrigXMonitor/test/scal_dqm-file_cfg.py @@ -79,7 +79,7 @@ # Message Logger #process.load("FWCore.MessageService.MessageLogger_cfi") -#process.MessageLogger.categories = ['hltResults'] +# #process.MessageLogger.destinations = ['cout', 'detailedInfo', 'critical'] #process.MessageLogger.cout = cms.untracked.PSet( #threshold = cms.untracked.string('ERROR'), @@ -93,7 +93,7 @@ #) # ) -# process.MessageLogger.categories = ['Status', 'Parameter'] +# # # copy stdout to a file #process.MessageLogger.detailedInfo = process.MessageLogger.cout # process.MessageLogger.debugModules = ['hltResults'] diff --git a/DQMOffline/Alignment/interface/TkAlCaRecoMonitor.h b/DQMOffline/Alignment/interface/TkAlCaRecoMonitor.h index 6901c5259d75a..69db42e6879ab 100644 --- a/DQMOffline/Alignment/interface/TkAlCaRecoMonitor.h +++ b/DQMOffline/Alignment/interface/TkAlCaRecoMonitor.h @@ -42,6 +42,9 @@ class TkAlCaRecoMonitor : public DQMEDAnalyzer { void fillRawIdMap(const TrackerGeometry &geometry); // ----------member data --------------------------- + const edm::ESGetToken tkGeomToken_; + const edm::ESGetToken mfToken_; + edm::ParameterSet conf_; double maxJetPt_; diff --git a/DQMOffline/Alignment/src/TkAlCaRecoMonitor.cc b/DQMOffline/Alignment/src/TkAlCaRecoMonitor.cc index 1da0d7d44ea2c..0a2ffa21e9d85 100644 --- a/DQMOffline/Alignment/src/TkAlCaRecoMonitor.cc +++ b/DQMOffline/Alignment/src/TkAlCaRecoMonitor.cc @@ -3,8 +3,6 @@ * */ -#include "FWCore/Framework/interface/ESHandle.h" - #include "DataFormats/TrackReco/interface/Track.h" #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "Geometry/CommonDetUnit/interface/GeomDet.h" @@ -24,7 +22,8 @@ #include #include "TLorentzVector.h" -TkAlCaRecoMonitor::TkAlCaRecoMonitor(const edm::ParameterSet &iConfig) { +TkAlCaRecoMonitor::TkAlCaRecoMonitor(const edm::ParameterSet &iConfig) + : tkGeomToken_(esConsumes()), mfToken_(esConsumes()) { conf_ = iConfig; trackProducer_ = consumes(conf_.getParameter("TrackProducer")); referenceTrackProducer_ = @@ -206,14 +205,12 @@ void TkAlCaRecoMonitor::analyze(const edm::Event &iEvent, const edm::EventSetup return; } - edm::ESHandle geometry; - iSetup.get().get(geometry); + const auto &geometry = iSetup.getHandle(tkGeomToken_); if (!geometry.isValid()) { edm::LogError("Alignment") << "invalid geometry found in event setup!"; } - edm::ESHandle magneticField; - iSetup.get().get(magneticField); + const auto &magneticField = iSetup.getHandle(mfToken_); if (!magneticField.isValid()) { edm::LogError("Alignment") << "invalid magnetic field configuration encountered!"; return; diff --git a/DQMOffline/CalibCalo/src/DQMSourceEleCalib.cc b/DQMOffline/CalibCalo/src/DQMSourceEleCalib.cc index 65858f0817354..6e73d0a28cceb 100644 --- a/DQMOffline/CalibCalo/src/DQMSourceEleCalib.cc +++ b/DQMOffline/CalibCalo/src/DQMSourceEleCalib.cc @@ -13,6 +13,7 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" // DQM include files diff --git a/DQMOffline/CalibTracker/plugins/SiStripBadComponentsDQMServiceReader.cc b/DQMOffline/CalibTracker/plugins/SiStripBadComponentsDQMServiceReader.cc index 9ff413da04c60..7ae8d30dc2db6 100644 --- a/DQMOffline/CalibTracker/plugins/SiStripBadComponentsDQMServiceReader.cc +++ b/DQMOffline/CalibTracker/plugins/SiStripBadComponentsDQMServiceReader.cc @@ -1,10 +1,8 @@ #include "CondFormats/SiStripObjects/interface/SiStripBadStrip.h" -#include "CondFormats/DataRecord/interface/SiStripBadStripRcd.h" #include "DQMOffline/CalibTracker/plugins/SiStripBadComponentsDQMServiceReader.h" #include "DataFormats/TrackerCommon/interface/TrackerTopology.h" #include "DataFormats/SiStripDetId/interface/StripSubdetector.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include #include @@ -15,27 +13,26 @@ using namespace std; SiStripBadComponentsDQMServiceReader::SiStripBadComponentsDQMServiceReader(const edm::ParameterSet& iConfig) - : printdebug_(iConfig.getUntrackedParameter("printDebug", true)) {} + : printdebug_(iConfig.getUntrackedParameter("printDebug", true)), + tTopoToken_(esConsumes()), + badStripToken_(esConsumes()) {} SiStripBadComponentsDQMServiceReader::~SiStripBadComponentsDQMServiceReader() {} void SiStripBadComponentsDQMServiceReader::analyze(const edm::Event& e, const edm::EventSetup& iSetup) { //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); + const auto& tTopo = iSetup.getData(tTopoToken_); uint32_t FedErrorMask = 1; // bit 0 uint32_t DigiErrorMask = 2; // bit 1 uint32_t ClusterErrorMask = 4; // bit 2 - edm::ESHandle SiStripBadStrip_; - iSetup.get().get(SiStripBadStrip_); + const auto& siStripBadStrip = iSetup.getData(badStripToken_); edm::LogInfo("SiStripBadComponentsDQMServiceReader") << "[SiStripBadComponentsDQMServiceReader::analyze] End Reading SiStripBadStrip" << std::endl; std::vector detid; - SiStripBadStrip_->getDetIds(detid); + siStripBadStrip.getDetIds(detid); std::stringstream ss; @@ -44,13 +41,13 @@ void SiStripBadComponentsDQMServiceReader::analyze(const edm::Event& e, const ed ss << "subdet layer stereo side \t detId \t\t Errors" << std::endl; for (size_t id = 0; id < detid.size(); id++) { - SiStripBadStrip::Range range = SiStripBadStrip_->getRange(detid[id]); + SiStripBadStrip::Range range = siStripBadStrip.getRange(detid[id]); for (int it = 0; it < range.second - range.first; it++) { unsigned int value = (*(range.first + it)); ss << detIdToString(detid[id], tTopo) << "\t" << detid[id] << "\t"; - uint32_t flag = boost::lexical_cast(SiStripBadStrip_->decode(value).flag); + uint32_t flag = boost::lexical_cast(siStripBadStrip.decode(value).flag); printError(ss, ((flag & FedErrorMask) == FedErrorMask), "Fed error, "); printError(ss, ((flag & DigiErrorMask) == DigiErrorMask), "Digi error, "); @@ -58,9 +55,9 @@ void SiStripBadComponentsDQMServiceReader::analyze(const edm::Event& e, const ed ss << std::endl; if (printdebug_) { - ss << " firstBadStrip " << SiStripBadStrip_->decode(value).firstStrip << "\t " - << " NconsecutiveBadStrips " << SiStripBadStrip_->decode(value).range << "\t " // << std::endl; - << " flag " << SiStripBadStrip_->decode(value).flag << "\t " + ss << " firstBadStrip " << siStripBadStrip.decode(value).firstStrip << "\t " + << " NconsecutiveBadStrips " << siStripBadStrip.decode(value).range << "\t " // << std::endl; + << " flag " << siStripBadStrip.decode(value).flag << "\t " << " packed integer " << std::hex << value << std::dec << "\t " << std::endl; } } @@ -79,7 +76,7 @@ void SiStripBadComponentsDQMServiceReader::printError(std::stringstream& ss, } } -string SiStripBadComponentsDQMServiceReader::detIdToString(const DetId& detid, const TrackerTopology* tTopo) { +string SiStripBadComponentsDQMServiceReader::detIdToString(DetId detid, const TrackerTopology& tTopo) { std::string detector; int layer = 0; int stereo = 0; @@ -89,30 +86,30 @@ string SiStripBadComponentsDQMServiceReader::detIdToString(const DetId& detid, c switch (detid.subdetId()) { case StripSubdetector::TIB: { detector = "TIB"; - layer = tTopo->tibLayer(detid.rawId()); - stereo = tTopo->tibStereo(detid.rawId()); + layer = tTopo.tibLayer(detid.rawId()); + stereo = tTopo.tibStereo(detid.rawId()); break; } case StripSubdetector::TOB: { detector = "TOB"; - layer = tTopo->tobLayer(detid.rawId()); - stereo = tTopo->tobStereo(detid.rawId()); + layer = tTopo.tobLayer(detid.rawId()); + stereo = tTopo.tobStereo(detid.rawId()); break; } case StripSubdetector::TEC: { // is this module in TEC+ or TEC-? - side = tTopo->tecSide(detid.rawId()); + side = tTopo.tecSide(detid.rawId()); detector = "TEC"; - layer = tTopo->tecWheel(detid.rawId()); - stereo = tTopo->tecStereo(detid.rawId()); + layer = tTopo.tecWheel(detid.rawId()); + stereo = tTopo.tecStereo(detid.rawId()); break; } case StripSubdetector::TID: { // is this module in TID+ or TID-? - side = tTopo->tidSide(detid.rawId()); + side = tTopo.tidSide(detid.rawId()); detector = "TID"; - layer = tTopo->tidWheel(detid.rawId()); - stereo = tTopo->tidStereo(detid.rawId()); + layer = tTopo.tidWheel(detid.rawId()); + stereo = tTopo.tidStereo(detid.rawId()); break; } } diff --git a/DQMOffline/CalibTracker/plugins/SiStripBadComponentsDQMServiceReader.h b/DQMOffline/CalibTracker/plugins/SiStripBadComponentsDQMServiceReader.h index a0c6ab86441ae..008020a1906c9 100644 --- a/DQMOffline/CalibTracker/plugins/SiStripBadComponentsDQMServiceReader.h +++ b/DQMOffline/CalibTracker/plugins/SiStripBadComponentsDQMServiceReader.h @@ -9,16 +9,18 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/DetId/interface/DetId.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "CondFormats/DataRecord/interface/SiStripBadStripRcd.h" #include #include class TrackerTopology; +class SiStripBadStrip; class SiStripBadComponentsDQMServiceReader : public edm::EDAnalyzer { public: @@ -29,9 +31,11 @@ class SiStripBadComponentsDQMServiceReader : public edm::EDAnalyzer { void printError(std::stringstream& ss, const bool error, const std::string& errorText); - std::string detIdToString(const DetId& detid, const TrackerTopology* tTopo); + std::string detIdToString(DetId detid, const TrackerTopology& tTopo); private: bool printdebug_; + edm::ESGetToken tTopoToken_; + edm::ESGetToken badStripToken_; }; #endif diff --git a/DQMOffline/CalibTracker/plugins/SiStripDQMPopConSourceHandler.h b/DQMOffline/CalibTracker/plugins/SiStripDQMPopConSourceHandler.h index f2ba6c0ad624f..c6483b3f68161 100644 --- a/DQMOffline/CalibTracker/plugins/SiStripDQMPopConSourceHandler.h +++ b/DQMOffline/CalibTracker/plugins/SiStripDQMPopConSourceHandler.h @@ -4,6 +4,7 @@ #include "CondCore/PopCon/interface/PopConSourceHandler.h" #include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" #include "DQMServices/Core/interface/DQMStore.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -88,7 +89,7 @@ void SiStripDQMPopConSourceHandler::getNewObjects() { << this->logDBEntry().exectime << "\n" << this->logDBEntry().execmessage << "\n"; if (!this->logDBEntry().usertext.empty()) - ss << "\n-- user text " << this->logDBEntry().usertext.substr(this->logDBEntry().usertext.find_last_of("@")); + ss << "\n-- user text " << this->logDBEntry().usertext.substr(this->logDBEntry().usertext.find_last_of('@')); } else { ss << " First object for this tag "; } @@ -119,7 +120,7 @@ bool SiStripDQMPopConSourceHandler::isTransferNeeded() { //get log information from previous upload if (!this->logDBEntry().usertext.empty()) - ss_logdb = this->logDBEntry().usertext.substr(this->logDBEntry().usertext.find_last_of("@") + 2); + ss_logdb = this->logDBEntry().usertext.substr(this->logDBEntry().usertext.find_last_of('@') + 2); std::string ss = getMetaDataString(); if ((!m_iovSequence) || checkForCompatibility(ss_logdb)) { diff --git a/DQMOffline/CalibTracker/plugins/SiStripPopConBadComponentsDQM.cc b/DQMOffline/CalibTracker/plugins/SiStripPopConBadComponentsDQM.cc index b38ca0f85b928..61bfe08266eff 100644 --- a/DQMOffline/CalibTracker/plugins/SiStripPopConBadComponentsDQM.cc +++ b/DQMOffline/CalibTracker/plugins/SiStripPopConBadComponentsDQM.cc @@ -1,5 +1,6 @@ #include "DQMOffline/CalibTracker/plugins/SiStripDQMPopConSourceHandler.h" #include "CondFormats/SiStripObjects/interface/SiStripBadStrip.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" /** @class SiStripBadComponentsDQMService @@ -12,7 +13,7 @@ class SiStripPopConBadComponentsHandlerFromDQM : public SiStripDQMPopConSourceHa typedef dqm::legacy::MonitorElement MonitorElement; typedef dqm::legacy::DQMStore DQMStore; - explicit SiStripPopConBadComponentsHandlerFromDQM(const edm::ParameterSet& iConfig); + explicit SiStripPopConBadComponentsHandlerFromDQM(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC); ~SiStripPopConBadComponentsHandlerFromDQM() override; // interface methods: implemented in template void initES(const edm::EventSetup&) override; @@ -25,20 +26,21 @@ class SiStripPopConBadComponentsHandlerFromDQM : public SiStripDQMPopConSourceHa private: edm::FileInPath fp_; SiStripBadStrip m_obj; + edm::ESGetToken tTopoToken_; const TrackerTopology* trackerTopo_; }; -#include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "DQMServices/Core/interface/DQMStore.h" #include "CalibTracker/SiStripCommon/interface/SiStripDetInfoFileReader.h" -SiStripPopConBadComponentsHandlerFromDQM::SiStripPopConBadComponentsHandlerFromDQM(const edm::ParameterSet& iConfig) +SiStripPopConBadComponentsHandlerFromDQM::SiStripPopConBadComponentsHandlerFromDQM(const edm::ParameterSet& iConfig, + edm::ConsumesCollector&& iC) : SiStripDQMPopConSourceHandler(iConfig), fp_{iConfig.getUntrackedParameter( - "file", edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"))} { + "file", edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"))}, + tTopoToken_(iC.esConsumes()) { edm::LogInfo("SiStripBadComponentsDQMService") << "[SiStripBadComponentsDQMService::SiStripBadComponentsDQMService]"; } @@ -47,9 +49,7 @@ SiStripPopConBadComponentsHandlerFromDQM::~SiStripPopConBadComponentsHandlerFrom } void SiStripPopConBadComponentsHandlerFromDQM::initES(const edm::EventSetup& setup) { - edm::ESHandle tTopo; - setup.get().get(tTopo); - trackerTopo_ = tTopo.product(); + trackerTopo_ = &setup.getData(tTopoToken_); } std::string SiStripPopConBadComponentsHandlerFromDQM::getMetaDataString() const { diff --git a/DQMOffline/CalibTracker/plugins/SiStripPopConDQMEDHarvester.h b/DQMOffline/CalibTracker/plugins/SiStripPopConDQMEDHarvester.h index 58df2c2c9e9ae..b682a5e7f5086 100644 --- a/DQMOffline/CalibTracker/plugins/SiStripPopConDQMEDHarvester.h +++ b/DQMOffline/CalibTracker/plugins/SiStripPopConDQMEDHarvester.h @@ -15,7 +15,7 @@ template class SiStripPopConDQMEDHarvester : public DQMEDHarvester { public: SiStripPopConDQMEDHarvester(const edm::ParameterSet& pset) - : m_populator(pset), m_source(pset.getParameter("Source")) {} + : m_populator(pset), m_source(pset.getParameter("Source"), consumesCollector()) {} ~SiStripPopConDQMEDHarvester() override {} diff --git a/DQMOffline/CalibTracker/plugins/SiStripPopConFEDErrorsDQM.cc b/DQMOffline/CalibTracker/plugins/SiStripPopConFEDErrorsDQM.cc index 262bbd78890aa..6946376fd179d 100644 --- a/DQMOffline/CalibTracker/plugins/SiStripPopConFEDErrorsDQM.cc +++ b/DQMOffline/CalibTracker/plugins/SiStripPopConFEDErrorsDQM.cc @@ -1,5 +1,7 @@ +#include "FWCore/Framework/interface/ESWatcher.h" #include "DQMOffline/CalibTracker/plugins/SiStripDQMPopConSourceHandler.h" #include "CondFormats/SiStripObjects/interface/SiStripBadStrip.h" +#include "CondFormats/DataRecord/interface/SiStripFedCablingRcd.h" class FedChannelConnection; class SiStripFedCabling; @@ -14,7 +16,7 @@ class SiStripPopConFEDErrorsHandlerFromDQM : public SiStripDQMPopConSourceHandle typedef dqm::legacy::MonitorElement MonitorElement; typedef dqm::legacy::DQMStore DQMStore; - explicit SiStripPopConFEDErrorsHandlerFromDQM(const edm::ParameterSet& iConfig); + explicit SiStripPopConFEDErrorsHandlerFromDQM(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC); ~SiStripPopConFEDErrorsHandlerFromDQM() override; // interface methods: implemented in template void initES(const edm::EventSetup& iSetup) override; @@ -42,27 +44,27 @@ class SiStripPopConFEDErrorsHandlerFromDQM : public SiStripDQMPopConSourceHandle edm::FileInPath fp_; double threshold_; unsigned int debug_; - uint32_t cablingCacheId_; + edm::ESGetToken fedCablingToken_; + edm::ESWatcher fedCablingWatcher_; const SiStripFedCabling* cabling_; SiStripBadStrip obj_; std::map > detIdErrors_; }; -#include "FWCore/Framework/interface/ESHandle.h" #include "CalibTracker/SiStripCommon/interface/SiStripDetInfoFileReader.h" #include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h" #include "CondFormats/SiStripObjects/interface/FedChannelConnection.h" -#include "CondFormats/DataRecord/interface/SiStripFedCablingRcd.h" #include "DataFormats/FEDRawData/interface/FEDNumbering.h" #include "DQMServices/Core/interface/DQMStore.h" -SiStripPopConFEDErrorsHandlerFromDQM::SiStripPopConFEDErrorsHandlerFromDQM(const edm::ParameterSet& iConfig) +SiStripPopConFEDErrorsHandlerFromDQM::SiStripPopConFEDErrorsHandlerFromDQM(const edm::ParameterSet& iConfig, + edm::ConsumesCollector&& iC) : SiStripDQMPopConSourceHandler(iConfig), fp_(iConfig.getUntrackedParameter( "file", edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"))), threshold_(iConfig.getUntrackedParameter("Threshold", 0)), debug_(iConfig.getUntrackedParameter("Debug", 0)), - cablingCacheId_(0) { + fedCablingToken_(iC.esConsumes()) { edm::LogInfo("SiStripFEDErrorsDQM") << "[SiStripFEDErrorsDQM::SiStripFEDErrorsDQM()]"; } @@ -71,12 +73,8 @@ SiStripPopConFEDErrorsHandlerFromDQM::~SiStripPopConFEDErrorsHandlerFromDQM() { } void SiStripPopConFEDErrorsHandlerFromDQM::initES(const edm::EventSetup& iSetup) { - uint32_t currentCacheId = iSetup.get().cacheIdentifier(); - if (cablingCacheId_ != currentCacheId) { - edm::ESHandle cablingHandle; - iSetup.get().get(cablingHandle); - cabling_ = cablingHandle.product(); - cablingCacheId_ = currentCacheId; + if (fedCablingWatcher_.check(iSetup)) { + cabling_ = &iSetup.getData(fedCablingToken_); } } diff --git a/DQMOffline/CalibTracker/plugins/SiStripPopConNoisesDQM.cc b/DQMOffline/CalibTracker/plugins/SiStripPopConNoisesDQM.cc index b2709358d8d8c..23a7a92d6ce54 100644 --- a/DQMOffline/CalibTracker/plugins/SiStripPopConNoisesDQM.cc +++ b/DQMOffline/CalibTracker/plugins/SiStripPopConNoisesDQM.cc @@ -11,7 +11,7 @@ class SiStripPopConNoisesHandlerFromDQM : public SiStripDQMPopConSourceHandler(iConfig), fp_{iConfig.getUntrackedParameter( "file", edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"))}, diff --git a/DQMOffline/CalibTracker/plugins/SiStripPopConPedestalsDQM.cc b/DQMOffline/CalibTracker/plugins/SiStripPopConPedestalsDQM.cc index 2c8ce1d87dd9b..cf74ae0019aeb 100644 --- a/DQMOffline/CalibTracker/plugins/SiStripPopConPedestalsDQM.cc +++ b/DQMOffline/CalibTracker/plugins/SiStripPopConPedestalsDQM.cc @@ -12,7 +12,7 @@ class SiStripPopConPedestalsHandlerFromDQM : public SiStripDQMPopConSourceHandle typedef dqm::legacy::MonitorElement MonitorElement; typedef dqm::legacy::DQMStore DQMStore; - explicit SiStripPopConPedestalsHandlerFromDQM(const edm::ParameterSet& iConfig); + explicit SiStripPopConPedestalsHandlerFromDQM(const edm::ParameterSet& iConfig, edm::ConsumesCollector&&); ~SiStripPopConPedestalsHandlerFromDQM() override; // interface methods: implemented in template void dqmEndJob(DQMStore::IBooker& booker, DQMStore::IGetter& getter) override; @@ -27,7 +27,8 @@ class SiStripPopConPedestalsHandlerFromDQM : public SiStripDQMPopConSourceHandle #include "DQMServices/Core/interface/DQMStore.h" #include "CalibTracker/SiStripCommon/interface/SiStripDetInfoFileReader.h" -SiStripPopConPedestalsHandlerFromDQM::SiStripPopConPedestalsHandlerFromDQM(const edm::ParameterSet& iConfig) +SiStripPopConPedestalsHandlerFromDQM::SiStripPopConPedestalsHandlerFromDQM(const edm::ParameterSet& iConfig, + edm::ConsumesCollector&&) : SiStripDQMPopConSourceHandler(iConfig), fp_{iConfig.getUntrackedParameter( "file", edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"))}, diff --git a/DQMOffline/CalibTracker/plugins/SiStripQualityHotStripIdentifierRoot.cc b/DQMOffline/CalibTracker/plugins/SiStripQualityHotStripIdentifierRoot.cc index de706ed8acaec..4f8a380293e9d 100644 --- a/DQMOffline/CalibTracker/plugins/SiStripQualityHotStripIdentifierRoot.cc +++ b/DQMOffline/CalibTracker/plugins/SiStripQualityHotStripIdentifierRoot.cc @@ -17,15 +17,12 @@ #include "TH1F.h" //Insert here the include to the algos -#include "CalibTracker/Records/interface/SiStripQualityRcd.h" #include "CalibTracker/SiStripQuality/interface/SiStripHotStripAlgorithmFromClusterOccupancy.h" #include "CalibTracker/SiStripQuality/interface/SiStripBadAPVAlgorithmFromClusterOccupancy.h" #include "CalibTracker/SiStripQuality/interface/SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy.h" SiStripQualityHotStripIdentifierRoot::SiStripQualityHotStripIdentifierRoot(const edm::ParameterSet& iConfig) : ConditionDBWriter(iConfig), - m_cacheID_(0), - dataLabel_(iConfig.getUntrackedParameter("dataLabel", "")), UseInputDB_(iConfig.getUntrackedParameter("UseInputDB", false)), conf_(iConfig), tracker_(nullptr), @@ -34,7 +31,13 @@ SiStripQualityHotStripIdentifierRoot::SiStripQualityHotStripIdentifierRoot(const dirpath(iConfig.getUntrackedParameter("rootDirPath", "")), TotNumberOfEvents(0), MeanNumberOfCluster(0), - calibrationthreshold(iConfig.getUntrackedParameter("CalibrationThreshold", 10000)) { + calibrationthreshold(iConfig.getUntrackedParameter("CalibrationThreshold", 10000)), + tTopoToken_(esConsumes()), + tkGeomToken_(esConsumes()), + stripQualityToken_(UseInputDB_ + ? decltype(stripQualityToken_)(esConsumes( + edm::ESInputTag{"", iConfig.getUntrackedParameter("dataLabel", "")})) + : decltype(stripQualityToken_){}) { dqmStore_ = edm::Service().operator->(); if (!filename.empty()) { @@ -86,7 +89,7 @@ std::unique_ptr SiStripQualityHotStripIdentifierRoot::getNewObj theIdentifier->extractBadStrips( qobj, ClusterPositionHistoMap, - SiStripQuality_.product()); //here I insert SiStripQuality as input and get qobj as output + SiStripQuality_); //here I insert SiStripQuality as input and get qobj as output //---------- @@ -233,23 +236,10 @@ std::unique_ptr SiStripQualityHotStripIdentifierRoot::getNewObj } void SiStripQualityHotStripIdentifierRoot::algoBeginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) { - //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - tTopo = tTopoHandle.product(); - - iSetup.get().get(theTrackerGeom); - tracker_ = &(*theTrackerGeom); - - if (UseInputDB_) { - unsigned long long cacheID = iSetup.get().cacheIdentifier(); - - if (m_cacheID_ == cacheID) - return; - - m_cacheID_ = cacheID; - - iSetup.get().get(dataLabel_, SiStripQuality_); + tTopo = &iSetup.getData(tTopoToken_); + tracker_ = &iSetup.getData(tkGeomToken_); + if (UseInputDB_ && stripQualityWatcher_.check(iSetup)) { + SiStripQuality_ = &iSetup.getData(stripQualityToken_); } } diff --git a/DQMOffline/CalibTracker/plugins/SiStripQualityHotStripIdentifierRoot.h b/DQMOffline/CalibTracker/plugins/SiStripQualityHotStripIdentifierRoot.h index c74c1ebb56c25..eeca28bc58beb 100644 --- a/DQMOffline/CalibTracker/plugins/SiStripQualityHotStripIdentifierRoot.h +++ b/DQMOffline/CalibTracker/plugins/SiStripQualityHotStripIdentifierRoot.h @@ -3,7 +3,7 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "CommonTools/ConditionDBWriter/interface/ConditionDBWriter.h" @@ -17,6 +17,7 @@ #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "CalibFormats/SiStripObjects/interface/SiStripQuality.h" +#include "CalibTracker/Records/interface/SiStripQualityRcd.h" #include #include @@ -57,15 +58,12 @@ class SiStripQualityHotStripIdentifierRoot : public ConditionDBWriter SiStripQuality_; bool UseInputDB_; const edm::ParameterSet conf_; - edm::ESHandle theTrackerGeom; const TrackerGeometry* tracker_; const TrackerTopology* tTopo; + const SiStripQuality* SiStripQuality_; DQMStore* dqmStore_; @@ -76,6 +74,11 @@ class SiStripQualityHotStripIdentifierRoot : public ConditionDBWriter tTopoToken_; + edm::ESGetToken tkGeomToken_; + edm::ESGetToken stripQualityToken_; + edm::ESWatcher stripQualityWatcher_; + SiStrip::QualityHistosMap ClusterPositionHistoMap; SiStripHotStripAlgorithmFromClusterOccupancy* theIdentifier; SiStripBadAPVAlgorithmFromClusterOccupancy* theIdentifier2; diff --git a/DQMOffline/CalibTracker/test/SiStripBadComponentsDQMService_cfg.py b/DQMOffline/CalibTracker/test/SiStripBadComponentsDQMService_cfg.py old mode 100755 new mode 100644 index d9319612bdbb9..66592351ae428 --- a/DQMOffline/CalibTracker/test/SiStripBadComponentsDQMService_cfg.py +++ b/DQMOffline/CalibTracker/test/SiStripBadComponentsDQMService_cfg.py @@ -7,10 +7,18 @@ ######################### process.MessageLogger = cms.Service("MessageLogger", -destinations = cms.untracked.vstring('cout', 'readFromFile_57620'), -readFromFile_57620 = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG')), -debugModules = cms.untracked.vstring('*') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True) + ), + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + readFromFile_57620 = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG') + ) + ) ) diff --git a/DQMOffline/CalibTracker/test/SiStripFEDErrorsDQMRead_cfg.py b/DQMOffline/CalibTracker/test/SiStripFEDErrorsDQMRead_cfg.py index 81d8627c94952..4548c72256520 100644 --- a/DQMOffline/CalibTracker/test/SiStripFEDErrorsDQMRead_cfg.py +++ b/DQMOffline/CalibTracker/test/SiStripFEDErrorsDQMRead_cfg.py @@ -11,9 +11,15 @@ interval = cms.uint32(1) ) -process.MessageLogger = cms.Service( - "MessageLogger", - destinations = cms.untracked.vstring("SiStripFEDErrorsDQMReader.log"), +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + files = cms.untracked.PSet( + SiStripFEDErrorsDQMReader = cms.untracked.PSet( + + ) + ), threshold = cms.untracked.string('INFO') ) diff --git a/DQMOffline/CalibTracker/test/SiStripFEDErrorsDQM_cfg.py b/DQMOffline/CalibTracker/test/SiStripFEDErrorsDQM_cfg.py index 6892f0efda462..c8f2f363de375 100644 --- a/DQMOffline/CalibTracker/test/SiStripFEDErrorsDQM_cfg.py +++ b/DQMOffline/CalibTracker/test/SiStripFEDErrorsDQM_cfg.py @@ -6,45 +6,31 @@ # message logger ######################### -process.MessageLogger = cms.Service( - "MessageLogger", - info = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - #limit = cms.untracked.int32(100000), - noLineBreaks = cms.untracked.bool(False) - ), - #suppressInfo = cms.untracked.vstring(), - # allows to suppress output from specific modules - #suppressDebug = cms.untracked.vstring(), - debug = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - #limit = cms.untracked.int32(100000), - noLineBreaks = cms.untracked.bool(False) - ), - warning = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - #limit = cms.untracked.int32(100000), - noLineBreaks = cms.untracked.bool(False) - ), +process.MessageLogger = cms.Service("MessageLogger", cerr = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), - #limit = cms.untracked.int32(100000), - noLineBreaks = cms.untracked.bool(False) + noLineBreaks = cms.untracked.bool(False), + threshold = cms.untracked.string('ERROR') + ), + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + debug = cms.untracked.PSet( + noLineBreaks = cms.untracked.bool(False), + threshold = cms.untracked.string('DEBUG') ), - error = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), - #limit = cms.untracked.int32(100000), - noLineBreaks = cms.untracked.bool(False) + error = cms.untracked.PSet( + noLineBreaks = cms.untracked.bool(False), + threshold = cms.untracked.string('ERROR') ), - #suppressWarning = cms.untracked.vstring(), - debugModules = cms.untracked.vstring('*'),#'siStripFEDMonitor'), - destinations = cms.untracked.vstring('cerr', - 'debug', - 'info', - 'warning', - 'error') - + info = cms.untracked.PSet( + noLineBreaks = cms.untracked.bool(False), + threshold = cms.untracked.string('INFO') + ), + warning = cms.untracked.PSet( + noLineBreaks = cms.untracked.bool(False), + threshold = cms.untracked.string('WARNING') + ) ) +) #process.MessageLogger = cms.Service("MessageLogger" #destinations = cms.untracked.vstring('cout', 'readFromFile'), diff --git a/DQMOffline/CalibTracker/test/SiStripNoises_cfg.py b/DQMOffline/CalibTracker/test/SiStripNoises_cfg.py old mode 100755 new mode 100644 index 90b3063f0fecc..cd910339d6631 --- a/DQMOffline/CalibTracker/test/SiStripNoises_cfg.py +++ b/DQMOffline/CalibTracker/test/SiStripNoises_cfg.py @@ -7,10 +7,18 @@ ######################### process.MessageLogger = cms.Service("MessageLogger", -destinations = cms.untracked.vstring('cout', 'readFromFile_57620'), -readFromFile_57620 = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG')), -debugModules = cms.untracked.vstring('*') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True) + ), + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + readFromFile_57620 = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG') + ) + ) ) diff --git a/DQMOffline/CalibTracker/test/SiStripPedestals_cfg.py b/DQMOffline/CalibTracker/test/SiStripPedestals_cfg.py old mode 100755 new mode 100644 index 2242591026dde..9bb39e762d004 --- a/DQMOffline/CalibTracker/test/SiStripPedestals_cfg.py +++ b/DQMOffline/CalibTracker/test/SiStripPedestals_cfg.py @@ -7,10 +7,18 @@ ######################### process.MessageLogger = cms.Service("MessageLogger", -destinations = cms.untracked.vstring('cout', 'readFromFile_57620'), -readFromFile_57620 = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG')), -debugModules = cms.untracked.vstring('*') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True) + ), + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + readFromFile_57620 = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG') + ) + ) ) diff --git a/DQMOffline/CalibTracker/test/SiStripQualityBadAPVandHotStripIdentifierRoot_cfg.py b/DQMOffline/CalibTracker/test/SiStripQualityBadAPVandHotStripIdentifierRoot_cfg.py index 20f1e0d65c524..61754c1755175 100644 --- a/DQMOffline/CalibTracker/test/SiStripQualityBadAPVandHotStripIdentifierRoot_cfg.py +++ b/DQMOffline/CalibTracker/test/SiStripQualityBadAPVandHotStripIdentifierRoot_cfg.py @@ -4,11 +4,14 @@ process.load("DQMServices.Core.DQMStore_cfg") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring('*'), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('cout') + debugModules = cms.untracked.vstring('*') ) process.source = cms.Source("EmptyIOVSource", diff --git a/DQMOffline/CalibTracker/test/SiStripQualityStatistics_full_cfg.py b/DQMOffline/CalibTracker/test/SiStripQualityStatistics_full_cfg.py index 6bf0a88fb023e..76177371a1a8c 100644 --- a/DQMOffline/CalibTracker/test/SiStripQualityStatistics_full_cfg.py +++ b/DQMOffline/CalibTracker/test/SiStripQualityStatistics_full_cfg.py @@ -2,10 +2,13 @@ process = cms.Process("CALIB") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') - ), - destinations = cms.untracked.vstring('cout') + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/DQMOffline/CalibTracker/test/SiStripQualityStatistics_offline_cfg.py b/DQMOffline/CalibTracker/test/SiStripQualityStatistics_offline_cfg.py index 36fe825a47ae4..766ed73fe63ec 100644 --- a/DQMOffline/CalibTracker/test/SiStripQualityStatistics_offline_cfg.py +++ b/DQMOffline/CalibTracker/test/SiStripQualityStatistics_offline_cfg.py @@ -2,10 +2,13 @@ process = cms.Process("CALIB") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') - ), - destinations = cms.untracked.vstring('cout') + ) ) process.source = cms.Source("EmptyIOVSource", diff --git a/DQMOffline/CalibTracker/test/example_QualityCalibration_cfg.py b/DQMOffline/CalibTracker/test/example_QualityCalibration_cfg.py index 74e6ab964cf9f..fe8c38dc634fb 100644 --- a/DQMOffline/CalibTracker/test/example_QualityCalibration_cfg.py +++ b/DQMOffline/CalibTracker/test/example_QualityCalibration_cfg.py @@ -3,11 +3,24 @@ process = cms.Process("SiStripHotStripCalibration") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring('orbitFilter','OrbitFilter','SiStripQualityHotStripIdentifierRoot','siStripQualityHotStripIdentifierRoot','SiStripHotStripAlgorithmFromClusterOccupancy'), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + debugModules = cms.untracked.vstring( + 'orbitFilter', + 'OrbitFilter', + 'SiStripQualityHotStripIdentifierRoot', + 'siStripQualityHotStripIdentifierRoot', + 'SiStripHotStripAlgorithmFromClusterOccupancy' + ), + files = cms.untracked.PSet( + log = cms.untracked.PSet( + extension = cms.untracked.string('txt') + ) + ), log = cms.untracked.PSet( threshold = cms.untracked.string('INFO') - ), - destinations = cms.untracked.vstring('log.txt') + ) ) #------------------------------------------------- diff --git a/DQMOffline/CalibTracker/test/template_SiStripQualityBadAPVandHotStripIdentifierRoot_cfg.py b/DQMOffline/CalibTracker/test/template_SiStripQualityBadAPVandHotStripIdentifierRoot_cfg.py index de8248628c7bc..844d9f87230e2 100644 --- a/DQMOffline/CalibTracker/test/template_SiStripQualityBadAPVandHotStripIdentifierRoot_cfg.py +++ b/DQMOffline/CalibTracker/test/template_SiStripQualityBadAPVandHotStripIdentifierRoot_cfg.py @@ -4,11 +4,14 @@ process.load("DQMServices.Core.DQM_cfg") process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring('*'), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('cout') + debugModules = cms.untracked.vstring('*') ) process.source = cms.Source("EmptyIOVSource", diff --git a/DQMOffline/CalibTracker/test/testSuite/SiStripBadStripReader_cfg.py b/DQMOffline/CalibTracker/test/testSuite/SiStripBadStripReader_cfg.py old mode 100755 new mode 100644 index 93ffd7851bba4..4b13eb218504e --- a/DQMOffline/CalibTracker/test/testSuite/SiStripBadStripReader_cfg.py +++ b/DQMOffline/CalibTracker/test/testSuite/SiStripBadStripReader_cfg.py @@ -12,10 +12,13 @@ ) process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO') - ), - destinations = cms.untracked.vstring('cout') + ) ) process.Timing = cms.Service("Timing") diff --git a/DQMOffline/Configuration/python/DQMOfflineCosmics_SecondStep_cff.py b/DQMOffline/Configuration/python/DQMOfflineCosmics_SecondStep_cff.py index e9a5d70975785..efe2f49a30628 100644 --- a/DQMOffline/Configuration/python/DQMOfflineCosmics_SecondStep_cff.py +++ b/DQMOffline/Configuration/python/DQMOfflineCosmics_SecondStep_cff.py @@ -11,7 +11,7 @@ from DQM.DTMonitorClient.dtDQMOfflineClients_Cosmics_cff import * from DQM.RPCMonitorClient.RPCTier0Client_cff import * from DQM.CSCMonitorModule.csc_dqm_offlineclient_cosmics_cff import * -from DQMOffline.Muon.gem_dqm_offline_client_cff import * +from DQMOffline.Muon.gem_dqm_offline_client_cosmics_cff import * from DQMServices.Components.DQMFEDIntegrityClient_cff import * DQMNone = cms.Sequence() @@ -31,7 +31,7 @@ from Configuration.Eras.Modifier_run3_GEM_cff import run3_GEM _run3_GEM_DQMOfflineCosmics_SecondStepMuonDPG = DQMOfflineCosmics_SecondStepMuonDPG.copy() -_run3_GEM_DQMOfflineCosmics_SecondStepMuonDPG += gemClients +_run3_GEM_DQMOfflineCosmics_SecondStepMuonDPG += gemClientsCosmics run3_GEM.toReplaceWith(DQMOfflineCosmics_SecondStepMuonDPG, _run3_GEM_DQMOfflineCosmics_SecondStepMuonDPG) DQMOfflineCosmics_SecondStepFED = cms.Sequence( dqmFEDIntegrityClient ) diff --git a/DQMOffline/Configuration/python/DQMOfflineCosmics_cff.py b/DQMOffline/Configuration/python/DQMOfflineCosmics_cff.py index 2e4ada05de2fd..247877c5a7146 100644 --- a/DQMOffline/Configuration/python/DQMOfflineCosmics_cff.py +++ b/DQMOffline/Configuration/python/DQMOfflineCosmics_cff.py @@ -11,7 +11,7 @@ from DQM.DTMonitorModule.dtDQMOfflineSources_Cosmics_cff import * from DQM.RPCMonitorClient.RPCTier0Source_cff import * from DQM.CSCMonitorModule.csc_dqm_sourceclient_offline_cff import * -from DQMOffline.Muon.gem_dqm_offline_source_cff import * +from DQMOffline.Muon.gem_dqm_offline_source_cosmics_cff import * from DQM.EcalPreshowerMonitorModule.es_dqm_source_offline_cosmic_cff import * from DQM.CastorMonitor.castor_dqm_sourceclient_offline_cff import * @@ -36,7 +36,7 @@ from Configuration.Eras.Modifier_run3_GEM_cff import run3_GEM _run3_GEM_DQMOfflineCosmicsMuonDPG = DQMOfflineCosmicsMuonDPG.copy() -_run3_GEM_DQMOfflineCosmicsMuonDPG += gemSources +_run3_GEM_DQMOfflineCosmicsMuonDPG += gemSourcesCosmics run3_GEM.toReplaceWith(DQMOfflineCosmicsMuonDPG, _run3_GEM_DQMOfflineCosmicsMuonDPG) diff --git a/DQMOffline/EGamma/src/ElectronDqmHarvesterBase.cc b/DQMOffline/EGamma/src/ElectronDqmHarvesterBase.cc index 729359aa5d545..a16d83e61d455 100644 --- a/DQMOffline/EGamma/src/ElectronDqmHarvesterBase.cc +++ b/DQMOffline/EGamma/src/ElectronDqmHarvesterBase.cc @@ -204,7 +204,7 @@ ElectronDqmHarvesterBase::MonitorElement *ElectronDqmHarvesterBase::bookH1(DQMSt me->setOption(option); } if (bookStatOverflowFlag_) { - me->getTH1F()->StatOverflows(kTRUE); + me->setStatOverflows(kTRUE); } return me; } diff --git a/DQMOffline/EGamma/test/PhotonAnalyzer_cfg.py b/DQMOffline/EGamma/test/PhotonAnalyzer_cfg.py index c1a91dd8fdbc3..8eb8d5af40107 100644 --- a/DQMOffline/EGamma/test/PhotonAnalyzer_cfg.py +++ b/DQMOffline/EGamma/test/PhotonAnalyzer_cfg.py @@ -49,10 +49,6 @@ process.schedule = cms.Schedule(process.p1) -<<<<<<< HEAD process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) process.MessageLogger = cms.Service("MessageLogger") -======= -#print process.dumpPython() ->>>>>>> automated DQM diff --git a/DQMOffline/Hcal/test/hcalCollapseAnalyzer_cfg.py b/DQMOffline/Hcal/test/hcalCollapseAnalyzer_cfg.py index 0c4c8a9622c5d..cfbba6a81ccb1 100644 --- a/DQMOffline/Hcal/test/hcalCollapseAnalyzer_cfg.py +++ b/DQMOffline/Hcal/test/hcalCollapseAnalyzer_cfg.py @@ -7,7 +7,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('Collapse') + process.MessageLogger.Collapse=dict() process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring('file:step311.root'), diff --git a/DQMOffline/L1Trigger/python/L1TriggerDqmOffline_cff.py b/DQMOffline/L1Trigger/python/L1TriggerDqmOffline_cff.py index a5f2b77d85940..fb79a5f898d9d 100644 --- a/DQMOffline/L1Trigger/python/L1TriggerDqmOffline_cff.py +++ b/DQMOffline/L1Trigger/python/L1TriggerDqmOffline_cff.py @@ -159,7 +159,8 @@ # DQM Offline Step 1 sequence l1TriggerDqmOffline = cms.Sequence( l1TriggerOffline - * l1tRate_Offline + #* l1tRate_Offline #Disabled for the moment as agreed on + # https://github.com/cms-sw/cmssw/issues/25090#issuecomment-789016559 * l1tSync_Offline * l1TriggerEmulatorOffline ) @@ -213,6 +214,7 @@ #l1TriggerOnline.remove(l1tMonitorOnline) # l1tMonitorStage1Online.remove(bxTiming) +l1tMonitorStage1Online.remove(l1tGt) #Following https://github.com/cms-sw/cmssw/issues/25090#issuecomment-789201888 #l1tMonitorOnline.remove(l1tDttf) #l1tMonitorOnline.remove(l1tCsctf) #l1tMonitorOnline.remove(l1tRpctf) diff --git a/DQMOffline/L1Trigger/src/L1TTauOffline.cc b/DQMOffline/L1Trigger/src/L1TTauOffline.cc index d2234483ee339..34843dacc9299 100644 --- a/DQMOffline/L1Trigger/src/L1TTauOffline.cc +++ b/DQMOffline/L1Trigger/src/L1TTauOffline.cc @@ -668,7 +668,7 @@ void L1TTauOffline::getProbeTaus(const edm::Event& iEvent, { const edm::Provenance* prov = antimu.provenance(); const std::vector psetsFromProvenance = - edm::parameterSet(*prov, iEvent.processHistory()) + edm::parameterSet(prov->stable(), iEvent.processHistory()) .getParameter>("IDWPdefinitions"); for (uint i = 0; i < psetsFromProvenance.size(); i++) { if (psetsFromProvenance[i].getParameter("IDname") == AntiMuWP_) @@ -678,7 +678,8 @@ void L1TTauOffline::getProbeTaus(const edm::Event& iEvent, { const edm::Provenance* prov = antiele.provenance(); const std::vector psetsFromProvenance = - edm::parameterSet(*prov, iEvent.processHistory()).getParameter>("workingPoints"); + edm::parameterSet(prov->stable(), iEvent.processHistory()) + .getParameter>("workingPoints"); for (uint i = 0; i < psetsFromProvenance.size(); i++) { if (psetsFromProvenance[i] == AntiEleWP_) AntiEleWPIndex_ = i; @@ -687,7 +688,7 @@ void L1TTauOffline::getProbeTaus(const edm::Event& iEvent, { const edm::Provenance* prov = comb3T.provenance(); const std::vector psetsFromProvenance = - edm::parameterSet(*prov, iEvent.processHistory()) + edm::parameterSet(prov->stable(), iEvent.processHistory()) .getParameter>("IDWPdefinitions"); for (uint i = 0; i < psetsFromProvenance.size(); i++) { if (psetsFromProvenance[i].getParameter("IDname") == comb3TWP_) diff --git a/DQMOffline/Muon/BuildFile.xml b/DQMOffline/Muon/BuildFile.xml index e5546f57db922..bd3944abc22f8 100644 --- a/DQMOffline/Muon/BuildFile.xml +++ b/DQMOffline/Muon/BuildFile.xml @@ -15,4 +15,6 @@ + + diff --git a/DQMOffline/Muon/interface/GEMEfficiencyAnalyzer.h b/DQMOffline/Muon/interface/GEMEfficiencyAnalyzer.h index 09c82469535ef..32ff4641fe507 100644 --- a/DQMOffline/Muon/interface/GEMEfficiencyAnalyzer.h +++ b/DQMOffline/Muon/interface/GEMEfficiencyAnalyzer.h @@ -1,63 +1,125 @@ #ifndef DQMOffline_Muon_GEMEfficiencyAnalyzer_h #define DQMOffline_Muon_GEMEfficiencyAnalyzer_h +/** \class GEMEfficiencyAnalyzer + * + * DQM monitoring source for GEM efficiency and resolution + * based on https://github.com/CPLUOS/MuonPerformance/blob/master/MuonAnalyser/plugins/SliceTestEfficiencyAnalysis.cc + * + * \author Seungjin Yang + */ + #include "DQMOffline/Muon/interface/GEMOfflineDQMBase.h" #include "FWCore/Utilities/interface/EDGetToken.h" #include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "DataFormats/GEMRecHit/interface/GEMRecHitCollection.h" #include "DataFormats/PatCandidates/interface/Muon.h" #include "DataFormats/MuonReco/interface/MuonSelectors.h" -#include "Geometry/GEMGeometry/interface/GEMGeometry.h" #include "RecoMuon/TrackingTools/interface/MuonServiceProxy.h" +#include "TrackingTools/TransientTrack/interface/TransientTrack.h" class GEMEfficiencyAnalyzer : public GEMOfflineDQMBase { public: explicit GEMEfficiencyAnalyzer(const edm::ParameterSet &); ~GEMEfficiencyAnalyzer() override; + static void fillDescriptions(edm::ConfigurationDescriptions &); protected: void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override; void analyze(const edm::Event &event, const edm::EventSetup &eventSetup) override; private: - void bookDetectorOccupancy( - DQMStore::IBooker &, const GEMStation *, const MEMapKey1 &, const TString &, const TString &); - void bookOccupancy(DQMStore::IBooker &, const MEMapKey2 &, const TString &, const TString &); - void bookResolution(DQMStore::IBooker &, const MEMapKey3 &, const TString &, const TString &); + struct GEMLayerData { + GEMLayerData(Disk::DiskPointer surface, std::vector chambers, int region, int station, int layer) + : surface(surface), chambers(chambers), region(region), station(station), layer(layer) {} - const GEMRecHit *findMatchedHit(const float, const GEMRecHitCollection::range &); + Disk::DiskPointer surface; + std::vector chambers; + int region, station, layer; + }; - edm::EDGetTokenT rechit_token_; - edm::EDGetTokenT > muon_token_; + MonitorElement *bookNumerator1D(DQMStore::IBooker &, MonitorElement *); + MonitorElement *bookNumerator2D(DQMStore::IBooker &, MonitorElement *); - MuonServiceProxy *muon_service_; + void bookEfficiencyMomentum(DQMStore::IBooker &, const edm::ESHandle &); + void bookEfficiencyChamber(DQMStore::IBooker &, const edm::ESHandle &); + void bookEfficiencyEtaPartition(DQMStore::IBooker &, const edm::ESHandle &); + void bookResolution(DQMStore::IBooker &, const edm::ESHandle &); + void bookMisc(DQMStore::IBooker &, const edm::ESHandle &); - bool use_global_muon_; - float residual_x_cut_; + inline bool isInsideOut(const reco::Track &); + + std::vector buildGEMLayers(const edm::ESHandle &); + const reco::Track *getTrack(const reco::Muon &); + std::pair getStartingState(const reco::TransientTrack &, + const GEMLayerData &, + const edm::ESHandle &); + std::pair findStartingState(const reco::TransientTrack &, + const GEMLayerData &, + const edm::ESHandle &); + bool isME11(const DetId &); + bool skipLayer(const reco::Track *, const GEMLayerData &); + bool checkBounds(const GlobalPoint &, const Plane &); + const GEMEtaPartition *findEtaPartition(const GlobalPoint &, const std::vector &); + std::pair findClosetHit(const GlobalPoint &, + const GEMRecHitCollection::range &, + const GEMEtaPartition *); - std::vector pt_binning_; + // data members + + // parameters + std::string name_; + std::string folder_; + edm::EDGetTokenT rechit_token_; + edm::EDGetTokenT > muon_token_; + bool is_cosmics_; + bool use_global_muon_; + bool use_skip_layer_; + bool use_only_me11_; + float residual_rphi_cut_; + bool use_prop_r_error_cut_; + double prop_r_error_cut_; + bool use_prop_phi_error_cut_; + double prop_phi_error_cut_; + std::vector pt_bins_; int eta_nbins_; double eta_low_; double eta_up_; - std::string folder_; - - TString title_; - TString matched_title_; - - MEMap1 me_detector_; - MEMap1 me_detector_matched_; + // data mebers derived from parameters + MuonServiceProxy *muon_service_; + double pt_clamp_max_; + double eta_clamp_max_; - MEMap2 me_muon_pt_; - MEMap2 me_muon_eta_; - MEMap2 me_muon_pt_matched_; - MEMap2 me_muon_eta_matched_; + // MonitorElement + // efficiency + MEMap me_muon_pt_; // 1D, region-station + MEMap me_muon_pt_matched_; + MEMap me_muon_eta_; // 1D, region-station + MEMap me_muon_eta_matched_; + MEMap me_muon_phi_; // 1D, region-station + MEMap me_muon_phi_matched_; + MEMap me_chamber_; // 2D, region-station-layer + MEMap me_chamber_matched_; + MEMap me_detector_; // 2D, region-station + MEMap me_detector_matched_; + // resolution + MEMap me_residual_rphi_; // global + MEMap me_residual_y_; // local + MEMap me_pull_y_; + // MEs for optimizing cut values + MonitorElement *me_prop_r_err_; // clamped + MonitorElement *me_prop_phi_err_; // clamped + MonitorElement *me_all_abs_residual_rphi_; + MEMap me_prop_chamber_; - MEMap3 me_residual_x_; // local - MEMap3 me_residual_y_; // local - MEMap3 me_residual_phi_; // global - MEMap3 me_pull_x_; - MEMap3 me_pull_y_; + // const + const std::string kLogCategory_ = "GEMEfficiencyAnalyzer"; }; +inline bool GEMEfficiencyAnalyzer::isInsideOut(const reco::Track &track) { + return track.innerPosition().mag2() > track.outerPosition().mag2(); +} + #endif // DQMOffline_Muon_GEMEfficiencyAnalyzer_h diff --git a/DQMOffline/Muon/interface/GEMEfficiencyHarvester.h b/DQMOffline/Muon/interface/GEMEfficiencyHarvester.h index 24f3889e9fb11..ddfef981a2737 100644 --- a/DQMOffline/Muon/interface/GEMEfficiencyHarvester.h +++ b/DQMOffline/Muon/interface/GEMEfficiencyHarvester.h @@ -1,9 +1,18 @@ #ifndef DQMOffline_Muon_GEMEfficiencyHarvester_h #define DQMOffline_Muon_GEMEfficiencyHarvester_h +/** \class GEMEfficiencyAnalyzer + * + * DQM monitoring client for GEM efficiency and resolution + * based on Validation/MuonGEMHits/MuonGEMBaseHarvestor + * + * \author Seungjin Yang + */ + #include "DQMServices/Core/interface/DQMEDHarvester.h" #include "DQMServices/Core/interface/DQMStore.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include #include @@ -12,21 +21,29 @@ class GEMEfficiencyHarvester : public DQMEDHarvester { public: GEMEfficiencyHarvester(const edm::ParameterSet&); ~GEMEfficiencyHarvester() override; + static void fillDescriptions(edm::ConfigurationDescriptions&); void dqmEndJob(DQMStore::IBooker&, DQMStore::IGetter&) override; private: TProfile* computeEfficiency(const TH1F*, const TH1F*, const char*, const char*, const double confidence_level = 0.683); - TH2F* computeEfficiency(const TH2F*, const TH2F*, const char*, const char*); - std::vector splitString(std::string, const std::string); - std::tuple parseResidualName(std::string, const std::string); - + std::tuple parseResidualName(std::string, const std::string); void doEfficiency(DQMStore::IBooker&, DQMStore::IGetter&); void doResolution(DQMStore::IBooker&, DQMStore::IGetter&, const std::string); + template + int findResolutionBin(const T&, const std::vector&); + std::string folder_; std::string log_category_; }; +template +int GEMEfficiencyHarvester::findResolutionBin(const T& elem, const std::vector& vec) { + auto iter = std::find(vec.begin(), vec.end(), elem); + int bin = (iter != vec.end()) ? std::distance(vec.begin(), iter) + 1 : -1; + return bin; +} + #endif // DQMOffline_Muon_GEMEfficiencyHarvester_h diff --git a/DQMOffline/Muon/interface/GEMOfflineDQMBase.h b/DQMOffline/Muon/interface/GEMOfflineDQMBase.h index e5dd71fb2599e..18c2d9807cbae 100644 --- a/DQMOffline/Muon/interface/GEMOfflineDQMBase.h +++ b/DQMOffline/Muon/interface/GEMOfflineDQMBase.h @@ -10,98 +10,43 @@ class GEMOfflineDQMBase : public DQMEDAnalyzer { public: - explicit GEMOfflineDQMBase(const edm::ParameterSet&); + using MEMap = std::map; - typedef std::tuple MEMapKey1; // (region, station) - typedef std::tuple MEMapKey2; // (region, station, is odd superchamber) - typedef std::tuple MEMapKey3; // (region, station, is odd superchamber, ieta) - typedef std::map MEMap1; - typedef std::map MEMap2; - typedef std::map MEMap3; + explicit GEMOfflineDQMBase(const edm::ParameterSet&); inline int getVFATNumber(const int, const int, const int); inline int getVFATNumberByStrip(const int, const int, const int); inline int getMaxVFAT(const int); inline int getDetOccXBin(const int, const int, const int); + // Re: region / St: station, La: layer, Ch: chamber parity, Et: eta partition + inline GEMDetId getReStKey(const int, const int); + inline GEMDetId getReStKey(const GEMDetId&); + inline GEMDetId getReStLaKey(const GEMDetId&); + inline GEMDetId getReStEtKey(const GEMDetId&); + inline GEMDetId getReStLaChKey(const GEMDetId&); + inline GEMDetId getKey(const GEMDetId&); // == getReStLaChEtKey + int getDetOccXBin(const GEMDetId&, const edm::ESHandle&); void setDetLabelsVFAT(MonitorElement*, const GEMStation*); void setDetLabelsEta(MonitorElement*, const GEMStation*); - // the number of eta partitions per GEMChamber - int getNumEtaPartitions(const GEMStation*); - - template - TString convertKeyToStr(const AnyKey& key); - - template - void fillME(std::map&, const AnyKey&, const float); - - template - void fillME(std::map&, const AnyKey&, const float, const float y); + int getNumEtaPartitions(const GEMStation*); // the number of eta partitions per GEMChamber + void fillME(MEMap& me_map, const GEMDetId& key, const float x); + void fillME(MEMap& me_map, const GEMDetId& key, const float x, const float y); template inline bool checkRefs(const std::vector&); + // std::string log_category_; - - class BookingHelper { - public: - BookingHelper(DQMStore::IBooker& ibooker, const TString& name_suffix, const TString& title_suffix) - : ibooker_(&ibooker), name_suffix_(name_suffix), title_suffix_(title_suffix) {} - - ~BookingHelper() {} - - MonitorElement* book1D(TString name, - TString title, - int nbinsx, - double xlow, - double xup, - TString x_title = "", - TString y_title = "Entries") { - name += name_suffix_; - title += title_suffix_ + ";" + x_title + ";" + y_title; - return ibooker_->book1D(name, title, nbinsx, xlow, xup); - } - - MonitorElement* book1D(TString name, - TString title, - std::vector& x_binning, - TString x_title = "", - TString y_title = "Entries") { - name += name_suffix_; - title += title_suffix_ + ";" + x_title + ";" + y_title; - TH1F* h_obj = new TH1F(name, title, x_binning.size() - 1, &x_binning[0]); - return ibooker_->book1D(name, h_obj); - } - - MonitorElement* book2D(TString name, - TString title, - int nbinsx, - double xlow, - double xup, - int nbinsy, - double ylow, - double yup, - TString x_title = "", - TString y_title = "") { - name += name_suffix_; - title += title_suffix_ + ";" + x_title + ";" + y_title; - return ibooker_->book2D(name, title, nbinsx, xlow, xup, nbinsy, ylow, yup); - } - - private: - DQMStore::IBooker* ibooker_; - const TString name_suffix_; - const TString title_suffix_; - }; // BookingHelper }; inline int GEMOfflineDQMBase::getMaxVFAT(const int station) { - if (GEMSubDetId::station(station) == GEMSubDetId::Station::GE0) + if (station == 0) return GEMeMap::maxVFatGE0_; - else if (GEMSubDetId::station(station) == GEMSubDetId::Station::GE11) + else if (station == 1) return GEMeMap::maxVFatGE11_; - else if (GEMSubDetId::station(station) == GEMSubDetId::Station::GE21) + else if (station == 2) return GEMeMap::maxVFatGE21_; else return -1; @@ -115,7 +60,7 @@ inline int GEMOfflineDQMBase::getVFATNumber(const int station, const int ieta, c inline int GEMOfflineDQMBase::getVFATNumberByStrip(const int station, const int ieta, const int strip) { const int vfat_phi = (strip % GEMeMap::maxChan_) ? strip / GEMeMap::maxChan_ + 1 : strip / GEMeMap::maxChan_; return getVFATNumber(station, ieta, vfat_phi); -}; +} inline int GEMOfflineDQMBase::getDetOccXBin(const int chamber, const int layer, const int n_chambers) { return n_chambers * (chamber - 1) + layer; @@ -130,52 +75,27 @@ inline bool GEMOfflineDQMBase::checkRefs(const std::vector& refs) { return true; } -template -TString GEMOfflineDQMBase::convertKeyToStr(const AnyKey& key) { - if constexpr (std::is_same_v) { - return TString::Format("Region %d, Station %d.", std::get<0>(key), std::get<1>(key)); - - } else if constexpr (std::is_same_v) { - const char* superchamber_type = std::get<2>(key) ? "Odd" : "Even"; - return TString::Format( - "Region %d, Station %d, %s Superchamber", std::get<0>(key), std::get<1>(key), superchamber_type); - - } else if constexpr (std::is_same_v) { - const char* superchamber_type = std::get<2>(key) ? "Odd" : "Even"; - return TString::Format("Region %d, Station %d, %s Superchamber, Roll %d", - std::get<0>(key), - std::get<1>(key), - superchamber_type, - std::get<3>(key)); - - } else { - return TString::Format("unknown key type: %s", typeid(key).name()); - } +inline GEMDetId GEMOfflineDQMBase::getReStKey(const int region, const int station) { + // region, ring, station, layer, chamber, roll + return GEMDetId{region, 1, station, 0, 0, 0}; +} + +inline GEMDetId GEMOfflineDQMBase::getReStKey(const GEMDetId& id) { return getReStKey(id.region(), id.station()); } + +inline GEMDetId GEMOfflineDQMBase::getReStLaKey(const GEMDetId& id) { + return GEMDetId{id.region(), 1, id.station(), id.layer(), 0, 0}; } -template -void GEMOfflineDQMBase::fillME(std::map& me_map, const AnyKey& key, const float x) { - if (me_map.find(key) == me_map.end()) { - const TString&& key_str = convertKeyToStr(key); - edm::LogError(log_category_) << "got invalid key: " << key_str << std::endl; +inline GEMDetId GEMOfflineDQMBase::getReStEtKey(const GEMDetId& id) { + return GEMDetId{id.region(), 1, id.station(), 0, 0, id.roll()}; +} - } else { - me_map[key]->Fill(x); - } +inline GEMDetId GEMOfflineDQMBase::getReStLaChKey(const GEMDetId& id) { + return GEMDetId{id.region(), 1, id.station(), id.layer(), id.chamber() % 2, 0}; } -template -void GEMOfflineDQMBase::fillME(std::map& me_map, - const AnyKey& key, - const float x, - const float y) { - if (me_map.find(key) == me_map.end()) { - const TString&& key_str = convertKeyToStr(key); - edm::LogError(log_category_) << "got invalid key: " << key_str << std::endl; - - } else { - me_map[key]->Fill(x, y); - } +inline GEMDetId GEMOfflineDQMBase::getKey(const GEMDetId& id) { + return GEMDetId{id.region(), 1, id.station(), id.layer(), id.chamber() % 2, id.roll()}; } #endif // DQMOffline_Muon_GEMOfflineDQMBase_h diff --git a/DQMOffline/Muon/interface/GEMOfflineMonitor.h b/DQMOffline/Muon/interface/GEMOfflineMonitor.h index 19063b5d5f77a..ad7e4f07f5988 100644 --- a/DQMOffline/Muon/interface/GEMOfflineMonitor.h +++ b/DQMOffline/Muon/interface/GEMOfflineMonitor.h @@ -2,6 +2,7 @@ #define DQMOffline_Muon_GEMOfflineMonitor_h #include "DQMOffline/Muon/interface/GEMOfflineDQMBase.h" + #include "FWCore/Utilities/interface/EDGetToken.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" @@ -19,16 +20,20 @@ class GEMOfflineMonitor : public GEMOfflineDQMBase { void analyze(const edm::Event &event, const edm::EventSetup &eventSetup) override; private: - void bookDetectorOccupancy( - DQMStore::IBooker &, const GEMStation *, const MEMapKey1 &, const TString &, const TString &); + void bookDigiOccupancy(DQMStore::IBooker &, const edm::ESHandle &); + void bookHitOccupancy(DQMStore::IBooker &, const edm::ESHandle &); + + void doDigiOccupancy(const edm::ESHandle &, const edm::Handle &); + void doHitOccupancy(const edm::ESHandle &, const edm::Handle &); edm::EDGetTokenT digi_token_; edm::EDGetTokenT rechit_token_; - std::string log_category_; + bool do_digi_occupancy_; + bool do_hit_occupancy_; - MEMap1 me_digi_det_; - MEMap1 me_hit_det_; + MEMap me_digi_det_; // TH2F, region-station + MEMap me_hit_det_; // TH2F, region-station }; #endif // DQMOffline_Muon_GEMOfflineMonitor_h diff --git a/DQMOffline/Muon/python/gemEfficiencyAnalyzerCosmics_cfi.py b/DQMOffline/Muon/python/gemEfficiencyAnalyzerCosmics_cfi.py new file mode 100644 index 0000000000000..31c178cd138ef --- /dev/null +++ b/DQMOffline/Muon/python/gemEfficiencyAnalyzerCosmics_cfi.py @@ -0,0 +1,27 @@ +import FWCore.ParameterSet.Config as cms +from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer +from RecoMuon.TrackingTools.MuonServiceProxy_cff import MuonServiceProxy +from DQMOffline.Muon.gemEfficiencyAnalyzerCosmicsDefault_cfi import gemEfficiencyAnalyzerCosmicsDefault as _gemEfficiencyAnalyzerCosmicsDefault + +gemEfficiencyAnalyzerCosmics = _gemEfficiencyAnalyzerCosmicsDefault.clone( + ServiceParameters = MuonServiceProxy.ServiceParameters.clone(), + muonTag = cms.InputTag('muons'), + name = cms.untracked.string('Cosmic 2-Leg STA Muon'), + folder = cms.untracked.string('GEM/Efficiency/type1'), +) + +gemEfficiencyAnalyzerCosmicsOneLeg = _gemEfficiencyAnalyzerCosmicsDefault.clone( + ServiceParameters = MuonServiceProxy.ServiceParameters.clone(), + muonTag = cms.InputTag('muons1Leg'), + name = cms.untracked.string('Cosmic 1-Leg STA Muon'), + folder = cms.untracked.string('GEM/Efficiency/type2'), +) + +from Configuration.Eras.Modifier_phase2_GEM_cff import phase2_GEM +phase2_GEM.toModify(gemEfficiencyAnalyzerCosmics, + etaNbins=cms.untracked.int32(15), + etaUp=cms.untracked.double(3.0)) + +phase2_GEM.toModify(gemEfficiencyAnalyzerCosmicsOneLeg, + etaNbins=cms.untracked.int32(15), + etaUp=cms.untracked.double(3.0)) diff --git a/DQMOffline/Muon/python/gemEfficiencyAnalyzer_cfi.py b/DQMOffline/Muon/python/gemEfficiencyAnalyzer_cfi.py index c284afb7ab195..4dd62a0ae9370 100644 --- a/DQMOffline/Muon/python/gemEfficiencyAnalyzer_cfi.py +++ b/DQMOffline/Muon/python/gemEfficiencyAnalyzer_cfi.py @@ -1,7 +1,7 @@ import FWCore.ParameterSet.Config as cms from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer from RecoMuon.TrackingTools.MuonServiceProxy_cff import MuonServiceProxy - +from DQMOffline.Muon.gemEfficiencyAnalyzerDefault_cfi import gemEfficiencyAnalyzerDefault as _gemEfficiencyAnalyzerDefault gemOfflineDQMTightGlbMuons = cms.EDFilter("MuonSelector", src = cms.InputTag('muons'), @@ -14,7 +14,6 @@ filter = cms.bool(False) ) - gemOfflineDQMStaMuons = cms.EDFilter("MuonSelector", src = cms.InputTag('muons'), cut = cms.string( @@ -25,38 +24,37 @@ filter = cms.bool(False) ) - -gemEfficiencyAnalyzerTight = DQMEDAnalyzer('GEMEfficiencyAnalyzer', - MuonServiceProxy, +gemEfficiencyAnalyzerTightGlb = _gemEfficiencyAnalyzerDefault.clone( + ServiceParameters = MuonServiceProxy.ServiceParameters.clone(), + folder = cms.untracked.string('GEM/Efficiency/type1'), muonTag = cms.InputTag('gemOfflineDQMTightGlbMuons'), - recHitTag = cms.InputTag('gemRecHits'), - residualXCut = cms.double(5.0), - ptBinning = cms.untracked.vdouble(20. ,30., 40., 50., 60., 70., 80., 90., 100., 120., 140., 200.), - etaNbins = cms.untracked.int32(7), - etaLow = cms.untracked.double(1.5), - etaUp = cms.untracked.double(2.2), + name = cms.untracked.string('Tight GLB Muon'), useGlobalMuon = cms.untracked.bool(True), - folder = cms.untracked.string('GEM/GEMEfficiency/TightGlobalMuon'), - logCategory = cms.untracked.string('GEMEfficiencyAnalyzerTight'), ) - -gemEfficiencyAnalyzerSTA = gemEfficiencyAnalyzerTight.clone() -gemEfficiencyAnalyzerSTA.muonTag = cms.InputTag("gemOfflineDQMStaMuons") -gemEfficiencyAnalyzerSTA.useGlobalMuon = cms.untracked.bool(False) -gemEfficiencyAnalyzerSTA.folder = cms.untracked.string('GEM/GEMEfficiency/StandaloneMuon') -gemEfficiencyAnalyzerSTA.logCategory = cms.untracked.string('GEMEfficiencyAnalyzerSTA') - +gemEfficiencyAnalyzerSta = _gemEfficiencyAnalyzerDefault.clone( + ServiceParameters = MuonServiceProxy.ServiceParameters.clone(), + muonTag = cms.InputTag("gemOfflineDQMStaMuons"), + folder = cms.untracked.string('GEM/Efficiency/type2'), + name = cms.untracked.string('STA Muon'), + useGlobalMuon = cms.untracked.bool(False), +) from Configuration.Eras.Modifier_phase2_GEM_cff import phase2_GEM -phase2_GEM.toModify(gemEfficiencyAnalyzerTight, etaNbins=cms.untracked.int32(15), etaHigh=cms.untracked.double(3.0)) -phase2_GEM.toModify(gemEfficiencyAnalyzerSTA, etaNbins=cms.untracked.int32(15), etaHigh=cms.untracked.double(3.0)) +phase2_GEM.toModify( + gemEfficiencyAnalyzerTightGlb, + etaNbins=cms.untracked.int32(15), + etaUp=cms.untracked.double(3.0)) +phase2_GEM.toModify( + gemEfficiencyAnalyzerSta, + etaNbins=cms.untracked.int32(15), + etaUp=cms.untracked.double(3.0)) -gemEfficiencyAnalyzerTightSeq = cms.Sequence( +gemEfficiencyAnalyzerTightGlbSeq = cms.Sequence( cms.ignore(gemOfflineDQMTightGlbMuons) * - gemEfficiencyAnalyzerTight) + gemEfficiencyAnalyzerTightGlb) -gemEfficiencyAnalyzerSTASeq = cms.Sequence( +gemEfficiencyAnalyzerStaSeq = cms.Sequence( cms.ignore(gemOfflineDQMStaMuons) * - gemEfficiencyAnalyzerSTA) + gemEfficiencyAnalyzerSta) diff --git a/DQMOffline/Muon/python/gemEfficiencyHarvesterCosmics_cfi.py b/DQMOffline/Muon/python/gemEfficiencyHarvesterCosmics_cfi.py new file mode 100644 index 0000000000000..ec549d2cd7e78 --- /dev/null +++ b/DQMOffline/Muon/python/gemEfficiencyHarvesterCosmics_cfi.py @@ -0,0 +1,14 @@ +import FWCore.ParameterSet.Config as cms + +from DQMServices.Core.DQMEDHarvester import DQMEDHarvester +from DQMOffline.Muon.gemEfficiencyHarvesterDefault_cfi import gemEfficiencyHarvesterDefault as _gemEfficiencyHarvesterDefault +from DQMOffline.Muon.gemEfficiencyAnalyzerCosmics_cfi import gemEfficiencyAnalyzerCosmics as _gemEfficiencyAnalyzerCosmics +from DQMOffline.Muon.gemEfficiencyAnalyzerCosmics_cfi import gemEfficiencyAnalyzerCosmicsOneLeg as _gemEfficiencyAnalyzerCosmicsOneLeg + +gemEfficiencyHarvesterCosmics = _gemEfficiencyHarvesterDefault.clone( + folder = cms.untracked.string(_gemEfficiencyAnalyzerCosmics.folder.value()), +) + +gemEfficiencyHarvesterCosmicsOneLeg = _gemEfficiencyHarvesterDefault.clone( + folder = cms.untracked.string(_gemEfficiencyAnalyzerCosmicsOneLeg.folder.value()), +) diff --git a/DQMOffline/Muon/python/gemEfficiencyHarvester_cfi.py b/DQMOffline/Muon/python/gemEfficiencyHarvester_cfi.py index ff49777cec015..f65f3db46dce6 100644 --- a/DQMOffline/Muon/python/gemEfficiencyHarvester_cfi.py +++ b/DQMOffline/Muon/python/gemEfficiencyHarvester_cfi.py @@ -1,13 +1,14 @@ import FWCore.ParameterSet.Config as cms from DQMServices.Core.DQMEDHarvester import DQMEDHarvester +from DQMOffline.Muon.gemEfficiencyHarvesterDefault_cfi import gemEfficiencyHarvesterDefault as _gemEfficiencyHarvesterDefault +from DQMOffline.Muon.gemEfficiencyAnalyzer_cfi import gemEfficiencyAnalyzerTightGlb as _gemEfficiencyAnalyzerTightGlb +from DQMOffline.Muon.gemEfficiencyAnalyzer_cfi import gemEfficiencyAnalyzerSta as _gemEfficiencyAnalyzerSta -gemEfficiencyHarvesterTight = DQMEDHarvester('GEMEfficiencyHarvester', - folder = cms.untracked.string('GEM/GEMEfficiency/TightGlobalMuon'), - logCategory = cms.untracked.string('GEMEfficiencyHarvesterTight') +gemEfficiencyHarvesterTightGlb = _gemEfficiencyHarvesterDefault.clone( + folder = cms.untracked.string(_gemEfficiencyAnalyzerTightGlb.folder.value()) ) -gemEfficiencyHarvesterSTA = DQMEDHarvester('GEMEfficiencyHarvester', - folder = cms.untracked.string('GEM/GEMEfficiency/StandaloneMuon'), - logCategory = cms.untracked.string('GEMEfficiencyHarvesterSTA') +gemEfficiencyHarvesterSta = _gemEfficiencyHarvesterDefault.clone( + folder = cms.untracked.string(_gemEfficiencyAnalyzerSta.folder.value()) ) diff --git a/DQMOffline/Muon/python/gem_dqm_offline_client_cff.py b/DQMOffline/Muon/python/gem_dqm_offline_client_cff.py index 8d89e87148dec..1bf2ef27ff898 100644 --- a/DQMOffline/Muon/python/gem_dqm_offline_client_cff.py +++ b/DQMOffline/Muon/python/gem_dqm_offline_client_cff.py @@ -3,5 +3,5 @@ from DQMOffline.Muon.gemEfficiencyHarvester_cfi import * gemClients = cms.Sequence( - gemEfficiencyHarvesterTight * - gemEfficiencyHarvesterSTA) + gemEfficiencyHarvesterTightGlb * + gemEfficiencyHarvesterSta) diff --git a/DQMOffline/Muon/python/gem_dqm_offline_client_cosmics_cff.py b/DQMOffline/Muon/python/gem_dqm_offline_client_cosmics_cff.py new file mode 100644 index 0000000000000..1a6192a49b736 --- /dev/null +++ b/DQMOffline/Muon/python/gem_dqm_offline_client_cosmics_cff.py @@ -0,0 +1,7 @@ +import FWCore.ParameterSet.Config as cms + +from DQMOffline.Muon.gemEfficiencyHarvesterCosmics_cfi import * + +gemClientsCosmics = cms.Sequence( + gemEfficiencyHarvesterCosmics * + gemEfficiencyHarvesterCosmicsOneLeg) diff --git a/DQMOffline/Muon/python/gem_dqm_offline_source_cff.py b/DQMOffline/Muon/python/gem_dqm_offline_source_cff.py index 0af44227fde1e..177777879b265 100644 --- a/DQMOffline/Muon/python/gem_dqm_offline_source_cff.py +++ b/DQMOffline/Muon/python/gem_dqm_offline_source_cff.py @@ -1,9 +1,8 @@ import FWCore.ParameterSet.Config as cms -from DQMOffline.Muon.gemOfflineMonitor_cfi import * from DQMOffline.Muon.gemEfficiencyAnalyzer_cfi import * gemSources = cms.Sequence( - gemOfflineMonitor * - gemEfficiencyAnalyzerTightSeq * - gemEfficiencyAnalyzerSTASeq) + gemEfficiencyAnalyzerTightGlbSeq * + gemEfficiencyAnalyzerStaSeq +) diff --git a/DQMOffline/Muon/python/gem_dqm_offline_source_cosmics_cff.py b/DQMOffline/Muon/python/gem_dqm_offline_source_cosmics_cff.py new file mode 100644 index 0000000000000..51ffa1322cb89 --- /dev/null +++ b/DQMOffline/Muon/python/gem_dqm_offline_source_cosmics_cff.py @@ -0,0 +1,7 @@ +import FWCore.ParameterSet.Config as cms + +from DQMOffline.Muon.gemEfficiencyAnalyzerCosmics_cfi import * + +gemSourcesCosmics = cms.Sequence( + gemEfficiencyAnalyzerCosmics * + gemEfficiencyAnalyzerCosmicsOneLeg) diff --git a/DQMOffline/Muon/src/GEMEfficiencyAnalyzer.cc b/DQMOffline/Muon/src/GEMEfficiencyAnalyzer.cc index 2cd3e91446cc4..feccaebf41f0d 100644 --- a/DQMOffline/Muon/src/GEMEfficiencyAnalyzer.cc +++ b/DQMOffline/Muon/src/GEMEfficiencyAnalyzer.cc @@ -1,281 +1,705 @@ #include "DQMOffline/Muon/interface/GEMEfficiencyAnalyzer.h" + #include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" #include "TrackingTools/Records/interface/TransientTrackRecord.h" #include "DataFormats/Math/interface/deltaPhi.h" +#include "DataFormats/GeometryCommonDetAlgo/interface/ErrorFrameTransformer.h" +#include "DataFormats/GeometrySurface/interface/SimpleDiskBounds.h" +#include "Geometry/CommonTopologies/interface/GlobalTrackingGeometry.h" +#include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h" +#include "Geometry/CommonTopologies/interface/StripTopology.h" +#include "Validation/MuonHits/interface/MuonHitHelper.h" +#include "Validation/MuonGEMHits/interface/GEMValidationUtils.h" GEMEfficiencyAnalyzer::GEMEfficiencyAnalyzer(const edm::ParameterSet& pset) : GEMOfflineDQMBase(pset) { + name_ = pset.getUntrackedParameter("name"); + folder_ = pset.getUntrackedParameter("folder"); + rechit_token_ = consumes(pset.getParameter("recHitTag")); muon_token_ = consumes >(pset.getParameter("muonTag")); - auto muon_service_parameter = pset.getParameter("ServiceParameters"); - muon_service_ = new MuonServiceProxy(muon_service_parameter, consumesCollector()); - + is_cosmics_ = pset.getUntrackedParameter("isCosmics"); use_global_muon_ = pset.getUntrackedParameter("useGlobalMuon"); - - residual_x_cut_ = static_cast(pset.getParameter("residualXCut")); - - pt_binning_ = pset.getUntrackedParameter >("ptBinning"); + use_skip_layer_ = pset.getParameter("useSkipLayer"); + use_only_me11_ = pset.getParameter("useOnlyME11"); + residual_rphi_cut_ = static_cast(pset.getParameter("residualRPhiCut")); + use_prop_r_error_cut_ = pset.getParameter("usePropRErrorCut"); + prop_r_error_cut_ = pset.getParameter("propRErrorCut"); + use_prop_phi_error_cut_ = pset.getParameter("usePropPhiErrorCut"); + prop_phi_error_cut_ = pset.getParameter("propPhiErrorCut"); + + pt_bins_ = pset.getUntrackedParameter >("ptBins"); eta_nbins_ = pset.getUntrackedParameter("etaNbins"); eta_low_ = pset.getUntrackedParameter("etaLow"); eta_up_ = pset.getUntrackedParameter("etaUp"); - folder_ = pset.getUntrackedParameter("folder"); + const edm::ParameterSet&& muon_service_parameter = pset.getParameter("ServiceParameters"); + muon_service_ = new MuonServiceProxy(muon_service_parameter, consumesCollector()); - title_ = (use_global_muon_ ? "Global Muon" : "Standalone Muon"); - matched_title_ = title_ + TString::Format(" (|x_{Muon} - x_{Hit}| < %.1f)", residual_x_cut_); + const double eps = std::numeric_limits::epsilon(); + pt_clamp_max_ = pt_bins_.back() - eps; + eta_clamp_max_ = eta_up_ - eps; } GEMEfficiencyAnalyzer::~GEMEfficiencyAnalyzer() {} +void GEMEfficiencyAnalyzer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + // beam scenario + { + edm::ParameterSetDescription desc; + desc.addUntracked("name", "GlobalMuon"); + desc.addUntracked("folder", "GEM/Efficiency/type0"); + desc.add("recHitTag", edm::InputTag("gemRecHits")); + desc.add("muonTag", edm::InputTag("muons")); + desc.addUntracked("isCosmics", false); + desc.addUntracked("useGlobalMuon", true); + desc.add("useSkipLayer", false); + desc.add("useOnlyME11", false); + desc.add("residualRPhiCut", 2.0); // TODO need to be tuned + desc.add("usePropRErrorCut", false); + desc.add("propRErrorCut", 1.0); + desc.add("usePropPhiErrorCut", false); + desc.add("propPhiErrorCut", 0.01); + desc.addUntracked >("ptBins", {20., 30., 40., 50., 60., 70., 80., 90., 100., 120.}); + desc.addUntracked("etaNbins", 9); + desc.addUntracked("etaLow", 1.4); + desc.addUntracked("etaUp", 2.3); + { + edm::ParameterSetDescription psd0; + psd0.setAllowAnything(); + desc.add("ServiceParameters", psd0); + } + descriptions.add("gemEfficiencyAnalyzerDefault", desc); + } // beam scenario + + // cosmic scenario + { + edm::ParameterSetDescription desc; + desc.addUntracked("name", "GlobalMuon"); // FIXME + desc.addUntracked("folder", "GEM/Efficiency/type0"); + desc.add("recHitTag", edm::InputTag("gemRecHits")); + desc.add("muonTag", edm::InputTag("muons")); + desc.addUntracked("isCosmics", true); + desc.addUntracked("useGlobalMuon", false); + desc.add("useSkipLayer", false); + desc.add("useOnlyME11", true); + desc.add("residualRPhiCut", 5.0); // TODO need to be tuned + desc.add("usePropRErrorCut", true); + desc.add("propRErrorCut", 1.0); + desc.add("usePropPhiErrorCut", true); + desc.add("propPhiErrorCut", 0.001); + desc.addUntracked >( + "ptBins", {0., 10., 20., 30., 40., 50., 60., 70., 80., 90., 100., 120., 140., 160., 180., 200., 220.}); + desc.addUntracked("etaNbins", 9); + desc.addUntracked("etaLow", 1.4); + desc.addUntracked("etaUp", 2.3); + { + edm::ParameterSetDescription psd0; + psd0.setAllowAnything(); + desc.add("ServiceParameters", psd0); + } + descriptions.add("gemEfficiencyAnalyzerCosmicsDefault", desc); + } // cosmics +} + void GEMEfficiencyAnalyzer::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& run, edm::EventSetup const& isetup) { edm::ESHandle gem; isetup.get().get(gem); if (not gem.isValid()) { - edm::LogError(log_category_) << "GEMGeometry is invalid" << std::endl; + edm::LogError(kLogCategory_) << "GEMGeometry is invalid" << std::endl; return; } - for (const GEMRegion* region : gem->regions()) { - const int region_number = region->region(); - const char* region_sign = region_number > 0 ? "+" : "-"; - - for (const GEMStation* station : region->stations()) { - const int station_number = station->station(); - - const MEMapKey1 key1{region_number, station_number}; - const auto&& station_name_suffix = TString::Format("_ge%s%d1", region_sign, station_number); - const auto&& station_title_suffix = TString::Format(" : GE %s%d/1", region_sign, station_number); - bookDetectorOccupancy(ibooker, station, key1, station_name_suffix, station_title_suffix); - - const int num_etas = getNumEtaPartitions(station); - - if (station_number == 1) { - for (const bool is_odd : {true, false}) { - std::tuple key2{region_number, station_number, is_odd}; - const TString&& parity_name_suffix = station_name_suffix + (is_odd ? "_odd" : "_even"); - const TString&& parity_title_suffix = - station_title_suffix + (is_odd ? ", Odd Superchamber" : ", Even Superchamber"); - bookOccupancy(ibooker, key2, parity_name_suffix, parity_title_suffix); - - for (int ieta = 1; ieta <= num_etas; ieta++) { - const TString&& ieta_name_suffix = parity_name_suffix + Form("_ieta%d", ieta); - const TString&& ieta_title_suffix = parity_title_suffix + Form(", i#eta = %d", ieta); - const MEMapKey3 key3{region_number, station_number, is_odd, ieta}; - bookResolution(ibooker, key3, ieta_name_suffix, ieta_title_suffix); - } // ieta - } // is_odd - - } else { - std::tuple key2{region_number, station_number, false}; - bookOccupancy(ibooker, key2, station_name_suffix, station_title_suffix); - - for (int ieta = 1; ieta <= num_etas; ieta++) { - const MEMapKey3 key3{region_number, station_number, false, ieta}; - const TString&& ieta_name_suffix = station_name_suffix + Form("_ieta%d", ieta); - const TString&& ieta_title_suffix = station_title_suffix + Form(", i#eta = %d", ieta); - bookResolution(ibooker, key3, ieta_name_suffix, ieta_title_suffix); - } // ieta - } - } // station - } // region + bookEfficiencyMomentum(ibooker, gem); + bookEfficiencyChamber(ibooker, gem); + bookEfficiencyEtaPartition(ibooker, gem); + bookResolution(ibooker, gem); + bookMisc(ibooker, gem); } -void GEMEfficiencyAnalyzer::bookDetectorOccupancy(DQMStore::IBooker& ibooker, - const GEMStation* station, - const MEMapKey1& key, - const TString& name_suffix, - const TString& title_suffix) { +dqm::impl::MonitorElement* GEMEfficiencyAnalyzer::bookNumerator1D(DQMStore::IBooker& ibooker, MonitorElement* me) { + const std::string name = me->getName() + "_matched"; + TH1F* hist = dynamic_cast(me->getTH1F()->Clone(name.c_str())); + return ibooker.book1D(name, hist); +} + +dqm::impl::MonitorElement* GEMEfficiencyAnalyzer::bookNumerator2D(DQMStore::IBooker& ibooker, MonitorElement* me) { + const std::string name = me->getName() + "_matched"; + TH2F* hist = dynamic_cast(me->getTH2F()->Clone(name.c_str())); + return ibooker.book2D(name, hist); +} + +void GEMEfficiencyAnalyzer::bookEfficiencyMomentum(DQMStore::IBooker& ibooker, const edm::ESHandle& gem) { + // TODO Efficiency/Source ibooker.setCurrentFolder(folder_ + "/Efficiency"); - BookingHelper helper(ibooker, name_suffix, title_suffix); - const auto&& superchambers = station->superChambers(); - if (not checkRefs(superchambers)) { - edm::LogError(log_category_) << "failed to get a valid vector of GEMSuperChamber ptrs" << std::endl; - return; - } + const TString pt_x_title = "Muon p_{T} [GeV]"; + const int pt_nbinsx = pt_bins_.size() - 1; + + const std::string eta_x_title = "Muon |#eta|"; + const std::string phi_x_title = "Muon #phi [rad]"; + + for (const GEMStation* station : gem->stations()) { + const int region_id = station->region(); + const int station_id = station->station(); + + const GEMDetId&& key = getReStKey(region_id, station_id); + const TString&& name_suffix = GEMUtils::getSuffixName(region_id, station_id); + const TString&& title_suffix = GEMUtils::getSuffixTitle(region_id, station_id); + + const TString&& title = name_.c_str() + title_suffix; + + TH1F* h_muon_pt = new TH1F("muon_pt" + name_suffix, title, pt_nbinsx, &pt_bins_[0]); + h_muon_pt->SetXTitle(pt_x_title); + me_muon_pt_[key] = ibooker.book1D(h_muon_pt->GetName(), h_muon_pt); + me_muon_pt_matched_[key] = bookNumerator1D(ibooker, me_muon_pt_[key]); + + me_muon_eta_[key] = ibooker.book1D("muon_eta" + name_suffix, title, eta_nbins_, eta_low_, eta_up_); + me_muon_eta_[key]->setXTitle(eta_x_title); + me_muon_eta_matched_[key] = bookNumerator1D(ibooker, me_muon_eta_[key]); + + me_muon_phi_[key] = ibooker.book1D("muon_phi" + name_suffix, title, 108, -M_PI, M_PI); + me_muon_phi_[key]->setAxisTitle(phi_x_title); + me_muon_phi_matched_[key] = bookNumerator1D(ibooker, me_muon_phi_[key]); + } // station +} - // the number of GEMChambers per GEMStation - const int num_ch = superchambers.size() * superchambers.front()->nChambers(); - // the number of eta partitions per GEMChamber - const int num_etas = getNumEtaPartitions(station); +void GEMEfficiencyAnalyzer::bookEfficiencyChamber(DQMStore::IBooker& ibooker, const edm::ESHandle& gem) { + // TODO Efficiency/Source + ibooker.setCurrentFolder(folder_ + "/Efficiency"); + + for (const GEMStation* station : gem->stations()) { + const int region_id = station->region(); + const int station_id = station->station(); - me_detector_[key] = helper.book2D("detector", title_, num_ch, 0.5, num_ch + 0.5, num_etas, 0.5, num_etas + 0.5); + const std::vector&& superchambers = station->superChambers(); + if (not checkRefs(superchambers)) { + edm::LogError(kLogCategory_) << "failed to get a valid vector of GEMSuperChamber ptrs" << std::endl; + return; + } - me_detector_matched_[key] = - helper.book2D("detector_matched", matched_title_, num_ch, 0.5, num_ch + 0.5, num_etas, 0.5, num_etas + 0.5); + const int num_chambers = superchambers.size(); + for (const GEMChamber* chamber : superchambers[0]->chambers()) { + const int layer_id = chamber->id().layer(); - setDetLabelsEta(me_detector_[key], station); - setDetLabelsEta(me_detector_matched_[key], station); + const TString&& name_suffix = GEMUtils::getSuffixName(region_id, station_id, layer_id); + const TString&& title_suffix = GEMUtils::getSuffixTitle(region_id, station_id, layer_id); + const GEMDetId&& key = getReStLaKey(chamber->id()); + + me_chamber_[key] = + ibooker.book1D("chamber" + name_suffix, name_.c_str() + title_suffix, num_chambers, 0.5, num_chambers + 0.5); + me_chamber_[key]->setAxisTitle("Chamber"); + me_chamber_[key]->getTH1F()->SetNdivisions(-num_chambers, "Y"); + for (int binx = 1; binx <= num_chambers; binx++) { + me_chamber_[key]->setBinLabel(binx, std::to_string(binx)); + } + + me_chamber_matched_[key] = bookNumerator1D(ibooker, me_chamber_[key]); + } // layer + } // station } -void GEMEfficiencyAnalyzer::bookOccupancy(DQMStore::IBooker& ibooker, - const MEMapKey2& key, - const TString& name_suffix, - const TString& title_suffix) { +void GEMEfficiencyAnalyzer::bookEfficiencyEtaPartition(DQMStore::IBooker& ibooker, + const edm::ESHandle& gem) { + // TODO Efficiency/Source ibooker.setCurrentFolder(folder_ + "/Efficiency"); - BookingHelper helper(ibooker, name_suffix, title_suffix); - me_muon_pt_[key] = helper.book1D("muon_pt", title_, pt_binning_, "Muon p_{T} [GeV]"); - me_muon_eta_[key] = helper.book1D("muon_eta", title_, eta_nbins_, eta_low_, eta_up_, "Muon |#eta|"); + for (const GEMStation* station : gem->stations()) { + const int region_id = station->region(); + const int station_id = station->station(); + + const GEMDetId&& key = getReStKey(region_id, station_id); + const TString&& name_suffix = GEMUtils::getSuffixName(region_id, station_id); + const TString&& title_suffix = GEMUtils::getSuffixTitle(region_id, station_id); + + const std::vector&& superchambers = station->superChambers(); + if (not checkRefs(superchambers)) { + edm::LogError(kLogCategory_) << "failed to get a valid vector of GEMSuperChamber ptrs" << std::endl; + return; + } - me_muon_pt_matched_[key] = helper.book1D("muon_pt_matched", matched_title_, pt_binning_, "Muon p_{T} [GeV]"); - me_muon_eta_matched_[key] = - helper.book1D("muon_eta_matched", matched_title_, eta_nbins_, eta_low_, eta_up_, "Muon |#eta|"); + const int num_ch = superchambers.size() * superchambers.front()->nChambers(); + const int num_etas = getNumEtaPartitions(station); + + me_detector_[key] = ibooker.book2D("detector" + name_suffix, + name_.c_str() + title_suffix, + num_ch, + 0.5, + num_ch + 0.5, + num_etas, + 0.5, + num_etas + 0.5); + setDetLabelsEta(me_detector_[key], station); + me_detector_matched_[key] = bookNumerator2D(ibooker, me_detector_[key]); + } // station } -void GEMEfficiencyAnalyzer::bookResolution(DQMStore::IBooker& ibooker, - const MEMapKey3& key, - const TString& name_suffix, - const TString& title_suffix) { +void GEMEfficiencyAnalyzer::bookResolution(DQMStore::IBooker& ibooker, const edm::ESHandle& gem) { ibooker.setCurrentFolder(folder_ + "/Resolution"); - BookingHelper helper(ibooker, name_suffix, title_suffix); + for (const GEMStation* station : gem->stations()) { + const int region_id = station->region(); + const int station_id = station->station(); + + const std::vector&& superchambers = station->superChambers(); + if (not checkRefs(superchambers)) { + edm::LogError(kLogCategory_) << "failed to get a valid vector of GEMSuperChamber ptrs" << std::endl; + return; + } + + const std::vector& chambers = superchambers[0]->chambers(); + if (not checkRefs(chambers)) { + edm::LogError(kLogCategory_) << "failed to get a valid vector of GEMChamber ptrs" << std::endl; + return; + } + + for (const GEMEtaPartition* eta_partition : chambers[0]->etaPartitions()) { + const int ieta = eta_partition->id().roll(); + + const GEMDetId&& key = getReStEtKey(eta_partition->id()); + // TODO + const TString&& name_suffix = TString::Format("_GE%+.2d_R%d", region_id * (station_id * 10 + 1), ieta); + const TString&& title = + name_.c_str() + TString::Format(" : GE%+.2d Roll %d", region_id * (station_id * 10 + 1), ieta); - // NOTE Residual & Pull - me_residual_x_[key] = helper.book1D("residual_x", title_, 50, -5.0, 5.0, "Residual in Local X [cm]"); - me_residual_y_[key] = helper.book1D("residual_y", title_, 60, -12.0, 12.0, "Residual in Local Y [cm]"); - me_residual_phi_[key] = helper.book1D("residual_phi", title_, 80, -0.008, 0.008, "Residual in Global #phi [rad]"); + me_residual_rphi_[key] = + ibooker.book1D("residual_rphi" + name_suffix, title, 50, -residual_rphi_cut_, residual_rphi_cut_); + me_residual_rphi_[key]->setAxisTitle("Residual in R#phi [cm]"); - me_pull_x_[key] = helper.book1D("pull_x", title_, 60, -3.0, 3.0, "Pull in Local X"); - me_pull_y_[key] = helper.book1D("pull_y", title_, 60, -3.0, 3.0, "Pull in Local Y"); + me_residual_y_[key] = ibooker.book1D("residual_y" + name_suffix, title, 60, -12.0, 12.0); + me_residual_y_[key]->setAxisTitle("Residual in Local Y [cm]"); + + me_pull_y_[key] = ibooker.book1D("pull_y" + name_suffix, title, 60, -3.0, 3.0); + me_pull_y_[key]->setAxisTitle("Pull in Local Y"); + } // ieta + } // station +} + +void GEMEfficiencyAnalyzer::bookMisc(DQMStore::IBooker& ibooker, const edm::ESHandle& gem) { + ibooker.setCurrentFolder(folder_ + "/Misc"); + me_prop_r_err_ = ibooker.book1D("prop_r_err", ";Propagation Global R Error [cm];Entries", 20, 0.0, 20.0); + me_prop_phi_err_ = ibooker.book1D("prop_phi_err", "Propagation Global Phi Error [rad];Entries", 20, 0.0, M_PI); + me_all_abs_residual_rphi_ = ibooker.book1D("all_abs_residual_rphi", ";Residual in R#phi [cm];Entries", 20, 0.0, 20.0); + + for (const GEMStation* station : gem->stations()) { + const int region_id = station->region(); + const int station_id = station->station(); + + const std::vector&& superchambers = station->superChambers(); + if (not checkRefs(superchambers)) { + edm::LogError(kLogCategory_) << "failed to get a valid vector of GEMSuperChamber ptrs" << std::endl; + return; + } + // ignore layer ids + const int num_ch = superchambers.size(); + + const GEMDetId&& key = getReStKey(region_id, station_id); + const TString&& name_suffix = GEMUtils::getSuffixName(region_id, station_id); + const TString&& title_suffix = GEMUtils::getSuffixTitle(region_id, station_id); + me_prop_chamber_[key] = ibooker.book1D("prop_chamber" + name_suffix, title_suffix, num_ch, 0.5, num_ch + 0.5); + me_prop_chamber_[key]->setAxisTitle("Destination Chamber Id", 1); + me_prop_chamber_[key]->setAxisTitle("Entries", 2); + } // station } void GEMEfficiencyAnalyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) { edm::Handle rechit_collection; event.getByToken(rechit_token_, rechit_collection); if (not rechit_collection.isValid()) { - edm::LogError(log_category_) << "GEMRecHitCollection is invalid" << std::endl; + edm::LogError(kLogCategory_) << "GEMRecHitCollection is invalid" << std::endl; return; } edm::Handle > muon_view; event.getByToken(muon_token_, muon_view); if (not muon_view.isValid()) { - edm::LogError(log_category_) << "View is invalid" << std::endl; + edm::LogError(kLogCategory_) << "View is invalid" << std::endl; + return; } edm::ESHandle gem; setup.get().get(gem); if (not gem.isValid()) { - edm::LogError(log_category_) << "GEMGeometry is invalid" << std::endl; + edm::LogError(kLogCategory_) << "GEMGeometry is invalid" << std::endl; + return; + } + + edm::ESHandle global_tracking_geometry; + setup.get().get(global_tracking_geometry); + if (not global_tracking_geometry.isValid()) { + edm::LogError(kLogCategory_) << "GlobalTrackingGeometry is invalid" << std::endl; return; } edm::ESHandle transient_track_builder; setup.get().get("TransientTrackBuilder", transient_track_builder); if (not transient_track_builder.isValid()) { - edm::LogError(log_category_) << "TransientTrackRecord is invalid" << std::endl; + edm::LogError(kLogCategory_) << "TransientTrackRecord is invalid" << std::endl; return; } muon_service_->update(setup); edm::ESHandle&& propagator = muon_service_->propagator("SteppingHelixPropagatorAny"); if (not propagator.isValid()) { - edm::LogError(log_category_) << "Propagator is invalid" << std::endl; + edm::LogError(kLogCategory_) << "Propagator is invalid" << std::endl; return; } - for (const reco::Muon& muon : *muon_view) { - const reco::Track* track = nullptr; + if (rechit_collection->size() < 1) { + edm::LogInfo(kLogCategory_) << "empty rechit collection" << std::endl; + return; + } - if (use_global_muon_ and muon.globalTrack().isNonnull()) { - track = muon.globalTrack().get(); + if (muon_view->empty()) { + edm::LogInfo(kLogCategory_) << "empty muon collection" << std::endl; + return; + } - } else if ((not use_global_muon_) and muon.outerTrack().isNonnull()) { - track = muon.outerTrack().get(); - } + const std::vector&& layer_vector = buildGEMLayers(gem); + for (const reco::Muon& muon : *muon_view) { + const reco::Track* track = getTrack(muon); if (track == nullptr) { - edm::LogError(log_category_) << "failed to get muon track" << std::endl; + edm::LogError(kLogCategory_) << "failed to get a muon track" << std::endl; continue; } const reco::TransientTrack&& transient_track = transient_track_builder->build(track); if (not transient_track.isValid()) { - edm::LogInfo(log_category_) << "failed to build TransientTrack" << std::endl; + edm::LogError(kLogCategory_) << "failed to build TransientTrack" << std::endl; continue; } - for (const GEMEtaPartition* eta_partition : gem->etaPartitions()) { - // Skip propagation inn the opposite direction. - if (muon.eta() * eta_partition->id().region() < 0) + for (const GEMLayerData& layer : layer_vector) { + if (use_skip_layer_ and skipLayer(track, layer)) { + edm::LogInfo(kLogCategory_) << "skip GEM Layer" << std::endl; continue; + } - const BoundPlane& bound_plane = eta_partition->surface(); + const auto&& [start_state, start_id] = getStartingState(transient_track, layer, global_tracking_geometry); - const TrajectoryStateOnSurface&& tsos = - propagator->propagate(transient_track.outermostMeasurementState(), bound_plane); - if (not tsos.isValid()) { + if (not start_state.isValid()) { + edm::LogInfo(kLogCategory_) << "failed to get a starting state" << std::endl; continue; } - const LocalPoint&& tsos_local_pos = tsos.localPosition(); - const LocalPoint tsos_local_pos_2d(tsos_local_pos.x(), tsos_local_pos.y(), 0.0f); - if (not bound_plane.bounds().inside(tsos_local_pos_2d)) { + if (use_only_me11_ and (not isME11(start_id))) { + edm::LogInfo(kLogCategory_) << "skip a starting state because it is not ME11" << std::endl; continue; } - const GEMDetId&& gem_id = eta_partition->id(); + // the trajectory state on the destination surface + const TrajectoryStateOnSurface&& dest_state = propagator->propagate(start_state, *(layer.surface)); + if (not dest_state.isValid()) { + edm::LogInfo(kLogCategory_) << "failed to propagate a muon" << std::endl; + continue; + } + + const GlobalPoint&& dest_global_pos = dest_state.globalPosition(); + + if (not checkBounds(dest_global_pos, (*layer.surface))) { + edm::LogInfo(kLogCategory_) << "failed to pass checkBounds" << std::endl; + continue; + } + + const GEMEtaPartition* eta_partition = findEtaPartition(dest_global_pos, layer.chambers); + if (eta_partition == nullptr) { + edm::LogInfo(kLogCategory_) << "failed to find an eta partition" << std::endl; + continue; + } + + const BoundPlane& surface = eta_partition->surface(); + + const LocalPoint&& dest_local_pos = eta_partition->toLocal(dest_global_pos); + const LocalError&& dest_local_err = dest_state.localError().positionError(); + const GlobalError& dest_global_err = ErrorFrameTransformer().transform(dest_local_err, surface); - bool is_odd = gem_id.station() == 1 ? (gem_id.chamber() % 2 == 1) : false; - const std::tuple key1{gem_id.region(), gem_id.station()}; - const std::tuple key2{gem_id.region(), gem_id.station(), is_odd}; - const std::tuple key3{gem_id.region(), gem_id.station(), is_odd, gem_id.roll()}; + const double dest_global_r_err = std::sqrt(dest_global_err.rerr(dest_global_pos)); + const double dest_global_phi_err = std::sqrt(dest_global_err.phierr(dest_global_pos)); + + const GEMDetId&& gem_id = eta_partition->id(); + const GEMDetId&& rs_key = getReStKey(gem_id); + const GEMDetId&& rsl_key = getReStLaKey(gem_id); + const GEMDetId&& rse_key = getReStEtKey(gem_id); const int chamber_bin = getDetOccXBin(gem_id, gem); + const int ieta = gem_id.roll(); + + // FIXME clever way to clamp values? + me_prop_r_err_->Fill(std::min(dest_global_r_err, 19.999)); + me_prop_phi_err_->Fill(std::min(dest_global_r_err, M_PI - 0.0001)); + me_prop_chamber_[rs_key]->Fill(gem_id.chamber()); - fillME(me_detector_, key1, chamber_bin, gem_id.roll()); - fillME(me_muon_pt_, key2, muon.pt()); - fillME(me_muon_eta_, key2, std::fabs(muon.eta())); + if (use_prop_r_error_cut_ and (dest_global_r_err > prop_r_error_cut_)) { + edm::LogInfo(kLogCategory_) << "failed to pass a propagation global R error cut" << std::endl; + continue; + } - const GEMRecHit* matched_hit = findMatchedHit(tsos_local_pos.x(), rechit_collection->get(gem_id)); - if (matched_hit == nullptr) { + if (use_prop_phi_error_cut_ and (dest_global_phi_err > prop_phi_error_cut_)) { + edm::LogInfo(kLogCategory_) << "failed to pass a propagation global phi error cut" << std::endl; continue; } - fillME(me_detector_matched_, key1, chamber_bin, gem_id.roll()); - fillME(me_muon_pt_matched_, key2, muon.pt()); - fillME(me_muon_eta_matched_, key2, std::fabs(muon.eta())); + const double muon_pt = std::min(muon.pt(), pt_clamp_max_); + const double muon_eta = std::clamp(std::fabs(muon.eta()), eta_low_, eta_clamp_max_); - const LocalPoint&& hit_local_pos = matched_hit->localPosition(); - const GlobalPoint&& hit_global_pos = eta_partition->toGlobal(hit_local_pos); - const GlobalPoint&& tsos_global_pos = tsos.globalPosition(); + fillME(me_detector_, rs_key, chamber_bin, ieta); + fillME(me_muon_pt_, rs_key, muon_pt); + fillME(me_muon_eta_, rs_key, muon_eta); + fillME(me_muon_phi_, rs_key, muon.phi()); + fillME(me_chamber_, rsl_key, gem_id.chamber()); - const float residual_x = tsos_local_pos.x() - hit_local_pos.x(); - const float residual_y = tsos_local_pos.y() - hit_local_pos.y(); - const float residual_phi = reco::deltaPhi(tsos_global_pos.barePhi(), hit_global_pos.barePhi()); + const auto&& [hit, residual_rphi] = findClosetHit(dest_global_pos, rechit_collection->get(gem_id), eta_partition); - const LocalError&& tsos_err = tsos.localError().positionError(); - const LocalError&& hit_err = matched_hit->localPositionError(); + if (hit == nullptr) { + edm::LogInfo(kLogCategory_) << "failed to find a hit" << std::endl; + continue; + } + + me_all_abs_residual_rphi_->Fill(std::min(std::abs(residual_rphi), 19.999f)); + if (std::abs(residual_rphi) > residual_rphi_cut_) { + edm::LogInfo(kLogCategory_) << "failed to pass the residual rphi cut" << std::endl; + continue; + } - const float pull_x = residual_x / std::sqrt(tsos_err.xx() + hit_err.xx()); - const float pull_y = residual_y / std::sqrt(tsos_err.yy() + hit_err.yy()); + fillME(me_detector_matched_, rs_key, chamber_bin, ieta); + fillME(me_muon_pt_matched_, rs_key, muon_pt); + fillME(me_muon_eta_matched_, rs_key, muon_eta); + fillME(me_muon_phi_matched_, rs_key, muon.phi()); + fillME(me_chamber_matched_, rsl_key, gem_id.chamber()); - fillME(me_residual_x_, key3, residual_x); - fillME(me_residual_y_, key3, residual_y); - fillME(me_residual_phi_, key3, residual_phi); + const LocalPoint&& hit_local_pos = hit->localPosition(); + const LocalError&& hit_local_err = hit->localPositionError(); - fillME(me_pull_x_, key3, pull_x); - fillME(me_pull_y_, key3, pull_y); - } // GEMChamber + const float residual_y = dest_local_pos.y() - hit_local_pos.y(); + const float pull_y = residual_y / std::sqrt(dest_local_err.yy() + hit_local_err.yy()); + + fillME(me_residual_rphi_, rse_key, residual_rphi); + fillME(me_residual_y_, rse_key, residual_y); + fillME(me_pull_y_, rse_key, pull_y); + } // layer } // Muon } -const GEMRecHit* GEMEfficiencyAnalyzer::findMatchedHit(const float track_local_x, - const GEMRecHitCollection::range& range) { - float min_residual_x{residual_x_cut_}; +std::vector GEMEfficiencyAnalyzer::buildGEMLayers( + const edm::ESHandle& gem) { + std::vector layer_vector; + + for (const GEMStation* station : gem->stations()) { + const int region_id = station->region(); + const int station_id = station->station(); + + // layer_id - chambers + std::map > chambers_per_layer; // chambers per layer + for (const GEMSuperChamber* super_chamber : station->superChambers()) { + for (const GEMChamber* chamber : super_chamber->chambers()) { + const int layer_id = chamber->id().layer(); + + if (chambers_per_layer.find(layer_id) == chambers_per_layer.end()) + chambers_per_layer.insert({layer_id, std::vector()}); + + chambers_per_layer[layer_id].push_back(chamber); + } // GEMChamber + } // GEMSuperChamber + + for (auto [layer_id, chamber_vector] : chambers_per_layer) { + auto [rmin, rmax] = chamber_vector[0]->surface().rSpan(); + auto [zmin, zmax] = chamber_vector[0]->surface().zSpan(); + for (const GEMChamber* chamber : chamber_vector) { + // the span of a bound surface in the global coordinates + const auto [chamber_rmin, chamber_rmax] = chamber->surface().rSpan(); + const auto [chamber_zmin, chamber_zmax] = chamber->surface().zSpan(); + + rmin = std::min(rmin, chamber_rmin); + rmax = std::max(rmax, chamber_rmax); + + zmin = std::min(zmin, chamber_zmin); + zmax = std::max(zmax, chamber_zmax); + } + + // layer position and rotation + const float layer_z = chamber_vector[0]->position().z(); + Surface::PositionType position(0.f, 0.f, layer_z); + Surface::RotationType rotation; + + zmin -= layer_z; + zmax -= layer_z; + + // the bounds from min and max R and Z in the local coordinates. + SimpleDiskBounds* bounds = new SimpleDiskBounds(rmin, rmax, zmin, zmax); + const Disk::DiskPointer&& layer = Disk::build(position, rotation, bounds); + + layer_vector.emplace_back(layer, chamber_vector, region_id, station_id, layer_id); + + } // layer + } // GEMStation + + return layer_vector; +} + +const reco::Track* GEMEfficiencyAnalyzer::getTrack(const reco::Muon& muon) { + const reco::Track* track = nullptr; + + if (is_cosmics_) { + if (muon.outerTrack().isNonnull()) + track = muon.outerTrack().get(); + + } else { + // beams, i.e. pp or heavy ions + if (use_global_muon_ and muon.globalTrack().isNonnull()) + track = muon.globalTrack().get(); + + else if ((not use_global_muon_) and muon.outerTrack().isNonnull()) + track = muon.outerTrack().get(); + } + + return track; +} + +std::pair GEMEfficiencyAnalyzer::getStartingState( + const reco::TransientTrack& transient_track, + const GEMLayerData& layer, + const edm::ESHandle& geometry) { + TrajectoryStateOnSurface starting_state; + DetId starting_id; + + if (use_global_muon_) { + std::tie(starting_state, starting_id) = findStartingState(transient_track, layer, geometry); + + } else { + // if outer track + const reco::Track& track = transient_track.track(); + const bool is_insideout = isInsideOut(track); + + const DetId inner_id{(is_insideout ? track.outerDetId() : track.innerDetId())}; + if (MuonHitHelper::isGEM(inner_id.rawId())) { + std::tie(starting_state, starting_id) = findStartingState(transient_track, layer, geometry); + + } else { + starting_id = inner_id; + if (is_insideout) + starting_state = transient_track.outermostMeasurementState(); + else + starting_state = transient_track.innermostMeasurementState(); + } + } + + return std::make_pair(starting_state, starting_id); +} + +std::pair GEMEfficiencyAnalyzer::findStartingState( + const reco::TransientTrack& transient_track, + const GEMLayerData& layer, + const edm::ESHandle& geometry) { + GlobalPoint starting_point; + DetId starting_id; + float min_distance = 1e12; + bool found = false; + + // TODO optimize this loop because hits should be ordered.. + for (auto rechit = transient_track.recHitsBegin(); rechit != transient_track.recHitsEnd(); rechit++) { + const DetId&& det_id = (*rechit)->geographicalId(); + + if (MuonHitHelper::isGEM(det_id.rawId())) { + continue; + } + + const GeomDet* det = geometry->idToDet(det_id); + const GlobalPoint&& global_position = det->toGlobal((*rechit)->localPosition()); + const float distance = std::abs(layer.surface->localZclamped(global_position)); + if (distance < min_distance) { + found = true; + min_distance = distance; + starting_point = global_position; + starting_id = det_id; + } + } + + TrajectoryStateOnSurface starting_state; + if (found) { + starting_state = transient_track.stateOnSurface(starting_point); + } + return std::make_pair(starting_state, starting_id); +} + +bool GEMEfficiencyAnalyzer::isME11(const DetId& det_id) { + if (not MuonHitHelper::isCSC(det_id)) + return false; + const CSCDetId csc_id{det_id}; + return (csc_id.station() == 1) or ((csc_id.ring() == 1) or (csc_id.ring() == 4)); +} + +bool GEMEfficiencyAnalyzer::skipLayer(const reco::Track* track, const GEMLayerData& layer) { + const bool is_same_region = track->eta() * layer.region > 0; + + bool skip = false; + if (is_cosmics_) { + float p2_in = track->innerMomentum().mag2(); + float p2_out = track->outerMomentum().mag2(); + if (isInsideOut(*track)) + std::swap(p2_in, p2_out); + const bool is_outgoing = p2_in > p2_out; + + skip = (is_outgoing xor is_same_region); + + } else { + // beam scenario + skip = not is_same_region; + } + + return skip; +} + +bool GEMEfficiencyAnalyzer::checkBounds(const GlobalPoint& global_point, const Plane& plane) { + const LocalPoint&& local_point = plane.toLocal(global_point); + const LocalPoint local_point_2d(local_point.x(), local_point.y(), 0.0f); + return plane.bounds().inside(local_point_2d); +} + +const GEMEtaPartition* GEMEfficiencyAnalyzer::findEtaPartition(const GlobalPoint& global_point, + const std::vector& chamber_vector) { + const GEMEtaPartition* bound = nullptr; + for (const GEMChamber* chamber : chamber_vector) { + if (not checkBounds(global_point, chamber->surface())) + continue; + + for (const GEMEtaPartition* eta_partition : chamber->etaPartitions()) { + if (checkBounds(global_point, eta_partition->surface())) { + bound = eta_partition; + break; + } + } // GEMEtaPartition + } // GEMChamber + + return bound; +} + +std::pair GEMEfficiencyAnalyzer::findClosetHit(const GlobalPoint& dest_global_pos, + const GEMRecHitCollection::range& range, + const GEMEtaPartition* eta_partition) { + const StripTopology& topology = eta_partition->specificTopology(); + const LocalPoint&& dest_local_pos = eta_partition->toLocal(dest_global_pos); + const float dest_local_x = dest_local_pos.x(); + const float dest_local_y = dest_local_pos.y(); + const GEMRecHit* closest_hit = nullptr; + float min_residual_rphi = 1e6; for (auto hit = range.first; hit != range.second; ++hit) { - float residual_x = std::fabs(track_local_x - hit->localPosition().x()); - if (residual_x <= min_residual_x) { - min_residual_x = residual_x; + const LocalPoint&& hit_local_pos = hit->localPosition(); + const float hit_local_phi = topology.stripAngle(eta_partition->strip(hit_local_pos)); + + const float residual_x = dest_local_x - hit_local_pos.x(); + const float residual_y = dest_local_y - hit_local_pos.y(); + const float residual_rphi = std::cos(hit_local_phi) * residual_x + std::sin(hit_local_phi) * residual_y; + + if (std::abs(residual_rphi) < std::abs(min_residual_rphi)) { + min_residual_rphi = residual_rphi; closest_hit = &(*hit); } } - return closest_hit; + return std::make_pair(closest_hit, min_residual_rphi); } diff --git a/DQMOffline/Muon/src/GEMEfficiencyHarvester.cc b/DQMOffline/Muon/src/GEMEfficiencyHarvester.cc index b014b207997e3..0ae3f4a1205c6 100644 --- a/DQMOffline/Muon/src/GEMEfficiencyHarvester.cc +++ b/DQMOffline/Muon/src/GEMEfficiencyHarvester.cc @@ -6,11 +6,17 @@ GEMEfficiencyHarvester::GEMEfficiencyHarvester(const edm::ParameterSet& pset) { folder_ = pset.getUntrackedParameter("folder"); - log_category_ = pset.getUntrackedParameter("logCategory"); + log_category_ = "GEMEfficiencyHarvester"; } GEMEfficiencyHarvester::~GEMEfficiencyHarvester() {} +void GEMEfficiencyHarvester::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.addUntracked("folder", "GEM/Efficiency/type0"); + descriptions.add("gemEfficiencyHarvesterDefault", desc); +} + TProfile* GEMEfficiencyHarvester::computeEfficiency( const TH1F* passed, const TH1F* total, const char* name, const char* title, const double confidence_level) { if (not TEfficiency::CheckConsistency(*passed, *total)) { @@ -22,9 +28,9 @@ TProfile* GEMEfficiencyHarvester::computeEfficiency( TProfile* eff_profile = new TProfile(name, title, total_x->GetNbins(), total_x->GetXmin(), total_x->GetXmax()); eff_profile->GetXaxis()->SetTitle(total_x->GetTitle()); - eff_profile->GetYaxis()->SetTitle("#epsilon"); + eff_profile->GetYaxis()->SetTitle("Efficiency"); - for (int bin = 1; bin < total->GetNbinsX(); bin++) { + for (int bin = 1; bin <= total->GetNbinsX(); bin++) { double num_passed = passed->GetBinContent(bin); double num_total = total->GetBinContent(bin); @@ -119,6 +125,7 @@ void GEMEfficiencyHarvester::doEfficiency(DQMStore::IBooker& ibooker, DQMStore:: const auto& [me_passed, me_total] = value; if (me_passed == nullptr) { edm::LogError(log_category_) << "numerator is missing. " << key << std::endl; + continue; } if (me_total == nullptr) { @@ -199,45 +206,36 @@ std::vector GEMEfficiencyHarvester::splitString(std::string name, c return tokens; } -std::tuple GEMEfficiencyHarvester::parseResidualName(const std::string org_name, - const std::string prefix) { +std::tuple GEMEfficiencyHarvester::parseResidualName(const std::string org_name, + const std::string prefix) { std::string name = org_name; - // residual_x_ge-11_odd_ieta4 or residdual_x_ge+21_ieta3 - // residual_x: prefix + // e.g. residual_rdphi_GE-11_R4 -> _GE-11_R4 name.erase(name.find(prefix), prefix.length()); - name.erase(name.find("_ge"), 3); + // _GE-11_R4 -> -11_R4 + name.erase(name.find("_GE"), 3); + + // -11_R4 -> (-11, R4) const std::vector&& tokens = splitString(name, "_"); const size_t num_tokens = tokens.size(); - if ((num_tokens != 2) and (num_tokens != 3)) { - return std::make_tuple("", -1, false, -1); + if (num_tokens != 2) { + return std::make_tuple("", -1, -1); } - // station != 1 + // '-'11 std::string region_sign = tokens.front().substr(0, 1); - + // -'1'1 TString station_str = tokens.front().substr(1, 1); - TString ieta_str = tokens.back().substr(4, 1); - TString superchamber_str = (num_tokens == 3) ? tokens[1] : ""; - - int station = station_str.IsDigit() ? station_str.Atoi() : -1; - int ieta = ieta_str.IsDigit() ? ieta_str.Atoi() : -1; - - bool is_odd; - if (station == 1) { - if (superchamber_str.EqualTo("odd")) - is_odd = true; - else if (superchamber_str.EqualTo("even")) - is_odd = false; - else - return std::make_tuple("", -1, false, -1); - } else { - is_odd = false; - } - return std::make_tuple(region_sign, station, is_odd, ieta); + // R'4' or R'16' + TString ieta_str = tokens.back().substr(1); + + const int station = station_str.IsDigit() ? station_str.Atoi() : -1; + const int ieta = ieta_str.IsDigit() ? ieta_str.Atoi() : -1; + + return std::make_tuple(region_sign, station, ieta); } void GEMEfficiencyHarvester::doResolution(DQMStore::IBooker& ibooker, @@ -248,7 +246,12 @@ void GEMEfficiencyHarvester::doResolution(DQMStore::IBooker& ibooker, igetter.setCurrentFolder(resolution_folder); ibooker.setCurrentFolder(resolution_folder); - std::map, std::vector > > res_data; + // (histogram, (region_sign, station), ieta) + std::vector, int> > hist_vector; + // (region_sign, station) + std::vector > re_st_vec; + // ieta + std::vector ieta_vec; for (const std::string& name : igetter.getMEs()) { if (name.find(prefix) == std::string::npos) @@ -261,73 +264,121 @@ void GEMEfficiencyHarvester::doResolution(DQMStore::IBooker& ibooker, continue; } - TH1F* hist = me->getTH1F(); + const TH1F* hist = me->getTH1F(); if (hist == nullptr) { edm::LogError(log_category_) << "failed to get TH1F" << std::endl; continue; } - auto&& [region_sign, station, is_odd, ieta] = parseResidualName(name, prefix); + auto&& [region_sign, station, ieta] = parseResidualName(name, prefix); if (region_sign.empty() or station < 0 or ieta < 0) { edm::LogError(log_category_) << "failed to parse the name of the residual histogram: " << name << std::endl; continue; } + std::pair region_station(region_sign, station); - const std::tuple key{region_sign, station, is_odd}; - - if (res_data.find(key) == res_data.end()) { - res_data.insert({key, std::vector >()}); - } - res_data[key].emplace_back(ieta, hist); + hist_vector.emplace_back(hist, region_station, ieta); + if (std::find(re_st_vec.begin(), re_st_vec.end(), region_station) == re_st_vec.end()) + re_st_vec.push_back(region_station); + if (std::find(ieta_vec.begin(), ieta_vec.end(), ieta) == ieta_vec.end()) + ieta_vec.push_back(ieta); } // MonitorElement - ////////////////////////////////////////////////////////////////////////////// + if (hist_vector.empty()) { + edm::LogError(log_category_) << "failed to find " << prefix << std::endl; + return; + } + // NOTE - ////////////////////////////////////////////////////////////////////////////// - for (auto [key, ieta_data] : res_data) { - if (ieta_data.empty()) { - continue; + // GE-2/1, GE-1/1, GE-0/1, GE+0/1, GE+1/1, GE+2/1 + auto f_sort = [](const std::pair& lhs, const std::pair& rhs) -> bool { + if (lhs.first == rhs.first) { + if (lhs.first == "-") + return lhs.second > rhs.second; + else + return lhs.second < rhs.second; + + } else { + return (lhs.first == "-"); } + }; - TString tmp_title{ieta_data.front().second->GetTitle()}; - const TObjArray* tokens = tmp_title.Tokenize(":"); - TString title = dynamic_cast(tokens->At(0))->GetString(); + std::sort(re_st_vec.begin(), re_st_vec.end(), f_sort); + std::sort(ieta_vec.begin(), ieta_vec.end()); - auto&& [region_sign, station, is_odd] = key; - TString&& name = TString::Format("%s_ge%s%d1", prefix.data(), region_sign.c_str(), station); - title += TString::Format("GE %s%d/1", region_sign.c_str(), station); - if (station == 1) { - name += (is_odd ? "_odd" : "_even"); - title += (is_odd ? ", Odd Superchambers" : ", Even Superchambers"); - } + const int num_st = re_st_vec.size(); + const int num_ieta = ieta_vec.size(); + + // NOTE + TString tmp_title{std::get<0>(hist_vector.front())->GetTitle()}; + + const TObjArray* tokens = tmp_title.Tokenize(":"); + const TString title_prefix = dynamic_cast(tokens->At(0))->GetString(); + + const TString h_mean_name = prefix + "_mean"; + const TString h_stddev_name = prefix + "_stddev"; + const TString h_skewness_name = prefix + "_skewness"; + + const TString h_mean_title = title_prefix + " : Mean"; + const TString h_stddev_title = title_prefix + " : Standard Deviation"; + const TString h_skewness_title = title_prefix + " : Skewness"; + + TH2F* h_mean = new TH2F(h_mean_name, h_mean_title, num_ieta, 0.5, num_ieta + 0.5, num_st, 0.5, num_st + 0.5); + // x-axis + h_mean->GetXaxis()->SetTitle("i#eta"); + for (unsigned int idx = 0; idx < ieta_vec.size(); idx++) { + const int xbin = idx + 1; + const char* label = Form("%d", ieta_vec[idx]); + h_mean->GetXaxis()->SetBinLabel(xbin, label); + } + // y-axis + for (unsigned int idx = 0; idx < re_st_vec.size(); idx++) { + auto [region_sign, station] = re_st_vec[idx]; + const char* label = Form("GE%s%d/1", region_sign.c_str(), station); + const int ybin = idx + 1; + h_mean->GetYaxis()->SetBinLabel(ybin, label); + } - const int num_etas = ieta_data.size(); + TH2F* h_stddev = dynamic_cast(h_mean->Clone(h_stddev_name)); + TH2F* h_skewness = dynamic_cast(h_mean->Clone(h_skewness_name)); - TH2F* profile = new TH2F(name, title, num_etas, 0.5, num_etas + 0.5, 2, -0.5, 1.5); - auto x_axis = profile->GetXaxis(); + h_stddev->SetTitle(h_stddev_title); + h_skewness->SetTitle(h_skewness_title); - x_axis->SetTitle("i#eta"); - for (int ieta = 1; ieta <= num_etas; ieta++) { - const std::string&& label = std::to_string(ieta); - x_axis->SetBinLabel(ieta, label.c_str()); + // NOTE + for (auto [hist, region_station, ieta] : hist_vector) { + const int xbin = findResolutionBin(ieta, ieta_vec); + if (xbin < 0) { + edm::LogError(log_category_) << "found a wrong x bin = " << xbin << std::endl; + continue; } - profile->GetYaxis()->SetBinLabel(1, "Mean"); - profile->GetYaxis()->SetBinLabel(2, "Std. Dev."); + const int ybin = findResolutionBin(region_station, re_st_vec); + if (ybin < 0) { + edm::LogError(log_category_) << "found a wrong y bin = " << ybin << std::endl; + continue; + } - for (auto [ieta, hist] : ieta_data) { - profile->SetBinContent(ieta, 1, hist->GetMean()); - profile->SetBinContent(ieta, 2, hist->GetStdDev()); + h_mean->SetBinContent(xbin, ybin, hist->GetMean()); + h_stddev->SetBinContent(xbin, ybin, hist->GetStdDev()); - profile->SetBinError(ieta, 1, hist->GetMeanError()); - profile->SetBinError(ieta, 2, hist->GetStdDevError()); - } + // FIXME + // `GetSkewness` seems to returns nan when its histogram has no entry.. + const double skewness = hist->GetSkewness(); + if (not std::isnan(skewness)) + h_skewness->SetBinContent(xbin, ybin, skewness); + + h_mean->SetBinError(xbin, ybin, hist->GetMeanError()); + h_stddev->SetBinError(xbin, ybin, hist->GetStdDevError()); + h_skewness->SetBinError(xbin, ybin, hist->GetSkewness(11)); + } - ibooker.book2D(name, profile); + for (auto&& each : {h_mean, h_stddev, h_skewness}) { + ibooker.book2D(each->GetName(), each); } } void GEMEfficiencyHarvester::dqmEndJob(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) { doEfficiency(ibooker, igetter); - doResolution(ibooker, igetter, "residual_phi"); + doResolution(ibooker, igetter, "residual_rphi"); } diff --git a/DQMOffline/Muon/src/GEMOfflineDQMBase.cc b/DQMOffline/Muon/src/GEMOfflineDQMBase.cc index c76249848e123..04812541db184 100644 --- a/DQMOffline/Muon/src/GEMOfflineDQMBase.cc +++ b/DQMOffline/Muon/src/GEMOfflineDQMBase.cc @@ -1,8 +1,7 @@ #include "DQMOffline/Muon/interface/GEMOfflineDQMBase.h" +#include "FWCore/Utilities/interface/Likely.h" -GEMOfflineDQMBase::GEMOfflineDQMBase(const edm::ParameterSet& pset) { - log_category_ = pset.getUntrackedParameter("logCategory"); -} +GEMOfflineDQMBase::GEMOfflineDQMBase(const edm::ParameterSet& pset) {} int GEMOfflineDQMBase::getDetOccXBin(const GEMDetId& gem_id, const edm::ESHandle& gem) { const GEMSuperChamber* superchamber = gem->superChamber(gem_id); @@ -89,3 +88,23 @@ int GEMOfflineDQMBase::getNumEtaPartitions(const GEMStation* station) { return chambers.front()->nEtaPartitions(); } + +void GEMOfflineDQMBase::fillME(MEMap& me_map, const GEMDetId& key, const float x) { + if UNLIKELY (me_map.find(key) == me_map.end()) { + const std::string hint = !me_map.empty() ? me_map.begin()->second->getName() : "empty"; + + edm::LogError(log_category_) << "got invalid key: " << key << ", hint=" << hint << std::endl; + + } else { + me_map[key]->Fill(x); + } +} + +void GEMOfflineDQMBase::fillME(MEMap& me_map, const GEMDetId& key, const float x, const float y) { + if UNLIKELY (me_map.find(key) == me_map.end()) { + edm::LogError(log_category_) << "got invalid key: " << key << std::endl; + + } else { + me_map[key]->Fill(x, y); + } +} diff --git a/DQMOffline/Muon/src/GEMOfflineMonitor.cc b/DQMOffline/Muon/src/GEMOfflineMonitor.cc index 003ec3cd770e2..b63af1d1369b8 100644 --- a/DQMOffline/Muon/src/GEMOfflineMonitor.cc +++ b/DQMOffline/Muon/src/GEMOfflineMonitor.cc @@ -1,14 +1,15 @@ #include "DQMOffline/Muon/interface/GEMOfflineMonitor.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "Geometry/CommonTopologies/interface/StripTopology.h" #include "Geometry/Records/interface/MuonGeometryRecord.h" -#include "DataFormats/Math/interface/deltaPhi.h" +#include "Validation/MuonGEMHits/interface/GEMValidationUtils.h" GEMOfflineMonitor::GEMOfflineMonitor(const edm::ParameterSet& pset) : GEMOfflineDQMBase(pset) { digi_token_ = consumes(pset.getParameter("digiTag")); rechit_token_ = consumes(pset.getParameter("recHitTag")); + do_digi_occupancy_ = pset.getUntrackedParameter("doDigiOccupancy"); + do_hit_occupancy_ = pset.getUntrackedParameter("doHitOccupancy"); + log_category_ = pset.getUntrackedParameter("logCategory"); } GEMOfflineMonitor::~GEMOfflineMonitor() {} @@ -18,80 +19,116 @@ void GEMOfflineMonitor::fillDescriptions(edm::ConfigurationDescriptions& descrip desc.add("digiTag", edm::InputTag("muonGEMDigis")); desc.add("recHitTag", edm::InputTag("gemRecHits")); desc.addUntracked("logCategory", "GEMOfflineMonitor"); - descriptions.add("gemOfflineMonitor", desc); + desc.addUntracked("doDigiOccupancy", true); + desc.addUntracked("doHitOccupancy", true); + descriptions.add("gemOfflineMonitorDefault", desc); } -void GEMOfflineMonitor::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& run, edm::EventSetup const& isetup) { +void GEMOfflineMonitor::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& run, edm::EventSetup const& setup) { edm::ESHandle gem; - isetup.get().get(gem); + setup.get().get(gem); if (not gem.isValid()) { edm::LogError(log_category_) << "GEMGeometry is invalid" << std::endl; return; } - for (const GEMRegion* region : gem->regions()) { - const int region_number = region->region(); - const char* region_sign = region_number > 0 ? "+" : "-"; + if (do_digi_occupancy_) + bookDigiOccupancy(ibooker, gem); + + if (do_hit_occupancy_) + bookHitOccupancy(ibooker, gem); +} + +void GEMOfflineMonitor::bookDigiOccupancy(DQMStore::IBooker& ibooker, const edm::ESHandle& gem) { + ibooker.setCurrentFolder("GEM/GEMOfflineMonitor/DigiOccupancy"); + + for (const GEMStation* station : gem->stations()) { + const int region_id = station->region(); + const int station_id = station->station(); + const GEMDetId&& key = getReStKey(region_id, station_id); + const auto&& name_suffix = GEMUtils::getSuffixName(region_id, station_id); + const auto&& title_suffix = GEMUtils::getSuffixTitle(region_id, station_id); - for (const GEMStation* station : region->stations()) { - const int station_number = station->station(); + const auto&& superchambers = station->superChambers(); + if (not checkRefs(superchambers)) { + edm::LogError(log_category_) << "failed to get a valid vector of GEMSuperChamber ptrs" << std::endl; + return; + } - const MEMapKey1 det_key{region_number, station_number}; - const auto&& station_name = TString::Format("_ge%s%d1", region_sign, station_number); - const auto&& station_title = TString::Format(" : GE %s%d/1", region_sign, station_number); - bookDetectorOccupancy(ibooker, station, det_key, station_name, station_title); - } // station - } // region + // per station + const int num_superchambers = superchambers.size(); + const int num_chambers = num_superchambers * superchambers.front()->nChambers(); + // the numer of VFATs per GEMEtaPartition + const int max_vfat = getMaxVFAT(station->station()); + // the number of eta partitions per GEMChamber + const int num_etas = getNumEtaPartitions(station); + // the number of VFATs per GEMChamber + const int num_vfat = num_etas * max_vfat; + + me_digi_det_[key] = ibooker.book2D("digi_det" + name_suffix, + "Digi Occupancy" + title_suffix, + num_chambers, + 0.5, + num_chambers + 0.5, + num_vfat, + 0.5, + num_vfat + 0.5); + setDetLabelsVFAT(me_digi_det_[key], station); + } // station } -void GEMOfflineMonitor::bookDetectorOccupancy(DQMStore::IBooker& ibooker, - const GEMStation* station, - const MEMapKey1& key, - const TString& name_suffix, - const TString& title_suffix) { - BookingHelper helper(ibooker, name_suffix, title_suffix); - const auto&& superchambers = station->superChambers(); - if (not checkRefs(superchambers)) { - edm::LogError(log_category_) << "failed to get a valid vector of GEMSuperChamber ptrs" << std::endl; - return; - } +void GEMOfflineMonitor::bookHitOccupancy(DQMStore::IBooker& ibooker, const edm::ESHandle& gem) { + ibooker.setCurrentFolder("GEM/GEMOfflineMonitor/HitOccupancy"); + + for (const GEMStation* station : gem->stations()) { + const int region_id = station->region(); + const int station_id = station->station(); + + const GEMDetId&& key = getReStKey(region_id, station_id); + const auto&& name_suffix = GEMUtils::getSuffixName(region_id, station_id); + const auto&& title_suffix = GEMUtils::getSuffixTitle(region_id, station_id); + + const auto&& superchambers = station->superChambers(); + if (not checkRefs(superchambers)) { + edm::LogError(log_category_) << "failed to get a valid vector of GEMSuperChamber ptrs" << std::endl; + return; + } - // per station - const int num_superchambers = superchambers.size(); - const int num_chambers = num_superchambers * superchambers.front()->nChambers(); - // the numer of VFATs per GEMEtaPartition - const int max_vfat = getMaxVFAT(station->station()); - // the number of eta partitions per GEMChamber - const int num_etas = getNumEtaPartitions(station); - // the number of VFATs per GEMChamber - const int num_vfat = num_etas * max_vfat; - - // NOTE Digi - ibooker.setCurrentFolder("GEM/GEMOfflineMonitor/Digi"); - me_digi_det_[key] = - helper.book2D("digi_det", "Digi Occupancy", num_chambers, 0.5, num_chambers + 0.5, num_vfat, 0.5, num_vfat + 0.5); - setDetLabelsVFAT(me_digi_det_[key], station); - - // NOTE RecHit - ibooker.setCurrentFolder("GEM/GEMOfflineMonitor/RecHit"); - me_hit_det_[key] = - helper.book2D("hit_det", "Hit Occupancy", num_chambers, 0.5, num_chambers + 0.5, num_etas, 0.5, num_etas + 0.5); - setDetLabelsEta(me_hit_det_[key], station); + // per station + const int num_superchambers = superchambers.size(); + const int num_chambers = num_superchambers * superchambers.front()->nChambers(); + // the number of eta partitions per GEMChamber + const int num_etas = getNumEtaPartitions(station); + + me_hit_det_[key] = ibooker.book2D("hit_det" + name_suffix, + "Hit Occupancy" + title_suffix, + num_chambers, + 0.5, + num_chambers + 0.5, + num_etas, + 0.5, + num_etas + 0.5); + setDetLabelsEta(me_hit_det_[key], station); + } // station } void GEMOfflineMonitor::analyze(const edm::Event& event, const edm::EventSetup& setup) { edm::Handle digi_collection; - event.getByToken(digi_token_, digi_collection); - if (not digi_collection.isValid()) { - edm::LogError(log_category_) << "GEMDigiCollection is invalid!" << std::endl; - return; + if (do_digi_occupancy_) { + event.getByToken(digi_token_, digi_collection); + if (not digi_collection.isValid()) { + edm::LogError(log_category_) << "GEMDigiCollection is invalid!" << std::endl; + return; + } } edm::Handle rechit_collection; - event.getByToken(rechit_token_, rechit_collection); - if (not rechit_collection.isValid()) { - edm::LogError(log_category_) << "GEMRecHitCollection is invalid" << std::endl; - return; + if (do_hit_occupancy_) { + event.getByToken(rechit_token_, rechit_collection); + if (not rechit_collection.isValid()) { + edm::LogError(log_category_) << "GEMRecHitCollection is invalid" << std::endl; + return; + } } edm::ESHandle gem; @@ -101,26 +138,35 @@ void GEMOfflineMonitor::analyze(const edm::Event& event, const edm::EventSetup& return; } - // GEMDigi + if (do_digi_occupancy_) + doDigiOccupancy(gem, digi_collection); + + if (do_hit_occupancy_) + doHitOccupancy(gem, rechit_collection); +} + +void GEMOfflineMonitor::doDigiOccupancy(const edm::ESHandle& gem, + const edm::Handle& digi_collection) { for (auto range_iter = digi_collection->begin(); range_iter != digi_collection->end(); range_iter++) { const GEMDetId& gem_id = (*range_iter).first; const GEMDigiCollection::Range& range = (*range_iter).second; - const MEMapKey1 det_key{gem_id.region(), gem_id.station()}; + const GEMDetId&& rs_key = getReStKey(gem_id); for (auto digi = range.first; digi != range.second; ++digi) { const int chamber_bin = getDetOccXBin(gem_id, gem); const int vfat_number = getVFATNumberByStrip(gem_id.station(), gem_id.roll(), digi->strip()); - fillME(me_digi_det_, det_key, chamber_bin, vfat_number); - } - } + fillME(me_digi_det_, rs_key, chamber_bin, vfat_number); + } // digi + } // range +} - // GEMRecHit +void GEMOfflineMonitor::doHitOccupancy(const edm::ESHandle& gem, + const edm::Handle& rechit_collection) { for (auto hit = rechit_collection->begin(); hit != rechit_collection->end(); hit++) { const GEMDetId&& gem_id = hit->gemId(); - const MEMapKey1 det_key{gem_id.region(), gem_id.station()}; - + const GEMDetId&& rs_key = getReStKey(gem_id); const int chamber_bin = getDetOccXBin(gem_id, gem); - fillME(me_hit_det_, det_key, chamber_bin, gem_id.roll()); + fillME(me_hit_det_, rs_key, chamber_bin, gem_id.roll()); } } diff --git a/DQMOffline/Trigger/interface/EgHLTDQMCut.h b/DQMOffline/Trigger/interface/EgHLTDQMCut.h index ba826e71a158a..f0d4a710ba79c 100644 --- a/DQMOffline/Trigger/interface/EgHLTDQMCut.h +++ b/DQMOffline/Trigger/interface/EgHLTDQMCut.h @@ -16,6 +16,7 @@ #include "DQMOffline/Trigger/interface/EgHLTTrigCodes.h" #include "DataFormats/Math/interface/deltaR.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" //this is a pure virtual struct which defines the interface to the cut objects //it is also currently uncopyable diff --git a/DQMOffline/Trigger/plugins/HLTTauRefProducer.cc b/DQMOffline/Trigger/plugins/HLTTauRefProducer.cc index 7a4bf7a802499..9c5543380fe36 100644 --- a/DQMOffline/Trigger/plugins/HLTTauRefProducer.cc +++ b/DQMOffline/Trigger/plugins/HLTTauRefProducer.cc @@ -149,7 +149,7 @@ void HLTTauRefProducer::doPFTaus(edm::StreamID iID, edm::Event& iEvent) const { auto const aProv = aHandle.provenance(); if (aProv == nullptr) aHandle.whyFailed()->raise(); - const auto& psetsFromProvenance = edm::parameterSet(*aProv, iEvent.processHistory()); + const auto& psetsFromProvenance = edm::parameterSet(aProv->stable(), iEvent.processHistory()); if (psetsFromProvenance.exists("workingPoints")) { auto const idlist = psetsFromProvenance.getParameter>("workingPoints"); bool found = false; diff --git a/DQMOffline/Trigger/test/FSQtestDQM.py b/DQMOffline/Trigger/test/FSQtestDQM.py index d117bd957eeba..b7c38e7e23ff5 100644 --- a/DQMOffline/Trigger/test/FSQtestDQM.py +++ b/DQMOffline/Trigger/test/FSQtestDQM.py @@ -55,7 +55,7 @@ process.p = cms.Path(process.fsqHLTOfflineSource*process.fsqClient *process.dqmEnv*process.dqmSaver) #process.p = cms.Path(process.fsqHLTOfflineSourceSequence*process.fsqClient *process.dqmEnv*process.dqmSaver) #process.MessageLogger.threshold = cms.untracked.string( "INFO" ) -#process.MessageLogger.categories.append("FSQDiJetAve") +# ''' process.load("DQMOffline.Trigger.DQMOffline_Trigger_cff") process.load("DQMOffline.Trigger.FSQHLTOfflineClient_cfi") diff --git a/DQMOffline/Trigger/test/HLTTauOfflineDQMTest_cfg.py b/DQMOffline/Trigger/test/HLTTauOfflineDQMTest_cfg.py index c34f3bbfe6a9d..f7dec367d66e2 100644 --- a/DQMOffline/Trigger/test/HLTTauOfflineDQMTest_cfg.py +++ b/DQMOffline/Trigger/test/HLTTauOfflineDQMTest_cfg.py @@ -19,7 +19,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 100 -process.MessageLogger.categories.append("HLTTauDQMOffline") +process.MessageLogger.HLTTauDQMOffline=dict() process.load("Configuration.StandardSequences.GeometryRecoDB_cff") process.load("Geometry.CaloEventSetup.CaloTopology_cfi") diff --git a/DQMOffline/Trigger/test/triggerSequenceTest_cfg.py b/DQMOffline/Trigger/test/triggerSequenceTest_cfg.py index 96f5ea4d80167..804b311118495 100644 --- a/DQMOffline/Trigger/test/triggerSequenceTest_cfg.py +++ b/DQMOffline/Trigger/test/triggerSequenceTest_cfg.py @@ -76,7 +76,7 @@ # # Message Logger # process.load("FWCore.MessageService.MessageLogger_cfi") -# #process.MessageLogger.categories = ['hltFiltersDQMonitor'] +# # # process.MessageLogger.destinations = ['cout', 'detailedInfo', 'critical'] # process.MessageLogger.cout = cms.untracked.PSet( # #threshold = cms.untracked.string('ERROR'), @@ -89,7 +89,7 @@ # limit = cms.untracked.int32(-1) ## DEBUG, all messages # ) # ) -# process.MessageLogger.categories = ['Status', 'Parameter'] +# # # copy stdout to a file # process.MessageLogger.detailedInfo = process.MessageLogger.cout # process.MessageLogger.debugModules = ['hltFiltersDQMonitor'] diff --git a/DQMServices/Components/plugins/DQMDaqInfo.cc b/DQMServices/Components/plugins/DQMDaqInfo.cc index bec2abbca7516..314176147c1a2 100644 --- a/DQMServices/Components/plugins/DQMDaqInfo.cc +++ b/DQMServices/Components/plugins/DQMDaqInfo.cc @@ -1,49 +1,48 @@ #include "DQMDaqInfo.h" #include "DataFormats/FEDRawData/interface/FEDNumbering.h" -DQMDaqInfo::DQMDaqInfo(const edm::ParameterSet& iConfig) {} +DQMDaqInfo::DQMDaqInfo(const edm::ParameterSet& iConfig) + : runInfoToken_{esConsumes()} {} DQMDaqInfo::~DQMDaqInfo() = default; void DQMDaqInfo::beginLuminosityBlock(const edm::LuminosityBlock& lumiBlock, const edm::EventSetup& iSetup) { edm::eventsetup::EventSetupRecordKey recordKey(edm::eventsetup::EventSetupRecordKey::TypeTag::findType("RunInfoRcd")); - if (auto runInfoRec = iSetup.tryToGet()) { - edm::ESHandle sumFED; - runInfoRec->get(sumFED); - - //const RunInfo* summaryFED=sumFED.product(); - - std::vector FedsInIds = sumFED->m_fed_in; - - float FedCount[9] = {0., 0., 0., 0., 0., 0., 0., 0., 0.}; - - for (int fedID : FedsInIds) { - if (fedID >= PixelRange.first && fedID <= PixelRange.second) - ++FedCount[Pixel]; - if (fedID >= TrackerRange.first && fedID <= TrackerRange.second) - ++FedCount[SiStrip]; - if (fedID >= CSCRange.first && fedID <= CSCRange.second) - ++FedCount[CSC]; - if (fedID >= RPCRange.first && fedID <= RPCRange.second) - ++FedCount[RPC]; - if (fedID >= DTRange.first && fedID <= DTRange.second) - ++FedCount[DT]; - if (fedID >= HcalRange.first && fedID <= HcalRange.second) - ++FedCount[Hcal]; - if (fedID >= ECALBarrRange.first && fedID <= ECALBarrRange.second) - ++FedCount[EcalBarrel]; - if ((fedID >= ECALEndcapRangeLow.first && fedID <= ECALEndcapRangeLow.second) || - (fedID >= ECALEndcapRangeHigh.first && fedID <= ECALEndcapRangeHigh.second)) - ++FedCount[EcalEndcap]; - if (fedID >= L1TRange.first && fedID <= L1TRange.second) - ++FedCount[L1T]; + if (iSetup.tryToGet()) { + if (auto sumFED = iSetup.getHandle(runInfoToken_)) { + //const RunInfo* summaryFED=sumFED.product(); + + std::vector FedsInIds = sumFED->m_fed_in; + + float FedCount[9] = {0., 0., 0., 0., 0., 0., 0., 0., 0.}; + + for (int fedID : FedsInIds) { + if (fedID >= PixelRange.first && fedID <= PixelRange.second) + ++FedCount[Pixel]; + if (fedID >= TrackerRange.first && fedID <= TrackerRange.second) + ++FedCount[SiStrip]; + if (fedID >= CSCRange.first && fedID <= CSCRange.second) + ++FedCount[CSC]; + if (fedID >= RPCRange.first && fedID <= RPCRange.second) + ++FedCount[RPC]; + if (fedID >= DTRange.first && fedID <= DTRange.second) + ++FedCount[DT]; + if (fedID >= HcalRange.first && fedID <= HcalRange.second) + ++FedCount[Hcal]; + if (fedID >= ECALBarrRange.first && fedID <= ECALBarrRange.second) + ++FedCount[EcalBarrel]; + if ((fedID >= ECALEndcapRangeLow.first && fedID <= ECALEndcapRangeLow.second) || + (fedID >= ECALEndcapRangeHigh.first && fedID <= ECALEndcapRangeHigh.second)) + ++FedCount[EcalEndcap]; + if (fedID >= L1TRange.first && fedID <= L1TRange.second) + ++FedCount[L1T]; + } + + for (int detIndex = 0; detIndex < 9; ++detIndex) { + DaqFraction[detIndex]->Fill(FedCount[detIndex] / NumberOfFeds[detIndex]); + } } - - for (int detIndex = 0; detIndex < 9; ++detIndex) { - DaqFraction[detIndex]->Fill(FedCount[detIndex] / NumberOfFeds[detIndex]); - } - } else { for (auto& detIndex : DaqFraction) detIndex->Fill(-1); diff --git a/DQMServices/Components/plugins/DQMDaqInfo.h b/DQMServices/Components/plugins/DQMDaqInfo.h index 1e8e5079bb26b..8d7009c084da5 100644 --- a/DQMServices/Components/plugins/DQMDaqInfo.h +++ b/DQMServices/Components/plugins/DQMDaqInfo.h @@ -26,7 +26,7 @@ // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/LuminosityBlock.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -42,7 +42,7 @@ #include "DQMServices/Core/interface/DQMStore.h" #include "FWCore/ServiceRegistry/interface/Service.h" -class DQMDaqInfo : public edm::EDAnalyzer { +class DQMDaqInfo : public edm::one::EDAnalyzer<> { public: typedef dqm::legacy::DQMStore DQMStore; typedef dqm::legacy::MonitorElement MonitorElement; @@ -51,9 +51,10 @@ class DQMDaqInfo : public edm::EDAnalyzer { private: void beginJob() override; - void beginLuminosityBlock(const edm::LuminosityBlock&, const edm::EventSetup&) override; + void beginLuminosityBlock(const edm::LuminosityBlock&, const edm::EventSetup&); void analyze(const edm::Event&, const edm::EventSetup&) override; + edm::ESGetToken runInfoToken_; DQMStore* dbe_; enum subDetList { Pixel, SiStrip, EcalBarrel, EcalEndcap, Hcal, DT, CSC, RPC, L1T }; diff --git a/DQMServices/Components/plugins/DQMFEDIntegrityClient.cc b/DQMServices/Components/plugins/DQMFEDIntegrityClient.cc index bffbc597fa769..1ea79c6f131ed 100644 --- a/DQMServices/Components/plugins/DQMFEDIntegrityClient.cc +++ b/DQMServices/Components/plugins/DQMFEDIntegrityClient.cc @@ -180,12 +180,9 @@ void DQMFEDIntegrityClient::fillHistograms() { MonitorElement* me = dbe_->get(*ent); if (TH1F* rootHisto = me->getTH1F()) { - int xmin = 0; int Nbins = me->getNbinsX(); - float entry = 0.; - - xmin = (int)rootHisto->GetXaxis()->GetXmin(); + int xmin = (int)rootHisto->GetXaxis()->GetXmin(); if (*ent == "L1T/" + fedFolderName + "/FEDEntries") xmin = xmin + 800; @@ -233,25 +230,19 @@ void DQMFEDIntegrityClient::fillHistograms() { MonitorElement* meNorm = dbe_->get(*ent); // cout << "Path : " << me->getFullname() << endl; - int Nbins = me->getNbinsX(); - float entry = 0.; float norm = 0.; if (TH1F* rootHisto = me->getTH1F()) { if (TH1F* rootHistoNorm = meNorm->getTH1F()) { - int xmin = 0; - int xmax = 0; - - xmin = (int)rootHisto->GetXaxis()->GetXmin(); + int Nbins = me->getNbinsX(); + int xmin = (int)rootHisto->GetXaxis()->GetXmin(); if (*fat == "L1T/" + fedFolderName + "/FEDFatal") xmin = xmin + 800; - - xmax = (int)rootHisto->GetXaxis()->GetXmax(); - if (*fat == "L1T/" + fedFolderName + "/FEDFatal") - xmax = xmax + 800; - - // cout << "FED ID range : " << xmin << " - " << xmax << endl; + // int xmax = (int)rootHisto->GetXaxis()->GetXmax(); + // if (*fat == "L1T/" + fedFolderName + "/FEDFatal") + // xmax = xmax + 800; + // cout << "FED ID range : " << xmin << " - " << xmax << endl; float binentry = 0.; for (int bin = 1; bin <= Nbins; ++bin) { @@ -307,12 +298,9 @@ void DQMFEDIntegrityClient::fillHistograms() { MonitorElement* me = dbe_->get(*non); if (TH1F* rootHisto = me->getTH1F()) { - int xmin = 0; int Nbins = me->getNbinsX(); - float entry = 0.; - - xmin = (int)rootHisto->GetXaxis()->GetXmin(); + int xmin = (int)rootHisto->GetXaxis()->GetXmin(); if (*non == "L1T/" + fedFolderName + "/FEDNonFatal") xmin = xmin + 800; diff --git a/DQMServices/Components/plugins/DQMMessageLogger.cc b/DQMServices/Components/plugins/DQMMessageLogger.cc index 3fa85f161e175..660aa6a846aa1 100644 --- a/DQMServices/Components/plugins/DQMMessageLogger.cc +++ b/DQMServices/Components/plugins/DQMMessageLogger.cc @@ -8,7 +8,7 @@ #include "DQMServices/Core/interface/DQMStore.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/MessageLogger/interface/ErrorSummaryEntry.h" +#include "DataFormats/Common/interface/ErrorSummaryEntry.h" #include "DataFormats/FWLite/interface/Event.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/EDAnalyzer.h" @@ -19,7 +19,6 @@ #include "FWCore/Utilities/interface/Algorithms.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/Registry.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/FWLite/interface/Handle.h" #include "TPad.h" #include @@ -128,7 +127,7 @@ void DQMMessageLogger::analyze(const Event& iEvent, const EventSetup& iSetup) { return; } // Compare severity level of error with ELseveritylevel instance el : "-e" should be the lowest error - ELseverityLevel el("-e"); + ELseverityLevel el(ELseverityLevel::ELsev_error); // Find the total number of errors in iEvent if (errors->empty()) { diff --git a/DQMServices/Components/plugins/DQMMessageLogger.h b/DQMServices/Components/plugins/DQMMessageLogger.h index 7410ce63e4114..b1ea7f0284092 100644 --- a/DQMServices/Components/plugins/DQMMessageLogger.h +++ b/DQMServices/Components/plugins/DQMMessageLogger.h @@ -7,7 +7,7 @@ #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/FWLite/interface/Event.h" -#include "FWCore/MessageLogger/interface/ErrorSummaryEntry.h" +#include "DataFormats/Common/interface/ErrorSummaryEntry.h" #include "DQMServices/Core/interface/DQMEDAnalyzer.h" #include "DQMServices/Core/interface/DQMStore.h" #include diff --git a/DQMServices/Components/src/fillJson.cc b/DQMServices/Components/src/fillJson.cc index 0f524311051ef..5ae35f6530e50 100644 --- a/DQMServices/Components/src/fillJson.cc +++ b/DQMServices/Components/src/fillJson.cc @@ -13,11 +13,11 @@ // system include files #include #include -#include #include #include #include +#include // user include files #include "FWCore/ServiceRegistry/interface/Service.h" @@ -33,7 +33,6 @@ boost::property_tree::ptree dqmfilesaver::fillJson(int run, const std::string& mergeTypeStr, evf::FastMonitoringService* fms) { namespace bpt = boost::property_tree; - namespace bfs = boost::filesystem; bpt::ptree pt; @@ -57,7 +56,7 @@ boost::property_tree::ptree dqmfilesaver::fillJson(int run, if (stat(dataFilePathName.c_str(), &dataFileStat) != 0) throw cms::Exception("fillJson") << "Internal error, cannot get data file: " << dataFilePathName; // Extract only the data file name from the full path - dataFileName = bfs::path(dataFilePathName).filename().string(); + dataFileName = std::filesystem::path(dataFilePathName).filename().string(); } // The availability test of the FastMonitoringService was done in the ctor. bpt::ptree data; @@ -95,7 +94,7 @@ boost::property_tree::ptree dqmfilesaver::fillJson(int run, pt.put("definition", "/fakeDefinition.jsn"); } else { // The availability test of the EvFDaqDirector Service was done in the ctor. - bfs::path outJsonDefName{ + std::filesystem::path outJsonDefName{ edm::Service()->baseRunDir()}; //we assume this file is written bu the EvF Output module outJsonDefName /= (std::string("output_") + oss_pid.str() + std::string(".jsd")); pt.put("definition", outJsonDefName.string()); diff --git a/DQMServices/Components/test/testSchemaEvolution.cpp b/DQMServices/Components/test/testSchemaEvolution.cpp index bb59338514483..84278974ba262 100644 --- a/DQMServices/Components/test/testSchemaEvolution.cpp +++ b/DQMServices/Components/test/testSchemaEvolution.cpp @@ -41,7 +41,7 @@ CPPUNIT_TEST_SUITE_REGISTRATION(TestSchemaEvolution); void TestSchemaEvolution::fillBaseline() { unique_classes_current_.insert(std::make_pair("vector", 6)); - unique_classes_current_.insert(std::make_pair("TF1", 10)); + unique_classes_current_.insert(std::make_pair("TF1", 12)); unique_classes_current_.insert(std::make_pair("TH3S", 4)); unique_classes_current_.insert(std::make_pair("TAtt3D", 1)); unique_classes_current_.insert(std::make_pair("TH3", 6)); diff --git a/DQMServices/Core/interface/MonitorElement.h b/DQMServices/Core/interface/MonitorElement.h index 05a4a5b3053c6..f39f88d97fab0 100644 --- a/DQMServices/Core/interface/MonitorElement.h +++ b/DQMServices/Core/interface/MonitorElement.h @@ -427,7 +427,8 @@ namespace dqm::impl { virtual void setCanExtend(unsigned int value); // We should decide if we support this (or make it default) DQM_DEPRECATED - virtual void setStatOverflows(unsigned int value); + virtual void setStatOverflows(bool value); + virtual bool getStatOverflows(); // these should be non-const, since they are potentially not thread-safe virtual TObject const *getRootObject() const; diff --git a/DQMServices/Core/src/MonitorElement.cc b/DQMServices/Core/src/MonitorElement.cc index 0be7a2d82ac8f..5f096a90aa0ec 100644 --- a/DQMServices/Core/src/MonitorElement.cc +++ b/DQMServices/Core/src/MonitorElement.cc @@ -904,9 +904,21 @@ namespace dqm::impl { access.value.object_->SetCanExtend(value); } - void MonitorElement::setStatOverflows(unsigned int value) { + void MonitorElement::setStatOverflows(bool value) { auto access = this->accessMut(); - access.value.object_->StatOverflows(value); + if (value == kTRUE) + access.value.object_->SetStatOverflows(TH1::kConsider); + else + access.value.object_->SetStatOverflows(TH1::kIgnore); + } + + bool MonitorElement::getStatOverflows() { + auto access = this->accessMut(); + auto value = access.value.object_->GetStatOverflows(); + if (value == TH1::kConsider) + return true; + else + return false; } int64_t MonitorElement::getIntValue() const { diff --git a/DQMServices/Core/src/ROOTFilePB.pb.cc b/DQMServices/Core/src/ROOTFilePB.pb.cc index 4f69e8a7acca7..88f9bb236431c 100644 --- a/DQMServices/Core/src/ROOTFilePB.pb.cc +++ b/DQMServices/Core/src/ROOTFilePB.pb.cc @@ -14,57 +14,34 @@ #include // @@protoc_insertion_point(includes) #include -extern PROTOBUF_INTERNAL_EXPORT_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo< - 0> - scc_info_ROOTFilePB_Histo_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto; + +PROTOBUF_PRAGMA_INIT_SEG namespace dqmstorepb { - class ROOTFilePB_HistoDefaultTypeInternal { - public: - ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed _instance; - } _ROOTFilePB_Histo_default_instance_; - class ROOTFilePBDefaultTypeInternal { - public: - ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed _instance; - } _ROOTFilePB_default_instance_; + constexpr ROOTFilePB_Histo::ROOTFilePB_Histo(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized) + : full_pathname_(&::PROTOBUF_NAMESPACE_ID::internal::fixed_address_empty_string), + streamed_histo_(&::PROTOBUF_NAMESPACE_ID::internal::fixed_address_empty_string), + size_(0u), + flags_(0u) {} + struct ROOTFilePB_HistoDefaultTypeInternal { + constexpr ROOTFilePB_HistoDefaultTypeInternal() + : _instance(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized{}) {} + ~ROOTFilePB_HistoDefaultTypeInternal() {} + union { + ROOTFilePB_Histo _instance; + }; + }; + PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT ROOTFilePB_HistoDefaultTypeInternal + _ROOTFilePB_Histo_default_instance_; + constexpr ROOTFilePB::ROOTFilePB(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized) : histo_() {} + struct ROOTFilePBDefaultTypeInternal { + constexpr ROOTFilePBDefaultTypeInternal() : _instance(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized{}) {} + ~ROOTFilePBDefaultTypeInternal() {} + union { + ROOTFilePB _instance; + }; + }; + PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT ROOTFilePBDefaultTypeInternal _ROOTFilePB_default_instance_; } // namespace dqmstorepb -static void InitDefaultsscc_info_ROOTFilePB_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::dqmstorepb::_ROOTFilePB_default_instance_; - new (ptr)::dqmstorepb::ROOTFilePB(); - ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr); - } - ::dqmstorepb::ROOTFilePB::InitAsDefaultInstance(); -} - -::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_ROOTFilePB_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto = { - {ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), - 1, - 0, - InitDefaultsscc_info_ROOTFilePB_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto}, - { - &scc_info_ROOTFilePB_Histo_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto.base, - }}; - -static void InitDefaultsscc_info_ROOTFilePB_Histo_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::dqmstorepb::_ROOTFilePB_Histo_default_instance_; - new (ptr)::dqmstorepb::ROOTFilePB_Histo(); - ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr); - } - ::dqmstorepb::ROOTFilePB_Histo::InitAsDefaultInstance(); -} - -::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_ROOTFilePB_Histo_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto = { - {ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), - 0, - 0, - InitDefaultsscc_info_ROOTFilePB_Histo_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto}, - {}}; - static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto[2]; static constexpr ::PROTOBUF_NAMESPACE_ID::EnumDescriptor const** file_level_enum_descriptors_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto = nullptr; @@ -86,17 +63,16 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 2, 1, 3, - PROTOBUF_FIELD_OFFSET(::dqmstorepb::ROOTFilePB, _has_bits_), + ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::dqmstorepb::ROOTFilePB, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ PROTOBUF_FIELD_OFFSET(::dqmstorepb::ROOTFilePB, histo_), - ~0u, }; static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { {0, 9, sizeof(::dqmstorepb::ROOTFilePB_Histo)}, - {13, 19, sizeof(::dqmstorepb::ROOTFilePB)}, + {13, -1, sizeof(::dqmstorepb::ROOTFilePB)}, }; static ::PROTOBUF_NAMESPACE_ID::Message const* const file_default_instances[] = { @@ -111,44 +87,39 @@ const char descriptor_table_protodef_DQMServices_2fCore_2fsrc_2fROOTFilePB_2epro "\0132\034.dqmstorepb.ROOTFilePB.Histo\032S\n\005Histo" "\022\025\n\rfull_pathname\030\001 \002(\t\022\014\n\004size\030\002 \002(\r\022\026\n" "\016streamed_histo\030\003 \002(\014\022\r\n\005flags\030\004 \002(\r"; -static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* const - descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto_deps[1] = {}; -static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase* const - descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto_sccs[2] = { - &scc_info_ROOTFilePB_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto.base, - &scc_info_ROOTFilePB_Histo_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto.base, -}; static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto_once; -static bool descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto_initialized = false; const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto = { - &descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto_initialized, + false, + false, + 196, descriptor_table_protodef_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto, "DQMServices/Core/src/ROOTFilePB.proto", - 196, &descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto_once, - descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto_sccs, - descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto_deps, - 2, + nullptr, 0, + 2, schemas, file_default_instances, TableStruct_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto::offsets, file_level_metadata_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto, - 2, file_level_enum_descriptors_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto, file_level_service_descriptors_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto, }; +PROTOBUF_ATTRIBUTE_WEAK ::PROTOBUF_NAMESPACE_ID::Metadata +descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto_metadata_getter(int index) { + ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto); + return descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto.file_level_metadata[index]; +} // Force running AddDescriptors() at dynamic initialization time. -static bool dynamic_init_dummy_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto = - (::PROTOBUF_NAMESPACE_ID::internal::AddDescriptors(&descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto), - true); +PROTOBUF_ATTRIBUTE_INIT_PRIORITY static ::PROTOBUF_NAMESPACE_ID::internal::AddDescriptorsRunner + dynamic_init_dummy_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto( + &descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto); namespace dqmstorepb { // =================================================================== - void ROOTFilePB_Histo::InitAsDefaultInstance() {} class ROOTFilePB_Histo::_Internal { public: using HasBits = decltype(std::declval()._has_bits_); @@ -156,24 +127,30 @@ namespace dqmstorepb { static void set_has_size(HasBits* has_bits) { (*has_bits)[0] |= 4u; } static void set_has_streamed_histo(HasBits* has_bits) { (*has_bits)[0] |= 2u; } static void set_has_flags(HasBits* has_bits) { (*has_bits)[0] |= 8u; } + static bool MissingRequiredFields(const HasBits& has_bits) { + return ((has_bits[0] & 0x0000000f) ^ 0x0000000f) != 0; + } }; - ROOTFilePB_Histo::ROOTFilePB_Histo() : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) { + ROOTFilePB_Histo::ROOTFilePB_Histo(::PROTOBUF_NAMESPACE_ID::Arena* arena) : ::PROTOBUF_NAMESPACE_ID::Message(arena) { SharedCtor(); - // @@protoc_insertion_point(constructor:dqmstorepb.ROOTFilePB.Histo) + RegisterArenaDtor(arena); + // @@protoc_insertion_point(arena_constructor:dqmstorepb.ROOTFilePB.Histo) } ROOTFilePB_Histo::ROOTFilePB_Histo(const ROOTFilePB_Histo& from) - : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr), _has_bits_(from._has_bits_) { - _internal_metadata_.MergeFrom(from._internal_metadata_); + : ::PROTOBUF_NAMESPACE_ID::Message(), _has_bits_(from._has_bits_) { + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); full_pathname_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); if (from._internal_has_full_pathname()) { - full_pathname_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), - from.full_pathname_); + full_pathname_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, + from._internal_full_pathname(), + GetArena()); } streamed_histo_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); if (from._internal_has_streamed_histo()) { - streamed_histo_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), - from.streamed_histo_); + streamed_histo_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, + from._internal_streamed_histo(), + GetArena()); } ::memcpy(&size_, &from.size_, @@ -182,11 +159,10 @@ namespace dqmstorepb { } void ROOTFilePB_Histo::SharedCtor() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC( - &scc_info_ROOTFilePB_Histo_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto.base); full_pathname_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); streamed_histo_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); - ::memset(&size_, + ::memset(reinterpret_cast(this) + + static_cast(reinterpret_cast(&size_) - reinterpret_cast(this)), 0, static_cast(reinterpret_cast(&flags_) - reinterpret_cast(&size_)) + sizeof(flags_)); } @@ -194,19 +170,21 @@ namespace dqmstorepb { ROOTFilePB_Histo::~ROOTFilePB_Histo() { // @@protoc_insertion_point(destructor:dqmstorepb.ROOTFilePB.Histo) SharedDtor(); + _internal_metadata_.Delete<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); } void ROOTFilePB_Histo::SharedDtor() { + GOOGLE_DCHECK(GetArena() == nullptr); full_pathname_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); streamed_histo_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); } - void ROOTFilePB_Histo::SetCachedSize(int size) const { _cached_size_.Set(size); } - const ROOTFilePB_Histo& ROOTFilePB_Histo::default_instance() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC( - &::scc_info_ROOTFilePB_Histo_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto.base); - return *internal_default_instance(); + void ROOTFilePB_Histo::ArenaDtor(void* object) { + ROOTFilePB_Histo* _this = reinterpret_cast(object); + (void)_this; } + void ROOTFilePB_Histo::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {} + void ROOTFilePB_Histo::SetCachedSize(int size) const { _cached_size_.Set(size); } void ROOTFilePB_Histo::Clear() { // @@protoc_insertion_point(message_clear_start:dqmstorepb.ROOTFilePB.Histo) @@ -217,10 +195,10 @@ namespace dqmstorepb { cached_has_bits = _has_bits_[0]; if (cached_has_bits & 0x00000003u) { if (cached_has_bits & 0x00000001u) { - full_pathname_.ClearNonDefaultToEmptyNoArena(); + full_pathname_.ClearNonDefaultToEmpty(); } if (cached_has_bits & 0x00000002u) { - streamed_histo_.ClearNonDefaultToEmptyNoArena(); + streamed_histo_.ClearNonDefaultToEmpty(); } } if (cached_has_bits & 0x0000000cu) { @@ -230,7 +208,7 @@ namespace dqmstorepb { static_cast(reinterpret_cast(&flags_) - reinterpret_cast(&size_)) + sizeof(flags_)); } _has_bits_.Clear(); - _internal_metadata_.Clear(); + _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); } const char* ROOTFilePB_Histo::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) { @@ -259,7 +237,7 @@ namespace dqmstorepb { case 2: if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 16)) { _Internal::set_has_size(&has_bits); - size_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr); + size_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr); CHK_(ptr); } else goto handle_unusual; @@ -277,7 +255,7 @@ namespace dqmstorepb { case 4: if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 32)) { _Internal::set_has_flags(&has_bits); - flags_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr); + flags_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr); CHK_(ptr); } else goto handle_unusual; @@ -288,7 +266,8 @@ namespace dqmstorepb { ctx->SetLastTag(tag); goto success; } - ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx); + ptr = UnknownFieldParse( + tag, _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(), ptr, ctx); CHK_(ptr != nullptr); continue; } @@ -340,7 +319,10 @@ namespace dqmstorepb { if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray( - _internal_metadata_.unknown_fields(), target, stream); + _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>( + ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), + target, + stream); } // @@protoc_insertion_point(serialize_to_array_end:dqmstorepb.ROOTFilePB.Histo) return target; @@ -421,21 +403,17 @@ namespace dqmstorepb { void ROOTFilePB_Histo::MergeFrom(const ROOTFilePB_Histo& from) { // @@protoc_insertion_point(class_specific_merge_from_start:dqmstorepb.ROOTFilePB.Histo) GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; (void)cached_has_bits; cached_has_bits = from._has_bits_[0]; if (cached_has_bits & 0x0000000fu) { if (cached_has_bits & 0x00000001u) { - _has_bits_[0] |= 0x00000001u; - full_pathname_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), - from.full_pathname_); + _internal_set_full_pathname(from._internal_full_pathname()); } if (cached_has_bits & 0x00000002u) { - _has_bits_[0] |= 0x00000002u; - streamed_histo_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), - from.streamed_histo_); + _internal_set_streamed_histo(from._internal_streamed_histo()); } if (cached_has_bits & 0x00000004u) { size_ = from.size_; @@ -464,64 +442,60 @@ namespace dqmstorepb { } bool ROOTFilePB_Histo::IsInitialized() const { - if ((_has_bits_[0] & 0x0000000f) != 0x0000000f) + if (_Internal::MissingRequiredFields(_has_bits_)) return false; return true; } void ROOTFilePB_Histo::InternalSwap(ROOTFilePB_Histo* other) { using std::swap; - _internal_metadata_.Swap(&other->_internal_metadata_); + _internal_metadata_.Swap<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(&other->_internal_metadata_); swap(_has_bits_[0], other->_has_bits_[0]); full_pathname_.Swap( - &other->full_pathname_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); - streamed_histo_.Swap(&other->streamed_histo_, - &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - swap(size_, other->size_); - swap(flags_, other->flags_); + &other->full_pathname_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); + streamed_histo_.Swap( + &other->streamed_histo_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); + ::PROTOBUF_NAMESPACE_ID::internal::memswap( + reinterpret_cast(&size_), reinterpret_cast(&other->size_)); } ::PROTOBUF_NAMESPACE_ID::Metadata ROOTFilePB_Histo::GetMetadata() const { return GetMetadataStatic(); } // =================================================================== - void ROOTFilePB::InitAsDefaultInstance() {} class ROOTFilePB::_Internal { public: - using HasBits = decltype(std::declval()._has_bits_); }; - ROOTFilePB::ROOTFilePB() : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) { + ROOTFilePB::ROOTFilePB(::PROTOBUF_NAMESPACE_ID::Arena* arena) + : ::PROTOBUF_NAMESPACE_ID::Message(arena), histo_(arena) { SharedCtor(); - // @@protoc_insertion_point(constructor:dqmstorepb.ROOTFilePB) + RegisterArenaDtor(arena); + // @@protoc_insertion_point(arena_constructor:dqmstorepb.ROOTFilePB) } - ROOTFilePB::ROOTFilePB(const ROOTFilePB& from) - : ::PROTOBUF_NAMESPACE_ID::Message(), - _internal_metadata_(nullptr), - _has_bits_(from._has_bits_), - histo_(from.histo_) { - _internal_metadata_.MergeFrom(from._internal_metadata_); + ROOTFilePB::ROOTFilePB(const ROOTFilePB& from) : ::PROTOBUF_NAMESPACE_ID::Message(), histo_(from.histo_) { + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); // @@protoc_insertion_point(copy_constructor:dqmstorepb.ROOTFilePB) } - void ROOTFilePB::SharedCtor() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_ROOTFilePB_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto.base); - } + void ROOTFilePB::SharedCtor() {} ROOTFilePB::~ROOTFilePB() { // @@protoc_insertion_point(destructor:dqmstorepb.ROOTFilePB) SharedDtor(); + _internal_metadata_.Delete<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); } - void ROOTFilePB::SharedDtor() {} + void ROOTFilePB::SharedDtor() { GOOGLE_DCHECK(GetArena() == nullptr); } - void ROOTFilePB::SetCachedSize(int size) const { _cached_size_.Set(size); } - const ROOTFilePB& ROOTFilePB::default_instance() { - ::PROTOBUF_NAMESPACE_ID::internal::InitSCC( - &::scc_info_ROOTFilePB_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto.base); - return *internal_default_instance(); + void ROOTFilePB::ArenaDtor(void* object) { + ROOTFilePB* _this = reinterpret_cast(object); + (void)_this; } + void ROOTFilePB::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {} + void ROOTFilePB::SetCachedSize(int size) const { _cached_size_.Set(size); } void ROOTFilePB::Clear() { // @@protoc_insertion_point(message_clear_start:dqmstorepb.ROOTFilePB) @@ -530,8 +504,7 @@ namespace dqmstorepb { (void)cached_has_bits; histo_.Clear(); - _has_bits_.Clear(); - _internal_metadata_.Clear(); + _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); } const char* ROOTFilePB::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) { @@ -563,7 +536,8 @@ namespace dqmstorepb { ctx->SetLastTag(tag); goto success; } - ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx); + ptr = UnknownFieldParse( + tag, _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(), ptr, ctx); CHK_(ptr != nullptr); continue; } @@ -592,7 +566,10 @@ namespace dqmstorepb { if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray( - _internal_metadata_.unknown_fields(), target, stream); + _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>( + ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), + target, + stream); } // @@protoc_insertion_point(serialize_to_array_end:dqmstorepb.ROOTFilePB) return target; @@ -637,7 +614,7 @@ namespace dqmstorepb { void ROOTFilePB::MergeFrom(const ROOTFilePB& from) { // @@protoc_insertion_point(class_specific_merge_from_start:dqmstorepb.ROOTFilePB) GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; (void)cached_has_bits; @@ -668,8 +645,7 @@ namespace dqmstorepb { void ROOTFilePB::InternalSwap(ROOTFilePB* other) { using std::swap; - _internal_metadata_.Swap(&other->_internal_metadata_); - swap(_has_bits_[0], other->_has_bits_[0]); + _internal_metadata_.Swap<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(&other->_internal_metadata_); histo_.InternalSwap(&other->histo_); } @@ -681,11 +657,11 @@ PROTOBUF_NAMESPACE_OPEN template <> PROTOBUF_NOINLINE ::dqmstorepb::ROOTFilePB_Histo* Arena::CreateMaybeMessage<::dqmstorepb::ROOTFilePB_Histo>( Arena* arena) { - return Arena::CreateInternal<::dqmstorepb::ROOTFilePB_Histo>(arena); + return Arena::CreateMessageInternal<::dqmstorepb::ROOTFilePB_Histo>(arena); } template <> PROTOBUF_NOINLINE ::dqmstorepb::ROOTFilePB* Arena::CreateMaybeMessage<::dqmstorepb::ROOTFilePB>(Arena* arena) { - return Arena::CreateInternal<::dqmstorepb::ROOTFilePB>(arena); + return Arena::CreateMessageInternal<::dqmstorepb::ROOTFilePB>(arena); } PROTOBUF_NAMESPACE_CLOSE diff --git a/DQMServices/Core/src/ROOTFilePB.pb.h b/DQMServices/Core/src/ROOTFilePB.pb.h index 95515ba5c8463..38fedbc27e35c 100644 --- a/DQMServices/Core/src/ROOTFilePB.pb.h +++ b/DQMServices/Core/src/ROOTFilePB.pb.h @@ -8,12 +8,12 @@ #include #include -#if PROTOBUF_VERSION < 3011000 +#if PROTOBUF_VERSION < 3015000 #error This file was generated by a newer version of protoc which is #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 3011003 < PROTOBUF_MIN_PROTOC_VERSION +#if 3015001 < PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. @@ -25,8 +25,7 @@ #include #include #include -#include -#include +#include #include #include #include // IWYU pragma: export @@ -44,7 +43,7 @@ PROTOBUF_NAMESPACE_CLOSE // Internal implementation detail -- do not use these members. struct TableStruct_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto { static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[] PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[] PROTOBUF_SECTION_VARIABLE( + static const ::PROTOBUF_NAMESPACE_ID::internal::AuxiliaryParseTableField aux[] PROTOBUF_SECTION_VARIABLE( protodesc_cold); static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[2] PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[]; @@ -53,12 +52,14 @@ struct TableStruct_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto { }; extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto; +::PROTOBUF_NAMESPACE_ID::Metadata descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto_metadata_getter( + int index); namespace dqmstorepb { class ROOTFilePB; - class ROOTFilePBDefaultTypeInternal; + struct ROOTFilePBDefaultTypeInternal; extern ROOTFilePBDefaultTypeInternal _ROOTFilePB_default_instance_; class ROOTFilePB_Histo; - class ROOTFilePB_HistoDefaultTypeInternal; + struct ROOTFilePB_HistoDefaultTypeInternal; extern ROOTFilePB_HistoDefaultTypeInternal _ROOTFilePB_Histo_default_instance_; } // namespace dqmstorepb PROTOBUF_NAMESPACE_OPEN @@ -71,11 +72,13 @@ namespace dqmstorepb { // =================================================================== - class ROOTFilePB_Histo : public ::PROTOBUF_NAMESPACE_ID:: - Message /* @@protoc_insertion_point(class_definition:dqmstorepb.ROOTFilePB.Histo) */ { + class ROOTFilePB_Histo PROTOBUF_FINAL + : public ::PROTOBUF_NAMESPACE_ID:: + Message /* @@protoc_insertion_point(class_definition:dqmstorepb.ROOTFilePB.Histo) */ { public: - ROOTFilePB_Histo(); + inline ROOTFilePB_Histo() : ROOTFilePB_Histo(nullptr) {} ~ROOTFilePB_Histo() override; + explicit constexpr ROOTFilePB_Histo(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); ROOTFilePB_Histo(const ROOTFilePB_Histo& from); ROOTFilePB_Histo(ROOTFilePB_Histo&& from) noexcept : ROOTFilePB_Histo() { *this = ::std::move(from); } @@ -85,7 +88,7 @@ namespace dqmstorepb { return *this; } inline ROOTFilePB_Histo& operator=(ROOTFilePB_Histo&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { + if (GetArena() == from.GetArena()) { if (this != &from) InternalSwap(&from); } else { @@ -95,18 +98,17 @@ namespace dqmstorepb { } inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields(); + return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>( + ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); } inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields(); + return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); } static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { return GetDescriptor(); } static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { return GetMetadataStatic().descriptor; } static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { return GetMetadataStatic().reflection; } - static const ROOTFilePB_Histo& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY + static const ROOTFilePB_Histo& default_instance() { return *internal_default_instance(); } static inline const ROOTFilePB_Histo* internal_default_instance() { return reinterpret_cast(&_ROOTFilePB_Histo_default_instance_); } @@ -116,6 +118,16 @@ namespace dqmstorepb { inline void Swap(ROOTFilePB_Histo* other) { if (other == this) return; + if (GetArena() == other->GetArena()) { + InternalSwap(other); + } else { + ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(ROOTFilePB_Histo* other) { + if (other == this) + return; + GOOGLE_DCHECK(GetArena() == other->GetArena()); InternalSwap(other); } @@ -147,18 +159,19 @@ namespace dqmstorepb { friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { return "dqmstorepb.ROOTFilePB.Histo"; } + protected: + explicit ROOTFilePB_Histo(::PROTOBUF_NAMESPACE_ID::Arena* arena); + private: - inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const { return nullptr; } - inline void* MaybeArenaPtr() const { return nullptr; } + static void ArenaDtor(void* object); + inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena); public: ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; private: static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() { - ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors( - &::descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto); - return ::descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto.file_level_metadata[kIndexInFileMessages]; + return ::descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto_metadata_getter(kIndexInFileMessages); } public: @@ -257,7 +270,10 @@ namespace dqmstorepb { // helper for ByteSizeLong() size_t RequiredFieldsByteSizeFallback() const; - ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; + template + friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr full_pathname_; @@ -268,11 +284,12 @@ namespace dqmstorepb { }; // ------------------------------------------------------------------- - class ROOTFilePB + class ROOTFilePB PROTOBUF_FINAL : public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:dqmstorepb.ROOTFilePB) */ { public: - ROOTFilePB(); + inline ROOTFilePB() : ROOTFilePB(nullptr) {} ~ROOTFilePB() override; + explicit constexpr ROOTFilePB(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); ROOTFilePB(const ROOTFilePB& from); ROOTFilePB(ROOTFilePB&& from) noexcept : ROOTFilePB() { *this = ::std::move(from); } @@ -282,7 +299,7 @@ namespace dqmstorepb { return *this; } inline ROOTFilePB& operator=(ROOTFilePB&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { + if (GetArena() == from.GetArena()) { if (this != &from) InternalSwap(&from); } else { @@ -292,18 +309,17 @@ namespace dqmstorepb { } inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields(); + return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>( + ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); } inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields(); + return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); } static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { return GetDescriptor(); } static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { return GetMetadataStatic().descriptor; } static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { return GetMetadataStatic().reflection; } - static const ROOTFilePB& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY + static const ROOTFilePB& default_instance() { return *internal_default_instance(); } static inline const ROOTFilePB* internal_default_instance() { return reinterpret_cast(&_ROOTFilePB_default_instance_); } @@ -313,6 +329,16 @@ namespace dqmstorepb { inline void Swap(ROOTFilePB* other) { if (other == this) return; + if (GetArena() == other->GetArena()) { + InternalSwap(other); + } else { + ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(ROOTFilePB* other) { + if (other == this) + return; + GOOGLE_DCHECK(GetArena() == other->GetArena()); InternalSwap(other); } @@ -342,18 +368,19 @@ namespace dqmstorepb { friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { return "dqmstorepb.ROOTFilePB"; } + protected: + explicit ROOTFilePB(::PROTOBUF_NAMESPACE_ID::Arena* arena); + private: - inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const { return nullptr; } - inline void* MaybeArenaPtr() const { return nullptr; } + static void ArenaDtor(void* object); + inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena); public: ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; private: static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() { - ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors( - &::descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto); - return ::descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto.file_level_metadata[kIndexInFileMessages]; + return ::descriptor_table_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto_metadata_getter(kIndexInFileMessages); } public: @@ -390,10 +417,12 @@ namespace dqmstorepb { private: class _Internal; - ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; + template + friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<::dqmstorepb::ROOTFilePB_Histo> histo_; + mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; friend struct ::TableStruct_DQMServices_2fCore_2fsrc_2fROOTFilePB_2eproto; }; // =================================================================== @@ -413,7 +442,7 @@ namespace dqmstorepb { } inline bool ROOTFilePB_Histo::has_full_pathname() const { return _internal_has_full_pathname(); } inline void ROOTFilePB_Histo::clear_full_pathname() { - full_pathname_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); + full_pathname_.ClearToEmpty(); _has_bits_[0] &= ~0x00000001u; } inline const std::string& ROOTFilePB_Histo::full_pathname() const { @@ -428,31 +457,34 @@ namespace dqmstorepb { // @@protoc_insertion_point(field_mutable:dqmstorepb.ROOTFilePB.Histo.full_pathname) return _internal_mutable_full_pathname(); } - inline const std::string& ROOTFilePB_Histo::_internal_full_pathname() const { return full_pathname_.GetNoArena(); } + inline const std::string& ROOTFilePB_Histo::_internal_full_pathname() const { return full_pathname_.Get(); } inline void ROOTFilePB_Histo::_internal_set_full_pathname(const std::string& value) { _has_bits_[0] |= 0x00000001u; - full_pathname_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value); + full_pathname_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); } inline void ROOTFilePB_Histo::set_full_pathname(std::string&& value) { _has_bits_[0] |= 0x00000001u; - full_pathname_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + full_pathname_.Set( + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena()); // @@protoc_insertion_point(field_set_rvalue:dqmstorepb.ROOTFilePB.Histo.full_pathname) } inline void ROOTFilePB_Histo::set_full_pathname(const char* value) { GOOGLE_DCHECK(value != nullptr); _has_bits_[0] |= 0x00000001u; - full_pathname_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + full_pathname_.Set( + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena()); // @@protoc_insertion_point(field_set_char:dqmstorepb.ROOTFilePB.Histo.full_pathname) } inline void ROOTFilePB_Histo::set_full_pathname(const char* value, size_t size) { _has_bits_[0] |= 0x00000001u; - full_pathname_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); + full_pathname_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, + ::std::string(reinterpret_cast(value), size), + GetArena()); // @@protoc_insertion_point(field_set_pointer:dqmstorepb.ROOTFilePB.Histo.full_pathname) } inline std::string* ROOTFilePB_Histo::_internal_mutable_full_pathname() { _has_bits_[0] |= 0x00000001u; - return full_pathname_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); + return full_pathname_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); } inline std::string* ROOTFilePB_Histo::release_full_pathname() { // @@protoc_insertion_point(field_release:dqmstorepb.ROOTFilePB.Histo.full_pathname) @@ -460,7 +492,8 @@ namespace dqmstorepb { return nullptr; } _has_bits_[0] &= ~0x00000001u; - return full_pathname_.ReleaseNonDefaultNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); + return full_pathname_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), + GetArena()); } inline void ROOTFilePB_Histo::set_allocated_full_pathname(std::string* full_pathname) { if (full_pathname != nullptr) { @@ -468,8 +501,8 @@ namespace dqmstorepb { } else { _has_bits_[0] &= ~0x00000001u; } - full_pathname_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), - full_pathname); + full_pathname_.SetAllocated( + &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), full_pathname, GetArena()); // @@protoc_insertion_point(field_set_allocated:dqmstorepb.ROOTFilePB.Histo.full_pathname) } @@ -504,7 +537,7 @@ namespace dqmstorepb { } inline bool ROOTFilePB_Histo::has_streamed_histo() const { return _internal_has_streamed_histo(); } inline void ROOTFilePB_Histo::clear_streamed_histo() { - streamed_histo_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); + streamed_histo_.ClearToEmpty(); _has_bits_[0] &= ~0x00000002u; } inline const std::string& ROOTFilePB_Histo::streamed_histo() const { @@ -519,31 +552,34 @@ namespace dqmstorepb { // @@protoc_insertion_point(field_mutable:dqmstorepb.ROOTFilePB.Histo.streamed_histo) return _internal_mutable_streamed_histo(); } - inline const std::string& ROOTFilePB_Histo::_internal_streamed_histo() const { return streamed_histo_.GetNoArena(); } + inline const std::string& ROOTFilePB_Histo::_internal_streamed_histo() const { return streamed_histo_.Get(); } inline void ROOTFilePB_Histo::_internal_set_streamed_histo(const std::string& value) { _has_bits_[0] |= 0x00000002u; - streamed_histo_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value); + streamed_histo_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena()); } inline void ROOTFilePB_Histo::set_streamed_histo(std::string&& value) { _has_bits_[0] |= 0x00000002u; - streamed_histo_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + streamed_histo_.Set( + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena()); // @@protoc_insertion_point(field_set_rvalue:dqmstorepb.ROOTFilePB.Histo.streamed_histo) } inline void ROOTFilePB_Histo::set_streamed_histo(const char* value) { GOOGLE_DCHECK(value != nullptr); _has_bits_[0] |= 0x00000002u; - streamed_histo_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + streamed_histo_.Set( + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena()); // @@protoc_insertion_point(field_set_char:dqmstorepb.ROOTFilePB.Histo.streamed_histo) } inline void ROOTFilePB_Histo::set_streamed_histo(const void* value, size_t size) { _has_bits_[0] |= 0x00000002u; - streamed_histo_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); + streamed_histo_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, + ::std::string(reinterpret_cast(value), size), + GetArena()); // @@protoc_insertion_point(field_set_pointer:dqmstorepb.ROOTFilePB.Histo.streamed_histo) } inline std::string* ROOTFilePB_Histo::_internal_mutable_streamed_histo() { _has_bits_[0] |= 0x00000002u; - return streamed_histo_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); + return streamed_histo_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena()); } inline std::string* ROOTFilePB_Histo::release_streamed_histo() { // @@protoc_insertion_point(field_release:dqmstorepb.ROOTFilePB.Histo.streamed_histo) @@ -551,7 +587,8 @@ namespace dqmstorepb { return nullptr; } _has_bits_[0] &= ~0x00000002u; - return streamed_histo_.ReleaseNonDefaultNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); + return streamed_histo_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), + GetArena()); } inline void ROOTFilePB_Histo::set_allocated_streamed_histo(std::string* streamed_histo) { if (streamed_histo != nullptr) { @@ -559,8 +596,8 @@ namespace dqmstorepb { } else { _has_bits_[0] &= ~0x00000002u; } - streamed_histo_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), - streamed_histo); + streamed_histo_.SetAllocated( + &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), streamed_histo, GetArena()); // @@protoc_insertion_point(field_set_allocated:dqmstorepb.ROOTFilePB.Histo.streamed_histo) } diff --git a/DQMServices/FwkIO/plugins/BuildFile.xml b/DQMServices/FwkIO/plugins/BuildFile.xml index 2264ed1a722eb..0bf336d164e73 100644 --- a/DQMServices/FwkIO/plugins/BuildFile.xml +++ b/DQMServices/FwkIO/plugins/BuildFile.xml @@ -7,7 +7,6 @@ - diff --git a/DQMServices/FwkIO/plugins/DQMRootOutputModule.cc b/DQMServices/FwkIO/plugins/DQMRootOutputModule.cc index 59e5522e244b3..2d6257b28a3f7 100644 --- a/DQMServices/FwkIO/plugins/DQMRootOutputModule.cc +++ b/DQMServices/FwkIO/plugins/DQMRootOutputModule.cc @@ -20,7 +20,6 @@ #include #include -#include #include "TFile.h" #include "TTree.h" #include "TString.h" diff --git a/DQMServices/StreamerIO/plugins/DQMFileIterator.cc b/DQMServices/StreamerIO/plugins/DQMFileIterator.cc index 7737bfd7fa345..864ba0b15173a 100644 --- a/DQMServices/StreamerIO/plugins/DQMFileIterator.cc +++ b/DQMServices/StreamerIO/plugins/DQMFileIterator.cc @@ -5,7 +5,6 @@ #include #include -#include #include #include #include @@ -95,7 +94,7 @@ namespace dqmservices { std::vector tokens; boost::split(tokens, runInputDir_, boost::is_any_of(":")); - for (auto token : tokens) { + for (const auto& token : tokens) { runPath_.push_back(fmt::sprintf("%s/run%06d", token, runNumber_)); } @@ -183,7 +182,7 @@ namespace dqmservices { unsigned DQMFileIterator::mtimeHash() const { unsigned mtime_now = 0; - for (auto path : runPath_) { + for (const auto& path : runPath_) { if (!std::filesystem::exists(path)) continue; @@ -225,7 +224,7 @@ namespace dqmservices { std::string fn_eor; - for (auto runPath : runPath_) { + for (const auto& runPath : runPath_) { if (!std::filesystem::exists(runPath)) { logFileAction("Directory does not exist: ", runPath); diff --git a/DQMServices/StreamerIO/plugins/RamdiskMonitor.cc b/DQMServices/StreamerIO/plugins/RamdiskMonitor.cc index 547d949f62bd5..3b6c2fcbe18a7 100644 --- a/DQMServices/StreamerIO/plugins/RamdiskMonitor.cc +++ b/DQMServices/StreamerIO/plugins/RamdiskMonitor.cc @@ -5,7 +5,6 @@ #include #include -#include #include #include diff --git a/DataFormats/Alignment/BuildFile.xml b/DataFormats/Alignment/BuildFile.xml index 7b654617c980f..2114ee0ec721b 100644 --- a/DataFormats/Alignment/BuildFile.xml +++ b/DataFormats/Alignment/BuildFile.xml @@ -2,6 +2,9 @@ + + + diff --git a/DataFormats/BTauReco/BuildFile.xml b/DataFormats/BTauReco/BuildFile.xml index d61fb0cdf68fa..8dcec2898d265 100644 --- a/DataFormats/BTauReco/BuildFile.xml +++ b/DataFormats/BTauReco/BuildFile.xml @@ -5,6 +5,10 @@ + + + + diff --git a/DataFormats/BeamSpot/BuildFile.xml b/DataFormats/BeamSpot/BuildFile.xml index 2e6117fdaf79c..aa43b789310ee 100644 --- a/DataFormats/BeamSpot/BuildFile.xml +++ b/DataFormats/BeamSpot/BuildFile.xml @@ -1,5 +1,7 @@ + + diff --git a/DataFormats/CLHEP/interface/Migration.h b/DataFormats/CLHEP/interface/Migration.h index 08b60160a3407..0a437898ceee8 100644 --- a/DataFormats/CLHEP/interface/Migration.h +++ b/DataFormats/CLHEP/interface/Migration.h @@ -8,6 +8,7 @@ #include "CLHEP/Matrix/SymMatrix.h" #include +#include /* template diff --git a/DataFormats/CSCDigi/BuildFile.xml b/DataFormats/CSCDigi/BuildFile.xml index d6439ed232394..dfa1171462466 100644 --- a/DataFormats/CSCDigi/BuildFile.xml +++ b/DataFormats/CSCDigi/BuildFile.xml @@ -1,6 +1,8 @@ + + diff --git a/DataFormats/CSCDigi/src/CSCComparatorDigi.cc b/DataFormats/CSCDigi/src/CSCComparatorDigi.cc index adbc5f213b54c..6fba526c4915e 100644 --- a/DataFormats/CSCDigi/src/CSCComparatorDigi.cc +++ b/DataFormats/CSCDigi/src/CSCComparatorDigi.cc @@ -95,14 +95,13 @@ void CSCComparatorDigi::print() const { std::ostringstream ost; ost << "CSCComparatorDigi | strip " << getStrip() << " | comparator " << getComparator() << " | first time bin " << getTimeBin() << " | time bins on "; - std::vector tbins = getTimeBinsOn(); - for (unsigned int i = 0; i < tbins.size(); i++) { - ost << tbins[i] << " "; - } + std::copy(getTimeBinsOn().begin(), getTimeBinsOn().end(), std::ostream_iterator(ost, " ")); edm::LogVerbatim("CSCDigi") << ost.str(); } -//@@ Doesn't print all time bins std::ostream& operator<<(std::ostream& o, const CSCComparatorDigi& digi) { - return o << " " << digi.getStrip() << " " << digi.getComparator() << " " << digi.getTimeBin(); + o << "CSCComparatorDigi Strip:" << digi.getStrip() << ", Comparator: " << digi.getComparator() + << ", First Time Bin On: " << digi.getTimeBin() << ", Time Bins On: "; + std::copy(digi.getTimeBinsOn().begin(), digi.getTimeBinsOn().end(), std::ostream_iterator(o, " ")); + return o; } diff --git a/DataFormats/CSCDigi/src/CSCWireDigi.cc b/DataFormats/CSCDigi/src/CSCWireDigi.cc index 81d92880721e4..1799d4a494a20 100644 --- a/DataFormats/CSCDigi/src/CSCWireDigi.cc +++ b/DataFormats/CSCDigi/src/CSCWireDigi.cc @@ -67,18 +67,12 @@ void CSCWireDigi::print() const { << " BX # " << getWireGroupBX() << " | " << " BX + Wire " << std::hex << getBXandWireGroup() << " | " << std::dec << " First Time Bin On " << getTimeBin() << " | Time Bins On "; - std::vector tbins = getTimeBinsOn(); - for (unsigned int i = 0; i < tbins.size(); i++) { - ost << tbins[i] << " "; - } + std::copy(getTimeBinsOn().begin(), getTimeBinsOn().end(), std::ostream_iterator(ost, " ")); edm::LogVerbatim("CSCDigi") << ost.str(); } std::ostream& operator<<(std::ostream& o, const CSCWireDigi& digi) { - o << " CSC Wire " << digi.getWireGroup() << " CSC Wire First Time Bin On " << digi.getTimeBin() - << " CSC Time Bins On "; - for (unsigned int i = 0; i < digi.getTimeBinsOn().size(); ++i) { - o << " " << digi.getTimeBinsOn()[i]; - } + o << " CSCWireDigi wg: " << digi.getWireGroup() << ", First Time Bin On: " << digi.getTimeBin() << ", Time Bins On: "; + std::copy(digi.getTimeBinsOn().begin(), digi.getTimeBinsOn().end(), std::ostream_iterator(o, " ")); return o; } diff --git a/DataFormats/CTPPSDetId/BuildFile.xml b/DataFormats/CTPPSDetId/BuildFile.xml index 5a1d1280da478..7b963c0dd3077 100644 --- a/DataFormats/CTPPSDetId/BuildFile.xml +++ b/DataFormats/CTPPSDetId/BuildFile.xml @@ -1,4 +1,5 @@ + diff --git a/DataFormats/CTPPSDetId/interface/CTPPSDetId.h b/DataFormats/CTPPSDetId/interface/CTPPSDetId.h index e2753e74f8e48..fa3a4be55be84 100644 --- a/DataFormats/CTPPSDetId/interface/CTPPSDetId.h +++ b/DataFormats/CTPPSDetId/interface/CTPPSDetId.h @@ -153,4 +153,13 @@ class CTPPSDetId : public DetId { std::ostream &operator<<(std::ostream &os, const CTPPSDetId &id); +namespace std { + template <> + struct hash { + typedef CTPPSDetId argument_type; + typedef std::size_t result_type; + result_type operator()(const argument_type &id) const noexcept { return std::hash()(id.rawId()); } + }; +} // namespace std + #endif diff --git a/DataFormats/CTPPSDigi/BuildFile.xml b/DataFormats/CTPPSDigi/BuildFile.xml index 7c537d9ebb995..38b45babc72b0 100644 --- a/DataFormats/CTPPSDigi/BuildFile.xml +++ b/DataFormats/CTPPSDigi/BuildFile.xml @@ -1,4 +1,5 @@ + diff --git a/DataFormats/CTPPSReco/BuildFile.xml b/DataFormats/CTPPSReco/BuildFile.xml index 41320fa24a34d..10ada3e092459 100644 --- a/DataFormats/CTPPSReco/BuildFile.xml +++ b/DataFormats/CTPPSReco/BuildFile.xml @@ -2,6 +2,8 @@ + + diff --git a/DataFormats/CaloRecHit/BuildFile.xml b/DataFormats/CaloRecHit/BuildFile.xml index 3a36baafe8b01..135aabf10cd07 100644 --- a/DataFormats/CaloRecHit/BuildFile.xml +++ b/DataFormats/CaloRecHit/BuildFile.xml @@ -1,6 +1,7 @@ + diff --git a/DataFormats/CaloRecHit/interface/MultifitComputations.h b/DataFormats/CaloRecHit/interface/MultifitComputations.h index 019f86d11e92b..f2d57d2ddb1e7 100644 --- a/DataFormats/CaloRecHit/interface/MultifitComputations.h +++ b/DataFormats/CaloRecHit/interface/MultifitComputations.h @@ -7,6 +7,8 @@ #include +#include "FWCore/Utilities/interface/CMSUnrollLoop.h" + namespace calo { namespace multifit { @@ -73,7 +75,7 @@ namespace calo { L(0, 0) = sqrtm_0_0; using T = typename MatrixType1::base_type; -#pragma unroll + CMS_UNROLL_LOOP for (int i = 1; i < MatrixType1::stride; i++) { T sumsq{0}; for (int j = 0; j < i; j++) { @@ -199,13 +201,13 @@ namespace calo { constexpr auto NPULSES = MatrixType2::ColsAtCompileTime; constexpr auto NSAMPLES = MatrixType2::RowsAtCompileTime; -#pragma unroll + CMS_UNROLL_LOOP for (int icol = 0; icol < NPULSES; icol++) { float reg_b[NSAMPLES]; float reg_L[NSAMPLES]; -// preload a column and load column 0 of cholesky -#pragma unroll + // preload a column and load column 0 of cholesky + CMS_UNROLL_LOOP for (int i = 0; i < NSAMPLES; i++) { #ifdef __CUDA_ARCH__ // load through the read-only cache @@ -220,16 +222,16 @@ namespace calo { auto x_prev = reg_b[0] / reg_L[0]; A(0, icol) = x_prev; -// iterate -#pragma unroll + // iterate + CMS_UNROLL_LOOP for (int iL = 1; iL < NSAMPLES; iL++) { -// update accum -#pragma unroll + // update accum + CMS_UNROLL_LOOP for (int counter = iL; counter < NSAMPLES; counter++) reg_b[counter] -= x_prev * reg_L[counter]; -// load the next column of cholesky -#pragma unroll + // load the next column of cholesky + CMS_UNROLL_LOOP for (int counter = iL; counter < NSAMPLES; counter++) reg_L[counter] = matrixL(counter, iL); @@ -251,8 +253,8 @@ namespace calo { float reg_b_tmp[NSAMPLES]; float reg_L[NSAMPLES]; -// preload a column and load column 0 of cholesky -#pragma unroll + // preload a column and load column 0 of cholesky + CMS_UNROLL_LOOP for (int i = 0; i < NSAMPLES; i++) { reg_b_tmp[i] = inputAmplitudesView(i); reg_L[i] = matrixL(i, 0); @@ -262,16 +264,16 @@ namespace calo { auto x_prev = reg_b_tmp[0] / reg_L[0]; reg_b[0] = x_prev; -// iterate -#pragma unroll + // iterate + CMS_UNROLL_LOOP for (int iL = 1; iL < NSAMPLES; iL++) { -// update accum -#pragma unroll + // update accum + CMS_UNROLL_LOOP for (int counter = iL; counter < NSAMPLES; counter++) reg_b_tmp[counter] -= x_prev * reg_L[counter]; -// load the next column of cholesky -#pragma unroll + // load the next column of cholesky + CMS_UNROLL_LOOP for (int counter = iL; counter < NSAMPLES; counter++) reg_L[counter] = matrixL(counter, iL); @@ -300,13 +302,13 @@ namespace calo { float results[NPULSES]; // preload results and permute according to the pulse offsets /////////////// ??? this is not done in ECAL -#pragma unroll + CMS_UNROLL_LOOP for (int counter = 0; counter < NPULSES; counter++) { results[counter] = resultAmplitudesVector[counter]; } // load accum -#pragma unroll + CMS_UNROLL_LOOP for (int counter = 0; counter < NSAMPLES; counter++) accum[counter] = -inputAmplitudesView(counter); @@ -315,7 +317,7 @@ namespace calo { float pm_col[NSAMPLES]; // preload a column of pulse matrix -#pragma unroll + CMS_UNROLL_LOOP for (int counter = 0; counter < NSAMPLES; counter++) #ifdef __CUDA_ARCH__ pm_col[counter] = __ldg(&pulseMatrixView.coeffRef(counter, icol)); @@ -323,8 +325,8 @@ namespace calo { pm_col[counter] = pulseMatrixView.coeffRef(counter, icol); #endif - // accum -#pragma unroll + // accum + CMS_UNROLL_LOOP for (int counter = 0; counter < NSAMPLES; counter++) accum[counter] += results[icol] * pm_col[counter]; } @@ -342,7 +344,7 @@ namespace calo { float accumSum = 0; // preload a column and load column 0 of cholesky -#pragma unroll + CMS_UNROLL_LOOP for (int i = 0; i < NSAMPLES; i++) { reg_L[i] = matrixL(i, 0); } @@ -352,15 +354,15 @@ namespace calo { accumSum += x_prev * x_prev; // iterate -#pragma unroll + CMS_UNROLL_LOOP for (int iL = 1; iL < NSAMPLES; iL++) { // update accum -#pragma unroll + CMS_UNROLL_LOOP for (int counter = iL; counter < NSAMPLES; counter++) accum[counter] -= x_prev * reg_L[counter]; - // load the next column of cholesky -#pragma unroll + // load the next column of cholesky + CMS_UNROLL_LOOP for (int counter = iL; counter < NSAMPLES; counter++) reg_L[counter] = matrixL(counter, iL); @@ -417,7 +419,7 @@ namespace calo { auto const icol_real = pulseOffsets(icol); auto const atb = Atb(icol_real); float sum = 0; -#pragma unroll + CMS_UNROLL_LOOP for (int counter = 0; counter < NPULSES; counter++) sum += counter > icol_real ? AtA(counter, icol_real) * solution(counter) : AtA(icol_real, counter) * solution(counter); diff --git a/DataFormats/CastorReco/BuildFile.xml b/DataFormats/CastorReco/BuildFile.xml index 6b20714cdb249..f8590afedc96d 100644 --- a/DataFormats/CastorReco/BuildFile.xml +++ b/DataFormats/CastorReco/BuildFile.xml @@ -1,6 +1,7 @@ + diff --git a/DataFormats/Common/interface/ELseverityLevel.h b/DataFormats/Common/interface/ELseverityLevel.h new file mode 100644 index 0000000000000..012b4124259a0 --- /dev/null +++ b/DataFormats/Common/interface/ELseverityLevel.h @@ -0,0 +1,125 @@ +#ifndef DataFormats_Common_ELseverityLevel_h +#define DataFormats_Common_ELseverityLevel_h + +// ---------------------------------------------------------------------- +// +// ELseverityLevel.h - declare objects that encode a message's urgency +// +// Both frameworker and user will often pass one of the +// instantiated severity levels to logger methods. +// +// The only other methods of ELseverityLevel a frameworker +// might use is to check the relative level of two severities +// using operator< or the like. +// +// ---------------------------------------------------------------------- + +#include +#include + +namespace edm { + + // ---------------------------------------------------------------------- + // ELseverityLevel: + // ---------------------------------------------------------------------- + + class ELseverityLevel { + public: + // --- One ELseverityLevel is globally instantiated (see below) + // --- for each of the following levels: + // + enum ELsev_ { + ELsev_noValueAssigned = 0, // default returned by map when not found + ELsev_zeroSeverity, // threshold use only + ELsev_success, // report reaching a milestone + ELsev_info, // information + ELsev_fwkInfo, // framework + ELsev_warning, // warning + ELsev_error, // error detected + ELsev_unspecified, // severity was not specified + ELsev_severe, // future results are suspect + ELsev_highestSeverity, // threshold use only + // ----- + nLevels // how many levels? + }; // ELsev_ + + // ----- Birth/death: + // + constexpr ELseverityLevel(ELsev_ lev = ELsev_unspecified) noexcept : myLevel(lev) {} + constexpr ELseverityLevel(int lev) noexcept : myLevel(lev) { + assert(lev >= ELsev_noValueAssigned); + assert(lev < nLevels); + } + ~ELseverityLevel() noexcept = default; + constexpr ELseverityLevel(const ELseverityLevel&) noexcept = default; + constexpr ELseverityLevel(ELseverityLevel&&) noexcept = default; + constexpr ELseverityLevel& operator=(const ELseverityLevel&) noexcept = default; + constexpr ELseverityLevel& operator=(ELseverityLevel&&) noexcept = default; + + // ----- Comparator: + // + [[nodiscard]] constexpr int cmp(ELseverityLevel const& e) const noexcept { return myLevel - e.myLevel; } + + // ----- Accessors: + // + constexpr int getLevel() const noexcept { return myLevel; } + std::string_view getName() const noexcept; + + private: + // Data per ELseverityLevel object: + // + int myLevel; + + }; // ELseverityLevel + + // ---------------------------------------------------------------------- + // Declare the globally available severity objects, + // one generator function and one proxy per non-default ELsev_: + // ---------------------------------------------------------------------- + + constexpr const ELseverityLevel ELzeroSeverity{ELseverityLevel::ELsev_zeroSeverity}; + + constexpr const ELseverityLevel ELdebug{ELseverityLevel::ELsev_success}; + + constexpr const ELseverityLevel ELinfo{ELseverityLevel::ELsev_info}; + + constexpr const ELseverityLevel ELfwkInfo{ELseverityLevel::ELsev_fwkInfo}; + + constexpr const ELseverityLevel ELwarning{ELseverityLevel::ELsev_warning}; + + constexpr const ELseverityLevel ELerror{ELseverityLevel::ELsev_error}; + + constexpr const ELseverityLevel ELunspecified{ELseverityLevel::ELsev_unspecified}; + + constexpr const ELseverityLevel ELsevere{ELseverityLevel::ELsev_severe}; + + constexpr const ELseverityLevel ELhighestSeverity{ELseverityLevel::ELsev_highestSeverity}; + + // ---------------------------------------------------------------------- + // Comparators: + // ---------------------------------------------------------------------- + + constexpr inline bool operator==(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { + return e1.cmp(e2) == 0; + } + constexpr inline bool operator!=(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { + return e1.cmp(e2) != 0; + } + constexpr inline bool operator<(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { + return e1.cmp(e2) < 0; + } + constexpr inline bool operator<=(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { + return e1.cmp(e2) <= 0; + } + constexpr inline bool operator>(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { + return e1.cmp(e2) > 0; + } + constexpr inline bool operator>=(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { + return e1.cmp(e2) >= 0; + } + + // ---------------------------------------------------------------------- + +} // end of namespace edm + +#endif // DataFormats_Common_ELseverityLevel_h diff --git a/DataFormats/Common/interface/ErrorSummaryEntry.h b/DataFormats/Common/interface/ErrorSummaryEntry.h new file mode 100644 index 0000000000000..e99615b0919ae --- /dev/null +++ b/DataFormats/Common/interface/ErrorSummaryEntry.h @@ -0,0 +1,67 @@ +#ifndef DataFormats_Common_ErrorSummaryEntry_h +#define DataFormats_Common_ErrorSummaryEntry_h + +#include "DataFormats/Common/interface/ELseverityLevel.h" + +#include + +// ---------------------------------------------------------------------- +// +// ErrorSummaryEntry.h - Structure to hold summary of a warning or error +// message issued in an event. +// +// Usage: +// if (edm::FreshErrorsExist()) { +// std::vector(edm::ErrorSummaryEntry es = edm::LoggedErrorsSummary(); +// package_as_product_in_the_event (es); +// } +// +// edm::ErrorSummaryEntry is a very simple struct, containing only strings +// and an int; it is very suitable for inclusion in the event. +// +// Unusual C++ practice warning: +// edm::ErrorSummaryEntry is a simple struct; its members are public and +// are accessed directly rather than through accessor functions. Thus it +// **is reasonable** in this case to treat the code defining the +// edm::ErrorSummaryEntry as documentation of how to use it. +// +// 20-Aug-2008 mf Created file. +// +// 22-Jun-2009 mf Added severity to the structure. This adds just one +// integer to the memory used. +// +// ---------------------------------------------------------------------- + +namespace edm { + struct ErrorSummaryEntry { + std::string category; + std::string module; + ELseverityLevel severity; + unsigned int count; + ErrorSummaryEntry(std::string const& cat, std::string const& mod, ELseverityLevel sev, unsigned int cnt = 0) + : category(cat), module(mod), severity(sev), count(cnt) {} + ErrorSummaryEntry() : category(), module(), severity(), count(0) {} + bool operator<(ErrorSummaryEntry const& rhs) const { + if (category < rhs.category) + return true; + if (category > rhs.category) + return false; + if (module < rhs.module) + return true; + if (module > rhs.module) + return false; + if (severity < rhs.severity) + return true; + if (severity > rhs.severity) + return false; + if (count < rhs.count) + return true; + return false; + } + bool operator==(ErrorSummaryEntry const& rhs) const { + return ((category < rhs.category) && (module < rhs.module) && (severity < rhs.severity) && (count < rhs.count)); + } + }; +} // end of namespace edm + +#endif // DataFormats_Common_ErrorSummaryEntry_h diff --git a/DataFormats/Common/src/ELseverityLevel.cc b/DataFormats/Common/src/ELseverityLevel.cc new file mode 100644 index 0000000000000..8f38d3bbe869d --- /dev/null +++ b/DataFormats/Common/src/ELseverityLevel.cc @@ -0,0 +1,41 @@ +// -*- C++ -*- +// +// Package: DataFormats/Common +// Class : ELseverityLevel +// +// Implementation: +// [Notes on implementation] +// +// Original Author: Christopher Jones +// Created: Wed, 20 Jan 2021 15:39:12 GMT +// + +// system include files +#include +#include + +// user include files +#include "DataFormats/Common/interface/ELseverityLevel.h" + +namespace edm { + + std::string_view ELseverityLevel::getName() const noexcept { + static const auto names = []() { + std::array ret; + ret[ELsev_noValueAssigned] = "?no value?"; + ret[ELsev_zeroSeverity] = "--"; + ret[ELsev_success] = "Debug"; + ret[ELsev_info] = "Info"; + ret[ELsev_fwkInfo] = "FwkInfo"; + ret[ELsev_warning] = "Warning"; + ret[ELsev_error] = "Error"; + ret[ELsev_unspecified] = "??"; + ret[ELsev_severe] = "System"; + ret[ELsev_highestSeverity] = "!!"; + return ret; + }(); + + assert(myLevel < nLevels); + return names[myLevel]; + } +} // namespace edm diff --git a/DataFormats/Common/src/classes.h b/DataFormats/Common/src/classes.h index cd7dae11e11fc..550eff270bcbf 100644 --- a/DataFormats/Common/src/classes.h +++ b/DataFormats/Common/src/classes.h @@ -32,7 +32,7 @@ #include "DataFormats/Provenance/interface/EventAuxiliary.h" #include "DataFormats/Provenance/interface/ParameterSetBlob.h" #include "DataFormats/Provenance/interface/ParameterSetID.h" -#include "FWCore/MessageLogger/interface/ErrorSummaryEntry.h" +#include "DataFormats/Common/interface/ErrorSummaryEntry.h" #include "DataFormats/Common/interface/RandomNumberGeneratorState.h" #include diff --git a/DataFormats/Common/src/classes_def.xml b/DataFormats/Common/src/classes_def.xml index 5706a8dff0c74..82c7ac6170501 100644 --- a/DataFormats/Common/src/classes_def.xml +++ b/DataFormats/Common/src/classes_def.xml @@ -151,14 +151,23 @@ + + + + + + + + + diff --git a/DataFormats/DTDigi/BuildFile.xml b/DataFormats/DTDigi/BuildFile.xml index 3ecf2c4947ccc..6733c6fb10838 100644 --- a/DataFormats/DTDigi/BuildFile.xml +++ b/DataFormats/DTDigi/BuildFile.xml @@ -1,6 +1,8 @@ + + diff --git a/DataFormats/MuonData/src/DTDriftTimeParameters.icc b/DataFormats/DTRecHit/interface/DTDriftTimeParameters.icc similarity index 100% rename from DataFormats/MuonData/src/DTDriftTimeParameters.icc rename to DataFormats/DTRecHit/interface/DTDriftTimeParameters.icc diff --git a/DataFormats/EcalDigi/BuildFile.xml b/DataFormats/EcalDigi/BuildFile.xml index 5b1ead14f9466..7e3d70b84fbdd 100644 --- a/DataFormats/EcalDigi/BuildFile.xml +++ b/DataFormats/EcalDigi/BuildFile.xml @@ -1,5 +1,8 @@ + + + diff --git a/DataFormats/EcalRecHit/BuildFile.xml b/DataFormats/EcalRecHit/BuildFile.xml index 3b88044dd0ce9..e38ee48a95bed 100644 --- a/DataFormats/EcalRecHit/BuildFile.xml +++ b/DataFormats/EcalRecHit/BuildFile.xml @@ -2,6 +2,8 @@ + + diff --git a/DataFormats/EgammaCandidates/BuildFile.xml b/DataFormats/EgammaCandidates/BuildFile.xml index 3b9adcd56ab88..673252ed2d9fb 100644 --- a/DataFormats/EgammaCandidates/BuildFile.xml +++ b/DataFormats/EgammaCandidates/BuildFile.xml @@ -13,6 +13,7 @@ + diff --git a/DataFormats/EgammaCandidates/interface/GsfElectron.h b/DataFormats/EgammaCandidates/interface/GsfElectron.h index 00924571c4772..7e98ad1834645 100644 --- a/DataFormats/EgammaCandidates/interface/GsfElectron.h +++ b/DataFormats/EgammaCandidates/interface/GsfElectron.h @@ -15,7 +15,6 @@ //#include "DataFormats/Math/interface/LorentzVector.h" #include "DataFormats/GeometryVector/interface/GlobalPoint.h" #include "DataFormats/GeometryVector/interface/GlobalVector.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include @@ -680,8 +679,7 @@ namespace reco { bool passingPflowPreselection() const { return passPflowPreselection_; } bool ambiguous() const { return ambiguous_; } GsfTrackRefVector::size_type ambiguousGsfTracksSize() const { return ambiguousGsfTracks_.size(); } - GsfTrackRefVector::const_iterator ambiguousGsfTracksBegin() const { return ambiguousGsfTracks_.begin(); } - GsfTrackRefVector::const_iterator ambiguousGsfTracksEnd() const { return ambiguousGsfTracks_.end(); } + auto const &ambiguousGsfTracks() const { return ambiguousGsfTracks_; } // setters void setPassCutBasedPreselection(bool flag) { passCutBasedPreselection_ = flag; } diff --git a/DataFormats/EgammaCandidates/interface/GsfElectronCore.h b/DataFormats/EgammaCandidates/interface/GsfElectronCore.h index 1be3d3f0942c6..7589efd89f537 100644 --- a/DataFormats/EgammaCandidates/interface/GsfElectronCore.h +++ b/DataFormats/EgammaCandidates/interface/GsfElectronCore.h @@ -2,7 +2,6 @@ #define GsfElectronCore_h #include "DataFormats/EgammaCandidates/interface/GsfElectronCoreFwd.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" diff --git a/DataFormats/EgammaCandidates/src/GsfElectronCore.cc b/DataFormats/EgammaCandidates/src/GsfElectronCore.cc index f871b3d5235cf..2c00d937ad42a 100644 --- a/DataFormats/EgammaCandidates/src/GsfElectronCore.cc +++ b/DataFormats/EgammaCandidates/src/GsfElectronCore.cc @@ -3,6 +3,7 @@ #include "DataFormats/GsfTrackReco/interface/GsfTrack.h" #include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" #include "DataFormats/EgammaReco/interface/ElectronSeed.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include diff --git a/DataFormats/EgammaCandidates/src/classes.h b/DataFormats/EgammaCandidates/src/classes.h index a2af7aee40dec..acfeb6e0a30c4 100644 --- a/DataFormats/EgammaCandidates/src/classes.h +++ b/DataFormats/EgammaCandidates/src/classes.h @@ -1,6 +1,5 @@ // // -#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/EgammaCandidates/interface/Photon.h" #include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" #include "DataFormats/EgammaCandidates/interface/PhotonCore.h" diff --git a/DataFormats/EgammaReco/BuildFile.xml b/DataFormats/EgammaReco/BuildFile.xml index 98b3ad34f1141..993fe380a5352 100644 --- a/DataFormats/EgammaReco/BuildFile.xml +++ b/DataFormats/EgammaReco/BuildFile.xml @@ -5,6 +5,9 @@ + + + diff --git a/DataFormats/EgammaTrackReco/BuildFile.xml b/DataFormats/EgammaTrackReco/BuildFile.xml index 9afb2bb325833..6a0ffe9b8340f 100644 --- a/DataFormats/EgammaTrackReco/BuildFile.xml +++ b/DataFormats/EgammaTrackReco/BuildFile.xml @@ -4,6 +4,7 @@ + diff --git a/DataFormats/FEDRawData/interface/FEDNumbering.h b/DataFormats/FEDRawData/interface/FEDNumbering.h index d819b780f5dee..acfcb08d13626 100644 --- a/DataFormats/FEDRawData/interface/FEDNumbering.h +++ b/DataFormats/FEDRawData/interface/FEDNumbering.h @@ -121,9 +121,9 @@ class FEDNumbering { MINCTPPSPixelsFEDID = 1462, MAXCTPPSPixelsFEDID = 1466, MINGEMFEDID = 1467, - MAXGEMFEDID = 1472, - MINME0FEDID = 1473, - MAXME0FEDID = 1478, + MINGE0FEDID = 1473, + MINGE21FEDID = 1469, + MAXGEMFEDID = 1478, MINDAQvFEDFEDID = 2815, MAXDAQvFEDFEDID = 4095 }; diff --git a/DataFormats/FP420Cluster/BuildFile.xml b/DataFormats/FP420Cluster/BuildFile.xml index 7c537d9ebb995..b8bd3c7e515f2 100644 --- a/DataFormats/FP420Cluster/BuildFile.xml +++ b/DataFormats/FP420Cluster/BuildFile.xml @@ -1,4 +1,5 @@ + diff --git a/DataFormats/FTLDigi/BuildFile.xml b/DataFormats/FTLDigi/BuildFile.xml index 15d7f7b3264a8..27ab1f668924d 100644 --- a/DataFormats/FTLDigi/BuildFile.xml +++ b/DataFormats/FTLDigi/BuildFile.xml @@ -1,5 +1,6 @@ + diff --git a/DataFormats/ForwardDetId/interface/HGCScintillatorDetId.h b/DataFormats/ForwardDetId/interface/HGCScintillatorDetId.h index 431b46d573269..5ef34fb633f99 100644 --- a/DataFormats/ForwardDetId/interface/HGCScintillatorDetId.h +++ b/DataFormats/ForwardDetId/interface/HGCScintillatorDetId.h @@ -8,7 +8,7 @@ /* \brief description of the bit assigment [0:8] iphi index wrt x-axis on +z side - [9:16] |radius| index (starting from a minimum radius depending on type) + [9:16] |ring| index (starting from a minimum radius depending on type) [17:21] Layer # [22] Trigger(1)/Detector(0) cell [23] SiPM type (0 for 2mm: 1 for 4mm) @@ -27,7 +27,7 @@ class HGCScintillatorDetId : public DetId { /** Create cellid from raw id (0=invalid tower id) */ HGCScintillatorDetId(uint32_t rawid); /** Constructor from subdetector, zplus, layer, module, cell numbers */ - HGCScintillatorDetId(int type, int layer, int iradius, int iphi, bool trigger = false, int sipm = 0); + HGCScintillatorDetId(int type, int layer, int ring, int iphi, bool trigger = false, int sipm = 0); /** Constructor from a generic cell id */ HGCScintillatorDetId(const DetId& id); /** Assignment from a generic cell id */ @@ -50,15 +50,16 @@ class HGCScintillatorDetId : public DetId { int layer() const { return (id_ >> kHGCalLayerOffset) & kHGCalLayerMask; } /// get the eta index - int iradiusAbs() const; - int iradius() const { return zside() * iradiusAbs(); } - int ietaAbs() const { return iradiusAbs(); } - int ieta() const { return zside() * ietaAbs(); } + int ring() const; + int iradiusAbs() const { return ring(); } + int iradius() const { return zside() * ring(); } + int ietaAbs() const { return ring(); } + int ieta() const { return zside() * ring(); } /// get the phi index int iphi() const; std::pair ietaphi() const { return std::pair(ieta(), iphi()); } - std::pair iradiusphi() const { return std::pair(iradius(), iphi()); } + std::pair ringphi() const { return std::pair(iradius(), iphi()); } /// get/set the sipm size int sipm() const { return (id_ >> kHGCalSiPMOffset) & kHGCalSiPMMask; } diff --git a/DataFormats/ForwardDetId/src/HGCScintillatorDetId.cc b/DataFormats/ForwardDetId/src/HGCScintillatorDetId.cc index 7b8302e0fcfaa..60afb5fd2a873 100644 --- a/DataFormats/ForwardDetId/src/HGCScintillatorDetId.cc +++ b/DataFormats/ForwardDetId/src/HGCScintillatorDetId.cc @@ -9,14 +9,14 @@ HGCScintillatorDetId::HGCScintillatorDetId() : DetId() {} HGCScintillatorDetId::HGCScintillatorDetId(uint32_t rawid) : DetId(rawid) {} -HGCScintillatorDetId::HGCScintillatorDetId(int type, int layer, int radius, int phi, bool trigger, int sipm) +HGCScintillatorDetId::HGCScintillatorDetId(int type, int layer, int ring, int phi, bool trigger, int sipm) : DetId(HGCalHSc, ForwardEmpty) { - int zside = (radius < 0) ? 1 : 0; + int zside = (ring < 0) ? 1 : 0; int itrig = trigger ? 1 : 0; - int radiusAbs = std::abs(radius); + int ringAbs = std::abs(ring); id_ |= (((type & kHGCalTypeMask) << kHGCalTypeOffset) | ((zside & kHGCalZsideMask) << kHGCalZsideOffset) | ((sipm & kHGCalSiPMMask) << kHGCalSiPMOffset) | ((itrig & kHGCalTriggerMask) << kHGCalTriggerOffset) | - ((layer & kHGCalLayerMask) << kHGCalLayerOffset) | ((radiusAbs & kHGCalRadiusMask) << kHGCalRadiusOffset) | + ((layer & kHGCalLayerMask) << kHGCalLayerOffset) | ((ringAbs & kHGCalRadiusMask) << kHGCalRadiusOffset) | ((phi & kHGCalPhiMask) << kHGCalPhiOffset)); } @@ -41,7 +41,7 @@ HGCScintillatorDetId& HGCScintillatorDetId::operator=(const DetId& gen) { return (*this); } -int HGCScintillatorDetId::iradiusAbs() const { +int HGCScintillatorDetId::ring() const { if (trigger()) return (2 * ((id_ >> kHGCalRadiusOffset) & kHGCalRadiusMask)); else @@ -50,9 +50,9 @@ int HGCScintillatorDetId::iradiusAbs() const { int HGCScintillatorDetId::iradiusTriggerAbs() const { if (trigger()) - return ((iradiusAbs() + 1) / 2); + return ((ring() + 1) / 2); else - return iradiusAbs(); + return ring(); } int HGCScintillatorDetId::iphi() const { @@ -81,7 +81,7 @@ void HGCScintillatorDetId::setSiPM(int sipm) { std::vector HGCScintillatorDetId::detectorCells() const { std::vector cells; - int irad = iradiusAbs(); + int irad = ring(); int ifi = iphi(); int iz = zside(); if (trigger()) { @@ -112,7 +112,6 @@ HGCScintillatorDetId HGCScintillatorDetId::triggerCell() const { std::ostream& operator<<(std::ostream& s, const HGCScintillatorDetId& id) { return s << " HGCScintillatorDetId::EE:HE= " << id.isEE() << ":" << id.isHE() << " trigger= " << id.trigger() - << " type= " << id.type() << " SiPM= " << id.sipm() << " layer= " << id.layer() - << " radius= " << id.iradius() << ":" << id.iradiusTrigger() << " phi= " << id.iphi() << ":" - << id.iphiTrigger(); + << " type= " << id.type() << " SiPM= " << id.sipm() << " layer= " << id.layer() << " ring= " << id.iradius() + << ":" << id.iradiusTrigger() << " phi= " << id.iphi() << ":" << id.iphiTrigger(); } diff --git a/DataFormats/GEMDigi/BuildFile.xml b/DataFormats/GEMDigi/BuildFile.xml index ba133c8e101a4..4eecf7bb271bc 100644 --- a/DataFormats/GEMDigi/BuildFile.xml +++ b/DataFormats/GEMDigi/BuildFile.xml @@ -1,6 +1,8 @@ + + diff --git a/DataFormats/GEMRecHit/BuildFile.xml b/DataFormats/GEMRecHit/BuildFile.xml index 9ecef8c127da7..7c61a5807f3b0 100644 --- a/DataFormats/GEMRecHit/BuildFile.xml +++ b/DataFormats/GEMRecHit/BuildFile.xml @@ -2,6 +2,7 @@ + diff --git a/DataFormats/GEMRecHit/interface/GEMCSCSegment.h b/DataFormats/GEMRecHit/interface/GEMCSCSegment.h index 3a5b1eb2c1e6d..e7d24d6a312a1 100644 --- a/DataFormats/GEMRecHit/interface/GEMCSCSegment.h +++ b/DataFormats/GEMRecHit/interface/GEMCSCSegment.h @@ -17,8 +17,6 @@ #include "DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h" #include "DataFormats/CSCRecHit/interface/CSCSegmentCollection.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - #include class CSCDetId; @@ -63,13 +61,7 @@ class GEMCSCSegment final : public RecSegment { int degreesOfFreedom() const override { return 2 * nRecHits() - 4; } - int nRecHits() const { - return (theGEMRecHits.size() + theCSCSegment.specificRecHits().size()); - edm::LogVerbatim("GEMCSCSegment") << "[GEMCSCSegment :: nRecHits] CSC RecHits: " - << theCSCSegment.specificRecHits().size() - << " + GEM RecHits: " << theGEMRecHits.size() << " = " - << (theGEMRecHits.size() + theCSCSegment.specificRecHits().size()); - } + int nRecHits() const { return (theGEMRecHits.size() + theCSCSegment.specificRecHits().size()); } //--- Return the constituents in different ways const CSCSegment cscSegment() const { return theCSCSegment; } diff --git a/DataFormats/GEMRecHit/src/GEMCSCSegment.cc b/DataFormats/GEMRecHit/src/GEMCSCSegment.cc index ad22849c65e27..a0876d2aac9cc 100644 --- a/DataFormats/GEMRecHit/src/GEMCSCSegment.cc +++ b/DataFormats/GEMRecHit/src/GEMCSCSegment.cc @@ -5,6 +5,7 @@ */ #include "DataFormats/GEMRecHit/interface/GEMCSCSegment.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include namespace { diff --git a/DataFormats/GeometrySurface/BuildFile.xml b/DataFormats/GeometrySurface/BuildFile.xml index 2ba0299686a0c..07cf24d28a8a5 100644 --- a/DataFormats/GeometrySurface/BuildFile.xml +++ b/DataFormats/GeometrySurface/BuildFile.xml @@ -1,4 +1,6 @@ + + diff --git a/DataFormats/GsfTrackReco/BuildFile.xml b/DataFormats/GsfTrackReco/BuildFile.xml index 061af954fdd84..dacd02efb3af5 100644 --- a/DataFormats/GsfTrackReco/BuildFile.xml +++ b/DataFormats/GsfTrackReco/BuildFile.xml @@ -1,5 +1,8 @@ + + + diff --git a/DataFormats/HGCDigi/BuildFile.xml b/DataFormats/HGCDigi/BuildFile.xml index d410cbfccec84..f3a1b78798f8e 100644 --- a/DataFormats/HGCDigi/BuildFile.xml +++ b/DataFormats/HGCDigi/BuildFile.xml @@ -1,6 +1,7 @@ + diff --git a/DataFormats/HGCRecHit/BuildFile.xml b/DataFormats/HGCRecHit/BuildFile.xml index eb5042c528e97..dcb63ce812514 100644 --- a/DataFormats/HGCRecHit/BuildFile.xml +++ b/DataFormats/HGCRecHit/BuildFile.xml @@ -2,6 +2,7 @@ + diff --git a/DataFormats/HGCalReco/BuildFile.xml b/DataFormats/HGCalReco/BuildFile.xml index e168223e87f69..ea59e3506573a 100644 --- a/DataFormats/HGCalReco/BuildFile.xml +++ b/DataFormats/HGCalReco/BuildFile.xml @@ -3,6 +3,7 @@ + diff --git a/DataFormats/HLTReco/BuildFile.xml b/DataFormats/HLTReco/BuildFile.xml index a189196cf0555..6e4c24de1329c 100644 --- a/DataFormats/HLTReco/BuildFile.xml +++ b/DataFormats/HLTReco/BuildFile.xml @@ -4,10 +4,14 @@ + + + + diff --git a/DataFormats/HLTReco/interface/EgammaObject.h b/DataFormats/HLTReco/interface/EgammaObject.h new file mode 100644 index 0000000000000..d3df908c7ab1f --- /dev/null +++ b/DataFormats/HLTReco/interface/EgammaObject.h @@ -0,0 +1,64 @@ +#ifndef DataFormats_HLTReco_EgammaObject_h +#define DataFormats_HLTReco_EgammaObject_h + +#include "DataFormats/HLTReco/interface/TriggerObject.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" + +#include +#include + +namespace reco { + class RecoEcalCandidate; +} + +namespace trigger { + class EgammaObject : public TriggerObject { + public: + EgammaObject() : hasPixelMatch_(false) {} + + EgammaObject(int id, float pt, float eta, float phi, float mass) + : TriggerObject(id, pt, eta, phi, mass), hasPixelMatch_(false) {} + EgammaObject(const reco::RecoEcalCandidate& ecalCand); + + const reco::SuperClusterRef& superCluster() const { return superCluster_; } + const reco::GsfTrackRefVector& gsfTracks() const { return gsfTracks_; } + const reco::ElectronSeedRefVector& seeds() const { return seeds_; } + + void setSuperCluster(const reco::SuperClusterRef& sc) { superCluster_ = sc; } + void setGsfTracks(reco::GsfTrackRefVector trks) { gsfTracks_ = std::move(trks); } + void setSeeds(reco::ElectronSeedRefVector seeds); + + bool hasVar(const std::string& varName) const; + float var(const std::string& varName, bool raiseExcept = true) const; + const std::vector>& vars() const { return vars_; } + //varNames and varNamesStr are reasonably expensive functions and are more + //intended for debugging than normal use + std::vector varNames() const; + std::string varNamesStr() const; + void setVars(std::vector> vars); + void clearVars() { vars_.clear(); } + + private: + struct VarComparer { + bool operator()(const std::string& lhs, const std::pair& rhs) const { + return lhs < rhs.first; + } + bool operator()(const std::pair& lhs, const std::string& rhs) const { + return lhs.first < rhs; + } + }; + + bool hasPixelMatch_; + std::vector> vars_; + + reco::SuperClusterRef superCluster_; + reco::GsfTrackRefVector gsfTracks_; + //currently these are pixel seeds but could be tracker seeds... + reco::ElectronSeedRefVector seeds_; + }; + +} // namespace trigger + +#endif diff --git a/DataFormats/HLTReco/interface/EgammaObjectFwd.h b/DataFormats/HLTReco/interface/EgammaObjectFwd.h new file mode 100644 index 0000000000000..a6bb87b38428a --- /dev/null +++ b/DataFormats/HLTReco/interface/EgammaObjectFwd.h @@ -0,0 +1,19 @@ +#ifndef DataFormats_HLTReco_EgammaObjectFwd_h +#define DataFormats_HLTReco_EgammaObjectFwd_h + +#include +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/Common/interface/RefVector.h" +#include "DataFormats/Common/interface/RefProd.h" + +namespace trigger { + class EgammaObject; + + typedef std::vector EgammaObjectCollection; + typedef edm::Ref EgammaObjectRef; + typedef edm::RefProd EgammaObjectRefProd; + typedef edm::RefVector EgammaObjectRefVector; + typedef EgammaObjectRefVector::iterator EgammaObjectIterator; +} // namespace trigger + +#endif diff --git a/DataFormats/HLTReco/interface/TriggerEventWithRefs.h b/DataFormats/HLTReco/interface/TriggerEventWithRefs.h index bf459404b3258..233f1eb6e30c9 100644 --- a/DataFormats/HLTReco/interface/TriggerEventWithRefs.h +++ b/DataFormats/HLTReco/interface/TriggerEventWithRefs.h @@ -52,6 +52,13 @@ namespace trigger { size_type l1tmuon_; size_type l1tegamma_; size_type l1tjet_; + size_type l1ttkmuon_; + size_type l1ttkele_; + size_type l1ttkem_; + size_type l1tpfjet_; + size_type l1tpftau_; + size_type l1thpspftau_; + size_type l1tpftrack_; size_type l1ttau_; size_type l1tetsum_; @@ -77,6 +84,13 @@ namespace trigger { l1tmuon_(0), l1tegamma_(0), l1tjet_(0), + l1ttkmuon_(0), + l1ttkele_(0), + l1ttkem_(0), + l1tpfjet_(0), + l1tpftau_(0), + l1thpspftau_(0), + l1tpftrack_(0), l1ttau_(0), l1tetsum_(0) { filterTag_ = edm::InputTag().encode(); @@ -101,6 +115,13 @@ namespace trigger { size_type l1tmuon, size_type l1tegamma, size_type l1tjet, + size_type l1ttkmuon, + size_type l1ttkele, + size_type l1ttkem, + size_type l1tpfjet, + size_type l1tpftau, + size_type l1thpspftau, + size_type l1tpftrack, size_type l1ttau, size_type l1tetsum) : filterTag_(filterTag.encode()), @@ -123,6 +144,13 @@ namespace trigger { l1tmuon_(l1tmuon), l1tegamma_(l1tegamma), l1tjet_(l1tjet), + l1ttkmuon_(l1ttkmuon), + l1ttkele_(l1ttkele), + l1ttkem_(l1ttkem), + l1tpfjet_(l1tpfjet), + l1tpftau_(l1tpftau), + l1thpspftau_(l1thpspftau), + l1tpftrack_(l1tpftrack), l1ttau_(l1ttau), l1tetsum_(l1tetsum) {} }; @@ -167,6 +195,13 @@ namespace trigger { addObjects(tfowr.l1tmuonIds(), tfowr.l1tmuonRefs()), addObjects(tfowr.l1tegammaIds(), tfowr.l1tegammaRefs()), addObjects(tfowr.l1tjetIds(), tfowr.l1tjetRefs()), + addObjects(tfowr.l1ttkmuonIds(), tfowr.l1ttkmuonRefs()), + addObjects(tfowr.l1ttkeleIds(), tfowr.l1ttkeleRefs()), + addObjects(tfowr.l1ttkemIds(), tfowr.l1ttkemRefs()), + addObjects(tfowr.l1tpfjetIds(), tfowr.l1tpfjetRefs()), + addObjects(tfowr.l1tpftauIds(), tfowr.l1tpftauRefs()), + addObjects(tfowr.l1thpspftauIds(), tfowr.l1thpspftauRefs()), + addObjects(tfowr.l1tpftrackIds(), tfowr.l1tpftrackRefs()), addObjects(tfowr.l1ttauIds(), tfowr.l1ttauRefs()), addObjects(tfowr.l1tetsumIds(), tfowr.l1tetsumRefs())) @@ -299,19 +334,54 @@ namespace trigger { const size_type end(filterObjects_.at(filter).l1tmuon_); return std::pair(begin, end); } - std::pair l1tegammaSlice(size_type filter) const { const size_type begin(filter == 0 ? 0 : filterObjects_.at(filter - 1).l1tegamma_); const size_type end(filterObjects_.at(filter).l1tegamma_); return std::pair(begin, end); } - std::pair l1tjetSlice(size_type filter) const { const size_type begin(filter == 0 ? 0 : filterObjects_.at(filter - 1).l1tjet_); const size_type end(filterObjects_.at(filter).l1tjet_); return std::pair(begin, end); } + /* Phase-2 */ + std::pair l1ttkmuonSlice(size_type filter) const { + const size_type begin(filter == 0 ? 0 : filterObjects_.at(filter - 1).l1ttkmuon_); + const size_type end(filterObjects_.at(filter).l1ttkmuon_); + return std::pair(begin, end); + } + std::pair l1ttkeleSlice(size_type filter) const { + const size_type begin(filter == 0 ? 0 : filterObjects_.at(filter - 1).l1ttkele_); + const size_type end(filterObjects_.at(filter).l1ttkele_); + return std::pair(begin, end); + } + std::pair l1ttkemSlice(size_type filter) const { + const size_type begin(filter == 0 ? 0 : filterObjects_.at(filter - 1).l1ttkem_); + const size_type end(filterObjects_.at(filter).l1ttkem_); + return std::pair(begin, end); + } + std::pair l1tpfjetSlice(size_type filter) const { + const size_type begin(filter == 0 ? 0 : filterObjects_.at(filter - 1).l1tpfjet_); + const size_type end(filterObjects_.at(filter).l1tpfjet_); + return std::pair(begin, end); + } + std::pair l1tpftauSlice(size_type filter) const { + const size_type begin(filter == 0 ? 0 : filterObjects_.at(filter - 1).l1tpftau_); + const size_type end(filterObjects_.at(filter).l1tpftau_); + return std::pair(begin, end); + } + std::pair l1thpspftauSlice(size_type filter) const { + const size_type begin(filter == 0 ? 0 : filterObjects_.at(filter - 1).l1thpspftau_); + const size_type end(filterObjects_.at(filter).l1thpspftau_); + return std::pair(begin, end); + } + std::pair l1tpftrackSlice(size_type filter) const { + const size_type begin(filter == 0 ? 0 : filterObjects_.at(filter - 1).l1tpftrack_); + const size_type end(filterObjects_.at(filter).l1tpftrack_); + return std::pair(begin, end); + } + std::pair l1ttauSlice(size_type filter) const { const size_type begin(filter == 0 ? 0 : filterObjects_.at(filter - 1).l1ttau_); const size_type end(filterObjects_.at(filter).l1ttau_); @@ -535,6 +605,84 @@ namespace trigger { TriggerRefsCollections::getObjects(id, l1tjet, begin, end); } + /* Phase-2 */ + void getObjects(size_type filter, Vids& ids, VRl1ttkmuon& l1ttkmuon) const { + const size_type begin(l1ttkmuonSlice(filter).first); + const size_type end(l1ttkmuonSlice(filter).second); + TriggerRefsCollections::getObjects(ids, l1ttkmuon, begin, end); + } + void getObjects(size_type filter, int id, VRl1ttkmuon& l1ttkmuon) const { + const size_type begin(l1ttkmuonSlice(filter).first); + const size_type end(l1ttkmuonSlice(filter).second); + TriggerRefsCollections::getObjects(id, l1ttkmuon, begin, end); + } + + void getObjects(size_type filter, Vids& ids, VRl1ttkele& l1ttkele) const { + const size_type begin(l1ttkeleSlice(filter).first); + const size_type end(l1ttkeleSlice(filter).second); + TriggerRefsCollections::getObjects(ids, l1ttkele, begin, end); + } + void getObjects(size_type filter, int id, VRl1ttkele& l1ttkele) const { + const size_type begin(l1ttkeleSlice(filter).first); + const size_type end(l1ttkeleSlice(filter).second); + TriggerRefsCollections::getObjects(id, l1ttkele, begin, end); + } + + void getObjects(size_type filter, Vids& ids, VRl1ttkem& l1ttkem) const { + const size_type begin(l1ttkemSlice(filter).first); + const size_type end(l1ttkemSlice(filter).second); + TriggerRefsCollections::getObjects(ids, l1ttkem, begin, end); + } + void getObjects(size_type filter, int id, VRl1ttkem& l1ttkem) const { + const size_type begin(l1ttkemSlice(filter).first); + const size_type end(l1ttkemSlice(filter).second); + TriggerRefsCollections::getObjects(id, l1ttkem, begin, end); + } + + void getObjects(size_type filter, Vids& ids, VRl1tpfjet& l1tpfjet) const { + const size_type begin(l1tpfjetSlice(filter).first); + const size_type end(l1tpfjetSlice(filter).second); + TriggerRefsCollections::getObjects(ids, l1tpfjet, begin, end); + } + void getObjects(size_type filter, int id, VRl1tpfjet& l1tpfjet) const { + const size_type begin(l1tpfjetSlice(filter).first); + const size_type end(l1tpfjetSlice(filter).second); + TriggerRefsCollections::getObjects(id, l1tpfjet, begin, end); + } + + void getObjects(size_type filter, Vids& ids, VRl1tpftau& l1tpftau) const { + const size_type begin(l1tpftauSlice(filter).first); + const size_type end(l1tpftauSlice(filter).second); + TriggerRefsCollections::getObjects(ids, l1tpftau, begin, end); + } + void getObjects(size_type filter, int id, VRl1tpftau& l1tpftau) const { + const size_type begin(l1tpftauSlice(filter).first); + const size_type end(l1tpftauSlice(filter).second); + TriggerRefsCollections::getObjects(id, l1tpftau, begin, end); + } + + void getObjects(size_type filter, Vids& ids, VRl1thpspftau& l1thpspftau) const { + const size_type begin(l1thpspftauSlice(filter).first); + const size_type end(l1thpspftauSlice(filter).second); + TriggerRefsCollections::getObjects(ids, l1thpspftau, begin, end); + } + void getObjects(size_type filter, int id, VRl1thpspftau& l1thpspftau) const { + const size_type begin(l1thpspftauSlice(filter).first); + const size_type end(l1thpspftauSlice(filter).second); + TriggerRefsCollections::getObjects(id, l1thpspftau, begin, end); + } + + void getObjects(size_type filter, Vids& ids, VRl1tpftrack& l1tpftrack) const { + const size_type begin(l1tpftrackSlice(filter).first); + const size_type end(l1tpftrackSlice(filter).second); + TriggerRefsCollections::getObjects(ids, l1tpftrack, begin, end); + } + void getObjects(size_type filter, int id, VRl1tpftrack& l1tpftrack) const { + const size_type begin(l1tpftrackSlice(filter).first); + const size_type end(l1tpftrackSlice(filter).second); + TriggerRefsCollections::getObjects(id, l1tpftrack, begin, end); + } + void getObjects(size_type filter, Vids& ids, VRl1ttau& l1ttau) const { const size_type begin(l1ttauSlice(filter).first); const size_type end(l1ttauSlice(filter).second); diff --git a/DataFormats/HLTReco/interface/TriggerRefsCollections.h b/DataFormats/HLTReco/interface/TriggerRefsCollections.h index 21c11a98043b4..24b9e4be8bdd7 100644 --- a/DataFormats/HLTReco/interface/TriggerRefsCollections.h +++ b/DataFormats/HLTReco/interface/TriggerRefsCollections.h @@ -43,13 +43,20 @@ #include "DataFormats/L1Trigger/interface/Jet.h" #include "DataFormats/L1Trigger/interface/Tau.h" #include "DataFormats/L1Trigger/interface/EtSum.h" +#include "DataFormats/L1TCorrelator/interface/TkMuon.h" +#include "DataFormats/L1TCorrelator/interface/TkMuonFwd.h" +#include "DataFormats/L1TCorrelator/interface/TkElectron.h" +#include "DataFormats/L1TCorrelator/interface/TkElectronFwd.h" +#include "DataFormats/L1TCorrelator/interface/TkEm.h" +#include "DataFormats/L1TCorrelator/interface/TkEmFwd.h" +#include "DataFormats/L1TParticleFlow/interface/PFJet.h" +#include "DataFormats/L1TParticleFlow/interface/PFTau.h" +#include "DataFormats/L1TParticleFlow/interface/HPSPFTau.h" +#include "DataFormats/L1TParticleFlow/interface/HPSPFTauFwd.h" #include "DataFormats/JetReco/interface/PFJetCollection.h" #include "DataFormats/TauReco/interface/PFTauFwd.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/MessageLogger/interface/MessageDrop.h" - #include #include @@ -78,6 +85,15 @@ namespace trigger { typedef l1t::TauVectorRef VRl1ttau; typedef l1t::EtSumVectorRef VRl1tetsum; + /* Phase-2 */ + typedef l1t::TkMuonVectorRef VRl1ttkmuon; + typedef l1t::TkElectronVectorRef VRl1ttkele; + typedef l1t::TkEmVectorRef VRl1ttkem; + typedef l1t::PFJetVectorRef VRl1tpfjet; + typedef l1t::HPSPFTauVectorRef VRl1thpspftau; + typedef l1t::PFTauVectorRef VRl1tpftau; + typedef l1t::PFTrackVectorRef VRl1tpftrack; + typedef std::vector VRpfjet; typedef std::vector VRpftau; typedef std::vector VRpfmet; @@ -125,6 +141,22 @@ namespace trigger { Vids l1tetsumIds_; VRl1tetsum l1tetsumRefs_; + /* Phase-2 */ + Vids l1ttkmuonIds_; + VRl1ttkmuon l1ttkmuonRefs_; + Vids l1ttkeleIds_; + VRl1ttkele l1ttkeleRefs_; + Vids l1ttkemIds_; + VRl1ttkem l1ttkemRefs_; + Vids l1tpfjetIds_; + VRl1tpfjet l1tpfjetRefs_; + Vids l1tpftauIds_; + VRl1tpftau l1tpftauRefs_; + Vids l1thpspftauIds_; + VRl1thpspftau l1thpspftauRefs_; + Vids l1tpftrackIds_; + VRl1tpftrack l1tpftrackRefs_; + Vids pfjetIds_; VRpfjet pfjetRefs_; Vids pftauIds_; @@ -175,6 +207,22 @@ namespace trigger { l1tetsumIds_(), l1tetsumRefs_(), + /* Phase-2 */ + l1ttkmuonIds_(), + l1ttkmuonRefs_(), + l1ttkeleIds_(), + l1ttkeleRefs_(), + l1ttkemIds_(), + l1ttkemRefs_(), + l1tpfjetIds_(), + l1tpfjetRefs_(), + l1tpftauIds_(), + l1tpftauRefs_(), + l1thpspftauIds_(), + l1thpspftauRefs_(), + l1tpftrackIds_(), + l1tpftrackRefs_(), + pfjetIds_(), pfjetRefs_(), pftauIds_(), @@ -223,6 +271,22 @@ namespace trigger { std::swap(l1tetsumIds_, other.l1tetsumIds_); std::swap(l1tetsumRefs_, other.l1tetsumRefs_); + /* Phase-2 */ + std::swap(l1ttkmuonIds_, other.l1ttkmuonIds_); + std::swap(l1ttkmuonRefs_, other.l1ttkmuonRefs_); + std::swap(l1ttkeleIds_, other.l1ttkeleIds_); + std::swap(l1ttkeleRefs_, other.l1ttkeleRefs_); + std::swap(l1ttkemIds_, other.l1ttkemIds_); + std::swap(l1ttkemRefs_, other.l1ttkemRefs_); + std::swap(l1tpfjetIds_, other.l1tpfjetIds_); + std::swap(l1tpfjetRefs_, other.l1tpfjetRefs_); + std::swap(l1tpftauIds_, other.l1tpftauIds_); + std::swap(l1tpftauRefs_, other.l1tpftauRefs_); + std::swap(l1thpspftauIds_, other.l1thpspftauIds_); + std::swap(l1thpspftauRefs_, other.l1thpspftauRefs_); + std::swap(l1tpftrackIds_, other.l1tpftrackIds_); + std::swap(l1tpftrackRefs_, other.l1tpftrackRefs_); + std::swap(pfjetIds_, other.pfjetIds_); std::swap(pfjetRefs_, other.pfjetRefs_); std::swap(pftauIds_, other.pftauIds_); @@ -305,6 +369,36 @@ namespace trigger { l1tetsumIds_.push_back(id); l1tetsumRefs_.push_back(ref); } + + /* Phase-2 */ + void addObject(int id, const l1t::TkMuonRef& ref) { + l1ttkmuonIds_.push_back(id); + l1ttkmuonRefs_.push_back(ref); + } + void addObject(int id, const l1t::TkElectronRef& ref) { + l1ttkeleIds_.push_back(id); + l1ttkeleRefs_.push_back(ref); + } + void addObject(int id, const l1t::TkEmRef& ref) { + l1ttkemIds_.push_back(id); + l1ttkemRefs_.push_back(ref); + } + void addObject(int id, const l1t::PFJetRef& ref) { + l1tpfjetIds_.push_back(id); + l1tpfjetRefs_.push_back(ref); + } + void addObject(int id, const l1t::PFTauRef& ref) { + l1tpftauIds_.push_back(id); + l1tpftauRefs_.push_back(ref); + } + void addObject(int id, const l1t::HPSPFTauRef& ref) { + l1thpspftauIds_.push_back(id); + l1thpspftauRefs_.push_back(ref); + } + void addObject(int id, const l1t::PFTrackRef& ref) { + l1tpftrackIds_.push_back(id); + l1tpftrackRefs_.push_back(ref); + } void addObject(int id, const reco::PFJetRef& ref) { pfjetIds_.push_back(id); pfjetRefs_.push_back(ref); @@ -429,6 +523,50 @@ namespace trigger { return l1hfringsIds_.size(); } + /* Phase-2 */ + size_type addObjects(const Vids& ids, const VRl1ttkmuon& refs) { + assert(ids.size() == refs.size()); + l1ttkmuonIds_.insert(l1ttkmuonIds_.end(), ids.begin(), ids.end()); + l1ttkmuonRefs_.insert(l1ttkmuonRefs_.end(), refs.begin(), refs.end()); + return l1ttkmuonIds_.size(); + } + size_type addObjects(const Vids& ids, const VRl1ttkele& refs) { + assert(ids.size() == refs.size()); + l1ttkeleIds_.insert(l1ttkeleIds_.end(), ids.begin(), ids.end()); + l1ttkeleRefs_.insert(l1ttkeleRefs_.end(), refs.begin(), refs.end()); + return l1ttkeleIds_.size(); + } + size_type addObjects(const Vids& ids, const VRl1ttkem& refs) { + assert(ids.size() == refs.size()); + l1ttkemIds_.insert(l1ttkemIds_.end(), ids.begin(), ids.end()); + l1ttkemRefs_.insert(l1ttkemRefs_.end(), refs.begin(), refs.end()); + return l1ttkemIds_.size(); + } + size_type addObjects(const Vids& ids, const VRl1tpfjet& refs) { + assert(ids.size() == refs.size()); + l1tpfjetIds_.insert(l1tpfjetIds_.end(), ids.begin(), ids.end()); + l1tpfjetRefs_.insert(l1tpfjetRefs_.end(), refs.begin(), refs.end()); + return l1tpfjetIds_.size(); + } + size_type addObjects(const Vids& ids, const VRl1tpftau& refs) { + assert(ids.size() == refs.size()); + l1tpftauIds_.insert(l1tpftauIds_.end(), ids.begin(), ids.end()); + l1tpftauRefs_.insert(l1tpftauRefs_.end(), refs.begin(), refs.end()); + return l1tpftauIds_.size(); + } + size_type addObjects(const Vids& ids, const VRl1thpspftau& refs) { + assert(ids.size() == refs.size()); + l1thpspftauIds_.insert(l1thpspftauIds_.end(), ids.begin(), ids.end()); + l1thpspftauRefs_.insert(l1thpspftauRefs_.end(), refs.begin(), refs.end()); + return l1thpspftauIds_.size(); + } + size_type addObjects(const Vids& ids, const VRl1tpftrack& refs) { + assert(ids.size() == refs.size()); + l1tpftrackIds_.insert(l1tpftrackIds_.end(), ids.begin(), ids.end()); + l1tpftrackRefs_.insert(l1tpftrackRefs_.end(), refs.begin(), refs.end()); + return l1tpftrackIds_.size(); + } + size_type addObjects(const Vids& ids, const VRpfjet& refs) { assert(ids.size() == refs.size()); pfjetIds_.insert(pfjetIds_.end(), ids.begin(), ids.end()); @@ -1079,6 +1217,252 @@ namespace trigger { return; } + /* Phase-2 */ + void getObjects(Vids& ids, VRl1ttkmuon& refs) const { getObjects(ids, refs, 0, l1ttkmuonIds_.size()); } + void getObjects(Vids& ids, VRl1ttkmuon& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1ttkmuonIds_.size()); + const size_type n(end - begin); + ids.resize(n); + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + ids[j] = l1ttkmuonIds_[i]; + refs[j] = l1ttkmuonRefs_[i]; + ++j; + } + } + void getObjects(int id, VRl1ttkmuon& refs) const { getObjects(id, refs, 0, l1ttkmuonIds_.size()); } + void getObjects(int id, VRl1ttkmuon& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1ttkmuonIds_.size()); + size_type n(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1ttkmuonIds_[i]) { + ++n; + } + } + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1ttkmuonIds_[i]) { + refs[j] = l1ttkmuonRefs_[i]; + ++j; + } + } + return; + } + + void getObjects(Vids& ids, VRl1ttkele& refs) const { getObjects(ids, refs, 0, l1ttkeleIds_.size()); } + void getObjects(Vids& ids, VRl1ttkele& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1ttkeleIds_.size()); + const size_type n(end - begin); + ids.resize(n); + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + ids[j] = l1ttkeleIds_[i]; + refs[j] = l1ttkeleRefs_[i]; + ++j; + } + } + void getObjects(int id, VRl1ttkele& refs) const { getObjects(id, refs, 0, l1ttkeleIds_.size()); } + void getObjects(int id, VRl1ttkele& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1ttkeleIds_.size()); + size_type n(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1ttkeleIds_[i]) { + ++n; + } + } + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1ttkeleIds_[i]) { + refs[j] = l1ttkeleRefs_[i]; + ++j; + } + } + return; + } + + void getObjects(Vids& ids, VRl1ttkem& refs) const { getObjects(ids, refs, 0, l1ttkemIds_.size()); } + void getObjects(Vids& ids, VRl1ttkem& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1ttkemIds_.size()); + const size_type n(end - begin); + ids.resize(n); + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + ids[j] = l1ttkemIds_[i]; + refs[j] = l1ttkemRefs_[i]; + ++j; + } + } + void getObjects(int id, VRl1ttkem& refs) const { getObjects(id, refs, 0, l1ttkemIds_.size()); } + void getObjects(int id, VRl1ttkem& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1ttkemIds_.size()); + size_type n(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1ttkemIds_[i]) { + ++n; + } + } + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1ttkemIds_[i]) { + refs[j] = l1ttkemRefs_[i]; + ++j; + } + } + return; + } + + void getObjects(Vids& ids, VRl1tpfjet& refs) const { getObjects(ids, refs, 0, l1tpfjetIds_.size()); } + void getObjects(Vids& ids, VRl1tpfjet& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1tpfjetIds_.size()); + const size_type n(end - begin); + ids.resize(n); + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + ids[j] = l1tpfjetIds_[i]; + refs[j] = l1tpfjetRefs_[i]; + ++j; + } + } + void getObjects(int id, VRl1tpfjet& refs) const { getObjects(id, refs, 0, l1tpfjetIds_.size()); } + void getObjects(int id, VRl1tpfjet& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1tpfjetIds_.size()); + size_type n(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1tpfjetIds_[i]) { + ++n; + } + } + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1tpfjetIds_[i]) { + refs[j] = l1tpfjetRefs_[i]; + ++j; + } + } + return; + } + + void getObjects(Vids& ids, VRl1tpftau& refs) const { getObjects(ids, refs, 0, l1tpftauIds_.size()); } + void getObjects(Vids& ids, VRl1tpftau& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1tpftauIds_.size()); + const size_type n(end - begin); + ids.resize(n); + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + ids[j] = l1tpftauIds_[i]; + refs[j] = l1tpftauRefs_[i]; + ++j; + } + } + void getObjects(int id, VRl1tpftau& refs) const { getObjects(id, refs, 0, l1tpftauIds_.size()); } + void getObjects(int id, VRl1tpftau& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1tpftauIds_.size()); + size_type n(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1tpftauIds_[i]) { + ++n; + } + } + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1tpftauIds_[i]) { + refs[j] = l1tpftauRefs_[i]; + ++j; + } + } + return; + } + + void getObjects(Vids& ids, VRl1thpspftau& refs) const { getObjects(ids, refs, 0, l1thpspftauIds_.size()); } + void getObjects(Vids& ids, VRl1thpspftau& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1thpspftauIds_.size()); + const size_type n(end - begin); + ids.resize(n); + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + ids[j] = l1thpspftauIds_[i]; + refs[j] = l1thpspftauRefs_[i]; + ++j; + } + } + void getObjects(int id, VRl1thpspftau& refs) const { getObjects(id, refs, 0, l1thpspftauIds_.size()); } + void getObjects(int id, VRl1thpspftau& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1thpspftauIds_.size()); + size_type n(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1thpspftauIds_[i]) { + ++n; + } + } + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1thpspftauIds_[i]) { + refs[j] = l1thpspftauRefs_[i]; + ++j; + } + } + return; + } + + void getObjects(Vids& ids, VRl1tpftrack& refs) const { getObjects(ids, refs, 0, l1tpftrackIds_.size()); } + void getObjects(Vids& ids, VRl1tpftrack& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1tpftrackIds_.size()); + const size_type n(end - begin); + ids.resize(n); + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + ids[j] = l1tpftrackIds_[i]; + refs[j] = l1tpftrackRefs_[i]; + ++j; + } + } + void getObjects(int id, VRl1tpftrack& refs) const { getObjects(id, refs, 0, l1tpftrackIds_.size()); } + void getObjects(int id, VRl1tpftrack& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1tpftrackIds_.size()); + size_type n(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1tpftrackIds_[i]) { + ++n; + } + } + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1tpftrackIds_[i]) { + refs[j] = l1tpftrackRefs_[i]; + ++j; + } + } + return; + } + void getObjects(Vids& ids, VRpfjet& refs) const { getObjects(ids, refs, 0, pfjetIds_.size()); } void getObjects(Vids& ids, VRpfjet& refs, size_type begin, size_type end) const { assert(begin <= end); @@ -1261,6 +1645,36 @@ namespace trigger { const Vids& l1tjetIds() const { return l1tjetIds_; } const VRl1tjet& l1tjetRefs() const { return l1tjetRefs_; } + /* Phase-2 */ + + size_type l1ttkmuonSize() const { return l1ttkmuonIds_.size(); } + const Vids& l1ttkmuonIds() const { return l1ttkmuonIds_; } + const VRl1ttkmuon& l1ttkmuonRefs() const { return l1ttkmuonRefs_; } + + size_type l1ttkeleSize() const { return l1ttkeleIds_.size(); } + const Vids& l1ttkeleIds() const { return l1ttkeleIds_; } + const VRl1ttkele& l1ttkeleRefs() const { return l1ttkeleRefs_; } + + size_type l1ttkemSize() const { return l1ttkemIds_.size(); } + const Vids& l1ttkemIds() const { return l1ttkemIds_; } + const VRl1ttkem& l1ttkemRefs() const { return l1ttkemRefs_; } + + size_type l1tpfjetSize() const { return l1tpfjetIds_.size(); } + const Vids& l1tpfjetIds() const { return l1tpfjetIds_; } + const VRl1tpfjet& l1tpfjetRefs() const { return l1tpfjetRefs_; } + + size_type l1tpftauSize() const { return l1tpftauIds_.size(); } + const Vids& l1tpftauIds() const { return l1tpftauIds_; } + const VRl1tpftau& l1tpftauRefs() const { return l1tpftauRefs_; } + + size_type l1thpspftauSize() const { return l1thpspftauIds_.size(); } + const Vids& l1thpspftauIds() const { return l1thpspftauIds_; } + const VRl1thpspftau& l1thpspftauRefs() const { return l1thpspftauRefs_; } + + size_type l1tpftrackSize() const { return l1tpftrackIds_.size(); } + const Vids& l1tpftrackIds() const { return l1tpftrackIds_; } + const VRl1tpftrack& l1tpftrackRefs() const { return l1tpftrackRefs_; } + size_type l1ttauSize() const { return l1ttauIds_.size(); } const Vids& l1ttauIds() const { return l1ttauIds_; } const VRl1ttau& l1ttauRefs() const { return l1ttauRefs_; } diff --git a/DataFormats/HLTReco/interface/TriggerTypeDefs.h b/DataFormats/HLTReco/interface/TriggerTypeDefs.h index 09195f3ffe76b..24da95ec43782 100644 --- a/DataFormats/HLTReco/interface/TriggerTypeDefs.h +++ b/DataFormats/HLTReco/interface/TriggerTypeDefs.h @@ -60,9 +60,20 @@ namespace trigger { TriggerL1AsymHt = -111, TriggerL1AsymEtHF = -112, TriggerL1AsymHtHF = -113, + /// This has all to be decided for Phase-2. Here is Thiago's proposal. + TriggerL1TkMu = -114, + TriggerL1TkEle = -115, + TriggerL1PFJet = -116, + TriggerL1PFTau = -117, + TriggerL1TkEm = -118, // used for photons + TriggerL1PFMET = -119, + TriggerL1PFETT = -120, + TriggerL1PFHT = -121, + TriggerL1PFMHT = -122, + TriggerL1PFTrack = -123, + TriggerL1Vertex = -124, /// HLT - TriggerPhoton = +81, TriggerElectron = +82, TriggerMuon = +83, diff --git a/DataFormats/HLTReco/src/EgammaObject.cc b/DataFormats/HLTReco/src/EgammaObject.cc new file mode 100644 index 0000000000000..ea990cb2a8d2e --- /dev/null +++ b/DataFormats/HLTReco/src/EgammaObject.cc @@ -0,0 +1,62 @@ +#include "DataFormats/HLTReco/interface/EgammaObject.h" + +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/ElectronSeed.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" + +trigger::EgammaObject::EgammaObject(const reco::RecoEcalCandidate& ecalCand) + : TriggerObject(ecalCand), hasPixelMatch_(false), superCluster_(ecalCand.superCluster()) {} + +void trigger::EgammaObject::setSeeds(reco::ElectronSeedRefVector seeds) { + seeds_ = std::move(seeds); + hasPixelMatch_ = false; + for (const auto& seed : seeds_) { + if (!seed->hitInfo().empty()) { + hasPixelMatch_ = true; + break; + } + } +} + +bool trigger::EgammaObject::hasVar(const std::string& varName) const { + return std::binary_search(vars_.begin(), vars_.end(), varName, VarComparer()); +} + +float trigger::EgammaObject::var(const std::string& varName, const bool raiseExcept) const { + //here we have a guaranteed sorted vector with unique entries + auto varIt = std::equal_range(vars_.begin(), vars_.end(), varName, VarComparer()); + if (varIt.first != varIt.second) + return varIt.first->second; + else if (raiseExcept) { + cms::Exception ex("AttributeError"); + ex << " error variable " << varName << " is not present, variables present are " << varNamesStr(); + throw ex; + } else { + return std::numeric_limits::max(); + } +} + +std::vector trigger::EgammaObject::varNames() const { + std::vector names; + for (const auto& var : vars_) { + names.push_back(var.first); + } + return names; +} + +std::string trigger::EgammaObject::varNamesStr() const { + std::string retVal; + auto names = varNames(); + for (const auto& name : names) { + if (!retVal.empty()) + retVal += " "; + retVal += name; + } + return retVal; +} + +void trigger::EgammaObject::setVars(std::vector> vars) { + vars_ = std::move(vars); + std::sort(vars_.begin(), vars_.end(), [](auto& lhs, auto& rhs) { return lhs.first < rhs.first; }); +} diff --git a/DataFormats/HLTReco/src/classes.h b/DataFormats/HLTReco/src/classes.h index 452583673ab4b..c95d97d0e81ee 100644 --- a/DataFormats/HLTReco/src/classes.h +++ b/DataFormats/HLTReco/src/classes.h @@ -6,9 +6,22 @@ #include "DataFormats/HLTReco/interface/TriggerEvent.h" #include "DataFormats/HLTReco/interface/TriggerEventWithRefs.h" #include "DataFormats/HLTReco/interface/HLTPrescaleTable.h" +#include "DataFormats/HLTReco/interface/EgammaObject.h" #include "DataFormats/Common/interface/Wrapper.h" #include "DataFormats/Candidate/interface/CompositeCandidate.h" #include "DataFormats/Candidate/interface/CompositeCandidateFwd.h" +#include "DataFormats/L1TCorrelator/interface/TkMuon.h" +#include "DataFormats/L1TCorrelator/interface/TkMuonFwd.h" +#include "DataFormats/L1TCorrelator/interface/TkElectron.h" +#include "DataFormats/L1TCorrelator/interface/TkElectronFwd.h" +#include "DataFormats/L1TCorrelator/interface/TkEm.h" +#include "DataFormats/L1TCorrelator/interface/TkEmFwd.h" +#include "DataFormats/L1TParticleFlow/interface/PFJet.h" +#include "DataFormats/L1TParticleFlow/interface/PFTau.h" +#include "DataFormats/L1TParticleFlow/interface/HPSPFTau.h" +#include "DataFormats/L1TParticleFlow/interface/HPSPFTauFwd.h" +#include "DataFormats/L1TParticleFlow/interface/PFTrack.h" + #include "DataFormats/Common/interface/Ref.h" diff --git a/DataFormats/HLTReco/src/classes_def.xml b/DataFormats/HLTReco/src/classes_def.xml index 6cfc16b02e9a9..39b3bf520a864 100644 --- a/DataFormats/HLTReco/src/classes_def.xml +++ b/DataFormats/HLTReco/src/classes_def.xml @@ -42,12 +42,14 @@ - + + - + + @@ -62,13 +64,15 @@ - + + - + + @@ -85,5 +89,17 @@ + + + + + + + + + + + + diff --git a/DataFormats/HcalCalibObjects/BuildFile.xml b/DataFormats/HcalCalibObjects/BuildFile.xml index 2e32b563d83ae..3c38aaa2da09b 100644 --- a/DataFormats/HcalCalibObjects/BuildFile.xml +++ b/DataFormats/HcalCalibObjects/BuildFile.xml @@ -1,5 +1,6 @@ + diff --git a/DataFormats/HcalDetId/BuildFile.xml b/DataFormats/HcalDetId/BuildFile.xml index 7b963c0dd3077..2582aa71146d8 100644 --- a/DataFormats/HcalDetId/BuildFile.xml +++ b/DataFormats/HcalDetId/BuildFile.xml @@ -1,5 +1,6 @@ + diff --git a/DataFormats/HcalDigi/BuildFile.xml b/DataFormats/HcalDigi/BuildFile.xml index cee2c128fcdbf..5227530aaaa5e 100644 --- a/DataFormats/HcalDigi/BuildFile.xml +++ b/DataFormats/HcalDigi/BuildFile.xml @@ -1,5 +1,6 @@ + diff --git a/DataFormats/Histograms/BuildFile.xml b/DataFormats/Histograms/BuildFile.xml index 5e41c09784248..62f34e0d7a74b 100644 --- a/DataFormats/Histograms/BuildFile.xml +++ b/DataFormats/Histograms/BuildFile.xml @@ -1,5 +1,7 @@ + + diff --git a/DataFormats/JetReco/BuildFile.xml b/DataFormats/JetReco/BuildFile.xml index c17b5dc73a0d5..f3ecf3960c0fb 100644 --- a/DataFormats/JetReco/BuildFile.xml +++ b/DataFormats/JetReco/BuildFile.xml @@ -6,6 +6,10 @@ + + + + diff --git a/DataFormats/L1TCalorimeterPhase2/BuildFile.xml b/DataFormats/L1TCalorimeterPhase2/BuildFile.xml index e8fab97541080..732b899908e54 100644 --- a/DataFormats/L1TCalorimeterPhase2/BuildFile.xml +++ b/DataFormats/L1TCalorimeterPhase2/BuildFile.xml @@ -1,4 +1,7 @@ + + + diff --git a/DataFormats/L1TCalorimeterPhase2/interface/CaloCrystalCluster.h b/DataFormats/L1TCalorimeterPhase2/interface/CaloCrystalCluster.h index 6cdaf28b6fd99..4326f2b686327 100644 --- a/DataFormats/L1TCalorimeterPhase2/interface/CaloCrystalCluster.h +++ b/DataFormats/L1TCalorimeterPhase2/interface/CaloCrystalCluster.h @@ -7,7 +7,6 @@ #include #include "DataFormats/L1Trigger/interface/L1Candidate.h" #include "DataFormats/DetId/interface/DetId.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" namespace l1tp2 { @@ -66,7 +65,7 @@ namespace l1tp2 { looseL1TkMatchWP_(looseL1TkMatchWP), stage2effMatch_(stage2effMatch){}; - virtual ~CaloCrystalCluster(){}; + ~CaloCrystalCluster() override{}; inline float calibratedPt() const { return calibratedPt_; }; inline float hovere() const { return hovere_; }; inline float isolation() const { return iso_; }; @@ -80,12 +79,12 @@ namespace l1tp2 { }; void setExperimentalParams(const std::map ¶ms) { experimentalParams_ = params; }; const std::map &getExperimentalParams() const { return experimentalParams_; }; - inline float experimentalParam(std::string name) const { + inline float experimentalParam(const std::string &name) const { auto iter = experimentalParams_.find(name); if (iter != experimentalParams_.end()) { return iter->second; } else { - edm::LogWarning("CaloCrystalCluster") << "Error: no mapping for ExperimentalParam: " << name << std::endl; + warningNoMapping(name); return -99.; } }; @@ -106,6 +105,7 @@ namespace l1tp2 { inline float crystalPt(unsigned int index) const { return (index < crystalPt_.size()) ? crystalPt_[index] : 0.; }; private: + static void warningNoMapping(const std::string &name); // pT calibrated to Stage-2 (Phase-I) L1EG Objects. NOTE // all working points are defined with respect to cluster.pt(), // not cluster.calibratedPt() diff --git a/DataFormats/L1TCalorimeterPhase2/interface/CaloJet.h b/DataFormats/L1TCalorimeterPhase2/interface/CaloJet.h index 7f5418d0fc6e9..d25ad2f686aca 100644 --- a/DataFormats/L1TCalorimeterPhase2/interface/CaloJet.h +++ b/DataFormats/L1TCalorimeterPhase2/interface/CaloJet.h @@ -6,7 +6,6 @@ #include #include #include "DataFormats/L1Trigger/interface/L1Candidate.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" namespace l1tp2 { @@ -33,12 +32,13 @@ namespace l1tp2 { if (iter != experimentalParams_.end()) { return iter->second; } else { - edm::LogWarning("CaloJet") << "Error: no mapping for ExperimentalParam: " << name << std::endl; + warningNoMapping(name); return -99.; } }; private: + static void warningNoMapping(std::string const&); // pT calibrated to get float calibratedPt_; // HCal energy in region behind cluster (for size, look in producer) / ECal energy in cluster diff --git a/DataFormats/L1TCalorimeterPhase2/src/CaloCrystalCluster.cc b/DataFormats/L1TCalorimeterPhase2/src/CaloCrystalCluster.cc new file mode 100644 index 0000000000000..2b2c83135989b --- /dev/null +++ b/DataFormats/L1TCalorimeterPhase2/src/CaloCrystalCluster.cc @@ -0,0 +1,6 @@ +#include "DataFormats/L1TCalorimeterPhase2/interface/CaloCrystalCluster.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +void l1tp2::CaloCrystalCluster::warningNoMapping(const std::string& name) { + edm::LogWarning("CaloCrystalCluster") << "Error: no mapping for ExperimentalParam: " << name << std::endl; +} diff --git a/DataFormats/L1TCalorimeterPhase2/src/CaloJet.cc b/DataFormats/L1TCalorimeterPhase2/src/CaloJet.cc new file mode 100644 index 0000000000000..60e8be73f291c --- /dev/null +++ b/DataFormats/L1TCalorimeterPhase2/src/CaloJet.cc @@ -0,0 +1,6 @@ +#include "DataFormats/L1TCalorimeterPhase2/interface/CaloJet.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +void l1tp2::CaloJet::warningNoMapping(std::string const& name) { + edm::LogWarning("CaloJet") << "Error: no mapping for ExperimentalParam: " << name << std::endl; +} diff --git a/DataFormats/L1TCorrelator/interface/TkMuon.h b/DataFormats/L1TCorrelator/interface/TkMuon.h index 841738c4609b8..c0401b34ea1cc 100644 --- a/DataFormats/L1TCorrelator/interface/TkMuon.h +++ b/DataFormats/L1TCorrelator/interface/TkMuon.h @@ -7,6 +7,7 @@ #include "DataFormats/L1TrackTrigger/interface/TTTypes.h" #include "DataFormats/L1TMuon/interface/RegionalMuonCand.h" #include "DataFormats/L1TMuon/interface/RegionalMuonCandFwd.h" +#include "DataFormats/L1TMuon/interface/EMTFTrack.h" namespace l1t { class TkMuon : public L1Candidate { @@ -21,6 +22,11 @@ namespace l1t { const edm::Ptr& trkPtr, float tkisol = -999.); + TkMuon(const LorentzVector& p4, + const edm::Ref& emtfTrk, + const edm::Ptr& trkPtr, + float tkisol = -999.); + //One more constructor for Tracker+ Stubs algorithm not requiring the Muon candidate TkMuon(const LorentzVector& p4, const edm::Ptr& trkPtr, float tkisol = -999.); @@ -30,6 +36,7 @@ namespace l1t { const edm::Ptr& trkPtr() const { return trkPtr_; } const edm::Ref& muRef() const { return muRef_; } + const edm::Ref& emtfTrk() const { return emtfTrk_; } float trkIsol() const { return theIsolation; } float trkzVtx() const { return TrkzVtx_; } @@ -58,6 +65,7 @@ namespace l1t { private: // used for the Naive producer edm::Ref muRef_; + edm::Ref emtfTrk_; edm::Ptr trkPtr_; diff --git a/DataFormats/L1TCorrelator/interface/TkPrimaryVertex.h b/DataFormats/L1TCorrelator/interface/TkPrimaryVertex.h index 4f43cd908ff9d..4981e387beae0 100644 --- a/DataFormats/L1TCorrelator/interface/TkPrimaryVertex.h +++ b/DataFormats/L1TCorrelator/interface/TkPrimaryVertex.h @@ -6,6 +6,8 @@ // First version of a class for L1-zvertex #include +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/Common/interface/RefVector.h" namespace l1t { @@ -26,6 +28,9 @@ namespace l1t { }; typedef std::vector TkPrimaryVertexCollection; + typedef edm::Ref TkPrimaryVertexRef; + typedef edm::RefVector TkPrimaryVertexRefVector; + typedef std::vector TkPrimaryVertexVectorRef; } // namespace l1t #endif diff --git a/DataFormats/L1TCorrelator/src/TkMuon.cc b/DataFormats/L1TCorrelator/src/TkMuon.cc index ff85b4f2da8b7..4395d722c1cc8 100644 --- a/DataFormats/L1TCorrelator/src/TkMuon.cc +++ b/DataFormats/L1TCorrelator/src/TkMuon.cc @@ -17,6 +17,16 @@ TkMuon::TkMuon(const LorentzVector& p4, } } +TkMuon::TkMuon(const LorentzVector& p4, + const edm::Ref& emtfRef, + const edm::Ptr& trackPtr, + float tkisol) + : L1Candidate(p4), emtfTrk_(emtfRef), trkPtr_(trackPtr), theIsolation(tkisol), TrkzVtx_(999), quality_(999) { + if (trkPtr_.isNonnull()) { + setTrkzVtx(trkPtr()->POCA().z()); + } +} + TkMuon::TkMuon(const LorentzVector& p4, const edm::Ptr& trackPtr, float tkisol) : L1Candidate(p4), trkPtr_(trackPtr), theIsolation(tkisol), TrkzVtx_(999), quality_(999) { if (trkPtr_.isNonnull()) { diff --git a/DataFormats/L1TCorrelator/src/classes_def.xml b/DataFormats/L1TCorrelator/src/classes_def.xml index 8859258d07c35..a9c156c248963 100644 --- a/DataFormats/L1TCorrelator/src/classes_def.xml +++ b/DataFormats/L1TCorrelator/src/classes_def.xml @@ -1,18 +1,19 @@ - - - - - + + + + + + - + @@ -21,6 +22,7 @@ + @@ -49,6 +51,7 @@ + @@ -66,12 +69,16 @@ - + + + + + diff --git a/DataFormats/L1TGlobal/BuildFile.xml b/DataFormats/L1TGlobal/BuildFile.xml index 3ddb67cbcc89b..ad09aa959bb19 100644 --- a/DataFormats/L1TGlobal/BuildFile.xml +++ b/DataFormats/L1TGlobal/BuildFile.xml @@ -1,5 +1,7 @@ + + diff --git a/DataFormats/L1THGCal/BuildFile.xml b/DataFormats/L1THGCal/BuildFile.xml index 48920999e41e3..a81d1b9fd188b 100644 --- a/DataFormats/L1THGCal/BuildFile.xml +++ b/DataFormats/L1THGCal/BuildFile.xml @@ -1,10 +1,11 @@ - + + diff --git a/DataFormats/L1TMuon/BuildFile.xml b/DataFormats/L1TMuon/BuildFile.xml index 71988edc547a7..93dbcf323a8ba 100644 --- a/DataFormats/L1TMuon/BuildFile.xml +++ b/DataFormats/L1TMuon/BuildFile.xml @@ -6,5 +6,6 @@ + diff --git a/DataFormats/L1TMuon/interface/EMTFTrack.h b/DataFormats/L1TMuon/interface/EMTFTrack.h index c556e768c928c..299a7d2e74b29 100644 --- a/DataFormats/L1TMuon/interface/EMTFTrack.h +++ b/DataFormats/L1TMuon/interface/EMTFTrack.h @@ -60,6 +60,8 @@ namespace l1t { second_bx(-99), pt(-99), pt_XML(-99), + pt_dxy(-99), + dxy(-99), zone(-99), ph_num(-99), ph_q(-99), @@ -70,6 +72,8 @@ namespace l1t { phi_loc(-99), phi_glob(-999), gmt_pt(-99), + gmt_pt_dxy(-99), + gmt_dxy(-99), gmt_phi(-999), gmt_eta(-999), gmt_quality(-99), @@ -135,6 +139,8 @@ namespace l1t { void set_second_bx(int bits) { second_bx = bits; } void set_pt(float val) { pt = val; } void set_pt_XML(float val) { pt_XML = val; } + void set_pt_dxy(float val) { pt_dxy = val; } + void set_dxy(float val) { dxy = val; } void set_zone(int bits) { zone = bits; } void set_ph_num(int bits) { ph_num = bits; } void set_ph_q(int bits) { ph_q = bits; } @@ -145,6 +151,8 @@ namespace l1t { void set_phi_loc(float val) { phi_loc = val; } void set_phi_glob(float val) { phi_glob = val; } void set_gmt_pt(int bits) { gmt_pt = bits; } + void set_gmt_pt_dxy(int bits) { gmt_pt_dxy = bits; } + void set_gmt_dxy(int bits) { gmt_dxy = bits; } void set_gmt_phi(int bits) { gmt_phi = bits; } void set_gmt_eta(int bits) { gmt_eta = bits; } void set_gmt_quality(int bits) { gmt_quality = bits; } @@ -169,6 +177,8 @@ namespace l1t { int Second_BX() const { return second_bx; } float Pt() const { return pt; } float Pt_XML() const { return pt_XML; } + float Pt_dxy() const { return pt_dxy; } + float Dxy() const { return dxy; } int Zone() const { return zone; } int Ph_num() const { return ph_num; } int Ph_q() const { return ph_q; } @@ -179,6 +189,8 @@ namespace l1t { float Phi_loc() const { return phi_loc; } float Phi_glob() const { return phi_glob; } int GMT_pt() const { return gmt_pt; } + int GMT_pt_dxy() const { return gmt_pt_dxy; } + int GMT_dxy() const { return gmt_dxy; } int GMT_phi() const { return gmt_phi; } int GMT_eta() const { return gmt_eta; } int GMT_quality() const { return gmt_quality; } @@ -209,6 +221,8 @@ namespace l1t { int second_bx; // -3 - +3. float pt; // 0 - 255 float pt_XML; // 0 - 999 + float pt_dxy; // 0 - 127 + float dxy; // 0 - 3 int zone; // 0 - 3. int ph_num; int ph_q; @@ -219,6 +233,8 @@ namespace l1t { float phi_loc; // -22 - 60 (Range? - AWB 03.03.17) float phi_glob; // +/-180. int gmt_pt; + int gmt_pt_dxy; + int gmt_dxy; int gmt_phi; int gmt_eta; int gmt_quality; diff --git a/DataFormats/L1TParticleFlow/BuildFile.xml b/DataFormats/L1TParticleFlow/BuildFile.xml index 4e9d33aae5bf7..c647cee335b3c 100644 --- a/DataFormats/L1TParticleFlow/BuildFile.xml +++ b/DataFormats/L1TParticleFlow/BuildFile.xml @@ -1,5 +1,9 @@ + + + + diff --git a/DataFormats/L1TParticleFlow/interface/HPSPFTau.h b/DataFormats/L1TParticleFlow/interface/HPSPFTau.h new file mode 100644 index 0000000000000..3fbc7f64fd59b --- /dev/null +++ b/DataFormats/L1TParticleFlow/interface/HPSPFTau.h @@ -0,0 +1,145 @@ +#ifndef DataFormats_L1TParticleFlow_HPSPFTau_H +#define DataFormats_L1TParticleFlow_HPSPFTau_H + +#include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" // l1t::PFCandidate, l1t::PFCandidateRef, l1t::PFCandidateRefVector +#include "DataFormats/L1TParticleFlow/interface/PFJet.h" // l1t::PFJet, l1t::PFJetCollection, l1t::PFJetRef +#include "DataFormats/Candidate/interface/LeafCandidate.h" // reco::LeafCandidate +#include "DataFormats/Candidate/interface/Particle.h" // reco::Particle::LorentzVector +#include "DataFormats/L1TCorrelator/interface/TkPrimaryVertex.h" + +#include + +namespace l1t { + + class HPSPFTau : public reco::LeafCandidate { + public: + /// default constructor + HPSPFTau(); + + /// destructor + ~HPSPFTau() override; + + /// accessor functions for reco level quantities + bool isChargedPFCandSeeded() const { return seedChargedPFCand_.isNonnull(); } + bool isPFJetSeeded() const { return seedPFJet_.isNonnull(); } + + const l1t::PFCandidateRef& seedChargedPFCand() const { return seedChargedPFCand_; } + const l1t::PFJetRef& seedPFJet() const { return seedPFJet_; } + const l1t::PFCandidateRef& leadChargedPFCand() const { return leadChargedPFCand_; } + + const l1t::PFCandidateRefVector& signalAllL1PFCandidates() const { return signalAllL1PFCandidates_; } + const l1t::PFCandidateRefVector& signalChargedHadrons() const { return signalChargedHadrons_; } + const l1t::PFCandidateRefVector& signalElectrons() const { return signalElectrons_; } + const l1t::PFCandidateRefVector& signalNeutralHadrons() const { return signalNeutralHadrons_; } + const l1t::PFCandidateRefVector& signalPhotons() const { return signalPhotons_; } + const l1t::PFCandidateRefVector& signalMuons() const { return signalMuons_; } + + const l1t::PFCandidateRefVector& stripAllL1PFCandidates() const { return stripAllL1PFCandidates_; } + const l1t::PFCandidateRefVector& stripElectrons() const { return stripElectrons_; } + const l1t::PFCandidateRefVector& stripPhotons() const { return stripPhotons_; } + + const l1t::PFCandidateRefVector& isoAllL1PFCandidates() const { return isoAllL1PFCandidates_; } + const l1t::PFCandidateRefVector& isoChargedHadrons() const { return isoChargedHadrons_; } + const l1t::PFCandidateRefVector& isoElectrons() const { return isoElectrons_; } + const l1t::PFCandidateRefVector& isoNeutralHadrons() const { return isoNeutralHadrons_; } + const l1t::PFCandidateRefVector& isoPhotons() const { return isoPhotons_; } + const l1t::PFCandidateRefVector& isoMuons() const { return isoMuons_; } + + const l1t::PFCandidateRefVector& sumAllL1PFCandidates() const { return sumAllL1PFCandidates_; } + const l1t::PFCandidateRefVector& sumChargedHadrons() const { return sumChargedHadrons_; } + const l1t::PFCandidateRefVector& sumElectrons() const { return sumElectrons_; } + const l1t::PFCandidateRefVector& sumNeutralHadrons() const { return sumNeutralHadrons_; } + const l1t::PFCandidateRefVector& sumPhotons() const { return sumPhotons_; } + const l1t::PFCandidateRefVector& sumMuons() const { return sumMuons_; } + + const l1t::TkPrimaryVertexRef& primaryVertex() const { return primaryVertex_; } + + enum Kind { kUndefined, kOneProng0Pi0, kOneProng1Pi0, kThreeProng0Pi0, kThreeProng1Pi0 }; + Kind tauType() const { return tauType_; } + + const reco::Particle::LorentzVector& strip_p4() const { return strip_p4_; } + + float sumAllL1PFCandidates_pt() const { return sumAllL1PFCandidates_pt_; } + float signalConeSize() const { return signalConeSize_; } + float isolationConeSize() const { return signalConeSize_; } + + float sumChargedIso() const { return sumChargedIso_; } + float sumNeutralIso() const { return sumNeutralIso_; } + float sumCombinedIso() const { return sumCombinedIso_; } + float sumChargedIsoPileup() const { return sumChargedIsoPileup_; } + float rhoCorr() const { return rhoCorr_; } + + bool passTightIso() const { return passTightIso_; } + bool passMediumIso() const { return passMediumIso_; } + bool passLooseIso() const { return passLooseIso_; } + bool passVLooseIso() const { return passVLooseIso_; } + + bool passTightRelIso() const { return passTightRelIso_; } + bool passMediumRelIso() const { return passMediumRelIso_; } + bool passLooseRelIso() const { return passLooseRelIso_; } + bool passVLooseRelIso() const { return passVLooseRelIso_; } + + private: + l1t::PFCandidateRef seedChargedPFCand_; + l1t::PFJetRef seedPFJet_; + l1t::PFCandidateRef leadChargedPFCand_; + + l1t::PFCandidateRefVector signalAllL1PFCandidates_; + l1t::PFCandidateRefVector signalChargedHadrons_; + l1t::PFCandidateRefVector signalElectrons_; + l1t::PFCandidateRefVector signalNeutralHadrons_; + l1t::PFCandidateRefVector signalPhotons_; + l1t::PFCandidateRefVector signalMuons_; + + l1t::PFCandidateRefVector stripAllL1PFCandidates_; + l1t::PFCandidateRefVector stripElectrons_; + l1t::PFCandidateRefVector stripPhotons_; + + l1t::PFCandidateRefVector isoAllL1PFCandidates_; + l1t::PFCandidateRefVector isoChargedHadrons_; + l1t::PFCandidateRefVector isoElectrons_; + l1t::PFCandidateRefVector isoNeutralHadrons_; + l1t::PFCandidateRefVector isoPhotons_; + l1t::PFCandidateRefVector isoMuons_; + + l1t::PFCandidateRefVector sumAllL1PFCandidates_; + l1t::PFCandidateRefVector sumChargedHadrons_; + l1t::PFCandidateRefVector sumElectrons_; + l1t::PFCandidateRefVector sumNeutralHadrons_; + l1t::PFCandidateRefVector sumPhotons_; + l1t::PFCandidateRefVector sumMuons_; + + l1t::TkPrimaryVertexRef primaryVertex_; + Kind tauType_; + + reco::Particle::LorentzVector strip_p4_; + + float sumAllL1PFCandidates_pt_; + float signalConeSize_; + float isolationConeSize_; + + float sumChargedIso_; + float sumNeutralIso_; + float sumCombinedIso_; + float sumChargedIsoPileup_; // charged PFCands failing dz cut (maybe useful to correct neutral isolation for pile-up contributions by applying delta-beta corrections) + float rhoCorr_; // rho correction (maybe useful for applying pile-up corrections to neutral isolation) + + bool passTightIso_; + bool passMediumIso_; + bool passLooseIso_; + bool passVLooseIso_; + + bool passTightRelIso_; + bool passMediumRelIso_; + bool passLooseRelIso_; + bool passVLooseRelIso_; + }; + + void printPFCand(ostream& os, const l1t::PFCandidate& l1PFCand, const l1t::TkPrimaryVertexRef& primaryVertex); + void printPFCand(ostream& os, const l1t::PFCandidate& l1PFCand, float primaryVertex_z); +} // namespace l1t + +/// print to stream +std::ostream& operator<<(std::ostream& os, const l1t::HPSPFTau& l1PFTau); + +#endif diff --git a/DataFormats/L1TParticleFlow/interface/HPSPFTauFwd.h b/DataFormats/L1TParticleFlow/interface/HPSPFTauFwd.h new file mode 100644 index 0000000000000..6d9af0e32ed98 --- /dev/null +++ b/DataFormats/L1TParticleFlow/interface/HPSPFTauFwd.h @@ -0,0 +1,19 @@ +#ifndef DataFormats_L1TParticleFlow_HPSPFTauFwd_H +#define DataFormats_L1TParticleFlow_HPSPFTauFwd_H + +#include +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/Common/interface/RefVector.h" + +namespace l1t { + + class HPSPFTau; + + typedef std::vector HPSPFTauCollection; + + typedef edm::Ref HPSPFTauRef; + typedef edm::RefVector HPSPFTauRefVector; + typedef std::vector HPSPFTauVectorRef; +} // namespace l1t + +#endif diff --git a/DataFormats/L1TParticleFlow/interface/PFJet.h b/DataFormats/L1TParticleFlow/interface/PFJet.h index 04c929cd4541e..b1aac33e439d2 100644 --- a/DataFormats/L1TParticleFlow/interface/PFJet.h +++ b/DataFormats/L1TParticleFlow/interface/PFJet.h @@ -43,5 +43,6 @@ namespace l1t { typedef std::vector PFJetCollection; typedef edm::Ref PFJetRef; + typedef std::vector PFJetVectorRef; } // namespace l1t #endif diff --git a/DataFormats/L1TParticleFlow/interface/PFTau.h b/DataFormats/L1TParticleFlow/interface/PFTau.h index a772ee4375b4c..3899d703bef95 100644 --- a/DataFormats/L1TParticleFlow/interface/PFTau.h +++ b/DataFormats/L1TParticleFlow/interface/PFTau.h @@ -59,5 +59,9 @@ namespace l1t { }; typedef std::vector PFTauCollection; + + typedef edm::Ref PFTauRef; + typedef edm::RefVector PFTauRefVector; + typedef std::vector PFTauVectorRef; } // namespace l1t #endif diff --git a/DataFormats/L1TParticleFlow/interface/PFTrack.h b/DataFormats/L1TParticleFlow/interface/PFTrack.h index b814f9a33ec41..8c226e39696c4 100644 --- a/DataFormats/L1TParticleFlow/interface/PFTrack.h +++ b/DataFormats/L1TParticleFlow/interface/PFTrack.h @@ -83,5 +83,7 @@ namespace l1t { typedef std::vector PFTrackCollection; typedef edm::Ref PFTrackRef; + typedef edm::RefVector PFTrackRefVector; + typedef std::vector PFTrackVectorRef; } // namespace l1t #endif diff --git a/DataFormats/L1TParticleFlow/src/HPSPFTau.cc b/DataFormats/L1TParticleFlow/src/HPSPFTau.cc new file mode 100644 index 0000000000000..3eb8f7526e178 --- /dev/null +++ b/DataFormats/L1TParticleFlow/src/HPSPFTau.cc @@ -0,0 +1,90 @@ +#include "DataFormats/L1TParticleFlow/interface/HPSPFTau.h" +#include "FWCore/Utilities/interface/Exception.h" + +// default constructor +l1t::HPSPFTau::HPSPFTau() + : tauType_(kUndefined), + sumChargedIso_(0.), + sumNeutralIso_(0.), + sumCombinedIso_(0.), + sumChargedIsoPileup_(0.), + rhoCorr_(0.), + passTightIso_(false), + passMediumIso_(false), + passLooseIso_(false), + passVLooseIso_(false), + passTightRelIso_(false), + passMediumRelIso_(false), + passLooseRelIso_(false), + passVLooseRelIso_(false) {} + +// destructor +l1t::HPSPFTau::~HPSPFTau() {} + +// print to stream +ostream& operator<<(ostream& os, const l1t::HPSPFTau& l1PFTau) { + os << "pT = " << l1PFTau.pt() << ", eta = " << l1PFTau.eta() << ", phi = " << l1PFTau.phi() + << " (type = " << l1PFTau.tauType() << ")" << std::endl; + os << "lead. ChargedPFCand:" << std::endl; + if (l1PFTau.leadChargedPFCand().isNonnull()) { + printPFCand(os, *l1PFTau.leadChargedPFCand(), l1PFTau.primaryVertex()); + } else { + os << " N/A" << std::endl; + } + os << "seed:"; + if (l1PFTau.isChargedPFCandSeeded()) { + os << " chargedPFCand"; + } else if (l1PFTau.isPFJetSeeded()) { + os << " PFJet"; + } else { + cms::Exception ex("InconsistentTau"); + ex.addContext("Calling HPSPFTau::operator <<"); + ex.addAdditionalInfo("This tau is not seed by either a chargedPFCand or a PFJet!"); + throw ex; + } + os << std::endl; + os << "signalPFCands:" << std::endl; + for (const auto& l1PFCand : l1PFTau.signalAllL1PFCandidates()) { + printPFCand(os, *l1PFCand, l1PFTau.primaryVertex()); + } + os << "stripPFCands:" << std::endl; + for (const auto& l1PFCand : l1PFTau.stripAllL1PFCandidates()) { + printPFCand(os, *l1PFCand, l1PFTau.primaryVertex()); + } + os << "strip pT = " << l1PFTau.strip_p4().pt() << std::endl; + os << "isolationPFCands:" << std::endl; + for (const auto& l1PFCand : l1PFTau.isoAllL1PFCandidates()) { + printPFCand(os, *l1PFCand, l1PFTau.primaryVertex()); + } + os << "isolation pT-sum: charged = " << l1PFTau.sumChargedIso() << ", neutral = " << l1PFTau.sumNeutralIso() + << " (charged from pileup = " << l1PFTau.sumChargedIsoPileup() << ")" << std::endl; + return os; +} + +void l1t::printPFCand(ostream& os, const l1t::PFCandidate& l1PFCand, const l1t::TkPrimaryVertexRef& primaryVertex) { + float primaryVertex_z = (primaryVertex.isNonnull()) ? primaryVertex->zvertex() : 0.; + l1t::printPFCand(os, l1PFCand, primaryVertex_z); +} + +void l1t::printPFCand(ostream& os, const l1t::PFCandidate& l1PFCand, float primaryVertex_z) { + std::string type_string; + if (l1PFCand.id() == l1t::PFCandidate::ChargedHadron) + type_string = "PFChargedHadron"; + else if (l1PFCand.id() == l1t::PFCandidate::Electron) + type_string = "PFElectron"; + else if (l1PFCand.id() == l1t::PFCandidate::NeutralHadron) + type_string = "PFNeutralHadron"; + else if (l1PFCand.id() == l1t::PFCandidate::Photon) + type_string = "PFPhoton"; + else if (l1PFCand.id() == l1t::PFCandidate::Muon) + type_string = "PFMuon"; + else + type_string = "N/A"; + os << " " << type_string << " with pT = " << l1PFCand.pt() << ", eta = " << l1PFCand.eta() + << ", phi = " << l1PFCand.phi() << "," + << " mass = " << l1PFCand.mass() << ", charge = " << l1PFCand.charge(); + if (l1PFCand.charge() != 0 && primaryVertex_z != 0.) { + os << " (dz = " << std::fabs(l1PFCand.pfTrack()->vertex().z() - primaryVertex_z) << ")"; + } + os << std::endl; +} diff --git a/DataFormats/L1TParticleFlow/src/classes.h b/DataFormats/L1TParticleFlow/src/classes.h index e9ccdefb39774..b172ea6512b3c 100644 --- a/DataFormats/L1TParticleFlow/src/classes.h +++ b/DataFormats/L1TParticleFlow/src/classes.h @@ -6,3 +6,5 @@ #include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" #include "DataFormats/L1TParticleFlow/interface/PFJet.h" #include "DataFormats/L1TParticleFlow/interface/PFTau.h" +#include "DataFormats/L1TParticleFlow/interface/HPSPFTau.h" +#include "DataFormats/L1TParticleFlow/interface/HPSPFTauFwd.h" diff --git a/DataFormats/L1TParticleFlow/src/classes_def.xml b/DataFormats/L1TParticleFlow/src/classes_def.xml index 3f6406f8bafb2..21831204808af 100644 --- a/DataFormats/L1TParticleFlow/src/classes_def.xml +++ b/DataFormats/L1TParticleFlow/src/classes_def.xml @@ -16,6 +16,7 @@ + @@ -32,6 +33,7 @@ + @@ -40,6 +42,15 @@ + + + + + + + + + diff --git a/DataFormats/L1TrackTrigger/BuildFile.xml b/DataFormats/L1TrackTrigger/BuildFile.xml index 54723d87ca386..81cd982c6b40d 100644 --- a/DataFormats/L1TrackTrigger/BuildFile.xml +++ b/DataFormats/L1TrackTrigger/BuildFile.xml @@ -5,6 +5,9 @@ + + + diff --git a/DataFormats/L1TrackTrigger/interface/L1Track.h b/DataFormats/L1TrackTrigger/interface/L1Track.h new file mode 100644 index 0000000000000..2cc2d83c79fec --- /dev/null +++ b/DataFormats/L1TrackTrigger/interface/L1Track.h @@ -0,0 +1,11 @@ +#ifndef DataFormats_L1TrackTrigger_L1Track_h +#define DataFormats_L1TrackTrigger_L1Track_h + +#include "DataFormats/L1TrackTrigger/interface/TTTrack.h" +#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" +#include + +using L1Track = TTTrack; +using L1TrackCollection = std::vector; + +#endif diff --git a/DataFormats/L1TrackTrigger/interface/L1TrackTruthPair.h b/DataFormats/L1TrackTrigger/interface/L1TrackTruthPair.h new file mode 100644 index 0000000000000..1e936536c1ecf --- /dev/null +++ b/DataFormats/L1TrackTrigger/interface/L1TrackTruthPair.h @@ -0,0 +1,11 @@ +#ifndef DataFormats_L1TrackTrigger_L1TrackTruthPair_h +#define DataFormats_L1TrackTrigger_L1TrackTruthPair_h + +#include "DataFormats/L1TrackTrigger/interface/TTTrackTruthPair.h" +#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" +#include + +using L1TrackTruthPair = TTTrackTruthPair; +using L1TrackTruthPairCollection = std::vector; + +#endif diff --git a/DataFormats/L1TrackTrigger/interface/TTTrack.h b/DataFormats/L1TrackTrigger/interface/TTTrack.h index afc30174a2468..f85c98dfcd27e 100644 --- a/DataFormats/L1TrackTrigger/interface/TTTrack.h +++ b/DataFormats/L1TrackTrigger/interface/TTTrack.h @@ -16,12 +16,15 @@ #include "CLHEP/Units/GlobalPhysicalConstants.h" #include "DataFormats/L1TrackTrigger/interface/TTStub.h" #include "DataFormats/L1TrackTrigger/interface/TTTrack_TrackWord.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/Common/interface/DetSetVectorNew.h" #include "DataFormats/TrackerCommon/interface/TrackerTopology.h" #include "DataFormats/SiStripDetId/interface/StripSubdetector.h" #include "DataFormats/Phase2TrackerDigi/interface/Phase2TrackerDigi.h" +namespace tttrack { + void errorSetTrackWordBits(unsigned int); +} + template class TTTrack : public TTTrack_TrackWord { private: @@ -119,8 +122,11 @@ class TTTrack : public TTTrack_TrackWord { /// MVA Track quality variables double trkMVA1() const; + void settrkMVA1(double atrkMVA1); double trkMVA2() const; + void settrkMVA2(double atrkMVA2); double trkMVA3() const; + void settrkMVA3(double atrkMVA3); /// Phi Sector unsigned int phiSector() const { return thePhiSector_; } @@ -353,22 +359,39 @@ double TTTrack::chi2ZRed() const { return theChi2_Z_ / (theStubRefs.size() - 2.); } -/// MVA quality variables template double TTTrack::trkMVA1() const { return theTrkMVA1_; } +template +void TTTrack::settrkMVA1(double atrkMVA1) { + theTrkMVA1_ = atrkMVA1; + return; +} + template double TTTrack::trkMVA2() const { return theTrkMVA2_; } +template +void TTTrack::settrkMVA2(double atrkMVA2) { + theTrkMVA2_ = atrkMVA2; + return; +} + template double TTTrack::trkMVA3() const { return theTrkMVA3_; } +template +void TTTrack::settrkMVA3(double atrkMVA3) { + theTrkMVA3_ = atrkMVA3; + return; +} + /// StubPtConsistency template void TTTrack::setStubPtConsistency(double aStubPtConsistency) { @@ -402,8 +425,7 @@ void TTTrack::setBField(double aBField) { template void TTTrack::setTrackWordBits() { if (!(theNumFitPars_ == Npars4 || theNumFitPars_ == Npars5)) { - edm::LogError("TTTrack") << " setTrackWordBits method is called with theNumFitPars_=" << theNumFitPars_ - << " only possible values are 4/5" << std::endl; + tttrack::errorSetTrackWordBits(theNumFitPars_); return; } diff --git a/DataFormats/L1TrackTrigger/interface/TTTrackTruthPair.h b/DataFormats/L1TrackTrigger/interface/TTTrackTruthPair.h new file mode 100644 index 0000000000000..f0f70daf8d7a2 --- /dev/null +++ b/DataFormats/L1TrackTrigger/interface/TTTrackTruthPair.h @@ -0,0 +1,39 @@ +#ifndef DataFormats_L1TrackTrigger_TTrackTruthPair_h +#define DataFormats_L1TrackTrigger_TTrackTruthPair_h + +#include "DataFormats/L1TrackTrigger/interface/TTTrack.h" +#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" +#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" + +//The goal of this class is to allow easier access in FWLite where references can be hard to get +//By storing a reference to the track and the tracking particle as well as the flags, it makes it much easier + +template +class TTTrackTruthPair { +public: + struct StatusFlags { + enum Status { IsGenuine = 0x1, IsLooselyGenuine = 0x2, IsCombinatoric = 0x4, IsUnknown = 0x8 }; + }; + +private: + edm::Ref > > ttTrkRef_; + edm::Ref trkPartRef_; + char flags_; + +public: + TTTrackTruthPair() : flags_(0) {} + TTTrackTruthPair(const edm::Ref > >& ttTrkRef, + const edm::Ref& trkPartRef, + int flags) + : ttTrkRef_(ttTrkRef), trkPartRef_(trkPartRef), flags_(flags) {} + + edm::Ref > > ttTrk() const { return ttTrkRef_; } + edm::Ref trkPart() const { return trkPartRef_; } + int flags() const { return flags_; } + bool isGenuine() const { return (flags_ & StatusFlags::IsGenuine) != 0; } + bool isLooselyGenuine() const { return (flags_ & StatusFlags::IsLooselyGenuine) != 0; } + bool isCombinatoric() const { return (flags_ & StatusFlags::IsCombinatoric) != 0; } + bool isUnknown() const { return (flags_ & StatusFlags::IsUnknown) != 0; } +}; + +#endif diff --git a/DataFormats/L1TrackTrigger/interface/TTTypes.h b/DataFormats/L1TrackTrigger/interface/TTTypes.h index b78ce53efd8a4..cf739f7161253 100644 --- a/DataFormats/L1TrackTrigger/interface/TTTypes.h +++ b/DataFormats/L1TrackTrigger/interface/TTTypes.h @@ -19,15 +19,31 @@ #include "DataFormats/L1TrackTrigger/interface/TTTrack.h" #include "DataFormats/L1TrackTrigger/interface/TTTrack_TrackWord.h" -/// The reference types -typedef edm::Ref, Phase2TrackerDigi> Ref_Phase2TrackerDigi_; +/// Templated aliases +template +using TTClusterDetSetVecT = edmNew::DetSetVector >; +template +using TTStubDetSetVecT = edmNew::DetSetVector >; + +template +using TTClusterRefT = edm::Ref, TTCluster >; +template +using TTStubRefT = edm::Ref, TTStub >; -typedef edmNew::DetSetVector > TTClusterDetSetVec; -typedef edmNew::DetSetVector > TTStubDetSetVec; +template +using TTTrackPtrT = edm::Ptr >; -typedef edm::Ref > TTStubRef; -typedef edm::Ref > TTClusterRef; +/// Specialized aliases +typedef edm::Ref, Phase2TrackerDigi> Ref_Phase2TrackerDigi_; typedef edmNew::DetSet > TTStubDetSet; +typedef TTClusterDetSetVecT TTClusterDetSetVec; +typedef TTStubDetSetVecT TTStubDetSetVec; + +typedef TTClusterRefT TTClusterRef; +typedef TTStubRefT TTStubRef; + +typedef TTTrackPtrT TTTrackPtr; + #endif diff --git a/DataFormats/L1TrackTrigger/src/TTTrack.cc b/DataFormats/L1TrackTrigger/src/TTTrack.cc new file mode 100644 index 0000000000000..4f3b7d53ffe00 --- /dev/null +++ b/DataFormats/L1TrackTrigger/src/TTTrack.cc @@ -0,0 +1,7 @@ +#include "DataFormats/L1TrackTrigger/interface/TTTrack.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +void tttrack::errorSetTrackWordBits(unsigned int theNumFitPars) { + edm::LogError("TTTrack") << " setTrackWordBits method is called with theNumFitPars_=" << theNumFitPars + << " only possible values are 4/5" << std::endl; +} diff --git a/DataFormats/L1TrackTrigger/src/TTTrackTruthPair.cc b/DataFormats/L1TrackTrigger/src/TTTrackTruthPair.cc new file mode 100644 index 0000000000000..8b75d2354fbc2 --- /dev/null +++ b/DataFormats/L1TrackTrigger/src/TTTrackTruthPair.cc @@ -0,0 +1 @@ +#include "DataFormats/L1TrackTrigger/interface/TTTrackTruthPair.h" diff --git a/DataFormats/L1TrackTrigger/src/TTTrack_TrackWord.cc b/DataFormats/L1TrackTrigger/src/TTTrack_TrackWord.cc index 5e7e1bc4469e3..27fd5b30a55b9 100644 --- a/DataFormats/L1TrackTrigger/src/TTTrack_TrackWord.cc +++ b/DataFormats/L1TrackTrigger/src/TTTrack_TrackWord.cc @@ -95,22 +95,16 @@ void TTTrack_TrackWord::setTrackWord(const GlobalVector& Momentum, // bin, convert to integers, and pack - unsigned int seg1, seg2, seg3; - seg1 = 0; - seg2 = 0; - seg3 = 0; + unsigned int seg1, seg2, seg3, seg4; //tanl - itanl = digitize_Signed(rTanl, NTanlBits, 0, valLSBTanl); //z0 iz0 = digitize_Signed(rZ0, NZ0Bits, 0, valLSBZ0); //chi2 has non-linear bins - ichi2XY = 0; - for (unsigned int ibin = 0; ibin < Nchi2; ++ibin) { ichi2XY = ibin; if (theChi2XY < chi2Bins[ibin]) @@ -118,9 +112,7 @@ void TTTrack_TrackWord::setTrackWord(const GlobalVector& Momentum, } //chi2Z has non-linear bins - ichi2Z = 0; - for (unsigned int ibin = 0; ibin < Nchi2; ++ibin) { ichi2Z = ibin; if (theChi2Z < chi2ZBins[ibin]) @@ -138,7 +130,6 @@ void TTTrack_TrackWord::setTrackWord(const GlobalVector& Momentum, //bend chi2 - non-linear bins iBendChi2 = 0; - for (unsigned int ibin = 0; ibin < NBchi2; ++ibin) { iBendChi2 = ibin; if (theBendChi2 < Bchi2Bins[ibin]) @@ -171,11 +162,9 @@ void TTTrack_TrackWord::setTrackWord(const GlobalVector& Momentum, //set bits TrackWord1 = seg1 + seg2 + seg3; - seg1 = 0; - seg2 = 0; - seg3 = 0; //second 32-bit word + seg1 = (iphi << (nWordBits - (NPhiBits + 1))); //20 seg2 = (id0 << (nWordBits - (NPhiBits + ND0Bits + 2))); //7 @@ -185,16 +174,13 @@ void TTTrack_TrackWord::setTrackWord(const GlobalVector& Momentum, //set bits TrackWord2 = seg1 + seg2 + seg3; - seg1 = 0; - seg2 = 0; - seg3 = 0; //third 32-bit word seg1 = (iRinv << (nWordBits - (NCurvBits + 1))); //17 seg2 = (iBendChi2 << (nWordBits - (NCurvBits + NBChi2Bits + 1))); //14 seg3 = (ichi2Z << (nWordBits - (NCurvBits + NBChi2Bits + NChi2Bits + 1))); //10 - unsigned int seg4 = ispare; + seg4 = ispare; TrackWord3 = seg1 + seg2 + seg3 + seg4; } diff --git a/DataFormats/L1TrackTrigger/src/classes.h b/DataFormats/L1TrackTrigger/src/classes.h index f798e6288252f..5693d6f89f49f 100644 --- a/DataFormats/L1TrackTrigger/src/classes.h +++ b/DataFormats/L1TrackTrigger/src/classes.h @@ -14,6 +14,7 @@ #include "DataFormats/Common/interface/DetSetVectorNew.h" #include "DataFormats/L1TrackTrigger/interface/TTTypes.h" #include "DataFormats/L1TrackTrigger/interface/TTDTC.h" +#include "DataFormats/L1TrackTrigger/interface/TTTrackTruthPair.h" #include "DataFormats/Common/interface/RefVector.h" #include "DataFormats/Common/interface/RefProd.h" diff --git a/DataFormats/L1TrackTrigger/src/classes_def.xml b/DataFormats/L1TrackTrigger/src/classes_def.xml index 48c4d162a39ea..b6dc09f469cee 100644 --- a/DataFormats/L1TrackTrigger/src/classes_def.xml +++ b/DataFormats/L1TrackTrigger/src/classes_def.xml @@ -23,7 +23,11 @@ - + + + + + diff --git a/DataFormats/L1Trigger/BuildFile.xml b/DataFormats/L1Trigger/BuildFile.xml index 0a412dcbebe4e..8a8f538c1545e 100644 --- a/DataFormats/L1Trigger/BuildFile.xml +++ b/DataFormats/L1Trigger/BuildFile.xml @@ -3,6 +3,7 @@ + diff --git a/DataFormats/LTCDigi/BuildFile.xml b/DataFormats/LTCDigi/BuildFile.xml index 7c537d9ebb995..38b45babc72b0 100644 --- a/DataFormats/LTCDigi/BuildFile.xml +++ b/DataFormats/LTCDigi/BuildFile.xml @@ -1,4 +1,5 @@ + diff --git a/DataFormats/Luminosity/interface/PixelClusterCounts.h b/DataFormats/Luminosity/interface/PixelClusterCounts.h index a0c7f50b22630..0a32d3f119dd4 100644 --- a/DataFormats/Luminosity/interface/PixelClusterCounts.h +++ b/DataFormats/Luminosity/interface/PixelClusterCounts.h @@ -14,8 +14,6 @@ #include #include -#include "FWCore/MessageLogger/interface/MessageLogger.h" - #include "DataFormats/Luminosity/interface/LumiConstants.h" #include "DataFormats/Luminosity/interface/PixelClusterCountsInEvent.h" diff --git a/DataFormats/METReco/BuildFile.xml b/DataFormats/METReco/BuildFile.xml index 3990ea2805e11..7685b66a36e88 100644 --- a/DataFormats/METReco/BuildFile.xml +++ b/DataFormats/METReco/BuildFile.xml @@ -3,6 +3,17 @@ + + + + + + + + + + + diff --git a/DataFormats/METReco/interface/HcalHaloData.h b/DataFormats/METReco/interface/HcalHaloData.h index 31a11af8943ea..c13694d54241b 100644 --- a/DataFormats/METReco/interface/HcalHaloData.h +++ b/DataFormats/METReco/interface/HcalHaloData.h @@ -12,7 +12,7 @@ #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/CaloTowers/interface/CaloTowerDetId.h" #include "DataFormats/METReco/interface/HaloClusterCandidateHCAL.h" -#include "DataFormats/VertexReco/interface/Vertex.h" + struct HaloTowerStrip { std::vector > cellTowerIds; float hadEt; diff --git a/DataFormats/Math/BuildFile.xml b/DataFormats/Math/BuildFile.xml index ca9295240cdec..5f8b2dd514ddc 100644 --- a/DataFormats/Math/BuildFile.xml +++ b/DataFormats/Math/BuildFile.xml @@ -1,6 +1,7 @@ + diff --git a/DataFormats/Math/interface/GeantUnits.h b/DataFormats/Math/interface/GeantUnits.h index 43a5f3d4c27f2..382c895e9e960 100644 --- a/DataFormats/Math/interface/GeantUnits.h +++ b/DataFormats/Math/interface/GeantUnits.h @@ -82,6 +82,18 @@ namespace geant_units { return (mm3 / 1.e9); } + template + inline constexpr NumType convertMeVToGeV(NumType mev) // MeV -> GeV + { + return (mev * 0.001); + } + + template + inline constexpr NumType convertGeVToMeV(NumType gev) // GeV -> MeV + { + return (gev * 1000.); + } + // Convert Geant units to desired units template inline constexpr NumType convertUnitsTo(long double desiredUnits, NumType val) { diff --git a/DataFormats/MuonDetId/interface/CSCDetId.h b/DataFormats/MuonDetId/interface/CSCDetId.h index 27339f9bb050c..c0006422689ac 100644 --- a/DataFormats/MuonDetId/interface/CSCDetId.h +++ b/DataFormats/MuonDetId/interface/CSCDetId.h @@ -98,8 +98,8 @@ class CSCDetId : public DetId { /** * Geometric channel no. from geometric strip no. - identical except for ME1a ganged strips * - * Note that 'Geometric' means increasing number corresponds to increasing local x coordinate. - * \warning There is no attempt here to handle cabling or readout questions. + * Note that 'Geometric' means increasing number corresponds to increasing local x coordinate. + * \warning There is no attempt here to handle cabling or readout questions. * If you need that look at CondFormats/CSCObjects/CSCChannelTranslator. */ int channel(int istrip) { @@ -114,7 +114,7 @@ class CSCDetId : public DetId { // static methods // Used when we need information about subdetector labels. - /** + /** * Returns the unique integer 'rawId' which labels each CSC layer. * * The arguments are the integer labels for, respectively,
@@ -191,7 +191,7 @@ class CSCDetId : public DetId { * Sectors are 60 degree slices of a station, covering both rings.
* For Station 1, there are subsectors of 30 degrees: 9 10-degree * chambers (3 each from ME1/1, ME1/2, ME1/3.)
- * + * * The first sector starts at phi = 15 degrees so it matches Barrel Muon sectors. * We count from one not zero. * @@ -201,9 +201,9 @@ class CSCDetId : public DetId { /** * Return trigger-level CSC id within a sector for an Endcap Muon chamber. * - * This id is an index within a sector such that the 3 inner ring chambers - * (20 degrees each) are 1, 2, 3 (increasing counterclockwise) and the 6 outer ring - * chambers (10 degrees each) are 4, 5, 6, 7, 8, 9 (again increasing counter-clockwise.) + * This id is an index within a sector such that the 3 inner ring chambers + * (20 degrees each) are 1, 2, 3 (increasing counterclockwise) and the 6 outer ring + * chambers (10 degrees each) are 4, 5, 6, 7, 8, 9 (again increasing counter-clockwise.) * * This method knows which chambers are part of which sector and returns * the chamber label/index/identifier accordingly. @@ -232,6 +232,7 @@ class CSCDetId : public DetId { * ME$sign$station/$ring/$chamber. Example: ME+1/1/9 */ static std::string chamberName(int endcap, int station, int ring, int chamber); + static std::string chamberName(int iChamberType); std::string chamberName() const; private: diff --git a/DataFormats/MuonDetId/interface/GEMDetId.h b/DataFormats/MuonDetId/interface/GEMDetId.h index 4e155a594d307..e234726d77efa 100644 --- a/DataFormats/MuonDetId/interface/GEMDetId.h +++ b/DataFormats/MuonDetId/interface/GEMDetId.h @@ -30,8 +30,10 @@ class GEMDetId : public DetId { static constexpr int32_t minLayerId = 0; // LayerId = 0 is superChamber static constexpr int32_t maxLayerId0 = 6; static constexpr int32_t maxLayerId = 2; // GE1/GE2 has 2 layers - static constexpr int32_t minRollId = 0; - static constexpr int32_t maxRollId = 16; + static constexpr int32_t minEtaPartitionId = 0; + static constexpr int32_t maxEtaPartitionId = 16; + static constexpr int32_t minRollId = minEtaPartitionId; + static constexpr int32_t maxRollId = maxEtaPartitionId; private: static constexpr uint32_t RegionNumBits = 2; @@ -53,19 +55,19 @@ class GEMDetId : public DetId { static constexpr uint32_t LayerStartBitM = ChamberStartBitM + ChamberNumBits; static constexpr uint32_t LayerMask = 0x1F; static constexpr uint32_t LayerMaskP = 0x3; - static constexpr uint32_t RollNumBits = 5; - static constexpr uint32_t RollStartBit = LayerStartBit + LayerNumBits; - static constexpr uint32_t RollStartBitP = LayerStartBit + LayerNumBitsP; - static constexpr uint32_t RollStartBitM = LayerStartBitM + LayerNumBits; - static constexpr uint32_t RollMask = 0x1F; + static constexpr uint32_t EtaPartitionNumBits = 5; + static constexpr uint32_t EtaPartitionStartBit = LayerStartBit + LayerNumBits; + static constexpr uint32_t EtaPartitionStartBitP = LayerStartBit + LayerNumBitsP; + static constexpr uint32_t EtaPartitionStartBitM = LayerStartBitM + LayerNumBits; + static constexpr uint32_t EtaPartitionMask = 0x1F; static constexpr uint32_t FormatNumBits = 1; - static constexpr uint32_t FormatStartBit = RollStartBit + RollNumBits; + static constexpr uint32_t FormatStartBit = EtaPartitionStartBit + EtaPartitionNumBits; static constexpr uint32_t FormatMask = 0x1; static constexpr uint32_t kGEMIdFormat = 0x1000000; static constexpr uint32_t kMuonIdMask = 0xF0000000; public: - static constexpr uint32_t chamberIdMask = ~(RollMask << RollStartBit); + static constexpr uint32_t chamberIdMask = ~(EtaPartitionMask << EtaPartitionStartBit); static constexpr uint32_t superChamberIdMask = chamberIdMask + ~(LayerMask << LayerStartBit); public: @@ -90,25 +92,26 @@ class GEMDetId : public DetId { id_ = v12Form(id.rawId()); } /// Construct from fully qualified identifier. - constexpr GEMDetId(int region, int ring, int station, int layer, int chamber, int roll) + constexpr GEMDetId(int region, int ring, int station, int layer, int chamber, int ieta) : DetId(DetId::Muon, MuonSubdetId::GEM) { if (region < minRegionId || region > maxRegionId || ring < minRingId || ring > maxRingId || station < minStationId0 || station > maxStationId || layer < minLayerId || layer > maxLayerId0 || - chamber < minChamberId || chamber > maxChamberId || roll < minRollId || roll > maxRollId) + chamber < minChamberId || chamber > maxChamberId || ieta < minEtaPartitionId || ieta > maxEtaPartitionId) throw cms::Exception("InvalidDetId") << "GEMDetId ctor: Invalid parameters: region " << region << " ring " << ring << " station " << station - << " layer " << layer << " chamber " << chamber << " roll " << roll << std::endl; + << " layer " << layer << " chamber " << chamber << " ieta " << ieta << std::endl; int regionInBits = region - minRegionId; int ringInBits = ring - minRingId; int stationInBits = station - minStationId0; int layerInBits = layer - minLayerId; int chamberInBits = chamber - (minChamberId + 1); - int rollInBits = roll; + int ietaInBits = ieta; id_ |= ((regionInBits & RegionMask) << RegionStartBit | (ringInBits & RingMask) << RingStartBit | (stationInBits & StationMask) << StationStartBit | (layerInBits & LayerMask) << LayerStartBit | - (chamberInBits & ChamberMask) << ChamberStartBit | (rollInBits & RollMask) << RollStartBit | kGEMIdFormat); + (chamberInBits & ChamberMask) << ChamberStartBit | (ietaInBits & EtaPartitionMask) << EtaPartitionStartBit | + kGEMIdFormat); } /** Assignment from a generic cell id */ @@ -133,19 +136,19 @@ class GEMDetId : public DetId { uint32_t rawid = gen.rawId(); if (rawid == id_) return true; - int reg(0), ri(0), stn(-1), lay(0), chamb(0), rol(0); - unpackId(rawid, reg, ri, stn, lay, chamb, rol); + int reg(0), ri(0), stn(-1), lay(0), chamb(0), iet(0); + unpackId(rawid, reg, ri, stn, lay, chamb, iet); return (((id_ & kMuonIdMask) == (rawid & kMuonIdMask)) && (reg == region()) && (ri == ring()) && - (stn == station()) && (lay == layer()) && (chamb == chamber()) && (rol == roll())); + (stn == station()) && (lay == layer()) && (chamb == chamber()) && (iet == ieta())); } constexpr bool operator!=(const GEMDetId& gen) const { uint32_t rawid = gen.rawId(); if (rawid == id_) return false; - int reg(0), ri(0), stn(-1), lay(0), chamb(0), rol(0); - unpackId(rawid, reg, ri, stn, lay, chamb, rol); + int reg(0), ri(0), stn(-1), lay(0), chamb(0), iet(0); + unpackId(rawid, reg, ri, stn, lay, chamb, iet); return (((id_ & kMuonIdMask) != (rawid & kMuonIdMask)) || (reg != region()) || (ri != ring()) || - (stn != station()) || (lay != layer()) || (chamb != chamber()) || (rol != roll())); + (stn != station()) || (lay != layer()) || (chamb != chamber()) || (iet != ieta())); } /** Sort Operator based on the raw detector id */ @@ -186,10 +189,15 @@ class GEMDetId : public DetId { For ME0 there are 6 layers of chambers */ constexpr int layer() const { return (static_cast((id_ >> LayerStartBit) & LayerMask) + minLayerId); } - /** Roll id (also known as eta partition): each chamber is divided along - the strip direction in several parts (rolls) GEM up to 12 */ + /** EtaPartition id (also known as eta partition): each chamber is divided along + the strip direction in several parts (ietas) GEM up to 12 */ constexpr int roll() const { - return (static_cast((id_ >> RollStartBit) & RollMask)); // value 0 is used as wild card + return (static_cast((id_ >> EtaPartitionStartBit) & EtaPartitionMask)); // value 0 is used as wild card + } + + /** Return the corresponding EtaPartition id (same as roll) */ + constexpr int ieta() const { + return (static_cast((id_ >> EtaPartitionStartBit) & EtaPartitionMask)); // value 0 is used as wild card } /** Return the corresponding ChamberId */ @@ -211,20 +219,20 @@ class GEMDetId : public DetId { constexpr static uint32_t v12Form(const uint32_t& inpid) { uint32_t rawid(inpid); if ((rawid & kGEMIdFormat) == 0) { - int region(0), ring(0), station(-1), layer(0), chamber(0), roll(0); - unpackId(rawid, region, ring, station, layer, chamber, roll); + int region(0), ring(0), station(-1), layer(0), chamber(0), ieta(0); + unpackId(rawid, region, ring, station, layer, chamber, ieta); int regionInBits = region - minRegionId; int ringInBits = ring - minRingId; int stationInBits = station - minStationId0; int layerInBits = layer - minLayerId; int chamberInBits = chamber - (minChamberId + 1); - int rollInBits = roll; + int ietaInBits = ieta; rawid = (((DetId::Muon & DetId::kDetMask) << DetId::kDetOffset) | ((MuonSubdetId::GEM & DetId::kSubdetMask) << DetId::kSubdetOffset) | ((regionInBits & RegionMask) << RegionStartBit) | ((ringInBits & RingMask) << RingStartBit) | ((stationInBits & StationMask) << StationStartBit) | ((layerInBits & LayerMask) << LayerStartBit) | - ((chamberInBits & ChamberMask) << ChamberStartBit) | ((rollInBits & RollMask) << RollStartBit) | - kGEMIdFormat); + ((chamberInBits & ChamberMask) << ChamberStartBit) | + ((ietaInBits & EtaPartitionMask) << EtaPartitionStartBit) | kGEMIdFormat); } return rawid; } @@ -239,7 +247,7 @@ class GEMDetId : public DetId { constexpr void v12FromV11(const uint32_t& rawid) { id_ = v12Form(rawid); } constexpr static void unpackId( - const uint32_t& rawid, int& region, int& ring, int& station, int& layer, int& chamber, int& roll) { + const uint32_t& rawid, int& region, int& ring, int& station, int& layer, int& chamber, int& ieta) { if (((rawid >> DetId::kDetOffset) & DetId::kDetMask) == DetId::Muon) { int subdet = ((rawid >> DetId::kSubdetOffset) & DetId::kSubdetMask); if (subdet == MuonSubdetId::GEM) { @@ -249,11 +257,11 @@ class GEMDetId : public DetId { if ((rawid & kGEMIdFormat) == 0) { station = (static_cast((rawid >> StationStartBit) & StationMask) + minStationId); layer = (static_cast((rawid >> LayerStartBit) & LayerMaskP) + minLayerId); - roll = (static_cast((rawid >> RollStartBitP) & RollMask)); + ieta = (static_cast((rawid >> EtaPartitionStartBitP) & EtaPartitionMask)); } else { station = (static_cast((rawid >> StationStartBit) & StationMask) + minStationId0); layer = (static_cast((rawid >> LayerStartBit) & LayerMask) + minLayerId); - roll = (static_cast((rawid >> RollStartBit) & RollMask)); + ieta = (static_cast((rawid >> EtaPartitionStartBit) & EtaPartitionMask)); } } else if (subdet == MuonSubdetId::ME0) { region = static_cast(((rawid >> RegionStartBit) & RegionMask) + minRegionId); @@ -261,7 +269,7 @@ class GEMDetId : public DetId { station = 0; chamber = (static_cast((rawid >> ChamberStartBitM) & ChamberMask) + (minChamberId)); layer = (static_cast((rawid >> LayerStartBitM) & LayerMask) + minLayerId); - roll = (static_cast((rawid >> RollStartBitM) & RollMask)); + ieta = (static_cast((rawid >> EtaPartitionStartBitM) & EtaPartitionMask)); } } } diff --git a/DataFormats/MuonDetId/src/CSCDetId.cc b/DataFormats/MuonDetId/src/CSCDetId.cc index 3058963ce8153..cc5b9201eacba 100644 --- a/DataFormats/MuonDetId/src/CSCDetId.cc +++ b/DataFormats/MuonDetId/src/CSCDetId.cc @@ -64,6 +64,13 @@ std::string CSCDetId::chamberName(int endcap, int station, int ring, int chamber return "ME" + eSign + std::to_string(station) + "/" + std::to_string(ring) + "/" + std::to_string(chamber); } +std::string CSCDetId::chamberName(int chamberType) { + // ME1a, ME1b, ME12, ME13, ME21, ME22, ME31, ME32, ME41, ME42 + const unsigned stations[10] = {1, 1, 1, 1, 2, 2, 3, 3, 4, 4}; + const std::string rings[10] = {"A", "B", "2", "3", "1", "2", "1", "2", "1", "2"}; + return "ME" + std::to_string(stations[chamberType - 1]) + rings[chamberType - 1]; +} + std::string CSCDetId::chamberName() const { return chamberName(endcap(), station(), ring(), chamber()); } std::ostream& operator<<(std::ostream& os, const CSCDetId& id) { diff --git a/DataFormats/MuonDetId/src/GEMDetId.cc b/DataFormats/MuonDetId/src/GEMDetId.cc index 0bfe84fb3f566..5f8a01dddbc6c 100644 --- a/DataFormats/MuonDetId/src/GEMDetId.cc +++ b/DataFormats/MuonDetId/src/GEMDetId.cc @@ -14,7 +14,7 @@ bool GEMDetId::isME0() const { return subsystem() == GEMSubDetId::Station::ME0; std::ostream& operator<<(std::ostream& os, const GEMDetId& id) { os << " Re " << id.region() << " Ri " << id.ring() << " St " << id.station() << " La " << id.layer() << " Ch " - << id.chamber() << " Ro " << id.roll() << " "; + << id.chamber() << " Et " << id.roll() << " "; return os; } diff --git a/DataFormats/MuonDetId/test/testGEMDetId.cc b/DataFormats/MuonDetId/test/testGEMDetId.cc index 4cdf0e0736574..7eb31682f5423 100644 --- a/DataFormats/MuonDetId/test/testGEMDetId.cc +++ b/DataFormats/MuonDetId/test/testGEMDetId.cc @@ -11,7 +11,7 @@ int testCell() { for (int st = GEMDetId::minStationId; st <= GEMDetId::maxStationId; ++st) { for (int la = GEMDetId::minLayerId; la <= GEMDetId::maxLayerId; ++la) { for (int ch = 1 + GEMDetId::minChamberId; ch <= GEMDetId::maxChamberId; ++ch) { - for (int ro = GEMDetId::minRollId; ro <= GEMDetId::maxRollId; ++ro) { + for (int ro = GEMDetId::minEtaPartitionId; ro <= GEMDetId::maxEtaPartitionId; ++ro) { GEMDetId id(re, ri, st, la, ch, ro); if ((id.region() != re) || (id.ring() != ri) || (id.station() != st) || (id.layer() != la) || (id.chamber() != ch) || (id.roll() != ro)) { diff --git a/DataFormats/MuonReco/BuildFile.xml b/DataFormats/MuonReco/BuildFile.xml index 87fc25933f09f..9b38bb9ec734a 100644 --- a/DataFormats/MuonReco/BuildFile.xml +++ b/DataFormats/MuonReco/BuildFile.xml @@ -5,6 +5,10 @@ + + + + diff --git a/DataFormats/MuonReco/src/Muon.cc b/DataFormats/MuonReco/src/Muon.cc index f926b2837282a..1aa82deca2501 100644 --- a/DataFormats/MuonReco/src/Muon.cc +++ b/DataFormats/MuonReco/src/Muon.cc @@ -145,20 +145,12 @@ unsigned int Muon::stationMask(ArbitrationType type) const { if (type == RPCHitAndTrackArbitration) { if (chamberMatch.rpcMatches.empty()) continue; - RPCDetId rollId = chamberMatch.id.rawId(); int rpcIndex = rollId.region() == 0 ? 1 : 2; - - // for (auto& rpcMatch : chamberMatch.rpcMatches) { // TO BE FIXED: there is clearly something odd here - // Replaced by something which restores the previous functionality, but one should verify which were the - // original intentions of the author and provide a more appropriate fix (and remove these comment lines) - if (!chamberMatch.rpcMatches.empty()) { - curMask = 1 << ((chamberMatch.station() - 1) + 4 * (rpcIndex - 1)); - - // do not double count - if (!(totMask & curMask)) - totMask += curMask; - } + curMask = 1 << ((chamberMatch.station() - 1) + 4 * (rpcIndex - 1)); + // do not double count + if (!(totMask & curMask)) + totMask += curMask; continue; } @@ -228,7 +220,6 @@ unsigned int Muon::RPClayerMask(ArbitrationType type) const { RPCDetId rollId = chamberMatch.id.rawId(); const int region = rollId.region(); const int stationIndex = chamberMatch.station(); - int rpcLayer = stationIndex; if (region == 0) { const int layer = rollId.layer(); @@ -238,16 +229,10 @@ unsigned int Muon::RPClayerMask(ArbitrationType type) const { } else rpcLayer += 6; - // for (auto& rpcMatch : chamberMatch.rpcMatches) { // TO BE FIXED: there is clearly something odd here - // Replaced by something which restores the previous functionality, but one should verify which were the - // original intentions of the author and provide a more appropriate fix (and remove these comment lines) - if (!chamberMatch.rpcMatches.empty()) { - curMask = 1 << (rpcLayer - 1); - - // do not double count - if (!(totMask & curMask)) - totMask += curMask; - } + curMask = 1 << (rpcLayer - 1); + // do not double count + if (!(totMask & curMask)) + totMask += curMask; } return totMask; diff --git a/DataFormats/MuonSeed/BuildFile.xml b/DataFormats/MuonSeed/BuildFile.xml index 2fb4d2e5b84ff..5f948ce5f68d0 100644 --- a/DataFormats/MuonSeed/BuildFile.xml +++ b/DataFormats/MuonSeed/BuildFile.xml @@ -2,6 +2,8 @@ + + diff --git a/DataFormats/OnlineMetaData/BuildFile.xml b/DataFormats/OnlineMetaData/BuildFile.xml index 7c537d9ebb995..78feda1bd1db7 100644 --- a/DataFormats/OnlineMetaData/BuildFile.xml +++ b/DataFormats/OnlineMetaData/BuildFile.xml @@ -1,4 +1,5 @@ + diff --git a/DataFormats/ParticleFlowCandidate/BuildFile.xml b/DataFormats/ParticleFlowCandidate/BuildFile.xml index 3cac6a372565c..60d55ce862890 100644 --- a/DataFormats/ParticleFlowCandidate/BuildFile.xml +++ b/DataFormats/ParticleFlowCandidate/BuildFile.xml @@ -7,6 +7,8 @@ + + diff --git a/DataFormats/ParticleFlowReco/interface/PFBlockElementBrem.h b/DataFormats/ParticleFlowReco/interface/PFBlockElementBrem.h index 6ecb951a67e1d..20662d22f719c 100644 --- a/DataFormats/ParticleFlowReco/interface/PFBlockElementBrem.h +++ b/DataFormats/ParticleFlowReco/interface/PFBlockElementBrem.h @@ -14,7 +14,7 @@ namespace reco { /// \brief Track Element. /// /// this class contains a reference to a PFRecTrack - class PFBlockElementBrem : public PFBlockElement { + class PFBlockElementBrem final : public PFBlockElement { public: PFBlockElementBrem() {} diff --git a/DataFormats/ParticleFlowReco/interface/PFBlockElementCluster.h b/DataFormats/ParticleFlowReco/interface/PFBlockElementCluster.h index 168eccc0ceb7f..3e43b7babe8f6 100644 --- a/DataFormats/ParticleFlowReco/interface/PFBlockElementCluster.h +++ b/DataFormats/ParticleFlowReco/interface/PFBlockElementCluster.h @@ -13,7 +13,7 @@ namespace reco { /// \brief Cluster Element. /// /// this class contains a reference to a PFCluster - class PFBlockElementCluster : public PFBlockElement { + class PFBlockElementCluster final : public PFBlockElement { public: PFBlockElementCluster() {} diff --git a/DataFormats/ParticleFlowReco/interface/PFBlockElementGsfTrack.h b/DataFormats/ParticleFlowReco/interface/PFBlockElementGsfTrack.h index 23b26cc3d5d09..0b95f4fa46ccc 100644 --- a/DataFormats/ParticleFlowReco/interface/PFBlockElementGsfTrack.h +++ b/DataFormats/ParticleFlowReco/interface/PFBlockElementGsfTrack.h @@ -15,7 +15,7 @@ namespace reco { /// \brief Track Element. /// /// this class contains a reference to a PFRecTrack - class PFBlockElementGsfTrack : public PFBlockElement { + class PFBlockElementGsfTrack final : public PFBlockElement { public: PFBlockElementGsfTrack() {} @@ -38,7 +38,9 @@ namespace reco { trackType_ = trackType_ ^ (1 << trType); } - bool isSecondary() const override { return trackType(T_FROM_GAMMACONV); } + static constexpr unsigned int kSecondaryMask = 1 << T_FROM_GAMMACONV; + + bool isSecondary() const override { return trackType_ & kSecondaryMask; } /// \return reference to the corresponding PFGsfRecTrack const GsfPFRecTrackRef& GsftrackRefPF() const { return GsftrackRefPF_; } diff --git a/DataFormats/ParticleFlowReco/interface/PFBlockElementSuperCluster.h b/DataFormats/ParticleFlowReco/interface/PFBlockElementSuperCluster.h index 9e23fee8ebd07..cea195ac13832 100644 --- a/DataFormats/ParticleFlowReco/interface/PFBlockElementSuperCluster.h +++ b/DataFormats/ParticleFlowReco/interface/PFBlockElementSuperCluster.h @@ -12,7 +12,7 @@ namespace reco { /// \brief Cluster Element. /// /// this class contains a reference to a PFCluster - class PFBlockElementSuperCluster : public PFBlockElement { + class PFBlockElementSuperCluster final : public PFBlockElement { public: PFBlockElementSuperCluster() {} diff --git a/DataFormats/ParticleFlowReco/interface/PFBlockElementTrack.h b/DataFormats/ParticleFlowReco/interface/PFBlockElementTrack.h index 16d3ea84609bd..a25ea279c08d7 100644 --- a/DataFormats/ParticleFlowReco/interface/PFBlockElementTrack.h +++ b/DataFormats/ParticleFlowReco/interface/PFBlockElementTrack.h @@ -14,7 +14,7 @@ namespace reco { /// \brief Track Element. /// /// this class contains a reference to a PFRecTrack - class PFBlockElementTrack : public PFBlockElement { + class PFBlockElementTrack final : public PFBlockElement { public: PFBlockElementTrack() {} @@ -48,14 +48,18 @@ namespace reco { /// \return reference to the corresponding Track const reco::TrackRef& trackRef() const override { return trackRef_; } + static constexpr unsigned int kPrimaryMask = 1 << T_TO_DISP; + + static constexpr unsigned int kSecondaryMask = (1 << T_FROM_DISP) | (1 << T_FROM_GAMMACONV) | (1 << T_FROM_V0); + + static constexpr unsigned int kLinkedToDisplacedVertexMask = kPrimaryMask | kSecondaryMask; + /// check if the track is secondary - bool isSecondary() const override { - return trackType(T_FROM_DISP) || trackType(T_FROM_GAMMACONV) || trackType(T_FROM_V0); - } + bool isSecondary() const override { return trackType_ & kSecondaryMask; } - bool isPrimary() const override { return trackType(T_TO_DISP); } + bool isPrimary() const override { return trackType_ & kPrimaryMask; } - bool isLinkedToDisplacedVertex() const override { return isSecondary() || isPrimary(); } + bool isLinkedToDisplacedVertex() const override { return trackType_ & kLinkedToDisplacedVertexMask; } /// \return the displaced vertex associated const PFDisplacedTrackerVertexRef& displacedVertexRef(TrackType trType) const override { diff --git a/DataFormats/PatCandidates/interface/PATObject.h b/DataFormats/PatCandidates/interface/PATObject.h index f990c09059025..6c3c1ab0021e9 100644 --- a/DataFormats/PatCandidates/interface/PATObject.h +++ b/DataFormats/PatCandidates/interface/PATObject.h @@ -35,8 +35,6 @@ #include "DataFormats/PatCandidates/interface/throwMissingLabel.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - namespace pat { const reco::CandidatePtrVector &get_empty_cpv(); const std::string &get_empty_str(); diff --git a/DataFormats/PatCandidates/interface/PackedCandidate.h b/DataFormats/PatCandidates/interface/PackedCandidate.h index fd9a2b4cebfec..c882b3d80cf77 100644 --- a/DataFormats/PatCandidates/interface/PackedCandidate.h +++ b/DataFormats/PatCandidates/interface/PackedCandidate.h @@ -204,12 +204,12 @@ namespace pat { // Need to trigger unpacking in iOther p4_(new PolarLorentzVector(iOther.polarP4())), p4c_(new LorentzVector(iOther.p4())), - vertex_(new Point(iOther.vertex())), - dxy_(iOther.dxy_), - dz_(iOther.dz_), - dphi_(iOther.dphi_), - deta_(iOther.deta_), - dtrkpt_(iOther.dtrkpt_), + vertex_((iOther.vertex_ ? new Point(iOther.vertex()) : nullptr)), + dxy_(vertex_ ? iOther.dxy_ : 0), + dz_(vertex_ ? iOther.dz_ : 0), + dphi_(vertex_ ? iOther.dphi_ : 0), + deta_(vertex_ ? iOther.deta_ : 0), + dtrkpt_(vertex_ ? iOther.dtrkpt_ : 0), track_(iOther.track_ ? new reco::Track(*iOther.track_) : nullptr), pdgId_(iOther.pdgId_), qualityFlags_(iOther.qualityFlags_), @@ -650,6 +650,7 @@ namespace pat { covarianceSchema_ = quality; normalizedChi2_ = tk.normalizedChi2(); setHits(tk); + maybeUnpackBoth(); packBoth(); packCovariance(covariance, false); } diff --git a/DataFormats/PatCandidates/src/classes_def_objects.xml b/DataFormats/PatCandidates/src/classes_def_objects.xml index 304414153857a..e4a78ebf00e43 100644 --- a/DataFormats/PatCandidates/src/classes_def_objects.xml +++ b/DataFormats/PatCandidates/src/classes_def_objects.xml @@ -484,6 +484,8 @@ + + @@ -589,6 +591,7 @@ + diff --git a/DataFormats/PatCandidates/test/testPackedCandidate.cc b/DataFormats/PatCandidates/test/testPackedCandidate.cc index 6335df44dcb10..2b601fcdc4e56 100644 --- a/DataFormats/PatCandidates/test/testPackedCandidate.cc +++ b/DataFormats/PatCandidates/test/testPackedCandidate.cc @@ -43,6 +43,10 @@ void testPackedCandidate::testDefaultConstructor() { CPPUNIT_ASSERT(pc.vertex() == pat::PackedCandidate::Point(0, 0, 0)); } +static bool tolerance(double iLHS, double iRHS, double fraction) { + return std::abs(iLHS - iRHS) <= fraction * std::abs(iLHS + iRHS) / 2.; +} + void testPackedCandidate::testCopyConstructor() { pat::PackedCandidate::LorentzVector lv(1., 0.5, 0., std::sqrt(1. + 0.25 + 0.120 * 0.120)); pat::PackedCandidate::PolarLorentzVector plv(lv.Pt(), lv.Eta(), lv.Phi(), lv.M()); @@ -66,10 +70,25 @@ void testPackedCandidate::testCopyConstructor() { CPPUNIT_ASSERT(©_pc.polarP4() != &pc.polarP4()); CPPUNIT_ASSERT(©_pc.p4() != &pc.p4()); CPPUNIT_ASSERT(©_pc.vertex() != &pc.vertex()); -} -static bool tolerance(double iLHS, double iRHS, double fraction) { - return std::abs(iLHS - iRHS) <= fraction * std::abs(iLHS + iRHS) / 2.; + CPPUNIT_ASSERT(tolerance(pc.vertex().X(), copy_pc.vertex().X(), 0.001)); + CPPUNIT_ASSERT(tolerance(pc.vertex().Y(), copy_pc.vertex().Y(), 0.001)); + CPPUNIT_ASSERT(tolerance(pc.vertex().Z(), copy_pc.vertex().Z(), 0.01)); + CPPUNIT_ASSERT(tolerance(pc.dxy(), copy_pc.dxy(), 0.001)); + CPPUNIT_ASSERT(tolerance(pc.dzAssociatedPV(), copy_pc.dzAssociatedPV(), 0.01)); + CPPUNIT_ASSERT(tolerance(pc.phiAtVtx(), copy_pc.phiAtVtx(), 0.001)); + CPPUNIT_ASSERT(tolerance(pc.etaAtVtx(), copy_pc.etaAtVtx(), 0.001)); + CPPUNIT_ASSERT(tolerance(pc.ptTrk(), copy_pc.ptTrk(), 0.001)); + + { + //Test copy of default constructed candidate + pat::PackedCandidate def; + pat::PackedCandidate copy_def(def); + + CPPUNIT_ASSERT(copy_def.polarP4() == pat::PackedCandidate::PolarLorentzVector(0, 0, 0, 0)); + CPPUNIT_ASSERT(copy_def.p4() == pat::PackedCandidate::LorentzVector(0, 0, 0, 0)); + CPPUNIT_ASSERT(copy_def.vertex() == pat::PackedCandidate::Point(0, 0, 0)); + } } void testPackedCandidate::testPackUnpack() { diff --git a/DataFormats/ProtonReco/BuildFile.xml b/DataFormats/ProtonReco/BuildFile.xml index f87de591913ea..75667b3b6ff59 100644 --- a/DataFormats/ProtonReco/BuildFile.xml +++ b/DataFormats/ProtonReco/BuildFile.xml @@ -1,5 +1,6 @@ + diff --git a/DataFormats/Provenance/BuildFile.xml b/DataFormats/Provenance/BuildFile.xml index 35d18bc3e928e..f7e648f4e31f5 100644 --- a/DataFormats/Provenance/BuildFile.xml +++ b/DataFormats/Provenance/BuildFile.xml @@ -1,5 +1,6 @@ + diff --git a/DataFormats/Provenance/interface/CompactEventAuxiliaryVector.h b/DataFormats/Provenance/interface/CompactEventAuxiliaryVector.h new file mode 100644 index 0000000000000..7da2091942d91 --- /dev/null +++ b/DataFormats/Provenance/interface/CompactEventAuxiliaryVector.h @@ -0,0 +1,166 @@ +#ifndef DataFormats_Provenance_CompactEventAuxiliaryVector_h +#define DataFormats_Provenance_CompactEventAuxiliaryVector_h + +#include +#include + +#include "DataFormats/Provenance/interface/EventAuxiliary.h" +#include "FWCore/Utilities/interface/hash_combine.h" + +namespace edm { + class CompactEventAuxiliaryVector { + public: + using ExperimentType = EventAuxiliary::ExperimentType; + static int const invalidBunchXing = EventAuxiliary::invalidBunchXing; + static int const invalidStoreNumber = EventAuxiliary::invalidStoreNumber; + + // These components of EventAuxiliary change infrequently, so + // they are stored in a std::unordered_set with a reference in + // CompactEventAuxiliary + class CompactEventAuxiliaryExtra { + public: + CompactEventAuxiliaryExtra(bool isReal, ExperimentType eType, int storeNum) + : processHistoryID_(), isRealData_(isReal), experimentType_(eType), storeNumber_(storeNum) {} + CompactEventAuxiliaryExtra(const EventAuxiliary& ea) + : processHistoryID_(ea.processHistoryID()), + isRealData_(ea.isRealData()), + experimentType_(ea.experimentType()), + storeNumber_(ea.storeNumber()) {} + + bool operator==(const CompactEventAuxiliaryExtra& extra) const { + return processHistoryID_ == extra.processHistoryID_ && isRealData_ == extra.isRealData_ && + experimentType_ == extra.experimentType_ && storeNumber_ == extra.storeNumber_; + } + void write(std::ostream& os) const; + + // Process history ID of the full process history (not the reduced process history) + ProcessHistoryID processHistoryID_; + // Is this real data (i.e. not simulated) + bool isRealData_; + // Something descriptive of the source of the data + ExperimentType experimentType_; + // The LHC store number + int storeNumber_; + }; + + struct ExtraHash { + std::size_t operator()(CompactEventAuxiliaryExtra const& extra) const noexcept { + return hash_value( + extra.processHistoryID_.compactForm(), extra.isRealData_, extra.experimentType_, extra.storeNumber_); + } + }; + + using GUIDmemo = std::unordered_set; + using extraMemo = std::unordered_set; + + class CompactEventAuxiliary { + public: + CompactEventAuxiliary(EventID const& theId, + std::string const& processGUID, + Timestamp const& theTime, + int bunchXing, + int orbitNum, + CompactEventAuxiliaryExtra const& extra, + GUIDmemo& guidmemo, + extraMemo& extramemo) + : id_(theId), + processGUID_(memoize(processGUID, guidmemo)), + time_(theTime), + bunchCrossing_(bunchXing), + orbitNumber_(orbitNum), + extra_(memoize(extra, extramemo)) {} + CompactEventAuxiliary(const EventAuxiliary& ea, GUIDmemo& guidmemo, extraMemo& extramemo) + : id_(ea.id()), + processGUID_(memoize(ea.processGUID(), guidmemo)), + time_(ea.time()), + bunchCrossing_(ea.bunchCrossing()), + orbitNumber_(ea.orbitNumber()), + extra_(memoize(CompactEventAuxiliaryExtra(ea), extramemo)) {} + + void write(std::ostream& os) const; + + ProcessHistoryID const& processHistoryID() const { return extra_.processHistoryID_; } + EventID const& id() const { return id_; } + std::string const& processGUID() const { return processGUID_; } + Timestamp const& time() const { return time_; } + LuminosityBlockNumber_t luminosityBlock() const { return id_.luminosityBlock(); } + EventNumber_t event() const { return id_.event(); } + RunNumber_t run() const { return id_.run(); } + bool isRealData() const { return extra_.isRealData_; } + ExperimentType experimentType() const { return extra_.experimentType_; } + int bunchCrossing() const { return bunchCrossing_; } + int orbitNumber() const { return orbitNumber_; } + int storeNumber() const { return extra_.storeNumber_; } + + EventAuxiliary eventAuxiliary() const { + auto ea{EventAuxiliary(id_, + processGUID_, + time_, + extra_.isRealData_, + extra_.experimentType_, + bunchCrossing_, + extra_.storeNumber_, + orbitNumber_)}; + ea.setProcessHistoryID(extra_.processHistoryID_); + return ea; + } + + private: + template + const T& memoize(const T& item, C& memopad) const { + auto it = memopad.insert(item); + return *it.first; + } + + // Event ID + EventID id_; + // Globally unique process ID of process that created event. + const std::string& processGUID_; + // Time from DAQ + Timestamp time_; + // The bunch crossing number + int bunchCrossing_; + // The orbit number + int orbitNumber_; + // the stuff that changes slowly + const CompactEventAuxiliaryExtra& extra_; + }; + + using value_type = CompactEventAuxiliary; + using iterator = std::vector::iterator; + using size_type = std::vector::size_type; + using const_iterator = std::vector::const_iterator; + + size_type size() const { return compactAuxiliaries_.size(); } + void reserve(std::size_t size) { compactAuxiliaries_.reserve(size); } + const_iterator begin() const { return compactAuxiliaries_.begin(); } + const_iterator end() const { return compactAuxiliaries_.end(); } + const_iterator cbegin() const { return compactAuxiliaries_.cbegin(); } + const_iterator cend() const { return compactAuxiliaries_.cend(); } + + size_type extrasSize() const { return extras_.size(); } + size_type guidsSize() const { return processGUIDs_.size(); } + + void push_back(const EventAuxiliary& ea) { compactAuxiliaries_.emplace_back(ea, processGUIDs_, extras_); } + + private: + // Items that change every event + std::vector compactAuxiliaries_; + // Items that change relatively infrequently + extraMemo extras_; + // Globally unique process IDs of processes that created events. + GUIDmemo processGUIDs_; + }; + + inline std::ostream& operator<<(std::ostream& os, const CompactEventAuxiliaryVector::CompactEventAuxiliary& p) { + p.write(os); + return os; + } + + inline std::ostream& operator<<(std::ostream& os, const CompactEventAuxiliaryVector::CompactEventAuxiliaryExtra& p) { + p.write(os); + return os; + } +} // namespace edm + +#endif diff --git a/DataFormats/Provenance/interface/EventAuxiliary.h b/DataFormats/Provenance/interface/EventAuxiliary.h index 3423f4b458a83..0cb5220d27b5e 100644 --- a/DataFormats/Provenance/interface/EventAuxiliary.h +++ b/DataFormats/Provenance/interface/EventAuxiliary.h @@ -78,6 +78,7 @@ namespace edm { int storeNumber() const { return storeNumber_; } private: + // NOTE: any member data added here MUST also be added to CompactEventAuxiliaryVector.h // Process history ID of the full process history (not the reduced process history) ProcessHistoryID processHistoryID_; // Event ID diff --git a/DataFormats/Provenance/interface/ProductProvenanceRetriever.h b/DataFormats/Provenance/interface/ProductProvenanceRetriever.h index f1e113890071c..61942d26736bb 100644 --- a/DataFormats/Provenance/interface/ProductProvenanceRetriever.h +++ b/DataFormats/Provenance/interface/ProductProvenanceRetriever.h @@ -9,6 +9,7 @@ ProductProvenanceRetriever: Manages the per event/lumi/run per product provenanc #include "DataFormats/Provenance/interface/BranchID.h" #include "DataFormats/Provenance/interface/ProductProvenance.h" #include "DataFormats/Provenance/interface/ProcessHistoryID.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Utilities/interface/propagate_const.h" #include "FWCore/Utilities/interface/Likely.h" #include "FWCore/Utilities/interface/thread_safety_macros.h" @@ -25,7 +26,6 @@ ProductProvenanceRetriever: Manages the per event/lumi/run per product provenanc namespace edm { class ProvenanceReaderBase; - class WaitingTask; class ModuleCallingContext; class ProductRegistry; @@ -47,7 +47,7 @@ namespace edm { ProvenanceReaderBase() {} virtual ~ProvenanceReaderBase(); virtual std::set readProvenance(unsigned int transitionIndex) const = 0; - virtual void readProvenanceAsync(WaitingTask* task, + virtual void readProvenanceAsync(WaitingTaskHolder task, ModuleCallingContext const* moduleCallingContext, unsigned int transitionIndex, std::atomic*>& writeTo) const = 0; @@ -77,7 +77,7 @@ namespace edm { void reset(); - void readProvenanceAsync(WaitingTask* task, ModuleCallingContext const* moduleCallingContext) const; + void readProvenanceAsync(WaitingTaskHolder task, ModuleCallingContext const* moduleCallingContext) const; void update(edm::ProductRegistry const&); diff --git a/DataFormats/Provenance/src/CompactEventAuxiliaryVector.cc b/DataFormats/Provenance/src/CompactEventAuxiliaryVector.cc new file mode 100644 index 0000000000000..d71c724c07dba --- /dev/null +++ b/DataFormats/Provenance/src/CompactEventAuxiliaryVector.cc @@ -0,0 +1,15 @@ +#include "DataFormats/Provenance/interface/CompactEventAuxiliaryVector.h" +#include + +namespace edm { + void CompactEventAuxiliaryVector::CompactEventAuxiliary::write(std::ostream& os) const { + os << "processGUID = " << processGUID() << std::endl; + os << id() << " " << time().unixTime() << " " << bunchCrossing() << " " << orbitNumber() << std::endl; + os << extra_; + } + + void CompactEventAuxiliaryVector::CompactEventAuxiliaryExtra::write(std::ostream& os) const { + os << "Process History ID = " << processHistoryID_ << std::endl; + os << storeNumber_ << " " << isRealData_ << " " << experimentType_ << std::endl; + } +} // namespace edm diff --git a/DataFormats/Provenance/src/ProductProvenanceRetriever.cc b/DataFormats/Provenance/src/ProductProvenanceRetriever.cc index c05a4bab16329..6013a70b49370 100644 --- a/DataFormats/Provenance/src/ProductProvenanceRetriever.cc +++ b/DataFormats/Provenance/src/ProductProvenanceRetriever.cc @@ -73,7 +73,7 @@ namespace edm { setupEntryInfoSet(iReg); } - void ProductProvenanceRetriever::readProvenanceAsync(WaitingTask* task, + void ProductProvenanceRetriever::readProvenanceAsync(WaitingTaskHolder task, ModuleCallingContext const* moduleCallingContext) const { if (provenanceReader_ and nullptr == readEntryInfoSet_.load()) { provenanceReader_->readProvenanceAsync(task, moduleCallingContext, transitionIndex_, readEntryInfoSet_); @@ -128,12 +128,10 @@ namespace edm { entryInfoSet_.end(), entryInfo.branchID(), [](auto const& iEntry, edm::BranchID const& iValue) { return iEntry.branchID() < iValue; }); - if - UNLIKELY(itFound == entryInfoSet_.end() or itFound->branchID() != entryInfo.branchID()) { - throw edm::Exception(edm::errors::LogicError) - << "ProductProvenanceRetriever::insertIntoSet passed a BranchID " << entryInfo.branchID().id() - << " that has not been pre-registered"; - } + if UNLIKELY (itFound == entryInfoSet_.end() or itFound->branchID() != entryInfo.branchID()) { + throw edm::Exception(edm::errors::LogicError) << "ProductProvenanceRetriever::insertIntoSet passed a BranchID " + << entryInfo.branchID().id() << " that has not been pre-registered"; + } itFound->threadsafe_set(entryInfo.moveParentageID()); } diff --git a/DataFormats/Provenance/test/BuildFile.xml b/DataFormats/Provenance/test/BuildFile.xml index c1bcb3118b137..660587cd4b351 100644 --- a/DataFormats/Provenance/test/BuildFile.xml +++ b/DataFormats/Provenance/test/BuildFile.xml @@ -1,6 +1,6 @@ - + diff --git a/DataFormats/Provenance/test/compactEventAuxiliaryVector_t.cppunit.cc b/DataFormats/Provenance/test/compactEventAuxiliaryVector_t.cppunit.cc new file mode 100644 index 0000000000000..0c26e7fd5a31e --- /dev/null +++ b/DataFormats/Provenance/test/compactEventAuxiliaryVector_t.cppunit.cc @@ -0,0 +1,90 @@ +#include "DataFormats/Provenance/interface/ProcessHistoryID.h" +#include "DataFormats/Provenance/interface/ProcessConfiguration.h" +#include "DataFormats/Provenance/interface/ProcessHistory.h" + +#include "DataFormats/Provenance/interface/CompactEventAuxiliaryVector.h" + +#include "cppunit/extensions/HelperMacros.h" + +class TestCompactEventAuxiliaryVector : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(TestCompactEventAuxiliaryVector); + CPPUNIT_TEST(fillAndCompare); + CPPUNIT_TEST_SUITE_END(); + +public: + TestCompactEventAuxiliaryVector() {} + ~TestCompactEventAuxiliaryVector() {} + void setUp(); + void tearDown() {} + + void fillAndCompare(); + +private: + edm::ProcessHistoryID phid_; +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(TestCompactEventAuxiliaryVector); + +void TestCompactEventAuxiliaryVector::setUp() { + edm::ProcessConfiguration pc; + auto processHistory = std::make_unique(); + edm::ProcessHistory& ph = *processHistory; + processHistory->push_back(pc); + phid_ = ph.id(); +} + +void TestCompactEventAuxiliaryVector::fillAndCompare() { + std::vector aux = {{{165121, 62, 23634374}, + "E403F8AD-A17F-E011-A42B-0022195E688C", + edm::Timestamp((1305540804ULL << 32) + 10943758ULL), + true, + edm::EventAuxiliary::PhysicsTrigger, + 1995, + 0, + 16008401}, + {{165121, 62, 23643566}, + "A83A11AE-A17F-E011-A5F1-001EC9ADD952", + edm::Timestamp((1305540804ULL << 32) + 20943758ULL), + true, + edm::EventAuxiliary::PhysicsTrigger, + 278, + 0, + 16014593}, + {{165121, 62, 23666070}, + "2E2618AE-A17F-E011-A82D-001EC9ADE1D1", + edm::Timestamp((1305540805ULL << 32) + 10943758ULL), + true, + edm::EventAuxiliary::PhysicsTrigger, + 1981, + 0, + 16029687}, + {{165121, 62, 23666454}, + "F055F4AD-A17F-E011-9552-001517794E74", + edm::Timestamp((1305540804ULL << 32) + 20943758ULL), + true, + edm::EventAuxiliary::PhysicsTrigger, + 611, + 0, + 16029970}}; + + for (auto& a : aux) { + a.setProcessHistoryID(phid_); + } + + edm::CompactEventAuxiliaryVector caux; + for (const auto& a : aux) { + caux.push_back(a); + } + + CPPUNIT_ASSERT(aux.size() == caux.size()); + + auto j = caux.begin(); + for (auto i = aux.begin(); i != aux.end(); ++i, ++j) { + CPPUNIT_ASSERT(edm::isSameEvent(*i, j->eventAuxiliary())); + } + + auto i = aux.begin(); + j = caux.begin(); + i->id() = edm::EventID(165121, 62, 23634375); + CPPUNIT_ASSERT(!edm::isSameEvent(*i, j->eventAuxiliary())); +} diff --git a/DataFormats/RPCDigi/BuildFile.xml b/DataFormats/RPCDigi/BuildFile.xml index 45612b7880a0b..4742344ab3568 100644 --- a/DataFormats/RPCDigi/BuildFile.xml +++ b/DataFormats/RPCDigi/BuildFile.xml @@ -1,6 +1,9 @@ + + + diff --git a/DataFormats/RecoCandidate/BuildFile.xml b/DataFormats/RecoCandidate/BuildFile.xml index 6d98dad0f0f59..98f8e104eb6c1 100644 --- a/DataFormats/RecoCandidate/BuildFile.xml +++ b/DataFormats/RecoCandidate/BuildFile.xml @@ -5,9 +5,11 @@ - + + + diff --git a/DataFormats/RecoCandidate/src/classes.h b/DataFormats/RecoCandidate/src/classes.h index 76282ff6faa09..9783441487180 100644 --- a/DataFormats/RecoCandidate/src/classes.h +++ b/DataFormats/RecoCandidate/src/classes.h @@ -18,11 +18,7 @@ #include "DataFormats/RecoCandidate/interface/FitResult.h" #include "DataFormats/RecoCandidate/interface/CaloRecHitCandidate.h" #include "DataFormats/RecoCandidate/interface/TrackAssociation.h" -#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" #include "DataFormats/RecoCandidate/interface/TrackCandidateAssociation.h" -#include "DataFormats/HcalDetId/interface/HcalSubdetector.h" -#include "DataFormats/HcalRecHit/interface/HcalRecHitDefs.h" -#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" #include "DataFormats/Common/interface/RefProd.h" #include "DataFormats/Common/interface/Wrapper.h" #include "DataFormats/Common/interface/RefToBase.h" diff --git a/DataFormats/SiPixelCluster/BuildFile.xml b/DataFormats/SiPixelCluster/BuildFile.xml index 7c537d9ebb995..d679816bd4955 100644 --- a/DataFormats/SiPixelCluster/BuildFile.xml +++ b/DataFormats/SiPixelCluster/BuildFile.xml @@ -1,4 +1,6 @@ + + diff --git a/DataFormats/SiPixelCluster/interface/SiPixelCluster.h b/DataFormats/SiPixelCluster/interface/SiPixelCluster.h index ab4ae1add2132..453d41555a65d 100644 --- a/DataFormats/SiPixelCluster/interface/SiPixelCluster.h +++ b/DataFormats/SiPixelCluster/interface/SiPixelCluster.h @@ -21,6 +21,7 @@ #include #include #include +#include class PixelDigi; @@ -68,19 +69,22 @@ class SiPixelCluster { static constexpr unsigned int MAXSPAN = 255; static constexpr unsigned int MAXPOS = 2047; + static constexpr uint16_t invalidClusterId = std::numeric_limits::max(); + /** Construct from a range of digis that form a cluster and from * a DetID. The range is assumed to be non-empty. */ - SiPixelCluster() {} + SiPixelCluster() = default; SiPixelCluster(unsigned int isize, uint16_t const* adcs, uint16_t const* xpos, uint16_t const* ypos, - uint16_t const xmin, - uint16_t const ymin) - : thePixelOffset(2 * isize), thePixelADC(adcs, adcs + isize) { + uint16_t xmin, + uint16_t ymin, + uint16_t id = invalidClusterId) + : thePixelOffset(2 * isize), thePixelADC(adcs, adcs + isize), theOriginalClusterId(id) { uint16_t maxCol = 0; uint16_t maxRow = 0; for (unsigned int i = 0; i != isize; ++i) { @@ -189,6 +193,10 @@ class SiPixelCluster { float getSplitClusterErrorX() const { return err_x; } float getSplitClusterErrorY() const { return err_y; } + // the original id (they get sorted) + auto originalId() const { return theOriginalClusterId; } + void setOriginalId(uint16_t id) { theOriginalClusterId = id; } + private: std::vector thePixelOffset; std::vector thePixelADC; @@ -198,6 +206,8 @@ class SiPixelCluster { uint8_t thePixelRowSpan = 0; // Span pixel index in the x direction (low edge). uint8_t thePixelColSpan = 0; // Span pixel index in the y direction (left edge). + uint16_t theOriginalClusterId = invalidClusterId; + float err_x = -99999.9f; float err_y = -99999.9f; }; diff --git a/DataFormats/SiPixelCluster/src/classes_def.xml b/DataFormats/SiPixelCluster/src/classes_def.xml index 55c9fd8538417..d43f062877eb0 100644 --- a/DataFormats/SiPixelCluster/src/classes_def.xml +++ b/DataFormats/SiPixelCluster/src/classes_def.xml @@ -4,6 +4,7 @@ + diff --git a/DataFormats/SiPixelDetId/BuildFile.xml b/DataFormats/SiPixelDetId/BuildFile.xml index 2582aa71146d8..842f5d3051d8a 100644 --- a/DataFormats/SiPixelDetId/BuildFile.xml +++ b/DataFormats/SiPixelDetId/BuildFile.xml @@ -1,6 +1,7 @@ + diff --git a/DataFormats/SiPixelDigi/interface/SiPixelDigisSoA.h b/DataFormats/SiPixelDigi/interface/SiPixelDigisSoA.h new file mode 100644 index 0000000000000..6c016155b1cb0 --- /dev/null +++ b/DataFormats/SiPixelDigi/interface/SiPixelDigisSoA.h @@ -0,0 +1,39 @@ +#ifndef DataFormats_SiPixelDigi_interface_SiPixelDigisSoA_h +#define DataFormats_SiPixelDigi_interface_SiPixelDigisSoA_h + +#include +#include + +// The main purpose of this class is to deliver digi and cluster data +// from an EDProducer that transfers the data from GPU to host to an +// EDProducer that converts the SoA to legacy data products. The class +// is independent of any GPU technology, and in prunciple could be +// produced by host code, and be used for other purposes than +// conversion-to-legacy as well. +class SiPixelDigisSoA { +public: + SiPixelDigisSoA() = default; + explicit SiPixelDigisSoA( + size_t nDigis, const uint32_t* pdigi, const uint32_t* rawIdArr, const uint16_t* adc, const int32_t* clus); + ~SiPixelDigisSoA() = default; + + auto size() const { return pdigi_.size(); } + + uint32_t pdigi(size_t i) const { return pdigi_[i]; } + uint32_t rawIdArr(size_t i) const { return rawIdArr_[i]; } + uint16_t adc(size_t i) const { return adc_[i]; } + int32_t clus(size_t i) const { return clus_[i]; } + + const std::vector& pdigiVector() const { return pdigi_; } + const std::vector& rawIdArrVector() const { return rawIdArr_; } + const std::vector& adcVector() const { return adc_; } + const std::vector& clusVector() const { return clus_; } + +private: + std::vector pdigi_; // packed digi (row, col, adc) of each pixel + std::vector rawIdArr_; // DetId of each pixel + std::vector adc_; // ADC of each pixel + std::vector clus_; // cluster id of each pixel +}; + +#endif diff --git a/DataFormats/SiPixelDigi/src/SiPixelDigisSoA.cc b/DataFormats/SiPixelDigi/src/SiPixelDigisSoA.cc new file mode 100644 index 0000000000000..b95c004a50a25 --- /dev/null +++ b/DataFormats/SiPixelDigi/src/SiPixelDigisSoA.cc @@ -0,0 +1,10 @@ +#include "DataFormats/SiPixelDigi/interface/SiPixelDigisSoA.h" + +#include + +SiPixelDigisSoA::SiPixelDigisSoA( + size_t nDigis, const uint32_t *pdigi, const uint32_t *rawIdArr, const uint16_t *adc, const int32_t *clus) + : pdigi_(pdigi, pdigi + nDigis), + rawIdArr_(rawIdArr, rawIdArr + nDigis), + adc_(adc, adc + nDigis), + clus_(clus, clus + nDigis) {} diff --git a/DataFormats/SiPixelDigi/src/classes.h b/DataFormats/SiPixelDigi/src/classes.h index 2f36b72ca7df8..1360ee6e469d9 100644 --- a/DataFormats/SiPixelDigi/src/classes.h +++ b/DataFormats/SiPixelDigi/src/classes.h @@ -5,6 +5,7 @@ #include "DataFormats/SiPixelDigi/interface/PixelDigiCollection.h" #include "DataFormats/SiPixelDigi/interface/SiPixelCalibDigi.h" #include "DataFormats/SiPixelDigi/interface/SiPixelCalibDigiError.h" +#include "DataFormats/SiPixelDigi/interface/SiPixelDigisSoA.h" #include "DataFormats/Common/interface/Wrapper.h" #include "DataFormats/Common/interface/DetSetVector.h" #include "DataFormats/Common/interface/DetSetVectorNew.h" diff --git a/DataFormats/SiPixelDigi/src/classes_def.xml b/DataFormats/SiPixelDigi/src/classes_def.xml index de7779a5c00ea..e6bc08de161fa 100755 --- a/DataFormats/SiPixelDigi/src/classes_def.xml +++ b/DataFormats/SiPixelDigi/src/classes_def.xml @@ -49,4 +49,7 @@ + + + diff --git a/DataFormats/SiPixelRawData/BuildFile.xml b/DataFormats/SiPixelRawData/BuildFile.xml index 7c537d9ebb995..38b45babc72b0 100644 --- a/DataFormats/SiPixelRawData/BuildFile.xml +++ b/DataFormats/SiPixelRawData/BuildFile.xml @@ -1,4 +1,5 @@ + diff --git a/DataFormats/SiPixelRawData/interface/SiPixelErrorCompact.h b/DataFormats/SiPixelRawData/interface/SiPixelErrorCompact.h new file mode 100644 index 0000000000000..0b1a80868594f --- /dev/null +++ b/DataFormats/SiPixelRawData/interface/SiPixelErrorCompact.h @@ -0,0 +1,13 @@ +#ifndef DataFormats_SiPixelRawData_interface_SiPixelErrorCompact_h +#define DataFormats_SiPixelRawData_interface_SiPixelErrorCompact_h + +#include + +struct SiPixelErrorCompact { + uint32_t rawId; + uint32_t word; + uint8_t errorType; + uint8_t fedId; +}; + +#endif // DataFormats_SiPixelRawData_interface_SiPixelErrorCompact_h diff --git a/DataFormats/SiPixelRawData/interface/SiPixelErrorsSoA.h b/DataFormats/SiPixelRawData/interface/SiPixelErrorsSoA.h new file mode 100644 index 0000000000000..c72c19ce5fda4 --- /dev/null +++ b/DataFormats/SiPixelRawData/interface/SiPixelErrorsSoA.h @@ -0,0 +1,30 @@ +#ifndef DataFormats_SiPixelDigi_interface_SiPixelErrorsSoA_h +#define DataFormats_SiPixelDigi_interface_SiPixelErrorsSoA_h + +#include "DataFormats/SiPixelRawData/interface/SiPixelErrorCompact.h" +#include "DataFormats/SiPixelRawData/interface/SiPixelFormatterErrors.h" + +#include +#include + +class SiPixelErrorsSoA { +public: + SiPixelErrorsSoA() = default; + explicit SiPixelErrorsSoA(size_t nErrors, const SiPixelErrorCompact *error, const SiPixelFormatterErrors *err) + : error_(error, error + nErrors), formatterErrors_(err) {} + ~SiPixelErrorsSoA() = default; + + auto size() const { return error_.size(); } + + const SiPixelFormatterErrors *formatterErrors() const { return formatterErrors_; } + + const SiPixelErrorCompact &error(size_t i) const { return error_[i]; } + + const std::vector &errorVector() const { return error_; } + +private: + std::vector error_; + const SiPixelFormatterErrors *formatterErrors_ = nullptr; +}; + +#endif diff --git a/DataFormats/SiPixelRawData/interface/SiPixelFormatterErrors.h b/DataFormats/SiPixelRawData/interface/SiPixelFormatterErrors.h new file mode 100644 index 0000000000000..9d372737300d4 --- /dev/null +++ b/DataFormats/SiPixelRawData/interface/SiPixelFormatterErrors.h @@ -0,0 +1,12 @@ +#ifndef DataFormats_SiPixelRawData_interface_SiPixelFormatterErrors_h +#define DataFormats_SiPixelRawData_interface_SiPixelFormatterErrors_h + +#include +#include + +#include "DataFormats/SiPixelRawData/interface/SiPixelRawDataError.h" +#include "FWCore/Utilities/interface/typedefs.h" + +using SiPixelFormatterErrors = std::map>; + +#endif // DataFormats_SiPixelRawData_interface_SiPixelFormatterErrors_h diff --git a/DataFormats/SiPixelRawData/src/classes.h b/DataFormats/SiPixelRawData/src/classes.h index 73768cc373013..7a07e9f35f388 100644 --- a/DataFormats/SiPixelRawData/src/classes.h +++ b/DataFormats/SiPixelRawData/src/classes.h @@ -2,6 +2,7 @@ #define SIPIXELRAWDATA_CLASSES_H #include "DataFormats/SiPixelRawData/interface/SiPixelRawDataError.h" +#include "DataFormats/SiPixelRawData/interface/SiPixelErrorsSoA.h" #include "DataFormats/Common/interface/Wrapper.h" #include "DataFormats/Common/interface/DetSetVector.h" #include diff --git a/DataFormats/SiPixelRawData/src/classes_def.xml b/DataFormats/SiPixelRawData/src/classes_def.xml index 827d4b1191cf6..fd2b5dcf27965 100644 --- a/DataFormats/SiPixelRawData/src/classes_def.xml +++ b/DataFormats/SiPixelRawData/src/classes_def.xml @@ -14,4 +14,7 @@ + + + diff --git a/DataFormats/SiStripCluster/BuildFile.xml b/DataFormats/SiStripCluster/BuildFile.xml index 64d3e18e16284..98341fd03c3a7 100644 --- a/DataFormats/SiStripCluster/BuildFile.xml +++ b/DataFormats/SiStripCluster/BuildFile.xml @@ -1,6 +1,7 @@ + diff --git a/DataFormats/SiStripCluster/interface/SiStripCluster.h b/DataFormats/SiStripCluster/interface/SiStripCluster.h index 46fc382450d6d..72caf2625e3be 100644 --- a/DataFormats/SiStripCluster/interface/SiStripCluster.h +++ b/DataFormats/SiStripCluster/interface/SiStripCluster.h @@ -4,7 +4,6 @@ #include "DataFormats/SiStripDigi/interface/SiStripDigi.h" #include #include -#include "FWCore/MessageLogger/interface/MessageLogger.h" class SiStripCluster { public: diff --git a/DataFormats/SiStripCommon/BuildFile.xml b/DataFormats/SiStripCommon/BuildFile.xml index b8bc952eb8685..7c0e145f7dac8 100644 --- a/DataFormats/SiStripCommon/BuildFile.xml +++ b/DataFormats/SiStripCommon/BuildFile.xml @@ -1,6 +1,7 @@ + diff --git a/DataFormats/Streamer/BuildFile.xml b/DataFormats/Streamer/BuildFile.xml index 0a3da27bfa9b3..ab124ca3e5158 100644 --- a/DataFormats/Streamer/BuildFile.xml +++ b/DataFormats/Streamer/BuildFile.xml @@ -1,4 +1,6 @@ + + diff --git a/DataFormats/TauReco/BuildFile.xml b/DataFormats/TauReco/BuildFile.xml index df5fe8fe03f0c..ab47c5fbf0d92 100644 --- a/DataFormats/TauReco/BuildFile.xml +++ b/DataFormats/TauReco/BuildFile.xml @@ -5,6 +5,8 @@ + + diff --git a/DataFormats/TauReco/interface/PFTau3ProngSummary.h b/DataFormats/TauReco/interface/PFTau3ProngSummary.h index 3545e27608e40..dc658b1c7eeb8 100644 --- a/DataFormats/TauReco/interface/PFTau3ProngSummary.h +++ b/DataFormats/TauReco/interface/PFTau3ProngSummary.h @@ -10,7 +10,6 @@ * Lars Perchalla and Philip Sauerland Theses under Achim Stahl supervision. This * code is a result of the continuation of this work by Ian M. Nugent and Vladimir Cherepanov. */ -#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/Math/interface/Vector3D.h" #include "DataFormats/Math/interface/Point3D.h" #include "DataFormats/Math/interface/Error.h" diff --git a/DataFormats/TauReco/interface/PFTauDecayMode.h b/DataFormats/TauReco/interface/PFTauDecayMode.h index 06bf34b45da8f..1bf74233113ce 100644 --- a/DataFormats/TauReco/interface/PFTauDecayMode.h +++ b/DataFormats/TauReco/interface/PFTauDecayMode.h @@ -22,7 +22,6 @@ #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" #include "DataFormats/TauReco/interface/PFTau.h" #include "DataFormats/TauReco/interface/PFTauDecayModeFwd.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" namespace reco { class PFTauDecayMode : public CompositeCandidate { diff --git a/DataFormats/TauReco/interface/PFTauTransverseImpactParameter.h b/DataFormats/TauReco/interface/PFTauTransverseImpactParameter.h index 8366c5abce408..30597671da15c 100644 --- a/DataFormats/TauReco/interface/PFTauTransverseImpactParameter.h +++ b/DataFormats/TauReco/interface/PFTauTransverseImpactParameter.h @@ -13,7 +13,6 @@ * Thanks goes to Christian Veelken and Evan Klose Friis for their help and suggestions. */ -#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/Math/interface/Vector3D.h" #include "DataFormats/Math/interface/Point3D.h" #include "DataFormats/Math/interface/Error.h" diff --git a/DataFormats/TauReco/src/PFTau.cc b/DataFormats/TauReco/src/PFTau.cc index 9f622170f15f5..6f7947e792327 100644 --- a/DataFormats/TauReco/src/PFTau.cc +++ b/DataFormats/TauReco/src/PFTau.cc @@ -2,7 +2,6 @@ #include "DataFormats/Common/interface/RefToPtr.h" #include "DataFormats/TauReco/interface/PFTau.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" //using namespace std; namespace reco { diff --git a/DataFormats/TauReco/src/PFTauDecayMode.cc b/DataFormats/TauReco/src/PFTauDecayMode.cc index cea9d81f5d031..fa56445923d16 100644 --- a/DataFormats/TauReco/src/PFTauDecayMode.cc +++ b/DataFormats/TauReco/src/PFTauDecayMode.cc @@ -1,4 +1,5 @@ #include "DataFormats/TauReco/interface/PFTauDecayMode.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" namespace reco { PFTauDecayMode::PFTauDecayMode(const VertexCompositeCandidate& chargedPions, diff --git a/DataFormats/TestObjects/BuildFile.xml b/DataFormats/TestObjects/BuildFile.xml index 78feda1bd1db7..a99144ef6f751 100644 --- a/DataFormats/TestObjects/BuildFile.xml +++ b/DataFormats/TestObjects/BuildFile.xml @@ -1,5 +1,7 @@ + + diff --git a/DataFormats/TrackCandidate/BuildFile.xml b/DataFormats/TrackCandidate/BuildFile.xml index eb75fa27154fa..bb47dc67ba9b5 100644 --- a/DataFormats/TrackCandidate/BuildFile.xml +++ b/DataFormats/TrackCandidate/BuildFile.xml @@ -2,6 +2,7 @@ + diff --git a/DataFormats/TrackReco/interface/TrackBase.h b/DataFormats/TrackReco/interface/TrackBase.h index 13ffc8d1db221..ae2b52ec6de64 100644 --- a/DataFormats/TrackReco/interface/TrackBase.h +++ b/DataFormats/TrackReco/interface/TrackBase.h @@ -113,7 +113,7 @@ namespace reco { highPtTripletStep = 22, lowPtQuadStep = 23, detachedQuadStep = 24, - reservedForUpgrades1 = 25, + displacedGeneralStep = 25, reservedForUpgrades2 = 26, bTagGhostTracks = 27, beamhalo = 28, diff --git a/DataFormats/TrackReco/src/TrackBase.cc b/DataFormats/TrackReco/src/TrackBase.cc index 744b1889afbab..e2145dd54182c 100644 --- a/DataFormats/TrackReco/src/TrackBase.cc +++ b/DataFormats/TrackReco/src/TrackBase.cc @@ -31,7 +31,7 @@ std::string const TrackBase::algoNames[] = {"undefAlgorithm", "highPtTripletStep", "lowPtQuadStep", "detachedQuadStep", - "reservedForUpgrades1", + "displacedGeneralStep", "reservedForUpgrades2", "bTagGhostTracks", "beamhalo", diff --git a/DataFormats/TrackerRecHit2D/BuildFile.xml b/DataFormats/TrackerRecHit2D/BuildFile.xml index 81627d076969b..d92749878b7d3 100644 --- a/DataFormats/TrackerRecHit2D/BuildFile.xml +++ b/DataFormats/TrackerRecHit2D/BuildFile.xml @@ -6,6 +6,16 @@ + + + + + + + + + + diff --git a/DataFormats/TrackerRecHit2D/interface/SiPixelRecHitQuality.h b/DataFormats/TrackerRecHit2D/interface/SiPixelRecHitQuality.h index 73338bd67728a..e8bdbc26e3a30 100644 --- a/DataFormats/TrackerRecHit2D/interface/SiPixelRecHitQuality.h +++ b/DataFormats/TrackerRecHit2D/interface/SiPixelRecHitQuality.h @@ -3,7 +3,6 @@ //--- pow(): #include -#include "FWCore/MessageLogger/interface/MessageLogger.h" class SiPixelRecHitQuality { public: @@ -56,22 +55,18 @@ class SiPixelRecHitQuality { // //--- We've obsoleted probX and probY in favor of probXY and probQ as of 09/10 inline float probabilityX(QualWordType qualWord) const { - edm::LogWarning("ObsoleteVariable") - << "Since 39x, probabilityX and probabilityY have been replaced by probabilityXY and probabilityQ"; + warningObsolete(); return -10; } inline float probabilityY(QualWordType qualWord) const { - edm::LogWarning("ObsoleteVariable") - << "Since 39x, probabilityX and probabilityY have been replaced by probabilityXY and probabilityQ"; + warningObsolete(); return -10; } inline float probabilityXY(QualWordType qualWord) const { int raw = (qualWord >> probX_shift) & probX_mask; if (raw < 0 || raw > 16383) { - edm::LogWarning("OutOfBounds") - << "Probability XY outside the bounds of the quality word. Defaulting to Prob=0. Raw = " << raw - << " QualityWord = " << qualWord; + warningOutOfBoundRaw("XY", raw, qualWord); raw = 16383; } float prob = (raw == 16383) ? 0 : pow(probX_units, (float)(-raw)); @@ -81,9 +76,7 @@ class SiPixelRecHitQuality { inline float probabilityQ(QualWordType qualWord) const { int raw = (qualWord >> probY_shift) & probY_mask; if (raw < 0 || raw > 255) { - edm::LogWarning("OutOfBounds") - << "Probability Q outside the bounds of the quality word. Defaulting to Prob=0. Raw = " << raw - << " QualityWord = " << qualWord; + warningOutOfBoundRaw("Q", raw, qualWord); raw = 255; } float prob = (raw == 255) ? 0 : pow(probY_units, (float)(-raw)); @@ -95,8 +88,7 @@ class SiPixelRecHitQuality { inline int qBin(QualWordType qualWord) const { int qbin = (qualWord >> qBin_shift) & qBin_mask; if (qbin < 0 || qbin > 7) { - edm::LogWarning("OutOfBounds") << "Qbin outside the bounds of the quality word. Defaulting to Qbin=0. Qbin = " - << qbin << " QualityWord = " << qualWord; + warningOutOfBoundQbin(qbin, qualWord); qbin = 0; } return qbin; @@ -119,9 +111,7 @@ class SiPixelRecHitQuality { // inline void setProbabilityXY(float prob, QualWordType& qualWord) const { if (prob < 0 || prob > 1) { - edm::LogWarning("OutOfBounds") - << "Prob XY outside the bounds of the quality word. Defaulting to Prob=0. Prob = " << prob - << " QualityWord = " << qualWord; + warningOutOfBoundProb("XY", prob, qualWord); prob = 0; } double draw = (prob <= 1.6E-13) ? 16383 : -log((double)prob) * probX_1_over_log_units; @@ -131,8 +121,7 @@ class SiPixelRecHitQuality { } inline void setProbabilityQ(float prob, QualWordType& qualWord) const { if (prob < 0 || prob > 1) { - edm::LogWarning("OutOfBounds") << "Prob Q outside the bounds of the quality word. Defaulting to Prob=0. Prob = " - << prob << " QualityWord = " << qualWord; + warningOutOfBoundProb("Q", prob, qualWord); prob = 0; } double draw = (prob <= 1E-5) ? 255 : -log((double)prob) * probY_1_over_log_units; @@ -143,8 +132,7 @@ class SiPixelRecHitQuality { inline void setQBin(int qbin, QualWordType& qualWord) const { if (qbin < 0 || qbin > 7) { - edm::LogWarning("OutOfBounds") << "Qbin outside the bounds of the quality word. Defaulting to Qbin=0. Qbin = " - << qbin << " QualityWord = " << qualWord; + warningOutOfBoundQbin(qbin, qualWord); qbin = 0; } qualWord |= ((qbin & qBin_mask) << qBin_shift); @@ -164,6 +152,12 @@ class SiPixelRecHitQuality { public: static const Packing thePacking; + +private: + static void warningObsolete(); + static void warningOutOfBoundQbin(int, QualWordType const&); + static void warningOutOfBoundProb(const char* iVariable, float, QualWordType const&); + static void warningOutOfBoundRaw(const char* iVariable, int iRaw, QualWordType const&); }; #endif diff --git a/DataFormats/TrackerRecHit2D/src/SiPixelRecHitQuality.cc b/DataFormats/TrackerRecHit2D/src/SiPixelRecHitQuality.cc index 6ee9931c68b56..422b916667f74 100644 --- a/DataFormats/TrackerRecHit2D/src/SiPixelRecHitQuality.cc +++ b/DataFormats/TrackerRecHit2D/src/SiPixelRecHitQuality.cc @@ -52,3 +52,25 @@ SiPixelRecHitQuality::Packing::Packing() { // Initialize the packing format singleton const SiPixelRecHitQuality::Packing SiPixelRecHitQuality::thePacking; + +void SiPixelRecHitQuality::warningObsolete() { + edm::LogWarning("ObsoleteVariable") + << "Since 39x, probabilityX and probabilityY have been replaced by probabilityXY and probabilityQ"; +} + +void SiPixelRecHitQuality::warningOutOfBoundQbin(int iValue, QualWordType const& iQualWord) { + edm::LogWarning("OutOfBounds") << "Qbin outside the bounds of the quality word. Defaulting to Qbin=0. Qbin = " + << iValue << " QualityWord = " << iQualWord; +} + +void SiPixelRecHitQuality::warningOutOfBoundProb(const char* iName, float iProb, QualWordType const& iQualWord) { + edm::LogWarning("OutOfBounds") << "Prob " << iName + << " outside the bounds of the quality word. Defaulting to Prob=0. Prob = " << iProb + << " QualityWord = " << iQualWord; +} + +void SiPixelRecHitQuality::warningOutOfBoundRaw(const char* iName, int iRaw, QualWordType const& iQualWord) { + edm::LogWarning("OutOfBounds") << "Probability " << iName + << " outside the bounds of the quality word. Defaulting to Prob=0. Raw = " << iRaw + << " QualityWord = " << iQualWord; +} diff --git a/DataFormats/TrackingRecHit/BuildFile.xml b/DataFormats/TrackingRecHit/BuildFile.xml index c22f87d6e1db9..e9c7b52166f09 100644 --- a/DataFormats/TrackingRecHit/BuildFile.xml +++ b/DataFormats/TrackingRecHit/BuildFile.xml @@ -4,6 +4,9 @@ + + + diff --git a/DataFormats/TrajectoryState/BuildFile.xml b/DataFormats/TrajectoryState/BuildFile.xml index ea3598810ab81..6771c1c232a4e 100644 --- a/DataFormats/TrajectoryState/BuildFile.xml +++ b/DataFormats/TrajectoryState/BuildFile.xml @@ -1,4 +1,5 @@ + diff --git a/DataFormats/VertexReco/BuildFile.xml b/DataFormats/VertexReco/BuildFile.xml index 061af954fdd84..a8c7cac35828d 100644 --- a/DataFormats/VertexReco/BuildFile.xml +++ b/DataFormats/VertexReco/BuildFile.xml @@ -1,5 +1,7 @@ + + diff --git a/DetectorDescription/DDCMS/interface/DDFilteredView.h b/DetectorDescription/DDCMS/interface/DDFilteredView.h index 333c21904a06a..14618917eac56 100644 --- a/DetectorDescription/DDCMS/interface/DDFilteredView.h +++ b/DetectorDescription/DDCMS/interface/DDFilteredView.h @@ -166,7 +166,7 @@ namespace cms { T get(const std::string&); //! extract attribute value for current Node - // keep the maespace for comparison + // keep the namespace for comparison // assume there are no regular expressions template std::vector getValuesNS(const std::string& key) { diff --git a/DetectorDescription/DDCMS/interface/DDutils.h b/DetectorDescription/DDCMS/interface/DDutils.h new file mode 100644 index 0000000000000..683a77fb5e0e1 --- /dev/null +++ b/DetectorDescription/DDCMS/interface/DDutils.h @@ -0,0 +1,11 @@ +#ifndef DETECTOR_DESCRIPTION_DDCMS_DDUTILS_H +#define DETECTOR_DESCRIPTION_DDCMS_DDUTILS_H +#include "DD4hep/DD4hepUnits.h" + +namespace cms { + template + inline constexpr NumType convert2mm(NumType length) { + return (length / dd4hep::mm); + } +} // namespace cms +#endif diff --git a/DetectorDescription/DDCMS/plugins/dd4hep/DDDefinitions2Objects.cc b/DetectorDescription/DDCMS/plugins/dd4hep/DDDefinitions2Objects.cc index 2e6b97a2028e6..46b36392bb718 100644 --- a/DetectorDescription/DDCMS/plugins/dd4hep/DDDefinitions2Objects.cc +++ b/DetectorDescription/DDCMS/plugins/dd4hep/DDDefinitions2Objects.cc @@ -402,7 +402,7 @@ void Converter::operator()(xml_h element) const { DDRegistry* res = _option(); xml_dim_t constant = element; xml_dim_t par = constant.parent(); - bool eval = par.hasAttr(_U(eval)) ? par.attr(_U(eval)) : false; + bool eval = par.hasAttr(_U(eval)) ? par.attr(_U(eval)) : true; string val = constant.valueStr(); string nam = constant.nameStr(); string real = ns.prepend(nam); @@ -986,8 +986,10 @@ void Converter::operator()(xml_h element) const { string specParName = specPar.attr(_U(name)); string name = e.nameStr(); string value = e.attr(DD_CMU(value)); - bool eval = e.hasAttr(_U(eval)) ? e.attr(_U(eval)) - : (specParSect.hasAttr(_U(eval)) ? specParSect.attr(_U(eval)) : false); + bool eval = specParSect.hasAttr(_U(eval)) ? specParSect.attr(_U(eval)) : false; + eval = specPar.hasAttr(_U(eval)) ? specPar.attr(_U(eval)) : eval; + eval = e.hasAttr(_U(eval)) ? e.attr(_U(eval)) : eval; + string type = eval ? "number" : "string"; #ifdef EDM_ML_DEBUG @@ -1003,6 +1005,10 @@ void Converter::operator()(xml_h element) const { #endif size_t idx = value.find('['); + if (idx == string::npos && type == "number") { + registry.specpars[specParName].numpars[name].emplace_back(dd4hep::_toDouble(value)); + return; + } if (idx == string::npos || type == "string") { registry.specpars[specParName].spars[name].emplace_back(std::move(value)); return; @@ -1245,8 +1251,8 @@ void Converter::operator()(xml_h element) const { "DD4CMS", "+ Sphere: r_inner=%8.3f [cm] r_outer=%8.3f [cm]" " startPhi=%8.3f [rad] deltaPhi=%8.3f startTheta=%8.3f delteTheta=%8.3f [rad]", - rinner, - router, + rinner / dd4hep::cm, + router / dd4hep::cm, startPhi, deltaPhi, startTheta, @@ -1275,9 +1281,9 @@ void Converter::operator()(xml_h element) const { "DD4CMS", "+ Torus: r=%10.3f [cm] r_inner=%10.3f [cm] r_outer=%10.3f [cm]" " startPhi=%10.3f [rad] deltaPhi=%10.3f [rad]", - r, - rinner, - router, + r / dd4hep::cm, + rinner / dd4hep::cm, + router / dd4hep::cm, startPhi, deltaPhi); @@ -1305,12 +1311,12 @@ void Converter::operator()(xml_h element) const { printout(ns.context()->debug_shapes ? ALWAYS : DEBUG, "DD4CMS", "+ Pseudotrap: dz=%8.3f [cm] dx1:%.3f dy1:%.3f dx2=%.3f dy2=%.3f radius:%.3f atMinusZ:%s", - dz, - dx1, - dy1, - dx2, - dy2, - r, + dz / dd4hep::cm, + dx1 / dd4hep::cm, + dy1 / dd4hep::cm, + dx2 / dd4hep::cm, + dy2 / dd4hep::cm, + r / dd4hep::cm, yes_no(atMinusZ)); #endif @@ -1342,15 +1348,15 @@ void Converter::operator()(xml_h element) const { "DD4CMS", "+ Trapezoid: dz=%10.3f [cm] alp1:%.3f bl1=%.3f tl1=%.3f alp2=%.3f bl2=%.3f tl2=%.3f h2=%.3f phi=%.3f " "theta=%.3f", - dz, + dz / dd4hep::cm, alp1, - bl1, - tl1, - h1, + bl1 / dd4hep::cm, + tl1 / dd4hep::cm, + h1 / dd4hep::cm, alp2, - bl2, - tl2, - h2, + bl2 / dd4hep::cm, + tl2 / dd4hep::cm, + h2 / dd4hep::cm, phi, theta); @@ -1376,11 +1382,11 @@ void Converter::operator()(xml_h element) const { printout(ns.context()->debug_shapes ? ALWAYS : DEBUG, "DD4CMS", "+ Trd1: dz=%8.3f [cm] dx1:%.3f dy1:%.3f dx2:%.3f dy2:%.3f", - dz, - dx1, - dy1, - dx2, - dy2); + dz / dd4hep::cm, + dx1 / dd4hep::cm, + dy1 / dd4hep::cm, + dx2 / dd4hep::cm, + dy2 / dd4hep::cm); #endif @@ -1391,11 +1397,11 @@ void Converter::operator()(xml_h element) const { printout(ns.context()->debug_shapes ? ALWAYS : DEBUG, "DD4CMS", "+ Trd1(which is actually Trd2): dz=%8.3f [cm] dx1:%.3f dy1:%.3f dx2:%.3f dy2:%.3f", - dz, - dx1, - dy1, - dx2, - dy2); + dz / dd4hep::cm, + dx1 / dd4hep::cm, + dy1 / dd4hep::cm, + dx2 / dd4hep::cm, + dy2 / dd4hep::cm); #endif @@ -1420,11 +1426,11 @@ void Converter::operator()(xml_h element) const { printout(ns.context()->debug_shapes ? ALWAYS : DEBUG, "DD4CMS", "+ Trd1: dz=%8.3f [cm] dx1:%.3f dy1:%.3f dx2:%.3f dy2:%.3f", - dz, - dx1, - dy1, - dx2, - dy2); + dz / dd4hep::cm, + dx1 / dd4hep::cm, + dy1 / dd4hep::cm, + dx2 / dd4hep::cm, + dy2 / dd4hep::cm); #endif @@ -1449,9 +1455,9 @@ void Converter::operator()(xml_h element) const { "DD4CMS", "+ Tubs: dz=%8.3f [cm] rmin=%8.3f [cm] rmax=%8.3f [cm]" " startPhi=%8.3f [rad] deltaPhi=%8.3f [rad]", - dz, - rmin, - rmax, + dz / dd4hep::cm, + rmin / dd4hep::cm, + rmax / dd4hep::cm, startPhi, deltaPhi); @@ -1484,9 +1490,9 @@ void Converter::operator()(xml_h element) const { "DD4CMS", "+ CutTube: dz=%8.3f [cm] rmin=%8.3f [cm] rmax=%8.3f [cm]" " startPhi=%8.3f [rad] deltaPhi=%8.3f [rad]...", - dz, - rmin, - rmax, + dz / dd4hep::cm, + rmin / dd4hep::cm, + rmax / dd4hep::cm, startPhi, deltaPhi); @@ -1516,13 +1522,13 @@ void Converter::operator()(xml_h element) const { "DD4CMS", "+ TruncTube:zHalf=%8.3f [cm] rmin=%8.3f [cm] rmax=%8.3f [cm]" " startPhi=%8.3f [rad] deltaPhi=%8.3f [rad] atStart=%8.3f [cm] atDelta=%8.3f [cm] inside:%s", - zhalf, - rmin, - rmax, + zhalf / dd4hep::cm, + rmin / dd4hep::cm, + rmax / dd4hep::cm, startPhi, deltaPhi, - cutAtStart, - cutAtDelta, + cutAtStart / dd4hep::cm, + cutAtDelta / dd4hep::cm, yes_no(cutInside)); #endif @@ -1545,9 +1551,9 @@ void Converter::operator()(xml_h element) const { printout(ns.context()->debug_shapes ? ALWAYS : DEBUG, "DD4CMS", "+ EllipticalTube xSemiAxis=%8.3f [cm] ySemiAxis=%8.3f [cm] zHeight=%8.3f [cm]", - dx, - dy, - dz); + dx / dd4hep::cm, + dy / dd4hep::cm, + dz / dd4hep::cm); #endif @@ -1577,11 +1583,11 @@ void Converter::operator()(xml_h element) const { " rmin1=%8.3f [cm] rmax1=%8.3f [cm]" " rmin2=%8.3f [cm] rmax2=%8.3f [cm]" " startPhi=%8.3f [rad] deltaPhi=%8.3f [rad]", - dz, - rmin1, - rmax1, - rmin2, - rmax2, + dz / dd4hep::cm, + rmin1 / dd4hep::cm, + rmax1 / dd4hep::cm, + rmin2 / dd4hep::cm, + rmax2 / dd4hep::cm, startPhi, deltaPhi); @@ -1624,9 +1630,9 @@ void Converter::operator()(xml_h element) const { printout(ns.context()->debug_shapes ? ALWAYS : DEBUG, "DD4CMS", "+ Box: dx=%10.3f [cm] dy=%10.3f [cm] dz=%10.3f [cm]", - dx, - dy, - dz); + dx / dd4hep::cm, + dy / dd4hep::cm, + dz / dd4hep::cm); #endif diff --git a/DetectorDescription/DDCMS/plugins/test/DDTestSpecParsFilter.cc b/DetectorDescription/DDCMS/plugins/test/DDTestSpecParsFilter.cc index 3f96052842367..503825ff89dd2 100644 --- a/DetectorDescription/DDCMS/plugins/test/DDTestSpecParsFilter.cc +++ b/DetectorDescription/DDCMS/plugins/test/DDTestSpecParsFilter.cc @@ -4,6 +4,7 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Geometry/Records/interface/DDSpecParRegistryRcd.h" + #include #include @@ -62,6 +63,13 @@ void DDTestSpecParsFilter::analyze(const Event&, const EventSetup& iEventSetup) } log << "\n "; } + for (const auto& kl : t.second->numpars) { + log << kl.first << " = "; + for (const auto& kil : kl.second) { + log << kil << " "; + } + log << "\n "; + } } }); std::cout << "*** Check names in a path after filtering:\n"; diff --git a/DetectorDescription/DDCMS/src/DDFilteredView.cc b/DetectorDescription/DDCMS/src/DDFilteredView.cc index 93da987955292..d3b1726d9b37c 100644 --- a/DetectorDescription/DDCMS/src/DDFilteredView.cc +++ b/DetectorDescription/DDCMS/src/DDFilteredView.cc @@ -770,8 +770,9 @@ const int DDFilteredView::nodeCopyNoAt(int level) const { // Compare if name matches a selection pattern that // may or may not be defined as a regular expression bool DDFilteredView::compareEqualName(const std::string_view selection, const std::string_view name) const { - return (!(dd4hep::dd::isRegex(selection)) ? dd4hep::dd::compareEqual(name, selection) - : regex_match(name.begin(), name.end(), regex(std::string(selection)))); + return (!(dd4hep::dd::isRegex(selection)) + ? dd4hep::dd::compareEqual(name, selection) + : regex_match(name.begin(), name.end(), regex(selection.begin(), selection.end()))); } // Check if both name and it's selection pattern @@ -841,14 +842,9 @@ double DDFilteredView::getNextValue(const std::string& key) const { double result(0.0); if (currentSpecPar_ != nullptr) { - std::string_view svalue = currentSpecPar_->strValue(key); - if (!svalue.empty()) { - result = dd4hep::_toDouble({svalue.data(), svalue.size()}); - } else if (currentSpecPar_->hasValue(key)) { - auto const& nitem = currentSpecPar_->numpars.find(key); - if (nitem != end(currentSpecPar_->numpars)) { - result = nitem->second[0]; - } + auto const& nitem = currentSpecPar_->numpars.find(key); + if (nitem != end(currentSpecPar_->numpars)) { + result = nitem->second[0]; } } diff --git a/DetectorDescription/DDCMS/test/DDFilteredView.cppunit.cc b/DetectorDescription/DDCMS/test/DDFilteredView.cppunit.cc index 10ef4a6392246..5d7a5e47c19a2 100644 --- a/DetectorDescription/DDCMS/test/DDFilteredView.cppunit.cc +++ b/DetectorDescription/DDCMS/test/DDFilteredView.cppunit.cc @@ -48,19 +48,19 @@ void testDDFilteredView::setUp() { "0.4002930E-03/cm", "0.4009888E-03/cm", "0.3954170E-03/cm", "0.3893599E-03/cm", "0.3839422E-03/cm"}; refdLongFL_ = { 227.993, 237.122, 241.701, 256.48, 266.754, 275.988, 276.982, 284.989, 286.307, 290.478, 290.5, 292, 295.5}; - refsLongFL_ = {"227.9925651*cm", - "237.1215213*cm", - "241.7005445*cm", - "256.47981*cm", - "266.7540042*cm", - "275.987715*cm", - "276.9823529*cm", - "284.9889299*cm", - "286.3065327*cm", - "290.4779412*cm", - "290.5*cm", - "292.0*cm", - "295.5*cm"}; + refsLongFL_ = {"227.9925651", + "237.1215213", + "241.7005445", + "256.47981", + "266.7540042", + "275.987715", + "276.9823529", + "284.9889299", + "286.3065327", + "290.4779412", + "290.5", + "292.0", + "295.5"}; } void testDDFilteredView::checkFilteredView() { @@ -94,7 +94,8 @@ void testDDFilteredView::checkFilteredView() { cout << "Get attl from hf as double values:\n"; vector attl = fview.get>("hf", "attl"); int count(0); - for (auto const& i : attl) { + for (double i : attl) { + i *= dd4hep::cm; // Convert DD4hep units to /cm std::cout << "attl " << i << " == " << refdattl_[count] << "\n"; CPPUNIT_ASSERT(abs(i - refdattl_[count]) < 10e-6); count++; @@ -103,18 +104,20 @@ void testDDFilteredView::checkFilteredView() { std::cout << "Get LongFL from hf as double values:\n"; count = 0; std::vector LongFL = fview.get>("hf", "LongFL"); - for (auto const& i : LongFL) { + for (double i : LongFL) { + i /= dd4hep::cm; // Convert DD4hep units to cm std::cout << "LongFL " << i << " == " << refdLongFL_[count] << "\n"; CPPUNIT_ASSERT(abs(i - refdLongFL_[count]) < 10e-2); count++; } - std::cout << "Get LongFL from hf as string values:\n"; + std::cout << "Get LongFL from hf as numerically evaluated string values:\n"; count = 0; std::vector sLongFL = fview.get>("hf", "LongFL"); for (auto const& i : sLongFL) { - std::cout << "LongFL " << i << " == " << refsLongFL_[count] << "\n"; - CPPUNIT_ASSERT(i.compare(refsLongFL_[count]) == 0); + double dblVal = std::stod(i) / dd4hep::cm; // Convert DD4hep units to cm + std::cout << "LongFL " << dblVal << " == " << refsLongFL_[count] << "\n"; + CPPUNIT_ASSERT(abs(dblVal - std::stod(refsLongFL_[count])) < 10e-6); count++; } diff --git a/DetectorDescription/DDCMS/test/DDFilteredView.find.cppunit.cc b/DetectorDescription/DDCMS/test/DDFilteredView.find.cppunit.cc index 0418be93d9b1a..124407bb42de7 100644 --- a/DetectorDescription/DDCMS/test/DDFilteredView.find.cppunit.cc +++ b/DetectorDescription/DDCMS/test/DDFilteredView.find.cppunit.cc @@ -68,9 +68,10 @@ void testDDFilteredViewFind::checkFilteredView() { fview.findSpecPar("TrackerRadLength", "TrackerXi"); double radLength = fview.getNextValue("TrackerRadLength"); + std::cout << radLength << "\n"; double xi = fview.getNextValue("TrackerXi"); - CPPUNIT_ASSERT(radLength == refRadLength_); - CPPUNIT_ASSERT(xi == refXi_); + CPPUNIT_ASSERT(abs(radLength - refRadLength_) < 10e-6); + CPPUNIT_ASSERT(abs(xi - refXi_) < 10e-6); std::cout << "TrackerRadLength = " << radLength << "\nTrackerXi = " << xi << "\n"; diff --git a/DetectorDescription/DDCMS/test/DDFilteredView.get.cppunit.cc b/DetectorDescription/DDCMS/test/DDFilteredView.get.cppunit.cc index bea43d8d940f6..6e95b8cb03cb3 100644 --- a/DetectorDescription/DDCMS/test/DDFilteredView.get.cppunit.cc +++ b/DetectorDescription/DDCMS/test/DDFilteredView.get.cppunit.cc @@ -69,8 +69,8 @@ void testDDFilteredViewGet::checkFilteredView() { double radLength = fview.getNextValue("TrackerRadLength"); double xi = fview.getNextValue("TrackerXi"); - CPPUNIT_ASSERT(radLength == refRadLength_); - CPPUNIT_ASSERT(xi == refXi_); + CPPUNIT_ASSERT(abs(radLength - refRadLength_) < 10e-6); + CPPUNIT_ASSERT(abs(xi - refXi_) < 10e-6); std::cout << "TrackerRadLength = " << radLength << "\nTrackerXi = " << xi << "\n"; auto vals = fview.getValuesNS("TrackerRadLength"); diff --git a/DetectorDescription/DDCMS/test/DDFilteredView.goto.cppunit.cc b/DetectorDescription/DDCMS/test/DDFilteredView.goto.cppunit.cc index 6767590448957..b97695b18ffe7 100644 --- a/DetectorDescription/DDCMS/test/DDFilteredView.goto.cppunit.cc +++ b/DetectorDescription/DDCMS/test/DDFilteredView.goto.cppunit.cc @@ -65,8 +65,8 @@ void testDDFilteredViewGoTo::checkFilteredView() { double radLength = fview.get("TrackerRadLength"); double xi = fview.getNextValue("TrackerXi"); - CPPUNIT_ASSERT(radLength == refRadLength_); - CPPUNIT_ASSERT(xi == refXi_); + CPPUNIT_ASSERT(abs(radLength - refRadLength_) < 10e-6); + CPPUNIT_ASSERT(abs(xi - refXi_) < 10e-6); std::cout << "TrackerRadLength = " << radLength << "\nTrackerXi = " << xi << "\n"; diff --git a/DetectorDescription/DDCMS/test/DDSolid.cppunit.cc b/DetectorDescription/DDCMS/test/DDSolid.cppunit.cc index 4d57dfbb04b44..dfdefe53e43d4 100644 --- a/DetectorDescription/DDCMS/test/DDSolid.cppunit.cc +++ b/DetectorDescription/DDCMS/test/DDSolid.cppunit.cc @@ -54,12 +54,12 @@ void testDDSolid::checkDDSolid() { if (dd4hep::isA(dd4hep::Solid(solidA))) { cout << " is a ConeSegment:\n"; for (auto const& i : solidA.dimensions()) - cout << i << ", "; + cout << i / dd4hep::cm << " cm, "; } cout << "\n"; DDSolid a(solidA); for (auto const& i : a.parameters()) - cout << i << ", "; + cout << i / dd4hep::cm << " cm, "; cout << "\n"; auto solidB = solid.solidB(); @@ -67,12 +67,12 @@ void testDDSolid::checkDDSolid() { if (dd4hep::isA(dd4hep::Solid(solidB))) { cout << " is a ConeSegment:\n"; for (auto const& i : solidB.dimensions()) - cout << i << ", "; + cout << i / dd4hep::cm << " cm, "; } cout << "\n"; DDSolid b(solidB); for (auto const& i : b.parameters()) - cout << i << ", "; + cout << i / dd4hep::cm << " cm, "; cout << "\n"; } } diff --git a/DetectorDescription/OfflineDBLoader/test/dumpGeom_cfg.py b/DetectorDescription/OfflineDBLoader/test/dumpGeom_cfg.py index cf7f5996349e5..4529bce5e3c07 100644 --- a/DetectorDescription/OfflineDBLoader/test/dumpGeom_cfg.py +++ b/DetectorDescription/OfflineDBLoader/test/dumpGeom_cfg.py @@ -10,7 +10,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/DiffractiveForwardAnalysis/Configuration/python/DiffractiveForwardAnalysis_EventContent_cff.py b/DiffractiveForwardAnalysis/Configuration/python/DiffractiveForwardAnalysis_EventContent_cff.py deleted file mode 100644 index 25703dd45a2ac..0000000000000 --- a/DiffractiveForwardAnalysis/Configuration/python/DiffractiveForwardAnalysis_EventContent_cff.py +++ /dev/null @@ -1,6 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -DiffractiveForwardAnalysisEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) - diff --git a/DiffractiveForwardAnalysis/Configuration/python/DiffractiveForwardAnalysis_OutputModules_cff.py b/DiffractiveForwardAnalysis/Configuration/python/DiffractiveForwardAnalysis_OutputModules_cff.py deleted file mode 100644 index 6abae9abed912..0000000000000 --- a/DiffractiveForwardAnalysis/Configuration/python/DiffractiveForwardAnalysis_OutputModules_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from DiffractiveForwardAnalysis.Skimming.gammagammaEEOutputModule_cfi import * -from DiffractiveForwardAnalysis.Skimming.gammagammaMuMuOutputModule_cfi import * - diff --git a/DiffractiveForwardAnalysis/Configuration/python/DiffractiveForwardAnalysis_SkimPaths_cff.py b/DiffractiveForwardAnalysis/Configuration/python/DiffractiveForwardAnalysis_SkimPaths_cff.py deleted file mode 100644 index 1d63641a97a0d..0000000000000 --- a/DiffractiveForwardAnalysis/Configuration/python/DiffractiveForwardAnalysis_SkimPaths_cff.py +++ /dev/null @@ -1,6 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Diffraction and Forward Physics group Skim sequences -from DiffractiveForwardAnalysis.Skimming.gammagammaEE_SkimPaths_cff import * -from DiffractiveForwardAnalysis.Skimming.gammagammaMuMu_SkimPaths_cff import * - diff --git a/DiffractiveForwardAnalysis/Skimming/python/diffWToENuHLTPaths_cfi.py b/DiffractiveForwardAnalysis/Skimming/python/diffWToENuHLTPaths_cfi.py deleted file mode 100644 index 97db81a2ad0d0..0000000000000 --- a/DiffractiveForwardAnalysis/Skimming/python/diffWToENuHLTPaths_cfi.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -diffWToENuHLTFilter = copy.deepcopy(hltHighLevel) -diffWToENuHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") -diffWToENuHLTFilter.HLTPaths = ['HLT1Electron'] - diff --git a/DiffractiveForwardAnalysis/Skimming/python/diffWToENuOutputModule_cfi.py b/DiffractiveForwardAnalysis/Skimming/python/diffWToENuOutputModule_cfi.py deleted file mode 100644 index 4bcbc1f712c34..0000000000000 --- a/DiffractiveForwardAnalysis/Skimming/python/diffWToENuOutputModule_cfi.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -diffWToENuOutputModule = cms.OutputModule("PoolOutputModule", - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('diffWToENu'), - dataTier = cms.untracked.string('USER') - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('diffWToENuHLTPath') - ), - fileName = cms.untracked.string('diffWToENuFiltered.root') -) - - diff --git a/DiffractiveForwardAnalysis/Skimming/python/diffWToENu_SkimPaths_cff.py b/DiffractiveForwardAnalysis/Skimming/python/diffWToENu_SkimPaths_cff.py deleted file mode 100644 index ae145a6755b2f..0000000000000 --- a/DiffractiveForwardAnalysis/Skimming/python/diffWToENu_SkimPaths_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from DiffractiveForwardAnalysis.Skimming.diffWToENuHLTPaths_cfi import * -diffWToENuHLTPath = cms.Path(diffWToENuHLTFilter) - diff --git a/DiffractiveForwardAnalysis/Skimming/python/diffWToMuNuHLTPaths_cfi.py b/DiffractiveForwardAnalysis/Skimming/python/diffWToMuNuHLTPaths_cfi.py deleted file mode 100644 index 0ee0c06d66291..0000000000000 --- a/DiffractiveForwardAnalysis/Skimming/python/diffWToMuNuHLTPaths_cfi.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -diffWToMuNuHLTFilter = copy.deepcopy(hltHighLevel) -diffWToMuNuHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") -diffWToMuNuHLTFilter.HLTPaths = ['HLT1MuonIso', 'HLT1MuonNonIso'] - diff --git a/DiffractiveForwardAnalysis/Skimming/python/diffWToMuNuOutputModule_cfi.py b/DiffractiveForwardAnalysis/Skimming/python/diffWToMuNuOutputModule_cfi.py deleted file mode 100644 index 5950e79e31ec9..0000000000000 --- a/DiffractiveForwardAnalysis/Skimming/python/diffWToMuNuOutputModule_cfi.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -diffWToMuNuOutputModule = cms.OutputModule("PoolOutputModule", - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('diffWToMuNu'), - dataTier = cms.untracked.string('USER') - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('diffWToMuNuHLTPath') - ), - fileName = cms.untracked.string('diffWToMuNuFiltered.root') -) - - diff --git a/DiffractiveForwardAnalysis/Skimming/python/diffWToMuNu_SkimPaths_cff.py b/DiffractiveForwardAnalysis/Skimming/python/diffWToMuNu_SkimPaths_cff.py deleted file mode 100644 index 0c3b9e359a768..0000000000000 --- a/DiffractiveForwardAnalysis/Skimming/python/diffWToMuNu_SkimPaths_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from DiffractiveForwardAnalysis.Skimming.diffWToMuNuHLTPaths_cfi import * -diffWToMuNuHLTPath = cms.Path(diffWToMuNuHLTFilter) - diff --git a/DiffractiveForwardAnalysis/Skimming/python/gammagammaEEHLTPaths_cfi.py b/DiffractiveForwardAnalysis/Skimming/python/gammagammaEEHLTPaths_cfi.py deleted file mode 100644 index 29eddf76b74c1..0000000000000 --- a/DiffractiveForwardAnalysis/Skimming/python/gammagammaEEHLTPaths_cfi.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -gammagammaEEHLTFilter = copy.deepcopy(hltHighLevel) -gammagammaEEHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") -gammagammaEEHLTFilter.HLTPaths = ['CandHLT2ElectronExclusive'] - diff --git a/DiffractiveForwardAnalysis/Skimming/python/gammagammaEEOutputModule_cfi.py b/DiffractiveForwardAnalysis/Skimming/python/gammagammaEEOutputModule_cfi.py deleted file mode 100644 index b6fb3915935f6..0000000000000 --- a/DiffractiveForwardAnalysis/Skimming/python/gammagammaEEOutputModule_cfi.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -gammagammaEEOutputModule = cms.OutputModule("PoolOutputModule", - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('gammagammaEE'), - dataTier = cms.untracked.string('USER') - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('gammagammaEEHLTPath') - ), - fileName = cms.untracked.string('gammagammaEEFiltered.root') -) - - diff --git a/DiffractiveForwardAnalysis/Skimming/python/gammagammaEE_SkimPaths_cff.py b/DiffractiveForwardAnalysis/Skimming/python/gammagammaEE_SkimPaths_cff.py deleted file mode 100644 index 39e925ca29db7..0000000000000 --- a/DiffractiveForwardAnalysis/Skimming/python/gammagammaEE_SkimPaths_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from DiffractiveForwardAnalysis.Skimming.gammagammaEEHLTPaths_cfi import * -gammagammaEEHLTPath = cms.Path(gammagammaEEHLTFilter) - diff --git a/DiffractiveForwardAnalysis/Skimming/python/gammagammaMuMuHLTPaths_cfi.py b/DiffractiveForwardAnalysis/Skimming/python/gammagammaMuMuHLTPaths_cfi.py deleted file mode 100644 index 2f852c3533090..0000000000000 --- a/DiffractiveForwardAnalysis/Skimming/python/gammagammaMuMuHLTPaths_cfi.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -gammagammaMuMuHLTFilter = copy.deepcopy(hltHighLevel) -gammagammaMuMuHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") -gammagammaMuMuHLTFilter.HLTPaths = ['HLT2MuonNonIso'] - diff --git a/DiffractiveForwardAnalysis/Skimming/python/gammagammaMuMuOutputModule_cfi.py b/DiffractiveForwardAnalysis/Skimming/python/gammagammaMuMuOutputModule_cfi.py deleted file mode 100644 index 5a765c9bfbcf0..0000000000000 --- a/DiffractiveForwardAnalysis/Skimming/python/gammagammaMuMuOutputModule_cfi.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -gammagammaMuMuOutputModule = cms.OutputModule("PoolOutputModule", - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('gammagammaMuMu'), - dataTier = cms.untracked.string('USER') - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('gammagammaMuMuHLTPath') - ), - fileName = cms.untracked.string('gammagammaMuMuFiltered.root') -) - - diff --git a/DiffractiveForwardAnalysis/Skimming/python/gammagammaMuMu_SkimPaths_cff.py b/DiffractiveForwardAnalysis/Skimming/python/gammagammaMuMu_SkimPaths_cff.py deleted file mode 100644 index 74992651ece17..0000000000000 --- a/DiffractiveForwardAnalysis/Skimming/python/gammagammaMuMu_SkimPaths_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from DiffractiveForwardAnalysis.Skimming.gammagammaMuMuHLTPaths_cfi import * -gammagammaMuMuHLTPath = cms.Path(gammagammaMuMuHLTFilter) - diff --git a/EgammaAnalysis/ElectronTools/BuildFile.xml b/EgammaAnalysis/ElectronTools/BuildFile.xml index 4ea5977a7036c..c8dd4bf8a853d 100644 --- a/EgammaAnalysis/ElectronTools/BuildFile.xml +++ b/EgammaAnalysis/ElectronTools/BuildFile.xml @@ -3,7 +3,7 @@ - + diff --git a/EgammaAnalysis/ElectronTools/interface/ElectronEnergyRegressionEvaluate.h b/EgammaAnalysis/ElectronTools/interface/ElectronEnergyRegressionEvaluate.h index d1c78eeac7934..1ea4bad6b7b70 100644 --- a/EgammaAnalysis/ElectronTools/interface/ElectronEnergyRegressionEvaluate.h +++ b/EgammaAnalysis/ElectronTools/interface/ElectronEnergyRegressionEvaluate.h @@ -22,11 +22,10 @@ #include "TTree.h" // For applying regression -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #ifndef STANDALONE #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" #include "EgammaAnalysis/ElectronTools/interface/SuperClusterHelper.h" -//#include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h" #endif class ElectronEnergyRegressionEvaluate { diff --git a/EgammaAnalysis/ElectronTools/interface/EpCombinationTool.h b/EgammaAnalysis/ElectronTools/interface/EpCombinationTool.h index 17f6128eef187..834c7e9e0edc2 100644 --- a/EgammaAnalysis/ElectronTools/interface/EpCombinationTool.h +++ b/EgammaAnalysis/ElectronTools/interface/EpCombinationTool.h @@ -2,7 +2,7 @@ #define EPCOMBINATIONTOOL_H #include -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "EgammaAnalysis/ElectronTools/interface/SimpleElectron.h" class GBRForest; diff --git a/EgammaAnalysis/ElectronTools/plugins/CalibratedElectronProducersRun2.cc b/EgammaAnalysis/ElectronTools/plugins/CalibratedElectronProducersRun2.cc index ec0c60640453e..cbc00e9a8cdbc 100644 --- a/EgammaAnalysis/ElectronTools/plugins/CalibratedElectronProducersRun2.cc +++ b/EgammaAnalysis/ElectronTools/plugins/CalibratedElectronProducersRun2.cc @@ -12,7 +12,7 @@ #include "DataFormats/PatCandidates/interface/Electron.h" #include "CondFormats/DataRecord/interface/GBRWrapperRcd.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "EgammaAnalysis/ElectronTools/interface/EpCombinationTool.h" #include "EgammaAnalysis/ElectronTools/interface/ElectronEnergyCalibratorRun2.h" diff --git a/EgammaAnalysis/ElectronTools/plugins/GBRForestGetterFromDB.cc b/EgammaAnalysis/ElectronTools/plugins/GBRForestGetterFromDB.cc index c1c323616a6f9..799516f15c328 100644 --- a/EgammaAnalysis/ElectronTools/plugins/GBRForestGetterFromDB.cc +++ b/EgammaAnalysis/ElectronTools/plugins/GBRForestGetterFromDB.cc @@ -12,7 +12,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "CondFormats/DataRecord/interface/GBRWrapperRcd.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include class GBRForestGetterFromDB : public edm::one::EDAnalyzer<> { diff --git a/EgammaAnalysis/ElectronTools/src/EpCombinationTool.cc b/EgammaAnalysis/ElectronTools/src/EpCombinationTool.cc index 070f317409d86..1408e458acd43 100644 --- a/EgammaAnalysis/ElectronTools/src/EpCombinationTool.cc +++ b/EgammaAnalysis/ElectronTools/src/EpCombinationTool.cc @@ -1,5 +1,5 @@ #include "EgammaAnalysis/ElectronTools/interface/EpCombinationTool.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include #include #include diff --git a/ElectroWeakAnalysis/Configuration/python/ElectroWeakAnalysis_EventContent_cff.py b/ElectroWeakAnalysis/Configuration/python/ElectroWeakAnalysis_EventContent_cff.py deleted file mode 100644 index 806b7dc72dfb1..0000000000000 --- a/ElectroWeakAnalysis/Configuration/python/ElectroWeakAnalysis_EventContent_cff.py +++ /dev/null @@ -1,9 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# ElectroWeakAnalysis event content -# -ElectroWeakAnalysisEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() - ) - diff --git a/ElectroWeakAnalysis/Configuration/python/ElectroWeakAnalysis_OutputModules_cff.py b/ElectroWeakAnalysis/Configuration/python/ElectroWeakAnalysis_OutputModules_cff.py deleted file mode 100644 index 77543b97c22ce..0000000000000 --- a/ElectroWeakAnalysis/Configuration/python/ElectroWeakAnalysis_OutputModules_cff.py +++ /dev/null @@ -1 +0,0 @@ -import FWCore.ParameterSet.Config as cms diff --git a/ElectroWeakAnalysis/Configuration/python/ElectroWeakAnalysis_SkimPaths_cff.py b/ElectroWeakAnalysis/Configuration/python/ElectroWeakAnalysis_SkimPaths_cff.py deleted file mode 100644 index d4207170c073e..0000000000000 --- a/ElectroWeakAnalysis/Configuration/python/ElectroWeakAnalysis_SkimPaths_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# ElectroWeakAnalysis standard sequences -# diff --git a/ElectroWeakAnalysis/Configuration/python/ElectroWeakAnalysis_cff.py b/ElectroWeakAnalysis/Configuration/python/ElectroWeakAnalysis_cff.py deleted file mode 100644 index f1e3209eb3f7a..0000000000000 --- a/ElectroWeakAnalysis/Configuration/python/ElectroWeakAnalysis_cff.py +++ /dev/null @@ -1,6 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# ElectroWeakAnalysis standard sequences -# - diff --git a/ElectroWeakAnalysis/Skimming/plugins/BuildFile.xml b/ElectroWeakAnalysis/Skimming/plugins/BuildFile.xml deleted file mode 100644 index 3b994e4f4ee0d..0000000000000 --- a/ElectroWeakAnalysis/Skimming/plugins/BuildFile.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/ElectroWeakAnalysis/Skimming/plugins/ZMuMuMuonUserData.cc b/ElectroWeakAnalysis/Skimming/plugins/ZMuMuMuonUserData.cc deleted file mode 100644 index 9c09c1427f8e1..0000000000000 --- a/ElectroWeakAnalysis/Skimming/plugins/ZMuMuMuonUserData.cc +++ /dev/null @@ -1,241 +0,0 @@ -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "FWCore/Utilities/interface/EDMException.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" -#include "DataFormats/PatCandidates/interface/Isolation.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositVetos.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositDirection.h" - -#include "DataFormats/BeamSpot/interface/BeamSpot.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "DataFormats/VertexReco/interface/Vertex.h" - -#include - -using namespace edm; -using namespace std; -using namespace reco; -using namespace isodeposit; -//using namespace pat; - -class ZMuMuMuonUserData : public edm::EDProducer { -public: - ZMuMuMuonUserData(const edm::ParameterSet &); - -private: - void produce(edm::Event &, const edm::EventSetup &) override; - - EDGetTokenT > srcToken_; - EDGetTokenT beamSpotToken_; - EDGetTokenT primaryVerticesToken_; - double alpha_, beta_; - double ptThreshold_, etEcalThreshold_, etHcalThreshold_, dRVetoTrk_, dRTrk_, dREcal_, dRHcal_; - string hltPath_; - template - vector isolation(const T &t, - double ptThreshold, - double etEcalThreshold, - double etHcalThreshold, - double dRVetoTrk, - double dRTrk, - double dREcal, - double dRHcal, - double alpha, - double beta); -}; - -template -vector ZMuMuMuonUserData::isolation(const T &t, - double ptThreshold, - double etEcalThreshold, - double etHcalThreshold, - double dRVetoTrk, - double dRTrk, - double dREcal, - double dRHcal, - double alpha, - double beta) { - vector iso; - const pat::IsoDeposit *trkIso = t.isoDeposit(pat::TrackIso); - const pat::IsoDeposit *ecalIso = t.isoDeposit(pat::EcalIso); - const pat::IsoDeposit *hcalIso = t.isoDeposit(pat::HcalIso); - - Direction dir = Direction(t.eta(), t.phi()); - - pat::IsoDeposit::AbsVetos vetosTrk; - vetosTrk.push_back(new ConeVeto(dir, dRVetoTrk)); - vetosTrk.push_back(new ThresholdVeto(ptThreshold)); - - pat::IsoDeposit::AbsVetos vetosEcal; - vetosEcal.push_back(new ConeVeto(dir, 0.)); - vetosEcal.push_back(new ThresholdVeto(etEcalThreshold)); - - pat::IsoDeposit::AbsVetos vetosHcal; - vetosHcal.push_back(new ConeVeto(dir, 0.)); - vetosHcal.push_back(new ThresholdVeto(etHcalThreshold)); - - double isovalueTrk = (trkIso->sumWithin(dRTrk, vetosTrk)); - double isovalueEcal = (ecalIso->sumWithin(dREcal, vetosEcal)); - double isovalueHcal = (hcalIso->sumWithin(dRHcal, vetosHcal)); - - iso.push_back(isovalueTrk); - //cout<<"isoTrk"< >(cfg.getParameter("src"))), - beamSpotToken_(consumes(cfg.getParameter("beamSpot"))), - primaryVerticesToken_(consumes(cfg.getParameter("primaryVertices"))), - alpha_(cfg.getParameter("alpha")), - beta_(cfg.getParameter("beta")), - ptThreshold_(cfg.getParameter("ptThreshold")), - etEcalThreshold_(cfg.getParameter("etEcalThreshold")), - etHcalThreshold_(cfg.getParameter("etHcalThreshold")), - dRVetoTrk_(cfg.getParameter("dRVetoTrk")), - dRTrk_(cfg.getParameter("dRTrk")), - dREcal_(cfg.getParameter("dREcal")), - dRHcal_(cfg.getParameter("dRHcal")), - hltPath_(cfg.getParameter("hltPath")) { - produces >(); -} - -void ZMuMuMuonUserData::produce(Event &evt, const EventSetup &) { - Handle > muons; - evt.getByToken(srcToken_, muons); - - Handle beamSpotHandle; - evt.getByToken(beamSpotToken_, beamSpotHandle); - - Handle primaryVertices; // Collection of primary Vertices - evt.getByToken(primaryVerticesToken_, primaryVertices); - - unique_ptr > muonColl(new vector(*muons)); - for (unsigned int i = 0; i < muonColl->size(); ++i) { - pat::Muon &m = (*muonColl)[i]; - //pat::Muon *mu = new pat::Muon(m); - vector iso = isolation( - m, ptThreshold_, etEcalThreshold_, etHcalThreshold_, dRVetoTrk_, dRTrk_, dREcal_, dRHcal_, alpha_, beta_); - m.setIsolation(pat::User1Iso, iso[0]); - //cout<<"muon User1Iso "<dxy(beamSpotHandle->position()); - zDaudzFromBS = muGlbRef->dz(beamSpotHandle->position()); - zDaudxyFromPV = muGlbRef->dxy(primaryVertices->begin()->position()); - zDaudzFromPV = muGlbRef->dz(primaryVertices->begin()->position()); - zDauChi2 = muGlbRef->normalizedChi2(); - zDauTrkChi2 = muTrkRef->normalizedChi2(); - zDauSaChi2 = muSaRef->normalizedChi2(); - zDauNofMuonHits = muGlbRef->hitPattern().numberOfValidMuonHits(); - zDauSaNofMuonHits = muSaRef->hitPattern().numberOfValidMuonHits(); - zDauNofStripHits = muGlbRef->hitPattern().numberOfValidStripHits(); - zDauTrkNofStripHits = muTrkRef->hitPattern().numberOfValidStripHits(); - zDauNofPixelHits = muGlbRef->hitPattern().numberOfValidPixelHits(); - zDauTrkNofPixelHits = muTrkRef->hitPattern().numberOfValidPixelHits(); - } else if (muSaRef.isNonnull() && m.isStandAloneMuon() == true) { - zDaudxyFromBS = muSaRef->dxy(beamSpotHandle->position()); - zDaudzFromBS = muSaRef->dz(beamSpotHandle->position()); - zDaudxyFromPV = muSaRef->dxy(primaryVertices->begin()->position()); - zDaudzFromPV = muSaRef->dz(primaryVertices->begin()->position()); - zDauSaChi2 = muSaRef->normalizedChi2(); - zDauSaNofMuonHits = muSaRef->hitPattern().numberOfValidMuonHits(); - - } else if (muTrkRef.isNonnull() && m.isTrackerMuon() == true) { - zDaudxyFromBS = muTrkRef->dxy(beamSpotHandle->position()); - zDaudzFromBS = muTrkRef->dz(beamSpotHandle->position()); - zDaudxyFromPV = muTrkRef->dxy(primaryVertices->begin()->position()); - zDaudzFromPV = muTrkRef->dz(primaryVertices->begin()->position()); - zDauTrkChi2 = muTrkRef->normalizedChi2(); - zDauTrkNofStripHits = muTrkRef->hitPattern().numberOfValidStripHits(); - zDauTrkNofPixelHits = muTrkRef->hitPattern().numberOfValidPixelHits(); - } - - const pat::TriggerObjectStandAloneCollection muHLTMatches = m.triggerObjectMatchesByPath(hltPath_); - float muHLTBit; - int dimTrig = muHLTMatches.size(); - if (dimTrig != 0) { - muHLTBit = 1; - } else { - muHLTBit = 0; - } - m.addUserFloat("zDau_dxyFromBS", zDaudxyFromBS); - m.addUserFloat("zDau_dzFromBS", zDaudzFromBS); - m.addUserFloat("zDau_dxyFromPV", zDaudxyFromPV); - m.addUserFloat("zDau_dzFromPV", zDaudzFromPV); - m.addUserFloat("zDau_HLTBit", muHLTBit); - m.addUserFloat("zDau_dzFromPV", zDaudzFromPV); - m.addUserFloat("zDau_Chi2", zDauChi2); - m.addUserFloat("zDau_TrkChi2", zDauTrkChi2); - m.addUserFloat("zDau_SaChi2", zDauSaChi2); - m.addUserFloat("zDau_NofMuonHits", zDauNofMuonHits); - m.addUserFloat("zDau_SaNofMuonHits", zDauSaNofMuonHits); - m.addUserFloat("zDau_NofStripHits", zDauNofStripHits); - m.addUserFloat("zDau_TrkNofStripHits", zDauTrkNofStripHits); - m.addUserFloat("zDau_NofPixelHits", zDauNofPixelHits); - m.addUserFloat("zDau_TrkNofPixelHits", zDauTrkNofPixelHits); - m.addUserFloat("zDau_NofMuChambers", zDauNofMuChambers); - m.addUserFloat("zDau_NofMuMatches", zDauNofMuMatches); - m.addUserFloat("zDau_MuEnergyEm", zDauMuEnergyEm); - m.addUserFloat("zDau_MuEnergyHad", zDauMuEnergyHad); - } - - evt.put(std::move(muonColl)); -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuMuMuonUserData); diff --git a/ElectroWeakAnalysis/Skimming/plugins/ZMuMuOneTrackUserData.cc b/ElectroWeakAnalysis/Skimming/plugins/ZMuMuOneTrackUserData.cc deleted file mode 100644 index b91e2261345b5..0000000000000 --- a/ElectroWeakAnalysis/Skimming/plugins/ZMuMuOneTrackUserData.cc +++ /dev/null @@ -1,121 +0,0 @@ -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/CompositeCandidate.h" -#include "FWCore/Utilities/interface/EDMException.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" -#include "DataFormats/PatCandidates/interface/Isolation.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositVetos.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositDirection.h" - -#include "DataFormats/BeamSpot/interface/BeamSpot.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "DataFormats/VertexReco/interface/Vertex.h" - -#include - -using namespace edm; -using namespace std; -using namespace reco; -using namespace isodeposit; -//using namespace pat; - -class ZMuMuUserDataOneTrack : public edm::EDProducer { -public: - ZMuMuUserDataOneTrack(const edm::ParameterSet &); - typedef math::XYZVector Vector; - -private: - void produce(edm::Event &, const edm::EventSetup &) override; - - EDGetTokenT > srcToken_; - EDGetTokenT beamSpotToken_; - EDGetTokenT primaryVerticesToken_; - EDGetTokenT zGenParticlesMatchToken_; - double alpha_, beta_; - string hltPath_; - int counter; -}; - -ZMuMuUserDataOneTrack::ZMuMuUserDataOneTrack(const ParameterSet &cfg) - : srcToken_(consumes >(cfg.getParameter("src"))), - beamSpotToken_(consumes(cfg.getParameter("beamSpot"))), - primaryVerticesToken_(consumes(cfg.getParameter("primaryVertices"))), - zGenParticlesMatchToken_(consumes(cfg.getParameter("zGenParticlesMatch"))), - alpha_(cfg.getParameter("alpha")), - beta_(cfg.getParameter("beta")), - hltPath_(cfg.getParameter("hltPath")) { - produces >(); -} - -void ZMuMuUserDataOneTrack::produce(Event &evt, const EventSetup &) { - Handle > dimuons; - evt.getByToken(srcToken_, dimuons); - - Handle beamSpotHandle; - if (!evt.getByToken(beamSpotToken_, beamSpotHandle)) { - std::cout << ">>> No beam spot found !!!" << std::endl; - } - - Handle primaryVertices; // Collection of primary Vertices - if (!evt.getByToken(primaryVerticesToken_, primaryVertices)) { - std::cout << ">>> No primary vertices found !!!" << std::endl; - } - - bool isMCMatchTrue = false; - - Handle zGenParticlesMatch; - if (evt.getByToken(zGenParticlesMatchToken_, zGenParticlesMatch)) { - isMCMatchTrue = true; - } - - //cout<<"isMCMatchTrue"< > dimuonColl(new vector()); - - for (unsigned int i = 0; i < dimuons->size(); ++i) { - const CompositeCandidate &z = (*dimuons)[i]; - //CandidateBaseRef zRef = dimuons ->refAt(i); - edm::Ref > zRef(dimuons, i); - pat::CompositeCandidate dimuon(z); - - float trueMass, truePt, trueEta, truePhi, trueY; - if (isMCMatchTrue) { - GenParticleRef trueZRef = (*zGenParticlesMatch)[zRef]; - //CandidateRef trueZRef = trueZIter->val; - if (trueZRef.isNonnull()) { - const Candidate &z = *trueZRef; - trueMass = z.mass(); - truePt = z.pt(); - trueEta = z.eta(); - truePhi = z.phi(); - trueY = z.rapidity(); - } else { - trueMass = -100; - truePt = -100; - trueEta = -100; - truePhi = -100; - trueY = -100; - } - - dimuon.addUserFloat("TrueMass", trueMass); - dimuon.addUserFloat("TruePt", truePt); - dimuon.addUserFloat("TrueEta", trueEta); - dimuon.addUserFloat("TruePhi", truePhi); - dimuon.addUserFloat("TrueY", trueY); - } - - dimuonColl->push_back(dimuon); - } - - evt.put(std::move(dimuonColl)); -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuMuUserDataOneTrack); diff --git a/ElectroWeakAnalysis/Skimming/plugins/ZMuMuTrackUserData.cc b/ElectroWeakAnalysis/Skimming/plugins/ZMuMuTrackUserData.cc deleted file mode 100644 index 92ea4d597d6dd..0000000000000 --- a/ElectroWeakAnalysis/Skimming/plugins/ZMuMuTrackUserData.cc +++ /dev/null @@ -1,189 +0,0 @@ -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -#include "FWCore/Utilities/interface/EDMException.h" - -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" -#include "DataFormats/PatCandidates/interface/Isolation.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositVetos.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositDirection.h" - -#include "DataFormats/BeamSpot/interface/BeamSpot.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "DataFormats/VertexReco/interface/Vertex.h" - -#include - -using namespace edm; -using namespace std; -using namespace reco; -using namespace isodeposit; -//using namespace pat; - -class ZMuMuTrackUserData : public edm::EDProducer { -public: - ZMuMuTrackUserData(const edm::ParameterSet &); - -private: - void produce(edm::Event &, const edm::EventSetup &) override; - - EDGetTokenT > srcToken_; - EDGetTokenT beamSpotToken_; - EDGetTokenT primaryVerticesToken_; - double ptThreshold_, etEcalThreshold_, etHcalThreshold_, dRVetoTrk_, dRTrk_, dREcal_, dRHcal_; - double alpha_, beta_; - template - vector isolation(const T &t, - double ptThreshold, - double etEcalThreshold, - double etHcalThreshold, - double dRVetoTrk, - double dRTrk, - double dREcal, - double dRHcal, - double alpha, - double beta); -}; - -template -vector ZMuMuTrackUserData::isolation(const T &t, - double ptThreshold, - double etEcalThreshold, - double etHcalThreshold, - double dRVetoTrk, - double dRTrk, - double dREcal, - double dRHcal, - double alpha, - double beta) { - vector iso; - const pat::IsoDeposit *trkIso = t.isoDeposit(pat::TrackIso); - const pat::IsoDeposit *ecalIso = t.isoDeposit(pat::EcalIso); - const pat::IsoDeposit *hcalIso = t.isoDeposit(pat::HcalIso); - - Direction dir = Direction(t.eta(), t.phi()); - - pat::IsoDeposit::AbsVetos vetosTrk; - vetosTrk.push_back(new ConeVeto(dir, dRVetoTrk)); - vetosTrk.push_back(new ThresholdVeto(ptThreshold)); - - pat::IsoDeposit::AbsVetos vetosEcal; - vetosEcal.push_back(new ConeVeto(dir, 0.)); - vetosEcal.push_back(new ThresholdVeto(etEcalThreshold)); - - pat::IsoDeposit::AbsVetos vetosHcal; - vetosHcal.push_back(new ConeVeto(dir, 0.)); - vetosHcal.push_back(new ThresholdVeto(etHcalThreshold)); - - double isovalueTrk = (trkIso->sumWithin(dRTrk, vetosTrk)); - double isovalueEcal = (ecalIso->sumWithin(dREcal, vetosEcal)); - double isovalueHcal = (hcalIso->sumWithin(dRHcal, vetosHcal)); - - iso.push_back(isovalueTrk); - iso.push_back(isovalueEcal); - iso.push_back(isovalueHcal); - - //double iso = isovalueTrk + isovalueEcal + isovalueHcal; - double combIso = - alpha * (((1 + beta) / 2 * isovalueEcal) + ((1 - beta) / 2 * isovalueHcal)) + ((1 - alpha) * isovalueTrk); - - iso.push_back(combIso); - double relIso = combIso /= t.pt(); - iso.push_back(relIso); - return iso; -} - -ZMuMuTrackUserData::ZMuMuTrackUserData(const ParameterSet &cfg) - : srcToken_(consumes >(cfg.getParameter("src"))), - beamSpotToken_(consumes(cfg.getParameter("beamSpot"))), - primaryVerticesToken_(consumes(cfg.getParameter("primaryVertices"))), - ptThreshold_(cfg.getParameter("ptThreshold")), - etEcalThreshold_(cfg.getParameter("etEcalThreshold")), - etHcalThreshold_(cfg.getParameter("etHcalThreshold")), - dRVetoTrk_(cfg.getParameter("dRVetoTrk")), - dRTrk_(cfg.getParameter("dRTrk")), - dREcal_(cfg.getParameter("dREcal")), - dRHcal_(cfg.getParameter("dRHcal")), - alpha_(cfg.getParameter("alpha")), - beta_(cfg.getParameter("beta")) { - produces >(); -} - -void ZMuMuTrackUserData::produce(Event &evt, const EventSetup &) { - Handle > tracks; - evt.getByToken(srcToken_, tracks); - - Handle beamSpotHandle; - evt.getByToken(beamSpotToken_, beamSpotHandle); - - Handle primaryVertices; // Collection of primary Vertices - evt.getByToken(primaryVerticesToken_, primaryVertices); - - unique_ptr > tkColl(new vector(*tracks)); - for (unsigned int i = 0; i < tkColl->size(); ++i) { - pat::GenericParticle &tk = (*tkColl)[i]; - vector iso = isolation( - tk, ptThreshold_, etEcalThreshold_, etHcalThreshold_, dRVetoTrk_, dRTrk_, dREcal_, dRHcal_, alpha_, beta_); - tk.setIsolation(pat::User1Iso, iso[0]); - // cout << "track User1Iso " << iso[0] << endl; - tk.setIsolation(pat::User2Iso, iso[1]); - //cout << "track User2Iso " << iso[1] << endl; - tk.setIsolation(pat::User3Iso, iso[2]); - //cout << "track User3Iso " << iso[2] << endl; - tk.setIsolation(pat::User4Iso, iso[3]); - //cout << "track User4Iso " << iso[3] << endl; - tk.setIsolation(pat::User5Iso, iso[4]); - //cout << "track User5Iso " << iso[4] << endl; - - float zDaudxyFromBS = -1; - float zDaudzFromBS = -1; - float zDaudxyFromPV = -1; - float zDaudzFromPV = -1; - float zDauNofMuChambers = -1; - float zDauNofMuMatches = -1; - float zDauChi2 = -1; - float zDauTrkChi2 = -1; - float zDauSaChi2 = -1; - float zDauNofMuonHits = -1; - float zDauNofStripHits = -1; - float zDauNofPixelHits = -1; - float zDauMuEnergyEm = -1; - float zDauMuEnergyHad = -1; - - TrackRef muTrkRef = tk.track(); - if (muTrkRef.isNonnull()) { - zDaudxyFromBS = muTrkRef->dxy(beamSpotHandle->position()); - zDaudzFromBS = muTrkRef->dz(beamSpotHandle->position()); - zDaudxyFromPV = muTrkRef->dxy(primaryVertices->begin()->position()); - zDaudzFromPV = muTrkRef->dz(primaryVertices->begin()->position()); - zDauChi2 = muTrkRef->normalizedChi2(); - zDauTrkChi2 = muTrkRef->normalizedChi2(); - zDauNofStripHits = muTrkRef->hitPattern().numberOfValidStripHits(); - zDauNofPixelHits = muTrkRef->hitPattern().numberOfValidPixelHits(); - } - tk.addUserFloat("zDau_dxyFromBS", zDaudxyFromBS); - tk.addUserFloat("zDau_dzFromBS", zDaudzFromBS); - tk.addUserFloat("zDau_dxyFromPV", zDaudxyFromPV); - tk.addUserFloat("zDau_dzFromPV", zDaudzFromPV); - tk.addUserFloat("zDau_NofMuonHits", zDauNofMuonHits); - tk.addUserFloat("zDau_TrkNofStripHits", zDauNofStripHits); - tk.addUserFloat("zDau_TrkNofPixelHits", zDauNofPixelHits); - tk.addUserFloat("zDau_NofMuChambers", zDauNofMuChambers); - tk.addUserFloat("zDau_NofMuMatches", zDauNofMuMatches); - tk.addUserFloat("zDau_Chi2", zDauChi2); - tk.addUserFloat("zDau_TrkChi2", zDauTrkChi2); - tk.addUserFloat("zDau_SaChi2", zDauSaChi2); - tk.addUserFloat("zDau_MuEnergyEm", zDauMuEnergyEm); - tk.addUserFloat("zDau_MuEnergyHad", zDauMuEnergyHad); - } - - evt.put(std::move(tkColl)); -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuMuTrackUserData); diff --git a/ElectroWeakAnalysis/Skimming/plugins/ZMuMuUserData.cc b/ElectroWeakAnalysis/Skimming/plugins/ZMuMuUserData.cc deleted file mode 100644 index b48cd92719a76..0000000000000 --- a/ElectroWeakAnalysis/Skimming/plugins/ZMuMuUserData.cc +++ /dev/null @@ -1,169 +0,0 @@ -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/CompositeCandidate.h" -#include "FWCore/Utilities/interface/EDMException.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" -#include "DataFormats/PatCandidates/interface/Isolation.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositVetos.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositDirection.h" - -#include "DataFormats/BeamSpot/interface/BeamSpot.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "DataFormats/VertexReco/interface/Vertex.h" - -#include - -using namespace edm; -using namespace std; -using namespace reco; -using namespace isodeposit; -//using namespace pat; - -class ZMuMuUserData : public edm::EDProducer { -public: - ZMuMuUserData(const edm::ParameterSet &); - typedef math::XYZVector Vector; - -private: - void produce(edm::Event &, const edm::EventSetup &) override; - - EDGetTokenT > srcToken_; - EDGetTokenT beamSpotToken_; - EDGetTokenT primaryVerticesToken_; - EDGetTokenT zGenParticlesMatchToken_; - double alpha_, beta_; - string hltPath_; - int counter; -}; - -ZMuMuUserData::ZMuMuUserData(const ParameterSet &cfg) - : srcToken_(consumes >(cfg.getParameter("src"))), - beamSpotToken_(consumes(cfg.getParameter("beamSpot"))), - primaryVerticesToken_(consumes(cfg.getParameter("primaryVertices"))), - zGenParticlesMatchToken_(consumes(cfg.getParameter("zGenParticlesMatch"))), - alpha_(cfg.getParameter("alpha")), - beta_(cfg.getParameter("beta")), - hltPath_(cfg.getParameter("hltPath")) { - produces >(); -} - -void ZMuMuUserData::produce(Event &evt, const EventSetup &) { - Handle > dimuons; - evt.getByToken(srcToken_, dimuons); - - Handle beamSpotHandle; - evt.getByToken(beamSpotToken_, beamSpotHandle); - - Handle primaryVertices; // Collection of primary Vertices - evt.getByToken(primaryVerticesToken_, primaryVertices); - - bool isMCMatchTrue = false; - - Handle zGenParticlesMatch; - if (evt.getByToken(zGenParticlesMatchToken_, zGenParticlesMatch)) { - isMCMatchTrue = true; - } - - //cout<<"isMCMatchTrue"< > dimuonColl(new vector()); - - for (unsigned int i = 0; i < dimuons->size(); ++i) { - const CompositeCandidate &z = (*dimuons)[i]; - //CandidateBaseRef zRef = dimuons ->refAt(i); - edm::Ref > zRef(dimuons, i); - pat::CompositeCandidate dimuon(z); - - float trueMass, truePt, trueEta, truePhi, trueY; - if (isMCMatchTrue) { - GenParticleRef trueZRef = (*zGenParticlesMatch)[zRef]; - //CandidateRef trueZRef = trueZIter->val; - if (trueZRef.isNonnull()) { - const Candidate &z = *trueZRef; - trueMass = z.mass(); - truePt = z.pt(); - trueEta = z.eta(); - truePhi = z.phi(); - trueY = z.rapidity(); - } else { - trueMass = -100; - truePt = -100; - trueEta = -100; - truePhi = -100; - trueY = -100; - } - - dimuon.addUserFloat("TrueMass", trueMass); - dimuon.addUserFloat("TruePt", truePt); - dimuon.addUserFloat("TrueEta", trueEta); - dimuon.addUserFloat("TruePhi", truePhi); - dimuon.addUserFloat("TrueY", trueY); - } - const Candidate *dau1 = z.daughter(0); - const Candidate *dau2 = z.daughter(1); - const pat::Muon &mu1 = dynamic_cast(*dau1->masterClone()); - const pat::Muon &mu2 = dynamic_cast(*dau2->masterClone()); - - /*cout<<"mu1 is null? "<get(); - stAloneTrack2 = dau2->get(); - float zDau1SaEta = stAloneTrack1->eta(); - float zDau2SaEta = stAloneTrack2->eta(); - float zDau1SaPhi = stAloneTrack1->phi(); - float zDau2SaPhi = stAloneTrack2->phi(); - float zDau1SaPt, zDau2SaPt; - if (counter % 2 == 0) { - momentum = stAloneTrack1->momentum(); - p4_1 = dau2->polarP4(); - mu_mass = dau1->mass(); - /// I fill the dau1 with positive and dau2 with negatove values for the pt, in order to flag the muons used for building zMassSa - zDau1SaPt = stAloneTrack1->pt(); - zDau2SaPt = -stAloneTrack2->pt(); - } else { - momentum = stAloneTrack2->momentum(); - p4_1 = dau1->polarP4(); - mu_mass = dau2->mass(); - /// I fill the dau1 with negatove and dau2 with positive values for the pt - zDau1SaPt = -stAloneTrack1->pt(); - zDau2SaPt = stAloneTrack2->pt(); - } - - Candidate::PolarLorentzVector p4_2(momentum.rho(), momentum.eta(), momentum.phi(), mu_mass); - double mass = (p4_1 + p4_2).mass(); - float zMassSa = mass; - //cout<<"zMassSa "<push_back(dimuon); - } - - evt.put(std::move(dimuonColl)); -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuMuUserData); diff --git a/ElectroWeakAnalysis/Skimming/python/dimuonsFilter_cfi.py b/ElectroWeakAnalysis/Skimming/python/dimuonsFilter_cfi.py deleted file mode 100644 index 13198858cab16..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/dimuonsFilter_cfi.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -dimuonsFilter = cms.EDFilter("CandViewCountFilter", - src = cms.InputTag("dimuons"), - minNumber = cms.uint32(1) -) - - diff --git a/ElectroWeakAnalysis/Skimming/python/dimuonsGlobal_cfi.py b/ElectroWeakAnalysis/Skimming/python/dimuonsGlobal_cfi.py deleted file mode 100644 index 393cd4bbb04f7..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/dimuonsGlobal_cfi.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -dimuonsGlobal = cms.EDFilter("CandViewRefSelector", - src = cms.InputTag("dimuons"), - cut = cms.string('charge = 0 & mass > 20 & daughter(0).isGlobalMuon = 1 & daughter(1).isGlobalMuon = 1') -) - - diff --git a/ElectroWeakAnalysis/Skimming/python/dimuonsHLTFilter_cfi.py b/ElectroWeakAnalysis/Skimming/python/dimuonsHLTFilter_cfi.py deleted file mode 100644 index 0ba862e5137f2..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/dimuonsHLTFilter_cfi.py +++ /dev/null @@ -1,11 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import HLTrigger.HLTfilters.hltHighLevel_cfi -dimuonsHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() -# Add this to access 8E29 menu -#dimuonsHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT8E29") -# for 8E29 menu -#dimuonsHLTFilter.HLTPaths = ["HLT_Mu3", "HLT_DoubleMu3"] -# for 1E31 menu -#dimuonsHLTFilter.HLTPaths = ["HLT_Mu9", "HLT_DoubleMu3"] -dimuonsHLTFilter.HLTPaths = ["HLT_Mu9"] diff --git a/ElectroWeakAnalysis/Skimming/python/dimuonsMCMatch_cfi.py b/ElectroWeakAnalysis/Skimming/python/dimuonsMCMatch_cfi.py deleted file mode 100644 index a2cb5e8ca19c9..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/dimuonsMCMatch_cfi.py +++ /dev/null @@ -1,13 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -dimuonsMCMatch = cms.EDFilter("MCTruthCompositeMatcherNew", - src = cms.InputTag("dimuons"), - # - # comment PAT match because works only for layer-0 muons - # - # VInputTag matchMaps = { muonMatch } - matchPDGId = cms.vint32(), - matchMaps = cms.VInputTag(cms.InputTag("goodMuonMCMatch")) -) - - diff --git a/ElectroWeakAnalysis/Skimming/python/dimuonsOneStandAloneMuon_cfi.py b/ElectroWeakAnalysis/Skimming/python/dimuonsOneStandAloneMuon_cfi.py deleted file mode 100644 index c0700dad22583..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/dimuonsOneStandAloneMuon_cfi.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -dimuonsOneStandAloneMuon = cms.EDFilter("CandViewRefSelector", - src = cms.InputTag("dimuons"), - cut = cms.string('charge = 0 & mass > 20 & ( (daughter(0).isStandAloneMuon = 1 & daughter(0).isGlobalMuon = 0 & daughter(1).isGlobalMuon = 1) | (daughter(1).isStandAloneMuon = 1 & daughter(1).isGlobalMuon = 0 & daughter(0).isGlobalMuon = 1) )') -) - - diff --git a/ElectroWeakAnalysis/Skimming/python/dimuonsOneTrackFilter_cfi.py b/ElectroWeakAnalysis/Skimming/python/dimuonsOneTrackFilter_cfi.py deleted file mode 100644 index 4323f4f1d90c4..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/dimuonsOneTrackFilter_cfi.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -dimuonsOneTrackFilter = cms.EDFilter("CandViewCountFilter", - src = cms.InputTag("dimuonsOneTrack"), - minNumber = cms.uint32(1) -) - - diff --git a/ElectroWeakAnalysis/Skimming/python/dimuonsOneTrackMCMatch_cfi.py b/ElectroWeakAnalysis/Skimming/python/dimuonsOneTrackMCMatch_cfi.py deleted file mode 100644 index 819ec5c94f4e9..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/dimuonsOneTrackMCMatch_cfi.py +++ /dev/null @@ -1,13 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -dimuonsOneTrackMCMatch = cms.EDFilter("MCTruthCompositeMatcherNew", - src = cms.InputTag("dimuonsOneTrack"), - # - # comment PAT match because works only for layer-0 muons - # - # VInputTag matchMaps = { muonMatch, goodTrackMCMatch } - matchPDGId = cms.vint32(), - matchMaps = cms.VInputTag(cms.InputTag("goodMuonMCMatch"), cms.InputTag("goodTrackMCMatch")) -) - - diff --git a/ElectroWeakAnalysis/Skimming/python/dimuonsOneTrack_cfi.py b/ElectroWeakAnalysis/Skimming/python/dimuonsOneTrack_cfi.py deleted file mode 100644 index 66365864c6344..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/dimuonsOneTrack_cfi.py +++ /dev/null @@ -1,11 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -dimuonsOneTrack = cms.EDProducer("CandViewShallowCloneCombiner", - checkCharge = cms.bool(True), - cut = cms.string('mass > 20'), -# decay = cms.string('selectedLayer1Muons@+ goodTracks@-') -# decay = cms.string('selectedLayer1Muons@+ selectedLayer1TrackCands@-') - decay = cms.string('selectedPatMuonsTriggerMatch@+ selectedPatTracks@-') -) - - diff --git a/ElectroWeakAnalysis/Skimming/python/dimuonsOneTrackerMuon_cfi.py b/ElectroWeakAnalysis/Skimming/python/dimuonsOneTrackerMuon_cfi.py deleted file mode 100644 index d1a4c6a52f328..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/dimuonsOneTrackerMuon_cfi.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -dimuonsOneTrackerMuon = cms.EDFilter("CandViewRefSelector", - src = cms.InputTag("dimuons"), - cut = cms.string('charge = 0 & mass > 20 & ( (daughter(0).isTrackerMuon = 1 & daughter(0).isGlobalMuon = 0 & daughter(1).isGlobalMuon = 1) | (daughter(1).isTrackerMuon = 1 & daughter(1).isGlobalMuon = 0 & daughter(0).isGlobalMuon = 1) )') -) - - diff --git a/ElectroWeakAnalysis/Skimming/python/dimuonsOutputModule_cfi.py b/ElectroWeakAnalysis/Skimming/python/dimuonsOutputModule_cfi.py deleted file mode 100644 index cb54310ea4c99..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/dimuonsOutputModule_cfi.py +++ /dev/null @@ -1,41 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * - -dimuonsEventContent = cms.PSet( - outputCommands = cms.untracked.vstring( - 'keep *_selectedPatMuonsTriggerMatch_*_*', - 'keep *_selectedPatTracks_*_*', - 'keep *_dimuons_*_*', - 'keep *_dimuonsOneTrack_*_*', - 'keep *_dimuonsGlobal_*_*', - 'keep *_dimuonsOneStandAloneMuon_*_*', - 'keep *_muonMatch_*_*', - 'keep *_trackMuMatch_*_*', - 'keep *_allDimuonsMCMatch_*_*', - ) -) -dimuonsEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - 'dimuonsPath', - 'dimuonsOneTrackPath') - ) -) - -AODSIMDimuonEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -AODSIMDimuonEventContent.outputCommands.extend(AODSIMEventContent.outputCommands) -AODSIMDimuonEventContent.outputCommands.extend(dimuonsEventContent.outputCommands) - -dimuonsOutputModule = cms.OutputModule("PoolOutputModule", - AODSIMDimuonEventContent, - dimuonsEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('dimuon'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('dimuons.root') -) - diff --git a/ElectroWeakAnalysis/Skimming/python/dimuons_SkimPaths_cff.py b/ElectroWeakAnalysis/Skimming/python/dimuons_SkimPaths_cff.py deleted file mode 100644 index 2604f50ab5b91..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/dimuons_SkimPaths_cff.py +++ /dev/null @@ -1,33 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# migration to PAT v2 and reorganization of dimuon sequences - -from ElectroWeakAnalysis.Skimming.dimuonsHLTFilter_cfi import * -from ElectroWeakAnalysis.Skimming.patCandidatesForDimuonsSequences_cff import * -from ElectroWeakAnalysis.Skimming.dimuons_cfi import * -from ElectroWeakAnalysis.Skimming.dimuonsOneTrack_cfi import * -from ElectroWeakAnalysis.Skimming.dimuonsGlobal_cfi import * -from ElectroWeakAnalysis.Skimming.dimuonsOneStandAloneMuon_cfi import * -from ElectroWeakAnalysis.Skimming.mcTruthForDimuons_cff import * -from ElectroWeakAnalysis.Skimming.dimuonsFilter_cfi import * -from ElectroWeakAnalysis.Skimming.dimuonsOneTrackFilter_cfi import * - -dimuonsPath = cms.Path( - dimuonsHLTFilter * - goodMuonRecoForDimuon * - dimuons * - dimuonsGlobal * - dimuonsOneStandAloneMuon * - dimuonsFilter -) - -dimuonsOneTrackPath = cms.Path(dimuonsHLTFilter+ - goodMuonRecoForDimuon+ - dimuonsOneTrack+ - dimuonsOneTrackFilter -) - -dimuonsMCTruth = cms.Path(dimuonsHLTFilter+ - mcTruthForDimuons -) - diff --git a/ElectroWeakAnalysis/Skimming/python/dimuons_cfi.py b/ElectroWeakAnalysis/Skimming/python/dimuons_cfi.py deleted file mode 100644 index be8160591331f..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/dimuons_cfi.py +++ /dev/null @@ -1,11 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -dimuons = cms.EDProducer("CandViewShallowCloneCombiner", - checkCharge = cms.bool(False), - cut = cms.string('mass > 0'), - # string decay = "goodMuons@+ goodMuons@-" -# decay = cms.string('selectedLayer1Muons@+ selectedLayer1Muons@-') - decay = cms.string('selectedPatMuonsTriggerMatch@+ selectedPatMuonsTriggerMatch@-') -) - - diff --git a/ElectroWeakAnalysis/Skimming/python/mcTruthForDimuons_cff.py b/ElectroWeakAnalysis/Skimming/python/mcTruthForDimuons_cff.py deleted file mode 100644 index 48c8758c6f101..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/mcTruthForDimuons_cff.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from PhysicsTools.HepMCCandAlgos.goodMuonMCMatch_cfi import * -goodMuonMCMatch.src = 'selectedPatMuonsTriggerMatch' -from PhysicsTools.HepMCCandAlgos.goodTrackMCMatch_cfi import * -goodTrackMCMatch.src = 'selectedPatTracks' - -from ElectroWeakAnalysis.Skimming.dimuonsMCMatch_cfi import * -from ElectroWeakAnalysis.Skimming.dimuonsOneTrackMCMatch_cfi import * -allDimuonsMCMatch = cms.EDFilter("GenParticleMatchMerger", - src = cms.VInputTag(cms.InputTag("goodMuonMCMatch"), cms.InputTag("goodTrackMCMatch"), cms.InputTag("dimuonsMCMatch"), cms.InputTag("dimuonsOneTrackMCMatch")) -) - -mcTruthForDimuons = cms.Sequence(goodMuonMCMatch+goodTrackMCMatch+dimuonsMCMatch+dimuonsOneTrackMCMatch+allDimuonsMCMatch) - diff --git a/ElectroWeakAnalysis/Skimming/python/patAODTrackCandSequence_cff.py b/ElectroWeakAnalysis/Skimming/python/patAODTrackCandSequence_cff.py deleted file mode 100644 index 482a1a99224f6..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/patAODTrackCandSequence_cff.py +++ /dev/null @@ -1,43 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -#from SimGeneral.HepPDTESSource.pythiapdt_cfi import * -from Configuration.StandardSequences.MagneticField_cff import * - -patAODTrackCandsUnfiltered = cms.EDProducer("ConcreteChargedCandidateProducer", - src = cms.InputTag("generalTracks"), - particleType = cms.string('mu+') # to fix mass hypothesis -) - -patAODTrackCands = cms.EDFilter("CandViewSelector", - src = cms.InputTag("patAODTrackCandsUnfiltered"), - cut = cms.string('pt > 10') -) - - -from RecoMuon.MuonIsolationProducers.muIsolation_cff import * -## Configure tracker isolation -from RecoMuon.MuonIsolationProducers.trackExtractorBlocks_cff import MIsoTrackExtractorCtfBlock -patAODTrackIsoDepositCtfTk = cms.EDProducer("CandIsoDepositProducer", - src = cms.InputTag("patAODTrackCands"), - trackType = cms.string('best'), - MultipleDepositsFlag = cms.bool(False), - ExtractorPSet = cms.PSet( MIsoTrackExtractorCtfBlock ) -) - -## Configure calorimetric isolation -from RecoMuon.MuonIsolationProducers.caloExtractorByAssociatorBlocks_cff import MIsoCaloExtractorByAssociatorTowersBlock -patAODTrackIsoDepositCalByAssociatorTowers = cms.EDProducer("CandIsoDepositProducer", - src = cms.InputTag("patAODTrackCands"), - trackType = cms.string('best'), - MultipleDepositsFlag = cms.bool(True), - ExtractorPSet = cms.PSet( MIsoCaloExtractorByAssociatorTowersBlock ) -) - -# sequence to run on AOD before PAT cleaners -patAODTrackCandSequence = cms.Sequence( - patAODTrackCandsUnfiltered * - patAODTrackCands * - patAODTrackIsoDepositCtfTk * - patAODTrackIsoDepositCalByAssociatorTowers -) - diff --git a/ElectroWeakAnalysis/Skimming/python/patCandidatesForDimuonsSequences_cff.py b/ElectroWeakAnalysis/Skimming/python/patCandidatesForDimuonsSequences_cff.py deleted file mode 100644 index a660c967bea31..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/patCandidatesForDimuonsSequences_cff.py +++ /dev/null @@ -1,167 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from SimGeneral.HepPDTESSource.pythiapdt_cfi import * - -# PAT TRACKS - -# before pat: conversion to track candidates for pat; isolation -#from PhysicsTools.PatAlgos.recoLayer0.genericTrackCandidates_cff import * -from ElectroWeakAnalysis.Skimming.patAODTrackCandSequence_cff import * -patAODTrackCands.cut = 'pt > 10.' - -# before pat: MC match -#from PhysicsTools.PatAlgos.mcMatchLayer0.trackMuMatch_cfi import * -from ElectroWeakAnalysis.Skimming.trackMuMatch_cfi import * -trackMuMatch.maxDeltaR = 0.15 -trackMuMatch.maxDPtRel = 1.0 -trackMuMatch.resolveAmbiguities = True -trackMuMatch.resolveByMatchQuality = True - -# pat tracks -from PhysicsTools.PatAlgos.producersLayer1.genericParticleProducer_cfi import patGenericParticles - -allPatTracks = patGenericParticles.clone( - src = cms.InputTag("patAODTrackCands"), - # isolation configurables - userIsolation = cms.PSet( - tracker = cms.PSet( - veto = cms.double(0.015), - src = cms.InputTag("patAODTrackIsoDepositCtfTk"), - deltaR = cms.double(0.3), - threshold = cms.double(1.5) - ), - ecal = cms.PSet( - src = cms.InputTag("patAODTrackIsoDepositCalByAssociatorTowers","ecal"), - deltaR = cms.double(0.3) - ), - hcal = cms.PSet( - src = cms.InputTag("patAODTrackIsoDepositCalByAssociatorTowers","hcal"), - deltaR = cms.double(0.3) - ), - ), - isoDeposits = cms.PSet( - tracker = cms.InputTag("patAODTrackIsoDepositCtfTk"), - ecal = cms.InputTag("patAODTrackIsoDepositCalByAssociatorTowers","ecal"), - hcal = cms.InputTag("patAODTrackIsoDepositCalByAssociatorTowers","hcal") - ), - addGenMatch = cms.bool(True), - genParticleMatch = cms.InputTag("trackMuMatch") -) - -from PhysicsTools.PatAlgos.selectionLayer1.trackSelector_cfi import * -selectedPatTracks.cut = 'pt > 10.' - -# PAT MUONS - -# before pat: MC match -from PhysicsTools.PatAlgos.mcMatchLayer0.muonMatch_cfi import * -muonMatch.maxDeltaR = 0.15 -muonMatch.maxDPtRel = 1.0 -muonMatch.resolveAmbiguities = True -muonMatch.resolveByMatchQuality = True - -# pat muons -# needed starting from 3_6_1 -from TrackingTools.TransientTrack.TransientTrackBuilder_cfi import * -# -from PhysicsTools.PatAlgos.producersLayer1.muonProducer_cfi import * -patMuons.isoDeposits = cms.PSet( - tracker = cms.InputTag("muIsoDepositTk"), - ecal = cms.InputTag("muIsoDepositCalByAssociatorTowers","ecal"), - hcal = cms.InputTag("muIsoDepositCalByAssociatorTowers","hcal"), -) -patMuons.userIsolation = cms.PSet( - hcal = cms.PSet( - src = cms.InputTag("muIsoDepositCalByAssociatorTowers","hcal"), - deltaR = cms.double(0.3) - ), - tracker = cms.PSet( - veto = cms.double(0.015), - src = cms.InputTag("muIsoDepositTk"), - deltaR = cms.double(0.3), - threshold = cms.double(1.5) - ), - ecal = cms.PSet( - src = cms.InputTag("muIsoDepositCalByAssociatorTowers","ecal"), - deltaR = cms.double(0.3) - ) - ) - -from PhysicsTools.PatAlgos.selectionLayer1.muonSelector_cfi import * -selectedPatMuons.cut = 'pt > 0. & abs(eta) < 100.0' - -# trigger info -from PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cfi import * -# to access 8E29 menus -#patTrigger.triggerResults = cms.InputTag( "TriggerResults::HLT8E29" ) -#patTrigger.triggerEvent = cms.InputTag( "hltTriggerSummaryAOD::HLT8E29" ) -# to access 1E31 menus -patTrigger.triggerResults = cms.InputTag( "TriggerResults::HLT" ) -patTrigger.triggerEvent = cms.InputTag( "hltTriggerSummaryAOD::HLT" ) - -muonTriggerMatchHLTMuons = cms.EDFilter( "PATTriggerMatcherDRDPtLessByR", - src = cms.InputTag( "selectedPatMuons" ), - matched = cms.InputTag( "patTrigger" ), - andOr = cms.bool( False ), - filterIdsEnum = cms.vstring( 'TriggerMuon' ), # 'TriggerMuon' is the enum from trigger::TriggerObjectType for HLT muons - filterIds = cms.vint32( 0 ), - filterLabels = cms.vstring( '*' ), - pathNames = cms.vstring( 'HLT_Mu9' ), - collectionTags = cms.vstring( '*' ), - maxDPtRel = cms.double( 1.0 ), - maxDeltaR = cms.double( 0.2 ), - resolveAmbiguities = cms.bool( True ), - resolveByMatchQuality = cms.bool( True ) -) - -from PhysicsTools.PatAlgos.triggerLayer1.triggerEventProducer_cfi import * -#patTriggerEvent.patTriggerMatches = [ "muonTriggerMatchHLTMu9" ] -patTriggerEvent.patTriggerMatches = cms.VInputTag( "muonTriggerMatchHLTMuons" ) -#patTriggerEvent.patTriggerMatches = cms.VInputTag( "muonTriggerMatchHLTMu9" ) - -patTriggerSequence = cms.Sequence( - patTrigger * - muonTriggerMatchHLTMuons * -# muonTriggerMatchHLTMu9 * - patTriggerEvent -) - -selectedPatMuonsTriggerMatch = cms.EDProducer( "PATTriggerMatchMuonEmbedder", - src = cms.InputTag( "selectedPatMuons" ), - matches = cms.VInputTag( "muonTriggerMatchHLTMuons" ) -) - -muonTriggerMatchEmbedder = cms.Sequence( - selectedPatMuonsTriggerMatch -) - -# pat sequences - -beforePatTracks = cms.Sequence( - patAODTrackCandSequence * - trackMuMatch -) - -beforePatMuons = cms.Sequence( - muonMatch -) - -beforePat = cms.Sequence( - beforePatTracks + - beforePatMuons -) - -patCandsSequence = cms.Sequence( - patMuons * - selectedPatMuons * - allPatTracks * - selectedPatTracks -) - -goodMuonRecoForDimuon = cms.Sequence( - beforePat * - patCandsSequence * - patTriggerSequence * - muonTriggerMatchEmbedder -) - diff --git a/ElectroWeakAnalysis/Skimming/python/patCandidatesForZMuMuSubskim_cff.py b/ElectroWeakAnalysis/Skimming/python/patCandidatesForZMuMuSubskim_cff.py deleted file mode 100644 index 9f07d8523fb57..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/patCandidatesForZMuMuSubskim_cff.py +++ /dev/null @@ -1,173 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from SimGeneral.HepPDTESSource.pythiapdt_cfi import * -##################################################### -# PAT muons and tracks for ZMuMu subskim: no MC match -##################################################### - -# PAT TRACKS - -# before pat: conversion to track candidates for pat; isolation -from ElectroWeakAnalysis.Skimming.patAODTrackCandSequence_cff import * -patAODTrackCands.cut = 'pt > 15.' - -# pat tracks -from PhysicsTools.PatAlgos.producersLayer1.genericParticleProducer_cfi import patGenericParticles - -allPatTracks = patGenericParticles.clone( - src = cms.InputTag("patAODTrackCands"), - embedTrack = cms.bool(True), - # isolation configurables - userIsolation = cms.PSet( - tracker = cms.PSet( - veto = cms.double(0.015), - src = cms.InputTag("patAODTrackIsoDepositCtfTk"), - deltaR = cms.double(0.3), - threshold = cms.double(1.5) - ), - ecal = cms.PSet( - src = cms.InputTag("patAODTrackIsoDepositCalByAssociatorTowers","ecal"), - deltaR = cms.double(0.3) - ), - hcal = cms.PSet( - src = cms.InputTag("patAODTrackIsoDepositCalByAssociatorTowers","hcal"), - deltaR = cms.double(0.3) - ), - ), - isoDeposits = cms.PSet( - tracker = cms.InputTag("patAODTrackIsoDepositCtfTk"), - ecal = cms.InputTag("patAODTrackIsoDepositCalByAssociatorTowers","ecal"), - hcal = cms.InputTag("patAODTrackIsoDepositCalByAssociatorTowers","hcal") - ), - addGenMatch = cms.bool(False) -) - -from PhysicsTools.PatAlgos.selectionLayer1.trackSelector_cfi import * -selectedPatTracks.cut = 'pt > 15. & track.dxy()<1.0' - -# PAT MUONS - -# before pat: Merge CaloMuons into the collection of reco::Muons -# Starting from 3_4_X a special recipe is needed for CaloMuons merging -# Uncomment the following lines and follow the recipe in: -# https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideMuonIsolation#To_remake_IsoDeposits_in_CMSSW_3 - -#from RecoMuon.MuonIdentification.calomuons_cfi import calomuons; -#muons = cms.EDProducer("CaloMuonMerger", -# muons = cms.InputTag("muons"), # half-dirty thing. it works aslong as we're the first module using muons in the path -# caloMuons = cms.InputTag("calomuons"), -# minCaloCompatibility = calomuons.minCaloCompatibility) - -## And re-make isolation, as we can't use the one in AOD because our collection is different -#import RecoMuon.MuonIsolationProducers.muIsolation_cff - -# pat muons -# needed starting from 3_6_1 -from TrackingTools.TransientTrack.TransientTrackBuilder_cfi import * -# -from PhysicsTools.PatAlgos.producersLayer1.muonProducer_cfi import * -patMuons.isoDeposits = cms.PSet( - tracker = cms.InputTag("muIsoDepositTk"), - ecal = cms.InputTag("muIsoDepositCalByAssociatorTowers","ecal"), - hcal = cms.InputTag("muIsoDepositCalByAssociatorTowers","hcal"), -) -patMuons.userIsolation = cms.PSet( - hcal = cms.PSet( - src = cms.InputTag("muIsoDepositCalByAssociatorTowers","hcal"), - deltaR = cms.double(0.3) - ), - tracker = cms.PSet( - veto = cms.double(0.015), - src = cms.InputTag("muIsoDepositTk"), - deltaR = cms.double(0.3), - threshold = cms.double(1.5) - ), - ecal = cms.PSet( - src = cms.InputTag("muIsoDepositCalByAssociatorTowers","ecal"), - deltaR = cms.double(0.3) - ) - ) - -patMuons.addGenMatch = cms.bool(False) -patMuons.embedTrack = cms.bool(True) -patMuons.embedCombinedMuon = cms.bool(True) -patMuons.embedStandAloneMuon = cms.bool(True) -patMuons.embedPickyMuon = cms.bool(False) -patMuons.embedTpfmsMuon = cms.bool(False) -patMuons.embedPFCandidate = cms.bool(False) - -from PhysicsTools.PatAlgos.selectionLayer1.muonSelector_cfi import * -selectedPatMuons.cut = 'pt > 15. & abs(eta) < 100.0 & ( (isGlobalMuon==1 & innerTrack.dxy()<1.0) | ((isTrackerMuon==1 & innerTrack.dxy()<1.0) | (isStandAloneMuon==1 & outerTrack.dxy()<1.0) ))' - -# trigger info -from PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cfi import * -# to access 8E29 menus -#patTrigger.triggerResults = cms.InputTag( "TriggerResults::HLT8E29" ) -#patTrigger.triggerEvent = cms.InputTag( "hltTriggerSummaryAOD::HLT8E29" ) -# to access 1E31 menus -patTrigger.triggerResults = cms.InputTag( "TriggerResults::HLT" ) -patTrigger.triggerEvent = cms.InputTag( "hltTriggerSummaryAOD::HLT" ) - -muonTriggerMatchHLTMuons = cms.EDProducer( "PATTriggerMatcherDRDPtLessByR", - src = cms.InputTag( "selectedPatMuons" ), - matched = cms.InputTag( "patTrigger" ), - andOr = cms.bool( False ), - filterIdsEnum = cms.vstring( 'TriggerMuon' ), # 'TriggerMuon' is the enum from trigger::TriggerObjectType for HLT muons - filterIds = cms.vint32( 0 ), - filterLabels = cms.vstring( '*' ), - pathNames = cms.vstring( 'HLT_Mu9' ), - collectionTags = cms.vstring( '*' ), - maxDPtRel = cms.double( 1.0 ), - maxDeltaR = cms.double( 0.2 ), - resolveAmbiguities = cms.bool( True ), - resolveByMatchQuality = cms.bool( False ) -) - -from PhysicsTools.PatAlgos.triggerLayer1.triggerEventProducer_cfi import * -patTriggerEvent.patTriggerMatches = cms.VInputTag( "muonTriggerMatchHLTMuons" ) - -patTriggerSequence = cms.Sequence( - patTrigger * - muonTriggerMatchHLTMuons * - patTriggerEvent -) - -selectedPatMuonsTriggerMatch = cms.EDProducer( "PATTriggerMatchMuonEmbedder", - src = cms.InputTag( "selectedPatMuons" ), - matches = cms.VInputTag( "muonTriggerMatchHLTMuons" ) -) - -muonTriggerMatchEmbedder = cms.Sequence( - selectedPatMuonsTriggerMatch -) - -# uncomment in case of CaloMuons merging -#beforePatMuons = cms.Sequence( -# muons * -# muIsolation -#) - -beforePatTracks = cms.Sequence( - patAODTrackCandSequence -) - -beforePat = cms.Sequence( -# uncomment in case of CaloMuons merging -# beforePatMuons * - beforePatTracks -) - -patCandsSequence = cms.Sequence( - patMuons * - selectedPatMuons * - allPatTracks * - selectedPatTracks -) - -goodMuonRecoForDimuon = cms.Sequence( - beforePat * - patCandsSequence * - patTriggerSequence * - muonTriggerMatchEmbedder -) - diff --git a/ElectroWeakAnalysis/Skimming/python/trackMuMatch_cfi.py b/ElectroWeakAnalysis/Skimming/python/trackMuMatch_cfi.py deleted file mode 100644 index 02ddabbb5dcca..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/trackMuMatch_cfi.py +++ /dev/null @@ -1,18 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# Configuration of the MC match for generic tracks candidates -# (following the configuration for muons) - -trackMuMatch = cms.EDProducer("MCMatcher", # cut on deltaR, deltaPt/Pt; pick best by deltaR - src = cms.InputTag("patAODTrackCands"), # RECO objects to match - matched = cms.InputTag("genParticles"), # mc-truth particle collection - mcPdgId = cms.vint32(13), # one or more PDG ID (13 = muon); absolute values (see below) - checkCharge = cms.bool(True), # True = require RECO and MC objects to have the same charge - mcStatus = cms.vint32(1), # PYTHIA status code (1 = stable, 2 = shower, 3 = hard scattering) - maxDeltaR = cms.double(0.5), # Minimum deltaR for the match - maxDPtRel = cms.double(0.5), # Minimum deltaPt/Pt for the match - resolveAmbiguities = cms.bool(True), # Forbid two RECO objects to match to the same GEN object - resolveByMatchQuality = cms.bool(False), # False = just match input in order; True = pick lowest deltaR pair first -) - diff --git a/ElectroWeakAnalysis/Skimming/python/zMuMuMuonUserData.py b/ElectroWeakAnalysis/Skimming/python/zMuMuMuonUserData.py deleted file mode 100644 index dd4eedbd5b9de..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/zMuMuMuonUserData.py +++ /dev/null @@ -1,67 +0,0 @@ -import FWCore.ParameterSet.Config as cms -import copy - -userDataMuons = cms.EDProducer( - "ZMuMuMuonUserData", - src = cms.InputTag("selectedPatMuonsTriggerMatch"), - zGenParticlesMatch = cms.InputTag(""), -## zGenParticlesMatch = cms.InputTag(""), - alpha = cms.double(0.75), - beta = cms.double(-0.75), - beamSpot = cms.InputTag("offlineBeamSpot"), - primaryVertices = cms.InputTag("offlinePrimaryVerticesWithBS"), - ptThreshold = cms.double(1.5), - etEcalThreshold = cms.double(0.2), - etHcalThreshold = cms.double(0.5), - dRVetoTrk = cms.double(0.015), - dRTrk = cms.double(0.3), - dREcal = cms.double(0.25), - dRHcal = cms.double(0.25), - hltPath = cms.string("HLT_Mu9") - ) - -userDataTracks = cms.EDProducer( - "ZMuMuTrackUserData", - src = cms.InputTag("selectedPatTracks"), - zGenParticlesMatch = cms.InputTag(""), - alpha = cms.double(0.75), - beta = cms.double(-0.75), - beamSpot = cms.InputTag("offlineBeamSpot"), - ptThreshold = cms.double(1.5), - etEcalThreshold = cms.double(0.2), - etHcalThreshold = cms.double(0.5), - dRVetoTrk = cms.double(0.015), - dRTrk = cms.double(0.3), - dREcal = cms.double(0.25), - dRHcal = cms.double(0.25), - primaryVertices = cms.InputTag("offlinePrimaryVerticesWithBS"), - ) - -userDataDimuons= cms.EDProducer( - "ZMuMuUserData", - src = cms.InputTag("dimuons"), - zGenParticlesMatch = cms.InputTag(""), -## zGenParticlesMatch = cms.InputTag("allDimuonsMCMatch"), - alpha = cms.double(0.75), - beta = cms.double(-0.75), - beamSpot = cms.InputTag("offlineBeamSpot"), - primaryVertices = cms.InputTag("offlinePrimaryVerticesWithBS"), - hltPath = cms.string("HLT_Mu9") - ) - -userDataDimuonsOneTrack= cms.EDProducer( - "ZMuMuUserDataOneTrack", - src = cms.InputTag("dimuonsOneTrack"), - zGenParticlesMatch = cms.InputTag(""), -# zGenParticlesMatch = cms.InputTag("allDimuonsMCMatch"), - alpha = cms.double(0.75), - beta = cms.double(-0.75), - beamSpot = cms.InputTag("offlineBeamSpot"), - primaryVertices = cms.InputTag("offlinePrimaryVerticesWithBS"), - hltPath = cms.string("HLT_Mu9") - ) - - - - - diff --git a/ElectroWeakAnalysis/Skimming/python/zMuMuSubskimOutputModule_cfi.py b/ElectroWeakAnalysis/Skimming/python/zMuMuSubskimOutputModule_cfi.py deleted file mode 100644 index 165402ca26723..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/zMuMuSubskimOutputModule_cfi.py +++ /dev/null @@ -1,39 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -zMuMuSubskimOutputModule = cms.OutputModule("PoolOutputModule", - outputCommands = cms.untracked.vstring( - 'drop *', -#### to access the position at the momentum system for global and standalone muons - 'keep recoTrackExtras_standAloneMuons_*_*', - 'keep recoTracks_standAloneMuons_UpdatedAtVtx_*', - #'keep recoCaloMuons_calomuons_*_*', - #'keep *_selectedPatMuonsTriggerMatch_*_*', - #'keep *_selectedPatTracks_*_*', - 'keep *_userDataMuons_*_*', - 'keep *_userDataTracks_*_*', - 'keep *_userDataDimuons_*_*', - 'keep *_userDataDimuonsOneTrack_*_*', - #'keep *_dimuons_*_*', - #'keep *_dimuonsOneTrack_*_*', - 'keep *_dimuonsGlobal_*_*', - 'keep *_dimuonsOneStandAloneMuon_*_*', - 'keep *_dimuonsOneTrackerMuon_*_*', - ### to access vertex information - 'keep *_offlineBeamSpot_*_*', - 'keep *_offlinePrimaryVerticesWithBS_*_*', - ### to save jet information - #'keep *_sisCone5CaloJets_*_*', - #'keep *_ak4CaloJets_*_*', - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - 'dimuonsPath', - 'dimuonsOneTrackPath') - ), - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('zmumu'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('zMuMuSubskim.root') -) - diff --git a/ElectroWeakAnalysis/Skimming/python/zMuMu_MCTruth_cfi.py b/ElectroWeakAnalysis/Skimming/python/zMuMu_MCTruth_cfi.py deleted file mode 100644 index a34ee22e723ee..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/zMuMu_MCTruth_cfi.py +++ /dev/null @@ -1,52 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from ElectroWeakAnalysis.Skimming.dimuonsHLTFilter_cfi import * - -from PhysicsTools.HepMCCandAlgos.goodMuonMCMatch_cfi import * -goodMuonMCMatch.src = 'userDataMuons' - -from PhysicsTools.HepMCCandAlgos.goodTrackMCMatch_cfi import * -goodTrackMCMatch.src = 'userDataTracks' - -from ElectroWeakAnalysis.Skimming.dimuonsMCMatch_cfi import * -#dimuonsMCMatch.src=cms.InputTag("userDataDimuons") - -from ElectroWeakAnalysis.Skimming.dimuonsOneTrackMCMatch_cfi import * -#dimuonsOneTrackMCMatch.src=cms.InputTag("userDataDimuonsOneTrack") - -#allDimuonsMCMatch = cms.EDFilter("GenParticleMatchMerger", -# src = cms.VInputTag(cms.InputTag("goodMuonMCMatch"), cms.InputTag("goodTrackMCMatch"), cms.InputTag("dimuonsMCMatch")), -# filter = cms.bool(False) -#) - -allDimuonsMCMatch = cms.EDFilter("GenParticleMatchMerger", - src = cms.VInputTag(cms.InputTag("goodMuonMCMatch"), cms.InputTag("dimuonsMCMatch")), - filter = cms.bool(False) -) - -allDimuonsOneTrackMCMatch = cms.EDFilter("GenParticleMatchMerger", - src = cms.VInputTag(cms.InputTag("goodMuonMCMatch"), cms.InputTag("goodTrackMCMatch"), cms.InputTag("dimuonsOneTrackMCMatch")), - filter = cms.bool(False) -) - -# Different MCtruth sequences for different ZMuMu paths -mcTruthForDimuons = cms.Sequence(goodMuonMCMatch+dimuonsMCMatch+allDimuonsMCMatch) -mcTruthForDimuonsOneTrack = cms.Sequence(goodMuonMCMatch+goodTrackMCMatch+dimuonsOneTrackMCMatch+allDimuonsOneTrackMCMatch) - -#mcTruthForDimuons = cms.Sequence(goodMuonMCMatch+goodTrackMCMatch+dimuonsMCMatch+allDimuonsMCMatch) - -#mcTruthForDimuonsOneTrack = cms.Sequence(goodMuonMCMatch+goodTrackMCMatch+dimuonsOneTrackMCMatch) - - -#dimuonsMCTruth = cms.Path(dimuonsHLTFilter+ -# mcTruthForDimuons -#) - -mcEventContent = cms.PSet( - outputCommands = cms.untracked.vstring( - ### MC matching infos - 'keep *_genParticles_*_*', - 'keep *_allDimuonsMCMatch_*_*', - 'keep *_allDimuonsOneTrackMCMatch_*_*' - ) -) diff --git a/ElectroWeakAnalysis/Skimming/python/zMuMu_SubskimPathsWithMCTruth_cff.py b/ElectroWeakAnalysis/Skimming/python/zMuMu_SubskimPathsWithMCTruth_cff.py deleted file mode 100644 index 3b4347f9f8d62..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/zMuMu_SubskimPathsWithMCTruth_cff.py +++ /dev/null @@ -1,50 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from ElectroWeakAnalysis.Skimming.dimuonsHLTFilter_cfi import * -from ElectroWeakAnalysis.Skimming.patCandidatesForZMuMuSubskim_cff import * -from ElectroWeakAnalysis.Skimming.zMuMuMuonUserData import * -from ElectroWeakAnalysis.Skimming.dimuons_cfi import * -dimuons.decay = cms.string('userDataMuons@+ userDataMuons@-') -from ElectroWeakAnalysis.Skimming.dimuonsOneTrack_cfi import * -dimuonsOneTrack.decay = cms.string('userDataMuons@+ userDataTracks@-') -from ElectroWeakAnalysis.Skimming.dimuonsGlobal_cfi import * -dimuonsGlobal.src = cms.InputTag("userDataDimuons") -from ElectroWeakAnalysis.Skimming.dimuonsOneStandAloneMuon_cfi import * -dimuonsOneStandAloneMuon.src = cms.InputTag("userDataDimuons") -from ElectroWeakAnalysis.Skimming.dimuonsOneTrackerMuon_cfi import * -dimuonsOneTrackerMuon.src = cms.InputTag("userDataDimuons") -from ElectroWeakAnalysis.Skimming.dimuonsFilter_cfi import * -dimuonsFilter.src = cms.InputTag("userDataDimuons") -from ElectroWeakAnalysis.Skimming.dimuonsOneTrackFilter_cfi import * -dimuonsOneTrackFilter.src = cms.InputTag("userDataDimuonsOneTrack") - -# MC matching sequence -from ElectroWeakAnalysis.Skimming.zMuMu_MCTruth_cfi import * -userDataDimuons.zGenParticlesMatch = cms.InputTag("allDimuonsMCMatch") -userDataDimuonsOneTrack.zGenParticlesMatch = cms.InputTag("allDimuonsOneTrackMCMatch") - - - -dimuonsPath = cms.Path(dimuonsHLTFilter * - goodMuonRecoForDimuon * - userDataMuons* - dimuons * - mcTruthForDimuons * - userDataDimuons* - dimuonsGlobal * - dimuonsOneStandAloneMuon * - dimuonsOneTrackerMuon * - dimuonsFilter - ) - -dimuonsOneTrackPath = cms.Path(dimuonsHLTFilter * - goodMuonRecoForDimuon* - userDataMuons* - userDataTracks* - dimuonsOneTrack* - mcTruthForDimuonsOneTrack * - userDataDimuonsOneTrack* - dimuonsOneTrackFilter - ) - - diff --git a/ElectroWeakAnalysis/Skimming/python/zMuMu_SubskimPaths_cff.py b/ElectroWeakAnalysis/Skimming/python/zMuMu_SubskimPaths_cff.py deleted file mode 100644 index 94bb52eff4f82..0000000000000 --- a/ElectroWeakAnalysis/Skimming/python/zMuMu_SubskimPaths_cff.py +++ /dev/null @@ -1,41 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from ElectroWeakAnalysis.Skimming.dimuonsHLTFilter_cfi import * -from ElectroWeakAnalysis.Skimming.patCandidatesForZMuMuSubskim_cff import * -from ElectroWeakAnalysis.Skimming.zMuMuMuonUserData import * -from ElectroWeakAnalysis.Skimming.dimuons_cfi import * -dimuons.decay = cms.string('userDataMuons@+ userDataMuons@-') -from ElectroWeakAnalysis.Skimming.dimuonsOneTrack_cfi import * -dimuonsOneTrack.decay = cms.string('userDataMuons@+ userDataTracks@-') -from ElectroWeakAnalysis.Skimming.dimuonsGlobal_cfi import * -dimuonsGlobal.src = cms.InputTag("userDataDimuons") -from ElectroWeakAnalysis.Skimming.dimuonsOneStandAloneMuon_cfi import * -dimuonsOneStandAloneMuon.src = cms.InputTag("userDataDimuons") -from ElectroWeakAnalysis.Skimming.dimuonsOneTrackerMuon_cfi import * -dimuonsOneTrackerMuon.src = cms.InputTag("userDataDimuons") -from ElectroWeakAnalysis.Skimming.dimuonsFilter_cfi import * -dimuonsFilter.src = cms.InputTag("userDataDimuons") -from ElectroWeakAnalysis.Skimming.dimuonsOneTrackFilter_cfi import * -dimuonsOneTrackFilter.src = cms.InputTag("userDataDimuonsOneTrack") - -dimuonsPath = cms.Path(dimuonsHLTFilter * - goodMuonRecoForDimuon * - userDataMuons* - dimuons * - userDataDimuons* - dimuonsGlobal * - dimuonsOneStandAloneMuon * - dimuonsOneTrackerMuon * - dimuonsFilter - ) - -dimuonsOneTrackPath = cms.Path(dimuonsHLTFilter * - goodMuonRecoForDimuon* - userDataMuons* - userDataTracks* - dimuonsOneTrack* - userDataDimuonsOneTrack* - dimuonsOneTrackFilter - ) - - diff --git a/ElectroWeakAnalysis/Skimming/test/EWK_DiElectronSkim_Drop.py b/ElectroWeakAnalysis/Skimming/test/EWK_DiElectronSkim_Drop.py deleted file mode 100644 index 4a11b961e1009..0000000000000 --- a/ElectroWeakAnalysis/Skimming/test/EWK_DiElectronSkim_Drop.py +++ /dev/null @@ -1,136 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("EWKDiElectronSkim") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.load("Configuration.StandardSequences.MagneticField_cff") -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") - -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'rfio:/tmp/ikesisog/10A96AFC-E17C-DE11-A90E-001D0967D9CC.root' - ) -) - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -process.GlobalTag.globaltag = cms.string('MC_31X_V3::All') - - -# HLT filter -import HLTrigger.HLTfilters.hltHighLevel_cfi -process.EWK_DiElectronHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() - -# Uncomment this to access 8E29 menu and filter on it -process.EWK_DiElectronHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT8E29") -process.EWK_DiElectronHLTFilter.HLTPaths = ["HLT_Ele15_LW_L1R"] - - -# Make a collection of good SuperClusters. -# -# Before selection is made, merge the Barrel and EndCap SC's. -process.superClusterMerger = cms.EDProducer("EgammaSuperClusterMerger", - src = cms.VInputTag(cms.InputTag('correctedHybridSuperClusters'), cms.InputTag('correctedMulti5x5SuperClustersWithPreshower')) - ) - -# Get the above merged SC's and select the particle (gamma) to greate SC's Candidates. -process.superClusterCands = cms.EDProducer("ConcreteEcalCandidateProducer", - src = cms.InputTag("superClusterMerger"), particleType = cms.string('gamma') - ) - -# Get the above SC's Candidates and place a cut on their Et. -process.goodSuperClusters = cms.EDFilter("CandViewRefSelector", - src = cms.InputTag("superClusterCands"), - cut = cms.string('et > 20.0'), - filter = cms.bool(True) - ) - -process.superClusterFilter = cms.Sequence(process.superClusterMerger + process.superClusterCands + process.goodSuperClusters) - - -# Make a collections on good Electrons. -# -process.goodElectrons = cms.EDFilter("CandViewSelector", - src = cms.InputTag("gsfElectrons"), - cut = cms.string('pt > 20.0'), - filter = cms.bool(True) -) - -# Filter the above two collections (good SuperClusters and good Electrons) -# -process.electronSuperClusterCombiner = cms.EDFilter("CandViewShallowCloneCombiner", - filter = cms.bool(True), - checkCharge = cms.bool(False), - cut = cms.string('mass > 3.0'), - decay = cms.string('goodElectrons goodSuperClusters') - ) - -process.electronSuperClusterCounter = cms.EDFilter("CandViewCountFilter", - src = cms.InputTag("electronSuperClusterCombiner"), - minNumber = cms.uint32(1) - ) - -process.electronSuperClusterFilter = cms.Sequence(process.electronSuperClusterCombiner + process.electronSuperClusterCounter) - - -# Skim path -process.EWK_DiElectronSkimPath = cms.Path(process.EWK_DiElectronHLTFilter + - process.goodElectrons + - process.superClusterFilter + - process.electronSuperClusterFilter - ) - - -# Output module configuration -from Configuration.EventContent.EventContent_cff import * - -EWK_DiElectronSkimEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -EWK_DiElectronSkimEventContent.outputCommands.extend(AODEventContent.outputCommands) - -EWK_DiElectronSkimEventContent.outputCommands.extend( - cms.untracked.vstring('drop *', - "keep recoSuperClusters_*_*_*", - "keep *_gsfElectrons_*_*", - "keep recoGsfTracks_electronGsfTracks_*_*", - "keep *_gsfElectronCores_*_*", - "keep *_correctedHybridSuperClusters_*_*", - "keep *_correctedMulti5x5SuperClustersWithPreshower_*_*", - "keep edmTriggerResults_*_*_*", - "keep recoCaloMETs_*_*_*", - "keep recoMETs_*_*_*", - "keep *_particleFlow_electrons_*", - "keep *_pfMet_*_*", - "keep *_multi5x5SuperClusterWithPreshower_*_*", - "keep recoVertexs_*_*_*", - "keep *_hltTriggerSummaryAOD_*_*", - "keep floatedmValueMap_*_*_*", - "keep recoBeamSpot_*_*_*" ) -) - -EWK_DiElectronSkimEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - 'EWK_DiElectronSkimPath') - ) -) - -process.EWK_DiElectronSkimOutputModule = cms.OutputModule("PoolOutputModule", - EWK_DiElectronSkimEventContent, - EWK_DiElectronSkimEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('EWKSKIMEMET'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('EWKDiElectronSkim.root') -) - -process.outpath = cms.EndPath(process.EWK_DiElectronSkimOutputModule) - - diff --git a/ElectroWeakAnalysis/Skimming/test/EWK_DiElectronSkim_NoDrop.py b/ElectroWeakAnalysis/Skimming/test/EWK_DiElectronSkim_NoDrop.py deleted file mode 100644 index 3ee4beb98e8e4..0000000000000 --- a/ElectroWeakAnalysis/Skimming/test/EWK_DiElectronSkim_NoDrop.py +++ /dev/null @@ -1,116 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("EWKDiElectronSkim") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.load("Configuration.StandardSequences.MagneticField_cff") -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") - -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'rfio:/tmp/ikesisog/10A96AFC-E17C-DE11-A90E-001D0967D9CC.root' - ) -) - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -process.GlobalTag.globaltag = cms.string('MC_31X_V3::All') - - -# HLT filter -import HLTrigger.HLTfilters.hltHighLevel_cfi -process.EWK_DiElectronHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() - -# Uncomment this to access 8E29 menu and filter on it -process.EWK_DiElectronHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT8E29") -process.EWK_DiElectronHLTFilter.HLTPaths = ["HLT_Ele15_LW_L1R"] - - -# Make a collection of good SuperClusters. -# -# Before selection is made, merge the Barrel and EndCap SC's. -process.superClusterMerger = cms.EDProducer("EgammaSuperClusterMerger", - src = cms.VInputTag(cms.InputTag('correctedHybridSuperClusters'), cms.InputTag('correctedMulti5x5SuperClustersWithPreshower')) - ) - -# Get the above merged SC's and select the particle (gamma) to greate SC's Candidates. -process.superClusterCands = cms.EDProducer("ConcreteEcalCandidateProducer", - src = cms.InputTag("superClusterMerger"), particleType = cms.string('gamma') - ) - -# Get the above SC's Candidates and place a cut on their Et. -process.goodSuperClusters = cms.EDFilter("CandViewRefSelector", - src = cms.InputTag("superClusterCands"), - cut = cms.string('et > 20.0'), - filter = cms.bool(True) - ) - -process.superClusterFilter = cms.Sequence(process.superClusterMerger + process.superClusterCands + process.goodSuperClusters) - - -# Make a collections on good Electrons. -# -process.goodElectrons = cms.EDFilter("CandViewSelector", - src = cms.InputTag("gsfElectrons"), - cut = cms.string('pt > 20.0'), - filter = cms.bool(True) -) - -# Filter the above two collections (good SuperClusters and good Electrons) -# -process.electronSuperClusterCombiner = cms.EDFilter("CandViewShallowCloneCombiner", - filter = cms.bool(True), - checkCharge = cms.bool(False), - cut = cms.string('mass > 3.0'), - decay = cms.string('goodElectrons goodSuperClusters') - ) - -process.electronSuperClusterCounter = cms.EDFilter("CandViewCountFilter", - src = cms.InputTag("electronSuperClusterCombiner"), - minNumber = cms.uint32(1) - ) - -process.electronSuperClusterFilter = cms.Sequence(process.electronSuperClusterCombiner + process.electronSuperClusterCounter) - - -# Skim path -process.EWK_DiElectronSkimPath = cms.Path(process.EWK_DiElectronHLTFilter + - process.goodElectrons + - process.superClusterFilter + - process.electronSuperClusterFilter - ) - - -# Output module configuration -from Configuration.EventContent.EventContent_cff import * - -EWK_DiElectronSkimEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -EWK_DiElectronSkimEventContent.outputCommands.extend(AODEventContent.outputCommands) - -EWK_DiElectronSkimEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - 'EWK_DiElectronSkimPath') - ) -) - -process.EWK_DiElectronSkimOutputModule = cms.OutputModule("PoolOutputModule", - EWK_DiElectronSkimEventContent, - EWK_DiElectronSkimEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('EWKSKIMEMET'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('EWKDiElectronSkim.root') -) - -process.outpath = cms.EndPath(process.EWK_DiElectronSkimOutputModule) - - diff --git a/ElectroWeakAnalysis/Skimming/test/EWK_DimuonSkim.py b/ElectroWeakAnalysis/Skimming/test/EWK_DimuonSkim.py deleted file mode 100755 index 36aab91433b15..0000000000000 --- a/ElectroWeakAnalysis/Skimming/test/EWK_DimuonSkim.py +++ /dev/null @@ -1,163 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("EWKDimuonSkim") - -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:/scratch1/cms/data/summer09/aodsim/zmumu/0016/A68B6BD1-FF83-DE11-B579-001E68A99420.root' -# 'file:/scratch1/cms/data/summer09/aodsim/ppMuX/0010/9C519151-5883-DE11-8BC8-001AA0095119.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(500) ) - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('MC_31X_V3::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - -# HLT filter -import HLTrigger.HLTfilters.hltHighLevel_cfi -process.EWK_MuHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() -# Uncomment this to access 8E29 menu and filter on it -#process.EWK_MuHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT8E29") -#process.EWK_MuHLTFilter.HLTPaths = ["HLT_Mu3", "HLT_DoubleMu3"] -# Uncomment this to filter on 1E31 HLT menu -process.EWK_MuHLTFilter.HLTPaths = ["HLT_Mu9"] - -# Muon candidates filters -process.goodAODMuons = cms.EDFilter("CandViewSelector", - src = cms.InputTag("muons"), - cut = cms.string('pt > 0'), - filter = cms.bool(True) -) - -process.goodAODGlobalMuons = cms.EDFilter("CandViewSelector", - src = cms.InputTag("goodAODMuons"), - cut = cms.string('isGlobalMuon=1'), - filter = cms.bool(True) -) - -# Track candidates -process.trackCandsUnfiltered = cms.EDProducer("ConcreteChargedCandidateProducer", - src = cms.InputTag("generalTracks"), - particleType = cms.string('mu+') # to fix mass hypothesis -) - -# Track candidates filter -process.goodAODTrackCands = cms.EDFilter("CandViewSelector", - src = cms.InputTag("trackCandsUnfiltered"), - cut = cms.string('pt > 10') -) - -# Dimuon candidates - -process.dimuonsAOD = cms.EDFilter("CandViewShallowCloneCombiner", - checkCharge = cms.bool(False), - cut = cms.string('mass > 0'), - decay = cms.string("goodAODMuons@+ goodAODMuons@-") -) - -process.dimuonsGlobalAOD = cms.EDFilter("CandViewRefSelector", - src = cms.InputTag("dimuonsAOD"), - cut = cms.string('charge = 0 & daughter(0).isGlobalMuon = 1 & daughter(1).isGlobalMuon = 1') -) - -process.dimuonsOneStandAloneMuonAOD = cms.EDFilter("CandViewRefSelector", - src = cms.InputTag("dimuonsAOD"), - cut = cms.string('charge = 0 & mass > 20 & ( (daughter(0).isStandAloneMuon = 1 & daughter(0).isGlobalMuon = 0 & daughter(1).isGlobalMuon = 1) | (daughter(1).isStandAloneMuon = 1 & daughter(1).isGlobalMuon = 0 & daughter(0).isGlobalMuon = 1) )') -) - -process.dimuonsOneTrackAOD = cms.EDFilter("CandViewShallowCloneCombiner", - checkCharge = cms.bool(False), - cut = cms.string('mass > 20'), - decay = cms.string('goodAODMuons@+ goodAODTrackCands@-') -) - -process.dimuonsOneGlobalMuonOneTrackAOD = cms.EDFilter("CandViewRefSelector", - src = cms.InputTag("dimuonsOneTrackAOD"), - cut = cms.string('charge = 0 & daughter(0).isGlobalMuon = 1') -) - -# dimuon filters -process.dimuonsFilter = cms.EDFilter("CandViewCountFilter", - src = cms.InputTag("dimuonsAOD"), - minNumber = cms.uint32(1) -) - -process.dimuonsOneTrackFilter = cms.EDFilter("CandViewCountFilter", - src = cms.InputTag("dimuonsOneTrackAOD"), - minNumber = cms.uint32(1) -) - -# Skim paths -process.EWK_dimuonsPath = cms.Path( - process.EWK_MuHLTFilter * - process.goodAODMuons * - process.goodAODGlobalMuons * - process.dimuonsAOD * - process.dimuonsGlobalAOD * - process.dimuonsOneStandAloneMuonAOD * - process.dimuonsFilter - ) - -process.EWK_dimuonsOneTrackPath = cms.Path( - process.EWK_MuHLTFilter * - process.goodAODMuons * - process.goodAODGlobalMuons * - process.trackCandsUnfiltered * - process.goodAODTrackCands * - process.dimuonsOneTrackAOD * - process.dimuonsOneGlobalMuonOneTrackAOD * - process.dimuonsOneTrackFilter -) - - -# Output module configuration -from Configuration.EventContent.EventContent_cff import * - -EWK_dimuonsEventContent = cms.PSet( - outputCommands = cms.untracked.vstring( - 'keep *_trackCandsUnfiltered_*_*', - 'keep *_goodAODTrackCands_*_*', - 'keep *_goodAODMuons_*_*', - 'keep *_dimuonsAOD_*_*', - 'keep *_dimuonsGlobalAOD_*_*', - 'keep *_dimuonsOneStandAloneMuonAOD_*_*', - 'keep *_dimuonsOneTrackAOD_*_*', - 'keep *_dimuonsOneGlobalMuonOneTrackAOD_*_*', - ) -) - -EWK_DimuonSkimEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -EWK_DimuonSkimEventContent.outputCommands.extend(AODEventContent.outputCommands) -EWK_DimuonSkimEventContent.outputCommands.extend(EWK_dimuonsEventContent.outputCommands) - -EWK_DimuonSkimEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - 'EWK_dimuonsPath', - 'EWK_dimuonsOneTrackPath') - ) -) - -process.EWK_DimuonSkimOutputModule = cms.OutputModule("PoolOutputModule", - EWK_DimuonSkimEventContent, - EWK_DimuonSkimEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('EWKDimuonSkim'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('file:testEWKDimuonSkim.root') -) - -process.outpath = cms.EndPath(process.EWK_DimuonSkimOutputModule) - - diff --git a/ElectroWeakAnalysis/Skimming/test/EWK_ElectronSkim.py b/ElectroWeakAnalysis/Skimming/test/EWK_ElectronSkim.py deleted file mode 100755 index 093538cdbcdec..0000000000000 --- a/ElectroWeakAnalysis/Skimming/test/EWK_ElectronSkim.py +++ /dev/null @@ -1,71 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("EWKElectronSkim") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:/scratch1/cms/data/summer09/aodsim/zee/0022/E0869C04-088D-DE11-BFCA-001CC4A6CCE6.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100) ) - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('MC_31X_V3::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - -# HLT filter -import HLTrigger.HLTfilters.hltHighLevel_cfi -process.EWK_ElectronHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() -# Uncomment this to access 8E29 menu and filter on it -#process.EWK_ElectronHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT8E29") -#process.EWK_ElectronHLTFilter.HLTPaths = ["HLT_Ele10_LW_L1R", "HLT_DoubleEle5_SW_L1R"] -# Uncomment this to filter on 1E31 HLT menu -process.EWK_ElectronHLTFilter.HLTPaths = ["HLT_Ele20_SW_L1R", "HLT_DoubleEle10_SW_L1R"] - -# Electron filter -process.goodElectrons = cms.EDFilter("CandViewSelector", - src = cms.InputTag("gsfElectrons"), - cut = cms.string('pt > 20'), - filter = cms.bool(True) -) - -# Skim path -process.EWK_ElectronSkimPath = cms.Path( - process.EWK_ElectronHLTFilter + - process.goodElectrons -) - -# Output module configuration -from Configuration.EventContent.EventContent_cff import * -EWK_ElectronSkimEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -EWK_ElectronSkimEventContent.outputCommands.extend(AODEventContent.outputCommands) - -EWK_ElectronSkimEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - 'EWK_ElectronSkimPath') - ) -) - -process.EWK_ElectronSkimOutputModule = cms.OutputModule("PoolOutputModule", - EWK_ElectronSkimEventContent, - EWK_ElectronSkimEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('EWKElectronSkim'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('file:testEWKElectronSkim.root') -) - -process.outpath = cms.EndPath(process.EWK_ElectronSkimOutputModule) - - diff --git a/ElectroWeakAnalysis/Skimming/test/EWK_ElectronSkim_Drop.py b/ElectroWeakAnalysis/Skimming/test/EWK_ElectronSkim_Drop.py deleted file mode 100644 index eff59150da300..0000000000000 --- a/ElectroWeakAnalysis/Skimming/test/EWK_ElectronSkim_Drop.py +++ /dev/null @@ -1,94 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("EWKElectronSkim") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.load("Configuration.StandardSequences.MagneticField_cff") -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") - -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'rfio:/tmp/ikesisog/3E541A7B-EE86-DE11-BA46-001E682F273A.root' - ) -) - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -process.GlobalTag.globaltag = cms.string('MC_31X_V3::All') - - -# HLT filter -import HLTrigger.HLTfilters.hltHighLevel_cfi -process.EWK_ElectronHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() - -# Uncomment this to access 8E29 menu and filter on it -process.EWK_ElectronHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT8E29") -process.EWK_ElectronHLTFilter.HLTPaths = ["HLT_Ele15_LW_L1R"] - - -# Electron filter -process.goodElectrons = cms.EDFilter("CandViewSelector", - src = cms.InputTag("gsfElectrons"), - cut = cms.string('pt > 30.0'), - filter = cms.bool(True) -) - -# Skim path -process.EWK_ElectronSkimPath = cms.Path( - process.EWK_ElectronHLTFilter + - process.goodElectrons -) - - -# Output module configuration -from Configuration.EventContent.EventContent_cff import * -EWK_ElectronSkimEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -EWK_ElectronSkimEventContent.outputCommands.extend(AODEventContent.outputCommands) - -EWK_ElectronSkimEventContent.outputCommands.extend( - cms.untracked.vstring('drop *', - "keep recoSuperClusters_*_*_*", - "keep *_gsfElectrons_*_*", - "keep recoGsfTracks_electronGsfTracks_*_*", - "keep *_gsfElectronCores_*_*", - "keep *_correctedHybridSuperClusters_*_*", - "keep *_correctedMulti5x5SuperClustersWithPreshower_*_*", - "keep edmTriggerResults_*_*_*", - "keep recoCaloMETs_*_*_*", - "keep recoMETs_*_*_*", - "keep *_particleFlow_electrons_*", - "keep *_pfMet_*_*", - "keep *_multi5x5SuperClusterWithPreshower_*_*", - "keep recoVertexs_*_*_*", - "keep *_hltTriggerSummaryAOD_*_*", - "keep floatedmValueMap_*_*_*", - "keep recoBeamSpot_*_*_*" ) -) - -EWK_ElectronSkimEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - 'EWK_ElectronSkimPath') - ) -) - -process.EWK_ElectronSkimOutputModule = cms.OutputModule("PoolOutputModule", - EWK_ElectronSkimEventContent, - EWK_ElectronSkimEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('EWKSKIMESEL'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('EWKElectronSkim.root') -) - -process.outpath = cms.EndPath(process.EWK_ElectronSkimOutputModule) - - diff --git a/ElectroWeakAnalysis/Skimming/test/EWK_ElectronSkim_NoDrop.py b/ElectroWeakAnalysis/Skimming/test/EWK_ElectronSkim_NoDrop.py deleted file mode 100644 index 58f7ba4be3c8d..0000000000000 --- a/ElectroWeakAnalysis/Skimming/test/EWK_ElectronSkim_NoDrop.py +++ /dev/null @@ -1,75 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("EWKElectronSkim") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.load("Configuration.StandardSequences.MagneticField_cff") -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") - -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'rfio:/tmp/ikesisog/3E541A7B-EE86-DE11-BA46-001E682F273A.root' - ) -) - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -process.GlobalTag.globaltag = cms.string('MC_31X_V3::All') - - -# HLT filter -import HLTrigger.HLTfilters.hltHighLevel_cfi -process.EWK_ElectronHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() - -# Uncomment this to access 8E29 menu and filter on it -process.EWK_ElectronHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT8E29") -process.EWK_ElectronHLTFilter.HLTPaths = ["HLT_Ele15_LW_L1R"] - - -# Electron filter -process.goodElectrons = cms.EDFilter("CandViewSelector", - src = cms.InputTag("gsfElectrons"), - cut = cms.string('pt > 30.0'), - filter = cms.bool(True) -) - -# Skim path -process.EWK_ElectronSkimPath = cms.Path( - process.EWK_ElectronHLTFilter + - process.goodElectrons -) - - -# Output module configuration -from Configuration.EventContent.EventContent_cff import * - -EWK_ElectronSkimEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -EWK_ElectronSkimEventContent.outputCommands.extend(AODEventContent.outputCommands) - -EWK_ElectronSkimEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - 'EWK_ElectronSkimPath') - ) -) - -process.EWK_ElectronSkimOutputModule = cms.OutputModule("PoolOutputModule", - EWK_ElectronSkimEventContent, - EWK_ElectronSkimEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('EWKSKIMESEL'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('EWKElectronSkim.root') -) - -process.outpath = cms.EndPath(process.EWK_ElectronSkimOutputModule) - - diff --git a/ElectroWeakAnalysis/Skimming/test/EWK_HighPtMuSkim.py b/ElectroWeakAnalysis/Skimming/test/EWK_HighPtMuSkim.py deleted file mode 100755 index f1041c72d6027..0000000000000 --- a/ElectroWeakAnalysis/Skimming/test/EWK_HighPtMuSkim.py +++ /dev/null @@ -1,69 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("EWKHighPtMuSkim") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:/scratch2/users/fabozzi/spring10/zmm/38262142-DF46-DF11-8238-0030487C6A90.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1000) ) - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('GR_R_35X_V6::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - -# Muon filter -process.goodMuons = cms.EDFilter("MuonSelector", - src = cms.InputTag("muons"), - cut = cms.string('pt > 15.0 && ( isGlobalMuon=1 || isTrackerMuon=1)'), - filter = cms.bool(True) -) - -# dxy filter on good muons -process.dxyFilteredMuons = cms.EDFilter("MuonSelector", - src = cms.InputTag("goodMuons"), - cut = cms.string('abs(innerTrack().dxy)<1.0'), - filter = cms.bool(True) -) - -# Skim path -process.EWK_HighPtMuSkimPath = cms.Path( - process.goodMuons * - process.dxyFilteredMuons -) - -# Output module configuration -from Configuration.EventContent.EventContent_cff import * -EWK_MuSkimEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -EWK_MuSkimEventContent.outputCommands.extend(RECOEventContent.outputCommands) - -EWK_MuSkimEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - 'EWK_HighPtMuSkimPath') - ) -) - -process.EWK_MuSkimOutputModule = cms.OutputModule("PoolOutputModule", - EWK_MuSkimEventContent, - EWK_MuSkimEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('EWKHighPtMuSkim'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('EWK_HighPtMuSkim_SD_Mu.root') -) - -process.outpath = cms.EndPath(process.EWK_MuSkimOutputModule) - - diff --git a/ElectroWeakAnalysis/Skimming/test/EWK_MuSkim.py b/ElectroWeakAnalysis/Skimming/test/EWK_MuSkim.py deleted file mode 100755 index 7690cec51b2cf..0000000000000 --- a/ElectroWeakAnalysis/Skimming/test/EWK_MuSkim.py +++ /dev/null @@ -1,63 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("EWKMuSkim") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:/scratch2/users/fabozzi/8039A1DC-9A5B-DF11-A15E-001A6478706C.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('GR_R_35X_V6::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - -# HLT filter -import HLTrigger.HLTfilters.hltHighLevel_cfi -process.EWK_MuHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() -# Uncomment this to access 8E29 menu and filter on it -#process.EWK_MuHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT8E29") -#process.EWK_MuHLTFilter.HLTPaths = ["HLT_Mu3", "HLT_DoubleMu3"] -# Uncomment this to filter on 1E31 HLT menu -process.EWK_MuHLTFilter.HLTPaths = ["HLT_L1Mu20", "HLT_L2Mu9", "HLT_Mu9", "HLT_DoubleMu3"] - -# Skim path -process.EWK_MuSkimPath = cms.Path( - process.EWK_MuHLTFilter -) - -# Output module configuration -from Configuration.EventContent.EventContent_cff import * -EWK_MuSkimEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -EWK_MuSkimEventContent.outputCommands.extend(AODEventContent.outputCommands) - -EWK_MuSkimEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - 'EWK_MuSkimPath') - ) -) - -process.EWK_MuSkimOutputModule = cms.OutputModule("PoolOutputModule", - EWK_MuSkimEventContent, - EWK_MuSkimEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('EWKMuSkim'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('EWK_MuSkim_SD_Mu.root') -) - -process.outpath = cms.EndPath(process.EWK_MuSkimOutputModule) - - diff --git a/ElectroWeakAnalysis/Skimming/test/EWK_MuSkimFirstCollisions.py b/ElectroWeakAnalysis/Skimming/test/EWK_MuSkimFirstCollisions.py deleted file mode 100755 index 72def53162cf5..0000000000000 --- a/ElectroWeakAnalysis/Skimming/test/EWK_MuSkimFirstCollisions.py +++ /dev/null @@ -1,189 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("EWKMuSkimFirstCollisions") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -# source - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - -### files at - -## - -"rfio:/castor/cern.ch/cms/store/data/Commissioning10/MinimumBias/RECO/v8/000/133/446/FE7241BD-EC49-DF11-8E75-001D09F29146.root", - - - ) -) -# to handle some format problem with some of the first CMS collsion runs - -process.source.inputCommands = cms.untracked.vstring("keep *", "drop *_MEtoEDMConverter_*_*", "drop L1GlobalTriggerObjectMapRecord_hltL1GtObjectMap__HLT") - - - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) -process.MessageLogger.cerr.threshold = '' -process.MessageLogger.cerr.FwkReport.reportEvery = 10000 - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('GR_R_35X_V6::All') -#process.GlobalTag.globaltag = cms.string('MC_31X_V3::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - -# HLT filter -import HLTrigger.HLTfilters.hltHighLevel_cfi -process.EWK_MuHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() -# Uncomment this to access 8E29 menu and filter on it -process.EWK_MuHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") -process.EWK_MuHLTFilter.HLTPaths = [ - "HLT_MinBiasBSC", - "HLT_L1Mu", "HLT_L1MuOpen", "HLT_L1Mu20", - "HLT_L2Mu9", "HLT_L2Mu11", - "HLT_Mu5", "HLT_Mu9" - ] - -# Uncomment this to filter on 1E31 HLT menu -#process.EWK_MuHLTFilter.HLTPaths = ["HLT_Mu9", "HLT_DoubleMu3"] - -process.load ('L1TriggerConfig.L1GtConfigProducers.L1GtTriggerMaskTechTrigConfig_cff') -process.load('HLTrigger/HLTfilters/hltLevel1GTSeed_cfi') -process.hltLevel1GTSeed.L1TechTriggerSeeding = cms.bool(True) -process.hltLevel1GTSeed.L1SeedsLogicalExpression = cms.string('0 AND (40 OR 41) AND NOT (36 OR 37 OR 38 OR 39)') - -process.options = cms.untracked.PSet( - SkipEvent = cms.untracked.vstring('ProductNotFound'), - wantSummary = cms.untracked.bool(True) - ) - -# Merge CaloMuons into the collection of reco::Muons -#from RecoMuon.MuonIdentification.calomuons_cfi import calomuons; -#process.muons = cms.EDProducer("CaloMuonMerger", -# muons = cms.InputTag("muons"), # half-dirty thing. it works aslong as we're the first module using muons in the path -# caloMuons = cms.InputTag("calomuons"), -# minCaloCompatibility = calomuons.minCaloCompatibility) - -## And re-make isolation, as we can't use the one in AOD because our collection is different -#process.load('RecoMuon.MuonIsolationProducers.muIsolation_cff') - - - -# Muon filter -process.goodMuons = cms.EDFilter("MuonSelector", - src = cms.InputTag("muons"), - cut = cms.string('pt > 10.0 && ( isGlobalMuon=1 || (isTrackerMuon =1 && numberOfMatches>=1 ))'), # also || (isCaloMuon=1) ?? - filter = cms.bool(True) -) - -process.rmCosmicFromGoodMuons = cms.EDFilter("MuonSelector", - src = cms.InputTag("goodMuons"), - cut = cms.string('abs(innerTrack().dxy)<1.0'), - filter = cms.bool(True) -) - - -process.goodMuonsPt15 = cms.EDFilter("MuonSelector", - src = cms.InputTag("goodMuons"), - cut = cms.string('(isGlobalMuon=1 || isTrackerMuon =1) && pt > 15.0'), - filter = cms.bool(False) -) - -# Dump of interesting events, with mu pt>15 -process.eventDump = cms.EDAnalyzer( - "EventDumper", - # srcMuons = cms.InputTag("goodMuonsPt15") - ) - - -# require at least two tracks with pt>.5, to hopefully remove further cosmic contaminations -process.tracks = cms.EDFilter("TrackSelector", - src=cms.InputTag("generalTracks"), - cut = cms.string('abs(dxy)<0.5 && pt > 0.5 && hitPattern().numberOfValidPixelHits>0'), - filter = cms.bool(True) -) - -process.tracksFilter = cms.EDFilter("TrackCountFilter", - src = cms.InputTag("tracks"), - minNumber = cms.uint32(1) - ) - - -process.dimuonsAOD = cms.EDFilter("CandViewShallowCloneCombiner", - checkCharge = cms.bool(False), - cut = cms.string('mass > 0'), - decay = cms.string('goodMuons@+ goodMuons@-') -) - - -# For creation of WMuNu Candidates -process.load("ElectroWeakAnalysis.WMuNu.wmunusProducer_cfi") - - - - -# Output module configuration -from Configuration.EventContent.EventContent_cff import * -EWK_MuSkimEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) - -EWK_MuSkimEventContent.outputCommands.extend(FEVTEventContent.outputCommands) - - -EWK_MuSkimEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - 'EWK_MuSkimPath') - ) -) - - -dimuonsEventContent = cms.PSet( - outputCommands = cms.untracked.vstring( - 'keep *_dimuonsAOD_*_*', - 'keep *_CosmicFromGoodMuons_*_*', - 'keep recoWMuNuCandidates_*_*_*' - ) - ) - - -EWK_MuSkimEventContent.outputCommands.extend(dimuonsEventContent.outputCommands) - - - -process.EWK_MuSkimOutputModule = cms.OutputModule("PoolOutputModule", - EWK_MuSkimEventContent, - EWK_MuSkimEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('EWKMuSkim'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133446_1.root') - -) - - - -# Skim path -process.EWK_MuSkimPath = cms.Path( - process.EWK_MuHLTFilter + - process.hltLevel1GTSeed+ - process.goodMuons + - process.rmCosmicFromGoodMuons + -# process.tracks + -# process.tracksFilter + - process.dimuonsAOD + - process.allWMuNus + -# process.goodMuonsPt15 + - process.eventDump - - -) - - -process.outpath = cms.EndPath(process.EWK_MuSkimOutputModule) - diff --git a/ElectroWeakAnalysis/Skimming/test/EWK_WMuNu_SubSkim.py b/ElectroWeakAnalysis/Skimming/test/EWK_WMuNu_SubSkim.py deleted file mode 100644 index 2193fbfa506e5..0000000000000 --- a/ElectroWeakAnalysis/Skimming/test/EWK_WMuNu_SubSkim.py +++ /dev/null @@ -1,100 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process name -process = cms.Process("WMuNuAODSkim") - -# Source, events to process -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring ( -# "file:/data4/InclusiveMu15_Summer09-MC_31X_V3_AODSIM-v1/0024/C2F408ED-E181-DE11-8949-0030483344E2.root" - "file:/data4/Wmunu_Summer09-MC_31X_V3_AODSIM-v1/0009/F82D4260-507F-DE11-B5D6-00093D128828.root" - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) -#process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1000) ) - -# Log information -process.MessageLogger = cms.Service("MessageLogger", - cerr = cms.untracked.PSet( - enable = cms.untracked.bool(False) - ), - cout = cms.untracked.PSet( - default = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ), - enable = cms.untracked.bool(True), - threshold = cms.untracked.string('ERROR') - ), - debugModules = cms.untracked.vstring('corMetWMuNus') -) - -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -# Trigger filter (apply if for safety even if it may be redundant on a SD input) -import HLTrigger.HLTfilters.hltHighLevel_cfi -process.EWK_WMuNuHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() -process.EWK_WMuNuHLTFilter.HLTPaths = ["HLT_Mu9", "HLT_DoubleMu3"] -#-> Use the following line for the 8E29 menu: -process.EWK_WMuNuHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT8E29") -#-> Use the following line for the 1E31 menu: -#process.EWK_WMuNuHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") - -# Make sure that we have any muon there and optionally apply quality, eta, pt cuts -process.goodMuons = cms.EDFilter("CandViewSelector", - src = cms.InputTag("muons") - , filter = cms.bool(True) - , cut = cms.string('pt>0') - #, cut = cms.string('isGlobalMuon = 1 & abs(eta) < 2.5 & pt > 15') -) - -# For creaton of WMuNu Candidates -process.load("ElectroWeakAnalysis.WMuNu.wmunusProducer_cfi") - -# Main path -process.EWK_WMuNuSkimPath = cms.Path( - process.EWK_WMuNuHLTFilter - * process.goodMuons - * process.allWMuNus -) - -# Choose collections for output -process.load("Configuration.EventContent.EventContent_cff") - -# Write either a full AOD ... -#process.EWK_WMuNuEventContent = cms.PSet(outputCommands=process.AODEventContent.outputCommands) -# ... OR a reduced one with ~ 1/3 of original AOD size -process.EWK_WMuNuEventContent = cms.PSet(outputCommands=cms.untracked.vstring('drop *')) -process.EWK_WMuNuEventContent.outputCommands.extend( - cms.untracked.vstring( - 'keep *_offlineBeamSpot_*_*' - , 'keep *_TriggerResults_*_HLT8E29' - , 'keep *_hltTriggerSummaryAOD_*_HLT8E29' - , 'keep *_muons_*_*' - , 'keep recoTracks_globalMuons_*_*' - , 'keep recoTracks_standAloneMuons_*_*' - , 'keep *_met_*_*' - , 'keep *_corMetGlobalMuons_*_*' - , 'keep *_tcMet_*_*' - , 'keep *_pfMet_*_*' - , 'keep *_antikt5CaloJets_*_*' - , 'keep *_antikt5PFJets_*_*' - , 'keep recoWMuNuCandidates_*_*_*' - ) -) - -# Output -process.EWK_WMuNuSkimOutputModule = cms.OutputModule("PoolOutputModule" - , process.EWK_WMuNuEventContent - , dropMetaDataForDroppedData = cms.untracked.bool(True) - , SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('EWK_WMuNuSkimPath') - ) - , dataset = cms.untracked.PSet( - filterName = cms.untracked.string('EWKWMunuSkim') - , dataTier = cms.untracked.string('USER') - ) - , fileName = cms.untracked.string('EWK_WMuNu_SubSkim.root') -) - -# End path -process.outpath = cms.EndPath(process.EWK_WMuNuSkimOutputModule) diff --git a/ElectroWeakAnalysis/Skimming/test/EWK_WMuNu_SubSkim_PrunedTracks.py b/ElectroWeakAnalysis/Skimming/test/EWK_WMuNu_SubSkim_PrunedTracks.py deleted file mode 100644 index b4679dc00315a..0000000000000 --- a/ElectroWeakAnalysis/Skimming/test/EWK_WMuNu_SubSkim_PrunedTracks.py +++ /dev/null @@ -1,126 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process name -process = cms.Process("WMuNuAODSkim") - -# Source, events to process -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring ( - #"file:/data4/InclusiveMu15_Summer09-MC_31X_V3_AODSIM-v1/0024/C2F408ED-E181-DE11-8949-0030483344E2.root" - "file:/data4/Wmunu_Summer09-MC_31X_V3_AODSIM-v1/0009/F82D4260-507F-DE11-B5D6-00093D128828.root" - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) -#process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1000) ) - -# Log information -process.MessageLogger = cms.Service("MessageLogger", - cerr = cms.untracked.PSet( - enable = cms.untracked.bool(False) - ), - cout = cms.untracked.PSet( - default = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ), - enable = cms.untracked.bool(True), - threshold = cms.untracked.string('ERROR') - ), - debugModules = cms.untracked.vstring('corMetWMuNus') -) - -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -# Trigger filter (apply if for safety even if it may be redundant on a SD input) -import HLTrigger.HLTfilters.hltHighLevel_cfi -process.EWK_WMuNuHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() -process.EWK_WMuNuHLTFilter.HLTPaths = ["HLT_Mu9", "HLT_DoubleMu3"] -#-> Use the following line for the 8E29 menu: -process.EWK_WMuNuHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT8E29") -#-> Use the following line for the 1E31 menu: -#process.EWK_WMuNuHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") - -# Make sure that we have any muon there and optionally apply quality, eta, pt cuts -process.goodMuons = cms.EDFilter("CandViewSelector", - src = cms.InputTag("muons") - , filter = cms.bool(True) - , cut = cms.string('pt>0') - #, cut = cms.string('isGlobalMuon = 1 & abs(eta) < 2.5 & pt > 15') -) - -# Tracks filtered -process.goodAODTracks = cms.EDFilter("TrackSelector", - src = cms.InputTag("generalTracks"), - #cut = cms.string('pt > 5.0 & numberOfValidHits>7') - cut = cms.string('pt > 5.0') -) - -# Electrons filtered -process.goodAODElectrons = cms.EDFilter("GsfElectronSelector", - src = cms.InputTag("gsfElectrons"), - cut = cms.string('pt > 5.0') -) - -# Photons filtered -process.goodAODPhotons = cms.EDFilter("PhotonSelector", - src = cms.InputTag("photons"), - cut = cms.string('et > 5.0') -) - -# For creaton of WMuNu Candidates -#process.load("ElectroWeakAnalysis.WMuNu.wmunusProducer_cfi") - -# Main path -process.EWK_WMuNuSkimPath = cms.Path( - process.EWK_WMuNuHLTFilter - + process.goodMuons - + process.goodAODTracks - + process.goodAODElectrons - + process.goodAODPhotons - #+ process.allWMuNus -) - -# Choose collections for output -process.load("Configuration.EventContent.EventContent_cff") - -# Write either a full AOD ... -#process.EWK_WMuNuEventContent = cms.PSet(outputCommands=process.AODEventContent.outputCommands) -# ... OR a reduced one with ~ 1/10 of original AOD size -process.EWK_WMuNuEventContent = cms.PSet(outputCommands=cms.untracked.vstring('drop *')) -process.EWK_WMuNuEventContent.outputCommands.extend( - cms.untracked.vstring( - 'keep *_offlineBeamSpot_*_*' - , 'keep *_TriggerResults_*_HLT8E29' - , 'keep *_hltTriggerSummaryAOD_*_HLT8E29' - , 'keep *_muons_*_*' - , 'keep recoTracks_globalMuons_*_*' - , 'keep recoTracks_standAloneMuons_*_*' - , 'keep *_met_*_*' - , 'keep *_corMetGlobalMuons_*_*' - , 'keep *_tcMet_*_*' - , 'keep *_pfMet_*_*' - , 'keep *_antikt5CaloJets_*_*' - , 'keep *_antikt5PFJets_*_*' - #### - , 'keep *_goodAODTracks_*_*' - , 'keep *_goodAODElectrons_*_*' - , 'keep *_goodAODPhotons_*_*' - #, 'keep recoWMuNuCandidates_*_*_*' - ) -) - -# Output -process.EWK_WMuNuSkimOutputModule = cms.OutputModule("PoolOutputModule" - , process.EWK_WMuNuEventContent - , dropMetaDataForDroppedData = cms.untracked.bool(True) - , SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('EWK_WMuNuSkimPath') - ) - , dataset = cms.untracked.PSet( - filterName = cms.untracked.string('EWKWMunuSkim') - , dataTier = cms.untracked.string('USER') - ) - , fileName = cms.untracked.string('EWK_WMuNu_SubSkim.root') -) - -# End path -process.outpath = cms.EndPath(process.EWK_WMuNuSkimOutputModule) diff --git a/ElectroWeakAnalysis/Skimming/test/EWK_WZSkim.py b/ElectroWeakAnalysis/Skimming/test/EWK_WZSkim.py deleted file mode 100755 index 92c16afb57a21..0000000000000 --- a/ElectroWeakAnalysis/Skimming/test/EWK_WZSkim.py +++ /dev/null @@ -1,120 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("EWKWZSkim") - -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) -process.options.FailPath = cms.untracked.vstring('ProductNotFound') - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:/scratch2/users/fabozzi/spring10/wmn/24BF0D12-DF46-DF11-BA71-001D0968F2F6.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1000) ) - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('START36_V8::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - -# HLT filter -import HLTrigger.HLTfilters.hltHighLevel_cfi -process.EWK_MuHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() -process.EWK_MuHLTFilter.HLTPaths = ["HLT_Mu9"] - -# Muon candidates filters -process.goodMuons = cms.EDFilter("MuonSelector", - src = cms.InputTag("muons"), - cut = cms.string('pt > 20 && abs(eta)<2.4 && isGlobalMuon = 1 && isTrackerMuon = 1 && isolationR03().sumPt<3.0'), - filter = cms.bool(True) -) - -# dxy filter on good muons -process.dxyFilteredMuons = cms.EDFilter("MuonSelector", - src = cms.InputTag("goodMuons"), - cut = cms.string('abs(innerTrack().dxy)<1.0'), - filter = cms.bool(True) -) - -# Z->mumu candidates -process.dimuons = cms.EDProducer("CandViewShallowCloneCombiner", - checkCharge = cms.bool(True), - cut = cms.string('mass > 60'), - decay = cms.string("dxyFilteredMuons@+ dxyFilteredMuons@-") -) - -# Z filters -process.dimuonsFilter = cms.EDFilter("CandViewCountFilter", - src = cms.InputTag("dimuons"), - minNumber = cms.uint32(1) -) - -# WMuNu candidates -process.load("ElectroWeakAnalysis.WMuNu.wmunusProducer_cfi") -# WMuNu candidates selectors -process.load("ElectroWeakAnalysis.WMuNu.WMuNuSelection_cff") - -process.seltcMet.JetTag = cms.untracked.InputTag("ak5CaloJets") -process.seltcMet.TrigTag = cms.untracked.InputTag("TriggerResults::HLT") -process.seltcMet.IsCombinedIso = cms.untracked.bool(True) -process.seltcMet.IsoCut03 = cms.untracked.double(0.15) - -process.selpfMet.JetTag = cms.untracked.InputTag("ak5CaloJets") -process.selpfMet.TrigTag = cms.untracked.InputTag("TriggerResults::HLT") -process.selpfMet.IsCombinedIso = cms.untracked.bool(True) -process.selpfMet.IsoCut03 = cms.untracked.double(0.15) - -# Skim paths -process.EWK_dimuonsPath = cms.Path( - process.EWK_MuHLTFilter * - process.goodMuons * - process.dxyFilteredMuons * - process.dimuons * - process.dimuonsFilter - ) - -process.EWK_tcMetWMuNusPath = cms.Path( - process.EWK_MuHLTFilter * - process.tcMetWMuNus * - process.seltcMet -) - -process.EWK_pfMetWMuNusPath = cms.Path( - process.EWK_MuHLTFilter * - process.pfMetWMuNus * - process.selpfMet -) - -# Output module configuration -from Configuration.EventContent.EventContent_cff import * -EWK_WZSkimEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -EWK_WZSkimEventContent.outputCommands.extend(FEVTEventContent.outputCommands) - -EWK_WZSkimEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - 'EWK_dimuonsPath', - 'EWK_tcMetWMuNusPath', - 'EWK_pfMetWMuNusPath') - ) -) - -process.EWK_WZSkimOutputModule = cms.OutputModule("PoolOutputModule", - EWK_WZSkimEventContent, - EWK_WZSkimEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('EWKWZSkim'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('EWK_WZSkim_SD_Mu.root') -) - -process.outpath = cms.EndPath(process.EWK_WZSkimOutputModule) - - diff --git a/ElectroWeakAnalysis/Skimming/test/EWK_ZMuMuSubskim.py b/ElectroWeakAnalysis/Skimming/test/EWK_ZMuMuSubskim.py deleted file mode 100755 index 609b1de566de8..0000000000000 --- a/ElectroWeakAnalysis/Skimming/test/EWK_ZMuMuSubskim.py +++ /dev/null @@ -1,38 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("TestZMuMuSubskim") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:/scratch2/users/fabozzi/spring10/zmm/38262142-DF46-DF11-8238-0030487C6A90.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1000) ) - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -#process.GlobalTag.globaltag = cms.string('START37_V1A::All') -process.GlobalTag.globaltag = cms.string('MC_3XY_V26::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - -############ -## no MC truth and on data -process.load("ElectroWeakAnalysis.Skimming.zMuMu_SubskimPaths_cff") - -# Output module configuration -process.load("ElectroWeakAnalysis.Skimming.zMuMuSubskimOutputModule_cfi") -process.zMuMuSubskimOutputModule.fileName = 'testZMuMuSubskim.root' - -############ -# MC truth matching sequence -#process.load("ElectroWeakAnalysis.Skimming.zMuMu_SubskimPathsWithMCTruth_cff") -#process.zMuMuSubskimOutputModule.outputCommands.extend(process.mcEventContent.outputCommands) -############ - -process.outpath = cms.EndPath(process.zMuMuSubskimOutputModule) - - diff --git a/ElectroWeakAnalysis/Skimming/test/dimuonsSkim.py b/ElectroWeakAnalysis/Skimming/test/dimuonsSkim.py deleted file mode 100755 index 4b0d8a46ec0ed..0000000000000 --- a/ElectroWeakAnalysis/Skimming/test/dimuonsSkim.py +++ /dev/null @@ -1,29 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("TestDimuonReco") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:/scratch2/users/fabozzi/spring10/zmm/38262142-DF46-DF11-8238-0030487C6A90.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100) ) - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('START3X_V26::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - -process.load("ElectroWeakAnalysis.Skimming.dimuons_SkimPaths_cff") - -# Output module configuration -process.load("ElectroWeakAnalysis.Skimming.dimuonsOutputModule_cfi") -process.dimuonsOutputModule.fileName = 'file:testDimuonSkim.root' - -process.outpath = cms.EndPath(process.dimuonsOutputModule) - - diff --git a/ElectroWeakAnalysis/Utilities/BuildFile.xml b/ElectroWeakAnalysis/Utilities/BuildFile.xml deleted file mode 100644 index bb6b2517605c7..0000000000000 --- a/ElectroWeakAnalysis/Utilities/BuildFile.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/ElectroWeakAnalysis/Utilities/README b/ElectroWeakAnalysis/Utilities/README deleted file mode 100644 index 83b3231b463bc..0000000000000 --- a/ElectroWeakAnalysis/Utilities/README +++ /dev/null @@ -1,229 +0,0 @@ ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -UTILITIES in ElectroWeakAnalysis/Utilities: ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -IMPORTANT BEFORE COMPILATION/LINK: From the 330 series on, full LHAPDF libraries are -shipped with CMSSW. However, the default libraries used in the release are always -the "light" ones, which are very slow for PDF reweighting. In order to run fast, -you should execute: - 1) scram setup lhapdffull - 2) touch $CMSSW_BASE/src/ElectroWeakAnalysis/Utilities/BuildFile.xml - 3) cmsenv - 4) scram b - -If you prefer to use your own LHAPDF library and files, assumed to be installed -under /usr/local, then do: - 1) Edit the file $CMSSW_BASE/config/toolbox/$SCRAM_ARCH/tools/selected/lhapdf.xml - 2.a) In that file, change the default for LHAPDF_BASE to "/usr/local" - 2.b) Change also the field "version" in order to match your insalled version - 3) scram setup lhapdf (and check that environment variables point to /usr/local/...) - 4) touch $CMSSW_BASE/src/ElectroWeakAnalysis/Utilities/BuildFile.xml - 5) cmsenv - 6) scram b - -src/PdfWeightProducer.cc -=========================== -- Writes into the data structure a std::vector containing the LHAPDF weights - PDF_user(i)/PDF__in_generated_sample for each event, where - PDF_user(i) corresponds to the PDF set chosen by the user in the configuration file - and i runs over the total number of members in the set. These weights can be - easily used later to assign systematics. Example of usage: - - # Produce PDF weights (maximum is 3) - process.pdfWeights = cms.EDProducer("PdfWeightProducer", - # Fix POWHEG if buggy (this PDF set will also appear on output, - # so only two more PDF sets can be added in PdfSetNames if not "") - #FixPOWHEG = cms.untracked.string("cteq66.LHgrid"), - GenTag = cms.untracked.InputTag("genParticles"), - PdfInfoTag = cms.untracked.InputTag("generator"), - PdfSetNames = cms.untracked.vstring( - "cteq66.LHgrid" - , "MRST2006nnlo.LHgrid" - , "NNPDF10_100.LHgrid" - ) - ) - -- A typical application is the determination of the PDF systematics. This is - implemented in "src/PdfSystematicsAnalyzer.cc". This analyzer counts the - processed events using PDF re-weighting, and assigns systematic - uncertainties on the rate and on the acceptance according to the recipe - described in hep-ph/0605240. Usage: - - # Collect uncertainties for rate and acceptance - process.pdfSystematics = cms.EDFilter("PdfSystematicsAnalyzer", - SelectorPath = cms.untracked.string('pdfana'), # put here the selection path - PdfWeightTags = cms.untracked.VInputTag( - "pdfWeights:cteq66" - , "pdfWeights:MRST2006nnlo" - , "pdfWeights:NNPDF10" - ) - ) - NOTE: no underscores can be written in a CMSSW product, so NNPDF products will - not keep the last suffix from the original name ("_100" missing in this case). - -- A test example for these utilities is "test/PdfSystematicsAnalyzer.py". There, - one counts re-weighted events before and after selection, which gives immediate - access to the determination of PDF uncertainties on rate and acceptance for the - given process under study. - - -src/ISRWeightProducer.cc (IN PROGRESS) -============================ -- Writes into the data structure a product containing the event weight ("double") - to be applied to obtain an estimate of variations due to a modification of the - Z (or W) pt spectrum at the generator level. The input weights as a function - of the boson Pt are proovided via vectors in the configuration file. - Example of usage: - - # Produce event weights according to generated boson Pt - # Example corresponds to approximate weights to study - # systematic effects due to ISR uncertainties (Z boson) - process.isrWeight = cms.EDProducer("ISRWeightProducer", - GenTag = cms.untracked.InputTag("genParticles"), - ISRBinEdges = cms.untracked.vdouble( - 0., 1., 2., 3., 4., 5., 6., 7., 8., 9. - , 10., 11., 12., 13., 14., 15., 16., 17., 18., 19. - , 20., 21., 22., 23., 24., 25., 26., 27., 28., 29. - , 30., 31., 32., 33., 34., 35., 36., 37., 38., 39. - , 40., 41., 42., 43., 44., 45., 46., 47., 48., 49. - , 999999. - ), - PtWeights = cms.untracked.vdouble( - 0.800665, 0.822121, 0.851249, 0.868285, 0.878733 - , 0.953853, 0.928108, 0.982021, 1.00659 , 1.00648 - , 1.03218 , 1.04924 , 1.03621 , 1.08743 , 1.01951 - , 1.10519 , 0.984263, 1.04853 , 1.06724 , 1.10183 - , 1.0503 , 1.13162 , 1.03837 , 1.12936 , 0.999173 - , 1.01453 , 1.11435 , 1.10545 , 1.07199 , 1.04542 - , 1.00828 , 1.0822 , 1.09667 , 1.16144 , 1.13906 - , 1.27974 , 1.14936 , 1.23235 , 1.06667 , 1.06363 - , 1.14225 , 1.22955 , 1.12674 , 1.03944 , 1.04639 - , 1.13667 , 1.20493 , 1.09349 , 1.2107 , 1.21073 - ) - ) - -- This weight information can be processed via the Analyzer - "src/SimpleSystematicsAnalyzer.cc". A test example is - "test/SimpleSystematicsAnalyzer.py". - -src/WeakEffectsWeightProducer.cc -==================================== -- Writes into the data structure a product containing the event weight ("double") -to take into account Weak effects in Drell-Yan production when using PYTHIA. It -corrects two weak effects: a) effects included in rhof_effective, b) Sudakov-terms -relevant at very high invariant mass. - Example of usage: - process.weakWeight = cms.EDProducer("WeakEffectsWeightProducer", - GenParticlesTag = cms.untracked.InputTag("genParticles"), - RhoParameter = cms.untracked.double(1.004) - ) - -src/FSRWeightProducer.cc (IN PROGRESS) -====================================== -- Writes into the data structure a product containing the event weight ("double") - for estimating uncertainties due to missing final state QED radiation terms in - PYTHIA for W->l nu and Z->ll. It produces the procuct of two factor: - a) Factor to go from soft-collinear approach to exact O(alpha) - (from hep-ph/0303260, only sizable for W, and small in general) - b) Factor to recover missing NLO QED terms - (using alpha(pt**2) instead of alpha(0)) - Example of usage: - - process.fsrWeight = cms.EDProducer("FSRWeightProducer", - GenTag = cms.untracked.InputTag("genParticles"), - ) - -- This weight information can be processed via the Analyzer - "src/SimpleSystematicsAnalyzer.cc". A test example is - "test/SimpleSystematicsAnalyzer.py". - - -src/ISRGammaWeightProducer.cc (IN PROGRESS) -=========================================== -- Writes into the data structure a product containing the event weight ("double") - for estimating uncertainties due to missing initial state QED radiation terms in - PYTHIA for W->l nu and Z->ll. It assumes PYTHIA6 as input. The logic is taken - from hep-ph/9812455, which is the one used for QCD matrix-element reweighting - in W/Z inclusive production. PYTHIA8 should already include this QED ISR - reweighting. - Example of usage: - - process.isrGammaWeight = cms.EDProducer("ISRGammaWeightProducer", - GenTag = cms.untracked.InputTag("genParticles"), - ) - -- This weight information can be processed via the Analyzer - "src/SimpleSystematicsAnalyzer.cc". A test example is - "test/SimpleSystematicsAnalyzer.py". - -src/DistortedMuonProducer.cc -============================ - -- Writes into the data structure a new reco::Muon collection distorted by - smearing and efficiency effects. This new collection can be easily used as - a realistic Monte Carlo prediction for the latest steps of the analysis. - The input distortions are provided as a function of pseudorapidity via - vectors in the configuration file. To include momentum distortions properly, - we perform a previous matching between reconstructed and generated muons - using standard CMSSW matching utilities. - -- An example showing how to use this code is given in "test/distortedMuons.py". The - relevant lines in the configuration file are: - - process.genMatchMap = cms.EDFilter("MCTruthDeltaRMatcherNew", - src = cms.InputTag("muons"), - matched = cms.InputTag("genParticles"), - distMin = cms.double(0.15), - matchPDGId = cms.vint32(13) - ) - - process.distortedMuons = cms.EDFilter("DistortedMuonProducer", - MuonTag = cms.untracked.InputTag("muons"), - GenMatchTag = cms.untracked.InputTag("genMatchMap"), - EtaBinEdges = cms.untracked.vdouble(-2.1,2.1), # one more entry than next vectors - ShiftOnOneOverPt = cms.untracked.vdouble(1.e-4), #in [1/GeV] - RelativeShiftOnPt = cms.untracked.vdouble(0.), - UncertaintyOnOneOverPt = cms.untracked.vdouble(2.e-4), #in [1/GeV] - RelativeUncertaintyOnPt = cms.untracked.vdouble(1.e-3), - EfficiencyRatioOverMC = cms.untracked.vdouble(0.99) - ) - -src/DistortedMuonProducerFromDB.cc (under development) -================================== - -- Writes into the data structure a new reco::Muon collection distorted by - scale and smearing effects. This new collection can be easily used as a - realistic Monte Carlo prediction for the latest steps of the analysis. - We perform a previous matching between reconstructed and generated muons - using standard CMSSW matching utilities. The input distortions are taken - from the database. Efficiency effects may be added in the future. - -- An example showing how to use this code is given in "test/distortedMuonsFromDB.py". - The relevant lines in the configuration file, in addition to the specific - PoolDBESSources, are: - - process.distortedMuons = cms.EDFilter("DistortedMuonProducerFromDB", - MuonTag = cms.untracked.InputTag("muons"), - GenMatchTag = cms.untracked.InputTag("genMatchMap"), - DBScaleLabel = cms.untracked.string(''), - DBDataResolutionLabel = cms.untracked.string('MuScleFit_Resol_OctoberExercise_EWK_InnerTrack_WithLabel'), - DBMCResolutionLabel = cms.untracked.string('MuScleFit_Resol_OctoberExercise_SherpaIdealMC_WithLabel'), - ) - -src/DistortedMETProducer.cc -=========================== - -- Writes into the data structure a new reco::MET collection after distortion. - This new collection can be easily used as a realistic Monte Carlo - prediction for (muon-uncorrected) MET at the latest steps of the analysis. - At present, only the simplest possibility of scaling MET and sum(ET) by - a global scale factor is implemented, and no matching with GenMET has been - tried yet. Example of usage: - - process.distortedMET = cms.EDFilter("DistortedMETProducer", - MetTag = cms.untracked.InputTag("met"), - MetScaleShift = cms.untracked.double(0.1) - ) - -- A simple example showing how to use this code is given in "test/distortedMET.py". - diff --git a/ElectroWeakAnalysis/Utilities/python/Averages_36Invpb.py b/ElectroWeakAnalysis/Utilities/python/Averages_36Invpb.py deleted file mode 100644 index 2b5cfccfc4f56..0000000000000 --- a/ElectroWeakAnalysis/Utilities/python/Averages_36Invpb.py +++ /dev/null @@ -1,347 +0,0 @@ -#!/usr/bin/env python -###################################################################################### -## Program to average CMS W and Z cross sections for muons and electrons. -## Run it as: "python Averages_3Invpb.py" -## -## Notes: -## -## a) For 3 inverse pb statistics, all likelihood profiles are already -## Gaussian to a good approximation. Therefore naive combination procedures -## work. -## b) OPTION allows to average electron and muon measurements in two ways: -## -## OPTION = "StatisticalAverage" does the average according to statistical -## uncertainties. Pros: This average is more rigurous from a statistical point -## of view, since some likelihood ansatz is necessary to interpret systematics. -## Cons: This procedure leads to larger "overall" uncertainties at the level of the -## final combination since, for similar statistical uncertainties, measurements -## with larger systematics weight the same as measurements with lower systematics. -## -## OPTION = ""StatisticalPlusSystematicAverage" does the average according -## to the overall uncertainties. It assumes that systematic ucnertainties -## can be treated in a naive Gaussian way and so added quadratically to -## statistical uncertainties in the usual way. Correlations are taken into -## account. A covariancia matrix "V" is built, and the solution X corresponds -## to the minimization of the expression " sum_{ij}(X-x_i V_{ij}^{-1} (X-x_j)", -## where x_i are the electron and muon measurements. Pros: this leads to minimal -## uncertainties for the overall uncertainty (if stat. and syst. are added in -## quadrature, as people usually do). Cons: most of the systematic soruces are -## not statistical in origin, so giving them a 68% CL Gaussian meaning is -## an ad-hoc assumption. -## -###################################################################################### - -from __future__ import division -from __future__ import print_function -from math import * - -OPTION = "StatisticalPlusSystematicAverage" -#OPTION= "StatisticalAverage" - -print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") -print(">>>>> METHOD TO AVERAGE MUONS AND ELECTRONS is: '%s'" % (OPTION)) -print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n") - -###################################################################################### -### INPUTS FOLLOW (they are not the final version) -###################################################################################### - -# Relative luminosity error -relSysLumi = 11e-2 - -# Electron inputs -Wenu = 10.221 -absStatWenu = 0.034 -absCorrWenu = 0.144 # theory uncertainty -absUncWenu = 0.309 -print("\nWenu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wenu, absStatWenu, absUncWenu, absCorrWenu, Wenu*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tUncorrelated with muons: %.2f %%" % (100./Wenu*absUncWenu)) -print("\tTheory: %.2f %%" % (100./Wenu*absCorrWenu)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wenu*sqrt(absUncWenu**2+absCorrWenu**2))) - -Wplusenu = 6.045 -absStatWplusenu = 0.026 -absCorrWplusenu = 0.097 -absUncWplusenu = 0.187 -print("\nWplusenu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wplusenu, absStatWplusenu, absUncWplusenu, absCorrWplusenu, Wplusenu*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tUncorrelated with muons: %.2f %%" % (100./Wplusenu*absUncWplusenu)) -print("\tTheory: %.2f %%" % (100./Wplusenu*absCorrWplusenu)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wplusenu*sqrt(absUncWplusenu**2+absCorrWplusenu**2))) - -Wminusenu = 4.196 -absStatWminusenu = 0.022 -absCorrWminusenu = 0.073 # theory uncertainty -absUncWminusenu = 0.130 -print("\nWminusenu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wminusenu, absStatWminusenu, absUncWminusenu, absCorrWminusenu, Wminusenu*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tUncorrelated with muons: %.2f %%" % (100./Wminusenu*absUncWminusenu)) -print("\tTheory: %.2f %%" % (100./Wminusenu*absCorrWminusenu)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wminusenu*sqrt(absUncWminusenu**2+absCorrWminusenu**2))) - -Zee = 0.9892 -absStatZee = 0.0109 -absCorrZee = 0.01715 # theory uncertainty -absUncZee = 0.0446 -print("\nZee cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Zee, absStatZee, absUncZee, absCorrZee, Zee*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tUncorrelated with muons: %.2f %%" % (100./Zee*absUncZee)) -print("\tTheory: %.2f %%" % (100./Zee*absCorrZee)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Zee*sqrt(absUncZee**2+absCorrZee**2))) - -Ratioenu = Wplusenu/Wminusenu -absStatRatioenu = 0.0097 -absCorrRatioenu = 0.0306 # theory uncertainty -absUncRatioenu = 0.0453 -print("\nRatioenu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.)" % (Ratioenu, absStatRatioenu, absUncRatioenu, absCorrRatioenu)) -print(" Systematics >>>>>>>") -print("\tUncorrelated with muons: %.2f %%" % (100./Ratioenu*absUncRatioenu)) -print("\tTheory: %.2f %%" % (100./Ratioenu*absCorrRatioenu)) -print("\tTOTAL: %.2f %%\n" % (100./Ratioenu*sqrt(absUncRatioenu**2+absCorrRatioenu**2))) - -WZe = Wenu/Zee -absStatWZe = 0.1190 -absCorrWZe = 0.1413 # theory uncertainty -absUncWZe = 0.2329 -print("\nWZe cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.)" % (WZe, absStatWZe, absUncWZe, absCorrWZe)) -print(" Systematics >>>>>>>") -print("\tUncorrelated with muons: %.2f %%" % (100./WZe*absUncWZe)) -print("\tTheory: %.2f %%" % (100./WZe*absCorrWZe)) -print("\tTOTAL: %.2f %%\n" % (100./WZe*sqrt(absUncWZe**2+absCorrWZe**2))) - -# Muon inputs -Wmunu = 10.03115 -absStatWmunu = 0.02690 -absCorrWmunu = Wmunu*sqrt(0.018**2+0.015**2) # theory uncertainty -relUncFit = 0.4e-2 -relUncPreTrig = 0.5e-2 -relUncSysEff = 0.4e-2 -relUncEff = sqrt(relUncFit**2+relUncPreTrig**2+relUncSysEff**2) -relUncMomRes = 0.1e-2 -relUncRecoil = 0.4e-2 -relUncMCStat = 1.4e-3/sqrt(2) # ?? -relUncBkg = 1.5e-2 #sqrt(2.0e-2**2+0.2e-2**2) -absUncWmunu=Wmunu*sqrt(relUncEff**2+relUncMomRes**2+relUncRecoil**2+relUncMCStat**2+relUncBkg**2) -absUncWmunu=Wmunu*sqrt(relUncEff**2+relUncMomRes**2+relUncRecoil**2+relUncBkg**2) -print("\nWmunu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wmunu, absStatWmunu, absUncWmunu, absCorrWmunu, Wmunu*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tEfficiency(Zfit,Pretrig,Z->W): %.2f %%" % (100*relUncEff)) -print("\tMomentum scale/resolution: %.2f %%" % (100*relUncMomRes)) -print("\tBackground subtraction: %.2f %%" % (100*relUncBkg)) -print("\tSignal Recoil modeling: %.2f %%" % (100*relUncRecoil)) -print("\tMC statistics (acceptance): %.2f %%" % (100*relUncMCStat)) -print("\tTheory: %.2f %%" % (100./Wmunu*absCorrWmunu)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wmunu*sqrt(absUncWmunu**2+absCorrWmunu**2))) - -Wplusmunu = 5.93821 -absStatWplusmunu = 0.02033 -absCorrWplusmunu = Wplusmunu*sqrt(0.013**2+0.014**2) # theory uncertainty -relUncFit = 1.3e-2 -relUncPreTrig = 0.5e-2 -relUncSysEff = 0.4e-2 -relUncEff = sqrt(relUncFit**2+relUncPreTrig**2+relUncSysEff**2) -relUncMomRes = 0.1e-2 -relUncRecoil = 0.4e-2 -relUncMCStat = 1.4e-3 -relUncBkg = 1.7e-2 #sqrt(1.7e-2**2+0.2e-2**2) -absUncWplusmunu=Wplusmunu*sqrt(relUncEff**2+relUncMomRes**2+relUncRecoil**2+relUncMCStat**2+relUncBkg**2) -print("\nWplusmunu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wplusmunu, absStatWplusmunu, absUncWplusmunu, absCorrWplusmunu, Wplusmunu*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tEfficiency(Zfit,Pretrig,Z->W): %.2f %%" % (100*relUncEff)) -print("\tMomentum scale/resolution: %.2f %%" % (100*relUncMomRes)) -print("\tBackground subtraction: %.2f %%" % (100*relUncBkg)) -print("\tSignal Recoil modeling: %.2f %%" % (100*relUncRecoil)) -print("\tMC statistics (acceptance): %.2f %%" % (100*relUncMCStat)) -print("\tTheory: %.2f %%" % (100./Wplusmunu*absCorrWplusmunu)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wplusmunu*sqrt(absUncWplusmunu**2+absCorrWplusmunu**2))) - -Wminusmunu = 4.09297 -absStatWminusmunu = 0.01662 -absCorrWminusmunu = Wminusmunu*sqrt(0.019**2+0.013**2) # theory uncertainty -relUncFit = 1.3e-2 -relUncPreTrig = 0.5e-2 -relUncSysEff = 0.4e-2 -relUncEff = sqrt(relUncFit**2+relUncPreTrig**2+relUncSysEff**2) -relUncMomRes = 0.1e-2 -relUncRecoil = 0.4e-2 -relUncMCStat = 1.4e-3 -relUncBkg = 2.3e-2 #sqrt(2.3e-2**2+0.2e-2**2) -absUncWminusmunu=Wminusmunu*sqrt(relUncEff**2+relUncMomRes**2+relUncRecoil**2+relUncMCStat**2+relUncBkg**2) -print("\nWminusmunu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wminusmunu, absStatWminusmunu, absUncWminusmunu, absCorrWminusmunu, Wminusmunu*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tEfficiency(Zfit,Pretrig,Z->W): %.2f %%" % (100*relUncEff)) -print("\tMomentum scale/resolution: %.2f %%" % (100*relUncMomRes)) -print("\tBackground subtraction: %.2f %%" % (100*relUncBkg)) -print("\tSignal Recoil modeling: %.2f %%" % (100*relUncRecoil)) -print("\tMC statistics (acceptance): %.2f %%" % (100*relUncMCStat)) -print("\tTheory: %.2f %%" % (100./Wminusmunu*absCorrWminusmunu)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wminusmunu*sqrt(absUncWminusmunu**2+absCorrWminusmunu**2))) - -Zmumu = 0.961 # 0.893*1.025*1.01 -absStatZmumu = 0.008 # 0.030*1.025*1.01 -absCorrZmumu = Zmumu*sqrt(0.012**2+0.016**2) # theory uncertainty -relUncEff = 0.5e-2 # pre-triggering -#relUncFit= 0.28e-2 -relUncMomRes = 0.35e-2 -relUncTrigChanges = 0.1e-2 -relUncBkg = 0.28e-2 #sqrt(relUncFit**2+0.2e-2**2) -absUncZmumu=Zmumu*sqrt(relUncEff**2+relUncMomRes**2+relUncBkg**2+relUncTrigChanges**2) -print("\nZmumu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Zmumu, absStatZmumu, absUncZmumu, absCorrZmumu, Zmumu*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tEfficiency(Pretriggering): %.2f %%" % (100*relUncEff)) -print("\tMomentum scale/resolution: %.2f %%" % (100*relUncMomRes)) -print("\tBackground subtraction/fit: %.2f %%" % (100*relUncBkg)) -print("\tMC statistics (acceptance): %.2f %%" % (100*relUncMCStat)) -print("\tTheory: %.2f %%" % (100./Zmumu*absCorrZmumu)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Zmumu*sqrt(absUncZmumu**2+absCorrZmumu**2))) - -Ratiomunu = Wplusmunu/Wminusmunu -absStatRatiomunu = 0.0078 -absCorrRatiomunu = Ratiomunu*sqrt(0.021**2+0.0129**2) # theory uncertainty -relUncEff = 2.8e-2 -relUncMomRes = 0.3e-2 -relUncMCStat = sqrt(2)*1.4e-3 -relUncBkg = 0.7e-2 -absUncRatiomunu = Ratiomunu*sqrt(relUncEff**2+relUncMomRes**2+relUncMCStat**2+relUncBkg**2) -print("\nRatiomunu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.)" % (Ratiomunu, absStatRatiomunu, absUncRatiomunu, absCorrRatiomunu)) -print(" Systematics >>>>>>>") -print("\tEfficiency(W+ versus W- tests): %.2f %%" % (100*relUncEff)) -print("\tMomentum scale/resolution: %.2f %%" % (100*relUncMomRes)) -print("\tBackground subtraction: %.2f %%" % (100*relUncBkg)) -print("\tMC statistics (acceptance): %.2f %%" % (100*relUncMCStat)) -print("\tTheory: %.2f %%" % (100./Ratiomunu*absCorrRatiomunu)) -print("\tTOTAL: %.2f %%\n" % (100./Ratiomunu*sqrt(absUncRatiomunu**2+absCorrRatiomunu**2))) - -WZmu = Wmunu/Zmumu -absStatWZmu = WZmu*sqrt((absStatWmunu/Wmunu)**2+(absStatZmumu/Zmumu)**2) -absCorrWZmu = WZmu*sqrt(0.011**2+0.0135**2) # theory uncertainty -relUncEffW = 1.3e-2 -relUncMomResW = 0.3e-2 -relUncMomResZ = 0.2e-2 -relSysSubtract = sqrt(relUncEffW**2+relUncMomResW**2+relUncMomResZ**2) -relSysAdd = abs(relUncMomResW-relUncMomResZ) -absUncWZmu = WZmu*sqrt((absUncWmunu/Wmunu)**2 + (absUncZmumu/Zmumu)**2 - relSysSubtract**2 + relSysAdd**2) -print("\nWZmu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.)" % (WZmu, absStatWZmu, absUncWZmu, absCorrWZmu)) -print(" STATISTICAL UNCERTAINTY INCLUDES EFFICIENCY (via Zmumu fit)") -print(" Systematics >>>>>>>") -print("\tUncorrelated with electrons: %.2f %%" % (100./WZmu*absUncWZmu)) -print("\tTheory: %.2f %%" % (100./WZmu*absCorrWZmu)) -print("\tTOTAL: %.2f %%\n" % (100./WZmu*sqrt(absUncWZmu**2+absCorrWZmu**2))) - -###################################################################################### -### Utility functions -###################################################################################### - -### -def vbtfXSectionCheck(title, xsection, exsection, sysUnc, sysCor, relSysLumi): - absSysLumi = xsection*relSysLumi - print("VBTF inputs: %s = %.4f +- %.4f (stat.) +- %.4f (exp.) +- %.4f (the.) +- %.4f (lumi) [nb]" % (title, xsection, exsection, sysUnc, sysCor, absSysLumi)) - -### -def vbtfXSectionAverage(title, xsection1, xsection2, exsection1, exsection2, sysUnc1, sysUnc2, sysCor1, sysCor2, relSysLumi): - if OPTION== "StatisticalAverage": - V11 = exsection1**2 - V22 = exsection2**2 - V12 = 0 - else: - V11 = exsection1**2+sysUnc1**2+sysCor1**2 - V22 = exsection2**2+sysUnc2**2+sysCor2**2 - V12 = sysCor1*sysCor2 - - a1 = (V22-V12)/(V11+V22-2*V12) - a2 = (V11-V12)/(V11+V22-2*V12) - average = a1*xsection1 + a2*xsection2 - errstat = sqrt(a1**2*exsection1**2+a2**2*exsection2**2) - errunco = sqrt(a1**2*sysUnc1**2 + a2**2*sysUnc2**2) - errtheo = sqrt(a1**2*sysCor1**2 + a2**2*sysCor2**2 + 2*a1*a2*sysCor1*sysCor2) - errsyst = sqrt(errunco**2+errtheo**2) - - print("VBTF average: %s = %.4f +- %.4f (stat.) [nb]" % (title, average, errstat)) - - absSysLumi = average*relSysLumi - print("\tVBTF systematics (1): +- %.4f (exp) +- %.4f (the) +- %.4f (lumi) [nb]" % (errunco, errtheo, absSysLumi)) - print("\tVBTF systematics (2): +- %.4f (exp+the) +- %.4f (lumi) [nb]" % (errsyst, absSysLumi)) - -### -def vbtfRatioCheck(title, ratio, absStat, sysUnc, sysCor): - print("VBTF inputs: %s = %.4f +- %.4f (stat.) +- %.4f (exp.) +- %.4f (the.)" % (title, ratio, absStat, sysUnc, sysCor)) - -### -def vbtfRatioAverage(title, ratio1, ratio2, eratio1, eratio2, sysUnc1, sysUnc2, sysCor1, sysCor2): - if OPTION== "StatisticalAverage": - V11 = eratio1**2 - V22 = eratio2**2 - V12 = 0 - else: - V11 = eratio1**2+(sysUnc1**2+sysCor1**2) - V22 = eratio2**2+(sysUnc2**2+sysCor2**2) - V12 = sysCor1*sysCor2 - - a1 = (V22-V12)/(V11+V22-2*V12) - a2 = (V11-V12)/(V11+V22-2*V12) - average = a1*ratio1 + a2*ratio2 - errstat = sqrt(a1**2*eratio1**2+a2**2*eratio2**2) - errunco = sqrt(a1**2*sysUnc1**2 + a2**2*sysUnc2**2) - errtheo = sqrt(a1**2*sysCor1**2 + a2**2*sysCor2**2 + 2*a1*a2*sysCor1*sysCor2) - errsyst = sqrt(errunco**2+errtheo**2) - - print("VBTF average: %s = %.4f +- %.4f (stat.)" % (title, average, errstat)) - - print("\tVBTF systematics (1): +- %.4f (exp) +- %.4f (the)" % (errunco, errtheo)) - print("\tVBTF systematics (2): +- %.4f (exp+the)" % (errsyst)) - -###################################################################################### -### MAIN CALLS ... -###################################################################################### - -############################################################# -########## Wlnu total cross section -############################################################# -print("\n>>>>>>>>>>>>>>>") -vbtfXSectionCheck("W -> munu cross section",Wmunu,absStatWmunu,absUncWmunu,absCorrWmunu,relSysLumi) -vbtfXSectionCheck("W -> enu cross section",Wenu,absStatWenu,absUncWenu,absCorrWenu,relSysLumi) -vbtfXSectionAverage("W -> lnu cross section",Wmunu,Wenu,absStatWmunu,absStatWenu,absUncWmunu,absUncWenu,absCorrWmunu,absCorrWenu,relSysLumi) - -############################################################# -########## Wplus -> lnu cross section -############################################################# -print("\n>>>>>>>>>>>>>>>") -vbtfXSectionCheck("W+ -> munu cross section",Wplusmunu,absStatWplusmunu,absUncWplusmunu,absCorrWplusmunu,relSysLumi) -vbtfXSectionCheck("W+ -> enu cross section",Wplusenu,absStatWplusenu,absUncWplusenu,absCorrWplusenu,relSysLumi) -vbtfXSectionAverage("W+ -> lnu cross section",Wplusmunu,Wplusenu,absStatWplusmunu,absStatWplusenu,absUncWplusmunu,absUncWplusenu,absCorrWplusmunu,absCorrWplusenu,relSysLumi) - -############################################################# -########## Wminus -> lnu cross section -############################################################# -print("\n>>>>>>>>>>>>>>>") -vbtfXSectionCheck("W- -> munu cross section",Wminusmunu,absStatWminusmunu,absUncWminusmunu,absCorrWminusmunu,relSysLumi) -vbtfXSectionCheck("W- -> enu cross section",Wminusenu,absStatWminusenu,absUncWminusenu,absCorrWminusenu,relSysLumi) -vbtfXSectionAverage("W- -> lnu cross section",Wminusmunu,Wminusenu,absStatWminusmunu,absStatWminusenu,absUncWminusmunu,absUncWminusenu,absCorrWminusmunu,absCorrWminusenu,relSysLumi) - -############################################################# -########## W+/W- ratio -############################################################# -# -print("\n>>>>>>>>>>>>>>>") -vbtfRatioCheck("W+ / W- cross section ratio, muon channel",Ratiomunu,absStatRatiomunu,absUncRatiomunu,absCorrRatiomunu) -vbtfRatioCheck("W+ / W- cross section ratio, electron channel",Ratioenu,absStatRatioenu,absUncRatioenu,absCorrRatioenu) -vbtfRatioAverage("W+ / W- cross section ratio",Ratiomunu,Ratioenu,absStatRatiomunu,absStatRatioenu,absUncRatiomunu,absUncRatioenu,absCorrRatiomunu,absCorrRatioenu) - -############################################################# -########## Z > ll cross section (in 60 < Mll < 120 GeV) -############################################################# -# -print("\n>>>>>>>>>>>>>>>") -vbtfXSectionCheck("Z -> mumu cross section",Zmumu,absStatZmumu,absUncZmumu,absCorrZmumu,relSysLumi) -vbtfXSectionCheck("Z -> ee cross section",Zee,absStatZee,absUncZee,absCorrZee,relSysLumi) -vbtfXSectionAverage("Z -> ll cross section",Zmumu,Zee,absStatZmumu,absStatZee,absUncZmumu,absUncZee,absCorrZmumu,absCorrZee,relSysLumi) - -############################################################# -########## W/Z ratio -############################################################# -# -print("\n>>>>>>>>>>>>>>>") -vbtfRatioCheck("W/Z ratio muons",WZmu,absStatWZmu,absUncWZmu,absCorrWZmu) -vbtfRatioCheck("W/Z ratio electrons",WZe,absStatWZe,absUncWZe,absCorrWZe) -vbtfRatioAverage("W/Z ratio",WZmu,WZe,absStatWZmu,absStatWZe,absUncWZmu,absUncWZe,absCorrWZmu,absCorrWZe) diff --git a/ElectroWeakAnalysis/Utilities/python/Averages_3Invpb.py b/ElectroWeakAnalysis/Utilities/python/Averages_3Invpb.py deleted file mode 100644 index d2e1b4973fe52..0000000000000 --- a/ElectroWeakAnalysis/Utilities/python/Averages_3Invpb.py +++ /dev/null @@ -1,346 +0,0 @@ -#!/usr/bin/env python -###################################################################################### -## Program to average CMS W and Z cross sections for muons and electrons. -## Run it as: "python Averages_3Invpb.py" -## -## Notes: -## -## a) For 3 inverse pb statistics, all likelihood profiles are already -## Gaussian to a good approximation. Therefore naive combination procedures -## work. -## b) OPTION allows to average electron and muon measurements in two ways: -## -## OPTION = "StatisticalAverage" does the average according to statistical -## uncertainties. Pros: This average is more rigurous from a statistical point -## of view, since some likelihood ansatz is necessary to interpret systematics. -## Cons: This procedure leads to larger "overall" uncertainties at the level of the -## final combination since, for similar statistical uncertainties, measurements -## with larger systematics weight the same as measurements with lower systematics. -## -## OPTION = ""StatisticalPlusSystematicAverage" does the average according -## to the overall uncertainties. It assumes that systematic ucnertainties -## can be treated in a naive Gaussian way and so added quadratically to -## statistical uncertainties in the usual way. Correlations are taken into -## account. A covariancia matrix "V" is built, and the solution X corresponds -## to the minimization of the expression " sum_{ij}(X-x_i V_{ij}^{-1} (X-x_j)", -## where x_i are the electron and muon measurements. Pros: this leads to minimal -## uncertainties for the overall uncertainty (if stat. and syst. are added in -## quadrature, as people usually do). Cons: most of the systematic soruces are -## not statistical in origin, so giving them a 68% CL Gaussian meaning is -## an ad-hoc assumption. -## -###################################################################################### - -from __future__ import division -from __future__ import print_function -from math import * - -OPTION = "StatisticalPlusSystematicAverage" -#OPTION= "StatisticalAverage" - -print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") -print(">>>>> METHOD TO AVERAGE MUONS AND ELECTRONS is: '%s'" % (OPTION)) -print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n") - -###################################################################################### -### INPUTS FOLLOW (they are not the final version) -###################################################################################### - -# Relative luminosity error -relSysLumi = 11e-2 - -# Electron inputs -Wenu = 10.1447 -absStatWenu = 0.1123 -absCorrWenu = Wenu*sqrt(0.008**2+0.0116**2) # theory uncertainty -absUncWenu = 0.5031 -print("\nWenu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wenu, absStatWenu, absUncWenu, absCorrWenu, Wenu*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tUncorrelated with muons: %.2f %%" % (100./Wenu*absUncWenu)) -print("\tTheory: %.2f %%" % (100./Wenu*absCorrWenu)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wenu*sqrt(absUncWenu**2+absCorrWenu**2))) - -Wplusenu = 5.9349 -absStatWplusenu = 0.0793 -absCorrWplusenu = Wplusenu*sqrt(0.009**2+0.0133**2) # theory uncertainty -absUncWplusenu = 0.3446 -print("\nWplusenu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wplusenu, absStatWplusenu, absUncWplusenu, absCorrWplusenu, Wplusenu*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tUncorrelated with muons: %.2f %%" % (100./Wplusenu*absUncWplusenu)) -print("\tTheory: %.2f %%" % (100./Wplusenu*absCorrWplusenu)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wplusenu*sqrt(absUncWplusenu**2+absCorrWplusenu**2))) - -Wminusenu = 4.1401 -absStatWminusenu = 0.0690 -absCorrWminusenu = Wminusenu*sqrt(0.015**2+0.0090**2) # theory uncertainty -absUncWminusenu = 0.2432 -print("\nWminusenu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wminusenu, absStatWminusenu, absUncWminusenu, absCorrWminusenu, Wminusenu*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tUncorrelated with muons: %.2f %%" % (100./Wminusenu*absUncWminusenu)) -print("\tTheory: %.2f %%" % (100./Wminusenu*absCorrWminusenu)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wminusenu*sqrt(absUncWminusenu**2+absCorrWminusenu**2))) - -Zee = 0.9595 -absStatZee = 0.0370 -absCorrZee = Zee*sqrt(0.011**2+0.0134**2) # theory uncertainty -absUncZee = 0.0565 -print("\nZee cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Zee, absStatZee, absUncZee, absCorrZee, Zee*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tUncorrelated with muons: %.2f %%" % (100./Zee*absUncZee)) -print("\tTheory: %.2f %%" % (100./Zee*absCorrZee)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Zee*sqrt(absUncZee**2+absCorrZee**2))) - -Ratioenu = Wplusenu/Wminusenu -absStatRatioenu = 0.02883 -absCorrRatioenu = Ratioenu*sqrt(0.017**2+0.0127**2) # theory uncertainty -absUncRatioenu = 0.076 -print("\nRatioenu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.)" % (Ratioenu, absStatRatioenu, absUncRatioenu, absCorrRatioenu)) -print(" Systematics >>>>>>>") -print("\tUncorrelated with muons: %.2f %%" % (100./Ratioenu*absUncRatioenu)) -print("\tTheory: %.2f %%" % (100./Ratioenu*absCorrRatioenu)) -print("\tTOTAL: %.2f %%\n" % (100./Ratioenu*sqrt(absUncRatioenu**2+absCorrRatioenu**2))) - -WZe = Wenu/Zee -absStatWZe = 0.425 -absCorrWZe = WZe*sqrt(0.009**2+0.0103**2) # theory uncertainty -absUncWZe = 0.524 -print("\nWZe cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.)" % (WZe, absStatWZe, absUncWZe, absCorrWZe)) -print(" Systematics >>>>>>>") -print("\tUncorrelated with muons: %.2f %%" % (100./WZe*absUncWZe)) -print("\tTheory: %.2f %%" % (100./WZe*absCorrWZe)) -print("\tTOTAL: %.2f %%\n" % (100./WZe*sqrt(absUncWZe**2+absCorrWZe**2))) - -# Muon inputs -Wmunu = 9.922 -absStatWmunu = 0.090 -absCorrWmunu = Wmunu*sqrt(0.011**2+0.0136**2) # theory uncertainty -relUncFit = 1.3e-2 -relUncPreTrig = 0.5e-2 -relUncSysEff = 0.5e-2 -relUncEff = sqrt(relUncFit**2+relUncPreTrig**2+relUncSysEff**2) -relUncMomRes = 0.3e-2 -relUncRecoil = 0.4e-2 -relUncMCStat = 1.4e-3/sqrt(2) -relUncBkg = sqrt(2.0e-2**2+0.2e-2**2) -absUncWmunu=Wmunu*sqrt(relUncEff**2+relUncMomRes**2+relUncRecoil**2+relUncMCStat**2+relUncBkg**2) -print("\nWmunu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wmunu, absStatWmunu, absUncWmunu, absCorrWmunu, Wmunu*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tEfficiency(Zfit,Pretrig,Z->W): %.2f %%" % (100*relUncEff)) -print("\tMomentum scale/resolution: %.2f %%" % (100*relUncMomRes)) -print("\tBackground subtraction: %.2f %%" % (100*relUncBkg)) -print("\tSignal Recoil modeling: %.2f %%" % (100*relUncRecoil)) -print("\tMC statistics (acceptance): %.2f %%" % (100*relUncMCStat)) -print("\tTheory: %.2f %%" % (100./Wmunu*absCorrWmunu)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wmunu*sqrt(absUncWmunu**2+absCorrWmunu**2))) - -Wplusmunu = 5.844 -absStatWplusmunu = 0.069 -absCorrWplusmunu = Wplusmunu*sqrt(0.013**2+0.0142**2) # theory uncertainty -relUncFit = 1.3e-2 -relUncPreTrig = 0.5e-2 -relUncSysEff = 0.5e-2 -relUncEff = sqrt(relUncFit**2+relUncPreTrig**2+relUncSysEff**2) -relUncMomRes = 0.3e-2 -relUncRecoil = 0.4e-2 -relUncMCStat = 1.4e-3 -relUncBkg = sqrt(1.7e-2**2+0.2e-2**2) -absUncWplusmunu=Wplusmunu*sqrt(relUncEff**2+relUncMomRes**2+relUncRecoil**2+relUncMCStat**2+relUncBkg**2) -print("\nWplusmunu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wplusmunu, absStatWplusmunu, absUncWplusmunu, absCorrWplusmunu, Wplusmunu*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tEfficiency(Zfit,Pretrig,Z->W): %.2f %%" % (100*relUncEff)) -print("\tMomentum scale/resolution: %.2f %%" % (100*relUncMomRes)) -print("\tBackground subtraction: %.2f %%" % (100*relUncBkg)) -print("\tSignal Recoil modeling: %.2f %%" % (100*relUncRecoil)) -print("\tMC statistics (acceptance): %.2f %%" % (100*relUncMCStat)) -print("\tTheory: %.2f %%" % (100./Wplusmunu*absCorrWplusmunu)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wplusmunu*sqrt(absUncWplusmunu**2+absCorrWplusmunu**2))) - -Wminusmunu = 4.078 -absStatWminusmunu = 0.057 -absCorrWminusmunu = Wminusmunu*sqrt(0.019**2+0.0126**2) # theory uncertainty -relUncFit = 1.3e-2 -relUncPreTrig = 0.5e-2 -relUncSysEff = 0.5e-2 -relUncEff = sqrt(relUncFit**2+relUncPreTrig**2+relUncSysEff**2) -relUncMomRes = 0.3e-2 -relUncRecoil = 0.4e-2 -relUncMCStat = 1.4e-3 -relUncBkg = sqrt(2.3e-2**2+0.2e-2**2) -absUncWminusmunu=Wminusmunu*sqrt(relUncEff**2+relUncMomRes**2+relUncRecoil**2+relUncMCStat**2+relUncBkg**2) -print("\nWminusmunu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wminusmunu, absStatWminusmunu, absUncWminusmunu, absCorrWminusmunu, Wminusmunu*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tEfficiency(Zfit,Pretrig,Z->W): %.2f %%" % (100*relUncEff)) -print("\tMomentum scale/resolution: %.2f %%" % (100*relUncMomRes)) -print("\tBackground subtraction: %.2f %%" % (100*relUncBkg)) -print("\tSignal Recoil modeling: %.2f %%" % (100*relUncRecoil)) -print("\tMC statistics (acceptance): %.2f %%" % (100*relUncMCStat)) -print("\tTheory: %.2f %%" % (100./Wminusmunu*absCorrWminusmunu)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wminusmunu*sqrt(absUncWminusmunu**2+absCorrWminusmunu**2))) - -Zmumu = 0.924 # 0.893*1.025*1.01 -absStatZmumu = 0.031 # 0.030*1.025*1.01 -absCorrZmumu = Zmumu*sqrt(0.012**2+0.0158**2) # theory uncertainty -relUncEff = 0.5e-2 # pre-triggering -relUncFit= 1.0e-2 -relUncMomRes = 0.2e-2 -relUncMCStat = 0.4e-2 -relUncBkg = sqrt(relUncFit**2+0.2e-2**2) -absUncZmumu=Zmumu*sqrt(relUncEff**2+relUncMomRes**2+relUncBkg**2+relUncMCStat**2) -print("\nZmumu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Zmumu, absStatZmumu, absUncZmumu, absCorrZmumu, Zmumu*relSysLumi)) -print(" Systematics >>>>>>>") -print("\tEfficiency(Pretriggering): %.2f %%" % (100*relUncEff)) -print("\tMomentum scale/resolution: %.2f %%" % (100*relUncMomRes)) -print("\tBackground subtraction/fit: %.2f %%" % (100*relUncBkg)) -print("\tMC statistics (acceptance): %.2f %%" % (100*relUncMCStat)) -print("\tTheory: %.2f %%" % (100./Zmumu*absCorrZmumu)) -print("\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Zmumu*sqrt(absUncZmumu**2+absCorrZmumu**2))) - -Ratiomunu = Wplusmunu/Wminusmunu -absStatRatiomunu = 0.026 -absCorrRatiomunu = Ratiomunu*sqrt(0.021**2+0.0119**2) # theory uncertainty -relUncEff = 2.8e-2 -relUncMomRes = 0.3e-2 -relUncMCStat = sqrt(2)*1.4e-3 -relUncBkg = 0.7e-2 -absUncRatiomunu = Ratiomunu*sqrt(relUncEff**2+relUncMomRes**2+relUncMCStat**2+relUncBkg**2) -print("\nRatiomunu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.)" % (Ratiomunu, absStatRatiomunu, absUncRatiomunu, absCorrRatiomunu)) -print(" Systematics >>>>>>>") -print("\tEfficiency(W+ versus W- tests): %.2f %%" % (100*relUncEff)) -print("\tMomentum scale/resolution: %.2f %%" % (100*relUncMomRes)) -print("\tBackground subtraction: %.2f %%" % (100*relUncBkg)) -print("\tMC statistics (acceptance): %.2f %%" % (100*relUncMCStat)) -print("\tTheory: %.2f %%" % (100./Ratiomunu*absCorrRatiomunu)) -print("\tTOTAL: %.2f %%\n" % (100./Ratiomunu*sqrt(absUncRatiomunu**2+absCorrRatiomunu**2))) - -WZmu = Wmunu/Zmumu -absStatWZmu = 0.3675 -absCorrWZmu = WZmu*sqrt(0.011**2+0.0135**2) # theory uncertainty -relUncEffW = 1.3e-2 -relUncMomResW = 0.3e-2 -relUncMomResZ = 0.2e-2 -relSysSubtract = sqrt(relUncEffW**2+relUncMomResW**2+relUncMomResZ**2) -relSysAdd = abs(relUncMomResW-relUncMomResZ) -absUncWZmu = WZmu*sqrt((absUncWmunu/Wmunu)**2 + (absUncZmumu/Zmumu)**2 - relSysSubtract**2 + relSysAdd**2) -print("\nWZmu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.)" % (WZmu, absStatWZmu, absUncWZmu, absCorrWZmu)) -print(" STATISTICAL UNCERTAINTY INCLUDES EFFICIENCY (via Zmumu fit)") -print(" Systematics >>>>>>>") -print("\tUncorrelated with electrons: %.2f %%" % (100./WZmu*absUncWZmu)) -print("\tTheory: %.2f %%" % (100./WZmu*absCorrWZmu)) -print("\tTOTAL: %.2f %%\n" % (100./WZmu*sqrt(absUncWZmu**2+absCorrWZmu**2))) - -###################################################################################### -### Utility functions -###################################################################################### - -### -def vbtfXSectionCheck(title, xsection, exsection, sysUnc, sysCor, relSysLumi): - absSysLumi = xsection*relSysLumi - print("VBTF inputs: %s = %.4f +- %.4f (stat.) +- %.4f (exp.) +- %.4f (the.) +- %.4f (lumi) [nb]" % (title, xsection, exsection, sysUnc, sysCor, absSysLumi)) - -### -def vbtfXSectionAverage(title, xsection1, xsection2, exsection1, exsection2, sysUnc1, sysUnc2, sysCor1, sysCor2, relSysLumi): - if OPTION== "StatisticalAverage": - V11 = exsection1**2 - V22 = exsection2**2 - V12 = 0 - else: - V11 = exsection1**2+sysUnc1**2+sysCor1**2 - V22 = exsection2**2+sysUnc2**2+sysCor2**2 - V12 = sysCor1*sysCor2 - - a1 = (V22-V12)/(V11+V22-2*V12) - a2 = (V11-V12)/(V11+V22-2*V12) - average = a1*xsection1 + a2*xsection2 - errstat = sqrt(a1**2*exsection1**2+a2**2*exsection2**2) - errunco = sqrt(a1**2*sysUnc1**2 + a2**2*sysUnc2**2) - errtheo = sqrt(a1**2*sysCor1**2 + a2**2*sysCor2**2 + 2*a1*a2*sysCor1*sysCor2) - errsyst = sqrt(errunco**2+errtheo**2) - - print("VBTF average: %s = %.4f +- %.4f (stat.) [nb]" % (title, average, errstat)) - - absSysLumi = average*relSysLumi - print("\tVBTF systematics (1): +- %.4f (exp) +- %.4f (the) +- %.4f (lumi) [nb]" % (errunco, errtheo, absSysLumi)) - print("\tVBTF systematics (2): +- %.4f (exp+the) +- %.4f (lumi) [nb]" % (errsyst, absSysLumi)) - -### -def vbtfRatioCheck(title, ratio, absStat, sysUnc, sysCor): - print("VBTF inputs: %s = %.4f +- %.4f (stat.) +- %.4f (exp.) +- %.4f (the.)" % (title, ratio, absStat, sysUnc, sysCor)) - -### -def vbtfRatioAverage(title, ratio1, ratio2, eratio1, eratio2, sysUnc1, sysUnc2, sysCor1, sysCor2): - if OPTION== "StatisticalAverage": - V11 = eratio1**2 - V22 = eratio2**2 - V12 = 0 - else: - V11 = eratio1**2+(sysUnc1**2+sysCor1**2) - V22 = eratio2**2+(sysUnc2**2+sysCor2**2) - V12 = sysCor1*sysCor2 - - a1 = (V22-V12)/(V11+V22-2*V12) - a2 = (V11-V12)/(V11+V22-2*V12) - average = a1*ratio1 + a2*ratio2 - errstat = sqrt(a1**2*eratio1**2+a2**2*eratio2**2) - errunco = sqrt(a1**2*sysUnc1**2 + a2**2*sysUnc2**2) - errtheo = sqrt(a1**2*sysCor1**2 + a2**2*sysCor2**2 + 2*a1*a2*sysCor1*sysCor2) - errsyst = sqrt(errunco**2+errtheo**2) - - print("VBTF average: %s = %.4f +- %.4f (stat.)" % (title, average, errstat)) - - print("\tVBTF systematics (1): +- %.4f (exp) +- %.4f (the)" % (errunco, errtheo)) - print("\tVBTF systematics (2): +- %.4f (exp+the)" % (errsyst)) - -###################################################################################### -### MAIN CALLS ... -###################################################################################### - -############################################################# -########## Wlnu total cross section -############################################################# -print("\n>>>>>>>>>>>>>>>") -vbtfXSectionCheck("W -> munu cross section",Wmunu,absStatWmunu,absUncWmunu,absCorrWmunu,relSysLumi) -vbtfXSectionCheck("W -> enu cross section",Wenu,absStatWenu,absUncWenu,absCorrWenu,relSysLumi) -vbtfXSectionAverage("W -> lnu cross section",Wmunu,Wenu,absStatWmunu,absStatWenu,absUncWmunu,absUncWenu,absCorrWmunu,absCorrWenu,relSysLumi) - -############################################################# -########## Wplus -> lnu cross section -############################################################# -print("\n>>>>>>>>>>>>>>>") -vbtfXSectionCheck("W+ -> munu cross section",Wplusmunu,absStatWplusmunu,absUncWplusmunu,absCorrWplusmunu,relSysLumi) -vbtfXSectionCheck("W+ -> enu cross section",Wplusenu,absStatWplusenu,absUncWplusenu,absCorrWplusenu,relSysLumi) -vbtfXSectionAverage("W+ -> lnu cross section",Wplusmunu,Wplusenu,absStatWplusmunu,absStatWplusenu,absUncWplusmunu,absUncWplusenu,absCorrWplusmunu,absCorrWplusenu,relSysLumi) - -############################################################# -########## Wminus -> lnu cross section -############################################################# -print("\n>>>>>>>>>>>>>>>") -vbtfXSectionCheck("W- -> munu cross section",Wminusmunu,absStatWminusmunu,absUncWminusmunu,absCorrWminusmunu,relSysLumi) -vbtfXSectionCheck("W- -> enu cross section",Wminusenu,absStatWminusenu,absUncWminusenu,absCorrWminusenu,relSysLumi) -vbtfXSectionAverage("W- -> lnu cross section",Wminusmunu,Wminusenu,absStatWminusmunu,absStatWminusenu,absUncWminusmunu,absUncWminusenu,absCorrWminusmunu,absCorrWminusenu,relSysLumi) - -############################################################# -########## W+/W- ratio -############################################################# -# -print("\n>>>>>>>>>>>>>>>") -vbtfRatioCheck("W+ / W- cross section ratio, muon channel",Ratiomunu,absStatRatiomunu,absUncRatiomunu,absCorrRatiomunu) -vbtfRatioCheck("W+ / W- cross section ratio, electron channel",Ratioenu,absStatRatioenu,absUncRatioenu,absCorrRatioenu) -vbtfRatioAverage("W+ / W- cross section ratio",Ratiomunu,Ratioenu,absStatRatiomunu,absStatRatioenu,absUncRatiomunu,absUncRatioenu,absCorrRatiomunu,absCorrRatioenu) - -############################################################# -########## Z > ll cross section (in 60 < Mll < 120 GeV) -############################################################# -# -print("\n>>>>>>>>>>>>>>>") -vbtfXSectionCheck("Z -> mumu cross section",Zmumu,absStatZmumu,absUncZmumu,absCorrZmumu,relSysLumi) -vbtfXSectionCheck("Z -> ee cross section",Zee,absStatZee,absUncZee,absCorrZee,relSysLumi) -vbtfXSectionAverage("Z -> ll cross section",Zmumu,Zee,absStatZmumu,absStatZee,absUncZmumu,absUncZee,absCorrZmumu,absCorrZee,relSysLumi) - -############################################################# -########## W/Z ratio -############################################################# -# -print("\n>>>>>>>>>>>>>>>") -vbtfRatioCheck("W/Z ratio muons",WZmu,absStatWZmu,absUncWZmu,absCorrWZmu) -vbtfRatioCheck("W/Z ratio electrons",WZe,absStatWZe,absUncWZe,absCorrWZe) -vbtfRatioAverage("W/Z ratio",WZmu,WZe,absStatWZmu,absStatWZe,absUncWZmu,absUncWZe,absCorrWZmu,absCorrWZe) diff --git a/ElectroWeakAnalysis/Utilities/python/MetdistMuonCorrections_cff.py b/ElectroWeakAnalysis/Utilities/python/MetdistMuonCorrections_cff.py deleted file mode 100644 index 5725c70f868a5..0000000000000 --- a/ElectroWeakAnalysis/Utilities/python/MetdistMuonCorrections_cff.py +++ /dev/null @@ -1,11 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from TrackingTools.TrackAssociator.default_cfi import * -from TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff import * - -distMetGlobalMuons = cms.EDProducer("MuonMET", - metTypeInputTag = cms.InputTag("CaloMET"), - uncorMETInputTag = cms.InputTag("met"), - muonsInputTag = cms.InputTag("distortedMuons"), - muonMETDepositValueMapInputTag = cms.InputTag("distmuonMETValueMapProducer","muCorrData","") -) diff --git a/ElectroWeakAnalysis/Utilities/python/distMuonMETValueMapProducer_cff.py b/ElectroWeakAnalysis/Utilities/python/distMuonMETValueMapProducer_cff.py deleted file mode 100644 index 8d1c4efc1358f..0000000000000 --- a/ElectroWeakAnalysis/Utilities/python/distMuonMETValueMapProducer_cff.py +++ /dev/null @@ -1,27 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from TrackingTools.TrackAssociator.default_cfi import * -from TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff import * - -distmuonMETValueMapProducer = cms.EDProducer("MuonMETValueMapProducer", - TrackAssociatorParameterBlock, - muonInputTag = cms.InputTag("distortedMuons"), - beamSpotInputTag = cms.InputTag("offlineBeamSpot"), - useTrackAssociatorPositions = cms.bool(True), - useRecHits = cms.bool(False), #if True, will use deposits in 3x3 recHits - useHO = cms.bool(False), #if True, will correct for deposits in HO - isAlsoTkMu = cms.bool(True), #does the mu have to be a tracker mu? - towerEtThreshold = cms.double(0.3), #default MET calculated using towers with Et > 0.5 GeV only - minPt = cms.double(10.0),#min global Mu Pt is 10 GeV - maxEta = cms.double(2.4), #max global |Eta| is 2.4 - maxNormChi2 = cms.double(10.0),#max global chi2/ndof - maxd0 = cms.double(0.2), #max global d0 - minnHits = cms.int32(11), #minimum # of si hits - minnValidStaHits = cms.int32(1) #minimum # of valid hits in the muon system used in the global muon fit -) -distmuonMETValueMapProducer.TrackAssociatorParameters.useEcal = False -distmuonMETValueMapProducer.TrackAssociatorParameters.useHcal = False -distmuonMETValueMapProducer.TrackAssociatorParameters.useHO = False -distmuonMETValueMapProducer.TrackAssociatorParameters.useCalo = True -distmuonMETValueMapProducer.TrackAssociatorParameters.useMuon = False -distmuonMETValueMapProducer.TrackAssociatorParameters.truthMatch = False diff --git a/ElectroWeakAnalysis/Utilities/python/distMuonTCMETValueMapProducer_cff.py b/ElectroWeakAnalysis/Utilities/python/distMuonTCMETValueMapProducer_cff.py deleted file mode 100644 index a3ecb0461e22e..0000000000000 --- a/ElectroWeakAnalysis/Utilities/python/distMuonTCMETValueMapProducer_cff.py +++ /dev/null @@ -1,26 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -distmuonTCMETValueMapProducer = cms.EDProducer("MuonTCMETValueMapProducer", - muonInputTag = cms.InputTag("distortedMuons"), - beamSpotInputTag = cms.InputTag("offlineBeamSpot"), - rf_type = cms.int32(1), - pt_min = cms.double(1.), - pt_max = cms.double(100.), - eta_max = cms.double(2.65), - chi2_max = cms.double(5), - nhits_min = cms.double(6), - d0_max = cms.double(0.1), - ptErr_max = cms.double(0.2), - track_quality = cms.vint32(2), - track_algos = cms.vstring(), - d0_muon = cms.double(0.2), - pt_muon = cms.double(10), - eta_muon = cms.double(2.4), - chi2_muon = cms.double(10), - nhits_muon = cms.double(11), - global_muon = cms.bool(True), - tracker_muon = cms.bool(True), - deltaR_muon = cms.double(0.05), - useCaloMuons = cms.bool(False), - muonMinValidStaHits = cms.int32(1) -) diff --git a/ElectroWeakAnalysis/Utilities/python/distPFMET_cfi.py b/ElectroWeakAnalysis/Utilities/python/distPFMET_cfi.py deleted file mode 100644 index 314c19a193a6d..0000000000000 --- a/ElectroWeakAnalysis/Utilities/python/distPFMET_cfi.py +++ /dev/null @@ -1,18 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# File: PFMET.cff -# Author: R. Cavanaugh -# Date: 28.10.2008 -# -# Form uncorrected Missing ET from Particle Flow and store into event as a MET -# product - -from RecoMET.METProducers.METSigParams_cfi import * - -distpfMet = cms.EDProducer("PFMETProducer", - parameters = METSignificance_params, - src = cms.InputTag("distortedPFCand"), - alias = cms.string('PFMET'), - globalThreshold = cms.double(0.0), - calculateSignificance = cms.bool(True) - ) diff --git a/ElectroWeakAnalysis/Utilities/python/distTCMET_cfi.py b/ElectroWeakAnalysis/Utilities/python/distTCMET_cfi.py deleted file mode 100644 index d940e1494ded0..0000000000000 --- a/ElectroWeakAnalysis/Utilities/python/distTCMET_cfi.py +++ /dev/null @@ -1,49 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# File: TCMET.cff -# Author: R. Remington & F. Golf -# Date: 11.14.2008 -# -# Form Track Corrected MET - -disttcMet = cms.EDProducer("TCMETProducer", - alias = cms.string('TCMET'), - electronInputTag = cms.InputTag("gsfElectrons"), - muonInputTag = cms.InputTag("distortedMuons"), - trackInputTag = cms.InputTag("generalTracks"), - metInputTag = cms.InputTag("met"), - beamSpotInputTag = cms.InputTag("offlineBeamSpot"), - vertexInputTag = cms.InputTag("offlinePrimaryVertices"), - muonDepValueMap = cms.InputTag("distmuonMETValueMapProducer" , "muCorrData"), - tcmetDepValueMap = cms.InputTag("distmuonTCMETValueMapProducer", "muCorrData"), - pt_min = cms.double(1.0), - pt_max = cms.double(100.), - eta_max = cms.double(2.65), - chi2_max = cms.double(5), - nhits_min = cms.double(6), - d0_max = cms.double(0.1), - ptErr_max = cms.double(0.2), - track_quality = cms.vint32(2), - track_algos = cms.vstring(), - isCosmics = cms.bool(False), - rf_type = cms.int32(1), - correctShowerTracks = cms.bool(False), - usePvtxd0 = cms.bool(False), - nMinOuterHits = cms.int32(2), - usedeltaRRejection = cms.bool(False), - deltaRShower = cms.double(0.01), - checkTrackPropagation = cms.bool(False), - radius = cms.double(130.), - zdist = cms.double(314.), - corner = cms.double(1.479), - d0cuta = cms.double(0.015), - d0cutb = cms.double(0.5), - maxd0cut = cms.double(0.3), - chi2_tight_max = cms.double(3.0), - nhits_tight_min = cms.double(11), - ptErr_tight_max = cms.double(0.1), - trackAlgos = cms.vstring("undefAlgorithm", "ctf", "rs", "cosmics", "initialStep", "lowPtTripletStep", "pixelPairStep", "detachedTripletStep"), -) - - - diff --git a/ElectroWeakAnalysis/Utilities/python/fitWZ.py b/ElectroWeakAnalysis/Utilities/python/fitWZ.py deleted file mode 100755 index 66a17468c5fb4..0000000000000 --- a/ElectroWeakAnalysis/Utilities/python/fitWZ.py +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env python - -from __future__ import division -from __future__ import print_function -from math import * -from ROOT import * -from array import array - -gROOT.SetBatch(True) - -# Wmunu inputs -wxsection = 9.922 -ewxsection = 0.090 -zxsection = 0.924 -ezxsection = 0.031 -sysEff = 0.013 -corrZEff = -0.236 - -# FCN definition -def MyChi2 (npar, g, chi2, x, iflag): - # Inverse of (Zyield,sysEff) covariance matrix - s11 = 1./ezxsection**2/(1.-corrZEff**2) - s22 = 1./sysEff**2/(1.-corrZEff**2) - s12 = -corrZEff/(1.-corrZEff**2)/ezxsection/sysEff - - # Build chi2 - wxsFit = x[0]*x[1] - zxsFit = x[1] - effFit = x[2] - chi2[0] = (wxsFit*(1.+effFit)-wxsection)*(wxsFit*(1.+effFit)-wxsection)/ewxsection/ewxsection - chi2[0] += (zxsFit-zxsection)*(zxsFit-zxsection) *s11 - chi2[0] += effFit*effFit * s22 - chi2[0] += 2*(zxsFit-zxsection)*effFit * s12 - -# Minimation, main program -gMinuit = TMinuit() -gMinuit.SetPrintLevel(-1) -gMinuit.SetFCN(MyChi2) -arglist = array('d', 10*[0.]) -ier = Long(0) - -gMinuit.mnparm(0, "W/Z ratio Mu", 10.0, 1.e-3, 0, 0, ier) -gMinuit.mnparm(1, "Zsigma [nb] Mu", 1.0, 1.e-3, 0, 0, ier) -gMinuit.mnparm(2, "DeltaEffRel Mu", 0.0, 1.e-4, 0, 0, ier) - -arglist[0] = 1000.; arglist[1] = 0.1 -gMinuit.mnexcm("MINIMIZE", arglist, 2, ier) - -finalChi2 = 0.0 -gMinuit.mnprin(3,finalChi2) - -par0 = Double(0.0) -errpar0 = Double(0.0) -gMinuit.GetParameter(0,par0,errpar0) - -# Extract statistical uncertainty on W/Z including efficiency uncertainties -print("\n*** Statistical uncertainty on W/Z (including eff. unc.): %.4f" % (errpar0)) diff --git a/ElectroWeakAnalysis/Utilities/python/goldenWmnSelectionVBTF_cfi.py b/ElectroWeakAnalysis/Utilities/python/goldenWmnSelectionVBTF_cfi.py deleted file mode 100644 index 3e6fd92e82ec2..0000000000000 --- a/ElectroWeakAnalysis/Utilities/python/goldenWmnSelectionVBTF_cfi.py +++ /dev/null @@ -1,45 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Trigger requirements -import HLTrigger.HLTfilters.hltHighLevel_cfi -wmnHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() -wmnHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") -wmnHLTFilter.HLTPaths = ["HLT_Mu9", "HLT_Mu11", "HLT_Mu15"] -wmnHLTFilter.throw = cms.bool(False) - -# Cuts for each muon -goodMuonsForW = cms.EDFilter("MuonViewRefSelector", - src = cms.InputTag("muons"), - cut = cms.string('isGlobalMuon=1 && isTrackerMuon=1 && abs(eta)<2.1 && abs(globalTrack().dxy)<0.2 && pt>20. && globalTrack().normalizedChi2<10 && globalTrack().hitPattern().numberOfValidTrackerHits>10 && globalTrack().hitPattern().numberOfValidMuonHits>0 && globalTrack().hitPattern().numberOfValidPixelHits>0 && numberOfMatches>1 && (isolationR03().sumPt+isolationR03().emEt+isolationR03().hadEt)<0.15*pt'), - filter = cms.bool(True) -) - -# Cuts on wmn system -wmnCands = cms.EDProducer("CandViewShallowCloneCombiner", - checkCharge = cms.bool(False), - cut = cms.string('sqrt((daughter(0).pt+daughter(1).pt)*(daughter(0).pt+daughter(1).pt)-pt*pt)>50'), - decay = cms.string("goodMuonsForW pfMet") -) -wmnFilter = cms.EDFilter("CandViewCountFilter", - src = cms.InputTag("wmnCands"), - minNumber = cms.uint32(1) -) - -# Dimuons to be vetoed -goodMuonsForZ = cms.EDFilter("MuonViewRefSelector", - src = cms.InputTag("muons"), - cut = cms.string('isGlobalMuon=1 && pt>10.'), - filter = cms.bool(True) -) -dyFilter = cms.EDFilter("CandViewCountFilter", - src = cms.InputTag("goodMuonsForZ"), - minNumber = cms.uint32(2) -) - -# Path -goldenWmnSequence = cms.Sequence( - wmnHLTFilter * - goodMuonsForW * - wmnCands*wmnFilter * - goodMuonsForZ*~dyFilter -) diff --git a/ElectroWeakAnalysis/Utilities/python/goldenZmmSelectionLOOSE_cfi.py b/ElectroWeakAnalysis/Utilities/python/goldenZmmSelectionLOOSE_cfi.py deleted file mode 100644 index 64eb29f07f190..0000000000000 --- a/ElectroWeakAnalysis/Utilities/python/goldenZmmSelectionLOOSE_cfi.py +++ /dev/null @@ -1,42 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy - -# Uncomment to use trigger requirements -#import HLTrigger.HLTfilters.hltHighLevel_cfi -#zmmHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() -#zmmHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") -#zmmHLTFilter.HLTPaths = ["HLT_Mu9", "HLT_Mu11", "HLT_Mu15", "HLT_DoubleMu3"] -#zmmHLTFilter.throw = cms.bool(False) - -# Cuts for each muon -goodMuons1 = cms.EDFilter("MuonViewRefSelector", - src = cms.InputTag("muons"), - cut = cms.string('isGlobalMuon=1 && isTrackerMuon=1 && abs(eta)<2.1 && abs(globalTrack().dxy)<0.2 && pt>20. && globalTrack().normalizedChi2<10 && globalTrack().hitPattern().numberOfValidTrackerHits>10 && globalTrack().hitPattern().numberOfValidMuonHits>0 && globalTrack().hitPattern().numberOfValidPixelHits>0 && numberOfMatches>1 && (isolationR03().sumPt+isolationR03().emEt+isolationR03().hadEt)<0.15*pt'), - filter = cms.bool(True) -) - -# Cuts for each muon -goodMuons2 = cms.EDFilter("MuonViewRefSelector", - src = cms.InputTag("muons"), - cut = cms.string('isGlobalMuon=1 && pt>20. && abs(eta)<2.4 && abs(globalTrack().dxy)<1.0 && globalTrack().hitPattern().numberOfValidTrackerHits>6'), - filter = cms.bool(True) -) - -# Cuts on dimuon system -zmmCands = cms.EDProducer("CandViewShallowCloneCombiner", - checkCharge = cms.bool(False), - cut = cms.string('mass>60'), - decay = cms.string("goodMuons1 goodMuons2") -) -zmmFilter = cms.EDFilter("CandViewCountFilter", - src = cms.InputTag("zmmCands"), - minNumber = cms.uint32(1) -) - -# Selection sequence -goldenZmmSelectionSequence = cms.Sequence( - #zmmHLTFilter * - goodMuons1*goodMuons2 * - zmmCands*zmmFilter -) diff --git a/ElectroWeakAnalysis/Utilities/python/goldenZmmSelectionVBTF_cfi.py b/ElectroWeakAnalysis/Utilities/python/goldenZmmSelectionVBTF_cfi.py deleted file mode 100644 index cb5342062d9f1..0000000000000 --- a/ElectroWeakAnalysis/Utilities/python/goldenZmmSelectionVBTF_cfi.py +++ /dev/null @@ -1,35 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy - -# Trigger requirements -import HLTrigger.HLTfilters.hltHighLevel_cfi -zmmHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() -zmmHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") -zmmHLTFilter.HLTPaths = ["HLT_Mu9", "HLT_Mu11", "HLT_Mu15"] -zmmHLTFilter.throw = cms.bool(False) - -# Cuts for both muons -goodMuons = cms.EDFilter("MuonViewRefSelector", - src = cms.InputTag("muons"), - cut = cms.string('pt>20. && abs(eta)<2.1 && isGlobalMuon=1 && isTrackerMuon=1 && abs(globalTrack().dxy)<0.2 && globalTrack().normalizedChi2<10 && globalTrack().hitPattern().numberOfValidTrackerHits>10 && globalTrack().hitPattern().numberOfValidMuonHits>0 && globalTrack().hitPattern().numberOfValidPixelHits>0 && numberOfMatches>1 && (isolationR03().sumPt+isolationR03().emEt+isolationR03().hadEt)<0.15*pt'), - filter = cms.bool(True) -) - -# Cuts on dimuon system -zmmCands = cms.EDProducer("CandViewShallowCloneCombiner", - checkCharge = cms.bool(True), - cut = cms.string('mass>60 && mass<120 && charge=0'), - decay = cms.string("goodMuons@+ goodMuons@-") -) -zmmFilter = cms.EDFilter("CandViewCountFilter", - src = cms.InputTag("zmmCands"), - minNumber = cms.uint32(1) -) - -# Selection sequence -goldenZmmSelectionSequence = cms.Sequence( - zmmHLTFilter * - goodMuons * - zmmCands*zmmFilter -) diff --git a/ElectroWeakAnalysis/Utilities/src/DistortedMETProducer.cc b/ElectroWeakAnalysis/Utilities/src/DistortedMETProducer.cc deleted file mode 100644 index f0a30a9349487..0000000000000 --- a/ElectroWeakAnalysis/Utilities/src/DistortedMETProducer.cc +++ /dev/null @@ -1,81 +0,0 @@ -#include -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" - -#include "DataFormats/Common/interface/View.h" -#include "DataFormats/METReco/interface/MET.h" - -// -// class declaration -// -class DistortedMETProducer : public edm::EDProducer { -public: - explicit DistortedMETProducer(const edm::ParameterSet&); - ~DistortedMETProducer() override; - -private: - void beginJob() override; - void produce(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - edm::EDGetTokenT > metToken_; - double metScaleShift_; // relative shift (0. => no shift) -}; - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/METReco/interface/METFwd.h" - -///////////////////////////////////////////////////////////////////////////////////// -DistortedMETProducer::DistortedMETProducer(const edm::ParameterSet& pset) { - // What is being produced - produces >(); - - // Input products - metToken_ = - consumes >(pset.getUntrackedParameter("MetTag", edm::InputTag("met"))); - // Distortions in MET in Gev**{-1/2} - metScaleShift_ = pset.getUntrackedParameter("MetScaleShift", 1.e-3); -} - -///////////////////////////////////////////////////////////////////////////////////// -DistortedMETProducer::~DistortedMETProducer() {} - -///////////////////////////////////////////////////////////////////////////////////// -void DistortedMETProducer::beginJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void DistortedMETProducer::endJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void DistortedMETProducer::produce(edm::Event& ev, const edm::EventSetup&) { - if (ev.isRealData()) - return; - - // MET collection - edm::Handle > metCollection; - if (!ev.getByToken(metToken_, metCollection)) { - edm::LogError("") << ">>> MET collection does not exist !!!"; - return; - } - edm::RefToBase met = metCollection->refAt(0); - - std::unique_ptr newmetCollection(new reco::METCollection); - - double met_et = met->et() * (1. + metScaleShift_); - double sum_et = met->sumEt() * (1. + metScaleShift_); - double met_phi = met->phi(); - double met_ex = met_et * cos(met_phi); - double met_ey = met_et * sin(met_phi); - reco::Particle::LorentzVector met_p4(met_ex, met_ey, 0., met_et); - reco::Particle::Point met_vtx(0., 0., 0.); - reco::MET* newmet = new reco::MET(sum_et, met_p4, met_vtx); - - newmetCollection->push_back(*newmet); - - ev.put(std::move(newmetCollection)); -} - -DEFINE_FWK_MODULE(DistortedMETProducer); diff --git a/ElectroWeakAnalysis/Utilities/src/DistortedMuonProducer.cc b/ElectroWeakAnalysis/Utilities/src/DistortedMuonProducer.cc deleted file mode 100644 index 17d550474ef0c..0000000000000 --- a/ElectroWeakAnalysis/Utilities/src/DistortedMuonProducer.cc +++ /dev/null @@ -1,228 +0,0 @@ -#include -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" - -#include "DataFormats/Common/interface/View.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" - -#include "MuonAnalysis/MomentumScaleCalibration/interface/MomentumScaleCorrector.h" -#include "MuonAnalysis/MomentumScaleCalibration/interface/ResolutionFunction.h" - -// -// class declaration -// -class DistortedMuonProducer : public edm::EDProducer { -public: - explicit DistortedMuonProducer(const edm::ParameterSet&); - ~DistortedMuonProducer() override; - -private: - void beginJob() override; - void produce(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - edm::EDGetTokenT > muonToken_; - edm::EDGetTokenT genMatchMapToken_; - std::vector etaBinEdges_; - - std::vector shiftOnOneOverPt_; // in [1/GeV] - std::vector relativeShiftOnPt_; - std::vector uncertaintyOnOneOverPt_; // in [1/GeV] - std::vector relativeUncertaintyOnPt_; - - std::vector efficiencyRatioOverMC_; -}; - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/MuonReco/interface/MuonFwd.h" -#include "DataFormats/TrackReco/interface/Track.h" - -#include -#include - -///////////////////////////////////////////////////////////////////////////////////// -DistortedMuonProducer::DistortedMuonProducer(const edm::ParameterSet& pset) { - // What is being produced - produces >(); - - // Input products - muonToken_ = - consumes >(pset.getUntrackedParameter("MuonTag", edm::InputTag("muons"))); - genMatchMapToken_ = consumes( - pset.getUntrackedParameter("GenMatchMapTag", edm::InputTag("genMatchMap"))); - - // Eta edges - std::vector defEtaEdges; - defEtaEdges.push_back(-999999.); - defEtaEdges.push_back(999999.); - etaBinEdges_ = pset.getUntrackedParameter >("EtaBinEdges", defEtaEdges); - unsigned int ninputs_expected = etaBinEdges_.size() - 1; - - // Distortions in muon momentum - std::vector defDistortion; - defDistortion.push_back(0.); - - shiftOnOneOverPt_ = - pset.getUntrackedParameter >("ShiftOnOneOverPt", defDistortion); // in [1/GeV] - if (shiftOnOneOverPt_.size() == 1 && ninputs_expected > 1) { - for (unsigned int i = 1; i < ninputs_expected; i++) { - shiftOnOneOverPt_.push_back(shiftOnOneOverPt_[0]); - } - } - - relativeShiftOnPt_ = pset.getUntrackedParameter >("RelativeShiftOnPt", defDistortion); - if (relativeShiftOnPt_.size() == 1 && ninputs_expected > 1) { - for (unsigned int i = 1; i < ninputs_expected; i++) { - relativeShiftOnPt_.push_back(relativeShiftOnPt_[0]); - } - } - - uncertaintyOnOneOverPt_ = - pset.getUntrackedParameter >("UncertaintyOnOneOverPt", defDistortion); // in [1/GeV] - if (uncertaintyOnOneOverPt_.size() == 1 && ninputs_expected > 1) { - for (unsigned int i = 1; i < ninputs_expected; i++) { - uncertaintyOnOneOverPt_.push_back(uncertaintyOnOneOverPt_[0]); - } - } - - relativeUncertaintyOnPt_ = pset.getUntrackedParameter >("RelativeUncertaintyOnPt", defDistortion); - if (relativeUncertaintyOnPt_.size() == 1 && ninputs_expected > 1) { - for (unsigned int i = 1; i < ninputs_expected; i++) { - relativeUncertaintyOnPt_.push_back(relativeUncertaintyOnPt_[0]); - } - } - - // Data/MC efficiency ratios - std::vector defEfficiencyRatio; - defEfficiencyRatio.push_back(1.); - efficiencyRatioOverMC_ = - pset.getUntrackedParameter >("EfficiencyRatioOverMC", defEfficiencyRatio); - if (efficiencyRatioOverMC_.size() == 1 && ninputs_expected > 1) { - for (unsigned int i = 1; i < ninputs_expected; i++) { - efficiencyRatioOverMC_.push_back(efficiencyRatioOverMC_[0]); - } - } - - // Send a warning if there are inconsistencies in vector sizes !! - bool effWrong = efficiencyRatioOverMC_.size() != ninputs_expected; - bool momWrong = shiftOnOneOverPt_.size() != ninputs_expected || relativeShiftOnPt_.size() != ninputs_expected || - uncertaintyOnOneOverPt_.size() != ninputs_expected || - relativeUncertaintyOnPt_.size() != ninputs_expected; - if (effWrong and momWrong) { - edm::LogError("") - << "WARNING: DistortedMuonProducer : Size of some parameters do not match the EtaBinEdges vector!!"; - } -} - -///////////////////////////////////////////////////////////////////////////////////// -DistortedMuonProducer::~DistortedMuonProducer() {} - -///////////////////////////////////////////////////////////////////////////////////// -void DistortedMuonProducer::beginJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void DistortedMuonProducer::endJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void DistortedMuonProducer::produce(edm::Event& ev, const edm::EventSetup& iSetup) { - if (ev.isRealData()) - return; - - // Muon collection - edm::Handle > muonCollection; - if (!ev.getByToken(muonToken_, muonCollection)) { - edm::LogError("") << ">>> Muon collection does not exist !!!"; - return; - } - - edm::Handle genMatchMap; - if (!ev.getByToken(genMatchMapToken_, genMatchMap)) { - edm::LogError("") << ">>> Muon-GenParticle match map does not exist !!!"; - return; - } - - unsigned int muonCollectionSize = muonCollection->size(); - - std::unique_ptr newmuons(new reco::MuonCollection); - - for (unsigned int i = 0; i < muonCollectionSize; i++) { - edm::RefToBase mu = muonCollection->refAt(i); - - double ptgen = mu->pt(); - double etagen = mu->eta(); - reco::GenParticleRef gen = (*genMatchMap)[mu]; - if (!gen.isNull()) { - ptgen = gen->pt(); - etagen = gen->eta(); - LogTrace("") << ">>> Muon-GenParticle match found; ptmu= " << mu->pt() << ", ptgen= " << ptgen; - } else { - LogTrace("") << ">>> MUON-GENPARTICLE MATCH NOT FOUND!!!"; - } - - // Initialize parameters - double effRatio = 0.; - double shift1 = 0.; - double shift2 = 0.; - double sigma1 = 0.; - double sigma2 = 0.; - - // Find out which eta bin should be used - unsigned int nbins = etaBinEdges_.size() - 1; - unsigned int etaBin = nbins; - if (etagen > etaBinEdges_[0] && etagen < etaBinEdges_[nbins]) { - for (unsigned int j = 1; j <= nbins; ++j) { - if (etagen > etaBinEdges_[j]) - continue; - etaBin = j - 1; - break; - } - } - if (etaBin < nbins) { - LogTrace("") << ">>> etaBin: " << etaBin << ", for etagen =" << etagen; - } else { - // Muon is rejected if outside the considered eta range - LogTrace("") << ">>> Muon outside eta range: reject it; etagen = " << etagen; - continue; - } - - // Set shifts - shift1 = shiftOnOneOverPt_[etaBin]; - shift2 = relativeShiftOnPt_[etaBin]; - LogTrace("") << "\tshiftOnOneOverPt= " << shift1 * 100 << " [%]"; - LogTrace("") << "\trelativeShiftOnPt= " << shift2 * 100 << " [%]"; - - // Set resolutions - sigma1 = uncertaintyOnOneOverPt_[etaBin]; - sigma2 = relativeUncertaintyOnPt_[etaBin]; - LogTrace("") << "\tuncertaintyOnOneOverPt= " << sigma1 << " [1/GeV]"; - LogTrace("") << "\trelativeUncertaintyOnPt= " << sigma2 * 100 << " [%]"; - - // Set efficiency ratio - effRatio = efficiencyRatioOverMC_[etaBin]; - LogTrace("") << "\tefficiencyRatioOverMC= " << effRatio; - - // Reject muons according to efficiency ratio - double rndf = CLHEP::RandFlat::shoot(); - if (rndf > effRatio) - continue; - - // Gaussian Random numbers for smearing - double rndg1 = CLHEP::RandGauss::shoot(); - double rndg2 = CLHEP::RandGauss::shoot(); - - // New muon - double ptmu = mu->pt(); - ptmu += ptgen * (shift1 * ptgen + shift2 + sigma1 * rndg1 * ptgen + sigma2 * rndg2); - reco::Muon* newmu = mu->clone(); - newmu->setP4(reco::Particle::PolarLorentzVector(ptmu, mu->eta(), mu->phi(), mu->mass())); - newmuons->push_back(*newmu); - } - - ev.put(std::move(newmuons)); -} - -DEFINE_FWK_MODULE(DistortedMuonProducer); diff --git a/ElectroWeakAnalysis/Utilities/src/DistortedMuonProducerFromDB.cc b/ElectroWeakAnalysis/Utilities/src/DistortedMuonProducerFromDB.cc deleted file mode 100644 index 6709f7928d129..0000000000000 --- a/ElectroWeakAnalysis/Utilities/src/DistortedMuonProducerFromDB.cc +++ /dev/null @@ -1,132 +0,0 @@ -#include -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" - -#include "DataFormats/Common/interface/View.h" -#include "DataFormats/MuonReco/interface/Muon.h" - -#include "MuonAnalysis/MomentumScaleCalibration/interface/MomentumScaleCorrector.h" -#include "MuonAnalysis/MomentumScaleCalibration/interface/ResolutionFunction.h" - -// -// class declaration -// -class DistortedMuonProducerFromDB : public edm::EDProducer { -public: - explicit DistortedMuonProducerFromDB(const edm::ParameterSet&); - ~DistortedMuonProducerFromDB() override; - -private: - void beginRun(const edm::Run&, const edm::EventSetup&) override; - void produce(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - edm::EDGetTokenT > muonToken_; - - std::string dbScaleLabel_; - std::string dbDataResolutionLabel_; - std::string dbMCResolutionLabel_; - - std::unique_ptr momCorrector_; - std::unique_ptr momResolutionData_; - std::unique_ptr momResolutionMC_; -}; - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/MuonReco/interface/MuonFwd.h" - -#include - -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "CondFormats/RecoMuonObjects/interface/MuScleFitDBobject.h" -#include "CondFormats/DataRecord/interface/MuScleFitDBobjectRcd.h" -#include "MuonAnalysis/MomentumScaleCalibration/interface/BaseFunction.h" -#include "MuonAnalysis/MomentumScaleCalibration/interface/Functions.h" - -///////////////////////////////////////////////////////////////////////////////////// -DistortedMuonProducerFromDB::DistortedMuonProducerFromDB(const edm::ParameterSet& pset) { - // What is being produced - produces >(); - - // Input products - muonToken_ = - consumes >(pset.getUntrackedParameter("MuonTag", edm::InputTag("muons"))); - dbScaleLabel_ = pset.getUntrackedParameter("DBScaleLabel", "scale"); - dbDataResolutionLabel_ = pset.getUntrackedParameter("DBDataResolutionLabel", "datareso"); - dbMCResolutionLabel_ = pset.getUntrackedParameter("DBMCResolutionLabel", "mcreso"); -} - -///////////////////////////////////////////////////////////////////////////////////// -DistortedMuonProducerFromDB::~DistortedMuonProducerFromDB() {} - -///////////////////////////////////////////////////////////////////////////////////// -void DistortedMuonProducerFromDB::beginRun(const edm::Run&, const edm::EventSetup& iSetup) { - edm::ESHandle dbObject1; - iSetup.get().get(dbScaleLabel_, dbObject1); - momCorrector_ = std::make_unique(dbObject1.product()); - - LogTrace("") << ">>> Using database for momentum scale corrections !!"; - - edm::ESHandle dbObject2; - iSetup.get().get(dbDataResolutionLabel_, dbObject2); - momResolutionData_ = std::make_unique(dbObject2.product()); - - edm::ESHandle dbObject3; - iSetup.get().get(dbMCResolutionLabel_, dbObject3); - momResolutionMC_ = std::make_unique(dbObject3.product()); - - LogTrace("") << ">>> Using database for momentum resolution corrections !!"; -} - -///////////////////////////////////////////////////////////////////////////////////// -void DistortedMuonProducerFromDB::endJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void DistortedMuonProducerFromDB::produce(edm::Event& ev, const edm::EventSetup& iSetup) { - if (ev.isRealData()) - return; - - // Muon collection - edm::Handle > muonCollection; - if (!ev.getByToken(muonToken_, muonCollection)) { - edm::LogError("") << ">>> Muon collection does not exist !!!"; - return; - } - unsigned int muonCollectionSize = muonCollection->size(); - - std::unique_ptr newmuons(new reco::MuonCollection); - - for (unsigned int i = 0; i < muonCollectionSize; i++) { - edm::RefToBase mu = muonCollection->refAt(i); - - // Set shift - double shift = (*momCorrector_)(*mu) - mu->pt(); - LogTrace("") << "\tmomentumScaleShift= " << shift << " [GeV]"; - - // Set resolutions - double sigma = pow(momResolutionData_->sigmaPt(*mu), 2) - pow(momResolutionMC_->sigmaPt(*mu), 2); - if (sigma > 0.) - sigma = sqrt(sigma); - else - sigma = 0.; - LogTrace("") << "\tPt additional smearing= " << sigma << " [GeV]"; - - // Gaussian Random number for smearing - double rndg = CLHEP::RandGauss::shoot(); - - // New muon - double ptmu = mu->pt(); - ptmu += shift + sigma * rndg; - reco::Muon* newmu = mu->clone(); - newmu->setP4(reco::Particle::PolarLorentzVector(ptmu, mu->eta(), mu->phi(), mu->mass())); - newmuons->push_back(*newmu); - } - - ev.put(std::move(newmuons)); -} - -DEFINE_FWK_MODULE(DistortedMuonProducerFromDB); diff --git a/ElectroWeakAnalysis/Utilities/src/DistortedPFCandProducer.cc b/ElectroWeakAnalysis/Utilities/src/DistortedPFCandProducer.cc deleted file mode 100644 index 242d10a31ab63..0000000000000 --- a/ElectroWeakAnalysis/Utilities/src/DistortedPFCandProducer.cc +++ /dev/null @@ -1,289 +0,0 @@ -#include -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/EDProducer.h" - -#include "DataFormats/Common/interface/View.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" - -#include "MuonAnalysis/MomentumScaleCalibration/interface/MomentumScaleCorrector.h" -#include "MuonAnalysis/MomentumScaleCalibration/interface/ResolutionFunction.h" - -// -// class declaration -// -class DistortedPFCandProducer : public edm::EDProducer { -public: - explicit DistortedPFCandProducer(const edm::ParameterSet&); - ~DistortedPFCandProducer() override; - -private: - void beginJob() override; - void produce(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - edm::EDGetTokenT > muonToken_; - edm::EDGetTokenT genMatchMapToken_; - edm::EDGetTokenT > pfToken_; - std::vector etaBinEdges_; - - std::vector shiftOnOneOverPt_; // in [1/GeV] - std::vector relativeShiftOnPt_; - std::vector uncertaintyOnOneOverPt_; // in [1/GeV] - std::vector relativeUncertaintyOnPt_; - - std::vector efficiencyRatioOverMC_; -}; - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/MuonReco/interface/MuonFwd.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" - -#include -#include - -///////////////////////////////////////////////////////////////////////////////////// -DistortedPFCandProducer::DistortedPFCandProducer(const edm::ParameterSet& pset) { - // What is being produced - produces >(); - - // Input products - muonToken_ = - consumes >(pset.getUntrackedParameter("MuonTag", edm::InputTag("muons"))); - genMatchMapToken_ = consumes( - pset.getUntrackedParameter("GenMatchMapTag", edm::InputTag("genMatchMap"))); - pfToken_ = consumes >( - pset.getUntrackedParameter("PFTag", edm::InputTag("particleFlow"))); - - // Eta edges - std::vector defEtaEdges; - defEtaEdges.push_back(-999999.); - defEtaEdges.push_back(999999.); - etaBinEdges_ = pset.getUntrackedParameter >("EtaBinEdges", defEtaEdges); - unsigned int ninputs_expected = etaBinEdges_.size() - 1; - - // Distortions in muon momentum - std::vector defDistortion; - defDistortion.push_back(0.); - - shiftOnOneOverPt_ = - pset.getUntrackedParameter >("ShiftOnOneOverPt", defDistortion); // in [1/GeV] - if (shiftOnOneOverPt_.size() == 1 && ninputs_expected > 1) { - for (unsigned int i = 1; i < ninputs_expected; i++) { - shiftOnOneOverPt_.push_back(shiftOnOneOverPt_[0]); - } - } - - relativeShiftOnPt_ = pset.getUntrackedParameter >("RelativeShiftOnPt", defDistortion); - if (relativeShiftOnPt_.size() == 1 && ninputs_expected > 1) { - for (unsigned int i = 1; i < ninputs_expected; i++) { - relativeShiftOnPt_.push_back(relativeShiftOnPt_[0]); - } - } - - uncertaintyOnOneOverPt_ = - pset.getUntrackedParameter >("UncertaintyOnOneOverPt", defDistortion); // in [1/GeV] - if (uncertaintyOnOneOverPt_.size() == 1 && ninputs_expected > 1) { - for (unsigned int i = 1; i < ninputs_expected; i++) { - uncertaintyOnOneOverPt_.push_back(uncertaintyOnOneOverPt_[0]); - } - } - - relativeUncertaintyOnPt_ = pset.getUntrackedParameter >("RelativeUncertaintyOnPt", defDistortion); - if (relativeUncertaintyOnPt_.size() == 1 && ninputs_expected > 1) { - for (unsigned int i = 1; i < ninputs_expected; i++) { - relativeUncertaintyOnPt_.push_back(relativeUncertaintyOnPt_[0]); - } - } - - // Data/MC efficiency ratios - std::vector defEfficiencyRatio; - defEfficiencyRatio.push_back(1.); - efficiencyRatioOverMC_ = - pset.getUntrackedParameter >("EfficiencyRatioOverMC", defEfficiencyRatio); - if (efficiencyRatioOverMC_.size() == 1 && ninputs_expected > 1) { - for (unsigned int i = 1; i < ninputs_expected; i++) { - efficiencyRatioOverMC_.push_back(efficiencyRatioOverMC_[0]); - } - } - - // Send a warning if there are inconsistencies in vector sizes !! - bool effWrong = efficiencyRatioOverMC_.size() != ninputs_expected; - bool momWrong = shiftOnOneOverPt_.size() != ninputs_expected || relativeShiftOnPt_.size() != ninputs_expected || - uncertaintyOnOneOverPt_.size() != ninputs_expected || - relativeUncertaintyOnPt_.size() != ninputs_expected; - if (effWrong and momWrong) { - edm::LogError("") - << "WARNING: DistortedPFCandProducer : Size of some parameters do not match the EtaBinEdges vector!!"; - } -} - -///////////////////////////////////////////////////////////////////////////////////// -DistortedPFCandProducer::~DistortedPFCandProducer() {} - -///////////////////////////////////////////////////////////////////////////////////// -void DistortedPFCandProducer::beginJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void DistortedPFCandProducer::endJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void DistortedPFCandProducer::produce(edm::Event& ev, const edm::EventSetup& iSetup) { - if (ev.isRealData()) - return; - - // Muon collection - edm::Handle > muonCollection; - if (!ev.getByToken(muonToken_, muonCollection)) { - edm::LogError("") << ">>> Muon collection does not exist !!!"; - return; - } - - edm::Handle genMatchMap; - if (!ev.getByToken(genMatchMapToken_, genMatchMap)) { - edm::LogError("") << ">>> Muon-GenParticle match map does not exist !!!"; - return; - } - - // Get PFCandidate collection - edm::Handle > pfCollection; - if (!ev.getByToken(pfToken_, pfCollection)) { - edm::LogError("") << ">>> PFCandidate collection does not exist !!!"; - return; - } - - unsigned int muonCollectionSize = muonCollection->size(); - unsigned int pfCollectionSize = pfCollection->size(); - - if (pfCollectionSize < 1) - return; - - // Ask for PfMuon consistency - bool pfMuonFound = false; - - std::unique_ptr newmuons(new reco::PFCandidateCollection); - - // Loop on all PF candidates - for (unsigned int j = 0; j < pfCollectionSize; j++) { - edm::RefToBase pf = pfCollection->refAt(j); - - // New PF muon - double ptmu = pf->pt(); - - for (unsigned int i = 0; i < muonCollectionSize; i++) { - edm::RefToBase mu = muonCollection->refAt(i); - - // Check the muon is in the PF collection - if (pf->particleId() == reco::PFCandidate::mu) { - reco::MuonRef muref = pf->muonRef(); - if (muref.isNonnull()) { - if (muref.key() == mu.key()) { - if (mu->isStandAloneMuon() && ptmu == muref->standAloneMuon()->pt() && - ((!mu->isGlobalMuon() || (mu->isGlobalMuon() && ptmu != muref->combinedMuon()->pt())) && - (!mu->isTrackerMuon() || (mu->isTrackerMuon() && ptmu != mu->track()->pt())))) { - pfMuonFound = false; - } else if (!mu->isTrackerMuon()) { - pfMuonFound = false; - } else { - pfMuonFound = true; - } - } else { - pfMuonFound = false; - } - } - } - - // do nothing if StandAlone muon - //const reco::Track& track = *trackRef; - - if (!pfMuonFound) - continue; - - double ptgen = pf->pt(); - double etagen = pf->eta(); - - reco::GenParticleRef gen = (*genMatchMap)[mu]; - if (!gen.isNull()) { - ptgen = gen->pt(); - etagen = gen->eta(); - LogTrace("") << ">>> Muon-GenParticle match found; ptmu= " << pf->pt() << ", ptgen= " << ptgen; - } else { - LogTrace("") << ">>> MUON-GENPARTICLE MATCH NOT FOUND!!!"; - } - - // Initialize parameters - double effRatio = 0.; - double shift1 = 0.; - double shift2 = 0.; - double sigma1 = 0.; - double sigma2 = 0.; - - // Find out which eta bin should be used - unsigned int nbins = etaBinEdges_.size() - 1; - unsigned int etaBin = nbins; - if (etagen > etaBinEdges_[0] && etagen < etaBinEdges_[nbins]) { - for (unsigned int j = 1; j <= nbins; ++j) { - if (etagen > etaBinEdges_[j]) - continue; - etaBin = j - 1; - break; - } - } - if (etaBin < nbins) { - LogTrace("") << ">>> etaBin: " << etaBin << ", for etagen =" << etagen; - } else { - // Muon is rejected if outside the considered eta range - LogTrace("") << ">>> Muon outside eta range: reject it; etagen = " << etagen; - pfMuonFound = false; - continue; - } - - if (!pfMuonFound) - continue; - - // Set shifts - shift1 = shiftOnOneOverPt_[etaBin]; - shift2 = relativeShiftOnPt_[etaBin]; - LogTrace("") << "\tshiftOnOneOverPt= " << shift1 * 100 << " [%]"; - LogTrace("") << "\trelativeShiftOnPt= " << shift2 * 100 << " [%]"; - - // Set resolutions - sigma1 = uncertaintyOnOneOverPt_[etaBin]; - sigma2 = relativeUncertaintyOnPt_[etaBin]; - LogTrace("") << "\tuncertaintyOnOneOverPt= " << sigma1 << " [1/GeV]"; - LogTrace("") << "\trelativeUncertaintyOnPt= " << sigma2 * 100 << " [%]"; - - // Set efficiency ratio - effRatio = efficiencyRatioOverMC_[etaBin]; - LogTrace("") << "\tefficiencyRatioOverMC= " << effRatio; - - // Reject muons according to efficiency ratio - double rndf = CLHEP::RandFlat::shoot(); - if (rndf > effRatio) - continue; - - // Gaussian Random numbers for smearing - double rndg1 = CLHEP::RandGauss::shoot(); - double rndg2 = CLHEP::RandGauss::shoot(); - - // change here the pt of the candidate, if it is a muon - - ptmu += ptgen * (shift1 * ptgen + shift2 + sigma1 * rndg1 * ptgen + sigma2 * rndg2); - pfMuonFound = false; - } - - reco::PFCandidate* newmu = pf->clone(); - newmu->setP4(reco::Particle::PolarLorentzVector(ptmu, pf->eta(), pf->phi(), pf->mass())); - - newmuons->push_back(*newmu); - } - - ev.put(std::move(newmuons)); -} - -DEFINE_FWK_MODULE(DistortedPFCandProducer); diff --git a/ElectroWeakAnalysis/Utilities/src/FSRWeightProducer.cc b/ElectroWeakAnalysis/Utilities/src/FSRWeightProducer.cc deleted file mode 100644 index 0ae0edf42abea..0000000000000 --- a/ElectroWeakAnalysis/Utilities/src/FSRWeightProducer.cc +++ /dev/null @@ -1,185 +0,0 @@ -#include - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/Candidate/interface/CompositeCandidate.h" -#include "CommonTools/CandUtils/interface/AddFourMomenta.h" -#include "CommonTools/CandUtils/interface/Booster.h" -#include - -// -// class declaration -// -class FSRWeightProducer : public edm::EDProducer { -public: - explicit FSRWeightProducer(const edm::ParameterSet&); - ~FSRWeightProducer() override; - -private: - void beginJob() override; - void produce(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - double alphaRatio(double); - - edm::EDGetTokenT genToken_; -}; - -///////////////////////////////////////////////////////////////////////////////////// -FSRWeightProducer::FSRWeightProducer(const edm::ParameterSet& pset) { - genToken_ = consumes( - pset.getUntrackedParameter("GenTag", edm::InputTag("genParticles"))); - - produces(); -} - -///////////////////////////////////////////////////////////////////////////////////// -FSRWeightProducer::~FSRWeightProducer() {} - -///////////////////////////////////////////////////////////////////////////////////// -void FSRWeightProducer::beginJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void FSRWeightProducer::endJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void FSRWeightProducer::produce(edm::Event& iEvent, const edm::EventSetup&) { - if (iEvent.isRealData()) - return; - - edm::Handle genParticles; - iEvent.getByToken(genToken_, genParticles); - - std::unique_ptr weight(new double); - - // Set a default weight to start with - (*weight) = 1.; - - unsigned int gensize = genParticles->size(); - for (unsigned int i = 0; i < gensize; ++i) { - const reco::GenParticle& lepton = (*genParticles)[i]; - if (lepton.status() != 3) - continue; - int leptonId = lepton.pdgId(); - if (abs(leptonId) != 11 && abs(leptonId) != 13 && abs(leptonId) != 15) - continue; - if (lepton.numberOfMothers() != 1) - continue; - const reco::Candidate* boson = lepton.mother(); - int bosonId = abs(boson->pdgId()); - if (bosonId != 23 && bosonId != 24) - continue; - double bosonMass = boson->mass(); - double leptonMass = lepton.mass(); - double leptonEnergy = lepton.energy(); - double cosLeptonTheta = cos(lepton.theta()); - double sinLeptonTheta = sin(lepton.theta()); - double leptonPhi = lepton.phi(); - - int trueKey = i; - if (lepton.numberOfDaughters() == 0) { - continue; - } else if (lepton.numberOfDaughters() == 1) { - int otherleptonKey = lepton.daughterRef(0).key(); - const reco::GenParticle& otherlepton = (*genParticles)[otherleptonKey]; - if (otherlepton.pdgId() != leptonId) - continue; - if (otherlepton.numberOfDaughters() <= 1) - continue; - trueKey = otherleptonKey; - } - - const reco::GenParticle& trueLepton = (*genParticles)[trueKey]; - unsigned int nDaughters = trueLepton.numberOfDaughters(); - - for (unsigned int j = 0; j < nDaughters; ++j) { - const reco::Candidate* photon = trueLepton.daughter(j); - if (photon->pdgId() != 22) - continue; - double photonEnergy = photon->energy(); - double cosPhotonTheta = cos(photon->theta()); - double sinPhotonTheta = sin(photon->theta()); - double photonPhi = photon->phi(); - double costheta = sinLeptonTheta * sinPhotonTheta * cos(leptonPhi - photonPhi) + cosLeptonTheta * cosPhotonTheta; - // Missing O(alpha) terms in soft-collinear approach - // Only for W, from hep-ph/0303260 - if (bosonId == 24) { - double betaLepton = sqrt(1 - pow(leptonMass / leptonEnergy, 2)); - double delta = -8 * photonEnergy * (1 - betaLepton * costheta) / pow(bosonMass, 3) / - (1 - pow(leptonMass / bosonMass, 2)) / (4 - pow(leptonMass / bosonMass, 2)) * leptonEnergy * - (pow(leptonMass, 2) / bosonMass + 2 * photonEnergy); - (*weight) *= (1 + delta); - } - // Missing NLO QED orders in QED parton shower approach - // Change coupling scale from 0 to kT to estimate this effect - (*weight) *= alphaRatio(photonEnergy * sqrt(1 - pow(costheta, 2))); - } - } - - iEvent.put(std::move(weight)); -} - -double FSRWeightProducer::alphaRatio(double pt) { - double pigaga = 0.; - - // Leptonic contribution (just one loop, precise at < 0.3% level) - const double alphapi = 1 / 137.036 / M_PI; - const double mass_e = 0.0005; - const double mass_mu = 0.106; - const double mass_tau = 1.777; - const double mass_Z = 91.2; - if (pt > mass_e) - pigaga += alphapi * (2 * log(pt / mass_e) / 3. - 5. / 9.); - if (pt > mass_mu) - pigaga += alphapi * (2 * log(pt / mass_mu) / 3. - 5. / 9.); - if (pt > mass_tau) - pigaga += alphapi * (2 * log(pt / mass_tau) / 3. - 5. / 9.); - - // Hadronic vaccum contribution - // Using simple effective parametrization from Physics Letters B 513 (2001) 46. - // Top contribution neglected - double A = 0.; - double B = 0.; - double C = 0.; - if (pt < 0.7) { - A = 0.0; - B = 0.0023092; - C = 3.9925370; - } else if (pt < 2.0) { - A = 0.0; - B = 0.0022333; - C = 4.2191779; - } else if (pt < 4.0) { - A = 0.0; - B = 0.0024402; - C = 3.2496684; - } else if (pt < 10.0) { - A = 0.0; - B = 0.0027340; - C = 2.0995092; - } else if (pt < mass_Z) { - A = 0.0010485; - B = 0.0029431; - C = 1.0; - } else if (pt < 10000.) { - A = 0.0012234; - B = 0.0029237; - C = 1.0; - } else { - A = 0.0016894; - B = 0.0028984; - C = 1.0; - } - pigaga += A + B * log(1. + C * pt * pt); - - // Done - return 1. / (1. - pigaga); -} - -DEFINE_FWK_MODULE(FSRWeightProducer); diff --git a/ElectroWeakAnalysis/Utilities/src/ISRGammaWeightProducer.cc b/ElectroWeakAnalysis/Utilities/src/ISRGammaWeightProducer.cc deleted file mode 100644 index 7af06f9b02536..0000000000000 --- a/ElectroWeakAnalysis/Utilities/src/ISRGammaWeightProducer.cc +++ /dev/null @@ -1,140 +0,0 @@ -#include - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/Candidate/interface/CompositeCandidate.h" -#include "CommonTools/CandUtils/interface/AddFourMomenta.h" -#include "CommonTools/CandUtils/interface/Booster.h" -#include - -// -// class declaration -// -class ISRGammaWeightProducer : public edm::EDProducer { -public: - explicit ISRGammaWeightProducer(const edm::ParameterSet&); - ~ISRGammaWeightProducer() override; - - void beginJob() override; - void produce(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - -private: - edm::EDGetTokenT genToken_; - std::vector isrBinEdges_; - std::vector ptWeights_; -}; - -///////////////////////////////////////////////////////////////////////////////////// -ISRGammaWeightProducer::ISRGammaWeightProducer(const edm::ParameterSet& pset) { - genToken_ = consumes( - pset.getUntrackedParameter("GenTag", edm::InputTag("genParticles"))); - - produces(); -} - -///////////////////////////////////////////////////////////////////////////////////// -ISRGammaWeightProducer::~ISRGammaWeightProducer() {} - -///////////////////////////////////////////////////////////////////////////////////// -void ISRGammaWeightProducer::beginJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void ISRGammaWeightProducer::endJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void ISRGammaWeightProducer::produce(edm::Event& iEvent, const edm::EventSetup&) { - if (iEvent.isRealData()) - return; - - edm::Handle genParticles; - iEvent.getByToken(genToken_, genParticles); - unsigned int gensize = genParticles->size(); - - std::unique_ptr weight(new double); - - // Set a default weight to start with - (*weight) = 1.; - - // Find the boson at the hard scattering level - const reco::GenParticle* boson = nullptr; - int parton1Key = -1; - int parton2Key = -1; - for (unsigned int i = 0; i < gensize; ++i) { - const reco::GenParticle& part = (*genParticles)[i]; - int status = abs(part.status()); - if (status != 3) - continue; - if (part.numberOfMothers() != 2) - continue; - int partId = abs(part.pdgId()); - if (status == 3 && (partId == 23 || abs(partId) == 24)) { - boson = &(*genParticles)[i]; - parton1Key = part.motherRef(0).key(); - parton2Key = part.motherRef(1).key(); - break; - } - } - - // Consider only photons near the hard-scattering process - const reco::GenParticle* photon = nullptr; - if (boson) { - for (unsigned int i = 0; i < gensize; ++i) { - photon = nullptr; - const reco::GenParticle& part = (*genParticles)[i]; - int status = abs(part.status()); - if (status != 1) - continue; - int partId = abs(part.pdgId()); - if (partId != 22) - continue; - if (part.numberOfMothers() != 1) - continue; - int keyM = part.motherRef(0).key(); - const reco::GenParticle* mother = &(*genParticles)[keyM]; - if (mother->status() != 3) - continue; - int mId = mother->pdgId(); - if (abs(mId) > 6 && mId != 2212) - continue; - for (unsigned int j = 0; j < mother->numberOfDaughters(); ++j) { - int keyD = mother->daughterRef(j).key(); - if (keyD == parton1Key || keyD == parton2Key) { - photon = ∂ - break; - } - } - if (photon) - break; - } - } - - if (boson && photon) { - math::XYZTLorentzVector smom = boson->p4() + photon->p4(); - double s = smom.M2(); - double sqrts = smom.M(); - - // Go to CM using the boost direction of the boson+photon system - ROOT::Math::Boost cmboost(smom.BoostToCM()); - math::XYZTLorentzVector photonCM(cmboost(photon->p4())); - double pcostheta = (smom.x() * photonCM.x() + smom.y() * photonCM.y() + smom.z() * photonCM.z()) / smom.P(); - - // Determine kinematic invariants - double t = -sqrts * (photonCM.t() - pcostheta); - double MV = boson->mass(); - double u = MV * MV - s - t; - (*weight) = 1. - 2 * t * u / (s * s + MV * MV * MV * MV); - //printf(">>>>>>>>> s %f t %f u %f, MV %f, weight = %f\n", s, t, u, MV, (*weight)); - } - - iEvent.put(std::move(weight)); -} - -DEFINE_FWK_MODULE(ISRGammaWeightProducer); diff --git a/ElectroWeakAnalysis/Utilities/src/ISRWeightProducer.cc b/ElectroWeakAnalysis/Utilities/src/ISRWeightProducer.cc deleted file mode 100644 index c02896da46847..0000000000000 --- a/ElectroWeakAnalysis/Utilities/src/ISRWeightProducer.cc +++ /dev/null @@ -1,107 +0,0 @@ -#include - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/Candidate/interface/CompositeCandidate.h" -#include "CommonTools/CandUtils/interface/AddFourMomenta.h" -#include "CommonTools/CandUtils/interface/Booster.h" -#include - -// -// class declaration -// -class ISRWeightProducer : public edm::EDProducer { -public: - explicit ISRWeightProducer(const edm::ParameterSet&); - ~ISRWeightProducer() override; - -private: - void beginJob() override; - void produce(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - edm::EDGetTokenT genToken_; - std::vector isrBinEdges_; - std::vector ptWeights_; -}; - -///////////////////////////////////////////////////////////////////////////////////// -ISRWeightProducer::ISRWeightProducer(const edm::ParameterSet& pset) { - genToken_ = consumes( - pset.getUntrackedParameter("GenTag", edm::InputTag("genParticles"))); - - // Pt bin edges - std::vector defPtEdges; - defPtEdges.push_back(0.); - defPtEdges.push_back(999999.); - isrBinEdges_ = pset.getUntrackedParameter >("ISRBinEdges", defPtEdges); - unsigned int ninputs_expected = isrBinEdges_.size() - 1; - - // Distortions in muon momentum - std::vector defWeights; - defWeights.push_back(1.); - ptWeights_ = pset.getUntrackedParameter >("PtWeights", defWeights); - if (ptWeights_.size() == 1 && ninputs_expected > 1) { - for (unsigned int i = 1; i < ninputs_expected; i++) { - ptWeights_.push_back(ptWeights_[0]); - } - } - - produces(); -} - -///////////////////////////////////////////////////////////////////////////////////// -ISRWeightProducer::~ISRWeightProducer() {} - -///////////////////////////////////////////////////////////////////////////////////// -void ISRWeightProducer::beginJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void ISRWeightProducer::endJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void ISRWeightProducer::produce(edm::Event& iEvent, const edm::EventSetup&) { - if (iEvent.isRealData()) - return; - - edm::Handle genParticles; - iEvent.getByToken(genToken_, genParticles); - unsigned int gensize = genParticles->size(); - - std::unique_ptr weight(new double); - - // Set as default weight the asymptotic value at high pt (i.e. value of last bin) - (*weight) = ptWeights_[ptWeights_.size() - 1]; - - unsigned int nbins = isrBinEdges_.size() - 1; - for (unsigned int i = 0; i < gensize; ++i) { - const reco::GenParticle& part = (*genParticles)[i]; - int id = part.pdgId(); - if (id != 23 && abs(id) != 24) - continue; - int status = part.status(); - if (status != 3) - continue; - double pt = part.pt(); - if (pt > isrBinEdges_[0] && pt < isrBinEdges_[nbins]) { - for (unsigned int j = 1; j <= nbins; ++j) { - if (pt > isrBinEdges_[j]) - continue; - (*weight) = ptWeights_[j - 1]; - break; - } - } - break; - } - - iEvent.put(std::move(weight)); -} - -DEFINE_FWK_MODULE(ISRWeightProducer); diff --git a/ElectroWeakAnalysis/Utilities/src/MuonWithPFIsoProducer.cc b/ElectroWeakAnalysis/Utilities/src/MuonWithPFIsoProducer.cc deleted file mode 100644 index 2e5c04bd88233..0000000000000 --- a/ElectroWeakAnalysis/Utilities/src/MuonWithPFIsoProducer.cc +++ /dev/null @@ -1,185 +0,0 @@ -#include -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/EDProducer.h" - -#include "DataFormats/Common/interface/View.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" - -#include "MuonAnalysis/MomentumScaleCalibration/interface/MomentumScaleCorrector.h" -#include "MuonAnalysis/MomentumScaleCalibration/interface/ResolutionFunction.h" - -// -// class declaration -// -class MuonWithPFIsoProducer : public edm::EDProducer { -public: - explicit MuonWithPFIsoProducer(const edm::ParameterSet&); - ~MuonWithPFIsoProducer() override; - -private: - void beginJob() override; - void produce(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - edm::EDGetTokenT > muonToken_; - edm::EDGetTokenT > pfToken_; - - bool usePfMuonsOnly_; - - double trackIsoVeto_; - double gammaIsoVeto_; - double neutralHadronIsoVeto_; -}; - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/MuonReco/interface/MuonFwd.h" -#include "DataFormats/TrackReco/interface/Track.h" - -#include "DataFormats/GeometryVector/interface/VectorUtil.h" - -///////////////////////////////////////////////////////////////////////////////////// -MuonWithPFIsoProducer::MuonWithPFIsoProducer(const edm::ParameterSet& pset) { - // What is being produced - produces >(); - - // Muon collection - muonToken_ = - consumes >(pset.getUntrackedParameter("MuonTag", edm::InputTag("muons"))); - - // PF candidate collection - pfToken_ = consumes >( - pset.getUntrackedParameter("PFTag", edm::InputTag("particleFlow"))); - - // Use only PF muons to get exact consistency with PfMET - usePfMuonsOnly_ = pset.getUntrackedParameter("UsePfMuonsOnly", false); - - // Veto cone - trackIsoVeto_ = pset.getUntrackedParameter("TrackIsoVeto", 0.01); - gammaIsoVeto_ = pset.getUntrackedParameter("GammaIsoVeto", 0.07); - neutralHadronIsoVeto_ = pset.getUntrackedParameter("NeutralHadronIsoVeto", 0.1); -} - -///////////////////////////////////////////////////////////////////////////////////// -MuonWithPFIsoProducer::~MuonWithPFIsoProducer() {} - -///////////////////////////////////////////////////////////////////////////////////// -void MuonWithPFIsoProducer::beginJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void MuonWithPFIsoProducer::endJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void MuonWithPFIsoProducer::produce(edm::Event& ev, const edm::EventSetup& iSetup) { - // Initialize pointer to new output muon collection - std::unique_ptr newmuons(new reco::MuonCollection); - - // Get Muon collection - edm::Handle > muonCollection; - if (!ev.getByToken(muonToken_, muonCollection)) { - edm::LogError("") << ">>> Muon collection does not exist !!!"; - ev.put(std::move(newmuons)); - return; - } - - // Get PFCandidate collection - edm::Handle > pfCollection; - if (!ev.getByToken(pfToken_, pfCollection)) { - edm::LogError("") << ">>> PFCandidate collection does not exist !!!"; - ev.put(std::move(newmuons)); - return; - } - - // Loop over Pf candidates to find muons and collect deposits in veto, - // dR<0.3 and dR<0.5 cones. Interpret "track" as charged particles (e,mu, - // chraged hadrons). Interpret "em" as photons and also as electromagnetic - // energy in HF. Interpret "had" as neutral hadrons and also as hadronic - // energy in HF. Apply weights if requested at input level. - // HO energies are not filled. Ditto for jet energies around the muon. - unsigned int muonCollectionSize = muonCollection->size(); - unsigned int pfCollectionSize = pfCollection->size(); - for (unsigned int i = 0; i < muonCollectionSize; i++) { - edm::RefToBase mu = muonCollection->refAt(i); - - // Ask for PfMuon consistency if requested - bool muonFound = false; - - // Starting bycloning this muon - reco::Muon* newmu = mu->clone(); - reco::TrackRef tk = mu->innerTrack(); - - // Set isolations - reco::MuonIsolation iso03; - reco::MuonIsolation iso05; - // Loop on all candidates - for (unsigned int j = 0; j < pfCollectionSize; j++) { - edm::RefToBase pf = pfCollection->refAt(j); - - // Check the muon is in the PF collection when required - bool thisIsTheMuon = false; - if (tk.isNonnull() && pf->trackRef() == tk) { - thisIsTheMuon = true; - muonFound = true; - } - - // Get dR. Nothing to add if dR>0.5 - double deltaR = Geom::deltaR(mu->momentum(), pf->momentum()); - if (deltaR > 0.5) - continue; - - // Fill "tracker" components - if (pf->particleId() == reco::PFCandidate::h || pf->particleId() == reco::PFCandidate::e || - pf->particleId() == reco::PFCandidate::mu) { - if (deltaR < trackIsoVeto_ || thisIsTheMuon) { - iso05.trackerVetoPt += pf->pt(); - iso03.trackerVetoPt += pf->pt(); - } else { - iso05.sumPt += pf->pt(); - iso05.nTracks++; - if (deltaR < 0.3) { - iso03.sumPt += pf->pt(); - iso03.nTracks++; - } - } - // Fill "em" components - } else if (pf->particleId() == reco::PFCandidate::gamma || pf->particleId() == reco::PFCandidate::egamma_HF) { - if (deltaR < gammaIsoVeto_) { - iso05.emVetoEt += pf->pt(); - iso03.emVetoEt += pf->pt(); - } else { - iso05.emEt += pf->pt(); - if (deltaR < 0.3) - iso03.emEt += pf->pt(); - } - // Fill "had" components - } else if (pf->particleId() == reco::PFCandidate::h0 || pf->particleId() == reco::PFCandidate::h_HF) { - if (deltaR < neutralHadronIsoVeto_) { - iso05.hadVetoEt += pf->pt(); - iso03.hadVetoEt += pf->pt(); - } else { - iso05.hadEt += pf->pt(); - if (deltaR < 0.3) - iso03.hadEt += pf->pt(); - } - } - } - - // Do not take this muon (under explicit request) if it is not a PfMuon - if (usePfMuonsOnly_ && (!muonFound)) - continue; - - // Set this isolation information in the new muon - newmu->setIsolation(iso03, iso05); - - // Add new muon to output collection - newmuons->push_back(*newmu); - } - - // Add output collection to event - ev.put(std::move(newmuons)); -} - -DEFINE_FWK_MODULE(MuonWithPFIsoProducer); diff --git a/ElectroWeakAnalysis/Utilities/src/PdfSystematicsAnalyzer.cc b/ElectroWeakAnalysis/Utilities/src/PdfSystematicsAnalyzer.cc deleted file mode 100644 index 88da2f8f352c0..0000000000000 --- a/ElectroWeakAnalysis/Utilities/src/PdfSystematicsAnalyzer.cc +++ /dev/null @@ -1,327 +0,0 @@ -////////// Header section ///////////////////////////////////////////// -#include "FWCore/Framework/interface/EDFilter.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Common/interface/TriggerResults.h" - -class PdfSystematicsAnalyzer : public edm::EDFilter { -public: - PdfSystematicsAnalyzer(const edm::ParameterSet& pset); - ~PdfSystematicsAnalyzer() override; - bool filter(edm::Event&, const edm::EventSetup&) override; - void beginJob() override; - void endJob() override; - -private: - std::string selectorPath_; - std::vector pdfWeightTags_; - std::vector > > pdfWeightTokens_; - edm::EDGetTokenT triggerResultsToken_; - unsigned int originalEvents_; - unsigned int selectedEvents_; - std::vector pdfStart_; - std::vector weightedSelectedEvents_; - std::vector weighted2SelectedEvents_; - std::vector weightedEvents_; -}; - -////////// Source code //////////////////////////////////////////////// -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "DataFormats/Common/interface/Handle.h" - -#include "FWCore/Common/interface/TriggerNames.h" - -#include "FWCore/Utilities/interface/transform.h" - -///////////////////////////////////////////////////////////////////////////////////// -PdfSystematicsAnalyzer::PdfSystematicsAnalyzer(const edm::ParameterSet& pset) - : selectorPath_(pset.getUntrackedParameter("SelectorPath", "")), - pdfWeightTags_(pset.getUntrackedParameter >("PdfWeightTags")), - pdfWeightTokens_(edm::vector_transform( - pdfWeightTags_, [this](edm::InputTag const& tag) { return consumes >(tag); })), - triggerResultsToken_(consumes(edm::InputTag("TriggerResults"))) {} - -///////////////////////////////////////////////////////////////////////////////////// -PdfSystematicsAnalyzer::~PdfSystematicsAnalyzer() {} - -///////////////////////////////////////////////////////////////////////////////////// -void PdfSystematicsAnalyzer::beginJob() { - originalEvents_ = 0; - selectedEvents_ = 0; - edm::LogVerbatim("PDFAnalysis") << "PDF uncertainties will be determined for the following sets: "; - for (unsigned int i = 0; i < pdfWeightTags_.size(); ++i) { - edm::LogVerbatim("PDFAnalysis") << "\t" << pdfWeightTags_[i].instance(); - pdfStart_.push_back(-1); - } -} - -///////////////////////////////////////////////////////////////////////////////////// -void PdfSystematicsAnalyzer::endJob() { - if (originalEvents_ == 0) { - edm::LogVerbatim("PDFAnalysis") << "NO EVENTS => NO RESULTS"; - return; - } - if (selectedEvents_ == 0) { - edm::LogVerbatim("PDFAnalysis") << "NO SELECTED EVENTS => NO RESULTS"; - return; - } - - edm::LogVerbatim("PDFAnalysis") << "\n>>>> Begin of PDF weight systematics summary >>>>"; - edm::LogVerbatim("PDFAnalysis") << "Total number of analyzed data: " << originalEvents_ << " [events]"; - double originalAcceptance = double(selectedEvents_) / originalEvents_; - edm::LogVerbatim("PDFAnalysis") << "Total number of selected data: " << selectedEvents_ - << " [events], corresponding to acceptance: [" << originalAcceptance * 100 << " +- " - << 100 * sqrt(originalAcceptance * (1. - originalAcceptance) / originalEvents_) - << "] %"; - - edm::LogVerbatim("PDFAnalysis") << "\n>>>>> PDF UNCERTAINTIES ON RATE >>>>>>"; - for (unsigned int i = 0; i < pdfWeightTags_.size(); ++i) { - bool nnpdfFlag = (pdfWeightTags_[i].instance().substr(0, 5) == "NNPDF"); - unsigned int nmembers = weightedSelectedEvents_.size() - pdfStart_[i]; - if (i < pdfWeightTags_.size() - 1) - nmembers = pdfStart_[i + 1] - pdfStart_[i]; - unsigned int npairs = (nmembers - 1) / 2; - edm::LogVerbatim("PDFAnalysis") << "RATE Results for PDF set " << pdfWeightTags_[i].instance() << " ---->"; - - double events_central = weightedSelectedEvents_[pdfStart_[i]]; - edm::LogVerbatim("PDFAnalysis") << "\tEstimate for central PDF member: " << int(events_central) << " [events]"; - double events2_central = weighted2SelectedEvents_[pdfStart_[i]]; - edm::LogVerbatim("PDFAnalysis") - << "\ti.e. [" << std::setprecision(4) << 100 * (events_central - selectedEvents_) / selectedEvents_ << " +- " - << 100 * sqrt(events2_central - events_central + selectedEvents_ * (1 - originalAcceptance)) / selectedEvents_ - << "] % relative variation with respect to original PDF"; - - if (npairs > 0) { - edm::LogVerbatim("PDFAnalysis") << "\tNumber of eigenvectors for uncertainty estimation: " << npairs; - double wplus = 0.; - double wminus = 0.; - unsigned int nplus = 0; - unsigned int nminus = 0; - for (unsigned int j = 0; j < npairs; ++j) { - double wa = weightedSelectedEvents_[pdfStart_[i] + 2 * j + 1] / events_central - 1.; - double wb = weightedSelectedEvents_[pdfStart_[i] + 2 * j + 2] / events_central - 1.; - if (nnpdfFlag) { - if (wa > 0.) { - wplus += wa * wa; - nplus++; - } else { - wminus += wa * wa; - nminus++; - } - if (wb > 0.) { - wplus += wb * wb; - nplus++; - } else { - wminus += wb * wb; - nminus++; - } - } else { - if (wa > wb) { - if (wa < 0.) - wa = 0.; - if (wb > 0.) - wb = 0.; - wplus += wa * wa; - wminus += wb * wb; - } else { - if (wb < 0.) - wb = 0.; - if (wa > 0.) - wa = 0.; - wplus += wb * wb; - wminus += wa * wa; - } - } - } - if (wplus > 0) - wplus = sqrt(wplus); - if (wminus > 0) - wminus = sqrt(wminus); - if (nnpdfFlag) { - if (nplus > 0) - wplus /= sqrt(nplus); - if (nminus > 0) - wminus /= sqrt(nminus); - } - edm::LogVerbatim("PDFAnalysis") << "\tRelative uncertainty with respect to central member: +" - << std::setprecision(4) << 100. * wplus << " / -" << std::setprecision(4) - << 100. * wminus << " [%]"; - } else { - edm::LogVerbatim("PDFAnalysis") << "\tNO eigenvectors for uncertainty estimation"; - } - } - - edm::LogVerbatim("PDFAnalysis") << "\n>>>>> PDF UNCERTAINTIES ON ACCEPTANCE >>>>>>"; - for (unsigned int i = 0; i < pdfWeightTags_.size(); ++i) { - bool nnpdfFlag = (pdfWeightTags_[i].instance().substr(0, 5) == "NNPDF"); - unsigned int nmembers = weightedEvents_.size() - pdfStart_[i]; - if (i < pdfWeightTags_.size() - 1) - nmembers = pdfStart_[i + 1] - pdfStart_[i]; - unsigned int npairs = (nmembers - 1) / 2; - edm::LogVerbatim("PDFAnalysis") << "ACCEPTANCE Results for PDF set " << pdfWeightTags_[i].instance() << " ---->"; - - double acc_central = 0.; - double acc2_central = 0.; - if (weightedEvents_[pdfStart_[i]] > 0) { - acc_central = weightedSelectedEvents_[pdfStart_[i]] / weightedEvents_[pdfStart_[i]]; - acc2_central = weighted2SelectedEvents_[pdfStart_[i]] / weightedEvents_[pdfStart_[i]]; - } - double waverage = weightedEvents_[pdfStart_[i]] / originalEvents_; - edm::LogVerbatim("PDFAnalysis") << "\tEstimate for central PDF member acceptance: [" << acc_central * 100 << " +- " - << 100 * - sqrt((acc2_central / waverage - acc_central * acc_central) / originalEvents_) - << "] %"; - double xi = acc_central - originalAcceptance; - double deltaxi = (acc2_central - (originalAcceptance + 2 * xi + xi * xi)) / originalEvents_; - if (deltaxi > 0) - deltaxi = sqrt(deltaxi); //else deltaxi = 0.; - edm::LogVerbatim("PDFAnalysis") << "\ti.e. [" << std::setprecision(4) << 100 * xi / originalAcceptance << " +- " - << std::setprecision(4) << 100 * deltaxi / originalAcceptance - << "] % relative variation with respect to the original PDF"; - - if (npairs > 0) { - edm::LogVerbatim("PDFAnalysis") << "\tNumber of eigenvectors for uncertainty estimation: " << npairs; - double wplus = 0.; - double wminus = 0.; - unsigned int nplus = 0; - unsigned int nminus = 0; - for (unsigned int j = 0; j < npairs; ++j) { - double wa = 0.; - if (weightedEvents_[pdfStart_[i] + 2 * j + 1] > 0) - wa = (weightedSelectedEvents_[pdfStart_[i] + 2 * j + 1] / weightedEvents_[pdfStart_[i] + 2 * j + 1]) / - acc_central - - 1.; - double wb = 0.; - if (weightedEvents_[pdfStart_[i] + 2 * j + 2] > 0) - wb = (weightedSelectedEvents_[pdfStart_[i] + 2 * j + 2] / weightedEvents_[pdfStart_[i] + 2 * j + 2]) / - acc_central - - 1.; - if (nnpdfFlag) { - if (wa > 0.) { - wplus += wa * wa; - nplus++; - } else { - wminus += wa * wa; - nminus++; - } - if (wb > 0.) { - wplus += wb * wb; - nplus++; - } else { - wminus += wb * wb; - nminus++; - } - } else { - if (wa > wb) { - if (wa < 0.) - wa = 0.; - if (wb > 0.) - wb = 0.; - wplus += wa * wa; - wminus += wb * wb; - } else { - if (wb < 0.) - wb = 0.; - if (wa > 0.) - wa = 0.; - wplus += wb * wb; - wminus += wa * wa; - } - } - } - if (wplus > 0) - wplus = sqrt(wplus); - if (wminus > 0) - wminus = sqrt(wminus); - if (nnpdfFlag) { - if (nplus > 0) - wplus /= sqrt(nplus); - if (nminus > 0) - wminus /= sqrt(nminus); - } - edm::LogVerbatim("PDFAnalysis") << "\tRelative uncertainty with respect to central member: +" - << std::setprecision(4) << 100. * wplus << " / -" << std::setprecision(4) - << 100. * wminus << " [%]"; - } else { - edm::LogVerbatim("PDFAnalysis") << "\tNO eigenvectors for uncertainty estimation"; - } - } - edm::LogVerbatim("PDFAnalysis") << ">>>> End of PDF weight systematics summary >>>>"; -} - -///////////////////////////////////////////////////////////////////////////////////// -bool PdfSystematicsAnalyzer::filter(edm::Event& ev, const edm::EventSetup&) { - edm::Handle > weightHandle; - for (unsigned int i = 0; i < pdfWeightTags_.size(); ++i) { - if (!ev.getByToken(pdfWeightTokens_[i], weightHandle)) { - if (originalEvents_ == 0) { - edm::LogError("PDFAnalysis") << ">>> WARNING: some weights not found!"; - edm::LogError("PDFAnalysis") << ">>> But maybe OK, if you are prefiltering!"; - edm::LogError("PDFAnalysis") << ">>> If things are OK, this warning should disappear after a while!"; - } - return false; - } - } - - originalEvents_++; - - bool selectedEvent = false; - edm::Handle triggerResults; - if (!ev.getByToken(triggerResultsToken_, triggerResults)) { - edm::LogError("PDFAnalysis") << ">>> TRIGGER collection does not exist !!!"; - return false; - } - - const edm::TriggerNames& trigNames = ev.triggerNames(*triggerResults); - unsigned int pathIndex = trigNames.triggerIndex(selectorPath_); - bool pathFound = (pathIndex < trigNames.size()); // pathIndex >= 0, since pathIndex is unsigned - if (pathFound) { - if (triggerResults->accept(pathIndex)) - selectedEvent = true; - } - //edm::LogVerbatim("PDFAnalysis") << ">>>> Path Name: " << selectorPath_ << ", selected? " << selectedEvent; - - if (selectedEvent) - selectedEvents_++; - - for (unsigned int i = 0; i < pdfWeightTags_.size(); ++i) { - if (!ev.getByToken(pdfWeightTokens_[i], weightHandle)) - return false; - std::vector weights = (*weightHandle); - unsigned int nmembers = weights.size(); - // Set up arrays the first time wieghts are read - if (pdfStart_[i] < 0) { - pdfStart_[i] = weightedEvents_.size(); - for (unsigned int j = 0; j < nmembers; ++j) { - weightedEvents_.push_back(0.); - weightedSelectedEvents_.push_back(0.); - weighted2SelectedEvents_.push_back(0.); - } - } - - for (unsigned int j = 0; j < nmembers; ++j) { - weightedEvents_[pdfStart_[i] + j] += weights[j]; - if (selectedEvent) { - weightedSelectedEvents_[pdfStart_[i] + j] += weights[j]; - weighted2SelectedEvents_[pdfStart_[i] + j] += weights[j] * weights[j]; - } - } - - /* - printf("\n>>>>>>>>> Run %8d Event %d, members %3d PDF set %s : Weights >>>> \n", ev.id().run(), ev.id().event(), nmembers, pdfWeightTags_[i].instance().data()); - for (unsigned int i=0; i - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/Candidate/interface/CompositeCandidate.h" -#include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" -#include "CommonTools/CandUtils/interface/AddFourMomenta.h" -#include "CommonTools/CandUtils/interface/Booster.h" -#include - -// -// class declaration -// -class PdfWeightProducer : public edm::EDProducer { -public: - explicit PdfWeightProducer(const edm::ParameterSet&); - ~PdfWeightProducer() override; - -private: - void beginJob() override; - void produce(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - std::string fixPOWHEG_; - bool useFirstAsDefault_; - edm::InputTag genTag_; - edm::EDGetTokenT genToken_; - edm::InputTag pdfInfoTag_; - edm::EDGetTokenT pdfInfoToken_; - std::vector pdfSetNames_; - std::vector pdfShortNames_; -}; - -namespace LHAPDF { - void initPDFSet(int nset, const std::string& filename, int member = 0); - int numberPDF(int nset); - void usePDFMember(int nset, int member); - double xfx(int nset, double x, double Q, int fl); - double getXmin(int nset, int member); - double getXmax(int nset, int member); - double getQ2min(int nset, int member); - double getQ2max(int nset, int member); - void extrapolate(bool extrapolate = true); -} // namespace LHAPDF - -///////////////////////////////////////////////////////////////////////////////////// -PdfWeightProducer::PdfWeightProducer(const edm::ParameterSet& pset) - : fixPOWHEG_(pset.getUntrackedParameter("FixPOWHEG", "")), - useFirstAsDefault_(pset.getUntrackedParameter("useFirstAsDefault", false)), - genTag_(pset.getUntrackedParameter("GenTag", edm::InputTag("genParticles"))), - genToken_(mayConsume(genTag_)), - pdfInfoTag_(pset.getUntrackedParameter("PdfInfoTag", edm::InputTag("generator"))), - pdfInfoToken_(consumes(pdfInfoTag_)), - pdfSetNames_(pset.getUntrackedParameter >("PdfSetNames")) { - if (!fixPOWHEG_.empty()) - pdfSetNames_.insert(pdfSetNames_.begin(), fixPOWHEG_); - - if (pdfSetNames_.size() > 3) { - edm::LogWarning("") << pdfSetNames_.size() - << " PDF sets requested on input. Using only the first 3 sets and ignoring the rest!!"; - pdfSetNames_.erase(pdfSetNames_.begin() + 3, pdfSetNames_.end()); - } - - for (unsigned int k = 0; k < pdfSetNames_.size(); k++) { - size_t dot = pdfSetNames_[k].find_first_of('.'); - size_t underscore = pdfSetNames_[k].find_first_of('_'); - if (underscore < dot) { - pdfShortNames_.push_back(pdfSetNames_[k].substr(0, underscore)); - } else { - pdfShortNames_.push_back(pdfSetNames_[k].substr(0, dot)); - } - produces >(pdfShortNames_[k]); - } -} - -///////////////////////////////////////////////////////////////////////////////////// -PdfWeightProducer::~PdfWeightProducer() {} - -///////////////////////////////////////////////////////////////////////////////////// -void PdfWeightProducer::beginJob() { - for (unsigned int k = 1; k <= pdfSetNames_.size(); k++) { - LHAPDF::initPDFSet(k, pdfSetNames_[k - 1]); - } -} - -///////////////////////////////////////////////////////////////////////////////////// -void PdfWeightProducer::endJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void PdfWeightProducer::produce(edm::Event& iEvent, const edm::EventSetup&) { - if (iEvent.isRealData()) - return; - - edm::Handle pdfstuff; - if (!iEvent.getByToken(pdfInfoToken_, pdfstuff)) { - edm::LogError("PDFWeightProducer") << ">>> PdfInfo not found: " << pdfInfoTag_.encode() << " !!!"; - return; - } - - float Q = pdfstuff->pdf()->scalePDF; - - int id1 = pdfstuff->pdf()->id.first; - double x1 = pdfstuff->pdf()->x.first; - double pdf1 = pdfstuff->pdf()->xPDF.first; - - int id2 = pdfstuff->pdf()->id.second; - double x2 = pdfstuff->pdf()->x.second; - double pdf2 = pdfstuff->pdf()->xPDF.second; - if (useFirstAsDefault_ && pdf1 == -1. && pdf2 == -1.) { - LHAPDF::usePDFMember(1, 0); - pdf1 = LHAPDF::xfx(1, x1, Q, id1) / x1; - pdf2 = LHAPDF::xfx(1, x2, Q, id2) / x2; - } - - // Ad-hoc fix for POWHEG - if (!fixPOWHEG_.empty()) { - edm::Handle genParticles; - if (!iEvent.getByToken(genToken_, genParticles)) { - edm::LogError("PDFWeightProducer") << ">>> genParticles not found: " << genTag_.encode() << " !!!"; - return; - } - unsigned int gensize = genParticles->size(); - double mboson = 0.; - for (unsigned int i = 0; i < gensize; ++i) { - const reco::GenParticle& part = (*genParticles)[i]; - int status = part.status(); - if (status != 3) - continue; - int id = part.pdgId(); - if (id != 23 && abs(id) != 24) - continue; - mboson = part.mass(); - break; - } - Q = sqrt(mboson * mboson + Q * Q); - LHAPDF::usePDFMember(1, 0); - pdf1 = LHAPDF::xfx(1, x1, Q, id1) / x1; - pdf2 = LHAPDF::xfx(1, x2, Q, id2) / x2; - } - - // Put PDF weights in the event - for (unsigned int k = 1; k <= pdfSetNames_.size(); ++k) { - std::unique_ptr > weights(new std::vector); - unsigned int nweights = 1; - if (LHAPDF::numberPDF(k) > 1) - nweights += LHAPDF::numberPDF(k); - weights->reserve(nweights); - - for (unsigned int i = 0; i < nweights; ++i) { - LHAPDF::usePDFMember(k, i); - double newpdf1 = LHAPDF::xfx(k, x1, Q, id1) / x1; - double newpdf2 = LHAPDF::xfx(k, x2, Q, id2) / x2; - weights->push_back(newpdf1 / pdf1 * newpdf2 / pdf2); - } - iEvent.put(std::move(weights), pdfShortNames_[k - 1]); - } -} - -DEFINE_FWK_MODULE(PdfWeightProducer); diff --git a/ElectroWeakAnalysis/Utilities/src/SimpleSystematicsAnalyzer.cc b/ElectroWeakAnalysis/Utilities/src/SimpleSystematicsAnalyzer.cc deleted file mode 100644 index 78f8813c86cfe..0000000000000 --- a/ElectroWeakAnalysis/Utilities/src/SimpleSystematicsAnalyzer.cc +++ /dev/null @@ -1,147 +0,0 @@ -////////// Header section ///////////////////////////////////////////// -#include "FWCore/Framework/interface/EDFilter.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Common/interface/TriggerResults.h" - -class SimpleSystematicsAnalyzer : public edm::EDFilter { -public: - SimpleSystematicsAnalyzer(const edm::ParameterSet& pset); - ~SimpleSystematicsAnalyzer() override; - bool filter(edm::Event&, const edm::EventSetup&) override; - void beginJob() override; - void endJob() override; - -private: - std::string selectorPath_; - std::vector weightTags_; - std::vector > weightTokens_; - edm::EDGetTokenT triggerResultsToken_; - unsigned int originalEvents_; - std::vector weightedEvents_; - unsigned int selectedEvents_; - std::vector weightedSelectedEvents_; - std::vector weighted2SelectedEvents_; -}; - -////////// Source code //////////////////////////////////////////////// -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "DataFormats/Common/interface/Handle.h" - -#include "FWCore/Common/interface/TriggerNames.h" - -#include "FWCore/Utilities/interface/transform.h" - -///////////////////////////////////////////////////////////////////////////////////// -SimpleSystematicsAnalyzer::SimpleSystematicsAnalyzer(const edm::ParameterSet& pset) - : selectorPath_(pset.getUntrackedParameter("SelectorPath", "")), - weightTags_(pset.getUntrackedParameter >("WeightTags")), - weightTokens_( - edm::vector_transform(weightTags_, [this](edm::InputTag const& tag) { return consumes(tag); })), - triggerResultsToken_(consumes(edm::InputTag("TriggerResults"))) {} - -///////////////////////////////////////////////////////////////////////////////////// -SimpleSystematicsAnalyzer::~SimpleSystematicsAnalyzer() {} - -///////////////////////////////////////////////////////////////////////////////////// -void SimpleSystematicsAnalyzer::beginJob() { - originalEvents_ = 0; - selectedEvents_ = 0; - edm::LogVerbatim("SimpleSystematicsAnalysis") << "Uncertainties will be determined for the following tags: "; - for (unsigned int i = 0; i < weightTags_.size(); ++i) { - edm::LogVerbatim("SimpleSystematicsAnalysis") << "\t" << weightTags_[i].encode(); - weightedEvents_.push_back(0.); - weightedSelectedEvents_.push_back(0.); - weighted2SelectedEvents_.push_back(0.); - } -} - -///////////////////////////////////////////////////////////////////////////////////// -void SimpleSystematicsAnalyzer::endJob() { - if (originalEvents_ == 0) { - edm::LogVerbatim("SimpleSystematicsAnalysis") << "NO EVENTS => NO RESULTS"; - return; - } - if (selectedEvents_ == 0) { - edm::LogVerbatim("SimpleSystematicsAnalysis") << "NO SELECTED EVENTS => NO RESULTS"; - return; - } - - edm::LogVerbatim("SimpleSystematicsAnalysis") << "\n>>>> Begin of Weight systematics summary >>>>"; - edm::LogVerbatim("SimpleSystematicsAnalysis") << "Total number of analyzed data: " << originalEvents_ << " [events]"; - double originalAcceptance = double(selectedEvents_) / originalEvents_; - edm::LogVerbatim("SimpleSystematicsAnalysis") - << "Total number of selected data: " << selectedEvents_ << " [events], corresponding to acceptance: [" - << originalAcceptance * 100 << " +- " - << 100 * sqrt(originalAcceptance * (1. - originalAcceptance) / originalEvents_) << "] %"; - - for (unsigned int i = 0; i < weightTags_.size(); ++i) { - edm::LogVerbatim("SimpleSystematicsAnalysis") << "Results for Weight Tag: " << weightTags_[i].encode() << " ---->"; - - double acc_central = 0.; - double acc2_central = 0.; - if (weightedEvents_[i] > 0) { - acc_central = weightedSelectedEvents_[i] / weightedEvents_[i]; - acc2_central = weighted2SelectedEvents_[i] / weightedEvents_[i]; - } - double waverage = weightedEvents_[i] / originalEvents_; - edm::LogVerbatim("SimpleSystematicsAnalysis") - << "\tTotal Events after reweighting: " << weightedEvents_[i] << " [events]"; - edm::LogVerbatim("SimpleSystematicsAnalysis") - << "\tEvents selected after reweighting: " << weightedSelectedEvents_[i] << " [events]"; - edm::LogVerbatim("SimpleSystematicsAnalysis") - << "\tAcceptance after reweighting: [" << acc_central * 100 << " +- " - << 100 * sqrt((acc2_central / waverage - acc_central * acc_central) / originalEvents_) << "] %"; - double xi = acc_central - originalAcceptance; - double deltaxi = (acc2_central - (originalAcceptance + 2 * xi + xi * xi)) / originalEvents_; - if (deltaxi > 0) - deltaxi = sqrt(deltaxi); - else - deltaxi = 0.; - edm::LogVerbatim("SimpleSystematicsAnalysis") - << "\ti.e. [" << std::setprecision(4) << 100 * xi / originalAcceptance << " +- " << std::setprecision(4) - << 100 * deltaxi / originalAcceptance << "] % relative variation with respect to the original acceptance"; - } - edm::LogVerbatim("SimpleSystematicsAnalysis") << ">>>> End of Weight systematics summary >>>>"; -} - -///////////////////////////////////////////////////////////////////////////////////// -bool SimpleSystematicsAnalyzer::filter(edm::Event& ev, const edm::EventSetup&) { - originalEvents_++; - - bool selectedEvent = false; - edm::Handle triggerResults; - if (!ev.getByToken(triggerResultsToken_, triggerResults)) { - edm::LogError("SimpleSystematicsAnalysis") << ">>> TRIGGER collection does not exist !!!"; - return false; - } - - const edm::TriggerNames& trigNames = ev.triggerNames(*triggerResults); - unsigned int pathIndex = trigNames.triggerIndex(selectorPath_); - bool pathFound = (pathIndex < trigNames.size()); // pathIndex >= 0, since pathIndex is unsigned - if (pathFound) { - if (triggerResults->accept(pathIndex)) - selectedEvent = true; - } - //edm::LogVerbatim("SimpleSystematicsAnalysis") << ">>>> Path Name: " << selectorPath_ << ", selected? " << selectedEvent; - - if (selectedEvent) - selectedEvents_++; - - for (unsigned int i = 0; i < weightTags_.size(); ++i) { - edm::Handle weightHandle; - ev.getByToken(weightTokens_[i], weightHandle); - weightedEvents_[i] += (*weightHandle); - if (selectedEvent) { - weightedSelectedEvents_[i] += (*weightHandle); - weighted2SelectedEvents_[i] += pow((*weightHandle), 2); - } - } - - return true; -} - -DEFINE_FWK_MODULE(SimpleSystematicsAnalyzer); diff --git a/ElectroWeakAnalysis/Utilities/src/WeakEffectsWeightProducer.cc b/ElectroWeakAnalysis/Utilities/src/WeakEffectsWeightProducer.cc deleted file mode 100644 index e2be2eecd29a4..0000000000000 --- a/ElectroWeakAnalysis/Utilities/src/WeakEffectsWeightProducer.cc +++ /dev/null @@ -1,130 +0,0 @@ -////////// Header section ///////////////////////////////////////////// -#include "FWCore/Framework/interface/EDProducer.h" - -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" - -class WeakEffectsWeightProducer : public edm::EDProducer { -public: - WeakEffectsWeightProducer(const edm::ParameterSet& pset); - ~WeakEffectsWeightProducer() override; - void beginJob() override; - void produce(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - -private: - edm::EDGetTokenT genParticlesToken_; - double rhoParameter_; - - double alphaQED(double q2); - double sigma0_qqbarll(unsigned int quark_type, double Q, double rho); -}; - -////////// Source code //////////////////////////////////////////////// -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "DataFormats/Common/interface/Handle.h" - -///////////////////////////////////////////////////////////////////////////////////// -WeakEffectsWeightProducer::WeakEffectsWeightProducer(const edm::ParameterSet& pset) - : // genParticlesToken_(consumes(pset.getUntrackedParameter ("GenParticlesTag", edm::InputTag("genParticles")))), - genParticlesToken_(consumes(edm::InputTag("genParticles"))), - rhoParameter_(pset.getUntrackedParameter("RhoParameter", 1.004)) { - produces(); -} - -///////////////////////////////////////////////////////////////////////////////////// -WeakEffectsWeightProducer::~WeakEffectsWeightProducer() {} - -///////////////////////////////////////////////////////////////////////////////////// -void WeakEffectsWeightProducer::beginJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void WeakEffectsWeightProducer::endJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void WeakEffectsWeightProducer::produce(edm::Event& iEvent, const edm::EventSetup&) { - if (iEvent.isRealData()) - return; - - edm::Handle genParticles; - iEvent.getByToken(genParticlesToken_, genParticles); - unsigned int gensize = genParticles->size(); - - std::unique_ptr weight(new double); - - // Set default weight - (*weight) = 1.; - - // Only DY implemented for the time being - for (unsigned int i = 0; i < gensize; ++i) { - const reco::GenParticle& part = (*genParticles)[i]; - int status = part.status(); - if (status != 3) - break; - int id = part.pdgId(); - if (id != 23) - continue; - double Q = part.mass(); - unsigned int nmothers = part.numberOfMothers(); - if (nmothers <= 0) - continue; - size_t key = part.motherRef(0).key(); - unsigned int quark_id = abs((*genParticles)[key].pdgId()); - if (quark_id > 0 && quark_id < 6) { - (*weight) *= sigma0_qqbarll(quark_id, Q, rhoParameter_) / sigma0_qqbarll(quark_id, Q, 1.0); - } - break; - } - - //printf(" \t >>>>> WeakEffectsWeightProducer: Final weight = %f\n", (*weight)); - iEvent.put(std::move(weight)); -} - -double WeakEffectsWeightProducer::alphaQED(double q2) { - double pigaga = -0.010449239475366825 - 0.0023228196282246765 * log(q2) - 0.0288 - - 0.002980 * (log(q2 / 8464.) + 0.006307 * (q2 / 8464. - 1.)); - return (1. / 137.0359895) / (1. + pigaga); -} - -double WeakEffectsWeightProducer::sigma0_qqbarll(unsigned int quark_id, double Q, double rho) { - double MZ = 91.188; - double GZ = 2.495; - double sin2eff = 0.232; - - double vl = -0.5 + 2. * sin2eff; - double al = -0.5; - - double qq = 0.; - double vq = 0.; - double aq = 0.; - double alphaW = 2.7e-3 * pow(log(Q * Q / 80.4 / 80.4), 2); - double alphaZ = 2.7e-3 * pow(log(Q * Q / MZ / MZ), 2); - double sudakov_factor = 1.; - if (quark_id % 2 == 1) { - qq = -1. / 3.; - vq = -0.5 - 2. * qq * sin2eff; - aq = -0.5; - sudakov_factor = 1 + (-2.139 + 0.864) * alphaW - 0.385 * alphaZ; - } else { - qq = 2. / 3.; - vq = 0.5 - 2. * qq * sin2eff; - aq = 0.5; - sudakov_factor = 1 + (-3.423 + 1.807) * alphaW - 0.557 * alphaZ; - } - - double alfarn = alphaQED(Q * Q); - double zcoupl = sqrt(2.) * 1.166389e-5 * MZ * MZ / 4. / M_PI; - double gll = zcoupl * MZ / 3. * (vl * vl + al * al); - double gdd = zcoupl * MZ / 3. * (vq * vq + aq * aq); - double denom = (Q * Q - MZ * MZ) * (Q * Q - MZ * MZ) + pow(Q, 4) * GZ * GZ / MZ / MZ; - double qed = M_PI * qq * qq * alfarn * alfarn / Q / Q; - double zint = rho * 2 * M_PI * zcoupl * alfarn * qq * vq * vl * (Q * Q - MZ * MZ) / denom; - double zonly = rho * rho * 9. * M_PI * gll * gdd / MZ / MZ * Q * Q / denom; - - return (qed + zint + zonly) * sudakov_factor; -} - -DEFINE_FWK_MODULE(WeakEffectsWeightProducer); diff --git a/ElectroWeakAnalysis/Utilities/test/PdfSystematicsAnalyzer.py b/ElectroWeakAnalysis/Utilities/test/PdfSystematicsAnalyzer.py deleted file mode 100644 index 06c51419e8bbf..0000000000000 --- a/ElectroWeakAnalysis/Utilities/test/PdfSystematicsAnalyzer.py +++ /dev/null @@ -1,71 +0,0 @@ -### NOTE: This is prepared to run on the newest PDFs with LHAPDF >=3.8.4 -### so it requires local installation of LHAPDF libraries in order to run -### out of the box. Otherwise, substitute the PDF sets by older sets - -import FWCore.ParameterSet.Config as cms - -# Process name -process = cms.Process("PDFANA") - -# Max events -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) - #input = cms.untracked.int32(10) -) - -# Printouts -process.MessageLogger = cms.Service("MessageLogger", - cerr = cms.untracked.PSet( - enable = cms.untracked.bool(False) - ), - cout = cms.untracked.PSet( - default = cms.untracked.PSet( - limit = cms.untracked.int32(100) - ), - enable = cms.untracked.bool(True), - threshold = cms.untracked.string('INFO') - ) -) - -# Input files (on disk) -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring("file:/ciet3b/data3/Fall10_All_MinimalAOD/WmunuPLUS/WmunuPLUS_1.root") -) - -# Produce PDF weights (maximum is 3) -process.pdfWeights = cms.EDProducer("PdfWeightProducer", - # Fix POWHEG if buggy (this PDF set will also appear on output, - # so only two more PDF sets can be added in PdfSetNames if not "") - FixPOWHEG = cms.untracked.string("CT10.LHgrid"), - GenTag = cms.untracked.InputTag("prunedGenParticles"), - PdfInfoTag = cms.untracked.InputTag("generator"), - PdfSetNames = cms.untracked.vstring( - "MSTW2008nlo68cl.LHgrid" - , "NNPDF20_100.LHgrid" - ) -) - -# Selector and parameters -process.goodMuonsForW = cms.EDFilter("MuonViewRefSelector", - src = cms.InputTag("muons"), - cut = cms.string('isGlobalMuon=1 && isTrackerMuon=1 && abs(eta)<2.1 && abs(globalTrack().dxy)<0.2 && pt>20. && globalTrack().normalizedChi2<10 && globalTrack().hitPattern().numberOfValidTrackerHits>10 && globalTrack().hitPattern().numberOfValidMuonHits>0 && globalTrack().hitPattern().numberOfValidPixelHits>0 && numberOfMatches>1 && (isolationR03().sumPt+isolationR03().emEt+isolationR03().hadEt)<0.15*pt'), - filter = cms.bool(True) -) - -# Collect uncertainties for rate and acceptance -process.pdfSystematics = cms.EDFilter("PdfSystematicsAnalyzer", - SelectorPath = cms.untracked.string('pdfana'), - PdfWeightTags = cms.untracked.VInputTag( - "pdfWeights:CT10" - , "pdfWeights:MSTW2008nlo68cl" - , "pdfWeights:NNPDF20" - ) -) - -# Main path -process.pdfana = cms.Path( - process.pdfWeights - *process.goodMuonsForW -) - -process.end = cms.EndPath(process.pdfSystematics) diff --git a/ElectroWeakAnalysis/Utilities/test/SimpleSystematicsAnalyzer.py b/ElectroWeakAnalysis/Utilities/test/SimpleSystematicsAnalyzer.py deleted file mode 100644 index e0317b6d6679c..0000000000000 --- a/ElectroWeakAnalysis/Utilities/test/SimpleSystematicsAnalyzer.py +++ /dev/null @@ -1,100 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process name -process = cms.Process("systAna") - -# Max events -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) - #input = cms.untracked.int32(100) -) - -# Printouts -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cout'] -process.MessageLogger.cout = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - FwkReport = cms.untracked.PSet(reportEvery=cms.untracked.int32(100)) -) - -# Input files (on disk) -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring("file:/ciet3a/data4/Wmunu_Summer09-MC_31X_V3_AODSIM-v1/0009/F82D4260-507F-DE11-B5D6-00093D128828.root") - #fileNames = cms.untracked.vstring("file:/data4/ZMuMu_Summer09-MC_31X_V3_preproduction_312-v1_RECO/20A5B350-6979-DE11-A6EF-001560AD3140.root") -) - -# Printout of generator information for the first event -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") -process.printGenParticles = cms.EDAnalyzer("ParticleListDrawer", - #maxEventsToPrint = cms.untracked.int32(-1), - maxEventsToPrint = cms.untracked.int32(10), - printVertex = cms.untracked.bool(False), - src = cms.InputTag("genParticles") -) - -### NOTE: the following WMN selectors require the presence of -### the libraries and plugins fron the ElectroWeakAnalysis/WMuNu package -### So you need to process the ElectroWeakAnalysis/WMuNu package with -### some old CMSSW versions (at least <=3_1_2, <=3_3_0_pre4) -# - -# Selector and parameters -# WMN fast selector (use W candidates in this example) -process.load("ElectroWeakAnalysis.WMuNu.WMuNuSelection_cff") -# ZMM fast selector -#process.load("ElectroWeakAnalysis.Utilities.goldenZmmSelectionVBTF_cfi") - -# Produce event weights according to generated boson Pt -# Example corresponds to approximate weights to study -# systematic effects due to ISR uncertainties (Z boson as fake example) -process.isrWeight = cms.EDProducer("ISRWeightProducer", - GenTag = cms.untracked.InputTag("genParticles"), - ISRBinEdges = cms.untracked.vdouble( - 0., 1., 2., 3., 4., 5., 6., 7., 8., 9. - , 10., 11., 12., 13., 14., 15., 16., 17., 18., 19. - , 20., 21., 22., 23., 24., 25., 26., 27., 28., 29. - , 30., 31., 32., 33., 34., 35., 36., 37., 38., 39. - , 40., 41., 42., 43., 44., 45., 46., 47., 48., 49. - , 999999. - ), - PtWeights = cms.untracked.vdouble( - 0.800665, 0.822121, 0.851249, 0.868285, 0.878733 - , 0.953853, 0.928108, 0.982021, 1.00659 , 1.00648 - , 1.03218 , 1.04924 , 1.03621 , 1.08743 , 1.01951 - , 1.10519 , 0.984263, 1.04853 , 1.06724 , 1.10183 - , 1.0503 , 1.13162 , 1.03837 , 1.12936 , 0.999173 - , 1.01453 , 1.11435 , 1.10545 , 1.07199 , 1.04542 - , 1.00828 , 1.0822 , 1.09667 , 1.16144 , 1.13906 - , 1.27974 , 1.14936 , 1.23235 , 1.06667 , 1.06363 - , 1.14225 , 1.22955 , 1.12674 , 1.03944 , 1.04639 - , 1.13667 , 1.20493 , 1.09349 , 1.2107 , 1.21073 - ) -) - -# Produce event weights to estimate missing QED FSR terms -process.fsrWeight = cms.EDProducer("FSRWeightProducer", - GenTag = cms.untracked.InputTag("genParticles"), -) - -# Produce event weights to estimate missing QED ISR terms -process.isrGammaWeight = cms.EDProducer("ISRGammaWeightProducer", - GenTag = cms.untracked.InputTag("genParticles"), -) - -# Produce weights for systematics -process.systematicsAnalyzer = cms.EDFilter("SimpleSystematicsAnalyzer", - SelectorPath = cms.untracked.string('systAna'), - WeightTags = cms.untracked.VInputTag("isrWeight","fsrWeight","isrGammaWeight") -) - -# Main path -process.systAna = cms.Path( - process.printGenParticles - *process.isrWeight - *process.fsrWeight - *process.isrGammaWeight - *process.selectCaloMetWMuNus - #*process.goldenZMMSelectionSequence -) - -process.end = cms.EndPath(process.systematicsAnalyzer) diff --git a/ElectroWeakAnalysis/Utilities/test/distCaloTCMuMET.py b/ElectroWeakAnalysis/Utilities/test/distCaloTCMuMET.py deleted file mode 100644 index 058a5712cfb6b..0000000000000 --- a/ElectroWeakAnalysis/Utilities/test/distCaloTCMuMET.py +++ /dev/null @@ -1,115 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process, how many events, inout files, ... -process = cms.Process("distortedMuMET") - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( -# 'file:/ciet3b/data4/Spring10_10invpb_AODRED/Wmunu/Wmunu_1.root' - '/store/mc/Spring10/MinBias/GEN-SIM-RECO/START3X_V26A_356ReReco-v1/0009/FEFC70B6-F53D-DF11-B57E-003048679150.root' - ) -) - -# Debug/info printouts -process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring('distortedMuons'), - cout = cms.untracked.PSet( - default = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), - #threshold = cms.untracked.string('INFO') - threshold = cms.untracked.string('DEBUG') - ), - destinations = cms.untracked.vstring('cout') -) - - -# GEN-REC muon matching -process.genMatchMap = cms.EDFilter("MCTruthDeltaRMatcherNew", - src = cms.InputTag("muons"), - matched = cms.InputTag("genParticles"), -# matched = cms.InputTag("prunedGenParticles"), - distMin = cms.double(0.15), - matchPDGId = cms.vint32(13) -) - -# Create a new "distorted" Muon collection -process.distortedMuons = cms.EDFilter("DistortedMuonProducer", - MuonTag = cms.untracked.InputTag("muons"), - GenMatchTag = cms.untracked.InputTag("genMatchMap"), - - EtaBinEdges = cms.untracked.vdouble(-3.,3.), # one more entry than next vectors - - ShiftOnOneOverPt = cms.untracked.vdouble(1.e-3), #in [1/GeV] units - RelativeShiftOnPt = cms.untracked.vdouble(0.), # relative - UncertaintyOnOneOverPt = cms.untracked.vdouble(3.e-3), #in [1/GeV] units - RelativeUncertaintyOnPt = cms.untracked.vdouble(3.e-3), # relative - - EfficiencyRatioOverMC = cms.untracked.vdouble(1.) -) - - -# mm -# mm -# mm now add distorted MET stuff -# mm - - -# mm -# mm first distort Calo -# mm - -process.load("FWCore.MessageService.MessageLogger_cfi") -## configure geometry -process.load("Configuration.StandardSequences.Geometry_cff") -## configure B field -process.load("Configuration.StandardSequences.MagneticField_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.load("TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff") -process.GlobalTag.globaltag = 'START3X_V26::All' - -process.load("ElectroWeakAnalysis.Utilities.distMuonMETValueMapProducer_cff") -process.load("ElectroWeakAnalysis.Utilities.MetdistMuonCorrections_cff") - -# mm -# mm then distort TC -# mm - -process.load("ElectroWeakAnalysis.Utilities.distMuonTCMETValueMapProducer_cff") -process.load("ElectroWeakAnalysis.Utilities.distTCMET_cfi") - - -process.out = cms.OutputModule("PoolOutputModule", - fileName = cms.untracked.string('distMuonMETevents.root') -) -process.out.outputCommands = cms.untracked.vstring( 'drop *' ) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_genParticles_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_offlineBeamSpot_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_TriggerResults_*_HLT')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_hltTriggerSummaryAOD_*_HLT')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_muons_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_distortedMuons_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep recoTracks_globalMuons_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep recoTracks_standAloneMuons_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_met_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_corMetGlobalMuons_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_distMetGlobalMuons_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_tcMet_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_disttcMet_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_pfMet_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_ak5CaloJets_*_*')) - - - -# Steering the process -process.distortedMuMET = cms.Path( - process.genMatchMap+process.distortedMuons - +process.distmuonMETValueMapProducer+process.distMetGlobalMuons - +process.distmuonTCMETValueMapProducer+process.disttcMet -# *process.selectCaloMetWMuNus -) - -process.end = cms.EndPath(process.out) -#process.end = cms.EndPath(process.wmnOutput) - diff --git a/ElectroWeakAnalysis/Utilities/test/distPFMuMET.py b/ElectroWeakAnalysis/Utilities/test/distPFMuMET.py deleted file mode 100644 index 73ed0e40bc5ea..0000000000000 --- a/ElectroWeakAnalysis/Utilities/test/distPFMuMET.py +++ /dev/null @@ -1,166 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("REPROD") - - - - - -# mm -# mm -# mm - -# GEN-REC muon matching -process.genMatchMap = cms.EDFilter("MCTruthDeltaRMatcherNew", - src = cms.InputTag("muons"), - matched = cms.InputTag("genParticles"), - distMin = cms.double(0.15), - matchPDGId = cms.vint32(13) -) - - - - - -# Create a new "distorted" PFCandidate collection -process.distortedPFCand = cms.EDFilter("DistortedPFCandProducer", - MuonTag = cms.untracked.InputTag("muons"), - PFTag = cms.untracked.InputTag("particleFlow"), - GenMatchTag = cms.untracked.InputTag("genMatchMap"), - - EtaBinEdges = cms.untracked.vdouble(-3.,3.), # one more entry than next vectors - - ShiftOnOneOverPt = cms.untracked.vdouble(1.e-3), #in [1/GeV] units - RelativeShiftOnPt = cms.untracked.vdouble(0.), # relative - UncertaintyOnOneOverPt = cms.untracked.vdouble(3.e-3), #in [1/GeV] units - RelativeUncertaintyOnPt = cms.untracked.vdouble(3.e-3), # relative - - EfficiencyRatioOverMC = cms.untracked.vdouble(1.) -) - - - -# Create the old distortedMuon collection -process.distortedMuons = cms.EDFilter("DistortedMuonProducer", - MuonTag = cms.untracked.InputTag("muons"), - GenMatchTag = cms.untracked.InputTag("genMatchMap"), - - EtaBinEdges = cms.untracked.vdouble(-3.,3.), # one more entry than next vectors - - ShiftOnOneOverPt = cms.untracked.vdouble(1.e-3), #in [1/GeV] units - RelativeShiftOnPt = cms.untracked.vdouble(0.), # relative - UncertaintyOnOneOverPt = cms.untracked.vdouble(3.e-3), #in [1/GeV] units - RelativeUncertaintyOnPt = cms.untracked.vdouble(3.e-3), # relative - - EfficiencyRatioOverMC = cms.untracked.vdouble(1.) -) - - - - - - -# mm -# mm -# mm - - - -process.load("Configuration.StandardSequences.Reconstruction_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") -process.load("Configuration.StandardSequences.Geometry_cff") -process.load('Configuration/StandardSequences/FrontierConditions_GlobalTag_cff') -process.GlobalTag.globaltag = 'START3X_V26A::All' -#process.load("Configuration.StandardSequences.FakeConditions_cff") - -# process.Timing =cms.Service("Timing") -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( -# 'file:/data4/Wmunu_Summer09-MC_31X_V3-v1_GEN-SIM-RECO/0009/76E35258-507F-DE11-9A21-0022192311C5.root' - '/store/mc/Spring10/MinBias/GEN-SIM-RECO/START3X_V26A_356ReReco-v1/0009/FEFC70B6-F53D-DF11-B57E-003048679150.root' - ), - secondaryFileNames = cms.untracked.vstring(), - noEventSort = cms.untracked.bool(True), - duplicateCheckMode = cms.untracked.string('noDuplicateCheck') -) - -#process.MessageLogger = cms.Service("MessageLogger", -# rectoblk = cms.untracked.PSet( -# threshold = cms.untracked.string('INFO') -# ), -# destinations = cms.untracked.vstring('rectoblk') -#) - -process.dump = cms.EDAnalyzer("EventContentAnalyzer") - -process.load("ElectroWeakAnalysis.Utilities.distPFMET_cfi") - - -process.p1 = cms.Path(process.genMatchMap+process.distortedMuons - +process.distortedPFCand+process.distpfMet) - - -# And the output. - -process.out = cms.OutputModule("PoolOutputModule", - fileName = cms.untracked.string('PFMuMETevents.root') -) - - -process.out.outputCommands = cms.untracked.vstring( 'drop *' ) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_genParticles_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_offlineBeamSpot_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_TriggerResults_*_HLT')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_hltTriggerSummaryAOD_*_HLT')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_muons_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_particleFlow_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_distortedMuons_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_distortedPFCand_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep recoTracks_globalMuons_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep recoTracks_standAloneMuons_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_met_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_corMetGlobalMuons_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_tcMet_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_pfMet_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_distpfMet_*_*')) -process.out.outputCommands.extend(cms.untracked.vstring('keep *_ak5CaloJets_*_*')) - - -process.outpath = cms.EndPath(process.out) - - - - -# And the logger -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( - makeTriggerResults = cms.untracked.bool(True), - wantSummary = cms.untracked.bool(True), - Rethrow = cms.untracked.vstring('Unknown', - 'ProductNotFound', - 'DictionaryNotFound', - 'InsertFailure', - 'Configuration', - 'LogicError', - 'UnimplementedFeature', - 'InvalidReference', - 'NullPointerError', - 'NoProductSpecified', - 'EventTimeout', - 'EventCorruption', - 'ModuleFailure', - 'ScheduleExecutionFailure', - 'EventProcessorFailure', - 'FileInPathError', - 'FatalRootError', - 'NotFound') -) - -process.MessageLogger.cerr.FwkReport.reportEvery = 1 - - diff --git a/ElectroWeakAnalysis/Utilities/test/distortedMET.py b/ElectroWeakAnalysis/Utilities/test/distortedMET.py deleted file mode 100644 index 6a737e5e73eb8..0000000000000 --- a/ElectroWeakAnalysis/Utilities/test/distortedMET.py +++ /dev/null @@ -1,56 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process, how many events, inout files, ... -process = cms.Process("distortMET") - -process.maxEvents = cms.untracked.PSet( - #input = cms.untracked.int32(-1) - input = cms.untracked.int32(100) -) -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring("file:/data4/Wmunu_Summer09-MC_31X_V3_AODSIM-v1/0009/F82D4260-507F-DE11-B5D6-00093D128828.root") -) - -# Debug/info printouts -process.MessageLogger = cms.Service("MessageLogger", - cout = cms.untracked.PSet( - default = cms.untracked.PSet( limit = cms.untracked.int32(100) ), - threshold = cms.untracked.string('INFO') - #threshold = cms.untracked.string('DEBUG') - ), - destinations = cms.untracked.vstring('cout') -) - -# Selector and parameters -process.distortedMET = cms.EDFilter("DistortedMETProducer", - MetTag = cms.untracked.InputTag("met"), - MetScaleShift = cms.untracked.double(0.2) -) - -### NOTE: the following WMN selectors require the presence of -### the libraries and plugins fron the ElectroWeakAnalysis/WMuNu package -### So you need to process the ElectroWeakAnalysis/WMuNu package with -### some old CMSSW versions (at least <=3_1_2, <=3_3_0_pre4) -# - -# WMN fast selector (use W candidates in this example) -process.load("ElectroWeakAnalysis.WMuNu.WMuNuSelection_cff") - -# Output -process.load("Configuration.EventContent.EventContent_cff") -process.AODSIMEventContent.outputCommands.append('keep *_distortedMET_*_*') -process.myEventContent = process.AODSIMEventContent -process.wmnOutput = cms.OutputModule("PoolOutputModule", - process.myEventContent, - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('distortMET') - ), - fileName = cms.untracked.string('selectedEvents.root') -) - -# Steering the process -process.distortMET = cms.Path( - process.distortedMET - *process.selectCaloMetWMuNus -) -process.end = cms.EndPath(process.wmnOutput) diff --git a/ElectroWeakAnalysis/Utilities/test/distortedMuons.py b/ElectroWeakAnalysis/Utilities/test/distortedMuons.py deleted file mode 100644 index 5cde01634004b..0000000000000 --- a/ElectroWeakAnalysis/Utilities/test/distortedMuons.py +++ /dev/null @@ -1,79 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process, how many events, inout files, ... -process = cms.Process("distortMuons") - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) - #input = cms.untracked.int32(100) -) -process.source = cms.Source("PoolSource", - #fileNames = cms.untracked.vstring("file:/data4/Wmunu_Summer09-MC_31X_V3-v1_GEN-SIM-RECO/0009/76E35258-507F-DE11-9A21-0022192311C5.root") - fileNames = cms.untracked.vstring("file:/data4/Wmunu_Summer09-MC_31X_V3_AODSIM-v1/0009/F82D4260-507F-DE11-B5D6-00093D128828.root") -) - -# Debug/info printouts -process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring('distortedMuons'), - cout = cms.untracked.PSet( - default = cms.untracked.PSet( limit = cms.untracked.int32(1000) ), - #threshold = cms.untracked.string('INFO') - threshold = cms.untracked.string('DEBUG') - ), - destinations = cms.untracked.vstring('cout') -) - -# GEN-REC muon matching -process.genMatchMap = cms.EDFilter("MCTruthDeltaRMatcherNew", - src = cms.InputTag("muons"), - matched = cms.InputTag("genParticles"), - distMin = cms.double(0.15), - matchPDGId = cms.vint32(13) -) - -# Create a new "distorted" Muon collection -process.distortedMuons = cms.EDFilter("DistortedMuonProducer", - MuonTag = cms.untracked.InputTag("muons"), - GenMatchTag = cms.untracked.InputTag("genMatchMap"), - - EtaBinEdges = cms.untracked.vdouble(-2.1,2.1), # one more entry than next vectors - - ShiftOnOneOverPt = cms.untracked.vdouble(1.e-3), #in [1/GeV] units - RelativeShiftOnPt = cms.untracked.vdouble(0.), # relative - UncertaintyOnOneOverPt = cms.untracked.vdouble(2.e-3), #in [1/GeV] units - RelativeUncertaintyOnPt = cms.untracked.vdouble(5.e-3), # relative - - EfficiencyRatioOverMC = cms.untracked.vdouble(0.90) -) - -### NOTE: the following WMN selectors require the presence of -### the libraries and plugins fron the ElectroWeakAnalysis/WMuNu package -### So you need to process the ElectroWeakAnalysis/WMuNu package with -### some old CMSSW versions (at least <=3_1_2, <=3_3_0_pre4) -# - -# WMN fast selector (use W candidates in this example) -process.load("ElectroWeakAnalysis.WMuNu.WMuNuSelection_cff") -process.corMetWMuNus.MuonTag = cms.untracked.InputTag("distortedMuons") -process.selcorMet.MuonTag = cms.untracked.InputTag("distortedMuons") - -# Output -process.load("Configuration.EventContent.EventContent_cff") -process.AODSIMEventContent.outputCommands.append('keep *_distortedMuons_*_*') -process.myEventContent = process.AODSIMEventContent -process.wmnOutput = cms.OutputModule("PoolOutputModule", - process.myEventContent, - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('distortMuons') - ), - fileName = cms.untracked.string('selectedEvents.root') -) - -# Steering the process -process.distortMuons = cms.Path( - process.genMatchMap - *process.distortedMuons - *process.selectCaloMetWMuNus -) - -process.end = cms.EndPath(process.wmnOutput) diff --git a/ElectroWeakAnalysis/Utilities/test/distortedMuonsFromDB.py b/ElectroWeakAnalysis/Utilities/test/distortedMuonsFromDB.py deleted file mode 100644 index a2a2fb3f31902..0000000000000 --- a/ElectroWeakAnalysis/Utilities/test/distortedMuonsFromDB.py +++ /dev/null @@ -1,112 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process, how many events, inout files, ... -process = cms.Process("distortMuonsFromDB") - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) - #input = cms.untracked.int32(100) -) -process.source = cms.Source("PoolSource", - #fileNames = cms.untracked.vstring("file:/data4/Wmunu_Summer09-MC_31X_V3-v1_GEN-SIM-RECO/0009/76E35258-507F-DE11-9A21-0022192311C5.root") - fileNames = cms.untracked.vstring("file:/data4/Wmunu_Summer09-MC_31X_V3_AODSIM-v1/0009/F82D4260-507F-DE11-B5D6-00093D128828.root") -) - -# Debug/info printouts -process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring('distortedMuons'), - cout = cms.untracked.PSet( - default = cms.untracked.PSet( limit = cms.untracked.int32(1000) ), - #threshold = cms.untracked.string('INFO') - threshold = cms.untracked.string('DEBUG') - ), - destinations = cms.untracked.vstring('cout') -) - -# Database for scale shift if process.distortedMuons.UseDBForMomentumScale = True -process.load("CondCore.DBCommon.CondDBCommon_cfi") -process.poolDBESSource1 = cms.ESSource("PoolDBESSource", - BlobStreamerName = cms.untracked.string('TBufferBlobStreamingService'), - DBParameters = cms.PSet( - messageLevel = cms.untracked.int32(2) - ), - timetype = cms.untracked.string('runnumber'), - connect = cms.string('frontier://FrontierPrep/CMS_COND_PHYSICSTOOLS'), - toGet = cms.VPSet( - cms.PSet( - record = cms.string('MuScleFitDBobjectRcd'), - tag = cms.string('MuScleFit_Scale_OctoberExercise_EWK_InnerTrack'), - label = cms.untracked.string('') - ) - ) -) -process.poolDBESSource2 = cms.ESSource("PoolDBESSource", - BlobStreamerName = cms.untracked.string('TBufferBlobStreamingService'), - DBParameters = cms.PSet( - messageLevel = cms.untracked.int32(2) - ), - timetype = cms.untracked.string('runnumber'), - connect = cms.string('frontier://FrontierPrep/CMS_COND_PHYSICSTOOLS'), - toGet = cms.VPSet( - cms.PSet( - record = cms.string('MuScleFitDBobjectRcd'), - tag = cms.string('MuScleFit_Resol_OctoberExercise_EWK_InnerTrack_WithLabel'), - label = cms.untracked.string('MuScleFit_Resol_OctoberExercise_EWK_InnerTrack_WithLabel') - ) - ) -) -process.poolDBESSource3 = cms.ESSource("PoolDBESSource", - BlobStreamerName = cms.untracked.string('TBufferBlobStreamingService'), - DBParameters = cms.PSet( - messageLevel = cms.untracked.int32(2) - ), - timetype = cms.untracked.string('runnumber'), - connect = cms.string('frontier://FrontierPrep/CMS_COND_PHYSICSTOOLS'), - toGet = cms.VPSet( - cms.PSet( - record = cms.string('MuScleFitDBobjectRcd'), - tag = cms.string('MuScleFit_Resol_OctoberExercise_SherpaIdealMC_WithLabel'), - label = cms.untracked.string('MuScleFit_Resol_OctoberExercise_SherpaIdealMC_WithLabel') - ) - ) -) - -# Create a new "distorted" Muon collection -process.distortedMuons = cms.EDFilter("DistortedMuonProducerFromDB", - MuonTag = cms.untracked.InputTag("muons"), - - DBScaleLabel = cms.untracked.string(''), - DBDataResolutionLabel = cms.untracked.string('MuScleFit_Resol_OctoberExercise_EWK_InnerTrack_WithLabel'), - DBMCResolutionLabel = cms.untracked.string('MuScleFit_Resol_OctoberExercise_SherpaIdealMC_WithLabel'), -) - -### NOTE: the following WMN selectors require the presence of -### the libraries and plugins fron the ElectroWeakAnalysis/WMuNu package -### So you need to process the ElectroWeakAnalysis/WMuNu package with -### some old CMSSW versions (at least <=3_1_2, <=3_3_0_pre4) -# - -# WMN fast selector (use W candidates in this example) -process.load("ElectroWeakAnalysis.WMuNu.WMuNuSelection_cff") -process.corMetWMuNus.MuonTag = cms.untracked.InputTag("distortedMuons") -process.selcorMet.MuonTag = cms.untracked.InputTag("distortedMuons") - -# Output -process.load("Configuration.EventContent.EventContent_cff") -process.AODSIMEventContent.outputCommands.append('keep *_distortedMuons_*_*') -process.myEventContent = process.AODSIMEventContent -process.wmnOutput = cms.OutputModule("PoolOutputModule", - process.myEventContent, - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('distortMuons') - ), - fileName = cms.untracked.string('selectedEvents.root') -) - -# Steering the process -process.distortMuons = cms.Path( - process.distortedMuons - *process.selectCaloMetWMuNus -) - -process.end = cms.EndPath(process.wmnOutput) diff --git a/ElectroWeakAnalysis/Utilities/test/muonsWithPFIso.py b/ElectroWeakAnalysis/Utilities/test/muonsWithPFIso.py deleted file mode 100644 index 8460bc4aa915c..0000000000000 --- a/ElectroWeakAnalysis/Utilities/test/muonsWithPFIso.py +++ /dev/null @@ -1,60 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process, how many events, inout files, ... -process = cms.Process("muonsWithPFIso") - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) - #input = cms.untracked.int32(100) -) -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring("file:/ciet3b/data4/Spring10_10invpb_AODRED/Wmunu_1.root") -) - -# Debug/info printouts -process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring('muonsWithPFIso'), - cout = cms.untracked.PSet( - default = cms.untracked.PSet( limit = cms.untracked.int32(100) ), - #threshold = cms.untracked.string('INFO') - threshold = cms.untracked.string('DEBUG') - ), - destinations = cms.untracked.vstring('cout') -) - -# Create a new reco::Muon collection with PFLow Iso information -process.muonsWithPFIso = cms.EDFilter("MuonWithPFIsoProducer", - MuonTag = cms.untracked.InputTag("muons") - , PfTag = cms.untracked.InputTag("particleFlow") - , UsePfMuonsOnly = cms.untracked.bool(False) - , TrackIsoVeto = cms.untracked.double(0.01) - , GammaIsoVeto = cms.untracked.double(0.07) - , NeutralHadronIsoVeto = cms.untracked.double(0.1) -) - -# WMN fast selector (use W candidates in this example) -process.load("ElectroWeakAnalysis.WMuNu.WMuNuSelection_cff") -process.pfMetWMuNus.MuonTag = cms.untracked.InputTag("muonsWithPFIso") -process.selpfMet.MuonTag = cms.untracked.InputTag("muonsWithPFIso") -# Use the following line only for old Summer09 samples (new: "ak5", old "antikt5") -#process.selpfMet.JetTag = cms.untracked.InputTag("antikt5PFJets") - -# Output -process.load("Configuration.EventContent.EventContent_cff") -process.AODSIMEventContent.outputCommands.append('keep *_muonsWithPFIso_*_*') -process.myEventContent = process.AODSIMEventContent -process.wmnOutput = cms.OutputModule("PoolOutputModule", - process.myEventContent, - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('muonsWithPFIsoSelection') - ), - fileName = cms.untracked.string('selectedEvents.root') -) - -# Steering the process -process.muonsWithPFIsoSelection = cms.Path( - process.muonsWithPFIso* - process.selectPfMetWMuNus -) - -process.end = cms.EndPath(process.wmnOutput) diff --git a/ElectroWeakAnalysis/WENu/BuildFile.xml b/ElectroWeakAnalysis/WENu/BuildFile.xml deleted file mode 100644 index bd87e12c40810..0000000000000 --- a/ElectroWeakAnalysis/WENu/BuildFile.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/ElectroWeakAnalysis/WENu/README b/ElectroWeakAnalysis/WENu/README deleted file mode 100644 index a14e313c661b3..0000000000000 --- a/ElectroWeakAnalysis/WENu/README +++ /dev/null @@ -1,189 +0,0 @@ -NOTES AND INSTRUCTIONS FOR THE CODE -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -This code creates Wenu or Zee candidates from some configurable trigger stream -and applies some selections. It contains the following files: -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -source and header files: ------------------------- -WenuCandidateFilter.cc -ZeeCandidateFilter.cc -WenuPlots.h and WenuPlots.cc -ZeePlots.h and ZeePlots.cc - -cfg files: ----------- -pat_WenuPlots.py aod_WenuPlots.py -pat_ZeePlots.py aod_ZeePlots.py - -macros: -------- -PlotCombiner.cc -inputFiles - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -For details with respect to the definitions of candidates check the -implementation notes in all source files. - -There are 2 ways to run this code: either running the whole PAT sequence -(recommended) or bypassing pat and run with whatever exists precalculated -in the AOD collections. - -Run the code without running the PAT sequence -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Quick instruction: cmsRun aod_WenuPlots.py or cmsRun aod_ZeePlots.py - - -An interface that is provided aod2patFilter.cc creates pat::ElectronCollection -and pat::METCollection from AOD. This uses the default pat constructors. -Isolations are added manually to the the PAT objects in the following way: - myElectron.setTrackIso(elec->dr03TkSumPt()); - myElectron.setECalIso(elec->dr04EcalRecHitSumEt()); - myElectron.setHCalIso(elec->dr04HcalTowerSumEt()); -Please edit this part accordingly, if you prefere different isolation -definitions. No facility to calculate your own isolations is provided. If you -want to do so you have to run the PAT sequence yourself. (see next session) - - -Running the whole PAT sequence yourself -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Quick instruction: cmsRun pat_WenuPlots.py or cmsRun pat_ZeePlots.py - ->>>>>CMSSW versions 3_1_X - -The software has been tested and run successfully with the following tags: -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -Test Release based on: CMSSW_3_1_2 ---- Tag --- -------- Package -------- -V01-08-08 CondFormats/JetMETObjects -V05-06-05 DataFormats/PatCandidates -V01-08-04-01 JetMETCorrections/Algorithms -V01-08-21 JetMETCorrections/Configuration -V02-09-05 JetMETCorrections/Modules -V07-08-22-01 PhysicsTools/PatAlgos -V03-07-06 PhysicsTools/PatUtils -V04-02-02 PhysicsTools/PFCandProducer -V02-10-01 RecoJets/JetAlgorithms -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -However, it can be run just with CMSSW_3_1_2 without any further tags and -should produce the same results. -For 3_1_4 and above no extra tags are required. - ->>>>>CMSSW versions 3_X where X > 1 -The code should compile and run properly without any extra tags. -Notice that any change that has been done in the header is backwards compatible -i.e. it compiles, runs and produces the same results, if you use the recommended -configuration files pat_WenuPlots.py and pat_ZeePlots.py. - - -Instructions: -^^^^^^^^^^^^^ - (the following hold for both Wenu and Zee plots) - In the cfg file that is provided you have to edit the following lines:.... - * line 17: the source - these are the input files ->>> * line 30: select your Global Tag: - STARTUP31X_V4::All this is good for the low lumi trigger menu - MC_31X_V5::All this is good for the highlumi trigger menu ->>> * line 71: the MET collection of your preference - LINE 72: modify the "metSource" to take whatever met you like - the default that is given is "met","","RECO" that is - uncorrected Calo MET. ->>> * line 96: select your Trigger path. There are 3 parameters that you set: - LINE 96: HLT_process_name : high (HLT) or low (HLT8E29) lumi - menu.............................. - LINE 98 and 100: the path and the filter names. For your...... - convenience all the correct pairs are given.. - at the end of the cfg file................... ->>> * line102: the Filter: select the parameters that you want. ONLY these... - parameters have to be changed:................................ - ETCut double the ET cut in the SC ET of the candidate - METCut double the MET cut in the MET of the event - vetoSecondElectronEvents bool (only Wenu) on/off rejection of - events with a 2nd electron with ET>see nextpara - ETCut2ndEle double the ET cut for the 2nd electron rejection - electronMatched2HLT bool demand the electron to be matched to - an HLT object (in Zee means at least one electron) - electronMatched2HLT_DR double the DR for the HLT matching ->>> * line124: set the selection cuts that you prefere........................ ->>> * line159: set the cuts that you want to invert........................... ->>> * line168: set the name of your selection PSet............................ - - -How to add the histograms and make the final plots -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -(applies to all versions) - -After you have done these changes you can run over the grid over the different -datasets. The histograms are stored in root trees that you can hadd together. -For example if you have run over QCD Em enriched samples with say 10 jobs you -will finally get out 10 files -histos_1.root, histos_2, ...., histos_10.root -that you can combine -hadd histos_qcd.root histos_1.root histos_2.root .... - -Having added the different bkgs together you set up file "inputFiles" -with the following format: -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -# zee or wenu -wenu -# file name, type (sig, qcd, bce, gje, ewk), weight -histos_wenu.root sig 1.46 -histos_q20_30.root qcd 0 -histos_q30_80.root qcd 100. -histos_q80_170.root qcd 0 -histos_b20_30.root bce 0 -histos_b30_80.root bce 0 -histos_b80_170.root bce 0 -histos_zee.root ewk 0 -histos_wtaunu.root ewk 0 -histos_ztautau.root ewk 0 -histos_gj15.root gje 0 -histos_gj20.root gje 0 -histos_gj25.root gje 10.12 -histos_gj30.root gje 0 -histos_gj35.root gje 0 -histos_wmunu.root ewk 0 -histos_ttbar.root ewk 0 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -lines that start with # are considered to be comments -line 2 has wenu or zee. From line 4 the list of the histo files are listed -(first word) then a type that could be sig,qcd,bce, gj or ewk in order to -discriminate among different sources of bkgs and finally the weight that we -want to weight the histogram entries. This particular example is for Wenu. For -Zee one has to put type sig in the zee file and ewk in the Wenu file. The order -of the files is arbitrary. Files with weight 0 will be ignored. -After you have set up this code you run a root macro to combine the plots. -You can do (not recommended - it actually crushes - to be debugged) -root -b PlotCombiner.cc -or to compile it within root (recommended) -root -b -root [1] .L PlotCombiner.cc++ -root [2] PlotCombiner() - -and you finally get the plots. - -Notes on Data Handling: -^^^^^^^^^^^^^^^^^^^^^^^ - -The code can also run with data. What you have to change is the Global Tag -(refer to the twiki page: -https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideFrontierConditions ) -and remove references in the cfg with respect to generator level -quantities that pat default may need. - -Contact - -Nikolaos.Rompotis@Cern.ch - -18Sept09 - -Nikolaos Rompotis -Imperial College London - - - diff --git a/ElectroWeakAnalysis/WENu/doc/logForChangesInTheWenuCode.txt b/ElectroWeakAnalysis/WENu/doc/logForChangesInTheWenuCode.txt deleted file mode 100644 index 2ce298f305aa8..0000000000000 --- a/ElectroWeakAnalysis/WENu/doc/logForChangesInTheWenuCode.txt +++ /dev/null @@ -1,120 +0,0 @@ -# file to keep track of the changes in the Wenu and Zee Code -# Nikolaos Rompotis - - -v_29Oct09_2 ElectroWeakAnalysis/WENu ElectroWeakAnalysis/ZEE - version for 3_1_4, used with the OctX - -v_10Dec09_v1 ElectroWeakAnalysis/WENu ElectroWeakAnalysis/ZEE - these work in 3_1 and later versions. There was a change in the PAT - so that we cannot use ecalIso() etc methods, but we have to use instead - userIsolation(pat::ecalIso) when we want to access the pat produced isolations -Note: from 3_3_1 onwards the pat::Electron object contains the ecalIso() etc functions - that overload the pat::Lepton classes, giving the egamma stored values of the - isolations. That was not the case in the previous versions - - -v_05Jan10_v1 ElectroWeakAnalysis/WENu ElectroWeakAnalysis/ZEE - the same as before, but now the file - DataFormats/METReco/interface/METCollection.h - is obsolete. We can just replace this file with METFwd.h - however it was decided to remove from the tag the file aod2patFilterWenu.cc - and aod2patFilterZee.cc, because their use is deprecated -v_05Jan10_v3 ElectroWeakAnalysis/WENu ElectroWeakAnalysis/ZEE -or V00-01-02 - a line in WENu/src/WenuPlots.cc was commented out so that there is no - warning in compilation. The name V00-01-02 was done for compatibility - CMS tag collector format and is is identical to v_05Jan10_v3 - - - -/ZEE V00-01-02-01 branch B3_4_X this is for a clean up in the TFileService - all the following should be based on that - -/ZEE V00-01-02 -/WENu V00-01-02 tags for 3_4_X release - - -/ZEE V00-01-07 -/WENu V00-01-06 tags for 3_6_X release - -/ZEE V00-01-08 -/WENu V00-01-07 tags for 3_6_X release (again) - - -v_19Feb10_Hbk: this is a back up for the WENu head, compiled and tested in 3_5_1 -v_19Feb10_idmaps: this is the first implementation of the idmaps in WENu - there is a caveat there, only pat_WenuPlots.py is updated from the - cfgs - -v_23Feb10_convrej_idmaps: adding on top of v_19Feb10_idmaps e/p and tip as variables - with default values 1000. in WenuCandidateFilter added the option - to use egamma conversion rejection, valid first PXB hit and - expected missing hits criteria. only pat_WenuPlots.py is updated. - -v_25Feb10_convrej_idmaps : adding the option to calculate and store in the electron - conversion rejection and hit pattern info. only pat_WenuPlots.py is updated. - This tag also applies to ZEE - same in the zee candidate producer. But now the option to have separate cuts in each of the 2 electrons separately is added. - Caveat: the electrons are distinguished from the highest ET electron. Hence the selection 1 - is applied to the highest et electron and selection 2 to the other one. We may need something different - in data, but we can change it if we like. the basic framework is there. - only pat_ZeePlots.py is updated. - -v_1March10_convrej_idmaps : adding the option the 2nd ele id veto to be applied to - an electron that passes electron id. again only pat_WenuPlots.py - is updated. applicable to WENu only - -/WENu v_26May10_Spring10MC : test version adding python directory with the spring10 tuned selections - bug fixes and everything should work for Spring10 MC samples - this tag works with RecoEgamma/ElectronIdentification V00-03-07-02 - the tag is for the correct implementation of the electron ID cfgs in the python dir - has to be updated for the latest tag of electron ID - -/WENu V00-01-07-01 : version that works with CMSSW_3_6_1_patch2 and - V00-03-07-03 RecoEgamma/ElectronIdentification - Contains configuration valid for both data and MC, Spring10 selections implemented. - -ZEE V00-01-08-02 : version that works with CMSSW_3_6_1_patch2 and - V00-03-07-03 RecoEgamma/ElectronIdentification - Contains configuration valid for both data and MC, Spring10 selections implemented. - Similar to the WENu tag V00-01-07-01 - -V00-01-07-02 update of python configuration with the new cuts (Paolo's limits) - -/WENu V00-01-07-03 same as V00-01-07-02 (i.e. Paolo's new limits) but all cfg.py are - updated so that you have 80% selection plus no 2nd ele with 95% selection, 25GeV - and photon 10 trigger - -/ZEE V00-01-08-03 made to be similar to the WENu V00-01-07-03 - V00-01-08-04 to correct a bug in pushing back the 2nd leg variables, thanks to Jie Chen - -/WENu V00-01-08-01 major upgrade: VBTF ntuple production for CMSSW_3_6_1_patch4 (bug fix to V00-01-08) - Needs the following tags: - RecoEgamma/ElectronIdentification V00-03-12 - RecoEgamma/EgammaTools V00-05-05 - CondFormats/JetMETObjects V01-09-01-09 - -V00-01-08-02 update, bug corrected -V00-01-08-03 update, 2nd ele included, same other tags as before -V00-01-08-04 update, bugs corrected -V00-01-08-05 same as before, but removing Delta eta cut for the Endcaps - EGAMMA ICHEP recommendation -V00-01-08-06 bug corrected in the HLT geometrical matching - option added to store all the parameters of the second electron -V00-01-08-07 the primary vtx information is moved from the filter to the analyzer - more variables stored: Rho of the SC, number of tracks per primary vtx (as a vector of ints) - norm chi2 per primary vtx, both for offlineVertexCollection and offlineVertexCollectionBS -V00-01-08-08 slightly updated version of the previous tag, with a small "bug" corrected (set up to use - the ideal magnetic field even in data if the current is not stored in the event). Intended - to be the last tag for the 3_6_X configuration. This tag can compile on 3_8_2 without further - tags - however, wait for the 38 recipee, regarding JEC and egamma misalignment corrections. -V00-01-08-09 tag for 361: this is for the 3/pb VBTF ntuple production. 2 changes: - a. HoE cut in the cfgs becomes 0.15 - only WP95 is affected - b. trigger collection in WenuCandidateFilter is updated -V00-01-08-10 bug fix on the previous tag on the extra triggers in OR. The extra triggers were not looked for - correctly and if they there first in the list of event triggers would not appear at all - -V00-02-01 first dedicated tag to 38: the configuration has changed such that now the Deta cut in the EE is - applied. Still needs extra tags: V00-03-13 RecoEgamma/ElectronIdentification --- -latest update: 4 Nov 2010 \ No newline at end of file diff --git a/ElectroWeakAnalysis/WENu/interface/GenPurposeSkimmer.h b/ElectroWeakAnalysis/WENu/interface/GenPurposeSkimmer.h deleted file mode 100644 index 51465aed473b4..0000000000000 --- a/ElectroWeakAnalysis/WENu/interface/GenPurposeSkimmer.h +++ /dev/null @@ -1,199 +0,0 @@ -#ifndef GenPurposeSkimmer_H -#define GenPurposeSkimmer_H - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -// other files -// root + maths -#include "TFile.h" -#include "TBranch.h" -#include "TTree.h" -#include "TVector.h" -#include "TString.h" -#include "TMath.h" -// -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/EgammaCandidates/interface/Electron.h" -#include "DataFormats/EgammaCandidates/interface/ElectronFwd.h" -// -#include "DataFormats/Common/interface/TriggerResults.h" -#include "FWCore/Common/interface/TriggerNames.h" -#include "DataFormats/HLTReco/interface/TriggerEventWithRefs.h" -#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" -#include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" -#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/HLTReco/interface/TriggerObject.h" - -// -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/METReco/interface/CaloMET.h" -#include "DataFormats/METReco/interface/CaloMETFwd.h" -#include "DataFormats/METReco/interface/PFMET.h" -#include "DataFormats/METReco/interface/PFMETFwd.h" -#include "DataFormats/METReco/interface/GenMET.h" -#include "DataFormats/METReco/interface/GenMETFwd.h" - -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h" -// -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" -#include "DataFormats/Common/interface/ValueMap.h" - -#include "DataFormats/PatCandidates/interface/Electron.h" -#include "DataFormats/PatCandidates/interface/MET.h" -#include "DataFormats/Math/interface/deltaR.h" -// -// class decleration -// - -class GenPurposeSkimmer : public edm::EDAnalyzer { -public: - explicit GenPurposeSkimmer(const edm::ParameterSet&); - ~GenPurposeSkimmer(); - -private: - virtual void beginJob(const edm::EventSetup&); - virtual void analyze(const edm::Event&, const edm::EventSetup&); - virtual void endJob(); - - // ----------member data --------------------------- - - std::string outputFile_; - int tree_fills_; - - edm::InputTag ElectronCollection_; - edm::InputTag MCCollection_; - edm::InputTag MetCollectionTag_; - edm::InputTag tcMetCollectionTag_; - edm::InputTag pfMetCollectionTag_; - edm::InputTag t1MetCollectionTag_; - edm::InputTag t1MetCollectionTagTwiki_; - edm::InputTag genMetCollectionTag_; - // - edm::InputTag HLTCollectionE29_; - edm::InputTag HLTCollectionE31_; - edm::InputTag HLTTriggerResultsE29_; - edm::InputTag HLTTriggerResultsE31_; - edm::InputTag HLTFilterType_[25]; - std::string HLTPath_[25]; - - TTree* probe_tree; - TFile* histofile; - // - - //probe SC variables - double probe_sc_eta_for_tree[4]; - double probe_sc_phi_for_tree[4]; - double probe_sc_et_for_tree[4]; - int probe_sc_pass_fiducial_cut[4]; - int probe_sc_pass_et_cut[4]; - - //probe electron variables - double probe_ele_eta_for_tree[4]; - double probe_ele_phi_for_tree[4]; - double probe_ele_et_for_tree[4]; - double probe_ele_Xvertex_for_tree[4]; - double probe_ele_Yvertex_for_tree[4]; - double probe_ele_Zvertex_for_tree[4]; - double probe_ele_tip[4]; - int probe_charge_for_tree[4]; - int probe_index_for_tree[4]; - - //efficiency cuts - int probe_ele_pass_fiducial_cut[4]; - int probe_ele_pass_et_cut[4]; - int probe_pass_recoEle_cut[4]; - int probe_pass_iso_cut[4]; - // - double probe_isolation_value[4]; - double probe_iso_user[4]; - // - double probe_ecal_isolation_value[4]; - double probe_ecal_iso_user[4]; - - double probe_hcal_isolation_value[4]; - double probe_hcal_iso_user[4]; - // - int probe_classification_index_for_tree[4]; - int probe_pass_tip_cut[4]; - // - int probe_pass_id_robust_loose[4]; - int probe_pass_id_robust_tight[4]; - int probe_pass_id_loose[4]; - int probe_pass_id_tight[4]; - double probe_ele_hoe[4]; - double probe_ele_shh[4]; - double probe_ele_sihih[4]; - double probe_ele_dhi[4]; - double probe_ele_dfi[4]; - double probe_ele_eop[4]; - double probe_ele_pin[4]; - double probe_ele_pout[4]; - double probe_ele_e5x5[4]; - double probe_ele_e2x5[4]; - double probe_ele_e1x5[4]; - - // - int probe_pass_trigger_cut[4][25]; - double probe_hlt_matched_dr[4]; - // - double MCMatch_Deta_; - double MCMatch_Dphi_; - int probe_mc_matched[4]; - double probe_mc_matched_deta[4]; - double probe_mc_matched_dphi[4]; - double probe_mc_matched_denergy[4]; - int probe_mc_matched_mother[4]; - - //event variables - int numberOfHLTFilterObjects[25]; - - int event_HLTPath[25]; - - double BarrelMaxEta; - double EndcapMinEta; - double EndcapMaxEta; - - double ProbeSCMinEt; - double ProbeRecoEleSCMaxDE; - - double ProbeHLTObjMaxDR; - double RecoEleSeedBCMaxDE; - double GsfTrackMinInnerPt; - - int elec_number_in_event; - int elec_1_duplicate_removal; - - double event_MET, event_MET_sig; - // double event_MET_eta; - double event_MET_phi; - double event_tcMET, event_tcMET_sig, event_tcMET_phi; - double event_pfMET, event_pfMET_sig; - // double event_pfMET_eta; - double event_pfMET_phi; - double event_genMET, event_genMET_sig; - // double event_genMET_eta; - double event_genMET_phi; - // - double event_t1MET, event_t1MET_phi, event_t1MET_sig; - double event_twikiT1MET, event_twikiT1MET_phi, event_twikiT1MET_sig; -}; - -#endif diff --git a/ElectroWeakAnalysis/WENu/interface/GenPurposeSkimmerAcceptance.h b/ElectroWeakAnalysis/WENu/interface/GenPurposeSkimmerAcceptance.h deleted file mode 100644 index 273707984db38..0000000000000 --- a/ElectroWeakAnalysis/WENu/interface/GenPurposeSkimmerAcceptance.h +++ /dev/null @@ -1,221 +0,0 @@ -#ifndef GenPurposeSkimmerAcceptance_H -#define GenPurposeSkimmerAcceptance_H - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -// other files -// root + maths -#include "TFile.h" -#include "TBranch.h" -#include "TTree.h" -#include "TVector.h" -#include "TString.h" -#include "TMath.h" -// -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/EgammaCandidates/interface/Electron.h" -#include "DataFormats/EgammaCandidates/interface/ElectronFwd.h" -// -#include "DataFormats/Common/interface/TriggerResults.h" -#include "FWCore/Common/interface/TriggerNames.h" -#include "DataFormats/HLTReco/interface/TriggerEventWithRefs.h" -#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" -#include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" -#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/HLTReco/interface/TriggerObject.h" - -// -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/METReco/interface/CaloMET.h" -#include "DataFormats/METReco/interface/CaloMETFwd.h" -#include "DataFormats/METReco/interface/PFMET.h" -#include "DataFormats/METReco/interface/PFMETFwd.h" -#include "DataFormats/METReco/interface/GenMET.h" -#include "DataFormats/METReco/interface/GenMETFwd.h" - -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h" -// -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" -#include "DataFormats/Common/interface/ValueMap.h" - -#include "DataFormats/PatCandidates/interface/Electron.h" -#include "DataFormats/PatCandidates/interface/MET.h" -#include "DataFormats/Math/interface/deltaR.h" -// -// class decleration -// - -class GenPurposeSkimmerAcceptance : public edm::EDAnalyzer { -public: - explicit GenPurposeSkimmerAcceptance(const edm::ParameterSet&); - ~GenPurposeSkimmerAcceptance(); - -private: - virtual void beginJob(const edm::EventSetup&); - virtual void analyze(const edm::Event&, const edm::EventSetup&); - virtual void endJob(); - - // ----------member data --------------------------- - - std::string outputFile_; - int tree_fills_; - - edm::InputTag ElectronCollection_; - edm::InputTag MCCollection_; - edm::InputTag MetCollectionTag_; - edm::InputTag tcMetCollectionTag_; - edm::InputTag pfMetCollectionTag_; - edm::InputTag t1MetCollectionTag_; - edm::InputTag t1MetCollectionTagTwiki_; - edm::InputTag genMetCollectionTag_; - // - edm::InputTag HLTCollectionE29_; - edm::InputTag HLTCollectionE31_; - edm::InputTag HLTTriggerResultsE29_; - edm::InputTag HLTTriggerResultsE31_; - edm::InputTag HLTFilterType_[25]; - std::string HLTPath_[25]; - - TTree* probe_tree; - TFile* histofile; - // - - //probe SC variables - double probe_sc_eta_for_tree[4]; - double probe_sc_phi_for_tree[4]; - double probe_sc_et_for_tree[4]; - int probe_sc_pass_fiducial_cut[4]; - int probe_sc_pass_et_cut[4]; - - //probe electron variables - double probe_ele_eta_for_tree[4]; - double probe_ele_phi_for_tree[4]; - double probe_ele_et_for_tree[4]; - double probe_ele_Xvertex_for_tree[4]; - double probe_ele_Yvertex_for_tree[4]; - double probe_ele_Zvertex_for_tree[4]; - double probe_ele_tip[4]; - int probe_charge_for_tree[4]; - int probe_index_for_tree[4]; - - //efficiency cuts - int probe_ele_pass_fiducial_cut[4]; - int probe_ele_pass_et_cut[4]; - int probe_pass_recoEle_cut[4]; - int probe_pass_iso_cut[4]; - // - double probe_isolation_value[4]; - double probe_iso_user[4]; - // - double probe_ecal_isolation_value[4]; - double probe_ecal_iso_user[4]; - - double probe_hcal_isolation_value[4]; - double probe_hcal_iso_user[4]; - // - int probe_classification_index_for_tree[4]; - int probe_pass_tip_cut[4]; - // - int probe_pass_id_robust_loose[4]; - int probe_pass_id_robust_tight[4]; - int probe_pass_id_loose[4]; - int probe_pass_id_tight[4]; - double probe_ele_hoe[4]; - double probe_ele_shh[4]; - double probe_ele_sihih[4]; - double probe_ele_dhi[4]; - double probe_ele_dfi[4]; - double probe_ele_eop[4]; - double probe_ele_pin[4]; - double probe_ele_pout[4]; - double probe_ele_e5x5[4]; - double probe_ele_e2x5[4]; - double probe_ele_e1x5[4]; - - // - int probe_pass_trigger_cut[4][25]; - double probe_hlt_matched_dr[4]; - // - double MCMatch_Deta_; - double MCMatch_Dphi_; - int probe_mc_matched[4]; - double probe_mc_matched_deta[4]; - double probe_mc_matched_dphi[4]; - double probe_mc_matched_denergy[4]; - int probe_mc_matched_mother[4]; - - //event variables - int numberOfHLTFilterObjects[25]; - - int event_HLTPath[25]; - - double BarrelMaxEta; - double EndcapMinEta; - double EndcapMaxEta; - - double ProbeSCMinEt; - double ProbeRecoEleSCMaxDE; - - double ProbeHLTObjMaxDR; - double RecoEleSeedBCMaxDE; - double GsfTrackMinInnerPt; - - int elec_number_in_event; - int elec_1_duplicate_removal; - - double event_MET, event_MET_sig; - // double event_MET_eta; - double event_MET_phi; - double event_tcMET, event_tcMET_sig, event_tcMET_phi; - double event_pfMET, event_pfMET_sig; - // double event_pfMET_eta; - double event_pfMET_phi; - double event_genMET, event_genMET_sig; - // double event_genMET_eta; - double event_genMET_phi; - // - double event_t1MET, event_t1MET_phi, event_t1MET_sig; - double event_twikiT1MET, event_twikiT1MET_phi, event_twikiT1MET_sig; - // - // - // acceptance and t&p specific - double mc_ele_eta[10]; - double mc_ele_phi[10]; - double mc_ele_et[10]; - double mc_ele_vertex_x[10]; - double mc_ele_vertex_y[10]; - double mc_ele_vertex_z[10]; - int mc_ele_mother[10]; - int mc_ele_charge[10]; - int mc_ele_status[10]; - // - // for the sc collections - // double sc0_eta[8], sc0_phi[8], sc0_et[8]; - double sc1_eta[8], sc1_phi[8], sc1_et[8]; - double sc2_eta[8], sc2_phi[8], sc2_et[8]; - double sc3_eta[8], sc3_phi[8], sc3_et[8]; - double sc4_eta[8], sc4_phi[8], sc4_et[8]; - double sc5_eta[8], sc5_phi[8], sc5_et[8]; - // double sc6_eta[8], sc6_phi[8], sc6_et[8]; - // double sc7_eta[8], sc7_phi[8], sc7_et[8]; -}; - -#endif diff --git a/ElectroWeakAnalysis/WENu/interface/GenPurposeSkimmerData.h b/ElectroWeakAnalysis/WENu/interface/GenPurposeSkimmerData.h deleted file mode 100644 index 308fcd0b89c6d..0000000000000 --- a/ElectroWeakAnalysis/WENu/interface/GenPurposeSkimmerData.h +++ /dev/null @@ -1,225 +0,0 @@ -#ifndef GenPurposeSkimmerData_H -#define GenPurposeSkimmerData_H - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -// other files -// root + maths -#include "TFile.h" -#include "TBranch.h" -#include "TTree.h" -#include "TVector.h" -#include "TString.h" -#include "TMath.h" -// -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/EgammaCandidates/interface/Electron.h" -#include "DataFormats/EgammaCandidates/interface/ElectronFwd.h" -// -#include "DataFormats/Common/interface/TriggerResults.h" -#include "DataFormats/HLTReco/interface/TriggerEventWithRefs.h" -#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" -#include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" -#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/HLTReco/interface/TriggerObject.h" - -// -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/METReco/interface/CaloMET.h" -#include "DataFormats/METReco/interface/CaloMETFwd.h" -#include "DataFormats/METReco/interface/PFMET.h" -#include "DataFormats/METReco/interface/PFMETFwd.h" -#include "DataFormats/METReco/interface/GenMET.h" -#include "DataFormats/METReco/interface/GenMETFwd.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/PatCandidates/interface/Muon.h" - -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h" -// -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" -#include "DataFormats/Common/interface/ValueMap.h" - -#include "DataFormats/PatCandidates/interface/Electron.h" -#include "DataFormats/PatCandidates/interface/MET.h" -#include "DataFormats/Math/interface/deltaR.h" -// -// class decleration -// - -class GenPurposeSkimmerData : public edm::EDAnalyzer { -public: - explicit GenPurposeSkimmerData(const edm::ParameterSet&); - ~GenPurposeSkimmerData() override; - -private: - void beginJob() override; - void analyze(const edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - // ----------member data --------------------------- - - std::string outputFile_; - int tree_fills_; - - edm::EDGetTokenT ElectronCollectionToken_; - edm::InputTag MCCollection_; - edm::EDGetTokenT MCCollectionToken_; - edm::InputTag MetCollectionTag_; - edm::EDGetTokenT MetCollectionToken_; - edm::EDGetTokenT mcMetCollectionToken_; - edm::EDGetTokenT tcMetCollectionToken_; - edm::EDGetTokenT pfMetCollectionToken_; - edm::EDGetTokenT t1MetCollectionToken_; - edm::EDGetTokenT genMetCollectionToken_; - // - edm::InputTag HLTCollectionE29_; - edm::EDGetTokenT HLTCollectionE29Token_; - edm::InputTag HLTCollectionE31_; - edm::EDGetTokenT HLTCollectionE31Token_; - edm::InputTag HLTTriggerResultsE29_; - edm::EDGetTokenT HLTTriggerResultsE29Token_; - edm::InputTag HLTTriggerResultsE31_; - edm::EDGetTokenT HLTTriggerResultsE31Token_; - edm::InputTag HLTFilterType_[25]; - // std::string HLTPath_[25]; - edm::EDGetTokenT ctfTracksToken_; - edm::EDGetTokenT corHybridscToken_; - edm::EDGetTokenT multi5x5scToken_; - edm::EDGetTokenT offlineBeamSpotToken_; - edm::EDGetTokenT pMuonsToken_; - - TTree* probe_tree; - TFile* histofile; - // - - //probe SC variables - double probe_sc_eta_for_tree[4]; - double probe_sc_phi_for_tree[4]; - double probe_sc_et_for_tree[4]; - int probe_sc_pass_fiducial_cut[4]; - int probe_sc_pass_et_cut[4]; - - //probe electron variables - double probe_ele_eta_for_tree[4]; - double probe_ele_phi_for_tree[4]; - double probe_ele_et_for_tree[4]; - double probe_ele_Xvertex_for_tree[4]; - double probe_ele_Yvertex_for_tree[4]; - double probe_ele_Zvertex_for_tree[4]; - double probe_ele_tip[4]; - int probe_charge_for_tree[4]; - int probe_index_for_tree[4]; - - //efficiency cuts - int probe_ele_pass_fiducial_cut[4]; - int probe_ele_pass_et_cut[4]; - int probe_pass_recoEle_cut[4]; - int probe_pass_iso_cut[4]; - // - double probe_isolation_value[4]; - double probe_iso_user[4]; - // - double probe_ecal_isolation_value[4]; - double probe_ecal_iso_user[4]; - - double probe_hcal_isolation_value[4]; - double probe_hcal_iso_user[4]; - // - int probe_classification_index_for_tree[4]; - int probe_pass_tip_cut[4]; - // - int probe_pass_id_robust_loose[4]; - int probe_pass_id_robust_tight[4]; - int probe_pass_id_loose[4]; - int probe_pass_id_tight[4]; - double probe_ele_hoe[4]; - double probe_ele_shh[4]; - double probe_ele_sihih[4]; - double probe_ele_dhi[4]; - double probe_ele_dfi[4]; - double probe_ele_eop[4]; - double probe_ele_pin[4]; - double probe_ele_pout[4]; - double probe_ele_e5x5[4]; - double probe_ele_e2x5[4]; - double probe_ele_e1x5[4]; - - // - int probe_pass_trigger_cut[4][25]; - double probe_hlt_matched_dr[4]; - // - double MCMatch_Deta_; - double MCMatch_Dphi_; - int probe_mc_matched[4]; - double probe_mc_matched_deta[4]; - double probe_mc_matched_dphi[4]; - double probe_mc_matched_denergy[4]; - int probe_mc_matched_mother[4]; - - //event variables - int numberOfHLTFilterObjects[25]; - - int event_HLTPath[25]; - - double BarrelMaxEta; - double EndcapMinEta; - double EndcapMaxEta; - - double ProbeSCMinEt; - double ProbeRecoEleSCMaxDE; - - double ProbeHLTObjMaxDR; - double RecoEleSeedBCMaxDE; - double GsfTrackMinInnerPt; - - int elec_number_in_event; - int elec_1_duplicate_removal; - - double event_MET, event_MET_sig; - // double event_MET_eta; - double event_MET_phi; - double event_tcMET, event_tcMET_sig, event_tcMET_phi; - double event_pfMET, event_pfMET_sig; - // double event_pfMET_eta; - double event_pfMET_phi; - //double event_genMET, event_genMET_sig; - // double event_genMET_eta; - //double event_genMET_phi; - // - double event_t1MET, event_t1MET_phi, event_t1MET_sig; - double event_mcMET, event_mcMET_phi, event_mcMET_sig; - // - // - // - double sc_hybrid_et[5], sc_hybrid_eta[5], sc_hybrid_phi[5]; - double sc_multi5x5_et[5], sc_multi5x5_eta[5], sc_multi5x5_phi[5]; - // - double ctf_track_pt[20], ctf_track_eta[20], ctf_track_phi[20]; - double ctf_track_vx[20], ctf_track_vy[20], ctf_track_vz[20]; - double ctf_track_tip[20], ctf_track_tip_bs[20]; - // - double muon_pt[4], muon_eta[4], muon_phi[4]; - double muon_vx[4], muon_vy[4], muon_vz[4]; - double muon_tip[4], muon_tip_bs[4]; -}; - -#endif diff --git a/ElectroWeakAnalysis/WENu/interface/WenuPlots.h b/ElectroWeakAnalysis/WENu/interface/WenuPlots.h deleted file mode 100644 index c2e1d78dbadb1..0000000000000 --- a/ElectroWeakAnalysis/WENu/interface/WenuPlots.h +++ /dev/null @@ -1,258 +0,0 @@ -#ifndef WenuPlots_H -#define WenuPlots_H - -#include - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/PatCandidates/interface/Electron.h" -#include "DataFormats/PatCandidates/interface/MET.h" -#include "DataFormats/PatCandidates/interface/CompositeCandidate.h" -#include "DataFormats/EgammaCandidates/interface/Electron.h" -#include "DataFormats/JetReco/interface/PFJet.h" -#include "DataFormats/JetReco/interface/CaloJet.h" -#include "DataFormats/JetReco/interface/PFJetCollection.h" -#include "DataFormats/JetReco/interface/CaloJetCollection.h" -#include "DataFormats/VertexReco/interface/Vertex.h" - -//#include "DataFormats/BeamSpot/interface/BeamSpot.h" - -#include -#include -#include "TFile.h" -#include "TTree.h" -#include "TString.h" -#include "TH1F.h" -#include "TMath.h" - -// -// class decleration -// - -class WenuPlots : public edm::EDAnalyzer { -public: - explicit WenuPlots(const edm::ParameterSet &); - ~WenuPlots() override; - -private: - void beginJob() override; - void analyze(const edm::Event &, const edm::EventSetup &) override; - void endJob() override; - - // ----------member data --------------------------- - Bool_t CheckCuts(const pat::Electron *ele); - Bool_t CheckCut(const pat::Electron *wenu, Int_t i); - Bool_t CheckCutsInverse(const pat::Electron *ele); - Bool_t CheckCutInv(const pat::Electron *wenu, Int_t i); - Bool_t CheckCutsNminusOne(const pat::Electron *ele, Int_t jj); - Double_t ReturnCandVar(const pat::Electron *ele, Int_t i); - Bool_t PassPreselectionCriteria(const pat::Electron *ele); - // for the extra identifications and selections - Bool_t usePrecalcID_; - std::string usePrecalcIDSign_; - std::string usePrecalcIDType_; - Double_t usePrecalcIDValue_; - // for extra preselection criteria: - Bool_t useValidFirstPXBHit_; - Bool_t useConversionRejection_; - Bool_t useExpectedMissingHits_; - Int_t maxNumberOfExpectedMissingHits_; - Bool_t usePreselection_; - std::string outputFile_; - edm::EDGetTokenT wenuCollectionToken_; - edm::InputTag caloJetCollectionTag_; - edm::EDGetTokenT caloJetCollectionToken_; - edm::InputTag pfJetCollectionTag_; - edm::EDGetTokenT pfJetCollectionToken_; - edm::EDGetTokenT > PrimaryVerticesCollectionToken_; - edm::EDGetTokenT > PrimaryVerticesCollectionBSToken_; - TFile *histofile; - // - // math::XYZPoint bspotPosition_; // comment out only if you don't use pat - // - // the histograms ******************** - - TH1F *h_met; - TH1F *h_met_inverse; - TH1F *h_mt; - TH1F *h_mt_inverse; - - TH1F *h_met_EB; - TH1F *h_met_inverse_EB; - TH1F *h_mt_EB; - TH1F *h_mt_inverse_EB; - - TH1F *h_met_EE; - TH1F *h_met_inverse_EE; - TH1F *h_mt_EE; - TH1F *h_mt_inverse_EE; - - TH1F *h_scEt; - TH1F *h_scEta; - TH1F *h_scPhi; - - TH1F *h_EB_trkiso; - TH1F *h_EB_ecaliso; - TH1F *h_EB_hcaliso; - TH1F *h_EB_sIetaIeta; - TH1F *h_EB_dphi; - TH1F *h_EB_deta; - TH1F *h_EB_HoE; - - TH1F *h_EE_trkiso; - TH1F *h_EE_ecaliso; - TH1F *h_EE_hcaliso; - TH1F *h_EE_sIetaIeta; - TH1F *h_EE_dphi; - TH1F *h_EE_deta; - TH1F *h_EE_HoE; - - // - TH1F *h_trackIso_eb_NmOne; - TH1F *h_trackIso_ee_NmOne; - // *********************************** - // - // the selection cuts - Double_t trackIso_EB_; - Double_t ecalIso_EB_; - Double_t hcalIso_EB_; - // - Double_t trackIso_EE_; - Double_t ecalIso_EE_; - Double_t hcalIso_EE_; - // - Double_t sihih_EB_; - Double_t deta_EB_; - Double_t dphi_EB_; - Double_t hoe_EB_; - Double_t cIso_EB_; - Double_t tip_bspot_EB_; - Double_t eop_EB_; - // - Double_t sihih_EE_; - Double_t deta_EE_; - Double_t dphi_EE_; - Double_t hoe_EE_; - Double_t cIso_EE_; - Double_t tip_bspot_EE_; - Double_t eop_EE_; - // - Double_t trackIsoUser_EB_; - Double_t ecalIsoUser_EB_; - Double_t hcalIsoUser_EB_; - Double_t trackIsoUser_EE_; - Double_t ecalIsoUser_EE_; - Double_t hcalIsoUser_EE_; - // - Bool_t trackIso_EB_inv; - Bool_t ecalIso_EB_inv; - Bool_t hcalIso_EB_inv; - // - Bool_t trackIso_EE_inv; - Bool_t ecalIso_EE_inv; - Bool_t hcalIso_EE_inv; - // - Bool_t sihih_EB_inv; - Bool_t deta_EB_inv; - Bool_t dphi_EB_inv; - Bool_t hoe_EB_inv; - Bool_t cIso_EB_inv; - Bool_t tip_bspot_EB_inv; - Bool_t eop_EB_inv; - // - Bool_t sihih_EE_inv; - Bool_t deta_EE_inv; - Bool_t dphi_EE_inv; - Bool_t hoe_EE_inv; - Bool_t cIso_EE_inv; - Bool_t tip_bspot_EE_inv; - Bool_t eop_EE_inv; - // - Bool_t trackIsoUser_EB_inv; - Bool_t ecalIsoUser_EB_inv; - Bool_t hcalIsoUser_EB_inv; - Bool_t trackIsoUser_EE_inv; - Bool_t ecalIsoUser_EE_inv; - Bool_t hcalIsoUser_EE_inv; - // - // - Int_t nBarrelVars_; - // - std::vector CutVars_; - std::vector InvVars_; - // - // variables related to the VBTF root tuples: - // - Int_t runNumber, lumiSection; - Long64_t eventNumber; - Float_t ele_sc_energy, ele_sc_eta, ele_sc_phi, ele_sc_rho; - Float_t ele_sc_gsf_et; - Float_t ele_cand_et, ele_cand_eta, ele_cand_phi; - Float_t ele_iso_track, ele_iso_ecal, ele_iso_hcal; - Float_t ele_id_sihih, ele_id_dphi, ele_id_deta, ele_id_hoe; - Float_t ele_cr_dcot, ele_cr_dist; - Int_t ele_cr_mhitsinner; - Float_t ele_vx, ele_vy, ele_vz; - Float_t ele_pin, ele_pout; - Float_t pv_x, pv_y, pv_z; - Int_t ele_gsfCharge, ele_ctfCharge, ele_scPixCharge; - Float_t ele_eop, ele_tip_bs, ele_tip_pv; - Float_t event_caloMET, event_pfMET, event_tcMET; - Float_t event_caloSumEt, event_pfSumEt, event_tcSumEt; - Float_t event_caloMET_phi, event_pfMET_phi, event_tcMET_phi; - Float_t event_caloMT, event_pfMT, event_tcMT; - Float_t calojet_et[5]; - Float_t calojet_eta[5]; - Float_t calojet_phi[5]; - Float_t pfjet_et[5]; - Float_t pfjet_eta[5]; - Float_t pfjet_phi[5]; - Float_t ele2nd_sc_gsf_et; - Float_t ele2nd_sc_eta; - Float_t ele2nd_sc_phi; - Float_t ele2nd_sc_rho; - Float_t ele2nd_cand_eta; - Float_t ele2nd_cand_phi; - Float_t ele2nd_pin; - Float_t ele2nd_pout; - Int_t ele2nd_passes_selection; - Int_t ele2nd_ecalDriven; - Float_t ele_hltmatched_dr; - Int_t event_triggerDecision; - Int_t event_datasetTag; - - TFile *WENU_VBTFpreseleFile_; - TFile *WENU_VBTFselectionFile_; - TTree *vbtfSele_tree; - TTree *vbtfPresele_tree; - std::string WENU_VBTFselectionFileName_; - std::string WENU_VBTFpreseleFileName_; - Bool_t includeJetInformationInNtuples_; - Bool_t storeExtraInformation_; - Double_t DRJetFromElectron_; - Int_t DatasetTag_; - // for the 2nd electron storage - Bool_t storeAllSecondElectronVariables_; - Float_t ele2nd_cand_et; - Float_t ele2nd_iso_track, ele2nd_iso_ecal, ele2nd_iso_hcal; - Float_t ele2nd_id_sihih, ele2nd_id_deta, ele2nd_id_dphi, ele2nd_id_hoe; - Float_t ele2nd_cr_dcot, ele2nd_cr_dist; - Float_t ele2nd_vx, ele2nd_vy, ele2nd_vz; - Int_t ele2nd_cr_mhitsinner, ele2nd_gsfCharge, ele2nd_ctfCharge, ele2nd_scPixCharge; - Float_t ele2nd_eop, ele2nd_tip_bs, ele2nd_tip_pv; - Float_t ele2nd_hltmatched_dr; - std::vector VtxTracksSize; - std::vector VtxNormalizedChi2; - std::vector VtxTracksSizeBS; - std::vector VtxNormalizedChi2BS; - Float_t pvbs_x, pvbs_y, pvbs_z; - Float_t ele_tip_pvbs, ele2nd_tip_pvbs; -}; - -#endif diff --git a/ElectroWeakAnalysis/WENu/macros/PlotCombiner.cc b/ElectroWeakAnalysis/WENu/macros/PlotCombiner.cc deleted file mode 100644 index c28d1e998b892..0000000000000 --- a/ElectroWeakAnalysis/WENu/macros/PlotCombiner.cc +++ /dev/null @@ -1,1161 +0,0 @@ -/* - Macro to make the plots ....................................... - - Instructions: - a. set up an input file that looks like the following: - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - # zee or wenu - wenu - # file name, type (sig, qcd, bce, gje, ewk), weight - histos_wenu.root sig 1.46 - histos_q20_30.root qcd 0 - histos_q30_80.root qcd 100. - histos_q80_170.root qcd 0 - histos_b20_30.root bce 0 - histos_b30_80.root bce 0 - histos_b80_170.root bce 0 - histos_zee.root ewk 0 - histos_wtaunu.root ewk 0 - histos_ztautau.root ewk 0 - histos_gj15.root gje 0 - histos_gj20.root gje 0 - histos_gj25.root gje 10.12 - histos_gj30.root gje 0 - histos_gj35.root gje 0 - histos_wmunu.root ewk 0 - histos_ttbar.root ewk 0 - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - lines that start with # are considered to be comments - line 2 has wenu or zee. From line 4 the list of the histo files are listed - (first word) then a type that could be sig,qcd,bce, gj or ewk in order to - discriminate among different sources of bkgs and finally the weight that we - want to weight the histogram entries. This particular example is for Wenu. For - Zee one has to put type sig in the zee file and ewk in the Wenu file. The order - of the files is arbitrary. Files with weight 0 will be ignored. - After you have set up this code you run a root macro to combine the plots. - You can do (not recommended - it actually crushes - to be debugged) - root -b PlotCombiner.cc - or to compile it within root (recommended) - root -b - root [1] .L PlotCombiner.cc++ - root [2] PlotCombiner() - - and you finally get the plots. - - For the ABCD method: - ^^^^^^^^^^^^^^^^^^^^ - you have to insert in the 2nd line instead of wenu or zee the keyword abcd(...) - The files should contain ewk samples, sig samples and qcd samples (but also read - later). The only absolutely necessary files are the sig ones. - Example: - abcd(I=0.95,dI=0.01,Fz=0.6,dFz=0.01,FzP=0.56, dFzP=0.2,ewkerror=0.1,METCut=30.,mc) - These parameters keep the same notation as in the note. The last parameter (data) - can take 3 values: - data: calculate in ABCD as in data. This means that the histograms denoted with - sig,qcd,bce,gje are used as of the same kind and ewk as the MC ewk. - The background is substructed as in data - mcOnly: here we ignore all the input parameters I, dI etc. All parameters are taken - from MC by forcing Fqcd=1 - mc: input mc samples, calculation of statistical - and systematics as in CMS AN 2009/004, systematic and statistic error - calculation. This option also creates the plots of the variation of the - signal prediction vs the parameter variation. In order to set the limits of - the desired variation you have to edit the values in line 113 of this code - (they are hardwired in the code) - TO DO: - functionalities to plot more kind of plots, e.g. efficiencies - - - Further Questions/Contact: - - nikolaos.rompotis @ cern.ch - - - - Nikolaos Rompotis - 29 June 09 - 18 Sept 09: 1st updgrade: input files in a text file - 28 May 10: bug in IMET corrected, thanks to Sadia Khalil - Imperial College London - - -*/ - - -#include -#include -#include -#include -#include "TString.h" -#include "TROOT.h" -#include "TStyle.h" -#include "TH1F.h" -#include "TFile.h" -#include "TCanvas.h" -#include "TGraph.h" -#include "TLegend.h" - -void plotMaker(TString histoName, TString typeOfplot, - vector file, vector type, - vector weight, TString xtitle); - -void abcd(vector file, vector type, vector weight, - double METCut, double I, double dI, double Fz, double dFz, - double FzP, double dFzP, double ewkerror, - double data, double mc, double mcOnly); -double searchABCDstring(TString abcdString, TString keyword); -double Trionym(double a, double b, double c, double sum); -double CalcABCD -(double I, double Fz, double FzP, double K, double ewk, - double Na_, double Nb_, double Nc_, double Nd_, - double Ea_, double Eb_, double Ec_, double Ed_); - -// values for systematics plots: it is fraction of the MC value -const double EWK_SYST_MIN = 0.3; -const double EWK_SYST_MAX = 0.3; -// -const double I_SYST_MIN = 0.05; -const double I_SYST_MAX = 0.05; -// -const double FZ_SYST_MIN = 0.1; -const double FZ_SYST_MAX = 0.1; -// -const double FZP_SYST_MIN = 0.1; -const double FZP_SYST_MAX = 0.1; -// -const double K_SYST_MIN = 0.8; -const double K_SYST_MAX = 0.8; - - -using namespace std; - -void PlotCombiner() -{ - // read the file - ifstream input("inputFiles"); - int i = 0; - TString typeOfplot = ""; - vector types; - vector files; - vector weights; - - if (input.is_open()) { - std::string myline; - while (! input.eof()) { - getline(input, myline); - TString line(myline); - TString c('#'); - TString empty(' '); - if (line[0] != c) { - ++i; - if (i==1) typeOfplot=line; - else { - // read until you find 3 words - TString fname(""); - TString ftype(""); - TString fw(""); - int lineSize = (int) line.Length(); - int j=0; - while (j0) break;} - ++j; - } - if (fname.Length() == 0) break; - files.push_back(fname); - types.push_back(ftype); - double w = fw.Atof(); - weights.push_back(w); - if (w>0) - std::cout << fname << ", " << ftype << ", "<< w << std::endl; - } - } - } - input.close(); - } - else { - std::cout << "File with name inputFile was not found" << std::endl; - return; - } - - // now you can launch the jobs - if (typeOfplot == "wenu") { - cout << "wenu plot maker" << endl; - // ==================== - // =====> WHICH HISTOS TO PLOT - // ==================== - plotMaker("h_met", typeOfplot, files, types, weights, "MET (GeV)"); - } - else if (typeOfplot == "zee"){ - cout << "zee plot maker" << endl; - // ==================== - // =====> WHICH HISTOS TO PLOT - // ==================== - plotMaker("h_mee", typeOfplot, files, types, weights, "M_{ee} (GeV)"); - } - else if (typeOfplot(0,4) == "abcd") { - // now read the parameters of the ABCD method - // look for parameter I and dI - double I = searchABCDstring(typeOfplot, "I"); - double dI= searchABCDstring(typeOfplot, "dI"); - // look for parameter Fz - double Fz = searchABCDstring(typeOfplot, "Fz"); - double dFz= searchABCDstring(typeOfplot, "dFz"); - // look for parameter FzP - double FzP = searchABCDstring(typeOfplot, "FzP"); - double dFzP= searchABCDstring(typeOfplot, "dFzP"); - // look for the MET cut - double METCut =searchABCDstring(typeOfplot, "METCut"); - // do you want data driven only? - double data = searchABCDstring(typeOfplot, "data"); - double mc = searchABCDstring(typeOfplot, "mc"); - double mcOnly = searchABCDstring(typeOfplot, "mcOnly"); - // what is the ewk error? - double ewkerror = searchABCDstring(typeOfplot, "ewkerror"); - // sanity check: - if (METCut<0 || (data<-0.7 && mc<-0.7 && mcOnly<-0.7)) { - cout << "Error in your configurtion!" << endl; - if (METCut <0) cout << "Error in MET Cut" << endl; - else cout << "You need to specify one mc or data or mcOnly" - << endl; - abort(); - } - if (mc>-0.7 && mc <0 && ewkerror<0) { - cout << "You have specified mc option, but you have forgotten" - << " to set the ewkerror!" << endl; - abort(); - } - // =============================== - // =====> ABCD METHOD FOR BKG SUBTRACTION - // =============================== - cout << "doing ABCD with input: " << typeOfplot << endl; - abcd(files, types, weights, METCut, I, dI, Fz, dFz, FzP, dFzP, - ewkerror, data, mc, mcOnly); - - } - // force the program to abort in order to clear the memory - // and avoid further use of the interpreter after - abort(); - -} - -void abcd( vector file, vector type, vector weight, - double METCut, double I, double dI, double Fz, double dFz, - double FzP, double dFzP, double ewkerror, - double data, double mc, double mcOnly) -{ - gROOT->Reset(); - gROOT->ProcessLine(".L tdrstyle.C"); - gROOT->ProcessLine("setTDRStyle()"); - // - std::cout << "Trying ABCD method for Background subtration" << std::endl; - // - // histogram names to use: - TString histoName_Ba("h_met_EB"); - TString histoName_Bb("h_met_inverse_EB"); - TString histoName_Ea("h_met_EE"); - TString histoName_Eb("h_met_inverse_EE"); - // - // find one file and get the dimensions of your histogram - int fmax = (int) file.size(); - int NBins = 0; double min = 0; double max = -1; - for (int i=0; i0) { - // cout << "Loading file " << file[i] << endl; - TFile f(file[i]); - TH1F *h = (TH1F*) f.Get(histoName_Ba); - NBins = h->GetNbinsX(); - min = h->GetBinLowEdge(1); - max = h->GetBinLowEdge(NBins+1); - break; - } - } - if (NBins ==0 || (max0 ) { - TFile f(file[i]); - // - TH1F *h_ba = (TH1F*) f.Get(histoName_Ba); - h_wenu.Add(h_ba, weight[i]); - TH1F *h_ea = (TH1F*) f.Get(histoName_Ea); - h_wenu.Add(h_ea, weight[i]); - // - TH1F *h_bb = (TH1F*) f.Get(histoName_Bb); - h_wenu_inv.Add(h_bb, weight[i]); - TH1F *h_eb = (TH1F*) f.Get(histoName_Eb); - h_wenu_inv.Add(h_eb, weight[i]); - } - } - // QCD Bkgs - TH1F h_qcd("h_qcd", "h_qcd", NBins, min, max); - TH1F h_qcd_inv("h_qcd_inv", "h_qcd_inv", NBins, min, max); - for (int i=0; i0) { - TFile f(file[i]); - // - TH1F *h_ba = (TH1F*) f.Get(histoName_Ba); - h_qcd.Add(h_ba, weight[i]); - TH1F *h_ea = (TH1F*) f.Get(histoName_Ea); - h_qcd.Add(h_ea, weight[i]); - // - TH1F *h_bb = (TH1F*) f.Get(histoName_Bb); - h_qcd_inv.Add(h_bb, weight[i]); - TH1F *h_eb = (TH1F*) f.Get(histoName_Eb); - h_qcd_inv.Add(h_eb, weight[i]); - } - } - // - TH1F h_ewk("h_ewk", "h_ewk", NBins, min, max); - TH1F h_ewk_inv("h_ewk_inv", "h_ewk_inv", NBins, min, max); - for (int i=0; i0) { - TFile f(file[i]); - // - TH1F *h_ba = (TH1F*) f.Get(histoName_Ba); - h_ewk.Add(h_ba, weight[i]); - TH1F *h_ea = (TH1F*) f.Get(histoName_Ea); - h_ewk.Add(h_ea, weight[i]); - // - TH1F *h_bb = (TH1F*) f.Get(histoName_Bb); - h_ewk_inv.Add(h_bb, weight[i]); - TH1F *h_eb = (TH1F*) f.Get(histoName_Eb); - h_ewk_inv.Add(h_eb, weight[i]); - } - } - // - // calculate the METCut position - // - // this is calculated as a low edge bin of your input histogram - // METCut = min + (max-min)*IMET/NBins - int IMET = int ((METCut - min)/(max-min) * double(NBins)); - // check whether it is indeed a low egde position - double metCalc = min + (max-min)*double(IMET)/double(NBins); - if (metCalc < METCut || metCalc > METCut) { - std::cout << "PlotCombiner:abcd: your MET Cut is not in low egde bin position" - << std::endl; - } - cout << "MET Cut in " << METCut << "GeV corresponds to bin #" << IMET << endl; - // Calculate the population in the ABCD Regions now - // signal - double a_sig = h_wenu.Integral(IMET,NBins+1); - double b_sig = h_wenu.Integral(0,IMET-1); - double c_sig = h_wenu_inv.Integral(0,IMET-1); - double d_sig = h_wenu_inv.Integral(IMET,NBins+1); - // qcd - double a_qcd = h_qcd.Integral(IMET,NBins+1); - double b_qcd = h_qcd.Integral(0,IMET-1); - double c_qcd = h_qcd_inv.Integral(0,IMET-1); - double d_qcd = h_qcd_inv.Integral(IMET,NBins+1); - // ewk - double a_ewk = h_ewk.Integral(IMET,NBins+1); - double b_ewk = h_ewk.Integral(0,IMET-1); - double c_ewk = h_ewk_inv.Integral(0,IMET-1); - double d_ewk = h_ewk_inv.Integral(IMET,NBins+1); - //////////////////////////////////////////////// - - // - // now the parameters of the method - if (data < 0 && data >-0.75) { // select value -0.5 that gives the - // string parser - // now everything is done from data + input - std::cout << "Calculating ABCD Result and Stat Error Assuming DATA" - << std::endl << "Summary: in this implementation we have assumed" - << " that what real 'data' appear with type sig in the input" - << std::endl << "No systematics available with this type of" - << " calculation. If you need systematics try one of the other" - << " options" << std::endl; - double A = (1.0-I)*(FzP-Fz); - double B = I*(FzP+1.0)*(FzP*(c_sig-c_ewk)-(d_sig-d_ewk)) + - (1+Fz)*(1-I)*((a_sig-a_ewk)-dFzP*(b_sig-b_ewk)); - double C = I*(1.+Fz)*(1.+FzP)*((d_sig-d_ewk)*(b_sig-b_ewk) - (a_sig-a_ewk)*(c_sig-c_ewk)); - // - // signal calculation: - double S = Trionym(A,B,C, a_sig+b_sig); - - // the errors now: - // calculate the statistical error now: - double ApI=0, ApFz=0, ApFzP=0, ApNa=0, ApNb=0, ApNc=0, ApNd=0; - double BpI=0, BpFz=0, BpFzP=0, BpNa=0, BpNb=0, BpNc=0, BpNd=0; - double CpI=0, CpFz=0, CpFzP=0, CpNa=0, CpNb=0, CpNc=0, CpNd=0; - double SpI=0, SpFz=0, SpFzP=0, SpNa=0, SpNb=0, SpNc=0, SpNd=0; - // - double Na = a_sig, Nb = b_sig, Nc=c_sig, Nd = d_sig; - double Ea = a_ewk, Eb = b_ewk, Ec=c_ewk, Ed = d_ewk; - if (A != 0) { - - ApI = -(FzP-Fz); - ApFz = -(1.0-I); - ApFzP = (1.0-I); - ApNa = 0.0; - ApNb = 0.0; - ApNc = 0.0; - ApNd = 0.0; - - BpI = (FzP+1.0)*(Fz*(Nc-Ec)-(Nd-Ed))-(1.0+Fz)*((Na-Ea)-FzP*(Nb-Eb)); - BpFz = I*(FzP+1.0)*(Nc-Ec)+(1.0-I)*((Na-Ea)-FzP*(Nb-Eb)); - BpFzP = I*(Fz*(Nc-Ec)-(Nd-Ed))-(1.0-I)*(1.0+Fz)*(Nb-Eb); - BpNa = (1.0-I)*(1.0+Fz); - BpNb = -(1.0-I)*(1.0+Fz)*FzP; - BpNc = I*(FzP+1.0)*Fz; - BpNd = -I*(FzP+1.0); - - CpI = (1.0+Fz)*(1.0+FzP)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpFz = I*(1.0+FzP)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpFzP = I*(1.0+Fz)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpNa = -I*(1.0+Fz)*(1.0+FzP)*(Nc-Ec); - CpNb = I*(1.0+Fz)*(1.0+FzP)*(Nd-Ed); - CpNc = -I*(1.0+Fz)*(1.0+FzP)*(Na-Ea); - CpNd = I*(1.0+Fz)*(1.0+FzP)*(Nb-Eb); - - SpI = (-BpI + (B*BpI -2.0*ApI*C -2.0*A*CpI) /fabs(2.0*A*S+B)- 2.0*ApI*S) /(2.0*A); - SpFz = (-BpFz + (B*BpFz -2.0*ApFz*C -2.0*A*CpFz) /fabs(2.0*A*S+B)- 2.0*ApFz*S) /(2.0*A); - SpFzP = (-BpFzP + (B*BpFzP -2.0*ApFzP*C -2.0*A*CpFzP)/fabs(2.0*A*S+B)- 2.0*ApFzP*S)/(2.0*A); - SpNa = (-BpNa + (B*BpNa -2.0*ApNa*C -2.0*A*CpNa) /fabs(2.0*A*S+B)- 2.0*ApNa*S) /(2.0*A); - SpNb = (-BpNb + (B*BpNb -2.0*ApNb*C -2.0*A*CpNb) /fabs(2.0*A*S+B)- 2.0*ApNb*S) /(2.0*A); - SpNc = (-BpNc + (B*BpNc -2.0*ApNc*C -2.0*A*CpNc) /fabs(2.0*A*S+B)- 2.0*ApNc*S) /(2.0*A); - SpNd = (-BpNd + (B*BpNd -2.0*ApNd*C -2.0*A*CpNd) /fabs(2.0*A*S+B)- 2.0*ApNd*S) /(2.0*A); - } - else { - BpI = (FzP+1.0)*(Fz*(Nc-Ec)-(Nd-Ed))-(1.0+Fz)*((Na-Ea)-FzP*(Nb-Eb)); - BpFz = I*(FzP+1.0)*(Nc-Ec)+(1.0-I)*((Na-Ea)-FzP*(Nb-Eb)); - BpFzP = I*(Fz*(Nc-Ec)-(Nd-Ed))-(1.0-I)*(1.0+Fz)*(Nb-Eb); - BpNa = (1.0-I)*(1.0+Fz); - BpNb = -(1.0-I)*(1.0+Fz)*FzP; - BpNc = I*(FzP+1.0)*Fz; - BpNd = -I*(FzP+1.0); - - CpI = (1.0+Fz)*(1.0+FzP)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpFz = I*(1.0+FzP)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpFzP = I*(1.0+Fz)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpNa = -I*(1.0+Fz)*(1.0+FzP)*(Nc-Ec); - CpNb = I*(1.0+Fz)*(1.0+FzP)*(Nd-Ed); - CpNc = -I*(1.0+Fz)*(1.0+FzP)*(Na-Ea); - CpNd = I*(1.0+Fz)*(1.0+FzP)*(Nb-Eb); - - SpI = -CpI/B+C*BpI/(B*B); - SpFz = -CpFz/B+C*BpFz/(B*B); - SpFzP = -CpFzP/B+C*BpFzP/(B*B); - SpNa = -CpNa/B+C*BpNa/(B*B); - SpNb = -CpNb/B+C*BpNb/(B*B); - SpNc = -CpNc/B+C*BpNc/(B*B); - SpNd = -CpNd/B+C*BpNd/(B*B); - } - double DS; - DS = sqrt( SpI*dI*SpI*dI + SpFz*dFz*SpFz*dFz + SpFzP*dFzP*SpFzP*dFzP + - SpNa*SpNa*Na + SpNb*SpNb*Nb + SpNc*SpNc*Nc + SpNd*SpNd*Nd ); - // warning: S here denotes the method prediction .......... - cout << "********************************************************" << endl; - cout << "Signal Prediction: " << S << "+-" << DS << "(stat)" << endl; - cout << "********************************************************" << endl; - cout << "Parameters used in calculation: " << endl; - cout << "I= " << I << "+-" << dI << endl; - cout << "Fz= " << Fz << "+-" << dFz << endl; - cout << "FzP=" << FzP << "+-" << dFzP << endl; - cout << endl; - cout << "ABCD Regions population:" << endl; - cout << "A: N=" << Na << ", sig=" << a_sig << ", qcd=" << a_qcd - << ", ewk=" << a_ewk << endl; - cout << "B: N=" << Nb << ", sig=" << b_sig << ", qcd=" << b_qcd - << ", ewk=" << b_ewk << endl; - cout << "C: N=" << Nc << ", sig=" << c_sig << ", qcd=" << c_qcd - << ", ewk=" << c_ewk << endl; - cout << "D: N=" << Nd << ", sig=" << d_sig << ", qcd=" << d_qcd - << ", ewk=" << d_ewk << endl; - cout << endl; - // - cout << "Statistical Error Summary: " << endl; - cout << "due to Fz = "<< SpFz*dFz<< ", ("<-0.75) { // select value -0.5 that gives the - // string parser - - //////// STATISTICAL ERROR CALCULATION ///////////////////////////// - double A = (1.0-I)*(FzP-Fz); - double B = I*(FzP+1.0)*(FzP*(c_sig+c_qcd)-(d_sig+d_qcd)) + - (1+Fz)*(1-I)*((a_sig+a_qcd)-dFzP*(b_sig+b_qcd)); - double C = I*(1.+Fz)*(1.+FzP)*((d_sig+d_qcd)*(b_sig+b_qcd) - - (a_sig+a_qcd)*(c_sig+c_qcd)); - // - // signal calculation: - double S = Trionym(A,B,C, a_sig+b_sig); - // - double ApI=0, ApFz=0, ApFzP=0, ApNa=0, ApNb=0, ApNc=0, ApNd=0; - double BpI=0, BpFz=0, BpFzP=0, BpNa=0, BpNb=0, BpNc=0, BpNd=0; - double CpI=0, CpFz=0, CpFzP=0, CpNa=0, CpNb=0, CpNc=0, CpNd=0; - double SpI=0, SpFz=0, SpFzP=0, SpNa=0, SpNb=0, SpNc=0, SpNd=0; - // - double Na = a_sig+a_qcd+a_ewk, Nb = b_sig+b_qcd+b_ewk; - double Nc=c_sig+c_qcd+c_ewk, Nd = d_sig+d_qcd+d_ewk; - double Ea = a_ewk, Eb = b_ewk, Ec=c_ewk, Ed = d_ewk; - if (A != 0) { - - ApI = -(FzP-Fz); - ApFz = -(1.0-I); - ApFzP = (1.0-I); - ApNa = 0.0; - ApNb = 0.0; - ApNc = 0.0; - ApNd = 0.0; - - BpI = (FzP+1.0)*(Fz*(Nc-Ec)-(Nd-Ed))-(1.0+Fz)*((Na-Ea)-FzP*(Nb-Eb)); - BpFz = I*(FzP+1.0)*(Nc-Ec)+(1.0-I)*((Na-Ea)-FzP*(Nb-Eb)); - BpFzP = I*(Fz*(Nc-Ec)-(Nd-Ed))-(1.0-I)*(1.0+Fz)*(Nb-Eb); - BpNa = (1.0-I)*(1.0+Fz); - BpNb = -(1.0-I)*(1.0+Fz)*FzP; - BpNc = I*(FzP+1.0)*Fz; - BpNd = -I*(FzP+1.0); - - CpI = (1.0+Fz)*(1.0+FzP)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpFz = I*(1.0+FzP)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpFzP = I*(1.0+Fz)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpNa = -I*(1.0+Fz)*(1.0+FzP)*(Nc-Ec); - CpNb = I*(1.0+Fz)*(1.0+FzP)*(Nd-Ed); - CpNc = -I*(1.0+Fz)*(1.0+FzP)*(Na-Ea); - CpNd = I*(1.0+Fz)*(1.0+FzP)*(Nb-Eb); - - SpI = (-BpI + (B*BpI -2.0*ApI*C -2.0*A*CpI) /fabs(2.0*A*S+B)- 2.0*ApI*S) /(2.0*A); - SpFz = (-BpFz + (B*BpFz -2.0*ApFz*C -2.0*A*CpFz) /fabs(2.0*A*S+B)- 2.0*ApFz*S) /(2.0*A); - SpFzP = (-BpFzP + (B*BpFzP -2.0*ApFzP*C -2.0*A*CpFzP)/fabs(2.0*A*S+B)- 2.0*ApFzP*S)/(2.0*A); - SpNa = (-BpNa + (B*BpNa -2.0*ApNa*C -2.0*A*CpNa) /fabs(2.0*A*S+B)- 2.0*ApNa*S) /(2.0*A); - SpNb = (-BpNb + (B*BpNb -2.0*ApNb*C -2.0*A*CpNb) /fabs(2.0*A*S+B)- 2.0*ApNb*S) /(2.0*A); - SpNc = (-BpNc + (B*BpNc -2.0*ApNc*C -2.0*A*CpNc) /fabs(2.0*A*S+B)- 2.0*ApNc*S) /(2.0*A); - SpNd = (-BpNd + (B*BpNd -2.0*ApNd*C -2.0*A*CpNd) /fabs(2.0*A*S+B)- 2.0*ApNd*S) /(2.0*A); - } - else { - BpI = (FzP+1.0)*(Fz*(Nc-Ec)-(Nd-Ed))-(1.0+Fz)*((Na-Ea)-FzP*(Nb-Eb)); - BpFz = I*(FzP+1.0)*(Nc-Ec)+(1.0-I)*((Na-Ea)-FzP*(Nb-Eb)); - BpFzP = I*(Fz*(Nc-Ec)-(Nd-Ed))-(1.0-I)*(1.0+Fz)*(Nb-Eb); - BpNa = (1.0-I)*(1.0+Fz); - BpNb = -(1.0-I)*(1.0+Fz)*FzP; - BpNc = I*(FzP+1.0)*Fz; - BpNd = -I*(FzP+1.0); - - CpI = (1.0+Fz)*(1.0+FzP)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpFz = I*(1.0+FzP)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpFzP = I*(1.0+Fz)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpNa = -I*(1.0+Fz)*(1.0+FzP)*(Nc-Ec); - CpNb = I*(1.0+Fz)*(1.0+FzP)*(Nd-Ed); - CpNc = -I*(1.0+Fz)*(1.0+FzP)*(Na-Ea); - CpNd = I*(1.0+Fz)*(1.0+FzP)*(Nb-Eb); - - SpI = -CpI/B+C*BpI/(B*B); - SpFz = -CpFz/B+C*BpFz/(B*B); - SpFzP = -CpFzP/B+C*BpFzP/(B*B); - SpNa = -CpNa/B+C*BpNa/(B*B); - SpNb = -CpNb/B+C*BpNb/(B*B); - SpNc = -CpNc/B+C*BpNc/(B*B); - SpNd = -CpNd/B+C*BpNd/(B*B); - } - double DS; - DS = sqrt( SpI*dI*SpI*dI + SpFz*dFz*SpFz*dFz + SpFzP*dFzP*SpFzP*dFzP + - SpNa*SpNa*Na + SpNb*SpNb*Nb + SpNc*SpNc*Nc + SpNd*SpNd*Nd ); - - //////////////////////////////////////////////////////////////////////// - // SYSTEMATICS CALCULATION ///////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////// - // recalculate the basic quantities - double Imc = (a_sig + b_sig) / (a_sig + b_sig + c_sig + d_sig); - double dImc = sqrt(Imc*(1-Imc)/(a_sig + b_sig + c_sig + d_sig)); - double Fzmc = a_sig/b_sig; - double e =a_sig/(a_sig + b_sig); - double de = sqrt(e*(1-e)/(a_sig + b_sig)); - double alpha = de/(2.*Fzmc-e); - double dFzmc = alpha/(1-alpha); - double FzPmc = d_sig/c_sig; - double ep =d_sig/(c_sig + d_sig); - double dep = sqrt(ep*(1-ep)/(c_sig + d_sig)); - double alphap = dep/(2.*FzPmc-ep); - double dFzPmc = alphap/(1-alphap); - // - // calculate the K parameter as it is in MC: - double KMC = (d_qcd/c_qcd)/(a_qcd/b_qcd); - double SMC = a_sig + b_sig; - // - double dfz = Fz -Fzmc; - double di = I - Imc; - double dfzp = FzP - FzPmc; - double fk = fabs(1-KMC); - //////////////////////////////////////////////////////////////////////// - // ewk error: this error has to be inserted by hand - double fm = 1.-ewkerror; - double fp = 1.+ewkerror; - double S_EWK_PLUS = CalcABCD(Imc, Fzmc, FzPmc, KMC, fp, Na, Nb, Nc, Nd, Ea,Eb,Ec,Ed); - double S_EWK_MINUS = CalcABCD(Imc, Fzmc, FzPmc, KMC, fm, Na, Nb, Nc, Nd, Ea,Eb,Ec,Ed); - // error in K - double S_K= CalcABCD(Imc, Fzmc, FzPmc, 1., 1., Na, Nb, Nc, Nd, Ea,Eb,Ec,Ed); - // error in Fz - double S_FZ= CalcABCD(Imc, Fz, FzPmc, KMC, 1., Na, Nb, Nc, Nd, Ea,Eb,Ec,Ed); - // error in FzP - double S_FZP= CalcABCD(Imc, Fzmc, FzP, KMC, 1., Na, Nb, Nc, Nd, Ea,Eb,Ec,Ed); - // error in I - double S_I = CalcABCD(I, Fzmc, FzPmc, KMC, 1., Na, Nb, Nc, Nd, Ea,Eb,Ec,Ed); - // - // sanity tets - //cout << "Smc=" << SMC<< ", " << CalcABCD(Imc, Fzmc, FzPmc, KMC, 1., Na, Nb, Nc, Nd, Ea,Eb,Ec,Ed) - // << endl; - //abort(); - // - // ************ plots for the systematics calculation **************** - // ewk plot - int const POINTS = 10; - int const allPOINTS = 2*POINTS; - TGraph g_ewk(allPOINTS); - TGraph g_fz(allPOINTS); - TGraph g_fzp(allPOINTS); - TGraph g_k(allPOINTS); - TGraph g_i(allPOINTS); - // - double ewk_syst_min = EWK_SYST_MIN; // because this is just fraction - double i_syst_min = Imc*(1.-I_SYST_MIN); - double fz_syst_min = Fzmc*(1.-FZ_SYST_MIN); - double fzp_syst_min = FzPmc*(1.-FZP_SYST_MIN); - double k_syst_min = KMC*(1.-K_SYST_MIN); - // - double ewk_syst_max = EWK_SYST_MAX; // because this is just fraction - double i_syst_max = Imc*I_SYST_MAX; - double fz_syst_max = Fzmc*FZ_SYST_MAX; - double fzp_syst_max = FzPmc*FZP_SYST_MAX; - double k_syst_max = KMC*K_SYST_MAX; - // - // negative points - for (int i=0; iSetTitle("EWK Variation (%)"); - g_ewk.GetYaxis()->SetTitle(yaxis); - g_ewk.Draw("AL"); - c.Print("ewk_syst_variation.C"); - // - g_fz.SetLineWidth(2); - g_fz.GetXaxis()->SetTitle("F_{z} Variation (%)"); - g_fz.GetYaxis()->SetTitle(yaxis); - g_fz.Draw("AL"); - c.Print("fz_syst_variation.C"); - // - g_fzp.SetLineWidth(2); - g_fzp.GetXaxis()->SetTitle("F_{z}' Variation (%)"); - g_fzp.GetYaxis()->SetTitle(yaxis); - g_fzp.Draw("AL"); - c.Print("fzp_syst_variation.C"); - // - g_i.SetLineWidth(2); - g_i.GetXaxis()->SetTitle("I Variation (%)"); - g_i.GetYaxis()->SetTitle(yaxis); - g_i.Draw("AL"); - c.Print("i_syst_variation.C"); - // - g_k.SetLineWidth(2); - g_k.GetXaxis()->SetTitle("K Variation (%)"); - g_k.GetYaxis()->SetTitle(yaxis); - g_k.Draw("AL"); - c.Print("k_syst_variation.C"); - // - // ****************************************************************** - // - // - // - double err_ewk = std::max(fabs(SMC-S_EWK_PLUS),fabs(SMC-S_EWK_MINUS)); - double err_fz = fabs(SMC-S_FZ); - double err_fzp = fabs(SMC-S_FZP); - double err_i = fabs(SMC-S_I); - double err_k = fabs(SMC-S_K); - // - double DS_syst = sqrt(err_ewk*err_ewk + err_fz*err_fz + err_fzp*err_fzp+ - err_i*err_i + err_k*err_k); - // - cout << "********************************************************" << endl; - cout << "Signal Prediction: " << S << "+-" << DS << "(stat) +-" - << DS_syst << "(syst)" << endl; - cout << "stat error: " << 100.*DS/S <<"%" << endl; - cout << "syt error: " << 100.*DS_syst/S<< "%" << endl; - cout << "********************************************************" << endl; - cout << "Parameters used in calculation: " << endl; - cout << "I= " << I << "+-" << dI << endl; - cout << "Fz= " << Fz << "+-" << dFz << endl; - cout << "FzP=" << FzP << "+-" << dFzP << endl; - cout << "EWK error assumed to be: " << ewkerror << endl; - cout << endl; - cout << "ABCD Regions population:" << endl; - cout << "A: N=" << Na << ", sig=" << a_sig << ", qcd=" << a_qcd - << ", ewk=" << a_ewk << endl; - cout << "B: N=" << Nb << ", sig=" << b_sig << ", qcd=" << b_qcd - << ", ewk=" << b_ewk << endl; - cout << "C: N=" << Nc << ", sig=" << c_sig << ", qcd=" << c_qcd - << ", ewk=" << c_ewk << endl; - cout << "D: N=" << Nd << ", sig=" << d_sig << ", qcd=" << d_qcd - << ", ewk=" << d_ewk << endl; - cout << endl; - cout << "Parameters from MC: " << endl; - cout << "I= " << Imc << "+-" << dImc << endl; - cout << "Fz= " << Fzmc << "+-" << dFzmc << endl; - cout << "FzP=" << FzPmc << "+-" << dFzPmc << endl; - cout << endl; - cout << "Real value of K=" << KMC << endl; - cout << "Real value of Signal=" << SMC << endl; - cout << endl; - cout << "Difference Measured - MC value (% wrt MC value except K=1): " - << endl; - cout << "Fz : " << dfz << ", (" << dfz*100./Fzmc << "%)" << endl; - cout << "FzP: " << dfzp << ", (" << dfzp*100./FzPmc << "%)" << endl; - cout << "I : " << di << ", (" << di*100./Imc << "%)" << endl; - cout << "K : " << fk << ", (" << fk*100./1. << "%)" << endl; - cout << endl; - // - cout << "DETAILS OF THE CALCULATION" << endl; - cout << "^^^^^^^^^^^^^^^^^^^^^^^^^^" << endl; - cout << "Statistical Error Summary: " << endl; - cout << "due to Fz = "<< SpFz*dFz<< ", ("<-0.75) { // select value -0.5 that gives the - // string parser - cout << "=======================================================" << endl; - cout << "Calculating ABCD Result and Stat Error Assuming MC ONLY" << endl; - cout << "=======================================================" << endl; - cout << "All input parameters that the user have inserted will be " - << "ignored and recalculated from MC" << endl; - cout << "This option will not give you systematics estimation" << endl; - // recalculate the basic quantities - I = (a_sig + b_sig) / (a_sig + b_sig + c_sig + d_sig); - dI = sqrt(I*(1-I)/(a_sig + b_sig + c_sig + d_sig)); - Fz = a_sig/b_sig; - double e =a_sig/(a_sig + b_sig); - double de = sqrt(e*(1-e)/(a_sig + b_sig)); - double alpha = de/(2.*Fz-e); - dFz = alpha/(1-alpha); - FzP = d_sig/c_sig; - double ep =d_sig/(c_sig + d_sig); - double dep = sqrt(ep*(1-ep)/(c_sig + d_sig)); - double alphap = dep/(2.*FzP-ep); - dFzP = alphap/(1-alphap); - // - double KMC = (d_qcd/c_qcd)/(a_qcd/b_qcd); - // - // now everything is done from data + input - double A = (1.0-I)*(FzP-Fz); - double B = I*(FzP+1.0)*(FzP*(c_sig+c_qcd)-(d_sig+d_qcd)) + - (1+Fz)*(1-I)*((a_sig+a_qcd)-dFzP*(b_sig+b_qcd)); - double C = I*(1.+Fz)*(1.+FzP)*((d_sig+d_qcd)*(b_sig+b_qcd) - - (a_sig+a_qcd)*(c_sig+c_qcd)); - // - // signal calculation: - double S = Trionym(A,B,C, a_sig+b_sig); - - // the errors now: - // calculate the statistical error now: - double ApI=0, ApFz=0, ApFzP=0, ApNa=0, ApNb=0, ApNc=0, ApNd=0; - double BpI=0, BpFz=0, BpFzP=0, BpNa=0, BpNb=0, BpNc=0, BpNd=0; - double CpI=0, CpFz=0, CpFzP=0, CpNa=0, CpNb=0, CpNc=0, CpNd=0; - double SpI=0, SpFz=0, SpFzP=0, SpNa=0, SpNb=0, SpNc=0, SpNd=0; - // - double Na = a_sig+a_qcd+a_ewk, Nb = b_sig+b_qcd+b_ewk; - double Nc=c_sig+c_qcd+c_ewk, Nd = d_sig+d_qcd+d_ewk; - double Ea = a_ewk, Eb = b_ewk, Ec=c_ewk, Ed = d_ewk; - if (A != 0) { - - ApI = -(FzP-Fz); - ApFz = -(1.0-I); - ApFzP = (1.0-I); - ApNa = 0.0; - ApNb = 0.0; - ApNc = 0.0; - ApNd = 0.0; - - BpI = (FzP+1.0)*(Fz*(Nc-Ec)-(Nd-Ed))-(1.0+Fz)*((Na-Ea)-FzP*(Nb-Eb)); - BpFz = I*(FzP+1.0)*(Nc-Ec)+(1.0-I)*((Na-Ea)-FzP*(Nb-Eb)); - BpFzP = I*(Fz*(Nc-Ec)-(Nd-Ed))-(1.0-I)*(1.0+Fz)*(Nb-Eb); - BpNa = (1.0-I)*(1.0+Fz); - BpNb = -(1.0-I)*(1.0+Fz)*FzP; - BpNc = I*(FzP+1.0)*Fz; - BpNd = -I*(FzP+1.0); - - CpI = (1.0+Fz)*(1.0+FzP)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpFz = I*(1.0+FzP)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpFzP = I*(1.0+Fz)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpNa = -I*(1.0+Fz)*(1.0+FzP)*(Nc-Ec); - CpNb = I*(1.0+Fz)*(1.0+FzP)*(Nd-Ed); - CpNc = -I*(1.0+Fz)*(1.0+FzP)*(Na-Ea); - CpNd = I*(1.0+Fz)*(1.0+FzP)*(Nb-Eb); - - SpI = (-BpI + (B*BpI -2.0*ApI*C -2.0*A*CpI) /fabs(2.0*A*S+B)- 2.0*ApI*S) /(2.0*A); - SpFz = (-BpFz + (B*BpFz -2.0*ApFz*C -2.0*A*CpFz) /fabs(2.0*A*S+B)- 2.0*ApFz*S) /(2.0*A); - SpFzP = (-BpFzP + (B*BpFzP -2.0*ApFzP*C -2.0*A*CpFzP)/fabs(2.0*A*S+B)- 2.0*ApFzP*S)/(2.0*A); - SpNa = (-BpNa + (B*BpNa -2.0*ApNa*C -2.0*A*CpNa) /fabs(2.0*A*S+B)- 2.0*ApNa*S) /(2.0*A); - SpNb = (-BpNb + (B*BpNb -2.0*ApNb*C -2.0*A*CpNb) /fabs(2.0*A*S+B)- 2.0*ApNb*S) /(2.0*A); - SpNc = (-BpNc + (B*BpNc -2.0*ApNc*C -2.0*A*CpNc) /fabs(2.0*A*S+B)- 2.0*ApNc*S) /(2.0*A); - SpNd = (-BpNd + (B*BpNd -2.0*ApNd*C -2.0*A*CpNd) /fabs(2.0*A*S+B)- 2.0*ApNd*S) /(2.0*A); - } - else { - BpI = (FzP+1.0)*(Fz*(Nc-Ec)-(Nd-Ed))-(1.0+Fz)*((Na-Ea)-FzP*(Nb-Eb)); - BpFz = I*(FzP+1.0)*(Nc-Ec)+(1.0-I)*((Na-Ea)-FzP*(Nb-Eb)); - BpFzP = I*(Fz*(Nc-Ec)-(Nd-Ed))-(1.0-I)*(1.0+Fz)*(Nb-Eb); - BpNa = (1.0-I)*(1.0+Fz); - BpNb = -(1.0-I)*(1.0+Fz)*FzP; - BpNc = I*(FzP+1.0)*Fz; - BpNd = -I*(FzP+1.0); - - CpI = (1.0+Fz)*(1.0+FzP)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpFz = I*(1.0+FzP)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpFzP = I*(1.0+Fz)*((Nd-Ed)*(Nb-Eb)-(Na-Ea)*(Nc-Ec)); - CpNa = -I*(1.0+Fz)*(1.0+FzP)*(Nc-Ec); - CpNb = I*(1.0+Fz)*(1.0+FzP)*(Nd-Ed); - CpNc = -I*(1.0+Fz)*(1.0+FzP)*(Na-Ea); - CpNd = I*(1.0+Fz)*(1.0+FzP)*(Nb-Eb); - - SpI = -CpI/B+C*BpI/(B*B); - SpFz = -CpFz/B+C*BpFz/(B*B); - SpFzP = -CpFzP/B+C*BpFzP/(B*B); - SpNa = -CpNa/B+C*BpNa/(B*B); - SpNb = -CpNb/B+C*BpNb/(B*B); - SpNc = -CpNc/B+C*BpNc/(B*B); - SpNd = -CpNd/B+C*BpNd/(B*B); - } - double DS; - DS = sqrt( SpI*dI*SpI*dI + SpFz*dFz*SpFz*dFz + SpFzP*dFzP*SpFzP*dFzP + - SpNa*SpNa*Na + SpNb*SpNb*Nb + SpNc*SpNc*Nc + SpNd*SpNd*Nd ); - // warning: S here denotes the method prediction .......... - cout << "********************************************************" << endl; - cout << "Signal Prediction: " << S << "+-" << DS << "(stat)" << endl; - cout << "********************************************************" << endl; - cout << "Parameters used in calculation: " << endl; - cout << "I= " << I << "+-" << dI << endl; - cout << "Fz= " << Fz << "+-" << dFz << endl; - cout << "FzP=" << FzP << "+-" << dFzP << endl; - cout << endl; - cout << "ABCD Regions population:" << endl; - cout << "A: N=" << Na << ", sig=" << a_sig << ", qcd=" << a_qcd - << ", ewk=" << a_ewk << endl; - cout << "B: N=" << Nb << ", sig=" << b_sig << ", qcd=" << b_qcd - << ", ewk=" << b_ewk << endl; - cout << "C: N=" << Nc << ", sig=" << c_sig << ", qcd=" << c_qcd - << ", ewk=" << c_ewk << endl; - cout << "D: N=" << Nd << ", sig=" << d_sig << ", qcd=" << d_qcd - << ", ewk=" << d_ewk << endl; - cout << "K value from MC: " << KMC << endl; - cout << endl; - cout << "Statistical Error Summary: " << endl; - cout << "due to Fz = "<< SpFz*dFz<< ", ("< file, vector type, - vector weight, TString xtitle) -{ - gROOT->Reset(); - gROOT->ProcessLine(".L tdrstyle.C"); - gROOT->ProcessLine("setTDRStyle()"); - // automatic recognition of histogram dimension - int NBins = 0; double min = 0; double max = -1; - for (int i=0; i< (int) file.size(); ++i) { - if (weight[i]>0) { - TFile f(file[i]); - TH1F *h = (TH1F*) f.Get(histoName); - NBins = h->GetNbinsX(); - min = h->GetBinLowEdge(1); - max = h->GetBinLowEdge(NBins+1); - break; - } - } - if (NBins ==0 || (max0) { - TFile f(file[i]); - TH1F *h = (TH1F*) f.Get(histoName); - h_wenu.Add(h, weight[i]); - } - } - // Bkgs .............................................................. - // - // QCD light flavor - TH1F h_qcd("h_qcd", "h_qcd", NBins, min, max); - for (int i=0; i0) { - TFile f(file[i]); - TH1F *h = (TH1F*) f.Get(histoName); - h_qcd.Add(h, weight[i]); - } - } - // QCD heavy flavor - TH1F h_bce("h_bce", "h_bce", NBins, min, max); - for (int i=0; i0) { - TFile f(file[i]); - TH1F *h = (TH1F*) f.Get(histoName); - h_bce.Add(h, weight[i]); - } - } - // QCD Gjets - TH1F h_gj("h_gj", "h_gj", NBins, min, max); - for (int i=0; i0) { - TFile f(file[i]); - TH1F *h = (TH1F*) f.Get(histoName); - h_gj.Add(h, weight[i]); - } - } - // Other EWK bkgs - TH1F h_ewk("h_ewk", "h_ewk", NBins, min, max); - for (int i=0; i0) { - TFile f(file[i]); - TH1F *h = (TH1F*) f.Get(histoName); - h_ewk.Add(h, weight[i]); - } - } - // - // ok now decide how to plot them: - // first the EWK bkgs - h_ewk.SetFillColor(3); - // - // then the gjets - h_gj.Add(&h_ewk); - h_gj.SetFillColor(1); - // thent the QCD dijets - h_bce.Add(&h_qcd); - h_bce.Add(&h_gj); - h_bce.SetFillColor(2); - // and the signal at last - TH1F h_tot("h_tot", "h_tot", NBins, min, max); - h_tot.Add(&h_bce); - h_tot.Add(&h_wenu); - h_wenu.SetLineColor(4); h_wenu.SetLineWidth(2); - // - TCanvas c; - h_tot.GetXaxis()->SetTitle(xtitle); - h_tot.Draw("PE"); - h_bce.Draw("same"); - h_gj.Draw("same"); - h_ewk.Draw("same"); - h_wenu.Draw("same"); - - // the Legend - TLegend leg(0.6,0.65,0.95,0.92); - if (wzsignal == "wenu") - leg.AddEntry(&h_wenu, "W#rightarrow e#nu","l"); - else - leg.AddEntry(&h_wenu, "Z#rightarrow ee","l"); - leg.AddEntry(&h_tot, "Signal + Bkg","p"); - leg.AddEntry(&h_bce, "dijets","f"); - leg.AddEntry(&h_gj, "#gamma + jets","f"); - leg.AddEntry(&h_ewk, "EWK+t#bar t", "f"); - leg.Draw("same"); - - c.Print("test.png"); - - - -} - - -// -// reads the ABCD string and returns its value -// value is whatever it exists after the = sign and -// before the comma or the parenthesis -// -// if the string is not contained returns -1 -// if there is no value, but the string is contained -0.5 -// if there is an error in the algorithm return -99 and print error -// else returns its value -double searchABCDstring(TString abcdString, TString keyword) -{ - int size = keyword.Sizeof(); - int existsEntry = abcdString.Index(keyword); - // - if (existsEntry==-1) return -1.; - // - TString previousVal = abcdString(existsEntry-1); - if (!(previousVal == "," || previousVal == " " || - previousVal == "(" )) return -1.; - // - TString afterVal = abcdString(existsEntry+size-1); - //std::cout << "afterVal=" << afterVal << std::endl; - if (afterVal =="," || afterVal==")") return -0.5; - else if (afterVal != "=") return -1.; - // - // now find the comma or the parenthesis after the = sign - int comma = abcdString.Index(",",existsEntry); - //std::cout << "first comma=" << comma << std::endl; - if (comma<0) comma = abcdString.Index(")",existsEntry); - if (comma<0) { - std::cout << "Error in parcing abcd line, chech syntax " - << std::endl; - return -99.; - } - TString svalue=abcdString(existsEntry+size,comma-existsEntry-size); - std::cout << "Found ABCD parameter "<< keyword - << " with value " << svalue << endl; - // convert this to a float - double value = svalue.Atof(); - return value; - -} - - -double Trionym(double a, double b, double c, double sum) -{ - if (a==0) { - return -c/b; - } - double D2 = b*b - 4.*a*c; - //return (-b + sqrt(D2)) / (2.*a); - if (D2 > 0) { - double s1 = (-b + sqrt(D2)) / (2.*a); - double s2 = (-b - sqrt(D2)) / (2.*a); - double solution = fabs(s1-sum)SetPadGridX(gridOn); - tdrStyle->SetPadGridY(gridOn); -} - -// fixOverlay: Redraws the axis - -void fixOverlay() { - gPad->RedrawAxis(); -} - -void setTDRStyle() { - TStyle *tdrStyle = new TStyle("tdrStyle","Style for P-TDR"); - -// For the canvas: - tdrStyle->SetCanvasBorderMode(0); - tdrStyle->SetCanvasColor(kWhite); - tdrStyle->SetCanvasDefH(600); //Height of canvas - tdrStyle->SetCanvasDefW(600); //Width of canvas - tdrStyle->SetCanvasDefX(0); //POsition on screen - tdrStyle->SetCanvasDefY(0); - -// For the Pad: - tdrStyle->SetPadBorderMode(0); - // tdrStyle->SetPadBorderSize(Width_t size = 1); - tdrStyle->SetPadColor(kWhite); - tdrStyle->SetPadGridX(false); - tdrStyle->SetPadGridY(false); - tdrStyle->SetGridColor(0); - tdrStyle->SetGridStyle(3); - tdrStyle->SetGridWidth(1); - -// For the frame: - tdrStyle->SetFrameBorderMode(0); - tdrStyle->SetFrameBorderSize(1); - tdrStyle->SetFrameFillColor(0); - tdrStyle->SetFrameFillStyle(0); - tdrStyle->SetFrameLineColor(1); - tdrStyle->SetFrameLineStyle(1); - tdrStyle->SetFrameLineWidth(1); - -// For the histo: - // tdrStyle->SetHistFillColor(1); - // tdrStyle->SetHistFillStyle(0); - tdrStyle->SetHistLineColor(1); - tdrStyle->SetHistLineStyle(0); - tdrStyle->SetHistLineWidth(1); - // tdrStyle->SetLegoInnerR(Float_t rad = 0.5); - // tdrStyle->SetNumberContours(Int_t number = 20); - - tdrStyle->SetEndErrorSize(2); -// tdrStyle->SetErrorMarker(20); - tdrStyle->SetErrorX(0.); - - tdrStyle->SetMarkerStyle(20); - -//For the fit/function: - tdrStyle->SetOptFit(1); - tdrStyle->SetFitFormat("5.4g"); - tdrStyle->SetFuncColor(2); - tdrStyle->SetFuncStyle(1); - tdrStyle->SetFuncWidth(1); - -//For the date: - tdrStyle->SetOptDate(0); - // tdrStyle->SetDateX(Float_t x = 0.01); - // tdrStyle->SetDateY(Float_t y = 0.01); - -// For the statistics box: - tdrStyle->SetOptFile(0); - tdrStyle->SetOptStat(0); // To display the mean and RMS: SetOptStat("mr"); - tdrStyle->SetStatColor(kWhite); - tdrStyle->SetStatFont(42); - tdrStyle->SetStatFontSize(0.025); - tdrStyle->SetStatTextColor(1); - tdrStyle->SetStatFormat("6.4g"); - tdrStyle->SetStatBorderSize(1); - tdrStyle->SetStatH(0.1); - tdrStyle->SetStatW(0.15); - // tdrStyle->SetStatStyle(Style_t style = 1001); - // tdrStyle->SetStatX(Float_t x = 0); - // tdrStyle->SetStatY(Float_t y = 0); - -// Margins: - tdrStyle->SetPadTopMargin(0.05); - tdrStyle->SetPadBottomMargin(0.12); - tdrStyle->SetPadLeftMargin(0.15); - tdrStyle->SetPadRightMargin(0.04); - -// For the Global title: - - tdrStyle->SetOptTitle(0); - tdrStyle->SetTitleFont(42); - tdrStyle->SetTitleColor(1); - tdrStyle->SetTitleTextColor(1); - tdrStyle->SetTitleFillColor(10); - tdrStyle->SetTitleFontSize(0.05); - // tdrStyle->SetTitleH(0); // Set the height of the title box - // tdrStyle->SetTitleW(0); // Set the width of the title box - // tdrStyle->SetTitleX(0); // Set the position of the title box - // tdrStyle->SetTitleY(0.985); // Set the position of the title box - // tdrStyle->SetTitleStyle(Style_t style = 1001); - // tdrStyle->SetTitleBorderSize(2); - -// For the axis titles: - - tdrStyle->SetTitleColor(1, "XYZ"); - tdrStyle->SetTitleFont(42, "XYZ"); - tdrStyle->SetTitleSize(0.06, "XYZ"); - // tdrStyle->SetTitleXSize(Float_t size = 0.02); // Another way to set the size? - // tdrStyle->SetTitleYSize(Float_t size = 0.02); - tdrStyle->SetTitleXOffset(0.9); - tdrStyle->SetTitleYOffset(1.25); - // tdrStyle->SetTitleOffset(1.1, "Y"); // Another way to set the Offset - -// For the axis labels: - - tdrStyle->SetLabelColor(1, "XYZ"); - tdrStyle->SetLabelFont(42, "XYZ"); - tdrStyle->SetLabelOffset(0.007, "XYZ"); - tdrStyle->SetLabelSize(0.05, "XYZ"); - -// For the axis: - - tdrStyle->SetAxisColor(1, "XYZ"); - tdrStyle->SetStripDecimals(kTRUE); - tdrStyle->SetTickLength(0.03, "XYZ"); - tdrStyle->SetNdivisions(510, "XYZ"); - tdrStyle->SetPadTickX(1); // To get tick marks on the opposite side of the frame - tdrStyle->SetPadTickY(1); - -// Change for log plots: - tdrStyle->SetOptLogx(0); - tdrStyle->SetOptLogy(0); - tdrStyle->SetOptLogz(0); - -// Postscript options: - tdrStyle->SetPaperSize(20.,20.); - // tdrStyle->SetLineScalePS(Float_t scale = 3); - // tdrStyle->SetLineStyleString(Int_t i, const char* text); - // tdrStyle->SetHeaderPS(const char* header); - // tdrStyle->SetTitlePS(const char* pstitle); - - // tdrStyle->SetBarOffset(Float_t baroff = 0.5); - // tdrStyle->SetBarWidth(Float_t barwidth = 0.5); - // tdrStyle->SetPaintTextFormat(const char* format = "g"); - // tdrStyle->SetPalette(Int_t ncolors = 0, Int_t* colors = 0); - // tdrStyle->SetTimeOffset(Double_t toffset); - // tdrStyle->SetHistMinimumZero(kTRUE); - - tdrStyle->cd(); - -} diff --git a/ElectroWeakAnalysis/WENu/python/simpleCutBasedElectronIDSpring10_cfi.py b/ElectroWeakAnalysis/WENu/python/simpleCutBasedElectronIDSpring10_cfi.py deleted file mode 100644 index 88f7ce351171b..0000000000000 --- a/ElectroWeakAnalysis/WENu/python/simpleCutBasedElectronIDSpring10_cfi.py +++ /dev/null @@ -1,164 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -## Electron ID Based on Simple Cuts: Spring10 MC tuned selections -# -# Instructions on how to use this file -# ==================================== -# -# The selections that are implemented in this python cfg are -# explained in this twiki page: -# https://twiki.cern.ch/twiki/bin/view/CMS/SimpleCutBasedEleID -# In summary, they come in 6 different tightness levels. For -# each tightness, the user can select whether they want -# combined isolation or relative isolations. -# -# In order to use this cfg file you have to include it from the -# python directory that you have placed it, clone some selection -# of your preference and run it in your sequence -# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -# from ElectroWeakAnalysis.WENu.simpleCutBasedElectronID_cfi import * -# -# simpleEleId_95relIso = simpleCutBasedElectronID.clone() -# simpleEleId_95relIso.electronQuality = '_95relIso_' -# mySequence = cms.Sequence(...+...+..+simpleEleId95relIso+...) -# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -# Warning: make sure that you use the correct tags for the -# RecoEgamma/ElectronIdentification package -# consult this twiki to obtain the latest information: -# -# https://twiki.cern.ch/twiki/bin/view/CMS/SimpleCutBasedEleID -# -# this version of the file needs -# V00-03-07-03 RecoEgamma/ElectronIdentification - -simpleCutBasedElectronID = cms.EDProducer("EleIdCutBasedExtProducer", - -# import here your collections - src = cms.InputTag("gsfElectrons"), - #reducedBarrelRecHitCollection = cms.InputTag("ecalRecHit","EcalRecHitsEB"), - #reducedEndcapRecHitCollection = cms.InputTag("ecalRecHit","EcalRecHitsEE"), - # Spring10 uses these names: - reducedBarrelRecHitCollection = cms.InputTag("reducedEcalRecHitsEB"), - reducedEndcapRecHitCollection = cms.InputTag("reducedEcalRecHitsEE"), - # if you want the vertices or the offline beam spot - verticesCollection = cms.InputTag("offlineBeamSpot"), - #dataMagneticFieldSetUp = cms.bool(False), - #dcsTag = cms.InputTag("scalersRawToDigi"), - algorithm = cms.string('eIDCB'), - - #electronIDType: robust for the simple Cut-Based - #electronQuality: see later - #electronVersion: use V03 with the offline beam spot - electronIDType = cms.string('robust'), - electronQuality = cms.string('test'), - electronVersion = cms.string('V04'), - -#### -#### Selections with Relative Isolation - robust95relIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(1.5e-01, 1.0e-02, 8.0e-01, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 1.5e-01, - 2.0e+00, 1.2e-01, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.0, 0.0, ), -# endcap = cms.vdouble(7.0e-02, 3.0e-02, 7.0e-01, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 8.0e-02, -# 6.0e-02, 5.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.0, 0.0, ), - endcap = cms.vdouble(7.0e-02, 3.0e-02, 7.0e-01, 1.0e-02, -1, -1, 9999., 9999., 9999., 9999., 9999., 8.0e-02, - 6.0e-02, 5.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.0, 0.0, ), - ), - robust90relIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(1.2e-01, 1.0e-02, 8.0e-01, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 1.2e-01, - 9.0e-02, 1.0e-01, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(5.0e-02, 3.0e-02, 7.0e-01, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 5.0e-02, -# 6.0e-02, 3.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - endcap = cms.vdouble(5.0e-02, 3.0e-02, 7.0e-01, 9.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 5.0e-02, - 6.0e-02, 3.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - ), - robust85relIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(4.0e-02, 1.0e-02, 6.0e-02, 6.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9.0e-02, - 8.0e-02, 1.0e-01, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 4.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 5.0e-02, -# 5.0e-02, 2.5e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 4.0e-02, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 5.0e-02, - 5.0e-02, 2.5e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - ), - robust80relIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(4.0e-02, 1.0e-02, 6.0e-02, 4.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9.0e-02, - 7.0e-02, 1.0e-01, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 3.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 4.0e-02, -# 5.0e-02, 2.5e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 3.0e-02, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 4.0e-02, - 5.0e-02, 2.5e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - ), - # 70% point modified with restricting cuts to physical values - robust70relIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(2.5e-02, 1.0e-02, 3.0e-02, 4.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 5.0e-02, - 6.0e-02, 3.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 2.5e-02, -# 2.5e-02, 2.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 5.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 2.5e-02, - 2.5e-02, 2.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - ), - # 60% point modified with restricting cuts to physical values - robust60relIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(2.5e-02, 1.0e-02, 2.5e-02, 4.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 4.0e-02, - 4.0e-02, 3.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 2.5e-02, -# 2.0e-02, 2.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 5.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 2.5e-02, - 2.0e-02, 2.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - ), - -#### -#### Selections with Combined Isolation - - robust95cIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(1.5e-01, 1.0e-02, 8.0e-01, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 1.5e-01, 0.0, -9999., 9999., 9999., 1, -1, 0.0, 0.0, ), -# endcap = cms.vdouble(7.0e-02, 3.0e-02, 7.0e-01, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., -# 9999., 9999., 9999., 9999., 9999., 1.0e-01, 0.0, -9999., 9999., 9999., 1, -1, 0.0, 0.0, ), - endcap = cms.vdouble(7.0e-02, 3.0e-02, 7.0e-01, 1.0e-02, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 1.0e-01, 0.0, -9999., 9999., 9999., 1, -1, 0.0, 0.0, ), - ), - robust90cIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(1.2e-01, 1.0e-02, 8.0e-01, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 1.0e-01, 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(5.0e-02, 3.0e-02, 7.0e-01, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., -# 9999., 9999., 9999., 9999., 9999., 7.0e-02, 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - endcap = cms.vdouble(5.0e-02, 3.0e-02, 7.0e-01, 9.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 7.0e-02, 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - ), - robust85cIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(4.0e-02, 1.0e-02, 6.0e-02, 6.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 9.0e-02, 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 4.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., -# 9999., 9999., 9999., 9999., 9999., 6.0e-02, 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 4.0e-02, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 6.0e-02, 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - ), - robust80cIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(4.0e-02, 1.0e-02, 6.0e-02, 4.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 7.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 3.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., -# 9999., 9999., 9999., 9999., 9999., 6.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 3.0e-02, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 6.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - ), - # 70% point modified with restricting cuts to physical values - robust70cIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(2.5e-02, 1.0e-02, 3.0e-02, 4.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 4.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., -# 9999., 9999., 9999., 9999., 9999., 3.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 5.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 3.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - ), - # 60% point modified with restricting cuts to physical values - robust60cIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(2.5e-02, 1.0e-02, 2.5e-02, 4.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 3.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., -# 9999., 9999., 9999., 9999., 9999., 2.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 5.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 2.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - ), - -) - diff --git a/ElectroWeakAnalysis/WENu/python/simpleCutBasedSpring10SelectionBlocks_cfi.py b/ElectroWeakAnalysis/WENu/python/simpleCutBasedSpring10SelectionBlocks_cfi.py deleted file mode 100644 index e9cf485ad85d2..0000000000000 --- a/ElectroWeakAnalysis/WENu/python/simpleCutBasedSpring10SelectionBlocks_cfi.py +++ /dev/null @@ -1,294 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -######################################################### -## 95% -selection_95relIso = cms.PSet ( - trackIso_EB = cms.untracked.double(1.5e-01), - ecalIso_EB = cms.untracked.double(2.0e+00), - hcalIso_EB = cms.untracked.double(1.2e-01), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(8.0e-01), - deta_EB = cms.untracked.double(7.0e-03), - hoe_EB = cms.untracked.double(1.5e-01), - cIso_EB = cms.untracked.double(10000.), - - trackIso_EE = cms.untracked.double(8.0e-02), - ecalIso_EE = cms.untracked.double(6.0e-02), - hcalIso_EE = cms.untracked.double(5.0e-02), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(7.0e-01), - deta_EE = cms.untracked.double(1.0e-02), - hoe_EE = cms.untracked.double(7.0e-02), - cIso_EE = cms.untracked.double(10000. ), - useConversionRejection = cms.untracked.bool(False), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - ) - -selection_95cIso = cms.PSet ( - trackIso_EB = cms.untracked.double(100000.), - ecalIso_EB = cms.untracked.double(100000.), - hcalIso_EB = cms.untracked.double(100000.), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(8.0e-01), - deta_EB = cms.untracked.double(7.0e-03), - hoe_EB = cms.untracked.double(1.5e-01), - cIso_EB = cms.untracked.double(1.5e-01), - - trackIso_EE = cms.untracked.double(100000.), - ecalIso_EE = cms.untracked.double(100000.), - hcalIso_EE = cms.untracked.double(100000.), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(7.0e-01), - deta_EE = cms.untracked.double(1.0e-02), - hoe_EE = cms.untracked.double(7.0e-02), - cIso_EE = cms.untracked.double(1.0e-01), - useConversionRejection = cms.untracked.bool(False), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - ) - -######################################################### -## 90% -selection_90relIso = cms.PSet ( - trackIso_EB = cms.untracked.double(1.2e-01), - ecalIso_EB = cms.untracked.double(9.0e-02), - hcalIso_EB = cms.untracked.double(1.0e-01), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(8.0e-01), - deta_EB = cms.untracked.double(7.0e-03), - hoe_EB = cms.untracked.double(1.2e-01), - cIso_EB = cms.untracked.double(10000. ), - - trackIso_EE = cms.untracked.double(5.0e-02), - ecalIso_EE = cms.untracked.double(6.0e-02), - hcalIso_EE = cms.untracked.double(3.0e-02), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(7.0e-01), - deta_EE = cms.untracked.double(9.0e-03), - hoe_EE = cms.untracked.double(5.0e-02), - cIso_EE = cms.untracked.double(10000. ), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - ) - -selection_90cIso = cms.PSet ( - trackIso_EB = cms.untracked.double(100000.), - ecalIso_EB = cms.untracked.double(100000.), - hcalIso_EB = cms.untracked.double(100000.), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(8.0e-01), - deta_EB = cms.untracked.double(7.0e-03), - hoe_EB = cms.untracked.double(1.2e-01), - cIso_EB = cms.untracked.double(1.0e-01), - - trackIso_EE = cms.untracked.double(100000.), - ecalIso_EE = cms.untracked.double(100000.), - hcalIso_EE = cms.untracked.double(100000.), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(7.0e-01), - deta_EE = cms.untracked.double(9.0e-03), - hoe_EE = cms.untracked.double(5.0e-02), - cIso_EE = cms.untracked.double(7.0e-02), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - ) - -######################################################### -## 85% -selection_85relIso = cms.PSet ( - trackIso_EB = cms.untracked.double(9.0e-02), - ecalIso_EB = cms.untracked.double(8.0e-02), - hcalIso_EB = cms.untracked.double(1.0e-01), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(6.0e-02), - deta_EB = cms.untracked.double(6.0e-03), - hoe_EB = cms.untracked.double(4.0e-02), - cIso_EB = cms.untracked.double(10000. ), - - trackIso_EE = cms.untracked.double(5.0e-02), - ecalIso_EE = cms.untracked.double(5.0e-02), - hcalIso_EE = cms.untracked.double(2.5e-02), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(4.0e-02), - deta_EE = cms.untracked.double(7.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(10000. ), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - ) - -selection_85cIso = cms.PSet ( - trackIso_EB = cms.untracked.double(100000.), - ecalIso_EB = cms.untracked.double(100000.), - hcalIso_EB = cms.untracked.double(100000.), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(6.0e-02), - deta_EB = cms.untracked.double(6.0e-03), - hoe_EB = cms.untracked.double(4.0e-02), - cIso_EB = cms.untracked.double(9.0e-02), - - trackIso_EE = cms.untracked.double(100000.), - ecalIso_EE = cms.untracked.double(100000.), - hcalIso_EE = cms.untracked.double(100000.), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(4.0e-02), - deta_EE = cms.untracked.double(7.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(6.0e-02), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - ) - -######################################################### -## 80% -selection_80relIso = cms.PSet ( - trackIso_EB = cms.untracked.double(9.0e-02), - ecalIso_EB = cms.untracked.double(7.0e-02), - hcalIso_EB = cms.untracked.double(1.0e-01), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(6.0e-02), - deta_EB = cms.untracked.double(4.0e-03), - hoe_EB = cms.untracked.double(4.0e-02), - cIso_EB = cms.untracked.double(100000.), - - trackIso_EE = cms.untracked.double(4.0e-02), - ecalIso_EE = cms.untracked.double(5.0e-02), - hcalIso_EE = cms.untracked.double(2.5e-02), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(3.0e-02), - deta_EE = cms.untracked.double(7.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(100000.), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(0), - ) - -selection_80cIso = cms.PSet ( - trackIso_EB = cms.untracked.double(100000.), - ecalIso_EB = cms.untracked.double(100000.), - hcalIso_EB = cms.untracked.double(100000.), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(6.0e-02), - deta_EB = cms.untracked.double(4.0e-03), - hoe_EB = cms.untracked.double(4.0e-02), - cIso_EB = cms.untracked.double(7.0e-02), - - trackIso_EE = cms.untracked.double(100000.), - ecalIso_EE = cms.untracked.double(100000.), - hcalIso_EE = cms.untracked.double(100000.), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(3.0e-02), - deta_EE = cms.untracked.double(7.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(6.0e-02), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(0), - ) - -######################################################### -## 70% corrected with lower limits to cut values -selection_70relIso = cms.PSet ( - trackIso_EB = cms.untracked.double(5.0e-02), - ecalIso_EB = cms.untracked.double(6.0e-02), - hcalIso_EB = cms.untracked.double(3.0e-02), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(3.0e-02), - deta_EB = cms.untracked.double(4.0e-03), - hoe_EB = cms.untracked.double(2.5e-02), - cIso_EB = cms.untracked.double(100000.), - - trackIso_EE = cms.untracked.double(2.5e-02), - ecalIso_EE = cms.untracked.double(2.5e-02), - hcalIso_EE = cms.untracked.double(2.0e-02), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(2.0e-02), - deta_EE = cms.untracked.double(5.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(100000.), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(0), - ) - -selection_70cIso = cms.PSet ( - trackIso_EB = cms.untracked.double(100000.), - ecalIso_EB = cms.untracked.double(100000.), - hcalIso_EB = cms.untracked.double(100000.), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(3.0e-02), - deta_EB = cms.untracked.double(4.0e-03), - hoe_EB = cms.untracked.double(2.5e-02), - cIso_EB = cms.untracked.double(4.0e-02), - - trackIso_EE = cms.untracked.double(100000.), - ecalIso_EE = cms.untracked.double(100000.), - hcalIso_EE = cms.untracked.double(100000.), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(2.0e-02), - deta_EE = cms.untracked.double(5.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(3.0e-02), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(0), - ) - -######################################################### -## 60% corrected with lower limits to cut values -selection_60relIso = cms.PSet ( - trackIso_EB = cms.untracked.double(4.0e-02), - ecalIso_EB = cms.untracked.double(4.0e-02), - hcalIso_EB = cms.untracked.double(3.0e-02), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(2.5e-02), - deta_EB = cms.untracked.double(4.0e-03), - hoe_EB = cms.untracked.double(2.5e-02), - cIso_EB = cms.untracked.double(100000.), - - trackIso_EE = cms.untracked.double(2.5e-02), - ecalIso_EE = cms.untracked.double(2.0e-02), - hcalIso_EE = cms.untracked.double(2.0e-02), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(2.0e-02), - deta_EE = cms.untracked.double(5.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(100000.), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(0), - ) - -selection_60cIso = cms.PSet ( - trackIso_EB = cms.untracked.double(100000.), - ecalIso_EB = cms.untracked.double(100000.), - hcalIso_EB = cms.untracked.double(100000.), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(2.5e-02), - deta_EB = cms.untracked.double(4.0e-03), - hoe_EB = cms.untracked.double(2.5e-02), - cIso_EB = cms.untracked.double(3.0e-02), - - trackIso_EE = cms.untracked.double(100000.), - ecalIso_EE = cms.untracked.double(100000.), - hcalIso_EE = cms.untracked.double(100000.), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(2.0e-02), - deta_EE = cms.untracked.double(5.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(2.0e-02), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(0), - ) - -######################################################### - - - diff --git a/ElectroWeakAnalysis/WENu/python/simpleEleIdSequence_cff.py b/ElectroWeakAnalysis/WENu/python/simpleEleIdSequence_cff.py deleted file mode 100644 index ebe9ea6e177a6..0000000000000 --- a/ElectroWeakAnalysis/WENu/python/simpleEleIdSequence_cff.py +++ /dev/null @@ -1,58 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from ElectroWeakAnalysis.WENu.simpleCutBasedElectronIDSpring10_cfi import * - - -simpleEleId95relIso = simpleCutBasedElectronID.clone() -simpleEleId95relIso.electronQuality = '95relIso' - -simpleEleId90relIso = simpleCutBasedElectronID.clone() -simpleEleId90relIso.electronQuality = '90relIso' - -simpleEleId85relIso = simpleCutBasedElectronID.clone() -simpleEleId85relIso.electronQuality = '85relIso' - -simpleEleId80relIso = simpleCutBasedElectronID.clone() -simpleEleId80relIso.electronQuality = '80relIso' - -simpleEleId70relIso = simpleCutBasedElectronID.clone() -simpleEleId70relIso.electronQuality = '70relIso' - -simpleEleId60relIso = simpleCutBasedElectronID.clone() -simpleEleId60relIso.electronQuality = '60relIso' - - -simpleEleId95cIso = simpleCutBasedElectronID.clone() -simpleEleId95cIso.electronQuality = '95cIso' - -simpleEleId90cIso = simpleCutBasedElectronID.clone() -simpleEleId90cIso.electronQuality = '90cIso' - -simpleEleId85cIso = simpleCutBasedElectronID.clone() -simpleEleId85cIso.electronQuality = '85cIso' - -simpleEleId80cIso = simpleCutBasedElectronID.clone() -simpleEleId80cIso.electronQuality = '80cIso' - -simpleEleId70cIso = simpleCutBasedElectronID.clone() -simpleEleId70cIso.electronQuality = '70cIso' - -simpleEleId60cIso = simpleCutBasedElectronID.clone() -simpleEleId60cIso.electronQuality = '60cIso' - - - -simpleEleIdSequence = cms.Sequence(simpleEleId95relIso+ - simpleEleId90relIso+ - simpleEleId85relIso+ - simpleEleId80relIso+ - simpleEleId70relIso+ - simpleEleId60relIso+ - simpleEleId95cIso+ - simpleEleId90cIso+ - simpleEleId85cIso+ - simpleEleId80cIso+ - simpleEleId70cIso+ - simpleEleId60cIso - ) - diff --git a/ElectroWeakAnalysis/WENu/src/GenPurposeSkimmerData.cc b/ElectroWeakAnalysis/WENu/src/GenPurposeSkimmerData.cc deleted file mode 100644 index bc56d0f60b6c6..0000000000000 --- a/ElectroWeakAnalysis/WENu/src/GenPurposeSkimmerData.cc +++ /dev/null @@ -1,1032 +0,0 @@ -// -*- C++ -*- -// -// Package: GenPurposeSkimmerData -// Class: GenPurposeSkimmerData -// -/**\class GenPurposeSkimmerData GenPurposeSkimmerData.cc - - - Description: - =============== - Implementation: - =============== - This is a general purpose Skimmer - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - It reads datasets and keeps only the analysis-relevant information - and stores it in a simple TTree. - Code Inspired by the T&P code by Claire Timlin - Note: a similar code to read PAT tuples is already available - - History: -16.10.08: first version -24.10.08: added ECAL/HCAL isolation + sigma ieta ieta (S. Harper) -30.10.08: all isolations use isodeposits - all parameters are untracked -18.03.09: modified to store just the 4 highest ET gsf electrons in the event -02.04.09: version for redigi including particle flow MET + gen level MET -04.04.09: version for redigi including tcMET, MET eta dropped -22.04.09: version for redigi including MET Type1 corrections -23.04.09: version completely changes to read from PAT....................... -07.09.09: version for 3_1_2 version -08.09.09: version for 3_1_2 that keeps all the trigger info and reduced - number of the other collections - - - Further Information/Inquiries: - Nikos Rompotis - Imperial College London - Nikolaos.Rompotis@Cern.ch - -*/ -// -// Original Author: Nikolaos Rompotis -// Created: Thu Oct 16 17:11:55 CEST 2008 -// -// - -#include "ElectroWeakAnalysis/WENu/interface/GenPurposeSkimmerData.h" - -// -// -// -#include "FWCore/Common/interface/TriggerNames.h" -// -// -GenPurposeSkimmerData::GenPurposeSkimmerData(const edm::ParameterSet &ps) - -{ - // - // I N P U T P A R A M E T E R S - // - // output file name - outputFile_ = ps.getUntrackedParameter("outputfile"); - // - // Electron Collection - ElectronCollectionToken_ = - consumes(ps.getUntrackedParameter("ElectronCollection")); - // - // MC: - //MCCollection_ = ps.getUntrackedParameter("MCCollection"); - //MCCollectionToken_ = consumes(MCCollection_); - //MCMatch_Deta_ = ps.getUntrackedParameter("MCMatch_Deta",0.1); - //MCMatch_Dphi_ = ps.getUntrackedParameter("MCMatch_Dphi",0.35); - // - // MET Collections: - MetCollectionTag_ = ps.getUntrackedParameter("MetCollectionTag"); - MetCollectionToken_ = consumes(MetCollectionTag_); - mcMetCollectionToken_ = consumes(ps.getUntrackedParameter("mcMetCollectionTag")); - t1MetCollectionToken_ = consumes(ps.getUntrackedParameter("t1MetCollectionTag")); - pfMetCollectionToken_ = - consumes(ps.getUntrackedParameter("pfMetCollectionTag")); - tcMetCollectionToken_ = consumes(ps.getUntrackedParameter("tcMetCollectionTag")); - // genMetCollectionToken_ = consumes(ps.getUntrackedParameter("genMetCollectionTag")); - // - // HLT parameters: - // allow info for 2 paths and 2 filters - // --------------------------------------------------------------------------- - HLTCollectionE29_ = ps.getUntrackedParameter("HLTCollectionE29"); - HLTCollectionE29Token_ = consumes(HLTCollectionE29_); - HLTCollectionE31_ = ps.getUntrackedParameter("HLTCollectionE31"); - HLTCollectionE31Token_ = consumes(HLTCollectionE31_); - HLTTriggerResultsE29_ = ps.getUntrackedParameter("HLTTriggerResultsE29"); - HLTTriggerResultsE29Token_ = consumes(HLTTriggerResultsE29_); - HLTTriggerResultsE31_ = ps.getUntrackedParameter("HLTTriggerResultsE31"); - HLTTriggerResultsE31Token_ = consumes(HLTTriggerResultsE31_); - //HLTPath_ = ps.getUntrackedParameter("HLTPath","HLT_Ele15_LW_L1R"); - //HLTFilterType_ =ps.getUntrackedParameter("HLTFilterType"); - // - // matching HLT objects to electrons - ProbeHLTObjMaxDR = ps.getUntrackedParameter("ProbeHLTObjMaxDR", 0.2); - // - // ---------------------------------------------------------------------------- - // - // detector geometry - // - BarrelMaxEta = ps.getUntrackedParameter("BarrelMaxEta"); - EndcapMinEta = ps.getUntrackedParameter("EndcapMinEta"); - EndcapMaxEta = ps.getUntrackedParameter("EndcapMaxEta"); - // - ctfTracksToken_ = consumes(ps.getUntrackedParameter("ctfTracksTag")); - corHybridscToken_ = consumes(ps.getUntrackedParameter("corHybridsc")); - multi5x5scToken_ = consumes(ps.getUntrackedParameter("multi5x5sc")); - offlineBeamSpotToken_ = consumes(edm::InputTag("offlineBeamSpot")); - pMuonsToken_ = consumes(edm::InputTag("selectedLayer1Muons")); -} - -GenPurposeSkimmerData::~GenPurposeSkimmerData() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - -// -// member functions -// - -// ------------ method called to for each event ------------ -void GenPurposeSkimmerData::analyze(const edm::Event &evt, const edm::EventSetup &es) { - // MC Collection ------------------------------------------------ - - // edm::Handle pGenPart; - // evt.getByToken(MCCollectionToken_, pGenPart); - // if ( not pGenPart.isValid() ) { - // std::cout <<"Error! Can't get "< pElectrons; - - try { - evt.getByToken(ElectronCollectionToken_, pElectrons); - } catch (cms::Exception const &) { - edm::LogError("") << "Error! Can't get ElectronCollection by label. "; - } - // *********************************************************************** - // check which trigger has accepted the event **************************** - // *********************************************************************** - // - // path allocation: first 10 paths belong to the low lum menu, the rest - // in the high lum one - // - // Low Luminosity Menu (8e29) - // - /* - edm::Handle HLTResultsE29; - evt.getByToken(HLTTriggerResultsE29Token_, HLTResultsE29); - if (not HLTResultsE29.isValid()) { - std::cout << "HLT Results with label: " << HLTTriggerResultsE29_ - << " not found" << std::endl; - return; - } - // - edm::Handle pHLTe29; - evt.getByToken(HLTCollectionE29Token_, pHLTe29); - if (not pHLTe29.isValid()) { - std::cout << "HLT Results with label: " << HLTCollectionE29_ - << " not found" << std::endl; - return; - } - // - int sum = 0; - // - for (int iT=0; iT<10; ++iT) { - event_HLTPath[iT] = 0; - numberOfHLTFilterObjects[iT] =0; - // - const edm::TriggerNames & triggerNames = evt.triggerNames(*HLTResultsE29); - unsigned int trigger_size = HLTResultsE29->size(); - unsigned int trigger_position = triggerNames.triggerIndex(HLTPath_[iT]); - if (trigger_position < trigger_size ) - event_HLTPath[iT] = (int) HLTResultsE29->accept(trigger_position); - // - numberOfHLTFilterObjects[iT] = 0; - // check explicitly that the filter is there - const int nF(pHLTe29->sizeFilters()); - const int filterInd = pHLTe29->filterIndex(HLTFilterType_[iT]); - if (nF != filterInd) { - const trigger::Vids& VIDS (pHLTe29->filterIds(filterInd)); - const trigger::Keys& KEYS(pHLTe29->filterKeys(filterInd)); - const int nI(VIDS.size()); - const int nK(KEYS.size()); - numberOfHLTFilterObjects[iT] = (nI>nK)? nI:nK; - } - //if (iT==2) // HLT_Ele15_LW_L1R only this trigger is required - sum += numberOfHLTFilterObjects[iT]; - } - // - // High Luminosity Menu (1e31) DISABLED - only low lumi level - // - edm::Handle HLTResultsE31; - evt.getByToken(HLTTriggerResultsE31Token_, HLTResultsE31); - if (not HLTResultsE31.isValid()) { - std::cout << "HLT Results with label: " << HLTTriggerResultsE31_ - << " not found" << std::endl; - return; - } - //// - edm::Handle pHLTe31; - evt.getByToken(HLTCollectionE31Token_, pHLTe31); - if (not pHLTe31.isValid()) { - std::cout << "HLT Results with label: " << HLTCollectionE31_ - << " not found" << std::endl; - return; - } - //// - for (int iT=10; iT<25; ++iT) { - event_HLTPath[iT] = 0; - numberOfHLTFilterObjects[iT] =0; - // - const edm::TriggerNames & triggerNames = evt.triggerNames(*HLTResultsE31); - unsigned int trigger_size = HLTResultsE31->size(); - unsigned int trigger_position = triggerNames.triggerIndex(HLTPath_[iT]); - if (trigger_position < trigger_size ) - event_HLTPath[iT] = (int) HLTResultsE31->accept(trigger_position); - // - numberOfHLTFilterObjects[iT] = 0; - // check explicitly that the filter is there - const int nF(pHLTe31->sizeFilters()); - const int filterInd = pHLTe31->filterIndex(HLTFilterType_[iT]); - if (nF != filterInd) { - const trigger::Vids& VIDS (pHLTe31->filterIds(filterInd)); - const trigger::Keys& KEYS(pHLTe31->filterKeys(filterInd)); - const int nI(VIDS.size()); - const int nK(KEYS.size()); - numberOfHLTFilterObjects[iT] = (nI>nK)? nI:nK; - } - // not needed - sum += numberOfHLTFilterObjects[iT]; - } - if (sum == 0) { - //std::cout << "No trigger found in this event..." << std::endl; - return; - } - */ - //std::cout << "HLT objects: #" << sum << std::endl; - // print out the triggers that exist in this event - // comment this out if you want to see the names of the existing triggers - edm::Handle pHLTe29; - evt.getByToken(HLTCollectionE29Token_, pHLTe29); - if (not pHLTe29.isValid()) { - std::cout << "Error!!! HLT is missing!" << std::endl; - return; - } /* - else { - // check explicitly that the filter is there - const int nF(pHLTe29->sizeFilters()); - for (int filterInd=0; filterInd< nF; ++filterInd) { - const trigger::Vids& VIDS (pHLTe29->filterIds(filterInd)); - const trigger::Keys& KEYS(pHLTe29->filterKeys(filterInd)); - const int nI(VIDS.size()); - const int nK(KEYS.size()); - int nObjects = (nI>nK)? nI:nK; - const edm::InputTag filterTag = pHLTe29->filterTag(filterInd); - std::cout << "Found filter with name " << filterTag - << " and #objects: #" << nObjects << std::endl; - } - } - */ - // ********************************************************************* - // MET Collections: - // - edm::Handle caloMET; - evt.getByToken(MetCollectionToken_, caloMET); - // - edm::Handle t1MET; - evt.getByToken(t1MetCollectionToken_, t1MET); - // - edm::Handle mcMET; - evt.getByToken(mcMetCollectionToken_, mcMET); - // - edm::Handle tcMET; - evt.getByToken(tcMetCollectionToken_, tcMET); - // - edm::Handle pfMET; - evt.getByToken(pfMetCollectionToken_, pfMET); - // - // edm::Handle genMET; - // evt.getByToken(genMetCollectionToken_, genMET); - // - // initialize the MET variables ........................................ - event_MET = -99.; - event_MET_phi = -99.; - event_MET_sig = -99.; - event_mcMET = -99.; - event_mcMET_phi = -99.; - event_mcMET_sig = -99.; - event_tcMET = -99.; - event_tcMET_phi = -99.; - event_tcMET_sig = -99.; - event_pfMET = -99.; - event_pfMET_phi = -99.; - event_pfMET_sig = -99.; - event_t1MET = -99.; - event_t1MET_phi = -99.; - event_t1MET_sig = -99.; - // - //event_genMET = -99.; event_genMET_phi= -99.; event_genMET_sig = -99.; - // - // get the values, if they are available - if (caloMET.isValid()) { - const reco::CaloMETRef MET(caloMET, 0); - event_MET = MET->et(); - event_MET_phi = MET->phi(); - event_MET_sig = MET->mEtSig(); - } else { - std::cout << "caloMET not valid: input Tag: " << MetCollectionTag_ << std::endl; - } - if (tcMET.isValid()) { - const reco::METRef MET(tcMET, 0); - event_tcMET = MET->et(); - event_tcMET_phi = MET->phi(); - event_tcMET_sig = MET->mEtSig(); - } - if (pfMET.isValid()) { - const reco::PFMETRef MET(pfMET, 0); - event_pfMET = MET->et(); - event_pfMET_phi = MET->phi(); - event_pfMET_sig = MET->mEtSig(); - } - if (t1MET.isValid()) { - const pat::METRef MET(t1MET, 0); - event_t1MET = MET->et(); - event_t1MET_phi = MET->phi(); - event_t1MET_sig = MET->mEtSig(); - } - if (mcMET.isValid()) { - const pat::METRef MET(mcMET, 0); - event_mcMET = MET->et(); - event_mcMET_phi = MET->phi(); - event_mcMET_sig = MET->mEtSig(); - } - - // if ( genMET.isValid() ) { - // const reco::GenMETRef MET(genMET, 0); - // event_genMET = MET->et(); event_genMET_phi = MET->phi(); - // event_genMET_sig = MET->mEtSig(); - // } - - // std::cout << "t1MET: " << event_t1MET << " twikiT1MET: " - // << event_twikiT1MET << ", calo="< SC1; - evt.getByToken(corHybridscToken_, SC1); - const reco::SuperClusterCollection *sc1 = SC1.product(); - // multi5x5SuperClustersWithPreshower - edm::Handle SC2; - evt.getByToken(multi5x5scToken_, SC2); - const reco::SuperClusterCollection *sc2 = SC2.product(); - // - const int n1 = sc1->size(); - const int n2 = sc2->size(); - //std::cout << "SC found: hybrid: " << n1 << ", multi5x5: " - // << n2 << std::endl; - // keep details of the 5 highest ET superclusters - for (int i = 0; i < 5; ++i) { - sc_hybrid_et[i] = -9999.; - sc_hybrid_eta[i] = -9999.; - sc_hybrid_phi[i] = -9999.; - // - sc_multi5x5_et[i] = -9999.; - sc_multi5x5_eta[i] = -9999.; - sc_multi5x5_phi[i] = -9999.; - // - } - // sort the energies of the first sc - std::vector ETsc1; - std::vector::const_iterator sc; - for (sc = sc1->begin(); sc != sc1->end(); ++sc) { - reco::SuperCluster mySc = *sc; - double scEt = mySc.energy() / (cosh(mySc.eta())); - ETsc1.push_back(scEt); - } - int *sorted1 = new int[n1]; - double *et1 = new double[n1]; - for (int i = 0; i < n1; ++i) { - et1[i] = ETsc1[i]; - } - // array sorted now has the indices of the highest ET electrons - TMath::Sort(n1, et1, sorted1, true); - // ......................................................................... - std::vector ETsc2; - for (sc = sc2->begin(); sc != sc2->end(); ++sc) { - reco::SuperCluster mySc = *sc; - double scEt = mySc.energy() / (cosh(mySc.eta())); - ETsc2.push_back(scEt); - } - int *sorted2 = new int[n2]; - double *et2 = new double[n2]; - for (int i = 0; i < n2; ++i) { - et2[i] = ETsc2[i]; - } - // array sorted now has the indices of the highest ET electrons - TMath::Sort(n2, et2, sorted2, true); - // - // - for (int probeSc = 0; probeSc < n1; ++probeSc) { - //std::cout<<"sorted["<< probeIt<< "]=" << sorted[probeIt] << std::endl; - // break if you have more than the appropriate number of electrons - if (probeSc >= 5) - break; - // - int sc_index = sorted1[probeSc]; - std::vector::const_iterator Rprobe = sc1->begin() + sc_index; - // - reco::SuperCluster sc0 = *Rprobe; - // now keep the relevant stuff: - sc_hybrid_et[probeSc] = sc0.energy() / (cosh(sc0.eta())); - sc_hybrid_eta[probeSc] = sc0.eta(); - sc_hybrid_phi[probeSc] = sc0.phi(); - } - // ......................................................................... - for (int probeSc = 0; probeSc < n2; ++probeSc) { - //std::cout<<"sorted["<< probeIt<< "]=" << sorted[probeIt] << std::endl; - // break if you have more than the appropriate number of electrons - if (probeSc >= 5) - break; - // - int sc_index = sorted2[probeSc]; - std::vector::const_iterator Rprobe = sc2->begin() + sc_index; - // - reco::SuperCluster sc0 = *Rprobe; - // now keep the relevant stuff: - sc_multi5x5_et[probeSc] = sc0.energy() / (cosh(sc0.eta())); - sc_multi5x5_eta[probeSc] = sc0.eta(); - sc_multi5x5_phi[probeSc] = sc0.phi(); - } - delete[] sorted1; - delete[] sorted2; - delete[] et1; - delete[] et2; - /////// collect the tracks in the event - // edm::InputTag ctfTracksTag("generalTracks", "", InputTagEnding_); - edm::Handle ctfTracks; - evt.getByToken(ctfTracksToken_, ctfTracks); - const reco::TrackCollection *ctf = ctfTracks.product(); - reco::TrackCollection::const_iterator tr; - const int ntracks = ctf->size(); - // - // get the beam spot for the parameter of the track - edm::Handle pBeamSpot; - evt.getByToken(offlineBeamSpotToken_, pBeamSpot); - const reco::BeamSpot *bspot = pBeamSpot.product(); - const math::XYZPoint &bspotPosition = bspot->position(); - // - for (int i = 0; i < 20; ++i) { - ctf_track_pt[i] = -9999.; - ctf_track_eta[i] = -9999.; - ctf_track_phi[i] = -9999.; - ctf_track_vx[i] = -9999.; - ctf_track_vy[i] = -9999.; - ctf_track_vz[i] = -9999.; - ctf_track_tip[i] = -9999.; - ctf_track_tip_bs[i] = -9999.; - } - // - std::vector ETtrack; - for (tr = ctf->begin(); tr != ctf->end(); ++tr) { - reco::Track mySc = *tr; - double scEt = mySc.pt(); - ETtrack.push_back(scEt); - } - int *sortedTr = new int[ntracks]; - double *etTr = new double[ntracks]; - for (int i = 0; i < ntracks; ++i) { - etTr[i] = ETtrack[i]; - } - // array sorted now has the indices of the highest ET electrons - TMath::Sort(ntracks, etTr, sortedTr, true); - // - for (int probeSc = 0; probeSc < ntracks; ++probeSc) { - //std::cout<<"sorted["<< probeIt<< "]=" << sorted[probeIt] << std::endl; - // break if you have more than the appropriate number of electrons - if (probeSc >= 20) - break; - // - int sc_index = sortedTr[probeSc]; - std::vector::const_iterator Rprobe = ctf->begin() + sc_index; - // - reco::Track sc0 = *Rprobe; - // now keep the relevant stuff: - ctf_track_pt[probeSc] = sc0.pt(); - ctf_track_eta[probeSc] = sc0.eta(); - ctf_track_phi[probeSc] = sc0.phi(); - ctf_track_vx[probeSc] = sc0.vx(); - ctf_track_vy[probeSc] = sc0.vy(); - ctf_track_vz[probeSc] = sc0.vz(); - ctf_track_tip[probeSc] = -sc0.dxy(); - ctf_track_tip_bs[probeSc] = -sc0.dxy(bspotPosition); - } - delete[] sortedTr; - delete[] etTr; - // - // keep 4 of the selectedLayer1Muons for reference - edm::Handle pMuons; - evt.getByToken(pMuonsToken_, pMuons); - const pat::MuonCollection *pmuon = pMuons.product(); - pat::MuonCollection::const_iterator muon; - const int nmuons = pMuons->size(); - // - for (int i = 0; i < 4; ++i) { - muon_pt[i] = -9999.; - muon_eta[i] = -9999.; - muon_phi[i] = -9999.; - muon_vx[i] = -9999.; - muon_vy[i] = -9999.; - muon_vz[i] = -9999.; - muon_tip[i] = -9999.; - muon_tip_bs[i] = -9999.; - } - // - std::vector ETmuons; - for (muon = pmuon->begin(); muon != pmuon->end(); ++muon) { - pat::Muon mySc = *muon; - double scEt = mySc.track()->pt(); - ETmuons.push_back(scEt); - } - int *sortedMu = new int[nmuons]; - double *etMu = new double[nmuons]; - for (int i = 0; i < nmuons; ++i) { - etMu[i] = ETmuons[i]; - } - // array sorted now has the indices of the highest ET electrons - TMath::Sort(nmuons, etMu, sortedMu, true); - // - for (int probeSc = 0; probeSc < nmuons; ++probeSc) { - //std::cout<<"sorted["<< probeIt<< "]=" << sorted[probeIt] << std::endl; - // break if you have more than the appropriate number of electrons - if (probeSc >= 4) - break; - // - int sc_index = sortedMu[probeSc]; - std::vector::const_iterator Rprobe = pmuon->begin() + sc_index; - // - pat::Muon sc0 = *Rprobe; - // now keep the relevant stuff: - muon_pt[probeSc] = sc0.track()->pt(); - muon_eta[probeSc] = sc0.track()->eta(); - muon_phi[probeSc] = sc0.track()->phi(); - muon_vx[probeSc] = sc0.track()->vx(); - muon_vy[probeSc] = sc0.track()->vy(); - muon_vz[probeSc] = sc0.track()->vz(); - muon_tip[probeSc] = -sc0.track()->dxy(); - muon_tip_bs[probeSc] = -sc0.track()->dxy(bspotPosition); - } - delete[] sortedMu; - delete[] etMu; - // - if (n1 + n2 + ntracks == 0) { - std::cout << "Return: no sc in this event" << std::endl; - return; - } - // ///////////////////////////////////////////////////////////////////////// - // electron details - /// -*-*-*-*-*--*-*-*-*-*-*-*-*-*-*-*-*--*-*-*-*-*-*-*-*-*-*-*-*-*-*-*--*-*-* - const int MAX_PROBES = 4; - for (int i = 0; i < MAX_PROBES; i++) { - probe_ele_eta_for_tree[i] = -99.0; - probe_ele_et_for_tree[i] = -99.0; - probe_ele_phi_for_tree[i] = -99.0; - probe_ele_Xvertex_for_tree[i] = -99.0; - probe_ele_Yvertex_for_tree[i] = -99.0; - probe_ele_Zvertex_for_tree[i] = -99.0; - probe_ele_tip[i] = -999.; - - probe_sc_eta_for_tree[i] = -99.0; - probe_sc_et_for_tree[i] = -99.0; - probe_sc_phi_for_tree[i] = -99.0; - - probe_charge_for_tree[i] = -99; - probe_sc_pass_fiducial_cut[i] = 0; - probe_classification_index_for_tree[i] = -99; - // - // probe isolation values ............ - probe_isolation_value[i] = 999.0; - probe_iso_user[i] = 999.0; - probe_ecal_isolation_value[i] = 999; - probe_ecal_iso_user[i] = 999; - probe_hcal_isolation_value[i] = 999; - probe_hcal_iso_user[i] = 999; - - probe_ele_hoe[i] = 999.; - probe_ele_shh[i] = 999.; - probe_ele_sihih[i] = 999.; - probe_ele_dhi[i] = 999.; - probe_ele_dfi[i] = 999.; - probe_ele_eop[i] = 999.; - probe_ele_pin[i] = 999.; - probe_ele_pout[i] = 999.; - probe_ele_e5x5[i] = 999.; - probe_ele_e2x5[i] = 999.; - probe_ele_e1x5[i] = 999.; - - // - // - //for (int j=0; j<25; ++j) { - // probe_pass_trigger_cut[i][j]=0; - //} - //probe_hlt_matched_dr[i]=0; - //probe_mc_matched[i] = 0; - //probe_mc_matched_deta[i] = 999.; - //probe_mc_matched_dphi[i] = 999.; - //probe_mc_matched_denergy[i] = 999.; - //probe_mc_matched_mother[i] = 999; - // - // - } - const pat::ElectronCollection *electrons = pElectrons.product(); - - elec_number_in_event = electrons->size(); - //std::cout << "In this event " << elec_number_in_event << - // " electrons were found" << std::endl; - // if (elec_number_in_event == 0) return; - - std::vector UniqueElectrons; - // edm::LogInfo("") << "Starting loop over electrons."; - int index = 0; - //*********************************************************************** - // NEW METHOD by D WARDROPE implemented 26.05.08 ************************ - //************* DUPLICATE ****** REMOVAL ******************************* - // 02.06.08: due to a bug in the hybrid algorithm that affects detid **** - // we change detid matching to superCluster ref matching ****** - for (pat::ElectronCollection::const_iterator elec = electrons->begin(); elec != electrons->end(); ++elec) { - const pat::ElectronRef electronRef(pElectrons, index); - //Remove duplicate electrons which share a supercluster - pat::ElectronCollection::const_iterator BestDuplicate = elec; - int index2 = 0; - for (pat::ElectronCollection::const_iterator elec2 = electrons->begin(); elec2 != electrons->end(); ++elec2) { - if (elec != elec2) { - if (elec->superCluster() == elec2->superCluster()) { - if (fabs(BestDuplicate->eSuperClusterOverP() - 1.) >= fabs(elec2->eSuperClusterOverP() - 1.)) { - BestDuplicate = elec2; - } - } - } - ++index2; - } - if (BestDuplicate == elec) - UniqueElectrons.push_back(electronRef); - ++index; - } - // - // debugging: store electrons after duplicate removal - elec_1_duplicate_removal = UniqueElectrons.size(); - //std::cout << "In this event there are " << elec_1_duplicate_removal - // << " electrons" << std::endl; - // - // - // duplicate removal is done now: - // the electron collection is in UniqueElectrons - // - // run over probes - now probe electrons and store - // - // the electron collection is now - // vector UniqueElectrons - std::vector ETs; - std::vector::const_iterator elec; - for (elec = UniqueElectrons.begin(); elec != UniqueElectrons.end(); ++elec) { - pat::ElectronRef probeEle; - probeEle = *elec; - double probeEt = probeEle->caloEnergy() / (cosh(probeEle->caloPosition().eta())); - ETs.push_back(probeEt); - } - int *sorted = new int[elec_1_duplicate_removal]; - double *et = new double[elec_1_duplicate_removal]; - //std::cout << "Elecs: " << elec_1_duplicate_removal << std::endl; - for (int i = 0; i < elec_1_duplicate_removal; ++i) { - et[i] = ETs[i]; - //std::cout << "et["<< i << "]=" << et[i] << std::endl; - } - // array sorted now has the indices of the highest ET electrons - TMath::Sort(elec_1_duplicate_removal, et, sorted, true); - // - // - for (int probeIt = 0; probeIt < elec_1_duplicate_removal; ++probeIt) { - //std::cout<<"sorted["<< probeIt<< "]=" << sorted[probeIt] << std::endl; - // break if you have more than the appropriate number of electrons - if (probeIt >= MAX_PROBES) - break; - // - int elec_index = sorted[probeIt]; - std::vector::const_iterator Rprobe = UniqueElectrons.begin() + elec_index; - // - pat::ElectronRef probeEle; - probeEle = *Rprobe; - double probeEt = probeEle->caloEnergy() / (cosh(probeEle->caloPosition().eta())); - probe_sc_eta_for_tree[probeIt] = probeEle->caloPosition().eta(); - probe_sc_phi_for_tree[probeIt] = probeEle->caloPosition().phi(); - probe_sc_et_for_tree[probeIt] = probeEt; - // fiducial cut ............................... - if (fabs(probeEle->caloPosition().eta()) < BarrelMaxEta || - (fabs(probeEle->caloPosition().eta()) > EndcapMinEta && fabs(probeEle->caloPosition().eta()) < EndcapMaxEta)) { - probe_sc_pass_fiducial_cut[probeIt] = 1; - } - // - probe_charge_for_tree[probeIt] = probeEle->charge(); - probe_ele_eta_for_tree[probeIt] = probeEle->eta(); - probe_ele_et_for_tree[probeIt] = probeEle->et(); - probe_ele_phi_for_tree[probeIt] = probeEle->phi(); - probe_ele_Xvertex_for_tree[probeIt] = probeEle->vx(); - probe_ele_Yvertex_for_tree[probeIt] = probeEle->vy(); - probe_ele_Zvertex_for_tree[probeIt] = probeEle->vz(); - probe_classification_index_for_tree[probeIt] = probeEle->classification(); - double ProbeTIP = probeEle->gsfTrack()->d0(); - probe_ele_tip[probeIt] = ProbeTIP; - // isolation .................................. - // these are the default values: trk 03, ecal, hcal 04 - // I know that there is a more direct way, but in this way it - // is clearer what you get each time :P - probe_isolation_value[probeIt] = probeEle->dr03IsolationVariables().tkSumPt; - probe_ecal_isolation_value[probeIt] = probeEle->dr04IsolationVariables().ecalRecHitSumEt; - probe_hcal_isolation_value[probeIt] = probeEle->dr04IsolationVariables().hcalDepth1TowerSumEt + - probeEle->dr04IsolationVariables().hcalDepth2TowerSumEt; - // one extra isos: - probe_iso_user[probeIt] = probeEle->dr04IsolationVariables().tkSumPt; - probe_ecal_iso_user[probeIt] = probeEle->dr03IsolationVariables().ecalRecHitSumEt; - probe_hcal_iso_user[probeIt] = probeEle->dr03IsolationVariables().hcalDepth1TowerSumEt + - probeEle->dr03IsolationVariables().hcalDepth2TowerSumEt; - // ele id variables - double hOverE = probeEle->hadronicOverEm(); - double deltaPhiIn = probeEle->deltaPhiSuperClusterTrackAtVtx(); - double deltaEtaIn = probeEle->deltaEtaSuperClusterTrackAtVtx(); - double eOverP = probeEle->eSuperClusterOverP(); - double pin = probeEle->trackMomentumAtVtx().R(); - double pout = probeEle->trackMomentumOut().R(); - double sigmaee = probeEle->scSigmaEtaEta(); - double sigma_IetaIeta = probeEle->scSigmaIEtaIEta(); - // correct if in endcaps - if (fabs(probeEle->caloPosition().eta()) > 1.479) { - sigmaee = sigmaee - 0.02 * (fabs(probeEle->caloPosition().eta()) - 2.3); - } - // - //double e5x5, e2x5Right, e2x5Left, e2x5Top, e2x5Bottom, e1x5; - double e5x5, e2x5, e1x5; - e5x5 = probeEle->scE5x5(); - e1x5 = probeEle->scE1x5(); - e2x5 = probeEle->scE2x5Max(); - // - // electron ID variables - probe_ele_hoe[probeIt] = hOverE; - probe_ele_shh[probeIt] = sigmaee; - probe_ele_sihih[probeIt] = sigma_IetaIeta; - probe_ele_dfi[probeIt] = deltaPhiIn; - probe_ele_dhi[probeIt] = deltaEtaIn; - probe_ele_eop[probeIt] = eOverP; - probe_ele_pin[probeIt] = pin; - probe_ele_pout[probeIt] = pout; - probe_ele_e5x5[probeIt] = e5x5; - probe_ele_e2x5[probeIt] = e2x5; - probe_ele_e1x5[probeIt] = e1x5; - - // - // HLT filter ------------------------------------------------------ - // - // - // low luminosity filters - /************************************************************* - for (int filterNum=0; filterNum<10; ++filterNum) { - int trigger_int_probe = 0; - - //double hlt_matched_dr = -1.; - const int nF(pHLTe29->sizeFilters()); - // - // default (tag) trigger filter - // - // find how many relevant - const int iF = pHLTe29->filterIndex(HLTFilterType_[filterNum]); - // loop over these objects to see whether they match - const trigger::TriggerObjectCollection& TOC(pHLTe29->getObjects()); - if (nF != iF) { - // find how many objects there are - const trigger::Keys& KEYS(pHLTe29->filterKeys(iF)); - const int nK(KEYS.size()); - for (int iTrig = 0;iTrig filter: "<< HLTFilterType_[filterNum] <<" TO id: " << TO.id() << std::endl; - // this is better to be left out: HLT matching is with an HLT object - // and we don't care what this object is - //if (abs(TO.id())==11 ) { // demand it to be an electron - double dr_ele_HLT = - reco::deltaR(probeEle->eta(), probeEle->phi(), TO.eta(), TO.phi()); - if (fabs(dr_ele_HLT) < ProbeHLTObjMaxDR) {++trigger_int_probe; - //hlt_matched_dr = dr_ele_HLT; - } - //} - } - } - // - if(trigger_int_probe>0) probe_pass_trigger_cut[probeIt][filterNum] = 1; - //probe_hlt_matched_dr[probeIt] = hlt_matched_dr; - } - // high lumi filters - for (int filterNum=10; filterNum<25; ++filterNum) { - int trigger_int_probe = 0; - - //double hlt_matched_dr = -1.; - const int nF(pHLTe31->sizeFilters()); - // - // default (tag) trigger filter - // - // find how many relevant - const int iF = pHLTe31->filterIndex(HLTFilterType_[filterNum]); - // loop over these objects to see whether they match - const trigger::TriggerObjectCollection& TOC(pHLTe31->getObjects()); - if (nF != iF) { - // find how many objects there are - const trigger::Keys& KEYS(pHLTe31->filterKeys(iF)); - const int nK(KEYS.size()); - for (int iTrig = 0;iTrig eta(), probeEle->phi(), TO.eta(), TO.phi()); - if (fabs(dr_ele_HLT) < ProbeHLTObjMaxDR) {++trigger_int_probe; - //hlt_matched_dr = dr_ele_HLT; - } - } - } - - // - if(trigger_int_probe>0) probe_pass_trigger_cut[probeIt][filterNum] = 1; - //probe_hlt_matched_dr[probeIt] = hlt_matched_dr; - } - ******************************************/ - // ------------------------------------------------------------------ - // - // MC Matching ...................................................... - // check whether these electrons are matched to a MC electron - /* - int mc_index = 0; - int matched = 0; int mother_id = 999; - double deta_matched = 999.; double dphi_matched = 999.; - double denergy_matched = 999.; - for(reco::GenParticleCollection::const_iterator McParticle = - McCand->begin(); McParticle != McCand->end(); ++McParticle) - { - // check only for electrons - if(abs(McParticle->pdgId())==11 && McParticle->status()==1) { - mc_index++; - // check whether it matches a gsf electron - double deta = McParticle->eta() - probeEle->eta(); - double dphi = McParticle->phi() - probeEle->phi(); - if ( fabs(deta) < MCMatch_Deta_ && fabs(dphi) < MCMatch_Dphi_){ - ++matched; - deta_matched = deta; dphi_matched = dphi; - denergy_matched = McParticle->energy() - probeEle->caloEnergy(); - // find the mother of the MC electron - const reco::Candidate *mum; - bool mother_finder = true; - if (abs(McParticle->mother()->pdgId()) != 11) - mum = McParticle->mother(); - else if (abs(McParticle->mother()->mother()->pdgId())!= 11) - mum = McParticle->mother()->mother(); - else { - edm::LogInfo("info") << "Going too far to find the mum"; - mother_finder = false; - } - if (mother_finder) { - mother_id = mum->pdgId(); - } - } - } - } - probe_mc_matched[probeIt] = matched; - probe_mc_matched_deta[probeIt] = deta_matched; - probe_mc_matched_dphi[probeIt] = dphi_matched; - probe_mc_matched_denergy[probeIt] = denergy_matched; - probe_mc_matched_mother[probeIt] = mother_id; - */ - } - - probe_tree->Fill(); - ++tree_fills_; - delete[] sorted; - delete[] et; -} - -// ------------ method called once each job just before starting event loop -- -void GenPurposeSkimmerData::beginJob() { - //std::cout << "In beginJob()" << std::endl; - TString filename_histo = outputFile_; - histofile = new TFile(filename_histo, "RECREATE"); - tree_fills_ = 0; - - probe_tree = new TTree("probe_tree", "Tree to store probe variables"); - - //probe_tree->Branch("probe_ele_eta",probe_ele_eta_for_tree,"probe_ele_eta[4]/D"); - //probe_tree->Branch("probe_ele_phi",probe_ele_phi_for_tree,"probe_ele_phi[4]/D"); - //probe_tree->Branch("probe_ele_et",probe_ele_et_for_tree,"probe_ele_et[4]/D"); - probe_tree->Branch("probe_ele_tip", probe_ele_tip, "probe_ele_tip[4]/D"); - probe_tree->Branch("probe_ele_vertex_x", probe_ele_Xvertex_for_tree, "probe_ele_vertex_x[4]/D"); - probe_tree->Branch("probe_ele_vertex_y", probe_ele_Yvertex_for_tree, "probe_ele_vertex_y[4]/D"); - probe_tree->Branch("probe_ele_vertex_z", probe_ele_Zvertex_for_tree, "probe_ele_vertex_z[4]/D"); - probe_tree->Branch("probe_sc_eta", probe_sc_eta_for_tree, "probe_sc_eta[4]/D"); - probe_tree->Branch("probe_sc_phi", probe_sc_phi_for_tree, "probe_sc_phi[4]/D"); - probe_tree->Branch("probe_sc_et", probe_sc_et_for_tree, "probe_sc_et[4]/D"); - - // trigger related variables - //probe_tree->Branch("probe_trigger_cut",probe_pass_trigger_cut,"probe_trigger_cut[4][25]/I"); - //probe_tree->Branch("probe_hlt_matched_dr", probe_hlt_matched_dr,"probe_hlt_matched_dr[4]/D"); - // mc matching to electrons - // probe_tree->Branch("probe_mc_matched",probe_mc_matched,"probe_mc_matched[4]/I"); - //probe_tree->Branch("probe_mc_matched_deta",probe_mc_matched_deta, - // "probe_mc_matched_deta[4]/D"); - //probe_tree->Branch("probe_mc_matched_dphi",probe_mc_matched_dphi, - // "probe_mc_matched_dphi[4]/D"); - //probe_tree->Branch("probe_mc_matched_denergy",probe_mc_matched_denergy, - // "probe_mc_matched_denergy[4]/D"); - //probe_tree->Branch("probe_mc_matched_mother",probe_mc_matched_mother, - // "probe_mc_matched_mother[4]/I"); - // - probe_tree->Branch("probe_charge", probe_charge_for_tree, "probe_charge[4]/I"); - //probe_tree->Branch("probe_sc_fiducial_cut",probe_sc_pass_fiducial_cut, - // "probe_sc_fiducial_cut[4]/I"); - - //probe_tree->Branch("probe_classification", - // probe_classification_index_for_tree,"probe_classification[4]/I"); - // - // Isolation related variables ........................................ - // - probe_tree->Branch("probe_isolation_value", probe_isolation_value, "probe_isolation_value[4]/D"); - probe_tree->Branch("probe_ecal_isolation_value", probe_ecal_isolation_value, "probe_ecal_isolation_value[4]/D"); - probe_tree->Branch("probe_hcal_isolation_value", probe_hcal_isolation_value, "probe_hcal_isolation_value[4]/D"); - // - probe_tree->Branch("probe_iso_user", probe_iso_user, "probe_iso_user[4]/D"); - probe_tree->Branch("probe_ecal_iso_user", probe_ecal_iso_user, "probe_ecal_iso_user[4]/D"); - probe_tree->Branch("probe_hcal_iso_user", probe_hcal_iso_user, "probe_hcal_iso_user[4]/D"); - - //...................................................................... - // Electron ID Related variables ....................................... - probe_tree->Branch("probe_ele_hoe", probe_ele_hoe, "probe_ele_hoe[4]/D"); - //probe_tree->Branch("probe_ele_shh",probe_ele_shh, "probe_ele_shh[4]/D"); - probe_tree->Branch("probe_ele_sihih", probe_ele_sihih, "probe_ele_sihih[4]/D"); - probe_tree->Branch("probe_ele_dfi", probe_ele_dfi, "probe_ele_dfi[4]/D"); - probe_tree->Branch("probe_ele_dhi", probe_ele_dhi, "probe_ele_dhi[4]/D"); - probe_tree->Branch("probe_ele_eop", probe_ele_eop, "probe_ele_eop[4]/D"); - probe_tree->Branch("probe_ele_pin", probe_ele_pin, "probe_ele_pin[4]/D"); - probe_tree->Branch("probe_ele_pout", probe_ele_pout, "probe_ele_pout[4]/D"); - // probe_tree->Branch("probe_ele_e5x5",probe_ele_e5x5, "probe_ele_e5x5[4]/D"); - //probe_tree->Branch("probe_ele_e2x5",probe_ele_e2x5, "probe_ele_e2x5[4]/D"); - //probe_tree->Branch("probe_ele_e1x5",probe_ele_e1x5, "probe_ele_e1x5[4]/D"); - - //....................................................................... - // - // each entry for each trigger path - //probe_tree->Branch("event_HLTPath",event_HLTPath,"event_HLTPath[25]/I"); - //probe_tree->Branch("numberOfHLTFilterObjects", numberOfHLTFilterObjects, - // "numberOfHLTFilterObjects[25]/I"); - // - // debugging info: - //probe_tree->Branch("elec_number_in_event",&elec_number_in_event,"elec_number_in_event/I"); - probe_tree->Branch("elec_1_duplicate_removal", &elec_1_duplicate_removal, "elec_1_duplicate_removal/I"); - // - - // Missing ET in the event - probe_tree->Branch("event_MET", &event_MET, "event_MET/D"); - probe_tree->Branch("event_MET_phi", &event_MET_phi, "event_MET_phi/D"); - // probe_tree->Branch("event_MET_sig",&event_MET_sig,"event_MET_sig/D"); - probe_tree->Branch("event_mcMET", &event_mcMET, "event_mcMET/D"); - probe_tree->Branch("event_mcMET_phi", &event_mcMET_phi, "event_mcMET_phi/D"); - // - probe_tree->Branch("event_tcMET", &event_tcMET, "event_tcMET/D"); - probe_tree->Branch("event_tcMET_phi", &event_tcMET_phi, "event_tcMET_phi/D"); - // probe_tree->Branch("event_tcMET_sig",&event_tcMET_sig,"event_tcMET_sig/D"); - - probe_tree->Branch("event_pfMET", &event_pfMET, "event_pfMET/D"); - probe_tree->Branch("event_pfMET_phi", &event_pfMET_phi, "event_pfMET_phi/D"); - // probe_tree->Branch("event_pfMET_sig",&event_pfMET_sig,"event_pfMET_sig/D"); - - // probe_tree->Branch("event_genMET",&event_genMET,"event_genMET/D"); - // probe_tree->Branch("event_genMET_phi",&event_genMET_phi, "event_genMET_phi/D"); - // probe_tree->Branch("event_genMET_sig",&event_genMET_sig, "event_genMET_sig/D"); - //..... type 1 corrected MET - probe_tree->Branch("event_t1MET", &event_t1MET, "event_t1MET/D"); - probe_tree->Branch("event_t1MET_phi", &event_t1MET_phi, "event_t1MET_phi/D"); - //probe_tree->Branch("event_t1MET_sig",&event_t1MET_sig,"event_t1MET_sig/D"); - - // - // some sc related variables - probe_tree->Branch("sc_hybrid_et", sc_hybrid_et, "sc_hybrid_et[5]/D"); - probe_tree->Branch("sc_hybrid_eta", sc_hybrid_eta, "sc_hybrid_eta[5]/D"); - probe_tree->Branch("sc_hybrid_phi", sc_hybrid_phi, "sc_hybrid_phi[5]/D"); - // - probe_tree->Branch("sc_multi5x5_et", sc_multi5x5_et, "sc_multi5x5_et[5]/D"); - probe_tree->Branch("sc_multi5x5_eta", sc_multi5x5_eta, "sc_multi5x5_eta[5]/D"); - probe_tree->Branch("sc_multi5x5_phi", sc_multi5x5_phi, "sc_multi5x5_phi[5]/D"); - // ///////////////////////////////////////////////////////////////////////// - // general tracks in the event: keep 20 tracks - probe_tree->Branch("ctf_track_pt", ctf_track_pt, "ctf_track_pt[20]/D"); - probe_tree->Branch("ctf_track_eta", ctf_track_eta, "ctf_track_eta[20]/D"); - probe_tree->Branch("ctf_track_phi", ctf_track_phi, "ctf_track_phi[20]/D"); - probe_tree->Branch("ctf_track_vx", ctf_track_vx, "ctf_track_vx[20]/D"); - probe_tree->Branch("ctf_track_vy", ctf_track_vy, "ctf_track_vy[20]/D"); - probe_tree->Branch("ctf_track_vz", ctf_track_vz, "ctf_track_vz[20]/D"); - probe_tree->Branch("ctf_track_tip", ctf_track_tip, "ctf_track_tip[20]/D"); - probe_tree->Branch("ctf_track_tip_bs", ctf_track_tip_bs, "ctf_track_tip_bs[20]/D"); - // - probe_tree->Branch("muon_pt", muon_pt, "muon_pt[4]/D"); - probe_tree->Branch("muon_eta", muon_eta, "muon_eta[4]/D"); - probe_tree->Branch("muon_phi", muon_phi, "muon_phi[4]/D"); - probe_tree->Branch("muon_vx", muon_vx, "muon_vx[4]/D"); - probe_tree->Branch("muon_vy", muon_vy, "muon_vy[4]/D"); - probe_tree->Branch("muon_vz", muon_vz, "muon_vz[4]/D"); - probe_tree->Branch("muon_tip", muon_tip, "muon_tip[4]/D"); - probe_tree->Branch("muon_tip_bs", muon_tip_bs, "muon_tip_bs[4]/D"); -} - -// ------------ method called once each job just after ending the event loop - -void GenPurposeSkimmerData::endJob() { - //std::cout << "In endJob()" << std::endl; - if (tree_fills_ == 0) { - std::cout << "Empty tree: no output..." << std::endl; - return; - } - //probe_tree->Print(); - histofile->Write(); - histofile->Close(); -} - -//define this as a plug-in -DEFINE_FWK_MODULE(GenPurposeSkimmerData); diff --git a/ElectroWeakAnalysis/WENu/src/WenuPlots.cc b/ElectroWeakAnalysis/WENu/src/WenuPlots.cc deleted file mode 100644 index 5756311882676..0000000000000 --- a/ElectroWeakAnalysis/WENu/src/WenuPlots.cc +++ /dev/null @@ -1,1223 +0,0 @@ -// -*- C++ -*- -// -// Package: WenuPlots -// Class: WenuPlots -// -/* - - Description: - this is an analyzer that reads pat::CompositeCandidate WenuCandidates - and creates some plots - Implementation: - The code takes the output of the WenuCandidateFilter and - * implements on them a user defined selection - * implements the selection with one cut (configurable which cut) inverted - * creates a set of basic plots with the Wenu Candidate distribution - vs MET, MT etc. These plots are stored in a root file - If you have several root files from different runs you have to run a macro - to combine the output and have the final plots - - This analyser is PAT based in the sense that it reads CompositeCandidates, - which are composed of a pat::MET plus a pat::Electron. You normally - don't have to change this file when the CMSSW version changes because it - contains only methods from the stable core of pat Objects. Most - version dependent changes should be in WenuCandidateFilter.cc - TO DO LIST: - * more plots to be added - * there should be an base Plots class from which WenuPlots and ZeePlots - inherit. this makes sense since they have so many common methods - - Changes Log: - 12Feb09 First Release of the code for CMSSW_2_2_X - 16Sep09 tested that it works with 3_1_2 as well - 09Sep09 added one extra iso with the name userIso_XX_ - 23Feb09 added option to include extra IDs that are in CMSSW, such as - categorized, likehood etc - added extra variables TIP and E/P - 27May10 changes to apply the Spring10 selections, relative isolations - the 3 default ones, pat user isolations added in the end - change to framework independent variable definitions - double->Double_t etc and math.h functions from TMath - 01Jul10 second electron information added - Contact: - Nikolaos Rompotis - Nikolaos.Rompotis@Cern.ch - Imperial College London - - -*/ -// -// Original Author: Nikolaos Rompotis - -#include "ElectroWeakAnalysis/WENu/interface/WenuPlots.h" -#include "DataFormats/Math/interface/deltaR.h" -//#include "RecoEcal/EgammaCoreTools/plugins/EcalClusterCrackCorrectionFunctor.h" - -WenuPlots::WenuPlots(const edm::ParameterSet &iConfig) - -{ - //////////////////////////////////////////////////////////////////////////// - // I N P U T P A R A M E T E R S - //////////////////////////////////////////////////////////////////////////// - // - /////// - // WENU COLLECTION ////////////////////////////////////////////////////// - // - - wenuCollectionToken_ = - consumes(iConfig.getUntrackedParameter("wenuCollectionTag")); - // - // code parameters - // - std::string outputFile_D = "histos.root"; - outputFile_ = iConfig.getUntrackedParameter("outputFile", outputFile_D); - WENU_VBTFselectionFileName_ = iConfig.getUntrackedParameter("WENU_VBTFselectionFileName"); - WENU_VBTFpreseleFileName_ = iConfig.getUntrackedParameter("WENU_VBTFpreseleFileName"); - DatasetTag_ = iConfig.getUntrackedParameter("DatasetTag"); - // - // use of precalculatedID - // if you use it, then no other cuts are applied - usePrecalcID_ = iConfig.getUntrackedParameter("usePrecalcID", false); - if (usePrecalcID_) { - usePrecalcIDType_ = iConfig.getUntrackedParameter("usePrecalcIDType"); - usePrecalcIDSign_ = iConfig.getUntrackedParameter("usePrecalcIDSign", "="); - usePrecalcIDValue_ = iConfig.getUntrackedParameter("usePrecalcIDValue"); - } - useValidFirstPXBHit_ = iConfig.getUntrackedParameter("useValidFirstPXBHit", false); - useConversionRejection_ = iConfig.getUntrackedParameter("useConversionRejection", false); - useExpectedMissingHits_ = iConfig.getUntrackedParameter("useExpectedMissingHits", false); - - maxNumberOfExpectedMissingHits_ = iConfig.getUntrackedParameter("maxNumberOfExpectedMissingHits", 1); - if (not usePrecalcID_) { - if (useValidFirstPXBHit_) - std::cout << "WenuPlots: Warning: you have demanded a valid 1st layer PXB hit" << std::endl; - if (useConversionRejection_) - std::cout << "WenuPlots: Warning: you have demanded egamma conversion rejection criteria to be applied" - << std::endl; - if (useExpectedMissingHits_) - std::cout << "WenuPlots: Warning: you have demanded at most " << maxNumberOfExpectedMissingHits_ - << " missing inner hits " << std::endl; - } else { - std::cout << "WenuPlots: Using Precalculated ID with type " << usePrecalcIDType_ << usePrecalcIDSign_ - << usePrecalcIDValue_ << std::endl; - } - if ((useValidFirstPXBHit_ || useExpectedMissingHits_ || useConversionRejection_) && (not usePrecalcID_)) { - usePreselection_ = true; - } else { - usePreselection_ = false; - } - includeJetInformationInNtuples_ = iConfig.getUntrackedParameter("includeJetInformationInNtuples", false); - if (includeJetInformationInNtuples_) { - caloJetCollectionTag_ = iConfig.getUntrackedParameter("caloJetCollectionTag"); - caloJetCollectionToken_ = consumes(caloJetCollectionTag_); - pfJetCollectionTag_ = iConfig.getUntrackedParameter("pfJetCollectionTag"); - pfJetCollectionToken_ = consumes(pfJetCollectionTag_); - DRJetFromElectron_ = iConfig.getUntrackedParameter("DRJetFromElectron"); - } - storeExtraInformation_ = iConfig.getUntrackedParameter("storeExtraInformation"); - storeAllSecondElectronVariables_ = iConfig.getUntrackedParameter("storeAllSecondElectronVariables", false); - // primary vtx collections - PrimaryVerticesCollectionToken_ = consumes >(iConfig.getUntrackedParameter( - "PrimaryVerticesCollection", edm::InputTag("offlinePrimaryVertices"))); - PrimaryVerticesCollectionBSToken_ = consumes >(iConfig.getUntrackedParameter( - "PrimaryVerticesCollectionBS", edm::InputTag("offlinePrimaryVerticesWithBS"))); - // - // the selection cuts: - trackIso_EB_ = iConfig.getUntrackedParameter("trackIso_EB", 1000.); - ecalIso_EB_ = iConfig.getUntrackedParameter("ecalIso_EB", 1000.); - hcalIso_EB_ = iConfig.getUntrackedParameter("hcalIso_EB", 1000.); - // - trackIso_EE_ = iConfig.getUntrackedParameter("trackIso_EE", 1000.); - ecalIso_EE_ = iConfig.getUntrackedParameter("ecalIso_EE", 1000.); - hcalIso_EE_ = iConfig.getUntrackedParameter("hcalIso_EE", 1000.); - // - sihih_EB_ = iConfig.getUntrackedParameter("sihih_EB"); - dphi_EB_ = iConfig.getUntrackedParameter("dphi_EB"); - deta_EB_ = iConfig.getUntrackedParameter("deta_EB"); - hoe_EB_ = iConfig.getUntrackedParameter("hoe_EB"); - cIso_EB_ = iConfig.getUntrackedParameter("cIso_EB", 1000.); - tip_bspot_EB_ = iConfig.getUntrackedParameter("tip_bspot_EB", 1000.); - eop_EB_ = iConfig.getUntrackedParameter("eop_EB", 1000.); - // - sihih_EE_ = iConfig.getUntrackedParameter("sihih_EE"); - dphi_EE_ = iConfig.getUntrackedParameter("dphi_EE"); - deta_EE_ = iConfig.getUntrackedParameter("deta_EE"); - hoe_EE_ = iConfig.getUntrackedParameter("hoe_EE"); - cIso_EE_ = iConfig.getUntrackedParameter("cIso_EE", 1000.); - tip_bspot_EE_ = iConfig.getUntrackedParameter("tip_bspot_EE", 1000.); - eop_EE_ = iConfig.getUntrackedParameter("eop_EE", 1000.); - // - trackIsoUser_EB_ = iConfig.getUntrackedParameter("trackIsoUser_EB", 1000.); - ecalIsoUser_EB_ = iConfig.getUntrackedParameter("ecalIsoUser_EB", 1000.); - hcalIsoUser_EB_ = iConfig.getUntrackedParameter("hcalIsoUser_EB", 1000.); - trackIsoUser_EE_ = iConfig.getUntrackedParameter("trackIsoUser_EE", 1000.); - ecalIsoUser_EE_ = iConfig.getUntrackedParameter("ecalIsoUser_EE", 1000.); - hcalIsoUser_EE_ = iConfig.getUntrackedParameter("hcalIsoUser_EE", 1000.); - // - trackIso_EB_inv = iConfig.getUntrackedParameter("trackIso_EB_inv", false); - ecalIso_EB_inv = iConfig.getUntrackedParameter("ecalIso_EB_inv", false); - hcalIso_EB_inv = iConfig.getUntrackedParameter("hcalIso_EB_inv", false); - // - trackIso_EE_inv = iConfig.getUntrackedParameter("trackIso_EE_inv", false); - ecalIso_EE_inv = iConfig.getUntrackedParameter("ecalIso_EE_inv", false); - hcalIso_EE_inv = iConfig.getUntrackedParameter("hcalIso_EE_inv", false); - // - sihih_EB_inv = iConfig.getUntrackedParameter("sihih_EB_inv", false); - dphi_EB_inv = iConfig.getUntrackedParameter("dphi_EB_inv", false); - deta_EB_inv = iConfig.getUntrackedParameter("deta_EB_inv", false); - hoe_EB_inv = iConfig.getUntrackedParameter("hoe_EB_inv", false); - cIso_EB_inv = iConfig.getUntrackedParameter("cIso_EB_inv", false); - tip_bspot_EB_inv = iConfig.getUntrackedParameter("tip_bspot_EB_inv", false); - eop_EB_inv = iConfig.getUntrackedParameter("eop_EB_inv", false); - // - sihih_EE_inv = iConfig.getUntrackedParameter("sihih_EE_inv", false); - dphi_EE_inv = iConfig.getUntrackedParameter("dphi_EE_inv", false); - deta_EE_inv = iConfig.getUntrackedParameter("deta_EE_inv", false); - hoe_EE_inv = iConfig.getUntrackedParameter("hoe_EE_inv", false); - cIso_EE_inv = iConfig.getUntrackedParameter("cIso_EE_inv", false); - tip_bspot_EE_inv = iConfig.getUntrackedParameter("tip_bspot_EE_inv", false); - eop_EE_inv = iConfig.getUntrackedParameter("eop_EE_inv", false); - // - trackIsoUser_EB_inv = iConfig.getUntrackedParameter("trackIsoUser_EB_inv", false); - ecalIsoUser_EB_inv = iConfig.getUntrackedParameter("ecalIsoUser_EB_inv", false); - hcalIsoUser_EB_inv = iConfig.getUntrackedParameter("hcalIsoUser_EB_inv", false); - trackIsoUser_EE_inv = iConfig.getUntrackedParameter("trackIsoUser_EE_inv", false); - ecalIsoUser_EE_inv = iConfig.getUntrackedParameter("ecalIsoUser_EE_inv", false); - hcalIsoUser_EE_inv = iConfig.getUntrackedParameter("hcalIsoUser_EE_inv", false); -} - -WenuPlots::~WenuPlots() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - -// -// member functions -// - -// ------------ method called to for each event ------------ -void WenuPlots::analyze(const edm::Event &iEvent, const edm::EventSetup &es) { - using namespace std; - // - // Get the collections here - // - edm::Handle WenuCands; - iEvent.getByToken(wenuCollectionToken_, WenuCands); - - if (not WenuCands.isValid()) { - cout << "Warning: no wenu candidates in this event..." << endl; - return; - } - const pat::CompositeCandidateCollection *wcands = WenuCands.product(); - const pat::CompositeCandidateCollection::const_iterator wenuIter = wcands->begin(); - const pat::CompositeCandidate wenu = *wenuIter; - // - // get the parts of the composite candidate: - const pat::Electron *myElec = dynamic_cast(wenu.daughter("electron")); - const pat::MET *myMet = dynamic_cast(wenu.daughter("met")); - const pat::MET *myPfMet = dynamic_cast(wenu.daughter("pfmet")); - const pat::MET *myTcMet = dynamic_cast(wenu.daughter("tcmet")); - // _______________________________________________________________________ - // - // VBTF Root tuple production -------------------------------------------- - // _______________________________________________________________________ - // - // ....................................................................... - // vbtf produces 2 root tuples: one that contains the highest pT electron - // that passes a user defined selection and one other with only the - // preselection criteria applied - // ....................................................................... - // - // fill the tree variables - runNumber = iEvent.run(); - eventNumber = Long64_t(iEvent.eventAuxiliary().event()); - lumiSection = (Int_t)iEvent.luminosityBlock(); - // - ele_sc_eta = (Float_t)myElec->superCluster()->eta(); - ele_sc_phi = (Float_t)myElec->superCluster()->phi(); - double scx = myElec->superCluster()->x(); - double scy = myElec->superCluster()->y(); - double scz = myElec->superCluster()->z(); - ele_sc_rho = (Float_t)sqrt(scx * scx + scy * scy + scz * scz); - ele_sc_energy = (Float_t)myElec->superCluster()->energy(); - ele_sc_gsf_et = (Float_t)myElec->superCluster()->energy() / TMath::CosH(myElec->gsfTrack()->eta()); - ele_cand_eta = (Float_t)myElec->eta(); - ele_cand_phi = (Float_t)myElec->phi(); - ele_cand_et = (Float_t)myElec->et(); - // - ele_iso_track = (Float_t)myElec->dr03IsolationVariables().tkSumPt / ele_cand_et; - ele_iso_ecal = (Float_t)myElec->dr03IsolationVariables().ecalRecHitSumEt / ele_cand_et; - ele_iso_hcal = (Float_t)(myElec->dr03IsolationVariables().hcalDepth1TowerSumEt + - myElec->dr03IsolationVariables().hcalDepth2TowerSumEt) / - ele_cand_et; - // - ele_id_sihih = (Float_t)myElec->sigmaIetaIeta(); - ele_id_deta = (Float_t)myElec->deltaEtaSuperClusterTrackAtVtx(); - ele_id_dphi = (Float_t)myElec->deltaPhiSuperClusterTrackAtVtx(); - ele_id_hoe = (Float_t)myElec->hadronicOverEm(); - // - ele_cr_mhitsinner = myElec->gsfTrack()->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS); - ele_cr_dcot = myElec->convDcot(); - ele_cr_dist = myElec->convDist(); - // - ele_vx = (Float_t)myElec->vx(); - ele_vy = (Float_t)myElec->vy(); - ele_vz = (Float_t)myElec->vz(); - // get the primary vtx information - // no BS - edm::Handle > pVtx; - iEvent.getByToken(PrimaryVerticesCollectionToken_, pVtx); - const std::vector Vtx = *(pVtx.product()); - // with BS - edm::Handle > pVtxBS; - iEvent.getByToken(PrimaryVerticesCollectionBSToken_, pVtxBS); - const std::vector VtxBS = *(pVtxBS.product()); - if (!Vtx.empty()) { - pv_x = Float_t(Vtx[0].position().x()); - pv_y = Float_t(Vtx[0].position().y()); - pv_z = Float_t(Vtx[0].position().z()); - ele_tip_pv = myElec->gsfTrack()->dxy(Vtx[0].position()); - } else { - pv_x = -999999.; - pv_y = -999999.; - pv_z = -999999.; - ele_tip_pv = -999999.; - } - if (!VtxBS.empty()) { - pvbs_x = Float_t(VtxBS[0].position().x()); - pvbs_y = Float_t(VtxBS[0].position().y()); - pvbs_z = Float_t(VtxBS[0].position().z()); - ele_tip_pvbs = myElec->gsfTrack()->dxy(VtxBS[0].position()); - } else { - pvbs_x = -999999.; - pvbs_y = -999999.; - pvbs_z = -999999.; - ele_tip_pvbs = -999999.; - } - - // - ele_gsfCharge = (Int_t)myElec->gsfTrack()->charge(); - // must keep the ctf track collection, i.e. general track collection - ele_ctfCharge = (Int_t)myElec->closestCtfTrackRef().isNonnull() ? myElec->closestCtfTrackRef()->charge() : -9999; - ele_scPixCharge = (Int_t)myElec->chargeInfo().scPixCharge; - ele_eop = (Float_t)myElec->eSuperClusterOverP(); - ele_tip_bs = (Float_t)-myElec->dB(); - //ele_tip_pv = myElec->userFloat("ele_tip_pv"); - ele_pin = (Float_t)myElec->trackMomentumAtVtx().R(); - ele_pout = (Float_t)myElec->trackMomentumOut().R(); - // - event_caloMET = (Float_t)myMet->et(); - event_pfMET = (Float_t)myPfMet->et(); - event_tcMET = (Float_t)myTcMet->et(); - event_caloMET_phi = (Float_t)myMet->phi(); - event_pfMET_phi = (Float_t)myPfMet->phi(); - event_tcMET_phi = (Float_t)myTcMet->phi(); - event_caloSumEt = (Float_t)myMet->sumEt(); - event_pfSumEt = (Float_t)myPfMet->sumEt(); - event_tcSumEt = (Float_t)myTcMet->sumEt(); - // transverse mass for the user's convenience - event_caloMT = (Float_t)TMath::Sqrt( - 2. * (ele_sc_gsf_et * event_caloMET - - (ele_sc_gsf_et * TMath::Cos(ele_sc_phi) * event_caloMET * TMath::Cos(event_caloMET_phi) + - ele_sc_gsf_et * TMath::Sin(ele_sc_phi) * event_caloMET * TMath::Sin(event_caloMET_phi)))); - event_pfMT = - (Float_t)TMath::Sqrt(2. * (ele_sc_gsf_et * event_pfMET - - (ele_sc_gsf_et * TMath::Cos(ele_sc_phi) * event_pfMET * TMath::Cos(event_pfMET_phi) + - ele_sc_gsf_et * TMath::Sin(ele_sc_phi) * event_pfMET * TMath::Sin(event_pfMET_phi)))); - event_tcMT = - (Float_t)TMath::Sqrt(2. * (ele_sc_gsf_et * event_tcMET - - (ele_sc_gsf_et * TMath::Cos(ele_sc_phi) * event_tcMET * TMath::Cos(event_tcMET_phi) + - ele_sc_gsf_et * TMath::Sin(ele_sc_phi) * event_tcMET * TMath::Sin(event_tcMET_phi)))); - event_datasetTag = DatasetTag_; - // jet information - only if the user asks for it - // keep the 5 highest et jets of the event that are further than DR> DRJetFromElectron_ - if (includeJetInformationInNtuples_) { - // initialize the array of the jet information - for (int i = 0; i < 5; ++i) { - calojet_et[i] = -999999; - calojet_eta[i] = -999999; - calojet_phi[i] = -999999; - pfjet_et[i] = -999999; - pfjet_eta[i] = -999999; - pfjet_phi[i] = -999999; - } - // get hold of the jet collections - edm::Handle pCaloJets; - edm::Handle pPfJets; - iEvent.getByToken(caloJetCollectionToken_, pCaloJets); - iEvent.getByToken(pfJetCollectionToken_, pPfJets); - // - // calo jets now: - if (pCaloJets.isValid()) { - const reco::CaloJetCollection *caloJets = pCaloJets.product(); - int nCaloJets = (int)caloJets->size(); - if (nCaloJets > 0) { - float *nCaloET = new float[nCaloJets]; - float *nCaloEta = new float[nCaloJets]; - float *nCaloPhi = new float[nCaloJets]; - reco::CaloJetCollection::const_iterator cjet = caloJets->begin(); - int counter = 0; - for (; cjet != caloJets->end(); ++cjet) { - // store them only if they are far enough from the electron - Double_t DR = reco::deltaR(cjet->eta(), cjet->phi(), myElec->gsfTrack()->eta(), ele_sc_phi); - if (DR > DRJetFromElectron_) { - nCaloET[counter] = cjet->et(); - nCaloEta[counter] = cjet->eta(); - nCaloPhi[counter] = cjet->phi(); - ++counter; - } - } - int *caloJetSorted = new int[nCaloJets]; - TMath::Sort(nCaloJets, nCaloET, caloJetSorted, true); - for (int i = 0; i < nCaloJets; ++i) { - if (i >= 5) - break; - calojet_et[i] = nCaloET[caloJetSorted[i]]; - calojet_eta[i] = nCaloEta[caloJetSorted[i]]; - calojet_phi[i] = nCaloPhi[caloJetSorted[i]]; - } - delete[] caloJetSorted; - delete[] nCaloET; - delete[] nCaloEta; - delete[] nCaloPhi; - } - } else { - std::cout << "WenuPlots: Could not get caloJet collection with name " << caloJetCollectionTag_ << std::endl; - } - // - // pf jets now: - if (pPfJets.isValid()) { - const reco::PFJetCollection *pfJets = pPfJets.product(); - int nPfJets = (int)pfJets->size(); - if (nPfJets > 0) { - float *nPfET = new float[nPfJets]; - float *nPfEta = new float[nPfJets]; - float *nPfPhi = new float[nPfJets]; - reco::PFJetCollection::const_iterator pjet = pfJets->begin(); - int counter = 0; - for (; pjet != pfJets->end(); ++pjet) { - // store them only if they are far enough from the electron - Double_t DR = reco::deltaR(pjet->eta(), pjet->phi(), myElec->gsfTrack()->eta(), ele_sc_phi); - if (DR > DRJetFromElectron_) { - nPfET[counter] = pjet->et(); - nPfEta[counter] = pjet->eta(); - nPfPhi[counter] = pjet->phi(); - ++counter; - } - } - int *pfJetSorted = new int[nPfJets]; - TMath::Sort(nPfJets, nPfET, pfJetSorted, true); - for (int i = 0; i < nPfJets; ++i) { - if (i >= 5) - break; - pfjet_et[i] = nPfET[pfJetSorted[i]]; - pfjet_eta[i] = nPfEta[pfJetSorted[i]]; - pfjet_phi[i] = nPfPhi[pfJetSorted[i]]; - } - delete[] pfJetSorted; - delete[] nPfET; - delete[] nPfEta; - delete[] nPfPhi; - } - } else { - std::cout << "WenuPlots: Could not get pfJet collection with name " << pfJetCollectionTag_ << std::endl; - } - } - // second electron information - in preselected ntuple only - ele2nd_sc_gsf_et = -1; // also in sele tree - ele2nd_sc_eta = -1; - ele2nd_sc_phi = -1; - ele2nd_sc_rho = 0; - ele2nd_cand_eta = 0; - ele2nd_cand_phi = 0; - ele2nd_cand_et = 0; - ele2nd_pin = 0; - ele2nd_pout = 0; - ele2nd_passes_selection = -1; // also in sele tree - ele2nd_ecalDriven = 0; - // - // second electron selection variables: only if requested by the user - // - ele2nd_iso_track = 0; - ele2nd_iso_ecal = 0; - ele2nd_iso_hcal = 0; - // - ele2nd_id_sihih = 0; - ele2nd_id_deta = 0; - ele2nd_id_dphi = 0; - ele2nd_id_hoe = 0; - // - ele2nd_cr_mhitsinner = 0; - ele2nd_cr_dcot = 0; - ele2nd_cr_dist = 0; - // - ele2nd_vx = 0; - ele2nd_vy = 0; - ele2nd_vz = 0; - // - ele2nd_gsfCharge = 0; - // must keep the ctf track collection, i.e. general track collection - ele2nd_ctfCharge = 0; - ele2nd_scPixCharge = 0; - ele2nd_eop = 0; - ele2nd_tip_bs = 0; - ele2nd_tip_pv = 0; - ele2nd_hltmatched_dr = 0; - // - // convention for ele2nd_passes_selection - // 0 passes no selection - // 1 passes WP95 - // 2 passes WP90 - // 3 passes WP85 - // 4 passes WP80 - // 5 passes WP70 - // 6 passes WP60 - if (myElec->userInt("hasSecondElectron") == 1 && storeExtraInformation_) { - const pat::Electron *mySecondElec = dynamic_cast(wenu.daughter("secondElec")); - ele2nd_sc_gsf_et = (Float_t)mySecondElec->superCluster()->energy() / TMath::CosH(mySecondElec->gsfTrack()->eta()); - - ele2nd_sc_eta = (Float_t)mySecondElec->superCluster()->eta(); - ele2nd_sc_phi = (Float_t)mySecondElec->superCluster()->phi(); - double sc2x = mySecondElec->superCluster()->x(); - double sc2y = mySecondElec->superCluster()->y(); - double sc2z = mySecondElec->superCluster()->z(); - ele2nd_sc_rho = (Float_t)sqrt(sc2x * sc2x + sc2y * sc2y + sc2z * sc2z); - ele2nd_cand_eta = (Float_t)mySecondElec->eta(); - ele2nd_cand_phi = (Float_t)mySecondElec->phi(); - ele2nd_cand_et = (Float_t)mySecondElec->et(); - ele2nd_pin = (Float_t)mySecondElec->trackMomentumAtVtx().R(); - ; - ele2nd_pout = (Float_t)mySecondElec->trackMomentumOut().R(); - ele2nd_ecalDriven = (Int_t)mySecondElec->ecalDrivenSeed(); - // check the selections - bool isIDCalc = mySecondElec->isElectronIDAvailable("simpleEleId95relIso") && - mySecondElec->isElectronIDAvailable("simpleEleId90relIso") && - mySecondElec->isElectronIDAvailable("simpleEleId85relIso") && - mySecondElec->isElectronIDAvailable("simpleEleId80relIso") && - mySecondElec->isElectronIDAvailable("simpleEleId70relIso") && - mySecondElec->isElectronIDAvailable("simpleEleId60relIso"); - if (isIDCalc) { - ele2nd_passes_selection = 0; - if (fabs(mySecondElec->electronID("simpleEleId60relIso") - 7) < 0.1) - ele2nd_passes_selection = 6; - else if (fabs(mySecondElec->electronID("simpleEleId70relIso") - 7) < 0.1) - ele2nd_passes_selection = 5; - else if (fabs(mySecondElec->electronID("simpleEleId80relIso") - 7) < 0.1) - ele2nd_passes_selection = 4; - else if (fabs(mySecondElec->electronID("simpleEleId85relIso") - 7) < 0.1) - ele2nd_passes_selection = 3; - else if (fabs(mySecondElec->electronID("simpleEleId90relIso") - 7) < 0.1) - ele2nd_passes_selection = 2; - else if (fabs(mySecondElec->electronID("simpleEleId95relIso") - 7) < 0.1) - ele2nd_passes_selection = 1; - } - if (storeAllSecondElectronVariables_) { - ele2nd_iso_track = (Float_t)mySecondElec->dr03IsolationVariables().tkSumPt / ele2nd_cand_et; - ele2nd_iso_ecal = (Float_t)mySecondElec->dr03IsolationVariables().ecalRecHitSumEt / ele2nd_cand_et; - ele2nd_iso_hcal = (Float_t)(mySecondElec->dr03IsolationVariables().hcalDepth1TowerSumEt + - mySecondElec->dr03IsolationVariables().hcalDepth2TowerSumEt) / - ele2nd_cand_et; - ele2nd_id_sihih = (Float_t)mySecondElec->sigmaIetaIeta(); - ele2nd_id_deta = (Float_t)mySecondElec->deltaEtaSuperClusterTrackAtVtx(); - ele2nd_id_dphi = (Float_t)mySecondElec->deltaPhiSuperClusterTrackAtVtx(); - ele2nd_id_hoe = (Float_t)mySecondElec->hadronicOverEm(); - - ele2nd_cr_mhitsinner = - mySecondElec->gsfTrack()->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS); - ele2nd_cr_dcot = mySecondElec->convDcot(); - ele2nd_cr_dist = mySecondElec->convDist(); - - ele2nd_vx = (Float_t)mySecondElec->vx(); - ele2nd_vy = (Float_t)mySecondElec->vy(); - ele2nd_vz = (Float_t)mySecondElec->vz(); - ele2nd_gsfCharge = (Int_t)mySecondElec->gsfTrack()->charge(); - // must keep the ctf track collection, i.e. general track collection - ele2nd_ctfCharge = - (Int_t)mySecondElec->closestCtfTrackRef().isNonnull() ? mySecondElec->closestCtfTrackRef()->charge() : -9999; - ele2nd_scPixCharge = (Int_t)mySecondElec->chargeInfo().scPixCharge; - ele2nd_eop = (Float_t)mySecondElec->eSuperClusterOverP(); - ele2nd_tip_bs = (Float_t)-mySecondElec->dB(); - if (!Vtx.empty()) { - ele2nd_tip_pv = mySecondElec->gsfTrack()->dxy(Vtx[0].position()); - } - if (!VtxBS.empty()) { - ele2nd_tip_pvbs = mySecondElec->gsfTrack()->dxy(VtxBS[0].position()); - } - ele2nd_hltmatched_dr = mySecondElec->userFloat("HLTMatchingDR"); - } - } - // some extra information - event_triggerDecision = -1; - ele_hltmatched_dr = -999.; - VtxTracksSize.clear(); - VtxNormalizedChi2.clear(); - VtxTracksSizeBS.clear(); - VtxNormalizedChi2BS.clear(); - if (storeExtraInformation_) { - if (myElec->hasUserFloat("HLTMatchingDR")) { - ele_hltmatched_dr = myElec->userFloat("HLTMatchingDR"); - } - if (myElec->hasUserInt("triggerDecision")) { - event_triggerDecision = myElec->userInt("triggerDecision"); - } - // extra information related to the primary vtx collection - for (Int_t i = 0; i < (Int_t)Vtx.size(); ++i) { - VtxTracksSize.push_back(Vtx[i].tracksSize()); - VtxNormalizedChi2.push_back(Vtx[i].normalizedChi2()); - } - for (Int_t i = 0; i < (Int_t)VtxBS.size(); ++i) { - VtxTracksSizeBS.push_back(VtxBS[i].tracksSize()); - VtxNormalizedChi2BS.push_back(VtxBS[i].normalizedChi2()); - } - } - // if the electron passes the selection - // it is meant to be a precalculated selection here, in order to include - // conversion rejection too - if (CheckCuts(myElec) && myElec->userInt("failsSecondElectronCut") == 0) { - vbtfSele_tree->Fill(); - } - vbtfPresele_tree->Fill(); - - // - // _______________________________________________________________________ - // - // histogram production -------------------------------------------------- - // _______________________________________________________________________ - // - // if you want some preselection: Conv rejection, hit pattern - if (usePreselection_) { - if (not PassPreselectionCriteria(myElec)) - return; - } - // - // some variables here - Double_t scEta = myElec->superCluster()->eta(); - Double_t scPhi = myElec->superCluster()->phi(); - Double_t scEt = myElec->superCluster()->energy() / TMath::CosH(scEta); - Double_t met = myMet->et(); - Double_t metPhi = myMet->phi(); - Double_t mt = TMath::Sqrt(2.0 * scEt * met * - (1.0 - (TMath::Cos(scPhi) * TMath::Cos(metPhi) + TMath::Sin(scPhi) * TMath::Sin(metPhi)))); - - Double_t trackIso = myElec->userIsolation(pat::TrackIso); - Double_t ecalIso = myElec->userIsolation(pat::EcalIso); - Double_t hcalIso = myElec->userIsolation(pat::HcalIso); - Double_t sihih = myElec->scSigmaIEtaIEta(); - Double_t dphi = myElec->deltaPhiSuperClusterTrackAtVtx(); - Double_t deta = myElec->deltaEtaSuperClusterTrackAtVtx(); - Double_t HoE = myElec->hadronicOverEm(); - // - // - // - // the inverted selection plots: - // only if not using precalcID - if (not usePrecalcID_) { - if (CheckCutsInverse(myElec)) { - //std::cout << "-----------------INVERSION-----------passed" << std::endl; - h_met_inverse->Fill(met); - h_mt_inverse->Fill(mt); - if (TMath::Abs(scEta) < 1.479) { - h_met_inverse_EB->Fill(met); - h_mt_inverse_EB->Fill(mt); - } - if (TMath::Abs(scEta) > 1.479) { - h_met_inverse_EE->Fill(met); - h_mt_inverse_EE->Fill(mt); - } - } - } - // - /////////////////////////////////////////////////////////////////////// - // - // N-1 plots: plot some variable so that all the other cuts are satisfied - // - // make these plots only if you have the normal selection, not pre-calced - if (not usePrecalcID_) { - if (TMath::Abs(scEta) < 1.479) { // reminder: the precise fiducial cuts are in - // in the filter - if (CheckCutsNminusOne(myElec, 0)) - h_trackIso_eb_NmOne->Fill(trackIso); - } else { - if (CheckCutsNminusOne(myElec, 0)) - h_trackIso_ee_NmOne->Fill(trackIso); - } - } - // - // SELECTION APPLICATION - // - // from here on you have only events that pass the full selection - if (not CheckCuts(myElec)) - return; - ////////////////////////////////////////////////////////////////////// - - h_met->Fill(met); - h_mt->Fill(mt); - if (TMath::Abs(scEta) < 1.479) { - h_met_EB->Fill(met); - h_mt_EB->Fill(mt); - - h_EB_trkiso->Fill(trackIso); - h_EB_ecaliso->Fill(ecalIso); - h_EB_hcaliso->Fill(hcalIso); - h_EB_sIetaIeta->Fill(sihih); - h_EB_dphi->Fill(dphi); - h_EB_deta->Fill(deta); - h_EB_HoE->Fill(HoE); - } - if (TMath::Abs(scEta) > 1.479) { - h_met_EE->Fill(met); - h_mt_EE->Fill(mt); - - h_EE_trkiso->Fill(trackIso); - h_EE_ecaliso->Fill(ecalIso); - h_EE_hcaliso->Fill(hcalIso); - h_EE_sIetaIeta->Fill(sihih); - h_EE_dphi->Fill(dphi); - h_EE_deta->Fill(deta); - h_EE_HoE->Fill(HoE); - } - // uncomment for debugging purposes - /* - std::cout << "tracIso: " << trackIso << ", " << myElec->trackIso() << ", ecaliso: " << ecalIso - << ", " << myElec->ecalIso() << ", hcaliso: " << hcalIso << ", " << myElec->hcalIso() - << ", mishits: " - << myElec->gsfTrack()->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS) - << std::endl; - std::cout << "Electron ID: 95relIso=" << myElec->electronID("simpleEleId95relIso") - << " 90relIso=" << myElec->electronID("simpleEleId90relIso") - << " 85relIso=" << myElec->electronID("simpleEleId85relIso") - << " 80relIso=" << myElec->electronID("simpleEleId80relIso") - << " 70relIso=" << myElec->electronID("simpleEleId70relIso") - << " 60relIso=" << myElec->electronID("simpleEleId60relIso") - << " 95cIso=" << myElec->electronID("simpleEleId95cIso") - << " 90cIso=" << myElec->electronID("simpleEleId90cIso") - << " 85cIso=" << myElec->electronID("simpleEleId85cIso") - << " 80cIso=" << myElec->electronID("simpleEleId80cIso") - << " 70cIso=" << myElec->electronID("simpleEleId70cIso") - << " 60cIso=" << myElec->electronID("simpleEleId60cIso") - << std::endl; - std::cout << "mySelection: " << (CheckCuts(myElec) && PassPreselectionCriteria(myElec)) << endl; - */ - h_scEt->Fill(scEt); - h_scEta->Fill(scEta); - h_scPhi->Fill(scPhi); -} - -/*********************************************************************** - * - * Checking Cuts and making selections: - * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * all the available methods take input a pointer to a pat::Electron - * - * Bool_t CheckCuts(const pat::Electron *): - * true if the input selection is satisfied - * Bool_t CheckCutsInverse(const pat::Electron *ele): - * true if the cuts with inverted the ones specified in the - * cfg are satisfied - * Bool_t CheckCutsNminusOne(const pat::Electron *ele, int jj): - * true if all the cuts with cut #jj ignored are satisfied - * - ***********************************************************************/ -Bool_t WenuPlots::CheckCuts(const pat::Electron *ele) { - if (usePrecalcID_) { - if (not ele->isElectronIDAvailable(usePrecalcIDType_)) { - std::cout << "Error! not existing ID with name: " << usePrecalcIDType_ << " function will return true!" - << std::endl; - return true; - } - Double_t val = ele->electronID(usePrecalcIDType_); - if (usePrecalcIDSign_ == "<") { - return val < usePrecalcIDValue_; - } else if (usePrecalcIDSign_ == ">") { - return val > usePrecalcIDValue_; - } else { // equality: it returns 0,1,2,3 but as float - return TMath::Abs(val - usePrecalcIDValue_) < 0.1; - } - } else { - for (int i = 0; i < nBarrelVars_; ++i) { - if (not CheckCut(ele, i)) - return false; - } - return true; - } -} -///////////////////////////////////////////////////////////////////////// - -Bool_t WenuPlots::CheckCutsInverse(const pat::Electron *ele) { - for (int i = 0; i < nBarrelVars_; ++i) { - if (CheckCutInv(ele, i) == false) - return false; - } - return true; -} -///////////////////////////////////////////////////////////////////////// -Bool_t WenuPlots::CheckCutsNminusOne(const pat::Electron *ele, int jj) { - for (int i = 0; i < nBarrelVars_; ++i) { - if (i == jj) - continue; - if (CheckCut(ele, i) == false) - return false; - } - return true; -} -///////////////////////////////////////////////////////////////////////// -Bool_t WenuPlots::CheckCut(const pat::Electron *ele, int i) { - Double_t fabseta = TMath::Abs(ele->superCluster()->eta()); - if (fabseta < 1.479) { - return TMath::Abs(ReturnCandVar(ele, i)) < CutVars_[i]; - } - return TMath::Abs(ReturnCandVar(ele, i)) < CutVars_[i + nBarrelVars_]; -} -///////////////////////////////////////////////////////////////////////// -Bool_t WenuPlots::CheckCutInv(const pat::Electron *ele, int i) { - Double_t fabseta = TMath::Abs(ele->superCluster()->eta()); - if (fabseta < 1.479) { - if (InvVars_[i]) - return TMath::Abs(ReturnCandVar(ele, i)) > CutVars_[i]; - return TMath::Abs(ReturnCandVar(ele, i)) < CutVars_[i]; - } - if (InvVars_[i + nBarrelVars_]) { - if (InvVars_[i]) - return TMath::Abs(ReturnCandVar(ele, i)) > CutVars_[i + nBarrelVars_]; - } - return TMath::Abs(ReturnCandVar(ele, i)) < CutVars_[i + nBarrelVars_]; -} -//////////////////////////////////////////////////////////////////////// -Double_t WenuPlots::ReturnCandVar(const pat::Electron *ele, int i) { - if (i == 0) - return ele->dr03TkSumPt() / ele->p4().Pt(); - else if (i == 1) - return ele->dr03EcalRecHitSumEt() / ele->p4().Pt(); - else if (i == 2) - return ele->dr03HcalTowerSumEt() / ele->p4().Pt(); - else if (i == 3) - return ele->scSigmaIEtaIEta(); - else if (i == 4) - return ele->deltaPhiSuperClusterTrackAtVtx(); - else if (i == 5) - return ele->deltaEtaSuperClusterTrackAtVtx(); - else if (i == 6) - return ele->hadronicOverEm(); - else if (i == 7) { - if (ele->isEB()) { - return (ele->dr03TkSumPt() + std::max(float(0.), ele->dr03EcalRecHitSumEt() - 1) + ele->dr03HcalTowerSumEt()) / - ele->p4().Pt(); - } else { // pedestal subtraction is only in barrel - return (ele->dr03TkSumPt() + ele->dr03EcalRecHitSumEt() + ele->dr03HcalTowerSumEt()) / ele->p4().Pt(); - } - } - // else if (i==8) return ele->gsfTrack()->dxy(bspotPosition_); - else if (i == 8) - return fabs(ele->dB()); - else if (i == 9) - return ele->eSuperClusterOverP(); - else if (i == 10) - return ele->userIsolation(pat::TrackIso); - else if (i == 11) - return ele->userIsolation(pat::EcalIso); - else if (i == 12) - return ele->userIsolation(pat::HcalIso); - std::cout << "Error in WenuPlots::ReturnCandVar" << std::endl; - return -1.; -} -///////////////////////////////////////////////////////////////////////// -Bool_t WenuPlots::PassPreselectionCriteria(const pat::Electron *ele) { - Bool_t passConvRej = true; - Bool_t passPXB = true; - Bool_t passEMH = true; - if (useConversionRejection_) { - if (ele->hasUserInt("PassConversionRejection")) { - //std::cout << "con rej: " << ele->userInt("PassConversionRejection") << std::endl; - if (not(ele->userInt("PassConversionRejection") == 1)) - passConvRej = false; - } else { - std::cout << "WenuPlots: WARNING: Conversion Rejection Request Disregarded: " - << "you must calculate it before " << std::endl; - // return true; - } - } - if (useValidFirstPXBHit_) { - if (ele->hasUserInt("PassValidFirstPXBHit")) { - //std::cout << "valid1stPXB: " << ele->userInt("PassValidFirstPXBHit") << std::endl; - if (not(ele->userInt("PassValidFirstPXBHit") == 1)) - passPXB = false; - } else { - std::cout << "WenuPlots: WARNING: Valid First PXB Hit Request Disregarded: " - << "you must calculate it before " << std::endl; - // return true; - } - } - if (useExpectedMissingHits_) { - if (ele->hasUserInt("NumberOfExpectedMissingHits")) { - //std::cout << "missing hits: " << ele->userInt("NumberOfExpectedMissingHits") << std::endl; - if (ele->userInt("NumberOfExpectedMissingHits") > maxNumberOfExpectedMissingHits_) - passEMH = false; - } else { - std::cout << "WenuPlots: WARNING: Number of Expected Missing Hits Request Disregarded: " - << "you must calculate it before " << std::endl; - // return true; - } - } - return passConvRej && passPXB && passEMH; -} -// ------------ method called once each job just before starting event loop -- -void WenuPlots::beginJob() { - //std::cout << "In beginJob()" << std::endl; - // Double_t Pi = TMath::Pi(); - // TString histo_file = outputFile_; - // histofile = new TFile( histo_file,"RECREATE"); - - h_met = new TH1F("h_met", "h_met", 200, 0, 200); - h_met_inverse = new TH1F("h_met_inverse", "h_met_inverse", 200, 0, 200); - - h_mt = new TH1F("h_mt", "h_mt", 200, 0, 200); - h_mt_inverse = new TH1F("h_mt_inverse", "h_mt_inverse", 200, 0, 200); - - h_met_EB = new TH1F("h_met_EB", "h_met_EB", 200, 0, 200); - h_met_inverse_EB = new TH1F("h_met_inverse_EB", "h_met_inverse_EB", 200, 0, 200); - - h_mt_EB = new TH1F("h_mt_EB", "h_mt_EB", 200, 0, 200); - h_mt_inverse_EB = new TH1F("h_mt_inverse_EB", "h_mt_inverse_EB", 200, 0, 200); - - h_met_EE = new TH1F("h_met_EE", "h_met_EE", 200, 0, 200); - h_met_inverse_EE = new TH1F("h_met_inverse_EE", "h_met_inverse_EE", 200, 0, 200); - - h_mt_EE = new TH1F("h_mt_EE", "h_mt_EE", 200, 0, 200); - h_mt_inverse_EE = new TH1F("h_mt_inverse_EE", "h_mt_inverse_EE", 200, 0, 200); - - h_scEt = new TH1F("h_scEt", "h_scEt", 200, 0, 100); - h_scEta = new TH1F("h_scEta", "h_scEta", 200, -3, 3); - h_scPhi = new TH1F("h_scPhi", "h_scPhi", 200, -4, 4); - - //VALIDATION PLOTS - //EB - h_EB_trkiso = new TH1F("h_EB_trkiso", "h_EB_trkiso", 200, 0.0, 9.0); - h_EB_ecaliso = new TH1F("h_EB_ecaliso", "h_EB_ecaliso", 200, 0.0, 9.0); - h_EB_hcaliso = new TH1F("h_EB_hcaliso", "h_EB_hcaliso", 200, 0.0, 9.0); - h_EB_sIetaIeta = new TH1F("h_EB_sIetaIeta", "h_EB_sIetaIeta", 200, 0.0, 0.02); - h_EB_dphi = new TH1F("h_EB_dphi", "h_EB_dphi", 200, -0.03, 0.03); - h_EB_deta = new TH1F("h_EB_deta", "h_EB_deta", 200, -0.01, 0.01); - h_EB_HoE = new TH1F("h_EB_HoE", "h_EB_HoE", 200, 0.0, 0.2); - //EE - h_EE_trkiso = new TH1F("h_EE_trkiso", "h_EE_trkiso", 200, 0.0, 9.0); - h_EE_ecaliso = new TH1F("h_EE_ecaliso", "h_EE_ecaliso", 200, 0.0, 9.0); - h_EE_hcaliso = new TH1F("h_EE_hcaliso", "h_EE_hcaliso", 200, 0.0, 9.0); - h_EE_sIetaIeta = new TH1F("h_EE_sIetaIeta", "h_EE_sIetaIeta", 200, 0.0, 0.1); - h_EE_dphi = new TH1F("h_EE_dphi", "h_EE_dphi", 200, -0.03, 0.03); - h_EE_deta = new TH1F("h_EE_deta", "h_EE_deta", 200, -0.01, 0.01); - h_EE_HoE = new TH1F("h_EE_HoE", "h_EE_HoE", 200, 0.0, 0.2); - - // - // - h_trackIso_eb_NmOne = new TH1F("h_trackIso_eb_NmOne", "trackIso EB N-1 plot", 80, 0, 8); - h_trackIso_ee_NmOne = new TH1F("h_trackIso_ee_NmOne", "trackIso EE N-1 plot", 80, 0, 8); - - // if you add some new variable change the nBarrelVars_ accordingly - // reminder: in the current implementation you must have the same number - // of vars in both barrel and endcaps - nBarrelVars_ = 13; - // - // Put EB variables together and EE variables together - // number of barrel variables = number of endcap variable - // if you don't want to use some variable put a very high cut - CutVars_.push_back(trackIso_EB_); //0 - CutVars_.push_back(ecalIso_EB_); //1 - CutVars_.push_back(hcalIso_EB_); //2 - CutVars_.push_back(sihih_EB_); //3 - CutVars_.push_back(dphi_EB_); //4 - CutVars_.push_back(deta_EB_); //5 - CutVars_.push_back(hoe_EB_); //6 - CutVars_.push_back(cIso_EB_); //7 - CutVars_.push_back(tip_bspot_EB_); //8 - CutVars_.push_back(eop_EB_); //9 - CutVars_.push_back(trackIsoUser_EB_); //10 - CutVars_.push_back(ecalIsoUser_EB_); //11 - CutVars_.push_back(hcalIsoUser_EB_); //12 - // - CutVars_.push_back(trackIso_EE_); //0 - CutVars_.push_back(ecalIso_EE_); //1 - CutVars_.push_back(hcalIso_EE_); //2 - CutVars_.push_back(sihih_EE_); //3 - CutVars_.push_back(dphi_EE_); //4 - CutVars_.push_back(deta_EE_); //5 - CutVars_.push_back(hoe_EE_); //6 - CutVars_.push_back(cIso_EE_); //7 - CutVars_.push_back(tip_bspot_EE_); //8 - CutVars_.push_back(eop_EE_); //9 - CutVars_.push_back(trackIsoUser_EE_); //10 - CutVars_.push_back(ecalIsoUser_EE_); //11 - CutVars_.push_back(hcalIsoUser_EE_); //12 - // - InvVars_.push_back(trackIso_EB_inv); //0 - InvVars_.push_back(ecalIso_EB_inv); //1 - InvVars_.push_back(hcalIso_EB_inv); //2 - InvVars_.push_back(sihih_EB_inv); //3 - InvVars_.push_back(dphi_EB_inv); //4 - InvVars_.push_back(deta_EB_inv); //5 - InvVars_.push_back(hoe_EB_inv); //6 - InvVars_.push_back(cIso_EB_inv); //7 - InvVars_.push_back(tip_bspot_EB_inv); //8 - InvVars_.push_back(eop_EB_inv); //9 - InvVars_.push_back(trackIsoUser_EB_inv); //10 - InvVars_.push_back(ecalIsoUser_EB_inv); //11 - InvVars_.push_back(hcalIsoUser_EB_inv); //12 - // - InvVars_.push_back(trackIso_EE_inv); //0 - InvVars_.push_back(ecalIso_EE_inv); //1 - InvVars_.push_back(hcalIso_EE_inv); //2 - InvVars_.push_back(sihih_EE_inv); //3 - InvVars_.push_back(dphi_EE_inv); //4 - InvVars_.push_back(deta_EE_inv); //5 - InvVars_.push_back(hoe_EE_inv); //6 - InvVars_.push_back(cIso_EE_inv); //7 - InvVars_.push_back(tip_bspot_EE_inv); //8 - InvVars_.push_back(eop_EE_inv); //9 - InvVars_.push_back(trackIsoUser_EE_inv); //10 - InvVars_.push_back(ecalIsoUser_EE_inv); //11 - InvVars_.push_back(hcalIsoUser_EE_inv); //12 - // - // - // ________________________________________________________________________ - // - // The VBTF Root Tuples --------------------------------------------------- - // ________________________________________________________________________ - // - WENU_VBTFselectionFile_ = new TFile(TString(WENU_VBTFselectionFileName_), "RECREATE"); - - vbtfSele_tree = new TTree("vbtfSele_tree", "Tree to store the W Candidates that pass the VBTF selection"); - vbtfSele_tree->Branch("runNumber", &runNumber, "runNumber/I"); - vbtfSele_tree->Branch("eventNumber", &eventNumber, "eventNumber/L"); - vbtfSele_tree->Branch("lumiSection", &lumiSection, "lumiSection/I"); - // - vbtfSele_tree->Branch("ele_sc_gsf_et", &ele_sc_gsf_et, "ele_sc_gsf_et/F"); - vbtfSele_tree->Branch("ele_sc_energy", &ele_sc_energy, "ele_sc_energy/F"); - vbtfSele_tree->Branch("ele_sc_eta", &ele_sc_eta, "ele_sc_eta/F"); - vbtfSele_tree->Branch("ele_sc_phi", &ele_sc_phi, "ele_sc_phi/F"); - vbtfSele_tree->Branch("ele_sc_rho", &ele_sc_rho, "ele_sc_rho/F"); - vbtfSele_tree->Branch("ele_cand_et", &ele_cand_et, "ele_cand_et/F"); - vbtfSele_tree->Branch("ele_cand_eta", &ele_cand_eta, "ele_cand_eta/F"); - vbtfSele_tree->Branch("ele_cand_phi", &ele_cand_phi, "ele_cand_phi/F"); - vbtfSele_tree->Branch("ele_iso_track", &ele_iso_track, "ele_iso_track/F"); - vbtfSele_tree->Branch("ele_iso_ecal", &ele_iso_ecal, "ele_iso_ecal/F"); - vbtfSele_tree->Branch("ele_iso_hcal", &ele_iso_hcal, "ele_iso_hcal/F"); - vbtfSele_tree->Branch("ele_id_sihih", &ele_id_sihih, "ele_id_sihih/F"); - vbtfSele_tree->Branch("ele_id_deta", &ele_id_deta, "ele_id_deta/F"); - vbtfSele_tree->Branch("ele_id_dphi", &ele_id_dphi, "ele_id_dphi/F"); - vbtfSele_tree->Branch("ele_id_hoe", &ele_id_hoe, "ele_id_hoe/F"); - vbtfSele_tree->Branch("ele_cr_mhitsinner", &ele_cr_mhitsinner, "ele_cr_mhitsinner/I"); - vbtfSele_tree->Branch("ele_cr_dcot", &ele_cr_dcot, "ele_cr_dcot/F"); - vbtfSele_tree->Branch("ele_cr_dist", &ele_cr_dist, "ele_cr_dist/F"); - vbtfSele_tree->Branch("ele_vx", &ele_vx, "ele_vx/F"); - vbtfSele_tree->Branch("ele_vy", &ele_vy, "ele_vy/F"); - vbtfSele_tree->Branch("ele_vz", &ele_vz, "ele_vz/F"); - vbtfSele_tree->Branch("pv_x", &pv_x, "pv_x/F"); - vbtfSele_tree->Branch("pv_y", &pv_y, "pv_y/F"); - vbtfSele_tree->Branch("pv_z", &pv_z, "pv_z/F"); - vbtfSele_tree->Branch("ele_gsfCharge", &ele_gsfCharge, "ele_gsfCharge/I"); - vbtfSele_tree->Branch("ele_ctfCharge", &ele_ctfCharge, "ele_ctfCharge/I"); - vbtfSele_tree->Branch("ele_scPixCharge", &ele_scPixCharge, "ele_scPixCharge/I"); - vbtfSele_tree->Branch("ele_eop", &ele_eop, "ele_eop/F"); - vbtfSele_tree->Branch("ele_tip_bs", &ele_tip_bs, "ele_tip_bs/F"); - vbtfSele_tree->Branch("ele_tip_pv", &ele_tip_pv, "ele_tip_pv/F"); - vbtfSele_tree->Branch("ele_pin", &ele_pin, "ele_pin/F"); - vbtfSele_tree->Branch("ele_pout", &ele_pout, "ele_pout/F"); - vbtfSele_tree->Branch("event_caloMET", &event_caloMET, "event_caloMET/F"); - vbtfSele_tree->Branch("event_pfMET", &event_pfMET, "event_pfMET/F"); - vbtfSele_tree->Branch("event_tcMET", &event_tcMET, "event_tcMET/F"); - vbtfSele_tree->Branch("event_caloMT", &event_caloMT, "event_caloMT/F"); - vbtfSele_tree->Branch("event_pfMT", &event_pfMT, "event_pfMT/F"); - vbtfSele_tree->Branch("event_tcMT", &event_tcMT, "event_tcMT/F"); - vbtfSele_tree->Branch("event_caloMET_phi", &event_caloMET_phi, "event_caloMET_phi/F"); - vbtfSele_tree->Branch("event_pfMET_phi", &event_pfMET_phi, "event_pfMET_phi/F"); - vbtfSele_tree->Branch("event_tcMET_phi", &event_tcMET_phi, "event_tcMET_phi/F"); - // - // the extra jet variables: - if (includeJetInformationInNtuples_) { - vbtfSele_tree->Branch("calojet_et", calojet_et, "calojet_et[5]/F"); - vbtfSele_tree->Branch("calojet_eta", calojet_eta, "calojet_eta[5]/F"); - vbtfSele_tree->Branch("calojet_phi", calojet_phi, "calojet_phi[5]/F"); - vbtfSele_tree->Branch("pfjet_et", pfjet_et, "pfjet_et[5]/F"); - vbtfSele_tree->Branch("pfjet_eta", pfjet_eta, "pfjet_eta[5]/F"); - vbtfSele_tree->Branch("pfjet_phi", pfjet_phi, "pfjet_phi[5]/F"); - } - if (storeExtraInformation_) { - vbtfSele_tree->Branch("ele2nd_sc_gsf_et", &ele2nd_sc_gsf_et, "ele2nd_sc_gsf_et/F"); - vbtfSele_tree->Branch("ele2nd_passes_selection", &ele2nd_passes_selection, "ele2nd_passes_selection/I"); - vbtfSele_tree->Branch("ele2nd_ecalDriven", &ele2nd_ecalDriven, "ele2nd_ecalDriven/I"); - vbtfSele_tree->Branch("event_caloSumEt", &event_caloSumEt, "event_caloSumEt/F"); - vbtfSele_tree->Branch("event_pfSumEt", &event_pfSumEt, "event_pfSumEt/F"); - vbtfSele_tree->Branch("event_tcSumEt", &event_tcSumEt, "event_tcSumEt/F"); - } - vbtfSele_tree->Branch("event_datasetTag", &event_datasetTag, "event_dataSetTag/I"); - // - // - // everything after preselection - // - WENU_VBTFpreseleFile_ = new TFile(TString(WENU_VBTFpreseleFileName_), "RECREATE"); - - vbtfPresele_tree = new TTree("vbtfPresele_tree", "Tree to store the W Candidates that pass the VBTF preselection"); - vbtfPresele_tree->Branch("runNumber", &runNumber, "runNumber/I"); - vbtfPresele_tree->Branch("eventNumber", &eventNumber, "eventNumber/L"); - vbtfPresele_tree->Branch("lumiSection", &lumiSection, "lumiSection/I"); - // - vbtfPresele_tree->Branch("ele_sc_gsf_et", &ele_sc_gsf_et, "ele_sc_gsf_et/F"); - vbtfPresele_tree->Branch("ele_sc_energy", &ele_sc_energy, "ele_sc_energy/F"); - vbtfPresele_tree->Branch("ele_sc_eta", &ele_sc_eta, "ele_sc_eta/F"); - vbtfPresele_tree->Branch("ele_sc_phi", &ele_sc_phi, "ele_sc_phi/F"); - vbtfPresele_tree->Branch("ele_sc_rho", &ele_sc_rho, "ele_sc_rho/F"); - vbtfPresele_tree->Branch("ele_cand_et", &ele_cand_et, "ele_cand_et/F"); - vbtfPresele_tree->Branch("ele_cand_eta", &ele_cand_eta, "ele_cand_eta/F"); - vbtfPresele_tree->Branch("ele_cand_phi", &ele_cand_phi, "ele_cand_phi/F"); - vbtfPresele_tree->Branch("ele_iso_track", &ele_iso_track, "ele_iso_track/F"); - vbtfPresele_tree->Branch("ele_iso_ecal", &ele_iso_ecal, "ele_iso_ecal/F"); - vbtfPresele_tree->Branch("ele_iso_hcal", &ele_iso_hcal, "ele_iso_hcal/F"); - vbtfPresele_tree->Branch("ele_id_sihih", &ele_id_sihih, "ele_id_sihih/F"); - vbtfPresele_tree->Branch("ele_id_deta", &ele_id_deta, "ele_id_deta/F"); - vbtfPresele_tree->Branch("ele_id_dphi", &ele_id_dphi, "ele_id_dphi/F"); - vbtfPresele_tree->Branch("ele_id_hoe", &ele_id_hoe, "ele_id_hoe/F"); - vbtfPresele_tree->Branch("ele_cr_mhitsinner", &ele_cr_mhitsinner, "ele_cr_mhitsinner/I"); - vbtfPresele_tree->Branch("ele_cr_dcot", &ele_cr_dcot, "ele_cr_dcot/F"); - vbtfPresele_tree->Branch("ele_cr_dist", &ele_cr_dist, "ele_cr_dist/F"); - vbtfPresele_tree->Branch("ele_vx", &ele_vx, "ele_vx/F"); - vbtfPresele_tree->Branch("ele_vy", &ele_vy, "ele_vy/F"); - vbtfPresele_tree->Branch("ele_vz", &ele_vz, "ele_vz/F"); - vbtfPresele_tree->Branch("pv_x", &pv_x, "pv_x/F"); - vbtfPresele_tree->Branch("pv_y", &pv_y, "pv_y/F"); - vbtfPresele_tree->Branch("pv_z", &pv_z, "pv_z/F"); - vbtfPresele_tree->Branch("ele_gsfCharge", &ele_gsfCharge, "ele_gsfCharge/I"); - vbtfPresele_tree->Branch("ele_ctfCharge", &ele_ctfCharge, "ele_ctfCharge/I"); - vbtfPresele_tree->Branch("ele_scPixCharge", &ele_scPixCharge, "ele_scPixCharge/I"); - vbtfPresele_tree->Branch("ele_eop", &ele_eop, "ele_eop/F"); - vbtfPresele_tree->Branch("ele_tip_bs", &ele_tip_bs, "ele_tip_bs/F"); - vbtfPresele_tree->Branch("ele_tip_pv", &ele_tip_pv, "ele_tip_pv/F"); - vbtfPresele_tree->Branch("ele_pin", &ele_pin, "ele_pin/F"); - vbtfPresele_tree->Branch("ele_pout", &ele_pout, "ele_pout/F"); - vbtfPresele_tree->Branch("event_caloMET", &event_caloMET, "event_caloMET/F"); - vbtfPresele_tree->Branch("event_pfMET", &event_pfMET, "event_pfMET/F"); - vbtfPresele_tree->Branch("event_tcMET", &event_tcMET, "event_tcMET/F"); - vbtfPresele_tree->Branch("event_caloMT", &event_caloMT, "event_caloMT/F"); - vbtfPresele_tree->Branch("event_pfMT", &event_pfMT, "event_pfMT/F"); - vbtfPresele_tree->Branch("event_tcMT", &event_tcMT, "event_tcMT/F"); - vbtfPresele_tree->Branch("event_caloMET_phi", &event_caloMET_phi, "event_caloMET_phi/F"); - vbtfPresele_tree->Branch("event_pfMET_phi", &event_pfMET_phi, "event_pfMET_phi/F"); - vbtfPresele_tree->Branch("event_tcMET_phi", &event_tcMET_phi, "event_tcMET_phi/F"); - vbtfPresele_tree->Branch("event_caloSumEt", &event_caloSumEt, "event_caloSumEt/F"); - vbtfPresele_tree->Branch("event_pfSumEt", &event_pfSumEt, "event_pfSumEt/F"); - vbtfPresele_tree->Branch("event_tcSumEt", &event_tcSumEt, "event_tcSumEt/F"); - // the extra jet variables: - if (includeJetInformationInNtuples_) { - vbtfPresele_tree->Branch("calojet_et", calojet_et, "calojet_et[5]/F"); - vbtfPresele_tree->Branch("calojet_eta", calojet_eta, "calojet_eta[5]/F"); - vbtfPresele_tree->Branch("calojet_phi", calojet_phi, "calojet_phi[5]/F"); - vbtfPresele_tree->Branch("pfjet_et", pfjet_et, "pfjet_et[5]/F"); - vbtfPresele_tree->Branch("pfjet_eta", pfjet_eta, "pfjet_eta[5]/F"); - vbtfPresele_tree->Branch("pfjet_phi", pfjet_phi, "pfjet_phi[5]/F"); - } - if (storeExtraInformation_) { - vbtfPresele_tree->Branch("ele2nd_sc_gsf_et", &ele2nd_sc_gsf_et, "ele2nd_sc_gsf_et/F"); - vbtfPresele_tree->Branch("ele2nd_sc_eta", &ele2nd_sc_eta, "ele2nd_sc_eta/F"); - vbtfPresele_tree->Branch("ele2nd_sc_phi", &ele2nd_sc_phi, "ele2nd_sc_phi/F"); - vbtfPresele_tree->Branch("ele2nd_sc_rho", &ele2nd_sc_rho, "ele2nd_sc_rho/F"); - vbtfPresele_tree->Branch("ele2nd_cand_eta", &ele2nd_cand_eta, "ele2nd_cand_eta/F"); - vbtfPresele_tree->Branch("ele2nd_cand_phi", &ele2nd_cand_phi, "ele2nd_cand_phi/F"); - vbtfPresele_tree->Branch("ele2nd_pin", &ele2nd_pin, "ele2nd_pin/F"); - vbtfPresele_tree->Branch("ele2nd_pout", &ele2nd_pout, "ele2nd_pout/F"); - vbtfPresele_tree->Branch("ele2nd_ecalDriven", &ele2nd_ecalDriven, "ele2nd_ecalDriven/I"); - vbtfPresele_tree->Branch("ele2nd_passes_selection", &ele2nd_passes_selection, "ele2nd_passes_selection/I"); - vbtfPresele_tree->Branch("ele_hltmatched_dr", &ele_hltmatched_dr, "ele_hltmatched_dr/F"); - vbtfPresele_tree->Branch("event_triggerDecision", &event_triggerDecision, "event_triggerDecision/I"); - vbtfPresele_tree->Branch("VtxTracksSize", &VtxTracksSize); - vbtfPresele_tree->Branch("VtxNormalizedChi2", &VtxNormalizedChi2); - vbtfPresele_tree->Branch("VtxTracksSizeBS", &VtxTracksSizeBS); - vbtfPresele_tree->Branch("VtxNormalizedChi2BS", &VtxNormalizedChi2BS); - } - if (storeAllSecondElectronVariables_) { - vbtfPresele_tree->Branch("ele2nd_cand_et", &ele2nd_cand_et, "ele2nd_cand_et/F"); - vbtfPresele_tree->Branch("ele2nd_iso_track", &ele2nd_iso_track, "ele2nd_iso_track /F"); - vbtfPresele_tree->Branch("ele2nd_iso_ecal", &ele2nd_iso_ecal, "ele2nd_iso_ecal/F"); - vbtfPresele_tree->Branch("ele2nd_iso_hcal", &ele2nd_iso_hcal, "ele2nd_iso_hcal/F"); - vbtfPresele_tree->Branch("ele2nd_id_sihih", &ele2nd_id_sihih, "ele2nd_id_sihih/F"); - vbtfPresele_tree->Branch("ele2nd_id_deta", &ele2nd_id_deta, "ele2nd_id_deta/F"); - vbtfPresele_tree->Branch("ele2nd_id_dphi", &ele2nd_id_dphi, "ele2nd_id_dphi/F"); - vbtfPresele_tree->Branch("ele2nd_id_hoe", &ele2nd_id_hoe, "ele2nd_id_hoe/F"); - vbtfPresele_tree->Branch("ele2nd_cr_mhitsinner", &ele2nd_cr_mhitsinner, "ele2nd_cr_mhitsinner/I"); - vbtfPresele_tree->Branch("ele2nd_cr_dcot", &ele2nd_cr_dcot, "ele2nd_cr_dcot/F"); - vbtfPresele_tree->Branch("ele2nd_cr_dist", &ele2nd_cr_dist, "ele2nd_cr_dist/F"); - vbtfPresele_tree->Branch("ele2nd_vx", &ele2nd_vx, "ele2nd_vx/F"); - vbtfPresele_tree->Branch("ele2nd_vy", &ele2nd_vy, "ele2nd_vy/F"); - vbtfPresele_tree->Branch("ele2nd_vz", &ele2nd_vz, "ele2nd_vz/F"); - - vbtfPresele_tree->Branch("ele2nd_gsfCharge", &ele2nd_gsfCharge, "ele2nd_gsfCharge/I"); - vbtfPresele_tree->Branch("ele2nd_ctfCharge", &ele2nd_ctfCharge, "ele2nd_ctfCharge/I"); - vbtfPresele_tree->Branch("ele2nd_scPixCharge", &ele2nd_scPixCharge, "ele2nd_scPixCharge/I"); - vbtfPresele_tree->Branch("ele2nd_eop", &ele2nd_eop, "ele2nd_eop/F"); - vbtfPresele_tree->Branch("ele2nd_tip_bs", &ele2nd_tip_bs, "ele2nd_tip_bs/F"); - vbtfPresele_tree->Branch("ele2nd_tip_pv", &ele2nd_tip_pv, "ele2nd_tip_pv/F"); - vbtfPresele_tree->Branch("ele2nd_hltmatched_dr", &ele2nd_hltmatched_dr, "ele2nd_hltmatched_dr/F"); - } - vbtfPresele_tree->Branch("event_datasetTag", &event_datasetTag, "event_dataSetTag/I"); - - // - // _________________________________________________________________________ - // - // - // -} - -// ------------ method called once each job just after ending the event loop - -void WenuPlots::endJob() { - TFile *newfile = new TFile(TString(outputFile_), "RECREATE"); - // - // for consistency all the plots are in the root file - // even though they may be empty (in the case when - // usePrecalcID_== true inverted and N-1 are empty) - h_met->Write(); - h_met_inverse->Write(); - h_mt->Write(); - h_mt_inverse->Write(); - - h_met_EB->Write(); - h_met_inverse_EB->Write(); - h_mt_EB->Write(); - h_mt_inverse_EB->Write(); - - h_met_EE->Write(); - h_met_inverse_EE->Write(); - h_mt_EE->Write(); - h_mt_inverse_EE->Write(); - - h_scEt->Write(); - h_scEta->Write(); - h_scPhi->Write(); - - h_EB_trkiso->Write(); - h_EB_ecaliso->Write(); - h_EB_hcaliso->Write(); - h_EB_sIetaIeta->Write(); - h_EB_dphi->Write(); - h_EB_deta->Write(); - h_EB_HoE->Write(); - - h_EE_trkiso->Write(); - h_EE_ecaliso->Write(); - h_EE_hcaliso->Write(); - h_EE_sIetaIeta->Write(); - h_EE_dphi->Write(); - h_EE_deta->Write(); - h_EE_HoE->Write(); - - // - h_trackIso_eb_NmOne->Write(); - h_trackIso_ee_NmOne->Write(); - // - newfile->Close(); - // - // write the VBTF trees - // - WENU_VBTFpreseleFile_->Write(); - WENU_VBTFpreseleFile_->Close(); - WENU_VBTFselectionFile_->Write(); - WENU_VBTFselectionFile_->Close(); -} - -//define this as a plug-in -DEFINE_FWK_MODULE(WenuPlots); diff --git a/ElectroWeakAnalysis/WENu/test/aod_WenuPlots.py b/ElectroWeakAnalysis/WENu/test/aod_WenuPlots.py deleted file mode 100644 index bd118a8d6bdb3..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/aod_WenuPlots.py +++ /dev/null @@ -1,180 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -# source -process.source = cms.Source("PoolSource", - #fileNames = cms.untracked.vstring('rfio:/castor/cern.ch/user/r/rompotis/RedigiSummer08RootTrees/WenuRedigi_RECO_SAMPLE.root') - fileNames = cms.untracked.vstring( - 'file:zee_Summer09-MC_31X_V3_AODSIM_v1_AODSIM.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('MC_31X_V5::All') -#process.GlobalTag.globaltag = cms.string('STARTUP31X_V4::All') - -process.load("Configuration.StandardSequences.MagneticField_cff") - -# this filter produces patElectrons and patCaloMets to be used in the following -process.aod2patFilter = cms.EDFilter('aod2patFilterWenu', - electronCollectionTag = cms.untracked.InputTag("gsfElectrons","","RECO"), - metCollectionTag = cms.untracked.InputTag("met","","RECO"), - ) - -############################################################################## -## -## the filter to select the candidates from the data samples -## -## -## WARNING: you may want to modify this item: -HLT_process_name = "HLT8E29" # options: HLT or HLT8E29 -# trigger path selection -HLT_path_name = "HLT_Ele15_LW_L1R" -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSingleElectronLWEt15PixelMatchFilter" -# -process.wenuFilter = cms.EDFilter('WenuCandidateFilter', - # cuts - ETCut = cms.untracked.double(30.), - METCut = cms.untracked.double(0.), - vetoSecondElectronEvents = cms.untracked.bool(False), - ETCut2ndEle = cms.untracked.double(20.), - # trigger here - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - electronMatched2HLT = cms.untracked.bool(False), - electronMatched2HLT_DR = cms.untracked.double(0.2), - # electrons and MET - electronCollectionTag = cms.untracked.InputTag("aod2patFilter","patElectrons","PAT"), - metCollectionTag = cms.untracked.InputTag("aod2patFilter","patCaloMets","PAT") - - ) -#################################################################################### -## -## the W selection that you prefer -selection_a2 = cms.PSet ( - trackIso_EB = cms.untracked.double(2.2), - ecalIso_EB = cms.untracked.double(4.2), - hcalIso_EB = cms.untracked.double(2.0), - sihih_EB = cms.untracked.double(0.0099), - dphi_EB = cms.untracked.double(0.025), - deta_EB = cms.untracked.double(0.0040), - hoe_EB = cms.untracked.double(1000.0), - - trackIso_EE = cms.untracked.double(1.1), - ecalIso_EE = cms.untracked.double(3.4), - hcalIso_EE = cms.untracked.double(1.3), - sihih_EE = cms.untracked.double(0.028), - dphi_EE = cms.untracked.double(0.020), - deta_EE = cms.untracked.double(0.0066), - hoe_EE = cms.untracked.double(1000.0) - ) - -selection_test = cms.PSet ( - trackIso_EB = cms.untracked.double(10), - ecalIso_EB = cms.untracked.double(10), - hcalIso_EB = cms.untracked.double(10), - sihih_EB = cms.untracked.double(0.1), - dphi_EB = cms.untracked.double(1), - deta_EB = cms.untracked.double(1), - hoe_EB = cms.untracked.double(1), - - trackIso_EE = cms.untracked.double(10), - ecalIso_EE = cms.untracked.double(10), - hcalIso_EE = cms.untracked.double(10), - sihih_EE = cms.untracked.double(1), - dphi_EE = cms.untracked.double(1), - deta_EE = cms.untracked.double(1), - hoe_EE = cms.untracked.double(1) - ) - -selection_inverse = cms.PSet ( - trackIso_EB_inv = cms.untracked.bool(True), - trackIso_EE_inv = cms.untracked.bool(True) - ) - -#################################################################################### -## -## and the plot creator -process.plotter = cms.EDAnalyzer('WenuPlots', - selection_a2, - selection_inverse, - wenuCollectionTag = cms.untracked.InputTag( - "wenuFilter","selectedWenuCandidates","PAT") - ) - - - -process.eca = cms.EDAnalyzer("EventContentAnalyzer") -process.p = cms.Path(process.aod2patFilter +process.wenuFilter + process.plotter) -#process.p = cms.Path(process.aod2patFilter + process.eca) -# process.p = cms.Path(process.patSequences + process.wenuFilter + process.eca) - - -#### SET OF Trigger names for AOD - 321 -# -# HLTPath_[0] = "HLT_Ele10_LW_L1R"; -# HLTFilterType_[0] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt10PixelMatchFilter","","HLT8E29"); -# HLTPath_[1] = "HLT_Ele10_LW_EleId_L1R"; -# HLTFilterType_[1] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt10EleIdDphiFilter","","HLT8E29"); -# HLTPath_[2] = "HLT_Ele15_LW_L1R"; -# HLTFilterType_[2] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15PixelMatchFilter","","HLT8E29"); -# HLTPath_[3] = "HLT_Ele15_SC10_LW_L1R"; -# HLTFilterType_[3] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15ESDoubleSC10","","HLT8E29"); -# HLTPath_[4] = "HLT_Ele15_SiStrip_L1R"; -# HLTFilterType_[4] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronSiStripEt15PixelMatchFilter","","HLT8E29"); -# HLTPath_[5] = "HLT_Ele20_LW_L1R"; -# HLTFilterType_[5] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15EtFilterESet20","","HLT8E29"); -# HLTPath_[6] = "HLT_DoubleEle5_SW_L1R"; -# HLTFilterType_[6] = edm::InputTag("hltL1NonIsoHLTNonIsoDoubleElectronEt5PixelMatchFilter","","HLT8E29"); -# HLTPath_[7] = "HLT_Ele15_SC10_LW_L1R"; -# HLTFilterType_[7] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15ESDoubleSC10","","HLT8E29"); -# HLTPath_[8] = "tba"; -# HLTFilterType_[8] = edm::InputTag("tba"); -# HLTPath_[9] = "tba"; -# HLTFilterType_[9] = edm::InputTag("tba"); -# // e31 menu -# HLTPath_[10] = "HLT_Ele10_SW_L1R"; -# HLTFilterType_[10] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt10PixelMatchFilter","","HLT"); -# HLTPath_[11] = "HLT_Ele15_SW_L1R"; -# HLTFilterType_[11] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15PixelMatchFilter","","HLT"); -# HLTPath_[12] = "HLT_Ele15_SiStrip_L1R"; // <--- same as [4] -# HLTFilterType_[12] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronSiStripEt15PixelMatchFilter","","HLT"); -# HLTPath_[13] = "HLT_Ele15_SW_LooseTrackIso_L1R"; -# HLTFilterType_[13] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15LTITrackIsolFilter","","HLT"); -# HLTPath_[14] = "HLT_Ele15_SW_EleId_L1R"; -# HLTFilterType_[14] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EleIdDphiFilter","","HLT"); -# HLTPath_[15] = "HLT_Ele20_SW_L1R"; -# HLTFilterType_[15] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt20PixelMatchFilter","","HLT"); -# HLTPath_[16] = "HLT_Ele20_SiStrip_L1R"; -# HLTFilterType_[16] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronSiStripEt20PixelMatchFilter","","HLT"); -# HLTPath_[17] = "HLT_Ele25_SW_L1R"; -# HLTFilterType_[17] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EtFilterESet25","","HLT"); -# HLTPath_[18] = "HLT_Ele25_SW_EleId_LooseTrackIso_L1R"; -# HLTFilterType_[18] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EleIdTrackIsolFilterESet25LTI","","HLT"); -# HLTPath_[19] = "HLT_DoubleEle10_SW_L1R"; -# HLTFilterType_[19] = edm::InputTag("hltL1NonIsoHLTNonIsoDoubleElectronEt10PixelMatchFilter","","HLT"); -# HLTPath_[20] = "HLT_Ele15_SC15_SW_EleId_L1R"; -# HLTFilterType_[20] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EleIdESDoubleSC15","","HLT"); -# HLTPath_[21] = "HLT_Ele15_SC15_SW_LooseTrackIso_L1R"; -# HLTFilterType_[21] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15LTIESDoubleSC15","","HLT"); -# HLTPath_[22] = "HLT_Ele20_SC15_SW_L1R"; -# HLTFilterType_[22] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt20ESDoubleSC15","","HLT"); diff --git a/ElectroWeakAnalysis/WENu/test/crab/crab_dataMay27thSkimSD.cfg b/ElectroWeakAnalysis/WENu/test/crab/crab_dataMay27thSkimSD.cfg deleted file mode 100644 index 56d4ff725bc4c..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/crab/crab_dataMay27thSkimSD.cfg +++ /dev/null @@ -1,32 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = glite -use_server = 1 - -[CMSSW] -datasetpath = /MinimumBias/Commissioning10-May27thSkim_SD_EG-v2/RECO -pset = pat_WenuVBTF_ntuple_forDataMay27.py -lumi_mask = Cert_132440-136297_7TeV_StreamExpress_Collisions10_JSON.json -total_number_of_lumis = -1 -lumis_per_job = 20 -output_file = WENU_VBTFselection.root, WENU_VBTFpreselection.root, histos.root - -[USER] -copy_data = 0 -return_data = 1 -logdir = /tmp/rompotis/dataMay27 -outputdir = /tmp/rompotis/dataMay27 -ui_working_dir = dataMay27 -use_central_bossDB = 0 -use_boss_rt = 0 -eMail = nikolaos.rompotis@cern.ch - -[GRID] -rb = CERN -proxy_server = myproxy.cern.ch -virtual_organization = cms -retry_count = 0 -lcg_catalog_type = lfc -lfc_host = lfc-cms-test.cern.ch -lfc_home = /grid/cms -# ce_black_list = diff --git a/ElectroWeakAnalysis/WENu/test/genPurposeSkimmer.py b/ElectroWeakAnalysis/WENu/test/genPurposeSkimmer.py deleted file mode 100644 index 4ae47b2679d60..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/genPurposeSkimmer.py +++ /dev/null @@ -1,161 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - - - - -# source -process.source = cms.Source("PoolSource", - # fileNames = cms.untracked.vstring('rfio:/castor/cern.ch/user/r/rompotis/RedigiSummer08RootTrees/WenuRedigi_RECO_SAMPLE.root') -# fileNames = cms.untracked.vstring('rfio:/castor/cern.ch/user/r/rompotis/Summer09Studies/zee_Summer09-MC_31X_V3_AODSIM_v1_AODSIM.root') - fileNames = cms.untracked.vstring('file:zee_Summer09-MC_31X_V3_AODSIM_v1_AODSIM.root'), - #fileNames = cms.untracked.vstring('rfio:/castor/cern.ch/user/r/rompotis/Summer09Studies/QCD_EMEnriched_Pt30to80_AODSIM_7E27C8EA-7984-DE11-BA59-00151796C158.root') - skipBadFiles = cms.untracked.bool(True), -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - - -## Load additional RECO config -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -#process.GlobalTag.globaltag = cms.string('MC_31X_V5::All') #ideal conditions - 1e31 menu -process.GlobalTag.globaltag = cms.string('STARTUP31X_V4::All') #ideal conditions - 8e29 menu - -process.load("Configuration.StandardSequences.MagneticField_cff") - -## Load necessary stuff for tcMET -# tracking geometry -process.load("Geometry.CommonTopologies.globalTrackingGeometry_cfi") - -# load the necessary pat sequences -process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") - - - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - -## this is for the correct calculation of type1 MET -#from JetMETCorrections.Configuration.L2L3Corrections_Summer08Redigi_cff import * -#from JetMETCorrections.Type1MET.MetType1Corrections_cff import * -process.load("JetMETCorrections.Type1MET.MetType1Corrections_cff") -process.load("JetMETCorrections.Configuration.L2L3Corrections_Summer08Redigi_cff") - -process.metMuonJESCorSC5 = process.metJESCorSC5CaloJet.clone() -process.metMuonJESCorSC5.inputUncorJetsLabel = "sisCone5CaloJets" -process.metMuonJESCorSC5.corrector = "L2L3JetCorrectorSC5Calo" -process.metMuonJESCorSC5.inputUncorMetLabel = "caloMetM" - -process.metCorSequence = cms.Sequence(process.metMuonJESCorSC5) - -# make this collection of type 1 corrected MET a pat collection for the code to handle -process.layer1TwikiT1METs = process.layer1METs.clone( - metSource = cms.InputTag("metMuonJESCorSC5","","PAT"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), - ) - - -# -# the explicit declaration of rechit collections is just for compatibility with the header -# version of 312 - proper Tags have no need of that -# -# for ecal isolation: replace the ECAL rechit collection -process.eleIsoDepositEcalFromHits.ExtractorPSet.barrelEcalHits = cms.InputTag("reducedEcalRecHitsEB", "", "RECO") -process.eleIsoDepositEcalFromHits.ExtractorPSet.endcapEcalHits = cms.InputTag("reducedEcalRecHitsEE", "", "RECO") -# -# -process.eidRobustHighEnergy.reducedBarrelRecHitCollection = cms.InputTag("reducedEcalRecHitsEB", "", "RECO") -process.eidRobustHighEnergy.reducedEndcapRecHitCollection = cms.InputTag("reducedEcalRecHitsEE", "", "RECO") -# -### create the good old ecal isolation for EE ########## - -## -## this is how to compute isolation yourself for testing purposes -## -#process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.electronEcalRecHitIsolationLcone.ecalBarrelRecHitProducer = cms.InputTag("reducedEcalRecHitsEB") -#process.electronEcalRecHitIsolationLcone.ecalEndcapRecHitProducer = cms.InputTag("reducedEcalRecHitsEB") -#process.electronEcalRecHitIsolationLcone.ecalBarrelRecHitCollection = cms.InputTag("") -#process.electronEcalRecHitIsolationLcone.ecalEndcapRecHitCollection = cms.InputTag("") -#process.electronEcalRecHitIsolationScone.ecalBarrelRecHitProducer = cms.InputTag("reducedEcalRecHitsEB") -#process.electronEcalRecHitIsolationScone.ecalEndcapRecHitProducer = cms.InputTag("reducedEcalRecHitsEB") -#process.electronEcalRecHitIsolationScone.ecalBarrelRecHitCollection = cms.InputTag("") -#process.electronEcalRecHitIsolationScone.ecalEndcapRecHitCollection = cms.InputTag("") -#process.patElectronIsolation = process.egammaIsolationSequence - - -######################################################## -#from PhysicsTools.PatAlgos.producersLayer1.electronProducer_cfi import allLayer1Electrons -# add the user iso -# -# NOTE!!! Egamma Recommendations Track Iso: Scone (0.3), ecal+hcal Lcone (0.4) -## for further studies the rest will be set as user isolations -# -process.allLayer1Electrons.isolation = cms.PSet() - -## -process.allLayer1Objects = cms.Sequence(process.makeAllLayer1Electrons+process.makeAllLayer1Muons+process.makeLayer1METs+process.layer1TwikiT1METs) -process.selectedLayer1Objects = cms.Sequence(process.selectedLayer1Electrons+process.selectedLayer1Muons) -process.cleanLayer1Objects = cms.Sequence(process.cleanLayer1Muons*process.cleanLayer1Electrons) -process.countLayer1Objects = cms.Sequence(process.countLayer1Electrons+process.countLayer1Muons) - -process.patDefaultSequence = cms.Sequence(process.allLayer1Objects * process.selectedLayer1Objects * - process.cleanLayer1Objects*process.countLayer1Objects - ) - -process.eca = cms.EDAnalyzer("EventContentAnalyzer") - - - -process.rootskimmer = cms.EDAnalyzer( - 'GenPurposeSkimmer', -# output file ####################################### - outputfile = cms.untracked.string('./bkg.root'), -# collections - ElectronCollection = cms.untracked.InputTag("selectedLayer1Electrons"), - MetCollectionTag = cms.untracked.InputTag( "met","","RECO"), - tcMetCollectionTag = cms.untracked.InputTag( "tcMet"), - pfMetCollectionTag = cms.untracked.InputTag( "pfMet"), - genMetCollectionTag= cms.untracked.InputTag("genMetCalo", "", "HLT8E29"), - t1MetCollectionTag = cms.untracked.InputTag("layer1METs"), - t1MetCollectionTagTwiki = cms.untracked.InputTag("layer1TwikiT1METs"), - -# HLT ............................................................... - HLTCollectionE29 = cms.untracked.InputTag('hltTriggerSummaryAOD','','HLT8E29'), - HLTCollectionE31=cms.untracked.InputTag('hltTriggerSummaryAOD','','HLT'), - HLTTriggerResultsE29 = cms.untracked.InputTag('TriggerResults','','HLT8E29'), - HLTTriggerResultsE31 = cms.untracked.InputTag('TriggerResults','','HLT'), - ProbeHLTObjMaxDR = cms.untracked.double(0.1), - -# ECAL geometry ################################################### - BarrelMaxEta = cms.untracked.double(1.4442), - EndcapMinEta = cms.untracked.double(1.56), - EndcapMaxEta = cms.untracked.double(2.5), - -# some MC information - MCCollection = cms.untracked.InputTag("genParticles", "", "HLT8E29"), - # deta and dphi have default values and there is no reason to change them - - ) - -#process.patDefaultSequence.remove(process.allLayer1Taus) - - - -process.p = cms.Path(process.metCorSequence + process.PF2PAT + process.patDefaultSequence + process.rootskimmer ) -#process.p = cms.Path(process.PF2PAT + process.patDefaultSequence + process.eca ) - - - diff --git a/ElectroWeakAnalysis/WENu/test/genPurposeSkimmerData.py b/ElectroWeakAnalysis/WENu/test/genPurposeSkimmerData.py deleted file mode 100644 index c176e55e089c4..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/genPurposeSkimmerData.py +++ /dev/null @@ -1,184 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - - - - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( -#'rfio:/castor/cern.ch/cms/store/caf/user/meridian/MinimumBias/BeamCommissioning09_EGMSkim/bb33bb16085462eaeb12c180f3bcafc3/EGMFirstCollisionSkim_123592_4.root', - 'file:/tmp/rompotis/bscFilter_123615_6.root', -# 'file:/tmp/rompotis/minbias_Summer09_STARTUP3X_V8D_900GeV_v1_1.root' - ), - - skipBadFiles = cms.untracked.bool(True), -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(200) ) - -# inputTagEnding = "EXPRESS" -# inputTagEnding = "EGMSKIM" -inputTagEnding = "RECO" - - - -## Load additional RECO config -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('GR09_P_V7::All') -#process.GlobalTag.globaltag = cms.string('MC_31X_V5::All') #ideal conditions - 1e31 menu -#process.GlobalTag.globaltag = cms.string('STARTUP31X_V4::All') #ideal conditions - 8e29 menu - -process.load("Configuration.StandardSequences.MagneticField_cff") - -## Load necessary stuff for tcMET -# tracking geometry -process.load("Geometry.CommonTopologies.globalTrackingGeometry_cfi") - -# load the necessary pat sequences -process.load("CommonTools.ParticleFlow.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") - - - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - -## this is for the correct calculation of type1 MET -#from JetMETCorrections.Configuration.L2L3Corrections_Summer08Redigi_cff import * -#from JetMETCorrections.Type1MET.MetType1Corrections_cff import * -#process.load("JetMETCorrections.Type1MET.MetType1Corrections_cff") -#process.load("JetMETCorrections.Configuration.L2L3Corrections_Summer08Redigi_cff") - -#process.metMuonJESCorSC5 = process.metJESCorSC5CaloJet.clone() -#process.metMuonJESCorSC5.inputUncorJetsLabel = "sisCone5CaloJets" -#process.metMuonJESCorSC5.corrector = "L2L3JetCorrectorSC5Calo" -#process.metMuonJESCorSC5.inputUncorMetLabel = "corMetGlobalMuons" -#process.metCorSequence = cms.Sequence(process.metMuonJESCorSC5) - -# make this collection of type 1 corrected MET a pat collection for the code to handle -process.layer1mcMETs = process.layer1METs.clone( - metSource = cms.InputTag("corMetGlobalMuons"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), - ) -process.layer1METs.addTrigMatch = cms.bool(False) -process.layer1METs.addGenMET = cms.bool(False) - -# -# the explicit declaration of rechit collections is just for compatibility with the header -# version of 312 - proper Tags have no need of that -# -# for ecal isolation: replace the ECAL rechit collection -process.eleIsoDepositEcalFromHits.ExtractorPSet.barrelEcalHits = cms.InputTag("reducedEcalRecHitsEB", "", "RECO") -process.eleIsoDepositEcalFromHits.ExtractorPSet.endcapEcalHits = cms.InputTag("reducedEcalRecHitsEE", "", "RECO") -# -# -process.eidRobustHighEnergy.reducedBarrelRecHitCollection = cms.InputTag("reducedEcalRecHitsEB", "", "RECO") -process.eidRobustHighEnergy.reducedEndcapRecHitCollection = cms.InputTag("reducedEcalRecHitsEE", "", "RECO") -# -### create the good old ecal isolation for EE ########## - -## -## this is how to compute isolation yourself for testing purposes -## -#process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.electronEcalRecHitIsolationLcone.ecalBarrelRecHitProducer = cms.InputTag("reducedEcalRecHitsEB") -#process.electronEcalRecHitIsolationLcone.ecalEndcapRecHitProducer = cms.InputTag("reducedEcalRecHitsEB") -#process.electronEcalRecHitIsolationLcone.ecalBarrelRecHitCollection = cms.InputTag("") -#process.electronEcalRecHitIsolationLcone.ecalEndcapRecHitCollection = cms.InputTag("") -#process.electronEcalRecHitIsolationScone.ecalBarrelRecHitProducer = cms.InputTag("reducedEcalRecHitsEB") -#process.electronEcalRecHitIsolationScone.ecalEndcapRecHitProducer = cms.InputTag("reducedEcalRecHitsEB") -#process.electronEcalRecHitIsolationScone.ecalBarrelRecHitCollection = cms.InputTag("") -#process.electronEcalRecHitIsolationScone.ecalEndcapRecHitCollection = cms.InputTag("") -#process.patElectronIsolation = process.egammaIsolationSequence - - -######################################################## -#from PhysicsTools.PatAlgos.producersLayer1.electronProducer_cfi import allLayer1Electrons -# add the user iso -# -# NOTE!!! Egamma Recommendations Track Iso: Scone (0.3), ecal+hcal Lcone (0.4) -## for further studies the rest will be set as user isolations -# -process.allLayer1Electrons.isoDeposits = cms.PSet() -process.allLayer1Electrons.userIsolation = cms.PSet() -process.allLayer1Electrons.addElectronID = cms.bool(False) -process.allLayer1Electrons.electronIDSources = cms.PSet() -process.allLayer1Electrons.addGenMatch = cms.bool(False) -process.allLayer1Electrons.embedGenMatch = cms.bool(False) -process.allLayer1Electrons.embedHighLevelSelection = cms.bool(False) -## -process.allLayer1Muons.addGenMatch = cms.bool(False) -process.allLayer1Muons.embedGenMatch = cms.bool(False) -## -#process.makeAllLayer1Electrons = cms.Sequence(process.patElectronIsolation*process.allLayer1Electrons) -process.makeAllLayer1Electrons = cms.Sequence(process.allLayer1Electrons) -process.makeAllLayer1Muons = cms.Sequence(process.allLayer1Muons) -## -process.allLayer1Objects = cms.Sequence(process.makeAllLayer1Electrons+process.makeAllLayer1Muons+process.makeLayer1METs - +process.layer1mcMETs) -process.selectedLayer1Objects = cms.Sequence(process.selectedLayer1Electrons+process.selectedLayer1Muons) -process.cleanLayer1Objects = cms.Sequence(process.cleanLayer1Muons*process.cleanLayer1Electrons) -process.countLayer1Objects = cms.Sequence(process.countLayer1Electrons+process.countLayer1Muons) - -process.patDefaultSequence = cms.Sequence(process.allLayer1Objects * process.selectedLayer1Objects * - process.cleanLayer1Objects*process.countLayer1Objects - ) - -process.eca = cms.EDAnalyzer("EventContentAnalyzer") - - - -process.rootskimmer = cms.EDAnalyzer( - 'GenPurposeSkimmerData', -# output file ####################################### - outputfile = cms.untracked.string('./bkg.root'), - InputTagEnding = cms.untracked.string(inputTagEnding), -# collections - ElectronCollection = cms.untracked.InputTag("selectedLayer1Electrons"), - MetCollectionTag = cms.untracked.InputTag( "met"), - tcMetCollectionTag = cms.untracked.InputTag( "tcMet"), - pfMetCollectionTag = cms.untracked.InputTag( "pfMet"), -# genMetCollectionTag= cms.untracked.InputTag("genMetCalo", "", "HLT8E29"), - t1MetCollectionTag = cms.untracked.InputTag("layer1METs"), - mcMetCollectionTag = cms.untracked.InputTag("layer1mcMETs"), - -# HLT ............................................................... - HLTCollectionE29 = cms.untracked.InputTag('hltTriggerSummaryAOD','','HLT'), - HLTTriggerResultsE29 = cms.untracked.InputTag('TriggerResults','',inputTagEnding), - # these are just for consistency with the old version - HLTCollectionE31=cms.untracked.InputTag('hltTriggerSummaryAOD','','HLT'), - HLTTriggerResultsE31 = cms.untracked.InputTag('TriggerResults','','HLT'), - ProbeHLTObjMaxDR = cms.untracked.double(0.1), - -# ECAL geometry ################################################### - BarrelMaxEta = cms.untracked.double(1.4442), - EndcapMinEta = cms.untracked.double(1.56), - EndcapMaxEta = cms.untracked.double(2.5), -# -# some extra collections - ctfTracksTag = cms.untracked.InputTag("generalTracks", "", "RECO"), - corHybridsc = cms.untracked.InputTag("correctedHybridSuperClusters","", "RECO"), - multi5x5sc = cms.untracked.InputTag("multi5x5SuperClustersWithPreshower","", "RECO"), - ) - -#process.patDefaultSequence.remove(process.allLayer1Taus) - - - -process.p = cms.Path(process.PF2PAT + process.patDefaultSequence + process.rootskimmer ) -#process.p = cms.Path(process.PF2PAT + process.patDefaultSequence + process.eca ) - - - diff --git a/ElectroWeakAnalysis/WENu/test/genPurposeSkimmer_acceptance.py b/ElectroWeakAnalysis/WENu/test/genPurposeSkimmer_acceptance.py deleted file mode 100644 index 7ebec3a1db53f..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/genPurposeSkimmer_acceptance.py +++ /dev/null @@ -1,160 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - - - - -# source -process.source = cms.Source("PoolSource", - # fileNames = cms.untracked.vstring('rfio:/castor/cern.ch/user/r/rompotis/RedigiSummer08RootTrees/WenuRedigi_RECO_SAMPLE.root') -# fileNames = cms.untracked.vstring('rfio:/castor/cern.ch/user/r/rompotis/Summer09Studies/zee_Summer09-MC_31X_V3_AODSIM_v1_AODSIM.root') - fileNames = cms.untracked.vstring('file:zee_Summer09-MC_31X_V3_AODSIM_v1_AODSIM.root') - #fileNames = cms.untracked.vstring('rfio:/castor/cern.ch/user/r/rompotis/Summer09Studies/QCD_EMEnriched_Pt30to80_AODSIM_7E27C8EA-7984-DE11-BA59-00151796C158.root') -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - - -## Load additional RECO config -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -#process.GlobalTag.globaltag = cms.string('MC_31X_V5::All') #ideal conditions - 1e31 menu -process.GlobalTag.globaltag = cms.string('STARTUP31X_V4::All') #ideal conditions - 8e29 menu - -process.load("Configuration.StandardSequences.MagneticField_cff") - -## Load necessary stuff for tcMET -# tracking geometry -process.load("Geometry.CommonTopologies.globalTrackingGeometry_cfi") - -# load the necessary pat sequences -process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") - - - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - -## this is for the correct calculation of type1 MET -#from JetMETCorrections.Configuration.L2L3Corrections_Summer08Redigi_cff import * -#from JetMETCorrections.Type1MET.MetType1Corrections_cff import * -process.load("JetMETCorrections.Type1MET.MetType1Corrections_cff") -process.load("JetMETCorrections.Configuration.L2L3Corrections_Summer08Redigi_cff") - -process.metMuonJESCorSC5 = process.metJESCorSC5CaloJet.clone() -process.metMuonJESCorSC5.inputUncorJetsLabel = "sisCone5CaloJets" -process.metMuonJESCorSC5.corrector = "L2L3JetCorrectorSC5Calo" -process.metMuonJESCorSC5.inputUncorMetLabel = "caloMetM" - -process.metCorSequence = cms.Sequence(process.metMuonJESCorSC5) - -# make this collection of type 1 corrected MET a pat collection for the code to handle -process.layer1TwikiT1METs = process.layer1METs.clone( - metSource = cms.InputTag("metMuonJESCorSC5","","PAT"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), - ) - - -# -# the explicit declaration of rechit collections is just for compatibility with the header -# version of 312 - proper Tags have no need of that -# -# for ecal isolation: replace the ECAL rechit collection -process.eleIsoDepositEcalFromHits.ExtractorPSet.barrelEcalHits = cms.InputTag("reducedEcalRecHitsEB", "", "RECO") -process.eleIsoDepositEcalFromHits.ExtractorPSet.endcapEcalHits = cms.InputTag("reducedEcalRecHitsEE", "", "RECO") -# -# -process.eidRobustHighEnergy.reducedBarrelRecHitCollection = cms.InputTag("reducedEcalRecHitsEB", "", "RECO") -process.eidRobustHighEnergy.reducedEndcapRecHitCollection = cms.InputTag("reducedEcalRecHitsEE", "", "RECO") -# -### create the good old ecal isolation for EE ########## - -## -## this is how to compute isolation yourself for testing purposes -## -#process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.electronEcalRecHitIsolationLcone.ecalBarrelRecHitProducer = cms.InputTag("reducedEcalRecHitsEB") -#process.electronEcalRecHitIsolationLcone.ecalEndcapRecHitProducer = cms.InputTag("reducedEcalRecHitsEB") -#process.electronEcalRecHitIsolationLcone.ecalBarrelRecHitCollection = cms.InputTag("") -#process.electronEcalRecHitIsolationLcone.ecalEndcapRecHitCollection = cms.InputTag("") -#process.electronEcalRecHitIsolationScone.ecalBarrelRecHitProducer = cms.InputTag("reducedEcalRecHitsEB") -#process.electronEcalRecHitIsolationScone.ecalEndcapRecHitProducer = cms.InputTag("reducedEcalRecHitsEB") -#process.electronEcalRecHitIsolationScone.ecalBarrelRecHitCollection = cms.InputTag("") -#process.electronEcalRecHitIsolationScone.ecalEndcapRecHitCollection = cms.InputTag("") -#process.patElectronIsolation = process.egammaIsolationSequence - - -######################################################## -#from PhysicsTools.PatAlgos.producersLayer1.electronProducer_cfi import allLayer1Electrons -# add the user iso -# -# NOTE!!! Egamma Recommendations Track Iso: Scone (0.3), ecal+hcal Lcone (0.4) -## for further studies the rest will be set as user isolations -# -process.allLayer1Electrons.isolation = cms.PSet() - -## -process.allLayer1Objects = cms.Sequence(process.makeAllLayer1Electrons+process.makeAllLayer1Muons+process.makeLayer1METs+process.layer1TwikiT1METs) -process.selectedLayer1Objects = cms.Sequence(process.selectedLayer1Electrons+process.selectedLayer1Muons) -process.cleanLayer1Objects = cms.Sequence(process.cleanLayer1Muons*process.cleanLayer1Electrons) -process.countLayer1Objects = cms.Sequence(process.countLayer1Electrons+process.countLayer1Muons) - -process.patDefaultSequence = cms.Sequence(process.allLayer1Objects * process.selectedLayer1Objects * - process.cleanLayer1Objects*process.countLayer1Objects - ) - -process.eca = cms.EDAnalyzer("EventContentAnalyzer") - - - -process.rootskimmer = cms.EDAnalyzer( - 'GenPurposeSkimmerAcceptance', -# output file ####################################### - outputfile = cms.untracked.string('./bkg.root'), -# collections - ElectronCollection = cms.untracked.InputTag("selectedLayer1Electrons"), - MetCollectionTag = cms.untracked.InputTag( "met","","RECO"), - tcMetCollectionTag = cms.untracked.InputTag( "tcMet"), - pfMetCollectionTag = cms.untracked.InputTag( "pfMet"), - genMetCollectionTag= cms.untracked.InputTag("genMetCalo", "", "HLT8E29"), - t1MetCollectionTag = cms.untracked.InputTag("layer1METs"), - t1MetCollectionTagTwiki = cms.untracked.InputTag("layer1TwikiT1METs"), - -# HLT ............................................................... - HLTCollectionE29 = cms.untracked.InputTag('hltTriggerSummaryAOD','','HLT8E29'), - HLTCollectionE31=cms.untracked.InputTag('hltTriggerSummaryAOD','','HLT'), - HLTTriggerResultsE29 = cms.untracked.InputTag('TriggerResults','','HLT8E29'), - HLTTriggerResultsE31 = cms.untracked.InputTag('TriggerResults','','HLT'), - ProbeHLTObjMaxDR = cms.untracked.double(0.1), - -# ECAL geometry ################################################### - BarrelMaxEta = cms.untracked.double(1.4442), - EndcapMinEta = cms.untracked.double(1.56), - EndcapMaxEta = cms.untracked.double(2.5), - -# some MC information - MCCollection = cms.untracked.InputTag("genParticles", "", "HLT8E29"), - # deta and dphi have default values and there is no reason to change them - - ) - -#process.patDefaultSequence.remove(process.allLayer1Taus) - - - -process.p = cms.Path(process.metCorSequence + process.PF2PAT + process.patDefaultSequence + process.rootskimmer ) -#process.p = cms.Path(process.PF2PAT + process.patDefaultSequence + process.eca ) - - - diff --git a/ElectroWeakAnalysis/WENu/test/pat_WenuFilterSkimming.py b/ElectroWeakAnalysis/WENu/test/pat_WenuFilterSkimming.py deleted file mode 100644 index 30617e071fd8f..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/pat_WenuFilterSkimming.py +++ /dev/null @@ -1,154 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WenuSpring10START3X_V26_S09-v1_AODSIM.root', - - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('START3X_V26A::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -#process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") -## -# -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.layer1METs = process.patMETs.clone( #%% - metSource = cms.InputTag("tcMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), - ) -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myDesiredMetCollection = 'layer1METs' -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.layer1METs) -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) - -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet() -process.patElectrons.addElectronID = cms.bool(True) -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso= cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso= cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso= cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso= cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso= cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso= cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso= cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso= cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso= cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso= cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso= cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso= cms.InputTag("simpleEleId60cIso"), - ) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -## -process.load("ElectroWeakAnalysis.WENu.simpleEleIdSequence_cff") -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) -# process.makePatMuons may be needed depending on how you calculate the MET -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) -## -## ################################################################################ -## -## the filter to select the candidates from the data samples -## -## -## WARNING: you may want to modify this item: -HLT_process_name = "REDIGI" # -# trigger path selection -HLT_path_name = "HLT_Photon10_L1R" #= "HLT_Ele15_LW_L1R" # -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" -# #= "hltL1NonIsoHLTNonIsoSingleElectronLWEt15PixelMatchFilter" # -# -process.wenuFilter = cms.EDFilter('WenuCandidateFilter', - # cuts - ETCut = cms.untracked.double(25.), - METCut = cms.untracked.double(0.), - # 2nd electron in W events - vetoSecondElectronEvents = cms.untracked.bool(True), - ETCut2ndEle = cms.untracked.double(20.), - vetoSecondElectronIDType = cms.untracked.string("simpleEleId95cIso"), - vetoSecondElectronIDSign = cms.untracked.string("="), - vetoSecondElectronIDValue = cms.untracked.double(7.), - # trigger - useTriggerInfo = cms.untracked.bool(True), - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.2), - # additional preselection cuts - useValidFirstPXBHit = cms.untracked.bool(False), - useConversionRejection = cms.untracked.bool(False), - useExpectedMissingHits = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - # calculate some new cuts - calculateValidFirstPXBHit = cms.untracked.bool(True), - calculateConversionRejection = cms.untracked.bool(True), - calculateExpectedMissingHits = cms.untracked.bool(True), - # electrons and MET - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myDesiredMetCollection,"","PAT"), - - ) -#################################################################################### -process.wenuPath = cms.Path(process.patDefaultSequence*process.wenuFilter) - - -process.wenuOutputModule = cms.OutputModule( "PoolOutputModule", - fileName = cms.untracked.string("wenuCandidates.root"), - outputCommands = cms.untracked.vstring( - 'drop *', - 'keep *_*_selectedWenuCandidates_*', - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('wenuPath',), - ) - ) - -process.outpath = cms.EndPath(process.wenuOutputModule) - - - - - diff --git a/ElectroWeakAnalysis/WENu/test/pat_WenuFilterSkimming_data.py b/ElectroWeakAnalysis/WENu/test/pat_WenuFilterSkimming_data.py deleted file mode 100644 index 095cddbcc5770..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/pat_WenuFilterSkimming_data.py +++ /dev/null @@ -1,156 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - #'file:rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WenuSpring10START3X_V26_S09-v1_AODSIM.root', - "dcap://gfe02:22128/pnfs/hep.ph.ic.ac.uk/data/cms/store/data/Commissioning10/MinimumBias/RECO/May6thPDSkim2_SD_EG-v1/0135/FCC2FA5A-BB5D-DF11-8246-002618943978.root" - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('GR_R_35X_V8B::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -#process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") -## -# -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.layer1METs = process.patMETs.clone( #%% - metSource = cms.InputTag("tcMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), - ) -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myDesiredMetCollection = 'layer1METs' -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.layer1METs) -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) - -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet() -process.patElectrons.addElectronID = cms.bool(True) -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso= cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso= cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso= cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso= cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso= cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso= cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso= cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso= cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso= cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso= cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso= cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso= cms.InputTag("simpleEleId60cIso"), - ) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -## -process.load("ElectroWeakAnalysis.WENu.simpleEleIdSequence_cff") -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) -# process.makePatMuons may be needed depending on how you calculate the MET -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) -## -## ################################################################################ -## -## the filter to select the candidates from the data samples -## -## -## WARNING: you may want to modify this item: -HLT_process_name = "HLT" # -# trigger path selection -HLT_path_name = "HLT_Photon10_L1R" #"HLT_Ele15_LW_L1R" -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" # "hltL1NonIsoHLTNonIsoSingleElectronLWEt15PixelMatchFilter" -# -process.wenuFilter = cms.EDFilter('WenuCandidateFilter', - # cfg for data - dataMagneticFieldSetUp = cms.untracked.bool(True), - dcsTag = cms.untracked.InputTag("scalersRawToDigi"), - # cuts - ETCut = cms.untracked.double(25.), - METCut = cms.untracked.double(0.), - # 2nd electron in W events - vetoSecondElectronEvents = cms.untracked.bool(True), - ETCut2ndEle = cms.untracked.double(20.), - vetoSecondElectronIDType = cms.untracked.string("simpleEleId95cIso"), - vetoSecondElectronIDSign = cms.untracked.string("="), - vetoSecondElectronIDValue = cms.untracked.double(7.), - # trigger - useTriggerInfo = cms.untracked.bool(True), - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.2), - # additional preselection cuts - useValidFirstPXBHit = cms.untracked.bool(False), - useConversionRejection = cms.untracked.bool(False), - useExpectedMissingHits = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - # calculate some new cuts - calculateValidFirstPXBHit = cms.untracked.bool(True), - calculateConversionRejection = cms.untracked.bool(True), - calculateExpectedMissingHits = cms.untracked.bool(True), - # electrons and MET - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myDesiredMetCollection,"","PAT"), - - ) -#################################################################################### -process.wenuPath = cms.Path(process.patDefaultSequence*process.wenuFilter) - - -process.wenuOutputModule = cms.OutputModule( "PoolOutputModule", - fileName = cms.untracked.string("wenuCandidates.root"), - outputCommands = cms.untracked.vstring( - 'drop *', - 'keep *_*_selectedWenuCandidates_*', - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('wenuPath',), - ) - ) - -process.outpath = cms.EndPath(process.wenuOutputModule) - - - - - diff --git a/ElectroWeakAnalysis/WENu/test/pat_WenuPlots.py b/ElectroWeakAnalysis/WENu/test/pat_WenuPlots.py deleted file mode 100644 index 21cba3d7f63e6..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/pat_WenuPlots.py +++ /dev/null @@ -1,180 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WminusToENu-CTEQ66-powheg_Spring10-START3X_V26_AODSIM-v2.root', - # 'file:rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WenuSpring10START3X_V26_S09-v1_AODSIM.root', - - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('START3X_V26A::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -#process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") -## -# -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.layer1METs = process.patMETs.clone( #%% - metSource = cms.InputTag("tcMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), - ) -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myDesiredMetCollection = 'layer1METs' -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.layer1METs) -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) - -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet( -# tracker = cms.PSet( -# src = cms.InputTag("electronTrackIsolationScone"), -# ), -# ecal = cms.PSet( -# src = cms.InputTag("electronEcalRecHitIsolationScone"), -# ), -# hcal = cms.PSet( -# src = cms.InputTag("electronHcalTowerIsolationScone"), -# ), -# user = cms.VPSet(), - ) -process.patElectrons.addElectronID = cms.bool(True) -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso= cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso= cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso= cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso= cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso= cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso= cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso= cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso= cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso= cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso= cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso= cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso= cms.InputTag("simpleEleId60cIso"), - ) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -## -process.load("ElectroWeakAnalysis.WENu.simpleEleIdSequence_cff") -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) -# process.makePatMuons may be needed depending on how you calculate the MET -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) -## -## ################################################################################ -## -## the filter to select the candidates from the data samples -## -## -## WARNING: you may want to modify this item: -HLT_process_name = "HLT" # -# trigger path selection -HLT_path_name = "HLT_Photon10_L1R" #= "HLT_Ele15_LW_L1R" # -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" -# #= "hltL1NonIsoHLTNonIsoSingleElectronLWEt15PixelMatchFilter" # -process.wenuFilter = cms.EDFilter('WenuCandidateFilter', - # cuts - ETCut = cms.untracked.double(25.), - METCut = cms.untracked.double(0.), - # 2nd electron in W events - vetoSecondElectronEvents = cms.untracked.bool(True), - ETCut2ndEle = cms.untracked.double(20.), - vetoSecondElectronIDType = cms.untracked.string("simpleEleId95cIso"), - vetoSecondElectronIDSign = cms.untracked.string("="), - vetoSecondElectronIDValue = cms.untracked.double(7.), - # trigger - useTriggerInfo = cms.untracked.bool(True), - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.2), - # additional preselection cuts - useValidFirstPXBHit = cms.untracked.bool(False), - useConversionRejection = cms.untracked.bool(False), - useExpectedMissingHits = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - # calculate some new cuts - calculateValidFirstPXBHit = cms.untracked.bool(True), - calculateConversionRejection = cms.untracked.bool(True), - calculateExpectedMissingHits = cms.untracked.bool(True), - # electrons and MET - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myDesiredMetCollection,"","PAT"), - - ) -#################################################################################### -## -## the W selection that you prefer included in another cfg -from ElectroWeakAnalysis.WENu.simpleCutBasedSpring10SelectionBlocks_cfi import * - -selection_inverse = cms.PSet ( - deta_EB_inv = cms.untracked.bool(True), - deta_EE_inv = cms.untracked.bool(True) - ) - -#################################################################################### -## -## and the plot creator -process.plotter = cms.EDAnalyzer('WenuPlots', - # selection in use - selection_80relIso, - selection_inverse, - # if usePrecalcID true the precalculated ID will be used only - usePrecalcID = cms.untracked.bool(False), - usePrecalcIDType = cms.untracked.string('simpleEleId95cIso'), - usePrecalcIDSign = cms.untracked.string('='), - usePrecalcIDValue = cms.untracked.double(7), - # - wenuCollectionTag = cms.untracked.InputTag( - "wenuFilter","selectedWenuCandidates","PAT") - ) - - - - -process.p = cms.Path(process.patDefaultSequence +process.wenuFilter + process.plotter) - - - diff --git a/ElectroWeakAnalysis/WENu/test/pat_WenuPlotsFromSkimmed.py b/ElectroWeakAnalysis/WENu/test/pat_WenuPlotsFromSkimmed.py deleted file mode 100644 index 44aae5be1ad78..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/pat_WenuPlotsFromSkimmed.py +++ /dev/null @@ -1,64 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("WENUPLOTS") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:wenuCandidates.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('START3X_V26A::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -#################################################################################### -## -## the W selection that you prefer -from ElectroWeakAnalysis.WENu.simpleCutBasedSpring10SelectionBlocks_cfi import * - -selection_inverse = cms.PSet ( - deta_EB_inv = cms.untracked.bool(True), - deta_EE_inv = cms.untracked.bool(True) - ) - -#################################################################################### -## -## and the plot creator -process.plotter = cms.EDAnalyzer('WenuPlots', - # selection in use - selection_80relIso, - selection_inverse, - # if usePrecalcID the precalculated ID will be used only - usePrecalcID = cms.untracked.bool(False), - usePrecalcIDType = cms.untracked.string('simpleEleId95cIso'), - usePrecalcIDSign = cms.untracked.string('='), - usePrecalcIDValue = cms.untracked.double(7), - # - wenuCollectionTag = cms.untracked.InputTag( - "wenuFilter","selectedWenuCandidates","PAT") - ) - - - -process.p = cms.Path(process.plotter) - - diff --git a/ElectroWeakAnalysis/WENu/test/pat_WenuPlotsFromSkimmed_data.py b/ElectroWeakAnalysis/WENu/test/pat_WenuPlotsFromSkimmed_data.py deleted file mode 100644 index b385b65e4f92a..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/pat_WenuPlotsFromSkimmed_data.py +++ /dev/null @@ -1,88 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("WENUPLOTS") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:wenuCandidates.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('GR_R_35X_V8B::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -#################################################################################### -## -## the W selection that you prefer -from ElectroWeakAnalysis.WENu.simpleCutBasedSpring10SelectionBlocks_cfi import * - -selection_inverse = cms.PSet ( - deta_EB_inv = cms.untracked.bool(True), - deta_EE_inv = cms.untracked.bool(True) - ) -# dummy selection for debugging -selection_dummy = cms.PSet ( - trackIso_EB = cms.untracked.double(100.), - ecalIso_EB = cms.untracked.double(100.), - hcalIso_EB = cms.untracked.double(100.), - sihih_EB = cms.untracked.double(0.1 ), - dphi_EB = cms.untracked.double(0.1 ), - deta_EB = cms.untracked.double(0.1 ), - hoe_EB = cms.untracked.double(0.1 ), - cIso_EB = cms.untracked.double(100.), - - trackIso_EE = cms.untracked.double(100.), - ecalIso_EE = cms.untracked.double(100.), - hcalIso_EE = cms.untracked.double(100.), - sihih_EE = cms.untracked.double(0.1 ), - dphi_EE = cms.untracked.double(0.1 ), - deta_EE = cms.untracked.double(0.1 ), - hoe_EE = cms.untracked.double(0.1 ), - cIso_EE = cms.untracked.double(100.), - useConversionRejection = cms.untracked.bool(False), - useExpectedMissingHits = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits = cms.untracked.int32(99), - ) - - -#################################################################################### -## -## and the plot creator -process.plotter = cms.EDAnalyzer('WenuPlots', - # selection in use - selection_80relIso, - selection_inverse, - # if usePrecalcID the precalculated ID will be used only - usePrecalcID = cms.untracked.bool(False), - usePrecalcIDType = cms.untracked.string('simpleEleId95cIso'), - usePrecalcIDSign = cms.untracked.string('='), - usePrecalcIDValue = cms.untracked.double(7), - # - wenuCollectionTag = cms.untracked.InputTag( - "wenuFilter","selectedWenuCandidates","PAT") - ) - - - -process.p = cms.Path(process.plotter) - - diff --git a/ElectroWeakAnalysis/WENu/test/pat_WenuPlots_data.py b/ElectroWeakAnalysis/WENu/test/pat_WenuPlots_data.py deleted file mode 100644 index fe91ca96cd2b0..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/pat_WenuPlots_data.py +++ /dev/null @@ -1,207 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - #'file:rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WenuSpring10START3X_V26_S09-v1_AODSIM.root', - "dcap://gfe02:22128/pnfs/hep.ph.ic.ac.uk/data/cms/store/data/Commissioning10/MinimumBias/RECO/May6thPDSkim2_SD_EG-v1/0135/FCC2FA5A-BB5D-DF11-8246-002618943978.root" - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1000) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('GR_R_35X_V8B::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -process.load("CommonTools.ParticleFlow.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") -## -# -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.layer1METs = process.patMETs.clone( #%% - metSource = cms.InputTag("tcMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), - ) -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myDesiredMetCollection = 'layer1METs' -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.layer1METs) -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) - -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet( -# tracker = cms.PSet( -# src = cms.InputTag("electronTrackIsolationScone"), -# ), -# ecal = cms.PSet( -# src = cms.InputTag("electronEcalRecHitIsolationScone"), -# ), -# hcal = cms.PSet( -# src = cms.InputTag("electronHcalTowerIsolationScone"), -# ), -# user = cms.VPSet(), - ) -process.patElectrons.addElectronID = cms.bool(True) -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso= cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso= cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso= cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso= cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso= cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso= cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso= cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso= cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso= cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso= cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso= cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso= cms.InputTag("simpleEleId60cIso"), - ) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -## -process.load("ElectroWeakAnalysis.WENu.simpleEleIdSequence_cff") -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) -# process.makePatMuons may be needed depending on how you calculate the MET -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) -## -## ################################################################################ -## -## the filter to select the candidates from the data samples -## -## -## WARNING: you may want to modify this item: -HLT_process_name = "HLT" # -# trigger path selection -HLT_path_name = "HLT_Photon10_L1R" # "HLT_Ele15_LW_L1R" -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" #"hltL1NonIsoHLTNonIsoSingleElectronLWEt15PixelMatchFilter" -# -process.wenuFilter = cms.EDFilter('WenuCandidateFilter', - # cfg for data - dataMagneticFieldSetUp = cms.untracked.bool(True), - dcsTag = cms.untracked.InputTag("scalersRawToDigi"), - # cuts - ETCut = cms.untracked.double(25.), - METCut = cms.untracked.double(0.), - # 2nd electron in W events - vetoSecondElectronEvents = cms.untracked.bool(True), - ETCut2ndEle = cms.untracked.double(20.), - vetoSecondElectronIDType = cms.untracked.string("simpleEleId95cIso"), - vetoSecondElectronIDSign = cms.untracked.string("="), - vetoSecondElectronIDValue = cms.untracked.double(7.), - # trigger - useTriggerInfo = cms.untracked.bool(True), - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.2), - # additional preselection cuts - useValidFirstPXBHit = cms.untracked.bool(False), - useConversionRejection = cms.untracked.bool(False), - useExpectedMissingHits = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - # calculate some new cuts - calculateValidFirstPXBHit = cms.untracked.bool(True), - calculateConversionRejection = cms.untracked.bool(True), - calculateExpectedMissingHits = cms.untracked.bool(True), - # electrons and MET - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myDesiredMetCollection,"","PAT"), - - ) -#################################################################################### -## -## the W selection that you prefer included in another cfg -from ElectroWeakAnalysis.WENu.simpleCutBasedSpring10SelectionBlocks_cfi import * - -selection_inverse = cms.PSet ( - deta_EB_inv = cms.untracked.bool(True), - deta_EE_inv = cms.untracked.bool(True) - ) -# dummy selection for debugging -selection_dummy = cms.PSet ( - trackIso_EB = cms.untracked.double(100.), - ecalIso_EB = cms.untracked.double(100.), - hcalIso_EB = cms.untracked.double(100.), - sihih_EB = cms.untracked.double(0.1 ), - dphi_EB = cms.untracked.double(0.1 ), - deta_EB = cms.untracked.double(0.1 ), - hoe_EB = cms.untracked.double(0.1 ), - cIso_EB = cms.untracked.double(100.), - - trackIso_EE = cms.untracked.double(100.), - ecalIso_EE = cms.untracked.double(100.), - hcalIso_EE = cms.untracked.double(100.), - sihih_EE = cms.untracked.double(0.1 ), - dphi_EE = cms.untracked.double(0.1 ), - deta_EE = cms.untracked.double(0.1 ), - hoe_EE = cms.untracked.double(0.1 ), - cIso_EE = cms.untracked.double(100.), - useConversionRejection = cms.untracked.bool(False), - useExpectedMissingHits = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits = cms.untracked.int32(99), - ) - - - -#################################################################################### -## -## and the plot creator -process.plotter = cms.EDAnalyzer('WenuPlots', - # selection in use - selection_80relIso, - selection_inverse, - # if usePrecalcID the precalculated ID will be used only - usePrecalcID = cms.untracked.bool(False), - usePrecalcIDType = cms.untracked.string('simpleEleId95cIso'), - usePrecalcIDSign = cms.untracked.string('='), - usePrecalcIDValue = cms.untracked.double(7), - # - wenuCollectionTag = cms.untracked.InputTag( - "wenuFilter","selectedWenuCandidates","PAT") - ) - - - - -process.p = cms.Path(process.patDefaultSequence +process.wenuFilter + process.plotter) - - - diff --git a/ElectroWeakAnalysis/WENu/test/pat_WenuPlots_hcalDepths.py b/ElectroWeakAnalysis/WENu/test/pat_WenuPlots_hcalDepths.py deleted file mode 100644 index ff14072d5a1b2..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/pat_WenuPlots_hcalDepths.py +++ /dev/null @@ -1,280 +0,0 @@ -import FWCore.ParameterSet.Config as cms - - -## -## In this configuration file I show an example of how to put separate cuts -## in hcal isolation using the 2 hcal depths -## -## Nikolaos Rompotis - Imperial College London -## 09Dec09 - -process = cms.Process("PAT") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -# source -process.source = cms.Source("PoolSource", - #fileNames = cms.untracked.vstring('rfio:/castor/cern.ch/user/r/rompotis/RedigiSummer08RootTrees/WenuRedigi_RECO_SAMPLE.root') - fileNames = cms.untracked.vstring( -# 'file:/tmp/rompotis/Run123505_LS70-80_BscMinBiasInnerThreshold.root', - 'file:zee_Summer09-MC_31X_V3_AODSIM_v1_AODSIM.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -#process.GlobalTag.globaltag = cms.string('GR09_P_V7::All') # >>> this is for data -process.GlobalTag.globaltag = cms.string('MC_31X_V5::All') # >>> this is for summer09 -#process.GlobalTag.globaltag = cms.string('STARTUP31X_V4::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -process.load("CommonTools.ParticleFlow.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") -## -# -# for ecal isolation: set the correct name of the ECAL rechit collection -# -process.eleIsoDepositEcalFromHits.ExtractorPSet.barrelEcalHits = cms.InputTag("reducedEcalRecHitsEB", "", "RECO") -process.eleIsoDepositEcalFromHits.ExtractorPSet.endcapEcalHits = cms.InputTag("reducedEcalRecHitsEE", "", "RECO") -# -# -process.eidRobustHighEnergy.reducedBarrelRecHitCollection = cms.InputTag("reducedEcalRecHitsEB", "", "RECO") -process.eidRobustHighEnergy.reducedEndcapRecHitCollection = cms.InputTag("reducedEcalRecHitsEE", "", "RECO") - -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.layer1RawCaloMETs = process.layer1METs.clone( #%% - metSource = cms.InputTag("met"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), - ) -process.layer1METs.addGenMET = cms.bool(False) -process.layer1METs.addTrigMatch = cms.bool(False) -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myDesiredMetCollection = 'layer1RawCaloMETs' -## modify the sequence of the MET creation: #%% -process.makeLayer1METs = cms.Sequence( # process.patMETCorrections * process.layer1METs * - process.layer1RawCaloMETs) -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -process.electronEcalRecHitIsolationLcone.ecalBarrelRecHitProducer = cms.InputTag("reducedEcalRecHitsEB") -process.electronEcalRecHitIsolationScone.ecalBarrelRecHitProducer = cms.InputTag("reducedEcalRecHitsEB") -process.electronEcalRecHitIsolationLcone.ecalEndcapRecHitProducer = cms.InputTag("reducedEcalRecHitsEE") -process.electronEcalRecHitIsolationScone.ecalEndcapRecHitProducer = cms.InputTag("reducedEcalRecHitsEE") -# -process.electronEcalRecHitIsolationLcone.ecalBarrelRecHitCollection = cms.InputTag("") -process.electronEcalRecHitIsolationScone.ecalBarrelRecHitCollection = cms.InputTag("") -process.electronEcalRecHitIsolationLcone.ecalEndcapRecHitCollection = cms.InputTag("") -process.electronEcalRecHitIsolationScone.ecalEndcapRecHitCollection = cms.InputTag("") -# -# -process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) -## -## the following modification calculates the hcal isolation in depth 1 and depth 2 -## for the following cfg lines the following holds: -## depth 1 isolation is used in default hcal iso, i.e. accessed with userIsolation(pat::HcalIso) -## depth 2 is accessed with userIsolation(pat::User1Iso) -## -process.allLayer1Electrons.isoDeposits = cms.PSet() -process.allLayer1Electrons.userIsolation = cms.PSet( - tracker = cms.PSet( src = cms.InputTag("electronTrackIsolationScone"), ), - ecal = cms.PSet( src = cms.InputTag("electronEcalRecHitIsolationLcone"), ), - hcal = cms.PSet( src = cms.InputTag("electronHcalDepth1TowerIsolationLcone"), ), - user = cms.VPSet( - cms.PSet( src = cms.InputTag("electronHcalDepth2TowerIsolationLcone"), ), - ), - - ) -process.allLayer1Electrons.addElectronID = cms.bool(False) -process.allLayer1Electrons.electronIDSources = cms.PSet() -process.allLayer1Electrons.addGenMatch = cms.bool(False) -process.allLayer1Electrons.embedGenMatch = cms.bool(False) -process.allLayer1Electrons.embedHighLevelSelection = cms.bool(False) -## -process.allLayer1Muons.addGenMatch = cms.bool(False) -process.allLayer1Muons.embedGenMatch = cms.bool(False) -## -process.makeAllLayer1Electrons = cms.Sequence(process.patElectronIsolation*process.allLayer1Electrons) -process.makeAllLayer1Muons = cms.Sequence(process.allLayer1Muons) -## -process.allLayer1Objects = cms.Sequence(process.makeAllLayer1Electrons+process.makeAllLayer1Muons+process.makeLayer1METs) -process.selectedLayer1Objects = cms.Sequence(process.selectedLayer1Electrons+process.selectedLayer1Muons) -process.cleanLayer1Objects = cms.Sequence(process.cleanLayer1Muons*process.cleanLayer1Electrons) -process.countLayer1Objects = cms.Sequence(process.countLayer1Electrons+process.countLayer1Muons) - -process.patDefaultSequence = cms.Sequence(process.allLayer1Objects * process.selectedLayer1Objects * - process.cleanLayer1Objects*process.countLayer1Objects - ) -## -## ################################################################################ -## -## the filter to select the candidates from the data samples -## -## -## WARNING: you may want to modify this item: -HLT_process_name = "HLT8E29" # options: HLT or HLT8E29 >> this is for summer09 -#HLT_process_name = "HLT" # options: HLT or HLT8E29 >> this is for data -# trigger path selection -HLT_path_name = "HLT_Ele15_LW_L1R" -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSingleElectronLWEt15PixelMatchFilter" -# -process.wenuFilter = cms.EDFilter('WenuCandidateFilter', - # cuts - ETCut = cms.untracked.double(0.), - METCut = cms.untracked.double(0.), - vetoSecondElectronEvents = cms.untracked.bool(False), - ETCut2ndEle = cms.untracked.double(20.), - # trigger here - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - useTriggerInfo = cms.untracked.bool(False), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - electronMatched2HLT = cms.untracked.bool(False), - electronMatched2HLT_DR = cms.untracked.double(0.2), - # electrons and MET - electronCollectionTag = cms.untracked.InputTag("selectedLayer1Electrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myDesiredMetCollection,"","PAT") - - ) -#################################################################################### -## -## the W selection that you prefer -selection_a2 = cms.PSet ( - trackIso_EB = cms.untracked.double(2.2), - ecalIso_EB = cms.untracked.double(4.2), - hcalIso_EB = cms.untracked.double(2.0), - sihih_EB = cms.untracked.double(0.0099), - dphi_EB = cms.untracked.double(0.025), - deta_EB = cms.untracked.double(0.0040), - hoe_EB = cms.untracked.double(1000.0), - ## you can add this variable as an extra isolation, - ## if you don't add it then automatically will not be used - userIso_EB = cms.untracked.double(5.0), - - trackIso_EE = cms.untracked.double(1.1), - ecalIso_EE = cms.untracked.double(3.4), - hcalIso_EE = cms.untracked.double(1.3), - sihih_EE = cms.untracked.double(0.028), - dphi_EE = cms.untracked.double(0.020), - deta_EE = cms.untracked.double(0.0066), - hoe_EE = cms.untracked.double(1000.0), - ## you can add this variable as an extra isolation, - ## if you don't add it then automatically will not be used - userIso_EE = cms.untracked.double(5.0), - ) - -selection_test = cms.PSet ( - trackIso_EB = cms.untracked.double(10), - ecalIso_EB = cms.untracked.double(10), - hcalIso_EB = cms.untracked.double(10), - sihih_EB = cms.untracked.double(0.1), - dphi_EB = cms.untracked.double(1), - deta_EB = cms.untracked.double(1), - hoe_EB = cms.untracked.double(1), - - trackIso_EE = cms.untracked.double(10), - ecalIso_EE = cms.untracked.double(10), - hcalIso_EE = cms.untracked.double(10), - sihih_EE = cms.untracked.double(1), - dphi_EE = cms.untracked.double(1), - deta_EE = cms.untracked.double(1), - hoe_EE = cms.untracked.double(1) - ) - -selection_inverse = cms.PSet ( - trackIso_EB_inv = cms.untracked.bool(True), - trackIso_EE_inv = cms.untracked.bool(True) - ) - -#################################################################################### -## -## and the plot creator -process.plotter = cms.EDAnalyzer('WenuPlots', - selection_a2, - selection_inverse, - wenuCollectionTag = cms.untracked.InputTag( - "wenuFilter","selectedWenuCandidates","PAT") - ) - - - - -process.p = cms.Path(process.patDefaultSequence +process.wenuFilter + process.plotter) -# process.p = cms.Path(process.patSequences + process.wenuFilter + process.eca) - - -#### SET OF Trigger names for AOD - 321 -# -# HLTPath_[0] = "HLT_Ele10_LW_L1R"; -# HLTFilterType_[0] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt10PixelMatchFilter","","HLT8E29"); -# HLTPath_[1] = "HLT_Ele10_LW_EleId_L1R"; -# HLTFilterType_[1] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt10EleIdDphiFilter","","HLT8E29"); -# HLTPath_[2] = "HLT_Ele15_LW_L1R"; -# HLTFilterType_[2] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15PixelMatchFilter","","HLT8E29"); -# HLTPath_[3] = "HLT_Ele15_SC10_LW_L1R"; -# HLTFilterType_[3] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15ESDoubleSC10","","HLT8E29"); -# HLTPath_[4] = "HLT_Ele15_SiStrip_L1R"; -# HLTFilterType_[4] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronSiStripEt15PixelMatchFilter","","HLT8E29"); -# HLTPath_[5] = "HLT_Ele20_LW_L1R"; -# HLTFilterType_[5] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15EtFilterESet20","","HLT8E29"); -# HLTPath_[6] = "HLT_DoubleEle5_SW_L1R"; -# HLTFilterType_[6] = edm::InputTag("hltL1NonIsoHLTNonIsoDoubleElectronEt5PixelMatchFilter","","HLT8E29"); -# HLTPath_[7] = "HLT_Ele15_SC10_LW_L1R"; -# HLTFilterType_[7] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15ESDoubleSC10","","HLT8E29"); -# HLTPath_[8] = "tba"; -# HLTFilterType_[8] = edm::InputTag("tba"); -# HLTPath_[9] = "tba"; -# HLTFilterType_[9] = edm::InputTag("tba"); -# // e31 menu -# HLTPath_[10] = "HLT_Ele10_SW_L1R"; -# HLTFilterType_[10] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt10PixelMatchFilter","","HLT"); -# HLTPath_[11] = "HLT_Ele15_SW_L1R"; -# HLTFilterType_[11] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15PixelMatchFilter","","HLT"); -# HLTPath_[12] = "HLT_Ele15_SiStrip_L1R"; // <--- same as [4] -# HLTFilterType_[12] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronSiStripEt15PixelMatchFilter","","HLT"); -# HLTPath_[13] = "HLT_Ele15_SW_LooseTrackIso_L1R"; -# HLTFilterType_[13] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15LTITrackIsolFilter","","HLT"); -# HLTPath_[14] = "HLT_Ele15_SW_EleId_L1R"; -# HLTFilterType_[14] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EleIdDphiFilter","","HLT"); -# HLTPath_[15] = "HLT_Ele20_SW_L1R"; -# HLTFilterType_[15] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt20PixelMatchFilter","","HLT"); -# HLTPath_[16] = "HLT_Ele20_SiStrip_L1R"; -# HLTFilterType_[16] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronSiStripEt20PixelMatchFilter","","HLT"); -# HLTPath_[17] = "HLT_Ele25_SW_L1R"; -# HLTFilterType_[17] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EtFilterESet25","","HLT"); -# HLTPath_[18] = "HLT_Ele25_SW_EleId_LooseTrackIso_L1R"; -# HLTFilterType_[18] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EleIdTrackIsolFilterESet25LTI","","HLT"); -# HLTPath_[19] = "HLT_DoubleEle10_SW_L1R"; -# HLTFilterType_[19] = edm::InputTag("hltL1NonIsoHLTNonIsoDoubleElectronEt10PixelMatchFilter","","HLT"); -# HLTPath_[20] = "HLT_Ele15_SC15_SW_EleId_L1R"; -# HLTFilterType_[20] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EleIdESDoubleSC15","","HLT"); -# HLTPath_[21] = "HLT_Ele15_SC15_SW_LooseTrackIso_L1R"; -# HLTFilterType_[21] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15LTIESDoubleSC15","","HLT"); -# HLTPath_[22] = "HLT_Ele20_SC15_SW_L1R"; -# HLTFilterType_[22] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt20ESDoubleSC15","","HLT"); diff --git a/ElectroWeakAnalysis/WENu/test/pat_WenuPlots_isodeposits.py b/ElectroWeakAnalysis/WENu/test/pat_WenuPlots_isodeposits.py deleted file mode 100644 index 77cdcc1b5de9c..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/pat_WenuPlots_isodeposits.py +++ /dev/null @@ -1,231 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -# source -process.source = cms.Source("PoolSource", - #fileNames = cms.untracked.vstring('rfio:/castor/cern.ch/user/r/rompotis/RedigiSummer08RootTrees/WenuRedigi_RECO_SAMPLE.root') - fileNames = cms.untracked.vstring( - 'file:zee_Summer09-MC_31X_V3_AODSIM_v1_AODSIM.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -#process.GlobalTag.globaltag = cms.string('MC_31X_V5::All') -process.GlobalTag.globaltag = cms.string('STARTUP31X_V4::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") -process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") -## -# -# for ecal isolation: set the correct name of the ECAL rechit collection -# -process.eleIsoDepositEcalFromHits.ExtractorPSet.barrelEcalHits = cms.InputTag("reducedEcalRecHitsEB", "", "RECO") -process.eleIsoDepositEcalFromHits.ExtractorPSet.endcapEcalHits = cms.InputTag("reducedEcalRecHitsEE", "", "RECO") -# -# -process.eidRobustHighEnergy.reducedBarrelRecHitCollection = cms.InputTag("reducedEcalRecHitsEB", "", "RECO") -process.eidRobustHighEnergy.reducedEndcapRecHitCollection = cms.InputTag("reducedEcalRecHitsEE", "", "RECO") -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## CHOICE OF THE HLT PATH this section is not used from PAT -## -## Define here as string the names of the triggers only once -## please consult the table of the available triggers at the end of this file -# trigger menu selection -## -#process.patTrigger.processName = cms.string(HLT_process_name) -#process.patTriggerMatcher = cms.Sequence(process.patTriggerElectronMatcher) -#process.electronTriggerMatchHltElectrons.pathNames = cms.vstring(HLT_path_name) -#process.patTriggerMatchEmbedder = cms.Sequence(process.cleanLayer1ElectronsTriggerMatch) -#process.patTriggerSequence = cms.Sequence(process.patTrigger*process.patTriggerMatcher* -# process.patTriggerMatchEmbedder) -## -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.layer1RawCaloMETs = process.layer1METs.clone( #%% - metSource = cms.InputTag("met","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), - ) -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myDesiredMetCollection = 'layer1RawCaloMETs' -## modify the sequence of the MET creation: #%% -process.makeLayer1METs = cms.Sequence(process.patMETCorrections * process.layer1METs * - process.layer1RawCaloMETs) -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) -process.allLayer1Objects = cms.Sequence(process.makeAllLayer1Electrons+process.makeAllLayer1Muons+process.makeLayer1METs) -process.selectedLayer1Objects = cms.Sequence(process.selectedLayer1Electrons+process.selectedLayer1Muons) -process.cleanLayer1Objects = cms.Sequence(process.cleanLayer1Muons*process.cleanLayer1Electrons) -process.countLayer1Objects = cms.Sequence(process.countLayer1Electrons+process.countLayer1Muons) - -process.patDefaultSequence = cms.Sequence(process.allLayer1Objects * process.selectedLayer1Objects * - process.cleanLayer1Objects*process.countLayer1Objects - ) -## -## ################################################################################ -## -## the filter to select the candidates from the data samples -## -## -## WARNING: you may want to modify this item: -HLT_process_name = "HLT8E29" # options: HLT or HLT8E29 -# trigger path selection -HLT_path_name = "HLT_Ele10_LW_L1R" -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSingleElectronLWEt10PixelMatchFilter" -# -process.wenuFilter = cms.EDFilter('WenuCandidateFilter', - # cuts - ETCut = cms.untracked.double(20.), - METCut = cms.untracked.double(0.), - vetoSecondElectronEvents = cms.untracked.bool(False), - ETCut2ndEle = cms.untracked.double(20.), - # trigger here - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - electronMatched2HLT = cms.untracked.bool(False), - electronMatched2HLT_DR = cms.untracked.double(0.2), - # electrons and MET - electronCollectionTag = cms.untracked.InputTag("selectedLayer1Electrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myDesiredMetCollection,"","PAT") - - ) -#################################################################################### -## -## the W selection that you prefer -selection_a2 = cms.PSet ( - trackIso_EB = cms.untracked.double(2.2), - ecalIso_EB = cms.untracked.double(4.2), - hcalIso_EB = cms.untracked.double(2.0), - sihih_EB = cms.untracked.double(0.0099), - dphi_EB = cms.untracked.double(0.025), - deta_EB = cms.untracked.double(0.0040), - hoe_EB = cms.untracked.double(0.1), - - trackIso_EE = cms.untracked.double(1.1), - ecalIso_EE = cms.untracked.double(3.4), - hcalIso_EE = cms.untracked.double(1.3), - sihih_EE = cms.untracked.double(0.028), - dphi_EE = cms.untracked.double(0.020), - deta_EE = cms.untracked.double(0.0066), - hoe_EE = cms.untracked.double(0.1) - ) -selection_test = cms.PSet ( - trackIso_EB = cms.untracked.double(10), - ecalIso_EB = cms.untracked.double(10), - hcalIso_EB = cms.untracked.double(10), - sihih_EB = cms.untracked.double(0.1), - dphi_EB = cms.untracked.double(1), - deta_EB = cms.untracked.double(1), - hoe_EB = cms.untracked.double(1), - - trackIso_EE = cms.untracked.double(10), - ecalIso_EE = cms.untracked.double(10), - hcalIso_EE = cms.untracked.double(10), - sihih_EE = cms.untracked.double(1), - dphi_EE = cms.untracked.double(1), - deta_EE = cms.untracked.double(1), - hoe_EE = cms.untracked.double(1) - ) - -selection_inverse = cms.PSet ( - trackIso_EB_inv = cms.untracked.bool(True), - trackIso_EE_inv = cms.untracked.bool(True) - ) - -#################################################################################### -## -## and the plot creator -process.plotter = cms.EDAnalyzer('WenuPlots', - selection_test, - selection_inverse, - wenuCollectionTag = cms.untracked.InputTag( - "wenuFilter","selectedWenuCandidates","PAT") - ) - - - - -process.p = cms.Path(process.patDefaultSequence +process.wenuFilter + process.plotter) -# process.p = cms.Path(process.patSequences + process.wenuFilter + process.eca) - - -#### SET OF Trigger names for AOD - 321 -# -# HLTPath_[0] = "HLT_Ele10_LW_L1R"; -# HLTFilterType_[0] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt10PixelMatchFilter","","HLT8E29"); -# HLTPath_[1] = "HLT_Ele10_LW_EleId_L1R"; -# HLTFilterType_[1] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt10EleIdDphiFilter","","HLT8E29"); -# HLTPath_[2] = "HLT_Ele15_LW_L1R"; -# HLTFilterType_[2] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15PixelMatchFilter","","HLT8E29"); -# HLTPath_[3] = "HLT_Ele15_SC10_LW_L1R"; -# HLTFilterType_[3] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15ESDoubleSC10","","HLT8E29"); -# HLTPath_[4] = "HLT_Ele15_SiStrip_L1R"; -# HLTFilterType_[4] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronSiStripEt15PixelMatchFilter","","HLT8E29"); -# HLTPath_[5] = "HLT_Ele20_LW_L1R"; -# HLTFilterType_[5] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15EtFilterESet20","","HLT8E29"); -# HLTPath_[6] = "HLT_DoubleEle5_SW_L1R"; -# HLTFilterType_[6] = edm::InputTag("hltL1NonIsoHLTNonIsoDoubleElectronEt5PixelMatchFilter","","HLT8E29"); -# HLTPath_[7] = "HLT_Ele15_SC10_LW_L1R"; -# HLTFilterType_[7] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15ESDoubleSC10","","HLT8E29"); -# HLTPath_[8] = "tba"; -# HLTFilterType_[8] = edm::InputTag("tba"); -# HLTPath_[9] = "tba"; -# HLTFilterType_[9] = edm::InputTag("tba"); -# // e31 menu -# HLTPath_[10] = "HLT_Ele10_SW_L1R"; -# HLTFilterType_[10] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt10PixelMatchFilter","","HLT"); -# HLTPath_[11] = "HLT_Ele15_SW_L1R"; -# HLTFilterType_[11] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15PixelMatchFilter","","HLT"); -# HLTPath_[12] = "HLT_Ele15_SiStrip_L1R"; // <--- same as [4] -# HLTFilterType_[12] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronSiStripEt15PixelMatchFilter","","HLT"); -# HLTPath_[13] = "HLT_Ele15_SW_LooseTrackIso_L1R"; -# HLTFilterType_[13] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15LTITrackIsolFilter","","HLT"); -# HLTPath_[14] = "HLT_Ele15_SW_EleId_L1R"; -# HLTFilterType_[14] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EleIdDphiFilter","","HLT"); -# HLTPath_[15] = "HLT_Ele20_SW_L1R"; -# HLTFilterType_[15] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt20PixelMatchFilter","","HLT"); -# HLTPath_[16] = "HLT_Ele20_SiStrip_L1R"; -# HLTFilterType_[16] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronSiStripEt20PixelMatchFilter","","HLT"); -# HLTPath_[17] = "HLT_Ele25_SW_L1R"; -# HLTFilterType_[17] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EtFilterESet25","","HLT"); -# HLTPath_[18] = "HLT_Ele25_SW_EleId_LooseTrackIso_L1R"; -# HLTFilterType_[18] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EleIdTrackIsolFilterESet25LTI","","HLT"); -# HLTPath_[19] = "HLT_DoubleEle10_SW_L1R"; -# HLTFilterType_[19] = edm::InputTag("hltL1NonIsoHLTNonIsoDoubleElectronEt10PixelMatchFilter","","HLT"); -# HLTPath_[20] = "HLT_Ele15_SC15_SW_EleId_L1R"; -# HLTFilterType_[20] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EleIdESDoubleSC15","","HLT"); -# HLTPath_[21] = "HLT_Ele15_SC15_SW_LooseTrackIso_L1R"; -# HLTFilterType_[21] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15LTIESDoubleSC15","","HLT"); -# HLTPath_[22] = "HLT_Ele20_SC15_SW_L1R"; -# HLTFilterType_[22] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt20ESDoubleSC15","","HLT"); diff --git a/ElectroWeakAnalysis/WENu/test/pat_WenuVBTF_ntuple.py b/ElectroWeakAnalysis/WENu/test/pat_WenuVBTF_ntuple.py deleted file mode 100644 index 932f20d8e60b2..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/pat_WenuVBTF_ntuple.py +++ /dev/null @@ -1,274 +0,0 @@ -## ######################################################### -## -## Configuration for the production of the ICHEP VBTF ntuple -## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -## MC, spring10 -## -## Nikolaos Rompotis - Imperial College London -## 22 June 2010 -## -## ######################################################### -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - -#process.MessageLogger = cms.Service( -# "MessageLogger", -# categories = cms.untracked.vstring('info', 'debug','cout') -# ) - - -process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cerr.threshold = cms.untracked.string("INFO") -process.MessageLogger.cerr.FwkSummary = cms.untracked.PSet( - reportEvery = cms.untracked.int32(1000000), - limit = cms.untracked.int32(10000000) - ) -process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( - reportEvery = cms.untracked.int32(100000), - limit = cms.untracked.int32(10000000) - ) -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) - ) - - - - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - # SOME DATA FILE TO BE PUT HERE - #'rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WminusToENu-CTEQ66-powheg_Spring10-START3X_V26_AODSIM-v2.root', - #'file:rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WenuSpring10START3X_V26_S09-v1_AODSIM.root', - - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('GR_R_36X_V11A::All') # GLOBAL TAG FOR DATA -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -#process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") -## -# -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.caloMET = process.patMETs.clone( #%% - metSource = cms.InputTag("met","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.tcMET = process.patMETs.clone( #%% - metSource = cms.InputTag("tcMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.pfMET = process.patMETs.clone( #%% - metSource = cms.InputTag("pfMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myMetCollection = 'caloMET' -myPfMetCollection = 'pfMET' -myTcMetCollection = 'tcMET' -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.caloMET*process.tcMET*process.pfMET) -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) - -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet() -process.patElectrons.addElectronID = cms.bool(True) -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso= cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso= cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso= cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso= cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso= cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso= cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso= cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso= cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso= cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso= cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso= cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso= cms.InputTag("simpleEleId60cIso"), - ) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -process.patElectrons.usePV = cms.bool(False) -## -process.load("ElectroWeakAnalysis.WENu.simpleEleIdSequence_cff") -# you have to tell the ID that it is data -process.simpleEleId95relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId90relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId85relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId80relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId70relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId60relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId95cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId90cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId85cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId80cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId70cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId60cIso.dataMagneticFieldSetUp = cms.bool(True) -# -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) -# process.makePatMuons may be needed depending on how you calculate the MET -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) -## -## ################################################################################ -## -## the filter to select the candidates from the data samples -## -## -## WARNING: you may want to modify this item: -HLT_process_name = "HLT" # REDIGI for the Spring10 production traditional MC / HLT for the powheg samples or data -# trigger path selection -HLT_path_name = "HLT_Photon10_L1R" #= "HLT_Ele15_LW_L1R" # -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" -# -HLT_path_name_extra = "HLT_Photon15_L1R" #= "HLT_Ele15_LW_L1R" # -HLT_filter_name_extra = "hltL1NonIsoHLTNonIsoSinglePhotonEt15HcalIsolFilter" - - -process.wenuFilter = cms.EDFilter('WenuCandidateFilter', - ### the input collections needed: - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myMetCollection,"","PAT"), - pfMetCollectionTag = cms.untracked.InputTag(myPfMetCollection,"","PAT"), - tcMetCollectionTag = cms.untracked.InputTag(myTcMetCollection,"","PAT"), - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - ebRecHits = cms.untracked.InputTag("reducedEcalRecHitsEB"), - eeRecHits = cms.untracked.InputTag("reducedEcalRecHitsEE"), - PrimaryVerticesCollection = cms.untracked.InputTag("offlinePrimaryVertices"), - ### here the preselection is applied - # fiducial cuts: - BarrelMaxEta = cms.untracked.double(1.4442), - EndCapMinEta = cms.untracked.double(1.566), - EndCapMaxEta = cms.untracked.double(2.5), - # demand ecal driven electron: - useEcalDrivenElectrons = cms.untracked.bool(True), - # demand offline spike cleaning with the Swiss Cross criterion: - useSpikeRejection = cms.untracked.bool(True), - spikeCleaningSwissCrossCut = cms.untracked.double(0.95), - # demand geometrically matched to an HLT object with ET>15GeV - useTriggerInfo = cms.untracked.bool(True), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.1), - useHLTObjectETCut = cms.untracked.bool(True), - hltObjectETCut = cms.untracked.double(15.), - useExtraTrigger = cms.untracked.bool(True), - hltpathExtra = cms.untracked.string(HLT_path_name_extra), - hltpathFilterExtra = cms.untracked.InputTag(HLT_filter_name_extra,"",HLT_process_name), - # ET Cut in the SC - ETCut = cms.untracked.double(20.), - METCut = cms.untracked.double(0.), - # reject events with a 2nd electron with ET > 20 that passes the WP95% - vetoSecondElectronEvents = cms.untracked.bool(False), - storeSecondElectron = cms.untracked.bool(True), - ETCut2ndEle = cms.untracked.double(20.), - vetoSecondElectronIDType = cms.untracked.string("simpleEleId95relIso"), - vetoSecondElectronIDSign = cms.untracked.string("="), - vetoSecondElectronIDValue = cms.untracked.double(7.), - # Other parameters of the code - leave them as they are - useValidFirstPXBHit = cms.untracked.bool(False), - useConversionRejection = cms.untracked.bool(False), - useExpectedMissingHits = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - # calculate some new cuts - calculateValidFirstPXBHit = cms.untracked.bool(True), - calculateConversionRejection = cms.untracked.bool(True), - calculateExpectedMissingHits = cms.untracked.bool(True), - # we are dealing with DATA - dataMagneticFieldSetUp = cms.untracked.bool(True), - dcsTag = cms.untracked.InputTag("scalersRawToDigi"), - ) -#################################################################################### -## -## the W selection that you prefer included in another cfg -from ElectroWeakAnalysis.WENu.simpleCutBasedSpring10SelectionBlocks_cfi import * - -selection_inverse = cms.PSet ( - deta_EB_inv = cms.untracked.bool(True), - deta_EE_inv = cms.untracked.bool(True) - ) - -#################################################################################### -# -# we need to store jet information, hence we have to produce the jets: -process.load("JetMETCorrections.Configuration.DefaultJEC_cff") - -process.jetSequence = cms.Sequence( process.ak5CaloJetsL2L3 ) -process.pfjetAK5Sequence = cms.Sequence( process.ak5PFJetsL2L3 ) - -process.ourJetSequence = cms.Sequence( process.jetSequence * process.pfjetAK5Sequence ) - - - -## -## and the plot creator -process.plotter = cms.EDAnalyzer('WenuPlots', - # selection in use: wont be used - we have usePrecalcID true later - selection_80relIso, - selection_inverse, - # The selection to be used here: - usePrecalcID = cms.untracked.bool(True), - usePrecalcIDType = cms.untracked.string('simpleEleId80relIso'), - usePrecalcIDSign = cms.untracked.string('='), - usePrecalcIDValue = cms.untracked.double(7), - # some extra information on the ntuple production: - includeJetInformationInNtuples = cms.untracked.bool(True), - caloJetCollectionTag = cms.untracked.InputTag('ak5CaloJetsL2L3'), - pfJetCollectionTag = cms.untracked.InputTag('ak5PFJetsL2L3'), - DRJetFromElectron = cms.untracked.double(0.3), - # - wenuCollectionTag = cms.untracked.InputTag("wenuFilter","selectedWenuCandidates","PAT"), - WENU_VBTFselectionFileName = cms.untracked.string("WENU_VBTFselection.root"), - WENU_VBTFpreseleFileName = cms.untracked.string("WENU_VBTFpreselection.root"), - DatasetTag = cms.untracked.int32(100), - storeSecondElectronInformation = cms.untracked.bool(True), - ) -# -# if you run on data then you have to do misalignment corrections first!!! -# not to be used with MC!! -process.load("RecoEgamma.EgammaTools.correctedElectronsProducer_cfi") -process.p = cms.Path( process.gsfElectrons*process.ourJetSequence* - process.patDefaultSequence*process.wenuFilter*process.plotter) -#process.p = cms.Path( process.ourJetSequence * process.patDefaultSequence +process.wenuFilter + process.plotter) - - diff --git a/ElectroWeakAnalysis/WENu/test/pat_WenuVBTF_ntuple_forCTEQ66Powheg.py b/ElectroWeakAnalysis/WENu/test/pat_WenuVBTF_ntuple_forCTEQ66Powheg.py deleted file mode 100644 index 2bf672123ff95..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/pat_WenuVBTF_ntuple_forCTEQ66Powheg.py +++ /dev/null @@ -1,254 +0,0 @@ -## ######################################################### -## -## Configuration for the production of the ICHEP VBTF ntuple -## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -## MC, spring10 -## -## Nikolaos Rompotis - Imperial College London -## 22 June 2010 -## -## ######################################################### -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - -#process.MessageLogger = cms.Service( -# "MessageLogger", -# categories = cms.untracked.vstring('info', 'debug','cout') -# ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cerr.threshold = cms.untracked.string("INFO") -process.MessageLogger.cerr.FwkSummary = cms.untracked.PSet( - reportEvery = cms.untracked.int32(1000000), - limit = cms.untracked.int32(10000000) - ) -process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( - reportEvery = cms.untracked.int32(100000), - limit = cms.untracked.int32(10000000) - ) -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) - ) - - - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WminusToENu-CTEQ66-powheg_Spring10-START3X_V26_AODSIM-v2.root', - #'file:rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WenuSpring10START3X_V26_S09-v1_AODSIM.root', - - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('START3X_V26A::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -#process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") -## -# -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.caloMET = process.patMETs.clone( #%% - metSource = cms.InputTag("met","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.tcMET = process.patMETs.clone( #%% - metSource = cms.InputTag("tcMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.pfMET = process.patMETs.clone( #%% - metSource = cms.InputTag("pfMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myMetCollection = 'caloMET' -myPfMetCollection = 'pfMET' -myTcMetCollection = 'tcMET' -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.caloMET*process.tcMET*process.pfMET) -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) - -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet( ) -process.patElectrons.addElectronID = cms.bool(True) -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso= cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso= cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso= cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso= cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso= cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso= cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso= cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso= cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso= cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso= cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso= cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso= cms.InputTag("simpleEleId60cIso"), - ) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -process.patElectrons.usePV = cms.bool(False) -## -process.load("ElectroWeakAnalysis.WENu.simpleEleIdSequence_cff") -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) -# process.makePatMuons may be needed depending on how you calculate the MET -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) -## -## ################################################################################ -## -## the filter to select the candidates from the data samples -## -## -## WARNING: you may want to modify this item: -HLT_process_name = "HLT" # REDIGI for the Spring10 production traditional MC / HLT for the powheg samples or data -# trigger path selection -HLT_path_name = "HLT_Photon10_L1R" -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" -# -HLT_path_name_extra = "HLT_Photon15_L1R" #= "HLT_Ele15_LW_L1R" # -HLT_filter_name_extra = "hltL1NonIsoHLTNonIsoSinglePhotonEt15HcalIsolFilter" -process.wenuFilter = cms.EDFilter('WenuCandidateFilter', - ### the input collections needed: - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myMetCollection,"","PAT"), - pfMetCollectionTag = cms.untracked.InputTag(myPfMetCollection,"","PAT"), - tcMetCollectionTag = cms.untracked.InputTag(myTcMetCollection,"","PAT"), - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - ebRecHits = cms.untracked.InputTag("reducedEcalRecHitsEB"), - eeRecHits = cms.untracked.InputTag("reducedEcalRecHitsEE"), - PrimaryVerticesCollection = cms.untracked.InputTag("offlinePrimaryVertices"), - ### here the preselection is applied - # fiducial cuts: - BarrelMaxEta = cms.untracked.double(1.4442), - EndCapMinEta = cms.untracked.double(1.566), - EndCapMaxEta = cms.untracked.double(2.5), - # demand ecal driven electron: - useEcalDrivenElectrons = cms.untracked.bool(True), - # demand offline spike cleaning with the Swiss Cross criterion: - useSpikeRejection = cms.untracked.bool(True), - spikeCleaningSwissCrossCut = cms.untracked.double(0.95), - # demand geometrically matched to an HLT object with ET>15GeV - useTriggerInfo = cms.untracked.bool(True), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.1), - useHLTObjectETCut = cms.untracked.bool(True), - hltObjectETCut = cms.untracked.double(15.), - useExtraTrigger = cms.untracked.bool(True), - hltpathExtra = cms.untracked.string(HLT_path_name_extra), - hltpathFilterExtra = cms.untracked.InputTag(HLT_filter_name_extra,"",HLT_process_name), - # ET Cut in the SC - ETCut = cms.untracked.double(20.), - METCut = cms.untracked.double(0.), - # reject events with a 2nd electron with ET > 20 that passes the WP95% - vetoSecondElectronEvents = cms.untracked.bool(False), - storeSecondElectron = cms.untracked.bool(True), - ETCut2ndEle = cms.untracked.double(20.), - vetoSecondElectronIDType = cms.untracked.string("simpleEleId95relIso"), - vetoSecondElectronIDSign = cms.untracked.string("="), - vetoSecondElectronIDValue = cms.untracked.double(7.), - # Other parameters of the code - leave them as they are - useValidFirstPXBHit = cms.untracked.bool(False), - useConversionRejection = cms.untracked.bool(False), - useExpectedMissingHits = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - # calculate some new cuts - calculateValidFirstPXBHit = cms.untracked.bool(True), - calculateConversionRejection = cms.untracked.bool(True), - calculateExpectedMissingHits = cms.untracked.bool(True), - # it is MC, not data - dataMagneticFieldSetUp = cms.untracked.bool(False), - dcsTag = cms.untracked.InputTag("scalersRawToDigi"), - ) -#################################################################################### -## -## the W selection that you prefer included in another cfg -from ElectroWeakAnalysis.WENu.simpleCutBasedSpring10SelectionBlocks_cfi import * - -selection_inverse = cms.PSet ( - deta_EB_inv = cms.untracked.bool(True), - deta_EE_inv = cms.untracked.bool(True) - ) - -#################################################################################### -# -# we need to store jet information, hence we have to produce the jets: -process.load("JetMETCorrections.Configuration.DefaultJEC_cff") - -process.jetSequence = cms.Sequence( process.ak5CaloJetsL2L3 ) -process.pfjetAK5Sequence = cms.Sequence( process.ak5PFJetsL2L3 ) - -process.ourJetSequence = cms.Sequence( process.jetSequence * process.pfjetAK5Sequence ) - - - -## -## and the plot creator -process.plotter = cms.EDAnalyzer('WenuPlots', - # selection in use: wont be used - we have usePrecalcID true later - selection_80relIso, - selection_inverse, - # The selection to be used here: - usePrecalcID = cms.untracked.bool(True), - usePrecalcIDType = cms.untracked.string('simpleEleId80relIso'), - usePrecalcIDSign = cms.untracked.string('='), - usePrecalcIDValue = cms.untracked.double(7), - # some extra information on the ntuple production: - includeJetInformationInNtuples = cms.untracked.bool(True), - caloJetCollectionTag = cms.untracked.InputTag('ak5CaloJetsL2L3'), - pfJetCollectionTag = cms.untracked.InputTag('ak5PFJetsL2L3'), - DRJetFromElectron = cms.untracked.double(0.3), - # - wenuCollectionTag = cms.untracked.InputTag("wenuFilter","selectedWenuCandidates","PAT"), - WENU_VBTFselectionFileName = cms.untracked.string("WENU_VBTFselection.root"), - WENU_VBTFpreseleFileName = cms.untracked.string("WENU_VBTFpreselection.root"), - DatasetTag = cms.untracked.int32(0), - storeSecondElectronInformation = cms.untracked.bool(True), - ) -# -# if you run on data then you have to do misalignment corrections first!!! -# not to be used with MC!! -#process.load("RecoEgamma.EgammaTools.correctedElectronsProducer_cfi") -#process.p = cms.Path( process.gsfElectrons + process.patDefaultSequence +process.wenuFilter + process.plotter) -process.p = cms.Path( process.ourJetSequence * process.patDefaultSequence +process.wenuFilter + process.plotter) - - diff --git a/ElectroWeakAnalysis/WENu/test/pat_WenuVBTF_ntuple_forData.py b/ElectroWeakAnalysis/WENu/test/pat_WenuVBTF_ntuple_forData.py deleted file mode 100644 index 9cd50c292f0ef..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/pat_WenuVBTF_ntuple_forData.py +++ /dev/null @@ -1,250 +0,0 @@ -## ######################################################### -## -## Configuration for the production of the ICHEP VBTF ntuple -## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -## MC, spring10 -## -## Nikolaos Rompotis - Imperial College London -## 22 June 2010 -## -## ######################################################### -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - -#process.MessageLogger = cms.Service( -# "MessageLogger", -# categories = cms.untracked.vstring('info', 'debug','cout') -# ) - - -process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cerr.threshold = cms.untracked.string("INFO") -process.MessageLogger.cerr.FwkSummary = cms.untracked.PSet( - reportEvery = cms.untracked.int32(1000000), - limit = cms.untracked.int32(10000000) - ) -process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( - reportEvery = cms.untracked.int32(100000), - limit = cms.untracked.int32(10000000) - ) -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) - ) - - - - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - # SOME DATA FILE TO BE PUT HERE - #'rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WminusToENu-CTEQ66-powheg_Spring10-START3X_V26_AODSIM-v2.root', - #'file:rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WenuSpring10START3X_V26_S09-v1_AODSIM.root', - 'rfio:/castor/cern.ch/cms/store/relval/CMSSW_3_9_1/RelValZEE/GEN-SIM-RECO/START39_V3-v1/0062/187296DA-39E4-DF11-A172-003048679296.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1000) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('START39_V3::All') - -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -#process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") -## -# -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.caloMET = process.patMETs.clone( #%% - metSource = cms.InputTag("met","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.tcMET = process.patMETs.clone( #%% - metSource = cms.InputTag("tcMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.pfMET = process.patMETs.clone( #%% - metSource = cms.InputTag("pfMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myMetCollection = 'caloMET' -myPfMetCollection = 'pfMET' -myTcMetCollection = 'tcMET' -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.caloMET*process.tcMET*process.pfMET) -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) - -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet() -process.patElectrons.addElectronID = cms.bool(True) -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso= cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso= cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso= cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso= cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso= cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso= cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso= cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso= cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso= cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso= cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso= cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso= cms.InputTag("simpleEleId60cIso"), - ) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -process.patElectrons.usePV = cms.bool(False) -## -process.load("ElectroWeakAnalysis.WENu.simpleEleIdSequence_cff") -# -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) -# process.makePatMuons may be needed depending on how you calculate the MET -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) -## -## ################################################################################ -## -## the filter to select the candidates from the data samples -## -## -## WARNING: you may want to modify this item: -HLT_process_name = "HLT" # REDIGI for the Spring10 production traditional MC / HLT for the powheg samples or data -# trigger path selection -HLT_path_name = "HLT_Photon10_L1R" #= "HLT_Ele15_LW_L1R" # -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" -# - - -process.wenuFilter = cms.EDFilter('WenuCandidateFilter', - ### the input collections needed: - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myMetCollection,"","PAT"), - pfMetCollectionTag = cms.untracked.InputTag(myPfMetCollection,"","PAT"), - tcMetCollectionTag = cms.untracked.InputTag(myTcMetCollection,"","PAT"), - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - ebRecHits = cms.untracked.InputTag("reducedEcalRecHitsEB"), - eeRecHits = cms.untracked.InputTag("reducedEcalRecHitsEE"), - PrimaryVerticesCollection = cms.untracked.InputTag("offlinePrimaryVertices"), - ### here the preselection is applied - # fiducial cuts: - BarrelMaxEta = cms.untracked.double(1.4442), - EndCapMinEta = cms.untracked.double(1.566), - EndCapMaxEta = cms.untracked.double(2.5), - # demand ecal driven electron: - useEcalDrivenElectrons = cms.untracked.bool(True), - # demand offline spike cleaning with the Swiss Cross criterion: - useSpikeRejection = cms.untracked.bool(False), - spikeCleaningSwissCrossCut = cms.untracked.double(0.95), - # demand geometrically matched to an HLT object with ET>15GeV - useTriggerInfo = cms.untracked.bool(False), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.1), - useHLTObjectETCut = cms.untracked.bool(True), - hltObjectETCut = cms.untracked.double(15.), - useExtraTrigger = cms.untracked.bool(False), - # ET Cut in the SC - ETCut = cms.untracked.double(20.), - METCut = cms.untracked.double(0.), - # reject events with a 2nd electron with ET > 20 that passes the WP95% - vetoSecondElectronEvents = cms.untracked.bool(False), - storeSecondElectron = cms.untracked.bool(True), - ETCut2ndEle = cms.untracked.double(20.), - vetoSecondElectronIDType = cms.untracked.string("simpleEleId95relIso"), - vetoSecondElectronIDSign = cms.untracked.string("="), - vetoSecondElectronIDValue = cms.untracked.double(7.), - # Other parameters of the code - leave them as they are - useValidFirstPXBHit = cms.untracked.bool(False), - useConversionRejection = cms.untracked.bool(False), - useExpectedMissingHits = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - # calculate some new cuts - calculateValidFirstPXBHit = cms.untracked.bool(True), - calculateExpectedMissingHits = cms.untracked.bool(True), - ) -#################################################################################### -## -## the W selection that you prefer included in another cfg -from ElectroWeakAnalysis.WENu.simpleCutBasedSpring10SelectionBlocks_cfi import * - -selection_inverse = cms.PSet ( - deta_EB_inv = cms.untracked.bool(True), - deta_EE_inv = cms.untracked.bool(True) - ) - -#################################################################################### -# -# we need to store jet information, hence we have to produce the jets: -process.load("JetMETCorrections.Configuration.CorrectedJetProducersDefault_cff") -#process.load("JetMETCorrections.Configuration.CorrectedJetProducers_cff") -process.jetSequence = cms.Sequence( process.ak5CaloJetsL2L3 ) -process.pfjetAK5Sequence = cms.Sequence( process.ak5PFJetsL2L3 ) - -process.ourJetSequence = cms.Sequence( process.jetSequence * process.pfjetAK5Sequence ) - - - -## -## and the plot creator -process.plotter = cms.EDAnalyzer('WenuPlots', - # selection in use: wont be used - we have usePrecalcID true later - selection_80relIso, - selection_inverse, - # The selection to be used here: - usePrecalcID = cms.untracked.bool(True), - usePrecalcIDType = cms.untracked.string('simpleEleId80relIso'), - usePrecalcIDSign = cms.untracked.string('='), - usePrecalcIDValue = cms.untracked.double(7), - # some extra information on the ntuple production: - includeJetInformationInNtuples = cms.untracked.bool(True), - caloJetCollectionTag = cms.untracked.InputTag('ak5CaloJetsL2L3'), - pfJetCollectionTag = cms.untracked.InputTag('ak5PFJetsL2L3'), - DRJetFromElectron = cms.untracked.double(0.3), - # - wenuCollectionTag = cms.untracked.InputTag("wenuFilter","selectedWenuCandidates","PAT"), - WENU_VBTFselectionFileName = cms.untracked.string("WENU_VBTFselection.root"), - WENU_VBTFpreseleFileName = cms.untracked.string("WENU_VBTFpreselection.root"), - DatasetTag = cms.untracked.int32(100), - storeExtraInformation = cms.untracked.bool(True), - storeAllSecondElectronVariables = cms.untracked.bool(True), - ) -# -process.p = cms.Path( process.ourJetSequence*process.patDefaultSequence*process.wenuFilter*process.plotter) - - diff --git a/ElectroWeakAnalysis/WENu/test/pat_WenuVBTF_ntuple_forSpring10MC.py b/ElectroWeakAnalysis/WENu/test/pat_WenuVBTF_ntuple_forSpring10MC.py deleted file mode 100644 index eed223ef5e75d..0000000000000 --- a/ElectroWeakAnalysis/WENu/test/pat_WenuVBTF_ntuple_forSpring10MC.py +++ /dev/null @@ -1,248 +0,0 @@ -## ######################################################### -## -## Configuration for the production of the ICHEP VBTF ntuple -## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -## MC, spring10 -## -## Nikolaos Rompotis - Imperial College London -## 22 June 2010 -## -## ######################################################### -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - #'rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WminusToENu-CTEQ66-powheg_Spring10-START3X_V26_AODSIM-v2.root', - 'file:rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WenuSpring10START3X_V26_S09-v1_AODSIM.root', - - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('START3X_V26A::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -#process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") -## -# -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.caloMET = process.patMETs.clone( #%% - metSource = cms.InputTag("met","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.tcMET = process.patMETs.clone( #%% - metSource = cms.InputTag("tcMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.pfMET = process.patMETs.clone( #%% - metSource = cms.InputTag("pfMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myMetCollection = 'caloMET' -myPfMetCollection = 'pfMET' -myTcMetCollection = 'tcMET' -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.caloMET*process.tcMET*process.pfMET) -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) - -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet( -# tracker = cms.PSet( -# src = cms.InputTag("electronTrackIsolationScone"), -# ), -# ecal = cms.PSet( -# src = cms.InputTag("electronEcalRecHitIsolationScone"), -# ), -# hcal = cms.PSet( -# src = cms.InputTag("electronHcalTowerIsolationScone"), -# ), -# user = cms.VPSet(), - ) -process.patElectrons.addElectronID = cms.bool(True) -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso= cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso= cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso= cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso= cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso= cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso= cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso= cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso= cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso= cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso= cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso= cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso= cms.InputTag("simpleEleId60cIso"), - ) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -process.patElectrons.usePV = cms.bool(False) -## -process.load("ElectroWeakAnalysis.WENu.simpleEleIdSequence_cff") -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) -# process.makePatMuons may be needed depending on how you calculate the MET -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) -## -## ################################################################################ -## -## the filter to select the candidates from the data samples -## -## -## WARNING: you may want to modify this item: -HLT_process_name = "REDIGI" # REDIGI for the Spring10 production traditional MC -# trigger path selection -HLT_path_name = "HLT_Photon10_L1R" #= "HLT_Ele15_LW_L1R" # -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" -# -HLT_path_name_extra = "HLT_Photon15_L1R" #= "HLT_Ele15_LW_L1R" # -HLT_filter_name_extra = "hltL1NonIsoHLTNonIsoSinglePhotonEt15HcalIsolFilter" -# #= "hltL1NonIsoHLTNonIsoSingleElectronLWEt15PixelMatchFilter" # -process.wenuFilter = cms.EDFilter('WenuCandidateFilter', - ### the input collections needed: - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myMetCollection,"","PAT"), - pfMetCollectionTag = cms.untracked.InputTag(myPfMetCollection,"","PAT"), - tcMetCollectionTag = cms.untracked.InputTag(myTcMetCollection,"","PAT"), - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - ebRecHits = cms.untracked.InputTag("reducedEcalRecHitsEB"), - eeRecHits = cms.untracked.InputTag("reducedEcalRecHitsEE"), - PrimaryVerticesCollection = cms.untracked.InputTag("offlinePrimaryVertices"), - ### here the preselection is applied - # fiducial cuts: - BarrelMaxEta = cms.untracked.double(1.4442), - EndCapMinEta = cms.untracked.double(1.566), - EndCapMaxEta = cms.untracked.double(2.5), - # demand ecal driven electron: - useEcalDrivenElectrons = cms.untracked.bool(True), - # demand offline spike cleaning with the Swiss Cross criterion: - useSpikeRejection = cms.untracked.bool(True), - spikeCleaningSwissCrossCut = cms.untracked.double(0.95), - # demand geometrically matched to an HLT object with ET>15GeV - useTriggerInfo = cms.untracked.bool(True), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.1), - useHLTObjectETCut = cms.untracked.bool(True), - hltObjectETCut = cms.untracked.double(15.), - useExtraTrigger = cms.untracked.bool(True), - hltpathExtra = cms.untracked.string(HLT_path_name_extra), - hltpathFilterExtra = cms.untracked.InputTag(HLT_filter_name_extra,"",HLT_process_name), - # ET Cut in the SC - ETCut = cms.untracked.double(20.), - METCut = cms.untracked.double(0.), - # Do not reject events with 2nd electrons in the filter level, do it later if you need - # but store the second electron in the event - vetoSecondElectronEvents = cms.untracked.bool(False), - storeSecondElectron = cms.untracked.bool(True), - ETCut2ndEle = cms.untracked.double(20.), - vetoSecondElectronIDType = cms.untracked.string("simpleEleId95relIso"), - vetoSecondElectronIDSign = cms.untracked.string("="), - vetoSecondElectronIDValue = cms.untracked.double(7.), - # Other parameters of the code - leave them as they are - useValidFirstPXBHit = cms.untracked.bool(False), - useConversionRejection = cms.untracked.bool(False), - useExpectedMissingHits = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - # calculate some new cuts - calculateValidFirstPXBHit = cms.untracked.bool(True), - calculateConversionRejection = cms.untracked.bool(True), - calculateExpectedMissingHits = cms.untracked.bool(True), - ) -#################################################################################### -## -## the W selection that you prefer included in another cfg -from ElectroWeakAnalysis.WENu.simpleCutBasedSpring10SelectionBlocks_cfi import * - -selection_inverse = cms.PSet ( - deta_EB_inv = cms.untracked.bool(True), - deta_EE_inv = cms.untracked.bool(True) - ) - -#################################################################################### -# -# we need to store jet information, hence we have to produce the jets: -process.load("JetMETCorrections.Configuration.DefaultJEC_cff") - -process.jetSequence = cms.Sequence( process.ak5CaloJetsL2L3 ) -process.pfjetAK5Sequence = cms.Sequence( process.ak5PFJetsL2L3 ) - -process.ourJetSequence = cms.Sequence( process.jetSequence * process.pfjetAK5Sequence ) - - - -## -## and the plot creator -process.plotter = cms.EDAnalyzer('WenuPlots', - # selection in use: wont be used - we have usePrecalcID true later - selection_80relIso, - selection_inverse, - # The selection to be used here: - usePrecalcID = cms.untracked.bool(True), - usePrecalcIDType = cms.untracked.string('simpleEleId80relIso'), - usePrecalcIDSign = cms.untracked.string('='), - usePrecalcIDValue = cms.untracked.double(7), - # some extra information on the ntuple production: - includeJetInformationInNtuples = cms.untracked.bool(True), - caloJetCollectionTag = cms.untracked.InputTag('ak5CaloJetsL2L3'), - pfJetCollectionTag = cms.untracked.InputTag('ak5PFJetsL2L3'), - DRJetFromElectron = cms.untracked.double(0.3), - # - wenuCollectionTag = cms.untracked.InputTag("wenuFilter","selectedWenuCandidates","PAT"), - WENU_VBTFselectionFileName = cms.untracked.string("WENU_VBTFselection.root"), - WENU_VBTFpreseleFileName = cms.untracked.string("WENU_VBTFpreselection.root"), - DatasetTag = cms.untracked.int32(0), - storeSecondElectronInformation = cms.untracked.bool(True), - ) -# -# if you run on data then you have to do misalignment corrections first!!! -# not to be used with MC!! -#process.load("RecoEgamma.EgammaTools.correctedElectronsProducer_cfi") -#process.p = cms.Path( process.gsfElectrons + process.patDefaultSequence +process.wenuFilter + process.plotter) -process.p = cms.Path( process.ourJetSequence * process.patDefaultSequence +process.wenuFilter + process.plotter) - - diff --git a/ElectroWeakAnalysis/WMuNu/BuildFile.xml b/ElectroWeakAnalysis/WMuNu/BuildFile.xml deleted file mode 100644 index 20863737a5f3a..0000000000000 --- a/ElectroWeakAnalysis/WMuNu/BuildFile.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/ElectroWeakAnalysis/WMuNu/bin/BuildFile.xml b/ElectroWeakAnalysis/WMuNu/bin/BuildFile.xml deleted file mode 100644 index 62eea4f956d52..0000000000000 --- a/ElectroWeakAnalysis/WMuNu/bin/BuildFile.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/ElectroWeakAnalysis/WMuNu/bin/WMuNuValidatorMacro.cpp b/ElectroWeakAnalysis/WMuNu/bin/WMuNuValidatorMacro.cpp deleted file mode 100644 index e509ad30f740c..0000000000000 --- a/ElectroWeakAnalysis/WMuNu/bin/WMuNuValidatorMacro.cpp +++ /dev/null @@ -1,229 +0,0 @@ -#include "TROOT.h" -#include "TSystem.h" -#include "TStyle.h" -#include "TRint.h" -#include "TFile.h" -#include "TCanvas.h" -#include "TPaveLabel.h" -#include "TPad.h" -#include "TH1D.h" -#include "TLegend.h" - -int printUsage() { - printf("Usage: WMuNuValidatorMacro [-lbh] 'root_file_to_validate' 'reference_root_file' 'directory_name'\n\n"); - - printf("\tOptions:\t -l ==> linear scale for Y axes (default is log-scale)\n"); - printf("\t \t -b ==> run in batch (no graphics)\n"); - printf("\t \t -n ==> normalize reference to data (default = false)\n"); - printf("\t \t -h ==> print this message\n\n"); - - printf("\tInput files:\t Created via '*Validator.py' configuration files in:\n"); - printf("\t \t $CMSSW_BASE/src/ElectroWeakAnalysis/WMuNu/test/\n\n"); - - printf("\tOutput: \t Canvases: './WMuNuValidation_$CMSSW_VERSION_*.root'\n"); - printf("\t \t Gifs: './WMuNuValidation_$CMSSW_VERSION_*.gif'\n\n"); - - return 1; -} - -int main(int argc, char** argv) { - TString chfile; - TString chfileref; - TString DirectoryLast; - - int ntrueargs = 0; - bool logyFlag = true; - bool normalize = false; - - for (int i = 1; i < argc; ++i) { - if (argv[i][0] == '-') { - if (argv[i][1] == 'l') - logyFlag = false; - else if (argv[i][1] == 'b') - gROOT->SetBatch(); - else if (argv[i][1] == 'h') - return printUsage(); - else if (argv[i][1] == 'n') - normalize = true; - - } else { - ntrueargs += 1; - if (ntrueargs == 1) - chfile = argv[i]; - else if (ntrueargs == 2) - chfileref = argv[i]; - else if (ntrueargs == 3) - DirectoryLast = argv[i]; - } - } - - if (ntrueargs != 3) - return printUsage(); - - TRint* app = new TRint("CMS Root Application", nullptr, nullptr); - - TString cmssw_version = gSystem->Getenv("CMSSW_VERSION"); - TString chsample = "WMuNu"; - TString chtitle = chsample + " validation for " + cmssw_version; - - //TCanvas* c1 = new TCanvas("c1",chtitle.Data()); - TCanvas* c1 = new TCanvas("c1", chtitle.Data(), 0, 0, 1024, 768); - - TPaveLabel* paveTitle = new TPaveLabel(0.1, 0.93, 0.9, 0.99, chtitle.Data()); - paveTitle->Draw(); - - gStyle->SetOptLogy(logyFlag); - gStyle->SetPadGridX(true); - gStyle->SetPadGridY(true); - gStyle->SetOptStat(1111111); - gStyle->SetFillColor(0); - - TPad* pad[4]; - pad[0] = new TPad("pad_tl", "The top-left pad", 0.01, 0.48, 0.49, 0.92); - pad[1] = new TPad("pad_tr", "The top-right pad", 0.51, 0.48, 0.99, 0.92); - pad[2] = new TPad("pad_bl", "The bottom-left pad", 0.01, 0.01, 0.49, 0.46); - pad[3] = new TPad("pad_br", "The bottom-right pad", 0.51, 0.01, 0.99, 0.46); - for (unsigned int i = 0; i < 4; ++i) - pad[i]->Draw(); - - TLegend* leg = new TLegend(0.5, 0.9, 0.7, 1.0); - - TFile* input_file = new TFile(chfile.Data(), "READONLY"); - TFile* input_fileref = new TFile(chfileref.Data(), "READONLY"); - bool first_plots_done = false; - - TString directory = DirectoryLast + "/BeforeCuts"; - - TDirectory* dir_before = input_file->GetDirectory(directory); - TDirectory* dirref_before = input_fileref->GetDirectory(directory); - TList* list_before = dir_before->GetListOfKeys(); - list_before->Print(); - - unsigned int list_before_size = list_before->GetSize(); - TString auxTitle = chtitle + ": BEFORE CUTS"; - for (unsigned int i = 0; i < list_before_size; i += 4) { - if (first_plots_done == true) - c1->DrawClone(); - paveTitle->SetLabel(auxTitle.Data()); - for (unsigned int j = 0; j < 4; ++j) { - pad[j]->cd(); - pad[j]->Clear(); - if ((i + j) >= list_before_size) - continue; - - TH1D* h1 = (TH1D*)dir_before->Get(list_before->At(i + j)->GetName()); - // h1->SetLineColor(kBlue); - // h1->SetMarkerColor(kBlue); - h1->SetMarkerStyle(21); - h1->SetLineStyle(1); - h1->SetLineWidth(3); - h1->SetTitleSize(0.05, "X"); - h1->SetTitleSize(0.05, "Y"); - h1->SetXTitle(h1->GetTitle()); - h1->SetYTitle(""); - h1->SetTitle(""); - h1->SetTitleOffset(0.85, "X"); - - TH1D* hr = (TH1D*)dirref_before->Get(list_before->At(i + j)->GetName()); - hr->SetLineColor(kRed); - // hr->SetLineStyle(2); - hr->SetLineWidth(3); - hr->SetTitleSize(0.05, "X"); - hr->SetTitleSize(0.05, "Y"); - hr->SetXTitle(h1->GetTitle()); - hr->SetYTitle(""); - hr->SetTitle(""); - hr->SetTitleOffset(0.85, "X"); - - if (normalize) { - hr->DrawNormalized("hist", h1->Integral()); - } else { - hr->Draw("hist"); - } - h1->Draw("same,p"); - - leg->Clear(); - leg->AddEntry(h1, "Skim", "L"); - leg->AddEntry(hr, "Reference", "L"); - leg->Draw(); - } - first_plots_done = true; - c1->Modified(); - c1->Update(); - char chplot[80]; - sprintf(chplot, "%sValidation_%s_BEFORECUTS_%d.root", chsample.Data(), cmssw_version.Data(), i / 4); - c1->SaveAs(chplot); - sprintf(chplot, "%sValidation_%s_BEFORECUTS_%d.gif", chsample.Data(), cmssw_version.Data(), i / 4); - c1->SaveAs(chplot); - } - - TString directory2 = DirectoryLast + "/LastCut"; - - TDirectory* dir_lastcut = input_file->GetDirectory(directory2); - TDirectory* dirref_lastcut = input_fileref->GetDirectory(directory2); - TList* list_lastcut = dir_lastcut->GetListOfKeys(); - list_lastcut->Print(); - - unsigned int list_lastcut_size = list_lastcut->GetSize(); - auxTitle = chtitle + ": AFTER N-1 CUTS"; - for (unsigned int i = 0; i < list_lastcut_size; i += 4) { - if (first_plots_done == true) - c1->DrawClone(); - paveTitle->SetLabel(auxTitle.Data()); - for (unsigned int j = 0; j < 4; ++j) { - pad[j]->cd(); - pad[j]->Clear(); - if ((i + j) >= list_lastcut_size) - continue; - - TH1D* h1 = (TH1D*)dir_lastcut->Get(list_lastcut->At(i + j)->GetName()); - // h1->SetLineColor(kBlue); - // h1->SetMarkerColor(kBlue); - h1->SetMarkerStyle(21); - h1->SetLineWidth(3); - h1->SetTitleSize(0.05, "X"); - h1->SetTitleSize(0.05, "Y"); - h1->SetXTitle(h1->GetTitle()); - h1->SetYTitle(""); - h1->SetTitle(""); - h1->SetTitleOffset(0.85, "X"); - - TH1D* hr = (TH1D*)dirref_lastcut->Get(list_lastcut->At(i + j)->GetName()); - hr->SetLineColor(kRed); - // hr->SetLineStyle(2); - hr->SetLineWidth(3); - hr->SetTitleSize(0.05, "X"); - hr->SetTitleSize(0.05, "Y"); - hr->SetXTitle(h1->GetTitle()); - hr->SetYTitle(""); - hr->SetTitle(""); - hr->SetTitleOffset(0.85, "X"); - - // h1->Draw(); - if (normalize) { - hr->DrawNormalized("hist", h1->Integral()); - } else { - hr->Draw("hist"); - } - h1->Draw("same,p"); - - leg->Clear(); - leg->AddEntry(h1, "Skim", "L"); - leg->AddEntry(hr, "Reference", "L"); - leg->Draw(); - } - first_plots_done = true; - c1->Modified(); - c1->Update(); - char chplot[80]; - sprintf(chplot, "%sValidation_%s_LASTCUT_%d.root", chsample.Data(), cmssw_version.Data(), i / 4); - c1->SaveAs(chplot); - sprintf(chplot, "%sValidation_%s_LASTCUT_%d.gif", chsample.Data(), cmssw_version.Data(), i / 4); - c1->SaveAs(chplot); - } - - if (!gROOT->IsBatch()) - app->Run(); - - return 0; -} diff --git a/ElectroWeakAnalysis/WMuNu/python/WMuNuSelection_cff.py b/ElectroWeakAnalysis/WMuNu/python/WMuNuSelection_cff.py deleted file mode 100644 index fa31879af5d25..0000000000000 --- a/ElectroWeakAnalysis/WMuNu/python/WMuNuSelection_cff.py +++ /dev/null @@ -1,141 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from ElectroWeakAnalysis.WMuNu.wmunusProducer_cfi import * - -# Paths for WMuNuSelector filtering of events -# Be careful: events may contain more than one WMunuCandidate if they -# contain more than one muon. -# The "real" WMuNuCandidate selected is the first one of the collection - -selcorMet = cms.EDFilter("WMuNuSelector", - # Fill Basc Histograms? -> - plotHistograms = cms.untracked.bool(False), - - # Input collections -> - MuonTag = cms.untracked.InputTag("muons"), - TrigTag = cms.untracked.InputTag("TriggerResults::HLT8E29"), - #TrigTag = cms.untracked.InputTag("TriggerResults::HLT"), - JetTag = cms.untracked.InputTag("antikt5CaloJets"), - WMuNuCollectionTag = cms.untracked.InputTag("corMetWMuNus"), - - # Preselection! - MuonTrig = cms.untracked.string("HLT_Mu9"), - PtThrForZ1 = cms.untracked.double(20.0), - PtThrForZ2 = cms.untracked.double(10.0), - EJetMin = cms.untracked.double(40.), - NJetMax = cms.untracked.int32(999999), - - # Main cuts -> - PtCut = cms.untracked.double(25.0), - EtaCut = cms.untracked.double(2.1), - IsRelativeIso = cms.untracked.bool(True), - IsCombinedIso = cms.untracked.bool(False), - IsoCut03 = cms.untracked.double(0.1), - MtMin = cms.untracked.double(50.0), - MtMax = cms.untracked.double(200.0), - MetMin = cms.untracked.double(-999999.), - MetMax = cms.untracked.double(999999.), - AcopCut = cms.untracked.double(2.), - - # Muon quality cuts -> - DxyCut = cms.untracked.double(0.2), - NormalizedChi2Cut = cms.untracked.double(10.), - TrackerHitsCut = cms.untracked.int32(11), - IsAlsoTrackerMuon = cms.untracked.bool(True), - - # Select only W-, W+ ( default is all Ws) - SelectByCharge=cms.untracked.int32(0) - -) - -selpfMet = cms.EDFilter("WMuNuSelector", - # Fill Basc Histograms? -> - plotHistograms = cms.untracked.bool(False), - - # Input collections -> - MuonTag = cms.untracked.InputTag("muons"), - TrigTag = cms.untracked.InputTag("TriggerResults::HLT8E29"), - #TrigTag = cms.untracked.InputTag("TriggerResults::HLT"), - JetTag = cms.untracked.InputTag("antikt5CaloJets"), - WMuNuCollectionTag = cms.untracked.InputTag("pfMetWMuNus"), - - # Preselection! - MuonTrig = cms.untracked.string("HLT_Mu9"), - PtThrForZ1 = cms.untracked.double(20.0), - PtThrForZ2 = cms.untracked.double(10.0), - EJetMin = cms.untracked.double(40.), - NJetMax = cms.untracked.int32(999999), - - # Main cuts -> - UseTrackerPt = cms.untracked.bool(True), - PtCut = cms.untracked.double(25.0), - EtaCut = cms.untracked.double(2.1), - IsRelativeIso = cms.untracked.bool(True), - IsCombinedIso = cms.untracked.bool(False), - IsoCut03 = cms.untracked.double(0.1), - MtMin = cms.untracked.double(50.0), - MtMax = cms.untracked.double(200.0), - MetMin = cms.untracked.double(-999999.), - MetMax = cms.untracked.double(999999.), - AcopCut = cms.untracked.double(2.), - - # Muon quality cuts -> - DxyCut = cms.untracked.double(0.2), - NormalizedChi2Cut = cms.untracked.double(10.), - TrackerHitsCut = cms.untracked.int32(11), - IsAlsoTrackerMuon = cms.untracked.bool(True), - - # Select only W-, W+ ( default is all Ws) - SelectByCharge=cms.untracked.int32(0) - -) - -seltcMet = cms.EDFilter("WMuNuSelector", - # Fill Basc Histograms? -> - plotHistograms = cms.untracked.bool(False), - - # Input collections -> - MuonTag = cms.untracked.InputTag("muons"), - TrigTag = cms.untracked.InputTag("TriggerResults::HLT8E29"), - #TrigTag = cms.untracked.InputTag("TriggerResults::HLT"), - JetTag = cms.untracked.InputTag("antikt5CaloJets"), - WMuNuCollectionTag = cms.untracked.InputTag("tcMetWMuNus"), - - # Preselection! - MuonTrig = cms.untracked.string("HLT_Mu9"), - PtThrForZ1 = cms.untracked.double(20.0), - PtThrForZ2 = cms.untracked.double(10.0), - EJetMin = cms.untracked.double(40.), - NJetMax = cms.untracked.int32(999999), - - # Main cuts -> - UseTrackerPt = cms.untracked.bool(True), - PtCut = cms.untracked.double(25.0), - EtaCut = cms.untracked.double(2.1), - IsRelativeIso = cms.untracked.bool(True), - IsCombinedIso = cms.untracked.bool(False), - IsoCut03 = cms.untracked.double(0.1), - MtMin = cms.untracked.double(50.0), - MtMax = cms.untracked.double(200.0), - MetMin = cms.untracked.double(-999999.), - MetMax = cms.untracked.double(999999.), - AcopCut = cms.untracked.double(2.), - - # Muon quality cuts -> - DxyCut = cms.untracked.double(0.2), - NormalizedChi2Cut = cms.untracked.double(10.), - TrackerHitsCut = cms.untracked.int32(11), - IsAlsoTrackerMuon = cms.untracked.bool(True), - - # Select only W-, W+ ( default is all Ws) - SelectByCharge=cms.untracked.int32(0) - -) - -selectCaloMetWMuNus = cms.Sequence(corMetWMuNus+selcorMet) - -selectPfMetWMuNus = cms.Sequence(pfMetWMuNus+selpfMet) - -selectTcMetWMuNus = cms.Sequence(tcMetWMuNus+seltcMet) - - diff --git a/ElectroWeakAnalysis/WMuNu/python/wmunusProducer_cfi.py b/ElectroWeakAnalysis/WMuNu/python/wmunusProducer_cfi.py deleted file mode 100644 index 906b842d116cf..0000000000000 --- a/ElectroWeakAnalysis/WMuNu/python/wmunusProducer_cfi.py +++ /dev/null @@ -1,27 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Producers --> Create one collection of WMuNus per met type - -pfMetWMuNus = cms.EDProducer("WMuNuProducer", - # Input collections -> - MuonTag = cms.untracked.InputTag("muons"), - METTag = cms.untracked.InputTag("pfMet") -) - -tcMetWMuNus = cms.EDProducer("WMuNuProducer", - # Input collections -> - MuonTag = cms.untracked.InputTag("muons"), - METTag = cms.untracked.InputTag("tcMet") -) - -corMetWMuNus = cms.EDProducer("WMuNuProducer", - # Input collections -> - MuonTag = cms.untracked.InputTag("muons"), - METTag = cms.untracked.InputTag("caloMetM") -) - -allWMuNus = cms.Sequence(corMetWMuNus - *tcMetWMuNus - *pfMetWMuNus - ) - diff --git a/ElectroWeakAnalysis/WMuNu/src/WMuNuProducer.cc b/ElectroWeakAnalysis/WMuNu/src/WMuNuProducer.cc deleted file mode 100644 index 1141ab486e563..0000000000000 --- a/ElectroWeakAnalysis/WMuNu/src/WMuNuProducer.cc +++ /dev/null @@ -1,146 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// // -// WMuNuCandidate Producer // -// // -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// // -// Productor of WMuNuCandidates for Analysis // -// --> Creates a WMuNuCandidateCollection // -// --> One Candidate is created per muon in the event, combinig the information with a selected kind of Met // -// (met kind configurable via cfg) // -// --> All WMuNuCandidates are stored in the event, ordered by muon pt. // -// --> The WMuNuCandidate to be used for the Inclusive analysis is then the first one! (Highest Pt) // -// // -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "TH1D.h" -#include -// system include files -#include -#include - -#include "AnalysisDataFormats/EWK/interface/WMuNuCandidate.h" -#include "DataFormats/Common/interface/View.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "DataFormats/METReco/interface/MET.h" - -class WMuNuProducer : public edm::EDProducer { -public: - WMuNuProducer(const edm::ParameterSet&); - ~WMuNuProducer() override; - -private: - void produce(edm::Event&, const edm::EventSetup&) override; - void beginJob() override; - void endJob() override; - - edm::EDGetTokenT > muonToken_; - edm::EDGetTokenT > metToken_; - - struct ComparePt { - bool operator()(reco::WMuNuCandidate w1, reco::WMuNuCandidate w2) const { - double pt1 = w1.getMuon().pt(); - double pt2 = w2.getMuon().pt(); - return (pt1 > pt2); - } - }; - ComparePt ptComparator; - - unsigned int nall; -}; - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/Common/interface/Handle.h" - -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" - -#include "DataFormats/MuonReco/interface/MuonFwd.h" -#include "DataFormats/JetReco/interface/Jet.h" - -#include "DataFormats/GeometryVector/interface/Phi.h" - -#include "DataFormats/Common/interface/TriggerResults.h" - -#include "DataFormats/Common/interface/View.h" - -using namespace edm; -using namespace std; -using namespace reco; - -WMuNuProducer::WMuNuProducer(const ParameterSet& cfg) - : // Input collections - muonToken_(consumes >(cfg.getUntrackedParameter("MuonTag", edm::InputTag("muons")))), - metToken_(consumes >(cfg.getUntrackedParameter("METTag", edm::InputTag("met")))) { - produces(); -} - -void WMuNuProducer::beginJob() {} - -void WMuNuProducer::endJob() { LogTrace("") << "WMuNuCandidateCollection Stored in the Event"; } - -WMuNuProducer::~WMuNuProducer() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - -void WMuNuProducer::produce(Event& ev, const EventSetup&) { - // Muon collection - Handle > muonCollection; - if (!ev.getByToken(muonToken_, muonCollection)) { - LogError("") << ">>> Muon collection does not exist !!!"; - return; - } - int muonCollectionSize = muonCollection->size(); - - // MET - Handle > metCollection; - if (!ev.getByToken(metToken_, metCollection)) { - LogError("") << ">>> MET collection does not exist !!!"; - return; - } - //const MET& Met = metCollection->at(0); - edm::Ptr met(metCollection, 0); - - if (muonCollectionSize < 1) - return; - - unique_ptr WMuNuCandidates(new WMuNuCandidateCollection); - - // Fill Collection with n muons --> n W Candidates ordered by pt - - for (int indx = 0; indx < muonCollectionSize; indx++) { - edm::Ptr muon(muonCollection, indx); - if (!muon->isGlobalMuon()) - continue; - if (muon->globalTrack().isNull()) - continue; - if (muon->innerTrack().isNull()) - continue; - - // Build WMuNuCandidate - LogTrace("") << "Building WMuNu Candidate!"; - WMuNuCandidate* WCand = new WMuNuCandidate(muon, met); - LogTrace("") << "\t... W mass, W_et: " << WCand->massT() << ", " << WCand->eT() << "[GeV]"; - LogTrace("") << "\t... W_px, W_py: " << WCand->px() << ", " << WCand->py() << "[GeV]"; - LogTrace("") << "\t... acop: " << WCand->acop(); - LogTrace("") << "\t... Muon pt, px, py, pz: " << WCand->getMuon().pt() << ", " << WCand->getMuon().px() << ", " - << WCand->getMuon().py() << ", " << WCand->getMuon().pz() << " [GeV]"; - LogTrace("") << "\t... Met met_et, met_px, met_py : " << WCand->getNeutrino().pt() << ", " - << WCand->getNeutrino().px() << ", " << WCand->getNeutrino().py() << " [GeV]"; - WMuNuCandidates->push_back(*WCand); - } - - std::sort(WMuNuCandidates->begin(), WMuNuCandidates->end(), ptComparator); - - ev.put(std::move(WMuNuCandidates)); -} - -DEFINE_FWK_MODULE(WMuNuProducer); diff --git a/ElectroWeakAnalysis/WMuNu/src/WMuNuSelector.cc b/ElectroWeakAnalysis/WMuNu/src/WMuNuSelector.cc deleted file mode 100644 index f0b911d0e6695..0000000000000 --- a/ElectroWeakAnalysis/WMuNu/src/WMuNuSelector.cc +++ /dev/null @@ -1,491 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// // -// WMuNuSelector based on WMuNuCandidates // -// // -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// // -// Filter of WMuNuCandidates for Analysis // -// --> From a WMuNuCandidate collection // -// --> Pre-Selection of events based in event cuts (trigger, Z rejection, ttbar rejection) // -// --> The Ws are selected from the highest pt muon in the event (applying the standard WMuNu Selection cuts) // -// // -// --> Be careful: if this Selector is used as a filter for further analysis you still have to make sure that // -// the W Candidate you use for your modules is the first one in the collection!! // -// // -// Optionally, plots selection variables sequentially after cuts, // -// and 2D histograms for background determination. // -// // -// For basic plots before & after cuts (without Candidate formalism), use WMuNuValidator.cc // -// // -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -#include "FWCore/Framework/interface/EDFilter.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/TriggerResults.h" -#include "DataFormats/Common/interface/View.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "DataFormats/JetReco/interface/Jet.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" -#include "AnalysisDataFormats/EWK/interface/WMuNuCandidate.h" -#include "TH1D.h" -#include "TH2D.h" - -class WMuNuSelector : public edm::EDFilter { -public: - WMuNuSelector(const edm::ParameterSet&); - bool filter(edm::Event&, const edm::EventSetup&) override; - void beginJob() override; - void endJob() override; - void init_histograms(); - -private: - bool plotHistograms_; - edm::EDGetTokenT trigToken_; - edm::EDGetTokenT > muonToken_; - edm::EDGetTokenT > jetToken_; - edm::EDGetTokenT beamSpotToken_; - edm::EDGetTokenT WMuNuCollectionToken_; - const std::string muonTrig_; - double ptThrForZ1_; - double ptThrForZ2_; - double eJetMin_; - int nJetMax_; - double ptCut_; - double etaCut_; - bool isRelativeIso_; - bool isCombinedIso_; - double isoCut03_; - double mtMin_; - double mtMax_; - double metMin_; - double metMax_; - double acopCut_; - - double dxyCut_; - double normalizedChi2Cut_; - int trackerHitsCut_; - bool isAlsoTrackerMuon_; - - int selectByCharge_; - - double nall; - double ntrig, npresel; - double nsel; - double ncharge; - double nkin, nid, nacop, niso, nmass; - - std::map h1_; - std::map h2_; -}; -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/Common/interface/Handle.h" - -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "DataFormats/TrackReco/interface/Track.h" - -#include "DataFormats/MuonReco/interface/MuonSelectors.h" - -#include "DataFormats/METReco/interface/MET.h" - -#include "DataFormats/GeometryVector/interface/Phi.h" - -#include "FWCore/Common/interface/TriggerNames.h" - -using namespace edm; -using namespace std; -using namespace reco; - -WMuNuSelector::WMuNuSelector(const ParameterSet& cfg) - : // Fast selection (no histograms) - plotHistograms_(cfg.getUntrackedParameter("plotHistograms", true)), - - // Input collections - trigToken_(consumes( - cfg.getUntrackedParameter("TrigTag", edm::InputTag("TriggerResults::HLT")))), - muonToken_(consumes >(cfg.getUntrackedParameter("MuonTag", edm::InputTag("muons")))), - jetToken_( - consumes >(cfg.getUntrackedParameter("JetTag", edm::InputTag("sisCone5CaloJets")))), - beamSpotToken_(consumes(edm::InputTag("offlineBeamSpot"))), - WMuNuCollectionToken_(consumes( - cfg.getUntrackedParameter("WMuNuCollectionTag", edm::InputTag("WMuNus")))), - - // Preselection cuts - muonTrig_(cfg.getUntrackedParameter("MuonTrig", "HLT_Mu9")), - ptThrForZ1_(cfg.getUntrackedParameter("PtThrForZ1", 20.)), - ptThrForZ2_(cfg.getUntrackedParameter("PtThrForZ2", 10.)), - eJetMin_(cfg.getUntrackedParameter("EJetMin", 999999.)), - nJetMax_(cfg.getUntrackedParameter("NJetMax", 999999)), - - // Main cuts - ptCut_(cfg.getUntrackedParameter("PtCut", 25.)), - etaCut_(cfg.getUntrackedParameter("EtaCut", 2.1)), - isRelativeIso_(cfg.getUntrackedParameter("IsRelativeIso", true)), - isCombinedIso_(cfg.getUntrackedParameter("IsCombinedIso", false)), - isoCut03_(cfg.getUntrackedParameter("IsoCut03", 0.1)), - mtMin_(cfg.getUntrackedParameter("MtMin", 50.)), - mtMax_(cfg.getUntrackedParameter("MtMax", 200.)), - metMin_(cfg.getUntrackedParameter("MetMin", -999999.)), - metMax_(cfg.getUntrackedParameter("MetMax", 999999.)), - acopCut_(cfg.getUntrackedParameter("AcopCut", 2.)), - - // Muon quality cuts - dxyCut_(cfg.getUntrackedParameter("DxyCut", 0.2)), - normalizedChi2Cut_(cfg.getUntrackedParameter("NormalizedChi2Cut", 10.)), - trackerHitsCut_(cfg.getUntrackedParameter("TrackerHitsCut", 11)), - isAlsoTrackerMuon_(cfg.getUntrackedParameter("IsAlsoTrackerMuon", true)), - - // W+/W- Selection - selectByCharge_(cfg.getUntrackedParameter("SelectByCharge", 0)) {} - -void WMuNuSelector::beginJob() { - nall = 0; - ntrig = 0; - npresel = 0; - ncharge = 0; - nkin = 0; - nid = 0; - nacop = 0; - niso = 0; - nsel = 0; - - if (plotHistograms_) { - edm::Service fs; - h1_["hNWCand_sel"] = - fs->make("NWCand_sel", "Nb. of WCandidates passing pre-selection (ordered by pt)", 10, 0., 10.); - h1_["hPtMu_sel"] = fs->make("ptMu_sel", "Pt mu", 100, 0., 100.); - h1_["hEtaMu_sel"] = fs->make("etaMu_sel", "Eta mu", 50, -2.5, 2.5); - h1_["hd0_sel"] = fs->make("d0_sel", "Impact parameter", 1000, -1., 1.); - h1_["hNHits_sel"] = fs->make("NumberOfValidHits_sel", "Number of Hits in Silicon", 100, 0., 100.); - h1_["hNormChi2_sel"] = fs->make("NormChi2_sel", "Chi2/ndof of global track", 1000, 0., 50.); - h1_["hTracker_sel"] = fs->make("isTrackerMuon_sel", "is Tracker Muon?", 2, 0., 2.); - h1_["hMET_sel"] = fs->make("MET_sel", "Missing Transverse Energy (GeV)", 300, 0., 300.); - h1_["hTMass_sel"] = fs->make("TMass_sel", "Rec. Transverse Mass (GeV)", 300, 0., 300.); - h1_["hAcop_sel"] = fs->make("Acop_sel", "Mu-MET acoplanarity", 50, 0., M_PI); - h1_["hPtSum_sel"] = fs->make("ptSum_sel", "Track Isolation, Sum pT (GeV)", 200, 0., 100.); - h1_["hPtSumN_sel"] = fs->make("ptSumN_sel", "Track Isolation, Sum pT/pT", 1000, 0., 10.); - h1_["hCal_sel"] = fs->make("Cal_sel", "Calorimetric isolation, HCAL+ECAL (GeV)", 200, 0., 100.); - h1_["hIsoTotN_sel"] = fs->make("isoTotN_sel", "(Sum pT + Cal)/pT", 1000, 0., 10.); - h1_["hIsoTot_sel"] = fs->make("isoTot_sel", "(Sum pT + Cal)", 200, 0., 100.); - h2_["hTMass_PtSum_inclusive"] = fs->make( - "TMass_PtSum_inclusive", "Rec. Transverse Mass (GeV) vs Sum pT (GeV)", 200, 0., 100., 300, 0., 300.); - h2_["hTMass_PtSumNorm_inclusive"] = fs->make( - "TMass_PtSumNorm_inclusive", "Rec. Transverse Mass (GeV) vs Sum Pt / Pt", 1000, 0, 10, 300, 0, 300); - h2_["hTMass_TotIsoNorm_inclusive"] = fs->make( - "TMass_TotIsoNorm_inclusive", "Rec. Transverse Mass (GeV) vs (Sum Pt + Cal)/Pt", 10000, 0, 10, 200, 0, 200); - h2_["hMET_PtSum_inclusive"] = fs->make( - "MET_PtSum_inclusive", "Missing Transverse Energy (GeV) vs Sum Pt (GeV)", 200, 0., 100., 300, 0., 300.); - h2_["hMET_PtSumNorm_inclusive"] = fs->make( - "MET_PtSumNorm_inclusive", "Missing Transverse Energy (GeV) vs Sum Pt/Pt", 1000, 0, 10, 300, 0, 300); - h2_["hMET_TotIsoNorm_inclusive"] = fs->make( - "MET_TotIsoNorm_inclusive", "Missing Transverse Energy (GeV) vs (SumPt + Cal)/Pt", 10000, 0, 10, 200, 0, 200); - } -} - -void WMuNuSelector::endJob() { - double all = nall; - double epresel = npresel / all; - double etrig = ntrig / all; - double ekin = nkin / all; - double eid = nid / all; - double eacop = nacop / all; - double eiso = niso / all; - double esel = nsel / all; - - LogVerbatim("") << "\n>>>>>> W SELECTION SUMMARY BEGIN >>>>>>>>>>>>>>>"; - LogVerbatim("") << "Total number of events analyzed: " << nall << " [events]"; - LogVerbatim("") << "Total number of events triggered: " << ntrig << " [events]"; - LogVerbatim("") << "Total number of events pre-selected: " << npresel << " [events]"; - LogVerbatim("") << "Total number of events after kinematic cuts: " << nkin << " [events]"; - LogVerbatim("") << "Total number of events after Muon ID cuts: " << nid << " [events]"; - LogVerbatim("") << "Total number of events after Acop cut: " << nacop << " [events]"; - LogVerbatim("") << "Total number of events after iso cut: " << niso << " [events]"; - LogVerbatim("") << "Total number of events selected: " << nsel << " [events]"; - LogVerbatim("") << "Efficiencies:"; - LogVerbatim("") << "Trigger Efficiency: " - << "(" << setprecision(4) << etrig * 100. << " +/- " << setprecision(2) - << sqrt(etrig * (1 - etrig) / all) * 100. << ")%"; - LogVerbatim("") << "Pre-Selection Efficiency: " - << "(" << setprecision(4) << epresel * 100. << " +/- " << setprecision(2) - << sqrt(epresel * (1 - epresel) / all) * 100. << ")%"; - LogVerbatim("") << "Pt, Eta Selection Efficiency: " - << "(" << setprecision(4) << ekin * 100. << " +/- " << setprecision(2) - << sqrt(ekin * (1 - ekin) / all) * 100. << ")%"; - LogVerbatim("") << "MuonID Efficiency: " - << "(" << setprecision(4) << eid * 100. << " +/- " << setprecision(2) - << sqrt(eid * (1 - eid) / all) * 100. << ")%"; - LogVerbatim("") << "Acop Efficiency: " - << "(" << setprecision(4) << eacop * 100. << " +/- " << setprecision(2) - << sqrt(eacop * (1 - eacop) / all) * 100. << ")%"; - LogVerbatim("") << "Iso Efficiency: " - << "(" << setprecision(4) << eiso * 100. << " +/- " << setprecision(2) - << sqrt(eiso * (1 - eiso) / all) * 100. << ")%"; - LogVerbatim("") << "Selection Efficiency: " - << "(" << setprecision(4) << esel * 100. << " +/- " << setprecision(2) - << sqrt(esel * (1 - esel) / nall) * 100. << ")%"; - - if (fabs(selectByCharge_) == 1) { - esel = nsel / ncharge; - LogVerbatim("") << "\n>>>>>> W+(-) SELECTION >>>>>>>>>>>>>>>"; - LogVerbatim("") << "Total number of W+(-) events pre-selected: " << ncharge << " [events]"; - LogVerbatim("") << "Total number of events selected: " << nsel << " [events]"; - LogVerbatim("") << "Selection Efficiency only W+(-): " - << "(" << setprecision(4) << esel * 100. << " +/- " << setprecision(2) - << sqrt(esel * (1 - esel) / ncharge) * 100. << ")%"; - } - LogVerbatim("") << ">>>>>> W SELECTION SUMMARY END >>>>>>>>>>>>>>>\n"; -} - -bool WMuNuSelector::filter(Event& ev, const EventSetup&) { - nall++; - - // Repeat Pre-Selection Cuts just in case... - // Muon collection - Handle > muonCollection; - if (!ev.getByToken(muonToken_, muonCollection)) { - LogError("") << ">>> Muon collection does not exist !!!"; - return false; - } - unsigned int muonCollectionSize = muonCollection->size(); - - // Trigger - Handle triggerResults; - if (!ev.getByToken(trigToken_, triggerResults)) { - LogError("") << ">>> TRIGGER collection does not exist !!!"; - return false; - } - const edm::TriggerNames& triggerNames = ev.triggerNames(*triggerResults); - bool trigger_fired = false; - int itrig1 = triggerNames.triggerIndex(muonTrig_); - if (triggerResults->accept(itrig1)) - trigger_fired = true; - LogTrace("") << ">>> Trigger bit: " << trigger_fired << " (" << muonTrig_ << ")"; - - // Loop to reject/control Z->mumu is done separately - unsigned int nmuonsForZ1 = 0; - unsigned int nmuonsForZ2 = 0; - for (unsigned int i = 0; i < muonCollectionSize; i++) { - const Muon& mu = muonCollection->at(i); - if (!mu.isGlobalMuon()) - continue; - double pt = mu.pt(); - if (pt > ptThrForZ1_) - nmuonsForZ1++; - if (pt > ptThrForZ2_) - nmuonsForZ2++; - } - LogTrace("") << "> Z rejection: muons above " << ptThrForZ1_ << " [GeV]: " << nmuonsForZ1; - LogTrace("") << "> Z rejection: muons above " << ptThrForZ2_ << " [GeV]: " << nmuonsForZ2; - - // Jet collection - Handle > jetCollection; - if (!ev.getByToken(jetToken_, jetCollection)) { - LogError("") << ">>> JET collection does not exist !!!"; - return false; - } - unsigned int jetCollectionSize = jetCollection->size(); - int njets = 0; - for (unsigned int i = 0; i < jetCollectionSize; i++) { - const Jet& jet = jetCollection->at(i); - if (jet.et() > eJetMin_) - njets++; - } - LogTrace("") << ">>> Total number of jets: " << jetCollectionSize; - LogTrace("") << ">>> Number of jets above " << eJetMin_ << " [GeV]: " << njets; - - // Beam spot - Handle beamSpotHandle; - if (!ev.getByToken(beamSpotToken_, beamSpotHandle)) { - LogTrace("") << ">>> No beam spot found !!!"; - return false; - } - - // Get WMuNu candidates from file: - - Handle WMuNuCollection; - if (!ev.getByToken(WMuNuCollectionToken_, WMuNuCollection)) { - LogTrace("") << ">>> WMuNu not found !!!"; - return false; - } - - if (WMuNuCollection->empty()) { - LogTrace("") << "No WMuNu Candidates in the Event!"; - return false; - } - if (WMuNuCollection->size() > 1) { - LogTrace("") << "This event contains more than one W Candidate"; - } - - // W->mu nu selection criteria - - LogTrace("") << "> WMuNu Candidate with: "; - const WMuNuCandidate& WMuNu = WMuNuCollection->at(0); - // WMuNuCandidates are ordered by Pt! - // The Inclusive Selection WMuNu Candidate is the first one - - const reco::Muon& mu = WMuNu.getMuon(); - const reco::MET& met = WMuNu.getNeutrino(); - if (plotHistograms_) { - h1_["hNWCand_sel"]->Fill(WMuNuCollection->size()); - } - - // Preselection cuts: - - if (!trigger_fired) { - LogTrace("") << "Event did not fire the Trigger"; - return false; - } - ntrig++; - - if (nmuonsForZ1 >= 1 && nmuonsForZ2 >= 2) { - LogTrace("") << "Z Candidate!!"; - return false; - } - if (njets > nJetMax_) { - LogTrace("") << "NJets > threshold"; - return false; - } - - npresel++; - - // Select Ws by charge: - - if (selectByCharge_ * WMuNu.charge() == -1) { - ncharge++; - } - - // W->mu nu selection criteria - - if (!mu.isGlobalMuon()) - return false; - - reco::TrackRef gm = mu.globalTrack(); - //reco::TrackRef tk = mu.innerTrack(); - - // Pt,eta cuts - double pt = mu.pt(); - double eta = mu.eta(); - LogTrace("") << "\t... Muon pt, eta: " << pt << " [GeV], " << eta; - if (plotHistograms_) { - h1_["hPtMu_sel"]->Fill(pt); - } - if (pt < ptCut_) - return false; - if (plotHistograms_) { - h1_["hEtaMu_sel"]->Fill(eta); - } - if (fabs(eta) > etaCut_) - return false; - - nkin++; - - // d0, chi2, nhits quality cuts - double dxy = gm->dxy(beamSpotHandle->position()); - double normalizedChi2 = gm->normalizedChi2(); - LogTrace("") << "Im here" << endl; - double trackerHits = gm->hitPattern().numberOfValidTrackerHits(); - LogTrace("") << "\t... Muon dxy, normalizedChi2, trackerHits, isTrackerMuon?: " << dxy << " [cm], " << normalizedChi2 - << ", " << trackerHits << ", " << mu.isTrackerMuon(); - - if (plotHistograms_) { - h1_["hd0_sel"]->Fill(dxy); - } - if (!muon::isGoodMuon(mu, muon::GlobalMuonPromptTight)) - return false; - if (plotHistograms_) { - h1_["hNormChi2_sel"]->Fill(normalizedChi2); - } - if (normalizedChi2 > normalizedChi2Cut_) - return false; - if (plotHistograms_) { - h1_["hNHits_sel"]->Fill(trackerHits); - } - if (trackerHits < trackerHitsCut_) - return false; - if (plotHistograms_) { - h1_["hTracker_sel"]->Fill(mu.isTrackerMuon()); - } - if (!mu.isTrackerMuon()) - return false; - - nid++; - - // Acoplanarity cuts - double acop = WMuNu.acop(); - LogTrace("") << "\t... acoplanarity: " << acop; - - // Isolation cuts - double SumPt = mu.isolationR03().sumPt; - double isovar = SumPt; - double Cal = mu.isolationR03().emEt + mu.isolationR03().hadEt; - if (isCombinedIso_) - isovar += Cal; - if (plotHistograms_) { - h1_["hPtSum_sel"]->Fill(SumPt); - h1_["hPtSumN_sel"]->Fill(SumPt / pt); - h1_["hCal_sel"]->Fill(Cal); - h1_["hIsoTot_sel"]->Fill((SumPt + Cal)); - h1_["hIsoTotN_sel"]->Fill((SumPt + Cal) / pt); - } - - if (isRelativeIso_) - isovar /= pt; - bool iso = (isovar <= isoCut03_); - LogTrace("") << "\t... isolation value" << isovar << ", isolated? " << iso; - - double met_et = met.pt(); - LogTrace("") << "\t... Met pt: " << WMuNu.getNeutrino().pt() << "[GeV]"; - - double massT = WMuNu.massT(); - double w_et = WMuNu.eT(); - - LogTrace("") << "\t... W mass, W_et, W_px, W_py: " << massT << ", " << w_et << ", " << WMuNu.px() << ", " - << WMuNu.py() << " [GeV]"; - - // Plot 2D Histograms before final cuts - if (plotHistograms_ && acop < acopCut_) { - h2_["hTMass_PtSum_inclusive"]->Fill(SumPt, massT); - h2_["hTMass_PtSumNorm_inclusive"]->Fill(SumPt / pt, massT); - h2_["hTMass_TotIsoNorm_inclusive"]->Fill((SumPt + Cal) / pt, massT); - h2_["hMET_PtSum_inclusive"]->Fill(SumPt, met_et); - h2_["hMET_PtSumNorm_inclusive"]->Fill(SumPt / pt, met_et); - h2_["hMET_TotIsoNorm_inclusive"]->Fill((SumPt + Cal) / pt, met_et); - } - - if (!iso) - return false; - - niso++; - - if (plotHistograms_) { - h1_["hAcop_sel"]->Fill(acop); - } - if (acop >= acopCut_) - return false; - - nacop++; - - if (plotHistograms_) { - h1_["hMET_sel"]->Fill(met_et); - h1_["hTMass_sel"]->Fill(massT); - } - - if (massT <= mtMin_ || massT >= mtMax_) - return false; - if (met_et <= metMin_ || met_et >= metMax_) - return false; - - LogTrace("") << ">>>> Event ACCEPTED"; - nsel++; - - // (To be continued ;-) ) - - return true; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(WMuNuSelector); diff --git a/ElectroWeakAnalysis/WMuNu/src/WMuNuValidator.cc b/ElectroWeakAnalysis/WMuNu/src/WMuNuValidator.cc deleted file mode 100644 index b523e13bdabb1..0000000000000 --- a/ElectroWeakAnalysis/WMuNu/src/WMuNuValidator.cc +++ /dev/null @@ -1,695 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// // -// WMuNuValidator // -// // -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// // -// Basic plots before & after cuts (without Candidate formalism) // -// Intended for a prompt validation of samples. // -// // -// Use in combination with WMuNuValidatorMacro (in bin/WMuNuValidatorMacro.cpp) // -// // -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -#include "FWCore/Framework/interface/EDFilter.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/TriggerResults.h" -#include "DataFormats/Common/interface/View.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "DataFormats/METReco/interface/MET.h" -#include "DataFormats/JetReco/interface/Jet.h" -#include "TH1D.h" -#include - -class WMuNuValidator : public edm::EDFilter { -public: - WMuNuValidator(const edm::ParameterSet&); - bool filter(edm::Event&, const edm::EventSetup&) override; - void beginJob() override; - void endJob() override; - void init_histograms(); - void fill_histogram(const char*, const double&); - -private: - bool fastOption_; - edm::EDGetTokenT trigToken_; - edm::EDGetTokenT > muonToken_; - edm::InputTag metTag_; - edm::EDGetTokenT > metToken_; - bool metIncludesMuons_; - edm::InputTag jetTag_; - edm::EDGetTokenT > jetToken_; - edm::EDGetTokenT beamSpotToken_; - const std::string muonTrig_; - double ptCut_; - double etaCut_; - bool isRelativeIso_; - bool isCombinedIso_; - double isoCut03_; - double mtMin_; - double mtMax_; - double metMin_; - double metMax_; - double acopCut_; - - double dxyCut_; - double normalizedChi2Cut_; - int trackerHitsCut_; - bool isAlsoTrackerMuon_; - - double ptThrForZ1_; - double ptThrForZ2_; - - double eJetMin_; - int nJetMax_; - - unsigned int nall; - unsigned int nrec; - unsigned int niso; - unsigned int nhlt; - unsigned int nmet; - unsigned int nsel; - - std::map h1_; -}; - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/Common/interface/Handle.h" - -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" - -#include "DataFormats/MuonReco/interface/MuonSelectors.h" - -#include "DataFormats/GeometryVector/interface/Phi.h" - -#include "FWCore/Common/interface/TriggerNames.h" - -using namespace edm; -using namespace std; -using namespace reco; - -WMuNuValidator::WMuNuValidator(const ParameterSet& cfg) - : // Fast selection (no histograms or book-keeping) - fastOption_(cfg.getUntrackedParameter("FastOption", false)), - - // Input collections - trigToken_(consumes( - cfg.getUntrackedParameter("TrigTag", edm::InputTag("TriggerResults::HLT")))), - muonToken_(consumes >(cfg.getUntrackedParameter("MuonTag", edm::InputTag("muons")))), - metTag_(cfg.getUntrackedParameter("METTag", edm::InputTag("met"))), - metToken_(consumes >(metTag_)), - metIncludesMuons_(cfg.getUntrackedParameter("METIncludesMuons", false)), - jetTag_(cfg.getUntrackedParameter("JetTag", edm::InputTag("sisCone5CaloJets"))), - jetToken_(consumes >(jetTag_)), - beamSpotToken_(consumes(edm::InputTag("offlineBeamSpot"))), - - // Main cuts - muonTrig_(cfg.getUntrackedParameter("MuonTrig", "HLT_Mu9")), - ptCut_(cfg.getUntrackedParameter("PtCut", 25.)), - etaCut_(cfg.getUntrackedParameter("EtaCut", 2.1)), - isRelativeIso_(cfg.getUntrackedParameter("IsRelativeIso", true)), - isCombinedIso_(cfg.getUntrackedParameter("IsCombinedIso", false)), - isoCut03_(cfg.getUntrackedParameter("IsoCut03", 0.1)), - mtMin_(cfg.getUntrackedParameter("MtMin", 50.)), - mtMax_(cfg.getUntrackedParameter("MtMax", 200.)), - metMin_(cfg.getUntrackedParameter("MetMin", -999999.)), - metMax_(cfg.getUntrackedParameter("MetMax", 999999.)), - acopCut_(cfg.getUntrackedParameter("AcopCut", 2.)), - - // Muon quality cuts - dxyCut_(cfg.getUntrackedParameter("DxyCut", 0.2)), - normalizedChi2Cut_(cfg.getUntrackedParameter("NormalizedChi2Cut", 10.)), - trackerHitsCut_(cfg.getUntrackedParameter("TrackerHitsCut", 11)), - isAlsoTrackerMuon_(cfg.getUntrackedParameter("IsAlsoTrackerMuon", true)), - - // Z rejection - ptThrForZ1_(cfg.getUntrackedParameter("PtThrForZ1", 20.)), - ptThrForZ2_(cfg.getUntrackedParameter("PtThrForZ2", 10.)), - - // Top rejection - eJetMin_(cfg.getUntrackedParameter("EJetMin", 999999.)), - nJetMax_(cfg.getUntrackedParameter("NJetMax", 999999)) {} - -void WMuNuValidator::beginJob() { - nall = 0; - nsel = 0; - - if (!fastOption_) { - nrec = 0; - niso = 0; - nhlt = 0; - nmet = 0; - init_histograms(); - } -} - -void WMuNuValidator::init_histograms() { - edm::Service fs; - TFileDirectory subDir0 = fs->mkdir("BeforeCuts"); - TFileDirectory subDir1 = fs->mkdir("LastCut"); - TFileDirectory* subDir[2]; - subDir[0] = &subDir0; - subDir[1] = &subDir1; - - char chname[256] = ""; - char chtitle[256] = ""; - std::string chsuffix[2] = {"_BEFORECUTS", "_LASTCUT"}; - - for (int i = 0; i < 2; ++i) { - snprintf(chname, 255, "PT%s", chsuffix[i].data()); - snprintf(chtitle, 255, "Muon transverse momentum [GeV]"); - h1_[chname] = subDir[i]->make(chname, chtitle, 100, 0., 100.); - - snprintf(chname, 255, "ETA%s", chsuffix[i].data()); - snprintf(chtitle, 255, "Muon pseudo-rapidity"); - h1_[chname] = subDir[i]->make(chname, chtitle, 50, -2.5, 2.5); - - snprintf(chname, 255, "DXY%s", chsuffix[i].data()); - snprintf(chtitle, 255, "Muon transverse distance to beam spot [cm]"); - h1_[chname] = subDir[i]->make(chname, chtitle, 100, -0.5, 0.5); - - snprintf(chname, 255, "CHI2%s", chsuffix[i].data()); - snprintf(chtitle, 255, "Normalized Chi2, inner track fit"); - h1_[chname] = subDir[i]->make(chname, chtitle, 100, 0., 100.); - - snprintf(chname, 255, "NHITS%s", chsuffix[i].data()); - snprintf(chtitle, 255, "Number of hits, inner track"); - h1_[chname] = subDir[i]->make(chname, chtitle, 40, -0.5, 39.5); - - snprintf(chname, 255, "ValidMuonHits%s", chsuffix[i].data()); - snprintf(chtitle, 255, "number Of Valid Muon Hits"); - h1_[chname] = subDir[i]->make(chname, chtitle, 40, -0.5, 39.5); - - snprintf(chname, 255, "TKMU%s", chsuffix[i].data()); - snprintf(chtitle, 255, "Tracker-muon flag (for global muons)"); - h1_[chname] = subDir[i]->make(chname, chtitle, 2, -0.5, 1.5); - - snprintf(chname, 255, "ISO%s", chsuffix[i].data()); - if (isRelativeIso_) { - if (isCombinedIso_) { - snprintf(chtitle, 255, "Relative (combined) isolation variable"); - } else { - snprintf(chtitle, 255, "Relative (tracker) isolation variable"); - } - h1_[chname] = subDir[i]->make(chname, chtitle, 100, 0., 1.); - } else { - if (isCombinedIso_) { - snprintf(chtitle, 255, "Absolute (combined) isolation variable [GeV]"); - } else { - snprintf(chtitle, 255, "Absolute (tracker) isolation variable [GeV]"); - } - h1_[chname] = subDir[i]->make(chname, chtitle, 100, 0., 20.); - } - - snprintf(chname, 255, "TRIG%s", chsuffix[i].data()); - snprintf(chtitle, 255, "Trigger response (bit %s)", muonTrig_.data()); - h1_[chname] = subDir[i]->make(chname, chtitle, 2, -0.5, 1.5); - - snprintf(chname, 255, "MT%s", chsuffix[i].data()); - snprintf(chtitle, 255, "Transverse mass (%s) [GeV]", metTag_.label().data()); - h1_[chname] = subDir[i]->make(chname, chtitle, 150, 0., 300.); - - snprintf(chname, 255, "MET%s", chsuffix[i].data()); - snprintf(chtitle, 255, "Missing transverse energy (%s) [GeV]", metTag_.label().data()); - h1_[chname] = subDir[i]->make(chname, chtitle, 100, 0., 200.); - - snprintf(chname, 255, "ACOP%s", chsuffix[i].data()); - snprintf(chtitle, 255, "MU-MET (%s) acoplanarity", metTag_.label().data()); - h1_[chname] = subDir[i]->make(chname, chtitle, 50, 0., M_PI); - - snprintf(chname, 255, "NZ1%s", chsuffix[i].data()); - snprintf(chtitle, 255, "Z rejection: number of muons above %.2f GeV", ptThrForZ1_); - h1_[chname] = subDir[i]->make(chname, chtitle, 10, -0.5, 9.5); - - snprintf(chname, 255, "NZ2%s", chsuffix[i].data()); - snprintf(chtitle, 255, "Z rejection: number of muons above %.2f GeV", ptThrForZ2_); - h1_[chname] = subDir[i]->make(chname, chtitle, 10, -0.5, 9.5); - - snprintf(chname, 255, "NJETS%s", chsuffix[i].data()); - snprintf(chtitle, 255, "Number of jets (%s) above %.2f GeV", jetTag_.label().data(), eJetMin_); - h1_[chname] = subDir[i]->make(chname, chtitle, 10, -0.5, 9.5); - } -} - -void WMuNuValidator::fill_histogram(const char* name, const double& var) { - if (fastOption_) - return; - h1_[name]->Fill(var); -} - -void WMuNuValidator::endJob() { - double all = nall; - double esel = nsel / all; - LogVerbatim("") << "\n>>>>>> W SELECTION SUMMARY BEGIN >>>>>>>>>>>>>>>"; - LogVerbatim("") << "Total numer of events analyzed: " << nall << " [events]"; - LogVerbatim("") << "Total numer of events selected: " << nsel << " [events]"; - LogVerbatim("") << "Overall efficiency: " - << "(" << setprecision(4) << esel * 100. << " +/- " << setprecision(2) - << sqrt(esel * (1 - esel) / all) * 100. << ")%"; - - if (!fastOption_) { - double erec = nrec / all; - double eiso = niso / all; - double ehlt = nhlt / all; - double emet = nmet / all; - - double num = nrec; - double eff = erec; - double err = sqrt(eff * (1 - eff) / all); - LogVerbatim("") << "Passing Pt/Eta/Quality cuts: " << num << " [events], (" << setprecision(4) << eff * 100. - << " +/- " << setprecision(2) << err * 100. << ")%"; - - num = niso; - eff = eiso; - err = sqrt(eff * (1 - eff) / all); - double effstep = 0.; - double errstep = 0.; - if (nrec > 0) - effstep = eiso / erec; - if (nrec > 0) - errstep = sqrt(effstep * (1 - effstep) / nrec); - LogVerbatim("") << "Passing isolation cuts: " << num << " [events], (" << setprecision(4) << eff * 100. - << " +/- " << setprecision(2) << err * 100. << ")%, to previous step: (" << setprecision(4) - << effstep * 100. << " +/- " << setprecision(2) << errstep * 100. << ")%"; - - num = nhlt; - eff = ehlt; - err = sqrt(eff * (1 - eff) / all); - effstep = 0.; - errstep = 0.; - if (niso > 0) - effstep = ehlt / eiso; - if (niso > 0) - errstep = sqrt(effstep * (1 - effstep) / niso); - LogVerbatim("") << "Passing HLT criteria: " << num << " [events], (" << setprecision(4) << eff * 100. - << " +/- " << setprecision(2) << err * 100. << ")%, to previous step: (" << setprecision(4) - << effstep * 100. << " +/- " << setprecision(2) << errstep * 100. << ")%"; - - num = nmet; - eff = emet; - err = sqrt(eff * (1 - eff) / all); - effstep = 0.; - errstep = 0.; - if (nhlt > 0) - effstep = emet / ehlt; - if (nhlt > 0) - errstep = sqrt(effstep * (1 - effstep) / nhlt); - LogVerbatim("") << "Passing MET/acoplanarity cuts: " << num << " [events], (" << setprecision(4) << eff * 100. - << " +/- " << setprecision(2) << err * 100. << ")%, to previous step: (" << setprecision(4) - << effstep * 100. << " +/- " << setprecision(2) << errstep * 100. << ")%"; - - num = nsel; - eff = esel; - err = sqrt(eff * (1 - eff) / all); - effstep = 0.; - errstep = 0.; - if (nmet > 0) - effstep = esel / emet; - if (nmet > 0) - errstep = sqrt(effstep * (1 - effstep) / nmet); - LogVerbatim("") << "Passing Z/top rejection cuts: " << num << " [events], (" << setprecision(4) << eff * 100. - << " +/- " << setprecision(2) << err * 100. << ")%, to previous step: (" << setprecision(4) - << effstep * 100. << " +/- " << setprecision(2) << errstep * 100. << ")%"; - } - - LogVerbatim("") << ">>>>>> W SELECTION SUMMARY END >>>>>>>>>>>>>>>\n"; -} - -bool WMuNuValidator::filter(Event& ev, const EventSetup&) { - // Reset global event selection flags - bool rec_sel = false; - bool iso_sel = false; - bool hlt_sel = false; - bool met_sel = false; - bool all_sel = false; - - // Muon collection - Handle > muonCollection; - if (!ev.getByToken(muonToken_, muonCollection)) { - LogError("") << ">>> Muon collection does not exist !!!"; - return false; - } - unsigned int muonCollectionSize = muonCollection->size(); - - // Beam spot - Handle beamSpotHandle; - if (!ev.getByToken(beamSpotToken_, beamSpotHandle)) { - LogTrace("") << ">>> No beam spot found !!!"; - return false; - } - - // MET - double met_px = 0.; - double met_py = 0.; - Handle > metCollection; - if (!ev.getByToken(metToken_, metCollection)) { - LogError("") << ">>> MET collection does not exist !!!"; - return false; - } - const MET& met = metCollection->at(0); - met_px = met.px(); - met_py = met.py(); - if (!metIncludesMuons_) { - for (unsigned int i = 0; i < muonCollectionSize; i++) { - const Muon& mu = muonCollection->at(i); - if (!mu.isGlobalMuon()) - continue; - met_px -= mu.px(); - met_py -= mu.py(); - } - } - double met_et = sqrt(met_px * met_px + met_py * met_py); - LogTrace("") << ">>> MET, MET_px, MET_py: " << met_et << ", " << met_px << ", " << met_py << " [GeV]"; - fill_histogram("MET_BEFORECUTS", met_et); - - // Trigger - Handle triggerResults; - if (!ev.getByToken(trigToken_, triggerResults)) { - LogError("") << ">>> TRIGGER collection does not exist !!!"; - return false; - } - const edm::TriggerNames& triggerNames = ev.triggerNames(*triggerResults); - /* - for (unsigned int i=0; isize(); i++) { - if (triggerResults->accept(i)) { - LogTrace("") << "Accept by: " << i << ", Trigger: " << triggerNames.triggerName(i); - } - } - */ - bool trigger_fired = false; - int itrig1 = triggerNames.triggerIndex(muonTrig_); - if (triggerResults->accept(itrig1)) - trigger_fired = true; - LogTrace("") << ">>> Trigger bit: " << trigger_fired << " (" << muonTrig_ << ")"; - fill_histogram("TRIG_BEFORECUTS", trigger_fired); - - // Loop to reject/control Z->mumu is done separately - unsigned int nmuonsForZ1 = 0; - unsigned int nmuonsForZ2 = 0; - for (unsigned int i = 0; i < muonCollectionSize; i++) { - const Muon& mu = muonCollection->at(i); - if (!mu.isGlobalMuon()) - continue; - double pt = mu.pt(); - if (pt > ptThrForZ1_) - nmuonsForZ1++; - if (pt > ptThrForZ2_) - nmuonsForZ2++; - } - LogTrace("") << "> Z rejection: muons above " << ptThrForZ1_ << " [GeV]: " << nmuonsForZ1; - LogTrace("") << "> Z rejection: muons above " << ptThrForZ2_ << " [GeV]: " << nmuonsForZ2; - fill_histogram("NZ1_BEFORECUTS", nmuonsForZ1); - fill_histogram("NZ2_BEFORECUTS", nmuonsForZ2); - - // Jet collection - Handle > jetCollection; - if (!ev.getByToken(jetToken_, jetCollection)) { - LogError("") << ">>> JET collection does not exist !!!"; - return false; - } - unsigned int jetCollectionSize = jetCollection->size(); - int njets = 0; - for (unsigned int i = 0; i < jetCollectionSize; i++) { - const Jet& jet = jetCollection->at(i); - if (jet.et() > eJetMin_) - njets++; - } - LogTrace("") << ">>> Total number of jets: " << jetCollectionSize; - LogTrace("") << ">>> Number of jets above " << eJetMin_ << " [GeV]: " << njets; - fill_histogram("NJETS_BEFORECUTS", njets); - - // Start counting, reject already events if possible (under FastOption flag) - nall++; - if (fastOption_ && !trigger_fired) - return false; - if (fastOption_ && nmuonsForZ1 >= 1 && nmuonsForZ2 >= 2) - return false; - if (fastOption_ && njets > nJetMax_) - return false; - - // Histograms per event shouldbe done only once, so keep track of them - bool hlt_hist_done = false; - bool met_hist_done = false; - bool nz1_hist_done = false; - bool nz2_hist_done = false; - bool njets_hist_done = false; - - // Central W->mu nu selection criteria - const int NFLAGS = 13; - bool muon_sel[NFLAGS]; - for (unsigned int i = 0; i < muonCollectionSize; i++) { - for (int j = 0; j < NFLAGS; ++j) { - muon_sel[j] = false; - } - - const Muon& mu = muonCollection->at(i); - if (!mu.isGlobalMuon()) - continue; - if (mu.globalTrack().isNull()) - continue; - if (mu.innerTrack().isNull()) - continue; - - LogTrace("") << "> Wsel: processing muon number " << i << "..."; - reco::TrackRef gm = mu.globalTrack(); - //reco::TrackRef tk = mu.innerTrack(); - - // Pt,eta cuts - double pt = mu.pt(); - double eta = mu.eta(); - LogTrace("") << "\t... pt, eta: " << pt << " [GeV], " << eta; - ; - if (pt > ptCut_) - muon_sel[0] = true; - else if (fastOption_) - continue; - if (fabs(eta) < etaCut_) - muon_sel[1] = true; - else if (fastOption_) - continue; - - // d0, chi2, nhits quality cuts - double dxy = gm->dxy(beamSpotHandle->position()); - double normalizedChi2 = gm->normalizedChi2(); - double validmuonhits = gm->hitPattern().numberOfValidMuonHits(); - //double standalonehits=mu.outerTrack()->numberOfValidHits(); - double trackerHits = gm->hitPattern().numberOfValidTrackerHits(); - LogTrace("") << "\t... dxy, normalizedChi2, trackerHits, isTrackerMuon?: " << dxy << " [cm], " << normalizedChi2 - << ", " << trackerHits << ", " << mu.isTrackerMuon(); - if (fabs(dxy) < dxyCut_) - muon_sel[2] = true; - else if (fastOption_) - continue; - if (muon::isGoodMuon(mu, muon::GlobalMuonPromptTight)) - muon_sel[3] = true; - else if (fastOption_) - continue; - if (trackerHits >= trackerHitsCut_) - muon_sel[4] = true; - else if (fastOption_) - continue; - if (mu.isTrackerMuon()) - muon_sel[5] = true; - else if (fastOption_) - continue; - - fill_histogram("PT_BEFORECUTS", pt); - fill_histogram("ETA_BEFORECUTS", eta); - fill_histogram("DXY_BEFORECUTS", dxy); - fill_histogram("CHI2_BEFORECUTS", normalizedChi2); - fill_histogram("NHITS_BEFORECUTS", trackerHits); - fill_histogram("ValidMuonHits_BEFORECUTS", validmuonhits); - fill_histogram("TKMU_BEFORECUTS", mu.isTrackerMuon()); - - // Isolation cuts - double isovar = mu.isolationR03().sumPt; - if (isCombinedIso_) { - isovar += mu.isolationR03().emEt; - isovar += mu.isolationR03().hadEt; - } - if (isRelativeIso_) - isovar /= pt; - if (isovar < isoCut03_) - muon_sel[6] = true; - else if (fastOption_) - continue; - LogTrace("") << "\t... isolation value" << isovar << ", isolated? " << muon_sel[6]; - fill_histogram("ISO_BEFORECUTS", isovar); - - // HLT (not mtched to muon for the time being) - if (trigger_fired) - muon_sel[7] = true; - else if (fastOption_) - continue; - - // MET/MT cuts - double w_et = met_et + mu.pt(); - double w_px = met_px + mu.px(); - double w_py = met_py + mu.py(); - double massT = w_et * w_et - w_px * w_px - w_py * w_py; - massT = (massT > 0) ? sqrt(massT) : 0; - - LogTrace("") << "\t... W mass, W_et, W_px, W_py: " << massT << ", " << w_et << ", " << w_px << ", " << w_py - << " [GeV]"; - if (massT > mtMin_ && massT < mtMax_) - muon_sel[8] = true; - else if (fastOption_) - continue; - fill_histogram("MT_BEFORECUTS", massT); - if (met_et > metMin_ && met_et < metMax_) - muon_sel[9] = true; - else if (fastOption_) - continue; - - // Acoplanarity cuts - Geom::Phi deltaphi(mu.phi() - atan2(met_py, met_px)); - double acop = deltaphi.value(); - if (acop < 0) - acop = -acop; - acop = M_PI - acop; - LogTrace("") << "\t... acoplanarity: " << acop; - if (acop < acopCut_) - muon_sel[10] = true; - else if (fastOption_) - continue; - fill_histogram("ACOP_BEFORECUTS", acop); - - // Remaining flags (from global event information) - if (nmuonsForZ1 < 1 || nmuonsForZ2 < 2) - muon_sel[11] = true; - else if (fastOption_) - continue; - if (njets <= nJetMax_) - muon_sel[12] = true; - else if (fastOption_) - continue; - - if (fastOption_) { - all_sel = true; - break; - } else { - // Collect necessary flags "per muon" - int flags_passed = 0; - bool rec_sel_this = true; - bool iso_sel_this = true; - bool hlt_sel_this = true; - bool met_sel_this = true; - bool all_sel_this = true; - for (int j = 0; j < NFLAGS; ++j) { - if (muon_sel[j]) - flags_passed += 1; - if (j < 6 && !muon_sel[j]) - rec_sel_this = false; - if (j < 7 && !muon_sel[j]) - iso_sel_this = false; - if (j < 8 && !muon_sel[j]) - hlt_sel_this = false; - if (j < 11 && !muon_sel[j]) - met_sel_this = false; - if (!muon_sel[j]) - all_sel_this = false; - } - - // "rec" => pt,eta and quality cuts are satisfied - if (rec_sel_this) - rec_sel = true; - // "iso" => "rec" AND "muon is isolated" - if (iso_sel_this) - iso_sel = true; - // "hlt" => "iso" AND "event is triggered" - if (hlt_sel_this) - hlt_sel = true; - // "met" => "hlt" AND "MET/MT and acoplanarity cuts" - if (met_sel_this) - met_sel = true; - // "all" => "met" AND "Z/top rejection cuts" - if (all_sel_this) - all_sel = true; - - // Do N-1 histograms now (and only once for global event quantities) - if (flags_passed >= (NFLAGS - 1)) { - if (!muon_sel[0] || flags_passed == NFLAGS) - fill_histogram("PT_LASTCUT", pt); - if (!muon_sel[1] || flags_passed == NFLAGS) - fill_histogram("ETA_LASTCUT", eta); - if (!muon_sel[2] || flags_passed == NFLAGS) - fill_histogram("DXY_LASTCUT", dxy); - if (!muon_sel[3] || flags_passed == NFLAGS) { - fill_histogram("CHI2_LASTCUT", normalizedChi2); - fill_histogram("ValidMuonHits_LASTCUT", validmuonhits); - } - if (!muon_sel[4] || flags_passed == NFLAGS) - fill_histogram("NHITS_LASTCUT", trackerHits); - if (!muon_sel[5] || flags_passed == NFLAGS) - fill_histogram("TKMU_LASTCUT", mu.isTrackerMuon()); - if (!muon_sel[6] || flags_passed == NFLAGS) - fill_histogram("ISO_LASTCUT", isovar); - if (!muon_sel[7] || flags_passed == NFLAGS) { - if (!hlt_hist_done) { - fill_histogram("TRIG_LASTCUT", trigger_fired); - hlt_hist_done = true; - } - } - if (!muon_sel[8] || flags_passed == NFLAGS) - fill_histogram("MT_LASTCUT", massT); - if (!muon_sel[9] || flags_passed == NFLAGS) { - if (!met_hist_done) { - fill_histogram("MET_LASTCUT", met_et); - met_hist_done = true; - } - } - if (!muon_sel[10] || flags_passed == NFLAGS) - fill_histogram("ACOP_LASTCUT", acop); - if (!muon_sel[11] || flags_passed == NFLAGS) { - if (!nz1_hist_done) { - fill_histogram("NZ1_LASTCUT", nmuonsForZ1); - nz1_hist_done = true; - } - } - if (!muon_sel[11] || flags_passed == NFLAGS) { - if (!nz2_hist_done) { - fill_histogram("NZ2_LASTCUT", nmuonsForZ2); - nz2_hist_done = true; - } - } - if (!muon_sel[12] || flags_passed == NFLAGS) { - if (!njets_hist_done) { - fill_histogram("NJETS_LASTCUT", njets); - njets_hist_done = true; - } - } - } - } - } - - // Collect final flags - if (!fastOption_) { - if (rec_sel) - nrec++; - if (iso_sel) - niso++; - if (hlt_sel) - nhlt++; - if (met_sel) - nmet++; - } - - if (all_sel) { - nsel++; - LogTrace("") << ">>>> Event ACCEPTED"; - } else { - LogTrace("") << ">>>> Event REJECTED"; - } - - return all_sel; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(WMuNuValidator); diff --git a/ElectroWeakAnalysis/WMuNu/test/PAT_create.py b/ElectroWeakAnalysis/WMuNu/test/PAT_create.py deleted file mode 100755 index b4999da5a93dd..0000000000000 --- a/ElectroWeakAnalysis/WMuNu/test/PAT_create.py +++ /dev/null @@ -1,50 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process, how many events, inout files, ... -process = cms.Process("ewkPAT") -process.maxEvents = cms.untracked.PSet( - #input = cms.untracked.int32(-1) - input = cms.untracked.int32(100) -) -process.source = cms.Source("PoolSource", - debugVerbosity = cms.untracked.uint32(0), - debugFlag = cms.untracked.bool(False), - #fileNames = cms.untracked.vstring("file:/data4/RelValWM_CMSSW_3_1_0-STARTUP31X_V1-v1_GEN-SIM-RECO/40BFAA1A-5466-DE11-B792-001D09F29533.root") - fileNames = cms.untracked.vstring("file:/data4/Wmunu-Summer09-MC_31X_V2_preproduction_311-v1/0011/F4C91F77-766D-DE11-981F-00163E1124E7.root") -) - -# Debug/info printouts -process.MessageLogger = cms.Service("MessageLogger", - cout = cms.untracked.PSet( - default = cms.untracked.PSet( limit = cms.untracked.int32(10) ), - threshold = cms.untracked.string('INFO') - ), - destinations = cms.untracked.vstring('cout') -) -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - - -# Geometry, conditions, magnetic field -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('MC_31X_V2::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - -# PAT sequences -process.load("PhysicsTools.PatAlgos.patSequences_cff") -#process.content = cms.EDAnalyzer("EventContentAnalyzer") -process.pat = cms.Path( process.patDefaultSequence ) - -# Output: no cleaning, extra AOD collections (generator info, trigger) -process.out = cms.OutputModule("PoolOutputModule", - fileName = cms.untracked.string('PAT_test.root'), - SelectEvents = cms.untracked.PSet( SelectEvents = cms.vstring('pat') ), - outputCommands = cms.untracked.vstring('drop *') -) -from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoLayer1Cleaning -from PhysicsTools.PatAlgos.patEventContent_cff import patExtraAodEventContent -process.out.outputCommands.extend(patEventContentNoLayer1Cleaning) -process.out.outputCommands.extend(patExtraAodEventContent) - -# End -process.outpath = cms.EndPath(process.out) diff --git a/ElectroWeakAnalysis/WMuNu/test/WMuNuAODSelector.py b/ElectroWeakAnalysis/WMuNu/test/WMuNuAODSelector.py deleted file mode 100644 index 82145acb893f9..0000000000000 --- a/ElectroWeakAnalysis/WMuNu/test/WMuNuAODSelector.py +++ /dev/null @@ -1,88 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process, how many events, inout files, ... -process = cms.Process("wmnsel") -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) - #input = cms.untracked.int32(100) -) -process.source = cms.Source("PoolSource", - debugVerbosity = cms.untracked.uint32(0), - debugFlag = cms.untracked.bool(False), - #fileNames = cms.untracked.vstring("file:/data4/RelValWM_CMSSW_3_1_0-STARTUP31X_V1-v1_GEN-SIM-RECO/40BFAA1A-5466-DE11-B792-001D09F29533.root") - #fileNames = cms.untracked.vstring("file:/data4/Wmunu-Summer09-MC_31X_V2_preproduction_311-v1/0011/F4C91F77-766D-DE11-981F-00163E1124E7.root") - fileNames = cms.untracked.vstring("file:AOD_with_WCandidates.root") - -) - -# Debug/info printouts -process.MessageLogger = cms.Service("MessageLogger", - cerr = cms.untracked.PSet( - enable = cms.untracked.bool(False) - ), - cout = cms.untracked.PSet( - default = cms.untracked.PSet( - limit = cms.untracked.int32(10) - ), - enable = cms.untracked.bool(True), - threshold = cms.untracked.string('INFO') - ), - debugModules = cms.untracked.vstring('wmnSelFilter') -) - -# Selector and parameters -process.wmnSelFilter = cms.EDFilter("WMuNuValidator", - # Fast selection flag (no histograms or book-keeping) -> - FastOption = cms.untracked.bool(True), - - # Input collections -> - TrigTag = cms.untracked.InputTag("TriggerResults::HLT"), - MuonTag = cms.untracked.InputTag("muons"), - METTag = cms.untracked.InputTag("met"), - METIncludesMuons = cms.untracked.bool(False), - JetTag = cms.untracked.InputTag("sisCone5CaloJets"), - - # Main cuts -> - MuonTrig = cms.untracked.string("HLT_Mu9"), - PtCut = cms.untracked.double(25.0), - EtaCut = cms.untracked.double(2.1), - IsRelativeIso = cms.untracked.bool(True), - IsCombinedIso = cms.untracked.bool(False), - IsoCut03 = cms.untracked.double(0.1), - MtMin = cms.untracked.double(50.0), - MtMax = cms.untracked.double(200.0), - MetMin = cms.untracked.double(-999999.), - MetMax = cms.untracked.double(999999.), - AcopCut = cms.untracked.double(2.), - - # Muon quality cuts -> - DxyCut = cms.untracked.double(0.2), - NormalizedChi2Cut = cms.untracked.double(10.), - TrackerHitsCut = cms.untracked.int32(11), - IsAlsoTrackerMuon = cms.untracked.bool(True), - - # To suppress Zmm -> - PtThrForZ1 = cms.untracked.double(20.0), - PtThrForZ2 = cms.untracked.double(10.0), - - # To further suppress ttbar -> - EJetMin = cms.untracked.double(40.), - NJetMax = cms.untracked.int32(999999) -) - -# Output -process.load("Configuration.EventContent.EventContent_cff") -process.wmnOutput = cms.OutputModule("PoolOutputModule", - process.AODSIMEventContent, - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('wmnsel') - ), - fileName = cms.untracked.string('wmnsel.root') -) - -# Output histograms -#process.TFileService = cms.Service("TFileService", fileName = cms.string('WMuNu_histograms.root') ) - -# Steering the process -process.wmnsel = cms.Path(process.wmnSelFilter) -#process.end = cms.EndPath(process.wmnOutput) diff --git a/ElectroWeakAnalysis/WMuNu/test/WMuNuAODValidator.py b/ElectroWeakAnalysis/WMuNu/test/WMuNuAODValidator.py deleted file mode 100644 index b57ec3b137786..0000000000000 --- a/ElectroWeakAnalysis/WMuNu/test/WMuNuAODValidator.py +++ /dev/null @@ -1,88 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process, how many events, inout files, ... -process = cms.Process("wmnsel") -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(200) - #input = cms.untracked.int32(100) -) -process.source = cms.Source("PoolSource", - debugVerbosity = cms.untracked.uint32(0), - debugFlag = cms.untracked.bool(False), - #fileNames = cms.untracked.vstring("file:/data4/RelValWM_CMSSW_3_1_0-STARTUP31X_V1-v1_GEN-SIM-RECO/40BFAA1A-5466-DE11-B792-001D09F29533.root") - #fileNames = cms.untracked.vstring("file:/data4/Wmunu-Summer09-MC_31X_V2_preproduction_311-v1/0011/F4C91F77-766D-DE11-981F-00163E1124E7.root") - fileNames = cms.untracked.vstring("file:/data4/Wmunu_Summer09-MC_31X_V3_AODSIM-v1/0009/F82D4260-507F-DE11-B5D6-00093D128828.root") - -) - -# Debug/info printouts -process.MessageLogger = cms.Service("MessageLogger", - cerr = cms.untracked.PSet( - enable = cms.untracked.bool(False) - ), - cout = cms.untracked.PSet( - default = cms.untracked.PSet( - limit = cms.untracked.int32(10) - ), - enable = cms.untracked.bool(True), - threshold = cms.untracked.string('INFO') - ), - debugModules = cms.untracked.vstring('wmnSelFilter') -) - -# Selector and parameters -process.wmnSelFilter = cms.EDFilter("WMuNuValidator", - # Fast selection flag (no histograms or book-keeping) -> - FastOption = cms.untracked.bool(False), - - # Input collections -> - TrigTag = cms.untracked.InputTag("TriggerResults::HLT"), - MuonTag = cms.untracked.InputTag("muons"), - METTag = cms.untracked.InputTag("met"), - METIncludesMuons = cms.untracked.bool(False), - JetTag = cms.untracked.InputTag("sisCone5CaloJets"), - - # Main cuts -> - MuonTrig = cms.untracked.string("HLT_Mu9"), - PtCut = cms.untracked.double(25.0), - EtaCut = cms.untracked.double(2.1), - IsRelativeIso = cms.untracked.bool(True), - IsCombinedIso = cms.untracked.bool(False), - IsoCut03 = cms.untracked.double(0.1), - MtMin = cms.untracked.double(50.0), - MtMax = cms.untracked.double(200.0), - MetMin = cms.untracked.double(-999999.), - MetMax = cms.untracked.double(999999.), - AcopCut = cms.untracked.double(2.), - - # Muon quality cuts -> - DxyCut = cms.untracked.double(0.2), - NormalizedChi2Cut = cms.untracked.double(10.), - TrackerHitsCut = cms.untracked.int32(11), - IsAlsoTrackerMuon = cms.untracked.bool(True), - - # To suppress Zmm -> - PtThrForZ1 = cms.untracked.double(20.0), - PtThrForZ2 = cms.untracked.double(10.0), - - # To further suppress ttbar -> - EJetMin = cms.untracked.double(40.), - NJetMax = cms.untracked.int32(999999) -) - -# Output -#process.load("Configuration.EventContent.EventContent_cff") -#process.wmnOutput = cms.OutputModule("PoolOutputModule", -# process.AODSIMEventContent, -# SelectEvents = cms.untracked.PSet( -# SelectEvents = cms.vstring('wmnsel') -# ), -# fileName = cms.untracked.string('root_files/wmnsel.root') -#) - -# Output histograms -process.TFileService = cms.Service("TFileService", fileName = cms.string('WMuNu_histograms.root') ) - -# Steering the process -process.wmnsel = cms.Path(process.wmnSelFilter) -#process.end = cms.EndPath(process.wmnOutput) diff --git a/ElectroWeakAnalysis/WMuNu/test/WMuNuCandidateHistogrammer.py b/ElectroWeakAnalysis/WMuNu/test/WMuNuCandidateHistogrammer.py deleted file mode 100644 index d16568ace50af..0000000000000 --- a/ElectroWeakAnalysis/WMuNu/test/WMuNuCandidateHistogrammer.py +++ /dev/null @@ -1,178 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process, how many events, inout files, ... -process = cms.Process("wmunuplots") -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) -process.source = cms.Source("PoolSource", - debugVerbosity = cms.untracked.uint32(0), - debugFlag = cms.untracked.bool(False), - - # fileNames = cms.untracked.vstring( - # '/store/user/cepeda/mytestSkim_PTR_Wmunu_10pb/EWK_WMuNu_SubSkim_31Xv3_1.root', - # '/store/user/cepeda/mytestSkim_PTR_Wmunu_10pb/EWK_WMuNu_SubSkim_31Xv3_2.root', - # '/store/user/cepeda/mytestSkim_PTR_Wmunu_10pb/EWK_WMuNu_SubSkim_31Xv3_3.root', - # '/store/user/cepeda/mytestSkim_PTR_Wmunu_10pb/EWK_WMuNu_SubSkim_31Xv3_4.root', - # '/store/user/cepeda/mytestSkim_PTR_Wmunu_10pb/EWK_WMuNu_SubSkim_31Xv3_5.root', - # '/store/user/cepeda/mytestSkim_PTR_Wmunu_10pb/EWK_WMuNu_SubSkim_31Xv3_6.root', - # '/store/user/cepeda/mytestSkim_PTR_Wmunu_10pb/EWK_WMuNu_SubSkim_31Xv3_7.root', - # '/store/user/cepeda/mytestSkim_PTR_Wmunu_10pb/EWK_WMuNu_SubSkim_31Xv3_8.root', - # '/store/user/cepeda/mytestSkim_PTR_Wmunu_10pb/EWK_WMuNu_SubSkim_31Xv3_9.root', - # '/store/user/cepeda/mytestSkim_PTR_Wmunu_10pb/EWK_WMuNu_SubSkim_31Xv3_10.root' - #) - - fileNames = cms.untracked.vstring( - "file:EWK_WMuNu_SubSkim_31Xv3.root" - # "file:AOD_with_WCandidates.root" - ) -) - -# Debug/info printouts -process.MessageLogger = cms.Service("MessageLogger", - cerr = cms.untracked.PSet( - enable = cms.untracked.bool(False) - ), - cout = cms.untracked.PSet( - default = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ), - enable = cms.untracked.bool(True), - threshold = cms.untracked.string('DEBUG') - ), - debugModules = cms.untracked.vstring( - 'corMetWMuNus', - 'selcorMet' - ) -) - -process.selcorMet = cms.EDFilter("WMuNuSelector", - # Fill Basc Histograms? -> - plotHistograms = cms.untracked.bool(True), - - # Input collections -> - MuonTag = cms.untracked.InputTag("muons"), - TrigTag = cms.untracked.InputTag("TriggerResults::HLT8E29"), - JetTag = cms.untracked.InputTag("antikt5CaloJets"), - WMuNuCollectionTag = cms.untracked.InputTag("corMetWMuNus"), - - # Preselection! - MuonTrig = cms.untracked.string("HLT_Mu9"), - PtThrForZ1 = cms.untracked.double(20.0), - PtThrForZ2 = cms.untracked.double(10.0), - EJetMin = cms.untracked.double(40.), - NJetMax = cms.untracked.int32(999999), - - # Main cuts -> - PtCut = cms.untracked.double(25.0), - EtaCut = cms.untracked.double(2.1), - IsRelativeIso = cms.untracked.bool(True), - IsCombinedIso = cms.untracked.bool(False), - IsoCut03 = cms.untracked.double(0.1), - MtMin = cms.untracked.double(50.0), - MtMax = cms.untracked.double(200.0), - MetMin = cms.untracked.double(-999999.), - MetMax = cms.untracked.double(999999.), - AcopCut = cms.untracked.double(2.), - - # Muon quality cuts -> - DxyCut = cms.untracked.double(0.2), - NormalizedChi2Cut = cms.untracked.double(10.), - TrackerHitsCut = cms.untracked.int32(11), - IsAlsoTrackerMuon = cms.untracked.bool(True), - - # Select only W-, W+ ( default is all Ws) - SelectByCharge=cms.untracked.int32(0) - -) -process.selpfMet = cms.EDFilter("WMuNuSelector", - # Fill Basc Histograms? -> - plotHistograms = cms.untracked.bool(True), - - # Preselection! - MuonTrig = cms.untracked.string("HLT_Mu9"), - PtThrForZ1 = cms.untracked.double(20.0), - PtThrForZ2 = cms.untracked.double(10.0), - EJetMin = cms.untracked.double(40.), - NJetMax = cms.untracked.int32(999999), - - # Input collections -> - MuonTag = cms.untracked.InputTag("muons"), - TrigTag = cms.untracked.InputTag("TriggerResults::HLT8E29"), - JetTag = cms.untracked.InputTag("antikt5CaloJets"), - WMuNuCollectionTag = cms.untracked.InputTag("pfMetWMuNus"), - - # Main cuts -> - UseTrackerPt = cms.untracked.bool(True), - PtCut = cms.untracked.double(25.0), - EtaCut = cms.untracked.double(2.1), - IsRelativeIso = cms.untracked.bool(True), - IsCombinedIso = cms.untracked.bool(False), - IsoCut03 = cms.untracked.double(0.1), - MtMin = cms.untracked.double(50.0), - MtMax = cms.untracked.double(200.0), - MetMin = cms.untracked.double(-999999.), - MetMax = cms.untracked.double(999999.), - AcopCut = cms.untracked.double(2.), - - # Muon quality cuts -> - DxyCut = cms.untracked.double(0.2), - NormalizedChi2Cut = cms.untracked.double(10.), - TrackerHitsCut = cms.untracked.int32(11), - IsAlsoTrackerMuon = cms.untracked.bool(True), - - # Select only W-, W+ ( default is all Ws) - SelectByCharge=cms.untracked.int32(0) - -) -process.seltcMet = cms.EDFilter("WMuNuSelector", - # Fill Basc Histograms? -> - plotHistograms = cms.untracked.bool(True), - - # Input collections -> - MuonTag = cms.untracked.InputTag("muons"), - TrigTag = cms.untracked.InputTag("TriggerResults::HLT8E29"), - JetTag = cms.untracked.InputTag("antikt5CaloJets"), - WMuNuCollectionTag = cms.untracked.InputTag("tcMetWMuNus"), - - # Preselection! - MuonTrig = cms.untracked.string("HLT_Mu9"), - PtThrForZ1 = cms.untracked.double(20.0), - PtThrForZ2 = cms.untracked.double(10.0), - EJetMin = cms.untracked.double(40.), - NJetMax = cms.untracked.int32(999999), - - # Main cuts -> - UseTrackerPt = cms.untracked.bool(True), - PtCut = cms.untracked.double(25.0), - EtaCut = cms.untracked.double(2.1), - IsRelativeIso = cms.untracked.bool(True), - IsCombinedIso = cms.untracked.bool(False), - IsoCut03 = cms.untracked.double(0.1), - MtMin = cms.untracked.double(50.0), - MtMax = cms.untracked.double(200.0), - MetMin = cms.untracked.double(-999999.), - MetMax = cms.untracked.double(999999.), - AcopCut = cms.untracked.double(2.), - - # Muon quality cuts -> - DxyCut = cms.untracked.double(0.2), - NormalizedChi2Cut = cms.untracked.double(10.), - TrackerHitsCut = cms.untracked.int32(11), - IsAlsoTrackerMuon = cms.untracked.bool(True), - - # Select only W-, W+ ( default is all Ws) - SelectByCharge=cms.untracked.int32(0) - -) - -process.TFileService = cms.Service("TFileService", fileName = cms.string('WMuNuBasicPlots.root') ) - - -# Steering the process -process.path1 = cms.Path(process.selcorMet) -process.path2 = cms.Path(process.selpfMet) -process.path3 = cms.Path(process.seltcMet) - - - diff --git a/ElectroWeakAnalysis/WMuNu/test/WMuNuCandidateProducer.py b/ElectroWeakAnalysis/WMuNu/test/WMuNuCandidateProducer.py deleted file mode 100644 index d4a35f2310a97..0000000000000 --- a/ElectroWeakAnalysis/WMuNu/test/WMuNuCandidateProducer.py +++ /dev/null @@ -1,63 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process, how many events, inout files, ... -process = cms.Process("USER") -process.maxEvents = cms.untracked.PSet( - #input = cms.untracked.int32(-1) - input = cms.untracked.int32(20) -) - -process.load("ElectroWeakAnalysis.WMuNu.wmunusProducer_cfi") - - -process.source = cms.Source("PoolSource", - debugVerbosity = cms.untracked.uint32(0), - debugFlag = cms.untracked.bool(False), - fileNames = cms.untracked.vstring("file:/data4/Wmunu_Summer09-MC_31X_V3_AODSIM-v1/0009/F82D4260-507F-DE11-B5D6-00093D128828.root") - -) - -# Debug/info printouts -process.MessageLogger = cms.Service("MessageLogger", - cerr = cms.untracked.PSet( - enable = cms.untracked.bool(False) - ), - cout = cms.untracked.PSet( - default = cms.untracked.PSet( - limit = cms.untracked.int32(10) - ), - enable = cms.untracked.bool(True), - threshold = cms.untracked.string('INFO') - ), - debugModules = cms.untracked.vstring('corMetWMuNus') -) - -# Output -process.load("Configuration.EventContent.EventContent_cff") - -process.myEventContent = cms.PSet( - outputCommands = cms.untracked.vstring( - 'keep *' - ) -) - -process.wmnOutput = cms.OutputModule("PoolOutputModule", - process.AODSIMEventContent, - #process.myEventContent, - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('path') - ), - fileName = cms.untracked.string('AOD_with_WCandidates.root') -) - - -# Steering the process -process.path = cms.Path(process.corMetWMuNus) -#process.path = cms.Path(process.pfMetWMuNus) -#process.path = cms.Path(process.tcMetWMuNus) -#process.path = cms.Path(process.allWMuNus) - -process.end = cms.EndPath(process.wmnOutput) - - - diff --git a/ElectroWeakAnalysis/WMuNu/test/WMuNuCandidateSelector.py b/ElectroWeakAnalysis/WMuNu/test/WMuNuCandidateSelector.py deleted file mode 100644 index 334ccb587254f..0000000000000 --- a/ElectroWeakAnalysis/WMuNu/test/WMuNuCandidateSelector.py +++ /dev/null @@ -1,55 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process, how many events, inout files, ... -process = cms.Process("USER") -process.maxEvents = cms.untracked.PSet( - #input = cms.untracked.int32(-1) - input = cms.untracked.int32(10) -) -process.source = cms.Source("PoolSource", - debugVerbosity = cms.untracked.uint32(0), - debugFlag = cms.untracked.bool(False), - fileNames = cms.untracked.vstring( - # "file:/data4/InclusiveMu15_Summer09-MC_31X_V3_AODSIM-v1/0024/C2F408ED-E181-DE11-8949-0030483344E2.root") - # "file:/data4/Wmunu_Summer09-MC_31X_V3_AODSIM-v1/0009/F82D4260-507F-DE11-B5D6-00093D128828.root") - '/store/user/cepeda/mytestSkim_Wmunu_10pb/EWK_WMuNu_SubSkim_31Xv3_1.root' - -) - -process.load("ElectroWeakAnalysis.WMuNu.WMuNuSelection_cff") - -# Debug/info printouts -process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring('corMetWMuNus','selcorMet'), - cout = cms.untracked.PSet( - default = cms.untracked.PSet( limit = cms.untracked.int32(10) ), - threshold = cms.untracked.string('INFO') - #threshold = cms.untracked.string('DEBUG') - ), - destinations = cms.untracked.vstring('cout') -) - -#process.TFileService = cms.Service("TFileService", fileName = cms.string('WMuNu.root') ) - -process.myEventContent = cms.PSet( - outputCommands = cms.untracked.vstring( - 'keep *' - ) -) - -process.wmnOutput = cms.OutputModule("PoolOutputModule", - #process.AODSIMEventContent, - process.myEventContent, - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('path') - ), - fileName = cms.untracked.string('AOD_with_WCandidates.root') -) - -# This Example uses only "corMetGlobalMuons". Modify to run over pf & tc Met -process.path = cms.Path(process.selectCaloMetWMuNus) - -process.end = cms.EndPath(process.wmnOutput) - - - diff --git a/ElectroWeakAnalysis/WMuNu/test/crabWMuNuValidation.cfg b/ElectroWeakAnalysis/WMuNu/test/crabWMuNuValidation.cfg deleted file mode 100644 index 954124878cb76..0000000000000 --- a/ElectroWeakAnalysis/WMuNu/test/crabWMuNuValidation.cfg +++ /dev/null @@ -1,21 +0,0 @@ -[CMSSW] -pset = WMuNuAODValidator.py -datasetpath = /Wmunu/Summer09-MC_31X_V2_preproduction_311-v1/GEN-SIM-RECO -#datasetpath = /InclusiveMu15/Summer09-MC_31X_V2_preproduction_311-v1/GEN-SIM-RECO -#datasetpath = /Zmumu/Summer09-MC_31X_V2_preproduction_311-v1/GEN-SIM-RECO -#datasetpath = /ppMuX/Summer09-MC_31X_V2_preproduction_311-v1/GEN-SIM-RECO - -events_per_job = 10000 -total_number_of_events = -1 -#total_number_of_events = 200000 - -# Maybe for real data: -#split_by_run = 1 - -[CRAB] -jobtype = cmssw -scheduler = glitecoll - -[USER] -return_data = 1 -copy_data = 0 diff --git a/ElectroWeakAnalysis/ZEE/BuildFile.xml b/ElectroWeakAnalysis/ZEE/BuildFile.xml deleted file mode 100644 index 41daee4783660..0000000000000 --- a/ElectroWeakAnalysis/ZEE/BuildFile.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/ElectroWeakAnalysis/ZEE/README b/ElectroWeakAnalysis/ZEE/README deleted file mode 100644 index 1e264e872b900..0000000000000 --- a/ElectroWeakAnalysis/ZEE/README +++ /dev/null @@ -1,174 +0,0 @@ -NOTES AND INSTRUCTIONS FOR THE CODE -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -This code creates Wenu or Zee candidates from some configurable trigger stream -and applies some selections. It contains the following files: -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -source and header files: ------------------------- -WenuCandidateFilter.cc -ZeeCandidateFilter.cc -WenuPlots.h and WenuPlots.cc -ZeePlots.h and ZeePlots.cc - -cfg files: ----------- -pat_WenuPlots.py aod_WenuPlots.py -pat_ZeePlots.py aod_ZeePlots.py - -macros: -------- -PlotCombiner.cc -inputFiles - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -For details with respect to the definitions of candidates check the -implementation notes in all source files. - -There are 2 ways to run this code: either running the whole PAT sequence -(recommended) or bypassing pat and run with whatever exists precalculated -in the AOD collections. - -Run the code without running the PAT sequence -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Quick instruction: cmsRun aod_WenuPlots.py or cmsRun aod_ZeePlots.py - - -An interface that is provided aod2patFilter.cc creates pat::ElectronCollection -and pat::METCollection from AOD. This uses the default pat constructors. -Isolations are added manually to the the PAT objects in the following way: - myElectron.setTrackIso(elec->dr03TkSumPt()); - myElectron.setECalIso(elec->dr04EcalRecHitSumEt()); - myElectron.setHCalIso(elec->dr04HcalTowerSumEt()); -Please edit this part accordingly, if you prefere different isolation -definitions. No facility to calculate your own isolations is provided. If you -want to do so you have to run the PAT sequence yourself. (see next session) - - -Running the whole PAT sequence yourself -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Quick instruction: cmsRun pat_WenuPlots.py or cmsRun pat_ZeePlots.py - - -The software has been tested and run successfully with the following tags: -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -Test Release based on: CMSSW_3_1_2 ---- Tag --- -------- Package -------- -V01-08-08 CondFormats/JetMETObjects -V05-06-05 DataFormats/PatCandidates -V01-08-04-01 JetMETCorrections/Algorithms -V01-08-21 JetMETCorrections/Configuration -V02-09-05 JetMETCorrections/Modules -V07-08-22-01 PhysicsTools/PatAlgos -V03-07-06 PhysicsTools/PatUtils -V04-02-02 PhysicsTools/PFCandProducer -V02-10-01 RecoJets/JetAlgorithms -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -However, it can be run just with CMSSW_3_1_2 without any further tags and -should produce the same results. - -Instructions: -^^^^^^^^^^^^^ - (the following hold for both Wenu and Zee plots) - In the cfg file that is provided you have to edit the following lines:.... - * line 17: the source - these are the input files ->>> * line 30: select your Global Tag: - STARTUP31X_V4::All this is good for the low lumi trigger menu - MC_31X_V5::All this is good for the highlumi trigger menu ->>> * line 71: the MET collection of your preference - LINE 72: modify the "metSource" to take whatever met you like - the default that is given is "met","","RECO" that is - uncorrected Calo MET. ->>> * line 96: select your Trigger path. There are 3 parameters that you set: - LINE 96: HLT_process_name : high (HLT) or low (HLT8E29) lumi - menu.............................. - LINE 98 and 100: the path and the filter names. For your...... - convenience all the correct pairs are given.. - at the end of the cfg file................... ->>> * line102: the Filter: select the parameters that you want. ONLY these... - parameters have to be changed:................................ - ETCut double the ET cut in the SC ET of the candidate - METCut double the MET cut in the MET of the event - vetoSecondElectronEvents bool (only Wenu) on/off rejection of - events with a 2nd electron with ET>see nextpara - ETCut2ndEle double the ET cut for the 2nd electron rejection - electronMatched2HLT bool demand the electron to be matched to - an HLT object (in Zee means at least one electron) - electronMatched2HLT_DR double the DR for the HLT matching ->>> * line124: set the selection cuts that you prefere........................ ->>> * line159: set the cuts that you want to invert........................... ->>> * line168: set the name of your selection PSet............................ - - -How to add the histograms and make the final plots -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -(applies to all versions) - -After you have done these changes you can run over the grid over the different -datasets. The histograms are stored in root trees that you can hadd together. -For example if you have run over QCD Em enriched samples with say 10 jobs you -will finally get out 10 files -histos_1.root, histos_2, ...., histos_10.root -that you can combine -hadd histos_qcd.root histos_1.root histos_2.root .... - -Having added the different bkgs together you set up file "inputFiles" -with the following format: -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -# zee or wenu -wenu -# file name, type (sig, qcd, bce, gje, ewk), weight -histos_wenu.root sig 1.46 -histos_q20_30.root qcd 0 -histos_q30_80.root qcd 100. -histos_q80_170.root qcd 0 -histos_b20_30.root bce 0 -histos_b30_80.root bce 0 -histos_b80_170.root bce 0 -histos_zee.root ewk 0 -histos_wtaunu.root ewk 0 -histos_ztautau.root ewk 0 -histos_gj15.root gje 0 -histos_gj20.root gje 0 -histos_gj25.root gje 10.12 -histos_gj30.root gje 0 -histos_gj35.root gje 0 -histos_wmunu.root ewk 0 -histos_ttbar.root ewk 0 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -lines that start with # are considered to be comments -line 2 has wenu or zee. From line 4 the list of the histo files are listed -(first word) then a type that could be sig,qcd,bce, gj or ewk in order to -discriminate among different sources of bkgs and finally the weight that we -want to weight the histogram entries. This particular example is for Wenu. For -Zee one has to put type sig in the zee file and ewk in the Wenu file. The order -of the files is arbitrary. Files with weight 0 will be ignored. -After you have set up this code you run a root macro to combine the plots. -You can do (not recommended - it actually crushes - to be debugged) -root -b PlotCombiner.cc -or to compile it within root (recommended) -root -b -root [1] .L PlotCombiner.cc++ -root [2] PlotCombiner() - -and you finally get the plots. - - - - -Contact - -Nikolaos.Rompotis@Cern.ch - -18Sept09 - -Nikolaos Rompotis -Imperial College London - - - diff --git a/ElectroWeakAnalysis/ZEE/READMEersatz b/ElectroWeakAnalysis/ZEE/READMEersatz deleted file mode 100644 index 878da24af0595..0000000000000 --- a/ElectroWeakAnalysis/ZEE/READMEersatz +++ /dev/null @@ -1,203 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% README for Ersatz MET code % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -------------------------------------------------------------------------------------------------- -Contents -------------------------------------------------------------------------------------------------- - -Introduction -What the Ersatz MET code does -Structure of the Ersatz MET code -How to run the Ersatz MET code -Contact - -------------------------------------------------------------------------------------------------- -Introduction -------------------------------------------------------------------------------------------------- - -Ersatz MET is a data-driven method for background subtraction in the W cross-section measurement. -The code is designed to estimate the missing transverse energy (MET) distribution for Wenu events -in data. - - -------------------------------------------------------------------------------------------------- -What the Ersatz MET code does -------------------------------------------------------------------------------------------------- - -The idea is to use Zee events from data to estimate the missing transverse energy (MET) -distribution in data from Wenu events. The MET distribution of Wenu events is modelled using the -ET distribution of the second electron in Zee after requiring that the first passes the W -electron selection. The code does the following. - -1. Find electrons (tags) which pass the W electron selection in Zee event. -2. Find another electron (probe) which, when combined with the first, gives an invariant mass - around the Z mass (71 < mee < 111 GeV). -3. Add the ersatz neutrino MET to the MET in the event to get the MET expected in a Wenu event. - -Particularly in early data, the measurement of missing energy is marred by poorly understood -detector effects. By using Zee events from data, unknown detector effects are taken into account. - -Various corrections are applied to get the Ersatz MET distribution. - -Mass Correction: due to the difference in mass between the W and Z bosons. This is applied by -boosting into the Z rest frame, multiplying by mW/mZ and boosting back into the Lab frame. - -Supercluster Energy Corrections: due to energy loss and radiation in the tracker. This includes -standard supercluster corrections such as f(eta), f(brem) and f(Et,eta). - -Acceptance Correction: In Zee events both electrons are required to be within |eta| < 2.5, while -the neutrino in a Wenu event is unconstrained. This correction is applied using a Wenu Monte -Carlo. The correction is done separately for each MET bin. The correction is: -Ersatz MET corrected = Ersatz MET x (1 + MC W MET out / MC W MET in). - -Once these corrections have been applied we have the Ersatz MET distribution. f and fprime are -the quantities needed for the W cross section measurement; they are the ratio of the number of -events passing the cuts to the number failing in the cases where the electron passes/fails the -track isolation cut. These are extracted from the Ersatz MET distribution. - - -------------------------------------------------------------------------------------------------- -Structure of the Ersatz MET code -------------------------------------------------------------------------------------------------- - -The Ersatz MET code is in three parts: - -1. Ersatz MET code: Takes Zee data and gives Ersatz MET distribution and lots of other variables -relating to electron, ersatz neutrino, Monte Carlo particles etc. in a ROOT ntuple. The W -electron selection is loosened off at this stage with the intention to apply it later so that the -analysis does not have to be rerun to change the selection. The mass correction and the -supercluster energy corrections are all applied. - -2. AnalysisErsatz code: Takes W Monte Carlo, applies W selection (which is again loose) and -outputs various variables including calo MET to a ROOT ntuple. This is only needed for the -acceptance correction. - -3. f extraction code: This is a ROOT macro. It takes the ROOT ntuples of the previous two stages, -applies the W electron selection and some probe selection correcting for probe selection -efficiency, applies acceptance correction and calculates f, fprime and errors. - -Source Files: -src/ -AnalysisErsatz.cc ErsatzMEt.cc - -Interface Files: -interface/ -AnalysisErsatz.h CaloVectors.h ElectronSelector.h ErsatzMEt.h SCEnergyCorrections.h -UniqueElectrons.h - -Python Configuration Files: -test/ -analysisersatz_cfg.py ersatzmet_cfg.py ersatzmet_cfi.py Zersatzmet_cfg.py - -ROOT macros: -macros/ -EtaWeights.txt PerformAnalysis.cpp StabilityPlots.cpp - - -------------------------------------------------------------------------------------------------- -How to run the Ersatz MET code -------------------------------------------------------------------------------------------------- - -I'll assume you are using lxplus. - -Create a CMSSW_3_1_4 project area: - -> cmsrel CMSSW_3_1_4 - -Set CMS environment: - -> cd CMSSW_3_1_4/src -> cmsenv - -Checkout the Ersatz MET code from CVS: - -> cvs co ElectroWeakAnalysis/ZEE - -Enter the analysis module: - -> cd ElectroWeakAnalysis/ZEE - -Create a python directory and put the parameter file ersatzmet_cfi.py in it so that it is seen in -the python path. - -> mkdir python -> cp test/ersatzmet_cfi.py python/ - -Build: - -> scramv1 b -j3 - -Run locally: - -Set the data location in the config file Zersatzmet_cfg.py. - -> cd ElectroWeakAnalysis/ZEE/test -> cmsRun Zersatzmet_cfg.py - -or Run on the GRID using CRAB: - -Set up GRID: -> source /afs/cern.ch/project/gd/LCG-share/current/etc/profile.d/grid_env.sh -Set up CMS environment: -> cmsenv -Set up CRAB: -> source /afs/cern.ch/cms/ccs/wm/scripts/Crab/crab.sh - -You can write a script to do the 3 setup tasks above so you don't have to type them in every time. - -> cd ElectroWeakAnalysis/ZEE - -Create a CRAB config file (crab.cfg). Zersatzmet_cfg.py in test/ folder is the config file to run -if you are using Monte Carlo Zee events, otherwise run ersatzmet_cfg.py. - -Create and submit CRAB jobs to the GRID: - -> crab -create -submit - -Also run the ErsatzAnalysis code in a similar way on W Monte Carlo data using the -analysisersatz_cfg.py config file. You will need to uncomment AnalysisErsatz.cc and comment out -ErsatzMEt.cc (or move it elsewhere) and rebuild. - -Once you have successfully run the code copy the output ROOT files to a /tmp/[username] directory. -You will need to hadd the root files first if there is more than one. - -Setup ROOT environment: -> export ROOTSYS=/afs/cern.ch/sw/lcg/external/root/5.21.02/slc4_ia32_gcc34/root -> export PATH=$PATH:$ROOTSYS/bin -> export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ROOTSYS/lib - -Once again you can write a script to do this so you don't have to type it in every time. - -PerformAnalysis.cpp is the Macro to run. You must also have the EtaWeights.txt file available. - -Start ROOT, compile and run macro: -> root -l -[0] .L PerformAnalysis.cpp+ -[1] PerformAnalysis([process], [weight], [datapath]) - -[process]Plots.root is the name of the output file. -[weight] is the event weight. -[datapath] is the data path e.g. if data is in /tmp/rnandi/ [datapath] = "/tmp/rnandi/" - -This creates a root file [process].root with plots and outputs interesting ones to png files. -It also outputs f, fprime, efficiency, efficiencyprime, A, B, C, D and errors to screen. - -You can also run StabilityPlots.cpp: -> root -l -[0] .L StabilityPlots.cpp+ -[1] StabilityPlots() - -This takes [process]Plots.root and outputs plots of f and fprime as a function of MET cut in png -files. - - -------------------------------------------------------------------------------------------------- -Contact -------------------------------------------------------------------------------------------------- - -Robin Nandi - -Robin.James.Nandi@Cern.ch - -8 December 2009 diff --git a/ElectroWeakAnalysis/ZEE/interface/AnalysisErsatz.h b/ElectroWeakAnalysis/ZEE/interface/AnalysisErsatz.h deleted file mode 100644 index f837e61689dce..0000000000000 --- a/ElectroWeakAnalysis/ZEE/interface/AnalysisErsatz.h +++ /dev/null @@ -1,139 +0,0 @@ -// -*- C++ -*- -// -// Package: AnalysisErsatz -// Class: AnalysisErsatz -// -/**\class AnalysisErsatz AnalysisErsatz.cc ElectroWeakAnalysis/AnalysisErsatz/src/AnalysisErsatz.cc - - Description: - - Implementation: - -*/ -// -// Original Author: David Wardrope -// Created: Fri Nov 14 15:00:43 GMT 2008 -// -// - - -// system include files -#include -//Framework -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -//Random Number Generator -#include "FWCore/Utilities/interface/RandomNumberGenerator.h" -#include "CLHEP/Random/RandFlat.h" -//Egamma -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -//OtherObjects -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/Common/interface/TriggerResults.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/METReco/interface/CaloMET.h" -#include "DataFormats/METReco/interface/CaloMETFwd.h" -#include "DataFormats/METReco/interface/GenMET.h" -#include "DataFormats/METReco/interface/GenMETFwd.h" -#include "DataFormats/METReco/interface/PFMET.h" -#include "DataFormats/METReco/interface/PFMETFwd.h" -#include "DataFormats/METReco/interface/MET.h" -#include "DataFormats/METReco/interface/METFwd.h" -//PhysicsTools -//#include "PhysicsTools/Utilities/interface/deltaR.h" -#include "DataFormats/Math/interface/deltaR.h" -#include "CommonTools/CandUtils/interface/CenterOfMassBooster.h" -#include "Math/GenVector/Boost.h" - -//Helper Functions -#include "ElectroWeakAnalysis/ZEE/interface/UniqueElectrons.h" -#include "ElectroWeakAnalysis/ZEE/interface/ElectronSelector.h" -#include "ElectroWeakAnalysis/ZEE/interface/CaloVectors.h" -//ROOT -#include "TTree.h" - -#define nEntries_arr_ 4 -// -// class declaration -// - -//namespace CLHEP{ -// class RandFlat; -//} - -class AnalysisErsatz : public edm::EDAnalyzer { - public: - explicit AnalysisErsatz(const edm::ParameterSet&); - ~AnalysisErsatz(); - - - private: - virtual void beginJob() ; - virtual void analyze(const edm::Event&, const edm::EventSetup&); - virtual void endJob() ; - - // ----------member data --------------------------- - edm::EDGetTokenT MCTruthCollection_; - edm::EDGetTokenT ElectronCollection_; - edm::EDGetTokenT CaloMEtCollection_; - edm::EDGetTokenT T1MEtCollection_; - edm::EDGetTokenT PfMEtCollection_; - edm::EDGetTokenT TcMEtCollection_; - edm::EDGetTokenT GenMEtCollection_; - bool ErsatzEvent_, C_Fiducial_; - enum cut_index_t { EtCut_, EB_sIhIh_, EB_dEtaIn_, EB_dPhiIn_, EB_TrckIso_, EB_EcalIso_, EB_HcalIso_, - EE_sIhIh_, EE_dEtaIn_, EE_dPhiIn_, EE_TrckIso_, EE_EcalIso_, EE_HcalIso_}; - std::vector CutVector_; - double mW_, mZ_; - edm::EDGetTokenT TriggerEvent_; - edm::EDGetTokenT TriggerResults_; - TriggerPath_; - std::string TriggerName_; - - TTree* t_; - double Boson_pt_, Boson_y_, Boson_m_, Boson_mt_; - double Boson_phi_; - double McElec3_pt_[nEntries_arr_], McElec3_eta_[nEntries_arr_]; - double McElec1_pt_[nEntries_arr_], McElec1_eta_[nEntries_arr_]; - int RndmInt_; - double RndmMcElec_pt_, RndmMcElec_eta_, RndmMcElec_phi_; - double RndmMcElec_Rescaled_pt_, RndmMcElec_Rescaled_eta_, RndmMcElec_Rescaled_phi_; - double RndmMcElecTRIG_pt_, RndmMcElecTRIG_eta_, RndmMcElecRECO_pt_, RndmMcElecRECO_eta_; - double OthrMcElec_pt_, OthrMcElec_eta_, OthrMcElec_phi_; - double OthrMcElecTRIG_pt_, OthrMcElecTRIG_eta_, OthrMcElecRECO_pt_, OthrMcElecRECO_eta_; - double OthrMcElec_Rescaled_pt_, OthrMcElec_Rescaled_eta_, OthrMcElec_Rescaled_phi_; - int RndmTrig_, RndmReco_, OthrTrig_, OthrReco_; - double McNu_pt_, McNu_eta_, McNu_phi_, McNu_ECALeta_; - double McNu_vx_, McNu_vy_, McNu_vz_; - double McLeptons_dPhi_, McLeptons_dEta_, McLeptons_dR_; - - double elec_q_[nEntries_arr_]; - double elec_pt_[nEntries_arr_], elec_eta_[nEntries_arr_], elec_phi_[nEntries_arr_]; - double elec_pt25_, elec_eta25_, elec_phi25_; - double elec_sIhIh_[nEntries_arr_], elec_dPhiIn_[nEntries_arr_], elec_dEtaIn_[nEntries_arr_]; - double elec_trckIso_[nEntries_arr_], elec_ecalIso_[nEntries_arr_], elec_hcalIso_[nEntries_arr_]; - double elec_e5x5_[nEntries_arr_], elec_e2x5Max_[nEntries_arr_], elec_e1x5Max_[nEntries_arr_]; - double elec_hoe_[nEntries_arr_], elec_eop_[nEntries_arr_], elec_pin_[nEntries_arr_], elec_pout_[nEntries_arr_]; - - double Selected_nuPt_[nEntries_arr_], Selected_nuEta_[nEntries_arr_], Selected_nuPhi_[nEntries_arr_]; - double caloMEt_, caloSumEt_, caloUESumEt_; - double t1MEt_, t1MEtPhi_, t1SumEt_; - double pfMEt_, pfMEtPhi_, pfSumEt_; - double tcMEt_, tcMEtPhi_, tcSumEt_; - double caloMEt25_, caloMEt30_; - double caloMEtECAL25_, caloMEtECAL30_;//using ECAL eta to restrict neutrino - double caloMEtPhi_, caloMEtPhi25_, caloMEtPhi30_; - double caloMEtPhiECAL25_, caloMEtPhiECAL30_;//using ECAL eta to restrict neutrino - double caloMt_[nEntries_arr_], caloMt25_[nEntries_arr_], caloMt30_[nEntries_arr_]; - double genMEt_, genMt_[nEntries_arr_], genUESumEt_, genMEt25_; - int nHltObj_, nSelElecs_; - double HltObj_pt_[nEntries_arr_], HltObj_eta_[nEntries_arr_]; -}; - diff --git a/ElectroWeakAnalysis/ZEE/interface/CaloVectors.h b/ElectroWeakAnalysis/ZEE/interface/CaloVectors.h deleted file mode 100644 index 4b131687697ad..0000000000000 --- a/ElectroWeakAnalysis/ZEE/interface/CaloVectors.h +++ /dev/null @@ -1,40 +0,0 @@ -#include "RecoEcal/EgammaClusterAlgos/interface/EgammaSCEnergyCorrectionAlgo.h" -#include "DataFormats/Math/interface/LorentzVector.h" -#include "DataFormats/Math/interface/Vector3D.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" - -math::XYZTLorentzVector DetectorVector(const reco::SuperClusterRef& sc) { - double pt = sc->energy() / cosh(sc->eta()); - math::XYZTLorentzVector detVec(pt * cos(sc->phi()), pt * sin(sc->phi()), pt * sinh(sc->eta()), sc->energy()); - return detVec; -} -math::XYZTLorentzVector DetectorVector(const reco::SuperCluster sc) { - double pt = sc.energy() / cosh(sc.eta()); - math::XYZTLorentzVector detVec(pt * cos(sc.phi()), pt * sin(sc.phi()), pt * sinh(sc.eta()), sc.energy()); - return detVec; -} -math::XYZTLorentzVector DetectorVector(const GlobalPoint& pos, const math::XYZPoint& vertex, double energy) { - math::XYZPoint hitPos(pos.x(), pos.y(), pos.z()); - math::XYZVector Vec = hitPos - vertex; - double eta = Vec.Eta(); - double phi = Vec.Phi(); - double pt = energy / cosh(eta); - math::XYZTLorentzVector detVec(pt * cos(phi), pt * sin(phi), pt * sinh(eta), energy); - return detVec; -} -math::XYZTLorentzVector PhysicsVector(const math::XYZPoint& vertex, const reco::SuperCluster& sc) { - math::XYZVector Vec = sc.position() - vertex; - double eta = Vec.Eta(); - double phi = Vec.Phi(); - double pt = sc.energy() / cosh(eta); - math::XYZTLorentzVector probe(pt * cos(phi), pt * sin(phi), pt * sinh(eta), sc.energy()); - return probe; -} -math::XYZTLorentzVector PhysicsVectorRaw(const math::XYZPoint& vertex, const reco::SuperCluster& sc) { - math::XYZVector Vec = sc.position() - vertex; - double eta = Vec.Eta(); - double phi = Vec.Phi(); - double pt = sc.rawEnergy() / cosh(eta); - math::XYZTLorentzVector probe(pt * cos(phi), pt * sin(phi), pt * sinh(eta), sc.rawEnergy()); - return probe; -} diff --git a/ElectroWeakAnalysis/ZEE/interface/ElectronSelector.h b/ElectroWeakAnalysis/ZEE/interface/ElectronSelector.h deleted file mode 100644 index 071742f2cbe09..0000000000000 --- a/ElectroWeakAnalysis/ZEE/interface/ElectronSelector.h +++ /dev/null @@ -1,92 +0,0 @@ -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/Math/interface/deltaR.h" -#include "DataFormats/Math/interface/LorentzVector.h" -#include - -std::vector electronSelector(const std::vector& electrons, - const edm::Handle& pHLT, - const int filterId, - const std::vector& Cuts) { - std::vector ChosenOnes; - const trigger::Keys& ring = pHLT->filterKeys(filterId); - const trigger::TriggerObjectCollection& HltObjColl = pHLT->getObjects(); - //const edm::ValueMap& eIsoMapTrk = *eIsoMap[0]; - //const edm::ValueMap& eIsoMapEcal = *eIsoMap[1]; - //const edm::ValueMap& eIsoMapHcal = *eIsoMap[2]; - edm::LogDebug_("electronSelector", "", 16) << "Number of electrons to select from = " << electrons.size(); - for (std::vector::const_iterator Relec = electrons.begin(); Relec != electrons.end(); ++Relec) { - reco::GsfElectronRef elec = *Relec; - edm::LogDebug_("electronSelector", "", 17) << "Analysing elec, id = " << elec.id() << "\tkey = " << elec.key(); - double scEta = elec->superCluster()->eta(); - if (fabs(scEta) < 1.4442 || fabs(scEta) > 1.56) { - bool HLTMatch = false; - for (unsigned int k = 0; k < ring.size(); ++k) { - const trigger::TriggerObject& HltObj = HltObjColl[ring[k]]; - if (reco::deltaR(*elec, HltObj) < 0.1) - HLTMatch = true; - } - edm::LogDebug_("electronSelector", "", 16) << "HLT Match = " << HLTMatch; - std::cout << "HLT Match = " << HLTMatch << std::endl; - // if(HLTMatch) ChosenOnes.push_back(elec); - if (HLTMatch) { - if (fabs(scEta) < 1.479) { - float sIhIh = elec->scSigmaIEtaIEta(); - edm::LogDebug_("electronSelector", "", 32) << "SigIetaIeta = " << sIhIh << "\tCut Value = " << Cuts[1]; - if (sIhIh < Cuts[1]) { - edm::LogDebug_("elecSel", "", 39) - << "dEta = " << elec->deltaEtaSuperClusterTrackAtVtx() << "\tCut Value = " << Cuts[2]; - if (fabs(elec->deltaEtaSuperClusterTrackAtVtx()) < Cuts[2]) { - edm::LogDebug_("elecSel", "", 39) - << "dPhi = " << elec->deltaPhiSuperClusterTrackAtVtx() << "\tCut Value = " << Cuts[3]; - if (fabs(elec->deltaPhiSuperClusterTrackAtVtx()) < Cuts[3]) { - float trckiso = elec->isolationVariables03().tkSumPt; - edm::LogDebug_("", "", 29) << "Track isolation = " << trckiso << "\tCut Value = " << Cuts[4]; - if (trckiso < Cuts[4]) { - float ecaliso = elec->isolationVariables04().ecalRecHitSumEt; - edm::LogDebug_("", "", 29) << "ECAL isolation = " << ecaliso << "\tCut Value = " << Cuts[5]; - if (ecaliso < Cuts[5]) { - float hcaliso = elec->isolationVariables04().hcalDepth1TowerSumEt + - elec->isolationVariables04().hcalDepth2TowerSumEt; - edm::LogDebug_("", "", 29) << "HCAL isolation = " << hcaliso << "\tCut Value = " << Cuts[6]; - if (hcaliso < Cuts[6]) - ChosenOnes.push_back(elec); - } - } - } - } - } - } else { - float sIhIh = elec->scSigmaIEtaIEta(); - edm::LogDebug_("electronSelector", "", 32) << "SigIetaIeta = " << sIhIh << "\tCut Value = " << Cuts[7]; - if (sIhIh < Cuts[7]) { - edm::LogDebug_("elecSel", "", 39) - << "dEta = " << elec->deltaEtaSuperClusterTrackAtVtx() << "\tCut Value = " << Cuts[8]; - if (fabs(elec->deltaEtaSuperClusterTrackAtVtx()) < Cuts[8]) { - edm::LogDebug_("elecSel", "", 39) - << "dPhi = " << elec->deltaPhiSuperClusterTrackAtVtx() << "\tCut Value = " << Cuts[9]; - if (fabs(elec->deltaPhiSuperClusterTrackAtVtx()) < Cuts[9]) { - float trckiso = elec->isolationVariables03().tkSumPt; - edm::LogDebug_("", "", 29) << "Track isolation = " << trckiso << "\tCut Value = " << Cuts[10]; - if (trckiso < Cuts[10]) { - float ecaliso = elec->isolationVariables04().ecalRecHitSumEt; - edm::LogDebug_("", "", 29) << "ECAL isolation = " << ecaliso << "\tCut Value = " << Cuts[11]; - if (ecaliso < Cuts[11]) { - float hcaliso = elec->isolationVariables04().hcalDepth1TowerSumEt + - elec->isolationVariables04().hcalDepth2TowerSumEt; - edm::LogDebug_("", "", 29) << "HCAL isolation = " << hcaliso << "\tCut Value = " << Cuts[12]; - if (hcaliso < Cuts[12]) - ChosenOnes.push_back(elec); - } - } - } - } - } - } - // ChosenOnes.push_back(elec); - } - } - } - return ChosenOnes; -} diff --git a/ElectroWeakAnalysis/ZEE/interface/ErsatzMEt.h b/ElectroWeakAnalysis/ZEE/interface/ErsatzMEt.h deleted file mode 100644 index c6aa5c08f43fd..0000000000000 --- a/ElectroWeakAnalysis/ZEE/interface/ErsatzMEt.h +++ /dev/null @@ -1,213 +0,0 @@ -#ifndef ElectroWeakAnalysis_ErsatzMEt_h -#define ElectroWeakAnalysis_ErsatzMEt_h -// -*- C++ -*- -// -// Package: ErsatzMEt -// Class: ErsatzMEt -// -/**\class ErsatzMEt ErsatzMEt.cc ElectroWeakAnalysis/ErsatzMEt/src/ErsatzMEt.cc - - Description: - - Implementation: - -*/ -// -// Original Author: David Wardrope -// Created: Tue Nov 11 16:47:29 GMT 2008 -// -// - -// system include files -#include - -//Framework -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -//Random Number Generator -#include "FWCore/Utilities/interface/RandomNumberGenerator.h" -#include "CLHEP/Random/RandFlat.h" -//CMSSW Containers -#include "DataFormats/Common/interface/ValueMap.h" -//Egamma Objects -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -//ECAL -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h" -#include "RecoEcal/EgammaClusterAlgos/interface/EgammaSCEnergyCorrectionAlgo.h" -//Geometry -#include "RecoCaloTools/Navigation/interface/CaloNavigator.h" -#include "Geometry/CaloTopology/interface/CaloTopology.h" -#include "Geometry/EcalAlgo/interface/EcalBarrelGeometry.h" -#include "Geometry/EcalAlgo/interface/EcalEndcapGeometry.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "Geometry/Records/interface/CaloTopologyRecord.h" -//DetIds -#include "DataFormats/CaloTowers/interface/CaloTowerDetId.h" -//Other Objects -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/Common/interface/TriggerResults.h" -#include "HLTrigger/HLTcore/interface/HLTConfigProvider.h" -#include "DataFormats/METReco/interface/CaloMET.h" -#include "DataFormats/METReco/interface/CaloMETFwd.h" -#include "DataFormats/METReco/interface/GenMET.h" -#include "DataFormats/METReco/interface/GenMETFwd.h" -#include "DataFormats/METReco/interface/PFMET.h" -#include "DataFormats/METReco/interface/PFMETFwd.h" -#include "DataFormats/METReco/interface/MET.h" -#include "DataFormats/METReco/interface/METFwd.h" -//Physics Tools -#include "DataFormats/Math/interface/deltaR.h" - -//Maths -#include "Math/GenVector/VectorUtil.h" -//ROOT -#include "TTree.h" -#include "TH1.h" -#include "TH2.h" -//Helper Functions -#include "ElectroWeakAnalysis/ZEE/interface/UniqueElectrons.h" -#include "ElectroWeakAnalysis/ZEE/interface/ElectronSelector.h" -#include "ElectroWeakAnalysis/ZEE/interface/CaloVectors.h" -#include "ElectroWeakAnalysis/ZEE/interface/SCEnergyCorrections.h" - -#define nEntries_arr_ 4 -//#include "DataFormats/EgammaReco/interface/SuperCluster.h" -// -// class declaration -// - -class ErsatzMEt : public edm::EDAnalyzer { -public: - explicit ErsatzMEt(const edm::ParameterSet&); - ~ErsatzMEt() override; - -private: - void beginJob() override; - void analyze(const edm::Event&, const edm::EventSetup&) override; - // std::map probeFinder(const std::vector&, - // const edm::Handle&, - // const edm::Handle&); - std::map probeFinder(const std::vector&, - const edm::Handle); - reco::MET ersatzFabrik(const reco::GsfElectronRef&, const reco::SuperCluster&, const reco::MET&, const int); - reco::MET ersatzFabrik(const reco::GsfElectronRef&, const reco::GsfElectronRef&, const reco::MET&); - bool isInBarrel(double); - bool isInEndCap(double); - bool isInFiducial(double); - - void endJob() override; - - // ----------member data --------------------------- - edm::EDGetTokenT MCTruthCollection_; - edm::EDGetTokenT ElectronCollection_; - edm::EDGetTokenT HybridScCollection_; - edm::EDGetTokenT M5x5ScCollection_; - edm::EDGetTokenT GenMEtCollection_; - edm::EDGetTokenT CaloMEtCollection_; - edm::EDGetTokenT T1MEtCollection_; - edm::EDGetTokenT PfMEtCollection_; - edm::EDGetTokenT TcMEtCollection_; - edm::EDGetTokenT TriggerEvent_; - edm::EDGetTokenT TriggerResults_; - edm::InputTag TriggerPath_; - std::string TriggerName_, ProcessName_; - edm::ParameterSet hyb_fCorrPSet_, m5x5_fCorrPSet_; - double mW_, mZ_, mTPmin_, mTPmax_; - double BarrelEtaMax_, EndCapEtaMin_, EndCapEtaMax_; - - enum cut_index_t { - EtCut_, - EB_sIhIh_, - EB_dEtaIn_, - EB_dPhiIn_, - EB_TrckIso_, - EB_EcalIso_, - EB_HcalIso_, - EE_sIhIh_, - EE_dEtaIn_, - EE_dPhiIn_, - EE_TrckIso_, - EE_EcalIso_, - EE_HcalIso_ - }; - - std::vector CutVector_; - - int etaWidth_, phiWidth_; - bool Zevent_, HLTPathCheck_; - // std::vector EtaWeights_; - HLTConfigProvider hltConfig_; - - edm::ESHandle geoHandle_; - edm::ESHandle pTopology_; - //Output variables - TTree* t_; - int nTags_, nProbes_; - double CaloMEt_, T1MEt_, PfMEt_, TcMEt_; - double CaloMEtphi_, T1MEtphi_, PfMEtphi_, TcMEtphi_; - int McElec_nZmum_, McElec_nFinal_; - double McZ_m_, McZ_pt_, McZ_phi_, McZ_eta_, McZ_y_; - double McZ_rescM_, McZ_rescPt_, McZ_rescEta_, McZ_rescPhi_, McZ_rescY_; - - int probe_nClus_[nEntries_arr_]; - int tag_q_[nEntries_arr_]; - double tag_pt_[nEntries_arr_], tag_eta_[nEntries_arr_], tag_phi_[nEntries_arr_]; - //double tag_caloV1_rescPt_[nEntries_arr_], tag_caloV1_rescEta_[nEntries_arr_], tag_caloV1_rescPhi_[nEntries_arr_]; - //double tag_caloV2_rescPt_[nEntries_arr_], tag_caloV2_rescEta_[nEntries_arr_], tag_caloV2_rescPhi_[nEntries_arr_]; - //double tag_caloV3_rescPt_[nEntries_arr_], tag_caloV3_rescEta_[nEntries_arr_], tag_caloV3_rescPhi_[nEntries_arr_]; - //double tag_caloV4_rescPt_[nEntries_arr_], tag_caloV4_rescEta_[nEntries_arr_], tag_caloV4_rescPhi_[nEntries_arr_]; - double tag_rescPt_[nEntries_arr_], tag_rescEta_[nEntries_arr_], tag_rescPhi_[nEntries_arr_]; - double tag_sIhIh_[nEntries_arr_], tag_dPhiIn_[nEntries_arr_], tag_dEtaIn_[nEntries_arr_]; - double tag_trckIso_[nEntries_arr_], tag_ecalIso_[nEntries_arr_], tag_hcalIso_[nEntries_arr_]; - double tag_e2x5Max_[nEntries_arr_], tag_e1x5Max_[nEntries_arr_], tag_e5x5_[nEntries_arr_]; - double tag_hoe_[nEntries_arr_], tag_eop_[nEntries_arr_], tag_pin_[nEntries_arr_], tag_pout_[nEntries_arr_]; - int probe_q_[nEntries_arr_]; - double probe_pt_[nEntries_arr_], probe_eta_[nEntries_arr_], probe_phi_[nEntries_arr_]; - double probe_rescPt_[nEntries_arr_], probe_rescEta_[nEntries_arr_], probe_rescPhi_[nEntries_arr_]; - double probe_sIhIh_[nEntries_arr_], probe_dPhiIn_[nEntries_arr_], probe_dEtaIn_[nEntries_arr_]; - double probe_trckIso_[nEntries_arr_], probe_ecalIso_[nEntries_arr_], probe_hcalIso_[nEntries_arr_]; - double probe_e2x5Max_[nEntries_arr_], probe_e1x5Max_[nEntries_arr_], probe_e5x5_[nEntries_arr_]; - double probe_hoe_[nEntries_arr_], probe_eop_[nEntries_arr_], probe_pin_[nEntries_arr_], probe_pout_[nEntries_arr_]; - double Z_pt_[nEntries_arr_], Z_eta_[nEntries_arr_], Z_phi_[nEntries_arr_], Z_m_[nEntries_arr_], Z_y_[nEntries_arr_]; - double Z_rescPt_[nEntries_arr_], Z_rescEta_[nEntries_arr_], Z_rescPhi_[nEntries_arr_], Z_rescM_[nEntries_arr_], - Z_rescY_[nEntries_arr_]; - double Z_probe_dPhi_[nEntries_arr_]; - double ErsatzV1CaloMEt_[nEntries_arr_], ErsatzV1CaloMt_[nEntries_arr_], ErsatzV1CaloMEtPhi_[nEntries_arr_]; - double ErsatzV2CaloMEt_[nEntries_arr_], ErsatzV2CaloMEtPhi_[nEntries_arr_], ErsatzV2CaloMt_[nEntries_arr_]; - double ErsatzV3CaloMEt_[nEntries_arr_], ErsatzV3CaloMEtPhi_[nEntries_arr_], ErsatzV3CaloMt_[nEntries_arr_]; - double ErsatzV4CaloMEt_[nEntries_arr_], ErsatzV4CaloMEtPhi_[nEntries_arr_], ErsatzV4CaloMt_[nEntries_arr_]; - double ErsatzV1T1MEt_[nEntries_arr_], ErsatzV1T1Mt_[nEntries_arr_], ErsatzV1T1MEtPhi_[nEntries_arr_]; - double ErsatzV1PfMEt_[nEntries_arr_], ErsatzV1PfMt_[nEntries_arr_], ErsatzV1PfMEtPhi_[nEntries_arr_]; - double ErsatzV1TcMEt_[nEntries_arr_], ErsatzV1TcMt_[nEntries_arr_], ErsatzV1TcMEtPhi_[nEntries_arr_]; - double ErsatzV1_Mesc_[nEntries_arr_], ErsatzV1_rescMesc_[nEntries_arr_]; - double ErsatzV2_Mesc_[nEntries_arr_], ErsatzV2_rescMesc_[nEntries_arr_]; - double ErsatzV3_Mesc_[nEntries_arr_], ErsatzV3_rescMesc_[nEntries_arr_]; - double ErsatzV4_Mesc_[nEntries_arr_], ErsatzV4_rescMesc_[nEntries_arr_]; - - double McElec_pt_[nEntries_arr_], McElec_eta_[nEntries_arr_], McElec_phi_[nEntries_arr_]; - double McElec_rescPt_[nEntries_arr_], McElec_rescEta_[nEntries_arr_], McElec_rescPhi_[nEntries_arr_]; - double McProbe_pt_[nEntries_arr_], McProbe_eta_[nEntries_arr_], McProbe_phi_[nEntries_arr_]; - double McProbe_rescPt_[nEntries_arr_], McProbe_rescEta_[nEntries_arr_], McProbe_rescPhi_[nEntries_arr_]; - double McElecProbe_dPhi_[nEntries_arr_], McElecProbe_dEta_[nEntries_arr_], McElecProbe_dR_[nEntries_arr_]; - - double probe_d_MCE_SCE_[nEntries_arr_]; - double probe_sc_pt_[nEntries_arr_], probe_sc_eta_[nEntries_arr_], probe_sc_phi_[nEntries_arr_]; - double probe_sc_E_[nEntries_arr_], probe_sc_rawE_[nEntries_arr_], probe_sc_nClus_[nEntries_arr_]; - double probe_scV2_E_[nEntries_arr_]; - double probe_scV3_E_[nEntries_arr_]; - double probe_scV4_E_[nEntries_arr_]; - - int iComb_; -}; -#endif diff --git a/ElectroWeakAnalysis/ZEE/interface/SCEnergyCorrections.h b/ElectroWeakAnalysis/ZEE/interface/SCEnergyCorrections.h deleted file mode 100644 index c0806a50dcab3..0000000000000 --- a/ElectroWeakAnalysis/ZEE/interface/SCEnergyCorrections.h +++ /dev/null @@ -1,111 +0,0 @@ -#include "DataFormats/EgammaReco/interface/BasicClusterFwd.h" -#include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -reco::CaloClusterPtrVector CaloClusterVectorCopier(const reco::SuperCluster& sc); - -reco::SuperCluster fEtaScCorr(const reco::SuperCluster& sc) { - reco::CaloClusterPtrVector bcs = CaloClusterVectorCopier(sc); - double ieta = fabs(sc.eta()) * (5 / 0.087); - double p0 = 40.2198; - double p1 = -3.03103e-6; - double newE; - // std::cout << "Corrected E = Raw E * (1+ p1*(ieta - p0)*(ieta - p0))"<< std::endl; - if (ieta < p0) - newE = sc.rawEnergy(); - else - newE = sc.rawEnergy() / (1 + p1 * (ieta - p0) * (ieta - p0)); - - reco::SuperCluster corrSc(newE, sc.position(), sc.seed(), bcs, sc.preshowerEnergy(), 0., 0.); - return corrSc; -} - -reco::SuperCluster fBremScCorr(const reco::SuperCluster& sc, const edm::ParameterSet& ps) { - std::vector fBrem = ps.getParameter >("fBremVec"); - double bremFrLowThr = ps.getParameter("brLinearLowThr"); - double bremFrHighThr = ps.getParameter("brLinearHighThr"); - - reco::CaloClusterPtrVector bcs = CaloClusterVectorCopier(sc); - double bremFrac = sc.phiWidth() / sc.etaWidth(); - double newE = sc.energy(); - if (fabs(sc.eta()) < 1.479) { - reco::SuperCluster fEtaSC = fEtaScCorr(sc); - reco::CaloClusterPtrVector bcs = CaloClusterVectorCopier(sc); - newE = fEtaSC.energy(); - } - - if (bremFrac < bremFrLowThr) - bremFrac = bremFrLowThr; - if (bremFrac < bremFrHighThr) - bremFrac = bremFrHighThr; - - double p0 = fBrem[0]; - double p1 = fBrem[1]; - double p2 = fBrem[2]; - double p3 = fBrem[3]; - double p4 = fBrem[4]; - // - double threshold = p4; - - double y = p0 * threshold * threshold + p1 * threshold + p2; - double yprime = 2 * p0 * threshold + p1; - double a = p3; - double b = yprime - 2 * a * threshold; - double c = y - a * threshold * threshold - b * threshold; - - double fCorr = 1; - if (bremFrac < threshold) - fCorr = p0 * bremFrac * bremFrac + p1 * bremFrac + p2; - else - fCorr = a * bremFrac * bremFrac + b * bremFrac + c; - - newE /= fCorr; - reco::SuperCluster corrSc(newE, sc.position(), sc.seed(), bcs, sc.preshowerEnergy(), 0., 0.); - return corrSc; -} - -reco::SuperCluster fEtEtaCorr(const reco::SuperCluster& sc, const edm::ParameterSet& ps) { - // et -- Et of the SuperCluster (with respect to (0,0,0)) - // eta -- eta of the SuperCluster - std::vector fEtEtaParams = ps.getParameter >("fEtEtaParamsVec"); - - reco::SuperCluster fBremSC = fBremScCorr(sc, ps); - reco::CaloClusterPtrVector bcs = CaloClusterVectorCopier(sc); - - double eta = sc.eta(); - double et = fBremSC.energy() / cosh(eta); - double fCorr = 0.; - - double p0 = fEtEtaParams[0] + fEtEtaParams[1] / (et + fEtEtaParams[2]) + fEtEtaParams[3] / (et * et); - double p1 = fEtEtaParams[4] + fEtEtaParams[5] / (et + fEtEtaParams[6]) + fEtEtaParams[7] / (et * et); - double p2 = fEtEtaParams[8] + fEtEtaParams[9] / (et + fEtEtaParams[10]) + fEtEtaParams[11] / (et * et); - - fCorr = p0 + p1 * atan(fEtEtaParams[12] * (fEtEtaParams[13] - fabs(eta))) + fEtEtaParams[14] * fabs(eta) + - p1 * fEtEtaParams[15] * fabs(eta) + p2 * fEtEtaParams[16] * eta * eta; - - if (fCorr < 0.5) - fCorr = 0.5; - - double newE = et / (fCorr * cosh(eta)); - reco::SuperCluster corrSc(newE, sc.position(), sc.seed(), bcs, sc.preshowerEnergy(), 0., 0.); - return corrSc; -} - -reco::SuperCluster fEAddScCorr(const reco::SuperCluster& sc, double Ecorr) { - reco::CaloClusterPtrVector bcs = CaloClusterVectorCopier(sc); - - double newE = sc.rawEnergy() + Ecorr; - reco::SuperCluster corrSc(newE, sc.position(), sc.seed(), bcs, sc.preshowerEnergy(), 0., 0.); - return corrSc; -} - -reco::CaloClusterPtrVector CaloClusterVectorCopier(const reco::SuperCluster& sc) { - reco::CaloClusterPtrVector clusters_v; - - for (reco::CaloCluster_iterator cluster = sc.clustersBegin(); cluster != sc.clustersEnd(); cluster++) { - clusters_v.push_back(*cluster); - } - - return clusters_v; -} diff --git a/ElectroWeakAnalysis/ZEE/interface/UniqueElectrons.h b/ElectroWeakAnalysis/ZEE/interface/UniqueElectrons.h deleted file mode 100644 index 226c0a760517b..0000000000000 --- a/ElectroWeakAnalysis/ZEE/interface/UniqueElectrons.h +++ /dev/null @@ -1,31 +0,0 @@ -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" - -#include - -std::vector uniqueElectronFinder(edm::Handle& pElectrons) { - const reco::GsfElectronCollection* electrons = pElectrons.product(); - //Remove duplicate electrons which share a supercluster - std::vector UniqueElectrons; - int index = 0; - for (reco::GsfElectronCollection::const_iterator elec = electrons->begin(); elec != electrons->end(); ++elec) { - const reco::GsfElectronRef electronRef(pElectrons, index); - reco::GsfElectronCollection::const_iterator BestDuplicate = elec; - for (reco::GsfElectronCollection::const_iterator elec2 = electrons->begin(); elec2 != electrons->end(); ++elec2) { - if (elec != elec2) { - if (elec->superCluster() == elec2->superCluster()) { - edm::LogDebug_("", "MySelection.cc", 122) << "e/p Best duplicate = " << BestDuplicate->eSuperClusterOverP() - << "\telec2 = " << elec2->eSuperClusterOverP(); - if (fabs(BestDuplicate->eSuperClusterOverP() - 1.) >= fabs(elec2->eSuperClusterOverP() - 1.)) { - BestDuplicate = elec2; - edm::LogDebug_("", "MySelection.cc", 122) << "elec2 is now best duplicate"; - } else - edm::LogDebug_("", "MySelection.cc", 122) << "BestDuplicate remains best duplicate"; - } - } - } - if (BestDuplicate == elec) - UniqueElectrons.push_back(electronRef); - ++index; - } - return UniqueElectrons; -} diff --git a/ElectroWeakAnalysis/ZEE/interface/ZeePlots.h b/ElectroWeakAnalysis/ZEE/interface/ZeePlots.h deleted file mode 100644 index 4f51c2fe5d7d0..0000000000000 --- a/ElectroWeakAnalysis/ZEE/interface/ZeePlots.h +++ /dev/null @@ -1,358 +0,0 @@ -#ifndef ZeePlots_H -#define ZeePlots_H - -#include - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/PatCandidates/interface/Electron.h" -#include "DataFormats/PatCandidates/interface/MET.h" -#include "DataFormats/PatCandidates/interface/CompositeCandidate.h" -#include "DataFormats/EgammaCandidates/interface/Electron.h" -#include "DataFormats/Math/interface/Vector3D.h" -#include "DataFormats/JetReco/interface/PFJet.h" -#include "DataFormats/JetReco/interface/CaloJet.h" -#include "DataFormats/JetReco/interface/PFJetCollection.h" -#include "DataFormats/JetReco/interface/CaloJetCollection.h" - -#include -#include -#include "TFile.h" -#include "TTree.h" -#include "TString.h" -#include "TLorentzVector.h" -#include "TH1F.h" -#include "TMath.h" - -// -// class decleration -// - -class ZeePlots : public edm::EDAnalyzer { -public: - explicit ZeePlots(const edm::ParameterSet &); - ~ZeePlots() override; - -private: - void beginJob() override; - void analyze(const edm::Event &, const edm::EventSetup &) override; - void endJob() override; - - // ----------member data --------------------------- - - // for the 1st leg - Bool_t CheckCuts1(const pat::Electron *); - Bool_t CheckCut1(const pat::Electron *, Int_t); - Bool_t CheckCuts1Inverse(const pat::Electron *); - Bool_t CheckCut1Inv(const pat::Electron *, Int_t); - Bool_t CheckCuts1NminusOne(const pat::Electron *, Int_t); - - // for the 2nd leg - Bool_t CheckCuts2(const pat::Electron *); - Bool_t CheckCut2(const pat::Electron *, Int_t); - Bool_t CheckCuts2Inverse(const pat::Electron *); - Bool_t CheckCut2Inv(const pat::Electron *, Int_t); - Bool_t CheckCuts2NminusOne(const pat::Electron *, Int_t); - - Double_t ReturnCandVar(const pat::Electron *, Int_t); - - Bool_t PassPreselectionCriteria1(const pat::Electron *); - Bool_t PassPreselectionCriteria2(const pat::Electron *); - - Bool_t useSameSelectionOnBothElectrons_; - - // for the extra identifications and selections - Bool_t usePrecalcID1_; - std::string usePrecalcIDSign1_; - std::string usePrecalcIDType1_; - Double_t usePrecalcIDValue1_; - - Bool_t usePrecalcID2_; - std::string usePrecalcIDSign2_; - std::string usePrecalcIDType2_; - Double_t usePrecalcIDValue2_; - - // for extra preselection criteria: - Bool_t usePreselection1_; - Bool_t useValidFirstPXBHit1_; - Bool_t useConversionRejection1_; - Bool_t useExpectedMissingHits1_; - Bool_t maxNumberOfExpectedMissingHits1_; - // - Bool_t usePreselection2_; - Bool_t useValidFirstPXBHit2_; - Bool_t useConversionRejection2_; - Bool_t useExpectedMissingHits2_; - Bool_t maxNumberOfExpectedMissingHits2_; - - // other - std::string outputFile_; - edm::EDGetTokenT zeeCollectionToken_; - edm::EDGetTokenT caloJetCollectionToken_; - edm::EDGetTokenT pfJetCollectionToken_; - - TFile *histofile; - - // the histograms - TH1F *h_mee; - TH1F *h_mee_EBEB; - TH1F *h_mee_EBEE; - TH1F *h_mee_EEEE; - TH1F *h_Zcand_PT; - TH1F *h_Zcand_Y; - - TH1F *h_e_PT; - TH1F *h_e_ETA; - TH1F *h_e_PHI; - - TH1F *h_EB_trkiso; - TH1F *h_EB_ecaliso; - TH1F *h_EB_hcaliso; - TH1F *h_EB_sIetaIeta; - TH1F *h_EB_dphi; - TH1F *h_EB_deta; - TH1F *h_EB_HoE; - - TH1F *h_EE_trkiso; - TH1F *h_EE_ecaliso; - TH1F *h_EE_hcaliso; - TH1F *h_EE_sIetaIeta; - TH1F *h_EE_dphi; - TH1F *h_EE_deta; - TH1F *h_EE_HoE; - - // - TH1F *h_trackIso_eb_NmOne; - TH1F *h_trackIso_ee_NmOne; - - // *********************************** - // - // the selection cuts - - // /* Electron 0 */ - // Double_t trackIso0_EB_ ; Double_t trackIso0_EE_ ; - // Double_t ecalIso0_EB_ ; Double_t ecalIso0_EE_ ; - // Double_t hcalIso0_EB_ ; Double_t hcalIso0_EE_ ; - // - // Double_t sihih0_EB_ ; Double_t sihih0_EE_ ; - // Double_t dphi0_EB_ ; Double_t dphi0_EE_ ; - // Double_t deta0_EB_ ; Double_t deta0_EE_ ; - // Double_t hoe0_EB_ ; Double_t hoe0_EE_ ; - // Double_t cIso0_EB_ ; Double_t cIso0_EE_ ; - // Double_t tip_bspot0_EB_ ; Double_t tip_bspot0_EE_ ; - // Double_t eop0_EB_ ; Double_t eop0_EE_ ; - // - // Double_t trackIsoUser0_EB_ ; Double_t trackIsoUser0_EE_ ; - // Double_t ecalIsoUser0_EB_ ; Double_t ecalIsoUser0_EE_ ; - // Double_t hcalIsoUser0_EB_ ; Double_t hcalIsoUser0_EE_ ; - // //................................................................. - // Bool_t trackIso0_EB_inv ; Bool_t trackIso0_EE_inv ; - // Bool_t ecalIso0_EB_inv ; Bool_t ecalIso0_EE_inv ; - // Bool_t hcalIso0_EB_inv ; Bool_t hcalIso0_EE_inv ; - // - // Bool_t sihih0_EB_inv ; Bool_t sihih0_EE_inv ; - // Bool_t dphi0_EB_inv ; Bool_t dphi0_EE_inv ; - // Bool_t deta0_EB_inv ; Bool_t deta0_EE_inv ; - // Bool_t hoe0_EB_inv ; Bool_t hoe0_EE_inv ; - // Bool_t cIso0_EB_inv ; Bool_t cIso0_EE_inv ; - // Bool_t tip_bspot0_EB_inv ; Bool_t tip_bspot0_EE_inv ; - // Bool_t eop0_EB_inv ; Bool_t eop0_EE_inv ; - // - // Bool_t trackIsoUser0_EB_inv ; Bool_t trackIsoUser0_EE_inv ; - // Bool_t ecalIsoUser0_EB_inv ; Bool_t ecalIsoUser0_EE_inv ; - // Bool_t hcalIsoUser0_EB_inv ; Bool_t hcalIsoUser0_EE_inv ; - - /* Electron 1 */ - Double_t trackIso1_EB_; - Double_t trackIso1_EE_; - Double_t ecalIso1_EB_; - Double_t ecalIso1_EE_; - Double_t hcalIso1_EB_; - Double_t hcalIso1_EE_; - - Double_t sihih1_EB_; - Double_t sihih1_EE_; - Double_t dphi1_EB_; - Double_t dphi1_EE_; - Double_t deta1_EB_; - Double_t deta1_EE_; - Double_t hoe1_EB_; - Double_t hoe1_EE_; - Double_t cIso1_EB_; - Double_t cIso1_EE_; - Double_t tip_bspot1_EB_; - Double_t tip_bspot1_EE_; - Double_t eop1_EB_; - Double_t eop1_EE_; - - Double_t trackIsoUser1_EB_; - Double_t trackIsoUser1_EE_; - Double_t ecalIsoUser1_EB_; - Double_t ecalIsoUser1_EE_; - Double_t hcalIsoUser1_EB_; - Double_t hcalIsoUser1_EE_; - //................................................................. - Bool_t trackIso1_EB_inv; - Bool_t trackIso1_EE_inv; - Bool_t ecalIso1_EB_inv; - Bool_t ecalIso1_EE_inv; - Bool_t hcalIso1_EB_inv; - Bool_t hcalIso1_EE_inv; - - Bool_t sihih1_EB_inv; - Bool_t sihih1_EE_inv; - Bool_t dphi1_EB_inv; - Bool_t dphi1_EE_inv; - Bool_t deta1_EB_inv; - Bool_t deta1_EE_inv; - Bool_t hoe1_EB_inv; - Bool_t hoe1_EE_inv; - Bool_t cIso1_EB_inv; - Bool_t cIso1_EE_inv; - Bool_t tip_bspot1_EB_inv; - Bool_t tip_bspot1_EE_inv; - Bool_t eop1_EB_inv; - Bool_t eop1_EE_inv; - - Bool_t trackIsoUser1_EB_inv; - Bool_t trackIsoUser1_EE_inv; - Bool_t ecalIsoUser1_EB_inv; - Bool_t ecalIsoUser1_EE_inv; - Bool_t hcalIsoUser1_EB_inv; - Bool_t hcalIsoUser1_EE_inv; - - /* Electron 2 */ - Double_t trackIso2_EB_; - Double_t trackIso2_EE_; - Double_t ecalIso2_EB_; - Double_t ecalIso2_EE_; - Double_t hcalIso2_EB_; - Double_t hcalIso2_EE_; - - Double_t sihih2_EB_; - Double_t sihih2_EE_; - Double_t dphi2_EB_; - Double_t dphi2_EE_; - Double_t deta2_EB_; - Double_t deta2_EE_; - Double_t hoe2_EB_; - Double_t hoe2_EE_; - Double_t cIso2_EB_; - Double_t cIso2_EE_; - Double_t tip_bspot2_EB_; - Double_t tip_bspot2_EE_; - Double_t eop2_EB_; - Double_t eop2_EE_; - - Double_t trackIsoUser2_EB_; - Double_t trackIsoUser2_EE_; - Double_t ecalIsoUser2_EB_; - Double_t ecalIsoUser2_EE_; - Double_t hcalIsoUser2_EB_; - Double_t hcalIsoUser2_EE_; - //................................................................. - Bool_t trackIso2_EB_inv; - Bool_t trackIso2_EE_inv; - Bool_t ecalIso2_EB_inv; - Bool_t ecalIso2_EE_inv; - Bool_t hcalIso2_EB_inv; - Bool_t hcalIso2_EE_inv; - - Bool_t sihih2_EB_inv; - Bool_t sihih2_EE_inv; - Bool_t dphi2_EB_inv; - Bool_t dphi2_EE_inv; - Bool_t deta2_EB_inv; - Bool_t deta2_EE_inv; - Bool_t hoe2_EB_inv; - Bool_t hoe2_EE_inv; - Bool_t cIso2_EB_inv; - Bool_t cIso2_EE_inv; - Bool_t tip_bspot2_EB_inv; - Bool_t tip_bspot2_EE_inv; - Bool_t eop2_EB_inv; - Bool_t eop2_EE_inv; - - Bool_t trackIsoUser2_EB_inv; - Bool_t trackIsoUser2_EE_inv; - Bool_t ecalIsoUser2_EB_inv; - Bool_t ecalIsoUser2_EE_inv; - Bool_t hcalIsoUser2_EB_inv; - Bool_t hcalIsoUser2_EE_inv; - - Int_t nBarrelVars_; - - std::vector CutVars1_; - std::vector CutVars2_; - - std::vector InvVars1_; - std::vector InvVars2_; - - // - // variables related to the VBTF root tuples: - // - Int_t runNumber, lumiSection; - - Long64_t eventNumber; - - Float_t ele1_sc_energy, ele1_sc_eta, ele1_sc_phi; - Float_t ele1_sc_gsf_et; - Float_t ele1_cand_et, ele1_cand_eta, ele1_cand_phi; - Float_t ele1_iso_track, ele1_iso_ecal, ele1_iso_hcal; - Float_t ele1_id_sihih, ele1_id_dphi, ele1_id_deta, ele1_id_hoe; - Float_t ele1_cr_mhitsinner, ele1_cr_dcot, ele1_cr_dist; - Float_t ele1_vx, ele1_vy, ele1_vz; - - Float_t pv_x1, pv_y1, pv_z1; - - Int_t ele1_gsfCharge, ele1_ctfCharge, ele1_scPixCharge; - Float_t ele1_eop, ele1_tip_bs, ele1_tip_pv; - - Float_t ele2_sc_energy, ele2_sc_eta, ele2_sc_phi; - Float_t ele2_sc_gsf_et; - Float_t ele2_cand_et, ele2_cand_eta, ele2_cand_phi; - Float_t ele2_iso_track, ele2_iso_ecal, ele2_iso_hcal; - Float_t ele2_id_sihih, ele2_id_dphi, ele2_id_deta, ele2_id_hoe; - Float_t ele2_cr_mhitsinner, ele2_cr_dcot, ele2_cr_dist; - Float_t ele2_vx, ele2_vy, ele2_vz; - - Float_t pv_x2, pv_y2, pv_z2; - - Int_t ele2_gsfCharge, ele2_ctfCharge, ele2_scPixCharge; - Float_t ele2_eop, ele2_tip_bs, ele2_tip_pv; - - Float_t event_caloMET, event_pfMET, event_tcMET; - Float_t event_caloMET_phi, event_pfMET_phi, event_tcMET_phi; - - Float_t event_Mee; - - Float_t calojet_et[5]; - Float_t calojet_eta[5]; - Float_t calojet_phi[5]; - Float_t pfjet_et[5]; - Float_t pfjet_eta[5]; - Float_t pfjet_phi[5]; - - Int_t event_datasetTag; - - TFile *ZEE_VBTFpreseleFile_; - TFile *ZEE_VBTFselectionFile_; - - TTree *vbtfSele_tree; - TTree *vbtfPresele_tree; - - std::string ZEE_VBTFselectionFileName_; - std::string ZEE_VBTFpreseleFileName_; - - Bool_t includeJetInformationInNtuples_; - Double_t DRJetFromElectron_; - Int_t DatasetTag_; -}; - -#endif diff --git a/ElectroWeakAnalysis/ZEE/macros/ApplySelectionCuts.cpp b/ElectroWeakAnalysis/ZEE/macros/ApplySelectionCuts.cpp deleted file mode 100644 index 35b929f924196..0000000000000 --- a/ElectroWeakAnalysis/ZEE/macros/ApplySelectionCuts.cpp +++ /dev/null @@ -1,1353 +0,0 @@ -#include "TFile.h" -#include "TTree.h" -#include "TH1.h" -#include "TH2.h" -#include "TString.h" -#include -#include -#include -//#include - -using namespace std; - -//double deltaR(double eta1, double phi1, double eta2, double phi2); -//double deltaPhi(double phi1, double phi2); -void ApplySelectionCuts(TString InFileName) -{ - // Declare electron cut value variables - double cMEt, cPt; - double cECALiso_EB, cECALiso_EE; - double cHCALiso_EB, cHCALiso_EE; - double cTrackiso_EB, cTrackiso_EE; - double cDeltaEta_EB, cDeltaEta_EE; - double cDeltaPhi_EB, cDeltaPhi_EE; - double csIhIh_EB, csIhIh_EE; - // Declare neutrino cut value variables - double cHCAL; - double cHCALEt; - double cf1x5, cf2x5; - int celecmatch; - double cnusIhIh; - - // Import cut values from config file - ifstream cuts; - cuts.open("CutValues.txt", ifstream::in); - cuts >> cMEt; - cout << "MEt cut " << cMEt << "\n" << endl; - - cout << "Electron selection cuts:" << endl; - cuts >> cPt; - cout << "Pt cut " << cPt << endl; - cuts >> cECALiso_EB; - cout << "ECAL Isolation cut (EB) " << cECALiso_EB << endl; - cuts >> cECALiso_EE; - cout << "ECAL Isolation cut (EE) " << cECALiso_EE << endl; - cuts >> cHCALiso_EB; - cout << "HCAL Isolation cut (EB) " << cHCALiso_EB << endl; - cuts >> cHCALiso_EE; - cout << "HCAL Isolation cut (EE) " << cHCALiso_EE << endl; - cuts >> cTrackiso_EB; - cout << "Track Isolation cut (EB) " << cTrackiso_EB << endl; - cuts >> cTrackiso_EE; - cout << "Track Isolation cut (EE) " << cTrackiso_EE << endl; - cuts >> cDeltaEta_EB; - cout << "Delta Eta cut (EB) " << cDeltaEta_EB << endl; - cuts >> cDeltaEta_EE; - cout << "Delta Eta cut (EE) " << cDeltaEta_EE << endl; - cuts >> cDeltaPhi_EB; - cout << "Delta Phi cut (EB) " << cDeltaPhi_EB << endl; - cuts >> cDeltaPhi_EE; - cout << "Delta Phi cut (EE) " << cDeltaPhi_EE << endl; - cuts >> csIhIh_EB; - cout << "Sigma iEta iEta cut (EB) " << csIhIh_EB << endl; - cuts >> csIhIh_EE; - cout << "Sigma iEta iEta cut (EE) " << csIhIh_EE << "\n" << endl; - - cout << "Probe selection cuts:" << endl; - cuts >> cHCAL; - cout << "HCAL Energy cut " << cHCAL << endl; - cuts >> cf1x5; - cout << "Fraction of energy in 1x5 cut " << cf1x5 << endl; - cuts >> cf2x5; - cout << "Fraction of energy in 2x5 cut " << cf2x5 << endl; - cuts >> celecmatch; - cout << "Require electron match " << celecmatch << endl; - cuts >> cnusIhIh; - cout << "Sigma iEta iEta cut " << cnusIhIh << endl; - cuts >> cHCALEt; - cout << "HCAL Transverse Energy cut " << cHCALEt << "\n" << endl; -/* - cuts >> cPt; - cuts >> cECALiso_EB; - cuts >> cECALiso_EE; - cuts >> cHCALiso_EB; - cuts >> cHCALiso_EE; - cuts >> cTrackiso_EB; - cuts >> cTrackiso_EE; - cuts >> cDeltaEta_EB; - cuts >> cDeltaEta_EE; - cuts >> cDeltaPhi_EB; - cuts >> cDeltaPhi_EE; - cuts >> csIhIh_EB; - cuts >> csIhIh_EE; - cuts >> cHCAL; - cuts >> cf1x5; - cuts >> cf2x5; - cuts >> celecmatch; - cuts >> cnusIhIh; - cuts >> cHCALEt; -*/ - cuts.close(); - - cout << "Got Cut Values" << endl; - // Import probe selection efficiency weights -/* - double nueff[345]; - ifstream weightsin("EtaWeights.txt"); - - for(int eta=0; eta < 345; ++eta) - { - double weight; - weightsin >> weight; - nueff[eta] = weight; - } -*/ - int nTags, nErNu; - int nMcElecs_Zmum, nMcElecs_Final; - int nRecHitsInStrip[4], nRecHitsInCone[4]; - - double Z_pt[4]; - - double elec_q[4], elec_pt[4], elec_eta[4], elec_phi[4]; - double elec_rescPt[4], elec_rescEta[4];//, elec_rescPhi[4]; - - double /*probe_q[4], */probe_pt[4], probe_eta[4], probe_phi[4]; - double probe_rescPt[4], probe_rescEta[4];//, probe_rescPhi[4]; - - double ErsatzV1MEt[4], ErsatzV1Mt[4], ErsatzV1MEtphi[4]; - double ErsatzV1aMEt[4], ErsatzV1aMt[4], ErsatzV1aMEtphi[4]; - double ErsatzV1bMEt[4], ErsatzV1bMt[4], ErsatzV1bMEtphi[4]; - double ErsatzV1cMEt[4]/*, ErsatzV1cMt[4]*/, ErsatzV1cMEtphi[4]; - double ErsatzV2MEt[4], ErsatzV2Mt[4], ErsatzV2MEtphi[4]; - double caloMEt; - double mesc[4], rescMesc[4]; - - double elec_trkIso[4], elec_EcalIso[4], elec_HcalIso[4]; - double elec_sIhIh[4], elec_dPhi[4], elec_dEta[4]; - - double ernu_e1x5[4], ernu_e2x5[4], ernu_e5x5[4], ernu_sIhIh[4]; - double ernu_HcalEt015[4], ernu_HcalE015[4], ernu_trkIso[4]; - - double ernu_E[4], ernu_rawE[4], ernu_unclusE[4], ernu_d_McE_ScE[4]; - double ernu_fEtaCorrE[4], ernu_fBremCorrE[4], ernu_AddCorrE[4]; - int ernu_nClusters[4]; - - double McZ_m[4], McZ_pt[4]/*, McZ_eta[4]*/, McZ_phi[4]; - double McZ_rescM[4];//, McZ_rescPt[4], McZ_rescEta[4], McZ_rescPhi[4]; - double McElec_pt[4], McElec_eta[4];//, McElec_phi[4]; - double McElec_rescPt[4], McElec_rescEta[4];//, McElec_rescPhi[4]; - double McErNu_pt[4], McErNu_eta[4], McErNu_phi[4]; - double McErNu_rescPt[4], McErNu_rescEta[4], McErNu_rescPhi[4]; - double McElecErNu_dPhi[4], McElecErNu_dR[4]; - int ernu_McMatch[4]; - - cout << "Declared Variables" << endl; - //TString OutFileName = "/tmp/rnandi/"+InFileName+"_Selected"; - //TFile *outfile = TFile::Open(OutFileName+".root", "recreate"); - - TString OutFileName_Pass_EB = "/tmp/rnandi/"+InFileName+"_Selected_Pass_EB"; - TFile *outfile_pass_EB = TFile::Open(OutFileName_Pass_EB+".root", "recreate"); - - cout << "Opened outfile_Pass_EB" << endl; - - TH1I* h_nTags_Pass_EB = new TH1I("nTags", "Number of Tags;Number of Tags;Arbitrary Units", 4, 0, 4); - TH1I* h_nErNu_Pass_EB = new TH1I("nErNu", "Number of Ersatz Neutrinos;Number of Ersatz Neutrinos;Arbitrary Units", 2, 0, 2); - TH1I* h_nMcElecs_Zmum_Pass_EB = new TH1I("nMcElecs_Zmum", "Number of Monte Carlo Electrons with Z as Mother;Number of MC Electrons;Arbitrary Units", 4, 0, 4); - TH1I* h_nMcElecs_Final_Pass_EB = new TH1I("nMcElecs_Final", "Number of Final State Monte Carlo Electrons;Number of MC Electrons;Arbitrary Units", 4, 0, 4); - TH1I* h_nRecHitsInStrip_Pass_EB = new TH1I("nRecHitsInStrip", ";;Arbitrary Units", 20, 0, 20); - TH1I* h_nRecHitsInCone_Pass_EB = new TH1I("nRecHitsInCone", ";;Arbitrary Units", 20, 0, 20); - - TH1F* h_Z_pt_Pass_EB = new TH1F("Z_pt", "Z p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - - TH1F* h_elec_q_Pass_EB = new TH1F("elec_q", "Electron Charge;q;Arbitrary Units", 3, -1.5, 1.5); - TH1F* h_elec_pt_Pass_EB = new TH1F("elec_pt", "Electron p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_elec_eta_Pass_EB = new TH1F("elec_eta", "Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_elec_phi_Pass_EB = new TH1F("elec_phi", "Electron #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_elec_sIhIh_Pass_EB = new TH1F("elec_sIhIh", "Electron #sigma_{i#etai#eta};#sigma_{i#etai#eta};Arbitary Units", 100, 0., 0.05); - TH1F* h_elec_dEta_Pass_EB = new TH1F("elec_dEta", "Electron #Delta#eta;#Delta#eta;Arbitrary Units", 100, 0., 0.02); - TH1F* h_elec_dPhi_Pass_EB = new TH1F("elec_dPhi", "Electron #Delta#phi;#Delta#phi;Arbitrary Units", 100, 0., 0.1); - TH1F* h_elec_TrkIso_Pass_EB = new TH1F("elec_TrkIso", "Electon Track Isolation;Track Isolation #Sigma p_{T}^{tracks} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_EcalIso_Pass_EB = new TH1F("elec_EcalIso", "Electron ECAL Isolation;ECAL Isolation #Sigma E_{T}^{ECAL} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_HcalIso_Pass_EB = new TH1F("elec_HcalIso", "Electron HCAL Isolation;HCAL Isolation #Sigma E_{T}^{HCAL} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_rescPt_Pass_EB = new TH1F("elec_rescPt", "Electron Rescaled p_{T};Rescaled p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_elec_rescEta_Pass_EB = new TH1F("elec_rescEta", "Electron Rescaled #eta;Rescaled #eta;Arbitrary Units", 100, -3., 3.); - -// TH1F* h_ErNu_q_Pass_EB = new TH1F("h_ErNu_q", "Ersatz Neutrino Charge;q;Arbitrary Units", 3, -1.5, 1.5); - TH1F* h_ErNu_pt_Pass_EB = new TH1F("ErNu_pt", "Ersatz Neutrino p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_eta_Pass_EB = new TH1F("ErNu_eta", "Ersatz Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_ErNu_phi_Pass_EB = new TH1F("ErNu_phi", "Ersatz Neutrino #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_ErNu_rescPt_Pass_EB = new TH1F("ErNu_rescPt", "Ersatz Neutrino Rescaled p_{T};Rescaled p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_rescEta_Pass_EB = new TH1F("ErNu_rescEta", "Ersatz Neutrino Rescaled #eta;Rescaled #eta", 100, -3., 3.); - - TH1F* h_ErNu_sIhIh_Pass_EB = new TH1F("ErNu_sIhIh", "Ersatz Neutrino #sigma_{i#etai#eta};#sigma_{i#etai#eta};Arbitrary Units", 100, 0., 0.05); -// TH1F* h_ErNu_dEta_Pass_EB = new TH1F("ErNu_dEta", "Ersatz Neutrino #Delta#eta;#Delta#eta;Arbitrary Units", 100, 0., 0.02); -// TH1F* h_ErNu_dPhi_Pass_EB = new TH1F("ErNu_dPhi", "Ersatz Neutrino #Delta#phi;#Delta#phi;Arbitrary Units", 100, 0., 0.1); - TH1F* h_ErNu_TrkIso_Pass_EB = new TH1F("ErNu_TrkIso", "Ersatz Neutrino Track Isolation;Track Isolation #Sigma p_{T}^{tracks} / GeV;Arbitrary Units", 100, 0., 10.); -// TH1F* h_ErNu_EcalIso_Pass_EB = new TH1F("ErNu_EcalIso", "Ersatz Neutrino ECAL Isolation;ECAL Isolation #Sigma E_{T}^{ECAL} / GeV;Arbitrary Units", 100, 0., 10.); -// TH1F* h_ErNu_HcalIso_Pass_EB = new TH1F("ErNu_HcalIso", "Ersatz Neutrino HCAL Isolation;HCAL Isolation #Sigma E_{T}^{HCAL} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_ErNu_e1x5Max_Pass_EB = new TH1F("ErNu_e1x5Max", "Ersatz Neutrino Maximum Energy in 1x5 Array of Crystals;e1x5Max / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_e2x5Max_Pass_EB = new TH1F("ErNu_e2x5Max", "Ersatz Neutrino Maximum Energy in 2x5 Array of Crystals;e2x5Max / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_e5x5_Pass_EB = new TH1F("ErNu_e5x5", "Ersatz Neutrino Energy in 5x5 Array of Crystals;e5x5 / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_HcalE015_Pass_EB = new TH1F("ErNu_HcalE015", "Ersatz Neutrino HCAL Energy in a 0.15 Cone;HCAL Energy / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_ErNu_HcalEt015_Pass_EB = new TH1F("ErNu_HcalEt015", "Ersatz Neutrino HCAL E_{T} in a 0.15 Cone;HCAL E_{T};Arbitrary Units", 100, 0., 10.); - -// TH1F* h_rechitE_Pass_EB = new TH1F("h_rechitE", "", 100, , ); // What is this - TH1F* h_ErNu_E_Pass_EB = new TH1F("ErNu_E", "Ersatz Neutrino Energy;Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_rawE_Pass_EB = new TH1F("ErNu_rawE", "Ersatz Neutrino Raw Energy;Raw Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_unclusE_Pass_EB = new TH1F("ErNu_unclusE", "Ersatz Neutrino Unclustered ECAL Energy;Unclustered Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_fEtaCorrE_Pass_EB = new TH1F("ErNu_fEtaCorrE", "Ersatz Neutrino fEta Corrected Energy;Corrected Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_fBremCorrE_Pass_EB = new TH1F("ErNu_fBremCorrE", "Ersatz Neutrino fBrem Corrected Energy;Correcteed Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_AddCorrE_Pass_EB = new TH1F("ErNu_AddCorrE", "Ersatz Neutrino Add Corrected Energy;Corrected Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1I* h_ErNu_nClusters_Pass_EB = new TH1I("ErNu_nClusters", "Ersatz Neutrino Number of Clusters;Number of Clusters;Arbitrary Units", 10, 0, 10); - -// TH1F* h_ErsatzV1MEt_Pass_EB = new TH1F("ErsatzV1MEt", "ErsatzV1MEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1Mt_Pass_EB = new TH1F("ErsatzV1Mt", "ErsatzV1Mt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1MEtphi_Pass_EB = new TH1F("ErsatzV1MEtPhi", "ErsatzV1MEtPhi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1aMEt_Pass_EB = new TH1F("ErsatzV1aMEt", "ErsatzV1aMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1aMt_Pass_EB = new TH1F("ErsatzV1aMt", "ErsatzV1aMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1aMEtphi_Pass_EB = new TH1F("ErsatzV1aMEtphi", "ErsatzV1aMEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1bMEt_Pass_EB = new TH1F("ErsatzV1bMEt", "ErsatzV1bMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1bMt_Pass_EB = new TH1F("ErsatzV1bMt", "ErsatzV1bMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1bMEtphi_Pass_EB = new TH1F("ErsatzV1bMEtphi", "ErsatzV1bMEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1cMEt_Pass_EB = new TH1F("ErsatzV1cMEt", "ErsatzV1cMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1cMt_Pass_EB = new TH1F("ErsatzV1cMt", "ErsatzV1cMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1cMEtphi_Pass_EB = new TH1F("ErsatzV1cMEtphi", "ErsatzV1cMEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV2MEt_Pass_EB = new TH1F("ErsatzV1aMEt", "ErsatzV1aMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV2Mt_Pass_EB = new TH1F("ErsatzV1aMt", "ErsatzV1aMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV2MEtphi_Pass_EB = new TH1F("ErsatzV2MEtphi", "ErsatzV2MEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_RecoCaloMEt_Pass_EB = new TH1F("RecoCaloMEt", "Calometric #slashE_{T};#slashE_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1Mesc_Pass_EB = new TH1F("ErsatzV1Mesc", "Invariant Mass;Invariant Mass / GeV;Arbitrary Units", 100, 41., 141.); - TH1F* h_ErsatzV1rescMesc_Pass_EB = new TH1F("ErsatzV1rescMesc", "Rescaled Invariant Mass;Rescaled Invariant Mass / GeV;Arbitrary Units", 100, 41., 141.); - - TH1F* h_McZ_M_Pass_EB = new TH1F("McZ_M", "Monte Carlo Z Mass;Mass / GeV; Arbitrary Units", 100, 41., 141.); - TH1F* h_McZ_rescM_Pass_EB = new TH1F("McZ_rescM", "Monte Carlo Rescaled Z Mass;Mass / GeV;Arbitrary Units", 100, 41., 141.); - TH1F* h_McZ_Pt_Pass_EB = new TH1F("McZ_Pt", "Monte Carlo Z p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_McZ_rescPt_Pass_EB = new TH1F("McZ_rescPt", "Monte Carlo Rescaled Z p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_McZ_Eta_Pass_EB = new TH1F("McZ_eta", "Monte Carlo Z #eta;#eta;Arbitrary Units", 100, -3., 3.); -// TH1F* h_McZ_rescEta_Pass_EB = new TH1F("McZ_rescEta", "Monte Carlo Rescaled Z #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McZ_Phi_Pass_EB = new TH1F("McZ_phi", "Monte Carlo Z #phi;#phi;Arbitrary Units", 100, 0., 3.1416); -// TH1F* h_McZ_rescPhi_Pass_EB = new TH1F("McZ_rescPhi", "Monte Carlo Z Rescaled #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - - TH1F* h_McElec_Pt_Pass_EB = new TH1F("McElec_Pt", "Monte Carlo Electron p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_McElec_rescPt_Pass_EB = new TH1F("McElec_rescPt", "Monte Carlo Rescaled Electron p_{T};Rescaled p_{T};Arbitrary Units", 100, 0., 100.); - TH1F* h_McElec_Eta_Pass_EB = new TH1F("McElec_Eta", "Monte Carlo Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McElec_rescEta_Pass_EB = new TH1F("McElec_rescEta", "Monte Carlo Rescaled Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); -// TH1F* h_McElec_Phi_Pass_EB = new TH1F("McElec_Phi", "Monte Carlo Electron #phi;#phi;Arbitrary Units", 100, 0., 3.1416); -// TH1F* h_McElec_rescPhi_Pass_EB = new TH1F("McElec_rescPhi", "Monte Carlo Rescaled Electron #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - - TH1F* h_McErNu_Pt_Pass_EB = new TH1F("McErNu_Pt", "Monte Carlo Ersatz Neutrino p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_McErNu_rescPt_Pass_EB = new TH1F("McErNu_rescPt", "Monte Carlo Rescaled Ersatz Neutrino p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_McErNu_Eta_Pass_EB = new TH1F("McErNu_Eta", "Monte Carlo Ersatz Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McErNu_rescEta_Pass_EB = new TH1F("McErNu_rescEta", "Monte Carlo Rescaled Ersatz Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McErNu_Phi_Pass_EB = new TH1F("McErNu_Phi", "Monte Carlo Ersatz Neutrino #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_McErNu_rescPhi_Pass_EB = new TH1F("McErNu_rescPhi", "Monte Carlo Rescaled Ersatz Neutrino #phi;Rescaled #phi;Arbitrary Units", 100, 0., 3.1416); - - TH1F* h_McElecErNu_dPhi_Pass_EB = new TH1F("McElecErNu_dPhi", "Monte Carlo #Delta#phi between Electrons;#Delta#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_McElecErNu_dR_Pass_EB = new TH1F("McElecErNu_dR", "Monte Carlo #DeltaR between Electrons;MC Match;Arbitrary Units", 100, 0., 3.1416); - TH1I* h_McMatch_Pass_EB = new TH1I("McMatch", "Monte Carlo Match of Ersatz Neutrino to an Electron;MC Match;Arbitrary Units", 2, 0, 2); - - cout << "Declared histograms h_xxx_Pass_EB" << endl; -// TH1F* h_EtaInt_Pass_EB = new TH1F("EtaInt", "", 345, 0, 345); -// TH1F* h_EtaWeights_Pass_EB = new TH1F("EtaWeights", "", 40, 0., 2.); - - TString OutFileName_Pass_EE = "/tmp/rnandi/"+InFileName+"_Selected_Pass_EE"; - TFile *outfile_pass_EE = TFile::Open(OutFileName_Pass_EE+".root", "recreate"); - cout << "Opened outfile_Pass_EE" << endl; - - TH1I* h_nTags_Pass_EE = new TH1I("nTags", "Number of Tags;Number of Tags;Arbitrary Units", 4, 0, 4); - TH1I* h_nErNu_Pass_EE = new TH1I("nErNu", "Number of Ersatz Neutrinos;Number of Ersatz Neutrinos;Arbitrary Units", 2, 0, 2); - TH1I* h_nMcElecs_Zmum_Pass_EE = new TH1I("nMcElecs_Zmum", "Number of Monte Carlo Electrons with Z as Mother;Number of MC Electrons;Arbitrary Units", 4, 0, 4); - TH1I* h_nMcElecs_Final_Pass_EE = new TH1I("nMcElecs_Final", "Number of Final State Monte Carlo Electrons;Number of MC Electrons;Arbitrary Units", 4, 0, 4); - TH1I* h_nRecHitsInStrip_Pass_EE = new TH1I("nRecHitsInStrip", ";;Arbitrary Units", 20, 0, 20); - TH1I* h_nRecHitsInCone_Pass_EE = new TH1I("nRecHitsInCone", ";;Arbitrary Units", 20, 0, 20); - - TH1F* h_Z_pt_Pass_EE = new TH1F("Z_pt", "Z p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - - TH1F* h_elec_q_Pass_EE = new TH1F("elec_q", "Electron Charge;q;Arbitrary Units", 3, -1.5, 1.5); - TH1F* h_elec_pt_Pass_EE = new TH1F("elec_pt", "Electron p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_elec_eta_Pass_EE = new TH1F("elec_eta", "Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_elec_phi_Pass_EE = new TH1F("elec_phi", "Electron #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_elec_sIhIh_Pass_EE = new TH1F("elec_sIhIh", "Electron #sigma_{i#etai#eta};#sigma_{i#etai#eta};Arbitary Units", 100, 0., 0.05); - TH1F* h_elec_dEta_Pass_EE = new TH1F("elec_dEta", "Electron #Delta#eta;#Delta#eta;Arbitrary Units", 100, 0., 0.02); - TH1F* h_elec_dPhi_Pass_EE = new TH1F("elec_dPhi", "Electron #Delta#phi;#Delta#phi;Arbitrary Units", 100, 0., 0.1); - TH1F* h_elec_TrkIso_Pass_EE = new TH1F("elec_TrkIso", "Electon Track Isolation;Track Isolation #Sigma p_{T}^{tracks} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_EcalIso_Pass_EE = new TH1F("elec_EcalIso", "Electron ECAL Isolation;ECAL Isolation #Sigma E_{T}^{ECAL} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_HcalIso_Pass_EE = new TH1F("elec_HcalIso", "Electron HCAL Isolation;HCAL Isolation #Sigma E_{T}^{HCAL} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_rescPt_Pass_EE = new TH1F("elec_rescPt", "Electron Rescaled p_{T};Rescaled p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_elec_rescEta_Pass_EE = new TH1F("elec_rescEta", "Electron Rescaled #eta;Rescaled #eta;Arbitrary Units", 100, -3., 3.); - -// TH1F* h_ErNu_q_Pass_EE = new TH1F("h_ErNu_q", "Ersatz Neutrino Charge;q;Arbitrary Units", 3, -1.5, 1.5); - TH1F* h_ErNu_pt_Pass_EE = new TH1F("ErNu_pt", "Ersatz Neutrino p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_eta_Pass_EE = new TH1F("ErNu_eta", "Ersatz Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_ErNu_phi_Pass_EE = new TH1F("ErNu_phi", "Ersatz Neutrino #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_ErNu_rescPt_Pass_EE = new TH1F("ErNu_rescPt", "Ersatz Neutrino Rescaled p_{T};Rescaled p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_rescEta_Pass_EE = new TH1F("ErNu_rescEta", "Ersatz Neutrino Rescaled #eta;Rescaled #eta", 100, -3., 3.); - - TH1F* h_ErNu_sIhIh_Pass_EE = new TH1F("ErNu_sIhIh", "Ersatz Neutrino #sigma_{i#etai#eta};#sigma_{i#etai#eta};Arbitrary Units", 100, 0., 0.05); -// TH1F* h_ErNu_dEta_Pass_EE = new TH1F("ErNu_dEta", "Ersatz Neutrino #Delta#eta;#Delta#eta;Arbitrary Units", 100, 0., 0.02); -// TH1F* h_ErNu_dPhi_Pass_EE = new TH1F("ErNu_dPhi", "Ersatz Neutrino #Delta#phi;#Delta#phi;Arbitrary Units", 100, 0., 0.1); - TH1F* h_ErNu_TrkIso_Pass_EE = new TH1F("ErNu_TrkIso", "Ersatz Neutrino Track Isolation;Track Isolation #Sigma p_{T}^{tracks} / GeV;Arbitrary Units", 100, 0., 10.); -// TH1F* h_ErNu_EcalIso_Pass_EE = new TH1F("ErNu_EcalIso", "Ersatz Neutrino ECAL Isolation;ECAL Isolation #Sigma E_{T}^{ECAL} / GeV;Arbitrary Units", 100, 0., 10.); -// TH1F* h_ErNu_HcalIso_Pass_EE = new TH1F("ErNu_HcalIso", "Ersatz Neutrino HCAL Isolation;HCAL Isolation #Sigma E_{T}^{HCAL} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_ErNu_e1x5Max_Pass_EE = new TH1F("ErNu_e1x5Max", "Ersatz Neutrino Maximum Energy in 1x5 Array of Crystals;e1x5Max / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_e2x5Max_Pass_EE = new TH1F("ErNu_e2x5Max", "Ersatz Neutrino Maximum Energy in 2x5 Array of Crystals;e2x5Max / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_e5x5_Pass_EE = new TH1F("ErNu_e5x5", "Ersatz Neutrino Energy in 5x5 Array of Crystals;e5x5 / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_HcalE015_Pass_EE = new TH1F("ErNu_HcalE015", "Ersatz Neutrino HCAL Energy in a 0.15 Cone;HCAL Energy / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_ErNu_HcalEt015_Pass_EE = new TH1F("ErNu_HcalEt015", "Ersatz Neutrino HCAL E_{T} in a 0.15 Cone;HCAL E_{T};Arbitrary Units", 100, 0., 10.); - -// TH1F* h_rechitE_Pass_EE = new TH1F("h_rechitE", "", 100, , ); // What is this - TH1F* h_ErNu_E_Pass_EE = new TH1F("ErNu_E", "Ersatz Neutrino Energy;Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_rawE_Pass_EE = new TH1F("ErNu_rawE", "Ersatz Neutrino Raw Energy;Raw Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_unclusE_Pass_EE = new TH1F("ErNu_unclusE", "Ersatz Neutrino Unclustered ECAL Energy;Unclustered Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_fEtaCorrE_Pass_EE = new TH1F("ErNu_fEtaCorrE", "Ersatz Neutrino fEta Corrected Energy;Corrected Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_fBremCorrE_Pass_EE = new TH1F("ErNu_fBremCorrE", "Ersatz Neutrino fBrem Corrected Energy;Correcteed Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_AddCorrE_Pass_EE = new TH1F("ErNu_AddCorrE", "Ersatz Neutrino Add Corrected Energy;Corrected Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1I* h_ErNu_nClusters_Pass_EE = new TH1I("ErNu_nClusters", "Ersatz Neutrino Number of Clusters;Number of Clusters;Arbitrary Units", 10, 0, 10); - -// TH1F* h_ErsatzV1MEt_Pass_EE = new TH1F("ErsatzV1MEt", "ErsatzV1MEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1Mt_Pass_EE = new TH1F("ErsatzV1Mt", "ErsatzV1Mt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1MEtphi_Pass_EE = new TH1F("ErsatzV1MEtPhi", "ErsatzV1MEtPhi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1aMEt_Pass_EE = new TH1F("ErsatzV1aMEt", "ErsatzV1aMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1aMt_Pass_EE = new TH1F("ErsatzV1aMt", "ErsatzV1aMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1aMEtphi_Pass_EE = new TH1F("ErsatzV1aMEtphi", "ErsatzV1aMEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1bMEt_Pass_EE = new TH1F("ErsatzV1bMEt", "ErsatzV1bMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1bMt_Pass_EE = new TH1F("ErsatzV1bMt", "ErsatzV1bMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1bMEtphi_Pass_EE = new TH1F("ErsatzV1bMEtphi", "ErsatzV1bMEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1cMEt_Pass_EE = new TH1F("ErsatzV1cMEt", "ErsatzV1cMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1cMt_Pass_EE = new TH1F("ErsatzV1cMt", "ErsatzV1cMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1cMEtphi_Pass_EE = new TH1F("ErsatzV1cMEtphi", "ErsatzV1cMEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV2MEt_Pass_EE = new TH1F("ErsatzV1aMEt", "ErsatzV1aMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV2Mt_Pass_EE = new TH1F("ErsatzV1aMt", "ErsatzV1aMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV2MEtphi_Pass_EE = new TH1F("ErsatzV2MEtphi", "ErsatzV2MEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_RecoCaloMEt_Pass_EE = new TH1F("RecoCaloMEt", "Calometric #slashE_{T};#slashE_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1Mesc_Pass_EE = new TH1F("ErsatzV1Mesc", "Invariant Mass;Invariant Mass / GeV;Arbitrary Units", 100, 41., 141.); - TH1F* h_ErsatzV1rescMesc_Pass_EE = new TH1F("ErsatzV1rescMesc", "Rescaled Invariant Mass;Rescaled Invariant Mass / GeV;Arbitrary Units", 100, 41., 141.); - - TH1F* h_McZ_M_Pass_EE = new TH1F("McZ_M", "Monte Carlo Z Mass;Mass / GeV; Arbitrary Units", 100, 41., 141.); - TH1F* h_McZ_rescM_Pass_EE = new TH1F("McZ_rescM", "Monte Carlo Rescaled Z Mass;Mass / GeV;Arbitrary Units", 100, 41., 141.); - TH1F* h_McZ_Pt_Pass_EE = new TH1F("McZ_Pt", "Monte Carlo Z p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_McZ_rescPt_Pass_EE = new TH1F("McZ_rescPt", "Monte Carlo Rescaled Z p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_McZ_Eta_Pass_EE = new TH1F("McZ_eta", "Monte Carlo Z #eta;#eta;Arbitrary Units", 100, -3., 3.); -// TH1F* h_McZ_rescEta_Pass_EE = new TH1F("McZ_rescEta", "Monte Carlo Rescaled Z #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McZ_Phi_Pass_EE = new TH1F("McZ_phi", "Monte Carlo Z #phi;#phi;Arbitrary Units", 100, 0., 3.1416); -// TH1F* h_McZ_rescPhi_Pass_EE = new TH1F("McZ_rescPhi", "Monte Carlo Z Rescaled #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - - TH1F* h_McElec_Pt_Pass_EE = new TH1F("McElec_Pt", "Monte Carlo Electron p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_McElec_rescPt_Pass_EE = new TH1F("McElec_rescPt", "Monte Carlo Rescaled Electron p_{T};Rescaled p_{T};Arbitrary Units", 100, 0., 100.); - TH1F* h_McElec_Eta_Pass_EE = new TH1F("McElec_Eta", "Monte Carlo Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McElec_rescEta_Pass_EE = new TH1F("McElec_rescEta", "Monte Carlo Rescaled Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); -// TH1F* h_McElec_Phi_Pass_EE = new TH1F("McElec_Phi", "Monte Carlo Electron #phi;#phi;Arbitrary Units", 100, 0., 3.1416); -// TH1F* h_McElec_rescPhi_Pass_EE = new TH1F("McElec_rescPhi", "Monte Carlo Rescaled Electron #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - - TH1F* h_McErNu_Pt_Pass_EE = new TH1F("McErNu_Pt", "Monte Carlo Ersatz Neutrino p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_McErNu_rescPt_Pass_EE = new TH1F("McErNu_rescPt", "Monte Carlo Rescaled Ersatz Neutrino p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_McErNu_Eta_Pass_EE = new TH1F("McErNu_Eta", "Monte Carlo Ersatz Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McErNu_rescEta_Pass_EE = new TH1F("McErNu_rescEta", "Monte Carlo Rescaled Ersatz Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McErNu_Phi_Pass_EE = new TH1F("McErNu_Phi", "Monte Carlo Ersatz Neutrino #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_McErNu_rescPhi_Pass_EE = new TH1F("McErNu_rescPhi", "Monte Carlo Rescaled Ersatz Neutrino #phi;Rescaled #phi;Arbitrary Units", 100, 0., 3.1416); - - TH1F* h_McElecErNu_dPhi_Pass_EE = new TH1F("McElecErNu_dPhi", "Monte Carlo #Delta#phi between Electrons;#Delta#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_McElecErNu_dR_Pass_EE = new TH1F("McElecErNu_dR", "Monte Carlo #DeltaR between Electrons;MC Match;Arbitrary Units", 100, 0., 3.1416); - TH1I* h_McMatch_Pass_EE = new TH1I("McMatch", "Monte Carlo Match of Ersatz Neutrino to an Electron;MC Match;Arbitrary Units", 2, 0, 2); - - cout << "Declared histograms h_xxx_Pass_EE" << endl; -// TH1F* h_EtaInt_Pass_EE = new TH1F("EtaInt", "", 345, 0, 345); -// TH1F* h_EtaWeights_Pass_EE = new TH1F("EtaWeights", "", 40, 0., 2.); - - TString OutFileName_Fail_EB = "/tmp/rnandi/"+InFileName+"_Selected_Fail_EB"; - TFile *outfile_fail_EB = TFile::Open(OutFileName_Fail_EB+".root", "recreate"); - cout << "Opened outfile_Fail_EB" << endl; - - TH1I* h_nTags_Fail_EB = new TH1I("nTags", "Number of Tags;Number of Tags;Arbitrary Units", 4, 0, 4); - TH1I* h_nErNu_Fail_EB = new TH1I("nErNu", "Number of Ersatz Neutrinos;Number of Ersatz Neutrinos;Arbitrary Units", 2, 0, 2); - TH1I* h_nMcElecs_Zmum_Fail_EB = new TH1I("nMcElecs_Zmum", "Number of Monte Carlo Electrons with Z as Mother;Number of MC Electrons;Arbitrary Units", 4, 0, 4); - TH1I* h_nMcElecs_Final_Fail_EB = new TH1I("nMcElecs_Final", "Number of Final State Monte Carlo Electrons;Number of MC Electrons;Arbitrary Units", 4, 0, 4); - TH1I* h_nRecHitsInStrip_Fail_EB = new TH1I("nRecHitsInStrip", ";;Arbitrary Units", 20, 0, 20); - TH1I* h_nRecHitsInCone_Fail_EB = new TH1I("nRecHitsInCone", ";;Arbitrary Units", 20, 0, 20); - - TH1F* h_Z_pt_Fail_EB = new TH1F("Z_pt", "Z p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - - TH1F* h_elec_q_Fail_EB = new TH1F("elec_q", "Electron Charge;q;Arbitrary Units", 3, -1.5, 1.5); - TH1F* h_elec_pt_Fail_EB = new TH1F("elec_pt", "Electron p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_elec_eta_Fail_EB = new TH1F("elec_eta", "Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_elec_phi_Fail_EB = new TH1F("elec_phi", "Electron #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_elec_sIhIh_Fail_EB = new TH1F("elec_sIhIh", "Electron #sigma_{i#etai#eta};#sigma_{i#etai#eta};Arbitary Units", 100, 0., 0.05); - TH1F* h_elec_dEta_Fail_EB = new TH1F("elec_dEta", "Electron #Delta#eta;#Delta#eta;Arbitrary Units", 100, 0., 0.02); - TH1F* h_elec_dPhi_Fail_EB = new TH1F("elec_dPhi", "Electron #Delta#phi;#Delta#phi;Arbitrary Units", 100, 0., 0.1); - TH1F* h_elec_TrkIso_Fail_EB = new TH1F("elec_TrkIso", "Electon Track Isolation;Track Isolation #Sigma p_{T}^{tracks} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_EcalIso_Fail_EB = new TH1F("elec_EcalIso", "Electron ECAL Isolation;ECAL Isolation #Sigma E_{T}^{ECAL} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_HcalIso_Fail_EB = new TH1F("elec_HcalIso", "Electron HCAL Isolation;HCAL Isolation #Sigma E_{T}^{HCAL} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_rescPt_Fail_EB = new TH1F("elec_rescPt", "Electron Rescaled p_{T};Rescaled p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_elec_rescEta_Fail_EB = new TH1F("elec_rescEta", "Electron Rescaled #eta;Rescaled #eta;Arbitrary Units", 100, -3., 3.); - -// TH1F* h_ErNu_q_Fail_EB = new TH1F("h_ErNu_q", "Ersatz Neutrino Charge;q;Arbitrary Units", 3, -1.5, 1.5); - TH1F* h_ErNu_pt_Fail_EB = new TH1F("ErNu_pt", "Ersatz Neutrino p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_eta_Fail_EB = new TH1F("ErNu_eta", "Ersatz Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_ErNu_phi_Fail_EB = new TH1F("ErNu_phi", "Ersatz Neutrino #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_ErNu_rescPt_Fail_EB = new TH1F("ErNu_rescPt", "Ersatz Neutrino Rescaled p_{T};Rescaled p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_rescEta_Fail_EB = new TH1F("ErNu_rescEta", "Ersatz Neutrino Rescaled #eta;Rescaled #eta", 100, -3., 3.); - - TH1F* h_ErNu_sIhIh_Fail_EB = new TH1F("ErNu_sIhIh", "Ersatz Neutrino #sigma_{i#etai#eta};#sigma_{i#etai#eta};Arbitrary Units", 100, 0., 0.05); -// TH1F* h_ErNu_dEta_Fail_EB = new TH1F("ErNu_dEta", "Ersatz Neutrino #Delta#eta;#Delta#eta;Arbitrary Units", 100, 0., 0.02); -// TH1F* h_ErNu_dPhi_Fail_EB = new TH1F("ErNu_dPhi", "Ersatz Neutrino #Delta#phi;#Delta#phi;Arbitrary Units", 100, 0., 0.1); - TH1F* h_ErNu_TrkIso_Fail_EB = new TH1F("ErNu_TrkIso", "Ersatz Neutrino Track Isolation;Track Isolation #Sigma p_{T}^{tracks} / GeV;Arbitrary Units", 100, 0., 10.); -// TH1F* h_ErNu_EcalIso_Fail_EB = new TH1F("ErNu_EcalIso", "Ersatz Neutrino ECAL Isolation;ECAL Isolation #Sigma E_{T}^{ECAL} / GeV;Arbitrary Units", 100, 0., 10.); -// TH1F* h_ErNu_HcalIso_Fail_EB = new TH1F("ErNu_HcalIso", "Ersatz Neutrino HCAL Isolation;HCAL Isolation #Sigma E_{T}^{HCAL} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_ErNu_e1x5Max_Fail_EB = new TH1F("ErNu_e1x5Max", "Ersatz Neutrino Maximum Energy in 1x5 Array of Crystals;e1x5Max / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_e2x5Max_Fail_EB = new TH1F("ErNu_e2x5Max", "Ersatz Neutrino Maximum Energy in 2x5 Array of Crystals;e2x5Max / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_e5x5_Fail_EB = new TH1F("ErNu_e5x5", "Ersatz Neutrino Energy in 5x5 Array of Crystals;e5x5 / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_HcalE015_Fail_EB = new TH1F("ErNu_HcalE015", "Ersatz Neutrino HCAL Energy in a 0.15 Cone;HCAL Energy / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_ErNu_HcalEt015_Fail_EB = new TH1F("ErNu_HcalEt015", "Ersatz Neutrino HCAL E_{T} in a 0.15 Cone;HCAL E_{T};Arbitrary Units", 100, 0., 10.); - -// TH1F* h_rechitE_Fail_EB = new TH1F("h_rechitE", "", 100, , ); // What is this - TH1F* h_ErNu_E_Fail_EB = new TH1F("ErNu_E", "Ersatz Neutrino Energy;Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_rawE_Fail_EB = new TH1F("ErNu_rawE", "Ersatz Neutrino Raw Energy;Raw Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_unclusE_Fail_EB = new TH1F("ErNu_unclusE", "Ersatz Neutrino Unclustered ECAL Energy;Unclustered Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_fEtaCorrE_Fail_EB = new TH1F("ErNu_fEtaCorrE", "Ersatz Neutrino fEta Corrected Energy;Corrected Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_fBremCorrE_Fail_EB = new TH1F("ErNu_fBremCorrE", "Ersatz Neutrino fBrem Corrected Energy;Correcteed Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_AddCorrE_Fail_EB = new TH1F("ErNu_AddCorrE", "Ersatz Neutrino Add Corrected Energy;Corrected Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1I* h_ErNu_nClusters_Fail_EB = new TH1I("ErNu_nClusters", "Ersatz Neutrino Number of Clusters;Number of Clusters;Arbitrary Units", 10, 0, 10); - -// TH1F* h_ErsatzV1MEt_Fail_EB = new TH1F("ErsatzV1MEt", "ErsatzV1MEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1Mt_Fail_EB = new TH1F("ErsatzV1Mt", "ErsatzV1Mt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1MEtphi_Fail_EB = new TH1F("ErsatzV1MEtPhi", "ErsatzV1MEtPhi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1aMEt_Fail_EB = new TH1F("ErsatzV1aMEt", "ErsatzV1aMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1aMt_Fail_EB = new TH1F("ErsatzV1aMt", "ErsatzV1aMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1aMEtphi_Fail_EB = new TH1F("ErsatzV1aMEtphi", "ErsatzV1aMEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1bMEt_Fail_EB = new TH1F("ErsatzV1bMEt", "ErsatzV1bMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1bMt_Fail_EB = new TH1F("ErsatzV1bMt", "ErsatzV1bMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1bMEtphi_Fail_EB = new TH1F("ErsatzV1bMEtphi", "ErsatzV1bMEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1cMEt_Fail_EB = new TH1F("ErsatzV1cMEt", "ErsatzV1cMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1cMt_Fail_EB = new TH1F("ErsatzV1cMt", "ErsatzV1cMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1cMEtphi_Fail_EB = new TH1F("ErsatzV1cMEtphi", "ErsatzV1cMEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV2MEt_Fail_EB = new TH1F("ErsatzV1aMEt", "ErsatzV1aMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV2Mt_Fail_EB = new TH1F("ErsatzV1aMt", "ErsatzV1aMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV2MEtphi_Fail_EB = new TH1F("ErsatzV2MEtphi", "ErsatzV2MEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_RecoCaloMEt_Fail_EB = new TH1F("RecoCaloMEt", "Calometric #slashE_{T};#slashE_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1Mesc_Fail_EB = new TH1F("ErsatzV1Mesc", "Invariant Mass;Invariant Mass / GeV;Arbitrary Units", 100, 41., 141.); - TH1F* h_ErsatzV1rescMesc_Fail_EB = new TH1F("ErsatzV1rescMesc", "Rescaled Invariant Mass;Rescaled Invariant Mass / GeV;Arbitrary Units", 100, 41., 141.); - - TH1F* h_McZ_M_Fail_EB = new TH1F("McZ_M", "Monte Carlo Z Mass;Mass / GeV; Arbitrary Units", 100, 41., 141.); - TH1F* h_McZ_rescM_Fail_EB = new TH1F("McZ_rescM", "Monte Carlo Rescaled Z Mass;Mass / GeV;Arbitrary Units", 100, 41., 141.); - TH1F* h_McZ_Pt_Fail_EB = new TH1F("McZ_Pt", "Monte Carlo Z p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_McZ_rescPt_Fail_EB = new TH1F("McZ_rescPt", "Monte Carlo Rescaled Z p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_McZ_Eta_Fail_EB = new TH1F("McZ_eta", "Monte Carlo Z #eta;#eta;Arbitrary Units", 100, -3., 3.); -// TH1F* h_McZ_rescEta_Fail_EB = new TH1F("McZ_rescEta", "Monte Carlo Rescaled Z #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McZ_Phi_Fail_EB = new TH1F("McZ_phi", "Monte Carlo Z #phi;#phi;Arbitrary Units", 100, 0., 3.1416); -// TH1F* h_McZ_rescPhi_Fail_EB = new TH1F("McZ_rescPhi", "Monte Carlo Z Rescaled #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - - TH1F* h_McElec_Pt_Fail_EB = new TH1F("McElec_Pt", "Monte Carlo Electron p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_McElec_rescPt_Fail_EB = new TH1F("McElec_rescPt", "Monte Carlo Rescaled Electron p_{T};Rescaled p_{T};Arbitrary Units", 100, 0., 100.); - TH1F* h_McElec_Eta_Fail_EB = new TH1F("McElec_Eta", "Monte Carlo Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McElec_rescEta_Fail_EB = new TH1F("McElec_rescEta", "Monte Carlo Rescaled Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); -// TH1F* h_McElec_Phi_Fail_EB = new TH1F("McElec_Phi", "Monte Carlo Electron #phi;#phi;Arbitrary Units", 100, 0., 3.1416); -// TH1F* h_McElec_rescPhi_Fail_EB = new TH1F("McElec_rescPhi", "Monte Carlo Rescaled Electron #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - - TH1F* h_McErNu_Pt_Fail_EB = new TH1F("McErNu_Pt", "Monte Carlo Ersatz Neutrino p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_McErNu_rescPt_Fail_EB = new TH1F("McErNu_rescPt", "Monte Carlo Rescaled Ersatz Neutrino p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_McErNu_Eta_Fail_EB = new TH1F("McErNu_Eta", "Monte Carlo Ersatz Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McErNu_rescEta_Fail_EB = new TH1F("McErNu_rescEta", "Monte Carlo Rescaled Ersatz Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McErNu_Phi_Fail_EB = new TH1F("McErNu_Phi", "Monte Carlo Ersatz Neutrino #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_McErNu_rescPhi_Fail_EB = new TH1F("McErNu_rescPhi", "Monte Carlo Rescaled Ersatz Neutrino #phi;Rescaled #phi;Arbitrary Units", 100, 0., 3.1416); - - TH1F* h_McElecErNu_dPhi_Fail_EB = new TH1F("McElecErNu_dPhi", "Monte Carlo #Delta#phi between Electrons;#Delta#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_McElecErNu_dR_Fail_EB = new TH1F("McElecErNu_dR", "Monte Carlo #DeltaR between Electrons;MC Match;Arbitrary Units", 100, 0., 3.1416); - TH1I* h_McMatch_Fail_EB = new TH1I("McMatch", "Monte Carlo Match of Ersatz Neutrino to an Electron;MC Match;Arbitrary Units", 2, 0, 2); - -// TH1F* h_EtaInt_Fail_EB = new TH1F("EtaInt", "", 345, 0, 345); -// TH1F* h_EtaWeights_Fail_EB = new TH1F("EtaWeights", "", 40, 0., 2.); - cout << "Declared histograms h_xxx_Fail_EB" << endl; - - TString OutFileName_Fail_EE = "/tmp/rnandi/"+InFileName+"_Selected_Fail_EE"; - TFile *outfile_fail_EE = TFile::Open(OutFileName_Fail_EE+".root", "recreate"); - cout << "Opened outfile_Fail_EE" << endl; - - TH1I* h_nTags_Fail_EE = new TH1I("nTags", "Number of Tags;Number of Tags;Arbitrary Units", 4, 0, 4); - TH1I* h_nErNu_Fail_EE = new TH1I("nErNu", "Number of Ersatz Neutrinos;Number of Ersatz Neutrinos;Arbitrary Units", 2, 0, 2); - TH1I* h_nMcElecs_Zmum_Fail_EE = new TH1I("nMcElecs_Zmum", "Number of Monte Carlo Electrons with Z as Mother;Number of MC Electrons;Arbitrary Units", 4, 0, 4); - TH1I* h_nMcElecs_Final_Fail_EE = new TH1I("nMcElecs_Final", "Number of Final State Monte Carlo Electrons;Number of MC Electrons;Arbitrary Units", 4, 0, 4); - TH1I* h_nRecHitsInStrip_Fail_EE = new TH1I("nRecHitsInStrip", ";;Arbitrary Units", 20, 0, 20); - TH1I* h_nRecHitsInCone_Fail_EE = new TH1I("nRecHitsInCone", ";;Arbitrary Units", 20, 0, 20); - - TH1F* h_Z_pt_Fail_EE = new TH1F("Z_pt", "Z p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - - TH1F* h_elec_q_Fail_EE = new TH1F("elec_q", "Electron Charge;q;Arbitrary Units", 3, -1.5, 1.5); - TH1F* h_elec_pt_Fail_EE = new TH1F("elec_pt", "Electron p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_elec_eta_Fail_EE = new TH1F("elec_eta", "Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_elec_phi_Fail_EE = new TH1F("elec_phi", "Electron #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_elec_sIhIh_Fail_EE = new TH1F("elec_sIhIh", "Electron #sigma_{i#etai#eta};#sigma_{i#etai#eta};Arbitary Units", 100, 0., 0.05); - TH1F* h_elec_dEta_Fail_EE = new TH1F("elec_dEta", "Electron #Delta#eta;#Delta#eta;Arbitrary Units", 100, 0., 0.02); - TH1F* h_elec_dPhi_Fail_EE = new TH1F("elec_dPhi", "Electron #Delta#phi;#Delta#phi;Arbitrary Units", 100, 0., 0.1); - TH1F* h_elec_TrkIso_Fail_EE = new TH1F("elec_TrkIso", "Electon Track Isolation;Track Isolation #Sigma p_{T}^{tracks} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_EcalIso_Fail_EE = new TH1F("elec_EcalIso", "Electron ECAL Isolation;ECAL Isolation #Sigma E_{T}^{ECAL} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_HcalIso_Fail_EE = new TH1F("elec_HcalIso", "Electron HCAL Isolation;HCAL Isolation #Sigma E_{T}^{HCAL} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_rescPt_Fail_EE = new TH1F("elec_rescPt", "Electron Rescaled p_{T};Rescaled p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_elec_rescEta_Fail_EE = new TH1F("elec_rescEta", "Electron Rescaled #eta;Rescaled #eta;Arbitrary Units", 100, -3., 3.); - -// TH1F* h_ErNu_q_Fail_EE = new TH1F("h_ErNu_q", "Ersatz Neutrino Charge;q;Arbitrary Units", 3, -1.5, 1.5); - TH1F* h_ErNu_pt_Fail_EE = new TH1F("ErNu_pt", "Ersatz Neutrino p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_eta_Fail_EE = new TH1F("ErNu_eta", "Ersatz Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_ErNu_phi_Fail_EE = new TH1F("ErNu_phi", "Ersatz Neutrino #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_ErNu_rescPt_Fail_EE = new TH1F("ErNu_rescPt", "Ersatz Neutrino Rescaled p_{T};Rescaled p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_rescEta_Fail_EE = new TH1F("ErNu_rescEta", "Ersatz Neutrino Rescaled #eta;Rescaled #eta", 100, -3., 3.); - - TH1F* h_ErNu_sIhIh_Fail_EE = new TH1F("ErNu_sIhIh", "Ersatz Neutrino #sigma_{i#etai#eta};#sigma_{i#etai#eta};Arbitrary Units", 100, 0., 0.05); -// TH1F* h_ErNu_dEta_Fail_EE = new TH1F("ErNu_dEta", "Ersatz Neutrino #Delta#eta;#Delta#eta;Arbitrary Units", 100, 0., 0.02); -// TH1F* h_ErNu_dPhi_Fail_EE = new TH1F("ErNu_dPhi", "Ersatz Neutrino #Delta#phi;#Delta#phi;Arbitrary Units", 100, 0., 0.1); - TH1F* h_ErNu_TrkIso_Fail_EE = new TH1F("ErNu_TrkIso", "Ersatz Neutrino Track Isolation;Track Isolation #Sigma p_{T}^{tracks} / GeV;Arbitrary Units", 100, 0., 10.); -// TH1F* h_ErNu_EcalIso_Fail_EE = new TH1F("ErNu_EcalIso", "Ersatz Neutrino ECAL Isolation;ECAL Isolation #Sigma E_{T}^{ECAL} / GeV;Arbitrary Units", 100, 0., 10.); -// TH1F* h_ErNu_HcalIso_Fail_EE = new TH1F("ErNu_HcalIso", "Ersatz Neutrino HCAL Isolation;HCAL Isolation #Sigma E_{T}^{HCAL} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_ErNu_e1x5Max_Fail_EE = new TH1F("ErNu_e1x5Max", "Ersatz Neutrino Maximum Energy in 1x5 Array of Crystals;e1x5Max / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_e2x5Max_Fail_EE = new TH1F("ErNu_e2x5Max", "Ersatz Neutrino Maximum Energy in 2x5 Array of Crystals;e2x5Max / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_e5x5_Fail_EE = new TH1F("ErNu_e5x5", "Ersatz Neutrino Energy in 5x5 Array of Crystals;e5x5 / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_HcalE015_Fail_EE = new TH1F("ErNu_HcalE015", "Ersatz Neutrino HCAL Energy in a 0.15 Cone;HCAL Energy / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_ErNu_HcalEt015_Fail_EE = new TH1F("ErNu_HcalEt015", "Ersatz Neutrino HCAL E_{T} in a 0.15 Cone;HCAL E_{T};Arbitrary Units", 100, 0., 10.); - -// TH1F* h_rechitE_Fail_EE = new TH1F("h_rechitE", "", 100, , ); // What is this - TH1F* h_ErNu_E_Fail_EE = new TH1F("ErNu_E", "Ersatz Neutrino Energy;Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_rawE_Fail_EE = new TH1F("ErNu_rawE", "Ersatz Neutrino Raw Energy;Raw Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_unclusE_Fail_EE = new TH1F("ErNu_unclusE", "Ersatz Neutrino Unclustered ECAL Energy;Unclustered Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_fEtaCorrE_Fail_EE = new TH1F("ErNu_fEtaCorrE", "Ersatz Neutrino fEta Corrected Energy;Corrected Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_fBremCorrE_Fail_EE = new TH1F("ErNu_fBremCorrE", "Ersatz Neutrino fBrem Corrected Energy;Correcteed Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_AddCorrE_Fail_EE = new TH1F("ErNu_AddCorrE", "Ersatz Neutrino Add Corrected Energy;Corrected Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1I* h_ErNu_nClusters_Fail_EE = new TH1I("ErNu_nClusters", "Ersatz Neutrino Number of Clusters;Number of Clusters;Arbitrary Units", 10, 0, 10); - -// TH1F* h_ErsatzV1MEt_Fail_EE = new TH1F("ErsatzV1MEt", "ErsatzV1MEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1Mt_Fail_EE = new TH1F("ErsatzV1Mt", "ErsatzV1Mt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1MEtphi_Fail_EE = new TH1F("ErsatzV1MEtPhi", "ErsatzV1MEtPhi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1aMEt_Fail_EE = new TH1F("ErsatzV1aMEt", "ErsatzV1aMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1aMt_Fail_EE = new TH1F("ErsatzV1aMt", "ErsatzV1aMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1aMEtphi_Fail_EE = new TH1F("ErsatzV1aMEtphi", "ErsatzV1aMEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1bMEt_Fail_EE = new TH1F("ErsatzV1bMEt", "ErsatzV1bMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1bMt_Fail_EE = new TH1F("ErsatzV1bMt", "ErsatzV1bMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1bMEtphi_Fail_EE = new TH1F("ErsatzV1bMEtphi", "ErsatzV1bMEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1cMEt_Fail_EE = new TH1F("ErsatzV1cMEt", "ErsatzV1cMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1cMt_Fail_EE = new TH1F("ErsatzV1cMt", "ErsatzV1cMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1cMEtphi_Fail_EE = new TH1F("ErsatzV1cMEtphi", "ErsatzV1cMEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV2MEt_Fail_EE = new TH1F("ErsatzV1aMEt", "ErsatzV1aMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV2Mt_Fail_EE = new TH1F("ErsatzV1aMt", "ErsatzV1aMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV2MEtphi_Fail_EE = new TH1F("ErsatzV2MEtphi", "ErsatzV2MEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_RecoCaloMEt_Fail_EE = new TH1F("RecoCaloMEt", "Calometric #slashE_{T};#slashE_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1Mesc_Fail_EE = new TH1F("ErsatzV1Mesc", "Invariant Mass;Invariant Mass / GeV;Arbitrary Units", 100, 41., 141.); - TH1F* h_ErsatzV1rescMesc_Fail_EE = new TH1F("ErsatzV1rescMesc", "Rescaled Invariant Mass;Rescaled Invariant Mass / GeV;Arbitrary Units", 100, 41., 141.); - - TH1F* h_McZ_M_Fail_EE = new TH1F("McZ_M", "Monte Carlo Z Mass;Mass / GeV; Arbitrary Units", 100, 41., 141.); - TH1F* h_McZ_rescM_Fail_EE = new TH1F("McZ_rescM", "Monte Carlo Rescaled Z Mass;Mass / GeV;Arbitrary Units", 100, 41., 141.); - TH1F* h_McZ_Pt_Fail_EE = new TH1F("McZ_Pt", "Monte Carlo Z p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_McZ_rescPt_Fail_EE = new TH1F("McZ_rescPt", "Monte Carlo Rescaled Z p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_McZ_Eta_Fail_EE = new TH1F("McZ_eta", "Monte Carlo Z #eta;#eta;Arbitrary Units", 100, -3., 3.); -// TH1F* h_McZ_rescEta_Fail_EE = new TH1F("McZ_rescEta", "Monte Carlo Rescaled Z #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McZ_Phi_Fail_EE = new TH1F("McZ_phi", "Monte Carlo Z #phi;#phi;Arbitrary Units", 100, 0., 3.1416); -// TH1F* h_McZ_rescPhi_Fail_EE = new TH1F("McZ_rescPhi", "Monte Carlo Z Rescaled #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - - TH1F* h_McElec_Pt_Fail_EE = new TH1F("McElec_Pt", "Monte Carlo Electron p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_McElec_rescPt_Fail_EE = new TH1F("McElec_rescPt", "Monte Carlo Rescaled Electron p_{T};Rescaled p_{T};Arbitrary Units", 100, 0., 100.); - TH1F* h_McElec_Eta_Fail_EE = new TH1F("McElec_Eta", "Monte Carlo Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McElec_rescEta_Fail_EE = new TH1F("McElec_rescEta", "Monte Carlo Rescaled Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); -// TH1F* h_McElec_Phi_Fail_EE = new TH1F("McElec_Phi", "Monte Carlo Electron #phi;#phi;Arbitrary Units", 100, 0., 3.1416); -// TH1F* h_McElec_rescPhi_Fail_EE = new TH1F("McElec_rescPhi", "Monte Carlo Rescaled Electron #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - - TH1F* h_McErNu_Pt_Fail_EE = new TH1F("McErNu_Pt", "Monte Carlo Ersatz Neutrino p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_McErNu_rescPt_Fail_EE = new TH1F("McErNu_rescPt", "Monte Carlo Rescaled Ersatz Neutrino p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_McErNu_Eta_Fail_EE = new TH1F("McErNu_Eta", "Monte Carlo Ersatz Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McErNu_rescEta_Fail_EE = new TH1F("McErNu_rescEta", "Monte Carlo Rescaled Ersatz Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McErNu_Phi_Fail_EE = new TH1F("McErNu_Phi", "Monte Carlo Ersatz Neutrino #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_McErNu_rescPhi_Fail_EE = new TH1F("McErNu_rescPhi", "Monte Carlo Rescaled Ersatz Neutrino #phi;Rescaled #phi;Arbitrary Units", 100, 0., 3.1416); - - TH1F* h_McElecErNu_dPhi_Fail_EE = new TH1F("McElecErNu_dPhi", "Monte Carlo #Delta#phi between Electrons;#Delta#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_McElecErNu_dR_Fail_EE = new TH1F("McElecErNu_dR", "Monte Carlo #DeltaR between Electrons;MC Match;Arbitrary Units", 100, 0., 3.1416); - TH1I* h_McMatch_Fail_EE = new TH1I("McMatch", "Monte Carlo Match of Ersatz Neutrino to an Electron;MC Match;Arbitrary Units", 2, 0, 2); - -// TH1F* h_EtaInt_Fail_EE = new TH1F("EtaInt", "", 345, 0, 345); -// TH1F* h_EtaWeights_Fail_EE = new TH1F("EtaWeights", "", 40, 0., 2.); - cout << "Declared histograms h_xxx_Fail_EE" << endl; - - //TTree *t_pass_EB = new TTree(Pass_EB, "Pass_tIso_EB"); - //TTree *t_pass_EE = new TTree(Pass_EE, "Pass_tIso_EE"); - //TTree *t_fail_EB = new TTree(Fail_EB, "Fail_tIso_EB"); - //TTree *t_fail_EE = new TTree(Fail_EB, "Fail_tIso_EE"); - //TTree *t_pass_trackiso_EB = t->CloneTree(0); - //TTree *t_pass_trackiso_EE = t->CloneTree(0); - //TTree *t_fail_trackiso_EE = t->CloneTree(0); - //TTree *t_fail_trackiso_EE = t->CloneTree(0); - - //TString OutFileNameFail = "/tmp/rnandi/"+InFileName+"_Selected_Fail"; - //TFile *outfile_fail = TFile::Open(OutFileNameFail+".root", "recreate"); - - //TTree *t_fail_trackiso = t->CloneTree(0); - //t_fail_trackiso->SetTitle("Fail_tIso"); - - TFile *file = TFile::Open("/tmp/rnandi/"+InFileName+".root"); - - TTree *t = (TTree*) file->Get("ErsatzMEt/ErsatzMEt"); - std::cout<< "Got Tree " << t->GetTitle() << std::endl; -/* - int nErNu; - double tag_pt[4], tag_eta[4], tag_phi[4], probe_pt[4], probe_eta[4], probe_phi[4]; - double ErsatzV1bMEt[4]; - double elec_trckIso[4], elec_ECALIso[4], elec_HCALIso[4]; - double elec_sigIhIh[4], elec_dPhi[4], elec_dEta[4]; - double tag_rescPt[4], mesc[4]; - double nu_e1x5[4], nu_e2x5[4], nu_e5x5[4], nu_sigIhIh[4]; - double nu_HCALEt[4], nu_HCAL[4], nu_trckIso[4]; - double caloMEt; - int nu_elec; -*/ - cout << "Setting up branches." << endl; - - TBranch* bNum_Tags = t->GetBranch("nTags"); - bNum_Tags->SetAddress(&nTags); - TBranch* bNum_ErNu = t->GetBranch("nProbes"); - bNum_ErNu->SetAddress(&nErNu); - TBranch* bNum_McElecs_Zmum = t->GetBranch("McElec_nZmum"); - bNum_McElecs_Zmum->SetAddress(&nMcElecs_Zmum); - TBranch* bNum_McElecs_Final = t->GetBranch("McElec_nFinal"); - bNum_McElecs_Final->SetAddress(&nMcElecs_Final); - TBranch* bNum_RecHitsInStrip = t->GetBranch("nRecHitsInStrip"); - bNum_RecHitsInStrip->SetAddress(&nRecHitsInStrip); - TBranch* bNum_RecHitsInCone = t->GetBranch("nRecHitsInCone"); - bNum_RecHitsInCone->SetAddress(&nRecHitsInCone); - - //Z properties - TBranch* bZ_pt = t->GetBranch("Z_pt"); - bZ_pt->SetAddress(&Z_pt); - - //Selected electron properties - TBranch* bTag_q = t->GetBranch("tag_q"); - bTag_q->SetAddress(&elec_q); - TBranch* bTag_pt = t->GetBranch("tag_pt"); - bTag_pt->SetAddress(&elec_pt); - TBranch* bTag_eta = t->GetBranch("tag_eta"); - bTag_eta->SetAddress(&elec_eta); - TBranch* bTag_phi = t->GetBranch("tag_phi"); - bTag_phi->SetAddress(&elec_phi); - TBranch* bTag_rescPt = t->GetBranch("tag_rescPt"); - bTag_rescPt->SetAddress(&elec_rescPt); - TBranch* bTag_rescEta = t->GetBranch("tag_rescEta"); - bTag_rescEta->SetAddress(&elec_rescEta); -// TBranch* bTag_rescPhi = t->GetBranch("tag_rescPhi"); -// bTag_rescPhi->SetAddress(&elec_rescPhi); - - TBranch* bTag_sIhIh = t->GetBranch("tag_sIhIh"); - bTag_sIhIh->SetAddress(&elec_sIhIh); - TBranch* bTag_dPhi = t->GetBranch("tag_dPhiIn"); - bTag_dPhi->SetAddress(&elec_dPhi); - TBranch* bTag_dEta = t->GetBranch("tag_dEtaIn"); - bTag_dEta->SetAddress(&elec_dEta); - TBranch* bTag_tIso = t->GetBranch("tag_isoTrack"); - bTag_tIso->SetAddress(&elec_trkIso); - TBranch* bTag_eIso = t->GetBranch("tag_isoEcal"); - bTag_eIso->SetAddress(&elec_EcalIso); - TBranch* bTag_hIso = t->GetBranch("tag_isoHcal"); - bTag_hIso->SetAddress(&elec_HcalIso); - - //ersatz neutrino properties -// TBranch* bProbe_q = t->GetBranch("probe_q"); -// bProbe_q->SetAddress(&probe_q); - TBranch* bProbe_pt = t->GetBranch("probe_pt"); - bProbe_pt->SetAddress(&probe_pt); - TBranch* bProbe_eta = t->GetBranch("probe_eta"); - bProbe_eta->SetAddress(&probe_eta); - TBranch* bProbe_phi = t->GetBranch("probe_phi"); - bProbe_phi->SetAddress(&probe_phi); - TBranch* bProbe_rescPt = t->GetBranch("probe_rescPt"); - bProbe_rescPt->SetAddress(&probe_rescPt); - TBranch* bProbe_rescEta = t->GetBranch("probe_rescEta"); - bProbe_rescEta->SetAddress(&probe_rescEta); -// TBranch* bProbe_rescPhi = t->GetBranch("probe_rescPhi"); -// bProbe_rescPhi->SetAddress(&probe_rescPhi); - TBranch* bProbe_trckIso = t->GetBranch("probe_isoTrack"); - bProbe_trckIso->SetAddress(&ernu_trkIso); -// TBranch* bProbe_ECALIso = t->GetBranch("probe_isoECAL"); -// bProbe_ECALIso->SetAddress(&ernu_ECALIso); -// TBranch* bProbe_HCALIso = t->GetBranch("probe_isoHCAL"); -// bProbe_HCALIso->SetAddress(&ernu_HCALIso); - TBranch* bProbe_sIhIh = t->GetBranch("probe_sIhIh"); - bProbe_sIhIh->SetAddress(&ernu_sIhIh); -// TBranch* bProbe_DeltaEta = t->GetBranch("probe_DeltaEta"); -// bProbe_DeltaEta->SetAddress(&ernu_DeltaEta); -// TBranch* bProbe_DeltaPhiIso = t->GetBranch("probe_DeltaPhi"); -// bProbe_DeltaPhi->SetAddress(&ernu_DeltaPhi); - TBranch* bProbe_e1x5 = t->GetBranch("probe_e1x5Max"); - bProbe_e1x5->SetAddress(&ernu_e1x5); - TBranch* bProbe_e2x5 = t->GetBranch("probe_e2x5Max"); - bProbe_e2x5->SetAddress(&ernu_e2x5); - TBranch* bProbe_e5x5 = t->GetBranch("probe_e5x5"); - bProbe_e5x5->SetAddress(&ernu_e5x5); - TBranch* bProbe_HcalE015 = t->GetBranch("probe_HcalE015"); - bProbe_HcalE015->SetAddress(&ernu_HcalE015); - TBranch* bProbe_HcalEt015 = t->GetBranch("probe_HcalEt015"); - bProbe_HcalEt015->SetAddress(&ernu_HcalEt015); - - //Energy Correction results - TBranch* bProbe_E = t->GetBranch("probe_E"); - bProbe_E->SetAddress(&ernu_E); - TBranch* bProbe_rawE = t->GetBranch("probe_rawE"); - bProbe_rawE->SetAddress(&ernu_rawE); - TBranch* bProbe_unclusE = t->GetBranch("probe_UnclusEcalE"); - bProbe_unclusE->SetAddress(&ernu_unclusE); - TBranch* bProbe_fEtaCorrE = t->GetBranch("probe_fEtaCorrE"); - bProbe_fEtaCorrE->SetAddress(&ernu_fEtaCorrE); - TBranch* bProbe_fBremCorrE = t->GetBranch("probe_fBremCorrE"); - bProbe_fBremCorrE->SetAddress(&ernu_fBremCorrE); - TBranch* bProbe_AddCorrE = t->GetBranch("probe_EAdd"); - bProbe_AddCorrE->SetAddress(&ernu_AddCorrE); - TBranch* bProbe_d_MCE_SCE = t->GetBranch("probe_d_MCE_SCE"); - bProbe_d_MCE_SCE->SetAddress(&ernu_d_McE_ScE); - TBranch* bProbe_nClus = t->GetBranch("probe_nClus"); - bProbe_nClus->SetAddress(&ernu_nClusters); - - //Ersatz MEt results - TBranch* bErsatzV1_MEt = t->GetBranch("ErsatzV1CaloMEt"); - bErsatzV1_MEt->SetAddress(&ErsatzV1MEt); - TBranch* bErsatzV1_Mt = t->GetBranch("ErsatzV1CaloMt"); - bErsatzV1_Mt->SetAddress(&ErsatzV1Mt); - TBranch* bErsatzV1_MEtphi = t->GetBranch("ErsatzV1CaloMEtPhi"); - bErsatzV1_MEtphi->SetAddress(&ErsatzV1MEtphi); - - TBranch* bErsatzV1a_MEt = t->GetBranch("ErsatzV1aCaloMEt"); - bErsatzV1a_MEt->SetAddress(&ErsatzV1aMEt); - TBranch* bErsatzV1a_Mt = t->GetBranch("ErsatzV1aCaloMt"); - bErsatzV1a_Mt->SetAddress(&ErsatzV1aMt); - TBranch* bErsatzV1a_MEtphi = t->GetBranch("ErsatzV1aCaloMEtPhi"); - bErsatzV1a_MEtphi->SetAddress(&ErsatzV1aMEtphi); - - TBranch* bErsatzV1b_MEt = t->GetBranch("ErsatzV1bCaloMEt"); - bErsatzV1b_MEt->SetAddress(&ErsatzV1bMEt); - TBranch* bErsatzV1b_Mt = t->GetBranch("ErsatzV1bCaloMt"); - bErsatzV1b_Mt->SetAddress(&ErsatzV1bMt); - TBranch* bErsatzV1b_MEtphi = t->GetBranch("ErsatzV1bCaloMEtPhi"); - bErsatzV1b_MEtphi->SetAddress(&ErsatzV1bMEtphi); - - TBranch* bErsatzV1c_MEt = t->GetBranch("ErsatzV1cCaloMEt"); - bErsatzV1c_MEt->SetAddress(&ErsatzV1cMEt); - //TBranch* bErsatzV1c_Mt = t->GetBranch("ErsatzV1cCaloMt"); - //bErsatzV1c_Mt->SetAddress(&ErsatzV1cMt); - TBranch* bErsatzV1c_MEtphi = t->GetBranch("ErsatzV1cCaloMEtPhi"); - bErsatzV1c_MEtphi->SetAddress(&ErsatzV1cMEtphi); - - TBranch* bErsatzV2_MEt = t->GetBranch("ErsatzV2CaloMEt"); - bErsatzV2_MEt->SetAddress(&ErsatzV2MEt); - TBranch* bErsatzV2_Mt = t->GetBranch("ErsatzV2CaloMt"); - bErsatzV2_Mt->SetAddress(&ErsatzV2Mt); - TBranch* bErsatzV2_MEtphi = t->GetBranch("ErsatzV2CaloMEtPhi"); - bErsatzV2_MEtphi->SetAddress(&ErsatzV2MEtphi); - - TBranch* bMesc = t->GetBranch("ErsatzV1_Mesc"); - bMesc->SetAddress(&mesc); - TBranch* brescMesc = t->GetBranch("ErsatzV1_rescMesc"); - brescMesc->SetAddress(&rescMesc); - TBranch* bCaloMEt = t->GetBranch("recoCaloMEt"); - bCaloMEt->SetAddress(&caloMEt); - - TBranch* bMcZ_m = t->GetBranch("McZ_m"); - bMcZ_m->SetAddress(&McZ_m); - TBranch* bMcZ_pt = t->GetBranch("McZ_Pt"); - bMcZ_pt->SetAddress(&McZ_pt); -// TBranch* bMcZ_eta = t->GetBranch("McZ_eta"); -// bMcZ_eta->SetAddress(&McZ_eta); - TBranch* bMcZ_phi = t->GetBranch("McZ_Phi"); - bMcZ_phi->SetAddress(&McZ_phi); - TBranch* bMcZ_rescM = t->GetBranch("McZ_rescM"); - bMcZ_rescM->SetAddress(&McZ_rescM); -// TBranch* bMcZ_rescPt = t->GetBranch("McZ_rescPt"); -// bMcZ_rescPt->SetAddress(&McZ_rescPt); -// TBranch* bMcZ_rescEta = t->GetBranch("McZ_rescEta"); -// bMcZ_rescEta->SetAddress(&McZ_rescEta); -// TBranch* bMcZ_rescPhi = t->GetBranch("McZ_rescPhi"); -// bMcZ_rescPhi->SetAddress(&McZ_rescPhi); - - TBranch* bMcElec_pt = t->GetBranch("McElec_pt"); - bMcElec_pt->SetAddress(&McElec_pt); - TBranch* bMcElec_eta = t->GetBranch("McElec_eta"); - bMcElec_eta->SetAddress(&McElec_eta); -// TBranch* bMcElec_phi = t->GetBranch("McElec_phi"); -// bMcElec_phi->SetAddress(&McElec_phi); - TBranch* bMcElec_rescPt = t->GetBranch("McElec_rescPt"); - bMcElec_rescPt->SetAddress(&McElec_rescPt); - TBranch* bMcElec_rescEta = t->GetBranch("McElec_rescEta"); - bMcElec_rescEta->SetAddress(&McElec_rescEta); -// TBranch* bMcElec_rescPhi = t->GetBranch("McElec_rescPhi"); -// bMcElec_rescPhi->SetAddress(&McElec_rescPhi); - - TBranch* bMcErNu_pt = t->GetBranch("McProbe_pt"); - bMcErNu_pt->SetAddress(&McErNu_pt); - TBranch* bMcErNu_eta = t->GetBranch("McProbe_eta"); - bMcErNu_eta->SetAddress(&McErNu_eta); - TBranch* bMcErNu_phi = t->GetBranch("McProbe_phi"); - bMcErNu_phi->SetAddress(&McErNu_phi); - TBranch* bMcErNu_rescPt = t->GetBranch("McProbe_rescPt"); - bMcErNu_rescPt->SetAddress(&McErNu_rescPt); - TBranch* bMcErNu_rescEta = t->GetBranch("McProbe_rescEta"); - bMcErNu_rescEta->SetAddress(&McErNu_rescEta); - TBranch* bMcErNu_rescPhi = t->GetBranch("McProbe_rescPhi"); - bMcErNu_rescPhi->SetAddress(&McErNu_rescPhi); - - TBranch* bMcElecErNu_dPhi = t->GetBranch("McElecProbe_dPhi"); - bMcElecErNu_dPhi->SetAddress(&McElecErNu_dPhi); - TBranch* bMcElecErNu_dR = t->GetBranch("McElecProbe_dR"); - bMcElecErNu_dR->SetAddress(&McElecErNu_dR); -// TBranch* bProbe_elec = t->GetBranch("probe_elecMatch"); -// bProbe_elec->SetAddress(&ernu_McMatch); - - //TString OutFileName = "/tmp/rnandi/"+InFileName+"_Selected"; - //TFile *outfile = TFile::Open(OutFileName+".root", "recreate"); - - //TString OutFileName = "Zee_Histograms.root"; - //TFile *outfile = TFile::Open("/tmp/rnandi/Zee_Histograms.root", "recreate"); - -/* - TBranch* bNum_ErNu = t->GetBranch("nProbes"); - bNum_ErNu->SetAddress(&nErNu); - //W selected electron properties - TBranch* bTag_eta = t->GetBranch("tag_eta"); - bTag_eta->SetAddress(&tag_eta); - TBranch* bTag_pt = t->GetBranch("tag_pt"); - bTag_pt->SetAddress(&tag_pt); - TBranch* bTag_phi = t->GetBranch("tag_phi"); - bTag_phi->SetAddress(&tag_phi); - TBranch* bTag_rescPt = t->GetBranch("tag_rescPt"); - bTag_rescPt->SetAddress(&tag_rescPt); -// TBranch* = t->GetBranch(""); -// ->SetAddress(&); - TBranch* bTag_sIhIh = t->GetBranch("tag_sIhIh"); - bTag_sIhIh->SetAddress(&elec_sigIhIh); - TBranch* bTag_dPhi = t->GetBranch("tag_dPhiIn"); - bTag_dPhi->SetAddress(&elec_dPhi); - TBranch* bTag_dEta = t->GetBranch("tag_dEtaIn"); - bTag_dEta->SetAddress(&elec_dEta); - TBranch* bTag_tIso = t->GetBranch("tag_isoTrack"); - bTag_tIso->SetAddress(&elec_trckIso); - TBranch* bTag_eIso = t->GetBranch("tag_isoEcal"); - bTag_eIso->SetAddress(&elec_ECALIso); - TBranch* bTag_hIso = t->GetBranch("tag_isoHcal"); - bTag_hIso->SetAddress(&elec_HCALIso); - - //ersatz neutrino properties - TBranch* bProbe_pt = t->GetBranch("probe_pt"); - bProbe_pt->SetAddress(&probe_pt); - TBranch* bProbe_eta = t->GetBranch("probe_eta"); - bProbe_eta->SetAddress(&probe_eta); - TBranch* bProbe_phi = t->GetBranch("probe_phi"); - bProbe_phi->SetAddress(&probe_phi); - TBranch* bProbe_elec = t->GetBranch("probe_elecMatch"); - bProbe_elec->SetAddress(&nu_elec); - TBranch* bProbe_trckIso = t->GetBranch("probe_isoTrack"); - bProbe_trckIso->SetAddress(&nu_trckIso); - //TBranch* bProbe_ECALIso = t->GetBranch("probe_isoECAL"); - //bProbe_ECALIso->SetAddress(&nu_ECALIso); - //TBranch* bProbe_HCALIso = t->GetBranch("probe_isoHCAL"); - //bProbe_HCALIso->SetAddress(&nu_HCALIso); - TBranch* bProbe_sIhIh = t->GetBranch("probe_sIhIh"); - bProbe_sIhIh->SetAddress(&nu_sigIhIh); - //TBranch* bProbe_DeltaEta = t->GetBranch("probe_DeltaEta"); - //bProbe_DeltaEta->SetAddress(&nu_DeltaEta); - //TBranch* bProbe_DeltaPhiIso = t->GetBranch("probe_DeltaPhi"); - //bProbe_DeltaPhi->SetAddress(&nu_DeltaPhi); - TBranch* bProbe_e1x5 = t->GetBranch("probe_e1x5Max"); - bProbe_e1x5->SetAddress(&nu_e1x5); - TBranch* bProbe_e2x5 = t->GetBranch("probe_e2x5Max"); - bProbe_e2x5->SetAddress(&nu_e2x5); - TBranch* bProbe_e5x5 = t->GetBranch("probe_e5x5"); - bProbe_e5x5->SetAddress(&nu_e5x5); - TBranch* bProbe_HCAL = t->GetBranch("probe_HcalE015"); - bProbe_HCAL->SetAddress(&nu_HCAL); - TBranch* bProbe_HCALEt = t->GetBranch("probe_HcalEt015"); - bProbe_HCALEt->SetAddress(&nu_HCALEt); - //Ersatz MEt results - TBranch* bErsatzV1b_MEt = t->GetBranch("ErsatzV1bCaloMEt"); - bErsatzV1b_MEt->SetAddress(&ErsatzV1bMEt); - TBranch* bMesc = t->GetBranch("ErsatzV1_Mesc"); - bMesc->SetAddress(&mesc); - TBranch* bCaloMEt = t->GetBranch("recoCaloMEt"); - bCaloMEt->SetAddress(&caloMEt); -*/ - long nentries = t->GetEntries(); - std::cout <<"Processing "<< nentries << std::endl; - for(long i = 0; iGetEntry(i); - for(int j = 0; j < nErNu; ++j) - { - bool passEtCut = false; - /* - if(process == "Zee" || process == "BCtoE_30to80" || process == "BCtoE_80to170"){ - if(tag_rescPt[j] > cPt) passEtCut = true; - }else{ - if(tag_pt[j] > (91.188/80.398)*cPt) passEtCut = true; - } - */ - if(elec_rescPt[j] > cPt) passEtCut = true; - if(passEtCut) - { - if(fabs(mesc[j]-91.1876) < 21.1876) - { - bool pass_e_cuts = false; - bool inBarrel = false; - double cTrackiso; - if(fabs(elec_eta[j])<1.4442) - { - pass_e_cuts = (elec_EcalIso[j] < cECALiso_EB && elec_HcalIso[j] < cHCALiso_EB - && elec_sIhIh[j] < csIhIh_EB && elec_dPhi[j] < cDeltaPhi_EB - && elec_dEta[j] < cDeltaEta_EB); - cTrackiso = cTrackiso_EB; - inBarrel = true; - }else if(fabs(elec_eta[j] < 2.5)) - { - pass_e_cuts = (elec_EcalIso[j] < cECALiso_EE && elec_HcalIso[j] < cHCALiso_EE - && elec_sIhIh[j] < csIhIh_EE && elec_dPhi[j] < cDeltaPhi_EE - && elec_dEta[j] < cDeltaEta_EE); - cTrackiso = cTrackiso_EE; - } - if(pass_e_cuts) - { - bool pass_nu_cuts = false; - double f1x5 = ernu_e1x5[j]/ernu_e5x5[j]; - double f2x5 = ernu_e2x5[j]/ernu_e5x5[j]; - if(fabs(probe_eta[j]) < 1.4442) - { - pass_nu_cuts = (ernu_HcalE015[j] < cHCAL && (f1x5 > cf1x5 || f2x5 > cf2x5) - /*&& ernu_McMatch[j] == celecmatch*/); - }else if(fabs(probe_eta[j] < 2.5)){ - pass_nu_cuts = (ernu_HcalEt015[j] < cHCALEt && ernu_sIhIh[j] < cnusIhIh - /*&& ernu_McMatch[j] == celecmatch*/); - } - if(pass_nu_cuts) - { - if(elec_trkIso[j] < cTrackiso) - { - if(inBarrel) - { - h_nTags_Pass_EB->Fill(nTags); - h_nErNu_Pass_EB->Fill(nErNu); - h_nMcElecs_Zmum_Pass_EB->Fill(nMcElecs_Zmum); - h_nMcElecs_Final_Pass_EB->Fill(nMcElecs_Final); - h_RecoCaloMEt_Pass_EB->Fill(caloMEt); - - h_nRecHitsInStrip_Pass_EB->Fill(nRecHitsInStrip[j]); - h_nRecHitsInCone_Pass_EB->Fill(nRecHitsInCone[j]); - - h_Z_pt_Pass_EB->Fill(Z_pt[j]); - - h_elec_q_Pass_EB->Fill(elec_q[j]); - h_elec_pt_Pass_EB->Fill(elec_pt[j]); - h_elec_eta_Pass_EB->Fill(elec_eta[j]); - h_elec_phi_Pass_EB->Fill(elec_phi[j]); - h_elec_sIhIh_Pass_EB->Fill(elec_sIhIh[j]); - h_elec_dPhi_Pass_EB->Fill(elec_dPhi[j]); - h_elec_dEta_Pass_EB->Fill(elec_dEta[j]); - h_elec_TrkIso_Pass_EB->Fill(elec_trkIso[j]); - h_elec_EcalIso_Pass_EB->Fill(elec_EcalIso[j]); - h_elec_HcalIso_Pass_EB->Fill(elec_HcalIso[j]); - h_elec_rescPt_Pass_EB->Fill(elec_rescPt[j]); - h_elec_rescEta_Pass_EB->Fill(elec_rescEta[j]); - -// h_ErNu_q_Pass_EB->Fill(probe_q[j]); - h_ErNu_pt_Pass_EB->Fill(probe_pt[j]); - h_ErNu_eta_Pass_EB->Fill(probe_eta[j]); - h_ErNu_phi_Pass_EB->Fill(probe_phi[j]); - h_ErNu_rescPt_Pass_EB->Fill(probe_rescPt[j]); - h_ErNu_rescEta_Pass_EB->Fill(probe_rescEta[j]); - - h_ErNu_sIhIh_Pass_EB->Fill(ernu_sIhIh[j]); -// h_ErNu_dPhi_Pass_EB->Fill(ernu_dPhi[j]); -// h_ErNu_dEta_Pass_EB->Fill(ernu_dEta[j]); - h_ErNu_TrkIso_Pass_EB->Fill(ernu_trkIso[j]); -// h_ErNu_EcalIso_Pass_EB->Fill(ernu_EcalIso[j]); -// h_ErNu_HcalIso_Pass_EB->Fill(ernu_HcalIso[j]); - h_ErNu_e1x5Max_Pass_EB->Fill(ernu_e1x5[j]); - h_ErNu_e2x5Max_Pass_EB->Fill(ernu_e2x5[j]); - h_ErNu_e5x5_Pass_EB->Fill(ernu_e5x5[j]); - h_ErNu_HcalE015_Pass_EB->Fill(ernu_HcalE015[j]); - h_ErNu_HcalEt015_Pass_EB->Fill(ernu_HcalEt015[j]); - - h_ErNu_E_Pass_EB->Fill(ernu_E[j]); - h_ErNu_rawE_Pass_EB->Fill(ernu_rawE[j]); - h_ErNu_unclusE_Pass_EB->Fill(ernu_unclusE[j]); - h_ErNu_fEtaCorrE_Pass_EB->Fill(ernu_fEtaCorrE[j]); - h_ErNu_fBremCorrE_Pass_EB->Fill(ernu_fBremCorrE[j]); - h_ErNu_AddCorrE_Pass_EB->Fill(ernu_AddCorrE[j]); - h_ErNu_nClusters_Pass_EB->Fill(ernu_nClusters[j]); - -// h_ErsatzV1MEt_Pass_EB->Fill(ErsatzV1MEt[j]); -// h_ErsatzV1Mt_Pass_EB->Fill(ErsatzV1Mt[j]); -// h_ErsatzV1MEtphi_Pass_EB->Fill(ErsatzV1MEtphi[j]); -// h_ErsatzV1aMEt_Pass_EB->Fill(ErsatzV1aMEt[j]); -// h_ErsatzV1aMt_Pass_EB->Fill(ErsatzV1aMt[j]); -// h_ErsatzV1aMEtphi_Pass_EB->Fill(ErsatzV1aMEtphi[j]); - h_ErsatzV1bMEt_Pass_EB->Fill(ErsatzV1bMEt[j]); - h_ErsatzV1bMt_Pass_EB->Fill(ErsatzV1bMt[j]); - h_ErsatzV1bMEtphi_Pass_EB->Fill(ErsatzV1bMEtphi[j]); -// h_ErsatzV1cMEt_Pass_EB->Fill(ErsatzV1cMEt[j]); -// h_ErsatzV1cMt_Pass_EB->Fill(ErsatzV1cMt[j]); -// h_ErsatzV1cMEtphi_Pass_EB->Fill(ErsatzV1cMEtphi[j]); -// h_ErsatzV2MEt_Pass_EB->Fill(ErsatzV2MEt[j]); -// h_ErsatzV2Mt_Pass_EB->Fill(ErsatzV2Mt[j]); -// h_ErsatzV2MEtphi_Pass_EB->Fill(ErsatzV2MEtphi[j]); - h_ErsatzV1Mesc_Pass_EB->Fill(mesc[j]); - h_ErsatzV1rescMesc_Pass_EB->Fill(rescMesc[j]); - - h_McZ_M_Pass_EB->Fill(McZ_m[j]); - h_McZ_rescM_Pass_EB->Fill(McZ_rescM[j]); - h_McZ_Pt_Pass_EB->Fill(McZ_pt[j]); -// h_McZ_rescPt_Pass_EB->Fill(McZ_rescPt[j]); -// h_McZ_Eta_Pass_EB->Fill(McZ_eta[j]); -// h_McZ_rescEta_Pass_EB->Fill(McZ_rescEta[j]); - h_McZ_Phi_Pass_EB->Fill(McZ_phi[j]); -// h_McZ_rescPhi_Pass_EB->Fill(McZ_rescPhi[j]); - - h_McElec_Pt_Pass_EB->Fill(McElec_pt[j]); - h_McElec_rescPt_Pass_EB->Fill(McElec_rescPt[j]); - h_McElec_Eta_Pass_EB->Fill(McElec_eta[j]); - h_McElec_rescEta_Pass_EB->Fill(McElec_rescEta[j]); -// h_McElec_Phi_Pass_EB->Fill(McElec_phi[j]); -// h_McElec_rescPhi_Pass_EB->Fill(McElec_rescPhi[j]); - - h_McErNu_Pt_Pass_EB->Fill(McErNu_pt[j]); - h_McErNu_rescPt_Pass_EB->Fill(McErNu_rescPt[j]); - h_McErNu_Eta_Pass_EB->Fill(McErNu_eta[j]); - h_McErNu_rescEta_Pass_EB->Fill(McErNu_rescEta[j]); - h_McErNu_Phi_Pass_EB->Fill(McErNu_phi[j]); - h_McErNu_rescPhi_Pass_EB->Fill(McErNu_rescPhi[j]); - - h_McElecErNu_dPhi_Pass_EB->Fill(McElecErNu_dPhi[j]); - h_McElecErNu_dR_Pass_EB->Fill(McElecErNu_dR[j]); - h_McMatch_Pass_EB->Fill(ernu_McMatch[j]); - }else{ - h_nTags_Pass_EE->Fill(nTags); - h_nErNu_Pass_EE->Fill(nErNu); - h_nMcElecs_Zmum_Pass_EE->Fill(nMcElecs_Zmum); - h_nMcElecs_Final_Pass_EE->Fill(nMcElecs_Final); - h_RecoCaloMEt_Pass_EE->Fill(caloMEt); - - h_nRecHitsInStrip_Pass_EE->Fill(nRecHitsInStrip[j]); - h_nRecHitsInCone_Pass_EE->Fill(nRecHitsInCone[j]); - - h_Z_pt_Pass_EE->Fill(Z_pt[j]); - - h_elec_q_Pass_EE->Fill(elec_q[j]); - h_elec_pt_Pass_EE->Fill(elec_pt[j]); - h_elec_eta_Pass_EE->Fill(elec_eta[j]); - h_elec_phi_Pass_EE->Fill(elec_phi[j]); - h_elec_sIhIh_Pass_EE->Fill(elec_sIhIh[j]); - h_elec_dPhi_Pass_EE->Fill(elec_dPhi[j]); - h_elec_dEta_Pass_EE->Fill(elec_dEta[j]); - h_elec_TrkIso_Pass_EE->Fill(elec_trkIso[j]); - h_elec_EcalIso_Pass_EE->Fill(elec_EcalIso[j]); - h_elec_HcalIso_Pass_EE->Fill(elec_HcalIso[j]); - h_elec_rescPt_Pass_EE->Fill(elec_rescPt[j]); - h_elec_rescEta_Pass_EE->Fill(elec_rescEta[j]); - -// h_ErNu_q_Pass_EE->Fill(probe_q[j]); - h_ErNu_pt_Pass_EE->Fill(probe_pt[j]); - h_ErNu_eta_Pass_EE->Fill(probe_eta[j]); - h_ErNu_phi_Pass_EE->Fill(probe_phi[j]); - h_ErNu_rescPt_Pass_EE->Fill(probe_rescPt[j]); - h_ErNu_rescEta_Pass_EE->Fill(probe_rescEta[j]); - - h_ErNu_sIhIh_Pass_EE->Fill(ernu_sIhIh[j]); -// h_ErNu_dPhi_Pass_EE->Fill(ernu_dPhi[j]); -// h_ErNu_dEta_Pass_EE->Fill(ernu_dEta[j]); - h_ErNu_TrkIso_Pass_EE->Fill(ernu_trkIso[j]); -// h_ErNu_EcalIso_Pass_EE->Fill(ernu_EcalIso[j]); -// h_ErNu_HcalIso_Pass_EE->Fill(ernu_HcalIso[j]); - h_ErNu_e1x5Max_Pass_EE->Fill(ernu_e1x5[j]); - h_ErNu_e2x5Max_Pass_EE->Fill(ernu_e2x5[j]); - h_ErNu_e5x5_Pass_EE->Fill(ernu_e5x5[j]); - h_ErNu_HcalE015_Pass_EE->Fill(ernu_HcalE015[j]); - h_ErNu_HcalEt015_Pass_EE->Fill(ernu_HcalEt015[j]); - - h_ErNu_E_Pass_EE->Fill(ernu_E[j]); - h_ErNu_rawE_Pass_EE->Fill(ernu_rawE[j]); - h_ErNu_unclusE_Pass_EE->Fill(ernu_unclusE[j]); - h_ErNu_fEtaCorrE_Pass_EE->Fill(ernu_fEtaCorrE[j]); - h_ErNu_fBremCorrE_Pass_EE->Fill(ernu_fBremCorrE[j]); - h_ErNu_AddCorrE_Pass_EE->Fill(ernu_AddCorrE[j]); - h_ErNu_nClusters_Pass_EE->Fill(ernu_nClusters[j]); - -// h_ErsatzV1MEt_Pass_EE->Fill(ErsatzV1MEt[j]); -// h_ErsatzV1Mt_Pass_EE->Fill(ErsatzV1Mt[j]); -// h_ErsatzV1MEtphi_Pass_EE->Fill(ErsatzV1MEtphi[j]); -// h_ErsatzV1aMEt_Pass_EE->Fill(ErsatzV1aMEt[j]); -// h_ErsatzV1aMt_Pass_EE->Fill(ErsatzV1aMt[j]); -// h_ErsatzV1aMEtphi_Pass_EE->Fill(ErsatzV1aMEtphi[j]); - h_ErsatzV1bMEt_Pass_EE->Fill(ErsatzV1bMEt[j]); - h_ErsatzV1bMt_Pass_EE->Fill(ErsatzV1bMt[j]); - h_ErsatzV1bMEtphi_Pass_EE->Fill(ErsatzV1bMEtphi[j]); -// h_ErsatzV1cMEt_Pass_EE->Fill(ErsatzV1cMEt[j]); -// h_ErsatzV1cMt_Pass_EE->Fill(ErsatzV1cMt[j]); -// h_ErsatzV1cMEtphi_Pass_EE->Fill(ErsatzV1cMEtphi[j]); -// h_ErsatzV2MEt_Pass_EE->Fill(ErsatzV2MEt[j]); -// h_ErsatzV2Mt_Pass_EE->Fill(ErsatzV2Mt[j]); -// h_ErsatzV2MEtphi_Pass_EE->Fill(ErsatzV2MEtphi[j]); - h_ErsatzV1Mesc_Pass_EE->Fill(mesc[j]); - h_ErsatzV1rescMesc_Pass_EE->Fill(rescMesc[j]); - - h_McZ_M_Pass_EE->Fill(McZ_m[j]); - h_McZ_rescM_Pass_EE->Fill(McZ_rescM[j]); - h_McZ_Pt_Pass_EE->Fill(McZ_pt[j]); -// h_McZ_rescPt_Pass_EE->Fill(McZ_rescPt[j]); -// h_McZ_Eta_Pass_EE->Fill(McZ_eta[j]); -// h_McZ_rescEta_Pass_EE->Fill(McZ_rescEta[j]); - h_McZ_Phi_Pass_EE->Fill(McZ_phi[j]); -// h_McZ_rescPhi_Pass_EE->Fill(McZ_rescPhi[j]); - - h_McElec_Pt_Pass_EE->Fill(McElec_pt[j]); - h_McElec_rescPt_Pass_EE->Fill(McElec_rescPt[j]); - h_McElec_Eta_Pass_EE->Fill(McElec_eta[j]); - h_McElec_rescEta_Pass_EE->Fill(McElec_rescEta[j]); -// h_McElec_Phi_Pass_EE->Fill(McElec_phi[j]); -// h_McElec_rescPhi_Pass_EE->Fill(McElec_rescPhi[j]); - - h_McErNu_Pt_Pass_EE->Fill(McErNu_pt[j]); - h_McErNu_rescPt_Pass_EE->Fill(McErNu_rescPt[j]); - h_McErNu_Eta_Pass_EE->Fill(McErNu_eta[j]); - h_McErNu_rescEta_Pass_EE->Fill(McErNu_rescEta[j]); - h_McErNu_Phi_Pass_EE->Fill(McErNu_phi[j]); - h_McErNu_rescPhi_Pass_EE->Fill(McErNu_rescPhi[j]); - - h_McElecErNu_dPhi_Pass_EE->Fill(McElecErNu_dPhi[j]); - h_McElecErNu_dR_Pass_EE->Fill(McElecErNu_dR[j]); - h_McMatch_Pass_EE->Fill(ernu_McMatch[j]); - } - }else{ - if(inBarrel) - { - h_nTags_Fail_EB->Fill(nTags); - h_nErNu_Fail_EB->Fill(nErNu); - h_nMcElecs_Zmum_Fail_EB->Fill(nMcElecs_Zmum); - h_nMcElecs_Final_Fail_EB->Fill(nMcElecs_Final); - h_RecoCaloMEt_Fail_EB->Fill(caloMEt); - - h_nRecHitsInStrip_Fail_EB->Fill(nRecHitsInStrip[j]); - h_nRecHitsInCone_Fail_EB->Fill(nRecHitsInCone[j]); - - h_Z_pt_Fail_EB->Fill(Z_pt[j]); - - h_elec_q_Fail_EB->Fill(elec_q[j]); - h_elec_pt_Fail_EB->Fill(elec_pt[j]); - h_elec_eta_Fail_EB->Fill(elec_eta[j]); - h_elec_phi_Fail_EB->Fill(elec_phi[j]); - h_elec_sIhIh_Fail_EB->Fill(elec_sIhIh[j]); - h_elec_dPhi_Fail_EB->Fill(elec_dPhi[j]); - h_elec_dEta_Fail_EB->Fill(elec_dEta[j]); - h_elec_TrkIso_Fail_EB->Fill(elec_trkIso[j]); - h_elec_EcalIso_Fail_EB->Fill(elec_EcalIso[j]); - h_elec_HcalIso_Fail_EB->Fill(elec_HcalIso[j]); - h_elec_rescPt_Fail_EB->Fill(elec_rescPt[j]); - h_elec_rescEta_Fail_EB->Fill(elec_rescEta[j]); - -// h_ErNu_q_Fail_EB->Fill(probe_q[j]); - h_ErNu_pt_Fail_EB->Fill(probe_pt[j]); - h_ErNu_eta_Fail_EB->Fill(probe_eta[j]); - h_ErNu_phi_Fail_EB->Fill(probe_phi[j]); - h_ErNu_rescPt_Fail_EB->Fill(probe_rescPt[j]); - h_ErNu_rescEta_Fail_EB->Fill(probe_rescEta[j]); - - h_ErNu_sIhIh_Fail_EB->Fill(ernu_sIhIh[j]); -// h_ErNu_dPhi_Fail_EB->Fill(ernu_dPhi[j]); -// h_ErNu_dEta_Fail_EB->Fill(ernu_dEta[j]); - h_ErNu_TrkIso_Fail_EB->Fill(ernu_trkIso[j]); -// h_ErNu_EcalIso_Fail_EB->Fill(ernu_EcalIso[j]); -// h_ErNu_HcalIso_Fail_EB->Fill(ernu_HcalIso[j]); - h_ErNu_e1x5Max_Fail_EB->Fill(ernu_e1x5[j]); - h_ErNu_e2x5Max_Fail_EB->Fill(ernu_e2x5[j]); - h_ErNu_e5x5_Fail_EB->Fill(ernu_e5x5[j]); - h_ErNu_HcalE015_Fail_EB->Fill(ernu_HcalE015[j]); - h_ErNu_HcalEt015_Fail_EB->Fill(ernu_HcalEt015[j]); - - h_ErNu_E_Fail_EB->Fill(ernu_E[j]); - h_ErNu_rawE_Fail_EB->Fill(ernu_rawE[j]); - h_ErNu_unclusE_Fail_EB->Fill(ernu_unclusE[j]); - h_ErNu_fEtaCorrE_Fail_EB->Fill(ernu_fEtaCorrE[j]); - h_ErNu_fBremCorrE_Fail_EB->Fill(ernu_fBremCorrE[j]); - h_ErNu_AddCorrE_Fail_EB->Fill(ernu_AddCorrE[j]); - h_ErNu_nClusters_Fail_EB->Fill(ernu_nClusters[j]); - -// h_ErsatzV1MEt_Fail_EB->Fill(ErsatzV1MEt[j]); -// h_ErsatzV1Mt_Fail_EB->Fill(ErsatzV1Mt[j]); -// h_ErsatzV1MEtphi_Fail_EB->Fill(ErsatzV1MEtphi[j]); -// h_ErsatzV1aMEt_Fail_EB->Fill(ErsatzV1aMEt[j]); -// h_ErsatzV1aMt_Fail_EB->Fill(ErsatzV1aMt[j]); -// h_ErsatzV1aMEtphi_Fail_EB->Fill(ErsatzV1aMEtphi[j]); - h_ErsatzV1bMEt_Fail_EB->Fill(ErsatzV1bMEt[j]); - h_ErsatzV1bMt_Fail_EB->Fill(ErsatzV1bMt[j]); - h_ErsatzV1bMEtphi_Fail_EB->Fill(ErsatzV1bMEtphi[j]); -// h_ErsatzV1cMEt_Fail_EB->Fill(ErsatzV1cMEt[j]); -// h_ErsatzV1cMt_Fail_EB->Fill(ErsatzV1cMt[j]); -// h_ErsatzV1cMEtphi_Fail_EB->Fill(ErsatzV1cMEtphi[j]); -// h_ErsatzV2MEt_Fail_EB->Fill(ErsatzV2MEt[j]); -// h_ErsatzV2Mt_Fail_EB->Fill(ErsatzV2Mt[j]); -// h_ErsatzV2MEtphi_Fail_EB->Fill(ErsatzV2MEtphi[j]); - h_ErsatzV1Mesc_Fail_EB->Fill(mesc[j]); - h_ErsatzV1rescMesc_Fail_EB->Fill(rescMesc[j]); - - h_McZ_M_Fail_EB->Fill(McZ_m[j]); - h_McZ_rescM_Fail_EB->Fill(McZ_rescM[j]); - h_McZ_Pt_Fail_EB->Fill(McZ_pt[j]); -// h_McZ_rescPt_Fail_EB->Fill(McZ_rescPt[j]); -// h_McZ_Eta_Fail_EB->Fill(McZ_eta[j]); -// h_McZ_rescEta_Fail_EB->Fill(McZ_rescEta[j]); - h_McZ_Phi_Fail_EB->Fill(McZ_phi[j]); -// h_McZ_rescPhi_Fail_EB->Fill(McZ_rescPhi[j]); - - h_McElec_Pt_Fail_EB->Fill(McElec_pt[j]); - h_McElec_rescPt_Fail_EB->Fill(McElec_rescPt[j]); - h_McElec_Eta_Fail_EB->Fill(McElec_eta[j]); - h_McElec_rescEta_Fail_EB->Fill(McElec_rescEta[j]); -// h_McElec_Phi_Fail_EB->Fill(McElec_phi[j]); -// h_McElec_rescPhi_Fail_EB->Fill(McElec_rescPhi[j]); - - h_McErNu_Pt_Fail_EB->Fill(McErNu_pt[j]); - h_McErNu_rescPt_Fail_EB->Fill(McErNu_rescPt[j]); - h_McErNu_Eta_Fail_EB->Fill(McErNu_eta[j]); - h_McErNu_rescEta_Fail_EB->Fill(McErNu_rescEta[j]); - h_McErNu_Phi_Fail_EB->Fill(McErNu_phi[j]); - h_McErNu_rescPhi_Fail_EB->Fill(McErNu_rescPhi[j]); - - h_McElecErNu_dPhi_Fail_EB->Fill(McElecErNu_dPhi[j]); - h_McElecErNu_dR_Fail_EB->Fill(McElecErNu_dR[j]); - h_McMatch_Fail_EB->Fill(ernu_McMatch[j]); - }else{ - h_nTags_Fail_EE->Fill(nTags); - h_nErNu_Fail_EE->Fill(nErNu); - h_nMcElecs_Zmum_Fail_EE->Fill(nMcElecs_Zmum); - h_nMcElecs_Final_Fail_EE->Fill(nMcElecs_Final); - h_RecoCaloMEt_Fail_EE->Fill(caloMEt); - - h_nRecHitsInStrip_Fail_EE->Fill(nRecHitsInStrip[j]); - h_nRecHitsInCone_Fail_EE->Fill(nRecHitsInCone[j]); - - h_Z_pt_Fail_EE->Fill(Z_pt[j]); - - h_elec_q_Fail_EE->Fill(elec_q[j]); - h_elec_pt_Fail_EE->Fill(elec_pt[j]); - h_elec_eta_Fail_EE->Fill(elec_eta[j]); - h_elec_phi_Fail_EE->Fill(elec_phi[j]); - h_elec_sIhIh_Fail_EE->Fill(elec_sIhIh[j]); - h_elec_dPhi_Fail_EE->Fill(elec_dPhi[j]); - h_elec_dEta_Fail_EE->Fill(elec_dEta[j]); - h_elec_TrkIso_Fail_EE->Fill(elec_trkIso[j]); - h_elec_EcalIso_Fail_EE->Fill(elec_EcalIso[j]); - h_elec_HcalIso_Fail_EE->Fill(elec_HcalIso[j]); - h_elec_rescPt_Fail_EE->Fill(elec_rescPt[j]); - h_elec_rescEta_Fail_EE->Fill(elec_rescEta[j]); - -// h_ErNu_q_Fail_EE->Fill(probe_q[j]); - h_ErNu_pt_Fail_EE->Fill(probe_pt[j]); - h_ErNu_eta_Fail_EE->Fill(probe_eta[j]); - h_ErNu_phi_Fail_EE->Fill(probe_phi[j]); - h_ErNu_rescPt_Fail_EE->Fill(probe_rescPt[j]); - h_ErNu_rescEta_Fail_EE->Fill(probe_rescEta[j]); - - h_ErNu_sIhIh_Fail_EE->Fill(ernu_sIhIh[j]); -// h_ErNu_dPhi_Fail_EE->Fill(ernu_dPhi[j]); -// h_ErNu_dEta_Fail_EE->Fill(ernu_dEta[j]); - h_ErNu_TrkIso_Fail_EE->Fill(ernu_trkIso[j]); -// h_ErNu_EcalIso_Fail_EE->Fill(ernu_EcalIso[j]); -// h_ErNu_HcalIso_Fail_EE->Fill(ernu_HcalIso[j]); - h_ErNu_e1x5Max_Fail_EE->Fill(ernu_e1x5[j]); - h_ErNu_e2x5Max_Fail_EE->Fill(ernu_e2x5[j]); - h_ErNu_e5x5_Fail_EE->Fill(ernu_e5x5[j]); - h_ErNu_HcalE015_Fail_EE->Fill(ernu_HcalE015[j]); - h_ErNu_HcalEt015_Fail_EE->Fill(ernu_HcalEt015[j]); - - h_ErNu_E_Fail_EE->Fill(ernu_E[j]); - h_ErNu_rawE_Fail_EE->Fill(ernu_rawE[j]); - h_ErNu_unclusE_Fail_EE->Fill(ernu_unclusE[j]); - h_ErNu_fEtaCorrE_Fail_EE->Fill(ernu_fEtaCorrE[j]); - h_ErNu_fBremCorrE_Fail_EE->Fill(ernu_fBremCorrE[j]); - h_ErNu_AddCorrE_Fail_EE->Fill(ernu_AddCorrE[j]); - h_ErNu_nClusters_Fail_EE->Fill(ernu_nClusters[j]); - -// h_ErsatzV1MEt_Fail_EE->Fill(ErsatzV1MEt[j]); -// h_ErsatzV1Mt_Fail_EE->Fill(ErsatzV1Mt[j]); -// h_ErsatzV1MEtphi_Fail_EE->Fill(ErsatzV1MEtphi[j]); -// h_ErsatzV1aMEt_Fail_EE->Fill(ErsatzV1aMEt[j]); -// h_ErsatzV1aMt_Fail_EE->Fill(ErsatzV1aMt[j]); -// h_ErsatzV1aMEtphi_Fail_EE->Fill(ErsatzV1aMEtphi[j]); - h_ErsatzV1bMEt_Fail_EE->Fill(ErsatzV1bMEt[j]); - h_ErsatzV1bMt_Fail_EE->Fill(ErsatzV1bMt[j]); - h_ErsatzV1bMEtphi_Fail_EE->Fill(ErsatzV1bMEtphi[j]); -// h_ErsatzV1cMEt_Fail_EE->Fill(ErsatzV1cMEt[j]); -// h_ErsatzV1cMt_Fail_EE->Fill(ErsatzV1cMt[j]); -// h_ErsatzV1cMEtphi_Fail_EE->Fill(ErsatzV1cMEtphi[j]); -// h_ErsatzV2MEt_Fail_EE->Fill(ErsatzV2MEt[j]); -// h_ErsatzV2Mt_Fail_EE->Fill(ErsatzV2Mt[j]); -// h_ErsatzV2MEtphi_Fail_EE->Fill(ErsatzV2MEtphi[j]); - h_ErsatzV1Mesc_Fail_EE->Fill(mesc[j]); - h_ErsatzV1rescMesc_Fail_EE->Fill(rescMesc[j]); - - h_McZ_M_Fail_EE->Fill(McZ_m[j]); - h_McZ_rescM_Fail_EE->Fill(McZ_rescM[j]); - h_McZ_Pt_Fail_EE->Fill(McZ_pt[j]); -// h_McZ_rescPt_Fail_EE->Fill(McZ_rescPt[j]); -// h_McZ_Eta_Fail_EE->Fill(McZ_eta[j]); -// h_McZ_rescEta_Fail_EE->Fill(McZ_rescEta[j]); - h_McZ_Phi_Fail_EE->Fill(McZ_phi[j]); -// h_McZ_rescPhi_Fail_EE->Fill(McZ_rescPhi[j]); - - h_McElec_Pt_Fail_EE->Fill(McElec_pt[j]); - h_McElec_rescPt_Fail_EE->Fill(McElec_rescPt[j]); - h_McElec_Eta_Fail_EE->Fill(McElec_eta[j]); - h_McElec_rescEta_Fail_EE->Fill(McElec_rescEta[j]); -// h_McElec_Phi_Fail_EE->Fill(McElec_phi[j]); -// h_McElec_rescPhi_Fail_EE->Fill(McElec_rescPhi[j]); - - h_McErNu_Pt_Fail_EE->Fill(McErNu_pt[j]); - h_McErNu_rescPt_Fail_EE->Fill(McErNu_rescPt[j]); - h_McErNu_Eta_Fail_EE->Fill(McErNu_eta[j]); - h_McErNu_rescEta_Fail_EE->Fill(McErNu_rescEta[j]); - h_McErNu_Phi_Fail_EE->Fill(McErNu_phi[j]); - h_McErNu_rescPhi_Fail_EE->Fill(McErNu_rescPhi[j]); - - h_McElecErNu_dPhi_Fail_EE->Fill(McElecErNu_dPhi[j]); - h_McElecErNu_dR_Fail_EE->Fill(McElecErNu_dR[j]); - h_McMatch_Fail_EE->Fill(ernu_McMatch[j]); - } - } - } - } - } - } - } - } - //outfile->Write(); - //outfile->Close(); - outfile_pass_EB->Write(); - outfile_pass_EB->Close(); - outfile_pass_EE->Write(); - outfile_pass_EE->Close(); - outfile_fail_EB->Write(); - outfile_fail_EB->Close(); - outfile_fail_EE->Write(); - outfile_fail_EE->Close(); -} -/* -double deltaPhi(double phi1, double phi2) -{ - double result = phi1 - phi2; - while (result > acos(-1.)) result -= 2*acos(-1.); - while (result <= -acos(-1.)) result += 2*acos(-1.); - return result; -} - -double deltaR(double eta1, double phi1, double eta2, double phi2) -{ - double dEta = eta1-eta2; - double dPhi = deltaPhi(phi1, phi2); - double dR = sqrt(dEta*dEta+dPhi*dPhi); - return dR; -} -*/ diff --git a/ElectroWeakAnalysis/ZEE/macros/CutValues.txt b/ElectroWeakAnalysis/ZEE/macros/CutValues.txt deleted file mode 100644 index 19b2b381c9372..0000000000000 --- a/ElectroWeakAnalysis/ZEE/macros/CutValues.txt +++ /dev/null @@ -1,20 +0,0 @@ -30 -30 -4.2 -3.4 -2.0 -1.3 -2.2 -1.1 -0.0040 -0.0066 -0.025 -0.020 -0.0099 -0.028 -6.2 -0.83 -0.93 -1 -0.027 -12 diff --git a/ElectroWeakAnalysis/ZEE/macros/EtaWeights.txt b/ElectroWeakAnalysis/ZEE/macros/EtaWeights.txt deleted file mode 100644 index aed74790e2db5..0000000000000 --- a/ElectroWeakAnalysis/ZEE/macros/EtaWeights.txt +++ /dev/null @@ -1,345 +0,0 @@ -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -0.627218934911 -0.65224625624 -0.737151248164 -0.838565022422 -0.852090032154 -0.874125874126 -0.870827285922 -0.878698224852 -0.92125984252 -0.905479452055 -0.909090909091 -0.891737891738 -0.907172995781 -0.919137466307 -0.916883116883 -0.911196911197 -0.914004914005 -0.918709677419 -0.930487804878 -0.938021454112 -0.934324659232 -0.93023255814 -0.924731182796 -0.937432578209 -0.935286935287 -0.939936775553 -0.947608200456 -0.923901393355 -0.927789934354 -0.940267765191 -0.930996714129 -0.920750782065 -0.945205479452 -0.931034482759 -0.924698795181 -0.942073170732 -0.930646672915 -0.937076476283 -0.939835916135 -0.931569343066 -0.92574734812 -0.92221180881 -0.932743362832 -0.927710843373 -0.921327014218 -0.918273645546 -0.937068965517 -0.919827586207 -0.922619047619 -0.911184210526 -0.916234887737 -0.909807355517 -0.91202582728 -0.91492776886 -0.916015625 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -0.944892473118 -0.951181102362 -0.952822892498 -0.958990536278 -0.953846153846 -0.95 -0.948249619482 -0.952879581152 -0.95881006865 -0.950395398994 -0.955350815025 -0.959802538787 -0.949858757062 -0.964714184898 -0.965758211041 -0.964748201439 -0.967930029155 -0.971428571429 -0.975444538527 -0.961434370771 -0.959785522788 -0.969979986658 -0.963797814208 -0.965940054496 -0.969830295412 -0.958174904943 -0.967680608365 -0.954663212435 -0.970278637771 -0.963744232037 -0.974890144382 -0.965087281796 -0.975265017668 -0.966467065868 -0.976963969285 -0.96794081381 -0.966986794718 -0.971538040504 -0.967617579029 -0.974374255066 -0.973004020678 -0.959443800695 -0.973230220107 -0.967332123412 -0.975386376646 -0.966285714286 -0.973112128146 -0.968328445748 -0.976491862568 -0.970184853906 -0.975322490185 -0.966532025389 -0.974888392857 -0.972530683811 -0.968732234224 -0.975652173913 -0.976295479603 -0.976274608783 -0.9678546471 -0.976311336717 -0.979213483146 -0.979242979243 -0.969308035714 -0.976638176638 -0.97138047138 -0.966348850252 -0.974744760881 -0.978145304194 -0.969239071775 -0.969001148106 -0.973995271868 -0.966860465116 -0.975792507205 -0.970027247956 -0.971511627907 -0.967723984418 -0.972492836676 -0.974444444444 -0.972549019608 -0.962394067797 -0.958355579285 -0.951639799889 -0.954263128176 -0.954060705496 -0.948414830736 -0.944348823867 -0.948390677026 -0.96710153148 -0.96614872364 -0.965884861407 -0.968957871397 -0.972527472527 -0.977866061294 -0.973623853211 -0.969920544835 -0.970553592462 -0.967501331913 -0.971967654987 -0.975315414152 -0.972482113374 -0.978735005453 -0.965459610028 -0.972252448313 -0.977051061388 -0.969519343494 -0.977727013135 -0.967397414278 -0.969054441261 -0.975696926376 -0.98070907195 -0.976504297994 -0.970331588133 -0.962694877506 -0.975215517241 -0.973234624146 -0.977945443993 -0.974631268437 -0.971031286211 -0.970420932878 -0.971297359357 -0.969540229885 -0.974343310935 -0.975652173913 -0.971198156682 -0.965414430531 -0.970520231214 -0.976435045317 -0.979116945107 -0.960180315552 -0.968212610735 -0.969987995198 -0.969546302051 -0.965859714463 -0.970663265306 -0.970440251572 -0.963314358001 -0.958227848101 -0.9667752443 -0.966195451752 -0.967160334836 -0.952510176391 -0.967495219885 -0.971116816431 -0.96499339498 -0.964005235602 -0.958803986711 -0.966124661247 -0.964583333333 -0.957142857143 -0.969362745098 -0.960195530726 -0.959758551308 -0.959812458138 -0.955965909091 -0.96408045977 -0.951965065502 -0.957679180887 -0.949502133713 -0.96256299496 -0.952059925094 -0.956619296933 -0.941403238242 -0.951510333863 -0.951729106628 -0.955190440627 -0.937147461724 -0.944055944056 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -0.928 -0.909710391823 -0.922813036021 -0.920245398773 -0.922881355932 -0.925675675676 -0.934288121314 -0.946428571429 -0.926605504587 -0.919469026549 -0.933837429112 -0.940550133097 -0.936813186813 -0.948405253283 -0.929807692308 -0.933267909715 -0.934911242604 -0.936732766761 -0.922254616132 -0.923151750973 -0.939809926082 -0.925751879699 -0.950106157113 -0.949367088608 -0.930470347648 -0.930955120829 -0.937300743889 -0.914962325081 -0.941834451902 -0.923900118906 -0.922626025791 -0.925085130533 -0.928170594837 -0.908893709328 -0.924337957125 -0.927230046948 -0.92714453584 -0.916137229987 -0.921085080148 -0.938881664499 -0.921348314607 -0.912378303199 -0.905367231638 -0.924686192469 -0.934903047091 -0.899569583931 -0.883954154728 -0.868778280543 -0.893553223388 -0.868852459016 -0.845786963434 -0.825443786982 -0.757142857143 -0.657320872274 -0.592814371257 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 diff --git a/ElectroWeakAnalysis/ZEE/macros/PerformAnalysis.cpp b/ElectroWeakAnalysis/ZEE/macros/PerformAnalysis.cpp deleted file mode 100644 index 8182683a12e76..0000000000000 --- a/ElectroWeakAnalysis/ZEE/macros/PerformAnalysis.cpp +++ /dev/null @@ -1,628 +0,0 @@ -#include "TROOT.h" -#include "TFile.h" -#include "TTree.h" -#include "TH1.h" -#include "TF1.h" -#include "TRandom3.h" -#include "TString.h" -#include -#include -#include - -using namespace std; - -void PerformAnalysis(TString process, double eventweight, TString datapath)//, ofstream& results) //int main() -{ - cout << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%\%" << endl; - cout << "\% " << "Perform Analysis" << endl; - cout << "\% " << process << endl; - cout << "\% " << "Event Weight = " << eventweight << endl; - cout << "\% " << "Data Path = " << datapath << endl; - cout << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%\%" << endl; - - // Declare electron cut value variables - double cMEt = 30.; - double cPt = 30.; - double cECALiso_EB = 4.2, cECALiso_EE = 3.4; - double cHCALiso_EB = 2.0, cHCALiso_EE = 1.3; - double cTrackiso_EB = 2.2, cTrackiso_EE = 1.1; - double cDeltaEta_EB = 0.0040, cDeltaEta_EE = 0.0066; - double cDeltaPhi_EB = 0.025, cDeltaPhi_EE = 0.020; - double csIhIh_EB = 0.0099, csIhIh_EE = 0.0280; - // Declare neutrino cut value variables - double cHCAL = 6.2; - double cHCALEt = 12; - double cf1x5 = 0.83, cf2x5 = 0.93; - int celecmatch = 0; - double cnusIhIh = 0.027; - - cout << "Cut Values:" << endl; - - cout << "MEt cut " << cMEt << endl; - - cout << "Electron selection cuts:" << endl; - cout << "Pt cut " << cPt << endl; - cout << "ECAL Isolation cut (EB) " << cECALiso_EB << endl; - cout << "ECAL Isolation cut (EE) " << cECALiso_EE << endl; - cout << "HCAL Isolation cut (EB) " << cHCALiso_EB << endl; - cout << "HCAL Isolation cut (EE) " << cHCALiso_EE << endl; - cout << "Track Isolation cut (EB) " << cTrackiso_EB << endl; - cout << "Track Isolation cut (EE) " << cTrackiso_EE << endl; - cout << "Delta Eta cut (EB) " << cDeltaEta_EB << endl; - cout << "Delta Eta cut (EE) " << cDeltaEta_EE << endl; - cout << "Delta Phi cut (EB) " << cDeltaPhi_EB << endl; - cout << "Delta Phi cut (EE) " << cDeltaPhi_EE << endl; - cout << "Sigma iEta iEta cut (EB) " << csIhIh_EB << endl; - cout << "Sigma iEta iEta cut (EE) " << csIhIh_EE << endl; - - cout << "Probe selection cuts:" << endl; - cout << "HCAL Energy cut " << cHCAL << endl; - cout << "HCAL Transverse Energy cut " << cHCALEt << endl; - cout << "Fraction of energy in 1x5 cut " << cf1x5 << endl; - cout << "Fraction of energy in 2x5 cut " << cf2x5 << endl; - cout << "Require electron match " << celecmatch << endl; - cout << "Sigma iEta iEta cut " << cnusIhIh << endl; - - cout << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%\%" << endl; - // Import probe selection efficiency weights - double nueff[345]; - ifstream weightsin; - weightsin.open("EtaWeights.txt", ifstream::in); - - for(int eta=0; eta < 345; ++eta) - { - double weight; - weightsin >> weight; - //cout << eta << "\t" << weight << endl; - nueff[eta] = weight; - } - weightsin.close(); - cout << "Imported probe selection efficiencies" << endl; - - TString OutFileName = process+".root"; - TFile* outfile = TFile::Open(OutFileName, "recreate"); - - cout << "Created output file \"" << OutFileName << "\"" << endl; - - TH1F* h_dataWMEt_pass_EB = new TH1F("dataWMEt_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_dataWMEt_pass_EE = new TH1F("dataWMEt_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_dataWMEt_fail_EB = new TH1F("dataWMEt_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_dataWMEt_fail_EE = new TH1F("dataWMEt_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_mcWMEtin_pass_EB = new TH1F("mcWMEtin_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWMEtin_pass_EE = new TH1F("mcWMEtin_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWMEtin_fail_EB = new TH1F("mcWMEtin_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWMEtin_fail_EE = new TH1F("mcWMEtin_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWMEtout_pass_EB = new TH1F("mcWMEtout_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWMEtout_pass_EE = new TH1F("mcWMEtout_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWMEtout_fail_EB = new TH1F("mcWMEtout_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWMEtout_fail_EE = new TH1F("mcWMEtout_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_ErsatzMEt_pass_EB = new TH1F("ErsatzMEt_pass_EB","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_pass_EE = new TH1F("ErsatzMEt_pass_EE","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_fail_EB = new TH1F("ErsatzMEt_fail_EB","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_fail_EE = new TH1F("ErsatzMEt_fail_EE","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_ErsatzMEt_probept = new TH1F("ErsatzMEt_probept","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_uncorr = new TH1F("ErsatzMEt_uncorr","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_fetacorr = new TH1F("ErsatzMEt_fetacorr","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_fbremcorr = new TH1F("ErsatzMEt_fbremcorr","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_ErsatzMEt_pass_EB_peakfit = new TH1F("ErsatzMEt_pass_EB_peakfit","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_pass_EE_peakfit = new TH1F("ErsatzMEt_pass_EE_peakfit","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WMEt_pass_EB_peakfit = new TH1F("WMEt_pass_EB_peakfit","W MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WMEt_pass_EE_peakfit = new TH1F("WMEt_pass_EE_peakfit","W MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_ErsatzMEt_pass_EB_shifted = new TH1F("ErsatzMEt_pass_EB_shifted","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_pass_EE_shifted = new TH1F("ErsatzMEt_pass_EE_shifted","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_fail_EB_shifted = new TH1F("ErsatzMEt_fail_EB_shifted","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_fail_EE_shifted = new TH1F("ErsatzMEt_fail_EE_shifted","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_acceptance_correction_pass_EB = new TH1F("acceptacne_correction_pass_EB", "Acceptance Correction pass EB;#slash{E_{T}};Acceptance Correction", 100, 0., 100.); - TH1F* h_acceptance_correction_pass_EE = new TH1F("acceptacne_correction_pass_EE", "Acceptance Correction pass EE;#slash{E_{T}};Acceptance Correction", 100, 0., 100.); - TH1F* h_acceptance_correction_fail_EB = new TH1F("acceptacne_correction_fail_EB", "Acceptance Correction fail EB;#slash{E_{T}};Acceptance Correction", 100, 0., 100.); - TH1F* h_acceptance_correction_fail_EE = new TH1F("acceptacne_correction_fail_EE", "Acceptance Correction fail EE;#slash{E_{T}};Acceptance Correction", 100, 0., 100.); - - TH1F* h_ErsatzMEt_pass_EB_corr = new TH1F("ErsatzMEt_pass_EB_corr","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_pass_EE_corr = new TH1F("ErsatzMEt_pass_EE_corr","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_fail_EB_corr = new TH1F("ErsatzMEt_fail_EB_corr","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_fail_EE_corr = new TH1F("ErsatzMEt_fail_EE_corr","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - cout << "Declared Histograms" << endl; - - vector ErsatzMEt_pass_EB; - vector ErsatzMEt_pass_EE; - vector ErsatzMEt_fail_EB; - vector ErsatzMEt_fail_EE; - - vector Weight_pass_EB; - vector Weight_pass_EE; - vector Weight_fail_EB; - vector Weight_fail_EE; - - TRandom3 r; - - TString WFileName = datapath+"WenuTrue.root"; - TFile *fileW = TFile::Open(WFileName); - cout << "Opened W Monte Carlo file" << endl; - TTree *t = (TTree*) fileW->Get("analyse/AnalysisData"); - cout << "Got W TTree" << endl; - - long nEntries = t->GetEntriesFast(); - cout << "Total number of W events = " << nEntries << endl; - - double elec_pt_W[4], elec_eta_W[4]; - double elec_trckIso_W[4]/*, elec_EcalIso_W[4], elec_HcalIso_W[4]*/; - double elec_sigIhIh_W[4]/*, elec_dPhi_W[4], elec_dEta_W[4]*/; - - double nu_pt_W, nu_eta_W, nu_ECALeta_W, nu_phi_W; - - //double McW_pt, McW_phi; - double CaloMEt_W;//, CaloMEt25, CaloMEt30; - //double CaloMt[4];// CaloMt25[4], CaloMt30[4]; - -// TBranch* bMcW_pt = t->GetBranch("Boson_pt"); -// bMcW_pt->SetAddress(&McW_pt); -// TBranch* bMcW_phi = t->GetBranch("Boson_phi"); -// bMcW_phi->SetAddress(&McW_phi); -// TBranch* bNSelElecs = t->GetBranch("nSelElecs"); -// bNSelElecs->SetAddress(&nSelElecs); - TBranch* bElec_eta = t->GetBranch("elec_eta"); - bElec_eta->SetAddress(&elec_eta_W); - TBranch* bElec_pt = t->GetBranch("elec_pt"); - bElec_pt->SetAddress(&elec_pt_W); - - TBranch* bTag_sIhIh_W = t->GetBranch("elec_sIhIh"); - bTag_sIhIh_W->SetAddress(&elec_sigIhIh_W); - //TBranch* bTag_dPhi = t->GetBranch("elec_dPhiIn"); - //bTag_dPhi->SetAddress(&elec_dPhi_W); - //TBranch* bTag_dEta = t->GetBranch("elec_dEtaIn"); - //bTag_dEta->SetAddress(&elec_dEta_W); - TBranch* bTag_tIso_W = t->GetBranch("elec_isoTrack"); - bTag_tIso_W->SetAddress(&elec_trckIso_W); - //TBranch* bTag_eIso = t->GetBranch("elec_isoEcal"); - //bTag_eIso->SetAddress(&elec_EcalIso_W); - //TBranch* bTag_hIso = t->GetBranch("elec_isoHcal"); - //bTag_hIso->SetAddress(&elec_HcalIso_W); - - // TBranch* = t->GetBranch(""); -// ->SetAddress(&); - TBranch* bMcNu_pt = t->GetBranch("McNu_pt"); - bMcNu_pt->SetAddress(&nu_pt_W); - TBranch* bMcNu_phi = t->GetBranch("McNu_phi"); - bMcNu_phi->SetAddress(&nu_phi_W); - TBranch* bMcNu_eta = t->GetBranch("McNu_eta"); - bMcNu_eta->SetAddress(&nu_eta_W); - TBranch* bMcNu_ECALeta = t->GetBranch("McNu_ECALeta"); - bMcNu_ECALeta->SetAddress(&nu_ECALeta_W); - TBranch* bCalo_MEt = t->GetBranch("caloMEt"); - bCalo_MEt->SetAddress(&CaloMEt_W); -// TBranch* bCalo_MEt25 = t->GetBranch("caloMEt25"); -// bCalo_MEt25->SetAddress(&CaloMEt25); -// TBranch* bCalo_MEt30 = t->GetBranch("caloMEt30"); -// bCalo_MEt30->SetAddress(&CaloMEt30); -// TBranch* bCalo_Mt = t->GetBranch("caloMt"); -// bCalo_Mt->SetAddress(&CaloMt); - cout << "Set up branches" << endl; - - //long nentries = t->GetEntries(); - //int index = 0; - int aaa = 0, bbb = 0, ccc = 0, ddd = 0; - for(long i = 0; i < nEntries; ++i) - { - if(i%100000 == 0) cout <<"Analysing event "<< i << endl; - //if (i == ChosenEvents[index]) - //{ - //index++; - //bool iIsChosen = (i == ChosenEvents[index]); - t->GetEntry(i); - if(elec_pt_W[0] > cPt) - { - bool pass_e_cuts = false; - bool pass_trkiso_cut = false; - bool inBarrel = false; - bool inEndcap = false; - if(fabs(elec_eta_W[0]) < 1.4442) - { - pass_e_cuts = (elec_sigIhIh_W[0] < csIhIh_EB); - pass_trkiso_cut = (elec_trckIso_W[0] < cTrackiso_EB); - inBarrel = true; - }else if(fabs(elec_eta_W[0]) < 2.5) - { - pass_e_cuts = (elec_sigIhIh_W[0] < csIhIh_EE); - pass_trkiso_cut = (elec_trckIso_W[0] < cTrackiso_EE); - inEndcap = true; - } - if(pass_e_cuts) - { - if(pass_trkiso_cut) - { - if(inBarrel) - { - h_dataWMEt_pass_EB->Fill(CaloMEt_W); - h_WMEt_pass_EB_peakfit->Fill(CaloMEt_W); - aaa++; - if(fabs(nu_eta_W) < 2.5) - { - h_mcWMEtin_pass_EB->Fill(CaloMEt_W); - }else{ - h_mcWMEtout_pass_EB->Fill(CaloMEt_W); - } - } - if(inEndcap) - { - h_dataWMEt_pass_EE->Fill(CaloMEt_W); - h_WMEt_pass_EE_peakfit->Fill(CaloMEt_W); - bbb++; - if(fabs(nu_eta_W) < 2.5) - { - h_mcWMEtin_pass_EE->Fill(CaloMEt_W); - }else{ - h_mcWMEtout_pass_EE->Fill(CaloMEt_W); - } - } - }else - { - if(inBarrel) - { - h_dataWMEt_fail_EB->Fill(CaloMEt_W); - ccc++; - if(fabs(nu_eta_W) < 2.5) - { - h_mcWMEtin_fail_EB->Fill(CaloMEt_W); - }else{ - h_mcWMEtout_fail_EB->Fill(CaloMEt_W); - } - } - if(inEndcap) - { - h_dataWMEt_fail_EE->Fill(CaloMEt_W); - ddd++; - if(fabs(nu_eta_W) < 2.5) - { - h_mcWMEtin_fail_EE->Fill(CaloMEt_W); - }else{ - h_mcWMEtout_fail_EE->Fill(CaloMEt_W); - } - } - } - } - } - } - fileW->Close(); - cout << "Closed W Monte Carlo file" << endl; - - cout << "Number of W events passing selection cuts = " << aaa+bbb+ccc+ddd << endl; - cout << "Number Pass EB = " << aaa << endl; - cout << "Number Pass EE = " << bbb << endl; - cout << "Number Fail EB = " << ccc << endl; - cout << "Number Fail EE = " << ddd << endl; - - TString ErsatzFileName = datapath+process+".root"; - TFile *fileZ = TFile::Open(ErsatzFileName); - cout << "Opened Ersatz data file" << endl; - t = (TTree*) fileZ->Get("ErsatzMEt/ErsatzMEt"); - cout << "Got ersatz TTree" << endl; - nEntries = t->GetEntries(); - cout << "Total number of ersatz events = " << nEntries << endl; - - int nErNu; - double tag_pt[4], tag_eta[4], tag_phi[4], probe_pt[4], probe_eta[4], probe_phi[4]; - double ErsatzV1MEt[4], ErsatzV1aMEt[4], ErsatzV1bMEt[4]; - double elec_trkIso[4], elec_ECALIso[4], elec_HCALIso[4]; - double elec_sigIhIh[4], elec_dPhi[4], elec_dEta[4]; - double tag_rescPt[4], mesc[4]; - double nu_e1x5[4], nu_e2x5[4], nu_e5x5[4], nu_sigIhIh[4]; - double nu_HCALEt[4], nu_HCAL[4], nu_trckIso[4]; - double caloMEt; - //int nu_elec[4]; - - TBranch* bNum_ErNu = t->GetBranch("nProbes"); - bNum_ErNu->SetAddress(&nErNu); - //W selected electron properties - TBranch* bTag_eta = t->GetBranch("tag_eta"); - bTag_eta->SetAddress(&tag_eta); - TBranch* bTag_pt = t->GetBranch("tag_pt"); - bTag_pt->SetAddress(&tag_pt); - TBranch* bTag_phi = t->GetBranch("tag_phi"); - bTag_phi->SetAddress(&tag_phi); - TBranch* bTag_rescPt = t->GetBranch("tag_rescPt"); - bTag_rescPt->SetAddress(&tag_rescPt); -// TBranch* = t->GetBranch(""); -// ->SetAddress(&); - TBranch* bTag_sIhIh = t->GetBranch("tag_sIhIh"); - bTag_sIhIh->SetAddress(&elec_sigIhIh); - TBranch* bTag_dPhi = t->GetBranch("tag_dPhiIn"); - bTag_dPhi->SetAddress(&elec_dPhi); - TBranch* bTag_dEta = t->GetBranch("tag_dEtaIn"); - bTag_dEta->SetAddress(&elec_dEta); - TBranch* bTag_tIso = t->GetBranch("tag_isoTrack"); - bTag_tIso->SetAddress(&elec_trkIso); - TBranch* bTag_eIso = t->GetBranch("tag_isoEcal"); - bTag_eIso->SetAddress(&elec_ECALIso); - TBranch* bTag_hIso = t->GetBranch("tag_isoHcal"); - bTag_hIso->SetAddress(&elec_HCALIso); - //ersatz neutrino properties - TBranch* bProbe_pt = t->GetBranch("probe_pt"); - bProbe_pt->SetAddress(&probe_pt); - TBranch* bProbe_eta = t->GetBranch("probe_eta"); - bProbe_eta->SetAddress(&probe_eta); - TBranch* bProbe_phi = t->GetBranch("probe_phi"); - bProbe_phi->SetAddress(&probe_phi); - //TBranch* bProbe_elec = t->GetBranch("probe_elecMatch"); - //bProbe_elec->SetAddress(&nu_elec); - TBranch* bProbe_trckIso = t->GetBranch("probe_isoTrack"); - bProbe_trckIso->SetAddress(&nu_trckIso); - //TBranch* bProbe_ECALIso = t->GetBranch("probe_isoECAL"); - //bProbe_ECALIso->SetAddress(&nu_ECALIso); - //TBranch* bProbe_HCALIso = t->GetBranch("probe_isoHCAL"); - //bProbe_HCALIso->SetAddress(&nu_HCALIso); - TBranch* bProbe_sIhIh = t->GetBranch("probe_sIhIh"); - bProbe_sIhIh->SetAddress(&nu_sigIhIh); - //TBranch* bProbe_DeltaEta = t->GetBranch("probe_DeltaEta"); - //bProbe_DeltaEta->SetAddress(&nu_DeltaEta); - //TBranch* bProbe_DeltaPhiIso = t->GetBranch("probe_DeltaPhi"); - //bProbe_DeltaPhi->SetAddress(&nu_DeltaPhi); - TBranch* bProbe_e1x5 = t->GetBranch("probe_e1x5Max"); - bProbe_e1x5->SetAddress(&nu_e1x5); - TBranch* bProbe_e2x5 = t->GetBranch("probe_e2x5Max"); - bProbe_e2x5->SetAddress(&nu_e2x5); - TBranch* bProbe_e5x5 = t->GetBranch("probe_e5x5"); - bProbe_e5x5->SetAddress(&nu_e5x5); - TBranch* bProbe_HCAL = t->GetBranch("probe_HcalE015"); - bProbe_HCAL->SetAddress(&nu_HCAL); - TBranch* bProbe_HCALEt = t->GetBranch("probe_HcalEt015"); - bProbe_HCALEt->SetAddress(&nu_HCALEt); - //Ersatz MEt results - TBranch* bErsatzV1_MEt = t->GetBranch("ErsatzV1CaloMEt"); - bErsatzV1_MEt->SetAddress(&ErsatzV1MEt); - TBranch* bErsatzV1a_MEt = t->GetBranch("ErsatzV1aCaloMEt"); - bErsatzV1a_MEt->SetAddress(&ErsatzV1aMEt); - TBranch* bErsatzV1b_MEt = t->GetBranch("ErsatzV1bCaloMEt"); - bErsatzV1b_MEt->SetAddress(&ErsatzV1bMEt); - TBranch* bMesc = t->GetBranch("ErsatzV1_Mesc"); - bMesc->SetAddress(&mesc); - TBranch* bCaloMEt = t->GetBranch("recoCaloMEt"); - bCaloMEt->SetAddress(&caloMEt); - cout << "Set up Branches" << endl; - - aaa=0, bbb=0, ccc=0, ddd=0; - for(int i=0; i < nEntries; ++i) - { - if(i%100000 == 0) cout <<"Processing event "<< i << endl; - t->GetEntry(i); - for(int j = 0; j < nErNu; ++j) - { - bool passEtCut = false; - if(tag_rescPt[j] > cPt) passEtCut = true; - /* - if(process == "Zee" || process == "BCtoE_30to80" || process == "BCtoE_80to170"){ - if(tag_rescPt[j] > cPt) passEtCut = true; - }else{ - if(tag_pt[j] > (91.188/80.398)*cPt) passEtCut = true; - } - */ - if(passEtCut) - { - if(fabs(mesc[j]-91.1876) < 21.1876) - { - bool pass_e_cuts = false; - bool pass_trkiso_cut = false; - bool inBarrel = false; - bool inEndcap = false; - if(fabs(tag_eta[j])<1.4442) - { - pass_e_cuts = (elec_ECALIso[j] < cECALiso_EB && elec_HCALIso[j] < cHCALiso_EB - && elec_sigIhIh[j] < csIhIh_EB && elec_dPhi[j] < cDeltaPhi_EB - && elec_dEta[j] < cDeltaEta_EB); - pass_trkiso_cut = (elec_trkIso[j] < cTrackiso_EB); - inBarrel = true; - }else if(fabs(tag_eta[j] < 2.5)) - { - pass_e_cuts = (elec_ECALIso[j] < cECALiso_EE && elec_HCALIso[j] < cHCALiso_EE - && elec_sigIhIh[j] < csIhIh_EE && elec_dPhi[j] < cDeltaPhi_EE - && elec_dEta[j] < cDeltaEta_EE); - pass_trkiso_cut = (elec_trkIso[j] < cTrackiso_EE); - inEndcap = true; - } - if(pass_e_cuts) - { - bool pass_nu_cuts = false; - double f1x5 = nu_e1x5[j]/nu_e5x5[j]; - double f2x5 = nu_e2x5[j]/nu_e5x5[j]; - if(fabs(probe_eta[j]) < 1.4442) - { - pass_nu_cuts = (nu_HCAL[j] < cHCAL && (f1x5 > cf1x5 || f2x5 > cf2x5) - /*&& nu_elec[j] == celecmatch*/); - }else if(fabs(probe_eta[j] < 2.5)){ - pass_nu_cuts = (nu_HCALEt[j] < cHCALEt && nu_sigIhIh[j] < cnusIhIh - /*&& nu_elec[j] == celecmatch*/); - } - if(pass_nu_cuts) - { - int EtaInt = int((probe_eta[j] + 3.)/0.01739); - double weight = eventweight/nueff[EtaInt]; - if(pass_trkiso_cut) - { - if(inBarrel) - { - aaa++; - ErsatzMEt_pass_EB.push_back(ErsatzV1bMEt[j]); - Weight_pass_EB.push_back(weight); - h_ErsatzMEt_pass_EB->Fill(ErsatzV1bMEt[j], weight); - h_ErsatzMEt_pass_EB_peakfit->Fill(ErsatzV1bMEt[j], weight); - h_ErsatzMEt_probept->Fill(probe_pt[j], weight); - h_ErsatzMEt_uncorr->Fill(ErsatzV1MEt[j], weight); - h_ErsatzMEt_fetacorr->Fill(ErsatzV1aMEt[j], weight); - h_ErsatzMEt_fbremcorr->Fill(ErsatzV1bMEt[j], weight); - } - if(inEndcap) - { - bbb++; - ErsatzMEt_pass_EE.push_back(ErsatzV1bMEt[j]); - Weight_pass_EE.push_back(weight); - h_ErsatzMEt_pass_EE->Fill(ErsatzV1bMEt[j], weight); - h_ErsatzMEt_pass_EE_peakfit->Fill(ErsatzV1bMEt[j], weight); - h_ErsatzMEt_probept->Fill(probe_pt[j], weight); - h_ErsatzMEt_uncorr->Fill(ErsatzV1MEt[j], weight); - h_ErsatzMEt_fetacorr->Fill(ErsatzV1aMEt[j], weight); - h_ErsatzMEt_fbremcorr->Fill(ErsatzV1bMEt[j], weight); - } - }else{ - if(inBarrel) - { - ccc++; - ErsatzMEt_fail_EB.push_back(ErsatzV1bMEt[j]); - Weight_fail_EB.push_back(weight); - h_ErsatzMEt_fail_EB->Fill(ErsatzV1bMEt[j], weight); - } - if(inEndcap) - { - ddd++; - ErsatzMEt_fail_EE.push_back(ErsatzV1bMEt[j]); - Weight_fail_EE.push_back(weight); - h_ErsatzMEt_fail_EE->Fill(ErsatzV1bMEt[j], weight); - } - } - } - } - } - } - } - } - fileZ->Close(); - cout << "Closed Ersatz data file" << endl; - - cout << "Number of events passing selection cuts = " << aaa+bbb+ccc+ddd << endl; - cout << "Number Pass EB = " << aaa << endl; - cout << "Number Pass EE = " << bbb << endl; - cout << "Number Fail EB = " << ccc << endl; - cout << "Number Fail EE = " << ddd << endl; - - cout << "Apply shift correction ..." << endl; - - int maxbin; - - h_WMEt_pass_EB_peakfit->Scale(1./h_WMEt_pass_EB_peakfit->Integral(0,100)); - maxbin = h_WMEt_pass_EB_peakfit->GetMaximumBin(); - TF1 peakW_EB = TF1("peakW_EB", "gaus", maxbin-4, maxbin+4); - h_WMEt_pass_EB_peakfit->Fit("peakW_EB", "MR"); - cout << "W MEt maximum bin = " << maxbin << "\tPeak of Gaussian = " << peakW_EB.GetParameter(1) << endl; - h_WMEt_pass_EB_peakfit->Draw(); - - h_ErsatzMEt_pass_EB_peakfit->Scale(1./h_ErsatzMEt_pass_EB_peakfit->Integral(0,100)); - maxbin = h_ErsatzMEt_pass_EB_peakfit->GetMaximumBin(); - TF1 peakZ_EB = TF1("peakZ_EB", "gaus", maxbin-4, maxbin+4); - h_ErsatzMEt_pass_EB_peakfit->Fit("peakZ_EB", "MR"); - cout << "Ersatz maximum bin = " << maxbin << "\tPeak of Gaussian = " << peakZ_EB.GetParameter(1) << endl; - h_ErsatzMEt_pass_EB_peakfit->Draw(); - - double shift_EB = peakW_EB.GetParameter(1) - peakZ_EB.GetParameter(1); - cout << "EB Shift = " << shift_EB << endl; - - h_WMEt_pass_EE_peakfit->Scale(1./h_WMEt_pass_EE_peakfit->Integral(0,100)); - maxbin = h_WMEt_pass_EE_peakfit->GetMaximumBin(); - TF1 peakW_EE = TF1("peakW_EE", "gaus", maxbin-4, maxbin+4); - h_WMEt_pass_EE_peakfit->Fit("peakW_EE", "MR"); - cout << "W MEt maximum bin = " << maxbin << "\tPeak of Gaussian = " << peakW_EE.GetParameter(1) << endl; - h_WMEt_pass_EE_peakfit->Draw(); - - h_ErsatzMEt_pass_EE_peakfit->Scale(1./h_ErsatzMEt_pass_EE_peakfit->Integral(0,100)); - maxbin = h_ErsatzMEt_pass_EE_peakfit->GetMaximumBin(); - TF1 peakZ_EE = TF1("peakZ_EE", "gaus", maxbin-4, maxbin+4); - h_ErsatzMEt_pass_EE_peakfit->Fit("peakZ_EE", "MR"); - cout << "Ersatz maximum bin = " << maxbin << "\tPeak of Gaussian = " << peakZ_EE.GetParameter(1) << endl; - h_ErsatzMEt_pass_EE_peakfit->Draw(); - - double shift_EE = peakW_EE.GetParameter(1) - peakZ_EE.GetParameter(1); - cout << "EE Shift = " << shift_EE << endl; - - for(unsigned int i=0; i < ErsatzMEt_pass_EB.size(); i++) - { - ErsatzMEt_pass_EB[i] += shift_EB; - h_ErsatzMEt_pass_EB_shifted->Fill(ErsatzMEt_pass_EB[i], Weight_pass_EB[i]); - } - for(unsigned int i=0; i < ErsatzMEt_pass_EE.size(); i++) - { - ErsatzMEt_pass_EE[i] += shift_EE; - h_ErsatzMEt_pass_EE_shifted->Fill(ErsatzMEt_pass_EE[i], Weight_pass_EE[i]); - } - for(unsigned int i=0; i < ErsatzMEt_fail_EB.size(); i++) - { - ErsatzMEt_fail_EB[i] += shift_EB; - h_ErsatzMEt_fail_EB_shifted->Fill(ErsatzMEt_fail_EB[i], Weight_fail_EB[i]); - } - for(unsigned int i=0; i < ErsatzMEt_fail_EE.size(); i++) - { - ErsatzMEt_fail_EE[i] += shift_EE; - h_ErsatzMEt_fail_EE_shifted->Fill(ErsatzMEt_fail_EE[i], Weight_fail_EE[i]); - } - - cout << "Apply acceptance correction ..." << endl; - - TH1F* h_ones = new TH1F("ones", "Histogram of Ones;;", 100, 0., 100.); - for (int i=0; i<100; i++) - { - h_ones->Fill(i+0.5); - } - - h_acceptance_correction_pass_EB->Divide(h_mcWMEtout_pass_EB, h_mcWMEtin_pass_EB); - h_acceptance_correction_pass_EB->Add(h_ones); - h_ErsatzMEt_pass_EB_corr->Multiply(h_ErsatzMEt_pass_EB_shifted, h_acceptance_correction_pass_EB); - - h_acceptance_correction_pass_EE->Divide(h_mcWMEtout_pass_EE, h_mcWMEtin_pass_EE); - h_acceptance_correction_pass_EE->Add(h_ones); - h_ErsatzMEt_pass_EE_corr->Multiply(h_ErsatzMEt_pass_EE_shifted, h_acceptance_correction_pass_EE); - - h_acceptance_correction_fail_EB->Divide(h_mcWMEtout_fail_EB, h_mcWMEtin_fail_EB); - h_acceptance_correction_fail_EB->Add(h_ones); - h_ErsatzMEt_fail_EB_corr->Multiply(h_ErsatzMEt_fail_EB_shifted, h_acceptance_correction_fail_EB); - - h_acceptance_correction_fail_EE->Divide(h_mcWMEtout_fail_EE, h_mcWMEtin_fail_EE); - h_acceptance_correction_fail_EE->Add(h_ones); - h_ErsatzMEt_fail_EE_corr->Multiply(h_ErsatzMEt_fail_EE_shifted, h_acceptance_correction_fail_EE); - - cout << "Calculating f ..." << endl; - - double N_pass_EB = h_ErsatzMEt_pass_EB_corr->Integral(0,100); - double A_EB = h_ErsatzMEt_pass_EB_corr->Integral(int(cMEt)+1,100); - double B_EB = h_ErsatzMEt_pass_EB_corr->Integral(0,int(cMEt)); - double N_pass_EE = h_ErsatzMEt_pass_EE_corr->Integral(0,100); - double A_EE = h_ErsatzMEt_pass_EE_corr->Integral(int(cMEt)+1,100); - double B_EE = h_ErsatzMEt_pass_EE_corr->Integral(0,int(cMEt)); - double N_fail_EB = h_ErsatzMEt_fail_EB_corr->Integral(0,100); - double D_EB = h_ErsatzMEt_fail_EB_corr->Integral(int(cMEt)+1,100); - double C_EB = h_ErsatzMEt_fail_EB_corr->Integral(0,int(cMEt)); - double N_fail_EE = h_ErsatzMEt_fail_EE_corr->Integral(0,100); - double D_EE = h_ErsatzMEt_fail_EE_corr->Integral(int(cMEt)+1,100); - double C_EE = h_ErsatzMEt_fail_EE_corr->Integral(0,int(cMEt)); - - double A = A_EB + A_EE; - double B = B_EB + B_EE; - double C = C_EB + C_EE; - double D = D_EB + D_EE; - double N_pass = N_pass_EB + N_pass_EE; - double N_fail = N_fail_EB + N_fail_EE; - //int N = N_pass + N_fail; - - double eff = 1.0*A/(A+B); - double efferror = sqrt(eff*(1.-eff)/N_pass); - double f = 1.0*A/B; - double ferror = efferror/((1.-eff)*(1.-eff)); - - double effprime = 1.0*D/(D+C); - double effprimeerror = sqrt(effprime*(1.-effprime)/N_fail); - double fprime = 1.0*D/C; - double fprimeerror = effprimeerror/((1.-effprime)*(1.-effprime)); - - cout << "f\tferror\teff\tefferror\tA\tB\tN_pass" << endl; - cout << f << "\t" << ferror << "\t" << eff << "\t" << efferror << "\t" << A << "\t" << B << "\t" << N_pass << "\n" << endl; - - cout << "fprime\tfprimeerror\teffprime\teffprimeerror\tD\tC\tN_fail" << endl; - cout << fprime << "\t" << fprimeerror << "\t" << effprime << "\t" << effprimeerror << "\t" << D << "\t" << C << "\t" << N_fail << "\n" << endl; - -// results << process << "\t" << f << "\t" << ferror << "\t" << A << "\t" << B << "\t" << fprime << "\t" << fprimeerror << "\t" << D << "\t" << C << endl; - - outfile->Write(); - outfile->Close(); -} diff --git a/ElectroWeakAnalysis/ZEE/macros/PlotCombiner.cc b/ElectroWeakAnalysis/ZEE/macros/PlotCombiner.cc deleted file mode 100644 index ea0a165f74166..0000000000000 --- a/ElectroWeakAnalysis/ZEE/macros/PlotCombiner.cc +++ /dev/null @@ -1,262 +0,0 @@ -/* - Macro to make the plots ....................................... - - Instructions: - a. set up an input file that looks like the following: - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - # zee or wenu - wenu - # file name, type (sig, qcd, bce, gje, ewk), weight - histos_wenu.root sig 1.46 - histos_q20_30.root qcd 0 - histos_q30_80.root qcd 100. - histos_q80_170.root qcd 0 - histos_b20_30.root bce 0 - histos_b30_80.root bce 0 - histos_b80_170.root bce 0 - histos_zee.root ewk 0 - histos_wtaunu.root ewk 0 - histos_ztautau.root ewk 0 - histos_gj15.root gje 0 - histos_gj20.root gje 0 - histos_gj25.root gje 10.12 - histos_gj30.root gje 0 - histos_gj35.root gje 0 - histos_wmunu.root ewk 0 - histos_ttbar.root ewk 0 - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - lines that start with # are considered to be comments - line 2 has wenu or zee. From line 4 the list of the histo files are listed - (first word) then a type that could be sig,qcd,bce, gj or ewk in order to - discriminate among different sources of bkgs and finally the weight that we - want to weight the histogram entries. This particular example is for Wenu. For - Zee one has to put type sig in the zee file and ewk in the Wenu file. The order - of the files is arbitrary. Files with weight 0 will be ignored. - After you have set up this code you run a root macro to combine the plots. - You can do (not recommended - it actually crushes - to be debugged) - root -b PlotCombiner.cc - or to compile it within root (recommended) - root -b - root [1] .L PlotCombiner.cc++ - root [2] PlotCombiner() - - and you finally get the plots. - - TO DO: - functionalities to plot more kind of plots, e.g. efficiencies - - - Further Questions/Contact: - - nikolaos.rompotis @ cern.ch - - - - Nikolaos Rompotis - 29 June 09 - 18 Sept 09: 1st updgrade: input files in a text file - Imperial College London - - -*/ - - -#include -#include -#include -#include -#include "TString.h" -#include "TROOT.h" -#include "TStyle.h" -#include "TH1F.h" -#include "TFile.h" -#include "TCanvas.h" -#include "TLegend.h" - -void plotMaker(TString histoName, TString typeOfplot, - vector file, vector type, - vector weight, - TString xtitle, Int_t NBins, Double_t min, Double_t max); - - -void PlotCombiner() -{ - // read the file - ifstream input("inputFiles"); - int i = 0; - TString typeOfplot = ""; - vector types; - vector files; - vector weights; - - if (input.is_open()) { - std::string myline; - while (! input.eof()) { - getline(input, myline); - TString line(myline); - TString c('#'); - TString empty(' '); - if (line[0] != c) { - ++i; - if (i==1) typeOfplot=line; - else { - // read until you find 3 words - TString fname(""); - TString ftype(""); - TString fw(""); - int lineSize = (int) line.Length(); - int j=0; - while (j0) break;} - ++j; - } - if (fname.Length() == 0) break; - files.push_back(fname); - types.push_back(ftype); - double w = fw.Atof(); - weights.push_back(w); - std::cout << fname << ", " << ftype << ", "<< w << std::endl; - } - } - } - input.close(); - } - else { - std::cout << "File with name inputFile was not found" << std::endl; - return; - } - - // now you can launch the jobs - if (typeOfplot == "wenu") { - cout << "wenu plot maker" << endl; - // ==================== - // =====> WHICH HISTOS TO PLOT - // ==================== - plotMaker("h_met", typeOfplot, files, types, weights, "MET (GeV)", 100,0,100); - } - else { - cout << "zee plot maker" << endl; - // ==================== - // =====> WHICH HISTOS TO PLOT - // ==================== - plotMaker("h_mee", typeOfplot, files, types, weights, "M_{ee} (GeV)", 150,0,150); - } - - -} - - - -void plotMaker(TString histoName, TString wzsignal, - vector file, vector type, - vector weight, - TString xtitle, Int_t NBins, Double_t min, Double_t max) -{ - gROOT->Reset(); - gROOT->ProcessLine(".L tdrstyle.C"); - gROOT->ProcessLine("setTDRStyle()"); - - // Wenu Signal ....................................................... - TH1F h_wenu("h_wenu", "h_wenu", NBins, min, max); - int fmax = (int) file.size(); - for (int i=0; i0) { - TFile f(file[i]); - TH1F *h = (TH1F*) f.Get(histoName); - h_wenu.Add(h, weight[i]); - } - } - // Bkgs .............................................................. - // - // QCD light flavor - TH1F h_qcd("h_qcd", "h_qcd", NBins, min, max); - for (int i=0; i0) { - TFile f(file[i]); - TH1F *h = (TH1F*) f.Get(histoName); - h_qcd.Add(h, weight[i]); - } - } - // QCD heavy flavor - TH1F h_bce("h_bce", "h_bce", NBins, min, max); - for (int i=0; i0) { - TFile f(file[i]); - TH1F *h = (TH1F*) f.Get(histoName); - h_bce.Add(h, weight[i]); - } - } - // QCD Gjets - TH1F h_gj("h_gj", "h_gj", NBins, min, max); - for (int i=0; i0) { - TFile f(file[i]); - TH1F *h = (TH1F*) f.Get(histoName); - h_gj.Add(h, weight[i]); - } - } - // Other EWK bkgs - TH1F h_ewk("h_ewk", "h_ewk", NBins, min, max); - for (int i=0; i0) { - TFile f(file[i]); - TH1F *h = (TH1F*) f.Get(histoName); - h_ewk.Add(h, weight[i]); - } - } - // - // ok now decide how to plot them: - // first the EWK bkgs - h_ewk.SetFillColor(3); - // - // then the gjets - h_gj.Add(&h_ewk); - h_gj.SetFillColor(1); - // thent the QCD dijets - h_bce.Add(&h_qcd); - h_bce.Add(&h_gj); - h_bce.SetFillColor(2); - // and the signal at last - TH1F h_tot("h_tot", "h_tot", NBins, min, max); - h_tot.Add(&h_bce); - h_tot.Add(&h_wenu); - h_wenu.SetLineColor(4); h_wenu.SetLineWidth(2); - // - TCanvas c; - h_tot.GetXaxis()->SetTitle(xtitle); - h_tot.Draw("PE"); - h_bce.Draw("same"); - h_gj.Draw("same"); - h_ewk.Draw("same"); - h_wenu.Draw("same"); - - // the Legend - TLegend leg(0.6,0.65,0.95,0.92); - if (wzsignal == "wenu") - leg.AddEntry(&h_wenu, "W#rightarrow e#nu","l"); - else - leg.AddEntry(&h_wenu, "Z#rightarrow ee","l"); - leg.AddEntry(&h_tot, "Signal + Bkg","p"); - leg.AddEntry(&h_bce, "dijets","f"); - leg.AddEntry(&h_gj, "#gamma + jets","f"); - leg.AddEntry(&h_ewk, "EWK+t#bar t", "f"); - leg.Draw("same"); - - c.Print("test.png"); - - - -} - - - diff --git a/ElectroWeakAnalysis/ZEE/macros/PlotHistograms.cpp b/ElectroWeakAnalysis/ZEE/macros/PlotHistograms.cpp deleted file mode 100644 index daae9b8929358..0000000000000 --- a/ElectroWeakAnalysis/ZEE/macros/PlotHistograms.cpp +++ /dev/null @@ -1,467 +0,0 @@ -#include "TFile.h" -#include "TTree.h" -#include "TH1.h" -#include - -void PlotHistograms() -{ - int nTags, nErNu; - int nMcElecs_Zmum, nMcElecs_Final; - int nRecHitsInStrip[4], nRecHitsInCone[4]; - - double Z_pt[4]; - - double elec_q[4], elec_pt[4], elec_eta[4], elec_phi[4]; - double elec_rescPt[4], elec_rescEta[4];//, elec_rescPhi[4]; - - double /*probe_q[4], */probe_pt[4], probe_eta[4], probe_phi[4]; - double probe_rescPt[4], probe_rescEta[4];//, probe_rescPhi[4]; - - double ErsatzV1MEt[4], ErsatzV1Mt[4], ErsatzV1MEtphi[4]; - double ErsatzV1aMEt[4], ErsatzV1aMt[4], ErsatzV1aMEtphi[4]; - double ErsatzV1bMEt[4], ErsatzV1bMt[4], ErsatzV1bMEtphi[4]; - double ErsatzV1cMEt[4], ErsatzV1cMt[4], ErsatzV1cMEtphi[4]; - double ErsatzV2MEt[4], ErsatzV2Mt[4], ErsatzV2MEtphi[4]; - double caloMEt; - double mesc[4], rescMesc[4]; - - double elec_trkIso[4], elec_EcalIso[4], elec_HcalIso[4]; - double elec_sIhIh[4], elec_dPhi[4], elec_dEta[4]; - - double ernu_e1x5[4], ernu_e2x5[4], ernu_e5x5[4], ernu_sIhIh[4]; - double ernu_HcalEt015[4], ernu_HcalE015[4], ernu_trkIso[4]; - - double ernu_E[4], ernu_rawE[4], ernu_unclusE[4], ernu_d_McE_ScE[4]; - double ernu_fEtaCorrE[4], ernu_fBremCorrE[4], ernu_AddCorrE[4]; - int ernu_nClusters[4]; - - double McZ_m[4], McZ_pt[4]/*, McZ_eta[4]*/, McZ_phi[4]; - double McZ_rescM[4];//, McZ_rescPt[4], McZ_rescEta[4], McZ_rescPhi[4]; - double McElec_pt[4], McElec_eta[4];//, McElec_phi[4]; - double McElec_rescPt[4], McElec_rescEta[4];//, McElec_rescPhi[4]; - double McErNu_pt[4], McErNu_eta[4], McErNu_phi[4]; - double McErNu_rescPt[4], McErNu_rescEta[4], McErNu_rescPhi[4]; - double McElecErNu_dPhi[4], McElecErNu_dR[4]; - int ernu_McMatch[4]; - - TFile *file = TFile::Open("/tmp/rnandi/test.root"); - TTree *t = (TTree*) file->Get("ErsatzMEt/ErsatzMEt"); - -/* - double nueff[345]; - //ifstream weightsin("EtaWeights.txt"); - for(int eta=0; eta < 345; ++eta) - { - //double weight; - //weightsin >> weight; - nueff[eta] = 1.;//weight; - } -*/ -// TBranch* = t->GetBranch(""); -// ->SetAddress(&); - TBranch* bNum_Tags = t->GetBranch("nTags"); - bNum_Tags->SetAddress(&nTags); - TBranch* bNum_ErNu = t->GetBranch("nProbes"); - bNum_ErNu->SetAddress(&nErNu); - TBranch* bNum_McElecs_Zmum = t->GetBranch("McElec_nZmum"); - bNum_McElecs_Zmum->SetAddress(&nMcElecs_Zmum); - TBranch* bNum_McElecs_Final = t->GetBranch("McElec_nFinal"); - bNum_McElecs_Final->SetAddress(&nMcElecs_Final); - TBranch* bNum_RecHitsInStrip = t->GetBranch("nRecHitsInStrip"); - bNum_RecHitsInStrip->SetAddress(&nRecHitsInStrip); - TBranch* bNum_RecHitsInCone = t->GetBranch("nRecHitsInCone"); - bNum_RecHitsInCone->SetAddress(&nRecHitsInCone); - - //Z properties - TBranch* bZ_pt = t->GetBranch("Z_pt"); - bZ_pt->SetAddress(&Z_pt); - - //Selected electron properties - TBranch* bTag_q = t->GetBranch("tag_q"); - bTag_q->SetAddress(&elec_q); - TBranch* bTag_pt = t->GetBranch("tag_pt"); - bTag_pt->SetAddress(&elec_pt); - TBranch* bTag_eta = t->GetBranch("tag_eta"); - bTag_eta->SetAddress(&elec_eta); - TBranch* bTag_phi = t->GetBranch("tag_phi"); - bTag_phi->SetAddress(&elec_phi); - TBranch* bTag_rescPt = t->GetBranch("tag_rescPt"); - bTag_rescPt->SetAddress(&elec_rescPt); - TBranch* bTag_rescEta = t->GetBranch("tag_rescEta"); - bTag_rescEta->SetAddress(&elec_rescEta); -// TBranch* bTag_rescPhi = t->GetBranch("tag_rescPhi"); -// bTag_rescPhi->SetAddress(&elec_rescPhi); - - TBranch* bTag_sIhIh = t->GetBranch("tag_sIhIh"); - bTag_sIhIh->SetAddress(&elec_sIhIh); - TBranch* bTag_dPhi = t->GetBranch("tag_dPhiIn"); - bTag_dPhi->SetAddress(&elec_dPhi); - TBranch* bTag_dEta = t->GetBranch("tag_dEtaIn"); - bTag_dEta->SetAddress(&elec_dEta); - TBranch* bTag_tIso = t->GetBranch("tag_isoTrack"); - bTag_tIso->SetAddress(&elec_trkIso); - TBranch* bTag_eIso = t->GetBranch("tag_isoEcal"); - bTag_eIso->SetAddress(&elec_EcalIso); - TBranch* bTag_hIso = t->GetBranch("tag_isoHcal"); - bTag_hIso->SetAddress(&elec_HcalIso); - - //ersatz neutrino properties -// TBranch* bProbe_q = t->GetBranch("probe_q"); -// bProbe_q->SetAddress(&probe_q); - TBranch* bProbe_pt = t->GetBranch("probe_pt"); - bProbe_pt->SetAddress(&probe_pt); - TBranch* bProbe_eta = t->GetBranch("probe_eta"); - bProbe_eta->SetAddress(&probe_eta); - TBranch* bProbe_phi = t->GetBranch("probe_phi"); - bProbe_phi->SetAddress(&probe_phi); - TBranch* bProbe_rescPt = t->GetBranch("probe_rescPt"); - bProbe_rescPt->SetAddress(&probe_rescPt); - TBranch* bProbe_rescEta = t->GetBranch("probe_rescEta"); - bProbe_rescEta->SetAddress(&probe_rescEta); -// TBranch* bProbe_rescPhi = t->GetBranch("probe_rescPhi"); -// bProbe_rescPhi->SetAddress(&probe_rescPhi); - TBranch* bProbe_trckIso = t->GetBranch("probe_isoTrack"); - bProbe_trckIso->SetAddress(&ernu_trkIso); -// TBranch* bProbe_ECALIso = t->GetBranch("probe_isoECAL"); -// bProbe_ECALIso->SetAddress(&ernu_ECALIso); -// TBranch* bProbe_HCALIso = t->GetBranch("probe_isoHCAL"); -// bProbe_HCALIso->SetAddress(&ernu_HCALIso); - TBranch* bProbe_sIhIh = t->GetBranch("probe_sIhIh"); - bProbe_sIhIh->SetAddress(&ernu_sIhIh); -// TBranch* bProbe_DeltaEta = t->GetBranch("probe_DeltaEta"); -// bProbe_DeltaEta->SetAddress(&ernu_DeltaEta); -// TBranch* bProbe_DeltaPhiIso = t->GetBranch("probe_DeltaPhi"); -// bProbe_DeltaPhi->SetAddress(&ernu_DeltaPhi); - TBranch* bProbe_e1x5 = t->GetBranch("probe_e1x5Max"); - bProbe_e1x5->SetAddress(&ernu_e1x5); - TBranch* bProbe_e2x5 = t->GetBranch("probe_e2x5Max"); - bProbe_e2x5->SetAddress(&ernu_e2x5); - TBranch* bProbe_e5x5 = t->GetBranch("probe_e5x5"); - bProbe_e5x5->SetAddress(&ernu_e5x5); - TBranch* bProbe_HcalE015 = t->GetBranch("probe_HcalE015"); - bProbe_HcalE015->SetAddress(&ernu_HcalE015); - TBranch* bProbe_HcalEt015 = t->GetBranch("probe_HcalEt015"); - bProbe_HcalEt015->SetAddress(&ernu_HcalEt015); - - //Energy Correction results - TBranch* bProbe_E = t->GetBranch("probe_E"); - bProbe_E->SetAddress(&ernu_E); - TBranch* bProbe_rawE = t->GetBranch("probe_rawE"); - bProbe_rawE->SetAddress(&ernu_rawE); - TBranch* bProbe_unclusE = t->GetBranch("probe_UnclusEcalE"); - bProbe_unclusE->SetAddress(&ernu_unclusE); - TBranch* bProbe_fEtaCorrE = t->GetBranch("probe_fEtaCorrE"); - bProbe_fEtaCorrE->SetAddress(&ernu_fEtaCorrE); - TBranch* bProbe_fBremCorrE = t->GetBranch("probe_fBremCorrE"); - bProbe_fBremCorrE->SetAddress(&ernu_fBremCorrE); - TBranch* bProbe_AddCorrE = t->GetBranch("probe_EAdd"); - bProbe_AddCorrE->SetAddress(&ernu_AddCorrE); - TBranch* bProbe_d_MCE_SCE = t->GetBranch("probe_d_MCE_SCE"); - bProbe_d_MCE_SCE->SetAddress(&ernu_d_McE_ScE); - TBranch* bProbe_nClus = t->GetBranch("probe_nClus"); - bProbe_nClus->SetAddress(&ernu_nClusters); - - //Ersatz MEt results - TBranch* bErsatzV1_MEt = t->GetBranch("ErsatzV1CaloMEt"); - bErsatzV1_MEt->SetAddress(&ErsatzV1MEt); - TBranch* bErsatzV1_Mt = t->GetBranch("ErsatzV1CaloMt"); - bErsatzV1_Mt->SetAddress(&ErsatzV1Mt); - TBranch* bErsatzV1_MEtphi = t->GetBranch("ErsatzV1CaloMEtPhi"); - bErsatzV1_MEtphi->SetAddress(&ErsatzV1MEtphi); - - TBranch* bErsatzV1a_MEt = t->GetBranch("ErsatzV1aCaloMEt"); - bErsatzV1a_MEt->SetAddress(&ErsatzV1aMEt); - TBranch* bErsatzV1a_Mt = t->GetBranch("ErsatzV1aCaloMt"); - bErsatzV1a_Mt->SetAddress(&ErsatzV1aMt); - TBranch* bErsatzV1a_MEtphi = t->GetBranch("ErsatzV1aCaloMEtPhi"); - bErsatzV1a_MEtphi->SetAddress(&ErsatzV1aMEtphi); - - TBranch* bErsatzV1b_MEt = t->GetBranch("ErsatzV1bCaloMEt"); - bErsatzV1b_MEt->SetAddress(&ErsatzV1bMEt); - TBranch* bErsatzV1b_Mt = t->GetBranch("ErsatzV1bCaloMt"); - bErsatzV1b_Mt->SetAddress(&ErsatzV1bMt); - TBranch* bErsatzV1b_MEtphi = t->GetBranch("ErsatzV1bCaloMEtPhi"); - bErsatzV1b_MEtphi->SetAddress(&ErsatzV1bMEtphi); - - TBranch* bErsatzV1c_MEt = t->GetBranch("ErsatzV1cCaloMEt"); - bErsatzV1c_MEt->SetAddress(&ErsatzV1cMEt); - //TBranch* bErsatzV1c_Mt = t->GetBranch("ErsatzV1cCaloMt"); - //bErsatzV1c_Mt->SetAddress(&ErsatzV1cMt); - TBranch* bErsatzV1c_MEtphi = t->GetBranch("ErsatzV1cCaloMEtPhi"); - bErsatzV1c_MEtphi->SetAddress(&ErsatzV1cMEtphi); - - TBranch* bErsatzV2_MEt = t->GetBranch("ErsatzV2CaloMEt"); - bErsatzV2_MEt->SetAddress(&ErsatzV2MEt); - TBranch* bErsatzV2_Mt = t->GetBranch("ErsatzV2CaloMt"); - bErsatzV2_Mt->SetAddress(&ErsatzV2Mt); - TBranch* bErsatzV2_MEtphi = t->GetBranch("ErsatzV2CaloMEtPhi"); - bErsatzV2_MEtphi->SetAddress(&ErsatzV2MEtphi); - - TBranch* bMesc = t->GetBranch("ErsatzV1_Mesc"); - bMesc->SetAddress(&mesc); - TBranch* brescMesc = t->GetBranch("ErsatzV1_rescMesc"); - brescMesc->SetAddress(&rescMesc); - TBranch* bCaloMEt = t->GetBranch("recoCaloMEt"); - bCaloMEt->SetAddress(&caloMEt); - - TBranch* bMcZ_m = t->GetBranch("McZ_m"); - bMcZ_m->SetAddress(&McZ_m); - TBranch* bMcZ_pt = t->GetBranch("McZ_Pt"); - bMcZ_pt->SetAddress(&McZ_pt); -// TBranch* bMcZ_eta = t->GetBranch("McZ_eta"); -// bMcZ_eta->SetAddress(&McZ_eta); - TBranch* bMcZ_phi = t->GetBranch("McZ_Phi"); - bMcZ_phi->SetAddress(&McZ_phi); - TBranch* bMcZ_rescM = t->GetBranch("McZ_rescM"); - bMcZ_rescM->SetAddress(&McZ_rescM); -// TBranch* bMcZ_rescPt = t->GetBranch("McZ_rescPt"); -// bMcZ_rescPt->SetAddress(&McZ_rescPt); -// TBranch* bMcZ_rescEta = t->GetBranch("McZ_rescEta"); -// bMcZ_rescEta->SetAddress(&McZ_rescEta); -// TBranch* bMcZ_rescPhi = t->GetBranch("McZ_rescPhi"); -// bMcZ_rescPhi->SetAddress(&McZ_rescPhi); - - TBranch* bMcElec_pt = t->GetBranch("McElec_pt"); - bMcElec_pt->SetAddress(&McElec_pt); - TBranch* bMcElec_eta = t->GetBranch("McElec_eta"); - bMcElec_eta->SetAddress(&McElec_eta); -// TBranch* bMcElec_phi = t->GetBranch("McElec_phi"); -// bMcElec_phi->SetAddress(&McElec_phi); - TBranch* bMcElec_rescPt = t->GetBranch("McElec_rescPt"); - bMcElec_rescPt->SetAddress(&McElec_rescPt); - TBranch* bMcElec_rescEta = t->GetBranch("McElec_rescEta"); - bMcElec_rescEta->SetAddress(&McElec_rescEta); -// TBranch* bMcElec_rescPhi = t->GetBranch("McElec_rescPhi"); -// bMcElec_rescPhi->SetAddress(&McElec_rescPhi); - - TBranch* bMcErNu_pt = t->GetBranch("McProbe_pt"); - bMcErNu_pt->SetAddress(&McErNu_pt); - TBranch* bMcErNu_eta = t->GetBranch("McProbe_eta"); - bMcErNu_eta->SetAddress(&McErNu_eta); - TBranch* bMcErNu_phi = t->GetBranch("McProbe_phi"); - bMcErNu_phi->SetAddress(&McErNu_phi); - TBranch* bMcErNu_rescPt = t->GetBranch("McProbe_rescPt"); - bMcErNu_rescPt->SetAddress(&McErNu_rescPt); - TBranch* bMcErNu_rescEta = t->GetBranch("McProbe_rescEta"); - bMcErNu_rescEta->SetAddress(&McErNu_rescEta); - TBranch* bMcErNu_rescPhi = t->GetBranch("McProbe_rescPhi"); - bMcErNu_rescPhi->SetAddress(&McErNu_rescPhi); - - TBranch* bMcElecErNu_dPhi = t->GetBranch("McElecProbe_dPhi"); - bMcElecErNu_dPhi->SetAddress(&McElecErNu_dPhi); - TBranch* bMcElecErNu_dR = t->GetBranch("McElecProbe_dR"); - bMcElecErNu_dR->SetAddress(&McElecErNu_dR); - //TBranch* bProbe_elec = t->GetBranch("probe_elecMatch"); - //bProbe_elec->SetAddress(&ernu_McMatch); - - //TString OutFileName = "Zee_Histograms.root"; - TFile *outfile = TFile::Open("/tmp/rnandi/test_Histograms.root", "recreate"); - - TH1I* h_nTags = new TH1I("nTags", "Number of Tags;Number of Tags;Arbitrary Units", 4, 0, 4); - TH1I* h_nErNu = new TH1I("nErNu", "Number of Ersatz Neutrinos;Number of Ersatz Neutrinos;Arbitrary Units", 2, 0, 2); - TH1I* h_nMcElecs_Zmum = new TH1I("nMcElecs_Zmum", "Number of Monte Carlo Electrons with Z as Mother;Number of MC Electrons;Arbitrary Units", 4, 0, 4); - TH1I* h_nMcElecs_Final = new TH1I("nMcElecs_Final", "Number of Final State Monte Carlo Electrons;Number of MC Electrons;Arbitrary Units", 4, 0, 4); - TH1I* h_nRecHitsInStrip = new TH1I("nRecHitsInStrip", ";;Arbitrary Units", 20, 0, 20); - TH1I* h_nRecHitsInCone = new TH1I("nRecHitsInCone", ";;Arbitrary Units", 20, 0, 20); - - TH1F* h_Z_pt = new TH1F("Z_pt", "Z p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - - TH1F* h_elec_q = new TH1F("elec_q", "Electron Charge;q;Arbitrary Units", 3, -1.5, 1.5); - TH1F* h_elec_pt = new TH1F("elec_pt", "Electron p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_elec_eta = new TH1F("elec_eta", "Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_elec_phi = new TH1F("elec_phi", "Electron #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_elec_sIhIh = new TH1F("elec_sIhIh", "Electron #sigma_{i#etai#eta};#sigma_{i#etai#eta};Arbitary Units", 100, 0., 0.05); - TH1F* h_elec_dEta = new TH1F("elec_dEta", "Electron #Delta#eta;#Delta#eta;Arbitrary Units", 100, 0., 0.02); - TH1F* h_elec_dPhi = new TH1F("elec_dPhi", "Electron #Delta#phi;#Delta#phi;Arbitrary Units", 100, 0., 0.1); - TH1F* h_elec_TrkIso = new TH1F("elec_TrkIso", "Electon Track Isolation;Track Isolation #Sigma p_{T}^{tracks} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_EcalIso = new TH1F("elec_EcalIso", "Electron ECAL Isolation;ECAL Isolation #Sigma E_{T}^{ECAL} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_HcalIso = new TH1F("elec_HcalIso", "Electron HCAL Isolation;HCAL Isolation #Sigma E_{T}^{HCAL} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_rescPt = new TH1F("elec_rescPt", "Electron Rescaled p_{T};Rescaled p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_elec_rescEta = new TH1F("elec_rescEta", "Electron Rescaled #eta;Rescaled #eta;Arbitrary Units", 100, -3., 3.); - -// TH1F* h_ErNu_q = new TH1F("h_ErNu_q", "Ersatz Neutrino Charge;q;Arbitrary Units", 3, -1.5, 1.5); - TH1F* h_ErNu_pt = new TH1F("ErNu_pt", "Ersatz Neutrino p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_eta = new TH1F("ErNu_eta", "Ersatz Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_ErNu_phi = new TH1F("ErNu_phi", "Ersatz Neutrino #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_ErNu_rescPt = new TH1F("ErNu_rescPt", "Ersatz Neutrino Rescaled p_{T};Rescaled p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_rescEta = new TH1F("ErNu_rescEta", "Ersatz Neutrino Rescaled #eta;Rescaled #eta", 100, -3., 3.); - - TH1F* h_ErNu_sIhIh = new TH1F("ErNu_sIhIh", "Ersatz Neutrino #sigma_{i#etai#eta};#sigma_{i#etai#eta};Arbitrary Units", 100, 0., 0.05); -// TH1F* h_ErNu_dEta = new TH1F("ErNu_dEta", "Ersatz Neutrino #Delta#eta;#Delta#eta;Arbitrary Units", 100, 0., 0.02); -// TH1F* h_ErNu_dPhi = new TH1F("ErNu_dPhi", "Ersatz Neutrino #Delta#phi;#Delta#phi;Arbitrary Units", 100, 0., 0.1); - TH1F* h_ErNu_TrkIso = new TH1F("ErNu_TrkIso", "Ersatz Neutrino Track Isolation;Track Isolation #Sigma p_{T}^{tracks} / GeV;Arbitrary Units", 100, 0., 10.); -// TH1F* h_ErNu_EcalIso = new TH1F("ErNu_EcalIso", "Ersatz Neutrino ECAL Isolation;ECAL Isolation #Sigma E_{T}^{ECAL} / GeV;Arbitrary Units", 100, 0., 10.); -// TH1F* h_ErNu_HcalIso = new TH1F("ErNu_HcalIso", "Ersatz Neutrino HCAL Isolation;HCAL Isolation #Sigma E_{T}^{HCAL} / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_ErNu_e1x5Max = new TH1F("ErNu_e1x5Max", "Ersatz Neutrino Maximum Energy in 1x5 Array of Crystals;e1x5Max / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_e2x5Max = new TH1F("ErNu_e2x5Max", "Ersatz Neutrino Maximum Energy in 2x5 Array of Crystals;e2x5Max / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_e5x5 = new TH1F("ErNu_e5x5", "Ersatz Neutrino Energy in 5x5 Array of Crystals;e5x5 / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_HcalE015 = new TH1F("ErNu_HcalE015", "Ersatz Neutrino HCAL Energy in a 0.15 Cone;HCAL Energy / GeV;Arbitrary Units", 100, 0., 10.); - TH1F* h_ErNu_HcalEt015 = new TH1F("ErNu_HcalEt015", "Ersatz Neutrino HCAL E_{T} in a 0.15 Cone;HCAL E_{T};Arbitrary Units", 100, 0., 10.); - -// TH1F* h_rechitE = new TH1F("h_rechitE", "", 100, , ); // What is this - TH1F* h_ErNu_E = new TH1F("ErNu_E", "Ersatz Neutrino Energy;Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_rawE = new TH1F("ErNu_rawE", "Ersatz Neutrino Raw Energy;Raw Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_unclusE = new TH1F("ErNu_unclusE", "Ersatz Neutrino Unclustered ECAL Energy;Unclustered Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_fEtaCorrE = new TH1F("ErNu_fEtaCorrE", "Ersatz Neutrino fEta Corrected Energy;Corrected Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_fBremCorrE = new TH1F("ErNu_fBremCorrE", "Ersatz Neutrino fBrem Corrected Energy;Correcteed Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErNu_AddCorrE = new TH1F("ErNu_AddCorrE", "Ersatz Neutrino Add Corrected Energy;Corrected Energy / GeV;Arbitrary Units", 100, 0., 100.); - TH1I* h_ErNu_nClusters = new TH1I("ErNu_nClusters", "Ersatz Neutrino Number of Clusters;Number of Clusters;Arbitrary Units", 10, 0, 10); - -// TH1F* h_ErsatzV1MEt = new TH1F("ErsatzV1MEt", "ErsatzV1MEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1Mt = new TH1F("ErsatzV1Mt", "ErsatzV1Mt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1MEtphi = new TH1F("ErsatzV1MEtPhi", "ErsatzV1MEtPhi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1aMEt = new TH1F("ErsatzV1aMEt", "ErsatzV1aMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1aMt = new TH1F("ErsatzV1aMt", "ErsatzV1aMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1aMEtphi = new TH1F("ErsatzV1aMEtphi", "ErsatzV1aMEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1bMEt = new TH1F("ErsatzV1bMEt", "ErsatzV1bMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1bMt = new TH1F("ErsatzV1bMt", "ErsatzV1bMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1bMEtphi = new TH1F("ErsatzV1bMEtphi", "ErsatzV1bMEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1cMEt = new TH1F("ErsatzV1cMEt", "ErsatzV1cMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1cMt = new TH1F("ErsatzV1cMt", "ErsatzV1cMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV1cMEtphi = new TH1F("ErsatzV1cMEtphi", "ErsatzV1cMEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV2MEt = new TH1F("ErsatzV1aMEt", "ErsatzV1aMEt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV2Mt = new TH1F("ErsatzV1aMt", "ErsatzV1aMt;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_ErsatzV2MEtphi = new TH1F("ErsatzV2MEtphi", "ErsatzV2MEtphi;#slash{E_{T}} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_RecoCaloMEt = new TH1F("RecoCaloMEt", "Calometric #slashE_{T};#slashE_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzV1Mesc = new TH1F("ErsatzV1Mesc", "Invariant Mass;Invariant Mass / GeV;Arbitrary Units", 100, 41., 141.); - TH1F* h_ErsatzV1rescMesc = new TH1F("ErsatzV1rescMesc", "Rescaled Invariant Mass;Rescaled Invariant Mass / GeV;Arbitrary Units", 100, 41., 141.); - - TH1F* h_McZ_M = new TH1F("McZ_M", "Monte Carlo Z Mass;Mass / GeV; Arbitrary Units", 100, 41., 141.); - TH1F* h_McZ_rescM = new TH1F("McZ_rescM", "Monte Carlo Rescaled Z Mass;Mass / GeV;Arbitrary Units", 100, 41., 141.); - TH1F* h_McZ_Pt = new TH1F("McZ_Pt", "Monte Carlo Z p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_McZ_rescPt = new TH1F("McZ_rescPt", "Monte Carlo Rescaled Z p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); -// TH1F* h_McZ_Eta = new TH1F("McZ_eta", "Monte Carlo Z #eta;#eta;Arbitrary Units", 100, -3., 3.); -// TH1F* h_McZ_rescEta = new TH1F("McZ_rescEta", "Monte Carlo Rescaled Z #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McZ_Phi = new TH1F("McZ_phi", "Monte Carlo Z #phi;#phi;Arbitrary Units", 100, 0., 3.1416); -// TH1F* h_McZ_rescPhi = new TH1F("McZ_rescPhi", "Monte Carlo Z Rescaled #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - - TH1F* h_McElec_Pt = new TH1F("McElec_Pt", "Monte Carlo Electron p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_McElec_rescPt = new TH1F("McElec_rescPt", "Monte Carlo Rescaled Electron p_{T};Rescaled p_{T};Arbitrary Units", 100, 0., 100.); - TH1F* h_McElec_Eta = new TH1F("McElec_Eta", "Monte Carlo Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McElec_rescEta = new TH1F("McElec_rescEta", "Monte Carlo Rescaled Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); -// TH1F* h_McElec_Phi = new TH1F("McElec_Phi", "Monte Carlo Electron #phi;#phi;Arbitrary Units", 100, 0., 3.1416); -// TH1F* h_McElec_rescPhi = new TH1F("McElec_rescPhi", "Monte Carlo Rescaled Electron #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - - TH1F* h_McErNu_Pt = new TH1F("McErNu_Pt", "Monte Carlo Ersatz Neutrino p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_McErNu_rescPt = new TH1F("McErNu_rescPt", "Monte Carlo Rescaled Ersatz Neutrino p_{T};p_{T} / GeV;Arbitrary Units", 100, 0., 100.); - TH1F* h_McErNu_Eta = new TH1F("McErNu_Eta", "Monte Carlo Ersatz Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McErNu_rescEta = new TH1F("McErNu_rescEta", "Monte Carlo Rescaled Ersatz Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McErNu_Phi = new TH1F("McErNu_Phi", "Monte Carlo Ersatz Neutrino #phi;#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_McErNu_rescPhi = new TH1F("McErNu_rescPhi", "Monte Carlo Rescaled Ersatz Neutrino #phi;Rescaled #phi;Arbitrary Units", 100, 0., 3.1416); - - TH1F* h_McElecErNu_dPhi = new TH1F("McElecErNu_dPhi", "Monte Carlo #Delta#phi between Electrons;#Delta#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_McElecErNu_dR = new TH1F("McElecErNu_dR", "Monte Carlo #DeltaR between Electrons;MC Match;Arbitrary Units", 100, 0., 3.1416); - //TH1I* h_McMatch = new TH1I("McMatch", "Monte Carlo Match of Ersatz Neutrino to an Electron;MC Match;Arbitrary Units", 2, 0, 2); - -// TH1F* h_EtaInt = new TH1F("EtaInt", "", 345, 0, 345); -// TH1F* h_EtaWeights = new TH1F("EtaWeights", "", 40, 0., 2.); - - long nEntries = t->GetEntries(); - cout << "Number of Events = " << nEntries << endl; - for (long i=0; i < nEntries; i++) - { - t->GetEntry(i); - - h_nTags->Fill(nTags); - h_nErNu->Fill(nErNu); - h_nMcElecs_Zmum->Fill(nMcElecs_Zmum); - h_nMcElecs_Final->Fill(nMcElecs_Final); - h_RecoCaloMEt->Fill(caloMEt); - - for (int j=0; j < nErNu; j++) - { - - h_nRecHitsInStrip->Fill(nRecHitsInStrip[j]); - h_nRecHitsInCone->Fill(nRecHitsInCone[j]); - - h_Z_pt->Fill(Z_pt[j]); - - h_elec_q->Fill(elec_q[j]); - h_elec_pt->Fill(elec_pt[j]); - h_elec_eta->Fill(elec_eta[j]); - h_elec_phi->Fill(elec_phi[j]); - h_elec_sIhIh->Fill(elec_sIhIh[j]); - h_elec_dPhi->Fill(elec_dPhi[j]); - h_elec_dEta->Fill(elec_dEta[j]); - h_elec_TrkIso->Fill(elec_trkIso[j]); - h_elec_EcalIso->Fill(elec_EcalIso[j]); - h_elec_HcalIso->Fill(elec_HcalIso[j]); - h_elec_rescPt->Fill(elec_rescPt[j]); - h_elec_rescEta->Fill(elec_rescEta[j]); - -// h_ErNu_q->Fill(probe_q[j]); - h_ErNu_pt->Fill(probe_pt[j]); - h_ErNu_eta->Fill(probe_eta[j]); - h_ErNu_phi->Fill(probe_phi[j]); - h_ErNu_rescPt->Fill(probe_rescPt[j]); - h_ErNu_rescEta->Fill(probe_rescEta[j]); - - h_ErNu_sIhIh->Fill(ernu_sIhIh[j]); -// h_ErNu_dPhi->Fill(ernu_dPhi[j]); -// h_ErNu_dEta->Fill(ernu_dEta[j]); - h_ErNu_TrkIso->Fill(ernu_trkIso[j]); -// h_ErNu_EcalIso->Fill(ernu_EcalIso[j]); -// h_ErNu_HcalIso->Fill(ernu_HcalIso[j]); - h_ErNu_e1x5Max->Fill(ernu_e1x5[j]); - h_ErNu_e2x5Max->Fill(ernu_e2x5[j]); - h_ErNu_e5x5->Fill(ernu_e5x5[j]); - h_ErNu_HcalE015->Fill(ernu_HcalE015[j]); - h_ErNu_HcalEt015->Fill(ernu_HcalEt015[j]); - - h_ErNu_E->Fill(ernu_E[j]); - h_ErNu_rawE->Fill(ernu_rawE[j]); - h_ErNu_unclusE->Fill(ernu_unclusE[j]); - h_ErNu_fEtaCorrE->Fill(ernu_fEtaCorrE[j]); - h_ErNu_fBremCorrE->Fill(ernu_fBremCorrE[j]); - h_ErNu_AddCorrE->Fill(ernu_AddCorrE[j]); - h_ErNu_nClusters->Fill(ernu_nClusters[j]); - -// h_ErsatzV1MEt->Fill(ErsatzV1MEt[j]); -// h_ErsatzV1Mt->Fill(ErsatzV1Mt[j]); -// h_ErsatzV1MEtphi->Fill(ErsatzV1MEtphi[j]); -// h_ErsatzV1aMEt->Fill(ErsatzV1aMEt[j]); -// h_ErsatzV1aMt->Fill(ErsatzV1aMt[j]); -// h_ErsatzV1aMEtphi->Fill(ErsatzV1aMEtphi[j]); - h_ErsatzV1bMEt->Fill(ErsatzV1bMEt[j]); - h_ErsatzV1bMt->Fill(ErsatzV1bMt[j]); - h_ErsatzV1bMEtphi->Fill(ErsatzV1bMEtphi[j]); -// h_ErsatzV1cMEt->Fill(ErsatzV1cMEt[j]); -// h_ErsatzV1cMt->Fill(ErsatzV1cMt[j]); -// h_ErsatzV1cMEtphi->Fill(ErsatzV1cMEtphi[j]); -// h_ErsatzV2MEt->Fill(ErsatzV2MEt[j]); -// h_ErsatzV2Mt->Fill(ErsatzV2Mt[j]); -// h_ErsatzV2MEtphi->Fill(ErsatzV2MEtphi[j]); - h_ErsatzV1Mesc->Fill(mesc[j]); - h_ErsatzV1rescMesc->Fill(rescMesc[j]); - - h_McZ_M->Fill(McZ_m[j]); - h_McZ_rescM->Fill(McZ_rescM[j]); - h_McZ_Pt->Fill(McZ_pt[j]); -// h_McZ_rescPt->Fill(McZ_rescPt[j]); -// h_McZ_Eta->Fill(McZ_eta[j]); -// h_McZ_rescEta->Fill(McZ_rescEta[j]); - h_McZ_Phi->Fill(McZ_phi[j]); -// h_McZ_rescPhi->Fill(McZ_rescPhi[j]); - - h_McElec_Pt->Fill(McElec_pt[j]); - h_McElec_rescPt->Fill(McElec_rescPt[j]); - h_McElec_Eta->Fill(McElec_eta[j]); - h_McElec_rescEta->Fill(McElec_rescEta[j]); -// h_McElec_Phi->Fill(McElec_phi[j]); -// h_McElec_rescPhi->Fill(McElec_rescPhi[j]); - - h_McErNu_Pt->Fill(McErNu_pt[j]); - h_McErNu_rescPt->Fill(McErNu_rescPt[j]); - h_McErNu_Eta->Fill(McErNu_eta[j]); - h_McErNu_rescEta->Fill(McErNu_rescEta[j]); - h_McErNu_Phi->Fill(McErNu_phi[j]); - h_McErNu_rescPhi->Fill(McErNu_rescPhi[j]); - - h_McElecErNu_dPhi->Fill(McElecErNu_dPhi[j]); - h_McElecErNu_dR->Fill(McElecErNu_dR[j]); - //h_McMatch->Fill(ernu_McMatch[j]); - } - } - outfile->Write(); - outfile->Close(); -} diff --git a/ElectroWeakAnalysis/ZEE/macros/inputFiles b/ElectroWeakAnalysis/ZEE/macros/inputFiles deleted file mode 100644 index d8419cca90d4d..0000000000000 --- a/ElectroWeakAnalysis/ZEE/macros/inputFiles +++ /dev/null @@ -1,21 +0,0 @@ -# zee or wenu -zee -# file name, type (sig, qcd, bce, gje, ewk), weight -histos_zee.root sig 1.46 -histos_q20_30.root qcd 0 -histos_q30_80.root qcd 100. -histos_q80_170.root qcd 0 -histos_b20_30.root bce 0 -histos_b30_80.root bce 0 -histos_b80_170.root bce 0 -histos_wenu.root ewk 0 -histos_wtaunu.root ewk 0 -histos_ztautau.root ewk 0 -histos_gj15.root gje 0 -histos_gj20.root gje 0 -histos_gj25.root gje 10.12 -histos_gj30.root gje 0 -histos_gj35.root gje 0 -histos_wmunu.root ewk 0 -histos_ttbar.root ewk 0 - diff --git a/ElectroWeakAnalysis/ZEE/macros/tdrstyle.C b/ElectroWeakAnalysis/ZEE/macros/tdrstyle.C deleted file mode 100644 index 59906aa4ba3e3..0000000000000 --- a/ElectroWeakAnalysis/ZEE/macros/tdrstyle.C +++ /dev/null @@ -1,157 +0,0 @@ -#include "TStyle.h" - -// tdrGrid: Turns the grid lines on (true) or off (false) - -void tdrGrid(bool gridOn) { - tdrStyle->SetPadGridX(gridOn); - tdrStyle->SetPadGridY(gridOn); -} - -// fixOverlay: Redraws the axis - -void fixOverlay() { - gPad->RedrawAxis(); -} - -void setTDRStyle() { - TStyle *tdrStyle = new TStyle("tdrStyle","Style for P-TDR"); - -// For the canvas: - tdrStyle->SetCanvasBorderMode(0); - tdrStyle->SetCanvasColor(kWhite); - tdrStyle->SetCanvasDefH(600); //Height of canvas - tdrStyle->SetCanvasDefW(600); //Width of canvas - tdrStyle->SetCanvasDefX(0); //POsition on screen - tdrStyle->SetCanvasDefY(0); - -// For the Pad: - tdrStyle->SetPadBorderMode(0); - // tdrStyle->SetPadBorderSize(Width_t size = 1); - tdrStyle->SetPadColor(kWhite); - tdrStyle->SetPadGridX(false); - tdrStyle->SetPadGridY(false); - tdrStyle->SetGridColor(0); - tdrStyle->SetGridStyle(3); - tdrStyle->SetGridWidth(1); - -// For the frame: - tdrStyle->SetFrameBorderMode(0); - tdrStyle->SetFrameBorderSize(1); - tdrStyle->SetFrameFillColor(0); - tdrStyle->SetFrameFillStyle(0); - tdrStyle->SetFrameLineColor(1); - tdrStyle->SetFrameLineStyle(1); - tdrStyle->SetFrameLineWidth(1); - -// For the histo: - // tdrStyle->SetHistFillColor(1); - // tdrStyle->SetHistFillStyle(0); - tdrStyle->SetHistLineColor(1); - tdrStyle->SetHistLineStyle(0); - tdrStyle->SetHistLineWidth(1); - // tdrStyle->SetLegoInnerR(Float_t rad = 0.5); - // tdrStyle->SetNumberContours(Int_t number = 20); - - tdrStyle->SetEndErrorSize(2); -// tdrStyle->SetErrorMarker(20); - tdrStyle->SetErrorX(0.); - - tdrStyle->SetMarkerStyle(20); - -//For the fit/function: - tdrStyle->SetOptFit(1); - tdrStyle->SetFitFormat("5.4g"); - tdrStyle->SetFuncColor(2); - tdrStyle->SetFuncStyle(1); - tdrStyle->SetFuncWidth(1); - -//For the date: - tdrStyle->SetOptDate(0); - // tdrStyle->SetDateX(Float_t x = 0.01); - // tdrStyle->SetDateY(Float_t y = 0.01); - -// For the statistics box: - tdrStyle->SetOptFile(0); - tdrStyle->SetOptStat(0); // To display the mean and RMS: SetOptStat("mr"); - tdrStyle->SetStatColor(kWhite); - tdrStyle->SetStatFont(42); - tdrStyle->SetStatFontSize(0.025); - tdrStyle->SetStatTextColor(1); - tdrStyle->SetStatFormat("6.4g"); - tdrStyle->SetStatBorderSize(1); - tdrStyle->SetStatH(0.1); - tdrStyle->SetStatW(0.15); - // tdrStyle->SetStatStyle(Style_t style = 1001); - // tdrStyle->SetStatX(Float_t x = 0); - // tdrStyle->SetStatY(Float_t y = 0); - -// Margins: - tdrStyle->SetPadTopMargin(0.05); - tdrStyle->SetPadBottomMargin(0.12); - tdrStyle->SetPadLeftMargin(0.15); - tdrStyle->SetPadRightMargin(0.04); - -// For the Global title: - - tdrStyle->SetOptTitle(0); - tdrStyle->SetTitleFont(42); - tdrStyle->SetTitleColor(1); - tdrStyle->SetTitleTextColor(1); - tdrStyle->SetTitleFillColor(10); - tdrStyle->SetTitleFontSize(0.05); - // tdrStyle->SetTitleH(0); // Set the height of the title box - // tdrStyle->SetTitleW(0); // Set the width of the title box - // tdrStyle->SetTitleX(0); // Set the position of the title box - // tdrStyle->SetTitleY(0.985); // Set the position of the title box - // tdrStyle->SetTitleStyle(Style_t style = 1001); - // tdrStyle->SetTitleBorderSize(2); - -// For the axis titles: - - tdrStyle->SetTitleColor(1, "XYZ"); - tdrStyle->SetTitleFont(42, "XYZ"); - tdrStyle->SetTitleSize(0.06, "XYZ"); - // tdrStyle->SetTitleXSize(Float_t size = 0.02); // Another way to set the size? - // tdrStyle->SetTitleYSize(Float_t size = 0.02); - tdrStyle->SetTitleXOffset(0.9); - tdrStyle->SetTitleYOffset(1.25); - // tdrStyle->SetTitleOffset(1.1, "Y"); // Another way to set the Offset - -// For the axis labels: - - tdrStyle->SetLabelColor(1, "XYZ"); - tdrStyle->SetLabelFont(42, "XYZ"); - tdrStyle->SetLabelOffset(0.007, "XYZ"); - tdrStyle->SetLabelSize(0.05, "XYZ"); - -// For the axis: - - tdrStyle->SetAxisColor(1, "XYZ"); - tdrStyle->SetStripDecimals(kTRUE); - tdrStyle->SetTickLength(0.03, "XYZ"); - tdrStyle->SetNdivisions(510, "XYZ"); - tdrStyle->SetPadTickX(1); // To get tick marks on the opposite side of the frame - tdrStyle->SetPadTickY(1); - -// Change for log plots: - tdrStyle->SetOptLogx(0); - tdrStyle->SetOptLogy(0); - tdrStyle->SetOptLogz(0); - -// Postscript options: - tdrStyle->SetPaperSize(20.,20.); - // tdrStyle->SetLineScalePS(Float_t scale = 3); - // tdrStyle->SetLineStyleString(Int_t i, const char* text); - // tdrStyle->SetHeaderPS(const char* header); - // tdrStyle->SetTitlePS(const char* pstitle); - - // tdrStyle->SetBarOffset(Float_t baroff = 0.5); - // tdrStyle->SetBarWidth(Float_t barwidth = 0.5); - // tdrStyle->SetPaintTextFormat(const char* format = "g"); - // tdrStyle->SetPalette(Int_t ncolors = 0, Int_t* colors = 0); - // tdrStyle->SetTimeOffset(Double_t toffset); - // tdrStyle->SetHistMinimumZero(kTRUE); - - tdrStyle->cd(); - -} diff --git a/ElectroWeakAnalysis/ZEE/python/simpleCutBasedElectronIDSpring10_cfi.py b/ElectroWeakAnalysis/ZEE/python/simpleCutBasedElectronIDSpring10_cfi.py deleted file mode 100644 index 88f7ce351171b..0000000000000 --- a/ElectroWeakAnalysis/ZEE/python/simpleCutBasedElectronIDSpring10_cfi.py +++ /dev/null @@ -1,164 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -## Electron ID Based on Simple Cuts: Spring10 MC tuned selections -# -# Instructions on how to use this file -# ==================================== -# -# The selections that are implemented in this python cfg are -# explained in this twiki page: -# https://twiki.cern.ch/twiki/bin/view/CMS/SimpleCutBasedEleID -# In summary, they come in 6 different tightness levels. For -# each tightness, the user can select whether they want -# combined isolation or relative isolations. -# -# In order to use this cfg file you have to include it from the -# python directory that you have placed it, clone some selection -# of your preference and run it in your sequence -# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -# from ElectroWeakAnalysis.WENu.simpleCutBasedElectronID_cfi import * -# -# simpleEleId_95relIso = simpleCutBasedElectronID.clone() -# simpleEleId_95relIso.electronQuality = '_95relIso_' -# mySequence = cms.Sequence(...+...+..+simpleEleId95relIso+...) -# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -# Warning: make sure that you use the correct tags for the -# RecoEgamma/ElectronIdentification package -# consult this twiki to obtain the latest information: -# -# https://twiki.cern.ch/twiki/bin/view/CMS/SimpleCutBasedEleID -# -# this version of the file needs -# V00-03-07-03 RecoEgamma/ElectronIdentification - -simpleCutBasedElectronID = cms.EDProducer("EleIdCutBasedExtProducer", - -# import here your collections - src = cms.InputTag("gsfElectrons"), - #reducedBarrelRecHitCollection = cms.InputTag("ecalRecHit","EcalRecHitsEB"), - #reducedEndcapRecHitCollection = cms.InputTag("ecalRecHit","EcalRecHitsEE"), - # Spring10 uses these names: - reducedBarrelRecHitCollection = cms.InputTag("reducedEcalRecHitsEB"), - reducedEndcapRecHitCollection = cms.InputTag("reducedEcalRecHitsEE"), - # if you want the vertices or the offline beam spot - verticesCollection = cms.InputTag("offlineBeamSpot"), - #dataMagneticFieldSetUp = cms.bool(False), - #dcsTag = cms.InputTag("scalersRawToDigi"), - algorithm = cms.string('eIDCB'), - - #electronIDType: robust for the simple Cut-Based - #electronQuality: see later - #electronVersion: use V03 with the offline beam spot - electronIDType = cms.string('robust'), - electronQuality = cms.string('test'), - electronVersion = cms.string('V04'), - -#### -#### Selections with Relative Isolation - robust95relIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(1.5e-01, 1.0e-02, 8.0e-01, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 1.5e-01, - 2.0e+00, 1.2e-01, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.0, 0.0, ), -# endcap = cms.vdouble(7.0e-02, 3.0e-02, 7.0e-01, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 8.0e-02, -# 6.0e-02, 5.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.0, 0.0, ), - endcap = cms.vdouble(7.0e-02, 3.0e-02, 7.0e-01, 1.0e-02, -1, -1, 9999., 9999., 9999., 9999., 9999., 8.0e-02, - 6.0e-02, 5.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.0, 0.0, ), - ), - robust90relIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(1.2e-01, 1.0e-02, 8.0e-01, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 1.2e-01, - 9.0e-02, 1.0e-01, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(5.0e-02, 3.0e-02, 7.0e-01, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 5.0e-02, -# 6.0e-02, 3.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - endcap = cms.vdouble(5.0e-02, 3.0e-02, 7.0e-01, 9.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 5.0e-02, - 6.0e-02, 3.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - ), - robust85relIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(4.0e-02, 1.0e-02, 6.0e-02, 6.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9.0e-02, - 8.0e-02, 1.0e-01, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 4.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 5.0e-02, -# 5.0e-02, 2.5e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 4.0e-02, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 5.0e-02, - 5.0e-02, 2.5e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - ), - robust80relIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(4.0e-02, 1.0e-02, 6.0e-02, 4.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9.0e-02, - 7.0e-02, 1.0e-01, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 3.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 4.0e-02, -# 5.0e-02, 2.5e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 3.0e-02, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 4.0e-02, - 5.0e-02, 2.5e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - ), - # 70% point modified with restricting cuts to physical values - robust70relIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(2.5e-02, 1.0e-02, 3.0e-02, 4.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 5.0e-02, - 6.0e-02, 3.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 2.5e-02, -# 2.5e-02, 2.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 5.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 2.5e-02, - 2.5e-02, 2.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - ), - # 60% point modified with restricting cuts to physical values - robust60relIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(2.5e-02, 1.0e-02, 2.5e-02, 4.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 4.0e-02, - 4.0e-02, 3.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 2.5e-02, -# 2.0e-02, 2.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 5.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 2.5e-02, - 2.0e-02, 2.0e-02, 9999., 9999., 9999., 9999., 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - ), - -#### -#### Selections with Combined Isolation - - robust95cIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(1.5e-01, 1.0e-02, 8.0e-01, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 1.5e-01, 0.0, -9999., 9999., 9999., 1, -1, 0.0, 0.0, ), -# endcap = cms.vdouble(7.0e-02, 3.0e-02, 7.0e-01, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., -# 9999., 9999., 9999., 9999., 9999., 1.0e-01, 0.0, -9999., 9999., 9999., 1, -1, 0.0, 0.0, ), - endcap = cms.vdouble(7.0e-02, 3.0e-02, 7.0e-01, 1.0e-02, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 1.0e-01, 0.0, -9999., 9999., 9999., 1, -1, 0.0, 0.0, ), - ), - robust90cIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(1.2e-01, 1.0e-02, 8.0e-01, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 1.0e-01, 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(5.0e-02, 3.0e-02, 7.0e-01, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., -# 9999., 9999., 9999., 9999., 9999., 7.0e-02, 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - endcap = cms.vdouble(5.0e-02, 3.0e-02, 7.0e-01, 9.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 7.0e-02, 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - ), - robust85cIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(4.0e-02, 1.0e-02, 6.0e-02, 6.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 9.0e-02, 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 4.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., -# 9999., 9999., 9999., 9999., 9999., 6.0e-02, 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 4.0e-02, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 6.0e-02, 0.0, -9999., 9999., 9999., 1, -1, 0.02, 0.02, ), - ), - robust80cIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(4.0e-02, 1.0e-02, 6.0e-02, 4.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 7.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 3.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., -# 9999., 9999., 9999., 9999., 9999., 6.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 3.0e-02, 7.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 6.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - ), - # 70% point modified with restricting cuts to physical values - robust70cIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(2.5e-02, 1.0e-02, 3.0e-02, 4.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 4.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., -# 9999., 9999., 9999., 9999., 9999., 3.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 5.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 3.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - ), - # 60% point modified with restricting cuts to physical values - robust60cIsoEleIDCutsV04 = cms.PSet( - barrel = cms.vdouble(2.5e-02, 1.0e-02, 2.5e-02, 4.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 3.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), -# endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 9999., -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., -# 9999., 9999., 9999., 9999., 9999., 2.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - endcap = cms.vdouble(2.5e-02, 3.0e-02, 2.0e-02, 5.0e-03, -1, -1, 9999., 9999., 9999., 9999., 9999., 9999., - 9999., 9999., 9999., 9999., 9999., 2.0e-02, 0.0, -9999., 9999., 9999., 0, -1, 0.02, 0.02, ), - ), - -) - diff --git a/ElectroWeakAnalysis/ZEE/python/simpleCutBasedSpring10SelectionBlocks_cfi.py b/ElectroWeakAnalysis/ZEE/python/simpleCutBasedSpring10SelectionBlocks_cfi.py deleted file mode 100644 index e9cf485ad85d2..0000000000000 --- a/ElectroWeakAnalysis/ZEE/python/simpleCutBasedSpring10SelectionBlocks_cfi.py +++ /dev/null @@ -1,294 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -######################################################### -## 95% -selection_95relIso = cms.PSet ( - trackIso_EB = cms.untracked.double(1.5e-01), - ecalIso_EB = cms.untracked.double(2.0e+00), - hcalIso_EB = cms.untracked.double(1.2e-01), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(8.0e-01), - deta_EB = cms.untracked.double(7.0e-03), - hoe_EB = cms.untracked.double(1.5e-01), - cIso_EB = cms.untracked.double(10000.), - - trackIso_EE = cms.untracked.double(8.0e-02), - ecalIso_EE = cms.untracked.double(6.0e-02), - hcalIso_EE = cms.untracked.double(5.0e-02), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(7.0e-01), - deta_EE = cms.untracked.double(1.0e-02), - hoe_EE = cms.untracked.double(7.0e-02), - cIso_EE = cms.untracked.double(10000. ), - useConversionRejection = cms.untracked.bool(False), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - ) - -selection_95cIso = cms.PSet ( - trackIso_EB = cms.untracked.double(100000.), - ecalIso_EB = cms.untracked.double(100000.), - hcalIso_EB = cms.untracked.double(100000.), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(8.0e-01), - deta_EB = cms.untracked.double(7.0e-03), - hoe_EB = cms.untracked.double(1.5e-01), - cIso_EB = cms.untracked.double(1.5e-01), - - trackIso_EE = cms.untracked.double(100000.), - ecalIso_EE = cms.untracked.double(100000.), - hcalIso_EE = cms.untracked.double(100000.), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(7.0e-01), - deta_EE = cms.untracked.double(1.0e-02), - hoe_EE = cms.untracked.double(7.0e-02), - cIso_EE = cms.untracked.double(1.0e-01), - useConversionRejection = cms.untracked.bool(False), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - ) - -######################################################### -## 90% -selection_90relIso = cms.PSet ( - trackIso_EB = cms.untracked.double(1.2e-01), - ecalIso_EB = cms.untracked.double(9.0e-02), - hcalIso_EB = cms.untracked.double(1.0e-01), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(8.0e-01), - deta_EB = cms.untracked.double(7.0e-03), - hoe_EB = cms.untracked.double(1.2e-01), - cIso_EB = cms.untracked.double(10000. ), - - trackIso_EE = cms.untracked.double(5.0e-02), - ecalIso_EE = cms.untracked.double(6.0e-02), - hcalIso_EE = cms.untracked.double(3.0e-02), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(7.0e-01), - deta_EE = cms.untracked.double(9.0e-03), - hoe_EE = cms.untracked.double(5.0e-02), - cIso_EE = cms.untracked.double(10000. ), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - ) - -selection_90cIso = cms.PSet ( - trackIso_EB = cms.untracked.double(100000.), - ecalIso_EB = cms.untracked.double(100000.), - hcalIso_EB = cms.untracked.double(100000.), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(8.0e-01), - deta_EB = cms.untracked.double(7.0e-03), - hoe_EB = cms.untracked.double(1.2e-01), - cIso_EB = cms.untracked.double(1.0e-01), - - trackIso_EE = cms.untracked.double(100000.), - ecalIso_EE = cms.untracked.double(100000.), - hcalIso_EE = cms.untracked.double(100000.), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(7.0e-01), - deta_EE = cms.untracked.double(9.0e-03), - hoe_EE = cms.untracked.double(5.0e-02), - cIso_EE = cms.untracked.double(7.0e-02), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - ) - -######################################################### -## 85% -selection_85relIso = cms.PSet ( - trackIso_EB = cms.untracked.double(9.0e-02), - ecalIso_EB = cms.untracked.double(8.0e-02), - hcalIso_EB = cms.untracked.double(1.0e-01), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(6.0e-02), - deta_EB = cms.untracked.double(6.0e-03), - hoe_EB = cms.untracked.double(4.0e-02), - cIso_EB = cms.untracked.double(10000. ), - - trackIso_EE = cms.untracked.double(5.0e-02), - ecalIso_EE = cms.untracked.double(5.0e-02), - hcalIso_EE = cms.untracked.double(2.5e-02), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(4.0e-02), - deta_EE = cms.untracked.double(7.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(10000. ), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - ) - -selection_85cIso = cms.PSet ( - trackIso_EB = cms.untracked.double(100000.), - ecalIso_EB = cms.untracked.double(100000.), - hcalIso_EB = cms.untracked.double(100000.), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(6.0e-02), - deta_EB = cms.untracked.double(6.0e-03), - hoe_EB = cms.untracked.double(4.0e-02), - cIso_EB = cms.untracked.double(9.0e-02), - - trackIso_EE = cms.untracked.double(100000.), - ecalIso_EE = cms.untracked.double(100000.), - hcalIso_EE = cms.untracked.double(100000.), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(4.0e-02), - deta_EE = cms.untracked.double(7.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(6.0e-02), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(1), - ) - -######################################################### -## 80% -selection_80relIso = cms.PSet ( - trackIso_EB = cms.untracked.double(9.0e-02), - ecalIso_EB = cms.untracked.double(7.0e-02), - hcalIso_EB = cms.untracked.double(1.0e-01), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(6.0e-02), - deta_EB = cms.untracked.double(4.0e-03), - hoe_EB = cms.untracked.double(4.0e-02), - cIso_EB = cms.untracked.double(100000.), - - trackIso_EE = cms.untracked.double(4.0e-02), - ecalIso_EE = cms.untracked.double(5.0e-02), - hcalIso_EE = cms.untracked.double(2.5e-02), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(3.0e-02), - deta_EE = cms.untracked.double(7.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(100000.), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(0), - ) - -selection_80cIso = cms.PSet ( - trackIso_EB = cms.untracked.double(100000.), - ecalIso_EB = cms.untracked.double(100000.), - hcalIso_EB = cms.untracked.double(100000.), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(6.0e-02), - deta_EB = cms.untracked.double(4.0e-03), - hoe_EB = cms.untracked.double(4.0e-02), - cIso_EB = cms.untracked.double(7.0e-02), - - trackIso_EE = cms.untracked.double(100000.), - ecalIso_EE = cms.untracked.double(100000.), - hcalIso_EE = cms.untracked.double(100000.), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(3.0e-02), - deta_EE = cms.untracked.double(7.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(6.0e-02), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(0), - ) - -######################################################### -## 70% corrected with lower limits to cut values -selection_70relIso = cms.PSet ( - trackIso_EB = cms.untracked.double(5.0e-02), - ecalIso_EB = cms.untracked.double(6.0e-02), - hcalIso_EB = cms.untracked.double(3.0e-02), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(3.0e-02), - deta_EB = cms.untracked.double(4.0e-03), - hoe_EB = cms.untracked.double(2.5e-02), - cIso_EB = cms.untracked.double(100000.), - - trackIso_EE = cms.untracked.double(2.5e-02), - ecalIso_EE = cms.untracked.double(2.5e-02), - hcalIso_EE = cms.untracked.double(2.0e-02), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(2.0e-02), - deta_EE = cms.untracked.double(5.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(100000.), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(0), - ) - -selection_70cIso = cms.PSet ( - trackIso_EB = cms.untracked.double(100000.), - ecalIso_EB = cms.untracked.double(100000.), - hcalIso_EB = cms.untracked.double(100000.), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(3.0e-02), - deta_EB = cms.untracked.double(4.0e-03), - hoe_EB = cms.untracked.double(2.5e-02), - cIso_EB = cms.untracked.double(4.0e-02), - - trackIso_EE = cms.untracked.double(100000.), - ecalIso_EE = cms.untracked.double(100000.), - hcalIso_EE = cms.untracked.double(100000.), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(2.0e-02), - deta_EE = cms.untracked.double(5.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(3.0e-02), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(0), - ) - -######################################################### -## 60% corrected with lower limits to cut values -selection_60relIso = cms.PSet ( - trackIso_EB = cms.untracked.double(4.0e-02), - ecalIso_EB = cms.untracked.double(4.0e-02), - hcalIso_EB = cms.untracked.double(3.0e-02), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(2.5e-02), - deta_EB = cms.untracked.double(4.0e-03), - hoe_EB = cms.untracked.double(2.5e-02), - cIso_EB = cms.untracked.double(100000.), - - trackIso_EE = cms.untracked.double(2.5e-02), - ecalIso_EE = cms.untracked.double(2.0e-02), - hcalIso_EE = cms.untracked.double(2.0e-02), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(2.0e-02), - deta_EE = cms.untracked.double(5.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(100000.), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(0), - ) - -selection_60cIso = cms.PSet ( - trackIso_EB = cms.untracked.double(100000.), - ecalIso_EB = cms.untracked.double(100000.), - hcalIso_EB = cms.untracked.double(100000.), - sihih_EB = cms.untracked.double(1.0e-02), - dphi_EB = cms.untracked.double(2.5e-02), - deta_EB = cms.untracked.double(4.0e-03), - hoe_EB = cms.untracked.double(2.5e-02), - cIso_EB = cms.untracked.double(3.0e-02), - - trackIso_EE = cms.untracked.double(100000.), - ecalIso_EE = cms.untracked.double(100000.), - hcalIso_EE = cms.untracked.double(100000.), - sihih_EE = cms.untracked.double(3.0e-02), - dphi_EE = cms.untracked.double(2.0e-02), - deta_EE = cms.untracked.double(5.0e-03), - hoe_EE = cms.untracked.double(2.5e-02), - cIso_EE = cms.untracked.double(2.0e-02), - useConversionRejection = cms.untracked.bool(True), - useExpectedMissingHits = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits = cms.untracked.int32(0), - ) - -######################################################### - - - diff --git a/ElectroWeakAnalysis/ZEE/python/simpleEleIdSequence_cff.py b/ElectroWeakAnalysis/ZEE/python/simpleEleIdSequence_cff.py deleted file mode 100644 index 053683cb15966..0000000000000 --- a/ElectroWeakAnalysis/ZEE/python/simpleEleIdSequence_cff.py +++ /dev/null @@ -1,58 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from ElectroWeakAnalysis.ZEE.simpleCutBasedElectronIDSpring10_cfi import * - - -simpleEleId95relIso = simpleCutBasedElectronID.clone() -simpleEleId95relIso.electronQuality = '95relIso' - -simpleEleId90relIso = simpleCutBasedElectronID.clone() -simpleEleId90relIso.electronQuality = '90relIso' - -simpleEleId85relIso = simpleCutBasedElectronID.clone() -simpleEleId85relIso.electronQuality = '85relIso' - -simpleEleId80relIso = simpleCutBasedElectronID.clone() -simpleEleId80relIso.electronQuality = '80relIso' - -simpleEleId70relIso = simpleCutBasedElectronID.clone() -simpleEleId70relIso.electronQuality = '70relIso' - -simpleEleId60relIso = simpleCutBasedElectronID.clone() -simpleEleId60relIso.electronQuality = '60relIso' - - -simpleEleId95cIso = simpleCutBasedElectronID.clone() -simpleEleId95cIso.electronQuality = '95cIso' - -simpleEleId90cIso = simpleCutBasedElectronID.clone() -simpleEleId90cIso.electronQuality = '90cIso' - -simpleEleId85cIso = simpleCutBasedElectronID.clone() -simpleEleId85cIso.electronQuality = '85cIso' - -simpleEleId80cIso = simpleCutBasedElectronID.clone() -simpleEleId80cIso.electronQuality = '80cIso' - -simpleEleId70cIso = simpleCutBasedElectronID.clone() -simpleEleId70cIso.electronQuality = '70cIso' - -simpleEleId60cIso = simpleCutBasedElectronID.clone() -simpleEleId60cIso.electronQuality = '60cIso' - - - -simpleEleIdSequence = cms.Sequence(simpleEleId95relIso+ - simpleEleId90relIso+ - simpleEleId85relIso+ - simpleEleId80relIso+ - simpleEleId70relIso+ - simpleEleId60relIso+ - simpleEleId95cIso+ - simpleEleId90cIso+ - simpleEleId85cIso+ - simpleEleId80cIso+ - simpleEleId70cIso+ - simpleEleId60cIso - ) - diff --git a/ElectroWeakAnalysis/ZEE/src/AnalysisErsatz.cc b/ElectroWeakAnalysis/ZEE/src/AnalysisErsatz.cc deleted file mode 100644 index 027907fd8c6af..0000000000000 --- a/ElectroWeakAnalysis/ZEE/src/AnalysisErsatz.cc +++ /dev/null @@ -1,534 +0,0 @@ -/*#include "ElectroWeakAnalysis/ZEE/interface/AnalysisErsatz.h" -AnalysisErsatz::AnalysisErsatz(const edm::ParameterSet& ps) -{ - MCTruthCollection_ = consumes(ps.getParameter("MCTruthCollection")); - ElectronCollection_ = consumes(ps.getParameter("ElectronCollection")); - GenMEtCollection_ = consumes(ps.getParameter("GenMEtCollection")); - //T1MEtCollection_ = consumes(ps.getParameter("T1MEtCollection")); - PfMEtCollection_ = consumes(ps.getParameter("PfMEtCollection")); - TcMEtCollection_ = consumes(ps.getParameter("TcMEtCollection")); - CaloMEtCollection_ = consumes(ps.getParameter("CaloMEtCollection")); - TriggerEvent_ = consumes(ps.getParameter("TriggerEvent")); - TriggerPath_ = ps.getParameter("TriggerPath"); - TriggerResults_ = consumes(ps.getParameter("TriggerResults")); - TriggerName_ = ps.getParameter("TriggerName"); - ErsatzEvent_ = ps.getParameter("ErsatzEvent"); - double CElecPtMin = ps.getParameter("CElecPtMin"); - double CEB_siEiE = ps.getParameter("CEB_sigmaIEtaIEta"); - double CEB_dPhiIn = ps.getParameter("CEB_deltaPhiIn"); - double CEB_dEtaIn = ps.getParameter("CEB_deltaEtaIn"); - double CEB_EcalIso = ps.getParameter("CEB_EcalIso"); - double CEB_HcalIso = ps.getParameter("CEB_HcalIso"); - double CEB_TrckIso = ps.getParameter("CEB_TrckIso"); - double CEE_siEiE = ps.getParameter("CEE_sigmaIEtaIEta"); - double CEE_dPhiIn = ps.getParameter("CEE_deltaPhiIn"); - double CEE_dEtaIn = ps.getParameter("CEE_deltaEtaIn"); - double CEE_EcalIso = ps.getParameter("CEE_EcalIso"); - double CEE_HcalIso = ps.getParameter("CEE_HcalIso"); - double CEE_TrckIso = ps.getParameter("CEE_TrckIso"); - mW_ = ps.getParameter("mW"); - mZ_ = ps.getParameter("mZ"); - - CutVector_.resize(13); - CutVector_[EtCut_] = CElecPtMin; - CutVector_[EB_sIhIh_] = CEB_siEiE; - CutVector_[EB_dPhiIn_] = CEB_dPhiIn; - CutVector_[EB_dEtaIn_] = CEB_dEtaIn; - CutVector_[EB_TrckIso_] = CEB_TrckIso; - CutVector_[EB_EcalIso_] = CEB_EcalIso; - CutVector_[EB_HcalIso_] = CEB_HcalIso; - CutVector_[EE_sIhIh_] = CEE_siEiE; - CutVector_[EE_dPhiIn_] = CEE_dPhiIn; - CutVector_[EE_dEtaIn_] = CEE_dEtaIn; - CutVector_[EE_TrckIso_] = CEE_TrckIso; - CutVector_[EE_EcalIso_] = CEE_EcalIso; - CutVector_[EE_HcalIso_] = CEE_HcalIso; - -} - - -AnalysisErsatz::~AnalysisErsatz() -{ -} - - -// ------------ method called once each job just before starting event loop ------------ -void AnalysisErsatz::beginJob() -{ - edm::Service fs; - t_ = fs->make("AnalysisData", "Analysis of Ersatz MEt Properties"); - - t_->Branch("Boson_pt", &Boson_pt_,"Boson_pt/D"); - t_->Branch("Boson_y", &Boson_y_,"Boson_y/D"); - t_->Branch("Boson_phi", &Boson_phi_,"Boson_phi/D"); - t_->Branch("Boson_m", &Boson_m_,"Boson_m/D"); - t_->Branch("McElec1_pt", McElec1_pt_,"McElec1_pt[4]/D"); - t_->Branch("McElec1_eta", McElec1_eta_,"McElec1_eta[4]/D"); - t_->Branch("McElec3_pt", McElec3_pt_,"McElec3_pt[4]/D"); - t_->Branch("McElec3_eta", McElec3_eta_,"McElec3_eta[4]/D"); - t_->Branch("RndmInt", &RndmInt_, "RndmInt/I"); - t_->Branch("RndmTrig", &RndmTrig_, "RndmTrig/I"); - t_->Branch("RndmReco", &RndmReco_, "RndmReco/I"); - t_->Branch("OthrTrig", &OthrTrig_, "OthrTrig/I"); - t_->Branch("OthrReco", &OthrReco_, "OthrReco/I"); - t_->Branch("RndmMcElec_pt", &RndmMcElec_pt_,"RndmMcElec_pt/D"); - t_->Branch("RndmMcElec_eta", &RndmMcElec_eta_,"RndmMcElec_eta/D"); - t_->Branch("RndmMcElec_phi", &RndmMcElec_phi_,"RndmMcElec_phi/D"); - t_->Branch("RndmMcElec_Rescaled_pt", &RndmMcElec_Rescaled_pt_,"RndmMcElec_Rescaled_pt/D"); - t_->Branch("RndmMcElec_Rescaled_eta", &RndmMcElec_Rescaled_eta_,"RndmMcElec_Rescaled_eta/D"); - t_->Branch("RndmMcElec_Rescaled_phi", &RndmMcElec_Rescaled_phi_,"RndmMcElec_Rescaled_phi/D"); - t_->Branch("RndmMcElecTRIG_pt", &RndmMcElecTRIG_pt_,"RndmMcElecTRIG_pt/D"); - t_->Branch("RndmMcElecTRIG_eta", &RndmMcElecTRIG_eta_,"RndmMcElecTRIG_eta/D"); - t_->Branch("RndmMcElecRECO_pt", &RndmMcElecRECO_pt_,"RndmMcElecRECO_pt/D"); - t_->Branch("RndmMcElecRECO_eta", &RndmMcElecRECO_eta_,"RndmMcElecRECO_eta/D"); - t_->Branch("OthrMcElec_pt", &OthrMcElec_pt_,"OthrMcElec_pt/D"); - t_->Branch("OthrMcElec_eta", &OthrMcElec_eta_,"OthrMcElec_eta/D"); - t_->Branch("OthrMcElec_phi", &OthrMcElec_phi_,"OthrMcElec_phi/D"); - t_->Branch("OthrMcElec_Rescaled_pt", &OthrMcElec_Rescaled_pt_,"OthrMcElec_Rescaled_pt/D"); - t_->Branch("OthrMcElec_Rescaled_eta", &OthrMcElec_Rescaled_eta_,"OthrMcElec_Rescaled_eta/D"); - t_->Branch("OthrMcElec_Rescaled_phi", &OthrMcElec_Rescaled_phi_,"OthrMcElec_Rescaled_phi/D"); - t_->Branch("OthrMcElecTRIG_pt", &OthrMcElecTRIG_pt_,"OthrMcElecTRIG_pt/D"); - t_->Branch("OthrMcElecTRIG_eta", &OthrMcElecTRIG_eta_,"OthrMcElecTRIG_eta/D"); - t_->Branch("OthrMcElecRECO_pt", &OthrMcElecRECO_pt_,"OthrMcElecRECO_pt/D"); - t_->Branch("OthrMcElecRECO_eta", &OthrMcElecRECO_eta_,"OthrMcElecRECO_eta/D"); - t_->Branch("McNu_pt", &McNu_pt_,"McNu_pt/D"); - t_->Branch("McNu_eta", &McNu_eta_,"McNu_eta/D"); - t_->Branch("McNu_phi", &McNu_phi_,"McNu_phi/D"); - t_->Branch("McNu_vx", &McNu_vx_,"McNu_vx/D"); - t_->Branch("McNu_vy", &McNu_vy_,"McNu_vy/D"); - t_->Branch("McNu_vz", &McNu_vz_,"McNu_vz/D"); - t_->Branch("McLeptons_dPhi", &McLeptons_dPhi_,"McLeptons_dPhi/D"); - t_->Branch("McLeptons_dEta", &McLeptons_dEta_,"McLeptons_dEta/D"); - t_->Branch("McLeptons_dR", &McLeptons_dR_,"McLeptons_dR/D"); - t_->Branch("nSelElecs", &nSelElecs_,"nSelElecs/I"); - t_->Branch("elec_q", elec_q_,"elec_q[4]/D"); - t_->Branch("elec_pt", elec_pt_,"elec_pt[4]/D"); - t_->Branch("elec_eta", elec_eta_,"elec_eta[4]/D"); - t_->Branch("elec_phi", elec_phi_,"elec_phi[4]/D"); - t_->Branch("elec_pt25", &elec_pt25_,"elec_pt25/D"); - t_->Branch("elec_eta25", &elec_eta25_,"elec_eta25/D"); - t_->Branch("elec_phi25", &elec_phi25_,"elec_phi25/D"); - t_->Branch("elec_sIhIh", elec_sIhIh_, "elec_sIhIh[4]/D"); - t_->Branch("elec_dPhiIn", elec_dPhiIn_, "elec_dPhiIn[4]/D"); - t_->Branch("elec_dEtaIn", elec_dEtaIn_, "elec_dEtaIn[4]/D"); - t_->Branch("elec_trckIso", elec_trckIso_,"elec_trckIso[4]/D"); - t_->Branch("elec_ecalIso", elec_ecalIso_,"elec_ecalIso[4]/D"); - t_->Branch("elec_hcalIso", elec_hcalIso_,"elec_hcalIso[4]/D"); - t_->Branch("elec_e2x5Max", elec_e2x5Max_,"elec_e2x5Max[4]/D"); - t_->Branch("elec_e1x5Max", elec_e1x5Max_,"elec_e1x5Max[4]/D"); - t_->Branch("elec_e5x5", elec_e5x5_,"elec_e5x5[4]/D"); - t_->Branch("elec_hoe", elec_hoe_,"elec_hoe[4]/D"); - t_->Branch("elec_eop", elec_eop_,"elec_eop[4]/D"); - t_->Branch("elec_pin", elec_pin_,"elec_pin[4]/D"); - t_->Branch("elec_pout", elec_pout_,"elec_pout[4]/D"); - - t_->Branch("Selected_nuPt", Selected_nuPt_, "Selected_nuPt[4]/D"); - t_->Branch("Selected_nuEta", Selected_nuEta_, "Selected_nuEta[4]/D"); - t_->Branch("Selected_nuPhi", Selected_nuPhi_, "Selected_nuPhi[4]/D"); - t_->Branch("caloMEt", &caloMEt_,"caloMEt/D"); - t_->Branch("t1MEt", &t1MEt_,"t1MEt/D"); - t_->Branch("t1MEtPhi", &t1MEtPhi_,"t1MEtPhi/D"); - t_->Branch("t1SumEt", &t1SumEt_,"t1SumEt/D"); - t_->Branch("pfMEt", &pfMEt_,"pfMEt/D"); - t_->Branch("pfMEtPhi", &pfMEtPhi_,"pfMEtPhi/D"); - t_->Branch("pfSumEt", &pfSumEt_,"pfSumEt/D"); - t_->Branch("tcMEt", &tcMEt_,"tcMEt/D"); - t_->Branch("tcMEtPhi", &tcMEtPhi_,"tcMEtPhi/D"); - t_->Branch("tcSumEt", &tcSumEt_,"tcSumEt/D"); - t_->Branch("caloSumEt", &caloSumEt_,"caloSumEt/D"); - t_->Branch("caloMEt25", &caloMEt25_,"caloMEt25/D"); - t_->Branch("caloMEt30", &caloMEt30_,"caloMEt30/D"); - t_->Branch("caloMEtECAL25", &caloMEtECAL25_,"caloMEtECAL25/D"); - t_->Branch("caloMEtECAL30", &caloMEtECAL30_,"caloMEtECAL30/D"); - t_->Branch("caloMEtPhi", &caloMEtPhi_,"caloMEtPhi/D"); - t_->Branch("caloMEtPhi25", &caloMEtPhi25_,"caloMEtPhi25/D"); - t_->Branch("caloMEtPhi30", &caloMEtPhi30_,"caloMEtPhi30/D"); - t_->Branch("caloMEtPhiECAL25", &caloMEtPhiECAL25_,"caloMEtPhiECAL25/D"); - t_->Branch("caloMEtPhiECAL30", &caloMEtPhiECAL30_,"caloMEtPhiECAL30/D"); - t_->Branch("caloMt", caloMt_,"caloMt[4]/D"); - t_->Branch("caloMt25", caloMt25_,"caloMt25[4]/D"); - t_->Branch("caloMt30", caloMt30_,"caloMt30[4]/D"); - t_->Branch("caloUESumEt", &caloUESumEt_, "caloUESumEt_/D"); - t_->Branch("nHltObj", &nHltObj_, "nHltObj/I"); - t_->Branch("HltObj_pt_", HltObj_pt_,"HltObj_pt_[4]/D"); - t_->Branch("HltObj_eta_", HltObj_eta_,"HltObj_eta_[4]/D"); - t_->Branch("genMEt", &genMEt_,"genMEt/D"); - t_->Branch("genUESumEt", &genUESumEt_, "genUESumEt_/D"); - -} -// ------------ method called to for each event ------------ -void AnalysisErsatz::analyze(const edm::Event& evt, const edm::EventSetup& es) -{ - caloMEt_ = -99.; caloSumEt_ = -99.; caloUESumEt_ = -99.; - caloMEt25_ = -99.; caloMEt30_ = -99.; - caloMEtECAL25_ = -99.; caloMEtECAL30_ =- 99.; - caloMEtPhi_ = -99.; caloMEtPhi25_ = -99.; caloMEtPhi30_ = -99.; - caloMEtPhiECAL25_ = -99.; caloMEtPhiECAL30_ =- 99.; - genMEt_ = -99.; genUESumEt_ = -99.; genMEt25_ = -99.; - t1MEt_ = -99.; t1MEtPhi_ = -99.; t1SumEt_ = -99.; - pfMEt_ = -99.; pfMEtPhi_ = -99.; pfSumEt_ = -99.; - tcMEt_ = -99.; tcMEtPhi_ = -99.; tcSumEt_ = -99.; - nHltObj_ = -99; nSelElecs_ = -99; - Boson_pt_ = -99.; Boson_y_ = -99.; Boson_m_ = -99.; Boson_mt_ = -99.; Boson_phi_ = -99.; - McNu_pt_ = -99.; McNu_eta_ = -99.; McNu_phi_ = -99.; - McNu_vx_= -99.; McNu_vy_= -99.; McNu_vz_ = -99.; - McLeptons_dPhi_ = -99.; McLeptons_dEta_ = -99.; McLeptons_dR_ = -99.; - RndmMcElec_pt_ = -99.; RndmMcElec_eta_ = -99.; RndmMcElec_phi_ = -99.; - RndmMcElec_Rescaled_pt_ = -99.; RndmMcElec_Rescaled_eta_ = -99.; RndmMcElec_Rescaled_phi_ = -99.; - RndmMcElecTRIG_pt_ = -99.; RndmMcElecTRIG_eta_ = -99.; RndmMcElecRECO_pt_ = -99.; RndmMcElecRECO_eta_ = -99.; - OthrMcElec_pt_ = -99.; OthrMcElec_eta_ = -99.; OthrMcElec_phi_ = -99.; - OthrMcElec_Rescaled_pt_ = -99.; OthrMcElec_Rescaled_eta_ = -99.; OthrMcElec_Rescaled_phi_ = -99.; - OthrMcElecTRIG_pt_ = -99.; OthrMcElecTRIG_eta_ = -99.; OthrMcElecRECO_pt_ = -99.; OthrMcElecRECO_eta_ = -99.; - RndmTrig_ = 0; RndmReco_ = 0; OthrTrig_ = 0; OthrReco_ = 0; - elec_pt25_ = -99.; elec_eta25_= -99.; elec_eta25_= -99.; - for(int i = 0; i < nEntries_arr_; ++i) - { - McElec1_pt_[i] = -99.; McElec1_eta_[i] = -99.; - McElec3_pt_[i] = -99.; McElec3_eta_[i] = -99.; - elec_q_[i] = -99.; elec_pt_[i] = -99.; elec_eta_[i]= -99.; elec_phi_[i]= -99.; - elec_trckIso_[i] = -99.; elec_ecalIso_[i] = -99.; elec_hcalIso_[i] = -99.; - elec_sIhIh_[i] = -99.; elec_dPhiIn_[i] = -99.; elec_dEtaIn_[i] = -99.; - elec_e5x5_[i] = -99.; elec_e2x5Max_[i] = -99.; elec_e1x5Max_[i] = -99.; - elec_hoe_[i] = -99.; elec_eop_[i] = -99.; elec_pin_[i] = -99.; elec_pout_[i] = -99.; - Selected_nuPt_[i] = -99.; Selected_nuEta_[i] = -99.; Selected_nuPhi_[i] = -99.; - caloMt_[i] = -99.; caloMt25_[i] = -99.; caloMt30_[i] = -99.; - genMt_[i] = -99.; - } - edm::Handle pGenPart; - evt.getByToken(MCTruthCollection_, pGenPart); - edm::Handle pElectrons; - evt.getByToken(ElectronCollection_, pElectrons); - edm::Handle pCaloMEt; - evt.getByToken(CaloMEtCollection_, pCaloMEt); - //edm::Handle pT1MEt; - // evt.getByToken(T1MEtCollection_, pT1MEt); - edm::Handle pPfMEt; - evt.getByToken(PfMEtCollection_, pPfMEt); - edm::Handle pTcMEt; - evt.getByToken(TcMEtCollection_, pTcMEt); - edm::Handle pGenMEt; - evt.getByToken(GenMEtCollection_, pGenMEt); - edm::Handle pTriggerResults; - evt.getByToken(TriggerResults_, pTriggerResults); - const edm::TriggerResults* HltRes = pTriggerResults.product(); - edm::Handle pHLT; - if(HltRes->accept(34) !=0) - { - evt.getByToken(TriggerEvent_, pHLT); - } - edm::LogDebug_("analyse","", 143)<<"Have obtained collections."< Leptons; - const reco::GenParticleCollection *McCand = pGenPart.product(); - math::XYZTLorentzVector RndmMcElec, OthrMcElec; - edm::Service rng; - math::XYZTLorentzVector RndmMcElec_alt, OthrMcElec_alt, Zboson; - CLHEP::RandFlat flatDistribution(rng->getEngine(), 0, 2); - double RandomNum = flatDistribution.fire(); - RndmInt_ = int(RandomNum); -// std::cout<<"Random Number = "<< RandomNum <<"\t int = "<< int(RandomNum)<begin(); McP != McCand->end(); ++McP) - { - const reco::Candidate* mum = McP->mother(); - if(McP->pdgId()==11) - { - edm::LogDebug_("", "", 216)<<"Found electron, mother = "<< mum->pdgId() <<"\t status = "<< McP->status() - <<"\tpt = "<< McP->pt() <<"\teta = "<< McP->eta(); - } - if(McP->pdgId()==-11) - { - edm::LogDebug_("", "", 221)<<"Found positron, mother = "<< mum->pdgId() <<"\t status = "<< McP->status() - <<"\tpt = "<< McP->pt() <<"\teta = "<< McP->eta(); - } - if(abs(McP->pdgId())==12) - { - edm::LogDebug_("", "", 216)<<"Found neutrino, mother = "<< mum->pdgId() <<"\t status = "<< McP->status() - <<"\tpt = "<< McP->pt() <<"\teta = "<< McP->eta(); - } - if(abs(McP->pdgId())==11 && (abs(mum->pdgId()) == 24|| abs(mum->pdgId()) == 23)) - { -// Leptons.push_back(McP); - if(!BosonAnalysed) - { - Boson_pt_ = mum->pt(); - Boson_y_ = mum->y(); - Boson_phi_ = mum->phi(); - Boson_m_ = mum->mass(); - Boson_mt_ = mum->mt(); - if(abs(mum->pdgId() == 23)) Zboson = mum->p4(); - BosonAnalysed = true; - } - McElec3_pt_[k] = McP->pt(); - McElec3_eta_[k] = McP->eta(); - if(k == int(RandomNum)) - { - RndmMcElec_alt = McP->p4(); - }else OthrMcElec_alt = McP->p4(); - ++k; - } - if(abs(McP->pdgId())==12 && abs(mum->pdgId()) == 24) - { - Leptons.push_back(McP); - edm::LogDebug_("","",328)<<"Pushed neutrino back into Leptons. Leptons.size() = "<< Leptons.size(); - McNu_pt_ = McP->pt(); - McNu_eta_ = McP->eta(); - edm::LogDebug_("","",332)<<"ECAL eta = "<< McNu_ECALeta_; - McNu_phi_ = McP->phi(); - McNu_vx_ = McP->vx(); - McNu_vy_ = McP->vy(); - McNu_vz_ = McP->vz(); - if(fabs(McNu_eta_) < 2.5) nuInEta25 = true; - if(fabs(McNu_eta_) < 3.0) nuInEta30 = true; - ++n; - } - if(abs(McP->pdgId())==11 && McP->status() == 1 && (abs(mum->pdgId()) == 11)) - { - Leptons.push_back(McP); - edm::LogDebug_("","",344)<<"Pushed electron back into Leptons. Leptons.size() = "<< Leptons.size(); - McElec1_pt_[m] = McP->pt(); - McElec1_eta_[m] = McP->eta(); - if(m == int(RandomNum)) - { - RndmMcElec = McP->p4(); - RndmMcElec_pt_ = McElec1_pt_[m]; - RndmMcElec_eta_ = McElec1_eta_[m]; - RndmMcElec_phi_ = McP->phi(); - } - else{ - OthrMcElec = McP->p4(); - OthrMcElec_pt_ = McElec1_pt_[m]; - OthrMcElec_eta_ = McElec1_eta_[m]; - OthrMcElec_phi_ = McP->phi(); - } - - elecEt += McP->pt(); - ++m; - } - } - edm::LogDebug_("", "", 362)<<"Size of Leptons = "<< Leptons.size(); - McLeptons_dPhi_ = reco::deltaPhi(Leptons[0]->phi(), Leptons[1]->phi()); - McLeptons_dEta_ = Leptons[0]->eta() - Leptons[1]->eta(); - McLeptons_dR_ = reco::deltaR(*Leptons[0], *Leptons[1]); - edm::LogDebug_("","",369)<<"McLeptons_dR_ = "<< McLeptons_dR_; - - math::XYZTLorentzVector Wboson; - if(McNu_pt_ < -98.) - { - edm::LogDebug_("", "", 303)<<"Z pt = "<< Zboson.Pt() << "Z boson mass = " << Zboson.M(); - edm::LogDebug_("","", 307)<<"Z boson in lab frame = ("<accept() = "<< HltRes->accept(34); - if(HltRes->accept(34) ==0) edm::LogError("")<<"Event did not pass HLT path 34, assumed to be "<< TriggerName_ <<"!"; - unsigned int fId = 999; - if(HltRes->accept(34) !=0) - { - fId = pHLT->filterIndex(TriggerPath_); // something wrong with this step - edm::LogDebug_("","",426)<<"fId = pHLT->filterIndex("<< TriggerPath_<<") = "<< fId; - const trigger::Keys& ring = pHLT->filterKeys(fId); - const trigger::TriggerObjectCollection& HltObjColl = pHLT->getObjects(); - nHltObj_ = ring.size(); - for(int k = 0; k < nHltObj_; ++k) - { - const trigger::TriggerObject& HltObj = HltObjColl[ring[k]]; - if(reco::deltaR(RndmMcElec, HltObj) < 0.1) RndmTrig_ = 1; - if(reco::deltaR(OthrMcElec, HltObj) < 0.1) OthrTrig_ = 1; - if(k < 4) - { - HltObj_pt_[k] = HltObj.pt(); - HltObj_eta_[k] = HltObj.eta(); - } - } - } - if(RndmTrig_ != 0) - { - RndmMcElecTRIG_pt_ = RndmMcElec_pt_; - RndmMcElecTRIG_eta_ = RndmMcElec_eta_; - } - if(OthrTrig_ != 0) - { - OthrMcElecTRIG_pt_ = OthrMcElec_pt_; - OthrMcElecTRIG_eta_ = OthrMcElec_eta_; - } - const reco::GenMETCollection* genMEtCollection = pGenMEt.product(); - reco::GenMETCollection::const_iterator genMEt = genMEtCollection->begin(); - genMEt_ = genMEt->pt(); - genUESumEt_ = genMEt->sumEt() - elecEt; -// std::cout<<"genMEt->sumEt() - elecEt = "<< genMEt->sumEt()<<" - "<< elecEt <<" = "<< genUESumEt_; - - const reco::CaloMETCollection* caloMEtCollection = pCaloMEt.product(); - reco::CaloMETCollection::const_iterator met = caloMEtCollection->begin(); - caloMEt_ = met->pt(); - edm::LogDebug_("","",462)<<"caloMEt_ = "<< caloMEt_; - caloMEtPhi_ = met->phi(); - caloSumEt_ = met->sumEt(); - - //const reco::METCollection* t1MEtCollection = pT1MEt.product(); - //reco::METCollection::const_iterator t1met = t1MEtCollection->begin(); - //t1MEt_ = t1met->pt(); - //edm::LogDebug_("","",462)<<"t1MEt_ = "<< t1MEt_; - //t1MEtPhi_ = t1met->phi(); - //t1SumEt_ = t1met->sumEt(); - - const reco::PFMETCollection* pfMEtCollection = pPfMEt.product(); - reco::PFMETCollection::const_iterator pfmet = pfMEtCollection->begin(); - pfMEt_ = pfmet->pt(); - edm::LogDebug_("","",462)<<"pfMEt_ = "<< pfMEt_; - pfMEtPhi_ = pfmet->phi(); - pfSumEt_ = pfmet->sumEt(); - - const reco::METCollection* tcMEtCollection = pTcMEt.product(); - reco::METCollection::const_iterator tcmet = tcMEtCollection->begin(); - tcMEt_ = tcmet->pt(); - edm::LogDebug_("","",462)<<"tcMEt_ = "<< tcMEt_; - tcMEtPhi_ = tcmet->phi(); - tcSumEt_ = tcmet->sumEt(); - - if(fabs(McNu_ECALeta_) < 2.5) - { - caloMEtECAL25_ = met->pt(); - caloMEtPhiECAL25_ = met->phi(); - } - if(fabs(McNu_ECALeta_) < 3.0) - { - caloMEtECAL30_ = met->pt(); - caloMEtPhiECAL30_ = met->phi(); - } - if(nuInEta25) - { - genMEt25_ = genMEt->pt(); - caloMEt25_ = met->pt(); - caloMEtPhi25_ = met->phi(); - } - if(nuInEta30){ - caloMEt30_ = met->pt(); - caloMEtPhi30_ = met->phi(); - } - - std::vector UniqueElectrons = uniqueElectronFinder(pElectrons); - caloUESumEt_ = met->sumEt(); - for(std::vector::const_iterator Relec = UniqueElectrons.begin(); Relec != UniqueElectrons.end(); ++Relec) - { - reco::GsfElectronRef elec = *Relec; - math::XYZTLorentzVector sc = PhysicsVector(met->vertex(), *(elec->superCluster())); - if(reco::deltaR(RndmMcElec, *elec) < 0.1) RndmReco_ = 1; - if(reco::deltaR(OthrMcElec, *elec) < 0.1) OthrReco_ = 1; - caloUESumEt_ -= sc.Pt(); - } - if(RndmReco_ != 0) - { - RndmMcElecRECO_pt_ = RndmMcElec_pt_; - RndmMcElecRECO_eta_ = RndmMcElec_eta_; - } - if(OthrReco_ != 0) - { - OthrMcElecRECO_pt_ = OthrMcElec_pt_; - OthrMcElecRECO_eta_ = OthrMcElec_eta_; - } - edm::LogDebug_("analyse","", 230)<<"Analysed UE information"<accept(34) != 0) - { - std::vector SelectedElectrons = electronSelector(UniqueElectrons, pHLT, fId, CutVector_); - nSelElecs_ = SelectedElectrons.size(); - m = 0; - for(std::vector::const_iterator Relec = SelectedElectrons.begin(); Relec != SelectedElectrons.end(); ++Relec) - { - reco::GsfElectronRef elec = *Relec; - if(elec->pt() > CutVector_[0]) - { - elec_q_[m] = elec->charge(); - elec_pt_[m] = elec->pt(); - elec_eta_[m] = elec->eta(); - elec_phi_[m] = elec->phi(); - elec_trckIso_[m] = elec->isolationVariables03().tkSumPt; - elec_ecalIso_[m] = elec->isolationVariables04().ecalRecHitSumEt; - elec_hcalIso_[m] = elec->isolationVariables04().hcalDepth1TowerSumEt - + elec->isolationVariables04().hcalDepth2TowerSumEt; - elec_sIhIh_[m] = elec->scSigmaIEtaIEta(); - elec_dPhiIn_[m] = elec->deltaPhiSuperClusterTrackAtVtx(); - elec_dEtaIn_[m] = elec->deltaEtaSuperClusterTrackAtVtx(); - elec_e5x5_[m] = elec->scE5x5(); - elec_e2x5Max_[m] = elec->scE2x5Max(); - elec_e2x5Max_[m] = elec->scE1x5(); - elec_hoe_[m] = elec->hadronicOverEm(); - elec_eop_[m] = elec->eSuperClusterOverP(); - elec_pin_[m] = elec->trackMomentumAtVtx().R(); - elec_pout_[m] = elec->trackMomentumOut().R(); - - Selected_nuPt_[m] = McNu_pt_; - Selected_nuEta_[m] = McNu_eta_; - Selected_nuPhi_[m] = McNu_phi_; - caloMt_[m] = sqrt(2.*elec->pt()*met->pt()*(1-cos(reco::deltaPhi(elec->phi(), met->phi())))); - if(nuInEta25) - { - caloMt25_[m] = caloMt_[m]; - elec_pt25_ = elec->pt(); - elec_eta25_ = elec->eta(); - elec_phi25_ = elec->phi(); - } - if(nuInEta30) caloMt30_[m] = caloMt_[m]; - ++m; - } - } - } - - edm::LogDebug_("analyse","", 248)<<"Analysed final selection information"<Fill(); -} - - - -// ------------ method called once each job just after ending the event loop ------------ -void AnalysisErsatz::endJob() { -} - -//define this as a plug-in -DEFINE_FWK_MODULE(AnalysisErsatz); -*/ diff --git a/ElectroWeakAnalysis/ZEE/src/ErsatzMEt.cc b/ElectroWeakAnalysis/ZEE/src/ErsatzMEt.cc deleted file mode 100644 index 916e44a43ad7c..0000000000000 --- a/ElectroWeakAnalysis/ZEE/src/ErsatzMEt.cc +++ /dev/null @@ -1,943 +0,0 @@ -#include "ElectroWeakAnalysis/ZEE/interface/ErsatzMEt.h" -#include "FWCore/Common/interface/TriggerNames.h" - -ErsatzMEt::ErsatzMEt(const edm::ParameterSet& ps) { - MCTruthCollection_ = consumes(ps.getParameter("MCTruthCollection")); - ElectronCollection_ = consumes(ps.getParameter("ElectronCollection")); - HybridScCollection_ = consumes(ps.getParameter("HybridScCollection")); - M5x5ScCollection_ = consumes(ps.getParameter("M5x5ScCollection")); - GenMEtCollection_ = consumes(ps.getParameter("GenMEtCollection")); - CaloMEtCollection_ = consumes(ps.getParameter("CaloMEtCollection")); - //T1MEtCollection_ = consumes(ps.getParameter("T1MEtCollection")); - PfMEtCollection_ = consumes(ps.getParameter("PfMEtCollection")); - TcMEtCollection_ = consumes(ps.getParameter("TcMEtCollection")); - TriggerEvent_ = consumes(ps.getParameter("TriggerEvent")); - TriggerPath_ = ps.getParameter("TriggerPath"); - TriggerResults_ = consumes(ps.getParameter("TriggerResults")); - TriggerName_ = ps.getParameter("TriggerName"); - HLTPathCheck_ = ps.getParameter("HLTPathCheck"); - - Zevent_ = ps.getParameter("Zevent"); - mW_ = ps.getParameter("mW"); - mZ_ = ps.getParameter("mZ"); - mTPmin_ = ps.getParameter("mTPmin"); - mTPmax_ = ps.getParameter("mTPmax"); - BarrelEtaMax_ = ps.getParameter("BarrelEtaMax"); - EndCapEtaMin_ = ps.getParameter("EndCapEtaMin"); - EndCapEtaMax_ = ps.getParameter("EndCapEtaMax"); - - hyb_fCorrPSet_ = ps.getParameter("hyb_fCorrPSet"); - m5x5_fCorrPSet_ = ps.getParameter("m5x5_fCorrPSet"); - - double CElecPtMin = ps.getParameter("CElecPtMin"); - double CEB_siEiE = ps.getParameter("CEB_sigmaIEtaIEta"); - double CEB_dPhiIn = ps.getParameter("CEB_deltaPhiIn"); - double CEB_dEtaIn = ps.getParameter("CEB_deltaEtaIn"); - double CEB_EcalIso = ps.getParameter("CEB_EcalIso"); - double CEB_HcalIso = ps.getParameter("CEB_HcalIso"); - double CEB_TrckIso = ps.getParameter("CEB_TrckIso"); - double CEE_siEiE = ps.getParameter("CEE_sigmaIEtaIEta"); - double CEE_dPhiIn = ps.getParameter("CEE_deltaPhiIn"); - double CEE_dEtaIn = ps.getParameter("CEE_deltaEtaIn"); - double CEE_EcalIso = ps.getParameter("CEE_EcalIso"); - double CEE_HcalIso = ps.getParameter("CEE_HcalIso"); - double CEE_TrckIso = ps.getParameter("CEE_TrckIso"); - - CutVector_.resize(13); - CutVector_[EtCut_] = CElecPtMin; - CutVector_[EB_sIhIh_] = CEB_siEiE; - CutVector_[EB_dPhiIn_] = CEB_dPhiIn; - CutVector_[EB_dEtaIn_] = CEB_dEtaIn; - CutVector_[EB_TrckIso_] = CEB_TrckIso; - CutVector_[EB_EcalIso_] = CEB_EcalIso; - CutVector_[EB_HcalIso_] = CEB_HcalIso; - CutVector_[EE_sIhIh_] = CEE_siEiE; - CutVector_[EE_dPhiIn_] = CEE_dPhiIn; - CutVector_[EE_dEtaIn_] = CEE_dEtaIn; - CutVector_[EE_TrckIso_] = CEE_TrckIso; - CutVector_[EE_EcalIso_] = CEE_EcalIso; - CutVector_[EE_HcalIso_] = CEE_HcalIso; - - for (std::vector::const_iterator it = CutVector_.begin(); it != CutVector_.end(); ++it) { - edm::LogDebug_("", "", 101) << "CutVector_ = " << *it; - } -} - -ErsatzMEt::~ErsatzMEt() {} - -// ------------ method called once each job just before starting event loop ------------ -void ErsatzMEt::beginJob() { - edm::Service fs; - - t_ = fs->make("ErsatzMEt", "Data on ErsatzMEt"); - - edm::LogDebug_("", "", 75) << "Creating Ersatz MEt branches."; - - t_->Branch("nTags", &nTags_, "nTags/I"); - t_->Branch("nProbes", &nProbes_, "nProbes/I"); - - t_->Branch("ErsatzV1CaloMEt", ErsatzV1CaloMEt_, "ErsatzV1CaloMEt[4]/D"); - t_->Branch("ErsatzV1CaloMt", ErsatzV1CaloMt_, "ErsatzV1CaloMt[4]/D"); - t_->Branch("ErsatzV1CaloMEtPhi", ErsatzV1CaloMEtPhi_, "ErsatzV1CaloMEtPhi[4]/D"); - t_->Branch("ErsatzV2CaloMEt", ErsatzV2CaloMEt_, "ErsatzV2CaloMEt[4]/D"); - t_->Branch("ErsatzV2CaloMEtPhi", ErsatzV2CaloMEtPhi_, "ErsatzV2CaloMEtPhi[4]/D"); - t_->Branch("ErsatzV2CaloMt", ErsatzV2CaloMt_, "ErsatzV2CaloMt[4]/D"); - t_->Branch("ErsatzV3CaloMEt", ErsatzV3CaloMEt_, "ErsatzV3CaloMEt[4]/D"); - t_->Branch("ErsatzV3CaloMEtPhi", ErsatzV3CaloMEtPhi_, "ErsatzV3CaloMEtPhi[4]/D"); - t_->Branch("ErsatzV3CaloMt", ErsatzV3CaloMt_, "ErsatzV3CaloMt[4]/D"); - t_->Branch("ErsatzV4CaloMEt", ErsatzV4CaloMEt_, "ErsatzV4CaloMEt[4]/D"); - t_->Branch("ErsatzV4CaloMEtPhi", ErsatzV4CaloMEtPhi_, "ErsatzV4CaloMEtPhi[4]/D"); - t_->Branch("ErsatzV4CaloMt", ErsatzV4CaloMt_, "ErsatzV4CaloMt[4]/D"); - t_->Branch("ErsatzV1T1MEt", ErsatzV1T1MEt_, "ErsatzV1T1MEt[4]/D"); - t_->Branch("ErsatzV1T1Mt", ErsatzV1T1Mt_, "ErsatzV1T1Mt[4]/D"); - t_->Branch("ErsatzV1T1MEtPhi", ErsatzV1T1MEtPhi_, "ErsatzV1T1MEtPhi[4]/D"); - t_->Branch("ErsatzV1PfMEt", ErsatzV1PfMEt_, "ErsatzV1PfMEt[4]/D"); - t_->Branch("ErsatzV1PfMt", ErsatzV1PfMt_, "ErsatzV1PfMt[4]/D"); - t_->Branch("ErsatzV1PfMEtPhi", ErsatzV1TcMEtPhi_, "ErsatzV1PfMEtPhi[4]/D"); - t_->Branch("ErsatzV1TcMEt", ErsatzV1TcMEt_, "ErsatzV1TcMEt[4]/D"); - t_->Branch("ErsatzV1TcMt", ErsatzV1TcMt_, "ErsatzV1TcMt[4]/D"); - t_->Branch("ErsatzV1TcMEtPhi", ErsatzV1TcMEtPhi_, "ErsatzV1TcMEtPhi[4]/D"); - - t_->Branch("CaloMEt", &CaloMEt_, "CaloMEt/D"); - t_->Branch("CaloMEtphi", &CaloMEtphi_, "CaloMEtphi/D"); - t_->Branch("T1MEt", &T1MEt_, "T1MEt/D"); - t_->Branch("T1MEtphi", &T1MEtphi_, "T1MEtphi/D"); - t_->Branch("PfMEt", &PfMEt_, "PfMEt/D"); - t_->Branch("PfMEtphi", &PfMEtphi_, "PfMEtphi/D"); - t_->Branch("TcMEt", &TcMEt_, "TcMEt/D"); - t_->Branch("TcMEtphi", &TcMEtphi_, "TcMEtphi/D"); - - edm::LogDebug_("", "", 91) << "Creating electron branches."; - t_->Branch("tag_q", tag_q_, "tag_q[4]/I"); - t_->Branch("tag_pt", tag_pt_, "tag_pt[4]/D"); - t_->Branch("tag_eta", tag_eta_, "tag_eta[4]/D"); - t_->Branch("tag_phi", tag_phi_, "tag_phi[4]/D"); - t_->Branch("tag_sIhIh", tag_sIhIh_, "tag_sIhIh[4]/D"); - t_->Branch("tag_dPhiIn", tag_dPhiIn_, "tag_dPhiIn[4]/D"); - t_->Branch("tag_dEtaIn", tag_dEtaIn_, "tag_dEtaIn[4]/D"); - t_->Branch("tag_trckIso", tag_trckIso_, "tag_trckIso[4]/D"); - t_->Branch("tag_ecalIso", tag_ecalIso_, "tag_ecalIso[4]/D"); - t_->Branch("tag_hcalIso", tag_hcalIso_, "tag_hcalIso[4]/D"); - t_->Branch("tag_e2x5Max", tag_e2x5Max_, "tag_e2x5Max[4]/D"); - t_->Branch("tag_e1x5Max", tag_e1x5Max_, "tag_e1x5Max[4]/D"); - t_->Branch("tag_e5x5", tag_e5x5_, "tag_e5x5[4]/D"); - t_->Branch("tag_hoe", tag_hoe_, "tag_hoe[4]/D"); - t_->Branch("tag_eop", tag_eop_, "tag_eop[4]/D"); - t_->Branch("tag_pin", tag_pin_, "tag_pin[4]/D"); - t_->Branch("tag_pout", tag_pout_, "tag_pout[4]/D"); - t_->Branch("tag_rescPt", tag_rescPt_, "tag_rescPt[4]/D"); - t_->Branch("tag_rescEta", tag_rescEta_, "tag_rescEta[4]/D"); - t_->Branch("tag_rescPhi", tag_rescPhi_, "tag_rescPhi[4]/D"); - - edm::LogDebug_("", "", 103) << "Creating ersatz neutrino branches."; - t_->Branch("probe_q", probe_q_, "probe_q[4]/I"); - t_->Branch("probe_pt", probe_pt_, "probe_pt[4]/D"); - t_->Branch("probe_eta", probe_eta_, "probe_eta[4]/D"); - t_->Branch("probe_phi", probe_phi_, "probe_phi[4]/D"); - t_->Branch("probe_sIhIh", probe_sIhIh_, "probe_sIhIh[4]/D"); - t_->Branch("probe_dPhiIn", probe_dPhiIn_, "probe_dPhiIn[4]/D"); - t_->Branch("probe_dEtaIn", probe_dEtaIn_, "probe_dEtaIn[4]/D"); - t_->Branch("probe_trckIso", probe_trckIso_, "probe_trckIso[4]/D"); - t_->Branch("probe_ecalIso", probe_ecalIso_, "probe_ecalIso[4]/D"); - t_->Branch("probe_hcalIso", probe_hcalIso_, "probe_hcalIso[4]/D"); - t_->Branch("probe_e2x5Max", probe_e2x5Max_, "probe_e2x5Max[4]/D"); - t_->Branch("probe_e1x5Max", probe_e1x5Max_, "probe_e1x5Max[4]/D"); - t_->Branch("probe_e5x5", probe_e5x5_, "probe_e5x5[4]/D"); - t_->Branch("probe_hoe", probe_hoe_, "probe_hoe[4]/D"); - t_->Branch("probe_eop", probe_eop_, "probe_eop[4]/D"); - t_->Branch("probe_pin", probe_pin_, "probe_pin[4]/D"); - t_->Branch("probe_pout", probe_pout_, "probe_pout[4]/D"); - t_->Branch("probe_rescPt", probe_rescPt_, "probe_rescPt[4]/D"); - t_->Branch("probe_rescEta", probe_rescEta_, "probe_rescEta[4]/D"); - t_->Branch("probe_rescPhi", probe_rescPhi_, "probe_rescPhi[4]/D"); - - t_->Branch("Z_m", Z_m_, "Z_m[4]/D"); - t_->Branch("Z_pt", Z_pt_, "Z_pt[4]/D"); - t_->Branch("Z_eta", Z_eta_, "Z_eta[4]/D"); - t_->Branch("Z_y", Z_y_, "Z_y[4]/D"); - t_->Branch("Z_phi", Z_phi_, "Z_phi[4]/D"); - t_->Branch("Z_rescM", Z_rescM_, "Z_rescM[4]/D"); - t_->Branch("Z_rescPt", Z_rescPt_, "Z_rescPt[4]/D"); - t_->Branch("Z_rescEta", Z_rescEta_, "Z_rescEta[4]/D"); - t_->Branch("Z_rescY", Z_rescY_, "Z_rescY[4]/D"); - t_->Branch("Z_rescPhi", Z_rescPhi_, "Z_rescPhi[4]/D"); - t_->Branch("Z_probe_dPhi", Z_probe_dPhi_, "Z_probe_dPhi[4]/D"); - - t_->Branch("probe_sc_pt", probe_sc_pt_, "probe_sc_pt[4]/D"); - t_->Branch("probe_sc_eta", probe_sc_eta_, "probe_sc_eta[4]/D"); - t_->Branch("probe_sc_phi", probe_sc_phi_, "probe_sc_phi[4]/D"); - t_->Branch("probe_sc_E", probe_sc_E_, "probe_sc_E[4]/D"); - t_->Branch("probe_sc_rawE", probe_sc_rawE_, "probe_sc_rawE[4]/D"); - t_->Branch("probe_sc_nClus", probe_sc_nClus_, "probe_sc_nClus[4]/D"); - t_->Branch("probe_scV2_E", probe_scV2_E_, "probe_scV2_E[4]/D"); - t_->Branch("probe_scV3_E", probe_scV3_E_, "probe_scV3_E[4]/D"); - t_->Branch("probe_scV4_E", probe_scV4_E_, "probe_scV4_E[4]/D"); - t_->Branch("probe_d_MCE_SCE", probe_d_MCE_SCE_, "probe_d_MCE_SCE[4]/D"); - - t_->Branch("ErsatzV1_Mesc", ErsatzV1_Mesc_, "ErsatzV1_Mesc[4]/D"); - t_->Branch("ErsatzV1_rescMesc", ErsatzV1_rescMesc_, "ErsatzV1_rescMesc[4]/D"); - - t_->Branch("McElec_nFinal", &McElec_nFinal_, "McElec_nFinal/I"); - - if (Zevent_) { - t_->Branch("McZ_m", &McZ_m_, "McZ_m/D"); - t_->Branch("McZ_rescM", &McZ_rescM_, "McZ_rescM/D"); - t_->Branch("McZ_Pt", &McZ_pt_, "McZ_Pt/D"); - t_->Branch("McZ_y", &McZ_y_, "McZ_y/D"); - t_->Branch("McZ_Eta", &McZ_eta_, "McZ_Eta/D"); - t_->Branch("McZ_Phi", &McZ_phi_, "McZ_Phi/D"); - t_->Branch("McZ_rescPt", &McZ_rescPt_, "McZ_Pt/D"); - t_->Branch("McZ_rescY", &McZ_rescY_, "McZ_rescY/D"); - t_->Branch("McZ_rescEta", &McZ_rescEta_, "McZ_Eta/D"); - t_->Branch("McZ_rescPhi", &McZ_rescPhi_, "McZ_Phi/D"); - t_->Branch("McElec_nZmum", &McElec_nZmum_, "McElec_nZmum/I"); - t_->Branch("McElec_eta", &McElec_eta_, "McElec_eta[4]/D"); - t_->Branch("McElec_pt", &McElec_pt_, "McElec_pt[4]/D"); - t_->Branch("McElec_phi", &McElec_phi_, "McElec_phi[4]/D"); - t_->Branch("McElec_rescEta", &McElec_rescEta_, "McElec_rescEta[4]/D"); - t_->Branch("McElec_rescPhi", &McElec_rescPhi_, "McElec_rescPhi[4]/D"); - t_->Branch("McElec_rescPt", &McElec_rescPt_, "McElec_rescPt[4]/D"); - t_->Branch("McProbe_eta", &McProbe_eta_, "McProbe_eta[4]/D"); - t_->Branch("McProbe_pt", &McProbe_pt_, "McProbe_pt[4]/D"); - t_->Branch("McProbe_phi", &McProbe_phi_, "McProbe_phi[4]/D"); - t_->Branch("McProbe_rescEta", &McProbe_rescEta_, "McProbe_rescEta[4]/D"); - t_->Branch("McProbe_rescPt", &McProbe_rescPt_, "McProbe_rescPt[4]/D"); - t_->Branch("McProbe_rescPhi", &McProbe_rescPhi_, "McProbe_rescPhi[4]/D"); - t_->Branch("McElecProbe_dPhi", &McElecProbe_dPhi_, "McElecProbe_dPhi/D"); - t_->Branch("McElecProbe_dEta", &McElecProbe_dEta_, "McElecProbe_dEta/D"); - t_->Branch("McElecProbe_dR", &McElecProbe_dR_, "McElecProbe_dR/D"); - } -} - -void ErsatzMEt::analyze(const edm::Event& evt, const edm::EventSetup& es) { - es.get().get(geoHandle_); - es.get().get(pTopology_); - - edm::LogDebug_("", "", 151) << "Initialising variables."; - nTags_ = -99; - nProbes_ = -99; - CaloMEt_ = -99.; - CaloMEtphi_ = -99.; - T1MEt_ = -99.; - T1MEtphi_ = -99.; - PfMEt_ = -99.; - PfMEtphi_ = -99.; - TcMEt_ = -99.; - TcMEtphi_ = -99.; - if (Zevent_) { - McZ_m_ = -99.; - McZ_pt_ = -99.; - McZ_y_ = -99.; - McZ_eta_ = -99.; - McZ_phi_ = -99.; - McZ_rescM_ = -99.; - McZ_rescPt_ = -99.; - McZ_rescY_ = -99.; - McZ_rescEta_ = -99.; - McZ_rescPhi_ = -99.; - McElec_nZmum_ = -99; - McElec_nFinal_ = -99; - } - - for (int i = 0; i < nEntries_arr_; ++i) { - tag_q_[i] = -99; - tag_pt_[i] = -99.; - tag_eta_[i] = -99.; - tag_phi_[i] = -99.; - tag_rescPt_[i] = -99.; - tag_rescEta_[i] = -99.; - tag_rescPhi_[i] = -99.; - tag_trckIso_[i] = -99.; - tag_ecalIso_[i] = -99.; - tag_hcalIso_[i] = -99.; - tag_sIhIh_[i] = -99.; - tag_dPhiIn_[i] = -99.; - tag_dEtaIn_[i] = -99.; - tag_e5x5_[i] = -99.; - tag_e2x5Max_[i] = -99.; - tag_e1x5Max_[i] = -99.; - tag_hoe_[i] = -99.; - tag_eop_[i] = -99.; - tag_pin_[i] = -99.; - tag_pout_[i] = -99.; - - probe_q_[i] = -99; - probe_pt_[i] = -99.; - probe_eta_[i] = -99.; - probe_phi_[i] = -99.; - probe_rescPt_[i] = -99.; - probe_rescEta_[i] = -99.; - probe_rescPhi_[i] = -99.; - probe_trckIso_[i] = -99.; - probe_ecalIso_[i] = -99.; - probe_hcalIso_[i] = -99.; - probe_sIhIh_[i] = -99.; - probe_dPhiIn_[i] = -99.; - probe_dEtaIn_[i] = -99.; - probe_e5x5_[i] = -99.; - probe_e2x5Max_[i] = -99.; - probe_e1x5Max_[i] = -99.; - probe_hoe_[i] = -99.; - probe_eop_[i] = -99.; - probe_pin_[i] = -99.; - probe_pout_[i] = -99.; - - Z_pt_[i] = -99.; - Z_y_[i] = -99.; - Z_eta_[i] = -99.; - Z_phi_[i] = -99.; - Z_m_[i] = -99.; - Z_rescPt_[i] = -99.; - Z_rescY_[i] = -99.; - Z_rescEta_[i] = -99.; - Z_rescPhi_[i] = -99.; - Z_rescM_[i] = -99.; - Z_probe_dPhi_[i] = -99.; - - ErsatzV1_Mesc_[i] = -99.; - ErsatzV1_rescMesc_[i] = -99.; - ErsatzV2_Mesc_[i] = -99.; - ErsatzV2_rescMesc_[i] = -99.; - ErsatzV3_Mesc_[i] = -99.; - ErsatzV3_rescMesc_[i] = -99.; - ErsatzV4_Mesc_[i] = -99.; - ErsatzV4_rescMesc_[i] = -99.; - ErsatzV1CaloMEt_[i] = -99.; - ErsatzV1CaloMt_[i] = -99.; - ErsatzV1CaloMEtPhi_[i] = -99.; - ErsatzV2CaloMEt_[i] = -99.; - ErsatzV2CaloMt_[i] = -99.; - ErsatzV2CaloMEtPhi_[i] = -99.; - ErsatzV3CaloMEt_[i] = -99.; - ErsatzV3CaloMt_[i] = -99.; - ErsatzV3CaloMEtPhi_[i] = -99.; - ErsatzV4CaloMEt_[i] = -99.; - ErsatzV4CaloMt_[i] = -99.; - ErsatzV4CaloMEtPhi_[i] = -99.; - ErsatzV1T1MEt_[i] = -99.; - ErsatzV1T1Mt_[i] = -99.; - ErsatzV1T1MEtPhi_[i] = -99.; - ErsatzV1PfMEt_[i] = -99.; - ErsatzV1PfMt_[i] = -99.; - ErsatzV1PfMEtPhi_[i] = -99.; - ErsatzV1TcMEt_[i] = -99.; - ErsatzV1TcMt_[i] = -99.; - ErsatzV1TcMEtPhi_[i] = -99.; - - probe_sc_pt_[i] = -99.; - probe_sc_eta_[i] = -99.; - probe_sc_phi_[i] = -99.; - probe_sc_E_[i] = -99.; - probe_sc_rawE_[i] = -99.; - probe_scV2_E_[i] = -99.; - probe_scV3_E_[i] = -99.; - probe_scV4_E_[i] = -99.; - - if (Zevent_) { - McElec_pt_[i] = -99.; - McElec_eta_[i] = -99.; - McElec_phi_[i] = -99.; - McElec_rescPt_[i] = -99.; - McElec_rescEta_[i] = -99.; - McElec_rescPhi_[i] = -99.; - McProbe_pt_[i] = -99.; - McProbe_eta_[i] = -99.; - McProbe_phi_[i] = -99.; - McProbe_rescPt_[i] = -99.; - McProbe_rescEta_[i] = -99.; - McProbe_rescPhi_[i] = -99.; - McElecProbe_dPhi_[i] = -99.; - McElecProbe_dEta_[i] = -99.; - McElecProbe_dR_[i] = -99.; - } - - edm::LogDebug_("", "", 180) << "Initialisation of array index " << i << " completed."; - } - //Get Collections - edm::Handle pGenPart; - evt.getByToken(MCTruthCollection_, pGenPart); - edm::Handle pElectrons; - evt.getByToken(ElectronCollection_, pElectrons); - edm::Handle pHybrid; - evt.getByToken(HybridScCollection_, pHybrid); - edm::Handle pM5x5; - evt.getByToken(M5x5ScCollection_, pM5x5); - edm::Handle pCaloMEt; - evt.getByToken(CaloMEtCollection_, pCaloMEt); - edm::Handle pT1MEt; - // evt.getByToken(T1MEtCollection_, pT1MEt); - edm::Handle pPfMEt; - evt.getByToken(PfMEtCollection_, pPfMEt); - edm::Handle pTcMEt; - evt.getByToken(TcMEtCollection_, pTcMEt); - edm::Handle pGenMEt; - evt.getByToken(GenMEtCollection_, pGenMEt); - edm::Handle pTriggerResults; - evt.getByToken(TriggerResults_, pTriggerResults); - edm::Handle pHLT; - evt.getByToken(TriggerEvent_, pHLT); - - std::vector McElecs, McElecsFinalState; - std::vector McElecsResc; - if (Zevent_) { - edm::LogDebug_("", "", 289) << "Analysing MC properties."; - const reco::GenParticleCollection* McCand = pGenPart.product(); - math::XYZTLorentzVector Zboson, RescZboson, McElec1, McElec2; - for (reco::GenParticleCollection::const_iterator McP = McCand->begin(); McP != McCand->end(); ++McP) { - const reco::Candidate* mum = McP->mother(); - if (std::abs(McP->pdgId()) == 11 && abs(mum->pdgId()) == 23) { - McElecs.push_back(McP->p4()); - if (std::abs(mum->pdgId()) == 23) - Zboson = mum->p4(); - - std::cout << "Found electron, ID = " << McP->pdgId() << "\t status = " << McP->status() << std::endl; - if (McP->status() != 1) { - const reco::Candidate* McPD = McP->daughter(0); - McPD = McPD->mother(); - while (McPD->status() != 1) { - int n = McPD->numberOfDaughters(); - std::cout << McPD->pdgId() << " : status = " << McPD->status() << "\tNumber of Daughters = " << n - << std::endl; - for (int j = 0; j < n; ++j) { - const reco::Candidate* d = McPD->daughter(j); - std::cout << "Daughter " << j << "\t id = " << d->pdgId() << std::endl; - if (std::abs(d->pdgId()) == 11) { - McPD = d; - break; - } - } - } - std::cout << McPD->pdgId() << " : status = " << McPD->status() << "\tAdding to vector!" << std::endl; - McElecsFinalState.push_back(McPD->p4()); - } else - McElecsFinalState.push_back(McP->p4()); - } - } - McZ_m_ = Zboson.M(); - McZ_pt_ = Zboson.Pt(); - McZ_phi_ = Zboson.Phi(); - McZ_eta_ = Zboson.Eta(); - McZ_y_ = Zboson.Rapidity(); - McElec_nZmum_ = McElecs.size(); - McElec_nFinal_ = McElecsFinalState.size(); - edm::LogDebug_("", "", 309) << "MC electrons with Z mother = " << McElec_nZmum_ - << "\tFinal state MC electrons = " << McElec_nFinal_; - - McElecsResc.resize(2); - // RescZboson.SetCoordinates(Zboson.Px(), Zboson.Py(), Zboson.Pz(), sqrt(Zboson.P2()+(mW_*mW_*Zboson.M2())/(mZ_*mZ_))); - RescZboson.SetCoordinates( - Zboson.Px() * mW_ / mZ_, Zboson.Py() * mW_ / mZ_, Zboson.Pz() * mW_ / mZ_, Zboson.E() * mW_ / mZ_); - McZ_rescM_ = RescZboson.M(); - McZ_rescPt_ = RescZboson.Pt(); - McZ_rescEta_ = RescZboson.Eta(); - McZ_rescPhi_ = RescZboson.Phi(); - McZ_rescY_ = RescZboson.Rapidity(); - ROOT::Math::Boost CoMBoost(Zboson.BoostToCM()); - - math::XYZTLorentzVector RescMcElec0 = CoMBoost(McElecsFinalState[0]); - math::XYZTLorentzVector RescMcElec1 = CoMBoost(McElecsFinalState[1]); - RescMcElec0 *= mW_ / mZ_; - RescMcElec1 *= mW_ / mZ_; - - double E_W = RescZboson.E(); - ROOT::Math::Boost BackToLab(RescZboson.Px() / E_W, RescZboson.Py() / E_W, RescZboson.Pz() / E_W); - - RescMcElec0 = BackToLab(RescMcElec0); - // RndmMcElec_Rescaled_pt_ = RescMcElec0.Pt(); - // RndmMcElec_Rescaled_eta_ = RescMcElec0.Eta(); - // RndmMcElec_Rescaled_phi_ = RescMcElec0.Phi(); - - RescMcElec1 = BackToLab(RescMcElec1); - // OthrMcElec_Rescaled_pt_ = RescMcElec1.Pt(); - // OthrMcElec_Rescaled_eta_ = RescMcElec1.Eta(); - // OthrMcElec_Rescaled_phi_ = RescMcElec1.Phi(); - McElecsResc[0] = RescMcElec0; - McElecsResc[1] = RescMcElec1; - math::XYZTLorentzVector sum = RescMcElec1 + RescMcElec0; - edm::LogDebug_("", "", 307) << "McElecsResc[0] + McElecsResc[1] = (" << sum.Px() << ", " << sum.Py() << ", " - << sum.Pz() << ", " << sum.E() << ")"; - } - - const edm::TriggerResults* HltRes = pTriggerResults.product(); - const edm::TriggerNames& triggerNames = evt.triggerNames(*HltRes); - if (HLTPathCheck_) { - for (unsigned int itrig = 0; itrig < HltRes->size(); ++itrig) { - const std::string& nom = triggerNames.triggerName(itrig); - edm::LogInfo("") << itrig << " : Name = " << nom << "\t Accepted = " << HltRes->accept(itrig); - } - } - if (HltRes->accept(34) == 0) - edm::LogError("") << "Event did not pass " << triggerNames.triggerName(34) << "!"; - if (HltRes->accept(34) != 0) { - std::vector UniqueElectrons; - UniqueElectrons = uniqueElectronFinder(pElectrons); - edm::LogDebug_("", "ErsatzMEt", 192) << "Unique electron size = " << UniqueElectrons.size(); - std::vector SelectedElectrons; - const unsigned int fId = pHLT->filterIndex(TriggerPath_); - std::cout << "Filter Id = " << fId << std::endl; - SelectedElectrons = electronSelector(UniqueElectrons, pHLT, fId, CutVector_); - nTags_ = SelectedElectrons.size(); - edm::LogDebug_("", "ErsatzMEt", 197) << "Selected electron size = " << nTags_; - - iComb_ = 0; - if (Zevent_) { - //Match MC electrons to the selected electrons and store some of their properties in the tree. - //The properties of the other MC electron (i.e. that not selected) are also stored. - for (std::vector::const_iterator elec = SelectedElectrons.begin(); - elec != SelectedElectrons.end(); - ++elec) { - for (int m = 0; m < 2; ++m) { - double dRLimit = 99.; - double dR = reco::deltaR(McElecs[m], *(*elec)); - if (dR < dRLimit) { - dRLimit = dR; - McElec_pt_[iComb_] = McElecs[m].pt(); - McElec_eta_[iComb_] = McElecs[m].eta(); - McElec_rescPt_[iComb_] = McElecsResc[m].pt(); - McElec_rescEta_[iComb_] = McElecsResc[m].eta(); - } - } - } - } - - std::map TagProbePairs; - TagProbePairs = probeFinder(SelectedElectrons, pElectrons); - nProbes_ = TagProbePairs.size(); - edm::LogDebug_("", "ErsatzMEt", 209) << "Number of tag-probe pairs = " << TagProbePairs.size(); - - if (!TagProbePairs.empty()) { - const reco::CaloMETCollection* caloMEtCollection = pCaloMEt.product(); - const reco::MET calomet = *(caloMEtCollection->begin()); - CaloMEt_ = calomet.pt(); - CaloMEtphi_ = calomet.phi(); - - //const reco::METCollection* t1MEtCollection = pT1MEt.product(); - //const reco::MET t1met = *(t1MEtCollection->begin()); - //T1MEt_ = t1met.pt(); - //T1MEtphi_ = t1met.phi(); - - const reco::PFMETCollection* pfMEtCollection = pPfMEt.product(); - const reco::MET pfmet = *(pfMEtCollection->begin()); - PfMEt_ = pfmet.pt(); - PfMEtphi_ = pfmet.phi(); - - const reco::METCollection* tcMEtCollection = pTcMEt.product(); - const reco::MET tcmet = *(tcMEtCollection->begin()); - TcMEt_ = tcmet.pt(); - TcMEtphi_ = tcmet.phi(); - - reco::MET ersatzMEt; - - for (std::map::const_iterator it = TagProbePairs.begin(); - it != TagProbePairs.end(); - ++it) { - edm::LogDebug_("", "DelendumLoop", 293) << "iComb_ = " << iComb_; - tag_q_[iComb_] = it->first->charge(); - edm::LogDebug_("", "", 360) << "tag charge = " << tag_q_[iComb_]; - tag_pt_[iComb_] = it->first->pt(); - tag_eta_[iComb_] = it->first->eta(); - tag_phi_[iComb_] = it->first->phi(); - edm::LogDebug_("", "ErsatzMEt", 364) - << "tag pt = " << tag_pt_[iComb_] << "\teta = " << tag_eta_[iComb_] << "\tphi = " << tag_phi_[iComb_]; - tag_trckIso_[iComb_] = it->first->isolationVariables03().tkSumPt; - tag_ecalIso_[iComb_] = it->first->isolationVariables04().ecalRecHitSumEt; - tag_hcalIso_[iComb_] = it->first->isolationVariables04().hcalDepth1TowerSumEt + - it->first->isolationVariables04().hcalDepth2TowerSumEt; - edm::LogDebug_("", "ErsatzMEt", 370) - << "tag trackiso = " << tag_trckIso_[iComb_] << "\tecaliso = " << tag_ecalIso_[iComb_] - << "\thcaliso = " << tag_hcalIso_[iComb_]; - tag_sIhIh_[iComb_] = it->first->scSigmaIEtaIEta(); - tag_dPhiIn_[iComb_] = it->first->deltaPhiSuperClusterTrackAtVtx(); - tag_dEtaIn_[iComb_] = it->first->deltaEtaSuperClusterTrackAtVtx(); - edm::LogDebug_("", "ErsatzMEt", 245) - << "tag sIhIh = " << tag_sIhIh_[iComb_] << "\tdPhiIn = " << tag_dPhiIn_[iComb_] - << "\tdEtaIn = " << tag_dEtaIn_[iComb_]; - tag_e5x5_[iComb_] = it->first->scE5x5(); - tag_e2x5Max_[iComb_] = it->first->scE2x5Max(); - tag_e2x5Max_[iComb_] = it->first->scE1x5(); - edm::LogDebug_("", "ErsatzMEt", 245) - << "tag e5x5 = " << tag_e5x5_[iComb_] << "\te2x5Max = " << tag_e2x5Max_[iComb_] - << "\te1x5Max = " << tag_e1x5Max_[iComb_]; - tag_hoe_[iComb_] = it->first->hadronicOverEm(); - tag_eop_[iComb_] = it->first->eSuperClusterOverP(); - tag_pin_[iComb_] = it->first->trackMomentumAtVtx().R(); - tag_pout_[iComb_] = it->first->trackMomentumOut().R(); - edm::LogDebug_("", "ErsatzMEt", 245) << "tag hoe = " << tag_hoe_[iComb_] << "\tpoe = " << tag_eop_[iComb_] - << "\tpin = " << tag_pin_[iComb_] << "\tpout = " << tag_pout_[iComb_]; - probe_q_[iComb_] = it->first->charge(); - edm::LogDebug_("", "", 360) << "probe charge = " << probe_q_[iComb_]; - probe_pt_[iComb_] = it->second->pt(); - probe_eta_[iComb_] = it->second->eta(); - probe_phi_[iComb_] = it->second->phi(); - edm::LogDebug_("", "ErsatzMEt", 245) << "probe pt = " << probe_pt_[iComb_] << "\teta = " << probe_eta_[iComb_] - << "\tphi = " << probe_phi_[iComb_]; - probe_trckIso_[iComb_] = it->second->isolationVariables03().tkSumPt; - probe_ecalIso_[iComb_] = it->second->isolationVariables04().ecalRecHitSumEt; - probe_hcalIso_[iComb_] = it->second->isolationVariables04().hcalDepth1TowerSumEt + - it->second->isolationVariables04().hcalDepth2TowerSumEt; - edm::LogDebug_("", "ErsatzMEt", 245) - << "probe trackiso = " << probe_trckIso_[iComb_] << "\tecaliso = " << probe_ecalIso_[iComb_] - << "\thcaliso = " << probe_phi_[iComb_]; - probe_sIhIh_[iComb_] = it->second->scSigmaIEtaIEta(); - probe_dPhiIn_[iComb_] = it->second->deltaPhiSuperClusterTrackAtVtx(); - probe_dEtaIn_[iComb_] = it->second->deltaEtaSuperClusterTrackAtVtx(); - edm::LogDebug_("", "ErsatzMEt", 245) - << "probe sIhIh = " << probe_sIhIh_[iComb_] << "\tdPhiIn = " << probe_dPhiIn_[iComb_] - << "\tdEtaIn = " << probe_dEtaIn_[iComb_]; - probe_e5x5_[iComb_] = it->second->scE5x5(); - probe_e2x5Max_[iComb_] = it->second->scE2x5Max(); - probe_e2x5Max_[iComb_] = it->second->scE1x5(); - edm::LogDebug_("", "ErsatzMEt", 245) - << "probe e5x5 = " << probe_e5x5_[iComb_] << "\te2x5Max = " << probe_e2x5Max_[iComb_] - << "\te1x5Max = " << probe_e1x5Max_[iComb_]; - probe_hoe_[iComb_] = it->second->hadronicOverEm(); - probe_eop_[iComb_] = it->second->eSuperClusterOverP(); - probe_pin_[iComb_] = it->second->trackMomentumAtVtx().R(); - probe_pout_[iComb_] = it->second->trackMomentumOut().R(); - edm::LogDebug_("", "ErsatzMEt", 245) << "probe hoe = " << probe_hoe_[iComb_] << "\tpoe = " << probe_eop_[iComb_] - << "\tpin = " << probe_pin_[iComb_] << "\tpout = " << probe_pout_[iComb_]; - - double dRLimit = 0.2; - for (unsigned int mcEId = 0; mcEId < McElecs.size(); ++mcEId) { - // double dR = reco::deltaR((*(*mcEl)), probeVec); - double dR = reco::deltaR(McElecs[mcEId], it->second->p4()); - if (dR < dRLimit) { - dRLimit = dR; - McProbe_pt_[iComb_] = McElecs[mcEId].pt(); - McProbe_eta_[iComb_] = McElecs[mcEId].eta(); - McProbe_phi_[iComb_] = McElecs[mcEId].phi(); - McProbe_rescPt_[iComb_] = McElecsResc[mcEId].pt(); - McProbe_rescEta_[iComb_] = McElecsResc[mcEId].eta(); - McProbe_rescPhi_[iComb_] = McElecsResc[mcEId].phi(); - probe_d_MCE_SCE_[iComb_] = McElecs[mcEId].energy() - it->second->superCluster()->rawEnergy(); - McElecProbe_dPhi_[iComb_] = reco::deltaPhi(McElecs[mcEId].phi(), McElecs[(mcEId + 1) % 2].phi()); - McElecProbe_dEta_[iComb_] = fabs(McElecs[mcEId].eta() - McElecs[(mcEId + 1) % 2].eta()); - McElecProbe_dR_[iComb_] = reco::deltaR(McElecs[mcEId], McElecs[(mcEId + 1) % 2]); - } - } - - // Uncorrected supercluster V1 - reco::SuperCluster scV1 = *(it->second->superCluster()); - math::XYZTLorentzVector probe_scV1_detVec = DetectorVector(scV1); - probe_sc_pt_[iComb_] = probe_scV1_detVec.pt(); - probe_sc_eta_[iComb_] = scV1.eta(); - probe_sc_phi_[iComb_] = scV1.phi(); - probe_sc_nClus_[iComb_] = scV1.clustersSize(); - probe_sc_E_[iComb_] = scV1.energy(); - probe_sc_rawE_[iComb_] = scV1.rawEnergy(); - - ersatzMEt = ersatzFabrik(it->first, scV1, calomet, 1); - ErsatzV1CaloMEt_[iComb_] = ersatzMEt.pt(); - ErsatzV1CaloMEtPhi_[iComb_] = ersatzMEt.phi(); - //ersatzMEt = ersatzFabrik(it->first, it->second, t1met); - //ErsatzV1T1MEt_[iComb_] = ersatzMEt.pt(); - //ErsatzV1T1MEtPhi_[iComb_] = ersatzMEt.phi(); - ersatzMEt = ersatzFabrik(it->first, it->second, pfmet); - ErsatzV1PfMEt_[iComb_] = ersatzMEt.pt(); - ErsatzV1PfMEtPhi_[iComb_] = ersatzMEt.phi(); - ersatzMEt = ersatzFabrik(it->first, it->second, tcmet); - ErsatzV1TcMEt_[iComb_] = ersatzMEt.pt(); - ErsatzV1TcMEtPhi_[iComb_] = ersatzMEt.phi(); - - // fEta corrected supercluster V2 - reco::SuperCluster scV2; - if (fabs(probe_sc_eta_[iComb_]) < 1.479) { - scV2 = fEtaScCorr(scV1); - } else { - scV2 = scV1; - } - probe_scV2_E_[iComb_] = scV2.energy(); - ersatzMEt = ersatzFabrik(it->first, scV2, calomet, 2); - ErsatzV2CaloMEt_[iComb_] = ersatzMEt.pt(); - ErsatzV2CaloMEtPhi_[iComb_] = ersatzMEt.phi(); - - // fBrem corrected supercluster V3 - reco::SuperCluster scV3; - if (fabs(probe_sc_eta_[iComb_]) < 1.479) { - scV3 = fBremScCorr(scV1, hyb_fCorrPSet_); - } else { - scV3 = fBremScCorr(scV1, m5x5_fCorrPSet_); - } - probe_scV3_E_[iComb_] = scV3.energy(); - ersatzMEt = ersatzFabrik(it->first, scV3, calomet, 3); - ErsatzV3CaloMEt_[iComb_] = ersatzMEt.pt(); - ErsatzV3CaloMEtPhi_[iComb_] = ersatzMEt.phi(); - - // Fully corrected supercluster V4 - reco::SuperCluster scV4; - if (fabs(probe_sc_eta_[iComb_]) < 1.479) { - scV4 = fBremScCorr(scV1, hyb_fCorrPSet_); - } else { - scV4 = fBremScCorr(scV1, m5x5_fCorrPSet_); - } - probe_scV4_E_[iComb_] = scV4.energy(); - ersatzMEt = ersatzFabrik(it->first, scV4, calomet, 4); - ErsatzV4CaloMEt_[iComb_] = ersatzMEt.pt(); - ErsatzV4CaloMEtPhi_[iComb_] = ersatzMEt.phi(); - - ++iComb_; - } - t_->Fill(); - } - } -} - -std::map ErsatzMEt::probeFinder( - const std::vector& tags, const edm::Handle pElectrons) { - const reco::GsfElectronCollection* probeCands = pElectrons.product(); - std::map TagProbes; - for (std::vector::const_iterator tagelec = tags.begin(); tagelec != tags.end(); ++tagelec) { - reco::GsfElectronRef tag = *tagelec; - std::pair TagProbePair; - int nProbesPerTag = 0; - int index = 0; - for (reco::GsfElectronCollection::const_iterator probeelec = probeCands->begin(); probeelec != probeCands->end(); - ++probeelec) { - reco::GsfElectronRef probe(pElectrons, index); - double probeScEta = probe->superCluster()->eta(); - if (probe->superCluster() != tag->superCluster() && fabs(probeScEta) < 2.5) { - if (fabs(probeScEta) < 1.4442 || fabs(probeScEta) > 1.560) { - double invmass = ROOT::Math::VectorUtil::InvariantMass(tag->p4(), probe->p4()); - if (mTPmin_ <= invmass && invmass <= mTPmax_) { - TagProbePair = std::make_pair(tag, probe); - ++nProbesPerTag; - } - } - } - ++index; - } - //nGsfElectrons_ = index; - if (nProbesPerTag == 1) - TagProbes.insert(TagProbePair); - } - return TagProbes; -} - -reco::MET ErsatzMEt::ersatzFabrik(const reco::GsfElectronRef& elec, - const reco::SuperCluster& sc, - const reco::MET& met, - const int corr) { - const math::XYZPoint ZVertex( - elec->TrackPositionAtVtx().X(), elec->TrackPositionAtVtx().Y(), elec->TrackPositionAtVtx().Z()); - - math::XYZTLorentzVector nu, boost_nu, ele, boost_ele; - reco::SuperCluster elecSc = *(elec->superCluster()); - nu = PhysicsVectorRaw(met.vertex(), sc); - boost_nu = PhysicsVectorRaw(ZVertex, sc); - ele = PhysicsVectorRaw(met.vertex(), elecSc); - boost_ele = ele; - - //Should use reco vertex for best Z->ee measurement. - edm::LogDebug_("ersatzFabrikV1", "", 569) << "elec = (" << elec->p4().Px() << ", " << elec->p4().Py() << ", " - << elec->p4().Pz() << ", " << elec->p4().E() << ")"; - math::XYZTLorentzVector Zboson = boost_nu + elec->p4(); - edm::LogDebug_("ersatzFabrikV1", "", 569) << "Z pt = " << Zboson.Pt() << "Z boson mass = " << Zboson.M(); - edm::LogDebug_("ersatzFabrikV1", "", 570) << "Z boson in lab frame = (" << Zboson.Px() << ", " << Zboson.Py() << ", " - << Zboson.Pz() << ", " << Zboson.E() << ")"; - math::XYZTLorentzVector RescZboson( - Zboson.Px(), Zboson.Py(), Zboson.Pz(), sqrt(Zboson.P2() + (mW_ * mW_ * Zboson.M2()) / (mZ_ * mZ_))); - edm::LogDebug_("ersatzFabrikV1", "", 573) << "W boson in lab frame = (" << RescZboson.Px() << ", " << RescZboson.Py() - << ", " << RescZboson.Pz() << ", " << RescZboson.E() << ")"; - ROOT::Math::Boost BoostToZRestFrame(Zboson.BoostToCM()); - edm::LogDebug_("ersatzFabrikV1", "", 576) << "Electron in lab frame = (" << boost_ele.Px() << ", " << boost_ele.Py() - << ", " << boost_ele.Pz() << ", " << boost_ele.E() << ")"; - edm::LogDebug_("ersatzFabrikV1", "", 578) << "Ersatz Neutrino in lab frame = (" << boost_nu.Px() << ", " - << boost_nu.Py() << ", " << boost_nu.Pz() << ", " << boost_nu.E() << ")"; - boost_ele = BoostToZRestFrame(boost_ele); - boost_nu = BoostToZRestFrame(boost_nu); - edm::LogDebug_("ersatzFabrikV1", "", 582) << "Electron in Z rest frame = (" << boost_ele.Px() << ", " - << boost_ele.Py() << ", " << boost_ele.Pz() << ", " << boost_ele.E() << ")"; - edm::LogDebug_("ersatzFabrikV1", "", 584) << "Ersatz Neutrino in Z rest frame = (" << boost_nu.Px() << ", " - << boost_nu.Py() << ", " << boost_nu.Pz() << ", " << boost_nu.E() << ")"; - boost_ele *= mW_ / mZ_; - boost_nu *= mW_ / mZ_; - - double E_W = RescZboson.E(); - ROOT::Math::Boost BackToLab(RescZboson.Px() / E_W, RescZboson.Py() / E_W, RescZboson.Pz() / E_W); - math::XYZTLorentzVector metVec(-99999., -99999., -99., -99999.); - boost_ele = BackToLab(boost_ele); - - boost_nu = BackToLab(boost_nu); - math::XYZTLorentzVector sum = boost_nu + boost_ele; - edm::LogDebug_("ersatzFabrikV1", "", 597) << "Electron back in lab frame = (" << boost_ele.Px() << ", " - << boost_ele.Py() << ", " << boost_ele.Pz() << ", " << boost_ele.E() << ")"; - edm::LogDebug_("ersatzFabrikV1", "", 599) << "Ersatz Neutrino back in lab frame = (" << boost_nu.Px() << ", " - << boost_nu.Py() << ", " << boost_nu.Pz() << ", " << boost_nu.E() << ")"; - edm::LogDebug_("ersatzFabrikV1", "", 601) - << "boost_ele + boost_nu = (" << sum.Px() << ", " << sum.Py() << ", " << sum.Pz() << ", " << sum.E() << ")"; - - nu.SetXYZT(nu.X(), nu.Y(), 0., nu.T()); - ele.SetXYZT(ele.X(), ele.Y(), 0., ele.T()); - boost_ele.SetXYZT(boost_ele.X(), boost_ele.Y(), 0., boost_ele.T()); - metVec = met.p4() + nu + ele - boost_ele; - - reco::MET ersatzMEt(metVec, met.vertex()); - if (corr == 1) { - //Z_caloV1_m_[iComb_] = Zboson.M(); - //Z_caloV1_pt_[iComb_] = Zboson.Pt(); - //Z_caloV1_y_[iComb_] = Zboson.Y(); - //Z_caloV1_eta_[iComb_] = Zboson.Eta(); - //Z_caloV1_phi_[iComb_] = Zboson.Phi(); - //Z_caloV1_rescM_[iComb_] = RescZboson.M(); - //Z_caloV1_rescPt_[iComb_] = RescZboson.Pt(); - //Z_caloV1_rescY_[iComb_] = RescZboson.Y(); - //Z_caloV1_rescEta_[iComb_] = RescZboson.Eta(); - //Z_caloV1_rescPhi_[iComb_] = RescZboson.Phi(); - //Z_caloV1_probe_dPhi_[iComb_] = reco::deltaPhi(Zboson.Phi(), elec->phi()); - //tag_caloV1_rescPt_[iComb_] = boost_ele.Pt(); - //tag_caloV1_rescEta_[iComb_] = boost_ele.Eta(); - //tag_caloV1_rescPhi_[iComb_] = boost_ele.Phi(); - //probe_caloV1_rescPt_[iComb_] = boost_nu.Pt(); - //probe_caloV1_rescEta_[iComb_] = boost_nu.Eta(); - //probe_caloV1_rescPhi_[iComb_] = boost_nu.Phi(); - ErsatzV1_Mesc_[iComb_] = ROOT::Math::VectorUtil::InvariantMass(elec->p4(), boost_nu); - ErsatzV1_rescMesc_[iComb_] = ROOT::Math::VectorUtil::InvariantMass(ele, nu); - ErsatzV1CaloMt_[iComb_] = - sqrt(2. * boost_ele.Pt() * ersatzMEt.pt() * (1 - cos(reco::deltaPhi(boost_ele.Phi(), ersatzMEt.phi())))); - } - if (corr == 2) { - //Z_caloV2_m_[iComb_] = Zboson.M(); - //Z_caloV2_pt_[iComb_] = Zboson.Pt(); - //Z_caloV2_y_[iComb_] = Zboson.Y(); - //Z_caloV2_eta_[iComb_] = Zboson.Eta(); - //Z_caloV2_phi_[iComb_] = Zboson.Phi(); - //Z_caloV2_rescM_[iComb_] = RescZboson.M(); - //Z_caloV2_rescPt_[iComb_] = RescZboson.Pt(); - //Z_caloV2_rescY_[iComb_] = RescZboson.Y(); - //Z_caloV2_rescEta_[iComb_] = RescZboson.Eta(); - //Z_caloV2_rescPhi_[iComb_] = RescZboson.Phi(); - //Z_caloV2_probe_dPhi_[iComb_] = reco::deltaPhi(Zboson.Phi(), boost_elec->phi()); - //tag_caloV2_rescPt_[iComb_] = boost_ele.Pt(); - //tag_caloV2_rescEta_[iComb_] = boost_ele.Eta(); - //tag_caloV2_rescPhi_[iComb_] = boost_ele.Phi(); - //probe_caloV2_rescPt_[iComb_] = boost_nu.Pt(); - //probe_caloV2_rescEta_[iComb_] = boost_nu.Eta(); - //probe_caloV2_rescPhi_[iComb_] = boost_nu.Phi(); - ErsatzV2_Mesc_[iComb_] = ROOT::Math::VectorUtil::InvariantMass(elec->p4(), boost_nu); - ErsatzV2_rescMesc_[iComb_] = ROOT::Math::VectorUtil::InvariantMass(ele, nu); - ErsatzV2CaloMt_[iComb_] = - sqrt(2. * boost_ele.Pt() * ersatzMEt.pt() * (1 - cos(reco::deltaPhi(boost_ele.Phi(), ersatzMEt.phi())))); - } - if (corr == 3) { - //Z_caloV3_m_[iComb_] = Zboson.M(); - //Z_caloV3_pt_[iComb_] = Zboson.Pt(); - //Z_caloV3_y_[iComb_] = Zboson.Y(); - //Z_caloV3_eta_[iComb_] = Zboson.Eta(); - //Z_caloV3_phi_[iComb_] = Zboson.Phi(); - //Z_caloV3_rescM_[iComb_] = RescZboson.M(); - //Z_caloV3_rescPt_[iComb_] = RescZboson.Pt(); - //Z_caloV3_rescY_[iComb_] = RescZboson.Y(); - //Z_caloV3_rescEta_[iComb_] = RescZboson.Eta(); - //Z_caloV3_rescPhi_[iComb_] = RescZboson.Phi(); - //Z_caloV3_probe_dPhi_[iComb_] = reco::deltaPhi(Zboson.Phi(), boost_elec->phi()); - //tag_caloV3_rescPt_[iComb_] = boost_ele.Pt(); - //tag_caloV3_rescEta_[iComb_] = boost_ele.Eta(); - //tag_caloV3_rescPhi_[iComb_] = boost_ele.Phi(); - //probe_caloV3_rescPt_[iComb_] = boost_nu.Pt(); - //probe_caloV3_rescEta_[iComb_] = boost_nu.Eta(); - //probe_caloV3_rescPhi_[iComb_] = boost_nu.Phi(); - ErsatzV3_Mesc_[iComb_] = ROOT::Math::VectorUtil::InvariantMass(elec->p4(), boost_nu); - ErsatzV3_rescMesc_[iComb_] = ROOT::Math::VectorUtil::InvariantMass(ele, nu); - ErsatzV3CaloMt_[iComb_] = - sqrt(2. * boost_ele.Pt() * ersatzMEt.pt() * (1 - cos(reco::deltaPhi(boost_ele.Phi(), ersatzMEt.phi())))); - } - if (corr == 4) { - //Z_caloV4_m_[iComb_] = Zboson.M(); - //Z_caloV4_pt_[iComb_] = Zboson.Pt(); - //Z_caloV4_y_[iComb_] = Zboson.Y(); - //Z_caloV4_eta_[iComb_] = Zboson.Eta(); - //Z_caloV4_phi_[iComb_] = Zboson.Phi(); - //Z_caloV4_rescM_[iComb_] = RescZboson.M(); - //Z_caloV4_rescPt_[iComb_] = RescZboson.Pt(); - //Z_caloV4_rescY_[iComb_] = RescZboson.Y(); - //Z_caloV4_rescEta_[iComb_] = RescZboson.Eta(); - //Z_caloV4_rescPhi_[iComb_] = RescZboson.Phi(); - //Z_caloV4_probe_dPhi_[iComb_] = reco::deltaPhi(Zboson.Phi(), boost_elec->phi()); - //tag_caloV4_rescPt_[iComb_] = boost_ele.Pt(); - //tag_caloV4_rescEta_[iComb_] = boost_ele.Eta(); - //tag_caloV4_rescPhi_[iComb_] = boost_ele.Phi(); - //probe_caloV4_rescPt_[iComb_] = boost_nu.Pt(); - //probe_caloV4_rescEta_[iComb_] = boost_nu.Eta(); - //probe_caloV4_rescPhi_[iComb_] = boost_nu.Phi(); - ErsatzV4_Mesc_[iComb_] = ROOT::Math::VectorUtil::InvariantMass(elec->p4(), boost_nu); - ErsatzV4_rescMesc_[iComb_] = ROOT::Math::VectorUtil::InvariantMass(ele, nu); - ErsatzV4CaloMt_[iComb_] = - sqrt(2. * boost_ele.Pt() * ersatzMEt.pt() * (1 - cos(reco::deltaPhi(boost_ele.Phi(), ersatzMEt.phi())))); - } - return ersatzMEt; -} - -reco::MET ErsatzMEt::ersatzFabrik(const reco::GsfElectronRef& tag, - const reco::GsfElectronRef& probe, - const reco::MET& met) { - math::XYZTLorentzVector elec, nu, boost_elec, boost_nu; - boost_elec = tag->p4(); - edm::LogDebug_("ersatzFabrikV1", "", 858) << "boost_elec = (" << boost_elec.Px() << ", " << boost_elec.Py() << ", " - << boost_elec.Pz() << ", " << boost_elec.E() << ")"; - boost_nu = probe->p4(); - edm::LogDebug_("ersatzFabrikV1", "", 860) << "boost_nu = (" << boost_nu.Px() << ", " << boost_nu.Py() << ", " - << boost_nu.Pz() << ", " << boost_nu.E() << ")"; - math::XYZTLorentzVector Zboson = boost_elec + boost_nu; - edm::LogDebug_("ersatzFabrikV1", "", 862) - << "Zboson = (" << Zboson.Px() << ", " << Zboson.Py() << ", " << Zboson.Pz() << ", " << Zboson.E() << ")"; - math::XYZTLorentzVector RescZboson( - Zboson.Px(), Zboson.Py(), Zboson.Pz(), sqrt(Zboson.P2() + (mW_ * mW_ * Zboson.M2()) / (mZ_ * mZ_))); - edm::LogDebug_("ersatzFabrikV1", "", 864) << "RescZboson = (" << RescZboson.Px() << ", " << RescZboson.Py() << ", " - << RescZboson.Pz() << ", " << RescZboson.E() << ")"; - ROOT::Math::Boost BoostToZRestFrame(Zboson.BoostToCM()); - elec = BoostToZRestFrame(boost_elec); - edm::LogDebug_("ersatzFabrikV1", "", 867) << "boost_elec (in Z rest frame) = (" << elec.Px() << ", " << elec.Py() - << ", " << elec.Pz() << ", " << elec.E() << ")"; - nu = BoostToZRestFrame(boost_nu); - edm::LogDebug_("ersatzFabrikV1", "", 869) - << "boost_nu (in Z rest frame) = (" << nu.Px() << ", " << nu.Py() << ", " << nu.Pz() << ", " << nu.E() << ")"; - elec *= mW_ / mZ_; - edm::LogDebug_("ersatzFabrikV1", "", 871) - << "elec (in Z rest frame) = (" << elec.Px() << ", " << elec.Py() << ", " << elec.Pz() << ", " << elec.E() << ")"; - nu *= mW_ / mZ_; - edm::LogDebug_("ersatzFabrikV1", "", 873) - << "nu (in Z rest frame) = (" << nu.Px() << ", " << nu.Py() << ", " << nu.Pz() << ", " << nu.E() << ")"; - ROOT::Math::Boost BoostBackToLab( - RescZboson.Px() / RescZboson.E(), RescZboson.Py() / RescZboson.E(), RescZboson.Pz() / RescZboson.E()); - math::XYZTLorentzVector metVec(-99999., -99999., -99., -99999.); - elec = BoostBackToLab(elec); - edm::LogDebug_("ersatzFabrikV1", "", 877) - << "elec = (" << elec.Px() << ", " << elec.Py() << ", " << elec.Pz() << ", " << elec.E() << ")"; - nu = BoostBackToLab(nu); - edm::LogDebug_("ersatzFabrikV1", "", 879) - << "nu = (" << nu.Px() << ", " << nu.Py() << ", " << nu.Pz() << ", " << nu.E() << ")"; - Z_m_[iComb_] = Zboson.M(); - Z_pt_[iComb_] = Zboson.Pt(); - Z_y_[iComb_] = Zboson.Y(); - Z_eta_[iComb_] = Zboson.Eta(); - Z_phi_[iComb_] = Zboson.Phi(); - Z_rescM_[iComb_] = RescZboson.M(); - Z_rescPt_[iComb_] = RescZboson.Pt(); - Z_rescY_[iComb_] = RescZboson.Y(); - Z_rescEta_[iComb_] = RescZboson.Eta(); - Z_rescPhi_[iComb_] = RescZboson.Phi(); - Z_probe_dPhi_[iComb_] = reco::deltaPhi(Zboson.Phi(), boost_elec.phi()); - tag_rescPt_[iComb_] = elec.Pt(); - tag_rescEta_[iComb_] = elec.Eta(); - tag_rescPhi_[iComb_] = elec.Phi(); - probe_rescPt_[iComb_] = nu.Pt(); - probe_rescEta_[iComb_] = nu.Eta(); - probe_rescPhi_[iComb_] = nu.Phi(); - elec.SetXYZT(elec.X(), elec.Y(), 0., elec.T()); - nu.SetXYZT(nu.X(), nu.Y(), 0., nu.T()); - boost_elec.SetXYZT(boost_elec.X(), boost_elec.Y(), 0., boost_elec.T()); - metVec = met.p4() + nu + elec - boost_elec; - reco::MET ersatzMEt(metVec, met.vertex()); - return ersatzMEt; -} - -bool ErsatzMEt::isInBarrel(double eta) { return (fabs(eta) < BarrelEtaMax_); } - -bool ErsatzMEt::isInEndCap(double eta) { return (fabs(eta) < EndCapEtaMax_ && fabs(eta) > EndCapEtaMin_); } - -bool ErsatzMEt::isInFiducial(double eta) { return isInBarrel(eta) || isInEndCap(eta); } - -// ------------ method called once each job just after ending the event loop ------------ -void ErsatzMEt::endJob() {} -//define this as a plug-in -DEFINE_FWK_MODULE(ErsatzMEt); diff --git a/ElectroWeakAnalysis/ZEE/src/ZeeCandidateFilter.cc b/ElectroWeakAnalysis/ZEE/src/ZeeCandidateFilter.cc deleted file mode 100644 index 7436f64d1677f..0000000000000 --- a/ElectroWeakAnalysis/ZEE/src/ZeeCandidateFilter.cc +++ /dev/null @@ -1,1267 +0,0 @@ -// -*- C++ -*- -// -// Package: ZeeCandidateFilter -// Class: ZeeCandidateFilter -// -/**\class ZeeCandidateFilter ZeeCandidateFilter.cc EWKSoftware/EDMTupleSkimmerFilter/src/ZeeCandidateFilter.cc - - Description: - - Implementation: - - This class contains a filter that searches the event and finds whether it fulfills the Z Candidate Criteria. - If it fullfills them it creates a ZeeCandidate and stores it in the event. - - Definition of the Zee Caldidate: - * event that passes the trigger - * has 2 Gsf electrons in fiducial with ET greater than a (configurable) threshold - * at least one of them matched to an HLT Object (configurable) with DR < (configurable) - - Changes Log: - - 12Feb09 First Release of the code for CMSSW_2_2_X - - 17Sep09 First Release for CMSSW_3_1_X - - 09Dec09 Option to ignore trigger - - 25Feb10 Added options to use Conversion Rejection, Expected missing hits and valid hit at first PXB - - Added option to calculate these criteria and store them in the pat electron object this is done by setting in the configuration the flags - - calculateValidFirstPXBHit = true - calculateConversionRejection = true - calculateExpectedMissinghits = true - - Then the code calculates them and you can access all these from pat::Electron - - myElec.userInt("PassValidFirstPXBHit") 0 fail, 1 passes - myElec.userInt("PassConversionRejection") 0 fail, 1 passes - myElec.userInt("NumberOfExpectedMissingHits") the number of lost hits - - - 28May10 Implementation of Spring10 selections - Contact: - Stilianos Kesisoglou - Institute of Nuclear Physics - NCSR Demokritos -// Original Author: Nikolaos Rompotis - - Nikolaos.Rompotis@Cern.ch - Imperial College London - -*/ - -#ifndef ZeeCandidateFilter_H -#define ZeeCandidateFilter_H - -// System include files -#include - -// User include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include -#include -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/PatCandidates/interface/Electron.h" -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/Common/interface/TriggerResults.h" -#include "FWCore/Common/interface/TriggerNames.h" - -#include "TString.h" -#include "TMath.h" -#include "DataFormats/PatCandidates/interface/MET.h" -#include "DataFormats/PatCandidates/interface/CompositeCandidate.h" -#include "DataFormats/PatCandidates/interface/TriggerObject.h" - -// For conversion finder -#include "FWCore/Framework/interface/ESHandle.h" -#include "MagneticField/Engine/interface/MagneticField.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" -#include "DataFormats/GeometryVector/interface/GlobalPoint.h" - -#include "DataFormats/Scalers/interface/DcsStatus.h" -#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" -#include "RecoEcal/EgammaCoreTools/interface/EcalTools.h" -#include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h" -#include "DataFormats/VertexReco/interface/Vertex.h" - -// Class Declaration -// ----------------- -// -class ZeeCandidateFilter : public edm::EDFilter { -public: - explicit ZeeCandidateFilter(const edm::ParameterSet &); - - ~ZeeCandidateFilter() override; - -private: - Bool_t filter(edm::Event &, const edm::EventSetup &) override; - - void endJob() override; - - Bool_t isInFiducial(Double_t eta); - - //Bool_t passEleIDCuts(pat::Electron *ele); - - // ----- Data Members ----- - - Double_t ETCut_; - Double_t METCut_; - - Bool_t useEcalDrivenElectrons_; - - /* Electron 1 */ - Bool_t useValidFirstPXBHit1_; - Bool_t calculateValidFirstPXBHit1_; - Bool_t useConversionRejection1_; - Bool_t calculateConversionRejection1_; - Bool_t useExpectedMissingHits1_; - Bool_t calculateExpectedMissingHits1_; - Int_t maxNumberOfExpectedMissingHits1_; - - /* Electron 2 */ - Bool_t useValidFirstPXBHit2_; - Bool_t calculateValidFirstPXBHit2_; - Bool_t useConversionRejection2_; - Bool_t calculateConversionRejection2_; - Bool_t useExpectedMissingHits2_; - Bool_t calculateExpectedMissingHits2_; - Int_t maxNumberOfExpectedMissingHits2_; - - /* Electron 1 */ - Double_t dist1_; - Double_t dcot1_; - - /* Electron 2 */ - Double_t dist2_; - Double_t dcot2_; - - Bool_t dataMagneticFieldSetUp_; - - edm::InputTag dcsTag_; - edm::EDGetTokenT dcsToken_; - edm::EDGetTokenT tracksToken_; - - Double_t BarrelMaxEta_; - Double_t EndCapMaxEta_; - Double_t EndCapMinEta_; - - std::string hltpath_; - edm::InputTag triggerCollectionTag_; - edm::EDGetTokenT triggerCollectionToken_; - edm::EDGetTokenT triggerEventToken_; - edm::InputTag hltpathFilter_; - Bool_t useHLTObjectETCut_; - - Double_t hltObjectETCut_; - - Bool_t useExtraTrigger_; - - std::vector vHltpathExtra_; - std::vector vHltpathFilterExtra_; - - Bool_t useTriggerInfo_; - Bool_t electronMatched2HLT_; - Double_t electronMatched2HLT_DR_; - - edm::InputTag electronCollectionTag_; - edm::EDGetTokenT electronCollectionToken_; - - edm::EDGetTokenT metCollectionToken_; - edm::EDGetTokenT pfMetCollectionToken_; - edm::EDGetTokenT tcMetCollectionToken_; - - edm::EDGetTokenT > PrimaryVerticesCollectionToken_; - - edm::EDGetTokenT ebRecHitsToken_; - edm::EDGetTokenT eeRecHitsToken_; - - Bool_t useSpikeRejection_; - - Double_t spikeCleaningSwissCrossCut_; -}; - -#endif - -// Constants, Enums and Typedefs -// ----------------------------- -// - -// Static Data Member Definitions -// ------------------------------ -// - -// Constructors and Destructor -// --------------------------- -// -ZeeCandidateFilter::ZeeCandidateFilter(const edm::ParameterSet &iConfig) { - // - //-------------------------------------// - // INITIALIZATION // - //-------------------------------------// - // - - // Cuts - // ---- - ETCut_ = iConfig.getUntrackedParameter("ETCut"); - METCut_ = iConfig.getUntrackedParameter("METCut"); - - useEcalDrivenElectrons_ = iConfig.getUntrackedParameter("useEcalDrivenElectrons", false); - //-------------------------------------------------------------------------------------------------------------------- - - // Preselection Criteria: Hit Pattern - // ---------------------------------- - // - /* Electron 1 */ - useValidFirstPXBHit1_ = iConfig.getUntrackedParameter("useValidFirstPXBHit1", false); - calculateValidFirstPXBHit1_ = iConfig.getUntrackedParameter("calculateValidFirstPXBHit1", false); - useConversionRejection1_ = iConfig.getUntrackedParameter("useConversionRejection1", false); - calculateConversionRejection1_ = iConfig.getUntrackedParameter("calculateConversionRejection1", false); - useExpectedMissingHits1_ = iConfig.getUntrackedParameter("useExpectedMissingHits1", false); - calculateExpectedMissingHits1_ = iConfig.getUntrackedParameter("calculateExpectedMissingHits1", false); - maxNumberOfExpectedMissingHits1_ = iConfig.getUntrackedParameter("maxNumberOfExpectedMissingHits1", 1); - // - /* Electron 2 */ - useValidFirstPXBHit2_ = iConfig.getUntrackedParameter("useValidFirstPXBHit2", false); - calculateValidFirstPXBHit2_ = iConfig.getUntrackedParameter("calculateValidFirstPXBHit2", false); - useConversionRejection2_ = iConfig.getUntrackedParameter("useConversionRejection2", false); - calculateConversionRejection2_ = iConfig.getUntrackedParameter("calculateConversionRejection2", false); - useExpectedMissingHits2_ = iConfig.getUntrackedParameter("useExpectedMissingHits2", false); - calculateExpectedMissingHits2_ = iConfig.getUntrackedParameter("calculateExpectedMissingHits2", false); - maxNumberOfExpectedMissingHits2_ = iConfig.getUntrackedParameter("maxNumberOfExpectedMissingHits2", 1); - //-------------------------------------------------------------------------------------------------------------------- - - // Conversion Rejection Variables - // ------------------------------ - // - /* Electron 1 */ - Double_t dist1_D = 0.02; - Double_t dcot1_D = 0.02; - // - dist1_ = iConfig.getUntrackedParameter("conversionRejectionDist1", dist1_D); - dcot1_ = iConfig.getUntrackedParameter("conversionRejectionDcot1", dcot1_D); - // - /* Electron 2 */ - Double_t dist2_D = 0.02; - Double_t dcot2_D = 0.02; - // - dist2_ = iConfig.getUntrackedParameter("conversionRejectionDist2", dist2_D); - dcot2_ = iConfig.getUntrackedParameter("conversionRejectionDcot2", dcot2_D); - //-------------------------------------------------------------------------------------------------------------------- - - // Magnetic Field - // -------------- - // - dataMagneticFieldSetUp_ = iConfig.getUntrackedParameter("dataMagneticFieldSetUp", false); - - if (dataMagneticFieldSetUp_) { - dcsTag_ = iConfig.getUntrackedParameter("dcsTag"); - dcsToken_ = mayConsume(dcsTag_); - } - tracksToken_ = mayConsume(edm::InputTag("generalTracks")); - //-------------------------------------------------------------------------------------------------------------------- - - // Detector Fiducial Cuts - // ---------------------- - // - Double_t BarrelMaxEta_D = 1.4442; - Double_t EndCapMinEta_D = 1.5660; - Double_t EndCapMaxEta_D = 2.5000; - - BarrelMaxEta_ = iConfig.getUntrackedParameter("BarrelMaxEta", BarrelMaxEta_D); - EndCapMaxEta_ = iConfig.getUntrackedParameter("EndCapMaxEta", EndCapMaxEta_D); - EndCapMinEta_ = iConfig.getUntrackedParameter("EndCapMinEta", EndCapMinEta_D); - //-------------------------------------------------------------------------------------------------------------------- - - // Trigger Related - // --------------- - // - hltpath_ = iConfig.getUntrackedParameter("hltpath"); - triggerCollectionTag_ = iConfig.getUntrackedParameter("triggerCollectionTag"); - triggerCollectionToken_ = consumes(triggerCollectionTag_); - triggerEventToken_ = consumes(iConfig.getUntrackedParameter("triggerEventTag")); - hltpathFilter_ = iConfig.getUntrackedParameter("hltpathFilter"); - useHLTObjectETCut_ = iConfig.getUntrackedParameter("useHLTObjectETCut", false); - - if (useHLTObjectETCut_) { - hltObjectETCut_ = iConfig.getUntrackedParameter("hltObjectETCut"); - } - - // Dirty way to add a second trigger with OR, to be done properly in the next tag - useExtraTrigger_ = iConfig.getUntrackedParameter("useExtraTrigger"); - - if (useExtraTrigger_) { - vHltpathExtra_ = iConfig.getUntrackedParameter >("vHltpathExtra"); - vHltpathFilterExtra_ = iConfig.getUntrackedParameter >("vHltpathFilterExtra"); - - if (Int_t(vHltpathExtra_.size()) != Int_t(vHltpathFilterExtra_.size())) { - std::cout << "ZeeCandidateFilter: ERROR IN Configuration: vHltpathExtra and vHltpathFilterExtra" - << " should have the same dimensions " << std::endl; - } - } - //-------------------------------------------------------------------------------------------------------------------- - - // Trigger Matching Related - // ------------------------ - // - useTriggerInfo_ = iConfig.getUntrackedParameter("useTriggerInfo", true); - electronMatched2HLT_ = iConfig.getUntrackedParameter("electronMatched2HLT"); - electronMatched2HLT_DR_ = iConfig.getUntrackedParameter("electronMatched2HLT_DR"); - //-------------------------------------------------------------------------------------------------------------------- - - // Electrons, MET's Vtx's and other - // -------------------------------- - // - electronCollectionTag_ = iConfig.getUntrackedParameter("electronCollectionTag"); - electronCollectionToken_ = consumes(electronCollectionTag_); - - metCollectionToken_ = consumes(iConfig.getUntrackedParameter("metCollectionTag")); - pfMetCollectionToken_ = - consumes(iConfig.getUntrackedParameter("pfMetCollectionTag")); - tcMetCollectionToken_ = - consumes(iConfig.getUntrackedParameter("tcMetCollectionTag")); - - PrimaryVerticesCollectionToken_ = - consumes >(iConfig.getUntrackedParameter("PrimaryVerticesCollection")); - - ebRecHitsToken_ = mayConsume(iConfig.getUntrackedParameter("ebRecHits")); - eeRecHitsToken_ = mayConsume(iConfig.getUntrackedParameter("eeRecHits")); - //-------------------------------------------------------------------------------------------------------------------- - - // Spike Cleaning - // -------------- - // - useSpikeRejection_ = iConfig.getUntrackedParameter("useSpikeRejection"); - - if (useSpikeRejection_) { - spikeCleaningSwissCrossCut_ = iConfig.getUntrackedParameter("spikeCleaningSwissCrossCut"); - } - //-------------------------------------------------------------------------------------------------------------------- - - // - //-------------------------------------// - // SUMMARY PRINTOUT // - //-------------------------------------// - // - - std::cout << "ZeeCandidateFilter: Running Zee Filter..." << std::endl; - - if (useTriggerInfo_) { - std::cout << "ZeeCandidateFilter: HLT Path " << hltpath_ << std::endl; - std::cout << "ZeeCandidateFilter: HLT Filter " << hltpathFilter_ << std::endl; - - if (useExtraTrigger_) { - for (Int_t itrig = 0; itrig < (Int_t)vHltpathExtra_.size(); ++itrig) { - std::cout << "ZeeCandidateFilter: OR " << vHltpathExtra_[itrig] - << " with filter: " << vHltpathFilterExtra_[itrig] << std::endl; - } - } - } else { - std::cout << "ZeeCandidateFilter: Trigger info will not be used here" << std::endl; - } - - std::cout << "ZeeCandidateFilter: ET > " << ETCut_ << std::endl; - std::cout << "ZeeCandidateFilter: MET > " << METCut_ << std::endl; - - if (useEcalDrivenElectrons_) { - std::cout << "ZeeCandidateFilter: Electron Candidate(s) is required to be ecal driven" << std::endl; - } - - if (electronMatched2HLT_ && useTriggerInfo_) { - std::cout << "ZeeCandidateFilter: At least one electron is required to match an HLT object with DR < " - << electronMatched2HLT_DR_ << std::endl; - } else { - std::cout << "ZeeCandidateFilter: Electron Candidates NOT required to match HLT object " << std::endl; - } - - if (useValidFirstPXBHit1_) { - std::cout << "ZeeCandidateFilter: Electron Candidate #1 required to have a valid hit in 1st PXB layer " - << std::endl; - } - - if (useValidFirstPXBHit2_) { - std::cout << "ZeeCandidateFilter: Electron Candidate #2 required to have a valid hit in 1st PXB layer " - << std::endl; - } - - if (calculateValidFirstPXBHit1_) { - std::cout << "ZeeCandidateFilter: Info about whether there is a valid 1st layer PXB hit for electron candidate #1 " - "will be stored: you can access that later by myElec.userInt(\"PassValidFirstPXBHit\")==1" - << std::endl; - } - - if (calculateValidFirstPXBHit2_) { - std::cout << "ZeeCandidateFilter: Info about whether there is a valid 1st layer PXB hit for electron candidate #2 " - "will be stored: you can access that later by myElec.userInt(\"PassValidFirstPXBHit\")==1" - << std::endl; - } - - if (useExpectedMissingHits1_) { - std::cout << "ZeeCandidateFilter: Electron Candidate #1 is required to have less than " - << maxNumberOfExpectedMissingHits1_ << " expected hits missing " << std::endl; - } - - if (useExpectedMissingHits2_) { - std::cout << "ZeeCandidateFilter: Electron Candidate #2 is required to have less than " - << maxNumberOfExpectedMissingHits2_ << " expected hits missing " << std::endl; - } - - if (calculateExpectedMissingHits1_) { - std::cout << "ZeeCandidateFilter: Missing Hits from expected inner layers for electron candidate #1 will be " - "calculated and stored: you can access them later by myElec.userInt(\"NumberOfExpectedMissingHits\")" - << std::endl; - } - - if (calculateExpectedMissingHits2_) { - std::cout << "ZeeCandidateFilter: Missing Hits from expected inner layers for electron candidate #2 will be " - "calculated and stored: you can access them later by myElec.userInt(\"NumberOfExpectedMissingHits\")" - << std::endl; - } - - if (useConversionRejection1_) { - std::cout << "ZeeCandidateFilter: Electron Candidate #1 is required to pass EGAMMA Conversion Rejection criteria" - << std::endl; - } - - if (useConversionRejection2_) { - std::cout << "ZeeCandidateFilter: Electron Candidate #2 is required to pass EGAMMA Conversion Rejection criteria" - << std::endl; - } - - if (calculateConversionRejection1_) { - std::cout << "ZeeCandidateFilter: EGAMMA Conversion Rejection criteria for electron candidate #1 will be " - "calculated and stored: you can access them later by demanding for a successful electron " - "myElec.userInt(\"PassConversionRejection\")==1" - << std::endl; - } - - if (calculateConversionRejection2_) { - std::cout << "ZeeCandidateFilter: EGAMMA Conversion Rejection criteria for electron candidate #2 will be " - "calculated and stored: you can access them later by demanding for a successful electron " - "myElec.userInt(\"PassConversionRejection\")==1" - << std::endl; - } - - if (dataMagneticFieldSetUp_) { - std::cout << "ZeeCandidateFilter: Data Configuration for Magnetic Field DCS tag " << dcsTag_ << std::endl; - } - - if (useSpikeRejection_) { - std::cout << "ZeeCandidateFilter: Spike Cleaning will be done with the Swiss Cross Criterion cutting at " - << spikeCleaningSwissCrossCut_ << std::endl; - } - - std::cout << "ZeeCandidateFilter: Fiducial Cut: " << std::endl; - std::cout << "ZeeCandidateFilter: BarrelMax: " << BarrelMaxEta_ << std::endl; - std::cout << "ZeeCandidateFilter: EndcapMin: " << EndCapMinEta_ << " EndcapMax: " << EndCapMaxEta_ << std::endl; - - // - //------------------------------------------// - // EXTRA INFO IN THE EVENT // - //------------------------------------------// - // - produces("selectedZeeCandidates").setBranchAlias("selectedZeeCandidates"); -} - -ZeeCandidateFilter::~ZeeCandidateFilter() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - -// Member Functions -// ---------------- -// - -// ------------ method called on each new Event ------------ -Bool_t ZeeCandidateFilter::filter(edm::Event &iEvent, const edm::EventSetup &iSetup) { - using namespace edm; - using namespace std; - using namespace pat; - - std::cout << "FILTER-MSG: Begin Processing ... " - << "Run = " << iEvent.run() << " " - << "Lumi = " << (Int_t)iEvent.luminosityBlock() << " " - << "Event = " << iEvent.eventAuxiliary().event() << " " << std::endl; - - /*** TRIGGER REQUIREMENT - Event should pass the trigger, otherwise no zee candidate ***/ - - edm::Handle HLTResults; - iEvent.getByToken(triggerCollectionToken_, HLTResults); - - Int_t passTrigger = 0; - - if (HLTResults.isValid()) { - const edm::TriggerNames &triggerNames = iEvent.triggerNames(*HLTResults); - - UInt_t trigger_size = HLTResults->size(); - UInt_t trigger_position = triggerNames.triggerIndex(hltpath_); - UInt_t trigger_position_extra; - - if (trigger_position < trigger_size) { - passTrigger = (Int_t)HLTResults->accept(trigger_position); - } - - // Tested TriggerPath firing results printout - std::cout << "SK_HLT_INFO" - << " | " - << "trigger_size = " << trigger_size << " | " - << "hltpath_ = " << hltpath_ << " | " - << "trigger_position = " << trigger_position << " | " - << "passTrigger = " << passTrigger << std::endl; - - if (useExtraTrigger_ && passTrigger == 0) { - for (Int_t itrig = 0; itrig < (Int_t)vHltpathExtra_.size(); ++itrig) { - trigger_position_extra = triggerNames.triggerIndex(vHltpathExtra_[itrig]); - - if (trigger_position_extra < trigger_size) { - passTrigger = (Int_t)HLTResults->accept(trigger_position_extra); - } - - // Tested TriggerPath firing results printout - std::cout << "SK_HLT_INFO" - << " | " - << "vHltpathExtra_[" << itrig << "] = " << vHltpathExtra_[itrig] << " | " - << "trigger_position_extra = " << trigger_position_extra << " | " - << "passTrigger = " << passTrigger << " | " - << "vHltpathExtra_.size() = " << vHltpathExtra_.size() << std::endl; - - if (passTrigger > 0) { - break; - } - - } // for Loop - - } // if ( useExtraTrigger_ && passTrigger==0 ) - - } else { - std::cout << "TriggerResults are missing from this event.." << std::endl; - if (useTriggerInfo_) { - return false; // RETURN if trigger is missing - } - } - - if (passTrigger == 0 && useTriggerInfo_) { - std::cout << "No HLT Path is firing in this event" << std::endl; - return false; // RETURN if event fails the trigger - } - - edm::Handle pHLT; - iEvent.getByToken(triggerEventToken_, pHLT); - - const Int_t nF(pHLT->sizeFilters()); - const Int_t filterInd = pHLT->filterIndex(hltpathFilter_); - - std::vector filterIndExtra; - - if (useExtraTrigger_) { - for (Int_t itrig = 0; itrig < (Int_t)vHltpathFilterExtra_.size(); ++itrig) { - std::cout << "working on #" << itrig << std::endl; - std::cout << " ---> " << vHltpathFilterExtra_[itrig] << std::endl; - filterIndExtra.push_back(pHLT->filterIndex(vHltpathFilterExtra_[itrig])); - } - } - - Bool_t finalpathfound = false; - - if (nF != filterInd) { - finalpathfound = true; - } else { - for (Int_t itrig = 0; itrig < (Int_t)filterIndExtra.size(); ++itrig) { - std::cout << "working on #" << itrig << std::endl; - std::cout << " ---> " << filterIndExtra[itrig] << std::endl; - if (nF != filterIndExtra[itrig]) { - finalpathfound = true; - break; - } - } - } - - if (!finalpathfound) { - std::cout << "No HLT Filter was not found in this event..." << std::endl; - if (useTriggerInfo_) { - return false; // RETURN if event fails the trigger - } - } - - const trigger::TriggerObjectCollection &TOC(pHLT->getObjects()); - - /*** ET CUT: At least one electron in the event with ET > ETCut_ ***/ - - // Electron Collection - edm::Handle patElectron; - iEvent.getByToken(electronCollectionToken_, patElectron); - - if (!patElectron.isValid()) { - std::cout << "No electrons found in this event with tag " << electronCollectionTag_ << std::endl; - return false; // RETURN if no elecs in the event - } - - const pat::ElectronCollection *pElecs = patElectron.product(); - - // // MET Collection -> relocated block bellow - // edm::Handle patMET; - // iEvent.getByToken(metCollectionToken_, patMET); - // - // edm::Handle patpfMET; - // iEvent.getByToken(pfMetCollectionToken_, patpfMET); - // - // edm::Handle pattcMET; - // iEvent.getByToken(tcMetCollectionToken_, pattcMET); - - // - // Note: best to do Duplicate removal here, since the current - // implementation does not remove triplicates - // duplicate removal is on at PAT, but does it remove triplicates? - // - - // pat::ElectronCollection::const_iterator elec; // relocated bellow - - // check how many electrons there are in the event - const Int_t Nelecs = pElecs->size(); - - if (Nelecs <= 1) { - std::cout << "No more than 1 electrons found in this event" << std::endl; - return false; // RETURN if less than 2 elecs in the event - } - - // Order your electrons: first the ones with the higher ET - Int_t counter = 0; - std::vector indices; - std::vector ETs; - pat::ElectronCollection myElectrons; - - for (pat::ElectronCollection::const_iterator elec = pElecs->begin(); elec != pElecs->end(); - ++elec) { // the definition of the electron ET is wrt Gsf track eta - Double_t sc_et = elec->caloEnergy() / TMath::CosH(elec->gsfTrack()->eta()); - indices.push_back(counter); - ETs.push_back(sc_et); - myElectrons.push_back(*elec); - ++counter; - } - - const Int_t event_elec_number = (Int_t)indices.size(); - - if (event_elec_number <= 1) { - std::cout << "No more than 1 electrons in fiducial were found" << std::endl; - return false; // RETURN if no more than 1 electron in fiducial - } - - // Memory allocation (must be released every time we return back. - Int_t *sorted = new Int_t[event_elec_number]; - Double_t *et = new Double_t[event_elec_number]; - - for (Int_t i = 0; i < event_elec_number; ++i) { - et[i] = ETs[i]; - } - - // array sorted now has the indices of the highest ET electrons - TMath::Sort(event_elec_number, et, sorted, true); - // - // if the 2 highest electrons in the event has ET < ETCut_ return - Int_t max_et_index1 = sorted[0]; - Int_t max_et_index2 = sorted[1]; - - if ((ETs[max_et_index1] < ETCut_) || (ETs[max_et_index2] < ETCut_)) { - delete[] sorted; - delete[] et; - return false; // RETURN: demand the highest ET electrons to have ET > ETcut - } - - // my electrons now: - pat::Electron maxETelec1 = myElectrons[max_et_index1]; - pat::Electron maxETelec2 = myElectrons[max_et_index2]; - - // demand that they are in fiducial: - if (!isInFiducial(maxETelec1.caloPosition().eta())) { - delete[] sorted; - delete[] et; - return false; // RETURN highest ET electron is not in fiducial - } - - if (!isInFiducial(maxETelec2.caloPosition().eta())) { - delete[] sorted; - delete[] et; - return false; // RETURN 2nd highest ET electron is not in fiducial - } - - // demand that they are ecal driven - if (useEcalDrivenElectrons_) { - if ((!maxETelec1.ecalDrivenSeed()) || (!maxETelec2.ecalDrivenSeed())) { - delete[] sorted; - delete[] et; - return false; // RETURN At least one high ET electron is not ecal driven - } - } - - // spike rejection; - if (useSpikeRejection_ && maxETelec1.isEB()) { - edm::Handle recHits; - - // if ( maxETelec1.isEB() ) { - // iEvent.getByToken(ebRecHitsToken_, recHits); - // } - // else { - // iEvent.getByToken(eeRecHitsToken_, recHits); - // } - - iEvent.getByToken(ebRecHitsToken_, recHits); - - const EcalRecHitCollection *myRecHits = recHits.product(); - const DetId seedId = maxETelec1.superCluster()->seed()->seed(); - - Double_t swissCross = EcalTools::swissCross(seedId, *myRecHits, 0.); - - if (swissCross > spikeCleaningSwissCrossCut_) { - delete[] sorted; - delete[] et; - return false; // RETURN highest ET electron is a spike - } - } - - if (useSpikeRejection_ && maxETelec2.isEB()) { - edm::Handle recHits; - - // if ( maxETelec2.isEB()) { - // iEvent.getByToken(ebRecHitsToken_, recHits); - // } - // else { - // iEvent.getByToken(eeRecHitsToken_, recHits); - // } - - iEvent.getByToken(ebRecHitsToken_, recHits); - - const EcalRecHitCollection *myRecHits = recHits.product(); - const DetId seedId = maxETelec2.superCluster()->seed()->seed(); - - Double_t swissCross = EcalTools::swissCross(seedId, *myRecHits, 0.); - - if (swissCross > spikeCleaningSwissCrossCut_) { - delete[] sorted; - delete[] et; - return false; // RETURN 2nd highest ET electron is a spike - } - } - - // add the primary vtx information in the electron: - edm::Handle > pVtx; - iEvent.getByToken(PrimaryVerticesCollectionToken_, pVtx); - - const std::vector Vtx = *(pVtx.product()); - - Double_t pv_x = -999999.; - Double_t pv_y = -999999.; - Double_t pv_z = -999999.; - - Double_t ele_tip_pv1 = -999999.; - Double_t ele_tip_pv2 = -999999.; - - if (!Vtx.empty()) { - pv_x = Vtx[0].position().x(); - pv_y = Vtx[0].position().y(); - pv_z = Vtx[0].position().z(); - ele_tip_pv1 = (-1.0) * (maxETelec1.gsfTrack()->dxy(Vtx[0].position())); - ele_tip_pv2 = (-1.0) * (maxETelec2.gsfTrack()->dxy(Vtx[0].position())); - } - - maxETelec1.addUserFloat("pv_x", Float_t(pv_x)); - maxETelec1.addUserFloat("pv_x", Float_t(pv_y)); - maxETelec1.addUserFloat("pv_z", Float_t(pv_z)); - maxETelec1.addUserFloat("ele_tip_pv", Float_t(ele_tip_pv1)); - - maxETelec2.addUserFloat("pv_x", Float_t(pv_x)); - maxETelec2.addUserFloat("pv_x", Float_t(pv_y)); - maxETelec2.addUserFloat("pv_z", Float_t(pv_z)); - maxETelec2.addUserFloat("ele_tip_pv", Float_t(ele_tip_pv2)); - - // Double_t pv_x1 = -999999.; - // Double_t pv_y1 = -999999.; - // Double_t pv_z1 = -999999.; - // Double_t ele_tip_pv1 = -999999.; - // - // if ( Vtx.size() >=1 ) { - // pv_x1 = Vtx[0].position().x(); - // pv_y1 = Vtx[0].position().y(); - // pv_z1 = Vtx[0].position().z(); - // ele_tip_pv1 = (-1.0) * ( maxETelec1.gsfTrack()->dxy(Vtx[0].position()) ) ; - // } - // - // maxETelec1.addUserFloat("pv_x", Float_t(pv_x1)); - // maxETelec1.addUserFloat("pv_x", Float_t(pv_y1)); - // maxETelec1.addUserFloat("pv_z", Float_t(pv_z1)); - // maxETelec1.addUserFloat("ele_tip_pv", Float_t(ele_tip_pv1)); - // - // edm::Handle< std::vector > pVtx2; - // iEvent.getByToken(PrimaryVerticesCollectionToken_, pVtx2); - // - // const std::vector Vtx2 = *(pVtx2.product()); - // - // Double_t pv_x2 = -999999.; - // Double_t pv_y2 = -999999.; - // Double_t pv_z2 = -999999.; - // Double_t ele_tip_pv2 = -999999.; - // - // if ( Vtx2.size() >=1 ) { - // pv_x2 = Vtx2[0].position().x(); - // pv_y2 = Vtx2[0].position().y(); - // pv_z2 = Vtx2[0].position().z(); - // ele_tip_pv2 = -maxETelec2.gsfTrack()->dxy(Vtx2[0].position()); - // } - // - // maxETelec2.addUserFloat("pv_x", Float_t(pv_x1)); - // maxETelec2.addUserFloat("pv_x", Float_t(pv_y1)); - // maxETelec2.addUserFloat("pv_z", Float_t(pv_z1)); - // maxETelec2.addUserFloat("ele_tip_pv", Float_t(ele_tip_pv2)); - - // Special pre-selection requirements (hit pattern and conversion rejection) - - if (useValidFirstPXBHit1_ || calculateValidFirstPXBHit1_) { - Bool_t fail = - !maxETelec1.gsfTrack()->hitPattern().hasValidHitInPixelLayer(PixelSubdetector::SubDetector::PixelBarrel, 1); - - if (useValidFirstPXBHit1_ && fail) { - std::cout << "Filter: there is no valid hit for electron #1 in 1st layer PXB" << std::endl; - delete[] sorted; - delete[] et; - return false; - } - - if (calculateValidFirstPXBHit1_) { - std::string vfpx("PassValidFirstPXBHit"); - - if (fail) { - maxETelec1.addUserInt(vfpx, 0); - } else { - maxETelec1.addUserInt(vfpx, 1); - } - } - } - - if (useValidFirstPXBHit2_ || calculateValidFirstPXBHit2_) { - Bool_t fail = - !maxETelec2.gsfTrack()->hitPattern().hasValidHitInPixelLayer(PixelSubdetector::SubDetector::PixelBarrel, 1); - - if (useValidFirstPXBHit2_ && fail) { - std::cout << "Filter: there is no valid hit for electron #1 in 1st layer PXB" << std::endl; - delete[] sorted; - delete[] et; - return false; - } - - if (calculateValidFirstPXBHit2_) { - std::string vfpx("PassValidFirstPXBHit"); - - if (fail) { - maxETelec2.addUserInt(vfpx, 0); - } else { - maxETelec2.addUserInt(vfpx, 1); - } - } - } - - if (useExpectedMissingHits1_ || calculateExpectedMissingHits1_) { - Int_t numberOfInnerHits = - (Int_t)(maxETelec1.gsfTrack()->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS)); - - if ((numberOfInnerHits > maxNumberOfExpectedMissingHits1_) && useExpectedMissingHits1_) { - delete[] sorted; - delete[] et; - return false; - } - - if (calculateExpectedMissingHits1_) { - maxETelec1.addUserInt("NumberOfExpectedMissingHits", numberOfInnerHits); - } - } - - if (useExpectedMissingHits2_ || calculateExpectedMissingHits2_) { - Int_t numberOfInnerHits = - (Int_t)(maxETelec2.gsfTrack()->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS)); - - if ((numberOfInnerHits > maxNumberOfExpectedMissingHits2_) && useExpectedMissingHits2_) { - delete[] sorted; - delete[] et; - return false; - } - - if (calculateExpectedMissingHits2_) { - maxETelec2.addUserInt("NumberOfExpectedMissingHits", numberOfInnerHits); - } - } - - if (useConversionRejection1_ || calculateConversionRejection1_) { - edm::Handle ctfTracks; - - if (iEvent.getByToken(tracksToken_, ctfTracks)) { - Float_t dist = maxETelec1.convDist(); - Float_t dcot = maxETelec1.convDcot(); - - Bool_t isConv = ((TMath::Abs(dist) < dist1_) && (TMath::Abs(dcot) < dcot1_)); - - std::cout << "Filter: for electron #1 the conversion says " << isConv << std::endl; - - if (isConv && useConversionRejection1_) { - delete[] sorted; - delete[] et; - return false; - } - - if (calculateConversionRejection1_) { - maxETelec1.addUserFloat("Dist", Float_t(dist)); - maxETelec1.addUserFloat("Dcot", Float_t(dcot)); - - if (isConv) { - maxETelec1.addUserInt("PassConversionRejection", 0); - } else { - maxETelec1.addUserInt("PassConversionRejection", 1); - } - } - - } else { - std::cout << "WARNING! Track Collection with input name: generalTracks was not found. Conversion Rejection for " - "electron #1 is not going to be applied!!!" - << std::endl; - } - } - - if (useConversionRejection2_ || calculateConversionRejection2_) { - edm::Handle ctfTracks; - - if (iEvent.getByToken(tracksToken_, ctfTracks)) { - Float_t dist = maxETelec2.convDist(); - Float_t dcot = maxETelec2.convDcot(); - - Bool_t isConv = ((TMath::Abs(dist) < dist2_) && (TMath::Abs(dcot) < dcot2_)); - - std::cout << "Filter: for electron #2 the conversion says " << isConv << std::endl; - - if (isConv && useConversionRejection2_) { - delete[] sorted; - delete[] et; - return false; - } - - if (calculateConversionRejection2_) { - maxETelec2.addUserFloat("Dist", Float_t(dist)); - maxETelec2.addUserFloat("Dcot", Float_t(dcot)); - - if (isConv) { - maxETelec2.addUserInt("PassConversionRejection", 0); - } else { - maxETelec2.addUserInt("PassConversionRejection", 1); - } - } - - } else { - std::cout << "WARNING! Track Collection with input name: generalTracks was not found. Conversion Rejection for " - "electron #2 is not going to be applied!!!" - << std::endl; - } - } - - std::cout << "HLT matching starts" << std::endl; - - if (electronMatched2HLT_ && useTriggerInfo_) { - Double_t matched_dr_distance1 = 999999.; - Int_t trigger_int_probe1 = 0; - - Double_t matched_dr_distance2 = 999999.; - Int_t trigger_int_probe2 = 0; - - if (finalpathfound) { - if (nF != filterInd) { - const trigger::Keys &KEYS(pHLT->filterKeys(filterInd)); - const Int_t nK(KEYS.size()); - - std::cout << "Found trig objects #" << nK << std::endl; - - for (Int_t iTrig = 0; iTrig < nK; ++iTrig) { - const trigger::TriggerObject &TO(TOC[KEYS[iTrig]]); - - if (useHLTObjectETCut_) { - if (TO.et() < hltObjectETCut_) { - continue; - } - } - - Double_t dr_ele_HLT1 = - reco::deltaR(maxETelec1.superCluster()->eta(), maxETelec1.superCluster()->phi(), TO.eta(), TO.phi()); - Double_t dr_ele_HLT2 = - reco::deltaR(maxETelec2.superCluster()->eta(), maxETelec2.superCluster()->phi(), TO.eta(), TO.phi()); - - //std::cout << "-->found dr=" << dr_ele_HLT << std::endl; - - if (TMath::Abs(dr_ele_HLT1) < matched_dr_distance1) { - matched_dr_distance1 = dr_ele_HLT1; - } - - if (TMath::Abs(dr_ele_HLT2) < matched_dr_distance2) { - matched_dr_distance2 = dr_ele_HLT2; - } - } - } - - if (useExtraTrigger_) { - for (Int_t itrig = 0; itrig < (Int_t)filterIndExtra.size(); ++itrig) { - if (filterIndExtra[itrig] == nF) { - continue; - } - - std::cout << "working on #" << itrig << std::endl; - std::cout << " ---> " << filterIndExtra[itrig] << std::endl; - - const trigger::Keys &KEYS(pHLT->filterKeys(filterIndExtra[itrig])); - const Int_t nK(KEYS.size()); - - std::cout << "Found trig objects #" << nK << std::endl; - - for (Int_t iTrig = 0; iTrig < nK; ++iTrig) { - const trigger::TriggerObject &TO(TOC[KEYS[iTrig]]); - - Double_t dr_ele_HLT1 = reco::deltaR(maxETelec1.eta(), maxETelec1.phi(), TO.eta(), TO.phi()); - Double_t dr_ele_HLT2 = reco::deltaR(maxETelec2.eta(), maxETelec2.phi(), TO.eta(), TO.phi()); - - //std::cout << "-->found dr=" << dr_ele_HLT << std::endl; - - if (TMath::Abs(dr_ele_HLT1) < matched_dr_distance1) { - matched_dr_distance1 = dr_ele_HLT1; - } - - if (TMath::Abs(dr_ele_HLT2) < matched_dr_distance2) { - matched_dr_distance2 = dr_ele_HLT2; - } - } - } - } - - if (matched_dr_distance1 < electronMatched2HLT_DR_) { - ++trigger_int_probe1; - } - - if (matched_dr_distance2 < electronMatched2HLT_DR_) { - ++trigger_int_probe2; - } - - if ((trigger_int_probe1 == 0) && (trigger_int_probe2 == 0)) { - std::cout << "No electron could be matched to an HLT object with " << std::endl; - - delete[] sorted; - delete[] et; - - return false; // RETURN: electron is not matched to an HLT object - } - - maxETelec1.addUserFloat("HLTMatchingDR", Float_t(matched_dr_distance1)); - maxETelec2.addUserFloat("HLTMatchingDR", Float_t(matched_dr_distance2)); - - } else { //std::cout << "Electron filter not found - should not be like that... " << std::endl; - - delete[] sorted; - delete[] et; - - return false; // RETURN: electron is not matched to an HLT object - } - } - - std::cout << "HLT matching has finished" << std::endl; - - // ___________________________________________________________________ - // - - // add information of whether the event passes the following sets of - // triggers. Currently Hardwired, to be changed in the future - - if (HLTResults.isValid()) { - const std::string process = triggerCollectionTag_.process(); - // - std::string HLTPath[18]; - HLTPath[0] = "HLT_Photon10_L1R"; - HLTPath[1] = "HLT_Photon15_L1R"; - HLTPath[2] = "HLT_Photon20_L1R"; - HLTPath[3] = "HLT_Photon15_TrackIso_L1R"; - HLTPath[4] = "HLT_Photon15_LooseEcalIso_L1R"; - HLTPath[5] = "HLT_Photon30_L1R_8E29"; - HLTPath[6] = "HLT_Photon30_L1R_8E29"; - HLTPath[7] = "HLT_Ele10_LW_L1R"; - HLTPath[8] = "HLT_Ele15_LW_L1R"; - HLTPath[9] = "HLT_Ele20_LW_L1R"; - HLTPath[10] = "HLT_Ele10_LW_EleId_L1R"; - HLTPath[11] = "HLT_Ele15_SiStrip_L1R"; - HLTPath[12] = "HLT_IsoTrackHB_8E29"; - HLTPath[13] = "HLT_IsoTrackHE_8E29"; - HLTPath[14] = "HLT_DiJetAve15U_8E29"; - HLTPath[15] = "HLT_MET45"; - HLTPath[16] = "HLT_L1MET20"; - HLTPath[17] = "HLT_MET100"; - // - edm::InputTag HLTFilterType[15]; - HLTFilterType[0] = - edm::InputTag("hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter", "", process); //HLT_Photon10_L1R - HLTFilterType[1] = - edm::InputTag("hltL1NonIsoHLTNonIsoSinglePhotonEt15HcalIsolFilter", "", process); //HLT_Photon15_L1R - HLTFilterType[2] = - edm::InputTag("hltL1NonIsoHLTNonIsoSinglePhotonEt20HcalIsolFilter", "", process); //HLT_Photon20_L1R - HLTFilterType[3] = - edm::InputTag("hltL1NonIsoSinglePhotonEt15HTITrackIsolFilter", "", process); //HLT_Photon15_TrackIso_L1R - HLTFilterType[4] = - edm::InputTag("hltL1NonIsoSinglePhotonEt15LEIHcalIsolFilter", "", process); //HLT_Photon15_LooseEcalIso_L1R - HLTFilterType[5] = - edm::InputTag("hltL1NonIsoHLTNonIsoSinglePhotonEt15EtFilterESet308E29", "", process); //HLT_Photon30_L1R_8E29 - HLTFilterType[6] = - edm::InputTag("hltL1NonIsoHLTNonIsoSinglePhotonEt15HcalIsolFilter", "", process); //HLT_Photon30_L1R_8E29 - HLTFilterType[7] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt10PixelMatchFilter", "", process); - HLTFilterType[8] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15PixelMatchFilter", "", process); - HLTFilterType[9] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15EtFilterESet20", "", process); - HLTFilterType[10] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt10EleIdDphiFilter", "", process); - HLTFilterType[11] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronSiStripEt15PixelMatchFilter", "", process); - HLTFilterType[12] = edm::InputTag("hltIsolPixelTrackL3FilterHB8E29", "", process); - HLTFilterType[13] = edm::InputTag("hltIsolPixelTrackL2FilterHE8E29", "", process); - HLTFilterType[14] = edm::InputTag("hltL1sDiJetAve15U8E29", "", process); - // - Int_t triggerDecision = 0; - UInt_t trigger_size = HLTResults->size(); - - for (Int_t i = 0; i < 18; ++i) { - const edm::TriggerNames &triggerNames = iEvent.triggerNames(*HLTResults); - UInt_t trigger_position = triggerNames.triggerIndex(HLTPath[i]); - Int_t passTrigger = 0; - - if (trigger_position < trigger_size) { - passTrigger = (Int_t)HLTResults->accept(trigger_position); - } - - if (passTrigger > 0) { - if (i >= 15) { - triggerDecision += (Int_t)(TMath::Power(2, i)); - } else { - const Int_t myfilterInd = pHLT->filterIndex(HLTFilterType[i]); - if (myfilterInd != nF) { - triggerDecision += (Int_t)(TMath::Power(2, i)); - } - } - } - } - - // add the info in the maxETelec1 and maxETelec2 - maxETelec1.addUserInt("triggerDecision", triggerDecision); - maxETelec2.addUserInt("triggerDecision", triggerDecision); - } - - // ___________________________________________________________________ - // - - // MET Collection - edm::Handle patMET; - iEvent.getByToken(metCollectionToken_, patMET); - - edm::Handle patpfMET; - iEvent.getByToken(pfMetCollectionToken_, patpfMET); - - edm::Handle pattcMET; - iEvent.getByToken(tcMetCollectionToken_, pattcMET); - - const pat::METCollection *pMet = patMET.product(); - const pat::METCollection::const_iterator met = pMet->begin(); - const pat::MET theMET = *met; - // - const pat::METCollection *pPfMet = patpfMET.product(); - const pat::METCollection::const_iterator pfmet = pPfMet->begin(); - const pat::MET thePfMET = *pfmet; - // - const pat::METCollection *pTcMet = pattcMET.product(); - const pat::METCollection::const_iterator tcmet = pTcMet->begin(); - const pat::MET theTcMET = *tcmet; - - Double_t metEt = met->et(); - //Double_t metEta = met->eta(); - //Double_t metMt = met->mt(); - //Double_t metPhi = met->phi(); - //Double_t metSig = met->mEtSig(); - //std::cout<<"met properties: et=" << met->et() << ", eta: " << met->eta() - // << std::endl; - // - if (metEt < METCut_) { - std::cout << "MET is " << metEt << std::endl; - - delete[] sorted; - delete[] et; - - return false; // RETURN if MET is < Metcut - } - - // if you have indeed reached this point then you have a zeeCandidate!!! - - pat::CompositeCandidate zeeCandidate; - - zeeCandidate.addDaughter(maxETelec1, "electron1"); - zeeCandidate.addDaughter(maxETelec2, "electron2"); - - zeeCandidate.addDaughter(theMET, "met"); - zeeCandidate.addDaughter(thePfMET, "pfmet"); - zeeCandidate.addDaughter(theTcMET, "tcmet"); - - unique_ptr selectedZeeCandidates(new pat::CompositeCandidateCollection); - - selectedZeeCandidates->push_back(zeeCandidate); - - iEvent.put(std::move(selectedZeeCandidates), "selectedZeeCandidates"); - - // release your memory - delete[] sorted; - delete[] et; - - std::cout << "Run = " << iEvent.run() << " " - << "Lumi = " << (Int_t)iEvent.luminosityBlock() << " " - << "Event = " << iEvent.eventAuxiliary().event() << " " - << "FILTER-MSG: Event Accepted for Z Candidate" << std::endl; - - return true; -} - -// ------------ method called once each job just after ending the event loop - -void ZeeCandidateFilter::endJob() {} - -Bool_t ZeeCandidateFilter::isInFiducial(Double_t eta) { - if (TMath::Abs(eta) < BarrelMaxEta_) { - return true; - } else if ((TMath::Abs(eta) < EndCapMaxEta_) && (TMath::Abs(eta) > EndCapMinEta_)) { - return true; - } - - return false; -} - -// Bool_t ZeeCandidateFilter::passEleIDCuts(pat::Electron *ele) -// { -// if ( ! useVetoSecondElectronID_) return true; -// if ( ! ele->isElectronIDAvailable(vetoSecondElectronIDType_) ) { -// std::cout << "ZeeCandidateFilter: request ignored: 2nd electron ID type " -// << "not found in electron object" << std::endl; -// return true; -// } -// if ( vetoSecondElectronIDSign_ == ">" ) { -// if ( ele->electronID(vetoSecondElectronIDType_)>vetoSecondElectronIDValue_) -// return true; -// else return false; -// } -// else if ( vetoSecondElectronIDSign_ == "<" ) { -// if ( ele->electronID(vetoSecondElectronIDType_)electronID(vetoSecondElectronIDType_)- -// vetoSecondElectronIDValue_) < 0.1) -// return true; -// else return false; -// } -// } - -//define this as a plug-in -DEFINE_FWK_MODULE(ZeeCandidateFilter); diff --git a/ElectroWeakAnalysis/ZEE/src/ZeePlots.cc b/ElectroWeakAnalysis/ZEE/src/ZeePlots.cc deleted file mode 100644 index 719adcea332b6..0000000000000 --- a/ElectroWeakAnalysis/ZEE/src/ZeePlots.cc +++ /dev/null @@ -1,1555 +0,0 @@ -// -*- C++ -*- -// -// Package: ZeePlots -// Class: ZeePlots -// -/* - - Description: - this is an analyzer that reads pat::CompositeCandidate ZeeCandidates and creates some plots - For more details see also WenuPlots class description - Implementation: - 09Dec09: option to have a different selection for the 2nd leg of the Z added - 24Feb10: more variables added E/P and TIP - option to choose CMSSW defined electron ID, the same or different - for each leg - - Contact: - Stilianos Kesisoglou - Institute of Nuclear Physics - NCSR Demokritos - -*/ -// -// Original Author: Nikolaos Rompotis - -#include "ElectroWeakAnalysis/ZEE/interface/ZeePlots.h" - -#include "DataFormats/Math/interface/deltaR.h" - -ZeePlots::ZeePlots(const edm::ParameterSet &iConfig) { - // I N P U T P A R A M E T E R S - /////// - // ZEE COLLECTION ////////////////////////////////////////////////////// - // - - zeeCollectionToken_ = - consumes(iConfig.getUntrackedParameter("zeeCollectionTag")); - - // code parameters - // - std::string outputFile_D = "histos.root"; - outputFile_ = iConfig.getUntrackedParameter("outputFile", outputFile_D); - - ZEE_VBTFselectionFileName_ = iConfig.getUntrackedParameter("ZEE_VBTFselectionFileName"); - ZEE_VBTFpreseleFileName_ = iConfig.getUntrackedParameter("ZEE_VBTFpreseleFileName"); - - DatasetTag_ = iConfig.getUntrackedParameter("DatasetTag"); - - useSameSelectionOnBothElectrons_ = iConfig.getUntrackedParameter("useSameSelectionOnBothElectrons", false); - - // Here choose if the two legs will be treated individually or not. - // - if (useSameSelectionOnBothElectrons_) { - // use of precalculatedID. if you use it, then no other cuts are applied - - /* Electron 1 */ - usePrecalcID1_ = iConfig.getUntrackedParameter("usePrecalcID0", false); - - if (usePrecalcID1_) { - usePrecalcIDType1_ = iConfig.getUntrackedParameter("usePrecalcIDType0"); - usePrecalcIDSign1_ = iConfig.getUntrackedParameter("usePrecalcIDSign0", "="); - usePrecalcIDValue1_ = iConfig.getUntrackedParameter("usePrecalcIDValue0"); - - std::cout << "ZeePlots: WARNING: you have chosen to use CMSSW precalculated ID for electron #1 with name: >>> " - << usePrecalcIDType1_ << " <<< such that the value map " << usePrecalcIDSign1_ << " " - << usePrecalcIDValue1_ << std::endl; - } - - /* Electron 2 */ - usePrecalcID2_ = iConfig.getUntrackedParameter("usePrecalcID0", false); - - if (usePrecalcID2_) { - usePrecalcIDType2_ = iConfig.getUntrackedParameter("usePrecalcIDType0"); - usePrecalcIDSign2_ = iConfig.getUntrackedParameter("usePrecalcIDSign0", "="); - usePrecalcIDValue2_ = iConfig.getUntrackedParameter("usePrecalcIDValue0"); - - std::cout << "ZeePlots: WARNING: you have chosen to use CMSSW precalculated ID for electron #2 with name: >>> " - << usePrecalcIDType2_ << " <<< such that the value map " << usePrecalcIDSign2_ << " " - << usePrecalcIDValue2_ << std::endl; - } - - // use of preselection - // - useValidFirstPXBHit1_ = iConfig.getUntrackedParameter("useValidFirstPXBHit0", false); - useValidFirstPXBHit2_ = iConfig.getUntrackedParameter("useValidFirstPXBHit0", false); - - useConversionRejection1_ = iConfig.getUntrackedParameter("useConversionRejection0", false); - useConversionRejection2_ = iConfig.getUntrackedParameter("useConversionRejection0", false); - - useExpectedMissingHits1_ = iConfig.getUntrackedParameter("useExpectedMissingHits0", false); - useExpectedMissingHits2_ = iConfig.getUntrackedParameter("useExpectedMissingHits0", false); - - maxNumberOfExpectedMissingHits1_ = iConfig.getUntrackedParameter("maxNumberOfExpectedMissingHits0", 1); - maxNumberOfExpectedMissingHits2_ = iConfig.getUntrackedParameter("maxNumberOfExpectedMissingHits0", 1); - - // Selection Cuts: - // - - /* Electron 1 */ - trackIso1_EB_ = iConfig.getUntrackedParameter("trackIso0_EB", 1000.0); - trackIso1_EE_ = iConfig.getUntrackedParameter("trackIso0_EE", 1000.0); - ecalIso1_EB_ = iConfig.getUntrackedParameter("ecalIso0_EB", 1000.0); - ecalIso1_EE_ = iConfig.getUntrackedParameter("ecalIso0_EE", 1000.0); - hcalIso1_EB_ = iConfig.getUntrackedParameter("hcalIso0_EB", 1000.0); - hcalIso1_EE_ = iConfig.getUntrackedParameter("hcalIso0_EE", 1000.0); - - sihih1_EB_ = iConfig.getUntrackedParameter("sihih0_EB"); - sihih1_EE_ = iConfig.getUntrackedParameter("sihih0_EE"); - dphi1_EB_ = iConfig.getUntrackedParameter("dphi0_EB"); - dphi1_EE_ = iConfig.getUntrackedParameter("dphi0_EE"); - deta1_EB_ = iConfig.getUntrackedParameter("deta0_EB"); - deta1_EE_ = iConfig.getUntrackedParameter("deta0_EE"); - hoe1_EB_ = iConfig.getUntrackedParameter("hoe0_EB"); - hoe1_EE_ = iConfig.getUntrackedParameter("hoe0_EE"); - cIso1_EB_ = iConfig.getUntrackedParameter("cIso0_EB", 1000.0); - cIso1_EE_ = iConfig.getUntrackedParameter("cIso0_EE", 1000.0); - tip_bspot1_EB_ = iConfig.getUntrackedParameter("tip_bspot0_EB", 1000.0); - tip_bspot1_EE_ = iConfig.getUntrackedParameter("tip_bspot0_EE", 1000.0); - eop1_EB_ = iConfig.getUntrackedParameter("eop0_EB", 1000.0); - eop1_EE_ = iConfig.getUntrackedParameter("eop0_EE", 1000.0); - - trackIsoUser1_EB_ = iConfig.getUntrackedParameter("trackIsoUser0_EB", 1000.0); - trackIsoUser1_EE_ = iConfig.getUntrackedParameter("trackIsoUser0_EE", 1000.0); - ecalIsoUser1_EB_ = iConfig.getUntrackedParameter("ecalIsoUser0_EB", 1000.0); - ecalIsoUser1_EE_ = iConfig.getUntrackedParameter("ecalIsoUser0_EE", 1000.0); - hcalIsoUser1_EB_ = iConfig.getUntrackedParameter("hcalIsoUser0_EB", 1000.0); - hcalIsoUser1_EE_ = iConfig.getUntrackedParameter("hcalIsoUser0_EE", 1000.0); - - // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - - trackIso1_EB_inv = iConfig.getUntrackedParameter("trackIso0_EB_inv", false); - trackIso1_EE_inv = iConfig.getUntrackedParameter("trackIso0_EE_inv", false); - ecalIso1_EB_inv = iConfig.getUntrackedParameter("ecalIso0_EB_inv", false); - ecalIso1_EE_inv = iConfig.getUntrackedParameter("ecalIso0_EE_inv", false); - hcalIso1_EB_inv = iConfig.getUntrackedParameter("hcalIso0_EB_inv", false); - hcalIso1_EE_inv = iConfig.getUntrackedParameter("hcalIso0_EE_inv", false); - - sihih1_EB_inv = iConfig.getUntrackedParameter("sihih0_EB_inv", false); - sihih1_EE_inv = iConfig.getUntrackedParameter("sihih0_EE_inv", false); - dphi1_EB_inv = iConfig.getUntrackedParameter("dphi0_EB_inv", false); - dphi1_EE_inv = iConfig.getUntrackedParameter("dphi0_EE_inv", false); - deta1_EB_inv = iConfig.getUntrackedParameter("deta0_EB_inv", false); - deta1_EE_inv = iConfig.getUntrackedParameter("deta0_EE_inv", false); - hoe1_EB_inv = iConfig.getUntrackedParameter("hoe0_EB_inv", false); - hoe1_EE_inv = iConfig.getUntrackedParameter("hoe0_EE_inv", false); - cIso1_EB_inv = iConfig.getUntrackedParameter("cIso0_EB_inv", false); - cIso1_EE_inv = iConfig.getUntrackedParameter("cIso0_EE_inv", false); - tip_bspot1_EB_inv = iConfig.getUntrackedParameter("tip_bspot0_EB_inv", false); - tip_bspot1_EE_inv = iConfig.getUntrackedParameter("tip_bspot0_EE_inv", false); - eop1_EB_inv = iConfig.getUntrackedParameter("eop0_EB_inv", false); - eop1_EE_inv = iConfig.getUntrackedParameter("eop0_EE_inv", false); - - trackIsoUser1_EB_inv = iConfig.getUntrackedParameter("trackIsoUser0_EB_inv", false); - trackIsoUser1_EE_inv = iConfig.getUntrackedParameter("trackIsoUser0_EE_inv", false); - ecalIsoUser1_EB_inv = iConfig.getUntrackedParameter("ecalIsoUser0_EB_inv", false); - ecalIsoUser1_EE_inv = iConfig.getUntrackedParameter("ecalIsoUser0_EE_inv", false); - hcalIsoUser1_EB_inv = iConfig.getUntrackedParameter("hcalIsoUser0_EB_inv", false); - hcalIsoUser1_EE_inv = iConfig.getUntrackedParameter("hcalIsoUser0_EE_inv", false); - - /* Electron 2 */ - trackIso2_EB_ = iConfig.getUntrackedParameter("trackIso0_EB", 1000.0); - trackIso2_EE_ = iConfig.getUntrackedParameter("trackIso0_EE", 1000.0); - ecalIso2_EB_ = iConfig.getUntrackedParameter("ecalIso0_EB", 1000.0); - ecalIso2_EE_ = iConfig.getUntrackedParameter("ecalIso0_EE", 1000.0); - hcalIso2_EB_ = iConfig.getUntrackedParameter("hcalIso0_EB", 1000.0); - hcalIso2_EE_ = iConfig.getUntrackedParameter("hcalIso0_EE", 1000.0); - - sihih2_EB_ = iConfig.getUntrackedParameter("sihih0_EB"); - sihih2_EE_ = iConfig.getUntrackedParameter("sihih0_EE"); - dphi2_EB_ = iConfig.getUntrackedParameter("dphi0_EB"); - dphi2_EE_ = iConfig.getUntrackedParameter("dphi0_EE"); - deta2_EB_ = iConfig.getUntrackedParameter("deta0_EB"); - deta2_EE_ = iConfig.getUntrackedParameter("deta0_EE"); - hoe2_EB_ = iConfig.getUntrackedParameter("hoe0_EB"); - hoe2_EE_ = iConfig.getUntrackedParameter("hoe0_EE"); - cIso2_EB_ = iConfig.getUntrackedParameter("cIso0_EB", 1000.0); - cIso2_EE_ = iConfig.getUntrackedParameter("cIso0_EE", 1000.0); - tip_bspot2_EB_ = iConfig.getUntrackedParameter("tip_bspot0_EB", 1000.0); - tip_bspot2_EE_ = iConfig.getUntrackedParameter("tip_bspot0_EE", 1000.0); - eop2_EB_ = iConfig.getUntrackedParameter("eop0_EB", 1000.0); - eop2_EE_ = iConfig.getUntrackedParameter("eop0_EE", 1000.0); - - trackIsoUser2_EB_ = iConfig.getUntrackedParameter("trackIsoUser0_EB", 1000.0); - trackIsoUser2_EE_ = iConfig.getUntrackedParameter("trackIsoUser0_EE", 1000.0); - ecalIsoUser2_EB_ = iConfig.getUntrackedParameter("ecalIsoUser0_EB", 1000.0); - ecalIsoUser2_EE_ = iConfig.getUntrackedParameter("ecalIsoUser0_EE", 1000.0); - hcalIsoUser2_EB_ = iConfig.getUntrackedParameter("hcalIsoUser0_EB", 1000.0); - hcalIsoUser2_EE_ = iConfig.getUntrackedParameter("hcalIsoUser0_EE", 1000.0); - - // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - - trackIso2_EB_inv = iConfig.getUntrackedParameter("trackIso0_EB_inv", false); - trackIso2_EE_inv = iConfig.getUntrackedParameter("trackIso0_EE_inv", false); - ecalIso2_EB_inv = iConfig.getUntrackedParameter("ecalIso0_EB_inv", false); - ecalIso2_EE_inv = iConfig.getUntrackedParameter("ecalIso0_EE_inv", false); - hcalIso2_EB_inv = iConfig.getUntrackedParameter("hcalIso0_EB_inv", false); - hcalIso2_EE_inv = iConfig.getUntrackedParameter("hcalIso0_EE_inv", false); - - sihih2_EB_inv = iConfig.getUntrackedParameter("sihih0_EB_inv", false); - sihih2_EE_inv = iConfig.getUntrackedParameter("sihih0_EE_inv", false); - dphi2_EB_inv = iConfig.getUntrackedParameter("dphi0_EB_inv", false); - dphi2_EE_inv = iConfig.getUntrackedParameter("dphi0_EE_inv", false); - deta2_EB_inv = iConfig.getUntrackedParameter("deta0_EB_inv", false); - deta2_EE_inv = iConfig.getUntrackedParameter("deta0_EE_inv", false); - hoe2_EB_inv = iConfig.getUntrackedParameter("hoe0_EB_inv", false); - hoe2_EE_inv = iConfig.getUntrackedParameter("hoe0_EE_inv", false); - cIso2_EB_inv = iConfig.getUntrackedParameter("cIso0_EB_inv", false); - cIso2_EE_inv = iConfig.getUntrackedParameter("cIso0_EE_inv", false); - tip_bspot2_EB_inv = iConfig.getUntrackedParameter("tip_bspot0_EB_inv", false); - tip_bspot2_EE_inv = iConfig.getUntrackedParameter("tip_bspot0_EE_inv", false); - eop2_EB_inv = iConfig.getUntrackedParameter("eop0_EB_inv", false); - eop2_EE_inv = iConfig.getUntrackedParameter("eop0_EE_inv", false); - - trackIsoUser2_EB_inv = iConfig.getUntrackedParameter("trackIsoUser0_EB_inv", false); - trackIsoUser2_EE_inv = iConfig.getUntrackedParameter("trackIsoUser0_EE_inv", false); - ecalIsoUser2_EB_inv = iConfig.getUntrackedParameter("ecalIsoUser0_EB_inv", false); - ecalIsoUser2_EE_inv = iConfig.getUntrackedParameter("ecalIsoUser0_EE_inv", false); - hcalIsoUser2_EB_inv = iConfig.getUntrackedParameter("hcalIsoUser0_EB_inv", false); - hcalIsoUser2_EE_inv = iConfig.getUntrackedParameter("hcalIsoUser0_EE_inv", false); - - } else { - // use of precalculatedID. if you use it, then no other cuts are applied - - /* Electron 1 */ - usePrecalcID1_ = iConfig.getUntrackedParameter("usePrecalcID1", false); - - if (usePrecalcID1_) { - usePrecalcIDType1_ = iConfig.getUntrackedParameter("usePrecalcIDType1"); - usePrecalcIDSign1_ = iConfig.getUntrackedParameter("usePrecalcIDSign1", "="); - usePrecalcIDValue1_ = iConfig.getUntrackedParameter("usePrecalcIDValue1"); - - std::cout << "ZeePlots: WARNING: you have chosen to use CMSSW precalculated ID for electron #1 with name: >>> " - << usePrecalcIDType1_ << " <<< such that the value map " << usePrecalcIDSign1_ << " " - << usePrecalcIDValue1_ << std::endl; - } - - /* Electron 2 */ - usePrecalcID2_ = iConfig.getUntrackedParameter("usePrecalcID2", false); - - if (usePrecalcID2_) { - usePrecalcIDType2_ = iConfig.getUntrackedParameter("usePrecalcIDType2"); - usePrecalcIDSign2_ = iConfig.getUntrackedParameter("usePrecalcIDSign2", "="); - usePrecalcIDValue2_ = iConfig.getUntrackedParameter("usePrecalcIDValue2"); - - std::cout << "ZeePlots: WARNING: you have chosen to use CMSSW precalculated ID for electron #2 with name: >>> " - << usePrecalcIDType2_ << " <<< such that the value map " << usePrecalcIDSign2_ << " " - << usePrecalcIDValue2_ << std::endl; - } - - // use of preselection - // - useValidFirstPXBHit1_ = iConfig.getUntrackedParameter("useValidFirstPXBHit1", false); - useValidFirstPXBHit2_ = iConfig.getUntrackedParameter("useValidFirstPXBHit2", false); - - useConversionRejection1_ = iConfig.getUntrackedParameter("useConversionRejection1", false); - useConversionRejection2_ = iConfig.getUntrackedParameter("useConversionRejection2", false); - - useExpectedMissingHits1_ = iConfig.getUntrackedParameter("useExpectedMissingHits1", false); - useExpectedMissingHits2_ = iConfig.getUntrackedParameter("useExpectedMissingHits2", false); - - maxNumberOfExpectedMissingHits1_ = iConfig.getUntrackedParameter("maxNumberOfExpectedMissingHits1", 1); - maxNumberOfExpectedMissingHits2_ = iConfig.getUntrackedParameter("maxNumberOfExpectedMissingHits2", 1); - - // Selection Cuts: - // - - /* Electron 1 */ - trackIso1_EB_ = iConfig.getUntrackedParameter("trackIso1_EB", 1000.0); - trackIso1_EE_ = iConfig.getUntrackedParameter("trackIso1_EE", 1000.0); - ecalIso1_EB_ = iConfig.getUntrackedParameter("ecalIso1_EB", 1000.0); - ecalIso1_EE_ = iConfig.getUntrackedParameter("ecalIso1_EE", 1000.0); - hcalIso1_EB_ = iConfig.getUntrackedParameter("hcalIso1_EB", 1000.0); - hcalIso1_EE_ = iConfig.getUntrackedParameter("hcalIso1_EE", 1000.0); - - sihih1_EB_ = iConfig.getUntrackedParameter("sihih1_EB"); - sihih1_EE_ = iConfig.getUntrackedParameter("sihih1_EE"); - dphi1_EB_ = iConfig.getUntrackedParameter("dphi1_EB"); - dphi1_EE_ = iConfig.getUntrackedParameter("dphi1_EE"); - deta1_EB_ = iConfig.getUntrackedParameter("deta1_EB"); - deta1_EE_ = iConfig.getUntrackedParameter("deta1_EE"); - hoe1_EB_ = iConfig.getUntrackedParameter("hoe1_EB"); - hoe1_EE_ = iConfig.getUntrackedParameter("hoe1_EE"); - cIso1_EB_ = iConfig.getUntrackedParameter("cIso1_EB", 1000.0); - cIso1_EE_ = iConfig.getUntrackedParameter("cIso1_EE", 1000.0); - tip_bspot1_EB_ = iConfig.getUntrackedParameter("tip_bspot1_EB", 1000.0); - tip_bspot1_EE_ = iConfig.getUntrackedParameter("tip_bspot1_EE", 1000.0); - eop1_EB_ = iConfig.getUntrackedParameter("eop1_EB", 1000.0); - eop1_EE_ = iConfig.getUntrackedParameter("eop1_EE", 1000.0); - - trackIsoUser1_EB_ = iConfig.getUntrackedParameter("trackIsoUser1_EB", 1000.0); - trackIsoUser1_EE_ = iConfig.getUntrackedParameter("trackIsoUser1_EE", 1000.0); - ecalIsoUser1_EB_ = iConfig.getUntrackedParameter("ecalIsoUser1_EB", 1000.0); - ecalIsoUser1_EE_ = iConfig.getUntrackedParameter("ecalIsoUser1_EE", 1000.0); - hcalIsoUser1_EB_ = iConfig.getUntrackedParameter("hcalIsoUser1_EB", 1000.0); - hcalIsoUser1_EE_ = iConfig.getUntrackedParameter("hcalIsoUser1_EE", 1000.0); - // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - trackIso1_EB_inv = iConfig.getUntrackedParameter("trackIso1_EB_inv", false); - trackIso1_EE_inv = iConfig.getUntrackedParameter("trackIso1_EE_inv", false); - ecalIso1_EB_inv = iConfig.getUntrackedParameter("ecalIso1_EB_inv", false); - ecalIso1_EE_inv = iConfig.getUntrackedParameter("ecalIso1_EE_inv", false); - hcalIso1_EB_inv = iConfig.getUntrackedParameter("hcalIso1_EB_inv", false); - hcalIso1_EE_inv = iConfig.getUntrackedParameter("hcalIso1_EE_inv", false); - - sihih1_EB_inv = iConfig.getUntrackedParameter("sihih1_EB_inv", false); - sihih1_EE_inv = iConfig.getUntrackedParameter("sihih1_EE_inv", false); - dphi1_EB_inv = iConfig.getUntrackedParameter("dphi1_EB_inv", false); - dphi1_EE_inv = iConfig.getUntrackedParameter("dphi1_EE_inv", false); - deta1_EB_inv = iConfig.getUntrackedParameter("deta1_EB_inv", false); - deta1_EE_inv = iConfig.getUntrackedParameter("deta1_EE_inv", false); - hoe1_EB_inv = iConfig.getUntrackedParameter("hoe1_EB_inv", false); - hoe1_EE_inv = iConfig.getUntrackedParameter("hoe1_EE_inv", false); - cIso1_EB_inv = iConfig.getUntrackedParameter("cIso1_EB_inv", false); - cIso1_EE_inv = iConfig.getUntrackedParameter("cIso1_EE_inv", false); - tip_bspot1_EB_inv = iConfig.getUntrackedParameter("tip_bspot1_EB_inv", false); - tip_bspot1_EE_inv = iConfig.getUntrackedParameter("tip_bspot1_EE_inv", false); - eop1_EB_inv = iConfig.getUntrackedParameter("eop1_EB_inv", false); - eop1_EE_inv = iConfig.getUntrackedParameter("eop1_EE_inv", false); - - trackIsoUser1_EB_inv = iConfig.getUntrackedParameter("trackIsoUser1_EB_inv", false); - trackIsoUser1_EE_inv = iConfig.getUntrackedParameter("trackIsoUser1_EE_inv", false); - ecalIsoUser1_EB_inv = iConfig.getUntrackedParameter("ecalIsoUser1_EB_inv", false); - ecalIsoUser1_EE_inv = iConfig.getUntrackedParameter("ecalIsoUser1_EE_inv", false); - hcalIsoUser1_EB_inv = iConfig.getUntrackedParameter("hcalIsoUser1_EB_inv", false); - hcalIsoUser1_EE_inv = iConfig.getUntrackedParameter("hcalIsoUser1_EE_inv", false); - - /* Electron 2 */ - trackIso2_EB_ = iConfig.getUntrackedParameter("trackIso2_EB", 1000.0); - trackIso2_EE_ = iConfig.getUntrackedParameter("trackIso2_EE", 1000.0); - ecalIso2_EB_ = iConfig.getUntrackedParameter("ecalIso2_EB", 1000.0); - ecalIso2_EE_ = iConfig.getUntrackedParameter("ecalIso2_EE", 1000.0); - hcalIso2_EB_ = iConfig.getUntrackedParameter("hcalIso2_EB", 1000.0); - hcalIso2_EE_ = iConfig.getUntrackedParameter("hcalIso2_EE", 1000.0); - - sihih2_EB_ = iConfig.getUntrackedParameter("sihih2_EB"); - sihih2_EE_ = iConfig.getUntrackedParameter("sihih2_EE"); - dphi2_EB_ = iConfig.getUntrackedParameter("dphi2_EB"); - dphi2_EE_ = iConfig.getUntrackedParameter("dphi2_EE"); - deta2_EB_ = iConfig.getUntrackedParameter("deta2_EB"); - deta2_EE_ = iConfig.getUntrackedParameter("deta2_EE"); - hoe2_EB_ = iConfig.getUntrackedParameter("hoe2_EB"); - hoe2_EE_ = iConfig.getUntrackedParameter("hoe2_EE"); - cIso2_EB_ = iConfig.getUntrackedParameter("cIso2_EB", 1000.0); - cIso2_EE_ = iConfig.getUntrackedParameter("cIso2_EE", 1000.0); - tip_bspot2_EB_ = iConfig.getUntrackedParameter("tip_bspot2_EB", 1000.0); - tip_bspot2_EE_ = iConfig.getUntrackedParameter("tip_bspot2_EE", 1000.0); - eop2_EB_ = iConfig.getUntrackedParameter("eop2_EB", 1000.0); - eop2_EE_ = iConfig.getUntrackedParameter("eop2_EE", 1000.0); - - trackIsoUser2_EB_ = iConfig.getUntrackedParameter("trackIsoUser2_EB", 1000.0); - trackIsoUser2_EE_ = iConfig.getUntrackedParameter("trackIsoUser2_EE", 1000.0); - ecalIsoUser2_EB_ = iConfig.getUntrackedParameter("ecalIsoUser2_EB", 1000.0); - ecalIsoUser2_EE_ = iConfig.getUntrackedParameter("ecalIsoUser2_EE", 1000.0); - hcalIsoUser2_EB_ = iConfig.getUntrackedParameter("hcalIsoUser2_EB", 1000.0); - hcalIsoUser2_EE_ = iConfig.getUntrackedParameter("hcalIsoUser2_EE", 1000.0); - // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - trackIso2_EB_inv = iConfig.getUntrackedParameter("trackIso2_EB_inv", false); - trackIso2_EE_inv = iConfig.getUntrackedParameter("trackIso2_EE_inv", false); - ecalIso2_EB_inv = iConfig.getUntrackedParameter("ecalIso2_EB_inv", false); - ecalIso2_EE_inv = iConfig.getUntrackedParameter("ecalIso2_EE_inv", false); - hcalIso2_EB_inv = iConfig.getUntrackedParameter("hcalIso2_EB_inv", false); - hcalIso2_EE_inv = iConfig.getUntrackedParameter("hcalIso2_EE_inv", false); - - sihih2_EB_inv = iConfig.getUntrackedParameter("sihih2_EB_inv", false); - sihih2_EE_inv = iConfig.getUntrackedParameter("sihih2_EE_inv", false); - dphi2_EB_inv = iConfig.getUntrackedParameter("dphi2_EB_inv", false); - dphi2_EE_inv = iConfig.getUntrackedParameter("dphi2_EE_inv", false); - deta2_EB_inv = iConfig.getUntrackedParameter("deta2_EB_inv", false); - deta2_EE_inv = iConfig.getUntrackedParameter("deta2_EE_inv", false); - hoe2_EB_inv = iConfig.getUntrackedParameter("hoe2_EB_inv", false); - hoe2_EE_inv = iConfig.getUntrackedParameter("hoe2_EE_inv", false); - cIso2_EB_inv = iConfig.getUntrackedParameter("cIso2_EB_inv", false); - cIso2_EE_inv = iConfig.getUntrackedParameter("cIso2_EE_inv", false); - tip_bspot2_EB_inv = iConfig.getUntrackedParameter("tip_bspot2_EB_inv", false); - tip_bspot2_EE_inv = iConfig.getUntrackedParameter("tip_bspot2_EE_inv", false); - eop2_EB_inv = iConfig.getUntrackedParameter("eop2_EB_inv", false); - eop2_EE_inv = iConfig.getUntrackedParameter("eop2_EE_inv", false); - - trackIsoUser2_EB_inv = iConfig.getUntrackedParameter("trackIsoUser2_EB_inv", false); - trackIsoUser2_EE_inv = iConfig.getUntrackedParameter("trackIsoUser2_EE_inv", false); - ecalIsoUser2_EB_inv = iConfig.getUntrackedParameter("ecalIsoUser2_EB_inv", false); - ecalIsoUser2_EE_inv = iConfig.getUntrackedParameter("ecalIsoUser2_EE_inv", false); - hcalIsoUser2_EB_inv = iConfig.getUntrackedParameter("hcalIsoUser2_EB_inv", false); - hcalIsoUser2_EE_inv = iConfig.getUntrackedParameter("hcalIsoUser2_EE_inv", false); - } - - usePreselection1_ = (useValidFirstPXBHit1_ || useConversionRejection1_ || useExpectedMissingHits1_) ? true : false; - usePreselection2_ = (useValidFirstPXBHit2_ || useConversionRejection2_ || useExpectedMissingHits2_) ? true : false; - - // Display Massages - // - if (useValidFirstPXBHit1_) { - std::cout << "ZeePlots: Warning: you have demanded ValidFirstPXBHit on 1st electron" << std::endl; - } - if (useValidFirstPXBHit2_) { - std::cout << "ZeePlots: Warning: you have demanded ValidFirstPXBHit on 2nd electron" << std::endl; - } - if (useConversionRejection1_) { - std::cout << "ZeePlots: Warning: you have demanded Conversion Rejection on 1st electron" << std::endl; - } - if (useConversionRejection2_) { - std::cout << "ZeePlots: Warning: you have demanded Conversion Rejection on 2nd electron" << std::endl; - } - if (useExpectedMissingHits1_) { - std::cout << "ZeePlots: Warning: you have demanded Expected Missing Hits on 1st electron no more than " - << maxNumberOfExpectedMissingHits1_ << std::endl; - } - if (useExpectedMissingHits2_) { - std::cout << "ZeePlots: Warning: you have demanded Expected Missing Hits on 2nd electron no more than " - << maxNumberOfExpectedMissingHits2_ << std::endl; - } - - // JETS - // - includeJetInformationInNtuples_ = iConfig.getUntrackedParameter("includeJetInformationInNtuples", false); - - if (includeJetInformationInNtuples_) { - caloJetCollectionToken_ = - mayConsume(iConfig.getUntrackedParameter("caloJetCollectionTag")); - pfJetCollectionToken_ = - mayConsume(iConfig.getUntrackedParameter("pfJetCollectionTag")); - DRJetFromElectron_ = iConfig.getUntrackedParameter("DRJetFromElectron"); - } -} - -ZeePlots::~ZeePlots() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - -// -// member functions -// - -// ------------ method called to for each event ------------ -void ZeePlots::analyze(const edm::Event &iEvent, const edm::EventSetup &es) { - using namespace std; - // - // Get the collections here - // - edm::Handle ZeeCands; - iEvent.getByToken(zeeCollectionToken_, ZeeCands); - - if (!ZeeCands.isValid()) { - std::cout << "Warning: No valid Zee candidates in this event..." << std::endl; - return; - } - - const pat::CompositeCandidateCollection *zcands = ZeeCands.product(); - const pat::CompositeCandidateCollection::const_iterator zeeIter = zcands->begin(); - const pat::CompositeCandidate zee = *zeeIter; - - // get the parts of the composite candidate: - const pat::Electron *myElec1 = dynamic_cast(zee.daughter("electron1")); - const pat::Electron *myElec2 = dynamic_cast(zee.daughter("electron2")); - - const pat::MET *myMet = dynamic_cast(zee.daughter("met")); - const pat::MET *myPfMet = dynamic_cast(zee.daughter("pfmet")); - const pat::MET *myTcMet = dynamic_cast(zee.daughter("tcmet")); - - // _______________________________________________________________________ - // - // VBTF Root tuple production -------------------------------------------- - // _______________________________________________________________________ - // - // ....................................................................... - // vbtf produces 2 root tuples: one that contains the highest pT electrons - // that passes a user defined selection and one other with only the - // preselection criteria applied - // ....................................................................... - // - - // fill the tree variables - runNumber = iEvent.run(); - eventNumber = (Long64_t)(iEvent.eventAuxiliary().event()); - lumiSection = (Int_t)iEvent.luminosityBlock(); - - ele1_sc_eta = (Float_t)(myElec1->superCluster()->eta()); - ele1_sc_phi = (Float_t)(myElec1->superCluster()->phi()); - ele1_sc_energy = (Float_t)(myElec1->superCluster()->energy()); - ele1_sc_gsf_et = (Float_t)(myElec1->superCluster()->energy() / TMath::CosH(myElec1->gsfTrack()->eta())); - ele1_cand_eta = (Float_t)(myElec1->eta()); - ele1_cand_phi = (Float_t)(myElec1->phi()); - ele1_cand_et = (Float_t)(myElec1->et()); - - ele1_iso_track = (Float_t)(myElec1->dr03IsolationVariables().tkSumPt / ele1_cand_et); - ele1_iso_ecal = (Float_t)(myElec1->dr03IsolationVariables().ecalRecHitSumEt / ele1_cand_et); - ele1_iso_hcal = (Float_t)((myElec1->dr03IsolationVariables().hcalDepth1TowerSumEt + - myElec1->dr03IsolationVariables().hcalDepth2TowerSumEt) / - ele1_cand_et); - - ele1_id_sihih = (Float_t)(myElec1->sigmaIetaIeta()); - ele1_id_deta = (Float_t)(myElec1->deltaEtaSuperClusterTrackAtVtx()); - ele1_id_dphi = (Float_t)(myElec1->deltaPhiSuperClusterTrackAtVtx()); - ele1_id_hoe = (Float_t)(myElec1->hadronicOverEm()); - - ele1_cr_mhitsinner = - (Float_t)(myElec1->gsfTrack()->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS)); - ele1_cr_dcot = (Float_t)(myElec1->userFloat("Dcot")); - ele1_cr_dist = (Float_t)(myElec1->userFloat("Dist")); - - ele1_vx = (Float_t)(myElec1->vx()); - ele1_vy = (Float_t)(myElec1->vy()); - ele1_vz = (Float_t)(myElec1->vz()); - - pv_x1 = (Float_t)(myElec1->userFloat("pv_x")); - pv_y1 = (Float_t)(myElec1->userFloat("pv_y")); - pv_z1 = (Float_t)(myElec1->userFloat("pv_z")); - - ele1_gsfCharge = (Int_t)(myElec1->gsfTrack()->charge()); - ele1_ctfCharge = - (Int_t)(myElec1->closestCtfTrackRef().isNonnull() ? (myElec1->closestCtfTrackRef()->charge()) : -9999); - ele1_scPixCharge = (Int_t)(myElec1->chargeInfo().scPixCharge); - ele1_eop = (Float_t)(myElec1->eSuperClusterOverP()); - ele1_tip_bs = (Float_t)((-1.0) * myElec1->dB()); - ele1_tip_pv = (Float_t)(myElec1->userFloat("ele_tip_pv")); - - ele2_sc_eta = (Float_t)(myElec2->superCluster()->eta()); - ele2_sc_phi = (Float_t)(myElec2->superCluster()->phi()); - ele2_sc_energy = (Float_t)(myElec2->superCluster()->energy()); - ele2_sc_gsf_et = (Float_t)(myElec2->superCluster()->energy() / TMath::CosH(myElec2->gsfTrack()->eta())); - ele2_cand_eta = (Float_t)(myElec2->eta()); - ele2_cand_phi = (Float_t)(myElec2->phi()); - ele2_cand_et = (Float_t)(myElec2->et()); - - ele2_iso_track = (Float_t)(myElec2->dr03IsolationVariables().tkSumPt / ele2_cand_et); - ele2_iso_ecal = (Float_t)(myElec2->dr03IsolationVariables().ecalRecHitSumEt / ele2_cand_et); - ele2_iso_hcal = (Float_t)((myElec2->dr03IsolationVariables().hcalDepth1TowerSumEt + - myElec2->dr03IsolationVariables().hcalDepth2TowerSumEt) / - ele2_cand_et); - - ele2_id_sihih = (Float_t)(myElec2->sigmaIetaIeta()); - ele2_id_deta = (Float_t)(myElec2->deltaEtaSuperClusterTrackAtVtx()); - ele2_id_dphi = (Float_t)(myElec2->deltaPhiSuperClusterTrackAtVtx()); - ele2_id_hoe = (Float_t)(myElec2->hadronicOverEm()); - - ele2_cr_mhitsinner = - (Float_t)(myElec2->gsfTrack()->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS)); - ele2_cr_dcot = (Float_t)(myElec2->userFloat("Dcot")); - ele2_cr_dist = (Float_t)(myElec2->userFloat("Dist")); - - ele2_vx = (Float_t)(myElec2->vx()); - ele2_vy = (Float_t)(myElec2->vy()); - ele2_vz = (Float_t)(myElec2->vz()); - - pv_x2 = (Float_t)(myElec2->userFloat("pv_x")); - pv_y2 = (Float_t)(myElec2->userFloat("pv_y")); - pv_z2 = (Float_t)(myElec2->userFloat("pv_z")); - - ele2_gsfCharge = (Int_t)(myElec2->gsfTrack()->charge()); - ele2_ctfCharge = - (Int_t)(myElec2->closestCtfTrackRef().isNonnull() ? (myElec2->closestCtfTrackRef()->charge()) : -9999); - ele2_scPixCharge = (Int_t)(myElec2->chargeInfo().scPixCharge); - ele2_eop = (Float_t)(myElec2->eSuperClusterOverP()); - ele2_tip_bs = (Float_t)((-1.0) * myElec2->dB()); - ele2_tip_pv = (Float_t)(myElec2->userFloat("ele_tip_pv")); - - event_caloMET = (Float_t)(myMet->et()); - event_pfMET = (Float_t)(myPfMet->et()); - event_tcMET = (Float_t)(myTcMet->et()); - - event_caloMET_phi = (Float_t)(myMet->phi()); - event_pfMET_phi = (Float_t)(myPfMet->phi()); - event_tcMET_phi = (Float_t)(myTcMet->phi()); - - TLorentzVector p4e1; - TLorentzVector p4e2; - - p4e1.SetPtEtaPhiM(ele1_sc_gsf_et, ele1_cand_eta, ele1_cand_phi, 0.000511); - p4e2.SetPtEtaPhiM(ele2_sc_gsf_et, ele2_cand_eta, ele2_cand_phi, 0.000511); - - TLorentzVector Zp4 = p4e1 + p4e2; - - event_Mee = (Float_t)(Zp4.M()); - - event_datasetTag = DatasetTag_; - - // jet information - only if the user asks for it - // keep the 5 highest et jets of the event that are further than DR > DRJetFromElectron_ - - if (includeJetInformationInNtuples_) { - // initialize the array of the jet information - - for (Int_t i = 0; i < 5; ++i) { - calojet_et[i] = -999999; - calojet_eta[i] = -999999; - calojet_phi[i] = -999999; - - pfjet_et[i] = -999999; - pfjet_eta[i] = -999999; - pfjet_phi[i] = -999999; - } - - // get hold of the jet collections - edm::Handle pCaloJets; - iEvent.getByToken(caloJetCollectionToken_, pCaloJets); - - edm::Handle pPfJets; - iEvent.getByToken(pfJetCollectionToken_, pPfJets); - - // calo jets now: - if (pCaloJets.isValid()) { - const reco::CaloJetCollection *caloJets = pCaloJets.product(); - Int_t nCaloJets = (Int_t)(caloJets->size()); - - if (nCaloJets > 0) { - Float_t *nCaloET = new Float_t[nCaloJets]; - Float_t *nCaloEta = new Float_t[nCaloJets]; - Float_t *nCaloPhi = new Float_t[nCaloJets]; - - // reco::CaloJetCollection::const_iterator cjet = caloJets->begin(); - - Int_t counter = 0; - - for (reco::CaloJetCollection::const_iterator cjet = caloJets->begin(); cjet != caloJets->end(); ++cjet) { - // store them only if they are far enough from the electron - Double_t DR1 = reco::deltaR(cjet->eta(), cjet->phi(), myElec1->gsfTrack()->eta(), ele1_sc_phi); - Double_t DR2 = reco::deltaR(cjet->eta(), cjet->phi(), myElec2->gsfTrack()->eta(), ele2_sc_phi); - - if ((DR1 > DRJetFromElectron_) && (DR2 > DRJetFromElectron_)) { - nCaloET[counter] = cjet->et(); - nCaloEta[counter] = cjet->eta(); - nCaloPhi[counter] = cjet->phi(); - ++counter; - } - } - - Int_t *caloJetSorted = new Int_t[nCaloJets]; - - TMath::Sort(nCaloJets, nCaloET, caloJetSorted, true); - - for (Int_t i = 0; i < nCaloJets; ++i) { - if (i >= 5) { - break; - } - - calojet_et[i] = nCaloET[caloJetSorted[i]]; - calojet_eta[i] = nCaloEta[caloJetSorted[i]]; - calojet_phi[i] = nCaloPhi[caloJetSorted[i]]; - } - - delete[] caloJetSorted; - delete[] nCaloET; - delete[] nCaloEta; - delete[] nCaloPhi; - } - } - - // pf jets now: - if (pPfJets.isValid()) { - const reco::PFJetCollection *pfJets = pPfJets.product(); - Int_t nPfJets = (Int_t)pfJets->size(); - - if (nPfJets > 0) { - Float_t *nPfET = new Float_t[nPfJets]; - Float_t *nPfEta = new Float_t[nPfJets]; - Float_t *nPfPhi = new Float_t[nPfJets]; - - // reco::PFJetCollection::const_iterator pjet = pfJets->begin(); - - Int_t counter = 0; - - for (reco::PFJetCollection::const_iterator pjet = pfJets->begin(); pjet != pfJets->end(); ++pjet) { - // store them only if they are far enough from the electron - - Double_t DR1 = reco::deltaR(pjet->eta(), pjet->phi(), myElec1->gsfTrack()->eta(), ele1_sc_phi); - Double_t DR2 = reco::deltaR(pjet->eta(), pjet->phi(), myElec2->gsfTrack()->eta(), ele2_sc_phi); - - if ((DR1 > DRJetFromElectron_) && (DR2 > DRJetFromElectron_)) { - nPfET[counter] = pjet->et(); - nPfEta[counter] = pjet->eta(); - nPfPhi[counter] = pjet->phi(); - ++counter; - } - } - - Int_t *pfJetSorted = new Int_t[nPfJets]; - - TMath::Sort(nPfJets, nPfET, pfJetSorted, true); - - for (Int_t i = 0; i < nPfJets; ++i) { - if (i >= 5) { - break; - } - - pfjet_et[i] = nPfET[pfJetSorted[i]]; - pfjet_eta[i] = nPfEta[pfJetSorted[i]]; - pfjet_phi[i] = nPfPhi[pfJetSorted[i]]; - } - - delete[] pfJetSorted; - delete[] nPfET; - delete[] nPfEta; - delete[] nPfPhi; - } - } - } - - // if the electrons pass the selection - // it is meant to be a precalculated selection here, in order to include - // conversion rejection too - if (CheckCuts1(myElec1) && CheckCuts2(myElec2)) { - vbtfSele_tree->Fill(); - } - - vbtfPresele_tree->Fill(); - - // - // _______________________________________________________________________ - // - // histogram production -------------------------------------------------- - // _______________________________________________________________________ - // - // if you want some preselection: Conv rejection, hit pattern - - // if ( usePreselection_ ) { - // - // Bool_t a1 = PassPreselectionCriteria1(myElec1); - // Bool_t a2 = PassPreselectionCriteria2(myElec2); - // - // if ( ! (a1 && a2) ) { - // return ; - // } - // } - - Bool_t passPre1 = (usePreselection1_) ? PassPreselectionCriteria1(myElec1) : true; - Bool_t passPre2 = (usePreselection2_) ? PassPreselectionCriteria2(myElec2) : true; - - if (!(passPre1 && passPre2)) { - std::cout << "At least one electron fails preselection: Electron #1 = " << passPre1 - << " - Electron #2 = " << passPre2 << std::endl; - - return; - } - - TLorentzVector e1; - TLorentzVector e2; - - // math::XYZVector p1 = myElec1->trackMomentumAtVtx(); - // math::XYZVector p2 = myElec2->trackMomentumAtVtx(); - // e1.SetPxPyPzE(p1.X(), p1.Y(), p1.Z(), myElec1->caloEnergy()); - // e2.SetPxPyPzE(p2.X(), p2.Y(), p2.Z(), myElec2->caloEnergy()); - - // Use directly the et,eta,phi from pat::Electron; assume e mass = 0.000511 GeV - e1.SetPtEtaPhiM(myElec1->et(), myElec1->eta(), myElec1->phi(), 0.000511); - e2.SetPtEtaPhiM(myElec2->et(), myElec2->eta(), myElec2->phi(), 0.000511); - - TLorentzVector Z = e1 + e2; - - Double_t mee = Z.M(); - - // the selection plots: - Bool_t pass = (CheckCuts1(myElec1) && CheckCuts2(myElec2)); - - //cout << "This event passes? " << pass << ", mee is: " << mee - // << " and the histo is filled." << endl; - - if (!pass) { - return; - } - - h_mee->Fill(mee); - - if (TMath::Abs(e1.Eta()) < 1.479 && TMath::Abs(e2.Eta()) < 1.479) { - h_mee_EBEB->Fill(mee); - } - if (TMath::Abs(e1.Eta()) < 1.479 && TMath::Abs(e2.Eta()) > 1.479) { - h_mee_EBEE->Fill(mee); - } - if (TMath::Abs(e1.Eta()) > 1.479 && TMath::Abs(e2.Eta()) < 1.479) { - h_mee_EBEE->Fill(mee); - } - if (TMath::Abs(e1.Eta()) > 1.479 && TMath::Abs(e2.Eta()) > 1.479) { - h_mee_EEEE->Fill(mee); - } - - h_Zcand_PT->Fill(Z.Pt()); - h_Zcand_Y->Fill(Z.Rapidity()); - - h_e_PT->Fill(e1.Pt()); - h_e_PT->Fill(e2.Pt()); - h_e_ETA->Fill(e1.Eta()); - h_e_ETA->Fill(e2.Eta()); - h_e_PHI->Fill(e1.Phi()); - h_e_PHI->Fill(e2.Phi()); - - if (TMath::Abs(myElec1->eta()) < 1.479) { - h_EB_trkiso->Fill(ReturnCandVar(myElec1, 0)); - h_EB_ecaliso->Fill(ReturnCandVar(myElec1, 1)); - h_EB_hcaliso->Fill(ReturnCandVar(myElec1, 2)); - h_EB_sIetaIeta->Fill(myElec1->scSigmaIEtaIEta()); - h_EB_dphi->Fill(myElec1->deltaPhiSuperClusterTrackAtVtx()); - h_EB_deta->Fill(myElec1->deltaEtaSuperClusterTrackAtVtx()); - h_EB_HoE->Fill(myElec1->hadronicOverEm()); - } else { - h_EE_trkiso->Fill(ReturnCandVar(myElec1, 0)); - h_EE_ecaliso->Fill(ReturnCandVar(myElec1, 1)); - h_EE_hcaliso->Fill(ReturnCandVar(myElec1, 2)); - h_EE_sIetaIeta->Fill(myElec1->scSigmaIEtaIEta()); - h_EE_dphi->Fill(myElec1->deltaPhiSuperClusterTrackAtVtx()); - h_EE_deta->Fill(myElec1->deltaEtaSuperClusterTrackAtVtx()); - h_EE_HoE->Fill(myElec1->hadronicOverEm()); - } - - if (TMath::Abs(myElec2->eta()) < 1.479) { - h_EB_trkiso->Fill(ReturnCandVar(myElec2, 0)); - h_EB_ecaliso->Fill(ReturnCandVar(myElec2, 1)); - h_EB_hcaliso->Fill(ReturnCandVar(myElec2, 2)); - h_EB_sIetaIeta->Fill(myElec2->scSigmaIEtaIEta()); - h_EB_dphi->Fill(myElec2->deltaPhiSuperClusterTrackAtVtx()); - h_EB_deta->Fill(myElec2->deltaEtaSuperClusterTrackAtVtx()); - h_EB_HoE->Fill(myElec2->hadronicOverEm()); - } else { - h_EE_trkiso->Fill(ReturnCandVar(myElec2, 0)); - h_EE_ecaliso->Fill(ReturnCandVar(myElec2, 1)); - h_EE_hcaliso->Fill(ReturnCandVar(myElec2, 2)); - h_EE_sIetaIeta->Fill(myElec2->scSigmaIEtaIEta()); - h_EE_dphi->Fill(myElec2->deltaPhiSuperClusterTrackAtVtx()); - h_EE_deta->Fill(myElec2->deltaEtaSuperClusterTrackAtVtx()); - h_EE_HoE->Fill(myElec2->hadronicOverEm()); - } - - //Double_tscEta=myElec->superCluster()->eta(); - //Double_tscPhi=myElec->superCluster()->phi(); - //Double_tscEt=myElec->superCluster()->energy()/cosh(scEta); -} - -/*********************************************************************** - * - * Checking Cuts and making selections: - * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * all the available methods take input a pointer to a pat::Electron - * - * Bool_t CheckCuts(const pat::Electron *): - * true if the input selection is satisfied - * Bool_t CheckCutsInverse(const pat::Electron *ele): - * true if the cuts with inverted the ones specified in the - * cfg are satisfied - * Bool_t CheckCutsNminusOne(const pat::Electron *ele, Int_t jj): - * true if all the cuts with cut #jj ignored are satisfied - * - ***********************************************************************/ -Bool_t ZeePlots::CheckCuts1(const pat::Electron *ele) { - if (usePrecalcID1_) { - if (!ele->isElectronIDAvailable(usePrecalcIDType1_)) { - std::cout << "Error! not existing ID with name: " << usePrecalcIDType1_ << " function will return true!" - << std::endl; - return true; - } - - Double_t val = ele->electronID(usePrecalcIDType1_); - - if (usePrecalcIDSign1_ == "<") { - return (val < usePrecalcIDValue1_); - } else if (usePrecalcIDSign1_ == ">") { - return (val > usePrecalcIDValue1_); - } else { // equality: it returns 0,1,2,3 but as Float_t - return (TMath::Abs(val - usePrecalcIDValue1_) < 0.1); - } - } else { - for (Int_t i = 0; i < nBarrelVars_; ++i) { - if (!CheckCut1(ele, i)) { - return false; - } - } - - return true; - } -} - -Bool_t ZeePlots::CheckCuts2(const pat::Electron *ele) { - if (usePrecalcID2_) { - if (!ele->isElectronIDAvailable(usePrecalcIDType2_)) { - std::cout << "Error! not existing ID with name: " << usePrecalcIDType2_ << " function will return true!" - << std::endl; - return true; - } - - Double_t val = ele->electronID(usePrecalcIDType2_); - - if (usePrecalcIDSign2_ == "<") { - return (val < usePrecalcIDValue2_); - } else if (usePrecalcIDSign2_ == ">") { - return (val > usePrecalcIDValue2_); - } else { // equality: it returns 0,1,2,3 but as Float_t - return (TMath::Abs(val - usePrecalcIDValue2_) < 0.1); - } - } else { - for (Int_t i = 0; i < nBarrelVars_; ++i) { - if (!CheckCut2(ele, i)) { - return false; - } - } - - return true; - } -} - -Bool_t ZeePlots::CheckCuts1Inverse(const pat::Electron *ele) { - for (Int_t i = 0; i < nBarrelVars_; ++i) { - if (CheckCut1Inv(ele, i) == false) { - return false; - } - } - - return true; -} - -Bool_t ZeePlots::CheckCuts2Inverse(const pat::Electron *ele) { - for (Int_t i = 0; i < nBarrelVars_; ++i) { - if (CheckCut2Inv(ele, i) == false) { - return false; - } - } - - return true; -} - -Bool_t ZeePlots::CheckCuts1NminusOne(const pat::Electron *ele, Int_t jj) { - for (Int_t i = 0; i < nBarrelVars_; ++i) { - if (i == jj) { - continue; - } - - if (CheckCut1(ele, i) == false) { - return false; - } - } - - return true; -} - -Bool_t ZeePlots::CheckCuts2NminusOne(const pat::Electron *ele, Int_t jj) { - for (Int_t i = 0; i < nBarrelVars_; ++i) { - if (i == jj) { - continue; - } - - if (CheckCut2(ele, i) == false) { - return false; - } - } - - return true; -} - -Bool_t ZeePlots::CheckCut1(const pat::Electron *ele, Int_t i) { - Double_t fabseta = TMath::Abs(ele->superCluster()->eta()); - - if (fabseta < 1.479) { - return (TMath::Abs(ReturnCandVar(ele, i)) < CutVars1_[i]); - } - - return (TMath::Abs(ReturnCandVar(ele, i)) < CutVars1_[i + nBarrelVars_]); -} - -Bool_t ZeePlots::CheckCut2(const pat::Electron *ele, Int_t i) { - Double_t fabseta = TMath::Abs(ele->superCluster()->eta()); - - if (fabseta < 1.479) { - return (TMath::Abs(ReturnCandVar(ele, i)) < CutVars2_[i]); - } - - return (TMath::Abs(ReturnCandVar(ele, i)) < CutVars2_[i + nBarrelVars_]); -} - -Bool_t ZeePlots::CheckCut1Inv(const pat::Electron *ele, Int_t i) { - Double_t fabseta = TMath::Abs(ele->superCluster()->eta()); - - if (fabseta < 1.479) { - if (InvVars1_[i]) { - return (TMath::Abs(ReturnCandVar(ele, i)) > CutVars1_[i]); - } - - return (TMath::Abs(ReturnCandVar(ele, i)) < CutVars1_[i]); - } - - if (InvVars1_[i + nBarrelVars_]) { - if (InvVars1_[i]) { - return (TMath::Abs(ReturnCandVar(ele, i)) > CutVars1_[i + nBarrelVars_]); - } - } - - return (TMath::Abs(ReturnCandVar(ele, i)) < CutVars1_[i + nBarrelVars_]); -} - -Bool_t ZeePlots::CheckCut2Inv(const pat::Electron *ele, Int_t i) { - Double_t fabseta = TMath::Abs(ele->superCluster()->eta()); - - if (fabseta < 1.479) { - if (InvVars2_[i]) { - return (TMath::Abs(ReturnCandVar(ele, i)) > CutVars2_[i]); - } - - return (TMath::Abs(ReturnCandVar(ele, i)) < CutVars2_[i]); - } - - if (InvVars2_[i + nBarrelVars_]) { - if (InvVars2_[i]) { - return (TMath::Abs(ReturnCandVar(ele, i)) > CutVars2_[i + nBarrelVars_]); - } - } - - return (TMath::Abs(ReturnCandVar(ele, i)) < CutVars2_[i + nBarrelVars_]); -} - -Double_t ZeePlots::ReturnCandVar(const pat::Electron *ele, Int_t i) { - if (i == 0) { - return (ele->dr03TkSumPt() / ele->p4().Pt()); - } else if (i == 1) { - return (ele->dr03EcalRecHitSumEt() / ele->p4().Pt()); - } else if (i == 2) { - return (ele->dr03HcalTowerSumEt() / ele->p4().Pt()); - } else if (i == 3) { - return (ele->scSigmaIEtaIEta()); - } else if (i == 4) { - return (ele->deltaPhiSuperClusterTrackAtVtx()); - } else if (i == 5) { - return (ele->deltaEtaSuperClusterTrackAtVtx()); - } else if (i == 6) { - return (ele->hadronicOverEm()); - } else if (i == 7) { - // pedestal subtraction is only in barrel - if (ele->isEB()) { - return ((ele->dr03TkSumPt() + TMath::Max(0.0, ele->dr03EcalRecHitSumEt() - 1.0) + ele->dr03HcalTowerSumEt()) / - ele->p4().Pt()); - } else { - return ((ele->dr03TkSumPt() + ele->dr03EcalRecHitSumEt() + ele->dr03HcalTowerSumEt()) / ele->p4().Pt()); - } - } - // else if ( i == 8 ) { return ele->gsfTrack()->dxy(bspotPosition_); } - else if (i == 8) { - return (ele->dB()); - } else if (i == 9) { - return (ele->eSuperClusterOverP()); - } else if (i == 10) { - return (ele->userIsolation(pat::TrackIso)); - } else if (i == 11) { - return (ele->userIsolation(pat::EcalIso)); - } else if (i == 12) { - return (ele->userIsolation(pat::HcalIso)); - } - - std::cout << "Error in ZeePlots::ReturnCandVar" << std::endl; - - return (-1.0); -} - -//Bool_t ZeePlots::CheckCuts2( const pat::Electron *ele) -//{ -// for (Int_t i = 0; ihasUserInt( - "PassConversionRejection")) { //std::cout << "con rej: " << ele->userInt("PassConversionRejection") << std::endl; - - if (!(ele->userInt("PassConversionRejection") == 1)) { - passConvRej = false; - } - } else { - std::cout << "ZeePlots: WARNING: Conversion Rejection Request for electron #1 Disregarded: " - << "you must calculate it before " << std::endl; - } - } - - if (useValidFirstPXBHit1_) { - if (ele->hasUserInt( - "PassValidFirstPXBHit")) { //std::cout << "valid1stPXB: " << ele->userInt("PassValidFirstPXBHit") << std::endl; - - if (!(ele->userInt("PassValidFirstPXBHit") == 1)) { - passPXB = false; - } - } else { - std::cout << "ZeePlots: WARNING: Valid First PXB Hit Request for electron #1 Disregarded: " - << "you must calculate it before " << std::endl; - } - } - - if (useExpectedMissingHits1_) { - if (ele->hasUserInt( - "NumberOfExpectedMissingHits")) { //std::cout << "missing hits: " << ele->userInt("NumberOfExpectedMissingHits") << std::endl; - - if (!(ele->userInt("NumberOfExpectedMissingHits") <= maxNumberOfExpectedMissingHits1_)) { - passEMH = false; - } - } else { - std::cout << "ZeePlots: WARNING: Number of Expected Missing Hits Request for electron #1 Disregarded: " - << "you must calculate it before " << std::endl; - } - } - - return (passConvRej && passPXB && passEMH); -} - -Bool_t ZeePlots::PassPreselectionCriteria2(const pat::Electron *ele) { - Bool_t passConvRej = true; - Bool_t passPXB = true; - Bool_t passEMH = true; - - if (useConversionRejection2_) { - if (ele->hasUserInt( - "PassConversionRejection")) { //std::cout << "con rej: " << ele->userInt("PassConversionRejection") << std::endl; - - if (!(ele->userInt("PassConversionRejection") == 1)) { - passConvRej = false; - } - } else { - std::cout << "ZeePlots: WARNING: Conversion Rejection Request for electron #2 Disregarded: " - << "you must calculate it before " << std::endl; - } - } - - if (useValidFirstPXBHit2_) { - if (ele->hasUserInt( - "PassValidFirstPXBHit")) { //std::cout << "valid1stPXB: " << ele->userInt("PassValidFirstPXBHit") << std::endl; - - if (!(ele->userInt("PassValidFirstPXBHit") == 1)) { - passPXB = false; - } - } else { - std::cout << "ZeePlots: WARNING: Valid First PXB Hit Request for electron #2 Disregarded: " - << "you must calculate it before " << std::endl; - } - } - - if (useExpectedMissingHits2_) { - if (ele->hasUserInt( - "NumberOfExpectedMissingHits")) { //std::cout << "missing hits: " << ele->userInt("NumberOfExpectedMissingHits") << std::endl; - - if (!(ele->userInt("NumberOfExpectedMissingHits") <= maxNumberOfExpectedMissingHits2_)) { - passEMH = false; - } - } else { - std::cout << "ZeePlots: WARNING: Number of Expected Missing Hits Request for electron #2 Disregarded: " - << "you must calculate it before " << std::endl; - } - } - - return (passConvRej && passPXB && passEMH); -} - -// -// ------------ method called once each job just before starting event loop -- -void ZeePlots::beginJob() { - //std::cout << "In beginJob()" << std::endl; - - h_mee = new TH1F("h_mee", "h_mee", 200, 0.0, 200.0); - h_mee_EBEB = new TH1F("h_mee_EBEB", "h_mee_EBEB", 200, 0.0, 200.0); - h_mee_EBEE = new TH1F("h_mee_EBEE", "h_mee_EBEE", 200, 0.0, 200.0); - h_mee_EEEE = new TH1F("h_mee_EEEE", "h_mee_EEEE", 200, 0.0, 200.0); - h_Zcand_PT = new TH1F("h_Zcand_PT", "h_Zcand_PT", 200, 0.0, 100.0); - h_Zcand_Y = new TH1F("h_Zcand_Y", "h_Zcand_Y", 200, -5.0, 5.0); - h_e_PT = new TH1F("h_e_PT", "h_e_PT", 200, 0.0, 100.0); - h_e_ETA = new TH1F("h_e_ETA", "h_e_ETA", 200, -3.0, 3.0); - h_e_PHI = new TH1F("h_e_PHI", "h_e_PHI", 200, -4.0, 4.0); - - //VALIDATION PLOTS - // EB - h_EB_trkiso = new TH1F("h_EB_trkiso", "h_EB_trkiso", 200, 0.00, 9.00); - h_EB_ecaliso = new TH1F("h_EB_ecaliso", "h_EB_ecaliso", 200, 0.00, 9.00); - h_EB_hcaliso = new TH1F("h_EB_hcaliso", "h_EB_hcaliso", 200, 0.00, 9.00); - h_EB_sIetaIeta = new TH1F("h_EB_sIetaIeta", "h_EB_sIetaIeta", 200, 0.00, 0.02); - h_EB_dphi = new TH1F("h_EB_dphi", "h_EB_dphi", 200, -0.03, 0.03); - h_EB_deta = new TH1F("h_EB_deta", "h_EB_deta", 200, -0.01, 0.01); - h_EB_HoE = new TH1F("h_EB_HoE", "h_EB_HoE", 200, 0.00, 0.20); - // EE - h_EE_trkiso = new TH1F("h_EE_trkiso", "h_EE_trkiso", 200, 0.00, 9.00); - h_EE_ecaliso = new TH1F("h_EE_ecaliso", "h_EE_ecaliso", 200, 0.00, 9.00); - h_EE_hcaliso = new TH1F("h_EE_hcaliso", "h_EE_hcaliso", 200, 0.00, 9.00); - h_EE_sIetaIeta = new TH1F("h_EE_sIetaIeta", "h_EE_sIetaIeta", 200, 0.00, 0.10); - h_EE_dphi = new TH1F("h_EE_dphi", "h_EE_dphi", 200, -0.03, 0.03); - h_EE_deta = new TH1F("h_EE_deta", "h_EE_deta", 200, -0.01, 0.01); - h_EE_HoE = new TH1F("h_EE_HoE", "h_EE_HoE", 200, 0.00, 0.20); - - // if you add some new variable change the nBarrelVars_ accordingly - // reminder: in the current implementation you must have the same number - // of vars in both barrel and endcaps - - nBarrelVars_ = 13; - - // - // Put EB variables together and EE variables together - // number of barrel variables = number of endcap variable - // if you don't want to use some variable put a very high cut - - // 1st Leg variables - CutVars1_.push_back(trackIso1_EB_); // 0 - CutVars1_.push_back(ecalIso1_EB_); // 1 - CutVars1_.push_back(hcalIso1_EB_); // 2 - CutVars1_.push_back(sihih1_EB_); // 3 - CutVars1_.push_back(dphi1_EB_); // 4 - CutVars1_.push_back(deta1_EB_); // 5 - CutVars1_.push_back(hoe1_EB_); // 6 - CutVars1_.push_back(cIso1_EB_); // 7 - CutVars1_.push_back(tip_bspot1_EB_); // 8 - CutVars1_.push_back(eop1_EB_); // 9 - CutVars1_.push_back(trackIsoUser1_EB_); // 10 - CutVars1_.push_back(ecalIsoUser1_EB_); // 11 - CutVars1_.push_back(hcalIsoUser1_EB_); // 12 - - CutVars1_.push_back(trackIso1_EE_); // 0 - CutVars1_.push_back(ecalIso1_EE_); // 1 - CutVars1_.push_back(hcalIso1_EE_); // 2 - CutVars1_.push_back(sihih1_EE_); // 3 - CutVars1_.push_back(dphi1_EE_); // 4 - CutVars1_.push_back(deta1_EE_); // 5 - CutVars1_.push_back(hoe1_EE_); // 6 - CutVars1_.push_back(cIso1_EE_); // 7 - CutVars1_.push_back(tip_bspot1_EE_); // 8 - CutVars1_.push_back(eop1_EE_); // 9 - CutVars1_.push_back(trackIsoUser1_EE_); // 10 - CutVars1_.push_back(ecalIsoUser1_EE_); // 11 - CutVars1_.push_back(hcalIsoUser1_EE_); // 12 - - InvVars1_.push_back(trackIso1_EB_inv); // 0 - InvVars1_.push_back(ecalIso1_EB_inv); // 1 - InvVars1_.push_back(hcalIso1_EB_inv); // 2 - InvVars1_.push_back(sihih1_EB_inv); // 3 - InvVars1_.push_back(dphi1_EB_inv); // 4 - InvVars1_.push_back(deta1_EB_inv); // 5 - InvVars1_.push_back(hoe1_EB_inv); // 6 - InvVars1_.push_back(cIso1_EB_inv); // 7 - InvVars1_.push_back(tip_bspot1_EB_inv); // 8 - InvVars1_.push_back(eop1_EB_inv); // 9 - InvVars1_.push_back(trackIsoUser1_EB_inv); // 10 - InvVars1_.push_back(ecalIsoUser1_EB_inv); // 11 - InvVars1_.push_back(hcalIsoUser1_EB_inv); // 12 - - InvVars1_.push_back(trackIso1_EE_inv); // 0 - InvVars1_.push_back(ecalIso1_EE_inv); // 1 - InvVars1_.push_back(hcalIso1_EE_inv); // 2 - InvVars1_.push_back(sihih1_EE_inv); // 3 - InvVars1_.push_back(dphi1_EE_inv); // 4 - InvVars1_.push_back(deta1_EE_inv); // 5 - InvVars1_.push_back(hoe1_EE_inv); // 6 - InvVars1_.push_back(cIso1_EE_inv); // 7 - InvVars1_.push_back(tip_bspot1_EE_inv); // 8 - InvVars1_.push_back(eop1_EE_inv); // 9 - InvVars1_.push_back(trackIsoUser1_EE_inv); // 10 - InvVars1_.push_back(ecalIsoUser1_EE_inv); // 11 - InvVars1_.push_back(hcalIsoUser1_EE_inv); // 12 - - // 2nd Leg variables - CutVars2_.push_back(trackIso2_EB_); // 0 - CutVars2_.push_back(ecalIso2_EB_); // 1 - CutVars2_.push_back(hcalIso2_EB_); // 2 - CutVars2_.push_back(sihih2_EB_); // 3 - CutVars2_.push_back(dphi2_EB_); // 4 - CutVars2_.push_back(deta2_EB_); // 5 - CutVars2_.push_back(hoe2_EB_); // 6 - CutVars2_.push_back(cIso2_EB_); // 7 - CutVars2_.push_back(tip_bspot2_EB_); // 8 - CutVars2_.push_back(eop2_EB_); // 9 - CutVars2_.push_back(trackIsoUser2_EB_); // 10 - CutVars2_.push_back(ecalIsoUser2_EB_); // 11 - CutVars2_.push_back(hcalIsoUser2_EB_); // 12 - - CutVars2_.push_back(trackIso2_EE_); // 0 - CutVars2_.push_back(ecalIso2_EE_); // 1 - CutVars2_.push_back(hcalIso2_EE_); // 2 - CutVars2_.push_back(sihih2_EE_); // 3 - CutVars2_.push_back(dphi2_EE_); // 4 - CutVars2_.push_back(deta2_EE_); // 5 - CutVars2_.push_back(hoe2_EE_); // 6 - CutVars2_.push_back(cIso2_EE_); // 7 - CutVars2_.push_back(tip_bspot2_EE_); // 8 - CutVars2_.push_back(eop2_EE_); // 9 - CutVars2_.push_back(trackIsoUser2_EE_); // 10 - CutVars2_.push_back(ecalIsoUser2_EE_); // 11 - CutVars2_.push_back(hcalIsoUser2_EE_); // 12 - - InvVars2_.push_back(trackIso2_EB_inv); // 0 - InvVars2_.push_back(ecalIso2_EB_inv); // 1 - InvVars2_.push_back(hcalIso2_EB_inv); // 2 - InvVars2_.push_back(sihih2_EB_inv); // 3 - InvVars2_.push_back(dphi2_EB_inv); // 4 - InvVars2_.push_back(deta2_EB_inv); // 5 - InvVars2_.push_back(hoe2_EB_inv); // 6 - InvVars2_.push_back(cIso2_EB_inv); // 7 - InvVars2_.push_back(tip_bspot2_EB_inv); // 8 - InvVars2_.push_back(eop2_EB_inv); // 9 - InvVars2_.push_back(trackIsoUser2_EB_inv); // 10 - InvVars2_.push_back(ecalIsoUser2_EB_inv); // 11 - InvVars2_.push_back(hcalIsoUser2_EB_inv); // 12 - - InvVars2_.push_back(trackIso2_EE_inv); // 0 - InvVars2_.push_back(ecalIso2_EE_inv); // 1 - InvVars2_.push_back(hcalIso2_EE_inv); // 2 - InvVars2_.push_back(sihih2_EE_inv); // 3 - InvVars2_.push_back(dphi2_EE_inv); // 4 - InvVars2_.push_back(deta2_EE_inv); // 5 - InvVars2_.push_back(hoe2_EE_inv); // 6 - InvVars2_.push_back(cIso2_EE_inv); // 7 - InvVars2_.push_back(tip_bspot2_EE_inv); // 8 - InvVars2_.push_back(eop2_EE_inv); // 9 - InvVars2_.push_back(trackIsoUser2_EE_inv); // 10 - InvVars2_.push_back(ecalIsoUser2_EE_inv); // 11 - InvVars2_.push_back(hcalIsoUser2_EE_inv); // 12 - - // ________________________________________________________________________ - // - // The VBTF Root Tuples --------------------------------------------------- - // ________________________________________________________________________ - // - ZEE_VBTFselectionFile_ = new TFile(TString(ZEE_VBTFselectionFileName_), "RECREATE"); - - vbtfSele_tree = new TTree("vbtfSele_tree", "Tree to store the Z Candidates that pass the VBTF selection"); - - vbtfSele_tree->Branch("runNumber", &runNumber, "runNumber/I"); - vbtfSele_tree->Branch("eventNumber", &eventNumber, "eventNumber/L"); - vbtfSele_tree->Branch("lumiSection", &lumiSection, "lumiSection/I"); - - // for ele 1 - vbtfSele_tree->Branch("ele1_sc_gsf_et", &ele1_sc_gsf_et, "ele1_sc_gsf_et/F"); - vbtfSele_tree->Branch("ele1_sc_energy", &ele1_sc_energy, "ele1_sc_energy/F"); - vbtfSele_tree->Branch("ele1_sc_eta", &ele1_sc_eta, "ele1_sc_eta/F"); - vbtfSele_tree->Branch("ele1_sc_phi", &ele1_sc_phi, "ele1_sc_phi/F"); - vbtfSele_tree->Branch("ele1_cand_et", &ele1_cand_et, "ele1_cand_et/F"); - vbtfSele_tree->Branch("ele1_cand_eta", &ele1_cand_eta, "ele1_cand_eta/F"); - vbtfSele_tree->Branch("ele1_cand_phi", &ele1_cand_phi, "ele1_cand_phi/F"); - vbtfSele_tree->Branch("ele1_iso_track", &ele1_iso_track, "ele1_iso_track/F"); - vbtfSele_tree->Branch("ele1_iso_ecal", &ele1_iso_ecal, "ele1_iso_ecal/F"); - vbtfSele_tree->Branch("ele1_iso_hcal", &ele1_iso_hcal, "ele1_iso_hcal/F"); - vbtfSele_tree->Branch("ele1_id_sihih", &ele1_id_sihih, "ele1_id_sihih/F"); - vbtfSele_tree->Branch("ele1_id_deta", &ele1_id_deta, "ele1_id_deta/F"); - vbtfSele_tree->Branch("ele1_id_dphi", &ele1_id_dphi, "ele1_id_dphi/F"); - vbtfSele_tree->Branch("ele1_id_hoe", &ele1_id_hoe, "ele1_id_hoe/F"); - vbtfSele_tree->Branch("ele1_cr_mhitsinner", &ele1_cr_mhitsinner, "ele1_cr_mhitsinner/I"); - vbtfSele_tree->Branch("ele1_cr_dcot", &ele1_cr_dcot, "ele1_cr_dcot/F"); - vbtfSele_tree->Branch("ele1_cr_dist", &ele1_cr_dist, "ele1_cr_dist/F"); - vbtfSele_tree->Branch("ele1_vx", &ele1_vx, "ele1_vx/F"); - vbtfSele_tree->Branch("ele1_vy", &ele1_vy, "ele1_vy/F"); - vbtfSele_tree->Branch("ele1_vz", &ele1_vz, "ele1_vz/F"); - vbtfSele_tree->Branch("ele1_gsfCharge", &ele1_gsfCharge, "ele1_gsfCharge/I"); - vbtfSele_tree->Branch("ele1_ctfCharge", &ele1_ctfCharge, "ele1_ctfCharge/I"); - vbtfSele_tree->Branch("ele1_scPixCharge", &ele1_scPixCharge, "ele1_scPixCharge/I"); - vbtfSele_tree->Branch("ele1_eop", &ele1_eop, "ele1_eop/F"); - vbtfSele_tree->Branch("ele1_tip_bs", &ele1_tip_bs, "ele1_tip_bs/F"); - vbtfSele_tree->Branch("ele1_tip_pv", &ele1_tip_pv, "ele1_tip_pv/F"); - - // for ele 2 - vbtfSele_tree->Branch("ele2_sc_gsf_et", &ele2_sc_gsf_et, "ele2_sc_gsf_et/F"); - vbtfSele_tree->Branch("ele2_sc_energy", &ele2_sc_energy, "ele2_sc_energy/F"); - vbtfSele_tree->Branch("ele2_sc_eta", &ele2_sc_eta, "ele2_sc_eta/F"); - vbtfSele_tree->Branch("ele2_sc_phi", &ele2_sc_phi, "ele2_sc_phi/F"); - vbtfSele_tree->Branch("ele2_cand_et", &ele2_cand_et, "ele2_cand_et/F"); - vbtfSele_tree->Branch("ele2_cand_eta", &ele2_cand_eta, "ele2_cand_eta/F"); - vbtfSele_tree->Branch("ele2_cand_phi", &ele2_cand_phi, "ele2_cand_phi/F"); - vbtfSele_tree->Branch("ele2_iso_track", &ele2_iso_track, "ele2_iso_track/F"); - vbtfSele_tree->Branch("ele2_iso_ecal", &ele2_iso_ecal, "ele2_iso_ecal/F"); - vbtfSele_tree->Branch("ele2_iso_hcal", &ele2_iso_hcal, "ele2_iso_hcal/F"); - vbtfSele_tree->Branch("ele2_id_sihih", &ele2_id_sihih, "ele2_id_sihih/F"); - vbtfSele_tree->Branch("ele2_id_deta", &ele2_id_deta, "ele2_id_deta/F"); - vbtfSele_tree->Branch("ele2_id_dphi", &ele2_id_dphi, "ele2_id_dphi/F"); - vbtfSele_tree->Branch("ele2_id_hoe", &ele2_id_hoe, "ele2_id_hoe/F"); - vbtfSele_tree->Branch("ele2_cr_mhitsinner", &ele2_cr_mhitsinner, "ele2_cr_mhitsinner/I"); - vbtfSele_tree->Branch("ele2_cr_dcot", &ele2_cr_dcot, "ele2_cr_dcot/F"); - vbtfSele_tree->Branch("ele2_cr_dist", &ele2_cr_dist, "ele2_cr_dist/F"); - vbtfSele_tree->Branch("ele2_vx", &ele2_vx, "ele2_vx/F"); - vbtfSele_tree->Branch("ele2_vy", &ele2_vy, "ele2_vy/F"); - vbtfSele_tree->Branch("ele2_vz", &ele2_vz, "ele2_vz/F"); - vbtfSele_tree->Branch("ele2_gsfCharge", &ele2_gsfCharge, "ele2_gsfCharge/I"); - vbtfSele_tree->Branch("ele2_ctfCharge", &ele2_ctfCharge, "ele2_ctfCharge/I"); - vbtfSele_tree->Branch("ele2_scPixCharge", &ele2_scPixCharge, "ele2_scPixCharge/I"); - vbtfSele_tree->Branch("ele2_eop", &ele2_eop, "ele2_eop/F"); - vbtfSele_tree->Branch("ele2_tip_bs", &ele2_tip_bs, "ele2_tip_bs/F"); - vbtfSele_tree->Branch("ele2_tip_pv", &ele2_tip_pv, "ele2_tip_pv/F"); - // - vbtfSele_tree->Branch("pv_x1", &pv_x1, "pv_x1/F"); - vbtfSele_tree->Branch("pv_y1", &pv_y1, "pv_y1/F"); - vbtfSele_tree->Branch("pv_z1", &pv_z1, "pv_z1/F"); - // - vbtfSele_tree->Branch("pv_x2", &pv_x2, "pv_x2/F"); - vbtfSele_tree->Branch("pv_y2", &pv_y2, "pv_y2/F"); - vbtfSele_tree->Branch("pv_z2", &pv_z2, "pv_z2/F"); - // - vbtfSele_tree->Branch("event_caloMET", &event_caloMET, "event_caloMET/F"); - vbtfSele_tree->Branch("event_pfMET", &event_pfMET, "event_pfMET/F"); - vbtfSele_tree->Branch("event_tcMET", &event_tcMET, "event_tcMET/F"); - vbtfSele_tree->Branch("event_caloMET_phi", &event_caloMET_phi, "event_caloMET_phi/F"); - vbtfSele_tree->Branch("event_pfMET_phi", &event_pfMET_phi, "event_pfMET_phi/F"); - vbtfSele_tree->Branch("event_tcMET_phi", &event_tcMET_phi, "event_tcMET_phi/F"); - - vbtfSele_tree->Branch("event_Mee", &event_Mee, "event_Mee/F"); - - // - // the extra jet variables: - if (includeJetInformationInNtuples_) { - vbtfSele_tree->Branch("calojet_et", calojet_et, "calojet_et[5]/F"); - vbtfSele_tree->Branch("calojet_eta", calojet_eta, "calojet_eta[5]/F"); - vbtfSele_tree->Branch("calojet_phi", calojet_phi, "calojet_phi[5]/F"); - vbtfSele_tree->Branch("pfjet_et", pfjet_et, "pfjet_et[5]/F"); - vbtfSele_tree->Branch("pfjet_eta", pfjet_eta, "pfjet_eta[5]/F"); - vbtfSele_tree->Branch("pfjet_phi", pfjet_phi, "pfjet_phi[5]/F"); - } - - vbtfSele_tree->Branch("event_datasetTag", &event_datasetTag, "event_dataSetTag/I"); - - // everything after preselection - ZEE_VBTFpreseleFile_ = new TFile(TString(ZEE_VBTFpreseleFileName_), "RECREATE"); - - vbtfPresele_tree = new TTree("vbtfPresele_tree", "Tree to store the Z Candidates that pass the VBTF preselection"); - - vbtfPresele_tree->Branch("runNumber", &runNumber, "runNumber/I"); - vbtfPresele_tree->Branch("eventNumber", &eventNumber, "eventNumber/L"); - vbtfPresele_tree->Branch("lumiSection", &lumiSection, "lumiSection/I"); - - // for ele 1 - vbtfPresele_tree->Branch("ele1_sc_gsf_et", &ele1_sc_gsf_et, "ele1_sc_gsf_et/F"); - vbtfPresele_tree->Branch("ele1_sc_energy", &ele1_sc_energy, "ele1_sc_energy/F"); - vbtfPresele_tree->Branch("ele1_sc_eta", &ele1_sc_eta, "ele1_sc_eta/F"); - vbtfPresele_tree->Branch("ele1_sc_phi", &ele1_sc_phi, "ele1_sc_phi/F"); - vbtfPresele_tree->Branch("ele1_cand_et", &ele1_cand_et, "ele1_cand_et/F"); - vbtfPresele_tree->Branch("ele1_cand_eta", &ele1_cand_eta, "ele1_cand_eta/F"); - vbtfPresele_tree->Branch("ele1_cand_phi", &ele1_cand_phi, "ele1_cand_phi/F"); - vbtfPresele_tree->Branch("ele1_iso_track", &ele1_iso_track, "ele1_iso_track/F"); - vbtfPresele_tree->Branch("ele1_iso_ecal", &ele1_iso_ecal, "ele1_iso_ecal/F"); - vbtfPresele_tree->Branch("ele1_iso_hcal", &ele1_iso_hcal, "ele1_iso_hcal/F"); - vbtfPresele_tree->Branch("ele1_id_sihih", &ele1_id_sihih, "ele1_id_sihih/F"); - vbtfPresele_tree->Branch("ele1_id_deta", &ele1_id_deta, "ele1_id_deta/F"); - vbtfPresele_tree->Branch("ele1_id_dphi", &ele1_id_dphi, "ele1_id_dphi/F"); - vbtfPresele_tree->Branch("ele1_id_hoe", &ele1_id_hoe, "ele1_id_hoe/F"); - vbtfPresele_tree->Branch("ele1_cr_mhitsinner", &ele1_cr_mhitsinner, "ele1_cr_mhitsinner/I"); - vbtfPresele_tree->Branch("ele1_cr_dcot", &ele1_cr_dcot, "ele1_cr_dcot/F"); - vbtfPresele_tree->Branch("ele1_cr_dist", &ele1_cr_dist, "ele1_cr_dist/F"); - vbtfPresele_tree->Branch("ele1_vx", &ele1_vx, "ele1_vx/F"); - vbtfPresele_tree->Branch("ele1_vy", &ele1_vy, "ele1_vy/F"); - vbtfPresele_tree->Branch("ele1_vz", &ele1_vz, "ele1_vz/F"); - vbtfPresele_tree->Branch("ele1_gsfCharge", &ele1_gsfCharge, "ele1_gsfCharge/I"); - vbtfPresele_tree->Branch("ele1_ctfCharge", &ele1_ctfCharge, "ele1_ctfCharge/I"); - vbtfPresele_tree->Branch("ele1_scPixCharge", &ele1_scPixCharge, "ele1_scPixCharge/I"); - vbtfPresele_tree->Branch("ele1_eop", &ele1_eop, "ele1_eop/F"); - vbtfPresele_tree->Branch("ele1_tip_bs", &ele1_tip_bs, "ele1_tip_bs/F"); - vbtfPresele_tree->Branch("ele1_tip_pv", &ele1_tip_pv, "ele1_tip_pv/F"); - - // for ele 2 - vbtfPresele_tree->Branch("ele2_sc_gsf_et", &ele2_sc_gsf_et, "ele2_sc_gsf_et/F"); - vbtfPresele_tree->Branch("ele2_sc_energy", &ele2_sc_energy, "ele2_sc_energy/F"); - vbtfPresele_tree->Branch("ele2_sc_eta", &ele2_sc_eta, "ele2_sc_eta/F"); - vbtfPresele_tree->Branch("ele2_sc_phi", &ele2_sc_phi, "ele2_sc_phi/F"); - vbtfPresele_tree->Branch("ele2_cand_et", &ele2_cand_et, "ele2_cand_et/F"); - vbtfPresele_tree->Branch("ele2_cand_eta", &ele2_cand_eta, "ele2_cand_eta/F"); - vbtfPresele_tree->Branch("ele2_cand_phi", &ele2_cand_phi, "ele2_cand_phi/F"); - vbtfPresele_tree->Branch("ele2_iso_track", &ele2_iso_track, "ele2_iso_track/F"); - vbtfPresele_tree->Branch("ele2_iso_ecal", &ele2_iso_ecal, "ele2_iso_ecal/F"); - vbtfPresele_tree->Branch("ele2_iso_hcal", &ele2_iso_hcal, "ele2_iso_hcal/F"); - vbtfPresele_tree->Branch("ele2_id_sihih", &ele2_id_sihih, "ele2_id_sihih/F"); - vbtfPresele_tree->Branch("ele2_id_deta", &ele2_id_deta, "ele2_id_deta/F"); - vbtfPresele_tree->Branch("ele2_id_dphi", &ele2_id_dphi, "ele2_id_dphi/F"); - vbtfPresele_tree->Branch("ele2_id_hoe", &ele2_id_hoe, "ele2_id_hoe/F"); - vbtfPresele_tree->Branch("ele2_cr_mhitsinner", &ele2_cr_mhitsinner, "ele2_cr_mhitsinner/I"); - vbtfPresele_tree->Branch("ele2_cr_dcot", &ele2_cr_dcot, "ele2_cr_dcot/F"); - vbtfPresele_tree->Branch("ele2_cr_dist", &ele2_cr_dist, "ele2_cr_dist/F"); - vbtfPresele_tree->Branch("ele2_vx", &ele2_vx, "ele2_vx/F"); - vbtfPresele_tree->Branch("ele2_vy", &ele2_vy, "ele2_vy/F"); - vbtfPresele_tree->Branch("ele2_vz", &ele2_vz, "ele2_vz/F"); - vbtfPresele_tree->Branch("ele2_gsfCharge", &ele2_gsfCharge, "ele2_gsfCharge/I"); - vbtfPresele_tree->Branch("ele2_ctfCharge", &ele2_ctfCharge, "ele2_ctfCharge/I"); - vbtfPresele_tree->Branch("ele2_scPixCharge", &ele2_scPixCharge, "ele2_scPixCharge/I"); - vbtfPresele_tree->Branch("ele2_eop", &ele2_eop, "ele2_eop/F"); - vbtfPresele_tree->Branch("ele2_tip_bs", &ele2_tip_bs, "ele2_tip_bs/F"); - vbtfPresele_tree->Branch("ele2_tip_pv", &ele2_tip_pv, "ele2_tip_pv/F"); - - vbtfPresele_tree->Branch("pv_x1", &pv_x1, "pv_x1/F"); - vbtfPresele_tree->Branch("pv_y1", &pv_y1, "pv_y1/F"); - vbtfPresele_tree->Branch("pv_z1", &pv_z1, "pv_z1/F"); - - vbtfPresele_tree->Branch("pv_x2", &pv_x2, "pv_x2/F"); - vbtfPresele_tree->Branch("pv_y2", &pv_y2, "pv_y2/F"); - vbtfPresele_tree->Branch("pv_z2", &pv_z2, "pv_z2/F"); - - vbtfPresele_tree->Branch("event_caloMET", &event_caloMET, "event_caloMET/F"); - vbtfPresele_tree->Branch("event_pfMET", &event_pfMET, "event_pfMET/F"); - vbtfPresele_tree->Branch("event_tcMET", &event_tcMET, "event_tcMET/F"); - vbtfPresele_tree->Branch("event_caloMET_phi", &event_caloMET_phi, "event_caloMET_phi/F"); - vbtfPresele_tree->Branch("event_pfMET_phi", &event_pfMET_phi, "event_pfMET_phi/F"); - vbtfPresele_tree->Branch("event_tcMET_phi", &event_tcMET_phi, "event_tcMET_phi/F"); - - vbtfPresele_tree->Branch("event_Mee", &event_Mee, "event_Mee/F"); - - // - // the extra jet variables: - if (includeJetInformationInNtuples_) { - vbtfPresele_tree->Branch("calojet_et", calojet_et, "calojet_et[5]/F"); - vbtfPresele_tree->Branch("calojet_eta", calojet_eta, "calojet_eta[5]/F"); - vbtfPresele_tree->Branch("calojet_phi", calojet_phi, "calojet_phi[5]/F"); - vbtfPresele_tree->Branch("pfjet_et", pfjet_et, "pfjet_et[5]/F"); - vbtfPresele_tree->Branch("pfjet_eta", pfjet_eta, "pfjet_eta[5]/F"); - vbtfPresele_tree->Branch("pfjet_phi", pfjet_phi, "pfjet_phi[5]/F"); - } - - vbtfPresele_tree->Branch("event_datasetTag", &event_datasetTag, "event_dataSetTag/I"); - - // _________________________________________________________________________ - // -} - -// ------------ method called once each job just after ending the event loop - -void ZeePlots::endJob() { - TFile *newfile = new TFile(TString(outputFile_), "RECREATE"); - // - // for consistency all the plots are in the root file - // even though they may be empty (in the case when - // usePrecalcID_ == true inverted and N-1 are empty) - - h_mee->Write(); - h_mee_EBEB->Write(); - h_mee_EBEE->Write(); - h_mee_EEEE->Write(); - h_Zcand_PT->Write(); - h_Zcand_Y->Write(); - - h_e_PT->Write(); - h_e_ETA->Write(); - h_e_PHI->Write(); - - h_EB_trkiso->Write(); - h_EB_ecaliso->Write(); - h_EB_hcaliso->Write(); - h_EB_sIetaIeta->Write(); - h_EB_dphi->Write(); - h_EB_deta->Write(); - h_EB_HoE->Write(); - - h_EE_trkiso->Write(); - h_EE_ecaliso->Write(); - h_EE_hcaliso->Write(); - h_EE_sIetaIeta->Write(); - h_EE_dphi->Write(); - h_EE_deta->Write(); - h_EE_HoE->Write(); - - // - newfile->Close(); - - // write the VBTF trees - // - ZEE_VBTFpreseleFile_->Write(); - ZEE_VBTFpreseleFile_->Close(); - - ZEE_VBTFselectionFile_->Write(); - ZEE_VBTFselectionFile_->Close(); -} - -//define this as a plug-in -DEFINE_FWK_MODULE(ZeePlots); diff --git a/ElectroWeakAnalysis/ZEE/src/aod2patFilterZee.cc b/ElectroWeakAnalysis/ZEE/src/aod2patFilterZee.cc deleted file mode 100644 index 92d8221222fd5..0000000000000 --- a/ElectroWeakAnalysis/ZEE/src/aod2patFilterZee.cc +++ /dev/null @@ -1,166 +0,0 @@ -#ifndef aod2patFilterZee_H -#define aod2patFilterZee_H - -/****************************************************************************** - * - * Implementation Notes: - * - * this is a filter that creates pat::Electrons without the need of - * running the PAT sequence - * - * it is meant to be an interface of Wenu and Zee CandidateFilters - * for the October 2009 exercise - * it does make sense to implement the trigger requirement here - * but it will not be implemented in order to keep compatibolity with the - * old code - * - * - * contact: - * Nikolaos.Rompotis@Cern.ch - * - * Nikolaos Rompotis - * Imperial College London - * - * 21 Sept 2009 - * - *****************************************************************************/ - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -// -#include -#include -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/PatCandidates/interface/Electron.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/Common/interface/TriggerResults.h" -#include "DataFormats/METReco/interface/METCollection.h" -#include "DataFormats/METReco/interface/CaloMETCollection.h" -// -#include "TString.h" -#include "TMath.h" -#include "DataFormats/PatCandidates/interface/MET.h" - -class aod2patFilterZee : public edm::EDFilter { -public: - explicit aod2patFilterZee(const edm::ParameterSet&); - ~aod2patFilterZee() override; - -private: - void beginJob() override; - bool filter(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - //bool isInFiducial(double eta); - - // ----------member data --------------------------- - //double ETCut_; - //double METCut_; - //double ETCut2ndEle_; - //edm::InputTag triggerCollectionTag_; - //edm::InputTag triggerEventTag_; - //std::string hltpath_; - //edm::InputTag hltpathFilter_; - edm::InputTag electronCollectionTag_; - edm::EDGetTokenT electronCollectionToken_; - edm::InputTag metCollectionTag_; - edm::EDGetTokenT metCollectionToken_; - - //double BarrelMaxEta_; - //double EndCapMaxEta_; - //double EndCapMinEta_; - //bool electronMatched2HLT_; - //double electronMatched2HLT_DR_; - //bool vetoSecondElectronEvents_; -}; -#endif - -aod2patFilterZee::aod2patFilterZee(const edm::ParameterSet& iConfig) { - electronCollectionTag_ = iConfig.getUntrackedParameter("electronCollectionTag"); - electronCollectionToken_ = consumes(electronCollectionTag_); - metCollectionTag_ = iConfig.getUntrackedParameter("metCollectionTag"); - metCollectionToken_ = consumes(metCollectionTag_); - - produces("patElectrons").setBranchAlias("patElectrons"); - - produces("patCaloMets").setBranchAlias("patCaloMets"); - //produces< pat::METCollection>("patPfMets").setBranchAlias("patPfMets"); - //produces< pat::METCollection>("patTcMets").setBranchAlias("patTcMets"); - //produces< pat::METCollection>("patT1cMets").setBranchAlias("patT1cMets"); -} - -aod2patFilterZee::~aod2patFilterZee() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - -bool aod2patFilterZee::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - using namespace std; - using namespace pat; - // ************************************************************************* - // ELECTRONS - // ************************************************************************* - edm::Handle gsfElectrons; - iEvent.getByToken(electronCollectionToken_, gsfElectrons); - if (!gsfElectrons.isValid()) { - std::cout << "aod2patFilterZee: Could not get electron collection with label: " << electronCollectionTag_ - << std::endl; - return false; - } - const reco::GsfElectronCollection* pElecs = gsfElectrons.product(); - // calculate your electrons - unique_ptr patElectrons(new pat::ElectronCollection); - for (reco::GsfElectronCollection::const_iterator elec = pElecs->begin(); elec != pElecs->end(); ++elec) { - reco::GsfElectron mygsfelec = *elec; - pat::Electron myElectron(mygsfelec); - // now set the isolations from the Gsf electron - myElectron.setTrackIso(elec->dr03TkSumPt()); - myElectron.setEcalIso(elec->dr04EcalRecHitSumEt()); - myElectron.setHcalIso(elec->dr04HcalTowerSumEt()); - - patElectrons->push_back(myElectron); - } - // ************************************************************************* - // METs - // ************************************************************************* - edm::Handle calomets; - iEvent.getByToken(metCollectionToken_, calomets); - if (!calomets.isValid()) { - std::cout << "aod2patFilterZee: Could not get met collection with label: " << metCollectionTag_ << std::endl; - return false; - } - const reco::CaloMETCollection* mycalomets = calomets.product(); - unique_ptr patCaloMets(new pat::METCollection); - for (reco::CaloMETCollection::const_iterator met = mycalomets->begin(); met != mycalomets->end(); ++met) { - pat::MET mymet(*met); - patCaloMets->push_back(mymet); - } - - // - // put everything in the event - // - iEvent.put(std::move(patElectrons), "patElectrons"); - iEvent.put(std::move(patCaloMets), "patCaloMets"); - // - - return true; -} - -// ------------ method called once each job just before starting event loop - -void aod2patFilterZee::beginJob() {} - -// ------------ method called once each job just after ending the event loop - -void aod2patFilterZee::endJob() {} - -//define this as a plug-in -DEFINE_FWK_MODULE(aod2patFilterZee); diff --git a/ElectroWeakAnalysis/ZEE/test/PerformAnalysis.cpp b/ElectroWeakAnalysis/ZEE/test/PerformAnalysis.cpp deleted file mode 100644 index 920640c1e9b3c..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/PerformAnalysis.cpp +++ /dev/null @@ -1,1769 +0,0 @@ -#include "TROOT.h" -#include "TFile.h" -#include "TTree.h" -#include "TCanvas.h" -#include "TLegend.h" -#include "TH1.h" -#include "TF1.h" -#include "TRandom3.h" -#include "TString.h" -#include -#include -#include - -using namespace std; - -void PerformAnalysis(TString process, double eventweight, TString datapath)//, ofstream& results) //int main() -{ - cout << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%\%" << endl; - cout << "\% " << "Perform Analysis" << endl; - cout << "\% " << process << endl; - cout << "\% " << "Event Weight = " << eventweight << endl; - cout << "\% " << "Data Path = " << datapath << endl; - cout << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%\%" << endl; - - // Declare electron cut value variables - double cMEt = 30.; - double cPt = 30.; - double cECALiso_EB = 4.2, cECALiso_EE = 3.4; - double cHCALiso_EB = 2.0, cHCALiso_EE = 1.3; - double cTrackiso_EB = 2.2, cTrackiso_EE = 1.1; - double cDeltaEta_EB = 0.0040, cDeltaEta_EE = 0.0066; - double cDeltaPhi_EB = 0.025, cDeltaPhi_EE = 0.020; - double csIhIh_EB = 0.0099, csIhIh_EE = 0.0280; - // Declare neutrino cut value variables - double cHCAL = 6.2; - double cHCALEt = 12; - double cf1x5 = 0.83, cf2x5 = 0.93; - int celecmatch = 0; - double cnusIhIh = 0.027; - - cout << "Cut Values:" << endl; - - cout << "MEt cut " << cMEt << endl; - - cout << "Electron selection cuts:" << endl; - cout << "Pt cut " << cPt << endl; - cout << "ECAL Isolation cut (EB) " << cECALiso_EB << endl; - cout << "ECAL Isolation cut (EE) " << cECALiso_EE << endl; - cout << "HCAL Isolation cut (EB) " << cHCALiso_EB << endl; - cout << "HCAL Isolation cut (EE) " << cHCALiso_EE << endl; - cout << "Track Isolation cut (EB) " << cTrackiso_EB << endl; - cout << "Track Isolation cut (EE) " << cTrackiso_EE << endl; - cout << "Delta Eta cut (EB) " << cDeltaEta_EB << endl; - cout << "Delta Eta cut (EE) " << cDeltaEta_EE << endl; - cout << "Delta Phi cut (EB) " << cDeltaPhi_EB << endl; - cout << "Delta Phi cut (EE) " << cDeltaPhi_EE << endl; - cout << "Sigma iEta iEta cut (EB) " << csIhIh_EB << endl; - cout << "Sigma iEta iEta cut (EE) " << csIhIh_EE << endl; - - cout << "Probe selection cuts:" << endl; - cout << "HCAL Energy cut " << cHCAL << endl; - cout << "HCAL Transverse Energy cut " << cHCALEt << endl; - cout << "Fraction of energy in 1x5 cut " << cf1x5 << endl; - cout << "Fraction of energy in 2x5 cut " << cf2x5 << endl; - cout << "Require electron match " << celecmatch << endl; - cout << "Sigma iEta iEta cut " << cnusIhIh << endl; - - cout << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%\%" << endl; - // Import probe selection efficiency weights - double nueff[345]; - ifstream weightsin; - weightsin.open("EtaWeights.txt", ifstream::in); - - for(int eta=0; eta < 345; ++eta) - { - double weight; - weightsin >> weight; - //cout << eta << "\t" << weight << endl; - nueff[eta] = weight; - } - weightsin.close(); - cout << "Imported probe selection efficiencies" << endl; - - TFile* outfile = TFile::Open("ZeePlots.root", "recreate"); - - TH1F* h_McW_m = new TH1F("McW_m","MC Boson Mass;m;Arbitrary Units", 100, 40., 130.); - TH1F* h_McW_pt = new TH1F("McW_pt","MC Boson p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_McW_y = new TH1F("McW_y","MC Boson Rapidity;y;Arbitrary Units", 100, -5., 5.); - - TH1F* h_McZ_m = new TH1F("McZ_m","MC Boson Mass;m (GeV);Arbitrary Units", 100, 40., 130.); - TH1F* h_McZ_pt = new TH1F("McZ_pt","MC Boson p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_McZ_y = new TH1F("McZ_y","MC Boson Rapidity;y;Arbitrary Units", 100, -5., 5.); - TH1F* h_McZ_rescM = new TH1F("McZ_rescM","Rescaled MC Boson Mass;m (GeV);Arbitrary Units", 100, 40., 130.); - TH1F* h_McZ_rescPt = new TH1F("McZ_rescPt","Rescaled MC Boson p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_McZ_rescY = new TH1F("McZ_rescY","Rescaled MC Boson Rapidity;y;Arbitrary Units", 100, -5., 5.); - - TH1F* h_McElec_pt = new TH1F("McElec_pt","MC Electron p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_McElec_eta = new TH1F("McElec_eta","MC Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - - TH1F* h_McTag_pt = new TH1F("McTag_pt","MC Electron p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_McTag_eta = new TH1F("McTag_eta","MC Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McTag_rescPt = new TH1F("McTag_rescPt","Rescaled MC Electron p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_McTag_rescEta = new TH1F("McTag_rescEta","Rescaled MC Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - - TH1F* h_McNu_pt = new TH1F("McNu_pt","MC Neutrino p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_McNu_eta = new TH1F("McNu_eta","MC Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - - TH1F* h_McProbe_pt = new TH1F("McProbe_pt","MC Neutrino p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_McProbe_eta = new TH1F("McProbe_eta","MC Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_McProbe_rescPt = new TH1F("McProbe_rescPt","Rescaled MC Neutrino p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_McProbe_rescEta = new TH1F("McProbe_rescEta","Rescaled MC Neutrino #eta;#eta;Arbitrary Units", 100, -3., 3.); - - TH1F* h_McTagProbe_dPhi = new TH1F("McElecNu_dPhi", ";#Delta#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_McTagProbe_dEta = new TH1F("McElecNu_dEta", ";#Delta#eta;Arbitrary Units", 100, 0., 5.); - TH1F* h_McTagProbe_dR = new TH1F("McElecNu_dR", ";#DeltaR;Arbitrary Units", 100, 0., 3.); - TH1F* h_McElecNu_dPhi = new TH1F("McElecNu_dPhi", ";#Delta#phi;Arbitrary Units", 100, 0., 3.1416); - TH1F* h_McElecNu_dEta = new TH1F("McElecNu_dEta", ";#Delta#eta;Arbitrary Units", 100, 0., 5.); - TH1F* h_McElecNu_dR = new TH1F("McElecNu_dR", ";#DeltaR;Arbitrary Units", 100, 0., 3.); - - TH1F* h_W_pt = new TH1F("W_pt","Boson p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_W_y = new TH1F("W_y","Boson Rapidity;y;Arbitrary Units", 100, -5., 5.); - TH1F* h_W_rescPt = new TH1F("W_rescPt","Rescaled Boson p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_W_rescY = new TH1F("W_rescY","Rescaled Boson Rapidity;y;Arbitrary Units", 100, -5., 5.); - - TH1F* h_Z_pt = new TH1F("Z_pt","Boson p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_Z_y = new TH1F("Z_y","Boson Rapidity;y;Arbitrary Units", 100, -5., 5.); - TH1F* h_Z_rescPt = new TH1F("Z_rescPt","Rescaled Boson p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_Z_rescY = new TH1F("Z_rescY","Rescaled Boson Rapidity;y;Arbitrary Units", 100, -5., 5.); - - TH1F* h_tag_q = new TH1F("tag_q","Electron Charge;q;Arbitrary Units", 3, -1.5, 1.5); - TH1F* h_tag_pt = new TH1F("tag_pt","Electron p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_tag_rescPt = new TH1F("tag_rescPt","Rescaled Electron p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_tag_eta = new TH1F("tag_eta","Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_tag_rescEta = new TH1F("tag_rescEta","Rescaled Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_tag_ecaliso = new TH1F("tag_ecaliso","Electron ECAL isolation;ECAL isolation;Arbitrary Units", 100, 0., 10.); - TH1F* h_tag_hcaliso = new TH1F("tag_hcaliso","Electron HCAL isolation;HCAL isolation;Arbitrary Units", 100, 0., 5.); - TH1F* h_tag_trackiso = new TH1F("tag_trackiso","Electron Track isolation;Track isolation;Arbitrary Units", 100, 0., 5.); - TH1F* h_tag_dPhi = new TH1F("tag_dPhi","Electron #Delta #phi_{in};#Delta #phi_{in};Arbitrary Units", 100, 0., 0.05); - TH1F* h_tag_dEta = new TH1F("tag_dEta","Electron #Delta #eta_{in};#Delta #eta_{in};Arbitrary Units", 100, 0., 0.01); - TH1F* h_tag_sIhIh = new TH1F("tag_sIhIh","Electron #sigma_{i#eta i#eta};#sigma_{i#eta i#eta};Arbitrary Units", 100, 0., 0.02); - - TH1F* h_elec_q = new TH1F("elec_q","Electron Charge;q;Arbitrary Units", 3, -1.5, 1.5); - TH1F* h_elec_pt = new TH1F("elec_pt","Electron p_{T};p_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_elec_eta = new TH1F("elec_eta","Electron #eta;#eta;Arbitrary Units", 100, -3., 3.); - TH1F* h_elec_ecaliso = new TH1F("elec_ecaliso","Electron ECAL isolation;ECAL isolation;Arbitrary Units", 100, 0., 10.); - TH1F* h_elec_hcaliso = new TH1F("elec_hcaliso","Electron HCAL isolation;HCAL isolation;Arbitrary Units", 100, 0., 5.); - TH1F* h_elec_trackiso = new TH1F("elec_trackiso","Electron Track isolation;Track isolation;Arbitrary Units", 100, 0., 5.); - TH1F* h_elec_dPhi = new TH1F("elec_dPhi","Electron #Delta #phi_{in};#Delta #phi_{in};Arbitrary Units", 100, 0., 0.05); - TH1F* h_elec_dEta = new TH1F("elec_dEta","Electron #Delta #eta_{in};#Delta #eta_{in};Arbitrary Units", 100, 0., 0.01); - TH1F* h_elec_sIhIh = new TH1F("elec_sIhIh","Electron #sigma_{i#eta i#eta};#sigma_{i#eta i#eta};Arbitrary Units", 100, 0., 0.02); - - TH1F* h_mcWGenMEtin_pass_EB = new TH1F("mcWGenMEtin_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWGenMEtin_pass_EE = new TH1F("mcWGenMEtin_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWGenMEtin_fail_EB = new TH1F("mcWGenMEtin_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWGenMEtin_fail_EE = new TH1F("mcWGenMEtin_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWGenMEtout_pass_EB = new TH1F("mcWGenMEtout_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWGenMEtout_pass_EE = new TH1F("mcWGenMEtout_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWGenMEtout_fail_EB = new TH1F("mcWGenMEtout_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWGenMEtout_fail_EE = new TH1F("mcWGenMEtout_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_mcWCaloMEtin_pass_EB = new TH1F("mcWCaloMEtin_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWCaloMEtin_pass_EE = new TH1F("mcWCaloMEtin_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWCaloMEtin_fail_EB = new TH1F("mcWCaloMEtin_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWCaloMEtin_fail_EE = new TH1F("mcWCaloMEtin_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWCaloMEtout_pass_EB = new TH1F("mcWCaloMEtout_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWCaloMEtout_pass_EE = new TH1F("mcWCaloMEtout_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWCaloMEtout_fail_EB = new TH1F("mcWCaloMEtout_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWCaloMEtout_fail_EE = new TH1F("mcWCaloMEtout_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_mcWTcMEtin_pass_EB = new TH1F("mcWTcMEtin_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWTcMEtin_pass_EE = new TH1F("mcWTcMEtin_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWTcMEtin_fail_EB = new TH1F("mcWTcMEtin_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWTcMEtin_fail_EE = new TH1F("mcWTcMEtin_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWTcMEtout_pass_EB = new TH1F("mcWTcMEtout_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWTcMEtout_pass_EE = new TH1F("mcWTcMEtout_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWTcMEtout_fail_EB = new TH1F("mcWTcMEtout_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWTcMEtout_fail_EE = new TH1F("mcWTcMEtout_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_mcWPfMEtin_pass_EB = new TH1F("mcWPfMEtin_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWPfMEtin_pass_EE = new TH1F("mcWPfMEtin_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWPfMEtin_fail_EB = new TH1F("mcWPfMEtin_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWPfMEtin_fail_EE = new TH1F("mcWPfMEtin_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWPfMEtout_pass_EB = new TH1F("mcWPfMEtout_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWPfMEtout_pass_EE = new TH1F("mcWPfMEtout_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWPfMEtout_fail_EB = new TH1F("mcWPfMEtout_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_mcWPfMEtout_fail_EE = new TH1F("mcWPfMEtout_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_WGenMEt_pass_EB = new TH1F("WGenMEt_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WGenMEt_pass_EE = new TH1F("WGenMEt_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WGenMEt_fail_EB = new TH1F("WGenMEt_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WGenMEt_fail_EE = new TH1F("WGenMEt_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WGenMEt_pass = new TH1F("WGenMEt_pass","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WGenMEt_fail = new TH1F("WGenMEt_fail","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_WCaloMEt_pass_EB = new TH1F("WCaloMEt_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WCaloMEt_pass_EE = new TH1F("WCaloMEt_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WCaloMEt_fail_EB = new TH1F("WCaloMEt_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WCaloMEt_fail_EE = new TH1F("WCaloMEt_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WCaloMEt_pass = new TH1F("WCaloMEt_pass","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WCaloMEt_fail = new TH1F("WCaloMEt_fail","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_WTcMEt_pass_EB = new TH1F("WTcMEt_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WTcMEt_pass_EE = new TH1F("WTcMEt_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WTcMEt_fail_EB = new TH1F("WTcMEt_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WTcMEt_fail_EE = new TH1F("WTcMEt_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WTcMEt_pass = new TH1F("WTcMEt_pass","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WTcMEt_fail = new TH1F("WTcMEt_fail","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_WPfMEt_pass_EB = new TH1F("WPfMEt_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WPfMEt_pass_EE = new TH1F("WPfMEt_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WPfMEt_fail_EB = new TH1F("WPfMEt_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WPfMEt_fail_EE = new TH1F("WPfMEt_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WPfMEt_pass = new TH1F("WPfMEt_pass","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_WPfMEt_fail = new TH1F("WPfMEt_fail","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_ErsatzMEt_pass_EB = new TH1F("ErsatzMEt_pass_EB","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_pass_EE = new TH1F("ErsatzMEt_pass_EE","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_fail_EB = new TH1F("ErsatzMEt_fail_EB","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_fail_EE = new TH1F("ErsatzMEt_fail_EE","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_pass = new TH1F("ErsatzMEt_pass","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzMEt_fail = new TH1F("ErsatzMEt_fail","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_ErsatzGenMEt_pass_EB = new TH1F("ErsatzGenMEt_pass_EB","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzGenMEt_pass_EE = new TH1F("ErsatzGenMEt_pass_EE","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzGenMEt_fail_EB = new TH1F("ErsatzGenMEt_fail_EB","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzGenMEt_fail_EE = new TH1F("ErsatzGenMEt_fail_EE","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzGenMEt_pass = new TH1F("ErsatzGenMEt_pass","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzGenMEt_fail = new TH1F("ErsatzGenMEt_fail","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_ErsatzCaloMEt_pass_EB = new TH1F("ErsatzCaloMEt_pass_EB","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzCaloMEt_pass_EE = new TH1F("ErsatzCaloMEt_pass_EE","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzCaloMEt_fail_EB = new TH1F("ErsatzCaloMEt_fail_EB","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzCaloMEt_fail_EE = new TH1F("ErsatzCaloMEt_fail_EE","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzCaloMEt_pass = new TH1F("ErsatzCaloMEt_pass","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzCaloMEt_fail = new TH1F("ErsatzCaloMEt_fail","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_ErsatzTcMEt_pass_EB = new TH1F("ErsatzTcMEt_pass_EB","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzTcMEt_pass_EE = new TH1F("ErsatzTcMEt_pass_EE","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzTcMEt_fail_EB = new TH1F("ErsatzTcMEt_fail_EB","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzTcMEt_fail_EE = new TH1F("ErsatzTcMEt_fail_EE","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzTcMEt_pass = new TH1F("ErsatzTcMEt_pass","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzTcMEt_fail = new TH1F("ErsatzTcMEt_fail","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_ErsatzPfMEt_pass_EB = new TH1F("ErsatzPfMEt_pass_EB","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzPfMEt_pass_EE = new TH1F("ErsatzPfMEt_pass_EE","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzPfMEt_fail_EB = new TH1F("ErsatzPfMEt_fail_EB","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzPfMEt_fail_EE = new TH1F("ErsatzPfMEt_fail_EE","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzPfMEt_pass = new TH1F("ErsatzPfMEt_pass","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - TH1F* h_ErsatzPfMEt_fail = new TH1F("ErsatzPfMEt_fail","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.); - - TH1F* h_acceptance_correction_genMEt_pass_EB = new TH1F("acceptance_correction_genMEt_pass_EB", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - TH1F* h_acceptance_correction_genMEt_pass_EE = new TH1F("acceptance_correction_genMEt_pass_EE", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - TH1F* h_acceptance_correction_genMEt_fail_EB = new TH1F("acceptance_correction_genMEt_fail_EB", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - TH1F* h_acceptance_correction_genMEt_fail_EE = new TH1F("acceptance_correction_genMEt_fail_EE", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - - TH1F* h_acceptance_correction_caloMEt_pass_EB = new TH1F("acceptance_correction_caloMEt_pass_EB", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - TH1F* h_acceptance_correction_caloMEt_pass_EE = new TH1F("acceptance_correction_caloMEt_pass_EE", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - TH1F* h_acceptance_correction_caloMEt_fail_EB = new TH1F("acceptance_correction_caloMEt_fail_EB", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - TH1F* h_acceptance_correction_caloMEt_fail_EE = new TH1F("acceptance_correction_caloMEt_fail_EE", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - - TH1F* h_acceptance_correction_tcMEt_pass_EB = new TH1F("acceptance_correction_tcMEt_pass_EB", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - TH1F* h_acceptance_correction_tcMEt_pass_EE = new TH1F("acceptance_correction_tcMEt_pass_EE", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - TH1F* h_acceptance_correction_tcMEt_fail_EB = new TH1F("acceptance_correction_tcMEt_fail_EB", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - TH1F* h_acceptance_correction_tcMEt_fail_EE = new TH1F("acceptance_correction_tcMEt_fail_EE", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - - TH1F* h_acceptance_correction_pfMEt_pass_EB = new TH1F("acceptance_correction_pfMEt_pass_EB", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - TH1F* h_acceptance_correction_pfMEt_pass_EE = new TH1F("acceptance_correction_pfMEt_pass_EE", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - TH1F* h_acceptance_correction_pfMEt_fail_EB = new TH1F("acceptance_correction_pfMEt_fail_EB", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - TH1F* h_acceptance_correction_pfMEt_fail_EE = new TH1F("acceptance_correction_pfMEt_fail_EE", "Acceptance Correction;#slash{E}_{T} (GeV);Acceptance Correction", 100, 0., 100.); - - TH1F* h_dpt_pf_gsf = new TH1F("h_dpt_pf_gsf", "pf p_{T} - gsf p_{T};#Delta p_{T} (GeV);Arbitrary Units", 100, -10., 10.); - TH1F* h_dpt_pf_gsf_EB = new TH1F("h_dpt_pf_gsf_EB", "pf p_{T} - gsf p_{T};#Delta p_{T} (GeV);Arbitrary Units", 100, -10., 10.); - TH1F* h_dpt_pf_gsf_EE = new TH1F("h_dpt_pf_gsf_EE", "pf p_{T} - gsf p_{T};#Delta p_{T} (GeV);Arbitrary Units", 100, -10., 10.); - TH1F* h_nMatched = new TH1F("h_nMatched", "Particle Flow Matching;nMatched;Arbitrary Units", 4, 0., 4.); - TH1F* h_nMatched_EB = new TH1F("h_nMatched_EB", "Particle Flow Matching;nMatched;Arbitrary Units", 4, 0., 4.); - TH1F* h_nMatched_EE = new TH1F("h_nMatched_EE", "Particle Flow Matching;nMatched;Arbitrary Units", 4, 0., 4.); - - cout << "Declared Histograms" << endl; - - TRandom3 r; - - TString WFileName = datapath+"WenuTrue.root"; - TFile *fileW = TFile::Open(WFileName); - cout << "Opened W Monte Carlo file" << endl; - TTree *t = (TTree*) fileW->Get("analyse/AnalysisData"); - cout << "Got W TTree" << endl; - - long nEntries = t->GetEntriesFast(); - cout << "Total number of W events = " << nEntries << endl; - - int nSelElecs; - - int elec_q[4]; - double elec_pt[4], elec_eta[4], elec_phi[4]; - double elec_trackiso[4], elec_ecaliso[4], elec_hcaliso[4]; - double elec_sIhIh[4], elec_dPhi[4], elec_dEta[4]; - double elec_eop[4], elec_hoe[4], elec_pin[4], elec_pout[4]; - double elec_e1x5[4], elec_e2x5[4], elec_e5x5[4]; - - double McElec_pt, McElec_eta, McElec_phi; - double McNu_pt, McNu_eta, McNu_phi; - double McElecNu_dPhi, McElecNu_dEta, McElecNu_dR; - double McW_m, McW_pt, McW_y, McW_phi; - double GenMEt_W, CaloMEt_W, TcMEt_W, PfMEt_W;//, CaloMEt25, CaloMEt30; - //double CaloMt[4];// CaloMt25[4], CaloMt30[4]; - - TBranch* bMcW_m = t->GetBranch("Boson_m"); - bMcW_m->SetAddress(&McW_m); - TBranch* bMcW_pt = t->GetBranch("Boson_pt"); - bMcW_pt->SetAddress(&McW_pt); - TBranch* bMcW_y = t->GetBranch("Boson_y"); - bMcW_y->SetAddress(&McW_y); - TBranch* bnSelElecs = t->GetBranch("nSelElecs"); - bnSelElecs->SetAddress(&nSelElecs); - //TBranch* belec_q = t->GetBranch("elec_q"); - //belec_q->SetAddress(&elec_q); - TBranch* belec_pt = t->GetBranch("elec_pt"); - belec_pt->SetAddress(&elec_pt); - TBranch* belec_eta = t->GetBranch("elec_eta"); - belec_eta->SetAddress(&elec_eta); - TBranch* belec_phi = t->GetBranch("elec_phi"); - belec_phi->SetAddress(&elec_phi); - TBranch* belec_trackiso = t->GetBranch("elec_trckIso"); - belec_trackiso->SetAddress(&elec_trackiso); - TBranch* belec_ecaliso = t->GetBranch("elec_ecalIso"); - belec_ecaliso->SetAddress(&elec_ecaliso); - TBranch* belec_hcaliso = t->GetBranch("elec_hcalIso"); - belec_hcaliso->SetAddress(&elec_hcaliso); - TBranch* bElec_sIhIh = t->GetBranch("elec_sIhIh"); - bElec_sIhIh->SetAddress(&elec_sIhIh); - TBranch* bElec_dPhi = t->GetBranch("elec_dPhiIn"); - bElec_dPhi->SetAddress(&elec_dPhi); - TBranch* bElec_dEta = t->GetBranch("elec_dEtaIn"); - bElec_dEta->SetAddress(&elec_dEta); - cout << "moooooooooooooo" << endl; - TBranch* bMcElec_pt = t->GetBranch("RndmMcElec_pt"); - bMcElec_pt->SetAddress(&McElec_pt); - TBranch* bMcElec_eta = t->GetBranch("RndmMcElec_eta"); - bMcElec_eta->SetAddress(&McElec_eta); - TBranch* bMcElec_phi = t->GetBranch("RndmMcElec_phi"); - bMcElec_phi->SetAddress(&McElec_phi); - cout << "moooooooooooooo" << endl; - TBranch* bMcNu_pt = t->GetBranch("McNu_pt"); - bMcNu_pt->SetAddress(&McNu_pt); - TBranch* bMcNu_eta = t->GetBranch("McNu_eta"); - bMcNu_eta->SetAddress(&McNu_eta); - TBranch* bMcNu_phi = t->GetBranch("McNu_phi"); - bMcNu_phi->SetAddress(&McNu_phi); - cout << "moooooooooooooo" << endl; - TBranch* bMcElecNu_dPhi = t->GetBranch("McLeptons_dPhi"); - bMcElecNu_dPhi->SetAddress(&McElecNu_dPhi); - TBranch* bMcElecNu_dEta = t->GetBranch("McLeptons_dEta"); - bMcElecNu_dEta->SetAddress(&McElecNu_dEta); - TBranch* bMcElecNu_dR = t->GetBranch("McLeptons_dR"); - bMcElecNu_dR->SetAddress(&McElecNu_dR); - TBranch* bGen_MEt = t->GetBranch("genMEt"); - bGen_MEt->SetAddress(&GenMEt_W); - TBranch* bCalo_MEt = t->GetBranch("caloMEt"); - bCalo_MEt->SetAddress(&CaloMEt_W); - TBranch* bTc_MEt = t->GetBranch("tcMEt"); - bTc_MEt->SetAddress(&TcMEt_W); - TBranch* bPf_MEt = t->GetBranch("pfMEt"); - bPf_MEt->SetAddress(&PfMEt_W); -// TBranch* bCalo_MEt25 = t->GetBranch("caloMEt25"); -// bCalo_MEt25->SetAddress(&CaloMEt25); -// TBranch* bCalo_MEt30 = t->GetBranch("caloMEt30"); -// bCalo_MEt30->SetAddress(&CaloMEt30); -// TBranch* bCalo_Mt = t->GetBranch("caloMt"); -// bCalo_Mt->SetAddress(&CaloMt); - cout << "Set up branches" << endl; - - //long nentries = t->GetEntries(); - //int index = 0; - int aaa = 0, bbb = 0, ccc = 0, ddd = 0; - for(long i = 0; i < nEntries; ++i) - { - if(i%100000 == 0) cout <<"Analysing event "<< i << endl; - //if (i == ChosenEvents[index]) - //{ - //index++; - //bool iIsChosen = (i == ChosenEvents[index]); - t->GetEntry(i); - h_McElec_pt->Fill(McElec_pt); - h_McElec_eta->Fill(McElec_eta); - h_McNu_pt->Fill(McNu_pt); - h_McNu_eta->Fill(McNu_eta); - h_McElecNu_dPhi->Fill(McElecNu_dPhi); - h_McElecNu_dEta->Fill(McElecNu_dEta); - h_McElecNu_dR->Fill(McElecNu_dR); - h_McW_m->Fill(McW_m); - h_McW_pt->Fill(McW_pt); - h_McW_y->Fill(McW_y); - //h_elec_q->Fill(elec_q[0]); - h_elec_pt->Fill(elec_pt[0]); - h_elec_eta->Fill(elec_eta[0]); - h_elec_ecaliso->Fill(elec_ecaliso[0]); - h_elec_hcaliso->Fill(elec_hcaliso[0]); - h_elec_trackiso->Fill(elec_trackiso[0]); - h_elec_dEta->Fill(elec_dEta[0]); - h_elec_dPhi->Fill(elec_dPhi[0]); - h_elec_sIhIh->Fill(elec_sIhIh[0]); - //h_elec_eop->Fill(elec_eop[0]); - //h_elec_hoe->Fill(elec_hoe[0]); - //h_elec_pin->Fill(elec_pin[0]); - //h_elec_pout->Fill(elec_pout[0]); - //h_elec_e1x5->Fill(elec_e1x5[0]); - //h_elec_e2x5->Fill(elec_e2x5[0]); - //h_elec_e5x5->Fill(elec_e5x5[0]); - if(elec_pt[0] > cPt) - { - bool pass_e_cuts = false; - bool pass_trkiso_cut = false; - bool inBarrel = false; - bool inEndcap = false; - if(fabs(elec_eta[0]) < 1.4442) - { - pass_e_cuts = (elec_sIhIh[0] < csIhIh_EB); - pass_trkiso_cut = (elec_trackiso[0] < cTrackiso_EB); - inBarrel = true; - }else if(fabs(elec_eta[0]) < 2.5) - { - pass_e_cuts = (elec_sIhIh[0] < csIhIh_EE); - pass_trkiso_cut = (elec_trackiso[0] < cTrackiso_EE); - inEndcap = true; - } - if(pass_e_cuts) - { - if(pass_trkiso_cut) - { - h_WGenMEt_pass->Fill(GenMEt_W); - h_WCaloMEt_pass->Fill(CaloMEt_W); - h_WTcMEt_pass->Fill(TcMEt_W); - h_WPfMEt_pass->Fill(PfMEt_W); - if(inBarrel) - { - h_WGenMEt_pass_EB->Fill(GenMEt_W); - h_WCaloMEt_pass_EB->Fill(CaloMEt_W); - h_WTcMEt_pass_EB->Fill(TcMEt_W); - h_WPfMEt_pass_EB->Fill(PfMEt_W); - aaa++; - if(fabs(McNu_eta) < 2.5) - { - h_mcWGenMEtin_pass_EB->Fill(GenMEt_W); - h_mcWCaloMEtin_pass_EB->Fill(CaloMEt_W); - h_mcWTcMEtin_pass_EB->Fill(TcMEt_W); - h_mcWPfMEtin_pass_EB->Fill(PfMEt_W); - }else{ - h_mcWGenMEtout_pass_EB->Fill(GenMEt_W); - h_mcWCaloMEtout_pass_EB->Fill(CaloMEt_W); - h_mcWTcMEtout_pass_EB->Fill(TcMEt_W); - h_mcWPfMEtout_pass_EB->Fill(PfMEt_W); - } - } - if(inEndcap) - { - h_WGenMEt_pass_EE->Fill(GenMEt_W); - h_WCaloMEt_pass_EE->Fill(CaloMEt_W); - h_WTcMEt_pass_EE->Fill(TcMEt_W); - h_WPfMEt_pass_EE->Fill(PfMEt_W); - bbb++; - if(fabs(McNu_eta) < 2.5) - { - h_mcWGenMEtin_pass_EE->Fill(GenMEt_W); - h_mcWCaloMEtin_pass_EE->Fill(CaloMEt_W); - h_mcWTcMEtin_pass_EE->Fill(TcMEt_W); - h_mcWPfMEtin_pass_EE->Fill(PfMEt_W); - }else{ - h_mcWGenMEtout_pass_EE->Fill(GenMEt_W); - h_mcWCaloMEtout_pass_EE->Fill(CaloMEt_W); - h_mcWTcMEtout_pass_EE->Fill(TcMEt_W); - h_mcWPfMEtout_pass_EE->Fill(PfMEt_W); - } - } - }else - { - h_WGenMEt_fail->Fill(GenMEt_W); - h_WCaloMEt_fail->Fill(CaloMEt_W); - h_WTcMEt_fail->Fill(TcMEt_W); - h_WPfMEt_fail->Fill(PfMEt_W); - if(inBarrel) - { - h_WGenMEt_fail_EB->Fill(GenMEt_W); - h_WCaloMEt_fail_EB->Fill(CaloMEt_W); - h_WTcMEt_fail_EB->Fill(TcMEt_W); - h_WPfMEt_fail_EB->Fill(PfMEt_W); - ccc++; - if(fabs(McNu_eta) < 2.5) - { - h_mcWGenMEtin_fail_EB->Fill(GenMEt_W); - h_mcWCaloMEtin_fail_EB->Fill(CaloMEt_W); - h_mcWTcMEtin_fail_EB->Fill(TcMEt_W); - h_mcWPfMEtin_fail_EB->Fill(PfMEt_W); - }else{ - h_mcWGenMEtout_fail_EB->Fill(GenMEt_W); - h_mcWCaloMEtout_fail_EB->Fill(CaloMEt_W); - h_mcWTcMEtout_fail_EB->Fill(TcMEt_W); - h_mcWPfMEtout_fail_EB->Fill(PfMEt_W); - } - } - if(inEndcap) - { - h_WGenMEt_fail_EE->Fill(GenMEt_W); - h_WCaloMEt_fail_EE->Fill(CaloMEt_W); - h_WTcMEt_fail_EE->Fill(TcMEt_W); - h_WPfMEt_fail_EE->Fill(PfMEt_W); - ddd++; - if(fabs(McNu_eta) < 2.5) - { - h_mcWGenMEtin_fail_EE->Fill(GenMEt_W); - h_mcWCaloMEtin_fail_EE->Fill(CaloMEt_W); - h_mcWTcMEtin_fail_EE->Fill(TcMEt_W); - h_mcWPfMEtin_fail_EE->Fill(PfMEt_W); - }else{ - h_mcWGenMEtout_fail_EE->Fill(GenMEt_W); - h_mcWCaloMEtout_fail_EE->Fill(CaloMEt_W); - h_mcWTcMEtout_fail_EE->Fill(TcMEt_W); - h_mcWPfMEtout_fail_EE->Fill(PfMEt_W); - } - } - } - } - } - } - fileW->Close(); - cout << "Closed W Monte Carlo file" << endl; - - cout << "Number of W events passing selection cuts = " << aaa+bbb+ccc+ddd << endl; - cout << "Number Pass EB = " << aaa << endl; - cout << "Number Pass EE = " << bbb << endl; - cout << "Number Fail EB = " << ccc << endl; - cout << "Number Fail EE = " << ddd << endl; - - TString ErsatzFileName = datapath+process+".root"; - TFile *fileZ = TFile::Open(ErsatzFileName); - cout << "Opened Ersatz data file" << endl; - t = (TTree*) fileZ->Get("ErsatzMEt/ErsatzMEt"); - cout << "Got ersatz TTree" << endl; - nEntries = t->GetEntries(); - cout << "Total number of ersatz events = " << nEntries << endl; - - int nTags, nProbes; - int nTagMatched, nProbeMatched; - double GenMEt, CaloMEt, PfMEt, TcMEt; - double GenMEtphi, CaloMEtphi, PfMEtphi, TcMEtphi; - double McZ_m, McZ_pt, McZ_y; - double McZ_rescM, McZ_rescPt, McZ_rescY; - double McTag_pt[4], McTag_eta[4]; - double McTag_rescPt[4], McTag_rescEta[4]; - double McProbe_pt[4], McProbe_eta[4]; - double McProbe_rescPt[4], McProbe_rescEta[4]; - double McTagProbe_dPhi[4], McTagProbe_dEta[4], McTagProbe_dR[4]; - int tag_q[4]; - double tag_pt[4], tag_eta[4], tag_phi[4]; - double tag_rescPt[4], tag_rescEta[4], tag_rescPhi[4]; - double tag_trackiso[4], tag_ecaliso[4], tag_hcaliso[4]; - double tag_sIhIh[4], tag_dPhi[4], tag_dEta[4]; - double tag_eop[4], tag_hoe[4], tag_pin[4], tag_pout[4]; - double tag_e1x5[4], tag_e2x5[4], tag_e5x5[4]; - int probe_q[4]; - double probe_pt[4], probe_eta[4], probe_phi[4]; - double probe_rescPt[4], probe_rescEta[4], probe_rescPhi[4]; - double probe_trackiso[4], probe_ecaliso[4], probe_hcaliso[4]; - double probe_sIhIh[4], probe_dPhi[4], probe_dEta[4]; - double probe_eop[4], probe_hoe[4], probe_pin[4], probe_pout[4]; - double probe_e1x5[4], probe_e2x5[4], probe_e5x5[4]; - double Z_m[4], Z_pt[4], Z_y[4], Z_phi[4]; - double Z_rescM[4], Z_rescPt[4], Z_rescY[4], Z_rescPhi[4]; - int sc_nClus[4]; - double sc_E[4], sc_rawE[4], sc_fEtaCorr[4], sc_fBremCorr[4]; - double ErsatzGenMEt[4], ErsatzCaloMEt[4], ErsatzPfMEt[4], ErsatzTcMEt[4], ErsatzT1MEt[4]; - //double ErsatzGenMEtPhi[4], ErsatzCaloMEtPhi[4], ErsatzPfMEtPhi[4], ErsatzTcMEtPhi[4]; - //double ErsatzGenMt[4], ErsatzCaloMt[4], ErsatzPfMt[4], ErsatzTcMt[4]; - double dpt_pf_gsf[4]; - double mesc[4]; - - TBranch* bnTags = t->GetBranch("nTags"); - bnTags->SetAddress(&nTags); - TBranch* bnProbes = t->GetBranch("nProbes"); - bnProbes->SetAddress(&nProbes); - TBranch* bnTagMatched = t->GetBranch("nTagMatched"); - bnTagMatched->SetAddress(&nTagMatched); - TBranch* bnProbeMatched = t->GetBranch("nProbeMatched"); - bnProbeMatched->SetAddress(&nProbeMatched); - TBranch* bdpt_pf_gsf = t->GetBranch("dpt_pf_gsf"); - bdpt_pf_gsf->SetAddress(&dpt_pf_gsf); - cout << "moooooooooooooo" << endl; - //MET - TBranch* bGenMEt = t->GetBranch("GenMEt"); - bGenMEt->SetAddress(&GenMEt); - TBranch* bCaloMEt = t->GetBranch("CaloMEt"); - bCaloMEt->SetAddress(&CaloMEt); - TBranch* bPfMEt = t->GetBranch("PfMEt"); - bPfMEt->SetAddress(&PfMEt); - TBranch* bTcMEt = t->GetBranch("TcMEt"); - bTcMEt->SetAddress(&TcMEt); - cout << "moooooooooooooo" << endl; - //MET phi - TBranch* bGenMEtphi = t->GetBranch("GenMEtphi"); - bGenMEtphi->SetAddress(&GenMEtphi); - TBranch* bCaloMEtphi = t->GetBranch("CaloMEtphi"); - bCaloMEtphi->SetAddress(&CaloMEtphi); - TBranch* bPfMEtphi = t->GetBranch("PfMEtphi"); - bPfMEtphi->SetAddress(&PfMEtphi); - TBranch* bTcMEtphi = t->GetBranch("TcMEtphi"); - bTcMEtphi->SetAddress(&TcMEtphi); - cout << "moooooooooooooo" << endl; - //Mc particles - TBranch* bMcZ_m = t->GetBranch("McZ_m"); - bMcZ_m->SetAddress(&McZ_m); - TBranch* bMcZ_pt = t->GetBranch("McZ_Pt"); - bMcZ_pt->SetAddress(&McZ_pt); - TBranch* bMcZ_y = t->GetBranch("McZ_y"); - bMcZ_y->SetAddress(&McZ_y); - TBranch* bMcZ_rescM = t->GetBranch("McZ_rescM"); - bMcZ_rescM->SetAddress(&McZ_rescM); - TBranch* bMcZ_rescPt = t->GetBranch("McZ_rescPt"); - bMcZ_rescPt->SetAddress(&McZ_rescPt); - TBranch* bMcZ_rescY = t->GetBranch("McZ_rescY"); - bMcZ_rescY->SetAddress(&McZ_rescY); - cout << "moooooooooooooo" << endl; - TBranch* bMcTag_pt = t->GetBranch("McElec_pt"); - bMcTag_pt->SetAddress(&McTag_pt); - TBranch* bMcTag_eta = t->GetBranch("McElec_eta"); - bMcTag_eta->SetAddress(&McTag_eta); - TBranch* bMcTag_rescPt = t->GetBranch("McElec_rescPt"); - bMcTag_rescPt->SetAddress(&McTag_rescPt); - TBranch* bMcTag_rescEta = t->GetBranch("McElec_rescEta"); - bMcTag_rescEta->SetAddress(&McTag_rescEta); - cout << "moooooooooooooo" << endl; - TBranch* bMcProbe_pt = t->GetBranch("McProbe_pt"); - bMcProbe_pt->SetAddress(&McProbe_pt); - TBranch* bMcProbe_eta = t->GetBranch("McProbe_eta"); - bMcProbe_eta->SetAddress(&McProbe_eta); - TBranch* bMcProbe_rescPt = t->GetBranch("McProbe_rescPt"); - bMcProbe_rescPt->SetAddress(&McProbe_rescPt); - TBranch* bMcProbe_rescEta = t->GetBranch("McProbe_rescEta"); - bMcProbe_rescEta->SetAddress(&McProbe_rescEta); - cout << "moooooooooooooo" << endl; - TBranch* bMcTagProbe_dPhi = t->GetBranch("McElecProbe_dPhi"); - bMcTagProbe_dPhi->SetAddress(&McTagProbe_dPhi); - TBranch* bMcTagProbe_dEta = t->GetBranch("McElecProbe_dEta"); - bMcTagProbe_dEta->SetAddress(&McTagProbe_dEta); - TBranch* bMcTagProbe_dR = t->GetBranch("McElecProbe_dR"); - bMcTagProbe_dR->SetAddress(&McTagProbe_dR); - - //Z boson properties - TBranch* bZ_m = t->GetBranch("Z_m"); - bZ_m->SetAddress(&Z_m); - TBranch* bZ_pt = t->GetBranch("Z_pt"); - bZ_pt->SetAddress(&Z_pt); - TBranch* bZ_y = t->GetBranch("Z_y"); - bZ_y->SetAddress(&Z_y); - //TBranch* bZ_eta = t->GetBranch("Z_eta"); - //bZ_eta->SetAddress(&Z_eta); - TBranch* bZ_phi = t->GetBranch("Z_phi"); - bZ_phi->SetAddress(&Z_phi); - TBranch* bZ_rescM = t->GetBranch("Z_rescM"); - bZ_rescM->SetAddress(&Z_rescM); - TBranch* bZ_rescPt = t->GetBranch("Z_rescPt"); - bZ_rescPt->SetAddress(&Z_rescPt); - TBranch* bZ_rescY = t->GetBranch("Z_rescY"); - bZ_rescY->SetAddress(&Z_rescY); - //TBranch* bZ_rescEta = t->GetBranch("Z_rescEta"); - //bZ_rescEta->SetAddress(&Z_rescEta); - TBranch* bZ_rescPhi = t->GetBranch("Z_rescPhi"); - bZ_rescPhi->SetAddress(&Z_rescPhi); - cout << "moooooooooooooo" << endl; - //tag properties - TBranch* bTag_q = t->GetBranch("tag_q"); - bTag_q->SetAddress(&tag_q); - TBranch* bTag_pt = t->GetBranch("tag_pt"); - bTag_pt->SetAddress(&tag_pt); - TBranch* bTag_eta = t->GetBranch("tag_eta"); - bTag_eta->SetAddress(&tag_eta); - TBranch* bTag_phi = t->GetBranch("tag_phi"); - bTag_phi->SetAddress(&tag_phi); - TBranch* bTag_rescPt = t->GetBranch("tag_rescPt"); - bTag_rescPt->SetAddress(&tag_rescPt); - TBranch* bTag_rescEta = t->GetBranch("tag_rescEta"); - bTag_rescEta->SetAddress(&tag_rescEta); - TBranch* bTag_rescPhi = t->GetBranch("tag_rescPhi"); - bTag_rescPhi->SetAddress(&tag_rescPhi); - TBranch* bTag_sIhIh = t->GetBranch("tag_sIhIh"); - bTag_sIhIh->SetAddress(&tag_sIhIh); - TBranch* bTag_dPhi = t->GetBranch("tag_dPhiIn"); - bTag_dPhi->SetAddress(&tag_dPhi); - TBranch* bTag_dEta = t->GetBranch("tag_dEtaIn"); - bTag_dEta->SetAddress(&tag_dEta); - TBranch* bTag_tIso = t->GetBranch("tag_trckIso"); - bTag_tIso->SetAddress(&tag_trackiso); - TBranch* bTag_eIso = t->GetBranch("tag_ecalIso"); - bTag_eIso->SetAddress(&tag_ecaliso); - TBranch* bTag_hIso = t->GetBranch("tag_hcalIso"); - bTag_hIso->SetAddress(&tag_hcaliso); - TBranch* bTag_pin = t->GetBranch("tag_pin"); - bTag_pin->SetAddress(&tag_pin); - TBranch* bTag_pout = t->GetBranch("tag_pout"); - bTag_pout->SetAddress(&tag_pout); - TBranch* bTag_eop = t->GetBranch("tag_eop"); - bTag_eop->SetAddress(&tag_eop); - TBranch* bTag_hoe = t->GetBranch("tag_hoe"); - bTag_hoe->SetAddress(&tag_hoe); - TBranch* bTag_e1x5 = t->GetBranch("tag_e1x5Max"); - bTag_e1x5->SetAddress(&tag_e1x5); - TBranch* bTag_e2x5 = t->GetBranch("tag_e2x5Max"); - bTag_e2x5->SetAddress(&tag_e2x5); - TBranch* bTag_e5x5 = t->GetBranch("tag_e5x5"); - bTag_e5x5->SetAddress(&tag_e5x5); - //probe properties - TBranch* bProbe_q = t->GetBranch("probe_q"); - bProbe_q->SetAddress(&probe_q); - TBranch* bProbe_pt = t->GetBranch("probe_pt"); - bProbe_pt->SetAddress(&probe_pt); - TBranch* bProbe_eta = t->GetBranch("probe_eta"); - bProbe_eta->SetAddress(&probe_eta); - TBranch* bProbe_phi = t->GetBranch("probe_phi"); - bProbe_phi->SetAddress(&probe_phi); - TBranch* bProbe_sIhIh = t->GetBranch("probe_sIhIh"); - bProbe_sIhIh->SetAddress(&probe_sIhIh); - TBranch* bProbe_dPhi = t->GetBranch("probe_dPhiIn"); - bProbe_dPhi->SetAddress(&probe_dPhi); - TBranch* bProbe_dEta = t->GetBranch("probe_dEtaIn"); - bProbe_dEta->SetAddress(&probe_dEta); - TBranch* bProbe_tIso = t->GetBranch("probe_trckIso"); - bProbe_tIso->SetAddress(&probe_trackiso); - TBranch* bProbe_eIso = t->GetBranch("probe_ecalIso"); - bProbe_eIso->SetAddress(&probe_ecaliso); - TBranch* bProbe_hIso = t->GetBranch("probe_hcalIso"); - bProbe_hIso->SetAddress(&probe_hcaliso); - TBranch* bProbe_pin = t->GetBranch("probe_pin"); - bProbe_pin->SetAddress(&probe_pin); - TBranch* bProbe_pout = t->GetBranch("probe_pout"); - bProbe_pout->SetAddress(&probe_pout); - TBranch* bProbe_eop = t->GetBranch("probe_eop"); - bProbe_eop->SetAddress(&probe_eop); - TBranch* bProbe_hoe = t->GetBranch("probe_hoe"); - bProbe_hoe->SetAddress(&probe_hoe); - TBranch* bProbe_e1x5 = t->GetBranch("probe_e1x5Max"); - bProbe_e1x5->SetAddress(&probe_e1x5); - TBranch* bProbe_e2x5 = t->GetBranch("probe_e2x5Max"); - bProbe_e2x5->SetAddress(&probe_e2x5); - TBranch* bProbe_e5x5 = t->GetBranch("probe_e5x5"); - bProbe_e5x5->SetAddress(&probe_e5x5); - //TBranch* bProbe_HCAL = t->GetBranch("probe_HcalE015"); - //bProbe_HCAL->SetAddress(&probe_HCAL); - //TBranch* bProbe_HCALEt = t->GetBranch("probe_HcalEt015"); - //bProbe_HCALEt->SetAddress(&probe_HCALEt); - //Sc energy - cout << "moooooooooooooo" << endl; - //Ersatz MEt results - TBranch* bErsatzGenMEt = t->GetBranch("ErsatzGenMEt"); - bErsatzGenMEt->SetAddress(&ErsatzGenMEt); - TBranch* bErsatzCaloMEt = t->GetBranch("ErsatzCaloMEt"); - bErsatzCaloMEt->SetAddress(&ErsatzCaloMEt); - TBranch* bErsatzPfMEt = t->GetBranch("ErsatzPfMEt"); - bErsatzPfMEt->SetAddress(&ErsatzPfMEt); - TBranch* bErsatzTcMEt = t->GetBranch("ErsatzTcMEt"); - bErsatzTcMEt->SetAddress(&ErsatzTcMEt); - cout << "moooooooooooooo" << endl; - TBranch* bMesc = t->GetBranch("Ersatz_Mesc"); - bMesc->SetAddress(&mesc); - cout << "Set up Branches" << endl; - - aaa=0, bbb=0, ccc=0, ddd=0; - for(int i=0; i < nEntries; ++i) - { - if(i%100000 == 0) cout <<"Processing event "<< i << endl; - t->GetEntry(i); - for(int j = 0; j < nProbes; ++j) - { - h_McTag_pt->Fill(McTag_pt[j]); - h_McTag_rescPt->Fill(McTag_rescPt[j]); - h_McTag_eta->Fill(McTag_eta[j]); - h_McTag_rescEta->Fill(McTag_rescEta[j]); - h_McProbe_pt->Fill(McProbe_pt[j]); - h_McProbe_rescPt->Fill(McProbe_rescPt[j]); - h_McProbe_eta->Fill(McProbe_eta[j]); - h_McProbe_rescEta->Fill(McProbe_rescEta[j]); - h_McTagProbe_dPhi->Fill(McTagProbe_dPhi[j]); - h_McTagProbe_dEta->Fill(McTagProbe_dEta[j]); - h_McTagProbe_dR->Fill(McTagProbe_dR[j]); - h_McZ_m->Fill(McZ_m); - h_McZ_rescM->Fill(McZ_rescM); - h_McZ_pt->Fill(McZ_pt); - h_McZ_rescPt->Fill(McZ_rescPt); - h_McZ_y->Fill(McZ_y); - h_McZ_rescY->Fill(McZ_rescY); - h_tag_q->Fill(tag_q[j]); - h_tag_pt->Fill(tag_pt[j]); - h_tag_rescPt->Fill(tag_rescPt[j]); - h_tag_eta->Fill(tag_eta[j]); - h_tag_rescEta->Fill(tag_rescEta[j]); - h_tag_ecaliso->Fill(tag_ecaliso[j]); - h_tag_hcaliso->Fill(tag_hcaliso[j]); - h_tag_trackiso->Fill(tag_trackiso[j]); - h_tag_dEta->Fill(tag_dEta[j]); - h_tag_dPhi->Fill(tag_dPhi[j]); - h_tag_sIhIh->Fill(tag_sIhIh[j]); - //h_tag_eop->Fill(tag_eop[j]); - //h_tag_hoe->Fill(tag_hoe[j]); - //h_tag_pin->Fill(tag_pin[j]); - //h_tag_pout->Fill(tag_pout[j]); - //h_tag_e1x5->Fill(tag_e1x5[j]); - //h_tag_e2x5->Fill(tag_e2x5[j]); - //h_tag_e5x5->Fill(tag_e5x5[j]); - //h_Z_pt->Fill(Z_pt[j]); - //h_Z_rescPt->Fill(Z_rescPt[j]); - //h_Z_y->Fill(Z_y[j]); - //h_Z_rescY->Fill(Z_rescY[j]); - bool passEtCut = false; - if(tag_rescPt[j] > cPt) passEtCut = true; - /* - if(process == "Zee" || process == "BCtoE_30to80" || process == "BCtoE_80to170"){ - if(tag_rescPt[j] > cPt) passEtCut = true; - }else{ - if(tag_pt[j] > (91.188/80.398)*cPt) passEtCut = true; - } - */ - if(passEtCut) - { - //if(fabs(mesc[j]-91.1876) < 21.1876) - //{ - bool pass_e_cuts = false; - bool pass_trkiso_cut = false; - bool inBarrel = false; - bool inEndcap = false; - if(fabs(tag_eta[j])<1.4442) - { - pass_e_cuts = (tag_ecaliso[j] < cECALiso_EB && tag_hcaliso[j] < cHCALiso_EB - && tag_sIhIh[j] < csIhIh_EB && tag_dPhi[j] < cDeltaPhi_EB - && tag_dEta[j] < cDeltaEta_EB); - pass_trkiso_cut = (tag_trackiso[j] < cTrackiso_EB); - inBarrel = true; - }else if(fabs(tag_eta[j] < 2.5)) - { - pass_e_cuts = (tag_ecaliso[j] < cECALiso_EE && tag_hcaliso[j] < cHCALiso_EE - && tag_sIhIh[j] < csIhIh_EE && tag_dPhi[j] < cDeltaPhi_EE - && tag_dEta[j] < cDeltaEta_EE); - pass_trkiso_cut = (tag_trackiso[j] < cTrackiso_EE); - inEndcap = true; - } - if(pass_e_cuts) - { - bool pass_probe_cuts = false; - double f1x5 = probe_e1x5[j]/probe_e5x5[j]; - double f2x5 = probe_e2x5[j]/probe_e5x5[j]; - if(fabs(probe_eta[j]) < 1.4442) - { - pass_probe_cuts = (/*probe_HCAL[j] < cHCAL && (*/f1x5 > cf1x5 || f2x5 > cf2x5//) - /*&& probe_elec[j] == celecmatch*/); - }else if(fabs(probe_eta[j] < 2.5)){ - pass_probe_cuts = (/*probe_HCALEt[j] < cHCALEt &&*/ probe_sIhIh[j] < cnusIhIh - /*&& probe_elec[j] == celecmatch*/); - } - if(pass_probe_cuts) - { - int EtaInt = int((probe_eta[j] + 3.)/0.01739); - double weight = eventweight/nueff[EtaInt]; - if(pass_trkiso_cut) - { - h_ErsatzGenMEt_pass->Fill(ErsatzGenMEt[j], weight); - h_ErsatzCaloMEt_pass->Fill(ErsatzCaloMEt[j], weight); - h_ErsatzTcMEt_pass->Fill(ErsatzTcMEt[j], weight); - h_ErsatzPfMEt_pass->Fill(ErsatzPfMEt[j], weight); - h_nMatched->Fill(nTagMatched, weight); - h_dpt_pf_gsf->Fill(dpt_pf_gsf[j], weight); - if(inBarrel) - { - aaa++; - h_ErsatzGenMEt_pass_EB->Fill(ErsatzGenMEt[j], weight); - h_ErsatzCaloMEt_pass_EB->Fill(ErsatzCaloMEt[j], weight); - h_ErsatzTcMEt_pass_EB->Fill(ErsatzTcMEt[j], weight); - h_ErsatzPfMEt_pass_EB->Fill(ErsatzPfMEt[j], weight); - h_nMatched_EB->Fill(nTagMatched, weight); - h_dpt_pf_gsf_EB->Fill(dpt_pf_gsf[j], weight); - } - if(inEndcap) - { - bbb++; - h_ErsatzGenMEt_pass_EE->Fill(ErsatzGenMEt[j], weight); - h_ErsatzCaloMEt_pass_EE->Fill(ErsatzCaloMEt[j], weight); - h_ErsatzTcMEt_pass_EE->Fill(ErsatzTcMEt[j], weight); - h_ErsatzPfMEt_pass_EE->Fill(ErsatzPfMEt[j], weight); - h_nMatched_EE->Fill(nTagMatched, weight); - h_dpt_pf_gsf_EE->Fill(dpt_pf_gsf[j], weight); - } - }else{ - h_ErsatzGenMEt_fail->Fill(ErsatzGenMEt[j], weight); - h_ErsatzCaloMEt_fail->Fill(ErsatzCaloMEt[j], weight); - h_ErsatzTcMEt_fail->Fill(ErsatzTcMEt[j], weight); - h_ErsatzPfMEt_fail->Fill(ErsatzPfMEt[j], weight); - if(inBarrel) - { - ccc++; - h_ErsatzGenMEt_fail_EB->Fill(ErsatzGenMEt[j], weight); - h_ErsatzCaloMEt_fail_EB->Fill(ErsatzCaloMEt[j], weight); - h_ErsatzTcMEt_fail_EB->Fill(ErsatzTcMEt[j], weight); - h_ErsatzPfMEt_fail_EB->Fill(ErsatzPfMEt[j], weight); - } - if(inEndcap) - { - ddd++; - h_ErsatzGenMEt_fail_EE->Fill(ErsatzGenMEt[j], weight); - h_ErsatzCaloMEt_fail_EE->Fill(ErsatzCaloMEt[j], weight); - h_ErsatzTcMEt_fail_EE->Fill(ErsatzTcMEt[j], weight); - h_ErsatzPfMEt_fail_EE->Fill(ErsatzPfMEt[j], weight); - } - } - } - } - //} - } - } - } - fileZ->Close(); - cout << "Closed Ersatz data file" << endl; - - cout << "Number of events passing selection cuts = " << aaa+bbb+ccc+ddd << endl; - cout << "Number Pass EB = " << aaa << endl; - cout << "Number Pass EE = " << bbb << endl; - cout << "Number Fail EB = " << ccc << endl; - cout << "Number Fail EE = " << ddd << endl; - - TCanvas* c_McBoson_m = new TCanvas("McBoson_m", "", 800, 600); - c_McBoson_m->cd(); - h_McZ_m->Scale(1./h_McZ_m->Integral()); - h_McZ_m->SetLineColor(2); - h_McZ_m->SetStats(kFALSE); - h_McZ_m->SetTitle(kFALSE); - h_McZ_m->GetYaxis()->SetTitleOffset(1.2); - h_McZ_m->Draw(); - h_McW_m->Scale(1./h_McW_m->Integral()); - h_McW_m->SetLineColor(4); - h_McW_m->Draw("same"); - - TLegend* legend_e = new TLegend(0.8, 0.7, 0.99, 0.99); - legend_e->AddEntry(h_McZ_m, "Z #rightarrow ee", "l"); - legend_e->AddEntry(h_McW_m, "W #rightarrow e#nu", "l"); - - legend_e->Draw(); - c_McBoson_m->SaveAs("McBoson_m.png"); - delete c_McBoson_m; - - TCanvas* c_McBoson_pt = new TCanvas("McBoson_pt", "", 800, 600); - c_McBoson_pt->cd(); - h_McZ_pt->Scale(1./h_McZ_pt->Integral()); - h_McZ_pt->SetLineColor(2); - h_McZ_pt->SetStats(kFALSE); - h_McZ_pt->SetTitle(kFALSE); - h_McZ_pt->GetYaxis()->SetTitleOffset(1.2); - h_McZ_pt->Draw(); - h_McW_pt->Scale(1./h_McW_pt->Integral()); - h_McW_pt->SetLineColor(4); - h_McW_pt->Draw("same"); - legend_e->Draw(); - c_McBoson_pt->SaveAs("McBoson_pt.png"); - delete c_McBoson_pt; - - TCanvas* c_McBoson_y = new TCanvas("McBoson_y", "", 800, 600); - c_McBoson_y->cd(); - h_McZ_y->Scale(1./h_McZ_y->Integral()); - h_McZ_y->SetLineColor(2); - h_McZ_y->SetStats(kFALSE); - h_McZ_y->SetTitle(kFALSE); - h_McZ_y->GetYaxis()->SetTitleOffset(1.2); - h_McZ_y->Draw(); - h_McW_y->Scale(1./h_McW_y->Integral()); - h_McW_y->SetLineColor(4); - h_McW_y->Draw("same"); - legend_e->Draw(); - c_McBoson_y->SaveAs("McBoson_y.png"); - delete c_McBoson_y; - - TCanvas* c_McBoson_rescM = new TCanvas("McBoson_rescM", "", 800, 600); - c_McBoson_rescM->cd(); - h_McZ_rescM->Scale(1./h_McZ_rescM->Integral()); - h_McZ_rescM->SetLineColor(2); - h_McZ_rescM->SetStats(kFALSE); - h_McZ_rescM->SetTitle(kFALSE); - h_McZ_rescM->GetYaxis()->SetTitleOffset(1.2); - h_McZ_rescM->Draw(); - h_McW_m->Scale(1./h_McW_m->Integral()); - h_McW_m->SetLineColor(4); - h_McW_m->Draw("same"); - legend_e->Draw(); - c_McBoson_rescM->SaveAs("McBoson_rescM.png"); - delete c_McBoson_rescM; - - TCanvas* c_McBoson_rescPt = new TCanvas("McBoson_rescPt", "", 800, 600); - c_McBoson_rescPt->cd(); - h_McZ_rescPt->Scale(1./h_McZ_rescPt->Integral()); - h_McZ_rescPt->SetLineColor(2); - h_McZ_rescPt->SetStats(kFALSE); - h_McZ_rescPt->SetTitle(kFALSE); - h_McZ_rescPt->GetYaxis()->SetTitleOffset(1.2); - h_McZ_rescPt->Draw(); - h_McW_pt->Scale(1./h_McW_pt->Integral()); - h_McW_pt->SetLineColor(4); - h_McW_pt->Draw("same"); - legend_e->Draw(); - c_McBoson_rescPt->SaveAs("McBoson_rescPt.png"); - delete c_McBoson_rescPt; - - TCanvas* c_McBoson_rescY = new TCanvas("McBoson_rescY", "", 800, 600); - c_McBoson_rescY->cd(); - h_McZ_rescY->Scale(1./h_McZ_rescY->Integral()); - h_McZ_rescY->SetLineColor(2); - h_McZ_rescY->SetStats(kFALSE); - h_McZ_rescY->SetTitle(kFALSE); - h_McZ_rescY->GetYaxis()->SetTitleOffset(1.2); - h_McZ_rescY->Draw(); - h_McW_y->Scale(1./h_McW_y->Integral()); - h_McW_y->SetLineColor(4); - h_McW_y->Draw("same"); - legend_e->Draw(); - c_McBoson_rescY->SaveAs("McBoson_rescY.png"); - delete c_McBoson_rescY; - - TCanvas* c_McElec_pt = new TCanvas("McElec_pt", "", 800, 600); - c_McElec_pt->cd(); - h_McTag_pt->Scale(1./h_McTag_pt->Integral()); - h_McTag_pt->SetLineColor(2); - h_McTag_pt->SetStats(kFALSE); - h_McTag_pt->SetTitle(kFALSE); - h_McTag_pt->GetYaxis()->SetTitleOffset(1.2); - h_McTag_pt->Draw(); - h_McElec_pt->Scale(1./h_McElec_pt->Integral()); - h_McElec_pt->SetLineColor(4); - h_McElec_pt->Draw("same"); - legend_e->Draw(); - c_McElec_pt->SaveAs("McElec_pt.png"); - delete c_McElec_pt; - - TCanvas* c_McElec_eta = new TCanvas("McElec_eta", "", 800, 600); - c_McElec_eta->cd(); - h_McTag_eta->Scale(1./h_McTag_eta->Integral()); - h_McTag_eta->SetLineColor(2); - h_McTag_eta->SetStats(kFALSE); - h_McTag_eta->SetTitle(kFALSE); - h_McTag_eta->GetYaxis()->SetTitleOffset(1.2); - h_McTag_eta->Draw(); - h_McElec_eta->Scale(1./h_McElec_eta->Integral()); - h_McElec_eta->SetLineColor(4); - h_McElec_eta->Draw("same"); - legend_e->Draw(); - c_McElec_eta->SaveAs("McElec_eta.png"); - delete c_McElec_eta; - - TCanvas* c_McElec_rescPt = new TCanvas("McElec_rescPt", "", 800, 600); - c_McElec_rescPt->cd(); - h_McTag_rescPt->Scale(1./h_McTag_rescPt->Integral()); - h_McTag_rescPt->SetLineColor(2); - h_McTag_rescPt->SetStats(kFALSE); - h_McTag_rescPt->SetTitle(kFALSE); - h_McTag_rescPt->GetYaxis()->SetTitleOffset(1.2); - h_McTag_rescPt->Draw(); - h_McElec_pt->Scale(1./h_McElec_pt->Integral()); - h_McElec_pt->SetLineColor(4); - h_McElec_pt->Draw("same"); - legend_e->Draw(); - c_McElec_rescPt->SaveAs("McElec_rescPt.png"); - delete c_McElec_rescPt; - - TCanvas* c_McElec_rescEta = new TCanvas("McElec_rescEta", "", 800, 600); - c_McElec_rescEta->cd(); - h_McTag_rescEta->Scale(1./h_McTag_rescEta->Integral()); - h_McTag_rescEta->SetLineColor(2); - h_McTag_rescEta->SetStats(kFALSE); - h_McTag_rescEta->SetTitle(kFALSE); - h_McTag_rescEta->GetYaxis()->SetTitleOffset(1.2); - h_McTag_rescEta->Draw(); - h_McElec_eta->Scale(1./h_McElec_eta->Integral()); - h_McElec_eta->SetLineColor(4); - h_McElec_eta->Draw("same"); - legend_e->Draw(); - c_McElec_rescEta->SaveAs("McElec_rescEta.png"); - delete c_McElec_rescEta; - - TCanvas* c_McNu_pt = new TCanvas("McNu_pt", "", 800, 600); - c_McNu_pt->cd(); - h_McProbe_pt->Scale(1./h_McProbe_pt->Integral()); - h_McProbe_pt->SetLineColor(2); - h_McProbe_pt->SetStats(kFALSE); - h_McProbe_pt->SetTitle(kFALSE); - h_McProbe_pt->GetYaxis()->SetTitleOffset(1.2); - h_McProbe_pt->Draw(); - h_McNu_pt->Scale(1./h_McNu_pt->Integral()); - h_McNu_pt->SetLineColor(4); - h_McNu_pt->Draw("same"); - legend_e->Draw(); - c_McNu_pt->SaveAs("McNu_pt.png"); - delete c_McNu_pt; - - TCanvas* c_McNu_eta = new TCanvas("McNu_eta", "", 800, 600); - c_McNu_eta->cd(); - h_McProbe_eta->Scale(1./h_McProbe_eta->Integral()); - h_McProbe_eta->SetLineColor(2); - h_McProbe_eta->SetStats(kFALSE); - h_McProbe_eta->SetTitle(kFALSE); - h_McProbe_eta->GetYaxis()->SetTitleOffset(1.2); - h_McProbe_eta->Draw(); - h_McNu_eta->Scale(1./h_McNu_eta->Integral()); - h_McNu_eta->SetLineColor(4); - h_McNu_eta->Draw("same"); - legend_e->Draw(); - c_McNu_eta->SaveAs("McNu_eta.png"); - delete c_McNu_eta; - - TCanvas* c_McNu_rescPt = new TCanvas("McNu_rescPt", "", 800, 600); - c_McNu_rescPt->cd(); - h_McProbe_rescPt->Scale(1./h_McProbe_rescPt->Integral()); - h_McProbe_rescPt->SetLineColor(2); - h_McProbe_rescPt->SetStats(kFALSE); - h_McProbe_rescPt->SetTitle(kFALSE); - h_McProbe_rescPt->GetYaxis()->SetTitleOffset(1.2); - h_McProbe_rescPt->Draw(); - h_McNu_pt->Scale(1./h_McNu_pt->Integral()); - h_McNu_pt->SetLineColor(4); - h_McNu_pt->Draw("same"); - legend_e->Draw(); - c_McNu_rescPt->SaveAs("McNu_rescPt.png"); - delete c_McNu_rescPt; - - TCanvas* c_McNu_rescEta = new TCanvas("McNu_rescEta", "", 800, 600); - c_McNu_rescEta->cd(); - h_McProbe_rescEta->Scale(1./h_McProbe_rescEta->Integral()); - h_McProbe_rescEta->SetLineColor(2); - h_McProbe_rescEta->SetStats(kFALSE); - h_McProbe_rescEta->SetTitle(kFALSE); - h_McProbe_rescEta->GetYaxis()->SetTitleOffset(1.2); - h_McProbe_rescEta->Draw(); - h_McNu_eta->Scale(1./h_McNu_eta->Integral()); - h_McNu_eta->SetLineColor(4); - h_McNu_eta->Draw("same"); - legend_e->Draw(); - c_McNu_rescEta->SaveAs("McNu_rescEta.png"); - delete c_McNu_rescEta; - - TCanvas* c_McLeptons_dPhi = new TCanvas("McLeptons_dPhi", "", 800, 600); - c_McLeptons_dPhi->cd(); - h_McTagProbe_dPhi->Scale(1./h_McTagProbe_dPhi->Integral()); - h_McTagProbe_dPhi->SetLineColor(2); - h_McTagProbe_dPhi->SetStats(kFALSE); - h_McTagProbe_dPhi->SetTitle(kFALSE); - h_McTagProbe_dPhi->GetYaxis()->SetTitleOffset(1.2); - h_McTagProbe_dPhi->Draw(); - h_McElecNu_dPhi->Scale(1./h_McElecNu_dPhi->Integral()); - h_McElecNu_dPhi->SetLineColor(4); - h_McElecNu_dPhi->Draw("same"); - legend_e->Draw(); - c_McLeptons_dPhi->SaveAs("McLeptons_dPhi.png"); - delete c_McLeptons_dPhi; - - TCanvas* c_McLeptons_dEta = new TCanvas("McLeptons_dEta", "", 800, 600); - c_McLeptons_dEta->cd(); - h_McTagProbe_dEta->Scale(1./h_McTagProbe_dEta->Integral()); - h_McTagProbe_dEta->SetLineColor(2); - h_McTagProbe_dEta->SetStats(kFALSE); - h_McTagProbe_dEta->SetTitle(kFALSE); - h_McTagProbe_dEta->GetYaxis()->SetTitleOffset(1.2); - h_McTagProbe_dEta->Draw(); - h_McElecNu_dEta->Scale(1./h_McElecNu_dEta->Integral()); - h_McElecNu_dEta->SetLineColor(4); - h_McElecNu_dEta->Draw("same"); - legend_e->Draw(); - c_McLeptons_dEta->SaveAs("McLeptons_dEta.png"); - delete c_McLeptons_dEta; - - TCanvas* c_McLeptons_dR = new TCanvas("McLeptons_dR", "", 800, 600); - c_McLeptons_dR->cd(); - h_McTagProbe_dR->Scale(1./h_McTagProbe_dR->Integral()); - h_McTagProbe_dR->SetLineColor(2); - h_McTagProbe_dR->SetStats(kFALSE); - h_McTagProbe_dR->SetTitle(kFALSE); - h_McTagProbe_dR->GetYaxis()->SetTitleOffset(1.2); - h_McTagProbe_dR->Draw(); - h_McElecNu_dR->Scale(1./h_McElecNu_dR->Integral()); - h_McElecNu_dR->SetLineColor(4); - h_McElecNu_dR->Draw("same"); - legend_e->Draw(); - c_McLeptons_dR->SaveAs("McLeptons_dR.png"); - delete c_McLeptons_dR; - -/* - TCanvas* c_elec_q = new TCanvas("elec_q", "", 800, 600); - c_elec_q->cd(); - h_tag_q->Scale(1./h_tag_q->Integral()); - h_tag_q->SetLineColor(2); - h_tag_q->SetStats(kFALSE); - h_tag_q->SetTitle(kFALSE); - h_tag_q->GetYaxis()->SetTitleOffset(1.2); - h_tag_q->Draw(); - h_elec_q->Scale(1./h_elec_q->Integral()); - h_elec_q->SetLineColor(4); - h_elec_q->Draw("same"); - - TLegend* legend_e = new TLegend(0.8, 0.7, 0.99, 0.99); - legend_e->AddEntry(h_tag_q, "Z -> ee", "l"); - legend_e->AddEntry(h_elec_q, "W -> e#nu", "l"); - - legend_e->Draw(); - c_elec_q->SaveAs("elec_q.png"); - delete c_elec_q; -*/ - TCanvas* c_elec_pt = new TCanvas("elec_pt", "", 800, 600); - c_elec_pt->cd(); - h_tag_pt->Scale(1./h_tag_pt->Integral()); - h_tag_pt->SetLineColor(2); - h_tag_pt->SetStats(kFALSE); - h_tag_pt->SetTitle(kFALSE); - h_tag_pt->GetYaxis()->SetTitleOffset(1.2); - h_tag_pt->Draw(); - h_elec_pt->Scale(1./h_elec_pt->Integral()); - h_elec_pt->SetLineColor(4); - h_elec_pt->Draw("same"); - legend_e->Draw(); - c_elec_pt->SaveAs("elec_pt.png"); - delete c_elec_pt; - - TCanvas* c_elec_eta = new TCanvas("elec_eta", "", 800, 600); - c_elec_eta->cd(); - h_tag_eta->Scale(1./h_tag_eta->Integral()); - h_tag_eta->SetLineColor(2); - h_tag_eta->SetStats(kFALSE); - h_tag_eta->SetTitle(kFALSE); - h_tag_eta->GetYaxis()->SetTitleOffset(1.2); - h_tag_eta->Draw(); - h_elec_eta->Scale(1./h_elec_eta->Integral()); - h_elec_eta->SetLineColor(4); - h_elec_eta->Draw("same"); - legend_e->Draw(); - c_elec_eta->SaveAs("elec_eta.png"); - delete c_elec_eta; - - TCanvas* c_elec_rescPt = new TCanvas("elec_rescPt", "", 800, 600); - c_elec_rescPt->cd(); - h_tag_rescPt->Scale(1./h_tag_rescPt->Integral()); - h_tag_rescPt->SetLineColor(2); - h_tag_rescPt->SetStats(kFALSE); - h_tag_rescPt->SetTitle(kFALSE); - h_tag_rescPt->GetYaxis()->SetTitleOffset(1.2); - h_tag_rescPt->Draw(); - h_elec_pt->Scale(1./h_elec_pt->Integral()); - h_elec_pt->SetLineColor(4); - h_elec_pt->Draw("same"); - legend_e->Draw(); - c_elec_rescPt->SaveAs("elec_rescPt.png"); - delete c_elec_rescPt; - - TCanvas* c_elec_rescEta = new TCanvas("elec_rescEta", "", 800, 600); - c_elec_rescEta->cd(); - h_tag_rescEta->Scale(1./h_tag_rescEta->Integral()); - h_tag_rescEta->SetLineColor(2); - h_tag_rescEta->SetStats(kFALSE); - h_tag_rescEta->SetTitle(kFALSE); - h_tag_rescEta->GetYaxis()->SetTitleOffset(1.2); - h_tag_rescEta->Draw(); - h_elec_eta->Scale(1./h_elec_eta->Integral()); - h_elec_eta->SetLineColor(4); - h_elec_eta->Draw("same"); - legend_e->Draw(); - c_elec_rescEta->SaveAs("elec_rescEta.png"); - delete c_elec_rescEta; - - TCanvas* c_elec_ecaliso = new TCanvas("elec_ecaliso", "", 800, 600); - c_elec_ecaliso->cd(); - h_tag_ecaliso->Scale(1./h_tag_ecaliso->Integral()); - h_tag_ecaliso->SetLineColor(2); - h_tag_ecaliso->SetStats(kFALSE); - h_tag_ecaliso->SetTitle(kFALSE); - h_tag_ecaliso->GetYaxis()->SetTitleOffset(1.2); - h_tag_ecaliso->Draw(); - h_elec_ecaliso->Scale(1./h_elec_ecaliso->Integral()); - h_elec_ecaliso->SetLineColor(4); - h_elec_ecaliso->Draw("same"); - legend_e->Draw(); - c_elec_ecaliso->SaveAs("elec_ecaliso.png"); - delete c_elec_ecaliso; - - TCanvas* c_elec_hcaliso = new TCanvas("elec_hcaliso", "", 800, 600); - c_elec_hcaliso->cd(); - h_tag_hcaliso->Scale(1./h_tag_hcaliso->Integral()); - h_tag_hcaliso->SetLineColor(2); - h_tag_hcaliso->SetStats(kFALSE); - h_tag_hcaliso->SetTitle(kFALSE); - h_tag_hcaliso->GetYaxis()->SetTitleOffset(1.2); - h_tag_hcaliso->Draw(); - h_elec_hcaliso->Scale(1./h_elec_hcaliso->Integral()); - h_elec_hcaliso->SetLineColor(4); - h_elec_hcaliso->Draw("same"); - legend_e->Draw(); - c_elec_hcaliso->SaveAs("elec_hcaliso.png"); - delete c_elec_hcaliso; - - TCanvas* c_elec_trackiso = new TCanvas("elec_trackiso", "", 800, 600); - c_elec_trackiso->cd(); - h_tag_trackiso->Scale(1./h_tag_trackiso->Integral()); - h_tag_trackiso->SetLineColor(2); - h_tag_trackiso->SetStats(kFALSE); - h_tag_trackiso->SetTitle(kFALSE); - h_tag_trackiso->GetYaxis()->SetTitleOffset(1.2); - h_tag_trackiso->Draw(); - h_elec_trackiso->Scale(1./h_elec_trackiso->Integral()); - h_elec_trackiso->SetLineColor(4); - h_elec_trackiso->Draw("same"); - legend_e->Draw(); - c_elec_trackiso->SaveAs("elec_trackiso.png"); - delete c_elec_trackiso; - - TCanvas* c_elec_dEtaIn = new TCanvas("elec_dEtaIn", "", 800, 600); - c_elec_dEtaIn->cd(); - h_tag_dEta->Scale(1./h_tag_dEta->Integral()); - h_tag_dEta->SetLineColor(2); - h_tag_dEta->SetStats(kFALSE); - h_tag_dEta->SetTitle(kFALSE); - h_tag_dEta->GetYaxis()->SetTitleOffset(1.2); - h_tag_dEta->Draw(); - h_elec_dEta->Scale(1./h_elec_dEta->Integral()); - h_elec_dEta->SetLineColor(4); - h_elec_dEta->Draw("same"); - legend_e->Draw(); - c_elec_dEtaIn->SaveAs("elec_dEtaIn.png"); - delete c_elec_dEtaIn; - - TCanvas* c_elec_dPhiIn = new TCanvas("elec_dPhiIn", "", 800, 600); - c_elec_dPhiIn->cd(); - h_tag_dPhi->Scale(1./h_tag_dPhi->Integral()); - h_tag_dPhi->SetLineColor(2); - h_tag_dPhi->SetStats(kFALSE); - h_tag_dPhi->SetTitle(kFALSE); - h_tag_dPhi->GetYaxis()->SetTitleOffset(1.2); - h_tag_dPhi->Draw(); - h_elec_dPhi->Scale(1./h_elec_dPhi->Integral()); - h_elec_dPhi->SetLineColor(4); - h_elec_dPhi->Draw("same"); - legend_e->Draw(); - c_elec_dPhiIn->SaveAs("elec_dPhiIn.png"); - delete c_elec_dPhiIn; - - TCanvas* c_elec_sIhIh = new TCanvas("elec_sIhIh", "", 800, 600); - c_elec_sIhIh->cd(); - h_tag_sIhIh->Scale(1./h_tag_sIhIh->Integral()); - h_tag_sIhIh->SetLineColor(2); - h_tag_sIhIh->SetStats(kFALSE); - h_tag_sIhIh->SetTitle(kFALSE); - h_tag_sIhIh->GetYaxis()->SetTitleOffset(1.2); - h_tag_sIhIh->Draw(); - h_elec_sIhIh->Scale(1./h_elec_sIhIh->Integral()); - h_elec_sIhIh->SetLineColor(4); - h_elec_sIhIh->Draw("same"); - legend_e->Draw(); - c_elec_sIhIh->SaveAs("elec_sIhIh.png"); - delete c_elec_sIhIh; - - TCanvas* c_nMatched = new TCanvas("nMatched", "", 800, 600); - c_nMatched->cd(); - h_nMatched->Draw(); - c_nMatched->SaveAs("nMatched.png"); - delete c_nMatched; - - TCanvas* c_nMatched_EB = new TCanvas("nMatched_EB", "", 800, 600); - c_nMatched_EB->cd(); - h_nMatched_EB->Draw(); - c_nMatched_EB->SaveAs("nMatched_EB.png"); - delete c_nMatched_EB; - - TCanvas* c_nMatched_EE = new TCanvas("nMatched_EE", "", 800, 600); - c_nMatched_EE->cd(); - h_nMatched_EE->Draw(); - c_nMatched_EE->SaveAs("nMatched_EE.png"); - delete c_nMatched_EE; - - TCanvas* c_dpt_pf_gsf = new TCanvas("dpt_pf_gsf", "", 800, 600); - c_dpt_pf_gsf->cd(); - h_dpt_pf_gsf->Draw(); - c_dpt_pf_gsf->SaveAs("dpt_pf_gsf.png"); - delete c_dpt_pf_gsf; - - TCanvas* c_dpt_pf_gsf_EB = new TCanvas("dpt_pf_gsf_EB", "", 800, 600); - c_dpt_pf_gsf_EB->cd(); - h_dpt_pf_gsf_EB->Draw(); - c_dpt_pf_gsf_EB->SaveAs("dpt_pf_gsf_EB.png"); - delete c_dpt_pf_gsf_EB; - - TCanvas* c_dpt_pf_gsf_EE = new TCanvas("dpt_pf_gsf_EE", "", 800, 600); - c_dpt_pf_gsf_EE->cd(); - h_dpt_pf_gsf_EE->Draw(); - c_dpt_pf_gsf_EE->SaveAs("dpt_pf_gsf_EE.png"); - delete c_dpt_pf_gsf_EE; - - cout << "Apply acceptance correction ..." << endl; - - for (int i=1; i<101; i++) - { - if(h_mcWCaloMEtin_pass_EB->GetBinContent(i) != 0.) - { - h_acceptance_correction_caloMEt_pass_EB->SetBinContent(i, 1. + h_mcWCaloMEtout_pass_EB->GetBinContent(i)/h_mcWCaloMEtin_pass_EB->GetBinContent(i)); - }else{ - h_acceptance_correction_caloMEt_pass_EB->SetBinContent(i, 1.); - } - if(h_mcWCaloMEtin_pass_EE->GetBinContent(i) != 0.) - { - h_acceptance_correction_caloMEt_pass_EE->SetBinContent(i, 1. + h_mcWCaloMEtout_pass_EE->GetBinContent(i)/h_mcWCaloMEtin_pass_EE->GetBinContent(i)); - }else{ - h_acceptance_correction_caloMEt_pass_EE->SetBinContent(i, 1.); - } - if(h_mcWCaloMEtin_fail_EB->GetBinContent(i) != 0.) - { - h_acceptance_correction_caloMEt_fail_EB->SetBinContent(i, 1. + h_mcWCaloMEtout_fail_EB->GetBinContent(i)/h_mcWCaloMEtin_fail_EB->GetBinContent(i)); - }else{ - h_acceptance_correction_caloMEt_fail_EB->SetBinContent(i, 1.); - } - if(h_mcWCaloMEtin_fail_EE->GetBinContent(i) != 0.) - { - h_acceptance_correction_caloMEt_fail_EE->SetBinContent(i, 1. + h_mcWCaloMEtout_fail_EE->GetBinContent(i)/h_mcWCaloMEtin_fail_EE->GetBinContent(i)); - }else{ - h_acceptance_correction_caloMEt_fail_EE->SetBinContent(i, 1.); - } - - if(h_mcWTcMEtin_pass_EB->GetBinContent(i) != 0.) - { - h_acceptance_correction_tcMEt_pass_EB->SetBinContent(i, 1. + h_mcWTcMEtout_pass_EB->GetBinContent(i)/h_mcWTcMEtin_pass_EB->GetBinContent(i)); - }else{ - h_acceptance_correction_tcMEt_pass_EB->SetBinContent(i, 1.); - } - if(h_mcWTcMEtin_pass_EE->GetBinContent(i) != 0.) - { - h_acceptance_correction_tcMEt_pass_EE->SetBinContent(i, 1. + h_mcWTcMEtout_pass_EE->GetBinContent(i)/h_mcWTcMEtin_pass_EE->GetBinContent(i)); - }else{ - h_acceptance_correction_tcMEt_pass_EE->SetBinContent(i, 1.); - } - if(h_mcWTcMEtin_fail_EB->GetBinContent(i) != 0.) - { - h_acceptance_correction_tcMEt_fail_EB->SetBinContent(i, 1. + h_mcWTcMEtout_fail_EB->GetBinContent(i)/h_mcWTcMEtin_fail_EB->GetBinContent(i)); - }else{ - h_acceptance_correction_tcMEt_fail_EB->SetBinContent(i, 1.); - } - if(h_mcWTcMEtin_fail_EE->GetBinContent(i) != 0.) - { - h_acceptance_correction_tcMEt_fail_EE->SetBinContent(i, 1. + h_mcWTcMEtout_fail_EE->GetBinContent(i)/h_mcWTcMEtin_fail_EE->GetBinContent(i)); - }else{ - h_acceptance_correction_tcMEt_fail_EE->SetBinContent(i, 1.); - } - - if(h_mcWGenMEtin_pass_EB->GetBinContent(i) != 0.) - { - h_acceptance_correction_genMEt_pass_EB->SetBinContent(i, 1. + h_mcWGenMEtout_pass_EB->GetBinContent(i)/h_mcWGenMEtin_pass_EB->GetBinContent(i)); - }else{ - h_acceptance_correction_genMEt_pass_EB->SetBinContent(i, 1.); - } - if(h_mcWGenMEtin_pass_EE->GetBinContent(i) != 0.) - { - h_acceptance_correction_genMEt_pass_EE->SetBinContent(i, 1. + h_mcWGenMEtout_pass_EE->GetBinContent(i)/h_mcWGenMEtin_pass_EE->GetBinContent(i)); - }else{ - h_acceptance_correction_genMEt_pass_EE->SetBinContent(i, 1.); - } - if(h_mcWGenMEtin_fail_EB->GetBinContent(i) != 0.) - { - h_acceptance_correction_genMEt_fail_EB->SetBinContent(i, 1. + h_mcWGenMEtout_fail_EB->GetBinContent(i)/h_mcWGenMEtin_fail_EB->GetBinContent(i)); - }else{ - h_acceptance_correction_genMEt_fail_EB->SetBinContent(i, 1.); - } - if(h_mcWGenMEtin_fail_EE->GetBinContent(i) != 0.) - { - h_acceptance_correction_genMEt_fail_EE->SetBinContent(i, 1. + h_mcWGenMEtout_fail_EE->GetBinContent(i)/h_mcWGenMEtin_fail_EE->GetBinContent(i)); - }else{ - h_acceptance_correction_genMEt_fail_EE->SetBinContent(i, 1.); - } - - if(h_mcWPfMEtin_pass_EB->GetBinContent(i) != 0.) - { - h_acceptance_correction_pfMEt_pass_EB->SetBinContent(i, 1. + h_mcWPfMEtout_pass_EB->GetBinContent(i)/h_mcWPfMEtin_pass_EB->GetBinContent(i)); - }else{ - h_acceptance_correction_pfMEt_pass_EB->SetBinContent(i, 1.); - } - if(h_mcWPfMEtin_pass_EE->GetBinContent(i) != 0.) - { - h_acceptance_correction_pfMEt_pass_EE->SetBinContent(i, 1. + h_mcWPfMEtout_pass_EE->GetBinContent(i)/h_mcWPfMEtin_pass_EE->GetBinContent(i)); - }else{ - h_acceptance_correction_pfMEt_pass_EE->SetBinContent(i, 1.); - } - if(h_mcWPfMEtin_fail_EB->GetBinContent(i) != 0.) - { - h_acceptance_correction_pfMEt_fail_EB->SetBinContent(i, 1. + h_mcWPfMEtout_fail_EB->GetBinContent(i)/h_mcWPfMEtin_fail_EB->GetBinContent(i)); - }else{ - h_acceptance_correction_pfMEt_fail_EB->SetBinContent(i, 1.); - } - if(h_mcWPfMEtin_fail_EE->GetBinContent(i) != 0.) - { - h_acceptance_correction_pfMEt_fail_EE->SetBinContent(i, 1. + h_mcWPfMEtout_fail_EE->GetBinContent(i)/h_mcWPfMEtin_fail_EE->GetBinContent(i)); - }else{ - h_acceptance_correction_pfMEt_fail_EE->SetBinContent(i, 1.); - } - - } - - h_ErsatzGenMEt_pass_EB->Multiply(h_ErsatzGenMEt_pass_EB, h_acceptance_correction_genMEt_pass_EB); - h_ErsatzCaloMEt_pass_EB->Multiply(h_ErsatzCaloMEt_pass_EB, h_acceptance_correction_caloMEt_pass_EB); - h_ErsatzTcMEt_pass_EB->Multiply(h_ErsatzTcMEt_pass_EB, h_acceptance_correction_tcMEt_pass_EB); - h_ErsatzPfMEt_pass_EB->Multiply(h_ErsatzPfMEt_pass_EB, h_acceptance_correction_pfMEt_pass_EB); - - h_ErsatzGenMEt_pass_EE->Multiply(h_ErsatzGenMEt_pass_EE, h_acceptance_correction_genMEt_pass_EE); - h_ErsatzCaloMEt_pass_EE->Multiply(h_ErsatzCaloMEt_pass_EE, h_acceptance_correction_caloMEt_pass_EE); - h_ErsatzTcMEt_pass_EE->Multiply(h_ErsatzTcMEt_pass_EE, h_acceptance_correction_tcMEt_pass_EE); - h_ErsatzPfMEt_pass_EE->Multiply(h_ErsatzPfMEt_pass_EE, h_acceptance_correction_pfMEt_pass_EE); - - h_ErsatzGenMEt_fail_EB->Multiply(h_ErsatzGenMEt_fail_EB, h_acceptance_correction_genMEt_fail_EB); - h_ErsatzCaloMEt_fail_EB->Multiply(h_ErsatzCaloMEt_fail_EB, h_acceptance_correction_caloMEt_fail_EB); - h_ErsatzTcMEt_fail_EB->Multiply(h_ErsatzTcMEt_fail_EB, h_acceptance_correction_tcMEt_fail_EB); - h_ErsatzPfMEt_fail_EB->Multiply(h_ErsatzPfMEt_fail_EB, h_acceptance_correction_pfMEt_fail_EB); - - h_ErsatzGenMEt_fail_EE->Multiply(h_ErsatzGenMEt_fail_EE, h_acceptance_correction_genMEt_fail_EE); - h_ErsatzCaloMEt_fail_EE->Multiply(h_ErsatzCaloMEt_fail_EE, h_acceptance_correction_caloMEt_fail_EE); - h_ErsatzTcMEt_fail_EE->Multiply(h_ErsatzTcMEt_fail_EE, h_acceptance_correction_tcMEt_fail_EE); - h_ErsatzPfMEt_fail_EE->Multiply(h_ErsatzPfMEt_fail_EE, h_acceptance_correction_pfMEt_fail_EE); - - h_ErsatzGenMEt_pass->Add(h_ErsatzGenMEt_pass_EB, h_ErsatzGenMEt_pass_EE); - h_ErsatzCaloMEt_pass->Add(h_ErsatzCaloMEt_pass_EB, h_ErsatzCaloMEt_pass_EE); - h_ErsatzTcMEt_pass->Add(h_ErsatzTcMEt_pass_EB, h_ErsatzTcMEt_pass_EE); - h_ErsatzPfMEt_pass->Add(h_ErsatzPfMEt_pass_EB, h_ErsatzPfMEt_pass_EE); - - h_ErsatzGenMEt_fail->Add(h_ErsatzGenMEt_fail_EB, h_ErsatzGenMEt_fail_EE); - h_ErsatzCaloMEt_fail->Add(h_ErsatzCaloMEt_fail_EB, h_ErsatzCaloMEt_fail_EE); - h_ErsatzTcMEt_fail->Add(h_ErsatzTcMEt_fail_EB, h_ErsatzTcMEt_fail_EE); - h_ErsatzPfMEt_fail->Add(h_ErsatzPfMEt_fail_EB, h_ErsatzPfMEt_fail_EE); - - //Fill Ersatz MET histogram with the type of MET you want - for(int i=1; i<101; i++) - { - h_ErsatzMEt_pass_EB->SetBinContent(i, h_ErsatzCaloMEt_pass_EB->GetBinContent(i)); - h_ErsatzMEt_pass_EE->SetBinContent(i, h_ErsatzCaloMEt_pass_EE->GetBinContent(i)); - h_ErsatzMEt_fail_EB->SetBinContent(i, h_ErsatzCaloMEt_fail_EB->GetBinContent(i)); - h_ErsatzMEt_fail_EE->SetBinContent(i, h_ErsatzCaloMEt_fail_EE->GetBinContent(i)); - h_ErsatzMEt_pass->SetBinContent(i, h_ErsatzCaloMEt_pass->GetBinContent(i)); - h_ErsatzMEt_fail->SetBinContent(i, h_ErsatzCaloMEt_fail->GetBinContent(i)); - } - - TCanvas* c_ErsatzCaloMEt_corr_pass_EB = new TCanvas("ErsatzCaloMEt_corr_pass_EB", "", 800, 600); - c_ErsatzCaloMEt_corr_pass_EB->cd(); - //h_ErsatzCaloMEt_pass_EB->Scale(1./h_ErsatzCaloMEt_pass_EB->Integral()); - h_ErsatzCaloMEt_pass_EB->SetLineColor(2); - h_ErsatzCaloMEt_pass_EB->SetStats(kFALSE); - h_ErsatzCaloMEt_pass_EB->SetTitle(kFALSE); - h_ErsatzCaloMEt_pass_EB->GetYaxis()->SetTitleOffset(1.2); - h_ErsatzCaloMEt_pass_EB->Draw(); - h_WCaloMEt_pass_EB->Scale(h_ErsatzCaloMEt_pass_EB->Integral()/h_WCaloMEt_pass_EB->Integral()); - h_WCaloMEt_pass_EB->SetLineColor(4); - h_WCaloMEt_pass_EB->Draw("same"); - - TLegend* legend = new TLegend(0.8, 0.7, 0.99, 0.99); - legend->AddEntry(h_ErsatzCaloMEt_pass_EB, "Ersatz MET", "l"); - legend->AddEntry(h_WCaloMEt_pass_EB, "W MET", "l"); - - legend->Draw(); - c_ErsatzCaloMEt_corr_pass_EB->SaveAs("ErsatzCaloMEt_corr_pass_EB.png"); - delete c_ErsatzCaloMEt_corr_pass_EB; - - TCanvas* c_ErsatzCaloMEt_corr_pass_EE = new TCanvas("ErsatzCaloMEt_corr_pass_EE", "", 800, 600); - c_ErsatzCaloMEt_corr_pass_EE->cd(); - //h_ErsatzCaloMEt_pass_EE->Scale(1./h_ErsatzCaloMEt_pass_EE->Integral()); - h_ErsatzCaloMEt_pass_EE->SetLineColor(2); - h_ErsatzCaloMEt_pass_EE->SetStats(kFALSE); - h_ErsatzCaloMEt_pass_EE->SetTitle(kFALSE); - h_ErsatzCaloMEt_pass_EE->GetYaxis()->SetTitleOffset(1.2); - h_ErsatzCaloMEt_pass_EE->Draw(); - h_WCaloMEt_pass_EE->Scale(h_ErsatzCaloMEt_pass_EE->Integral()/h_WCaloMEt_pass_EE->Integral()); - h_WCaloMEt_pass_EE->SetLineColor(4); - h_WCaloMEt_pass_EE->Draw("same"); - legend->Draw(); - c_ErsatzCaloMEt_corr_pass_EE->SaveAs("ErsatzCaloMEt_corr_pass_EE.png"); - delete c_ErsatzCaloMEt_corr_pass_EE; - - TCanvas* c_ErsatzCaloMEt_corr_pass = new TCanvas("ErsatzCaloMEt_corr_pass", "", 800, 600); - c_ErsatzCaloMEt_corr_pass->cd(); - //h_ErsatzCaloMEt_pass->Scale(1./h_ErsatzCaloMEt_pass->Integral()); - h_ErsatzCaloMEt_pass->SetLineColor(2); - h_ErsatzCaloMEt_pass->SetStats(kFALSE); - h_ErsatzCaloMEt_pass->SetTitle(kFALSE); - h_ErsatzCaloMEt_pass->GetYaxis()->SetTitleOffset(1.2); - h_ErsatzCaloMEt_pass->Draw(); - h_WCaloMEt_pass->Scale(h_ErsatzCaloMEt_pass->Integral()/h_WCaloMEt_pass->Integral()); - h_WCaloMEt_pass->SetLineColor(4); - h_WCaloMEt_pass->Draw("same"); - legend->Draw(); - c_ErsatzCaloMEt_corr_pass->SaveAs("ErsatzCaloMEt_corr_pass.png"); - delete c_ErsatzCaloMEt_corr_pass; - - TCanvas* c_ErsatzTcMEt_corr_pass_EB = new TCanvas("ErsatzTcMEt_corr_pass_EB", "", 800, 600); - c_ErsatzTcMEt_corr_pass_EB->cd(); - //h_ErsatzTcMEt_pass_EB->Scale(1./h_ErsatzTcMEt_pass_EB->Integral()); - h_ErsatzTcMEt_pass_EB->SetLineColor(2); - h_ErsatzTcMEt_pass_EB->SetStats(kFALSE); - h_ErsatzTcMEt_pass_EB->SetTitle(kFALSE); - h_ErsatzTcMEt_pass_EB->GetYaxis()->SetTitleOffset(1.2); - h_ErsatzTcMEt_pass_EB->Draw(); - h_WTcMEt_pass_EB->Scale(h_ErsatzTcMEt_pass_EB->Integral()/h_WTcMEt_pass_EB->Integral()); - h_WTcMEt_pass_EB->SetLineColor(4); - h_WTcMEt_pass_EB->Draw("same"); - legend->Draw(); - c_ErsatzTcMEt_corr_pass_EB->SaveAs("ErsatzTcMEt_corr_pass_EB.png"); - delete c_ErsatzTcMEt_corr_pass_EB; - - TCanvas* c_ErsatzTcMEt_corr_pass_EE = new TCanvas("ErsatzTcMEt_corr_pass_EE", "", 800, 600); - c_ErsatzTcMEt_corr_pass_EE->cd(); - //h_ErsatzTcMEt_pass_EE->Scale(1./h_ErsatzTcMEt_pass_EE->Integral()); - h_ErsatzTcMEt_pass_EE->SetLineColor(2); - h_ErsatzTcMEt_pass_EE->SetStats(kFALSE); - h_ErsatzTcMEt_pass_EE->SetTitle(kFALSE); - h_ErsatzTcMEt_pass_EE->GetYaxis()->SetTitleOffset(1.2); - h_ErsatzTcMEt_pass_EE->Draw(); - h_WTcMEt_pass_EE->Scale(h_ErsatzTcMEt_pass_EE->Integral()/h_WTcMEt_pass_EE->Integral()); - h_WTcMEt_pass_EE->SetLineColor(4); - h_WTcMEt_pass_EE->Draw("same"); - legend->Draw(); - c_ErsatzTcMEt_corr_pass_EE->SaveAs("ErsatzTcMEt_corr_pass_EE.png"); - delete c_ErsatzTcMEt_corr_pass_EE; - - TCanvas* c_ErsatzTcMEt_corr_pass = new TCanvas("ErsatzTcMEt_corr_pass", "", 800, 600); - c_ErsatzTcMEt_corr_pass->cd(); - //h_ErsatzTcMEt_pass->Scale(1./h_ErsatzTcMEt_pass->Integral()); - h_ErsatzTcMEt_pass->SetLineColor(2); - h_ErsatzTcMEt_pass->SetStats(kFALSE); - h_ErsatzTcMEt_pass->SetTitle(kFALSE); - h_ErsatzTcMEt_pass->GetYaxis()->SetTitleOffset(1.2); - h_ErsatzTcMEt_pass->Draw(); - h_WTcMEt_pass->Scale(h_ErsatzTcMEt_pass->Integral()/h_WTcMEt_pass->Integral()); - h_WTcMEt_pass->SetLineColor(4); - h_WTcMEt_pass->Draw("same"); - legend->Draw(); - c_ErsatzTcMEt_corr_pass->SaveAs("ErsatzTcMEt_corr_pass.png"); - delete c_ErsatzTcMEt_corr_pass; - - TCanvas* c_ErsatzGenMEt_corr_pass_EB = new TCanvas("ErsatzGenMEt_corr_pass_EB", "", 800, 600); - c_ErsatzGenMEt_corr_pass_EB->cd(); - //h_ErsatzGenMEt_pass_EB->Scale(1./h_ErsatzGenMEt_pass_EB->Integral()); - h_ErsatzGenMEt_pass_EB->SetLineColor(2); - h_ErsatzGenMEt_pass_EB->SetStats(kFALSE); - h_ErsatzGenMEt_pass_EB->SetTitle(kFALSE); - h_ErsatzGenMEt_pass_EB->GetYaxis()->SetTitleOffset(1.2); - h_ErsatzGenMEt_pass_EB->Draw(); - h_WGenMEt_pass_EB->Scale(h_ErsatzGenMEt_pass_EB->Integral()/h_WGenMEt_pass_EB->Integral()); - h_WGenMEt_pass_EB->SetLineColor(4); - h_WGenMEt_pass_EB->Draw("same"); - legend->Draw(); - c_ErsatzGenMEt_corr_pass_EB->SaveAs("ErsatzGenMEt_corr_pass_EB.png"); - delete c_ErsatzGenMEt_corr_pass_EB; - - TCanvas* c_ErsatzGenMEt_corr_pass_EE = new TCanvas("ErsatzGenMEt_corr_pass_EE", "", 800, 600); - c_ErsatzGenMEt_corr_pass_EE->cd(); - //h_ErsatzGenMEt_pass_EE->Scale(1./h_ErsatzGenMEt_pass_EE->Integral()); - h_ErsatzGenMEt_pass_EE->SetLineColor(2); - h_ErsatzGenMEt_pass_EE->SetStats(kFALSE); - h_ErsatzGenMEt_pass_EE->SetTitle(kFALSE); - h_ErsatzGenMEt_pass_EE->GetYaxis()->SetTitleOffset(1.2); - h_ErsatzGenMEt_pass_EE->Draw(); - h_WGenMEt_pass_EE->Scale(h_ErsatzGenMEt_pass_EE->Integral()/h_WGenMEt_pass_EE->Integral()); - h_WGenMEt_pass_EE->SetLineColor(4); - h_WGenMEt_pass_EE->Draw("same"); - legend->Draw(); - c_ErsatzGenMEt_corr_pass_EE->SaveAs("ErsatzGenMEt_corr_pass_EE.png"); - delete c_ErsatzGenMEt_corr_pass_EE; - - TCanvas* c_ErsatzGenMEt_corr_pass = new TCanvas("ErsatzGenMEt_corr_pass", "", 800, 600); - c_ErsatzGenMEt_corr_pass->cd(); - //h_ErsatzGenMEt_pass->Scale(1./h_ErsatzGenMEt_pass->Integral()); - h_ErsatzGenMEt_pass->SetLineColor(2); - h_ErsatzGenMEt_pass->SetStats(kFALSE); - h_ErsatzGenMEt_pass->SetTitle(kFALSE); - h_ErsatzGenMEt_pass->GetYaxis()->SetTitleOffset(1.2); - h_ErsatzGenMEt_pass->Draw(); - h_WGenMEt_pass->Scale(h_ErsatzGenMEt_pass->Integral()/h_WGenMEt_pass->Integral()); - h_WGenMEt_pass->SetLineColor(4); - h_WGenMEt_pass->Draw("same"); - legend->Draw(); - c_ErsatzGenMEt_corr_pass->SaveAs("ErsatzGenMEt_corr_pass.png"); - delete c_ErsatzGenMEt_corr_pass; - - TCanvas* c_ErsatzPfMEt_corr_pass_EB = new TCanvas("ErsatzPfMEt_corr_pass_EB", "", 800, 600); - c_ErsatzPfMEt_corr_pass_EB->cd(); - //h_ErsatzPfMEt_pass_EB->Scale(1./h_ErsatzPfMEt_pass_EB->Integral()); - h_ErsatzPfMEt_pass_EB->SetLineColor(2); - h_ErsatzPfMEt_pass_EB->SetStats(kFALSE); - h_ErsatzPfMEt_pass_EB->SetTitle(kFALSE); - h_ErsatzPfMEt_pass_EB->GetYaxis()->SetTitleOffset(1.2); - h_ErsatzPfMEt_pass_EB->Draw(); - h_WPfMEt_pass_EB->Scale(h_ErsatzPfMEt_pass_EB->Integral()/h_WPfMEt_pass_EB->Integral()); - h_WPfMEt_pass_EB->SetLineColor(4); - h_WPfMEt_pass_EB->Draw("same"); - legend->Draw(); - c_ErsatzPfMEt_corr_pass_EB->SaveAs("ErsatzPfMEt_corr_pass_EB.png"); - delete c_ErsatzPfMEt_corr_pass_EB; - - TCanvas* c_ErsatzPfMEt_corr_pass_EE = new TCanvas("ErsatzPfMEt_corr_pass_EE", "", 800, 600); - c_ErsatzPfMEt_corr_pass_EE->cd(); - //h_ErsatzPfMEt_pass_EE->Scale(1./h_ErsatzPfMEt_pass_EE->Integral()); - h_ErsatzPfMEt_pass_EE->SetLineColor(2); - h_ErsatzPfMEt_pass_EE->SetStats(kFALSE); - h_ErsatzPfMEt_pass_EE->SetTitle(kFALSE); - h_ErsatzPfMEt_pass_EE->GetYaxis()->SetTitleOffset(1.2); - h_ErsatzPfMEt_pass_EE->Draw(); - h_WPfMEt_pass_EE->Scale(h_ErsatzPfMEt_pass_EE->Integral()/h_WPfMEt_pass_EE->Integral()); - h_WPfMEt_pass_EE->SetLineColor(4); - h_WPfMEt_pass_EE->Draw("same"); - legend->Draw(); - c_ErsatzPfMEt_corr_pass_EE->SaveAs("ErsatzPfMEt_corr_pass_EE.png"); - delete c_ErsatzPfMEt_corr_pass_EE; - - TCanvas* c_ErsatzPfMEt_corr_pass = new TCanvas("ErsatzPfMEt_corr_pass", "", 800, 600); - c_ErsatzPfMEt_corr_pass->cd(); - //h_ErsatzPfMEt_pass->Scale(1./h_ErsatzPfMEt_pass->Integral()); - h_ErsatzPfMEt_pass->SetLineColor(2); - h_ErsatzPfMEt_pass->SetStats(kFALSE); - h_ErsatzPfMEt_pass->SetTitle(kFALSE); - h_ErsatzPfMEt_pass->GetYaxis()->SetTitleOffset(1.2); - h_ErsatzPfMEt_pass->Draw(); - h_WPfMEt_pass->Scale(h_ErsatzPfMEt_pass->Integral()/h_WPfMEt_pass->Integral()); - h_WPfMEt_pass->SetLineColor(4); - h_WPfMEt_pass->Draw("same"); - legend->Draw(); - c_ErsatzPfMEt_corr_pass->SaveAs("ErsatzPfMEt_corr_pass.png"); - delete c_ErsatzPfMEt_corr_pass; - - cout << "Calculating f ..." << endl; - cout << "MET cut = " << int(cMEt) << endl; - cout << "nPass = " << h_ErsatzMEt_pass->Integral(1,100) << endl; - cout << "nFail = " << h_ErsatzMEt_fail->Integral(1,100) << endl; - - double N_pass_EB = h_ErsatzMEt_pass_EB->Integral(1,100); - double A_EB = h_ErsatzMEt_pass_EB->Integral(int(cMEt)+1,100); - double B_EB = h_ErsatzMEt_pass_EB->Integral(1,int(cMEt)); - double N_pass_EE = h_ErsatzMEt_pass_EE->Integral(1,100); - double A_EE = h_ErsatzMEt_pass_EE->Integral(int(cMEt)+1,100); - double B_EE = h_ErsatzMEt_pass_EE->Integral(1,int(cMEt)); - double N_fail_EB = h_ErsatzMEt_fail_EB->Integral(1,100); - double D_EB = h_ErsatzMEt_fail_EB->Integral(int(cMEt)+1,100); - double C_EB = h_ErsatzMEt_fail_EB->Integral(1,int(cMEt)); - double N_fail_EE = h_ErsatzMEt_fail_EE->Integral(1,100); - double D_EE = h_ErsatzMEt_fail_EE->Integral(int(cMEt)+1,100); - double C_EE = h_ErsatzMEt_fail_EE->Integral(1,int(cMEt)); - - double A = A_EB + A_EE; - double B = B_EB + B_EE; - double C = C_EB + C_EE; - double D = D_EB + D_EE; - double N_pass = N_pass_EB + N_pass_EE; - double N_fail = N_fail_EB + N_fail_EE; - //int N = N_pass + N_fail; - - double eff = 1.0*A/(A+B); - double efferror = sqrt(eff*(1.-eff)/N_pass); - double f = 1.0*A/B; - double ferror = efferror/((1.-eff)*(1.-eff)); - - double effprime = 1.0*D/(D+C); - double effprimeerror = sqrt(effprime*(1.-effprime)/N_fail); - double fprime = 1.0*D/C; - double fprimeerror = effprimeerror/((1.-effprime)*(1.-effprime)); - - cout << "f\tferror\teff\tefferror\tA\tB\tN_pass" << endl; - cout << f << "\t" << ferror << "\t" << eff << "\t" << efferror << "\t" << A << "\t" << B << "\t" << N_pass << "\n" << endl; - - cout << "fprime\tfprimeerror\teffprime\teffprimeerror\tD\tC\tN_fail" << endl; - cout << fprime << "\t" << fprimeerror << "\t" << effprime << "\t" << effprimeerror << "\t" << D << "\t" << C << "\t" << N_fail << "\n" << endl; - -// results << process << "\t" << f << "\t" << ferror << "\t" << A << "\t" << B << "\t" << fprime << "\t" << fprimeerror << "\t" << D << "\t" << C << endl; - - outfile->Write(); - outfile->Close(); -} diff --git a/ElectroWeakAnalysis/ZEE/test/StabilityPlots.cpp b/ElectroWeakAnalysis/ZEE/test/StabilityPlots.cpp deleted file mode 100644 index e2377f2b39320..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/StabilityPlots.cpp +++ /dev/null @@ -1,478 +0,0 @@ -#include "TFile.h" -#include "TGraphErrors.h" -#include "TVectorT.h" -#include "TH1.h" -#include "TLegend.h" -#include "TCanvas.h" -#include -#include -#include -#include - -using namespace std; - -void StabilityPlots() -{ - ofstream CaloMET("CaloMET.txt"); - ofstream TcMET("TcMET.txt"); - //ofstream T1MET("T1MET.txt"); - ofstream PfMET("PfMET.txt"); - CaloMET << "MET cut\tftrue\tf\tdf\teff\tdeff\ta\tb\tnpass\tf'true\tf'\tdf'\teff'\tdeff'\td\tc\tnfail" << endl; - TcMET << "MET cut\tftrue\tf\tdf\teff\tdeff\ta\tb\tnpass\tf'true\tf'\tdf'\teff'\tdeff'\td\tc\tnfail" << endl; - //T1MET << "MET cut\tftrue\tf\tdf\teff\tdeff\ta\tb\tnpass\tf'true\tf'\tdf'\teff'\tdeff'\td\tc\tnfail" << endl; - PfMET << "MET cut\tftrue\tf\tdf\teff\tdeff\ta\tb\tnpass\tf'true\tf'\tdf'\teff'\tdeff'\td\tc\tnfail" << endl; - cout << setprecision(3); - CaloMET << setprecision(3); - TcMET << setprecision(3); - //T1MET << setprecision(3); - PfMET << setprecision(3); - - TVectorT metcut(11), metcuterror(11); - TVectorT f_calo_ersatz(11), df_calo_ersatz(11), eff_calo_ersatz(11), deff_calo_ersatz(11), deltaf_calo_ersatz(11); - TVectorT fprime_calo_ersatz(11), dfprime_calo_ersatz(11), effprime_calo_ersatz(11), deffprime_calo_ersatz(11), deltafprime_calo_ersatz(11); - TVectorT f_tc_ersatz(11), df_tc_ersatz(11), eff_tc_ersatz(11), deff_tc_ersatz(11), deltaf_tc_ersatz(11); - TVectorT fprime_tc_ersatz(11), dfprime_tc_ersatz(11), effprime_tc_ersatz(11), deffprime_tc_ersatz(11), deltafprime_tc_ersatz(11); - //TVectorT f_t1_ersatz(11), df_t1_ersatz(11), eff_t1_ersatz(11), deff_t1_ersatz(11), deltaf_t1_ersatz(11); - //TVectorT fprime_t1_ersatz(11), dfprime_t1_ersatz(11), effprime_t1_ersatz(11), deffprime_t1_ersatz(11), deltafprime_t1_ersatz(11); - TVectorT f_pf_ersatz(11), df_pf_ersatz(11), eff_pf_ersatz(11), deff_pf_ersatz(11), deltaf_pf_ersatz(11); - TVectorT fprime_pf_ersatz(11), dfprime_pf_ersatz(11), effprime_pf_ersatz(11), deffprime_pf_ersatz(11), deltafprime_pf_ersatz(11); - - TFile* file = TFile::Open("ZeePlots.root"); - - TH1F* h_ErsatzCaloMEt_pass = (TH1F*) file->Get("ErsatzMEt_pass"); - TH1F* h_ErsatzCaloMEt_fail = (TH1F*) file->Get("ErsatzMEt_fail"); - TH1F* h_WCaloMEt_pass = (TH1F*) file->Get("WCaloMEt_pass"); - TH1F* h_WCaloMEt_fail = (TH1F*) file->Get("WCaloMEt_fail"); - TH1F* h_ErsatzTcMEt_pass = (TH1F*) file->Get("ErsatzTcMEt_pass"); - TH1F* h_ErsatzTcMEt_fail = (TH1F*) file->Get("ErsatzTcMEt_fail"); - TH1F* h_WTcMEt_pass = (TH1F*) file->Get("WTcMEt_pass"); - TH1F* h_WTcMEt_fail = (TH1F*) file->Get("WTcMEt_fail"); - //TH1F* h_ErsatzT1MEt_pass = (TH1F*) file->Get("ErsatzT1MEt_pass"); - //TH1F* h_ErsatzT1MEt_fail = (TH1F*) file->Get("ErsatzT1MEt_fail"); - //TH1F* h_WT1MEt_pass = (TH1F*) file->Get("WT1MEt_pass"); - //TH1F* h_WT1MEt_fail = (TH1F*) file->Get("WT1MEt_fail"); - TH1F* h_ErsatzPfMEt_pass = (TH1F*) file->Get("ErsatzPfMEt_pass"); - TH1F* h_ErsatzPfMEt_fail = (TH1F*) file->Get("ErsatzPfMEt_fail"); - TH1F* h_WPfMEt_pass = (TH1F*) file->Get("WPfMEt_pass"); - TH1F* h_WPfMEt_fail = (TH1F*) file->Get("WPfMEt_fail"); - - for(int i=0; i<102; i++) - { - cout << h_WCaloMEt_pass->GetBinContent(i) << endl; - } - cout << "sum = " << h_WCaloMEt_pass->Integral(21,100) << endl; - for(int i=0; i<102; i++) - { - cout << h_WCaloMEt_fail->GetBinContent(i) << endl; - } - cout << "sum = " << h_WCaloMEt_fail->Integral(21,100) << endl; - - int i = 0; - double a_calo_ersatz, a_calo_true; - double a_tc_ersatz, a_tc_true; - //double a_t1_ersatz, a_t1_true; - double a_pf_ersatz, a_pf_true; - double b_calo_ersatz, b_calo_true; - double b_tc_ersatz, b_tc_true; - //double b_t1_ersatz, b_t1_true; - double b_pf_ersatz, b_pf_true; - double c_calo_ersatz, c_calo_true; - double c_tc_ersatz, c_tc_true; - //double c_t1_ersatz, c_t1_true; - double c_pf_ersatz, c_pf_true; - double d_calo_ersatz, d_calo_true; - double d_tc_ersatz, d_tc_true; - //double d_t1_ersatz, d_t1_true; - double d_pf_ersatz, d_pf_true; - cout << "mooooooooo" << endl; - for(int cMET=20; cMET<41; cMET+=2) - { - a_calo_ersatz = h_ErsatzCaloMEt_pass->Integral(cMET+1, 100); // Problem Here - a_tc_ersatz = h_ErsatzTcMEt_pass->Integral(cMET+1, 100); - //a_t1_ersatz = h_ErsatzT1MEt_pass->Integral(cMET+1, 100); - a_pf_ersatz = h_ErsatzPfMEt_pass->Integral(cMET+1, 100); - cout << "mooooooooo" << endl; - a_calo_true = h_WCaloMEt_pass->Integral(cMET+1, 100); - a_tc_true = h_WTcMEt_pass->Integral(cMET+1, 100); - //a_t1_true = h_WT1MEt_pass->Integral(cMET+1, 100); - a_pf_true = h_WPfMEt_pass->Integral(cMET+1, 100); - cout << "mooooooooo" << endl; - b_calo_ersatz = h_ErsatzCaloMEt_pass->Integral(1, cMET); - b_tc_ersatz = h_ErsatzTcMEt_pass->Integral(1, cMET); - //b_t1_ersatz = h_ErsatzT1MEt_pass->Integral(1, cMET); - b_pf_ersatz = h_ErsatzPfMEt_pass->Integral(1, cMET); - cout << "mooooooooo" << endl; - b_calo_true = h_WCaloMEt_pass->Integral(1, cMET); - b_tc_true = h_WTcMEt_pass->Integral(1, cMET); - //b_t1_true = h_WT1MEt_pass->Integral(1, cMET); - b_pf_true = h_WPfMEt_pass->Integral(1, cMET); - cout << "mooooooooo" << endl; - c_calo_ersatz = h_ErsatzCaloMEt_fail->Integral(1, cMET); - c_tc_ersatz = h_ErsatzTcMEt_fail->Integral(1, cMET); - //c_t1_ersatz = h_ErsatzT1MEt_fail->Integral(1, cMET); - c_pf_ersatz = h_ErsatzPfMEt_fail->Integral(1, cMET); - cout << "mooooooooo" << endl; - c_calo_true = h_WCaloMEt_fail->Integral(1, cMET); - c_tc_true = h_WTcMEt_fail->Integral(1, cMET); - //c_t1_true = h_WT1MEt_fail->Integral(1, cMET); - c_pf_true = h_WPfMEt_fail->Integral(1, cMET); - cout << "mooooooooo" << endl; - d_calo_ersatz = h_ErsatzCaloMEt_fail->Integral(cMET+1, 100); - d_tc_ersatz = h_ErsatzTcMEt_fail->Integral(cMET+1, 100); - //d_t1_ersatz = h_ErsatzT1MEt_fail->Integral(cMET+1, 100); - d_pf_ersatz = h_ErsatzPfMEt_fail->Integral(cMET+1, 100); - cout << "mooooooooo" << endl; - d_calo_true = h_WCaloMEt_fail->Integral(cMET+1, 100); - d_tc_true = h_WTcMEt_fail->Integral(cMET+1, 100); - //d_t1_true = h_WT1MEt_fail->Integral(cMET+1, 100); - d_pf_true = h_WPfMEt_fail->Integral(cMET+1, 100); - cout << "mooooooooo" << endl; - - metcut[i] = 1.0*cMET; - metcuterror[i] = 0.0; - - eff_calo_ersatz[i] = a_calo_ersatz/(a_calo_ersatz + b_calo_ersatz); - deff_calo_ersatz[i] = sqrt(eff_calo_ersatz[i]*(1. - eff_calo_ersatz[i])/(a_calo_ersatz + b_calo_ersatz)); - f_calo_ersatz[i] = a_calo_ersatz/b_calo_ersatz; - df_calo_ersatz[i] = deff_calo_ersatz[i]/((1. - eff_calo_ersatz[i])*(1. - eff_calo_ersatz[i])); - deltaf_calo_ersatz[i] = a_calo_ersatz/b_calo_ersatz - a_calo_true/b_calo_true; - effprime_calo_ersatz[i] = d_calo_ersatz/(d_calo_ersatz + c_calo_ersatz); - deffprime_calo_ersatz[i] = sqrt(effprime_calo_ersatz[i]*(1. - effprime_calo_ersatz[i])/(d_calo_ersatz + c_calo_ersatz)); - fprime_calo_ersatz[i] = d_calo_ersatz/c_calo_ersatz; - dfprime_calo_ersatz[i] = deffprime_calo_ersatz[i]/((1. - effprime_calo_ersatz[i])*(1. - effprime_calo_ersatz[i])); - deltafprime_calo_ersatz[i] = d_calo_ersatz/c_calo_ersatz - d_calo_true/c_calo_true; - - eff_tc_ersatz[i] = a_tc_ersatz/(a_tc_ersatz + b_tc_ersatz); - deff_tc_ersatz[i] = sqrt(eff_tc_ersatz[i]*(1. - eff_tc_ersatz[i])/(a_tc_ersatz + b_tc_ersatz)); - f_tc_ersatz[i] = a_tc_ersatz/b_tc_ersatz; - df_tc_ersatz[i] = deff_tc_ersatz[i]/((1. - eff_tc_ersatz[i])*(1. - eff_tc_ersatz[i])); - deltaf_tc_ersatz[i] = a_tc_ersatz/b_tc_ersatz - a_tc_true/b_tc_true; - effprime_tc_ersatz[i] = d_tc_ersatz/(d_tc_ersatz + c_tc_ersatz); - deffprime_tc_ersatz[i] = sqrt(effprime_tc_ersatz[i]*(1. - effprime_tc_ersatz[i])/(d_tc_ersatz + c_tc_ersatz)); - fprime_tc_ersatz[i] = d_tc_ersatz/c_tc_ersatz; - dfprime_tc_ersatz[i] = deffprime_tc_ersatz[i]/((1. - effprime_tc_ersatz[i])*(1. - effprime_tc_ersatz[i])); - deltafprime_tc_ersatz[i] = d_tc_ersatz/c_tc_ersatz - d_tc_true/c_tc_true; -/* - eff_t1_ersatz[i] = a_t1_ersatz/(a_t1_ersatz + b_t1_ersatz); - deff_t1_ersatz[i] = sqrt(eff_t1_ersatz[i]*(1. - eff_t1_ersatz[i])/(a_t1_ersatz + b_t1_ersatz)); - f_t1_ersatz[i] = a_t1_ersatz/b_t1_ersatz; - df_t1_ersatz[i] = deff_t1_ersatz[i]/((1. - eff_t1_ersatz[i])*(1. - eff_t1_ersatz[i])); - deltaf_t1_ersatz[i] = a_t1_ersatz/b_t1_ersatz - a_t1_true/b_t1_true; - effprime_t1_ersatz[i] = d_t1_ersatz/(d_t1_ersatz + c_t1_ersatz); - deffprime_t1_ersatz[i] = sqrt(effprime_t1_ersatz[i]*(1. - effprime_t1_ersatz[i])/(d_t1_ersatz + c_t1_ersatz)); - fprime_t1_ersatz[i] = d_t1_ersatz/c_t1_ersatz; - dfprime_t1_ersatz[i] = deffprime_t1_ersatz[i]/((1. - effprime_t1_ersatz[i])*(1. - effprime_t1_ersatz[i])); - deltafprime_t1_ersatz[i] = d_t1_ersatz/c_t1_ersatz - d_t1_true/c_t1_true; -*/ - eff_pf_ersatz[i] = a_pf_ersatz/(a_pf_ersatz + b_pf_ersatz); - deff_pf_ersatz[i] = sqrt(eff_pf_ersatz[i]*(1. - eff_pf_ersatz[i])/(a_pf_ersatz + b_pf_ersatz)); - f_pf_ersatz[i] = a_pf_ersatz/b_pf_ersatz; - df_pf_ersatz[i] = deff_pf_ersatz[i]/((1. - eff_pf_ersatz[i])*(1. - eff_pf_ersatz[i])); - deltaf_pf_ersatz[i] = a_pf_ersatz/b_pf_ersatz - a_pf_true/b_pf_true; - effprime_pf_ersatz[i] = d_pf_ersatz/(d_pf_ersatz + c_pf_ersatz); - deffprime_pf_ersatz[i] = sqrt(effprime_pf_ersatz[i]*(1. - effprime_pf_ersatz[i])/(d_pf_ersatz + c_pf_ersatz)); - fprime_pf_ersatz[i] = d_pf_ersatz/c_pf_ersatz; - dfprime_pf_ersatz[i] = deffprime_pf_ersatz[i]/((1. - effprime_pf_ersatz[i])*(1. - effprime_pf_ersatz[i])); - deltafprime_pf_ersatz[i] = d_pf_ersatz/c_pf_ersatz - d_pf_true/c_pf_true; - - cout << "CaloMEt " << cMET << endl; - cout << "MET cut\tftrue\tf\tdf\teff\tdeff\ta\tb\tnpass\tf'true\tf'\tdf'\teff'\tdeff'\td\tc\tnfail" << endl; - cout << cMET << "\t" - << a_calo_true/b_calo_true << "\t" - << f_calo_ersatz[i] << "\t" << df_calo_ersatz[i] << "\t" - << eff_calo_ersatz[i] << "\t" << deff_calo_ersatz[i] << "\t" - << a_calo_ersatz << "\t" << b_calo_ersatz << "\t" << a_calo_ersatz + b_calo_ersatz << "\t" - << d_calo_true/c_calo_true << "\t" - << fprime_calo_ersatz[i] << "\t" << dfprime_calo_ersatz[i] << "\t" - << effprime_calo_ersatz[i] << "\t" << deffprime_calo_ersatz[i] << "\t" - << d_calo_ersatz << "\t" << c_calo_ersatz << "\t" << d_calo_ersatz + c_calo_ersatz << endl; - cout << cMET << "\t" - << a_tc_true/b_tc_true << "\t" - << f_tc_ersatz[i] << "\t" << df_tc_ersatz[i] << "\t" - << eff_tc_ersatz[i] << "\t" << deff_tc_ersatz[i] << "\t" - << a_tc_ersatz << "\t" << b_tc_ersatz << "\t" << a_tc_ersatz + b_tc_ersatz << "\t" - << d_tc_true/c_tc_true << "\t" - << fprime_tc_ersatz[i] << "\t" << dfprime_tc_ersatz[i] << "\t" - << effprime_tc_ersatz[i] << "\t" << deffprime_tc_ersatz[i] << "\t" - << d_tc_ersatz << "\t" << c_tc_ersatz << "\t" << d_tc_ersatz + c_tc_ersatz << endl; -/* cout << cMET << "\t" - << a_t1_true/b_t1_true << "\t" - << f_t1_ersatz[i] << "\t" << df_t1_ersatz[i] << "\t" - << eff_t1_ersatz[i] << "\t" << deff_t1_ersatz[i] << "\t" - << a_t1_ersatz << "\t" << b_t1_ersatz << "\t" << a_t1_ersatz + b_t1_ersatz << "\t" - << d_t1_true/c_t1_true << "\t" - << fprime_t1_ersatz[i] << "\t" << dfprime_t1_ersatz[i] << "\t" - << effprime_t1_ersatz[i] << "\t" << deffprime_t1_ersatz[i] << "\t" - << d_t1_ersatz << "\t" << c_t1_ersatz << "\t" << d_t1_ersatz + c_t1_ersatz << endl; */ - cout << cMET << "\t" - << a_pf_true/b_pf_true << "\t" - << f_pf_ersatz[i] << "\t" << df_pf_ersatz[i] << "\t" - << eff_pf_ersatz[i] << "\t" << deff_pf_ersatz[i] << "\t" - << a_pf_ersatz << "\t" << b_pf_ersatz << "\t" << a_pf_ersatz + b_pf_ersatz << "\t" - << d_pf_true/c_pf_true << "\t" - << fprime_pf_ersatz[i] << "\t" << dfprime_pf_ersatz[i] << "\t" - << effprime_pf_ersatz[i] << "\t" << deffprime_pf_ersatz[i] << "\t" - << d_pf_ersatz << "\t" << c_pf_ersatz << "\t" << d_pf_ersatz + c_pf_ersatz << endl; - - CaloMET << cMET << "\t" - << a_calo_true/b_calo_true << "\t" - << f_calo_ersatz[i] << "\t" << df_calo_ersatz[i] << "\t" - << eff_calo_ersatz[i] << "\t" << deff_calo_ersatz[i] << "\t" - << a_calo_ersatz << "\t" << b_calo_ersatz << "\t" << a_calo_ersatz + b_calo_ersatz << "\t" - << d_calo_true/c_calo_true << "\t" - << fprime_calo_ersatz[i] << "\t" << dfprime_calo_ersatz[i] << "\t" - << effprime_calo_ersatz[i] << "\t" << deffprime_calo_ersatz[i] << "\t" - << d_calo_ersatz << "\t" << c_calo_ersatz << "\t" << d_calo_ersatz + c_calo_ersatz << endl; - TcMET << cMET << "\t" - << a_tc_true/b_tc_true << "\t" - << f_tc_ersatz[i] << "\t" << df_tc_ersatz[i] << "\t" - << eff_tc_ersatz[i] << "\t" << deff_tc_ersatz[i] << "\t" - << a_tc_ersatz << "\t" << b_tc_ersatz << "\t" << a_tc_ersatz + b_tc_ersatz << "\t" - << d_tc_true/c_tc_true << "\t" - << fprime_tc_ersatz[i] << "\t" << dfprime_tc_ersatz[i] << "\t" - << effprime_tc_ersatz[i] << "\t" << deffprime_tc_ersatz[i] << "\t" - << d_tc_ersatz << "\t" << c_tc_ersatz << "\t" << d_tc_ersatz + c_tc_ersatz << endl; -/* T1MET << cMET << "\t" - << a_t1_true/b_t1_true << "\t" - << f_t1_ersatz[i] << "\t" << df_t1_ersatz[i] << "\t" - << eff_t1_ersatz[i] << "\t" << deff_t1_ersatz[i] << "\t" - << a_t1_ersatz << "\t" << b_t1_ersatz << "\t" << a_t1_ersatz + b_t1_ersatz << "\t" - << d_t1_true/c_t1_true << "\t" - << fprime_t1_ersatz[i] << "\t" << dfprime_t1_ersatz[i] << "\t" - << effprime_t1_ersatz[i] << "\t" << deffprime_t1_ersatz[i] << "\t" - << d_t1_ersatz << "\t" << c_t1_ersatz << "\t" << d_t1_ersatz + c_t1_ersatz << endl;*/ - PfMET << cMET << "\t" - << a_pf_true/b_pf_true << "\t" - << f_pf_ersatz[i] << "\t" << df_pf_ersatz[i] << "\t" - << eff_pf_ersatz[i] << "\t" << deff_pf_ersatz[i] << "\t" - << a_pf_ersatz << "\t" << b_pf_ersatz << "\t" << a_pf_ersatz + b_pf_ersatz << "\t" - << d_pf_true/c_pf_true << "\t" - << fprime_pf_ersatz[i] << "\t" << dfprime_pf_ersatz[i] << "\t" - << effprime_pf_ersatz[i] << "\t" << deffprime_pf_ersatz[i] << "\t" - << d_pf_ersatz << "\t" << c_pf_ersatz << "\t" << d_pf_ersatz + c_pf_ersatz << endl; - - i++; - } - - TCanvas* c_calo_f = new TCanvas("calo_f", "", 800, 600); - TGraphErrors* g_calo_f = new TGraphErrors(metcut, f_calo_ersatz, metcuterror, df_calo_ersatz); - g_calo_f->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_calo_f->GetYaxis()->SetTitle("f_{ersatz}"); - g_calo_f->Draw("ap"); - c_calo_f->SaveAs("calo_f.png"); - delete g_calo_f; - delete c_calo_f; - - TCanvas* c_calo_eff = new TCanvas("calo_eff", "", 800, 600); - TGraphErrors* g_calo_eff = new TGraphErrors(metcut, eff_calo_ersatz, metcuterror, deff_calo_ersatz); - g_calo_eff->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_calo_eff->GetYaxis()->SetTitle("#epsilon_{ersatz}"); - g_calo_eff->Draw("ap"); - c_calo_eff->SaveAs("calo_eff.png"); - delete g_calo_eff; - delete c_calo_eff; - - TCanvas* c_calo_deltaf = new TCanvas("calo_deltaf", "", 800, 600); - TGraphErrors* g_calo_deltaf = new TGraphErrors(metcut, deltaf_calo_ersatz, metcuterror, df_calo_ersatz); - g_calo_deltaf->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_calo_deltaf->GetYaxis()->SetTitle("f_{ersatz} - f_{W#rightarrowe#nu}"); - g_calo_deltaf->Draw("ap"); - c_calo_deltaf->SaveAs("calo_deltaf.png"); - delete g_calo_deltaf; - delete c_calo_deltaf; - - TCanvas* c_calo_fprime = new TCanvas("calo_fprime", "", 800, 600); - TGraphErrors* g_calo_fprime = new TGraphErrors(metcut, fprime_calo_ersatz, metcuterror, dfprime_calo_ersatz); - g_calo_fprime->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_calo_fprime->GetYaxis()->SetTitle("f'_{ersatz}"); - g_calo_fprime->Draw("ap"); - c_calo_fprime->SaveAs("calo_fprime.png"); - delete g_calo_fprime; - delete c_calo_fprime; - - TCanvas* c_calo_effprime = new TCanvas("calo_effprime", "", 800, 600); - TGraphErrors* g_calo_effprime = new TGraphErrors(metcut, effprime_calo_ersatz, metcuterror, deffprime_calo_ersatz); - g_calo_effprime->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_calo_effprime->GetYaxis()->SetTitle("#epsilon'_{ersatz}"); - g_calo_effprime->Draw("ap"); - c_calo_effprime->SaveAs("calo_effprime.png"); - delete g_calo_effprime; - delete c_calo_effprime; - - TCanvas* c_calo_deltafprime = new TCanvas("calo_deltafprime", "", 800, 600); - TGraphErrors* g_calo_deltafprime = new TGraphErrors(metcut, deltafprime_calo_ersatz, metcuterror, dfprime_calo_ersatz); - g_calo_deltafprime->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_calo_deltafprime->GetYaxis()->SetTitle("f'_{ersatz} - f'_{W#rightarrowe#nu}"); - g_calo_deltafprime->Draw("ap"); - c_calo_deltafprime->SaveAs("calo_deltafprime.png"); - delete g_calo_deltafprime; - delete c_calo_deltafprime; - - TCanvas* c_tc_f = new TCanvas("tc_f", "", 800, 600); - TGraphErrors* g_tc_f = new TGraphErrors(metcut, f_tc_ersatz, metcuterror, df_tc_ersatz); - g_tc_f->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_tc_f->GetYaxis()->SetTitle("f_{ersatz}"); - g_tc_f->Draw("ap"); - c_tc_f->SaveAs("tc_f.png"); - delete g_tc_f; - delete c_tc_f; - - TCanvas* c_tc_eff = new TCanvas("tc_eff", "", 800, 600); - TGraphErrors* g_tc_eff = new TGraphErrors(metcut, eff_tc_ersatz, metcuterror, deff_tc_ersatz); - g_tc_eff->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_tc_eff->GetYaxis()->SetTitle("#epsilon_{ersatz}"); - g_tc_eff->Draw("ap"); - c_tc_eff->SaveAs("tc_eff.png"); - delete g_tc_eff; - delete c_tc_eff; - - TCanvas* c_tc_deltaf = new TCanvas("tc_deltaf", "", 800, 600); - TGraphErrors* g_tc_deltaf = new TGraphErrors(metcut, deltaf_tc_ersatz, metcuterror, df_tc_ersatz); - g_tc_deltaf->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_tc_deltaf->GetYaxis()->SetTitle("f_{ersatz} - f_{W#rightarrowe#nu}"); - g_tc_deltaf->Draw("ap"); - c_tc_deltaf->SaveAs("tc_deltaf.png"); - delete g_tc_deltaf; - delete c_tc_deltaf; - - TCanvas* c_tc_fprime = new TCanvas("tc_fprime", "", 800, 600); - TGraphErrors* g_tc_fprime = new TGraphErrors(metcut, fprime_tc_ersatz, metcuterror, dfprime_tc_ersatz); - g_tc_fprime->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_tc_fprime->GetYaxis()->SetTitle("f'_{ersatz}"); - g_tc_fprime->Draw("ap"); - c_tc_fprime->SaveAs("tc_fprime.png"); - delete g_tc_fprime; - delete c_tc_fprime; - - TCanvas* c_tc_effprime = new TCanvas("tc_effprime", "", 800, 600); - TGraphErrors* g_tc_effprime = new TGraphErrors(metcut, effprime_tc_ersatz, metcuterror, deffprime_tc_ersatz); - g_tc_effprime->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_tc_effprime->GetYaxis()->SetTitle("#epsilon'_{ersatz}"); - g_tc_effprime->Draw("ap"); - c_tc_effprime->SaveAs("tc_effprime.png"); - delete g_tc_effprime; - delete c_tc_effprime; - - TCanvas* c_tc_deltafprime = new TCanvas("tc_deltafprime", "", 800, 600); - TGraphErrors* g_tc_deltafprime = new TGraphErrors(metcut, deltafprime_tc_ersatz, metcuterror, dfprime_tc_ersatz); - g_tc_deltafprime->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_tc_deltafprime->GetYaxis()->SetTitle("f'_{ersatz} - f'_{W#rightarrowe#nu}"); - g_tc_deltafprime->Draw("ap"); - c_tc_deltafprime->SaveAs("tc_deltafprime.png"); - delete g_tc_deltafprime; - delete c_tc_deltafprime; -/* - TCanvas* c_t1_f = new TCanvas("t1_f", "", 800, 600); - TGraphErrors* g_t1_f = new TGraphErrors(metcut, f_t1_ersatz, metcuterror, df_t1_ersatz); - g_t1_f->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_t1_f->GetYaxis()->SetTitle("f_{ersatz}"); - g_t1_f->Draw("ap"); - c_t1_f->SaveAs("t1_f.png"); - delete g_t1_f; - delete c_t1_f; - - TCanvas* c_t1_eff = new TCanvas("t1_eff", "", 800, 600); - TGraphErrors* g_t1_eff = new TGraphErrors(metcut, eff_t1_ersatz, metcuterror, deff_t1_ersatz); - g_t1_eff->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_t1_eff->GetYaxis()->SetTitle("#epsilon_{ersatz}"); - g_t1_eff->Draw("ap"); - c_t1_eff->SaveAs("t1_eff.png"); - delete g_t1_eff; - delete c_t1_eff; - - TCanvas* c_t1_deltaf = new TCanvas("t1_deltaf", "", 800, 600); - TGraphErrors* g_t1_deltaf = new TGraphErrors(metcut, deltaf_t1_ersatz, metcuterror, df_t1_ersatz); - g_t1_deltaf->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_t1_deltaf->GetYaxis()->SetTitle("f_{ersatz} - f_{W#rightarrowe#nu}"); - g_t1_deltaf->Draw("ap"); - c_t1_deltaf->SaveAs("t1_deltaf.png"); - delete g_t1_deltaf; - delete c_t1_deltaf; - - TCanvas* c_t1_fprime = new TCanvas("t1_fprime", "", 800, 600); - TGraphErrors* g_t1_fprime = new TGraphErrors(metcut, fprime_t1_ersatz, metcuterror, dfprime_t1_ersatz); - g_t1_fprime->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_t1_fprime->GetYaxis()->SetTitle("f'_{ersatz}"); - g_t1_fprime->Draw("ap"); - c_t1_fprime->SaveAs("t1_fprime.png"); - delete g_t1_fprime; - delete c_t1_fprime; - - TCanvas* c_t1_effprime = new TCanvas("t1_effprime", "", 800, 600); - TGraphErrors* g_t1_effprime = new TGraphErrors(metcut, effprime_t1_ersatz, metcuterror, deffprime_t1_ersatz); - g_t1_effprime->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_t1_effprime->GetYaxis()->SetTitle("#epsilon'_{ersatz}"); - g_t1_effprime->Draw("ap"); - c_t1_effprime->SaveAs("t1_effprime.png"); - delete g_t1_effprime; - delete c_t1_effprime; - - TCanvas* c_t1_deltafprime = new TCanvas("t1_deltafprime", "", 800, 600); - TGraphErrors* g_t1_deltafprime = new TGraphErrors(metcut, deltafprime_t1_ersatz, metcuterror, dfprime_t1_ersatz); - g_t1_deltafprime->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_t1_deltafprime->GetYaxis()->SetTitle("f'_{ersatz} - f'_{W#rightarrowe#nu}"); - g_t1_deltafprime->Draw("ap"); - c_t1_deltafprime->SaveAs("t1_deltafprime.png"); - delete g_t1_deltafprime; - delete c_t1_deltafprime; -*/ - TCanvas* c_pf_f = new TCanvas("pf_f", "", 800, 600); - TGraphErrors* g_pf_f = new TGraphErrors(metcut, f_pf_ersatz, metcuterror, df_pf_ersatz); - g_pf_f->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_pf_f->GetYaxis()->SetTitle("f_{ersatz}"); - g_pf_f->Draw("ap"); - c_pf_f->SaveAs("pf_f.png"); - delete g_pf_f; - delete c_pf_f; - - TCanvas* c_pf_eff = new TCanvas("pf_eff", "", 800, 600); - TGraphErrors* g_pf_eff = new TGraphErrors(metcut, eff_pf_ersatz, metcuterror, deff_pf_ersatz); - g_pf_eff->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_pf_eff->GetYaxis()->SetTitle("#epsilon_{ersatz}"); - g_pf_eff->Draw("ap"); - c_pf_eff->SaveAs("pf_eff.png"); - delete g_pf_eff; - delete c_pf_eff; - - TCanvas* c_pf_deltaf = new TCanvas("pf_deltaf", "", 800, 600); - TGraphErrors* g_pf_deltaf = new TGraphErrors(metcut, deltaf_pf_ersatz, metcuterror, df_pf_ersatz); - g_pf_deltaf->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_pf_deltaf->GetYaxis()->SetTitle("f_{ersatz} - f_{W#rightarrowe#nu}"); - g_pf_deltaf->Draw("ap"); - c_pf_deltaf->SaveAs("pf_deltaf.png"); - delete g_pf_deltaf; - delete c_pf_deltaf; - - TCanvas* c_pf_fprime = new TCanvas("pf_fprime", "", 800, 600); - TGraphErrors* g_pf_fprime = new TGraphErrors(metcut, fprime_pf_ersatz, metcuterror, dfprime_pf_ersatz); - g_pf_fprime->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_pf_fprime->GetYaxis()->SetTitle("f'_{ersatz}"); - g_pf_fprime->Draw("ap"); - c_pf_fprime->SaveAs("pf_fprime.png"); - delete g_pf_fprime; - delete c_pf_fprime; - - TCanvas* c_pf_effprime = new TCanvas("pf_effprime", "", 800, 600); - TGraphErrors* g_pf_effprime = new TGraphErrors(metcut, effprime_pf_ersatz, metcuterror, deffprime_pf_ersatz); - g_pf_effprime->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_pf_effprime->GetYaxis()->SetTitle("#epsilon'_{ersatz}"); - g_pf_effprime->Draw("ap"); - c_pf_effprime->SaveAs("pf_effprime.png"); - delete g_pf_effprime; - delete c_pf_effprime; - - TCanvas* c_pf_deltafprime = new TCanvas("pf_deltafprime", "", 800, 600); - TGraphErrors* g_pf_deltafprime = new TGraphErrors(metcut, deltafprime_pf_ersatz, metcuterror, dfprime_pf_ersatz); - g_pf_deltafprime->GetXaxis()->SetTitle("#slash{E}_{T} cut"); - g_pf_deltafprime->GetYaxis()->SetTitle("f'_{ersatz} - f'_{W#rightarrowe#nu}"); - g_pf_deltafprime->Draw("ap"); - c_pf_deltafprime->SaveAs("pf_deltafprime.png"); - delete g_pf_deltafprime; - delete c_pf_deltafprime; - - file->Close(); - CaloMET.close(); - TcMET.close(); - //T1MET.close(); - PfMET.close(); -} diff --git a/ElectroWeakAnalysis/ZEE/test/Zersatzmet_cfg.py b/ElectroWeakAnalysis/ZEE/test/Zersatzmet_cfg.py deleted file mode 100644 index 35e7582ceec8b..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/Zersatzmet_cfg.py +++ /dev/null @@ -1,64 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("ErsatzMEtMaker") - -process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cerr.threshold = cms.untracked.string("DEBUG") -#process.MessageLogger.cerr.threshold = cms.untracked.string("INFO") -process.MessageLogger.cerr.FwkSummary = cms.untracked.PSet( - reportEvery = cms.untracked.int32(1), - limit = cms.untracked.int32(10000000) -) -process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( - #reportEvery = cms.untracked.int32(500), - reportEvery = cms.untracked.int32(1), - limit = cms.untracked.int32(10000000) -) -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('STARTUP31X_V4::All') -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -process.electronHcalTowerIsolationLcone.intRadius = 0.0 -#process.load("RecoEcal.EgammaClusterProducers.geometryForClustering_cff") -process.load("Geometry.CaloEventSetup.CaloTopology_cfi") -process.load("PhysicsTools.PatAlgos.recoLayer0.jetMETCorrections_cff") -#process.extend(include("RecoEcal/EgammaClusterProducers/data/geometryForClustering.cff")) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10000) ) - -#from ElectroWeakAnalysis.ErsatzMEt.Zee_data_cff import newFileNames - -process.source = cms.Source("PoolSource", -# fileNames = newFileNames - fileNames = cms.untracked.vstring() - #fileNames = cms.untracked.vstring("file:/tmp/rnandi/Zee_AODSIM.root", "file:/tmp/rnandi/Zee_AODSIM_2.root") -# "/store/mc/Summer08/Zee/GEN-SIM-RECO/IDEAL_V11_redigi_v2/0008/0840D3A9-A000-DE11-ABF8-00161725E4EB.root") -) - -from ElectroWeakAnalysis.ZEE.ersatzmet_cfi import ErsatzMEtParams -#from ElectroWeakAnalysis.ErsatzMEt.EtaWeights_cff import EtaWeightsPS -process.ErsatzMEt = cms.EDAnalyzer('ErsatzMEt', -ErsatzMEtParams, -Zevent = cms.bool(True), -HLTPathCheck = cms.bool(False) -) -# Other statements -process.ZeeMcEleFilter = cms.EDFilter("MCParticlePairFilter", - Status = cms.untracked.vint32(3, 3), - MinPt = cms.untracked.vdouble(0.0, 0.0), - MaxEta = cms.untracked.vdouble(2.7, 2.7), - MinEta = cms.untracked.vdouble(-2.7, -2.7), - ParticleCharge = cms.untracked.int32(0), - ParticleID1 = cms.untracked.vint32(11), - ParticleID2 = cms.untracked.vint32(11) -) -process.ZeeFilSeq = cms.Sequence(process.ZeeMcEleFilter) - -#process.p = cms.Path(process.ZeeFilSeq*process.egammaIsolationSequence*process.corMetType1Icone5*process.ErsatzMEt) -#process.p = cms.Path(process.ZeeFilSeq*process.egammaIsolationSequence*process.ErsatzMEt) -process.p = cms.Path(process.ErsatzMEt) -process.TFileService = cms.Service("TFileService", fileName = cms.string("Zee_AODSIM.root")) diff --git a/ElectroWeakAnalysis/ZEE/test/analysisersatz_cfg.py b/ElectroWeakAnalysis/ZEE/test/analysisersatz_cfg.py deleted file mode 100644 index 97d5d15f72747..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/analysisersatz_cfg.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("AnalysisErsatz") - -process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cerr.threshold = cms.untracked.string("DEBUG") -#process.MessageLogger.cerr.threshold = cms.untracked.string("INFO") -process.MessageLogger.cerr.FwkSummary = cms.untracked.PSet( - reportEvery = cms.untracked.int32(1), - limit = cms.untracked.int32(10000000) -) -process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( - # reportEvery = cms.untracked.int32(1000), - reportEvery = cms.untracked.int32(1), - limit = cms.untracked.int32(10000000) -) - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1)) - -#from ElectroWeakAnalysis.ErsatzMEt.Wenu_cff import newFileNames -#from ElectroWeakAnalysis.AnalysisErsatz.Wenu_Lots_cff import newFileNames -#from ElectroWeakAnalysis.ErsatzMEt.Reduced_Zee_cff import newFileNames - -process.source = cms.Source("PoolSource", - #fileNames = newFileNames - # replace 'myfile.root' with the source file you want to use -# fileNames = cms.untracked.vstring() - fileNames = cms.untracked.vstring("file:/tmp/rnandi/WenuTrue_AODSIM.root") -) - -# Other statements -process.WenuMcEleFilter = cms.EDFilter("PythiaFilter", - Status = cms.untracked.int32(1), - MotherID = cms.untracked.int32(11), - MinPt = cms.untracked.double(0.0), - ParticleID = cms.untracked.int32(11), - MaxEta = cms.untracked.double(2.7), - MinEta = cms.untracked.double(-2.7) -) -process.WenuFilSeq = cms.Sequence(process.WenuMcEleFilter) - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string("STARTUP31X_V4::All") -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.load("RecoEcal.EgammaClusterProducers.geometryForClustering_cff") -#process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequencePAT_cff") - -from ElectroWeakAnalysis.ZEE.ersatzmet_cfi import ErsatzMEtParams - -process.analyse = cms.EDAnalyzer('AnalysisErsatz', -ErsatzMEtParams, -ErsatzEvent = cms.bool(False) -) - -process.add_( cms.Service( - "RandomNumberGeneratorService", - analyse = cms.PSet( - initialSeed = cms.untracked.uint32(563545), - engineName = cms.untracked.string('TRandom3')) -)) -#process.p = cms.Path(process.WenuFilSeq*process.analyse) -#process.p = cms.Path(process.egammaIsolationSequence*process.analyse) -process.p = cms.Path(process.analyse) -#process.p = cms.Path(process.WenuFilSeq*process.egammaIsolationSequence*process.analyse) -process.TFileService = cms.Service("TFileService", - fileName = cms.string("WenuTrue_AODSIM.root"), -) diff --git a/ElectroWeakAnalysis/ZEE/test/aod_ZeePlots.py b/ElectroWeakAnalysis/ZEE/test/aod_ZeePlots.py deleted file mode 100644 index f24c2c77fe583..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/aod_ZeePlots.py +++ /dev/null @@ -1,179 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -# source -process.source = cms.Source("PoolSource", - #fileNames = cms.untracked.vstring('rfio:/castor/cern.ch/user/r/rompotis/RedigiSummer08RootTrees/WenuRedigi_RECO_SAMPLE.root') - fileNames = cms.untracked.vstring( - 'file:zee_Summer09-MC_31X_V3_AODSIM_v1_AODSIM.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('MC_31X_V5::All') -#process.GlobalTag.globaltag = cms.string('STARTUP31X_V4::All') - -process.load("Configuration.StandardSequences.MagneticField_cff") - -# this filter produces patElectrons and patCaloMets to be used in the following -process.aod2patFilter = cms.EDFilter('aod2patFilterZee', - electronCollectionTag = cms.untracked.InputTag("gsfElectrons","","RECO"), - metCollectionTag = cms.untracked.InputTag("met","","RECO"), - ) - -############################################################################## -## -## the filter to select the candidates from the data samples -## -## -## WARNING: you may want to modify this item: -HLT_process_name = "HLT8E29" # options: HLT or HLT8E29 -# trigger path selection -HLT_path_name = "HLT_Ele15_LW_L1R" -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSingleElectronLWEt15PixelMatchFilter" -# -process.zeeFilter = cms.EDFilter('ZeeCandidateFilter', - # cuts - ETCut = cms.untracked.double(20.), - METCut = cms.untracked.double(0.), - # trigger here - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - electronMatched2HLT = cms.untracked.bool(False), - electronMatched2HLT_DR = cms.untracked.double(0.2), - # electrons and MET - electronCollectionTag = cms.untracked.InputTag("aod2patFilter","patElectrons","PAT"), - metCollectionTag = cms.untracked.InputTag("aod2patFilter","patCaloMets","PAT") - - ) -#################################################################################### -## -## the W selection that you prefer - -selection_a2 = cms.PSet ( - trackIso_EB = cms.untracked.double(7.2), - ecalIso_EB = cms.untracked.double(5.7), - hcalIso_EB = cms.untracked.double(8.1), - sihih_EB = cms.untracked.double(0.01), - dphi_EB = cms.untracked.double(1000.), - deta_EB = cms.untracked.double(0.0071), - hoe_EB = cms.untracked.double(1000), - - trackIso_EE = cms.untracked.double(5.1), - ecalIso_EE = cms.untracked.double(5.0), - hcalIso_EE = cms.untracked.double(3.4), - sihih_EE = cms.untracked.double(0.028), - dphi_EE = cms.untracked.double(1000.), - deta_EE = cms.untracked.double(0.0066), - hoe_EE = cms.untracked.double(1000.) - ) - -selection_test = cms.PSet ( - trackIso_EB = cms.untracked.double(10), - ecalIso_EB = cms.untracked.double(10), - hcalIso_EB = cms.untracked.double(10), - sihih_EB = cms.untracked.double(0.1), - dphi_EB = cms.untracked.double(1), - deta_EB = cms.untracked.double(1), - hoe_EB = cms.untracked.double(1), - - trackIso_EE = cms.untracked.double(10), - ecalIso_EE = cms.untracked.double(10), - hcalIso_EE = cms.untracked.double(10), - sihih_EE = cms.untracked.double(1), - dphi_EE = cms.untracked.double(1), - deta_EE = cms.untracked.double(1), - hoe_EE = cms.untracked.double(1) - ) - -selection_inverse = cms.PSet ( - trackIso_EB_inv = cms.untracked.bool(True), - trackIso_EE_inv = cms.untracked.bool(True) - ) - -#################################################################################### -## -## and the plot creator -process.plotter = cms.EDAnalyzer('ZeePlots', - selection_a2, - selection_inverse, - zeeCollectionTag = cms.untracked.InputTag( - "zeeFilter","selectedZeeCandidates","PAT") - ) - - - -process.eca = cms.EDAnalyzer("EventContentAnalyzer") -process.p = cms.Path(process.aod2patFilter +process.zeeFilter + process.plotter) -#process.p = cms.Path(process.aod2patFilter + process.eca) - - - -#### SET OF Trigger names for AOD - 321 -# -# HLTPath_[0] = "HLT_Ele10_LW_L1R"; -# HLTFilterType_[0] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt10PixelMatchFilter","","HLT8E29"); -# HLTPath_[1] = "HLT_Ele10_LW_EleId_L1R"; -# HLTFilterType_[1] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt10EleIdDphiFilter","","HLT8E29"); -# HLTPath_[2] = "HLT_Ele15_LW_L1R"; -# HLTFilterType_[2] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15PixelMatchFilter","","HLT8E29"); -# HLTPath_[3] = "HLT_Ele15_SC10_LW_L1R"; -# HLTFilterType_[3] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15ESDoubleSC10","","HLT8E29"); -# HLTPath_[4] = "HLT_Ele15_SiStrip_L1R"; -# HLTFilterType_[4] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronSiStripEt15PixelMatchFilter","","HLT8E29"); -# HLTPath_[5] = "HLT_Ele20_LW_L1R"; -# HLTFilterType_[5] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15EtFilterESet20","","HLT8E29"); -# HLTPath_[6] = "HLT_DoubleEle5_SW_L1R"; -# HLTFilterType_[6] = edm::InputTag("hltL1NonIsoHLTNonIsoDoubleElectronEt5PixelMatchFilter","","HLT8E29"); -# HLTPath_[7] = "HLT_Ele15_SC10_LW_L1R"; -# HLTFilterType_[7] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15ESDoubleSC10","","HLT8E29"); -# HLTPath_[8] = "tba"; -# HLTFilterType_[8] = edm::InputTag("tba"); -# HLTPath_[9] = "tba"; -# HLTFilterType_[9] = edm::InputTag("tba"); -# // e31 menu -# HLTPath_[10] = "HLT_Ele10_SW_L1R"; -# HLTFilterType_[10] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt10PixelMatchFilter","","HLT"); -# HLTPath_[11] = "HLT_Ele15_SW_L1R"; -# HLTFilterType_[11] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15PixelMatchFilter","","HLT"); -# HLTPath_[12] = "HLT_Ele15_SiStrip_L1R"; // <--- same as [4] -# HLTFilterType_[12] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronSiStripEt15PixelMatchFilter","","HLT"); -# HLTPath_[13] = "HLT_Ele15_SW_LooseTrackIso_L1R"; -# HLTFilterType_[13] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15LTITrackIsolFilter","","HLT"); -# HLTPath_[14] = "HLT_Ele15_SW_EleId_L1R"; -# HLTFilterType_[14] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EleIdDphiFilter","","HLT"); -# HLTPath_[15] = "HLT_Ele20_SW_L1R"; -# HLTFilterType_[15] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt20PixelMatchFilter","","HLT"); -# HLTPath_[16] = "HLT_Ele20_SiStrip_L1R"; -# HLTFilterType_[16] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronSiStripEt20PixelMatchFilter","","HLT"); -# HLTPath_[17] = "HLT_Ele25_SW_L1R"; -# HLTFilterType_[17] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EtFilterESet25","","HLT"); -# HLTPath_[18] = "HLT_Ele25_SW_EleId_LooseTrackIso_L1R"; -# HLTFilterType_[18] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EleIdTrackIsolFilterESet25LTI","","HLT"); -# HLTPath_[19] = "HLT_DoubleEle10_SW_L1R"; -# HLTFilterType_[19] = edm::InputTag("hltL1NonIsoHLTNonIsoDoubleElectronEt10PixelMatchFilter","","HLT"); -# HLTPath_[20] = "HLT_Ele15_SC15_SW_EleId_L1R"; -# HLTFilterType_[20] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15EleIdESDoubleSC15","","HLT"); -# HLTPath_[21] = "HLT_Ele15_SC15_SW_LooseTrackIso_L1R"; -# HLTFilterType_[21] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15LTIESDoubleSC15","","HLT"); -# HLTPath_[22] = "HLT_Ele20_SC15_SW_L1R"; -# HLTFilterType_[22] = edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt20ESDoubleSC15","","HLT"); diff --git a/ElectroWeakAnalysis/ZEE/test/ersatzmet_cfg.py b/ElectroWeakAnalysis/ZEE/test/ersatzmet_cfg.py deleted file mode 100644 index e967afa9565cf..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/ersatzmet_cfg.py +++ /dev/null @@ -1,51 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("ErsatzMEtMaker") - -process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cerr.threshold = cms.untracked.string("DEBUG") -#process.MessageLogger.cerr.threshold = cms.untracked.string("INFO") -process.MessageLogger.cerr.FwkSummary = cms.untracked.PSet( - reportEvery = cms.untracked.int32(1), - limit = cms.untracked.int32(10000000) -) -process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( - #reportEvery = cms.untracked.int32(500), - reportEvery = cms.untracked.int32(1), - limit = cms.untracked.int32(10000000) -) -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('STARTUP31X_V4::All') -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -process.electronHcalTowerIsolationLcone.intRadius = 0.0 -#process.load("RecoEcal.EgammaClusterProducers.geometryForClustering_cff") -process.load("Geometry.CaloEventSetup.CaloTopology_cfi") -process.load("PhysicsTools.PatAlgos.recoLayer0.jetMETCorrections_cff") -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10000) ) - -#from ElectroWeakAnalysis.ErsatzMEt.Reduced_ZeeFull_cff import newFileNames - -process.source = cms.Source("PoolSource", -# fileNames = newFileNames - #fileNames = cms.untracked.vstring('/store/user/wardrope/Zee/Zee/652884fbfc42ebe755d455783d693c41//Zee_8.root') - fileNames = cms.untracked.vstring("file:/tmp/rnandi/Zee_AODSIM.root") - #fileNames = cms.untracked.vstring() -) - -from ElectroWeakAnalysis.ZEE.ersatzmet_cfi import ErsatzMEtParams -#from ElectroWeakAnalysis.ErsatzMEt.EtaWeights_cff import EtaWeightsPS -process.ErsatzMEt = cms.EDAnalyzer('ErsatzMEt', -ErsatzMEtParams, -Zevent = cms.bool(False) -) -# Other statements - -#process.p = cms.Path(process.egammaIsolationSequence*process.ErsatzMEt) -process.p = cms.Path(process.ErsatzMEt) -process.TFileService = cms.Service("TFileService", fileName = cms.string("Zee.root")) diff --git a/ElectroWeakAnalysis/ZEE/test/ersatzmet_cfi.py b/ElectroWeakAnalysis/ZEE/test/ersatzmet_cfi.py deleted file mode 100644 index 97f34c88271b5..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/ersatzmet_cfi.py +++ /dev/null @@ -1,70 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -ErsatzMEtParams = cms.PSet( -MCTruthCollection = cms.InputTag("genParticles"), -ElectronCollection = cms.InputTag("gsfElectrons"), -PfElectronCollection = cms.InputTag("pfElectrons"), -HybridScCollection = cms.InputTag("correctedHybridSuperClusters"), -M5x5ScCollection = cms.InputTag("correctedMulti5x5SuperClustersWithPreshower"), -sigmaElectronicNoise_EB = cms.double(0.03), -hyb_fCorrPSet = cms.PSet( - brLinearLowThr = cms.double(1.1), - fBremVec = cms.vdouble(-0.05208, 0.1331, 0.9196, -0.0005735, 1.343), - brLinearHighThr = cms.double(8.0), - fEtEtaVec = cms.vdouble(1.0012, -0.5714, 0, 0, - 0, 0.5549, 12.74, 1.0448, - 0, 0, 0, 0, - 8.0, 1.023, -0.00181, 0, 0) - ), -sigmaElectronicNoise_EE = cms.double(0.15), -m5x5_fCorrPSet = cms.PSet( - brLinearLowThr = cms.double(0.6), - fBremVec = cms.vdouble(-0.04163, 0.08552, 0.95048, -0.002308, 1.077), - brLinearHighThr = cms.double(6.0), - fEtEtaVec = cms.vdouble(0.9746, -6.512, 0, 0, - 0.02771, 4.983, 0, 0, - -0.007288, -0.9446, 0, 0, - 0, 0, 0, 1, 1) -), -CElecPtMin = cms.double(1.), -CEB_sigmaIEtaIEta = cms.double(99999.), -CEB_deltaPhiIn = cms.double(99999.), -CEB_deltaEtaIn = cms.double(99999.), -CEB_EcalIso = cms.double(99999.), -CEB_HcalIso = cms.double(99999.), -CEB_TrckIso = cms.double(99999.), -CEE_sigmaIEtaIEta = cms.double(99999.), -CEE_deltaPhiIn = cms.double(99999.), -CEE_deltaEtaIn = cms.double(99999.), -CEE_EcalIso = cms.double(99999.), -CEE_HcalIso = cms.double(99999.), -CEE_TrckIso = cms.double(99999.), -eIsoTrack = cms.InputTag("electronTrackIsolationLcone"), -eIsoEcal = cms.InputTag("electronEcalRecHitIsolationLcone"), -eIsoHcal = cms.InputTag("electronHcalTowerIsolationLcone"), -CaloMEtCollection = cms.InputTag("met"), -GenMEtCollection = cms.InputTag("genMet"), -PfMEtCollection = cms.InputTag("pfMet"), -TcMEtCollection = cms.InputTag("tcMet"), -#T1MEtCollection = cms.InputTag("layer1METs"), -#CaloMEtT1Collection = cms.InputTag("Type1MET"), -#CaloMEtT1Collection = cms.InputTag("corMetType1Icone5"), -#TriggerResults = cms.InputTag("TriggerResults","","HLT8E29"), -#TriggerEvent = cms.InputTag("hltTriggerSummaryAOD","","HLT8E29"), -#TriggerPath = cms.InputTag("hltL1NonIsoHLTNonIsoSingleElectronLWEt15PixelMatchFilter","","HLT8E29"), -#TriggerName = cms.string("HLT_Ele15_LW_L1R"), -TriggerResults = cms.InputTag("TriggerResults","","HLT"), -TriggerEvent = cms.InputTag("hltTriggerSummaryAOD","","HLT"), -TriggerPath = cms.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15TrackIsolFilter", "", "HLT"), -TriggerName = cms.string("HLT_Ele15_SW_LooseTrackIso_L1R"), -mW = cms.double(80.398), -mZ = cms.double(91.188), -HLTPathCheck = cms.bool(False), -mTPmin = cms.double(61.), -mTPmax = cms.double(121.), -BarrelEtaMax = cms.double(1.4442), -EndCapEtaMin = cms.double(1.56), -EndCapEtaMax = cms.double(2.5), -etaWidth = cms.int32(7), -phiWidth = cms.int32(25) -) diff --git a/ElectroWeakAnalysis/ZEE/test/pat_ZeeFilterSkimming.py b/ElectroWeakAnalysis/ZEE/test/pat_ZeeFilterSkimming.py deleted file mode 100644 index 22cbfbb11a71c..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/pat_ZeeFilterSkimming.py +++ /dev/null @@ -1,164 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - #'file:rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WenuSpring10START3X_V26_S09-v1_AODSIM.root', - 'rfio:/castor/cern.ch/cms/store/relval/CMSSW_3_5_7/RelValZEE/GEN-SIM-RECO/START3X_V26-v1/0012/020A72FB-4749-DF11-A27E-003048679076.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(300) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('START3X_V26A::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -process.load("CommonTools.ParticleFlow.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") -## -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.layer1RawCaloMETs = process.patMETs.clone( #%% - metSource = cms.InputTag("met","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), - ) -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myDesiredMetCollection = 'layer1RawCaloMETs' -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.layer1RawCaloMETs) -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) -# -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet( -# tracker = cms.PSet( -# src = cms.InputTag("electronTrackIsolationScone"), -# ), -# ecal = cms.PSet( -# src = cms.InputTag("electronEcalRecHitIsolationLcone"), -# ), -# hcal = cms.PSet( -# src = cms.InputTag("electronHcalTowerIsolationLcone"), -# ), -# user = cms.VPSet(), - ) - -## -## Pre-calculated electron identification selections -## -## set the variable false if you don't need them, or if you use your own PSet -## -## any input tag you set corresponds to a valuemap that either it is stored in the event -## or you create it yourself -process.patElectrons.addElectronID = cms.bool(True) -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso= cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso= cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso= cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso= cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso= cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso= cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso= cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso= cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso= cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso= cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso= cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso= cms.InputTag("simpleEleId60cIso"), - ) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -## -process.load("ElectroWeakAnalysis.ZEE.simpleEleIdSequence_cff") -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) -# process.makePatMuons may be needed depending on how you calculate the MET -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) -## ################################################################################ -## -## the filter to select the candidates from the data samples -## -## WARNING: you may want to modify this item: T R I G G E R S E L E C T I O N -HLT_process_name = "HLT" # -# trigger path selection -HLT_path_name = "HLT_Photon10_L1R" #= "HLT_Ele15_LW_L1R" # -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" -# -process.zeeFilter = cms.EDFilter('ZeeCandidateFilter', - # cuts - ETCut = cms.untracked.double(20.), - METCut = cms.untracked.double(0.), - useTriggerInfo = cms.untracked.bool(True), - # trigger - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.2), - # exra variable calculation - calculateConversionRejection = cms.untracked.bool(True), - calculateValidFirstPXBHit = cms.untracked.bool(True), - calculateExpectedMissingHits = cms.untracked.bool(True), - # electrons and MET - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myDesiredMetCollection,"","PAT") - ) -#################################################################################### -## - - - -process.zeePath = cms.Path(process.patDefaultSequence*process.zeeFilter) - - -process.zeeOutputModule = cms.OutputModule( "PoolOutputModule", - fileName = cms.untracked.string("zeeCandidates.root"), - outputCommands = cms.untracked.vstring( -# 'keep *' - 'drop *', - 'keep *_*_selectedZeeCandidates_*', - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('zeePath',),), - - ) - -process.outpath = cms.EndPath(process.zeeOutputModule) - - diff --git a/ElectroWeakAnalysis/ZEE/test/pat_ZeeFilterSkimming_data.py b/ElectroWeakAnalysis/ZEE/test/pat_ZeeFilterSkimming_data.py deleted file mode 100644 index ae89bb7f51e62..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/pat_ZeeFilterSkimming_data.py +++ /dev/null @@ -1,166 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - "dcap://gfe02:22128/pnfs/hep.ph.ic.ac.uk/data/cms/store/data/Commissioning10/MinimumBias/RECO/May6thPDSkim2_SD_EG-v1/0135/FCC2FA5A-BB5D-DF11-8246-002618943978.root" - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(300) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('GR_R_35X_V8B::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -#process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") -## -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.layer1RawCaloMETs = process.patMETs.clone( #%% - metSource = cms.InputTag("met","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), - ) -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myDesiredMetCollection = 'layer1RawCaloMETs' -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.layer1RawCaloMETs) -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) -# -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet( -# tracker = cms.PSet( -# src = cms.InputTag("electronTrackIsolationScone"), -# ), -# ecal = cms.PSet( -# src = cms.InputTag("electronEcalRecHitIsolationLcone"), -# ), -# hcal = cms.PSet( -# src = cms.InputTag("electronHcalTowerIsolationLcone"), -# ), -# user = cms.VPSet(), - ) - -## -## Pre-calculated electron identification selections -## -## set the variable false if you don't need them, or if you use your own PSet -## -## any input tag you set corresponds to a valuemap that either it is stored in the event -## or you create it yourself -process.patElectrons.addElectronID = cms.bool(True) -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso= cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso= cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso= cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso= cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso= cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso= cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso= cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso= cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso= cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso= cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso= cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso= cms.InputTag("simpleEleId60cIso"), - ) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -## -process.load("ElectroWeakAnalysis.ZEE.simpleEleIdSequence_cff") -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) -# process.makePatMuons may be needed depending on how you calculate the MET -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) -## ################################################################################ -## -## the filter to select the candidates from the data samples -## -## WARNING: you may want to modify this item: T R I G G E R S E L E C T I O N -HLT_process_name = "HLT" # -# trigger path selection -HLT_path_name = "HLT_Photon10_L1R" #= "HLT_Ele15_LW_L1R" # -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" -# -process.zeeFilter = cms.EDFilter('ZeeCandidateFilter', - # cfg for data - dataMagneticFieldSetUp = cms.untracked.bool(True), - dcsTag = cms.untracked.InputTag("scalersRawToDigi"), - # cuts - ETCut = cms.untracked.double(20.), - METCut = cms.untracked.double(0.), - useTriggerInfo = cms.untracked.bool(True), - # trigger - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.2), - # exra variable calculation - calculateConversionRejection = cms.untracked.bool(True), - calculateValidFirstPXBHit = cms.untracked.bool(True), - calculateExpectedMissingHits = cms.untracked.bool(True), - # electrons and MET - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myDesiredMetCollection,"","PAT") - ) -#################################################################################### -## - - - -process.zeePath = cms.Path(process.patDefaultSequence*process.zeeFilter) - - -process.zeeOutputModule = cms.OutputModule( "PoolOutputModule", - fileName = cms.untracked.string("zeeCandidates.root"), - outputCommands = cms.untracked.vstring( -# 'keep *' - 'drop *', - 'keep *_*_selectedZeeCandidates_*', - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('zeePath',),), - - ) - -process.outpath = cms.EndPath(process.zeeOutputModule) - - diff --git a/ElectroWeakAnalysis/ZEE/test/pat_ZeePlots.py b/ElectroWeakAnalysis/ZEE/test/pat_ZeePlots.py deleted file mode 100644 index 0a1411584f539..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/pat_ZeePlots.py +++ /dev/null @@ -1,187 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - #'file:rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WenuSpring10START3X_V26_S09-v1_AODSIM.root', - 'rfio:/castor/cern.ch/cms/store/relval/CMSSW_3_5_7/RelValZEE/GEN-SIM-RECO/START3X_V26-v1/0012/020A72FB-4749-DF11-A27E-003048679076.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(300) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('START3X_V26A::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -process.load("CommonTools.ParticleFlow.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") -## -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.layer1RawCaloMETs = process.patMETs.clone( #%% - metSource = cms.InputTag("met","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), - ) -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myDesiredMetCollection = 'layer1RawCaloMETs' -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.layer1RawCaloMETs) -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) -# -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet( -# tracker = cms.PSet( -# src = cms.InputTag("electronTrackIsolationScone"), -# ), -# ecal = cms.PSet( -# src = cms.InputTag("electronEcalRecHitIsolationLcone"), -# ), -# hcal = cms.PSet( -# src = cms.InputTag("electronHcalTowerIsolationLcone"), -# ), -# user = cms.VPSet(), - ) - -## -## Pre-calculated electron identification selections -## -## set the variable false if you don't need them, or if you use your own PSet -## -## any input tag you set corresponds to a valuemap that either it is stored in the event -## or you create it yourself -process.patElectrons.addElectronID = cms.bool(True) -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso= cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso= cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso= cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso= cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso= cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso= cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso= cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso= cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso= cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso= cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso= cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso= cms.InputTag("simpleEleId60cIso"), - ) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -## -process.load("ElectroWeakAnalysis.ZEE.simpleEleIdSequence_cff") -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) -# process.makePatMuons may be needed depending on how you calculate the MET -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) -## ################################################################################ -## -## the filter to select the candidates from the data samples -## -## WARNING: you may want to modify this item: T R I G G E R S E L E C T I O N -HLT_process_name = "HLT" # -# trigger path selection -HLT_path_name = "HLT_Photon10_L1R" #= "HLT_Ele15_LW_L1R" # -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" -# -process.zeeFilter = cms.EDFilter('ZeeCandidateFilter', - # cuts - ETCut = cms.untracked.double(20.), - METCut = cms.untracked.double(0.), - useTriggerInfo = cms.untracked.bool(True), - # trigger - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.2), - # exra variable calculation - calculateConversionRejection = cms.untracked.bool(True), - calculateValidFirstPXBHit = cms.untracked.bool(True), - calculateExpectedMissingHits = cms.untracked.bool(True), - # electrons and MET - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myDesiredMetCollection,"","PAT") - ) -#################################################################################### -## -## the Z selection that you prefer -from ElectroWeakAnalysis.ZEE.simpleCutBasedSpring10SelectionBlocks_cfi import * - -selection_inverse = cms.PSet ( - deta_EB_inv = cms.untracked.bool(True), - deta_EE_inv = cms.untracked.bool(True) - ) - - -selection_secondLeg = cms.PSet ( - ## set this to true if you want to switch on diff 2nd leg selection - useDifferentSecondLegSelection = cms.untracked.bool(False), - ## preselection criteria are independent of useDifferentSecondLegSelection - # set them to False if you don't want them - useConversionRejection2 = cms.untracked.bool(False), - useValidFirstPXBHit2 = cms.untracked.bool(False), - useExpectedMissingHits2 =cms.untracked.bool(False), - maxNumberOfExpectedMissingHits2 = cms.untracked.int32(1), - ## - usePrecalcID2 = cms.untracked.bool(False), - usePrecalcIDType2 = cms.untracked.string('simpleEleId95cIso'), - usePrecalcIDSign2 = cms.untracked.string('='), - usePrecalcIDValue2 = cms.untracked.double(7), - ) - -#################################################################################### -## -## and the plot creator -process.plotter = cms.EDAnalyzer('ZeePlots', - selection_95relIso, - selection_secondLeg, - usePrecalcID = cms.untracked.bool(False), - usePrecalcIDType = cms.untracked.string('simpleEleId95cIso'), - usePrecalcIDSign = cms.untracked.string('='), - usePrecalcIDValue = cms.untracked.double(7), - zeeCollectionTag = cms.untracked.InputTag("zeeFilter","selectedZeeCandidates","PAT") - ) - - - - -process.p = cms.Path(process.patDefaultSequence +process.zeeFilter + process.plotter) - - diff --git a/ElectroWeakAnalysis/ZEE/test/pat_ZeePlotsFromSkimmed.py b/ElectroWeakAnalysis/ZEE/test/pat_ZeePlotsFromSkimmed.py deleted file mode 100644 index eb98983a7f59b..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/pat_ZeePlotsFromSkimmed.py +++ /dev/null @@ -1,66 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("ZEEPLOTS") - - -process.MessageLogger = cms.Service("MessageLogger") - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:zeeCandidates.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## the Z selection that you prefer -from ElectroWeakAnalysis.ZEE.simpleCutBasedSpring10SelectionBlocks_cfi import * - -selection_inverse = cms.PSet ( - deta_EB_inv = cms.untracked.bool(True), - deta_EE_inv = cms.untracked.bool(True) - ) - - -selection_secondLeg = cms.PSet ( - ## set this to true if you want to switch on diff 2nd leg selection - useDifferentSecondLegSelection = cms.untracked.bool(False), - ## preselection criteria are independent of useDifferentSecondLegSelection - # set them to False if you don't want them - useConversionRejection2 = cms.untracked.bool(False), - useValidFirstPXBHit2 = cms.untracked.bool(False), - useExpectedMissingHits2 =cms.untracked.bool(False), - maxNumberOfExpectedMissingHits2 = cms.untracked.int32(1), - ## - usePrecalcID2 = cms.untracked.bool(False), - usePrecalcIDType2 = cms.untracked.string('simpleEleId95cIso'), - usePrecalcIDSign2 = cms.untracked.string('='), - usePrecalcIDValue2 = cms.untracked.double(7), - ) - -#################################################################################### -## -## and the plot creator -process.plotter = cms.EDAnalyzer('ZeePlots', - selection_95relIso, - selection_secondLeg, - usePrecalcID = cms.untracked.bool(False), - usePrecalcIDType = cms.untracked.string('simpleEleId95cIso'), - usePrecalcIDSign = cms.untracked.string('='), - usePrecalcIDValue = cms.untracked.double(7), - zeeCollectionTag = cms.untracked.InputTag("zeeFilter","selectedZeeCandidates","PAT") - ) - - - - - - -process.p = cms.Path(process.plotter) - - diff --git a/ElectroWeakAnalysis/ZEE/test/pat_ZeePlots_data.py b/ElectroWeakAnalysis/ZEE/test/pat_ZeePlots_data.py deleted file mode 100644 index cfe984330e0a0..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/pat_ZeePlots_data.py +++ /dev/null @@ -1,189 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - "dcap://gfe02:22128/pnfs/hep.ph.ic.ac.uk/data/cms/store/data/Commissioning10/MinimumBias/RECO/May6thPDSkim2_SD_EG-v1/0135/FCC2FA5A-BB5D-DF11-8246-002618943978.root" - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(300) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -process.GlobalTag.globaltag = cms.string('GR_R_35X_V8B::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -#process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") -## -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.layer1RawCaloMETs = process.patMETs.clone( #%% - metSource = cms.InputTag("met","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), - ) -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myDesiredMetCollection = 'layer1RawCaloMETs' -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.layer1RawCaloMETs) -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) -# -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet( -# tracker = cms.PSet( -# src = cms.InputTag("electronTrackIsolationScone"), -# ), -# ecal = cms.PSet( -# src = cms.InputTag("electronEcalRecHitIsolationLcone"), -# ), -# hcal = cms.PSet( -# src = cms.InputTag("electronHcalTowerIsolationLcone"), -# ), -# user = cms.VPSet(), - ) - -## -## Pre-calculated electron identification selections -## -## set the variable false if you don't need them, or if you use your own PSet -## -## any input tag you set corresponds to a valuemap that either it is stored in the event -## or you create it yourself -process.patElectrons.addElectronID = cms.bool(True) -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso= cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso= cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso= cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso= cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso= cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso= cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso= cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso= cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso= cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso= cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso= cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso= cms.InputTag("simpleEleId60cIso"), - ) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -## -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -## -process.load("ElectroWeakAnalysis.ZEE.simpleEleIdSequence_cff") -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) -# process.makePatMuons may be needed depending on how you calculate the MET -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) -## ################################################################################ -## -## the filter to select the candidates from the data samples -## -## WARNING: you may want to modify this item: T R I G G E R S E L E C T I O N -HLT_process_name = "HLT" # -# trigger path selection -HLT_path_name = "HLT_Photon10_L1R" #= "HLT_Ele15_LW_L1R" # -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" -# -process.zeeFilter = cms.EDFilter('ZeeCandidateFilter', - # cfg for data - dataMagneticFieldSetUp = cms.untracked.bool(True), - dcsTag = cms.untracked.InputTag("scalersRawToDigi"), - # cuts - ETCut = cms.untracked.double(20.), - METCut = cms.untracked.double(0.), - useTriggerInfo = cms.untracked.bool(True), - # trigger - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.2), - # exra variable calculation - calculateConversionRejection = cms.untracked.bool(True), - calculateValidFirstPXBHit = cms.untracked.bool(True), - calculateExpectedMissingHits = cms.untracked.bool(True), - # electrons and MET - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myDesiredMetCollection,"","PAT") - ) -#################################################################################### -## -## the Z selection that you prefer -from ElectroWeakAnalysis.ZEE.simpleCutBasedSpring10SelectionBlocks_cfi import * - -selection_inverse = cms.PSet ( - deta_EB_inv = cms.untracked.bool(True), - deta_EE_inv = cms.untracked.bool(True) - ) - - -selection_secondLeg = cms.PSet ( - ## set this to true if you want to switch on diff 2nd leg selection - useDifferentSecondLegSelection = cms.untracked.bool(False), - ## preselection criteria are independent of useDifferentSecondLegSelection - # set them to False if you don't want them - useConversionRejection2 = cms.untracked.bool(False), - useValidFirstPXBHit2 = cms.untracked.bool(False), - useExpectedMissingHits2 =cms.untracked.bool(False), - maxNumberOfExpectedMissingHits2 = cms.untracked.int32(1), - ## - usePrecalcID2 = cms.untracked.bool(False), - usePrecalcIDType2 = cms.untracked.string('simpleEleId95cIso'), - usePrecalcIDSign2 = cms.untracked.string('='), - usePrecalcIDValue2 = cms.untracked.double(7), - ) - -#################################################################################### -## -## and the plot creator -process.plotter = cms.EDAnalyzer('ZeePlots', - selection_95relIso, - selection_secondLeg, - usePrecalcID = cms.untracked.bool(False), - usePrecalcIDType = cms.untracked.string('simpleEleId95cIso'), - usePrecalcIDSign = cms.untracked.string('='), - usePrecalcIDValue = cms.untracked.double(7), - zeeCollectionTag = cms.untracked.InputTag("zeeFilter","selectedZeeCandidates","PAT") - ) - - - - -process.p = cms.Path(process.patDefaultSequence +process.zeeFilter + process.plotter) - - diff --git a/ElectroWeakAnalysis/ZEE/test/pat_ZeePlots_isodeposits.py b/ElectroWeakAnalysis/ZEE/test/pat_ZeePlots_isodeposits.py deleted file mode 100644 index e031f834333f8..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/pat_ZeePlots_isodeposits.py +++ /dev/null @@ -1,158 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - -process.MessageLogger = cms.Service( - "MessageLogger", - categories = cms.untracked.vstring('info', 'debug','cout') - ) - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - - -# source -process.source = cms.Source("PoolSource", - #fileNames = cms.untracked.vstring('rfio:/castor/cern.ch/user/r/rompotis/RedigiSummer08RootTrees/WenuRedigi_RECO_SAMPLE.root') - fileNames = cms.untracked.vstring( - 'file:zee_Summer09-MC_31X_V3_AODSIM_v1_AODSIM.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## Load additional processes -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -## global tags: -#process.GlobalTag.globaltag = cms.string('MC_31X_V5::All') -process.GlobalTag.globaltag = cms.string('STARTUP31X_V4::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -process.load("CommonTools.ParticleFlow.PF2PAT_cff") -process.load("PhysicsTools.PatAlgos.patSequences_cff") -process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") -## -# -# for ecal isolation: set the correct name of the ECAL rechit collection -# -process.eleIsoDepositEcalFromHits.ExtractorPSet.barrelEcalHits = cms.InputTag("reducedEcalRecHitsEB", "", "RECO") -process.eleIsoDepositEcalFromHits.ExtractorPSet.endcapEcalHits = cms.InputTag("reducedEcalRecHitsEE", "", "RECO") -# -# -process.eidRobustHighEnergy.reducedBarrelRecHitCollection = cms.InputTag("reducedEcalRecHitsEB", "", "RECO") -process.eidRobustHighEnergy.reducedEndcapRecHitCollection = cms.InputTag("reducedEcalRecHitsEE", "", "RECO") -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## CHOICE OF THE HLT PATH this section is not used from PAT -## -## Define here as string the names of the triggers only once -## please consult the table of the available triggers at the end of this file -# trigger menu selection -## -#process.patTrigger.processName = cms.string(HLT_process_name) -#process.patTriggerMatcher = cms.Sequence(process.patTriggerElectronMatcher) -#process.electronTriggerMatchHltElectrons.pathNames = cms.vstring(HLT_path_name) -#process.patTriggerMatchEmbedder = cms.Sequence(process.cleanLayer1ElectronsTriggerMatch) -#process.patTriggerSequence = cms.Sequence(process.patTrigger*process.patTriggerMatcher* -# process.patTriggerMatchEmbedder) -## -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.layer1RawCaloMETs = process.layer1METs.clone( #%% - metSource = cms.InputTag("met","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), - ) -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myDesiredMetCollection = 'layer1RawCaloMETs' -## modify the sequence of the MET creation: #%% -process.makeLayer1METs = cms.Sequence(process.patMETCorrections * process.layer1METs * - process.layer1RawCaloMETs) -## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) -process.allLayer1Objects = cms.Sequence(process.makeAllLayer1Electrons+process.makeAllLayer1Muons+process.makeLayer1METs) -process.selectedLayer1Objects = cms.Sequence(process.selectedLayer1Electrons+process.selectedLayer1Muons) -process.cleanLayer1Objects = cms.Sequence(process.cleanLayer1Muons*process.cleanLayer1Electrons) -process.countLayer1Objects = cms.Sequence(process.countLayer1Electrons+process.countLayer1Muons) - -process.patDefaultSequence = cms.Sequence(process.allLayer1Objects * process.selectedLayer1Objects * - process.cleanLayer1Objects*process.countLayer1Objects - ) - -## ################################################################################ -## -## the filter to select the candidates from the data samples -## -## WARNING: you may want to modify this item: T R I G G E R S E L E C T I O N -HLT_process_name = "HLT8E29" # options: HLT or HLT8E29 -# trigger path selection -HLT_path_name = "HLT_Ele10_LW_L1R" -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSingleElectronLWEt10PixelMatchFilter" -# -process.zeeFilter = cms.EDFilter('ZeeCandidateFilter', - # cuts - ETCut = cms.untracked.double(20.), - METCut = cms.untracked.double(0.), - # trigger - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.2), - # electrons and MET - electronCollectionTag = cms.untracked.InputTag("selectedLayer1Electrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myDesiredMetCollection,"","PAT") - ) -#################################################################################### -## -## the Z selection that you prefer -selection_a2 = cms.PSet ( - trackIso_EB = cms.untracked.double(7.2), - ecalIso_EB = cms.untracked.double(5.7), - hcalIso_EB = cms.untracked.double(8.1), - sihih_EB = cms.untracked.double(0.01), - dphi_EB = cms.untracked.double(1000.), - deta_EB = cms.untracked.double(0.0071), - hoe_EB = cms.untracked.double(1000), - - trackIso_EE = cms.untracked.double(5.1), - ecalIso_EE = cms.untracked.double(5.0), - hcalIso_EE = cms.untracked.double(3.4), - sihih_EE = cms.untracked.double(0.028), - dphi_EE = cms.untracked.double(1000.), - deta_EE = cms.untracked.double(0.0066), - hoe_EE = cms.untracked.double(1000.) - ) - -selection_inverse = cms.PSet ( - trackIso_EB_inv = cms.untracked.bool(True), - trackIso_EE_inv = cms.untracked.bool(True) - ) - -#################################################################################### -## -## and the plot creator -process.plotter = cms.EDAnalyzer('ZeePlots', - selection_a2, - zeeCollectionTag = cms.untracked.InputTag("zeeFilter","selectedZeeCandidates","PAT") - ) - - - - -process.p = cms.Path(process.patDefaultSequence +process.zeeFilter + process.plotter) - - diff --git a/ElectroWeakAnalysis/ZEE/test/pat_ZeeVBTF_ntuple_forData.py b/ElectroWeakAnalysis/ZEE/test/pat_ZeeVBTF_ntuple_forData.py deleted file mode 100644 index c15dd18e58316..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/pat_ZeeVBTF_ntuple_forData.py +++ /dev/null @@ -1,407 +0,0 @@ -## Configuration for the production of the ICHEP VBTF ntuple -## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -## MC, spring10 -## -## Stilianos Kesisoglou - Institute of Nuclear Physics -## NCSR Demokritos -## 25 June 2010 -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - -#process.MessageLogger = cms.Service( -# "MessageLogger", -# categories = cms.untracked.vstring('info', 'debug','cout') -# ) - - -process.load("FWCore.MessageService.MessageLogger_cfi") - -process.MessageLogger.cerr.threshold = cms.untracked.string("INFO") - -process.MessageLogger.cerr.FwkSummary = cms.untracked.PSet( - reportEvery = cms.untracked.int32(1000000), - limit = cms.untracked.int32(10000000) - ) - -process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( - reportEvery = cms.untracked.int32(100000), - limit = cms.untracked.int32(10000000) - ) - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) - ) - - - - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( -# SOME DATA FILE TO BE PUT HERE -# -# MC test (local) running on the OneElecPlusSC skim made from the Zee MC samples -# ------------------------------------------------------------------------------ -# 'rfio:/tmp/ikesisog/TestFiles/skimMC/OneElecPlusSC_1Files.root', -# 'rfio:/tmp/ikesisog/TestFiles/skimMC/OneElecPlusSC_2Files.root', -# 'rfio:/tmp/ikesisog/TestFiles/skimMC/OneElecPlusSC_3Files.root', -# -# MC test (local) running directly on the Zee MC samples -# ------------------------------------------------------ -# 'rfio:/tmp/ikesisog/TestFiles/dSetMC/Zee/8EA9211C-7476-DF11-BC31-00304867C136.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetMC/Zee/B0737652-7076-DF11-83F8-002618943831.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetMC/Zee/14B213B3-7576-DF11-8763-003048678FA6.root', - ) -) - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## Load additional processes -# -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -## global tags: -# -process.GlobalTag.globaltag = cms.string('GR_R_36X_V12A::All') # GLOBAL TAG FOR DATA - -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -#process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") - -process.load("PhysicsTools.PatAlgos.patSequences_cff") - -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") - -## -# - -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.caloMET = process.patMETs.clone( #%% - metSource = cms.InputTag("met","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.tcMET = process.patMETs.clone( #%% - metSource = cms.InputTag("tcMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.pfMET = process.patMETs.clone( #%% - metSource = cms.InputTag("pfMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) - -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myMetCollection = 'caloMET' -myPfMetCollection = 'pfMET' -myTcMetCollection = 'tcMET' - -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.caloMET*process.tcMET*process.pfMET) - - -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) - -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) - -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet() -process.patElectrons.addElectronID = cms.bool(True) - -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso = cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso = cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso = cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso = cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso = cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso = cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso = cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso = cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso = cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso = cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso = cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso = cms.InputTag("simpleEleId60cIso") -) - -## - -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -process.patElectrons.usePV = cms.bool(False) - -## - -process.load("ElectroWeakAnalysis.ZEE.simpleEleIdSequence_cff") - -# you have to tell the ID that it is data. These are set to False for MC -process.simpleEleId95relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId90relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId85relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId80relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId70relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId60relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId95cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId90cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId85cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId80cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId70cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId60cIso.dataMagneticFieldSetUp = cms.bool(True) -# -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) - -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) - -# process.makePatMuons may be needed depending on how you calculate the MET - -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) - -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) - - - -## the filter to select the candidates from the data samples - - -## WARNING: you may want to modify this item: -HLT_process_name = "HLT" # REDIGI for the Spring10 production traditional MC / HLT for the powheg samples or data - -# trigger path selection -HLT_path_name = "HLT_Photon10_L1R" #= "HLT_Ele15_LW_L1R" # - -# trigger filter name -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" - -HLT_path_name_extra0 = "HLT_Photon15_L1R" -HLT_filter_name_extra0 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSinglePhotonEt15HcalIsolFilter","",HLT_process_name) - -HLT_path_name_extra1 = "HLT_Photon15_Cleaned_L1R" -HLT_filter_name_extra1 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSinglePhotonEt15CleanedHcalIsolFilter","",HLT_process_name) - -HLT_path_name_extra2 = "HLT_Ele15_SW_L1R" -HLT_filter_name_extra2 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15PixelMatchFilter","",HLT_process_name) - - -rules_Filter = cms.PSet ( - ### the input collections needed: - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myMetCollection,"","PAT"), - pfMetCollectionTag = cms.untracked.InputTag(myPfMetCollection,"","PAT"), - tcMetCollectionTag = cms.untracked.InputTag(myTcMetCollection,"","PAT"), - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - ebRecHits = cms.untracked.InputTag("reducedEcalRecHitsEB"), - eeRecHits = cms.untracked.InputTag("reducedEcalRecHitsEE"), - PrimaryVerticesCollection = cms.untracked.InputTag("offlinePrimaryVertices"), - ### here the preselection is applied - # fiducial cuts: - BarrelMaxEta = cms.untracked.double(1.4442), - EndCapMinEta = cms.untracked.double(1.560), - EndCapMaxEta = cms.untracked.double(2.5), - # demand ecal driven electron: - useEcalDrivenElectrons = cms.untracked.bool(True), - # demand offline spike cleaning with the Swiss Cross criterion: - useSpikeRejection = cms.untracked.bool(True), - spikeCleaningSwissCrossCut = cms.untracked.double(0.95), - # demand geometrically matched to an HLT object with ET>15GeV - useTriggerInfo = cms.untracked.bool(True), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.1), - useHLTObjectETCut = cms.untracked.bool(True), - hltObjectETCut = cms.untracked.double(15.0), - useExtraTrigger = cms.untracked.bool(True), - vHltpathExtra = cms.untracked.vstring(HLT_path_name_extra0,HLT_path_name_extra1,HLT_path_name_extra2), - vHltpathFilterExtra = cms.untracked.VInputTag(HLT_filter_name_extra0, HLT_filter_name_extra1, HLT_filter_name_extra2), - # ET Cut in the SC - ETCut = cms.untracked.double(20.0), - METCut = cms.untracked.double(0.0), - # For DATA set it to True, for MC set it to False - dataMagneticFieldSetUp = cms.untracked.bool(True), - dcsTag = cms.untracked.InputTag("scalersRawToDigi") -) - - -rules_Filter_Elec0 = cms.PSet ( - # Other parameters of the code - leave them as they are - useValidFirstPXBHit0 = cms.untracked.bool(False), - useConversionRejection0 = cms.untracked.bool(False), - useExpectedMissingHits0 = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits0 = cms.untracked.int32(1), - # calculate some new cuts - calculateValidFirstPXBHit0 = cms.untracked.bool(True), - calculateConversionRejection0 = cms.untracked.bool(True), - calculateExpectedMissingHits0 = cms.untracked.bool(True) -) - -rules_Filter_Elec1 = cms.PSet ( - # Other parameters of the code - leave them as they are - useValidFirstPXBHit1 = cms.untracked.bool(False), - useConversionRejection1 = cms.untracked.bool(False), - useExpectedMissingHits1 = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits1 = cms.untracked.int32(1), - # calculate some new cuts - calculateValidFirstPXBHit1 = cms.untracked.bool(True), - calculateConversionRejection1 = cms.untracked.bool(True), - calculateExpectedMissingHits1 = cms.untracked.bool(True) -) - -rules_Filter_Elec2 = cms.PSet ( - # Other parameters of the code - leave them as they are - useValidFirstPXBHit2 = cms.untracked.bool(False), - useConversionRejection2 = cms.untracked.bool(False), - useExpectedMissingHits2 = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits2 = cms.untracked.int32(1), - # calculate some new cuts - calculateValidFirstPXBHit2 = cms.untracked.bool(True), - calculateConversionRejection2 = cms.untracked.bool(True), - calculateExpectedMissingHits2 = cms.untracked.bool(True) -) - - -process.zeeFilter = cms.EDFilter('ZeeCandidateFilter', - rules_Filter, - rules_Filter_Elec0, - rules_Filter_Elec1, - rules_Filter_Elec2 -) - - - -## the Z selection that you prefer -from ElectroWeakAnalysis.ZEE.simpleCutBasedSpring10SelectionBlocks_cfi import * - -selection_inverse = cms.PSet ( - deta_EB_inv = cms.untracked.bool(True), - deta_EE_inv = cms.untracked.bool(True) - ) - - -rules_Plotter = cms.PSet ( - # treat or not the elecrons with same criteria. if yes then rules_Plotter_Elec1/2 are neglected - useSameSelectionOnBothElectrons = cms.untracked.bool(True), - # some extra information on the ntuple production: - sihih0_EB = cms.untracked.double(1000.0), - dphi0_EB = cms.untracked.double(1000.0), - deta0_EB = cms.untracked.double(1000.0), - hoe0_EB = cms.untracked.double(1000.0), - sihih0_EE = cms.untracked.double(1000.0), - dphi0_EE = cms.untracked.double(1000.0), - deta0_EE = cms.untracked.double(1000.0), - hoe0_EE = cms.untracked.double(1000.0), - includeJetInformationInNtuples = cms.untracked.bool(True), - caloJetCollectionTag = cms.untracked.InputTag('ak5CaloJetsL2L3'), - pfJetCollectionTag = cms.untracked.InputTag('ak5PFJetsL2L3'), - DRJetFromElectron = cms.untracked.double(0.3), - # - zeeCollectionTag = cms.untracked.InputTag("zeeFilter","selectedZeeCandidates","PAT"), - ZEE_VBTFselectionFileName = cms.untracked.string("ZEE_VBTFselection.root"), - ZEE_VBTFpreseleFileName = cms.untracked.string("ZEE_VBTFpreselection.root"), - DatasetTag = cms.untracked.int32(100), - storeExtraInformation = cms.untracked.bool(True) -) - -rules_Plotter_Elec0 = cms.PSet ( - # The selection to be used here: - usePrecalcID0 = cms.untracked.bool(True), - usePrecalcIDType0 = cms.untracked.string('simpleEleId95relIso'), - usePrecalcIDSign0 = cms.untracked.string('='), - usePrecalcIDValue0 = cms.untracked.double(7), - ## preselection criteria are independent of useSameSelectionOnBothElectrons - # set them to False if you don't want them - useValidFirstPXBHit0 = cms.untracked.bool(False), - useConversionRejection0 = cms.untracked.bool(False), - useExpectedMissingHits0 = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits0 = cms.untracked.int32(1), - ## - calculateValidFirstPXBHit0 = cms.untracked.bool(False), - calculateConversionRejection0 = cms.untracked.bool(False), - calculateExpectedMissingHits0 = cms.untracked.bool(False) -) - -rules_Plotter_Elec1 = cms.PSet ( - # The selection to be used here: - usePrecalcID1 = cms.untracked.bool(True), - usePrecalcIDType1 = cms.untracked.string('simpleEleId95relIso'), - usePrecalcIDSign1 = cms.untracked.string('='), - usePrecalcIDValue1 = cms.untracked.double(7), - ## preselection criteria are independent of useSameSelectionOnBothElectrons - # set them to False if you don't want them - useValidFirstPXBHit1 = cms.untracked.bool(False), - useConversionRejection1 = cms.untracked.bool(False), - useExpectedMissingHits1 = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits1 = cms.untracked.int32(1), - ## - calculateValidFirstPXBHit1 = cms.untracked.bool(False), - calculateConversionRejection1 = cms.untracked.bool(False), - calculateExpectedMissingHits1 = cms.untracked.bool(False) -) - -rules_Plotter_Elec2 = cms.PSet ( - # The selection to be used here: - usePrecalcID2 = cms.untracked.bool(True), - usePrecalcIDType2 = cms.untracked.string('simpleEleId95relIso'), - usePrecalcIDSign2 = cms.untracked.string('='), - usePrecalcIDValue2 = cms.untracked.double(7), - ## preselection criteria are independent of useSameSelectionOnBothElectrons - # set them to False if you don't want them - useValidFirstPXBHit2 = cms.untracked.bool(False), - useConversionRejection2 = cms.untracked.bool(False), - useExpectedMissingHits2 = cms.untracked.bool(False), - maxNumberOfExpectedMissingHits2 = cms.untracked.int32(1), - ## - calculateValidFirstPXBHit2 = cms.untracked.bool(False), - calculateConversionRejection2 = cms.untracked.bool(False), - calculateExpectedMissingHits2 = cms.untracked.bool(False) -) - - -# we need to store jet information, hence we have to produce the jets: -process.load("JetMETCorrections.Configuration.DefaultJEC_cff") - -process.jetSequence = cms.Sequence( process.ak5CaloJetsL2L3 ) - -process.pfjetAK5Sequence = cms.Sequence( process.ak5PFJetsL2L3 ) - -process.ourJetSequence = cms.Sequence( process.jetSequence * process.pfjetAK5Sequence ) - - -process.plotter = cms.EDAnalyzer('ZeePlots', - rules_Plotter, - rules_Plotter_Elec0, - rules_Plotter_Elec1, - rules_Plotter_Elec2 -) - - -# if you run on data then you have to do misalignment corrections first!!! -# not to be used with MC!! - -process.load("RecoEgamma.EgammaTools.correctedElectronsProducer_cfi") - -process.p = cms.Path( process.gsfElectrons*process.ourJetSequence*process.patDefaultSequence*process.zeeFilter*process.plotter) -#process.p = cms.Path( process.ourJetSequence * process.patDefaultSequence +process.zeeFilter + process.plotter) - - diff --git a/ElectroWeakAnalysis/ZEE/test/pat_ZeeVBTF_ntuple_wiCertJSON_forData.py b/ElectroWeakAnalysis/ZEE/test/pat_ZeeVBTF_ntuple_wiCertJSON_forData.py deleted file mode 100755 index cb36784a341f7..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/pat_ZeeVBTF_ntuple_wiCertJSON_forData.py +++ /dev/null @@ -1,469 +0,0 @@ -# Initializations -# --------------- -# -# Get the base name of the Python script and use it to define input/output associated files -# -# N.B: Special variable __file__ is not available within cmsRun, and the following line fails: -# -# pyFile=(__file__).replace('.py','') -# -# As a result, the calling arguments must be scanned to locate the Python script. -# -import sys - -for inArg in sys.argv: - if inArg.find('.py') == -1: - continue - else: - pyBaseName=inArg.replace('.py','') - -# Define input/output associated files. -# -pyFile = "%s.py" % (pyBaseName) # Name of the Python script itself -lstFile = "%s.list" % (pyBaseName) # Name of the list file (contains a list of files to process) -resFile = "%s.results" % (pyBaseName) # Name of the results file (stdout and stderr messages) -outFile = "%s.root" % (pyBaseName) # Name of the output file (ROOT) - - -## Configuration for the production of the ICHEP VBTF ntuple -## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -## MC, spring10 -## -## Stilianos Kesisoglou - Institute of Nuclear Physics -## NCSR Demokritos -## 25 June 2010 -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - -#process.MessageLogger = cms.Service( -# "MessageLogger", -# categories = cms.untracked.vstring('info', 'debug','cout') -# ) - - -process.load("FWCore.MessageService.MessageLogger_cfi") - -process.MessageLogger.cerr.threshold = cms.untracked.string("INFO") - -process.MessageLogger.cerr.FwkSummary = cms.untracked.PSet( - reportEvery = cms.untracked.int32(1000000), - limit = cms.untracked.int32(10000000) - ) - -process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( - reportEvery = cms.untracked.int32(100000), - limit = cms.untracked.int32(10000000) - ) - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) - ) - -# -# # source -# process.source = cms.Source("PoolSource", -# fileNames = cms.untracked.vstring( -# # SOME DATA FILE TO BE PUT HERE -# # -# # DATA test (local) running on the OneElecPlusSC skim made from the EG DATA samples -# # ---------------------------------------------------------------------------------- -# # 'rfio:/tmp/ikesisog/TestFiles/skimDATA/Zee/00000000-0000-0000-0000-000000000000_woFakeJSON.root', -# # 'rfio:/tmp/ikesisog/TestFiles/skimDATA/Zee/00000000-0000-0000-0000-000000000000_wiFakeJSON.root', -# # -# # DATA test (local) running directly on the EG DATA samples -# # ---------------------------------------------------------- -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/6AD8C6D3-2C92-DF11-AFDE-0030487C90C2.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/34BD6E1C-3892-DF11-BD3F-001D09F27067.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/04D0FF1D-2792-DF11-8B6C-003048F11942.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/74CF44CB-1592-DF11-989E-001617C3B77C.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/66072495-1A92-DF11-9461-0030487BC68E.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/5E06C91D-1E92-DF11-9591-0016177CA778.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/48B8741C-1E92-DF11-ADAD-001617C3B6DC.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/1EC74696-1A92-DF11-B9BB-0030487CD13A.root', -# ) -# ) -# - - -# source - Use an input list to bypass the 255 file limit -import FWCore.Utilities.FileUtils as FileUtils - -filelist = FileUtils.loadListFromFile(lstFile) - -process.source = cms.Source('PoolSource', - fileNames = cms.untracked.vstring(*filelist) - ) - - - -# using locally provided JSON -import PhysicsTools.PythonAnalysis.LumiList as LumiList -import FWCore.ParameterSet.Types as CfgTypes -myLumis = LumiList.LumiList(filename = 'Cert_136033-149442_7TeV_Nov4ReReco_Collisions10_JSON.json').getCMSSWString().split(',') -process.source.lumisToProcess = CfgTypes.untracked(CfgTypes.VLuminosityBlockRange()) -process.source.lumisToProcess.extend(myLumis) - - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## Load additional processes -# -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -## global tags: -# -process.GlobalTag.globaltag = cms.string('GR_R_39X_V5::All') # GLOBAL TAG FOR DATA - -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -#process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") - -process.load("PhysicsTools.PatAlgos.patSequences_cff") - -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") - -## -# - -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.caloMET = process.patMETs.clone( #%% - metSource = cms.InputTag("met","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.tcMET = process.patMETs.clone( #%% - metSource = cms.InputTag("tcMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.pfMET = process.patMETs.clone( #%% - metSource = cms.InputTag("pfMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) - -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myMetCollection = 'caloMET' -myPfMetCollection = 'pfMET' -myTcMetCollection = 'tcMET' - -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.caloMET*process.tcMET*process.pfMET) - - -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) - -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) - -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet() -process.patElectrons.addElectronID = cms.bool(True) - -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso = cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso = cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso = cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso = cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso = cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso = cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso = cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso = cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso = cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso = cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso = cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso = cms.InputTag("simpleEleId60cIso") -) - -## - -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -process.patElectrons.usePV = cms.bool(False) - -## - -process.load("ElectroWeakAnalysis.ZEE.simpleEleIdSequence_cff") - -# you have to tell the ID that it is data. These are set to False for MC -process.simpleEleId95relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId90relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId85relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId80relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId70relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId60relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId95cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId90cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId85cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId80cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId70cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId60cIso.dataMagneticFieldSetUp = cms.bool(True) -# -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) - -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) - -# process.makePatMuons may be needed depending on how you calculate the MET - -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) - -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) - -## WARNING: you may want to modify this item: -HLT_process_name = "HLT" # REDIGI for the production traditional MC / HLT for the powheg samples or data - -# Trigger Path(s) -HLT_path_name = "HLT_Photon10_L1R" - -# Label of the last Trigger Filter in the Trigger Path -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" - -HLT_path_name_extra0 = "HLT_Photon15_Cleaned_L1R" -HLT_filter_name_extra0 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSinglePhotonEt15CleanedHcalIsolFilter","",HLT_process_name) - -HLT_path_name_extra1 = "HLT_Ele15_SW_CaloEleId_L1R" -HLT_filter_name_extra1 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15CaloEleIdPixelMatchFilter","",HLT_process_name) - -HLT_path_name_extra2 = "HLT_Ele17_SW_CaloEleId_L1R" -HLT_filter_name_extra2 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt17CaloEleIdPixelMatchFilter","",HLT_process_name) - -HLT_path_name_extra3 = "HLT_Ele17_SW_TightEleId_L1R" -HLT_filter_name_extra3 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt17TightEleIdDphiFilter","",HLT_process_name) - -# HLT_path_name_extra4 = "HLT_Ele17_SW_TighterEleIdIsol_L1R_v2" -# HLT_filter_name_extra4 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt17TighterEleIdIsolTrackIsolFilter","",HLT_process_name) - -HLT_path_name_extra5 = "HLT_Ele22_SW_TighterCaloIdIsol_L1R_v1" -HLT_filter_name_extra5 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt22TighterCaloIdIsolTrackIsolFilter","",HLT_process_name) - -HLT_path_name_extra6 = "HLT_Ele22_SW_TighterCaloIdIsol_L1R_v2" -HLT_filter_name_extra6 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt22TighterCaloIdIsolTrackIsolFilter","",HLT_process_name) - - -rules_Filter = cms.PSet ( - ### the input collections needed: - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myMetCollection,"","PAT"), - pfMetCollectionTag = cms.untracked.InputTag(myPfMetCollection,"","PAT"), - tcMetCollectionTag = cms.untracked.InputTag(myTcMetCollection,"","PAT"), - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - ebRecHits = cms.untracked.InputTag("reducedEcalRecHitsEB"), - eeRecHits = cms.untracked.InputTag("reducedEcalRecHitsEE"), - PrimaryVerticesCollection = cms.untracked.InputTag("offlinePrimaryVertices"), - ### here the preselection is applied - # fiducial cuts: - BarrelMaxEta = cms.untracked.double(1.4442), - EndCapMinEta = cms.untracked.double(1.5660), - EndCapMaxEta = cms.untracked.double(2.5000), - # demand ecal driven electron: - useEcalDrivenElectrons = cms.untracked.bool(True), - # demand offline spike cleaning with the Swiss Cross criterion: - useSpikeRejection = cms.untracked.bool(False), - spikeCleaningSwissCrossCut = cms.untracked.double(0.95), - # demand geometrically matched to an HLT object with ET>15GeV - useTriggerInfo = cms.untracked.bool(True), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.1), - useHLTObjectETCut = cms.untracked.bool(True), - hltObjectETCut = cms.untracked.double(15.0), - useExtraTrigger = cms.untracked.bool(True), -# vHltpathExtra = cms.untracked.vstring(HLT_path_name_extra0,HLT_path_name_extra1,HLT_path_name_extra2,HLT_path_name_extra3,HLT_path_name_extra4,HLT_path_name_extra5), -# vHltpathFilterExtra = cms.untracked.VInputTag(HLT_filter_name_extra0,HLT_filter_name_extra1,HLT_filter_name_extra2,HLT_filter_name_extra3,HLT_filter_name_extra4,HLT_filter_name_extra5), - vHltpathExtra = cms.untracked.vstring(HLT_path_name_extra0,HLT_path_name_extra1,HLT_path_name_extra2,HLT_path_name_extra3,HLT_path_name_extra5,HLT_path_name_extra6), - vHltpathFilterExtra = cms.untracked.VInputTag(HLT_filter_name_extra0,HLT_filter_name_extra1,HLT_filter_name_extra2,HLT_filter_name_extra3,HLT_filter_name_extra5,HLT_filter_name_extra6), - - # ET Cut in the SC - ETCut = cms.untracked.double(25.0), - METCut = cms.untracked.double(0.0), - # For DATA set it to True, for MC set it to False - dataMagneticFieldSetUp = cms.untracked.bool(True), - dcsTag = cms.untracked.InputTag("scalersRawToDigi") -) - - -rules_Filter_Elec0 = cms.PSet ( - # Other parameters of the code - leave them as they are - useValidFirstPXBHit0 = cms.untracked.bool(False), - useConversionRejection0 = cms.untracked.bool(False), - useExpectedMissingHits0 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits0 = cms.untracked.int32(0), - # calculate some new cuts - calculateValidFirstPXBHit0 = cms.untracked.bool(False), - calculateConversionRejection0 = cms.untracked.bool(False), - calculateExpectedMissingHits0 = cms.untracked.bool(False) -) - -rules_Filter_Elec1 = cms.PSet ( - # Other parameters of the code - leave them as they are - useValidFirstPXBHit1 = cms.untracked.bool(False), - useConversionRejection1 = cms.untracked.bool(False), - useExpectedMissingHits1 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits1 = cms.untracked.int32(0), - # calculate some new cuts - calculateValidFirstPXBHit1 = cms.untracked.bool(False), - calculateConversionRejection1 = cms.untracked.bool(False), - calculateExpectedMissingHits1 = cms.untracked.bool(False) -) - -rules_Filter_Elec2 = cms.PSet ( - # Other parameters of the code - leave them as they are - useValidFirstPXBHit2 = cms.untracked.bool(False), - useConversionRejection2 = cms.untracked.bool(False), - useExpectedMissingHits2 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits2 = cms.untracked.int32(0), - # calculate some new cuts - calculateValidFirstPXBHit2 = cms.untracked.bool(False), - calculateConversionRejection2 = cms.untracked.bool(False), - calculateExpectedMissingHits2 = cms.untracked.bool(False) -) - - -process.zeeFilter = cms.EDFilter('ZeeCandidateFilter', - rules_Filter, - rules_Filter_Elec0, - rules_Filter_Elec1, - rules_Filter_Elec2 -) - - - -## the Z selection that you prefer -from ElectroWeakAnalysis.ZEE.simpleCutBasedSpring10SelectionBlocks_cfi import * - -selection_inverse = cms.PSet ( - deta_EB_inv = cms.untracked.bool(True), - deta_EE_inv = cms.untracked.bool(True) - ) - - -rules_Plotter = cms.PSet ( - # treat or not the elecrons with same criteria. if yes then rules_Plotter_Elec1/2 are neglected - useSameSelectionOnBothElectrons = cms.untracked.bool(True), - # some extra information on the ntuple production: - sihih0_EB = cms.untracked.double(1000.0), - dphi0_EB = cms.untracked.double(1000.0), - deta0_EB = cms.untracked.double(1000.0), - hoe0_EB = cms.untracked.double(1000.0), - sihih0_EE = cms.untracked.double(1000.0), - dphi0_EE = cms.untracked.double(1000.0), - deta0_EE = cms.untracked.double(1000.0), - hoe0_EE = cms.untracked.double(1000.0), - includeJetInformationInNtuples = cms.untracked.bool(True), - caloJetCollectionTag = cms.untracked.InputTag('ak5CaloJetsL2L3'), - pfJetCollectionTag = cms.untracked.InputTag('ak5PFJetsL2L3'), - DRJetFromElectron = cms.untracked.double(0.3), - # - zeeCollectionTag = cms.untracked.InputTag("zeeFilter","selectedZeeCandidates","PAT"), - ZEE_VBTFselectionFileName = cms.untracked.string("ZEE_VBTFselection.root"), - ZEE_VBTFpreseleFileName = cms.untracked.string("ZEE_VBTFpreselection.root"), - DatasetTag = cms.untracked.int32(100), - storeExtraInformation = cms.untracked.bool(True) -) - -rules_Plotter_Elec0 = cms.PSet ( - # The selection to be used here: - usePrecalcID0 = cms.untracked.bool(True), - usePrecalcIDType0 = cms.untracked.string('simpleEleId80relIso'), - usePrecalcIDSign0 = cms.untracked.string('='), - usePrecalcIDValue0 = cms.untracked.double(7), - ## preselection criteria are independent of useSameSelectionOnBothElectrons - # set them to False if you don't want them - useValidFirstPXBHit0 = cms.untracked.bool(False), - useConversionRejection0 = cms.untracked.bool(False), - useExpectedMissingHits0 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits0 = cms.untracked.int32(0), - ## - calculateValidFirstPXBHit0 = cms.untracked.bool(False), - calculateConversionRejection0 = cms.untracked.bool(False), - calculateExpectedMissingHits0 = cms.untracked.bool(False) -) - -rules_Plotter_Elec1 = cms.PSet ( - # The selection to be used here: - usePrecalcID1 = cms.untracked.bool(True), - usePrecalcIDType1 = cms.untracked.string('simpleEleId80relIso'), - usePrecalcIDSign1 = cms.untracked.string('='), - usePrecalcIDValue1 = cms.untracked.double(7), - ## preselection criteria are independent of useSameSelectionOnBothElectrons - # set them to False if you don't want them - useValidFirstPXBHit1 = cms.untracked.bool(False), - useConversionRejection1 = cms.untracked.bool(False), - useExpectedMissingHits1 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits1 = cms.untracked.int32(0), - ## - calculateValidFirstPXBHit1 = cms.untracked.bool(False), - calculateConversionRejection1 = cms.untracked.bool(False), - calculateExpectedMissingHits1 = cms.untracked.bool(False) -) - -rules_Plotter_Elec2 = cms.PSet ( - # The selection to be used here: - usePrecalcID2 = cms.untracked.bool(True), - usePrecalcIDType2 = cms.untracked.string('simpleEleId80relIso'), - usePrecalcIDSign2 = cms.untracked.string('='), - usePrecalcIDValue2 = cms.untracked.double(7), - ## preselection criteria are independent of useSameSelectionOnBothElectrons - # set them to False if you don't want them - useValidFirstPXBHit2 = cms.untracked.bool(False), - useConversionRejection2 = cms.untracked.bool(False), - useExpectedMissingHits2 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits2 = cms.untracked.int32(0), - ## - calculateValidFirstPXBHit2 = cms.untracked.bool(False), - calculateConversionRejection2 = cms.untracked.bool(False), - calculateExpectedMissingHits2 = cms.untracked.bool(False) -) - - -# we need to store jet information, hence we have to produce the jets: -process.load("JetMETCorrections.Configuration.DefaultJEC_cff") - -process.jetSequence = cms.Sequence( process.ak5CaloJetsL2L3 ) - -process.pfjetAK5Sequence = cms.Sequence( process.ak5PFJetsL2L3 ) - -process.ourJetSequence = cms.Sequence( process.jetSequence * process.pfjetAK5Sequence ) - - -process.plotter = cms.EDAnalyzer('ZeePlots', - rules_Plotter, - rules_Plotter_Elec0, - rules_Plotter_Elec1, - rules_Plotter_Elec2 -) - - -# For DATA, 361p4 electrons need fixing first (misalignment corrections) *NOT* be used with MC -#process.load("RecoEgamma.EgammaTools.correctedElectronsProducer_cfi") -#process.p = cms.Path( process.gsfElectrons*process.ourJetSequence*process.patDefaultSequence*process.zeeFilter*process.plotter) - -# For DATA, 397 electrons are fixed (misalignment corrections included) -process.p = cms.Path( process.ourJetSequence*process.patDefaultSequence*process.zeeFilter*process.plotter) - -# For MonteCarlo, -#process.p = cms.Path( process.ourJetSequence * process.patDefaultSequence +process.zeeFilter + process.plotter) - - diff --git a/ElectroWeakAnalysis/ZEE/test/pat_ZeeVBTF_ntuple_woCertJSON_forData.py b/ElectroWeakAnalysis/ZEE/test/pat_ZeeVBTF_ntuple_woCertJSON_forData.py deleted file mode 100755 index 7fa1939e1eb0d..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/pat_ZeeVBTF_ntuple_woCertJSON_forData.py +++ /dev/null @@ -1,469 +0,0 @@ -# Initializations -# --------------- -# -# Get the base name of the Python script and use it to define input/output associated files -# -# N.B: Special variable __file__ is not available within cmsRun, and the following line fails: -# -# pyFile=(__file__).replace('.py','') -# -# As a result, the calling arguments must be scanned to locate the Python script. -# -import sys - -for inArg in sys.argv: - if inArg.find('.py') == -1: - continue - else: - pyBaseName=inArg.replace('.py','') - -# Define input/output associated files. -# -pyFile = "%s.py" % (pyBaseName) # Name of the Python script itself -lstFile = "%s.list" % (pyBaseName) # Name of the list file (contains a list of files to process) -resFile = "%s.results" % (pyBaseName) # Name of the results file (stdout and stderr messages) -outFile = "%s.root" % (pyBaseName) # Name of the output file (ROOT) - - -## Configuration for the production of the ICHEP VBTF ntuple -## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -## MC, spring10 -## -## Stilianos Kesisoglou - Institute of Nuclear Physics -## NCSR Demokritos -## 25 June 2010 -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - -#process.MessageLogger = cms.Service( -# "MessageLogger", -# categories = cms.untracked.vstring('info', 'debug','cout') -# ) - - -process.load("FWCore.MessageService.MessageLogger_cfi") - -process.MessageLogger.cerr.threshold = cms.untracked.string("INFO") - -process.MessageLogger.cerr.FwkSummary = cms.untracked.PSet( - reportEvery = cms.untracked.int32(1000000), - limit = cms.untracked.int32(10000000) - ) - -process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( - reportEvery = cms.untracked.int32(100000), - limit = cms.untracked.int32(10000000) - ) - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) - ) - -# -# # source -# process.source = cms.Source("PoolSource", -# fileNames = cms.untracked.vstring( -# # SOME DATA FILE TO BE PUT HERE -# # -# # DATA test (local) running on the OneElecPlusSC skim made from the EG DATA samples -# # ---------------------------------------------------------------------------------- -# # 'rfio:/tmp/ikesisog/TestFiles/skimDATA/Zee/00000000-0000-0000-0000-000000000000_woFakeJSON.root', -# # 'rfio:/tmp/ikesisog/TestFiles/skimDATA/Zee/00000000-0000-0000-0000-000000000000_wiFakeJSON.root', -# # -# # DATA test (local) running directly on the EG DATA samples -# # ---------------------------------------------------------- -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/6AD8C6D3-2C92-DF11-AFDE-0030487C90C2.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/34BD6E1C-3892-DF11-BD3F-001D09F27067.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/04D0FF1D-2792-DF11-8B6C-003048F11942.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/74CF44CB-1592-DF11-989E-001617C3B77C.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/66072495-1A92-DF11-9461-0030487BC68E.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/5E06C91D-1E92-DF11-9591-0016177CA778.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/48B8741C-1E92-DF11-ADAD-001617C3B6DC.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetDATA/Zee/1EC74696-1A92-DF11-B9BB-0030487CD13A.root', -# ) -# ) -# - - -# source - Use an input list to bypass the 255 file limit -import FWCore.Utilities.FileUtils as FileUtils - -filelist = FileUtils.loadListFromFile(lstFile) - -process.source = cms.Source('PoolSource', - fileNames = cms.untracked.vstring(*filelist) - ) - - -# -# # using locally provided JSON -# import PhysicsTools.PythonAnalysis.LumiList as LumiList -# import FWCore.ParameterSet.Types as CfgTypes -# myLumis = LumiList.LumiList(filename = 'Cert_132440-149442_7TeV_StreamExpress_Collisions10_JSON_v2.json').getCMSSWString().split(',') -# process.source.lumisToProcess = CfgTypes.untracked(CfgTypes.VLuminosityBlockRange()) -# process.source.lumisToProcess.extend(myLumis) -# - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## Load additional processes -# -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -## global tags: -# -process.GlobalTag.globaltag = cms.string('GR_R_39X_V5::All') # GLOBAL TAG FOR DATA - -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -#process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") - -process.load("PhysicsTools.PatAlgos.patSequences_cff") - -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") - -## -# - -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.caloMET = process.patMETs.clone( #%% - metSource = cms.InputTag("met","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.tcMET = process.patMETs.clone( #%% - metSource = cms.InputTag("tcMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.pfMET = process.patMETs.clone( #%% - metSource = cms.InputTag("pfMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) - -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myMetCollection = 'caloMET' -myPfMetCollection = 'pfMET' -myTcMetCollection = 'tcMET' - -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.caloMET*process.tcMET*process.pfMET) - - -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) - -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) - -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet() -process.patElectrons.addElectronID = cms.bool(True) - -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso = cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso = cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso = cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso = cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso = cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso = cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso = cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso = cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso = cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso = cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso = cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso = cms.InputTag("simpleEleId60cIso") -) - -## - -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -process.patElectrons.usePV = cms.bool(False) - -## - -process.load("ElectroWeakAnalysis.ZEE.simpleEleIdSequence_cff") - -# you have to tell the ID that it is data. These are set to False for MC -process.simpleEleId95relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId90relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId85relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId80relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId70relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId60relIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId95cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId90cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId85cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId80cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId70cIso.dataMagneticFieldSetUp = cms.bool(True) -process.simpleEleId60cIso.dataMagneticFieldSetUp = cms.bool(True) -# -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) - -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) - -# process.makePatMuons may be needed depending on how you calculate the MET - -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) - -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) - -## WARNING: you may want to modify this item: -HLT_process_name = "HLT" # REDIGI for the production traditional MC / HLT for the powheg samples or data - -# Trigger Path(s) -HLT_path_name = "HLT_Photon10_L1R" - -# Label of the last Trigger Filter in the Trigger Path -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" - -HLT_path_name_extra0 = "HLT_Photon15_Cleaned_L1R" -HLT_filter_name_extra0 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSinglePhotonEt15CleanedHcalIsolFilter","",HLT_process_name) - -HLT_path_name_extra1 = "HLT_Ele15_SW_CaloEleId_L1R" -HLT_filter_name_extra1 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15CaloEleIdPixelMatchFilter","",HLT_process_name) - -HLT_path_name_extra2 = "HLT_Ele17_SW_CaloEleId_L1R" -HLT_filter_name_extra2 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt17CaloEleIdPixelMatchFilter","",HLT_process_name) - -HLT_path_name_extra3 = "HLT_Ele17_SW_TightEleId_L1R" -HLT_filter_name_extra3 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt17TightEleIdDphiFilter","",HLT_process_name) - -# HLT_path_name_extra4 = "HLT_Ele17_SW_TighterEleIdIsol_L1R_v2" -# HLT_filter_name_extra4 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt17TighterEleIdIsolTrackIsolFilter","",HLT_process_name) - -HLT_path_name_extra5 = "HLT_Ele22_SW_TighterCaloIdIsol_L1R_v1" -HLT_filter_name_extra5 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt22TighterCaloIdIsolTrackIsolFilter","",HLT_process_name) - -HLT_path_name_extra6 = "HLT_Ele22_SW_TighterCaloIdIsol_L1R_v2" -HLT_filter_name_extra6 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt22TighterCaloIdIsolTrackIsolFilter","",HLT_process_name) - - -rules_Filter = cms.PSet ( - ### the input collections needed: - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myMetCollection,"","PAT"), - pfMetCollectionTag = cms.untracked.InputTag(myPfMetCollection,"","PAT"), - tcMetCollectionTag = cms.untracked.InputTag(myTcMetCollection,"","PAT"), - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - ebRecHits = cms.untracked.InputTag("reducedEcalRecHitsEB"), - eeRecHits = cms.untracked.InputTag("reducedEcalRecHitsEE"), - PrimaryVerticesCollection = cms.untracked.InputTag("offlinePrimaryVertices"), - ### here the preselection is applied - # fiducial cuts: - BarrelMaxEta = cms.untracked.double(1.4442), - EndCapMinEta = cms.untracked.double(1.5660), - EndCapMaxEta = cms.untracked.double(2.5000), - # demand ecal driven electron: - useEcalDrivenElectrons = cms.untracked.bool(True), - # demand offline spike cleaning with the Swiss Cross criterion: - useSpikeRejection = cms.untracked.bool(False), - spikeCleaningSwissCrossCut = cms.untracked.double(0.95), - # demand geometrically matched to an HLT object with ET>15GeV - useTriggerInfo = cms.untracked.bool(True), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.1), - useHLTObjectETCut = cms.untracked.bool(True), - hltObjectETCut = cms.untracked.double(15.0), - useExtraTrigger = cms.untracked.bool(True), -# vHltpathExtra = cms.untracked.vstring(HLT_path_name_extra0,HLT_path_name_extra1,HLT_path_name_extra2,HLT_path_name_extra3,HLT_path_name_extra4,HLT_path_name_extra5), -# vHltpathFilterExtra = cms.untracked.VInputTag(HLT_filter_name_extra0,HLT_filter_name_extra1,HLT_filter_name_extra2,HLT_filter_name_extra3,HLT_filter_name_extra4,HLT_filter_name_extra5), - vHltpathExtra = cms.untracked.vstring(HLT_path_name_extra0,HLT_path_name_extra1,HLT_path_name_extra2,HLT_path_name_extra3,HLT_path_name_extra5,HLT_path_name_extra6), - vHltpathFilterExtra = cms.untracked.VInputTag(HLT_filter_name_extra0,HLT_filter_name_extra1,HLT_filter_name_extra2,HLT_filter_name_extra3,HLT_filter_name_extra5,HLT_filter_name_extra6), - - # ET Cut in the SC - ETCut = cms.untracked.double(25.0), - METCut = cms.untracked.double(0.0), - # For DATA set it to True, for MC set it to False - dataMagneticFieldSetUp = cms.untracked.bool(True), - dcsTag = cms.untracked.InputTag("scalersRawToDigi") -) - - -rules_Filter_Elec0 = cms.PSet ( - # Other parameters of the code - leave them as they are - useValidFirstPXBHit0 = cms.untracked.bool(False), - useConversionRejection0 = cms.untracked.bool(False), - useExpectedMissingHits0 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits0 = cms.untracked.int32(0), - # calculate some new cuts - calculateValidFirstPXBHit0 = cms.untracked.bool(False), - calculateConversionRejection0 = cms.untracked.bool(False), - calculateExpectedMissingHits0 = cms.untracked.bool(False) -) - -rules_Filter_Elec1 = cms.PSet ( - # Other parameters of the code - leave them as they are - useValidFirstPXBHit1 = cms.untracked.bool(False), - useConversionRejection1 = cms.untracked.bool(False), - useExpectedMissingHits1 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits1 = cms.untracked.int32(0), - # calculate some new cuts - calculateValidFirstPXBHit1 = cms.untracked.bool(False), - calculateConversionRejection1 = cms.untracked.bool(False), - calculateExpectedMissingHits1 = cms.untracked.bool(False) -) - -rules_Filter_Elec2 = cms.PSet ( - # Other parameters of the code - leave them as they are - useValidFirstPXBHit2 = cms.untracked.bool(False), - useConversionRejection2 = cms.untracked.bool(False), - useExpectedMissingHits2 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits2 = cms.untracked.int32(0), - # calculate some new cuts - calculateValidFirstPXBHit2 = cms.untracked.bool(False), - calculateConversionRejection2 = cms.untracked.bool(False), - calculateExpectedMissingHits2 = cms.untracked.bool(False) -) - - -process.zeeFilter = cms.EDFilter('ZeeCandidateFilter', - rules_Filter, - rules_Filter_Elec0, - rules_Filter_Elec1, - rules_Filter_Elec2 -) - - - -## the Z selection that you prefer -from ElectroWeakAnalysis.ZEE.simpleCutBasedSpring10SelectionBlocks_cfi import * - -selection_inverse = cms.PSet ( - deta_EB_inv = cms.untracked.bool(True), - deta_EE_inv = cms.untracked.bool(True) - ) - - -rules_Plotter = cms.PSet ( - # treat or not the elecrons with same criteria. if yes then rules_Plotter_Elec1/2 are neglected - useSameSelectionOnBothElectrons = cms.untracked.bool(True), - # some extra information on the ntuple production: - sihih0_EB = cms.untracked.double(1000.0), - dphi0_EB = cms.untracked.double(1000.0), - deta0_EB = cms.untracked.double(1000.0), - hoe0_EB = cms.untracked.double(1000.0), - sihih0_EE = cms.untracked.double(1000.0), - dphi0_EE = cms.untracked.double(1000.0), - deta0_EE = cms.untracked.double(1000.0), - hoe0_EE = cms.untracked.double(1000.0), - includeJetInformationInNtuples = cms.untracked.bool(True), - caloJetCollectionTag = cms.untracked.InputTag('ak5CaloJetsL2L3'), - pfJetCollectionTag = cms.untracked.InputTag('ak5PFJetsL2L3'), - DRJetFromElectron = cms.untracked.double(0.3), - # - zeeCollectionTag = cms.untracked.InputTag("zeeFilter","selectedZeeCandidates","PAT"), - ZEE_VBTFselectionFileName = cms.untracked.string("ZEE_VBTFselection.root"), - ZEE_VBTFpreseleFileName = cms.untracked.string("ZEE_VBTFpreselection.root"), - DatasetTag = cms.untracked.int32(100), - storeExtraInformation = cms.untracked.bool(True) -) - -rules_Plotter_Elec0 = cms.PSet ( - # The selection to be used here: - usePrecalcID0 = cms.untracked.bool(True), - usePrecalcIDType0 = cms.untracked.string('simpleEleId80relIso'), - usePrecalcIDSign0 = cms.untracked.string('='), - usePrecalcIDValue0 = cms.untracked.double(7), - ## preselection criteria are independent of useSameSelectionOnBothElectrons - # set them to False if you don't want them - useValidFirstPXBHit0 = cms.untracked.bool(False), - useConversionRejection0 = cms.untracked.bool(False), - useExpectedMissingHits0 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits0 = cms.untracked.int32(0), - ## - calculateValidFirstPXBHit0 = cms.untracked.bool(False), - calculateConversionRejection0 = cms.untracked.bool(False), - calculateExpectedMissingHits0 = cms.untracked.bool(False) -) - -rules_Plotter_Elec1 = cms.PSet ( - # The selection to be used here: - usePrecalcID1 = cms.untracked.bool(True), - usePrecalcIDType1 = cms.untracked.string('simpleEleId80relIso'), - usePrecalcIDSign1 = cms.untracked.string('='), - usePrecalcIDValue1 = cms.untracked.double(7), - ## preselection criteria are independent of useSameSelectionOnBothElectrons - # set them to False if you don't want them - useValidFirstPXBHit1 = cms.untracked.bool(False), - useConversionRejection1 = cms.untracked.bool(False), - useExpectedMissingHits1 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits1 = cms.untracked.int32(0), - ## - calculateValidFirstPXBHit1 = cms.untracked.bool(False), - calculateConversionRejection1 = cms.untracked.bool(False), - calculateExpectedMissingHits1 = cms.untracked.bool(False) -) - -rules_Plotter_Elec2 = cms.PSet ( - # The selection to be used here: - usePrecalcID2 = cms.untracked.bool(True), - usePrecalcIDType2 = cms.untracked.string('simpleEleId80relIso'), - usePrecalcIDSign2 = cms.untracked.string('='), - usePrecalcIDValue2 = cms.untracked.double(7), - ## preselection criteria are independent of useSameSelectionOnBothElectrons - # set them to False if you don't want them - useValidFirstPXBHit2 = cms.untracked.bool(False), - useConversionRejection2 = cms.untracked.bool(False), - useExpectedMissingHits2 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits2 = cms.untracked.int32(0), - ## - calculateValidFirstPXBHit2 = cms.untracked.bool(False), - calculateConversionRejection2 = cms.untracked.bool(False), - calculateExpectedMissingHits2 = cms.untracked.bool(False) -) - - -# we need to store jet information, hence we have to produce the jets: -process.load("JetMETCorrections.Configuration.DefaultJEC_cff") - -process.jetSequence = cms.Sequence( process.ak5CaloJetsL2L3 ) - -process.pfjetAK5Sequence = cms.Sequence( process.ak5PFJetsL2L3 ) - -process.ourJetSequence = cms.Sequence( process.jetSequence * process.pfjetAK5Sequence ) - - -process.plotter = cms.EDAnalyzer('ZeePlots', - rules_Plotter, - rules_Plotter_Elec0, - rules_Plotter_Elec1, - rules_Plotter_Elec2 -) - - -# For DATA, 361p4 electrons need fixing first (misalignment corrections) *NOT* be used with MC -#process.load("RecoEgamma.EgammaTools.correctedElectronsProducer_cfi") -#process.p = cms.Path( process.gsfElectrons*process.ourJetSequence*process.patDefaultSequence*process.zeeFilter*process.plotter) - -# For DATA, 397 electrons are fixed (misalignment corrections included) -process.p = cms.Path( process.ourJetSequence*process.patDefaultSequence*process.zeeFilter*process.plotter) - -# For MonteCarlo, -#process.p = cms.Path( process.ourJetSequence * process.patDefaultSequence +process.zeeFilter + process.plotter) - - diff --git a/ElectroWeakAnalysis/ZEE/test/pat_ZeeVBTF_ntuple_woCertJSON_for__MC.py b/ElectroWeakAnalysis/ZEE/test/pat_ZeeVBTF_ntuple_woCertJSON_for__MC.py deleted file mode 100755 index b4619679dbbb3..0000000000000 --- a/ElectroWeakAnalysis/ZEE/test/pat_ZeeVBTF_ntuple_woCertJSON_for__MC.py +++ /dev/null @@ -1,465 +0,0 @@ -# Initializations -# --------------- -# -# Get the base name of the Python script and use it to define input/output associated files -# -# N.B: Special variable __file__ is not available within cmsRun, and the following line fails: -# -# pyFile=(__file__).replace('.py','') -# -# As a result, the calling arguments must be scanned to locate the Python script. -# -import sys - -for inArg in sys.argv: - if inArg.find('.py') == -1: - continue - else: - pyBaseName=inArg.replace('.py','') - -# Define input/output associated files. -# -pyFile = "%s.py" % (pyBaseName) # Name of the Python script itself -lstFile = "%s.list" % (pyBaseName) # Name of the list file (contains a list of files to process) -resFile = "%s.results" % (pyBaseName) # Name of the results file (stdout and stderr messages) -outFile = "%s.root" % (pyBaseName) # Name of the output file (ROOT) - - -## Configuration for the production of the ICHEP VBTF ntuple -## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -## MC, spring10 -## -## Stilianos Kesisoglou - Institute of Nuclear Physics -## NCSR Demokritos -## 25 June 2010 -import FWCore.ParameterSet.Config as cms - -process = cms.Process("PAT") - - - -process.options = cms.untracked.PSet( - Rethrow = cms.untracked.vstring('ProductNotFound') -) - -#process.MessageLogger = cms.Service( -# "MessageLogger", -# categories = cms.untracked.vstring('info', 'debug','cout') -# ) - - -process.load("FWCore.MessageService.MessageLogger_cfi") - -process.MessageLogger.cerr.threshold = cms.untracked.string("INFO") - -process.MessageLogger.cerr.FwkSummary = cms.untracked.PSet( - reportEvery = cms.untracked.int32(1000000), - limit = cms.untracked.int32(10000000) - ) - -process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( - reportEvery = cms.untracked.int32(100000), - limit = cms.untracked.int32(10000000) - ) - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) - ) - -# -# # source -# process.source = cms.Source("PoolSource", -# fileNames = cms.untracked.vstring( -# # SOME DATA FILE TO BE PUT HERE -# # -# # MC test (local) running on the OneElecPlusSC skim made from the Zee MC samples -# # ------------------------------------------------------------------------------ -# # 'rfio:/tmp/ikesisog/TestFiles/skimMC/OneElecPlusSC_1Files.root', -# # 'rfio:/tmp/ikesisog/TestFiles/skimMC/OneElecPlusSC_2Files.root', -# # 'rfio:/tmp/ikesisog/TestFiles/skimMC/OneElecPlusSC_3Files.root', -# # -# # MC test (local) running directly on the Zee MC samples -# # ------------------------------------------------------ -# 'rfio:/tmp/ikesisog/TestFiles/dSetMC/Zee/8EA9211C-7476-DF11-BC31-00304867C136.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetMC/Zee/B0737652-7076-DF11-83F8-002618943831.root', -# 'rfio:/tmp/ikesisog/TestFiles/dSetMC/Zee/14B213B3-7576-DF11-8763-003048678FA6.root', -# ) -# ) -# - - -# source - Use an input list to bypass the 255 file limit -import FWCore.Utilities.FileUtils as FileUtils - -filelist = FileUtils.loadListFromFile(lstFile) - -process.source = cms.Source('PoolSource', - fileNames = cms.untracked.vstring(*filelist) - ) - - -# -# # using locally provided JSON -# import PhysicsTools.PythonAnalysis.LumiList as LumiList -# import FWCore.ParameterSet.Types as CfgTypes -# myLumis = LumiList.LumiList(filename = 'Cert_132440-149442_7TeV_StreamExpress_Collisions10_JSON_v2.json').getCMSSWString().split(',') -# process.source.lumisToProcess = CfgTypes.untracked(CfgTypes.VLuminosityBlockRange()) -# process.source.lumisToProcess.extend(myLumis) -# - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -## Load additional processes -# -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -## global tags: -# -process.GlobalTag.globaltag = cms.string('START36_V9::All') # GLOBAL TAG FOR MC - -process.load("Configuration.StandardSequences.MagneticField_cff") - - -################################################################################################ -### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ### -################################################################################################ - -## pat sequences to be loaded: -#process.load("PhysicsTools.PFCandProducer.PF2PAT_cff") - -process.load("PhysicsTools.PatAlgos.patSequences_cff") - -#process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff") - -## -# - -## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%% -## specify the names of the MET collections that you need here %%%% -## #%% -## if you don't specify anything the default MET is the raw Calo MET #%% -process.caloMET = process.patMETs.clone( #%% - metSource = cms.InputTag("met","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.tcMET = process.patMETs.clone( #%% - metSource = cms.InputTag("tcMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) -process.pfMET = process.patMETs.clone( #%% - metSource = cms.InputTag("pfMet","","RECO"), - addTrigMatch = cms.bool(False), - addMuonCorrections = cms.bool(False), - addGenMET = cms.bool(False), -) - -## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%% -myMetCollection = 'caloMET' -myPfMetCollection = 'pfMET' -myTcMetCollection = 'tcMET' - -## modify the sequence of the MET creation: #%% -process.makePatMETs = cms.Sequence(process.caloMET*process.tcMET*process.pfMET) - - -## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections) - -process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff") -#process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence) - -process.patElectrons.isoDeposits = cms.PSet() -process.patElectrons.userIsolation = cms.PSet() -process.patElectrons.addElectronID = cms.bool(True) - -process.patElectrons.electronIDSources = cms.PSet( - simpleEleId95relIso = cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso = cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso = cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso = cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso = cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso = cms.InputTag("simpleEleId60relIso"), - simpleEleId95cIso = cms.InputTag("simpleEleId95cIso"), - simpleEleId90cIso = cms.InputTag("simpleEleId90cIso"), - simpleEleId85cIso = cms.InputTag("simpleEleId85cIso"), - simpleEleId80cIso = cms.InputTag("simpleEleId80cIso"), - simpleEleId70cIso = cms.InputTag("simpleEleId70cIso"), - simpleEleId60cIso = cms.InputTag("simpleEleId60cIso") -) - -## - -process.patElectrons.addGenMatch = cms.bool(False) -process.patElectrons.embedGenMatch = cms.bool(False) -process.patElectrons.usePV = cms.bool(False) - -## - -process.load("ElectroWeakAnalysis.ZEE.simpleEleIdSequence_cff") - -# you have to tell the ID that it is data. These are set to False for MC -process.simpleEleId95relIso.dataMagneticFieldSetUp = cms.bool(False) -process.simpleEleId90relIso.dataMagneticFieldSetUp = cms.bool(False) -process.simpleEleId85relIso.dataMagneticFieldSetUp = cms.bool(False) -process.simpleEleId80relIso.dataMagneticFieldSetUp = cms.bool(False) -process.simpleEleId70relIso.dataMagneticFieldSetUp = cms.bool(False) -process.simpleEleId60relIso.dataMagneticFieldSetUp = cms.bool(False) -process.simpleEleId95cIso.dataMagneticFieldSetUp = cms.bool(False) -process.simpleEleId90cIso.dataMagneticFieldSetUp = cms.bool(False) -process.simpleEleId85cIso.dataMagneticFieldSetUp = cms.bool(False) -process.simpleEleId80cIso.dataMagneticFieldSetUp = cms.bool(False) -process.simpleEleId70cIso.dataMagneticFieldSetUp = cms.bool(False) -process.simpleEleId60cIso.dataMagneticFieldSetUp = cms.bool(False) -# -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) - -process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons) - -# process.makePatMuons may be needed depending on how you calculate the MET - -process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs) - -process.patDefaultSequence = cms.Sequence(process.makePatCandidates) - -## WARNING: you may want to modify this item: -HLT_process_name = "REDIGI39X" # REDIGI for the production traditional MC / HLT for the powheg samples or data - -# Trigger Path(s) -HLT_path_name = "HLT_Photon10_L1R" - -# Label of the last Trigger Filter in the Trigger Path -HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter" - -HLT_path_name_extra0 = "HLT_Photon15_Cleaned_L1R" -HLT_filter_name_extra0 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSinglePhotonEt15CleanedHcalIsolFilter","",HLT_process_name) - -HLT_path_name_extra1 = "HLT_Ele15_SW_CaloEleId_L1R" -HLT_filter_name_extra1 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15CaloEleIdPixelMatchFilter","",HLT_process_name) - -HLT_path_name_extra2 = "HLT_Ele17_SW_CaloEleId_L1R" -HLT_filter_name_extra2 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt17CaloEleIdPixelMatchFilter","",HLT_process_name) - -HLT_path_name_extra3 = "HLT_Ele17_SW_TightEleId_L1R" -HLT_filter_name_extra3 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt17TightEleIdDphiFilter","",HLT_process_name) - -# HLT_path_name_extra4 = "HLT_Ele17_SW_TighterEleIdIsol_L1R_v2" -# HLT_filter_name_extra4 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt17TighterEleIdIsolTrackIsolFilter","",HLT_process_name) - -HLT_path_name_extra5 = "HLT_Ele22_SW_TighterCaloIdIsol_L1R_v1" -HLT_filter_name_extra5 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt22TighterCaloIdIsolTrackIsolFilter","",HLT_process_name) - -HLT_path_name_extra6 = "HLT_Ele22_SW_TighterCaloIdIsol_L1R_v2" -HLT_filter_name_extra6 = cms.untracked.InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt22TighterCaloIdIsolTrackIsolFilter","",HLT_process_name) - - -rules_Filter = cms.PSet ( - ### the input collections needed: - electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"), - metCollectionTag = cms.untracked.InputTag(myMetCollection,"","PAT"), - pfMetCollectionTag = cms.untracked.InputTag(myPfMetCollection,"","PAT"), - tcMetCollectionTag = cms.untracked.InputTag(myTcMetCollection,"","PAT"), - triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name), - triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name), - hltpath = cms.untracked.string(HLT_path_name), - hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name), - ebRecHits = cms.untracked.InputTag("reducedEcalRecHitsEB"), - eeRecHits = cms.untracked.InputTag("reducedEcalRecHitsEE"), - PrimaryVerticesCollection = cms.untracked.InputTag("offlinePrimaryVertices"), - ### here the preselection is applied - # fiducial cuts: - BarrelMaxEta = cms.untracked.double(1.4442), - EndCapMinEta = cms.untracked.double(1.5660), - EndCapMaxEta = cms.untracked.double(2.5000), - # demand ecal driven electron: - useEcalDrivenElectrons = cms.untracked.bool(True), - # demand offline spike cleaning with the Swiss Cross criterion: - useSpikeRejection = cms.untracked.bool(False), - spikeCleaningSwissCrossCut = cms.untracked.double(0.95), - # demand geometrically matched to an HLT object with ET>15GeV - useTriggerInfo = cms.untracked.bool(True), - electronMatched2HLT = cms.untracked.bool(True), - electronMatched2HLT_DR = cms.untracked.double(0.1), - useHLTObjectETCut = cms.untracked.bool(True), - hltObjectETCut = cms.untracked.double(15.0), - useExtraTrigger = cms.untracked.bool(True), -# vHltpathExtra = cms.untracked.vstring(HLT_path_name_extra0,HLT_path_name_extra1,HLT_path_name_extra2,HLT_path_name_extra3,HLT_path_name_extra4,HLT_path_name_extra5), -# vHltpathFilterExtra = cms.untracked.VInputTag(HLT_filter_name_extra0,HLT_filter_name_extra1,HLT_filter_name_extra2,HLT_filter_name_extra3,HLT_filter_name_extra4,HLT_filter_name_extra5), - vHltpathExtra = cms.untracked.vstring(HLT_path_name_extra0,HLT_path_name_extra1,HLT_path_name_extra2,HLT_path_name_extra3,HLT_path_name_extra5,HLT_path_name_extra6), - vHltpathFilterExtra = cms.untracked.VInputTag(HLT_filter_name_extra0,HLT_filter_name_extra1,HLT_filter_name_extra2,HLT_filter_name_extra3,HLT_filter_name_extra5,HLT_filter_name_extra6), - - # ET Cut in the SC - ETCut = cms.untracked.double(25.0), - METCut = cms.untracked.double(0.0), - # For DATA set it to True, for MC set it to False - dataMagneticFieldSetUp = cms.untracked.bool(True), - dcsTag = cms.untracked.InputTag("scalersRawToDigi") -) - - -rules_Filter_Elec0 = cms.PSet ( - # Other parameters of the code - leave them as they are - useValidFirstPXBHit0 = cms.untracked.bool(False), - useConversionRejection0 = cms.untracked.bool(False), - useExpectedMissingHits0 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits0 = cms.untracked.int32(0), - # calculate some new cuts - calculateValidFirstPXBHit0 = cms.untracked.bool(False), - calculateConversionRejection0 = cms.untracked.bool(False), - calculateExpectedMissingHits0 = cms.untracked.bool(False) -) - -rules_Filter_Elec1 = cms.PSet ( - # Other parameters of the code - leave them as they are - useValidFirstPXBHit1 = cms.untracked.bool(False), - useConversionRejection1 = cms.untracked.bool(False), - useExpectedMissingHits1 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits1 = cms.untracked.int32(0), - # calculate some new cuts - calculateValidFirstPXBHit1 = cms.untracked.bool(False), - calculateConversionRejection1 = cms.untracked.bool(False), - calculateExpectedMissingHits1 = cms.untracked.bool(False) -) - -rules_Filter_Elec2 = cms.PSet ( - # Other parameters of the code - leave them as they are - useValidFirstPXBHit2 = cms.untracked.bool(False), - useConversionRejection2 = cms.untracked.bool(False), - useExpectedMissingHits2 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits2 = cms.untracked.int32(0), - # calculate some new cuts - calculateValidFirstPXBHit2 = cms.untracked.bool(False), - calculateConversionRejection2 = cms.untracked.bool(False), - calculateExpectedMissingHits2 = cms.untracked.bool(False) -) - - -process.zeeFilter = cms.EDFilter('ZeeCandidateFilter', - rules_Filter, - rules_Filter_Elec0, - rules_Filter_Elec1, - rules_Filter_Elec2 -) - - - -## the Z selection that you prefer -from ElectroWeakAnalysis.ZEE.simpleCutBasedSpring10SelectionBlocks_cfi import * - -selection_inverse = cms.PSet ( - deta_EB_inv = cms.untracked.bool(True), - deta_EE_inv = cms.untracked.bool(True) - ) - - -rules_Plotter = cms.PSet ( - # treat or not the elecrons with same criteria. if yes then rules_Plotter_Elec1/2 are neglected - useSameSelectionOnBothElectrons = cms.untracked.bool(True), - # some extra information on the ntuple production: - sihih0_EB = cms.untracked.double(1000.0), - dphi0_EB = cms.untracked.double(1000.0), - deta0_EB = cms.untracked.double(1000.0), - hoe0_EB = cms.untracked.double(1000.0), - sihih0_EE = cms.untracked.double(1000.0), - dphi0_EE = cms.untracked.double(1000.0), - deta0_EE = cms.untracked.double(1000.0), - hoe0_EE = cms.untracked.double(1000.0), - includeJetInformationInNtuples = cms.untracked.bool(True), - caloJetCollectionTag = cms.untracked.InputTag('ak5CaloJetsL2L3'), - pfJetCollectionTag = cms.untracked.InputTag('ak5PFJetsL2L3'), - DRJetFromElectron = cms.untracked.double(0.3), - # - zeeCollectionTag = cms.untracked.InputTag("zeeFilter","selectedZeeCandidates","PAT"), - ZEE_VBTFselectionFileName = cms.untracked.string("ZEE_VBTFselection.root"), - ZEE_VBTFpreseleFileName = cms.untracked.string("ZEE_VBTFpreselection.root"), - DatasetTag = cms.untracked.int32(100), - storeExtraInformation = cms.untracked.bool(True) -) - -rules_Plotter_Elec0 = cms.PSet ( - # The selection to be used here: - usePrecalcID0 = cms.untracked.bool(True), - usePrecalcIDType0 = cms.untracked.string('simpleEleId80relIso'), - usePrecalcIDSign0 = cms.untracked.string('='), - usePrecalcIDValue0 = cms.untracked.double(7), - ## preselection criteria are independent of useSameSelectionOnBothElectrons - # set them to False if you don't want them - useValidFirstPXBHit0 = cms.untracked.bool(False), - useConversionRejection0 = cms.untracked.bool(False), - useExpectedMissingHits0 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits0 = cms.untracked.int32(0), - ## - calculateValidFirstPXBHit0 = cms.untracked.bool(False), - calculateConversionRejection0 = cms.untracked.bool(False), - calculateExpectedMissingHits0 = cms.untracked.bool(False) -) - -rules_Plotter_Elec1 = cms.PSet ( - # The selection to be used here: - usePrecalcID1 = cms.untracked.bool(True), - usePrecalcIDType1 = cms.untracked.string('simpleEleId80relIso'), - usePrecalcIDSign1 = cms.untracked.string('='), - usePrecalcIDValue1 = cms.untracked.double(7), - ## preselection criteria are independent of useSameSelectionOnBothElectrons - # set them to False if you don't want them - useValidFirstPXBHit1 = cms.untracked.bool(False), - useConversionRejection1 = cms.untracked.bool(False), - useExpectedMissingHits1 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits1 = cms.untracked.int32(0), - ## - calculateValidFirstPXBHit1 = cms.untracked.bool(False), - calculateConversionRejection1 = cms.untracked.bool(False), - calculateExpectedMissingHits1 = cms.untracked.bool(False) -) - -rules_Plotter_Elec2 = cms.PSet ( - # The selection to be used here: - usePrecalcID2 = cms.untracked.bool(True), - usePrecalcIDType2 = cms.untracked.string('simpleEleId80relIso'), - usePrecalcIDSign2 = cms.untracked.string('='), - usePrecalcIDValue2 = cms.untracked.double(7), - ## preselection criteria are independent of useSameSelectionOnBothElectrons - # set them to False if you don't want them - useValidFirstPXBHit2 = cms.untracked.bool(False), - useConversionRejection2 = cms.untracked.bool(False), - useExpectedMissingHits2 = cms.untracked.bool(True), - maxNumberOfExpectedMissingHits2 = cms.untracked.int32(0), - ## - calculateValidFirstPXBHit2 = cms.untracked.bool(False), - calculateConversionRejection2 = cms.untracked.bool(False), - calculateExpectedMissingHits2 = cms.untracked.bool(False) -) - - -# we need to store jet information, hence we have to produce the jets: -process.load("JetMETCorrections.Configuration.DefaultJEC_cff") - -process.jetSequence = cms.Sequence( process.ak5CaloJetsL2L3 ) - -process.pfjetAK5Sequence = cms.Sequence( process.ak5PFJetsL2L3 ) - -process.ourJetSequence = cms.Sequence( process.jetSequence * process.pfjetAK5Sequence ) - - -process.plotter = cms.EDAnalyzer('ZeePlots', - rules_Plotter, - rules_Plotter_Elec0, - rules_Plotter_Elec1, - rules_Plotter_Elec2 -) - - -# For DATA, 361p4 electrons need fixing first (misalignment corrections) *NOT* be used with MC -#process.load("RecoEgamma.EgammaTools.correctedElectronsProducer_cfi") -#process.p = cms.Path( process.gsfElectrons*process.ourJetSequence*process.patDefaultSequence*process.zeeFilter*process.plotter) - -# For DATA, 397 electrons are fixed (misalignment corrections included) -#process.p = cms.Path( process.ourJetSequence*process.patDefaultSequence*process.zeeFilter*process.plotter) - -# For MonteCarlo, -process.p = cms.Path( process.ourJetSequence * process.patDefaultSequence +process.zeeFilter + process.plotter) - - diff --git a/ElectroWeakAnalysis/ZMuMu/bin/BuildFile.xml b/ElectroWeakAnalysis/ZMuMu/bin/BuildFile.xml deleted file mode 100644 index b9c8a80ff6ad0..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/BuildFile.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ElectroWeakAnalysis/ZMuMu/bin/csa08HLTFit.cpp b/ElectroWeakAnalysis/ZMuMu/bin/csa08HLTFit.cpp deleted file mode 100644 index 6593b8aff546a..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/csa08HLTFit.cpp +++ /dev/null @@ -1,443 +0,0 @@ -#include "FWCore/Utilities/interface/EDMException.h" -#include "PhysicsTools/Utilities/interface/Parameter.h" -#include "PhysicsTools/Utilities/interface/Gaussian.h" -#include "PhysicsTools/Utilities/interface/Numerical.h" -#include "PhysicsTools/Utilities/interface/Exponential.h" -#include "PhysicsTools/Utilities/interface/Polynomial.h" -#include "PhysicsTools/Utilities/interface/Constant.h" -#include "PhysicsTools/Utilities/interface/Operations.h" -#include "PhysicsTools/Utilities/interface/MultiHistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/HistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/RootMinuit.h" -#include "PhysicsTools/Utilities/interface/RootMinuitCommands.h" -#include "PhysicsTools/Utilities/interface/FunctClone.h" -#include "PhysicsTools/Utilities/interface/rootPlot.h" -#include "PhysicsTools/Utilities/interface/Expression.h" -#include "PhysicsTools/Utilities/interface/HistoPdf.h" -#include "TROOT.h" -#include "TH1.h" -#include "TFile.h" -#include -using namespace boost; -namespace po = boost::program_options; - -#include -#include -#include -#include -#include -#include -using namespace std; - -// A helper function to simplify the main part. -template -ostream& operator<<(ostream& os, const vector& v) { - copy(v.begin(), v.end(), ostream_iterator(cout, " ")); - return os; -} - -//A function that sets istogram contents to 0 -//if they are too small -void fix(TH1* histo) { - for (int i = 1; i <= histo->GetNbinsX(); ++i) { - if (histo->GetBinContent(i) < 0.1) { - histo->SetBinContent(i, 0.0); - histo->SetBinError(i, 0.0); - } - } -} - -struct sig_tag; -struct bkg_tag; - -int main(int ac, char* av[]) { - gROOT->SetStyle("Plain"); - try { - typedef funct::FunctExpression Expr; - typedef fit::HistoChiSquare ExprChi2; - typedef fit::MultiHistoChiSquare ChiSquared; - - double fMin, fMax; - string ext; - po::options_description desc("Allowed options"); - desc.add_options()("help,h", "produce help message")("input-file,i", po::value >(), "input file")( - "min,m", po::value(&fMin)->default_value(60), "minimum value for fit range")( - "max,M", po::value(&fMax)->default_value(120), "maximum value for fit range")( - "plot-format,p", po::value(&ext)->default_value("ps"), "output plot format"); - - po::positional_options_description p; - p.add("input-file", -1); - - po::variables_map vm; - po::store(po::command_line_parser(ac, av).options(desc).positional(p).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - fit::RootMinuitCommands commands("csa08HLTFit.txt"); - - const unsigned int rebinMuMuNoIso = 2, rebinMuMu = 1, rebinMuMu1HLT = 1, rebinMuMu2HLT = 1, rebinMuTk = 2, - rebinMuSa = 8; - // assume that the bin size is 1 GeV!!! - funct::Constant rebinMuMuNoIsoConst(rebinMuMuNoIso), rebinMuMuConst(rebinMuMu), rebinMuMu1HLTConst(rebinMuMu1HLT), - rebinMuMu2HLTConst(rebinMuMu2HLT), rebinMuTkConst(rebinMuTk), rebinMuSaConst(rebinMuSa); - - if (vm.count("input-file")) { - cout << "Input files are: " << vm["input-file"].as >() << "\n"; - vector v_file = vm["input-file"].as >(); - for (vector::const_iterator it = v_file.begin(); it != v_file.end(); ++it) { - TFile* root_file = new TFile(it->c_str(), "read"); - - TH1D* histoZMuMuNoIso = (TH1D*)root_file->Get("nonIsolatedZToMuMuPlots/zMass"); - histoZMuMuNoIso->Rebin(rebinMuMuNoIso); - fix(histoZMuMuNoIso); - - TH1D* histoZMuMu = (TH1D*)root_file->Get("goodZToMuMuPlots/zMass"); - histoZMuMu->Rebin(rebinMuMu); - fix(histoZMuMu); - - TH1D* histoZMuMu1HLT = (TH1D*)root_file->Get("goodZToMuMu1HLTPlots/zMass"); - histoZMuMu1HLT->Rebin(rebinMuMu1HLT); - fix(histoZMuMu1HLT); - - TH1D* histoZMuMu2HLT = (TH1D*)root_file->Get("goodZToMuMu2HLTPlots/zMass"); - histoZMuMu2HLT->Rebin(rebinMuMu2HLT); - fix(histoZMuMu2HLT); - - TH1D* histoZMuTk = (TH1D*)root_file->Get("goodZToMuMuOneTrackPlots/zMass"); - histoZMuTk->Rebin(rebinMuTk); - fix(histoZMuTk); - - TH1D* histoZMuSa = (TH1D*)root_file->Get("goodZToMuMuOneStandAloneMuonPlots/zMass"); - histoZMuSa->Rebin(rebinMuSa); - fix(histoZMuSa); - - cout << ">>> histogram loaded\n"; - string f_string = *it; - replace(f_string.begin(), f_string.end(), '.', '_'); - replace(f_string.begin(), f_string.end(), '/', '_'); - string plot_string = f_string + "." + ext; - cout << ">>> Input files loaded\n"; - - const char* kYieldZMuMu = "YieldZMuMu"; - const char* kEfficiencyTk = "EfficiencyTk"; - const char* kEfficiencySa = "EfficiencySa"; - const char* kEfficiencyIso = "EfficiencyIso"; - const char* kEfficiencyHLT = "EfficiencyHLT"; - const char* kYieldBkgZMuTk = "YieldBkgZMuTk"; - const char* kYieldBkgZMuSa = "YieldBkgZMuSa"; - const char* kYieldBkgZMuMuNotIso = "YieldBkgZMuMuNotIso"; - const char* kAlpha = "Alpha"; - const char* kBeta = "Beta"; - const char* kLambda = "Lambda"; - const char* kA0 = "A0"; - const char* kA1 = "A1"; - const char* kA2 = "A2"; - const char* kB0 = "B0"; - const char* kB1 = "B1"; - const char* kB2 = "B2"; - const char* kMeanZMuSa = "MeanZMuSa"; - const char* kSigmaZMuSa = "SigmaZMuSa"; - - funct::Parameter yieldZMuMu(kYieldZMuMu, commands.par(kYieldZMuMu)); - funct::Parameter effTk(kEfficiencyTk, commands.par(kEfficiencyTk)); - funct::Parameter effSa(kEfficiencySa, commands.par(kEfficiencySa)); - funct::Parameter effIso(kEfficiencyIso, commands.par(kEfficiencyIso)); - funct::Parameter effHLT(kEfficiencyHLT, commands.par(kEfficiencyHLT)); - funct::Parameter yieldBkgZMuTk(kYieldBkgZMuTk, commands.par(kYieldBkgZMuTk)); - funct::Parameter yieldBkgZMuSa(kYieldBkgZMuSa, commands.par(kYieldBkgZMuSa)); - funct::Parameter yieldBkgZMuMuNotIso(kYieldBkgZMuMuNotIso, commands.par(kYieldBkgZMuMuNotIso)); - funct::Parameter meanZMuSa(kMeanZMuSa, commands.par(kMeanZMuSa)); - funct::Parameter sigmaZMuSa(kSigmaZMuSa, commands.par(kSigmaZMuSa)); - funct::Parameter alpha(kAlpha, commands.par(kAlpha)); - funct::Parameter beta(kBeta, commands.par(kBeta)); - funct::Parameter lambda(kLambda, commands.par(kLambda)); - funct::Parameter a0(kA0, commands.par(kA0)); - funct::Parameter a1(kA1, commands.par(kA1)); - funct::Parameter a2(kA2, commands.par(kA2)); - funct::Parameter b0(kB0, commands.par(kB0)); - funct::Parameter b1(kB1, commands.par(kB1)); - funct::Parameter b2(kB2, commands.par(kB2)); - funct::Constant cFMin(fMin), cFMax(fMax); - - // count ZMuMu Yield - double nZMuMu = 0, nZMuMu1HLT = 0, nZMuMu2HLT = 0; - { - unsigned int nBins = histoZMuMu->GetNbinsX(); - double xMin = histoZMuMu->GetXaxis()->GetXmin(); - double xMax = histoZMuMu->GetXaxis()->GetXmax(); - double deltaX = (xMax - xMin) / nBins; - for (unsigned int i = 0; i < nBins; ++i) { - double x = xMin + (i + .5) * deltaX; - if (x > fMin && x < fMax) { - nZMuMu += histoZMuMu->GetBinContent(i + 1); - nZMuMu1HLT += histoZMuMu1HLT->GetBinContent(i + 1); - nZMuMu2HLT += histoZMuMu2HLT->GetBinContent(i + 1); - } - } - } - // aggiungi 1HLT 2HLT - cout << ">>> count of ZMuMu yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu << endl; - cout << ">>> count of ZMuMu (1HLT) yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu1HLT << endl; - cout << ">>> count of ZMuMu (2HLT) yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu2HLT << endl; - funct::RootHistoPdf zPdfMuMuNonIso(*histoZMuMu, fMin, fMax); //imposto le pdf a quella si ZMuMu - funct::RootHistoPdf zPdfMuTk = zPdfMuMuNonIso; - funct::RootHistoPdf zPdfMuMu1HLT = zPdfMuMuNonIso; - funct::RootHistoPdf zPdfMuMu2HLT = zPdfMuMuNonIso; - zPdfMuMuNonIso.rebin(rebinMuMuNoIso); - zPdfMuTk.rebin(rebinMuTk); - zPdfMuMu1HLT.rebin(rebinMuMu1HLT); - zPdfMuMu2HLT.rebin(rebinMuMu2HLT); - - funct::Numerical<2> _2; - funct::Numerical<1> _1; - - //Efficiency term - Expr zMuMuEff1HLTTerm = _2 * (effTk ^ _2) * (effSa ^ _2) * (effIso ^ _2) * effHLT * (_1 - effHLT); - Expr zMuMuEff2HLTTerm = (effTk ^ _2) * (effSa ^ _2) * (effIso ^ _2) * (effHLT ^ _2); - Expr zMuMuNoIsoEffTerm = (effTk ^ _2) * (effSa ^ _2) * (_1 - (effIso ^ _2)) * (_1 - ((_1 - effHLT) ^ _2)); - Expr zMuTkEffTerm = _2 * (effTk ^ _2) * effSa * (_1 - effSa) * (effIso ^ _2) * effHLT; - Expr zMuSaEffTerm = _2 * (effSa ^ _2) * effTk * (_1 - effTk) * (effIso ^ _2) * effHLT; - - Expr zMuMu1HLT = rebinMuMu1HLTConst * zMuMuEff1HLTTerm * yieldZMuMu; - Expr zMuMu2HLT = rebinMuMu2HLTConst * zMuMuEff2HLTTerm * yieldZMuMu; - - Expr zMuTkBkg = yieldBkgZMuTk * funct::Exponential(lambda) * funct::Polynomial<2>(a0, a1, a2); - Expr zMuTkBkgScaled = rebinMuTkConst * zMuTkBkg; - Expr zMuTk = rebinMuTkConst * (zMuTkEffTerm * yieldZMuMu * zPdfMuTk + zMuTkBkg); - - Expr zMuMuNoIsoBkg = yieldBkgZMuMuNotIso * funct::Exponential(alpha) * funct::Polynomial<2>(b0, b1, b2); - Expr zMuMuNoIsoBkgScaled = rebinMuMuNoIsoConst * zMuMuNoIsoBkg; - Expr zMuMuNoIso = rebinMuMuNoIsoConst * (zMuMuNoIsoEffTerm * yieldZMuMu * zPdfMuMuNonIso + zMuMuNoIsoBkg); - - Expr zMuSa = rebinMuSaConst * (zMuSaEffTerm * yieldZMuMu * funct::Gaussian(meanZMuSa, sigmaZMuSa) + - (yieldBkgZMuSa * funct::Exponential(beta))); - - TH1D histoZCount1HLT("histoZCount1HLT", "", 1, fMin, fMax); - histoZCount1HLT.Fill(100, nZMuMu1HLT); - TH1D histoZCount2HLT("histoZCount2HLT", "", 1, fMin, fMax); - histoZCount2HLT.Fill(100, nZMuMu2HLT); - - ChiSquared chi2(zMuMu1HLT, - &histoZCount1HLT, - zMuMu2HLT, - &histoZCount2HLT, - zMuTk, - histoZMuTk, - zMuSa, - histoZMuSa, - zMuMuNoIso, - histoZMuMuNoIso, - fMin, - fMax); - cout << "N. bins: " << chi2.numberOfBins() << endl; - fit::RootMinuit minuit(chi2, true); - commands.add(minuit, yieldZMuMu); - commands.add(minuit, effTk); - commands.add(minuit, effSa); - commands.add(minuit, effIso); - commands.add(minuit, effHLT); - commands.add(minuit, yieldBkgZMuTk); - commands.add(minuit, yieldBkgZMuSa); - commands.add(minuit, yieldBkgZMuMuNotIso); - commands.add(minuit, meanZMuSa); - commands.add(minuit, sigmaZMuSa); - commands.add(minuit, lambda); - commands.add(minuit, alpha); - commands.add(minuit, beta); - commands.add(minuit, a0); - commands.add(minuit, a1); - commands.add(minuit, a2); - commands.add(minuit, b0); - commands.add(minuit, b1); - commands.add(minuit, b2); - commands.run(minuit); - const unsigned int nPar = 19; //WARNIG: this must be updated manually for now - ROOT::Math::SMatrix > err; - minuit.getErrorMatrix(err); - std::cout << "error matrix:" << std::endl; - for (unsigned int i = 0; i < nPar; ++i) { - for (unsigned int j = 0; j < nPar; ++j) { - std::cout << err(i, j) << "\t"; - } - std::cout << std::endl; - } - minuit.printFitResults(); - //Plot - double s; - s = 0; - for (int i = 1; i <= histoZMuMuNoIso->GetNbinsX(); ++i) - s += histoZMuMuNoIso->GetBinContent(i); - histoZMuMuNoIso->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuMu->GetNbinsX(); ++i) - s += histoZMuMu->GetBinContent(i); - histoZMuMu->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuMu1HLT->GetNbinsX(); ++i) - s += histoZMuMu1HLT->GetBinContent(i); - histoZMuMu1HLT->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuMu2HLT->GetNbinsX(); ++i) - s += histoZMuMu2HLT->GetBinContent(i); - histoZMuMu2HLT->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuTk->GetNbinsX(); ++i) - s += histoZMuTk->GetBinContent(i); - histoZMuTk->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuSa->GetNbinsX(); ++i) - s += histoZMuSa->GetBinContent(i); - histoZMuSa->SetEntries(s); - - string ZMuMu1HLTPlot = "ZMuMu1HLTFit_" + plot_string; - root::plot(ZMuMu1HLTPlot.c_str(), - *histoZMuMu1HLT, - zMuMu1HLT, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - kRed, - 2, - kDashed, - 100, - "Z -> #mu #mu mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuMu2HLTPlot = "ZMuMu2HLTFit_" + plot_string; - root::plot(ZMuMu2HLTPlot.c_str(), - *histoZMuMu2HLT, - zMuMu2HLT, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - kRed, - 2, - kDashed, - 100, - "Z -> #mu #mu mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuMuNoIsoPlot = "ZMuMuNoIsoFit_" + plot_string; - root::plot(ZMuMuNoIsoPlot.c_str(), - *histoZMuMuNoIso, - zMuMuNoIso, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - kRed, - 2, - kDashed, - 100, - "Z -> #mu #mu Not Iso mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuTkPlot = "ZMuTkFit_X_" + plot_string; - root::plot(ZMuTkPlot.c_str(), - *histoZMuTk, - zMuTk, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - yieldBkgZMuTk, - lambda, - a0, - a1, - a2, - kRed, - 2, - kDashed, - 100, - "Z -> #mu + (unmatched) track mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - ZMuTkPlot = "ZMuTkFit_" + plot_string; - TF1 funZMuTk = root::tf1_t("ZMuTkFunction", - zMuTk, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - yieldBkgZMuTk, - lambda, - a0, - a1, - a2); - funZMuTk.SetLineColor(kRed); - funZMuTk.SetLineWidth(2); - funZMuTk.SetLineStyle(kDashed); - funZMuTk.SetNpx(10000); - TF1 funZMuTkBkg = - root::tf1_t("ZMuTkBack", zMuTkBkgScaled, fMin, fMax, yieldBkgZMuTk, lambda, a0, a1, a2); - funZMuTkBkg.SetLineColor(kGreen); - funZMuTkBkg.SetLineWidth(2); - funZMuTkBkg.SetLineStyle(kDashed); - funZMuTkBkg.SetNpx(10000); - histoZMuTk->SetTitle("Z -> #mu + (unmatched) track mass"); - histoZMuTk->SetXTitle("#mu + (unmatched) track invariant mass (GeV/c^{2})"); - histoZMuTk->SetYTitle("Events"); - TCanvas* canvas = new TCanvas("canvas"); - histoZMuTk->Draw("e"); - funZMuTkBkg.Draw("same"); - funZMuTk.Draw("same"); - canvas->SaveAs(ZMuTkPlot.c_str()); - canvas->SetLogy(); - string logZMuTkPlot = "log_" + ZMuTkPlot; - canvas->SaveAs(logZMuTkPlot.c_str()); - string ZMuSaPlot = "ZMuSaFit_" + plot_string; - root::plot(ZMuSaPlot.c_str(), - *histoZMuSa, - zMuSa, - fMin, - fMax, - effSa, - effTk, - effIso, - yieldZMuMu, - meanZMuSa, - sigmaZMuSa, - yieldBkgZMuSa, - kRed, - 2, - kDashed, - 10000, - "Z -> #mu + (unmatched) standalone mass", - "#mu + (unmatched) standalone invariant mass (GeV/c^{2})", - "Events"); - } - } - } catch (std::exception& e) { - cerr << "error: " << e.what() << "\n"; - return 1; - } catch (...) { - cerr << "Exception of unknown type!\n"; - } - - return 0; -} diff --git a/ElectroWeakAnalysis/ZMuMu/bin/csa08IsoBkg.cpp b/ElectroWeakAnalysis/ZMuMu/bin/csa08IsoBkg.cpp deleted file mode 100644 index 5f8ab8d826306..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/csa08IsoBkg.cpp +++ /dev/null @@ -1,288 +0,0 @@ -#include "PhysicsTools/Utilities/interface/Parameter.h" -#include "PhysicsTools/Utilities/interface/ZLineShape.h" -#include "PhysicsTools/Utilities/interface/Gaussian.h" -#include "PhysicsTools/Utilities/interface/Numerical.h" -#include "PhysicsTools/Utilities/interface/Exponential.h" -#include "PhysicsTools/Utilities/interface/Polynomial.h" -#include "PhysicsTools/Utilities/interface/Constant.h" -#include "PhysicsTools/Utilities/interface/Convolution.h" -#include "PhysicsTools/Utilities/interface/Operations.h" -#include "PhysicsTools/Utilities/interface/Integral.h" -#include "PhysicsTools/Utilities/interface/MultiHistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/RootMinuit.h" -#include "PhysicsTools/Utilities/interface/RootMinuitCommands.h" -#include "PhysicsTools/Utilities/interface/FunctClone.h" -#include "PhysicsTools/Utilities/interface/rootPlot.h" -#include "TROOT.h" -#include "TH1.h" -#include "TFile.h" -#include -using namespace boost; -namespace po = boost::program_options; - -#include -#include -#include -#include -#include -#include -using namespace std; - -// A helper function to simplify the main part. -template -ostream& operator<<(ostream& os, const vector& v) { - copy(v.begin(), v.end(), ostream_iterator(cout, " ")); - return os; -} - -//A function that sets istogram contents to 0 -//if they are too small -void fix(TH1* histo) { - for(int i = 1; i <= histo->GetNbinsX(); ++i) { - if(histo->GetBinContent(i) < 0.1) { - histo->SetBinContent(i, 0.0); - histo->SetBinError(i, 0.0); - } - } -} - -typedef funct::GaussIntegrator IntegratorConv; -typedef funct::GaussIntegrator IntegratorNorm; - -typedef funct::Product::type>::type ZPeak; - -typedef funct::Master SigPeak; -typedef funct::Slave SigPeakClone; -typedef funct::Product::type Sig1; -typedef funct::Product::type Sig2; - -typedef funct::Product< - funct::Exponential, - funct::Polynomial<2> >::type ExpPoly; - -NUMERICAL_FUNCT_INTEGRAL(ExpPoly, GaussIntegrator); - -typedef funct::DefIntegral ExpPolyNormFactor; -typedef funct::Ratio::type ExpPolyNorm; - -typedef funct::Product< - funct::Parameter, - funct::Difference< - funct::Ratio< - funct::Numerical<2>, - funct::Parameter>::type, - funct::Numerical<2> >::type>::type Coeff1; - -typedef funct::Product::type Bkg1; - -typedef funct::Product< - funct::Parameter, - funct::Square< - funct::Difference< - funct::Ratio< - funct::Numerical<1>, - funct::Parameter>::type, - funct::Numerical<1> >::type>::type>::type Coeff2; - -typedef funct::Product::type Bkg2; - -NUMERICAL_FUNCT_INTEGRAL(Bkg1, GaussIntegrator); -NUMERICAL_FUNCT_INTEGRAL(Bkg2, GaussIntegrator); - -typedef funct::Sum::type Fun1; -typedef funct::Sum::type Fun2; -typedef fit::MultiHistoChiSquare ChiSquared; - -int main(int ac, char *av[]) { - gROOT->SetStyle("Plain"); - try { - double fMin, fMax; - string ext; - po::options_description desc("Allowed options"); - desc.add_options() - ("help,h", "produce help message") - ("input-file,i", po::value< vector >(), "input file") - ("min,m", po::value(&fMin)->default_value(60), "minimum value for fit range") - ("max,M", po::value(&fMax)->default_value(120), "maximum value for fit range") - ("plot-format,p", po::value(&ext)->default_value("ps"), - "output plot format") - ; - - po::positional_options_description p; - p.add("input-file", -1); - - po::variables_map vm; - po::store(po::command_line_parser(ac, av). - options(desc).positional(p).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - fit::RootMinuitCommands commands("csa08IsoBkg.txt"); - - if (vm.count("input-file")) { - cout << "Input files are: " - << vm["input-file"].as< vector >() << "\n"; - vector v_file = vm["input-file"].as< vector >(); - for(vector::const_iterator it = v_file.begin(); - it != v_file.end(); ++it) { - TFile * root_file = new TFile(it->c_str(),"read"); - - TH1D * histo1 = (TH1D*) root_file->Get("oneNonIsolatedZToMuMuPlots/zMass"); - fix(histo1); - TH1D * histo2 = (TH1D*) root_file->Get("twoNonIsolatedZToMuMuPlots/zMass"); - fix(histo2); - - cout << ">>> histogram loaded\n"; - string f_string = *it; - replace(f_string.begin(), f_string.end(), '.', '_'); - replace(f_string.begin(), f_string.end(), '/', '_'); - string plot_string = f_string + "." + ext; - cout << ">>> Input files loaded\n"; - - const char * kYieldZMuMu1 = "YieldZMuMu1"; - const char * kYieldZMuMu2 = "YieldZMuMu2"; - const char * kYieldBkg = "YieldBkg"; - const char * kEffBkg = "EffBkg"; - const char * kLambdaZMuMu = "LambdaZMuMu"; - const char * kMass = "Mass"; - const char * kGamma = "Gamma"; - const char * kPhotonFactorZMuMu = "PhotonFactorZMuMu"; - const char * kInterferenceFactorZMuMu = "InterferenceFactorZMuMu"; - const char * kMeanZMuMu = "MeanZMuMu"; - const char * kSigmaZMuMu = "SigmaZMuMu"; - const char * kAlpha = "Alpha"; - const char * kA0 = "A0"; - const char * kA1 = "A1"; - const char * kA2 = "A2"; - - funct::Parameter lambdaZMuMu(kLambdaZMuMu, commands.par(kLambdaZMuMu)); - funct::Parameter mass(kMass, commands.par(kMass)); - funct::Parameter gamma(kGamma, commands.par(kGamma)); - funct::Parameter photonFactorZMuMu(kPhotonFactorZMuMu, commands.par(kPhotonFactorZMuMu)); - funct::Parameter interferenceFactorZMuMu(kInterferenceFactorZMuMu, commands.par(kInterferenceFactorZMuMu)); - funct::Parameter yieldZMuMu1(kYieldZMuMu1, commands.par(kYieldZMuMu1)); - funct::Parameter yieldZMuMu2(kYieldZMuMu2, commands.par(kYieldZMuMu2)); - funct::Parameter yieldBkg(kYieldBkg, commands.par(kYieldBkg)); - funct::Parameter effBkg(kEffBkg, commands.par(kEffBkg)); - funct::Parameter meanZMuMu(kMeanZMuMu, commands.par(kMeanZMuMu)); - funct::Parameter sigmaZMuMu(kSigmaZMuMu, commands.par(kSigmaZMuMu)); - funct::Parameter alpha(kAlpha, commands.par(kAlpha)); - funct::Parameter a0(kA0, commands.par(kA0)); - funct::Parameter a1(kA1, commands.par(kA1)); - funct::Parameter a2(kA2, commands.par(kA2)); - funct::Constant cFMin(fMin), cFMax(fMax); - - IntegratorConv integratorConv(1.e-4); - IntegratorNorm integratorNorm(1.e-4); - - ZPeak zPeak = funct::Exponential(lambdaZMuMu) * - funct::conv(funct::ZLineShape(mass, gamma, photonFactorZMuMu, interferenceFactorZMuMu), - funct::Gaussian(meanZMuMu, sigmaZMuMu), - -3*sigmaZMuMu.value(), 3*sigmaZMuMu.value(), integratorConv); - SigPeak sp = funct::master(zPeak); - SigPeakClone spc = funct::slave(sp); - Sig1 sig1 = yieldZMuMu1 * sp; - Sig2 sig2 = yieldZMuMu2 * spc; - funct::Numerical<1> _1; - funct::Numerical<2> _2; - ExpPoly ep = funct::Exponential(alpha) * funct::Polynomial<2>(a0, a1, a2); - ExpPolyNorm epn = ep / ExpPolyNormFactor(ep, cFMin, cFMax, integratorNorm); - Coeff1 c1 = yieldBkg * (_2 / effBkg - _2); - Bkg1 bkg1 = c1 * epn; - Coeff2 c2 = yieldBkg * ((_1 /effBkg - _1) ^ _2); - Bkg2 bkg2 = c2 * epn; - Fun1 f1 = sig1 + bkg1; - Fun2 f2 = sig2 + bkg2; - - ChiSquared chi2(f1, histo1, f2, histo2, fMin, fMax); - cout << "N. deg. of freedom: " << chi2.degreesOfFreedom() << endl; - fit::RootMinuit minuit(chi2, true); - commands.add(minuit, yieldZMuMu1); - commands.add(minuit, yieldZMuMu2); - commands.add(minuit, yieldBkg); - commands.add(minuit, effBkg); - commands.add(minuit, lambdaZMuMu); - commands.add(minuit, mass); - commands.add(minuit, gamma); - commands.add(minuit, photonFactorZMuMu); - commands.add(minuit, interferenceFactorZMuMu); - commands.add(minuit, meanZMuMu); - commands.add(minuit, sigmaZMuMu); - commands.add(minuit, alpha); - commands.add(minuit, a0); - commands.add(minuit, a1); - commands.add(minuit, a2); - commands.run(minuit); - const unsigned int nPar = 15;//WARNIG: this must be updated manually for now - ROOT::Math::SMatrix > err; - minuit.getErrorMatrix(err); - std::cout << "error matrix:" << std::endl; - for(unsigned int i = 0; i < nPar; ++i) { - for(unsigned int j = 0; j < nPar; ++j) { - std::cout << err(i, j) << "\t"; - } - std::cout << std::endl; - } - minuit.printFitResults(); - - funct::GaussIntegrator integrator(1.e-6); - double nbkg1 = funct::integral_f(bkg1, fMin, fMax, integrator); - double nbkg2 = funct::integral_f(bkg2, fMin, fMax, integrator); - std::cout << "Background yields in [" << fMin <<", " << fMax << "]: " - << nbkg1 <<", " <Integral(int(fMin), int(fMax)); - double i2 = histo2->Integral(int(fMin), int(fMax)); - std::cout << "Histogram integrals in [" << fMin <<", " << fMax << "]: " - << i1 <<", " << i2 << std::endl; - double s; - s = 0; - for(int i = 1; i <= histo1->GetNbinsX(); ++i) - s += histo1->GetBinContent(i); - histo1->SetEntries(s); - s = 0; - for(int i = 1; i <= histo2->GetNbinsX(); ++i) - s += histo2->GetBinContent(i); - histo2->SetEntries(s); - - double extrap = nbkg1*nbkg1 / nbkg2 /4; - cout << "extrapolated background with no isolated muons:" << extrap << endl; - - string Plot1 = "OneIsolated_" + plot_string; - root::plot(Plot1.c_str(), *histo1, f1, fMin, fMax, - yieldZMuMu1, lambdaZMuMu, mass, gamma, photonFactorZMuMu, interferenceFactorZMuMu, - meanZMuMu, sigmaZMuMu, yieldBkg, effBkg, alpha, a0, a1, a2, - kRed, 2, kDashed, 100, - "Z -> #mu #mu mass", "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - string Plot2 = "TwoIsolated_" + plot_string; - root::plot(Plot2.c_str(), *histo2, f2, fMin, fMax, - yieldZMuMu2, lambdaZMuMu, mass, gamma, photonFactorZMuMu, interferenceFactorZMuMu, - meanZMuMu, sigmaZMuMu, yieldBkg, effBkg, alpha, a0, a1, a2, - kRed, 2, kDashed, 100, - "Z -> #mu #mu mass", "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - } - } - - } - catch(exception& e) { - cerr << "error: " << e.what() << "\n"; - return 1; - } - catch(...) { - cerr << "Exception of unknown type!\n"; - } - return 0; -} - - - diff --git a/ElectroWeakAnalysis/ZMuMu/bin/csa08NewZFit.cpp b/ElectroWeakAnalysis/ZMuMu/bin/csa08NewZFit.cpp deleted file mode 100644 index 86fbb5c9d9ade..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/csa08NewZFit.cpp +++ /dev/null @@ -1,326 +0,0 @@ -#include "FWCore/Utilities/interface/EDMException.h" -#include "PhysicsTools/Utilities/interface/Parameter.h" -#include "PhysicsTools/Utilities/interface/Gaussian.h" -#include "PhysicsTools/Utilities/interface/Numerical.h" -#include "PhysicsTools/Utilities/interface/Exponential.h" -#include "PhysicsTools/Utilities/interface/Polynomial.h" -#include "PhysicsTools/Utilities/interface/Constant.h" -#include "PhysicsTools/Utilities/interface/Operations.h" -#include "PhysicsTools/Utilities/interface/MultiHistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/RootMinuit.h" -#include "PhysicsTools/Utilities/interface/RootMinuitCommands.h" -#include "PhysicsTools/Utilities/interface/FunctClone.h" -#include "PhysicsTools/Utilities/interface/rootPlot.h" -#include "PhysicsTools/Utilities/interface/Expression.h" -#include "PhysicsTools/Utilities/interface/HistoPdf.h" -#include "TROOT.h" -#include "TH1.h" -#include "TFile.h" -#include -using namespace boost; -namespace po = boost::program_options; - -#include -#include -#include -#include -#include -#include -using namespace std; - -// A helper function to simplify the main part. -template -ostream& operator<<(ostream& os, const vector& v) { - copy(v.begin(), v.end(), ostream_iterator(cout, " ")); - return os; -} - -//A function that sets istogram contents to 0 -//if they are too small -void fix(TH1* histo) { - for(int i = 1; i <= histo->GetNbinsX(); ++i) { - if(histo->GetBinContent(i) < 0.1) { - histo->SetBinContent(i, 0.0); - histo->SetBinError(i, 0.0); - } - } -} - -struct sig_tag; -struct bkg_tag; - -int main(int ac, char *av[]) { - gROOT->SetStyle("Plain"); - try { - typedef funct::FunctExpression Expr; - typedef fit::MultiHistoChiSquare ChiSquared; - - double fMin, fMax; - string ext; - po::options_description desc("Allowed options"); - desc.add_options() - ("help,h", "produce help message") - ("input-file,i", po::value< vector >(), "input file") - ("min,m", po::value(&fMin)->default_value(60), "minimum value for fit range") - ("max,M", po::value(&fMax)->default_value(120), "maximum value for fit range") - ("plot-format,p", po::value(&ext)->default_value("ps"), - "output plot format") - ; - - po::positional_options_description p; - p.add("input-file", -1); - - po::variables_map vm; - po::store(po::command_line_parser(ac, av). - options(desc).positional(p).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - fit::RootMinuitCommands commands("csa08NewZFit.txt"); - - const unsigned int rebinMuMuNoIso = 2,rebinMuMu = 1, rebinMuTk = 2, rebinMuSa = 8; - // assume that the bin size is 1 GeV!!! - funct::Constant rebinMuMuNoIsoConst(rebinMuMuNoIso),rebinMuMuConst(rebinMuMu), rebinMuTkConst(rebinMuTk), rebinMuSaConst(rebinMuSa); - - if (vm.count("input-file")) { - cout << "Input files are: " - << vm["input-file"].as< vector >() << "\n"; - vector v_file = vm["input-file"].as< vector >(); - for(vector::const_iterator it = v_file.begin(); - it != v_file.end(); ++it) { - TFile * root_file = new TFile(it->c_str(),"read"); - - TH1D * histoZMuMuNoIso = (TH1D*) root_file->Get("nonIsolatedZToMuMuPlots/zMass"); - histoZMuMuNoIso->Rebin(rebinMuMuNoIso); - fix(histoZMuMuNoIso); - - TH1D * histoZMuMu = (TH1D*) root_file->Get("goodZToMuMuPlots/zMass"); - histoZMuMu->Rebin(rebinMuMu); - fix(histoZMuMu); - - TH1D * histoZMuTk = (TH1D*) root_file->Get("goodZToMuMuOneTrackPlots/zMass"); - histoZMuTk->Rebin(rebinMuTk); - fix(histoZMuTk); - - TH1D * histoZMuSa = (TH1D*) root_file->Get("goodZToMuMuOneStandAloneMuonPlots/zMass"); - histoZMuSa->Rebin(rebinMuSa); - fix(histoZMuSa); - - cout << ">>> histogram loaded\n"; - string f_string = *it; - replace(f_string.begin(), f_string.end(), '.', '_'); - replace(f_string.begin(), f_string.end(), '/', '_'); - string plot_string = f_string + "." + ext; - cout << ">>> Input files loaded\n"; - - const char * kYieldZMuMu = "YieldZMuMu"; - const char * kEfficiencyTk = "EfficiencyTk"; - const char * kEfficiencySa = "EfficiencySa"; - const char * kEfficiencyIso = "EfficiencyIso"; - const char * kYieldBkgZMuTk = "YieldBkgZMuTk"; - const char * kYieldBkgZMuSa = "YieldBkgZMuSa"; - const char * kYieldBkgZMuMuNotIso = "YieldBkgZMuMuNotIso"; - const char * kAlpha = "Alpha"; - const char * kBeta = "Beta"; - const char * kLambda = "Lambda"; - const char * kA0 = "A0"; - const char * kA1 = "A1"; - const char * kA2 = "A2"; - const char * kB0 = "B0"; - const char * kB1 = "B1"; - const char * kB2 = "B2"; - const char * kMeanZMuSa = "MeanZMuSa"; - const char * kSigmaZMuSa = "SigmaZMuSa"; - - funct::Parameter yieldZMuMu(kYieldZMuMu, commands.par(kYieldZMuMu)); - funct::Parameter effTk(kEfficiencyTk, commands.par(kEfficiencyTk)); - funct::Parameter effSa(kEfficiencySa, commands.par(kEfficiencySa)); - funct::Parameter effIso(kEfficiencyIso, commands.par(kEfficiencyIso)); - funct::Parameter yieldBkgZMuTk(kYieldBkgZMuTk, commands.par(kYieldBkgZMuTk)); - funct::Parameter yieldBkgZMuSa(kYieldBkgZMuSa, commands.par(kYieldBkgZMuSa)); - funct::Parameter yieldBkgZMuMuNotIso(kYieldBkgZMuMuNotIso, commands.par(kYieldBkgZMuMuNotIso)); - funct::Parameter meanZMuSa(kMeanZMuSa, commands.par(kMeanZMuSa)); - funct::Parameter sigmaZMuSa(kSigmaZMuSa, commands.par(kSigmaZMuSa)); - funct::Parameter alpha(kAlpha, commands.par(kAlpha)); - funct::Parameter beta(kBeta, commands.par(kBeta)); - funct::Parameter lambda(kLambda, commands.par(kLambda)); - funct::Parameter a0(kA0, commands.par(kA0)); - funct::Parameter a1(kA1, commands.par(kA1)); - funct::Parameter a2(kA2, commands.par(kA2)); - funct::Parameter b0(kB0, commands.par(kB0)); - funct::Parameter b1(kB1, commands.par(kB1)); - funct::Parameter b2(kB2, commands.par(kB2)); - funct::Constant cFMin(fMin), cFMax(fMax); - - // count ZMuMu Yield - double nZMuMu = 0; - { - unsigned int nBins = histoZMuMu->GetNbinsX(); - double xMin = histoZMuMu->GetXaxis()->GetXmin(); - double xMax = histoZMuMu->GetXaxis()->GetXmax(); - double deltaX =(xMax - xMin) / nBins; - for(unsigned int i = 0; i < nBins; ++i) { - double x = xMin + (i +.5) * deltaX; - if(x > fMin && x < fMax) - nZMuMu += histoZMuMu->GetBinContent(i+1); - } - } - - cout << ">>> count of ZMuMu yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu << endl; - - funct::RootHistoPdf zPdfMuMuNonIso(*histoZMuMu, fMin, fMax); - funct::RootHistoPdf zPdfMuTk = zPdfMuMuNonIso; - zPdfMuMuNonIso.rebin(rebinMuMuNoIso); - zPdfMuTk.rebin(rebinMuTk); - - funct::Numerical<2> _2; - funct::Numerical<1> _1; - - Expr zMuMuEffTerm = (effTk ^ _2) * (effSa ^ _2) * (effIso ^ _2); - Expr zMuMuNoIsoEffTerm = (effTk ^ _2) * (effSa ^ _2) * (_1 - (effIso ^ _2)); - Expr zMuTkEffTerm = _2 * (effTk ^ _2) * effSa * (_1 - effSa) * (effIso ^ _2); - Expr zMuSaEffTerm = _2 * (effSa ^ _2) * effTk * (_1 - effTk) * (effIso ^ _2); - - Expr zMuMu = rebinMuMuConst * zMuMuEffTerm * yieldZMuMu; - - Expr zMuTkBkg = yieldBkgZMuTk * funct::Exponential(lambda) * funct::Polynomial<2>(a0, a1, a2); - Expr zMuTkBkgScaled = rebinMuTkConst * zMuTkBkg; - Expr zMuTk = rebinMuTkConst * (zMuTkEffTerm * yieldZMuMu * zPdfMuTk + zMuTkBkg); - Expr zMuMuNoIsoBkg = yieldBkgZMuMuNotIso * funct::Exponential(alpha) * funct::Polynomial<2>(b0, b1, b2); - Expr zMuMuNoIsoBkgScaled = rebinMuMuNoIsoConst * zMuMuNoIsoBkg; - Expr zMuMuNoIso = rebinMuMuNoIsoConst * (zMuMuNoIsoEffTerm * yieldZMuMu * zPdfMuMuNonIso + zMuMuNoIsoBkg); - Expr zMuSa = rebinMuSaConst * (zMuSaEffTerm * yieldZMuMu * funct::Gaussian(meanZMuSa, sigmaZMuSa) - + (yieldBkgZMuSa * funct::Exponential(beta))); - - TH1D histoZCount("histoZCount", "", 1, fMin, fMax); - histoZCount.Fill(100, nZMuMu); - - ChiSquared chi2(zMuMu, & histoZCount, - zMuTk, histoZMuTk, - zMuSa, histoZMuSa, - zMuMuNoIso,histoZMuMuNoIso, - fMin, fMax); - cout << "N. deg. of freedom: " << chi2.degreesOfFreedom() << endl; - fit::RootMinuit minuit(chi2, true); - commands.add(minuit, yieldZMuMu); - commands.add(minuit, effTk); - commands.add(minuit, effSa); - commands.add(minuit, effIso); - commands.add(minuit, yieldBkgZMuTk); - commands.add(minuit, yieldBkgZMuSa); - commands.add(minuit, yieldBkgZMuMuNotIso); - commands.add(minuit, meanZMuSa); - commands.add(minuit, sigmaZMuSa); - commands.add(minuit, lambda); - commands.add(minuit, alpha); - commands.add(minuit, beta); - commands.add(minuit, a0); - commands.add(minuit, a1); - commands.add(minuit, a2); - commands.add(minuit, b0); - commands.add(minuit, b1); - commands.add(minuit, b2); - commands.run(minuit); - const unsigned int nPar = 18;//WARNIG: this must be updated manually for now - ROOT::Math::SMatrix > err; - minuit.getErrorMatrix(err); - std::cout << "error matrix:" << std::endl; - for(unsigned int i = 0; i < nPar; ++i) { - for(unsigned int j = 0; j < nPar; ++j) { - std::cout << err(i, j) << "\t"; - } - std::cout << std::endl; - } - minuit.printFitResults(); - - double s; - s = 0; - for(int i = 1; i <= histoZMuMuNoIso->GetNbinsX(); ++i) - s += histoZMuMuNoIso->GetBinContent(i); - histoZMuMuNoIso->SetEntries(s); - for(int i = 1; i <= histoZMuMu->GetNbinsX(); ++i) - s += histoZMuMu->GetBinContent(i); - histoZMuMu->SetEntries(s); - s = 0; - for(int i = 1; i <= histoZMuTk->GetNbinsX(); ++i) - s += histoZMuTk->GetBinContent(i); - histoZMuTk->SetEntries(s); - s = 0; - for(int i = 1; i <= histoZMuSa->GetNbinsX(); ++i) - s += histoZMuSa->GetBinContent(i); - histoZMuSa->SetEntries(s); - string ZMuMuPlot = "ZMuMuFit_" + plot_string; - root::plot(ZMuMuPlot.c_str(), *histoZMuMu, zMuMu, fMin, fMax, - effTk, effSa, effIso, yieldZMuMu, - kRed, 2, kDashed, 100, - "Z -> #mu #mu mass", "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuMuNoIsoPlot = "ZMuMuNoIsoFit_" + plot_string; - root::plot(ZMuMuNoIsoPlot.c_str(), *histoZMuMuNoIso, zMuMuNoIso, fMin, fMax, - effTk, effSa, effIso, yieldZMuMu, - kRed, 2, kDashed, 100, - "Z -> #mu #mu Not Iso mass", "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuTkPlot = "ZMuTkFit_X_" + plot_string; - root::plot(ZMuTkPlot.c_str(), *histoZMuTk, zMuTk, fMin, fMax, - effTk, effSa, effIso, yieldZMuMu, - yieldBkgZMuTk, lambda, a0, a1, a2, - kRed, 2, kDashed, 100, - "Z -> #mu + (unmatched) track mass", "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - ZMuTkPlot = "ZMuTkFit_" + plot_string; - TF1 funZMuTk = root::tf1_t("ZMuTkFunction", zMuTk, fMin, fMax, - effTk, effSa, effIso, yieldZMuMu, - yieldBkgZMuTk, lambda, a0, a1, a2); - funZMuTk.SetLineColor(kRed); - funZMuTk.SetLineWidth(2); - funZMuTk.SetLineStyle(kDashed); - funZMuTk.SetNpx(10000); - TF1 funZMuTkBkg = root::tf1_t("ZMuTkBack", zMuTkBkgScaled, fMin, fMax, - yieldBkgZMuTk, lambda, a0, a1, a2); - funZMuTkBkg.SetLineColor(kGreen); - funZMuTkBkg.SetLineWidth(2); - funZMuTkBkg.SetLineStyle(kDashed); - funZMuTkBkg.SetNpx(10000); - histoZMuTk->SetTitle("Z -> #mu + (unmatched) track mass"); - histoZMuTk->SetXTitle("#mu + (unmatched) track invariant mass (GeV/c^{2})"); - histoZMuTk->SetYTitle("Events"); - TCanvas *canvas = new TCanvas("canvas"); - histoZMuTk->Draw("e"); - funZMuTkBkg.Draw("same"); - funZMuTk.Draw("same"); - canvas->SaveAs(ZMuTkPlot.c_str()); - canvas->SetLogy(); - string logZMuTkPlot = "log_" + ZMuTkPlot; - canvas->SaveAs(logZMuTkPlot.c_str()); - string ZMuSaPlot = "ZMuSaFit_" + plot_string; - root::plot(ZMuSaPlot.c_str(), *histoZMuSa, zMuSa, fMin, fMax, - effSa, effTk, effIso, - yieldZMuMu, meanZMuSa, sigmaZMuSa, yieldBkgZMuSa, - kRed, 2, kDashed, 10000, - "Z -> #mu + (unmatched) standalone mass", - "#mu + (unmatched) standalone invariant mass (GeV/c^{2})", - "Events"); - } - } - } - catch(exception& e) { - cerr << "error: " << e.what() << "\n"; - return 1; - } - catch(...) { - cerr << "Exception of unknown type!\n"; - } - - return 0; -} - - - diff --git a/ElectroWeakAnalysis/ZMuMu/bin/csa08NewZFit_EtaPtbinned.cpp b/ElectroWeakAnalysis/ZMuMu/bin/csa08NewZFit_EtaPtbinned.cpp deleted file mode 100644 index ab92a1960806f..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/csa08NewZFit_EtaPtbinned.cpp +++ /dev/null @@ -1,379 +0,0 @@ -#include "FWCore/Utilities/interface/EDMException.h" -#include "PhysicsTools/Utilities/interface/Parameter.h" -#include "PhysicsTools/Utilities/interface/Gaussian.h" -#include "PhysicsTools/Utilities/interface/Numerical.h" -#include "PhysicsTools/Utilities/interface/Exponential.h" -#include "PhysicsTools/Utilities/interface/Polynomial.h" -#include "PhysicsTools/Utilities/interface/Constant.h" -#include "PhysicsTools/Utilities/interface/Operations.h" -#include "PhysicsTools/Utilities/interface/MultiHistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/RootMinuit.h" -#include "PhysicsTools/Utilities/interface/RootMinuitCommands.h" -#include "PhysicsTools/Utilities/interface/FunctClone.h" -#include "PhysicsTools/Utilities/interface/rootPlot.h" -#include "PhysicsTools/Utilities/interface/Expression.h" -#include "PhysicsTools/Utilities/interface/HistoPdf.h" -#include "TROOT.h" -#include "TH1.h" -#include "TFile.h" -#include -using namespace boost; -namespace po = boost::program_options; - -#include -#include -#include -#include -#include -#include -using namespace std; - -// A helper function to simplify the main part. -template -ostream& operator<<(ostream& os, const vector& v) { - copy(v.begin(), v.end(), ostream_iterator(cout, " ")); - return os; -} - -//A function that sets istogram contents to 0 -//if they are too small -void fix(TH1* histo) { - for(int i = 1; i <= histo->GetNbinsX(); ++i) { - if(histo->GetBinContent(i) < 0.1) { - histo->SetBinContent(i, 0.0); - histo->SetBinError(i, 0.0); - } - } -} - -typedef funct::FunctExpression Expr; -typedef fit::MultiHistoChiSquare ChiSquared; - -struct sig_tag; -struct bkg_tag; - -int main(int ac, char *av[]) { - gROOT->SetStyle("Plain"); - try { - - double fMin, fMax; - string ext, variable, muCharge; - int binNumber; - po::options_description desc("Allowed options"); - desc.add_options() - ("help,h", "produce help message") - ("input-file,i", po::value< vector >(), "input file") - ("min,m", po::value(&fMin)->default_value(60), "minimum value for fit range") - ("max,M", po::value(&fMax)->default_value(120), "maximum value for fit range") - ("eta_or_pt,v", po::value(&variable)->default_value("eta"), "variable to study (eta or pt)") - ("charge,q", po::value(&muCharge)->default_value("minus"),"muon charge to study (minus or plus)") - ("binNum,b", po::value(&binNumber)->default_value(0), "cynematic bin to fit") - ("plot-format,p", po::value(&ext)->default_value("ps"), - "output plot format") - ; - - po::positional_options_description p; - p.add("input-file", -1); - - po::variables_map vm; - po::store(po::command_line_parser(ac, av). - options(desc).positional(p).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - fit::RootMinuitCommands commands("csa08NewZFit.txt"); - - const unsigned int rebinMuMu = 1, rebinMuTk = 2, rebinMuSa = 1; - // assume that the bin size is 1 GeV!!! - funct::Constant rebinMuMuConst(rebinMuMu), rebinMuTkConst(rebinMuTk), rebinMuSaConst(rebinMuSa); - - if (vm.count("input-file")) { - cout << "Input files are: " - << vm["input-file"].as< vector >() << "\n"; - vector v_file = vm["input-file"].as< vector >(); - for(vector::const_iterator it = v_file.begin(); - it != v_file.end(); ++it) { - TFile * root_file = new TFile(it->c_str(),"read"); - cout <<"start " << endl; - // variable and charge definition at moment in manual way - // string variable = "eta"; - // string muCharge = "minus"; - //////////////////////////////////////// - - stringstream sslabelZMuMu2HLT; - sslabelZMuMu2HLT << "zMuMu_efficiencyAnalyzer/" << variable << "Intervals" << "/zmumu2HLT" << muCharge << "_" << variable << "Range" << binNumber; - stringstream sslabelZMuMu1HLT; - sslabelZMuMu1HLT << "zMuMu_efficiencyAnalyzer/" << variable << "Intervals" << "/zmumu1HLT" << muCharge << "_" << variable << "Range" << binNumber; - stringstream sslabelZMuTk; - sslabelZMuTk << "zMuMu_efficiencyAnalyzer/" << variable << "Intervals" << "/zmutrack" << muCharge << "_" << variable << "Range" << binNumber; - stringstream sslabelZMuSa; - sslabelZMuSa << "zMuMu_efficiencyAnalyzer/" << variable << "Intervals" << "/zmusta" << muCharge << "_" << variable << "Range" << binNumber; - - cout << "histoZMuMu2HLT: " << sslabelZMuMu2HLT.str() << endl; - TH1D * histoZMuMu2HLT = (TH1D*) root_file->Get(sslabelZMuMu2HLT.str().c_str()); - histoZMuMu2HLT->Rebin(rebinMuMu); - fix(histoZMuMu2HLT); - cout << "histoZMuMu1HLT: " << sslabelZMuMu1HLT.str() << endl; - TH1D * histoZMuMu1HLT = (TH1D*) root_file->Get(sslabelZMuMu1HLT.str().c_str()); - histoZMuMu1HLT->Rebin(rebinMuMu); - fix(histoZMuMu1HLT); - cout << "histoZMuTk: " << sslabelZMuTk.str() << endl; - TH1D * histoZMuTk = (TH1D*) root_file->Get(sslabelZMuTk.str().c_str()); - // histoZMuTk->Rebin(rebinMuTk); - fix(histoZMuTk); - cout << "histoZMuSa: " << sslabelZMuSa.str() << endl; - TH1D * histoZMuSa = (TH1D*) root_file->Get(sslabelZMuSa.str().c_str()); - // histoZMuSa->Rebin(rebinMuSa); - fix(histoZMuSa); - cout << ">>> histogram loaded\n"; - - string f_string = *it; - replace(f_string.begin(), f_string.end(), '.', '_'); - replace(f_string.begin(), f_string.end(), '/', '_'); - string plot_string = f_string + "." + ext; - cout << ">>> Input files loaded\n" << f_string << endl; - - const char * kYieldZMuMu = "YieldZMuMu"; - const char * kEfficiencyHLT = "EfficiencyHLT"; - const char * kEfficiencyTk = "EfficiencyTk"; - const char * kEfficiencySa = "EfficiencySa"; - const char * kYieldBkgZMuTk = "YieldBkgZMuTk"; - const char * kBeta = "Beta"; - const char * kLambda = "Lambda"; - // const char * kA0 = "A0"; - // const char * kA1 = "A1"; - // const char * kA2 = "A2"; - - funct::Parameter yieldZMuMu(kYieldZMuMu, commands.par(kYieldZMuMu)); - funct::Parameter effHLT(kEfficiencyHLT, commands.par(kEfficiencyHLT)); - funct::Parameter effTk(kEfficiencyTk, commands.par(kEfficiencyTk)); - funct::Parameter effSa(kEfficiencySa, commands.par(kEfficiencySa)); - funct::Parameter yieldBkgZMuTk(kYieldBkgZMuTk, commands.par(kYieldBkgZMuTk)); - funct::Parameter beta(kBeta, commands.par(kBeta)); - funct::Parameter lambda(kLambda, commands.par(kLambda)); - // funct::Parameter a0(kA0, commands.par(kA0)); - // funct::Parameter a1(kA1, commands.par(kA1)); - // funct::Parameter a2(kA2, commands.par(kA2)); - funct::Constant cFMin(fMin), cFMax(fMax); - - // add zMuMu2HLT and zMuMu1HLT to build pdf - TH1D *histoZMuMu = (TH1D *) histoZMuMu2HLT->Clone(); - histoZMuMu->Sumw2(); - histoZMuMu->Add(histoZMuMu2HLT,histoZMuMu1HLT); - - // count ZMuMu Yield - double nZMuMu = 0; - { - unsigned int nBins = histoZMuMu->GetNbinsX(); - double xMin = histoZMuMu->GetXaxis()->GetXmin(); - double xMax = histoZMuMu->GetXaxis()->GetXmax(); - double deltaX =(xMax - xMin) / nBins; - for(unsigned int i = 0; i < nBins; ++i) { - double x = xMin + (i +.5) * deltaX; - if(x > fMin && x < fMax) - nZMuMu += histoZMuMu->GetBinContent(i+1); - } - } - - // count ZMuMu2HLT Yield - double nZMuMu2HLT = 0; - { - unsigned int nBins = histoZMuMu2HLT->GetNbinsX(); - double xMin = histoZMuMu2HLT->GetXaxis()->GetXmin(); - double xMax = histoZMuMu2HLT->GetXaxis()->GetXmax(); - double deltaX =(xMax - xMin) / nBins; - for(unsigned int i = 0; i < nBins; ++i) { - double x = xMin + (i +.5) * deltaX; - if(x > fMin && x < fMax) - nZMuMu2HLT += histoZMuMu2HLT->GetBinContent(i+1); - } - } - - // count ZMuMu1HLT Yield - double nZMuMu1HLT = 0; - { - unsigned int nBins = histoZMuMu1HLT->GetNbinsX(); - double xMin = histoZMuMu1HLT->GetXaxis()->GetXmin(); - double xMax = histoZMuMu1HLT->GetXaxis()->GetXmax(); - double deltaX =(xMax - xMin) / nBins; - for(unsigned int i = 0; i < nBins; ++i) { - double x = xMin + (i +.5) * deltaX; - if(x > fMin && x < fMax) - nZMuMu1HLT += histoZMuMu1HLT->GetBinContent(i+1); - } - } - - // count ZMuSa Yield (too low statistis so we just check the number assuming 0 background) - double nZMuSa = 0; - { - unsigned int nBins = histoZMuSa->GetNbinsX(); - double xMin = histoZMuSa->GetXaxis()->GetXmin(); - double xMax = histoZMuSa->GetXaxis()->GetXmax(); - double deltaX =(xMax - xMin) / nBins; - for(unsigned int i = 0; i < nBins; ++i) { - double x = xMin + (i +.5) * deltaX; - if(x > fMin && x < fMax) - nZMuSa += histoZMuSa->GetBinContent(i+1); - } - } - - cout << ">>> count of ZMuMu yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu << endl; - cout << ">>> count of ZMuMu2HLT yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu2HLT << endl; - cout << ">>> count of ZMuMu1HLT yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu1HLT << endl; - cout << ">>> count of ZMuSa yield in the range [" << fMin << ", " << fMax << "]: " << nZMuSa << endl; - - - funct::RootHistoPdf zPdfMuTk(*histoZMuMu, fMin, fMax); - zPdfMuTk.rebin(rebinMuTk); - - funct::Numerical<2> _2; - funct::Numerical<1> _1; - - Expr zMuMu2HLTEffTerm = effTk * effSa * effHLT; - Expr zMuMu1HLTEffTerm = effTk * effSa * (_1 - effHLT); - Expr zMuTkEffTerm = effTk * (_1 - effSa); - Expr zMuSaEffTerm = effSa * (_1 - effTk); - - Expr zMuMu2HLT = rebinMuMuConst * zMuMu2HLTEffTerm * yieldZMuMu; - Expr zMuMu1HLT = rebinMuMuConst * zMuMu1HLTEffTerm * yieldZMuMu; - - Expr zMuTkBkg = yieldBkgZMuTk * funct::Exponential(lambda); - //* funct::Polynomial<2>(a0, a1, a2); - Expr zMuTkBkgScaled = rebinMuTkConst * zMuTkBkg; - Expr zMuTk = rebinMuTkConst * (zMuTkEffTerm * yieldZMuMu * zPdfMuTk + zMuTkBkg); - Expr zMuSa = rebinMuSaConst * zMuSaEffTerm * yieldZMuMu; - - TH1D histoZMM2HLTCount("histoZMM2HLTCount", "", 1, fMin, fMax); - histoZMM2HLTCount.Fill(100, nZMuMu2HLT); - TH1D histoZMM1HLTCount("histoZMM1HLTCount", "", 1, fMin, fMax); - histoZMM1HLTCount.Fill(100, nZMuMu1HLT); - TH1D histoZMSCount("histoZMSCount", "", 1, fMin, fMax); - histoZMSCount.Fill(100, nZMuSa); - - ChiSquared chi2(zMuMu2HLT, & histoZMM2HLTCount, - zMuMu1HLT, & histoZMM1HLTCount, - zMuTk, histoZMuTk, - zMuSa, & histoZMSCount, - fMin, fMax); - cout << "N. deg. of freedom: " << chi2.degreesOfFreedom() << endl; - fit::RootMinuit minuit(chi2, true); - commands.add(minuit, yieldZMuMu); - commands.add(minuit, effHLT); - commands.add(minuit, effTk); - commands.add(minuit, effSa); - commands.add(minuit, yieldBkgZMuTk); - commands.add(minuit, lambda); - commands.add(minuit, beta); - // commands.add(minuit, a0); - // commands.add(minuit, a1); - // commands.add(minuit, a2); - commands.run(minuit); - const unsigned int nPar = 7;//WARNING: this must be updated manually for now - ROOT::Math::SMatrix > err; - minuit.getErrorMatrix(err); - std::cout << "error matrix:" << std::endl; - for(unsigned int i = 0; i < nPar; ++i) { - for(unsigned int j = 0; j < nPar; ++j) { - std::cout << err(i, j) << "\t"; - } - std::cout << std::endl; - } - minuit.printFitResults(); - - - double s; - s = 0; - for(int i = 1; i <= histoZMuMu2HLT->GetNbinsX(); ++i) - s += histoZMuMu2HLT->GetBinContent(i); - histoZMuMu2HLT->SetEntries(s); - s = 0; - for(int i = 1; i <= histoZMuMu1HLT->GetNbinsX(); ++i) - s += histoZMuMu1HLT->GetBinContent(i); - histoZMuMu1HLT->SetEntries(s); - s = 0; - for(int i = 1; i <= histoZMuTk->GetNbinsX(); ++i) - s += histoZMuTk->GetBinContent(i); - histoZMuTk->SetEntries(s); - s = 0; - for(int i = 1; i <= histoZMuSa->GetNbinsX(); ++i) - s += histoZMuSa->GetBinContent(i); - histoZMuSa->SetEntries(s); - stringstream mybin; - mybin << muCharge << "_" << variable << binNumber << "_"; - string ZMuMu2HLTPlot = "ZMuMu2HLTFit_muon" + mybin.str() + plot_string; - root::plot(ZMuMu2HLTPlot.c_str(), *histoZMuMu2HLT, zMuMu2HLT, fMin, fMax, - effHLT, effTk, effSa, yieldZMuMu, - kRed, 2, kDashed, 100, - "Z -> #mu #mu mass (2HLT)", "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuMu1HLTPlot = "ZMuMu1HLTFit_muon" + mybin.str() + plot_string; - root::plot(ZMuMu1HLTPlot.c_str(), *histoZMuMu1HLT, zMuMu1HLT, fMin, fMax, - effHLT, effTk, effSa, yieldZMuMu, - kRed, 2, kDashed, 100, - "Z -> #mu #mu mass (1HLT)", "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuTkPlot = "ZMuTkFit_muon" + mybin.str() + plot_string; - root::plot(ZMuTkPlot.c_str(), *histoZMuTk, zMuTk, fMin, fMax, - effHLT, effTk, effSa, yieldZMuMu, - yieldBkgZMuTk, lambda, - //a0, a1, a2, - kRed, 2, kDashed, 100, - "Z -> #mu + (unmatched) track mass", "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - // string ZMuTkPlot = "ZMuTkFit_muon" + muCharge + variable + binNumber + plot_string; - TF1 funZMuTk = root::tf1_t("ZMuTkFunction", zMuTk, fMin, fMax, - effHLT, effTk, effSa, yieldZMuMu, - yieldBkgZMuTk, lambda); - funZMuTk.SetLineColor(kRed); - funZMuTk.SetLineWidth(2); - funZMuTk.SetLineStyle(kDashed); - funZMuTk.SetNpx(10000); - TF1 funZMuTkBkg = root::tf1_t("ZMuTkBack", zMuTkBkgScaled, fMin, fMax, - yieldBkgZMuTk, lambda); - funZMuTkBkg.SetLineColor(kGreen); - funZMuTkBkg.SetLineWidth(2); - funZMuTkBkg.SetLineStyle(kDashed); - funZMuTkBkg.SetNpx(10000); - histoZMuTk->SetTitle("Z -> #mu + (unmatched) track mass"); - histoZMuTk->SetXTitle("#mu + (unmatched) track invariant mass (GeV/c^{2})"); - histoZMuTk->SetYTitle("Events"); - TCanvas *canvas = new TCanvas("canvas"); - histoZMuTk->Draw("e"); - funZMuTkBkg.Draw("same"); - funZMuTk.Draw("same"); - canvas->SaveAs(ZMuTkPlot.c_str()); - canvas->SetLogy(); - string logZMuTkPlot = "log_" + ZMuTkPlot; - canvas->SaveAs(logZMuTkPlot.c_str()); - string ZMuSaPlot = "ZMuSaFit_muon" + mybin.str() + plot_string; - root::plot(ZMuSaPlot.c_str(), *histoZMuSa, zMuSa, fMin, fMax, - effHLT, effSa, effTk, yieldZMuMu, - kRed, 2, kDashed, 10000, - "Z -> #mu + (unmatched) standalone mass", - "#mu + (unmatched) standalone invariant mass (GeV/c^{2})", - "Events"); - - } - - } - } - catch(exception& e) { - cerr << "error: " << e.what() << "\n"; - return 1; - } - catch(...) { - cerr << "Exception of unknown type!\n"; - } - - return 0; -} - - - diff --git a/ElectroWeakAnalysis/ZMuMu/bin/csa08ZFit.cpp b/ElectroWeakAnalysis/ZMuMu/bin/csa08ZFit.cpp deleted file mode 100644 index 7ae7f02213133..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/csa08ZFit.cpp +++ /dev/null @@ -1,384 +0,0 @@ -#include "PhysicsTools/Utilities/interface/Parameter.h" -#include "PhysicsTools/Utilities/interface/ZLineShape.h" -#include "PhysicsTools/Utilities/interface/Gaussian.h" -#include "PhysicsTools/Utilities/interface/Numerical.h" -#include "PhysicsTools/Utilities/interface/Exponential.h" -#include "PhysicsTools/Utilities/interface/Polynomial.h" -#include "PhysicsTools/Utilities/interface/Constant.h" -#include "PhysicsTools/Utilities/interface/Convolution.h" -#include "PhysicsTools/Utilities/interface/Operations.h" -#include "PhysicsTools/Utilities/interface/Integral.h" -#include "PhysicsTools/Utilities/interface/MultiHistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/RootMinuit.h" -#include "PhysicsTools/Utilities/interface/RootMinuitCommands.h" -#include "PhysicsTools/Utilities/interface/FunctClone.h" -#include "PhysicsTools/Utilities/interface/rootPlot.h" -#include "TROOT.h" -#include "TH1.h" -#include "TFile.h" -#include -using namespace boost; -namespace po = boost::program_options; - -#include -#include -#include -#include -#include -#include -using namespace std; - -// A helper function to simplify the main part. -template -ostream& operator<<(ostream& os, const vector& v) { - copy(v.begin(), v.end(), ostream_iterator(cout, " ")); - return os; -} - -//A function that sets istogram contents to 0 -//if they are too small -void fix(TH1* histo) { - for(int i = 1; i <= histo->GetNbinsX(); ++i) { - if(histo->GetBinContent(i) < 0.1) { - histo->SetBinContent(i, 0.0); - histo->SetBinError(i, 0.0); - } - } -} - -typedef funct::GaussIntegrator IntegratorConv; -typedef funct::GaussIntegrator IntegratorNorm; -//typedef funct::TrapezoidIntegrator IntegratorConv; -//typedef funct::TrapezoidIntegrator IntegratorNorm; - -typedef funct::Product::type>::type ZPeakNoNorm; - -NUMERICAL_FUNCT_INTEGRAL(ZPeakNoNorm, IntegratorNorm); - -typedef funct::DefIntegral ZPeakNormFactor; -typedef funct::Ratio::type ZPeak; - -int main(int ac, char *av[]) { - gROOT->SetStyle("Plain"); - try { - typedef funct::Power >::type IsoefficiencytermSQ; - typedef funct::Master::type> ZMuMuFun; - typedef funct::Slave::type> ZMuMuFunClone; - typedef funct::Product >::type, - funct::Power >::type >::type, - IsoefficiencytermSQ >::type ZMuMuEfficiencyTerm; - typedef funct::Product::type ZMuMuSig; - - - typedef funct::Product >::type, - funct::Power >::type >::type, - funct::Difference, IsoefficiencytermSQ >::type>::type ZMuMuNoIsoEfficiencyTerm; - - typedef funct::Product::type ZMuMuNoIsoSig; - - typedef funct::Product, - funct::Product >::type, - funct::Product, funct::Parameter>::type - >::type - >::type - >::type, IsoefficiencytermSQ >::type ZMuTkEfficiencyTerm; - - - - typedef funct::Product::type ZMuTkSig; - typedef funct::Product >::type >::type ZMuTkBkg; - typedef funct::Product::type ZMuTkBkgScaled;//bgtrack rescaled - typedef ZMuTkBkg ZMuMuNoIsoBkg; - typedef ZMuTkBkgScaled ZMuMuNoIsoBkgScaled ;//bgZmmNotIso rescaled - typedef ZMuTkEfficiencyTerm ZMuSaEfficiencyTerm; - typedef funct::Product::type>::type ZMuSaSig; - typedef funct::Product::type ZMuSaBkg; - - // typedef ZMuTkBkg ZMuMuNoIsoBkg; - typedef funct::Product::type>::type ZMuMuNoIso;//3 - typedef funct::Product::type ZMuMu; - typedef funct::Product::type>::type ZMuTk; - typedef funct::Product::type>::type ZMuSa; - typedef fit::MultiHistoChiSquare ChiSquared; - - double fMin, fMax; - string ext; - po::options_description desc("Allowed options"); - desc.add_options() - ("help,h", "produce help message") - ("input-file,i", po::value< vector >(), "input file") - ("min,m", po::value(&fMin)->default_value(60), "minimum value for fit range") - ("max,M", po::value(&fMax)->default_value(120), "maximum value for fit range") - ("plot-format,p", po::value(&ext)->default_value("ps"), - "output plot format") - ; - - po::positional_options_description p; - p.add("input-file", -1); - - po::variables_map vm; - po::store(po::command_line_parser(ac, av). - options(desc).positional(p).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - fit::RootMinuitCommands commands("csa08ZFit.txt"); - - const int rebinMuMuNoIso = 2,rebinMuMu = 1, rebinMuTk = 2, rebinMuSa = 8; - // assume that the bin size is 1 GeV!!! - funct::Constant rebinMuMuNoIsoConst(rebinMuMuNoIso),rebinMuMuConst(rebinMuMu), rebinMuTkConst(rebinMuTk), rebinMuSaConst(rebinMuSa); - - if (vm.count("input-file")) { - cout << "Input files are: " - << vm["input-file"].as< vector >() << "\n"; - vector v_file = vm["input-file"].as< vector >(); - for(vector::const_iterator it = v_file.begin(); - it != v_file.end(); ++it) { - TFile * root_file = new TFile(it->c_str(),"read"); - - TH1D * histoZMuMuNoIso = (TH1D*) root_file->Get("nonIsolatedZToMuMuPlots/zMass"); - histoZMuMuNoIso->Rebin(rebinMuMuNoIso); - fix(histoZMuMuNoIso); - - TH1D * histoZMuMu = (TH1D*) root_file->Get("goodZToMuMuPlots/zMass"); - histoZMuMu->Rebin(rebinMuMu); - fix(histoZMuMu); - - TH1D * histoZMuTk = (TH1D*) root_file->Get("goodZToMuMuOneTrackPlots/zMass"); - histoZMuTk->Rebin(rebinMuTk); - fix(histoZMuTk); - - TH1D * histoZMuSa = (TH1D*) root_file->Get("goodZToMuMuOneStandAloneMuonPlots/zMass"); - histoZMuSa->Rebin(rebinMuSa); - fix(histoZMuSa); - - cout << ">>> histogram loaded\n"; - string f_string = *it; - replace(f_string.begin(), f_string.end(), '.', '_'); - replace(f_string.begin(), f_string.end(), '/', '_'); - string plot_string = f_string + "." + ext; - cout << ">>> Input files loaded\n"; - - const char * kYieldZMuMu = "YieldZMuMu"; - const char * kEfficiencyTk = "EfficiencyTk"; - const char * kEfficiencySa = "EfficiencySa"; - const char * kEfficiencyIso = "EfficiencyIso"; - const char * kYieldBkgZMuTk = "YieldBkgZMuTk"; - const char * kYieldBkgZMuSa = "YieldBkgZMuSa"; - const char * kYieldBkgZMuMuNotIso = "YieldBkgZMuMuNotIso"; - const char * kLambdaZMuMu = "LambdaZMuMu"; - const char * kMass = "Mass"; - const char * kGamma = "Gamma"; - const char * kPhotonFactorZMuMu = "PhotonFactorZMuMu"; - const char * kInterferenceFactorZMuMu = "InterferenceFactorZMuMu"; - const char * kMeanZMuMu = "MeanZMuMu"; - const char * kSigmaZMuMu = "SigmaZMuMu"; - const char * kAlpha = "Alpha"; - const char * kB0 = "B0"; - const char * kB1 = "B1"; - const char * kB2 = "B2"; - const char * kLambda = "Lambda"; - const char * kA0 = "A0"; - const char * kA1 = "A1"; - const char * kA2 = "A2"; - const char * kBeta = "Beta"; - const char * kSigmaZMuSa = "SigmaZMuSa"; - - funct::Parameter lambdaZMuMu(kLambdaZMuMu, commands.par(kLambdaZMuMu)); - funct::Parameter mass(kMass, commands.par(kMass)); - funct::Parameter gamma(kGamma, commands.par(kGamma)); - funct::Parameter photonFactorZMuMu(kPhotonFactorZMuMu, commands.par(kPhotonFactorZMuMu)); - funct::Parameter interferenceFactorZMuMu(kInterferenceFactorZMuMu, commands.par(kInterferenceFactorZMuMu)); - funct::Parameter yieldZMuMu(kYieldZMuMu, commands.par(kYieldZMuMu)); - funct::Parameter efficiencyTk(kEfficiencyTk, commands.par(kEfficiencyTk)); - funct::Parameter efficiencySa(kEfficiencySa, commands.par(kEfficiencySa)); - funct::Parameter efficiencyIso(kEfficiencyIso, commands.par(kEfficiencyIso)); - funct::Parameter yieldBkgZMuTk(kYieldBkgZMuTk, commands.par(kYieldBkgZMuTk)); - funct::Parameter yieldBkgZMuSa(kYieldBkgZMuSa, commands.par(kYieldBkgZMuSa)); - funct::Parameter yieldBkgZMuMuNotIso(kYieldBkgZMuMuNotIso, commands.par(kYieldBkgZMuMuNotIso)); - funct::Parameter meanZMuMu(kMeanZMuMu, commands.par(kMeanZMuMu)); - funct::Parameter sigmaZMuMu(kSigmaZMuMu, commands.par(kSigmaZMuMu)); - funct::Parameter sigmaZMuSa(kSigmaZMuSa, commands.par(kSigmaZMuSa)); - funct::Parameter lambda(kLambda, commands.par(kLambda)); - funct::Parameter alpha(kAlpha, commands.par(kAlpha)); - funct::Parameter beta(kBeta, commands.par(kBeta)); - funct::Parameter b0(kB0, commands.par(kB0)); - funct::Parameter b1(kB1, commands.par(kB1)); - funct::Parameter b2(kB2, commands.par(kB2)); - funct::Parameter a0(kA0, commands.par(kA0)); - funct::Parameter a1(kA1, commands.par(kA1)); - funct::Parameter a2(kA2, commands.par(kA2)); - funct::Constant cFMin(fMin), cFMax(fMax); - - //IntegratorConv integratorConv(20); - //IntegratorNorm integratorNorm(20); - IntegratorConv integratorConv(1.e-4); - IntegratorNorm integratorNorm(1.e-4); - - ZPeakNoNorm zPeakNN = funct::Exponential(lambdaZMuMu) * - funct::conv(funct::ZLineShape(mass, gamma, photonFactorZMuMu, interferenceFactorZMuMu), - funct::Gaussian(meanZMuMu, sigmaZMuMu), - -3*sigmaZMuMu.value(), 3*sigmaZMuMu.value(), integratorConv); - ZPeak zPeak = zPeakNN / ZPeakNormFactor(zPeakNN, cFMin, cFMax, integratorNorm); - ZMuMuFun zMuMuFun = funct::master(yieldZMuMu * zPeak); - ZMuMuFunClone zMuMuFunClone = funct::slave(zMuMuFun); - IsoefficiencytermSQ efficiencyIsoSquare = (efficiencyIso ^ funct::Numerical<2>(2)); //efficienza Isolamento al quadrato - ZMuMuEfficiencyTerm zMuMuEfficiencyTerm = ((efficiencyTk ^ funct::Numerical<2>(2)) * - (efficiencySa ^ funct::Numerical<2>(2))) * efficiencyIsoSquare; - ZMuMuNoIsoEfficiencyTerm zMuMuNoIsoEfficiencyTerm = ((efficiencyTk ^ funct::Numerical<2>(2)) * - (efficiencySa ^ funct::Numerical<2>(2))) * (funct::Numerical<1>(1) - efficiencyIsoSquare); - ZMuMu zMuMu = rebinMuMuConst * (zMuMuEfficiencyTerm * zMuMuFun); - - ZMuTkBkg zMuTkBkg = yieldBkgZMuTk * (funct::Exponential(lambda) * funct::Polynomial<2>(a0, a1, a2)); - ZMuTkBkgScaled zMuTkBkgScaled = rebinMuTkConst * zMuTkBkg; - ZMuTkEfficiencyTerm zMuTkEfficiencyTerm = funct::Numerical<2>(2) * - ((efficiencyTk ^ funct::Numerical<2>(2)) * (efficiencySa * (funct::Numerical<1>(1) - efficiencySa))) * efficiencyIsoSquare; - ZMuTk zMuTk = rebinMuTkConst*(zMuTkEfficiencyTerm * zMuMuFunClone + zMuTkBkg); - - ZMuMuNoIsoBkg zMuMuNoIsoBkg = yieldBkgZMuMuNotIso * (funct::Exponential(alpha) * funct::Polynomial<2>(b0, b1, b2)); - ZMuMuNoIsoBkgScaled zMuMuNoIsoBkgScaled = rebinMuMuNoIsoConst * zMuMuNoIsoBkg; - ZMuMuNoIso zMuMuNoIso = rebinMuMuNoIsoConst * ((zMuMuNoIsoEfficiencyTerm * zMuMuFunClone) + zMuMuNoIsoBkg); - - ZMuSaEfficiencyTerm zMuSaEfficiencyTerm = funct::Numerical<2>(2) * - ((efficiencySa ^ funct::Numerical<2>()) * (efficiencyTk * (funct::Numerical<1>() - efficiencyTk)))* efficiencyIsoSquare ; - ZMuSa zMuSa = rebinMuSaConst *(zMuSaEfficiencyTerm * (yieldZMuMu * funct::Gaussian(mass, sigmaZMuSa)) - + (yieldBkgZMuSa * funct::Exponential(beta))); - - ChiSquared chi2(zMuMu, histoZMuMu, - zMuTk, histoZMuTk, - zMuSa, histoZMuSa, - zMuMuNoIso,histoZMuMuNoIso, - fMin, fMax);//WARNING attento all'ordine in cui hai definito il ch2 - cout << "N. deg. of freedom: " << chi2.numberOfBins() << endl; - fit::RootMinuit minuit(chi2, true); - commands.add(minuit, yieldZMuMu); - commands.add(minuit, efficiencyTk); - commands.add(minuit, efficiencySa); - commands.add(minuit, efficiencyIso); - commands.add(minuit, yieldBkgZMuTk); - commands.add(minuit, yieldBkgZMuSa); - commands.add(minuit, yieldBkgZMuMuNotIso); - commands.add(minuit, lambdaZMuMu); - commands.add(minuit, mass); - commands.add(minuit, gamma); - commands.add(minuit, photonFactorZMuMu); - commands.add(minuit, interferenceFactorZMuMu); - commands.add(minuit, meanZMuMu); - commands.add(minuit, sigmaZMuMu); - commands.add(minuit, sigmaZMuSa); - commands.add(minuit, lambda); - commands.add(minuit, alpha); - commands.add(minuit, beta); - commands.add(minuit, a0); - commands.add(minuit, a1); - commands.add(minuit, a2); - commands.add(minuit, b0); - commands.add(minuit, b1); - commands.add(minuit, b2); - commands.run(minuit); - const unsigned int nPar = 24;//WARNIG: this must be updated manually for now - ROOT::Math::SMatrix > err; - minuit.getErrorMatrix(err); - std::cout << "error matrix:" << std::endl; - for(unsigned int i = 0; i < nPar; ++i) { - for(unsigned int j = 0; j < nPar; ++j) { - std::cout << err(i, j) << "\t"; - } - std::cout << std::endl; - } - minuit.printFitResults(); - - double s; - s = 0; - for(int i = 1; i <= histoZMuMuNoIso->GetNbinsX(); ++i) - s += histoZMuMuNoIso->GetBinContent(i); - histoZMuMuNoIso->SetEntries(s); - for(int i = 1; i <= histoZMuMu->GetNbinsX(); ++i) - s += histoZMuMu->GetBinContent(i); - histoZMuMu->SetEntries(s); - s = 0; - for(int i = 1; i <= histoZMuTk->GetNbinsX(); ++i) - s += histoZMuTk->GetBinContent(i); - histoZMuTk->SetEntries(s); - s = 0; - for(int i = 1; i <= histoZMuSa->GetNbinsX(); ++i) - s += histoZMuSa->GetBinContent(i); - histoZMuSa->SetEntries(s); - string ZMuMuPlot = "ZMuMuFit_" + plot_string; - root::plot(ZMuMuPlot.c_str(), *histoZMuMu, zMuMu, fMin, fMax, - efficiencyTk, efficiencySa, efficiencyIso, - yieldZMuMu, lambdaZMuMu, mass, gamma, photonFactorZMuMu, interferenceFactorZMuMu, - meanZMuMu, sigmaZMuMu, - kRed, 2, kDashed, 100, - "Z -> #mu #mu mass", "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuMuNoIsoPlot = "ZMuMuNoIsoFit_" + plot_string; - root::plot(ZMuMuNoIsoPlot.c_str(), *histoZMuMuNoIso, zMuMuNoIso, fMin, fMax, - efficiencyTk, efficiencySa, efficiencyIso, - yieldZMuMu, lambdaZMuMu, mass, gamma, photonFactorZMuMu, interferenceFactorZMuMu, - meanZMuMu, sigmaZMuMu, - kRed, 2, kDashed, 100, - "Z -> #mu #mu Not Iso mass", "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuTkPlot = "ZMuTkFit_" + plot_string; - TF1 funZMuTk = root::tf1("ZMuTkFunction", zMuTk, fMin, fMax, - efficiencyTk, efficiencySa,efficiencyIso, - yieldZMuMu, lambdaZMuMu, mass, gamma, photonFactorZMuMu, interferenceFactorZMuMu, - meanZMuMu, sigmaZMuMu, - yieldBkgZMuTk, lambda, a0, a1, a2); - funZMuTk.SetLineColor(kRed); - funZMuTk.SetLineWidth(2); - funZMuTk.SetLineStyle(kDashed); - funZMuTk.SetNpx(10000); - TF1 funZMuTkBkg = root::tf1("ZMuTkBack", zMuTkBkgScaled, fMin, fMax, - yieldBkgZMuTk, lambda, a0, a1, a2); - funZMuTkBkg.SetLineColor(kGreen); - funZMuTkBkg.SetLineWidth(2); - funZMuTkBkg.SetLineStyle(kDashed); - funZMuTkBkg.SetNpx(10000); - histoZMuTk->SetTitle("Z -> #mu + (unmatched) track mass"); - histoZMuTk->SetXTitle("#mu + (unmatched) track invariant mass (GeV/c^{2})"); - histoZMuTk->SetYTitle("Events"); - TCanvas *canvas = new TCanvas("canvas"); - histoZMuTk->Draw("e"); - funZMuTk.Draw("same"); - funZMuTkBkg.Draw("same"); - canvas->SaveAs(ZMuTkPlot.c_str()); - canvas->SetLogy(); - string logZMuTkPlot = "log_" + ZMuTkPlot; - canvas->SaveAs(logZMuTkPlot.c_str()); - string ZMuSaPlot = "ZMuSaFit_" + plot_string; - root::plot(ZMuSaPlot.c_str(), *histoZMuSa, zMuSa, fMin, fMax, - efficiencySa, efficiencyTk, efficiencyIso, - yieldZMuMu, mass, sigmaZMuSa, yieldBkgZMuSa, - kRed, 2, kDashed, 10000, - "Z -> #mu + (unmatched) standalone mass", - "#mu + (unmatched) standalone invariant mass (GeV/c^{2})", - "Events"); - } - } - - } - catch(std::exception& e) { - cerr << "error: " << e.what() << "\n"; - return 1; - } - catch(...) { - cerr << "Exception of unknown type!\n"; - } - return 0; -} - - - diff --git a/ElectroWeakAnalysis/ZMuMu/bin/testBias.cpp b/ElectroWeakAnalysis/ZMuMu/bin/testBias.cpp deleted file mode 100644 index 81f33f3ed38ff..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/testBias.cpp +++ /dev/null @@ -1,128 +0,0 @@ -#include "TROOT.h" -#include "PhysicsTools/Utilities/interface/Expression.h" -#include "PhysicsTools/Utilities/interface/BreitWigner.h" -#include "PhysicsTools/Utilities/interface/Exponential.h" -#include "PhysicsTools/Utilities/interface/MultiHistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/RootMinuit.h" -#include "PhysicsTools/Utilities/interface/rootTf1.h" -#include "PhysicsTools/Utilities/interface/Parameter.h" -#include "PhysicsTools/Utilities/interface/Numerical.h" -#include "TH1.h" -#include "TF1.h" -#include "TFile.h" -#include "TRandom3.h" -#include -using namespace std; - -struct sig_tag { }; -struct bkg1_tag{ }; -struct bkg2_tag{ }; - -int main() { - gROOT->SetStyle("Plain"); - typedef funct::FunctExpression Expr; - typedef fit::MultiHistoChiSquare ChiSquared; - TRandom3 rndm; - TFile file("out.root", "RECREATE"); - TH1F hSigPull("sigPull", "sig - pull", 100, -10, 10); - TH1F hEffPull("effPull", "eff - pull", 100, -10, 10); - TH1F hBkg1Pull("bkg1Pull", "bkg1 - pull", 100, -10, 10); - TH1F hBkg2Pull("bkg2Pull", "bkg1 - pull", 100, -10, 10); - bool firstTime = true; - for(unsigned int n=0; n < 1000; ++n) { - const char * kSig = "Sig"; - const char * kEff = "Eff"; - const char * kBkg1 = "Bkg1"; - const char * kBkg2 = "Bkg2"; - const char * kMass = "Mass"; - const char * kGamma = "Gamma"; - const char * kLambda1 = "Lambda1"; - const char * kLambda2 = "Lambda2"; - double sig_true = 1000; - double eff_true = 0.95; - double bkg1_true = 100; - double bkg2_true = 40; - double mass_true = 91.2; - double gamma_true = 2.50; - double lambda1_true = -0.01; - double lambda2_true = -0.005; - - funct::Parameter sig(kSig, sig_true); - funct::Parameter eff(kEff, eff_true); - funct::Parameter bkg1(kBkg1, bkg1_true); - funct::Parameter bkg2(kBkg2, bkg2_true); - funct::Parameter mass(kMass, mass_true); - funct::Parameter gamma(kGamma, gamma_true); - funct::Parameter lambda1(kLambda1, lambda1_true); - funct::Parameter lambda2(kLambda2, lambda2_true); - const double n_rebin = 0.5; - funct::Parameter rebin("rebin", n_rebin); - - funct::Numerical<2> _2; - funct::Numerical<1> _1; - funct::BreitWigner bw(mass, gamma); - funct::Exponential expo1(lambda1); - funct::Exponential expo2(lambda2); - Expr fSig = sig * bw; - Expr fBkg1 = bkg1 * expo1; - Expr fBkg2 = bkg2 * expo2; - Expr f1 = rebin*(_2 * eff * (_1 - eff) * fSig + fBkg1); - Expr f2 = rebin*((eff ^ _2) * fSig + fBkg2); - TF1 funSig = root::tf1_t("fSig", fSig, 0, 200, sig, mass, gamma); - TF1 funBkg1 = root::tf1_t("fBkg1", fBkg1, 0, 200, bkg1, lambda1); - TF1 funBkg2 = root::tf1_t("fBkg2", fBkg2, 0, 200, bkg2, lambda2); - int bins = int(200. / n_rebin); - TH1D histo1("histo1", "Z mass (GeV/c)", bins, 0, 200); - TH1D histo2("histo2", "Z mass (GeV/c)", bins, 0, 200); - double areaBkg1 = funBkg1.Integral(0,200); - double areaBkg2 = funBkg2.Integral(0,200); - histo1.FillRandom("fBkg1", int(rndm.Poisson(areaBkg1))); - histo2.FillRandom("fBkg2", int(rndm.Poisson(areaBkg2))); - double areaSig = funSig.Integral(0, 200); - int nSig = int(rndm.Poisson(areaSig)); - for(int i = 0; i < nSig; ++i) { - bool pass1 = rndm.Uniform() < eff_true; - bool pass2 = rndm.Uniform() < eff_true; - double x = funSig.GetRandom(); - if((pass1 && !pass2) || (!pass1 && pass2)) histo1.Fill(x); - if(pass1 && pass2) histo2.Fill(x); - } - - if(firstTime) { - histo1.Write(); - histo2.Write(); - } - ChiSquared chi2(f1, &histo1, f2, &histo2, 80, 140); - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(sig, 100, 0, 10000); - minuit.addParameter(eff, 0.01, 0, 1); - minuit.addParameter(mass, 2, 70, 120); - minuit.addParameter(gamma, 1, 0, 5); - minuit.addParameter(bkg1, 10, 0, 10000); - minuit.addParameter(bkg2, 10, 0, 10000); - minuit.addParameter(lambda1, 0.1, -5, 0); - minuit.addParameter(lambda2, 0.1, -5, 0); - minuit.minimize(); - minuit.migrad(); - - double sigPull = (sig() - sig_true) / minuit.getParameterError(kSig); - cout << "sig pull: " << sigPull << endl; - double effPull = (eff() - eff_true) / minuit.getParameterError(kEff); - cout << "eff pull: " << effPull << endl; - double bkg1Pull = (bkg1() - bkg1_true) / minuit.getParameterError(kBkg1); - cout << "bkg1Pull: " << bkg1Pull << endl; - double bkg2Pull = (bkg2() - bkg2_true) / minuit.getParameterError(kBkg2); - cout << "bkg2Pull: " << bkg2Pull << endl; - hSigPull.Fill(sigPull); - hEffPull.Fill(effPull); - hBkg1Pull.Fill(bkg1Pull); - hBkg2Pull.Fill(bkg2Pull); - firstTime = false; - } - hSigPull.Write(); - hEffPull.Write(); - hBkg1Pull.Write(); - hBkg2Pull.Write(); - file.Close(); - return 0; -} diff --git a/ElectroWeakAnalysis/ZMuMu/bin/testToy.sh b/ElectroWeakAnalysis/ZMuMu/bin/testToy.sh deleted file mode 100755 index 1e31a2cced175..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/testToy.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/sh -######################### -# -# Driver script for Toy Monte Carlo submission with CRAB -# -# author: Luca Lista, INFN -# -######################### - -if [ -e outputToy ]; then - rm -rf outputToy -fi -mkdir outputToy - -i="$1" -l="$2" -if [ "$i" == "help" ]; then - echo "usage: testToy.sh " - exit 0; -fi -if [ "$i" = "" ]; then - echo "Error: missing job index" - exit 1; -fi -if [ "$i" = "" ]; then - echo "Error: missing job index" - exit 1; -fi -if [ "$l" = "" ]; then - echo "Error: missing luminosity" - exit 1; -fi - -rm -f fitResults.txt -echo "# par_name init_val fin_val par_err global_corr" > fitResults.txt -((j = 1)) -((jmax=$i)) - -echo "job number: #$i" -echo "j value: #$j" -while [ $j -le $jmax ]; do -echo "running toy MC : zMuMuRooFit -i Analisi_45pb.root -o out.root -r 2 2 10 60 -t -s $j -l $l" - zMuMuRooFit -i Analisi_45pb.root -o out.root -r 2 2 10 60 -t -s $j -l $l >& log.txt - # retrieve fit values and store into a single file - grep " Yield" log.txt >> fitResults.txt - grep " a0" log.txt >> fitResults.txt - grep " a1" log.txt >> fitResults.txt - grep " a2" log.txt >> fitResults.txt - grep " alpha" log.txt >> fitResults.txt - grep " b0" log.txt >> fitResults.txt - grep " b1" log.txt >> fitResults.txt - grep " b2" log.txt >> fitResults.txt - grep " beta" log.txt >> fitResults.txt - grep " eff_hlt" log.txt >> fitResults.txt - grep " eff_iso" log.txt >> fitResults.txt - grep " eff_sa" log.txt >> fitResults.txt - grep " eff_tk" log.txt >> fitResults.txt - grep " nbkg_mumuNotIso" log.txt >> fitResults.txt - grep " nbkg_mutrk" log.txt >> fitResults.txt - mv mass.eps outputToy/mass_$j.eps - mv out.root outputToy/out_$j.root - mv log.txt outputToy/log_$j.txt - mv fitResults.txt outputToy/ - ((j= $j + 1)) -done -echo "pack the results" -tar cvfz outputToy.tgz outputToy/ - diff --git a/ElectroWeakAnalysis/ZMuMu/bin/toyMonteCarlo.cpp b/ElectroWeakAnalysis/ZMuMu/bin/toyMonteCarlo.cpp deleted file mode 100644 index 1c37e41754777..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/toyMonteCarlo.cpp +++ /dev/null @@ -1,366 +0,0 @@ -/*************************/ -/* */ -/* author: Pasquale Noli */ -/* INFN Naples */ -/* Toy Montecarlo */ -/* */ -/*************************/ - -//root include -#include "TRandom3.h" -#include "TH1.h" -#include "TF1.h" -#include "TFile.h" -#include "TDirectory.h" -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -void fillRandom(int N, TH1F *pdf, TH1F *histo, double min, double max, TRandom3 *rndm) { - int i = 0; - double m = 0; - const double maxY = pdf->GetMaximum(); - const double nBins = pdf->GetNbinsX(); - const double xMin = pdf->GetXaxis()->GetXmin(); - const double xMax = pdf->GetXaxis()->GetXmax(); - do { - m = rndm->Uniform(min, max); - int n = (int)((m - xMin) / (xMax - xMin) * nBins) + 1; - double y = pdf->GetBinContent(n); - if (rndm->Uniform() < y / maxY) { - histo->Fill(m); - i++; - } - } while (i < N); -} - -enum MuTag { globalMu, trackerMu, standaloneMu, undefinedMu }; - -MuTag mu(double effTrk, double effSa, TRandom3 *rndm) { - double _isTraker = rndm->Rndm(); - double _isStandAlone = rndm->Rndm(); - if ((_isTraker < effTrk) && (_isStandAlone < effSa)) - return globalMu; - if ((_isStandAlone < effSa) && (_isTraker > effTrk)) - return standaloneMu; - if ((_isTraker < effTrk) && (_isStandAlone > effSa)) - return trackerMu; - return undefinedMu; -} - -bool efficiencyTag(double eff, TRandom3 *rndm) { return (rndm->Rndm() < eff); } - -class BkgShape { -public: - BkgShape(double min, double max, double slope, double a0, double a1, double a2) - : norm_(1), min_(min), max_(max), fmax_(0), slope_(slope), a0_(a0), a1_(a1), a2_(a2) { - normalize(); - } - double operator()(double x) const { - if (x < min_ || x > max_) - return 0; - return exp(-slope_ * x) * (a0_ + (a1_ + a2_ * x) * x); - } - double rndm(TRandom3 *rndm) const { - double x, f; - do { - x = rndm->Uniform(min_, max_); - f = operator()(x); - } while (rndm->Uniform(0, fmax_) > f); - return x; - } - double integral() const { return norm_; } - -private: - void normalize() { - static const unsigned int steps = 1000; - double s = 0, x, f; - double base = max_ - min_; - double dx = base / steps; - for (unsigned int n = 0; n < steps; ++n) { - x = min_ + (n * dx); - s += (f = operator()(x)) * dx; - if (f > fmax_) - fmax_ = f; - } - fmax_ *= 1.001; //max of f - norm_ = s; - } - double norm_, min_, max_, fmax_; - double slope_, a0_, a1_, a2_; -}; - -int main(int argc, char *argv[]) { - TRandom3 *rndm = new TRandom3(); - int o; - char *endPtr; - const char *pdf("analysis_Z_133pb_trackIso_3.root"); - double yield(3810.0), effTrk(.996), effSa(.987), effHlt(.913), effIso(.982), factor(1.0), MIN(60.), MAX(120.); - double slopeMuTk(0.02), a0MuTk(1.0), a1MuTk(0.0), a2MuTk(0.0); - double slopeMuMuNonIso(0.02), a0MuMuNonIso(1.0), a1MuMuNonIso(0.0), a2MuMuNonIso(0.0); - double slopeMuSa(0.02), a0MuSa(1.0), a1MuSa(0.0), a2MuSa(0.0); - // double yield(50550.0), effTrk(.998364), effSa(.989626),effHlt(.915496), effIso(.978575),factor(1.0); - // double slopeMuTk(.015556), a0MuTk(.00035202), a1MuTk(2.99663), a2MuTk(-0.0211138); - // double slopeMuMuNonIso(.0246876),a0MuMuNonIso(.884777), a1MuMuNonIso(6.67684), a2MuMuNonIso(-0.0523693); - // BkgShape zMuTkBkgPdf(60., 120., slopeMuTk, a0MuTk, a1MuTk, a2MuTk); - // BkgShape zMuMuNonIsoBkgPdf(60., 120., slopeMuMuNonIso, a0MuMuNonIso, a1MuMuNonIso, a2MuMuNonIso); - - int expt(1), seed(1); - - while ((o = getopt(argc, argv, "p:n:s:y:m:M:f:T:S:H:I:h")) != EOF) { - switch (o) { - case 'p': - pdf = optarg; - break; - case 'n': - expt = strtoul(optarg, &endPtr, 0); - break; - case 's': - seed = strtoul(optarg, &endPtr, 0); - break; - case 'y': - yield = strtoul(optarg, &endPtr, 0); - break; - case 'm': - MIN = strtoul(optarg, &endPtr, 0); - break; - case 'M': - MAX = strtoul(optarg, &endPtr, 0); - break; - case 'f': - factor = strtoul(optarg, &endPtr, 0); - break; - case 'T': - effTrk = strtod(optarg, &endPtr); - break; - case 'S': - effSa = strtod(optarg, &endPtr); - break; - case 'H': - effHlt = strtod(optarg, &endPtr); - break; - case 'I': - effIso = strtod(optarg, &endPtr); - break; - case 'h': - cout << " -p : input root file for pdf" << endl - << " -n : number of experiment (default 1)" << endl - << " -s : seed for generator (default 1)" << endl - << " -T : efficiency of track (default 0.9984)" << endl - << " -S : efficiency of standAlone(default 0.9896)" << endl - << " -I : efficiency of Isolation (default 0.9786)" << endl - << " -H : efficiency of HLT (default 0.9155)" << endl - << " -y : yield (default 50550)" << endl - << " -f : scaling_factor for bkg (default 1.0)" << endl - << " -m : Min (60)" << endl - << " -M : Max (120)" << endl; - break; - default: - break; - } - } - BkgShape zMuTkBkgPdf(MIN, MAX, slopeMuTk, a0MuTk, a1MuTk, a2MuTk); - BkgShape zMuMuNonIsoBkgPdf(MIN, MAX, slopeMuMuNonIso, a0MuMuNonIso, a1MuMuNonIso, a2MuMuNonIso); - BkgShape zMuSaBkgPdf(MIN, MAX, slopeMuSa, a0MuSa, a1MuSa, a2MuSa); - MuTag mu1, mu2; - rndm->SetSeed(seed); - int count = 0; - //PDF - TFile *inputfile = new TFile(pdf); - TH1F *pdfzmm = (TH1F *)inputfile->Get("goodZToMuMuPlots/zMass"); //pdf signal Zmumu(1hlt,2hlt), ZMuMunotIso, ZmuTk - TH1F *pdfzmsa = (TH1F *)inputfile->Get("zmumuSaMassHistogram/zMass"); //pdf signal ZmuSa - double IntegralzmumuNoIsobkg = factor * (zMuMuNonIsoBkgPdf.integral()); - double Integralzmutkbkg = factor * (zMuTkBkgPdf.integral()); - double Integralzmusabkg = factor * (zMuSaBkgPdf.integral()); - - for (int j = 1; j <= expt; ++j) { //loop on number of experiments - int N0 = rndm->Poisson(yield); - int nMuTkBkg = rndm->Poisson(Integralzmutkbkg); - int nMuMuNonIsoBkg = rndm->Poisson(IntegralzmumuNoIsobkg); - int nMuSaBkg = rndm->Poisson(Integralzmusabkg); - int Nmumu = 0; - int N2HLT = 0; - int N1HLT = 0; - int NISO = 0; - int NSa = 0; - int NTk = 0; - for (int i = 0; i < N0; ++i) { //loop on Z Yield - mu1 = mu(effTrk, effSa, rndm); - mu2 = mu(effTrk, effSa, rndm); - bool iso1 = efficiencyTag(effIso, rndm); - bool iso2 = efficiencyTag(effIso, rndm); - bool trig1 = efficiencyTag(effHlt, rndm); - bool trig2 = efficiencyTag(effHlt, rndm); - - if (mu1 == globalMu && mu2 == globalMu) { - if (iso1 && iso2) { //two global mu isolated - if (trig1 && trig2) - N2HLT++; //two trigger - else if ((trig1 && !trig2) || (!trig1 && trig2)) - N1HLT++; //one trigger - } else if (!iso1 || !iso2) { //at least one not iso - if (trig1 || trig2) - NISO++; //at least one trigger - } - } //end global - else if (((mu1 == globalMu && trig1) && mu2 == standaloneMu) || - ((mu2 == globalMu && trig2) && mu1 == standaloneMu)) { - if (iso1 && iso2) - NSa++; - } //end mu sa - else if (((mu1 == globalMu && trig1) && mu2 == trackerMu) || ((mu2 == globalMu && trig2) && mu1 == trackerMu)) { - if (iso1 && iso2) - NTk++; - } //end mu tk - - } //end of generation given the yield - - Nmumu = N2HLT + N1HLT; - - //Define signal Histo - TH1F *zMuMu = new TH1F("zMass", "zMass", 200, 0, 200); - TH1F *zMuMu2HLT = new TH1F("zMass", "zMass", 200, 0, 200); - TH1F *zMuMu1HLT = new TH1F("zMass", "zMass", 200, 0, 200); - TH1F *zMuMuNotIso = new TH1F("zMass", "zMass", 200, 0, 200); - TH1F *zMuSa = new TH1F("zMass", "zMass", 200, 0, 200); - TH1F *zMuTk = new TH1F("zMass", "zMass", 200, 0, 200); - pdfzmsa->SetName("zMass"); - - //Fill signal Histo - - fillRandom(Nmumu, pdfzmm, zMuMu, MIN, MAX, rndm); - fillRandom(N2HLT, pdfzmm, zMuMu2HLT, MIN, MAX, rndm); - fillRandom(N1HLT, pdfzmm, zMuMu1HLT, MIN, MAX, rndm); - fillRandom(NISO, pdfzmm, zMuMuNotIso, MIN, MAX, rndm); - fillRandom(NSa, pdfzmsa, zMuSa, MIN, MAX, rndm); - fillRandom(NTk, pdfzmm, zMuTk, MIN, MAX, rndm); - - //output - char head[30]; - sprintf(head, "zmm_%d", j); - string tail = ".root"; - string title = head + tail; - - TFile *outputfile = new TFile(title.c_str(), "RECREATE"); - - //Hierarchy directory - - TDirectory *goodZToMuMu = outputfile->mkdir("goodZToMuMuPlots"); - TDirectory *goodZToMuMu2HLT = outputfile->mkdir("goodZToMuMu2HLTPlots"); - TDirectory *goodZToMuMu1HLT = outputfile->mkdir("goodZToMuMu1HLTPlots"); - TDirectory *nonIsolatedZToMuMu = outputfile->mkdir("nonIsolatedZToMuMuPlots"); - TDirectory *goodZToMuMuOneStandAloneMuon = outputfile->mkdir("goodZToMuMuOneStandAloneMuonPlots"); - TDirectory *zmumuSaMassHistogram = outputfile->mkdir("zmumuSaMassHistogram"); - TDirectory *goodZToMuMuOneTrack = outputfile->mkdir("goodZToMuMuOneTrackPlots"); - - goodZToMuMu->cd(); - zMuMu->Write(); - - goodZToMuMu2HLT->cd(); - zMuMu2HLT->Write(); - - goodZToMuMu1HLT->cd(); - zMuMu1HLT->Write(); - - nonIsolatedZToMuMu->cd(); - zMuMuNotIso->Write(); - - goodZToMuMuOneStandAloneMuon->cd(); - zMuSa->Write(); - - zmumuSaMassHistogram->cd(); - pdfzmsa->Write(); - - goodZToMuMuOneTrack->cd(); - zMuTk->Write(); - - outputfile->Write(); - outputfile->Close(); - - delete zMuMu; - delete zMuMu2HLT; - delete zMuMu1HLT; - delete zMuMuNotIso; - delete zMuSa; - delete zMuTk; - - //Define Background Histo - TH1F *zMuMuBkg = new TH1F("zMass", "zMass", 200, 0, 200); - TH1F *zMuMu2HLTBkg = new TH1F("zMass", "zMass", 200, 0, 200); - TH1F *zMuMu1HLTBkg = new TH1F("zMass", "zMass", 200, 0, 200); - TH1F *zMuSaBkg = new TH1F("zMass", "zMass", 200, 0, 200); - TH1F *zMuSafromGoldenBkg = new TH1F("zMass", "zMass", 200, 0, 200); - TH1F *zMuMuNotIsoBkg = new TH1F("zMass", "zMass", 200, 0, 200); - TH1F *zMuTkBkg = new TH1F("zMass", "zMass", 200, 0, 200); - - //Fill >Bkg Histograms - for (int i = 0; i < nMuTkBkg; ++i) { - zMuTkBkg->Fill(zMuTkBkgPdf.rndm(rndm)); - } - for (int i = 0; i < nMuMuNonIsoBkg; ++i) { - zMuMuNotIsoBkg->Fill(zMuMuNonIsoBkgPdf.rndm(rndm)); - } - for (int i = 0; i < nMuSaBkg; ++i) { - zMuSaBkg->Fill(zMuSaBkgPdf.rndm(rndm)); - } - char head2[30]; - sprintf(head2, "bkg_%d", j); - string title2 = head2 + tail; - TFile *outputfile2 = new TFile(title2.c_str(), "RECREATE"); - - //Hierarchy directory - TDirectory *goodZToMuMu2 = outputfile2->mkdir("goodZToMuMuPlots"); - TDirectory *goodZToMuMu2HLT2 = outputfile2->mkdir("goodZToMuMu2HLTPlots"); - TDirectory *goodZToMuMu1HLT2 = outputfile2->mkdir("goodZToMuMu1HLTPlots"); - TDirectory *nonIsolatedZToMuMu2 = outputfile2->mkdir("nonIsolatedZToMuMuPlots"); - TDirectory *goodZToMuMuOneStandAloneMuon2 = outputfile2->mkdir("goodZToMuMuOneStandAloneMuonPlots"); - TDirectory *zmumuSaMassHistogram2 = outputfile2->mkdir("zmumuSaMassHistogram"); - TDirectory *goodZToMuMuOneTrack2 = outputfile2->mkdir("goodZToMuMuOneTrackPlots"); - - goodZToMuMu2->cd(); - zMuMuBkg->Write(); - - goodZToMuMu2HLT2->cd(); - zMuMu2HLTBkg->Write(); - - goodZToMuMu1HLT2->cd(); - zMuMu1HLTBkg->Write(); - - nonIsolatedZToMuMu2->cd(); - zMuMuNotIsoBkg->Write(); - - goodZToMuMuOneStandAloneMuon2->cd(); - zMuSaBkg->Write(); - - zmumuSaMassHistogram2->cd(); - zMuSafromGoldenBkg->Write(); - - goodZToMuMuOneTrack2->cd(); - zMuTkBkg->Write(); - - outputfile2->Write(); - outputfile2->Close(); - - delete zMuMuBkg; - delete zMuMu2HLTBkg; - delete zMuMu1HLTBkg; - delete zMuMuNotIsoBkg; - delete zMuSafromGoldenBkg; - delete zMuSaBkg; - delete zMuTkBkg; - - // cout< -#include -#include -#include -#include -#include -#include -using namespace std; - -// A helper function to simplify the main part. -template -ostream& operator<<(ostream& os, const vector& v) { - copy(v.begin(), v.end(), ostream_iterator(cout, " ")); - return os; -} - -// A function that get histogram and sets contents to 0 -// if entries are too small -TH1* getHisto(TFile* file, const char* name, unsigned int rebin) { - TObject* h = file->Get(name); - if (h == nullptr) - throw edm::Exception(edm::errors::Configuration) << "Can't find object " << name << "\n"; - TH1* histo = dynamic_cast(h); - if (histo == nullptr) - throw edm::Exception(edm::errors::Configuration) - << "Object " << name << " is of type " << h->ClassName() << ", not TH1\n"; - histo->Rebin(rebin); - for (int i = 1; i <= histo->GetNbinsX(); ++i) { - if (histo->GetBinContent(i) < 0.1) { - histo->SetBinContent(i, 0.0); - histo->SetBinError(i, 0.0); - } - } - return histo; -} - -struct sig_tag; -struct bkg_tag; - -typedef funct::FunctExpression Expr; -typedef fit::HistoChiSquare ExprChi2; -typedef fit::HistoPoissonLikelihoodRatio ExprPLR; - -double fMin, fMax; -unsigned int rebinMuMuNoIso, rebinMuMu = 1, rebinMuMu1HLT, rebinMuMu2HLT, rebinMuTk, rebinMuSa; -// assume that the bin size is 1 GeV!!! -string ext, region; -bool nonIsoTemplateFromMC; - -template -struct PlotPrefix {}; - -template <> -struct PlotPrefix { - static string str() { return "chi2"; } -}; - -template <> -struct PlotPrefix { - static string str() { return "plr"; } -}; - -template -int main_t(const vector& v_file) { - typedef fit::MultiHistoChiSquare ChiSquared; - fit::RootMinuitCommands commands("zChi2Fit.txt"); - - cout << "minuit command file completed" << endl; - - funct::Constant rebinMuMuNoIsoConst(rebinMuMuNoIso), rebinMuMuConst(rebinMuMu), rebinMuMu1HLTConst(rebinMuMu1HLT), - rebinMuMu2HLTConst(rebinMuMu2HLT), rebinMuTkConst(rebinMuTk), rebinMuSaConst(rebinMuSa); - - for (vector::const_iterator it = v_file.begin(); it != v_file.end(); ++it) { - TFile* root_file = new TFile(it->c_str(), "read"); - - // default when region==all - // TH1 * histoZMuMuNoIso = getHisto(root_file, "nonIsolatedZToMuMuPlots/zMass",rebinMuMuNoIso); - TH1* histoZMuMuNoIso = getHisto(root_file, "oneNonIsolatedZToMuMuPlots/zMass", rebinMuMuNoIso); - TH1* histoZMuMu = getHisto(root_file, "goodZToMuMuPlots/zMass", rebinMuMu); - TH1* histoZMuMu1HLT = getHisto(root_file, "goodZToMuMu1HLTPlots/zMass", rebinMuMu1HLT); - TH1* histoZMuMu2HLT = getHisto(root_file, "goodZToMuMu2HLTPlots/zMass", rebinMuMu2HLT); - TH1* histoZMuTk = getHisto(root_file, "goodZToMuMuOneTrackPlots/zMass", rebinMuTk); - TH1* histoZMuSa = getHisto(root_file, "goodZToMuMuOneStandAloneMuonPlots/zMass", rebinMuSa); - TH1* histoZMuSaFromMuMu = getHisto(root_file, "zmumuSaMassHistogram/zMass", rebinMuSa); - - TH1* histoZMuMuNoIsoTemplateFromMC = histoZMuMu; - if (nonIsoTemplateFromMC) { - // histoZMuMuNoIsoTemplateFromMC = getHisto(root_file, "nonIsolatedZToMuMuPlotsMC/zMass",rebinMuMu); - histoZMuMuNoIsoTemplateFromMC = getHisto(root_file, "oneNonIsolatedZToMuMuPlotsMC/zMass", rebinMuMu); - } - if (region == "barrel") { - histoZMuMuNoIso = getHisto(root_file, "nonIsolatedZToMuMuPlotsBarrel/zMass", rebinMuMuNoIso); - histoZMuMu = getHisto(root_file, "goodZToMuMuPlotsBarrel/zMass", rebinMuMu); - histoZMuMu1HLT = getHisto(root_file, "goodZToMuMu1HLTPlotsBarrel/zMass", rebinMuMu1HLT); - histoZMuMu2HLT = getHisto(root_file, "goodZToMuMu2HLTPlotsBarrel/zMass", rebinMuMu2HLT); - histoZMuTk = getHisto(root_file, "goodZToMuMuOneTrackPlotsBarrel/zMass", rebinMuTk); - histoZMuSa = getHisto(root_file, "goodZToMuMuOneStandAloneMuonPlotsBarrel/zMass", rebinMuSa); - histoZMuSaFromMuMu = getHisto(root_file, "zmumuSaMassHistogramBarrel/zMass", rebinMuSa); - } - - if (region == "endcap") { - histoZMuMuNoIso = getHisto(root_file, "nonIsolatedZToMuMuPlotsEndCap/zMass", rebinMuMuNoIso); - histoZMuMu = getHisto(root_file, "goodZToMuMuPlotsEndCap/zMass", rebinMuMu); - histoZMuMu1HLT = getHisto(root_file, "goodZToMuMu1HLTPlotsEndCap/zMass", rebinMuMu1HLT); - histoZMuMu2HLT = getHisto(root_file, "goodZToMuMu2HLTPlotsEndCap/zMass", rebinMuMu2HLT); - histoZMuTk = getHisto(root_file, "goodZToMuMuOneTrackPlotsEndCap/zMass", rebinMuTk); - histoZMuSa = getHisto(root_file, "goodZToMuMuOneStandAloneMuonPlotsEndCap/zMass", rebinMuSa); - histoZMuSaFromMuMu = getHisto(root_file, "zmumuSaMassHistogramEndCap/zMass", rebinMuSa); - } - - if (region == "barrend") { - histoZMuMuNoIso = getHisto(root_file, "nonIsolatedZToMuMuPlotsBarrEnd/zMass", rebinMuMuNoIso); - histoZMuMu = getHisto(root_file, "goodZToMuMuPlotsBarrEnd/zMass", rebinMuMu); - histoZMuMu1HLT = getHisto(root_file, "goodZToMuMu1HLTPlotsBarrEnd/zMass", rebinMuMu1HLT); - histoZMuMu2HLT = getHisto(root_file, "goodZToMuMu2HLTPlotsBarrEnd/zMass", rebinMuMu2HLT); - histoZMuTk = getHisto(root_file, "goodZToMuMuOneTrackPlotsBarrEnd/zMass", rebinMuTk); - histoZMuSa = getHisto(root_file, "goodZToMuMuOneStandAloneMuonPlotsBarrEnd/zMass", rebinMuSa); - histoZMuSaFromMuMu = getHisto(root_file, "zmumuSaMassHistogramBarrEnd/zMass", rebinMuSa); - } - - if (region != "endcap" && region != "barrel" && region != "barrend" && region != "all") { - cout << "not a valid region selected" << endl; - cout << "possible choises are: all, barrel, endcap, barrend " << endl; - return 0; - } - - cout << ">>> histogram loaded\n"; - string f_string = *it + "_" + PlotPrefix::str() + "_"; - replace(f_string.begin(), f_string.end(), '.', '_'); - replace(f_string.begin(), f_string.end(), '/', '_'); - string plot_string = f_string + "." + ext; - cout << ">>> Input files loaded\n"; - - const char* kYieldZMuMu = "YieldZMuMu"; - const char* kEfficiencyTk = "EfficiencyTk"; - const char* kEfficiencySa = "EfficiencySa"; - const char* kEfficiencyIso = "EfficiencyIso"; - const char* kEfficiencyHLT = "EfficiencyHLT"; - const char* kYieldBkgZMuTk = "YieldBkgZMuTk"; - const char* kYieldBkgZMuSa = "YieldBkgZMuSa"; - const char* kYieldBkgZMuMuNotIso = "YieldBkgZMuMuNotIso"; - const char* kAlpha = "Alpha"; - const char* kBeta = "Beta"; - const char* kLambda = "Lambda"; - const char* kA0 = "A0"; - const char* kA1 = "A1"; - const char* kA2 = "A2"; - const char* kB0 = "B0"; - const char* kB1 = "B1"; - const char* kB2 = "B2"; - const char* kC0 = "C0"; - const char* kC1 = "C1"; - const char* kC2 = "C2"; - - funct::Parameter yieldZMuMu(kYieldZMuMu, commands.par(kYieldZMuMu)); - funct::Parameter effTk(kEfficiencyTk, commands.par(kEfficiencyTk)); - funct::Parameter effSa(kEfficiencySa, commands.par(kEfficiencySa)); - funct::Parameter effIso(kEfficiencyIso, commands.par(kEfficiencyIso)); - funct::Parameter effHLT(kEfficiencyHLT, commands.par(kEfficiencyHLT)); - funct::Parameter yieldBkgZMuTk(kYieldBkgZMuTk, commands.par(kYieldBkgZMuTk)); - funct::Parameter yieldBkgZMuSa(kYieldBkgZMuSa, commands.par(kYieldBkgZMuSa)); - funct::Parameter yieldBkgZMuMuNotIso(kYieldBkgZMuMuNotIso, commands.par(kYieldBkgZMuMuNotIso)); - funct::Parameter alpha(kAlpha, commands.par(kAlpha)); - funct::Parameter beta(kBeta, commands.par(kBeta)); - funct::Parameter lambda(kLambda, commands.par(kLambda)); - funct::Parameter a0(kA0, commands.par(kA0)); - funct::Parameter a1(kA1, commands.par(kA1)); - funct::Parameter a2(kA2, commands.par(kA2)); - funct::Parameter b0(kB0, commands.par(kB0)); - funct::Parameter b1(kB1, commands.par(kB1)); - funct::Parameter b2(kB2, commands.par(kB2)); - funct::Parameter c0(kC0, commands.par(kC0)); - funct::Parameter c1(kC1, commands.par(kC1)); - funct::Parameter c2(kC2, commands.par(kC2)); - funct::Constant cFMin(fMin), cFMax(fMax); - - // count ZMuMu Yield - double nZMuMu = 0, nZMuMu1HLT = 0, nZMuMu2HLT = 0; - { - unsigned int nBins = histoZMuMu->GetNbinsX(); - double xMin = histoZMuMu->GetXaxis()->GetXmin(); - double xMax = histoZMuMu->GetXaxis()->GetXmax(); - double deltaX = (xMax - xMin) / nBins; - for (unsigned int i = 0; i < nBins; ++i) { - double x = xMin + (i + .5) * deltaX; - if (x > fMin && x < fMax) { - nZMuMu += histoZMuMu->GetBinContent(i + 1); - nZMuMu1HLT += histoZMuMu1HLT->GetBinContent(i + 1); - nZMuMu2HLT += histoZMuMu2HLT->GetBinContent(i + 1); - } - } - } - // aggiungi 1HLT 2HLT - cout << ">>> count of ZMuMu yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu << endl; - cout << ">>> count of ZMuMu (1HLT) yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu1HLT << endl; - cout << ">>> count of ZMuMu (2HLT) yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu2HLT << endl; - funct::RootHistoPdf zPdfMuMu(*histoZMuMu, fMin, fMax); - //assign ZMuMu as pdf - funct::RootHistoPdf zPdfMuMuNonIso = zPdfMuMu; - if (nonIsoTemplateFromMC) { - funct::RootHistoPdf zPdfMuMuNoIsoFromMC(*histoZMuMuNoIsoTemplateFromMC, fMin, fMax); - zPdfMuMuNonIso = zPdfMuMuNoIsoFromMC; - } - - funct::RootHistoPdf zPdfMuTk = zPdfMuMu; - funct::RootHistoPdf zPdfMuMu1HLT = zPdfMuMu; - funct::RootHistoPdf zPdfMuMu2HLT = zPdfMuMu; - funct::RootHistoPdf zPdfMuSa(*histoZMuSaFromMuMu, fMin, fMax); - zPdfMuMuNonIso.rebin(rebinMuMuNoIso / rebinMuMu); - zPdfMuTk.rebin(rebinMuTk / rebinMuMu); - zPdfMuMu1HLT.rebin(rebinMuMu1HLT / rebinMuMu); - zPdfMuMu2HLT.rebin(rebinMuMu2HLT / rebinMuMu); - - funct::Numerical<2> _2; - funct::Numerical<1> _1; - - //Efficiency term - Expr zMuMuEff1HLTTerm = _2 * (effTk ^ _2) * (effSa ^ _2) * (effIso ^ _2) * effHLT * (_1 - effHLT); - Expr zMuMuEff2HLTTerm = (effTk ^ _2) * (effSa ^ _2) * (effIso ^ _2) * (effHLT ^ _2); - // Expr zMuMuNoIsoEffTerm = (effTk ^ _2) * (effSa ^ _2) * (_1 - (effIso ^ _2)) * (_1 - ((_1 - effHLT)^_2)); - // change to both hlt and one not iso - Expr zMuMuNoIsoEffTerm = _2 * (effTk ^ _2) * (effSa ^ _2) * effIso * (_1 - effIso) * (effHLT ^ _2); - Expr zMuTkEffTerm = _2 * (effTk ^ _2) * effSa * (_1 - effSa) * (effIso ^ _2) * effHLT; - Expr zMuSaEffTerm = _2 * (effSa ^ _2) * effTk * (_1 - effTk) * (effIso ^ _2) * effHLT; - - Expr zMuMu1HLT = rebinMuMu1HLTConst * zMuMuEff1HLTTerm * yieldZMuMu; - Expr zMuMu2HLT = rebinMuMu2HLTConst * zMuMuEff2HLTTerm * yieldZMuMu; - - Expr zMuTkBkg = yieldBkgZMuTk * funct::Exponential(lambda) * funct::Polynomial<2>(a0, a1, a2); - Expr zMuTkBkgScaled = rebinMuTkConst * zMuTkBkg; - Expr zMuTk = rebinMuTkConst * (zMuTkEffTerm * yieldZMuMu * zPdfMuTk + zMuTkBkg); - - Expr zMuMuNoIsoBkg = yieldBkgZMuMuNotIso * funct::Exponential(alpha) * funct::Polynomial<2>(b0, b1, b2); - Expr zMuMuNoIsoBkgScaled = rebinMuMuNoIsoConst * zMuMuNoIsoBkg; - Expr zMuMuNoIso = rebinMuMuNoIsoConst * (zMuMuNoIsoEffTerm * yieldZMuMu * zPdfMuMuNonIso + zMuMuNoIsoBkg); - - Expr zMuSaBkg = yieldBkgZMuSa * funct::Exponential(beta) * funct::Polynomial<2>(c0, c1, c2); - Expr zMuSaBkgScaled = rebinMuSaConst * zMuSaBkg; - Expr zMuSa = rebinMuSaConst * (zMuSaEffTerm * yieldZMuMu * zPdfMuSa + zMuSaBkg); - - TH1D histoZCount1HLT("histoZCount1HLT", "", 1, fMin, fMax); - histoZCount1HLT.Fill(100, nZMuMu1HLT); - TH1D histoZCount2HLT("histoZCount2HLT", "", 1, fMin, fMax); - histoZCount2HLT.Fill(100, nZMuMu2HLT); - - ChiSquared chi2(zMuMu1HLT, - &histoZCount1HLT, - zMuMu2HLT, - &histoZCount2HLT, - zMuTk, - histoZMuTk, - zMuSa, - histoZMuSa, - zMuMuNoIso, - histoZMuMuNoIso, - fMin, - fMax); - cout << "N. bins: " << chi2.numberOfBins() << endl; - - fit::RootMinuit minuit(chi2, true); - commands.add(minuit, yieldZMuMu); - commands.add(minuit, effTk); - commands.add(minuit, effSa); - commands.add(minuit, effIso); - commands.add(minuit, effHLT); - commands.add(minuit, yieldBkgZMuTk); - commands.add(minuit, yieldBkgZMuSa); - commands.add(minuit, yieldBkgZMuMuNotIso); - commands.add(minuit, lambda); - commands.add(minuit, alpha); - commands.add(minuit, beta); - commands.add(minuit, a0); - commands.add(minuit, a1); - commands.add(minuit, a2); - commands.add(minuit, b0); - commands.add(minuit, b1); - commands.add(minuit, b2); - commands.add(minuit, c0); - commands.add(minuit, c1); - commands.add(minuit, c2); - commands.run(minuit); - const unsigned int nPar = 20; //WARNIG: this must be updated manually for now - ROOT::Math::SMatrix > err; - minuit.getErrorMatrix(err); - - std::cout << "error matrix:" << std::endl; - for (unsigned int i = 0; i < nPar; ++i) { - for (unsigned int j = 0; j < nPar; ++j) { - std::cout << err(i, j) << "\t"; - } - std::cout << std::endl; - } - minuit.printFitResults(); - ofstream myfile; - myfile.open("fitResult.txt", ios::out | ios::app); - myfile << "\n"; - double Y = minuit.getParameterError("YieldZMuMu"); - double dY = minuit.getParameterError("YieldZMuMu", Y); - double tk_eff = minuit.getParameterError("EfficiencyTk"); - double dtk_eff = minuit.getParameterError("EfficiencyTk", tk_eff); - double sa_eff = minuit.getParameterError("EfficiencySa"); - double dsa_eff = minuit.getParameterError("EfficiencySa", sa_eff); - double iso_eff = minuit.getParameterError("EfficiencyIso"); - double diso_eff = minuit.getParameterError("EfficiencyIso", iso_eff); - double hlt_eff = minuit.getParameterError("EfficiencyHLT"); - double dhlt_eff = minuit.getParameterError("EfficiencyHLT", hlt_eff); - myfile << Y << " " << dY << " " << tk_eff << " " << dtk_eff << " " << sa_eff << " " << dsa_eff << " " << iso_eff - << " " << diso_eff << " " << hlt_eff << " " << dhlt_eff << " " - << chi2() / (chi2.numberOfBins() - minuit.numberOfFreeParameters()); - - myfile.close(); - - //Plot - double s; - s = 0; - for (int i = 1; i <= histoZMuMuNoIso->GetNbinsX(); ++i) - s += histoZMuMuNoIso->GetBinContent(i); - histoZMuMuNoIso->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuMu->GetNbinsX(); ++i) - s += histoZMuMu->GetBinContent(i); - histoZMuMu->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuMu1HLT->GetNbinsX(); ++i) - s += histoZMuMu1HLT->GetBinContent(i); - histoZMuMu1HLT->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuMu2HLT->GetNbinsX(); ++i) - s += histoZMuMu2HLT->GetBinContent(i); - histoZMuMu2HLT->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuTk->GetNbinsX(); ++i) - s += histoZMuTk->GetBinContent(i); - histoZMuTk->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuSa->GetNbinsX(); ++i) - s += histoZMuSa->GetBinContent(i); - histoZMuSa->SetEntries(s); - - string ZMuMu1HLTPlot = "ZMuMu1HLTFit_" + plot_string; - root::plot(ZMuMu1HLTPlot.c_str(), - *histoZMuMu1HLT, - zMuMu1HLT, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - kOrange - 2, - 2, - kSolid, - 100, - "Z -> #mu #mu mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuMu2HLTPlot = "ZMuMu2HLTFit_" + plot_string; - root::plot(ZMuMu2HLTPlot.c_str(), - *histoZMuMu2HLT, - zMuMu2HLT, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - kOrange - 2, - 2, - kSolid, - 100, - "Z -> #mu #mu mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuMuNoIsoPlot = "ZMuMuNoIsoFit_X_" + plot_string; - root::plot(ZMuMuNoIsoPlot.c_str(), - *histoZMuMuNoIso, - zMuMuNoIso, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - yieldBkgZMuMuNotIso, - alpha, - b0, - b1, - b2, - kWhite, - 2, - kSolid, - 100, - "Z -> #mu #mu Not Iso mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - ZMuMuNoIsoPlot = "ZMuMuNoIsoFit_" + plot_string; - TF1 funZMuMuNoIso = root::tf1_t("ZMuMuNoIsoFunction", - zMuMuNoIso, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - yieldBkgZMuMuNotIso, - alpha, - b0, - b1, - b2); - funZMuMuNoIso.SetLineColor(kOrange + 8); - funZMuMuNoIso.SetLineWidth(3); - //funZMuMuNoIso.SetLineStyle(kDashed); - - //funZMuMuNoIso.SetFillColor(kOrange-2); - //funZMuMuNoIso.SetFillStyle(3325); - - funZMuMuNoIso.SetNpx(10000); - TF1 funZMuMuNoIsoBkg = root::tf1_t( - "ZMuMuNoIsoBack", zMuMuNoIsoBkgScaled, fMin, fMax, yieldBkgZMuMuNotIso, alpha, b0, b1, b2); - funZMuMuNoIsoBkg.SetLineColor(kViolet + 3); - funZMuMuNoIsoBkg.SetLineWidth(2); - funZMuMuNoIsoBkg.SetLineStyle(kSolid); - funZMuMuNoIsoBkg.SetFillColor(kViolet - 5); - funZMuMuNoIsoBkg.SetFillStyle(3357); - - funZMuMuNoIsoBkg.SetNpx(10000); - histoZMuMuNoIso->SetTitle("Z -> #mu #mu Not Iso mass"); - histoZMuMuNoIso->SetXTitle("#mu + #mu invariant mass (GeV/c^{2})"); - histoZMuMuNoIso->SetYTitle("Events"); - TCanvas* canvas = new TCanvas("canvas"); - histoZMuMuNoIso->Draw("e"); - funZMuMuNoIsoBkg.Draw("same"); - funZMuMuNoIso.Draw("same"); - canvas->SaveAs(ZMuMuNoIsoPlot.c_str()); - canvas->SetLogy(); - string logZMuMuNoIsoPlot = "log_" + ZMuMuNoIsoPlot; - canvas->SaveAs(logZMuMuNoIsoPlot.c_str()); - - double IntSigMMNotIso = ((double)rebinMuMu / (double)rebinMuMuNoIso) * funZMuMuNoIso.Integral(fMin, fMax); - double IntSigMMNotIsoBkg = ((double)rebinMuMu / (double)rebinMuMuNoIso) * funZMuMuNoIsoBkg.Integral(fMin, fMax); - cout << "********* ZMuMuNoIsoPlot signal yield from the fit ==> " << IntSigMMNotIso << endl; - cout << "********* ZMuMuNoIsoPlot background yield from the fit ==> " << IntSigMMNotIsoBkg << endl; - - string ZMuTkPlot = "ZMuTkFit_X_" + plot_string; - root::plot(ZMuTkPlot.c_str(), - *histoZMuTk, - zMuTk, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - yieldBkgZMuTk, - lambda, - a0, - a1, - a2, - kOrange + 3, - 2, - kSolid, - 100, - "Z -> #mu + (unmatched) track mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - ZMuTkPlot = "ZMuTkFit_" + plot_string; - TF1 funZMuTk = root::tf1_t( - "ZMuTkFunction", zMuTk, fMin, fMax, effTk, effSa, effIso, effHLT, yieldZMuMu, yieldBkgZMuTk, lambda, a0, a1, a2); - funZMuTk.SetLineColor(kOrange + 8); - funZMuTk.SetLineWidth(3); - funZMuTk.SetLineStyle(kSolid); - // funZMuTk.SetFillColor(kOrange-2); - //funZMuTk.SetFillStyle(3325); - funZMuTk.SetNpx(10000); - TF1 funZMuTkBkg = - root::tf1_t("ZMuTkBack", zMuTkBkgScaled, fMin, fMax, yieldBkgZMuTk, lambda, a0, a1, a2); - funZMuTkBkg.SetLineColor(kViolet + 3); - funZMuTkBkg.SetLineWidth(2); - funZMuTkBkg.SetLineStyle(kSolid); - funZMuTkBkg.SetFillColor(kViolet - 5); - funZMuTkBkg.SetFillStyle(3357); - funZMuTkBkg.SetNpx(10000); - histoZMuTk->SetTitle("Z -> #mu + (unmatched) track mass"); - histoZMuTk->SetXTitle("#mu + (unmatched) track invariant mass (GeV/c^{2})"); - histoZMuTk->SetYTitle("Events"); - TCanvas* canvas_ = new TCanvas("canvas_"); - histoZMuTk->Draw("e"); - funZMuTkBkg.Draw("same"); - funZMuTk.Draw("same"); - canvas_->SaveAs(ZMuTkPlot.c_str()); - canvas_->SetLogy(); - string logZMuTkPlot = "log_" + ZMuTkPlot; - canvas_->SaveAs(logZMuTkPlot.c_str()); - - double IntSigMT = ((double)rebinMuMu / (double)rebinMuTk) * funZMuTk.Integral(fMin, fMax); - double IntSigMTBkg = ((double)rebinMuMu / (double)rebinMuTk) * funZMuTkBkg.Integral(fMin, fMax); - cout << "********* ZMuMuTkPlot signal yield from the fit ==> " << IntSigMT << endl; - cout << "********* ZMuMuTkPlot background yield from the fit ==> " << IntSigMTBkg << endl; - - string ZMuSaPlot = "ZMuSaFit_X_" + plot_string; - root::plot(ZMuSaPlot.c_str(), - *histoZMuSa, - zMuSa, - fMin, - fMax, - effSa, - effTk, - effIso, - yieldZMuMu, - yieldBkgZMuSa, - beta, - c0, - c1, - c2, - kOrange + 3, - 2, - kSolid, - 100, - "Z -> #mu + (unmatched) standalone mass", - "#mu + (unmatched) standalone invariant mass (GeV/c^{2})", - "Events"); - - ZMuSaPlot = "ZMuSaFit_" + plot_string; - TF1 funZMuSa = root::tf1_t( - "ZMuSaFunction", zMuSa, fMin, fMax, effTk, effSa, effIso, effHLT, yieldZMuMu, yieldBkgZMuSa, beta, c0, c1, c2); - funZMuSa.SetLineColor(kOrange + 8); - funZMuSa.SetLineWidth(3); - funZMuSa.SetLineStyle(kSolid); - // funZMuSa.SetFillColor(kOrange-2); - // funZMuSa.SetFillStyle(3325); - funZMuSa.SetNpx(10000); - TF1 funZMuSaBkg = - root::tf1_t("ZMuSaBack", zMuSaBkgScaled, fMin, fMax, yieldBkgZMuSa, beta, c0, c1, c2); - funZMuSaBkg.SetLineColor(kViolet + 3); - funZMuSaBkg.SetLineWidth(2); - funZMuSaBkg.SetLineStyle(kSolid); - funZMuSaBkg.SetFillColor(kViolet - 5); - funZMuSaBkg.SetFillStyle(3357); - funZMuSaBkg.SetNpx(10000); - histoZMuSa->SetTitle("Z -> #mu + (unmatched) standalone mass"); - histoZMuSa->SetXTitle("#mu + (unmatched) standalone invariant mass (GeV/c^{2})"); - histoZMuSa->SetYTitle("Events"); - TCanvas* canvas__ = new TCanvas("canvas__"); - histoZMuSa->Draw("e"); - funZMuSaBkg.Draw("same"); - funZMuSa.Draw("same"); - canvas__->SaveAs(ZMuSaPlot.c_str()); - canvas__->SetLogy(); - string logZMuSaPlot = "log_" + ZMuSaPlot; - canvas__->SaveAs(logZMuSaPlot.c_str()); - - double IntSigMS = ((double)rebinMuMu / (double)rebinMuSa) * funZMuSa.Integral(fMin, fMax); - double IntSigMSBkg = ((double)rebinMuMu / (double)rebinMuSa) * funZMuSaBkg.Integral(fMin, fMax); - cout << "********* ZMuMuSaPlot signal yield from the fit ==> " << IntSigMS << endl; - cout << "********* ZMuMuSaPlot background yield from the fit ==> " << IntSigMSBkg << endl; - } - return 0; -} - -#include -using namespace boost; -namespace po = boost::program_options; - -int main(int ac, char* av[]) { - po::options_description desc("Allowed options"); - desc.add_options()("help,h", "produce help message")("input-file,i", po::value >(), "input file")( - "min,m", po::value(&fMin)->default_value(60), "minimum value for fit range")( - "max,M", po::value(&fMax)->default_value(120), "maximum value for fit range")( - "rebins,R", - po::value >(), - "rebins values: rebinMuMu2HLT , rebinMuMu1HLT , rebinMuMuNoIso , rebinMuSa, rebinMuTk")( - "chi2,c", "perform chi-squared fit")("plr,p", "perform Poisson likelihood-ratio fit")( - "nonIsoTemplateFromMC,I", - po::value(&nonIsoTemplateFromMC)->default_value(false), - "take the template for nonIso sample from MC")( - "plot-format,f", po::value(&ext)->default_value("eps"), "output plot format")( - "detectorRegion,r", - po::value(®ion)->default_value("all"), - "detector region in which muons are detected"); - po::positional_options_description p; - p.add("input-file", -1); - p.add("rebins", -1); - - po::variables_map vm; - po::store(po::command_line_parser(ac, av).options(desc).positional(p).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - if (!vm.count("input-file")) { - return 1; - } - cout << "Input files are: " << vm["input-file"].as >() << "\n"; - vector v_file = vm["input-file"].as >(); - - if (vm.count("rebins")) { - vector v_rebin = vm["rebins"].as >(); - if (v_rebin.size() != 5) { - cerr << " please provide 5 numbers in the given order: rebinMuMu2HLT , rebinMuMu1HLT , rebinMuMuNoIso, " - "rebinMuSa, rebinMuTk \n"; - return 1; - } - rebinMuMuNoIso = v_rebin[2], rebinMuMu1HLT = v_rebin[1], rebinMuMu2HLT = v_rebin[0], rebinMuTk = v_rebin[4], - rebinMuSa = v_rebin[3]; - } - - bool chi2Fit = vm.count("chi2"), plrFit = vm.count("plr"); - - if (!(chi2Fit || plrFit)) - cerr << "Warning: no fit performed. Please, specify either -c or -p options or both" << endl; - - gROOT->SetStyle("Plain"); - - int ret = 0; - try { - if (plrFit) { - std::cout << "==================================== " << std::endl; - std::cout << "=== Poisson Likelihood Ratio fit === " << std::endl; - std::cout << "==================================== " << std::endl; - int ret2 = main_t(v_file); - if (ret2 != 0) - ret = 1; - } - if (chi2Fit) { - std::cout << "================= " << std::endl; - std::cout << "=== Chi-2 fit === " << std::endl; - std::cout << "================= " << std::endl; - int ret1 = main_t(v_file); - if (ret1 != 0) - ret = 1; - } - } catch (std::exception& e) { - cerr << "error: " << e.what() << "\n"; - return 1; - } catch (...) { - cerr << "Exception of unknown type!\n"; - } - return ret; -} diff --git a/ElectroWeakAnalysis/ZMuMu/bin/zFitToyMc.cpp b/ElectroWeakAnalysis/ZMuMu/bin/zFitToyMc.cpp deleted file mode 100644 index ad71f08e54fa9..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/zFitToyMc.cpp +++ /dev/null @@ -1,451 +0,0 @@ -#include "FWCore/Utilities/interface/EDMException.h" -#include "PhysicsTools/Utilities/interface/Parameter.h" -#include "PhysicsTools/Utilities/interface/Gaussian.h" -#include "PhysicsTools/Utilities/interface/Numerical.h" -#include "PhysicsTools/Utilities/interface/Exponential.h" -#include "PhysicsTools/Utilities/interface/Polynomial.h" -#include "PhysicsTools/Utilities/interface/Constant.h" -#include "PhysicsTools/Utilities/interface/Operations.h" -#include "PhysicsTools/Utilities/interface/MultiHistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/HistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/RootMinuit.h" -#include "PhysicsTools/Utilities/interface/RootMinuitCommands.h" -#include "PhysicsTools/Utilities/interface/FunctClone.h" -#include "PhysicsTools/Utilities/interface/rootPlot.h" -#include "PhysicsTools/Utilities/interface/Expression.h" -#include "PhysicsTools/Utilities/interface/HistoPdf.h" -#include "FWCore/FWLite/interface/FWLiteEnabler.h" -#include "TROOT.h" -#include "TSystem.h" -#include "TH1.h" -#include "TFile.h" -#include -using namespace boost; -namespace po = boost::program_options; - -#include -#include -#include -#include -#include -#include -#include -using namespace std; - -// A helper function to simplify the main part. -template -ostream& operator<<(ostream& os, const vector& v) { - copy(v.begin(), v.end(), ostream_iterator(cout, " ")); - return os; -} - -// A function that get histogram and sets contents to 0 -// if entries are too small -TH1* getHisto(TFile* file, const char* name, unsigned int rebin) { - TObject* h = file->Get(name); - if (h == nullptr) - throw edm::Exception(edm::errors::Configuration) << "Can't find object " << name << "\n"; - TH1* histo = dynamic_cast(h); - if (histo == nullptr) - throw edm::Exception(edm::errors::Configuration) - << "Object " << name << " is of type " << h->ClassName() << ", not TH1\n"; - histo->Rebin(rebin); - for (int i = 1; i <= histo->GetNbinsX(); ++i) { - if (histo->GetBinContent(i) < 0.1) { - histo->SetBinContent(i, 0.0); - histo->SetBinError(i, 0.0); - } - } - return histo; -} - -struct sig_tag; -struct bkg_tag; - -int main(int ac, char* av[]) { - gROOT->SetStyle("Plain"); - - try { - typedef funct::FunctExpression Expr; - typedef fit::HistoChiSquare ExprChi2; - typedef fit::MultiHistoChiSquare ChiSquared; - double fMin, fMax; - string ext; - po::options_description desc("Allowed options"); - desc.add_options()("help,h", "produce help message")("input-file,i", po::value >(), "input file")( - "min,m", po::value(&fMin)->default_value(60), "minimum value for fit range")( - "max,M", po::value(&fMax)->default_value(120), "maximum value for fit range")( - "plot-format,p", po::value(&ext)->default_value("eps"), "output plot format"); - - po::positional_options_description p; - p.add("input-file", -1); - - po::variables_map vm; - po::store(po::command_line_parser(ac, av).options(desc).positional(p).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - fit::RootMinuitCommands commands("zFitToyMc.txt"); - - cout << "minuit command file completed" << endl; - const unsigned int rebinMuMuNoIso = 2, rebinMuMu = 1, rebinMuMu1HLT = 1, rebinMuMu2HLT = 1, rebinMuTk = 2, - rebinMuSa = 10; - // assume that the bin size is 1 GeV!!! - funct::Constant rebinMuMuNoIsoConst(rebinMuMuNoIso), rebinMuMuConst(rebinMuMu), rebinMuMu1HLTConst(rebinMuMu1HLT), - rebinMuMu2HLTConst(rebinMuMu2HLT), rebinMuTkConst(rebinMuTk), rebinMuSaConst(rebinMuSa); - - if (vm.count("input-file")) { - cout << "Input files are: " << vm["input-file"].as >() << "\n"; - vector v_file = vm["input-file"].as >(); - for (vector::const_iterator it = v_file.begin(); it != v_file.end(); ++it) { - TFile* root_file = new TFile(it->c_str(), "read"); - TH1* histoZMuMuNoIso = getHisto(root_file, "nonIsolatedZToMuMuPlots/zMass_noIso", rebinMuMuNoIso); - TH1* histoZMuMu = getHisto(root_file, "goodZToMuMuPlots/zMass_golden", rebinMuMu); - TH1* histoZMuMu1HLT = getHisto(root_file, "goodZToMuMu1HLTPlots/zMass_1hlt", rebinMuMu1HLT); - TH1* histoZMuMu2HLT = getHisto(root_file, "goodZToMuMu2HLTPlots/zMass_2hlt", rebinMuMu2HLT); - TH1* histoZMuTk = getHisto(root_file, "goodZToMuMuOneTrackPlots/zMass_tk", rebinMuTk); - TH1* histoZMuSa = getHisto(root_file, "goodZToMuMuOneStandAloneMuonPlots/zMass_sa", rebinMuSa); - TH1* histoZMuSaFromMuMu = getHisto(root_file, "zmumuSaMassHistogram/zMass_safromGolden", rebinMuSa); - - cout << ">>> histogram loaded\n"; - string f_string = *it; - replace(f_string.begin(), f_string.end(), '.', '_'); - replace(f_string.begin(), f_string.end(), '/', '_'); - string plot_string = f_string + "." + ext; - cout << ">>> Input files loaded\n"; - - const char* kYieldZMuMu = "YieldZMuMu"; - const char* kEfficiencyTk = "EfficiencyTk"; - const char* kEfficiencySa = "EfficiencySa"; - const char* kEfficiencyIso = "EfficiencyIso"; - const char* kEfficiencyHLT = "EfficiencyHLT"; - const char* kYieldBkgZMuTk = "YieldBkgZMuTk"; - const char* kYieldBkgZMuSa = "YieldBkgZMuSa"; - const char* kYieldBkgZMuMuNotIso = "YieldBkgZMuMuNotIso"; - const char* kAlpha = "Alpha"; - const char* kBeta = "Beta"; - const char* kLambda = "Lambda"; - const char* kA0 = "A0"; - const char* kA1 = "A1"; - const char* kA2 = "A2"; - const char* kB0 = "B0"; - const char* kB1 = "B1"; - const char* kB2 = "B2"; - - funct::Parameter yieldZMuMu(kYieldZMuMu, commands.par(kYieldZMuMu)); - funct::Parameter effTk(kEfficiencyTk, commands.par(kEfficiencyTk)); - funct::Parameter effSa(kEfficiencySa, commands.par(kEfficiencySa)); - funct::Parameter effIso(kEfficiencyIso, commands.par(kEfficiencyIso)); - funct::Parameter effHLT(kEfficiencyHLT, commands.par(kEfficiencyHLT)); - funct::Parameter yieldBkgZMuTk(kYieldBkgZMuTk, commands.par(kYieldBkgZMuTk)); - funct::Parameter yieldBkgZMuSa(kYieldBkgZMuSa, commands.par(kYieldBkgZMuSa)); - funct::Parameter yieldBkgZMuMuNotIso(kYieldBkgZMuMuNotIso, commands.par(kYieldBkgZMuMuNotIso)); - funct::Parameter alpha(kAlpha, commands.par(kAlpha)); - funct::Parameter beta(kBeta, commands.par(kBeta)); - funct::Parameter lambda(kLambda, commands.par(kLambda)); - funct::Parameter a0(kA0, commands.par(kA0)); - funct::Parameter a1(kA1, commands.par(kA1)); - funct::Parameter a2(kA2, commands.par(kA2)); - funct::Parameter b0(kB0, commands.par(kB0)); - funct::Parameter b1(kB1, commands.par(kB1)); - funct::Parameter b2(kB2, commands.par(kB2)); - funct::Constant cFMin(fMin), cFMax(fMax); - - // count ZMuMu Yield - double nZMuMu = 0, nZMuMu1HLT = 0, nZMuMu2HLT = 0; - { - unsigned int nBins = histoZMuMu->GetNbinsX(); - double xMin = histoZMuMu->GetXaxis()->GetXmin(); - double xMax = histoZMuMu->GetXaxis()->GetXmax(); - double deltaX = (xMax - xMin) / nBins; - for (unsigned int i = 0; i < nBins; ++i) { - double x = xMin + (i + .5) * deltaX; - if (x > fMin && x < fMax) { - nZMuMu += histoZMuMu->GetBinContent(i + 1); - nZMuMu1HLT += histoZMuMu1HLT->GetBinContent(i + 1); - nZMuMu2HLT += histoZMuMu2HLT->GetBinContent(i + 1); - } - } - } - // aggiungi 1HLT 2HLT - cout << ">>> count of ZMuMu yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu << endl; - cout << ">>> count of ZMuMu (1HLT) yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu1HLT << endl; - cout << ">>> count of ZMuMu (2HLT) yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu2HLT << endl; - funct::RootHistoPdf zPdfMuMuNonIso(*histoZMuMu, fMin, fMax); //imposto le pdf a quella di ZMuMu - funct::RootHistoPdf zPdfMuTk = zPdfMuMuNonIso; - funct::RootHistoPdf zPdfMuMu1HLT = zPdfMuMuNonIso; - funct::RootHistoPdf zPdfMuMu2HLT = zPdfMuMuNonIso; - funct::RootHistoPdf zPdfMuSa(*histoZMuSaFromMuMu, fMin, fMax); - zPdfMuMuNonIso.rebin(rebinMuMuNoIso / rebinMuMu); - zPdfMuTk.rebin(rebinMuTk / rebinMuMu); - zPdfMuMu1HLT.rebin(rebinMuMu1HLT / rebinMuMu); - zPdfMuMu2HLT.rebin(rebinMuMu2HLT / rebinMuMu); - - funct::Numerical<2> _2; - funct::Numerical<1> _1; - - //Efficiency term - Expr zMuMuEff1HLTTerm = _2 * (effTk ^ _2) * (effSa ^ _2) * (effIso ^ _2) * effHLT * (_1 - effHLT); - Expr zMuMuEff2HLTTerm = (effTk ^ _2) * (effSa ^ _2) * (effIso ^ _2) * (effHLT ^ _2); - Expr zMuMuNoIsoEffTerm = (effTk ^ _2) * (effSa ^ _2) * (_1 - (effIso ^ _2)) * (_1 - ((_1 - effHLT) ^ _2)); - Expr zMuTkEffTerm = _2 * (effTk ^ _2) * effSa * (_1 - effSa) * (effIso ^ _2) * effHLT; - Expr zMuSaEffTerm = _2 * (effSa ^ _2) * effTk * (_1 - effTk) * (effIso ^ _2) * effHLT; - - Expr zMuMu1HLT = rebinMuMu1HLTConst * zMuMuEff1HLTTerm * yieldZMuMu; - Expr zMuMu2HLT = rebinMuMu2HLTConst * zMuMuEff2HLTTerm * yieldZMuMu; - - Expr zMuTkBkg = yieldBkgZMuTk * funct::Exponential(lambda) * funct::Polynomial<2>(a0, a1, a2); - Expr zMuTkBkgScaled = rebinMuTkConst * zMuTkBkg; - Expr zMuTk = rebinMuTkConst * (zMuTkEffTerm * yieldZMuMu * zPdfMuTk + zMuTkBkg); - - Expr zMuMuNoIsoBkg = yieldBkgZMuMuNotIso * funct::Exponential(alpha) * funct::Polynomial<2>(b0, b1, b2); - Expr zMuMuNoIsoBkgScaled = rebinMuMuNoIsoConst * zMuMuNoIsoBkg; - Expr zMuMuNoIso = rebinMuMuNoIsoConst * (zMuMuNoIsoEffTerm * yieldZMuMu * zPdfMuMuNonIso + zMuMuNoIsoBkg); - - Expr zMuSa = - rebinMuSaConst * (zMuSaEffTerm * yieldZMuMu * zPdfMuSa); // + (yieldBkgZMuSa * funct::Exponential(beta) )); - - TH1D histoZCount1HLT("histoZCount1HLT", "", 1, fMin, fMax); - histoZCount1HLT.Fill(100, nZMuMu1HLT); - TH1D histoZCount2HLT("histoZCount2HLT", "", 1, fMin, fMax); - histoZCount2HLT.Fill(100, nZMuMu2HLT); - - ChiSquared chi2(zMuMu1HLT, - &histoZCount1HLT, - zMuMu2HLT, - &histoZCount2HLT, - zMuTk, - histoZMuTk, - zMuSa, - histoZMuSa, - zMuMuNoIso, - histoZMuMuNoIso, - fMin, - fMax); - fit::RootMinuit minuit(chi2, true); - commands.add(minuit, yieldZMuMu); - commands.add(minuit, effTk); - commands.add(minuit, effSa); - commands.add(minuit, effIso); - commands.add(minuit, effHLT); - commands.add(minuit, yieldBkgZMuTk); - commands.add(minuit, yieldBkgZMuSa); - commands.add(minuit, yieldBkgZMuMuNotIso); - commands.add(minuit, lambda); - commands.add(minuit, alpha); - commands.add(minuit, beta); - commands.add(minuit, a0); - commands.add(minuit, a1); - commands.add(minuit, a2); - commands.add(minuit, b0); - commands.add(minuit, b1); - commands.add(minuit, b2); - commands.run(minuit); - const unsigned int nPar = 17; //WARNIG: this must be updated manually for now - ROOT::Math::SMatrix > err; - minuit.getErrorMatrix(err); - - std::cout << "error matrix:" << std::endl; - for (unsigned int i = 0; i < nPar; ++i) { - for (unsigned int j = 0; j < nPar; ++j) { - std::cout << err(i, j) << "\t"; - } - std::cout << std::endl; - } - minuit.printFitResults(); - ofstream myfile; - myfile.open("fitResult.txt", ios::out | ios::app); - myfile << "\n"; - double Y = minuit.getParameterError("YieldZMuMu"); - double dY = minuit.getParameterError("YieldZMuMu", Y); - double tk_eff = minuit.getParameterError("EfficiencyTk"); - double dtk_eff = minuit.getParameterError("EfficiencyTk", tk_eff); - double sa_eff = minuit.getParameterError("EfficiencySa"); - double dsa_eff = minuit.getParameterError("EfficiencySa", sa_eff); - double iso_eff = minuit.getParameterError("EfficiencyIso"); - double diso_eff = minuit.getParameterError("EfficiencyIso", iso_eff); - double hlt_eff = minuit.getParameterError("EfficiencyHLT"); - double dhlt_eff = minuit.getParameterError("EfficiencyHLT", hlt_eff); - myfile << Y << " " << dY << " " << tk_eff << " " << dtk_eff << " " << sa_eff << " " << dsa_eff << " " << iso_eff - << " " << diso_eff << " " << hlt_eff << " " << dhlt_eff << " " - << chi2() / (chi2.numberOfBins() - minuit.numberOfFreeParameters()); - - myfile.close(); - - //Plot - double s; - s = 0; - for (int i = 1; i <= histoZMuMuNoIso->GetNbinsX(); ++i) - s += histoZMuMuNoIso->GetBinContent(i); - histoZMuMuNoIso->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuMu->GetNbinsX(); ++i) - s += histoZMuMu->GetBinContent(i); - histoZMuMu->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuMu1HLT->GetNbinsX(); ++i) - s += histoZMuMu1HLT->GetBinContent(i); - histoZMuMu1HLT->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuMu2HLT->GetNbinsX(); ++i) - s += histoZMuMu2HLT->GetBinContent(i); - histoZMuMu2HLT->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuTk->GetNbinsX(); ++i) - s += histoZMuTk->GetBinContent(i); - histoZMuTk->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuSa->GetNbinsX(); ++i) - s += histoZMuSa->GetBinContent(i); - histoZMuSa->SetEntries(s); - - string ZMuMu1HLTPlot = "ZMuMu1HLTFit_" + plot_string; - root::plot(ZMuMu1HLTPlot.c_str(), - *histoZMuMu1HLT, - zMuMu1HLT, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - kRed, - 2, - kDashed, - 100, - "Z -> #mu #mu mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuMu2HLTPlot = "ZMuMu2HLTFit_" + plot_string; - root::plot(ZMuMu2HLTPlot.c_str(), - *histoZMuMu2HLT, - zMuMu2HLT, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - kRed, - 2, - kDashed, - 100, - "Z -> #mu #mu mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuMuNoIsoPlot = "ZMuMuNoIsoFit_" + plot_string; - root::plot(ZMuMuNoIsoPlot.c_str(), - *histoZMuMuNoIso, - zMuMuNoIso, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - kRed, - 2, - kDashed, - 100, - "Z -> #mu #mu Not Iso mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuTkPlot = "ZMuTkFit_X_" + plot_string; - root::plot(ZMuTkPlot.c_str(), - *histoZMuTk, - zMuTk, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - yieldBkgZMuTk, - lambda, - a0, - a1, - a2, - kRed, - 2, - kDashed, - 100, - "Z -> #mu + (unmatched) track mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - ZMuTkPlot = "ZMuTkFit_" + plot_string; - TF1 funZMuTk = root::tf1_t("ZMuTkFunction", - zMuTk, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - yieldBkgZMuTk, - lambda, - a0, - a1, - a2); - funZMuTk.SetLineColor(kRed); - funZMuTk.SetLineWidth(2); - funZMuTk.SetLineStyle(kDashed); - funZMuTk.SetNpx(10000); - TF1 funZMuTkBkg = - root::tf1_t("ZMuTkBack", zMuTkBkgScaled, fMin, fMax, yieldBkgZMuTk, lambda, a0, a1, a2); - funZMuTkBkg.SetLineColor(kGreen); - funZMuTkBkg.SetLineWidth(2); - funZMuTkBkg.SetLineStyle(kDashed); - funZMuTkBkg.SetNpx(10000); - histoZMuTk->SetTitle("Z -> #mu + (unmatched) track mass"); - histoZMuTk->SetXTitle("#mu + (unmatched) track invariant mass (GeV/c^{2})"); - histoZMuTk->SetYTitle("Events"); - TCanvas* canvas = new TCanvas("canvas"); - histoZMuTk->Draw("e"); - funZMuTkBkg.Draw("same"); - funZMuTk.Draw("same"); - canvas->SaveAs(ZMuTkPlot.c_str()); - canvas->SetLogy(); - string logZMuTkPlot = "log_" + ZMuTkPlot; - canvas->SaveAs(logZMuTkPlot.c_str()); - string ZMuSaPlot = "ZMuSaFit_" + plot_string; - root::plot(ZMuSaPlot.c_str(), - *histoZMuSa, - zMuSa, - fMin, - fMax, - effSa, - effTk, - effIso, - yieldZMuMu, - yieldBkgZMuSa, - kRed, - 2, - kDashed, - 10000, - "Z -> #mu + (unmatched) standalone mass", - "#mu + (unmatched) standalone invariant mass (GeV/c^{2})", - "Events"); - } - } - } catch (std::exception& e) { - cerr << "error: " << e.what() << "\n"; - return 1; - } catch (...) { - cerr << "Exception of unknown type!\n"; - } - - return 0; -} diff --git a/ElectroWeakAnalysis/ZMuMu/bin/zMassFit.cpp b/ElectroWeakAnalysis/ZMuMu/bin/zMassFit.cpp deleted file mode 100644 index 7e3dc41a3f2ab..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/zMassFit.cpp +++ /dev/null @@ -1,1040 +0,0 @@ -#include "PhysicsTools/Utilities/interface/Parameter.h" -#include "PhysicsTools/Utilities/interface/BreitWigner.h" -#include "PhysicsTools/Utilities/interface/Constant.h" -#include "PhysicsTools/Utilities/interface/Number.h" -#include "PhysicsTools/Utilities/interface/Product.h" -#include "PhysicsTools/Utilities/interface/Sum.h" -#include "PhysicsTools/Utilities/interface/Difference.h" -#include "PhysicsTools/Utilities/interface/Gaussian.h" -#include "PhysicsTools/Utilities/interface/ZLineShape.h" -#include "PhysicsTools/Utilities/interface/Convolution.h" -#include "PhysicsTools/Utilities/interface/HistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/RootMinuit.h" -#include "PhysicsTools/Utilities/interface/RootFunctionAdapter.h" -#include "PhysicsTools/Utilities/interface/rootPlot.h" -#include "TFile.h" -#include "TH1.h" -#include "TF1.h" -#include "TMath.h" -#include "TCanvas.h" -#include "TROOT.h" -//#include "TStyle.h" - -#include -#include -#include -#include -#include -#include -#include -using namespace std; -using namespace boost; -namespace po = boost::program_options; - -// A helper function to simplify the main part. -template -ostream &operator<<(ostream &os, const vector &v) { - copy(v.begin(), v.end(), ostream_iterator(cout, " ")); - return os; -} - -typedef funct::GaussIntegrator IntegratorConv; - -int main(int ac, char *av[]) { - try { - double fMin, fMax; - string ext; - po::options_description desc("Allowed options"); - desc.add_options()("help", "produce help message")("include-path,I", po::value >(), "include path")( - "input-file", po::value >(), "input file")( - "min,m", po::value(&fMin)->default_value(80), "minimum value for fit range")( - "max,M", po::value(&fMax)->default_value(120), "maximum value for fit range")( - "breitwigner", "fit to a breit-wigner")("gauss", "fit to a gaussian")( - "bwinter", "fit to the breit-wigner plus interference term")( - "bwintgam", "fit to the breit-wigner plus interference term and gamma propagator")( - "convbwg", "fit to the convolution between a breit-wigner and a gaussian")( - "convbwinterg", "fit to the convolution between a breit-wigner plus interference term and a gaussian")( - "convbwintgamg", - "fit to the convolution of a breit-wigner plus interference term and gamma propagator and a gaussian")( - "convbw2gf", "fit to the convolution between a breit-wigner and a linear combination of fixed gaussians")( - "convbwf2g", "fit to the convolution between a fixed breit-wigner and a linear combination of gaussians")( - "convbwint2gf", - "fit to the convolution between the breit-wigner plus interference term and a linear combination of fixed " - "gaussians")("convbwintf2g", - "fit to the convolution between the fixed breit-wigner plus interference term and a linear " - "combination of gaussians")("convbwintgam2gf", - "fit to the convolution of the breit-wigner plus interference term " - "and gamma propagator with a linear combination of fixed gaussians")( - "convbwintgamf2g", - "fit to the convolution of the fixed breit-wigner plus interference term and gamma propagator with a linear " - "combination of gaussians")( - "output-file,O", po::value(&ext)->default_value(".ps"), "output file format"); - - po::positional_options_description p; - p.add("input-file", -1); - - po::variables_map vm; - po::store(po::command_line_parser(ac, av).options(desc).positional(p).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - if (vm.count("include-path")) { - cout << "Include paths are: " << vm["include-path"].as >() << "\n"; - } - - vector v_file; - vector v_ZMassHistos; - vector v_eps; - - if (vm.count("input-file")) { - cout << "Input files are: " << vm["input-file"].as >() << "\n"; - v_file = vm["input-file"].as >(); - for (vector::const_iterator it = v_file.begin(); it != v_file.end(); ++it) { - TFile *root_file = new TFile(it->c_str(), "read"); - TDirectory *Histos = (TDirectory *)root_file->GetDirectory("ZHisto"); - TDirectory *RecoHistos = (TDirectory *)Histos->GetDirectory("ZRecoHisto"); - TH1D *zMass = (TH1D *)RecoHistos->Get("ZMass"); - zMass->Rebin(4); //remember... - zMass->GetXaxis()->SetTitle("#mu #mu invariant mass (GeV/c^{2})"); - v_ZMassHistos.push_back(zMass); - gROOT->SetStyle("Plain"); - //gStyle->SetOptFit(1111); - string f_string = *it; - replace(f_string.begin(), f_string.end(), '.', '_'); - string eps_string = f_string + ext; - v_eps.push_back(eps_string); - cout << ">>> histogram loaded\n"; - } - cout << v_file.size() << ", " << v_ZMassHistos.size() << ", " << v_eps.size() << endl; - cout << ">>> Input files loaded\n"; - } - - IntegratorConv integratorConv(1.e-5); - - //PDG values for Z mass and width - funct::Parameter mass("Mass", 91.1876); - funct::Parameter gamma("Gamma", 2.4952); - //Parameters for Z Line Shape - funct::Parameter f_gamma("Photon factor", 0); - funct::Parameter f_int("Interference factor", 0.001); - //Parameters for fits with gaussians - funct::Parameter yield("Yield", 482000); - funct::Parameter alpha("Alpha", 0.771); - funct::Parameter mean("Mean", 0); //0.229 - funct::Parameter sigma1("Sigma 1", 1.027); - funct::Parameter sigma2("Sigma 2", 2.94); - funct::Constant c_yield(yield), c_alpha(alpha); - funct::Number _1(1); - - if (vm.count("breitwigner")) { - cout << "Fitting histograms in input file to a Breit-Wigner\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mass << endl; - cout << gamma << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - cout << ">>> load histogram\n"; - TH1D *zMass = v_ZMassHistos[i]; - cout << ">>> histogram loaded\n"; - funct::BreitWigner bw(mass, gamma); - funct::Constant c_yield(yield); - typedef funct::Product::type FitFunction; - FitFunction f = c_yield * bw; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.minimize(); - minuit.printFitResults(); - TF1 fun = root::tf1("fun", f, fMin, fMax, yield, mass, gamma); - fun.SetParNames(yield.name().c_str(), mass.name().c_str(), gamma.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitBW_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitBW_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("gauss")) { - cout << "Fitting histograms in input files to a Gaussian\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mean << endl; - cout << sigma1 << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::Gaussian gaus(mean, sigma1); - funct::Constant c(yield); - typedef funct::Product::type FitFunction; - FitFunction f = c * gaus; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - minuit.addParameter(mean, 0.001, 80, 100); - minuit.addParameter(sigma1, 0.1, -5., 5.); - minuit.minimize(); - minuit.printFitResults(); - TF1 fun = root::tf1("fun", f, fMin, fMax, yield, mean, sigma1); - fun.SetParNames(yield.name().c_str(), mean.name().c_str(), sigma1.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitG_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitG_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("bwinter")) { - cout << "Fitting histograms in input files to the Breit-Wigner plus Z/photon interference term\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Constant c(yield); - typedef funct::Product::type FitFunction; - FitFunction f = c * zls; - cout << "set functions" << endl; - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.fixParameter(f_gamma.name()); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - minuit.minimize(); - minuit.printFitResults(); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitBwIn_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitBwIn_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("bwint")) { - cout << "Fitting histograms in input files to the Breit-Wigner plus Z/photon interference term and gamma " - "propagator\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Constant c(yield); - typedef funct::Product::type FitFunction; - FitFunction f = c * zls; - cout << "set functions" << endl; - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - minuit.minimize(); - minuit.printFitResults(); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitBwInGam_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitBwInGam_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("bwintgam")) { - cout << "Fitting histograms in input files to the Breit-Wigner plus Z/photon interference term and gamma " - "propagator\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Constant c(yield); - typedef funct::Product::type FitFunction; - FitFunction f = c * zls; - cout << "set functions" << endl; - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - minuit.minimize(); - minuit.printFitResults(); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitBwInGam_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitBwInGam_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("convbwg")) { - cout << "Fitting histograms in input files to the convolution between a Breit Wigner and a Gaussian\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mass << endl; - cout << gamma << endl; - cout << mean << endl; - cout << sigma1 << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::BreitWigner bw(mass, gamma); - funct::Gaussian gauss(mean, sigma1); - double range = 3 * sigma1.value(); - funct::Convolution::type cbg( - bw, gauss, -range, range, integratorConv); - funct::Constant c(yield); - typedef funct::Product::type>::type - FitFunction; - FitFunction f = c * cbg; - cout << "set functions" << endl; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(mean, 0.001, -0.5, 0.5); - minuit.fixParameter(mean.name()); - minuit.addParameter(sigma1, 0.1, -5., 5.); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(mean.ptr()); - pars.push_back(sigma1.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames( - yield.name().c_str(), mass.name().c_str(), gamma.name().c_str(), mean.name().c_str(), sigma1.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitCoBwG_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitCoBwG_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("convbwinterg")) { - cout << "Fitting histograms in input files to the convolution between the Breit-Wigner plus Z/photon " - "interference and a Gaussian\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - cout << mean << endl; - cout << sigma1 << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Gaussian gauss(mean, sigma1); - double range = 3 * sigma1.value(); - funct::Convolution::type czg( - zls, gauss, -range, range, integratorConv); - funct::Constant c(yield); - typedef funct::Product::type>::type - FitFunction; - FitFunction f = c * czg; - cout << "set functions" << endl; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.fixParameter(f_gamma.name()); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - minuit.addParameter(mean, 0.001, -0.5, 0.5); - minuit.fixParameter(mean.name()); - minuit.addParameter(sigma1, 0.1, -5., 5.); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - pars.push_back(mean.ptr()); - pars.push_back(sigma1.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str(), - mean.name().c_str(), - sigma1.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitCoBwInG_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitCoBwInG_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - if (vm.count("convbwintgamg")) { - cout << "Fitting histograms in input files to the convolution of the Breit-Wigner plus Z/photon interference and " - "photon propagator with a Gaussian\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - cout << mean << endl; - cout << sigma1 << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Gaussian gauss(mean, sigma1); - double range = 3 * sigma1.value(); - funct::Convolution::type czg( - zls, gauss, -range, range, integratorConv); - funct::Constant c(yield); - typedef funct::Product::type>::type - FitFunction; - FitFunction f = c * czg; - cout << "set functions" << endl; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 10000000); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - minuit.addParameter(mean, 0.001, -0.5, 0.5); - minuit.fixParameter(mean.name()); - minuit.addParameter(sigma1, 0.1, -5., 5.); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - pars.push_back(mean.ptr()); - pars.push_back(sigma1.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str(), - mean.name().c_str(), - sigma1.name().c_str()); - fun.SetLineColor(kRed); - fun.SetNpx(100000); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitCoBwInGaG_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitCoBwInGaG_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("convbw2gf")) { - cout << "Fitting histograms in input files to the convolution between the Z Breit-Wigner and a linear " - "combination of fixed Gaussians\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << alpha << endl; - cout << mass << endl; - cout << gamma << endl; - cout << mean << endl; - cout << sigma1 << endl; - cout << sigma2 << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::BreitWigner bw(mass, gamma); - funct::Gaussian gaus1(mean, sigma1); - funct::Gaussian gaus2(mean, sigma2); - typedef funct::Product::type G1; - typedef funct::Product::type, funct::Gaussian>::type G2; - typedef funct::Product::type>::type GaussComb; - GaussComb gc = c_yield * (c_alpha * gaus1 + (_1 - c_alpha) * gaus2); - typedef funct::Convolution::type FitFunction; - double range = 3 * max(sigma1.value(), sigma2.value()); - FitFunction f(bw, gc, -range, range, 1000); - cout << "set functions" << endl; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - //minuit.fixParameter(0); - minuit.addParameter(alpha, 0.1, -1., 1.); - //minuit.fixParameter(1); - minuit.addParameter(mass, .1, 70., 110); - //minuit.fixParameter(2); - minuit.addParameter(gamma, 1, 1, 10); - //minuit.fixParameter(3); - minuit.addParameter(mean, 0.001, -0.5, 0.5); - minuit.fixParameter(mean.name()); - minuit.addParameter(sigma1, 0.1, -5., 5.); - //minuit.fixParameter(5); - minuit.addParameter(sigma2, 0.1, -5., 5.); - //minuit.fixParameter(6); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(alpha.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(mean.ptr()); - pars.push_back(sigma1.ptr()); - pars.push_back(sigma2.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - alpha.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - mean.name().c_str(), - sigma1.name().c_str(), - sigma2.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitCoBwGGf_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitCoBwGGf_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("convbwf2g")) { - cout << "Fitting histograms in input files to the convolution between the fixed Z Breit-Wigner and a linear " - "combination of Gaussians\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << alpha << endl; - cout << mass << endl; - cout << gamma << endl; - cout << mean << endl; - cout << sigma1 << endl; - cout << sigma2 << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::BreitWigner bw(mass, gamma); - funct::Gaussian gaus1(mean, sigma1); - funct::Gaussian gaus2(mean, sigma2); - typedef funct::Product::type G1; - typedef funct::Product::type, funct::Gaussian>::type G2; - typedef funct::Product::type>::type GaussComb; - GaussComb gc = c_yield * (c_alpha * gaus1 + (_1 - c_alpha) * gaus2); - typedef funct::Convolution::type FitFunction; - double range = 3 * max(sigma1.value(), sigma2.value()); - FitFunction f(bw, gc, -range, range, 1000); - cout << "set functions" << endl; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - //minuit.fixParameter(0); - minuit.addParameter(alpha, 0.1, -1., 1.); - //minuit.fixParameter(1); - minuit.addParameter(mass, .1, 70., 110); - minuit.fixParameter(mass.name()); - minuit.addParameter(gamma, 1, 1, 10); - minuit.fixParameter(gamma.name()); - minuit.addParameter(mean, 0.001, -0.5, 0.5); - //minuit.fixParameter(4); - minuit.addParameter(sigma1, 0.1, -5., 5.); - //minuit.fixParameter(5); - minuit.addParameter(sigma2, 0.1, -10., 10.); - //minuit.fixParameter(6); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(alpha.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(mean.ptr()); - pars.push_back(sigma1.ptr()); - pars.push_back(sigma2.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - alpha.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - mean.name().c_str(), - sigma1.name().c_str(), - sigma2.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitCoBwfGG_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitCoBwfGG_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("convbwint2gf")) { - cout << "Fitting histograms in input files to the convolution between the Breit-Wigner plus Z/photon " - "interference and a linear combination of fixed Gaussians\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << alpha << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - cout << mean << endl; - cout << sigma1 << endl; - cout << sigma2 << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Gaussian gaus1(mean, sigma1); - funct::Gaussian gaus2(mean, sigma2); - typedef funct::Product::type G1; - typedef funct::Product::type, funct::Gaussian>::type G2; - typedef funct::Product::type>::type GaussComb; - GaussComb gc = c_yield * (c_alpha * gaus1 + (_1 - c_alpha) * gaus2); - typedef funct::Convolution::type FitFunction; - double range = 3 * max(sigma1.value(), sigma2.value()); - FitFunction f(zls, gc, -range, range, integratorConv); - cout << "set functions" << endl; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - //minuit.fixParameter(0); - minuit.addParameter(alpha, 0.1, -1., 1.); - //minuit.fixParameter(1); - minuit.addParameter(mass, .1, 70., 110); - //minuit.fixParameter(2); - minuit.addParameter(gamma, 1, 1, 10); - //minuit.fixParameter(3); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.fixParameter(f_gamma.name()); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - //minuit.fixParameter(5); - minuit.addParameter(mean, 0.001, -0.5, 0.5); - minuit.fixParameter(mean.name()); - minuit.addParameter(sigma1, 0.1, -5., 5.); - //minuit.fixParameter(7); - minuit.addParameter(sigma2, 0.1, -5., 5.); - //minuit.fixParameter(8); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(alpha.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - pars.push_back(mean.ptr()); - pars.push_back(sigma1.ptr()); - pars.push_back(sigma2.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - alpha.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str(), - mean.name().c_str(), - sigma1.name().c_str(), - sigma2.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitCoBwInGGf_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitCoBwInGGf_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("convbwintf2g")) { - cout << "Fitting histograms in input files to the convolution between the fixed Breit-Wigner plus Z/photon " - "interference and a linear combination of Gaussians\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << alpha << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - cout << mean << endl; - cout << sigma1 << endl; - cout << sigma2 << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Gaussian gaus1(mean, sigma1); - funct::Gaussian gaus2(mean, sigma2); - typedef funct::Product::type G1; - typedef funct::Product::type, funct::Gaussian>::type G2; - typedef funct::Product::type>::type GaussComb; - GaussComb gc = c_yield * (c_alpha * gaus1 + (_1 - c_alpha) * gaus2); - typedef funct::Convolution::type FitFunction; - double range = 3 * max(sigma1.value(), sigma2.value()); - FitFunction f(zls, gc, -range, range, integratorConv); - cout << "set functions" << endl; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - //minuit.fixParameter(0); - minuit.addParameter(alpha, 0.1, -1., 1.); - //minuit.fixParameter(1); - minuit.addParameter(mass, .1, 70., 110); - minuit.fixParameter(mass.name()); - minuit.addParameter(gamma, 1, 1, 10); - minuit.fixParameter(gamma.name()); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.fixParameter(f_gamma.name()); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - //minuit.fixParameter(5); - minuit.addParameter(mean, 0.001, -0.5, 0.5); - //minuit.fixParameter(6); - minuit.addParameter(sigma1, 0.1, -5., 5.); - //minuit.fixParameter(7); - minuit.addParameter(sigma2, 0.1, -10., 10.); - //minuit.fixParameter(8); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(alpha.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - pars.push_back(mean.ptr()); - pars.push_back(sigma1.ptr()); - pars.push_back(sigma2.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - alpha.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str(), - mean.name().c_str(), - sigma1.name().c_str(), - sigma2.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitCoBwInfGG_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitCoBwInfGG_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("convbwintgam2gf")) { - cout << "Fitting histograms in input files to the convolution of the Breit-Wigner plus Z/photon interference and " - "photon propagator with a linear combination of fixed Gaussians\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << alpha << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - cout << mean << endl; - cout << sigma1 << endl; - cout << sigma2 << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Gaussian gaus1(mean, sigma1); - funct::Gaussian gaus2(mean, sigma2); - typedef funct::Product::type G1; - typedef funct::Product::type, funct::Gaussian>::type G2; - typedef funct::Product::type>::type GaussComb; - GaussComb gc = c_yield * (c_alpha * gaus1 + (_1 - c_alpha) * gaus2); - typedef funct::Convolution::type FitFunction; - double range = 3 * max(sigma1.value(), sigma2.value()); - FitFunction f(zls, gc, -range, range, integratorConv); - cout << "set functions" << endl; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 10000000); - //minuit.fixParameter(0); - minuit.addParameter(alpha, 0.1, -1., 1.); - //minuit.fixParameter(1); - minuit.addParameter(mass, .1, 70., 110); - //minuit.fixParameter(2); - minuit.addParameter(gamma, 1, 1, 10); - //minuit.fixParameter(3); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - //minuit.fixParameter(4); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - //minuit.fixParameter(5); - minuit.addParameter(mean, 0.001, -0.5, 0.5); - minuit.fixParameter(mean.name()); - minuit.addParameter(sigma1, 0.1, -5., 5.); - // minuit.fixParameter(7); - minuit.addParameter(sigma2, 0.1, -5., 5.); - // minuit.fixParameter(8); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(alpha.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - pars.push_back(mean.ptr()); - pars.push_back(sigma1.ptr()); - pars.push_back(sigma2.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - alpha.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str(), - mean.name().c_str(), - sigma1.name().c_str(), - sigma2.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitCoBwInGaGGf_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitCoBwInGaGGf_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("convbwintgamf2g")) { - cout << "Fitting histograms in input files to the convolution of the fixed Breit-Wigner plus Z/photon " - "interference and photon propagator with a linear combination of Gaussians\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << alpha << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - cout << mean << endl; - cout << sigma1 << endl; - cout << sigma2 << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Gaussian gaus1(mean, sigma1); - funct::Gaussian gaus2(mean, sigma2); - typedef funct::Product::type G1; - typedef funct::Product::type, funct::Gaussian>::type G2; - typedef funct::Product::type>::type GaussComb; - GaussComb gc = c_yield * (c_alpha * gaus1 + (_1 - c_alpha) * gaus2); - typedef funct::Convolution::type FitFunction; - double range = 3 * max(sigma1.value(), sigma2.value()); - FitFunction f(zls, gc, -range, range, integratorConv); - cout << "set functions" << endl; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - //minuit.fixParameter(0); - minuit.addParameter(alpha, 0.1, -1., 1.); - //minuit.fixParameter(1); - minuit.addParameter(mass, .1, 70., 110); - minuit.fixParameter(mass.name()); - minuit.addParameter(gamma, 1, 1, 10); - minuit.fixParameter(gamma.name()); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - //minuit.fixParameter(4); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - //minuit.fixParameter(5); - minuit.addParameter(mean, 0.001, -0.5, 0.5); - //minuit.fixParameter(6); - minuit.addParameter(sigma1, 0.1, -5., 5.); - //minuit.fixParameter(7); - minuit.addParameter(sigma2, 0.1, -10., 10.); - //minuit.fixParameter(8); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(alpha.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - pars.push_back(mean.ptr()); - pars.push_back(sigma1.ptr()); - pars.push_back(sigma2.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - alpha.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str(), - mean.name().c_str(), - sigma1.name().c_str(), - sigma2.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitCoBwInGafGG_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitCoBwInGafGG_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - cout << "It works!\n"; - } catch (std::exception &e) { - cerr << "error: " << e.what() << "\n"; - return 1; - } catch (...) { - cerr << "Exception of unknown type!\n"; - } - return 0; -} diff --git a/ElectroWeakAnalysis/ZMuMu/bin/zMassHSFit.cpp b/ElectroWeakAnalysis/ZMuMu/bin/zMassHSFit.cpp deleted file mode 100644 index 5abc1d2ac8887..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/zMassHSFit.cpp +++ /dev/null @@ -1,353 +0,0 @@ -#include "PhysicsTools/Utilities/interface/Parameter.h" -#include "PhysicsTools/Utilities/interface/BreitWigner.h" -#include "PhysicsTools/Utilities/interface/Constant.h" -#include "PhysicsTools/Utilities/interface/Number.h" -#include "PhysicsTools/Utilities/interface/Product.h" -#include "PhysicsTools/Utilities/interface/Sum.h" -#include "PhysicsTools/Utilities/interface/Difference.h" -#include "PhysicsTools/Utilities/interface/Gaussian.h" -#include "PhysicsTools/Utilities/interface/ZLineShape.h" -#include "PhysicsTools/Utilities/interface/Exponential.h" -#include "PhysicsTools/Utilities/interface/Convolution.h" -#include "PhysicsTools/Utilities/interface/HistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/RootMinuit.h" -#include "PhysicsTools/Utilities/interface/RootFunctionAdapter.h" -#include "PhysicsTools/Utilities/interface/rootPlot.h" -#include "TFile.h" -#include "TH1.h" -#include "TF1.h" -#include "TMath.h" -#include "TCanvas.h" -#include "TROOT.h" - -#include -#include -#include -#include -#include -#include -#include -using namespace boost; -namespace po = boost::program_options; -using namespace std; - -typedef funct::GaussIntegrator IntegratorConv; - -// A helper function to simplify the main part. -template -ostream &operator<<(ostream &os, const vector &v) { - copy(v.begin(), v.end(), ostream_iterator(cout, " ")); - return os; -} - -int main(int ac, char *av[]) { - try { - double fMin, fMax; - string ext; - po::options_description desc("Allowed options"); - desc.add_options()("help", "produce help message")("include-path,I", po::value >(), "include path")( - "input-file", po::value >(), "input file")( - "min,m", po::value(&fMin)->default_value(60), "minimum value for fit range")( - "max,M", po::value(&fMax)->default_value(120), "maximum value for fit range")( - "convbwintgamg", - "fit to the convolution of a breit-wigner plus interference term and gamma propagator and a gaussian")( - "convexpbwintgamg", - "fit to the convolution of the product between an exponential and a breit-wigner plus interference term and " - "gamma propagator with a gaussian")("convbwintgam2gf", - "fit to the convolution of the breit-wigner plus interference term and " - "gamma propagator with a linear combination of fixed gaussians")( - "output-file,O", po::value(&ext)->default_value(".ps"), "output file format"); - - po::positional_options_description p; - p.add("input-file", -1); - - po::variables_map vm; - po::store(po::command_line_parser(ac, av).options(desc).positional(p).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - if (vm.count("include-path")) { - cout << "Include paths are: " << vm["include-path"].as >() << "\n"; - } - - vector v_file; - vector v_ZMassHistos; - vector v_eps; - - if (vm.count("input-file")) { - cout << "Input files are: " << vm["input-file"].as >() << "\n"; - v_file = vm["input-file"].as >(); - for (vector::const_iterator it = v_file.begin(); it != v_file.end(); ++it) { - TFile *root_file = new TFile(it->c_str(), "read"); - TDirectory *Histos = (TDirectory *)root_file->GetDirectory("ZHisto"); - TDirectory *RecoHistos = (TDirectory *)Histos->GetDirectory("ZRecoHisto"); - TH1D *zMass = (TH1D *)RecoHistos->Get("ZMass"); - zMass->Rebin(4); //remember... - zMass->GetXaxis()->SetTitle("#mu #mu invariant mass (GeV/c^{2})"); - v_ZMassHistos.push_back(zMass); - gROOT->SetStyle("Plain"); - //gStyle->SetOptFit(1111); - string f_string = *it; - replace(f_string.begin(), f_string.end(), '.', '_'); - string eps_string = f_string + ext; - v_eps.push_back(eps_string); - cout << ">>> histogram loaded\n"; - } - cout << v_file.size() << ", " << v_ZMassHistos.size() << ", " << v_eps.size() << endl; - cout << ">>> Input files loaded\n"; - } - - IntegratorConv integratorConv(1.e-5); - //Values for Z mass and width - funct::Parameter mass("Mass", 91.364); - funct::Parameter gamma("Gamma", 4.11); - //Parameters for Z Line Shape - funct::Parameter f_gamma("Photon factor", 0.838); - funct::Parameter f_int("Interference factor", -0.00197); - //Parameters for fits with gaussians - funct::Parameter yield("Yield", 283000); - funct::Parameter alpha("Alpha", 0.771); //the first gaussian is narrow - funct::Parameter mean("Mean", 0); //0.229 - funct::Parameter sigma1("Sigma 1", 0.76); - funct::Parameter sigma2("Sigma 2", 2.94); - //Parameter for exponential - funct::Parameter lambda("Lambda", 0); - - if (vm.count("convbwintgamg")) { - cout << "Fitting histograms in input files to the convolution of the Breit-Wigner plus Z/photon interference and " - "photon propagator with a Gaussian\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - cout << mean << endl; - cout << sigma1 << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Gaussian gauss(mean, sigma1); - double range = 3 * sigma1.value(); - funct::Convolution::type czg( - zls, gauss, -range, range, integratorConv); - funct::Constant c(yield); - typedef funct::Product::type>::type - FitFunction; - FitFunction f = c * czg; - cout << "set functions" << endl; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 10000000); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - minuit.addParameter(mean, 0.001, -0.5, 0.5); - minuit.fixParameter(mean.name()); - minuit.addParameter(sigma1, 0.1, -5., 5.); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - pars.push_back(mean.ptr()); - pars.push_back(sigma1.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str(), - mean.name().c_str(), - sigma1.name().c_str()); - fun.SetLineColor(kRed); - fun.SetNpx(100000); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitCoBwInGaG_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitCoBwInGaG_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("convexpbwintgamg")) { - cout << "Fitting histograms in input files to the convolution of the product between an exponential and a " - "breit-wigner plus interference term and gamma propagator with a gaussian" - << endl; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << lambda << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - cout << mean << endl; - cout << sigma1 << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::Exponential expo(lambda); - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Gaussian gauss(mean, sigma1); - typedef funct::Product::type ExpZLS; - ExpZLS expz = expo * zls; - double range = 3 * sigma1.value(); - funct::Convolution::type cezg( - expz, gauss, -range, range, integratorConv); - funct::Constant c(yield); - typedef funct::Product::type>::type - FitFunction; - FitFunction f = c * cezg; - cout << "set functions" << endl; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 10000000); - minuit.addParameter(lambda, 0.1, -100, 100); - minuit.fixParameter(lambda.name()); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - minuit.addParameter(mean, 0.001, -0.5, 0.5); - minuit.fixParameter(mean.name()); - minuit.addParameter(sigma1, 0.1, -5., 5.); - minuit.minimize(); - minuit.printFitResults(); - minuit.releaseParameter(lambda.name()); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(lambda.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - pars.push_back(mean.ptr()); - pars.push_back(sigma1.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - lambda.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str(), - mean.name().c_str(), - sigma1.name().c_str()); - fun.SetLineColor(kRed); - fun.SetNpx(100000); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitCoExBwInGaG_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitCoExBwInGaG_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("convbwintgam2gf")) { - cout << "Fitting histograms in input files to the convolution of the Breit-Wigner plus Z/photon interference and " - "photon propagator with a linear combination of fixed Gaussians\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << alpha << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - cout << mean << endl; - cout << sigma1 << endl; - cout << sigma2 << endl; - for (unsigned int i = 0; i < v_ZMassHistos.size(); ++i) { - TH1D *zMass = v_ZMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Gaussian gaus1(mean, sigma1); - funct::Gaussian gaus2(mean, sigma2); - funct::Number _1(1); - typedef funct::Product::type G1; - typedef funct::Product::type, funct::Gaussian>::type G2; - typedef funct::Product::type>::type GaussComb; - funct::Constant c_alpha(alpha), c_yield(yield); - GaussComb gc = c_yield * (c_alpha * gaus1 + (_1 - c_alpha) * gaus2); - typedef funct::Convolution::type FitFunction; - double range = 3 * max(sigma1.value(), sigma2.value()); - FitFunction f(zls, gc, -range, range, integratorConv); - cout << "set functions" << endl; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 10000000); - minuit.addParameter(alpha, 0.1, -1., 1.); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - minuit.addParameter(mean, 0.001, -0.5, 0.5); - minuit.fixParameter(mean.name()); - minuit.addParameter(sigma1, 0.1, -5., 5.); - minuit.addParameter(sigma2, 0.1, -5., 5.); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(alpha.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - pars.push_back(mean.ptr()); - pars.push_back(sigma1.ptr()); - pars.push_back(sigma2.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - alpha.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str(), - mean.name().c_str(), - sigma1.name().c_str(), - sigma2.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassFitCoBwInGaGGf_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassFitCoBwInGaGGf_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - cout << "It works!\n"; - } catch (std::exception &e) { - cerr << "error: " << e.what() << "\n"; - return 1; - } catch (...) { - cerr << "Exception of unknown type!\n"; - } - return 0; -} diff --git a/ElectroWeakAnalysis/ZMuMu/bin/zMassMCFit.cpp b/ElectroWeakAnalysis/ZMuMu/bin/zMassMCFit.cpp deleted file mode 100644 index 91cd65815fbe0..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/zMassMCFit.cpp +++ /dev/null @@ -1,355 +0,0 @@ -#include "PhysicsTools/Utilities/interface/Parameter.h" -#include "PhysicsTools/Utilities/interface/BreitWigner.h" -#include "PhysicsTools/Utilities/interface/Constant.h" -#include "PhysicsTools/Utilities/interface/Product.h" -#include "PhysicsTools/Utilities/interface/Exponential.h" -#include "PhysicsTools/Utilities/interface/Gaussian.h" -#include "PhysicsTools/Utilities/interface/ZLineShape.h" -#include "PhysicsTools/Utilities/interface/HistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/RootMinuit.h" -#include "PhysicsTools/Utilities/interface/RootFunctionAdapter.h" -#include "PhysicsTools/Utilities/interface/rootPlot.h" -#include "TFile.h" -#include "TH1.h" -#include "TF1.h" -#include "TMath.h" -#include "TCanvas.h" -#include "TROOT.h" -#include "TMath.h" - -#include -#include -#include -#include -#include -#include -using namespace boost; -namespace po = boost::program_options; -using namespace std; - -// A helper function to simplify the main part. -template -ostream &operator<<(ostream &os, const vector &v) { - copy(v.begin(), v.end(), ostream_iterator(cout, " ")); - return os; -} - -int main(int ac, char *av[]) { - try { - double fMin, fMax; - string ext; - po::options_description desc("Allowed options"); - desc.add_options()("help", "produce help message")("include-path,I", po::value >(), "include path")( - "input-file", po::value >(), "input file")( - "min,m", po::value(&fMin)->default_value(80), "minimum value for fit range")( - "max,M", po::value(&fMax)->default_value(120), "maximum value for fit range")( - "breitwigner", "fit to a breit-wigner")("gauss", "fit to a gaussian")( - "bwinter", "fit to a breit-wigner plus Z/photon interference term")( - "bwintgam", "fit to a breit-wigner plus Z/photon interference term and photon propagator")( - "expbwintgam", - "fit to the product of an exponential with a breit-wigner plus Z/photon interference term and photon " - "propagator")("output-file,O", po::value(&ext)->default_value(".ps"), "output file format"); - - po::positional_options_description p; - p.add("input-file", -1); - - po::variables_map vm; - po::store(po::command_line_parser(ac, av).options(desc).positional(p).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - if (vm.count("include-path")) { - cout << "Include paths are: " << vm["include-path"].as >() << "\n"; - } - - vector v_file; - vector v_ZMCMassHistos; - vector v_eps; - - if (vm.count("input-file")) { - cout << "Input files are: " << vm["input-file"].as >() << "\n"; - v_file = vm["input-file"].as >(); - for (vector::const_iterator it = v_file.begin(); it != v_file.end(); ++it) { - TFile *root_file = new TFile(it->c_str(), "read"); - TDirectory *Histos = (TDirectory *)root_file->GetDirectory("ZHisto"); - TDirectory *MCHistos = (TDirectory *)Histos->GetDirectory("ZMCHisto"); - TH1D *zMass = (TH1D *)MCHistos->Get("ZMCMass"); - zMass->Rebin(4); //remember... - zMass->GetXaxis()->SetTitle("Mass (GeV/c^{2})"); - v_ZMCMassHistos.push_back(zMass); - gROOT->SetStyle("Plain"); - string f_string = *it; - replace(f_string.begin(), f_string.end(), '.', '_'); - string eps_string = f_string + ext; - v_eps.push_back(eps_string); - cout << ">>> histogram loaded\n"; - } - cout << v_file.size() << ", " << v_ZMCMassHistos.size() << ", " << v_eps.size() << endl; - cout << ">>> Input files loaded\n"; - } - //PDG values for Z mass and width - funct::Parameter mass("Mass", 91.1876); - funct::Parameter gamma("Gamma", 2.4952); - //Parameters for Z Line Shape - funct::Parameter f_gamma("Photon factor", 0); - funct::Parameter f_int("Interference factor", 0.001); - //Parameters for fits with one gaussian - funct::Parameter yield("Yield", 1000); - funct::Parameter mean("Mean", 90); - funct::Parameter sigma("Sigma", 1.); - //Parameters for fit with an exponential - funct::Parameter lambda("Lambda", 0); - - if (vm.count("breitwigner")) { - cout << "Fitting histograms in input file to a Breit-Wigner\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mass << endl; - cout << gamma << endl; - for (unsigned int i = 0; i < v_ZMCMassHistos.size(); ++i) { - cout << ">>> load histogram\n"; - TH1D *zMass = v_ZMCMassHistos[i]; - cout << ">>> histogram loaded\n"; - funct::BreitWigner bw(mass, gamma); - funct::Constant c(yield); - typedef funct::Product::type FitFunction; - FitFunction f = c * bw; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.minimize(); - minuit.printFitResults(); - TF1 fun = root::tf1("fun", f, fMin, fMax, yield, mass, gamma); - fun.SetParNames(yield.name().c_str(), mass.name().c_str(), gamma.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassMCFitBW_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassMCFitBW_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("gauss")) { - cout << "Fitting histograms in input files to a Gaussian\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mean << endl; - cout << sigma << endl; - for (unsigned int i = 0; i < v_ZMCMassHistos.size(); ++i) { - TH1D *zMass = v_ZMCMassHistos[i]; - funct::Gaussian gaus(mean, sigma); - funct::Constant c(yield); - typedef funct::Product::type FitFunction; - FitFunction f = c * gaus; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - minuit.addParameter(mean, 0.001, 80, 100); - minuit.addParameter(sigma, 0.1, -5., 5.); - minuit.minimize(); - minuit.printFitResults(); - TF1 fun = root::tf1("fun", f, fMin, fMax, yield, mean, sigma); - fun.SetParNames(yield.name().c_str(), mean.name().c_str(), sigma.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassMCFitG_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassMCFitG_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("bwinter")) { - cout << "Fitting histograms in input files to the Breit-Wigner plus Z/photon interference term\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - for (unsigned int i = 0; i < v_ZMCMassHistos.size(); ++i) { - TH1D *zMass = v_ZMCMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Constant c(yield); - typedef funct::Product::type FitFunction; - FitFunction f = c * zls; - cout << "set functions" << endl; - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.fixParameter(f_gamma.name()); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - minuit.minimize(); - minuit.printFitResults(); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassMCFitBwIn_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassMCFitBwIn_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("bwintgam")) { - cout << "Fitting histograms in input files to the Breit-Wigner plus Z/photon interference term and photon " - "propagator\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - for (unsigned int i = 0; i < v_ZMCMassHistos.size(); ++i) { - TH1D *zMass = v_ZMCMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Constant c(yield); - typedef funct::Product::type FitFunction; - FitFunction f = c * zls; - cout << "set functions" << endl; - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 1000000); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - minuit.minimize(); - minuit.printFitResults(); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetNpx(100000); - fun.SetParNames(yield.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassMCFitBwInGa_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassMCFitBwInGa_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("expbwintgam")) { - cout << "Fitting histograms in input files to the product of an exponential with the Breit-Wigner plus Z/photon " - "interference term and photon propagator\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << lambda << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - for (unsigned int i = 0; i < v_ZMCMassHistos.size(); ++i) { - TH1D *zMass = v_ZMCMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Exponential expo(lambda); - funct::Constant c(yield); - typedef funct::Product::type ExpZLS; - ExpZLS expz = expo * zls; - typedef funct::Product::type FitFunction; - FitFunction f = c * expz; - cout << "set functions" << endl; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 10000000); - minuit.addParameter(lambda, 0.1, -100, 100); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(lambda.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetNpx(100000); - fun.SetParNames(yield.name().c_str(), - lambda.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassMCFitExpBwInGa_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassMCFitExpBwInGa_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - cout << "It works!\n"; - } catch (std::exception &e) { - cerr << "error: " << e.what() << "\n"; - return 1; - } catch (...) { - cerr << "Exception of unknown type!\n"; - } - return 0; -} diff --git a/ElectroWeakAnalysis/ZMuMu/bin/zMassResFit.cpp b/ElectroWeakAnalysis/ZMuMu/bin/zMassResFit.cpp deleted file mode 100644 index 4ce46ab3144a5..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/zMassResFit.cpp +++ /dev/null @@ -1,280 +0,0 @@ -#include "PhysicsTools/Utilities/interface/Parameter.h" -#include "PhysicsTools/Utilities/interface/Constant.h" -#include "PhysicsTools/Utilities/interface/Number.h" -#include "PhysicsTools/Utilities/interface/Product.h" -#include "PhysicsTools/Utilities/interface/Sum.h" -#include "PhysicsTools/Utilities/interface/Difference.h" -#include "PhysicsTools/Utilities/interface/Gaussian.h" -#include "PhysicsTools/Utilities/interface/HistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/RootMinuit.h" -#include "PhysicsTools/Utilities/interface/RootFunctionAdapter.h" -#include "PhysicsTools/Utilities/interface/rootPlot.h" -#include "TFile.h" -#include "TH1.h" -#include "TF1.h" -#include "TMath.h" -#include "TCanvas.h" -#include "TROOT.h" -#include "TMath.h" - -#include -using namespace boost; -namespace po = boost::program_options; - -#include -#include -#include -#include -#include -using namespace std; - -// A helper function to simplify the main part. -template -ostream &operator<<(ostream &os, const vector &v) { - copy(v.begin(), v.end(), ostream_iterator(cout, " ")); - return os; -} - -int main(int ac, char *av[]) { - try { - double fMin, fMax; - string ext; - po::options_description desc("Allowed options"); - desc.add_options()("help", "produce help message")("include-path,I", po::value >(), "include path")( - "input-file", po::value >(), "input file")( - "min,m", po::value(&fMin)->default_value(-20), "minimum value for fit range")( - "max,M", po::value(&fMax)->default_value(20), "maximum value for fit range")( - "gauss", "fit to a gaussian")("2gauss", "fit to a linear combination of two gaussians")( - "3gauss", "fit to a linear combination of three gaussians")( - "output-file,O", po::value(&ext)->default_value(".ps"), "output file format"); - - po::positional_options_description p; - p.add("input-file", -1); - - po::variables_map vm; - po::store(po::command_line_parser(ac, av).options(desc).positional(p).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - if (vm.count("include-path")) { - cout << "Include paths are: " << vm["include-path"].as >() << "\n"; - } - - vector v_file; - vector v_ZMassResHistos; - vector v_eps; - - if (vm.count("input-file")) { - cout << "Input files are: " << vm["input-file"].as >() << "\n"; - v_file = vm["input-file"].as >(); - for (vector::const_iterator it = v_file.begin(); it != v_file.end(); ++it) { - TFile *root_file = new TFile(it->c_str(), "read"); - TDirectory *Histos = (TDirectory *)root_file->GetDirectory("ZHisto"); - TDirectory *RecoHistos = (TDirectory *)Histos->GetDirectory("ZResolutionHisto"); - TH1D *zMass = (TH1D *)RecoHistos->Get("ZToMuMuRecoMassResolution"); - zMass->GetXaxis()->SetTitle("Mass (GeV/c^{2})"); - v_ZMassResHistos.push_back(zMass); - gROOT->SetStyle("Plain"); - string f_string = *it; - replace(f_string.begin(), f_string.end(), '.', '_'); - string eps_string = f_string + ext; - v_eps.push_back(eps_string); - cout << ">>> histogram loaded\n"; - } - cout << v_file.size() << ", " << v_ZMassResHistos.size() << ", " << v_eps.size() << endl; - cout << ">>> Input files loaded\n"; - } - //Parameters for fit - funct::Parameter yield("Yield", 10000); - funct::Parameter alpha("Alpha", 0); - funct::Parameter beta("Beta", 0); - funct::Parameter mean("Mean", 0); - funct::Parameter mean2("Mean 2", 0); - funct::Parameter mean3("Mean 3", 0); - funct::Parameter sigma1("Sigma 1", 1.); - funct::Parameter sigma2("Sigma 2", 2.5); - funct::Parameter sigma3("Sigma 3", 9.); - - if (vm.count("gauss")) { - cout << "Fitting histograms in input files to a Gaussian\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mean << endl; - cout << sigma1 << endl; - for (unsigned int i = 0; i < v_ZMassResHistos.size(); ++i) { - TH1D *zMass = v_ZMassResHistos[i]; - zMass->Rebin(4); //remember... - funct::Gaussian gaus(mean, sigma1); - funct::Constant c(yield); - typedef funct::Product::type FitFunction; - FitFunction f = c * gaus; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 10000000); - minuit.addParameter(mean, 0.001, -1., 1.); - minuit.addParameter(sigma1, 0.1, -5., 5.); - minuit.minimize(); - minuit.printFitResults(); - TF1 fun = root::tf1("fun", f, fMin, fMax, yield, mean, sigma1); - fun.SetParNames(yield.name().c_str(), mean.name().c_str(), sigma1.name().c_str()); - fun.SetLineColor(kRed); - fun.SetNpx(1000); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassResFitG_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassResFitG_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("2gauss")) { - cout << "Fitting histograms in input files to a linear combination of two Gaussians\n"; - cout << "set pars: " << endl; - cout << yield << endl; - cout << alpha << endl; - cout << mean << endl; - cout << mean2 << endl; - cout << sigma1 << endl; - cout << sigma2 << endl; - for (unsigned int i = 0; i < v_ZMassResHistos.size(); ++i) { - TH1D *zMass = v_ZMassResHistos[i]; - zMass->Rebin(4); //remember... - funct::Gaussian gaus1(mean, sigma1); - funct::Gaussian gaus2(mean, sigma2); - typedef funct::Product::type G1; - typedef funct::Product::type, funct::Gaussian>::type G2; - typedef funct::Product::type>::type FitFunction; - funct::Number _1(1); - funct::Constant c_alpha(alpha), c_yield(yield); - FitFunction f = c_yield * (c_alpha * gaus1 + (_1 - c_alpha) * gaus2); - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 10000000); - minuit.addParameter(alpha, 0.1, -1., 1.); - minuit.addParameter(mean, 0.001, -1., 1.); - minuit.addParameter(sigma1, 0.1, -5., 5.); - minuit.addParameter(sigma2, 0.1, -5., 5.); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(alpha.ptr()); - pars.push_back(mean.ptr()); - pars.push_back(sigma1.ptr()); - pars.push_back(sigma2.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - alpha.name().c_str(), - mean.name().c_str(), - sigma1.name().c_str(), - sigma2.name().c_str()); - fun.SetLineColor(kRed); - fun.SetNpx(1000); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassResFitGG_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassResFitGG_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("3gauss")) { - cout << "Fitting histograms in input files to a linear combination of three Gaussians\n"; - cout << "set pars: " << endl; - cout << yield << endl; - cout << alpha << endl; - cout << beta << endl; - cout << mean << endl; - cout << mean2 << endl; - cout << mean3 << endl; - cout << sigma1 << endl; - cout << sigma2 << endl; - cout << sigma3 << endl; - for (unsigned int i = 0; i < v_ZMassResHistos.size(); ++i) { - TH1D *zMass = v_ZMassResHistos[i]; - zMass->Rebin(4); //remember... - funct::Gaussian gaus1(mean, sigma1); - funct::Gaussian gaus2(mean2, sigma2); - funct::Gaussian gaus3(mean3, sigma3); - funct::Constant a(alpha), b(beta), c(yield); - funct::Number _1(1); - typedef funct::Product::type G1; - typedef funct::Sum::type SumG1; - typedef funct::Sum::type ConstSum; - typedef funct::Product::type, funct::Gaussian>::type G2; - typedef funct::Product::type>::type FitFunction; - FitFunction f = c * (a * gaus1 + b * gaus2 + (_1 - (a + b)) * gaus3); - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 10000000); - minuit.addParameter(alpha, 0.1, -1., 1.); - minuit.addParameter(beta, 0.1, -1., 1.); - minuit.addParameter(mean, 0.001, -1., 1.); - minuit.addParameter(mean2, 0.001, -1., 1.); - minuit.addParameter(mean3, 0.001, -1., 1.); - minuit.addParameter(sigma1, 0.1, -5., 5.); - minuit.addParameter(sigma2, 0.1, -5., 5.); - minuit.addParameter(sigma3, 0.1, -20., 20.); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(alpha.ptr()); - pars.push_back(beta.ptr()); - pars.push_back(mean.ptr()); - pars.push_back(mean2.ptr()); - pars.push_back(mean3.ptr()); - pars.push_back(sigma1.ptr()); - pars.push_back(sigma2.ptr()); - pars.push_back(sigma3.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - alpha.name().c_str(), - beta.name().c_str(), - mean.name().c_str(), - mean2.name().c_str(), - mean3.name().c_str(), - sigma1.name().c_str(), - sigma2.name().c_str(), - sigma3.name().c_str()); - fun.SetLineColor(kRed); - //fun.SetNpx(100000); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMassResFitGGG_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMassResFitGGG_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - cout << "It works!\n"; - } catch (std::exception &e) { - cerr << "error: " << e.what() << "\n"; - return 1; - } catch (...) { - cerr << "Exception of unknown type!\n"; - } - return 0; -} diff --git a/ElectroWeakAnalysis/ZMuMu/bin/zMuMuExpFit.cpp b/ElectroWeakAnalysis/ZMuMu/bin/zMuMuExpFit.cpp deleted file mode 100755 index 03cfbb39c5a6e..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/zMuMuExpFit.cpp +++ /dev/null @@ -1,259 +0,0 @@ -#include "PhysicsTools/Utilities/interface/Parameter.h" -#include "PhysicsTools/Utilities/interface/ZLineShape.h" -#include "PhysicsTools/Utilities/interface/Gaussian.h" -#include "PhysicsTools/Utilities/interface/Exponential.h" -#include "PhysicsTools/Utilities/interface/Polynomial.h" -#include "PhysicsTools/Utilities/interface/Convolution.h" -#include "PhysicsTools/Utilities/interface/Operations.h" -#include "PhysicsTools/Utilities/interface/MultiHistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/RootMinuit.h" -#include "PhysicsTools/Utilities/interface/RootMinuitCommands.h" -#include "PhysicsTools/Utilities/interface/rootPlot.h" -#include "TROOT.h" -#include "TH1.h" -#include "TFile.h" -#include -using namespace boost; -namespace po = boost::program_options; - -#include -#include -#include -#include -#include -#include -using namespace std; - -// A helper function to simplify the main part. -template -ostream& operator<<(ostream& os, const vector& v) { - copy(v.begin(), v.end(), ostream_iterator(cout, " ")); - return os; -} - -//A function that sets istogram contents to 0 -//if they are too small -void fix(TH1* histo) { - for(int i = 1; i <= histo->GetNbinsX(); ++i) { - if(histo->GetBinContent(i) < 0.1) { - histo->SetBinContent(i, 0.0); - histo->SetBinError(i, 0.0); - } - } -} - -typedef funct::GaussIntegrator IntegratorConv; - -int main(int ac, char *av[]) { - gROOT->SetStyle("Plain"); - try { - typedef funct::Product::type >::type ZPeak; - typedef funct::Product::type ZMuMuSig; - typedef ZMuMuSig ZMuMu; - typedef ZMuMuSig ZMuTkSig; - typedef funct::Product >::type >::type ZMuTkBkg; - typedef funct::Sum::type ZMuTk; - typedef funct::Product::type ZMuSaSig; - typedef funct::Parameter ZMuSaBkg; - typedef funct::Sum::type ZMuSa; - - typedef fit::MultiHistoChiSquare ChiSquared; - fit::RootMinuitCommands commands("ElectroWeakAnalysis/ZMuMu/test/zMuMuExpFit.txt"); - - double fMin, fMax; - string ext; - po::options_description desc("Allowed options"); - desc.add_options() - ("help", "produce help message") - ("include-path,I", po::value< vector >(), - "include path") - ("input-file", po::value< vector >(), "input file") - ("min,m", po::value(&fMin)->default_value(60), "minimum value for fit range") - ("max,M", po::value(&fMax)->default_value(120), "maximum value for fit range") - ("output-file,O", po::value(&ext)->default_value(".ps"), - "output file format") - ; - - po::positional_options_description p; - p.add("input-file", -1); - - po::variables_map vm; - po::store(po::command_line_parser(ac, av). - options(desc).positional(p).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - if (vm.count("include-path")) { - cout << "Include paths are: " - << vm["include-path"].as< vector >() << "\n"; - } - - if (vm.count("input-file")) { - cout << "Input files are: " - << vm["input-file"].as< vector >() << "\n"; - vector v_file = vm["input-file"].as< vector >(); - for(vector::const_iterator it = v_file.begin(); - it != v_file.end(); ++it) { - TFile * root_file = new TFile(it->c_str(),"read"); - TH1D * histoZMuMu = (TH1D*) root_file->Get("zToMM"); - fix(histoZMuMu); - TH1D * histoZMuTk = (TH1D*) root_file->Get("zToMTk"); - fix(histoZMuTk); - TH1D * histoZMuSa = (TH1D*) root_file->Get("zToMS"); - fix(histoZMuSa); - cout << ">>> histogram loaded\n"; - string f_string = *it; - replace(f_string.begin(), f_string.end(), '.', '_'); - string plot_string = f_string + ext; - cout << ">>> Input files loaded\n"; - - const char * kYieldZMuMu = "YieldZMuMu"; - const char * kYieldZMuTk = "YieldZMuTk"; - const char * kYieldZMuSa = "YieldZMuSa"; - const char * kYieldBkgZMuTk = "YieldBkgZMuTk"; - const char * kYieldBkgZMuSa = "YieldBkgZMuSa"; - const char * kLambdaZMuMu = "LambdaZMuMu"; - const char * kMass = "Mass"; - const char * kGamma = "Gamma"; - const char * kPhotonFactorZMuMu = "PhotonFactorZMuMu"; - const char * kInterferenceFactorZMuMu = "InterferenceFactorZMuMu"; - //const char * kPhotonFactorZMuTk = "PhotonFactorZMuTk"; - //const char * kInterferenceFactorZMuTk = "InterferenceFactorZMuTk"; - const char * kMeanZMuMu = "MeanZMuMu"; - const char * kSigmaZMuMu = "SigmaZMuMu"; - const char * kLambda = "Lambda"; - const char * kA0 = "A0"; - const char * kA1 = "A1"; - const char * kA2 = "A2"; - const char * kSigmaZMuSa = "SigmaZMuSa"; - - IntegratorConv integratorConv(1.e-5); - - funct::Parameter lambdaZMuMu(kLambdaZMuMu, commands.par(kLambdaZMuMu)); - funct::Parameter mass(kMass, commands.par(kMass)); - funct::Parameter gamma(kGamma, commands.par(kGamma)); - funct::Parameter photonFactorZMuMu(kPhotonFactorZMuMu, commands.par(kPhotonFactorZMuMu)); - funct::Parameter interferenceFactorZMuMu(kInterferenceFactorZMuMu, commands.par(kInterferenceFactorZMuMu)); - //funct::Parameter photonFactorZMuTk(kPhotonFactorZMuTk, commands.par(kPhotonFactorZMuTk)); - //funct::Parameter interferenceFactorZMuTk(kInterferenceFactorZMuTk, commands.par(kInterferenceFactorZMuTk)); - funct::Parameter yieldZMuMu(kYieldZMuMu, commands.par(kYieldZMuMu)); - funct::Parameter yieldZMuTk(kYieldZMuTk, commands.par(kYieldZMuTk)); - funct::Parameter yieldZMuSa(kYieldZMuSa, commands.par(kYieldZMuSa)); - funct::Parameter yieldBkgZMuTk(kYieldBkgZMuTk, commands.par(kYieldBkgZMuTk)); - funct::Parameter yieldBkgZMuSa(kYieldBkgZMuSa, commands.par(kYieldBkgZMuSa)); - funct::Parameter meanZMuMu(kMeanZMuMu, commands.par(kMeanZMuMu)); - funct::Parameter sigmaZMuMu(kSigmaZMuMu, commands.par(kSigmaZMuMu)); - funct::Parameter sigmaZMuSa(kSigmaZMuSa, commands.par(kSigmaZMuSa)); - funct::Parameter lambda(kLambda, commands.par(kLambda)); - funct::Parameter a0(kA0, commands.par(kA0)); - funct::Parameter a1(kA1, commands.par(kA1)); - funct::Parameter a2(kA2, commands.par(kA2)); - - ZPeak zPeak = funct::Exponential(lambdaZMuMu) * - funct::conv(funct::ZLineShape(mass, gamma, photonFactorZMuMu, interferenceFactorZMuMu), - funct::Gaussian(meanZMuMu, sigmaZMuMu), - -3*sigmaZMuMu.value(), 3*sigmaZMuMu.value(), integratorConv); - ZMuMu zMuMu = yieldZMuMu * zPeak; - ZMuTkBkg zMuTkBkg = - yieldBkgZMuTk * (funct::Exponential(lambda) * funct::Polynomial<2>(a0, a1, a2)); - ZMuTk zMuTk = yieldZMuTk * zPeak + zMuTkBkg; - ZMuSa zMuSa = yieldZMuSa * funct::Gaussian(mass, sigmaZMuSa) + yieldBkgZMuSa; - - ChiSquared chi2(zMuMu, histoZMuMu, - zMuTk, histoZMuTk, - zMuSa, histoZMuSa, - fMin, fMax); - cout << "N. deg. of freedom: " << chi2.numberOfBins() << endl; - fit::RootMinuit minuit(chi2, true); - commands.add(minuit, yieldZMuMu); - commands.add(minuit, yieldZMuTk); - commands.add(minuit, yieldZMuSa); - commands.add(minuit, yieldBkgZMuTk); - commands.add(minuit, yieldBkgZMuSa); - commands.add(minuit, lambdaZMuMu); - commands.add(minuit, mass); - commands.add(minuit, gamma); - commands.add(minuit, photonFactorZMuMu); - commands.add(minuit, interferenceFactorZMuMu); - //commands.add(minuit, photonFactorZMuTk); - //commands.add(minuit, interferenceFactorZMuTk); - commands.add(minuit, meanZMuMu); - commands.add(minuit, sigmaZMuMu); - commands.add(minuit, lambda); - commands.add(minuit, a0); - commands.add(minuit, a1); - commands.add(minuit, a2); - commands.add(minuit, sigmaZMuSa); - commands.run(minuit); - const unsigned int nPar = 17; - ROOT::Math::SMatrix > err; - minuit.getErrorMatrix(err); - std::cout << "error matrix:" << std::endl; - for(unsigned int i = 0; i < nPar; ++i) { - for(unsigned int j = 0; j < nPar; ++j) { - std::cout << err(i, j) << "\t"; - } - std::cout << std::endl; - } - minuit.printFitResults(); - string ZMuMuPlot = "ZMuMuFit" + plot_string; - root::plot(ZMuMuPlot.c_str(), *histoZMuMu, zMuMu, fMin, fMax, - yieldZMuMu, lambdaZMuMu, mass, gamma, photonFactorZMuMu, interferenceFactorZMuMu, - meanZMuMu, sigmaZMuMu, - kRed, 2, kDashed, 10000, - "Z -> #mu #mu mass with isolation cut", "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - string ZMuTkPlot = "ZMuTkFit" + plot_string; - TF1 funZMuTk = root::tf1("ZMuTkFunction", zMuTk, fMin, fMax, - yieldZMuTk, lambdaZMuMu, mass, gamma, photonFactorZMuMu, interferenceFactorZMuMu, - meanZMuMu, sigmaZMuMu, - yieldBkgZMuTk, lambda, a0, a1, a2); - funZMuTk.SetLineColor(kRed); - funZMuTk.SetLineWidth(2); - funZMuTk.SetLineStyle(kDashed); - funZMuTk.SetNpx(10000); - TF1 funZMuTkBkg = root::tf1("ZMuTkBack", zMuTkBkg, fMin, fMax, - yieldBkgZMuTk, lambda, a0, a1, a2); - funZMuTkBkg.SetLineColor(kGreen); - funZMuTkBkg.SetLineWidth(2); - funZMuTkBkg.SetLineStyle(kDashed); - funZMuTkBkg.SetNpx(10000); - histoZMuTk->SetTitle("Z -> #mu + (unmatched) track mass with isolation cut"); - histoZMuTk->SetXTitle("#mu + (unmatched) track invariant mass (GeV/c^{2})"); - histoZMuTk->SetYTitle("Events"); - TCanvas *canvas = new TCanvas("canvas"); - histoZMuTk->Draw("e"); - funZMuTk.Draw("same"); - funZMuTkBkg.Draw("same"); - canvas->SaveAs(ZMuTkPlot.c_str()); - canvas->SetLogy(); - string logZMuTkPlot = "log_" + ZMuTkPlot; - canvas->SaveAs(logZMuTkPlot.c_str()); - string ZMuSaPlot = "ZMuSaFit" + plot_string; - root::plot(ZMuSaPlot.c_str(), *histoZMuSa, zMuSa, fMin, fMax, - yieldZMuSa, mass, sigmaZMuSa, yieldBkgZMuSa, - kRed, 2, kDashed, 10000, - "Z -> #mu + (unmatched) standalone mass with isolation cut", - "#mu + (unmatched) standalone invariant mass (GeV/c^{2})", - "Events"); - } - } - - } - catch(std::exception& e) { - cerr << "error: " << e.what() << "\n"; - return 1; - } - catch(...) { - cerr << "Exception of unknown type!\n"; - } - return 0; -} - diff --git a/ElectroWeakAnalysis/ZMuMu/bin/zMuMuFit.cpp b/ElectroWeakAnalysis/ZMuMu/bin/zMuMuFit.cpp deleted file mode 100644 index 09bce04e22d6d..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/zMuMuFit.cpp +++ /dev/null @@ -1,283 +0,0 @@ -#include "PhysicsTools/Utilities/interface/Parameter.h" -#include "PhysicsTools/Utilities/interface/ZLineShape.h" -#include "PhysicsTools/Utilities/interface/Gaussian.h" -#include "PhysicsTools/Utilities/interface/Numerical.h" -#include "PhysicsTools/Utilities/interface/Exponential.h" -#include "PhysicsTools/Utilities/interface/Polynomial.h" -#include "PhysicsTools/Utilities/interface/Convolution.h" -#include "PhysicsTools/Utilities/interface/Operations.h" -#include "PhysicsTools/Utilities/interface/MultiHistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/RootMinuit.h" -#include "PhysicsTools/Utilities/interface/RootMinuitCommands.h" -#include "PhysicsTools/Utilities/interface/rootPlot.h" -#include "TROOT.h" -#include "TH1.h" -#include "TFile.h" -#include -using namespace boost; -namespace po = boost::program_options; - -#include -#include -#include -#include -#include -#include -using namespace std; - -// A helper function to simplify the main part. -template -ostream& operator<<(ostream& os, const vector& v) { - copy(v.begin(), v.end(), ostream_iterator(cout, " ")); - return os; -} - -//A function that sets istogram contents to 0 -//if they are too small -void fix(TH1* histo) { - for(int i = 1; i <= histo->GetNbinsX(); ++i) { - if(histo->GetBinContent(i) < 0.1) { - histo->SetBinContent(i, 0.0); - histo->SetBinError(i, 0.0); - } - } -} - -typedef funct::GaussIntegrator IntegratorConv; - -int main(int ac, char *av[]) { - gROOT->SetStyle("Plain"); - try { - typedef funct::Product::type>::type ZPeak; - typedef funct::Product::type ZMuMuSig; - typedef funct::Product >::type, - funct::Power >::type >::type ZMuMuEfficiency; - typedef funct::Product::type ZMuMu; - - typedef funct::Product, - funct::Product >::type, - funct::Product, funct::Parameter>::type - >::type - >::type - >::type ZMuTkEfficiency; - typedef funct::Product::type ZMuTkSig; - typedef funct::Product >::type >::type ZMuTkBkg; - typedef funct::Sum::type ZMuTk; - - typedef ZMuTkEfficiency ZMuSaEfficiency; - typedef funct::Product::type >::type ZMuSaSig; - typedef funct::Parameter ZMuSaBkg; - typedef funct::Sum::type ZMuSa; - - typedef fit::MultiHistoChiSquare ChiSquared; - fit::RootMinuitCommands commands("ElectroWeakAnalysis/ZMuMu/test/zMuMuFit.txt"); - - double fMin, fMax; - string ext; - po::options_description desc("Allowed options"); - desc.add_options() - ("help", "produce help message") - ("include-path,I", po::value< vector >(), - "include path") - ("input-file", po::value< vector >(), "input file") - ("min,m", po::value(&fMin)->default_value(60), "minimum value for fit range") - ("max,M", po::value(&fMax)->default_value(120), "maximum value for fit range") - ("output-file,O", po::value(&ext)->default_value(".ps"), - "output file format") - ; - - po::positional_options_description p; - p.add("input-file", -1); - - po::variables_map vm; - po::store(po::command_line_parser(ac, av). - options(desc).positional(p).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - if (vm.count("include-path")) { - cout << "Include paths are: " - << vm["include-path"].as< vector >() << "\n"; - } - - if (vm.count("input-file")) { - cout << "Input files are: " - << vm["input-file"].as< vector >() << "\n"; - vector v_file = vm["input-file"].as< vector >(); - for(vector::const_iterator it = v_file.begin(); - it != v_file.end(); ++it) { - TFile * root_file = new TFile(it->c_str(),"read"); - TH1D * histoZMuMu = (TH1D*) root_file->Get("zToMM"); - fix(histoZMuMu); - TH1D * histoZMuTk = (TH1D*) root_file->Get("zToMTk"); - fix(histoZMuTk); - TH1D * histoZMuSa = (TH1D*) root_file->Get("zToMS"); - fix(histoZMuSa); - cout << ">>> histogram loaded\n"; - string f_string = *it; - replace(f_string.begin(), f_string.end(), '.', '_'); - string plot_string = f_string + ext; - cout << ">>> Input files loaded\n"; - - const char * kYieldZMuMu = "YieldZMuMu"; - const char * kEfficiencyTk = "EfficiencyTk"; - const char * kEfficiencySa = "EfficiencySa"; - const char * kYieldBkgZMuTk = "YieldBkgZMuTk"; - const char * kYieldBkgZMuSa = "YieldBkgZMuSa"; - const char * kLambdaZMuMu = "LambdaZMuMu"; - const char * kMass = "Mass"; - const char * kGamma = "Gamma"; - const char * kPhotonFactorZMuMu = "PhotonFactorZMuMu"; - const char * kInterferenceFactorZMuMu = "InterferenceFactorZMuMu"; - //const char * kPhotonFactorZMuTk = "PhotonFactorZMuTk"; - //const char * kInterferenceFactorZMuTk = "InterferenceFactorZMuTk"; - const char * kMeanZMuMu = "MeanZMuMu"; - const char * kSigmaZMuMu = "SigmaZMuMu"; - const char * kLambda = "Lambda"; - const char * kA0 = "A0"; - const char * kA1 = "A1"; - const char * kA2 = "A2"; - const char * kSigmaZMuSa = "SigmaZMuSa"; - - IntegratorConv integratorConv(1.e-5); - - funct::Parameter lambdaZMuMu(kLambdaZMuMu, commands.par(kLambdaZMuMu)); - funct::Parameter mass(kMass, commands.par(kMass)); - funct::Parameter gamma(kGamma, commands.par(kGamma)); - funct::Parameter photonFactorZMuMu(kPhotonFactorZMuMu, commands.par(kPhotonFactorZMuMu)); - funct::Parameter interferenceFactorZMuMu(kInterferenceFactorZMuMu, commands.par(kInterferenceFactorZMuMu)); - //funct::Parameter photonFactorZMuTk(kPhotonFactorZMuTk, commands.par(kPhotonFactorZMuTk)); - //funct::Parameter interferenceFactorZMuTk(kInterferenceFactorZMuTk, commands.par(kInterferenceFactorZMuTk)); - funct::Parameter yieldZMuMu(kYieldZMuMu, commands.par(kYieldZMuMu)); - funct::Parameter efficiencyTk(kEfficiencyTk, commands.par(kEfficiencyTk)); - funct::Parameter efficiencySa(kEfficiencySa, commands.par(kEfficiencySa)); - funct::Parameter yieldBkgZMuTk(kYieldBkgZMuTk, commands.par(kYieldBkgZMuTk)); - funct::Parameter yieldBkgZMuSa(kYieldBkgZMuSa, commands.par(kYieldBkgZMuSa)); - funct::Parameter meanZMuMu(kMeanZMuMu, commands.par(kMeanZMuMu)); - funct::Parameter sigmaZMuMu(kSigmaZMuMu, commands.par(kSigmaZMuMu)); - funct::Parameter sigmaZMuSa(kSigmaZMuSa, commands.par(kSigmaZMuSa)); - funct::Parameter lambda(kLambda, commands.par(kLambda)); - funct::Parameter a0(kA0, commands.par(kA0)); - funct::Parameter a1(kA1, commands.par(kA1)); - funct::Parameter a2(kA2, commands.par(kA2)); - - ZPeak zPeak = funct::Exponential(lambdaZMuMu) * - funct::conv(funct::ZLineShape(mass, gamma, photonFactorZMuMu, interferenceFactorZMuMu), - funct::Gaussian(meanZMuMu, sigmaZMuMu), - -3*sigmaZMuMu.value(), 3*sigmaZMuMu.value(), integratorConv); - ZMuMuSig zMuMuSig = yieldZMuMu * zPeak; - ZMuMuEfficiency zMuMuEfficiency = (efficiencyTk ^ funct::Numerical<2>(2)) * - (efficiencySa ^ funct::Numerical<2>(2)); - ZMuMu zMuMu = zMuMuEfficiency * zMuMuSig; - ZMuTkBkg zMuTkBkg = - yieldBkgZMuTk * (funct::Exponential(lambda) * funct::Polynomial<2>(a0, a1, a2)); - ZMuTkEfficiency zMuTkEfficiency = funct::Numerical<2>(2) * - ((efficiencyTk ^ funct::Numerical<2>(2)) * (efficiencySa * (funct::Numerical<1>(1) - efficiencySa))); - ZMuTk zMuTk = zMuTkEfficiency * zMuMuSig + zMuTkBkg; - ZMuSaEfficiency zMuSaEfficiency = funct::Numerical<2>(2) * - ((efficiencySa ^ funct::Numerical<2>(2)) * (efficiencyTk * (funct::Numerical<1>(1) - efficiencyTk))); - ZMuSa zMuSa = zMuSaEfficiency * (yieldZMuMu * funct::Gaussian(mass, sigmaZMuSa)) + yieldBkgZMuSa; - - ChiSquared chi2(zMuMu, histoZMuMu, - zMuTk, histoZMuTk, - zMuSa, histoZMuSa, - fMin, fMax); - cout << "N. deg. of freedom: " << chi2.numberOfBins() << endl; - fit::RootMinuit minuit(chi2, true); - commands.add(minuit, yieldZMuMu); - commands.add(minuit, efficiencyTk); - commands.add(minuit, efficiencySa); - commands.add(minuit, yieldBkgZMuTk); - commands.add(minuit, yieldBkgZMuSa); - commands.add(minuit, lambdaZMuMu); - commands.add(minuit, mass); - commands.add(minuit, gamma); - commands.add(minuit, photonFactorZMuMu); - commands.add(minuit, interferenceFactorZMuMu); - //commands.add(minuit, photonFactorZMuTk); - //commands.add(minuit, interferenceFactorZMuTk); - commands.add(minuit, meanZMuMu); - commands.add(minuit, sigmaZMuMu); - commands.add(minuit, lambda); - commands.add(minuit, a0); - commands.add(minuit, a1); - commands.add(minuit, a2); - commands.add(minuit, sigmaZMuSa); - commands.run(minuit); - const unsigned int nPar = 17; - ROOT::Math::SMatrix > err; - minuit.getErrorMatrix(err); - std::cout << "error matrix:" << std::endl; - for(unsigned int i = 0; i < nPar; ++i) { - for(unsigned int j = 0; j < nPar; ++j) { - std::cout << err(i, j) << "\t"; - } - std::cout << std::endl; - } - minuit.printFitResults(); - string ZMuMuPlot = "ZMuMuFit" + plot_string; - root::plot(ZMuMuPlot.c_str(), *histoZMuMu, zMuMu, fMin, fMax, - efficiencyTk, efficiencySa, - yieldZMuMu, lambdaZMuMu, mass, gamma, photonFactorZMuMu, interferenceFactorZMuMu, - meanZMuMu, sigmaZMuMu, - kRed, 2, kDashed, 10000, - "Z -> #mu #mu mass", "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - string ZMuTkPlot = "ZMuTkFit" + plot_string; - TF1 funZMuTk = root::tf1("ZMuTkFunction", zMuTk, fMin, fMax, - efficiencyTk, efficiencySa, - yieldZMuMu, lambdaZMuMu, mass, gamma, photonFactorZMuMu, interferenceFactorZMuMu, - meanZMuMu, sigmaZMuMu, - yieldBkgZMuTk, lambda, a0, a1, a2); - funZMuTk.SetLineColor(kRed); - funZMuTk.SetLineWidth(2); - funZMuTk.SetLineStyle(kDashed); - funZMuTk.SetNpx(10000); - TF1 funZMuTkBkg = root::tf1("ZMuTkBack", zMuTkBkg, fMin, fMax, - yieldBkgZMuTk, lambda, a0, a1, a2); - funZMuTkBkg.SetLineColor(kGreen); - funZMuTkBkg.SetLineWidth(2); - funZMuTkBkg.SetLineStyle(kDashed); - funZMuTkBkg.SetNpx(10000); - histoZMuTk->SetTitle("Z -> #mu + (unmatched) track mass"); - histoZMuTk->SetXTitle("#mu + (unmatched) track invariant mass (GeV/c^{2})"); - histoZMuTk->SetYTitle("Events"); - TCanvas *canvas = new TCanvas("canvas"); - histoZMuTk->Draw("e"); - funZMuTk.Draw("same"); - funZMuTkBkg.Draw("same"); - canvas->SaveAs(ZMuTkPlot.c_str()); - canvas->SetLogy(); - string logZMuTkPlot = "log_" + ZMuTkPlot; - canvas->SaveAs(logZMuTkPlot.c_str()); - string ZMuSaPlot = "ZMuSaFit" + plot_string; - root::plot(ZMuSaPlot.c_str(), *histoZMuSa, zMuSa, fMin, fMax, - efficiencySa, efficiencyTk, - yieldZMuMu, mass, sigmaZMuSa, yieldBkgZMuSa, - kRed, 2, kDashed, 10000, - "Z -> #mu + (unmatched) standalone mass", - "#mu + (unmatched) standalone invariant mass (GeV/c^{2})", - "Events"); - } - } - - } - catch(std::exception& e) { - cerr << "error: " << e.what() << "\n"; - return 1; - } - catch(...) { - cerr << "Exception of unknown type!\n"; - } - return 0; -} - diff --git a/ElectroWeakAnalysis/ZMuMu/bin/zMuMuRooFit.cpp b/ElectroWeakAnalysis/ZMuMu/bin/zMuMuRooFit.cpp deleted file mode 100644 index 0a454044a0692..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/zMuMuRooFit.cpp +++ /dev/null @@ -1,565 +0,0 @@ -#include "RooRealVar.h" -#include "RooRealConstant.h" -#include "RooGaussian.h" -#include "RooExponential.h" -#include "RooAddPdf.h" -#include "RooAddition.h" -#include "RooDataSet.h" -#include "RooDataHist.h" -#include "RooHistPdf.h" -#include "RooChebychev.h" -#include "RooExponential.h" -#include "RooProdPdf.h" -#include "RooChi2Var.h" -#include "RooGlobalFunc.h" -#include "RooPlot.h" -#include "RooMinuit.h" -#include "RooFitResult.h" -#include "RooFormulaVar.h" -#include "RooGenericPdf.h" -#include "RooExtendPdf.h" -#include "TCanvas.h" -#include "TROOT.h" -#include "TFile.h" -#include "TH1.h" -#include "RooNLLVar.h" -#include "RooRandom.h" -#include "TRandom3.h" -#include -#include -#include -using namespace boost; -namespace po = boost::program_options; -#include - -using namespace std; -using namespace RooFit; - -// A function that get histogram, restricting it on fit range and sets contents to 0.0 if entries are too small - -TH1F *getHisto(TFile *file, const char *name, double fMin, double fMax, unsigned int rebin) { - TObject *h = file->Get(name); - if (h == nullptr) - cout << "Can't find object " << name << "\n"; - TH1F *histo = dynamic_cast(h); - if (histo == nullptr) - cout << "Object " << name << " is of type " << h->ClassName() << ", not TH1\n"; - TH1F *new_histo = new TH1F(name, name, (int)(fMax - fMin), fMin, fMax); - int bin_num = 0; - for (int i = (int)fMin; i <= (int)fMax; ++i) { - bin_num = (i - (int)fMin + 1); - new_histo->SetBinContent(bin_num, histo->GetBinContent(i)); - } - delete histo; - new_histo->Sumw2(); - new_histo->Rebin(rebin); - for (int i = 1; i <= new_histo->GetNbinsX(); ++i) { - if (new_histo->GetBinContent(i) == 0.00) { - cout << " WARNING: histo " << name << " has 0 enter in bin number " << i << endl; - } - if (new_histo->GetBinContent(i) < 0.1) { - new_histo->SetBinContent(i, 0.0); - new_histo->SetBinError(i, 0.0); - cout << " WARNING: setting value 0.0 to histo " << name << " for bin number " << i << endl; - } - } - - return new_histo; -} - -// a function that create fromm a model pdf a toy RooDataHist - -RooDataHist *genHistFromModelPdf( - const char *name, RooAbsPdf *model, RooRealVar *var, double ScaleLumi, int range, int rebin, int seed) { - double genEvents = model->expectedEvents(*var); - TRandom3 *rndm = new TRandom3(); - rndm->SetSeed(seed); - double nEvt = rndm->PoissonD(genEvents); - int intEvt = ((nEvt - (int)nEvt) >= 0.5) ? (int)nEvt + 1 : int(nEvt); - RooDataSet *data = model->generate(*var, intEvt); - cout << " expected events for " << name << " = " << genEvents << endl; - cout << " data->numEntries() for name " << name << " == " << data->numEntries() << endl; - // cout<< " nEvt from PoissonD for" << name << " == " << nEvt<< endl; - //cout<< " cast of nEvt for" << name << " == " << intEvt<< endl; - RooAbsData *binned_data = data->binnedClone(); - TH1 *toy_hist = binned_data->createHistogram(name, *var, Binning(range / rebin)); - for (int i = 1; i <= toy_hist->GetNbinsX(); ++i) { - toy_hist->SetBinError(i, sqrt(toy_hist->GetBinContent(i))); - if (toy_hist->GetBinContent(i) == 0.00) { - cout << " WARNING: histo " << name << " has 0 enter in bin number " << i << endl; - } - if (toy_hist->GetBinContent(i) < 0.1) { - toy_hist->SetBinContent(i, 0.0); - toy_hist->SetBinError(i, 0.0); - cout << " WARNING: setting value 0.0 to histo " << name << " for bin number " << i << endl; - } - } - RooDataHist *toy_rooHist = new RooDataHist(name, name, RooArgList(*var), toy_hist); - return toy_rooHist; -} - -// a function to create the pdf used for the fit, need the histo model, should be zmm except for zmusta case..... - -RooHistPdf *createHistPdf(const char *name, TH1F *model, RooRealVar *var, int rebin) { - TH1F *model_clone = new TH1F(*model); - model_clone->Sumw2(); - model_clone->Rebin(rebin); - RooDataHist *model_dataHist = new RooDataHist(name, name, RooArgList(*var), model_clone); - RooHistPdf *HistPdf = new RooHistPdf(name, name, *var, *model_dataHist, 0); - delete model_clone; - return HistPdf; -} - -void fit(RooAbsReal &chi2, int numberOfBins, const char *outFileNameWithFitResult) { - TFile *out_root_file = new TFile(outFileNameWithFitResult, "recreate"); - RooMinuit m_tot(chi2); - m_tot.migrad(); - // m_tot.hesse(); - RooFitResult *r_chi2 = m_tot.save(); - cout << "==> Chi2 Fit results " << endl; - r_chi2->Print("v"); - // r_chi2->floatParsFinal().Print("v") ; - int NumberOfFreeParameters = r_chi2->floatParsFinal().getSize(); - for (int i = 0; i < NumberOfFreeParameters; ++i) { - r_chi2->floatParsFinal()[i].Print(); - } - cout << "chi2:" << chi2.getVal() << ", numberOfBins: " << numberOfBins - << ", NumberOfFreeParameters: " << NumberOfFreeParameters << endl; - cout << "Normalized Chi2 = " << chi2.getVal() / (numberOfBins - NumberOfFreeParameters) << endl; - r_chi2->Write(); - delete out_root_file; -} - -int main(int argc, char **argv) { - gROOT->SetStyle("Plain"); - double fMin, fMax, lumi, scaleLumi = 1; - int seed; - Bool_t toy = kFALSE; - Bool_t fitFromData = kFALSE; - string infile, outfile; - int rebinZMuMu = 1, rebinZMuSa = 1, rebinZMuTk = 1, rebinZMuMuNoIso = 1, rebinZMuMuHlt = 1; - po::options_description desc("Allowed options"); - desc.add_options()("help,h", "produce help message")("toy,t", "toy enabled")( - "seed,s", po::value(&seed)->default_value(34567), "seed value for toy")( - "luminosity,l", po::value(&lumi)->default_value(45.), "luminosity value for toy ")( - "fit,f", "fit from data enabled")( - "rebin,r", po::value >(), "rebin value: r_mutrk r mumuNotIso r_musa r _muhlt")( - "input-file,i", po::value(&infile), "input file")( - "output-file,o", po::value(&outfile), "output file with fit results")( - "min,m", po::value(&fMin)->default_value(60), "minimum value for fit range")( - "max,M", po::value(&fMax)->default_value(120), "maximum value for fit range"); - po::positional_options_description p; - p.add("rebin", -1); - po::variables_map vm; - po::store(po::command_line_parser(argc, argv).options(desc).positional(p).run(), vm); - po::notify(vm); - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - if (vm.count("toy")) { - cout << "toy enabled with seed " << seed << "\n"; - toy = kTRUE; - //RooRandom::randomGenerator()->SetSeed(seed) ; - // lumi should be intented as pb-1 and passed from outside - scaleLumi = lumi / 45.0; // 45 is the current lumi correspondent to the histogram..... - } - if (vm.count("fit")) { - cout << "fit from data enabled \n"; - fitFromData = kTRUE; - } - - if (!vm.count("toy") && !vm.count("fit")) { - cerr << "Choose one beetween fitting form data or with a toy MC \n"; - return 1; - } - - if (toy == fitFromData) { - cerr << "Choose if fit from data or with a toy MC \n"; - return 1; - } - - if (vm.count("rebin")) { - vector v_rebin = vm["rebin"].as >(); - if (v_rebin.size() != 4) { - cerr << " please provide 4 numbers in the given order:r_mutrk r mumuNotIso r_musa r _muhlt \n"; - return 1; - } - rebinZMuTk = v_rebin[0]; - rebinZMuMuNoIso = v_rebin[1]; - rebinZMuSa = v_rebin[2]; - rebinZMuMuHlt = v_rebin[3]; - } - - RooRealVar *mass = new RooRealVar("mass", "mass (GeV/c^{2})", fMin, fMax); - TFile *root_file = new TFile(infile.c_str(), "read"); - int range = (int)(fMax - fMin); - int numberOfBins = range / rebinZMuSa + range / rebinZMuTk + range / rebinZMuMuNoIso + 2 * range / rebinZMuMuHlt; - // zmm histograms used for pdf - TH1F *zmm = getHisto(root_file, "goodZToMuMuPlots/zMass", fMin, fMax, rebinZMuMu); - // zmsta used for pdf - TH1F *zmsta = getHisto(root_file, "zmumuSaMassHistogram/zMass", fMin, fMax, 1); // histogramms to fit..... - TH1F *zmmsta = getHisto(root_file, "goodZToMuMuOneStandAloneMuonPlots/zMass", fMin, fMax, rebinZMuSa / rebinZMuMu); - TH1F *zmt = getHisto(root_file, "goodZToMuMuOneTrackPlots/zMass", fMin, fMax, rebinZMuTk / rebinZMuMu); - TH1F *zmmNotIso = getHisto(root_file, "nonIsolatedZToMuMuPlots/zMass", fMin, fMax, rebinZMuMuNoIso / rebinZMuMu); - TH1F *zmm1hlt = getHisto(root_file, "goodZToMuMu1HLTPlots/zMass", fMin, fMax, rebinZMuMuHlt / rebinZMuMu); - TH1F *zmm2hlt = getHisto(root_file, "goodZToMuMu2HLTPlots/zMass", fMin, fMax, rebinZMuMuHlt / rebinZMuMu); - - // creating a pdf for Zmt - - RooHistPdf *ZmtPdf = createHistPdf("ZmtPdf", zmm, mass, rebinZMuTk / rebinZMuMu); - // creating a pdf for Zmm not iso - RooHistPdf *ZmmNoIsoPdf = createHistPdf("ZmmNoIsoPdf", zmm, mass, rebinZMuMuNoIso / rebinZMuMu); - // creating a pdf for Zms from zmsta!!! - RooHistPdf *ZmsPdf = createHistPdf("ZmsPdf", zmsta, mass, rebinZMuSa / rebinZMuMu); - // creating a pdf for Zmmhlt - RooHistPdf *ZmmHltPdf = createHistPdf("ZmmHltPdf", zmm, mass, rebinZMuMuHlt / rebinZMuMu); - - // creating the variable with random init values - - RooRealVar Yield("Yield", "Yield", 15000., 345., 3567890.); - RooRealVar nbkg_mutrk("nbkg_mutrk", "background _mutrk fraction", 500, 0., 100000.); - RooRealVar nbkg_mumuNotIso("nbkg_mumuNotIso", "background fraction", 500, 0., 100000.); - RooRealVar nbkg_musa("nbkg_musa", "background fraction", 50, 0., 100000.); - RooRealVar eff_tk("eff_tk", "signal _mutrk fraction", .99, 0.8, 1.0); - RooRealVar eff_sa("eff_sa", "eff musta", 0.99, 0.8, 1.0); - RooRealVar eff_iso("eff_iso", "eff mumuNotIso", .99, 0.8, 1.0); - RooRealVar eff_hlt("eff_hlt", "eff 1hlt", 0.99, 0.8, 1.0); - RooRealVar alpha("alpha", "coefficient alpha", -0.01, -1000, 1000.); - RooRealVar a0("a0", "coefficient 0", 1, -1000., 1000.); - RooRealVar a1("a1", "coefficient 1", -0.001, -1000, 1000.); - RooRealVar a2("a2", "coefficient 2", 0.0, -1000., 1000.); - RooRealVar beta("beta", "coefficient beta", -0.01, -1000, 1000.); - RooRealVar b0("b0", "coefficient 0", 1, -1000., 1000.); - RooRealVar b1("b1", "coefficient 1", -0.001, -1000, 1000.); - RooRealVar b2("b2", "coefficient 2", 0.0, -1000., 1000.); - RooRealVar gamma("gamma", "coefficient gamma", -0.01, -1000, 1000.); - RooRealVar c0("c0", "coefficient 0", 1, -1000., 1000.); - RooRealVar c1("c1", "coefficient 1", -0.001, -1000, 1000.); - // fit parameters setted from datacard - filebuf fb; - fb.open("zMuMuRooFit.txt", ios::in); - istream is(&fb); - char line[1000]; - - Yield.readFromStream(is.getline(line, 1000), kFALSE); - nbkg_mutrk.readFromStream(is.getline(line, 1000), kFALSE); - nbkg_mumuNotIso.readFromStream(is.getline(line, 1000), kFALSE); - nbkg_musa.readFromStream(is.getline(line, 1000), kFALSE); - eff_tk.readFromStream(is.getline(line, 1000), kFALSE); - eff_sa.readFromStream(is.getline(line, 1000), kFALSE); - eff_iso.readFromStream(is.getline(line, 1000), kFALSE); - eff_hlt.readFromStream(is.getline(line, 1000), kFALSE); - alpha.readFromStream(is.getline(line, 1000), kFALSE); - a0.readFromStream(is.getline(line, 1000), kFALSE); - a1.readFromStream(is.getline(line, 1000), kFALSE); - a2.readFromStream(is.getline(line, 1000), kFALSE); - beta.readFromStream(is.getline(line, 1000), kFALSE); - b0.readFromStream(is.getline(line, 1000), kFALSE); - b1.readFromStream(is.getline(line, 1000), kFALSE); - b2.readFromStream(is.getline(line, 1000), kFALSE); - gamma.readFromStream(is.getline(line, 1000), kFALSE); - c0.readFromStream(is.getline(line, 1000), kFALSE); - c1.readFromStream(is.getline(line, 1000), kFALSE); - fb.close(); - - // scaling to lumi if toy is enabled... - if (vm.count("toy")) { - Yield.setVal(scaleLumi * (Yield.getVal())); - nbkg_mutrk.setVal(scaleLumi * (nbkg_mutrk.getVal())); - nbkg_mumuNotIso.setVal(scaleLumi * (nbkg_mumuNotIso.getVal())); - } - - //efficiency term - - //zMuMuEff1HLTTerm = _2 * (effTk ^ _2) * (effSa ^ _2) * (effIso ^ _2) * effHLT * (_1 - effHLT); - RooFormulaVar zMuMu1HLTEffTerm( - "zMuMu1HLTEffTerm", - "Yield * (2.* (eff_tk)^2 * (eff_sa)^2 * (eff_iso)^2 * eff_hlt *(1.- eff_hlt))", - RooArgList(eff_tk, - eff_sa, - eff_iso, - eff_hlt, - Yield)); //zMuMuEff2HLTTerm = (effTk ^ _2) * (effSa ^ _2) * (effIso ^ _2) * (effHLT ^ _2) ; - RooFormulaVar zMuMu2HLTEffTerm("zMuMu2HLTEffTerm", - "Yield * ((eff_tk)^2 * (eff_sa)^2 * (eff_iso)^2 * (eff_hlt)^2)", - RooArgList(eff_tk, eff_sa, eff_iso, eff_hlt, Yield)); - //zMuMuNoIsoEffTerm = (effTk ^ _2) * (effSa ^ _2) * (_1 - (effIso ^ _2)) * (_1 - ((_1 - effHLT)^_2)); - RooFormulaVar zMuMuNoIsoEffTerm("zMuMuNoIsoEffTerm", - "Yield * ((eff_tk)^2 * (eff_sa)^2 * (1.- (eff_iso)^2) * (1.- ((1.-eff_hlt)^2)))", - RooArgList(eff_tk, eff_sa, eff_iso, eff_hlt, Yield)); - //zMuTkEffTerm = _2 * (effTk ^ _2) * effSa * (_1 - effSa) * (effIso ^ _2) * effHLT; - RooFormulaVar zMuTkEffTerm("zMuTkEffTerm", - "Yield * (2. *(eff_tk)^2 * eff_sa * (1.-eff_sa)* (eff_iso)^2 * eff_hlt)", - RooArgList(eff_tk, eff_sa, eff_iso, eff_hlt, Yield)); - //zMuSaEffTerm = _2 * (effSa ^ _2) * effTk * (_1 - effTk) * (effIso ^ _2) * effHLT; - RooFormulaVar zMuSaEffTerm("zMuSaEffTerm", - "Yield * (2. *(eff_sa)^2 * eff_tk * (1.-eff_tk)* (eff_iso)^2 * eff_hlt)", - RooArgList(eff_tk, eff_sa, eff_iso, eff_hlt, Yield)); - - // creating model for the fit - // z mu track - - RooGenericPdf *bkg_mutrk = new RooGenericPdf("bkg_mutrk", - "zmt bkg_model", - "exp(alpha*mass) * ( a0 + a1 * mass + a2 * mass^2 )", - RooArgSet(*mass, alpha, a0, a1, a2)); - // RooFormulaVar fracSigMutrk("fracSigMutrk", "@0 / (@0 + @1)", RooArgList(zMuTkEffTerm, nbkg_mutrk )); - RooAddPdf *model_mutrk = new RooAddPdf( - "model_mutrk", "model_mutrk", RooArgList(*ZmtPdf, *bkg_mutrk), RooArgList(zMuTkEffTerm, nbkg_mutrk)); - // z mu mu not Iso - - // creating background pdf for zmu mu not Iso - RooGenericPdf *bkg_mumuNotIso = new RooGenericPdf("bkg_mumuNotIso", - "zmumuNotIso bkg_model", - "exp(beta * mass) * (b0 + b1 * mass + b2 * mass^2)", - RooArgSet(*mass, beta, b0, b1, b2)); - // RooFormulaVar fracSigMuMuNoIso("fracSigMuMuNoIso", "@0 / (@0 + @1)", RooArgList(zMuMuNoIsoEffTerm, nbkg_mumuNotIso )); - RooAddPdf *model_mumuNotIso = new RooAddPdf("model_mumuNotIso", - "model_mumuNotIso", - RooArgList(*ZmmNoIsoPdf, *bkg_mumuNotIso), - RooArgList(zMuMuNoIsoEffTerm, nbkg_mumuNotIso)); - // z mu sta - - // RooGenericPdf model_musta("model_musta", " ZmsPdf * zMuSaEffTerm ", RooArgSet( *ZmsPdf, zMuSaEffTerm)) ; - RooGenericPdf *bkg_musa = new RooGenericPdf( - "bkg_musa", "zmusa bkg_model", "exp(gamma * mass) * (c0 + c1 * mass )", RooArgSet(*mass, gamma, c0, c1)); - // RooAddPdf * eZmsSig= new RooAddPdf("eZmsSig","eZmsSig",RooArgList(*,*bkg_mumuNotIso), RooArgList(zMuMuNoIsoEffTerm, nbkg_mumuNotIso)); - RooAddPdf *eZmsSig = - new RooAddPdf("eZmsSig", "eZmsSig", RooArgList(*ZmsPdf, *bkg_musa), RooArgList(zMuSaEffTerm, nbkg_musa)); - - //RooExtendPdf * eZmsSig= new RooExtendPdf("eZmsSig","extended signal p.d.f for zms ",*ZmsPdf, zMuSaEffTerm ) ; - - // z mu mu HLT - - // count ZMuMu Yield - double nZMuMu = 0.; - double nZMuMu1HLT = 0.; - double nZMuMu2HLT = 0.; - unsigned int nBins = zmm->GetNbinsX(); - double xMin = zmm->GetXaxis()->GetXmin(); - double xMax = zmm->GetXaxis()->GetXmax(); - double deltaX = (xMax - xMin) / nBins; - for (unsigned int i = 0; i < nBins; ++i) { - double x = xMin + (i + .5) * deltaX; - if (x > fMin && x < fMax) { - nZMuMu += zmm->GetBinContent(i + 1); - nZMuMu1HLT += zmm1hlt->GetBinContent(i + 1); - nZMuMu2HLT += zmm2hlt->GetBinContent(i + 1); - } - } - - cout << ">>> count of ZMuMu yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu << endl; - cout << ">>> count of ZMuMu (1HLT) yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu1HLT << endl; - cout << ">>> count of ZMuMu (2HLT) yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu2HLT << endl; - // we set eff_hlt - //eff_hlt.setVal( 1. / (1. + (nZMuMu1HLT/ (2 * nZMuMu2HLT))) ) ; - // creating the pdf for z mu mu 1hlt - - RooExtendPdf *eZmm1hltSig = - new RooExtendPdf("eZmm1hltSig", "extended signal p.d.f for zmm 1hlt", *ZmmHltPdf, zMuMu1HLTEffTerm); - // creating the pdf for z mu mu 2hlt - RooExtendPdf *eZmm2hltSig = - new RooExtendPdf("eZmm2hltSig", "extended signal p.d.f for zmm 2hlt", *ZmmHltPdf, zMuMu2HLTEffTerm); - - // getting the data if fit otherwise constructed the data for model if toy.... - - RooDataHist *zmtMass, *zmmNotIsoMass, *zmsMass, *zmm1hltMass, *zmm2hltMass; - - if (toy) { - zmtMass = genHistFromModelPdf("zmtMass", model_mutrk, mass, scaleLumi, range, rebinZMuTk, seed); - zmmNotIsoMass = - genHistFromModelPdf("zmmNotIsoMass", model_mumuNotIso, mass, scaleLumi, range, rebinZMuMuNoIso, seed); - zmsMass = genHistFromModelPdf("zmsMass", eZmsSig, mass, scaleLumi, range, rebinZMuSa, seed); - zmm1hltMass = genHistFromModelPdf("zmm1hltMass", eZmm1hltSig, mass, scaleLumi, range, rebinZMuMuHlt, seed); - zmm2hltMass = genHistFromModelPdf("zmm2hltMass", eZmm2hltSig, mass, scaleLumi, range, rebinZMuMuHlt, seed); - } else { // if fit from data.... - zmtMass = new RooDataHist("zmtMass", "good z mu track", RooArgList(*mass), zmt); - zmmNotIsoMass = new RooDataHist("ZmmNotIso", "good z mu mu not isolated", RooArgList(*mass), zmmNotIso); - zmsMass = new RooDataHist("zmsMass", "good z mu sta mass", RooArgList(*mass), zmmsta); - zmm1hltMass = new RooDataHist("zmm1hltMass", "good Z mu mu 1hlt", RooArgList(*mass), zmm1hlt); - zmm2hltMass = new RooDataHist("zmm2hltMass", "good Z mu mu 2hlt", RooArgList(*mass), zmm2hlt); - } - - // creting the chi2s - RooChi2Var *chi2_mutrk = - new RooChi2Var("chi2_mutrk", "chi2_mutrk", *model_mutrk, *zmtMass, Extended(kTRUE), DataError(RooAbsData::SumW2)); - RooChi2Var *chi2_mumuNotIso = new RooChi2Var("chi2_mumuNotIso", - "chi2_mumuNotIso", - *model_mumuNotIso, - *zmmNotIsoMass, - Extended(kTRUE), - DataError(RooAbsData::SumW2)); - - RooChi2Var *chi2_musta = - new RooChi2Var("chi2_musta", "chi2_musta", *eZmsSig, *zmsMass, Extended(kTRUE), DataError(RooAbsData::SumW2)); - // uncomment this line if you want to use logLik for mu sta - // RooNLLVar *chi2_musta = new RooNLLVar("chi2_musta","chi2_musta",*eZmsSig, *zmsMass, Extended(kTRUE), DataError(RooAbsData::SumW2) ) ; - RooChi2Var *chi2_mu1hlt = new RooChi2Var( - "chi2_mu1hlt", "chi2_mu1hlt", *eZmm1hltSig, *zmm1hltMass, Extended(kTRUE), DataError(RooAbsData::SumW2)); - RooChi2Var *chi2_mu2hlt = new RooChi2Var( - "chi2_mu2hlt", "chi2_mu2hlt", *eZmm2hltSig, *zmm2hltMass, Extended(kTRUE), DataError(RooAbsData::SumW2)); - - // adding the chi2 - RooAddition totChi2("totChi2", - "chi2_mutrk + chi2_mumuNotIso + chi2_musta + chi2_mu1hlt + chi2_mu2hlt ", - RooArgSet(*chi2_mutrk, *chi2_mumuNotIso, *chi2_musta, *chi2_mu1hlt, *chi2_mu2hlt)); - - // printing out the model integral befor fitting - double N_zMuMu1hlt = eZmm1hltSig->expectedEvents(*mass); - double N_bkgTk = bkg_mutrk->expectedEvents(*mass); - double N_bkgIso = bkg_mumuNotIso->expectedEvents(*mass); - - double N_zMuTk = zMuTkEffTerm.getVal(); - - double e_hlt = eff_hlt.getVal(); - double e_tk = eff_tk.getVal(); - double e_sa = eff_sa.getVal(); - double e_iso = eff_iso.getVal(); - double Y_hlt = N_zMuMu1hlt / ((2. * (e_tk * e_tk) * (e_sa * e_sa) * (e_iso * e_iso) * e_hlt * (1. - e_hlt))); - double Y_mutk = N_zMuTk / ((2. * (e_tk * e_tk) * e_sa * (1. - e_sa) * (e_iso * e_iso) * e_hlt)); - - cout << "Yield prediction from mumu1hlt integral befor fitting: " << Y_hlt << endl; - cout << "Yield prediction from mutk integral befor fitting: " << Y_mutk << endl; - cout << "Bkg for mutk prediction from mutk integral after fitting: " << N_bkgTk << endl; - cout << "Bkg for mumuNotIso prediction from mumuNotIso integral after fitting: " << N_bkgIso << endl; - - fit(totChi2, numberOfBins, outfile.c_str()); - N_zMuMu1hlt = eZmm1hltSig->expectedEvents(*mass); - N_zMuTk = zMuTkEffTerm.getVal(); - double N_zMuMuNoIso = zMuMuNoIsoEffTerm.getVal(); - double N_Tk = model_mutrk->expectedEvents(*mass); - double N_Iso = model_mumuNotIso->expectedEvents(*mass); - e_hlt = eff_hlt.getVal(); - e_tk = eff_tk.getVal(); - e_sa = eff_sa.getVal(); - e_iso = eff_iso.getVal(); - Y_hlt = N_zMuMu1hlt / ((2. * (e_tk * e_tk) * (e_sa * e_sa) * (e_iso * e_iso) * e_hlt * (1. - e_hlt))); - Y_mutk = N_zMuTk / ((2. * (e_tk * e_tk) * e_sa * (1. - e_sa) * (e_iso * e_iso) * e_hlt)); - - cout << "Yield prediction from mumu1hlt integral after fitting: " << Y_hlt << endl; - //cout << "Yield prediction from mutk integral after fitting: " << Y_mutk << endl; - cout << "N + B prediction from mutk integral after fitting: " << N_Tk << endl; - cout << "zMuTkEffTerm " << N_zMuTk << endl; - cout << "N + B prediction from mumuNotIso integral after fitting: " << N_Iso << endl; - cout << "zMuMuNoIsoEffTerm " << N_zMuMuNoIso << endl; - - cout << "chi2_mutrk:" << chi2_mutrk->getVal() << endl; - cout << "chi2_mumuNotIso:" << chi2_mumuNotIso->getVal() << endl; - cout << "chi2_musta:" << chi2_musta->getVal() << endl; - cout << "chi2_mumu1hlt:" << chi2_mu1hlt->getVal() << endl; - cout << "chi2_mumu2hlt:" << chi2_mu2hlt->getVal() << endl; - - //plotting - RooPlot *massFrame_mutrk = mass->frame(); - RooPlot *massFrame_mumuNotIso = mass->frame(); - RooPlot *massFrame_musta = mass->frame(); - RooPlot *massFrame_mumu1hlt = mass->frame(); - RooPlot *massFrame_mumu2hlt = mass->frame(); - - TCanvas *canv1 = new TCanvas("canvas"); - TCanvas *canv2 = new TCanvas("new_canvas"); - canv1->Divide(2, 3); - canv1->cd(1); - canv1->SetLogy(kTRUE); - zmtMass->plotOn(massFrame_mutrk, LineColor(kBlue)); - model_mutrk->plotOn(massFrame_mutrk, LineColor(kRed)); - model_mutrk->plotOn(massFrame_mutrk, Components(*bkg_mutrk), LineColor(kGreen)); - massFrame_mutrk->SetTitle("Z -> #mu track"); - // massFrame_mutrk->GetYaxis()->SetLogScale(); - massFrame_mutrk->Draw(); - gPad->SetLogy(1); - - canv2->cd(); - canv2->SetLogy(kTRUE); - massFrame_mutrk->Draw(); - canv2->SaveAs("LogZMuTk.eps"); - canv2->SetLogy(kFALSE); - canv2->SaveAs("LinZMuTk.eps"); - - canv1->cd(2); - zmmNotIsoMass->plotOn(massFrame_mumuNotIso, LineColor(kBlue)); - model_mumuNotIso->plotOn(massFrame_mumuNotIso, LineColor(kRed)); - model_mumuNotIso->plotOn(massFrame_mumuNotIso, Components(*bkg_mumuNotIso), LineColor(kGreen)); - massFrame_mumuNotIso->SetTitle("Z -> #mu #mu not isolated"); - massFrame_mumuNotIso->Draw(); - gPad->SetLogy(1); - - canv2->cd(); - canv2->Clear(); - canv2->SetLogy(kTRUE); - massFrame_mumuNotIso->Draw(); - canv2->SaveAs("LogZMuMuNotIso.eps"); - canv2->SetLogy(kFALSE); - canv2->SaveAs("LinZMuMuNotIso.eps"); - - canv1->cd(3); - zmsMass->plotOn(massFrame_musta, LineColor(kBlue)); - eZmsSig->plotOn(massFrame_musta, Components(*bkg_musa), LineColor(kGreen)); - eZmsSig->plotOn(massFrame_musta, LineColor(kRed)); - massFrame_musta->SetTitle("Z -> #mu sta"); - massFrame_musta->Draw(); - - canv2->cd(); - canv2->Clear(); - canv2->SetLogy(kTRUE); - massFrame_musta->Draw(); - canv2->SaveAs("LogZMuSa.eps"); - canv2->SetLogy(kFALSE); - canv2->SaveAs("LinZMuSa.eps"); - - canv1->cd(4); - zmm1hltMass->plotOn(massFrame_mumu1hlt, LineColor(kBlue)); - eZmm1hltSig->plotOn(massFrame_mumu1hlt, LineColor(kRed)); - massFrame_mumu1hlt->SetTitle("Z -> #mu #mu 1hlt"); - massFrame_mumu1hlt->Draw(); - canv2->cd(); - canv2->Clear(); - canv2->SetLogy(kTRUE); - massFrame_mumu1hlt->Draw(); - canv2->SaveAs("LogZMuMu1Hlt.eps"); - canv2->SetLogy(kFALSE); - canv2->SaveAs("LinZMuMu1Hlt.eps"); - - canv1->cd(5); - zmm2hltMass->plotOn(massFrame_mumu2hlt, LineColor(kBlue)); - eZmm2hltSig->plotOn(massFrame_mumu2hlt, LineColor(kRed)); - massFrame_mumu2hlt->SetTitle("Z -> #mu #mu 2hlt"); - massFrame_mumu2hlt->Draw(); - - canv1->SaveAs("mass.eps"); - - canv2->cd(); - canv2->Clear(); - canv2->SetLogy(kTRUE); - massFrame_mumu2hlt->Draw(); - canv2->SaveAs("LogZMuMu2Hlt.eps"); - canv2->SetLogy(kFALSE); - canv2->SaveAs("LinZMuMu2Hlt.eps"); - - /* how to read the fit result in root - TH1D h_Yield("h_Yield", "h_Yield", 100, 10000, 30000) - for (int i =0: i < 100; i++){ - RooFitResult* r = gDirectory->Get(Form("toy_totChi2;%d)",i) - //r->floatParsFinal().Print("s"); - // without s return a list, can we get the number? - RooFitResult* r = gDirectory->Get("toy_totChi2;1") - // chi2 - r->minNll(); - //distamce form chi2..... - //r->edm(); - // yield - r->floatParsFinal()[0]->Print(); - //RooAbsReal * l = r->floatParsFinal()->first() - RooAbsReal * y = r->floatParsFinal()->find("Yield"); - h_Yield->Fill(y->getVal()); - } - - */ - - delete root_file; - //delete out_root_file; - return 0; -} diff --git a/ElectroWeakAnalysis/ZMuMu/bin/zMuMuRooFit.txt b/ElectroWeakAnalysis/ZMuMu/bin/zMuMuRooFit.txt deleted file mode 100644 index e140246ba0c0d..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/zMuMuRooFit.txt +++ /dev/null @@ -1,22 +0,0 @@ -#"InitValue L (lo - hi) B(nBins)" for variable param. "Value C" for constant param. ORDER: Yield - nbkg_mutrk - nbkg_mumuNotIso - nbk_musa - eff_tk - eff_sa - eff_iso - eff_hlt - alpha - a0 - a1 - a2 - beta - b0 - b1 - b2 - gamma - c0 - c1## Default Yield value for signal and background at 45 pb-1, rescaled for tiy at the setted luminosity -4000 L (0 - 10000000) B(1000) -1000 L (0 - 10000) B (100) -1000 L (0 - 10000) B (100) -20 L (0 - 100) B (100) -0.999 L (0.001 - 1.0) B(100) -0.99 L (0.001 - 1.0) B(100) -0.99 L (0.001 - 1.0) B(100) -0.9 L (0.001 - 1.0) B(100) -0.0 L (-1. - 1.) B(200) -1 C -10 L (-100. - 100) B(200) -0 C -0.0 L (-1. - 1.) B(200) -1 C -10 L (-100. - 100) B(200) -0 C --0.01 L (-1. - 1.) B(200) -1 C -0 L (-100. - 100) B(200) -###### -PLEASE DO NOT ADD NEW LINES AND RESPECT THE ORDER diff --git a/ElectroWeakAnalysis/ZMuMu/bin/zToMuMuMassMCFit.cpp b/ElectroWeakAnalysis/ZMuMu/bin/zToMuMuMassMCFit.cpp deleted file mode 100644 index 9fea7e2d1dd17..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/zToMuMuMassMCFit.cpp +++ /dev/null @@ -1,438 +0,0 @@ -#include "PhysicsTools/Utilities/interface/Parameter.h" -#include "PhysicsTools/Utilities/interface/BreitWigner.h" -#include "PhysicsTools/Utilities/interface/Constant.h" -#include "PhysicsTools/Utilities/interface/Identity.h" -#include "PhysicsTools/Utilities/interface/Product.h" -#include "PhysicsTools/Utilities/interface/Sum.h" -#include "PhysicsTools/Utilities/interface/Number.h" -#include "PhysicsTools/Utilities/interface/Exponential.h" -#include "PhysicsTools/Utilities/interface/Gaussian.h" -#include "PhysicsTools/Utilities/interface/ZLineShape.h" -#include "PhysicsTools/Utilities/interface/HistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/RootMinuit.h" -#include "PhysicsTools/Utilities/interface/RootFunctionAdapter.h" -#include "PhysicsTools/Utilities/interface/rootPlot.h" -#include "TFile.h" -#include "TH1.h" -#include "TF1.h" -#include "TMath.h" -#include "TCanvas.h" -#include "TROOT.h" - -#include -#include -#include -#include -#include -#include -using namespace boost; -namespace po = boost::program_options; -using namespace std; - -// A helper function to simplify the main part. -template -ostream &operator<<(ostream &os, const vector &v) { - copy(v.begin(), v.end(), ostream_iterator(cout, " ")); - return os; -} - -int main(int ac, char *av[]) { - try { - double fMin, fMax; - string ext; - po::options_description desc("Allowed options"); - desc.add_options()("help", "produce help message")("include-path,I", po::value >(), "include path")( - "input-file", po::value >(), "input file")( - "min,m", po::value(&fMin)->default_value(80), "minimum value for fit range")( - "max,M", po::value(&fMax)->default_value(120), "maximum value for fit range")( - "breitwigner", "fit to a breit-wigner")("gauss", "fit to a gaussian")( - "bwinter", "fit to a breit-wigner plus Z/photon interference term")( - "bwintgam", "fit to a breit-wigner plus Z/photon interference term and photon propagator")( - "expbwintgam", - "fit to the product of an exponential with a breit-wigner plus Z/photon interference term and photon " - "propagator")("weipolexpbwintgam", - "fit to the product of a weighted polynomial and an exponential with a breit-wigner plus " - "Z/photon interference term and photon propagator")( - "output-file,O", po::value(&ext)->default_value(".ps"), "output file format"); - - po::positional_options_description p; - p.add("input-file", -1); - - po::variables_map vm; - po::store(po::command_line_parser(ac, av).options(desc).positional(p).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - if (vm.count("include-path")) { - cout << "Include paths are: " << vm["include-path"].as >() << "\n"; - } - - vector v_file; - vector v_ZMCMassHistos; - vector v_eps; - - if (vm.count("input-file")) { - cout << "Input files are: " << vm["input-file"].as >() << "\n"; - v_file = vm["input-file"].as >(); - for (vector::const_iterator it = v_file.begin(); it != v_file.end(); ++it) { - TFile *root_file = new TFile(it->c_str(), "read"); - TDirectory *Histos = (TDirectory *)root_file->GetDirectory("ZHisto"); - TDirectory *MCHistos = (TDirectory *)Histos->GetDirectory("ZMCHisto"); - TH1D *zMass = (TH1D *)MCHistos->Get("MuMuMCMass"); //for Z status 3 use "ZMCMass" - zMass->Rebin(4); //remember... - zMass->GetXaxis()->SetTitle("Mass (GeV/c^{2})"); - v_ZMCMassHistos.push_back(zMass); - gROOT->SetStyle("Plain"); - string f_string = *it; - replace(f_string.begin(), f_string.end(), '.', '_'); - string eps_string = f_string + ext; - v_eps.push_back(eps_string); - cout << ">>> histogram loaded\n"; - } - cout << v_file.size() << ", " << v_ZMCMassHistos.size() << ", " << v_eps.size() << endl; - cout << ">>> Input files loaded\n"; - } - //Values for Z mass and width - funct::Parameter mass("Mass", 91.092); //91.1876 - funct::Parameter gamma("Gamma", 2.980); //2.4952 - //funct::Parameters for Z Line Shape - funct::Parameter f_gamma("Photon factor", 0.85); //0 - funct::Parameter f_int("Interference factor", -0.00142); //0.001 - funct::Parameter yield("Yield", 482000); //1000 - //funct::Parameters for fits with one gaussian - funct::Parameter mean("Mean", 91.1876); - funct::Parameter sigma("Sigma", 10.); - //funct::Parameters for fit with an exponential - funct::Parameter lambda("Lambda", -0.0054); //-0.001 - //funct::Parameters for fit with a weighted polynomial - funct::Parameter alpha("Alpha", 0.1); - - if (vm.count("breitwigner")) { - cout << "Fitting histograms in input file to a Breit-Wigner\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mass << endl; - cout << gamma << endl; - for (unsigned int i = 0; i < v_ZMCMassHistos.size(); ++i) { - cout << ">>> load histogram\n"; - TH1D *zMass = v_ZMCMassHistos[i]; - cout << ">>> histogram loaded\n"; - funct::BreitWigner bw(mass, gamma); - funct::Constant c(yield); - typedef funct::Product::type FitFunction; - FitFunction f = c * bw; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.minimize(); - minuit.printFitResults(); - root::plot("ZMuMuMassMCFitBW.eps", *zMass, f, fMin, fMax, yield, mass, gamma); - } - } - - if (vm.count("gauss")) { - cout << "Fitting histograms in input files to a Gaussian\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mean << endl; - cout << sigma << endl; - for (unsigned int i = 0; i < v_ZMCMassHistos.size(); ++i) { - TH1D *zMass = v_ZMCMassHistos[i]; - funct::Gaussian gaus(mean, sigma); - funct::Constant c(yield); - typedef funct::Product::type FitFunction; - FitFunction f = c * gaus; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - minuit.addParameter(mean, 0.001, 80, 100); - minuit.addParameter(sigma, 0.1, -5., 5.); - minuit.minimize(); - minuit.printFitResults(); - TF1 fun = root::tf1("fun", f, fMin, fMax, yield, mean, sigma); - fun.SetParNames(yield.name().c_str(), mean.name().c_str(), sigma.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMuMuMassMCFitG_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMuMuMassMCFitG_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("bwinter")) { - cout << "Fitting histograms in input files to the Breit-Wigner plus Z/photon interference term\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - for (unsigned int i = 0; i < v_ZMCMassHistos.size(); ++i) { - TH1D *zMass = v_ZMCMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Constant c(yield); - typedef funct::Product::type FitFunction; - FitFunction f = c * zls; - cout << "set functions" << endl; - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 100000); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.fixParameter(f_gamma.name()); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - minuit.minimize(); - minuit.printFitResults(); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMuMuMassMCFitBwIn_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMuMuMassMCFitBwIn_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("bwintgam")) { - cout << "Fitting histograms in input files to the Breit-Wigner plus Z/photon interference term and photon " - "propagator\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - for (unsigned int i = 0; i < v_ZMCMassHistos.size(); ++i) { - TH1D *zMass = v_ZMCMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Constant c(yield); - typedef funct::Product::type FitFunction; - FitFunction f = c * zls; - cout << "set functions" << endl; - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 1000000); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - minuit.minimize(); - minuit.printFitResults(); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetParNames(yield.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMuMuMassMCFitBwInGa_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMuMuMassMCFitBwInGa_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("expbwintgam")) { - cout << "Fitting histograms in input files to the product of an exponential with the Breit-Wigner plus Z/photon " - "interference term and photon propagator\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << lambda << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - for (unsigned int i = 0; i < v_ZMCMassHistos.size(); ++i) { - TH1D *zMass = v_ZMCMassHistos[i]; - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Exponential expo(lambda); - funct::Constant c(yield); - typedef funct::Product::type ExpZLS; - ExpZLS expz = expo * zls; - typedef funct::Product::type FitFunction; - FitFunction f = c * expz; - cout << "set functions" << endl; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 10000000); - minuit.addParameter(lambda, 0.1, -1., 0); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(lambda.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetNpx(100000); - fun.SetParNames(yield.name().c_str(), - lambda.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str()); - fun.SetLineColor(kRed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMuMuMassMCFitExpBwInGa_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMuMuMassMCFitExpBwInGa_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - if (vm.count("weipolexpbwintgam")) { - cout << "Fitting histograms in input files to the product of a weighted polynomial and an exponential with the " - "Breit-Wigner plus Z/photon interference term and photon propagator\n"; - cout << ">>> set pars: " << endl; - cout << yield << endl; - cout << lambda << endl; - cout << mass << endl; - cout << gamma << endl; - cout << f_gamma << endl; - cout << f_int << endl; - cout << mean << endl; - cout << sigma << endl; - cout << alpha << endl; - for (unsigned int i = 0; i < v_ZMCMassHistos.size(); ++i) { - TH1D *zMass = v_ZMCMassHistos[i]; - funct::Constant a(alpha); - funct::Identity id; - funct::Gaussian gaus(mean, sigma); - funct::Number _1(1.); - funct::ZLineShape zls(mass, gamma, f_gamma, f_int); - funct::Exponential expo(lambda); - funct::Constant c(yield); - typedef funct::Product::type Pol1; - Pol1 pol = a * id; - typedef funct::Product::type PolGau; - PolGau poga = pol * gaus; - typedef funct::Sum::type SumPG; - SumPG spg = _1 + poga; - typedef funct::Product::type ExpZLS; - ExpZLS expz = expo * zls; - typedef funct::Product::type SumPGExpZ; - SumPGExpZ spgexpz = spg * expz; - typedef funct::Product::type FitFunction; - FitFunction f = c * spgexpz; - cout << "set functions" << endl; - typedef fit::HistoChiSquare ChiSquared; - ChiSquared chi2(f, zMass, fMin, fMax); - int fullBins = chi2.numberOfBins(); - cout << "N. deg. of freedom: " << fullBins << endl; - fit::RootMinuit minuit(chi2, true); - minuit.addParameter(yield, 10, 100, 10000000); - minuit.addParameter(alpha, 0.1, -100, 100); - minuit.addParameter(mean, 10, 70, 110); - minuit.fixParameter(mean.name()); - minuit.addParameter(sigma, 0.1, -100, 100); - minuit.addParameter(lambda, 0.1, -100, 100); - minuit.addParameter(mass, .1, 70., 110); - minuit.addParameter(gamma, 1, 1, 10); - minuit.addParameter(f_gamma, 0.1, -100, 1000); - minuit.addParameter(f_int, .0001, -1000000, 1000000); - minuit.minimize(); - minuit.printFitResults(); - vector > pars; - pars.push_back(yield.ptr()); - pars.push_back(alpha.ptr()); - pars.push_back(mean.ptr()); - pars.push_back(sigma.ptr()); - pars.push_back(lambda.ptr()); - pars.push_back(mass.ptr()); - pars.push_back(gamma.ptr()); - pars.push_back(f_gamma.ptr()); - pars.push_back(f_int.ptr()); - TF1 fun = root::tf1("fun", f, fMin, fMax, pars); - fun.SetNpx(100000); - fun.SetParNames(yield.name().c_str(), - alpha.name().c_str(), - mean.name().c_str(), - sigma.name().c_str(), - lambda.name().c_str(), - mass.name().c_str(), - gamma.name().c_str(), - f_gamma.name().c_str(), - f_int.name().c_str()); - fun.SetLineColor(kRed); - fun.SetLineWidth(1); - fun.SetLineStyle(kDashed); - TCanvas *canvas = new TCanvas("canvas"); - zMass->Draw("e"); - fun.Draw("same"); - string epsFilename = "ZMuMuMassMCFitWeiPolExpBwInGa_" + v_eps[i]; - canvas->SaveAs(epsFilename.c_str()); - canvas->SetLogy(); - string epsLogFilename = "ZMuMuMassMCFitWeiPolExpBwInGa_Log_" + v_eps[i]; - canvas->SaveAs(epsLogFilename.c_str()); - } - } - - cout << "It works!\n"; - } catch (std::exception &e) { - cerr << "error: " << e.what() << "\n"; - return 1; - } catch (...) { - cerr << "Exception of unknown type!\n"; - } - return 0; -} diff --git a/ElectroWeakAnalysis/ZMuMu/bin/zUMLChi2Fit.cpp b/ElectroWeakAnalysis/ZMuMu/bin/zUMLChi2Fit.cpp deleted file mode 100644 index 781d062b551d5..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/bin/zUMLChi2Fit.cpp +++ /dev/null @@ -1,464 +0,0 @@ -#include "FWCore/Utilities/interface/EDMException.h" -#include "PhysicsTools/Utilities/interface/Parameter.h" -#include "PhysicsTools/Utilities/interface/Gaussian.h" -#include "PhysicsTools/Utilities/interface/Numerical.h" -#include "PhysicsTools/Utilities/interface/Exponential.h" -#include "PhysicsTools/Utilities/interface/Polynomial.h" -#include "PhysicsTools/Utilities/interface/Constant.h" -#include "PhysicsTools/Utilities/interface/Operations.h" -#include "PhysicsTools/Utilities/interface/MultiHistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/HistoChiSquare.h" -#include "PhysicsTools/Utilities/interface/RootMinuit.h" -#include "PhysicsTools/Utilities/interface/RootMinuitCommands.h" -#include "PhysicsTools/Utilities/interface/FunctClone.h" -#include "PhysicsTools/Utilities/interface/rootPlot.h" -#include "PhysicsTools/Utilities/interface/Expression.h" -#include "PhysicsTools/Utilities/interface/HistoPdf.h" -#include "FWCore/FWLite/interface/FWLiteEnabler.h" -#include "DataFormats/FWLite/interface/Event.h" -#include "DataFormats/FWLite/interface/Handle.h" -#include "PhysicsTools/Utilities/interface/Likelihood.h" -#include "PhysicsTools/Utilities/interface/CombinedChiSquaredLikelihood.h" -#include "TROOT.h" -#include "TSystem.h" -#include "TH1.h" -#include "TFile.h" -#include -using namespace boost; -namespace po = boost::program_options; - -#include -#include -#include -#include -#include -#include -using namespace std; - -// A helper function to simplify the main part. -template -ostream& operator<<(ostream& os, const vector& v) { - copy(v.begin(), v.end(), ostream_iterator(cout, " ")); - return os; -} - -// A function that get histogram and sets contents to 0 -// if entries are too small -TH1* getHisto(TFile* file, const char* name, unsigned int rebin) { - TObject* h = file->Get(name); - if (h == nullptr) - throw edm::Exception(edm::errors::Configuration) << "Can't find object " << name << "\n"; - TH1* histo = dynamic_cast(h); - if (histo == nullptr) - throw edm::Exception(edm::errors::Configuration) - << "Object " << name << " is of type " << h->ClassName() << ", not TH1\n"; - histo->Rebin(rebin); - for (int i = 1; i <= histo->GetNbinsX(); ++i) { - if (histo->GetBinContent(i) < 0.1) { - histo->SetBinContent(i, 0.0); - histo->SetBinError(i, 0.0); - } - } - return histo; -} - -struct sig_tag; -struct bkg_tag; - -int main(int ac, char* av[]) { - typedef std::vector Sample; - - gROOT->SetStyle("Plain"); - - try { - typedef funct::FunctExpression Expr; - typedef fit::HistoChiSquare ExprChi2; - typedef fit::MultiHistoChiSquare ChiSquared; - typedef fit::Likelihood Likelihood; - double fMin, fMax; - string ext; - po::options_description desc("Allowed options"); - desc.add_options()("help,h", "produce help message")("input-file,i", po::value >(), "input file")( - "min,m", po::value(&fMin)->default_value(60), "minimum value for fit range")( - "max,M", po::value(&fMax)->default_value(120), "maximum value for fit range")( - "plot-format,p", po::value(&ext)->default_value("ps"), "output plot format"); - - po::positional_options_description p; - p.add("input-file", -1); - - po::variables_map vm; - po::store(po::command_line_parser(ac, av).options(desc).positional(p).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - cout << "Usage: options_description [options]\n"; - cout << desc; - return 0; - } - - fit::RootMinuitCommands > commands("zUMLChi2Fit.txt"); - - const unsigned int rebinMuMuNoIso = 2, rebinMuMu = 1, rebinMuMu1HLT = 1, rebinMuMu2HLT = 1, rebinMuTk = 2, - rebinMuSa = 1; - // assume that the bin size is 1 GeV!!! - funct::Constant rebinMuMuNoIsoConst(rebinMuMuNoIso), rebinMuMuConst(rebinMuMu), rebinMuMu1HLTConst(rebinMuMu1HLT), - rebinMuMu2HLTConst(rebinMuMu2HLT), rebinMuTkConst(rebinMuTk), rebinMuSaConst(rebinMuSa); - - FWLiteEnabler::enable(); - TFile file("zMuSa-UML.root"); - fwlite::Event ev(&file); - - Sample masses; - for (ev.toBegin(); !ev.atEnd(); ++ev) { - fwlite::Handle > objs; - objs.getByLabel(ev, "goodZToMuMuOneStandAloneMuonNtuple", "mass"); - std::cout << " size " << objs->size() << std::endl; - for (unsigned int i = 0; i < objs->size(); ++i) { - double mass = (*objs)[i]; - std::cout << " mass = " << mass << std::endl; - if (fMin < mass && mass < fMax) - masses.push_back(mass); - } - } - - if (vm.count("input-file")) { - cout << "Input files are: " << vm["input-file"].as >() << "\n"; - vector v_file = vm["input-file"].as >(); - for (vector::const_iterator it = v_file.begin(); it != v_file.end(); ++it) { - TFile* root_file = new TFile(it->c_str(), "read"); - TH1* histoZMuMuNoIso = getHisto(root_file, "nonIsolatedZToMuMuPlots/zMass", rebinMuMuNoIso); - TH1* histoZMuMu = getHisto(root_file, "goodZToMuMuPlots/zMass", rebinMuMu); - TH1* histoZMuMu1HLT = getHisto(root_file, "goodZToMuMu1HLTPlots/zMass", rebinMuMu1HLT); - TH1* histoZMuMu2HLT = getHisto(root_file, "goodZToMuMu2HLTPlots/zMass", rebinMuMu2HLT); - TH1* histoZMuTk = getHisto(root_file, "goodZToMuMuOneTrackPlots/zMass", rebinMuTk); - TH1* histoZMuSa = getHisto(root_file, "goodZToMuMuOneStandAloneMuonPlots/zMass", rebinMuSa); - TH1* histoZMuSaFromMuMu = getHisto(root_file, "zmumuSaMassHistogram/zMass", rebinMuSa); - - cout << ">>> histogram loaded\n"; - string f_string = *it; - replace(f_string.begin(), f_string.end(), '.', '_'); - replace(f_string.begin(), f_string.end(), '/', '_'); - string plot_string = f_string + "." + ext; - cout << ">>> Input files loaded\n"; - - const char* kYieldZMuMu = "YieldZMuMu"; - const char* kEfficiencyTk = "EfficiencyTk"; - const char* kEfficiencySa = "EfficiencySa"; - const char* kEfficiencyIso = "EfficiencyIso"; - const char* kEfficiencyHLT = "EfficiencyHLT"; - const char* kYieldBkgZMuTk = "YieldBkgZMuTk"; - const char* kYieldBkgZMuSa = "YieldBkgZMuSa"; - const char* kYieldBkgZMuMuNotIso = "YieldBkgZMuMuNotIso"; - const char* kAlpha = "Alpha"; - // const char * kBeta = "Beta"; - const char* kLambda = "Lambda"; - const char* kA0 = "A0"; - const char* kA1 = "A1"; - const char* kA2 = "A2"; - const char* kB0 = "B0"; - const char* kB1 = "B1"; - const char* kB2 = "B2"; - - funct::Parameter yieldZMuMu(kYieldZMuMu, commands.par(kYieldZMuMu)); - funct::Parameter effTk(kEfficiencyTk, commands.par(kEfficiencyTk)); - funct::Parameter effSa(kEfficiencySa, commands.par(kEfficiencySa)); - funct::Parameter effIso(kEfficiencyIso, commands.par(kEfficiencyIso)); - funct::Parameter effHLT(kEfficiencyHLT, commands.par(kEfficiencyHLT)); - funct::Parameter yieldBkgZMuTk(kYieldBkgZMuTk, commands.par(kYieldBkgZMuTk)); - funct::Parameter yieldBkgZMuSa(kYieldBkgZMuSa, commands.par(kYieldBkgZMuSa)); - funct::Parameter yieldBkgZMuMuNotIso(kYieldBkgZMuMuNotIso, commands.par(kYieldBkgZMuMuNotIso)); - funct::Parameter alpha(kAlpha, commands.par(kAlpha)); - // funct::Parameter beta(kBeta, commands.par(kBeta)); - funct::Parameter lambda(kLambda, commands.par(kLambda)); - funct::Parameter a0(kA0, commands.par(kA0)); - funct::Parameter a1(kA1, commands.par(kA1)); - funct::Parameter a2(kA2, commands.par(kA2)); - funct::Parameter b0(kB0, commands.par(kB0)); - funct::Parameter b1(kB1, commands.par(kB1)); - funct::Parameter b2(kB2, commands.par(kB2)); - funct::Constant cFMin(fMin), cFMax(fMax); - - // count ZMuMu Yield - double nZMuMu = 0, nZMuMu1HLT = 0, nZMuMu2HLT = 0; - { - unsigned int nBins = histoZMuMu->GetNbinsX(); - double xMin = histoZMuMu->GetXaxis()->GetXmin(); - double xMax = histoZMuMu->GetXaxis()->GetXmax(); - double deltaX = (xMax - xMin) / nBins; - for (unsigned int i = 0; i < nBins; ++i) { - double x = xMin + (i + .5) * deltaX; - if (x > fMin && x < fMax) { - nZMuMu += histoZMuMu->GetBinContent(i + 1); - nZMuMu1HLT += histoZMuMu1HLT->GetBinContent(i + 1); - nZMuMu2HLT += histoZMuMu2HLT->GetBinContent(i + 1); - } - } - } - // aggiungi 1HLT 2HLT - cout << ">>> count of ZMuMu yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu << endl; - cout << ">>> count of ZMuMu (1HLT) yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu1HLT << endl; - cout << ">>> count of ZMuMu (2HLT) yield in the range [" << fMin << ", " << fMax << "]: " << nZMuMu2HLT << endl; - funct::RootHistoPdf zPdfMuMuNonIso(*histoZMuMu, fMin, fMax); //imposto le pdf a quella di ZMuMu - funct::RootHistoPdf zPdfMuTk = zPdfMuMuNonIso; - funct::RootHistoPdf zPdfMuMu1HLT = zPdfMuMuNonIso; - funct::RootHistoPdf zPdfMuMu2HLT = zPdfMuMuNonIso; - funct::RootHistoPdf zPdfMuSa(*histoZMuSaFromMuMu, fMin, fMax); - zPdfMuMuNonIso.rebin(rebinMuMuNoIso / rebinMuMu); - zPdfMuTk.rebin(rebinMuTk / rebinMuMu); - zPdfMuMu1HLT.rebin(rebinMuMu1HLT / rebinMuMu); - zPdfMuMu2HLT.rebin(rebinMuMu2HLT / rebinMuMu); - - funct::Numerical<2> _2; - funct::Numerical<1> _1; - - //Efficiency term - Expr zMuMuEff1HLTTerm = _2 * (effTk ^ _2) * (effSa ^ _2) * (effIso ^ _2) * effHLT * (_1 - effHLT); - Expr zMuMuEff2HLTTerm = (effTk ^ _2) * (effSa ^ _2) * (effIso ^ _2) * (effHLT ^ _2); - Expr zMuMuNoIsoEffTerm = (effTk ^ _2) * (effSa ^ _2) * (_1 - (effIso ^ _2)) * effHLT; - Expr zMuTkEffTerm = _2 * (effTk ^ _2) * effSa * (_1 - effSa) * (effIso ^ _2) * (_1 - ((_1 - effHLT) ^ _2)); - Expr zMuSaEffTerm = _2 * (effSa ^ _2) * effTk * (_1 - effTk) * (effIso ^ _2) * effHLT; - - Expr zMuMu1HLT = rebinMuMu1HLTConst * zMuMuEff1HLTTerm * yieldZMuMu; - Expr zMuMu2HLT = rebinMuMu2HLTConst * zMuMuEff2HLTTerm * yieldZMuMu; - - Expr zMuTkBkg = yieldBkgZMuTk * funct::Exponential(lambda) * funct::Polynomial<2>(a0, a1, a2); - Expr zMuTkBkgScaled = rebinMuTkConst * zMuTkBkg; - Expr zMuTk = rebinMuTkConst * (zMuTkEffTerm * yieldZMuMu * zPdfMuTk + zMuTkBkg); - - Expr zMuMuNoIsoBkg = yieldBkgZMuMuNotIso * funct::Exponential(alpha) * funct::Polynomial<2>(b0, b1, b2); - Expr zMuMuNoIsoBkgScaled = rebinMuMuNoIsoConst * zMuMuNoIsoBkg; - Expr zMuMuNoIso = rebinMuMuNoIsoConst * (zMuMuNoIsoEffTerm * yieldZMuMu * zPdfMuMuNonIso + zMuMuNoIsoBkg); - - // Expr zMuSa = rebinMuSaConst * (zMuSaEffTerm * yieldZMuMu * funct::Gaussian(meanZMuSa, sigmaZMuSa) - // + (yieldBkgZMuSa * funct::Exponential(beta))); - Expr zMuSa = - rebinMuSaConst * (zMuSaEffTerm * yieldZMuMu * zPdfMuSa + (yieldBkgZMuSa /** funct::Exponential(beta) */)); - - TH1D histoZCount1HLT("histoZCount1HLT", "", 1, fMin, fMax); - histoZCount1HLT.Fill(100, nZMuMu1HLT); - TH1D histoZCount2HLT("histoZCount2HLT", "", 1, fMin, fMax); - histoZCount2HLT.Fill(100, nZMuMu2HLT); - - Expr zPdfMuSaBkg = _1 / (cFMax - cFMin); - Expr f = yieldZMuMu * zMuSaEffTerm * zPdfMuSa + yieldBkgZMuSa * zPdfMuSaBkg; - funct::Expression zMuSaEffTermExp = _2 * (effSa ^ _2) * effTk * (_1 - effTk) * (effIso ^ _2) * effHLT; - - funct::Expression totYield = yieldZMuMu * zMuSaEffTermExp + yieldBkgZMuSa; - Likelihood like(masses, f, totYield); - ChiSquared chi2(zMuMu1HLT, - &histoZCount1HLT, - zMuMu2HLT, - &histoZCount2HLT, - zMuTk, - histoZMuTk, - // zMuSa, histoZMuSa, - zMuMuNoIso, - histoZMuMuNoIso, - fMin, - fMax); - cout << "N. bins: " << chi2.numberOfBins() << endl; - - fit::CombinedChiSquaredLikelihood combo(chi2, like); - - fit::RootMinuit > minuit(combo, true); - commands.add(minuit, yieldZMuMu); - commands.add(minuit, effTk); - commands.add(minuit, effSa); - commands.add(minuit, effIso); - commands.add(minuit, effHLT); - commands.add(minuit, yieldBkgZMuTk); - commands.add(minuit, yieldBkgZMuSa); - commands.add(minuit, yieldBkgZMuMuNotIso); - commands.add(minuit, lambda); - commands.add(minuit, alpha); - // commands.add(minuit, beta); - commands.add(minuit, a0); - commands.add(minuit, a1); - commands.add(minuit, a2); - commands.add(minuit, b0); - commands.add(minuit, b1); - commands.add(minuit, b2); - commands.run(minuit); - const unsigned int nPar = 16; //WARNIG: this must be updated manually for now - ROOT::Math::SMatrix > err; - minuit.getErrorMatrix(err); - std::cout << "error matrix:" << std::endl; - for (unsigned int i = 0; i < nPar; ++i) { - for (unsigned int j = 0; j < nPar; ++j) { - std::cout << err(i, j) << "\t"; - } - std::cout << std::endl; - } - minuit.printFitResults(); - //Plot - double s; - s = 0; - for (int i = 1; i <= histoZMuMuNoIso->GetNbinsX(); ++i) - s += histoZMuMuNoIso->GetBinContent(i); - histoZMuMuNoIso->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuMu->GetNbinsX(); ++i) - s += histoZMuMu->GetBinContent(i); - histoZMuMu->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuMu1HLT->GetNbinsX(); ++i) - s += histoZMuMu1HLT->GetBinContent(i); - histoZMuMu1HLT->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuMu2HLT->GetNbinsX(); ++i) - s += histoZMuMu2HLT->GetBinContent(i); - histoZMuMu2HLT->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuTk->GetNbinsX(); ++i) - s += histoZMuTk->GetBinContent(i); - histoZMuTk->SetEntries(s); - s = 0; - for (int i = 1; i <= histoZMuSa->GetNbinsX(); ++i) - s += histoZMuSa->GetBinContent(i); - histoZMuSa->SetEntries(s); - - string ZMuMu1HLTPlot = "ZMuMu1HLTFit_" + plot_string; - root::plot(ZMuMu1HLTPlot.c_str(), - *histoZMuMu1HLT, - zMuMu1HLT, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - kRed, - 2, - kDashed, - 100, - "Z -> #mu #mu mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuMu2HLTPlot = "ZMuMu2HLTFit_" + plot_string; - root::plot(ZMuMu2HLTPlot.c_str(), - *histoZMuMu2HLT, - zMuMu2HLT, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - kRed, - 2, - kDashed, - 100, - "Z -> #mu #mu mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuMuNoIsoPlot = "ZMuMuNoIsoFit_" + plot_string; - root::plot(ZMuMuNoIsoPlot.c_str(), - *histoZMuMuNoIso, - zMuMuNoIso, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - kRed, - 2, - kDashed, - 100, - "Z -> #mu #mu Not Iso mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - - string ZMuTkPlot = "ZMuTkFit_X_" + plot_string; - root::plot(ZMuTkPlot.c_str(), - *histoZMuTk, - zMuTk, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - yieldBkgZMuTk, - lambda, - a0, - a1, - a2, - kRed, - 2, - kDashed, - 100, - "Z -> #mu + (unmatched) track mass", - "#mu #mu invariant mass (GeV/c^{2})", - "Events"); - ZMuTkPlot = "ZMuTkFit_" + plot_string; - TF1 funZMuTk = root::tf1_t("ZMuTkFunction", - zMuTk, - fMin, - fMax, - effTk, - effSa, - effIso, - effHLT, - yieldZMuMu, - yieldBkgZMuTk, - lambda, - a0, - a1, - a2); - funZMuTk.SetLineColor(kRed); - funZMuTk.SetLineWidth(2); - funZMuTk.SetLineStyle(kDashed); - funZMuTk.SetNpx(10000); - TF1 funZMuTkBkg = - root::tf1_t("ZMuTkBack", zMuTkBkgScaled, fMin, fMax, yieldBkgZMuTk, lambda, a0, a1, a2); - funZMuTkBkg.SetLineColor(kGreen); - funZMuTkBkg.SetLineWidth(2); - funZMuTkBkg.SetLineStyle(kDashed); - funZMuTkBkg.SetNpx(10000); - histoZMuTk->SetTitle("Z -> #mu + (unmatched) track mass"); - histoZMuTk->SetXTitle("#mu + (unmatched) track invariant mass (GeV/c^{2})"); - histoZMuTk->SetYTitle("Events"); - TCanvas* canvas = new TCanvas("canvas"); - histoZMuTk->Draw("e"); - funZMuTkBkg.Draw("same"); - funZMuTk.Draw("same"); - canvas->SaveAs(ZMuTkPlot.c_str()); - canvas->SetLogy(); - string logZMuTkPlot = "log_" + ZMuTkPlot; - canvas->SaveAs(logZMuTkPlot.c_str()); - string ZMuSaPlot = "ZMuSaFit_" + plot_string; - root::plot(ZMuSaPlot.c_str(), - *histoZMuSa, - zMuSa, - fMin, - fMax, - effSa, - effTk, - effIso, - yieldZMuMu, - yieldBkgZMuSa, - kRed, - 2, - kDashed, - 10000, - "Z -> #mu + (unmatched) standalone mass", - "#mu + (unmatched) standalone invariant mass (GeV/c^{2})", - "Events"); - } - } - } catch (std::exception& e) { - cerr << "error: " << e.what() << "\n"; - return 1; - } catch (...) { - cerr << "Exception of unknown type!\n"; - } - - return 0; -} diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/BjetAnalyzer.cc b/ElectroWeakAnalysis/ZMuMu/plugins/BjetAnalyzer.cc deleted file mode 100644 index a72b7e4cc53bd..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/BjetAnalyzer.cc +++ /dev/null @@ -1,94 +0,0 @@ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/BTauReco/interface/JetTag.h" -#include -#include "TH1.h" - -class BjetAnalysis : public edm::EDAnalyzer { -public: - BjetAnalysis(const edm::ParameterSet& cfg); - void analyze(const edm::Event&, const edm::EventSetup&) override; - // virtual void endJob(); -private: - edm::EDGetTokenT bTagToken_; - edm::EDGetTokenT bTagToken2_; - edm::EDGetTokenT bTagToken3_; - std::vector matched_, unMatched_; - double ptMin_, massMin_, massMax_, etaMin_, etaMax_, trkIso_, chi2Cut_; - int nHitCut_; - TH1D *h_GlbMuNofHitsGlbMu_, *h_GlbMuChi2_, *h_TrkMuNofHitsGlbMu_, *h_GlbMuDxy_; -}; - -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -using namespace std; -using namespace reco; -using namespace edm; -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -BjetAnalysis::BjetAnalysis(const edm::ParameterSet& cfg) - : bTagToken_(consumes(edm::InputTag("trackCountingHighEffBJetTags"))), - bTagToken2_(consumes(edm::InputTag("jetProbabilityBJetTags"))), - bTagToken3_(consumes(edm::InputTag("jetBProbabilityBJetTags"))), - ptMin_(cfg.getUntrackedParameter("ptMin")), - massMin_(cfg.getUntrackedParameter("massMin")), - massMax_(cfg.getUntrackedParameter("massMax")), - etaMin_(cfg.getUntrackedParameter("etaMin")), - etaMax_(cfg.getUntrackedParameter("etaMax")), - trkIso_(cfg.getUntrackedParameter("trkIso")), - chi2Cut_(cfg.getUntrackedParameter("chi2Cut")), - nHitCut_(cfg.getUntrackedParameter("nHitCut")) { - Service fs; - TFileDirectory trackEffDir = fs->mkdir("QualityOfGlbMu"); - h_GlbMuNofHitsGlbMu_ = trackEffDir.make("# of Hits of GlobalMuon", "# of Hits of GlobalMuon", 100, 0, 100); - h_TrkMuNofHitsGlbMu_ = trackEffDir.make("# of Hits of TrackerMuon", "# of Hits of TrackerMuon", 100, 0, 100); - h_GlbMuChi2_ = trackEffDir.make("chi2 of GlobalMuon", "chi2 of GlobalMuon", 100, 0, 10); - h_GlbMuDxy_ = trackEffDir.make("Dxy of GlobalMuon", "Dxy of GlobalMuon", 1000, -5., 5.); -} - -void BjetAnalysis::analyze(const edm::Event& evt, const edm::EventSetup&) { - // Get b tag information - edm::Handle bTagHandle; - evt.getByToken(bTagToken_, bTagHandle); - const reco::JetTagCollection& bTags = *(bTagHandle.product()); - - // Loop over jets and study b tag info. - for (unsigned int i = 0; i != bTags.size(); ++i) { - cout << " Jet " << i << " has b tag discriminator (trackCountingHighEffBJetTags)= " << bTags[i].second - << " and jet Pt = " << bTags[i].first->pt() << endl; - } - - // Get b tag information - edm::Handle bTagHandle2; - evt.getByToken(bTagToken2_, bTagHandle2); - const reco::JetTagCollection& bTags2 = *(bTagHandle2.product()); - - // Loop over jets and study b tag info. - for (unsigned int i = 0; i != bTags2.size(); ++i) { - cout << " Jet " << i << " has b tag discriminator (jetProbabilityBJetTags) = " << bTags2[i].second - << " and jet Pt = " << bTags2[i].first->pt() << endl; - } - - // Get b tag information - edm::Handle bTagHandle3; - evt.getByToken(bTagToken3_, bTagHandle3); - const reco::JetTagCollection& bTags3 = *(bTagHandle3.product()); - - // Loop over jets and study b tag info. - for (unsigned int i = 0; i != bTags3.size(); ++i) { - cout << " Jet " << i << " has b tag discriminator (jetBProbabilityBJetTags) = " << bTags3[i].second - << " and jet Pt = " << bTags3[i].first->pt() << endl; - } -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(BjetAnalysis); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/BuildFile.xml b/ElectroWeakAnalysis/ZMuMu/plugins/BuildFile.xml deleted file mode 100644 index 25d4351f56147..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/BuildFile.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/DebugZMCTruth.cc b/ElectroWeakAnalysis/ZMuMu/plugins/DebugZMCTruth.cc deleted file mode 100644 index 46f16b78c8e4b..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/DebugZMCTruth.cc +++ /dev/null @@ -1,51 +0,0 @@ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" -#include -using namespace edm; -using namespace std; -using namespace reco; - -class DebugZMCTruth : public edm::EDAnalyzer { -public: - DebugZMCTruth(const edm::ParameterSet& pset); - -private: - void analyze(const Event& event, const EventSetup& setup) override; - InputTag src_; - EDGetTokenT srcToken_; - EDGetTokenT genParticlesToken_; - EDGetTokenT matchToken_; -}; - -DebugZMCTruth::DebugZMCTruth(const ParameterSet& cfg) - : src_(cfg.getParameter("src")), - srcToken_(consumes(src_)), - genParticlesToken_(consumes(cfg.getParameter("genParticles"))), - matchToken_(consumes(cfg.getParameter("mcMatch"))) {} - -void DebugZMCTruth::analyze(const Event& event, const EventSetup& setup) { - Handle genParticles; - event.getByToken(genParticlesToken_, genParticles); - Handle src; - event.getByToken(srcToken_, src); - cout << ">>> event has " << src->size() << " reconstructed particles in {" << src_ << "}" << endl; - Handle match; - event.getByToken(matchToken_, match); - cout << ">>> Z matches: "; - for (unsigned int i = 0; i < src->size(); ++i) { - CandidateBaseRef ref = src->refAt(i); - GenParticleRef mc = (*match)[ref]; - cout << (mc.isNull() ? "(no)" : "(yes)"); - } - cout << endl; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(DebugZMCTruth); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/DimuonMCMatcher.cc b/ElectroWeakAnalysis/ZMuMu/plugins/DimuonMCMatcher.cc deleted file mode 100644 index 244f05eef0f16..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/DimuonMCMatcher.cc +++ /dev/null @@ -1,93 +0,0 @@ -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include - -class DimuonMCMatcher : public edm::EDProducer { -public: - DimuonMCMatcher(const edm::ParameterSet& cfg); - void produce(edm::Event&, const edm::EventSetup&) override; - -private: - edm::EDGetTokenT srcToken_; -}; - -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -using namespace std; -using namespace reco; -using namespace edm; - -DimuonMCMatcher::DimuonMCMatcher(const edm::ParameterSet& cfg) - : srcToken_(consumes(cfg.getParameter("src"))) { - produces >(); -} - -void DimuonMCMatcher::produce(edm::Event& evt, const edm::EventSetup&) { - Handle src; - evt.getByToken(srcToken_, src); - unique_ptr > matched(new vector); - matched->reserve(src->size()); - int j = 0; - for (CandidateView::const_iterator i = src->begin(); i != src->end(); ++i) { - j++; - const Candidate* dau1 = i->daughter(0); - const Candidate* dau2 = i->daughter(1); - if (dau1 == nullptr || dau2 == nullptr) - throw Exception(errors::InvalidReference) << "one of the two daughter does not exist\n"; - const Candidate* c1 = dau1->masterClone().get(); - GenParticleRef mc1; - const pat::Muon* mu1 = dynamic_cast(c1); - if (mu1 != nullptr) { - mc1 = mu1->genParticleRef(); - // if (mc1.isNonnull()) cout << "DimuonMCMatcher> genParticleRef1 " << mc1->pdgId() << endl; - } else { - const pat::GenericParticle* gp1 = dynamic_cast(c1); - if (gp1 == nullptr) - throw Exception(errors::InvalidReference) - << "first of two daughter is neither a pat::Muon not pat::GenericParticle\n"; - mc1 = gp1->genParticleRef(); - } - const Candidate* c2 = dau2->masterClone().get(); - GenParticleRef mc2; - const pat::Muon* mu2 = dynamic_cast(c2); - if (mu2 != nullptr) { - mc2 = mu2->genParticleRef(); - // if (mc2.isNonnull()) cout << "DimuonMCMatcher> genParticleRef2 " << mc2->pdgId() << endl; - } else { - const pat::GenericParticle* gp2 = dynamic_cast(c2); - if (gp2 == nullptr) - throw Exception(errors::InvalidReference) - << "first of two daughter is neither a pat::Muon not pat::GenericParticle\n"; - mc2 = gp2->genParticleRef(); - } - GenParticleRef dimuonMatch; - // cout << "DimuonMatcher> mc1 " << mc1.isNonnull() << " mc2 " << mc2.isNonnull() << endl; - if (mc1.isNonnull() && mc2.isNonnull()) { - int k = 0; - do { - k++; - mc1 = mc1->numberOfMothers() > 0 ? mc1->motherRef() : GenParticleRef(); - mc2 = mc2->numberOfMothers() > 0 ? mc2->motherRef() : GenParticleRef(); - // cout << "DimuonMCMatcher> do loop: " << k << " id1 " << mc1->pdgId() << " id2 " << mc2->pdgId() << endl; - } while (mc1 != mc2 && mc1.isNonnull() && mc2.isNonnull()); - if (mc1.isNonnull() && mc2.isNonnull() && mc1->pdgId() == 23) { - dimuonMatch = mc1; - } - } - // cout << "DimuonMatcher> dimuonMatch " << dimuonMatch.isNonnull() << endl; - matched->push_back(dimuonMatch); - } - - evt.put(std::move(matched)); -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(DimuonMCMatcher); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/DimuonStatistics.cc b/ElectroWeakAnalysis/ZMuMu/plugins/DimuonStatistics.cc deleted file mode 100644 index efa965d0967ac..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/DimuonStatistics.cc +++ /dev/null @@ -1,141 +0,0 @@ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include - -class DimuonStatistics : public edm::EDAnalyzer { -public: - DimuonStatistics(const edm::ParameterSet& cfg); - void analyze(const edm::Event&, const edm::EventSetup&) override; - void endJob() override; - -private: - edm::InputTag src_; - edm::EDGetTokenT srcToken_; - std::vector matched_, unMatched_; - double ptMin_, massMin_, massMax_, etaMin_, etaMax_, trkIso_; -}; - -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -using namespace std; -using namespace reco; -using namespace edm; -const unsigned int maxEntries = 10; - -DimuonStatistics::DimuonStatistics(const edm::ParameterSet& cfg) - : src_(cfg.getParameter("src")), - srcToken_(consumes(src_)), - matched_(maxEntries + 1, 0), - unMatched_(maxEntries + 1, 0), - ptMin_(cfg.getUntrackedParameter("ptMin")), - massMin_(cfg.getUntrackedParameter("massMin")), - massMax_(cfg.getUntrackedParameter("massMax")), - etaMin_(cfg.getUntrackedParameter("etaMin")), - etaMax_(cfg.getUntrackedParameter("etaMax")), - trkIso_(cfg.getUntrackedParameter("trkIso")) {} - -void DimuonStatistics::endJob() { - cout << src_.encode() << endl; - cout << " == Matched == " << endl; - for (unsigned int i = 0; i <= maxEntries; ++i) { - cout << i << ": " << matched_[i]; - if (i < maxEntries) - cout << ", "; - } - cout << endl; - cout << " == unMatched == " << endl; - for (unsigned int i = 0; i <= maxEntries; ++i) { - cout << i << ": " << unMatched_[i]; - if (i < maxEntries) - cout << ", "; - } - cout << endl; -} - -void DimuonStatistics::analyze(const edm::Event& evt, const edm::EventSetup&) { - Handle src; - evt.getByToken(srcToken_, src); - double trackIso1 = -1; - double trackIso2 = -1; - int j = 0; - unsigned int matched = 0, unMatched = 0; - cout << ">> entries in " << src_ << ": " << src->size() << endl; - for (CandidateView::const_iterator i = src->begin(); i != src->end(); ++i) { - j++; - const Candidate* dau1 = i->daughter(0); - const Candidate* dau2 = i->daughter(1); - if (dau1 == nullptr || dau2 == nullptr) - throw Exception(errors::InvalidReference) << "one of the two daughter does not exist\n"; - const Candidate* c1 = dau1->masterClone().get(); - GenParticleRef mc1; - const pat::Muon* mu1 = dynamic_cast(c1); - if (mu1 != nullptr) { - mc1 = mu1->genParticleRef(); - // if (mc1.isNonnull()) cout << "DimuonStatistics> genParticleRef1 " << mc1->pdgId() << endl; - trackIso1 = mu1->trackIso(); - } else { - const pat::GenericParticle* gp1 = dynamic_cast(c1); - if (gp1 == nullptr) - throw Exception(errors::InvalidReference) - << "first of two daughter is neither a pat::Muon not pat::GenericParticle\n"; - mc1 = gp1->genParticleRef(); - } - const Candidate* c2 = dau2->masterClone().get(); - GenParticleRef mc2; - const pat::Muon* mu2 = dynamic_cast(c2); - if (mu2 != nullptr) { - mc2 = mu2->genParticleRef(); - // if (mc2.isNonnull()) cout << "DimuonStatistics> genParticleRef2 " << mc2->pdgId() << endl; - trackIso2 = mu2->trackIso(); - } else { - const pat::GenericParticle* gp2 = dynamic_cast(c2); - if (gp2 == nullptr) - throw Exception(errors::InvalidReference) - << "first of two daughter is neither a pat::Muon not pat::GenericParticle\n"; - mc2 = gp2->genParticleRef(); - } - GenParticleRef dimuonMatch; - if (mc1.isNonnull() && mc2.isNonnull()) { - cout << "DimuonStatistics> mc1: " << mc1->pdgId() << ", mc2: " << mc2->pdgId() << endl; - int k = 0; - do { - k++; - mc1 = mc1->numberOfMothers() > 0 ? mc1->motherRef() : GenParticleRef(); - mc2 = mc2->numberOfMothers() > 0 ? mc2->motherRef() : GenParticleRef(); - // cout << "DimuonStatistics> do loop: " << k << " id1 " << mc1->pdgId() << " id2 " << mc2->pdgId() << endl; - } while (mc1 != mc2 && mc1.isNonnull() && mc2.isNonnull()); - if (mc1.isNonnull() && mc2.isNonnull() && mc1->pdgId() == 23) { - dimuonMatch = mc1; - } - } - // cout << "DimuonMatcher> dimuonMatch " << dimuonMatch.isNonnull() << endl; - if ((fabs(dau1->eta()) > etaMin_ && fabs(dau1->eta()) < etaMax_) && dau1->pt() > ptMin_ && - ((fabs(dau2->eta()) > etaMin_) && (fabs(dau2->eta()) < etaMax_)) && dau2->pt() > ptMin_ && - trackIso1 < trkIso_ && trackIso2 < trkIso_ && i->mass() > massMin_ && i->mass() < massMax_) { - cout << "dimuon mass " << i->mass() << endl; - if (dimuonMatch.isNonnull()) - ++matched; - else - ++unMatched; - } - } - cout << "matched: " << matched << ", unmatched: " << unMatched << endl; - - if (matched > maxEntries) - matched = maxEntries; - if (unMatched > maxEntries) - unMatched = maxEntries; - ++matched_[matched]; - ++unMatched_[unMatched]; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(DimuonStatistics); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/EWKSystUnc.cc b/ElectroWeakAnalysis/ZMuMu/plugins/EWKSystUnc.cc deleted file mode 100644 index 5b0a49718da52..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/EWKSystUnc.cc +++ /dev/null @@ -1,210 +0,0 @@ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" -#include "TH1.h" - -class EWKSystUnc : public edm::EDAnalyzer { -public: - EWKSystUnc(const edm::ParameterSet& pset); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - void endJob() override; - edm::EDGetTokenT genToken_; - edm::EDGetTokenT weightsToken_; - unsigned int nbinsMass_, nbinsPt_, nbinsAng_; - double massMax_, ptMax_, angMax_; - double accPtMin_, accMassMin_, accMassMax_, accEtaMin_, accEtaMax_; - TH1F* h_nZ_; - TH1F *h_mZMC_, *h_ptZMC_, *h_phiZMC_, *h_thetaZMC_, *h_etaZMC_, *h_rapidityZMC_; - TH1F *hardpt, *softpt, *hardeta, *softeta; - TH1F* h_weight_histo; - bool isMCatNLO_; - double nAcc_, nAccReW_, nBothMuHasZHasGrandMa_; - std::string filename_; -}; - -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" - -#include "HepMC/WeightContainer.h" -#include "HepMC/GenEvent.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include -#include -#include - -using namespace std; -using namespace reco; -using namespace edm; - -EWKSystUnc::EWKSystUnc(const ParameterSet& pset) - : genToken_(consumes(pset.getParameter("genParticles"))), - weightsToken_(consumes(pset.getParameter("weights"))), - nbinsMass_(pset.getUntrackedParameter("nbinsMass")), - nbinsPt_(pset.getUntrackedParameter("nbinsPt")), - nbinsAng_(pset.getUntrackedParameter("nbinsAng")), - massMax_(pset.getUntrackedParameter("massMax")), - ptMax_(pset.getUntrackedParameter("ptMax")), - angMax_(pset.getUntrackedParameter("angMax")), - accPtMin_(pset.getUntrackedParameter("accPtMin")), - accMassMin_(pset.getUntrackedParameter("accMassMin")), - accMassMax_(pset.getUntrackedParameter("accMassMax")), - accEtaMin_(pset.getUntrackedParameter("accEtaMin")), - accEtaMax_(pset.getUntrackedParameter("accEtaMax")), - isMCatNLO_(pset.getUntrackedParameter("isMCatNLO")), - filename_(pset.getUntrackedParameter("outfilename")) { - cout << ">>> Z Histogrammer constructor" << endl; - Service fs; - - TFileDirectory ZMCHisto = fs->mkdir("ZMCHisto"); - h_nZ_ = ZMCHisto.make("ZNumber", "number of Z particles", 11, -0.5, 10.5); - h_weight_histo = ZMCHisto.make("weight_histo", "weight_histo", 20, -10, 10); - - h_mZMC_ = ZMCHisto.make("ZMCMass", "Z MC mass (GeV/c^{2})", nbinsMass_, 0, massMax_); - h_ptZMC_ = ZMCHisto.make("ZMCPt", "Z MC p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - hardpt = ZMCHisto.make("hardpt", "hard muon p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - softpt = ZMCHisto.make("softpt", "soft muon p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - - h_phiZMC_ = ZMCHisto.make("ZMCPhi", "Z MC #phi", nbinsAng_, -angMax_, angMax_); - h_thetaZMC_ = ZMCHisto.make("ZMCTheta", "Z MC #theta", nbinsAng_, 0, angMax_); - h_etaZMC_ = ZMCHisto.make("ZMCEta", "Z MC #eta", nbinsAng_, -angMax_, angMax_); - h_rapidityZMC_ = ZMCHisto.make("ZMCRapidity", "Z MC y", nbinsAng_, -angMax_, angMax_); - - hardeta = ZMCHisto.make("hard muon eta", "hard muon #eta", nbinsAng_, -angMax_, angMax_); - softeta = ZMCHisto.make("soft muon eta", "soft muon #eta", nbinsAng_, -angMax_, angMax_); - nAcc_ = 0.; - nAccReW_ = 0; - nBothMuHasZHasGrandMa_ = 0; -} - -void EWKSystUnc::analyze(const edm::Event& event, const edm::EventSetup& setup) { - cout << ">>> Z Histogrammer analyze" << endl; - - Handle gen; - Handle weights; - - event.getByToken(genToken_, gen); - event.getByToken(weightsToken_, weights); - - // get weight and fill it to histogram - double weight = (*weights); - - // protection... - if (weight > 2. || weight < 0.1) { - std::cout << "weight = " << weight << ", something strange...." << std::endl; - weight = 1; - } - h_weight_histo->Fill(weight); - - std::vector muons; - - for (unsigned int i = 0; i < gen->size(); ++i) { - const GenParticle& muMC = (*gen)[i]; - // filling only muons coming form Z - if (abs(muMC.pdgId()) == 13 && muMC.status() == 1 && muMC.numberOfMothers() > 0) { - if (muMC.mother()->numberOfMothers() > 0) { - cout << "I'm getting a muon \n" - << "with " - << "muMC.numberOfMothers() " << muMC.numberOfMothers() << "\n the first mother has pdgId " - << muMC.mother()->pdgId() << "with " - << "muMC.mother()->numberOfMothers() " << muMC.mother()->numberOfMothers() - << "\n the first grandma has pdgId " << muMC.mother()->mother()->pdgId() << endl; - if (muMC.mother()->mother()->pdgId() == 23) - muons.push_back(muMC); - } - } - } - - cout << "finally I selected " << muons.size() << " muons" << endl; - - // if there are at least two muons, - // calculate invarant mass of first two and fill it into histogram - - double inv_mass = 0.0; - double Zpt_ = 0.0; - double Zeta_ = 0.0; - double Ztheta_ = 0.0; - double Zphi_ = 0.0; - double Zrapidity_ = 0.0; - - if (muons.size() > 1) { - if (muons[0].mother()->mother()->pdgId() == 23 && muons[1].mother()->mother()->pdgId() == 23) - nBothMuHasZHasGrandMa_++; - math::XYZTLorentzVector tot_momentum(muons[0].p4()); - math::XYZTLorentzVector mom2(muons[1].p4()); - tot_momentum += mom2; - inv_mass = sqrt(tot_momentum.mass2()); - Zpt_ = tot_momentum.pt(); - Zeta_ = tot_momentum.eta(); - Ztheta_ = tot_momentum.theta(); - Zphi_ = tot_momentum.phi(); - Zrapidity_ = tot_momentum.Rapidity(); - - // IMPORTANT: use the weight of the event ... - - double weight_sign = weight; - //double weight_sign = 1. ; - h_mZMC_->Fill(inv_mass, weight_sign); - h_ptZMC_->Fill(Zpt_, weight_sign); - h_etaZMC_->Fill(Zeta_, weight_sign); - h_thetaZMC_->Fill(Ztheta_, weight_sign); - h_phiZMC_->Fill(Zphi_, weight_sign); - h_rapidityZMC_->Fill(Zrapidity_, weight_sign); - - double pt1 = muons[0].pt(); - double pt2 = muons[1].pt(); - double eta1 = muons[0].eta(); - double eta2 = muons[1].eta(); - - if (pt1 > pt2) { - hardpt->Fill(pt1, weight_sign); - softpt->Fill(pt2, weight_sign); - hardeta->Fill(eta1, weight_sign); - softeta->Fill(eta2, weight_sign); - } else { - hardpt->Fill(pt2, weight_sign); - softpt->Fill(pt1, weight_sign); - hardeta->Fill(eta2, weight_sign); - softeta->Fill(eta1, weight_sign); - } - - //evaluating the geometric acceptance - if (pt1 >= accPtMin_ && pt2 >= accPtMin_ && fabs(eta1) >= accEtaMin_ && fabs(eta2) >= accEtaMin_ && - fabs(eta1) <= accEtaMax_ && fabs(eta2) <= accEtaMax_ && inv_mass >= accMassMin_ && inv_mass <= accMassMax_) { - nAcc_++; - nAccReW_ += weight; - } - } -} - -void EWKSystUnc::endJob() { - cout << " number of events accepted :" << nAcc_ << endl; - cout << " number of events accepted reweigthed :" << nAccReW_ << endl; - double nev = h_mZMC_->GetEntries(); - double nev_weigthed = h_mZMC_->Integral(0, nbinsMass_ + 1); - cout << " number of total events :" << nev << endl; - cout << " number of total weighted events :" << nev_weigthed << endl; - cout << " number of cases in which BothMuHasZHasGrandMa :" << nBothMuHasZHasGrandMa_ << endl; - double eff = (double)nAcc_ / (double)h_mZMC_->GetEntries(); - double eff_rew = (double)nAccReW_ / (double)h_mZMC_->Integral(0, nbinsMass_ + 1); - double err = sqrt(eff * (1. - eff) / (double)h_mZMC_->GetEntries()); - double err_rew = sqrt(eff_rew * (1. - eff_rew) / (double)h_mZMC_->Integral(0, nbinsMass_ + 1)); - cout << " geometric acceptance: " << eff << "+/-" << err << endl; - cout << " geometric acceptance reweighted: " << eff_rew << "+/-" << err_rew << endl; - - ofstream myfile; - myfile.open(filename_.c_str(), std::ios::app); - myfile << eff << " " << eff_rew << " " << nev << " " << nev_weigthed << endl; - myfile.close(); -} -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(EWKSystUnc); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/EventVtxInfoNtupleDumper.cc b/ElectroWeakAnalysis/ZMuMu/plugins/EventVtxInfoNtupleDumper.cc deleted file mode 100644 index 1c8da66c584c1..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/EventVtxInfoNtupleDumper.cc +++ /dev/null @@ -1,79 +0,0 @@ -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" - -#include - -using namespace edm; -using namespace std; -using namespace reco; - -class EventVtxInfoNtupleDumper : public edm::EDProducer { -public: - EventVtxInfoNtupleDumper(const edm::ParameterSet &); - -private: - void produce(edm::Event &, const edm::EventSetup &) override; - edm::EDGetTokenT primaryVerticesToken_; -}; - -EventVtxInfoNtupleDumper::EventVtxInfoNtupleDumper(const ParameterSet &cfg) - : primaryVerticesToken_(consumes(cfg.getParameter("primaryVertices"))) { - produces("numPV").setBranchAlias("numPV"); - produces("nTrkPV").setBranchAlias("nTrkPV"); - produces("chi2PV").setBranchAlias("chi2PV"); - produces("ndofPV").setBranchAlias("ndofPV"); - produces("zPV").setBranchAlias("zPV"); - produces("rhoPV").setBranchAlias("rhoPV"); - // produces >( "nTrkPV" ).setBranchAlias( "nTrkPV" ); - // produces >( "chi2PV" ).setBranchAlias( "chi2PV" ); - // produces >( "ndofPV" ).setBranchAlias( "ndofPV" ); -} - -void EventVtxInfoNtupleDumper::produce(Event &evt, const EventSetup &) { - Handle primaryVertices; // Collection of primary Vertices - evt.getByToken(primaryVerticesToken_, primaryVertices); - unique_ptr nVtxs(new int); - unique_ptr nTrkVtx(new int); - unique_ptr chi2Vtx(new float); - unique_ptr ndofVtx(new float); - unique_ptr zVtx(new float); - unique_ptr rhoVtx(new float); - // unique_ptr< vector< unsigned int > > nTrkVtx( new vector< unsigned int > ); - // unique_ptr< vector< float > > chi2Vtx( new vector< float > ); - // unique_ptr< vector< float > > ndofVtx( new vector< float > ); - - const reco::Vertex &pv = (*primaryVertices)[0]; - - *nVtxs = -1; - *nTrkVtx = -1; - *chi2Vtx = -1.0; - *ndofVtx = -1.0; - *zVtx = -1000; - *rhoVtx = -1000; - if (!(pv.isFake())) { - *nVtxs = primaryVertices->size(); - *nTrkVtx = pv.tracksSize(); - *chi2Vtx = pv.chi2(); - *ndofVtx = pv.ndof(); - *zVtx = pv.z(); - *rhoVtx = pv.position().Rho(); - } - // nTrkVtx->push_back(pv.tracksSize()); - // chi2Vtx->push_back(pv.chi2()); - // ndofVtx->push_back(pv.ndof()); - evt.put(std::move(nVtxs), "numPV"); - evt.put(std::move(nTrkVtx), "nTrkPV"); - evt.put(std::move(chi2Vtx), "chi2PV"); - evt.put(std::move(ndofVtx), "ndofPV"); - evt.put(std::move(zVtx), "zPV"); - evt.put(std::move(rhoVtx), "rhoPV"); -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(EventVtxInfoNtupleDumper); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/GlbMuQualityCutsAnalysis.cc b/ElectroWeakAnalysis/ZMuMu/plugins/GlbMuQualityCutsAnalysis.cc deleted file mode 100644 index 431b6c9db06a2..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/GlbMuQualityCutsAnalysis.cc +++ /dev/null @@ -1,161 +0,0 @@ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include -#include "TH1.h" - -class GlbMuQualityCutsAnalysis : public edm::EDAnalyzer { -public: - GlbMuQualityCutsAnalysis(const edm::ParameterSet& cfg); - void analyze(const edm::Event&, const edm::EventSetup&) override; - // virtual void endJob(); -private: - edm::InputTag src_; - edm::EDGetTokenT srcToken_; - std::vector matched_, unMatched_; - double ptMin_, massMin_, massMax_, etaMin_, etaMax_, trkIso_, chi2Cut_; - int nHitCut_; - TH1D *h_GlbMuNofHitsGlbMu_, *h_GlbMuChi2_, *h_TrkMuNofHitsGlbMu_, *h_GlbMuDxy_; -}; - -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -using namespace std; -using namespace reco; -using namespace edm; -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -GlbMuQualityCutsAnalysis::GlbMuQualityCutsAnalysis(const edm::ParameterSet& cfg) - : src_(cfg.getParameter("src")), - srcToken_(consumes(src_)), - ptMin_(cfg.getUntrackedParameter("ptMin")), - massMin_(cfg.getUntrackedParameter("massMin")), - massMax_(cfg.getUntrackedParameter("massMax")), - etaMin_(cfg.getUntrackedParameter("etaMin")), - etaMax_(cfg.getUntrackedParameter("etaMax")), - trkIso_(cfg.getUntrackedParameter("trkIso")), - chi2Cut_(cfg.getUntrackedParameter("chi2Cut")), - nHitCut_(cfg.getUntrackedParameter("nHitCut")) { - Service fs; - TFileDirectory trackEffDir = fs->mkdir("QualityOfGlbMu"); - h_GlbMuNofHitsGlbMu_ = trackEffDir.make("# of Hits of GlobalMuon", "# of Hits of GlobalMuon", 100, 0, 100); - h_TrkMuNofHitsGlbMu_ = trackEffDir.make("# of Hits of TrackerMuon", "# of Hits of TrackerMuon", 100, 0, 100); - h_GlbMuChi2_ = trackEffDir.make("chi2 of GlobalMuon", "chi2 of GlobalMuon", 100, 0, 10); - h_GlbMuDxy_ = trackEffDir.make("Dxy of GlobalMuon", "Dxy of GlobalMuon", 1000, -5., 5.); -} - -/*void GlbMuQualityCutsAnalysis::endJob() { - cout << src_.encode() << endl ; - -} -*/ -void GlbMuQualityCutsAnalysis::analyze(const edm::Event& evt, const edm::EventSetup&) { - Handle src; - evt.getByToken(srcToken_, src); - int j = 0; - cout << ">> entries in " << src_ << ": " << src->size() << endl; - for (CandidateView::const_iterator i = src->begin(); i != src->end(); ++i) { - j++; - const Candidate* dau1 = i->daughter(0); - const Candidate* dau2 = i->daughter(1); - if (dau1 == nullptr || dau2 == nullptr) - throw Exception(errors::InvalidReference) << "one of the two daughter does not exist\n"; - const Candidate* c1 = dau1->masterClone().get(); - GenParticleRef mc1; - const pat::Muon* mu1 = dynamic_cast(c1); - std::cout << " dimuon mass " << i->mass() << std::endl; - std::cout << "dau1.pt() " << dau1->pt() << std::endl; - std::cout << "dau2.pt() " << dau2->pt() << std::endl; - std::cout << "dau1.isGlobalMuon() " << dau1->isGlobalMuon() << std::endl; - std::cout << "dau2.isGlobalMuon() " << dau2->isGlobalMuon() << std::endl; - std::cout << "dau1.isTrackerMuon() " << dau1->isTrackerMuon() << std::endl; - std::cout << "dau2.isTrackerlMuon() " << dau2->isTrackerMuon() << std::endl; - std::cout << "dau1.isStandAloneMuon() " << dau1->isStandAloneMuon() << std::endl; - std::cout << "dau2.isStandAloneMuon() " << dau2->isStandAloneMuon() << std::endl; - std::cout << "dau1.charge() " << dau1->charge() << std::endl; - std::cout << "dau2.charge() " << dau2->charge() << std::endl; - if (mu1 != nullptr) { - // if (mc1.isNonnull()) cout << "GlbMuQualityCutsAnalysis> genParticleRef1 " << mc1->pdgId() << endl; - // double trackIso1=mu1->trackIso(); - // std::cout << " mu1 iso" << trackIso1 << std::endl; - } else { - const pat::GenericParticle* gp1 = dynamic_cast(c1); - if (gp1 == nullptr) - throw Exception(errors::InvalidReference) - << "first of two daughter is neither a pat::Muon not pat::GenericParticle\n"; - } - const Candidate* c2 = dau2->masterClone().get(); - - const pat::Muon* mu2 = dynamic_cast(c2); - if (mu2 != nullptr) { - // double trackIso2=mu2->trackIso(); - //std::cout << " mu2 iso" << trackIso2 << std::endl; - } else { - const pat::GenericParticle* gp2 = dynamic_cast(c2); - if (gp2 == nullptr) - throw Exception(errors::InvalidReference) - << "first of two daughter is neither a pat::Muon not pat::GenericParticle\n"; - } - - int nOfHit_1 = 0, nOfHit_tk_1 = 0, nOfHit_2 = 0, nOfHit_tk_2 = 0; - if (mu1->isGlobalMuon()) - nOfHit_1 = mu1->numberOfValidHits(); - std::cout << "n of hit of GlbMu1: " << nOfHit_1 << std::endl; - if (mu1->isTrackerMuon()) - nOfHit_tk_1 = mu1->innerTrack()->numberOfValidHits(); - std::cout << "n of hit of TrkMu1: " << nOfHit_tk_1 << std::endl; - if (mu2->isGlobalMuon()) - nOfHit_2 = mu2->numberOfValidHits(); - std::cout << "n of hit of GlbMu2: " << nOfHit_2 << std::endl; - if (mu2->isTrackerMuon()) - nOfHit_tk_2 = mu2->innerTrack()->numberOfValidHits(); - std::cout << "n of hit of TrkMu2: " << nOfHit_tk_2 << std::endl; - h_GlbMuNofHitsGlbMu_->Fill(nOfHit_1); - h_GlbMuNofHitsGlbMu_->Fill(nOfHit_2); - h_TrkMuNofHitsGlbMu_->Fill(nOfHit_tk_1); - h_TrkMuNofHitsGlbMu_->Fill(nOfHit_tk_2); - double nChi2_1 = 0, nChi2_2 = 0; - if (mu1->isGlobalMuon()) - nChi2_1 = mu1->normChi2(); - std::cout << "chi2 of GlbMu1: " << nChi2_1 << std::endl; - if (mu2->isGlobalMuon()) - nChi2_2 = mu2->normChi2(); - std::cout << "chi2 of GlbMu2: " << nChi2_2 << std::endl; - h_GlbMuChi2_->Fill(nChi2_1); - h_GlbMuChi2_->Fill(nChi2_2); - double dxy_1 = mu1->dB(); - double dxy_2 = mu2->dB(); - - h_GlbMuDxy_->Fill(dxy_1); - h_GlbMuDxy_->Fill(dxy_2); - if (mu1->isGlobalMuon() && (nOfHit_tk_1 < nHitCut_)) { - std::cout << "found a GlbMuon with nOfHit " << nOfHit_tk_1 << ", it has eta: " << mu1->eta() << std::endl; - } - if (mu2->isGlobalMuon() && (nOfHit_tk_2 < nHitCut_)) { - std::cout << "found a GlbMuon with nOfHit " << nOfHit_tk_2 << ", it has eta: " << mu2->eta() << std::endl; - } - if (mu1->isGlobalMuon() && (nChi2_1 > chi2Cut_)) { - std::cout << "found a GlbMuon with chi2 " << nChi2_1 - << ", it has chi2 of track: " << mu1->innerTrack()->normalizedChi2() - << ", and chi2 of Sta: " << mu1->outerTrack()->normalizedChi2() << ", eta: " << mu1->eta() - << ",pt: " << mu1->pt() << std::endl; - } - if (mu2->isGlobalMuon() && (nChi2_2 > chi2Cut_)) { - std::cout << "found a GlbMuon with chi2 " << nChi2_2 - << ", it has chi2 of track: " << mu2->innerTrack()->normalizedChi2() - << ", and chi2 of Sta: " << mu2->outerTrack()->normalizedChi2() << ", eta: " << mu2->eta() - << ",pt: " << mu2->pt() << std::endl; - } - } -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(GlbMuQualityCutsAnalysis); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/MCAcceptanceAnalyzer.cc b/ElectroWeakAnalysis/ZMuMu/plugins/MCAcceptanceAnalyzer.cc deleted file mode 100644 index 88e25a782323e..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/MCAcceptanceAnalyzer.cc +++ /dev/null @@ -1,218 +0,0 @@ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include - -using namespace edm; -using namespace reco; -using namespace std; - -const Candidate* mcMuDaughter(const Candidate* c) { - unsigned int n = c->numberOfDaughters(); - for (unsigned int i = 0; i < n; ++i) { - const Candidate* d = c->daughter(i); - if (fabs(d->pdgId()) == 13) - return d; - } - return nullptr; -} - -struct ZSelector { // modify this selector in order to return an integer (0: no eta cut, 1: eta cut only, 2 eta && pt cut, 3: eta, pt and Mass cut, 4: mass cut on the denominator Z MC) - ZSelector(double ptMin, - double etaDau0Min, - double etaDau0Max, - double etaDau1Min, - double etaDau1Max, - double massMin, - double massMax, - double massMinZMC, - double massMaxZMC) - : ptMin_(ptMin), - etaDau0Min_(etaDau0Min), - etaDau0Max_(etaDau0Max), - etaDau1Min_(etaDau1Min), - etaDau1Max_(etaDau1Max), - massMin_(massMin), - massMax_(massMax), - massMinZMC_(massMinZMC), - massMaxZMC_(massMaxZMC) {} - int operator()(const Candidate& c) const { - // std::cout << "c.numberOfDaughters(): " << c.numberOfDaughters()<< std::endl; - if (c.numberOfDaughters() < 2) - return 0; - if (c.numberOfDaughters() >= 6) - return 0; - const Candidate* d0 = c.daughter(0); - const Candidate* d1 = c.daughter(1); - if (c.numberOfDaughters() > 2) { - if (d0->numberOfDaughters() > 0) - d0 = mcMuDaughter(d0); - if (d1->numberOfDaughters() > 0) - d1 = mcMuDaughter(d1); - } - int temp_cut = 0; - /// allowing asymmetric cut.... - if ((fabs(d0->eta()) > etaDau0Min_ && fabs(d1->eta()) > etaDau1Min_ && fabs(d0->eta()) < etaDau0Max_ && - fabs(d1->eta()) < etaDau1Max_) || - (fabs(d0->eta()) > etaDau1Min_ && fabs(d1->eta()) > etaDau0Min_ && fabs(d0->eta()) < etaDau1Max_ && - fabs(d1->eta()) < etaDau0Max_)) { - temp_cut = 1; - if (d0->pt() > ptMin_ && d1->pt() > ptMin_) { - temp_cut = 2; - double m = (d0->p4() + d1->p4()).mass(); - if (m > massMin_ && m < massMax_) - temp_cut = 3; - if (c.mass() > massMinZMC_ && c.mass() < massMaxZMC_) - temp_cut = 4; - } - } - - return temp_cut; - } - double ptMin_, etaDau0Min_, etaDau0Max_, etaDau1Min_, etaDau1Max_, massMin_, massMax_, massMinZMC_, massMaxZMC_; -}; - -class MCAcceptanceAnalyzer : public EDAnalyzer { -public: - MCAcceptanceAnalyzer(const ParameterSet& cfg); - -private: - void analyze(const Event&, const EventSetup&) override; - void endJob() override; - InputTag zToMuMu_, zToMuMuMC_, zToMuMuMatched_; - EDGetTokenT zToMuMuToken_; - EDGetTokenT zToMuMuMCToken_; - EDGetTokenT zToMuMuMatchedToken_; - long nZToMuMu_, selZToMuMu_, nZToMuMuMC_, selZToMuMuMC_, nZToMuMuMCMatched_, selZToMuMuMCMatched_, nZToMuMuMCDen_; - ZSelector select_, select_OnlyMassCut_; -}; - -MCAcceptanceAnalyzer::MCAcceptanceAnalyzer(const ParameterSet& cfg) - : zToMuMu_(cfg.getParameter("zToMuMu")), - zToMuMuMC_(cfg.getParameter("zToMuMuMC")), - zToMuMuMatched_(cfg.getParameter("zToMuMuMatched")), - zToMuMuToken_(consumes(zToMuMu_)), - zToMuMuMCToken_(consumes(zToMuMuMC_)), - zToMuMuMatchedToken_(consumes(zToMuMuMatched_)), - nZToMuMu_(0), - selZToMuMu_(0), - nZToMuMuMC_(0), - selZToMuMuMC_(0), - nZToMuMuMCMatched_(0), - selZToMuMuMCMatched_(0), - nZToMuMuMCDen_(0), - select_(cfg.getParameter("ptMin"), - cfg.getParameter("etaDau0Min"), - cfg.getParameter("etaDau0Max"), - cfg.getParameter("etaDau1Min"), - cfg.getParameter("etaDau1Max"), - cfg.getParameter("massMin"), - cfg.getParameter("massMax"), - cfg.getParameter("massMinZMC"), - cfg.getParameter("massMaxZMC")), - select_OnlyMassCut_(-1, - -9999, - 9999, - -9999, - 9999, - 0, - 0, - cfg.getParameter("massMinZMC"), - cfg.getParameter("massMaxZMC")) {} - -void MCAcceptanceAnalyzer::analyze(const Event& evt, const EventSetup&) { - Handle zToMuMu; - evt.getByToken(zToMuMuToken_, zToMuMu); - Handle zToMuMuMC; - evt.getByToken(zToMuMuMCToken_, zToMuMuMC); - Handle zToMuMuMatched; - evt.getByToken(zToMuMuMatchedToken_, zToMuMuMatched); - // long nZToMuMu = zToMuMu->size(); - long nZToMuMuMC = zToMuMuMC->size(); - long nZToMuMuMatched = zToMuMuMatched->size(); - - // cout << ">>> " << zToMuMu_ << " has " << nZToMuMu << " entries" << endl; - //cout << ">>> " << zToMuMuMC_ << " has " << nZToMuMuMC << " entries" << endl; - //cout << ">>> " << zToMuMuMatched_ << " has " << nZToMuMuMatched << " entries" << endl; - - nZToMuMuMC_ += nZToMuMuMC; - for (long i = 0; i < nZToMuMuMC; ++i) { - const Candidate& z = (*zToMuMuMC)[i]; - if (select_(z) == 4) - ++selZToMuMuMC_; - if (select_OnlyMassCut_(z) == 4) - ++nZToMuMuMCDen_; - } - - for (long i = 0; i < nZToMuMuMatched; ++i) { - const Candidate& z = (*zToMuMu)[i]; - CandidateBaseRef zRef = zToMuMu->refAt(i); - GenParticleRef mcRef = (*zToMuMuMatched)[zRef]; - - if (mcRef.isNonnull()) { // z candidate matched to Z MC - ++nZToMuMu_; - ++nZToMuMuMCMatched_; - - int selectZ = select_(z); - if (selectZ == 4) - ++selZToMuMu_; - - int selectMC = select_(*mcRef); - - if (selectMC == 4) - ++selZToMuMuMCMatched_; - - if (selectZ != selectMC) { - cout << ">>> select reco: " << selectZ << ", select mc: " << selectMC << endl; - if ((selectZ * selectMC) == 0) - break; - if (z.numberOfDaughters() > 1) { - const Candidate *d0 = z.daughter(0), *d1 = z.daughter(1); - if (mcRef->numberOfDaughters() > 1) { - const Candidate *mcd0 = mcMuDaughter(mcRef->daughter(0)), *mcd1 = mcMuDaughter(mcRef->daughter(1)); - double m = z.mass(), mcm = (mcd0->p4() + mcd1->p4()).mass(); - cout << ">>> reco pt1, eta1: " << d0->pt() << ", " << d0->eta() << ", 2: " << d1->pt() << ", " << d1->eta() - << ", mass = " << m << endl; - cout << ">>> mc pt1, eta1: " << mcd0->pt() << ", " << mcd0->eta() << ", 2: " << mcd1->pt() << ", " - << mcd1->eta() << ", mass = " << mcm << endl; - } - } - } - // to avoid double counting - if ((selectZ == 3) && (selectMC == 3)) - break; - } - } -} - -void MCAcceptanceAnalyzer::endJob() { - double effZToMuMu = double(selZToMuMu_) / double(nZToMuMu_); - double errZToMuMu = sqrt(effZToMuMu * (1. - effZToMuMu) / nZToMuMu_); - double effZToMuMuMC = double(selZToMuMuMC_) / double(nZToMuMuMC_); - double errZToMuMuMC = sqrt(effZToMuMuMC * (1. - effZToMuMuMC) / nZToMuMuMC_); - double effZToMuMuMCDen = double(selZToMuMuMC_) / double(nZToMuMuMCDen_); - double errZToMuMuMCDen = sqrt(effZToMuMuMCDen * (1. - effZToMuMuMCDen) / nZToMuMuMCDen_); - double effZToMuMuMCMatched = double(selZToMuMuMCMatched_) / double(nZToMuMuMCMatched_); - double errZToMuMuMCMatched = sqrt(effZToMuMuMCMatched * (1. - effZToMuMuMCMatched) / nZToMuMuMCMatched_); - cout << ">>> " << zToMuMu_ << ": " << selZToMuMu_ << "/" << nZToMuMu_ << " = " << effZToMuMu << " +/- " << errZToMuMu - << endl; - cout << ">>> " << zToMuMuMC_ << " - matched: " << selZToMuMuMCMatched_ << "/" << nZToMuMuMCMatched_ << " = " - << effZToMuMuMCMatched << " +/- " << errZToMuMuMCMatched << endl; - cout << " if the two numbers above are the same we can neglete resolution effect and quote the acceptance as the " - "number below.... " - << endl; - cout << "********* acceptance m>sampleMCMassCut (usually 20 or 40) ******** " << endl; - cout << ">>> " << zToMuMuMC_ << ": " << selZToMuMuMC_ << "/" << nZToMuMuMC_ << " = " << effZToMuMuMC << " +/- " - << errZToMuMuMC << endl; - cout << "********* acceptance in the given mass range ******** " << endl; - cout << ">>> " << zToMuMuMC_ << ": " << selZToMuMuMC_ << "/" << nZToMuMuMCDen_ << " = " << effZToMuMuMCDen << " +/- " - << errZToMuMuMCDen << endl; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(MCAcceptanceAnalyzer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/MC_Efficiency_Analyzer.cc b/ElectroWeakAnalysis/ZMuMu/plugins/MC_Efficiency_Analyzer.cc deleted file mode 100644 index 037206568cec8..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/MC_Efficiency_Analyzer.cc +++ /dev/null @@ -1,188 +0,0 @@ -/* \class MCEfficiencyAnalyzer - * - * Muon reconstruction efficiency from MC truth, - * for global muons, tracks and standalone. Take as input the output of the - * standard EWK skim: zToMuMu - * - * Produces in output the efficency number - * - * \author Michele de Gruttola, INFN Naples -*/ - -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "DataFormats/Math/interface/deltaR.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/Common/interface/Ref.h" -#include -#include -using namespace edm; -using namespace std; -using namespace reco; - -class MCEfficiencyAnalyzer : public edm::EDAnalyzer { -public: - MCEfficiencyAnalyzer(const edm::ParameterSet& pset) - : zMuMuToken_(consumes(pset.getParameter("zMuMu"))), - MuonsToken_(consumes(pset.getParameter("Muons"))), - MuonsMapToken_(consumes(pset.getParameter("MuonsMap"))), - TracksToken_(consumes(pset.getParameter("Tracks"))), - TracksMapToken_(consumes(pset.getParameter("TracksMap"))), - genParticlesToken_(consumes(pset.getParameter("genParticles"))), - StandAloneToken_(consumes(pset.getParameter("StandAlone"))), - StandAloneMapToken_(consumes(pset.getParameter("StandAloneMap"))), - etacut_(pset.getParameter("etacut")), - ptcut_(pset.getParameter("ptcut")), - deltaRStacut_(pset.getParameter("deltaRStacut")) - - { - nMuMC = 0; - nMureco = 0; - nTrk = 0; - nSta = 0; - nNotMuMatching = 0; - } - - void analyze(const edm::Event& event, const edm::EventSetup& setup) override { - Handle zMuMu; - event.getByToken(zMuMuToken_, zMuMu); - - Handle Muons; - event.getByToken(MuonsToken_, Muons); - - Handle Tracks; - event.getByToken(TracksToken_, Tracks); - - Handle StandAlone; - event.getByToken(StandAloneToken_, StandAlone); - - Handle MuonsMap; - event.getByToken(MuonsMapToken_, MuonsMap); - - Handle TracksMap; - event.getByToken(TracksMapToken_, TracksMap); - - Handle StandAloneMap; - event.getByToken(StandAloneMapToken_, StandAloneMap); - - Handle genParticles; - event.getByToken(genParticlesToken_, genParticles); - - //Getting muons from Z MC - for (unsigned int k = 0; k < genParticles->size(); k++) { - const Candidate& ZCand = (*genParticles)[k]; - int status = ZCand.status(); - - if (ZCand.pdgId() == 23 && status == 3) { - // positive muons - const Candidate* muCand1 = ZCand.daughter(0); - if (muCand1->status() == 3) { - for (unsigned int d = 0; d < muCand1->numberOfDaughters(); d++) { - const Candidate* muCandidate = muCand1->daughter(d); - if (muCandidate->pdgId() == muCand1->pdgId()) { - muCand1 = muCand1->daughter(d); - } - } - } - // negative muons - const Candidate* muCand2 = ZCand.daughter(1); - if (muCand2->status() == 3) { - for (unsigned int e = 0; e < muCand2->numberOfDaughters(); e++) { - const Candidate* muCandidate = muCand2->daughter(e); - if (muCandidate->pdgId() == muCand2->pdgId()) { - muCand2 = muCand2->daughter(e); - } - } - } - - double deltaR_Mu_Sta = 0; - int nMurecoTemp = nMureco; - // getting mu matched - CandMatchMap::const_iterator i; - for (i = MuonsMap->begin(); i != MuonsMap->end(); i++) { - const Candidate /* & reco = * i -> key,*/& mc = *i->val; - if ((muCand1 == &mc) && (mc.pt() > ptcut_) && (std::abs(mc.eta()) < etacut_)) { - nMuMC++; - nMureco++; - break; - } - } - if (nMureco == nMurecoTemp) // I.E. MU RECO NOT FOUND!!!! - { - int nTrkTemp = nTrk; - int nStaTemp = nSta; - - // getting tracks matched and doing the same, CONTROLLING IF MU IS RECONSTRUCTED AS A TRACK AND NOT AS A MU - CandMatchMap::const_iterator l; - for (l = TracksMap->begin(); l != TracksMap->end(); l++) { - const Candidate /* & Trkreco = * l -> key, */& Trkmc = *l->val; - if ((muCand1 == &Trkmc) && (Trkmc.pt() > ptcut_) && (std::abs(Trkmc.eta()) < etacut_)) { - nMuMC++; - nTrk++; - break; - } - } - // the same for standalone - CandMatchMap::const_iterator n; - for (n = StandAloneMap->begin(); n != StandAloneMap->end(); n++) { - const Candidate &Stareco = *n->key, &Stamc = *n->val; - if ((muCand1 == &Stamc) && (Stamc.pt() > ptcut_) && (std::abs(Stamc.eta()) < etacut_)) { - nMuMC++; - nSta++; - deltaR_Mu_Sta = deltaR(Stareco, *muCand1); - - // cout<<"Ho trovato un sta reco "< zMuMuToken_; - EDGetTokenT MuonsToken_; - EDGetTokenT MuonsMapToken_; - EDGetTokenT TracksToken_; - EDGetTokenT TracksMapToken_; - EDGetTokenT genParticlesToken_; - EDGetTokenT StandAloneToken_; - EDGetTokenT StandAloneMapToken_; - double etacut_, ptcut_, deltaRStacut_; - int nMuMC, nMureco, nTrk, nSta, nNotMuMatching; - vector v_; -}; - -DEFINE_FWK_MODULE(MCEfficiencyAnalyzer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/MuTriggerAnalyzer.cc b/ElectroWeakAnalysis/ZMuMu/plugins/MuTriggerAnalyzer.cc deleted file mode 100644 index 05821ac5832ac..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/MuTriggerAnalyzer.cc +++ /dev/null @@ -1,219 +0,0 @@ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "FWCore/Common/interface/TriggerNames.h" -#include "DataFormats/Common/interface/TriggerResults.h" -#include "DataFormats/HLTReco/interface/TriggerObject.h" -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/Math/interface/deltaR.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "TGraphAsymmErrors.h" -#include "TH1.h" -#include -#include -#include -using namespace std; -using namespace reco; -using namespace edm; - -/* -bool IsMuMatchedToHLTMu ( const reco::Candidate * dau, std::vector HLTMu , double DR, double DPtRel ) { - unsigned int dim = HLTMu.size(); - unsigned int nPass=0; - if (dim==0) return false; - for (unsigned int k =0; k< dim; k++ ) { - if ( (deltaR(HLTMu[k], *dau) < DR) && (fabs(HLTMu[k].pt() - dau->pt())/ HLTMu[k].pt()0); -} - -bool IsMuMatchedToHLTSingleMu ( const reco::Candidate * dau, reco::Particle HLTMu , double DR, double DPtRel ) { - unsigned int nPass=0; - if ( (deltaR(HLTMu, *dau) < DR) && (fabs(HLTMu.pt() - dau->pt())/ HLTMu.pt()0); -} - -*/ - -class MuTriggerAnalyzer : public edm::EDAnalyzer { -public: - MuTriggerAnalyzer(const edm::ParameterSet& pset); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - void endJob() override; - bool IsMuMatchedToHLTMu(const reco::Muon&, std::vector&, double, double); - - edm::EDGetTokenT trigToken_; - edm::InputTag trigEvTag_; - edm::EDGetTokenT trigEvToken_; - edm::EDGetTokenT > muonToken_; - double ptMuCut_, etaMuCut_; - std::string hltPath_; - std::string L3FilterName_; - edm::Handle triggerResults_; - edm::TriggerNames const* trigNames_; - edm::Handle handleTriggerEvent_; - - double maxDPtRel_, maxDeltaR_; - const int nbins_; - const double ptMax_; - TH1D* hTrigMuonPtNumS_; - TH1D* hTrigMuonPtDenS_; - TH1D* deltaR_; - TH1D* deltaPtOverPt_; -}; - -bool MuTriggerAnalyzer::IsMuMatchedToHLTMu(const reco::Muon& mu, - std::vector& HLTMu, - double DR, - double DPtRel) { - size_t dim = HLTMu.size(); - size_t nPass = 0; - - // filling the denumerator; - double muRecoPt = mu.pt(); - hTrigMuonPtDenS_->Fill(muRecoPt); - - if (dim == 0) - return false; - for (size_t k = 0; k < dim; k++) { - if ((deltaR(HLTMu[k], mu) < DR) && (fabs(HLTMu[k].pt() - mu.pt()) / HLTMu[k].pt() < DPtRel)) { - nPass++; - std::cout << " matching a muon " << std::endl; - std::cout << "muon reco pt : " << muRecoPt << std::endl; - std::cout << "muon reco eta " << mu.eta() << std::endl; - std::cout << "muon trigger pt " << HLTMu[k].pt() << std::endl; - // filling the numerator, at the same bin as the denum..... - hTrigMuonPtNumS_->Fill(muRecoPt); - deltaR_->Fill(deltaR(HLTMu[k], mu)); - deltaPtOverPt_->Fill(fabs(HLTMu[k].pt() - mu.pt()) / HLTMu[k].pt()); - - std::cout << "muon trigger eta : " << HLTMu[k].eta() << std::endl; - std::cout << "deltaR((HLTMu[k], mu)): " << deltaR(HLTMu[k], mu) << std::endl; - std::cout << "deltaPtOverPt: " << fabs(HLTMu[k].pt() - mu.pt()) / HLTMu[k].pt() << std::endl; - } - } - - return (nPass > 0); -} - -MuTriggerAnalyzer::MuTriggerAnalyzer(const edm::ParameterSet& cfg) - : trigToken_(consumes(cfg.getParameter("TrigTag"))), - trigEvTag_(cfg.getParameter("triggerEvent")), - trigEvToken_(consumes(trigEvTag_)), - muonToken_(consumes >(cfg.getUntrackedParameter("muons"))), - ptMuCut_(cfg.getUntrackedParameter("ptMuCut")), - etaMuCut_(cfg.getUntrackedParameter("etaMuCut")), - hltPath_(cfg.getParameter("hltPath")), - L3FilterName_(cfg.getParameter("L3FilterName")), - maxDPtRel_(cfg.getParameter("maxDPtRel")), - maxDeltaR_(cfg.getParameter("maxDeltaR")), - nbins_(cfg.getParameter("ptMax_")), - ptMax_(cfg.getParameter("ptMax_")) { - Service fs; - - hTrigMuonPtNumS_ = fs->make("hTrigMuonPtNumS", "hTrigMuonPtNumS", nbins_ + 1, 0, ptMax_); - hTrigMuonPtDenS_ = fs->make("hTrigMuonPtDenS", "hTrigMuonPtDenS", nbins_ + 1, 0, ptMax_); - deltaR_ = fs->make("deltaR", "deltaR", nbins_ + 1, 0, maxDeltaR_); - deltaPtOverPt_ = fs->make("deltaPtOverPt", "deltaPtOverPt", nbins_ + 1, 0, maxDPtRel_); -} - -void MuTriggerAnalyzer::endJob() { - for (int i = 0; i < nbins_ + 1; ++i) { - std::cout << "number of reco muon in bin " << i << " = " << hTrigMuonPtDenS_->GetBinContent(i) << std::endl; - std::cout << "number of hlt muon in bin " << i << " = " << hTrigMuonPtNumS_->GetBinContent(i) << std::endl; - } -} - -void MuTriggerAnalyzer::analyze(const Event& ev, const EventSetup&) { - // bool overlap = false; - - // Trigger - Handle triggerResults; - TriggerNames trigNames; - if (!ev.getByToken(trigToken_, triggerResults)) { - LogWarning("") << ">>> TRIGGER collection does not exist !!!"; - return; - } - // trigNames.init(*triggerResults); - trigNames_ = &ev.triggerNames(*triggerResults); - //bool trigger_fired = false; - for (unsigned int i = 0; i < triggerResults->size(); i++) { - std::string trigName = trigNames_->triggerName(i); - if (trigName == hltPath_ && triggerResults->accept(i)) { - //trigger_fired = true; - } - } - edm::Handle handleTriggerEvent; - // LogTrace("") << ">>> Trigger bit: " << trigger_fired << " (" << hltPath_ << ")"; - if (!ev.getByToken(trigEvToken_, handleTriggerEvent)) { - LogWarning("errorTriggerEventValid") << "trigger::TriggerEvent product with InputTag " << trigEvTag_.encode() - << " not in event"; - return; - } - const trigger::TriggerObjectCollection& toc(handleTriggerEvent->getObjects()); - size_t nMuHLT = 0; - std::vector HLTMuMatched; - for (size_t ia = 0; ia < handleTriggerEvent->sizeFilters(); ++ia) { - std::string fullname = handleTriggerEvent->filterTag(ia).encode(); - std::string name; - size_t p = fullname.find_first_of(':'); - if (p != std::string::npos) { - name = fullname.substr(0, p); - } else { - name = fullname; - } - if (!toc.empty()) { - const trigger::Keys& k = handleTriggerEvent->filterKeys(ia); - for (trigger::Keys::const_iterator ki = k.begin(); ki != k.end(); ++ki) { - if (name == L3FilterName_) { - HLTMuMatched.push_back(toc[*ki].particle()); - nMuHLT++; - } - } - } - } - - // looping on muon.... - Handle > muons; - if (!ev.getByToken(muonToken_, muons)) { - LogError("") << ">>> muon collection does not exist !!!"; - return; - } - //saving only muons with pt> ptMuCut and eta highPtGlbMuons; - - for (unsigned int i = 0; i < muons->size(); i++) { - const reco::Muon& mu = muons->at(i); - double pt = mu.pt(); - double eta = mu.eta(); - if (pt > ptMuCut_ && fabs(eta) < etaMuCut_) { - if (mu.isGlobalMuon()) - highPtGlbMuons.push_back(mu); - } - } - unsigned int nHighPtGlbMu = highPtGlbMuons.size(); - std::cout << "I've got " << nHighPtGlbMu << " nHighPtGlbMu" << std::endl; - // unsigned int nHighPtStaMu = highPtStaMuons.size(); - // stop the loop after 10 cicles.... - if (nHighPtGlbMu > 10) - nHighPtGlbMu = 10; - - for (unsigned int i = 0; i < nHighPtGlbMu; i++) { - IsMuMatchedToHLTMu(highPtGlbMuons[i], HLTMuMatched, maxDeltaR_, maxDPtRel_); - } -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(MuTriggerAnalyzer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZGlobalVsSAIsolationAnalyzer.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZGlobalVsSAIsolationAnalyzer.cc deleted file mode 100644 index 502a21fbc340a..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZGlobalVsSAIsolationAnalyzer.cc +++ /dev/null @@ -1,138 +0,0 @@ -#include "DataFormats/Common/interface/AssociationVector.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/EDMException.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "DataFormats/Math/interface/deltaR.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" -#include "DataFormats/PatCandidates/interface/Isolation.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositVetos.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositDirection.h" -#include -#include -#include - -using namespace edm; -using namespace std; -using namespace reco; -using namespace isodeposit; - -class ZGlobalVsSAIsolationAnalyzer : public edm::EDAnalyzer { -public: - typedef math::XYZVector Vector; - ZGlobalVsSAIsolationAnalyzer(const edm::ParameterSet& cfg); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - void endJob() override; - EDGetTokenT srcToken_; - double dRVeto; - double dRTrk, dREcal, dRHcal; - double ptThreshold, etEcalThreshold, etHcalThreshold; - double alpha, beta; - double isoCut_; - unsigned long selGlobal_, selSA_, totGlobal_, totSA_; - bool isolated(const Direction& dir, - const pat::IsoDeposit* trkIsoDep, - const pat::IsoDeposit* ecalIsoDep, - const pat::IsoDeposit* hcalIsoDep); - void evaluate(const reco::Candidate* dau); -}; - -ZGlobalVsSAIsolationAnalyzer::ZGlobalVsSAIsolationAnalyzer(const ParameterSet& cfg) - : srcToken_(consumes(cfg.getParameter("src"))), - dRVeto(cfg.getParameter("veto")), - dRTrk(cfg.getParameter("deltaRTrk")), - dREcal(cfg.getParameter("deltaREcal")), - dRHcal(cfg.getParameter("deltaRHcal")), - ptThreshold(cfg.getParameter("ptThreshold")), - etEcalThreshold(cfg.getParameter("etEcalThreshold")), - etHcalThreshold(cfg.getParameter("etHcalThreshold")), - alpha(cfg.getParameter("alpha")), - beta(cfg.getParameter("beta")), - isoCut_(cfg.getParameter("isoCut")), - selGlobal_(0), - selSA_(0), - totGlobal_(0), - totSA_(0) {} - -bool ZGlobalVsSAIsolationAnalyzer::isolated(const Direction& dir, - const pat::IsoDeposit* trkIsoDep, - const pat::IsoDeposit* ecalIsoDep, - const pat::IsoDeposit* hcalIsoDep) { - IsoDeposit::AbsVetos vetoTrk, vetoEcal, vetoHcal; - vetoTrk.push_back(new ConeVeto(dir, dRVeto)); - vetoTrk.push_back(new ThresholdVeto(ptThreshold)); - vetoEcal.push_back(new ConeVeto(dir, 0.)); - vetoEcal.push_back(new ThresholdVeto(etEcalThreshold)); - vetoHcal.push_back(new ConeVeto(dir, 0.)); - vetoHcal.push_back(new ThresholdVeto(etHcalThreshold)); - - double trkIso = trkIsoDep->sumWithin(dir, dRTrk, vetoTrk); - double ecalIso = ecalIsoDep->sumWithin(dir, dREcal, vetoEcal); - double hcalIso = hcalIsoDep->sumWithin(dir, dRHcal, vetoHcal); - double iso = alpha * ((0.5 * (1 + beta) * ecalIso) + (0.5 * (1 - beta) * hcalIso)) + (1 - alpha) * trkIso; - return iso < isoCut_; -} - -void ZGlobalVsSAIsolationAnalyzer::evaluate(const reco::Candidate* dau) { - const pat::Muon* mu = dynamic_cast(&*dau->masterClone()); - if (mu == nullptr) - throw Exception(errors::InvalidReference) << "Daughter is not a muon!\n"; - const pat::IsoDeposit* trkIsoDep = mu->isoDeposit(pat::TrackIso); - const pat::IsoDeposit* ecalIsoDep = mu->isoDeposit(pat::EcalIso); - const pat::IsoDeposit* hcalIsoDep = mu->isoDeposit(pat::HcalIso); - // global muon - { - Direction dir = Direction(mu->eta(), mu->phi()); - if (isolated(dir, trkIsoDep, ecalIsoDep, hcalIsoDep)) - selGlobal_++; - totGlobal_++; - } - // stand-alone - { - TrackRef sa = dau->get(); - Direction dir = Direction(sa->eta(), sa->phi()); - if (isolated(dir, trkIsoDep, ecalIsoDep, hcalIsoDep)) - selSA_++; - totSA_++; - } -} - -void ZGlobalVsSAIsolationAnalyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) { - Handle dimuons; - event.getByToken(srcToken_, dimuons); - for (unsigned int i = 0; i < dimuons->size(); ++i) { - const Candidate& zmm = (*dimuons)[i]; - evaluate(zmm.daughter(0)); - evaluate(zmm.daughter(1)); - } -} - -void ZGlobalVsSAIsolationAnalyzer::endJob() { - cout << "Isolation efficiency report:" << endl; - double eff, err; - eff = double(selGlobal_) / double(totGlobal_); - err = sqrt(eff * (1. - eff) / double(totGlobal_)); - cout << "Global: " << selGlobal_ << "/" << totGlobal_ << " = " << eff << "+/-" << err << endl; - eff = double(selSA_) / double(totSA_); - err = sqrt(eff * (1. - eff) / double(totSA_)); - cout << "St.Al.: " << selSA_ << "/" << totSA_ << " = " << eff << "+/-" << err << endl; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZGlobalVsSAIsolationAnalyzer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZGoldenFilter.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZGoldenFilter.cc deleted file mode 100644 index 818789f258c17..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZGoldenFilter.cc +++ /dev/null @@ -1,196 +0,0 @@ -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "CommonTools/UtilAlgos/interface/SingleObjectSelector.h" -#include "DataFormats/Common/interface/View.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "FWCore/Common/interface/TriggerNames.h" -#include "DataFormats/Common/interface/TriggerResults.h" -#include "DataFormats/HLTReco/interface/TriggerObject.h" -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/Math/interface/deltaR.h" - -#include -using namespace std; -using namespace reco; -namespace edm { - class EventSetup; -} - -bool IsMuMatchedToHLTMu(const reco::Candidate* dau, std::vector HLTMu, double DR, double DPtRel) { - unsigned int dim = HLTMu.size(); - unsigned int nPass = 0; - if (dim == 0) - return false; - for (unsigned int k = 0; k < dim; k++) { - if ((deltaR(HLTMu[k], *dau) < DR) && (fabs(HLTMu[k].pt() - dau->pt()) / HLTMu[k].pt() < DPtRel)) { - nPass++; - } - } - return (nPass > 0); -} - -bool IsMuMatchedToHLTSingleMu(const reco::Candidate* dau, reco::Particle HLTMu, double DR, double DPtRel) { - unsigned int nPass = 0; - if ((deltaR(HLTMu, *dau) < DR) && (fabs(HLTMu.pt() - dau->pt()) / HLTMu.pt() < DPtRel)) { - nPass++; - } - return (nPass > 0); -} - -class ZGoldenFilter { -public: - ZGoldenFilter(const edm::ParameterSet&, edm::ConsumesCollector& iC); - bool operator()(const reco::Candidate&) const; - void newEvent(const edm::Event&, const edm::EventSetup&); - edm::EDGetTokenT trigToken_; - edm::InputTag trigEv_; - edm::EDGetTokenT trigEvToken_; - std::string cond_; - std::string hltPath_; - std::string L3FilterName_; - edm::Handle triggerResults_; - edm::TriggerNames const* trigNames_; - edm::Handle handleTriggerEvent_; - double maxDPtRel_, maxDeltaR_; -}; - -ZGoldenFilter::ZGoldenFilter(const edm::ParameterSet& cfg, edm::ConsumesCollector& iC) - : trigToken_(iC.consumes(cfg.getParameter("TrigTag"))), - trigEv_(cfg.getParameter("triggerEvent")), - trigEvToken_(iC.consumes(trigEv_)), - cond_(cfg.getParameter("condition")), - hltPath_(cfg.getParameter("hltPath")), - L3FilterName_(cfg.getParameter("L3FilterName")), - maxDPtRel_(cfg.getParameter("maxDPtRel")), - maxDeltaR_(cfg.getParameter("maxDeltaR")) {} - -void ZGoldenFilter::newEvent(const edm::Event& ev, const edm::EventSetup&) { - if (!ev.getByToken(trigToken_, triggerResults_)) { - edm::LogWarning("") << ">>> TRIGGER collection does not exist !!!"; - return; - } - ev.getByToken(trigToken_, triggerResults_); - trigNames_ = &ev.triggerNames(*triggerResults_); - if (!ev.getByToken(trigEvToken_, handleTriggerEvent_)) { - edm::LogError("errorTriggerEventValid") - << "trigger::TriggerEvent product with InputTag " << trigEv_.encode() << " not in event"; - return; - } - ev.getByToken(trigEvToken_, handleTriggerEvent_); -} - -bool ZGoldenFilter::operator()(const reco::Candidate& z) const { - // int i = newEvent( edm::Event& const , edm::EventSetup& const ); - assert(z.numberOfDaughters() == 2); - bool singleTrigFlag0 = false; - bool singleTrigFlag1 = false; - bool exactlyOneTriggerFlag = false; - bool bothTriggerFlag = false; - bool atLeastOneTriggerFlag = false; - bool FirstTriggerFlag = false; - bool globalisTriggerFlag = false; - if ((((cond_ != "exactlyOneMatched" && cond_ != "atLeastOneMatched") && cond_ != "bothMatched") && - cond_ != "firstMatched") && - cond_ != "globalisMatched") - throw edm::Exception(edm::errors::Configuration) - << "Invalid condition type: " << cond_ << ". Valid types are:" - << " exactlyOneMatched, atLeastOneMatched, bothMatched, firstMatched,globalisMatched\n"; - const reco::Candidate* dau0 = z.daughter(0); - const reco::Candidate* dau1 = z.daughter(1); - const trigger::TriggerObjectCollection& toc(handleTriggerEvent_->getObjects()); - unsigned int nMuHLT = 0; - std::vector HLTMuMatched; - for (unsigned int ia = 0; ia < handleTriggerEvent_->sizeFilters(); ++ia) { - std::string fullname = handleTriggerEvent_->filterTag(ia).encode(); - std::string name; - size_t p = fullname.find_first_of(':'); - if (p != std::string::npos) { - name = fullname.substr(0, p); - } else { - name = fullname; - } - if (!toc.empty()) { - const trigger::Keys& k = handleTriggerEvent_->filterKeys(ia); - for (trigger::Keys::const_iterator ki = k.begin(); ki != k.end(); ++ki) { - if (name == L3FilterName_) { - HLTMuMatched.push_back(toc[*ki].particle()); - nMuHLT++; - } - } - } - } - /*trigger_fired is unused in all later code - bool trigger_fired = false; - for (unsigned int i=0; isize(); i++) { - std::string trigName = trigNames_->triggerName(i); - if ( trigName == hltPath_ && triggerResults_->accept(i)) trigger_fired = true; - }*/ - bool firstdismuon = (dau0->isGlobalMuon() ? true : false); - bool firstdisStandAlone = (dau0->isStandAloneMuon() ? true : false); - std::vector IsDau0Matched_; - std::vector IsDau1Matched_; - if (dau0 != nullptr) { - // checking if dau0 is matched to any HLT muon.... - singleTrigFlag0 = IsMuMatchedToHLTMu(dau0, HLTMuMatched, maxDeltaR_, maxDPtRel_); - - for (unsigned int y = 0; y < HLTMuMatched.size(); y++) { - IsDau0Matched_.push_back(IsMuMatchedToHLTSingleMu(dau0, HLTMuMatched[y], maxDeltaR_, maxDPtRel_)); - } - } - bool secondismuon = (dau1->isGlobalMuon() ? true : false); - bool secondisStandAlone = (dau1->isStandAloneMuon() ? true : false); - if (dau1 != nullptr && (secondismuon || secondisStandAlone)) { - singleTrigFlag1 = IsMuMatchedToHLTMu(dau1, HLTMuMatched, maxDeltaR_, maxDPtRel_); - for (unsigned int y = 0; y < HLTMuMatched.size(); y++) { - IsDau1Matched_.push_back(IsMuMatchedToHLTSingleMu(dau1, HLTMuMatched[y], maxDeltaR_, maxDPtRel_)); - } - } - if ((IsDau0Matched_.size() * IsDau1Matched_.size()) != 0) { - for (unsigned int y = 0; y < IsDau1Matched_.size(); y++) { - if (IsDau0Matched_[y] == true && IsDau1Matched_[y] == true) { - std::cout << "WARNING--> I'm matching the two muons to the same HLT muon....." << std::endl; - } - } - } - if (!singleTrigFlag0 && !singleTrigFlag1) - return false; - if ((singleTrigFlag0 && singleTrigFlag1) && secondismuon) - bothTriggerFlag = true; - if (((singleTrigFlag0 && !singleTrigFlag1) && secondismuon) || - ((!singleTrigFlag0 && singleTrigFlag1) && secondismuon)) - exactlyOneTriggerFlag = true; - if ((((singleTrigFlag0 && firstdismuon) && secondisStandAlone) && !secondismuon) || - (((singleTrigFlag1 && secondismuon) && firstdisStandAlone) && !firstdismuon)) - globalisTriggerFlag = true; - if ((singleTrigFlag0 && !singleTrigFlag1) && !secondismuon) - FirstTriggerFlag = true; - if ((singleTrigFlag0 || singleTrigFlag1) && secondismuon) - atLeastOneTriggerFlag = true; - if (cond_ == "exactlyOneMatched") - return exactlyOneTriggerFlag; - if (cond_ == "atLeastOneMatched") - return atLeastOneTriggerFlag; - if (cond_ == "bothMatched") - return bothTriggerFlag; - if (cond_ == "firstMatched") - return FirstTriggerFlag; - if (cond_ == "globalisMatched") - return globalisTriggerFlag; - return false; -} - -#include "CommonTools/UtilAlgos/interface/SingleObjectSelector.h" -#include "CommonTools/UtilAlgos/interface/AndSelector.h" -#include "CommonTools/UtilAlgos/interface/StringCutObjectSelector.h" -#include "CommonTools/UtilAlgos/interface/EventSetupInitTrait.h" - -EVENTSETUP_STD_INIT(ZGoldenFilter); - -typedef SingleObjectSelector, - AndSelector > > - ZGoldenSelectorAndFilter; - -DEFINE_FWK_MODULE(ZGoldenSelectorAndFilter); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZHLTMatchFilter.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZHLTMatchFilter.cc deleted file mode 100644 index 50cdb87af8d0a..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZHLTMatchFilter.cc +++ /dev/null @@ -1,103 +0,0 @@ -/* \class ZHLTFilter - * - * \author Pasquale Noli, Universita' di Napoli & INFN Napoli - * - */ -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "CommonTools/UtilAlgos/interface/SingleObjectSelector.h" -#include "DataFormats/Common/interface/View.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/PatCandidates/interface/PATObject.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/TriggerObjectStandAlone.h" -#include -using namespace std; -namespace modules { - struct ZHLTMatchFilter { - ZHLTMatchFilter(const edm::ParameterSet& cfg, edm::ConsumesCollector& iC) - : cond_(cfg.getParameter("condition")), hltPath_(cfg.getParameter("hltPath")) {} - bool operator()(const reco::Candidate& z) const { - assert(z.numberOfDaughters() == 2); - bool singleTrigFlag0 = false; - bool singleTrigFlag1 = false; - bool exactlyOneTriggerFlag = false; - bool bothTriggerFlag = false; - bool atLeastOneTriggerFlag = false; - bool FirstTriggerFlag = false; - bool globalisTriggerFlag = false; - if ((((cond_ != "exactlyOneMatched" && cond_ != "atLeastOneMatched") && cond_ != "bothMatched") && - cond_ != "firstMatched") && - cond_ != "globalisMatched") - throw edm::Exception(edm::errors::Configuration) - << "Invalid condition type: " << cond_ << ". Valid types are:" - << " exactlyOneMatched, atLeastOneMatched, bothMatched, firstMatched,globalisMatched\n"; - const reco::Candidate* dau0 = z.daughter(0); - const reco::Candidate* m0 = &*dau0->masterClone(); - const pat::Muon* mu0 = dynamic_cast(m0); //cast in patMuon - bool firstismuon = (dau0->isGlobalMuon() ? true : false); - bool firstisStandAlone = (dau0->isStandAloneMuon() ? true : false); - bool firstisTrackerMuon = (dau0->isTrackerMuon() ? true : false); - if (mu0 != nullptr && (firstismuon || firstisStandAlone || firstisTrackerMuon)) { - // get the vector of trigger objects matched to the muon corresponding to hltPath_ - const pat::TriggerObjectStandAloneCollection mu0HLTMatches = mu0->triggerObjectMatchesByPath(hltPath_); - - int dimTrig0 = mu0HLTMatches.size(); - if (dimTrig0 != 0) { - singleTrigFlag0 = true; - } - } - const reco::Candidate* dau1 = z.daughter(1); - const reco::Candidate* m1 = &*dau1->masterClone(); - bool secondismuon = (dau1->isGlobalMuon() ? true : false); - bool secondisStandAlone = (dau1->isStandAloneMuon() ? true : false); - bool secondisTrackerMuon = (dau1->isTrackerMuon() ? true : false); - const pat::Muon* mu1 = dynamic_cast(m1); - if (mu1 != nullptr && (secondismuon || secondisStandAlone || secondisTrackerMuon)) { - // get the vector of trigger objects matched to the muon corresponding to hltPath_ - const pat::TriggerObjectStandAloneCollection mu1HLTMatches = mu1->triggerObjectMatchesByPath(hltPath_); - - int dimTrig1 = mu1HLTMatches.size(); - if (dimTrig1 != 0) { - singleTrigFlag1 = true; - } - } - if (!singleTrigFlag0 && !singleTrigFlag1) - return false; - if ((singleTrigFlag0 && singleTrigFlag1) && firstismuon && secondismuon) - bothTriggerFlag = true; - if (((singleTrigFlag0 && !singleTrigFlag1) && firstismuon && secondismuon) || - ((!singleTrigFlag0 && singleTrigFlag1) && firstismuon && secondismuon)) - exactlyOneTriggerFlag = true; - if ((((singleTrigFlag0 && firstismuon) && (secondisStandAlone || secondisTrackerMuon)) && !secondismuon) || - (((singleTrigFlag1 && secondismuon) && (firstisStandAlone || firstisTrackerMuon)) && !firstismuon)) - globalisTriggerFlag = true; - - if ((singleTrigFlag0 && !singleTrigFlag1) && !secondismuon) - FirstTriggerFlag = true; - if ((singleTrigFlag0 || singleTrigFlag1) && firstismuon && secondismuon) - atLeastOneTriggerFlag = true; - if (cond_ == "exactlyOneMatched") - return exactlyOneTriggerFlag; - if (cond_ == "atLeastOneMatched") - return atLeastOneTriggerFlag; - if (cond_ == "bothMatched") - return bothTriggerFlag; - if (cond_ == "firstMatched") - return FirstTriggerFlag; - if (cond_ == "globalisMatched") - return globalisTriggerFlag; - - return false; - } - - private: - std::string cond_; - std::string hltPath_; - }; -} // namespace modules - -typedef SingleObjectSelector, modules::ZHLTMatchFilter> ZHLTMatchFilter; - -DEFINE_FWK_MODULE(ZHLTMatchFilter); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZHistogrammer.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZHistogrammer.cc deleted file mode 100644 index 6b3f9c15639c3..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZHistogrammer.cc +++ /dev/null @@ -1,216 +0,0 @@ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "TH1.h" - -class ZHistogrammer : public edm::EDAnalyzer { -public: - ZHistogrammer(const edm::ParameterSet &pset); - -private: - void analyze(const edm::Event &event, const edm::EventSetup &setup) override; - edm::EDGetTokenT zToken_; - edm::EDGetTokenT genToken_; - edm::EDGetTokenT matchToken_; - unsigned int nbinsMass_, nbinsPt_, nbinsAng_, nbinsMassRes_; - double massMax_, ptMax_, angMax_, massResMax_; - TH1F *h_nZ_, *h_mZ_, *h_ptZ_, *h_phiZ_, *h_thetaZ_, *h_etaZ_, *h_rapidityZ_; - TH1F *h_invmMuMu_; - TH1F *h_nZMC_, *h_mZMC_, *h_ptZMC_, *h_phiZMC_, *h_thetaZMC_, *h_etaZMC_, *h_rapidityZMC_; - TH1F *h_invmMuMuMC_; - //TH1F *h_mZ2vs3MC_, *h_ptZ2vs3MC_, *h_phiZ2vs3MC_, *h_thetaZ2vs3MC_, *h_etaZ2vs3MC_, *h_rapidityZ2vs3MC_; - TH1F *h_mResZ_, *h_ptResZ_, *h_phiResZ_, *h_thetaResZ_, *h_etaResZ_, *h_rapidityResZ_; - TH1F *h_mResZMuMu_, *h_mRatioZMuMu_; - TH1F *h_mResZMuMuMC_, *h_mRatioZMuMuMC_; -}; - -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include -#include - -using namespace std; -using namespace reco; -using namespace edm; - -ZHistogrammer::ZHistogrammer(const ParameterSet &pset) - : zToken_(consumes(pset.getParameter("z"))), - genToken_(consumes(pset.getParameter("gen"))), - matchToken_(consumes(pset.getParameter("match"))), - nbinsMass_(pset.getUntrackedParameter("nbinsMass")), - nbinsPt_(pset.getUntrackedParameter("nbinsPt")), - nbinsAng_(pset.getUntrackedParameter("nbinsAng")), - nbinsMassRes_(pset.getUntrackedParameter("nbinsMassRes")), - massMax_(pset.getUntrackedParameter("massMax")), - ptMax_(pset.getUntrackedParameter("ptMax")), - angMax_(pset.getUntrackedParameter("angMax")), - massResMax_(pset.getUntrackedParameter("massResMax")) { - cout << ">>> Z Histogrammer constructor" << endl; - Service fs; - TFileDirectory ZHisto = fs->mkdir("ZRecoHisto"); - TFileDirectory ZMCHisto = fs->mkdir("ZMCHisto"); - TFileDirectory ZResHisto = fs->mkdir("ZResolutionHisto"); - //TFileDirectory Z2vs3MCHisto = fs->mkdir( "Z2vs3MCHisto" ); - h_nZ_ = ZHisto.make("ZNumber", "number of Z particles", 11, -0.5, 10.5); - h_mZ_ = ZHisto.make("ZMass", "Z mass (GeV/c^{2})", nbinsMass_, 0, massMax_); - h_ptZ_ = ZHisto.make("ZPt", "Z p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - h_phiZ_ = ZHisto.make("ZPhi", "Z #phi", nbinsAng_, -angMax_, angMax_); - h_thetaZ_ = ZHisto.make("Ztheta", "Z #theta", nbinsAng_, 0, angMax_); - h_etaZ_ = ZHisto.make("ZEta", "Z #eta", nbinsAng_, -angMax_, angMax_); - h_rapidityZ_ = ZHisto.make("ZRapidity", "Z rapidity", nbinsAng_, -angMax_, angMax_); - h_invmMuMu_ = ZHisto.make("MuMuMass", "#mu #mu invariant mass", nbinsMass_, 0, massMax_); - h_nZMC_ = ZMCHisto.make("ZMCNumber", "number of Z MC particles", 11, -0.5, 10.5); - h_mZMC_ = ZMCHisto.make("ZMCMass", "Z MC mass (GeV/c^{2})", nbinsMass_, 0, massMax_); - h_ptZMC_ = ZMCHisto.make("ZMCPt", "Z MC p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - h_phiZMC_ = ZMCHisto.make("ZMCPhi", "Z MC #phi", nbinsAng_, -angMax_, angMax_); - h_thetaZMC_ = ZMCHisto.make("ZMCTheta", "Z MC #theta", nbinsAng_, 0, angMax_); - h_etaZMC_ = ZMCHisto.make("ZMCEta", "Z MC #eta", nbinsAng_, -angMax_, angMax_); - h_rapidityZMC_ = ZMCHisto.make("ZMCRapidity", "Z MC rapidity", nbinsAng_, -angMax_, angMax_); - h_invmMuMuMC_ = ZMCHisto.make("MuMuMCMass", "#mu #mu MC invariant mass", nbinsMass_, 0, massMax_); - /* - h_mZ2vs3MC_ = Z2vs3MCHisto.make("Z2vs3MCMass", "Z MC st 2 vs st 3 mass (GeV/c^{2})", - nbinsMassRes_, -massResMax_, massResMax_); - h_ptZ2vs3MC_ = Z2vs3MCHisto.make("Z2vs3MCPt", "Z MC st 2 vs st 3 p_{t} (GeV/c)", - nbinsPt_, -ptMax_, ptMax_); - h_phiZ2vs3MC_ = Z2vs3MCHisto.make("Z2vs3MCPhi", "Z MC st 2 vs st 3 #phi", - nbinsAng_, -angMax_, angMax_); - h_thetaZ2vs3MC_ = Z2vs3MCHisto.make("Z2vs3MCTheta", "Z MC st 2 vs st 3 #theta", - nbinsAng_, -angMax_, angMax_); - h_etaZ2vs3MC_ = Z2vs3MCHisto.make("Z2vs3MCEta", "Z MC st 2 vs st 3 #eta", - nbinsAng_, -angMax_, angMax_); - h_rapidityZ2vs3MC_ = Z2vs3MCHisto.make("Z2vs3MCRapidity", "Z MC st 2 vs st 3 rapidity", - nbinsAng_, -angMax_, angMax_); - */ - h_mResZ_ = ZResHisto.make( - "ZMassResolution", "Z mass Resolution (GeV/c^{2})", nbinsMassRes_, -massResMax_, massResMax_); - h_ptResZ_ = ZResHisto.make("ZPtResolution", "Z p_{t} Resolution (GeV/c)", nbinsPt_, -ptMax_, ptMax_); - h_phiResZ_ = ZResHisto.make("ZPhiResolution", "Z #phi Resolution", nbinsAng_, -angMax_, angMax_); - h_thetaResZ_ = ZResHisto.make("ZThetaResolution", "Z #theta Resolution", nbinsAng_, -angMax_, angMax_); - h_etaResZ_ = ZResHisto.make("ZEtaResolution", "Z #eta Resolution", nbinsAng_, -angMax_, angMax_); - h_rapidityResZ_ = ZResHisto.make("ZRapidityResolution", "Z rapidity Resolution", nbinsAng_, -angMax_, angMax_); - h_mResZMuMu_ = ZResHisto.make("ZToMuMuRecoMassResolution", - "Z Reco vs matched final state #mu #mu mass Difference (GeV/c^{2})", - nbinsMassRes_, - -massResMax_, - massResMax_); - h_mRatioZMuMu_ = - ZResHisto.make("ZToMuMuRecoMassRatio", "Z Reco vs matched final state #mu #mu mass Ratio", 4000, 0, 2); - h_mResZMuMuMC_ = ZResHisto.make("ZToMuMuMCMassResolution", - "Z vs final state #mu #mu MC mass Difference (GeV/c^{2})", - nbinsMassRes_ / 2 + 1, - -2 * massResMax_ / nbinsMassRes_, - massResMax_); - h_mRatioZMuMuMC_ = - ZResHisto.make("ZToMuMuMCMassRatio", "Z vs final state #mu #mu MC mass Ratio", 2002, 0.999, 2); -} - -void ZHistogrammer::analyze(const edm::Event &event, const edm::EventSetup &setup) { - cout << ">>> Z Histogrammer analyze" << endl; - Handle z; - Handle gen; - Handle match; - event.getByToken(zToken_, z); - event.getByToken(genToken_, gen); - event.getByToken(matchToken_, match); - h_nZ_->Fill(z->size()); - for (unsigned int i = 0; i < z->size(); ++i) { - const Candidate &zCand = (*z)[i]; - h_mZ_->Fill(zCand.mass()); - h_ptZ_->Fill(zCand.pt()); - h_phiZ_->Fill(zCand.phi()); - h_thetaZ_->Fill(zCand.theta()); - h_etaZ_->Fill(zCand.eta()); - h_rapidityZ_->Fill(zCand.rapidity()); - CandidateRef zCandRef(z, i); - CandidateRef zMCMatch = (*match)[zCandRef]; - if (zMCMatch.isNonnull() && zMCMatch->pdgId() == 23) { - h_mResZ_->Fill(zCandRef->mass() - zMCMatch->mass()); - h_ptResZ_->Fill(zCandRef->pt() - zMCMatch->pt()); - h_phiResZ_->Fill(zCandRef->phi() - zMCMatch->phi()); - h_thetaResZ_->Fill(zCandRef->theta() - zMCMatch->theta()); - h_etaResZ_->Fill(zCandRef->eta() - zMCMatch->eta()); - h_rapidityResZ_->Fill(zCandRef->rapidity() - zMCMatch->rapidity()); - const Candidate *dau0 = zMCMatch->daughter(0); - const Candidate *dau1 = zMCMatch->daughter(1); - for (unsigned int i0 = 0; i0 < dau0->numberOfDaughters(); ++i0) { - const Candidate *ddau0 = dau0->daughter(i0); - if (abs(ddau0->pdgId()) == 13 && ddau0->status() == 1) { - dau0 = ddau0; - break; - } - } - for (unsigned int i1 = 0; i1 < dau1->numberOfDaughters(); ++i1) { - const Candidate *ddau1 = dau1->daughter(i1); - if (abs(ddau1->pdgId()) == 13 && ddau1->status() == 1) { - dau1 = ddau1; - break; - } - } - assert(abs(dau0->pdgId()) == 13 && dau0->status() == 1); - assert(abs(dau1->pdgId()) == 13 && dau1->status() == 1); - double invMass = (dau0->p4() + dau1->p4()).mass(); - h_invmMuMu_->Fill(invMass); - h_mResZMuMu_->Fill(zCand.mass() - invMass); - h_mRatioZMuMu_->Fill(zCand.mass() / invMass); - } - } - h_nZMC_->Fill(gen->size()); - for (unsigned int i = 0; i < gen->size(); ++i) { - const Candidate &genCand = (*gen)[i]; - if ((genCand.pdgId() == 23) && (genCand.status() == 2)) //this is an intermediate Z0 - cout << ">>> intermediate Z0 found, with " << genCand.numberOfDaughters() << " daughters" << endl; - if ((genCand.pdgId() == 23) && (genCand.status() == 3)) { //this is a Z0 - cout << ">>> Z0 found, with " << genCand.numberOfDaughters() << " daughters" << endl; - h_mZMC_->Fill(genCand.mass()); - h_ptZMC_->Fill(genCand.pt()); - h_phiZMC_->Fill(genCand.phi()); - h_thetaZMC_->Fill(genCand.theta()); - h_etaZMC_->Fill(genCand.eta()); - h_rapidityZMC_->Fill(genCand.rapidity()); - Particle::LorentzVector pZ(0, 0, 0, 0); - int nMu = 0; - for (unsigned int j = 0; j < genCand.numberOfDaughters(); ++j) { - const Candidate *dauGen = genCand.daughter(j); - /* - if((dauGen->pdgId() == 23) && (dauGen->status() == 2)) { - h_mZ2vs3MC_->Fill(genCand.mass() - dauGen->mass()); - h_ptZ2vs3MC_->Fill(genCand.pt() - dauGen->pt()); - h_phiZ2vs3MC_->Fill(genCand.phi() - dauGen->phi()); - h_thetaZ2vs3MC_->Fill(genCand.theta() - dauGen->theta()); - h_etaZ2vs3MC_->Fill(genCand.eta() - dauGen->eta()); - h_rapidityZ2vs3MC_->Fill(genCand.rapidity() - dauGen->rapidity()); - } - */ - if ((abs(dauGen->pdgId()) == 13) && (dauGen->numberOfDaughters() != 0)) { - //we are looking for photons of final state radiation - cout << ">>> The muon " << j << " has " << dauGen->numberOfDaughters() << " daughters" << endl; - for (unsigned int k = 0; k < dauGen->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen->daughter(k); - cout << ">>> Mu " << j << " daughter MC " << k << " PDG Id " << dauMuGen->pdgId() << ", status " - << dauMuGen->status() << ", charge " << dauMuGen->charge() << endl; - if (abs(dauMuGen->pdgId()) == 13 && dauMuGen->status() == 1) { - pZ += dauMuGen->p4(); - nMu++; - } - } - } - } - assert(nMu == 2); - double mZ = pZ.mass(); - h_invmMuMuMC_->Fill(mZ); - h_mResZMuMuMC_->Fill(genCand.mass() - mZ); - h_mRatioZMuMuMC_->Fill(genCand.mass() / mZ); - } - } -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZHistogrammer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZLONLOHistogrammer.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZLONLOHistogrammer.cc deleted file mode 100644 index 4ba3347ac9133..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZLONLOHistogrammer.cc +++ /dev/null @@ -1,220 +0,0 @@ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" -#include "TH1.h" - -class ZLONLOHistogrammer : public edm::EDAnalyzer { -public: - ZLONLOHistogrammer(const edm::ParameterSet& pset); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - void endJob() override; - edm::EDGetTokenT genToken_; - edm::EDGetTokenT weightsToken_; - unsigned int nbinsMass_, nbinsPt_, nbinsAng_; - double massMax_, ptMax_, angMax_; - double accPtMin_, accMassMin_, accMassMax_, accEtaMin_, accEtaMax_; - TH1F *h_nZ_, *h_mZ_, *h_ptZ_, *h_phiZ_, *h_thetaZ_, *h_etaZ_, *h_rapidityZ_; - TH1F *h_mZMC_, *h_ptZMC_, *h_phiZMC_, *h_thetaZMC_, *h_etaZMC_, *h_rapidityZMC_; - TH1F *hardpt, *softpt, *hardeta, *softeta; - TH1F* h_weight_histo; - bool isMCatNLO_; - unsigned int nAcc_, nBothMuHasZHasGrandMa_; -}; - -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" - -#include "HepMC/WeightContainer.h" -#include "HepMC/GenEvent.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include -#include - -using namespace std; -using namespace reco; -using namespace edm; - -ZLONLOHistogrammer::ZLONLOHistogrammer(const ParameterSet& pset) - : genToken_(consumes(pset.getParameter("genParticles"))), - weightsToken_(consumes(pset.getParameter("weights"))), - nbinsMass_(pset.getUntrackedParameter("nbinsMass")), - nbinsPt_(pset.getUntrackedParameter("nbinsPt")), - nbinsAng_(pset.getUntrackedParameter("nbinsAng")), - massMax_(pset.getUntrackedParameter("massMax")), - ptMax_(pset.getUntrackedParameter("ptMax")), - angMax_(pset.getUntrackedParameter("angMax")), - accPtMin_(pset.getUntrackedParameter("accPtMin")), - accMassMin_(pset.getUntrackedParameter("accMassMin")), - accMassMax_(pset.getUntrackedParameter("accMassMax")), - accEtaMin_(pset.getUntrackedParameter("accEtaMin")), - accEtaMax_(pset.getUntrackedParameter("accEtaMax")), - isMCatNLO_(pset.getUntrackedParameter("isMCatNLO")) { - cout << ">>> Z Histogrammer constructor" << endl; - Service fs; - TFileDirectory ZHisto = fs->mkdir("ZRecHisto"); - TFileDirectory ZMCHisto = fs->mkdir("ZMCHisto"); - h_nZ_ = ZHisto.make("ZNumber", "number of Z particles", 11, -0.5, 10.5); - h_mZ_ = ZHisto.make("ZMass", "Z mass (GeV/c^{2})", nbinsMass_, 0, massMax_); - h_ptZ_ = ZHisto.make("ZPt", "Z p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - h_phiZ_ = ZHisto.make("ZPhi", "Z #phi", nbinsAng_, -angMax_, angMax_); - h_thetaZ_ = ZHisto.make("Ztheta", "Z #theta", nbinsAng_, 0, angMax_); - h_etaZ_ = ZHisto.make("ZEta", "Z #eta", nbinsAng_, -angMax_, angMax_); - h_rapidityZ_ = ZHisto.make("ZRapidity", "Z rapidity", nbinsAng_, -angMax_, angMax_); - h_weight_histo = ZMCHisto.make("weight_histo", "weight_histo", 20, -10, 10); - - h_mZMC_ = ZMCHisto.make("ZMCMass", "Z MC mass (GeV/c^{2})", nbinsMass_, 0, massMax_); - h_ptZMC_ = ZMCHisto.make("ZMCPt", "Z MC p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - hardpt = ZMCHisto.make("hardpt", "hard muon p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - softpt = ZMCHisto.make("softpt", "soft muon p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - - h_phiZMC_ = ZMCHisto.make("ZMCPhi", "Z MC #phi", nbinsAng_, -angMax_, angMax_); - h_thetaZMC_ = ZMCHisto.make("ZMCTheta", "Z MC #theta", nbinsAng_, 0, angMax_); - h_etaZMC_ = ZMCHisto.make("ZMCEta", "Z MC #eta", nbinsAng_, -angMax_, angMax_); - h_rapidityZMC_ = ZMCHisto.make("ZMCRapidity", "Z MC y", nbinsAng_, -angMax_, angMax_); - - hardeta = ZMCHisto.make("hard muon eta", "hard muon #eta", nbinsAng_, -angMax_, angMax_); - softeta = ZMCHisto.make("soft muon eta", "soft muon #eta", nbinsAng_, -angMax_, angMax_); - nAcc_ = 0; - nBothMuHasZHasGrandMa_ = 0; -} - -void ZLONLOHistogrammer::analyze(const edm::Event& event, const edm::EventSetup& setup) { - cout << ">>> Z Histogrammer analyze" << endl; - - Handle gen; - Handle weights; - - event.getByToken(genToken_, gen); - event.getByToken(weightsToken_, weights); - - // get weight and fill it to histogram - - double weight = *weights; - if (!weight) - weight = 1.; - h_weight_histo->Fill(weight); - - if (isMCatNLO_) { - weight > 0 ? weight = 1. : weight = -1.; - } - - std::vector muons; - if (!isMCatNLO_) { - // LO.... - for (unsigned int i = 0; i < gen->size(); ++i) { - const GenParticle& muMC = (*gen)[i]; - // filling only muons coming form Z - if (abs(muMC.pdgId()) == 13 && muMC.status() == 1 && muMC.numberOfMothers() > 0) { - if (muMC.mother()->numberOfMothers() > 0) { - cout << "I'm getting a muon \n" - << "with " - << "muMC.numberOfMothers() " << muMC.numberOfMothers() << "\n the first mother has pdgId " - << muMC.mother()->pdgId() << "with " - << "muMC.mother()->numberOfMothers() " << muMC.mother()->numberOfMothers() - << "\n the first grandma has pdgId " << muMC.mother()->mother()->pdgId() << endl; - if (muMC.mother()->mother()->pdgId() == 23) - muons.push_back(muMC); - } - } - } - } else { - // NLO - for (unsigned int i = 0; i < gen->size(); ++i) { - const GenParticle& muMC = (*gen)[i]; - if (abs(muMC.pdgId()) == 13 && muMC.status() == 1 && muMC.numberOfMothers() > 0) { - if (muMC.mother()->numberOfMothers() > 0) { - cout << "I'm getting a muon \n" - << "with " - << "muMC.numberOfMothers() " << muMC.numberOfMothers() << "\n the first mother has pdgId " - << muMC.mother()->pdgId() << "with " - << "muMC.mother()->numberOfMothers() " << muMC.mother()->numberOfMothers() - << "\n the first grandma has pdgId " << muMC.mother()->mother()->pdgId() << endl; - // filling withoput requiring that the grandma is a Z...... sometimes the grandma are still muons, otherwise those are fake muons, but the first two are always the desired muons.... - muons.push_back(muMC); - } - } - } - } - - cout << "finally I selected " << muons.size() << " muons" << endl; - - // if there are at least two muons, - // calculate invarant mass of first two and fill it into histogram - - //if isMCatNLO_...... - - double inv_mass = 0.0; - double Zpt_ = 0.0; - double Zeta_ = 0.0; - double Ztheta_ = 0.0; - double Zphi_ = 0.0; - double Zrapidity_ = 0.0; - - if (muons.size() > 1) { - if (muons[0].mother()->mother()->pdgId() == 23 && muons[1].mother()->mother()->pdgId() == 23) - nBothMuHasZHasGrandMa_++; - math::XYZTLorentzVector tot_momentum(muons[0].p4()); - math::XYZTLorentzVector mom2(muons[1].p4()); - tot_momentum += mom2; - inv_mass = sqrt(tot_momentum.mass2()); - Zpt_ = tot_momentum.pt(); - Zeta_ = tot_momentum.eta(); - Ztheta_ = tot_momentum.theta(); - Zphi_ = tot_momentum.phi(); - Zrapidity_ = tot_momentum.Rapidity(); - - // IMPORTANT: use the weight of the event ... - - double weight_sign = (weight > 0) ? 1. : -1.; - //double weight_sign = 1. ; - h_mZMC_->Fill(inv_mass, weight_sign); - h_ptZMC_->Fill(Zpt_, weight_sign); - h_etaZMC_->Fill(Zeta_, weight_sign); - h_thetaZMC_->Fill(Ztheta_, weight_sign); - h_phiZMC_->Fill(Zphi_, weight_sign); - h_rapidityZMC_->Fill(Zrapidity_, weight_sign); - - double pt1 = muons[0].pt(); - double pt2 = muons[1].pt(); - double eta1 = muons[0].eta(); - double eta2 = muons[1].eta(); - - if (pt1 > pt2) { - hardpt->Fill(pt1, weight_sign); - softpt->Fill(pt2, weight_sign); - hardeta->Fill(eta1, weight_sign); - softeta->Fill(eta2, weight_sign); - } else { - hardpt->Fill(pt2, weight_sign); - softpt->Fill(pt1, weight_sign); - hardeta->Fill(eta2, weight_sign); - softeta->Fill(eta1, weight_sign); - } - - //evaluating the geometric acceptance - if (pt1 >= accPtMin_ && pt2 >= accPtMin_ && fabs(eta1) >= accEtaMin_ && fabs(eta2) >= accEtaMin_ && - fabs(eta1) <= accEtaMax_ && fabs(eta2) <= accEtaMax_ && inv_mass >= accMassMin_ && inv_mass <= accMassMax_) - nAcc_++; - } -} - -void ZLONLOHistogrammer::endJob() { - cout << " number of events accepted :" << nAcc_ << endl; - cout << " number of total events :" << h_mZMC_->GetEntries() << endl; - cout << " number of cases in which BothMuHasZHasGrandMa :" << nBothMuHasZHasGrandMa_ << endl; - double eff = (double)nAcc_ / (double)h_mZMC_->GetEntries(); - double err = sqrt(eff * (1. - eff) / (double)h_mZMC_->GetEntries()); - cout << " geometric acceptance: " << eff << "+/-" << err << endl; -} -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZLONLOHistogrammer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZMCHistogrammer.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZMCHistogrammer.cc deleted file mode 100644 index da6fed31a39d1..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZMCHistogrammer.cc +++ /dev/null @@ -1,243 +0,0 @@ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" -#include "TH1.h" - -class ZMCHistogrammer : public edm::EDAnalyzer { -public: - ZMCHistogrammer(const edm::ParameterSet &pset); - -private: - void analyze(const edm::Event &event, const edm::EventSetup &setup) override; - edm::EDGetTokenT zToken_; - edm::EDGetTokenT genToken_; - edm::EDGetTokenT > matchToken_; - edm::EDGetTokenT hepMCProductToken_; - unsigned int nbinsMass_, nbinsPt_, nbinsAng_, nbinsMassRes_; - double massMax_, ptMax_, angMax_, massResMax_; - TH1F *h_nZ_, *h_mZ_, *h_ptZ_, *h_phiZ_, *h_thetaZ_, *h_etaZ_, *h_rapidityZ_; - TH1F *h_invmMuMu_; - TH1F *h_nZMC_, *h_mZMC_, *h_ptZMC_, *h_phiZMC_, *h_thetaZMC_, *h_etaZMC_, *h_rapidityZMC_; - TH1F *h_invmMuMuMC_, *h_weight_histo; - //TH1F *h_mZ2vs3MC_, *h_ptZ2vs3MC_, *h_phiZ2vs3MC_, *h_thetaZ2vs3MC_, *h_etaZ2vs3MC_, *h_rapidityZ2vs3MC_; - TH1F *h_mResZ_, *h_ptResZ_, *h_phiResZ_, *h_thetaResZ_, *h_etaResZ_, *h_rapidityResZ_; - TH1F *h_mResZMuMu_, *h_mRatioZMuMu_; - TH1F *h_mResZMuMuMC_, *h_mRatioZMuMuMC_; - bool isMCatNLO_; -}; - -#include "DataFormats/Candidate/interface/CandMatchMap.h" - -#include "HepMC/WeightContainer.h" -#include "HepMC/GenEvent.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include -#include - -using namespace std; -using namespace reco; -using namespace edm; - -ZMCHistogrammer::ZMCHistogrammer(const ParameterSet &pset) - : zToken_(consumes(pset.getParameter("z"))), - genToken_(consumes(pset.getParameter("gen"))), - matchToken_(consumes >(pset.getParameter("match"))), - hepMCProductToken_(consumes(pset.getParameter("hepMCProductTag"))), - nbinsMass_(pset.getUntrackedParameter("nbinsMass")), - nbinsPt_(pset.getUntrackedParameter("nbinsPt")), - nbinsAng_(pset.getUntrackedParameter("nbinsAng")), - nbinsMassRes_(pset.getUntrackedParameter("nbinsMassRes")), - massMax_(pset.getUntrackedParameter("massMax")), - ptMax_(pset.getUntrackedParameter("ptMax")), - angMax_(pset.getUntrackedParameter("angMax")), - massResMax_(pset.getUntrackedParameter("massResMax")), - isMCatNLO_(pset.getUntrackedParameter("isMCatNLO")) { - cout << ">>> Z Histogrammer constructor" << endl; - Service fs; - TFileDirectory ZHisto = fs->mkdir("ZRecoHisto"); - TFileDirectory ZMCHisto = fs->mkdir("ZMCHisto"); - TFileDirectory ZResHisto = fs->mkdir("ZResolutionHisto"); - //TFileDirectory Z2vs3MCHisto = fs->mkdir( "Z2vs3MCHisto" ); - h_nZ_ = ZHisto.make("ZNumber", "number of Z particles", 11, -0.5, 10.5); - h_mZ_ = ZHisto.make("ZMass", "Z mass (GeV/c^{2})", nbinsMass_, 0, massMax_); - h_ptZ_ = ZHisto.make("ZPt", "Z p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - h_phiZ_ = ZHisto.make("ZPhi", "Z #phi", nbinsAng_, -angMax_, angMax_); - h_thetaZ_ = ZHisto.make("Ztheta", "Z #theta", nbinsAng_, 0, angMax_); - h_etaZ_ = ZHisto.make("ZEta", "Z #eta", nbinsAng_, -angMax_, angMax_); - h_rapidityZ_ = ZHisto.make("ZRapidity", "Z rapidity", nbinsAng_, -angMax_, angMax_); - h_invmMuMu_ = ZHisto.make("MuMuMass", "#mu #mu invariant mass", nbinsMass_, 0, massMax_); - h_weight_histo = ZHisto.make("weight_histo", "weight_histo", 20, -10, 10); - h_nZMC_ = ZMCHisto.make("ZMCNumber", "number of Z MC particles", 11, -0.5, 10.5); - h_mZMC_ = ZMCHisto.make("ZMCMass", "Z MC mass (GeV/c^{2})", nbinsMass_, 0, massMax_); - h_ptZMC_ = ZMCHisto.make("ZMCPt", "Z MC p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - h_phiZMC_ = ZMCHisto.make("ZMCPhi", "Z MC #phi", nbinsAng_, -angMax_, angMax_); - h_thetaZMC_ = ZMCHisto.make("ZMCTheta", "Z MC #theta", nbinsAng_, 0, angMax_); - h_etaZMC_ = ZMCHisto.make("ZMCEta", "Z MC #eta", nbinsAng_, -angMax_, angMax_); - h_rapidityZMC_ = ZMCHisto.make("ZMCRapidity", "Z MC rapidity", nbinsAng_, -angMax_, angMax_); - h_invmMuMuMC_ = ZMCHisto.make("MuMuMCMass", "#mu #mu MC invariant mass", nbinsMass_, 0, massMax_); - /* - h_mZ2vs3MC_ = Z2vs3MCHisto.make("Z2vs3MCMass", "Z MC st 2 vs st 3 mass (GeV/c^{2})", - nbinsMassRes_, -massResMax_, massResMax_); - h_ptZ2vs3MC_ = Z2vs3MCHisto.make("Z2vs3MCPt", "Z MC st 2 vs st 3 p_{t} (GeV/c)", - nbinsPt_, -ptMax_, ptMax_); - h_phiZ2vs3MC_ = Z2vs3MCHisto.make("Z2vs3MCPhi", "Z MC st 2 vs st 3 #phi", - nbinsAng_, -angMax_, angMax_); - h_thetaZ2vs3MC_ = Z2vs3MCHisto.make("Z2vs3MCTheta", "Z MC st 2 vs st 3 #theta", - nbinsAng_, -angMax_, angMax_); - h_etaZ2vs3MC_ = Z2vs3MCHisto.make("Z2vs3MCEta", "Z MC st 2 vs st 3 #eta", - nbinsAng_, -angMax_, angMax_); - h_rapidityZ2vs3MC_ = Z2vs3MCHisto.make("Z2vs3MCRapidity", "Z MC st 2 vs st 3 rapidity", - nbinsAng_, -angMax_, angMax_); - */ - h_mResZ_ = ZResHisto.make( - "ZMassResolution", "Z mass Resolution (GeV/c^{2})", nbinsMassRes_, -massResMax_, massResMax_); - h_ptResZ_ = ZResHisto.make("ZPtResolution", "Z p_{t} Resolution (GeV/c)", nbinsPt_, -ptMax_, ptMax_); - h_phiResZ_ = ZResHisto.make("ZPhiResolution", "Z #phi Resolution", nbinsAng_, -angMax_, angMax_); - h_thetaResZ_ = ZResHisto.make("ZThetaResolution", "Z #theta Resolution", nbinsAng_, -angMax_, angMax_); - h_etaResZ_ = ZResHisto.make("ZEtaResolution", "Z #eta Resolution", nbinsAng_, -angMax_, angMax_); - h_rapidityResZ_ = ZResHisto.make("ZRapidityResolution", "Z rapidity Resolution", nbinsAng_, -angMax_, angMax_); - h_mResZMuMu_ = ZResHisto.make("ZToMuMuRecoMassResolution", - "Z Reco vs matched final state #mu #mu mass Difference (GeV/c^{2})", - nbinsMassRes_, - -massResMax_, - massResMax_); - h_mRatioZMuMu_ = - ZResHisto.make("ZToMuMuRecoMassRatio", "Z Reco vs matched final state #mu #mu mass Ratio", 4000, 0, 2); - h_mResZMuMuMC_ = ZResHisto.make("ZToMuMuMCMassResolution", - "Z vs final state #mu #mu MC mass Difference (GeV/c^{2})", - nbinsMassRes_ / 2 + 1, - -2 * massResMax_ / nbinsMassRes_, - massResMax_); - h_mRatioZMuMuMC_ = - ZResHisto.make("ZToMuMuMCMassRatio", "Z vs final state #mu #mu MC mass Ratio", 2002, 0.999, 2); -} - -void ZMCHistogrammer::analyze(const edm::Event &event, const edm::EventSetup &setup) { - cout << ">>> Z Histogrammer analyze" << endl; - Handle z; - Handle gen; - Handle > match; - event.getByToken(zToken_, z); - event.getByToken(genToken_, gen); - event.getByToken(matchToken_, match); - h_nZ_->Fill(z->size()); - - // get HepMC::GenEvent ... - Handle evt_h; - event.getByToken(hepMCProductToken_, evt_h); - HepMC::GenEvent *evt = new HepMC::GenEvent(*(evt_h->GetEvent())); - - // get weight and fill it to histogram - HepMC::WeightContainer weights = evt->weights(); - double weight = weights.front(); - if (!weight) - weight = 1.; - h_weight_histo->Fill(weight); - - if (isMCatNLO_) { - weight > 0 ? weight = 1. : weight = -1.; - } - - for (unsigned int i = 0; i < z->size(); ++i) { - const Candidate &zCand = (*z)[i]; - h_mZ_->Fill(zCand.mass(), weight); - h_ptZ_->Fill(zCand.pt(), weight); - h_phiZ_->Fill(zCand.phi(), weight); - h_thetaZ_->Fill(zCand.theta(), weight); - h_etaZ_->Fill(zCand.eta(), weight); - h_rapidityZ_->Fill(zCand.rapidity(), weight); - CandidateBaseRef zCandRef = z->refAt(i); - - GenParticleRef zMCMatch = (*match)[i]; - if (zMCMatch.isNonnull() && zMCMatch->pdgId() == 23) { - h_mResZ_->Fill(zCandRef->mass() - zMCMatch->mass()); - h_ptResZ_->Fill(zCandRef->pt() - zMCMatch->pt()); - h_phiResZ_->Fill(zCandRef->phi() - zMCMatch->phi()); - h_thetaResZ_->Fill(zCandRef->theta() - zMCMatch->theta()); - h_etaResZ_->Fill(zCandRef->eta() - zMCMatch->eta()); - h_rapidityResZ_->Fill(zCandRef->rapidity() - zMCMatch->rapidity()); - const Candidate *dau0 = zMCMatch->daughter(0); - const Candidate *dau1 = zMCMatch->daughter(1); - for (unsigned int i0 = 0; i0 < dau0->numberOfDaughters(); ++i0) { - const Candidate *ddau0 = dau0->daughter(i0); - if (abs(ddau0->pdgId()) == 13 && ddau0->status() == 1) { - dau0 = ddau0; - break; - } - } - for (unsigned int i1 = 0; i1 < dau1->numberOfDaughters(); ++i1) { - const Candidate *ddau1 = dau1->daughter(i1); - if (abs(ddau1->pdgId()) == 13 && ddau1->status() == 1) { - dau1 = ddau1; - break; - } - } - assert(abs(dau0->pdgId()) == 13 && dau0->status() == 1); - assert(abs(dau1->pdgId()) == 13 && dau1->status() == 1); - double invMass = (dau0->p4() + dau1->p4()).mass(); - h_invmMuMu_->Fill(invMass, weight); - h_mResZMuMu_->Fill(zCand.mass() - invMass); - h_mRatioZMuMu_->Fill(zCand.mass() / invMass); - } - } - h_nZMC_->Fill(gen->size()); - for (unsigned int i = 0; i < gen->size(); ++i) { - const Candidate &genCand = (*gen)[i]; - if ((genCand.pdgId() == 23) && (genCand.status() == 2)) //this is an intermediate Z0 - cout << ">>> intermediate Z0 found, with " << genCand.numberOfDaughters() << " daughters" << endl; - if ((genCand.pdgId() == 23) && (genCand.status() == 3)) { //this is a Z0 - cout << ">>> Z0 found, with " << genCand.numberOfDaughters() << " daughters" << endl; - h_mZMC_->Fill(genCand.mass(), weight); - h_ptZMC_->Fill(genCand.pt(), weight); - h_phiZMC_->Fill(genCand.phi(), weight); - h_thetaZMC_->Fill(genCand.theta(), weight); - h_etaZMC_->Fill(genCand.eta(), weight); - h_rapidityZMC_->Fill(genCand.rapidity(), weight); - Particle::LorentzVector pZ(0, 0, 0, 0); - int nMu = 0; - for (unsigned int j = 0; j < genCand.numberOfDaughters(); ++j) { - const Candidate *dauGen = genCand.daughter(j); - /* - if((dauGen->pdgId() == 23) && (dauGen->status() == 2)) { - h_mZ2vs3MC_->Fill(genCand.mass() - dauGen->mass()); - h_ptZ2vs3MC_->Fill(genCand.pt() - dauGen->pt()); - h_phiZ2vs3MC_->Fill(genCand.phi() - dauGen->phi()); - h_thetaZ2vs3MC_->Fill(genCand.theta() - dauGen->theta()); - h_etaZ2vs3MC_->Fill(genCand.eta() - dauGen->eta()); - h_rapidityZ2vs3MC_->Fill(genCand.rapidity() - dauGen->rapidity()); - } - */ - if ((abs(dauGen->pdgId()) == 13) && (dauGen->numberOfDaughters() != 0)) { - //we are looking for photons of final state radiation - cout << ">>> The muon " << j << " has " << dauGen->numberOfDaughters() << " daughters" << endl; - for (unsigned int k = 0; k < dauGen->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen->daughter(k); - cout << ">>> Mu " << j << " daughter MC " << k << " PDG Id " << dauMuGen->pdgId() << ", status " - << dauMuGen->status() << ", charge " << dauMuGen->charge() << endl; - if (abs(dauMuGen->pdgId()) == 13 && dauMuGen->status() == 1) { - pZ += dauMuGen->p4(); - nMu++; - } - } - } - } - assert(nMu == 2); - double mZ = pZ.mass(); - h_invmMuMuMC_->Fill(mZ, weight); - h_mResZMuMuMC_->Fill(genCand.mass() - mZ); - h_mRatioZMuMuMC_->Fill(genCand.mass() / mZ); - } - } -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMCHistogrammer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZMassHistogrammer.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZMassHistogrammer.cc deleted file mode 100644 index 127fb3226a474..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZMassHistogrammer.cc +++ /dev/null @@ -1,74 +0,0 @@ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "TH1.h" - -class ZMassHistogrammer : public edm::EDAnalyzer { -public: - ZMassHistogrammer(const edm::ParameterSet& pset); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - edm::EDGetTokenT zToken_; - edm::EDGetTokenT genToken_; - TH1F *h_mZ_, *h_mZMC_; -}; - -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include - -using namespace std; -using namespace reco; -using namespace edm; - -ZMassHistogrammer::ZMassHistogrammer(const ParameterSet& pset) - : zToken_(consumes(pset.getParameter("z"))), - genToken_(consumes(pset.getParameter("gen"))) { - cout << ">>> Z Mass constructor" << endl; - Service fs; - h_mZ_ = fs->make("ZMass", "Z mass (GeV/c^{2})", 100, 0, 200); - h_mZMC_ = fs->make("ZMCMass", "Z MC mass (GeV/c^{2})", 100, 0, 200); -} - -void ZMassHistogrammer::analyze(const edm::Event& event, const edm::EventSetup& setup) { - cout << ">>> Z Mass analyze" << endl; - Handle z; - Handle gen; - event.getByToken(zToken_, z); - event.getByToken(genToken_, gen); - for (unsigned int i = 0; i < z->size(); ++i) { - const Candidate& zCand = (*z)[i]; - h_mZ_->Fill(zCand.mass()); - } - for (unsigned int i = 0; i < gen->size(); ++i) { - const Candidate& genCand = (*gen)[i]; - if ((genCand.pdgId() == 23) && (genCand.status() == 2)) //this is an intermediate Z0 - cout << ">>> intermediate Z0 found, with " << genCand.numberOfDaughters() << " daughters" << endl; - if ((genCand.pdgId() == 23) && (genCand.status() == 3)) { //this is a Z0 - cout << ">>> Z0 found, with " << genCand.numberOfDaughters() << " daughters" << endl; - h_mZMC_->Fill(genCand.mass()); - if (genCand.numberOfDaughters() == 3) { //Z0 decays in mu+ mu-, the 3rd daughter is the same Z0 - const Candidate* dauGen0 = genCand.daughter(0); - const Candidate* dauGen1 = genCand.daughter(1); - const Candidate* dauGen2 = genCand.daughter(2); - cout << ">>> daughter MC 0 PDG Id " << dauGen0->pdgId() << ", status " << dauGen0->status() << ", charge " - << dauGen0->charge() << endl; - cout << ">>> daughter MC 1 PDG Id " << dauGen1->pdgId() << ", status " << dauGen1->status() << ", charge " - << dauGen1->charge() << endl; - cout << ">>> daughter MC 2 PDG Id " << dauGen2->pdgId() << ", status " << dauGen2->status() << ", charge " - << dauGen2->charge() << endl; - } - } - } -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMassHistogrammer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuAnalyzer.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuAnalyzer.cc deleted file mode 100644 index bbe091199533a..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuAnalyzer.cc +++ /dev/null @@ -1,306 +0,0 @@ -/* \class ZMuMuAnalyzer - * - * Z->mu+m- standard analysis for cross section - * measurements. Take as input the output of the - * standard EWK skim: zToMuMu - * - * Produces mass spectra and other histograms for - * the samples in input: - * - * + Z -> mu+mu-, both muons are "global" muons - * + Z -> mu+mu-, one muons is "global" muons, one unmatched tracks - * + Z -> mu+mu-, one muons is "global" muons, one unmatched stand-alone muon - * - * - * \author Michele de Gruttola, INFN Naples - * - * - */ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Candidate/interface/OverlapChecker.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/Common/interface/AssociationVector.h" -#include "TH1.h" -#include -#include -using namespace edm; -using namespace std; -using namespace reco; - -typedef edm::AssociationVector > IsolationCollection; - -class ZMuMuAnalyzer : public edm::EDAnalyzer { -public: - ZMuMuAnalyzer(const edm::ParameterSet& pset); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - void endJob() override; - - OverlapChecker overlap_; - EDGetTokenT zMuMuToken_; - EDGetTokenT zMuTrackToken_; - EDGetTokenT zMuStandAloneToken_; - EDGetTokenT muIsoToken_; - EDGetTokenT trackIsoToken_; - EDGetTokenT standAloneIsoToken_; - EDGetTokenT zMuMuMapToken_; - EDGetTokenT zMuTrackMapToken_; - EDGetTokenT zMuStandAloneMapToken_; - double isocut_, etacut_, ptcut_, ptSTAcut_, minZmass_, maxZmass_; - TH1D *h_zMuMu_mass_, *h_zMuSingleTrack_mass_, *h_zMuSingleStandAlone_mass_, *h_zMuSingleStandAloneOverlap_mass_, - *h_zMuMuMatched_mass_, *h_zMuSingleTrackMatched_mass_, *h_zMuSingleStandAloneMatched_mass_, - *h_zMuSingleStandAloneOverlapMatched_mass_; -}; - -ZMuMuAnalyzer::ZMuMuAnalyzer(const edm::ParameterSet& pset) - : zMuMuToken_(consumes(pset.getParameter("zMuMu"))), - zMuTrackToken_(consumes(pset.getParameter("zMuTrack"))), - zMuStandAloneToken_(consumes(pset.getParameter("zMuStandAlone"))), - muIsoToken_(consumes(pset.getParameter("muIso"))), - trackIsoToken_(consumes(pset.getParameter("trackIso"))), - standAloneIsoToken_(consumes(pset.getParameter("standAloneIso"))), - zMuMuMapToken_(mayConsume(pset.getParameter("zMuMuMap"))), - zMuTrackMapToken_(mayConsume(pset.getParameter("zMuTrackMap"))), - zMuStandAloneMapToken_(mayConsume(pset.getParameter("zMuStandAloneMap"))), - isocut_(pset.getParameter("isocut")), - etacut_(pset.getParameter("etacut")), - ptcut_(pset.getParameter("ptcut")), - ptSTAcut_(pset.getParameter("ptSTAcut")), - - minZmass_(pset.getParameter("minZmass")), - maxZmass_(pset.getParameter("maxZmass")) { - Service fs; - h_zMuMu_mass_ = fs->make("ZMuMumass", "ZMuMu mass(GeV)", 200, 0., 200.); - h_zMuSingleTrack_mass_ = fs->make("ZMuSingleTrackmass", "ZMuSingleTrack mass(GeV)", 100, 0., 200.); - h_zMuSingleStandAlone_mass_ = - fs->make("ZMuSingleStandAlonemass", "ZMuSingleStandAlone mass(GeV)", 50, 0., 200.); - h_zMuSingleStandAloneOverlap_mass_ = - fs->make("ZMuSingleStandAloneOverlapmass", "ZMuSingleStandAloneOverlap mass(GeV)", 50, 0., 200.); - - h_zMuMuMatched_mass_ = fs->make("ZMuMuMatchedmass", "ZMuMu Matched mass(GeV)", 200, 0., 200.); - h_zMuSingleTrackMatched_mass_ = - fs->make("ZMuSingleTrackmassMatched", "ZMuSingleTrackMatched mass(GeV)", 100, 0., 200.); - h_zMuSingleStandAloneMatched_mass_ = - fs->make("ZMuSingleStandAlonemassMatched", "ZMuSingleStandAloneMatched mass(GeV)", 50, 0., 200.); - h_zMuSingleStandAloneOverlapMatched_mass_ = fs->make( - "ZMuSingleStandAloneOverlapmassMatched", "ZMuSingleStandAloneMatched Overlap mass(GeV)", 50, 0., 200.); -} - -void ZMuMuAnalyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) { - Handle zMuMu; - event.getByToken(zMuMuToken_, zMuMu); - Handle zMuTrack; - event.getByToken(zMuTrackToken_, zMuTrack); - Handle zMuStandAlone; - event.getByToken(zMuStandAloneToken_, zMuStandAlone); - - unsigned int nZMuMu = zMuMu->size(); - unsigned int nZTrackMu = zMuTrack->size(); - unsigned int nZStandAloneMu = zMuStandAlone->size(); - static const double zMass = 91.1876; // PDG Z mass - - // cout << "nZMuMu = " << nZMuMu << endl; - // cout << "nZTrackMu = " << nZTrackMu << endl; - // cout << "nZStandAloneMu = " << nZStandAloneMu << endl; - - Handle zMuMuMap; - if (nZMuMu > 0) { - event.getByToken(zMuMuMapToken_, zMuMuMap); - } - - Handle zMuTrackMap; - if (nZTrackMu > 0) { - event.getByToken(zMuTrackMapToken_, zMuTrackMap); - } - - Handle zMuStandAloneMap; - if (nZStandAloneMu > 0) { - event.getByToken(zMuStandAloneMapToken_, zMuStandAloneMap); - } - - Handle muIso; - event.getByToken(muIsoToken_, muIso); - ProductID muIsoId = muIso->keyProduct().id(); - Handle trackIso; - event.getByToken(trackIsoToken_, trackIso); - ProductID trackIsoId = trackIso->keyProduct().id(); - - Handle standAloneIso; - event.getByToken(standAloneIsoToken_, standAloneIso); - ProductID standAloneIsoId = standAloneIso->keyProduct().id(); - - if (nZMuMu > 0) { - double mass = 1000000.; - for (unsigned int i = 0; i < nZMuMu; i++) { - const Candidate& zmmCand = (*zMuMu)[i]; - CandidateRef CandRef(zMuMu, i); - CandidateRef lep1 = zmmCand.daughter(0)->masterClone().castTo(); - CandidateRef lep2 = zmmCand.daughter(1)->masterClone().castTo(); - - const double iso1 = muIso->value(lep1.key()); - const double iso2 = muIso->value(lep2.key()); - - double m = zmmCand.mass(); - if (lep1->pt() > ptcut_ && lep2->pt() > ptcut_ && fabs(lep1->eta()) < etacut_ && fabs(lep2->eta()) < etacut_ && - m > minZmass_ && m < maxZmass_ && iso1 < isocut_ && iso2 < isocut_) { - if (fabs(mass - zMass) > fabs(m - zMass)) { - mass = m; - } - - h_zMuMu_mass_->Fill(mass); - CandMatchMap::const_iterator m0 = zMuMuMap->find(CandRef); - if (m0 != zMuMuMap->end()) { - h_zMuMuMatched_mass_->Fill(mass); - } - } - } - } - - //ZmuSingleTRack - if (nZMuMu == 0 && nZTrackMu > 0) { - for (unsigned int j = 0; j < nZTrackMu; j++) { - const Candidate& ztmCand = (*zMuTrack)[j]; - CandidateRef CandRef(zMuTrack, j); - CandidateRef lep1 = ztmCand.daughter(0)->masterClone().castTo(); - CandidateRef lep2 = ztmCand.daughter(1)->masterClone().castTo(); - - ProductID id1 = lep1.id(); - ProductID id2 = lep2.id(); - double iso1 = -1; - double iso2 = -1; - - if (id1 == muIsoId) - iso1 = muIso->value(lep1.key()); - else if (id1 == trackIsoId) - iso1 = trackIso->value(lep1.key()); - - if (id2 == muIsoId) - iso2 = muIso->value(lep2.key()); - else if (id2 == trackIsoId) - iso2 = trackIso->value(lep2.key()); - - double mt = ztmCand.mass(); - if (lep1->pt() > ptcut_ && lep2->pt() > ptcut_ && fabs(lep1->eta()) < etacut_ && fabs(lep2->eta()) < etacut_ && - mt > minZmass_ && mt < maxZmass_ && iso1 < isocut_ && iso2 < isocut_) { - h_zMuSingleTrack_mass_->Fill(mt); - CandMatchMap::const_iterator m0 = zMuTrackMap->find(CandRef); - if (m0 != zMuTrackMap->end()) { - h_zMuSingleTrackMatched_mass_->Fill(mt); - } - } - } - } - - //ZmuSingleStandAlone - if (nZMuMu == 0 && nZStandAloneMu > 0) { - // unsigned int index = 1000; - for (unsigned int j = 0; j < nZStandAloneMu; j++) { - const Candidate& zsmCand = (*zMuStandAlone)[j]; - CandidateRef CandRef(zMuStandAlone, j); - CandidateRef lep1 = zsmCand.daughter(0)->masterClone().castTo(); - CandidateRef lep2 = zsmCand.daughter(1)->masterClone().castTo(); - - ProductID id1 = lep1.id(); - ProductID id2 = lep2.id(); - double iso1 = -1; - double iso2 = -1; - - if (id1 == muIsoId) - iso1 = muIso->value(lep1.key()); - else if (id1 == standAloneIsoId) - iso1 = standAloneIso->value(lep1.key()); - - if (id2 == muIsoId) - iso2 = muIso->value(lep2.key()); - else if (id2 == standAloneIsoId) - iso2 = standAloneIso->value(lep2.key()); - - double ms = zsmCand.mass(); - if (lep1->pt() > ptSTAcut_ && lep2->pt() > ptSTAcut_ && fabs(lep1->eta()) < etacut_ && - fabs(lep2->eta()) < etacut_ && ms > minZmass_ && ms < maxZmass_ && iso1 < isocut_ && iso2 < isocut_) { - h_zMuSingleStandAlone_mass_->Fill(ms); - CandMatchMap::const_iterator m0 = zMuStandAloneMap->find(CandRef); - if (m0 != zMuStandAloneMap->end()) { - h_zMuSingleStandAloneMatched_mass_->Fill(ms); - } - - bool noOverlap = true; - for (unsigned int j = 0; j < zMuTrack->size(); j++) { - const Candidate& ztmCand = (*zMuTrack)[j]; - CandidateRef CandReft(zMuTrack, j); - - CandidateRef lep1 = ztmCand.daughter(0)->masterClone().castTo(); - CandidateRef lep2 = ztmCand.daughter(1)->masterClone().castTo(); - - ProductID id1 = lep1.id(); - ProductID id2 = lep2.id(); - double iso1 = -1; - double iso2 = -1; - - if (id1 == muIsoId) - iso1 = muIso->value(lep1.key()); - else if (id1 == trackIsoId) - iso1 = trackIso->value(lep1.key()); - - if (id2 == muIsoId) - iso2 = muIso->value(lep2.key()); - else if (id2 == trackIsoId) - iso2 = trackIso->value(lep2.key()); - - double mt = ztmCand.mass(); - if (lep1->pt() > ptcut_ && lep2->pt() > ptcut_ && fabs(lep1->eta()) < etacut_ && - fabs(lep2->eta()) < etacut_ && mt > minZmass_ && mt < maxZmass_ && iso1 < isocut_ && iso2 < isocut_) { - if (overlap_(ztmCand, zsmCand)) { - noOverlap = false; - break; - } - if (!noOverlap) { - h_zMuSingleStandAloneOverlap_mass_->Fill(ms); - CandMatchMap::const_iterator m1 = zMuTrackMap->find(CandReft); - CandMatchMap::const_iterator m2 = zMuStandAloneMap->find(CandRef); - - if (m1 != zMuTrackMap->end() && m2 != zMuStandAloneMap->end()) { - h_zMuSingleStandAloneOverlapMatched_mass_->Fill(ms); - } - } - } - } - } - } - } -} - -void ZMuMuAnalyzer::endJob() { - double Nzmm = h_zMuMu_mass_->GetEntries(); - double Nzsm = h_zMuSingleStandAlone_mass_->GetEntries(); - double Nzsnom = h_zMuSingleStandAloneOverlap_mass_->GetEntries(); - double Nztm = h_zMuSingleTrack_mass_->GetEntries(); - - double NzmmMatch = h_zMuMuMatched_mass_->GetEntries(); - double NzsmMatch = h_zMuSingleStandAloneMatched_mass_->GetEntries(); - double NzsnomMatch = h_zMuSingleStandAloneOverlapMatched_mass_->GetEntries(); - double NztmMatch = h_zMuSingleTrackMatched_mass_->GetEntries(); - - cout << "-- N SingleTrackMu = " << Nztm << endl; - cout << "-----N SinglStandAloneMu = " << Nzsm << endl; - cout << "-----N SingleStandAloneOverlapMu = " << Nzsnom << endl; - cout << "------- N MuMu = " << Nzmm << endl; - - cout << "-- N SingleTrackMuMatched = " << NztmMatch << endl; - cout << "-----N SinglStandAloneMuMatched = " << NzsmMatch << endl; - cout << "-----N SingleStandAloneOverlapMuMatched = " << NzsnomMatch << endl; - cout << "------- N MuMu Matched = " << NzmmMatch << endl; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuMuAnalyzer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuAnalyzer_cynematics.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuAnalyzer_cynematics.cc deleted file mode 100644 index dd9014889cc93..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuAnalyzer_cynematics.cc +++ /dev/null @@ -1,873 +0,0 @@ -/* \class ZMuMuAnalyzer_cynematics - * - * Z->mu+m- standard analysis for cross section - * measurements. Take as input the output of the - * standard EWK skim: zToMuMu - * - * Produces mass spectra and other histograms for - * the samples in input: - * - * + Z -> mu+mu-, both muons are "global" muons - * + Z -> mu+mu-, one muons is "global" muons, one unmatched tracks - * + Z -> mu+mu-, one muons is "global" muons, one unmatched stand-alone muon - * - * - * \author Michele de Gruttola, - * \modified by Davide Piccolo, INFN Naples to include gerarchyc selection of Z and histos as a finction of eta pt phi - * - * - * - */ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Candidate/interface/OverlapChecker.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/Common/interface/AssociationVector.h" -#include "DataFormats/Candidate/interface/OverlapChecker.h" -#include "DataFormats/Math/interface/LorentzVector.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "TFile.h" -#include "TH1.h" -#include "TH2.h" -#include -#include -#include -using namespace edm; -using namespace std; -using namespace reco; - -typedef edm::AssociationVector > IsolationCollection; - -class ZMuMuAnalyzer_cynematics : public edm::EDAnalyzer { -public: - ZMuMuAnalyzer_cynematics(const edm::ParameterSet& pset); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - bool isContained(const Candidate&, const Candidate&); - void endJob() override; - - OverlapChecker overlap_; - EDGetTokenT zMuMuToken_; - EDGetTokenT zMuTrackToken_; - EDGetTokenT zMuStandAloneToken_; - EDGetTokenT muIsoToken_; - EDGetTokenT trackIsoToken_; - EDGetTokenT standAloneIsoToken_; - EDGetTokenT zMuMuMapToken_; - EDGetTokenT zMuTrackMapToken_; - EDGetTokenT zMuStandAloneMapToken_; - double isocut_, etacut_, ptcut_, ptSTAcut_, minZmass_, maxZmass_; - TH1D *h_zMuMu_numberOfCand, *h_zMuMu_numberOfCand_passed, *h_zMuMu_numberOfCand_ptpassed, - *h_zMuMu_numberOfCand_etapassed, *h_zMuMu_numberOfCand_masspassed, *h_zMuMu_numberOfCand_isopassed, - *h_zMuMu_numberOfCand_ptetapassed, *h_zMuMu_numberOfCand_ptetamasspassed, *h_zMuMu_mass_, *h_zMuSingleTrack_mass_, - *h_zMuSingleStandAlone_mass_, *h_zMuSingleStandAloneOverlap_mass_, *h_zMuMuMatched_mass_, - *h_zMuSingleTrackMatched_mass_, *h_zMuSingleStandAloneMatched_mass_, *h_zMuSingleStandAloneOverlapMatched_mass_; - - TH1D *h_zMuSta_numberOfCand, *h_zMuSta_numberOfCand_passed, *h_zMuSta_MCmatched_numberOfCand_passed, - *h_zMuSta_numberOfCand_notcontained, *h_zMuTrack_numberOfCand, *h_zMuTrack_numberOfCand_notcontained, - *h_zMuTrack_numberOfCand_passed, *h_zMuTrack_MCmatched_numberOfCand_passed; - TH2D* h_OneSta_mass; - - double etamin, etamax, phimin, phimax, ptmin, ptmax; - int numberOfIntervals; // number of intervals in which to divide cynematic variables - double binEta, binPhi, binPt; - vector hmumu_eta, hmusta_eta, hmutrack_eta; - vector hmumu_phi, hmusta_phi, hmutrack_phi; - vector hmumu_pt, hmusta_pt, hmutrack_pt; -}; - -ZMuMuAnalyzer_cynematics::ZMuMuAnalyzer_cynematics(const edm::ParameterSet& pset) - : zMuMuToken_(consumes(pset.getParameter("zMuMu"))), - zMuTrackToken_(consumes(pset.getParameter("zMuTrack"))), - zMuStandAloneToken_(consumes(pset.getParameter("zMuStandAlone"))), - muIsoToken_(consumes(pset.getParameter("muIso"))), - trackIsoToken_(consumes(pset.getParameter("trackIso"))), - standAloneIsoToken_(consumes(pset.getParameter("standAloneIso"))), - zMuMuMapToken_(mayConsume(pset.getParameter("zMuMuMap"))), - zMuTrackMapToken_(mayConsume(pset.getParameter("zMuTrackMap"))), - zMuStandAloneMapToken_(mayConsume(pset.getParameter("zMuStandAloneMap"))), - isocut_(pset.getParameter("isocut")), - etacut_(pset.getParameter("etacut")), - ptcut_(pset.getParameter("ptcut")), - ptSTAcut_(pset.getParameter("ptSTAcut")), - minZmass_(pset.getParameter("minZmass")), - maxZmass_(pset.getParameter("maxZmass")) { - Service fs; - h_zMuMu_numberOfCand = fs->make("ZMuMunumberOfCand", "number of ZMuMu cand", 10, -.5, 9.5); - h_zMuMu_numberOfCand_passed = - fs->make("ZMuMunumberOfCandpassed", "number of ZMuMu cand selected", 10, -.5, 9.5); - h_zMuMu_numberOfCand_ptpassed = - fs->make("ZMuMunumberOfCandptpassed", "number of ZMuMu cand after pt cut selected", 10, -.5, 9.5); - h_zMuMu_numberOfCand_etapassed = - fs->make("ZMuMunumberOfCandetapassed", "number of ZMuMu cand after eta cut selected", 10, -.5, 9.5); - h_zMuMu_numberOfCand_masspassed = - fs->make("ZMuMunumberOfCandmasspassed", "number of ZMuMu cand after mass cut selected", 10, -.5, 9.5); - h_zMuMu_numberOfCand_isopassed = - fs->make("ZMuMunumberOfCandisopassed", "number of ZMuMu cand after iso cut selected", 10, -.5, 9.5); - h_zMuMu_numberOfCand_ptetapassed = - fs->make("ZMuMunumberOfCandptetapassed", "number of ZMuMu cand after pt & eta cut selected", 10, -.5, 9.5); - h_zMuMu_numberOfCand_ptetamasspassed = fs->make( - "ZMuMunumberOfCandptetamaspassed", "number of ZMuMu cand after pt & eta & mass cut selected", 10, -.5, 9.5); - - h_zMuMu_mass_ = fs->make("ZMuMumass", "ZMuMu mass(GeV)", 200, 0., 200.); - h_zMuSingleTrack_mass_ = fs->make("ZMuSingleTrackmass", "ZMuSingleTrack mass(GeV)", 100, 0., 200.); - h_zMuSingleStandAlone_mass_ = - fs->make("ZMuSingleStandAlonemass", "ZMuSingleStandAlone mass(GeV)", 50, 0., 200.); - h_zMuSingleStandAloneOverlap_mass_ = - fs->make("ZMuSingleStandAloneOverlapmass", "ZMuSingleStandAloneOverlap mass(GeV)", 50, 0., 200.); - - h_zMuMuMatched_mass_ = fs->make("ZMuMuMatchedmass", "ZMuMu Matched mass(GeV)", 200, 0., 200.); - h_zMuSingleTrackMatched_mass_ = - fs->make("ZMuSingleTrackmassMatched", "ZMuSingleTrackMatched mass(GeV)", 100, 0., 200.); - h_zMuSingleStandAloneMatched_mass_ = - fs->make("ZMuSingleStandAlonemassMatched", "ZMuSingleStandAloneMatched mass(GeV)", 50, 0., 200.); - h_zMuSingleStandAloneOverlapMatched_mass_ = fs->make( - "ZMuSingleStandAloneOverlapmassMatched", "ZMuSingleStandAloneMatched Overlap mass(GeV)", 50, 0., 200.); - - h_zMuSta_numberOfCand = - fs->make("ZMuStanumberOfCand", "number of ZMuSta cand (if ZMuMu not selected)", 10, -.5, 9.5); - h_OneSta_mass = - fs->make("ZOneMuStaMass", - "inv. mass of ZMuSta1 vs ZMuSta2 when one ZMuSta has been found (if ZMuMu not selected)", - 100, - 0., - 400, - 100, - 0., - 400.); - h_zMuSta_numberOfCand_notcontained = fs->make( - "ZMuStanumberOfCandnotcontained", "number of independent ZMuSta cand (if ZMuMu not selected)", 10, -.5, 9.5); - h_zMuSta_numberOfCand_passed = fs->make( - "ZMuStanumberOfCandpassed", "number of ZMuSta cand selected (if ZMuMu not selected)", 10, -.5, 9.5); - h_zMuSta_MCmatched_numberOfCand_passed = - fs->make("ZMuStaMCmatchedNumberOfCandpassed", - "number of ZMuSta MC matched cand selected (if ZMuMu not selected)", - 10, - -.5, - 9.5); - h_zMuTrack_numberOfCand = - fs->make("ZMuTranumberOfCand", "number of ZMuTrack cand (if ZMuMu and ZMuSTa not selected)", 10, -.5, 9.5); - h_zMuTrack_numberOfCand_notcontained = - fs->make("ZMuTranumberOfCandnotcontaind", - "number of indeendent ZMuTrack cand (if ZMuMu and ZMuSTa not selected)", - 10, - -.5, - 9.5); - h_zMuTrack_numberOfCand_passed = fs->make( - "ZMuTranumberOfCandpassed", "number of ZMuTrack cand selected (if ZMuMu and ZMuSta not selected)", 10, -.5, 9.5); - h_zMuTrack_MCmatched_numberOfCand_passed = - fs->make("ZMuTraMCmacthedNumberOfCandpassed", - "number of ZMuTrack MC matched cand selected (if ZMuMu and ZMuSta not selected)", - 10, - -.5, - 9.5); - - // creating histograms for each Pt, eta, phi interval - - etamin = -etacut_; - etamax = etacut_; - phimin = -3.1415; - phimax = 3.1415; - ptmin = ptcut_; - ptmax = 100; - numberOfIntervals = 8; // number of intervals in which to divide cynematic variables - binEta = (etamax - etamin) / numberOfIntervals; - binPhi = (phimax - phimin) / numberOfIntervals; - binPt = (ptmax - ptmin) / numberOfIntervals; - TFileDirectory etaDirectory = - fs->mkdir("etaIntervals"); // in this directory will be saved all the histos of different eta intervals - TFileDirectory phiDirectory = - fs->mkdir("phiIntervals"); // in this directory will be saved all the histos of different phi intervals - TFileDirectory ptDirectory = - fs->mkdir("ptIntervals"); // in this directory will be saved all the histos of different pt intervals - - // eta histograms creation - - for (int i = 0; i < numberOfIntervals; i++) { - double range0 = etamin + i * binEta; - double range1 = range0 + binEta; - char a[30], b[50]; - sprintf(a, "zmumu_etaRange%d", i); - sprintf(b, "zmumu mass eta Range %f to %f", range0, range1); - hmumu_eta.push_back(etaDirectory.make(a, b, 200, 0., 200.)); - char asta[30], bsta[50]; - sprintf(asta, "zmusta_etaRange%d", i); - sprintf(bsta, "zmusta mass eta Range %f to %f", range0, range1); - hmusta_eta.push_back(etaDirectory.make(asta, bsta, 50, 0., 200.)); - char atk[30], btk[50]; - sprintf(atk, "zmutrack_etaRange%d", i); - sprintf(btk, "zmutrack mass eta Range %f to %f", range0, range1); - hmutrack_eta.push_back(etaDirectory.make(atk, btk, 100, 0., 200.)); - } - - // phi histograms creation - - for (int i = 0; i < numberOfIntervals; i++) { - double range0 = phimin + i * binPhi; - double range1 = range0 + binPhi; - char a[30], b[50]; - sprintf(a, "zmumu_phiRange%d", i); - sprintf(b, "zmumu mass phi Range %f to %f", range0, range1); - hmumu_phi.push_back(phiDirectory.make(a, b, 200, 0., 200.)); - char asta[30], bsta[50]; - sprintf(asta, "zmusta_phiRange%d", i); - sprintf(bsta, "zmusta mass phi Range %f to %f", range0, range1); - hmusta_phi.push_back(phiDirectory.make(asta, bsta, 50, 0., 200.)); - char atk[30], btk[50]; - sprintf(atk, "zmutrack_phiRange%d", i); - sprintf(btk, "zmutrack mass phi Range %f to %f", range0, range1); - hmutrack_phi.push_back(phiDirectory.make(atk, btk, 100, 0., 200.)); - } - - // pt histograms creation - - for (int i = 0; i < numberOfIntervals; i++) { - double range0 = ptmin + i * binPt; - double range1 = range0 + binPt; - char a[30], b[50]; - sprintf(a, "zmumu_ptRange%d", i); - sprintf(b, "zmumu mass pt Range %f to %f", range0, range1); - hmumu_pt.push_back(ptDirectory.make(a, b, 200, 0., 200.)); - char asta[30], bsta[50]; - sprintf(asta, "zmusta_ptRange%d", i); - sprintf(bsta, "zmusta mass pt Range %f to %f", range0, range1); - hmusta_pt.push_back(ptDirectory.make(asta, bsta, 50, 0., 200.)); - char atk[30], btk[50]; - sprintf(atk, "zmutrack_ptRange%d", i); - sprintf(btk, "zmutrack mass pt Range %f to %f", range0, range1); - hmutrack_pt.push_back(ptDirectory.make(atk, btk, 100, 0., 200.)); - } -} - -void ZMuMuAnalyzer_cynematics::analyze(const edm::Event& event, const edm::EventSetup& setup) { - Handle zMuMu; - event.getByToken(zMuMuToken_, zMuMu); - Handle zMuTrack; - event.getByToken(zMuTrackToken_, zMuTrack); - Handle zMuStandAlone; - event.getByToken(zMuStandAloneToken_, zMuStandAlone); - - unsigned int nZMuMu = zMuMu->size(); - unsigned int nZTrackMu = zMuTrack->size(); - unsigned int nZStandAloneMu = zMuStandAlone->size(); - // static const double zMass = 91.1876; // PDG Z mass - - cout << "++++++++++++++++++++++++++" << endl; - cout << "nZMuMu = " << nZMuMu << endl; - cout << "nZTrackMu = " << nZTrackMu << endl; - cout << "nZStandAloneMu = " << nZStandAloneMu << endl; - cout << "++++++++++++++++++++++++++" << endl; - - // ZMuMu counters - - int ZMuMu_passed = 0; - int ZMuMu_ptcut_counter = 0; - int ZMuMu_etacut_counter = 0; - int ZMuMu_masscut_counter = 0; - int ZMuMu_isocut_counter = 0; - int ZMuMu_ptetacut_counter = 0; - int ZMuMu_ptetamasscut_counter = 0; - int ZMuMu_allcut_counter = 0; - - // ZMuTrack counters - - int ZMuTrack_passed = 0; - int ZMuTrack_notcontained = 0; - int ZMuTrack_MCmatched_passed = 0; - - // ZMuStandalone counters - int ZMuStandalone_notcontained = 0; - int ZMuStandalone_passed = 0; - int ZMuStandalone_MCmatched_passed = 0; - - Handle zMuMuMap; - if (nZMuMu > 0) { - event.getByToken(zMuMuMapToken_, zMuMuMap); - } - - Handle zMuTrackMap; - if (nZTrackMu > 0) { - event.getByToken(zMuTrackMapToken_, zMuTrackMap); - } - - Handle zMuStandAloneMap; - if (nZStandAloneMu > 0) { - event.getByToken(zMuStandAloneMapToken_, zMuStandAloneMap); - } - - Handle muIso; - event.getByToken(muIsoToken_, muIso); - ProductID muIsoId = muIso->keyProduct().id(); - Handle trackIso; - event.getByToken(trackIsoToken_, trackIso); - ProductID trackIsoId = trackIso->keyProduct().id(); - - Handle standAloneIso; - event.getByToken(standAloneIsoToken_, standAloneIso); - ProductID standAloneIsoId = standAloneIso->keyProduct().id(); - - if (nZMuMu > 0) { - // double mass = 1000000.; - for (unsigned int i = 0; i < nZMuMu; i++) { - bool ptcutAccept = false; - bool etacutAccept = false; - bool masscutAccept = false; - bool isocutAccept = false; - const Candidate& zmmCand = (*zMuMu)[i]; - CandidateRef CandRef(zMuMu, i); - CandidateRef lep1 = zmmCand.daughter(0)->masterClone().castTo(); - CandidateRef lep2 = zmmCand.daughter(1)->masterClone().castTo(); - - const double iso1 = muIso->value(lep1.key()); - const double iso2 = muIso->value(lep2.key()); - - double m = zmmCand.mass(); - // check single cuts - - if (lep1->pt() > ptcut_ && lep2->pt() > ptcut_) - ptcutAccept = true; - if (fabs(lep1->eta()) < etacut_ && fabs(lep2->eta()) < etacut_) - etacutAccept = true; - if (m > minZmass_ && m < maxZmass_) - masscutAccept = true; - if (iso1 < isocut_ && iso2 < isocut_) - isocutAccept = true; - - if (ptcutAccept) - ZMuMu_ptcut_counter++; - if (etacutAccept) - ZMuMu_etacut_counter++; - if (masscutAccept) - ZMuMu_masscut_counter++; - if (isocutAccept) - ZMuMu_isocut_counter++; - - // check sequencial cuts - - if (ptcutAccept && etacutAccept) { - ZMuMu_ptetacut_counter++; - if (masscutAccept) { - ZMuMu_ptetamasscut_counter++; - if (isocutAccept) { - ZMuMu_passed++; - } - } - } - - if (ptcutAccept && etacutAccept && masscutAccept && isocutAccept) { - ZMuMu_allcut_counter++; - h_zMuMu_mass_->Fill(m); - - // check the cynematics to fill correct histograms - for (int j = 0; j < numberOfIntervals; j++) { - bool statusBinEta = false; - bool statusBinPhi = false; - bool statusBinPt = false; - double range0 = etamin + j * binEta; - double range1 = range0 + binEta; - double range0phi = phimin + j * binPhi; - double range1phi = range0phi + binPhi; - double range0pt = ptmin + j * binPt; - double range1pt = range0pt + binPt; - // eta histograms - if (lep1->eta() >= range0 && lep1->eta() < range1) { - hmumu_eta[j]->Fill(m); - statusBinEta = true; - } - if (lep2->eta() >= range0 && lep2->eta() < range1 && !statusBinEta) { - hmumu_eta[j]->Fill(m); // If eta1 is in the same bin of eta2 fill just once - } - // phi histograms - if (lep1->phi() >= range0phi && lep1->phi() < range1phi) { - hmumu_phi[j]->Fill(m); - statusBinPhi = true; - } - if (lep2->phi() >= range0phi && lep2->phi() < range1phi && !statusBinPhi) { - hmumu_phi[j]->Fill(m); // If phi1 is in the same bin of phi2 fill just once - } - // pt histograms - if (lep1->pt() >= range0pt && lep1->pt() < range1pt) { - hmumu_pt[j]->Fill(m); - statusBinPt = true; - } - if (lep2->pt() >= range0pt && lep2->pt() < range1pt && !statusBinPt) { - hmumu_pt[j]->Fill(m); // If pt1 is in the same bin of pt2 fill just once - } - } - - CandMatchMap::const_iterator m0 = zMuMuMap->find(CandRef); - if (m0 != zMuMuMap->end()) { // the Z is matched to MC thruth - h_zMuMuMatched_mass_->Fill(m); - } - } - } - } - - h_zMuMu_numberOfCand->Fill(nZMuMu); // number of Z cand found per event - h_zMuMu_numberOfCand_passed->Fill(ZMuMu_allcut_counter); // number of Z cand after all cuts found per event - h_zMuMu_numberOfCand_ptpassed->Fill(ZMuMu_ptcut_counter); // number of Z cand afer pt cut found per event - h_zMuMu_numberOfCand_etapassed->Fill(ZMuMu_etacut_counter); // number of Z cand afer eta cut found per event - h_zMuMu_numberOfCand_masspassed->Fill(ZMuMu_masscut_counter); // number of Z cand afer mass cut found per event - h_zMuMu_numberOfCand_isopassed->Fill(ZMuMu_isocut_counter); // number of Z cand afer iso cut found per event - h_zMuMu_numberOfCand_ptetapassed->Fill(ZMuMu_ptetacut_counter); // number of Z cand afer pt&eta cut found per event - h_zMuMu_numberOfCand_ptetamasspassed->Fill( - ZMuMu_ptetamasscut_counter); // number of Z cand afer pt&eta&mass cut found per event - - //ZmuSingleStandAlone (check MuStandalone if MuMu has not been selected by cuts) - // cout << "ZMuMuanalyzer : n of zMuMu " << nZMuMu << " passed " << ZMuMu_passed << " n. of zStaMu " << nZStandAloneMu << endl; - - if (ZMuMu_passed == 0 && nZStandAloneMu > 0) { - // unsigned int index = 1000; - for (unsigned int j = 0; j < nZStandAloneMu; j++) { - const Candidate& zsmCand = (*zMuStandAlone)[j]; - bool skipZ = false; - for (unsigned int i = 0; i < nZMuMu; i++) { // chek if the ZMuSTandalone is contained in a ZMuMu - const Candidate& zmmCand = (*zMuMu)[i]; // if yes .. the event has to be skipped - if (isContained(zmmCand, zsmCand)) - skipZ = true; - } - if (!skipZ) { // ZSMuSTandalone not contained in a ZMuMu - ZMuStandalone_notcontained++; - CandidateRef CandRef(zMuStandAlone, j); - CandidateRef lep1 = zsmCand.daughter(0)->masterClone().castTo(); - CandidateRef lep2 = zsmCand.daughter(1)->masterClone().castTo(); - - ProductID id1 = lep1.id(); - ProductID id2 = lep2.id(); - double iso1 = -1; - double iso2 = -1; - - if (id1 == muIsoId) - iso1 = muIso->value(lep1.key()); - else if (id1 == standAloneIsoId) - iso1 = standAloneIso->value(lep1.key()); - - if (id2 == muIsoId) - iso2 = muIso->value(lep2.key()); - else if (id2 == standAloneIsoId) - iso2 = standAloneIso->value(lep2.key()); - - double ms = zsmCand.mass(); - if (lep1->pt() > ptSTAcut_ && lep2->pt() > ptSTAcut_ && fabs(lep1->eta()) < etacut_ && - fabs(lep2->eta()) < etacut_ && ms > minZmass_ && ms < maxZmass_ && iso1 < isocut_ && iso2 < isocut_) { - h_zMuSingleStandAlone_mass_->Fill(ms); - ZMuStandalone_passed++; - // check the cynematics to fill correct histograms - for (int j = 0; j < numberOfIntervals; j++) { - double range0 = etamin + j * binEta; - double range1 = range0 + binEta; - double range0phi = phimin + j * binPhi; - double range1phi = range0phi + binPhi; - double range0pt = ptmin + j * binPt; - double range1pt = range0pt + binPt; - - // check which muon is a standalone (standalone means that there is a reference missing.) - if ((lep1->get()).isNull()) { - if (lep1->eta() >= range0 && lep1->eta() < range1) - hmusta_eta[j]->Fill(ms); - if (lep1->phi() >= range0phi && lep1->phi() < range1phi) - hmusta_phi[j]->Fill(ms); - if (lep1->pt() >= range0pt && lep1->pt() < range1pt) - hmusta_pt[j]->Fill(ms); - } - if ((lep2->get()).isNull()) { - if (lep2->eta() >= range0 && lep2->eta() < range1) - hmusta_eta[j]->Fill(ms); - if (lep2->phi() >= range0phi && lep2->phi() < range1phi) - hmusta_phi[j]->Fill(ms); - if (lep2->pt() >= range0pt && lep2->pt() < range1pt) - hmusta_pt[j]->Fill(ms); - } - } - CandMatchMap::const_iterator m0 = zMuStandAloneMap->find(CandRef); - if (m0 != zMuStandAloneMap->end()) { - ZMuStandalone_MCmatched_passed++; - h_zMuSingleStandAloneMatched_mass_->Fill(ms); - } - } - } - } - h_zMuSta_numberOfCand->Fill( - nZStandAloneMu); // number of ZMuStandalone cand found per event (no higher priority Z selected) - h_zMuSta_numberOfCand_notcontained->Fill(ZMuStandalone_notcontained); - h_zMuSta_numberOfCand_passed->Fill( - ZMuStandalone_passed); // number of ZMuSTa cand after all cuts found per event (no higher prioriy Z selected) - h_zMuSta_MCmatched_numberOfCand_passed->Fill( - ZMuStandalone_MCmatched_passed); // number of ZMuSTa MC matched cand after all cuts found per event (no higher prioriy Z selected) - } - - //ZmuSingleTRack (check MuTrack if MuMu has not been selected) - if (ZMuMu_passed == 0 && ZMuStandalone_passed == 0 && nZTrackMu > 0) { - for (unsigned int j = 0; j < nZTrackMu; j++) { - const Candidate& ztmCand = (*zMuTrack)[j]; - bool skipZ = false; - for (unsigned int i = 0; i < nZMuMu; i++) { // chek if the ZMuTrack is contained in a ZMuMu - const Candidate& zmmCand = (*zMuMu)[i]; // if yes .. the event has to be skipped - if (isContained(zmmCand, ztmCand)) - skipZ = true; - } - if (!skipZ) { - ZMuTrack_notcontained++; - CandidateRef CandRef(zMuTrack, j); - CandidateRef lep1 = ztmCand.daughter(0)->masterClone().castTo(); - CandidateRef lep2 = ztmCand.daughter(1)->masterClone().castTo(); - - ProductID id1 = lep1.id(); - ProductID id2 = lep2.id(); - double iso1 = -1; - double iso2 = -1; - - if (id1 == muIsoId) - iso1 = muIso->value(lep1.key()); - else if (id1 == trackIsoId) - iso1 = trackIso->value(lep1.key()); - - if (id2 == muIsoId) - iso2 = muIso->value(lep2.key()); - else if (id2 == trackIsoId) - iso2 = trackIso->value(lep2.key()); - - double mt = ztmCand.mass(); - if (lep1->pt() > ptcut_ && lep2->pt() > ptcut_ && fabs(lep1->eta()) < etacut_ && fabs(lep2->eta()) < etacut_ && - mt > minZmass_ && mt < maxZmass_ && iso1 < isocut_ && iso2 < isocut_) { - h_zMuSingleTrack_mass_->Fill(mt); - ZMuTrack_passed++; - - // check the cynematics to fill correct histograms - for (int j = 0; j < numberOfIntervals; j++) { - double range0 = etamin + j * binEta; - double range1 = range0 + binEta; - double range0phi = phimin + j * binPhi; - double range1phi = range0phi + binPhi; - double range0pt = ptmin + j * binPt; - double range1pt = range0pt + binPt; - - // check which muon is a track only (track only means that there is a reference missing.) - if ((lep1->get()).isNull()) { - if (lep1->eta() >= range0 && lep1->eta() < range1) - hmutrack_eta[j]->Fill(mt); - if (lep1->phi() >= range0phi && lep1->phi() < range1phi) - hmutrack_phi[j]->Fill(mt); - if (lep1->pt() >= range0pt && lep1->pt() < range1pt) - hmutrack_pt[j]->Fill(mt); - } - if ((lep2->get()).isNull()) { - if (lep2->eta() >= range0 && lep2->eta() < range1) - hmutrack_eta[j]->Fill(mt); - if (lep2->phi() >= range0phi && lep2->phi() < range1phi) - hmutrack_phi[j]->Fill(mt); - if (lep2->pt() >= range0pt && lep2->pt() < range1pt) - hmutrack_pt[j]->Fill(mt); - } - } - CandMatchMap::const_iterator m0 = zMuTrackMap->find(CandRef); - if (m0 != zMuTrackMap->end()) { - ZMuTrack_MCmatched_passed++; - h_zMuSingleTrackMatched_mass_->Fill(mt); - } - } - } - } - h_zMuTrack_numberOfCand->Fill( - nZTrackMu); // number of ZMuTrack cand found per event (no higher priority Z selected) - h_zMuTrack_numberOfCand_notcontained->Fill( - ZMuTrack_notcontained); // number of ZMuTrack cand not cntained in ZMuMu (no higher priority Z selected) - - h_zMuTrack_numberOfCand_passed->Fill( - ZMuTrack_passed); // number of ZMuTrack cand after all cuts found per event (no higher priority Z selected) - - h_zMuTrack_MCmatched_numberOfCand_passed->Fill(ZMuTrack_MCmatched_passed); - } -} - -bool ZMuMuAnalyzer_cynematics::isContained(const Candidate& obj1, const Candidate& obj2) { - // check if a candidate obj2 is different from obj1 (assume that obj1 is a ZMuMu and obj2 is any other type) - // (for example a Z can be done with two global muons, or with a global muon plus a standalone muon. - // if the standalone muon is part of the second global muon in fact this is the same Z) - - const int maxd = 10; - const Candidate* daughters1[maxd]; - const Candidate* daughters2[maxd]; - TrackRef trackerTrack1[maxd]; - TrackRef stAloneTrack1[maxd]; - TrackRef globalTrack1[maxd]; - TrackRef trackerTrack2[maxd]; - TrackRef stAloneTrack2[maxd]; - TrackRef globalTrack2[maxd]; - bool flag; - unsigned int nd1 = obj1.numberOfDaughters(); - unsigned int nd2 = obj2.numberOfDaughters(); - unsigned int matched = 0; - - for (unsigned int i = 0; i < nd1; ++i) { - daughters1[i] = obj1.daughter(i); - trackerTrack1[i] = daughters1[i]->get(); - stAloneTrack1[i] = daughters1[i]->get(); - globalTrack1[i] = daughters1[i]->get(); - - /*********************************************** just used for debug ******************** - if (trackerTrack1[i].isNull()) - cout << "in ZMuMu daughter " << i << " tracker ref non found " << endl; - else - cout << "in ZMuMu daughter " << i << " tracker ref FOUND" - << " id: " << trackerTrack1[i].id() << ", index: " << trackerTrack1[i].key() - << endl; - if (stAloneTrack1[i].isNull()) - cout << "in ZMuMu daughter " << i << " stalone ref non found " << endl; - else - cout << "in ZMuMu daughter " << i << " stalone ref FOUND" - << " id: " << stAloneTrack1[i].id() << ", index: " << stAloneTrack1[i].key() - << endl; - - if (globalTrack1[i].isNull()) - cout << "in ZMuMu daughter " << i << " global ref non found " << endl; - else - cout << "in ZMuMu daughter " << i << " global ref FOUND" - << " id: " << globalTrack1[i].id() << ", index: " << globalTrack1[i].key() - << endl; - */ - } - for (unsigned int i = 0; i < nd2; ++i) { - daughters2[i] = obj2.daughter(i); - trackerTrack2[i] = daughters2[i]->get(); - stAloneTrack2[i] = daughters2[i]->get(); - globalTrack2[i] = daughters2[i]->get(); - - /******************************************** just used for debug ************ - if (trackerTrack2[i].isNull()) - cout << "in ZMuSta daughter " << i << " tracker ref non found " << endl; - else - cout << "in ZMuSta daughter " << i << " tracker ref FOUND" - << " id: " << trackerTrack2[i].id() << ", index: " << trackerTrack2[i].key() - << endl; - if (stAloneTrack2[i].isNull()) - cout << "in ZMuSta daughter " << i << " standalone ref non found " << endl; - else - cout << "in ZMuSta daughter " << i << " standalone ref FOUND" - << " id: " << stAloneTrack2[i].id() << ", index: " << stAloneTrack2[i].key() - << endl; - - if (globalTrack2[i].isNull()) - cout << "in ZMuSta daughter " << i << " global ref non found " << endl; - else - cout << "in ZMuSta daughter " << i << " global ref FOUND" - << " id: " << globalTrack2[i].id() << ", index: " << globalTrack2[i].key() - << endl; - - */ - } - if (nd1 != nd2) { - cout << "ZMuMuAnalyzer::isContained WARNING n.of daughters different " << nd1 << " " << nd2 << endl; - } else { - for (unsigned int i = 0; i < nd1; i++) { - flag = false; - for (unsigned int j = 0; j < nd2; - j++) { // if the obj2 is a standalone the trackref is alwais in the trackerTRack position - if (((trackerTrack2[i].id() == trackerTrack1[j].id()) && (trackerTrack2[i].key() == trackerTrack1[j].key())) || - ((trackerTrack2[i].id() == stAloneTrack1[j].id()) && (trackerTrack2[i].key() == stAloneTrack1[j].key()))) { - flag = true; - } - } - if (flag) - matched++; - } - } - if (matched == nd1) // return true if all the childrens of the ZMuMu have a children matched in ZMuXX - return true; - else - return false; -} - -void ZMuMuAnalyzer_cynematics::endJob() { - // candidate analysis - // ZMuMu - double Nzmmc = h_zMuMu_numberOfCand->GetEntries(); - double Nzmmc_0Z = h_zMuMu_numberOfCand->GetBinContent(1); - double Nzmmc_1Z = h_zMuMu_numberOfCand->GetBinContent(2); - double Nzmmc_moreZ = Nzmmc - Nzmmc_0Z - Nzmmc_1Z; - double Nzmmc_passed_0Z = h_zMuMu_numberOfCand_passed->GetBinContent(1); - double Nzmmc_passed_1Z = h_zMuMu_numberOfCand_passed->GetBinContent(2); - double Nzmmc_passed_moreZ = Nzmmc - Nzmmc_passed_0Z - Nzmmc_passed_1Z; - double Nzmmc_ptpassed_0Z = h_zMuMu_numberOfCand_ptpassed->GetBinContent(1); - double Nzmmc_ptpassed_1Z = h_zMuMu_numberOfCand_ptpassed->GetBinContent(2); - double Nzmmc_etapassed_0Z = h_zMuMu_numberOfCand_etapassed->GetBinContent(1); - double Nzmmc_etapassed_1Z = h_zMuMu_numberOfCand_etapassed->GetBinContent(2); - double Nzmmc_masspassed_0Z = h_zMuMu_numberOfCand_masspassed->GetBinContent(1); - double Nzmmc_masspassed_1Z = h_zMuMu_numberOfCand_masspassed->GetBinContent(2); - double Nzmmc_isopassed_0Z = h_zMuMu_numberOfCand_isopassed->GetBinContent(1); - double Nzmmc_isopassed_1Z = h_zMuMu_numberOfCand_isopassed->GetBinContent(2); - double Nzmmc_ptetapassed_0Z = h_zMuMu_numberOfCand_ptetapassed->GetBinContent(1); - double Nzmmc_ptetapassed_1Z = h_zMuMu_numberOfCand_ptetapassed->GetBinContent(2); - double Nzmmc_ptetamasspassed_0Z = h_zMuMu_numberOfCand_ptetamasspassed->GetBinContent(1); - double Nzmmc_ptetamasspassed_1Z = h_zMuMu_numberOfCand_ptetamasspassed->GetBinContent(2); - double Nzmmc_ptpassed_moreZ = Nzmmc - Nzmmc_ptpassed_0Z - Nzmmc_ptpassed_1Z; - double Nzmmc_etapassed_moreZ = Nzmmc - Nzmmc_etapassed_0Z - Nzmmc_etapassed_1Z; - double Nzmmc_masspassed_moreZ = Nzmmc - Nzmmc_masspassed_0Z - Nzmmc_masspassed_1Z; - double Nzmmc_isopassed_moreZ = Nzmmc - Nzmmc_isopassed_0Z - Nzmmc_isopassed_1Z; - double Nzmmc_ptetapassed_moreZ = Nzmmc - Nzmmc_ptetapassed_0Z - Nzmmc_ptetapassed_1Z; - double Nzmmc_ptetamasspassed_moreZ = Nzmmc - Nzmmc_ptetamasspassed_0Z - Nzmmc_ptetamasspassed_1Z; - double Nzmsc = h_zMuSta_numberOfCand->GetEntries(); - double Nzmsc_0Z = h_zMuSta_numberOfCand->GetBinContent(1); - double Nzmsc_1Z = h_zMuSta_numberOfCand->GetBinContent(2); - double Nzmsc_moreZ = Nzmsc - Nzmsc_0Z - Nzmsc_1Z; - double Nzmsc_notcontained_0Z = h_zMuSta_numberOfCand_notcontained->GetBinContent(1); - double Nzmsc_notcontained_1Z = h_zMuSta_numberOfCand_notcontained->GetBinContent(2); - double Nzmsc_notcontained_moreZ = Nzmsc - Nzmsc_notcontained_0Z - Nzmsc_notcontained_1Z; - double Nzmsc_passed_0Z = h_zMuSta_numberOfCand_passed->GetBinContent(1); - double Nzmsc_passed_1Z = h_zMuSta_numberOfCand_passed->GetBinContent(2); - double Nzmsc_passed_moreZ = Nzmsc - Nzmsc_passed_0Z - Nzmsc_passed_1Z; - double Nzmsc_MCmatched_passed_0Z = h_zMuSta_MCmatched_numberOfCand_passed->GetBinContent(1); - double Nzmsc_MCmatched_passed_1Z = h_zMuSta_MCmatched_numberOfCand_passed->GetBinContent(2); - double Nzmsc_MCmatched_passed_moreZ = Nzmsc - Nzmsc_MCmatched_passed_0Z - Nzmsc_MCmatched_passed_1Z; - double Nzmtc = h_zMuTrack_numberOfCand->GetEntries(); - double Nzmtc_0Z = h_zMuTrack_numberOfCand->GetBinContent(1); - double Nzmtc_1Z = h_zMuTrack_numberOfCand->GetBinContent(2); - double Nzmtc_moreZ = Nzmtc - Nzmtc_0Z - Nzmtc_1Z; - double Nzmtc_notcontained_0Z = h_zMuTrack_numberOfCand_notcontained->GetBinContent(1); - double Nzmtc_notcontained_1Z = h_zMuTrack_numberOfCand_notcontained->GetBinContent(2); - double Nzmtc_notcontained_moreZ = Nzmtc - Nzmtc_notcontained_0Z - Nzmtc_notcontained_1Z; - double Nzmtc_passed_0Z = h_zMuTrack_numberOfCand_passed->GetBinContent(1); - double Nzmtc_passed_1Z = h_zMuTrack_numberOfCand_passed->GetBinContent(2); - double Nzmtc_passed_moreZ = Nzmtc - Nzmtc_passed_0Z - Nzmtc_passed_1Z; - double Nzmtc_MCmatched_passed_0Z = h_zMuTrack_MCmatched_numberOfCand_passed->GetBinContent(1); - double Nzmtc_MCmatched_passed_1Z = h_zMuTrack_MCmatched_numberOfCand_passed->GetBinContent(2); - double Nzmtc_MCmatched_passed_moreZ = Nzmtc - Nzmtc_MCmatched_passed_0Z - Nzmtc_MCmatched_passed_1Z; - - cout << "--------------- Statistics ----------------------------------------------------------" << endl; - cout << "n of ZMuMu entries ...................................................... " << Nzmmc << endl; - cout << "n of ZMuMu events with 0 cand ............................................. " << Nzmmc_0Z << endl; - cout << "n of ZMuMu events with 1 cand ............................................. " << Nzmmc_1Z << endl; - cout << "n of ZMuMu events with 2 or more cand ..................................... " << Nzmmc_moreZ << endl << endl; - - cout << "n of ZMuMu events not selected by cuts .................................... " << Nzmmc_passed_0Z << endl; - cout << "n of ZMuMu events with 1 cand selected by cuts ............................ " << Nzmmc_passed_1Z << endl; - cout << "n of ZMuMu events with 2 or more cand elected by cuts ..................... " << Nzmmc_passed_moreZ << endl - << endl; - - cout << "n of ZMuMu events not selected by pt cut .................................. " << Nzmmc_ptpassed_0Z << endl; - cout << "n of ZMuMu events with 1 cand selected by pt cut .......................... " << Nzmmc_ptpassed_1Z << endl; - cout << "n of ZMuMu events with 2 or more cand elected by pt cut ................... " << Nzmmc_ptpassed_moreZ << endl - << endl; - - cout << "n of ZMuMu events not selected by eta cut ................................. " << Nzmmc_etapassed_0Z << endl; - cout << "n of ZMuMu events with 1 cand selected by eta cut ......................... " << Nzmmc_etapassed_1Z << endl; - cout << "n of ZMuMu events with 2 or more cand elected by eta cut .................. " << Nzmmc_etapassed_moreZ - << endl - << endl; - - cout << "n of ZMuMu events not selected by mass cut ................................ " << Nzmmc_masspassed_0Z << endl; - cout << "n of ZMuMu events with 1 cand selected by mass cut ........................ " << Nzmmc_masspassed_1Z << endl; - cout << "n of ZMuMu events with 2 or more cand elected by mass cut ................. " << Nzmmc_masspassed_moreZ - << endl - << endl; - - cout << "n of ZMuMu events not selected by iso cut ................................. " << Nzmmc_isopassed_0Z << endl; - cout << "n of ZMuMu events with 1 cand selected iso cut ............................ " << Nzmmc_isopassed_1Z << endl; - cout << "n of ZMuMu events with 2 or more cand elected iso cut ..................... " << Nzmmc_isopassed_moreZ - << endl - << endl; - - cout << "n of ZMuMu events not selected by pt and eta cut .......................... " << Nzmmc_ptetapassed_0Z - << endl; - cout << "n of ZMuMu events with 1 cand selected by pt and eta cut .................. " << Nzmmc_ptetapassed_1Z - << endl; - cout << "n of ZMuMu events with 2 or more cand elected by pt and eta cut ........... " << Nzmmc_ptetapassed_moreZ - << endl - << endl; - - cout << "n of ZMuMu events not selected by pt and eta and mass cut ................. " << Nzmmc_ptetamasspassed_0Z - << endl; - cout << "n of ZMuMu events with 1 cand selected by pt and eta and mass cut ......... " << Nzmmc_ptetamasspassed_1Z - << endl; - cout << "n of ZMuMu events with 2 or more cand elected by pt and eta and mass cut .. " << Nzmmc_ptetamasspassed_moreZ - << endl - << endl; - - cout << "................When No ZMuMu are selected.................................." << endl; - cout << "n of ZMuSta entries ....................................................... " << Nzmsc << endl; - cout << "n of ZMuSta events with 0 cand ............................................ " << Nzmsc_0Z << endl; - cout << "n of ZMuSta events with 1 cand ............................................ " << Nzmsc_1Z << endl; - cout << "n of ZMuSta events with 2 or more cand .................................... " << Nzmsc_moreZ << endl << endl; - - cout << "n of ZMuSta not contained events with 0 cand .............................. " << Nzmsc_notcontained_0Z - << endl; - cout << "n of ZMuSta events not contained with 1 cand .............................. " << Nzmsc_notcontained_1Z - << endl; - cout << "n of ZMuSta events no contained with 2 or more cand ....................... " << Nzmsc_notcontained_moreZ - << endl - << endl; - - cout << "n of ZMuSta cand not selectd by cuts ...................................... " << Nzmsc_passed_0Z << endl; - cout << "n of ZMuSta events with 1 cand selected by cuts ........................... " << Nzmsc_passed_1Z << endl; - cout << "n of ZMuSta events with 2 or more cand selected by cuts ................... " << Nzmsc_passed_moreZ << endl - << endl; - - cout << "n of ZMuSta MCmatched cand not selectd by cuts ............................ " << Nzmsc_MCmatched_passed_0Z - << endl; - cout << "n of ZMuSta MCmatched events with 1 cand selected by cuts ................. " << Nzmsc_MCmatched_passed_1Z - << endl; - cout << "n of ZMuSta MCmatched events with 2 or more cand selected by cuts ......... " << Nzmsc_MCmatched_passed_moreZ - << endl - << endl; - - cout << "...............When no ZMuMu and ZMuSta are selcted........................." << endl; - cout << "n of ZMuTrack entries ................................................... " << Nzmtc << endl; - cout << "n of ZMuTrack events with 0 cand ..........................................." << Nzmtc_0Z << endl; - cout << "n of ZMuTrack events with 1 cand ..........................................." << Nzmtc_1Z << endl; - cout << "n of ZMuTrack events with 2 or more cand ..................................." << Nzmtc_moreZ << endl << endl; - - cout << "n of ZMuTrack not contained events with 0 cand ............................ " << Nzmtc_notcontained_0Z - << endl; - cout << "n of ZMuTrack events not contained with 1 cand ............................ " << Nzmtc_notcontained_1Z - << endl; - cout << "n of ZMuTrack events no contained with 2 or more cand ..................... " << Nzmtc_notcontained_moreZ - << endl - << endl; - - cout << "n of ZMuTrack cand not selectd by cuts ....................................." << Nzmtc_passed_0Z << endl; - cout << "n of ZMuTrack events with 1 cand selected by cuts .........................." << Nzmtc_passed_1Z << endl; - cout << "n of ZMuTrack events with 2 or more cand selected by cuts .................." << Nzmtc_passed_moreZ << endl - << endl; - - cout << "n of ZMuTrack MCmatched cand not selectd by cuts .......................... " << Nzmtc_MCmatched_passed_0Z - << endl; - cout << "n of ZMuTrcak MCmatched events with 1 cand selected by cuts ............... " << Nzmtc_MCmatched_passed_1Z - << endl; - cout << "n of ZMuTrack MCmatched events with 2 or more cand selected by cuts ....... " << Nzmtc_MCmatched_passed_moreZ - << endl; - - cout << "------------------------------------------------------------------------------------------" << endl; - - double Nzmm = h_zMuMu_mass_->GetEntries(); - double Nzsm = h_zMuSingleStandAlone_mass_->GetEntries(); - double Nzsnom = h_zMuSingleStandAloneOverlap_mass_->GetEntries(); - double Nztm = h_zMuSingleTrack_mass_->GetEntries(); - - double NzmmMatch = h_zMuMuMatched_mass_->GetEntries(); - double NzsmMatch = h_zMuSingleStandAloneMatched_mass_->GetEntries(); - double NzsnomMatch = h_zMuSingleStandAloneOverlapMatched_mass_->GetEntries(); - double NztmMatch = h_zMuSingleTrackMatched_mass_->GetEntries(); - - cout << "-- N SingleTrackMu = " << Nztm << endl; - cout << "-----N SinglStandAloneMu = " << Nzsm << endl; - cout << "-----N SingleStandAloneOverlapMu = " << Nzsnom << endl; - cout << "------- N MuMu = " << Nzmm << endl; - - cout << "-- N SingleTrackMuMatched = " << NztmMatch << endl; - cout << "-----N SinglStandAloneMuMatched = " << NzsmMatch << endl; - cout << "-----N SingleStandAloneOverlapMuMatched = " << NzsnomMatch << endl; - cout << "------- N MuMu Matched = " << NzmmMatch << endl; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuMuAnalyzer_cynematics); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuEfficiency.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuEfficiency.cc deleted file mode 100644 index 3a9a50d9a0d2c..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuEfficiency.cc +++ /dev/null @@ -1,758 +0,0 @@ -/* \class ZMuMuEfficiency - * - * author: Pasquale Noli - * revised by Salvatore di Guida - * revised for CSA08 by Davide Piccolo - * - * Efficiency of reconstruction tracker and muon Chamber - * - */ - -#include "DataFormats/Common/interface/AssociationVector.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Candidate/interface/OverlapChecker.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/Candidate/interface/CandAssociation.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "TH1.h" -#include - -using namespace edm; -using namespace std; -using namespace reco; - -typedef ValueMap IsolationCollection; - -class ZMuMuEfficiency : public edm::EDAnalyzer { -public: - ZMuMuEfficiency(const edm::ParameterSet &pset); - -private: - void analyze(const edm::Event &event, const edm::EventSetup &setup) override; - bool check_ifZmumu(const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - float getParticlePt(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - float getParticleEta(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - float getParticlePhi(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - Particle::LorentzVector getParticleP4(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2); - void endJob() override; - - EDGetTokenT zMuMuToken_; - EDGetTokenT zMuMuMatchMapToken_; - EDGetTokenT zMuTrackToken_; - EDGetTokenT zMuTrackMatchMapToken_; - EDGetTokenT zMuStandAloneToken_; - EDGetTokenT zMuStandAloneMatchMapToken_; - EDGetTokenT muonsToken_; - EDGetTokenT muonMatchMapToken_; - EDGetTokenT muonIsoToken_; - EDGetTokenT tracksToken_; - EDGetTokenT trackIsoToken_; - EDGetTokenT standAloneToken_; - EDGetTokenT standAloneIsoToken_; - EDGetTokenT genParticlesToken_; - - double zMassMin_, zMassMax_, ptmin_, etamax_, isomax_; - unsigned int nbinsPt_, nbinsEta_; - reco::CandidateBaseRef globalMuonCandRef_, trackMuonCandRef_, standAloneMuonCandRef_; - OverlapChecker overlap_; - - //histograms for measuring tracker efficiency - TH1D *h_etaStandAlone_, *h_etaMuonOverlappedToStandAlone_; - TH1D *h_ptStandAlone_, *h_ptMuonOverlappedToStandAlone_; - - //histograms for measuring standalone efficiency - TH1D *h_etaTrack_, *h_etaMuonOverlappedToTrack_; - TH1D *h_ptTrack_, *h_ptMuonOverlappedToTrack_; - - //histograms for MC acceptance - TH1D *h_nZMCfound_; - TH1D *h_ZetaGen_, *h_ZptGen_, *h_ZmassGen_; - TH1D *h_muetaGen_, *h_muptGen_, *h_muIsoGen_; - TH1D *h_dimuonPtGen_, *h_dimuonMassGen_, *h_dimuonEtaGen_; - TH1D *h_ZetaGenPassed_, *h_ZptGenPassed_, *h_ZmassGenPassed_; - TH1D *h_muetaGenPassed_, *h_muptGenPassed_, *h_muIsoGenPassed_; - TH1D *h_dimuonPtGenPassed_, *h_dimuonMassGenPassed_, *h_dimuonEtaGenPassed_; - //histograms for invarian mass resolution - TH1D *h_DELTA_ZMuMuMassReco_dimuonMassGen_, *h_DELTA_ZMuStaMassReco_dimuonMassGen_, - *h_DELTA_ZMuTrackMassReco_dimuonMassGen_; - - int numberOfEventsWithZMuMufound, numberOfEventsWithZMuStafound; - int numberOfMatchedZMuSta_, numberOfMatchedSelectedZMuSta_; - int numberOfMatchedZMuMu_, numberOfMatchedSelectedZMuMu_; - int numberOfOverlappedStandAlone_, numberOfOverlappedTracks_, numberOfMatchedZMuTrack_notOverlapped; - int numberOfMatchedZMuTrack_exclusive, numberOfMatchedSelectedZMuTrack_exclusive; - int numberOfMatchedZMuTrack_matchedZMuMu, numberOfMatchedZMuTrack_matchedSelectedZMuMu; - int totalNumberOfevents, totalNumberOfZfound, totalNumberOfZPassed; - int noMCmatching, ZMuTrack_exclusive_1match, ZMuTrack_exclusive_morematch; - int ZMuTrackselected_exclusive_1match, ZMuTrackselected_exclusive_morematch; - int ZMuTrack_ZMuMu_1match, ZMuTrack_ZMuMu_2match, ZMuTrack_ZMuMu_morematch; - - int n_zMuMufound_genZsele, n_zMuStafound_genZsele, n_zMuTrkfound_genZsele; -}; - -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "DataFormats/Common/interface/Handle.h" -#include -#include -#include - -ZMuMuEfficiency::ZMuMuEfficiency(const ParameterSet &pset) - : zMuMuToken_(consumes(pset.getParameter("zMuMu"))), - zMuMuMatchMapToken_(mayConsume(pset.getParameter("zMuMuMatchMap"))), - zMuTrackToken_(consumes(pset.getParameter("zMuTrack"))), - zMuTrackMatchMapToken_(mayConsume(pset.getParameter("zMuTrackMatchMap"))), - zMuStandAloneToken_(consumes(pset.getParameter("zMuStandAlone"))), - zMuStandAloneMatchMapToken_(mayConsume(pset.getParameter("zMuStandAloneMatchMap"))), - muonsToken_(consumes(pset.getParameter("muons"))), - muonMatchMapToken_(mayConsume(pset.getParameter("muonMatchMap"))), - muonIsoToken_(mayConsume(pset.getParameter("muonIso"))), - tracksToken_(consumes(pset.getParameter("tracks"))), - trackIsoToken_(mayConsume(pset.getParameter("trackIso"))), - standAloneToken_(consumes(pset.getParameter("standAlone"))), - standAloneIsoToken_(mayConsume(pset.getParameter("standAloneIso"))), - genParticlesToken_(consumes(pset.getParameter("genParticles"))), - - zMassMin_(pset.getUntrackedParameter("zMassMin")), - zMassMax_(pset.getUntrackedParameter("zMassMax")), - ptmin_(pset.getUntrackedParameter("ptmin")), - etamax_(pset.getUntrackedParameter("etamax")), - isomax_(pset.getUntrackedParameter("isomax")), - nbinsPt_(pset.getUntrackedParameter("nbinsPt")), - nbinsEta_(pset.getUntrackedParameter("nbinsEta")) { - Service fs; - TFileDirectory trackEffDir = fs->mkdir("TrackEfficiency"); - - // tracker efficiency distributions - h_etaStandAlone_ = trackEffDir.make( - "StandAloneMuonEta", "StandAlone #eta for Z -> #mu + standalone", nbinsEta_, -etamax_, etamax_); - h_etaMuonOverlappedToStandAlone_ = - trackEffDir.make("MuonOverlappedToStandAloneEta", - "Global muon overlapped to standAlone #eta for Z -> #mu + sa", - nbinsEta_, - -etamax_, - etamax_); - h_ptStandAlone_ = - trackEffDir.make("StandAloneMuonPt", "StandAlone p_{t} for Z -> #mu + standalone", nbinsPt_, ptmin_, 100); - h_ptMuonOverlappedToStandAlone_ = - trackEffDir.make("MuonOverlappedToStandAlonePt", - "Global muon overlapped to standAlone p_{t} for Z -> #mu + sa", - nbinsPt_, - ptmin_, - 100); - - // StandAlone efficiency distributions - TFileDirectory standaloneEffDir = fs->mkdir("StandaloneEfficiency"); - h_etaTrack_ = - standaloneEffDir.make("TrackMuonEta", "Track #eta for Z -> #mu + track", nbinsEta_, -etamax_, etamax_); - h_etaMuonOverlappedToTrack_ = standaloneEffDir.make("MuonOverlappedToTrackEta", - "Global muon overlapped to track #eta for Z -> #mu + tk", - nbinsEta_, - -etamax_, - etamax_); - h_ptTrack_ = standaloneEffDir.make("TrackMuonPt", "Track p_{t} for Z -> #mu + track", nbinsPt_, ptmin_, 100); - h_ptMuonOverlappedToTrack_ = standaloneEffDir.make( - "MuonOverlappedToTrackPt", "Global muon overlapped to track p_{t} for Z -> #mu + tk", nbinsPt_, ptmin_, 100); - - // inv. mass resolution studies - TFileDirectory invMassResolutionDir = fs->mkdir("invriantMassResolution"); - h_DELTA_ZMuMuMassReco_dimuonMassGen_ = - invMassResolutionDir.make("zMuMu_invMassResolution", "zMuMu invariant Mass Resolution", 50, -25, 25); - h_DELTA_ZMuStaMassReco_dimuonMassGen_ = - invMassResolutionDir.make("zMuSta_invMassResolution", "zMuSta invariant Mass Resolution", 50, -25, 25); - h_DELTA_ZMuTrackMassReco_dimuonMassGen_ = - invMassResolutionDir.make("zMuTrack_invMassResolution", "zMuTrack invariant Mass Resolution", 50, -25, 25); - - // generator level histograms - TFileDirectory genParticleDir = fs->mkdir("genParticle"); - h_nZMCfound_ = genParticleDir.make("NumberOfgeneratedZeta", "n. of generated Z per event", 4, -.5, 3.5); - h_ZetaGen_ = genParticleDir.make("generatedZeta", "#eta of generated Z", 100, -5., 5.); - h_ZptGen_ = genParticleDir.make("generatedZpt", "pt of generated Z", 100, 0., 200.); - h_ZmassGen_ = genParticleDir.make("generatedZmass", "mass of generated Z", 100, 0., 200.); - h_muetaGen_ = genParticleDir.make("generatedMuonEta", "#eta of generated muons from Z decay", 100, -5., 5.); - h_muptGen_ = genParticleDir.make("generatedMuonpt", "pt of generated muons from Z decay", 100, 0., 200.); - h_dimuonEtaGen_ = genParticleDir.make("generatedDimuonEta", "#eta of generated dimuon", 100, -5., 5.); - h_dimuonPtGen_ = genParticleDir.make("generatedDimuonPt", "pt of generated dimuon", 100, 0., 200.); - h_dimuonMassGen_ = genParticleDir.make("generatedDimuonMass", "mass of generated dimuon", 100, 0., 200.); - h_ZetaGenPassed_ = genParticleDir.make("generatedZeta_passed", "#eta of generated Z after cuts", 100, -5., 5.); - h_ZptGenPassed_ = genParticleDir.make("generatedZpt_passed", "pt of generated Z after cuts", 100, 0., 200.); - h_ZmassGenPassed_ = - genParticleDir.make("generatedZmass_passed", "mass of generated Z after cuts", 100, 0., 200.); - h_muetaGenPassed_ = genParticleDir.make( - "generatedMuonEta_passed", "#eta of generated muons from Z decay after cuts", 100, -5., 5.); - h_muptGenPassed_ = genParticleDir.make( - "generatedMuonpt_passed", "pt of generated muons from Z decay after cuts", 100, 0., 200.); - h_dimuonEtaGenPassed_ = - genParticleDir.make("generatedDimuonEta_passed", "#eta of generated dimuon after cuts", 100, -5., 5.); - h_dimuonPtGenPassed_ = - genParticleDir.make("generatedDimuonPt_passed", "pt of generated dimuon after cuts", 100, 0., 200.); - h_dimuonMassGenPassed_ = - genParticleDir.make("generatedDimuonMass_passed", "mass of generated dimuon after cuts", 100, 0., 200.); - // to insert isolation histograms .............. - - numberOfEventsWithZMuMufound = 0; - numberOfEventsWithZMuStafound = 0; - numberOfMatchedZMuMu_ = 0; - numberOfMatchedSelectedZMuMu_ = 0; - numberOfMatchedZMuSta_ = 0; - numberOfMatchedSelectedZMuSta_ = 0; - numberOfMatchedZMuTrack_matchedZMuMu = 0; - numberOfMatchedZMuTrack_matchedSelectedZMuMu = 0; - numberOfMatchedZMuTrack_exclusive = 0; - numberOfMatchedSelectedZMuTrack_exclusive = 0; - numberOfOverlappedStandAlone_ = 0; - numberOfOverlappedTracks_ = 0; - numberOfMatchedZMuTrack_notOverlapped = 0; - noMCmatching = 0; - ZMuTrack_exclusive_1match = 0; - ZMuTrack_exclusive_morematch = 0; - ZMuTrackselected_exclusive_1match = 0; - ZMuTrackselected_exclusive_morematch = 0; - ZMuTrack_ZMuMu_1match = 0; - ZMuTrack_ZMuMu_2match = 0; - ZMuTrack_ZMuMu_morematch = 0; - - n_zMuMufound_genZsele = 0; - n_zMuStafound_genZsele = 0; - n_zMuTrkfound_genZsele = 0; - - // generator counters - totalNumberOfevents = 0; - totalNumberOfZfound = 0; - totalNumberOfZPassed = 0; -} - -void ZMuMuEfficiency::analyze(const Event &event, const EventSetup &setup) { - Handle zMuMu; - Handle zMuMuMatchMap; //Map of Z made by Mu global + Mu global - Handle zMuTrack; - Handle zMuTrackMatchMap; //Map of Z made by Mu + Track - Handle zMuStandAlone; - Handle zMuStandAloneMatchMap; //Map of Z made by Mu + StandAlone - Handle muons; //Collection of Muons - Handle muonMatchMap; - Handle muonIso; - Handle tracks; //Collection of Tracks - Handle trackIso; - Handle standAlone; //Collection of StandAlone - Handle standAloneIso; - Handle genParticles; // Collection of Generatd Particles - - event.getByToken(zMuMuToken_, zMuMu); - event.getByToken(zMuTrackToken_, zMuTrack); - event.getByToken(zMuStandAloneToken_, zMuStandAlone); - event.getByToken(muonsToken_, muons); - event.getByToken(tracksToken_, tracks); - event.getByToken(standAloneToken_, standAlone); - event.getByToken(genParticlesToken_, genParticles); - - cout << "********* zMuMu size : " << zMuMu->size() << endl; - cout << "********* zMuStandAlone size : " << zMuStandAlone->size() << endl; - cout << "********* zMuTrack size : " << zMuTrack->size() << endl; - cout << "********* muons size : " << muons->size() << endl; - cout << "********* standAlone size : " << standAlone->size() << endl; - cout << "********* tracks size : " << tracks->size() << endl; - cout << "********* generated size : " << genParticles->size() << endl; - - // generator level distributions - - int nZMCfound = 0; - totalNumberOfevents++; - int ngen = genParticles->size(); - bool ZMuMuMatchedfound = false; - bool ZMuMuMatchedSelectedfound = false; - bool ZMuStaMatchedfound = false; - //bool ZMuStaMatchedSelectedfound = false; - int ZMuTrackMatchedfound = 0; - int ZMuTrackMatchedSelected_exclusivefound = 0; - - double dimuonMassGen = 0; - - for (int i = 0; i < ngen; i++) { - const Candidate &genCand = (*genParticles)[i]; - - // if((genCand.pdgId() == 23) && (genCand.status() == 2)) //this is an intermediate Z0 - // cout << ">>> intermediate Z0 found, with " << genCand.numberOfDaughters() << " daughters" << endl; - if ((genCand.pdgId() == 23) && (genCand.status() == 3)) { //this is a Z0 - if (genCand.numberOfDaughters() == 3) { // possible Z0 decays in mu+ mu-, the 3rd daughter is the same Z0 - const Candidate *dauGen0 = genCand.daughter(0); - const Candidate *dauGen1 = genCand.daughter(1); - const Candidate *dauGen2 = genCand.daughter(2); - if (check_ifZmumu(dauGen0, dauGen1, dauGen2)) { // Z0 in mu+ mu- - totalNumberOfZfound++; - nZMCfound++; - bool checkpt = false; - bool checketa = false; - bool checkmass = false; - float mupluspt, muminuspt, mupluseta, muminuseta; - mupluspt = getParticlePt(-13, dauGen0, dauGen1, dauGen2); - muminuspt = getParticlePt(13, dauGen0, dauGen1, dauGen2); - mupluseta = getParticleEta(-13, dauGen0, dauGen1, dauGen2); - muminuseta = getParticleEta(13, dauGen0, dauGen1, dauGen2); - //float muplusphi = getParticlePhi(-13,dauGen0,dauGen1,dauGen2); - //float muminusphi = getParticlePhi(13,dauGen0,dauGen1,dauGen2); - Particle::LorentzVector pZ(0, 0, 0, 0); - Particle::LorentzVector muplusp4 = getParticleP4(-13, dauGen0, dauGen1, dauGen2); - Particle::LorentzVector muminusp4 = getParticleP4(13, dauGen0, dauGen1, dauGen2); - pZ = muplusp4 + muminusp4; - double dimuon_pt = sqrt(pZ.x() * pZ.x() + pZ.y() * pZ.y()); - double tan_theta_half = tan(atan(dimuon_pt / pZ.z()) / 2.); - double dimuon_eta = 0.; - if (tan_theta_half > 0) - dimuon_eta = -log(tan(tan_theta_half)); - if (tan_theta_half <= 0) - dimuon_eta = log(tan(-tan_theta_half)); - - dimuonMassGen = pZ.mass(); // dimuon invariant Mass at Generator Level - - h_ZmassGen_->Fill(genCand.mass()); - h_ZetaGen_->Fill(genCand.eta()); - h_ZptGen_->Fill(genCand.pt()); - h_dimuonMassGen_->Fill(pZ.mass()); - h_dimuonEtaGen_->Fill(dimuon_eta); - h_dimuonPtGen_->Fill(dimuon_pt); - h_muetaGen_->Fill(mupluseta); - h_muetaGen_->Fill(muminuseta); - h_muptGen_->Fill(mupluspt); - h_muptGen_->Fill(muminuspt); - // dimuon 4-momentum - // h_mDimuonMC->Fill(pZ.mass()); - // h_ZminusDimuonMassMC->Fill(genCand.mass()-pZ.mass()); - // h_DeltaPhiMC->Fill(deltaPhi(muplusphi,muminusphi)); - // if (dauGen2==23) float z_eta = dauGen2->eta(); - // if (dauGen2==23) float Zpt = dauGen2->pt(); - // h_DeltaPhivsZPtMC->Fill(DeltaPhi(muplusphi,muminusphi),ZPt); - - if (mupluspt > ptmin_ && muminuspt > ptmin_) - checkpt = true; - if (mupluseta < etamax_ && muminuseta < etamax_) - checketa = true; - if (genCand.mass() > zMassMin_ && genCand.mass() < zMassMax_) - checkmass = true; - if (checkpt && checketa && checkmass) { - totalNumberOfZPassed++; - h_ZmassGenPassed_->Fill(genCand.mass()); - h_ZetaGenPassed_->Fill(genCand.eta()); - h_ZptGenPassed_->Fill(genCand.pt()); - h_dimuonMassGenPassed_->Fill(pZ.mass()); - h_dimuonEtaGenPassed_->Fill(dimuon_eta); - h_dimuonPtGenPassed_->Fill(dimuon_pt); - h_muetaGenPassed_->Fill(mupluseta); - h_muetaGenPassed_->Fill(muminuseta); - h_muptGenPassed_->Fill(mupluspt); - h_muptGenPassed_->Fill(muminuspt); - - if (!zMuMu->empty()) { - n_zMuMufound_genZsele++; - } else if (!zMuStandAlone->empty()) { - n_zMuStafound_genZsele++; - } else { - n_zMuTrkfound_genZsele++; - } - } - } - } - } - } - h_nZMCfound_->Fill(nZMCfound); // number of Z found in the event at generator level - - //TRACK efficiency (conto numero di eventi Zmumu global e ZmuSta (ricorda che sono due campioni esclusivi) - - if (!zMuMu->empty()) { - numberOfEventsWithZMuMufound++; - event.getByToken(zMuMuMatchMapToken_, zMuMuMatchMap); - event.getByToken(muonIsoToken_, muonIso); - event.getByToken(standAloneIsoToken_, standAloneIso); - event.getByToken(muonMatchMapToken_, muonMatchMap); - for (unsigned int i = 0; i < zMuMu->size(); ++i) { //loop on candidates - const Candidate &zMuMuCand = (*zMuMu)[i]; //the candidate - CandidateBaseRef zMuMuCandRef = zMuMu->refAt(i); - bool isMatched = false; - GenParticleRef zMuMuMatch = (*zMuMuMatchMap)[zMuMuCandRef]; - - if (zMuMuMatch.isNonnull()) { // ZMuMu matched - isMatched = true; - numberOfMatchedZMuMu_++; - } - CandidateBaseRef dau0 = zMuMuCand.daughter(0)->masterClone(); - CandidateBaseRef dau1 = zMuMuCand.daughter(1)->masterClone(); - if (isMatched) - ZMuMuMatchedfound = true; - - // Cuts - if ((dau0->pt() > ptmin_) && (dau1->pt() > ptmin_) && (fabs(dau0->eta()) < etamax_) && - (fabs(dau1->eta()) < etamax_) && (zMuMuCand.mass() > zMassMin_) && (zMuMuCand.mass() < zMassMax_) && - (isMatched)) { - //The Z daughters are already matched! - const double globalMuonIsolation0 = (*muonIso)[dau0]; - const double globalMuonIsolation1 = (*muonIso)[dau1]; - if ((globalMuonIsolation0 < isomax_) && - (globalMuonIsolation1 < isomax_)) { // ZMuMu matched and selected by cuts - ZMuMuMatchedSelectedfound = true; - numberOfMatchedSelectedZMuMu_++; - h_etaStandAlone_->Fill(dau0->eta()); // StandAlone found dau0, eta - h_etaStandAlone_->Fill(dau1->eta()); // StandAlone found dau1, eta - h_etaMuonOverlappedToStandAlone_->Fill(dau0->eta()); // is global muon so dau0 is also found as a track, eta - h_etaMuonOverlappedToStandAlone_->Fill(dau1->eta()); // is global muon so dau1 is also found as a track, eta - h_ptStandAlone_->Fill(dau0->pt()); // StandAlone found dau0, pt - h_ptStandAlone_->Fill(dau1->pt()); // StandAlone found dau1, pt - h_ptMuonOverlappedToStandAlone_->Fill(dau0->pt()); // is global muon so dau0 is also found as a track, pt - h_ptMuonOverlappedToStandAlone_->Fill(dau1->pt()); // is global muon so dau1 is also found as a track, pt - - h_etaTrack_->Fill(dau0->eta()); // Track found dau0, eta - h_etaTrack_->Fill(dau1->eta()); // Track found dau1, eta - h_etaMuonOverlappedToTrack_->Fill(dau0->eta()); // is global muon so dau0 is also found as a StandAlone, eta - h_etaMuonOverlappedToTrack_->Fill(dau1->eta()); // is global muon so dau1 is also found as a StandAlone, eta - h_ptTrack_->Fill(dau0->pt()); // Track found dau0, pt - h_ptTrack_->Fill(dau1->pt()); // Track found dau1, pt - h_ptMuonOverlappedToTrack_->Fill(dau0->pt()); // is global muon so dau0 is also found as a StandAlone, pt - h_ptMuonOverlappedToTrack_->Fill(dau1->pt()); // is global muon so dau1 is also found as a StandAlone, pt - - h_DELTA_ZMuMuMassReco_dimuonMassGen_->Fill(zMuMuCand.mass() - dimuonMassGen); - // check that the two muons are matched . .per ora è solo un mio controllo - for (unsigned int j = 0; j < muons->size(); ++j) { - CandidateBaseRef muCandRef = muons->refAt(j); - GenParticleRef muonMatch = (*muonMatchMap)[muCandRef]; - // if (muonMatch.isNonnull()) cout << "mu match n. " << j << endl; - } - } - } - } - } - - if (!zMuStandAlone->empty()) { - numberOfEventsWithZMuStafound++; - event.getByToken(zMuStandAloneMatchMapToken_, zMuStandAloneMatchMap); - event.getByToken(muonIsoToken_, muonIso); - event.getByToken(standAloneIsoToken_, standAloneIso); - event.getByToken(muonMatchMapToken_, muonMatchMap); - for (unsigned int i = 0; i < zMuStandAlone->size(); ++i) { //loop on candidates - const Candidate &zMuStaCand = (*zMuStandAlone)[i]; //the candidate - CandidateBaseRef zMuStaCandRef = zMuStandAlone->refAt(i); - bool isMatched = false; - GenParticleRef zMuStaMatch = (*zMuStandAloneMatchMap)[zMuStaCandRef]; - if (zMuStaMatch.isNonnull()) { // ZMuSta Macthed - isMatched = true; - ZMuStaMatchedfound = true; - numberOfMatchedZMuSta_++; - } - CandidateBaseRef dau0 = zMuStaCand.daughter(0)->masterClone(); - CandidateBaseRef dau1 = zMuStaCand.daughter(1)->masterClone(); - - // Cuts - if ((dau0->pt() > ptmin_) && (dau1->pt() > ptmin_) && (fabs(dau0->eta()) < etamax_) && - (fabs(dau1->eta()) < etamax_) && (zMuStaCand.mass() > zMassMin_) && (zMuStaCand.mass() < zMassMax_) && - (isMatched)) { - CandidateBaseRef standAloneMuonCandRef_, globalMuonCandRef_; - if (dau0->isGlobalMuon()) { - standAloneMuonCandRef_ = dau1; - globalMuonCandRef_ = dau0; - } - if (dau1->isGlobalMuon()) { - standAloneMuonCandRef_ = dau0; - globalMuonCandRef_ = dau1; - } - - const double globalMuonIsolation = (*muonIso)[globalMuonCandRef_]; - const double standAloneMuonIsolation = (*standAloneIso)[standAloneMuonCandRef_]; - - if ((globalMuonIsolation < isomax_) && (standAloneMuonIsolation < isomax_)) { // ZMuSta matched and selected - //ZMuStaMatchedSelectedfound = true; - numberOfMatchedSelectedZMuSta_++; - h_etaStandAlone_->Fill(standAloneMuonCandRef_->eta()); //Denominator eta for measuring track efficiency - h_ptStandAlone_->Fill(standAloneMuonCandRef_->pt()); //Denominator pt for measuring track eff - h_DELTA_ZMuStaMassReco_dimuonMassGen_->Fill( - zMuStaCand.mass() - dimuonMassGen); // differnce between ZMuSta reco and dimuon mass gen - } - } - } - } //end loop on Candidate - - //STANDALONE efficiency - - if (!zMuTrack->empty()) { - event.getByToken(zMuTrackMatchMapToken_, zMuTrackMatchMap); - event.getByToken(muonIsoToken_, muonIso); - event.getByToken(trackIsoToken_, trackIso); - event.getByToken(muonMatchMapToken_, muonMatchMap); - for (unsigned int i = 0; i < zMuTrack->size(); ++i) { //loop on candidates - const Candidate &zMuTrkCand = (*zMuTrack)[i]; //the candidate - CandidateBaseRef zMuTrkCandRef = zMuTrack->refAt(i); - bool isMatched = false; - GenParticleRef zMuTrkMatch = (*zMuTrackMatchMap)[zMuTrkCandRef]; - if (zMuTrkMatch.isNonnull()) { - isMatched = true; - } - CandidateBaseRef dau0 = zMuTrkCand.daughter(0)->masterClone(); - CandidateBaseRef dau1 = zMuTrkCand.daughter(1)->masterClone(); - - if (isMatched) { - ZMuTrackMatchedfound++; - if (ZMuMuMatchedfound) - numberOfMatchedZMuTrack_matchedZMuMu++; - if (ZMuMuMatchedSelectedfound) - numberOfMatchedZMuTrack_matchedSelectedZMuMu++; - if (!ZMuMuMatchedfound) - numberOfMatchedZMuTrack_exclusive++; - } - // Cuts - if ((dau0->pt() > ptmin_) && (dau1->pt() > ptmin_) && (fabs(dau0->eta()) < etamax_) && - (fabs(dau1->eta()) < etamax_) && (zMuTrkCand.mass() > zMassMin_) && (zMuTrkCand.mass() < zMassMax_) && - (isMatched) && !ZMuMuMatchedfound && !ZMuStaMatchedfound) { - // dau0 is always the global muon, dau1 is the track for ZMuTrack collection - const double globalMuonIsolation = (*muonIso)[dau0]; - const double trackMuonIsolation = (*trackIso)[dau1]; - if ((globalMuonIsolation < isomax_) && - (trackMuonIsolation < isomax_)) { // ZMuTRack matched - selected without ZMuMu found (exclusive) - numberOfMatchedSelectedZMuTrack_exclusive++; - ZMuTrackMatchedSelected_exclusivefound++; - h_etaTrack_->Fill(dau1->eta()); //Denominator eta Sta - h_ptTrack_->Fill(dau1->pt()); //Denominator pt Sta - h_DELTA_ZMuTrackMassReco_dimuonMassGen_->Fill(zMuTrkCand.mass() - dimuonMassGen); - } - } - } - } //end loop on Candidate - - if (!ZMuMuMatchedfound && !ZMuStaMatchedfound && ZMuTrackMatchedfound == 0) - noMCmatching++; - if (!ZMuMuMatchedfound && ZMuTrackMatchedfound == 1) - ZMuTrack_exclusive_1match++; - if (!ZMuMuMatchedfound && ZMuTrackMatchedfound > 1) - ZMuTrack_exclusive_morematch++; - if (!ZMuMuMatchedfound && ZMuTrackMatchedSelected_exclusivefound == 1) - ZMuTrackselected_exclusive_1match++; - if (!ZMuMuMatchedfound && ZMuTrackMatchedSelected_exclusivefound > 1) - ZMuTrackselected_exclusive_morematch++; - if (ZMuMuMatchedfound && ZMuTrackMatchedfound == 1) - ZMuTrack_ZMuMu_1match++; - if (ZMuMuMatchedfound && ZMuTrackMatchedfound == 2) - ZMuTrack_ZMuMu_2match++; - if (ZMuMuMatchedfound && ZMuTrackMatchedfound > 2) - ZMuTrack_ZMuMu_morematch++; -} - -bool ZMuMuEfficiency::check_ifZmumu(const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - bool muplusFound = false; - bool muminusFound = false; - bool ZFound = false; - if (partId0 == 13 || partId1 == 13 || partId2 == 13) - muminusFound = true; - if (partId0 == -13 || partId1 == -13 || partId2 == -13) - muplusFound = true; - if (partId0 == 23 || partId1 == 23 || partId2 == 23) - ZFound = true; - return (muplusFound && muminusFound && ZFound); -} - -float ZMuMuEfficiency::getParticlePt(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - float ptpart = 0.; - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - ptpart = dauMuGen->pt(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - ptpart = dauMuGen->pt(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - ptpart = dauMuGen->pt(); - } - } - } - return ptpart; -} - -float ZMuMuEfficiency::getParticleEta(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - float etapart = 0.; - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - etapart = dauMuGen->eta(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - etapart = dauMuGen->eta(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - etapart = dauMuGen->eta(); - } - } - } - return etapart; -} - -float ZMuMuEfficiency::getParticlePhi(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - float phipart = 0.; - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - phipart = dauMuGen->phi(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - phipart = dauMuGen->phi(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - phipart = dauMuGen->phi(); - } - } - } - return phipart; -} - -Particle::LorentzVector ZMuMuEfficiency::getParticleP4(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - Particle::LorentzVector p4part(0., 0., 0., 0.); - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - p4part = dauMuGen->p4(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - p4part = dauMuGen->p4(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - p4part = dauMuGen->p4(); - } - } - } - return p4part; -} - -void ZMuMuEfficiency::endJob() { - // double efficiencySTA =(double)numberOfOverlappedStandAlone_/(double)numberOfMatchedZMuTrack_; - // double errorEff_STA = sqrt( efficiencySTA*(1 - efficiencySTA)/(double)numberOfMatchedZMuTrack_); - - double myTrackEff = 2. * numberOfMatchedSelectedZMuMu_ / - (2. * numberOfMatchedSelectedZMuMu_ + (double)numberOfMatchedSelectedZMuSta_); - double myErrTrackEff = sqrt(myTrackEff * (1 - myTrackEff) / - (2. * numberOfMatchedSelectedZMuMu_ + (double)numberOfMatchedSelectedZMuSta_)); - - double myStaEff = 2. * numberOfMatchedSelectedZMuMu_ / - (2. * numberOfMatchedSelectedZMuMu_ + (double)numberOfMatchedSelectedZMuTrack_exclusive); - double myErrStaEff = sqrt(myTrackEff * (1 - myTrackEff) / - (2. * numberOfMatchedSelectedZMuMu_ + (double)numberOfMatchedSelectedZMuTrack_exclusive)); - - // double efficiencyTRACK =(double)numberOfOverlappedTracks_/(double)numberOfMatchedZMuSta_; - // double errorEff_TRACK = sqrt( efficiencyTRACK*(1 - efficiencyTRACK)/(double)numberOfMatchedZMuSta_); - - cout << "------------------------------------ Counters for MC acceptance --------------------------------" << endl; - cout << "totalNumberOfevents = " << totalNumberOfevents << endl; - cout << "totalNumberOfZfound = " << totalNumberOfZfound << endl; - cout << "totalNumberOfZpassed = " << totalNumberOfZPassed << endl; - cout << "n. of events zMuMu found (gen level selected)" << n_zMuMufound_genZsele << endl; - cout << "n. of events zMuSta found (gen level selected)" << n_zMuStafound_genZsele << endl; - cout << "n. of events zMuTrk found (gen level selected)" << n_zMuTrkfound_genZsele << endl; - - cout << "---------------------------- Counter for MC truth efficiency calculation--------------------- " << endl; - - cout << "number of events with ZMuMu found = " << numberOfEventsWithZMuMufound << endl; - cout << "number of events with ZMuSta found = " << numberOfEventsWithZMuStafound << endl; - cout << "-------------------------------------------------------------------------------------- " << endl; - - cout << "number of events without MC maching = " << noMCmatching << endl; - cout << "number of ZMuTrack exclsive 1 match = " << ZMuTrack_exclusive_1match << endl; - cout << "number of ZMuTrack exclsive more match = " << ZMuTrack_exclusive_morematch << endl; - cout << "number of ZMuTrack selected exclusive 1 match = " << ZMuTrackselected_exclusive_1match << endl; - cout << "number of ZMuTrack selected exclusive more match = " << ZMuTrackselected_exclusive_morematch << endl; - cout << "number of ZMuTrack ZMuMu 1 match = " << ZMuTrack_ZMuMu_1match << endl; - cout << "number of ZMuTrack ZMuMu 2 match = " << ZMuTrack_ZMuMu_2match << endl; - cout << "number of ZMuTrack ZMuMu more match = " << ZMuTrack_ZMuMu_morematch << endl; - cout << "numberOfMatchedZMuMu = " << numberOfMatchedZMuMu_ << endl; - cout << "numberOfMatchedSelectdZMuMu = " << numberOfMatchedSelectedZMuMu_ << endl; - cout << "numberOfMatchedZMuSta = " << numberOfMatchedZMuSta_ << endl; - cout << "numberOfMatchedSelectedZMuSta = " << numberOfMatchedSelectedZMuSta_ << endl; - cout << "numberOfMatchedZMuTrack_matchedZMuMu = " << numberOfMatchedZMuTrack_matchedZMuMu << endl; - cout << "numberOfMatchedZMuTrack_matchedSelectedZMuMu = " << numberOfMatchedZMuTrack_matchedSelectedZMuMu << endl; - cout << "numberOfMatchedZMuTrack exclusive = " << numberOfMatchedZMuTrack_exclusive << endl; - cout << "numberOfMatchedSelectedZMuTrack exclusive = " << numberOfMatchedSelectedZMuTrack_exclusive << endl; - cout << " ----------------------------- Efficiency --------------------------------- " << endl; - cout << "Efficiency StandAlone = " << myStaEff << " +/- " << myErrStaEff << endl; - cout << "Efficiency Track = " << myTrackEff << " +/- " << myErrTrackEff << endl; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuMuEfficiency); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuIsolationAnalyzer.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuIsolationAnalyzer.cc deleted file mode 100644 index c5a5b7916a5b2..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuIsolationAnalyzer.cc +++ /dev/null @@ -1,382 +0,0 @@ -#include "DataFormats/Common/interface/AssociationVector.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "DataFormats/Math/interface/deltaR.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" -#include "DataFormats/PatCandidates/interface/Isolation.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositVetos.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositDirection.h" -#include "TH1.h" -#include "TH2.h" -#include "TMath.h" -#include -#include -#include -#include - -using namespace edm; -using namespace std; -using namespace reco; -using namespace isodeposit; - -class ZMuMuIsolationAnalyzer : public edm::EDAnalyzer { -public: - ZMuMuIsolationAnalyzer(const edm::ParameterSet& pset); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - void endJob() override; - EDGetTokenT srcToken; - double dRVeto; - double dRTrk, dREcal, dRHcal; - double ptThreshold, etEcalThreshold, etHcalThreshold; - double alpha, beta; - double pt, eta; - double iso_cut; - - TH1F *h_IsoZ_tk, *h_IsoW_tk, *h_IsoOther_tk; - TH1F *h_IsoZ_ecal, *h_IsoW_ecal, *h_IsoOther_ecal; - TH1F *h_IsoZ_hcal, *h_IsoW_hcal, *h_IsoOther_hcal; - TH1F *IsoZ, *IsoW, *IsoOther; - TH1F *TkrPt, *EcalEt, *HcalEt; - TH1F *EcalEtZ, *HcalEtZ; - - TH1F *Z_eta, *W_eta, *Other_eta; - TH1F *Z_eta_postSelection, *W_eta_postSelection, *Other_eta_postSelection; - TH1F *Z_pt, *W_pt, *Other_pt; - TH1F *Z_pt_postSelection, *W_pt_postSelection, *Other_pt_postSelection; - - enum MuTag { muFromZ, muFromW, muFromOther }; - template - MuTag muTag(const T& mu) const; - void Deposits(const pat::IsoDeposit* isodep, double dR_max, TH1F* hist); - void histo(TH1F* hist, const char* cx, const char* cy) const; -}; - -template -ZMuMuIsolationAnalyzer::MuTag ZMuMuIsolationAnalyzer::muTag(const T& mu) const { - GenParticleRef p = mu.genParticleRef(); - if (p.isNull()) { - // cout<<"genParticleRef is null "<numberOfMothers(); - if (sizem != 1) { - //cout<<"number of mothers !=1 "<mother(); - if (moth1 == nullptr) { - return muFromOther; - //cout<<"no mother "<pdgId(); - if (abs(pdgId1) != 13) { - return muFromOther; - //cout<<"mother is not a muon"<mother(); - if (moth2 == nullptr) { - return muFromOther; - //cout<<"no mother "<pdgId(); - if (pdgId2 == 23) { - //cout<<" muon from Z"<begin(); it != isodep->end(); ++it) { - if (it->dR() < dR_max) { - double theta = 2 * (TMath::ATan(TMath::Exp(-(it->eta())))); - // double theta= 2; - hist->Fill(it->value() / TMath::Sin(theta)); - } - } -} - -void ZMuMuIsolationAnalyzer::histo(TH1F* hist, const char* cx, const char* cy) const { - hist->GetXaxis()->SetTitle(cx); - hist->GetYaxis()->SetTitle(cy); - hist->GetXaxis()->SetTitleOffset(1); - hist->GetYaxis()->SetTitleOffset(1.2); - hist->GetXaxis()->SetTitleSize(0.04); - hist->GetYaxis()->SetTitleSize(0.04); - hist->GetXaxis()->SetLabelSize(0.03); - hist->GetYaxis()->SetLabelSize(0.03); -} - -ZMuMuIsolationAnalyzer::ZMuMuIsolationAnalyzer(const ParameterSet& pset) - : srcToken(consumes(pset.getParameter("src"))), - dRVeto(pset.getUntrackedParameter("veto")), - dRTrk(pset.getUntrackedParameter("deltaRTrk")), - dREcal(pset.getUntrackedParameter("deltaREcal")), - dRHcal(pset.getUntrackedParameter("deltaRHcal")), - ptThreshold(pset.getUntrackedParameter("ptThreshold")), - etEcalThreshold(pset.getUntrackedParameter("etEcalThreshold")), - etHcalThreshold(pset.getUntrackedParameter("etHcalThreshold")), - alpha(pset.getUntrackedParameter("alpha")), - beta(pset.getUntrackedParameter("beta")), - pt(pset.getUntrackedParameter("pt")), - eta(pset.getUntrackedParameter("eta")), - iso_cut(pset.getUntrackedParameter("isoCut")) { - edm::Service fs; - std::ostringstream str1, str2, str3, str4, str5, str6, str7, str8, str9, str10, n_tracks; - str1 << "muons from Z with p_{t} > " << ptThreshold << " GeV/c" - << " and #Delta R < " << dRTrk; - str2 << "muons from W with p_{t} > " << ptThreshold << " GeV/c" - << " and #Delta R < " << dRTrk; - str3 << "muons from Others with p_{t} > " << ptThreshold << " GeV/c" - << " and #Delta R < " << dRTrk; - str4 << "muons from Z with p_{t} > " << ptThreshold << " GeV/c" - << " and #Delta R < " << dRTrk << " (alpha = " << alpha << " , " - << "beta = " << beta << " )"; - str5 << "muons from W with p_{t} > " << ptThreshold << " GeV/c" - << " and #Delta R < " << dRTrk << " (alpha = " << alpha << " , " - << "beta = " << beta << " )"; - str6 << "muons from Other with p_{t} > " << ptThreshold << " GeV/c" - << " and #Delta R < " << dRTrk << " (alpha = " << alpha << " , " - << "beta = " << beta << " )"; - n_tracks << "Number of tracks for muon with p_{t} > " << ptThreshold << " and #Delta R < " << dRTrk << " GeV/c"; - str7 << "Isolation Vs p_{t} with p_{t} > " << ptThreshold << " GeV/c" - << " and #Delta R < " << dRTrk << "(Tracker)"; - str8 << "Isolation Vs p_{t} with p_{t} > " << ptThreshold << " GeV/c" - << " and #Delta R < " << dRTrk << "(Ecal)"; - str9 << "Isolation Vs p_{t} with p_{t} > " << ptThreshold << " GeV/c" - << " and #Delta R < " << dRTrk << "(Hcal)"; - str10 << "Isolation Vs p_{t} with p_{t} > " << ptThreshold << " GeV/c" - << " and #Delta R < " << dRTrk << " (alpha = " << alpha << " , " - << "beta = " << beta << " )"; - h_IsoZ_tk = fs->make("ZIso_Tk", str1.str().c_str(), 100, 0., 20.); - h_IsoW_tk = fs->make("WIso_Tk", str2.str().c_str(), 100, 0., 20.); - h_IsoOther_tk = fs->make("otherIso_Tk", str3.str().c_str(), 100, 0., 20.); - h_IsoZ_ecal = fs->make("ZIso_ecal", str1.str().c_str(), 100, 0., 20.); - h_IsoW_ecal = fs->make("WIso_ecal", str2.str().c_str(), 100, 0., 20.); - h_IsoOther_ecal = fs->make("otherIso_ecal", str3.str().c_str(), 100, 0., 20.); - h_IsoZ_hcal = fs->make("ZIso_hcal", str1.str().c_str(), 100, 0., 20.); - h_IsoW_hcal = fs->make("WIso_hcal", str2.str().c_str(), 100, 0., 20.); - h_IsoOther_hcal = fs->make("otherIso_hcal", str3.str().c_str(), 100, 0., 20.); - IsoZ = fs->make("ZIso", str4.str().c_str(), 100, 0., 20.); - IsoW = fs->make("WIso", str5.str().c_str(), 100, 0., 20.); - IsoOther = fs->make("otherIso", str6.str().c_str(), 100, 0., 20.); - - Z_eta = fs->make("Z_eta", "#eta distribution for muons coming from Z", 40, -eta, eta); - W_eta = fs->make("W_eta", "#eta distribution for muons coming from W", 40, -eta, eta); - Other_eta = fs->make("Other_eta", "#eta distribution for muons coming from other", 40, -eta, eta); - Z_eta_postSelection = fs->make( - "Z_eta_postSelection", "#eta distribution for muons coming from Z after iso selection", 40, -eta, eta); - W_eta_postSelection = fs->make( - "W_eta_postSelection", "#eta distribution for muons coming from W after iso selection", 40, -eta, eta); - Other_eta_postSelection = fs->make( - "Other_eta_postSelection", "#eta distribution for muons coming from other after iso selection", 40, -eta, eta); - - Z_pt = fs->make("Z_pt", "p_{T} distribution for muons coming from Z", 40, pt, 150.); - W_pt = fs->make("W_pt", "p_{T} distribution for muons coming from W", 40, pt, 150.); - Other_pt = fs->make("Other_pt", "p_{T} distribution for muons coming from other", 40, pt, 150.); - Z_pt_postSelection = fs->make( - "Z_pt_postSelection", "p_{T} distribution for muons coming from Z after iso selection", 40, pt, 150.); - W_pt_postSelection = fs->make( - "W_pt_postSelection", "p_{t} distribution for muons coming from W after iso selection", 40, pt, 150.); - Other_pt_postSelection = fs->make( - "Other_pt_postSelection", "p_{t} distribution for muons coming from other after iso selection", 40, pt, 150.); - - TkrPt = fs->make("TkrPt", "IsoDeposit p distribution in the Tracker", 100, 0., 10.); - EcalEt = fs->make("EcalEt", "IsoDeposit E distribution in the Ecal", 100, 0., 5.); - HcalEt = fs->make("HcalEt", "IsoDeposit E distribution in the Hcal", 100, 0., 5.); - - EcalEtZ = fs->make("VetoEcalEt", " #Sigma E_{T} deposited in veto cone in the Ecal", 100, 0., 10.); - HcalEtZ = fs->make("VetoHcalEt", " #Sigma E_{T} deposited in veto cone in the Hcal", 100, 0., 10.); -} - -void ZMuMuIsolationAnalyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) { - Handle dimuons; - event.getByToken(srcToken, dimuons); - - for (unsigned int i = 0; i < dimuons->size(); ++i) { - const Candidate& zmm = (*dimuons)[i]; - const Candidate* dau0 = zmm.daughter(0); - const Candidate* dau1 = zmm.daughter(1); - const pat::Muon& mu0 = dynamic_cast(*dau0->masterClone()); - const pat::GenericParticle& mu1 = dynamic_cast(*dau1->masterClone()); - - const pat::IsoDeposit* muTrackIso = mu0.isoDeposit(pat::TrackIso); - const pat::IsoDeposit* tkTrackIso = mu1.isoDeposit(pat::TrackIso); - const pat::IsoDeposit* muEcalIso = mu0.isoDeposit(pat::EcalIso); - const pat::IsoDeposit* tkEcalIso = mu1.isoDeposit(pat::EcalIso); - const pat::IsoDeposit* muHcalIso = mu0.isoDeposit(pat::HcalIso); - const pat::IsoDeposit* tkHcalIso = mu1.isoDeposit(pat::HcalIso); - - if (mu0.pt() > pt && mu1.pt() > pt && abs(mu0.eta()) < eta && abs(mu1.eta()) < eta) { - Direction muDir = Direction(mu0.eta(), mu0.phi()); - Direction tkDir = Direction(mu1.eta(), mu1.phi()); - - IsoDeposit::AbsVetos vetos_mu; - vetos_mu.push_back(new ConeVeto(muDir, dRVeto)); - vetos_mu.push_back(new ThresholdVeto(ptThreshold)); - - reco::IsoDeposit::AbsVetos vetos_tk; - vetos_tk.push_back(new ConeVeto(tkDir, dRVeto)); - vetos_tk.push_back(new ThresholdVeto(ptThreshold)); - - reco::IsoDeposit::AbsVetos vetos_mu_ecal; - vetos_mu_ecal.push_back(new ConeVeto(muDir, 0.)); - vetos_mu_ecal.push_back(new ThresholdVeto(etEcalThreshold)); - - reco::IsoDeposit::AbsVetos vetos_tk_ecal; - vetos_tk_ecal.push_back(new ConeVeto(tkDir, 0.)); - vetos_tk_ecal.push_back(new ThresholdVeto(etEcalThreshold)); - - reco::IsoDeposit::AbsVetos vetos_mu_hcal; - vetos_mu_hcal.push_back(new ConeVeto(muDir, 0.)); - vetos_mu_hcal.push_back(new ThresholdVeto(etHcalThreshold)); - - reco::IsoDeposit::AbsVetos vetos_tk_hcal; - vetos_tk_hcal.push_back(new ConeVeto(tkDir, 0.)); - vetos_tk_hcal.push_back(new ThresholdVeto(etHcalThreshold)); - MuTag tag_mu = muTag(mu0); - MuTag tag_track = muTag(mu1); - - double Tk_isovalue = TMath::Max(muTrackIso->sumWithin(dRTrk, vetos_mu), tkTrackIso->sumWithin(dRTrk, vetos_tk)); - double Ecal_isovalue = - TMath::Max(muEcalIso->sumWithin(dREcal, vetos_mu_ecal), tkEcalIso->sumWithin(dREcal, vetos_tk_ecal)); - double Hcal_isovalue = - TMath::Max(muHcalIso->sumWithin(dRHcal, vetos_mu_hcal), tkHcalIso->sumWithin(dRHcal, vetos_tk_hcal)); - EcalEtZ->Fill(muEcalIso->candEnergy()); - EcalEtZ->Fill(tkEcalIso->candEnergy()); - HcalEtZ->Fill(muHcalIso->candEnergy()); - HcalEtZ->Fill(tkHcalIso->candEnergy()); - - double iso_value0 = alpha * ((0.5 * (1 + beta) * muEcalIso->sumWithin(dREcal, vetos_mu_ecal)) + - (0.5 * (1 - beta) * muHcalIso->sumWithin(dRHcal, vetos_mu_hcal))) + - (1 - alpha) * muTrackIso->sumWithin(dRTrk, vetos_mu); - double iso_value1 = alpha * ((0.5 * (1 + beta) * tkEcalIso->sumWithin(dREcal, vetos_tk_ecal)) + - (0.5 * (1 - beta) * tkHcalIso->sumWithin(dRHcal, vetos_tk_hcal))) + - (1 - alpha) * tkTrackIso->sumWithin(dRTrk, vetos_tk); - - double iso_value = TMath::Max(iso_value0, iso_value1); - - if (tag_mu == muFromZ && tag_track == muFromZ) { - h_IsoZ_tk->Fill(Tk_isovalue); - h_IsoZ_ecal->Fill(Ecal_isovalue); - h_IsoZ_hcal->Fill(Hcal_isovalue); - IsoZ->Fill(iso_value); - - Z_eta->Fill(mu0.eta()); - Z_eta->Fill(mu1.eta()); - Z_pt->Fill(mu0.pt()); - Z_pt->Fill(mu1.pt()); - - if (iso_value0 < iso_cut) { - Z_pt_postSelection->Fill(mu0.pt()); - Z_eta_postSelection->Fill(mu0.eta()); - } - if (iso_value1 < iso_cut) { - Z_pt_postSelection->Fill(mu1.pt()); - Z_eta_postSelection->Fill(mu1.eta()); - } - - Deposits(muTrackIso, dRTrk, TkrPt); - Deposits(muEcalIso, dREcal, EcalEt); - Deposits(muHcalIso, dRHcal, HcalEt); - Deposits(tkTrackIso, dRTrk, TkrPt); - Deposits(tkEcalIso, dREcal, EcalEt); - Deposits(tkHcalIso, dRHcal, HcalEt); - } - if (tag_mu == muFromW || tag_track == muFromW) { - h_IsoW_tk->Fill(Tk_isovalue); - h_IsoW_ecal->Fill(Ecal_isovalue); - h_IsoW_hcal->Fill(Hcal_isovalue); - IsoW->Fill(iso_value); - - W_eta->Fill(mu0.eta()); - W_eta->Fill(mu1.eta()); - W_pt->Fill(mu0.pt()); - W_pt->Fill(mu1.pt()); - - if (iso_value0 < iso_cut) { - W_pt_postSelection->Fill(mu0.pt()); - W_eta_postSelection->Fill(mu0.eta()); - } - if (iso_value1 < iso_cut) { - W_pt_postSelection->Fill(mu1.pt()); - W_eta_postSelection->Fill(mu1.eta()); - } - - Deposits(muTrackIso, dRTrk, TkrPt); - Deposits(muEcalIso, dREcal, EcalEt); - Deposits(muHcalIso, dRHcal, HcalEt); - Deposits(tkTrackIso, dRTrk, TkrPt); - Deposits(tkEcalIso, dREcal, EcalEt); - Deposits(tkHcalIso, dRHcal, HcalEt); - } else { - h_IsoOther_tk->Fill(Tk_isovalue); - h_IsoOther_ecal->Fill(Ecal_isovalue); - h_IsoOther_hcal->Fill(Hcal_isovalue); - IsoOther->Fill(iso_value); - - Other_eta->Fill(mu0.eta()); - Other_eta->Fill(mu1.eta()); - Other_pt->Fill(mu0.pt()); - Other_pt->Fill(mu1.pt()); - - if (iso_value0 < iso_cut) { - Other_pt_postSelection->Fill(mu0.pt()); - Other_eta_postSelection->Fill(mu0.eta()); - } - if (iso_value1 < iso_cut) { - Other_pt_postSelection->Fill(mu1.pt()); - Other_eta_postSelection->Fill(mu1.eta()); - } - - Deposits(muTrackIso, dRTrk, TkrPt); - Deposits(muEcalIso, dREcal, EcalEt); - Deposits(muHcalIso, dRHcal, HcalEt); - Deposits(tkTrackIso, dRTrk, TkrPt); - Deposits(tkEcalIso, dREcal, EcalEt); - Deposits(tkHcalIso, dRHcal, HcalEt); - } - } - } - - histo(h_IsoZ_tk, "#Sigma p_{T}", "Events"); - histo(h_IsoW_tk, "#Sigma p_{T}", "Events"); - histo(h_IsoOther_tk, "#Sigma p_{T}", "#Events"); - histo(h_IsoZ_ecal, "#Sigma E_{t}", "Events"); - histo(h_IsoW_ecal, "#Sigma E_{t}", "Events"); - histo(h_IsoOther_ecal, "#Sigma E_{t}", "Events"); - histo(h_IsoZ_hcal, "#Sigma E_{t}", "Events"); - histo(h_IsoW_hcal, "#Sigma E_{t}", "Events"); - histo(h_IsoOther_hcal, "#Sigma E_{t}", "Events"); - histo(TkrPt, "p ", ""); - histo(EcalEt, "E ", ""); - histo(HcalEt, "E ", ""); - histo(HcalEtZ, "E_{T}", ""); - histo(EcalEtZ, "E_{T}", ""); -} - -void ZMuMuIsolationAnalyzer::endJob() {} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuMuIsolationAnalyzer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuOverlapExclusion.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuOverlapExclusion.cc deleted file mode 100644 index 09123304c6d3c..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuOverlapExclusion.cc +++ /dev/null @@ -1,113 +0,0 @@ -#include "CommonTools/UtilAlgos/interface/OverlapExclusionSelector.h" -#include "CommonTools/UtilAlgos/interface/SingleObjectSelector.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include - -struct ZMuMuOverlap { - ZMuMuOverlap(const edm::ParameterSet&) {} - bool operator()(const reco::Candidate& zMuMu, const reco::Candidate& z) const { - using namespace std; - using namespace reco; - // check if a candidate z is different from zMuMu - // (for example a Z can be done with two global muons, or with a global muon plus a standalone muon. - // if the standalone muon is part of the second global muon in fact this is the same Z) - - unsigned int nd1 = zMuMu.numberOfDaughters(); - unsigned int nd2 = z.numberOfDaughters(); - - assert(nd1 == 2 && nd2 == 2); - const int maxd = 2; - const Candidate* daughters1[maxd]; - const Candidate* daughters2[maxd]; - TrackRef trackerTrack1[maxd]; - TrackRef stAloneTrack1[maxd]; - TrackRef globalTrack1[maxd]; - TrackRef trackerTrack2[maxd]; - TrackRef stAloneTrack2[maxd]; - TrackRef globalTrack2[maxd]; - bool flag; - unsigned int matched = 0; - - for (unsigned int i = 0; i < nd1; ++i) { - daughters1[i] = zMuMu.daughter(i); - trackerTrack1[i] = daughters1[i]->get(); - stAloneTrack1[i] = daughters1[i]->get(); - globalTrack1[i] = daughters1[i]->get(); - - /*********************************************** just used for debug ******************** - if (trackerTrack1[i].isNull()) - cout << "in ZMuMu daughter " << i << " tracker ref non found " << endl; - else - cout << "in ZMuMu daughter " << i << " tracker ref FOUND" - << " id: " << trackerTrack1[i].id() << ", index: " << trackerTrack1[i].key() - << endl; - if (stAloneTrack1[i].isNull()) - cout << "in ZMuMu daughter " << i << " stalone ref non found " << endl; - else - cout << "in ZMuMu daughter " << i << " stalone ref FOUND" - << " id: " << stAloneTrack1[i].id() << ", index: " << stAloneTrack1[i].key() - << endl; - - if (globalTrack1[i].isNull()) - cout << "in ZMuMu daughter " << i << " global ref non found " << endl; - else - cout << "in ZMuMu daughter " << i << " global ref FOUND" - << " id: " << globalTrack1[i].id() << ", index: " << globalTrack1[i].key() - << endl; - */ - } - for (unsigned int i = 0; i < nd2; ++i) { - daughters2[i] = z.daughter(i); - trackerTrack2[i] = daughters2[i]->get(); - stAloneTrack2[i] = daughters2[i]->get(); - globalTrack2[i] = daughters2[i]->get(); - - /******************************************** just used for debug ************ - if (trackerTrack2[i].isNull()) - cout << "in ZMuSta daughter " << i << " tracker ref non found " << endl; - else - cout << "in ZMuSta daughter " << i << " tracker ref FOUND" - << " id: " << trackerTrack2[i].id() << ", index: " << trackerTrack2[i].key() - << endl; - if (stAloneTrack2[i].isNull()) - cout << "in ZMuSta daughter " << i << " standalone ref non found " << endl; - else - cout << "in ZMuSta daughter " << i << " standalone ref FOUND" - << " id: " << stAloneTrack2[i].id() << ", index: " << stAloneTrack2[i].key() - << endl; - - if (globalTrack2[i].isNull()) - cout << "in ZMuSta daughter " << i << " global ref non found " << endl; - else - cout << "in ZMuSta daughter " << i << " global ref FOUND" - << " id: " << globalTrack2[i].id() << ", index: " << globalTrack2[i].key() - << endl; - - */ - } - for (unsigned int i = 0; i < nd1; i++) { - flag = false; - for (unsigned int j = 0; j < nd2; - j++) { // if the obj2 is a standalone the trackref is alwais in the trackerTRack position - if (((trackerTrack2[i].id() == trackerTrack1[j].id()) && (trackerTrack2[i].key() == trackerTrack1[j].key())) || - ((trackerTrack2[i].id() == stAloneTrack1[j].id()) && (trackerTrack2[i].key() == stAloneTrack1[j].key()))) { - flag = true; - } - } - if (flag) - matched++; - } - if (matched == nd1) // return true if all the childrens of the ZMuMu have a children matched in ZMuXX - return true; - else - return false; - } -}; - -typedef SingleObjectSelector, - OverlapExclusionSelector > - ZMuMuOverlapExclusionSelector; - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuMuOverlapExclusionSelector); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuPerformances.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuPerformances.cc deleted file mode 100644 index b3ce46c5c1608..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuPerformances.cc +++ /dev/null @@ -1,1405 +0,0 @@ -/* \class ZMuMuPerformances - * - * author: Davide Piccolo - * - * ZMuMu Performances: - * check charge mis-id for standAlone and global muons, - * check standAlne resolution vs track resolution - * - */ - -#include "DataFormats/Common/interface/AssociationVector.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Candidate/interface/OverlapChecker.h" -#include "DataFormats/Math/interface/deltaR.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/Candidate/interface/CandAssociation.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include - -using namespace edm; -using namespace std; -using namespace reco; - -typedef ValueMap IsolationCollection; - -class ZMuMuPerformances : public edm::EDAnalyzer { -public: - ZMuMuPerformances(const edm::ParameterSet &pset); - -private: - void analyze(const edm::Event &event, const edm::EventSetup &setup) override; - bool check_ifZmumu(const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - float getParticlePt(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - float getParticleEta(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - float getParticlePhi(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - Particle::LorentzVector getParticleP4(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2); - void endJob() override; - - EDGetTokenT zMuMuToken_; - EDGetTokenT zMuMuMatchMapToken_; - EDGetTokenT zMuTrackToken_; - EDGetTokenT zMuTrackMatchMapToken_; - EDGetTokenT zMuStandAloneToken_; - EDGetTokenT zMuStandAloneMatchMapToken_; - EDGetTokenT muonsToken_; - EDGetTokenT muonMatchMapToken_; - EDGetTokenT muonIsoToken_; - EDGetTokenT tracksToken_; - EDGetTokenT trackIsoToken_; - EDGetTokenT genParticlesToken_; - - bool noCut_; - double zMassMin_, zMassMax_; - double ptminPlus_, ptmaxPlus_, etaminPlus_, etamaxPlus_; - double ptminMinus_, ptmaxMinus_, etaminMinus_, etamaxMinus_, isomax_; - - double etamax_, ptmin_, massMin_, massMax_, isoMax_; - - reco::CandidateBaseRef globalMuonCandRef_, trackMuonCandRef_, standAloneMuonCandRef_; - OverlapChecker overlap_; - - // general histograms - TH1D *h_n_globalMuon_perEvent, *h_n_staOnlyMuon_perEvent, *h_n_trackerOnlyMuon_perEvent, - *h_n_trackerStaOnlyMuon_perEvent; - TH1D *h_n_globalMuon_perEvent_MCmatch, *h_n_staOnlyMuon_perEvent_MCmatch, *h_n_trackerOnlyMuon_perEvent_MCmatch; - TH1D *h_n_trackerStaOnlyMuon_perEvent_MCmatch, *h_n_tracks_perEvent; - TH1D *h_n_zMuMu_perEvent, *h_n_zMuSta_perEvent, *h_n_zMuTrack_perEvent; - - // zMuMu inv mass - TH1D *h_zMuMuMassSameSign, *h_zMuMuMassSameSign_MCmatch, *h_zMuMuMassOppositeSign; - // histograms with MC truth - // charge truth - TH1D *h_GlobalMuonChargeTimeGenCharge, *h_TrackerMuonChargeTimeGenCharge; - // resolution respect to gen particles - TH1D *h_GlobalMuonEtaMinusGenEta, *h_TrackerMuonEtaMinusGenEta, *h_GlobalMuonPtMinusGenPt, *h_TrackerMuonPtMinusGenPt; - TH1D *h_GlobalMuonStaComponentEtaMinusGenEta, *h_GlobalMuonStaComponentPtMinusGenPt; - TH2D *h_DEtaGlobalGenvsEtaGen, *h_DPtGlobalGenvsPtGen, *h_DEtaGlobalStaComponentGenvsEtaGen, - *h_DPtGlobalStaComponentGenvsPtGen; - TH2D *h_DPtGlobalGenvsEtaGen, *h_DPtGlobalStaComponentGenvsEtaGen; - // resolution respect to gen particles for ZMuMuTagged events - TH1D *h_GlobalMuonEtaMinusGenEta_ZMuMuTagged; - TH1D *h_GlobalMuonPtMinusGenPt_ZMuMuTagged; - TH1D *h_GlobalMuonStaComponentEtaMinusGenEta_ZMuMuTagged, *h_GlobalMuonStaComponentPtMinusGenPt_ZMuMuTagged; - TH2D *h_DEtaGlobalGenvsEtaGen_ZMuMuTagged, *h_DPtGlobalGenvsPtGen_ZMuMuTagged; - TH2D *h_DEtaGlobalStaComponentGenvsEtaGen_ZMuMuTagged, *h_DPtGlobalStaComponentGenvsPtGen_ZMuMuTagged; - TH2D *h_DPtGlobalGenvsEtaGen_ZMuMuTagged, *h_DPtGlobalStaComponentGenvsEtaGen_ZMuMuTagged; - TH2D *h_DPtTrackGenvsPtGen_ZMuMuTagged, *h_DPtTrackGenvsEtaGen_ZMuMuTagged; - - // histograms for cynematic of ZMuMutagged muons for STA performances studies - TH1D *h_zMuTrackMass_ZMuMuTagged, *h_etaTrack_ZMuMuTagged, *h_phiTrack_ZMuMuTagged, *h_ptTrack_ZMuMuTagged, - *h_DRTrack_ZMuMuTagged; - // histograms for cynematic of ZMuMutagged muons when StandAlone has wrong charge - TH1D *h_zMuTrackMass_wrongStaCharge_ZMuMuTagged, *h_etaTrack_wrongStaCharge_ZMuMuTagged; - TH1D *h_phiTrack_wrongStaCharge_ZMuMuTagged, *h_ptTrack_wrongStaCharge_ZMuMuTagged, - *h_DRTrack_wrongStaCharge_ZMuMuTagged; - - // hisograms for performances of Standlone when Sta has correct charge - TH1D *h_zMuStaMass_correctStaCharge_ZMuMuTagged, *h_ptStaMinusptTrack_correctStaCharge_ZMuMuTagged; - TH2D *h_ptStaMinusptTrack_vsEtaTracker_correctStaCharge_ZMuMuTagged; - TH2D *h_ptStaMinusptTrack_vsPtTracker_correctStaCharge_ZMuMuTagged; - - // histograms for cynematic of ZMuMutagged muons for TRK performances studies - TH1D *h_zMuStaMass_ZMuMuTagged, *h_etaSta_ZMuMuTagged, *h_phiSta_ZMuMuTagged, *h_ptSta_ZMuMuTagged, - *h_DRSta_ZMuMuTagged; - // histograms for cynematic of ZMuMutagged muons when TRK has wrong charge - TH1D *h_zMuStaMass_wrongTrkCharge_ZMuMuTagged, *h_etaSta_wrongTrkCharge_ZMuMuTagged; - TH1D *h_phiSta_wrongTrkCharge_ZMuMuTagged, *h_ptSta_wrongTrkCharge_ZMuMuTagged, *h_DRSta_wrongTrkCharge_ZMuMuTagged; - - // histograms for cynematic of ZMuTracktagged muons with unMatchd StandAlone for STA performances studies - TH1D *h_zMuTrackMass_ZMuTrackTagged, *h_etaTrack_ZMuTrackTagged, *h_phiTrack_ZMuTrackTagged, - *h_ptTrack_ZMuTrackTagged, *h_DRTrack_ZMuTrackTagged; - // histograms for cynematic of ZMuTracktagged muons when unMatched StandAlone has wrong charge - TH1D *h_zMuTrackMass_wrongStaCharge_ZMuTrackTagged, *h_etaTrack_wrongStaCharge_ZMuTrackTagged; - TH1D *h_phiTrack_wrongStaCharge_ZMuTrackTagged, *h_ptTrack_wrongStaCharge_ZMuTrackTagged, - *h_DRTrack_wrongStaCharge_ZMuTrackTagged; - - // histograms for cynematic of ZMuStatagged muons with unMatchd Track for Track performances studies - TH1D *h_zMuStaMass_ZMuStaTagged, *h_etaSta_ZMuStaTagged, *h_phiSta_ZMuStaTagged, *h_ptSta_ZMuStaTagged; - // histograms for cynematic of ZMuStatagged muons when unMatched Track has wrong charge - TH1D *h_zMuStaMass_wrongTrkCharge_ZMuStaTagged, *h_etaSta_wrongTrkCharge_ZMuStaTagged; - TH1D *h_phiSta_wrongTrkCharge_ZMuStaTagged, *h_ptSta_wrongTrkCharge_ZMuStaTagged; - - // global counters - int totalNumberOfZfound; // total number of events with Z found - int totalNumberOfZpassed; // total number of Z that pass cynematical cuts at generator level - - int nZMuMuSameSign; // number of ZMuMu SameSIgn (no Cuts) - int nZMuMuSameSign_mcMatched; // number of ZMuMu Same Sign (no cuts) MCmatch - - int n_goodTrack_ZMuMutagged; // total number of tracks selected and tagged to study Sta charge - int n_correctStaCharge_ZMuMutagged; // total number of tracks selected and tagged with correct charge of Sta - int n_wrongStaCharge_ZMuMutagged; // total number of tracks selected and tagged with wrong charge of Sta - - int n_goodSta_ZMuMutagged; // total number of standAlone selected and tagged to study Trk charge - int n_correctTrkCharge_ZMuMutagged; // total number of standAlone selected and tagged with correct charge of Trk - int n_wrongTrkCharge_ZMuMutagged; // total number of standAlone selected and tagged with wrong charge of Trk - - int n_goodTrack_ZMuTracktagged; // number of traks selected and tagged to study Sta charge (for ZMuTrack colllection no ZMuMu found) - int n_correctStaCharge_ZMuTracktagged; // total number of tracks selected and tagged with correct charge of unMatched Sta - int n_wrongStaCharge_ZMuTracktagged; // total number of tracks selected and tagged with wrong charge of unMatched Sta - int n_StaNotFound_ZMuTracktagged; // total number of tracks selected and tagged with no STA found - - int n_goodSta_ZMuStatagged; // number of sta selected and tagged to study Trk charge (for ZMuSta collection no ZMuMu found) - int n_correctTrkCharge_ZMuStatagged; // total number of sta selected and tagged with correct charge of unMatched track - int n_wrongTrkCharge_ZMuStatagged; // total number of sta selected and tagged with wrong charge of unMatched track - int n_TrkNotFound_ZMuStatagged; // total number of selected selected and tagged with no Trk found - - int n_OneGoodZMuTrack; // total number with just 1 good ZMuTrack found - int n_MultipleGoodZMuTrack; // total number with more than 1 good ZMuTrack found - int numberOfMatchedZMuSta_; - int n_ZMuStaTaggedMatched; -}; - -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Math/interface/LorentzVector.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include -#include -#include - -ZMuMuPerformances::ZMuMuPerformances(const ParameterSet &pset) - : zMuMuToken_(consumes(pset.getParameter("zMuMu"))), - zMuMuMatchMapToken_(mayConsume(pset.getParameter("zMuMuMatchMap"))), - zMuTrackToken_(consumes(pset.getParameter("zMuTrack"))), - zMuTrackMatchMapToken_(mayConsume(pset.getParameter("zMuTrackMatchMap"))), - zMuStandAloneToken_(consumes(pset.getParameter("zMuStandAlone"))), - zMuStandAloneMatchMapToken_(mayConsume(pset.getParameter("zMuStandAloneMatchMap"))), - muonsToken_(consumes(pset.getParameter("muons"))), - muonMatchMapToken_(mayConsume(pset.getParameter("muonMatchMap"))), - muonIsoToken_(mayConsume(pset.getParameter("muonIso"))), - tracksToken_(consumes(pset.getParameter("tracks"))), - trackIsoToken_(mayConsume(pset.getParameter("trackIso"))), - genParticlesToken_(consumes(pset.getParameter("genParticles"))), - - noCut_(pset.getParameter("noCut")), - - zMassMin_(pset.getUntrackedParameter("zMassMin")), - zMassMax_(pset.getUntrackedParameter("zMassMax")), - ptminPlus_(pset.getUntrackedParameter("ptminPlus")), - ptmaxPlus_(pset.getUntrackedParameter("ptmaxPlus")), - etaminPlus_(pset.getUntrackedParameter("etaminPlus")), - etamaxPlus_(pset.getUntrackedParameter("etamaxPlus")), - ptminMinus_(pset.getUntrackedParameter("ptminMinus")), - ptmaxMinus_(pset.getUntrackedParameter("ptmaxMinus")), - etaminMinus_(pset.getUntrackedParameter("etaminMinus")), - etamaxMinus_(pset.getUntrackedParameter("etamaxMinus")), - isomax_(pset.getUntrackedParameter("isomax")) { - Service fs; - - // cut setting - etamax_ = etamaxPlus_; - ptmin_ = ptminPlus_; - massMin_ = zMassMin_; - massMax_ = zMassMax_; - isoMax_ = isomax_; - - // general histograms - h_n_globalMuon_perEvent = fs->make("n_globalMuon_perEvent", "n.of globalMuons per Event", 6, -.5, 5.5); - h_n_staOnlyMuon_perEvent = - fs->make("n_staOnlyMuon_perEvent", "n.of standAlone Only Muons per Event", 6, -.5, 5.5); - h_n_trackerOnlyMuon_perEvent = - fs->make("n_trackerOnlyMuon_perEvent", "n.of tracker Only Muons per Event", 6, -.5, 5.5); - h_n_trackerStaOnlyMuon_perEvent = - fs->make("n_trackerStaOnlyMuon_perEvent", "n.of tracker & StandAlone Only Muons per Event", 6, -.5, 5.5); - h_n_globalMuon_perEvent_MCmatch = - fs->make("n_globalMuon_perEvent_MCmatch", "n.of globalMuons per Event (MCmatch)", 6, -.5, 5.5); - h_n_staOnlyMuon_perEvent_MCmatch = - fs->make("n_staOnlyMuon_perEvent_MCmatch", "n.of standAlone Only Muons per Event (MCmatch)", 6, -.5, 5.5); - h_n_trackerOnlyMuon_perEvent_MCmatch = - fs->make("n_trackerOnlyMuon_perEvent_MCmatch", "n.of tracker Only Muons per Event (MCmatch)", 6, -.5, 5.5); - h_n_trackerStaOnlyMuon_perEvent_MCmatch = fs->make( - "n_trackerStaOnlyMuon_perEvent_MCmatch", "n.of tracker & StandAlone Only Muons per Event (MCmatch)", 6, -.5, 5.5); - h_n_tracks_perEvent = fs->make("n_tracks_perEvent", "n.of tracks per Event", 100, -.5, 99.5); - h_n_zMuMu_perEvent = fs->make("n_zMuMu_perEvent", "n.of global-global muons per Event", 6, -.5, 5.5); - h_n_zMuSta_perEvent = fs->make("n_zMuSta_perEvent", "n.of global-sta muons per Event", 6, -.5, 5.5); - h_n_zMuTrack_perEvent = fs->make("n_zMuTrack_perEvent", "n.of global-track muons per Event", 100, -.5, 99.5); - - // zMuMu inv mass - h_zMuMuMassSameSign = fs->make("zMuMuMassSameSign", "inv Mass ZMuMu cand SameSign", 100, 0., 200.); - h_zMuMuMassOppositeSign = fs->make("zMuMuMassOppositeSign", "inv Mass ZMuMu cand OppositeSign", 100, 0., 200.); - h_zMuMuMassSameSign_MCmatch = - fs->make("zMuMuMassSameSign_MCmatch", "inv Mass ZMuMu cand SameSign (MC match)", 100, 0., 200.); - - // histograms for MC truth - // charge truth - h_GlobalMuonChargeTimeGenCharge = - fs->make("GlobalMuonChargeTimeGenCharge", "charge global mu times charge generated mu", 3, -1.5, 1.5); - h_TrackerMuonChargeTimeGenCharge = - fs->make("TrackerMuonChargeTimeGenCharge", "charge Tracker mu times charge generated mu", 3, -1.5, 1.5); - // resolution respect to gen particles - h_GlobalMuonEtaMinusGenEta = - fs->make("GlobalMuonEtaMinusGenEta", "global mu Eta minus generated mu Eta", 100, -.005, .005); - h_GlobalMuonPtMinusGenPt = - fs->make("GlobalMuonPtMinusGenPtoverPt", "global mu Pt minus generated mu Pt over Pt", 100, -.5, .5); - h_GlobalMuonStaComponentEtaMinusGenEta = fs->make( - "GlobalMuonStaComponentEtaMinusGenEta", "global mu Sta cmponent Eta minus generated mu Eta", 100, -.5, .5); - h_GlobalMuonStaComponentPtMinusGenPt = fs->make("GlobalMuonStaComponentPtMinusGenPtoerPt", - "global mu Sta component Pt minus generated mu Pt over Pt", - 100, - -1., - 1.); - h_TrackerMuonEtaMinusGenEta = - fs->make("TrackerMuonEtaMinusGenEta", "Tracker mu Eta minus Eta generated mu", 100, -.005, .005); - h_TrackerMuonPtMinusGenPt = - fs->make("TrackerMuonPtMinusenPtoverPt", "Tracker mu Pt minus Pt generated mu over Pt", 100, -.5, .5); - - h_DEtaGlobalGenvsEtaGen = - fs->make("h_DEtaGlobalGenvsEtaGen", "Eta global - Eta Gen vs Eta gen", 50, -2.5, 2.5, 100, -.005, .005); - h_DEtaGlobalStaComponentGenvsEtaGen = fs->make("h_DEtaGlobalStaComponentGenvsEtaGen", - "Eta Sta component of a Global - Eta Gen vs Eta gen", - 50, - -2.5, - 2.5, - 100, - -.5, - .5); - h_DPtGlobalGenvsPtGen = - fs->make("h_DPtGlobalGenovePtvsPtGen", "Pt global - Pt Gen over Pt vs Pt gen", 50, 0., 100., 100, -.5, .5); - h_DPtGlobalStaComponentGenvsPtGen = fs->make("h_DPtGlobalStaComponentGenoverPtvsPtGen", - "Pt Sta component of a Global - Pt Gen over Pt vs Pt gen", - 50, - 0., - 100., - 100, - -1., - 1.); - - // resolution respect to gen particles for ZMuMuTagged events - h_GlobalMuonEtaMinusGenEta_ZMuMuTagged = - fs->make("GlobalMuonEtaMinusGenEta_ZMuMuTagged", "global mu Eta minus generated mu Eta", 100, -.005, .005); - h_GlobalMuonPtMinusGenPt_ZMuMuTagged = fs->make( - "GlobalMuonPtMinusGenPtoverPt_ZMuMuTagged", "global mu Pt minus generated mu Pt over Pt", 100, -.5, .5); - h_GlobalMuonStaComponentEtaMinusGenEta_ZMuMuTagged = - fs->make("GlobalMuonStaComponentEtaMinusGenEta_ZMuMuTagged", - "global mu Sta cmponent Eta minus generated mu Eta", - 100, - -.5, - .5); - h_GlobalMuonStaComponentPtMinusGenPt_ZMuMuTagged = - fs->make("GlobalMuonStaComponentPtMinusGenPtoverPt_ZMuMuTagged", - "global mu Sta component Pt minus generated mu Pt over Pt", - 100, - -1., - 1.); - h_DEtaGlobalGenvsEtaGen_ZMuMuTagged = fs->make( - "h_DEtaGlobalGenvsEtaGen_ZMuMuTagged", "Eta global - Eta Gen vs Eta gen", 50, -2.5, 2.5, 100, -.005, .005); - h_DEtaGlobalStaComponentGenvsEtaGen_ZMuMuTagged = fs->make("h_DEtaGlobalStaComponentGenvsEtaGen_ZMuMuTagged", - "Eta Sta component of a Global - Eta Gen vs Eta gen", - 50, - -2.5, - 2.5, - 100, - -.5, - .5); - h_DPtGlobalGenvsPtGen_ZMuMuTagged = fs->make( - "h_DPtGlobalGenOverPtvsPtGen_ZMuMuTagged", "Pt global - Pt Gen vs Pt gen over Pt", 50, 0., 100., 100, -.5, .5); - h_DPtGlobalStaComponentGenvsPtGen_ZMuMuTagged = - fs->make("h_DPtGlobalStaComponentGenoverPtvsPtGen_ZMuMuTagged", - "Pt Sta component of a Global - Pt Gen over Pt vs Pt gen", - 50, - 0., - 100., - 100, - -1., - 1.); - h_DPtGlobalGenvsEtaGen_ZMuMuTagged = fs->make( - "h_DPtGlobalGenOverPtvsEtaGen_ZMuMuTagged", "Pt global - Pt Gen over Pt vs Eta gen", 50, -2.5, 2.5, 100, -.5, .5); - h_DPtGlobalStaComponentGenvsEtaGen_ZMuMuTagged = - fs->make("h_DPtGlobalStaComponentGenoverPtvsEtaGen_ZMuMuTagged", - "Pt Sta component of a Global - Pt Gen over Pt vs Eta gen", - 50, - -2.5, - 2.5, - 100, - -1., - 1.); - h_DPtTrackGenvsPtGen_ZMuMuTagged = fs->make( - "h_DPtTrackGenOverPtvsPtGen_ZMuMuTagged", "Pt track - Pt Gen vs Pt gen over Pt", 50, 0., 100., 100, -.5, .5); - h_DPtTrackGenvsEtaGen_ZMuMuTagged = fs->make( - "h_DPtTrackGenOverPtvsEtaGen_ZMuMuTagged", "Pt track - Pt Gen over Pt vs Eta gen", 50, -2.5, 2.5, 100, -.5, .5); - - // histograms for cynematic of ZMuMutagged muons for Sta performances studies - h_zMuTrackMass_ZMuMuTagged = - fs->make("zMuTrackMass_ZMuMuTagged", "inv Mass ZMuTrack cand (global-global)", 100, 0., 200.); - h_etaTrack_ZMuMuTagged = fs->make("etaTrack_ZMuMuTagged", "eta of Track (global-global)", 50, -2.5, 2.5); - h_phiTrack_ZMuMuTagged = fs->make("phiTrack_ZMuMuTagged", "phi of Track (global-global)", 50, -3.1415, 3.1415); - h_ptTrack_ZMuMuTagged = fs->make("ptTrack_ZMuMuTagged", "pt of Track (global-global)", 100, 0., 100.); - h_DRTrack_ZMuMuTagged = fs->make("DRTrackSta_ZMuMuTagged", "DR track-sta (global-global)", 100, 0., 5.); - - // histograms for cynematic of ZMuMutagged muons when StandAlone has wrong charge - h_zMuTrackMass_wrongStaCharge_ZMuMuTagged = fs->make( - "zMuTrackMass_wrongStaCharge_ZMuMuTagged", "inv Mass ZMuTrack cand (global-global wrongStaCharge)", 100, 0., 200.); - h_etaTrack_wrongStaCharge_ZMuMuTagged = fs->make( - "etaTrack_wrongStaCharge_ZMuMuTagged", "eta of Track (global-global wrongStaCharge)", 50, -2.5, 2.5); - h_phiTrack_wrongStaCharge_ZMuMuTagged = fs->make( - "phiTrack_wrongStaCharge_ZMuMuTagged", "phi of Track (global-global wrongStaCharge)", 50, -3.1415, 3.1415); - h_ptTrack_wrongStaCharge_ZMuMuTagged = - fs->make("ptTrack_wrongStaCharge_ZMuMuTagged", "pt of Track (global-global wrongStaCharge)", 100, 0., 100.); - h_DRTrack_wrongStaCharge_ZMuMuTagged = fs->make( - "DRTrackSta_wrongStaCharge_ZMuMuTagged", "DR track-sta (global-global wrongStaCharge)", 100, 0., 5.); - - // hisograms for performances of StandAlone when StandAlone has correct charge - h_zMuStaMass_correctStaCharge_ZMuMuTagged = fs->make( - "zMuStaMass_correctStaCharge_ZMuMuTagged", "inv Mass ZMuSta cand (global-global correctStaCharge)", 100, 0., 200.); - h_ptStaMinusptTrack_correctStaCharge_ZMuMuTagged = - fs->make("ptStaMinusptTrackoverPT_correctStaCharge_ZMuMuTagged", - "ptSta - ptTrack over Pt (global-global correctStaCharge)", - 100, - -1., - 1.); - h_ptStaMinusptTrack_vsPtTracker_correctStaCharge_ZMuMuTagged = - fs->make("ptStaMinusptTrackoverPt_vsPtTracker_correctStaCharge_ZMuMuTagged", - "ptSta - ptTrack over Pt vs ptTrack (global-global correctStaCharge)", - 100, - 0., - 100., - 100, - -1., - 1.); - h_ptStaMinusptTrack_vsEtaTracker_correctStaCharge_ZMuMuTagged = - fs->make("ptStaMinusptTrackoverPt_vsEtaTracker_correctStaCharge_ZMuMuTagged", - "ptSta - ptTrack over Pt vs etaTrack (global-global correctStaCharge)", - 100, - -2.5, - 2.5, - 100, - -1., - 1.); - - // histograms for cynematic of ZMuMutagged muons for TRK performances studies - h_zMuStaMass_ZMuMuTagged = - fs->make("zMuStaMass_ZMuMuTagged", "inv Mass ZMuSta cand (global-global)", 100, 0., 200.); - h_etaSta_ZMuMuTagged = fs->make("etaSta_ZMuMuTagged", "eta of Sta (global-global)", 50, -2.5, 2.5); - h_phiSta_ZMuMuTagged = fs->make("phiSta_ZMuMuTagged", "phi of Sta (global-global)", 50, -3.1415, 3.1415); - h_ptSta_ZMuMuTagged = fs->make("ptSta_ZMuMuTagged", "pt of Sta (global-global)", 100, 0., 100.); - h_DRSta_ZMuMuTagged = - fs->make("DRTrackSta_ZMuMuTagged_staSelected", "DR track-sta sta selected (global-global)", 100, 0., 5.); - - // histograms for cynematic of ZMuMutagged muons when Track has wrong charge - h_zMuStaMass_wrongTrkCharge_ZMuMuTagged = fs->make( - "zMuStaMass_wrongTrkCharge_ZMuMuTagged", "inv Mass ZMuSta cand (global-global wrongTrkCharge)", 100, 0., 200.); - h_etaSta_wrongTrkCharge_ZMuMuTagged = - fs->make("etaSta_wrongTrkCharge_ZMuMuTagged", "eta of Sta (global-global wrongTrkCharge)", 50, -2.5, 2.5); - h_phiSta_wrongTrkCharge_ZMuMuTagged = fs->make( - "phiSta_wrongTrkCharge_ZMuMuTagged", "phi of Sta (global-global wrongTrkCharge)", 50, -3.1415, 3.1415); - h_ptSta_wrongTrkCharge_ZMuMuTagged = - fs->make("ptSta_wrongTrkCharge_ZMuMuTagged", "pt of Sta (global-global wrongTrkCharge)", 100, 0., 100.); - h_DRSta_wrongTrkCharge_ZMuMuTagged = fs->make( - "DRTrackSta_wrongTrkCharge_ZMuMuTagged", "DR track-sta (global-global wrongTrkCharge)", 100, 0., 5.); - - // - // **************************************************************************************************** - // histograms for cynematic of ZMuTracktagged muons with unMatched StandAlone - h_zMuTrackMass_ZMuTrackTagged = - fs->make("zMuTrackMass_ZMuTrackTagged", "inv Mass ZMuTrack cand (global-track)", 100, 0., 200.); - h_etaTrack_ZMuTrackTagged = fs->make("etaTrack_ZMuTrackTagged", "eta of Track (global-track)", 50, -2.5, 2.5); - h_phiTrack_ZMuTrackTagged = - fs->make("phiTrack_ZMuTrackTagged", "phi of Track (global-track)", 50, -3.1415, 3.1415); - h_ptTrack_ZMuTrackTagged = fs->make("ptTrack_ZMuTrackTagged", "pt of Track (global-track)", 100, 0., 100.); - h_DRTrack_ZMuTrackTagged = fs->make("DRTrackSta_ZMuTrackTagged", "DR track-sta (global-track)", 100, 0., 5.); - - // histograms for cynematic of ZMuTracktagged muons when unMatched StandAlone has wrong charge - h_zMuTrackMass_wrongStaCharge_ZMuTrackTagged = - fs->make("zMuTrackMass_wrongStaCharge_ZMuTrackTagged", - "inv Mass ZMuTrack cand (global-track wrongUnMatcehdStaCharge)", - 100, - 0., - 200.); - h_etaTrack_wrongStaCharge_ZMuTrackTagged = fs->make( - "etaTrack_wrongStaCharge_ZMuTrackTagged", "eta of Track (global-track wrongUnMatchedStaCharge)", 50, -2.5, 2.5); - h_phiTrack_wrongStaCharge_ZMuTrackTagged = fs->make("phiTrack_wrongStaCharge_ZMuTrackTagged", - "phi of Track (global-track wrongUnMatchedStaCharge)", - 50, - -3.1415, - 3.1415); - h_ptTrack_wrongStaCharge_ZMuTrackTagged = fs->make( - "ptTrack_wrongStaCharge_ZMuTrackTagged", "pt of Track (global-track wrongUnMatchedStaCharge)", 100, 0., 100.); - h_DRTrack_wrongStaCharge_ZMuTrackTagged = fs->make( - "DRTrackSta_wrongStaCharge_ZMuTrackTagged", "DR track-sta (global-track wrongUnMatchedStaCharge)", 100, 0., 5.); - - // histograms for cynematic of ZMuStatagged muons with unMatched Track - h_zMuStaMass_ZMuStaTagged = - fs->make("zMuStaMass_ZMuStaTagged", "inv Mass ZMuSta cand (global-sta)", 100, 0., 200.); - h_etaSta_ZMuStaTagged = fs->make("etaSta_ZMuStaTagged", "eta of Sta (global-sta)", 50, -2.5, 2.5); - h_phiSta_ZMuStaTagged = fs->make("phiSta_ZMuStaTagged", "phi of Sta (global-sta)", 50, -3.1415, 3.1415); - h_ptSta_ZMuStaTagged = fs->make("ptSta_ZMuStaTagged", "pt of Sta (global-sta)", 100, 0., 100.); - - // histograms for cynematic of ZMuStatagged muons when unMatched track has wrong charge - h_zMuStaMass_wrongTrkCharge_ZMuStaTagged = fs->make("zMuStaMass_wrongTrkCharge_ZMuStaTagged", - "inv Mass ZMuSta cand (global-sta wrongUnMatcehdTrkCharge)", - 100, - 0., - 200.); - h_etaSta_wrongTrkCharge_ZMuStaTagged = fs->make( - "etaSta_wrongTrkCharge_ZMuStaTagged", "eta of Sta (global-sta wrongUnMatchedTrkCharge)", 50, -2.5, 2.5); - h_phiSta_wrongTrkCharge_ZMuStaTagged = fs->make( - "phiSta_wrongTrkCharge_ZMuStaTagged", "phi of Sta (global-sta wrongUnMatchedTrkCharge)", 50, -3.1415, 3.1415); - h_ptSta_wrongTrkCharge_ZMuStaTagged = fs->make( - "ptSta_wrongTrkCharge_ZMuStaTagged", "pt of Sta (global-sta wrongUnMatchedTrkCharge)", 100, 0., 100.); - - // clear global counters - totalNumberOfZfound = 0; - totalNumberOfZpassed = 0; - nZMuMuSameSign_mcMatched = 0; - nZMuMuSameSign = 0; - n_goodTrack_ZMuMutagged = 0; - n_correctStaCharge_ZMuMutagged = 0; - n_wrongStaCharge_ZMuMutagged = 0; - n_goodSta_ZMuMutagged = 0; - n_correctTrkCharge_ZMuMutagged = 0; - n_wrongTrkCharge_ZMuMutagged = 0; - n_goodTrack_ZMuTracktagged = 0; - n_correctStaCharge_ZMuTracktagged = 0; - n_wrongStaCharge_ZMuTracktagged = 0; - n_StaNotFound_ZMuTracktagged = 0; - - n_goodSta_ZMuStatagged = 0; - n_correctTrkCharge_ZMuStatagged = 0; - n_wrongTrkCharge_ZMuStatagged = 0; - n_TrkNotFound_ZMuStatagged = 0; - - n_OneGoodZMuTrack = 0; - n_MultipleGoodZMuTrack = 0; - numberOfMatchedZMuSta_ = 0; - n_ZMuStaTaggedMatched = 0; -} - -void ZMuMuPerformances::analyze(const Event &event, const EventSetup &setup) { - Handle zMuMu; - Handle zMuMuMatchMap; //Map of Z made by Mu global + Mu global (can be used also for same sign Zmumu) - Handle zMuTrack; - Handle zMuTrackMatchMap; //Map of Z made by Mu + Track - Handle zMuStandAlone; - Handle zMuStandAloneMatchMap; //Map of Z made by Mu + StandAlone - Handle muons; //Collection of Muons - Handle muonMatchMap; - Handle muonIso; - Handle tracks; //Collection of Tracks - Handle trackIso; - Handle genParticles; // Collection of Generatd Particles - - event.getByToken(zMuMuToken_, zMuMu); - event.getByToken(zMuTrackToken_, zMuTrack); - event.getByToken(zMuStandAloneToken_, zMuStandAlone); - event.getByToken(muonsToken_, muons); - event.getByToken(tracksToken_, tracks); - event.getByToken(genParticlesToken_, genParticles); - - /* - cout << "********* zMuMu size : " << zMuMu->size() << endl; - cout << "********* zMuMuSameSign size : " << zMuMuSameSign->size() << endl; - cout << "********* zMuStandAlone size : " << zMuStandAlone->size() << endl; - cout << "********* zMuTrack size : " << zMuTrack->size() << endl; - cout << "********* muons size : " << muons->size()<< endl; - cout << "********* standAlone size : " << standAlone->size()<< endl; - cout << "********* tracks size : " << tracks->size()<< endl; - cout << "********* generated size : " << genParticles->size()<< endl; - cout << "***************************************************" << endl; - */ - - int n_globalMuon_perEvent = 0; - int n_staOnlyMuon_perEvent = 0; - int n_trackerOnlyMuon_perEvent = 0; - int n_trackerStaOnlyMuon_perEvent = 0; - int n_globalMuon_perEvent_MCmatch = 0; - int n_staOnlyMuon_perEvent_MCmatch = 0; - int n_trackerOnlyMuon_perEvent_MCmatch = 0; - int n_trackerStaOnlyMuon_perEvent_MCmatch = 0; - - for (unsigned int j = 0; j < muons->size(); ++j) { - CandidateBaseRef muCandRef = muons->refAt(j); - const Candidate &muCand = (*muons)[j]; //the candidate - const reco::Muon &muon = dynamic_cast(muCand); - reco::TrackRef innerTrackRef = muon.track(); - reco::TrackRef outerTrackRef = muon.standAloneMuon(); - TrackRef muStaComponentRef = muCand.get(); // standalone part of muon - TrackRef muTrkComponentRef = muCand.get(); // track part of muon - GenParticleRef muonMatch = (*muonMatchMap)[muCandRef]; - if (muCandRef->isGlobalMuon() == 1) - n_globalMuon_perEvent++; - if (muCandRef->isGlobalMuon() == 0 && muCandRef->isTrackerMuon() == 0 && muCandRef->isStandAloneMuon() == 1) - n_staOnlyMuon_perEvent++; - if (muCandRef->isGlobalMuon() == 0 && muCandRef->isTrackerMuon() == 1 && muCandRef->isStandAloneMuon() == 0) - n_trackerOnlyMuon_perEvent++; - if (muCandRef->isGlobalMuon() == 0 && muCandRef->isTrackerMuon() == 1 && muCandRef->isStandAloneMuon() == 1) - n_trackerStaOnlyMuon_perEvent++; - - if (muonMatch.isNonnull()) { - if (muCandRef->isGlobalMuon() == 1) - n_globalMuon_perEvent_MCmatch++; - if (muCandRef->isGlobalMuon() == 0 && muCandRef->isTrackerMuon() == 0 && muCandRef->isStandAloneMuon() == 1) - n_staOnlyMuon_perEvent_MCmatch++; - if (muCandRef->isGlobalMuon() == 0 && muCandRef->isTrackerMuon() == 1 && muCandRef->isStandAloneMuon() == 0) - n_trackerOnlyMuon_perEvent_MCmatch++; - if (muCandRef->isGlobalMuon() == 0 && muCandRef->isTrackerMuon() == 1 && muCandRef->isStandAloneMuon() == 1) - n_trackerStaOnlyMuon_perEvent_MCmatch++; - double productCharge = muCandRef->charge() * muonMatch->charge(); - if (muCandRef->isGlobalMuon() == 1) { - h_GlobalMuonChargeTimeGenCharge->Fill(productCharge); - h_GlobalMuonEtaMinusGenEta->Fill(muCandRef->eta() - muonMatch->eta()); - h_GlobalMuonPtMinusGenPt->Fill((muCandRef->pt() - muonMatch->pt()) / muonMatch->pt()); - h_GlobalMuonStaComponentEtaMinusGenEta->Fill(muStaComponentRef->eta() - muonMatch->eta()); - h_GlobalMuonStaComponentPtMinusGenPt->Fill((muStaComponentRef->pt() - muonMatch->pt()) / muonMatch->pt()); - h_DEtaGlobalGenvsEtaGen->Fill(muonMatch->eta(), muCandRef->eta() - muonMatch->eta()); - h_DPtGlobalGenvsPtGen->Fill(muonMatch->pt(), (muCandRef->pt() - muonMatch->pt()) / muonMatch->pt()); - h_DEtaGlobalStaComponentGenvsEtaGen->Fill(muonMatch->eta(), muStaComponentRef->eta() - muonMatch->eta()); - h_DPtGlobalStaComponentGenvsPtGen->Fill(muonMatch->pt(), - (muStaComponentRef->pt() - muonMatch->pt()) / muonMatch->pt()); - } - if (muCandRef->isGlobalMuon() == 0 && muCandRef->isTrackerMuon() == 1) { - h_TrackerMuonChargeTimeGenCharge->Fill(productCharge); - h_TrackerMuonEtaMinusGenEta->Fill(muCandRef->eta() - muonMatch->eta()); - h_TrackerMuonPtMinusGenPt->Fill((muCandRef->pt() - muonMatch->pt()) / muonMatch->pt()); - } - } - } - h_n_globalMuon_perEvent->Fill(n_globalMuon_perEvent); - h_n_staOnlyMuon_perEvent->Fill(n_staOnlyMuon_perEvent); - h_n_trackerOnlyMuon_perEvent->Fill(n_trackerOnlyMuon_perEvent); - h_n_trackerStaOnlyMuon_perEvent->Fill(n_trackerStaOnlyMuon_perEvent); - h_n_globalMuon_perEvent_MCmatch->Fill(n_globalMuon_perEvent_MCmatch); - h_n_staOnlyMuon_perEvent_MCmatch->Fill(n_staOnlyMuon_perEvent_MCmatch); - h_n_trackerOnlyMuon_perEvent_MCmatch->Fill(n_trackerOnlyMuon_perEvent_MCmatch); - h_n_trackerStaOnlyMuon_perEvent_MCmatch->Fill(n_trackerStaOnlyMuon_perEvent_MCmatch); - h_n_tracks_perEvent->Fill(tracks->size()); - - h_n_zMuMu_perEvent->Fill(zMuMu->size()); - h_n_zMuSta_perEvent->Fill(zMuStandAlone->size()); - h_n_zMuTrack_perEvent->Fill(zMuTrack->size()); - - // std::cout<<"Run-> "< "<empty()) { - event.getByToken(zMuMuMatchMapToken_, zMuMuMatchMap); - event.getByToken(muonIsoToken_, muonIso); - event.getByToken(muonMatchMapToken_, muonMatchMap); - float muGenplus_pt = 0, muGenminus_pt = 0, muGenplus_eta = 100, muGenminus_eta = 100; - for (unsigned int i = 0; i < zMuMu->size(); ++i) { //loop on candidates - const Candidate &zMuMuCand = (*zMuMu)[i]; //the candidate - CandidateBaseRef zMuMuCandRef = zMuMu->refAt(i); - GenParticleRef zMuMuMatch = (*zMuMuMatchMap)[zMuMuCandRef]; - bool isMCMatched = false; - if (zMuMuMatch.isNonnull()) { - isMCMatched = true; // ZMuMu matched - if (zMuMuMatch->pdgId() == 23 && zMuMuMatch->status() == 3 && zMuMuMatch->numberOfDaughters() == 3) { - // Z0 decays in mu+ mu-, the 3rd daughter is the same Z0 - const Candidate *dauGen0 = zMuMuMatch->daughter(0); - const Candidate *dauGen1 = zMuMuMatch->daughter(1); - const Candidate *dauGen2 = zMuMuMatch->daughter(2); - if (check_ifZmumu(dauGen0, dauGen1, dauGen2)) { // Z0 in mu+ mu- - muGenplus_pt = getParticlePt(-13, dauGen0, dauGen1, dauGen2); - muGenminus_pt = getParticlePt(13, dauGen0, dauGen1, dauGen2); - muGenplus_eta = getParticleEta(-13, dauGen0, dauGen1, dauGen2); - muGenminus_eta = getParticleEta(13, dauGen0, dauGen1, dauGen2); - Particle::LorentzVector pZ(0, 0, 0, 0); - Particle::LorentzVector muplusp4 = getParticleP4(-13, dauGen0, dauGen1, dauGen2); - Particle::LorentzVector muminusp4 = getParticleP4(13, dauGen0, dauGen1, dauGen2); - pZ = muplusp4 + muminusp4; - } // en if is Z - } // end if is Z->mumu - } - - TrackRef as1 = zMuMuCand.daughter(0)->get(); // standalone part of ZMuMu cand0 - TrackRef as2 = zMuMuCand.daughter(1)->get(); // standalone part of ZMuMu cand1 - TrackRef a1 = zMuMuCand.daughter(0)->get(); // global part of ZMuMu cand0 - TrackRef a2 = zMuMuCand.daughter(1)->get(); // global part of ZMuMu cand1 - TrackRef at1 = zMuMuCand.daughter(0)->get(); // tracker part of ZMuMu cand0 - TrackRef at2 = zMuMuCand.daughter(1)->get(); // tracker part of ZMuMu cand1 - - math::XYZTLorentzVector ps1(as1->px(), as1->py(), as1->pz(), as1->p()); - math::XYZTLorentzVector ps2(as2->px(), as2->py(), as2->pz(), as2->p()); - math::XYZTLorentzVector pg1(a1->px(), a1->py(), a1->pz(), a1->p()); - math::XYZTLorentzVector pg2(a2->px(), a2->py(), a2->pz(), a2->p()); - math::XYZTLorentzVector ptrk1(at1->px(), at1->py(), at1->pz(), at1->p()); - math::XYZTLorentzVector ptrk2(at2->px(), at2->py(), at2->pz(), at2->p()); - - // double mass2global = (pg1+pg2).mass(); // inv. Mass done with the two global muons (is th same like m) - double massGlobalSta = - (pg1 + ps2).mass(); // inv. mass done with the global daughter(0) and the Sta part of Daughter(1) - double massStaGlobal = - (ps1 + pg2).mass(); // inv. mass done with the global daughter(1) and the Sta part of Daughter(0) - // double mass2Tracker = (ptrk1+ptrk2).mass(); // inv. mass done with the two tracker compnents - double massGlobalTracker = - (pg1 + ptrk2).mass(); // inv. mass done with the global daughter(0) and the tracker part of Daughter(1) - double massTrackerGlobal = - (ptrk1 + pg2).mass(); // inv. mass done with the global daughter(1) and the tracker part of Daughter(0) - double etaGlobal1 = a1->eta(); - double etaGlobal2 = a2->eta(); - double etaSta1 = as1->eta(); - double etaSta2 = as2->eta(); - double etaTracker1 = at1->eta(); - double etaTracker2 = at2->eta(); - // double phiGlobal1 = a1->phi(); - // double phiGlobal2 = a2->phi(); - double phiSta1 = as1->phi(); - double phiSta2 = as2->phi(); - double phiTracker1 = at1->phi(); - double phiTracker2 = at2->phi(); - double ptGlobal1 = a1->pt(); - double ptGlobal2 = a2->pt(); - double ptSta1 = as1->pt(); - double ptSta2 = as2->pt(); - double ptTracker1 = at1->pt(); - double ptTracker2 = at2->pt(); - double chargeGlobal1 = a1->charge(); - double chargeGlobal2 = a2->charge(); - double chargeSta1 = as1->charge(); - double chargeSta2 = as2->charge(); - double chargeTracker1 = at1->charge(); - double chargeTracker2 = at2->charge(); - double DR1 = deltaR(etaSta1, phiSta1, etaTracker1, phiTracker1); - double DR2 = deltaR(etaSta2, phiSta2, etaTracker2, phiTracker2); - - if (chargeGlobal1 == chargeGlobal2) { - nZMuMuSameSign++; - h_zMuMuMassSameSign->Fill(zMuMuCand.mass()); - if (isMCMatched) { - nZMuMuSameSign_mcMatched++; - h_zMuMuMassSameSign_MCmatch->Fill(zMuMuCand.mass()); - } - } else { - h_zMuMuMassOppositeSign->Fill(zMuMuCand.mass()); - } - - bool etaCut = false; - bool ptCut = false; - //bool isoCut = false; - bool massCut = false; - - // ****************************************************************************************************************************** - // Start study for StandAlone charge mis-id: select global-global events according to global1+track2 (or global2+track1) - // ******************************************************************************************************************************* - - // cynematical cuts for Zglobal1Track2 - if (abs(etaGlobal1) < etamax_ && abs(etaTracker2) < etamax_) - etaCut = true; - if (ptGlobal1 > ptmin_ && ptTracker2 > ptmin_) - ptCut = true; - if (massGlobalTracker > massMin_ && massGlobalTracker < massMax_) - massCut = true; - - if (noCut_) { - etaCut = true; - ptCut = true; - massCut = true; - } - - if (etaCut && ptCut && massCut) { - // check first global1-track2 if they have opposite charge and if global1 has consistent charge between sta and track - if (chargeSta1 == chargeTracker1 && - chargeTracker1 != chargeTracker2) { // event tagged to study StandAlone2 charge - n_goodTrack_ZMuMutagged++; - h_zMuTrackMass_ZMuMuTagged->Fill(massGlobalTracker); // inv mass global+tracker part - h_etaTrack_ZMuMuTagged->Fill(etaTracker2); // eta of tagged track - h_phiTrack_ZMuMuTagged->Fill(phiTracker2); // phi of tagged track - h_ptTrack_ZMuMuTagged->Fill(ptTracker2); // pt of tagged track - h_DRTrack_ZMuMuTagged->Fill(DR2); // DR between sta2 and tracker2 for tagged track - - if (isMCMatched) { // if MC match .. resolution plots of global1 respect to gen particles - double etaGen, ptGen; - if (chargeGlobal1 == 1) { - etaGen = muGenplus_eta; - ptGen = muGenplus_pt; - } else { - etaGen = muGenminus_eta; - ptGen = muGenminus_pt; - } - h_GlobalMuonEtaMinusGenEta_ZMuMuTagged->Fill(etaGlobal1 - etaGen); - h_GlobalMuonPtMinusGenPt_ZMuMuTagged->Fill((ptGlobal1 - ptGen) / ptGen); - h_GlobalMuonStaComponentEtaMinusGenEta_ZMuMuTagged->Fill(etaSta1 - etaGen); - h_GlobalMuonStaComponentPtMinusGenPt_ZMuMuTagged->Fill((ptSta1 - ptGen) / ptGen); - h_DEtaGlobalGenvsEtaGen_ZMuMuTagged->Fill(etaGen, etaGlobal1 - etaGen); - h_DPtGlobalGenvsPtGen_ZMuMuTagged->Fill(ptGen, (ptGlobal1 - ptGen) / ptGen); - h_DEtaGlobalStaComponentGenvsEtaGen_ZMuMuTagged->Fill(etaGen, etaSta1 - etaGen); - h_DPtGlobalStaComponentGenvsPtGen_ZMuMuTagged->Fill(ptGen, (ptSta1 - ptGen) / ptGen); - h_DPtGlobalGenvsEtaGen_ZMuMuTagged->Fill(etaGen, (ptGlobal1 - ptGen) / ptGen); - h_DPtGlobalStaComponentGenvsEtaGen_ZMuMuTagged->Fill(etaGen, (ptSta1 - ptGen) / ptGen); - h_DPtTrackGenvsPtGen_ZMuMuTagged->Fill(ptGen, (ptTracker1 - ptGen) / ptGen); - h_DPtTrackGenvsEtaGen_ZMuMuTagged->Fill(etaGen, (ptTracker1 - ptGen) / ptGen); - - } // end if MC Match - - if (chargeSta2 == chargeTracker2) { // StandAlone2 has correct charge - n_correctStaCharge_ZMuMutagged++; - h_zMuStaMass_correctStaCharge_ZMuMuTagged->Fill( - massGlobalSta); // inv mass of global-Sta part for correct charge muons - h_ptStaMinusptTrack_correctStaCharge_ZMuMuTagged->Fill((ptSta2 - ptTracker2) / ptTracker2); - h_ptStaMinusptTrack_vsEtaTracker_correctStaCharge_ZMuMuTagged->Fill(etaTracker2, - (ptSta2 - ptTracker2) / ptTracker2); - h_ptStaMinusptTrack_vsPtTracker_correctStaCharge_ZMuMuTagged->Fill(ptTracker2, - (ptSta2 - ptTracker2) / ptTracker2); - // qui posso aggiungere plot col MC match - } - if (chargeSta2 != chargeTracker2) { // StandAlone2 has wrong charge - n_wrongStaCharge_ZMuMutagged++; - h_zMuTrackMass_wrongStaCharge_ZMuMuTagged->Fill( - massGlobalTracker); // inv mass global+tracker part (wrong Sta charge) - h_etaTrack_wrongStaCharge_ZMuMuTagged->Fill(etaTracker2); // eta of tagged track (wrong Sta charge) - h_phiTrack_wrongStaCharge_ZMuMuTagged->Fill(phiTracker2); // phi of tagged track (wrong Sta charge) - h_ptTrack_wrongStaCharge_ZMuMuTagged->Fill(ptTracker2); // pt of tagged track (wrong Sta charge) - h_DRTrack_wrongStaCharge_ZMuMuTagged->Fill( - DR2); // DR between sta2 and tracker2 for tagged track (wrong Sta charge) - } - } // end if check chrge global1-tracker2 - } // end if cut selection - - // cynematical cuts for Zglobal2Track1 - etaCut = false; - ptCut = false; - massCut = false; - //isoCut = false; - if (abs(etaGlobal2) < etamax_ && abs(etaTracker1) < etamax_) - etaCut = true; - if (ptGlobal2 > ptmin_ && ptTracker1 > ptmin_) - ptCut = true; - if (massTrackerGlobal > massMin_ && massTrackerGlobal < massMax_) - massCut = true; - - if (noCut_) { - etaCut = true; - ptCut = true; - massCut = true; - } - - if (etaCut && ptCut && massCut) { - // check global2-track1 if they have opposite charge and if global2 has consistent charge between sta and track - if (chargeSta2 == chargeTracker2 && - chargeTracker1 != chargeTracker2) { // event tagged to study StandAlone2 charge - n_goodTrack_ZMuMutagged++; - h_zMuTrackMass_ZMuMuTagged->Fill(massTrackerGlobal); // inv mass global+tracker part - h_etaTrack_ZMuMuTagged->Fill(etaTracker1); // eta of tagged track - h_phiTrack_ZMuMuTagged->Fill(phiTracker1); // phi of tagged track - h_ptTrack_ZMuMuTagged->Fill(ptTracker1); // pt of tagged track - h_DRTrack_ZMuMuTagged->Fill(DR1); // DR between sta1 and tracker1 for tagged track - - // qui posso aggiungere plot col MC match - if (isMCMatched) { // if MC match .. resolution plots of global2 respect to gen particles - double etaGen, ptGen; - if (chargeGlobal2 == 1) { - etaGen = muGenplus_eta; - ptGen = muGenplus_pt; - } else { - etaGen = muGenminus_eta; - ptGen = muGenminus_pt; - } - h_GlobalMuonEtaMinusGenEta_ZMuMuTagged->Fill(etaGlobal2 - etaGen); - h_GlobalMuonPtMinusGenPt_ZMuMuTagged->Fill((ptGlobal2 - ptGen) / ptGen); - h_GlobalMuonStaComponentEtaMinusGenEta_ZMuMuTagged->Fill(etaSta2 - etaGen); - h_GlobalMuonStaComponentPtMinusGenPt_ZMuMuTagged->Fill((ptSta2 - ptGen) / ptGen); - h_DEtaGlobalGenvsEtaGen_ZMuMuTagged->Fill(etaGen, etaGlobal2 - etaGen); - h_DPtGlobalGenvsPtGen_ZMuMuTagged->Fill(ptGen, (ptGlobal2 - ptGen) / ptGen); - h_DEtaGlobalStaComponentGenvsEtaGen_ZMuMuTagged->Fill(etaGen, etaSta2 - etaGen); - h_DPtGlobalStaComponentGenvsPtGen_ZMuMuTagged->Fill(ptGen, (ptSta2 - ptGen) / ptGen); - h_DPtGlobalGenvsEtaGen_ZMuMuTagged->Fill(etaGen, (ptGlobal2 - ptGen) / ptGen); - h_DPtGlobalStaComponentGenvsEtaGen_ZMuMuTagged->Fill(etaGen, (ptSta2 - ptGen) / ptGen); - h_DPtTrackGenvsPtGen_ZMuMuTagged->Fill(ptGen, (ptTracker2 - ptGen) / ptGen); - h_DPtTrackGenvsEtaGen_ZMuMuTagged->Fill(etaGen, (ptTracker2 - ptGen) / ptGen); - } // end if MC Match - - if (chargeSta1 == chargeTracker1) { // StandAlone1 has correct charge - n_correctStaCharge_ZMuMutagged++; - h_zMuStaMass_correctStaCharge_ZMuMuTagged->Fill( - massStaGlobal); // inv mass of Sta-global part for correct charge muons - h_ptStaMinusptTrack_correctStaCharge_ZMuMuTagged->Fill((ptSta1 - ptTracker1) / ptTracker1); - h_ptStaMinusptTrack_vsEtaTracker_correctStaCharge_ZMuMuTagged->Fill(etaTracker1, - (ptSta1 - ptTracker1) / ptTracker1); - h_ptStaMinusptTrack_vsPtTracker_correctStaCharge_ZMuMuTagged->Fill(ptTracker1, - (ptSta1 - ptTracker1) / ptTracker1); - } - if (chargeSta1 != chargeTracker1) { // StandAlone2 has wrong charge - n_wrongStaCharge_ZMuMutagged++; - h_zMuTrackMass_wrongStaCharge_ZMuMuTagged->Fill( - massTrackerGlobal); // inv mass global+tracker part (wrong Sta charge) - h_etaTrack_wrongStaCharge_ZMuMuTagged->Fill(etaTracker1); // eta of tagged track (wrong Sta charge) - h_phiTrack_wrongStaCharge_ZMuMuTagged->Fill(phiTracker1); // phi of tagged track (wrong Sta charge) - h_ptTrack_wrongStaCharge_ZMuMuTagged->Fill(ptTracker1); // pt of tagged track (wrong Sta charge) - h_DRTrack_wrongStaCharge_ZMuMuTagged->Fill( - DR1); // DR between sta1 and tracker1 for tagged track (wrong Sta charge) - } - } // end if check charge global1-tracker2 - } // end if cuts - - // ****************************************************************************************************************************** - // Start study for tracker charge mis-id: select global-global events according to global1+staComponent2 (or global2+staComponent1) - // ******************************************************************************************************************************* - - etaCut = false; - ptCut = false; - //isoCut = false; - massCut = false; - - // cynematical cuts for Zglobal1Sta2 - if (abs(etaGlobal1) < etamax_ && abs(etaSta2) < etamax_) - etaCut = true; - if (ptGlobal1 > ptmin_ && ptSta2 > ptmin_) - ptCut = true; - if (massGlobalSta > massMin_ && massGlobalSta < massMax_) - massCut = true; - - if (noCut_) { - etaCut = true; - ptCut = true; - massCut = true; - } - - if (etaCut && ptCut && massCut) { - // check first global1-sta2 if they have opposite charge and if global1 has consistent charge between sta and track - if (chargeSta1 == chargeTracker1 && chargeTracker1 != chargeSta2) { // event tagged to study track2 charge - n_goodSta_ZMuMutagged++; - h_zMuStaMass_ZMuMuTagged->Fill(massGlobalSta); // inv mass global+sta part - h_etaSta_ZMuMuTagged->Fill(etaSta2); // eta of tagged sta - h_phiSta_ZMuMuTagged->Fill(phiSta2); // phi of tagged sta - h_ptSta_ZMuMuTagged->Fill(ptSta2); // pt of tagged sta - h_DRSta_ZMuMuTagged->Fill(DR2); // DR between sta2 and tracker2 for tagged sta - - if (chargeSta2 == chargeTracker2) { // track2 has correct charge - n_correctTrkCharge_ZMuMutagged++; - // qui posso aggiungere plot col MC match - } - if (chargeSta2 != chargeTracker2) { // track2 has wrong charge - n_wrongTrkCharge_ZMuMutagged++; - h_zMuStaMass_wrongTrkCharge_ZMuMuTagged->Fill( - massGlobalSta); // inv mass global+sta part (wrong Trk charge) - h_etaSta_wrongTrkCharge_ZMuMuTagged->Fill(etaSta2); // eta of tagged sta (wrong trk charge) - h_phiSta_wrongTrkCharge_ZMuMuTagged->Fill(phiSta2); // phi of tagged sta (wrong Trk charge) - h_ptSta_wrongTrkCharge_ZMuMuTagged->Fill(ptSta2); // pt of tagged sta (wrong Trk charge) - h_DRSta_wrongTrkCharge_ZMuMuTagged->Fill( - DR2); // DR between sta2 and tracker2 for tagged sta (wrong trk charge) - } - } // end if check chrge global1-sta2 - } // end if cut selection - - etaCut = false; - ptCut = false; - //isoCut = false; - massCut = false; - - // cynematical cuts for Zglobal2Sta1 - if (abs(etaGlobal2) < etamax_ && abs(etaSta1) < etamax_) - etaCut = true; - if (ptGlobal2 > ptmin_ && ptSta1 > ptmin_) - ptCut = true; - if (massStaGlobal > massMin_ && massStaGlobal < massMax_) - massCut = true; - - if (noCut_) { - etaCut = true; - ptCut = true; - massCut = true; - } - - if (etaCut && ptCut && massCut) { - // check first global2-sta1 if they have opposite charge and if global2 has consistent charge between sta and track - if (chargeSta2 == chargeTracker2 && chargeTracker2 != chargeSta1) { // event tagged to study track1 charge - n_goodSta_ZMuMutagged++; - h_zMuStaMass_ZMuMuTagged->Fill(massStaGlobal); // inv mass global+sta part - h_etaSta_ZMuMuTagged->Fill(etaSta1); // eta of tagged sta - h_phiSta_ZMuMuTagged->Fill(phiSta1); // phi of tagged sta - h_ptSta_ZMuMuTagged->Fill(ptSta1); // pt of tagged sta - h_DRSta_ZMuMuTagged->Fill(DR1); // DR between sta1 and tracker1 for tagged sta - - if (chargeSta1 == chargeTracker1) { // track1 has correct charge - n_correctTrkCharge_ZMuMutagged++; - // qui posso aggiungere plot col MC match - } - if (chargeSta1 != chargeTracker1) { // track1 has wrong charge - n_wrongTrkCharge_ZMuMutagged++; - h_zMuStaMass_wrongTrkCharge_ZMuMuTagged->Fill( - massStaGlobal); // inv mass global+sta part (wrong Trk charge) - h_etaSta_wrongTrkCharge_ZMuMuTagged->Fill(etaSta1); // eta of tagged sta (wrong trk charge) - h_phiSta_wrongTrkCharge_ZMuMuTagged->Fill(phiSta1); // phi of tagged sta (wrong Trk charge) - h_ptSta_wrongTrkCharge_ZMuMuTagged->Fill(ptSta1); // pt of tagged sta (wrong Trk charge) - h_DRSta_wrongTrkCharge_ZMuMuTagged->Fill( - DR1); // DR between sta2 and tracker2 for tagged sta (wrong trk charge) - } - } // end if check chrge global2-sta1 - } // end if cut selection - - } // end loop on ZMuMu cand - } // end if ZMuMu size > 0 - - // loop on ZMuTrack in order to recover some unMatched StandAlone - - //double LargerDRCut=2.; // larger DR cut to recover unMatched Sta - int taggedZ_index = -1; // index of Z with minimum DR respect to unMatched Sta - int taggedMuon_index = -1; // index of Sta muon with minimum DR respect to unMatched track - int n_ZMuTrackTagged_inEvent = 0; // number of tagged Z in the event - if (!zMuTrack->empty() && zMuMu->empty()) { // check ZMuTrack just if no ZMuMu has been found in the event - event.getByToken(zMuTrackMatchMapToken_, zMuTrackMatchMap); - for (unsigned int i = 0; i < zMuTrack->size(); ++i) { //loop on candidates - const Candidate &zMuTrackCand = (*zMuTrack)[i]; //the candidate - CandidateBaseRef zMuTrackCandRef = zMuTrack->refAt(i); - GenParticleRef zMuTrackMatch = (*zMuTrackMatchMap)[zMuTrackCandRef]; - //bool isMCMatched = false; - //if(zMuTrackMatch.isNonnull()) isMCMatched = true; // ZMuTrack matched - // forzo isMCMatched - // isMCMatched = true; - - double m = zMuTrackCand.mass(); - CandidateBaseRef zglobalDaughter = zMuTrackCand.daughter(0)->masterClone(); - CandidateBaseRef ztrackerDaughter = zMuTrackCand.daughter(1)->masterClone(); - TrackRef zglobalDaughter_StaComponentRef = zMuTrackCand.daughter(0)->get(); - // standalone part of global component of ZMuMu - TrackRef zglobalDaughter_TrackComponentRef = zMuTrackCand.daughter(0)->get(); - // track part Of the global component of ZMuMu - double ZtrackerDaughterCharge = ztrackerDaughter->charge(); - double ZtrackerDaughterPt = ztrackerDaughter->pt(); - double ZtrackerDaughterEta = ztrackerDaughter->eta(); - double ZtrackerDaughterPhi = ztrackerDaughter->phi(); - double ZglobalDaughterPt = zglobalDaughter->pt(); - double ZglobalDaughterEta = zglobalDaughter->eta(); - double ZglobalDaughter_StaComponentCharge = zglobalDaughter_StaComponentRef->charge(); - double ZglobalDaughter_TrackComponentCharge = zglobalDaughter_TrackComponentRef->charge(); - - //********************************************************************************************************************* - // study of standAlone charge mis-id and efficiency selecting ZMuTrack events (tag the index of Z and of muon) - // for Sta charge mis-id just use unMatched standAlone muons trackerMuons that are standAlone Muons but no globalMuons - // ******************************************************************************************************************** - // cynematical cuts for ZMuTrack - bool etaCut = false; - bool ptCut = false; - // bool isoCut = false; - bool massCut = false; - if (abs(ZglobalDaughterEta) < etamax_ && abs(ZtrackerDaughterEta) < etamax_) - etaCut = true; - if (ZglobalDaughterPt > ptmin_ && ZtrackerDaughterPt > ptmin_) - ptCut = true; - if (m > massMin_ && m < massMax_) - massCut = true; - - if (noCut_) { - etaCut = true; - ptCut = true; - massCut = true; - } - if (etaCut && ptCut && massCut && ZglobalDaughter_StaComponentCharge == ZglobalDaughter_TrackComponentCharge && - ZglobalDaughter_TrackComponentCharge != - ZtrackerDaughterCharge) { // cynematic cuts and global charge consistent and opposite tracker charge - n_ZMuTrackTagged_inEvent++; - - // posso inserire istogrammi eta e pt track per studio Sta efficiency - // ... - - for (unsigned int j = 0; j < muons->size(); ++j) { - CandidateBaseRef muCandRef = muons->refAt(j); - const Candidate &muCand = (*muons)[j]; //the candidate - TrackRef muStaComponentRef = muCand.get(); // standalone part of muon - TrackRef muTrkComponentRef = muCand.get(); // track part of muon - - if (muCandRef->isStandAloneMuon() == 1 && muCandRef->isGlobalMuon() == 0 && muCandRef->isTrackerMuon() == 1) { - double muEta = muCandRef->eta(); - double muPhi = muCandRef->phi(); - // check DeltaR between Sta muon and tracks of ZMuTrack - double DRmuSta_trackOfZ = deltaR(muEta, muPhi, ZtrackerDaughterEta, ZtrackerDaughterPhi); - if (DRmuSta_trackOfZ == 0) { // match track track ... standalone-muTracker - taggedZ_index = i; - taggedMuon_index = j; - } // end check minimum DR - } // end if isStandAlone - } // end loop on muon candidates - } // end cynematic cuts - - } // end loop on zMuTrack size - } // end if zMuTrack size > 0 - - // analyze the tagged ZMuTRack and the Sta muons with minimal DR - if (n_ZMuTrackTagged_inEvent > 0) { // at Least one ZMuTRack tagged - - if (taggedZ_index == -1) { // StandAlone inefficient - n_StaNotFound_ZMuTracktagged++; - // h_etaTrack_StaNotFound_ZMuTrackTagged->Fill(ztrackerDaughter->eta()); - } else { - const Candidate &zMuTrackCand = (*zMuTrack)[taggedZ_index]; //the candidate tagged - CandidateBaseRef zMuTrackCandRef = zMuTrack->refAt(taggedZ_index); - double m = zMuTrackCand.mass(); - CandidateBaseRef zglobalDaughter = zMuTrackCand.daughter(0)->masterClone(); - CandidateBaseRef ztrackerDaughter = zMuTrackCand.daughter(1)->masterClone(); - TrackRef zglobalDaughter_StaComponentRef = zMuTrackCand.daughter(0)->get(); - // standalone part of global component of ZMuMu - TrackRef zglobalDaughter_TrackComponentRef = zMuTrackCand.daughter(0)->get(); - // track part Of the global component of ZMuMu - double ZtrackerDaughterCharge = ztrackerDaughter->charge(); - double ZtrackerDaughterPt = ztrackerDaughter->pt(); - double ZtrackerDaughterEta = ztrackerDaughter->eta(); - double ZtrackerDaughterPhi = ztrackerDaughter->phi(); - - CandidateBaseRef muCandRef = muons->refAt(taggedMuon_index); // the tagged muon - const Candidate &muCand = (*muons)[taggedMuon_index]; //the candidate - TrackRef muStaComponentRef = muCand.get(); // standalone part of muon - TrackRef muTrkComponentRef = muCand.get(); // track part of muon - - double muEta = muStaComponentRef->eta(); - double muPhi = muStaComponentRef->phi(); - double muCharge = muStaComponentRef->charge(); - // check DeltaR between Sta muon and tracks of ZMuTrack - double DRmuSta_trackOfZ = deltaR(muEta, muPhi, ZtrackerDaughterEta, ZtrackerDaughterPhi); - - n_goodTrack_ZMuTracktagged++; - h_zMuTrackMass_ZMuTrackTagged->Fill(m); // inv mass ZMuTrack for tagged events - h_etaTrack_ZMuTrackTagged->Fill(ZtrackerDaughterEta); // eta of tagged track - h_phiTrack_ZMuTrackTagged->Fill(ZtrackerDaughterPhi); // phi of tagged track - h_ptTrack_ZMuTrackTagged->Fill(ZtrackerDaughterPt); // pt of tagged track - h_DRTrack_ZMuTrackTagged->Fill(DRmuSta_trackOfZ); // DR between sta1 and tracker1 for tagged track - - // check StandAlone charge - if (muCharge != ZtrackerDaughterCharge) { // wrong Sta charge - n_wrongStaCharge_ZMuTracktagged++; // number of events wrong charge for unMatched Sta - h_zMuTrackMass_wrongStaCharge_ZMuTrackTagged->Fill( - m); // inv mass ZMuTrack for tagged events wrong unMatched Sta charge - h_etaTrack_wrongStaCharge_ZMuTrackTagged->Fill( - ZtrackerDaughterEta); // eta of tagged track wrong unMatched Sta charge - h_phiTrack_wrongStaCharge_ZMuTrackTagged->Fill( - ZtrackerDaughterPhi); // phi of tagged track wrong unMatched Sta charge - h_ptTrack_wrongStaCharge_ZMuTrackTagged->Fill( - ZtrackerDaughterPt); // pt of tagged track wrong unMatched Sta charge - h_DRTrack_wrongStaCharge_ZMuTrackTagged->Fill( - DRmuSta_trackOfZ); // DR between unMatched Sta and tracker for wrong sta charge - } else { // correct Sta charge - n_correctStaCharge_ZMuTracktagged++; // number of events correct charge for unMatched Sta - } // end if Sta charge check - } // end if StandAlone is present - } // end if zMuTrack tagged - - //********************************************************************************************************************* - // study of track charge mis-id and efficiency selecting ZMuSta events - // for Track charge mis-id just use unMatched standAlone muons trackerMuons that are standAlone Muons but no globalMuons - // ******************************************************************************************************************** - - // loop on ZMuSta in order to recover some unMatched StandAlone - bool isZMuStaMatched = false; - //LargerDRCut=2.; // larger DR cut to recover unMatched Sta - taggedZ_index = -1; // index of Z with minimum DR respect to unMatched Sta - taggedMuon_index = -1; // index of Sta muon with minimum DR respect to unMatched track - int n_ZMuStaTagged_inEvent = 0; // number of tagged Z in the event - if (!zMuStandAlone->empty()) { // check ZMuSta just if no ZMuMu has been found in the event - event.getByToken(zMuStandAloneMatchMapToken_, zMuStandAloneMatchMap); - for (unsigned int i = 0; i < zMuStandAlone->size(); ++i) { //loop on candidates - const Candidate &zMuStaCand = (*zMuStandAlone)[i]; //the candidate - CandidateBaseRef zMuStaCandRef = zMuStandAlone->refAt(i); - - GenParticleRef zMuStaMatch = (*zMuStandAloneMatchMap)[zMuStaCandRef]; - if (zMuStaMatch.isNonnull()) { // ZMuSta Macthed - numberOfMatchedZMuSta_++; - isZMuStaMatched = true; - } - - double m = zMuStaCand.mass(); - CandidateBaseRef zglobalDaughter = zMuStaCand.daughter(0)->masterClone(); - CandidateBaseRef zstandaloneDaughter = zMuStaCand.daughter(1)->masterClone(); - int iglb = 0; - int ista = 1; - if (zglobalDaughter->isGlobalMuon() == 0 && zstandaloneDaughter->isGlobalMuon() == 1) { // invert definition - CandidateBaseRef buffer = zglobalDaughter; - zglobalDaughter = zstandaloneDaughter; - zstandaloneDaughter = buffer; - iglb = 1; - ista = 0; - } - TrackRef zglobalDaughter_StaComponentRef = zMuStaCand.daughter(iglb)->get(); - // standalone part of global component of ZMuMu - TrackRef zglobalDaughter_TrackComponentRef = zMuStaCand.daughter(iglb)->get(); - // track part Of the global component of ZMuMu - TrackRef zstaDaughter_StaComponentRef = zMuStaCand.daughter(ista)->get(); - // standalone part of global component of ZMuMu - TrackRef zstaDaughter_TrackComponentRef = zMuStaCand.daughter(ista)->get(); - // track part Of the global component of ZMuMu - double ZglobalDaughterPt = zglobalDaughter->pt(); - double ZglobalDaughterEta = zglobalDaughter->eta(); - - double ZstaDaughter_StaComponentCharge = zstaDaughter_StaComponentRef->charge(); - double ZstaDaughter_StaComponentPt = zstaDaughter_StaComponentRef->pt(); - double ZstaDaughter_StaComponentEta = zstaDaughter_StaComponentRef->eta(); - double ZstaDaughter_StaComponentPhi = zstaDaughter_StaComponentRef->phi(); - double ZstaDaughter_TrackComponentCharge = zstaDaughter_TrackComponentRef->charge(); - - double ZglobalDaughter_StaComponentCharge = zglobalDaughter_StaComponentRef->charge(); - double ZglobalDaughter_TrackComponentCharge = zglobalDaughter_TrackComponentRef->charge(); - - // cynematical cuts for ZMuSta - bool etaCut = false; - bool ptCut = false; - // bool isoCut = false; - bool massCut = false; - if (abs(ZglobalDaughterEta) < etamax_ && abs(ZstaDaughter_StaComponentEta) < etamax_) - etaCut = true; - if (ZglobalDaughterPt > ptmin_ && ZstaDaughter_StaComponentPt > ptmin_) - ptCut = true; - if (m > massMin_ && m < massMax_) - massCut = true; // dovrei usare la massa fatta con la sola parte sta - // (Se è anche trackerMu non è cosi') - if (noCut_) { - etaCut = true; - ptCut = true; - massCut = true; - } - if (etaCut && ptCut && massCut && ZglobalDaughter_StaComponentCharge == ZglobalDaughter_TrackComponentCharge && - ZglobalDaughter_StaComponentCharge != - ZstaDaughter_StaComponentCharge) { // cynematic cuts and global charge consistent and opposite sta charge - n_ZMuStaTagged_inEvent++; - if (isZMuStaMatched) - n_ZMuStaTaggedMatched++; - // posso inserire istogrammi eta e pt track per studio Sta efficiency - // ... - if (zstandaloneDaughter->isStandAloneMuon() == 1 && - zstandaloneDaughter->isTrackerMuon() == 1) { // track matched - n_goodSta_ZMuStatagged++; - h_zMuStaMass_ZMuStaTagged->Fill(m); // inv mass ZMuSta for tagged events - h_etaSta_ZMuStaTagged->Fill(ZstaDaughter_StaComponentEta); // eta of tagged sta - h_phiSta_ZMuStaTagged->Fill(ZstaDaughter_StaComponentPhi); // phi of tagged sta - h_ptSta_ZMuStaTagged->Fill(ZstaDaughter_StaComponentPt); // pt of tagged sta - - // check Track charge - if (ZstaDaughter_StaComponentCharge != ZstaDaughter_TrackComponentCharge) { // wrong Trk charge - n_wrongTrkCharge_ZMuStatagged++; // number of events wrong track charge for unMatched track - h_zMuStaMass_wrongTrkCharge_ZMuStaTagged->Fill( - m); // inv mass ZMuSta for tagged evts wrong unMatched track charge - h_etaSta_wrongTrkCharge_ZMuStaTagged->Fill( - ZstaDaughter_StaComponentEta); // eta of tagged sta wrong unMatched track charge - h_phiSta_wrongTrkCharge_ZMuStaTagged->Fill( - ZstaDaughter_StaComponentPhi); // phi of tagged sta wrong unMatched track charge - h_ptSta_wrongTrkCharge_ZMuStaTagged->Fill( - ZstaDaughter_StaComponentPt); // pt of tagged sta wrong unMatched track charge - } else { // correct Sta charge - n_correctTrkCharge_ZMuStatagged++; // number of events correct charge for unMatched Sta - } // end if Sta charge check - - } else { // tracker inefficient - n_TrkNotFound_ZMuStatagged++; - } - } // end cynematic cuts - if (n_ZMuStaTagged_inEvent == 0) { - } - - } // end loop on zMuSta candidates - } // end check ZMuSta size - -} // end analyze - -bool ZMuMuPerformances::check_ifZmumu(const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - bool muplusFound = false; - bool muminusFound = false; - bool ZFound = false; - if (partId0 == 13 || partId1 == 13 || partId2 == 13) - muminusFound = true; - if (partId0 == -13 || partId1 == -13 || partId2 == -13) - muplusFound = true; - if (partId0 == 23 || partId1 == 23 || partId2 == 23) - ZFound = true; - return (muplusFound && muminusFound && ZFound); -} - -float ZMuMuPerformances::getParticlePt(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - float ptpart = 0.; - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - ptpart = dauMuGen->pt(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - ptpart = dauMuGen->pt(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - ptpart = dauMuGen->pt(); - } - } - } - return ptpart; -} - -float ZMuMuPerformances::getParticleEta(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - float etapart = 0.; - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - etapart = dauMuGen->eta(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - etapart = dauMuGen->eta(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - etapart = dauMuGen->eta(); - } - } - } - return etapart; -} - -float ZMuMuPerformances::getParticlePhi(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - float phipart = 0.; - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - phipart = dauMuGen->phi(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - phipart = dauMuGen->phi(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - phipart = dauMuGen->phi(); - } - } - } - return phipart; -} - -Particle::LorentzVector ZMuMuPerformances::getParticleP4(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - Particle::LorentzVector p4part(0., 0., 0., 0.); - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - p4part = dauMuGen->p4(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - p4part = dauMuGen->p4(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - p4part = dauMuGen->p4(); - } - } - } - return p4part; -} - -void ZMuMuPerformances::endJob() { - cout << "------------------------------------ Counters --------------------------------" << endl; - cout << "totalNumberOfZfound = " << totalNumberOfZfound << endl; - cout << "totalNumberOfZpassed = " << totalNumberOfZpassed << endl; - cout << "Number Of ZMuMu Same Sign (no cuts) " << nZMuMuSameSign << endl; - cout << "Number Of ZMuMu Same Sign (no cuts) MC matched " << nZMuMuSameSign_mcMatched << endl; - - cout << "------------------------------------ Counters for standAlone charge mis-id studies " - "--------------------------------" - << endl; - cout << " number of goodTracks tagged for ZMuMu collection = " << n_goodTrack_ZMuMutagged << endl; - cout << " number of goodTracks tagged for ZMuMu collection (correct Sta charge) = " << n_correctStaCharge_ZMuMutagged - << endl; - cout << " number of goodTracks tagged for ZMuMu collection (wrong Sta charge) = " << n_wrongStaCharge_ZMuMutagged - << endl - << endl; - cout << " number of goodTracks tagged for ZMuTrack collection unMatchedSTA = " << n_goodTrack_ZMuTracktagged << endl; - cout << " number of goodTracks tagged for ZMuTrack collection unMatchedSTA (correct Sta charge) = " - << n_correctStaCharge_ZMuTracktagged << endl; - cout << " number of goodTracks tagged for ZMuTrack collection unMatchedSTA (wrong Sta charge) = " - << n_wrongStaCharge_ZMuTracktagged << endl - << endl; - cout << " number of goodTracks tagged for ZMuTrack collection (No STA found) = " << n_StaNotFound_ZMuTracktagged - << endl; - - cout << "------------------------------------ Counters for Track charge mis-id studies " - "--------------------------------" - << endl; - cout << " number of goodStandAlone tagged for ZMuMu collection = " << n_goodSta_ZMuMutagged << endl; - cout << " number of goodStandAlone tagged for ZMuMu collection (correct Trk charge) = " - << n_correctTrkCharge_ZMuMutagged << endl; - cout << " number of goodStandAlone tagged for ZMuMu collection (wrong Trk charge) = " << n_wrongTrkCharge_ZMuMutagged - << endl - << endl; - cout << " number of goodSta tagged for ZMuSta collection unMatchedTrk = " << n_goodSta_ZMuStatagged << endl; - cout << " number of goodSta tagged for ZMuSta collection unMatchedTrk (correct Trk charge) = " - << n_correctTrkCharge_ZMuStatagged << endl; - cout << " number of goodSta tagged for ZMuSta collection unMatchedTrk (wrong Trk charge) = " - << n_wrongTrkCharge_ZMuStatagged << endl - << endl; - cout << " number of goodSta tagged for ZMuSta collection (No Trk found) = " << n_TrkNotFound_ZMuStatagged << endl; - cout << " number of ZMuSta mactched = " << numberOfMatchedZMuSta_ << endl; - cout << " number of ZMuSta Tagged matched = " << n_ZMuStaTaggedMatched << endl; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuMuPerformances); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuSaMassHistogram.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuSaMassHistogram.cc deleted file mode 100644 index d29cab17d1d7a..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMuSaMassHistogram.cc +++ /dev/null @@ -1,104 +0,0 @@ -#include "DataFormats/Common/interface/AssociationVector.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "DataFormats/Math/interface/deltaR.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" -#include "DataFormats/PatCandidates/interface/Isolation.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositVetos.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositDirection.h" -#include "TH1.h" -#include "TH2.h" -#include -#include -#include -#include - -using namespace edm; -using namespace std; -using namespace reco; -using namespace isodeposit; - -class ZMuMuSaMassHistogram : public edm::EDAnalyzer { -public: - typedef math::XYZVector Vector; - ZMuMuSaMassHistogram(const edm::ParameterSet& pset); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - void endJob() override; - EDGetTokenT srcToken_; - int counter; - double min, max; - int Nbin; - TH1F* ZMassSa; - void histo(TH1F* hist, char* cx, char* cy) const; -}; - -void ZMuMuSaMassHistogram::histo(TH1F* hist, char* cx, char* cy) const { - hist->GetXaxis()->SetTitle(cx); - hist->GetYaxis()->SetTitle(cy); - hist->GetXaxis()->SetTitleOffset(1); - hist->GetYaxis()->SetTitleOffset(1.2); - hist->GetXaxis()->SetTitleSize(0.04); - hist->GetYaxis()->SetTitleSize(0.04); - hist->GetXaxis()->SetLabelSize(0.03); - hist->GetYaxis()->SetLabelSize(0.03); -} - -ZMuMuSaMassHistogram::ZMuMuSaMassHistogram(const ParameterSet& pset) - : srcToken_(consumes(pset.getParameter("src_m"))), - counter(0), - min(pset.getUntrackedParameter("min")), - max(pset.getUntrackedParameter("max")), - Nbin(pset.getUntrackedParameter("nbin")) { - edm::Service fs; - ZMassSa = fs->make("zMass", "ZMass OneStandAlone (GeV/c^{2})", Nbin, min, max); -} - -void ZMuMuSaMassHistogram::analyze(const edm::Event& event, const edm::EventSetup& setup) { - Handle dimuons; - event.getByToken(srcToken_, dimuons); - for (unsigned int i = 0; i < dimuons->size(); ++i) { - const Candidate& zmm = (*dimuons)[i]; - const Candidate* dau0 = zmm.daughter(0); - const Candidate* dau1 = zmm.daughter(1); - TrackRef stAloneTrack; - Candidate::PolarLorentzVector p4_0; - double mu_mass; - if (counter % 2 == 0) { - stAloneTrack = dau0->get(); - p4_0 = dau1->polarP4(); - mu_mass = dau0->mass(); - } else { - stAloneTrack = dau1->get(); - p4_0 = dau0->polarP4(); - mu_mass = dau1->mass(); - } - - Vector momentum = stAloneTrack->momentum(); - Candidate::PolarLorentzVector p4_1(momentum.rho(), momentum.eta(), momentum.phi(), mu_mass); - double mass = (p4_0 + p4_1).mass(); - ZMassSa->Fill(mass); - ++counter; - } -} - -void ZMuMuSaMassHistogram::endJob() {} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuMuSaMassHistogram); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMu_MCanalyzer.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMu_MCanalyzer.cc deleted file mode 100644 index f6af5da541360..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMu_MCanalyzer.cc +++ /dev/null @@ -1,725 +0,0 @@ -/* \class ZMuMu_MCanalyzer - * - * author: Davide Piccolo - * - * ZMuMu MC analyzer: - * check muon reco efficiencies from MC truth, - * - */ - -#include "DataFormats/Common/interface/AssociationVector.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Candidate/interface/OverlapChecker.h" -#include "DataFormats/Math/interface/deltaR.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -#include "DataFormats/PatCandidates/interface/TriggerObjectStandAlone.h" -#include "DataFormats/Common/interface/AssociationVector.h" -#include "DataFormats/PatCandidates/interface/PATObject.h" -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" -#include "DataFormats/PatCandidates/interface/Isolation.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositVetos.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositDirection.h" -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include - -using namespace edm; -using namespace std; -using namespace reco; -using namespace reco; -using namespace isodeposit; - -typedef ValueMap IsolationCollection; - -class ZMuMu_MCanalyzer : public edm::EDAnalyzer { -public: - ZMuMu_MCanalyzer(const edm::ParameterSet& pset); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - bool check_ifZmumu(const Candidate* dauGen0, const Candidate* dauGen1, const Candidate* dauGen2); - float getParticlePt(const int ipart, const Candidate* dauGen0, const Candidate* dauGen1, const Candidate* dauGen2); - float getParticleEta(const int ipart, const Candidate* dauGen0, const Candidate* dauGen1, const Candidate* dauGen2); - float getParticlePhi(const int ipart, const Candidate* dauGen0, const Candidate* dauGen1, const Candidate* dauGen2); - Particle::LorentzVector getParticleP4(const int ipart, - const Candidate* dauGen0, - const Candidate* dauGen1, - const Candidate* dauGen2); - void endJob() override; - - EDGetTokenT zMuMuToken_; - EDGetTokenT zMuMuMatchMapToken_; - EDGetTokenT zMuStandAloneToken_; - EDGetTokenT zMuStandAloneMatchMapToken_; - EDGetTokenT zMuTrackToken_; - EDGetTokenT zMuTrackMatchMapToken_; - EDGetTokenT muonsToken_; - EDGetTokenT tracksToken_; - EDGetTokenT genParticlesToken_; - - bool bothMuons_; - - double etamin_, etamax_, ptmin_, massMin_, massMax_, isoMax_; - - double ptThreshold_, etEcalThreshold_, etHcalThreshold_, dRVetoTrk_, dRTrk_, dREcal_, dRHcal_, alpha_, beta_; - - bool relativeIsolation_; - string hltPath_; - reco::CandidateBaseRef globalMuonCandRef_, trackMuonCandRef_, standAloneMuonCandRef_; - OverlapChecker overlap_; - - // general histograms - TH1D *h_trackProbe_eta, *h_trackProbe_pt, *h_staProbe_eta, *h_staProbe_pt, *h_ProbeOk_eta, *h_ProbeOk_pt; - - // global counters - int nGlobalMuonsMatched_passed; // total number of global muons MC matched and passing cuts (and triggered) - int nGlobalMuonsMatched_passedIso; // total number of global muons MC matched and passing cuts including Iso - int n2GlobalMuonsMatched_passedIso; // total number of Z->2 global muons MC matched and passing cuts including Iso - int nStaMuonsMatched_passedIso; // total number of sta only muons MC matched and passing cuts including Iso - int nTracksMuonsMatched_passedIso; // total number of tracks only muons MC matched and passing cuts including Iso - int n2GlobalMuonsMatched_passedIso2Trg; // total number of Z->2 global muons MC matched and passing cuts including Iso and both triggered - int nMu0onlyTriggered; // n. of events zMuMu with mu0 only triggered - int nMu1onlyTriggered; // n. of events zMuMu with mu1 only triggered - - int nZMuMu_matched; // n. of events zMuMu macthed - int nZMuSta_matched; // n of events zMuSta macthed - int nZMuTrk_matched; // n. of events zMuTrk mathced -}; - -template -double isolation(const T* t, - double ptThreshold, - double etEcalThreshold, - double etHcalThreshold, - double dRVetoTrk, - double dRTrk, - double dREcal, - double dRHcal, - double alpha, - double beta, - bool relativeIsolation) { - // on 34X: - const pat::IsoDeposit* trkIso = t->isoDeposit(pat::TrackIso); - // const pat::IsoDeposit * trkIso = t->trackerIsoDeposit(); - // on 34X - const pat::IsoDeposit* ecalIso = t->isoDeposit(pat::EcalIso); - // const pat::IsoDeposit * ecalIso = t->ecalIsoDeposit(); - // on 34X - const pat::IsoDeposit* hcalIso = t->isoDeposit(pat::HcalIso); - // const pat::IsoDeposit * hcalIso = t->hcalIsoDeposit(); - - Direction dir = Direction(t->eta(), t->phi()); - - pat::IsoDeposit::AbsVetos vetosTrk; - vetosTrk.push_back(new ConeVeto(dir, dRVetoTrk)); - vetosTrk.push_back(new ThresholdVeto(ptThreshold)); - - pat::IsoDeposit::AbsVetos vetosEcal; - vetosEcal.push_back(new ConeVeto(dir, 0.)); - vetosEcal.push_back(new ThresholdVeto(etEcalThreshold)); - - pat::IsoDeposit::AbsVetos vetosHcal; - vetosHcal.push_back(new ConeVeto(dir, 0.)); - vetosHcal.push_back(new ThresholdVeto(etHcalThreshold)); - - double isovalueTrk = (trkIso->sumWithin(dRTrk, vetosTrk)); - double isovalueEcal = (ecalIso->sumWithin(dREcal, vetosEcal)); - double isovalueHcal = (hcalIso->sumWithin(dRHcal, vetosHcal)); - - double iso = - alpha * (((1 + beta) / 2 * isovalueEcal) + ((1 - beta) / 2 * isovalueHcal)) + ((1 - alpha) * isovalueTrk); - if (relativeIsolation) - iso /= t->pt(); - return iso; -} - -double candidateIsolation(const reco::Candidate* c, - double ptThreshold, - double etEcalThreshold, - double etHcalThreshold, - double dRVetoTrk, - double dRTrk, - double dREcal, - double dRHcal, - double alpha, - double beta, - bool relativeIsolation) { - const pat::Muon* mu = dynamic_cast(&*c->masterClone()); - if (mu != nullptr) - return isolation(mu, - ptThreshold, - etEcalThreshold, - etHcalThreshold, - dRVetoTrk, - dRTrk, - dREcal, - dRHcal, - alpha, - beta, - relativeIsolation); - const pat::GenericParticle* trk = dynamic_cast(&*c->masterClone()); - if (trk != nullptr) - return isolation(trk, - ptThreshold, - etEcalThreshold, - etHcalThreshold, - dRVetoTrk, - dRTrk, - dREcal, - dRHcal, - alpha, - beta, - relativeIsolation); - throw edm::Exception(edm::errors::InvalidReference) - << "Candidate daughter #0 is neither pat::Muons nor pat::GenericParticle\n"; - return -1; -} - -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/Candidate/interface/CandAssociation.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/Math/interface/LorentzVector.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include -#include -#include - -ZMuMu_MCanalyzer::ZMuMu_MCanalyzer(const ParameterSet& pset) - : zMuMuToken_(consumes(pset.getParameter("zMuMu"))), - zMuMuMatchMapToken_(mayConsume(pset.getParameter("zMuMuMatchMap"))), - zMuStandAloneToken_(consumes(pset.getParameter("zMuStandAlone"))), - zMuStandAloneMatchMapToken_(mayConsume(pset.getParameter("zMuStandAloneMatchMap"))), - zMuTrackToken_(consumes(pset.getParameter("zMuTrack"))), - zMuTrackMatchMapToken_(mayConsume(pset.getParameter("zMuTrackMatchMap"))), - muonsToken_(consumes(pset.getParameter("muons"))), - tracksToken_(consumes(pset.getParameter("tracks"))), - genParticlesToken_(consumes(pset.getParameter("genParticles"))), - - bothMuons_(pset.getParameter("bothMuons")), - etamin_(pset.getUntrackedParameter("etamin")), - etamax_(pset.getUntrackedParameter("etamax")), - ptmin_(pset.getUntrackedParameter("ptmin")), - massMin_(pset.getUntrackedParameter("zMassMin")), - massMax_(pset.getUntrackedParameter("zMassMax")), - isoMax_(pset.getUntrackedParameter("isomax")), - ptThreshold_(pset.getUntrackedParameter("ptThreshold")), - etEcalThreshold_(pset.getUntrackedParameter("etEcalThreshold")), - etHcalThreshold_(pset.getUntrackedParameter("etHcalThreshold")), - dRVetoTrk_(pset.getUntrackedParameter("deltaRVetoTrk")), - dRTrk_(pset.getUntrackedParameter("deltaRTrk")), - dREcal_(pset.getUntrackedParameter("deltaREcal")), - dRHcal_(pset.getUntrackedParameter("deltaRHcal")), - alpha_(pset.getUntrackedParameter("alpha")), - beta_(pset.getUntrackedParameter("beta")), - relativeIsolation_(pset.getUntrackedParameter("relativeIsolation")), - hltPath_(pset.getUntrackedParameter("hltPath")) { - Service fs; - - // binning of entries array (at moment defined by hand and not in cfg file) - double etaRange[8] = {-2.5, -2., -1.2, -0.8, 0.8, 1.2, 2., 2.5}; - double ptRange[4] = {20., 40., 60., 100.}; - - // general histograms - h_trackProbe_eta = fs->make("trackProbeEta", "Eta of tracks", 7, etaRange); - h_trackProbe_pt = fs->make("trackProbePt", "Pt of tracks", 3, ptRange); - h_staProbe_eta = fs->make("standAloneProbeEta", "Eta of standAlone", 7, etaRange); - h_staProbe_pt = fs->make("standAloneProbePt", "Pt of standAlone", 3, ptRange); - h_ProbeOk_eta = fs->make("probeOkEta", "Eta of probe Ok", 7, etaRange); - h_ProbeOk_pt = fs->make("probeOkPt", "Pt of probe ok", 3, ptRange); - - // clear global counters - nGlobalMuonsMatched_passed = 0; - nGlobalMuonsMatched_passedIso = 0; - n2GlobalMuonsMatched_passedIso = 0; - nStaMuonsMatched_passedIso = 0; - nTracksMuonsMatched_passedIso = 0; - n2GlobalMuonsMatched_passedIso2Trg = 0; - nMu0onlyTriggered = 0; - nMu1onlyTriggered = 0; - nZMuMu_matched = 0; - nZMuSta_matched = 0; - nZMuTrk_matched = 0; -} - -void ZMuMu_MCanalyzer::analyze(const Event& event, const EventSetup& setup) { - Handle zMuMu; - Handle zMuMuMatchMap; //Map of Z made by Mu global + Mu global - Handle zMuStandAlone; - Handle zMuStandAloneMatchMap; //Map of Z made by Mu + StandAlone - Handle zMuTrack; - Handle zMuTrackMatchMap; //Map of Z made by Mu + Track - Handle muons; //Collection of Muons - Handle tracks; //Collection of Tracks - - Handle genParticles; // Collection of Generatd Particles - - event.getByToken(zMuMuToken_, zMuMu); - event.getByToken(zMuStandAloneToken_, zMuStandAlone); - event.getByToken(zMuTrackToken_, zMuTrack); - event.getByToken(genParticlesToken_, genParticles); - event.getByToken(muonsToken_, muons); - event.getByToken(tracksToken_, tracks); - - /* - cout << "********* zMuMu size : " << zMuMu->size() << endl; - cout << "********* zMuStandAlone size : " << zMuStandAlone->size() << endl; - cout << "********* zMuTrack size : " << zMuTrack->size() << endl; - cout << "********* muons size : " << muons->size() << endl; - cout << "********* tracks size : " << tracks->size() << endl; - */ - // std::cout<<"Run-> "< "<empty()) { - event.getByToken(zMuMuMatchMapToken_, zMuMuMatchMap); - for (unsigned int i = 0; i < zMuMu->size(); ++i) { //loop on candidates - const Candidate& zMuMuCand = (*zMuMu)[i]; //the candidate - CandidateBaseRef zMuMuCandRef = zMuMu->refAt(i); - - const Candidate* lep0 = zMuMuCand.daughter(0); - const Candidate* lep1 = zMuMuCand.daughter(1); - const pat::Muon& muonDau0 = dynamic_cast(*lep0->masterClone()); - // double trkiso0 = muonDau0.trackIso(); - const pat::Muon& muonDau1 = dynamic_cast(*lep1->masterClone()); - //double trkiso1 = muonDau1.trackIso(); - - double iso0 = candidateIsolation(lep0, - ptThreshold_, - etEcalThreshold_, - etHcalThreshold_, - dRVetoTrk_, - dRTrk_, - dREcal_, - dRHcal_, - alpha_, - beta_, - relativeIsolation_); - double iso1 = candidateIsolation(lep1, - ptThreshold_, - etEcalThreshold_, - etHcalThreshold_, - dRVetoTrk_, - dRTrk_, - dREcal_, - dRHcal_, - alpha_, - beta_, - relativeIsolation_); - - double pt0 = zMuMuCand.daughter(0)->pt(); - double pt1 = zMuMuCand.daughter(1)->pt(); - double eta0 = zMuMuCand.daughter(0)->eta(); - double eta1 = zMuMuCand.daughter(1)->eta(); - double mass = zMuMuCand.mass(); - - // HLT match - const pat::TriggerObjectStandAloneCollection mu0HLTMatches = muonDau0.triggerObjectMatchesByPath(hltPath_); - const pat::TriggerObjectStandAloneCollection mu1HLTMatches = muonDau1.triggerObjectMatchesByPath(hltPath_); - - bool trig0found = false; - bool trig1found = false; - if (!mu0HLTMatches.empty()) - trig0found = true; - if (!mu1HLTMatches.empty()) - trig1found = true; - - GenParticleRef zMuMuMatch = (*zMuMuMatchMap)[zMuMuCandRef]; - if (zMuMuMatch.isNonnull()) { // ZMuMu matched - zMuMu_found = true; - nZMuMu_matched++; - if (pt0 > ptmin_ && pt1 > ptmin_ && abs(eta0) > etamin_ && abs(eta1) > etamin_ && abs(eta0) < etamax_ && - abs(eta1) < etamax_ && mass > massMin_ && mass < massMax_ && - (trig0found || trig1found)) { // kinematic and trigger cuts passed - nGlobalMuonsMatched_passed++; // first global Muon passed kine cuts - nGlobalMuonsMatched_passed++; // second global muon passsed kine cuts - if (iso0 < isoMax_) - nGlobalMuonsMatched_passedIso++; // first global muon passed the iso cut - if (iso1 < isoMax_) - nGlobalMuonsMatched_passedIso++; // second global muon passed the iso cut - if (iso0 < isoMax_ && iso1 < isoMax_) { - n2GlobalMuonsMatched_passedIso++; // both muons passed iso cut - if (trig0found && trig1found) - n2GlobalMuonsMatched_passedIso2Trg++; // both muons have HLT - if (trig0found && !trig1found) - nMu0onlyTriggered++; - if (trig1found && !trig0found) - nMu1onlyTriggered++; - // histograms vs eta and pt - if (trig1found) { // check efficiency of muon0 not imposing the trigger on it - h_trackProbe_eta->Fill(eta0); - h_trackProbe_pt->Fill(pt0); - h_staProbe_eta->Fill(eta0); - h_staProbe_pt->Fill(pt0); - h_ProbeOk_eta->Fill(eta0); - h_ProbeOk_pt->Fill(pt0); - } - if (trig0found) { // check efficiency of muon1 not imposing the trigger on it - h_trackProbe_eta->Fill(eta1); - h_staProbe_eta->Fill(eta1); - h_trackProbe_pt->Fill(pt1); - h_staProbe_pt->Fill(pt1); - h_ProbeOk_eta->Fill(eta1); - h_ProbeOk_pt->Fill(pt1); - } - } - } - } // end MC match - - } // end loop on ZMuMu cand - } // end if ZMuMu size > 0 - - // loop on ZMuSta - bool zMuSta_found = false; - if (!zMuMu_found && !zMuStandAlone->empty()) { - event.getByToken(zMuStandAloneMatchMapToken_, zMuStandAloneMatchMap); - for (unsigned int i = 0; i < zMuStandAlone->size(); ++i) { //loop on candidates - const Candidate& zMuStandAloneCand = (*zMuStandAlone)[i]; //the candidate - CandidateBaseRef zMuStandAloneCandRef = zMuStandAlone->refAt(i); - GenParticleRef zMuStandAloneMatch = (*zMuStandAloneMatchMap)[zMuStandAloneCandRef]; - - const Candidate* lep0 = zMuStandAloneCand.daughter(0); - const Candidate* lep1 = zMuStandAloneCand.daughter(1); - const pat::Muon& muonDau0 = dynamic_cast(*lep0->masterClone()); - //double trkiso0 = muonDau0.trackIso(); - // const pat::Muon & muonDau1 = dynamic_cast(*lep1->masterClone()); - //double trkiso1 = muonDau1.trackIso(); - - double iso0 = candidateIsolation(lep0, - ptThreshold_, - etEcalThreshold_, - etHcalThreshold_, - dRVetoTrk_, - dRTrk_, - dREcal_, - dRHcal_, - alpha_, - beta_, - relativeIsolation_); - double iso1 = candidateIsolation(lep1, - ptThreshold_, - etEcalThreshold_, - etHcalThreshold_, - dRVetoTrk_, - dRTrk_, - dREcal_, - dRHcal_, - alpha_, - beta_, - relativeIsolation_); - - double pt0 = zMuStandAloneCand.daughter(0)->pt(); - double pt1 = zMuStandAloneCand.daughter(1)->pt(); - double eta0 = zMuStandAloneCand.daughter(0)->eta(); - double eta1 = zMuStandAloneCand.daughter(1)->eta(); - double mass = zMuStandAloneCand.mass(); - - // HLT match (check just dau0 the global) - const pat::TriggerObjectStandAloneCollection mu0HLTMatches = muonDau0.triggerObjectMatchesByPath(hltPath_); - - bool trig0found = false; - if (!mu0HLTMatches.empty()) - trig0found = true; - - if (zMuStandAloneMatch.isNonnull()) { // ZMuStandAlone matched - zMuSta_found = true; - nZMuSta_matched++; - if (pt0 > ptmin_ && pt1 > ptmin_ && abs(eta0) > etamin_ && abs(eta1) > etamin_ && abs(eta0) < etamax_ && - abs(eta1) < etamax_ && mass > massMin_ && mass < massMax_ && iso0 < isoMax_ && iso1 < isoMax_ && - trig0found) { // all cuts and trigger passed - nStaMuonsMatched_passedIso++; - // histograms vs eta and pt - h_staProbe_eta->Fill(eta1); - h_staProbe_pt->Fill(pt1); - } - } // end MC match - } // end loop on ZMuStandAlone cand - } // end if ZMuStandAlone size > 0 - - // loop on ZMuTrack - if (!zMuMu_found && !zMuSta_found && !zMuTrack->empty()) { - event.getByToken(zMuTrackMatchMapToken_, zMuTrackMatchMap); - for (unsigned int i = 0; i < zMuTrack->size(); ++i) { //loop on candidates - const Candidate& zMuTrackCand = (*zMuTrack)[i]; //the candidate - CandidateBaseRef zMuTrackCandRef = zMuTrack->refAt(i); - const Candidate* lep0 = zMuTrackCand.daughter(0); - const Candidate* lep1 = zMuTrackCand.daughter(1); - const pat::Muon& muonDau0 = dynamic_cast(*lep0->masterClone()); - //double trkiso0 = muonDau0.trackIso(); - //const pat::GenericParticle & trackDau1 = dynamic_cast(*lep1->masterClone()); - //double trkiso1 = trackDau1.trackIso(); - double iso0 = candidateIsolation(lep0, - ptThreshold_, - etEcalThreshold_, - etHcalThreshold_, - dRVetoTrk_, - dRTrk_, - dREcal_, - dRHcal_, - alpha_, - beta_, - relativeIsolation_); - double iso1 = candidateIsolation(lep1, - ptThreshold_, - etEcalThreshold_, - etHcalThreshold_, - dRVetoTrk_, - dRTrk_, - dREcal_, - dRHcal_, - alpha_, - beta_, - relativeIsolation_); - - double pt0 = zMuTrackCand.daughter(0)->pt(); - double pt1 = zMuTrackCand.daughter(1)->pt(); - double eta0 = zMuTrackCand.daughter(0)->eta(); - double eta1 = zMuTrackCand.daughter(1)->eta(); - double mass = zMuTrackCand.mass(); - - // HLT match (check just dau0 the global) - const pat::TriggerObjectStandAloneCollection mu0HLTMatches = muonDau0.triggerObjectMatchesByPath(hltPath_); - - bool trig0found = false; - if (!mu0HLTMatches.empty()) - trig0found = true; - - GenParticleRef zMuTrackMatch = (*zMuTrackMatchMap)[zMuTrackCandRef]; - if (zMuTrackMatch.isNonnull()) { // ZMuTrack matched - nZMuTrk_matched++; - if (pt0 > ptmin_ && pt1 > ptmin_ && abs(eta0) > etamin_ && abs(eta1) > etamin_ && abs(eta0) < etamax_ && - abs(eta1) < etamax_ && mass > massMin_ && mass < massMax_ && iso0 < isoMax_ && iso1 < isoMax_ && - trig0found) { // all cuts and trigger passed - nTracksMuonsMatched_passedIso++; - // histograms vs eta and pt - h_trackProbe_eta->Fill(eta1); - h_trackProbe_pt->Fill(pt1); - } - } // end MC match - } // end loop on ZMuTrack cand - } // end if ZMuTrack size > 0 - -} // end analyze - -bool ZMuMu_MCanalyzer::check_ifZmumu(const Candidate* dauGen0, const Candidate* dauGen1, const Candidate* dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - bool muplusFound = false; - bool muminusFound = false; - bool ZFound = false; - if (partId0 == 13 || partId1 == 13 || partId2 == 13) - muminusFound = true; - if (partId0 == -13 || partId1 == -13 || partId2 == -13) - muplusFound = true; - if (partId0 == 23 || partId1 == 23 || partId2 == 23) - ZFound = true; - return (muplusFound && muminusFound && ZFound); -} - -float ZMuMu_MCanalyzer::getParticlePt(const int ipart, - const Candidate* dauGen0, - const Candidate* dauGen1, - const Candidate* dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - float ptpart = 0.; - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate* dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - ptpart = dauMuGen->pt(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate* dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - ptpart = dauMuGen->pt(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate* dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - ptpart = dauMuGen->pt(); - } - } - } - return ptpart; -} - -float ZMuMu_MCanalyzer::getParticleEta(const int ipart, - const Candidate* dauGen0, - const Candidate* dauGen1, - const Candidate* dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - float etapart = 0.; - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate* dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - etapart = dauMuGen->eta(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate* dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - etapart = dauMuGen->eta(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate* dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - etapart = dauMuGen->eta(); - } - } - } - return etapart; -} - -float ZMuMu_MCanalyzer::getParticlePhi(const int ipart, - const Candidate* dauGen0, - const Candidate* dauGen1, - const Candidate* dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - float phipart = 0.; - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate* dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - phipart = dauMuGen->phi(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate* dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - phipart = dauMuGen->phi(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate* dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - phipart = dauMuGen->phi(); - } - } - } - return phipart; -} - -Particle::LorentzVector ZMuMu_MCanalyzer::getParticleP4(const int ipart, - const Candidate* dauGen0, - const Candidate* dauGen1, - const Candidate* dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - Particle::LorentzVector p4part(0., 0., 0., 0.); - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate* dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - p4part = dauMuGen->p4(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate* dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - p4part = dauMuGen->p4(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate* dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - p4part = dauMuGen->p4(); - } - } - } - return p4part; -} - -void ZMuMu_MCanalyzer::endJob() { - double eff_Iso = double(nGlobalMuonsMatched_passedIso) / nGlobalMuonsMatched_passed; - double err_effIso = sqrt(eff_Iso * (1 - eff_Iso) / nGlobalMuonsMatched_passed); - - double n1_afterIso = - 2 * n2GlobalMuonsMatched_passedIso2Trg + nMu0onlyTriggered + nMu1onlyTriggered + nTracksMuonsMatched_passedIso; - double n2_afterIso = - 2 * n2GlobalMuonsMatched_passedIso2Trg + nMu0onlyTriggered + nMu1onlyTriggered + nStaMuonsMatched_passedIso; - double nGLB_afterIso = 2 * n2GlobalMuonsMatched_passedIso2Trg + nMu0onlyTriggered + nMu1onlyTriggered; - double effSta_afterIso = - (2 * n2GlobalMuonsMatched_passedIso2Trg + nMu0onlyTriggered + nMu1onlyTriggered) / n1_afterIso; - double effTrk_afterIso = - (2 * n2GlobalMuonsMatched_passedIso2Trg + nMu0onlyTriggered + nMu1onlyTriggered) / n2_afterIso; - double effHLT_afterIso = (2. * n2GlobalMuonsMatched_passedIso2Trg) / - (2. * n2GlobalMuonsMatched_passedIso2Trg + nMu0onlyTriggered + nMu1onlyTriggered); - double err_effHLT_afterIso = sqrt(effHLT_afterIso * (1 - effHLT_afterIso) / nGLB_afterIso); - double err_effsta_afterIso = sqrt(effSta_afterIso * (1 - effSta_afterIso) / n1_afterIso); - double err_efftrk_afterIso = sqrt(effTrk_afterIso * (1 - effTrk_afterIso) / n2_afterIso); - - cout << "------------------------------------ Counters --------------------------------" << endl; - - cout << "number of events zMuMu matched " << nZMuMu_matched << endl; - cout << "number of events zMuSta matched " << nZMuSta_matched << endl; - cout << "number of events zMuTk matched " << nZMuTrk_matched << endl; - cout << "number of events zMuMu with mu0 only triggered " << nMu0onlyTriggered << endl; - cout << "number of events zMuMu with mu1 only triggered " << nMu1onlyTriggered << endl; - cout << "=========================================" << endl; - cout << "n. of global muons MC matched and passing cuts: " << nGlobalMuonsMatched_passed << endl; - cout << "n. of global muons MC matched and passing also Iso cut: " << nGlobalMuonsMatched_passedIso << endl; - cout << "n. of Z -> 2 global muons MC matched and passing ALL cuts: " << n2GlobalMuonsMatched_passedIso << endl; - cout << "n. of ZMuSta MC matched and passing ALL cuts: " << nStaMuonsMatched_passedIso << endl; - cout << "n. of ZmuTrck MC matched and passing ALL cuts: " << nTracksMuonsMatched_passedIso << endl; - cout << "n. of Z -> 2 global muons MC matched and passing ALL cuts and both triggered: " - << n2GlobalMuonsMatched_passedIso2Trg << endl; - cout << "=================================================================================" << endl; - cout << "Iso efficiency: " << eff_Iso << " +/- " << err_effIso << endl; - cout << "HLT efficiency: " << effHLT_afterIso << " +/- " << err_effHLT_afterIso << endl; - cout << "eff StandAlone (after Isocut) : " << effSta_afterIso << "+/-" << err_effsta_afterIso << endl; - cout << "eff Tracker (after Isocut) : " << effTrk_afterIso << "+/-" << err_efftrk_afterIso << endl; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuMu_MCanalyzer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMu_efficiencyAnalyzer.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMu_efficiencyAnalyzer.cc deleted file mode 100644 index 7a2fe6e87724d..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMu_efficiencyAnalyzer.cc +++ /dev/null @@ -1,779 +0,0 @@ -/* \class ZMuMu_efficieyAnalyzer - * - * author: Davide Piccolo - * - * ZMuMu efficiency analyzer: - * check muon reco efficiencies from MC truth, - * - */ - -#include "DataFormats/Common/interface/AssociationVector.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Candidate/interface/OverlapChecker.h" -#include "DataFormats/Math/interface/deltaR.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -#include "DataFormats/PatCandidates/interface/TriggerObjectStandAlone.h" -#include "DataFormats/Common/interface/AssociationVector.h" -#include "DataFormats/PatCandidates/interface/PATObject.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/Candidate/interface/CandAssociation.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" - -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include -#include - -using namespace edm; -using namespace std; -using namespace reco; - -typedef edm::ValueMap IsolationCollection; - -class ZMuMu_efficiencyAnalyzer : public edm::EDAnalyzer { -public: - ZMuMu_efficiencyAnalyzer(const edm::ParameterSet &pset); - -private: - void analyze(const edm::Event &event, const edm::EventSetup &setup) override; - bool check_ifZmumu(const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - float getParticlePt(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - float getParticleEta(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - float getParticlePhi(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - Particle::LorentzVector getParticleP4(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2); - void endJob() override; - - EDGetTokenT zMuMuToken_; - EDGetTokenT zMuMuMatchMapToken_; - EDGetTokenT zMuStandAloneToken_; - EDGetTokenT zMuStandAloneMatchMapToken_; - EDGetTokenT zMuTrackToken_; - EDGetTokenT zMuTrackMatchMapToken_; - EDGetTokenT muonsToken_; - EDGetTokenT tracksToken_; - EDGetTokenT genParticlesToken_; - EDGetTokenT primaryVerticesToken_; - - bool bothMuons_; - - double etamax_, ptmin_, massMin_, massMax_, isoMax_; - - // binning of entries array (at moment defined by hand and not in cfg file) - unsigned int etaBins; - unsigned int ptBins; - double etaRange[7]; - double ptRange[5]; - - reco::CandidateBaseRef globalMuonCandRef_, trackMuonCandRef_, standAloneMuonCandRef_; - OverlapChecker overlap_; - - // general histograms - TH1D *h_zmm_mass, *h_zmm2HLT_mass; - TH1D *h_zmm1HLTplus_mass, *h_zmmNotIsoplus_mass, *h_zmsplus_mass, *h_zmtplus_mass; - TH1D *h_zmm1HLTminus_mass, *h_zmmNotIsominus_mass, *h_zmsminus_mass, *h_zmtminus_mass; - - // global counters - int nGlobalMuonsMatched_passed; // total number of global muons MC matched and passing cuts (and triggered) - - vector hmumu2HLTplus_eta, hmumu1HLTplus_eta, hmustaplus_eta, hmutrackplus_eta, hmumuNotIsoplus_eta; - vector hmumu2HLTplus_pt, hmumu1HLTplus_pt, hmustaplus_pt, hmutrackplus_pt, hmumuNotIsoplus_pt; - vector hmumu2HLTminus_eta, hmumu1HLTminus_eta, hmustaminus_eta, hmutrackminus_eta, hmumuNotIsominus_eta; - vector hmumu2HLTminus_pt, hmumu1HLTminus_pt, hmustaminus_pt, hmutrackminus_pt, hmumuNotIsominus_pt; -}; - -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Math/interface/LorentzVector.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include -#include -#include - -ZMuMu_efficiencyAnalyzer::ZMuMu_efficiencyAnalyzer(const ParameterSet &pset) - : zMuMuToken_(consumes(pset.getParameter("zMuMu"))), - zMuMuMatchMapToken_(mayConsume(pset.getParameter("zMuMuMatchMap"))), - zMuStandAloneToken_(consumes(pset.getParameter("zMuStandAlone"))), - zMuStandAloneMatchMapToken_(mayConsume(pset.getParameter("zMuStandAloneMatchMap"))), - zMuTrackToken_(consumes(pset.getParameter("zMuTrack"))), - zMuTrackMatchMapToken_(mayConsume(pset.getParameter("zMuTrackMatchMap"))), - muonsToken_(consumes(pset.getParameter("muons"))), - tracksToken_(consumes(pset.getParameter("tracks"))), - genParticlesToken_(consumes(pset.getParameter("genParticles"))), - primaryVerticesToken_(consumes(pset.getParameter("primaryVertices"))), - - bothMuons_(pset.getParameter("bothMuons")), - - etamax_(pset.getUntrackedParameter("etamax")), - ptmin_(pset.getUntrackedParameter("ptmin")), - massMin_(pset.getUntrackedParameter("zMassMin")), - massMax_(pset.getUntrackedParameter("zMassMax")), - isoMax_(pset.getUntrackedParameter("isomax")) { - Service fs; - - // general histograms - h_zmm_mass = fs->make("zmm_mass", "zmumu mass", 100, 0., 200.); - h_zmm2HLT_mass = fs->make("zmm2HLT_mass", "zmumu 2HLT mass", 100, 0., 200.); - h_zmm1HLTplus_mass = fs->make("zmm1HLTplus_mass", "zmumu 1HLT plus mass", 100, 0., 200.); - h_zmmNotIsoplus_mass = fs->make("zmmNotIsoplus_mass", "zmumu a least One Not Iso plus mass", 100, 0., 200.); - h_zmsplus_mass = fs->make("zmsplus_mass", "zmusta plus mass", 100, 0., 200.); - h_zmtplus_mass = fs->make("zmtplus_mass", "zmutrack plus mass", 100, 0., 200.); - h_zmm1HLTminus_mass = fs->make("zmm1HLTminus_mass", "zmumu 1HLT minus mass", 100, 0., 200.); - h_zmmNotIsominus_mass = fs->make("zmmNotIsominus_mass", "zmumu a least One Not Iso minus mass", 100, 0., 200.); - h_zmsminus_mass = fs->make("zmsminus_mass", "zmusta minus mass", 100, 0., 200.); - h_zmtminus_mass = fs->make("zmtminus_mass", "zmutrack minus mass", 100, 0., 200.); - - cout << "primo" << endl; - // creating histograms for each Pt, eta interval - - TFileDirectory etaDirectory = - fs->mkdir("etaIntervals"); // in this directory will be saved all the histos of different eta intervals - TFileDirectory ptDirectory = - fs->mkdir("ptIntervals"); // in this directory will be saved all the histos of different pt intervals - - // binning of entries array (at moment defined by hand and not in cfg file) - etaBins = 6; - ptBins = 4; - double etaRangeTmp[7] = {-2., -1.2, -0.8, 0., 0.8, 1.2, 2.}; - double ptRangeTmp[5] = {20., 40., 60., 80., 100.}; - for (unsigned int i = 0; i <= etaBins; i++) - etaRange[i] = etaRangeTmp[i]; - for (unsigned int i = 0; i <= ptBins; i++) - ptRange[i] = ptRangeTmp[i]; - - // eta histograms creation - cout << "eta istograms creation " << endl; - - for (unsigned int i = 0; i < etaBins; i++) { - cout << " bin eta plus " << i << endl; - // muon plus - double range0 = etaRange[i]; - double range1 = etaRange[i + 1]; - std::string ap, bp; - ap = "zmumu2HLTplus_etaRange" + std::to_string(i); - bp = "zmumu2HLT plus mass eta Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << ap << " " << bp << endl; - hmumu2HLTplus_eta.push_back(etaDirectory.make(ap.c_str(), bp.c_str(), 200, 0., 200.)); - ap = "zmumu1HLTplus_etaRange" + std::to_string(i); - bp = "zmumu1HLT plus mass eta Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << ap << " " << bp << endl; - hmumu1HLTplus_eta.push_back(etaDirectory.make(ap.c_str(), bp.c_str(), 200, 0., 200.)); - ap = "zmustaplus_etaRange" + std::to_string(i); - bp = "zmusta plus mass eta Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << ap << " " << bp << endl; - hmustaplus_eta.push_back(etaDirectory.make(ap.c_str(), bp.c_str(), 50, 0., 200.)); - ap = "zmutrackplus_etaRange" + std::to_string(i); - bp = "zmutrack plus mass eta Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << ap << " " << bp << endl; - hmutrackplus_eta.push_back(etaDirectory.make(ap.c_str(), bp.c_str(), 100, 0., 200.)); - ap = "zmumuNotIsoplus_etaRange" + std::to_string(i); - bp = "zmumuNotIso plus mass eta Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << ap << " " << bp << endl; - hmumuNotIsoplus_eta.push_back(etaDirectory.make(ap.c_str(), bp.c_str(), 100, 0., 200.)); - // muon minus - cout << " bin eta minus " << i << endl; - std::string am, bm; - am = "zmumu2HLTminus_etaRange" + std::to_string(i); - bm = "zmumu2HLT minus mass eta Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << am << " " << bm << endl; - hmumu2HLTminus_eta.push_back(etaDirectory.make(am.c_str(), bm.c_str(), 200, 0., 200.)); - am = "zmumu1HLTminus_etaRange" + std::to_string(i); - bm = "zmumu1HLT minus mass eta Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << am << " " << bm << endl; - hmumu1HLTminus_eta.push_back(etaDirectory.make(am.c_str(), bm.c_str(), 200, 0., 200.)); - am = "zmustaminus_etaRange" + std::to_string(i); - bm = "zmusta minus mass eta Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << am << " " << bm << endl; - hmustaminus_eta.push_back(etaDirectory.make(am.c_str(), bm.c_str(), 50, 0., 200.)); - am = "zmutrackminus_etaRange" + std::to_string(i); - bm = "zmutrack minus mass eta Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << am << " " << bm << endl; - hmutrackminus_eta.push_back(etaDirectory.make(am.c_str(), bm.c_str(), 100, 0., 200.)); - am = "zmumuNotIsominus_etaRange" + std::to_string(i); - bm = "zmumuNotIso minus mass eta Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << am << " " << bm << endl; - hmumuNotIsominus_eta.push_back(etaDirectory.make(am.c_str(), bm.c_str(), 100, 0., 200.)); - } - - // pt histograms creation - cout << "pt istograms creation " << endl; - - for (unsigned int i = 0; i < ptBins; i++) { - double range0 = ptRange[i]; - double range1 = ptRange[i + 1]; - // muon plus - cout << " bin pt plus " << i << endl; - std::string ap1, bp1; - ap1 = "zmumu2HLTplus_ptRange" + std::to_string(i); - bp1 = "zmumu2HLT plus mass pt Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << ap1 << " " << bp1 << endl; - hmumu2HLTplus_pt.push_back(ptDirectory.make(ap1.c_str(), bp1.c_str(), 200, 0., 200.)); - ap1 = "zmumu1HLTplus_ptRange" + std::to_string(i); - bp1 = "zmumu1HLT plus mass pt Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << ap1 << " " << bp1 << endl; - hmumu1HLTplus_pt.push_back(ptDirectory.make(ap1.c_str(), bp1.c_str(), 200, 0., 200.)); - ap1 = "zmustaplus_ptRange" + std::to_string(i); - bp1 = "zmusta plus mass pt Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << ap1 << " " << bp1 << endl; - hmustaplus_pt.push_back(ptDirectory.make(ap1.c_str(), bp1.c_str(), 50, 0., 200.)); - ap1 = "zmutrackplus_ptRange" + std::to_string(i); - bp1 = "zmutrack plus mass pt Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << ap1 << " " << bp1 << endl; - hmutrackplus_pt.push_back(ptDirectory.make(ap1.c_str(), bp1.c_str(), 100, 0., 200.)); - ap1 = "zmumuNotIsoplus_ptRange" + std::to_string(i); - bp1 = "zmumuNotIso plus mass pt Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << ap1 << " " << bp1 << endl; - hmumuNotIsoplus_pt.push_back(ptDirectory.make(ap1.c_str(), bp1.c_str(), 100, 0., 200.)); - // muon minus - cout << " bin pt minus " << i << endl; - std::string am1, bm1; - am1 = "zmumu2HLTminus_ptRange" + std::to_string(i); - bm1 = "zmumu2HLT minus mass pt Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << am1 << " " << bm1 << endl; - hmumu2HLTminus_pt.push_back(ptDirectory.make(am1.c_str(), bm1.c_str(), 200, 0., 200.)); - am1 = "zmumu1HLTminus_ptRange" + std::to_string(i); - bm1 = "zmumu1HLT minus mass pt Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << am1 << " " << bm1 << endl; - hmumu1HLTminus_pt.push_back(ptDirectory.make(am1.c_str(), bm1.c_str(), 200, 0., 200.)); - am1 = "zmustaminus_ptRange" + std::to_string(i); - bm1 = "zmusta minus mass pt Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << am1 << " " << bm1 << endl; - hmustaminus_pt.push_back(ptDirectory.make(am1.c_str(), bm1.c_str(), 50, 0., 200.)); - am1 = "zmutrackminus_ptRange" + std::to_string(i); - bm1 = "zmutrack minus mass pt Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << am1 << " " << bm1 << endl; - hmutrackminus_pt.push_back(ptDirectory.make(am1.c_str(), bm1.c_str(), 100, 0., 200.)); - am1 = "zmumuNotIsominus_ptRange" + std::to_string(i); - bm1 = "zmumuNotIso minus mass pt Range " + std::to_string(range0) + " to " + std::to_string(range1); - cout << am1 << " " << bm1 << endl; - hmumuNotIsominus_pt.push_back(ptDirectory.make(am1.c_str(), bm1.c_str(), 100, 0., 200.)); - } - - // clear global counters - nGlobalMuonsMatched_passed = 0; -} - -void ZMuMu_efficiencyAnalyzer::analyze(const Event &event, const EventSetup &setup) { - Handle zMuMu; - Handle zMuMuMatchMap; //Map of Z made by Mu global + Mu global - Handle zMuStandAlone; - Handle zMuStandAloneMatchMap; //Map of Z made by Mu + StandAlone - Handle zMuTrack; - Handle zMuTrackMatchMap; //Map of Z made by Mu + Track - Handle muons; //Collection of Muons - Handle tracks; //Collection of Tracks - - Handle genParticles; // Collection of Generatd Particles - Handle primaryVertices; // Collection of primary Vertices - - event.getByToken(zMuMuToken_, zMuMu); - event.getByToken(zMuStandAloneToken_, zMuStandAlone); - event.getByToken(zMuTrackToken_, zMuTrack); - event.getByToken(genParticlesToken_, genParticles); - event.getByToken(primaryVerticesToken_, primaryVertices); - event.getByToken(muonsToken_, muons); - event.getByToken(tracksToken_, tracks); - - /* - cout << "********* zMuMu size : " << zMuMu->size() << endl; - cout << "********* zMuStandAlone size : " << zMuStandAlone->size() << endl; - cout << "********* zMuTrack size : " << zMuTrack->size() << endl; - cout << "********* muons size : " << muons->size() << endl; - cout << "********* tracks size : " << tracks->size() << endl; - cout << "********* vertices size : " << primaryVertices->size() << endl; - */ - - // std::cout<<"Run-> "< "<empty()) { - for (unsigned int i = 0; i < zMuMu->size(); ++i) { //loop on candidates - const Candidate &zMuMuCand = (*zMuMu)[i]; //the candidate - CandidateBaseRef zMuMuCandRef = zMuMu->refAt(i); - - const Candidate *lep0 = zMuMuCand.daughter(0); - const Candidate *lep1 = zMuMuCand.daughter(1); - const pat::Muon &muonDau0 = dynamic_cast(*lep0->masterClone()); - double trkiso0 = muonDau0.trackIso(); - const pat::Muon &muonDau1 = dynamic_cast(*lep1->masterClone()); - double trkiso1 = muonDau1.trackIso(); - - // kinemtic variables - double pt0 = zMuMuCand.daughter(0)->pt(); - double pt1 = zMuMuCand.daughter(1)->pt(); - double eta0 = zMuMuCand.daughter(0)->eta(); - double eta1 = zMuMuCand.daughter(1)->eta(); - double charge0 = zMuMuCand.daughter(0)->charge(); - double charge1 = zMuMuCand.daughter(1)->charge(); - double mass = zMuMuCand.mass(); - - // HLT match - const pat::TriggerObjectStandAloneCollection mu0HLTMatches = muonDau0.triggerObjectMatchesByPath("HLT_Mu9"); - const pat::TriggerObjectStandAloneCollection mu1HLTMatches = muonDau1.triggerObjectMatchesByPath("HLT_Mu9"); - - bool trig0found = false; - bool trig1found = false; - if (!mu0HLTMatches.empty()) - trig0found = true; - if (!mu1HLTMatches.empty()) - trig1found = true; - - // kinematic selection - - bool checkOppositeCharge = false; - if (charge0 != charge1) - checkOppositeCharge = true; - if (pt0 > ptmin_ && pt1 > ptmin_ && abs(eta0) < etamax_ && abs(eta1) < etamax_ && mass > massMin_ && - mass < massMax_ && checkOppositeCharge) { - if (trig0found || trig1found) { // at least one muon match HLT - zMuMu_found = true; // Z found as global-global (so don't check Zms and Zmt) - if (trkiso0 < isoMax_ && trkiso1 < isoMax_) { // both muons are isolated - if (trig0found && trig1found) { - // ******************** category zmm 2 HLT **************** - - h_zmm2HLT_mass->Fill(mass); - h_zmm_mass->Fill(mass); - - // check the cynematics to fill correct histograms - - for (unsigned int j = 0; j < etaBins; j++) { // eta Bins loop - double range0 = etaRange[j]; - double range1 = etaRange[j + 1]; - - // eta histograms - - if (eta0 >= range0 && eta0 < range1) { - if (charge0 < 0) - hmumu2HLTminus_eta[j]->Fill(mass); // mu- in bin eta - if (charge0 > 0) - hmumu2HLTplus_eta[j]->Fill(mass); // mu+ in bin eta - } - if (eta1 >= range0 && eta1 < range1) { - if (charge1 < 0) - hmumu2HLTminus_eta[j]->Fill(mass); // mu- in bin eta - if (charge1 > 0) - hmumu2HLTplus_eta[j]->Fill(mass); // mu+ in bin eta - } - } // end loop etaBins - - for (unsigned int j = 0; j < ptBins; j++) { // pt Bins loop - double range0pt = ptRange[j]; - double range1pt = ptRange[j + 1]; - // pt histograms - if (pt0 >= range0pt && pt0 < range1pt) { - if (charge0 < 0) - hmumu2HLTminus_pt[j]->Fill(mass); // mu- in bin eta - if (charge0 > 0) - hmumu2HLTplus_pt[j]->Fill(mass); // mu+ in bin eta - } - if (pt1 >= range0pt && pt1 < range1pt) { - if (charge1 < 0) - hmumu2HLTminus_pt[j]->Fill(mass); // mu- in bin eta - if (charge1 > 0) - hmumu2HLTplus_pt[j]->Fill(mass); // mu+ in bin eta - } - } // end loop ptBins - - } // ******************* end category zmm 2 HLT **************** - - if (!trig0found || !trig1found) { - // ****************** category zmm 1 HLT ****************** - h_zmm_mass->Fill(mass); - double eta = 9999; - double pt = 9999; - double charge = 0; - if (trig0found) { - eta = eta1; // check muon not HLT matched - pt = pt1; - charge = charge1; - } else { - eta = eta0; - pt = pt0; - charge = charge0; - } - if (charge < 0) - h_zmm1HLTminus_mass->Fill(mass); - if (charge > 0) - h_zmm1HLTplus_mass->Fill(mass); - - for (unsigned int j = 0; j < etaBins; j++) { // eta Bins loop - double range0 = etaRange[j]; - double range1 = etaRange[j + 1]; - // eta histograms fill the bin of the muon not HLT matched - if (eta >= range0 && eta < range1) { - if (charge < 0) - hmumu1HLTminus_eta[j]->Fill(mass); - if (charge > 0) - hmumu1HLTplus_eta[j]->Fill(mass); - } - } // end loop etaBins - for (unsigned int j = 0; j < ptBins; j++) { // pt Bins loop - double range0 = ptRange[j]; - double range1 = ptRange[j + 1]; - // pt histograms - if (pt >= range0 && pt < range1) { - if (charge < 0) - hmumu1HLTminus_pt[j]->Fill(mass); - if (charge > 0) - hmumu1HLTplus_pt[j]->Fill(mass); - } - } // end loop ptBins - - } // ****************** end category zmm 1 HLT *************** - - } else { // one or both muons are not isolated - // ***************** category zmumuNotIso **************** (per ora non studio iso vs eta e pt da capire meglio) - - } // end if both muons isolated - - } // end if at least 1 HLT trigger found - } // end if kinematic selection - - } // end loop on ZMuMu cand - } // end if ZMuMu size > 0 - - // loop on ZMuSta - bool zMuSta_found = false; - if (!zMuMu_found && !zMuStandAlone->empty()) { - event.getByToken(zMuStandAloneMatchMapToken_, zMuStandAloneMatchMap); - for (unsigned int i = 0; i < zMuStandAlone->size(); ++i) { //loop on candidates - const Candidate &zMuStandAloneCand = (*zMuStandAlone)[i]; //the candidate - CandidateBaseRef zMuStandAloneCandRef = zMuStandAlone->refAt(i); - GenParticleRef zMuStandAloneMatch = (*zMuStandAloneMatchMap)[zMuStandAloneCandRef]; - - const Candidate *lep0 = zMuStandAloneCand.daughter(0); - const Candidate *lep1 = zMuStandAloneCand.daughter(1); - const pat::Muon &muonDau0 = dynamic_cast(*lep0->masterClone()); - double trkiso0 = muonDau0.trackIso(); - const pat::Muon &muonDau1 = dynamic_cast(*lep1->masterClone()); - double trkiso1 = muonDau1.trackIso(); - double pt0 = zMuStandAloneCand.daughter(0)->pt(); - double pt1 = zMuStandAloneCand.daughter(1)->pt(); - double eta0 = zMuStandAloneCand.daughter(0)->eta(); - double eta1 = zMuStandAloneCand.daughter(1)->eta(); - double charge0 = zMuStandAloneCand.daughter(0)->charge(); - double charge1 = zMuStandAloneCand.daughter(1)->charge(); - double mass = zMuStandAloneCand.mass(); - - // HLT match - const pat::TriggerObjectStandAloneCollection mu0HLTMatches = muonDau0.triggerObjectMatchesByPath("HLT_Mu9"); - const pat::TriggerObjectStandAloneCollection mu1HLTMatches = muonDau1.triggerObjectMatchesByPath("HLT_Mu9"); - - bool trig0found = false; - bool trig1found = false; - if (!mu0HLTMatches.empty()) - trig0found = true; - if (!mu1HLTMatches.empty()) - trig1found = true; - - // check HLT match of Global muon and save eta, pt of second muon (standAlone) - bool trigGlbfound = false; - double pt = 999.; - double eta = 999.; - double charge = 0; - if (muonDau0.isGlobalMuon()) { - trigGlbfound = trig0found; - pt = pt1; - eta = eta1; - charge = charge1; - } - if (muonDau1.isGlobalMuon()) { - trigGlbfound = trig1found; - pt = pt0; - eta = eta0; - charge = charge0; - } - - bool checkOppositeCharge = false; - if (charge0 != charge1) - checkOppositeCharge = true; - - if (checkOppositeCharge && trigGlbfound && pt0 > ptmin_ && pt1 > ptmin_ && abs(eta0) < etamax_ && - abs(eta1) < etamax_ && mass > massMin_ && mass < massMax_ && trkiso0 < isoMax_ && - trkiso1 < isoMax_) { // global mu match HLT + kinematic cuts + opposite charge - - if (charge < 0) - h_zmsminus_mass->Fill(mass); - if (charge > 0) - h_zmsplus_mass->Fill(mass); - - for (unsigned int j = 0; j < etaBins; j++) { // eta Bins loop - double range0 = etaRange[j]; - double range1 = etaRange[j + 1]; - // eta histograms - if (eta >= range0 && eta < range1) { - if (charge < 0) - hmustaminus_eta[j]->Fill(mass); - if (charge > 0) - hmustaplus_eta[j]->Fill(mass); - } - } // end loop etaBins - for (unsigned int j = 0; j < ptBins; j++) { // pt Bins loop - double range0 = ptRange[j]; - double range1 = ptRange[j + 1]; - // pt histograms - if (pt >= range0 && pt < range1) { - if (charge < 0) - hmustaminus_pt[j]->Fill(mass); - if (charge > 0) - hmustaplus_pt[j]->Fill(mass); - } - } // end loop ptBins - - } // end if trigGlbfound + kinecuts + OppostieCharge - } // end loop on ZMuStandAlone cand - } // end if ZMuStandAlone size > 0 - - // loop on ZMuTrack - // bool zMuTrack_found = false; - if (!zMuMu_found && !zMuSta_found && !zMuTrack->empty()) { - event.getByToken(zMuTrackMatchMapToken_, zMuTrackMatchMap); - for (unsigned int i = 0; i < zMuTrack->size(); ++i) { //loop on candidates - const Candidate &zMuTrackCand = (*zMuTrack)[i]; //the candidate - CandidateBaseRef zMuTrackCandRef = zMuTrack->refAt(i); - const Candidate *lep0 = zMuTrackCand.daughter(0); - const Candidate *lep1 = zMuTrackCand.daughter(1); - const pat::Muon &muonDau0 = dynamic_cast(*lep0->masterClone()); - double trkiso0 = muonDau0.trackIso(); - const pat::GenericParticle &trackDau1 = dynamic_cast(*lep1->masterClone()); - double trkiso1 = trackDau1.trackIso(); - double pt0 = zMuTrackCand.daughter(0)->pt(); - double pt1 = zMuTrackCand.daughter(1)->pt(); - double eta0 = zMuTrackCand.daughter(0)->eta(); - double eta1 = zMuTrackCand.daughter(1)->eta(); - double charge0 = zMuTrackCand.daughter(0)->charge(); - double charge1 = zMuTrackCand.daughter(1)->charge(); - double mass = zMuTrackCand.mass(); - - // HLT match (check just dau0 the global) - const pat::TriggerObjectStandAloneCollection mu0HLTMatches = muonDau0.triggerObjectMatchesByPath("HLT_Mu9"); - - bool trig0found = false; - if (!mu0HLTMatches.empty()) - trig0found = true; - - bool checkOppositeCharge = false; - if (charge0 != charge1) - checkOppositeCharge = true; - - if (checkOppositeCharge && trig0found && pt0 > ptmin_ && pt1 > ptmin_ && abs(eta0) < etamax_ && - abs(eta1) < etamax_ && mass > massMin_ && mass < massMax_ && trkiso0 < isoMax_ && - trkiso1 < isoMax_) { // global mu match HLT + kinematic cuts + opposite charge - - if (charge1 < 0) - h_zmtminus_mass->Fill(mass); - if (charge1 > 0) - h_zmtplus_mass->Fill(mass); - - for (unsigned int j = 0; j < etaBins; j++) { // eta Bins loop - double range0 = etaRange[j]; - double range1 = etaRange[j + 1]; - // eta histograms - if (eta1 >= range0 && eta1 < range1) { - if (charge1 < 0) - hmutrackminus_eta[j]->Fill(mass); // just check muon1 (mu0 is global by definition) - if (charge1 > 0) - hmutrackplus_eta[j]->Fill(mass); // just check muon1 (mu0 is global by definition) - } - } // end loop etaBins - for (unsigned int j = 0; j < ptBins; j++) { // pt Bins loop - double range0 = ptRange[j]; - double range1 = ptRange[j + 1]; - // pt histograms - if (pt1 >= range0 && pt1 < range1) { - if (charge1 < 0) - hmutrackminus_pt[j]->Fill(mass); // just check muon1 (mu0 is global by definition) - if (charge1 > 0) - hmutrackplus_pt[j]->Fill(mass); // just check muon1 (mu0 is global by definition) - } - } // end loop ptBins - - } // end if trig0found - - } // end loop on ZMuTrack cand - } // end if ZMuTrack size > 0 - -} // end analyze - -bool ZMuMu_efficiencyAnalyzer::check_ifZmumu(const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - bool muplusFound = false; - bool muminusFound = false; - bool ZFound = false; - if (partId0 == 13 || partId1 == 13 || partId2 == 13) - muminusFound = true; - if (partId0 == -13 || partId1 == -13 || partId2 == -13) - muplusFound = true; - if (partId0 == 23 || partId1 == 23 || partId2 == 23) - ZFound = true; - return (muplusFound && muminusFound && ZFound); -} - -float ZMuMu_efficiencyAnalyzer::getParticlePt(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - float ptpart = 0.; - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - ptpart = dauMuGen->pt(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - ptpart = dauMuGen->pt(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - ptpart = dauMuGen->pt(); - } - } - } - return ptpart; -} - -float ZMuMu_efficiencyAnalyzer::getParticleEta(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - float etapart = 0.; - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - etapart = dauMuGen->eta(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - etapart = dauMuGen->eta(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - etapart = dauMuGen->eta(); - } - } - } - return etapart; -} - -float ZMuMu_efficiencyAnalyzer::getParticlePhi(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - float phipart = 0.; - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - phipart = dauMuGen->phi(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - phipart = dauMuGen->phi(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - phipart = dauMuGen->phi(); - } - } - } - return phipart; -} - -Particle::LorentzVector ZMuMu_efficiencyAnalyzer::getParticleP4(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - Particle::LorentzVector p4part(0., 0., 0., 0.); - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - p4part = dauMuGen->p4(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - p4part = dauMuGen->p4(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - p4part = dauMuGen->p4(); - } - } - } - return p4part; -} - -void ZMuMu_efficiencyAnalyzer::endJob() {} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuMu_efficiencyAnalyzer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMu_radiative_analysis.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMu_radiative_analysis.cc deleted file mode 100644 index 58fdcff928d70..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMu_radiative_analysis.cc +++ /dev/null @@ -1,557 +0,0 @@ -/* \class ZMuMu_Radiative_analyzer - * - * author: Pasquale Noli - * - * ZMuMu Radiative analyzer - * - * - */ -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "DataFormats/Common/interface/AssociationVector.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "DataFormats/Candidate/interface/OverlapChecker.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/Lepton.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -#include "DataFormats/PatCandidates/interface/TriggerObjectStandAlone.h" -#include "DataFormats/PatCandidates/interface/PATObject.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositVetos.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositDirection.h" -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" -#include "DataFormats/PatCandidates/interface/Isolation.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/Candidate/interface/CandAssociation.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include -#include -#include -#include -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" - -using namespace edm; -using namespace std; -using namespace reco; -using namespace isodeposit; - -class ZMuMu_Radiative_analyzer : public edm::EDAnalyzer { -public: - ZMuMu_Radiative_analyzer(const edm::ParameterSet& pset); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - void endJob() override; - - EDGetTokenT zMuMuToken_; - EDGetTokenT zMuMuMatchMapToken_; - EDGetTokenT zMuTkToken_; - EDGetTokenT zMuTkMatchMapToken_; - EDGetTokenT zMuSaToken_; - EDGetTokenT zMuSaMatchMapToken_; - double dRVeto_, dRTrk_, ptThreshold_; - //histograms - TH1D *h_zmass_FSR, *h_zmass_no_FSR; - TH1D *h_zMuSamass_FSR, *h_zMuSamass_no_FSR; - TH1D *h_zMuTkmass_FSR, *h_zMuTkmass_no_FSR; - TH1D *h_Iso_, *h_Iso_FSR_; - TH3D *h_Iso_3D_, *h_Iso_FSR_3D_; - TH2D *h_staProbe_pt_eta_no_FSR_, *h_staProbe_pt_eta_FSR_, *h_ProbeOk_pt_eta_no_FSR_, *h_ProbeOk_pt_eta_FSR_; - TH1D *h_trackProbe_eta_no_FSR, *h_trackProbe_pt_no_FSR, *h_staProbe_eta_no_FSR, *h_staProbe_pt_no_FSR, - *h_ProbeOk_eta_no_FSR, *h_ProbeOk_pt_no_FSR; - TH1D *h_trackProbe_eta_FSR, *h_trackProbe_pt_FSR, *h_staProbe_eta_FSR, *h_staProbe_pt_FSR, *h_ProbeOk_eta_FSR, - *h_ProbeOk_pt_FSR; - //boolean - bool FSR_mu, FSR_tk, FSR_mu0, FSR_mu1; - bool trig0found, trig1found; - //counter - int zmmcounter, zmscounter, zmtcounter, evntcounter; -}; - -typedef edm::ValueMap IsolationCollection; - -ZMuMu_Radiative_analyzer::ZMuMu_Radiative_analyzer(const ParameterSet& pset) - : zMuMuToken_(consumes(pset.getParameter("zMuMu"))), - zMuMuMatchMapToken_(mayConsume(pset.getParameter("zMuMuMatchMap"))), - zMuTkToken_(consumes(pset.getParameter("zMuTk"))), - zMuTkMatchMapToken_(mayConsume(pset.getParameter("zMuTkMatchMap"))), - zMuSaToken_(consumes(pset.getParameter("zMuSa"))), - zMuSaMatchMapToken_(mayConsume(pset.getParameter("zMuSaMatchMap"))), - dRVeto_(pset.getUntrackedParameter("veto")), - dRTrk_(pset.getUntrackedParameter("deltaRTrk")), - ptThreshold_(pset.getUntrackedParameter("ptThreshold")) { - zmmcounter = 0; - zmscounter = 0; - zmtcounter = 0; - evntcounter = 0; - Service fs; - - // general histograms - h_zmass_FSR = fs->make("h_zmass_FRS", "Invariant Z mass distribution", 200, 0, 200); - h_zmass_no_FSR = fs->make("h_zmass_no_FSR", "Invariant Z mass distribution", 200, 0, 200); - h_zMuSamass_FSR = fs->make("h_zMuSamass_FRS", "Invariant Z mass distribution", 200, 0, 200); - h_zMuSamass_no_FSR = fs->make("h_zMuSamass_no_FSR", "Invariant Z mass distribution", 200, 0, 200); - h_zMuTkmass_FSR = fs->make("h_zMuTkmass_FRS", "Invariant Z mass distribution", 200, 0, 200); - h_zMuTkmass_no_FSR = fs->make("h_zMuTkmass_no_FSR", "Invariant Z mass distribution", 200, 0, 200); - h_Iso_ = fs->make("h_iso", "Isolation distribution of muons without FSR", 100, 0, 20); - h_Iso_FSR_ = fs->make("h_iso_FSR", "Isolation distribution of muons with FSR ", 100, 0, 20); - h_Iso_3D_ = fs->make( - "h_iso_3D", "Isolation distribution of muons without FSR", 100, 20, 100, 100, -2.0, 2.0, 100, 0, 20); - h_Iso_FSR_3D_ = fs->make( - "h_iso_FSR_3D", "Isolation distribution of muons with FSR ", 100, 20, 100, 100, -2.0, 2.0, 100, 0, 20); - h_staProbe_pt_eta_no_FSR_ = - fs->make("h_staProbe_pt_eta_no_FSR", "Pt vs Eta StandAlone without FSR ", 100, 20, 100, 100, -2.0, 2.0); - h_staProbe_pt_eta_FSR_ = - fs->make("h_staProbe_pt_eta_FSR", "Pt vs Eta StandAlone with FSR ", 100, 20, 100, 100, -2.0, 2.0); - h_ProbeOk_pt_eta_no_FSR_ = - fs->make("h_ProbeOk_pt_eta_no_FSR", "Pt vs Eta probeOk without FSR ", 100, 20, 100, 100, -2.0, 2.0); - h_ProbeOk_pt_eta_FSR_ = - fs->make("h_ProbeOk_pt_eta_FSR", "Pt vs Eta probeOk with FSR ", 100, 20, 100, 100, -2.0, 2.0); - - h_trackProbe_eta_no_FSR = fs->make("trackProbeEta_no_FSR", "Eta of tracks", 100, -2.0, 2.0); - h_trackProbe_pt_no_FSR = fs->make("trackProbePt_no_FSR", "Pt of tracks", 100, 0, 100); - h_staProbe_eta_no_FSR = fs->make("standAloneProbeEta_no_FSR", "Eta of standAlone", 100, -2.0, 2.0); - h_staProbe_pt_no_FSR = fs->make("standAloneProbePt_no_FSR", "Pt of standAlone", 100, 0, 100); - h_ProbeOk_eta_no_FSR = fs->make("probeOkEta_no_FSR", "Eta of probe Ok", 100, -2.0, 2.0); - h_ProbeOk_pt_no_FSR = fs->make("probeOkPt_no_FSR", "Pt of probe ok", 100, 0, 100); - - h_trackProbe_eta_FSR = fs->make("trackProbeEta_FSR", "Eta of tracks", 100, -2.0, 2.0); - h_trackProbe_pt_FSR = fs->make("trackProbePt_FSR", "Pt of tracks", 100, 0, 100); - h_staProbe_eta_FSR = fs->make("standAloneProbeEta_FSR", "Eta of standAlone", 100, -2.0, 2.0); - h_staProbe_pt_FSR = fs->make("standAloneProbePt_FSR", "Pt of standAlone", 100, 0, 100); - h_ProbeOk_eta_FSR = fs->make("probeOkEta_FSR", "Eta of probe Ok", 100, -2.0, 2.0); - h_ProbeOk_pt_FSR = fs->make("probeOkPt_FSR", "Pt of probe ok", 100, 0, 100); -} - -void ZMuMu_Radiative_analyzer::analyze(const Event& event, const EventSetup& setup) { - evntcounter++; - Handle zMuMu; //Collection of Z made by Mu global + Mu global - Handle zMuMuMatchMap; //Map of Z made by Mu global + Mu global with MC - event.getByToken(zMuMuToken_, zMuMu); - Handle zMuTk; //Collection of Z made by Mu global + Track - Handle zMuTkMatchMap; - event.getByToken(zMuTkToken_, zMuTk); - Handle zMuSa; //Collection of Z made by Mu global + Sa - Handle zMuSaMatchMap; - event.getByToken(zMuSaToken_, zMuSa); - cout << "********** New Event ***********" << endl; - // ZMuMu - if (!zMuMu->empty()) { - event.getByToken(zMuMuMatchMapToken_, zMuMuMatchMap); - for (unsigned int i = 0; i < zMuMu->size(); ++i) { //loop on candidates - - const Candidate& zMuMuCand = (*zMuMu)[i]; //the candidate - CandidateBaseRef zMuMuCandRef = zMuMu->refAt(i); - - CandidateBaseRef dau0 = zMuMuCand.daughter(0)->masterClone(); - CandidateBaseRef dau1 = zMuMuCand.daughter(1)->masterClone(); - const pat::Muon& mu0 = dynamic_cast(*dau0); //cast in patMuon - const pat::Muon& mu1 = dynamic_cast(*dau1); - - double zmass = zMuMuCand.mass(); - double pt0 = mu0.pt(); - double pt1 = mu1.pt(); - double eta0 = mu0.eta(); - double eta1 = mu1.eta(); - if (pt0 > 20 && pt1 > 20 && abs(eta0) < 2 && abs(eta1) < 2 && zmass > 20 && zmass < 200) { - GenParticleRef zMuMuMatch = (*zMuMuMatchMap)[zMuMuCandRef]; - if (zMuMuMatch.isNonnull()) { // ZMuMu matched - zmmcounter++; - cout << " Zmumu cuts && matched" << endl; - FSR_mu0 = false; - FSR_mu1 = false; - - //Isodeposit - const pat::IsoDeposit* mu0TrackIso = mu0.isoDeposit(pat::TrackIso); - const pat::IsoDeposit* mu1TrackIso = mu1.isoDeposit(pat::TrackIso); - Direction mu0Dir = Direction(mu0.eta(), mu0.phi()); - Direction mu1Dir = Direction(mu1.eta(), mu1.phi()); - - reco::IsoDeposit::AbsVetos vetos_mu0; - vetos_mu0.push_back(new ConeVeto(mu0Dir, dRVeto_)); - vetos_mu0.push_back(new ThresholdVeto(ptThreshold_)); - - reco::IsoDeposit::AbsVetos vetos_mu1; - vetos_mu1.push_back(new ConeVeto(mu1Dir, dRVeto_)); - vetos_mu1.push_back(new ThresholdVeto(ptThreshold_)); - - double Tracker_isovalue_mu0 = mu0TrackIso->sumWithin(dRTrk_, vetos_mu0); - double Tracker_isovalue_mu1 = mu1TrackIso->sumWithin(dRTrk_, vetos_mu1); - - //trigger study - trig0found = false; - trig1found = false; - const pat::TriggerObjectStandAloneCollection mu0HLTMatches = mu0.triggerObjectMatchesByPath("HLT_Mu9"); - const pat::TriggerObjectStandAloneCollection mu1HLTMatches = mu1.triggerObjectMatchesByPath("HLT_Mu9"); - if (!mu0HLTMatches.empty()) - trig0found = true; - if (!mu1HLTMatches.empty()) - trig1found = true; - - //MonteCarlo Study - const reco::GenParticle* muMc0 = mu0.genLepton(); - const reco::GenParticle* muMc1 = mu1.genLepton(); - const Candidate* motherMu0 = muMc0->mother(); - int num_dau_muon0 = motherMu0->numberOfDaughters(); - const Candidate* motherMu1 = muMc1->mother(); - int num_dau_muon1 = motherMu1->numberOfDaughters(); - cout << " muone0" << endl; - cout << " num di daughters = " << num_dau_muon0 << endl; - if (num_dau_muon0 > 1) { - for (int j = 0; j < num_dau_muon0; ++j) { - int id = motherMu0->daughter(j)->pdgId(); - cout << " dauther[" << j << "] pdgId = " << id << endl; - if (id == 22) - FSR_mu0 = true; - } - } //end check of gamma - - cout << " muone1" << endl; - cout << " num di daughters = " << num_dau_muon1 << endl; - if (num_dau_muon1 > 1) { - for (int j = 0; j < num_dau_muon1; ++j) { - int id = motherMu1->daughter(j)->pdgId(); - cout << " dauther[" << j << "] pdgId = " << id << endl; - if (id == 22) - FSR_mu1 = true; - } - } //end check of gamma - - if (FSR_mu0 || FSR_mu1) - h_zmass_FSR->Fill(zmass); - else - h_zmass_no_FSR->Fill(zmass); - - if (trig1found) { // check efficiency of muon0 not imposing the trigger on it - cout << "muon 1 is triggered " << endl; - if (FSR_mu0) { - cout << "and muon 0 does FSR" << endl; - h_trackProbe_eta_FSR->Fill(eta0); - h_trackProbe_pt_FSR->Fill(pt0); - h_staProbe_eta_FSR->Fill(eta0); - h_staProbe_pt_FSR->Fill(pt0); - h_staProbe_pt_eta_FSR_->Fill(pt0, eta0); - h_ProbeOk_eta_FSR->Fill(eta0); - h_ProbeOk_pt_FSR->Fill(pt0); - h_ProbeOk_pt_eta_FSR_->Fill(pt0, eta0); - } else { - cout << "and muon 0 doesn't FSR" << endl; - h_trackProbe_eta_no_FSR->Fill(eta0); - h_trackProbe_pt_no_FSR->Fill(pt0); - h_staProbe_eta_no_FSR->Fill(eta0); - h_staProbe_pt_no_FSR->Fill(pt0); - h_staProbe_pt_eta_no_FSR_->Fill(pt0, eta0); - h_ProbeOk_eta_no_FSR->Fill(eta0); - h_ProbeOk_pt_no_FSR->Fill(pt0); - h_ProbeOk_pt_eta_no_FSR_->Fill(pt0, eta0); - } - if (FSR_mu0) { - h_Iso_FSR_->Fill(Tracker_isovalue_mu0); - h_Iso_FSR_3D_->Fill(pt0, eta0, Tracker_isovalue_mu0); - } else { - h_Iso_->Fill(Tracker_isovalue_mu0); - h_Iso_3D_->Fill(pt0, eta0, Tracker_isovalue_mu0); - } - } - if (trig0found) { // check efficiency of muon1 not imposing the trigger on it - cout << "muon 0 is triggered" << endl; - if (FSR_mu1) { - cout << "and muon 1 does FSR" << endl; - h_trackProbe_eta_FSR->Fill(eta1); - h_staProbe_eta_FSR->Fill(eta1); - h_trackProbe_pt_FSR->Fill(pt1); - h_staProbe_pt_FSR->Fill(pt1); - h_ProbeOk_eta_FSR->Fill(eta1); - h_ProbeOk_pt_FSR->Fill(pt1); - h_staProbe_pt_eta_FSR_->Fill(pt1, eta1); - h_ProbeOk_pt_eta_FSR_->Fill(pt1, eta1); - - } else { - cout << "and muon 1 doesn't FSR" << endl; - h_trackProbe_eta_no_FSR->Fill(eta1); - h_staProbe_eta_no_FSR->Fill(eta1); - h_trackProbe_pt_no_FSR->Fill(pt1); - h_staProbe_pt_no_FSR->Fill(pt1); - h_ProbeOk_eta_no_FSR->Fill(eta1); - h_ProbeOk_pt_no_FSR->Fill(pt1); - h_staProbe_pt_eta_no_FSR_->Fill(pt1, eta1); - h_ProbeOk_pt_eta_no_FSR_->Fill(pt1, eta1); - } - if (FSR_mu1) { - h_Iso_FSR_->Fill(Tracker_isovalue_mu1); - h_Iso_FSR_3D_->Fill(pt1, eta1, Tracker_isovalue_mu1); - } else { - h_Iso_->Fill(Tracker_isovalue_mu1); - h_Iso_3D_->Fill(pt1, eta1, Tracker_isovalue_mu1); - } - } - } // end MC match - } //end of cuts - } // end loop on ZMuMu cand - } // end if ZMuMu size > 0 - - // ZMuSa - if (!zMuSa->empty()) { - event.getByToken(zMuSaMatchMapToken_, zMuSaMatchMap); - for (unsigned int i = 0; i < zMuSa->size(); ++i) { //loop on candidates - - const Candidate& zMuSaCand = (*zMuSa)[i]; //the candidate - CandidateBaseRef zMuSaCandRef = zMuSa->refAt(i); - const Candidate* lep0 = zMuSaCand.daughter(0); - const Candidate* lep1 = zMuSaCand.daughter(1); - const CandidateBaseRef& dau0 = lep0->masterClone(); - const CandidateBaseRef& dau1 = lep1->masterClone(); - const pat::Muon& mu0 = dynamic_cast(*dau0); //cast in patMuon - const pat::Muon& mu1 = dynamic_cast(*dau1); - - double zmass = zMuSaCand.mass(); - double pt0 = mu0.pt(); - double pt1 = mu1.pt(); - double eta0 = mu0.eta(); - double eta1 = mu1.eta(); - if (pt0 > 20 && pt1 > 20 && abs(eta0) < 2 && abs(eta1) < 2 && zmass > 20 && zmass < 200) { - GenParticleRef zMuSaMatch = (*zMuSaMatchMap)[zMuSaCandRef]; - if (zMuSaMatch.isNonnull()) { // ZMuSa matched - cout << " Zmusa cuts && matched" << endl; - FSR_mu0 = false; - FSR_mu1 = false; - zmscounter++; - //Isodeposit - const pat::IsoDeposit* mu0TrackIso = mu0.isoDeposit(pat::TrackIso); - const pat::IsoDeposit* mu1TrackIso = mu1.isoDeposit(pat::TrackIso); - Direction mu0Dir = Direction(mu0.eta(), mu0.phi()); - Direction mu1Dir = Direction(mu1.eta(), mu1.phi()); - - reco::IsoDeposit::AbsVetos vetos_mu0; - vetos_mu0.push_back(new ConeVeto(mu0Dir, dRVeto_)); - vetos_mu0.push_back(new ThresholdVeto(ptThreshold_)); - - reco::IsoDeposit::AbsVetos vetos_mu1; - vetos_mu1.push_back(new ConeVeto(mu1Dir, dRVeto_)); - vetos_mu1.push_back(new ThresholdVeto(ptThreshold_)); - - double Tracker_isovalue_mu0 = mu0TrackIso->sumWithin(dRTrk_, vetos_mu0); - double Tracker_isovalue_mu1 = mu1TrackIso->sumWithin(dRTrk_, vetos_mu1); - - // HLT match (check just dau0 the global) - const pat::TriggerObjectStandAloneCollection mu0HLTMatches = mu0.triggerObjectMatchesByPath("HLT_Mu9"); - const pat::TriggerObjectStandAloneCollection mu1HLTMatches = mu1.triggerObjectMatchesByPath("HLT_Mu9"); - trig0found = false; - trig1found = false; - if (!mu0HLTMatches.empty()) - trig0found = true; - if (!mu1HLTMatches.empty()) - trig1found = true; - - //MonteCarlo Study - const reco::GenParticle* muMc0 = mu0.genLepton(); - const reco::GenParticle* muMc1 = mu1.genLepton(); - const Candidate* motherMu0 = muMc0->mother(); - const Candidate* motherMu1 = muMc1->mother(); - int num_dau_muon0 = motherMu0->numberOfDaughters(); - int num_dau_muon1 = motherMu1->numberOfDaughters(); - cout << " muone0" << endl; - cout << " num di daughters = " << num_dau_muon0 << endl; - if (num_dau_muon0 > 1) { - for (int j = 0; j < num_dau_muon0; ++j) { - int id = motherMu0->daughter(j)->pdgId(); - cout << " dauther[" << j << "] pdgId = " << id << endl; - if (id == 22) - FSR_mu0 = true; - } - } //end check of gamma - - cout << " muone1" << endl; - cout << " num di daughters = " << num_dau_muon1 << endl; - if (num_dau_muon1 > 1) { - for (int j = 0; j < num_dau_muon1; ++j) { - int id = motherMu1->daughter(j)->pdgId(); - cout << " dauther[" << j << "] pdgId = " << id << endl; - if (id == 22) - FSR_mu1 = true; - } - } //end check of gamma - if (FSR_mu0 || FSR_mu1) - h_zMuSamass_FSR->Fill(zmass); - else - h_zMuSamass_no_FSR->Fill(zmass); - if (lep0->isGlobalMuon() && trig0found) { - if (FSR_mu1) { - h_staProbe_eta_FSR->Fill(eta1); - h_staProbe_pt_FSR->Fill(pt1); - h_staProbe_pt_eta_FSR_->Fill(pt1, eta1); - - } else { - h_staProbe_eta_no_FSR->Fill(eta1); - h_staProbe_pt_no_FSR->Fill(pt1); - h_staProbe_pt_eta_no_FSR_->Fill(pt1, eta1); - } - if (FSR_mu1) { - h_Iso_FSR_->Fill(Tracker_isovalue_mu1); - h_Iso_FSR_3D_->Fill(pt1, eta1, Tracker_isovalue_mu1); - } else { - h_Iso_->Fill(Tracker_isovalue_mu1); - h_Iso_3D_->Fill(pt1, eta1, Tracker_isovalue_mu1); - } - } - if (lep1->isGlobalMuon() && trig1found) { - if (FSR_mu0) { - h_staProbe_eta_FSR->Fill(eta0); - h_staProbe_pt_FSR->Fill(pt0); - h_staProbe_pt_eta_FSR_->Fill(pt0, eta0); - - } else { - h_staProbe_eta_no_FSR->Fill(eta0); - h_staProbe_pt_no_FSR->Fill(pt0); - h_staProbe_pt_eta_FSR_->Fill(pt0, eta0); - } - if (FSR_mu0) { - h_Iso_FSR_->Fill(Tracker_isovalue_mu0); - h_Iso_FSR_3D_->Fill(pt0, eta0, Tracker_isovalue_mu0); - } else { - h_Iso_->Fill(Tracker_isovalue_mu0); - h_Iso_3D_->Fill(pt0, eta0, Tracker_isovalue_mu0); - } - } - } // end MC match - } //end of cuts - } // end loop on ZMuSa cand - } // end if ZMuSa size > 0 - - //ZMuTk - if (!zMuTk->empty()) { - event.getByToken(zMuTkMatchMapToken_, zMuTkMatchMap); - for (unsigned int i = 0; i < zMuTk->size(); ++i) { //loop on candidates - const Candidate& zMuTkCand = (*zMuTk)[i]; //the candidate - CandidateBaseRef zMuTkCandRef = zMuTk->refAt(i); - CandidateBaseRef dau0 = zMuTkCand.daughter(0)->masterClone(); - CandidateBaseRef dau1 = zMuTkCand.daughter(1)->masterClone(); - const pat::Muon& mu0 = dynamic_cast(*dau0); //cast in patMuon - const pat::GenericParticle& mu1 = dynamic_cast(*dau1); - - double zmass = zMuTkCand.mass(); - double pt0 = mu0.pt(); - double pt1 = mu1.pt(); - double eta0 = mu0.eta(); - double eta1 = mu1.eta(); - if (pt0 > 20 && pt1 > 20 && abs(eta0) < 2 && abs(eta1) < 2 && zmass > 20 && zmass < 200) { //kinematical cuts - GenParticleRef zMuTkMatch = (*zMuTkMatchMap)[zMuTkCandRef]; - if (zMuTkMatch.isNonnull()) { // ZMuTk matched - FSR_mu = false; - FSR_tk = false; - cout << " ZmuTk cuts && matched" << endl; - zmtcounter++; - //Isodeposit - const pat::IsoDeposit* muTrackIso = mu0.isoDeposit(pat::TrackIso); - const pat::IsoDeposit* tkTrackIso = mu1.isoDeposit(pat::TrackIso); - Direction muDir = Direction(mu0.eta(), mu0.phi()); - Direction tkDir = Direction(mu1.eta(), mu1.phi()); - - IsoDeposit::AbsVetos vetos_mu; - vetos_mu.push_back(new ConeVeto(muDir, dRVeto_)); - vetos_mu.push_back(new ThresholdVeto(ptThreshold_)); - - reco::IsoDeposit::AbsVetos vetos_tk; - vetos_tk.push_back(new ConeVeto(tkDir, dRVeto_)); - vetos_tk.push_back(new ThresholdVeto(ptThreshold_)); - - double Tracker_isovalue_mu = muTrackIso->sumWithin(dRTrk_, vetos_mu); - double Tracker_isovalue_tk = tkTrackIso->sumWithin(dRTrk_, vetos_tk); - - //MonteCarlo Study - const reco::GenParticle* muMc0 = mu0.genLepton(); - const reco::GenParticle* muMc1 = mu1.genParticle(); - const Candidate* motherMu0 = muMc0->mother(); - const Candidate* motherMu1 = muMc1->mother(); - int num_dau_muon0 = motherMu0->numberOfDaughters(); - int num_dau_muon1 = motherMu1->numberOfDaughters(); - cout << "numero di figli muone0 = " << num_dau_muon0 << endl; - cout << "numero di figli muone1 = " << num_dau_muon1 << endl; - - cout << " muon" << endl; - cout << " num di daughters = " << num_dau_muon0 << endl; - if (num_dau_muon0 > 1) { - for (int j = 0; j < num_dau_muon0; ++j) { - int id = motherMu0->daughter(j)->pdgId(); - cout << " dau[" << j << "] pdg ID = " << id << endl; - if (id == 22) { - FSR_mu = true; - } - } - } //end check of gamma - else - cout << " dau[0] pdg ID = " << motherMu0->daughter(0)->pdgId() << endl; - cout << " traccia" << endl; - cout << " num di daughters = " << num_dau_muon1 << endl; - if (num_dau_muon1 > 1) { - for (int j = 0; j < num_dau_muon1; ++j) { - int id = motherMu1->daughter(j)->pdgId(); - cout << " dau[" << j << "] pdg ID = " << id << endl; - if (id == 22) { - FSR_tk = true; - } - } - } //end check of gamma - else - cout << " dau[0] pdg ID = " << motherMu1->daughter(0)->pdgId() << endl; - cout << "Mu Isolation = " << Tracker_isovalue_mu << endl; - cout << "Track Isolation = " << Tracker_isovalue_tk << endl; - if (FSR_mu) { - h_Iso_FSR_->Fill(Tracker_isovalue_mu); - h_Iso_FSR_3D_->Fill(pt0, eta0, Tracker_isovalue_mu); - } else { - h_Iso_->Fill(Tracker_isovalue_mu); - h_Iso_3D_->Fill(pt0, eta0, Tracker_isovalue_mu); - } - if (FSR_tk) { - h_Iso_FSR_->Fill(Tracker_isovalue_tk); - h_Iso_FSR_3D_->Fill(pt1, eta1, Tracker_isovalue_tk); - h_trackProbe_eta_FSR->Fill(eta1); - h_trackProbe_pt_FSR->Fill(pt1); - } else { - h_Iso_->Fill(Tracker_isovalue_tk); - h_Iso_3D_->Fill(pt1, eta1, Tracker_isovalue_tk); - h_trackProbe_eta_no_FSR->Fill(eta1); - h_trackProbe_pt_no_FSR->Fill(pt1); - } - } // end MC match - } //end Kine-cuts - } // end loop on ZMuTk cand - } // end if ZMuTk size > 0 -} // end analyze - -void ZMuMu_Radiative_analyzer::endJob() { - cout << " ============= Summary ==========" << endl; - cout << " Numero di eventi " << evntcounter << endl; - cout << " 1)Numero di ZMuMu matched dopo i tagli cinematici = " << zmmcounter << endl; - cout << " 2)Numero di ZMuSa matched dopo i tagli cinematici = " << zmscounter << endl; - cout << " 3)Numero di ZMuTk matched dopo i tagli cinematici = " << zmtcounter << endl; - double n1 = h_Iso_FSR_->Integral(); - double icut1 = h_Iso_FSR_->Integral(0, 15); - double eff_iso_FSR = (double)icut1 / (double)n1; - double err_iso_FSR = sqrt(eff_iso_FSR * (1 - eff_iso_FSR) / n1); - double n2 = h_Iso_->Integral(); - double icut2 = h_Iso_->Integral(0, 15); - double eff_iso = (double)icut2 / (double)n2; - double err_iso = sqrt(eff_iso * (1 - eff_iso) / n2); - cout << " ============= Isolation Efficiecy ==========" << endl; - cout << "Isolation Efficiency = " << eff_iso << " +/- " << err_iso << endl; - cout << "Isolation Efficiency with FSR = " << eff_iso_FSR << " +/- " << err_iso_FSR << endl; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuMu_Radiative_analyzer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMu_vtxAnalyzer.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMu_vtxAnalyzer.cc deleted file mode 100644 index 57a5ed0704798..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuMu_vtxAnalyzer.cc +++ /dev/null @@ -1,638 +0,0 @@ -/* \class ZMuMu_vtxAnalyzer - * - * author: Davide Piccolo - * - * ZMuMu Vtx analyzer: - * check muon vtx distributions, - * - */ - -#include "DataFormats/Common/interface/AssociationVector.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Candidate/interface/OverlapChecker.h" -#include "DataFormats/Math/interface/deltaR.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -#include "DataFormats/PatCandidates/interface/TriggerObjectStandAlone.h" -#include "DataFormats/Common/interface/AssociationVector.h" -#include "DataFormats/PatCandidates/interface/PATObject.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/Candidate/interface/CandAssociation.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include - -using namespace std; -using namespace reco; -using namespace edm; - -typedef edm::ValueMap IsolationCollection; - -class ZMuMu_vtxAnalyzer : public edm::EDAnalyzer { -public: - ZMuMu_vtxAnalyzer(const edm::ParameterSet &pset); - -private: - void analyze(const edm::Event &event, const edm::EventSetup &setup) override; - bool check_ifZmumu(const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - float getParticlePt(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - float getParticleEta(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - float getParticlePhi(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2); - Particle::LorentzVector getParticleP4(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2); - void endJob() override; - - EDGetTokenT zMuMuToken_; - EDGetTokenT zMuMuMatchMapToken_; - EDGetTokenT zMuStandAloneToken_; - EDGetTokenT zMuStandAloneMatchMapToken_; - EDGetTokenT zMuTrackToken_; - EDGetTokenT zMuTrackMatchMapToken_; - EDGetTokenT muonsToken_; - EDGetTokenT tracksToken_; - EDGetTokenT genParticlesToken_; - EDGetTokenT primaryVerticesToken_; - - bool bothMuons_; - - double etamax_, ptmin_, massMin_, massMax_, isoMax_; - - reco::CandidateBaseRef globalMuonCandRef_, trackMuonCandRef_, standAloneMuonCandRef_; - OverlapChecker overlap_; - - // general histograms - - // vertex studies - // ... zmumu No cuts - TH1D *h_muon_vz, *h_dimuon_vz, *h_muon_d0signed; - TH1D *h_muon_vz_respectToPV, *h_muon_d0signed_respectToPV; - // ... cynematic cuts zmumu - TH1D *h_zmumuSele_muon_vz, *h_zmumuSele_dimuon_vz, *h_zmumuSele_muon_d0signed; - TH1D *h_zmumuSele_muon_vz_respectToPV, *h_zmumuSele_muon_d0signed_respectToPV; - // ... cynematic cuts zmumuNotIso - TH1D *h_zmumuNotIsoSele_dimuon_vz; - TH1D *h_zmumuNotIsoSele_muonIso_vz, *h_zmumuNotIsoSele_muonIso_d0signed; - TH1D *h_zmumuNotIsoSele_muonIso_vz_respectToPV, *h_zmumuNotIsoSele_muonIso_d0signed_respectToPV; - TH1D *h_zmumuNotIsoSele_muonNotIso_vz, *h_zmumuNotIsoSele_muonNotIso_d0signed; - TH1D *h_zmumuNotIsoSele_muonNotIso_vz_respectToPV, *h_zmumuNotIsoSele_muonNotIso_d0signed_respectToPV; - // ... cynematic cuts zmutrack - TH1D *h_zmutrackSele_muon_vz, *h_zmutrackSele_muon_d0signed; - TH1D *h_zmutrackSele_muon_vz_respectToPV, *h_zmutrackSele_muon_d0signed_respectToPV; - TH1D *h_zmutrackSele_track_vz, *h_zmutrackSele_track_d0signed; - TH1D *h_zmutrackSele_track_vz_respectToPV, *h_zmutrackSele_track_d0signed_respectToPV; - // ... cynematic cuts zmusta - TH1D *h_zmustaSele_muon_vz, *h_zmustaSele_muon_d0signed; - TH1D *h_zmustaSele_muon_vz_respectToPV, *h_zmustaSele_muon_d0signed_respectToPV; - TH1D *h_zmustaSele_sta_vz, *h_zmustaSele_sta_d0signed; - TH1D *h_zmustaSele_sta_vz_respectToPV, *h_zmustaSele_sta_d0signed_respectToPV; - - // global counters -}; - -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Math/interface/LorentzVector.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include -#include -#include - -ZMuMu_vtxAnalyzer::ZMuMu_vtxAnalyzer(const ParameterSet &pset) - : zMuMuToken_(consumes(pset.getParameter("zMuMu"))), - zMuMuMatchMapToken_(mayConsume(pset.getParameter("zMuMuMatchMap"))), - zMuStandAloneToken_(consumes(pset.getParameter("zMuStandAlone"))), - zMuStandAloneMatchMapToken_(mayConsume(pset.getParameter("zMuStandAloneMatchMap"))), - zMuTrackToken_(consumes(pset.getParameter("zMuTrack"))), - zMuTrackMatchMapToken_(mayConsume(pset.getParameter("zMuTrackMatchMap"))), - muonsToken_(consumes(pset.getParameter("muons"))), - tracksToken_(consumes(pset.getParameter("tracks"))), - genParticlesToken_(consumes(pset.getParameter("genParticles"))), - primaryVerticesToken_(consumes(pset.getParameter("primaryVertices"))), - - bothMuons_(pset.getParameter("bothMuons")), - - etamax_(pset.getUntrackedParameter("etamax")), - ptmin_(pset.getUntrackedParameter("ptmin")), - massMin_(pset.getUntrackedParameter("zMassMin")), - massMax_(pset.getUntrackedParameter("zMassMax")), - isoMax_(pset.getUntrackedParameter("isomax")) { - Service fs; - - // general histograms - - // vertex histograms - // ... zmumu no Cuts - h_muon_vz = fs->make("muonVz", "z vertex of muons", 50, -20., 20.); - h_muon_d0signed = fs->make("muonD0signed", "d0 vertex of muons", 50, -.1, .1); - h_dimuon_vz = fs->make("dimuonVz", "z vertex of dimuon", 50, -20., 20.); - h_muon_vz_respectToPV = - fs->make("muonVz_respectToPV", "z vertex of muons respect to PrimaryVertex", 50, -.05, .05); - h_muon_d0signed_respectToPV = - fs->make("muonD0signed_respectToPV", "d0 vertex of muons respect to PrimaryVertex", 50, -.05, .05); - // ... zmumu cynematic Cuts - h_zmumuSele_muon_vz = fs->make("zmumuSele_muonVz", "z vertex of muons (zmumu sele)", 50, -20., 20.); - h_zmumuSele_muon_d0signed = fs->make("zmumuSele_muonD0signed", "d0 vertex of muons (zmumu sele)", 50, -.1, .1); - h_zmumuSele_dimuon_vz = fs->make("zmumuSele_dimuonVz", "z vertex of dimuon (zmumu sele)", 50, -20., 20.); - h_zmumuSele_muon_vz_respectToPV = fs->make( - "zmumuSele_muonVz_respectToPV", "z vertex of muons respect to PrimaryVertex (zmumu sele)", 50, -.05, .05); - h_zmumuSele_muon_d0signed_respectToPV = fs->make( - "zmumuSele_muonD0signed_respectToPV", "d0 vertex of muons respect to PrimaryVertex (zmumu sele)", 50, -.05, .05); - // ... zmumuNotIso cynematic Cuts - h_zmumuNotIsoSele_dimuon_vz = - fs->make("zmumuNotIsoSele_dimuonVz", "z vertex of dimuon (zmumuNotIso sele)", 50, -20., 20.); - h_zmumuNotIsoSele_muonIso_vz = - fs->make("zmumuNotIsoSele_muonIsoVz", "z vertex of muons (zmumuNotIso sele muon Iso)", 50, -20., 20.); - h_zmumuNotIsoSele_muonIso_d0signed = - fs->make("zmumuNotIsoSele_muonIsoD0signed", "d0 vertex of muons (zmumuNotIso sele muon Iso)", 50, -.1, .1); - h_zmumuNotIsoSele_muonIso_vz_respectToPV = - fs->make("zmumuNotIsoSele_muonIsoVz_respectToPV", - "z vertex of muons respect to PrimaryVertex (zmumuNotIso sele muon Iso)", - 50, - -.05, - .05); - h_zmumuNotIsoSele_muonIso_d0signed_respectToPV = - fs->make("zmumuNotIsoSele_muonIsoD0signed_respectToPV", - "d0 vertex of muons respect to PrimaryVertex (zmumuNotIso sele muon Iso)", - 50, - -.05, - .05); - h_zmumuNotIsoSele_muonNotIso_vz = fs->make( - "zmumuNotIsoSele_muonNotIsoVz", "z vertex of muons (zmumuNotIso sele muon Not Iso)", 50, -20., 20.); - h_zmumuNotIsoSele_muonNotIso_d0signed = fs->make( - "zmumuNotIsoSele_muonNotIsoD0signed", "d0 vertex of muons (zmumuNotIso sele muon Not Iso)", 50, -.1, .1); - h_zmumuNotIsoSele_muonNotIso_vz_respectToPV = - fs->make("zmumuNotIsoSele_muonNotIsoVz_respectToPV", - "z vertex of muons respect to PrimaryVertex (zmumuNotIso sele muon Not Iso)", - 50, - -.05, - .05); - h_zmumuNotIsoSele_muonNotIso_d0signed_respectToPV = - fs->make("zmumuNotIsoSele_muonNotIsoD0signed_respectToPV", - "d0 vertex of muons respect to PrimaryVertex (zmumuNotIso sele muon Not Iso)", - 50, - -.05, - .05); - // ... zmutrack cynematic Cuts - h_zmutrackSele_muon_vz = fs->make("zmutrackSele_muonVz", "z vertex of muon (zmutrack sele)", 50, -20., 20.); - h_zmutrackSele_muon_d0signed = - fs->make("zmutrackSele_muonD0signed", "d0 vertex of muon (zmutrack sele)", 50, -.1, .1); - h_zmutrackSele_muon_vz_respectToPV = fs->make( - "zmutrackSele_muonVz_respectToPV", "z vertex of muon respect to PV (zmutrack sele)", 50, -.05, .05); - h_zmutrackSele_muon_d0signed_respectToPV = fs->make( - "zmutrackSele_muonD0signed_respectToPV", "d0 vertex of muon respect to PV (zmutrack sele)", 50, -.1, .1); - h_zmutrackSele_track_vz = fs->make("zmutrackSele_trackVz", "z vertex of track (zmutrack sele)", 50, -20., 20.); - h_zmutrackSele_track_d0signed = - fs->make("zmutrackSele_trackD0signed", "d0 vertex of track (zmutrack sele)", 50, -.1, .1); - h_zmutrackSele_track_vz_respectToPV = fs->make( - "zmutrackSele_trackVz_respectToPV", "z vertex of track respect to PV (zmutrack sele)", 50, -.05, .05); - h_zmutrackSele_track_d0signed_respectToPV = fs->make( - "zmutrackSele_trackD0signed_respectToPV", "d0 vertex of track respect to PV (zmutrack sele)", 50, -.1, .1); - // ... zmusta cynematic Cuts - h_zmustaSele_muon_vz = fs->make("zmustaSele_muonVz", "z vertex of muon (zmusta sele)", 50, -20., 20.); - h_zmustaSele_muon_d0signed = - fs->make("zmustaSele_muonD0signed", "d0 vertex of muon (zmusta sele)", 50, -.1, .1); - h_zmustaSele_muon_vz_respectToPV = - fs->make("zmustaSele_muonVz_respectToPV", "z vertex of muon respect to PV (zmusta sele)", 50, -.05, .05); - h_zmustaSele_muon_d0signed_respectToPV = fs->make( - "zmustaSele_muonD0signed_respectToPV", "d0 vertex of muon respect to PV (zmusta sele)", 50, -.1, .1); - h_zmustaSele_sta_vz = fs->make("zmustaSele_staVz", "z vertex of sta (zmusta sele)", 50, -20., 20.); - h_zmustaSele_sta_d0signed = fs->make("zmustaSele_staD0signed", "d0 vertex of sta (zmusta sele)", 50, -.1, .1); - h_zmustaSele_sta_vz_respectToPV = - fs->make("zmustaSele_staVz_respectToPV", "z vertex of sta respect to PV (zmusta sele)", 50, -.05, .05); - h_zmustaSele_sta_d0signed_respectToPV = - fs->make("zmustaSele_staD0signed_respectToPV", "d0 vertex of sta respect to PV (zmusta sele)", 50, -.1, .1); -} - -void ZMuMu_vtxAnalyzer::analyze(const Event &event, const EventSetup &setup) { - Handle zMuMu; - Handle zMuMuMatchMap; //Map of Z made by Mu global + Mu global - Handle zMuStandAlone; - Handle zMuStandAloneMatchMap; //Map of Z made by Mu + StandAlone - Handle zMuTrack; - Handle zMuTrackMatchMap; //Map of Z made by Mu + Track - Handle muons; //Collection of Muons - Handle tracks; //Collection of Tracks - - Handle genParticles; // Collection of Generatd Particles - Handle primaryVertices; // Collection of primary Vertices - - event.getByToken(zMuMuToken_, zMuMu); - event.getByToken(zMuStandAloneToken_, zMuStandAlone); - event.getByToken(zMuTrackToken_, zMuTrack); - event.getByToken(genParticlesToken_, genParticles); - event.getByToken(primaryVerticesToken_, primaryVertices); - event.getByToken(muonsToken_, muons); - event.getByToken(tracksToken_, tracks); - - /* - cout << "********* zMuMu size : " << zMuMu->size() << endl; - cout << "********* zMuStandAlone size : " << zMuStandAlone->size() << endl; - cout << "********* zMuTrack size : " << zMuTrack->size() << endl; - cout << "********* muons size : " << muons->size() << endl; - cout << "********* tracks size : " << tracks->size() << endl; - cout << "********* vertices size : " << primaryVertices->size() << endl; - */ - - // std::cout<<"Run-> "< "<empty()) { - event.getByToken(zMuMuMatchMapToken_, zMuMuMatchMap); - for (unsigned int i = 0; i < zMuMu->size(); ++i) { //loop on candidates - const Candidate &zMuMuCand = (*zMuMu)[i]; //the candidate - CandidateBaseRef zMuMuCandRef = zMuMu->refAt(i); - - const Candidate *lep0 = zMuMuCand.daughter(0); - const Candidate *lep1 = zMuMuCand.daughter(1); - const pat::Muon &muonDau0 = dynamic_cast(*lep0->masterClone()); - double trkiso0 = muonDau0.trackIso(); - const pat::Muon &muonDau1 = dynamic_cast(*lep1->masterClone()); - double trkiso1 = muonDau1.trackIso(); - - // vertex - h_muon_vz->Fill(muonDau0.vz()); - h_muon_vz->Fill(muonDau1.vz()); - h_dimuon_vz->Fill((muonDau0.vz() + muonDau1.vz()) / 2.); - - TrackRef mu0TrkRef = muonDau0.track(); - float d0signed_mu0 = (*mu0TrkRef).dxy(); - float d0signed_mu0_respectToPV = (*mu0TrkRef).dxy(primaryVertices->begin()->position()); - float vz_mu0_respectToPV = (*mu0TrkRef).dz(primaryVertices->begin()->position()); - - TrackRef mu1TrkRef = muonDau1.track(); - float d0signed_mu1 = (*mu1TrkRef).dxy(); - float d0signed_mu1_respectToPV = (*mu1TrkRef).dxy(primaryVertices->begin()->position()); - float vz_mu1_respectToPV = (*mu1TrkRef).dz(primaryVertices->begin()->position()); - h_muon_d0signed->Fill(d0signed_mu0); - h_muon_d0signed->Fill(d0signed_mu1); - h_muon_d0signed_respectToPV->Fill(d0signed_mu0_respectToPV); - h_muon_d0signed_respectToPV->Fill(d0signed_mu1_respectToPV); - h_muon_vz_respectToPV->Fill(vz_mu0_respectToPV); - h_muon_vz_respectToPV->Fill(vz_mu1_respectToPV); - - // eta , pt distributions - double pt0 = zMuMuCand.daughter(0)->pt(); - double pt1 = zMuMuCand.daughter(1)->pt(); - double eta0 = zMuMuCand.daughter(0)->eta(); - double eta1 = zMuMuCand.daughter(1)->eta(); - double mass = zMuMuCand.mass(); - - // HLT match - const pat::TriggerObjectStandAloneCollection mu0HLTMatches = muonDau0.triggerObjectMatchesByPath("HLT_Mu9"); - const pat::TriggerObjectStandAloneCollection mu1HLTMatches = muonDau1.triggerObjectMatchesByPath("HLT_Mu9"); - - bool trig0found = false; - bool trig1found = false; - if (!mu0HLTMatches.empty()) - trig0found = true; - if (!mu1HLTMatches.empty()) - trig1found = true; - - // cynematical selection - if ((trig0found || trig1found) && pt0 > ptmin_ && pt1 > ptmin_ && abs(eta0) < etamax_ && abs(eta1) < etamax_ && - mass > massMin_) { - if (trkiso0 < isoMax_ && trkiso1 < isoMax_) { // zmumu both isolated - h_zmumuSele_muon_vz->Fill(muonDau0.vz()); - h_zmumuSele_muon_vz->Fill(muonDau1.vz()); - h_zmumuSele_dimuon_vz->Fill((muonDau0.vz() + muonDau1.vz()) / 2.); - h_zmumuSele_muon_d0signed->Fill(d0signed_mu0); - h_zmumuSele_muon_d0signed->Fill(d0signed_mu1); - h_zmumuSele_muon_d0signed_respectToPV->Fill(d0signed_mu0_respectToPV); - h_zmumuSele_muon_d0signed_respectToPV->Fill(d0signed_mu1_respectToPV); - h_zmumuSele_muon_vz_respectToPV->Fill(vz_mu0_respectToPV); - h_zmumuSele_muon_vz_respectToPV->Fill(vz_mu1_respectToPV); - } - if (trkiso0 >= isoMax_ && trkiso1 < isoMax_) { // zmumu just muon1 isolated - h_zmumuNotIsoSele_muonNotIso_vz->Fill(muonDau0.vz()); - h_zmumuNotIsoSele_muonIso_vz->Fill(muonDau1.vz()); - h_zmumuNotIsoSele_dimuon_vz->Fill((muonDau0.vz() + muonDau1.vz()) / 2.); - h_zmumuNotIsoSele_muonNotIso_d0signed->Fill(d0signed_mu0); - h_zmumuNotIsoSele_muonIso_d0signed->Fill(d0signed_mu1); - h_zmumuNotIsoSele_muonNotIso_d0signed_respectToPV->Fill(d0signed_mu0_respectToPV); - h_zmumuNotIsoSele_muonIso_d0signed_respectToPV->Fill(d0signed_mu1_respectToPV); - h_zmumuNotIsoSele_muonNotIso_vz_respectToPV->Fill(vz_mu0_respectToPV); - h_zmumuNotIsoSele_muonIso_vz_respectToPV->Fill(vz_mu1_respectToPV); - } - if (trkiso0 < isoMax_ && trkiso1 >= isoMax_) { // zmumu just muon0 isolated - h_zmumuNotIsoSele_muonNotIso_vz->Fill(muonDau1.vz()); - h_zmumuNotIsoSele_muonIso_vz->Fill(muonDau0.vz()); - h_zmumuNotIsoSele_dimuon_vz->Fill((muonDau1.vz() + muonDau1.vz()) / 2.); - h_zmumuNotIsoSele_muonNotIso_d0signed->Fill(d0signed_mu1); - h_zmumuNotIsoSele_muonIso_d0signed->Fill(d0signed_mu0); - h_zmumuNotIsoSele_muonNotIso_d0signed_respectToPV->Fill(d0signed_mu1_respectToPV); - h_zmumuNotIsoSele_muonIso_d0signed_respectToPV->Fill(d0signed_mu0_respectToPV); - h_zmumuNotIsoSele_muonNotIso_vz_respectToPV->Fill(vz_mu1_respectToPV); - h_zmumuNotIsoSele_muonIso_vz_respectToPV->Fill(vz_mu0_respectToPV); - } - } - } // end loop on ZMuMu cand - } // end if ZMuMu size > 0 - - // loop on ZMuSta - bool zMuSta_found = false; - if (!zMuMu_found && !zMuStandAlone->empty()) { - event.getByToken(zMuStandAloneMatchMapToken_, zMuStandAloneMatchMap); - for (unsigned int i = 0; i < zMuStandAlone->size(); ++i) { //loop on candidates - const Candidate &zMuStandAloneCand = (*zMuStandAlone)[i]; //the candidate - CandidateBaseRef zMuStandAloneCandRef = zMuStandAlone->refAt(i); - GenParticleRef zMuStandAloneMatch = (*zMuStandAloneMatchMap)[zMuStandAloneCandRef]; - - const Candidate *lep0 = zMuStandAloneCand.daughter(0); - const Candidate *lep1 = zMuStandAloneCand.daughter(1); - const pat::Muon &muonDau0 = dynamic_cast(*lep0->masterClone()); - double trkiso0 = muonDau0.trackIso(); - const pat::Muon &muonDau1 = dynamic_cast(*lep1->masterClone()); - double trkiso1 = muonDau1.trackIso(); - - // vertex - - TrackRef mu0TrkRef = muonDau0.track(); - float d0signed_mu0 = (*mu0TrkRef).dxy(); - float d0signed_mu0_respectToPV = (*mu0TrkRef).dxy(primaryVertices->begin()->position()); - float vz_mu0_respectToPV = (*mu0TrkRef).dz(primaryVertices->begin()->position()); - - TrackRef mu1TrkRef = muonDau1.track(); - float d0signed_mu1 = (*mu1TrkRef).dxy(); - float d0signed_mu1_respectToPV = (*mu1TrkRef).dxy(primaryVertices->begin()->position()); - float vz_mu1_respectToPV = (*mu1TrkRef).dz(primaryVertices->begin()->position()); - - double pt0 = zMuStandAloneCand.daughter(0)->pt(); - double pt1 = zMuStandAloneCand.daughter(1)->pt(); - double eta0 = zMuStandAloneCand.daughter(0)->eta(); - double eta1 = zMuStandAloneCand.daughter(1)->eta(); - double mass = zMuStandAloneCand.mass(); - - // HLT match - const pat::TriggerObjectStandAloneCollection mu0HLTMatches = muonDau0.triggerObjectMatchesByPath("HLT_Mu9"); - const pat::TriggerObjectStandAloneCollection mu1HLTMatches = muonDau1.triggerObjectMatchesByPath("HLT_Mu9"); - - bool trig0found = false; - bool trig1found = false; - if (!mu0HLTMatches.empty()) - trig0found = true; - if (!mu1HLTMatches.empty()) - trig1found = true; - - // check the global muon ... trigger is required just on global muon - bool trigfound = false; - if (muonDau0.isGlobalMuon()) - trigfound = trig0found; - if (muonDau1.isGlobalMuon()) - trigfound = trig1found; - - // cynematical selection - if (trigfound && pt0 > ptmin_ && pt1 > ptmin_ && abs(eta0) < etamax_ && abs(eta1) < etamax_ && mass > massMin_ && - trkiso0 < isoMax_ && trkiso1 < isoMax_) { - zMuSta_found = true; - h_zmustaSele_muon_vz->Fill(muonDau0.vz(), 1.); // muon vz - h_zmustaSele_sta_vz->Fill(muonDau1.vz(), 1.); // sta vz - h_zmustaSele_muon_d0signed->Fill(d0signed_mu0, 1.); // muon d0 - h_zmustaSele_sta_d0signed->Fill(d0signed_mu1, 1.); // sta d0 - h_zmustaSele_muon_d0signed_respectToPV->Fill(d0signed_mu0_respectToPV, 1.); // muon d0 respect PV - h_zmustaSele_sta_d0signed_respectToPV->Fill(d0signed_mu1_respectToPV, 1.); // sta d0 respect PV - h_zmustaSele_muon_vz_respectToPV->Fill(vz_mu0_respectToPV, 1.); // muon vz respect PV - h_zmustaSele_sta_vz_respectToPV->Fill(vz_mu1_respectToPV, 1.); // sta vz respect PV - } - - } // end loop on ZMuStandAlone cand - } // end if ZMuStandAlone size > 0 - - // loop on ZMuTrack - if (!zMuMu_found && !zMuSta_found && !zMuTrack->empty()) { - event.getByToken(zMuTrackMatchMapToken_, zMuTrackMatchMap); - for (unsigned int i = 0; i < zMuTrack->size(); ++i) { //loop on candidates - const Candidate &zMuTrackCand = (*zMuTrack)[i]; //the candidate - CandidateBaseRef zMuTrackCandRef = zMuTrack->refAt(i); - const Candidate *lep0 = zMuTrackCand.daughter(0); - const Candidate *lep1 = zMuTrackCand.daughter(1); - const pat::Muon &muonDau0 = dynamic_cast(*lep0->masterClone()); - double trkiso0 = muonDau0.trackIso(); - const pat::GenericParticle &trackDau1 = dynamic_cast(*lep1->masterClone()); - double trkiso1 = trackDau1.trackIso(); - - // vertex - - TrackRef mu0TrkRef = muonDau0.track(); - float d0signed_mu0 = (*mu0TrkRef).dxy(); - float d0signed_mu0_respectToPV = (*mu0TrkRef).dxy(primaryVertices->begin()->position()); - float vz_mu0_respectToPV = (*mu0TrkRef).dz(primaryVertices->begin()->position()); - - TrackRef mu1TrkRef = trackDau1.track(); - float d0signed_mu1 = (*mu1TrkRef).dxy(); - float d0signed_mu1_respectToPV = (*mu1TrkRef).dxy(primaryVertices->begin()->position()); - float vz_mu1_respectToPV = (*mu1TrkRef).dz(primaryVertices->begin()->position()); - - // cynematical parameters - - double pt0 = zMuTrackCand.daughter(0)->pt(); - double pt1 = zMuTrackCand.daughter(1)->pt(); - double eta0 = zMuTrackCand.daughter(0)->eta(); - double eta1 = zMuTrackCand.daughter(1)->eta(); - double mass = zMuTrackCand.mass(); - - // HLT match (check just dau0 the global) - const pat::TriggerObjectStandAloneCollection mu0HLTMatches = muonDau0.triggerObjectMatchesByPath("HLT_Mu9"); - - bool trig0found = false; - if (!mu0HLTMatches.empty()) - trig0found = true; - - // cynematical selection - if (trig0found && pt0 > ptmin_ && pt1 > ptmin_ && abs(eta0) < etamax_ && abs(eta1) < etamax_ && mass > massMin_ && - trkiso0 < isoMax_ && trkiso1 < isoMax_) { - h_zmutrackSele_muon_vz->Fill(muonDau0.vz(), 1.); // muon vz - h_zmutrackSele_track_vz->Fill(trackDau1.vz(), 1.); // track vz - h_zmutrackSele_muon_d0signed->Fill(d0signed_mu0, 1.); // muon d0 - h_zmutrackSele_track_d0signed->Fill(d0signed_mu1, 1.); // track d0 - h_zmutrackSele_muon_d0signed_respectToPV->Fill(d0signed_mu0_respectToPV, 1.); // muon d0 respect PV - h_zmutrackSele_track_d0signed_respectToPV->Fill(d0signed_mu1_respectToPV, 1.); // track d0 respect PV - h_zmutrackSele_muon_vz_respectToPV->Fill(vz_mu0_respectToPV, 1.); // muon vz respect PV - h_zmutrackSele_track_vz_respectToPV->Fill(vz_mu1_respectToPV, 1.); // track vz respect PV - } - - } // end loop on ZMuTrack cand - } // end if ZMuTrack size > 0 - -} // end analyze - -bool ZMuMu_vtxAnalyzer::check_ifZmumu(const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - bool muplusFound = false; - bool muminusFound = false; - bool ZFound = false; - if (partId0 == 13 || partId1 == 13 || partId2 == 13) - muminusFound = true; - if (partId0 == -13 || partId1 == -13 || partId2 == -13) - muplusFound = true; - if (partId0 == 23 || partId1 == 23 || partId2 == 23) - ZFound = true; - return (muplusFound && muminusFound && ZFound); -} - -float ZMuMu_vtxAnalyzer::getParticlePt(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - float ptpart = 0.; - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - ptpart = dauMuGen->pt(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - ptpart = dauMuGen->pt(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - ptpart = dauMuGen->pt(); - } - } - } - return ptpart; -} - -float ZMuMu_vtxAnalyzer::getParticleEta(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - float etapart = 0.; - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - etapart = dauMuGen->eta(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - etapart = dauMuGen->eta(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - etapart = dauMuGen->eta(); - } - } - } - return etapart; -} - -float ZMuMu_vtxAnalyzer::getParticlePhi(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - float phipart = 0.; - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - phipart = dauMuGen->phi(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - phipart = dauMuGen->phi(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - phipart = dauMuGen->phi(); - } - } - } - return phipart; -} - -Particle::LorentzVector ZMuMu_vtxAnalyzer::getParticleP4(const int ipart, - const Candidate *dauGen0, - const Candidate *dauGen1, - const Candidate *dauGen2) { - int partId0 = dauGen0->pdgId(); - int partId1 = dauGen1->pdgId(); - int partId2 = dauGen2->pdgId(); - Particle::LorentzVector p4part(0., 0., 0., 0.); - if (partId0 == ipart) { - for (unsigned int k = 0; k < dauGen0->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen0->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - p4part = dauMuGen->p4(); - } - } - } - if (partId1 == ipart) { - for (unsigned int k = 0; k < dauGen1->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen1->daughter(k); - if (dauMuGen->pdgId() == ipart && dauMuGen->status() == 1) { - p4part = dauMuGen->p4(); - } - } - } - if (partId2 == ipart) { - for (unsigned int k = 0; k < dauGen2->numberOfDaughters(); ++k) { - const Candidate *dauMuGen = dauGen2->daughter(k); - if (abs(dauMuGen->pdgId()) == ipart && dauMuGen->status() == 1) { - p4part = dauMuGen->p4(); - } - } - } - return p4part; -} - -void ZMuMu_vtxAnalyzer::endJob() {} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuMu_vtxAnalyzer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuPtScaleAnalyzer.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZMuPtScaleAnalyzer.cc deleted file mode 100644 index 615a3c81d1934..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZMuPtScaleAnalyzer.cc +++ /dev/null @@ -1,276 +0,0 @@ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" -#include "TH1.h" -#include "TRandom3.h" - -class ZMuPtScaleAnalyzer : public edm::EDAnalyzer { -public: - ZMuPtScaleAnalyzer(const edm::ParameterSet& pset); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - void endJob() override; - edm::EDGetTokenT genToken_; - unsigned int nbinsMass_, nbinsPt_, nbinsAng_; - double massMax_, ptMax_, angMax_; - double accPtMin_, accMassMin_, accMassMax_, accMassMinDen_, accMassMaxDen_, accEtaMin_, accEtaMax_, ptScale_; - TH1F *h_nZ_, *h_mZ_, *h_ptZ_, *h_phiZ_, *h_thetaZ_, *h_etaZ_, *h_rapidityZ_; - TH1F *h_mZMC_, *h_ptZMC_, *h_phiZMC_, *h_thetaZMC_, *h_etaZMC_, *h_rapidityZMC_; - TH1F *hardpt, *softpt, *hardeta, *softeta; - unsigned int nAcc_, nAccPtScaleP_, nAccPtScaleN_, nAccPtScaleSmearedFlat_, nAccPtScaleSmearedGaus_, - nBothMuHasZHasGrandMa_; - int muPdgStatus_; -}; - -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" - -#include "HepMC/WeightContainer.h" -#include "HepMC/GenEvent.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include -#include - -using namespace std; -using namespace reco; -using namespace edm; - -ZMuPtScaleAnalyzer::ZMuPtScaleAnalyzer(const ParameterSet& pset) - : genToken_(consumes(pset.getParameter("genParticles"))), - nbinsMass_(pset.getUntrackedParameter("nbinsMass")), - nbinsPt_(pset.getUntrackedParameter("nbinsPt")), - nbinsAng_(pset.getUntrackedParameter("nbinsAng")), - massMax_(pset.getUntrackedParameter("massMax")), - ptMax_(pset.getUntrackedParameter("ptMax")), - angMax_(pset.getUntrackedParameter("angMax")), - accPtMin_(pset.getUntrackedParameter("accPtMin")), - accMassMin_(pset.getUntrackedParameter("accMassMin")), - accMassMax_(pset.getUntrackedParameter("accMassMax")), - accMassMinDen_(pset.getUntrackedParameter("accMassMinDen")), - accMassMaxDen_(pset.getUntrackedParameter("accMassMaxDen")), - accEtaMin_(pset.getUntrackedParameter("accEtaMin")), - accEtaMax_(pset.getUntrackedParameter("accEtaMax")), - ptScale_(pset.getUntrackedParameter("ptScale")), - muPdgStatus_(pset.getUntrackedParameter("muPdgStatus")) { - cout << ">>> Z Histogrammer constructor" << endl; - Service fs; - TFileDirectory ZMCHisto = fs->mkdir("ZMCHisto"); - - h_mZMC_ = ZMCHisto.make("ZMCMass", "Z MC mass (GeV/c^{2})", nbinsMass_, 0, massMax_); - h_ptZMC_ = ZMCHisto.make("ZMCPt", "Z MC p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - hardpt = ZMCHisto.make("hardpt", "hard muon p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - softpt = ZMCHisto.make("softpt", "soft muon p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - - h_phiZMC_ = ZMCHisto.make("ZMCPhi", "Z MC #phi", nbinsAng_, -angMax_, angMax_); - h_thetaZMC_ = ZMCHisto.make("ZMCTheta", "Z MC #theta", nbinsAng_, 0, angMax_); - h_etaZMC_ = ZMCHisto.make("ZMCEta", "Z MC #eta", nbinsAng_, -angMax_, angMax_); - h_rapidityZMC_ = ZMCHisto.make("ZMCRapidity", "Z MC y", nbinsAng_, -angMax_, angMax_); - - hardeta = ZMCHisto.make("hard muon eta", "hard muon #eta", nbinsAng_, -angMax_, angMax_); - softeta = ZMCHisto.make("soft muon eta", "soft muon #eta", nbinsAng_, -angMax_, angMax_); - nAcc_ = 0; - nAccPtScaleP_ = 0; - nAccPtScaleN_ = 0; - nAccPtScaleSmearedFlat_ = 0; - nAccPtScaleSmearedGaus_ = 0; - nBothMuHasZHasGrandMa_ = 0; -} - -void ZMuPtScaleAnalyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) { - cout << ">>> Z HistogrammerZLONLOHistogrammer.cc analyze" << endl; - - Handle gen; - Handle weights; - - event.getByToken(genToken_, gen); - - // get weight and fill it to histogram - - std::vector muons; - - double mZGen = -100; - - for (unsigned int i = 0; i < gen->size(); ++i) { - const GenParticle& muMC = (*gen)[i]; - // filliScaledPng only muons coming form Z - if (abs(muMC.pdgId()) == 13 && muMC.status() == muPdgStatus_ && muMC.numberOfMothers() > 0) { - cout << "I'm getting a muon \n" - << "with " - << "muMC.numberOfMothers() " << muMC.numberOfMothers() << "\n the first mother has pdgId " - << muMC.mother()->pdgId() << "with " - << "muMC.mother()->numberOfMothers() " << muMC.mother()->numberOfMothers() - << "\n the first grandma has pdgId " << muMC.mother()->mother()->pdgId() << endl; - cout << "with muMC.eta() " << muMC.eta() << endl; - muons.push_back(muMC); - } - // introducing here the gen mass cut...................... - /* - if (muPdgStatus_ ==1) { - mZGen = muMC.mother()->mother()->mass(); - if (muMC.mother()->mother()->pdgId() ==23 && mZGen>accMassMinDen_ && mZGenmass(); - if (muMC.mother()->pdgId() ==23 && mZGen>accMassMinDen_ && mZGen 1) { - mZGen = zMC.mass(); - cout << "I'm selecting a Z MC with mass " << mZGen << endl; - if (mZGen > accMassMinDen_ && mZGen < accMassMaxDen_) - h_mZMC_->Fill(mZGen); - } - } - - cout << "finally I selected " << muons.size() << " muons" << endl; - - // if there are at least two muons, - // calculate invarant mass of first two and fill it into histogram - - double inv_mass = 0.0; - double Zpt_ = 0.0; - double Zeta_ = 0.0; - double Ztheta_ = 0.0; - double Zphi_ = 0.0; - double Zrapidity_ = 0.0; - - if (muons.size() > 1) { - if (muons[0].mother()->mother()->pdgId() == 23 && muons[1].mother()->mother()->pdgId() == 23) - nBothMuHasZHasGrandMa_++; - math::XYZTLorentzVector tot_momentum(muons[0].p4()); - math::XYZTLorentzVector mom2(muons[1].p4()); - tot_momentum += mom2; - inv_mass = sqrt(tot_momentum.mass2()); - Zpt_ = tot_momentum.pt(); - Zeta_ = tot_momentum.eta(); - Ztheta_ = tot_momentum.theta(); - Zphi_ = tot_momentum.phi(); - Zrapidity_ = tot_momentum.Rapidity(); - - double weight_sign = 1.; - - //h_mZMC_->Fill(inv_mass); - h_ptZMC_->Fill(Zpt_, weight_sign); - h_etaZMC_->Fill(Zeta_, weight_sign); - h_thetaZMC_->Fill(Ztheta_, weight_sign); - h_phiZMC_->Fill(Zphi_, weight_sign); - h_rapidityZMC_->Fill(Zrapidity_, weight_sign); - - double pt1 = muons[0].pt(); - double pt2 = muons[1].pt(); - double eta1 = muons[0].eta(); - double eta2 = muons[1].eta(); - - if (pt1 > pt2) { - hardpt->Fill(pt1, weight_sign); - softpt->Fill(pt2, weight_sign); - hardeta->Fill(eta1, weight_sign); - softeta->Fill(eta2, weight_sign); - } else { - hardpt->Fill(pt2, weight_sign); - softpt->Fill(pt1, weight_sign); - hardeta->Fill(eta2, weight_sign); - softeta->Fill(eta1, weight_sign); - } - - //evaluating the geometric acceptance - if (pt1 >= accPtMin_ && pt2 >= accPtMin_ && fabs(eta1) >= accEtaMin_ && fabs(eta2) >= accEtaMin_ && - fabs(eta1) <= accEtaMax_ && fabs(eta2) <= accEtaMax_ && inv_mass >= accMassMin_ && inv_mass <= accMassMax_) - nAcc_++; - - cout << "pt1" << pt1 << endl; - - // scaling the muon pt - double pt1ScaledP = pt1 * (1. + ptScale_); - cout << "pt1 ScaledP of " << (1. + ptScale_) << endl; - cout << "pt1ScaledP" << pt1ScaledP << endl; - - double pt2ScaledP = pt2 * (1. + ptScale_); - - //evaluating the geometric acceptance - if (pt1ScaledP >= accPtMin_ && pt2ScaledP >= accPtMin_ && fabs(eta1) >= accEtaMin_ && fabs(eta2) >= accEtaMin_ && - fabs(eta1) <= accEtaMax_ && fabs(eta2) <= accEtaMax_ && inv_mass >= accMassMin_ && inv_mass <= accMassMax_) - nAccPtScaleP_++; - - // scaling the muon pt - double pt1ScaledN = pt1 * (1. - ptScale_); - double pt2ScaledN = pt2 * (1. - ptScale_); - - //evaluating the geometric acceptance - if (pt1ScaledN >= accPtMin_ && pt2ScaledN >= accPtMin_ && fabs(eta1) >= accEtaMin_ && fabs(eta2) >= accEtaMin_ && - fabs(eta1) <= accEtaMax_ && fabs(eta2) <= accEtaMax_ && inv_mass >= accMassMin_ && inv_mass <= accMassMax_) - nAccPtScaleN_++; - - // scaling the muon pt - TRandom3 f; - f.SetSeed(123456789); - double pt1SmearedFlat = pt1 * (1. + ptScale_ * f.Uniform()); - double pt2SmearedFlat = pt2 * (1. + ptScale_ * f.Uniform()); - - //evaluating the geometric acceptance - if (pt1SmearedFlat >= accPtMin_ && pt2SmearedFlat >= accPtMin_ && fabs(eta1) >= accEtaMin_ && - fabs(eta2) >= accEtaMin_ && fabs(eta1) <= accEtaMax_ && fabs(eta2) <= accEtaMax_ && inv_mass >= accMassMin_ && - inv_mass <= accMassMax_) - nAccPtScaleSmearedFlat_++; - - // scaling the muon pt - TRandom3 ff; - ff.SetSeed(123456789); - double pt1SmearedGaus = pt1 * (1. + ptScale_ * f.Gaus()); - double pt2SmearedGaus = pt2 * (1. + ptScale_ * f.Gaus()); - - //evaluating the geometric acceptance - if (pt1SmearedGaus >= accPtMin_ && pt2SmearedGaus >= accPtMin_ && fabs(eta1) >= accEtaMin_ && - fabs(eta2) >= accEtaMin_ && fabs(eta1) <= accEtaMax_ && fabs(eta2) <= accEtaMax_ && inv_mass >= accMassMin_ && - inv_mass <= accMassMax_) - nAccPtScaleSmearedGaus_++; - } -} - -void ZMuPtScaleAnalyzer::endJob() { - cout << " number of events accepted :" << nAcc_ << endl; - cout << " number of total events :" << h_mZMC_->GetEntries() << endl; - cout << " number of cases in which BothMuHasZHasGrandMa :" << nBothMuHasZHasGrandMa_ << endl; - cout << " number of events pt scaled positively accepted :" << nAccPtScaleP_ << endl; - - cout << " number of events pt scaled negatively accepted :" << nAccPtScaleN_ << endl; - - cout << " number of events pt scaled smeared flattely accepted :" << nAccPtScaleSmearedFlat_ << endl; - - cout << " number of events pt scaled smeared gaussianely accepted :" << nAccPtScaleSmearedGaus_ << endl; - - double eff = (double)nAcc_ / (double)h_mZMC_->GetEntries(); - double err = sqrt(eff * (1. - eff) / (double)h_mZMC_->GetEntries()); - cout << " geometric acceptance: " << eff << "+/-" << err << endl; - - double effScaledP = (double)nAccPtScaleP_ / (double)h_mZMC_->GetEntries(); - double errScaledP = sqrt(effScaledP * (1. - effScaledP) / (double)h_mZMC_->GetEntries()); - cout << " geometric acceptance when pt muon is positively scaled: " << effScaledP << "+/-" << errScaledP << endl; - - double effScaledN = (double)nAccPtScaleN_ / (double)h_mZMC_->GetEntries(); - double errScaledN = sqrt(effScaledN * (1. - effScaledN) / (double)h_mZMC_->GetEntries()); - cout << " geometric acceptance when pt muon is negatively scaled: " << effScaledN << "+/-" << errScaledN << endl; - - double effSmearedFlat = (double)nAccPtScaleSmearedFlat_ / (double)h_mZMC_->GetEntries(); - double errSmearedFlat = sqrt(effSmearedFlat * (1. - effSmearedFlat) / (double)h_mZMC_->GetEntries()); - cout << " geometric acceptance when pt muon is scaled with a flat smaering: " << effSmearedFlat << "+/-" - << errSmearedFlat << endl; - - double effSmearedGaus = (double)nAccPtScaleSmearedGaus_ / (double)h_mZMC_->GetEntries(); - double errSmearedGaus = sqrt(effSmearedGaus * (1. - effSmearedGaus) / (double)h_mZMC_->GetEntries()); - cout << " geometric acceptance when pt muon is scaled with a gaussian smearing: " << effSmearedGaus << "+/-" - << errSmearedGaus << endl; -} -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZMuPtScaleAnalyzer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZToLLEdmNtupleDumper.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZToLLEdmNtupleDumper.cc deleted file mode 100644 index 00f88962db9db..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZToLLEdmNtupleDumper.cc +++ /dev/null @@ -1,724 +0,0 @@ -/* \class ZToLLEdmNtupleDumper - * - * \author Luca Lista, INFN - * - */ -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/Provenance/interface/RunLumiEventNumber.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "DataFormats/Candidate/interface/Candidate.h" -//#include "DataFormats/Common/interface/AssociationVector.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -#include "FWCore/Utilities/interface/EDMException.h" -#include "DataFormats/PatCandidates/interface/TriggerObjectStandAlone.h" - -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" -#include "DataFormats/PatCandidates/interface/Isolation.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositVetos.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositDirection.h" - -#include "DataFormats/BeamSpot/interface/BeamSpot.h" - -#include - -using namespace edm; -using namespace std; -using namespace reco; -using namespace isodeposit; -//using namespace pat; - -class ZToLLEdmNtupleDumper : public edm::EDProducer { -public: - typedef math::XYZVector Vector; - ZToLLEdmNtupleDumper(const edm::ParameterSet &); - -private: - void produce(edm::Event &, const edm::EventSetup &) override; - std::vector zName_; - std::vector > zTokens_; - std::vector > zGenParticlesMatchTokens_; - edm::EDGetTokenT beamSpotToken_; - edm::EDGetTokenT primaryVerticesToken_; - - std::vector ptThreshold_, etEcalThreshold_, etHcalThreshold_, dRVetoTrk_, dRTrk_, dREcal_, dRHcal_, alpha_, - beta_; - std::vector relativeIsolation_; - std::vector hltPath_; - int counter; -}; - -template -double isolation(const T *t, - double ptThreshold, - double etEcalThreshold, - double etHcalThreshold, - double dRVetoTrk, - double dRTrk, - double dREcal, - double dRHcal, - double alpha, - double beta, - bool relativeIsolation) { - // on 34X: - const pat::IsoDeposit *trkIso = t->isoDeposit(pat::TrackIso); - // const pat::IsoDeposit * trkIso = t->trackerIsoDeposit(); - // on 34X - const pat::IsoDeposit *ecalIso = t->isoDeposit(pat::EcalIso); - // const pat::IsoDeposit * ecalIso = t->ecalIsoDeposit(); - // on 34X - const pat::IsoDeposit *hcalIso = t->isoDeposit(pat::HcalIso); - // const pat::IsoDeposit * hcalIso = t->hcalIsoDeposit(); - - Direction dir = Direction(t->eta(), t->phi()); - - pat::IsoDeposit::AbsVetos vetosTrk; - vetosTrk.push_back(new ConeVeto(dir, dRVetoTrk)); - vetosTrk.push_back(new ThresholdVeto(ptThreshold)); - - pat::IsoDeposit::AbsVetos vetosEcal; - vetosEcal.push_back(new ConeVeto(dir, 0.)); - vetosEcal.push_back(new ThresholdVeto(etEcalThreshold)); - - pat::IsoDeposit::AbsVetos vetosHcal; - vetosHcal.push_back(new ConeVeto(dir, 0.)); - vetosHcal.push_back(new ThresholdVeto(etHcalThreshold)); - - double isovalueTrk = (trkIso->sumWithin(dRTrk, vetosTrk)); - double isovalueEcal = (ecalIso->sumWithin(dREcal, vetosEcal)); - double isovalueHcal = (hcalIso->sumWithin(dRHcal, vetosHcal)); - - double iso = - alpha * (((1 + beta) / 2 * isovalueEcal) + ((1 - beta) / 2 * isovalueHcal)) + ((1 - alpha) * isovalueTrk); - if (relativeIsolation) - iso /= t->pt(); - return iso; -} - -double candIsolation(const reco::Candidate *c, - double ptThreshold, - double etEcalThreshold, - double etHcalThreshold, - double dRVetoTrk, - double dRTrk, - double dREcal, - double dRHcal, - double alpha, - double beta, - bool relativeIsolation) { - const pat::Muon *mu = dynamic_cast(c); - if (mu != nullptr) - return isolation(mu, - ptThreshold, - etEcalThreshold, - etHcalThreshold, - dRVetoTrk, - dRTrk, - dREcal, - dRHcal, - alpha, - beta, - relativeIsolation); - const pat::GenericParticle *trk = dynamic_cast(c); - if (trk != nullptr) - return isolation(trk, - ptThreshold, - etEcalThreshold, - etHcalThreshold, - dRVetoTrk, - dRTrk, - dREcal, - dRHcal, - alpha, - beta, - relativeIsolation); - throw edm::Exception(edm::errors::InvalidReference) - << "Candidate daughter #0 is neither pat::Muons nor pat::GenericParticle\n"; - return -1; -} - -ZToLLEdmNtupleDumper::ZToLLEdmNtupleDumper(const ParameterSet &cfg) { - string alias; - vector psets = cfg.getParameter >("zBlocks"); - for (std::vector::const_iterator i = psets.begin(); i != psets.end(); ++i) { - string zName = i->getParameter("zName"); - edm::EDGetTokenT zToken = consumes(i->getParameter("z")); - edm::EDGetTokenT zGenParticlesMatchToken = - consumes(i->getParameter("zGenParticlesMatch")); - beamSpotToken_ = consumes(i->getParameter("beamSpot")); - primaryVerticesToken_ = consumes(i->getParameter("primaryVertices")); - double ptThreshold = i->getParameter("ptThreshold"); - double etEcalThreshold = i->getParameter("etEcalThreshold"); - double etHcalThreshold = i->getParameter("etHcalThreshold"); - double dRVetoTrk = i->getParameter("deltaRVetoTrk"); - double dRTrk = i->getParameter("deltaRTrk"); - double dREcal = i->getParameter("deltaREcal"); - double dRHcal = i->getParameter("deltaRHcal"); - double alpha = i->getParameter("alpha"); - double beta = i->getParameter("beta"); - bool relativeIsolation = i->getParameter("relativeIsolation"); - string hltPath = i->getParameter("hltPath"); - zName_.push_back(zName); - zTokens_.push_back(zToken); - zGenParticlesMatchTokens_.push_back(zGenParticlesMatchToken); - ptThreshold_.push_back(ptThreshold); - etEcalThreshold_.push_back(etEcalThreshold); - etHcalThreshold_.push_back(etHcalThreshold); - dRVetoTrk_.push_back(dRVetoTrk); - dRTrk_.push_back(dRTrk); - dREcal_.push_back(dREcal); - dRHcal_.push_back(dRHcal); - alpha_.push_back(alpha); - beta_.push_back(beta); - relativeIsolation_.push_back(relativeIsolation); - hltPath_.push_back(hltPath); - produces >(alias = zName + "EventNumber").setBranchAlias(alias); - produces >(alias = zName + "RunNumber").setBranchAlias(alias); - produces >(alias = zName + "LumiBlock").setBranchAlias(alias); - produces >(alias = zName + "Mass").setBranchAlias(alias); - produces >(alias = zName + "MassSa").setBranchAlias(alias); - produces >(alias = zName + "Pt").setBranchAlias(alias); - produces >(alias = zName + "Eta").setBranchAlias(alias); - produces >(alias = zName + "Phi").setBranchAlias(alias); - produces >(alias = zName + "Y").setBranchAlias(alias); - produces >(alias = zName + "Dau1Pt").setBranchAlias(alias); - produces >(alias = zName + "Dau2Pt").setBranchAlias(alias); - produces >(alias = zName + "Dau1SaPt").setBranchAlias(alias); - produces >(alias = zName + "Dau2SaPt").setBranchAlias(alias); - produces >(alias = zName + "Dau1HLTBit").setBranchAlias(alias); - produces >(alias = zName + "Dau2HLTBit").setBranchAlias(alias); - produces >(alias = zName + "Dau1Q").setBranchAlias(alias); - produces >(alias = zName + "Dau2Q").setBranchAlias(alias); - produces >(alias = zName + "Dau1Eta").setBranchAlias(alias); - produces >(alias = zName + "Dau2Eta").setBranchAlias(alias); - produces >(alias = zName + "Dau1SaEta").setBranchAlias(alias); - produces >(alias = zName + "Dau2SaEta").setBranchAlias(alias); - produces >(alias = zName + "Dau1Phi").setBranchAlias(alias); - produces >(alias = zName + "Dau2Phi").setBranchAlias(alias); - produces >(alias = zName + "Dau1SaPhi").setBranchAlias(alias); - produces >(alias = zName + "Dau2SaPhi").setBranchAlias(alias); - produces >(alias = zName + "Dau1Iso").setBranchAlias(alias); - produces >(alias = zName + "Dau2Iso").setBranchAlias(alias); - produces >(alias = zName + "Dau1TrkIso").setBranchAlias(alias); - produces >(alias = zName + "Dau2TrkIso").setBranchAlias(alias); - produces >(alias = zName + "Dau1EcalIso").setBranchAlias(alias); - produces >(alias = zName + "Dau2EcalIso").setBranchAlias(alias); - produces >(alias = zName + "Dau1HcalIso").setBranchAlias(alias); - produces >(alias = zName + "Dau2HcalIso").setBranchAlias(alias); - produces >(alias = zName + "Dau1MuEnergyEm").setBranchAlias(alias); - produces >(alias = zName + "Dau1MuEnergyHad").setBranchAlias(alias); - produces >(alias = zName + "Dau2MuEnergyEm").setBranchAlias(alias); - produces >(alias = zName + "Dau2MuEnergyHad").setBranchAlias(alias); - - produces >(alias = zName + "VtxNormChi2").setBranchAlias(alias); - produces >(alias = zName + "Dau1NofHit").setBranchAlias(alias); - produces >(alias = zName + "Dau2NofHit").setBranchAlias(alias); - produces >(alias = zName + "Dau1NofHitTk").setBranchAlias(alias); - produces >(alias = zName + "Dau1NofHitSta").setBranchAlias(alias); - produces >(alias = zName + "Dau2NofHitTk").setBranchAlias(alias); - produces >(alias = zName + "Dau2NofHitSta").setBranchAlias(alias); - produces >(alias = zName + "Dau1NofMuChambers").setBranchAlias(alias); - produces >(alias = zName + "Dau2NofMuChambers").setBranchAlias(alias); - produces >(alias = zName + "Dau1NofMuMatches").setBranchAlias(alias); - produces >(alias = zName + "Dau2NofMuMatches").setBranchAlias(alias); - produces >(alias = zName + "Dau1Chi2").setBranchAlias(alias); - produces >(alias = zName + "Dau2Chi2").setBranchAlias(alias); - produces >(alias = zName + "Dau1TrkChi2").setBranchAlias(alias); - produces >(alias = zName + "Dau2TrkChi2").setBranchAlias(alias); - produces >(alias = zName + "Dau1dxyFromBS").setBranchAlias(alias); - produces >(alias = zName + "Dau2dxyFromBS").setBranchAlias(alias); - produces >(alias = zName + "Dau1dzFromBS").setBranchAlias(alias); - produces >(alias = zName + "Dau2dzFromBS").setBranchAlias(alias); - produces >(alias = zName + "Dau1dxyFromPV").setBranchAlias(alias); - produces >(alias = zName + "Dau2dxyFromPV").setBranchAlias(alias); - produces >(alias = zName + "Dau1dzFromPV").setBranchAlias(alias); - produces >(alias = zName + "Dau2dzFromPV").setBranchAlias(alias); - produces >(alias = zName + "TrueMass").setBranchAlias(alias); - produces >(alias = zName + "TruePt").setBranchAlias(alias); - produces >(alias = zName + "TrueEta").setBranchAlias(alias); - produces >(alias = zName + "TruePhi").setBranchAlias(alias); - produces >(alias = zName + "TrueY").setBranchAlias(alias); - } -} - -void ZToLLEdmNtupleDumper::produce(Event &evt, const EventSetup &) { - Handle beamSpotHandle; - if (!evt.getByToken(beamSpotToken_, beamSpotHandle)) { - std::cout << ">>> No beam spot found !!!" << std::endl; - } - Handle primaryVertices; // Collection of primary Vertices - if (!evt.getByToken(primaryVerticesToken_, primaryVertices)) { - std::cout << ">>> No primary verteces found !!!" << std::endl; - } - - unsigned int size = zTokens_.size(); - for (unsigned int c = 0; c < size; ++c) { - Handle zColl; - evt.getByToken(zTokens_[c], zColl); - bool isMCMatchTrue = false; - //if (zGenParticlesMatchTokens_[c] != "") isMCMatchTrue = true; - Handle zGenParticlesMatch; - if (evt.getByToken(zGenParticlesMatchTokens_[c], zGenParticlesMatch)) { - isMCMatchTrue = true; - } - unsigned int zSize = zColl->size(); - unique_ptr > event(new vector); - unique_ptr > run(new vector); - unique_ptr > lumi(new vector); - unique_ptr > zMass(new vector); - unique_ptr > zMassSa(new vector); - unique_ptr > zPt(new vector); - unique_ptr > zEta(new vector); - unique_ptr > zPhi(new vector); - unique_ptr > zY(new vector); - unique_ptr > zDau1Pt(new vector); - unique_ptr > zDau2Pt(new vector); - unique_ptr > zDau1SaPt(new vector); - unique_ptr > zDau2SaPt(new vector); - unique_ptr > zDau1HLTBit(new vector); - unique_ptr > zDau2HLTBit(new vector); - unique_ptr > zDau1Q(new vector); - unique_ptr > zDau2Q(new vector); - unique_ptr > zDau1Eta(new vector); - unique_ptr > zDau2Eta(new vector); - unique_ptr > zDau1SaEta(new vector); - unique_ptr > zDau2SaEta(new vector); - unique_ptr > zDau1Phi(new vector); - unique_ptr > zDau2Phi(new vector); - unique_ptr > zDau1SaPhi(new vector); - unique_ptr > zDau2SaPhi(new vector); - unique_ptr > zDau1Iso(new vector); - unique_ptr > zDau2Iso(new vector); - unique_ptr > zDau1TrkIso(new vector); - unique_ptr > zDau2TrkIso(new vector); - unique_ptr > zDau1EcalIso(new vector); - unique_ptr > zDau2EcalIso(new vector); - unique_ptr > zDau1HcalIso(new vector); - unique_ptr > zDau2HcalIso(new vector); - unique_ptr > zDau1MuEnergyEm(new vector); - unique_ptr > zDau2MuEnergyEm(new vector); - unique_ptr > zDau1MuEnergyHad(new vector); - unique_ptr > zDau2MuEnergyHad(new vector); - unique_ptr > vtxNormChi2(new vector); - unique_ptr > zDau1NofHit(new vector); - unique_ptr > zDau2NofHit(new vector); - unique_ptr > zDau1NofHitTk(new vector); - unique_ptr > zDau2NofHitTk(new vector); - unique_ptr > zDau1NofHitSta(new vector); - unique_ptr > zDau2NofHitSta(new vector); - unique_ptr > zDau1NofMuChambers(new vector); - unique_ptr > zDau2NofMuChambers(new vector); - unique_ptr > zDau1NofMuMatches(new vector); - unique_ptr > zDau2NofMuMatches(new vector); - unique_ptr > zDau1Chi2(new vector); - unique_ptr > zDau2Chi2(new vector); - unique_ptr > zDau1TrkChi2(new vector); - unique_ptr > zDau2TrkChi2(new vector); - unique_ptr > zDau1dxyFromBS(new vector); - unique_ptr > zDau2dxyFromBS(new vector); - unique_ptr > zDau1dzFromBS(new vector); - unique_ptr > zDau2dzFromBS(new vector); - unique_ptr > zDau1dxyFromPV(new vector); - unique_ptr > zDau2dxyFromPV(new vector); - unique_ptr > zDau1dzFromPV(new vector); - unique_ptr > zDau2dzFromPV(new vector); - unique_ptr > trueZMass(new vector); - unique_ptr > trueZPt(new vector); - unique_ptr > trueZEta(new vector); - unique_ptr > trueZPhi(new vector); - unique_ptr > trueZY(new vector); - event->push_back(evt.id().event()); - run->push_back(evt.id().run()); - lumi->push_back(evt.luminosityBlock()); - for (unsigned int i = 0; i < zSize; ++i) { - const Candidate &z = (*zColl)[i]; - CandidateBaseRef zRef = zColl->refAt(i); - zMass->push_back(z.mass()); - zPt->push_back(z.pt()); - zEta->push_back(z.eta()); - zPhi->push_back(z.phi()); - zY->push_back(z.rapidity()); - vtxNormChi2->push_back(z.vertexNormalizedChi2()); - const Candidate *dau1 = z.daughter(0); - const Candidate *dau2 = z.daughter(1); - zDau1Pt->push_back(dau1->pt()); - zDau2Pt->push_back(dau2->pt()); - zDau1Q->push_back(dau1->charge()); - zDau2Q->push_back(dau2->charge()); - zDau1Eta->push_back(dau1->eta()); - zDau2Eta->push_back(dau2->eta()); - zDau1Phi->push_back(dau1->phi()); - zDau2Phi->push_back(dau2->phi()); - if (!(dau1->hasMasterClone() && dau2->hasMasterClone())) - throw edm::Exception(edm::errors::InvalidReference) << "Candidate daughters have no master clone\n"; - const CandidateBaseRef &mr1 = dau1->masterClone(), &mr2 = dau2->masterClone(); - - const Candidate *m1 = &*mr1, *m2 = &*mr2; - - // isolation as defined by us into the analyzer - double iso1 = candIsolation(m1, - ptThreshold_[c], - etEcalThreshold_[c], - etHcalThreshold_[c], - dRVetoTrk_[c], - dRTrk_[c], - dREcal_[c], - dRHcal_[c], - alpha_[c], - beta_[c], - relativeIsolation_[c]); - double iso2 = candIsolation(m2, - ptThreshold_[c], - etEcalThreshold_[c], - etHcalThreshold_[c], - dRVetoTrk_[c], - dRTrk_[c], - dREcal_[c], - dRHcal_[c], - alpha_[c], - beta_[c], - relativeIsolation_[c]); - // tracker isolation : alpha =0 - double trkIso1 = candIsolation(m1, - ptThreshold_[c], - etEcalThreshold_[c], - etHcalThreshold_[c], - dRVetoTrk_[c], - dRTrk_[c], - dREcal_[c], - dRHcal_[c], - 0.0, - beta_[c], - relativeIsolation_[c]); - double trkIso2 = candIsolation(m2, - ptThreshold_[c], - etEcalThreshold_[c], - etHcalThreshold_[c], - dRVetoTrk_[c], - dRTrk_[c], - dREcal_[c], - dRHcal_[c], - 0.0, - beta_[c], - relativeIsolation_[c]); - // ecal isolation : alpha =1, beta =1 - double ecalIso1 = candIsolation(m1, - ptThreshold_[c], - etEcalThreshold_[c], - etHcalThreshold_[c], - dRVetoTrk_[c], - dRTrk_[c], - dREcal_[c], - dRHcal_[c], - 1.0, - 1.0, - relativeIsolation_[c]); - double ecalIso2 = candIsolation(m2, - ptThreshold_[c], - etEcalThreshold_[c], - etHcalThreshold_[c], - dRVetoTrk_[c], - dRTrk_[c], - dREcal_[c], - dRHcal_[c], - 1.0, - 1.0, - relativeIsolation_[c]); - // hcal isolation : alpha =1, beta =-1 - double hcalIso1 = candIsolation(m1, - ptThreshold_[c], - etEcalThreshold_[c], - etHcalThreshold_[c], - dRVetoTrk_[c], - dRTrk_[c], - dREcal_[c], - dRHcal_[c], - 1.0, - -1.0, - relativeIsolation_[c]); - double hcalIso2 = candIsolation(m2, - ptThreshold_[c], - etEcalThreshold_[c], - etHcalThreshold_[c], - dRVetoTrk_[c], - dRTrk_[c], - dREcal_[c], - dRHcal_[c], - 1.0, - -1.0, - relativeIsolation_[c]); - - zDau1Iso->push_back(iso1); - zDau2Iso->push_back(iso2); - zDau1TrkIso->push_back(trkIso1); - zDau2TrkIso->push_back(trkIso2); - zDau1EcalIso->push_back(ecalIso1); - zDau2EcalIso->push_back(ecalIso2); - zDau1HcalIso->push_back(hcalIso1); - zDau2HcalIso->push_back(hcalIso2); - if (isMCMatchTrue) { - GenParticleRef trueZRef = (*zGenParticlesMatch)[zRef]; - //CandidateRef trueZRef = trueZIter->val; - if (trueZRef.isNonnull()) { - const Candidate &z = *trueZRef; - trueZMass->push_back(z.mass()); - trueZPt->push_back(z.pt()); - trueZEta->push_back(z.eta()); - trueZPhi->push_back(z.phi()); - trueZY->push_back(z.rapidity()); - } else { - trueZMass->push_back(-100); - trueZPt->push_back(-100); - trueZEta->push_back(-100); - trueZPhi->push_back(-100); - trueZY->push_back(-100); - } - } - // quality variables - const pat::Muon *mu1 = dynamic_cast(m1); - // protection for standalone and trackerMuon - if (mu1->isGlobalMuon() == true) { - zDau1NofHit->push_back(mu1->numberOfValidHits()); - zDau1NofHitTk->push_back(mu1->innerTrack()->numberOfValidHits()); - zDau1NofHitSta->push_back(mu1->outerTrack()->numberOfValidHits()); - zDau1Chi2->push_back(mu1->normChi2()); - TrackRef mu1TrkRef = mu1->innerTrack(); - zDau1TrkChi2->push_back(mu1TrkRef->normalizedChi2()); - zDau1dxyFromBS->push_back(mu1TrkRef->dxy(beamSpotHandle->position())); - zDau1dzFromBS->push_back(mu1TrkRef->dz(beamSpotHandle->position())); - zDau1dxyFromPV->push_back(mu1TrkRef->dxy(primaryVertices->begin()->position())); - zDau1dzFromPV->push_back(mu1TrkRef->dz(primaryVertices->begin()->position())); - zDau1MuEnergyEm->push_back(mu1->calEnergy().em); - zDau1MuEnergyHad->push_back(mu1->calEnergy().had); - - } else if (mu1->isStandAloneMuon() == true) { - // the muon is a standalone - TrackRef mu1StaRef = mu1->outerTrack(); - zDau1NofHit->push_back(mu1StaRef->numberOfValidHits()); - zDau1NofHitTk->push_back(0); - zDau1NofHitSta->push_back(mu1StaRef->numberOfValidHits()); - zDau1Chi2->push_back(mu1StaRef->normalizedChi2()); - zDau1TrkChi2->push_back(0); - zDau1dxyFromBS->push_back(mu1StaRef->dxy(beamSpotHandle->position())); - zDau1dzFromBS->push_back(mu1StaRef->dz(beamSpotHandle->position())); - zDau1dxyFromPV->push_back(mu1StaRef->dxy(primaryVertices->begin()->position())); - zDau1dzFromPV->push_back(mu1StaRef->dz(primaryVertices->begin()->position())); - zDau1MuEnergyEm->push_back(-1); - zDau1MuEnergyHad->push_back(-1); - } else if (mu1->isTrackerMuon() == true) { - // the muon is a trackerMuon - TrackRef mu1TrkRef = mu1->innerTrack(); - zDau1NofHit->push_back(mu1TrkRef->numberOfValidHits()); - zDau1NofHitTk->push_back(mu1TrkRef->numberOfValidHits()); - zDau1NofHitSta->push_back(0); - zDau1Chi2->push_back(mu1TrkRef->normalizedChi2()); - zDau1TrkChi2->push_back(mu1TrkRef->normalizedChi2()); - zDau1dxyFromBS->push_back(mu1TrkRef->dxy(beamSpotHandle->position())); - zDau1dzFromBS->push_back(mu1TrkRef->dz(beamSpotHandle->position())); - zDau1dxyFromPV->push_back(mu1TrkRef->dxy(primaryVertices->begin()->position())); - zDau1dzFromPV->push_back(mu1TrkRef->dz(primaryVertices->begin()->position())); - zDau1MuEnergyEm->push_back(mu1->calEnergy().em); - zDau1MuEnergyHad->push_back(mu1->calEnergy().had); - } - zDau1NofMuChambers->push_back(mu1->numberOfChambers()); - zDau1NofMuMatches->push_back(mu1->numberOfMatches()); - - // would we like to add another variables??? - // HLT trigger bit - const pat::TriggerObjectStandAloneCollection mu1HLTMatches = mu1->triggerObjectMatchesByPath(hltPath_[c]); - - int dimTrig1 = mu1HLTMatches.size(); - if (dimTrig1 != 0) { - zDau1HLTBit->push_back(1); - } else { - zDau1HLTBit->push_back(0); - } - const pat::Muon *mu2 = dynamic_cast(m2); - if (mu2 != nullptr) { - if (mu2->isGlobalMuon() == true) { - zDau2NofHit->push_back(mu2->numberOfValidHits()); - zDau2NofHitTk->push_back(mu2->innerTrack()->numberOfValidHits()); - zDau2NofHitSta->push_back(mu2->outerTrack()->numberOfValidHits()); - zDau2Chi2->push_back(mu2->normChi2()); - TrackRef mu2TrkRef = mu2->innerTrack(); - zDau1TrkChi2->push_back(mu2TrkRef->normalizedChi2()); - zDau2dxyFromBS->push_back(mu2TrkRef->dxy(beamSpotHandle->position())); - zDau2dzFromBS->push_back(mu2TrkRef->dz(beamSpotHandle->position())); - zDau2dxyFromPV->push_back(mu2TrkRef->dxy(primaryVertices->begin()->position())); - zDau2dzFromPV->push_back(mu2TrkRef->dz(primaryVertices->begin()->position())); - zDau2MuEnergyEm->push_back(mu2->calEnergy().em); - zDau2MuEnergyHad->push_back(mu2->calEnergy().had); - } else if (mu2->isStandAloneMuon() == true) { - // its' a standalone - zDau2HLTBit->push_back(0); - TrackRef mu2StaRef = mu2->outerTrack(); - zDau2NofHit->push_back(mu2StaRef->numberOfValidHits()); - zDau2NofHitTk->push_back(0); - zDau2NofHitSta->push_back(mu2StaRef->numberOfValidHits()); - zDau2Chi2->push_back(mu2StaRef->normalizedChi2()); - zDau2TrkChi2->push_back(0); - zDau2dxyFromBS->push_back(mu2StaRef->dxy(beamSpotHandle->position())); - zDau2dzFromBS->push_back(mu2StaRef->dz(beamSpotHandle->position())); - zDau2dxyFromPV->push_back(mu2StaRef->dxy(primaryVertices->begin()->position())); - zDau2dzFromPV->push_back(mu2StaRef->dz(primaryVertices->begin()->position())); - zDau1MuEnergyEm->push_back(-1); - zDau1MuEnergyHad->push_back(-1); - } else if (mu2->isTrackerMuon() == true) { - // the muon is a trackerMuon - TrackRef mu2TrkRef = mu2->innerTrack(); - zDau2NofHit->push_back(mu2TrkRef->numberOfValidHits()); - zDau2NofHitSta->push_back(0); - zDau2NofHitTk->push_back(mu2TrkRef->numberOfValidHits()); - zDau2Chi2->push_back(mu2TrkRef->normalizedChi2()); - zDau2TrkChi2->push_back(mu2TrkRef->normalizedChi2()); - zDau2dxyFromBS->push_back(mu2TrkRef->dxy(beamSpotHandle->position())); - zDau2dzFromBS->push_back(mu2TrkRef->dz(beamSpotHandle->position())); - zDau2dxyFromPV->push_back(mu2TrkRef->dxy(primaryVertices->begin()->position())); - zDau2dzFromPV->push_back(mu2TrkRef->dz(primaryVertices->begin()->position())); - zDau2MuEnergyEm->push_back(mu2->calEnergy().em); - zDau2MuEnergyHad->push_back(mu2->calEnergy().had); - } - - // HLT trigger bit - const pat::TriggerObjectStandAloneCollection mu2HLTMatches = mu2->triggerObjectMatchesByPath(hltPath_[c]); - int dimTrig2 = mu2HLTMatches.size(); - if (dimTrig2 != 0) { - zDau2HLTBit->push_back(1); - } else { - zDau2HLTBit->push_back(0); - } - /// only for ZGolden evaluated zMassSa for the mu+sta pdf, see zmumuSaMassHistogram.cc - if (mu1->isGlobalMuon() && mu2->isGlobalMuon()) { - TrackRef stAloneTrack1; - TrackRef stAloneTrack2; - Vector momentum; - Candidate::PolarLorentzVector p4_1; - double mu_mass; - stAloneTrack1 = dau1->get(); - stAloneTrack2 = dau2->get(); - zDau1SaEta->push_back(stAloneTrack1->eta()); - zDau2SaEta->push_back(stAloneTrack2->eta()); - zDau1SaPhi->push_back(stAloneTrack1->phi()); - zDau2SaPhi->push_back(stAloneTrack2->phi()); - if (counter % 2 == 0) { - momentum = stAloneTrack1->momentum(); - p4_1 = dau2->polarP4(); - mu_mass = dau1->mass(); - /// I fill the dau1 with positive and dau2 with negatove values for the pt, in order to flag the muons used for building zMassSa - zDau1SaPt->push_back(stAloneTrack1->pt()); - zDau2SaPt->push_back(-stAloneTrack2->pt()); - } else { - momentum = stAloneTrack2->momentum(); - p4_1 = dau1->polarP4(); - mu_mass = dau2->mass(); - /// I fill the dau1 with negatove and dau2 with positive values for the pt - zDau1SaPt->push_back(-stAloneTrack1->pt()); - zDau2SaPt->push_back(stAloneTrack2->pt()); - } - - Candidate::PolarLorentzVector p4_2(momentum.rho(), momentum.eta(), momentum.phi(), mu_mass); - double mass = (p4_1 + p4_2).mass(); - zMassSa->push_back(mass); - ++counter; - } - - zDau2NofMuChambers->push_back(mu2->numberOfChambers()); - zDau2NofMuMatches->push_back(mu2->numberOfMatches()); - } else { - // for ZMuTk case... - // it's a track...... - const pat::GenericParticle *trk2 = dynamic_cast(m2); - TrackRef mu2TrkRef = trk2->track(); - zDau2NofHit->push_back(mu2TrkRef->numberOfValidHits()); - zDau2NofHitTk->push_back(mu2TrkRef->numberOfValidHits()); - zDau2NofHitSta->push_back(0); - zDau2NofMuChambers->push_back(0); - zDau2NofMuMatches->push_back(0); - zDau2Chi2->push_back(mu2TrkRef->normalizedChi2()); - zDau2dxyFromBS->push_back(mu2TrkRef->dxy(beamSpotHandle->position())); - zDau2dzFromBS->push_back(mu2TrkRef->dz(beamSpotHandle->position())); - zDau2dxyFromPV->push_back(mu2TrkRef->dxy(primaryVertices->begin()->position())); - zDau2dzFromPV->push_back(mu2TrkRef->dz(primaryVertices->begin()->position())); - zDau1MuEnergyEm->push_back(-1); - zDau1MuEnergyHad->push_back(-1); - } - } - const string &zName = zName_[c]; - evt.put(std::move(event), zName + "EventNumber"); - evt.put(std::move(run), zName + "RunNumber"); - evt.put(std::move(lumi), zName + "LumiBlock"); - evt.put(std::move(zMass), zName + "Mass"); - evt.put(std::move(zMassSa), zName + "MassSa"); - evt.put(std::move(zPt), zName + "Pt"); - evt.put(std::move(zEta), zName + "Eta"); - evt.put(std::move(zPhi), zName + "Phi"); - evt.put(std::move(zY), zName + "Y"); - evt.put(std::move(zDau1Pt), zName + "Dau1Pt"); - evt.put(std::move(zDau2Pt), zName + "Dau2Pt"); - evt.put(std::move(zDau1SaPt), zName + "Dau1SaPt"); - evt.put(std::move(zDau2SaPt), zName + "Dau2SaPt"); - evt.put(std::move(zDau1HLTBit), zName + "Dau1HLTBit"); - evt.put(std::move(zDau2HLTBit), zName + "Dau2HLTBit"); - evt.put(std::move(zDau1Q), zName + "Dau1Q"); - evt.put(std::move(zDau2Q), zName + "Dau2Q"); - evt.put(std::move(zDau1Eta), zName + "Dau1Eta"); - evt.put(std::move(zDau2Eta), zName + "Dau2Eta"); - evt.put(std::move(zDau1SaEta), zName + "Dau1SaEta"); - evt.put(std::move(zDau2SaEta), zName + "Dau2SaEta"); - evt.put(std::move(zDau1Phi), zName + "Dau1Phi"); - evt.put(std::move(zDau2Phi), zName + "Dau2Phi"); - evt.put(std::move(zDau1SaPhi), zName + "Dau1SaPhi"); - evt.put(std::move(zDau2SaPhi), zName + "Dau2SaPhi"); - evt.put(std::move(zDau1Iso), zName + "Dau1Iso"); - evt.put(std::move(zDau2Iso), zName + "Dau2Iso"); - evt.put(std::move(zDau1TrkIso), zName + "Dau1TrkIso"); - evt.put(std::move(zDau2TrkIso), zName + "Dau2TrkIso"); - evt.put(std::move(zDau1EcalIso), zName + "Dau1EcalIso"); - evt.put(std::move(zDau2EcalIso), zName + "Dau2EcalIso"); - evt.put(std::move(zDau1HcalIso), zName + "Dau1HcalIso"); - evt.put(std::move(zDau2HcalIso), zName + "Dau2HcalIso"); - evt.put(std::move(zDau1MuEnergyEm), zName + "Dau1MuEnergyEm"); - evt.put(std::move(zDau2MuEnergyEm), zName + "Dau2MuEnergyEm"); - evt.put(std::move(zDau1MuEnergyHad), zName + "Dau1MuEnergyHad"); - evt.put(std::move(zDau2MuEnergyHad), zName + "Dau2MuEnergyHad"); - evt.put(std::move(vtxNormChi2), zName + "VtxNormChi2"); - evt.put(std::move(zDau1NofHit), zName + "Dau1NofHit"); - evt.put(std::move(zDau2NofHit), zName + "Dau2NofHit"); - evt.put(std::move(zDau1NofHitTk), zName + "Dau1NofHitTk"); - evt.put(std::move(zDau2NofHitTk), zName + "Dau2NofHitTk"); - evt.put(std::move(zDau1NofHitSta), zName + "Dau1NofHitSta"); - evt.put(std::move(zDau2NofHitSta), zName + "Dau2NofHitSta"); - evt.put(std::move(zDau1NofMuChambers), zName + "Dau1NofMuChambers"); - evt.put(std::move(zDau1NofMuMatches), zName + "Dau1NofMuMatches"); - evt.put(std::move(zDau2NofMuChambers), zName + "Dau2NofMuChambers"); - evt.put(std::move(zDau2NofMuMatches), zName + "Dau2NofMuMatches"); - evt.put(std::move(zDau1Chi2), zName + "Dau1Chi2"); - evt.put(std::move(zDau2Chi2), zName + "Dau2Chi2"); - evt.put(std::move(zDau1TrkChi2), zName + "Dau1TrkChi2"); - evt.put(std::move(zDau2TrkChi2), zName + "Dau2TrkChi2"); - evt.put(std::move(zDau1dxyFromBS), zName + "Dau1dxyFromBS"); - evt.put(std::move(zDau2dxyFromBS), zName + "Dau2dxyFromBS"); - evt.put(std::move(zDau1dxyFromPV), zName + "Dau1dxyFromPV"); - evt.put(std::move(zDau2dxyFromPV), zName + "Dau2dxyFromPV"); - evt.put(std::move(zDau1dzFromBS), zName + "Dau1dzFromBS"); - evt.put(std::move(zDau2dzFromBS), zName + "Dau2dzFromBS"); - evt.put(std::move(zDau1dzFromPV), zName + "Dau1dzFromPV"); - evt.put(std::move(zDau2dzFromPV), zName + "Dau2dzFromPV"); - evt.put(std::move(trueZMass), zName + "TrueMass"); - evt.put(std::move(trueZPt), zName + "TruePt"); - evt.put(std::move(trueZEta), zName + "TrueEta"); - evt.put(std::move(trueZPhi), zName + "TruePhi"); - evt.put(std::move(trueZY), zName + "TrueY"); - } -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZToLLEdmNtupleDumper); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZToMuMuFilter.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZToMuMuFilter.cc deleted file mode 100644 index b1b261d033e55..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZToMuMuFilter.cc +++ /dev/null @@ -1,82 +0,0 @@ -/* \class ZToMuMuFilter - * - * \author Juan Alcaraz, CIEMAT - * - */ -#include "FWCore/Framework/interface/EDFilter.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandAssociation.h" - -class ZToMuMuFilter : public edm::EDFilter { -public: - ZToMuMuFilter(const edm::ParameterSet &); - -private: - bool filter(edm::Event &, const edm::EventSetup &) override; - edm::EDGetTokenT zCandsToken_; - edm::EDGetTokenT muIso1Token_; - edm::EDGetTokenT muIso2Token_; - double ptMin_, etaMin_, etaMax_, massMin_, massMax_, isoMax_; -}; - -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -using namespace edm; -using namespace std; -using namespace reco; - -ZToMuMuFilter::ZToMuMuFilter(const ParameterSet &cfg) - : zCandsToken_(consumes(cfg.getParameter("zCands"))), - muIso1Token_(consumes(cfg.getParameter("muonIsolations1"))), - muIso2Token_(consumes(cfg.getParameter("muonIsolations2"))), - ptMin_(cfg.getParameter("ptMin")), - etaMin_(cfg.getParameter("etaMin")), - etaMax_(cfg.getParameter("etaMax")), - massMin_(cfg.getParameter("massMin")), - massMax_(cfg.getParameter("massMax")), - isoMax_(cfg.getParameter("isoMax")) {} - -bool ZToMuMuFilter::filter(Event &ev, const EventSetup &) { - Handle zCands; - ev.getByToken(zCandsToken_, zCands); - Handle muIso1; - ev.getByToken(muIso1Token_, muIso1); - Handle muIso2; - ev.getByToken(muIso2Token_, muIso2); - unsigned int nZ = zCands->size(); - if (nZ == 0) - return false; - for (unsigned int i = 0; i < nZ; ++i) { - const Candidate &zCand = (*zCands)[i]; - double zMass = zCand.mass(); - if (zMass < massMin_ || zMass > massMax_) - return false; - if (zCand.numberOfDaughters() != 2) - return false; - const Candidate *dau0 = zCand.daughter(0); - const Candidate *dau1 = zCand.daughter(1); - double pt0 = dau0->pt(), pt1 = dau1->pt(); - if (pt0 < ptMin_ || pt1 < ptMin_) - return false; - double eta0 = dau0->eta(), eta1 = dau1->eta(); - if (eta0 < etaMin_ || eta0 > etaMax_) - return false; - if (eta1 < etaMin_ || eta1 > etaMax_) - return false; - CandidateRef mu0 = dau0->masterClone().castTo(); - CandidateRef mu1 = dau1->masterClone().castTo(); - double iso0 = (*muIso1)[mu0]; - double iso1 = (*muIso2)[mu1]; - if (iso0 > isoMax_) - return false; - if (iso1 > isoMax_) - return false; - } - return true; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZToMuMuFilter); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZToMuMuIsoDepositSelector.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZToMuMuIsoDepositSelector.cc deleted file mode 100644 index adc57070abef2..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZToMuMuIsoDepositSelector.cc +++ /dev/null @@ -1,162 +0,0 @@ -/* \class ZToMuMuIsolationSelector - * - * \author Luca Lista, INFN - * - */ - -struct IsolatedSelector { - IsolatedSelector(double cut) : cut_(cut) {} - bool operator()(double i1, double i2) const { return i1 < cut_ && i2 < cut_; } - double cut() const { return cut_; } - -private: - double cut_; -}; - -struct NonIsolatedSelector { - NonIsolatedSelector(double cut) : isolated_(cut) {} - bool operator()(double i1, double i2) const { return !isolated_(i1, i2); } - double cut() const { return isolated_.cut(); } - -private: - IsolatedSelector isolated_; -}; - -struct OneNonIsolatedSelector { - OneNonIsolatedSelector(double cut) : cut_(cut) {} - bool operator()(double i1, double i2) const { return (i1 < cut_ && i2 >= cut_) || (i1 >= cut_ && i2 < cut_); } - double cut() const { return cut_; } - -private: - double cut_; -}; - -struct TwoNonIsolatedSelector { - TwoNonIsolatedSelector(double cut) : cut_(cut) {} - bool operator()(double i1, double i2) const { return i1 >= cut_ && i2 >= cut_; } - double cut() const { return cut_; } - -private: - double cut_; -}; - -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -#include "FWCore/Utilities/interface/EDMException.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositVetos.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositDirection.h" -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" -#include "DataFormats/PatCandidates/interface/Isolation.h" - -using namespace reco; -using namespace isodeposit; - -template -class ZToMuMuIsoDepositSelector { -public: - ZToMuMuIsoDepositSelector(const edm::ParameterSet& cfg, edm::ConsumesCollector& iC) - : isolator_(cfg.template getParameter("isoCut")), - ptThreshold(cfg.getUntrackedParameter("ptThreshold")), - etEcalThreshold(cfg.getUntrackedParameter("etEcalThreshold")), - etHcalThreshold(cfg.getUntrackedParameter("etHcalThreshold")), - dRVetoTrk(cfg.getUntrackedParameter("deltaRVetoTrk")), - dRTrk(cfg.getUntrackedParameter("deltaRTrk")), - dREcal(cfg.getUntrackedParameter("deltaREcal")), - dRHcal(cfg.getUntrackedParameter("deltaRHcal")), - alpha(cfg.getUntrackedParameter("alpha")), - beta(cfg.getUntrackedParameter("beta")), - relativeIsolation(cfg.template getParameter("relativeIsolation")) {} - - template - double isolation(const T* t) const { - const pat::IsoDeposit* trkIso = t->isoDeposit(pat::TrackIso); - const pat::IsoDeposit* ecalIso = t->isoDeposit(pat::EcalIso); - const pat::IsoDeposit* hcalIso = t->isoDeposit(pat::HcalIso); - - Direction dir = Direction(t->eta(), t->phi()); - - IsoDeposit::AbsVetos vetosTrk; - vetosTrk.push_back(new ConeVeto(dir, dRVetoTrk)); - vetosTrk.push_back(new ThresholdVeto(ptThreshold)); - - IsoDeposit::AbsVetos vetosEcal; - vetosEcal.push_back(new ConeVeto(dir, 0.)); - vetosEcal.push_back(new ThresholdVeto(etEcalThreshold)); - - IsoDeposit::AbsVetos vetosHcal; - vetosHcal.push_back(new ConeVeto(dir, 0.)); - vetosHcal.push_back(new ThresholdVeto(etHcalThreshold)); - - double isovalueTrk = (trkIso->sumWithin(dRTrk, vetosTrk)); - double isovalueEcal = (ecalIso->sumWithin(dREcal, vetosEcal)); - double isovalueHcal = (hcalIso->sumWithin(dRHcal, vetosHcal)); - - double iso = - alpha * (((1 + beta) / 2 * isovalueEcal) + ((1 - beta) / 2 * isovalueHcal)) + ((1 - alpha) * isovalueTrk); - if (relativeIsolation) - iso /= t->pt(); - return iso; - } - - double candIsolation(const reco::Candidate* c) const { - const pat::Muon* mu = dynamic_cast(c); - if (mu != nullptr) - return isolation(mu); - const pat::GenericParticle* trk = dynamic_cast(c); - if (trk != nullptr) - return isolation(trk); - throw edm::Exception(edm::errors::InvalidReference) - << "Candidate daughter #0 is neither pat::Muons nor pat::GenericParticle\n"; - return -1; - } - bool operator()(const reco::Candidate& z) const { - if (z.numberOfDaughters() != 2) - throw edm::Exception(edm::errors::InvalidReference) - << "Candidate has " << z.numberOfDaughters() << " daughters, 2 expected\n"; - const reco::Candidate* dau0 = z.daughter(0); - const reco::Candidate* dau1 = z.daughter(1); - if (!(dau0->hasMasterClone() && dau1->hasMasterClone())) - throw edm::Exception(edm::errors::InvalidReference) << "Candidate daughters have no master clone\n"; - const reco::Candidate *m0 = &*dau0->masterClone(), *m1 = &*dau1->masterClone(); - return isolator_(candIsolation(m0), candIsolation(m1)); - } - -private: - Isolator isolator_; - double ptThreshold, etEcalThreshold, etHcalThreshold, dRVetoTrk, dRTrk, dREcal, dRHcal, alpha, beta; - bool relativeIsolation; -}; - -#include "CommonTools/UtilAlgos/interface/SingleObjectSelector.h" -#include "CommonTools/UtilAlgos/interface/AndSelector.h" -#include "CommonTools/UtilAlgos/interface/StringCutObjectSelector.h" - -typedef SingleObjectSelector< - reco::CandidateView, - AndSelector, StringCutObjectSelector > > - ZToMuMuIsolatedIDSelector; - -typedef SingleObjectSelector< - reco::CandidateView, - AndSelector, StringCutObjectSelector > > - ZToMuMuNonIsolatedIDSelector; - -typedef SingleObjectSelector< - reco::CandidateView, - AndSelector, StringCutObjectSelector > > - ZToMuMuOneNonIsolatedIDSelector; - -typedef SingleObjectSelector< - reco::CandidateView, - AndSelector, StringCutObjectSelector > > - ZToMuMuTwoNonIsolatedIDSelector; - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZToMuMuIsolatedIDSelector); -DEFINE_FWK_MODULE(ZToMuMuNonIsolatedIDSelector); -DEFINE_FWK_MODULE(ZToMuMuOneNonIsolatedIDSelector); -DEFINE_FWK_MODULE(ZToMuMuTwoNonIsolatedIDSelector); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZToMuMuIsolationSelector.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZToMuMuIsolationSelector.cc deleted file mode 100644 index 22f4bad6d92b9..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZToMuMuIsolationSelector.cc +++ /dev/null @@ -1,157 +0,0 @@ -/* \class ZToMuMuIsolationSelector - * - * \author Luca Lista, INFN - * - */ - -struct IsolatedSelector { - IsolatedSelector(double cut) : cut_(cut) {} - bool operator()(double i1, double i2) const { return i1 < cut_ && i2 < cut_; } - double cut() const { return cut_; } - -private: - double cut_; -}; - -struct NonIsolatedSelector { - NonIsolatedSelector(double cut) : isolated_(cut) {} - bool operator()(double i1, double i2) const { return !isolated_(i1, i2); } - double cut() const { return isolated_.cut(); } - -private: - IsolatedSelector isolated_; -}; - -struct OneNonIsolatedSelector { - OneNonIsolatedSelector(double cut) : cut_(cut) {} - bool operator()(double i1, double i2) const { return (i1 < cut_ && i2 >= cut_) || (i1 >= cut_ && i2 < cut_); } - double cut() const { return cut_; } - -private: - double cut_; -}; - -struct TwoNonIsolatedSelector { - TwoNonIsolatedSelector(double cut) : cut_(cut) {} - bool operator()(double i1, double i2) const { return i1 >= cut_ && i2 >= cut_; } - double cut() const { return cut_; } - -private: - double cut_; -}; - -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -#include "FWCore/Utilities/interface/EDMException.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -template -class ZToMuMuIsolationSelector { -public: - ZToMuMuIsolationSelector(const edm::ParameterSet &cfg, edm::ConsumesCollector &iC) - : isolator_(cfg.template getParameter("isoCut")) { - std::string iso = cfg.template getParameter("isolationType"); - if (iso == "track") { - leptonIsolation_ = &pat::Lepton::trackIso; - trackIsolation_ = &pat::GenericParticle::trackIso; - } else if (iso == "ecal") { - leptonIsolation_ = &pat::Lepton::ecalIso; - trackIsolation_ = &pat::GenericParticle::ecalIso; - } else if (iso == "hcal") { - leptonIsolation_ = &pat::Lepton::hcalIso; - trackIsolation_ = &pat::GenericParticle::hcalIso; - } else if (iso == "calo") { - leptonIsolation_ = &pat::Lepton::caloIso; - trackIsolation_ = &pat::GenericParticle::caloIso; - } else - throw edm::Exception(edm::errors::Configuration) << "Invalid isolation type: " << iso << ". Valid types are:" - << "'track', 'ecal', 'hcal', 'calo'\n"; - } - bool operator()(const reco::Candidate &z) const { - if (z.numberOfDaughters() != 2) - throw edm::Exception(edm::errors::InvalidReference) - << "Candidate has " << z.numberOfDaughters() << " daughters, 2 expected\n"; - const reco::Candidate *dau0 = z.daughter(0); - const reco::Candidate *dau1 = z.daughter(1); - if (!(dau0->hasMasterClone() && dau1->hasMasterClone())) - throw edm::Exception(edm::errors::InvalidReference) << "Candidate daughters have no master clone\n"; - const reco::Candidate *m0 = &*dau0->masterClone(), *m1 = &*dau1->masterClone(); - double iso0 = -1, iso1 = -1; - const pat::Muon *mu0 = dynamic_cast(m0); - if (mu0 != nullptr) { - iso0 = ((*mu0).*(leptonIsolation_))(); - } else { - const pat::GenericParticle *trk0 = dynamic_cast(m0); - if (trk0 != nullptr) { - iso0 = ((*trk0).*(trackIsolation_))(); - } else { - throw edm::Exception(edm::errors::InvalidReference) - << "Candidate daughter #0 is neither pat::Muons nor pat::GenericParticle\n"; - } - } - const pat::Muon *mu1 = dynamic_cast(m1); - if (mu1 != nullptr) { - iso1 = ((*mu1).*(leptonIsolation_))(); - } else { - const pat::GenericParticle *trk1 = dynamic_cast(m1); - if (trk1 != nullptr) { - iso1 = ((*trk1).*(trackIsolation_))(); - } else { - throw edm::Exception(edm::errors::InvalidReference) - << "Candidate daughter #1 is neither pat::Muons nor pat::GenericParticle\n"; - } - } - bool pass = isolator_(iso0, iso1); - return pass; - } - -private: - typedef float (pat::Lepton::*LeptonIsolationType)() const; - typedef float (pat::GenericParticle::*TrackIsolationType)() const; - LeptonIsolationType leptonIsolation_; - TrackIsolationType trackIsolation_; - Isolator isolator_; -}; - -namespace dummy { - void Isolationdummy() { - pat::Lepton pat; - //ignore return values - pat.trackIso(); - pat.ecalIso(); - pat.hcalIso(); - pat.caloIso(); - } -} // namespace dummy - -#include "CommonTools/UtilAlgos/interface/SingleObjectSelector.h" -#include "CommonTools/UtilAlgos/interface/AndSelector.h" -#include "CommonTools/UtilAlgos/interface/StringCutObjectSelector.h" - -typedef SingleObjectSelector< - reco::CandidateView, - AndSelector, StringCutObjectSelector > > - ZToMuMuIsolatedSelector; - -typedef SingleObjectSelector< - reco::CandidateView, - AndSelector, StringCutObjectSelector > > - ZToMuMuNonIsolatedSelector; - -typedef SingleObjectSelector< - reco::CandidateView, - AndSelector, StringCutObjectSelector > > - ZToMuMuOneNonIsolatedSelector; - -typedef SingleObjectSelector< - reco::CandidateView, - AndSelector, StringCutObjectSelector > > - ZToMuMuTwoNonIsolatedSelector; - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZToMuMuIsolatedSelector); -DEFINE_FWK_MODULE(ZToMuMuNonIsolatedSelector); -DEFINE_FWK_MODULE(ZToMuMuOneNonIsolatedSelector); -DEFINE_FWK_MODULE(ZToMuMuTwoNonIsolatedSelector); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/ZToMuMuSelector.cc b/ElectroWeakAnalysis/ZMuMu/plugins/ZToMuMuSelector.cc deleted file mode 100644 index 94d7a6855edee..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/ZToMuMuSelector.cc +++ /dev/null @@ -1,189 +0,0 @@ -/* \class ZToMuMuSelector - * - * \author Juan Alcaraz, CIEMAT - * - */ -#include "FWCore/Framework/interface/EDFilter.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" - -class ZToMuMuSelector : public edm::EDFilter { -public: - ZToMuMuSelector(const edm::ParameterSet &); - bool filter(edm::Event &, const edm::EventSetup &) override; - -private: - edm::EDGetTokenT muonToken_; - edm::EDGetTokenT > isoToken_; - double ptCut_; - double etaCut_; - double massZMin_; - double massZMax_; - - bool onlyGlobalMuons_; - edm::EDGetTokenT trackerToken_; - edm::EDGetTokenT > isoTrackerToken_; - int minTrackerHits_; -}; - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -using namespace edm; -using namespace std; -using namespace reco; - -ZToMuMuSelector::ZToMuMuSelector(const ParameterSet &cfg) - : muonToken_(consumes(cfg.getParameter("MuonTag"))), - isoToken_(consumes >(cfg.getParameter("IsolationTag"))), - ptCut_(cfg.getParameter("PtCut")), - etaCut_(cfg.getParameter("EtaCut")), - massZMin_(cfg.getParameter("MassZMin")), - massZMax_(cfg.getParameter("MassZMax")), - - onlyGlobalMuons_(cfg.getParameter("OnlyGlobalMuons")), - trackerToken_(mayConsume( - cfg.getUntrackedParameter("TrackerTag", edm::InputTag("ctfWithMaterialTracks")))), - isoTrackerToken_(mayConsume >( - cfg.getUntrackedParameter("TrackerIsolationTag", edm::InputTag("zMuMuTrackerIsolations")))), - minTrackerHits_(cfg.getUntrackedParameter("MinTrackerHits", 7)) {} - -bool ZToMuMuSelector::filter(Event &ev, const EventSetup &) { - Handle muonCollection; - ev.getByToken(muonToken_, muonCollection); - if (!muonCollection.isValid()) { - LogTrace("") << ">>> Muon collection does not exist !!!"; - return false; - } - - Handle > isoMap; - ev.getByToken(isoToken_, isoMap); - if (!isoMap.isValid()) { - LogTrace("") << ">>> ISO Muon collection does not exist !!!"; - return false; - } - - Handle trackerCollection; - Handle > isoTrackerMap; - if (!onlyGlobalMuons_) { - ev.getByToken(trackerToken_, trackerCollection); - if (!trackerCollection.isValid()) { - LogTrace("") << ">>> Tracker collection does not exist !!!"; - return false; - } - - ev.getByToken(isoTrackerToken_, isoTrackerMap); - if (!isoTrackerMap.isValid()) { - LogTrace("") << ">>> ISO Tracker collection does not exist !!!"; - return false; - } - } - - unsigned int npairs = 0; - bool globalCombinationFound = false; - for (unsigned int i = 0; i < muonCollection->size(); i++) { - TrackRef mu(muonCollection, i); - LogTrace("") << "> Processing muon number " << i << "..."; - double pt = mu->pt(); - LogTrace("") << "\t... pt= " << pt << " GeV"; - if (pt < ptCut_) - continue; - double eta = mu->eta(); - LogTrace("") << "\t... eta= " << eta; - if (fabs(eta) > etaCut_) - continue; - bool iso = (*isoMap)[mu]; - LogTrace("") << "\t... isolated? " << iso; - if (!iso) - continue; - - for (unsigned int j = i + 1; j < muonCollection->size(); j++) { - TrackRef mu2(muonCollection, j); - LogTrace("") << "> Processing second muon number " << j << "..."; - double pt2 = mu2->pt(); - LogTrace("") << "\t... pt2= " << pt2 << " GeV"; - if (pt2 < ptCut_) - continue; - double eta2 = mu2->eta(); - LogTrace("") << "\t... eta2= " << eta2; - if (fabs(eta2) > etaCut_) - continue; - bool iso2 = (*isoMap)[mu2]; - LogTrace("") << "\t... isolated2? " << iso2; - if (!iso2) - continue; - - double z_en = mu->p() + mu2->p(); - double z_px = mu->px() + mu2->px(); - double z_py = mu->py() + mu2->py(); - double z_pz = mu->pz() + mu2->pz(); - double massZ = z_en * z_en - z_px * z_px - z_py * z_py - z_pz * z_pz; - massZ = (massZ > 0) ? sqrt(massZ) : 0; - LogTrace("") << "\t... Z_en, Z_px, Z_py, Z_pz= " << z_en << ", " << z_px << ", " << z_py << ", " << z_pz - << " GeV"; - LogTrace("") << "\t... (GM-GM) Invariant reconstructed mass= " << massZ << " GeV"; - if (massZ < massZMin_) - continue; - if (massZ > massZMax_) - continue; - globalCombinationFound = true; - npairs++; - } - - if (onlyGlobalMuons_ || globalCombinationFound) - continue; - - for (unsigned int j = 0; j < trackerCollection->size(); j++) { - TrackRef mu2(trackerCollection, j); - LogTrace("") << "> Processing track number " << j << "..."; - double pt2 = mu2->pt(); - LogTrace("") << "\t... pt3= " << pt2 << " GeV"; - if (pt2 < ptCut_) - continue; - double eta2 = mu2->eta(); - LogTrace("") << "\t... eta3= " << eta2; - if (fabs(eta2) > etaCut_) - continue; - int nhits2 = mu2->numberOfValidHits(); - LogTrace("") << "\t... nhits3= " << nhits2; - if (nhits2 < minTrackerHits_) - continue; - bool iso2 = (*isoTrackerMap)[mu2]; - LogTrace("") << "\t... isolated3? " << iso2; - if (!iso2) - continue; - - double z_en = mu->p() + mu2->p(); - double z_px = mu->px() + mu2->px(); - double z_py = mu->py() + mu2->py(); - double z_pz = mu->pz() + mu2->pz(); - double massZ = z_en * z_en - z_px * z_px - z_py * z_py - z_pz * z_pz; - massZ = (massZ > 0) ? sqrt(massZ) : 0; - LogTrace("") << "\t... Z_en, Z_px, Z_py, Z_pz= " << z_en << ", " << z_px << ", " << z_py << ", " << z_pz - << " GeV"; - LogTrace("") << "\t... (GM-TK) Invariant reconstructed mass= " << massZ << " GeV"; - if (massZ < massZMin_) - continue; - if (massZ > massZMax_) - continue; - npairs++; - } - } - - LogTrace("") << "> Number of Z pairs found= " << npairs; - if (npairs < 1) { - LogTrace("") << ">>>> Event REJECTED"; - return false; - } - LogTrace("") << ">>>> Event SELECTED!!!"; - - return true; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(ZToMuMuSelector); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/dimuonHLTFilterCheck.cc b/ElectroWeakAnalysis/ZMuMu/plugins/dimuonHLTFilterCheck.cc deleted file mode 100644 index f168e85063021..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/dimuonHLTFilterCheck.cc +++ /dev/null @@ -1,308 +0,0 @@ -/* \class dimuonHLTFilterCheck - * - * author: Davide Piccolo - * - * check HLTFilter for dimuon studies: - * - */ - -#include "DataFormats/Common/interface/AssociationVector.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/Candidate/interface/OverlapChecker.h" -#include "DataFormats/Math/interface/deltaR.h" - -// access trigger results -#include "FWCore/Common/interface/TriggerNames.h" -#include -#include -#include - -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include -#include -#include -using namespace edm; -using namespace std; -using namespace reco; -using namespace trigger; - -class dimuonHLTFilterCheck : public edm::EDAnalyzer { -public: - dimuonHLTFilterCheck(const edm::ParameterSet& pset); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - vector nDimuonsByType(const Handle d); - vector nMuonsByType(const Handle d); - void endJob() override; - EDGetTokenT triggerResultsToken; - EDGetTokenT tracksToken; - EDGetTokenT muonToken; - EDGetTokenT anyDimuonToken; - - // general histograms - - // global counters - int counterMatrix[5][5]; -}; - -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/Candidate/interface/CandAssociation.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/Math/interface/LorentzVector.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include -#include -#include - -dimuonHLTFilterCheck::dimuonHLTFilterCheck(const ParameterSet& pset) - : // trigger results - triggerResultsToken(consumes(pset.getParameter("triggerResults"))), - tracksToken(consumes(pset.getParameter("tracks"))), - muonToken(consumes(pset.getParameter("muons"))), - anyDimuonToken(consumes(pset.getParameter("anyDimuon"))) { - Service fs; - - // general histograms - - // general counters - for (int i = 0; i < 5; i++) { - for (int j = 0; j < 5; j++) { - counterMatrix[i][j] = 0; - } - } -} - -void dimuonHLTFilterCheck::analyze(const Event& event, const EventSetup& setup) { - Handle triggerResults; // trigger response - Handle anyDimuon; // any dimuon pair - Handle tracks; // any track - Handle muons; // any muon - - event.getByToken(triggerResultsToken, triggerResults); - event.getByToken(anyDimuonToken, anyDimuon); - event.getByToken(tracksToken, tracks); - event.getByToken(muonToken, muons); - - const edm::TriggerNames& triggerNames = event.triggerNames(*triggerResults); - - // map of MU triggers of interest - map dimuonHLT_triggers; - dimuonHLT_triggers.insert(make_pair("HLT1MuonPrescalePt3", 0)); - dimuonHLT_triggers.insert(make_pair("HLT1MuonPrescalePt7x7", 1)); - dimuonHLT_triggers.insert(make_pair("HLT1MuonIso", 2)); - dimuonHLT_triggers.insert(make_pair("HLT1MuonNonIso15", 3)); - dimuonHLT_triggers.insert(make_pair("HLT2MuonNonIso", 4)); - // map of JET triggers of interest - map jetHLT_triggers; - jetHLT_triggers.insert(make_pair("HLT1jetPE5", 0)); - jetHLT_triggers.insert(make_pair("HLT1jetPE3", 1)); - jetHLT_triggers.insert(make_pair("HLT1jetPE1", 2)); - jetHLT_triggers.insert(make_pair("candHLT1jetPE7", 3)); - - bool trgMask[5]; - for (int i = 0; i < 5; i++) - trgMask[i] = false; - - // table of possible dimuons - string dimuonTableNames[10]; - dimuonTableNames[0] = "global-global"; - dimuonTableNames[1] = "global-trackerSta"; - dimuonTableNames[2] = "global-sta"; - dimuonTableNames[3] = "global-tracker"; - dimuonTableNames[4] = "trackerSta-trackerSta"; - dimuonTableNames[5] = "trackerSta-sta"; - dimuonTableNames[6] = "trackerSta-tracker"; - dimuonTableNames[7] = "sta-sta"; - dimuonTableNames[8] = "sta-tracker"; - dimuonTableNames[9] = "tracker-tracker"; - // table of possible muons - string muonTableNames[10]; - muonTableNames[0] = "global"; - muonTableNames[1] = "trackerSta"; - muonTableNames[2] = "sta"; - muonTableNames[3] = "tracker"; - - cout << "-------------------NEW event---------------------------" << endl; - // check the dimuon reconstruction - vector dimuonTable; - dimuonTable = nDimuonsByType(anyDimuon); - // check the muon reconstruction - vector muonTable; - muonTable = nMuonsByType(muons); - - if (triggerResults.product()->wasrun()) { - // cout << "at least one path out of " << triggerResults.product()->size() << " ran? " << triggerResults.product()->wasrun() << endl; - - if (triggerResults.product()->accept()) { - // cout << endl << "at least one path accepted? " << triggerResults.product()->accept() << endl; - - const unsigned int n_TriggerResults(triggerResults.product()->size()); - for (unsigned int itrig(0); itrig < n_TriggerResults; ++itrig) { - if (triggerResults.product()->accept(itrig)) { - map::iterator iterMuHLT = dimuonHLT_triggers.find(triggerNames.triggerName(itrig)); - if (iterMuHLT != dimuonHLT_triggers.end()) { - cout << "ecco la chiave Mu HLT " << (*iterMuHLT).second << endl; - if (triggerResults.product()->state(itrig) == 1) - trgMask[(*iterMuHLT).second] = true; - } // end if key found - map::iterator iterjetHLT = jetHLT_triggers.find(triggerNames.triggerName(itrig)); - if (iterjetHLT != jetHLT_triggers.end()) { - cout << "ecco la chiave jet HLT " << (*iterjetHLT).second << endl; - } // end if key found - - } // end if trigger accepted - } // end loop on triggerResults - } // end if at least one triggerResult accepted - } // end if wasRun - if (muonTable[0] > 1) { - for (unsigned int i = 0; i < muons->size(); ++i) { //loop on candidates - const Candidate& muCand = (*muons)[i]; //the candidate - CandidateBaseRef muCandRef = muons->refAt(i); - TrackRef muStaComponentRef = muCand.get(); // standalone part of muon - TrackRef muTrkComponentRef = muCand.get(); // track part of muon - if (muCandRef->isGlobalMuon()) { - cout << "muCand : " << i << " pt " << muCandRef->pt() << " eta " << muCandRef->eta() << endl; - cout << "muCandStaComponent : " << i << " pt " << muStaComponentRef->pt() << " eta " - << muStaComponentRef->eta() << endl; - } - } - } - - // fill counterMatrix - for (int i = 0; i < 5; i++) { - for (int j = 0; j < 5; j++) { - if (trgMask[i] && trgMask[j]) - counterMatrix[i][j]++; - } - } -} // end analyze - -vector dimuonHLTFilterCheck::nDimuonsByType(const Handle d) { - vector n_; - int nCat = - 10; // number of dimuon categories (0 = glb-glb, 1 = glb-trkSta, 2 = glb-sta, 3 = glb-trk, 4 = trkSta-trkSta, 5 = trkSta-sta, 6 = trkSta-trk, 7 = sta-sta, 8 = sta-trk, 9 trk-trk) - // reset vector - n_.reserve(nCat); - for (int i = 0; i < nCat; i++) - n_.push_back(0); - for (unsigned int i = 0; i < d->size(); ++i) { //loop on candidates - // const Candidate & dCand = (*d)[i]; //the candidate - bool mu0global = false; - bool mu0trackerSta = false; - bool mu0sta = false; - bool mu0tracker = false; - bool mu1global = false; - bool mu1trackerSta = false; - bool mu1sta = false; - bool mu1tracker = false; - CandidateBaseRef dCandRef = d->refAt(i); - const Candidate* mu0 = dCandRef->daughter(0); - const Candidate* mu1 = dCandRef->daughter(1); - if (mu0->isGlobalMuon()) - mu0global = true; - if (!mu0->isGlobalMuon() && mu0->isStandAloneMuon() && mu0->isTrackerMuon()) - mu0trackerSta = true; - if (!mu0->isGlobalMuon() && mu0->isStandAloneMuon() && !mu0->isTrackerMuon()) - mu0sta = true; - if (!mu0->isGlobalMuon() && !mu0->isStandAloneMuon() && mu0->isTrackerMuon()) - mu0tracker = true; - if (mu1->isGlobalMuon()) - mu1global = true; - if (!mu1->isGlobalMuon() && mu1->isStandAloneMuon() && mu1->isTrackerMuon()) - mu1trackerSta = true; - if (!mu1->isGlobalMuon() && mu1->isStandAloneMuon() && !mu1->isTrackerMuon()) - mu1sta = true; - if (!mu1->isGlobalMuon() && !mu1->isStandAloneMuon() && mu1->isTrackerMuon()) - mu1tracker = true; - - if (mu0global && mu1global) - n_[0]++; - if ((mu0global && mu1trackerSta) || (mu1global && mu0trackerSta)) - n_[1]++; - if ((mu0global && mu1sta) || (mu1global && mu0sta)) - n_[2]++; - if ((mu0global && mu1tracker) || (mu1global && mu0tracker)) - n_[3]++; - if (mu0trackerSta && mu1trackerSta) - n_[4]++; - if ((mu0trackerSta && mu1sta) || (mu1trackerSta && mu0sta)) - n_[5]++; - if ((mu0trackerSta && mu1tracker) || (mu1trackerSta && mu0tracker)) - n_[6]++; - if (mu0sta && mu1sta) - n_[7]++; - if ((mu0sta && mu1tracker) || (mu1sta && mu0tracker)) - n_[8]++; - if (mu0tracker && mu1tracker) - n_[9]++; - } - return n_; -} - -vector dimuonHLTFilterCheck::nMuonsByType(const Handle d) { - vector n_; - int nCat = 4; // number of muon categories (0 = glb, 1 = trkSta, 2 = sta, 3 = trk) - // reset vector - n_.reserve(nCat); - for (int i = 0; i < nCat; i++) - n_.push_back(0); - for (unsigned int i = 0; i < d->size(); ++i) { //loop on candidates - // const Candidate & dCand = (*d)[i]; //the candidate - bool muglobal = false; - bool mutrackerSta = false; - bool musta = false; - bool mutracker = false; - CandidateBaseRef muCandRef = d->refAt(i); - if (muCandRef->isGlobalMuon()) - muglobal = true; - if (!muCandRef->isGlobalMuon() && muCandRef->isStandAloneMuon() && muCandRef->isTrackerMuon()) - mutrackerSta = true; - if (!muCandRef->isGlobalMuon() && muCandRef->isStandAloneMuon() && !muCandRef->isTrackerMuon()) - musta = true; - if (!muCandRef->isGlobalMuon() && !muCandRef->isStandAloneMuon() && muCandRef->isTrackerMuon()) - mutracker = true; - cout << "muglobal " << muglobal << " mutrackserSta " << mutrackerSta << " must " << musta << " mutracker " - << mutracker << endl; - if (muglobal) - n_[0]++; - if (mutrackerSta) - n_[1]++; - if (musta) - n_[2]++; - if (mutracker) - n_[3]++; - } - return n_; -} - -void dimuonHLTFilterCheck::endJob() { - cout << "------------------------------------ Counters --------------------------------" << endl; - for (int i = 0; i < 5; i++) { - cout << "trg " << i << ": "; - for (int j = 0; j < 5; j++) { - cout << counterMatrix[i][j] << " "; - } - cout << endl; - } -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(dimuonHLTFilterCheck); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/gamma_radiative_analysis.cc b/ElectroWeakAnalysis/ZMuMu/plugins/gamma_radiative_analysis.cc deleted file mode 100644 index 05b30219eaf0f..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/gamma_radiative_analysis.cc +++ /dev/null @@ -1,319 +0,0 @@ -/* \class gamma_radiative_analyzer - * - * author: Pasquale Noli - * - * Gamma Radiative analyzer - * - * - */ -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "DataFormats/Common/interface/AssociationVector.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "DataFormats/Candidate/interface/OverlapChecker.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/Lepton.h" -#include "DataFormats/PatCandidates/interface/GenericParticle.h" -#include "DataFormats/PatCandidates/interface/PATObject.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositVetos.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositDirection.h" -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" -#include "DataFormats/PatCandidates/interface/Isolation.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/Candidate/interface/CandAssociation.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include -#include -#include -#include -#include "TH1.h" -#include "TH2.h" -//#include "TH3.h" - -using namespace edm; -using namespace std; -using namespace reco; -using namespace isodeposit; - -typedef edm::ValueMap IsolationCollection; - -class gamma_radiative_analyzer : public edm::EDAnalyzer { -public: - gamma_radiative_analyzer(const edm::ParameterSet& pset); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - void endJob() override; - - EDGetTokenT zMuMuToken_; - EDGetTokenT zMuMuMatchMapToken_; - EDGetTokenT zMuTkToken_; - EDGetTokenT zMuTkMatchMapToken_; - EDGetTokenT zMuSaToken_; - EDGetTokenT zMuSaMatchMapToken_; - double dRVeto_, dRTrk_, ptThreshold_; - //histograms - TH2D *h_gamma_pt_eta_, *h_mu_pt_eta_FSR_, *h_mu_pt_eta_no_FSR_; - - //boolean - bool FSR_mu, FSR_tk, FSR_mu0, FSR_mu1; - - //counter - int zmmcounter, zmscounter, zmtcounter, numOfEvent, numofGamma; -}; - -gamma_radiative_analyzer::gamma_radiative_analyzer(const ParameterSet& pset) - : zMuMuToken_(consumes(pset.getParameter("zMuMu"))), - zMuMuMatchMapToken_(mayConsume(pset.getParameter("zMuMuMatchMap"))), - zMuTkToken_(consumes(pset.getParameter("zMuTk"))), - zMuTkMatchMapToken_(mayConsume(pset.getParameter("zMuTkMatchMap"))), - zMuSaToken_(consumes(pset.getParameter("zMuSa"))), - zMuSaMatchMapToken_(mayConsume(pset.getParameter("zMuSaMatchMap"))) { - zmmcounter = 0; - zmscounter = 0; - zmtcounter = 0; - numOfEvent = 0; - numofGamma = 0; - Service fs; - - // general histograms - h_gamma_pt_eta_ = fs->make("h_gamma_pt_eta", "pt vs eta of gamma", 100, 20, 100, 100, -2.0, 2.0); - h_mu_pt_eta_FSR_ = fs->make("h_mu_pt_eta_FSR", "pt vs eta of muon with FSR", 100, 20, 100, 100, -2.0, 2.0); - h_mu_pt_eta_no_FSR_ = - fs->make("h_mu_pt_eta_no_FSR", "pt vs eta of of muon withot FSR", 100, 20, 100, 100, -2.0, 2.0); -} - -void gamma_radiative_analyzer::analyze(const Event& event, const EventSetup& setup) { - Handle zMuMu; //Collection of Z made by Mu global + Mu global - Handle zMuMuMatchMap; //Map of Z made by Mu global + Mu global with MC - event.getByToken(zMuMuToken_, zMuMu); - Handle zMuTk; //Collection of Z made by Mu global + Track - Handle zMuTkMatchMap; - event.getByToken(zMuTkToken_, zMuTk); - Handle zMuSa; //Collection of Z made by Mu global + Sa - Handle zMuSaMatchMap; - event.getByToken(zMuSaToken_, zMuSa); - numOfEvent++; - // ZMuMu - if (!zMuMu->empty()) { - event.getByToken(zMuMuMatchMapToken_, zMuMuMatchMap); - for (unsigned int i = 0; i < zMuMu->size(); ++i) { //loop on candidates - - const Candidate& zMuMuCand = (*zMuMu)[i]; //the candidate - CandidateBaseRef zMuMuCandRef = zMuMu->refAt(i); - - CandidateBaseRef dau0 = zMuMuCand.daughter(0)->masterClone(); - CandidateBaseRef dau1 = zMuMuCand.daughter(1)->masterClone(); - const pat::Muon& mu0 = dynamic_cast(*dau0); //cast in patMuon - const pat::Muon& mu1 = dynamic_cast(*dau1); - - double zmass = zMuMuCand.mass(); - double pt0 = mu0.pt(); - double pt1 = mu1.pt(); - double eta0 = mu0.eta(); - double eta1 = mu1.eta(); - if (pt0 > 20 && pt1 > 20 && abs(eta0) < 2 && abs(eta1) < 2 && zmass > 20 && zmass < 200) { - GenParticleRef zMuMuMatch = (*zMuMuMatchMap)[zMuMuCandRef]; - if (zMuMuMatch.isNonnull()) { // ZMuMu matched - zmmcounter++; - FSR_mu0 = false; - FSR_mu1 = false; - - //MonteCarlo Study - const reco::GenParticle* muMc0 = mu0.genLepton(); - const reco::GenParticle* muMc1 = mu1.genLepton(); - const Candidate* motherMu0 = muMc0->mother(); - const Candidate* motherMu1 = muMc1->mother(); - int num_dau_muon0 = motherMu0->numberOfDaughters(); - int num_dau_muon1 = motherMu1->numberOfDaughters(); - if (num_dau_muon0 > 1) { - for (int j = 0; j < num_dau_muon0; ++j) { - int id = motherMu0->daughter(j)->pdgId(); - if (id == 22) { - double etaG = motherMu0->daughter(j)->eta(); - double ptG = motherMu0->daughter(j)->pt(); - h_gamma_pt_eta_->Fill(ptG, etaG); - h_mu_pt_eta_FSR_->Fill(pt0, eta0); - FSR_mu0 = true; - numofGamma++; - } - } - } //end check of gamma - if (!FSR_mu0) - h_mu_pt_eta_no_FSR_->Fill(pt0, eta0); - if (num_dau_muon1 > 1) { - for (int j = 0; j < num_dau_muon1; ++j) { - int id = motherMu1->daughter(j)->pdgId(); - if (id == 22) { - double etaG = motherMu1->daughter(j)->eta(); - double ptG = motherMu1->daughter(j)->pt(); - h_gamma_pt_eta_->Fill(ptG, etaG); - h_mu_pt_eta_FSR_->Fill(pt1, eta1); - FSR_mu1 = true; - numofGamma++; - } - } - } //end check of gamma - if (!FSR_mu1) - h_mu_pt_eta_no_FSR_->Fill(pt1, eta1); - } // end MC match - } //end of cuts - } // end loop on ZMuMu cand - } // end if ZMuMu size > 0 - - // ZMuSa - if (!zMuSa->empty()) { - event.getByToken(zMuSaMatchMapToken_, zMuSaMatchMap); - for (unsigned int i = 0; i < zMuSa->size(); ++i) { //loop on candidates - - const Candidate& zMuSaCand = (*zMuSa)[i]; //the candidate - CandidateBaseRef zMuSaCandRef = zMuSa->refAt(i); - - CandidateBaseRef dau0 = zMuSaCand.daughter(0)->masterClone(); - CandidateBaseRef dau1 = zMuSaCand.daughter(1)->masterClone(); - const pat::Muon& mu0 = dynamic_cast(*dau0); //cast in patMuon - const pat::Muon& mu1 = dynamic_cast(*dau1); - - double zmass = zMuSaCand.mass(); - double pt0 = mu0.pt(); - double pt1 = mu1.pt(); - double eta0 = mu0.eta(); - double eta1 = mu1.eta(); - if (pt0 > 20 && pt1 > 20 && abs(eta0) < 2 && abs(eta1) < 2 && zmass > 20 && zmass < 200) { - GenParticleRef zMuSaMatch = (*zMuSaMatchMap)[zMuSaCandRef]; - if (zMuSaMatch.isNonnull()) { // ZMuSa matched - FSR_mu0 = false; - FSR_mu1 = false; - zmscounter++; - //MonteCarlo Study - const reco::GenParticle* muMc0 = mu0.genLepton(); - const reco::GenParticle* muMc1 = mu1.genLepton(); - const Candidate* motherMu0 = muMc0->mother(); - const Candidate* motherMu1 = muMc1->mother(); - int num_dau_muon0 = motherMu0->numberOfDaughters(); - int num_dau_muon1 = motherMu1->numberOfDaughters(); - if (num_dau_muon0 > 1) { - for (int j = 0; j < num_dau_muon0; ++j) { - int id = motherMu0->daughter(j)->pdgId(); - if (id == 22) { - double etaG = motherMu0->daughter(j)->eta(); - double ptG = motherMu0->daughter(j)->pt(); - h_gamma_pt_eta_->Fill(ptG, etaG); - h_mu_pt_eta_FSR_->Fill(pt0, eta0); - numofGamma++; - FSR_mu0 = true; - } - } - } //end check of gamma - if (!FSR_mu0) - h_mu_pt_eta_no_FSR_->Fill(pt0, eta0); - if (num_dau_muon1 > 1) { - for (int j = 0; j < num_dau_muon1; ++j) { - int id = motherMu1->daughter(j)->pdgId(); - if (id == 22) { - double etaG = motherMu1->daughter(j)->eta(); - double ptG = motherMu1->daughter(j)->pt(); - h_gamma_pt_eta_->Fill(ptG, etaG); - h_mu_pt_eta_FSR_->Fill(pt1, eta1); - numofGamma++; - FSR_mu1 = true; - } - } - } //end check of gamma - if (!FSR_mu1) - h_mu_pt_eta_no_FSR_->Fill(pt1, eta1); - } // end MC match - } //end of cuts - } // end loop on ZMuSa cand - } // end if ZMuSa size > 0 - - //ZMuTk - if (!zMuTk->empty()) { - event.getByToken(zMuTkMatchMapToken_, zMuTkMatchMap); - for (unsigned int i = 0; i < zMuTk->size(); ++i) { //loop on candidates - const Candidate& zMuTkCand = (*zMuTk)[i]; //the candidate - CandidateBaseRef zMuTkCandRef = zMuTk->refAt(i); - - CandidateBaseRef dau0 = zMuTkCand.daughter(0)->masterClone(); - CandidateBaseRef dau1 = zMuTkCand.daughter(1)->masterClone(); - const pat::Muon& mu0 = dynamic_cast(*dau0); //cast in patMuon - const pat::GenericParticle& mu1 = dynamic_cast(*dau1); - - double zmass = zMuTkCand.mass(); - double pt0 = mu0.pt(); - double pt1 = mu1.pt(); - double eta0 = mu0.eta(); - double eta1 = mu1.eta(); - if (pt0 > 20 && pt1 > 20 && abs(eta0) < 2 && abs(eta1) < 2 && zmass > 20 && zmass < 200) { //kinematical cuts - GenParticleRef zMuTkMatch = (*zMuTkMatchMap)[zMuTkCandRef]; - if (zMuTkMatch.isNonnull()) { // ZMuTk matched - FSR_mu = false; - FSR_tk = false; - zmtcounter++; - //MonteCarlo Study - const reco::GenParticle* muMc0 = mu0.genLepton(); - const reco::GenParticle* muMc1 = mu1.genParticle(); - const Candidate* motherMu0 = muMc0->mother(); - const Candidate* motherMu1 = muMc1->mother(); - int num_dau_muon0 = motherMu0->numberOfDaughters(); - int num_dau_muon1 = motherMu1->numberOfDaughters(); - if (num_dau_muon0 > 1) { - for (int j = 0; j < num_dau_muon0; ++j) { - int id = motherMu0->daughter(j)->pdgId(); - if (id == 22) { - double etaG = motherMu0->daughter(j)->eta(); - double ptG = motherMu0->daughter(j)->pt(); - h_gamma_pt_eta_->Fill(ptG, etaG); - h_mu_pt_eta_FSR_->Fill(pt0, eta0); - numofGamma++; - FSR_mu0 = true; - } - } - } //end check of gamma - if (!FSR_mu0) - h_mu_pt_eta_no_FSR_->Fill(pt0, eta0); - if (num_dau_muon1 > 1) { - for (int j = 0; j < num_dau_muon1; ++j) { - int id = motherMu1->daughter(j)->pdgId(); - if (id == 22) { - double etaG = motherMu1->daughter(j)->eta(); - double ptG = motherMu1->daughter(j)->pt(); - h_gamma_pt_eta_->Fill(ptG, etaG); - h_mu_pt_eta_FSR_->Fill(pt1, eta1); - numofGamma++; - FSR_mu1 = true; - } - } - } //end check of gamma - if (!FSR_mu1) - h_mu_pt_eta_no_FSR_->Fill(pt1, eta1); - } // end MC match - } //end Kine-cuts - } // end loop on ZMuTk cand - } // end if ZMuTk size > 0 -} // end analyze - -void gamma_radiative_analyzer::endJob() { - cout << " ============= Summary ==========" << endl; - cout << " Numero di eventi = " << numOfEvent << endl; - cout << " 1)Numero di ZMuMu matched dopo i tagli cinematici = " << zmmcounter << endl; - cout << " 2)Numero di ZMuSa matched dopo i tagli cinematici = " << zmscounter << endl; - cout << " 3)Numero di ZMuTk matched dopo i tagli cinematici = " << zmtcounter << endl; - cout << " 4)Number of gamma = " << numofGamma << endl; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(gamma_radiative_analyzer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/triggerEfficiency.cc b/ElectroWeakAnalysis/ZMuMu/plugins/triggerEfficiency.cc deleted file mode 100644 index cc40f20da9ffa..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/triggerEfficiency.cc +++ /dev/null @@ -1,168 +0,0 @@ -/* \class testAnalyzer - * author: Noli Pasquale - * version 0.1 - * TriggerEfficiency module - * - */ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Candidate/interface/Particle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/TriggerObjectStandAlone.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/Common/interface/AssociationVector.h" -#include "DataFormats/PatCandidates/interface/PATObject.h" -#include "TH1.h" -#include -#include -#include -#include -using namespace edm; -using namespace std; -using namespace reco; -using namespace pat; - -class testAnalyzer : public edm::EDAnalyzer { -public: - testAnalyzer(const edm::ParameterSet& pset); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - void endJob() override; - int SingleTrigger_, DoubleTrigger_, NoTrigger_, zmumuIncrement_; - EDGetTokenT > selectMuonToken_; - EDGetTokenT zMuMuToken_; - string pathName_; - int nbinsEta_; - double minEta_, maxEta_; - int nbinsPt_; - double minPt_, maxPt_; - int nbinsEtaPt_; - TH1D* h_pt_distribution_; - TH1D *h_numberTrigMuon_, *h_numberMuon_; - TH1D *h_numberTrigMuon_ptStudy_, *h_numberMuon_ptStudy_; - TH1D* h_EtaDist_Pt80_; - vector vectorPt, vectorEta; -}; - -testAnalyzer::testAnalyzer(const edm::ParameterSet& pset) - : selectMuonToken_(consumes >(pset.getParameter("selectMuon"))), - zMuMuToken_(consumes(pset.getParameter("ZMuMu"))), - pathName_(pset.getParameter("pathName")), - nbinsEta_(pset.getParameter("EtaBins")), - minEta_(pset.getParameter("minEta")), - maxEta_(pset.getParameter("maxEta")), - nbinsPt_(pset.getParameter("PtBins")), - minPt_(pset.getParameter("minPt")), - maxPt_(pset.getParameter("maxPt")), - nbinsEtaPt_(pset.getParameter("EtaPt80Bins")) { - SingleTrigger_ = 0; - DoubleTrigger_ = 0; - NoTrigger_ = 0; - zmumuIncrement_ = 0; - Service fs; - h_pt_distribution_ = fs->make("PtResolution ", "Pt Resolution", 200, -4., 4.); - h_numberMuon_ = fs->make("Denominatore", "Number of Muons vs Eta", nbinsEta_, minEta_, maxEta_); - h_numberTrigMuon_ = - fs->make("NumeratoreTrigMuon", "Number of Triggered Muons vs Eta", nbinsEta_, minEta_, maxEta_); - h_numberMuon_ptStudy_ = fs->make("DenominatorePtStudy", "Number of Muons vs Pt", nbinsPt_, minPt_, maxPt_); - h_numberTrigMuon_ptStudy_ = - fs->make("NumeratoreTrigMuonPtStudy", "Number of Triggered Muons vs Pt", nbinsPt_, minPt_, maxPt_); - h_EtaDist_Pt80_ = fs->make("EtaDistr", "Eta distribution (Pt>80)", nbinsEtaPt_, minEta_, maxEta_); -} - -void testAnalyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) { - Handle > selectMuon; - event.getByToken(selectMuonToken_, selectMuon); - Handle zMuMu; - event.getByToken(zMuMuToken_, zMuMu); - int zmumuSize = zMuMu->size(); - if (zmumuSize > 0) { - for (int i = 0; i < zmumuSize; ++i) { - bool singleTrigFlag0 = false; - bool singleTrigFlag1 = false; - zmumuIncrement_++; - const Candidate& zMuMuCand = (*zMuMu)[i]; - CandidateBaseRef dau0 = zMuMuCand.daughter(0)->masterClone(); - CandidateBaseRef dau1 = zMuMuCand.daughter(1)->masterClone(); - const pat::Muon& mu0 = dynamic_cast(*dau0); //cast in patMuon - const pat::Muon& mu1 = dynamic_cast(*dau1); - const pat::TriggerObjectStandAloneCollection mu0HLTMatches = mu0.triggerObjectMatchesByPath(pathName_); - const pat::TriggerObjectStandAloneCollection mu1HLTMatches = mu1.triggerObjectMatchesByPath(pathName_); - double EtaPatMu0 = mu0.eta(); - double EtaPatMu1 = mu1.eta(); - double PtPatMu0 = mu0.pt(); - double PtPatMu1 = mu1.pt(); - h_numberMuon_->Fill(EtaPatMu0); - h_numberMuon_->Fill(EtaPatMu1); - h_numberMuon_ptStudy_->Fill(PtPatMu0); - h_numberMuon_ptStudy_->Fill(PtPatMu1); - int dimTrig0 = mu0HLTMatches.size(); - int dimTrig1 = mu1HLTMatches.size(); - if (dimTrig0 != 0) { - for (int j = 0; j < dimTrig0; ++j) { - singleTrigFlag0 = true; - h_numberTrigMuon_->Fill(EtaPatMu0); - h_numberTrigMuon_ptStudy_->Fill(PtPatMu0); - double PtTrig = mu0HLTMatches[j].pt(); - double PtDif = PtTrig - PtPatMu0; - h_pt_distribution_->Fill(PtDif); - } - } else { - if (PtPatMu0 > 80) { - h_EtaDist_Pt80_->Fill(EtaPatMu0); - vectorPt.push_back(PtPatMu0); - vectorEta.push_back(EtaPatMu0); - } - } - if (dimTrig1 != 0) { - for (int j = 0; j < dimTrig1; ++j) { - singleTrigFlag1 = true; - h_numberTrigMuon_->Fill(EtaPatMu1); - h_numberTrigMuon_ptStudy_->Fill(PtPatMu1); - double PtTrig = mu0HLTMatches[j].pt(); - double PtDif = PtTrig - PtPatMu1; - h_pt_distribution_->Fill(PtDif); - } - } else { - if (PtPatMu0 > 80) { - h_EtaDist_Pt80_->Fill(EtaPatMu1); - vectorPt.push_back(PtPatMu0); - vectorEta.push_back(EtaPatMu0); - } - } - - if (singleTrigFlag0 && singleTrigFlag1) - DoubleTrigger_++; - if (singleTrigFlag0 && !singleTrigFlag1) - SingleTrigger_++; - if (!singleTrigFlag0 && singleTrigFlag1) - SingleTrigger_++; - if (!singleTrigFlag0 && !singleTrigFlag1) - NoTrigger_++; - - } //end loop on ZMuMu candidates - } //end check on ZMuMu -} - -void testAnalyzer::endJob() { - cout << "DoubleTrigger = " << DoubleTrigger_ << " , SingleTrigger = " << SingleTrigger_ - << " , NoTrigger = " << NoTrigger_ << " ,zmumuIncrement = " << zmumuIncrement_ << endl; - double OneTrig = (double)SingleTrigger_ / (double)zmumuIncrement_; - double DoubleTrig = (double)DoubleTrigger_ / (double)zmumuIncrement_; - cout << "eps^2 = " << DoubleTrig << endl; - cout << "2eps(1 - eps) = " << OneTrig << endl; - int dimVec = vectorPt.size(); - for (int i = 0; i < dimVec; ++i) - cout << "Pt = " << vectorPt[i] << " ==> Eta = " << vectorEta[i] << endl; -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(testAnalyzer); diff --git a/ElectroWeakAnalysis/ZMuMu/plugins/zPdfUnc.cc b/ElectroWeakAnalysis/ZMuMu/plugins/zPdfUnc.cc deleted file mode 100644 index 708d267062956..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/plugins/zPdfUnc.cc +++ /dev/null @@ -1,218 +0,0 @@ -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" -#include -#include "TH1.h" - -class zPdfUnc : public edm::EDAnalyzer { -public: - zPdfUnc(const edm::ParameterSet& pset); - -private: - void analyze(const edm::Event& event, const edm::EventSetup& setup) override; - void endJob() override; - edm::EDGetTokenT genToken_; - edm::EDGetTokenT > pdfweightsToken_; - unsigned int pdfmember_, nbinsMass_, nbinsPt_, nbinsAng_; - double massMax_, ptMax_, angMax_; - double accPtMin_, accMassMin_, accMassMax_, accEtaMin_, accEtaMax_, accMassMinDenominator_; - TH1F* h_nZ_; - TH1F *h_mZMC_, *h_ptZMC_, *h_phiZMC_, *h_thetaZMC_, *h_etaZMC_, *h_rapidityZMC_; - TH1F *hardpt, *softpt, *hardeta, *softeta; - TH1F* h_weight_histo; - bool isMCatNLO_; - double nAcc_, nAccReW_, nBothMuHasZHasGrandMa_; - std::string filename_; -}; - -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" - -#include "HepMC/WeightContainer.h" -#include "HepMC/GenEvent.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include -#include -#include - -using namespace std; -using namespace reco; -using namespace edm; - -zPdfUnc::zPdfUnc(const ParameterSet& pset) - : genToken_(consumes(pset.getParameter("genParticles"))), - pdfweightsToken_(consumes >(pset.getParameter("pdfweights"))), - pdfmember_(pset.getUntrackedParameter("pdfmember")), - nbinsMass_(pset.getUntrackedParameter("nbinsMass")), - nbinsPt_(pset.getUntrackedParameter("nbinsPt")), - nbinsAng_(pset.getUntrackedParameter("nbinsAng")), - massMax_(pset.getUntrackedParameter("massMax")), - ptMax_(pset.getUntrackedParameter("ptMax")), - angMax_(pset.getUntrackedParameter("angMax")), - accPtMin_(pset.getUntrackedParameter("accPtMin")), - accMassMin_(pset.getUntrackedParameter("accMassMin")), - accMassMax_(pset.getUntrackedParameter("accMassMax")), - accEtaMin_(pset.getUntrackedParameter("accEtaMin")), - accEtaMax_(pset.getUntrackedParameter("accEtaMax")), - accMassMinDenominator_(pset.getUntrackedParameter("accMassMinDenominator")), - isMCatNLO_(pset.getUntrackedParameter("isMCatNLO")), - filename_(pset.getUntrackedParameter("outfilename")) { - cout << ">>> Z Histogrammer constructor" << endl; - Service fs; - - TFileDirectory ZMCHisto = fs->mkdir("ZMCHisto"); - h_nZ_ = ZMCHisto.make("ZNumber", "number of Z particles", 11, -0.5, 10.5); - h_weight_histo = ZMCHisto.make("weight_histo", "weight_histo", 20, -10, 10); - - h_mZMC_ = ZMCHisto.make("ZMCMass", "Z MC mass (GeV/c^{2})", nbinsMass_, 0, massMax_); - h_ptZMC_ = ZMCHisto.make("ZMCPt", "Z MC p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - hardpt = ZMCHisto.make("hardpt", "hard muon p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - softpt = ZMCHisto.make("softpt", "soft muon p_{t} (GeV/c)", nbinsPt_, 0, ptMax_); - - h_phiZMC_ = ZMCHisto.make("ZMCPhi", "Z MC #phi", nbinsAng_, -angMax_, angMax_); - h_thetaZMC_ = ZMCHisto.make("ZMCTheta", "Z MC #theta", nbinsAng_, 0, angMax_); - h_etaZMC_ = ZMCHisto.make("ZMCEta", "Z MC #eta", nbinsAng_, -angMax_, angMax_); - h_rapidityZMC_ = ZMCHisto.make("ZMCRapidity", "Z MC y", nbinsAng_, -angMax_, angMax_); - - hardeta = ZMCHisto.make("hard muon eta", "hard muon #eta", nbinsAng_, -angMax_, angMax_); - softeta = ZMCHisto.make("soft muon eta", "soft muon #eta", nbinsAng_, -angMax_, angMax_); - nAcc_ = 0.; - nAccReW_ = 0; - nBothMuHasZHasGrandMa_ = 0; -} - -void zPdfUnc::analyze(const edm::Event& event, const edm::EventSetup& setup) { - cout << ">>> Z Histogrammer analyze" << endl; - - Handle gen; - Handle > pdfweights; - - event.getByToken(genToken_, gen); - event.getByToken(pdfweightsToken_, pdfweights); - - // get weight and fill it to histogram - std::vector weights = (*pdfweights); - - unsigned int nmembers = weights.size(); - - double weight = weights[pdfmember_]; - - h_weight_histo->Fill(weight); - - cout << "found nmember: " << nmembers << endl; - cout << "taken the member n " << pdfmember_ << " weight= " << weight << endl; - - std::vector muons; - - for (unsigned int i = 0; i < gen->size(); ++i) { - const GenParticle& muMC = (*gen)[i]; - // filling only muons coming form Z - if (abs(muMC.pdgId()) == 13 && muMC.status() == 1 && muMC.numberOfMothers() > 0) { - if (muMC.mother()->numberOfMothers() > 0) { - cout << "I'm getting a muon \n" - << "with " - << "muMC.numberOfMothers() " << muMC.numberOfMothers() << "\n the first mother has pdgId " - << muMC.mother()->pdgId() << "with " - << "muMC.mother()->numberOfMothers() " << muMC.mother()->numberOfMothers() - << "\n the first grandma has pdgId " << muMC.mother()->mother()->pdgId() << endl; - if (muMC.mother()->mother()->pdgId() == 23) - muons.push_back(muMC); - } - } - } - - cout << "finally I selected " << muons.size() << " muons" << endl; - - // if there are at least two muons, - // calculate invarant mass of first two and fill it into histogram - - double inv_mass = 0.0; - double Zpt_ = 0.0; - double Zeta_ = 0.0; - double Ztheta_ = 0.0; - double Zphi_ = 0.0; - double Zrapidity_ = 0.0; - - if (muons.size() > 1) { - if (muons[0].mother()->mother()->pdgId() == 23 && muons[1].mother()->mother()->pdgId() == 23) - nBothMuHasZHasGrandMa_++; - math::XYZTLorentzVector tot_momentum(muons[0].p4()); - math::XYZTLorentzVector mom2(muons[1].p4()); - tot_momentum += mom2; - inv_mass = sqrt(tot_momentum.mass2()); - - Zpt_ = tot_momentum.pt(); - Zeta_ = tot_momentum.eta(); - Ztheta_ = tot_momentum.theta(); - Zphi_ = tot_momentum.phi(); - Zrapidity_ = tot_momentum.Rapidity(); - - // IMPORTANT: use the weight of the event ... - - double weight_sign = weight; - //double weight_sign = 1. ; - // fill the denominator numbers only if mass>accMassMinDenominator and go on in that case - if (inv_mass > accMassMinDenominator_) { - h_mZMC_->Fill(inv_mass, weight_sign); - h_ptZMC_->Fill(Zpt_, weight_sign); - h_etaZMC_->Fill(Zeta_, weight_sign); - h_thetaZMC_->Fill(Ztheta_, weight_sign); - h_phiZMC_->Fill(Zphi_, weight_sign); - h_rapidityZMC_->Fill(Zrapidity_, weight_sign); - - double pt1 = muons[0].pt(); - double pt2 = muons[1].pt(); - double eta1 = muons[0].eta(); - double eta2 = muons[1].eta(); - if (pt1 > pt2) { - hardpt->Fill(pt1, weight_sign); - softpt->Fill(pt2, weight_sign); - hardeta->Fill(eta1, weight_sign); - softeta->Fill(eta2, weight_sign); - } else { - hardpt->Fill(pt2, weight_sign); - softpt->Fill(pt1, weight_sign); - hardeta->Fill(eta2, weight_sign); - softeta->Fill(eta1, weight_sign); - } - - //evaluating the geometric acceptance - if (pt1 >= accPtMin_ && pt2 >= accPtMin_ && fabs(eta1) >= accEtaMin_ && fabs(eta2) >= accEtaMin_ && - fabs(eta1) <= accEtaMax_ && fabs(eta2) <= accEtaMax_ && inv_mass >= accMassMin_ && inv_mass <= accMassMax_) { - nAcc_++; - nAccReW_ += weight; - } - } - } -} - -void zPdfUnc::endJob() { - cout << " number of events accepted :" << nAcc_ << endl; - cout << " number of events accepted reweigthed :" << nAccReW_ << endl; - double nev = h_mZMC_->GetEntries(); - double nev_weigthed = h_mZMC_->Integral(); - cout << " number of total events :" << nev << endl; - cout << " number of total weighted events :" << nev_weigthed << endl; - cout << " number of cases in which BothMuHasZHasGrandMa :" << nBothMuHasZHasGrandMa_ << endl; - double eff = (double)nAcc_ / (double)h_mZMC_->GetEntries(); - double eff_rew = (double)nAccReW_ / (double)h_mZMC_->Integral(0, nbinsMass_ + 1); - double err = sqrt(eff * (1. - eff) / (double)h_mZMC_->GetEntries()); - double err_rew = sqrt(eff_rew * (1. - eff_rew) / (double)h_mZMC_->Integral(0, nbinsMass_ + 1)); - cout << " geometric acceptance: " << eff << "+/-" << err << endl; - cout << " geometric acceptance reweighted: " << eff_rew << "+/-" << err_rew << endl; - - ofstream myfile; - myfile.open(filename_.c_str(), std::ios::app); - myfile << eff << " " << eff_rew << " " << nev << " " << nev_weigthed << endl; - myfile.close(); -} -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(zPdfUnc); diff --git a/ElectroWeakAnalysis/ZMuMu/python/ZMuMuAnalysisNtupler_cff.py b/ElectroWeakAnalysis/ZMuMu/python/ZMuMuAnalysisNtupler_cff.py deleted file mode 100644 index 1cce3708768b9..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/python/ZMuMuAnalysisNtupler_cff.py +++ /dev/null @@ -1,748 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from ElectroWeakAnalysis.ZMuMu.ZMuMuCategoriesSequences_cff import * - -import copy - - -### CandViewNtpProducer Configuration - common to all categories. - -goodZToMuMuEdmNtuple = cms.EDProducer( - "CandViewNtpProducer", - src=cms.InputTag("goodZToMuMuAtLeast1HLTLoose"), - lazyParser=cms.untracked.bool(True), - prefix=cms.untracked.string("z"), - eventInfo=cms.untracked.bool(True), - variables = cms.VPSet( - cms.PSet( - tag = cms.untracked.string("Mass"), - quantity = cms.untracked.string("mass") - ), - cms.PSet( - tag = cms.untracked.string("Pt"), - quantity = cms.untracked.string("pt") - ), - cms.PSet( - tag = cms.untracked.string("Eta"), - quantity = cms.untracked.string("eta") - ), - cms.PSet( - tag = cms.untracked.string("Phi"), - quantity = cms.untracked.string("phi") - ), - cms.PSet( - tag = cms.untracked.string("Y"), - quantity = cms.untracked.string("rapidity") - ), - cms.PSet( - tag = cms.untracked.string("Dau1Pt"), - quantity = cms.untracked.string("daughter(0).masterClone.pt") - ), - cms.PSet( - tag = cms.untracked.string("Dau2Pt"), - quantity = cms.untracked.string("daughter(1).masterClone.pt") - ), - cms.PSet( - tag = cms.untracked.string("Dau1Q"), - quantity = cms.untracked.string("daughter(0).masterClone.charge") - ), - cms.PSet( - tag = cms.untracked.string("Dau2Q"), - quantity = cms.untracked.string("daughter(1).masterClone.charge") - ), - cms.PSet( - tag = cms.untracked.string("Dau1Eta"), - quantity = cms.untracked.string("daughter(0).masterClone.eta") - ), - cms.PSet( - tag = cms.untracked.string("Dau2Eta"), - quantity = cms.untracked.string("daughter(1).masterClone.eta") - ), - cms.PSet( - tag = cms.untracked.string("Dau1Phi"), - quantity = cms.untracked.string("daughter(0).masterClone.phi") - ), - cms.PSet( - tag = cms.untracked.string("Dau2Phi"), - quantity = cms.untracked.string("daughter(1).masterClone.phi") - ), - -# cms.PSet( -# tag = cms.untracked.string("Dau1NofHit"), -# quantity = cms.untracked.string("?1>0?1:0"), -# ), - - - -# cms.PSet( -# tag = cms.untracked.string("Dau1NofHit"), -# quantity = cms.untracked.string("?(daughter(0).masterClone.isGlobalMuon=1 || daughter(0).masterClone.isTrackerMuon=1)?daughter(0).masterClone.numberOfValidHits:daughter(0).masterClone.outerTrack.numberOfValidHits") -# ), -# cms.PSet( -# tag = cms.untracked.string("Dau1NofHitTk"), -# quantity = cms.untracked.string("?(daughter(0).masterClone.isGlobalMuon==1 || daughter(0).masterClone.isTrackerMuon=1)?daughter(0).masterClone.innerTrack.numberOfValidHits:0") -# ), -# cms.PSet( -# tag = cms.untracked.string("Dau1NofHitSta"), -# quantity = cms.untracked.string("?(daughter(0).masterClone.isGlobalMuon==1 ||daughter(0).masterClone.isStandAloneMuon==1 ) ? daughter(0).masterClone.outerTrack.numberOfValidHits : 0") -# ), -# cms.PSet( -# tag = cms.untracked.string("Dau1NofMuChambers"), -# quantity = cms.untracked.string("?(daughter(0).masterClone.isGlobalMuon==1 ||daughter(0).masterClone.isStandAloneMuon==1 ) ? daughter(0).masterClone.numberOfChambers :0") -# ), -# cms.PSet( -# tag = cms.untracked.string("Dau1NofMuMatches"), -# quantity = cms.untracked.string("?(daughter(0).masterClone.isGlobalMuon==1 ||daughter(0).masterClone.isStandAloneMuon==1 ) ? daughter(0).masterClone.numberOfMatches : 0") -# ), - - cms.PSet( - tag = cms.untracked.string("Dau1Iso"), - quantity = cms.untracked.string("daughter(0).masterClone.userIsolation('pat::User4Iso')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2Iso"), - quantity = cms.untracked.string("daughter(1).masterClone.userIsolation('pat::User4Iso')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1relIso"), - quantity = cms.untracked.string("daughter(0).masterClone.userIsolation('pat::User5Iso')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2relIso"), - quantity = cms.untracked.string("daughter(1).masterClone.userIsolation('pat::User5Iso')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1TrkIso"), - quantity = cms.untracked.string("daughter(0).masterClone.userIsolation('pat::User1Iso')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2TrkIso"), - quantity = cms.untracked.string("daughter(1).masterClone.userIsolation('pat::User1Iso')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1EcalIso"), - quantity = cms.untracked.string("daughter(0).masterClone.userIsolation('pat::User2Iso')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2EcalIso"), - quantity = cms.untracked.string("daughter(1).masterClone.userIsolation('pat::User2Iso')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1HcalIso"), - quantity = cms.untracked.string("daughter(0).masterClone.userIsolation('pat::User3Iso')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2HcalIso"), - quantity = cms.untracked.string("daughter(1).masterClone.userIsolation('pat::User3Iso')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1dxyFromBS"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_dxyFromBS')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1dzFromBS"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_dzFromBS')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1dxyFromPV"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_dxyFromPV')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1dzFromPV"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_dzFromPV')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1HLTBit"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_HLTBit')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1HLTSize"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_HLTSize')") - ), -cms.PSet( - tag = cms.untracked.string("Dau1HLTDeltaR"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_HLTDeltaR')") - ), -cms.PSet( - tag = cms.untracked.string("Dau1HLTDeltaEta"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_HLTDeltaEta')") - ), -cms.PSet( - tag = cms.untracked.string("Dau1HLTDeltaPhi"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_HLTDeltaPhi')") - ), -cms.PSet( - tag = cms.untracked.string("Dau1HLTDeltaPtOverPt"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_HLTDeltaPtOverPt')") - ), -cms.PSet( - tag = cms.untracked.string("Dau1HLTPt"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_HLTPt')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2dxyFromBS"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_dxyFromBS')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2dzFromBS"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_dzFromBS')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2dxyFromPV"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_dxyFromPV')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2dzFromPV"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_dzFromPV')") - ), - cms.PSet( - tag = cms.untracked.string("VtxNormChi2"), - quantity = cms.untracked.string("vertexNormalizedChi2") - ), - -# cms.PSet( -# tag = cms.untracked.string("Dau1TrkChi2"), -# quantity = cms.untracked.string("?(daughter(0).masterClone.isGlobalMuon==1 || daughter(0).masterClone.isTrackerMuon=1)?daughter(0).masterClone.innerTrack.normalizedChi2:0") -# ), -# cms.PSet( -# tag = cms.untracked.string("Dau1MuEnergyHad"), -# quantity = cms.untracked.string("?daughter(0).masterClone.isGlobalMuon==1||daughter(0).masterClone.isTrackerMuon==1 ?daughter(0).masterClone.calEnergy.had:-1") -# ), - # cms.PSet( - # tag = cms.untracked.string("Dau1MuEnergyEm"), - # quantity = cms.untracked.string("?daughter(0).masterClone.isGlobalMuon==1||daughter(0).masterClone.isTrackerMuon==1 ?daughter(0).masterClone.calEnergy.em:-1") - # ), - cms.PSet( - tag = cms.untracked.string("TrueMass"), - quantity = cms.untracked.string("userFloat('TrueMass')") - ), - cms.PSet( - tag = cms.untracked.string("TruePt"), - quantity = cms.untracked.string("userFloat('TruePt')") - ), - cms.PSet( - tag = cms.untracked.string("TrueEta"), - quantity = cms.untracked.string("userFloat('TrueEta')") - ), - cms.PSet( - tag = cms.untracked.string("TruePhi"), - quantity = cms.untracked.string("userFloat('TruePhi')") - ), - cms.PSet( - tag = cms.untracked.string("TrueY"), - quantity = cms.untracked.string("userFloat('TrueY')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1Chi2"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_Chi2')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1TrkChi2"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_TrkChi2')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1SaChi2"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_SaChi2')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2Chi2"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_Chi2')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2TrkChi2"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_TrkChi2')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2SaChi2"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_SaChi2')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1NofMuonHits"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_NofMuonHits')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1SaNofMuonHits"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_SaNofMuonHits')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2NofMuonHits"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_NofMuonHits')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2SaNofMuonHits"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_SaNofMuonHits')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1NofStripHits"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_NofStripHits')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1NofPixelHits"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_NofPixelHits')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1TrkNofStripHits"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_TrkNofStripHits')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2TrkNofStripHits"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_TrkNofStripHits')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1TrkNofPixelHits"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_TrkNofPixelHits')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2TrkNofPixelHits"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_TrkNofPixelHits')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1NofMuChambers"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_NofMuChambers')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2NofMuChambers"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_NofMuChambers')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1NofMuMatches"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_NofMuMatches')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2NofMuMatches"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_NofMuMatches')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1MuEnergyEm"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_MuEnergyEm')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2MuEnergyEm"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_MuEnergyEm')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1MuEnergyHad"), - quantity = cms.untracked.string("daughter(0).masterClone.userFloat('zDau_MuEnergyHad')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2MuEnergyHad"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_MuEnergyHad')") - ), - - ) - - ) - - - -### zMuMu vector of PSet is common to all categories except zMuTrk category - -zMuMu=( - - -# cms.PSet( -# tag = cms.untracked.string("Dau2NofHitSta"), - -# quantity = cms.untracked.string("?(daughter(1).masterClone.isGlobalMuon==1 ||daughter(1).masterClone.isStandAloneMuon==1 )?daughter(1).masterClone.outerTrack.numberOfValidHits: -1") -# ), -# cms.PSet( -# tag = cms.untracked.string("Dau2NofMuChambers"), -# quantity = cms.untracked.string("?(daughter(1).masterClone.isGlobalMuon==1 ||daughter(1).masterClone.isStandAloneMuon==1 )?daughter(1).masterClone.numberOfChambers: -1") -# ), -# cms.PSet( -# tag = cms.untracked.string("Dau2NofMuMatches"), -# quantity = cms.untracked.string("?(daughter(1).masterClone.isGlobalMuon==1 ||daughter(1).masterClone.isStandAloneMuon==1 )?daughter(1).masterClone.numberOfMatches: -1") -# ), - cms.PSet( - tag = cms.untracked.string("Dau2HLTBit"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_HLTBit')") - ), -cms.PSet( - tag = cms.untracked.string("Dau2HLTSize"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_HLTSize')") - ), -cms.PSet( - tag = cms.untracked.string("Dau2HLTDeltaR"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_HLTDeltaR')") - ), -cms.PSet( - tag = cms.untracked.string("Dau2HLTDeltaEta"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_HLTDeltaEta')") - ), -cms.PSet( - tag = cms.untracked.string("Dau2HLTDeltaPhi"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_HLTDeltaPhi')") - ), -cms.PSet( - tag = cms.untracked.string("Dau2HLTDeltaPtOverPt"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_HLTDeltaPtOverPt')") - ), -cms.PSet( - tag = cms.untracked.string("Dau2HLTPt"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_HLTPt')") - ), - - - - -# cms.PSet( -# tag = cms.untracked.string("Dau2MuEnergyHad"), -# quantity = cms.untracked.string("?daughter(1).masterClone.isGlobalMuon==1 ||daughter(1).masterClone.isTrackerMuon==1?daughter(1).masterClone.calEnergy.had:-1") -# ), -# cms.PSet( -# tag = cms.untracked.string("Dau2MuEnergyEm"), -# quantity = cms.untracked.string("?daughter(1).masterClone.isGlobalMuon==1 ||daughter(1).masterClone.isTrackerMuon==1?daughter(1).masterClone.calEnergy.em:-1") -# ), - - cms.PSet( - tag = cms.untracked.string("Dau1GlobalMuonBit"), - quantity = cms.untracked.string("daughter(0).masterClone.isGlobalMuon") - ), - cms.PSet( - tag = cms.untracked.string("Dau2GlobalMuonBit"), - quantity = cms.untracked.string("daughter(1).masterClone.isGlobalMuon") - ), - cms.PSet( - tag = cms.untracked.string("Dau1StandAloneBit"), - quantity = cms.untracked.string("daughter(0).masterClone.isStandAloneMuon") - ), - cms.PSet( - tag = cms.untracked.string("Dau2StandAloneBit"), - quantity = cms.untracked.string("daughter(1).masterClone.isStandAloneMuon") - ), - cms.PSet( - tag = cms.untracked.string("Dau1TrackerMuonBit"), - quantity = cms.untracked.string("daughter(0).masterClone.isTrackerMuon") - ), - cms.PSet( - tag = cms.untracked.string("Dau2TrackerMuonBit"), - quantity = cms.untracked.string("daughter(1).masterClone.isTrackerMuon") - ), - cms.PSet( - tag = cms.untracked.string("Dau2NofStripHits"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_NofStripHits')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2NofPixelHits"), - quantity = cms.untracked.string("daughter(1).masterClone.userFloat('zDau_NofPixelHits')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1Iso03SumPt"), - quantity = cms.untracked.string("daughter(0).masterClone.trackIso") - ), - cms.PSet( - tag = cms.untracked.string("Dau2Iso03SumPt"), - quantity = cms.untracked.string("daughter(1).masterClone.trackIso") - ), - cms.PSet( - tag = cms.untracked.string("Dau1Iso03EmEt"), - quantity = cms.untracked.string("daughter(0).masterClone.ecalIso") - ), - cms.PSet( - tag = cms.untracked.string("Dau2Iso03EmEt"), - quantity = cms.untracked.string("daughter(1).masterClone.ecalIso") - ), - cms.PSet( - tag = cms.untracked.string("Dau1Iso03HadEt"), - quantity = cms.untracked.string("daughter(0).masterClone.hcalIso") - ), - cms.PSet( - tag = cms.untracked.string("Dau2Iso03HadEt"), - quantity = cms.untracked.string("daughter(1).masterClone.hcalIso") - ), - - - - - ) - -### zGolden vector of PSet is specific for zGolden category - - -zGolden=( - - - ## cms.PSet( -## tag = cms.untracked.string("Dau1NofHit"), -## quantity = cms.untracked.string("daughter(0).masterClone.numberOfValidHits") -## ), -## cms.PSet( -## tag = cms.untracked.string("Dau1NofHitTk"), -## quantity = cms.untracked.string("daughter(0).masterClone.innerTrack.numberOfValidHits") -## ), -## cms.PSet( -## tag = cms.untracked.string("Dau1NofHitSta"), -## quantity = cms.untracked.string("daughter(0).masterClone.outerTrack.numberOfValidHits") -## ), -## cms.PSet( -## tag = cms.untracked.string("Dau1NofMuChambers"), -## quantity = cms.untracked.string(" daughter(0).masterClone.numberOfChambers ") -## ), -## cms.PSet( -## tag = cms.untracked.string("Dau1NofMuMatches"), -## quantity = cms.untracked.string("daughter(0).masterClone.numberOfMatches") -## ), - -## cms.PSet( -## tag = cms.untracked.string("Dau1TrkChi2"), -## quantity = cms.untracked.string("daughter(0).masterClone.innerTrack.normalizedChi2") -## ), -## cms.PSet( -## tag = cms.untracked.string("Dau1MuEnergyHad"), -## quantity = cms.untracked.string("daughter(0).masterClone.calEnergy.had") -## ), -## cms.PSet( -## tag = cms.untracked.string("Dau1MuEnergyEm"), -## quantity = cms.untracked.string("daughter(0).masterClone.calEnergy.em") -## ), - - - -## cms.PSet( -## tag = cms.untracked.string("Dau2NofHitSta"), -## quantity = cms.untracked.string("daughter(1).masterClone.outerTrack.numberOfValidHits") -## ), -## cms.PSet( -## tag = cms.untracked.string("Dau2NofMuChambers"), -## quantity = cms.untracked.string("daughter(1).masterClone.numberOfChambers") -## ), -## cms.PSet( -## tag = cms.untracked.string("Dau2NofMuMatches"), -## quantity = cms.untracked.string("daughter(1).masterClone.numberOfMatches") -## ), - - -## cms.PSet( -## tag = cms.untracked.string("Dau2MuEnergyHad"), -## quantity = cms.untracked.string("daughter(1).masterClone.calEnergy.had") -## ), -## cms.PSet( -## tag = cms.untracked.string("Dau2MuEnergyEm"), -## quantity = cms.untracked.string("daughter(1).masterClone.calEnergy.em") -## ), - -## cms.PSet( -## tag = cms.untracked.string("Dau1Chi2"), -## quantity = cms.untracked.string("daughter(0).masterClone.normChi2") -## ), -## cms.PSet( -## tag = cms.untracked.string("Dau2Chi2"), -## quantity = cms.untracked.string("daughter(1).masterClone.normChi2") -## ), -## cms.PSet( -## tag = cms.untracked.string("Dau2NofHit"), -## quantity = cms.untracked.string("daughter(1).masterClone.numberOfValidHits") -## ), -## cms.PSet( -## tag = cms.untracked.string("Dau2NofHitTk"), -## quantity = cms.untracked.string("daughter(1).masterClone.innerTrack.numberOfValidHits") -## ), -## cms.PSet( -## tag = cms.untracked.string("Dau2TrkChi2"), -## quantity = cms.untracked.string("daughter(1).masterClone.innerTrack.normalizedChi2") -## ), - cms.PSet( - tag = cms.untracked.string("SaGlbMass"), - quantity = cms.untracked.string("userFloat('SaGlbMass')") - ), - cms.PSet( - tag = cms.untracked.string("GlbSaMass"), - quantity = cms.untracked.string("userFloat('GlbSaMass')") - ), - cms.PSet( - tag = cms.untracked.string("SaSaMass"), - quantity = cms.untracked.string("userFloat('SaSaMass')") - ), - cms.PSet( - tag = cms.untracked.string("MassSa"), - quantity = cms.untracked.string("userFloat('MassSa')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1SaPt"), - quantity = cms.untracked.string("userFloat('Dau1SaPt')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2SaPt"), - quantity = cms.untracked.string("userFloat('Dau2SaPt')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1SaEta"), - quantity = cms.untracked.string("userFloat('Dau1SaEta')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2SaEta"), - quantity = cms.untracked.string("userFloat('Dau2SaEta')") - ), - cms.PSet( - tag = cms.untracked.string("Dau1SaPhi"), - quantity = cms.untracked.string("userFloat('Dau1SaPhi')") - ), - cms.PSet( - tag = cms.untracked.string("Dau2SaPhi"), - quantity = cms.untracked.string("userFloat('Dau2SaPhi')") - ), - - ) - - - -### zMUSa vector of PSet is specific for zMuSa category - -zMuSa = ( - -# cms.PSet( -# tag= cms.untracked.string("Dau2NofHit"), -# quantity = cms.untracked.string("?daughter(1).masterClone.isStandAloneMuon==1?daughter(1).masterClone.outerTrack.numberOfValidHits:daughter(1).masterClone.numberOfValidHits") -# ), -# cms.PSet( -# tag = cms.untracked.string("Dau2Chi2"), -# quantity = cms.untracked.string("?daughter(1).masterClone.isStandAloneMuon==1?daughter(1).masterClone.outerTrack.normalizedChi2:daughter(1).masterClone.normChi2") -# ), - - ) - - -### zMuTrkMu vector of PSet is specific for zMuTrkMu category - -zMuTrkMu=( -# cms.PSet( -# tag = cms.untracked.string("Dau1Chi2"), -# quantity = cms.untracked.string("?daughter(0).masterClone.isTrackerMuon==1 ? daughter(0).masterClone.innerTrack.normalizedChi2 : daughter(0).masterClone.normChi2") -# ), -# cms.PSet( -# tag = cms.untracked.string("Dau2Chi2"), -# quantity = cms.untracked.string("?daughter(1).masterClone.isTrackerMuon==1 ? daughter(1).masterClone.innerTrack.normalizedChi2 : daughter(1).masterClone.normChi2") -# ), -# cms.PSet( -# tag = cms.untracked.string("Dau2NofHit"), -# quantity = cms.untracked.string("?daughter(1).masterClone.isTrackerMuon==1 ? daughter(1).masterClone.innerTrack.numberOfValidHits: daughter(1).masterClone.numberOfValidHits") -# ), -# cms.PSet( -# tag = cms.untracked.string("Dau2NofHitTk"), -# quantity = cms.untracked.string("daughter(1).masterClone.innerTrack.numberOfValidHits") -# ), -# - ) - - -### zMuTrk vector of PSet is specific for zMuTrk category - - -zMuTrk =( -## cms.PSet( -## tag = cms.untracked.string("Dau2NofHit"), -## quantity = cms.untracked.string("daughter(1).masterClone.track.numberOfValidHits") -## ), -## cms.PSet( -## tag = cms.untracked.string("Dau2NofHitTk"), -## quantity = cms.untracked.string("daughter(1).masterClone.track.numberOfValidHits") -## ), -## cms.PSet( -## tag = cms.untracked.string("Dau2Chi2"), -## quantity = cms.untracked.string("daughter(1).masterClone.track.normalizedChi2") -## ), - - cms.PSet( - tag = cms.untracked.string("Dau1GlobalMuonBit"), - quantity = cms.untracked.string("daughter(0).masterClone.isGlobalMuon") - ), - cms.PSet( - tag = cms.untracked.string("Dau1StandAloneBit"), - quantity = cms.untracked.string("daughter(0).masterClone.isStandAloneMuon") - ), - cms.PSet( - tag = cms.untracked.string("Dau1TrackerMuonBit"), - quantity = cms.untracked.string("daughter(0).masterClone.isTrackerMuon") - ), - cms.PSet( - tag = cms.untracked.string("Dau1Iso03SumPt"), - quantity = cms.untracked.string("daughter(0).masterClone.trackIso") - ), - cms.PSet( - tag = cms.untracked.string("Dau2Iso03SumPt"), - quantity = cms.untracked.string("daughter(1).masterClone.trackIso") - ), - cms.PSet( - tag = cms.untracked.string("Dau1Iso03EmEt"), - quantity = cms.untracked.string("daughter(0).masterClone.ecalIso") - ), - cms.PSet( - tag = cms.untracked.string("Dau2Iso03EmEt"), - quantity = cms.untracked.string("daughter(1).masterClone.ecalIso") - ), - cms.PSet( - tag = cms.untracked.string("Dau1Iso03HadEt"), - quantity = cms.untracked.string("daughter(0).masterClone.hcalIso") - ), - cms.PSet( - tag = cms.untracked.string("Dau2Iso03HadEt"), - quantity = cms.untracked.string("daughter(1).masterClone.hcalIso") - ) - - ) - - - -goodZToMuMuEdmNtupleLoose= copy.deepcopy(goodZToMuMuEdmNtuple) -goodZToMuMuEdmNtupleLoose.variables += zMuMu -goodZToMuMuEdmNtupleLoose.variables += zGolden -goodZToMuMuEdmNtupleLoose.prefix = cms.untracked.string("zGolden") -goodZToMuMuPathLoose.__iadd__(goodZToMuMuEdmNtupleLoose) -goodZToMuMuPathLoose.setLabel("goodZToMuMuEdmLoose") - - -goodZToMuMuSameChargeEdmNtupleLoose= copy.deepcopy(goodZToMuMuEdmNtuple) -goodZToMuMuSameChargeEdmNtupleLoose.src = cms.InputTag("goodZToMuMuSameChargeAtLeast1HLTLoose") -goodZToMuMuSameChargeEdmNtupleLoose.prefix = cms.untracked.string("zSameCharge") -goodZToMuMuSameChargeEdmNtupleLoose.variables += zMuMu -goodZToMuMuSameChargeEdmNtupleLoose.variables += zGolden -goodZToMuMuSameChargePathLoose.__iadd__(goodZToMuMuSameChargeEdmNtupleLoose) -goodZToMuMuSameChargePathLoose.setLabel("goodZToMuMuSameChargeLoose") - - - -goodZToMuMuOneStandAloneEdmNtupleLoose= copy.deepcopy(goodZToMuMuEdmNtuple) -goodZToMuMuOneStandAloneEdmNtupleLoose.src=cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLTLoose") -goodZToMuMuOneStandAloneEdmNtupleLoose.prefix=cms.untracked.string("zMuSta") -goodZToMuMuOneStandAloneEdmNtupleLoose.variables += zMuMu -goodZToMuMuOneStandAloneEdmNtupleLoose.variables += zMuSa -goodZToMuMuOneStandAloneMuonPathLoose.__iadd__(goodZToMuMuOneStandAloneEdmNtupleLoose) -goodZToMuMuOneStandAloneMuonPathLoose.setLabel("goodZToMuMuOneStandAloneMuonLoose") - -goodZToMuMuOneTrackEdmNtupleLoose= copy.deepcopy(goodZToMuMuEdmNtuple) -goodZToMuMuOneTrackEdmNtupleLoose.src=cms.InputTag("goodZToMuMuOneTrackFirstHLTLoose") -goodZToMuMuOneTrackEdmNtupleLoose.prefix=cms.untracked.string("zMuTrk") -goodZToMuMuOneTrackEdmNtupleLoose.variables += zMuTrk -goodZToMuMuOneTrackPathLoose.__iadd__(goodZToMuMuOneTrackEdmNtupleLoose) -goodZToMuMuOneTrackPathLoose.setLabel("goodZToMuMuOneTrackLoose") - -goodZToMuMuOneTrackerMuonEdmNtupleLoose= copy.deepcopy(goodZToMuMuEdmNtuple) -goodZToMuMuOneTrackerMuonEdmNtupleLoose.src=cms.InputTag("goodZToMuMuOneTrackerMuonFirstHLTLoose") -goodZToMuMuOneTrackerMuonEdmNtupleLoose.prefix=cms.untracked.string("zMuTrkMu") -goodZToMuMuOneTrackerMuonEdmNtupleLoose.variables += zMuMu -goodZToMuMuOneTrackerMuonEdmNtupleLoose.variables += zMuTrkMu -goodZToMuMuOneTrackerMuonPathLoose.__iadd__(goodZToMuMuOneTrackerMuonEdmNtupleLoose) -goodZToMuMuOneTrackerMuonPathLoose.setLabel("goodZToMuMuOneTrackerMuonLoose") - - -ntuplesOut = cms.OutputModule( - "PoolOutputModule", - fileName = cms.untracked.string('NtupleLooseTestNew.root'), - outputCommands = cms.untracked.vstring( - "drop *", - "keep *_eventVtxInfoNtuple_*_*", - "keep *_goodZToMuMuEdmNtupleLoose_*_*", - "keep *_goodZToMuMuSameChargeEdmNtupleLoose_*_*", - "keep *_goodZToMuMuOneStandAloneEdmNtupleLoose_*_*", - "keep *_goodZToMuMuOneTrackEdmNtupleLoose_*_*", - "keep *_goodZToMuMuOneTrackerMuonEdmNtupleLoose_*_*", - - ) - ) - - -ntuplesOut.setLabel("ntuplesOut") -NtuplesOut.__iadd__(ntuplesOut) -NtuplesOut.setLabel("NtuplesOut") - - diff --git a/ElectroWeakAnalysis/ZMuMu/python/ZMuMuAnalysisSchedules_cff.py b/ElectroWeakAnalysis/ZMuMu/python/ZMuMuAnalysisSchedules_cff.py deleted file mode 100644 index 45abfcbc0b2c4..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/python/ZMuMuAnalysisSchedules_cff.py +++ /dev/null @@ -1,318 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from ElectroWeakAnalysis.ZMuMu.ZMuMuCategoriesSequences_cff import * -from ElectroWeakAnalysis.Skimming.zMuMu_SubskimPaths_cff import * -#from ElectroWeakAnalysis.Skimming.zMuMu_SubskimPathsWithMCTruth_cff import * - - -### controll by hand that all the path are in ... :-( :-( :-( - -## dimuonsSeq = cms.Sequence( -## dimuonsHLTFilter * -## goodMuonRecoForDimuon * -## dimuons * -## dimuonsGlobal * -## dimuonsOneStandAloneMuon * -## dimuonsFilter -## ) - -## dimuonsOneTrackSeq= cms.Sequence(dimuonsHLTFilter+ -## goodMuonRecoForDimuon+ -## dimuonsOneTrack+ -## dimuonsOneTrackFilter -## ) - - - - - - -#goodZToMuMuPathLoose.replace(goodZToMuMuLoose, dimuonsSeq * goodZToMuMuLoose) -goodZToMuMuPathLoose._seq = dimuonsPath._seq + goodZToMuMuPathLoose._seq - -goodZToMuMu2HLTPathLoose._seq = dimuonsPath._seq + goodZToMuMu2HLTPathLoose._seq - - -#goodZToMuMu2HLTPathLoose.replace(goodZToMuMuLoose, dimuonsSeq * goodZToMuMuLoose) - -#goodZToMuMu1HLTPathLoose.replace(goodZToMuMuLoose, dimuonsSeq * goodZToMuMuLoose) - -goodZToMuMu1HLTPathLoose._seq= dimuonsPath._seq + goodZToMuMu1HLTPathLoose._seq - - -goodZToMuMuAB1HLTPathLoose._seq = dimuonsPath._seq + goodZToMuMuAB1HLTPathLoose._seq - -goodZToMuMuBB2HLTPathLoose._seq = dimuonsPath._seq + goodZToMuMuBB2HLTPathLoose._seq - - -#goodZToMuMuSameChargePathLoose.replace(dimuonsGlobalSameCharge, dimuonsSeq * dimuonsGlobalSameCharge) -goodZToMuMuSameChargePathLoose._seq = dimuonsPath._seq + goodZToMuMuSameChargePathLoose._seq - - -## notGoodZToMuMuSeq = cms.Sequence( -## dimuonsSeq * -## ~goodZToMuMu * -## zToMuMuOneStandAloneMuonLoose -## ) - -## notGoodZToMuMuSeq.setLabel("notGoodZToMuMuSeq") - -## goodZToMuMuOneStandAloneMuonPathLoose.remove(goodZToMuMu) - -#goodZToMuMuOneStandAloneMuonPathLoose.replace(zToMuMuOneStandAloneMuonLoose, notGoodZToMuMuSeq) - -goodZToMuMuOneStandAloneMuonPathLoose._seq = dimuonsPath._seq + goodZToMuMuOneStandAloneMuonPathLoose._seq - -## notGoodZToMuMuSeq = cms.Sequence( -## dimuonsSeq + -## dimuonsOneTrackSeq+ -## ~goodZToMuMu + -## ~zToMuMuOneStandAloneMuon + -## zToMuGlobalMuOneTrack -## ) - -goodZToMuMuOneTrackerMuonPathLoose._seq = dimuonsPath._seq + goodZToMuMuOneTrackerMuonPathLoose._seq - - -## notGoodZToMuMuSeq.setLabel("notGoodZToMuMuSeq") - -## goodZToMuMuOneTrackPathLoose.remove( goodZToMuMu) -## goodZToMuMuOneTrackPathLoose.remove(zToMuMuOneStandAloneMuon ) - -#goodZToMuMuOneTrackPathLoose.replace(zToMuGlobalMuOneTrack, notGoodZToMuMuSeq * zToMuGlobalMuOneTrack ) - -goodZToMuMuOneTrackPathLoose._seq = dimuonsPath._seq + dimuonsOneTrackPath._seq + goodZToMuMuOneTrackPathLoose._seq - -goodZToMuMuOneTrackPathLoose.remove(dimuonsFilter) - -#initialGoodZToMuMuPath.replace(goodZToMuMu, dimuonsSeq * goodZToMuMu) -initialGoodZToMuMuPath._seq = dimuonsPath._seq + initialGoodZToMuMuPath._seq - - -#goodZToMuMuPath.replace(goodZToMuMu, dimuonsSeq * goodZToMuMu) -goodZToMuMuPath._seq = dimuonsPath._seq + goodZToMuMuPath._seq - - -#goodZToMuMu2HLTPath.replace(goodZToMuMu, dimuonsSeq * goodZToMuMu) -goodZToMuMu1HLTPath._seq = dimuonsPath._seq + goodZToMuMu1HLTPath._seq - -#goodZToMuMu1HLTPath.replace(goodZToMuMu, dimuonsSeq * goodZToMuMu) -goodZToMuMu2HLTPath._seq = dimuonsPath._seq + goodZToMuMu2HLTPath._seq - -goodZToMuMuAB1HLTPath._seq = dimuonsPath._seq + goodZToMuMuAB1HLTPath._seq - -goodZToMuMuBB2HLTPath._seq = dimuonsPath._seq + goodZToMuMuBB2HLTPath._seq - - -#goodZToMuMuSameChargePath.replace( dimuonsGlobalSameCharge, dimuonsSeq * dimuonsGlobalSameCharge) -goodZToMuMuSameChargePath._seq = dimuonsPath._seq + goodZToMuMuSameChargePath._seq - -#goodZToMuMuSameCharge2HLTPath.replace( dimuonsGlobalSameCharge, dimuonsSeq * dimuonsGlobalSameCharge) - -goodZToMuMuSameCharge2HLTPath._seq = dimuonsPath._seq + goodZToMuMuSameCharge2HLTPath._seq - -#goodZToMuMuSameCharge1HLTPath.replace( dimuonsGlobalSameCharge, dimuonsSeq * dimuonsGlobalSameCharge) -goodZToMuMuSameCharge1HLTPath._seq = dimuonsPath._seq + goodZToMuMuSameCharge1HLTPath._seq - - -#nonIsolatedZToMuMuPath.replace(nonIsolatedZToMuMu, dimuonsSeq * nonIsolatedZToMuMu) -nonIsolatedZToMuMuPath._seq = dimuonsPath._seq + nonIsolatedZToMuMuPath._seq - -#oneNonIsolatedZToMuMuPath.replace(nonIsolatedZToMuMu, dimuonsSeq * nonIsolatedZToMuMu) -oneNonIsolatedZToMuMuPath._seq = dimuonsPath._seq + oneNonIsolatedZToMuMuPath._seq - -#twoNonIsolatedZToMuMuPath.replace(nonIsolatedZToMuMu, dimuonsSeq * nonIsolatedZToMuMu) -twoNonIsolatedZToMuMuPath._seq = dimuonsPath._seq + twoNonIsolatedZToMuMuPath._seq - - -## notGoodZToMuMuSeq = cms.Sequence( -## dimuonsSeq * -## ~goodZToMuMu * -## zToMuMuOneStandAloneMuon -## ) - -## notGoodZToMuMuSeq.setLabel("notGoodZToMuMuSeq") - -## goodZToMuMuOneStandAloneMuonPath.remove(goodZToMuMu) -## goodZToMuMuOneStandAloneMuonPath.replace(zToMuMuOneStandAloneMuon, notGoodZToMuMuSeq) -goodZToMuMuOneStandAloneMuonPath._seq = dimuonsPath._seq + goodZToMuMuOneStandAloneMuonPath._seq - - -## notGoodZToMuMuSeq = cms.Sequence( -## dimuonsSeq + -## ~goodZToMuMu + -## dimuonsOneTrackSeq+ -## ~zToMuMuOneStandAloneMuon + -## zToMuGlobalMuOneTrack -## ) - - - -## notGoodZToMuMuSeq.setLabel("notGoodZToMuMuSeq") - -## goodZToMuMuOneTrackPath.remove( goodZToMuMu) -## goodZToMuMuOneTrackPath.remove(zToMuMuOneStandAloneMuon ) - -## goodZToMuMuOneTrackPath.replace(zToMuGlobalMuOneTrack, notGoodZToMuMuSeq * zToMuGlobalMuOneTrack ) - - -goodZToMuMuOneTrackerMuonPath._seq = dimuonsPath._seq + goodZToMuMuOneTrackerMuonPath._seq - - -goodZToMuMuOneTrackPath._seq = dimuonsPath._seq + dimuonsOneTrackPath._seq + goodZToMuMuOneTrackPath._seq -goodZToMuMuOneTrackPath.remove(dimuonsFilter) - - -## goodZToMuMuPathLoose = cms.Path( - -## goodZToMuMuLoose + -## goodZToMuMuAtLeast1HLTLoose -## ) - -## goodZToMuMu2HLTPathLoose = cms.Path( -## goodZToMuMuLoose + -## goodZToMuMu2HLTLoose -## ) - -## goodZToMuMu1HLTPathLoose = cms.Path( -## goodZToMuMuLoose + -## goodZToMuMu1HLTLoose -## ) - - -## goodZToMuMuSameChargePathLoose = cms.Path( -## dimuonsGlobalSameCharge+ -## goodZToMuMuSameChargeLoose + -## goodZToMuMuSameChargeAtLeast1HLTLoose -## ) - - -## ## goodZToMuMuSameCharge2HLTPathLoose = cms.Path( -## ## dimuonsGlobalSameCharge+ -## ## goodZToMuMuSameChargeLoose + -## ## goodZToMuMuSameCharge2HLTLoose -## ## ) - - -## ## goodZToMuMuSameCharge1HLTPathLoose = cms.Path( -## ## dimuonsGlobalSameCharge+ -## ## goodZToMuMuSameChargeLoose + -## ## goodZToMuMuSameCharge1HLTLoose -## ## ) - - - -## goodZToMuMuOneStandAloneMuonPathLoose = cms.Path( -## ### I should deby the tight zmumu, otherwise I cut to much.... -## ~goodZToMuMu + -## zToMuMuOneStandAloneMuonLoose + -## goodZToMuMuOneStandAloneMuonLoose + -## goodZToMuMuOneStandAloneMuonFirstHLTLoose -## ) - - -## goodZToMuMuOneTrackPathLoose=cms.Path( -## ### I should deby the tight zmumu, otherwise I cut to much.... -## ~goodZToMuMu + -## ~zToMuMuOneStandAloneMuon + -## zToMuGlobalMuOneTrack + -## zToMuMuOneTrackLoose + -## goodZToMuMuOneTrackLoose + -## goodZToMuMuOneTrackFirstHLTLoose -## ) - - - - - -## ### sequences and path for tight cuts... - -## initialGoodZToMuMuPath = cms.Path( -## goodZToMuMu + -## zmumuSaMassHistogram -## ) - - -## goodZToMuMuPath = cms.Path( -## goodZToMuMu + -## goodZToMuMuAtLeast1HLT -## ) - - - -## goodZToMuMu2HLTPath = cms.Path( -## goodZToMuMu + -## goodZToMuMu2HLT -## ) - - -## goodZToMuMu1HLTPath = cms.Path( -## goodZToMuMu + -## goodZToMuMu1HLT -## ) - - - -## goodZToMuMuSameChargePath = cms.Path( -## dimuonsGlobalSameCharge+ -## goodZToMuMuSameCharge + -## goodZToMuMuSameChargeAtLeast1HLT -## ) - - -## goodZToMuMuSameCharge2HLTPath = cms.Path( -## dimuonsGlobalSameCharge+ -## goodZToMuMuSameCharge + -## goodZToMuMuSameCharge2HLT -## ) - - - -## goodZToMuMuSameCharge1HLTPath = cms.Path( -## dimuonsGlobalSameCharge+ -## goodZToMuMuSameCharge + -## goodZToMuMuSameCharge1HLT -## ) - - - -## nonIsolatedZToMuMuPath = cms.Path ( -## nonIsolatedZToMuMu + -## nonIsolatedZToMuMuAtLeast1HLT -## ) - - -## oneNonIsolatedZToMuMuPath = cms.Path( -## nonIsolatedZToMuMu + -## oneNonIsolatedZToMuMu + -## oneNonIsolatedZToMuMuAtLeast1HLT -## ) - - -## twoNonIsolatedZToMuMuPath = cms.Path( -## nonIsolatedZToMuMu + -## twoNonIsolatedZToMuMu + -## twoNonIsolatedZToMuMuAtLeast1HLT -## ) - - -## goodZToMuMuOneStandAloneMuonPath = cms.Path( -## ~goodZToMuMu + -## zToMuMuOneStandAloneMuon + -## goodZToMuMuOneStandAloneMuon + -## goodZToMuMuOneStandAloneMuonFirstHLT -## ) - - - - -## goodZToMuMuOneTrackPath=cms.Path( -## ~goodZToMuMu + -## ~zToMuMuOneStandAloneMuon + -## zToMuGlobalMuOneTrack + -## zToMuMuOneTrack + -## goodZToMuMuOneTrack + -## goodZToMuMuOneTrackFirstHLT -## ) - - diff --git a/ElectroWeakAnalysis/ZMuMu/python/ZMuMuCategoriesNtuples_cff.py b/ElectroWeakAnalysis/ZMuMu/python/ZMuMuCategoriesNtuples_cff.py deleted file mode 100644 index 1247dfe83230d..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/python/ZMuMuCategoriesNtuples_cff.py +++ /dev/null @@ -1,281 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from ElectroWeakAnalysis.ZMuMu.ZMuMuCategoriesSequences_cff import * -import copy - - -#### ntuple for loose cuts - -goodZToMuMuEdmNtupleLoose = cms.EDProducer( - "ZToLLEdmNtupleDumper", - zBlocks = cms.VPSet( - cms.PSet( - zName = cms.string("zGolden"), - z = cms.InputTag("goodZToMuMuAtLeast1HLTLoose"), - zGenParticlesMatch = cms.InputTag(""), - beamSpot = cms.InputTag("offlineBeamSpot"), - primaryVertices = cms.InputTag("offlinePrimaryVerticesWithBS"), - ptThreshold = cms.double(1.5), - etEcalThreshold = cms.double(0.2), - etHcalThreshold = cms.double(0.5), - deltaRVetoTrk = cms.double(0.015), - deltaRTrk = cms.double(0.3), - deltaREcal = cms.double(0.25), - deltaRHcal = cms.double(0.25), - alpha = cms.double(0.), - beta = cms.double(-0.75), - relativeIsolation = cms.bool(False), - hltPath = cms.string("HLT_Mu9") - ), - ) -) - -goodZToMuMuPathLoose.__iadd__(goodZToMuMuEdmNtupleLoose) -goodZToMuMuPathLoose.setLabel("goodZToMuMuLoose") - - -## goodZToMuMu2HLTEdmNtupleLoose = copy.deepcopy(goodZToMuMuEdmNtupleLoose) -## goodZToMuMu2HLTEdmNtupleLoose.zBlocks[0].z = cms.InputTag("goodZToMuMu2HLTLoose") -## goodZToMuMu2HLTEdmNtupleLoose.zBlocks[0].zName = cms.string("zGolden2HLT") -## goodZToMuMu2HLTPathLoose.__iadd__(goodZToMuMu2HLTEdmNtupleLoose) -## goodZToMuMu2HLTPathLoose.setLabel("goodZToMuMu2HLTLoose") - - -## goodZToMuMu1HLTEdmNtupleLoose = copy.deepcopy(goodZToMuMuEdmNtupleLoose) -## goodZToMuMu1HLTEdmNtupleLoose.zBlocks[0].z = cms.InputTag("goodZToMuMu1HLTLoose") -## goodZToMuMu1HLTEdmNtupleLoose.zBlocks[0].zName = cms.string("zGolden1HLT") -## goodZToMuMu1HLTPathLoose.__iadd__(goodZToMuMu1HLTEdmNtupleLoose) -## goodZToMuMu1HLTPathLoose.setLabel("goodZToMuMu1HLTLoose") - -## oneNonIsolatedZToMuMuEdmNtuple = copy.deepcopy(goodZToMuMuEdmNtuple) -## oneNonIsolatedZToMuMuEdmNtuple.zBlocks[0].z = cms.InputTag("oneNonIsolatedZToMuMuAtLeast1HLT") -## oneNonIsolatedZToMuMuEdmNtuple.zBlocks[0].zName = cms.string("z1NotIso") -## oneNonIsolatedZToMuMuPath.__iadd__(oneNonIsolatedZToMuMuEdmNtuple) -## oneNonIsolatedZToMuMuPath.setLabel("oneNonIsolatedZToMuMu") - -## twoNonIsolatedZToMuMuEdmNtuple = copy.deepcopy(goodZToMuMuEdmNtuple) -## twoNonIsolatedZToMuMuEdmNtuple.zBlocks[0].z = cms.InputTag("twoNonIsolatedZToMuMuAtLeast1HLT") -## twoNonIsolatedZToMuMuEdmNtuple.zBlocks[0].zName = cms.string("z2NotIso") -## twoNonIsolatedZToMuMuPath.__iadd__(twoNonIsolatedZToMuMuEdmNtuple) -## twoNonIsolatedZToMuMuPath.setLabel("twoNonIsolatedZToMuMu") - -## goodZToMuMuSameCharge2HLTEdmNtupleLoose= copy.deepcopy(goodZToMuMuEdmNtupleLoose) -## goodZToMuMuSameCharge2HLTEdmNtupleLoose.zBlocks[0].z = cms.InputTag("goodZToMuMuSameCharge2HLTLoose") -## goodZToMuMuSameCharge2HLTEdmNtupleLoose.zBlocks[0].zName = cms.string("zSameCharge2HLT") -## goodZToMuMuSameCharge2HLTPathLoose.__iadd__(goodZToMuMuSameCharge2HLTEdmNtupleLoose) -## goodZToMuMuSameCharge2HLTPathLoose.setLabel("goodZToMuMuSameCharge2HLTLoose") - - -## goodZToMuMuSameCharge1HLTEdmNtupleLoose= copy.deepcopy(goodZToMuMuEdmNtupleLoose) -## goodZToMuMuSameCharge1HLTEdmNtupleLoose.zBlocks[0].z = cms.InputTag("goodZToMuMuSameCharge1HLTLoose") -## goodZToMuMuSameCharge1HLTEdmNtupleLoose.zBlocks[0].zName = cms.string("zSameCharge1HLT") -## goodZToMuMuSameCharge1HLTPathLoose.__iadd__(goodZToMuMuSameCharge1HLTEdmNtupleLoose) -## goodZToMuMuSameCharge1HLTPathLoose.setLabel("goodZToMuMuSameCharge1HLTLoose") - -goodZToMuMuAB1HLTEdmNtupleLoose = copy.deepcopy(goodZToMuMuEdmNtupleLoose) -goodZToMuMuAB1HLTEdmNtupleLoose.zBlocks[0].z = cms.InputTag("goodZToMuMuAB1HLTLoose") -goodZToMuMuAB1HLTEdmNtupleLoose.zBlocks[0].zName = cms.string("zGoldenAB1HLT") -goodZToMuMuAB1HLTPathLoose.__iadd__(goodZToMuMuAB1HLTEdmNtupleLoose) -goodZToMuMuAB1HLTPathLoose.setLabel("goodZToMuMuAB1HLTLoose") - -goodZToMuMuBB2HLTEdmNtupleLoose = copy.deepcopy(goodZToMuMuEdmNtupleLoose) -goodZToMuMuBB2HLTEdmNtupleLoose.zBlocks[0].z = cms.InputTag("goodZToMuMuBB2HLTLoose") -goodZToMuMuBB2HLTEdmNtupleLoose.zBlocks[0].zName = cms.string("zGoldenBB2HLT") -goodZToMuMuBB2HLTPathLoose.__iadd__(goodZToMuMuBB2HLTEdmNtupleLoose) -goodZToMuMuBB2HLTPathLoose.setLabel("goodZToMuMuBB2HLTLoose") - - - -goodZToMuMuSameChargeEdmNtupleLoose= copy.deepcopy(goodZToMuMuEdmNtupleLoose) -goodZToMuMuSameChargeEdmNtupleLoose.zBlocks[0].z = cms.InputTag("goodZToMuMuSameChargeAtLeast1HLTLoose") -goodZToMuMuSameChargeEdmNtupleLoose.zBlocks[0].zName = cms.string("zSameCharge") -goodZToMuMuSameChargePathLoose.__iadd__(goodZToMuMuSameChargeEdmNtupleLoose) -goodZToMuMuSameChargePathLoose.setLabel("goodZToMuMuSameChargeLoose") - - - -goodZToMuMuOneStandAloneEdmNtupleLoose= copy.deepcopy(goodZToMuMuEdmNtupleLoose) -goodZToMuMuOneStandAloneEdmNtupleLoose.zBlocks[0].z=cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLTLoose") -goodZToMuMuOneStandAloneEdmNtupleLoose.zBlocks[0].zName=cms.string("zMuSta") -goodZToMuMuOneStandAloneMuonPathLoose.__iadd__(goodZToMuMuOneStandAloneEdmNtupleLoose) -goodZToMuMuOneStandAloneMuonPathLoose.setLabel("goodZToMuMuOneStandAloneMuonLoose") - -goodZToMuMuOneTrackEdmNtupleLoose= copy.deepcopy(goodZToMuMuEdmNtupleLoose) -goodZToMuMuOneTrackEdmNtupleLoose.zBlocks[0].z=cms.InputTag("goodZToMuMuOneTrackFirstHLTLoose") -goodZToMuMuOneTrackEdmNtupleLoose.zBlocks[0].zName=cms.string("zMuTrk") -goodZToMuMuOneTrackPathLoose.__iadd__(goodZToMuMuOneTrackEdmNtupleLoose) -goodZToMuMuOneTrackPathLoose.setLabel("goodZToMuMuOneTrackLoose") - - -goodZToMuMuOneTrackerMuonEdmNtupleLoose= copy.deepcopy(goodZToMuMuEdmNtupleLoose) -goodZToMuMuOneTrackerMuonEdmNtupleLoose.zBlocks[0].z=cms.InputTag("goodZToMuMuOneTrackerMuonFirstHLTLoose") -goodZToMuMuOneTrackerMuonEdmNtupleLoose.zBlocks[0].zName=cms.string("zMuTrkMu") -goodZToMuMuOneTrackerMuonPathLoose.__iadd__(goodZToMuMuOneTrackerMuonEdmNtupleLoose) -goodZToMuMuOneTrackerMuonPathLoose.setLabel("goodZToMuMuOneTrackerMuonLoose") - - -ntuplesOut = cms.OutputModule( - "PoolOutputModule", - fileName = cms.untracked.string('NtupleLoose_test.root'), - outputCommands = cms.untracked.vstring( - "drop *", -# "keep *_goodZToMuMuOneStandAloneMuonNtuple_*_*", - "keep *_goodZToMuMuEdmNtupleLoose_*_*", - # "keep *_goodZToMuMu1HLTEdmNtupleLoose_*_*", - # "keep *_goodZToMuMu2HLTEdmNtupleLoose_*_*", - "keep *_goodZToMuMuAB1HLTEdmNtupleLoose_*_*", - "keep *_goodZToMuMuBB2HLTEdmNtupleLoose_*_*", - "keep *_goodZToMuMuSameChargeEdmNtupleLoose_*_*", -# "keep *_goodZToMuMuSameCharge1HLTEdmNtupleLoose_*_*", - # "keep *_nonIsolatedZToMuMuEdmNtuple_*_*", - # "keep *_oneNonIsolatedZToMuMuEdmNtuple_*_*", - # "keep *_twoNonIsolatedZToMuMuEdmNtuple_*_*", - "keep *_goodZToMuMuOneStandAloneEdmNtupleLoose_*_*", - "keep *_goodZToMuMuOneTrackEdmNtupleLoose_*_*", - "keep *_goodZToMuMuOneTrackerMuonEdmNtupleLoose_*_*", - # "keep *_goodZToMuMu2HLTVtxedNtuple_*_*", - - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - "goodZToMuMuPathLoose", - # "goodZToMuMu1HLTPathLoose", - # "goodZToMuMu2HLTPathLoose", - "goodZToMuMuAB1HLTPathLoose", - "goodZToMuMuBB2HLTPathLoose", - "goodZToMuMuSameChargePathLoose", -# "goodZToMuMuSameCharge1HLTPathLoose", - # "nonIsolatedZToMuMuPath", - # "oneNonIsolatedZToMuMuPath", - # "twoNonIsolatedZToMuMuPath", - "goodZToMuMuOneTrackPathLoose", - "goodZToMuMuOneTrackerMuonPathLoose", - "goodZToMuMuOneStandAloneMuonPathLoose", - ) - ) -) - -ntuplesOut.setLabel("ntuplesOut") -NtuplesOut.__iadd__(ntuplesOut) -NtuplesOut.setLabel("NtuplesOut") - - -## #### ntuple for tight cuts - -## goodZToMuMuEdmNtupleTight = cms.EDProducer( -## "ZToLLEdmNtupleDumper", -## zBlocks = cms.VPSet( -## cms.PSet( -## zName = cms.string("zGoldenTight"), -## z = cms.InputTag("goodZToMuMuAtLeast1HLTTight"), -## zGenParticlesMatch = cms.InputTag(""), -## beamSpot = cms.InputTag("offlineBeamSpot"), -## primaryVertices = cms.InputTag("offlinePrimaryVerticesWithBS"), -## ptThreshold = cms.double(1.5), -## etEcalThreshold = cms.double(0.2), -## etHcalThreshold = cms.double(0.5), -## deltaRVetoTrk = cms.double(0.015), -## deltaRTrk = cms.double(0.3), -## deltaREcal = cms.double(0.25), -## deltaRHcal = cms.double(0.25), -## alpha = cms.double(0.), -## beta = cms.double(-0.75), -## relativeIsolation = cms.bool(False) -## ), -## ) -## ) - - - -## goodZToMuMu2HLTEdmNtupleTight = copy.deepcopy(goodZToMuMuEdmNtupleTight) -## goodZToMuMu2HLTEdmNtupleTight.zBlocks[0].z = cms.InputTag("goodZToMuMu2HLTTight") -## goodZToMuMu2HLTEdmNtupleTight.zBlocks[0].zName = cms.string("zGolden2HLTTight") -## goodZToMuMu2HLTPathTight.__iadd__(goodZToMuMu2HLTEdmNtupleTight) -## goodZToMuMu2HLTPathTight.setLabel("goodZToMuMu2HLTTight") - - -## goodZToMuMu1HLTEdmNtupleTight = copy.deepcopy(goodZToMuMuEdmNtupleTight) -## goodZToMuMu1HLTEdmNtupleTight.zBlocks[0].z = cms.InputTag("goodZToMuMu1HLTTight") -## goodZToMuMu1HLTEdmNtupleTight.zBlocks[0].zName = cms.string("zGolden1HLTTight") -## goodZToMuMu1HLTPathTight.__iadd__(goodZToMuMu1HLTEdmNtupleTight) -## goodZToMuMu1HLTPathTight.setLabel("goodZToMuMu1HLTTight") - -## oneNonIsolatedZToMuMuEdmNtupleTight = copy.deepcopy(goodZToMuMuEdmNtupleTight) -## oneNonIsolatedZToMuMuEdmNtupleTight.zBlocks[0].z = cms.InputTag("oneNonIsolatedZToMuMuAtLeast1HLTTight") -## oneNonIsolatedZToMuMuEdmNtupleTight.zBlocks[0].zName = cms.string("z1NotIsoTight") -## oneNonIsolatedZToMuMuPathTight.__iadd__(oneNonIsolatedZToMuMuEdmNtupleTight) -## oneNonIsolatedZToMuMuPathTight.setLabel("oneNonIsolatedZToMuMuTight") - -## twoNonIsolatedZToMuMuEdmNtupleTight = copy.deepcopy(goodZToMuMuEdmNtupleTight) -## twoNonIsolatedZToMuMuEdmNtupleTight.zBlocks[0].z = cms.InputTag("twoNonIsolatedZToMuMuAtLeast1HLTTight") -## twoNonIsolatedZToMuMuEdmNtupleTight.zBlocks[0].zName = cms.string("z2NotIsoTight") -## twoNonIsolatedZToMuMuPathTight.__iadd__(twoNonIsolatedZToMuMuEdmNtupleTight) -## twoNonIsolatedZToMuMuPathTight.setLabel("twoNonIsolatedZToMuMuTight") - -## goodZToMuMuSameCharge2HLTEdmNtupleTight= copy.deepcopy(goodZToMuMuEdmNtupleTight) -## goodZToMuMuSameCharge2HLTEdmNtupleTight.zBlocks[0].z = cms.InputTag("goodZToMuMuSameCharge2HLTTight") -## goodZToMuMuSameCharge2HLTEdmNtupleTight.zBlocks[0].zName = cms.string("zSameCharge2HLTTight") -## goodZToMuMuSameCharge2HLTPathTight.__iadd__(goodZToMuMuSameCharge2HLTEdmNtupleTight) -## goodZToMuMuSameCharge2HLTPathTight.setLabel("goodZToMuMuSameCharge2HLTTight") - - -## goodZToMuMuSameCharge1HLTEdmNtupleTight= copy.deepcopy(goodZToMuMuEdmNtupleTight) -## goodZToMuMuSameCharge1HLTEdmNtupleTight.zBlocks[0].z = cms.InputTag("goodZToMuMuSameCharge1HLTTight") -## goodZToMuMuSameCharge1HLTEdmNtupleTight.zBlocks[0].zName = cms.string("zSameCharge1HLTTight") -## goodZToMuMuSameCharge1HLTPathTight.__iadd__(goodZToMuMuSameCharge1HLTEdmNtupleTight) -## goodZToMuMuSameCharge1HLTPathTight.setLabel("goodZToMuMuSameCharge1HLTTight") - - -## goodZToMuMuOneStandAloneEdmNtupleTight= copy.deepcopy(goodZToMuMuEdmNtupleTight) -## goodZToMuMuOneStandAloneEdmNtupleTight.zBlocks[0].z=cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLTTight") -## goodZToMuMuOneStandAloneEdmNtupleTight.zBlocks[0].zName=cms.string("zMuStaTight") -## goodZToMuMuOneStandAloneMuonPathTight.__iadd__(goodZToMuMuOneStandAloneEdmNtupleTight) -## goodZToMuMuOneStandAloneMuonPathTight.setLabel("goodZToMuMuOneStandAloneMuonTight") - -## goodZToMuMuOneTrackEdmNtupleTight= copy.deepcopy(goodZToMuMuEdmNtupleTight) -## goodZToMuMuOneTrackEdmNtupleTight.zBlocks[0].z=cms.InputTag("goodZToMuMuOneTrackFirstHLTTight") -## goodZToMuMuOneTrackEdmNtupleTight.zBlocks[0].zName=cms.string("zMuTrkTight") -## goodZToMuMuOneTrackPathTight.__iadd__(goodZToMuMuOneTrackEdmNtupleTight) -## goodZToMuMuOneTrackPathTight.setLabel("goodZToMuMuOneTrackTight") - -## ntuplesOutTight = cms.OutputModule( -## "PoolOutputModule", -## fileName = cms.untracked.string('NtupleTight_test.root'), -## outputCommands = cms.untracked.vstring( -## "drop *", -## # "keep *_goodZToMuMuOneStandAloneMuonNtuple_*_*", -## "keep *_goodZToMuMuEdmNtupleTight_*_*", -## "keep *_goodZToMuMu1HLTEdmNtupleTight_*_*", -## "keep *_goodZToMuMu2HLTEdmNtupleTight_*_*", -## "keep *_goodZToMuMuSameCharge2HLTEdmNtupleTight_*_*", -## "keep *_goodZToMuMuSameCharge1HLTEdmNtupleTight_*_*", -## "keep *_nonIsolatedZToMuMuEdmNtupleTight_*_*", -## "keep *_oneNonIsolatedZToMuMuEdmNtupleTight_*_*", -## "keep *_twoNonIsolatedZToMuMuEdmNtupleTight_*_*", -## "keep *_goodZToMuMuOneStandAloneEdmNtupleTight_*_*", -## "keep *_goodZToMuMuOneTrackEdmNtupleTight_*_*", -## # "keep *_goodZToMuMu2HLTVtxedNtuple_*_*", - -## ), -## SelectEvents = cms.untracked.PSet( -## SelectEvents = cms.vstring( -## "goodZToMuMuPathTight", -## "goodZToMuMu1HLTPathTight", -## "goodZToMuMu2HLTPathTight", -## "goodZToMuMuSameCharge2HLTPathTight", -## "goodZToMuMuSameCharge1HLTPathTight", -## "nonIsolatedZToMuMuPathTight", -## "oneNonIsolatedZToMuMuPathTight", -## "twoNonIsolatedZToMuMuPathTight", -## "goodZToMuMuOneTrackPathTight", -## "goodZToMuMuOneStandAloneMuonPathTight", -## ) -## ) -## ) - - - - -## ntuplesOutTight.setLabel("ntuplesOutTight") -## NtuplesOutTight.__iadd__(ntuplesOutTight) -## NtuplesOutTight.setLabel("NtuplesOutTight") diff --git a/ElectroWeakAnalysis/ZMuMu/python/ZMuMuCategoriesPlots_cff.py b/ElectroWeakAnalysis/ZMuMu/python/ZMuMuCategoriesPlots_cff.py deleted file mode 100644 index 1b469269698ab..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/python/ZMuMuCategoriesPlots_cff.py +++ /dev/null @@ -1,212 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from ElectroWeakAnalysis.ZMuMu.ZMuMuCategoriesSequences_cff import * -import copy - - -zPlots = cms.PSet( - histograms = cms.VPSet( - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zMass"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu1Pt"), - description = cms.untracked.string("Highest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("max(daughter(0).pt,daughter(1).pt)") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu2Pt"), - description = cms.untracked.string("Lowest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("min(daughter(0).pt,daughter(1).pt)") - ) - ) -) - - - -# ZMuMu at least 1 HLT + 2 track-iso (Shape) -goodZToMuMuPlotsLoose = cms.EDAnalyzer( - "CandViewHistoAnalyzer", - zPlots, - src = cms.InputTag("goodZToMuMuAtLeast1HLTLoose") -) - -goodZToMuMuPlots = cms.EDAnalyzer( - "CandViewHistoAnalyzer", - zPlots, - src = cms.InputTag("goodZToMuMuAtLeast1HLT") -) - - - -## #### plot for loose cuts - - -## goodZToMuMuSequence.__iadd__(goodZToMuMuPlots) -## goodZToMuMuSequence.setLabel("goodZToMuMuAtLeast1HLT") - -## #ZMuMu 2 HLT + 2 track-iso -## goodZToMuMu2HLTPlots = copy.deepcopy(goodZToMuMuPlots) -## goodZToMuMu2HLTPlots.src = cms.InputTag("goodZToMuMu2HLT") - -## goodZToMuMu2HLTSequence.__iadd__(goodZToMuMu2HLTPlots) -## goodZToMuMu2HLTSequence.setLabel("goodZToMuMu2HLT") - -## #ZMuMu 1 HLT + 2 track-iso -## goodZToMuMu1HLTPlots = copy.deepcopy(goodZToMuMuPlots) -## goodZToMuMu1HLTPlots.src = cms.InputTag("goodZToMuMu1HLT") - -## goodZToMuMu1HLTSequence.__iadd__(goodZToMuMu1HLTPlots) - - -## #ZMuMu at least 1 HLT + at least 1 NON track-iso -## nonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlots) -## nonIsolatedZToMuMuPlots.src = cms.InputTag("nonIsolatedZToMuMuAtLeast1HLT") - -## nonIsolatedZToMuMuSequence.__iadd__(nonIsolatedZToMuMuPlots) - -## #ZMuMu at least 1 HLT + 1 NON track-iso -## oneNonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlots) -## oneNonIsolatedZToMuMuPlots.src = cms.InputTag("oneNonIsolatedZToMuMuAtLeast1HLT") - -## oneNonIsolatedZToMuMuSequence.__iadd__(oneNonIsolatedZToMuMuPlots) - - -## #ZMuMu at least 1 HLT + 2 NON track-iso -## twoNonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlots) -## twoNonIsolatedZToMuMuPlots.src = cms.InputTag("twoNonIsolatedZToMuMuAtLeast1HLT") - -## twoNonIsolatedZToMuMuSequence.__iadd__(twoNonIsolatedZToMuMuPlots) - -## #ZMuSta First HLT + 2 track-iso -## goodZToMuMuOneStandAloneMuonPlots = copy.deepcopy(goodZToMuMuPlots) -## goodZToMuMuOneStandAloneMuonPlots.src = cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLT") - -## goodZToMuMuOneStandAloneMuonSequence.__iadd__(goodZToMuMuOneStandAloneMuonPlots) - - -## #ZMuTk First HLT + 2 track-iso -## goodZToMuMuOneTrackPlots = copy.deepcopy(goodZToMuMuPlots) -## goodZToMuMuOneTrackPlots.src = cms.InputTag("goodZToMuMuOneTrackFirstHLT") - -## goodZToMuMuOneTrackSequence.__iadd__(goodZToMuMuOneTrackPlots) - -## #ZMuMu same charge -## goodZToMuMuSameChargeAtLeast1HLTPlots = copy.deepcopy(goodZToMuMuPlots) -## goodZToMuMuSameChargeAtLeast1HLTPlots.src = cms.InputTag("goodZToMuMuSameChargeAtLeast1HLT") - -## goodZToMuMuSameChargeSequence.__iadd__(goodZToMuMuSameChargeAtLeast1HLTPlots) - -## goodZToMuMuSameCharge2HLTPlots = copy.deepcopy(goodZToMuMuPlots) -## goodZToMuMuSameCharge2HLTPlots.src = cms.InputTag("goodZToMuMuSameCharge2HLT") - -## goodZToMuMuSameCharge2HLTSequence.__iadd__(goodZToMuMuSameCharge2HLTPlots) - -## goodZToMuMuSameCharge1HLTPlots = copy.deepcopy(goodZToMuMuPlots) -## goodZToMuMuSameCharge1HLTPlots.src = cms.InputTag("goodZToMuMuSameCharge1HLT") - -## goodZToMuMuSameCharge1HLTSequence.__iadd__(goodZToMuMuSameCharge1HLTPlots) - - - -#### plot for tight cuts - - -goodZToMuMuPath.__iadd__(goodZToMuMuPlots) -goodZToMuMuPath.setLabel("goodZToMuMuAtLeast1HLT") - -#ZMuMu 2 HLT + 2 track-iso -goodZToMuMu2HLTPlots = copy.deepcopy(goodZToMuMuPlots) -goodZToMuMu2HLTPlots.src = cms.InputTag("goodZToMuMu2HLT") - -goodZToMuMu2HLTPath.__iadd__(goodZToMuMu2HLTPlots) -goodZToMuMu2HLTPath.setLabel("goodZToMuMu2HLT") - -#ZMuMu 1 HLT + 2 track-iso -goodZToMuMu1HLTPlots= copy.deepcopy(goodZToMuMuPlots) -goodZToMuMu1HLTPlots.src = cms.InputTag("goodZToMuMu1HLT") - -goodZToMuMu1HLTPath.__iadd__(goodZToMuMu1HLTPlots) - - -##### plot for AB and BB region -goodZToMuMuAB1HLTPlots= copy.deepcopy(goodZToMuMuPlots) -goodZToMuMuAB1HLTPlots.src = cms.InputTag("goodZToMuMuAB1HLT") -goodZToMuMuAB1HLTPath.__iadd__(goodZToMuMuAB1HLTPlots) - -goodZToMuMuBB2HLTPlots= copy.deepcopy(goodZToMuMuPlots) -goodZToMuMuBB2HLTPlots.src = cms.InputTag("goodZToMuMuBB2HLT") -goodZToMuMuBB2HLTPath.__iadd__(goodZToMuMuBB2HLTPlots) - - - -#ZMuMu at least 1 HLT + at least 1 NON track-iso -nonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlots) -nonIsolatedZToMuMuPlots.src = cms.InputTag("nonIsolatedZToMuMuAtLeast1HLT") - -nonIsolatedZToMuMuPath.__iadd__(nonIsolatedZToMuMuPlots) - -#ZMuMu at least 1 HLT + 1 NON track-iso -oneNonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlots) -oneNonIsolatedZToMuMuPlots.src = cms.InputTag("oneNonIsolatedZToMuMuAtLeast1HLT") - -oneNonIsolatedZToMuMuPath.__iadd__(oneNonIsolatedZToMuMuPlots) - - -#ZMuMu at least 1 HLT + 2 NON track-iso -twoNonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlots) -twoNonIsolatedZToMuMuPlots.src = cms.InputTag("twoNonIsolatedZToMuMuAtLeast1HLT") - -twoNonIsolatedZToMuMuPath.__iadd__(twoNonIsolatedZToMuMuPlots) - -#ZMuSta global HLT + 2 track-iso -goodZToMuMuOneStandAloneMuonPlots = copy.deepcopy(goodZToMuMuPlots) -goodZToMuMuOneStandAloneMuonPlots.src = cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLT") - -goodZToMuMuOneStandAloneMuonPath.__iadd__(goodZToMuMuOneStandAloneMuonPlots) - - -#ZMuTk First HLT + 2 track-iso -goodZToMuMuOneTrackPlots = copy.deepcopy(goodZToMuMuPlots) -goodZToMuMuOneTrackPlots.src = cms.InputTag("goodZToMuMuOneTrackFirstHLT") - -goodZToMuMuOneTrackPath.__iadd__(goodZToMuMuOneTrackPlots) - - -#ZMuTkMu global HLT + 2 track-iso -goodZToMuMuOneTrackerMuonPlots = copy.deepcopy(goodZToMuMuPlots) -goodZToMuMuOneTrackerMuonPlots.src = cms.InputTag("goodZToMuMuOneTrackerMuonFirstHLT") - -goodZToMuMuOneTrackerMuonPath.__iadd__(goodZToMuMuOneTrackerMuonPlots) - - - - - - -#ZMuMu same charge -goodZToMuMuSameChargeAtLeast1HLTPlots = copy.deepcopy(goodZToMuMuPlots) -goodZToMuMuSameChargeAtLeast1HLTPlots.src = cms.InputTag("goodZToMuMuSameChargeAtLeast1HLT") - -goodZToMuMuSameChargePath.__iadd__(goodZToMuMuSameChargeAtLeast1HLTPlots) - -goodZToMuMuSameCharge2HLTPlots = copy.deepcopy(goodZToMuMuPlots) -goodZToMuMuSameCharge2HLTPlots.src = cms.InputTag("goodZToMuMuSameCharge2HLT") - -goodZToMuMuSameCharge2HLTPath.__iadd__(goodZToMuMuSameCharge2HLTPlots) - -goodZToMuMuSameCharge1HLTPlots = copy.deepcopy(goodZToMuMuPlots) -goodZToMuMuSameCharge1HLTPlots.src = cms.InputTag("goodZToMuMuSameCharge1HLT") - -goodZToMuMuSameCharge1HLTPath.__iadd__(goodZToMuMuSameCharge1HLTPlots) diff --git a/ElectroWeakAnalysis/ZMuMu/python/ZMuMuCategoriesSequences_cff.py b/ElectroWeakAnalysis/ZMuMu/python/ZMuMuCategoriesSequences_cff.py deleted file mode 100644 index 14e13ee8607b0..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/python/ZMuMuCategoriesSequences_cff.py +++ /dev/null @@ -1,321 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# reorganization of Z->mumu categories sequence, to run after the ZMuMu(Sub)Skim (i.d. supposing dimuons, dimuonsGlobal, dimuonsOneTrack and dimuonsOneStndAloneMuon categories has been built) - - -### parameter set to be overloaded in the configuration file - - -#from ElectroWeakAnalysis.Skimming.zMuMu_SubskimPaths_cff import * - -from ElectroWeakAnalysis.ZMuMu.goodZToMuMu_cfi import * -from ElectroWeakAnalysis.ZMuMu.goodZToMuMuSameCharge_cfi import * -from ElectroWeakAnalysis.ZMuMu.nonIsolatedZToMuMu_cfi import * -from ElectroWeakAnalysis.ZMuMu.goodZToMuMuOneTrack_cfi import * -from ElectroWeakAnalysis.ZMuMu.goodZToMuMuOneTrackerMuon_cfi import * -from ElectroWeakAnalysis.ZMuMu.goodZToMuMuOneStandAloneMuon_cfi import * - -### for zmusta modelling... - -zmumuSaMassHistogram = cms.EDAnalyzer( - "ZMuMuSaMassHistogram", - src_m = cms.InputTag("goodZToMuMu"), - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbin = cms.untracked.int32(200) - # name = cms.untracked.string("zMass") - ) - -### Primary vertex info - -eventVtxInfoNtuple = cms.EDProducer( - "EventVtxInfoNtupleDumper", - primaryVertices=cms.InputTag("offlinePrimaryVertices") -) - -# path for dumping vtx info in the ntuple -generalEventInfoPath = cms.Path( - eventVtxInfoNtuple - ) - - -### paths for loose cuts, not notIso ones, not 1HLT and 2HLT: only ZGolden, zMuSta, zMuTk, zMuTrackerMuon and ZGoldenSameCharge.. - -goodZToMuMuPathLoose = cms.Path( - - goodZToMuMuLoose + - goodZToMuMuAtLeast1HLTLoose - ) - - - -goodZToMuMu2HLTPathLoose = cms.Path( - goodZToMuMuLoose + - goodZToMuMu2HLTLoose - ) - -goodZToMuMu1HLTPathLoose = cms.Path( - goodZToMuMuLoose + - goodZToMuMu1HLTLoose - ) - -goodZToMuMuAB1HLTPathLoose=cms.Path( - goodZToMuMuNotFiltered+ ## not filtered - zToMuMuABLoose+ - goodZToMuMuABLoose+ - goodZToMuMuAB1HLTLoose -) - -goodZToMuMuBB2HLTPathLoose=cms.Path( - zToMuMuBBLoose+ - goodZToMuMuBB2HLTLoose -) - -goodZToMuMuSameChargePathLoose = cms.Path( - dimuonsGlobalSameCharge+ - goodZToMuMuSameChargeLoose + - goodZToMuMuSameChargeAtLeast1HLTLoose - ) - - -## goodZToMuMuSameCharge2HLTPathLoose = cms.Path( -## dimuonsGlobalSameCharge+ -## goodZToMuMuSameChargeLoose + -## goodZToMuMuSameCharge2HLTLoose -## ) - - -## goodZToMuMuSameCharge1HLTPathLoose = cms.Path( -## dimuonsGlobalSameCharge+ -## goodZToMuMuSameChargeLoose + -## goodZToMuMuSameCharge1HLTLoose -## ) - - - -goodZToMuMuOneStandAloneMuonPathLoose = cms.Path( -### I should deny the tight zmumu, otherwise I cut to much.... - ~goodZToMuMu + - zToMuMuOneStandAloneMuonLoose + - goodZToMuMuOneStandAloneMuonLoose + - goodZToMuMuOneStandAloneMuonFirstHLTLoose - ) - - -goodZToMuMuOneTrackerMuonPathLoose= cms.Path( - ### I should deny the tight zmumu, otherwise I cut to much.... - ~goodZToMuMu + - zToMuMuOneTrackerMuonLoose + - goodZToMuMuOneTrackerMuonLoose + - goodZToMuMuOneTrackerMuonFirstHLTLoose -) - - - -goodZToMuMuOneTrackPathLoose=cms.Path( - ### I should deny the tight zmumu, otherwise I cut to much.... - ~goodZToMuMu + - ~zToMuMuOneStandAloneMuon + - zToMuGlobalMuOneTrack + - zToMuMuOneTrackLoose + - goodZToMuMuOneTrackLoose + - goodZToMuMuOneTrackFirstHLTLoose - ) - - - - - -### sequences and path for tight cuts... - - -globalMuQualityCutsAnalysisAA= cms.EDAnalyzer( - "GlbMuQualityCutsAnalysis", - src = cms.InputTag("goodZToMuMu"), - ptMin = cms.untracked.double(0.0), - massMin = cms.untracked.double(0.0), - massMax = cms.untracked.double(200.0), - etaMin = cms.untracked.double(-1.0), - etaMax = cms.untracked.double(10.0), - trkIso = cms.untracked.double(10000), - chi2Cut = cms.untracked.double(10), - nHitCut = cms.untracked.int32(10) - ) - -globalMuQualityCutsAnalysisAB= cms.EDAnalyzer( - "GlbMuQualityCutsAnalysis", - src = cms.InputTag("goodZToMuMuAB"), - ptMin = cms.untracked.double(0.0), - massMin = cms.untracked.double(0.0), - massMax = cms.untracked.double(200.0), - etaMin = cms.untracked.double(-1.0), - etaMax = cms.untracked.double(10.0), - trkIso = cms.untracked.double(10000), - chi2Cut = cms.untracked.double(10), - nHitCut = cms.untracked.int32(10) - ) - -globalMuQualityCutsAnalysisAAtrk= cms.EDAnalyzer( - "GlbMuQualityCutsAnalysis", - src = cms.InputTag("goodZToMuMuOneTrackerMuon"), - ptMin = cms.untracked.double(0.0), - massMin = cms.untracked.double(0.0), - massMax = cms.untracked.double(200.0), - etaMin = cms.untracked.double(-1.0), - etaMax = cms.untracked.double(10.0), - trkIso = cms.untracked.double(10000), - chi2Cut = cms.untracked.double(10), - nHitCut = cms.untracked.int32(10) - ) - -globalMuQualityCutsAnalysisAAsta= cms.EDAnalyzer( - "GlbMuQualityCutsAnalysis", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - ptMin = cms.untracked.double(0.0), - massMin = cms.untracked.double(0.0), - massMax = cms.untracked.double(200.0), - etaMin = cms.untracked.double(-1.0), - etaMax = cms.untracked.double(10.0), - trkIso = cms.untracked.double(10000), - chi2Cut = cms.untracked.double(10), - nHitCut = cms.untracked.int32(10) - ) - - -initialGoodZToMuMuPath = cms.Path( - goodZToMuMu + - zmumuSaMassHistogram -) - - -goodZToMuMuPath = cms.Path( - goodZToMuMu + - goodZToMuMuAtLeast1HLT - ## globalMuQualityCutsAnalysisAA - ) - - - -goodZToMuMu2HLTPath = cms.Path( - goodZToMuMu + - goodZToMuMu2HLT - ) - - -goodZToMuMu1HLTPath = cms.Path( - goodZToMuMu + - goodZToMuMu1HLT - ) - -goodZToMuMuAB1HLTPath=cms.Path( - goodZToMuMuNotFiltered + ## not filtered - zToMuMuAB+ - goodZToMuMuAB+ - goodZToMuMuAB1HLT -## globalMuQualityCutsAnalysisAB -) - -goodZToMuMuBB2HLTPath=cms.Path( - zToMuMuBB+ - goodZToMuMuBB2HLT -) - - -goodZToMuMuSameChargePath = cms.Path( - dimuonsGlobalSameCharge+ - goodZToMuMuSameCharge + - goodZToMuMuSameChargeAtLeast1HLT - ) - - -goodZToMuMuSameCharge2HLTPath = cms.Path( - dimuonsGlobalSameCharge+ - goodZToMuMuSameCharge + - goodZToMuMuSameCharge2HLT - ) - - - -goodZToMuMuSameCharge1HLTPath = cms.Path( - dimuonsGlobalSameCharge+ - goodZToMuMuSameCharge + - goodZToMuMuSameCharge1HLT - ) - - - -nonIsolatedZToMuMuPath = cms.Path ( - nonIsolatedZToMuMu + - nonIsolatedZToMuMuAtLeast1HLT -) - - -oneNonIsolatedZToMuMuPath = cms.Path( - nonIsolatedZToMuMu + - oneNonIsolatedZToMuMu + - oneNonIsolatedZToMuMuAtLeast1HLT -) - - -twoNonIsolatedZToMuMuPath = cms.Path( - nonIsolatedZToMuMu + - twoNonIsolatedZToMuMu + - twoNonIsolatedZToMuMuAtLeast1HLT -) - - -goodZToMuMuOneStandAloneMuonPath = cms.Path( - ~goodZToMuMu + - zToMuMuOneStandAloneMuon + - goodZToMuMuOneStandAloneMuon + - goodZToMuMuOneStandAloneMuonFirstHLT -## globalMuQualityCutsAnalysisAAsta - ) - -goodZToMuMuOneTrackerMuonPath= cms.Path( - ~goodZToMuMu + - zToMuMuOneTrackerMuon + - goodZToMuMuOneTrackerMuon + - goodZToMuMuOneTrackerMuonFirstHLT -## globalMuQualityCutsAnalysisAAtrk -) - - - -goodZToMuMuOneTrackPath=cms.Path( - ~goodZToMuMu + - ~zToMuMuOneStandAloneMuon + - zToMuGlobalMuOneTrack + - zToMuMuOneTrack + - goodZToMuMuOneTrack + - goodZToMuMuOneTrackFirstHLT - ) - -###### endPath - - - - -eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -eventInfo.setLabel("eventInfo") - -NtuplesOut = cms.Sequence( - eventInfo - ) - - -VtxedNtuplesOut = cms.Sequence( - eventInfo - ) - - - -endPath = cms.EndPath( - NtuplesOut + - VtxedNtuplesOut -) - - diff --git a/ElectroWeakAnalysis/ZMuMu/python/ZMuMuCategoriesVtxed_cff.py b/ElectroWeakAnalysis/ZMuMu/python/ZMuMuCategoriesVtxed_cff.py deleted file mode 100644 index 787c8520008cc..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/python/ZMuMuCategoriesVtxed_cff.py +++ /dev/null @@ -1,390 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from ElectroWeakAnalysis.ZMuMu.ZMuMuCategoriesSequences_cff import * -import copy - -#### vertex refit for loose cut - -goodZToMuMuVtxedAtLeast1HLTLoose = cms.EDProducer( - "KalmanVertexFitCompositeCandProducer", - src = cms.InputTag("goodZToMuMuAtLeast1HLTLoose") -) - -goodZToMuMuPathLoose.__iadd__(goodZToMuMuVtxedAtLeast1HLTLoose) -goodZToMuMuPathLoose.setLabel("goodZToMuMuLoose") - - -goodZToMuMuVtxed2HLTLoose = copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTLoose) -goodZToMuMuVtxed2HLTLoose.src = cms.InputTag("goodZToMuMu2HLTLoose") -goodZToMuMu2HLTPathLoose.__iadd__(goodZToMuMuVtxed2HLTLoose) -goodZToMuMu2HLTPathLoose.setLabel("goodZToMuMu2HLTLoose") - - -goodZToMuMuVtxed1HLTLoose = copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTLoose) -goodZToMuMuVtxed1HLTLoose.src = cms.InputTag("goodZToMuMu1HLTLoose") -goodZToMuMu1HLTPathLoose.__iadd__(goodZToMuMuVtxed1HLTLoose) -goodZToMuMu1HLTPathLoose.setLabel("goodZToMuMu1HLTLoose") - - -goodZToMuMuVtxedBB2HLTLoose = copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTLoose) -goodZToMuMuVtxedBB2HLTLoose.src = cms.InputTag("goodZToMuMuBB2HLTLoose") -goodZToMuMuBB2HLTPathLoose.__iadd__(goodZToMuMuVtxedBB2HLTLoose) -goodZToMuMuBB2HLTPathLoose.setLabel("goodZToMuMuBB2HLTLoose") - - -goodZToMuMuVtxedAB1HLTLoose = copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTLoose) -goodZToMuMuVtxedAB1HLTLoose.src = cms.InputTag("goodZToMuMuAB1HLTLoose") -goodZToMuMuAB1HLTPathLoose.__iadd__(goodZToMuMuVtxedAB1HLTLoose) -goodZToMuMuAB1HLTPathLoose.setLabel("goodZToMuMuAB1HLTLoose") - - - - -## oneNonIsolatedZToMuMuVtxed= copy.deepcopy(goodZToMuMuVtxedAtLeast1HLT) -## oneNonIsolatedZToMuMuVtxed.src= cms.InputTag("oneNonIsolatedZToMuMuAtLeast1HLT") -## oneNonIsolatedZToMuMuPath.__iadd__(oneNonIsolatedZToMuMuVtxed) -## oneNonIsolatedZToMuMuPath.setLabel("oneNonIsolatedZToMuMu") - -## twoNonIsolatedZToMuMuVtxed = copy.deepcopy(goodZToMuMuVtxedAtLeast1HLT) -## twoNonIsolatedZToMuMuVtxed.src = cms.InputTag("twoNonIsolatedZToMuMuAtLeast1HLT") -## twoNonIsolatedZToMuMuPath.__iadd__(twoNonIsolatedZToMuMuVtxed) -## twoNonIsolatedZToMuMuPath.setLabel("twoNonIsolatedZToMuMu") - -## goodZToMuMuSameCharge2HLTVtxedLoose= copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTLoose) -## goodZToMuMuSameCharge2HLTVtxedLoose.src = cms.InputTag("goodZToMuMuSameCharge2HLTLoose") -## goodZToMuMuSameCharge2HLTPathLoose.__iadd__(goodZToMuMuSameCharge2HLTVtxedLoose) -## goodZToMuMuSameCharge2HLTPathLoose.setLabel("goodZToMuMuSameCharge2HLTLoose") - - -## goodZToMuMuSameCharge1HLTVtxedLoose= copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTLoose) -## goodZToMuMuSameCharge1HLTVtxedLoose.src = cms.InputTag("goodZToMuMuSameCharge1HLTLoose") -## goodZToMuMuSameCharge1HLTPathLoose.__iadd__(goodZToMuMuSameCharge1HLTVtxedLoose) -## goodZToMuMuSameCharge1HLTPathLoose.setLabel("goodZToMuMuSameCharge1HLTLoose") - - -goodZToMuMuSameChargeVtxedLoose= copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTLoose) -goodZToMuMuSameChargeVtxedLoose.src = cms.InputTag("goodZToMuMuSameChargeAtLeast1HLTLoose") -goodZToMuMuSameChargePathLoose.__iadd__(goodZToMuMuSameChargeVtxedLoose) -goodZToMuMuSameChargePathLoose.setLabel("goodZToMuMuSameChargeLoose") - - - -goodZToMuMuOneStandAloneVtxedLoose= copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTLoose) -goodZToMuMuOneStandAloneVtxedLoose.src = cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLTLoose") -goodZToMuMuOneStandAloneMuonPathLoose.__iadd__(goodZToMuMuOneStandAloneVtxedLoose) -goodZToMuMuOneStandAloneMuonPathLoose.setLabel("goodZToMuMuOneStandAloneMuonLoose") - -goodZToMuMuOneTrackVtxedLoose= copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTLoose) -goodZToMuMuOneTrackVtxedLoose.src = cms.InputTag("goodZToMuMuOneTrackFirstHLTLoose") -goodZToMuMuOneTrackPathLoose.__iadd__(goodZToMuMuOneTrackVtxedLoose) -goodZToMuMuOneTrackPathLoose.setLabel("goodZToMuMuOneTrackLoose") - -goodZToMuMuOneTrackerMuonVtxedLoose= copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTLoose) -goodZToMuMuOneTrackerMuonVtxedLoose.src = cms.InputTag("goodZToMuMuOneTrackerMuonFirstHLTLoose") -goodZToMuMuOneTrackerMuonPathLoose.__iadd__(goodZToMuMuOneTrackerMuonVtxedLoose) -goodZToMuMuOneTrackerMuonPathLoose.setLabel("goodZToMuMuOneTrackerMuonLoose") - - - - -### ntuples.... - -goodZToMuMuVtxedNtupleLoose = cms.EDProducer( - "CandViewNtpProducer", - src = cms.InputTag("goodZToMuMuVtxedLoose"), - variables = cms.VPSet( - cms.PSet( - tag = cms.untracked.string("mass"), - quantity = cms.untracked.string("mass") - ), - cms.PSet( - tag = cms.untracked.string("vertexNdof"), - quantity = cms.untracked.string("vertexNdof") - ), - cms.PSet( - tag = cms.untracked.string("vertexNormalizedChi2"), - quantity = cms.untracked.string("vertexNormalizedChi2") - ), - ) -) - - -goodZToMuMuVtxed2HLTNtupleLoose = copy.deepcopy(goodZToMuMuVtxedNtupleLoose) -goodZToMuMuVtxed2HLTNtupleLoose.src= cms.InputTag("goodZToMuMuVtxed2HLTLoose") -goodZToMuMu2HLTPathLoose.__iadd__(goodZToMuMuVtxed2HLTNtupleLoose) -goodZToMuMu2HLTPathLoose.setLabel("goodZToMuMu2HLTLoose") - - -goodZToMuMuVtxed1HLTNtupleLoose = copy.deepcopy(goodZToMuMuVtxedNtupleLoose) -goodZToMuMuVtxed1HLTNtupleLoose.src= cms.InputTag("goodZToMuMuVtxed1HLTLoose") -goodZToMuMu1HLTPathLoose.__iadd__(goodZToMuMuVtxed1HLTNtupleLoose) -goodZToMuMu1HLTPathLoose.setLabel("goodZToMuMu1HLTLoose") - -goodZToMuMuVtxedBB2HLTNtupleLoose = copy.deepcopy(goodZToMuMuVtxedNtupleLoose) -goodZToMuMuVtxedBB2HLTNtupleLoose.src= cms.InputTag("goodZToMuMuVtxedBB2HLTLoose") -goodZToMuMuBB2HLTPathLoose.__iadd__(goodZToMuMuVtxedBB2HLTNtupleLoose) -goodZToMuMuBB2HLTPathLoose.setLabel("goodZToMuMuBB2HLTLoose") - - -goodZToMuMuVtxedAB1HLTNtupleLoose = copy.deepcopy(goodZToMuMuVtxedNtupleLoose) -goodZToMuMuVtxedAB1HLTNtupleLoose.src= cms.InputTag("goodZToMuMuVtxedAB1HLTLoose") -goodZToMuMuAB1HLTPathLoose.__iadd__(goodZToMuMuVtxedAB1HLTNtupleLoose) -goodZToMuMuAB1HLTPathLoose.setLabel("goodZToMuMuAB1HLTLoose") - - - -## oneNonIsolatedZToMuMuVtxedNtuple = copy.deepcopy(goodZToMuMuVtxedNtuple) -## oneNonIsolatedZToMuMuVtxedNtuple.src = cms.InputTag("oneNonIsolatedZToMuMuVtxed") -## oneNonIsolatedZToMuMuPath.__iadd__(oneNonIsolatedZToMuMuVtxedNtuple) -## oneNonIsolatedZToMuMuPath.setLabel("oneNonIsolatedZToMuMu") - -## twoNonIsolatedZToMuMuVtxedNtuple = copy.deepcopy(goodZToMuMuVtxedNtuple) -## twoNonIsolatedZToMuMuVtxedNtuple.src = cms.InputTag("twoNonIsolatedZToMuMuVtxed") -## twoNonIsolatedZToMuMuPath.__iadd__(twoNonIsolatedZToMuMuVtxedNtuple) -## twoNonIsolatedZToMuMuPath.setLabel("twoNonIsolatedZToMuMu") - -## goodZToMuMuVtxedSameCharge2HLTNtupleLoose= copy.deepcopy(goodZToMuMuVtxedNtupleLoose) -## goodZToMuMuVtxedSameCharge2HLTNtupleLoose.src = cms.InputTag("goodZToMuMuVtxedSameCharge2HLTLoose") -## goodZToMuMuSameCharge2HLTPathLoose.__iadd__(goodZToMuMuVtxedSameCharge2HLTNtupleLoose) -## goodZToMuMuSameCharge2HLTPathLoose.setLabel("goodZToMuMuVtxedSameCharge2HLTLoose") - - -## goodZToMuMuVtxedSameCharge1HLTNtupleLoose= copy.deepcopy(goodZToMuMuVtxedNtupleLoose) -## goodZToMuMuVtxedSameCharge1HLTNtupleLoose.src = cms.InputTag("goodZToMuMuVtxedSameCharge1HLTLoose") -## goodZToMuMuSameCharge1HLTPathLoose.__iadd__(goodZToMuMuVtxedSameCharge1HLTNtupleLoose) -## goodZToMuMuSameCharge1HLTPathLoose.setLabel("goodZToMuMuSameCharge1HLTLoose") - - - - -goodZToMuMuVtxedSameChargeNtupleLoose= copy.deepcopy(goodZToMuMuVtxedNtupleLoose) -goodZToMuMuVtxedSameChargeNtupleLoose.src = cms.InputTag("goodZToMuMuSameChargeAtLeast1HLTLoose") -goodZToMuMuSameChargePathLoose.__iadd__(goodZToMuMuVtxedSameChargeNtupleLoose) -goodZToMuMuSameChargePathLoose.setLabel("goodZToMuMuSameChargeLoose") - - -goodZToMuMuVtxedOneStandAloneNtupleLoose= copy.deepcopy(goodZToMuMuVtxedNtupleLoose) -goodZToMuMuVtxedOneStandAloneNtupleLoose.src = cms.InputTag("goodZToMuMuOneStandAloneVtxedLoose") -goodZToMuMuOneStandAloneMuonPathLoose.__iadd__(goodZToMuMuVtxedOneStandAloneNtupleLoose) -goodZToMuMuOneStandAloneMuonPathLoose.setLabel("goodZToMuMuOneStandAloneMuonLoose") - -goodZToMuMuVtxedOneTrackNtupleLoose= copy.deepcopy(goodZToMuMuVtxedNtupleLoose) -goodZToMuMuVtxedOneTrackNtupleLoose.src =cms.InputTag("goodZToMuMuOneTrackVtxedLoose") -goodZToMuMuOneTrackPathLoose.__iadd__(goodZToMuMuVtxedOneTrackNtupleLoose) -goodZToMuMuOneTrackPathLoose.setLabel("goodZToMuMuOneTrackLoose") - - -goodZToMuMuVtxedOneTrackerMuonNtupleLoose= copy.deepcopy(goodZToMuMuVtxedNtupleLoose) -goodZToMuMuVtxedOneTrackerMuonNtupleLoose.src =cms.InputTag("goodZToMuMuOneTrackerMuonVtxedLoose") -goodZToMuMuOneTrackerMuonPathLoose.__iadd__(goodZToMuMuVtxedOneTrackerMuonNtupleLoose) -goodZToMuMuOneTrackerMuonPathLoose.setLabel("goodZToMuMuOneTrackerMuonLoose") - - - -vtxedNtuplesOut = cms.OutputModule( - "PoolOutputModule", - fileName = cms.untracked.string('VtxedNtupleLoose_test.root'), - outputCommands = cms.untracked.vstring( - "drop *", -# "keep *_goodZToMuMuOneStandAloneMuonNtuple_*_*", - "keep *_goodZToMuMuVtxedNtupleLoose_*_*", - "keep *_goodZToMuMuVtxed1HLTNtupleLoose_*_*", - "keep *_goodZToMuMuVtxed2HLTNtupleLoose_*_*", - "keep *_goodZToMuMuVtxedAB1HLTNtupleLoose_*_*", - "keep *_goodZToMuMuVtxedBB2HLTNtupleLoose_*_*", -# "keep *_goodZToMuMuVtxedSameCharge2HLTNtupleLoose_*_*", - "keep *_goodZToMuMuVtxedSameChargeNtupleLoose_*_*", -# "keep *_nonIsolatedZToMuMuVtxedNtuple_*_*", -# "keep *_oneNonIsolatedZToMuMuVtxedNtuple_*_*", -# "keep *_twoNonIsolatedZToMuMuVtxedNtuple_*_*", - "keep *_goodZToMuMuVtxedOneStandAloneNtupleLoose_*_*", - "keep *_goodZToMuMuVtxedOneTrackNtupleLoose_*_*", - "keep *_goodZToMuMuVtxedOneTrackerMuonNtupleLoose_*_*", - # "keep *_goodZToMuMu2HLTVtxedNtuple_*_*", - - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - "goodZToMuMuPathLoose", - "goodZToMuMu1HLTPathLoose", - "goodZToMuMu2HLTPathLoose", - "goodZToMuMuAB1HLTPathLoose", - "goodZToMuMuBB2HLTPathLoose", -# "goodZToMuMuSameCharge2HLTPathLoose", - "goodZToMuMuSameChargePathLoose", - # "nonIsolatedZToMuMuPath", - # "oneNonIsolatedZToMuMuPath", - # "twoNonIsolatedZToMuMuPath", - "goodZToMuMuOneTrackPathLoose", - "goodZToMuMuOneTrackerMuonPathLoose", - "goodZToMuMuOneStandAloneMuonPathLoose", - ) - ) -) - - -vtxedNtuplesOut.setLabel("vtxedNtuplesOut") -VtxedNtuplesOut.__iadd__(vtxedNtuplesOut) -VtxedNtuplesOut.setLabel("VtxedNtuplesOut") - - -## ## vertex refit for tight cut - -## goodZToMuMuVtxedAtLeast1HLTTight = cms.EDProducer( -## "KalmanVertexFitCompositeCandProducer", -## src = cms.InputTag("goodZToMuMuAtLeast1HLTTight") -## ) - - -## goodZToMuMuVtxed2HLTTight = copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTTight) -## goodZToMuMuVtxed2HLTTight.src = cms.InputTag("goodZToMuMu2HLTTight") -## goodZToMuMu2HLTPathTight.__iadd__(goodZToMuMuVtxed2HLTTight) -## goodZToMuMu2HLTPathTight.setLabel("goodZToMuMu2HLTTight") - - -## goodZToMuMuVtxed1HLTTight = copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTTight) -## goodZToMuMuVtxed1HLTTight.src = cms.InputTag("goodZToMuMu1HLTTight") -## goodZToMuMu1HLTPathTight.__iadd__(goodZToMuMuVtxed1HLTTight) -## goodZToMuMu1HLTPathTight.setLabel("goodZToMuMu1HLTTight") - -## oneNonIsolatedZToMuMuVtxedTight= copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTTight) -## oneNonIsolatedZToMuMuVtxedTight.src= cms.InputTag("oneNonIsolatedZToMuMuAtLeast1HLTTight") -## oneNonIsolatedZToMuMuPathTight.__iadd__(oneNonIsolatedZToMuMuVtxedTight) -## oneNonIsolatedZToMuMuPathTight.setLabel("oneNonIsolatedZToMuMuTight") - -## twoNonIsolatedZToMuMuVtxedTight = copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTTight) -## twoNonIsolatedZToMuMuVtxedTight.src = cms.InputTag("twoNonIsolatedZToMuMuAtLeast1HLTTight") -## twoNonIsolatedZToMuMuPathTight.__iadd__(twoNonIsolatedZToMuMuVtxedTight) -## twoNonIsolatedZToMuMuPathTight.setLabel("twoNonIsolatedZToMuMuTight") - -## goodZToMuMuSameCharge2HLTVtxedTight= copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTTight) -## goodZToMuMuSameCharge2HLTVtxedTight.src = cms.InputTag("goodZToMuMuSameCharge2HLTTight") -## goodZToMuMuSameCharge2HLTPathTight.__iadd__(goodZToMuMuSameCharge2HLTVtxedTight) -## goodZToMuMuSameCharge2HLTPathTight.setLabel("goodZToMuMuSameCharge2HLTTight") - - -## goodZToMuMuSameCharge1HLTVtxedTight= copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTTight) -## goodZToMuMuSameCharge1HLTVtxedTight.src = cms.InputTag("goodZToMuMuSameCharge1HLTTight") -## goodZToMuMuSameCharge1HLTPathTight.__iadd__(goodZToMuMuSameCharge1HLTVtxedTight) -## goodZToMuMuSameCharge1HLTPathTight.setLabel("goodZToMuMuSameCharge1HLTTight") - - - -## goodZToMuMuOneStandAloneVtxedTight= copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTTight) -## goodZToMuMuOneStandAloneVtxedTight.src = cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLTTight") -## goodZToMuMuOneStandAloneMuonPathTight.__iadd__(goodZToMuMuOneStandAloneVtxedTight) -## goodZToMuMuOneStandAloneMuonPathTight.setLabel("goodZToMuMuOneStandAloneMuonTight") - -## goodZToMuMuOneTrackVtxedTight= copy.deepcopy(goodZToMuMuVtxedAtLeast1HLTTight) -## goodZToMuMuOneTrackVtxedTight.src = cms.InputTag("goodZToMuMuOneTrackFirstHLTTight") -## goodZToMuMuOneTrackPathTight.__iadd__(goodZToMuMuOneTrackVtxedTight) -## goodZToMuMuOneTrackPathTight.setLabel("goodZToMuMuOneTrackTight") - - - -## ### ntuples.... - -## goodZToMuMuVtxedNtupleTight = cms.EDProducer( -## "CandViewNtpProducer", -## src = cms.InputTag("goodZToMuMuVtxedTight"), -## variables = cms.VPSet( -## cms.PSet( -## tag = cms.untracked.string("mass"), -## quantity = cms.untracked.string("mass") -## ), -## cms.PSet( -## tag = cms.untracked.string("vertexNdof"), -## quantity = cms.untracked.string("vertexNdof") -## ), -## cms.PSet( -## tag = cms.untracked.string("vertexNormalizedChi2"), -## quantity = cms.untracked.string("vertexNormalizedChi2") -## ), -## ) -## ) - - -## goodZToMuMuVtxed2HLTNtupleTight = copy.deepcopy(goodZToMuMuVtxedNtupleTight) -## goodZToMuMuVtxed2HLTNtupleTight.src= cms.InputTag("goodZToMuMuVtxed2HLTTight") -## goodZToMuMu2HLTPathTight.__iadd__(goodZToMuMuVtxed2HLTTightNtupleTight) -## goodZToMuMu2HLTPathTight.setLabel("goodZToMuMu2HLTTight") - - -## goodZToMuMuVtxed1HLTNtupleTight = copy.deepcopy(goodZToMuMuVtxedNtupleTight) -## goodZToMuMuVtxed1HLTNtupleTight.src= cms.InputTag("goodZToMuMuVtxed1HLTTight") -## goodZToMuMu1HLTPathTight.__iadd__(goodZToMuMuVtxed1HLTNtupleTight) -## goodZToMuMu1HLTPathTight.setLabel("goodZToMuMu1HLTTight") - -## oneNonIsolatedZToMuMuVtxedNtupleTight = copy.deepcopy(goodZToMuMuVtxedNtupleTight) -## oneNonIsolatedZToMuMuVtxedNtupleTight.src = cms.InputTag("oneNonIsolatedZToMuMuVtxedTight") -## oneNonIsolatedZToMuMuPathTight.__iadd__(oneNonIsolatedZToMuMuVtxedNtupleTight) -## oneNonIsolatedZToMuMuPathTight.setLabel("oneNonIsolatedZToMuMuTight") - -## twoNonIsolatedZToMuMuVtxedNtupleTight = copy.deepcopy(goodZToMuMuVtxedNtupleTight) -## twoNonIsolatedZToMuMuVtxedNtupleTight.src = cms.InputTag("twoNonIsolatedZToMuMuVtxed") -## twoNonIsolatedZToMuMuPathTight.__iadd__(twoNonIsolatedZToMuMuVtxedNtupleTight) -## twoNonIsolatedZToMuMuPathTight.setLabel("twoNonIsolatedZToMuMuTight") - -## goodZToMuMuVtxedSameCharge2HLTNtupleTight= copy.deepcopy(goodZToMuMuVtxedNtupleTight) -## goodZToMuMuVtxedSameCharge2HLTNtupleTight.src = cms.InputTag("goodZToMuMuVtxedSameCharge2HLTTight") -## goodZToMuMuSameCharge2HLTPathTight.__iadd__(goodZToMuMuVtxedSameCharge2HLTNtupleTight) -## goodZToMuMuSameCharge2HLTPathTight.setLabel("goodZToMuMuVtxedSameCharge2HLTTight") - - -## goodZToMuMuVtxedSameCharge1HLTNtupleTight= copy.deepcopy(goodZToMuMuVtxedNtupleTight) -## goodZToMuMuVtxedSameCharge1HLTNtupleTight.src = cms.InputTag("goodZToMuMuVtxedSameCharge1HLTTight") -## goodZToMuMuSameCharge1HLTPathTight.__iadd__(goodZToMuMuVtxedSameCharge1HLTNtupleTight) -## goodZToMuMuSameCharge1HLTPathTight.setLabel("goodZToMuMuSameCharge1HLTTight") - - -## goodZToMuMuVtxedOneStandAloneNtupleTight= copy.deepcopy(goodZToMuMuVtxedNtupleTight) -## goodZToMuMuVtxedOneStandAloneNtupleTight.src = cms.InputTag("goodZToMuMuOneStandAloneVtxedTight") -## goodZToMuMuOneStandAloneMuonPathTight.__iadd__(goodZToMuMuVtxedOneStandAloneNtupleTight) -## goodZToMuMuOneStandAloneMuonPathTight.setLabel("goodZToMuMuOneStandAloneMuonTight") - -## goodZToMuMuVtxedOneTrackNtupleTight= copy.deepcopy(goodZToMuMuVtxedNtupleTight) -## goodZToMuMuVtxedOneTrackNtupleTight.src =cms.InputTag("goodZToMuMuOneTrackVtxed") -## goodZToMuMuOneTrackPathTight.__iadd__(goodZToMuMuVtxedOneTrackNtupleTight) -## goodZToMuMuOneTrackPathTight.setLabel("goodZToMuMuOneTrackTight") - - - -## vtxedNtuplesOutTight = cms.OutputModule( -## "PoolOutputModule", -## fileName = cms.untracked.string('VtxedNtupleTight_test.root'), -## outputCommands = cms.untracked.vstring( -## "drop *", -## # "keep *_goodZToMuMuOneStandAloneMuonNtuple_*_*", -## "keep *_goodZToMuMuVtxedNtupleTight_*_*", -## "keep *_goodZToMuMuVtxed1HLTNtupleTight_*_*", -## "keep *_goodZToMuMuVtxed2HLTNtupleTight_*_*", -## "keep *_goodZToMuMuVtxedSameCharge2HLTNtupleTight_*_*", -## "keep *_goodZToMuMuVtxedSameCharge1HLTNtupleTight_*_*", -## "keep *_nonIsolatedZToMuMuVtxedNtupleTight_*_*", -## "keep *_oneNonIsolatedZToMuMuVtxedNtupleTight_*_*", -## "keep *_twoNonIsolatedZToMuMuVtxedNtupleTight_*_*", -## "keep *_goodZToMuMuVtxedOneStandAloneNtupleTight_*_*", -## "keep *_goodZToMuMuVtxedOneTrackNtupleTight_*_*", -## # "keep *_goodZToMuMu2HLTVtxedNtuple_*_*", - -## ), -## SelectEvents = cms.untracked.PSet( -## SelectEvents = cms.vstring( -## "goodZToMuMuPathTight", -## "goodZToMuMu1HLTPathTight", -## "goodZToMuMu2HLTPathTight", -## "goodZToMuMuSameCharge2HLTPathTight", -## "goodZToMuMuSameCharge1HLTPathTight", -## "nonIsolatedZToMuMuPathTight", -## "oneNonIsolatedZToMuMuPathTight", -## "twoNonIsolatedZToMuMuPathTight", -## "goodZToMuMuOneTrackPathTight", -## "goodZToMuMuOneStandAloneMuonPathTight", -## ) -## ) -## ) - - -## vtxedNtuplesOutTight.setLabel("vtxedNtuplesOutTight") -## VtxedNtuplesOutTight.__iadd__(vtxedNtuplesOutTight) -## VtxedNtuplesOutTight.setLabel("VtxedNtuplesOutTight") diff --git a/ElectroWeakAnalysis/ZMuMu/python/ZMuMuGolden_cfi.py b/ElectroWeakAnalysis/ZMuMu/python/ZMuMuGolden_cfi.py deleted file mode 100755 index a905e7f87971e..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/python/ZMuMuGolden_cfi.py +++ /dev/null @@ -1,86 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy - -################################################### -# muons for ZMuMu # -################################################### - -goodGlobalMuons = cms.EDFilter("MuonViewRefSelector", - src = cms.InputTag("muons"), - cut = cms.string('isGlobalMuon = 1 & isTrackerMuon = 1 & pt > 20 & abs(eta)<2.1 & isolationR03().sumPt<3.0 & abs(globalTrack().dxy)<0.2 & globalTrack().hitPattern().numberOfValidTrackerHits>10'), - filter = cms.bool(True) -) - -################################################### -# combiner module # -################################################### - -zmmCands = cms.EDFilter("CandViewShallowCloneCombiner", - checkCharge = cms.bool(True), - cut = cms.string('mass > 60 & mass<120 & charge=0'), - decay = cms.string("goodGlobalMuons@+ goodGlobalMuons@-") -) - - -# dimuon filter -dimuonsFilter = cms.EDFilter("CandViewCountFilter", - src = cms.InputTag("zmmCands"), - minNumber = cms.uint32(1) -) - -### trigger filter: selection of the events which have fired the HLT trigger path given. You may want to use it or to duisegard at all add a trigger match or not.... - - - -import HLTrigger.HLTfilters.hltHighLevel_cfi - -dimuonsHLTFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() -# Add this to access 8E29 menu -dimuonsHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") -# for 1E31 menu -#dimuonsHLTFilter.HLTPaths = ["HLT_Mu9", "HLT_DoubleMu3"] -dimuonsHLTFilter.HLTPaths = ["HLT_Mu9"] - - - - -################################################## -### trigger mathching, optional ####### -################################################## - -zSelection = cms.PSet( -## cut already implemented, but one could add more (e.g. massMin, massMax,... change the pt or eta cut....) - cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2.1 & abs(daughter(1).eta)<2.1 & mass > 60"), - ) - - -##ZMuMu: at least one HLT trigger match -goodZToMuMuAtLeast1HLT = cms.EDFilter( - "ZGoldenSelectorAndFilter", - zSelection, - TrigTag = cms.InputTag("TriggerResults::HLT"), - triggerEvent = cms.InputTag( "hltTriggerSummaryAOD::HLT" ), - src = cms.InputTag("zmmCands"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - L3FilterName= cms.string("hltSingleMu9L3Filtered9"), - maxDPtRel = cms.double( 1.0 ), - maxDeltaR = cms.double( 0.2 ), - filter = cms.bool(True) -) - - - - -ewkZMuMuGoldenSequence = cms.Sequence( - goodGlobalMuons -# one may want to disregard the HLT filter - # * dimuonsHLTFilter - * zmmCands - * dimuonsFilter -# one may want to disregard the HLT matching - # * goodZToMuMuAtLeast1HLT -) - - diff --git a/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMuOneStandAloneMuon_cfi.py b/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMuOneStandAloneMuon_cfi.py deleted file mode 100644 index 9608297a52b1d..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMuOneStandAloneMuon_cfi.py +++ /dev/null @@ -1,63 +0,0 @@ -import FWCore.ParameterSet.Config as cms -import copy -from ElectroWeakAnalysis.ZMuMu.zSelection_cfi import * - -zToMuMuOneStandAloneMuonLoose = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelectionLoose, - src = cms.InputTag("dimuonsOneStandAloneMuon"), - filter = cms.bool(True) -) - -zToMuMuOneStandAloneMuon = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsOneStandAloneMuon"), - filter = cms.bool(True) -) - - -goodZToMuMuOneStandAloneMuonLoose = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneStandAloneMuonLoose"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -## attention to the overlap... should be done for both tight and loose cuts - -goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneStandAloneMuon"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - - - -#goodZToMuMuOneStandAloneMuon = copy.deepcopy(goodZTight) -#goodZToMuMuOneStandAloneMuon.src = cms.InputTag("goodZToMuMuOneStandAloneMuonLoose") - -#ZMuSta:requiring that the GlobalMuon has HLT match -goodZToMuMuOneStandAloneMuonFirstHLTLoose = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneStandAloneMuonLoose"), - condition =cms.string("globalisMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - -goodZToMuMuOneStandAloneMuonFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - condition =cms.string("globalisMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - - - -#goodZToMuMuOneStandAloneMuonFirstHLTTight = copy.deepcopy(goodZTight) -#goodZToMuMuOneStandAloneMuonFirstHLTTight.src = cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLT") diff --git a/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMuOneTrackUserData_cfi.py b/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMuOneTrackUserData_cfi.py deleted file mode 100644 index 3a040d0d16c9c..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMuOneTrackUserData_cfi.py +++ /dev/null @@ -1,69 +0,0 @@ -import FWCore.ParameterSet.Config as cms -import copy -from ElectroWeakAnalysis.ZMuMu.zSelection_cfi import * - -zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - src = cms.InputTag("userDataDimuonsOneTrack"), - filter = cms.bool(True) -) - -zToMuMuOneTrackLoose = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelectionLoose, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) - - -zToMuMuOneTrack = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) - - -## attention to the overlap... should be done with tight zmumu - -goodZToMuMuOneTrackLoose = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrackLoose"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrack"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - - - -#goodZToMuMuOneTrack = copy.deepcopy(goodZTight) -#goodZToMuMuOneTrack.src = cms.InputTag("goodZToMuMuOneTrackLoose") - - -#ZMuTk:requiring that the GlobalMuon 'First' has HLT match -goodZToMuMuOneTrackFirstHLTLoose = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrackLoose"), - condition =cms.string("firstMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - -#goodZToMuMuOneTrackFirstHLT = copy.deepcopy(goodZTight) -#goodZToMuMuOneTrackFirstHLT.src = cms.InputTag("goodZToMuMuOneTrackFirstHLTLoose") - -goodZToMuMuOneTrackFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrack"), - condition =cms.string("firstMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) diff --git a/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMuOneTrack_cfi.py b/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMuOneTrack_cfi.py deleted file mode 100644 index c295e81a83001..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMuOneTrack_cfi.py +++ /dev/null @@ -1,71 +0,0 @@ -import FWCore.ParameterSet.Config as cms -import copy -from ElectroWeakAnalysis.ZMuMu.zSelection_cfi import * - -zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - ### added UserData - src = cms.InputTag("userDataDimuonsOneTrack"), - ###src = cms.InputTag("dimuonsOneTrack"), - filter = cms.bool(True) -) - -zToMuMuOneTrackLoose = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelectionLoose, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) - - -zToMuMuOneTrack = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) - - -## attention to the overlap... should be done with tight zmumu - -goodZToMuMuOneTrackLoose = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrackLoose"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrack"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - - - -#goodZToMuMuOneTrack = copy.deepcopy(goodZTight) -#goodZToMuMuOneTrack.src = cms.InputTag("goodZToMuMuOneTrackLoose") - - -#ZMuTk:requiring that the GlobalMuon 'First' has HLT match -goodZToMuMuOneTrackFirstHLTLoose = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrackLoose"), - condition =cms.string("firstMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - -#goodZToMuMuOneTrackFirstHLT = copy.deepcopy(goodZTight) -#goodZToMuMuOneTrackFirstHLT.src = cms.InputTag("goodZToMuMuOneTrackFirstHLTLoose") - -goodZToMuMuOneTrackFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrack"), - condition =cms.string("firstMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) diff --git a/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMuOneTrackerMuon_cfi.py b/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMuOneTrackerMuon_cfi.py deleted file mode 100644 index ca807eaea3ce8..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMuOneTrackerMuon_cfi.py +++ /dev/null @@ -1,63 +0,0 @@ -import FWCore.ParameterSet.Config as cms -import copy -from ElectroWeakAnalysis.ZMuMu.zSelection_cfi import * - - - -zToMuMuOneTrackerMuonLoose = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelectionLoose, - src = cms.InputTag("dimuonsOneTrackerMuon"), - filter = cms.bool(True) -) - - -zToMuMuOneTrackerMuon = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsOneTrackerMuon"), - filter = cms.bool(True) -) - - - -## attention to the overlap... should be done with tight zmumu -goodZToMuMuOneTrackerMuonLoose = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrackerMuonLoose"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -goodZToMuMuOneTrackerMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrackerMuon"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - - - - - -#ZMuTrkMuon:requiring that the GlobalMuon has HLT match -goodZToMuMuOneTrackerMuonFirstHLTLoose = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrackerMuonLoose"), - condition =cms.string("globalisMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - -goodZToMuMuOneTrackerMuonFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrackerMuon"), - condition =cms.string("globalisMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - - - diff --git a/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMuSameCharge_cfi.py b/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMuSameCharge_cfi.py deleted file mode 100644 index bc863ac449dfe..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMuSameCharge_cfi.py +++ /dev/null @@ -1,69 +0,0 @@ -import FWCore.ParameterSet.Config as cms -import copy - -from ElectroWeakAnalysis.ZMuMu.zSelection_cfi import * - -# same charge dimuons.... -dimuonsGlobalSameCharge = cms.EDFilter( - "CandViewRefSelector", - ### added UserData - src = cms.InputTag("userDataDimuons"), - ##src = cms.InputTag("dimuons"), - cut = cms.string('charge!=0 & mass > 0 & daughter(0).isGlobalMuon = 1 & daughter(1).isGlobalMuon = 1') - ) - - -goodZToMuMuSameChargeLoose = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelectionLoose, - src = cms.InputTag("dimuonsGlobalSameCharge"), - filter = cms.bool(True) -) - -goodZToMuMuSameChargeLoose.cut=cms.string("charge!=0 & daughter(0).pt > 10 & daughter(1).pt > 10 & abs(daughter(0).eta)<2.1 & abs(daughter(1).eta)<2.1 ") - -goodZToMuMuSameCharge = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobalSameCharge"), - filter = cms.bool(True) -) - -goodZToMuMuSameCharge.cut=cms.string("charge!=0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2.1 & abs(daughter(1).eta)<2.1 ") - - - - - -goodZToMuMuSameChargeAtLeast1HLTLoose = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuSameChargeLoose"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -goodZToMuMuSameChargeAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuSameCharge"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - - - - -goodZToMuMuSameCharge2HLTLoose = copy.deepcopy(goodZToMuMuSameChargeAtLeast1HLTLoose) -goodZToMuMuSameCharge2HLTLoose.condition= cms.string("bothMatched") - -goodZToMuMuSameCharge1HLT = copy.deepcopy(goodZToMuMuSameChargeAtLeast1HLT) -goodZToMuMuSameCharge1HLT.condition= cms.string("bothMatched") - -goodZToMuMuSameCharge1HLTLoose = copy.deepcopy(goodZToMuMuSameChargeAtLeast1HLTLoose) -goodZToMuMuSameCharge1HLTLoose.condition= cms.string("exactlyOneMatched") - - -goodZToMuMuSameCharge2HLT = copy.deepcopy(goodZToMuMuSameChargeAtLeast1HLT) -goodZToMuMuSameCharge2HLT.condition= cms.string("exactlyOneMatched") diff --git a/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMu_cfi.py b/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMu_cfi.py deleted file mode 100644 index fd19ca5f3167d..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/python/goodZToMuMu_cfi.py +++ /dev/null @@ -1,163 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy - -from ElectroWeakAnalysis.ZMuMu.zSelection_cfi import * - -goodZToMuMuLoose = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelectionLoose, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) - -) - -goodZToMuMu = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - - -goodZToMuMuNotFiltered = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(False) ### not filtered, needed for AB and BB region study - -) - - - -#ZMuMu: requiring at least 1 HLT trigger match (for the shape) -goodZToMuMuAtLeast1HLTLoose = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuLoose"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -goodZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - - - -#ZMuMu: requiring 2 HLT trigger match -goodZToMuMu2HLTLoose = copy.deepcopy(goodZToMuMuAtLeast1HLTLoose) -goodZToMuMu2HLTLoose.condition =cms.string("bothMatched") - -goodZToMuMu2HLT = copy.deepcopy(goodZToMuMuAtLeast1HLT) -goodZToMuMu2HLT.condition =cms.string("bothMatched") - - -#ZMuMu: requiring 1 HLT trigger match -goodZToMuMu1HLTLoose = copy.deepcopy(goodZToMuMuAtLeast1HLTLoose) -goodZToMuMu1HLTLoose.condition =cms.string("exactlyOneMatched") - -goodZToMuMu1HLT = copy.deepcopy(goodZToMuMuAtLeast1HLT) -goodZToMuMu1HLT.condition =cms.string("exactlyOneMatched") - - - -### exploring the 2.1 -- 2.4 eta region -### A: |eta|<2.1, B: 2.1<|eta|<2.4 -zToMuMuABLoose = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelectionABLoose, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - - -### two muon with 2.1< eta < 2.4 -zToMuMuBBLoose = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelectionBBLoose, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - - -zToMuMuAB = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelectionAB, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -### two muon with 2.1< eta < 2.4 -zToMuMuBB = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelectionBB, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - - -goodZToMuMuABLoose = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuABLoose"), - overlap = cms.InputTag("goodZToMuMuNotFiltered"), - filter = cms.bool(True) -) - - -goodZToMuMuAB = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuAB"), - overlap = cms.InputTag("goodZToMuMuNotFiltered"), - filter = cms.bool(True) -) - - -goodZToMuMuAB1HLTLoose = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuABLoose"), - condition =cms.string("exactlyOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -goodZToMuMuBB2HLTLoose = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("zToMuMuBBLoose"), - condition =cms.string("bothMatched"), - hltPath = cms.string("HLT_DoubleMu3"), - filter = cms.bool(True) -) - - - -goodZToMuMuAB1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuAB"), - condition =cms.string("exactlyOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -goodZToMuMuBB2HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("zToMuMuBB"), - condition =cms.string("bothMatched"), - hltPath = cms.string("HLT_DoubleMu3"), - filter = cms.bool(True) -) - - - - - - - - - - diff --git a/ElectroWeakAnalysis/ZMuMu/python/nonIsolatedZToMuMu_cfi.py b/ElectroWeakAnalysis/ZMuMu/python/nonIsolatedZToMuMu_cfi.py deleted file mode 100644 index 0089876ed3c44..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/python/nonIsolatedZToMuMu_cfi.py +++ /dev/null @@ -1,68 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from ElectroWeakAnalysis.ZMuMu.zSelection_cfi import * -import copy - -#### tight only.... - -#ZMuMu:at least one muon is not isolated -nonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - - -#ZMuMu:1 muon is not isolated -oneNonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuOneNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("nonIsolatedZToMuMu"), - filter = cms.bool(True) -) - - - - -#ZMuMu: 2 muons are not isolated -twoNonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuTwoNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("nonIsolatedZToMuMu"), - filter = cms.bool(True) -) - - - -#ZMuMunotIso: requiring at least 1 trigger -nonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("nonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - -#ZMuMuOnenotIso: requiring at least 1 trigger -oneNonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("oneNonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - - -#ZMuMuTwonotIso: requiring at least 1 trigger -twoNonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("twoNonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - diff --git a/ElectroWeakAnalysis/ZMuMu/python/zSelection_cfi.py b/ElectroWeakAnalysis/ZMuMu/python/zSelection_cfi.py deleted file mode 100644 index 077ef5a456f4e..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/python/zSelection_cfi.py +++ /dev/null @@ -1,144 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -zSelectionLoose = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 15 & daughter(1).pt > 15 & abs(daughter(0).eta)<2.4 & abs(daughter(1).eta)<2.4 & mass > 0"), - isoCut = cms.double(1000.), - ptThreshold = cms.untracked.double(1.5), - etEcalThreshold = cms.untracked.double(0.2), - etHcalThreshold = cms.untracked.double(0.5), - deltaRVetoTrk = cms.untracked.double(0.015), - deltaRTrk = cms.untracked.double(0.3), - deltaREcal = cms.untracked.double(0.25), - deltaRHcal = cms.untracked.double(0.25), - alpha = cms.untracked.double(0.), - beta = cms.untracked.double(-0.75), - relativeIsolation = cms.bool(False) - -# For standard isolation (I_Tkr<3GeV) choose this configuration: -# isoCut = cms.double(3.), -# ptThreshold = cms.untracked.double(1.5), -# etEcalThreshold = cms.untracked.double(0.2), -# etHcalThreshold = cms.untracked.double(0.5), -# deltaRVetoTrk = cms.untracked.double(0.015), -# deltaRTrk = cms.untracked.double(0.3), -# deltaREcal = cms.untracked.double(0.25), -# deltaRHcal = cms.untracked.double(0.25), -# alpha = cms.untracked.double(0.), -# beta = cms.untracked.double(-0.75), -# relativeIsolation = cms.bool(False) - ) - - -##### I = alpha /2 (( 1 + beta) HCal + (1 - beta) Ecal ) + (1 - alpha)Trk - -####### combined isolation -#zSelection = cms.PSet( -# cut = cms.string("charge = 0 & daughter(0).pt > 20. & daughter(1).pt > 20. & abs(daughter(0).eta)<2.1 & abs(daughter(1).eta)<2.1 & mass > 0"), -# isoCut = cms.double(.45), ### with alpha = 2/3 and beta =0, so 0.45 is equivalent to 0.15...... -# ptThreshold = cms.untracked.double(0.), -# etEcalThreshold = cms.untracked.double(0.), -# etHcalThreshold = cms.untracked.double(0.), -# deltaRVetoTrk = cms.untracked.double(0.01), -# deltaRTrk = cms.untracked.double(0.3), -# deltaREcal = cms.untracked.double(0.3), -# deltaRHcal = cms.untracked.double(0.3), -# alpha = cms.untracked.double(0.666667), -# beta = cms.untracked.double(0.0), -# relativeIsolation = cms.bool(True) -# ) - - -#### tracker isolation -zSelection = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 20. & daughter(1).pt > 20. & abs(daughter(0).eta)<2.1 & abs(daughter(1).eta)<2.1 & mass > 0"), - isoCut = cms.double(3.00), - ptThreshold = cms.untracked.double(0.), - etEcalThreshold = cms.untracked.double(0.), - etHcalThreshold = cms.untracked.double(0.), - deltaRVetoTrk = cms.untracked.double(0.01), - deltaRTrk = cms.untracked.double(0.3), - deltaREcal = cms.untracked.double(0.3), - deltaRHcal = cms.untracked.double(0.3), - alpha = cms.untracked.double(0.), - beta = cms.untracked.double(0.0), - relativeIsolation = cms.bool(False) - ) - - - - -### region A: |eta|<2.1, region B: 2.1< |eta| <2.4 - -zSelectionABLoose = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 15 & daughter(1).pt > 15 & ( (abs(daughter(0).eta)<2.1 & 2.1< abs(daughter(1).eta)<2.4 ) || (abs(daughter(1).eta)<2.1 & 2.1< abs(daughter(0).eta)<2.4 ) ) & mass > 0"), - isoCut = cms.double(1000.), - ptThreshold = cms.untracked.double(1.5), - etEcalThreshold = cms.untracked.double(0.2), - etHcalThreshold = cms.untracked.double(0.5), - deltaRVetoTrk = cms.untracked.double(0.015), - deltaRTrk = cms.untracked.double(0.3), - deltaREcal = cms.untracked.double(0.25), - deltaRHcal = cms.untracked.double(0.25), - alpha = cms.untracked.double(0.), - beta = cms.untracked.double(-0.75), - relativeIsolation = cms.bool(False) - ) - - -zSelectionAB = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 20. & daughter(1).pt > 20. & ( (abs(daughter(0).eta)<2.1 & 2.1< abs(daughter(1).eta)<2.4 ) || (abs(daughter(1).eta)<2.1 & 2.1< abs(daughter(0).eta)<2.4 ) ) & mass > 0"), - isoCut = cms.double(1000.), - ptThreshold = cms.untracked.double(1.5), - etEcalThreshold = cms.untracked.double(0.2), - etHcalThreshold = cms.untracked.double(0.5), - deltaRVetoTrk = cms.untracked.double(0.015), - deltaRTrk = cms.untracked.double(0.3), - deltaREcal = cms.untracked.double(0.25), - deltaRHcal = cms.untracked.double(0.25), - alpha = cms.untracked.double(0.), - beta = cms.untracked.double(-0.75), - relativeIsolation = cms.bool(False) - ) - - -zSelectionBBLoose = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 15 & daughter(1).pt > 15 & ( 2.1< abs(daughter(0).eta)<2.4 & 2.1< abs(daughter(1).eta)<2.4 ) & mass > 0"), - isoCut = cms.double(1000.), - ptThreshold = cms.untracked.double(1.5), - etEcalThreshold = cms.untracked.double(0.2), - etHcalThreshold = cms.untracked.double(0.5), - deltaRVetoTrk = cms.untracked.double(0.015), - deltaRTrk = cms.untracked.double(0.3), - deltaREcal = cms.untracked.double(0.25), - deltaRHcal = cms.untracked.double(0.25), - alpha = cms.untracked.double(0.), - beta = cms.untracked.double(-0.75), - relativeIsolation = cms.bool(False) - ) - - -zSelectionBB = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & ( 2.1< abs(daughter(0).eta)<2.4 & 2.1< abs(daughter(1).eta)<2.4 ) & mass > 0"), - isoCut = cms.double(1000.), - ptThreshold = cms.untracked.double(1.5), - etEcalThreshold = cms.untracked.double(0.2), - etHcalThreshold = cms.untracked.double(0.5), - deltaRVetoTrk = cms.untracked.double(0.015), - deltaRTrk = cms.untracked.double(0.3), - deltaREcal = cms.untracked.double(0.25), - deltaRHcal = cms.untracked.double(0.25), - alpha = cms.untracked.double(0.), - beta = cms.untracked.double(-0.75), - relativeIsolation = cms.bool(False) - ) - - - - -goodZTight = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("goodZ"), - filter = cms.bool(True) -) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/BTagAnalysis.py b/ElectroWeakAnalysis/ZMuMu/test/BTagAnalysis.py deleted file mode 100644 index de162b60e1ab6..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/BTagAnalysis.py +++ /dev/null @@ -1,71 +0,0 @@ - - -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("ZToMuMuAnalysis") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.maxEvents = cms.untracked.PSet( -# input = cms.untracked.int32(17810) - input = cms.untracked.int32(100) -) - -#process.load("ElectroWeakAnalysis/ZMuMu/OCTSUBSKIM_cff") - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( -"file:/afs/cern.ch/user/d/degrutto/scratch0/testZmm/CMSSW_3_5_7/src/ElectroWeakAnalysis/ZMuMu/test/ZMuMuSubskim_135149.root" -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/zmm/testZMuMuSubSkim_1.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/zmm/testZMuMuSubSkim_2.root", -# "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_1.root", -# "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_2.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_3.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_4.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_5.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_6.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/TTbar/testZMuMuSubSkim_1.root", - ) -) - - - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("ewkZMuMuCategories_oneshot_all_3_Test.root") - ) - - - - -process.globalMuQualityCutsAnalysis= cms.EDAnalyzer( - "BjetAnalysis", -# actually one can clean all it up..... I don't need any other branch..... - src = cms.InputTag("muons"), # dimuonsOneTrack, dimuonsOneStandAlone - ptMin = cms.untracked.double(0.0), - massMin = cms.untracked.double(0.0), - massMax = cms.untracked.double(120.0), - etaMin = cms.untracked.double(-1.0), - etaMax = cms.untracked.double(10.0), - trkIso = cms.untracked.double(10000), - chi2Cut = cms.untracked.double(10), - nHitCut = cms.untracked.int32(10) - ) - - - -process.initialGoodZToMuMuPath = cms.Path( - process.globalMuQualityCutsAnalysis -) - - -#process.endPath = cms.EndPath( -# process.out -#) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/BuildFile.xml b/ElectroWeakAnalysis/ZMuMu/test/BuildFile.xml deleted file mode 100644 index 0ecd2c37519dd..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/BuildFile.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/EWKSystUnc.py b/ElectroWeakAnalysis/ZMuMu/test/EWKSystUnc.py deleted file mode 100644 index 631e50c568933..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/EWKSystUnc.py +++ /dev/null @@ -1,107 +0,0 @@ -from __future__ import print_function -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("ewkSystUnc") - -process.maxEvents = cms.untracked.PSet( - #input = cms.untracked.int32(-1) - input = cms.untracked.int32(-1) -) - - -## process.source = cms.Source("PoolSource", -## debugVerbosity = cms.untracked.uint32(0), -## debugFlag = cms.untracked.bool(False), -## fileNames = cms.untracked.vstring() -## ) -## import os -## dirname = "/scratch1/cms/data/summer08/Zmumu_M20/" -## dirlist = os.listdir(dirname) -## basenamelist = os.listdir(dirname + "/") -## for basename in basenamelist: -## process.source.fileNames.append("file:" + dirname + "/" + basename) -## print "Number of files to process is %s" % (len(process.source.fileNames)) - - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:genParticlePlusISRANDFSRWeights.root', -) -) -process.evtInfo = cms.OutputModule("AsciiOutputModule") - - -process.TFileService = cms.Service("TFileService", - fileName = cms.string('EWKWeights.root') -) - - -#for i in range(41): -# proc = "process.zpdf" + str(i) - # print "proc", proc -process.ewkSyst = cms.EDAnalyzer("EWKSystUnc", - genParticles = cms.InputTag("genParticles"), - weights = cms.InputTag("xxxxx"), - nbinsMass=cms.untracked.uint32(200), - nbinsPt=cms.untracked.uint32(200), - nbinsAng=cms.untracked.uint32(200), - massMax = cms.untracked.double(200.), - ptMax= cms.untracked.double(200.), - angMax = cms.untracked.double(6.), - #parameter for the geometric acceptance - accPtMin = cms.untracked.double(20.0), - accMassMin = cms.untracked.double(60.0), - accMassMax = cms.untracked.double(120.0), - accEtaMin = cms.untracked.double(0.0), - accEtaMax = cms.untracked.double(2.1), - isMCatNLO= cms.untracked.bool(False), - outfilename= cms.untracked.string("xxxxx.txt") - ) - -w_1 = "isrWeight" -w_2 = "fsrWeight" -w_3= "isrGammaWeight" - - - -### w1 members ### -module_1 = copy.deepcopy(process.ewkSyst) -setattr(module_1, "weights", w_1) -setattr(module_1, "outfilename", w_1 + ".txt") -moduleLabel_1 = module_1.label() + w_1 -setattr(process, moduleLabel_1, module_1) - - -### w2 members ### -module_2 = copy.deepcopy(process.ewkSyst) -setattr(module_2, "weights", w_2) -setattr(module_2, "outfilename", w_2 + ".txt") -moduleLabel_2 = module_2.label() + w_2 -setattr(process, moduleLabel_2, module_2) - -### w2 members ### -module_3 = copy.deepcopy(process.ewkSyst) -setattr(module_3, "weights", w_3) -setattr(module_3, "outfilename", w_3 + ".txt") -moduleLabel_3 = module_3.label() + w_3 -setattr(process, moduleLabel_3, module_3) - -seq= module_1 + module_2 + module_3 - - - -print("sequence", seq) - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - - - - -process.path=cms.Path(seq) -process.end = cms.EndPath(process.evtInfo ) - - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/EWKSystematicsAnalyzer.py b/ElectroWeakAnalysis/ZMuMu/test/EWKSystematicsAnalyzer.py deleted file mode 100644 index 2ae383e92a98e..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/EWKSystematicsAnalyzer.py +++ /dev/null @@ -1,133 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process name -process = cms.Process("systAna") - -# Max events -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) - #input = cms.untracked.int32(100) -) - -# Printouts -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr.threshold = '' -process.MessageLogger.cerr.FwkReport.reportEvery = 1000 - - -# Input files (on disk) -process.source = cms.Source("PoolSource", - debugVerbosity = cms.untracked.uint32(0), - debugFlag = cms.untracked.bool(False), - fileNames = cms.untracked.vstring( -"file:~/Zmumu7TeVGenSimReco/0ABB0814-C082-DE11-9AB7-003048D4767C.root", -"file:~/Zmumu7TeVGenSimReco/0ABB0814-C082-DE11-9AB7-003048D4767C.root", -"file:~/Zmumu7TeVGenSimReco/38980FEC-C182-DE11-A3B5-003048D4767C.root", - "file:~/Zmumu7TeVGenSimReco/3AF703B9-AE82-DE11-9656-0015172C0925.root", -"file:~/Zmumu7TeVGenSimReco/46854F8E-BC82-DE11-80AA-003048D47673.root", - "file:~/Zmumu7TeVGenSimReco/8025F9B0-AC82-DE11-8C28-0015172560C6.root", - "file:~/Zmumu7TeVGenSimReco/88DDF58E-BC82-DE11-ADD8-003048D47679.root", - "file:~/Zmumu7TeVGenSimReco/9A115324-BB82-DE11-9C66-001517252130.root", -"file:~/Zmumu7TeVGenSimReco/FC279CAC-AD82-DE11-BAAA-001517357D36.root" - ) -) - -# Printout of generator information for the first event -process.include("SimGeneral/HepPDTESSource/data/pythiapdt.cfi") -process.printGenParticles = cms.EDAnalyzer("ParticleListDrawer", - maxEventsToPrint = cms.untracked.int32(10), - printVertex = cms.untracked.bool(False), - src = cms.InputTag("genParticles") -) - - -# Produce event weights according to generated boson Pt -# Example corresponds to approximate weights to study -# systematic effects due to ISR uncertainties (Z boson as fake example) -process.isrWeight = cms.EDProducer("ISRWeightProducer", - GenTag = cms.untracked.InputTag("VtxSmeared"), - ISRBinEdges = cms.untracked.vdouble( - 0., 1., 2., 3., 4., 5., 6., 7., 8., 9. - , 10., 11., 12., 13., 14., 15., 16., 17., 18., 19. - , 20., 21., 22., 23., 24., 25., 26., 27., 28., 29. - , 30., 31., 32., 33., 34., 35., 36., 37., 38., 39. - , 40., 41., 42., 43., 44., 45., 46., 47., 48., 49. - , 999999. - ), - PtWeights = cms.untracked.vdouble( - 0.800665, 0.822121, 0.851249, 0.868285, 0.878733 - , 0.953853, 0.928108, 0.982021, 1.00659 , 1.00648 - , 1.03218 , 1.04924 , 1.03621 , 1.08743 , 1.01951 - , 1.10519 , 0.984263, 1.04853 , 1.06724 , 1.10183 - , 1.0503 , 1.13162 , 1.03837 , 1.12936 , 0.999173 - , 1.01453 , 1.11435 , 1.10545 , 1.07199 , 1.04542 - , 1.00828 , 1.0822 , 1.09667 , 1.16144 , 1.13906 - , 1.27974 , 1.14936 , 1.23235 , 1.06667 , 1.06363 - , 1.14225 , 1.22955 , 1.12674 , 1.03944 , 1.04639 - , 1.13667 , 1.20493 , 1.09349 , 1.2107 , 1.21073 - ) -) - -# Produce event weights to estimate missing O(alpha) terms + NLO QED terms -process.fsrWeight = cms.EDProducer("FSRWeightProducer", - GenTag = cms.untracked.InputTag("VtxSmeared"), -) - -# Produce event weights to estimate missing QED ISR terms -process.isrGammaWeight = cms.EDProducer("ISRGammaWeightProducer", - GenTag = cms.untracked.InputTag("VtxSmeared"), -) - -# Produce weights for systematics -process.systematicsAnalyzer = cms.EDFilter("SimpleSystematicsAnalyzer", - SelectorPath = cms.untracked.string('systAna'), - WeightTags = cms.untracked.VInputTag("isrWeight","fsrWeight","isrGammaWeight") -) - - -# Save weights in the output file -process.load("Configuration.EventContent.EventContent_cff") -process.MyEventContent = cms.PSet( - outputCommands = process.AODSIMEventContent.outputCommands -) -process.MyEventContent.outputCommands.extend( - cms.untracked.vstring('drop *', - 'keep *_genParticles_*_*', - 'keep *_isrWeight_*_*', - 'keep *_fsrWeight_*_*', - 'keep *_isrGammaWeight_*_*', - # 'keep *_MRST2007lomodewkPdfWeights_*_*', 'keep -# *_cteq6mLHewkPdfWeights_*_*', - # 'keep *_MRST2007lomodewkPdfWeights_*_*', 'kee -#p *_MRST2004nloewkPdfWeights_*_*', - # 'keep *_genEventWeight_*_*' - ) -) - -# Output (optionaly filtered by path) -process.Output = cms.OutputModule("PoolOutputModule", - process.MyEventContent, - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('systAna') - ), - fileName = cms.untracked.string('genParticlePlusISRANDFSRWeights.root') -) - - - - - - - -# Main path -process.systAna = cms.Path( - process.printGenParticles - *process.isrWeight - *process.fsrWeight - *process.isrGammaWeight - -) - -process.end = cms.EndPath(process.systematicsAnalyzer - * process.Output - ) diff --git a/ElectroWeakAnalysis/ZMuMu/test/EWK_ZMuMuAnalysis.py b/ElectroWeakAnalysis/ZMuMu/test/EWK_ZMuMuAnalysis.py deleted file mode 100755 index f2970d4a13ac1..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/EWK_ZMuMuAnalysis.py +++ /dev/null @@ -1,102 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("ZMuMuSubskim") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) -#process.options.SkipEvent = cms.untracked.vstring('ProductNotFound') -process.options.FailPath = cms.untracked.vstring('ProductNotFound') - - -process.MessageLogger.cerr.threshold = '' -process.MessageLogger.cerr.FwkReport.reportEvery = 100 - - -# Input files -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - '/store/relval/CMSSW_3_8_5/RelValZMM/GEN-SIM-RECO/START38_V12-v1/0041/1C1BBE0B-D2D2-DF11-BDA3-002618943852.root' - ) -) -#import os -#dirname = "/tmp/degrutto/MinBiasMC/" -#dirlist = os.listdir(dirname) -#basenamelist = os.listdir(dirname + "/") -#for basename in basenamelist: -# process.source.fileNames.append("file:" + dirname + "/" + basename) -# print "Number of files to process is %s" % (len(process.source.fileNames)) - - - - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1000) ) - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('START38_V12::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - -### Subskim - -############ -## to run on data or without MC truth uncomment the following -#process.load("ElectroWeakAnalysis.Skimming.zMuMu_SubskimPaths_cff") -############ - -# output module configuration -process.load("ElectroWeakAnalysis.Skimming.zMuMuSubskimOutputModule_cfi") - -############ -## to run the MC truth uncomment the following -## Look also at python/ZMuMuAnalysisSchedules_cff.py -process.load("ElectroWeakAnalysis.Skimming.zMuMu_SubskimPathsWithMCTruth_cff") -process.zMuMuSubskimOutputModule.outputCommands.extend(process.mcEventContent.outputCommands) -#### - -process.zMuMuSubskimOutputModule.fileName = 'file:/tmp/fabozzi/testZMuMuSubskim_oneshot_Test.root' - -process.outpath = cms.EndPath(process.zMuMuSubskimOutputModule) - -### Here set the HLT Path for trigger matching -process.muonTriggerMatchHLTMuons.pathNames = cms.vstring( 'HLT_Mu11' ) -process.userDataMuons.hltPath = cms.string("HLT_Mu11") -process.userDataDimuons.hltPath = cms.string("HLT_Mu11") -process.userDataDimuonsOneTrack.hltPath = cms.string("HLT_Mu11") -############ - -### Analysis -from ElectroWeakAnalysis.ZMuMu.ZMuMuCategoriesSequences_cff import * - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string('ewkZMuMuCategories_oneshot_Test.root') -) - - -### vertexing -process.load("ElectroWeakAnalysis.ZMuMu.ZMuMuCategoriesVtxed_cff") -process.vtxedNtuplesOut.fileName = cms.untracked.string('file:/tmp/fabozzi/VtxedNtupleLoose_test.root') - -### 3_5_X reprocessed MC: to process REDIGI HLT tables uncomment the following -#process.patTrigger.processName = "REDIGI" -#process.patTriggerEvent.processName = "REDIGI" -#process.patTrigger.triggerResults = cms.InputTag( "TriggerResults::REDIGI" ) -#process.patTrigger.triggerEvent = cms.InputTag( "hltTriggerSummaryAOD::REDIGI" ) - -### 3_6_X reprocessed MC: to process REDIGI HLT tables uncomment the following -#process.dimuonsHLTFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","REDIGI36X") -#process.patTrigger.processName = "REDIGI36X" -#process.patTriggerEvent.processName = "REDIGI36X" -#process.patTrigger.triggerResults = cms.InputTag( "TriggerResults::REDIGI36X" ) -#process.patTrigger.triggerEvent = cms.InputTag( "hltTriggerSummaryAOD::REDIGI36X" ) - -### plots -process.load("ElectroWeakAnalysis.ZMuMu.ZMuMuCategoriesPlots_cff") - -### ntuple -process.load("ElectroWeakAnalysis.ZMuMu.ZMuMuAnalysisNtupler_cff") -process.ntuplesOut.fileName = cms.untracked.string('file:/tmp/fabozzi/NtupleLooseTestNew_oneshot_all_Test.root') - -### -process.load("ElectroWeakAnalysis.ZMuMu.ZMuMuAnalysisSchedules_cff") - diff --git a/ElectroWeakAnalysis/ZMuMu/test/EWK_ZMuMuSubskimUserData.py b/ElectroWeakAnalysis/ZMuMu/test/EWK_ZMuMuSubskimUserData.py deleted file mode 100755 index c89f0b2f22759..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/EWK_ZMuMuSubskimUserData.py +++ /dev/null @@ -1,33 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("TestZMuMuSubskim") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - #'file:../../Skimming/test/mc7Tev.root' - 'rfio:/castor/cern.ch/user/f/fabozzi/mc7tev/F8EE38AF-1EBE-DE11-8D19-00304891F14E.root' - #'rfio:/castor/cern.ch/user/f/fabozzi/mc7tev/F8EE38AF-1EBE-DE11-8D19-00304891F14E.root' -# 'file:/scratch1/cms/data/summer09/aodsim/zmumu/0016/889E7356-0084-DE11-AF48-001E682F8676.root' -# 'file:testEWKMuSkim.root' - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(500) ) - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('START3X_V18::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - -process.load("ElectroWeakAnalysis.ZMuMu.zMuMu_SubskimPathsUserData_cff") - -# Output module configuration -process.load("ElectroWeakAnalysis.ZMuMu.zMuMuSubskimOutputModuleUserData_cfi") -process.zMuMuSubskimOutputModule.fileName = 'file:testZMuMuSubskimUserData.root' - -process.outpath = cms.EndPath(process.zMuMuSubskimOutputModule) - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/EvalPdfUnc.py b/ElectroWeakAnalysis/ZMuMu/test/EvalPdfUnc.py deleted file mode 100644 index 9dec256295290..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/EvalPdfUnc.py +++ /dev/null @@ -1,211 +0,0 @@ -from __future__ import print_function -import os, sys, re -import string -import math -from ROOT import * - -usage = "usage: %s python EvalPdfUnc.py infile outfile" % os.path.basename(sys.argv[0]) - -if len(sys.argv) < 3: - print(usage) - sys.exit(2) -else: - argv = sys.argv - print(argv) - infile = argv[1] - outfile = argv[2] - print(argv[1]) - f = open(infile, 'read') - ## outfile in append mode - ff = open(outfile,'a') - - - -acc = std.vector(float)() -acc_rew = std.vector(float)() -nevt = std.vector(float)() -nevt_rew = std.vector(float)() -line= f.readline() -while line: - l=line.split() - acc.push_back( float(l[0])) - acc_rew.push_back( float(l[1]) ) - nevt.push_back( float(l[2])) - nevt_rew.push_back( float(l[3])) - line= f.readline() -f.close() -#for i in acc_rew: -# print i - - -def mean ( v): - mean = 0. - for e in v: - mean+= e - n = float(v.size()) - return ( mean / n ) - -avg_acc = mean (acc) -print("mean acc: ", avg_acc) -avg_acc_rew = mean (acc_rew) -print("mean acc_rew: ", avg_acc_rew) -diff_acc= (avg_acc_rew - avg_acc) / ( avg_acc ) -avg_nevt = mean (nevt) -print("mean nevt: ", avg_nevt) -avg_nevt_rew = mean (nevt_rew) -print("mean nevt_rew: ", avg_nevt_rew) -diff_evt = (avg_nevt_rew - avg_nevt) / ( avg_nevt ) - - -def eval_asym_sys(eff): - ## asym error according to Hof's master formula - d1 = 0. - d2 = 0. - x0 = 0. - s1 = 0. - s2 = 0. - for idx in range(len(eff)) : - i = eff[idx] - if idx == 0 : - x0 = i - else : - if idx % 2 != 0: - d1 = i - x0 - else : - d2 = x0 - i - if(d1 < 0) : - #if (d2<0): - # d1=0 - # d2=0 - tmp = d1 - d1 = -d2 - d2 = -tmp - print(idx/2, ' ' , x0, '[+', d1, ' -', d2, ']') - m1 = max(d1, 0.) - s1 += m1*m1 - m2 = max(d2, 0.) - s2 += m2*m2 - s1 = sqrt(s1) - s2 = sqrt(s2) - print(infile, 'asym error', file=ff) - print(' x = ', x0, '[+', s1, ' -', s2, ']', file=ff) - print('err = +', s1/x0*100, ' -', s2/x0*100, file=ff) - - - -def eval_max_asym_sys(eff): - ## symmetrizing the error, taking each step the max between the two asym errors - d1 = 0. - d2 = 0. - x0 = 0. - s1 = 0. - for idx in range(len(eff)) : - i = eff[idx] - if idx == 0 : - x0 = i - else : - if idx % 2 != 0: - d1 = i - x0 - else : - d2 = x0 - i - if(d1 < 0) : - #if (d2<0): - # d1=0 - # d2=0 - tmp = d1 - d1 = -d2 - d2 = -tmp - print(idx/2, ' ' , x0, '[+', d1, ' -', d2, ']') - m = max(abs(d1), abs(d2)) - s1 += m*m - s1 = sqrt(s1) - print(infile, 'sym error taking the max between asym errors', file=ff) - print(' x = ', x0, '[+', s1, ' -', s1, ']', file=ff) - print('err = +', s1/x0*100, ' -', s1/x0*100, file=ff) - - - - -def eval_mean_asym_sys(eff): - ## symmetrizing the error, taking each step the mean between the two asym errors - d1 = 0. - d2 = 0. - x0 = 0. - s1 = 0. - for idx in range(len(eff)) : - i = eff[idx] - if idx == 0 : - x0 = i - else : - if idx % 2 != 0: - d1 = i - x0 - else : - d2 = x0 - i - if(d1 < 0) : - #if (d2<0): - # d1=0 - # d2=0 - tmp = d1 - d1 = -d2 - d2 = -tmp - print(idx/2, ' ' , x0, '[+', d1, ' -', d2, ']') - m = 0.5 * ( abs(d1) + abs(d2)) - s1 += m*m - s1 = sqrt(s1) - print(infile, 'sym error taking the mean between asym errors', file=ff) - print(' x = ', x0, '[+', s1, ' -', s1, ']', file=ff) - print('err = +', s1/x0*100, ' -', s1/x0*100, file=ff) - - - -def eval_quadsum_asym_sys(eff): - ## symmetrizing the error, taking each step the quadractic sum between the two asym errors - d1 = 0. - d2 = 0. - x0 = 0. - s1 = 0. - for idx in range(len(eff)) : - i = eff[idx] - if idx == 0 : - x0 = i - else : - if idx % 2 != 0: - d1 = i - x0 - else : - d2 = x0 - i - if(d1 < 0) : - #if (d2<0): - # d1=0 - # d2=0 - tmp = d1 - d1 = -d2 - d2 = -tmp - print(idx/2, ' ' , x0, '[+', d1, ' -', d2, ']') - m = sqrt( 0.5 *( abs(d1)* abs(d1) + abs(d2)*abs(d2)) ) - s1 += m*m - s1 = sqrt(s1) - print(infile, 'sym error taking the qaudratic sum between asym errors', file=ff) - print(' x = ', x0, '[+', s1, ' -', s1, ']', file=ff) - print('err = +', s1/x0*100, ' -', s1/x0*100, file=ff) - - -sys_acc_asym = eval_asym_sys(acc_rew) -sys_nevt_asym = eval_asym_sys(nevt_rew ) - - -sys_acc_max_asym = eval_max_asym_sys(acc_rew) -sys_nevt_max_asym = eval_max_asym_sys(nevt_rew ) - -sys_acc_mean_asym = eval_mean_asym_sys(acc_rew) -sys_nevt_mean_asym = eval_mean_asym_sys(nevt_rew ) - -sys_acc_quadsum_asym = eval_quadsum_asym_sys(acc_rew) -sys_nevt_quadsum_asym = eval_quadsum_asym_sys(nevt_rew ) - - - - - -#print "sys acc:", acc_rew[0], " +- " , sys_acc -#print "sys nevt:", nevt_rew[0], " +- " , sys_nevt - diff --git a/ElectroWeakAnalysis/ZMuMu/test/MuAnalysis.py b/ElectroWeakAnalysis/ZMuMu/test/MuAnalysis.py deleted file mode 100644 index e1657afd0ece0..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/MuAnalysis.py +++ /dev/null @@ -1,245 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("MuonAnalysis") - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - -#"file:~/www/2010/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133483_331.root" -# "file:MuTriggerReco_1_1.root" - - - ) -) - -#import os -#dirname = "/data4/Skimming/SkimResults/135" -#dirlist = os.listdir(dirname) -#basenamelist = os.listdir(dirname + "/") -#for basename in basenamelist: -# process.source.fileNames.append("file:" + dirname + "/" + basename) -# print "Number of files to process is %s" % (len(process.source.fileNames)) - - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) -process.MessageLogger.cerr.threshold = '' -process.MessageLogger.cerr.FwkReport.reportEvery = 10000 - - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('START3X_V21::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - -process.load("ElectroWeakAnalysis.Skimming.patCandidatesForZMuMuSubskim_cff") - -process.selectedPatMuons.cut = 'pt > 5. & abs(eta) < 100.0' - -process.load("ElectroWeakAnalysis.Skimming.zMuMuMuonUserData") - - - - - - - - - - -### CandViewNtpProducer Configuration - common to all categories. - -process.goodMuonsEdmNtuple = cms.EDProducer( - "CandViewNtpProducer", - src=cms.InputTag("userDataMuons"), - lazyParser=cms.untracked.bool(True), - prefix=cms.untracked.string("Mu"), - eventInfo=cms.untracked.bool(True), - variables = cms.VPSet( - cms.PSet( - tag = cms.untracked.string("Pt"), - quantity = cms.untracked.string("pt") - ), - cms.PSet( - tag = cms.untracked.string("Eta"), - quantity = cms.untracked.string("eta") - ), - cms.PSet( - tag = cms.untracked.string("Phi"), - quantity = cms.untracked.string("phi") - ), - cms.PSet( - tag = cms.untracked.string("Q"), - quantity = cms.untracked.string("charge") - ), - cms.PSet( - tag = cms.untracked.string("Iso"), - quantity = cms.untracked.string("userIso(3)") - ), - cms.PSet( - tag = cms.untracked.string("RelIso"), - quantity = cms.untracked.string("userIso(4)") - ), - cms.PSet( - tag = cms.untracked.string("TrkIso"), - quantity = cms.untracked.string("userIso(0)") - ), - cms.PSet( - tag = cms.untracked.string("EcalIso"), - quantity = cms.untracked.string("userIso(1)") - ), - cms.PSet( - tag = cms.untracked.string("HcalIso"), - quantity = cms.untracked.string("userIso(2)") - ), - cms.PSet( - tag = cms.untracked.string("DxyFromBS"), - quantity = cms.untracked.string("userFloat('zDau_dxyFromBS')") - ), - cms.PSet( - tag = cms.untracked.string("DzFromBS"), - quantity = cms.untracked.string("userFloat('zDau_dzFromBS')") - ), - cms.PSet( - tag = cms.untracked.string("DxyFromPV"), - quantity = cms.untracked.string("userFloat('zDau_dxyFromPV')") - ), - cms.PSet( - tag = cms.untracked.string("DzFromPV"), - quantity = cms.untracked.string("userFloat('zDau_dzFromPV')") - ), - cms.PSet( - tag = cms.untracked.string("HLTBit"), - quantity = cms.untracked.string("userFloat('zDau_HLTBit')") - ), - cms.PSet( - tag = cms.untracked.string("Chi2"), - quantity = cms.untracked.string("userFloat('zDau_Chi2')") - ), - cms.PSet( - tag = cms.untracked.string("TrkChi2"), - quantity = cms.untracked.string("userFloat('zDau_TrkChi2')") - ), - cms.PSet( - tag = cms.untracked.string("SaChi2"), - quantity = cms.untracked.string("userFloat('zDau_SaChi2')") - ), - cms.PSet( - tag = cms.untracked.string("NofMuonHits"), - quantity = cms.untracked.string("userFloat('zDau_NofMuonHits')") - ), - cms.PSet( - tag = cms.untracked.string("SaNofMuonHits"), - quantity = cms.untracked.string("userFloat('zDau_SaNofMuonHits')") - ), - cms.PSet( - tag = cms.untracked.string("NofStripHits"), - quantity = cms.untracked.string("userFloat('zDau_NofStripHits')") - ), - cms.PSet( - tag = cms.untracked.string("NofPixelHits"), - quantity = cms.untracked.string("userFloat('zDau_NofPixelHits')") - ), - cms.PSet( - tag = cms.untracked.string("TrkNofStripHits"), - quantity = cms.untracked.string("userFloat('zDau_TrkNofStripHits')") - ), - cms.PSet( - tag = cms.untracked.string("NofMuChambers"), - quantity = cms.untracked.string("userFloat('zDau_NofMuChambers')") - ), - cms.PSet( - tag = cms.untracked.string("NofMuMatches"), - quantity = cms.untracked.string("userFloat('zDau_NofMuMatches')") - ), - cms.PSet( - tag = cms.untracked.string("EnergyEm"), - quantity = cms.untracked.string("userFloat('zDau_MuEnergyEm')") - ), - cms.PSet( - tag = cms.untracked.string("GlobalMuonBit"), - quantity = cms.untracked.string("isGlobalMuon") - ), - cms.PSet( - tag = cms.untracked.string("StandAloneBit"), - quantity = cms.untracked.string("isStandAloneMuon") - ), - cms.PSet( - tag = cms.untracked.string("TrackerMuonBit"), - quantity = cms.untracked.string("isTrackerMuon") - ), - - - ) - ) - - - - - - -# Output module configuration -from Configuration.EventContent.EventContent_cff import * - -EventContent = cms.PSet( - outputCommands = cms.untracked.vstring( - ) - ) - -## ntpEventContent = cms.PSet( -## outputCommands = cms.untracked.vstring( -## "keep *_goodMuonsNtuples_*_*" -## ) -## ) - -EventContent.outputCommands.extend(RECOEventContent.outputCommands) -## EventContent.outputCommands.extend(ntpEventContent.outputCommands) - - -EventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - 'muonsNtpPath') - ) - ) - - -process.OutputModule = cms.OutputModule("PoolOutputModule", - EventContent, - EventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('muonsNtpPath'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('MuReco.root') - - ) - - -process.ntuplesOut = cms.OutputModule( - "PoolOutputModule", - fileName = cms.untracked.string('MuonsNtuple.root'), - outputCommands = cms.untracked.vstring( - "drop *", - "keep *_goodMuonsEdmNtuple_*_*" - - ) - ) - - - -process.muonsNtpPath = cms.Path( - process.goodMuonRecoForDimuon * - process.userDataMuons * - process.goodMuonsEdmNtuple - ) - - - - -process.outpath = cms.EndPath(process.OutputModule) - -process.ntpoutpath = cms.EndPath(process.ntuplesOut) - - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/MuTriggerAnalysis.py b/ElectroWeakAnalysis/ZMuMu/test/MuTriggerAnalysis.py deleted file mode 100644 index a97ac43c18918..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/MuTriggerAnalysis.py +++ /dev/null @@ -1,160 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("TriggerAnalysis2") - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - -#"file:~/www/2010/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133483_331.root" -# "file:MuTriggerReco_1_1.root" - -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133874_1.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133874_10.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133874_11.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133874_12.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133874_13.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133874_2.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133874_3.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133874_4.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133874_5.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133874_6.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133874_7.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133874_8.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133874_9.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133875_1.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133875_2.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133875_3.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133875_4.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133876_1.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133876_2.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133876_3.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133876_4.root", -#"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133877_1.root", -#"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133877_10.root", -#"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133877_2.root", -#"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133877_3.root", -#"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133877_4.root", -#"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133877_5.root", -#"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133877_6.root", -#"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133877_7.root", -#"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133877_8.root", -#"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133877_9.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133881_1.root", -"file:/data4/Skimming/SkimResults/133/EWKMuSkim_L1TG04041_AllMuAtLeastThreeTracks133885_1.root", - - ) -) - -#import os -#dirname = "/data4/Skimming/SkimResults/133" -#dirlist = os.listdir(dirname) -#basenamelist = os.listdir(dirname + "/") -#for basename in basenamelist: -# process.source.file:Names.append("file::" + dirname + "/" + basename) -# print "Number of file:s to process is %s" % (len(process.source.file:Names)) - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) -process.MessageLogger.cerr.threshold = '' -process.MessageLogger.cerr.FwkReport.reportEvery = 10000 - - -process.source.inputCommands = cms.untracked.vstring("keep *", "drop *_MEtoEDMConverter_*_*", "drop L1GlobalTriggerObjectMapRecord_hltL1GtObjectMap__HLT") - -#process.maxEvents = cms.untracked.PSet( -# input = cms.untracked.int32(-1) -#) - -process.TFileService = cms.Service("TFileService", - fileName = cms.string('MuTriggerNew.root') -) - -# Muon filter, you can choose to add/remove/loose/tighten cuts (isolation cuts for example) - -### muon with all quality cuts except iso -process.goodMuonsNotIso = cms.EDFilter("MuonSelector", - src = cms.InputTag("muons"), - cut = cms.string('( isGlobalMuon=1 && isTrackerMuon ) && isolationR03().sumPt<1000.0 && abs(innerTrack().dxy)<0.5 && (globalTrack().hitPattern().numberOfValidMuonHits()>0) && (globalTrack.hitPattern().numberOfValidStripHits()>=10) && (globalTrack().normalizedChi2()<10) '), - filter = cms.bool(True) - ) - -### all quality cuts -process.goodMuons = cms.EDFilter("MuonSelector", - src = cms.InputTag("muons"), - cut = cms.string('( isGlobalMuon=1 && isTrackerMuon ) && isolationR03().sumPt<3.0 && abs(innerTrack().dxy)<0.5 && (globalTrack().hitPattern().numberOfValidMuonHits()>0) && (globalTrack.hitPattern().numberOfValidStripHits()>=10) && (globalTrack().normalizedChi2()<10) '), - filter = cms.bool(True) - ) - -#### no quality cuts -process.goodMuonsNoCuts = cms.EDFilter("MuonSelector", - src = cms.InputTag("muons"), - cut = cms.string('( isGlobalMuon=1 && isTrackerMuon ) '), - filter = cms.bool(True) - ) - - - -process.MuTriggerAnalyzerAllCuts = cms.EDAnalyzer( - "MuTriggerAnalyzer", - muons= cms.untracked.InputTag("goodMuons"), - TrigTag = cms.InputTag("TriggerResults::HLT"), - triggerEvent = cms.InputTag( "hltTriggerSummaryAOD::HLT" ), - hltPath = cms.string("HLT_Mu9"), -##HLT_Mu9 - L3FilterName= cms.string("hltSingleMu9L3Filtered9"), - ### ("hltL2Mu9L2Filtered9"), -##hltSingleMu9L3Filtered9 - maxDPtRel = cms.double( 1.0 ), - maxDeltaR = cms.double( 0.5 ), - ptMuCut = cms.untracked.double( 5.0 ), - etaMuCut = cms.untracked.double( 2.1 ), - ptMax_=cms.double( 40.0 ) -) - -import copy -process.MuTriggerAnalyzerAllCutsButIso= copy.deepcopy(process.MuTriggerAnalyzerAllCuts) -process.MuTriggerAnalyzerAllCutsButIso.muons= cms.untracked.InputTag("goodMuonsNotIso") - -process.MuTriggerAnalyzerNoCuts= copy.deepcopy(process.MuTriggerAnalyzerAllCuts) -process.MuTriggerAnalyzerNoCuts.muons= cms.untracked.InputTag("goodMuonsNoCuts") - - - - - - -process.pAllCuts = cms.Path(process.goodMuons* process.MuTriggerAnalyzerAllCuts) -process.pAllCutsButIso = cms.Path(process.goodMuonsNotIso* process.MuTriggerAnalyzerAllCutsButIso) -process.pNoCuts = cms.Path(process.goodMuonsNoCuts* process.MuTriggerAnalyzerNoCuts) - - -# Output module configuration -from Configuration.EventContent.EventContent_cff import * -EventContent = cms.PSet( - outputCommands = cms.untracked.vstring() - ) - -EventContent.outputCommands.extend(FEVTEventContent.outputCommands) - - -EventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - 'pAllCuts','pAllCutsButIso','pNoCuts') - ) - ) - - -process.OutputModule = cms.OutputModule("PoolOutputModule", - EventContent, - EventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('pAllCuts'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('MuTriggerReco.root') - - ) - - -#process.outpath = cms.EndPath(process.OutputModule) diff --git a/ElectroWeakAnalysis/ZMuMu/test/PdfSystematicsAnalyzer.py b/ElectroWeakAnalysis/ZMuMu/test/PdfSystematicsAnalyzer.py deleted file mode 100644 index 23b28a8d8d626..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/PdfSystematicsAnalyzer.py +++ /dev/null @@ -1,128 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -## produced the weigths according to the given pdf sets... After one needs to run the zPdfUnc.py and EvalPdfUnc.py - -#### intented to run with that prescription: -### cmsrel CMSSW_3_3_X -### cd CMSSW_3_3_X/src -### addpkg ElectroWeakAnalysis/Utilities V00-01-07 -### addpkg MuonAnalysis/MomentumScaleCalibration V00-03-03 -### scram setup lhapdffull -### scram b ToolUpdated -### emacs -nw ElectroWeakAnalysis/Utilities/BuildFile .... to change the build file ( Comment the and Uncomment the ) -### scram b -### cd ElectroWeakAnalysis/Utilities/test/ -### cmsenv -#### cmsRun PdfSystematicsAnalyzer.py - - -# Process name -process = cms.Process("PDFANA") - - - - -# Max events and printouts -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) -process.load("FWCore.MessageLogger.MessageLogger_cfi") - -process.MessageLogger.cerr.threshold = '' -process.MessageLogger.cerr.FwkReport.reportEvery = 1000 - -#process.options = cms.untracked.PSet( -# wantSummary = cms.untracked.bool(True) -#) - - -# Input files (on disk) -process.source = cms.Source("PoolSource", - debugVerbosity = cms.untracked.uint32(0), - debugFlag = cms.untracked.bool(False), - fileNames = cms.untracked.vstring( - - #"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/0ABB0814-C082-DE11-9AB7-003048D4767C.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/38980FEC-C182-DE11-A3B5-003048D4767C.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/3AF703B9-AE82-DE11-9656-0015172C0925.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/46854F8E-BC82-DE11-80AA-003048D47673.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/8025F9B0-AC82-DE11-8C28-0015172560C6.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/88DDF58E-BC82-DE11-ADD8-003048D47679.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/9A115324-BB82-DE11-9C66-001517252130.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/FC279CAC-AD82-DE11-BAAA-001517357D36.root") -) -# Produce PDF weights (maximum is 3) -process.pdfWeights = cms.EDProducer("PdfWeightProducer", - PdfInfoTag = cms.untracked.InputTag("VtxSmeared"), - PdfSetNames = cms.untracked.vstring( - "cteq65.LHgrid", # 21 members - "MRST2006nnlo.LHgrid" # 31 members - , "MRST2007lomod.LHgrid" # 1 member - ) -) - -## other three pdf sets -# Produce PDF weights (maximum is 3) -#process.pdfWeights = cms.EDProducer("PdfWeightProducer", -# PdfInfoTag = cms.untracked.InputTag("VtxSmeared"), -# PdfSetNames = cms.untracked.vstring( -# "cteq61.LHgrid", # 21 members -# "MRST2004nlo.LHgrid" # 1 members -# , "MRST2004nnlo.LHgrid" # 1 member -# ) -#) - - - - -# Save PDF weights in the output file -process.load("Configuration.EventContent.EventContent_cff") -process.MyEventContent = cms.PSet( - outputCommands = process.AODSIMEventContent.outputCommands -) -process.MyEventContent.outputCommands.extend( - cms.untracked.vstring('drop *', - 'keep *_genParticles_*_*', - 'keep *_pdfWeights_*_*', - # 'keep *_MRST2007lomodewkPdfWeights_*_*', 'keep -# *_cteq6mLHewkPdfWeights_*_*', - # 'keep *_MRST2007lomodewkPdfWeights_*_*', 'kee -#p *_MRST2004nloewkPdfWeights_*_*', - # 'keep *_genEventWeight_*_*' - ) -) - -# Output (optionaly filtered by path) -process.pdfOutput = cms.OutputModule("PoolOutputModule", - process.MyEventContent, - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('pdfana') - ), - fileName = cms.untracked.string('genParticlePlusCteq65AndMRST06NNLOAndMSTW2007LOmodWeigths.root') -) - - - - - - - -# Selector and parameters -# WMN fast selector (use W candidates in this example) -#process.load("ElectroWeakAnalysis.WMuNu.WMuNuSelection_cff") - -# Collect uncertainties for rate and acceptance -process.pdfSystematics = cms.EDFilter("PdfSystematicsAnalyzer", - SelectorPath = cms.untracked.string('pdfana'), - PdfWeightTags = cms.untracked.VInputTag( - "pdfWeights:cteq65" - , "pdfWeights:MRST2006nnlo" - , "pdfWeights:MRST2007lomod" - ) -) - -# Main path -process.pdfana = cms.Path( - process.pdfWeights - -) - -process.end = cms.EndPath(process.pdfSystematics * process.pdfOutput) diff --git a/ElectroWeakAnalysis/ZMuMu/test/ZMuMuAnalysis_Ntuples_cfg.py b/ElectroWeakAnalysis/ZMuMu/test/ZMuMuAnalysis_Ntuples_cfg.py deleted file mode 100755 index d7bde3c986b5e..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/ZMuMuAnalysis_Ntuples_cfg.py +++ /dev/null @@ -1,63 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("ZMuMuNtupla") - - - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -process.MessageLogger.cerr.threshold = '' -process.MessageLogger.cerr.FwkReport.reportEvery = 100 - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -#process.GlobalTag.globaltag = cms.string('MC_31X_V3::All') -process.GlobalTag.globaltag = cms.string('START3X_V18::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(100) -) - - - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - - "file:testZMuMuSubskimUserData.root" - - ) - ) - - - -# replace ZSelection if wanted...... -## from ElectroWeakAnalysis.ZMuMu.zSelection_cfi import * -## zSelection.cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2.1 & abs(daughter(1).eta)<2.1 & mass > 0") - - - -process.load("ElectroWeakAnalysis.ZMuMu.ZMuMuCategoriesSequencesUserData_cff") - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("ewkZMuMuCategoriesTest.root") -) - - -### vertexing -#process.load("ElectroWeakAnalysis.ZMuMu.ZMuMuCategoriesVtxed_cff") - -### plots - -process.load("ElectroWeakAnalysis.ZMuMu.ZMuMuCategoriesPlots_cff") - -### ntuple - -process.load("ElectroWeakAnalysis.ZMuMu.ZMuMuAnalysisNtupler_cff") - - - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/ZMuMuCategories_cfg.py b/ElectroWeakAnalysis/ZMuMu/test/ZMuMuCategories_cfg.py deleted file mode 100755 index 677133cfadace..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/ZMuMuCategories_cfg.py +++ /dev/null @@ -1,57 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("EwkZMuMuCategories") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -process.MessageLogger.cerr.threshold = '' -process.MessageLogger.cerr.FwkReport.reportEvery = 100 - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -#process.GlobalTag.globaltag = cms.string('MC_31X_V3::All') -#process.GlobalTag.globaltag = cms.string('START3X_V26::All') -process.GlobalTag.globaltag = cms.string('START38_V12::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - - - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - "file:/tmp/fabozzi/testZMuMuSubskim.root" - ) -) - -# replace ZSelection if wanted...... -## from ElectroWeakAnalysis.ZMuMu.zSelection_cfi import * -## zSelection.cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2.1 & abs(daughter(1).eta)<2.1 & mass > 0") - -process.load("ElectroWeakAnalysis.ZMuMu.ZMuMuCategoriesSequences_cff") - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("ewkZMuMuCategories.root") -) - - -### vertexing -process.load("ElectroWeakAnalysis.ZMuMu.ZMuMuCategoriesVtxed_cff") - -### plots - -process.load("ElectroWeakAnalysis.ZMuMu.ZMuMuCategoriesPlots_cff") - -### ntuple - -### Added UserData - -#process.load("ElectroWeakAnalysis.ZMuMu.ZMuMuCategoriesNtuples_cff") -process.load("ElectroWeakAnalysis.ZMuMu.ZMuMuAnalysisNtupler_cff") -process.ntuplesOut.fileName = cms.untracked.string('file:/tmp/fabozzi/NtupleLooseTestNew.root') - diff --git a/ElectroWeakAnalysis/ZMuMu/test/ZMuMuGolden_cfg.py b/ElectroWeakAnalysis/ZMuMu/test/ZMuMuGolden_cfg.py deleted file mode 100755 index 924bce534d48e..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/ZMuMuGolden_cfg.py +++ /dev/null @@ -1,94 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("EwkZMuMuGolden") - -process.load("ElectroWeakAnalysis.ZMuMu.ZMuMuGolden_cfi") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -process.MessageLogger.cerr.threshold = '' -process.MessageLogger.cerr.FwkReport.reportEvery = 1 - -#process.load("Configuration.StandardSequences.Geometry_cff") -#process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -#process.GlobalTag.globaltag = cms.string('') -#process.load("Configuration.StandardSequences.MagneticField_cff") - - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - - - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( -'file:/scratch2/users/fabozzi/spring10/powheg_zmm_cteq66/1CD6D0A6-1E64-DF11-BB60-001D09FD0D10.root', - # 'rfio:/castor/cern.ch/cms/store/relval/CMSSW_3_4_0_pre1/RelValZMM/GEN-SIM-RECO/STARTUP31X_V8-v1/0007/CAE2081C-48B5-DE11-9161-001D09F29321.root', - ) -) - - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("ewkZMuMuGolden.root") -) - -zPlots = cms.PSet( - histograms = cms.VPSet( - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zMass"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu1Pt"), - description = cms.untracked.string("Highest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("max(daughter(0).pt,daughter(1).pt)") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu2Pt"), - description = cms.untracked.string("Lowest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("min(daughter(0).pt,daughter(1).pt)") - ) - ) -) - - - - -process.goodZToMuMuPlots = cms.EDFilter( - "CandViewHistoAnalyzer", - zPlots, -# src = cms.InputTag("goodZToMuMuAtLeast1HLT"), - src = cms.InputTag("zmmCands"), - filter = cms.bool(False) -) - - - - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -process.ewkZMuMuGoldenPath = cms.Path( - process.ewkZMuMuGoldenSequence * - process.goodZToMuMuPlots -) - - - -process.endPath = cms.EndPath( - process.eventInfo -) diff --git a/ElectroWeakAnalysis/ZMuMu/test/ZMuMu_MCanalysis.py b/ElectroWeakAnalysis/ZMuMu/test/ZMuMu_MCanalysis.py deleted file mode 100644 index a10bf2925a5c1..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/ZMuMu_MCanalysis.py +++ /dev/null @@ -1,157 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("ZMuMuMCanalysis") -#process.load("ElectroWeakAnalysis.Skimming.mcTruthForDimuons_cff") -#process.load("ElectroWeakAnalysis/Skimming/zMuMu_SubskimPathsWithMCTruth_cff") -#adapting what we have in zMuMu_SubskimPathsWithMCTruth_cff, we don't need to add user data.... - - -process.load("ElectroWeakAnalysis.Skimming.patCandidatesForZMuMuSubskim_cff") -#### quality cut to apply or not -process.patAODTrackCands.cut = 'pt > 20.' -process.selectedPatTracks.cut = 'pt > 20. & abs(eta)<2.1 & ( track().hitPattern().numberOfValidStripHits + track().hitPattern().numberOfValidPixelHits)>= 10 & track().normalizedChi2()<10.' - -process.selectedPatMuons.cut = 'pt > 20. & abs(eta)<2.1 & ( (isGlobalMuon & (globalTrack().hitPattern().numberOfValidStripHits + globalTrack().hitPattern().numberOfValidPixelHits)>= 10 & globalTrack().normalizedChi2()<10. & outerTrack().hitPattern().numberOfValidMuonHits>0 ) || (isStandAloneMuon & outerTrack().normalizedChi2()<10. & outerTrack().hitPattern().numberOfValidMuonHits>0 ))' - - -### temporarly form 31X-->35X reprocessed spring10 data -process.patTrigger.processName = "REDIGI" -process.patTriggerEvent.processName = "REDIGI" -process.patTrigger.triggerResults = cms.InputTag( "TriggerResults::REDIGI" ) -process.patTrigger.triggerEvent = cms.InputTag( "hltTriggerSummaryAOD::REDIGI" ) - - - -process.load("ElectroWeakAnalysis.Skimming.dimuons_cfi") -process.load("ElectroWeakAnalysis.Skimming.dimuonsOneTrack_cfi") -process.load("ElectroWeakAnalysis.Skimming.dimuonsGlobal_cfi") -process.load("ElectroWeakAnalysis.Skimming.dimuonsOneStandAloneMuon_cfi") - -# MC matching sequence -process.load("ElectroWeakAnalysis.Skimming.mcTruthForDimuons_cff") -process.goodMuonMCMatch.src = 'selectedPatMuonsTriggerMatch' -process.goodTrackMCMatch.src = 'selectedPatTracks' - - - - - - -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) -process.MessageLogger.cerr.threshold = '' -process.MessageLogger.cerr.FwkReport.reportEvery = 1000 - - - - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -#process.GlobalTag.globaltag = cms.string('START37_V1A::All') -process.GlobalTag.globaltag = cms.string('MC_3XY_V26::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( -#'file:/tmp/degrutto/testDimuonSkim_all.root' -#'rfio:/castor/cern.ch/user/f/fabozzi/testsubskimMC/testZMuMuSubskim.root' -'rfio:/castor/cern.ch/user/f/fabozzi/mc7tev/spring10/38262142-DF46-DF11-8238-0030487C6A90.root' - -#'rfio:/castor/cern.ch/user/f/fabozzi/mc7tev/F8EE38AF-1EBE-DE11-8D19-00304891F14E.root' - - ) -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) -process.TFileService = cms.Service("TFileService", - fileName = cms.string('zMuMu_MCanalysis.root') -) - -process.zToMuMu = cms.EDFilter("CandViewRefSelector", - src = cms.InputTag("dimuons"), - cut = cms.string('daughter(0).isGlobalMuon = 1 & daughter(1).isGlobalMuon = 1 & charge=0'), -) - -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("dimuonsOneStandAloneMuon"), - overlap = cms.InputTag("zToMuMu"), -) - -process.zToMuMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - src = cms.InputTag("dimuonsOneTrack"), - cut = cms.string('daughter(0).isGlobalMuon = 1 & charge=0'), -) - -process.goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrack"), - overlap = cms.InputTag("zToMuMu"), -) - - -process.zMuMu_MCanalyzer = cms.EDFilter("ZMuMu_MCanalyzer", - muons = cms.InputTag("selectedPatMuons"), - tracks = cms.InputTag("selectedPatTracks"), - zMuMu = cms.InputTag("zToMuMu"), - zMuStandAlone = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - zMuTrack = cms.InputTag("goodZToMuMuOneTrack"), - zMuMuMatchMap = cms.InputTag("allDimuonsMCMatch"), - zMuStandAloneMatchMap = cms.InputTag("allDimuonsMCMatch"), - zMuTrackMatchMap = cms.InputTag("dimuonsOneTrackMCMatch"), - genParticles = cms.InputTag("genParticles"), - bothMuons = cms.bool(True), - zMassMin = cms.untracked.double(60.0), - zMassMax = cms.untracked.double(120.0), - etamin = cms.untracked.double(0.0), - etamax = cms.untracked.double(2.1), - ptmin = cms.untracked.double(20.0), - hltPath = cms.untracked.string("HLT_Mu9"), - ###isolation block - isomax = cms.untracked.double(3.0), - ptThreshold = cms.untracked.double(1.5), - etEcalThreshold = cms.untracked.double(0.2), - etHcalThreshold = cms.untracked.double(0.5), - deltaRVetoTrk = cms.untracked.double(0.015), - deltaRTrk = cms.untracked.double(0.3), - deltaREcal = cms.untracked.double(0.25), - deltaRHcal = cms.untracked.double(0.25), - alpha = cms.untracked.double(0.), - beta = cms.untracked.double(-0.75), - relativeIsolation=cms.untracked.bool(False) -) - - -process.eventInfo = cms.OutputModule("AsciiOutputModule") - - -process.dimuonsPath = cms.Path( - process.goodMuonRecoForDimuon * - process.dimuons * - process.mcTruthForDimuons * - process.dimuonsGlobal * - process.dimuonsOneStandAloneMuon - ) - -process.dimuonsOneTrackPath = cms.Path( - process.goodMuonRecoForDimuon* - process.dimuonsOneTrack* - process.mcTruthForDimuonsOneTrack - ) - - - - -process.p = cms.Path(#process.mcTruthForDimuons * - process.zToMuMu * - process.goodZToMuMuOneStandAloneMuon * - process.zToMuMuOneTrack * - process.goodZToMuMuOneTrack * - process.zMuMu_MCanalyzer) -process.e = cms.EndPath(process.eventInfo) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/ZMuMu_efficiencyAnalyzer.py b/ElectroWeakAnalysis/ZMuMu/test/ZMuMu_efficiencyAnalyzer.py deleted file mode 100644 index 83a5c513a75cb..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/ZMuMu_efficiencyAnalyzer.py +++ /dev/null @@ -1,69 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("ZMuMuEfficiencyAnalyzer") -process.load("ElectroWeakAnalysis.ZReco.mcTruthForDimuons_cff") - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring('file:/scratch1/cms/data/summer08/skim/dimuons_skim_zmumu.root') -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) -process.TFileService = cms.Service("TFileService", - fileName = cms.string('zMuMu_efficiencyAnalyzer.root') -) - -process.zToMuMu = cms.EDFilter("CandViewRefSelector", - src = cms.InputTag("dimuons"), - cut = cms.string('daughter(0).isGlobalMuon = 1 & daughter(1).isGlobalMuon = 1'), -) - -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("dimuonsOneStandAloneMuon"), - overlap = cms.InputTag("zToMuMu"), -) - -process.zToMuMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - src = cms.InputTag("dimuonsOneTrack"), - cut = cms.string('daughter(0).isGlobalMuon = 1'), -) - -process.goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrack"), - overlap = cms.InputTag("zToMuMu"), -) - - -process.zMuMu_efficiencyAnalyzer = cms.EDFilter("ZMuMu_efficiencyAnalyzer", - muons = cms.InputTag("selectedLayer1Muons"), - tracks = cms.InputTag("selectedLayer1TrackCands"), - zMuMu = cms.InputTag("zToMuMu"), - zMuStandAlone = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - zMuTrack = cms.InputTag("goodZToMuMuOneTrack"), - zMuMuMatchMap = cms.InputTag("allDimuonsMCMatch"), - zMuStandAloneMatchMap = cms.InputTag("allDimuonsMCMatch"), - zMuTrackMatchMap = cms.InputTag("allDimuonsMCMatch"), - genParticles = cms.InputTag("genParticles"), - primaryVertices =cms.InputTag("offlinePrimaryVertices"), - bothMuons = cms.bool(True), - zMassMin = cms.untracked.double(20.0), - zMassMax = cms.untracked.double(200.0), - isomax = cms.untracked.double(3.0), - etamax = cms.untracked.double(2.0), - ptmin = cms.untracked.double(20.0), -) - -process.eventInfo = cms.OutputModule("AsciiOutputModule") - -process.p = cms.Path(process.mcTruthForDimuons * - process.zToMuMu * - process.goodZToMuMuOneStandAloneMuon * - process.zToMuMuOneTrack * - process.goodZToMuMuOneTrack * - process.zMuMu_efficiencyAnalyzer) -process.e = cms.EndPath(process.eventInfo) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/ZMuMu_radiative_analysis.py b/ElectroWeakAnalysis/ZMuMu/test/ZMuMu_radiative_analysis.py deleted file mode 100644 index 36fbde894f8fc..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/ZMuMu_radiative_analysis.py +++ /dev/null @@ -1,117 +0,0 @@ -########################### -# # -# author: Pasquale Noli # -# INFN Naples # -# Script to run radiative # -# analysis # -# # -########################### - - - -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("Diegol") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) - ) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_1.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_2.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_3.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_4.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_6.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_7.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_8.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_9.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_10.root" - - ) -) - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("analysis_radiative_table.root") -) - - - - -#ZMuSta -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("dimuonsOneStandAloneMuon"), - overlap = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(False) -) - - -#ZMuTk -process.zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - src = cms.InputTag("dimuonsOneTrack"), - filter = cms.bool(False) -) - -process.goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuGlobalMuOneTrack"), - overlap = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(False) -) - - -process.goodZToMuMuOneTrackFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrack"), - condition =cms.string("firstMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(False) -) - - -process.Analyzer = cms.EDAnalyzer( - "ZMuMu_Radiative_analyzer", - zMuMu = cms.InputTag("dimuonsGlobal"), - zMuMuMatchMap= cms.InputTag("allDimuonsMCMatch"), - zMuTk = cms.InputTag("goodZToMuMuOneTrackFirstHLT"), - zMuTkMatchMap= cms.InputTag("allDimuonsMCMatch"), - zMuSa = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - zMuSaMatchMap= cms.InputTag("allDimuonsMCMatch"), - veto = cms.untracked.double(0.015), - deltaRTrk = cms.untracked.double(0.3), - ptThreshold = cms.untracked.double(1.5) - ) - - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -process.path = cms.Path ( - process.goodZToMuMuOneStandAloneMuon+ - process.zToMuGlobalMuOneTrack + - process.goodZToMuMuOneTrack + - process.goodZToMuMuOneTrackFirstHLT + - process.Analyzer -) - - - -#process.endPath = cms.EndPath( -# process.eventInfo -#) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/crabZmmAnalysis.cfg b/ElectroWeakAnalysis/ZMuMu/test/crabZmmAnalysis.cfg deleted file mode 100644 index 0d14b7d206328..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/crabZmmAnalysis.cfg +++ /dev/null @@ -1,42 +0,0 @@ -[CRAB] - -jobtype = cmssw -scheduler = glite -server_name = pisa - -[CMSSW] - -datasetpath = /Zmumu/Spring10-START3X_V26_S09-v1/GEN-SIM-RECO - - - -pset=EWK_ZMuMuAnalysis.py -total_number_of_events=-1 -events_per_job = 1000 -get_edm_output = 1 - -[USER] -return_data = 0 -ui_working_dir= 35XSkimNewZmmv2 - -copy_data = 1 -storage_element = srm-cms.cern.ch -#storage_element =T2_IT_Legnaro - -storage_path=/srm/managerv2?SFN=/castor/cern.ch -user_remote_dir = /user/d/degrutto/35XSkimNew/zmm -#storage_path=/srm:/managerv2?SFN=/pnfs/lnl.infn.it/data/cms/store/ -#user_remote_dir = /user/d/degrutto/test/MinBiasEWKMuSkim_15Apr/ - - - -publish_data = 0 -#publish_with_import_all_parents=0 -publish_data_name = MinBiasEWKMuSkim_15Apr -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet - -[GRID] - -## RB/WMS management: -rb = CERN -#ce_white_list = t2-ce-01.lnl.infn.it,t2-ce-02.lnl.infn.it,t2-ce-03.lnl.infn.it diff --git a/ElectroWeakAnalysis/ZMuMu/test/crab_toymc.cfg b/ElectroWeakAnalysis/ZMuMu/test/crab_toymc.cfg deleted file mode 100644 index de84cd586dfb9..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/crab_toymc.cfg +++ /dev/null @@ -1,47 +0,0 @@ -[CRAB] - -jobtype = cmssw -scheduler = glite -#scheduler = lsf -server_name = legnaro - -[CMSSW] - -### The output files (comma separated list) -output_file = fitResult.txt, outputToy.tgz -datasetpath=None -pset=dummy.py -total_number_of_events=10000 -number_of_jobs=100 - -[USER] -debug_wrapper=1 -script_exe = testToyMC_crab.sh - -### OUTPUT files Management -## output back into UI -return_data = 1 - -#copy_data = 1 - -additional_input_files = toyMonteCarlo, zFitToyMc.txt, zFitToyMc, analysis_Z_133pb_trackIso_3.root - - -[EDG] -# -## RB/WMS management: -rb = CERN - -## Black and White Lists management: -## By Storage -#se_black_list = T0,T1 -#se_white_list = - -## By ComputingElement -#ce_black_list = -#ce_white_list = polgrid1.in2p3.fr,egeece01.ifca.es,t2-ce-01.lnl.infn.it,t2-ce-03.lnl.infn.it,t2-ce-03.lnl.infn.it -#ce_white_list = polgrid1.in2p3.fr - -[CONDORG] - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/dimuonStatistics.py b/ElectroWeakAnalysis/ZMuMu/test/dimuonStatistics.py deleted file mode 100644 index 4c08153d56b82..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/dimuonStatistics.py +++ /dev/null @@ -1,360 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("dimuonStatistics") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_1.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_10.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_11.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_12.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_13.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_14.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_15.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_16.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_17.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_18.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_19.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_2.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_20.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_21.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_22.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_23.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_24.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_25.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_26.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_27.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_28.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_29.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_3.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_30.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_31.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_32.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_33.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_34.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_35.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_36.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_37.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_38.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_39.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_4.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_40.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_41.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_42.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_43.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_44.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_45.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_46.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_47.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_48.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_49.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_5.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_50.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_51.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_52.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_53.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_54.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_55.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_56.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_57.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_58.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_59.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_6.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_60.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_61.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_62.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_63.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_64.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_65.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_66.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_67.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_68.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_69.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_7.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_70.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_71.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_72.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_73.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_74.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_75.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_76.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_77.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_78.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_79.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_8.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_80.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_81.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_82.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_83.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_84.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_85.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_86.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_87.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_88.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_89.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_9.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_90.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_91.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_92.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_93.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_94.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_95.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_96.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_97.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_98.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_99.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_100.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_101.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_102.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_103.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_104.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_105.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_106.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_107.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_108.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_109.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_110.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_111.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_112.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_113.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX/zmm_v2/testZMuMuSubSkim_114.root", - ) -) -zSelection = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2.0 & abs(daughter(1).eta)<2.0 & mass > 20"), - isoCut = cms.double(3.), - ptThreshold = cms.untracked.double(1.5), - etEcalThreshold = cms.untracked.double(0.2), - etHcalThreshold = cms.untracked.double(0.5), - deltaRVetoTrk = cms.untracked.double(0.015), - deltaRTrk = cms.untracked.double(0.3), - deltaREcal = cms.untracked.double(0.25), - deltaRHcal = cms.untracked.double(0.25), - alpha = cms.untracked.double(0.), - beta = cms.untracked.double(-0.75), - relativeIsolation = cms.bool(False) - -# For standard isolation (I_Tkr<3GeV) choose this configuration: -# isoCut = cms.double(3.), -# ptThreshold = cms.untracked.double(1.5), -# etEcalThreshold = cms.untracked.double(0.2), -# etHcalThreshold = cms.untracked.double(0.5), -# deltaRVetoTrk = cms.untracked.double(0.015), -# deltaRTrk = cms.untracked.double(0.3), -# deltaREcal = cms.untracked.double(0.25), -# deltaRHcal = cms.untracked.double(0.25), -# alpha = cms.untracked.double(0.), -# beta = cms.untracked.double(-0.75), -# relativeIsolation = cms.bool(False) - - - ) - -process.goodZToMuMu = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) -#ZMuMu: richiedo almeno 1 HLT trigger match.Per la shape -process.goodZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMu: richiedo 2 HLT trigger match -process.goodZToMuMu2HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("bothMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMu: richiedo 1 HLT trigger match -process.goodZToMuMu1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("exactlyOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - -process.nonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -#ZMuMu1notIso: richiedo almeno un trigger -process.nonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("nonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -process.zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - src = cms.InputTag("dimuonsOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneTrack = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneStandAloneMuon = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsOneStandAloneMuon"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrack"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -#ZMuTk:richiedo che il muGlobal 'First' ha HLT match -process.goodZToMuMuOneTrackFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrack"), - condition =cms.string("firstMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneStandAloneMuon"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -#ZMuSta:richiedo che il muGlobal ha HLT match -process.goodZToMuMuOneStandAloneMuonFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - condition =cms.string("globalisMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - -goodZToMuMuTemplate = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("replace this string with your cut"), - src = cms.InputTag("goodZToMuMuAtLeast1HLT"), - filter = cms.bool(False) -) - - - - -process.DimuGlobalNotIsoStat = cms.EDAnalyzer( - "DimuonStatistics", - src = cms.InputTag("dimuonsGlobal"), # dimuonsOneTrack, dimuonsOneStandAlone - ptMin = cms.untracked.double(20.0), - massMin = cms.untracked.double(60.0), - massMax = cms.untracked.double(120.0), - etaMin = cms.untracked.double(-1.0), - etaMax = cms.untracked.double(2.0), - trkIso = cms.untracked.double(10000) - ) - -process.DimuGlobalIsoStat = cms.EDAnalyzer( - "DimuonStatistics", - src = cms.InputTag("dimuonsGlobal"), - ptMin = cms.untracked.double(20.0), - massMin = cms.untracked.double(60.0), - massMax = cms.untracked.double(120.0), - etaMin = cms.untracked.double(-1.0), - etaMax = cms.untracked.double(2.0), - trkIso = cms.untracked.double(3.0) - ) - -process.DimuOneTrackIsoStat=cms.EDAnalyzer( - "DimuonStatistics", - src = cms.InputTag("dimuonsOneTrack"), - ptMin = cms.untracked.double(20.0), - massMin = cms.untracked.double(60.0), - massMax = cms.untracked.double(120.0), - etaMin = cms.untracked.double(-1.0), - etaMax = cms.untracked.double(2.0), - trkIso = cms.untracked.double(3.0) - ) -process.DimuOneStaIsoStat=cms.EDAnalyzer( - "DimuonStatistics", - src = cms.InputTag("dimuonsOneStandAloneMuon"), - ptMin = cms.untracked.double(20.0), - massMin = cms.untracked.double(60.0), - massMax = cms.untracked.double(120.0), - etaMin = cms.untracked.double(-1.0), - etaMax = cms.untracked.double(2.0), - trkIso = cms.untracked.double(3.0) - ) - - - - -process.OneHLTIsolatedPath = cms.Path( - process.goodZToMuMu + - process.goodZToMuMu1HLT + - process.DimuGlobalIsoStat - ) - -process.TwoHLTIsolatedPath = cms.Path( - process.goodZToMuMu + - process.goodZToMuMu2HLT + - process.DimuGlobalIsoStat - ) - -process.NonIsolatedPath = cms.Path( - process.nonIsolatedZToMuMu * - process.nonIsolatedZToMuMuAtLeast1HLT* - process.DimuGlobalNotIsoStat - ) - - -process.MuStaIsolatedPath=cms.Path( - ~process.goodZToMuMu + - process.zToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuonFirstHLT + - process.DimuOneStaIsoStat - ) - -process.MuTkIsolatedPath = cms.Path( - ~process.goodZToMuMu + - ~process.zToMuMuOneStandAloneMuon + - process.zToMuGlobalMuOneTrack + - process.zToMuMuOneTrack + - process.goodZToMuMuOneTrack + - process.goodZToMuMuOneTrackFirstHLT + - process.DimuOneTrackIsoStat - - ) - - - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/distortedMuonsFromDB.py b/ElectroWeakAnalysis/ZMuMu/test/distortedMuonsFromDB.py deleted file mode 100644 index 122d3fda2bebf..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/distortedMuonsFromDB.py +++ /dev/null @@ -1,138 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Process, how many events, inout files, ... -process = cms.Process("distortMuonsFromDB") - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(100) - #input = cms.untracked.int32(100) -) -process.source = cms.Source("PoolSource", - debugVerbosity = cms.untracked.uint32(0), - debugFlag = cms.untracked.bool(False), - #fileNames = cms.untracked.vstring("file:/data4/Wmunu_Summer09-MC_31X_V3-v1_GEN-SIM-RECO/0009/76E35258-507F-DE11-9A21-0022192311C5.root") - fileNames = cms.untracked.vstring( - -"file:../../ZMuMu/test/dimuons_100.root" - #rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/0ABB0814-C082-DE11-9AB7-003048D4767C.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/38980FEC-C182-DE11-A3B5-003048D4767C.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/3AF703B9-AE82-DE11-9656-0015172C0925.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/46854F8E-BC82-DE11-80AA-003048D47673.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/8025F9B0-AC82-DE11-8C28-0015172560C6.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/88DDF58E-BC82-DE11-ADD8-003048D47679.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/9A115324-BB82-DE11-9C66-001517252130.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/Zmumu7TeV/GEN-SIM_RECO/0014/FC279CAC-AD82-DE11-BAAA-001517357D36.root" -) -) - -# Debug/info printouts -process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring('distortedMuons'), - cout = cms.untracked.PSet( - default = cms.untracked.PSet( limit = cms.untracked.int32(1000) ), - #threshold = cms.untracked.string('INFO') - threshold = cms.untracked.string('DEBUG') - ), - destinations = cms.untracked.vstring('cout') -) - -# Database for scale shift if process.distortedMuons.UseDBForMomentumScale = True -process.load("CondCore.DBCommon.CondDBCommon_cfi") -process.poolDBESSource1 = cms.ESSource("PoolDBESSource", - BlobStreamerName = cms.untracked.string('TBufferBlobStreamingService'), - DBParameters = cms.PSet( - messageLevel = cms.untracked.int32(2), - authenticationPath = cms.untracked.string('/afs/cern.ch/cms/DB/conddb') - ), - timetype = cms.untracked.string('runnumber'), - connect = cms.string('oracle://cms_orcoff_prep/CMS_COND_PHYSICSTOOLS'), - toGet = cms.VPSet( - cms.PSet( - record = cms.string('MuScleFitDBobjectRcd'), - tag = cms.string('MuScleFit_Scale_OctoberExercise_EWK_InnerTrack'), - label = cms.untracked.string('') - ) - ) -) -process.poolDBESSource2 = cms.ESSource("PoolDBESSource", - BlobStreamerName = cms.untracked.string('TBufferBlobStreamingService'), - DBParameters = cms.PSet( - messageLevel = cms.untracked.int32(2), - authenticationPath = cms.untracked.string('/afs/cern.ch/cms/DB/conddb') - ), - timetype = cms.untracked.string('runnumber'), - connect = cms.string('oracle://cms_orcoff_prep/CMS_COND_PHYSICSTOOLS'), - toGet = cms.VPSet( - cms.PSet( - record = cms.string('MuScleFitDBobjectRcd'), - tag = cms.string('MuScleFit_Resol_OctoberExercise_EWK_InnerTrack_WithLabel'), - label = cms.untracked.string('MuScleFit_Resol_OctoberExercise_EWK_InnerTrack_WithLabel') - ) - ) -) -process.poolDBESSource3 = cms.ESSource("PoolDBESSource", - BlobStreamerName = cms.untracked.string('TBufferBlobStreamingService'), - DBParameters = cms.PSet( - messageLevel = cms.untracked.int32(2), - authenticationPath = cms.untracked.string('/afs/cern.ch/cms/DB/conddb') - ), - timetype = cms.untracked.string('runnumber'), - connect = cms.string('oracle://cms_orcoff_prep/CMS_COND_PHYSICSTOOLS'), - toGet = cms.VPSet( - cms.PSet( - record = cms.string('MuScleFitDBobjectRcd'), - tag = cms.string('MuScleFit_Resol_OctoberExercise_SherpaIdealMC_WithLabel'), - label = cms.untracked.string('MuScleFit_Resol_OctoberExercise_SherpaIdealMC_WithLabel') - ) - ) -) - -# Create a new "distorted" Muon collection -process.distortedMuons = cms.EDFilter("DistortedMuonProducerFromDB", - MuonTag = cms.untracked.InputTag("muons"), - - DBScaleLabel = cms.untracked.string(''), - DBDataResolutionLabel = cms.untracked.string('MuScleFit_Resol_OctoberExercise_EWK_InnerTrack_WithLabel'), - DBMCResolutionLabel = cms.untracked.string('MuScleFit_Resol_OctoberExercise_SherpaIdealMC_WithLabel'), -) - -### NOTE: the following WMN selectors require the presence of -### the libraries and plugins fron the ElectroWeakAnalysis/WMuNu package -### So you need to process the ElectroWeakAnalysis/WMuNu package with -### some old CMSSW versions (at least <=3_1_2, <=3_3_0_pre4) -# - -# WMN fast selector (use W candidates in this example) -#process.load("ElectroWeakAnalysis.WMuNu.WMuNuSelection_cff") -#process.corMetWMuNus.MuonTag = cms.untracked.InputTag("distortedMuons") -#process.selcorMet.MuonTag = cms.untracked.InputTag("distortedMuons") - -# Output -process.load("Configuration.EventContent.EventContent_cff") -process.myEventContent = process.AODSIMEventContent -process.myEventContent.outputCommands.extend( - cms.untracked.vstring('drop *', - 'keep *_genParticles_*_*', - 'keep *_muons_*_*', - 'keep *_distortedMuons_*_*') - ) - -process.Output = cms.OutputModule("PoolOutputModule", - process.myEventContent, - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('distortMuons') - ), - fileName = cms.untracked.string('selectedEvents.root') -) - - - - - -# Steering the process -process.distortMuons = cms.Path( - process.distortedMuons - # *process.selectCaloMetWMuNus -) - -process.end = cms.EndPath(process.Output) diff --git a/ElectroWeakAnalysis/ZMuMu/test/errorMatrix.cpp b/ElectroWeakAnalysis/ZMuMu/test/errorMatrix.cpp deleted file mode 100644 index 510b450e7cccf..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/errorMatrix.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#include -#include -#include -#include -#include -#include - -using namespace std; - -struct cov { - cov(unsigned int _ix, unsigned int _iy, double _cxy, double _rho) : - ix(_ix), iy(_iy), cxy(_cxy), rho(_rho) { } - unsigned int ix, iy; - double cxy, rho; -}; - -double operator<(const cov & c1, const cov & c2) { - return fabs(c1.rho) > fabs(c2.rho); -} - -int main() { - const unsigned int n = 24; - fstream file("error.txt"); - string name[n]; - double err[n][n]; - for(unsigned int i = 0; i < n; ++i) - file >> name[i]; - for(unsigned int i = 0; i < n; ++i) { - for(unsigned int j = 0; j < n; ++j) { - file >> err[i][j]; - } - } - - for(unsigned int i = 0; i < n; ++i) - for(unsigned int j = i; j < n; ++j) - if(fabs(err[i][j] - err[j][i])> 1.e-4) { - cerr << "error: asymmetric matrix"; - exit(1); - } - - for(unsigned int i = 0; i < n; ++i) { - cout << "err(" << name[i] << ") = " << sqrt(err[i][i]) << endl; - } - - vector covs; - for(unsigned int i = 0; i < n; ++i) - for(unsigned int j = i+1; j < n; ++j) { - double cxy = err[i][j]; - double ex = sqrt(err[i][i]), ey = sqrt(err[j][j]); - if(ex > 0 && ey > 0) { - double rho = cxy / (ex * ey); - covs.push_back(cov(i, j, cxy, rho)); - } - } - - sort(covs.begin(), covs.end()); - for(vector::const_iterator i = covs.begin(); i != covs.end(); ++i) { - cout << "cov(" << name[i->ix] << ", " << name[i->iy] << ") = " << i->cxy << ", " - << " correlation = " << i->rho << endl; - } - return 0; -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/gamma_analysis.py b/ElectroWeakAnalysis/ZMuMu/test/gamma_analysis.py deleted file mode 100644 index 9c5dae0ec641e..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/gamma_analysis.py +++ /dev/null @@ -1,101 +0,0 @@ -########################### -# # -# author: Pasquale Noli # -# INFN Naples # -# Script to run gamma # -# analysis # -# # -########################### - - - -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("Pocho") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(10000) - ) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_1.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_2.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_3.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_4.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_6.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_7.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_8.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_9.root", - "file:/data1/home/noli/roofile_SUMMER08/zMuMu_dimuons_10.root" - - ) -) - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("gamma_analysis.root") -) - - - - -#ZMuSta -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("dimuonsOneStandAloneMuon"), - overlap = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(False) -) - - -#ZMuTk -process.zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - src = cms.InputTag("dimuonsOneTrack"), - filter = cms.bool(False) -) - -process.goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuGlobalMuOneTrack"), - overlap = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(False) -) - - - -process.Analyzer = cms.EDAnalyzer( - "gamma_radiative_analyzer", - zMuMu = cms.InputTag("dimuonsGlobal"), - zMuMuMatchMap= cms.InputTag("allDimuonsMCMatch"), - zMuTk = cms.InputTag("goodZToMuMuOneTrack"), - zMuTkMatchMap= cms.InputTag("allDimuonsMCMatch"), - zMuSa = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - zMuSaMatchMap= cms.InputTag("allDimuonsMCMatch"), - ) - - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -process.path = cms.Path ( - process.goodZToMuMuOneStandAloneMuon+ - process.zToMuGlobalMuOneTrack + - process.goodZToMuMuOneTrack + - process.Analyzer -) - - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/isoSAEff.py b/ElectroWeakAnalysis/ZMuMu/test/isoSAEff.py deleted file mode 100644 index 63e6a11836695..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/isoSAEff.py +++ /dev/null @@ -1,47 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("IsoSAEff") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/zmm/zmumu_reskim_1.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/zmm/zmumu_reskim_2.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/zmm/zmumu_reskim_3.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/zmm/zmumu_reskim_4.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/zmm/zmumu_reskim_5.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/zmm/zmumu_reskim_6.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/zmm/zmumu_reskim_7.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/zmm/zmumu_reskim_8.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/zmm/zmumu_reskim_9.root", - "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/zmm/zmumu_reskim_10.root" - ) -) - -process.isoAnalyzer = cms.EDAnalyzer( - "ZGlobalVsSAIsolationAnalyzer", - src = cms.InputTag("goodZToMuMu"), - isoCut = cms.double(3), - veto = cms.double(0.001), - ptThreshold = cms.double(1.5), - etEcalThreshold = cms.double(0), - etHcalThreshold = cms.double(0), - deltaRTrk = cms.double(0.3), - deltaREcal = cms.double(0.3), - deltaRHcal = cms.double(0.3), - alpha = cms.double(0), - beta = cms.double(0) - ) - -process.path = cms.Path( - process.isoAnalyzer - ) - - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/AddFlatBkgToZGolden.C b/ElectroWeakAnalysis/ZMuMu/test/macros/AddFlatBkgToZGolden.C deleted file mode 100644 index 69cfcda78304d..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/AddFlatBkgToZGolden.C +++ /dev/null @@ -1,65 +0,0 @@ -{ -gROOT->SetStyle("Plain"); -TFile * root_file = new TFile("Analysis_7TeV.root", "update"); - -TH1 * histoZMuMu = root_file->Get("goodZToMuMuPlots/zMass"); -TH1 * histoZMuMu1HLT = root_file->Get("goodZToMuMu1HLTPlots/zMass"); -TH1 * histoZMuMu2HLT = root_file->Get("goodZToMuMu2HLTPlots/zMass"); -double npercent = 1.; - -//histoZMuMu->Draw(); -double integ = (double) histoZMuMu->Integral(); -cout << "integ: " << integ << endl; -for(int i = 1; i <= histoZMuMu->GetNbinsX(); ++i) { - double cont = histoZMuMu->GetBinContent(i) ; - //cout << "cont: " << cont << endl; - // adding npercent flat content.... - double new_cont= cont + ( 0.01 * npercent * integ / histoZMuMu->GetNbinsX()); - //cout << "new_cont: " << new_cont << endl; - histoZMuMu->SetBinContent(i, new_cont); - histoZMuMu->SetBinError(i, sqrt(new_cont)); -} - - -integ = (double) histoZMuMu1HLT->Integral(); -cout << "integ: " << integ << endl; -for(int i = 1; i <= histoZMuMu1HLT->GetNbinsX(); ++i) { - double cont = histoZMuMu1HLT->GetBinContent(i) ; - //cout << "cont: " << cont << endl; - // adding npercent flat content.... - double new_cont= cont + ( 0.01 * npercent * integ / histoZMuMu1HLT->GetNbinsX()); - //cout << "new_cont: " << new_cont << endl; - histoZMuMu1HLT->SetBinContent(i, new_cont); - histoZMuMu1HLT->SetBinError(i, sqrt(new_cont)); -} - - -integ = (double) histoZMuMu2HLT->Integral(); -cout << "integ: " << integ << endl; -for(int i = 1; i <= histoZMuMu2HLT->GetNbinsX(); ++i) { - double cont = histoZMuMu2HLT->GetBinContent(i) ; - //cout << "cont: " << cont << endl; - // adding npercent flat content.... - double new_cont= cont + ( 0.01 * npercent * integ / histoZMuMu2HLT->GetNbinsX()); - //cout << "new_cont: " << new_cont << endl; - histoZMuMu2HLT->SetBinContent(i, new_cont); - histoZMuMu2HLT->SetBinError(i, sqrt(new_cont)); -} - - - -root_file->cd("goodZToMuMuPlots"); -histoZMuMu->Write(); - -root_file->cd("goodZToMuMu1HLTPlots"); -histoZMuMu1HLT->Write(); - -root_file->cd("goodZToMuMu2HLTPlots"); -histoZMuMu2HLT->Write(); -double new_integ = (double) histoZMuMu->Integral(); -cout << "new integ: " << new_integ << endl; -new_integ = (double) histoZMuMu1HLT->Integral(); -cout << "new integ: " << new_integ << endl; -new_integ = (double) histoZMuMu2HLT->Integral(); -cout << "new integ: " << new_integ << endl; -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/MCvsData.C b/ElectroWeakAnalysis/ZMuMu/test/macros/MCvsData.C deleted file mode 100644 index 6309214ab6dc3..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/MCvsData.C +++ /dev/null @@ -1,317 +0,0 @@ -{ - gStyle->SetOptStat(); - gROOT->SetStyle("Plain"); - using namespace std; - //TChain chain("Events"); // create the chain with tree "T" - // gStyle->SetOptStat(); - // gROOT->SetStyle("Plain"); - - TChain chainDATA("Events"); // create the chain with tree "T" - TChain chainMC("Events"); // create the chain with tree "T" - - chainMC.Add("MinBias2010_MC/NtupleLooseTestNew_oneshot_all_MCMinBias.root"); - chainMC.Add("MinBias2010_MC/NtupleLoose_all_15apr_23_0.root"); - chainMC.Add("MinBias2010_MC/NtupleLoose_all_15apr_23_1.root"); - - chainDATA.Add("MinBias2010_15Apr/NtupleLoose_all_15apr_23_2.root"); - chainDATA.Add("MinBias2010_15Apr/NtupleLoose_all_15apr_23_3.root"); - chainDATA.Add("MinBias2010_15Apr/NtupleLoose_all_15apr_23_4.root"); - chainDATA.Add("MinBias2010_15Apr/NtupleLoose_all_15apr_23_5.root"); - - - - /*chain.Add("NtupleLooseTestNew_oneshot_all_132653.root"); - */ - - TFile out("histo.root", "RECREATE"); - TCanvas c; - - std::string pt_cut1= "1"; - std::string pt_cut2= "1"; - std::string scut1 = string("zMuTrkDau1Pt>") + pt_cut1 ; - std::string scut2 = string("zMuTrkDau2Pt>") + pt_cut2 ; - - TH1F * muIsoDATA= new TH1F("zGoldenDauTrkIsoDATA", "zGoldenDauTrkIsoDATA", 100, 0, 50); - TH1F * trkIsoDATA = new TH1F("zMuTrkDau2TrkIsoDATA", "zMuTrkDau2TrkIsoDATA", 100, 0, 50); - TH1F * muStaIsoDATA = new TH1F("zMuStaDauTrkIsoDATA", "zMuStaDauTrkIsoDATA", 100, 0, 50); - TH1F * muTrkMuIsoDATA = new TH1F("zMuTrkMuDauTrkIsoDATA", "zMuTrkMuDauTrkIsoDATA", 100, 0, 50); - TH1F * muIsoMC= new TH1F("zGoldenDauTrkIsoMC", "zGoldenDauTrkIsoMC", 100, 0, 50); - TH1F * trkIsoMC = new TH1F("zMuTrkDau2TrkIsoMC", "zMuTrkDau2TrkIsoMC", 100, 0, 50); - TH1F * muStaIsoMC = new TH1F("zMuStaDauTrkIsoMC", "zMuStaDauTrkIsoMC", 100, 0, 50); - TH1F * muTrkMuIsoMC = new TH1F("zMuTrkMuDauTrkIsoMC", "zMuTrkMuDauTrkIsoMC", 100, 0, 50); - - - - chainDATA->Project("zGoldenDauTrkIsoDATA", "zGoldenDau1TrkIso", scut1.c_str() ); - chainDATA->Project("zGoldenDauTrkIsoDATA", "zGoldenDau2TrkIso", scut1.c_str() ); - chainDATA->Project("zMuTrkDau2TrkIsoDATA", "zMuTrkDau2TrkIso", scut2.c_str() ); - chainDATA->Project("zMuTrkMuDauTrkIsoDATA", "zMuTrkMuDau1TrkIso", scut2.c_str() ); - chainDATA->Project("zMuTrkMuDauTrkIsoDATA", "zMuTrkMuDau2TrkIso", scut2.c_str() ); - chainDATA->Project("zMuStaDauTrkIsoDATA", "zMuStaDau1TrkIso", scut2.c_str() ); - chainDATA->Project("zMuStaDauTrkIsoDATA", "zMuStaDau2TrkIso", scut2.c_str() ); - - - chainMC->Project("zGoldenDauTrkIsoMC", "zGoldenDau1TrkIso", scut1.c_str() ); - chainMC->Project("zGoldenDauTrkIsoMC", "zGoldenDau2TrkIso", scut1.c_str() ); - chainMC->Project("zMuTrkDau2TrkIsoMC", "zMuTrkDau2TrkIso", scut2.c_str() ); - chainMC->Project("zMuTrkMuDauTrkIsoMC", "zMuTrkMuDau1TrkIso", scut2.c_str() ); - chainMC->Project("zMuTrkMuDauTrkIsoMC", "zMuTrkMuDau2TrkIso", scut2.c_str() ); - chainMC->Project("zMuStaDauTrkIsoMC", "zMuStaDau1TrkIso", scut2.c_str() ); - chainMC->Project("zMuStaDauTrkIsoMC", "zMuStaDau2TrkIso", scut2.c_str() ); - - - muIsoMC->Sumw2(); - double scale = muIsoDATA->Integral()/ muIsoMC->Integral(); - muIsoMC->Scale(scale); - - muIsoDATA->SetMarkerColor(kBlack); - muIsoDATA->SetMarkerStyle(20); - muIsoDATA->SetMarkerSize(0.8); - muIsoDATA->SetLineWidth(2); - muIsoDATA->SetLineColor(kBlack); - muIsoMC->SetFillColor(kAzure+7); - muIsoMC->SetLineWidth(2); - muIsoMC->SetLineWidth(2); - muIsoMC->SetLineColor(kBlue+1); - - muIsoMC->SetMaximum(muIsoDATA->GetMaximum()*1.5 + 2); - c.SetLogy(); - - muIsoMC->Draw("HIST"); - muIsoDATA->Draw("esame"); - - leg = new TLegend(0.65,0.60,0.85,0.75); - leg->SetFillColor(kWhite); - leg->AddEntry(muIsoDATA,"data"); - leg->AddEntry(muIsoMC,"MC","f"); - leg->Draw(); - - std::cout << "MC entries "<< muIsoMC->GetEntries()<< std::endl; - std::cout << "DATA entries "<< muIsoDATA->GetEntries()<< std::endl; - - c.SaveAs( "zGoldenDau1TrkIso.eps"); - leg->Clear(); - - - std::cout << "MC entries "<< trkIsoMC->GetEntries()<< std::endl; - std::cout << "DATA entries "<< trkIsoDATA->GetEntries()<< std::endl; - - trkIsoMC->Sumw2(); - scale = trkIsoDATA->Integral()/ trkIsoMC->Integral(); - trkIsoMC->Scale(scale); - - trkIsoDATA->SetMarkerColor(kBlack); - trkIsoDATA->SetMarkerStyle(20); - trkIsoDATA->SetMarkerSize(0.8); - trkIsoDATA->SetLineWidth(2); - trkIsoDATA->SetLineColor(kBlack); - trkIsoMC->SetFillColor(kAzure+7); - trkIsoMC->SetLineWidth(2); - trkIsoMC->SetLineWidth(2); - trkIsoMC->SetLineColor(kBlue+1); - - trkIsoMC->SetMaximum(trkIsoDATA->GetMaximum()*1.5 + 1); - trkIsoMC->Draw("HIST"); - trkIsoDATA->Draw("esame"); - - leg = new TLegend(0.65,0.60,0.85,0.75); - leg->SetFillColor(kWhite); - leg->AddEntry(trkIsoDATA,"data"); - leg->AddEntry(trkIsoMC,"MC","f"); - leg->Draw(); - - c.SaveAs( "zMuTrkDau2TrkIso.eps"); - leg->Clear(); - - muStaIsoMC->Sumw2(); - scale = muStaIsoDATA->Integral()/ muStaIsoMC->Integral(); - muStaIsoMC->Scale(scale); - - muStaIsoDATA->SetMarkerColor(kBlack); - muStaIsoDATA->SetMarkerStyle(20); - muStaIsoDATA->SetMarkerSize(0.8); - muStaIsoDATA->SetLineWidth(2); - muStaIsoDATA->SetLineColor(kBlack); - muStaIsoMC->SetFillColor(kAzure+7); - muStaIsoMC->SetLineWidth(2); - muStaIsoMC->SetLineWidth(2); - muStaIsoMC->SetLineColor(kBlue+1); - - muStaIsoMC->SetMaximum(muStaIsoDATA->GetMaximum()*1.5 + 1); - muStaIsoMC->Draw("HIST"); - muStaIsoDATA->Draw("esame"); - - leg = new TLegend(0.65,0.60,0.85,0.75); - leg->SetFillColor(kWhite); - leg->AddEntry(muStaIsoDATA,"data"); - leg->AddEntry(muStaIsoMC,"MC","f"); - leg->Draw(); - - c.SaveAs( "zMuStaDauTrkIso.eps"); - leg->Clear(); - - muTrkMuIsoMC->Sumw2(); - scale = muTrkMuIsoDATA->Integral()/ muTrkMuIsoMC->Integral(); - muTrkMuIsoMC->Scale(scale); - - muTrkMuIsoDATA->SetMarkerColor(kBlack); - muTrkMuIsoDATA->SetMarkerStyle(20); - muTrkMuIsoDATA->SetMarkerSize(0.8); - muTrkMuIsoDATA->SetLineWidth(2); - muTrkMuIsoDATA->SetLineColor(kBlack); - muTrkMuIsoMC->SetFillColor(kAzure+7); - muTrkMuIsoMC->SetLineWidth(2); - muTrkMuIsoMC->SetLineWidth(2); - muTrkMuIsoMC->SetLineColor(kBlue+1); - - muTrkMuIsoMC->SetMaximum(muTrkMuIsoDATA->GetMaximum()*1.5 + 1); - muTrkMuIsoMC->Draw("HIST"); - muTrkMuIsoDATA->Draw("esame"); - - leg = new TLegend(0.65,0.60,0.85,0.75); - leg->SetFillColor(kWhite); - leg->AddEntry(muTrkMuIsoDATA,"data"); - leg->AddEntry(muTrkMuIsoMC,"MC","f"); - leg->Draw(); - - c.SaveAs( "zMuTrkMuDauTrkIso.eps"); - leg->Clear(); - - - std::string value[4] = {"zGolden", "zMuTrk", "zMuTrkMu", "zMuSta"}; - for (int z = 0; z<4; ++z ){ - int min_ = 0; - int max_ = 150; - int nBins =75; - - - - // std::string smass=(value[z]+"Mass"); - - TH1F * histoDATA = new TH1F(string(value[z]+"MassDATA").c_str(),string(value[z]+"MassDATA").c_str() , 100, min_, 20); - TH1F * histoMC = new TH1F(string(value[z]+"MassMC").c_str(),string(value[z]+"MassMC").c_str() , 100, min_, 20); - - // TH1F * histoDATA = new TH1F(string(value[z]+"MassDATA").c_str(),string(value[z]+"MassDATA").c_str() , 75, min_, 150); - // TH1F * histoMC = new TH1F(string(value[z]+"MassMC").c_str(),string(value[z]+"MassMC").c_str() , 75, min_, 150); - - - TH1F * histo2DATA = new TH1F(string(value[z] + "Dau1PtDATA").c_str(),string(value[z] + "Dau1PtDATA").c_str(), nBins, min_, max_); - TH1F * histo2MC = new TH1F(string(value[z] + "Dau1PtMC").c_str(),string(value[z] + "Dau1PtMC").c_str(), nBins, min_, max_); - - - TH1F * histo3DATA = new TH1F(string(value[z] + "Dau2PtDATA").c_str(),string(value[z] + "Dau2Pt").c_str(), nBins, min_, max_); - TH1F * histo3MC = new TH1F(string(value[z] + "Dau2PtMC").c_str(),string(value[z] + "Dau2PtMC").c_str(), nBins, min_, max_); - - - - std::string pt_cut1= "1"; - std::string pt_cut2= "1"; - - std::string scut = value[z] + "Dau1Pt>" + pt_cut1 + " && " + value[z] + "Dau2Pt> "+ pt_cut2; - TCut cut(scut.c_str()); - - chainDATA->Project(string(value[z] + "MassDATA").c_str(), string(value[z] + "Mass").c_str(), cut ); - chainMC->Project(string(value[z] + "MassMC").c_str(), string(value[z] + "Mass").c_str(), cut ); - - chainDATA->Project(string(value[z] + "Dau1PtDATA").c_str(), string(value[z] + "Dau1Pt").c_str(), cut ); - chainMC->Project(string(value[z] + "Dau1PtMC").c_str(), string(value[z] + "Dau1Pt").c_str(), cut ); - - chainDATA->Project(string(value[z] + "Dau2PtDATA").c_str(), string(value[z] + "Dau2Pt").c_str(), cut ); - chainMC->Project(string(value[z] + "Dau2PtMC").c_str(), string(value[z] + "Dau2Pt").c_str(), cut ); - - - histoMC->Sumw2(); - scale = histoDATA->Integral()/ histoMC->Integral(); - histoMC->Scale(scale); - - histoDATA->SetMarkerColor(kBlack); - histoDATA->SetMarkerStyle(20); - histoDATA->SetMarkerSize(0.8); - histoDATA->SetLineWidth(2); - histoDATA->SetLineColor(kBlack); - histoMC->SetFillColor(kAzure+7); - histoMC->SetLineWidth(2); - histoMC->SetLineWidth(2); - histoMC->SetLineColor(kBlue+1); - - histoMC->SetMaximum(histoDATA->GetMaximum()*1.5 + 1); - histoMC->Draw("HIST"); - histoDATA->Draw("esame"); - - leg = new TLegend(0.65,0.60,0.85,0.75); - leg->SetFillColor(kWhite); - leg->AddEntry(histoDATA,"data"); - leg->AddEntry(histoMC,"MC","f"); - leg->Draw(); - - c.SaveAs( string(value[z] + "Mass.eps").c_str()); - leg->Clear(); - - histo2MC->Sumw2(); - scale = histo2DATA->Integral()/ histo2MC->Integral(); - histo2MC->Scale(scale); - - histo2DATA->SetMarkerColor(kBlack); - histo2DATA->SetMarkerStyle(20); - histo2DATA->SetMarkerSize(0.8); - histo2DATA->SetLineWidth(2); - histo2DATA->SetLineColor(kBlack); - histo2MC->SetFillColor(kAzure+7); - histo2MC->SetLineWidth(2); - histo2MC->SetLineWidth(2); - histo2MC->SetLineColor(kBlue+1); - - histo2MC->SetMaximum(histo2DATA->GetMaximum()*1.5 + 1); - histo2MC->Draw("HIST"); - histo2DATA->Draw("esame"); - - leg = new TLegend(0.65,0.60,0.85,0.75); - leg->SetFillColor(kWhite); - leg->AddEntry(histo2DATA,"data"); - leg->AddEntry(histo2MC,"MC","f"); - leg->Draw(); - - c.SaveAs(string(value[z] + "Dau1Pt.eps").c_str()); - leg->Clear(); - - histo3MC->Sumw2(); - scale = histo3DATA->Integral()/ histo3MC->Integral(); - histo3MC->Scale(scale); - - histo3DATA->SetMarkerColor(kBlack); - histo3DATA->SetMarkerStyle(20); - histo3DATA->SetMarkerSize(0.8); - histo3DATA->SetLineWidth(2); - histo3DATA->SetLineColor(kBlack); - histo3MC->SetFillColor(kAzure+7); - histo3MC->SetLineWidth(2); - histo3MC->SetLineWidth(2); - histo3MC->SetLineColor(kBlue+1); - - histo3MC->SetMaximum(histo3DATA->GetMaximum()*1.5 + 1); - histo3MC->Draw("HIST"); - histo3DATA->Draw("esame"); - - leg = new TLegend(0.65,0.60,0.85,0.75); - leg->SetFillColor(kWhite); - leg->AddEntry(histo3DATA,"data"); - leg->AddEntry(histo3MC,"MC","f"); - leg->Draw(); - - // c.SetLogy(0); - - c.SaveAs(string(value[z] + "Dau2Pt.eps").c_str()); - - - - - // c.Write(); - - - -} - - - - // out.Close(); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/Start_ToyMC.csh b/ElectroWeakAnalysis/ZMuMu/test/macros/Start_ToyMC.csh deleted file mode 100755 index 56c2765236641..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/Start_ToyMC.csh +++ /dev/null @@ -1,11 +0,0 @@ -######################### -# # -# author: Pasquale Noli # -# INFN Naples # -# script to run ToyMC # -# # -######################### - -#!/bin/csh -runToyMC.csh 1000 5077000 0.75 0.75 0.75 0.75 100 140 -#0.998481 0.98935 0.979679 0.915384 10 140 diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/compareLONLO.C b/ElectroWeakAnalysis/ZMuMu/test/macros/compareLONLO.C deleted file mode 100644 index 65f806f61dea4..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/compareLONLO.C +++ /dev/null @@ -1,173 +0,0 @@ -{ - -gROOT->Reset(); -gROOT->SetStyle("Plain"); - -TCanvas *c1 = new TCanvas ("c1" , "Pythia6 vs MCatNLO"); - -int sec_LO = 19440; -int sec_NLO = 22740; -double w_LO_over_NLO= double (19440) / double (22740) ; - - -TFile *NLO = TFile::Open("ZNLO_10pb.root"); - - -//mass - -TH1D * ZMCNLOmass = (TH1D*) NLO->Get("zHistos/ZMCHisto/ZMCMass"); -ZMCNLOmass->SetLineColor(kBlue); -ZMCNLOmass->SetStats(kFALSE); -ZMCNLOmass-> Draw(); - -TFile *LO = TFile::Open("ZLO_10pb.root"); - -TH1D * ZMCLOmass = (TH1D*) LO->Get("zHistos/ZMCHisto/ZMCMass"); -ZMCLOmass->SetLineColor(kRed); - -ZMCLOmass->Draw("SAME"); -leg = new TLegend(.6,.6,0.9,0.9); -leg->AddEntry(ZMCNLOmass,"MCatNLO","l"); -leg->AddEntry(ZMCLOmass,"Pythia6","l"); -leg->SetFillColor(0); -leg->SetBorderSize(0); - -leg->Draw("SAME"); - -c1.SaveAs("LO_versus_NLO/ZMass_LO_vs_NLO_at10pb.eps"); - - -ZMCNLOmass->Scale(w_LO_over_NLO); -ZMCNLOmass->Draw(""); -ZMCLOmass->Draw("SAME"); -leg->Draw("SAME"); -c1.SaveAs("LO_versus_NLO/ZPt_LO_vs_NLO_at10pb_normalized.eps"); - - - //pt - - - -c1->SetLogy(1); - -TH1D * ZMCNLOpt = (TH1D*) NLO->Get("zHistos/ZMCHisto/ZMCPt"); -ZMCNLOpt->SetLineColor(kBlue); -ZMCNLOpt->Rebin(2); - - - -TFile *LO = TFile::Open("ZLO_10pb.root"); - -TH1D * ZMCLOpt = (TH1D*) LO->Get("zHistos/ZMCHisto/ZMCPt"); -ZMCLOpt->SetLineColor(kRed); -ZMCLOpt->Rebin(2); - -ZMCLOpt->Draw(); -ZMCLOpt->SetStats(kFALSE); -ZMCNLOpt-> Draw("same"); - -leg = new TLegend(.6,.6,0.9,0.9); -leg->AddEntry(ZMCNLOpt,"MCatNLO","l"); -leg->AddEntry(ZMCLOpt,"Pythia6","l"); -leg->SetFillColor(0); -leg->SetBorderSize(0); - -leg->Draw("SAME"); - -c1->SaveAs("LO_versus_NLO/ZPt_LO_vs_NLO_at10pb.eps"); - -// L0/NLO ratio -TH1D numLO = TH1D( *ZMCLOpt); -numLO.Sumw2(); - -TH1D denNLO = TH1D( *ZMCNLOpt); -denNLO.Sumw2(); - -numLO.Divide(&denNLO); -numLO.Draw("b"); -denNLO.Divide(&denNLO); -denNLO.Draw("same"); -c1->SetLogy(0); -c1.SaveAs("LO_versus_NLO/ratioLO_versus_NLO_pt_at10pb.eps"); - -numLO->Scale(1. / w_LO_over_NLO); -c1.SaveAs("LO_versus_NLO/ratioLO_versus_NLO_Pt_LO_vs_NLO_at10pb_normalized.eps"); - - -ZMCNLOpt->Scale(w_LO_over_NLO); -ZMCLOpt->Draw(""); -ZMCNLOpt->Draw("same"); -leg->Draw("SAME"); -c1->SetLogy(1); -c1.SaveAs("LO_versus_NLO_Pt_LO_vs_NLO_at10pb_normalized.eps"); - - - - //rapidity - -c1->SetLogy(0); - -TH1D * ZMCNLOrapidity = (TH1D*) NLO->Get("zHistos/ZMCHisto/ZMCRapidity"); -ZMCNLOrapidity->SetLineColor(kBlue); -ZMCNLOrapidity->Rebin(2); -ZMCNLOrapidity-> Draw(); -ZMCNLOrapidity->SetStats(kFALSE); - - -TFile *LO = TFile::Open("ZLO_10pb.root"); - -TH1D * ZMCLOrapidity = (TH1D*) LO->Get("zHistos/ZMCHisto/ZMCRapidity"); -ZMCLOrapidity->SetLineColor(kRed); -ZMCLOrapidity->Rebin(2); -ZMCLOrapidity->Draw(); -ZMCLOrapidity->SetStats(kFALSE); -ZMCNLOrapidity-> Draw("SAME"); -leg = new TLegend(.7,.7,0.9,0.9); -leg->AddEntry(ZMCNLOrapidity,"MCatNLO","l"); -leg->AddEntry(ZMCLOrapidity,"Pythia6","l"); -leg->SetFillColor(0); -leg->SetBorderSize(0); - -leg->Draw("SAME"); - -c1.SaveAs("LO_versus_NLO/ZRapidity_LO_vs_NLO_at10pb.eps"); - -// L0/NLO ratio -TH1D numLO = TH1D( *ZMCLOrapidity); -numLO.Sumw2(); - -TH1D denNLO = TH1D( *ZMCNLOrapidity); -denNLO.Sumw2(); - -numLO.Divide(&denNLO); -numLO.Draw("b"); -denNLO.Divide(&denNLO); -denNLO.Draw("same"); -c1->SetLogy(0); -c1.SaveAs("LO_versus_NLO/ratioLO_versus_NLO_rapidity_at10pb.eps"); - -numLO->Scale(1. / w_LO_over_NLO); -c1.SaveAs("LO_versus_NLO/ratioLO_versus_NLO_rapidity_LO_vs_NLO_at10pb_normalized.eps"); - - - - - -ZMCLOrapidity->Draw(); -ZMCNLOrapidity->Scale(w_LO_over_NLO); -ZMCNLOrapidity->Draw("SAME"); -leg->Draw("SAME"); -c1->SetLogy(1); -c1.SaveAs("LO_versus_NLO/ZRapidity_LO_vs_NLO_at10pb_normalized.eps"); - - - - -TFile * ZToLL_file = new TFile("CompareLONLO.root","recreate"); - - - - -ZToLL_file->Close(); - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/create_tree_for_toyMC.C b/ElectroWeakAnalysis/ZMuMu/test/macros/create_tree_for_toyMC.C deleted file mode 100644 index 3b201447d52fc..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/create_tree_for_toyMC.C +++ /dev/null @@ -1,93 +0,0 @@ -/*************************/ -/* */ -/* author: Pasquale Noli */ -/* INFN Naples */ -/* Create TTree from */ -/* fit on Toy Montecarlo */ -/* */ -/*************************/ -#include -#include -#include -#include -#include -#include "TObjArray.h" -#include "TROOT.h" -#include "TTree.h" -#include "TFile.h" -#include -#include - -using namespace std; - -void create_tree_for_toyMC()() -{ - gROOT->Reset(); - - Double_t Y; - Double_t Y_true; - Double_t dY; - Double_t Tk; - Double_t Tk_true; - Double_t dTk; - Double_t Sa; - Double_t Sa_true; - Double_t dSa; - Double_t Iso; - Double_t Iso_true; - Double_t dIso; - Double_t Hlt; - Double_t Hlt_true; - Double_t dHlt; - Double_t chi2; - - TFile *f; - TTree *tree; - - f = new TFile("fitResult.root","RECREATE"); - tree = new TTree("tree"," C data from ASCII file"); - - tree->Branch("Y",&Y,"Y/D"); - tree->Branch("Y_true",&Y_true,"Y/D"); - tree->Branch("dY",&dY,"dY/D"); - tree->Branch("Tk",&Tk," Tk/D"); - tree->Branch("Tk_true",&Tk_true," Tk_true/D"); - tree->Branch("dTk",&dTk," dTk/D"); - tree->Branch("Sa",&Sa," Sa/D"); - tree->Branch("Sa_true",&Sa_true," Sa_true/D"); - tree->Branch("dSa",&dSa," dSa/D"); - tree->Branch("Iso",&Iso," Iso/D"); - tree->Branch("Iso_true",&Iso_true," Iso_true/D"); - tree->Branch("dIso",&dIso," dIso/D"); - tree->Branch("Hlt",&Hlt," Hlt/D"); - tree->Branch("Hlt_true",&Hlt_true," Hlt_true/D"); - tree->Branch("dHlt",&dHlt," dHlt/D"); - tree->Branch("chi2",&chi2," chi2/D"); - - ifstream fin; - fin.open("fitResult.txt"); - - char line[1024]; - - fin.getline(line, 1024); - cout << line << endl; - fin >> Y_true >> Tk_true >> Sa_true >> Iso_true >> Hlt_true; - cout << "Yield = " << Y_true; - cout << " eff_trk = " << Tk_true; - cout << " eff_sa = " << Sa_true; - cout << " eff_iso = " << Iso_true; - cout << " eff_hlt = " << Hlt_true << endl; - while(!(fin.eof())){ - Y = 0; - fin >> Y >> dY >> Tk >> dTk >> Sa >> - dSa >> Iso >> dIso >> Hlt >> dHlt >>chi2; - if(Y > 0) - tree->Fill(); - } - - tree->Print(); - f->Write(); - f->Close(); - - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/isoStudy.C b/ElectroWeakAnalysis/ZMuMu/test/macros/isoStudy.C deleted file mode 100644 index 125403cc46716..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/isoStudy.C +++ /dev/null @@ -1,110 +0,0 @@ -{ -gROOT->SetStyle("Plain"); -int n = 5; - -double isoCut[n] = { 1.0, 2.0, 3.0, 4.0, 5.0 }; -double isoCutErr[n] = { 0.0, 0.0, 0.0, 0.0, 0.0 }; -double chi2[n] = { 1.0813, 0.9948, 0.964385, 0.992457, 0.989026 }; -double zYield[n] = { 8818.69, 8832.02, 8827.16, 8804.38, 8802.99 }; -double zYieldErr[n] = { 102.324, 102.079, 98.0602, 97.502, 95.9208 }; -double effIso[n] = { 0.935329, 0.960251, 0.980071, 0.987804, 0.992889 }; -double effIsoErr[n] = { 0.00235985, 0.00187779, 0.00133067, 0.00113768, 0.000920907 }; -double effSa[n] = { 0.932455 , 0.932456, 0.933515, 0.934257, 0.93411 }; -double effSaErr[n] = { 0.0025364, 0.0024718, 0.00233289, 0.00219377, 0.00228775 }; -double effTk[n] = { 0.996802, 0.996852, 0.996798, 0.99686, 0.996899 }; -double effTkErr[n] = { 0.000584946, 0.000550869, 0.000529331, 0.000509021, 0.000526273 }; -double relErr[n]; -for(unsigned int i = 0; i < n; ++i) relErr[i] = zYieldErr[i] / zYield[i]; - -gStyle->SetOptStat(kFALSE); -TCanvas canvas ("canvas","Isolation Study", 200, 10, 700, 500); - -TH2D zYieldFrame("frame", "", 1, 0.5, 5.5, 1, 8500, 9200); -TGraphErrors zYieldGraph(n, isoCut, zYield, isoCutErr, zYieldErr); -double mcX[2] = { isoCut[0], isoCut[n-1] }; -double mcY[2] = { 8958, 8958 }; -TGraph mc(2, mcX, mcY); -mc.SetLineWidth(2); -mc.SetLineColor(kRed); -zYieldFrame.GetXaxis()->SetTitle("isolation cut (GeV/c)"); -zYieldFrame.GetYaxis()->SetTitle("Z yield from fit"); -zYieldGraph.SetMarkerStyle(21); -zYieldGraph.SetLineWidth(2); -zYieldFrame.Draw(); -zYieldGraph.Draw("LP"); -mc.Draw("L"); -canvas.Update(); -canvas.SaveAs("zYieldVsIso.eps"); - -TH2D effIsoFrame("frame", "", 1, 0.5, 5.5, 1, 0.92, 1); -TGraphErrors effIsoGraph(n, isoCut, effIso, isoCutErr, effIsoErr); -effIsoFrame.GetXaxis()->SetTitle("isolation cut (GeV/c)"); -effIsoFrame.GetYaxis()->SetTitle("isolation efficiency from fit"); -effIsoGraph.SetMarkerStyle(21); -effIsoGraph.SetLineWidth(2); -effIsoFrame.Draw(); -effIsoGraph.Draw("LP"); -canvas.Update(); -canvas.SaveAs("effIsoVsIso.eps"); -{ -TH2D effSaFrame("frame", "", 1, 0.5, 5.5, 1, 0.92, 0.95); -double mcX[2] = { isoCut[0], isoCut[n-1] }; -double mcY[2] = { .938, .938 }; -TGraph mc(2, mcX, mcY); -mc.SetLineWidth(2); -mc.SetLineColor(kRed); -TGraphErrors effSaGraph(n, isoCut, effSa, isoCutErr, effSaErr); -effSaFrame.GetXaxis()->SetTitle("isolation cut (GeV/c)"); -effSaFrame.GetYaxis()->SetTitle("stand-alone efficiency from fit"); -effSaGraph.SetMarkerStyle(21); -effSaGraph.SetLineWidth(2); -effSaFrame.Draw(); -effSaGraph.Draw("LP"); -mc.Draw("L"); -canvas.Update(); -canvas.SaveAs("effSaVsIso.eps"); -} -{ -TH2D effTkFrame("frame", "", 1, 0.5, 5.5, 1, 0.994, 1); -double mcX[2] = { isoCut[0], isoCut[n-1] }; -double mcY[2] = { .9956, .9956 }; -TGraph mc(2, mcX, mcY); -mc.SetLineWidth(2); -mc.SetLineColor(kRed); -TGraphErrors effTkGraph(n, isoCut, effTk, isoCutErr, effTkErr); -effTkFrame.GetXaxis()->SetTitle("isolation cut (GeV/c)"); -effTkFrame.GetYaxis()->SetTitle("tracker efficiency from fit"); -effTkGraph.SetMarkerStyle(21); -effTkGraph.SetLineWidth(2); -effTkFrame.Draw(); -effTkGraph.Draw("LP"); -mc.Draw("L"); -canvas.Update(); -canvas.SaveAs("effTkVsIso.eps"); -} -TH2D chi2Frame("frame", "", 1, 0.5, 5.5, 1, 0, 2.0); -TGraph chi2Graph(n, isoCut, chi2); -chi2Frame.GetXaxis()->SetTitle("isolation cut (GeV/c)"); -chi2Frame.GetYaxis()->SetTitle("fit #chi^{2}"); -chi2Graph.SetMarkerStyle(21); -chi2Graph.SetLineWidth(2); -chi2Frame.Draw(); -chi2Graph.Draw("LP"); -canvas.Update(); -canvas.SaveAs("chi2VsIso.eps"); - -TH2D relErrFrame("frame", "", 1, 0.5, 5.5, 1, 0.0105, 0.012); -TGraph relErrGraph(n, isoCut, relErr); -relErrFrame.GetXaxis()->SetTitle("isolation cut (GeV/c)"); -relErrFrame.GetXaxis()->SetTitleOffset(-0.2); -relErrFrame.GetYaxis()->SetTitle("zYield relative error"); -relErrGraph.SetMarkerStyle(21); -relErrGraph.SetLineWidth(2); -relErrFrame.Draw(); -relErrGraph.Draw("LP"); -canvas.Update(); -canvas.SaveAs("relErrVsIso.eps"); - - - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/plotMuon.C b/ElectroWeakAnalysis/ZMuMu/test/macros/plotMuon.C deleted file mode 100644 index 93f3d9647d206..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/plotMuon.C +++ /dev/null @@ -1,874 +0,0 @@ -#include "TFile.h" -#include "TChain.h" -#include "TH1F.h" -#include "TH2F.h" -#include "TTree.h" -#include "TAxis.h" -#include "TCanvas.h" -//#if !defined(__CINT__) && !defined(__MAKECINT__) -#include -#include -#include -//#endif - - - - - - - - - -void setGraphicsDATA(TH1F *histo){ -gStyle->SetOptStat(0); - histo->SetMarkerColor(kBlack); - histo->SetMarkerStyle(20); - histo->SetMarkerSize(0.8); - histo->SetLineWidth(2); - histo->SetLineColor(kBlack); - } - - - - - -void setGraphicsMC(TH1F *histo){ -gStyle->SetOptStat(0); - histo->SetFillColor(kAzure+7); - histo->SetLineWidth(2); - histo->SetLineWidth(2); - histo->SetLineColor(kBlue+1); - -} - - - - -void compareDATAMC( string name, TH1F * data, TH1F * mc , bool setLogY=kFALSE){ - TCanvas c; - gStyle->SetOptStat(0); - mc->Sumw2(); - double scale =1; - if (mc->Integral()>0) scale = data->Integral()/ mc->Integral(); - mc->Scale(scale); - mc->SetMaximum(data->GetMaximum()*1.5 + 1); - mc->Draw("HIST"); - data->Draw("esame"); - data->SetTitle(name.c_str()); - mc->SetTitle(name.c_str()); - leg = new TLegend(0.65,0.60,0.85,0.75); - leg->SetFillColor(kWhite); - leg->AddEntry(data,"data"); - leg->AddEntry(mc,"MC","f"); - leg->Draw(); - string plotname= name + ".gif"; - c.SetLogy(setLogY); - c.SetTitle(name.c_str()); - c.SaveAs(plotname.c_str()); - leg->Clear(); - - -} - - - - -void plotMuon(){ - -gStyle->SetOptStat(0); -gROOT->SetStyle("Plain"); -using namespace std; - -TChain * chainDATA = new TChain("Events"); // create the chain with tree "T" - -//chainMC.Add("MinBias2010_MC/NtupleLooseTestNew_oneshot_all_MCMinBias.root"); -// chainMC.Add("MinBias2010_MC/NtupleLoose_all_15apr_23_0.root"); -// chainMC.Add("MinBias2010_MC/NtupleLoose_all_15apr_23_1.root"); - - - int nFiles = 151; - - -for(int j=1;jAdd(name.c_str()); - } - - - -TChain * chainMC = new TChain("Events"); - - nFiles =220; - - -for(int j=1;jAdd(name.c_str()); - } - - - - -TFile * out = new TFile("histoMuons.root", "RECREATE"); - - - TCut qualCut ("MuGlobalMuonBit==1 && MuTrackerMuonBit==1 && (MuNofStripHits + MuNofPixelHits)>=10 && MuNofMuonHits>0 && MuChi2<10 && MuTrkIso<3.0 && abs(MuEta)<2.1 && MuPt>10 && abs(MuDxyFromBS)<0.2" ); - - - TCut qualCutButIso ("MuGlobalMuonBit==1 && MuTrackerMuonBit==1 && (MuNofStripHits + MuNofPixelHits)>=10 && MuNofMuonHits>0 && MuChi2<10 && MuTrkIso<1000.0 && abs(MuEta)<2.1 && MuPt>10 && abs(MuDxyFromBS)<0.2" ); - - TCut noQualCut ("MuGlobalMuonBit==1 && MuNofStripHits>=1 && MuNofMuonHits>-1 && MuChi2<1000 && MuTrkIso<1000.0 && abs(MuEta)<2.1 && MuPt>10 && abs(MuDxyFromBS)<0.2" ); - - - -TCut stdCut ("MuGlobalMuonBit==1 && MuTrkIso<3.0 && abs(MuEta)<2.1 && MuPt>10 && abs(MuDxyFromBS)<0.2" ); - - TCut qualCutHLT ("MuGlobalMuonBit==1 && MuTrackerMuonBit==1 && (MuNofStripHits + MuNofPixelHits)>=10 && MuNofMuonHits>0 && MuChi2<10 && MuTrkIso<3.0 && MuHLTBit==1 && abs(MuEta)<2.1 &&abs(MuDxyFromBS)<0.2" ); - - TCut qualCutButIsoHLT ("MuGlobalMuonBit==1 && MuTrackerMuonBit==1 && (MuNofStripHits + MuNofPixelHits)>=10 && MuNofMuonHits>0 && MuChi2<10 && MuTrkIso<1000.0 && MuHLTBit==1 && abs(MuEta)<2.1 &&abs(MuDxyFromBS)<0.2" ); - - TCut noQualCutButHLT ("MuGlobalMuonBit==1 && (MuNofStripHits + MuNofPixelHits)>=1 && MuNofMuonHits>-2 && MuChi2<1000 && MuTrkIso<1000.0 && MuHLTBit==1 && abs(MuEta)<2.1 &&abs(MuDxyFromBS)<0.2" ); - - - - TCut qualCutNoHLT ("MuGlobalMuonBit==1 && MuTrackerMuonBit==1 && (MuNofStripHits + MuNofPixelHits)>=10 && MuNofMuonHits>0 && MuChi2<10 && MuTrkIso<3.0 && abs(MuEta)<2.1 && MuHLTBit==0 &&abs(MuDxyFromBS)<0.2 && MuPt>10" ); - - //============== histo Data ===============/// - -TDirectory * dir = out->mkdir("MuDATAPlots"); - dir->cd(); - - - TH1F * muPtDATADen= new TH1F("muPtDATADen", "muPtDATADen", 100, 0, 100); - chainDATA->Project("muPtDATADen", "MuPt", qualCut); - setGraphicsDATA(muPtDATADen); - muPtDATADen->Write(); - delete muPtDATADen; - - TH1F * muEtaDATADen= new TH1F("muEtaDATADen", "muEtaDATADen", 100, -2.5, 2.5); - chainDATA->Project("muEtaDATADen", "MuEta", qualCut); - setGraphicsDATA(muEtaDATADen); - muEtaDATADen->Write(); - delete muEtaDATADen; - - - - - TH1F * muPtDATADenNotIso= new TH1F("muPtDATADenNotIso", "muPtDATADenNotIso", 100, 0, 100); - chainDATA->Project("muPtDATADenNotIso", "MuPt", qualCutButIso); - setGraphicsDATA(muPtDATADenNotIso); - muPtDATADenNotIso->Write(); - delete muPtDATADenNotIso; - - - - TH1F * muPtDATADenNoCut= new TH1F("muPtDATADenNoCut", "muPtDATADenNoCut", 100, 0, 100); - chainDATA->Project("muPtDATADenNoCut", "MuPt", noQualCut); - setGraphicsDATA(muPtDATADenNoCut); - muPtDATADenNoCut->Write(); - delete muPtDATADenNoCut; - - - - - - - - - TH1F * muEtaDATA= new TH1F("muEtaDATA", "muEtaDATA", 100, -2.5, 2.5); - chainDATA->Project("muEtaDATA", "MuEta", qualCut); - setGraphicsDATA(muEtaDATA); - muEtaDATA->Write(); - delete muEtaDATA; - - - TH1F * muPtDATANum= new TH1F("muPtDATANum", "muPtDATANum", 100, 0, 100); - chainDATA->Project("muPtDATANum", "MuPt", qualCutHLT); - setGraphicsDATA(muPtDATANum); - muPtDATANum->Write(); - delete muPtDATANum; - - TH1F * muEtaDATANum= new TH1F("muEtaDATANum", "muEtaDATANum", 100, -2.5, 2.5); - chainDATA->Project("muEtaDATANum", "MuEta", qualCutHLT + "MuPt>10"); - setGraphicsDATA(muEtaDATANum); - muEtaDATANum->Write(); - delete muEtaDATANum; - - - - - TH1F * muPtDATANumNotIso= new TH1F("muPtDATANumNotIso", "muPtDATANumNotIso", 100, 0, 100); - chainDATA->Project("muPtDATANumNotIso", "MuPt", qualCutButIsoHLT); - setGraphicsDATA(muPtDATANumNotIso); - muPtDATANumNotIso->Write(); - delete muPtDATANumNotIso; - - - - TH1F * muPtDATANumNoCut= new TH1F("muPtDATANumNoCut", "muPtDATANumNoCut", 100, 0, 100); - chainDATA->Project("muPtDATANumNoCut", "MuPt", noQualCutButHLT); - setGraphicsDATA(muPtDATANumNoCut); - muPtDATANumNoCut->Write(); - delete muPtDATANumNoCut; - - - - - TH2F * muPtEtaDATADen= new TH2F("muPtEtaDATADen", "muPtEtaDATADenEta", 100, -2.5, 2.5, 100, 0, 100); - chainDATA->Project("muPtEtaDATADen", "MuPt:MuEta", qualCut); - //setGraphics2dimDATA(muPtEtaDATADen); - muPtEtaDATADen->Write(); - delete muPtEtaDATADen; - - - TH2F * muPtEtaDATANum= new TH2F("muPtEtaDATANum", "muPtEtaDATANum", 100, -2.5, 2.5, 100, 0, 100); - chainDATA->Project("muPtEtaDATANum", "MuPt:MuEta", qualCutHLT); - // setGraphics2dimDATA(muPtEtaDATANum); - muPtEtaDATANum->Write(); - delete muPtEtaDATANum; - - - - TH1F * muNoHLTEta= new TH1F("muNoHLTEta", "muNoHLTEta", 100, -2.5, 2.5); - chainDATA->Project("muNoHLTEta", "MuEta", qualCutNoHLT); - setGraphicsDATA(muNoHLTEta); - muNoHLTEta->Write(); - delete muNoHLTEta; - - TH1F * muNoHLTChi2= new TH1F("muNoHLTChi2", "muNoHLTChi2", 100, 0, 100); - chainDATA->Project("muNoHLTChi2", "MuChi2", qualCutNoHLT); - setGraphicsDATA(muNoHLTChi2); - muNoHLTChi2->Write(); - delete muNoHLTChi2; - - - - TH1F * muNoHLTPixelHits= new TH1F("muNoHLTPixelHits", "muNoHLTPixelHits", 10, -0.5, 9.5); - chainDATA->Project("muNoHLTPixelHits", "MuNofPixelHits", qualCutNoHLT); - setGraphicsDATA(muNoHLTPixelHits); - muNoHLTPixelHits->Write(); - delete muNoHLTPixelHits; - - - TH1F * muNoHLTMuonHits= new TH1F("muNoHLTMuonHits", "muNoHLTMuonHits", 30, -0.5, 39.5); - chainDATA->Project("muNoHLTMuonHits", "MuNofMuonHits", qualCutNoHLT); - setGraphicsDATA(muNoHLTMuonHits); - muNoHLTMuonHits->Write(); - delete muNoHLTMuonHits; - - TH1F * muNoHLTMuMatches= new TH1F("muNoHLTMuMatches", "muNoHLTMuMatches", 15, -0.5, 14.5); - chainDATA->Project("muNoHLTMuMatches", "MuNofMuMatches", qualCutNoHLT); - setGraphicsDATA(muNoHLTMuMatches); - muNoHLTMuMatches->Write(); - delete muNoHLTMuMatches; - - - - - TH1F * muNoHLTMuEnergyEm= new TH1F("muNoHLTMuEnergyEm", "muNoHLTMuEnergyEm", 100, 0, 10); - chainDATA->Project("muNoHLTMuEnergyEm", "MuEnergyEm", qualCutNoHLT); - setGraphicsDATA(muNoHLTMuEnergyEm); - muNoHLTMuEnergyEm->Write(); - delete muNoHLTMuEnergyEm; - - - TH1F * muNoHLTMuEnergyHad= new TH1F("muNoHLTMuEnergyHad", "muNoHLTMuEnergyHad", 100, 0, 20); - chainDATA->Project("muNoHLTMuEnergyHad", "MuEnergyHad", qualCutNoHLT); - setGraphicsDATA(muNoHLTMuEnergyHad); - muNoHLTMuEnergyHad->Write(); - delete muNoHLTMuEnergyHad; - - - - - - - TH1F * muNofPixelHits= new TH1F("muNofPixelHits", "muNofPixelHits", 10, -0.5, 9.5); - chainDATA->Project("muNofPixelHits", "MuNofPixelHits", stdCut); - setGraphicsDATA(muNofPixelHits); - muNofPixelHits->Write(); - delete muNofPixelHits; - - TH1F * muNofStripHits= new TH1F("muNofStripHits", "muNofStripHits", 30, -0.5, 29.5); - chainDATA->Project("muNofStripHits", "MuNofStripHits", stdCut); - setGraphicsDATA(muNofStripHits); - muNofStripHits->Write(); - delete muNofStripHits; - - - TH1F * muNofMuonHits= new TH1F("muNofMuonHits", "muNofMuonHits", 40, -0.5, 39.5); - chainDATA->Project("muNofMuonHits", "MuNofMuonHits", stdCut); - setGraphicsDATA(muNofMuonHits); - muNofMuonHits->Write(); - delete muNofMuonHits; - - - TH1F * muNofMuMatches= new TH1F("muNofMuMatches", "muNofMuMatches", 15, -0.5, 14.5); - chainDATA->Project("muNofMuMatches", "MuNofMuMatches", stdCut); - setGraphicsDATA(muNofMuMatches); - muNofMuMatches->Write(); - delete muNofMuMatches; - - - - - TH1F * muEnergyEm= new TH1F("muEnergyEm", "muEnergyEm", 100, 0, 10); - chainDATA->Project("muEnergyEm", "MuEnergyEm", stdCut); - setGraphicsDATA(muEnergyEm); - muEnergyEm->Write(); - delete muEnergyEm; - - - TH1F * muEnergyHad= new TH1F("muEnergyHad", "muEnergyHad", 100, 0, 20); - chainDATA->Project("muEnergyHad", "MuEnergyHad", stdCut); - setGraphicsDATA(muEnergyHad); - muEnergyHad->Write(); - delete muEnergyHad; - - - - - TH1F * muChi2= new TH1F("muChi2", "muChi2", 100, 0, 100); - chainDATA->Project("muChi2", "MuChi2", stdCut); - setGraphicsDATA(muChi2); - muChi2->Write(); - delete muChi2; - - - /// after quality cuts - - - TH1F * muNofPixelHitsAfterCut= new TH1F("muNofPixelHitsAfterCut", "muNofPixelHits", 10, -0.5, 9.5); - chainDATA->Project("muNofPixelHitsAfterCut", "MuNofPixelHits", "MuGlobalMuonBit==1 && MuTrackerMuonBit==1 && MuNofStripHits>=7 && MuNofMuonHits>0 && MuChi2<10 && MuTrkIso<3.0 && MuHLTBit==1 && abs(MuEta)<2.1 &&abs(MuDxyFromBS)<0.2"); - setGraphicsDATA(muNofPixelHitsAfterCut); - muNofPixelHitsAfterCut->Write(); - delete muNofPixelHitsAfterCut; - - TH1F * muNofStripHitsAfterCut= new TH1F("muNofStripHitsAfterCut", "muNofStripHitsAfterCut", 30, -0.5, 29.5); - chainDATA->Project("muNofStripHitsAfterCut", "MuNofStripHits", "MuGlobalMuonBit==1 && MuTrackerMuonBit==1 && MuNofPixelHits>0 && MuNofMuonHits>0 && MuChi2<10 && MuTrkIso<3.0 && MuHLTBit==1 && abs(MuEta)<2.1 && MuPt>10 && abs(MuDxyFromBS)<0.2"); - setGraphicsDATA(muNofStripHitsAfterCut); - muNofStripHitsAfterCut->Write(); - delete muNofStripHitsAfterCut; - - - TH1F * muNofMuonHitsAfterCut= new TH1F("muNofMuonHitsAfterCut", "muNofMuonHitsAfterCut", 15, -0.5, 14.5); - chainDATA->Project("muNofMuonHitsAfterCut", "MuNofMuonHits", "MuGlobalMuonBit==1 && MuTrackerMuonBit==1 && (MuNofStripHits + MuNofPixelHits)>=10 && MuNofMuonHits>-1 && MuChi2<10 && MuTrkIso<3.0 && MuHLTBit==1 && abs(MuEta)<2.1 && MuPt>10 && abs(MuDxyFromBS)<0.2"); - setGraphicsDATA(muNofMuonHitsAfterCut); - muNofMuonHitsAfterCut->Write(); - delete muNofMuonHitsAfterCut; - - - TH1F * muNofMuMatchesAfterCut= new TH1F("muNofMuMatchesAfterCut", "muNofMuMatchesAfterCut", 15, -0.5, 14.5); - chainDATA->Project("muNofMuMatchesAfterCut", "MuNofMuMatches", "MuGlobalMuonBit==1 && MuTrackerMuonBit==1 && (MuNofStripHits + MuNofPixelHits)>=10 && MuNofMuonHits>-1 && MuChi2<10 && MuTrkIso<3.0 && MuHLTBit==1 && abs(MuEta)<2.1 && MuPt>10 && abs(MuDxyFromBS)<0.2"); - setGraphicsDATA(muNofMuMatchesAfterCut); - muNofMuMatchesAfterCut->Write(); - delete muNofMuMatchesAfterCut; - - - - - TH1F * muEnergyEmAfterCut= new TH1F("muEnergyEmAfterCut", "muEnergyEmAfterCut", 100, 0, 10); - chainDATA->Project("muEnergyEmAfterCut", "MuEnergyEm", qualCutHLT); - setGraphicsDATA(muEnergyEmAfterCut); - muEnergyEmAfterCut->Write(); - delete muEnergyEmAfterCut; - - - TH1F * muEnergyHadAfterCut= new TH1F("muEnergyHadAfterCut", "muEnergyHadAfterCut", 100, 0, 20); - chainDATA->Project("muEnergyHadAfterCut", "MuEnergyHad", qualCutHLT); - setGraphicsDATA(muEnergyHadAfterCut); - muEnergyHadAfterCut->Write(); - delete muEnergyHadAfterCut; - - - - - TH1F * muChi2AfterCut= new TH1F("muChi2AfterCut", "muChi2AfterCut", 100, 0, 100); - chainDATA->Project("muChi2AfterCut", "MuChi2", "MuGlobalMuonBit==1 && MuTrackerMuonBit==1 && (MuNofStripHits + MuNofPixelHits)>=10 && MuNofMuonHits>-1 && MuChi2<1000 && MuTrkIso<3.0 && MuHLTBit==1 && abs(MuEta)<2.1 && MuPt>10 && abs(MuDxyFromBS)<0.2"); - setGraphicsDATA(muChi2AfterCut); - muChi2AfterCut->Write(); - delete muChi2AfterCut; - - - - - - - - - - -out->cd("/"); - - - -//============== histo MC ===============/// -TDirectory * dir = out->mkdir("MuMCPlots"); - dir->cd(); - - TH1F * muPtMCDen= new TH1F("muPtMCDen", "muPtMCDen", 100, 0, 100); - chainMC->Project("muPtMCDen", "MuPt", qualCut); - setGraphicsMC(muPtMCDen); - muPtMCDen->Write(); - delete muPtMCDen; - - - TH1F * muEtaMCDen= new TH1F("muEtaMCDen", "muEtaMCDen", 100, -2.5, 2.5); - chainMC->Project("muEtaMCDen", "MuEta", qualCut); - setGraphicsMC(muEtaMCDen); - muEtaMCDen->Write(); - delete muEtaMCDen; - - - - TH1F * muPtMCDenNotIso= new TH1F("muPtMCDenNotIso", "muPtMCDenNotIso", 100, 0, 100); - chainMC->Project("muPtMCDenNotIso", "MuPt", qualCutButIso); - setGraphicsMC(muPtMCDenNotIso); - muPtMCDenNotIso->Write(); - delete muPtMCDenNotIso; - - - - TH1F * muPtMCDenNoCut= new TH1F("muPtMCDenNoCut", "muPtMCDenNoCut", 100, 0, 100); - chainMC->Project("muPtMCDenNoCut", "MuPt", noQualCut); - setGraphicsMC(muPtMCDenNoCut); - muPtMCDenNoCut->Write(); - delete muPtMCDenNoCut; - - - - - -TH1F * muEtaMC= new TH1F("muEtaMC", "muEtaMC", 100, -2.5, 2.5); - chainMC->Project("muEtaMC", "MuEta", qualCut); - setGraphicsMC(muEtaMC); - muEtaMC->Write(); - delete muEtaMC; - - TH1F * muPtMCNum= new TH1F("muPtMCNum", "muPtMCNum", 100, 0, 100); - chainMC->Project("muPtMCNum", "MuPt", qualCutHLT); - setGraphicsMC(muPtMCNum); - muPtMCNum->Write(); - delete muPtMCNum; - - TH1F * muEtaMCNum= new TH1F("muEtaMCNum", "muEtaMCNum", 100, -2.5, 2.5); - chainMC->Project("muEtaMCNum", "MuEta", qualCutHLT + "MuPt>10"); - setGraphicsMC(muEtaMCNum); - muEtaMCNum->Write(); - delete muEtaMCNum; - - - - TH1F * muPtMCNumNotIso= new TH1F("muPtMCNumNotIso", "muPtMCNumNotIso", 100, 0, 100); - chainMC->Project("muPtMCNumNotIso", "MuPt", qualCutButIsoHLT); - setGraphicsMC(muPtMCNumNotIso); - muPtMCNumNotIso->Write(); - delete muPtMCNumNotIso; - - - - TH1F * muPtMCNumNoCut= new TH1F("muPtMCNumNoCut", "muPtMCNumNoCut", 100, 0, 100); - chainMC->Project("muPtMCNumNoCut", "MuPt", noQualCutButHLT); - setGraphicsMC(muPtMCNumNoCut); - muPtMCNumNoCut->Write(); - delete muPtMCNumNoCut; - - - - TH2F * muPtEtaMCDen= new TH2F("muPtEtaMCDen", "muPtEtaMCDenEta", 100, -2.5, 2.5, 100, 0, 100); - chainMC->Project("muPtEtaMCDen", "MuPt:MuEta", qualCut); - //setGraphics2dimMC(muPtEtaMCDen); - muPtEtaMCDen->Write(); - delete muPtEtaMCDen; - - - TH2F * muPtEtaMCNum= new TH2F("muPtEtaMCNum", "muPtEtaMCNum", 100, -2.5, 2.5, 100, 0, 100); - chainMC->Project("muPtEtaMCNum", "MuPt:MuEta", qualCutHLT); - // setGraphics2dimMC(muPtEtaMCNum); - muPtEtaMCNum->Write(); - delete muPtEtaMCNum; - - - - TH1F * muNoHLTEta= new TH1F("muNoHLTEta", "muNoHLTEta", 100, -2.5, 2.5); - chainMC->Project("muNoHLTEta", "MuEta", qualCutNoHLT); - setGraphicsMC(muNoHLTEta); - muNoHLTEta->Write(); - delete muNoHLTEta; - - - TH1F * muNoHLTChi2= new TH1F("muNoHLTChi2", "muNoHLTChi2", 100, 0, 100); - chainMC->Project("muNoHLTChi2", "MuChi2", qualCutNoHLT); - setGraphicsMC(muNoHLTChi2); - muNoHLTChi2->Write(); - delete muNoHLTChi2; - - - - TH1F * muNoHLTPixelHits= new TH1F("muNoHLTPixelHits", "muNoHLTPixelHits", 10, -0.5, 9.5); - chainMC->Project("muNoHLTPixelHits", "MuNofPixelHits", qualCutNoHLT); - setGraphicsMC(muNoHLTPixelHits); - muNoHLTPixelHits->Write(); - delete muNoHLTPixelHits; - - - TH1F * muNoHLTMuonHits= new TH1F("muNoHLTMuonHits", "muNoHLTMuonHits", 40, -0.5, 39.5); - chainMC->Project("muNoHLTMuonHits", "MuNofMuonHits", qualCutNoHLT); - setGraphicsMC(muNoHLTMuonHits); - muNoHLTMuonHits->Write(); - delete muNoHLTMuonHits; - - - TH1F * muNoHLTMuMatches= new TH1F("muNoHLTMuMatches", "muNoHLTMuMatches", 15, -0.5, 14.5); - chainMC->Project("muNoHLTMuMatches", "MuNofMuMatches", qualCutNoHLT); - setGraphicsMC(muNoHLTMuMatches); - muNoHLTMuMatches->Write(); - delete muNoHLTMuMatches; - - - - TH1F * muNoHLTMuEnergyEm= new TH1F("muNoHLTMuEnergyEm", "muNoHLTMuEnergyEm", 100, 0, 10); - chainMC->Project("muNoHLTMuEnergyEm", "MuEnergyEm", qualCutNoHLT); - setGraphicsMC(muNoHLTMuEnergyEm); - muNoHLTMuEnergyEm->Write(); - delete muNoHLTMuEnergyEm; - - - TH1F * muNoHLTMuEnergyHad= new TH1F("muNoHLTMuEnergyHad", "muNoHLTMuEnergyHad", 100, 0, 20); - chainMC->Project("muNoHLTMuEnergyHad", "MuEnergyHad", qualCutNoHLT); - setGraphicsMC(muNoHLTMuEnergyHad); - muNoHLTMuEnergyHad->Write(); - delete muNoHLTMuEnergyHad; - - - - - TH1F * muNofPixelHits= new TH1F("muNofPixelHits", "muNofPixelHits", 10, -0.5, 9.5); - chainMC->Project("muNofPixelHits", "MuNofPixelHits", stdCut); - setGraphicsMC(muNofPixelHits); - muNofPixelHits->Write(); - delete muNofPixelHits; - - TH1F * muNofStripHits= new TH1F("muNofStripHits", "muNofStripHits", 30, -0.5, 29.5); - chainMC->Project("muNofStripHits", "MuNofStripHits", stdCut); - setGraphicsMC(muNofStripHits); - muNofStripHits->Write(); - delete muNofStripHits; - - - TH1F * muNofMuonHits= new TH1F("muNofMuonHits", "muNofMuonHits", 40, -0.5, 39.5); - chainMC->Project("muNofMuonHits", "MuNofMuonHits", stdCut); - setGraphicsMC(muNofMuonHits); - muNofMuonHits->Write(); - delete muNofMuonHits; - - - TH1F * muNofMuMatches= new TH1F("muNofMuMatches", "muNofMuMatches", 15, -0.5, 14.5); - chainMC->Project("muNofMuMatches", "MuNofMuMatches", stdCut); - setGraphicsMC(muNofMuMatches); - muNofMuMatches->Write(); - delete muNofMuMatches; - - - - TH1F * muEnergyEm= new TH1F("muEnergyEm", "muEnergyEm", 100, 0, 10); - chainMC->Project("muEnergyEm", "MuEnergyEm", stdCut); - setGraphicsMC(muEnergyEm); - muEnergyEm->Write(); - delete muEnergyEm; - - - TH1F * muEnergyHad= new TH1F("muEnergyHad", "muEnergyHad", 100, 0, 20); - chainMC->Project("muEnergyHad", "MuEnergyHad", stdCut); - setGraphicsMC(muEnergyHad); - muEnergyHad->Write(); - delete muEnergyHad; - - - - - TH1F * muChi2= new TH1F("muChi2", "muChi2", 100, 0, 100); - chainMC->Project("muChi2", "MuChi2", stdCut); - setGraphicsMC(muChi2); - muChi2->Write(); - delete muChi2; - - - /// after quality cuts - - - TH1F * muNofPixelHitsAfterCut= new TH1F("muNofPixelHitsAfterCut", "muNofPixelHits", 10, -0.5, 9.5); - chainMC->Project("muNofPixelHitsAfterCut", "MuNofPixelHits", "MuGlobalMuonBit==1 && MuTrackerMuonBit==1 && MuNofStripHits>=7 && MuNofMuonHits>0 && MuChi2<10 && MuTrkIso<3.0 && MuHLTBit==1 && abs(MuEta)<2.1 &&abs(MuDxyFromBS)<0.2"); - setGraphicsMC(muNofPixelHitsAfterCut); - muNofPixelHitsAfterCut->Write(); - delete muNofPixelHitsAfterCut; - - TH1F * muNofStripHitsAfterCut= new TH1F("muNofStripHitsAfterCut", "muNofStripHitsAfterCut", 30, -0.5, 29.5); - chainMC->Project("muNofStripHitsAfterCut", "MuNofStripHits", "MuGlobalMuonBit==1 && MuTrackerMuonBit==1 && MuNofPixelHits>0 && MuNofMuonHits>0 && MuChi2<10 && MuTrkIso<3.0 && MuHLTBit==1 && abs(MuEta)<2.1 && MuPt>10 &&abs(MuDxyFromBS)<0.2"); - setGraphicsMC(muNofStripHitsAfterCut); - muNofStripHitsAfterCut->Write(); - delete muNofStripHitsAfterCut; - - - TH1F * muNofMuonHitsAfterCut= new TH1F("muNofMuonHitsAfterCut", "muNofMuonHitsAfterCut", 40, -0.5, 39.5); - chainMC->Project("muNofMuonHitsAfterCut", "MuNofMuonHits", "MuGlobalMuonBit==1 && MuTrackerMuonBit==1 && (MuNofStripHits + MuNofPixelHits)>=10 && MuNofMuonHits>-1 && MuChi2<10 && MuTrkIso<3.0 && MuHLTBit==1 && abs(MuEta)<2.1 && MuPt>10 && abs(MuDxyFromBS)<0.2"); - setGraphicsMC(muNofMuonHitsAfterCut); - muNofMuonHitsAfterCut->Write(); - delete muNofMuonHitsAfterCut; - - - - - TH1F * muNofMuMatchesAfterCut= new TH1F("muNofMuMatchesAfterCut", "muNofMuMatchesAfterCut", 15, -0.5, 14.5); - chainMC->Project("muNofMuMatchesAfterCut", "MuNofMuMatches", "MuGlobalMuonBit==1 && MuTrackerMuonBit==1 && (MuNofStripHits + MuNofPixelHits)>=10 && MuNofMuonHits>-1 && MuChi2<10 && MuTrkIso<3.0 && MuHLTBit==1 && abs(MuEta)<2.1 && MuPt>10 && abs(MuDxyFromBS)<0.2"); - setGraphicsMC(muNofMuMatchesAfterCut); - muNofMuMatchesAfterCut->Write(); - delete muNofMuMatchesAfterCut; - - - - - TH1F * muEnergyEmAfterCut= new TH1F("muEnergyEmAfterCut", "muEnergyEmAfterCut", 100, 0, 10); - chainMC->Project("muEnergyEmAfterCut", "MuEnergyEm", qualCutHLT); - setGraphicsMC(muEnergyEmAfterCut); - muEnergyEmAfterCut->Write(); - delete muEnergyEmAfterCut; - - - TH1F * muEnergyHadAfterCut= new TH1F("muEnergyHadAfterCut", "muEnergyHadAfterCut", 100, 0, 20); - chainMC->Project("muEnergyHadAfterCut", "MuEnergyHad", qualCutHLT); - setGraphicsMC(muEnergyHadAfterCut); - muEnergyHadAfterCut->Write(); - delete muEnergyHadAfterCut; - - - - - TH1F * muChi2AfterCut= new TH1F("muChi2AfterCut", "muChi2AfterCut", 100, 0, 100); - chainMC->Project("muChi2AfterCut", "MuChi2", "MuGlobalMuonBit==1 && MuTrackerMuonBit==1 && (MuNofStripHits + MuNofPixelHits)>=10 && MuNofMuonHits>-1 && MuChi2<1000 && MuTrkIso<3.0 && MuHLTBit==1 && abs(MuEta)<2.1 && MuPt>10 && abs(MuDxyFromBS)<0.2"); - setGraphicsMC(muChi2AfterCut); - muChi2AfterCut->Write(); - delete muChi2AfterCut; - - - - - - - - - -out->cd("/"); - - - - -//============== histo DATA vs MC ===============/// -TDirectory * dir = out->mkdir("DATAvsMCPlots"); - dir->cd(); - - TH1F * muPtDATADen= (TH1F*) out->Get("MuDATAPlots/muPtDATADen"); - TH1F * muPtMCDen= (TH1F*) out->Get("MuMCPlots/muPtMCDen"); - compareDATAMC( "PtDen", muPtDATADen, muPtMCDen, kTRUE ); - - TH1F * muPtDATANum= (TH1F*) out->Get("MuDATAPlots/muPtDATANum"); - TH1F * muPtMCNum= (TH1F*) out->Get("MuMCPlots/muPtMCNum"); - compareDATAMC( "PtNum", muPtDATANum, muPtMCNum , kTRUE); - - TH1F * muEtaDATADen= (TH1F*) out->Get("MuDATAPlots/muEtaDATADen"); - TH1F * muEtaMCDen= (TH1F*) out->Get("MuMCPlots/muEtaMCDen"); - compareDATAMC( "EtaDen", muEtaDATADen, muEtaMCDen , kTRUE); - - TH1F * muEtaDATANum= (TH1F*) out->Get("MuDATAPlots/muEtaDATANum"); - TH1F * muEtaMCNum= (TH1F*) out->Get("MuMCPlots/muEtaMCNum"); - compareDATAMC( "EtaNum", muEtaDATANum, muEtaMCNum , kTRUE); - - - - - TH1F * muPtDATADenNotIso= (TH1F*) out->Get("MuDATAPlots/muPtDATADenNotIso"); - TH1F * muPtMCDenNotIso= (TH1F*) out->Get("MuMCPlots/muPtMCDenNotIso"); - compareDATAMC( "PtDenNotIso", muPtDATADenNotIso, muPtMCDenNotIso, kTRUE ); - - TH1F * muPtDATANumNotIso= (TH1F*) out->Get("MuDATAPlots/muPtDATANumNotIso"); - TH1F * muPtMCNumNotIso= (TH1F*) out->Get("MuMCPlots/muPtMCNumNotIso"); - compareDATAMC( "PtNumNotIso", muPtDATANumNotIso, muPtMCNumNotIso , kTRUE); - - - - TH1F * muPtDATADenNoCut= (TH1F*) out->Get("MuDATAPlots/muPtDATADenNoCut"); - TH1F * muPtMCDenNoCut= (TH1F*) out->Get("MuMCPlots/muPtMCDenNoCut"); - compareDATAMC( "PtDenNoCut", muPtDATADenNoCut, muPtMCDenNoCut , kTRUE); - - TH1F * muPtDATANumNoCut= (TH1F*) out->Get("MuDATAPlots/muPtDATANumNoCut"); - TH1F * muPtMCNumNoCut= (TH1F*) out->Get("MuMCPlots/muPtMCNumNoCut"); - compareDATAMC( "PtNumNoCut", muPtDATANumNoCut, muPtMCNumNoCut , kTRUE); - - - - - TH1F * muEtaDATA= (TH1F*) out->Get("MuDATAPlots/muEtaDATA"); - TH1F * muEtaMC= (TH1F*) out->Get("MuMCPlots/muEtaMC"); - compareDATAMC( "Eta", muEtaDATA, muEtaMC , kTRUE); - - TH1F * muNoHLTEtaDATA= (TH1F*) out->Get("MuDATAPlots/muNoHLTEta"); - TH1F * muNoHLTEtaMC= (TH1F*) out->Get("MuMCPlots/muNoHLTEta"); - compareDATAMC( "NoHLTEta", muNoHLTEtaDATA, muNoHLTEtaMC, kTRUE ); - - - TH1F * muNoHLTChi2DATA= (TH1F*) out->Get("MuDATAPlots/muNoHLTChi2"); - TH1F * muNoHLTChi2MC= (TH1F*) out->Get("MuMCPlots/muNoHLTChi2"); - compareDATAMC( "NoHLTChi2", muNoHLTChi2DATA, muNoHLTChi2MC, kTRUE ); - - - - - TH1F * muNoHLTPixelHitsDATA= (TH1F*) out->Get("MuDATAPlots/muNoHLTPixelHits"); - TH1F * muNoHLTPixelHitsMC= (TH1F*) out->Get("MuMCPlots/muNoHLTPixelHits"); - compareDATAMC( "NoHLTPixelHits", muNoHLTPixelHitsDATA, muNoHLTPixelHitsMC ); - - - - TH1F * muNoHLTMuonHitsDATA= (TH1F*) out->Get("MuDATAPlots/muNoHLTMuonHits"); - TH1F * muNoHLTMuonHitsMC= (TH1F*) out->Get("MuMCPlots/muNoHLTMuonHits"); - compareDATAMC( "NoHLTMuonHits", muNoHLTMuonHitsDATA, muNoHLTMuonHitsMC ); - - TH1F * muNoHLTMuMatchesDATA= (TH1F*) out->Get("MuDATAPlots/muNoHLTMuMatches"); - TH1F * muNoHLTMuMatchesMC= (TH1F*) out->Get("MuMCPlots/muNoHLTMuMatches"); - compareDATAMC( "NoHLTMuMatches", muNoHLTMuMatchesDATA, muNoHLTMuMatchesMC ); - - - - - TH1F * muNoHLTMuEnergyEmDATA= (TH1F*) out->Get("MuDATAPlots/muNoHLTMuEnergyEm"); - TH1F * muNoHLTMuEnergyEmMC= (TH1F*) out->Get("MuMCPlots/muNoHLTMuEnergyEm"); - compareDATAMC( "NoHLTMuEnergyEm", muNoHLTMuEnergyEmDATA, muNoHLTMuEnergyEmMC , kTRUE); - - - TH1F * muNoHLTMuEnergyHadDATA= (TH1F*) out->Get("MuDATAPlots/muNoHLTMuEnergyHad"); - TH1F * muNoHLTMuEnergyHadMC= (TH1F*) out->Get("MuMCPlots/muNoHLTMuEnergyHad"); - compareDATAMC( "NoHLTMuEnergyHad", muNoHLTMuEnergyHadDATA, muNoHLTMuEnergyHadMC , kTRUE); - - - - TH1F * muPixelHitsDATA= (TH1F*) out->Get("MuDATAPlots/muNofPixelHits"); - TH1F * muPixelHitsMC= (TH1F*) out->Get("MuMCPlots/muNofPixelHits"); - compareDATAMC( "PixelHits", muPixelHitsDATA, muPixelHitsMC ); - - - - TH1F * muStripHitsDATA= (TH1F*) out->Get("MuDATAPlots/muNofStripHits"); - TH1F * muStripHitsMC= (TH1F*) out->Get("MuMCPlots/muNofStripHits"); - compareDATAMC( "StripHits", muStripHitsDATA, muStripHitsMC ); - - - TH1F * muMuonHitsDATA= (TH1F*) out->Get("MuDATAPlots/muNofMuonHits"); - TH1F * muMuonHitsMC= (TH1F*) out->Get("MuMCPlots/muNofMuonHits"); - compareDATAMC( "MuonHits", muMuonHitsDATA, muMuonHitsMC ); - - - TH1F * muMuMatchesDATA= (TH1F*) out->Get("MuDATAPlots/muNofMuMatches"); - TH1F * muMuMatchesMC= (TH1F*) out->Get("MuMCPlots/muNofMuMatches"); - compareDATAMC( "MuMatches", muMuMatchesDATA, muMuMatchesMC ); - - - - TH1F * muEnergyEmDATA= (TH1F*) out->Get("MuDATAPlots/muEnergyEm"); - TH1F * muEnergyEmMC= (TH1F*) out->Get("MuMCPlots/muEnergyEm"); - compareDATAMC( "MuEnergyEm", muEnergyEmDATA, muEnergyEmMC , kTRUE); - - -TH1F * muEnergyHadDATA = (TH1F*) out->Get("MuDATAPlots/muEnergyHad"); - TH1F * muEnergyHadMC= (TH1F*) out->Get("MuMCPlots/muEnergyHad"); - compareDATAMC( "MuEnergyHad", muEnergyHadDATA, muEnergyHadMC , kTRUE); - - - - TH1F * muChi2DATA= (TH1F*) out->Get("MuDATAPlots/muChi2"); - TH1F * muChi2MC= (TH1F*) out->Get("MuMCPlots/muChi2"); - compareDATAMC( "Chi2", muChi2DATA, muChi2MC , kTRUE); - - - // after quality cuts - - - - TH1F * muPixelHitsAfterCutDATA= (TH1F*) out->Get("MuDATAPlots/muNofPixelHitsAfterCut"); - TH1F * muPixelHitsAfterCutMC= (TH1F*) out->Get("MuMCPlots/muNofPixelHitsAfterCut"); - compareDATAMC( "PixelHitsAfterCut", muPixelHitsAfterCutDATA, muPixelHitsAfterCutMC ); - - - - TH1F * muStripHitsAfterCutDATA= (TH1F*) out->Get("MuDATAPlots/muNofStripHitsAfterCut"); - TH1F * muStripHitsAfterCutMC= (TH1F*) out->Get("MuMCPlots/muNofStripHitsAfterCut"); - compareDATAMC( "StripHitsAfterCut", muStripHitsAfterCutDATA, muStripHitsAfterCutMC ); - - - TH1F * muMuonHitsAfterCutDATA= (TH1F*) out->Get("MuDATAPlots/muNofMuonHitsAfterCut"); - TH1F * muMuonHitsAfterCutMC= (TH1F*) out->Get("MuMCPlots/muNofMuonHitsAfterCut"); - compareDATAMC( "MuonHitsAfterCut", muMuonHitsAfterCutDATA, muMuonHitsAfterCutMC ); - - - TH1F * muMuMatchesAfterCutDATA= (TH1F*) out->Get("MuDATAPlots/muNofMuMatchesAfterCut"); - TH1F * muMuMatchesAfterCutMC= (TH1F*) out->Get("MuMCPlots/muNofMuMatchesAfterCut"); - compareDATAMC( "MuMatchesAfterCut", muMuMatchesAfterCutDATA, muMuMatchesAfterCutMC ); - - - - TH1F * muEnergyEmAfterCutDATA= (TH1F*) out->Get("MuDATAPlots/muEnergyEmAfterCut"); - TH1F * muEnergyEmAfterCutMC= (TH1F*) out->Get("MuMCPlots/muEnergyEmAfterCut"); - compareDATAMC( "MuEnergyEmAfterCut", muEnergyEmAfterCutDATA, muEnergyEmAfterCutMC , kTRUE); - - -TH1F * muEnergyHadAfterCutDATA = (TH1F*) out->Get("MuDATAPlots/muEnergyHadAfterCut"); - TH1F * muEnergyHadAfterCutMC= (TH1F*) out->Get("MuMCPlots/muEnergyHadAfterCut"); - compareDATAMC( "MuEnergyHadAfterCut", muEnergyHadAfterCutDATA, muEnergyHadAfterCutMC , kTRUE); - - - - TH1F * muChi2AfterCutDATA= (TH1F*) out->Get("MuDATAPlots/muChi2AfterCut"); - TH1F * muChi2AfterCutMC= (TH1F*) out->Get("MuMCPlots/muChi2AfterCut"); - compareDATAMC( "Chi2AfterCut", muChi2AfterCutDATA, muChi2AfterCutMC , kTRUE); - - - TH2F * muPtEtaDATANum= (TH2F*) out->Get("MuDATAPlots/muPtEtaDATANum"); - TH2F * muPtEtaDATADen= (TH2F*) out->Get("MuDATAPlots/muPtEtaDATADen"); - - - muPtEtaDATANum->Divide(muPtEtaDATADen); - gStyle->SetPalette(1,0); - - muPtEtaDATANum->SetTitle("HLT_Mu9 pt vs eta efficiency"); - muPtEtaDATANum->GetYaxis()->SetRangeUser(9,49); - TCanvas c1; - muPtEtaDATANum->Draw("COLZ"); - - c1.SaveAs("MuHLT_Mu9_PtvsEtaEfficiency.gif"); - - - - - -out->cd("/"); - - - - - - - - - - - out->Close(); - - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/plots.C b/ElectroWeakAnalysis/ZMuMu/test/macros/plots.C deleted file mode 100644 index 05419b1aed820..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/plots.C +++ /dev/null @@ -1,496 +0,0 @@ -#include "TFile.h" -#include "TH1F.h" -#include "TTree.h" -#include "TAxis.h" -#include "TCanvas.h" -//#if !defined(__CINT__) && !defined(__MAKECINT__) -#include -#include -//#endif - -void setGraphics(TH1F *histo){ - - histo->SetFillColor(kAzure+7); - //histo->SetLineWidth(2); - histo->SetLineColor(kBlue+1); -} - - - - -void plots(){ - - gStyle->SetOptStat(); - gROOT->SetStyle("Plain"); - using namespace std; - - // #include ; - - // TFile *file = TFile::Open("rfio:/castor/cern.ch/user/d/degrutto/incl15WithBsPv/NtupleLoose_test_inclu15_1_2.root"); - // TFile *file = TFile::Open("../NutpleLooseTestNew_oneshot_all_10_1.root"); -//TFile *file = TFile::Open("rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/NtupleLoose_test.root"); -// TTree * Events = dynamic_cast< TTree *> (file->Get("Events")); - - TChain Events("Events"); - - Events.Add("../NutpleLooseTestNew_oneshot_all_10_1.root"); - Events.Add("../NutpleLooseTestNew_oneshot_all_11_1.root"); - Events.Add("../NutpleLooseTestNew_oneshot_all_12_1.root"); - Events.Add("../NutpleLooseTestNew_oneshot_all_13_1.root"); - Events.Add("../NutpleLooseTestNew_oneshot_all_4_1.root"); - Events.Add("../NutpleLooseTestNew_oneshot_all_5_1.root"); - Events.Add("../NutpleLooseTestNew_oneshot_all_6_1.root"); - Events.Add("../NutpleLooseTestNew_oneshot_all_7_1.root"); - Events.Add("../NutpleLooseTestNew_oneshot_all_8_1.root"); - - TFile * output_file = TFile::Open("histo.root", "RECREATE"); - // TFile * output_file = TFile::Open("histo_test.root", "RECREATE"); - - // zGolden plots - TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0 && zGoldenDau1Eta<2.1 && zGoldenDau2Eta<2.1"); - TDirectory * dir = output_file->mkdir("goodZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - // Events.Draw("zGoldenMass"); - Events.Project("zMass", "zGoldenMass", cut_zGolden ); - cout<<"Number of zGolden : "<GetEntries()<Write(); - delete zMass; - - - TCut cut_zGoldenPt15("zGoldenMass>20 && zGoldenDau1Pt> 15 && zGoldenDau2Pt>15 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0 && zGoldenDau1Eta<2.1 && zGoldenDau2Eta<2.1"); - dir->cd(); - - TH1F * zMassPt15 = new TH1F("zMassPt15", "zMassPt15", 200, 0, 200); - Events.Project("zMassPt15", "zGoldenMass", cut_zGoldenPt15 ); - setGraphics(zMassPt15); - zMassPt15->Write(); - delete zMassPt15; - - - - output_file->cd("/"); - - TCut cut2_zGolden1HLT(" zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0 && ((zGoldenDau1HLTBit==1 && zGoldenDau2HLTBit==0) || (zGoldenDau1HLTBit==0 && zGoldenDau2HLTBit==1))"); - TDirectory * dir = output_file->mkdir("goodZToMuMu1HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGolden1HLT ); - zMass->Write(); - delete zMass; - //zMass2->Write(); - - output_file->cd("/"); - - - TCut cut2_zGolden2HLT("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0 && ((zGoldenDau1HLTBit==1 && zGoldenDau2HLTBit==1) ) && zGoldenDau1Eta<2.1 && zGoldenDau2Eta<2.1"); - TDirectory * dir = output_file->mkdir("goodZToMuMu2HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGolden2HLT ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - - // zGoldenOneNotIso plots - TCut cut_zGoldenOneNotIso("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && ((zGoldenDau1Iso> 3.0 && zGoldenDau2Iso < 3.0 ) || (zGoldenDau1Iso<3.0 && zGoldenDau2Iso > 3.0)) && zGoldenDau1Eta<2.1 && zGoldenDau2Eta<2.1"); - TDirectory * dir = output_file->mkdir("oneNonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut_zGoldenOneNotIso ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - -// // zGoldenTwoNotIso plots - TCut cut_zGoldenTwoNotIso("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && ( zGoldenDau1Iso> 3.0 && zGoldenDau2Iso > 3.0 ) && zGoldenDau1Eta<2.1 && zGoldenDau2Eta<2.1"); - TDirectory * dir = output_file->mkdir("twoNonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass","zGoldenMass", cut_zGoldenTwoNotIso ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - // zGoldenNotIso plots - TCut cut_zGoldenNotIso("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && ( zGoldenDau1Iso> 3.0 || zGoldenDau2Iso > 3.0 ) && zGoldenDau1Eta<2.1 && zGoldenDau2Eta<2.1"); - TDirectory * dir = output_file->mkdir("nonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut_zGoldenNotIso ); - zMass->Write() ; - delete zMass; - output_file->cd("/"); - - // zGoldenSameCharge plots........ - TCut cut_zSameCharge("zSameChargeMass>20 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && ( zSameChargeDau1Iso < 3.0 && zSameChargeDau2Iso < 3.0 )"); - TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargePlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zSameChargeMass", cut_zSameCharge ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - // zGoldenSameChargeNotIso plots........ - TCut cut_zSameChargeNotIso("zSameChargeMass>60 && zSameChargeMass<120 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && ( zSameChargeDau1Iso > 3.0 || zSameChargeDau2Iso > 3.0 ) && zGoldenDau1Eta<2.1 && zGoldenDau2Eta<2.1"); - TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargeNotIsoPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zSameChargeMass", cut_zSameChargeNotIso ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - -// zMuTrk plots - TCut cut_zMuTrk("zMuTrkMass>60 && zMuTrkMass<120 && zMuTrkDau1Pt> 20 && zMuTrkDau2Pt>20 && zMuTrkDau1Iso< 3.0 && zMuTrkDau2Iso < 3.0 && zGoldenDau1Eta<2.1 && zGoldenDau2Eta<2.1"); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneTrackPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuTrkMass", cut_zMuTrk ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - - // zMuSta plots - TCut cut_zMuSta("zMuStaMass>60 && zMuStaMass<120 && zMuStaDau1Pt> 20 && zMuStaDau2Pt>20 && zMuStaDau1Iso< 3.0 && zMuStaDau2Iso < 3.0 && zGoldenDau1Eta<2.1 && zGoldenDau2Eta<2.1"); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneStandAloneMuonPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuStaMass", cut_zMuSta ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - -// zMuSta plots - TCut cut_zMuMuSta("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0 && zGoldenDau1Eta<2.1 && zGoldenDau2Eta<2.1"); - TDirectory * dir = output_file->mkdir("zmumuSaMassHistogram"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMassSa", cut_zMuMuSta ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - - TDirectory * dir = output_file->mkdir("zPlots"); - dir->cd(); - TH1F * zGoldenPt = new TH1F("zGoldenPt", "zGoldenPt", 200, 0, 200); - Events.Project("zGoldenPt", "zGoldenPt", cut_zGolden ); - zGoldenPt->Write(); - delete zGoldenPt; - - - TH1F * zGoldenY = new TH1F("zGoldenY", "zGoldenY", 200, -5, 5); - Events.Project("zGoldenY", "zGoldenY", cut_zGolden ); - zGoldenY->Write(); - delete zGoldenY; - - output_file->cd("/"); - - - - TDirectory * dir = output_file->mkdir("MuPlots"); - dir->cd(); - - - TH1F * muNotTriggeredEta = new TH1F("muNotTriggeredEta", "muNotTriggeredEta", 240, -6, 6.); - TH1F * h2 = new TH1F("h2", "h2", 240, -6, 6.); - - Events.Project("muNotTriggeredEta","zGoldenDau1Eta", "zGoldenDau1HLTBit==0"); - Events.Project("h2","zGoldenDau2Eta", "zGoldenDau2HLTBit==0"); - - muNotTriggeredEta->Add(h2); - muNotTriggeredEta->Write(); - delete muNotTriggeredEta; - delete h2; - - TH1F * zGoldenDauHighPt = new TH1F("zGoldenDauHighPt", "zGoldenDauHighPt", 200, 0, 200); - Events.Project("zGoldenDauHighPt", "max(zGoldenDau1Pt, zGoldenDau2Pt)", cut_zGolden ); - zGoldenDauHighPt->Write(); - delete zGoldenDauHighPt; - - TH1F * zGoldenDauLowPt = new TH1F("zGoldenDauLowPt", "zGoldenDauLowPt", 200, 0, 200); - Events.Project("zGoldenDauLowPt", "min(zGoldenDau1Pt, zGoldenDau2Pt)", cut_zGolden ); - zGoldenDauLowPt->Write(); - delete zGoldenDauLowPt; - - //(mu1.phi -mu2.phi) - TH1F * deltaPhi = new TH1F("deltaPhi", "deltaPhi", 120, 0, 6.); - TH1F * h2 = new TH1F("h2", "h2", 120, 0, 6. ); - TH1F * h3 = new TH1F("h3", "h3", 120, 0, 6. ); - - /* result = phi1 - phi2; -040 while (result > M_PI) result -= 2*M_PI; -041 while (result <= -M_PI) result += 2*M_PI; -042 return result; - */ - - Events.Project("deltaPhi", "abs(zGoldenDau1Phi - zGoldenDau2Phi)", "-TMath::Pi() < (zGoldenDau1Phi - zGoldenDau2Phi) < TMath::Pi()" , "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + cut_zGolden); - Events.Project("h2", "abs(zGoldenDau1Phi - zGoldenDau2Phi - 2 * TMath::Pi())", "(zGoldenDau1Phi - zGoldenDau2Phi) > TMath::Pi()" , "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + + cut_zGolden); - Events.Project("h3", "abs(zGoldenDau1Phi - zGoldenDau2Phi + 2 * TMath::Pi())", "(zGoldenDau1Phi - zGoldenDau2Phi) <= -TMath::Pi()", "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + cut_zGolden ); - - deltaPhi->Add(h2, h3); - deltaPhi->Write(); - delete deltaPhi;; - delete h2; - delete h3; - - - - // mu1.eta -mu2.eta - TH1F * deltaEta = new TH1F("deltaEta", "deltaEta", 120, 0, 6.); - Events.Project("deltaEta", "abs(zGoldenDau1Eta - zGoldenDau2Eta)", cut_zGolden ); - deltaEta->Write(); - delete deltaEta; - - TH1F * dua1Phi = new TH1F("dau1Phi", "dau1Phi", 120, -6, 6.); - Events.Project("dau1Phi", "zGoldenDau1Phi" , cut_zGolden); - dau1Phi->Write(); - delete dau1Phi; - - TH1F * dua2Phi = new TH1F("dau2Phi", "dau2Phi", 120, -6, 6.); - Events.Project("dau2Phi", "zGoldenDau2Phi" , cut_zGolden); - dau2Phi->Write(); - delete dau2Phi; - - TH1F * dau1Eta = new TH1F("dua1Eta", "dau1Eta", 120, -6, 6.); - Events.Project("dau1Eta", "zGoldenDau1Eta", cut_zGolden ); - dau1Eta->Write(); - delete dau1Eta; - - TH1F * dau2Eta = new TH1F("dua2Eta", "dau2Eta", 120, -6, 6.); - Events.Project("dau2Eta", "zGoldenDau2Eta" , cut_zGolden); - dau2Eta->Write(); - delete dau2Eta; - - // quality variables - // caveat: I'm requiring isolations - TH1F * dau1Chi2 = new TH1F("dua1Chi2", "dau1Chi2", 1000, 0, 100); - Events.Project("dua1Chi2", "zGoldenDau1Chi2", cut_zGolden ); - dau1Chi2->Write(); - delete dau1Chi2; - - TH1F * dau2Chi2 = new TH1F("dua2Chi2", "dau2Chi2", 1000, 0, 100); - Events.Project("dau2Chi2", "zGoldenDau2Chi2", cut_zGolden ); - dau2Chi2->Write(); - delete dau2Chi2; - - - TH1F * dau1Dxy = new TH1F("dua1Dxy", "dau1Dxy", 500, 0, 5); - Events.Project("dua1Dxy", "zGoldenDau1dxyFromBS", cut_zGolden ); - dau1Dxy->Write(); - delete dau1Dxy; - - TH1F * dau2Dxy = new TH1F("dua2Dxy", "dau2Dxy", 500, 0, 5); - Events.Project("dua2Dxy", "zGoldenDau2dxyFromBS", cut_zGolden ); - dau2Dxy->Write(); - delete dau2Dxy; - - - TH1F * dau1Dz= new TH1F("dua1Dz", "dau1Dz", 500, 0, 20); - Events.Project("dua1Dz", "zGoldenDau1dzFromBS", cut_zGolden ); - dau1Dz->Write(); - delete dau1Dz; - - TH1F * dau2Dz = new TH1F("dua2Dz", "dau2Dz", 500, 0, 20); - Events.Project("dua2Dz", "zGoldenDau2dzFromBS", cut_zGolden); - dau2Dz->Write(); - delete dau2Dz; - - /* - TH1F * dau1NofHit = new TH1F("dua1NofHit", "dau1NofHit", 100, -0.5, 99.5); - Events.Project("dua1NofHit", "zGoldenDau1NofHit", cut_zGolden ); - dau1NofHit->Write(); - delete dau1NofHit; - - TH1F * dau2NofHit = new TH1F("dua2NofHit", "dau2NofHit", 100, -0.5, 99.5); - Events.Project("dua2NofHit", "zGoldenDau2NofHit", cut_zGolden ); - dau2NofHit->Write(); - delete dau2NofHit; - */ - - TH1F * dau1NofMuCh = new TH1F("dua1NofMuCh", "dau1NofMuCh", 20, -0.5, 19.5); - Events.Project("dua1NofMuCh", "zGoldenDau1NofMuChambers", cut_zGolden ); - dau1NofMuCh->Write(); - delete dau1NofMuCh; - - TH1F * dau2NofMuCh = new TH1F("dua2NofMuCh", "dau2NofMuCh", 20, -0.5, 19.5); - Events.Project("dua2NofMuCh", "zGoldenDau2NofMuChambers", cut_zGolden ); - dau2NofMuCh->Write(); - delete dau2NofMuCh; - - - TH1F * dau1NofMuMatches = new TH1F("dua1NofMuMatches", "dau1NofMuMatches", 20, -0.5, 19.5); - Events.Project("dua1NofMuMatches", "zGoldenDau1NofMuMatches", cut_zGolden ); - dau1NofMuMatches->Write(); - delete dau1NofMuMatches; - - TH1F * dau2NofMuMatches = new TH1F("dua2NofMuMatches", "dau2NofMuMatches", 20, -0.5, 19.5); - Events.Project("dua2NofMuMatches", "zGoldenDau2NofMuMatches", cut_zGolden ); - dau2NofMuMatches->Write(); - delete dau2NofMuMatches; - - TH1F * dau1EmEnergy = new TH1F("dua1EmEnergy", "dau1EmEnergy", 200, -0.1, 19.9); - Events.Project("dua1EmEnergy", "zGoldenDau1MuEnergyEm", cut_zGolden ); - dau1EmEnergy->Write(); - delete dau1EmEnergy; - - TH1F * dau2EmEnergy = new TH1F("dua2EmEnergy", "dau2EmEnergy", 200, -0.1, 19.9); - Events.Project("dua2EmEnergy", "zGoldenDau2MuEnergyEm", cut_zGolden ); - dau2EmEnergy->Write(); - delete dau2EmEnergy; - - TH1F * dau1HadEnergy = new TH1F("dua1HadEnergy", "dau1HadEnergy", 200, -0.1, 19.9); - Events.Project("dua1HadEnergy", "zGoldenDau1MuEnergyHad", cut_zGolden ); - dau1HadEnergy->Write(); - delete dau1HadEnergy; - - TH1F * dau2HadEnergy = new TH1F("dua2HadEnergy", "dau2HadEnergy", 200, -0.1, 19.9); - Events.Project("dua2HadEnergy", "zGoldenDau2MuEnergyHad", cut_zGolden ); - dau2HadEnergy->Write(); - delete dau2HadEnergy; - - - - - TH2F * MuChambersVsMuMatches = new TH2F("MuChambersVsMuMatches", "MuChambersVsMuMatches", 21, -0.5, 20.5, 21, -0.5, 20.5); - TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events.Project("MuChambersVsMuMatches", "zGoldenDau1NofMuChambers:zGoldenDau1NofMuMatches", cut_zGolden); - Events.Project("hh2", "zGoldenDau2NofMuChambers:zGoldenDau2NofMuMatches", cut_zGolden); - - MuChambersVsMuMatches->Add(hh2); - MuChambersVsMuMatches->Write(); - MuChambersVsMuMatches->SetDrawOption("Box"); - // MuChambersVsMuMatches->Draw("BOX"); - delete MuChambersVsMuMatches; - delete hh2; - output_file->cd("/"); - - TDirectory * dir = output_file->mkdir("TrkPlots"); - dir->cd(); - - - - /* TH1F * nofHitTrk = new TH1F("nofHitTrk", "nofHitTrk", 100, -0.5, 99.5); - Events.Project("nofHitTrk", "zMuTrkDau2NofHitTk", cut_zMuTrk ); - nofHitTrk->Write(); - delete nofHitTrk; - */ - - TH1F * trkChi2 = new TH1F("trkChi2", "trkChi2", 100, -0.5, 99.5); - Events.Project("trkChi2", "zMuTrkDau2Chi2", cut_zMuTrk ); - trkChi2->Write(); - delete trkChi2; - - - output_file->cd("/"); - - - - TDirectory * dir = output_file->mkdir("StaPlots"); - dir->cd(); - - // sta as zDaudxyFromBS=-1 by construction.... - - TH1F * staNofMuCh = new TH1F("staNofMuCh", "staNofMuCh", 20, -0.5, 19.5); - TH1F * h2 = new TH1F("h2", "h2", 20, -0.5, 19.5); - Events.Project("staNofMuCh", "zMuStaDau1NofMuChambers", cut_zMuSta + "zMuStaDau1dxyFromBS==-1" ); - Events.Project("h2", "zMuStaDau2NofMuChambers", cut_zMuSta + "zMuStaDau2dxyFromBS==-1" ); - staNofMuCh->Add(h2); - staNofMuCh->Write(); - delete staNofMuCh; - delete h2; - - TH1F * staNofMuMatches = new TH1F("staNofMuMatches", "staNofMuMatches", 20, -0.5, 19.5); - TH1F * h2 = new TH1F("h2", "h2", 20, -0.5, 19.5); - Events.Project("staNofMuMatches", "zMuStaDau1NofMuMatches", cut_zMuSta + "zMuStaDau1dxyFromBS==-1" ); - Events.Project("h2", "zMuStaDau2NofMuMatches", cut_zMuSta + "zMuStaDau2dxyFromBS==-1" ); - staNofMuMatches->Add(h2); - staNofMuMatches->Write(); - delete staNofMuMatches; - delete h2; - - TH2F * MuChambersVsMuMatches= new TH2F("MuChambersVsMuMatches", "MuChambersVsMuMatches", 21, -0.5, 20.5, 21, -0.5, 20.5); - TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events.Project("MuChambersVsMuMatches", "zMuStaDau1NofMuChambers:zMuStaDau1NofMuMatches", cut_zMuSta); - Events.Project("hh2", "zMuStaDau2NofMuChambers:zMuStaDau2NofMuMatches", cut_zMuSta); - MuChambersVsMuMatches->Add(hh2); - MuChambersVsMuMatches->SetDrawOption("Box"); - MuChambersVsMuMatches->Write(); - delete MuChambersVsMuMatches; - delete hh2; - output_file->cd("/"); - - // isolations... - TDirectory * dir = output_file->mkdir("IsoPlots"); - dir->cd(); - - - TH1F * TrkIsoPt20= new TH1F("TrkIsoPt20", "TrkIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt20", "zGoldenDau1TrkIso" , "zGoldenDau2Pt>20"); - Events.Project("h2", "zGoldenDau2TrkIso", "zGoldenDau2Pt>20" ); - TrkIsoPt20->Add(h2); - TrkIsoPt20->Write(); - delete TrkIsoPt20; - delete h2; - - TH1F * EcalIsoPt20 = new TH1F("EcalIsoPt20", "EcalIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt20", "zGoldenDau1EcalIso" , "zGoldenDau1Pt>20"); - Events.Project("h2", "zGoldenDau2EcalIso", "zGoldenDau2Pt>20" ); - EcalIsoPt20->Add(h2); - EcalIsoPt20->Write(); - delete EcalIsoPt20; - delete h2; - - TH1F * HcalIsoPt20 = new TH1F("HcalIsoPt20", "HcalIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt20", "zGoldenDau1HcalIso" , "zGoldenDau1Pt>20" ); - Events.Project("h2", "zGoldenDau2HcalIso" , "zGoldenDau2Pt>20"); - HcalIsoPt20->Add(h2); - HcalIsoPt20->Write(); - delete HcalIsoPt20; - delete h2; - - TH1F * TrkIsoPt15= new TH1F("TrkIsoPt15", "TrkIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt15", "zGoldenDau1TrkIso" , "zGoldenDau1Pt>20"); - Events.Project("h2", "zGoldenDau2TrkIso", "zGoldenDau2Pt>15" ); - TrkIsoPt15->Add(h2); - TrkIsoPt15->Write(); - delete TrkIsoPt15; - delete h2; - - TH1F * EcalIsoPt15 = new TH1F("EcalIsoPt15", "EcalIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt15", "zGoldenDau1EcalIso" , "zGoldenDau1Pt>20"); - Events.Project("h2", "zGoldenDau2EcalIso", "zGoldenDau2Pt>15" ); - EcalIsoPt15->Add(h2); - - EcalIsoPt15->Write(); - delete EcalIsoPt15; - delete h2; - - TH1F * HcalIsoPt15 = new TH1F("HcalIsoPt15", "HcalIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt15", "zGoldenDau1HcalIso" , "zGoldenDau1Pt>20" ); - Events.Project("h2", "zGoldenDau2HcalIso" , "zGoldenDau2Pt>15"); - HcalIsoPt15->Add(h2); - - HcalIsoPt15->Write(); - delete HcalIsoPt15; - delete h2; - output_file->cd("/"); - - - - output_file->Close(); - - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/plots31vs35.C b/ElectroWeakAnalysis/ZMuMu/test/macros/plots31vs35.C deleted file mode 100644 index d4fb863413ed4..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/plots31vs35.C +++ /dev/null @@ -1,461 +0,0 @@ -{ - // #include ; - -TChain chain("Events"); // create the chain with tree "T" -chain.Add("NtupleLooseTestNew_oneshot_all_35X_4_1.root"); - chain.Add("NtupleLooseTestNew_oneshot_all_35X_5_1.root"); - chain.Add("NtupleLooseTestNew_oneshot_all_35X_6_1.root"); - chain.Add("NtupleLooseTestNew_oneshot_all_35X_7_1.root"); - chain.Add("NtupleLooseTestNew_oneshot_all_35X_8_1.root"); - chain.Add("NtupleLooseTestNew_oneshot_all_35X_10_1.root"); - chain.Add("NtupleLooseTestNew_oneshot_all_35X_11_1.root"); - chain.Add("NtupleLooseTestNew_oneshot_all_35X_12_1.root"); - chain.Add("NtupleLooseTestNew_oneshot_all_35X_13_1.root"); - - - TFile * output_file = TFile::Open("histo.root", "RECREATE"); - // TFile * output_file = TFile::Open("histo_test.root", "RECREATE"); - - // zGolden plots - TCut cut_zGolden("zGoldenMass>20 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0 && zGoldenMass>60 && zGoldenMass<120 "); - TDirectory * dir = output_file->mkdir("goodZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - // Events->Draw("zGoldenMass"); - chain->Project("zMass", "zGoldenMass", cut_zGolden ); - zMass->Write(); - delete zMass; - // zGolden with MuPt>15 - TCut cut_zGoldenPt15("zGoldenMass>20 && zGoldenDau1Pt> 15 && zGoldenDau2Pt>15 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0"); - dir->cd(); - TH1F * zMassPt15 = new TH1F("zMassPt15", "zMassPt15", 200, 0, 200); - chain->Project("zMassPt15", "zGoldenMass", cut_zGoldenPt15 ); - zMassPt15->Write(); - delete zMassPt15; - - - - output_file->cd("/"); - - TCut cut2_zGolden1HLT("zGoldenMass>20 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0 && ((zGoldenDau1HLTBit==1 && zGoldenDau2HLTBit==0) || (zGoldenDau1HLTBit==0 && zGoldenDau2HLTBit==1))"); - TDirectory * dir = output_file->mkdir("goodZToMuMu1HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - chain->Project("zMass", "zGoldenMass", cut2_zGolden1HLT ); - zMass->Write(); - delete zMass; - //zMass2->Write(); - - output_file->cd("/"); - - - TCut cut2_zGolden2HLT("zGoldenMass>20 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0 && ((zGoldenDau1HLTBit==1 && zGoldenDau2HLTBit==1) )"); - TDirectory * dir = output_file->mkdir("goodZToMuMu2HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - chain->Project("zMass", "zGoldenMass", cut2_zGolden2HLT ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - - // zGoldenOneNotIso plots - TCut cut_zGoldenOneNotIso("zGoldenMass>20 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && ((zGoldenDau1Iso> 3.0 && zGoldenDau2Iso < 3.0 ) || (zGoldenDau1Iso<3.0 && zGoldenDau2Iso > 3.0))"); - TDirectory * dir = output_file->mkdir("oneNonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - chain->Project("zMass", "zGoldenMass", cut_zGoldenOneNotIso ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - -// // zGoldenTwoNotIso plots - TCut cut_zGoldenTwoNotIso("zGoldenMass>20 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && ( zGoldenDau1Iso> 3.0 && zGoldenDau2Iso > 3.0 )"); - TDirectory * dir = output_file->mkdir("twoNonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - chain->Project("zMass","zGoldenMass", cut_zGoldenTwoNotIso ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - // zGoldenNotIso plots - TCut cut_zGoldenNotIso("zGoldenMass>20 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && ( zGoldenDau1Iso> 3.0 || zGoldenDau2Iso > 3.0 )"); - TDirectory * dir = output_file->mkdir("nonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - chain->Project("zMass", "zGoldenMass", cut_zGoldenNotIso ); - zMass->Write() ; - delete zMass; - output_file->cd("/"); - - // zGoldenSameCharge plots........ - TCut cut_zSameCharge("zSameChargeMass>20 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && ( zSameChargeDau1Iso < 3.0 && zSameChargeDau2Iso < 3.0 )"); - TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargePlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - chain->Project("zMass", "zSameChargeMass", cut_zSameCharge ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - // zGoldenSameChargeNotIso plots........ - TCut cut_zSameChargeNotIso("zSameChargeMass>20 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && ( zSameChargeDau1Iso > 3.0 || zSameChargeDau2Iso > 3.0 )"); - TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargeNotIsoPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - chain->Project("zMass", "zSameChargeMass", cut_zSameChargeNotIso ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - -// zMuTrk plots - TCut cut_zMuTrk("zMuTrkMass>20 && zMuTrkDau1Pt> 20 && zMuTrkDau2Pt>20 && zMuTrkDau1Iso< 3.0 && zMuTrkDau2Iso < 3.0"); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneTrackPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - chain->Project("zMass", "zMuTrkMass", cut_zMuTrk ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - - // zMuSta plots - TCut cut_zMuSta("zMuStaMass>20 && zMuStaDau1Pt> 20 && zMuStaDau2Pt>20 && zMuStaDau1Iso< 3.0 && zMuStaDau2Iso < 3.0"); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneStandAloneMuonPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - chain->Project("zMass", "zMuStaMass", cut_zMuSta ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - -// zMuSta plots - TCut cut_zMuMuSta("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0"); - TDirectory * dir = output_file->mkdir("zmumuSaMassHistogram"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - chain->Project("zMass", "zGoldenMassSa", cut_zMuMuSta ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - - TDirectory * dir = output_file->mkdir("zPlots"); - dir->cd(); - TH1F * zGoldenPt = new TH1F("zGoldenPt", "zGoldenPt", 200, 0, 200); - chain->Project("zGoldenPt", "zGoldenPt", cut_zGolden ); - zGoldenPt->Write(); - delete zGoldenPt; - - - TH1F * zGoldenY = new TH1F("zGoldenY", "zGoldenY", 200, -5, 5); - chain->Project("zGoldenY", "zGoldenY", cut_zGolden ); - zGoldenY->Write(); - delete zGoldenY; - - output_file->cd("/"); - - - - TDirectory * dir = output_file->mkdir("MuPlots"); - dir->cd(); - - - TH1F * muNotTriggeredEta = new TH1F("muNotTriggeredEta", "muNotTriggeredEta", 240, -6, 6.); - TH1F * h2 = new TH1F("h2", "h2", 240, -6, 6.); - - chain->Project("muNotTriggeredEta","zGoldenDau1Eta", "zGoldenDau1HLTBit==0"); - chain->Project("h2","zGoldenDau2Eta", "zGoldenDau2HLTBit==0"); - - muNotTriggeredEta->Add(h2); - muNotTriggeredEta->Write(); - delete muNotTriggeredEta; - delete h2; - - TH1F * zGoldenDauHighPt = new TH1F("zGoldenDauHighPt", "zGoldenDauHighPt", 200, 0, 200); - chain->Project("zGoldenDauHighPt", "max(zGoldenDau1Pt, zGoldenDau2Pt)", cut_zGolden ); - zGoldenDauHighPt->Write(); - delete zGoldenDauHighPt; - - TH1F * zGoldenDauLowPt = new TH1F("zGoldenDauLowPt", "zGoldenDauLowPt", 200, 0, 200); - chain->Project("zGoldenDauLowPt", "min(zGoldenDau1Pt, zGoldenDau2Pt)", cut_zGolden ); - zGoldenDauLowPt->Write(); - delete zGoldenDauLowPt; - - //(mu1.phi -mu2.phi) - TH1F * deltaPhi = new TH1F("deltaPhi", "deltaPhi", 120, 0, 6.); - TH1F * h2 = new TH1F("h2", "h2", 120, 0, 6. ); - TH1F * h3 = new TH1F("h3", "h3", 120, 0, 6. ); - - /* result = phi1 - phi2; -040 while (result > M_PI) result -= 2*M_PI; -041 while (result <= -M_PI) result += 2*M_PI; -042 return result; - */ - - chain->Project("deltaPhi", "abs(zGoldenDau1Phi - zGoldenDau2Phi)", "-TMath::Pi() < (zGoldenDau1Phi - zGoldenDau2Phi) < TMath::Pi()" , "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + cut_zGolden); - chain->Project("h2", "abs(zGoldenDau1Phi - zGoldenDau2Phi - 2 * TMath::Pi())", "(zGoldenDau1Phi - zGoldenDau2Phi) > TMath::Pi()" , "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + + cut_zGolden); - chain->Project("h3", "abs(zGoldenDau1Phi - zGoldenDau2Phi + 2 * TMath::Pi())", "(zGoldenDau1Phi - zGoldenDau2Phi) <= -TMath::Pi()", "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + cut_zGolden ); - - deltaPhi->Add(h2, h3); - deltaPhi->Write(); - delete deltaPhi;; - delete h2; - delete h3; - - - - // mu1.eta -mu2.eta - TH1F * deltaEta = new TH1F("deltaEta", "deltaEta", 120, 0, 6.); - chain->Project("deltaEta", "abs(zGoldenDau1Eta - zGoldenDau2Eta)", cut_zGolden ); - deltaEta->Write(); - delete deltaEta; - - TH1F * dua1Phi = new TH1F("dau1Phi", "dau1Phi", 120, -6, 6.); - chain->Project("dau1Phi", "zGoldenDau1Phi" , cut_zGolden); - dau1Phi->Write(); - delete dau1Phi; - - TH1F * dua2Phi = new TH1F("dau2Phi", "dau2Phi", 120, -6, 6.); - chain->Project("dau2Phi", "zGoldenDau2Phi" , cut_zGolden); - dau2Phi->Write(); - delete dau2Phi; - - TH1F * dau1Eta = new TH1F("dua1Eta", "dau1Eta", 120, -6, 6.); - chain->Project("dau1Eta", "zGoldenDau1Eta", cut_zGolden ); - dau1Eta->Write(); - delete dau1Eta; - - TH1F * dau2Eta = new TH1F("dua2Eta", "dau2Eta", 120, -6, 6.); - chain->Project("dau2Eta", "zGoldenDau2Eta" , cut_zGolden); - dau2Eta->Write(); - delete dau2Eta; - - // quality variables - // caveat: I'm requiring isolations - TH1F * dau1Chi2 = new TH1F("dua1Chi2", "dau1Chi2", 1000, 0, 100); - chain->Project("dua1Chi2", "zGoldenDau1Chi2", cut_zGolden ); - dau1Chi2->Write(); - delete dau1Chi2; - - TH1F * dau2Chi2 = new TH1F("dau2Chi2", "dau2Chi2", 1000, 0, 100); - chain->Project("dau2Chi2", "zGoldenDau2Chi2", cut_zGolden ); - dau2Chi2->Write(); - delete dau2Chi2; - - - TH1F * dau1Dxy = new TH1F("dua1Dxy", "dau1Dxy", 500, -5, 5); - chain->Project("dua1Dxy", "zGoldenDau1dxyFromBS", cut_zGolden ); - dau1Dxy->Write(); - delete dau1Dxy; - - TH1F * dau2Dxy = new TH1F("dua2Dxy", "dau2Dxy", 500, -5, 5); - chain->Project("dua2Dxy", "zGoldenDau2dxyFromBS", cut_zGolden ); - dau2Dxy->Write(); - delete dau2Dxy; - - - TH1F * dau1Dz= new TH1F("dua1Dz", "dau1Dz", 500, 0, 20); - chain->Project("dua1Dz", "zGoldenDau1dzFromBS", cut_zGolden ); - dau1Dz->Write(); - delete dau1Dz; - - TH1F * dau2Dz = new TH1F("dua2Dz", "dau2Dz", 500, 0, 20); - chain->Project("dua2Dz", "zGoldenDau2dzFromBS", cut_zGolden); - dau2Dz->Write(); - delete dau2Dz; - - - TH1F * dau1NofHit = new TH1F("dua1NofHit", "dau1NofHit", 100, -0.5, 99.5); - chain->Project("dua1NofHit", "zGoldenDau1NofHit", cut_zGolden ); - dau1NofHit->Write(); - delete dau1NofHit; - - TH1F * dau2NofHit = new TH1F("dua2NofHit", "dau2NofHit", 100, -0.5, 99.5); - chain->Project("dua2NofHit", "zGoldenDau2NofHit", cut_zGolden ); - dau2NofHit->Write(); - delete dau2NofHit; - - - TH1F * dau1NofMuCh = new TH1F("dua1NofMuCh", "dau1NofMuCh", 20, -0.5, 19.5); - chain->Project("dua1NofMuCh", "zGoldenDau1NofMuChambers", cut_zGolden ); - dau1NofMuCh->Write(); - delete dau1NofMuCh; - - TH1F * dau2NofMuCh = new TH1F("dua2NofMuCh", "dau2NofMuCh", 20, -0.5, 19.5); - chain->Project("dua2NofMuCh", "zGoldenDau2NofMuChambers", cut_zGolden ); - dau2NofMuCh->Write(); - delete dau2NofMuCh; - - - TH1F * dau1NofMuMatches = new TH1F("dua1NofMuMatches", "dau1NofMuMatches", 20, -0.5, 19.5); - chain->Project("dua1NofMuMatches", "zGoldenDau1NofMuMatches", cut_zGolden ); - dau1NofMuMatches->Write(); - delete dau1NofMuMatches; - - TH1F * dau2NofMuMatches = new TH1F("dua2NofMuMatches", "dau2NofMuMatches", 20, -0.5, 19.5); - chain->Project("dua2NofMuMatches", "zGoldenDau2NofMuMatches", cut_zGolden ); - dau2NofMuMatches->Write(); - delete dau2NofMuMatches; - - TH1F * dau1EmEnergy = new TH1F("dua1EmEnergy", "dau1EmEnergy", 200, -0.1, 19.9); - chain->Project("dua1EmEnergy", "zGoldenDau1MuEnergyEm", cut_zGolden ); - dau1EmEnergy->Write(); - delete dau1EmEnergy; - - TH1F * dau2EmEnergy = new TH1F("dua2EmEnergy", "dau2EmEnergy", 200, -0.1, 19.9); - chain->Project("dua2EmEnergy", "zGoldenDau2MuEnergyEm", cut_zGolden ); - dau2EmEnergy->Write(); - delete dau2EmEnergy; - - TH1F * dau1HadEnergy = new TH1F("dua1HadEnergy", "dau1HadEnergy", 200, -0.1, 19.9); - chain->Project("dua1HadEnergy", "zGoldenDau1MuEnergyHad", cut_zGolden ); - dau1HadEnergy->Write(); - delete dau1HadEnergy; - - TH1F * dau2HadEnergy = new TH1F("dua2HadEnergy", "dau2HadEnergy", 200, -0.1, 19.9); - chain->Project("dua2HadEnergy", "zGoldenDau2MuEnergyHad", cut_zGolden ); - dau2HadEnergy->Write(); - delete dau2HadEnergy; - - - - - TH2F * MuChambersVsMuMatches = new TH2F("MuChambersVsMuMatches", "MuChambersVsMuMatches", 21, -0.5, 20.5, 21, -0.5, 20.5); - TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - chain->Project("MuChambersVsMuMatches", "zGoldenDau1NofMuChambers:zGoldenDau1NofMuMatches", cut_zGolden); - chain->Project("hh2", "zGoldenDau2NofMuChambers:zGoldenDau2NofMuMatches", cut_zGolden); - - MuChambersVsMuMatches->Add(hh2); - MuChambersVsMuMatches->Write(); - MuChambersVsMuMatches->SetDrawOption("Box"); - // MuChambersVsMuMatches->Draw("BOX"); - delete MuChambersVsMuMatches; - delete hh2; - output_file->cd("/"); - - TDirectory * dir = output_file->mkdir("TrkPlots"); - dir->cd(); - - - - TH1F * nofHitTrk = new TH1F("nofHitTrk", "nofHitTrk", 100, -0.5, 99.5); - chain->Project("nofHitTrk", "zMuTrkDau2NofHitTk", cut_zMuTrk ); - nofHitTrk->Write(); - delete nofHitTrk; - - - TH1F * trkChi2 = new TH1F("trkChi2", "trkChi2", 100, -0.5, 99.5); - chain->Project("trkChi2", "zMuTrkDau2Chi2", cut_zMuTrk ); - trkChi2->Write(); - delete trkChi2; - - - output_file->cd("/"); - - - - TDirectory * dir = output_file->mkdir("StaPlots"); - dir->cd(); - - // sta as zDaudxyFromBS=-1 by construction.... - - //TH1F * staNofMuCh = new TH1F("staNofMuCh", "staNofMuCh", 20, -0.5, 19.5); - // TH1F * h2 = new TH1F("h2", "h2", 20, -0.5, 19.5); - // chain->Project("staNofMuCh", "zMuStaDau1NofMuChambers", cut_zMuSta + "zMuStaDau1dxyFromBS==-1" ); - //chain->Project("h2", "zMuStaDau2NofMuChambers", cut_zMuSta + "zMuStaDau2dxyFromBS==-1" ); - //staNofMuCh->Add(h2); - //staNofMuCh->Write(); - //delete staNofMuCh; - //delete h2; - - // TH1F * staNofMuMatches = new TH1F("staNofMuMatches", "staNofMuMatches", 20, -0.5, 19.5); - //TH1F * h2 = new TH1F("h2", "h2", 20, -0.5, 19.5); - //chain->Project("staNofMuMatches", "zMuStaDau1NofMuMatches", cut_zMuSta + "zMuStaDau1dxyFromBS==-1" ); - //chain->Project("h2", "zMuStaDau2NofMuMatches", cut_zMuSta + "zMuStaDau2dxyFromBS==-1" ); - //staNofMuMatches->Add(h2); - //staNofMuMatches->Write(); - //delete staNofMuMatches; - //delete h2; - - // TH2F * MuChambersVsMuMatches= new TH2F("MuChambersVsMuMatches", "MuChambersVsMuMatches", 21, -0.5, 20.5, 21, -0.5, 20.5); - ///TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - //chain->Project("MuChambersVsMuMatches", "zMuStaDau1NofMuChambers:zMuStaDau1NofMuMatches", cut_zMuSta); - //chain->Project("hh2", "zMuStaDau2NofMuChambers:zMuStaDau2NofMuMatches", cut_zMuSta); - ///MuChambersVsMuMatches->Add(hh2); - ///MuChambersVsMuMatches->SetDrawOption("Box"); - ///MuChambersVsMuMatches->Write(); - ///delete MuChambersVsMuMatches; - ///delete hh2; - ///output_file->cd("/"); - - // isolations... - TDirectory * dir = output_file->mkdir("IsoPlots"); - dir->cd(); - - - TH1F * TrkIsoPt20= new TH1F("TrkIsoPt20", "TrkIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - chain->Project("TkIsoPt20", "zGoldenDau1TrkIso" , "zGoldenDau2Pt>20"); - chain->Project("h2", "zGoldenDau2TrkIso", "zGoldenDau2Pt>20" ); - TrkIsoPt20->Add(h2); - TrkIsoPt20->Write(); - delete TrkIsoPt20; - delete h2; - - TH1F * EcalIsoPt20 = new TH1F("EcalIsoPt20", "EcalIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - chain->Project("TkIsoPt20", "zGoldenDau1EcalIso" , "zGoldenDau1Pt>20"); - chain->Project("h2", "zGoldenDau2EcalIso", "zGoldenDau2Pt>20" ); - EcalIsoPt20->Add(h2); - EcalIsoPt20->Write(); - delete EcalIsoPt20; - delete h2; - - TH1F * HcalIsoPt20 = new TH1F("HcalIsoPt20", "HcalIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - chain->Project("TkIsoPt20", "zGoldenDau1HcalIso" , "zGoldenDau1Pt>20" ); - chain->Project("h2", "zGoldenDau2HcalIso" , "zGoldenDau2Pt>20"); - HcalIsoPt20->Add(h2); - HcalIsoPt20->Write(); - delete HcalIsoPt20; - delete h2; - - TH1F * TrkIsoPt15= new TH1F("TrkIsoPt15", "TrkIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - chain->Project("TkIsoPt15", "zGoldenDau1TrkIso" , "zGoldenDau1Pt>20"); - chain->Project("h2", "zGoldenDau2TrkIso", "zGoldenDau2Pt>15" ); - TrkIsoPt15->Add(h2); - TrkIsoPt15->Write(); - delete TrkIsoPt15; - delete h2; - - TH1F * EcalIsoPt15 = new TH1F("EcalIsoPt15", "EcalIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - chain->Project("TkIsoPt15", "zGoldenDau1EcalIso" , "zGoldenDau1Pt>20"); - chain->Project("h2", "zGoldenDau2EcalIso", "zGoldenDau2Pt>15" ); - EcalIsoPt15->Add(h2); - - EcalIsoPt15->Write(); - delete EcalIsoPt15; - delete h2; - - TH1F * HcalIsoPt15 = new TH1F("HcalIsoPt15", "HcalIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - chain->Project("TkIsoPt15", "zGoldenDau1HcalIso" , "zGoldenDau1Pt>20" ); - chain->Project("h2", "zGoldenDau2HcalIso" , "zGoldenDau2Pt>15"); - HcalIsoPt15->Add(h2); - - HcalIsoPt15->Write(); - delete HcalIsoPt15; - delete h2; - output_file->cd("/"); - - - - output_file->Close(); - - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/plotsAfterCuts.C b/ElectroWeakAnalysis/ZMuMu/test/macros/plotsAfterCuts.C deleted file mode 100644 index 2752d16f40f99..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/plotsAfterCuts.C +++ /dev/null @@ -1,529 +0,0 @@ -#include "TFile.h" -#include "TH1F.h" -#include "TTree.h" -#include "TAxis.h" -#include "TCanvas.h" -//#if !defined(__CINT__) && !defined(__MAKECINT__) -#include -#include -//#endif - -void setGraphics(TH1F *histo){ - - histo->SetFillColor(kAzure+7); - //histo->SetLineWidth(2); - histo->SetLineColor(kBlue+1); -} - - - - -void plotsAfterCuts(){ - - gStyle->SetOptStat(); - gROOT->SetStyle("Plain"); - using namespace std; - - // #include ; - - // TFile *file = TFile::Open("rfio:/castor/cern.ch/user/d/degrutto/incl15WithBsPv/NtupleLoose_test_inclu15_1_2.root"); - // TFile *file = TFile::Open("../NutpleLooseTestNew_oneshot_all_10_1.root"); -//TFile *file = TFile::Open("rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/NtupleLoose_test.root"); -// TTree * Events = dynamic_cast< TTree *> (file->Get("Events")); - - TChain Events("Events"); - // one need 130 events... each file has 1000 ev - Events.Add("zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_1_None.root", 65); - Events.Add("zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_2_None.root", 65); - - - - TFile * output_file = TFile::Open("histoZmm.root", "RECREATE"); - // TFile * output_file = TFile::Open("histo_test.root", "RECREATE"); - - // zGolden plots - TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - // Events.Draw("zGoldenMass"); - Events.Project("zMass", "zGoldenMass", cut_zGolden ); - cout<<"Number of zGoldenAA : "<GetEntries()<Write(); - delete zMass; - - - TCut cut_zGoldenPt15("zGoldenMass>20 && zGoldenDau1Pt> 15 && zGoldenDau2Pt>15 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1)"); - dir->cd(); - - TH1F * zMassPt15 = new TH1F("zMassPt15", "zMassPt15", 200, 0, 200); - Events.Project("zMassPt15", "zGoldenMass", cut_zGoldenPt15 ); - setGraphics(zMassPt15); - cout<<"Number of zGoldenPt15 : "<GetEntries()<Write(); - delete zMassPt15; - - - - output_file->cd("/"); - - TCut cut2_zGolden1HLT("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && ( zGoldenDau1HLTBit ==0 || zGoldenDau2HLTBit ==0)"); - TDirectory * dir = output_file->mkdir("goodZToMuMu1HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGolden1HLT ); - cout<<"Number of zGolden1HLT : "<GetEntries()<Write(); - delete zMass; - //zMass2->Write(); - - output_file->cd("/"); - - - output_file->cd("/"); - - TCut cut2_zGoldenAB1HLT("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0 && ( abs(zGoldenDau1Eta)<2.1 && 2.1=10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("goodZToMuMuAB1HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGolden1HLT ); - cout<<"Number of zGoldenAB1HLT : "<GetEntries()<Write(); - delete zMass; - //zMass2->Write(); - - output_file->cd("/"); - - - TCut cut2_zGolden2HLT("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && ( zGoldenDau1HLTBit ==1 && zGoldenDau2HLTBit ==1)"); - - TDirectory * dir = output_file->mkdir("goodZToMuMu2HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGolden2HLT ); - zMass->Write(); - cout<<"Number of zGolden2HLT : "<GetEntries()<cd("/"); - - - // zGoldenOneNotIso plots - TCut cut_zGoldenOneNotIso("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && ( (zGoldenDau1Iso> 3.0 && zGoldenDau2Iso < 3.0) || (zGoldenDau2Iso> 3.0 && zGoldenDau1Iso < 3.0)) && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("oneNonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut_zGoldenOneNotIso ); - zMass->Write(); - cout<<"Number of zGoldenOneNotIso : "<GetEntries()<cd("/"); - -// // zGoldenTwoNotIso plots - TCut cut_zGoldenTwoNotIso("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && (zGoldenDau1Iso> 3.0 && zGoldenDau2Iso > 3.0) && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("twoNonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass","zGoldenMass", cut_zGoldenTwoNotIso ); - zMass->Write(); - cout<<"Number of zGoldenTwoNotIso : "<GetEntries()<cd("/"); - - // zGoldenNotIso plots - TCut cut_zGoldenNotIso("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && (zGoldenDau1Iso> 3.0 || zGoldenDau2Iso > 3.0) && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("nonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut_zGoldenNotIso ); - zMass->Write() ; - cout<<"Number of zGoldenNotIso : "<GetEntries()<cd("/"); - - // zGoldenSameCharge plots........ - TCut cut_zSameCharge("zSameChargeMass>60 && zSameChargeMass<120 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && zSameChargeDau1Iso< 3.0 && zSameChargeDau2Iso < 3.0 && abs(zSameChargeDau1Eta)<2.1 && abs(zSameChargeDau2Eta)<2.1 && zSameChargeDau1Chi2<10 && zSameChargeDau2Chi2<10 && abs(zSameChargeDau1dxyFromBS)<0.2 && abs(zSameChargeDau2dxyFromBS)<0.2 &&(zSameChargeDau1NofStripHits + zSameChargeDau1NofPixelHits)>=10 && (zSameChargeDau2NofStripHits + zSameChargeDau2NofPixelHits)>=10 && zSameChargeDau1NofMuonHits>0 && zSameChargeDau2NofMuonHits>0 && (zSameChargeDau1HLTBit==1 || zSameChargeDau2HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargePlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zSameChargeMass", cut_zSameCharge ); - zMass->Write(); - cout<<"Number of zGoldenSameCharge : "<GetEntries()<cd("/"); - - // zGoldenSameChargeNotIso plots........ - TCut cut_zSameChargeNotIso("zSameChargeMass>60 && zSameChargeMass<120 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && ( zSameChargeDau1Iso> 3.0 || zSameChargeDau2Iso > 3.0) && abs(zSameChargeDau1Eta)<2.1 && abs(zSameChargeDau2Eta)<2.1 && zSameChargeDau1Chi2<10 && zSameChargeDau2Chi2<10 && abs(zSameChargeDau1dxyFromBS)<0.2 && abs(zSameChargeDau2dxyFromBS)<0.2 &&(zSameChargeDau1NofStripHits + zSameChargeDau1NofPixelHits)>=10 && (zSameChargeDau2NofStripHits + zSameChargeDau2NofPixelHits)>=10 && zSameChargeDau1NofMuonHits>0 && zSameChargeDau2NofMuonHits>0 && (zSameChargeDau1HLTBit==1 || zSameChargeDau2HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargeNotIsoPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zSameChargeMass", cut_zSameChargeNotIso ); - zMass->Write(); - cout<<"Number of zGoldenSameChargeNotIso : "<GetEntries()<cd("/"); - - -// zMuTrk plots - TCut cut_zMuTrk("zMuTrkMass>60 && zMuTrkMass<120 && zMuTrkDau1Pt> 20 && zMuTrkDau2Pt>20 && zMuTrkDau1Iso< 3.0 && zMuTrkDau2Iso < 3.0 && abs(zMuTrkDau1Eta)<2.1 && abs(zMuTrkDau2Eta)<2.1 && zMuTrkDau1Chi2<10 && zMuTrkDau2Chi2<10 && abs(zMuTrkDau1dxyFromBS)<0.2 && abs(zMuTrkDau2dxyFromBS)<0.2 &&(zMuTrkDau1TrkNofStripHits + zMuTrkDau1TrkNofPixelHits)>=10 && (zMuTrkDau2TrkNofStripHits + zMuTrkDau2TrkNofPixelHits)>=10 && zMuTrkDau1NofMuonHits>0 && zMuTrkDau2NofMuonHits>0 && (zMuTrkDau1HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneTrackPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuTrkMass", cut_zMuTrk ); - zMass->Write(); - cout<<"Number of zMuTrk : "<GetEntries()<cd("/"); - -// zMuTrkMu plots - TCut cut_zMuTrkMu("zMuTrkMuMass>60 && zMuTrkMuMass<120 && zMuTrkMuDau1Pt> 20 && zMuTrkMuDau2Pt>20 && zMuTrkMuDau1Iso< 3.0 && zMuTrkMuDau2Iso < 3.0 && abs(zMuTrkMuDau1Eta)<2.1 && abs(zMuTrkMuDau2Eta)<2.1 && zMuTrkMuDau1Chi2<10 && zMuTrkMuDau2Chi2<10 && abs(zMuTrkMuDau1dxyFromBS)<0.2 && abs(zMuTrkMuDau2dxyFromBS)<0.2 &&(zMuTrkMuDau1NofStripHits + zMuTrkMuDau1NofPixelHits)>=10 && (zMuTrkMuDau2NofStripHits + zMuTrkMuDau2NofPixelHits)>=10 && zMuTrkMuDau1NofMuonHits>0 && zMuTrkMuDau2NofMuonHits>0 && (zMuTrkMuDau1HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneTrackerMuonPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuTrkMuMass", cut_zMuTrkMu ); - zMass->Write(); - cout<<"Number of zMuTrkMu : "<GetEntries()<cd("/"); - - - - // zMuSta plots - TCut cut_zMuSta("zMuStaMass>60 && zMuStaMass<120 && zMuStaDau1Pt> 20 && zMuStaDau2Pt>20 && zMuStaDau1Iso< 3.0 && zMuStaDau2Iso < 3.0 && abs(zMuStaDau1Eta)<2.1 && abs(zMuStaDau2Eta)<2.1 && zMuStaDau1Chi2<10 && zMuStaDau2Chi2<10 && abs(zMuStaDau1dxyFromBS)<0.2 && abs(zMuStaDau2dxyFromBS)<0.2 &&(zMuStaDau1NofStripHits + zMuStaDau1NofPixelHits)>=10 && (zMuStaDau2NofStripHits + zMuStaDau2NofPixelHits)>=10 && zMuStaDau1NofMuonHits>0 && zMuStaDau2NofMuonHits>0 && (zMuStaDau1HLTBit==1 ) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneStandAloneMuonPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuStaMass", cut_zMuSta ); - zMass->Write(); - cout<<"Number of zMuSta : "<GetEntries()<cd("/"); - -// zMuSta plots - TCut cut_zMuMuSta("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso< 3.0 && zGoldenDau2Iso < 3.0 && zGoldenDau1Eta<2.1 && zGoldenDau2Eta<2.1 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && zGoldenDau1dxyFromBS<0.02 && zGoldenDau2dxyFromBS<0.02"); - TDirectory * dir = output_file->mkdir("zmumuSaMassHistogram"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMassSa", cut_zMuMuSta ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - - TDirectory * dir = output_file->mkdir("zPlots"); - dir->cd(); - TH1F * zGoldenPt = new TH1F("zGoldenPt", "zGoldenPt", 200, 0, 200); - Events.Project("zGoldenPt", "zGoldenPt", cut_zGolden ); - zGoldenPt->Write(); - delete zGoldenPt; - - - TH1F * zGoldenY = new TH1F("zGoldenY", "zGoldenY", 200, -5, 5); - Events.Project("zGoldenY", "zGoldenY", cut_zGolden ); - zGoldenY->Write(); - delete zGoldenY; - - output_file->cd("/"); - - - - TDirectory * dir = output_file->mkdir("MuPlots"); - dir->cd(); - - - TH1F * muNotTriggeredEta = new TH1F("muNotTriggeredEta", "muNotTriggeredEta", 240, -6, 6.); - TH1F * h2 = new TH1F("h2", "h2", 240, -6, 6.); - - Events.Project("muNotTriggeredEta","zGoldenDau1Eta", "zGoldenDau1HLTBit==0"); - Events.Project("h2","zGoldenDau2Eta", "zGoldenDau2HLTBit==0"); - - muNotTriggeredEta->Add(h2); - muNotTriggeredEta->Write(); - delete muNotTriggeredEta; - delete h2; - - TH1F * zGoldenDauHighPt = new TH1F("zGoldenDauHighPt", "zGoldenDauHighPt", 200, 0, 200); - Events.Project("zGoldenDauHighPt", "max(zGoldenDau1Pt, zGoldenDau2Pt)", cut_zGolden ); - zGoldenDauHighPt->Write(); - delete zGoldenDauHighPt; - - TH1F * zGoldenDauLowPt = new TH1F("zGoldenDauLowPt", "zGoldenDauLowPt", 200, 0, 200); - Events.Project("zGoldenDauLowPt", "min(zGoldenDau1Pt, zGoldenDau2Pt)", cut_zGolden ); - zGoldenDauLowPt->Write(); - delete zGoldenDauLowPt; - - //(mu1.phi -mu2.phi) - TH1F * deltaPhi = new TH1F("deltaPhi", "deltaPhi", 120, 0, 6.); - TH1F * h2 = new TH1F("h2", "h2", 120, 0, 6. ); - TH1F * h3 = new TH1F("h3", "h3", 120, 0, 6. ); - - /* result = phi1 - phi2; -040 while (result > M_PI) result -= 2*M_PI; -041 while (result <= -M_PI) result += 2*M_PI; -042 return result; - */ - - Events.Project("deltaPhi", "abs(zGoldenDau1Phi - zGoldenDau2Phi)", "-TMath::Pi() < (zGoldenDau1Phi - zGoldenDau2Phi) < TMath::Pi()" , "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + cut_zGolden); - Events.Project("h2", "abs(zGoldenDau1Phi - zGoldenDau2Phi - 2 * TMath::Pi())", "(zGoldenDau1Phi - zGoldenDau2Phi) > TMath::Pi()" , "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + + cut_zGolden); - Events.Project("h3", "abs(zGoldenDau1Phi - zGoldenDau2Phi + 2 * TMath::Pi())", "(zGoldenDau1Phi - zGoldenDau2Phi) <= -TMath::Pi()", "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + cut_zGolden ); - - deltaPhi->Add(h2, h3); - deltaPhi->Write(); - delete deltaPhi;; - delete h2; - delete h3; - - - - // mu1.eta -mu2.eta - TH1F * deltaEta = new TH1F("deltaEta", "deltaEta", 120, 0, 6.); - Events.Project("deltaEta", "abs(zGoldenDau1Eta - zGoldenDau2Eta)", cut_zGolden ); - deltaEta->Write(); - delete deltaEta; - - TH1F * dua1Phi = new TH1F("dau1Phi", "dau1Phi", 120, -6, 6.); - Events.Project("dau1Phi", "zGoldenDau1Phi" , cut_zGolden); - dau1Phi->Write(); - delete dau1Phi; - - TH1F * dua2Phi = new TH1F("dau2Phi", "dau2Phi", 120, -6, 6.); - Events.Project("dau2Phi", "zGoldenDau2Phi" , cut_zGolden); - dau2Phi->Write(); - delete dau2Phi; - - TH1F * dau1Eta = new TH1F("dua1Eta", "dau1Eta", 120, -6, 6.); - Events.Project("dau1Eta", "zGoldenDau1Eta", cut_zGolden ); - dau1Eta->Write(); - delete dau1Eta; - - TH1F * dau2Eta = new TH1F("dua2Eta", "dau2Eta", 120, -6, 6.); - Events.Project("dau2Eta", "zGoldenDau2Eta" , cut_zGolden); - dau2Eta->Write(); - delete dau2Eta; - - // quality variables - // caveat: I'm requiring isolations - TH1F * dau1Chi2 = new TH1F("dua1Chi2", "dau1Chi2", 1000, 0, 100); - Events.Project("dua1Chi2", "zGoldenDau1Chi2", cut_zGolden ); - dau1Chi2->Write(); - delete dau1Chi2; - - TH1F * dau2Chi2 = new TH1F("dua2Chi2", "dau2Chi2", 1000, 0, 100); - Events.Project("dau2Chi2", "zGoldenDau2Chi2", cut_zGolden ); - dau2Chi2->Write(); - delete dau2Chi2; - - - TH1F * dau1Dxy = new TH1F("dua1Dxy", "dau1Dxy", 500, 0, 5); - Events.Project("dua1Dxy", "zGoldenDau1dxyFromBS", cut_zGolden ); - dau1Dxy->Write(); - delete dau1Dxy; - - TH1F * dau2Dxy = new TH1F("dua2Dxy", "dau2Dxy", 500, 0, 5); - Events.Project("dua2Dxy", "zGoldenDau2dxyFromBS", cut_zGolden ); - dau2Dxy->Write(); - delete dau2Dxy; - - - TH1F * dau1Dz= new TH1F("dua1Dz", "dau1Dz", 500, 0, 20); - Events.Project("dua1Dz", "zGoldenDau1dzFromBS", cut_zGolden ); - dau1Dz->Write(); - delete dau1Dz; - - TH1F * dau2Dz = new TH1F("dua2Dz", "dau2Dz", 500, 0, 20); - Events.Project("dua2Dz", "zGoldenDau2dzFromBS", cut_zGolden); - dau2Dz->Write(); - delete dau2Dz; - - /* - TH1F * dau1NofHit = new TH1F("dua1NofHit", "dau1NofHit", 100, -0.5, 99.5); - Events.Project("dua1NofHit", "zGoldenDau1NofHit", cut_zGolden ); - dau1NofHit->Write(); - delete dau1NofHit; - - TH1F * dau2NofHit = new TH1F("dua2NofHit", "dau2NofHit", 100, -0.5, 99.5); - Events.Project("dua2NofHit", "zGoldenDau2NofHit", cut_zGolden ); - dau2NofHit->Write(); - delete dau2NofHit; - */ - - TH1F * dau1NofMuCh = new TH1F("dua1NofMuCh", "dau1NofMuCh", 20, -0.5, 19.5); - Events.Project("dua1NofMuCh", "zGoldenDau1NofMuChambers", cut_zGolden ); - dau1NofMuCh->Write(); - delete dau1NofMuCh; - - TH1F * dau2NofMuCh = new TH1F("dua2NofMuCh", "dau2NofMuCh", 20, -0.5, 19.5); - Events.Project("dua2NofMuCh", "zGoldenDau2NofMuChambers", cut_zGolden ); - dau2NofMuCh->Write(); - delete dau2NofMuCh; - - - TH1F * dau1NofMuMatches = new TH1F("dua1NofMuMatches", "dau1NofMuMatches", 20, -0.5, 19.5); - Events.Project("dua1NofMuMatches", "zGoldenDau1NofMuMatches", cut_zGolden ); - dau1NofMuMatches->Write(); - delete dau1NofMuMatches; - - TH1F * dau2NofMuMatches = new TH1F("dua2NofMuMatches", "dau2NofMuMatches", 20, -0.5, 19.5); - Events.Project("dua2NofMuMatches", "zGoldenDau2NofMuMatches", cut_zGolden ); - dau2NofMuMatches->Write(); - delete dau2NofMuMatches; - - TH1F * dau1EmEnergy = new TH1F("dua1EmEnergy", "dau1EmEnergy", 200, -0.1, 19.9); - Events.Project("dua1EmEnergy", "zGoldenDau1MuEnergyEm", cut_zGolden ); - dau1EmEnergy->Write(); - delete dau1EmEnergy; - - TH1F * dau2EmEnergy = new TH1F("dua2EmEnergy", "dau2EmEnergy", 200, -0.1, 19.9); - Events.Project("dua2EmEnergy", "zGoldenDau2MuEnergyEm", cut_zGolden ); - dau2EmEnergy->Write(); - delete dau2EmEnergy; - - TH1F * dau1HadEnergy = new TH1F("dua1HadEnergy", "dau1HadEnergy", 200, -0.1, 19.9); - Events.Project("dua1HadEnergy", "zGoldenDau1MuEnergyHad", cut_zGolden ); - dau1HadEnergy->Write(); - delete dau1HadEnergy; - - TH1F * dau2HadEnergy = new TH1F("dua2HadEnergy", "dau2HadEnergy", 200, -0.1, 19.9); - Events.Project("dua2HadEnergy", "zGoldenDau2MuEnergyHad", cut_zGolden ); - dau2HadEnergy->Write(); - delete dau2HadEnergy; - - - - - TH2F * MuChambersVsMuMatches = new TH2F("MuChambersVsMuMatches", "MuChambersVsMuMatches", 21, -0.5, 20.5, 21, -0.5, 20.5); - TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events.Project("MuChambersVsMuMatches", "zGoldenDau1NofMuChambers:zGoldenDau1NofMuMatches", cut_zGolden); - Events.Project("hh2", "zGoldenDau2NofMuChambers:zGoldenDau2NofMuMatches", cut_zGolden); - - MuChambersVsMuMatches->Add(hh2); - MuChambersVsMuMatches->Write(); - MuChambersVsMuMatches->SetDrawOption("Box"); - // MuChambersVsMuMatches->Draw("BOX"); - delete MuChambersVsMuMatches; - delete hh2; - output_file->cd("/"); - - TDirectory * dir = output_file->mkdir("TrkPlots"); - dir->cd(); - - - - /* TH1F * nofHitTrk = new TH1F("nofHitTrk", "nofHitTrk", 100, -0.5, 99.5); - Events.Project("nofHitTrk", "zMuTrkDau2NofHitTk", cut_zMuTrk ); - nofHitTrk->Write(); - delete nofHitTrk; - */ - - TH1F * trkChi2 = new TH1F("trkChi2", "trkChi2", 100, -0.5, 99.5); - Events.Project("trkChi2", "zMuTrkDau2Chi2", cut_zMuTrk ); - trkChi2->Write(); - delete trkChi2; - - - output_file->cd("/"); - - - - TDirectory * dir = output_file->mkdir("StaPlots"); - dir->cd(); - - // sta as zDaudxyFromBS=-1 by construction.... - - TH1F * staNofMuCh = new TH1F("staNofMuCh", "staNofMuCh", 20, -0.5, 19.5); - TH1F * h2 = new TH1F("h2", "h2", 20, -0.5, 19.5); - Events.Project("staNofMuCh", "zMuStaDau1NofMuChambers", cut_zMuSta + "zMuStaDau1dxyFromBS==-1" ); - Events.Project("h2", "zMuStaDau2NofMuChambers", cut_zMuSta + "zMuStaDau2dxyFromBS==-1" ); - staNofMuCh->Add(h2); - staNofMuCh->Write(); - delete staNofMuCh; - delete h2; - - TH1F * staNofMuMatches = new TH1F("staNofMuMatches", "staNofMuMatches", 20, -0.5, 19.5); - TH1F * h2 = new TH1F("h2", "h2", 20, -0.5, 19.5); - Events.Project("staNofMuMatches", "zMuStaDau1NofMuMatches", cut_zMuSta + "zMuStaDau1dxyFromBS==-1" ); - Events.Project("h2", "zMuStaDau2NofMuMatches", cut_zMuSta + "zMuStaDau2dxyFromBS==-1" ); - staNofMuMatches->Add(h2); - staNofMuMatches->Write(); - delete staNofMuMatches; - delete h2; - - TH2F * MuChambersVsMuMatches= new TH2F("MuChambersVsMuMatches", "MuChambersVsMuMatches", 21, -0.5, 20.5, 21, -0.5, 20.5); - TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events.Project("MuChambersVsMuMatches", "zMuStaDau1NofMuChambers:zMuStaDau1NofMuMatches", cut_zMuSta); - Events.Project("hh2", "zMuStaDau2NofMuChambers:zMuStaDau2NofMuMatches", cut_zMuSta); - MuChambersVsMuMatches->Add(hh2); - MuChambersVsMuMatches->SetDrawOption("Box"); - MuChambersVsMuMatches->Write(); - delete MuChambersVsMuMatches; - delete hh2; - output_file->cd("/"); - - // isolations... - TDirectory * dir = output_file->mkdir("IsoPlots"); - dir->cd(); - - - TH1F * TrkIsoPt20= new TH1F("TrkIsoPt20", "TrkIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt20", "zGoldenDau1TrkIso" , "zGoldenDau2Pt>20"); - Events.Project("h2", "zGoldenDau2TrkIso", "zGoldenDau2Pt>20" ); - TrkIsoPt20->Add(h2); - TrkIsoPt20->Write(); - delete TrkIsoPt20; - delete h2; - - TH1F * EcalIsoPt20 = new TH1F("EcalIsoPt20", "EcalIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt20", "zGoldenDau1EcalIso" , "zGoldenDau1Pt>20"); - Events.Project("h2", "zGoldenDau2EcalIso", "zGoldenDau2Pt>20" ); - EcalIsoPt20->Add(h2); - EcalIsoPt20->Write(); - delete EcalIsoPt20; - delete h2; - - TH1F * HcalIsoPt20 = new TH1F("HcalIsoPt20", "HcalIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt20", "zGoldenDau1HcalIso" , "zGoldenDau1Pt>20" ); - Events.Project("h2", "zGoldenDau2HcalIso" , "zGoldenDau2Pt>20"); - HcalIsoPt20->Add(h2); - HcalIsoPt20->Write(); - delete HcalIsoPt20; - delete h2; - - TH1F * TrkIsoPt15= new TH1F("TrkIsoPt15", "TrkIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt15", "zGoldenDau1TrkIso" , "zGoldenDau1Pt>20"); - Events.Project("h2", "zGoldenDau2TrkIso", "zGoldenDau2Pt>15" ); - TrkIsoPt15->Add(h2); - TrkIsoPt15->Write(); - delete TrkIsoPt15; - delete h2; - - TH1F * EcalIsoPt15 = new TH1F("EcalIsoPt15", "EcalIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt15", "zGoldenDau1EcalIso" , "zGoldenDau1Pt>20"); - Events.Project("h2", "zGoldenDau2EcalIso", "zGoldenDau2Pt>15" ); - EcalIsoPt15->Add(h2); - - EcalIsoPt15->Write(); - delete EcalIsoPt15; - delete h2; - - TH1F * HcalIsoPt15 = new TH1F("HcalIsoPt15", "HcalIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt15", "zGoldenDau1HcalIso" , "zGoldenDau1Pt>20" ); - Events.Project("h2", "zGoldenDau2HcalIso" , "zGoldenDau2Pt>15"); - HcalIsoPt15->Add(h2); - - HcalIsoPt15->Write(); - delete HcalIsoPt15; - delete h2; - output_file->cd("/"); - - - - output_file->Close(); - - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/plotsAfterCuts_BothLegs.C b/ElectroWeakAnalysis/ZMuMu/test/macros/plotsAfterCuts_BothLegs.C deleted file mode 100644 index 35c5c6ac42bc7..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/plotsAfterCuts_BothLegs.C +++ /dev/null @@ -1,255 +0,0 @@ -#include "TFile.h" -#include "TH1F.h" -#include "TTree.h" -#include "TAxis.h" -#include "TCanvas.h" -//#if !defined(__CINT__) && !defined(__MAKECINT__) -#include -#include -//#endif - -void setGraphics(TH1F *histo){ - - histo->SetFillColor(kAzure+7); - //histo->SetLineWidth(2); - histo->SetLineColor(kBlue+1); -} - - - - -void plotsAfterCuts_BothLegs(){ - - gStyle->SetOptStat(); - gROOT->SetStyle("Plain"); - using namespace std; - - - TChain Events("Events"); - - // Events.Add("../../NtupleLoose_135_all.root") - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_132440_139790.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_139791-140159_v2.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_140160-140182.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_140183-140399.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_140440-141961.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_142035-142664.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed//NtupleLoose_142665-143179.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_143180-143336.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_143337-144114.root"); - - - TFile * output_file = TFile::Open("histoZmm_2p88_afterCutsBothLegs.root", "RECREATE"); - - - TCut cut_1Iso("((zGoldenDau1Iso03SumPt + zGoldenDau1Iso03EmEt + zGoldenDau1Iso03HadEt)/ zGoldenDau1Pt ) < 0.15"); - TCut cutTk_1Iso("((zMuTrkDau1Iso03SumPt + zMuTrkDau1Iso03EmEt + zMuTrkDau1Iso03HadEt)/ zMuTrkDau1Pt ) < 0.15"); - TCut cutSa_1Iso("((zMuStaDau1Iso03SumPt + zMuStaDau1Iso03EmEt + zMuStaDau1Iso03HadEt)/ zMuStaDau1Pt ) < 0.15"); - - TCut cut_2Iso("((zGoldenDau2Iso03SumPt + zGoldenDau2Iso03EmEt + zGoldenDau2Iso03HadEt)/ zGoldenDau2Pt ) < 0.15"); - TCut cutTk_2Iso("((zMuTrkDau2Iso03SumPt + zMuTrkDau2Iso03EmEt + zMuTrkDau2Iso03HadEt)/ zMuTrkDau2Pt ) < 0.15"); - TCut cutSa_2Iso("((zMuStaDau2Iso03SumPt + zMuStaDau2Iso03EmEt + zMuStaDau2Iso03HadEt)/ zMuStaDau2Pt ) < 0.15"); - - - - - TCut cut_OneNotIso("((((zGoldenDau1Iso03SumPt + zGoldenDau1Iso03EmEt + zGoldenDau1Iso03HadEt)/ zGoldenDau1Pt ) > 0.15) && (((zGoldenDau2Iso03SumPt + zGoldenDau2Iso03EmEt + zGoldenDau2Iso03HadEt)/ zGoldenDau2Pt ) < 0.15)) || ((((zGoldenDau1Iso03SumPt + zGoldenDau1Iso03EmEt + zGoldenDau1Iso03HadEt)/ zGoldenDau1Pt ) < 0.15) && (((zGoldenDau2Iso03SumPt + zGoldenDau2Iso03EmEt + zGoldenDau2Iso03HadEt)/ zGoldenDau2Pt ) > 0.15))"); - -TCut cut_TwoNotIso("(((zGoldenDau1Iso03SumPt + zGoldenDau1Iso03EmEt + zGoldenDau1Iso03HadEt)/ zGoldenDau1Pt ) > 0.15) && ((zGoldenDau2Iso03SumPt + zGoldenDau2Iso03EmEt + zGoldenDau2Iso03HadEt)/ zGoldenDau2Pt ) > 0.15"); - -TCut cut_NotIso("(((zGoldenDau1Iso03SumPt + zGoldenDau1Iso03EmEt + zGoldenDau1Iso03HadEt)/ zGoldenDau1Pt ) > 0.15) || ((zGoldenDau2Iso03SumPt + zGoldenDau2Iso03EmEt + zGoldenDau2Iso03HadEt)/ zGoldenDau2Pt ) > 0.15"); - - -/// cuts common.... - TCut kin_common(" (zGoldenDau1Q * zGoldenDau2Q) ==-1 && zGoldenDau1Pt>20 && zGoldenDau2Pt>20 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ( zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); // - - -TCut dau1TightWP1_notChi2AndTrackerMuon("zGoldenDau1Chi2<10000 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau1NofMuMatches>1"); - -TCut dau2TightWP1_notChi2AndTrackerMuon("zGoldenDau2Chi2<10000 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofPixelHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau2NofMuMatches>1"); - - - - - // zGolden plots -// TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<10000 && zGoldenDau2Chi2<10000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - // Events.Draw("zGoldenMass"); - Events.Project("zMass", "zGoldenMass", kin_common + dau1TightWP1_notChi2AndTrackerMuon + dau2TightWP1_notChi2AndTrackerMuon + cut_1Iso + cut_2Iso); - cout<<"Number of zGoldenAA : "<GetEntries()<Write(); - delete zMass; - - - //TCut cut2_zGolden1HLT("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && ( zGoldenDau1HLTBit ==0 || zGoldenDau2HLTBit ==0)"); - TDirectory * dir = output_file->mkdir("goodZToMuMu1HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", kin_common + dau1TightWP1_notChi2AndTrackerMuon + dau2TightWP1_notChi2AndTrackerMuon + cut_1Iso + cut_2Iso + "zGoldenDau1HLTBit==0 || zGoldenDau2HLTBit==0" ); - cout<<"Number of zGolden1HLT : "<GetEntries()<Write(); - delete zMass; - //zMass2->Write(); - - output_file->cd("/"); - - - - - - output_file->cd("/"); - - // TCut cut2_zGolden2HLT("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && ( zGoldenDau1HLTBit ==1 && zGoldenDau2HLTBit ==1)"); - - TDirectory * dir = output_file->mkdir("goodZToMuMu2HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", kin_common + dau1TightWP1_notChi2AndTrackerMuon + dau2TightWP1_notChi2AndTrackerMuon + cut_1Iso + cut_2Iso + "zGoldenDau1HLTBit==1 && zGoldenDau2HLTBit==1" ); - - zMass->Write(); - cout<<"Number of zGolden2HLT : "<GetEntries()<cd("/"); - - - // zGoldenOneNotIso plots - // TCut cut_zGoldenOneNotIso("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("oneNonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", kin_common + dau1TightWP1_notChi2AndTrackerMuon + dau2TightWP1_notChi2AndTrackerMuon + cut_OneNotIso); - zMass->Write(); - cout<<"Number of zGoldenOneNotIso : "<GetEntries()<cd("/"); - -// // zGoldenTwoNotIso plots -// TCut cut_zGoldenTwoNotIso("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("twoNonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass","zGoldenMass", kin_common + dau1TightWP1_notChi2AndTrackerMuon + dau2TightWP1_notChi2AndTrackerMuon + cut_TwoNotIso); - zMass->Write(); - cout<<"Number of zGoldenTwoNotIso : "<GetEntries()<cd("/"); - - // zGoldenNotIso plots - // TCut cut_zGoldenNotIso("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("nonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", kin_common + dau1TightWP1_notChi2AndTrackerMuon + dau2TightWP1_notChi2AndTrackerMuon + cut_NotIso); - zMass->Write() ; - cout<<"Number of zGoldenNotIso : "<GetEntries()<cd("/"); - - // zGoldenSameCharge plots........ - TCut cut_zSameCharge("zSameChargeMass>60 && zSameChargeMass<120 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && zSameChargeDau1TrkIso< 3.0 && zSameChargeDau1TrkIso < 3.0 && abs(zSameChargeDau1Eta)<2.1 && abs(zSameChargeDau2Eta)<2.1 && zSameChargeDau1Chi2<1000 && zSameChargeDau2Chi2<1000 && abs(zSameChargeDau1dxyFromBS)<0.2 && abs(zSameChargeDau2dxyFromBS)<0.2 &&(zSameChargeDau1NofStripHits + zSameChargeDau1NofPixelHits)>10 && (zSameChargeDau2NofStripHits + zSameChargeDau2NofPixelHits)>10 && zSameChargeDau1NofMuonHits>0 && zSameChargeDau2NofMuonHits>0 && (zSameChargeDau1HLTBit==1 || zSameChargeDau2HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargePlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zSameChargeMass", cut_zSameCharge ); - zMass->Write(); - cout<<"Number of zGoldenSameCharge : "<GetEntries()<cd("/"); - - // zGoldenSameChargeNotIso plots........ - TCut cut_zSameChargeNotIso("zSameChargeMass>60 && zSameChargeMass<120 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && ( zSameChargeDau1TrkIso> 3.0 || zSameChargeDau1TrkIso > 3.0) && abs(zSameChargeDau1Eta)<2.1 && abs(zSameChargeDau2Eta)<2.1 && zSameChargeDau1Chi2<1000 && zSameChargeDau2Chi2<1000 && abs(zSameChargeDau1dxyFromBS)<0.2 && abs(zSameChargeDau2dxyFromBS)<0.2 &&(zSameChargeDau1NofStripHits + zSameChargeDau1NofPixelHits)>10 && (zSameChargeDau2NofStripHits + zSameChargeDau2NofPixelHits)>10 && zSameChargeDau1NofMuonHits>0 && zSameChargeDau2NofMuonHits>0 && (zSameChargeDau1HLTBit==1 || zSameChargeDau2HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargeNotIsoPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zSameChargeMass", cut_zSameChargeNotIso ); - zMass->Write(); - cout<<"Number of zGoldenSameChargeNotIso : "<GetEntries()<cd("/"); - - -// zMuTrk plots - TCut cut_zMuTrk("zGoldenMass@.size()==0 && zMuTrkDau1Pt> 20 && zMuTrkDau2Pt>20 && abs(zMuTrkDau1Eta)<2.1 && abs(zMuTrkDau2Eta)<2.1 && (zMuTrkDau1Chi2<1000) && ( zMuTrkDau2Chi2<1000) && abs(zMuTrkDau1dxyFromBS)<0.2 && abs(zMuTrkDau2dxyFromBS)<0.2 && ((zMuTrkDau1TrkNofStripHits + zMuTrkDau1TrkNofPixelHits)>10) && ((zMuTrkDau2TrkNofStripHits + zMuTrkDau2TrkNofPixelHits)>10) && zMuTrkDau1TrkNofPixelHits>0 && zMuTrkDau2TrkNofPixelHits>0 && (zMuTrkDau1NofMuonHits>0 && zMuTrkDau1NofMuMatches>1) && (zMuTrkDau1HLTBit==1)"); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneTrackPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuTrkMass", cut_zMuTrk + cutTk_1Iso + cutTk_2Iso ); - cout<<"Number of original zMuTrk : "<GetEntries()<20 && zGoldenDau2Pt>20 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<10000 && zGoldenDau2Chi2<10000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau1NofPixelHits>0 && zGoldenDau2NofPixelHits>0 && ( ((zGoldenDau1NofMuonHits==0 || zGoldenDau1NofMuMatches<2 ) && (zGoldenDau2HLTBit==1 && zGoldenDau2NofMuonHits>0 && zGoldenDau2NofMuMatches>1)) || ((zGoldenDau2NofMuonHits==0 || zGoldenDau2NofMuMatches<2 ) && (zGoldenDau1HLTBit==1 && zGoldenDau1NofMuonHits>0 && zGoldenDau1NofMuMatches>1)) ) && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - TH1F * zMass2 = new TH1F("zMass2", "zMass2", 200, 0, 200); - Events.Project("zMass2", "zGoldenMass", cut_zGoldenNotGoodSta + cut_1Iso + cut_2Iso ); - - cout<<"Number of zMuTrk from zGolden: "<GetEntries()<Add(zMass2); - zMass->Write(); - delete zMass; - output_file->cd("/"); - -// zMuTrkMu plots - - TCut cut_zMuTrkMu("zMuTrkMuDau1Pt>20 && zMuTrkMuDau2Pt>20 && zMuTrkMuDau1TrkIso< 3.0 && zMuTrkMuDau2TrkIso<3.0 && abs(zMuTrkMuDau1Eta)<2.1 && abs(zMuTrkMuDau2Eta)<2.1 && (( zMuTrkMuDau1Chi2<1000 && zMuTrkMuDau1GlobalMuonBit==1 ) || ( zMuTrkMuDau2Chi2<1000 && zMuTrkMuDau2GlobalMuonBit==1)) && abs(zMuTrkMuDau1dxyFromBS)<0.2 && abs(zMuTrkMuDau2dxyFromBS)<0.2 && (( zMuTrkMuDau1GlobalMuonBit==1 && (zMuTrkMuDau1TrkNofStripHits + zMuTrkMuDau1TrkNofPixelHits)>10) || ( zMuTrkMuDau2GlobalMuonBit==1 && (zMuTrkMuDau2TrkNofStripHits + zMuTrkMuDau2TrkNofPixelHits)>10) ) && (( zMuTrkMuDau1GlobalMuonBit==1 && zMuTrkMuDau1NofMuonHits>0) || ( zMuTrkMuDau2GlobalMuonBit==1 && zMuTrkMuDau2NofMuonHits>0 )) && ( (zMuTrkMuDau1HLTBit==1 && zMuTrkMuDau1GlobalMuonBit==1 ) || (zMuTrkMuDau2HLTBit==1 && zMuTrkMuDau2GlobalMuonBit==1 )) "); - - // TCut cut_zMuTrkMu("zMuTrkMuMass>60 && zMuTrkMuMass<120 && zMuTrkMuDau1Pt> 20 && zMuTrkMuDau2Pt>20 && zMuTrkMuDau1TrkIso< 3.0 && zMuTrkMuDau2TrkIso < 3.0 && abs(zMuTrkMuDau1Eta)<2.1 && abs(zMuTrkMuDau2Eta)<2.1 && ((( zMuTrkMuDau1GlobalMuonBit==1 && zMuTrkMuDau1Chi2<1000 && zMuTrkMuDau1NofMuonHits>0) || ( zMuTrkMuDau1GlobalMuonBit==0 && zMuTrkMuDau1TrkChi2<1000)) || (( zMuTrkMuDau2GlobalMuonBit==1 && zMuTrkMuDau2Chi2<1000) || ( zMuTrkMuDau2GlobalMuonBit==0 && zMuTrkMuDau1TrkChi2<1000 && zMuTrkMuDau2NofMuonHits>0)) && abs(zMuTrkMuDau1dxyFromBS)<0.2 && abs(zMuTrkMuDau2dxyFromBS)<0.2 && ((zMuTrkMuDau1TrkNofStripHits + zMuTrkMuDau1TrkNofPixelHits)>=10) && ((zMuTrkMuDau2TrkNofStripHits + zMuTrkMuDau2TrkNofPixelHits)>=10)) && (zMuTrkMuDau1HLTBit==1 || zMuTrkMuDau2HLTBit==1 ) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneTrackerMuonPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuTrkMuMass", cut_zMuTrkMu ); - - Events.Project("zMass2", "zMuTrkMuMass", cut_zMuTrkMu ); - - zMass->Write(); - cout<<"Number of zMuTrkMu : "<GetEntries()<cd("/"); - - - - // zMuSta plots - - TCut cut_zMuSta("zGoldenMass@.size()==0 && zMuStaDau1Pt>20 && zMuStaDau2Pt>20 && abs(zMuStaDau1Eta)<2.1 && abs(zMuStaDau2Eta)<2.1 && abs(zMuStaDau1dxyFromBS)<0.2 && abs(zMuStaDau2dxyFromBS)<0.2 && ( (zMuStaDau1GlobalMuonBit==1 && (zMuStaDau1TrkNofStripHits + zMuStaDau1TrkNofPixelHits)>10 && zMuStaDau1TrkNofPixelHits>0) || ( zMuStaDau2GlobalMuonBit==1 && (zMuStaDau2TrkNofStripHits + zMuStaDau2TrkNofPixelHits)>10 && zMuStaDau2TrkNofPixelHits>0)) && (( zMuStaDau1SaNofMuonHits>0 && zMuStaDau1NofMuMatches>1 && zMuStaDau2SaNofMuonHits>0 && zMuStaDau2NofMuMatches>1 )) && ( (zMuStaDau1HLTBit==1 && zMuStaDau1GlobalMuonBit==1 ) || (zMuStaDau2HLTBit==1 && zMuStaDau2GlobalMuonBit==1 ))"); - -// TCut cut_zMuSta("zMuStaMass>60 && zMuStaMass<120 && zMuStaDau1Pt> 20 && zMuStaDau2Pt>20 && zMuStaDau1TrkIso< 3.0 && zMuStaDau1TrkIso < 3.0 && abs(zMuStaDau1Eta)<2.1 && abs(zMuStaDau2Eta)<2.1 && abs(zMuStaDau1dxyFromBS)<0.2 && abs(zMuStaDau2dxyFromBS)<0.2 &&(zMuStaDau1NofStripHits + zMuStaDau1NofPixelHits)>=10 && (zMuStaDau2NofStripHits + zMuStaDau2NofPixelHits)>=10 && zMuStaDau1NofMuonHits>0 && zMuStaDau2NofMuonHits>0 && ((zMuStaDau1HLTBit==1 && zMuStaDau1GlobalMuonBit ==1 ) || ( zMuStaDau2HLTBit==1 && zMuStaDau2GlobalMuonBit ==1) ) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneStandAloneMuonPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuStaMass", cut_zMuSta + cutSa_1Iso + cutSa_2Iso ); - - // add events from zGolden with not a good trk -TCut cut_zGoldenNotGoodTrk("zGoldenDau1Pt>20 && zGoldenDau2Pt>20 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<10000 && zGoldenDau2Chi2<10000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ( (((zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)<=10 || zGoldenDau1NofPixelHits==0) && (zGoldenDau2HLTBit==1 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofPixelHits>0)) || (((zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)<=10 || zGoldenDau2NofPixelHits==0) && (zGoldenDau1HLTBit==1 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofPixelHits>0))) && (zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1) && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1)"); - TH1F * zMass2 = new TH1F("zMass2", "zMass2", 200, 0, 200); - Events.Project("zMass2", "zGoldenMassSa", cut_zGoldenNotGoodTrk + cut_1Iso + cut_2Iso ); - - cout<<"Number of original zMuSta : "<GetEntries()<GetEntries()<Add(zMass2); - zMass->Write(); - - delete zMass; - delete zMass2; - - output_file->cd("/"); - - - - -// zMuSta plots - TCut cut_zMuMuSta("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && zGoldenDau1dxyFromBS<0.02 && zGoldenDau2dxyFromBS<0.02"); - TDirectory * dir = output_file->mkdir("zmumuSaMassHistogram"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMassSa", cut_zMuMuSta ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/plotsAfterCuts_NoLegs.C b/ElectroWeakAnalysis/ZMuMu/test/macros/plotsAfterCuts_NoLegs.C deleted file mode 100644 index 9f6466d191c18..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/plotsAfterCuts_NoLegs.C +++ /dev/null @@ -1,553 +0,0 @@ -#include "TFile.h" -#include "TH1F.h" -#include "TTree.h" -#include "TAxis.h" -#include "TCanvas.h" -//#if !defined(__CINT__) && !defined(__MAKECINT__) -#include -#include -//#endif - -void setGraphics(TH1F *histo){ - - histo->SetFillColor(kAzure+7); - //histo->SetLineWidth(2); - histo->SetLineColor(kBlue+1); -} - - - - -void plotsAfterCuts_NoLegs(){ - - gStyle->SetOptStat(); - gROOT->SetStyle("Plain"); - using namespace std; - - // #include ; - - // TFile *file = TFile::Open("rfio:/castor/cern.ch/user/d/degrutto/incl15WithBsPv/NtupleLoose_test_inclu15_1_2.root"); - // TFile *file = TFile::Open("../NutpleLooseTestNew_oneshot_all_10_1.root"); -//TFile *file = TFile::Open("rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/NtupleLoose_test.root"); -// TTree * Events = dynamic_cast< TTree *> (file->Get("Events")); - - TChain Events("Events"); - // Events.Add("../../NtupleLoose_135_all.root") - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_132440_139790.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_139791-140159_v2.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_140160-140182.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_140183-140399.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_140440-141961.root"); - Events.Add("../NtupleLoose_142035-142664.root"); - Events.Add("../NtupleLoose_142665-143179.root"); - Events.Add("../NtupleLoose_143180-143336.root"); - Events.Add("../NtupleLoose_143337-144114.root"); - Events.Add("../NtupleLoose_144114_v2.root"); - - - - TFile * output_file = TFile::Open("histo_3p07_noCuts_eta2p1.root", "RECREATE"); - // TFile * output_file = TFile::Open("histo_test.root", "RECREATE"); - - // zGolden plots - TCut cut_zGolden("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso03SumPt< 3.0 && zGoldenDau2Iso03SumPt < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - // Events.Draw("zGoldenMass"); - Events.Project("zMass", "zGoldenMass", cut_zGolden ); - cout<<"Number of zGoldenAA : "<Integral(60,120)<Write(); - delete zMass; - - - TCut cut_zGoldenPt15("zGoldenMass>0 && zGoldenDau1Pt> 15 && zGoldenDau2Pt>15 && zGoldenDau1Iso03SumPt< 3.0 && zGoldenDau2Iso03SumPt < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1)"); - dir->cd(); - - TH1F * zMassPt15 = new TH1F("zMassPt15", "zMassPt15", 200, 0, 200); - Events.Project("zMassPt15", "zGoldenMass", cut_zGoldenPt15 ); - setGraphics(zMassPt15); - cout<<"Number of zGoldenPt15 : "<Integral(60,120)<Write(); - delete zMassPt15; - - - - output_file->cd("/"); - - TCut cut2_zGolden1HLT("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso03SumPt< 3.0 && zGoldenDau2Iso03SumPt < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && ( zGoldenDau1HLTBit ==0 || zGoldenDau2HLTBit ==0)"); - TDirectory * dir = output_file->mkdir("goodZToMuMu1HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGolden1HLT ); - cout<<"Number of zGolden1HLT : "<Integral(60,120)<Write(); - delete zMass; - //zMass2->Write(); - - output_file->cd("/"); - - - output_file->cd("/"); - - TCut cut2_zGoldenAB1HLT("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso03SumPt< 3.0 && zGoldenDau2Iso03SumPt < 3.0 && (( abs(zGoldenDau1Eta)>2.1 || abs(zGoldenDau2Eta)>2.1 ) ) && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && ( zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("goodZToMuMuAB1HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGoldenAB1HLT ); - cout<<"Number of zGoldenAB1HLT : "<Integral(60,120)<Write(); - delete zMass; - //zMass2->Write(); - - output_file->cd("/"); - - - - TCut cut2_zGoldenBB1HLT("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso03SumPt< 3.0 && zGoldenDau2Iso03SumPt < 3.0 && (( abs(zGoldenDau1Eta)>2.1 && abs(zGoldenDau2Eta)>2.1 ) ) && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && ( zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("goodZToMuMuBB1HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGoldenBB1HLT ); - cout<<"Number of zGoldenBB1HLT : "<Integral(60,120)<Write(); - delete zMass; - //zMass2->Write(); - - output_file->cd("/"); - - - - TCut cut2_zGolden2HLT("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso03SumPt< 3.0 && zGoldenDau2Iso03SumPt < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && ( zGoldenDau1HLTBit ==1 && zGoldenDau2HLTBit ==1)"); - - TDirectory * dir = output_file->mkdir("goodZToMuMu2HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGolden2HLT ); - zMass->Write(); - cout<<"Number of zGolden2HLT : "<Integral(60,120)<cd("/"); - - - // zGoldenOneNotIso plots - TCut cut_zGoldenOneNotIso("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && ( (zGoldenDau1Iso03SumPt> 3.0 && zGoldenDau2Iso03SumPt < 3.0) || (zGoldenDau2Iso03SumPt> 3.0 && zGoldenDau1Iso03SumPt < 3.0)) && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("oneNonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut_zGoldenOneNotIso ); - zMass->Write(); - cout<<"Number of zGoldenOneNotIso : "<Integral(60,120)<cd("/"); - -// // zGoldenTwoNotIso plots - TCut cut_zGoldenTwoNotIso("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && (zGoldenDau1Iso03SumPt> 3.0 && zGoldenDau2Iso03SumPt > 3.0) && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("twoNonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass","zGoldenMass", cut_zGoldenTwoNotIso ); - zMass->Write(); - cout<<"Number of zGoldenTwoNotIso : "<Integral(60,120)<cd("/"); - - // zGoldenNotIso plots - TCut cut_zGoldenNotIso("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && (zGoldenDau1Iso03SumPt> 3.0 || zGoldenDau2Iso03SumPt > 3.0) && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("nonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut_zGoldenNotIso ); - zMass->Write() ; - cout<<"Number of zGoldenNotIso : "<Integral(60,120)<cd("/"); - - // zGoldenSameCharge plots........ - TCut cut_zSameCharge("zSameChargeMass>0 && zSameChargeMass<200 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && zSameChargeDau1Iso03SumPt< 3.0 && zSameChargeDau1Iso03SumPt < 3.0 && abs(zSameChargeDau1Eta)<2.1 && abs(zSameChargeDau2Eta)<2.1 && zSameChargeDau1Chi2<1000 && zSameChargeDau2Chi2<1000 && abs(zSameChargeDau1dxyFromBS)<0.2 && abs(zSameChargeDau2dxyFromBS)<0.2 &&(zSameChargeDau1NofStripHits + zSameChargeDau1NofPixelHits)>=0 && (zSameChargeDau2NofStripHits + zSameChargeDau2NofPixelHits)>=0 && zSameChargeDau1NofMuonHits>=0 && zSameChargeDau2NofMuonHits>=0 && (zSameChargeDau1HLTBit==1 || zSameChargeDau2HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargePlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zSameChargeMass", cut_zSameCharge ); - zMass->Write(); - cout<<"Number of zGoldenSameCharge : "<Integral(60,120)<cd("/"); - - // zGoldenSameChargeNotIso plots........ - TCut cut_zSameChargeNotIso("zSameChargeMass>0 && zSameChargeMass<200 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && ( zSameChargeDau1Iso03SumPt> 3.0 || zSameChargeDau1Iso03SumPt > 3.0) && abs(zSameChargeDau1Eta)<2.1 && abs(zSameChargeDau2Eta)<2.1 && zSameChargeDau1Chi2<1000 && zSameChargeDau2Chi2<1000 && abs(zSameChargeDau1dxyFromBS)<0.2 && abs(zSameChargeDau2dxyFromBS)<0.2 &&(zSameChargeDau1NofStripHits + zSameChargeDau1NofPixelHits)>=0 && (zSameChargeDau2NofStripHits + zSameChargeDau2NofPixelHits)>=0 && zSameChargeDau1NofMuonHits>=0 && zSameChargeDau2NofMuonHits>=0 && (zSameChargeDau1HLTBit==1 || zSameChargeDau2HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargeNotIsoPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zSameChargeMass", cut_zSameChargeNotIso ); - zMass->Write(); - cout<<"Number of zGoldenSameChargeNotIso : "<Integral(60,120)<cd("/"); - - -// zMuTrk plots - TCut cut_zMuTrk("zMuTrkMass>0 && zMuTrkMass<200 && zMuTrkDau1Pt> 20 && zMuTrkDau2Pt>20 && zMuTrkDau1Iso03SumPt< 3.0 && zMuTrkDau2Iso03SumPt < 3.0 && abs(zMuTrkDau1Eta)<2.1 && abs(zMuTrkDau2Eta)<2.1 && zMuTrkDau1Chi2<1000 && zMuTrkDau2TrkChi2<1000 && abs(zMuTrkDau1dxyFromBS)<0.2 && abs(zMuTrkDau2dxyFromBS)<.2 &&(zMuTrkDau1TrkNofStripHits + zMuTrkDau1TrkNofPixelHits)>=0 && (zMuTrkDau2TrkNofStripHits + zMuTrkDau2TrkNofPixelHits)>=0 && zMuTrkDau1NofMuonHits>=0 && (zMuTrkDau1HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneTrackPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuTrkMass", cut_zMuTrk ); - zMass->Write(); - cout<<"Number of zMuTrk : "<Integral(60,120)<cd("/"); - -// zMuTrkMu plots - TCut cut_zMuTrkMu("zMuTrkMuMass>0 && zMuTrkMuMass<200 && zMuTrkMuDau1Pt> 20 && zMuTrkMuDau2Pt>20 && zMuTrkMuDau1Iso03SumPt< 3.0 && zMuTrkMuDau2Iso03SumPt < 3.0 && abs(zMuTrkMuDau1Eta)<2.1 && abs(zMuTrkMuDau1dxyFromBS)<0.2 && abs(zMuTrkMuDau2dxyFromBS)<0.2 && abs(zMuTrkMuDau2Eta)<2.1 && ( (zMuTrkMuDau1HLTBit==1 && zMuTrkMuDau1GlobalMuonBit ==1 ) || ( zMuTrkMuDau2HLTBit==1 && zMuTrkMuDau2GlobalMuonBit ==1))");// zMuTrkMuDau1Chi2<1000 && zMuTrkMuDau2Chi2<1000 && abs(zMuTrkMuDau1dxyFromBS)<0.2 && abs(zMuTrkMuDau2dxyFromBS)<0.2 &&(zMuTrkMuDau1NofStripHits + zMuTrkMuDau1NofPixelHits)>=0 && (zMuTrkMuDau2NofStripHits + zMuTrkMuDau2NofPixelHits)>=0 && zMuTrkMuDau1NofMuonHits>=-1 && zMuTrkMuDau2NofMuonHits>=-1 "); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneTrackerMuonPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuTrkMuMass", cut_zMuTrkMu ); - zMass->Write(); - cout<<"Number of zMuTrkMu : "<Integral(60,120)<cd("/"); - - - - // zMuSta plots - TCut cut_zMuSta("zMuStaMass>0 && zMuStaMass<200 && zMuStaDau1Pt> 20 && zMuStaDau2Pt>20 && zMuStaDau1Iso03SumPt< 3.0 && zMuStaDau2Iso03SumPt < 3.0 && abs(zMuStaDau1Eta)<2.1 && abs(zMuStaDau2Eta)<2.1 && ((zMuStaDau1HLTBit==1 && zMuStaDau1GlobalMuonBit ==1 && abs(zMuStaDau1dxyFromBS)<0.2 ) || ( zMuStaDau2HLTBit==1 && zMuStaDau2GlobalMuonBit ==1 && abs(zMuStaDau2dxyFromBS)<0.2) )");// zMuStaDau1Chi2<1000 && zMuStaDau2Chi2<1000 && abs(zMuStaDau1dxyFromBS)<0.2 && abs(zMuStaDau2dxyFromBS)<0.2 &&(zMuStaDau1NofStripHits + zMuStaDau1NofPixelHits)>=0 && (zMuStaDau2NofStripHits + zMuStaDau2NofPixelHits)>=0 && zMuStaDau1NofMuonHits>=-1 && zMuStaDau2NofMuonHits>=-1 && "); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneStandAloneMuonPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuStaMass", cut_zMuSta ); - zMass->Write(); - cout<<"Number of zMuSta : "<Integral(60,120)<cd("/"); - -// zMuSta plots - TCut cut_zMuMuSta("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso03SumPt< 3.0 && zGoldenDau1Iso03SumPt < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && zGoldenDau1dxyFromBS<0.02 && zGoldenDau2dxyFromBS<0.02"); - TDirectory * dir = output_file->mkdir("zmumuSaMassHistogram"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMassSa", cut_zMuMuSta ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - /* - TDirectory * dir = output_file->mkdir("zPlots"); - dir->cd(); - TH1F * zGoldenPt = new TH1F("zGoldenPt", "zGoldenPt", 200, 0, 200); - Events.Project("zGoldenPt", "zGoldenPt", cut_zGolden ); - zGoldenPt->Write(); - delete zGoldenPt; - - - TH1F * zGoldenY = new TH1F("zGoldenY", "zGoldenY", 200, -5, 5); - Events.Project("zGoldenY", "zGoldenY", cut_zGolden ); - zGoldenY->Write(); - delete zGoldenY; - - output_file->cd("/"); - - - - TDirectory * dir = output_file->mkdir("MuPlots"); - dir->cd(); - - - TH1F * muNotTriggeredEta = new TH1F("muNotTriggeredEta", "muNotTriggeredEta", 240, -6, 6.); - TH1F * h2 = new TH1F("h2", "h2", 240, -6, 6.); - - Events.Project("muNotTriggeredEta","zGoldenDau1Eta", "zGoldenDau1HLTBit==0"); - Events.Project("h2","zGoldenDau2Eta", "zGoldenDau2HLTBit==0"); - - muNotTriggeredEta->Add(h2); - muNotTriggeredEta->Write(); - delete muNotTriggeredEta; - delete h2; - - TH1F * zGoldenDauHighPt = new TH1F("zGoldenDauHighPt", "zGoldenDauHighPt", 200, 0, 200); - Events.Project("zGoldenDauHighPt", "max(zGoldenDau1Pt, zGoldenDau2Pt)", cut_zGolden ); - zGoldenDauHighPt->Write(); - delete zGoldenDauHighPt; - - TH1F * zGoldenDauLowPt = new TH1F("zGoldenDauLowPt", "zGoldenDauLowPt", 200, 0, 200); - Events.Project("zGoldenDauLowPt", "min(zGoldenDau1Pt, zGoldenDau2Pt)", cut_zGolden ); - zGoldenDauLowPt->Write(); - delete zGoldenDauLowPt; - - //(mu1.phi -mu2.phi) - TH1F * deltaPhi = new TH1F("deltaPhi", "deltaPhi", 120, 0, 6.); - TH1F * h2 = new TH1F("h2", "h2", 120, 0, 6. ); - TH1F * h3 = new TH1F("h3", "h3", 120, 0, 6. ); - */ - - /* result = phi1 - phi2; -040 while (result > M_PI) result -= 2*M_PI; -041 while (result <= -M_PI) result += 2*M_PI; -042 return result; - */ - /* - Events.Project("deltaPhi", "abs(zGoldenDau1Phi - zGoldenDau2Phi)", "-TMath::Pi() < (zGoldenDau1Phi - zGoldenDau2Phi) < TMath::Pi()" , "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + cut_zGolden); - Events.Project("h2", "abs(zGoldenDau1Phi - zGoldenDau2Phi - 2 * TMath::Pi())", "(zGoldenDau1Phi - zGoldenDau2Phi) > TMath::Pi()" , "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + + cut_zGolden); - Events.Project("h3", "abs(zGoldenDau1Phi - zGoldenDau2Phi + 2 * TMath::Pi())", "(zGoldenDau1Phi - zGoldenDau2Phi) <= -TMath::Pi()", "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + cut_zGolden ); - - deltaPhi->Add(h2, h3); - deltaPhi->Write(); - delete deltaPhi;; - delete h2; - delete h3; - - - - // mu1.eta -mu2.eta - TH1F * deltaEta = new TH1F("deltaEta", "deltaEta", 120, 0, 6.); - Events.Project("deltaEta", "abs(zGoldenDau1Eta - zGoldenDau2Eta)", cut_zGolden ); - deltaEta->Write(); - delete deltaEta; - - TH1F * dua1Phi = new TH1F("dau1Phi", "dau1Phi", 120, -6, 6.); - Events.Project("dau1Phi", "zGoldenDau1Phi" , cut_zGolden); - dau1Phi->Write(); - delete dau1Phi; - - TH1F * dua2Phi = new TH1F("dau2Phi", "dau2Phi", 120, -6, 6.); - Events.Project("dau2Phi", "zGoldenDau2Phi" , cut_zGolden); - dau2Phi->Write(); - delete dau2Phi; - - TH1F * dau1Eta = new TH1F("dua1Eta", "dau1Eta", 120, -6, 6.); - Events.Project("dau1Eta", "zGoldenDau1Eta", cut_zGolden ); - dau1Eta->Write(); - delete dau1Eta; - - TH1F * dau2Eta = new TH1F("dua2Eta", "dau2Eta", 120, -6, 6.); - Events.Project("dau2Eta", "zGoldenDau2Eta" , cut_zGolden); - dau2Eta->Write(); - delete dau2Eta; - - // quality variables - // caveat: I'm requiring isolations - TH1F * dau1Chi2 = new TH1F("dua1Chi2", "dau1Chi2", 1000, 0, 100); - Events.Project("dua1Chi2", "zGoldenDau1Chi2", cut_zGolden ); - dau1Chi2->Write(); - delete dau1Chi2; - - TH1F * dau2Chi2 = new TH1F("dua2Chi2", "dau2Chi2", 1000, 0, 100); - Events.Project("dau2Chi2", "zGoldenDau2Chi2", cut_zGolden ); - dau2Chi2->Write(); - delete dau2Chi2; - - - TH1F * dau1Dxy = new TH1F("dua1Dxy", "dau1Dxy", 500, 0, 5); - Events.Project("dua1Dxy", "zGoldenDau1dxyFromBS", cut_zGolden ); - dau1Dxy->Write(); - delete dau1Dxy; - - TH1F * dau2Dxy = new TH1F("dua2Dxy", "dau2Dxy", 500, 0, 5); - Events.Project("dua2Dxy", "zGoldenDau2dxyFromBS", cut_zGolden ); - dau2Dxy->Write(); - delete dau2Dxy; - - - TH1F * dau1Dz= new TH1F("dua1Dz", "dau1Dz", 500, 0, 20); - Events.Project("dua1Dz", "zGoldenDau1dzFromBS", cut_zGolden ); - dau1Dz->Write(); - delete dau1Dz; - - TH1F * dau2Dz = new TH1F("dua2Dz", "dau2Dz", 500, 0, 20); - Events.Project("dua2Dz", "zGoldenDau2dzFromBS", cut_zGolden); - dau2Dz->Write(); - delete dau2Dz; - */ - /* - TH1F * dau1NofHit = new TH1F("dua1NofHit", "dau1NofHit", 100, -0.5, 99.5); - Events.Project("dua1NofHit", "zGoldenDau1NofHit", cut_zGolden ); - dau1NofHit->Write(); - delete dau1NofHit; - - TH1F * dau2NofHit = new TH1F("dua2NofHit", "dau2NofHit", 100, -0.5, 99.5); - Events.Project("dua2NofHit", "zGoldenDau2NofHit", cut_zGolden ); - dau2NofHit->Write(); - delete dau2NofHit; - */ - /* - TH1F * dau1NofMuCh = new TH1F("dua1NofMuCh", "dau1NofMuCh", 20, -0.5, 19.5); - Events.Project("dua1NofMuCh", "zGoldenDau1NofMuChambers", cut_zGolden ); - dau1NofMuCh->Write(); - delete dau1NofMuCh; - - TH1F * dau2NofMuCh = new TH1F("dua2NofMuCh", "dau2NofMuCh", 20, -0.5, 19.5); - Events.Project("dua2NofMuCh", "zGoldenDau2NofMuChambers", cut_zGolden ); - dau2NofMuCh->Write(); - delete dau2NofMuCh; - - - TH1F * dau1NofMuMatches = new TH1F("dua1NofMuMatches", "dau1NofMuMatches", 20, -0.5, 19.5); - Events.Project("dua1NofMuMatches", "zGoldenDau1NofMuMatches", cut_zGolden ); - dau1NofMuMatches->Write(); - delete dau1NofMuMatches; - - TH1F * dau2NofMuMatches = new TH1F("dua2NofMuMatches", "dau2NofMuMatches", 20, -0.5, 19.5); - Events.Project("dua2NofMuMatches", "zGoldenDau2NofMuMatches", cut_zGolden ); - dau2NofMuMatches->Write(); - delete dau2NofMuMatches; - - TH1F * dau1EmEnergy = new TH1F("dua1EmEnergy", "dau1EmEnergy", 200, -0.1, 19.9); - Events.Project("dua1EmEnergy", "zGoldenDau1MuEnergyEm", cut_zGolden ); - dau1EmEnergy->Write(); - delete dau1EmEnergy; - - TH1F * dau2EmEnergy = new TH1F("dua2EmEnergy", "dau2EmEnergy", 200, -0.1, 19.9); - Events.Project("dua2EmEnergy", "zGoldenDau2MuEnergyEm", cut_zGolden ); - dau2EmEnergy->Write(); - delete dau2EmEnergy; - - TH1F * dau1HadEnergy = new TH1F("dua1HadEnergy", "dau1HadEnergy", 200, -0.1, 19.9); - Events.Project("dua1HadEnergy", "zGoldenDau1MuEnergyHad", cut_zGolden ); - dau1HadEnergy->Write(); - delete dau1HadEnergy; - - TH1F * dau2HadEnergy = new TH1F("dua2HadEnergy", "dau2HadEnergy", 200, -0.1, 19.9); - Events.Project("dua2HadEnergy", "zGoldenDau2MuEnergyHad", cut_zGolden ); - dau2HadEnergy->Write(); - delete dau2HadEnergy; - - - - - TH2F * MuChambersVsMuMatches = new TH2F("MuChambersVsMuMatches", "MuChambersVsMuMatches", 21, -0.5, 20.5, 21, -0.5, 20.5); - TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events.Project("MuChambersVsMuMatches", "zGoldenDau1NofMuChambers:zGoldenDau1NofMuMatches", cut_zGolden); - Events.Project("hh2", "zGoldenDau2NofMuChambers:zGoldenDau2NofMuMatches", cut_zGolden); - - MuChambersVsMuMatches->Add(hh2); - MuChambersVsMuMatches->Write(); - MuChambersVsMuMatches->SetDrawOption("Box"); - // MuChambersVsMuMatches->Draw("BOX"); - delete MuChambersVsMuMatches; - delete hh2; - output_file->cd("/"); - - TDirectory * dir = output_file->mkdir("TrkPlots"); - dir->cd(); - - */ - - /* TH1F * nofHitTrk = new TH1F("nofHitTrk", "nofHitTrk", 100, -0.5, 99.5); - Events.Project("nofHitTrk", "zMuTrkDau2NofHitTk", cut_zMuTrk ); - nofHitTrk->Write(); - delete nofHitTrk; - */ - /* - TH1F * trkChi2 = new TH1F("trkChi2", "trkChi2", 100, -0.5, 99.5); - Events.Project("trkChi2", "zMuTrkDau2Chi2", cut_zMuTrk ); - trkChi2->Write(); - delete trkChi2; - - - output_file->cd("/"); - - - - TDirectory * dir = output_file->mkdir("StaPlots"); - dir->cd(); - - // sta as zDaudxyFromBS=-1 by construction.... - - TH1F * staNofMuCh = new TH1F("staNofMuCh", "staNofMuCh", 20, -0.5, 19.5); - TH1F * h2 = new TH1F("h2", "h2", 20, -0.5, 19.5); - Events.Project("staNofMuCh", "zMuStaDau1NofMuChambers", cut_zMuSta + "zMuStaDau1dxyFromBS==-1" ); - Events.Project("h2", "zMuStaDau2NofMuChambers", cut_zMuSta + "zMuStaDau2dxyFromBS==-1" ); - staNofMuCh->Add(h2); - staNofMuCh->Write(); - delete staNofMuCh; - delete h2; - - TH1F * staNofMuMatches = new TH1F("staNofMuMatches", "staNofMuMatches", 20, -0.5, 19.5); - TH1F * h2 = new TH1F("h2", "h2", 20, -0.5, 19.5); - Events.Project("staNofMuMatches", "zMuStaDau1NofMuMatches", cut_zMuSta + "zMuStaDau1dxyFromBS==-1" ); - Events.Project("h2", "zMuStaDau2NofMuMatches", cut_zMuSta + "zMuStaDau2dxyFromBS==-1" ); - staNofMuMatches->Add(h2); - staNofMuMatches->Write(); - delete staNofMuMatches; - delete h2; - - TH2F * MuChambersVsMuMatches= new TH2F("MuChambersVsMuMatches", "MuChambersVsMuMatches", 21, -0.5, 20.5, 21, -0.5, 20.5); - TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events.Project("MuChambersVsMuMatches", "zMuStaDau1NofMuChambers:zMuStaDau1NofMuMatches", cut_zMuSta); - Events.Project("hh2", "zMuStaDau2NofMuChambers:zMuStaDau2NofMuMatches", cut_zMuSta); - MuChambersVsMuMatches->Add(hh2); - MuChambersVsMuMatches->SetDrawOption("Box"); - MuChambersVsMuMatches->Write(); - delete MuChambersVsMuMatches; - delete hh2; - output_file->cd("/"); - - // isolations... - TDirectory * dir = output_file->mkdir("IsoPlots"); - dir->cd(); - - - TH1F * TrkIsoPt20= new TH1F("TrkIsoPt20", "TrkIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt20", "zGoldenDau1TrkIso" , "zGoldenDau2Pt>20"); - Events.Project("h2", "zGoldenDau2TrkIso", "zGoldenDau2Pt>20" ); - TrkIsoPt20->Add(h2); - TrkIsoPt20->Write(); - delete TrkIsoPt20; - delete h2; - - TH1F * EcalIsoPt20 = new TH1F("EcalIsoPt20", "EcalIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt20", "zGoldenDau1EcalIso" , "zGoldenDau1Pt>20"); - Events.Project("h2", "zGoldenDau2EcalIso", "zGoldenDau2Pt>20" ); - EcalIsoPt20->Add(h2); - EcalIsoPt20->Write(); - delete EcalIsoPt20; - delete h2; - - TH1F * HcalIsoPt20 = new TH1F("HcalIsoPt20", "HcalIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt20", "zGoldenDau1HcalIso" , "zGoldenDau1Pt>20" ); - Events.Project("h2", "zGoldenDau2HcalIso" , "zGoldenDau2Pt>20"); - HcalIsoPt20->Add(h2); - HcalIsoPt20->Write(); - delete HcalIsoPt20; - delete h2; - - TH1F * TrkIsoPt15= new TH1F("TrkIsoPt15", "TrkIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt15", "zGoldenDau1TrkIso" , "zGoldenDau1Pt>20"); - Events.Project("h2", "zGoldenDau2TrkIso", "zGoldenDau2Pt>15" ); - TrkIsoPt15->Add(h2); - TrkIsoPt15->Write(); - delete TrkIsoPt15; - delete h2; - - TH1F * EcalIsoPt15 = new TH1F("EcalIsoPt15", "EcalIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt15", "zGoldenDau1EcalIso" , "zGoldenDau1Pt>20"); - Events.Project("h2", "zGoldenDau2EcalIso", "zGoldenDau2Pt>15" ); - EcalIsoPt15->Add(h2); - - EcalIsoPt15->Write(); - delete EcalIsoPt15; - delete h2; - - TH1F * HcalIsoPt15 = new TH1F("HcalIsoPt15", "HcalIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt15", "zGoldenDau1HcalIso" , "zGoldenDau1Pt>20" ); - Events.Project("h2", "zGoldenDau2HcalIso" , "zGoldenDau2Pt>15"); - HcalIsoPt15->Add(h2); - - HcalIsoPt15->Write(); - delete HcalIsoPt15; - delete h2; - output_file->cd("/"); - - */ - - output_file->Close(); - - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/plotsAfterCuts_NoLegs_oldIso.C b/ElectroWeakAnalysis/ZMuMu/test/macros/plotsAfterCuts_NoLegs_oldIso.C deleted file mode 100644 index f6fc9489d57c5..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/plotsAfterCuts_NoLegs_oldIso.C +++ /dev/null @@ -1,553 +0,0 @@ -#include "TFile.h" -#include "TH1F.h" -#include "TTree.h" -#include "TAxis.h" -#include "TCanvas.h" -//#if !defined(__CINT__) && !defined(__MAKECINT__) -#include -#include -//#endif - -void setGraphics(TH1F *histo){ - - histo->SetFillColor(kAzure+7); - //histo->SetLineWidth(2); - histo->SetLineColor(kBlue+1); -} - - - - -void plotsAfterCuts_NoLegs_oldIso(){ - - gStyle->SetOptStat(); - gROOT->SetStyle("Plain"); - using namespace std; - - // #include ; - - // TFile *file = TFile::Open("rfio:/castor/cern.ch/user/d/degrutto/incl15WithBsPv/NtupleLoose_test_inclu15_1_2.root"); - // TFile *file = TFile::Open("../NutpleLooseTestNew_oneshot_all_10_1.root"); -//TFile *file = TFile::Open("rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/NtupleLoose_test.root"); -// TTree * Events = dynamic_cast< TTree *> (file->Get("Events")); - - TChain Events("Events"); - // Events.Add("../../NtupleLoose_135_all.root") - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_132440_139790.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_139791-140159_v2.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_140160-140182.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_140183-140399.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_140440-141961.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_142035-142664.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_142665-143179.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_143180-143336.root"); - Events.Add("/scratch2/users/degruttola/data/OfficialJSON/blessed/NtupleLoose_143337-144114.root"); - // Events.Add("../NtupleLoose_144114_v2.root"); - - - - TFile * output_file = TFile::Open("histo_2p88_noCuts_oldIso.root", "RECREATE"); - // TFile * output_file = TFile::Open("histo_test.root", "RECREATE"); - - // zGolden plots - TCut cut_zGolden("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - // Events.Draw("zGoldenMass"); - Events.Project("zMass", "zGoldenMass", cut_zGolden ); - cout<<"Number of zGoldenAA : "<Integral(60,120)<Write(); - delete zMass; - - - TCut cut_zGoldenPt15("zGoldenMass>0 && zGoldenDau1Pt> 15 && zGoldenDau2Pt>15 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1)"); - dir->cd(); - - TH1F * zMassPt15 = new TH1F("zMassPt15", "zMassPt15", 200, 0, 200); - Events.Project("zMassPt15", "zGoldenMass", cut_zGoldenPt15 ); - setGraphics(zMassPt15); - cout<<"Number of zGoldenPt15 : "<Integral(60,120)<Write(); - delete zMassPt15; - - - - output_file->cd("/"); - - TCut cut2_zGolden1HLT("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && ( zGoldenDau1HLTBit ==0 || zGoldenDau2HLTBit ==0)"); - TDirectory * dir = output_file->mkdir("goodZToMuMu1HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGolden1HLT ); - cout<<"Number of zGolden1HLT : "<Integral(60,120)<Write(); - delete zMass; - //zMass2->Write(); - - output_file->cd("/"); - - - output_file->cd("/"); - - TCut cut2_zGoldenAB1HLT("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && (( abs(zGoldenDau1Eta)>2.1 || abs(zGoldenDau2Eta)>2.1 ) ) && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && ( zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("goodZToMuMuAB1HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGoldenAB1HLT ); - cout<<"Number of zGoldenAB1HLT : "<Integral(60,120)<Write(); - delete zMass; - //zMass2->Write(); - - output_file->cd("/"); - - - - TCut cut2_zGoldenBB1HLT("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && (( abs(zGoldenDau1Eta)>2.1 && abs(zGoldenDau2Eta)>2.1 ) ) && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && ( zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("goodZToMuMuBB1HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGoldenBB1HLT ); - cout<<"Number of zGoldenBB1HLT : "<Integral(60,120)<Write(); - delete zMass; - //zMass2->Write(); - - output_file->cd("/"); - - - - TCut cut2_zGolden2HLT("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && ( zGoldenDau1HLTBit ==1 && zGoldenDau2HLTBit ==1)"); - - TDirectory * dir = output_file->mkdir("goodZToMuMu2HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGolden2HLT ); - zMass->Write(); - cout<<"Number of zGolden2HLT : "<Integral(60,120)<cd("/"); - - - // zGoldenOneNotIso plots - TCut cut_zGoldenOneNotIso("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && ( (zGoldenDau1TrkIso> 3.0 && zGoldenDau2TrkIso < 3.0) || (zGoldenDau2TrkIso> 3.0 && zGoldenDau1TrkIso < 3.0)) && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("oneNonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut_zGoldenOneNotIso ); - zMass->Write(); - cout<<"Number of zGoldenOneNotIso : "<Integral(60,120)<cd("/"); - -// // zGoldenTwoNotIso plots - TCut cut_zGoldenTwoNotIso("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && (zGoldenDau1TrkIso> 3.0 && zGoldenDau2TrkIso > 3.0) && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("twoNonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass","zGoldenMass", cut_zGoldenTwoNotIso ); - zMass->Write(); - cout<<"Number of zGoldenTwoNotIso : "<Integral(60,120)<cd("/"); - - // zGoldenNotIso plots - TCut cut_zGoldenNotIso("zGoldenMass>0 && zGoldenMass<200 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && (zGoldenDau1TrkIso> 3.0 || zGoldenDau2TrkIso > 3.0) && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&(zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=0 && zGoldenDau1NofMuonHits>=0 && zGoldenDau2NofMuonHits>=0 && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("nonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut_zGoldenNotIso ); - zMass->Write() ; - cout<<"Number of zGoldenNotIso : "<Integral(60,120)<cd("/"); - - // zGoldenSameCharge plots........ - TCut cut_zSameCharge("zSameChargeMass>0 && zSameChargeMass<200 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && zSameChargeDau1TrkIso< 3.0 && zSameChargeDau1TrkIso < 3.0 && abs(zSameChargeDau1Eta)<2.1 && abs(zSameChargeDau2Eta)<2.1 && zSameChargeDau1Chi2<1000 && zSameChargeDau2Chi2<1000 && abs(zSameChargeDau1dxyFromBS)<0.2 && abs(zSameChargeDau2dxyFromBS)<0.2 &&(zSameChargeDau1NofStripHits + zSameChargeDau1NofPixelHits)>=0 && (zSameChargeDau2NofStripHits + zSameChargeDau2NofPixelHits)>=0 && zSameChargeDau1NofMuonHits>=0 && zSameChargeDau2NofMuonHits>=0 && (zSameChargeDau1HLTBit==1 || zSameChargeDau2HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargePlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zSameChargeMass", cut_zSameCharge ); - zMass->Write(); - cout<<"Number of zGoldenSameCharge : "<Integral(60,120)<cd("/"); - - // zGoldenSameChargeNotIso plots........ - TCut cut_zSameChargeNotIso("zSameChargeMass>0 && zSameChargeMass<200 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && ( zSameChargeDau1TrkIso> 3.0 || zSameChargeDau1TrkIso > 3.0) && abs(zSameChargeDau1Eta)<2.1 && abs(zSameChargeDau2Eta)<2.1 && zSameChargeDau1Chi2<1000 && zSameChargeDau2Chi2<1000 && abs(zSameChargeDau1dxyFromBS)<0.2 && abs(zSameChargeDau2dxyFromBS)<0.2 &&(zSameChargeDau1NofStripHits + zSameChargeDau1NofPixelHits)>=0 && (zSameChargeDau2NofStripHits + zSameChargeDau2NofPixelHits)>=0 && zSameChargeDau1NofMuonHits>=0 && zSameChargeDau2NofMuonHits>=0 && (zSameChargeDau1HLTBit==1 || zSameChargeDau2HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargeNotIsoPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zSameChargeMass", cut_zSameChargeNotIso ); - zMass->Write(); - cout<<"Number of zGoldenSameChargeNotIso : "<Integral(60,120)<cd("/"); - - -// zMuTrk plots - TCut cut_zMuTrk("zMuTrkMass>0 && zMuTrkMass<200 && zMuTrkDau1Pt> 20 && zMuTrkDau2Pt>20 && zMuTrkDau1TrkIso< 3.0 && zMuTrkDau2TrkIso < 3.0 && abs(zMuTrkDau1Eta)<2.1 && abs(zMuTrkDau2Eta)<2.1 && zMuTrkDau1Chi2<1000 && zMuTrkDau2TrkChi2<1000 && abs(zMuTrkDau1dxyFromBS)<0.2 && abs(zMuTrkDau2dxyFromBS)<.2 &&(zMuTrkDau1TrkNofStripHits + zMuTrkDau1TrkNofPixelHits)>=0 && (zMuTrkDau2TrkNofStripHits + zMuTrkDau2TrkNofPixelHits)>=0 && zMuTrkDau1NofMuonHits>=0 && (zMuTrkDau1HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneTrackPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuTrkMass", cut_zMuTrk ); - zMass->Write(); - cout<<"Number of zMuTrk : "<Integral(60,120)<cd("/"); - -// zMuTrkMu plots - TCut cut_zMuTrkMu("zMuTrkMuMass>0 && zMuTrkMuMass<200 && zMuTrkMuDau1Pt> 20 && zMuTrkMuDau2Pt>20 && zMuTrkMuDau1TrkIso< 3.0 && zMuTrkMuDau2TrkIso < 3.0 && abs(zMuTrkMuDau1Eta)<2.1 && abs(zMuTrkMuDau1dxyFromBS)<0.2 && abs(zMuTrkMuDau2dxyFromBS)<0.2 && abs(zMuTrkMuDau2Eta)<2.1 && ( (zMuTrkMuDau1HLTBit==1 && zMuTrkMuDau1GlobalMuonBit ==1 ) || ( zMuTrkMuDau2HLTBit==1 && zMuTrkMuDau2GlobalMuonBit ==1))");// zMuTrkMuDau1Chi2<1000 && zMuTrkMuDau2Chi2<1000 && abs(zMuTrkMuDau1dxyFromBS)<0.2 && abs(zMuTrkMuDau2dxyFromBS)<0.2 &&(zMuTrkMuDau1NofStripHits + zMuTrkMuDau1NofPixelHits)>=0 && (zMuTrkMuDau2NofStripHits + zMuTrkMuDau2NofPixelHits)>=0 && zMuTrkMuDau1NofMuonHits>=-1 && zMuTrkMuDau2NofMuonHits>=-1 "); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneTrackerMuonPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuTrkMuMass", cut_zMuTrkMu ); - zMass->Write(); - cout<<"Number of zMuTrkMu : "<Integral(60,120)<cd("/"); - - - - // zMuSta plots - TCut cut_zMuSta("zMuStaMass>0 && zMuStaMass<200 && zMuStaDau1Pt> 20 && zMuStaDau2Pt>20 && zMuStaDau1TrkIso< 3.0 && zMuStaDau2TrkIso < 3.0 && abs(zMuStaDau1Eta)<2.1 && abs(zMuStaDau2Eta)<2.1 && ((zMuStaDau1HLTBit==1 && zMuStaDau1GlobalMuonBit ==1 && abs(zMuStaDau1dxyFromBS)<0.2 ) || ( zMuStaDau2HLTBit==1 && zMuStaDau2GlobalMuonBit ==1 && abs(zMuStaDau2dxyFromBS)<0.2) )");// zMuStaDau1Chi2<1000 && zMuStaDau2Chi2<1000 && abs(zMuStaDau1dxyFromBS)<0.2 && abs(zMuStaDau2dxyFromBS)<0.2 &&(zMuStaDau1NofStripHits + zMuStaDau1NofPixelHits)>=0 && (zMuStaDau2NofStripHits + zMuStaDau2NofPixelHits)>=0 && zMuStaDau1NofMuonHits>=-1 && zMuStaDau2NofMuonHits>=-1 && "); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneStandAloneMuonPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuStaMass", cut_zMuSta ); - zMass->Write(); - cout<<"Number of zMuSta : "<Integral(60,120)<cd("/"); - -// zMuSta plots - TCut cut_zMuMuSta("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && zGoldenDau1dxyFromBS<0.02 && zGoldenDau2dxyFromBS<0.02"); - TDirectory * dir = output_file->mkdir("zmumuSaMassHistogram"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMassSa", cut_zMuMuSta ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - /* - TDirectory * dir = output_file->mkdir("zPlots"); - dir->cd(); - TH1F * zGoldenPt = new TH1F("zGoldenPt", "zGoldenPt", 200, 0, 200); - Events.Project("zGoldenPt", "zGoldenPt", cut_zGolden ); - zGoldenPt->Write(); - delete zGoldenPt; - - - TH1F * zGoldenY = new TH1F("zGoldenY", "zGoldenY", 200, -5, 5); - Events.Project("zGoldenY", "zGoldenY", cut_zGolden ); - zGoldenY->Write(); - delete zGoldenY; - - output_file->cd("/"); - - - - TDirectory * dir = output_file->mkdir("MuPlots"); - dir->cd(); - - - TH1F * muNotTriggeredEta = new TH1F("muNotTriggeredEta", "muNotTriggeredEta", 240, -6, 6.); - TH1F * h2 = new TH1F("h2", "h2", 240, -6, 6.); - - Events.Project("muNotTriggeredEta","zGoldenDau1Eta", "zGoldenDau1HLTBit==0"); - Events.Project("h2","zGoldenDau2Eta", "zGoldenDau2HLTBit==0"); - - muNotTriggeredEta->Add(h2); - muNotTriggeredEta->Write(); - delete muNotTriggeredEta; - delete h2; - - TH1F * zGoldenDauHighPt = new TH1F("zGoldenDauHighPt", "zGoldenDauHighPt", 200, 0, 200); - Events.Project("zGoldenDauHighPt", "max(zGoldenDau1Pt, zGoldenDau2Pt)", cut_zGolden ); - zGoldenDauHighPt->Write(); - delete zGoldenDauHighPt; - - TH1F * zGoldenDauLowPt = new TH1F("zGoldenDauLowPt", "zGoldenDauLowPt", 200, 0, 200); - Events.Project("zGoldenDauLowPt", "min(zGoldenDau1Pt, zGoldenDau2Pt)", cut_zGolden ); - zGoldenDauLowPt->Write(); - delete zGoldenDauLowPt; - - //(mu1.phi -mu2.phi) - TH1F * deltaPhi = new TH1F("deltaPhi", "deltaPhi", 120, 0, 6.); - TH1F * h2 = new TH1F("h2", "h2", 120, 0, 6. ); - TH1F * h3 = new TH1F("h3", "h3", 120, 0, 6. ); - */ - - /* result = phi1 - phi2; -040 while (result > M_PI) result -= 2*M_PI; -041 while (result <= -M_PI) result += 2*M_PI; -042 return result; - */ - /* - Events.Project("deltaPhi", "abs(zGoldenDau1Phi - zGoldenDau2Phi)", "-TMath::Pi() < (zGoldenDau1Phi - zGoldenDau2Phi) < TMath::Pi()" , "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + cut_zGolden); - Events.Project("h2", "abs(zGoldenDau1Phi - zGoldenDau2Phi - 2 * TMath::Pi())", "(zGoldenDau1Phi - zGoldenDau2Phi) > TMath::Pi()" , "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + + cut_zGolden); - Events.Project("h3", "abs(zGoldenDau1Phi - zGoldenDau2Phi + 2 * TMath::Pi())", "(zGoldenDau1Phi - zGoldenDau2Phi) <= -TMath::Pi()", "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + cut_zGolden ); - - deltaPhi->Add(h2, h3); - deltaPhi->Write(); - delete deltaPhi;; - delete h2; - delete h3; - - - - // mu1.eta -mu2.eta - TH1F * deltaEta = new TH1F("deltaEta", "deltaEta", 120, 0, 6.); - Events.Project("deltaEta", "abs(zGoldenDau1Eta - zGoldenDau2Eta)", cut_zGolden ); - deltaEta->Write(); - delete deltaEta; - - TH1F * dua1Phi = new TH1F("dau1Phi", "dau1Phi", 120, -6, 6.); - Events.Project("dau1Phi", "zGoldenDau1Phi" , cut_zGolden); - dau1Phi->Write(); - delete dau1Phi; - - TH1F * dua2Phi = new TH1F("dau2Phi", "dau2Phi", 120, -6, 6.); - Events.Project("dau2Phi", "zGoldenDau2Phi" , cut_zGolden); - dau2Phi->Write(); - delete dau2Phi; - - TH1F * dau1Eta = new TH1F("dua1Eta", "dau1Eta", 120, -6, 6.); - Events.Project("dau1Eta", "zGoldenDau1Eta", cut_zGolden ); - dau1Eta->Write(); - delete dau1Eta; - - TH1F * dau2Eta = new TH1F("dua2Eta", "dau2Eta", 120, -6, 6.); - Events.Project("dau2Eta", "zGoldenDau2Eta" , cut_zGolden); - dau2Eta->Write(); - delete dau2Eta; - - // quality variables - // caveat: I'm requiring isolations - TH1F * dau1Chi2 = new TH1F("dua1Chi2", "dau1Chi2", 1000, 0, 100); - Events.Project("dua1Chi2", "zGoldenDau1Chi2", cut_zGolden ); - dau1Chi2->Write(); - delete dau1Chi2; - - TH1F * dau2Chi2 = new TH1F("dua2Chi2", "dau2Chi2", 1000, 0, 100); - Events.Project("dau2Chi2", "zGoldenDau2Chi2", cut_zGolden ); - dau2Chi2->Write(); - delete dau2Chi2; - - - TH1F * dau1Dxy = new TH1F("dua1Dxy", "dau1Dxy", 500, 0, 5); - Events.Project("dua1Dxy", "zGoldenDau1dxyFromBS", cut_zGolden ); - dau1Dxy->Write(); - delete dau1Dxy; - - TH1F * dau2Dxy = new TH1F("dua2Dxy", "dau2Dxy", 500, 0, 5); - Events.Project("dua2Dxy", "zGoldenDau2dxyFromBS", cut_zGolden ); - dau2Dxy->Write(); - delete dau2Dxy; - - - TH1F * dau1Dz= new TH1F("dua1Dz", "dau1Dz", 500, 0, 20); - Events.Project("dua1Dz", "zGoldenDau1dzFromBS", cut_zGolden ); - dau1Dz->Write(); - delete dau1Dz; - - TH1F * dau2Dz = new TH1F("dua2Dz", "dau2Dz", 500, 0, 20); - Events.Project("dua2Dz", "zGoldenDau2dzFromBS", cut_zGolden); - dau2Dz->Write(); - delete dau2Dz; - */ - /* - TH1F * dau1NofHit = new TH1F("dua1NofHit", "dau1NofHit", 100, -0.5, 99.5); - Events.Project("dua1NofHit", "zGoldenDau1NofHit", cut_zGolden ); - dau1NofHit->Write(); - delete dau1NofHit; - - TH1F * dau2NofHit = new TH1F("dua2NofHit", "dau2NofHit", 100, -0.5, 99.5); - Events.Project("dua2NofHit", "zGoldenDau2NofHit", cut_zGolden ); - dau2NofHit->Write(); - delete dau2NofHit; - */ - /* - TH1F * dau1NofMuCh = new TH1F("dua1NofMuCh", "dau1NofMuCh", 20, -0.5, 19.5); - Events.Project("dua1NofMuCh", "zGoldenDau1NofMuChambers", cut_zGolden ); - dau1NofMuCh->Write(); - delete dau1NofMuCh; - - TH1F * dau2NofMuCh = new TH1F("dua2NofMuCh", "dau2NofMuCh", 20, -0.5, 19.5); - Events.Project("dua2NofMuCh", "zGoldenDau2NofMuChambers", cut_zGolden ); - dau2NofMuCh->Write(); - delete dau2NofMuCh; - - - TH1F * dau1NofMuMatches = new TH1F("dua1NofMuMatches", "dau1NofMuMatches", 20, -0.5, 19.5); - Events.Project("dua1NofMuMatches", "zGoldenDau1NofMuMatches", cut_zGolden ); - dau1NofMuMatches->Write(); - delete dau1NofMuMatches; - - TH1F * dau2NofMuMatches = new TH1F("dua2NofMuMatches", "dau2NofMuMatches", 20, -0.5, 19.5); - Events.Project("dua2NofMuMatches", "zGoldenDau2NofMuMatches", cut_zGolden ); - dau2NofMuMatches->Write(); - delete dau2NofMuMatches; - - TH1F * dau1EmEnergy = new TH1F("dua1EmEnergy", "dau1EmEnergy", 200, -0.1, 19.9); - Events.Project("dua1EmEnergy", "zGoldenDau1MuEnergyEm", cut_zGolden ); - dau1EmEnergy->Write(); - delete dau1EmEnergy; - - TH1F * dau2EmEnergy = new TH1F("dua2EmEnergy", "dau2EmEnergy", 200, -0.1, 19.9); - Events.Project("dua2EmEnergy", "zGoldenDau2MuEnergyEm", cut_zGolden ); - dau2EmEnergy->Write(); - delete dau2EmEnergy; - - TH1F * dau1HadEnergy = new TH1F("dua1HadEnergy", "dau1HadEnergy", 200, -0.1, 19.9); - Events.Project("dua1HadEnergy", "zGoldenDau1MuEnergyHad", cut_zGolden ); - dau1HadEnergy->Write(); - delete dau1HadEnergy; - - TH1F * dau2HadEnergy = new TH1F("dua2HadEnergy", "dau2HadEnergy", 200, -0.1, 19.9); - Events.Project("dua2HadEnergy", "zGoldenDau2MuEnergyHad", cut_zGolden ); - dau2HadEnergy->Write(); - delete dau2HadEnergy; - - - - - TH2F * MuChambersVsMuMatches = new TH2F("MuChambersVsMuMatches", "MuChambersVsMuMatches", 21, -0.5, 20.5, 21, -0.5, 20.5); - TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events.Project("MuChambersVsMuMatches", "zGoldenDau1NofMuChambers:zGoldenDau1NofMuMatches", cut_zGolden); - Events.Project("hh2", "zGoldenDau2NofMuChambers:zGoldenDau2NofMuMatches", cut_zGolden); - - MuChambersVsMuMatches->Add(hh2); - MuChambersVsMuMatches->Write(); - MuChambersVsMuMatches->SetDrawOption("Box"); - // MuChambersVsMuMatches->Draw("BOX"); - delete MuChambersVsMuMatches; - delete hh2; - output_file->cd("/"); - - TDirectory * dir = output_file->mkdir("TrkPlots"); - dir->cd(); - - */ - - /* TH1F * nofHitTrk = new TH1F("nofHitTrk", "nofHitTrk", 100, -0.5, 99.5); - Events.Project("nofHitTrk", "zMuTrkDau2NofHitTk", cut_zMuTrk ); - nofHitTrk->Write(); - delete nofHitTrk; - */ - /* - TH1F * trkChi2 = new TH1F("trkChi2", "trkChi2", 100, -0.5, 99.5); - Events.Project("trkChi2", "zMuTrkDau2Chi2", cut_zMuTrk ); - trkChi2->Write(); - delete trkChi2; - - - output_file->cd("/"); - - - - TDirectory * dir = output_file->mkdir("StaPlots"); - dir->cd(); - - // sta as zDaudxyFromBS=-1 by construction.... - - TH1F * staNofMuCh = new TH1F("staNofMuCh", "staNofMuCh", 20, -0.5, 19.5); - TH1F * h2 = new TH1F("h2", "h2", 20, -0.5, 19.5); - Events.Project("staNofMuCh", "zMuStaDau1NofMuChambers", cut_zMuSta + "zMuStaDau1dxyFromBS==-1" ); - Events.Project("h2", "zMuStaDau2NofMuChambers", cut_zMuSta + "zMuStaDau2dxyFromBS==-1" ); - staNofMuCh->Add(h2); - staNofMuCh->Write(); - delete staNofMuCh; - delete h2; - - TH1F * staNofMuMatches = new TH1F("staNofMuMatches", "staNofMuMatches", 20, -0.5, 19.5); - TH1F * h2 = new TH1F("h2", "h2", 20, -0.5, 19.5); - Events.Project("staNofMuMatches", "zMuStaDau1NofMuMatches", cut_zMuSta + "zMuStaDau1dxyFromBS==-1" ); - Events.Project("h2", "zMuStaDau2NofMuMatches", cut_zMuSta + "zMuStaDau2dxyFromBS==-1" ); - staNofMuMatches->Add(h2); - staNofMuMatches->Write(); - delete staNofMuMatches; - delete h2; - - TH2F * MuChambersVsMuMatches= new TH2F("MuChambersVsMuMatches", "MuChambersVsMuMatches", 21, -0.5, 20.5, 21, -0.5, 20.5); - TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events.Project("MuChambersVsMuMatches", "zMuStaDau1NofMuChambers:zMuStaDau1NofMuMatches", cut_zMuSta); - Events.Project("hh2", "zMuStaDau2NofMuChambers:zMuStaDau2NofMuMatches", cut_zMuSta); - MuChambersVsMuMatches->Add(hh2); - MuChambersVsMuMatches->SetDrawOption("Box"); - MuChambersVsMuMatches->Write(); - delete MuChambersVsMuMatches; - delete hh2; - output_file->cd("/"); - - // isolations... - TDirectory * dir = output_file->mkdir("IsoPlots"); - dir->cd(); - - - TH1F * TrkIsoPt20= new TH1F("TrkIsoPt20", "TrkIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt20", "zGoldenDau1TrkIso" , "zGoldenDau2Pt>20"); - Events.Project("h2", "zGoldenDau2TrkIso", "zGoldenDau2Pt>20" ); - TrkIsoPt20->Add(h2); - TrkIsoPt20->Write(); - delete TrkIsoPt20; - delete h2; - - TH1F * EcalIsoPt20 = new TH1F("EcalIsoPt20", "EcalIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt20", "zGoldenDau1EcalIso" , "zGoldenDau1Pt>20"); - Events.Project("h2", "zGoldenDau2EcalIso", "zGoldenDau2Pt>20" ); - EcalIsoPt20->Add(h2); - EcalIsoPt20->Write(); - delete EcalIsoPt20; - delete h2; - - TH1F * HcalIsoPt20 = new TH1F("HcalIsoPt20", "HcalIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt20", "zGoldenDau1HcalIso" , "zGoldenDau1Pt>20" ); - Events.Project("h2", "zGoldenDau2HcalIso" , "zGoldenDau2Pt>20"); - HcalIsoPt20->Add(h2); - HcalIsoPt20->Write(); - delete HcalIsoPt20; - delete h2; - - TH1F * TrkIsoPt15= new TH1F("TrkIsoPt15", "TrkIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt15", "zGoldenDau1TrkIso" , "zGoldenDau1Pt>20"); - Events.Project("h2", "zGoldenDau2TrkIso", "zGoldenDau2Pt>15" ); - TrkIsoPt15->Add(h2); - TrkIsoPt15->Write(); - delete TrkIsoPt15; - delete h2; - - TH1F * EcalIsoPt15 = new TH1F("EcalIsoPt15", "EcalIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt15", "zGoldenDau1EcalIso" , "zGoldenDau1Pt>20"); - Events.Project("h2", "zGoldenDau2EcalIso", "zGoldenDau2Pt>15" ); - EcalIsoPt15->Add(h2); - - EcalIsoPt15->Write(); - delete EcalIsoPt15; - delete h2; - - TH1F * HcalIsoPt15 = new TH1F("HcalIsoPt15", "HcalIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt15", "zGoldenDau1HcalIso" , "zGoldenDau1Pt>20" ); - Events.Project("h2", "zGoldenDau2HcalIso" , "zGoldenDau2Pt>15"); - HcalIsoPt15->Add(h2); - - HcalIsoPt15->Write(); - delete HcalIsoPt15; - delete h2; - output_file->cd("/"); - - */ - - output_file->Close(); - - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/plotsAfterCuts_OneLeg.C b/ElectroWeakAnalysis/ZMuMu/test/macros/plotsAfterCuts_OneLeg.C deleted file mode 100644 index 82f9309933091..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/plotsAfterCuts_OneLeg.C +++ /dev/null @@ -1,543 +0,0 @@ -#include "TFile.h" -#include "TH1F.h" -#include "TTree.h" -#include "TAxis.h" -#include "TCanvas.h" -//#if !defined(__CINT__) && !defined(__MAKECINT__) -#include -#include -//#endif - -void setGraphics(TH1F *histo){ - - histo->SetFillColor(kAzure+7); - //histo->SetLineWidth(2); - histo->SetLineColor(kBlue+1); -} - - - - -void plotsAfterCuts_OneLeg(){ - - gStyle->SetOptStat(); - gROOT->SetStyle("Plain"); - using namespace std; - - // #include ; - - // TFile *file = TFile::Open("rfio:/castor/cern.ch/user/d/degrutto/incl15WithBsPv/NtupleLoose_test_inclu15_1_2.root"); - // TFile *file = TFile::Open("../NutpleLooseTestNew_oneshot_all_10_1.root"); -//TFile *file = TFile::Open("rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/NtupleLoose_test.root"); -// TTree * Events = dynamic_cast< TTree *> (file->Get("Events")); - - TChain Events("Events"); - // one need 130 events... each file has 1000 ev - Events.Add("../zmmNtuple/NtupleLooseTestNew.root"); - /* Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_1_None.root"); - Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_2_None.root"); - Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_3_None.root"); - Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_4_None.root"); - Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_5_None.root"); - Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_6_None.root"); - Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_7_None.root"); - Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_8_None.root"); - Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_9_None.root"); - Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_10_None.root"); - Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_11_None.root"); - Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_12_None.root"); - Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_13_None.root"); - */ - - - - TFile * output_file = TFile::Open("histoZmm_OneCut.root", "RECREATE"); - // TFile * output_file = TFile::Open("histo_test.root", "RECREATE"); - - // zGolden plots - TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ((zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - // Events.Draw("zGoldenMass"); - Events.Project("zMass", "zGoldenMass", cut_zGolden ); - cout<<"Number of zGoldenAA : "<GetEntries()<Write(); - delete zMass; - - - TCut cut_zGoldenPt15("zGoldenMass>20 && zGoldenDau1Pt> 15 && zGoldenDau2Pt>15 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ((zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1)"); - dir->cd(); - - TH1F * zMassPt15 = new TH1F("zMassPt15", "zMassPt15", 200, 0, 200); - Events.Project("zMassPt15", "zGoldenMass", cut_zGoldenPt15 ); - setGraphics(zMassPt15); - cout<<"Number of zGoldenPt15 : "<GetEntries()<Write(); - delete zMassPt15; - - - - output_file->cd("/"); - - TCut cut2_zGolden1HLT("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ( (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || ((zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10)) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && ( zGoldenDau1HLTBit ==0 || zGoldenDau2HLTBit ==0)"); - TDirectory * dir = output_file->mkdir("goodZToMuMu1HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGolden1HLT ); - cout<<"Number of zGolden1HLT : "<GetEntries()<Write(); - delete zMass; - //zMass2->Write(); - - output_file->cd("/"); - - - output_file->cd("/"); - - TCut cut2_zGoldenAB1HLT("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && ( abs(zGoldenDau1Eta)>2.1 || abs(zGoldenDau2Eta)>2.1 ) && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ((zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("goodZToMuMuAB1HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGoldenAB1HLT ); - cout<<"Number of zGoldenAB1HLT : "<GetEntries()<Write(); - delete zMass; - //zMass2->Write(); - - output_file->cd("/"); - - - TCut cut2_zGolden2HLT("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ((zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && ( zGoldenDau1HLTBit ==1 && zGoldenDau2HLTBit ==1)"); - - TDirectory * dir = output_file->mkdir("goodZToMuMu2HLTPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut2_zGolden2HLT ); - zMass->Write(); - cout<<"Number of zGolden2HLT : "<GetEntries()<cd("/"); - - - // zGoldenOneNotIso plots - TCut cut_zGoldenOneNotIso("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && ( (zGoldenDau1TrkIso> 3.0 && zGoldenDau2TrkIso < 3.0) || (zGoldenDau2TrkIso> 3.0 && zGoldenDau1TrkIso < 3.0)) && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ((zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("oneNonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut_zGoldenOneNotIso ); - zMass->Write(); - cout<<"Number of zGoldenOneNotIso : "<GetEntries()<cd("/"); - -// // zGoldenTwoNotIso plots - TCut cut_zGoldenTwoNotIso("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && (zGoldenDau1TrkIso> 3.0 && zGoldenDau2TrkIso > 3.0) && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ((zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("twoNonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass","zGoldenMass", cut_zGoldenTwoNotIso ); - zMass->Write(); - cout<<"Number of zGoldenTwoNotIso : "<GetEntries()<cd("/"); - - // zGoldenNotIso plots - TCut cut_zGoldenNotIso("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && (zGoldenDau1TrkIso> 3.0 || zGoldenDau2TrkIso > 3.0) && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ((zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)"); - TDirectory * dir = output_file->mkdir("nonIsolatedZToMuMuPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMass", cut_zGoldenNotIso ); - zMass->Write() ; - cout<<"Number of zGoldenNotIso : "<GetEntries()<cd("/"); - - // zGoldenSameCharge plots........ - TCut cut_zSameCharge("zSameChargeMass>60 && zSameChargeMass<120 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && zSameChargeDau1TrkIso< 3.0 && zSameChargeDau2TrkIso < 3.0 && abs(zSameChargeDau1Eta)<2.1 && abs(zSameChargeDau2Eta)<2.1 && zSameChargeDau1Chi2<10 && zSameChargeDau2Chi2<10 && abs(zSameChargeDau1dxyFromBS)<0.2 && abs(zSameChargeDau2dxyFromBS)<0.2 && ((zSameChargeDau1NofStripHits + zSameChargeDau1NofPixelHits)>=10 || (zSameChargeDau2NofStripHits + zSameChargeDau2NofPixelHits)>=10) && (zSameChargeDau1NofMuonHits>0 || zSameChargeDau2NofMuonHits>0) && (zSameChargeDau1HLTBit==1 || zSameChargeDau2HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargePlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zSameChargeMass", cut_zSameCharge ); - zMass->Write(); - cout<<"Number of zGoldenSameCharge : "<GetEntries()<cd("/"); - - // zGoldenSameChargeNotIso plots........ - TCut cut_zSameChargeNotIso("zSameChargeMass>60 && zSameChargeMass<120 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && ( zSameChargeDau1TrkIso> 3.0 || zSameChargeDau2TrkIso > 3.0) && abs(zSameChargeDau1Eta)<2.1 && abs(zSameChargeDau2Eta)<2.1 && zSameChargeDau1Chi2<10 && zSameChargeDau2Chi2<10 && abs(zSameChargeDau1dxyFromBS)<0.2 && abs(zSameChargeDau2dxyFromBS)<0.2 && ( (zSameChargeDau1NofStripHits + zSameChargeDau1NofPixelHits)>=10 || (zSameChargeDau2NofStripHits + zSameChargeDau2NofPixelHits)>=10) && (zSameChargeDau1NofMuonHits>0 || zSameChargeDau2NofMuonHits>0) && (zSameChargeDau1HLTBit==1 || zSameChargeDau2HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargeNotIsoPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zSameChargeMass", cut_zSameChargeNotIso ); - zMass->Write(); - cout<<"Number of zGoldenSameChargeNotIso : "<GetEntries()<cd("/"); - - -// zMuTrk plots - TCut cut_zMuTrk("zMuTrkMass>60 && zMuTrkMass<120 && zMuTrkDau1Pt> 20 && zMuTrkDau2Pt>20 && zMuTrkDau1TrkIso< 3.0 && zMuTrkDau2TrkIso < 3.0 && abs(zMuTrkDau1Eta)<2.1 && abs(zMuTrkDau2Eta)<2.1 && (zMuTrkDau1Chi2<10) && abs(zMuTrkDau1dxyFromBS)<0.2 && abs(zMuTrkDau2dxyFromBS)<0.2 && ((zMuTrkDau1TrkNofStripHits + zMuTrkDau1TrkNofPixelHits)>=10) && (zMuTrkDau1NofMuonHits>0) && (zMuTrkDau1HLTBit==1) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneTrackPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuTrkMass", cut_zMuTrk ); - zMass->Write(); - cout<<"Number of zMuTrk : "<GetEntries()<cd("/"); - -// zMuTrkMu plots - TCut cut_zMuTrkMu("zMuTrkMuMass>60 && zMuTrkMuMass<120 && zMuTrkMuDau1Pt>20 && zMuTrkMuDau2Pt>20 && zMuTrkMuDau1TrkIso< 3.0 && zMuTrkMuDau2TrkIso<3.0 && abs(zMuTrkMuDau1Eta)<2.1 && abs(zMuTrkMuDau2Eta)<2.1 && (( zMuTrkMuDau1Chi2<10 && zMuTrkMuDau1GlobalMuonBit==1 ) || ( zMuTrkMuDau2Chi2<10 && zMuTrkMuDau2GlobalMuonBit==1)) && abs(zMuTrkMuDau1dxyFromBS)<0.2 && abs(zMuTrkMuDau2dxyFromBS)<0.2 && (( zMuTrkMuDau1GlobalMuonBit==1 && (zMuTrkMuDau1TrkNofStripHits + zMuTrkMuDau1TrkNofPixelHits)>=10) || ( zMuTrkMuDau2GlobalMuonBit==1 && (zMuTrkMuDau2TrkNofStripHits + zMuTrkMuDau2TrkNofPixelHits)>=10) ) && (( zMuTrkMuDau1GlobalMuonBit==1 && zMuTrkMuDau1NofMuonHits>0) || ( zMuTrkMuDau2GlobalMuonBit==1 && zMuTrkMuDau2NofMuonHits>0 )) && ( (zMuTrkMuDau1HLTBit==1 && zMuTrkMuDau1GlobalMuonBit==1 ) || (zMuTrkMuDau2HLTBit==1 && zMuTrkMuDau2GlobalMuonBit==1 )) "); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneTrackerMuonPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuTrkMuMass", cut_zMuTrkMu ); - zMass->Write(); - cout<<"Number of zMuTrkMu : "<GetEntries()<cd("/"); - - - - // zMuSta plots - TCut cut_zMuSta("zMuStaMass>60 && zMuStaMass<120 && zMuStaDau1Pt>20 && zMuStaDau2Pt>20 && zMuStaDau1TrkIso< 3.0 && zMuStaDau2TrkIso<3.0 && abs(zMuStaDau1Eta)<2.1 && abs(zMuStaDau2Eta)<2.1 && (( zMuStaDau1Chi2<10 && zMuStaDau1GlobalMuonBit==1 ) || ( zMuStaDau2Chi2<10 && zMuStaDau2GlobalMuonBit==1)) && abs(zMuStaDau1dxyFromBS)<0.2 && abs(zMuStaDau2dxyFromBS)<0.2 && (( zMuStaDau1GlobalMuonBit==1 && (zMuStaDau1TrkNofStripHits + zMuStaDau1TrkNofPixelHits)>=10) || ( zMuStaDau2GlobalMuonBit==1 && (zMuStaDau2TrkNofStripHits + zMuStaDau2TrkNofPixelHits)>=10) ) && (( zMuStaDau1GlobalMuonBit==1 && zMuStaDau1NofMuonHits>0) || ( zMuStaDau2GlobalMuonBit==1 && zMuStaDau2NofMuonHits>0 )) && ( (zMuStaDau1HLTBit==1 && zMuStaDau1GlobalMuonBit==1 ) || (zMuStaDau2HLTBit==1 && zMuStaDau2GlobalMuonBit==1 )) "); - - TDirectory * dir = output_file->mkdir("goodZToMuMuOneStandAloneMuonPlots"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zMuStaMass", cut_zMuSta ); - zMass->Write(); - cout<<"Number of zMuSta : "<GetEntries()<cd("/"); - -// zMuSta plots - TCut cut_zMuMuSta("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && zGoldenDau1Eta<2.1 && zGoldenDau2Eta<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && zGoldenDau1dxyFromBS<0.02 && zGoldenDau2dxyFromBS<0.02"); - TDirectory * dir = output_file->mkdir("zmumuSaMassHistogram"); - dir->cd(); - TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200); - Events.Project("zMass", "zGoldenMassSa", cut_zMuMuSta ); - zMass->Write(); - delete zMass; - output_file->cd("/"); - - - TDirectory * dir = output_file->mkdir("zPlots"); - dir->cd(); - TH1F * zGoldenPt = new TH1F("zGoldenPt", "zGoldenPt", 200, 0, 200); - Events.Project("zGoldenPt", "zGoldenPt", cut_zGolden ); - zGoldenPt->Write(); - delete zGoldenPt; - - - TH1F * zGoldenY = new TH1F("zGoldenY", "zGoldenY", 200, -5, 5); - Events.Project("zGoldenY", "zGoldenY", cut_zGolden ); - zGoldenY->Write(); - delete zGoldenY; - - output_file->cd("/"); - - - - TDirectory * dir = output_file->mkdir("MuPlots"); - dir->cd(); - - - TH1F * muNotTriggeredEta = new TH1F("muNotTriggeredEta", "muNotTriggeredEta", 240, -6, 6.); - TH1F * h2 = new TH1F("h2", "h2", 240, -6, 6.); - - Events.Project("muNotTriggeredEta","zGoldenDau1Eta", "zGoldenDau1HLTBit==0"); - Events.Project("h2","zGoldenDau2Eta", "zGoldenDau2HLTBit==0"); - - muNotTriggeredEta->Add(h2); - muNotTriggeredEta->Write(); - delete muNotTriggeredEta; - delete h2; - - TH1F * zGoldenDauHighPt = new TH1F("zGoldenDauHighPt", "zGoldenDauHighPt", 200, 0, 200); - Events.Project("zGoldenDauHighPt", "max(zGoldenDau1Pt, zGoldenDau2Pt)", cut_zGolden ); - zGoldenDauHighPt->Write(); - delete zGoldenDauHighPt; - - TH1F * zGoldenDauLowPt = new TH1F("zGoldenDauLowPt", "zGoldenDauLowPt", 200, 0, 200); - Events.Project("zGoldenDauLowPt", "min(zGoldenDau1Pt, zGoldenDau2Pt)", cut_zGolden ); - zGoldenDauLowPt->Write(); - delete zGoldenDauLowPt; - - //(mu1.phi -mu2.phi) - TH1F * deltaPhi = new TH1F("deltaPhi", "deltaPhi", 120, 0, 6.); - TH1F * h2 = new TH1F("h2", "h2", 120, 0, 6. ); - TH1F * h3 = new TH1F("h3", "h3", 120, 0, 6. ); - - /* result = phi1 - phi2; -040 while (result > M_PI) result -= 2*M_PI; -041 while (result <= -M_PI) result += 2*M_PI; -042 return result; - */ - - Events.Project("deltaPhi", "abs(zGoldenDau1Phi - zGoldenDau2Phi)", "-TMath::Pi() < (zGoldenDau1Phi - zGoldenDau2Phi) < TMath::Pi()" , "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + cut_zGolden); - Events.Project("h2", "abs(zGoldenDau1Phi - zGoldenDau2Phi - 2 * TMath::Pi())", "(zGoldenDau1Phi - zGoldenDau2Phi) > TMath::Pi()" , "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + + cut_zGolden); - Events.Project("h3", "abs(zGoldenDau1Phi - zGoldenDau2Phi + 2 * TMath::Pi())", "(zGoldenDau1Phi - zGoldenDau2Phi) <= -TMath::Pi()", "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + cut_zGolden ); - - deltaPhi->Add(h2, h3); - deltaPhi->Write(); - delete deltaPhi;; - delete h2; - delete h3; - - - - // mu1.eta -mu2.eta - TH1F * deltaEta = new TH1F("deltaEta", "deltaEta", 120, 0, 6.); - Events.Project("deltaEta", "abs(zGoldenDau1Eta - zGoldenDau2Eta)", cut_zGolden ); - deltaEta->Write(); - delete deltaEta; - - TH1F * dua1Phi = new TH1F("dau1Phi", "dau1Phi", 120, -6, 6.); - Events.Project("dau1Phi", "zGoldenDau1Phi" , cut_zGolden); - dau1Phi->Write(); - delete dau1Phi; - - TH1F * dua2Phi = new TH1F("dau2Phi", "dau2Phi", 120, -6, 6.); - Events.Project("dau2Phi", "zGoldenDau2Phi" , cut_zGolden); - dau2Phi->Write(); - delete dau2Phi; - - TH1F * dau1Eta = new TH1F("dua1Eta", "dau1Eta", 120, -6, 6.); - Events.Project("dau1Eta", "zGoldenDau1Eta", cut_zGolden ); - dau1Eta->Write(); - delete dau1Eta; - - TH1F * dau2Eta = new TH1F("dua2Eta", "dau2Eta", 120, -6, 6.); - Events.Project("dau2Eta", "zGoldenDau2Eta" , cut_zGolden); - dau2Eta->Write(); - delete dau2Eta; - - // quality variables - // caveat: I'm requiring isolations - TH1F * dau1Chi2 = new TH1F("dua1Chi2", "dau1Chi2", 1000, 0, 100); - Events.Project("dua1Chi2", "zGoldenDau1Chi2", cut_zGolden ); - dau1Chi2->Write(); - delete dau1Chi2; - - TH1F * dau2Chi2 = new TH1F("dua2Chi2", "dau2Chi2", 1000, 0, 100); - Events.Project("dau2Chi2", "zGoldenDau2Chi2", cut_zGolden ); - dau2Chi2->Write(); - delete dau2Chi2; - - - TH1F * dau1Dxy = new TH1F("dua1Dxy", "dau1Dxy", 500, 0, 5); - Events.Project("dua1Dxy", "zGoldenDau1dxyFromBS", cut_zGolden ); - dau1Dxy->Write(); - delete dau1Dxy; - - TH1F * dau2Dxy = new TH1F("dua2Dxy", "dau2Dxy", 500, 0, 5); - Events.Project("dua2Dxy", "zGoldenDau2dxyFromBS", cut_zGolden ); - dau2Dxy->Write(); - delete dau2Dxy; - - - TH1F * dau1Dz= new TH1F("dua1Dz", "dau1Dz", 500, 0, 20); - Events.Project("dua1Dz", "zGoldenDau1dzFromBS", cut_zGolden ); - dau1Dz->Write(); - delete dau1Dz; - - TH1F * dau2Dz = new TH1F("dua2Dz", "dau2Dz", 500, 0, 20); - Events.Project("dua2Dz", "zGoldenDau2dzFromBS", cut_zGolden); - dau2Dz->Write(); - delete dau2Dz; - - /* - TH1F * dau1NofHit = new TH1F("dua1NofHit", "dau1NofHit", 100, -0.5, 99.5); - Events.Project("dua1NofHit", "zGoldenDau1NofHit", cut_zGolden ); - dau1NofHit->Write(); - delete dau1NofHit; - - TH1F * dau2NofHit = new TH1F("dua2NofHit", "dau2NofHit", 100, -0.5, 99.5); - Events.Project("dua2NofHit", "zGoldenDau2NofHit", cut_zGolden ); - dau2NofHit->Write(); - delete dau2NofHit; - */ - - TH1F * dau1NofMuCh = new TH1F("dua1NofMuCh", "dau1NofMuCh", 20, -0.5, 19.5); - Events.Project("dua1NofMuCh", "zGoldenDau1NofMuChambers", cut_zGolden ); - dau1NofMuCh->Write(); - delete dau1NofMuCh; - - TH1F * dau2NofMuCh = new TH1F("dua2NofMuCh", "dau2NofMuCh", 20, -0.5, 19.5); - Events.Project("dua2NofMuCh", "zGoldenDau2NofMuChambers", cut_zGolden ); - dau2NofMuCh->Write(); - delete dau2NofMuCh; - - - TH1F * dau1NofMuMatches = new TH1F("dua1NofMuMatches", "dau1NofMuMatches", 20, -0.5, 19.5); - Events.Project("dua1NofMuMatches", "zGoldenDau1NofMuMatches", cut_zGolden ); - dau1NofMuMatches->Write(); - delete dau1NofMuMatches; - - TH1F * dau2NofMuMatches = new TH1F("dua2NofMuMatches", "dau2NofMuMatches", 20, -0.5, 19.5); - Events.Project("dua2NofMuMatches", "zGoldenDau2NofMuMatches", cut_zGolden ); - dau2NofMuMatches->Write(); - delete dau2NofMuMatches; - - TH1F * dau1EmEnergy = new TH1F("dua1EmEnergy", "dau1EmEnergy", 200, -0.1, 19.9); - Events.Project("dua1EmEnergy", "zGoldenDau1MuEnergyEm", cut_zGolden ); - dau1EmEnergy->Write(); - delete dau1EmEnergy; - - TH1F * dau2EmEnergy = new TH1F("dua2EmEnergy", "dau2EmEnergy", 200, -0.1, 19.9); - Events.Project("dua2EmEnergy", "zGoldenDau2MuEnergyEm", cut_zGolden ); - dau2EmEnergy->Write(); - delete dau2EmEnergy; - - TH1F * dau1HadEnergy = new TH1F("dua1HadEnergy", "dau1HadEnergy", 200, -0.1, 19.9); - Events.Project("dua1HadEnergy", "zGoldenDau1MuEnergyHad", cut_zGolden ); - dau1HadEnergy->Write(); - delete dau1HadEnergy; - - TH1F * dau2HadEnergy = new TH1F("dua2HadEnergy", "dau2HadEnergy", 200, -0.1, 19.9); - Events.Project("dua2HadEnergy", "zGoldenDau2MuEnergyHad", cut_zGolden ); - dau2HadEnergy->Write(); - delete dau2HadEnergy; - - - - - TH2F * MuChambersVsMuMatches = new TH2F("MuChambersVsMuMatches", "MuChambersVsMuMatches", 21, -0.5, 20.5, 21, -0.5, 20.5); - TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events.Project("MuChambersVsMuMatches", "zGoldenDau1NofMuChambers:zGoldenDau1NofMuMatches", cut_zGolden); - Events.Project("hh2", "zGoldenDau2NofMuChambers:zGoldenDau2NofMuMatches", cut_zGolden); - - MuChambersVsMuMatches->Add(hh2); - MuChambersVsMuMatches->Write(); - MuChambersVsMuMatches->SetDrawOption("Box"); - // MuChambersVsMuMatches->Draw("BOX"); - delete MuChambersVsMuMatches; - delete hh2; - output_file->cd("/"); - - TDirectory * dir = output_file->mkdir("TrkPlots"); - dir->cd(); - - - - /* TH1F * nofHitTrk = new TH1F("nofHitTrk", "nofHitTrk", 100, -0.5, 99.5); - Events.Project("nofHitTrk", "zMuTrkDau2NofHitTk", cut_zMuTrk ); - nofHitTrk->Write(); - delete nofHitTrk; - */ - - TH1F * trkChi2 = new TH1F("trkChi2", "trkChi2", 100, -0.5, 99.5); - Events.Project("trkChi2", "zMuTrkDau2Chi2", cut_zMuTrk ); - trkChi2->Write(); - delete trkChi2; - - - output_file->cd("/"); - - - - TDirectory * dir = output_file->mkdir("StaPlots"); - dir->cd(); - - // sta as zDaudxyFromBS=-1 by construction.... - - TH1F * staNofMuCh = new TH1F("staNofMuCh", "staNofMuCh", 20, -0.5, 19.5); - TH1F * h2 = new TH1F("h2", "h2", 20, -0.5, 19.5); - Events.Project("staNofMuCh", "zMuStaDau1NofMuChambers", cut_zMuSta + "zMuStaDau1dxyFromBS==-1" ); - Events.Project("h2", "zMuStaDau2NofMuChambers", cut_zMuSta + "zMuStaDau2dxyFromBS==-1" ); - staNofMuCh->Add(h2); - staNofMuCh->Write(); - delete staNofMuCh; - delete h2; - - TH1F * staNofMuMatches = new TH1F("staNofMuMatches", "staNofMuMatches", 20, -0.5, 19.5); - TH1F * h2 = new TH1F("h2", "h2", 20, -0.5, 19.5); - Events.Project("staNofMuMatches", "zMuStaDau1NofMuMatches", cut_zMuSta + "zMuStaDau1dxyFromBS==-1" ); - Events.Project("h2", "zMuStaDau2NofMuMatches", cut_zMuSta + "zMuStaDau2dxyFromBS==-1" ); - staNofMuMatches->Add(h2); - staNofMuMatches->Write(); - delete staNofMuMatches; - delete h2; - - TH2F * MuChambersVsMuMatches= new TH2F("MuChambersVsMuMatches", "MuChambersVsMuMatches", 21, -0.5, 20.5, 21, -0.5, 20.5); - TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events.Project("MuChambersVsMuMatches", "zMuStaDau1NofMuChambers:zMuStaDau1NofMuMatches", cut_zMuSta); - Events.Project("hh2", "zMuStaDau2NofMuChambers:zMuStaDau2NofMuMatches", cut_zMuSta); - MuChambersVsMuMatches->Add(hh2); - MuChambersVsMuMatches->SetDrawOption("Box"); - MuChambersVsMuMatches->Write(); - delete MuChambersVsMuMatches; - delete hh2; - output_file->cd("/"); - - // isolations... - TDirectory * dir = output_file->mkdir("IsoPlots"); - dir->cd(); - - - TH1F * TrkIsoPt20= new TH1F("TrkIsoPt20", "TrkIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt20", "zGoldenDau1TrkIso" , "zGoldenDau2Pt>20"); - Events.Project("h2", "zGoldenDau2TrkIso", "zGoldenDau2Pt>20" ); - TrkIsoPt20->Add(h2); - TrkIsoPt20->Write(); - delete TrkIsoPt20; - delete h2; - - TH1F * EcalIsoPt20 = new TH1F("EcalIsoPt20", "EcalIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt20", "zGoldenDau1EcalIso" , "zGoldenDau1Pt>20"); - Events.Project("h2", "zGoldenDau2EcalIso", "zGoldenDau2Pt>20" ); - EcalIsoPt20->Add(h2); - EcalIsoPt20->Write(); - delete EcalIsoPt20; - delete h2; - - TH1F * HcalIsoPt20 = new TH1F("HcalIsoPt20", "HcalIsoPt20", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt20", "zGoldenDau1HcalIso" , "zGoldenDau1Pt>20" ); - Events.Project("h2", "zGoldenDau2HcalIso" , "zGoldenDau2Pt>20"); - HcalIsoPt20->Add(h2); - HcalIsoPt20->Write(); - delete HcalIsoPt20; - delete h2; - - TH1F * TrkIsoPt15= new TH1F("TrkIsoPt15", "TrkIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt15", "zGoldenDau1TrkIso" , "zGoldenDau1Pt>20"); - Events.Project("h2", "zGoldenDau2TrkIso", "zGoldenDau2Pt>15" ); - TrkIsoPt15->Add(h2); - TrkIsoPt15->Write(); - delete TrkIsoPt15; - delete h2; - - TH1F * EcalIsoPt15 = new TH1F("EcalIsoPt15", "EcalIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt15", "zGoldenDau1EcalIso" , "zGoldenDau1Pt>20"); - Events.Project("h2", "zGoldenDau2EcalIso", "zGoldenDau2Pt>15" ); - EcalIsoPt15->Add(h2); - - EcalIsoPt15->Write(); - delete EcalIsoPt15; - delete h2; - - TH1F * HcalIsoPt15 = new TH1F("HcalIsoPt15", "HcalIsoPt15", 200, 0, 20); - TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20); - Events.Project("TkIsoPt15", "zGoldenDau1HcalIso" , "zGoldenDau1Pt>20" ); - Events.Project("h2", "zGoldenDau2HcalIso" , "zGoldenDau2Pt>15"); - HcalIsoPt15->Add(h2); - - HcalIsoPt15->Write(); - delete HcalIsoPt15; - delete h2; - output_file->cd("/"); - - - - output_file->Close(); - - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/pulls.C b/ElectroWeakAnalysis/ZMuMu/test/macros/pulls.C deleted file mode 100644 index f9ee37c79d06f..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/pulls.C +++ /dev/null @@ -1,93 +0,0 @@ -/*************************/ -/* */ -/* author: Pasquale Noli */ -/* INFN Naples */ -/* macro to save the eps */ -/* of pulls */ -/* */ -/*************************/ - -{ - TFile *f = TFile::Open("fitResult.root"); - TH1D frameYield("frameYield", "Yield", 100, -10, 10); - TH1D frameTrk("frameTrk", "track eff.", 100, -10, 10); - TH1D frameSa("frameSa", "stand-alone eff.", 100, -10, 10); - TH1D frameIso("frameIso", "isolation eff.", 100, -10, 10); - TH1D frameHlt("frameHlt", "HLT eff.", 100, -10, 10); - TH1D frameErrYield("frameErrYield", "Err Yield", 100, 0, 100); - TH1D frameErrTrk("frameErrTrk", "Err track eff.", 100, 0, .01); - TH1D frameErrSa("frameErrSa", "Err stand-alone eff.", 100, 0, .01); - TH1D frameErrIso("frameErrIso", "Err isolation eff.", 100, 0, .01); - TH1D frameErrHlt("frameErrHlt", "Err HLT eff.", 100, 0, .01); - TH1D frameChi2("frameChi2", "chi2", 100, 0, 10); - - tree->Project("frameYield","(Y-Y_true)/dY", "abs((Y - Y_true)/dY)>5.e-3"); - tree->Project("frameTrk","(Tk-Tk_true)/dTk", "abs((Tk-Tk_true)/dTk)>5.e-3"); - tree->Project("frameSa","(Sa-Sa_true)/dSa", "abs((Sa-Sa_true)/dSa)>5.e-3"); - tree->Project("frameIso", "(Iso-Iso_true)/dIso", "abs((Iso-Iso_true)/dIso)>5.e-3"); - tree->Project("frameHlt", "(Hlt-Hlt_true)/dHlt", "abs((Hlt-Hlt_true)/dHlt)>5.e-3"); - - tree->Project("frameErrYield","dY", "abs(dY)>5.e-5"); - tree->Project("frameErrTrk","dTk", "abs(dTk)>5.e-5"); - tree->Project("frameErrSa","dSa", "abs(dSa)>5.e-5"); - tree->Project("frameErrIso", "dIso", "abs(dIso)>5.e-5"); - tree->Project("frameErrHlt", "dHlt", "abs(dHlt)>5.e-5"); - tree->Project("frameChi2", "chi2", "abs(chi2)>5.e-3"); - - - - frameYield.Fit("gaus"); - frameTrk.Fit("gaus"); - frameSa.Fit("gaus"); - frameIso.Fit("gaus"); - frameHlt.Fit("gaus"); - TCanvas *c1 = new TCanvas("c1","pulls",10,10,900,900); - gStyle->SetOptStat(1111111); - gStyle->SetStatFontSize(0.04); - gStyle->SetOptFit(kTRUE); - gStyle->SetFitFormat("5.3g"); - c1->Divide (3,2); - - c1->cd(1); - frameYield.Draw(); - - c1->cd(2); - frameTrk.Draw(); - - c1->cd(3); - - frameSa.Draw(); - c1->cd(4); - frameIso.Draw(); - c1->cd(5); - frameHlt.Draw(); - c1->Draw(); - c1->SaveAs("pulls.eps"); - - TCanvas *c2 = new TCanvas("c2","err",10,10,900,900); - c2->Divide (3,2); - c2->cd(1); - frameErrYield.Draw(); - - c2->cd(2); - frameErrTrk.Draw(); - - c2->cd(3); - - frameErrSa.Draw(); - c2->cd(4); - frameErrIso.Draw(); - c2->cd(5); - frameErrHlt.Draw(); - - - c2->cd(6); - frameChi2.Draw(); - c2->Draw(); - c2->SaveAs("Err.eps"); - - - - -} - diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/qualityStudies.C b/ElectroWeakAnalysis/ZMuMu/test/macros/qualityStudies.C deleted file mode 100644 index ce7083e9627c0..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/qualityStudies.C +++ /dev/null @@ -1,1118 +0,0 @@ -#include "TFile.h" -#include "TH1F.h" -#include "TH2F.h" -#include "TTree.h" -#include "TAxis.h" -#include "TCanvas.h" -//#if !defined(__CINT__) && !defined(__MAKECINT__) -#include -#include -#include -//#endif - -void setGraphics(TH1F *histo){ - - histo->SetFillColor(kAzure+7); - histo->SetLineWidth(2); - histo->SetLineColor(kBlue+1); -} - -TH1F * getTH1Histo(TChain *Events, const char * name, const string varToPlot, unsigned int nBins, double fMin, double fMax, TCut cut) { - - TH1F * h = new TH1F(name, name, nBins, fMin, fMax); - // Events->Draw("zGoldenMass"); - Events->Project(name, varToPlot.c_str(), cut ); - cout<<"Number of entrie for "<< name << " : "<< h->GetEntries()<SetOptStat(); - gROOT->SetStyle("Plain"); - using namespace std; - - - // zGolden plots - TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && zGoldenDau1Eta<2.1 && zGoldenDau2Eta<2.1"); - TDirectory * dir = output_file->mkdir("goodZToMuMuPlots"); - dir->cd(); - - TH1F * zMass = getTH1Histo(Events, "zMass", "zGoldenMass", 200, 0, 200, cut_zGolden) ; - zMass->Write(); - delete zMass; - - //Quality checks - // Chi2 - - // quality variables - // caveat: I'm requiring isolations - TH1F * dauChi2 = getTH1Histo(Events, "dauChi2", "zGoldenDau1Chi2", 1000, 0, 100, cut_zGolden) ; - TH1F * dau2Chi2 = getTH1Histo(Events, "dau2Chi2", "zGoldenDau2Chi2", 1000, 0, 100, cut_zGolden) ; - dauChi2->Add(dau2Chi2); - dauChi2->Write(); - delete dauChi2; - delete dau2Chi2; - - - dir->cd(); - TH1F * zMassOneDauChi2Higher10 = getTH1Histo(Events, "zMassOneDauChi2Higher10", "zGoldenMass", 200, 0, 200, cut_zGolden +"zGoldenDau1Chi2>10 || zGoldenDau2Chi2>10") ; - zMassOneDauChi2Higher10->Write(); - delete zMassOneDauChi2Higher10; - - dir->cd(); - TH1F * zMassBothDauChi2Higher10 = getTH1Histo(Events, "zMassBothDauChi2Higher10", "zGoldenMass", 200, 0, 200, cut_zGolden +"zGoldenDau1Chi2>10 && zGoldenDau2Chi2>10") ; - zMassBothDauChi2Higher10->Write(); - delete zMassBothDauChi2Higher10; - - dir->cd(); - TH1F *dauChi2NofMuonHits0 = getTH1Histo(Events, "dauChi2NofMuonHits0", "zGoldenDau1Chi2", 1000, 0, 100, cut_zGolden + "zGoldenDau1NofMuonHits==0") ; - TH1F *dau2Chi2NofMuonHits0 = getTH1Histo(Events, "dau2Chi2NofMuonHits0", "zGoldenDau2Chi2", 1000, 0, 100, cut_zGolden + "zGoldenDau2NofMuonHits==0") ; - dauChi2NofMuonHits0->Add(dau2Chi2NofMuonHits0); - dauChi2NofMuonHits0->Write(); - delete dauChi2NofMuonHits0; - delete dau2Chi2NofMuonHits0; - - - dir->cd(); - - TH1F *dauSaChi2NofSaMuonHits0 = getTH1Histo(Events, "dauSaChi2NofSaMuonHits0", "zGoldenDau1SaChi2", 1000, 0, 100, cut_zGolden + "zGoldenDau1SaNofMuonHits==0") ; - TH1F *dau2SaChi2NofSaMuonHits0 = getTH1Histo(Events, "dau2SaChi2NofSaMuonHits0", "zGoldenDau2SaChi2", 1000, 0, 100, cut_zGolden + "zGoldenDau2SaNofMuonHits==0") ; - dauSaChi2NofSaMuonHits0->Add(dau2SaChi2NofSaMuonHits0); - dauSaChi2NofSaMuonHits0->Write(); - delete dauSaChi2NofSaMuonHits0; - delete dau2SaChi2NofSaMuonHits0; - - - - TH1F *dauChi2NofStripHits0 = getTH1Histo(Events, "dauChi2NofStripHits0", "zGoldenDau1Chi2", 1000, 0, 100, cut_zGolden + "zGoldenDau1NofStripHits<10") ; - TH1F *dau2Chi2NofStripHits0 = getTH1Histo(Events, "dau2Chi2NofStripHits0", "zGoldenDau2Chi2", 1000, 0, 100, cut_zGolden + "zGoldenDau2NofStripHits<10") ; - dauChi2NofStripHits0->Add(dau2Chi2NofStripHits0); - dauChi2NofStripHits0->Write(); - //cout<<"Number of zCandidate with at least one daughter with Chi2 higher: "<GetEntries()<cd(); - // caveat: I'm requiring isolations - - TH1F *dauNofStripHits = getTH1Histo(Events, "dauNofStripHits", "zGoldenDau1NofStripHits", 100, 0, 100, cut_zGolden ) ; - TH1F *dau2NofStripHits = getTH1Histo(Events, "dau2NofStripHits", "zGoldenDau2NofStripHits", 100, 0, 100, cut_zGolden ) ; - dauNofStripHits->Add(dau2NofStripHits); - dauNofStripHits->Write(); - delete dauNofStripHits; - delete dau2NofStripHits; - - - dir->cd(); - TH1F * zMassBothDauNofStripsHitsLower10 = getTH1Histo(Events, "zMassBothDauNofStripsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofStripHits<10 && zGoldenDau2NofStripHits<10" ); - zMassBothDauNofStripsHitsLower10->Write(); - delete zMassBothDauNofStripsHitsLower10; - - dir->cd(); - TH1F * zMassOneDauNofStripsHitsLower10 = getTH1Histo(Events, "zMassOneDauNofStripsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofStripHits<10 || zGoldenDau2NofStripHits<10" ); - zMassOneDauNofStripsHitsLower10->Write(); - delete zMassOneDauNofStripsHitsLower10; - - - -// Number of Strips Hits for inner track - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dauTrkNofStripHits = getTH1Histo(Events, "dauTrkNofStripHits", "zGoldenDau1TrkNofStripHits", 100, 0, 100, cut_zGolden ) ; - TH1F *dau2TrkNofStripHits = getTH1Histo(Events, "dau2TrkNofStripHits", "zGoldenDau2TrkNofStripHits", 100, 0, 100, cut_zGolden ) ; - dauTrkNofStripHits->Add(dau2TrkNofStripHits); - dauTrkNofStripHits->Write(); - delete dauTrkNofStripHits; - delete dau2TrkNofStripHits; - - - dir->cd(); - TH1F * zMassBothDauTrkNofStripsHitsLower10 = getTH1Histo(Events, "zMassBothDauTrkNofStripsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1TrkNofStripHits<10 && zGoldenDau2TrkNofStripHits<10" ); - zMassBothDauTrkNofStripsHitsLower10->Write(); - delete zMassBothDauTrkNofStripsHitsLower10; - - dir->cd(); - TH1F * zMassOneDauTrkNofStripsHitsLower10 = getTH1Histo(Events, "zMassOneDauTrkNofStripsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1TrkNofStripHits<10 || zGoldenDau2TrkNofStripHits<10" ); - zMassOneDauTrkNofStripsHitsLower10->Write(); - delete zMassOneDauTrkNofStripsHitsLower10; - - - - - // Number of Pixel Hits for global track - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dauNofPixelHits = getTH1Histo(Events, "dauNofPixelHits", "zGoldenDau1NofPixelHits", 100, 0, 100, cut_zGolden ) ; - TH1F *dau2NofPixelHits = getTH1Histo(Events, "dau2NofPixelHits", "zGoldenDau2NofPixelHits", 100, 0, 100, cut_zGolden ) ; - dauNofPixelHits->Add(dau2NofPixelHits); - dauNofPixelHits->Write(); - delete dauNofPixelHits; - delete dau2NofPixelHits; - - - dir->cd(); - TH1F * zMassBothDauNofPixelsHitsLower10 = getTH1Histo(Events, "zMassBothDauNofPixelsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofPixelHits<10 && zGoldenDau2NofPixelHits<10" ); - zMassBothDauNofPixelsHitsLower10->Write(); - delete zMassBothDauNofPixelsHitsLower10; - - dir->cd(); - TH1F * zMassOneDauNofPixelsHitsLower10 = getTH1Histo(Events, "zMassOneDauNofPixelsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofPixelHits<10 || zGoldenDau2NofPixelHits<10" ); - zMassOneDauNofPixelsHitsLower10->Write(); - delete zMassOneDauNofPixelsHitsLower10; - - - - - // Number of Pixel Hits for inner track - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dauTrkNofPixelHits = getTH1Histo(Events, "dauTrkNofPixelHits", "zGoldenDau1TrkNofPixelHits", 100, 0, 100, cut_zGolden ) ; - TH1F *dau2TrkNofPixelHits = getTH1Histo(Events, "dau2TrkNofPixelHits", "zGoldenDau2TrkNofPixelHits", 100, 0, 100, cut_zGolden ) ; - dauTrkNofPixelHits->Add(dau2TrkNofPixelHits); - dauTrkNofPixelHits->Write(); - delete dauTrkNofPixelHits; - delete dau2TrkNofPixelHits; - - - dir->cd(); - TH1F * zMassBothDauTrkNofPixelsHitsLower1 = getTH1Histo(Events, "zMassBothDauTrkNofPixelsHitsLower1","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1TrkNofPixelHits<1 && zGoldenDau2TrkNofPixelHits<1" ); - zMassBothDauTrkNofPixelsHitsLower1->Write(); - delete zMassBothDauTrkNofPixelsHitsLower1; - - dir->cd(); - TH1F * zMassOneDauTrkNofPixelsHitsLower1 = getTH1Histo(Events, "zMassOneDauTrkNofPixelsHitsLower1","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1TrkNofPixelHits<1 || zGoldenDau2TrkNofPixelHits<1" ); - zMassOneDauTrkNofPixelsHitsLower1->Write(); - delete zMassOneDauTrkNofPixelsHitsLower1; - - - - - - - - // Number of Muon Hits for global track - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dauNofMuonHits = getTH1Histo(Events, "dauNofMuonHits", "zGoldenDau1NofMuonHits", 100, 0, 100, cut_zGolden ) ; - TH1F *dau2NofMuonHits = getTH1Histo(Events, "dau2NofMuonHits", "zGoldenDau2NofMuonHits", 100, 0, 100, cut_zGolden ) ; - dauNofMuonHits->Add(dau2NofMuonHits); - dauNofMuonHits->Write(); - delete dauNofMuonHits; - delete dau2NofMuonHits; - - - dir->cd(); - TH1F * zMassBothDauNofMuonsHitsLower1 = getTH1Histo(Events, "zMassBothDauNofMuonsHitsLower1","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofMuonHits<1 && zGoldenDau2NofMuonHits<1" ); - zMassBothDauNofMuonsHitsLower1->Write(); - delete zMassBothDauNofMuonsHitsLower1; - - dir->cd(); - TH1F * zMassOneDauNofMuonsHitsLower1 = getTH1Histo(Events, "zMassOneDauNofMuonsHitsLowe10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofMuonHits<1 || zGoldenDau2NofMuonHits<1" ); - zMassOneDauNofMuonsHitsLower1->Write(); - delete zMassOneDauNofMuonsHitsLower1; - - - - // Number of Muon Hits for outer track - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dauSaNofMuonHits = getTH1Histo(Events, "dauSaNofMuonHits", "zGoldenDau1SaNofMuonHits", 100, 0, 100, cut_zGolden ) ; - TH1F *dau2SaNofMuonHits = getTH1Histo(Events, "dau2SaNofMuonHits", "zGoldenDau2SaNofMuonHits", 100, 0, 100, cut_zGolden ) ; - dauSaNofMuonHits->Add(dau2SaNofMuonHits); - dauSaNofMuonHits->Write(); - delete dauSaNofMuonHits; - delete dau2SaNofMuonHits; - - - dir->cd(); - TH1F * zMassBothDauSaNofMuonsHitsLower1 = getTH1Histo(Events, "zMassBothDauSaNofMuonsHitsLower1","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1SaNofMuonHits<1 && zGoldenDau2SaNofMuonHits<1" ); - zMassBothDauSaNofMuonsHitsLower1->Write(); - delete zMassBothDauSaNofMuonsHitsLower1; - - dir->cd(); - TH1F * zMassOneDauSaNofMuonsHitsLower1 = getTH1Histo(Events, "zMassOneDauSaNofMuonsHitsLowe10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1SaNofMuonHits<1 || zGoldenDau2SaNofMuonHits<1" ); - zMassOneDauSaNofMuonsHitsLower1->Write(); - delete zMassOneDauSaNofMuonsHitsLower1; - - - - - - // dxyFromBS - dir->cd(); - - TH1F *dauDxy = getTH1Histo(Events, "dauDxy", "zGoldenDau1dxyFromBS", 200, -1, 1, cut_zGolden ) ; - TH1F *dau2Dxy = getTH1Histo(Events, "dau2Dxy", "zGoldenDau2dxyFromBS", 200, -1, 1, cut_zGolden ) ; - dauDxy->Add(dau2Dxy); - dauDxy->Write(); - delete dauDxy; - delete dau2Dxy; - - - TH1F * zMassBothDaudxyFromBSHigher0_2 = getTH1Histo(Events, "zMassBothDaudxyFromBSHigher0_2", "zGoldenMass", 200, -1, 1, cut_zGolden + "zGoldenDau1dxyFromBS>0.2 && zGoldenDau2dxyFromBS>0.2" ) ; - zMassBothDaudxyFromBSHigher0_2->Write(); - delete zMassBothDaudxyFromBSHigher0_2; - - - - dir->cd(); - TH1F * zMassOneDaudxyFromBSHigher0_2 = getTH1Histo(Events, "zMassOneDaudxyFromBSHigher0_2", "zGoldenMass", 200, -1, 1, cut_zGolden + "zGoldenDau1dxyFromBS>0.2 || zGoldenDau2dxyFromBS>0.2" ) ; - zMassOneDaudxyFromBSHigher0_2->Write(); - delete zMassOneDaudxyFromBSHigher0_2; - - - // isTrackerMuon - dir->cd(); - TH1F * zMassBothDauNoTrackerMuon = getTH1Histo(Events, "zMassBothDauNoTrackerMuon", "zGoldenMass", 200, 0, 200, cut_zGolden + "zGoldenDau1TrackerMuonBit==0 && zGoldenDau2TrackerMuonBit==0"); - zMassBothDauNoTrackerMuon->Write(); - delete zMassBothDauNoTrackerMuon; - - dir->cd(); - TH1F * zMassOneDauNoTrackerMuon = getTH1Histo(Events, "zMassOneDauNoTrackerMuon", "zGoldenMass", 200, 0, 200, cut_zGolden + "zGoldenDau1TrackerMuonBit==0 || zGoldenDau2TrackerMuonBit==0"); - zMassOneDauNoTrackerMuon->Write(); - delete zMassOneDauNoTrackerMuon; - - - - // Eta distribution if MuonHits is zero - - dir->cd(); - TH1F * dauEtaNofMuonHits0 = getTH1Histo(Events, "dauEtaNofMuonHits0", "zGoldenDau1Eta", 200, -5, 5, cut_zGolden + "zGoldenDau1NofMuonHits==0" ); - TH1F * dau2EtaNofMuonHits0 = getTH1Histo(Events, "dau2EtaNofMuonHits0", "zGoldenDau2Eta", 200, -5, 5, cut_zGolden + "zGoldenDau2NofMuonHits==0" ); - dauEtaNofMuonHits0->Add(dau2EtaNofMuonHits0); - dauEtaNofMuonHits0->Write(); - delete dauEtaNofMuonHits0; - delete dau2EtaNofMuonHits0; - - - // Correlation study - - // *** Chi2 vs MuonHits *** - - dir->cd(); - TH2F * Chi2VsMuonHits = new TH2F("Chi2VsMuonHits", "Chi2VsMuonHits", 100, 0, 60, 100, 0, 6); - //TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events->Project("Chi2VsMuonHits", "zGoldenDau1Chi2:zGoldenDau1NofMuonHits", cut_zGolden); - Chi2VsMuonHits->SetDrawOption("Box"); - - Chi2VsMuonHits->Write(); - - delete Chi2VsMuonHits; - - - // *** Chi2 vs StripHits *** - - dir->cd(); - TH2F * Chi2VsStripHits = new TH2F("Chi2VsStripHits", "Chi2VsStripHits", 100, 0, 30, 100, 0, 6); - //TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events->Project("Chi2VsStripHits", "zGoldenDau1Chi2:zGoldenDau1NofStripHits", cut_zGolden); - Chi2VsStripHits->SetDrawOption("Box"); - - Chi2VsStripHits->Write(); - - delete Chi2VsStripHits; - - // *** MuonHits vs Eta *** - - dir->cd(); - TH2F * MuonHitsVsEta = new TH2F("MuonHitsVsEta", "MuonHitsVsEta", 100, -2.5, 2.5, 100, 0, 60); - //TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events->Project("MuonHitsVsEta", "zGoldenDau1NofMuonHits:zGoldenDau1Eta", cut_zGolden); - MuonHitsVsEta->SetDrawOption("Box"); - - MuonHitsVsEta->Write(); - - delete MuonHitsVsEta; - - - output_file->cd("/"); - - - - - // output_file->Close(); - -} - - -void qualityStudiesZMuSta(TFile * output_file, TChain *Events){ - - gStyle->SetOptStat(); - gROOT->SetStyle("Plain"); - using namespace std; - - - // zzMuSta plots - TCut cut_zMuSta("zMuStaMass>60 && zMuStaMass<120 && zMuStaDau1Pt> 20 && zMuStaDau2Pt>20 && zMuStaDau1TrkIso< 3.0 && zMuStaDau2TrkIso < 3.0 && zMuStaDau1Eta<2.1 && zMuStaDau2Eta<2.1"); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneStandAloneMuonPlots"); - dir->cd(); - - TH1F * zMass = getTH1Histo(Events, "zMass", "zMuStaMass", 200, 0, 200, cut_zMuSta) ; - zMass->Write(); - delete zMass; - - //Quality checks - // Chi2 - - // quality variables - // caveat: I'm requiring isolations - TH1F * dauChi2 = getTH1Histo(Events, "dauChi2", "zMuStaDau1Chi2", 1000, 0, 100, cut_zMuSta) ; - TH1F * dau2Chi2 = getTH1Histo(Events, "dau2Chi2", "zMuStaDau2Chi2", 1000, 0, 100, cut_zMuSta) ; - dauChi2->Add(dau2Chi2); - dauChi2->Write(); - delete dauChi2; - delete dau2Chi2; - - - dir->cd(); - TH1F * zMassOneDauChi2Higher10 = getTH1Histo(Events, "zMassOneDauChi2Higher10", "zMuStaMass", 200, 0, 200, cut_zMuSta +"zMuStaDau1Chi2>10 || zMuStaDau2Chi2>10") ; - zMassOneDauChi2Higher10->Write(); - delete zMassOneDauChi2Higher10; - - dir->cd(); - TH1F * zMassBothDauChi2Higher10 = getTH1Histo(Events, "zMassBothDauChi2Higher10", "zMuStaMass", 200, 0, 200, cut_zMuSta +"zMuStaDau1Chi2>10 && zMuStaDau2Chi2>10") ; - zMassBothDauChi2Higher10->Write(); - delete zMassBothDauChi2Higher10; - - dir->cd(); - TH1F *dauChi2NofMuonHits0 = getTH1Histo(Events, "dauChi2NofMuonHits0", "zMuStaDau1Chi2", 1000, 0, 100, cut_zMuSta + "zMuStaDau1NofMuonHits==0") ; - TH1F *dau2Chi2NofMuonHits0 = getTH1Histo(Events, "dau2Chi2NofMuonHits0", "zMuStaDau2Chi2", 1000, 0, 100, cut_zMuSta + "zMuStaDau2NofMuonHits==0") ; - dauChi2NofMuonHits0->Add(dau2Chi2NofMuonHits0); - dauChi2NofMuonHits0->Write(); - delete dauChi2NofMuonHits0; - delete dau2Chi2NofMuonHits0; - - - dir->cd(); - - TH1F *dauSaChi2NofSaMuonHits0 = getTH1Histo(Events, "dauSaChi2NofSaMuonHits0", "zMuStaDau1SaChi2", 1000, 0, 100, cut_zMuSta + "zMuStaDau1SaNofMuonHits==0") ; - TH1F *dau2SaChi2NofSaMuonHits0 = getTH1Histo(Events, "dau2SaChi2NofSaMuonHits0", "zMuStaDau2SaChi2", 1000, 0, 100, cut_zMuSta + "zMuStaDau2SaNofMuonHits==0") ; - dauSaChi2NofSaMuonHits0->Add(dau2SaChi2NofSaMuonHits0); - dauSaChi2NofSaMuonHits0->Write(); - delete dauSaChi2NofSaMuonHits0; - delete dau2SaChi2NofSaMuonHits0; - - - - TH1F *dauChi2NofStripHits0 = getTH1Histo(Events, "dauChi2NofStripHits0", "zMuStaDau1Chi2", 1000, 0, 100, cut_zMuSta + "zMuStaDau1NofStripHits<10") ; - TH1F *dau2Chi2NofStripHits0 = getTH1Histo(Events, "dau2Chi2NofStripHits0", "zMuStaDau2Chi2", 1000, 0, 100, cut_zMuSta + "zMuStaDau2NofStripHits<10") ; - dauChi2NofStripHits0->Add(dau2Chi2NofStripHits0); - dauChi2NofStripHits0->Write(); - //cout<<"Number of zCandidate with at least one daughter with Chi2 higher: "<GetEntries()<cd(); - // caveat: I'm requiring isolations - - TH1F *dauGlbNofStripHits = getTH1Histo(Events, "dauGlbNofStripHits", "zMuStaDau1NofStripHits", 100, 0, 100, cut_zMuSta && "zMuStaDau1GlobalMuonBit==1" ) ; - TH1F *dau2NofStripHits = getTH1Histo(Events, "dau2NofStripHits", "zMuStaDau2NofStripHits", 100, 0, 100, cut_zMuSta && "zMuStaDau2GlobalMuonBit==1") ; - dauGlbNofStripHits->Add(dau2NofStripHits); - dauGlbNofStripHits->Write(); - delete dauGlbNofStripHits; - delete dau2NofStripHits; - - - - - - - - // Number of Muon Hits for global - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dauGlbNofMuonHits = getTH1Histo(Events, "dauGlbNofMuonHits", "zMuStaDau1NofMuonHits", 100, 0, 100, cut_zMuSta && "zMuStaDau1GlobalMuonBit==1") ; - TH1F *dau2NofMuonHits = getTH1Histo(Events, "dau2NofMuonHits", "zMuStaDau2NofMuonHits", 100, 0, 100, cut_zMuSta && "zMuStaDau2GlobalMuonBit==1") ; - dauGlbNofMuonHits->Add(dau2NofMuonHits); - dauGlbNofMuonHits->Write(); - delete dauGlbNofMuonHits; - delete dau2NofMuonHits; - - - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dauStaNofMuonHits = getTH1Histo(Events, "dauStaNofMuonHits", "zMuStaDau1SaNofMuonHits", 100, 0, 100, cut_zMuSta && "zMuStaDau1StandAloneBit==1" && "zMuStaDau1GlobalMuonBit==0") ; - TH1F *dau2NofMuonHits = getTH1Histo(Events, "dau2NofMuonHits", "zMuStaDau2SaNofMuonHits", 100, 0, 100, cut_zMuSta && "zMuStaDau2StandAloneBit==1" && "zMuStaDau2GlobalMuonBit==0" ) ; - dauStaNofMuonHits->Add(dau2NofMuonHits); - dauStaNofMuonHits->Write(); - delete dauStaNofMuonHits; - delete dau2NofMuonHits; - - - - - - - // dxyFromBS - dir->cd(); - - TH1F *dauDxy = getTH1Histo(Events, "dauDxy", "zMuStaDau1dxyFromBS", 200, -1, 1, cut_zMuSta ) ; - TH1F *dau2Dxy = getTH1Histo(Events, "dau2Dxy", "zMuStaDau2dxyFromBS", 200, -1, 1, cut_zMuSta ) ; - dauDxy->Add(dau2Dxy); - dauDxy->Write(); - delete dauDxy; - delete dau2Dxy; - - - TH1F * zMassBothDaudxyFromBSHigher0_2 = getTH1Histo(Events, "zMassBothDaudxyFromBSHigher0_2", "zMuStaMass", 200, -1, 1, cut_zMuSta + "zMuStaDau1dxyFromBS>0.2 && zMuStaDau2dxyFromBS>0.2" ) ; - zMassBothDaudxyFromBSHigher0_2->Write(); - delete zMassBothDaudxyFromBSHigher0_2; - - - - dir->cd(); - TH1F * zMassOneDaudxyFromBSHigher0_2 = getTH1Histo(Events, "zMassOneDaudxyFromBSHigher0_2", "zMuStaMass", 200, -1, 1, cut_zMuSta + "zMuStaDau1dxyFromBS>0.2 || zMuStaDau2dxyFromBS>0.2" ) ; - zMassOneDaudxyFromBSHigher0_2->Write(); - delete zMassOneDaudxyFromBSHigher0_2; - - - - // Eta distribution if MuonHits is zero - - dir->cd(); - TH1F * dauEtaNofMuonHits0 = getTH1Histo(Events, "dauEtaNofMuonHits0", "zMuStaDau1Eta", 200, -5, 5, cut_zMuSta + "zMuStaDau1NofMuonHits==0" ); - TH1F * dau2EtaNofMuonHits0 = getTH1Histo(Events, "dau2EtaNofMuonHits0", "zMuStaDau2Eta", 200, -5, 5, cut_zMuSta + "zMuStaDau2NofMuonHits==0" ); - dauEtaNofMuonHits0->Add(dau2EtaNofMuonHits0); - dauEtaNofMuonHits0->Write(); - delete dauEtaNofMuonHits0; - delete dau2EtaNofMuonHits0; - - - // Correlation study - - // *** Chi2 vs MuonHits *** - - dir->cd(); - TH2F * Chi2VsMuonHits = new TH2F("Chi2VsMuonHits", "Chi2VsMuonHits", 100, 0, 60, 100, 0, 6); - //TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events->Project("Chi2VsMuonHits", "zMuStaDau1Chi2:zMuStaDau1NofMuonHits", cut_zMuSta); - Chi2VsMuonHits->SetDrawOption("Box"); - - Chi2VsMuonHits->Write(); - - delete Chi2VsMuonHits; - - - // *** Chi2 vs StripHits *** - - dir->cd(); - TH2F * Chi2VsStripHits = new TH2F("Chi2VsStripHits", "Chi2VsStripHits", 100, 0, 30, 100, 0, 6); - //TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events->Project("Chi2VsStripHits", "zMuStaDau1Chi2:zMuStaDau1NofStripHits", cut_zMuSta); - Chi2VsStripHits->SetDrawOption("Box"); - - Chi2VsStripHits->Write(); - - delete Chi2VsStripHits; - - // *** MuonHits vs Eta *** - - dir->cd(); - TH2F * MuonHitsVsEta = new TH2F("MuonHitsVsEta", "MuonHitsVsEta", 100, -2.5, 2.5, 100, 0, 60); - //TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events->Project("MuonHitsVsEta", "zMuStaDau1NofMuonHits:zMuStaDau1Eta", cut_zMuSta); - MuonHitsVsEta->SetDrawOption("Box"); - - MuonHitsVsEta->Write(); - - delete MuonHitsVsEta; - - - output_file->cd("/"); - - - - - // output_file->Close(); - -} - - - - -void qualityStudiesZGoldenNotIso(TFile * output_file, TChain *Events){ - - gStyle->SetOptStat(); - gROOT->SetStyle("Plain"); - using namespace std; - - - // zGolden plots - TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && (zGoldenDau1TrkIso> 3.0 || zGoldenDau2TrkIso > 3.0 ) && zGoldenDau1Eta<2.1 && zGoldenDau2Eta<2.1"); - TDirectory * dir = output_file->mkdir("nonIsolatedZToMuMuPlots"); - dir->cd(); - - TH1F * zMass = getTH1Histo(Events, "zMass", "zGoldenMass", 200, 0, 200, cut_zGolden) ; - zMass->Write(); - delete zMass; - - //Quality checks - // Chi2 - - // quality variables - // caveat: I'm requiring isolations - TH1F * dauChi2 = getTH1Histo(Events, "dauChi2", "zGoldenDau1Chi2", 1000, 0, 100, cut_zGolden) ; - TH1F * dau2Chi2 = getTH1Histo(Events, "dau2Chi2", "zGoldenDau2Chi2", 1000, 0, 100, cut_zGolden) ; - dauChi2->Add(dau2Chi2); - dauChi2->Write(); - delete dauChi2; - delete dau2Chi2; - - - dir->cd(); - TH1F * zMassOneDauChi2Higher10 = getTH1Histo(Events, "zMassOneDauChi2Higher10", "zGoldenMass", 200, 0, 200, cut_zGolden +"zGoldenDau1Chi2>10 || zGoldenDau2Chi2>10") ; - zMassOneDauChi2Higher10->Write(); - delete zMassOneDauChi2Higher10; - - dir->cd(); - TH1F * zMassBothDauChi2Higher10 = getTH1Histo(Events, "zMassBothDauChi2Higher10", "zGoldenMass", 200, 0, 200, cut_zGolden +"zGoldenDau1Chi2>10 && zGoldenDau2Chi2>10") ; - zMassBothDauChi2Higher10->Write(); - delete zMassBothDauChi2Higher10; - - dir->cd(); - TH1F *dauChi2NofMuonHits0 = getTH1Histo(Events, "dauChi2NofMuonHits0", "zGoldenDau1Chi2", 1000, 0, 100, cut_zGolden + "zGoldenDau1NofMuonHits==0") ; - TH1F *dau2Chi2NofMuonHits0 = getTH1Histo(Events, "dau2Chi2NofMuonHits0", "zGoldenDau2Chi2", 1000, 0, 100, cut_zGolden + "zGoldenDau2NofMuonHits==0") ; - dauChi2NofMuonHits0->Add(dau2Chi2NofMuonHits0); - dauChi2NofMuonHits0->Write(); - delete dauChi2NofMuonHits0; - delete dau2Chi2NofMuonHits0; - - - dir->cd(); - - TH1F *dauSaChi2NofSaMuonHits0 = getTH1Histo(Events, "dauSaChi2NofSaMuonHits0", "zGoldenDau1SaChi2", 1000, 0, 100, cut_zGolden + "zGoldenDau1SaNofMuonHits==0") ; - TH1F *dau2SaChi2NofSaMuonHits0 = getTH1Histo(Events, "dau2SaChi2NofSaMuonHits0", "zGoldenDau2SaChi2", 1000, 0, 100, cut_zGolden + "zGoldenDau2SaNofMuonHits==0") ; - dauSaChi2NofSaMuonHits0->Add(dau2SaChi2NofSaMuonHits0); - dauSaChi2NofSaMuonHits0->Write(); - delete dauSaChi2NofSaMuonHits0; - delete dau2SaChi2NofSaMuonHits0; - - - - TH1F *dauChi2NofStripHits0 = getTH1Histo(Events, "dauChi2NofStripHits0", "zGoldenDau1Chi2", 1000, 0, 100, cut_zGolden + "zGoldenDau1NofStripHits<10") ; - TH1F *dau2Chi2NofStripHits0 = getTH1Histo(Events, "dau2Chi2NofStripHits0", "zGoldenDau2Chi2", 1000, 0, 100, cut_zGolden + "zGoldenDau2NofStripHits<10") ; - dauChi2NofStripHits0->Add(dau2Chi2NofStripHits0); - dauChi2NofStripHits0->Write(); - //cout<<"Number of zCandidate with at least one daughter with Chi2 higher: "<GetEntries()<cd(); - // caveat: I'm requiring isolations - - TH1F *dauNofStripHits = getTH1Histo(Events, "dauNofStripHits", "zGoldenDau1NofStripHits", 100, 0, 100, cut_zGolden ) ; - TH1F *dau2NofStripHits = getTH1Histo(Events, "dau2NofStripHits", "zGoldenDau2NofStripHits", 100, 0, 100, cut_zGolden ) ; - dauNofStripHits->Add(dau2NofStripHits); - dauNofStripHits->Write(); - delete dauNofStripHits; - delete dau2NofStripHits; - - - dir->cd(); - TH1F * zMassBothDauNofStripsHitsLower10 = getTH1Histo(Events, "zMassBothDauNofStripsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofStripHits<10 && zGoldenDau2NofStripHits<10" ); - zMassBothDauNofStripsHitsLower10->Write(); - delete zMassBothDauNofStripsHitsLower10; - - dir->cd(); - TH1F * zMassOneDauNofStripsHitsLower10 = getTH1Histo(Events, "zMassOneDauNofStripsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofStripHits<10 || zGoldenDau2NofStripHits<10" ); - zMassOneDauNofStripsHitsLower10->Write(); - delete zMassOneDauNofStripsHitsLower10; - - - -// Number of Strips Hits for inner track - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dauTrkNofStripHits = getTH1Histo(Events, "dauTrkNofStripHits", "zGoldenDau1TrkNofStripHits", 100, 0, 100, cut_zGolden ) ; - TH1F *dau2TrkNofStripHits = getTH1Histo(Events, "dau2TrkNofStripHits", "zGoldenDau2TrkNofStripHits", 100, 0, 100, cut_zGolden ) ; - dauTrkNofStripHits->Add(dau2TrkNofStripHits); - dauTrkNofStripHits->Write(); - delete dauTrkNofStripHits; - delete dau2TrkNofStripHits; - - - dir->cd(); - TH1F * zMassBothDauTrkNofStripsHitsLower10 = getTH1Histo(Events, "zMassBothDauTrkNofStripsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1TrkNofStripHits<10 && zGoldenDau2TrkNofStripHits<10" ); - zMassBothDauTrkNofStripsHitsLower10->Write(); - delete zMassBothDauTrkNofStripsHitsLower10; - - dir->cd(); - TH1F * zMassOneDauTrkNofStripsHitsLower10 = getTH1Histo(Events, "zMassOneDauTrkNofStripsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1TrkNofStripHits<10 || zGoldenDau2TrkNofStripHits<10" ); - zMassOneDauTrkNofStripsHitsLower10->Write(); - delete zMassOneDauTrkNofStripsHitsLower10; - - - - - // Number of Pixel Hits for global track - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dauNofPixelHits = getTH1Histo(Events, "dauNofPixelHits", "zGoldenDau1NofPixelHits", 100, 0, 100, cut_zGolden ) ; - TH1F *dau2NofPixelHits = getTH1Histo(Events, "dau2NofPixelHits", "zGoldenDau2NofPixelHits", 100, 0, 100, cut_zGolden ) ; - dauNofPixelHits->Add(dau2NofPixelHits); - dauNofPixelHits->Write(); - delete dauNofPixelHits; - delete dau2NofPixelHits; - - - dir->cd(); - TH1F * zMassBothDauNofPixelsHitsLower10 = getTH1Histo(Events, "zMassBothDauNofPixelsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofPixelHits<10 && zGoldenDau2NofPixelHits<10" ); - zMassBothDauNofPixelsHitsLower10->Write(); - delete zMassBothDauNofPixelsHitsLower10; - - dir->cd(); - TH1F * zMassOneDauNofPixelsHitsLower10 = getTH1Histo(Events, "zMassOneDauNofPixelsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofPixelHits<10 || zGoldenDau2NofPixelHits<10" ); - zMassOneDauNofPixelsHitsLower10->Write(); - delete zMassOneDauNofPixelsHitsLower10; - - - - - // Number of Pixel Hits for inner track - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dauTrkNofPixelHits = getTH1Histo(Events, "dauTrkNofPixelHits", "zGoldenDau1TrkNofPixelHits", 100, 0, 100, cut_zGolden ) ; - TH1F *dau2TrkNofPixelHits = getTH1Histo(Events, "dau2TrkNofPixelHits", "zGoldenDau2TrkNofPixelHits", 100, 0, 100, cut_zGolden ) ; - dauTrkNofPixelHits->Add(dau2TrkNofPixelHits); - dauTrkNofPixelHits->Write(); - delete dauTrkNofPixelHits; - delete dau2TrkNofPixelHits; - - - dir->cd(); - TH1F * zMassBothDauTrkNofPixelsHitsLower1 = getTH1Histo(Events, "zMassBothDauTrkNofPixelsHitsLower1","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1TrkNofPixelHits<1 && zGoldenDau2TrkNofPixelHits<1" ); - zMassBothDauTrkNofPixelsHitsLower1->Write(); - delete zMassBothDauTrkNofPixelsHitsLower1; - - dir->cd(); - TH1F * zMassOneDauTrkNofPixelsHitsLower1 = getTH1Histo(Events, "zMassOneDauTrkNofPixelsHitsLower1","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1TrkNofPixelHits<1 || zGoldenDau2TrkNofPixelHits<1" ); - zMassOneDauTrkNofPixelsHitsLower1->Write(); - delete zMassOneDauTrkNofPixelsHitsLower1; - - - - - - - - // Number of Muon Hits for global track - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dauNofMuonHits = getTH1Histo(Events, "dauNofMuonHits", "zGoldenDau1NofMuonHits", 100, 0, 100, cut_zGolden ) ; - TH1F *dau2NofMuonHits = getTH1Histo(Events, "dau2NofMuonHits", "zGoldenDau2NofMuonHits", 100, 0, 100, cut_zGolden ) ; - dauNofMuonHits->Add(dau2NofMuonHits); - dauNofMuonHits->Write(); - delete dauNofMuonHits; - delete dau2NofMuonHits; - - - dir->cd(); - TH1F * zMassBothDauNofMuonsHitsLower1 = getTH1Histo(Events, "zMassBothDauNofMuonsHitsLower1","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofMuonHits<1 && zGoldenDau2NofMuonHits<1" ); - zMassBothDauNofMuonsHitsLower1->Write(); - delete zMassBothDauNofMuonsHitsLower1; - - dir->cd(); - TH1F * zMassOneDauNofMuonsHitsLower1 = getTH1Histo(Events, "zMassOneDauNofMuonsHitsLowe10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofMuonHits<1 || zGoldenDau2NofMuonHits<1" ); - zMassOneDauNofMuonsHitsLower1->Write(); - delete zMassOneDauNofMuonsHitsLower1; - - - - // Number of Muon Hits for outer track - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dauSaNofMuonHits = getTH1Histo(Events, "dauSaNofMuonHits", "zGoldenDau1SaNofMuonHits", 100, 0, 100, cut_zGolden ) ; - TH1F *dau2SaNofMuonHits = getTH1Histo(Events, "dau2SaNofMuonHits", "zGoldenDau2SaNofMuonHits", 100, 0, 100, cut_zGolden ) ; - dauSaNofMuonHits->Add(dau2SaNofMuonHits); - dauSaNofMuonHits->Write(); - delete dauSaNofMuonHits; - delete dau2SaNofMuonHits; - - - dir->cd(); - TH1F * zMassBothDauSaNofMuonsHitsLower1 = getTH1Histo(Events, "zMassBothDauSaNofMuonsHitsLower1","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1SaNofMuonHits<1 && zGoldenDau2SaNofMuonHits<1" ); - zMassBothDauSaNofMuonsHitsLower1->Write(); - delete zMassBothDauSaNofMuonsHitsLower1; - - dir->cd(); - TH1F * zMassOneDauSaNofMuonsHitsLower1 = getTH1Histo(Events, "zMassOneDauSaNofMuonsHitsLowe10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1SaNofMuonHits<1 || zGoldenDau2SaNofMuonHits<1" ); - zMassOneDauSaNofMuonsHitsLower1->Write(); - delete zMassOneDauSaNofMuonsHitsLower1; - - - - - - // dxyFromBS - dir->cd(); - - TH1F *dauDxy = getTH1Histo(Events, "dauDxy", "zGoldenDau1dxyFromBS", 200, -1, 1, cut_zGolden ) ; - TH1F *dau2Dxy = getTH1Histo(Events, "dau2Dxy", "zGoldenDau2dxyFromBS", 200, -1, 1, cut_zGolden ) ; - dauDxy->Add(dau2Dxy); - dauDxy->Write(); - delete dauDxy; - delete dau2Dxy; - - - TH1F * zMassBothDaudxyFromBSHigher0_2 = getTH1Histo(Events, "zMassBothDaudxyFromBSHigher0_2", "zGoldenMass", 200, -1, 1, cut_zGolden + "zGoldenDau1dxyFromBS>0.2 && zGoldenDau2dxyFromBS>0.2" ) ; - zMassBothDaudxyFromBSHigher0_2->Write(); - delete zMassBothDaudxyFromBSHigher0_2; - - - - dir->cd(); - TH1F * zMassOneDaudxyFromBSHigher0_2 = getTH1Histo(Events, "zMassOneDaudxyFromBSHigher0_2", "zGoldenMass", 200, -1, 1, cut_zGolden + "zGoldenDau1dxyFromBS>0.2 || zGoldenDau2dxyFromBS>0.2" ) ; - zMassOneDaudxyFromBSHigher0_2->Write(); - delete zMassOneDaudxyFromBSHigher0_2; - - - // isTrackerMuon - dir->cd(); - TH1F * zMassBothDauNoTrackerMuon = getTH1Histo(Events, "zMassBothDauNoTrackerMuon", "zGoldenMass", 200, 0, 200, cut_zGolden + "zGoldenDau1TrackerMuonBit==0 && zGoldenDau2TrackerMuonBit==0"); - zMassBothDauNoTrackerMuon->Write(); - delete zMassBothDauNoTrackerMuon; - - dir->cd(); - TH1F * zMassOneDauNoTrackerMuon = getTH1Histo(Events, "zMassOneDauNoTrackerMuon", "zGoldenMass", 200, 0, 200, cut_zGolden + "zGoldenDau1TrackerMuonBit==0 || zGoldenDau2TrackerMuonBit==0"); - zMassOneDauNoTrackerMuon->Write(); - delete zMassOneDauNoTrackerMuon; - - - - // Eta distribution if MuonHits is zero - - dir->cd(); - TH1F * dauEtaNofMuonHits0 = getTH1Histo(Events, "dauEtaNofMuonHits0", "zGoldenDau1Eta", 200, -5, 5, cut_zGolden + "zGoldenDau1NofMuonHits==0" ); - TH1F * dau2EtaNofMuonHits0 = getTH1Histo(Events, "dau2EtaNofMuonHits0", "zGoldenDau2Eta", 200, -5, 5, cut_zGolden + "zGoldenDau2NofMuonHits==0" ); - dauEtaNofMuonHits0->Add(dau2EtaNofMuonHits0); - dauEtaNofMuonHits0->Write(); - delete dauEtaNofMuonHits0; - delete dau2EtaNofMuonHits0; - - - // Correlation study - - // *** Chi2 vs MuonHits *** - - dir->cd(); - TH2F * Chi2VsMuonHits = new TH2F("Chi2VsMuonHits", "Chi2VsMuonHits", 100, 0, 60, 100, 0, 6); - //TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events->Project("Chi2VsMuonHits", "zGoldenDau1Chi2:zGoldenDau1NofMuonHits", cut_zGolden); - Chi2VsMuonHits->SetDrawOption("Box"); - - Chi2VsMuonHits->Write(); - - delete Chi2VsMuonHits; - - - // *** Chi2 vs StripHits *** - - dir->cd(); - TH2F * Chi2VsStripHits = new TH2F("Chi2VsStripHits", "Chi2VsStripHits", 100, 0, 30, 100, 0, 6); - //TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events->Project("Chi2VsStripHits", "zGoldenDau1Chi2:zGoldenDau1NofStripHits", cut_zGolden); - Chi2VsStripHits->SetDrawOption("Box"); - - Chi2VsStripHits->Write(); - - delete Chi2VsStripHits; - - // *** MuonHits vs Eta *** - - dir->cd(); - TH2F * MuonHitsVsEta = new TH2F("MuonHitsVsEta", "MuonHitsVsEta", 100, -2.5, 2.5, 100, 0, 60); - //TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5); - Events->Project("MuonHitsVsEta", "zGoldenDau1NofMuonHits:zGoldenDau1Eta", cut_zGolden); - MuonHitsVsEta->SetDrawOption("Box"); - - MuonHitsVsEta->Write(); - - delete MuonHitsVsEta; - - - output_file->cd("/"); - - - - - // output_file->Close(); - -} - - - - - -void qualityStudiesZGlbTrk(TFile *output_file, TChain * Events){ - - gStyle->SetOptStat(); - gROOT->SetStyle("Plain"); - using namespace std; - - - - - // zMuTrk plots - TCut cut_zMuTrk("zMuTrkMass>60 && zMuTrkMass<120 && zMuTrkDau1Pt> 20 && zMuTrkDau2Pt>20 && zMuTrkDau1TrkIso< 3.0 && zMuTrkDau2TrkIso < 3.0 && zMuTrkDau1Eta<2.1 && zMuTrkDau2Eta<2.1"); - TDirectory * dir = output_file->mkdir("goodZToMuMuOneTrackPlots"); - dir->cd(); - - - - TH1F * zMass = getTH1Histo(Events, "zMass", "zMuTrkMass", 200, 0, 200, cut_zMuTrk) ; - zMass->Write(); - delete zMass; - - //Quality checks - // Chi2 - - // quality variables - // caveat: I'm requiring isolations - TH1F * dau1Chi2 = getTH1Histo(Events, "dau1Chi2", "zMuTrkDau1Chi2", 1000, 0, 100, cut_zMuTrk) ; - TH1F * dau2Chi2 = getTH1Histo(Events, "dau2Chi2", "zMuTrkDau2Chi2", 1000, 0, 100, cut_zMuTrk) ; - - dau1Chi2->Write(); - dau2Chi2->Write(); - delete dau1Chi2; - delete dau2Chi2; - - - dir->cd(); - TH1F * zMassDau1Chi2Higher10 = getTH1Histo(Events, "zMassDau1Chi2Higher10", "zMuTrkMass", 200, 0, 200, cut_zMuTrk +"zMuTrkDau1Chi2>10") ; - zMassDau1Chi2Higher10->Write(); - delete zMassDau1Chi2Higher10; - - dir->cd(); - TH1F * zMassOneDauChi2Higher10 = getTH1Histo(Events, "zMassOneDauChi2Higher10", "zMuTrkMass", 200, 0, 200, cut_zMuTrk +"zMuTrkDau1Chi2>10 || zMuTrkDau2Chi2>10") ; - zMassOneDauChi2Higher10->Write(); - delete zMassOneDauChi2Higher10; - - dir->cd(); - TH1F * zMassBothDauChi2Higher10 = getTH1Histo(Events, "zMassBothDauChi2Higher10", "zMuTrkMass", 200, 0, 200, cut_zMuTrk +"zMuTrkDau1Chi2>10 && zMuTrkDau2Chi2>10") ; - zMassBothDauChi2Higher10->Write(); - delete zMassBothDauChi2Higher10; - - - dir->cd(); - TH1F *dau1Chi2NofMuonHits0 = getTH1Histo(Events, "dau1Chi2NofMuonHits0", "zMuTrkDau1Chi2", 1000, 0, 100, cut_zMuTrk + "zMuTrkDau1NofMuonHits==0") ; - dau1Chi2NofMuonHits0->Write(); - delete dau1Chi2NofMuonHits0; - - - - dir->cd(); - TH1F *dau1SaChi2NofSaMuonHits0 = getTH1Histo(Events, "dau1SaChi2NofSaMuonHits0", "zMuTrkDau1SaChi2", 1000, 0, 100, cut_zMuTrk + "zMuTrkDau1SaNofMuonHits==0") ; - dau1SaChi2NofSaMuonHits0->Write(); - delete dau1SaChi2NofSaMuonHits0; - - - - TH1F *dau1Chi2NofStripHits0 = getTH1Histo(Events, "dau1Chi2NofStripHits0", "zMuTrkDau1Chi2", 1000, 0, 100, cut_zMuTrk + "zMuTrkDau1TrkNofStripHits<10") ; - dau1Chi2NofStripHits0->Write(); - delete dau1Chi2NofStripHits0; - - - - - - - - -// Number of Strips Hits for inner track - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dau1TrkNofStripHits = getTH1Histo(Events, "dau1TrkNofStripHits", "zMuTrkDau1TrkNofStripHits", 100, 0, 100, cut_zMuTrk ) ; - TH1F *dau2TrkNofStripHits = getTH1Histo(Events, "dau2TrkNofStripHits", "zMuTrkDau2TrkNofStripHits", 100, 0, 100, cut_zMuTrk ) ; - dau1TrkNofStripHits->Write(); - dau2TrkNofStripHits->Write(); - delete dau2TrkNofStripHits; - delete dau2TrkNofStripHits; - - -dir->cd(); - TH1F * zMassDau1TrkNofStripsHitsLower10 = getTH1Histo(Events, "zMassDau1TrkNofStripsHitsLower10","zMuTrkMass", 200, 0, 200,cut_zMuTrk +"zMuTrkDau1TrkNofStripHits<10" ); - zMassDau1TrkNofStripsHitsLower10->Write(); - delete zMassDau1TrkNofStripsHitsLower10; - - dir->cd(); - TH1F * zMassBothDauTrkNofStripsHitsLower10 = getTH1Histo(Events, "zMassBothDauTrkNofStripsHitsLower10","zMuTrkMass", 200, 0, 200,cut_zMuTrk +"zMuTrkDau1TrkNofStripHits<10 && zMuTrkDau2TrkNofStripHits<10" ); - zMassBothDauTrkNofStripsHitsLower10->Write(); - delete zMassBothDauTrkNofStripsHitsLower10; - - dir->cd(); - TH1F * zMassOneDauTrkNofStripsHitsLower10 = getTH1Histo(Events, "zMassOneDauTrkNofStripsHitsLower10","zMuTrkMass", 200, 0, 200,cut_zMuTrk +"zMuTrkDau1TrkNofStripHits<10 || zMuTrkDau2TrkNofStripHits<10" ); - zMassOneDauTrkNofStripsHitsLower10->Write(); - delete zMassOneDauTrkNofStripsHitsLower10; - - - - - - - // Number of Pixel Hits for inner track - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dau1TrkNofPixelHits = getTH1Histo(Events, "dau1TrkNofPixelHits", "zMuTrkDau1TrkNofPixelHits", 100, 0, 100, cut_zMuTrk ) ; - TH1F *dau2TrkNofPixelHits = getTH1Histo(Events, "dau2TrkNofPixelHits", "zMuTrkDau1TrkNofPixelHits", 100, 0, 100, cut_zMuTrk ) ; - dau1TrkNofPixelHits->Write(); - dau2TrkNofPixelHits->Write(); - delete dau1TrkNofPixelHits; - delete dau2TrkNofPixelHits; - - - - dir->cd(); - TH1F * zMassDau1TrkNofPixelsHitsLower1 = getTH1Histo(Events, "zMassDau1TrkNofPixelsHitsLower1","zMuTrkMass", 200, 0, 200,cut_zMuTrk +"zMuTrkDau1TrkNofPixelHits<1" ); - zMassDau1TrkNofPixelsHitsLower1->Write(); - delete zMassDau1TrkNofPixelsHitsLower1; - - dir->cd(); - TH1F * zMassBothDauTrkNofPixelsHitsLower1 = getTH1Histo(Events, "zMassBothDauTrkNofPixelsHitsLower1","zMuTrkMass", 200, 0, 200,cut_zMuTrk +"zMuTrkDau1TrkNofPixelHits<1 && zMuTrkDau2TrkNofPixelHits<1" ); - zMassBothDauTrkNofPixelsHitsLower1->Write(); - delete zMassBothDauTrkNofPixelsHitsLower1; - - dir->cd(); - TH1F * zMassOneDauTrkNofPixelsHitsLower1 = getTH1Histo(Events, "zMassOneDauTrkNofPixelsHitsLower1","zMuTrkMass", 200, 0, 200,cut_zMuTrk +"zMuTrkDau1TrkNofPixelHits<1 || zMuTrkDau2TrkNofPixelHits<1" ); - zMassOneDauTrkNofPixelsHitsLower1->Write(); - delete zMassOneDauTrkNofPixelsHitsLower1; - - - - - - - // Number of Muon Hits for global track - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dau1NofMuonHits = getTH1Histo(Events, "dau1NofMuonHits", "zMuTrkDau1NofMuonHits", 100, 0, 100, cut_zMuTrk ) ; - dau1NofMuonHits->Write(); - delete dau1NofMuonHits; - - - dir->cd(); - TH1F * zMassDau1NofMuonsHitsLower1 = getTH1Histo(Events, "zMassDau1NofMuonsHitsLower1","zMuTrkMass", 200, 0, 200,cut_zMuTrk +"zMuTrkDau1NofMuonHits<1 " ); - zMassDau1NofMuonsHitsLower1->Write(); - delete zMassDau1NofMuonsHitsLower1; - - - // Number of Muon Hits for outer track - dir->cd(); - // caveat: I'm requiring isolations - - TH1F *dau1SaNofMuonHits = getTH1Histo(Events, "dau1SaNofMuonHits", "zMuTrkDau1SaNofMuonHits", 100, 0, 100, cut_zMuTrk ) ; - dau1SaNofMuonHits->Write(); - delete dau1SaNofMuonHits; - - - - dir->cd(); - TH1F * zMassDau1SaNofMuonsHitsLower1 = getTH1Histo(Events, "zMassDau1SaNofMuonsHitsLower1","zMuTrkMass", 200, 0, 200,cut_zMuTrk +"zMuTrkDau1SaNofMuonHits<1 " ); - zMassDau1SaNofMuonsHitsLower1->Write(); - delete zMassDau1SaNofMuonsHitsLower1; - - - - // dxyFromBS - dir->cd(); - - TH1F *dauDxy = getTH1Histo(Events, "dauDxy", "zMuTrkDau1dxyFromBS", 200, -1, 1, cut_zMuTrk ) ; - TH1F *dau2Dxy = getTH1Histo(Events, "dau2Dxy", "zMuTrkDau2dxyFromBS", 200, -1, 1, cut_zMuTrk ) ; - dauDxy->Add(dau2Dxy); - dauDxy->Write(); - delete dauDxy; - delete dau2Dxy; - - - TH1F * zMassBothDaudxyFromBSHigher0_2 = getTH1Histo(Events, "zMassBothDaudxyFromBSHigher0_2", "zMuTrkMass", 200, -1, 1, cut_zMuTrk + "zMuTrkDau1dxyFromBS>0.2 && zMuTrkDau2dxyFromBS>0.2" ) ; - zMassBothDaudxyFromBSHigher0_2->Write(); - delete zMassBothDaudxyFromBSHigher0_2; - - - - dir->cd(); - TH1F * zMassOneDaudxyFromBSHigher0_2 = getTH1Histo(Events, "zMassOneDaudxyFromBSHigher0_2", "zMuTrkMass", 200, -1, 1, cut_zMuTrk + "zMuTrkDau1dxyFromBS>0.2 || zMuTrkDau2dxyFromBS>0.2" ) ; - zMassOneDaudxyFromBSHigher0_2->Write(); - delete zMassOneDaudxyFromBSHigher0_2; - - - // isTrackerMuon - dir->cd(); - - - TH1F * zMassDau1NoTrackerMuon = getTH1Histo(Events, "zMassDau1NoTrackerMuon", "zMuTrkMass", 200, 0, 200, cut_zMuTrk + "zMuTrkDau1TrackerMuonBit==0 "); - zMassDau1NoTrackerMuon->Write(); - delete zMassDau1NoTrackerMuon; - - - - // Eta distribution if MuonHits is zero - - dir->cd(); - TH1F * dau1EtaNofMuonHits0 = getTH1Histo(Events, "dau1EtaNofMuonHits0", "zMuTrkDau1Eta", 200, -5, 5, cut_zMuTrk + "zMuTrkDau1NofMuonHits==0" ); - dau1EtaNofMuonHits0->Write(); - delete dau1EtaNofMuonHits0; - - - - -} - - - - - - - - -void qualityStudies(){ - -TChain * Events= new TChain("Events"); - - int nFiles = 220; - - for(int j=1;jAdd(name.c_str()); - } - -TFile * output_file = TFile::Open("histo_qcd.root", "RECREATE"); -qualityStudiesZGolden(output_file, Events); - qualityStudiesZGoldenNotIso(output_file, Events); - qualityStudiesZGlbTrk(output_file, Events); - qualityStudiesZMuSta(output_file, Events); - output_file->Close(); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/runToyMC.csh b/ElectroWeakAnalysis/ZMuMu/test/macros/runToyMC.csh deleted file mode 100755 index 16f9c3f75878c..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/runToyMC.csh +++ /dev/null @@ -1,47 +0,0 @@ -######################### -# # -# author: Pasquale Noli # -# INFN Naples # -# script to run ToyMC # -# # -######################### - -#!/bin/csh -if(-e outputToy) rm -rf outputToy -mkdir outputToy -set i=1 -set iterations = $1 -set nz = $2 -set eff_trk = $3 -set eff_sa = $4 -set eff_iso = $5 -set eff_hlt = $6 -set bkg_scale = $7 -set max_mass = $8 -rm -f fitResult.txt -echo "# Yield eff_trk eff_sa eff_iso eff_hlt" > fitResult.txt -echo "$nz $eff_trk $eff_sa $eff_iso $eff_hlt" >> fitResult.txt -while ($i <= $iterations) - echo $i - toyMonteCarlo -p Analysis_10pb.root -n 1 -s $i -y $nz -T $eff_trk -S $eff_sa -I $eff_iso -H $eff_hlt -f $bkg_scale -M $max_mass - # -S 1 -T 1 -H 1 - mergeTFileServiceHistograms -i zmm_1.root bkg_1.root - mv out.root analysis_$i.root - zChi2Fit -c -M 120 analysis_$i.root >& log_fit_$i.txt - #mv zmm_1.root zmm_$i.root - #zFitToyMc zmm_1.root >& log_fit_$i.txt - #mv analysis_$i.root outputToy - #mv zmm_$i.root outputToy - mv analysis_$i.root outputToy - mv *eps outputToy - mv log_fit_$i.txt outputToy - set i=`expr $i + 1` -end - root -l -q create_tree_for_toyMC.C - root -l -q pulls.C - mv fitResult.root outputToy - mv fitResult.txt outputToy - mv pulls.eps outputToy -echo "Pulls are saved into pulls.eps" - -#gv pulls.eps diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/start_toy.csh b/ElectroWeakAnalysis/ZMuMu/test/macros/start_toy.csh deleted file mode 100644 index 21f87ef3c08e8..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/start_toy.csh +++ /dev/null @@ -1,28 +0,0 @@ -######################### -# # -# author: Pasquale Noli # -# INFN Naples # -# script to run ToyMC # -# # -######################### - -#!/bin/csh -rm fitResalt* -mkdir outputToy -set i=1 -while ($i <= $1) - echo $i - toyMonteCarlo -n 1 -s $i - mergeTFileServiceHistograms -o analysis_$i.root -i zmm_1.root bkg_1.root - zFitToyMc analysis_$i.root >& log_fit_$i.txt - rm -f analysis_$i.root - mv *ps outputToy - mv log_fit_$i.txt outputToy - set i=`expr $i + 1` -end - root -l -q create_tree_for_toyMC.C - root -l -q pulls.C - mv pulls.eps outputToy -echo "Pulls are saved into pulls.eps" - -gv outputToy/pulls.eps diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/testToyMC_crab.sh b/ElectroWeakAnalysis/ZMuMu/test/macros/testToyMC_crab.sh deleted file mode 100755 index cbd7a29a13cd8..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/testToyMC_crab.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/sh -######################### -# # -# author: Pasquale Noli # -# INFN Naples # -# script to run ToyMC # -# # -######################### - -if [ -e outputToy ]; then - rm -rf outputToy -fi -mkdir outputToy - -i="$1" -if [ "$i" = "" ]; then - echo "Error: missing job index" - exit 1; -fi -echo "max events from CRAB: $MaxEvents" -n="$MaxEvents" -if [ "$n" = "" ]; then - n="$2" -fi -if [ "$n" = "" ]; then - echo "Error: missing number of experiments" - exit 2; -fi - -iterations=1000 -nz=5077000 -eff_trk=0.75 -eff_sa=0.75 -eff_iso=0.75 -eff_hlt=0.75 -bkg_scale=100 -max_mass=140 -rm -f fitResult.txt -echo "# Yield eff_trk eff_sa eff_iso eff_hlt" > fitResult.txt -echo "$nz $eff_trk $eff_sa $eff_iso $eff_hlt" >> fitResult.txt -j=`expr \( $i - 1 \) \* $n + 1` -jmax=`expr $j + $n - 1` -echo "job number: #$i with $n experiments ($j to $jmax)" -while [ $j -le $jmax ]; do -echo "running toy MC : ./toyMonteCarlo -n 1 -s $j -y $nz -T $eff_trk -S $eff_sa -I $eff_iso -H $eff_hlt -f $bkg_scale -M $max_mass" - ./toyMonteCarlo -n 1 -s $j -y $nz -T $eff_trk -S $eff_sa -I $eff_iso -H $eff_hlt -f $bkg_scale -M $max_mass - echo "merging histograms: mergeTFileServiceHistograms -o analysis_$j.root -i zmm_1.root bkg_1.root" - mergeTFileServiceHistograms -o analysis_$j.root -i zmm_1.root bkg_1.root - echo "performing fit: zFitToyMc -M 140 analysis_$j.root >& log_fit_$j.txt" - ./zFitToyMc -M 140 analysis_$j.root >& log_fit_$j.txt - mv analysis_$j.root outputToy - mv *eps outputToy - mv log_fit_$j.txt outputToy - j=`expr $j + 1` -done -echo "pack the results" -tar cvfz outputToy.tgz outputToy/ - diff --git a/ElectroWeakAnalysis/ZMuMu/test/macros/toyRooFitAnalyze.C b/ElectroWeakAnalysis/ZMuMu/test/macros/toyRooFitAnalyze.C deleted file mode 100644 index 8a972280f9269..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/macros/toyRooFitAnalyze.C +++ /dev/null @@ -1,99 +0,0 @@ -//how to read the fit result in root after running several toys...., to be run interactively: root toyTooFitAnalyze.C..... -{ -#include "RooFitResult.h" -#include "TCanvas.h" -#include "TH1.h" -#include "TFile.h" -#include "RooAbsReal.h" -//#include - - - -using namespace RooFit; - int Lumi = 45; - double Y_true= 17000; - // 17000 for L= 45, - double emt_true= 0.998257; - double ems_true= 0.989785; - double emmNotIso_true= 0.982977; - double emmHlt_true= 0.916176; - - -TCanvas c1; TH1D h_Yield("h_Yield", "h_Yield", 30, -5, 5); -TH1D h_emt("h_emt", "h_emt", 30, -5, 5); -TH1D h_ems("h_ems", "h_ems", 30, -5, 5); -TH1D h_emmNotIso("h_emmNotIso", "h_emmNotIso", 30, -5, 5); -TH1D h_emmHlt("h_emmHlt", "h_emmHlt", 30, -5, 5); - -TH1D h_chi2("h_chi2", "h_chi2", 30, 0, 5); - -TF1 f1("f1","gaus",-3,3); -f1.SetLineColor(kRed); - -for (int i =1; i <= 1000; i++){ -TFile f(Form("outputToy_%d./out_%d.root",Lumi,i)); - if (f.IsZombie()) cout << "file not exist " << endl; - if (f.IsZombie()) continue; -RooFitResult* r = gDirectory->Get("totChi2;1"); - //r->floatParsFinal().Print("s"); - // without s return a list, can we get the number? - //RooFitResult* r = gDirectory->Get("toy_totChi2;1"); - // chi2 -std::cout << " chi2 " << r->minNll() << "distance from FCN " << r->edm()<< std::endl; - h_chi2.Fill(r->minNll()/55.); - //distamce form chi2..... - //r->edm(); - // yield -r->floatParsFinal()[0]->Print(); -RooRealVar * y = r->floatParsFinal().find("Yield"); -RooRealVar * e_mt = r->floatParsFinal().find("eff_tk"); -RooRealVar * e_ms = r->floatParsFinal().find("eff_sa"); -RooRealVar * e_mmNotIso = r->floatParsFinal().find("eff_iso"); -RooRealVar * e_mmHlt = r->floatParsFinal().find("eff_hlt"); - - // RooAbsReal * z = new RooAbsReal(y); -std::cout << " Yield value for the chi2 number " << i << " = " << y->getVal() << std::endl; -h_Yield.Fill((y->getVal() - Y_true )/ (y->getError()) ); -h_emt.Fill((e_mt->getVal() - emt_true )/ (e_mt->getError()) ); -h_ems.Fill((e_ms->getVal() - ems_true )/ (e_ms->getError()) ); -h_emmNotIso.Fill((e_mmNotIso->getVal() - emmNotIso_true )/ (e_mmNotIso->getError()) ); -h_emmHlt.Fill((e_mmHlt->getVal() - emmHlt_true )/ (e_mmHlt->getError()) ); -//delete f; -} - - - - gStyle->SetOptStat(1110); - gStyle->SetOptFit(1111); - gStyle->SetStatFontSize(0.04); - //gStyle->SetStatFontSize(0.1); -//gStyle->SetFitFormat("5.3g"); - h_Yield.Fit("f1","","", -3, 3); -h_Yield.Draw(); -f1.Draw("same"); - -c1.SaveAs(Form("outputToy_%d./toy_Yield_%d.eps",Lumi,Lumi)); -h_chi2.Draw(); - -//f1.Draw("same"); - -c1.SaveAs(Form("outputToy_%d./toy_chi2_%d.eps",Lumi,Lumi)); -h_emt.Draw(); -h_emt.Fit("f1","","", -3, 3); -f1.Draw("same"); -c1.SaveAs(Form("outputToy_%d./toy_eff_tk_%d.eps", Lumi, Lumi)); -h_ems.Draw(); - h_ems.Fit("f1","","", -3, 3); -f1.Draw("same"); -c1.SaveAs(Form("outputToy_%d./toy_eff_sa_%d.eps",Lumi,Lumi)); -h_emmNotIso.Draw(); -h_emmNotIso.Fit("f1","","", -3, 3); -f1.Draw("same"); -c1.SaveAs(Form("outputToy_%d./toy_eff_iso_%d.eps",Lumi,Lumi)); -h_emmHlt.Draw(); - h_emmHlt.Fit("f1","","", -3, 3); -f1.Draw("same"); -c1.SaveAs(Form("outputToy_%d./toy_eff_hlt_%d.eps",Lumi,Lumi)); - -} - diff --git a/ElectroWeakAnalysis/ZMuMu/test/mcAcceptance.py b/ElectroWeakAnalysis/ZMuMu/test/mcAcceptance.py deleted file mode 100644 index ed1fba1199871..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/mcAcceptance.py +++ /dev/null @@ -1,223 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("MCAcceptance") -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - - -process.load("FWCore.MessageLogger.MessageLogger_cfi") - -process.MessageLogger.cerr.threshold = '' -process.MessageLogger.cerr.FwkReport.reportEvery = 1000 - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( -'file:/scratch2/users/fabozzi/spring10/powheg_zmm_cteq66/1CD6D0A6-1E64-DF11-BB60-001D09FD0D10.root', -'file:/scratch2/users/fabozzi/spring10/powheg_zmm_cteq66/46BC4EF2-B462-DF11-8FE0-0015178C4D14.root', -'file:/scratch2/users/fabozzi/spring10/powheg_zmm_cteq66/48C1BEAB-1E64-DF11-8874-A4BADB3CF509.root', -'file:/scratch2/users/fabozzi/spring10/powheg_zmm_cteq66/9E650E9F-1963-DF11-B7CE-0024E8768D1A.root', -'file:/scratch2/users/fabozzi/spring10/powheg_zmm_cteq66/C28E2383-1D64-DF11-894B-A4BADB3CF8F5.root', -'file:/scratch2/users/fabozzi/spring10/powheg_zmm_cteq66/D21A4219-1D64-DF11-A4EC-001D09FD0D10.root', -'file:/scratch2/users/fabozzi/spring10/powheg_zmm_cteq66/F0D65D50-F162-DF11-93BB-A4BADB3CF208.root', -'file:/scratch2/users/fabozzi/spring10/powheg_zmm_cteq66/F4A6969A-9562-DF11-8192-00E08142962E.root', -'file:/scratch2/users/fabozzi/spring10/powheg_zmm_cteq66/F8CAC083-6462-DF11-9D7E-001C23C0E208.root', -'file:/scratch2/users/fabozzi/spring10/powheg_zmm_cteq66/FCD6E07C-9562-DF11-9C9A-001EC94BA3D1.root', - - - -) -) -process.evtInfo = cms.OutputModule("AsciiOutputModule") - - - - -process.zToMuMuMC = cms.EDFilter("CandViewRefSelector", - src = cms.InputTag("genParticles"), - cut = cms.string('pdgId = 23 & status = 3 & abs(daughter(0).pdgId) = 13') -) - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('MC_36Y_V10::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - -process.goodMuons = cms.EDFilter("MuonSelector", - src = cms.InputTag("muons"), - cut = cms.string('isGlobalMuon = 1 && pt>15.'), - filter = cms.bool(False) -) - -# - - -process.dimuons = cms.EDFilter("CandViewShallowCloneCombiner", - checkCharge = cms.bool(True), - cut = cms.string('mass > 0'), - decay = cms.string('goodMuons@+ goodMuons@-') -) - - - - -process.load("PhysicsTools.HepMCCandAlgos.goodMuonMCMatch_cfi") -process.goodMuonMCMatch.src = 'goodMuons' -process.goodMuonMCMatch.maxDPtRel = cms.double(0.1) -process.goodMuonMCMatch.resolveByMatchQuality = cms.bool(True) -process.goodMuonMCMatch.maxDeltaR = cms.double(0.1) -process.goodMuonMCMatch.checkCharge = cms.bool(True) -process.goodMuonMCMatch.resolveAmbiguities = cms.bool(True) - - - - -process.dimuonsMCMatch = cms.EDFilter("MCTruthCompositeMatcherNew", - src = cms.InputTag("dimuons"), - # - # comment PAT match because works only for layer-0 muons - # - # VInputTag matchMaps = { muonMatch } - matchPDGId = cms.vint32(23,13), - matchMaps = cms.VInputTag(cms.InputTag("goodMuonMCMatch")) -) - - - - -process.mcAcceptanceAA = cms.EDAnalyzer("MCAcceptanceAnalyzer", - zToMuMu = cms.InputTag("dimuons"), - zToMuMuMC = cms.InputTag("zToMuMuMC"), - zToMuMuMatched = cms.InputTag("dimuonsMCMatch"), - massMin = cms.double(60.0), - massMax = cms.double(120.0), - etaDau0Min = cms.double(0.), - etaDau0Max = cms.double(2.1), - etaDau1Min = cms.double(0.), - etaDau1Max = cms.double(2.1), - ptMin = cms.double(20.0), - massMinZMC = cms.double(60.0), - massMaxZMC = cms.double(120.0) -) - -#process.mcAcceptanceBA = cms.EDAnalyzer("MCAcceptanceAnalyzer", -# zToMuMu = cms.InputTag("dimuons"), -# zToMuMuMC = cms.InputTag("zToMuMuMC"), -# zToMuMuMatched = cms.InputTag("dimuonsMCMatch"), -# massMin = cms.double(60.0), -# massMax = cms.double(120.0), -# etaDau0Min = cms.double(2.1), -# etaDau0Max = cms.double(2.4), -# etaDau1Min = cms.double(0.), -# etaDau1Max = cms.double(2.1), -# ptMin = cms.double(20.0), -# massMinZMC = cms.double(60.0), -# massMaxZMC = cms.double(120.0) -#) - - -process.mcAcceptanceBar = cms.EDAnalyzer("MCAcceptanceAnalyzer", - zToMuMu = cms.InputTag("dimuons"), - zToMuMuMC = cms.InputTag("zToMuMuMC"), - zToMuMuMatched = cms.InputTag("dimuonsMCMatch"), - massMin = cms.double(60.0), - massMax = cms.double(120.0), - etaDau0Min = cms.double(0.), - etaDau0Max = cms.double(0.9), - etaDau1Min = cms.double(0.), - etaDau1Max = cms.double(2.4), - ptMin = cms.double(20.0), - massMinZMC = cms.double(60.0), - massMaxZMC = cms.double(120.0) -) - -process.mcAcceptanceBarEnd = cms.EDAnalyzer("MCAcceptanceAnalyzer", - zToMuMu = cms.InputTag("dimuons"), - zToMuMuMC = cms.InputTag("zToMuMuMC"), - zToMuMuMatched = cms.InputTag("dimuonsMCMatch"), - massMin = cms.double(60.0), - massMax = cms.double(120.0), - etaDau0Min = cms.double(0.9), - etaDau0Max = cms.double(1.2), - etaDau1Min = cms.double(0.), - etaDau1Max = cms.double(2.4), - ptMin = cms.double(20.0), - massMinZMC = cms.double(60.0), - massMaxZMC = cms.double(120.0) -) - - - -process.mcAcceptanceEnd = cms.EDAnalyzer("MCAcceptanceAnalyzer", - zToMuMu = cms.InputTag("dimuons"), - zToMuMuMC = cms.InputTag("zToMuMuMC"), - zToMuMuMatched = cms.InputTag("dimuonsMCMatch"), - massMin = cms.double(60.0), - massMax = cms.double(120.0), - etaDau0Min = cms.double(1.2), - etaDau0Max = cms.double(2.1), - etaDau1Min = cms.double(0.), - etaDau1Max = cms.double(2.4), - ptMin = cms.double(20.0), - massMinZMC = cms.double(60.0), - massMaxZMC = cms.double(120.0) -) - - - - - - -process.mcPath = cms.Path( - process.zToMuMuMC + - process.goodMuons + - process.goodMuonMCMatch + - process.dimuons + - process.dimuonsMCMatch+ - process.mcAcceptanceAA - # process.mcAcceptanceBar + - # process.mcAcceptanceBarEnd + - # process.mcAcceptanceEnd - - ) - - - -from Configuration.EventContent.EventContent_cff import * - -process.EventContent = cms.PSet( - outputCommands = cms.untracked.vstring( - 'drop *', - 'keep *_dimuons_*_*', - 'keep *_goodMuons_*_*', - 'keep *_genParticles_*_*', - 'keep *_goodMuonMCMatch_*_*', - 'keep *_dimuonsMCMatch_*_*', - ) -) - -AODSIMDimuonEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -AODSIMDimuonEventContent.outputCommands.extend(AODSIMEventContent.outputCommands) -AODSIMDimuonEventContent.outputCommands.extend(process.EventContent.outputCommands) - -process.dimuonsOutputModule = cms.OutputModule("PoolOutputModule", - AODSIMDimuonEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('acceptance'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('dimuons_forAcceptance_1000.root') -) - - - - -process.end = cms.EndPath(process.dimuonsOutputModule) - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/mcAcceptanceForDistMuons.py b/ElectroWeakAnalysis/ZMuMu/test/mcAcceptanceForDistMuons.py deleted file mode 100644 index 5f940b800d1cd..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/mcAcceptanceForDistMuons.py +++ /dev/null @@ -1,219 +0,0 @@ -from __future__ import print_function -import FWCore.ParameterSet.Config as cms - -process = cms.Process("MCAcceptance") -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - - - - -process.source = cms.Source("PoolSource", - debugVerbosity = cms.untracked.uint32(0), - debugFlag = cms.untracked.bool(False), - fileNames = cms.untracked.vstring() -) -import os -dirname = "/data1/home/degruttola/CMSSW_3_3_5/src/ElectroWeakAnalysis/Utilities/test/DistMuonsv2/res/" -dirlist = os.listdir(dirname) -basenamelist = os.listdir(dirname + "/") -for basename in basenamelist: - process.source.fileNames.append("file:" + dirname + "/" + basename) -print("Number of files to process is %s" % (len(process.source.fileNames))) - - - - -## process.source = cms.Source("PoolSource", -## fileNames = cms.untracked.vstring( -## "file:/data1/home/degruttola/CMSSW_3_3_5/src/ElectroWeakAnalysis/Utilities/test/DistMuonsv2/res/selectedEvents_1818.root", -## "file:~/Zmumu7TeVGenSimReco/0ABB0814-C082-DE11-9AB7-003048D4767C.root", -## "file:~/Zmumu7TeVGenSimReco/0ABB0814-C082-DE11-9AB7-003048D4767C.root", -## "file:~/Zmumu7TeVGenSimReco/38980FEC-C182-DE11-A3B5-003048D4767C.root", -## "file:~/Zmumu7TeVGenSimReco/3AF703B9-AE82-DE11-9656-0015172C0925.root", -## "file:~/Zmumu7TeVGenSimReco/46854F8E-BC82-DE11-80AA-003048D47673.root", -## "file:~/Zmumu7TeVGenSimReco/8025F9B0-AC82-DE11-8C28-0015172560C6.root", -## "file:~/Zmumu7TeVGenSimReco/88DDF58E-BC82-DE11-ADD8-003048D47679.root", -## "file:~/Zmumu7TeVGenSimReco/9A115324-BB82-DE11-9C66-001517252130.root", -## "file:~/Zmumu7TeVGenSimReco/FC279CAC-AD82-DE11-BAAA-001517357D36.root" -## ) -## ) - -process.evtInfo = cms.OutputModule("AsciiOutputModule") - - - - - - -process.zToMuMuMC = cms.EDFilter("CandViewRefSelector", - src = cms.InputTag("genParticles"), - cut = cms.string('pdgId = 23 & status = 3 & abs(daughter(0).pdgId) = 13') -) - - -process.dimuons = cms.EDFilter("CandViewShallowCloneCombiner", - checkCharge = cms.bool(False), - cut = cms.string('mass > 0'), - decay = cms.string('distortedMuons@+ distortedMuons@-') -) - - - -process.load("PhysicsTools.HepMCCandAlgos.goodMuonMCMatch_cfi") -#goodMuonMCMatch.src = 'selectedLayer1Muons' -process.goodMuonMCMatch.src = 'distortedMuons' - - -process.dimuonsMCMatch = cms.EDFilter("MCTruthCompositeMatcherNew", - src = cms.InputTag("dimuons"), - # - # comment PAT match because works only for layer-0 muons - # - # VInputTag matchMaps = { muonMatch } - matchPDGId = cms.vint32(), - matchMaps = cms.VInputTag(cms.InputTag("goodMuonMCMatch")) -) - - - - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('MC_31X_V3::All') -process.load("Configuration.StandardSequences.MagneticField_cff") - - - -process.load("CondCore.DBCommon.CondDBCommon_cfi") -process.poolDBESSource1 = cms.ESSource("PoolDBESSource", - BlobStreamerName = cms.untracked.string('TBufferBlobStreamingService'), - DBParameters = cms.PSet( - messageLevel = cms.untracked.int32(2), - authenticationPath = cms.untracked.string('.') - ), - timetype = cms.untracked.string('runnumber'), - connect = cms.string('frontier://FrontierPrep/CMS_COND_PHYSICSTOOLS'), - toGet = cms.VPSet( - cms.PSet( - record = cms.string('MuScleFitDBobjectRcd'), - tag = cms.string('MuScleFit_Scale_OctoberExercise_EWK_InnerTrack'), - label = cms.untracked.string('') - ) - ) -) -process.poolDBESSource2 = cms.ESSource("PoolDBESSource", - BlobStreamerName = cms.untracked.string('TBufferBlobStreamingService'), - DBParameters = cms.PSet( - messageLevel = cms.untracked.int32(2), - authenticationPath = cms.untracked.string('.') - ), - timetype = cms.untracked.string('runnumber'), - connect = cms.string('frontier://FrontierPrep/CMS_COND_PHYSICSTOOLS'), - toGet = cms.VPSet( - cms.PSet( - record = cms.string('MuScleFitDBobjectRcd'), - tag = cms.string('MuScleFit_Resol_OctoberExercise_EWK_InnerTrack_WithLabel'), - label = cms.untracked.string('MuScleFit_Resol_OctoberExercise_EWK_InnerTrack_WithLabel') - ) - ) -) -process.poolDBESSource3 = cms.ESSource("PoolDBESSource", - BlobStreamerName = cms.untracked.string('TBufferBlobStreamingService'), - DBParameters = cms.PSet( - messageLevel = cms.untracked.int32(2), - authenticationPath = cms.untracked.string('.') - ), - timetype = cms.untracked.string('runnumber'), - connect = cms.string('frontier://FrontierPrep/CMS_COND_PHYSICSTOOLS'), - toGet = cms.VPSet( - cms.PSet( - record = cms.string('MuScleFitDBobjectRcd'), - tag = cms.string('MuScleFit_Resol_OctoberExercise_SherpaIdealMC_WithLabel'), - label = cms.untracked.string('MuScleFit_Resol_OctoberExercise_SherpaIdealMC_WithLabel') - ) - ) -) - -# Create a new "distorted" Muon collection -process.distortedMuons = cms.EDFilter("DistortedMuonProducerFromDB", - MuonTag = cms.untracked.InputTag("muons"), - - DBScaleLabel = cms.untracked.string(''), - DBDataResolutionLabel = cms.untracked.string('MuScleFit_Resol_OctoberExercise_EWK_InnerTrack_WithLabel'), - DBMCResolutionLabel = cms.untracked.string('MuScleFit_Resol_OctoberExercise_SherpaIdealMC_WithLabel'), -) - - - - - - - -process.mcAcceptance = cms.EDAnalyzer("MCAcceptanceAnalyzer", - zToMuMu = cms.InputTag("dimuons"), - zToMuMuMC = cms.InputTag("zToMuMuMC"), - zToMuMuMatched = cms.InputTag("dimuonsMCMatch"), - massMin = cms.double(60.0), - massMax = cms.double(120.0), - etaMin = cms.double(0.0), - etaMax = cms.double(2.1), - ptMin = cms.double(20.0), -# parameter for denominator - massMinZMC = cms.double(60.0) -) - -process.mcPath = cms.Path( - process.zToMuMuMC* -# process.distortedMuons * - process.goodMuonMCMatch * - process.dimuons * - process.dimuonsMCMatch* - process.mcAcceptance - ) - -from Configuration.EventContent.EventContent_cff import * - -process.EventContent = cms.PSet( - outputCommands = cms.untracked.vstring( - 'drop *', - 'keep *_dimuons_*_*', - 'keep *_muons_*_*', - 'keep *_genParticles_*_*', - 'keep *_muonMatch_*_*', - 'keep *_trackMuMatch_*_*', - 'keep *_allDimuonsMCMatch_*_*', - 'keep *_distortedMuons_*_*' -# 'keep patTriggerObjects_patTrigger_*_*', -# 'keep patTriggerFilters_patTrigger_*_*', -# 'keep patTriggerPaths_patTrigger_*_*', -# 'keep patTriggerEvent_patTriggerEvent_*_*', -# 'keep patTriggerObjectsedmAssociation_patTriggerEvent_*_*' - ) -) - -AODSIMDimuonEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -AODSIMDimuonEventContent.outputCommands.extend(AODSIMEventContent.outputCommands) -AODSIMDimuonEventContent.outputCommands.extend(process.EventContent.outputCommands) - -process.dimuonsOutputModule = cms.OutputModule("PoolOutputModule", - AODSIMDimuonEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('acceptance'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('dimuons_testDistMuon.root') -) - - - - -process.end = cms.EndPath(process.dimuonsOutputModule) - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/merge.py b/ElectroWeakAnalysis/ZMuMu/test/merge.py deleted file mode 100644 index b370d6cee9aac..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/merge.py +++ /dev/null @@ -1,48 +0,0 @@ -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("Merge") - - -process.load("FWCore.MessageLogger.MessageLogger_cfi") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - "file:NtupleLooseTestNew_oneshot_all_Test_10_1.root", - "file:NtupleLooseTestNew_oneshot_all_Test_11_1.root", - "file:NtupleLooseTestNew_oneshot_all_Test_12_1.root", - "file:NtupleLooseTestNew_oneshot_all_Test_13_1.root", - "file:NtupleLooseTestNew_oneshot_all_Test_14_1.root", - ) -) - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -process.out = cms.OutputModule( - "PoolOutputModule", - fileName = cms.untracked.string('file:Ntuple_ZmmPowheg_36X.root'), -) - -process.dummy = cms.EDAnalyzer( - "EventContentAnalyzer" - ) - -process.path = cms.Path( - process.dummy - ) - -process.endPath = cms.EndPath( - process.eventInfo + - process.out -) diff --git a/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuAnalysis_IsoDeposit.py b/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuAnalysis_IsoDeposit.py deleted file mode 100644 index a51e894145a7b..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuAnalysis_IsoDeposit.py +++ /dev/null @@ -1,368 +0,0 @@ -from __future__ import print_function -#analysis code. -#It produces plot for Fit study -#author Luca Lista -#modificated by Noli Pasquale 21-10-2008 -#modified by Annapaola de Cosa 18-12-2008 - - -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("ZToMuMuAnalysis") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.maxEvents = cms.untracked.PSet( -# input = cms.untracked.int32(17810) - input = cms.untracked.int32(-1) -) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - "file:testDimuonSkim_prova.root" - ) -) - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("Analysis_test.root") -) - -zSelection = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2 & abs(daughter(1).eta)<2 & mass > 20"), - isoCut = cms.double(3.), - ptThreshold = cms.untracked.double(1.5), - etEcalThreshold = cms.untracked.double(0.2), - etHcalThreshold = cms.untracked.double(0.5), - deltaRVetoTrk = cms.untracked.double(0.015), - deltaRTrk = cms.untracked.double(0.3), - deltaREcal = cms.untracked.double(0.25), - deltaRHcal = cms.untracked.double(0.25), - alpha = cms.untracked.double(0.), - beta = cms.untracked.double(-0.75), - relativeIsolation = cms.bool(False) - -# For standard isolation (I_Tkr<3GeV) choose this configuration: -# isoCut = cms.double(3.), -# ptThreshold = cms.untracked.double(1.5), -# etEcalThreshold = cms.untracked.double(0.2), -# etHcalThreshold = cms.untracked.double(0.5), -# deltaRVetoTrk = cms.untracked.double(0.015), -# deltaRTrk = cms.untracked.double(0.3), -# deltaREcal = cms.untracked.double(0.25), -# deltaRHcal = cms.untracked.double(0.25), -# alpha = cms.untracked.double(0.), -# beta = cms.untracked.double(-0.75), -# relativeIsolation = cms.bool(False) - - - ) - -process.goodZToMuMu = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) -#ZMuMu: richiedo almeno 1 HLT trigger match.Per la shape -process.goodZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMu: richiedo 2 HLT trigger match -process.goodZToMuMu2HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("bothMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMu: richiedo 1 HLT trigger match -process.goodZToMuMu1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("exactlyOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - -process.nonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -#ZMuMu1notIso: richiedo almeno un trigger -process.nonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("nonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -process.zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - src = cms.InputTag("dimuonsOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneTrack = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneStandAloneMuon = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsOneStandAloneMuon"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrack"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -#ZMuTk:richiedo che il muGlobal 'First' ha HLT match -process.goodZToMuMuOneTrackFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrack"), - condition =cms.string("firstMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneStandAloneMuon"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -#ZMuSta:richiedo che il muGlobal ha HLT match -process.goodZToMuMuOneStandAloneMuonFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - condition =cms.string("globalisMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -process.zmumuSaMassHistogram = cms.EDAnalyzer( - "ZMuMuSaMassHistogram", - src_m = cms.InputTag("goodZToMuMu"), - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbin = cms.untracked.int32(200) - # name = cms.untracked.string("zMass") - ) - -goodZToMuMuTemplate = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("replace this string with your cut"), - src = cms.InputTag("goodZToMuMuAtLeast1HLT"), - filter = cms.bool(False) -) - -#### Plot ### - -zPlots = cms.PSet( - histograms = cms.VPSet( - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zMass"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu1Pt"), - description = cms.untracked.string("Highest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("max(daughter(0).pt,daughter(1).pt)") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu2Pt"), - description = cms.untracked.string("Lowest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("min(daughter(0).pt,daughter(1).pt)") - ) - ) -) - -#ZMuMu almeno 1 HLT + 2 track-iso (Shape) -goodZToMuMuPlotsTemplate = cms.EDAnalyzer( - "CandViewHistoAnalyzer", - zPlots, - src = cms.InputTag("goodZToMuMuAtLeast1HLT") -) - -#ZMuMu almeno 1 HLT + almeno 1 NON track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -nonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -nonIsolatedZToMuMuPlots.src = cms.InputTag("nonIsolatedZToMuMuAtLeast1HLT") -setattr(process, "nonIsolatedZToMuMuPlots", nonIsolatedZToMuMuPlots) - -etaBounds = [-2, 2.0] - -def addModulesFromTemplate(sequence, moduleLabel, src, probeSelection): - print("selection for: ", moduleLabel) - for i in range(len(etaBounds)-1): - etaMin = etaBounds[i] - etaMax = etaBounds[i+1] - module = copy.deepcopy(goodZToMuMuTemplate) - if probeSelection == "single": - cut = "%5.3f < daughter(1).eta < %5.3f" %(etaMin, etaMax) - elif probeSelection == "double": - cut = "%5.3f < daughter(0).eta < %5.3f | %5.3f < daughter(1).eta < %5.3f" %(etaMin, etaMax, etaMin, etaMax) - print(i, ") cut = ", cut) - setattr(module, "cut", cut) - setattr(module, "src", cms.InputTag(src)) - copyModuleLabel = moduleLabel + str(i) - setattr(process, copyModuleLabel, module) - if sequence == None: - sequence = module - else: - sequence = sequence + module - plotModule = copy.deepcopy(goodZToMuMuPlotsTemplate) - setattr(plotModule, "src", cms.InputTag(copyModuleLabel)) - for h in plotModule.histograms: - h.description.setValue(h.description.value() + ": " + "#eta: [%5.3f, %5.3f]" %(etaMin, etaMax)) - plotModuleLabel = moduleLabel + "Plots" + str(i) - setattr(process, plotModuleLabel, plotModule) - sequence = sequence + plotModule - path = cms.Path(sequence) - setattr(process, moduleLabel+"Path", path) - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -#ZMuMu almeno 1 HLT + 2 track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate - -#ZMuMu 1 HLT + 2 track-iso -process.goodZToMuMu1HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMu1HLTPlots.src = cms.InputTag("goodZToMuMu1HLT") - -#ZMuMu 2 HLT + 2 track-iso -process.goodZToMuMu2HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMu2HLTPlots.src = cms.InputTag("goodZToMuMu2HLT") - -#ZMuSta First HLT + 2 track-iso -process.goodZToMuMuOneStandAloneMuonPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneStandAloneMuonPlots.src = cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLT") - -#ZMuTk First HLT + 2 track-iso -process.goodZToMuMuOneTrackPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneTrackPlots.src = cms.InputTag("goodZToMuMuOneTrackFirstHLT") - -# N-tuples - -process.goodZToMuMuOneStandAloneMuonNtuple = cms.EDProducer( - "CandViewNtpProducer", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - variables = cms.VPSet( - cms.PSet( - tag = cms.untracked.string("mass"), - quantity = cms.untracked.string("mass") - ) - ) -) - -process.initialGoodZToMuMuPath = cms.Path( - process.goodZToMuMu + - process.zmumuSaMassHistogram -) - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMuAtLeast1HLT+ - process.goodZToMuMuPlots, - "goodZToMuMu", "goodZToMuMu", - "double") - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMu2HLT + - process.goodZToMuMu2HLTPlots, - "goodZToMuMu2HLT", "goodZToMuMu2HLT", - "double") - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMu1HLT + - process.goodZToMuMu1HLTPlots, - "goodZToMuMu1HLT", "goodZToMuMu1HLT", - "double") - -process.nonIsolatedZToMuMuPath = cms.Path ( - process.nonIsolatedZToMuMu + - process.nonIsolatedZToMuMuAtLeast1HLT + - process.nonIsolatedZToMuMuPlots -) - -addModulesFromTemplate( - ~process.goodZToMuMu + - process.zToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuonFirstHLT + - process.goodZToMuMuOneStandAloneMuonNtuple + - process.goodZToMuMuOneStandAloneMuonPlots, - "goodZToMuMuOneStandAloneMuon", "goodZToMuMuOneStandAloneMuon", - "single") - -addModulesFromTemplate( - ~process.goodZToMuMu + - ~process.zToMuMuOneStandAloneMuon + - process.zToMuGlobalMuOneTrack + - process.zToMuMuOneTrack + - process.goodZToMuMuOneTrack + - process.goodZToMuMuOneTrackFirstHLT + - process.goodZToMuMuOneTrackPlots, - "goodZToMuMuOneTrack", "goodZToMuMuOneTrack", - "single") - -process.out = cms.OutputModule( - "PoolOutputModule", - fileName = cms.untracked.string('file:./zMuSa-UML.root'), - outputCommands = cms.untracked.vstring( - "drop *", - "keep *_goodZToMuMuOneStandAloneMuonNtuple_*_*" - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - "goodZToMuMuOneStandAloneMuonPath" - ) - ) -) - -process.endPath = cms.EndPath( - process.eventInfo + - process.out -) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuAnalysis_zmm.py b/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuAnalysis_zmm.py deleted file mode 100644 index be74149acd896..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuAnalysis_zmm.py +++ /dev/null @@ -1,311 +0,0 @@ -from __future__ import print_function -#analysis code. -#It produces plot for Fit study -#author Luca Lista -#modificated by Noli Pasquale 21-10-2008 - -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("ZToMuMuAnalysis") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - "rfio:/castor/cern.ch/user/n/noli/Summer08/reskimed/zmm/zmumu_reskim_1.root", - "rfio:/castor/cern.ch/user/n/noli/Summer08/reskimed/zmm/zmumu_reskim_2.root", - "rfio:/castor/cern.ch/user/n/noli/Summer08/reskimed/zmm/zmumu_reskim_3.root", - "rfio:/castor/cern.ch/user/n/noli/Summer08/reskimed/zmm/zmumu_reskim_4.root", - "rfio:/castor/cern.ch/user/n/noli/Summer08/reskimed/zmm/zmumu_reskim_5.root", - "rfio:/castor/cern.ch/user/n/noli/Summer08/reskimed/zmm/zmumu_reskim_6.root", - "rfio:/castor/cern.ch/user/n/noli/Summer08/reskimed/zmm/zmumu_reskim_7.root", - "rfio:/castor/cern.ch/user/n/noli/Summer08/reskimed/zmm/zmumu_reskim_8.root", - "rfio:/castor/cern.ch/user/n/noli/Summer08/reskimed/zmm/zmumu_reskim_9.root", - "rfio:/castor/cern.ch/user/n/noli/Summer08/reskimed/zmm/zmumu_reskim_10.root" - - ) -) - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("analysis_zmunu_reskim_10000evt.root") -) - -zSelection = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2 & abs(daughter(1).eta)<2 & mass > 20"), - isoCut = cms.double(3.0), - isolationType = cms.string("track"), - ) - -process.goodZToMuMu = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) -#ZMuMu: richiedo almeno 1 HLT trigger match.Per la shape -process.goodZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(True) -) - -#ZMuMu: richiedo 2 HLT trigger match -process.goodZToMuMu2HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("bothMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(True) -) - -#ZMuMu: richiedo 1 HLT trigger match -process.goodZToMuMu1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("exactlyOneMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(True) -) - - -process.nonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuNonIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -#ZMuMu1notIso: richiedo almeno un trigger -process.nonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("nonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(True) -) - - -process.zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - src = cms.InputTag("dimuonsOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneTrack = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneStandAloneMuon = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsOneStandAloneMuon"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrack"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -#ZMuTk:richiedo che il muGlobal 'First' ha HLT match -process.goodZToMuMuOneTrackFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrack"), - condition =cms.string("firstMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneStandAloneMuon"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -#ZMuSta:richiedo che il muGlobal 'First' ha HLT match -process.goodZToMuMuOneStandAloneMuonFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - condition =cms.string("globalisMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(True) -) - -goodZToMuMuTemplate = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("replace this string with your cut"), - src = cms.InputTag("goodZToMuMuAtLeast1HLT"), - filter = cms.bool(False) -) - - -#### Plot ### - -zPlots = cms.PSet( - histograms = cms.VPSet( - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zMass"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu1Pt"), - description = cms.untracked.string("Highest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("max(daughter(0).pt,daughter(1).pt)") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu2Pt"), - description = cms.untracked.string("Lowest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("min(daughter(0).pt,daughter(1).pt)") - ) - ) -) - - -#ZMuMu almeno 1 HLT + 2 track-iso (Shape) -goodZToMuMuPlotsTemplate = cms.EDAnalyzer( - "CandViewHistoAnalyzer", - zPlots, - src = cms.InputTag("goodZToMuMuAtLeast1HLT") -) - -#ZMuMu almeno 1 HLT + almeno 1 NON track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -nonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -nonIsolatedZToMuMuPlots.src = cms.InputTag("nonIsolatedZToMuMuAtLeast1HLT") -setattr(process, "nonIsolatedZToMuMuPlots", nonIsolatedZToMuMuPlots) - -etaBounds = [-2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2.0] - -def addModulesFromTemplate(sequence, moduleLabel, src, probeSelection): - print("selection for: ", moduleLabel) - for i in range(len(etaBounds)-1): - etaMin = etaBounds[i] - etaMax = etaBounds[i+1] - module = copy.deepcopy(goodZToMuMuTemplate) - if probeSelection == "single": - cut = "%5.3f < daughter(1).eta < %5.3f" %(etaMin, etaMax) - elif probeSelection == "double": - cut = "%5.3f < daughter(0).eta < %5.3f | %5.3f < daughter(1).eta < %5.3f" %(etaMin, etaMax, etaMin, etaMax) - print(i, ") cut = ", cut) - setattr(module, "cut", cut) - setattr(module, "src", cms.InputTag(src)) - copyModuleLabel = moduleLabel + str(i) - setattr(process, copyModuleLabel, module) - if sequence == None: - sequence = module - else: - sequence = sequence + module - plotModule = copy.deepcopy(goodZToMuMuPlotsTemplate) - setattr(plotModule, "src", cms.InputTag(copyModuleLabel)) - for h in plotModule.histograms: - h.description.setValue(h.description.value() + ": " + "#eta: [%5.3f, %5.3f]" %(etaMin, etaMax)) - plotModuleLabel = moduleLabel + "Plots" + str(i) - setattr(process, plotModuleLabel, plotModule) - sequence = sequence + plotModule - path = cms.Path(sequence) - setattr(process, moduleLabel+"Path", path) - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -#ZMuMu almeno 1 HLT + 2 track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate - -#ZMuMu 1 HLT + 2 track-iso -process.goodZToMuMu1HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMu1HLTPlots.src = cms.InputTag("goodZToMuMu1HLT") - -#ZMuMu 2 HLT + 2 track-iso -process.goodZToMuMu2HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMu2HLTPlots.src = cms.InputTag("goodZToMuMu2HLT") - -#ZMuSta First HLT + 2 track-iso -process.goodZToMuMuOneStandAloneMuonPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneStandAloneMuonPlots.src = cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLT") - -#ZMuTk First HLT + 2 track-iso -process.goodZToMuMuOneTrackPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneTrackPlots.src = cms.InputTag("goodZToMuMuOneTrackFirstHLT") - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMuAtLeast1HLT+ - process.goodZToMuMuPlots, - "goodZToMuMu", "goodZToMuMu", - "double") - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMu2HLT+ - process.goodZToMuMu2HLTPlots, - "goodZToMuMu2HLT", "goodZToMuMu2HLT", - "double") - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMu1HLT+ - process.goodZToMuMu1HLTPlots, - "goodZToMuMu1HLT", "goodZToMuMu1HLT", - "double") - -process.nonIsolatedZToMuMuPath = cms.Path ( - process.nonIsolatedZToMuMu + - process.nonIsolatedZToMuMuAtLeast1HLT+ - process.nonIsolatedZToMuMuPlots -) - -addModulesFromTemplate( - ~process.goodZToMuMu + - process.zToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuonFirstHLT+ - process.goodZToMuMuOneStandAloneMuonPlots, - "goodZToMuMuOneStandAloneMuon", "goodZToMuMuOneStandAloneMuon", - "single") - -addModulesFromTemplate( - ~process.goodZToMuMu + - ~process.zToMuMuOneStandAloneMuon + - process.zToMuGlobalMuOneTrack + - process.zToMuMuOneTrack + - process.goodZToMuMuOneTrack + - process.goodZToMuMuOneTrackFirstHLT+ - process.goodZToMuMuOneTrackPlots, - "goodZToMuMuOneTrack", "goodZToMuMuOneTrack", - "single") - -process.endPath = cms.EndPath( - process.eventInfo -) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuBackgroundAnalysis.py b/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuBackgroundAnalysis.py deleted file mode 100644 index 297a53666883d..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuBackgroundAnalysis.py +++ /dev/null @@ -1,205 +0,0 @@ -from __future__ import print_function -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("ZToMuMuBackgroundAnalysis") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - "file:/scratch1/users/fabozzi/patv2_skim/testSkim_v2.root" - ) -) - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("test.root") -) - -zSelection = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2 & abs(daughter(1).eta)<2 & mass > 20"), - isoCut = cms.double(3.0), - isolationType = cms.string("track") -) - -process.goodZToMuMu = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -process.nonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuNonIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -process.zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - src = cms.InputTag("dimuonsOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneTrack = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneStandAloneMuon = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsOneStandAloneMuon"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrack"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneStandAloneMuon"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -goodZToMuMuTemplate = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("replace this string with your cut"), - src = cms.InputTag("goodZToMuMu"), - filter = cms.bool(False) -) - -zPlots = cms.PSet( - histograms = cms.VPSet( - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zMass"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu1Pt"), - description = cms.untracked.string("Highest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("max(daughter(0).pt,daughter(1).pt)") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu2Pt"), - description = cms.untracked.string("Lowest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("min(daughter(0).pt,daughter(1).pt)") - ) - ) -) - - -goodZToMuMuPlotsTemplate = cms.EDAnalyzer( - "CandViewHistoAnalyzer", - zPlots, - src = cms.InputTag("goodZToMuMu") -) - -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -nonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -nonIsolatedZToMuMuPlots.src = cms.InputTag("nonIsolatedZToMuMu") -setattr(process, "nonIsolatedZToMuMuPlots", nonIsolatedZToMuMuPlots) - -etaBounds = [-2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2.0] - -def addModulesFromTemplate(sequence, moduleLabel, src, probeSelection): - print("selection for: ", moduleLabel) - for i in range(len(etaBounds)-1): - etaMin = etaBounds[i] - etaMax = etaBounds[i+1] - module = copy.deepcopy(goodZToMuMuTemplate) - if probeSelection == "single": - cut = "%5.3f < daughter(1).eta < %5.3f" %(etaMin, etaMax) - elif probeSelection == "double": - cut = "%5.3f < daughter(0).eta < %5.3f | %5.3f < daughter(1).eta < %5.3f" %(etaMin, etaMax, etaMin, etaMax) - print(i, ") cut = ", cut) - setattr(module, "cut", cut) - setattr(module, "src", cms.InputTag(src)) - copyModuleLabel = moduleLabel + str(i) - setattr(process, copyModuleLabel, module) - if sequence == None: - sequence = module - else: - sequence = sequence + module - plotModule = copy.deepcopy(goodZToMuMuPlotsTemplate) - setattr(plotModule, "src", cms.InputTag(copyModuleLabel)) - for h in plotModule.histograms: - h.description.setValue(h.description.value() + ": " + "#eta: [%5.3f, %5.3f]" %(etaMin, etaMax)) - plotModuleLabel = moduleLabel + "Plots" + str(i) - setattr(process, plotModuleLabel, plotModule) - sequence = sequence + plotModule - path = cms.Path(sequence) - setattr(process, moduleLabel+"Path", path) - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -process.goodZToMuMuOneStandAloneMuonPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneStandAloneMuonPlots.src = cms.InputTag("goodZToMuMuOneStandAloneMuon") -process.goodZToMuMuOneTrackPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneTrackPlots.src = cms.InputTag("goodZToMuMuOneTrack") - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMuPlots, - "goodZToMuMu", "goodZToMuMu", - "double") - -process.nonIsolatedZToMuMuPath = cms.Path ( - process.nonIsolatedZToMuMu + - process.nonIsolatedZToMuMuPlots, -) - -addModulesFromTemplate( - ~process.goodZToMuMu + - process.zToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuonPlots, - "goodZToMuMuOneStandAloneMuon", "goodZToMuMuOneStandAloneMuon", - "single") - -addModulesFromTemplate( - ~process.goodZToMuMu + - ~process.zToMuMuOneStandAloneMuon + - process.zToMuGlobalMuOneTrack + - process.zToMuMuOneTrack + - process.goodZToMuMuOneTrack + - process.goodZToMuMuOneTrackPlots, - "goodZToMuMuOneTrack", "goodZToMuMuOneTrack", - "single") - -process.endPath = cms.EndPath( - process.eventInfo -) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuHistos.py b/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuHistos.py deleted file mode 100644 index 9009e69d9f373..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuHistos.py +++ /dev/null @@ -1,163 +0,0 @@ -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("ZToMuMuHistos") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - "file:/data1/cmsdata/dimuons/S156/Zmumu_zMuMuSkimOut_1.root" - ) -) - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("dimuons_zmumu_histos.root") -) - -zSelection = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2 & abs(daughter(1).eta)<2 & mass > 20"), - isoCut = cms.double(4.0), - muonIsolations1 = cms.InputTag("muonIsolations"), - muonIsolations2 = cms.InputTag("muonIsolations") -) - -process.goodZToMuMu = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -process.nonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuNonIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -process.zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - src = cms.InputTag("dimuonsOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneTrack = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneStandAloneMuon = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsOneStandAloneMuon"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrack"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneStandAloneMuon"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -zPlots = cms.PSet( - histograms = cms.VPSet( - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zMass"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu1Pt"), - description = cms.untracked.string("Highest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("max(daughter(0).pt,daughter(1).pt)") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu2Pt"), - description = cms.untracked.string("Lowest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("min(daughter(0).pt,daughter(1).pt)") - ) - ) -) - -goodZToMuMuPlotsTemplate = cms.EDAnalyzer( - "CandViewHistoAnalyzer", - zPlots, - src = cms.InputTag("goodZToMuMu") -) - -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -nonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -nonIsolatedZToMuMuPlots.src = cms.InputTag("nonIsolatedZToMuMu") -setattr(process, "nonIsolatedZToMuMuPlots", nonIsolatedZToMuMuPlots) - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -process.goodZToMuMuOneStandAloneMuonPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneStandAloneMuonPlots.src = cms.InputTag("goodZToMuMuOneStandAloneMuon") -process.goodZToMuMuOneTrackPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneTrackPlots.src = cms.InputTag("goodZToMuMuOneTrack") - -process.goodZToMuMuPath = cms.Path( - process.goodZToMuMu + - process.goodZToMuMuPlots - ) - -process.nonIsolatedZToMuMuPath = cms.Path( - process.nonIsolatedZToMuMu + - process.nonIsolatedZToMuMuPlots, -) - -process.zToMuMuOneStandAloneMuonPath = cms.Path( - ~process.goodZToMuMu + - process.zToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuonPlots - ) - -process.goodZToMuMuPath = cms.Path( - ~process.goodZToMuMu + - ~process.zToMuMuOneStandAloneMuon + - process.zToMuGlobalMuOneTrack + - process.zToMuMuOneTrack + - process.goodZToMuMuOneTrack + - process.goodZToMuMuOneTrackPlots - ) - -process.endPath = cms.EndPath( - process.eventInfo -) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuHistosFromSubSkim.py b/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuHistosFromSubSkim.py deleted file mode 100644 index cee3fd106b583..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuHistosFromSubSkim.py +++ /dev/null @@ -1,160 +0,0 @@ -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("ZToMuMuHistosFromSubSkim") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - "file:/data1/cmsdata/dimuons/s156-subSkim/Zmm.root" - ) -) - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("dimuons_zmumu_histos.root") -) - -zPlots = cms.PSet( - histograms = cms.VPSet( - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zMass"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu1Pt"), - description = cms.untracked.string("Highest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("max(daughter(0).pt,daughter(1).pt)") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu2Pt"), - description = cms.untracked.string("Lowest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("min(daughter(0).pt,daughter(1).pt)") - ) - ) -) - -goodZToMuMuPlotsTemplate = cms.EDAnalyzer( - "CandViewHistoAnalyzer", - zPlots, - src = cms.InputTag("goodZToMuMu") -) - -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -nonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -nonIsolatedZToMuMuPlots.src = cms.InputTag("nonIsolatedZToMuMu") -setattr(process, "nonIsolatedZToMuMuPlots", nonIsolatedZToMuMuPlots) - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -process.goodZToMuMuOneStandAloneMuonPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneStandAloneMuonPlots.src = cms.InputTag("goodZToMuMuOneStandAloneMuon") -process.goodZToMuMuOneTrackPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneTrackPlots.src = cms.InputTag("goodZToMuMuOneTrack") - -process.goodZToMuMuExists = cms.EDFilter( - "CandCollectionExistFilter", - src = process.nonIsolatedZToMuMuPlots.src - ) - -process.nonIsolatedZToMuMuExists = cms.EDFilter( - "CandCollectionExistFilter", - src = process.nonIsolatedZToMuMuPlots.src - ) - -process.goodZToMuMuOneStandAloneMuonExists = cms.EDFilter( - "CandCollectionExistFilter", - src = process.goodZToMuMuOneStandAloneMuonPlots.src - ) - -process.goodZToMuMuOneTrackExists = cms.EDFilter( - "CandCollectionExistFilter", - src = process.goodZToMuMuOneTrackPlots.src -) - -zSelection = cms.PSet( - cut = cms.string("1 > 0"), - isoCut = cms.double(3.0), - muonIsolations1 = cms.InputTag("muonIsolations"), - muonIsolations2 = cms.InputTag("muonIsolations") -) - -process.goodZToMuMuFilter = cms.EDFilter( - "ZToMuMuNonIsolatedSelector", - zSelection, - src = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -process.nonIsolatedZToMuMuFilter = cms.EDFilter( - "ZToMuMuNonIsolatedSelector", - zSelection, - src = cms.InputTag("nonIsolatedZToMuMu"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneStandAloneMuonFilter = cms.EDFilter( - "ZToMuMuNonIsolatedSelector", - zSelection, - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrackFilter = cms.EDFilter( - "ZToMuMuNonIsolatedSelector", - zSelection, - src = cms.InputTag("goodZToMuMuOneTrack"), - filter = cms.bool(True) -) - -process.goodZToMuMuPath = cms.Path( - process.goodZToMuMuExists * - process.goodZToMuMuFilter * - process.goodZToMuMuPlots -) - -process.nonIsolatedZToMuMuPath = cms.Path( - process.nonIsolatedZToMuMuExists * - process.nonIsolatedZToMuMuFilter * - process.nonIsolatedZToMuMuPlots -) - -process.goodZToMuMuOneStandAloneMuonPath = cms.Path( - process.goodZToMuMuOneStandAloneMuonExists * - process.goodZToMuMuOneStandAloneMuonFilter * - process.goodZToMuMuOneStandAloneMuonPlots -) - -process.goodZToMuMuOneTrackPath = cms.Path( - process.goodZToMuMuOneTrackExists * - process.goodZToMuMuOneTrackFilter * - process.goodZToMuMuOneTrackPlots -) - -process.endPath = cms.EndPath( - process.eventInfo -) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuMicroSkim.py b/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuMicroSkim.py deleted file mode 100644 index 65f4f6c1d73d7..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/old/zToMuMuMicroSkim.py +++ /dev/null @@ -1,204 +0,0 @@ -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("reskim") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - "file:/scratch1/users/fabozzi/patv2_skim/testSkim_v2.root" - ) -) - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = 'IDEAL_V9::All' -process.load("Configuration.StandardSequences.MagneticField_cff") - -process.prunedGenParticles = cms.EDProducer( - "GenParticlePruner", - src = cms.InputTag("genParticles"), - select = cms.vstring( - "drop * ", # this is the default - "keep+ pdgId = {Z0}", - "keep+ pdgId = {W-}", - "keep++ pdgId = {mu-}" - ) -) - -process.load("ElectroWeakAnalysis.ZReco.dimuonsHLTFilter_cfi") -process.load("ElectroWeakAnalysis.ZReco.patCandidatesForDimuonsSequences_cff") -process.load("ElectroWeakAnalysis.ZReco.dimuons_cfi") -process.load("ElectroWeakAnalysis.ZReco.dimuonsOneTrack_cfi") -process.load("ElectroWeakAnalysis.ZReco.dimuonsGlobal_cfi") -process.load("ElectroWeakAnalysis.ZReco.dimuonsOneStandAloneMuon_cfi") -process.load("ElectroWeakAnalysis.ZReco.mcTruthForDimuons_cff") -process.load("ElectroWeakAnalysis.ZReco.dimuonsFilter_cfi") -process.load("ElectroWeakAnalysis.ZReco.dimuonsOneTrackFilter_cfi") - -process.muonMatch.matched = cms.InputTag("prunedGenParticles") -process.trackMuMatch.matched = cms.InputTag("prunedGenParticles") - -zSelection = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & " - "abs(daughter(0).eta)<2 & abs(daughter(1).eta)<2 & mass > 20"), - isoCut = cms.double(100.0), - isolationType = cms.string("track"), -) - -process.goodZToMuMu = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -process.nonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuNonIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -process.zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - src = cms.InputTag("dimuonsOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneTrack = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneStandAloneMuon = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsOneStandAloneMuon"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrack"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneStandAloneMuon"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -process.out = cms.OutputModule( - "PoolOutputModule", - fileName = cms.untracked.string('file:zmm_reskim_v2.root'), - outputCommands = cms.untracked.vstring( - "drop *", - "keep *_prunedGenParticles_*_reskim", - "keep *_selectedLayer1Muons_*_reskim", - "keep *_selectedLayer1TrackCands_*_reskim", - "keep *_dimuons_*_reskim", - "keep *_dimuonsOneTrack_*_reskim", - "keep *_dimuonsGlobal_*_reskim", - "keep *_dimuonsOneStandAloneMuon_*_reskim", - "keep *_muonMatch_*_reskim", - "keep *_allDimuonsMCMatch_*_reskim", - "keep *_goodZToMuMu_*_reskim", - "keep *_nonIsolatedZToMuMu_*_reskim", - "keep *_goodZToMuMuOneStandAloneMuon_*_reskim", - "keep *_goodZToMuMuOneTrack_*_reskim", - # "keep *_genParticles_*_*", - "keep L1MuRegionalCands_*_*_*", - "keep L1MuGMTCands_*_*_*", - "keep L1MuGMTReadoutCollection_*_*_*", - # "keep l1extraL1MuonParticles_*_*_*", - "keep TriggerResults_*_*_*", - "keep recoTracks_generalTracks_*_*", - "keep recoTracks_globalMuons_*_*", - "keep recoTracks_standAloneMuons_*_*", - "keep recoMuons_muons_*_*", - "keep *_selectedLayer1Muons_*_*", - "keep *_selectedLayer1TrackCands_*_*", -# "keep *_goodTracks_*_*", - "drop *_*_*_TestDimuonReco" - - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - "goodZToMuMuPath", "nonIsolatedZToMuMuPath", - "zToMuMuOneStandAloneMuonPath", "goodZToMuMuOneTrackPath" - ) - ) -) - -process.genParticlesPath = cms.Path( - process.prunedGenParticles - ) - -process.dimuonsPath = cms.Path( - process.dimuonsHLTFilter + - process.goodMuonRecoForDimuon + - process.dimuons + - process.dimuonsGlobal + - process.dimuonsOneStandAloneMuon + - process.dimuonsFilter - ) - -process.dimuonsOneTrackPath = cms.Path( - process.dimuonsHLTFilter + - process.goodMuonRecoForDimuon + - process.dimuonsOneTrack + - process.dimuonsOneTrackFilter - ) - -process.dimuonsMCTruth = cms.Path( - process.dimuonsHLTFilter + - process.mcTruthForDimuons - ) - -process.goodZToMuMuPath = cms.Path( - process.goodZToMuMu -) - -process.nonIsolatedZToMuMuPath = cms.Path( - process.nonIsolatedZToMuMu -) - -process.zToMuMuOneStandAloneMuonPath = cms.Path( - ~process.goodZToMuMu + - process.zToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuon -) - -process.goodZToMuMuOneTrackPath = cms.Path( - ~process.goodZToMuMu + - ~process.zToMuMuOneStandAloneMuon + - process.zToMuGlobalMuOneTrack + - process.zToMuMuOneTrack + - process.goodZToMuMuOneTrack -) - -process.endPath = cms.EndPath( - process.eventInfo + - process.out -) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/old/zUMLChi2Fit.txt b/ElectroWeakAnalysis/ZMuMu/test/old/zUMLChi2Fit.txt deleted file mode 100644 index de611cc0df4cb..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/old/zUMLChi2Fit.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# Z -> Mu Mu fit -# -# name value error min max free/fixed (optional) -#------------------------------------------------------------------------------ -par YieldZMuMu 3818 10 0 1000000 free -par YieldBkgZMuTk 1 10 0 1000000 fixed -par YieldBkgZMuSa 0 1 0 1000000 fixed -par YieldBkgZMuMuNotIso 1 10 0 1000000 fixed -par EfficiencyTk 0.99884 0.001 0 1 free -par EfficiencySa 0.988525 0.01 0 1 free -par EfficiencyIso 0.98186 0.01 0 1 free -par EfficiencyHLT 0.913146 0.01 0 1 free -par Lambda -0.01244 0.009 -100 0 free -par Alpha -0.0444 0.01 -100 0 free -par A0 45.57 0.1 0 2 free -par A1 -0.62464 0.001 -10000 10000 free -par A2 2.644e-3 0.0001 -1000 1000 free -par B0 137.9 0.1 0 2 free -par B1 0.16275 0.001 -10000 10000 free -par B2 2.119e-03 1 -1000 1000 free -migrad -print_all -release YieldBkgZMuSa -migrad -print_all diff --git a/ElectroWeakAnalysis/ZMuMu/test/rootlogon.C b/ElectroWeakAnalysis/ZMuMu/test/rootlogon.C deleted file mode 100755 index b04133420cba6..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/rootlogon.C +++ /dev/null @@ -1,14 +0,0 @@ -{ - std::string macroPath = gROOT->GetMacroPath(); - macroPath += ":"; - macroPath += gSystem->ExpandPathName("$CMSSW_RELEASE_BASE/src/PhysicsTools/Utilities/macros"); - macroPath += ":"; - macroPath += gSystem->ExpandPathName("$CMSSW_BASE/src/PhysicsTools/Utilities/macros"); - gROOT->SetMacroPath(macroPath.c_str()); - gSystem->AddIncludePath("$CMSSW_RELEASE_BASE/src"); - gSystem->AddIncludePath("$CMSSW_BASE/src"); - gROOT->ProcessLine(".L setTDRStyle.C"); - gSystem->Load("libFWCoreFWLite"); - FWLiteEnabler::enable(); - setTDRStyle(); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/Analysis_qcd_2_4_all.root b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/Analysis_qcd_2_4_all.root deleted file mode 100644 index a7e98104975de..0000000000000 Binary files a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/Analysis_qcd_2_4_all.root and /dev/null differ diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/Analysis_ttbar_2_4.root b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/Analysis_ttbar_2_4.root deleted file mode 100644 index 2d949fea67fd6..0000000000000 Binary files a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/Analysis_ttbar_2_4.root and /dev/null differ diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/Analysis_wmn_2_4.root b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/Analysis_wmn_2_4.root deleted file mode 100644 index b2d419c68b40c..0000000000000 Binary files a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/Analysis_wmn_2_4.root and /dev/null differ diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/Analysis_zmm_2_4.root b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/Analysis_zmm_2_4.root deleted file mode 100644 index 88c841f7ab726..0000000000000 Binary files a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/Analysis_zmm_2_4.root and /dev/null differ diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/data13XXXX.root b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/data13XXXX.root deleted file mode 100644 index f9a38d2479932..0000000000000 Binary files a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/data13XXXX.root and /dev/null differ diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/rootlogon.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/rootlogon.C deleted file mode 100755 index b04133420cba6..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/rootlogon.C +++ /dev/null @@ -1,14 +0,0 @@ -{ - std::string macroPath = gROOT->GetMacroPath(); - macroPath += ":"; - macroPath += gSystem->ExpandPathName("$CMSSW_RELEASE_BASE/src/PhysicsTools/Utilities/macros"); - macroPath += ":"; - macroPath += gSystem->ExpandPathName("$CMSSW_BASE/src/PhysicsTools/Utilities/macros"); - gROOT->SetMacroPath(macroPath.c_str()); - gSystem->AddIncludePath("$CMSSW_RELEASE_BASE/src"); - gSystem->AddIncludePath("$CMSSW_BASE/src"); - gROOT->ProcessLine(".L setTDRStyle.C"); - gSystem->Load("libFWCoreFWLite"); - FWLiteEnabler::enable(); - setTDRStyle(); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_all.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_all.C deleted file mode 100644 index b12cce4d68d18..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_all.C +++ /dev/null @@ -1,19 +0,0 @@ -#include "stack_zGolden.C" -#include "stack_zmTrk.C" -#include "stack_zmTrkMu.C" -#include "stack_zmSta.C" -#include "stack_zmm1hlt.C" -#include "stack_zmm2hlt.C" -#include "stack_zmmNotIso.C" -#include "stack_zmm0neLess2p4.C" - -void stack_all() { - stack_zGolden(); - stack_zmTrk(); - stack_zmTrkMu(); - stack_zmSta(); - stack_zmm1hlt(); - stack_zmm2hlt(); - stack_zmmNotIso(); - stack_zmm0neLess2p4(); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_common.h b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_common.h deleted file mode 100644 index 93a0bb72dc30a..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_common.h +++ /dev/null @@ -1,257 +0,0 @@ -#ifndef STACK_COMMON_H -#define STACK_COMMON_H - -#include -#include "TChain.h" - - - -const int canvasSizeX = 500; -const int canvasSizeY = 500; - -const Color_t zLineColor = kAzure+2; -const Color_t zFillColor = kAzure+6; -const Color_t wLineColor = kAzure+4; -const Color_t wFillColor = kAzure+2; -const Color_t qcdLineColor = kGreen+3; -const Color_t qcdFillColor = kGreen+1; -const Color_t ttFillColor = kRed+1; -const Color_t ttLineColor = kRed+3; -const Color_t ztFillColor = kYellow-9; -const Color_t ztLineColor = kYellow-1; - - -const double lumi =.020 ; -const double lumiZ = 100. ; -const double lumiW = 100.; -const double lumiQ = 35.; -const double lumiT =100.; -const double lumiZT =100.; - - -const double mMin = 60; -const double mMax = 120; - - - - - -//TCanvas *c1 = new TCanvas("c1","Stack plot",10,10,canvasSizeX, canvasSizeY); -TCanvas *c1 = new TCanvas("c1","Stack plot"); - - - - - - - - - -void setHisto(TH1 * h, Color_t fill, Color_t line, double scale, int rebin) { - h->SetFillColor(fill); - h->SetLineColor(line); - h->Scale(scale); - h->Rebin(rebin); -} - -void stat(TH1 * h1, TH1 * h2, TH1 * h3, TH1 * h4, TH1 *h5, TH1 * hdata, int rebin) { - double a = mMin/rebin, b = mMax/rebin; - double i1 = h1->Integral(a, b); - double i2 = h2->Integral(a, b); - double i3 = h3->Integral(a, b); - double i4 = h4->Integral(a, b); - double i5 = h5->Integral(a, b); - - double idata = hdata != 0 ? hdata->Integral(a, b) : 0; - std::cout.setf(0,ios::floatfield); - std::cout.setf(ios::fixed,ios::floatfield); - std::cout.precision(1); - std::cout <<"Zmm (" << mMin << ", " << mMax << ") = "; - std::cout.precision(8); - std::cout << i1 <Add(h5); - hs->Add(h4); - hs->Add(h3); - hs->Add(h2); - hs->Add(h1); - - hs->Draw("HIST"); - if(hdata != 0) { - hdata->SetMarkerStyle(20); - hdata->SetMarkerSize(1.3); - hdata->SetMarkerColor(kBlack); - hdata->SetLineWidth(2); - hdata->SetLineColor(kBlack); - hdata->Rebin(rebin); - hdata->Draw("epsame"); - hdata->GetXaxis()->SetLabelSize(0); - hdata->GetYaxis()->SetLabelSize(0); - hs->SetMaximum( hdata->GetMaximum() + 5); - gStyle->SetErrorX(1); -} - hs->SetMinimum(min); - hs->GetXaxis()->SetTitle("m_{#mu^{+} #mu^{-}} (GeV/c^{2})"); - - std::string yTag = ""; - switch(rebin) { - case 1: yTag = "events/(GeV/c^{2})"; break; - case 2: yTag = "events/(2 GeV/c^{2})"; break; - case 3: yTag = "events/(3 GeV/c^{2})"; break; - case 4: yTag = "events/(4 GeV/c^{2})"; break; - case 5: yTag = "events/(5 GeV/c^{2})"; break; - case 10: yTag = "events/(10 GeV/c^{2})"; break; - default: - std::cerr << ">>> ERROR: set y tag for rebin = " << rebin << std::endl; - }; - - hs->GetYaxis()->SetTitle(yTag.c_str()); - hs->GetXaxis()->SetTitleSize(0.05); - hs->GetYaxis()->SetTitleSize(0.05); - hs->GetXaxis()->SetTitleOffset(1.2); - hs->GetYaxis()->SetTitleOffset(1.2); - hs->GetYaxis()->SetLabelOffset(0); - hs->GetXaxis()->SetLabelSize(.05); - hs->GetYaxis()->SetLabelSize(.05); - // leg = new TLegend(0.65,0.55,0.85,0.75); - leg = new TLegend(0.75,0.65,0.9,0.8); - if(hdata != 0) - leg->AddEntry(hdata,"data"); - leg->AddEntry(h1,"Z#rightarrow#mu #mu","f"); - leg->AddEntry(h2,"W#rightarrow#mu #nu","f"); - leg->AddEntry(h4,"QCD","f"); - leg->AddEntry(h3,"t#bar{t}","f"); - leg->AddEntry(h5,"Z#rightarrow#tau #tau","f"); - leg->SetFillColor(kWhite); - leg->SetFillColor(kWhite); - leg->SetShadowColor(kBlack); - leg->Draw(); - c1->SetLogy(); - TPaveText *pave = new TPaveText( 0.5 * (hdata->GetXaxis()->GetXmax() - (hdata->GetXaxis()->GetXmin())) , (hdata->GetMaximum()) + 1.5 , hdata->GetXaxis()->GetXmax() , hdata->GetMaximum() + 9 ); - pave->SetFillColor(kWhite); - pave->SetBorderSize(0); - TText * t1 = pave->AddText("CMS Preliminary 2010"); - TText * t2 = pave->AddText("L_{int} = 20 nb^{-1} #sqrt{s} = 7 TeV"); // change by hand, can be improved..... - t1->SetTextColor(kBlack); - t2->SetTextColor(kBlack); - pave->Draw(); - stat(h1, h2, h3, h4, h5,hdata, rebin); - c1->Update(); -c1->SetTickx(0); -c1->SetTicky(0); -} - - - - - -// allowing two variables, for plotting the muon variables... -void makePlots(const char * var1, const char * var2, TCut cut, int rebin, const char * plot, - double min = 0.001, unsigned int nbins, double xMin, double xMax, bool doData = false) { - - - -TChain * zEvents = new TChain("Events"); - -zEvents->Add("/scratch2/users/degruttola/Spring10Ntuples/NtupleLoose_ZmmPowhegSpring10HLTRedigi_100pb.root"); -TChain * wEvents = new TChain("Events"); -wEvents->Add("/scratch2/users/degruttola/Spring10Ntuples/NtupleLoose_wmunuPowhegSpring10HLTRedigi_100pb.root"); -// 100 pb -TChain * tEvents = new TChain("Events"); -tEvents->Add("/scratch2/users/degruttola/Spring10Ntuples/NtupleLoose_ttbarSpring10HLTRedigi_100pb.root"); -// 100 pb -TChain * qEvents = new TChain("Events"); -qEvents->Add("/scratch2/users/degruttola/Spring10Ntuples/NtupleLoose_incl15Spring10HLTRedigi_35pb.root"); -TChain * ztEvents = new TChain("Events"); -ztEvents->Add("/scratch2/users/degruttola/Spring10Ntuples/NtupleLoose_ztautauSpring10HLTRedigi_100pb.root"); -// 35 pb - - -TChain * dataEvents= new TChain("Events"); - -dataEvents->Add("/scratch2/users/degruttola/data/NtupleLoose_135149.root"); -dataEvents->Add("/scratch2/users/degruttola/data/NtupleLoose_136033.root"); -dataEvents->Add("/scratch2/users/degruttola/data/NtupleLoose_136087.root"); -dataEvents->Add("/scratch2/users/degruttola/data/NtupleLoose_136100.root"); -dataEvents->Add("/scratch2/users/degruttola/data/NtupleLoose_137028.root"); - - - - -// .020 pb - - - - - - - TH1F *h1 = new TH1F ("h1", "h1", nbins, xMin, xMax); - // h1->Rebin(rebin); - TH1F *h2 = new TH1F ("h2", "h2", nbins, xMin, xMax); - // h2->Rebin(rebin); - TH1F *h3 = new TH1F ("h3", "h3", nbins, xMin, xMax); - //h3->Rebin(rebin); - TH1F *h4 = new TH1F ("h4", "h4", nbins, xMin, xMax); - //h4->Rebin(rebin); - TH1F *h5 = new TH1F ("h5", "h5", nbins, xMin, xMax); - - zEvents->Project("h1", var1, cut); - zEvents->Project("h1", var2, cut); - - wEvents->Project("h2", var1, cut); - wEvents->Project("h2", var2, cut); - - - tEvents->Project("h3", var1, cut); - tEvents->Project("h3", var2, cut); - - qEvents->Project("h4", var1, cut); - qEvents->Project("h4", var2, cut); - - ztEvents->Project("h5", var1, cut); - ztEvents->Project("h5", var2, cut); - - - // TH1F *hdata = doData? (TH1F*)data.Get(var) : 0; - if (doData) { - TH1F *hdata = new TH1F ("hdata", "hdata", nbins, xMin, xMax); - dataEvents->Project("hdata", var1, cut) ; - dataEvents->Project("hdata", var2, cut) ; - } - makeStack(h1, h2, h3, h4, h5, hdata, min, rebin); - c1->SaveAs((std::string(plot)+".eps").c_str()); - c1->SaveAs((std::string(plot)+".gif").c_str()); - c1->SaveAs((std::string(plot)+".pdf").c_str()); - -} -#endif diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zGolden.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zGolden.C deleted file mode 100644 index 7c2a0fd695ccf..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zGolden.C +++ /dev/null @@ -1,16 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGolden() { - -TCut cut_zGolden("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && zGoldenDau1NofStripHits>9 && zGoldenDau1NofPixelHits>0 && zGoldenDau2NofStripHits>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - makePlots("zGoldenMass", "", cut_zGolden, 5, "zGolden", 0.001, 200, 0 ,200, true); - -} - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zGoldenPt.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zGoldenPt.C deleted file mode 100644 index 85b74d56dd9c3..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zGoldenPt.C +++ /dev/null @@ -1,17 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenPt() { -TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && zGoldenDau1NofStripHits>9 && zGoldenDau1NofPixelHits>0 && zGoldenDau2NofStripHits>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - makePlots("zGoldenPt", "", cut_zGolden, 5, "zGoldenPt", 0.001, 200, 0 ,200, true); - hs->GetXaxis()->SetTitle("p_{T #mu^{+} #mu^{-}} (GeV/c)"); - string yTag = "events/(5 GeV/c)"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenPt.eps"); - c1->SaveAs("zGoldenPt.gif"); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zGoldenY.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zGoldenY.C deleted file mode 100644 index 0f7b81d7fb954..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zGoldenY.C +++ /dev/null @@ -1,18 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - - -void stack_zGoldenY() { -TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && zGoldenDau1NofStripHits>9 && zGoldenDau1NofPixelHits>0 && zGoldenDau2NofStripHits>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - makePlots("zGoldenY", "", cut_zGolden, 1, "zGoldenY", 0.001, 30, -3 ,3, true); - hs->GetXaxis()->SetTitle("y_{#mu^{+} #mu^{-}}"); - string yTag = "events/0.2"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenY.eps"); - c1->SaveAs("zGoldenY.gif"); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmSta.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmSta.C deleted file mode 100644 index f7f24a976c883..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmSta.C +++ /dev/null @@ -1,12 +0,0 @@ -// stack macro -// Pasquale Noli -#include -#include -#include "stack_common.h" - - -void stack_zmSta() { - makePlots("goodZToMuMuOneStandAloneMuonPlots/zMass", 5, "zmSta", - 0.0001); -} - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmTrk.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmTrk.C deleted file mode 100644 index 5beb120212269..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmTrk.C +++ /dev/null @@ -1,10 +0,0 @@ -// stack macro -// Pasquale Noli -#include -#include -#include "stack_common.h" - -void stack_zmTrk() { - makePlots("goodZToMuMuOneTrackPlots/zMass", 5, "zmTrk", - 0.0001, true); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmTrkMu.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmTrkMu.C deleted file mode 100644 index 93ee28061fadc..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmTrkMu.C +++ /dev/null @@ -1,10 +0,0 @@ -// stack macro -// Pasquale Noli -#include -#include -#include "stack_common.h" - -void stack_zmTrkMu() { - makePlots("goodZToMuMuOneTrackerMuonPlots/zMass", 5, "zmTrkMu", - 0.0001); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmm0neLess2p4.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmm0neLess2p4.C deleted file mode 100644 index 45f2966ff85fb..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmm0neLess2p4.C +++ /dev/null @@ -1,9 +0,0 @@ -// stack macro -// Pasquale Noli -#include -#include -#include "stack_common.h" - -void stack_zmm0neLess2p4() { - makePlots("goodZToMuMuOnlyOneMuonWithEtaLessThan2p11HLTPlots/zMass", 1, "zmm1hltEta24", 0.0001); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmm1hlt.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmm1hlt.C deleted file mode 100644 index 9f7f55c682754..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmm1hlt.C +++ /dev/null @@ -1,15 +0,0 @@ -// stack macro -// Pasquale Noli -#include -#include -#include "stack_common.h" - -void stack_zmm1hlt() { - - -TCut cut_zGolden("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && zGoldenDau1NofStripHits>9 && zGoldenDau1NofPixelHits>0 && zGoldenDau2NofStripHits>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==0 || zGoldenDau2HLTBit==0) "); - - makePlots("zGoldenMass", "", cut_zGolden, 5, "zGolden1hlt", 0.001, 200, 0 ,200, true); -} - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmm2hlt.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmm2hlt.C deleted file mode 100644 index 4f617850d2997..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmm2hlt.C +++ /dev/null @@ -1,15 +0,0 @@ -// stack macro -// Pasquale Noli -#include -#include -#include "stack_common.h" - -void stack_zmm2hlt() { - - -TCut cut_zGolden("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && zGoldenDau1NofStripHits>9 && zGoldenDau1NofPixelHits>0 && zGoldenDau2NofStripHits>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 && zGoldenDau2HLTBit==1) "); - - makePlots("zGoldenMass", "", cut_zGolden, 5, "zGolden2hlt", 0.001, 200, 0 ,200, true); -} - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmmNotIso.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmmNotIso.C deleted file mode 100644 index bb6bdfbdf2d5b..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlot10pb/stack_zmmNotIso.C +++ /dev/null @@ -1,10 +0,0 @@ -// stack macro -// Pasquale Noli -#include -#include -#include "stack_common.h" - -void stack_zmmNotIso() { - makePlots("nonIsolatedZToMuMuPlots/zMass", 5, "zmmNotIso", - 0.0001); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/compareMCandDataShape.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/compareMCandDataShape.C deleted file mode 100644 index 4b3b1d38b3f25..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/compareMCandDataShape.C +++ /dev/null @@ -1,212 +0,0 @@ -#include -#include -#include "stack_common.h" - -void compareMCandDataShape(){ - - - -const Color_t zLineColor = kBlack; -const Color_t zFillColor = kOrange-2; - -const double lumi =0.077 ; -//const double lumi =0100.0 ; -const double lumiZ = 100. ; - -/// cuts common.... -TCut kin_common("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso03SumPt< 3.0 && zGoldenDau2Iso03SumPt < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ( abs(zGoldenDau1dxyFromBS)<0.1 || abs(zGoldenDau2dxyFromBS)<0.1 ) "); - - - -TCut dau1Loose(" (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 "); -TCut dau2Loose(" (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 "); - -TCut dau1TightWP1("zGoldenDau1Chi2<10 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1"); -TCut dau2TightWP1("zGoldenDau2Chi2<10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofPixelHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau2NofMuMatches>1 && zGoldenDau2TrackerMuonBit==1"); - - -TCut dau1TightWP2("zGoldenDau1Chi2<10 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofMuonHits>0 && zGoldenDau1TrackerMuonBit==1"); -TCut dau2TightWP2("zGoldenDau2Chi2<10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofMuonHits>0 && zGoldenDau2TrackerMuonBit==1"); - -TCut dau1TightWP1_hltAlso("zGoldenDau1Chi2<10 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofMuonHits>0 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau1HLTBit==1"); -TCut dau2TightWP1_hltAlso("zGoldenDau2Chi2<10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofMuonHits>0 && zGoldenDau2TrackerMuonBit==1 && zGoldenDau2HLTBit==1"); - - -TCut massCut("zGoldenMass>60 && zGoldenMass<120 "); - - -void makeStack(TH1 * h1, TH1 * hdata, - double min, int rebin) { - setHisto(h1, zFillColor, zLineColor, lumi/lumiZ, rebin); - - THStack * hs = new THStack("hs",""); - - - hs->Add(h1); - - hs->Draw("HIST"); - if(hdata != 0) { - hdata->SetMarkerStyle(20); - hdata->SetMarkerSize(1.0); - hdata->SetMarkerColor(kBlack); - hdata->SetLineWidth(2); - hdata->SetLineColor(kBlack); - hdata->Rebin(rebin); - hdata->Draw("epsame"); - hdata->GetXaxis()->SetLabelSize(0); - hdata->GetYaxis()->SetLabelSize(0); - // log plots, so the maximum should be one order of magnitude more... - // hs->SetMaximum( pow(10 , 0.0 + int(log( hdata->GetMaximum() ) ) )); - // lin plot - hs->SetMaximum( 4 + hdata->GetMaximum() ) ; - // gStyle->SetErrorX(.5); -} - hs->SetMinimum(min); - hs->GetXaxis()->SetTitle("m_{#mu^{+} #mu^{-}} (GeV/c^{2})"); - - std::string yTag = ""; - switch(rebin) { - case 1: yTag = "events/(GeV/c^{2})"; break; - case 2: yTag = "events/(GeV/c^{2})"; break; - case 3: yTag = "events/(3 GeV/c^{2})"; break; - case 4: yTag = "events/(4 GeV/c^{2})"; break; - case 5: yTag = "events/(5 GeV/c^{2})"; break; - case 10: yTag = "events/(10 GeV/c^{2})"; break; - default: - std::cerr << ">>> ERROR: set y tag for rebin = " << rebin << std::endl; - }; - - hs->GetYaxis()->SetTitle(yTag.c_str()); - hs->GetXaxis()->SetTitleSize(0.05); - hs->GetYaxis()->SetTitleSize(0.05); - hs->GetXaxis()->SetTitleOffset(1.2); - hs->GetYaxis()->SetTitleOffset(1.2); - //hs->GetYaxis()->SetLabelOffset(1.0); - hs->GetXaxis()->SetLabelSize(.05); - hs->GetYaxis()->SetLabelSize(.05); - - leg = new TLegend(0.75,0.55,0.90,0.7); - if(hdata != 0) - leg->AddEntry(hdata,"data"); - leg->AddEntry(h1,"Z#rightarrow#mu #mu","f"); - //leg->AddEntry(h5,"Z#rightarrow#tau #tau","f"); - leg->SetFillColor(kWhite); - leg->SetFillColor(kWhite); - leg->SetShadowColor(kBlack); - leg->Draw(); - // c1->SetLogy(); - // TPaveText *pave = new TPaveText( 0.5 * (hdata->GetXaxis()->GetXmax() - (hdata->GetXaxis()->GetXmin())) , (hdata->GetMaximum()) +1 , hdata->GetXaxis()->GetXmax() , 10 * hdata->GetMaximum() ); - - TPaveText *pave = new TPaveText( 0.6 , 0.75 , 0.9 , 0.8 , "NDC"); - pave->SetFillColor(kWhite); - pave->SetBorderSize(0); - // TText * t1 = pave->AddText("CMS Preliminary 2010"); - // TText * t2 = pave->AddText("L_{int} = 61 nb^{ -1} #sqrt{s} = 7 TeV"); // change by hand, can be improved........... - TText * t = pave->AddText("#int L dt = 77 nb^{ -1}"); - t->SetTextColor(kBlack); - // t2->SetTextColor(kBlack); - pave->Draw(); - - TPaveText *ppave = new TPaveText( 0.15 , 0.95 , 0.65 , 1.0 , "NDC"); - ppave->SetFillColor(kWhite); - ppave->SetBorderSize(0); - // TText * t1 = pave->AddText("CMS Preliminary 2010"); - // TText * t2 = pave->AddText("L_{int} = 61 nb^{ -1} #sqrt{s} = 7 TeV"); // change by hand, can be improved........... - TText * tt = ppave->AddText("CMS preliminary 2010"); - // hs->SetTitle(" #sqrt{s} = 7 TeV"); - tt->SetTextColor(kBlack); - // t2->SetTextColor(kBlack); - ppave->Draw(); - - TPaveText *pppave = new TPaveText( 0.6 , 0.95 , 1.0 , 1.0 , "NDC"); - pppave->SetFillColor(kWhite); - pppave->SetBorderSize(0); - TText * ttt = pppave->AddText("#sqrt{s} = 7 TeV"); - ttt->SetTextColor(kBlack); - // t2->SetTextColor(kBlack); - pppave->Draw(); - -} - -void setHisto(TH1 * h, Color_t fill, Color_t line, double scale, int rebin) { - h->SetFillColor(fill); - h->SetLineColor(line); - h->Scale(scale); - h->Rebin(rebin); -} - -// allowing two variables, for plotting the muon variables... -void comparePlots(const char * var1, const char * var2, TCut cut, int rebin, const char * plot, - double min = 0.001, unsigned int nbins, double xMin, double xMax, bool doData = true) { - - - -TChain * zEvents = new TChain("Events"); - - - zEvents->Add("/scratch2/users/degruttola/Spring10Ntuples_withIso03/NtupleLoose_zmmSpring10cteq66_100pb.root"); -TChain * wEvents = new TChain("Events"); - -TChain * dataEvents= new TChain("Events"); - - -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_132440_135802.root"); -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_135821-137731.root"); -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_138737-138751_promptreco_FF.root"); -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_138_919_939.root"); -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139020.root"); -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_096_103.root"); -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_195_239.root"); -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139347.root"); -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_356_360.root"); -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_362_365.root"); -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_368_370.root"); -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_372_375.root"); -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_399_411.root"); - -// .040 pb - - TH1F *h1 = new TH1F ("h1", "h1", nbins, xMin, xMax); - TH1F *hh1 = new TH1F ("hh1", "hh1", nbins, xMin, xMax); - - zEvents->Project("h1", var1, cut); - zEvents->Project("hh1", var2, cut); - h1->Add(hh1); - - TH1F *hdata = new TH1F ("hdata", "hdata", nbins, xMin, xMax); - TH1F *hhdata = new TH1F ("hhdata", "hhdata", nbins, xMin, xMax); - dataEvents->Project("hdata", var1, cut) ; - dataEvents->Project("hhdata", var2, cut) ; - hdata->Add(hhdata); - makeStack(h1, hdata, min, rebin); - c1->SaveAs((std::string(plot)+".eps").c_str()); - c1->SaveAs((std::string(plot)+".gif").c_str()); - c1->SaveAs((std::string(plot)+".pdf").c_str()); - - - hdata->KolmogorovTest(h1, "D"); - hdata->Chi2Test(h1, "UWP"); - - -} - - - - comparePlots("zGoldenMass", "", kin_common + ( ( dau1Loose && dau2TightWP1_hltAlso ) || ( dau2Loose && dau1TightWP1_hltAlso )) ,2 , "compareZGoldenMass_b2", 0.001, 70, 60 ,130, true); - - TCut kin_common_woPt("zGoldenDau1Iso03SumPt< 3.0 && zGoldenDau2Iso03SumPt < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 "); - - - - comparePlots("zGoldenDau1Pt", "zGoldenDau2Pt", massCut + kin_common_woPt + ( ( dau1Loose && dau2TightWP1_hltAlso ) || ( dau2Loose && dau1TightWP1_hltAlso )), 2, "zGoldenDauPt", 0.01, 100, 0 ,100, true); - hs->GetXaxis()->SetTitle("p_{T #mu} [GeV]"); - string yTag = "events/2 [GeV]"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("compareZGoldenDauPt_b2.gif"); - - -} - - - -#endif diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/makeListOfCandidates.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/makeListOfCandidates.C deleted file mode 100644 index c75fb6496d24a..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/makeListOfCandidates.C +++ /dev/null @@ -1,95 +0,0 @@ -#ifndef STACK_COMMON_H -#define STACK_COMMON_H - -#include -using namespace std; -#include "TChain.h" - - - - -void makeListOfCandidates() { - - - -/// cuts common.... -TCut kin_common("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso03SumPt< 3.0 && zGoldenDau2Iso03SumPt < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 "); - -TCut kin_common_musta("zMuStaDau1Pt> 20 && zMuStaDau2Pt>20 && zMuStaDau1Iso03SumPt< 3.0 && zMuStaDau2Iso03SumPt < 3.0 && abs(zMuStaDau1Eta)<2.4 && abs(zMuStaDau2Eta)<2.4 && (zMuStaDau1HLTBit==1 || zMuStaDau2HLTBit==1) && abs(zMuStaDau1dxyFromBS)<0.2 && abs(zMuStaDau2dxyFromBS)<0.2 "); - -TCut kin_common_mutrkMu("zMuTrkMuDau1Pt> 20 && zMuTrkMuDau2Pt>20 && zMuTrkMuDau1Iso03SumPt< 3.0 && zMuTrkMuDau2Iso03SumPt < 3.0 && abs(zMuTrkMuDau1Eta)<2.4 && abs(zMuTrkMuDau2Eta)<2.4 && (zMuTrkMuDau1HLTBit==1 || zMuTrkMuDau2HLTBit==1) && abs(zMuTrkMuDau1dxyFromBS)<0.2 && abs(zMuTrkMuDau2dxyFromBS)<0.2 "); - - -TCut kin_common_notIso("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && (zGoldenDau1Iso03SumPt> 3.0 || zGoldenDau2Iso03SumPt>3.0) && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 "); - - - -TCut dau1Loose(" (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 "); -TCut dau2Loose(" (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 "); - - - -TCut dau1TightWP2("zGoldenDau1Chi2<10 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofMuonHits>0 && zGoldenDau1TrackerMuonBit==1"); -TCut dau2TightWP2("zGoldenDau2Chi2<10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofMuonHits>0 && zGoldenDau2TrackerMuonBit==1"); - -TCut dau1TightWP1_hltAlso("zGoldenDau1Chi2<10 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && abs(zGoldenDau1Eta)<2.1 && zGoldenDau1HLTBit==1"); -TCut dau2TightWP1_hltAlso("zGoldenDau2Chi2<10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofPixelHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau2NofMuMatches>1 && zGoldenDau2TrackerMuonBit==1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau2HLTBit==1"); - - - -TCut massCut("zGoldenMass>60 && zGoldenMass<120 "); - - - - -TChain * dataEvents= new TChain("Events"); - - - dataEvents->Add("../NtupleLoose_132440_139790.root"); - dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_965_971.root"); - dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_972_980.root"); - dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_140_058_076.root"); - dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_140_116_126.root"); - - - - - - - std::cout << " - -Z-->mu mu golden candidate in the mass range [60-120] " << std::endl; -Events->Scan("zGoldenRunNumber:zGoldenLumiblock:zGoldenEventNumber:zGoldenMass:zGoldenPt:zGoldenDau1Eta:zGoldenDau2Eta:zGoldenDau1Pt:zGoldenDau2Pt", "zGoldenMass>60 && zGoldenMass<120" + kin_common + ( ( dau1Loose && dau2TightWP1_hltAlso ) || ( dau2Loose && dau1TightWP1_hltAlso )) ); - - std::cout << " - -run number Z-->mu mu golden candidate in the mass range [60-120] " << std::endl; -Events->Scan("zGoldenRunNumber", "zGoldenMass>60 && zGoldenMass<120" + kin_common + ( ( dau1Loose && dau2TightWP1_hltAlso ) || ( dau2Loose && dau1TightWP1_hltAlso )) ); - - - std::cout << " - -Z-->mu mu candidate outside the mass range [60-120] " << std::endl; -Events->Scan("zGoldenRunNumber:zGoldenLumiblock:zGoldenEventNumber:zGoldenMass:zGoldenPt:zGoldenDau1Eta:zGoldenDau2Eta:zGoldenDau1Pt:zGoldenDau2Pt:zGoldenDau1Iso03SumPt:zGoldenDau2Iso03SumPt:zGoldenDau1Iso03EmEt:zGoldenDau2Iso03EmEt:zGoldenDau1Iso03HadEt:zGoldenDau2Iso03HadEt:zGoldenDau1NofMuonHits:zGoldenDau2NofMuonHits:zGoldenDau1NofPixelHits:zGoldenDau2NofPixelHits", "zGoldenMass<60 || zGoldenMass>120" + kin_common + ( ( dau1Loose && dau2TightWP1_hltAlso ) || ( dau2Loose && dau1TightWP1_hltAlso )) ); - - std::cout << " - -Z-->mu mu candidate not isolated in the mass range [60-120] " << std::endl; -Events->Scan("zGoldenRunNumber:zGoldenLumiblock:zGoldenEventNumber:zGoldenMass:zGoldenPt:zGoldenDau1Iso03SumPt:zGoldenDau2Iso03SumPt:zGoldenDau1Eta:zGoldenDau2Eta:zGoldenDau1Pt:zGoldenDau2Pt", "zGoldenMass>60 && zGoldenMass<120" + kin_common_notIso + ( ( dau1Loose && dau2TightWP1_hltAlso ) || ( dau2Loose && dau1TightWP1_hltAlso )) ); - - std::cout << " - -Z-->mu sta candidate in the mass range [60-120] " << std::endl; -Events->Scan("zMuStaRunNumber:zMuStaLumiblock:zMuStaEventNumber:zMuStaMass:zMuStaPt:zMuStaDau1Eta:zMuStaDau2Eta:zMuStaDau1Pt:zMuStaDau2Pt", "zMuStaMass>60 && zMuStaMass<120" + kin_common_musta ); - - -std::cout << " - -Z-->mu trk candidate in the mass range [60-120] " << std::endl; -Events->Scan("zMuTrkRunNumber:zMuTrkLumiblock:zMuTrkEventNumber:zMuTrkMass:zMuTrkPt:zMuTrkDau1Eta:zMuTrkDau2Eta:zMuTrkDau1Pt:zMuTrkDau2Pt", "zMuTrkMass>60 && zMuTrkMass<120" + kin_common_mutrkMu ); - - -} - - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/plotMuHLTBit.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/plotMuHLTBit.C deleted file mode 100644 index 3b0e77eda813e..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/plotMuHLTBit.C +++ /dev/null @@ -1,58 +0,0 @@ -{ - - - -TCut cut_zGolden("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=11 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=11 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 "); - -TChain * z = new TChain("Events"); -// z.Add("/scratch2/users/degruttola/Spring10Ntuples/NtupleLoose_ZmmPowhegSpring10HLTRedigi_100pb.root"); - z.Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_132440_135802.root"); - z.Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_135821-137731.root"); - z.Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_138737-138751_promptreco_FF.root"); - z.Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_138_919_939.root"); - z.Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139020.root"); - z.Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_096_103.root"); - z.Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_195_239.root"); - z.Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139347.root"); - z.Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_356_360.root"); - z.Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_362_365.root"); - z.Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_368_370.root"); - z.Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_372_375.root"); - z.Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_399_411.root"); - z.Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_457_459.root"); - - - - TCut eta1cut(" abs(zGoldenDau1Eta)>2.1 && abs(zGoldenDau1Eta) <2.4 "); - TCut eta2cut("abs(zGoldenDau2Eta) < 2.4"); - - z.Project("hltBit", "zGoldenDau1HLTBit", cut_zGolden + eta1cut + eta2cut); - - - int N2 = hltBit.Integral() ; - int N1 = hltBit.Integral(0,1) ; - // cout << "hltBit.Integral()" << N2 << endl; - // cout << "hltBit.Integral(0,1)" << N1 << endl; - - - TCut eta1cut("abs(zGoldenDau1Eta) < 2.4"); - TCut eta2cut("abs(zGoldenDau2Eta)> 2.1 && abs(zGoldenDau2Eta) <2.4 "); - - z.Project("hltBit", "zGoldenDau2HLTBit", cut_zGolden + eta1cut + eta2cut); - - - // cout << "hltBit.Integral()" << hltBit.Integral() << endl; - // cout << "hltBit.Integral(0,1)" << hltBit.Integral(0,1) << endl; - N2 += hltBit.Integral(); - N1 += hltBit.Integral(0,1); - - - double eff= ((double) N2 - (double) (2 * N1)) / ((double) N2 - (double) ( N1)) ; - cout << "eff " << eff << endl; - - cout << "N2 --> number of reco glb muons passing all cut ==" << N2 << endl; - cout << "N2 - N1 --> number of reco glb muons passing the trigger path ==" << N2 - N1 << endl; - cout << " eff = N2 - 2N1 / N2 -N1" << endl; - cout << " N2 - 2N1 (successes) == " << N2 - 2 * N1<< endl; - cout << " N2 - N1 (trials) == " << N2 - N1<< endl; -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/qualityCutCheck.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/qualityCutCheck.C deleted file mode 100644 index e18ca9d1aa178..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/qualityCutCheck.C +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef STACK_COMMON_H -#define STACK_COMMON_H - -#include -using namespace std; -#include "TChain.h" - - - - -void qualityCutCheck() { - - - -/// cuts common.... -TCut kin_common("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso03SumPt< 3.0 && zGoldenDau2Iso03SumPt < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 "); - -TCut kin_common_musta("zMuStaDau1Pt> 20 && zMuStaDau2Pt>20 && zMuStaDau1Iso03SumPt< 3.0 && zMuStaDau2Iso03SumPt < 3.0 && abs(zMuStaDau1Eta)<2.4 && abs(zMuStaDau2Eta)<2.4 && (zMuStaDau1HLTBit==1 || zMuStaDau2HLTBit==1) && abs(zMuStaDau1dxyFromBS)<0.2 && abs(zMuStaDau2dxyFromBS)<0.2 "); - -TCut kin_common_notIso("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && (zGoldenDau1Iso03SumPt> 3.0 || zGoldenDau2Iso03SumPt>3.0) && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 "); - - - -TCut dau1Loose(" (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 "); -TCut dau2Loose(" (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 "); - -TCut dau1TightWP1("zGoldenDau1Chi2<10 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1"); -TCut dau2TightWP1("zGoldenDau2Chi2<10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofPixelHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau2NofMuMatches>1 && zGoldenDau2TrackerMuonBit==1"); - - -TCut dau1TightWP2("zGoldenDau1Chi2<10 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofMuonHits>0 && zGoldenDau1TrackerMuonBit==1"); -TCut dau2TightWP2("zGoldenDau2Chi2<10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofMuonHits>0 && zGoldenDau2TrackerMuonBit==1"); - -TCut dau1TightWP1_hltAlso("zGoldenDau1Chi2<10 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau1HLTBit==1 && (abs(zGoldenDau1Eta)<2.1)"); -TCut dau2TightWP1_hltAlso("zGoldenDau2Chi2<10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofPixelHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau2NofMuMatches>1 && zGoldenDau2TrackerMuonBit==1&& zGoldenDau2HLTBit==0 && (abs(zGoldenDau2Eta)<2.1)"); - - - - -TCut massCut("zGoldenMass>60 && zGoldenMass<120 "); - - - - -TChain * dataEvents= new TChain("Events"); - - dataEvents->Add("/scratch2/users/degruttola/data/OfficialJSON/NtupleLoose_132440_139790.root"); - dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_965_971.root"); - dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_972_980.root"); - dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_140_058_076.root"); - dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_140_116_126.root"); - - - - - - std::cout << "muon with high chi2 " << std::endl; - - Events->Scan("zGoldenRunNumber:zGoldenLumiblock:zGoldenEventNumber:zGoldenMass:zGoldenDau1Pt:zGoldenDau1Eta:zGoldenDau1Iso03SumPt:zGoldenDau1Chi2:zGoldenDau1NofPixelHits:zGoldenDau1NofStripHits:zGoldenDau1NofMuonHits:zGoldenDau1HLTBit:zGoldenDau1TrackerMuonBit:zGoldenDau1NofMuMatches:zGoldenDau1TrkChi2:zGoldenDau1SaChi2", "zGoldenMass>60 && zGoldenMass<120" + kin_common + "zGoldenDau1Chi2>10 || zGoldenDau2Chi2>10"); - - std::cout << "muon with hit pixel 0 " << std::endl; - - - Events->Scan("zGoldenRunNumber:zGoldenLumiblock:zGoldenEventNumber:zGoldenMass:zGoldenDau1Pt:zGoldenDau1Eta:zGoldenDau1Iso03SumPt:zGoldenDau1Chi2:zGoldenDau1NofPixelHits:zGoldenDau1NofStripHits:zGoldenDau1NofMuonHits:zGoldenDau1HLTBit:zGoldenDau1TrackerMuonBit:zGoldenDau1NofMuMatches:zGoldenDau1dxyFromBS:zGoldenDau2dxyFromBS", "zGoldenMass>60 && zGoldenMass<120" + kin_common + "zGoldenDau1NofPixelHits==0 || zGoldenDau2NofPixelHits==0"); - - std::cout << "muon chamber <2 " << std::endl; - -Events->Scan("zGoldenRunNumber:zGoldenLumiblock:zGoldenEventNumber:zGoldenMass:zGoldenDau1Pt:zGoldenDau1Eta:zGoldenDau1Iso03SumPt:zGoldenDau1Chi2:zGoldenDau1NofPixelHits:zGoldenDau1NofStripHits:zGoldenDau1NofMuonHits:zGoldenDau1HLTBit:zGoldenDau1TrackerMuonBit:zGoldenDau1NofMuMatches:zGoldenDau1dxyFromBS:zGoldenDau2dxyFromBS", "zGoldenMass>60 && zGoldenMass<120" + kin_common + "zGoldenDau1NofMuMatches<2 || zGoldenDau2NofMuMatches<2"); - - //Events->Scan("zMuStaRunNumber:zMuStaLumiblock:zMuStaEventNumber:zMuStaMass:zMuStaDau1Pt:zMuStaDau1Eta:zMuStaDau2Pt:zMuStaDau2Eta:zMuStaDau1HLTBit:zMuStaDau1NofMuMatches:zMuStaDau2HLTBit:zMuStaDau2NofMuMatches:", "zMuStaMass>60 && zMuStaMass<120"+ kin_common_musta ); - - std::cout << "muon hit 0 " << std::endl; - -Events->Scan("zGoldenRunNumber:zGoldenLumiblock:zGoldenEventNumber:zGoldenMass:zGoldenDau1Pt:zGoldenDau1Eta:zGoldenDau1Iso03SumPt:zGoldenDau1Chi2:zGoldenDau1NofPixelHits:zGoldenDau1NofStripHits:zGoldenDau1NofMuonHits:zGoldenDau1HLTBit:zGoldenDau1TrackerMuonBit:zGoldenDau1NofMuMatches:zGoldenDau1dxyFromBS:zGoldenDau2dxyFromBS", "zGoldenMass>60 && zGoldenMass<120" + kin_common + "zGoldenDau1NofMuonHits==0 || zGoldenDau2NofMuonHits==0"); - - - -} - - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/rootlogon.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/rootlogon.C deleted file mode 100755 index b04133420cba6..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/rootlogon.C +++ /dev/null @@ -1,14 +0,0 @@ -{ - std::string macroPath = gROOT->GetMacroPath(); - macroPath += ":"; - macroPath += gSystem->ExpandPathName("$CMSSW_RELEASE_BASE/src/PhysicsTools/Utilities/macros"); - macroPath += ":"; - macroPath += gSystem->ExpandPathName("$CMSSW_BASE/src/PhysicsTools/Utilities/macros"); - gROOT->SetMacroPath(macroPath.c_str()); - gSystem->AddIncludePath("$CMSSW_RELEASE_BASE/src"); - gSystem->AddIncludePath("$CMSSW_BASE/src"); - gROOT->ProcessLine(".L setTDRStyle.C"); - gSystem->Load("libFWCoreFWLite"); - FWLiteEnabler::enable(); - setTDRStyle(); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stackAll.sh b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stackAll.sh deleted file mode 100755 index d36af76f1814b..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stackAll.sh +++ /dev/null @@ -1,17 +0,0 @@ -root -b -q stack_zGolden.C -root -b -q stack_zGoldenDauChi2.C -root -b -q stack_zGoldenDauEcalIso.C -root -b -q stack_zGoldenDauHcalIso.C -root -b -q stack_zGoldenDauMaxPt.C -root -b -q stack_zGoldenDauMinPt.C -root -b -q stack_zGoldenDauNofMuMatches.C -root -b -q stack_zGoldenDauNofMuonHits.C -root -b -q stack_zGoldenDauNofPixelHits.C -root -b -q stack_zGoldenDauNofStripHits.C -root -b -q stack_zGoldenDauTrkIso.C -root -b -q stack_zGoldenPt.C -root -b -q stack_zGoldenY.C -root -b -q stack_zmm1hlt.C -root -b -q stack_zmm2hlt.C -root -b -q stack_zGoldenIsTrackerMuon.C - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_all.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_all.C deleted file mode 100644 index b12cce4d68d18..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_all.C +++ /dev/null @@ -1,19 +0,0 @@ -#include "stack_zGolden.C" -#include "stack_zmTrk.C" -#include "stack_zmTrkMu.C" -#include "stack_zmSta.C" -#include "stack_zmm1hlt.C" -#include "stack_zmm2hlt.C" -#include "stack_zmmNotIso.C" -#include "stack_zmm0neLess2p4.C" - -void stack_all() { - stack_zGolden(); - stack_zmTrk(); - stack_zmTrkMu(); - stack_zmSta(); - stack_zmm1hlt(); - stack_zmm2hlt(); - stack_zmmNotIso(); - stack_zmm0neLess2p4(); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_common.h b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_common.h deleted file mode 100644 index c739f027a41b5..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_common.h +++ /dev/null @@ -1,527 +0,0 @@ -#ifndef STACK_COMMON_H -#define STACK_COMMON_H - -#include -#include "TChain.h" - -#include "TGraphAsymmErrors.h" - -const int canvasSizeX = 500; -const int canvasSizeY = 500; -const Color_t zLineColor = kOrange+3; -const Color_t zFillColor = kOrange-2; -// ewk: W+ztt -const Color_t ewkLineColor = kOrange+3; -const Color_t ewkFillColor = kOrange+7; - -const Color_t qcdLineColor = kViolet+3; -const Color_t qcdFillColor = kViolet-5; - - -const Color_t ttLineColor = kRed+4; -const Color_t ttFillColor = kRed+2; - -//const Color_t ztFillColor = kYellow-9; -//const Color_t ztLineColor = kYellow-1; - - - - -// 78 -double intLumi = 177 ; -//double intLumi = 100000; - -const double lumi = intLumi * .001 ; -//const double lumi =0100.0 ; -const double lumiZ = 100. ; -const double lumiW = 100.; -//adjust to new filter efficiency -const double lumiQ = 60.; -//scaling ttbar from 94.3 to 162. -const double lumiT =100. * (94.3/162.); -const double lumiZT =100.; - - -const double mMin = 60; -const double mMax = 120; - - - - - -/// cuts common.... -TCut kin_common(" (zGoldenDau1Q * zGoldenDau2Q) ==-1 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso03SumPt< 3.0 && zGoldenDau2Iso03SumPt < 3.0 && ( (zGoldenDau1HLTBit==1 && abs(zGoldenDau1Eta)<2.1) || ( zGoldenDau2HLTBit==1 && abs(zGoldenDau2Eta)<2.1)) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 "); // && ( abs(zGoldenDau1dxyFromBS)<0.1 || abs(zGoldenDau2dxyFromBS)<0.1 ) "); - - - -TCut dau1Loose(" (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 "); -TCut dau2Loose(" (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 "); - -TCut dau1TightWP1("zGoldenDau1Chi2<10 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1"); -TCut dau2TightWP1("zGoldenDau2Chi2<10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofPixelHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau2NofMuMatches>1 && zGoldenDau2TrackerMuonBit==1"); - - -TCut dau1TightWP2("zGoldenDau1Chi2<10 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofMuonHits>0 && zGoldenDau1TrackerMuonBit==1"); -TCut dau2TightWP2("zGoldenDau2Chi2<10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofMuonHits>0 && zGoldenDau2TrackerMuonBit==1"); - -TCut dau1TightWP1_hltAlso("zGoldenDau1Chi2<10 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && abs(zGoldenDau1Eta)<2.1 && zGoldenDau1HLTBit==1");// 2.1 can bacome 2.4 later.... -TCut dau2TightWP1_hltAlso("zGoldenDau2Chi2<10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofPixelHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau2NofMuMatches>1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau2HLTBit==1"); - - - -TCut massCut("zGoldenMass>60 && zGoldenMass<120 "); - - - - -TCanvas *c1 = new TCanvas("c1","Stack plot", 300,300,479,510); - - c1->SetLeftMargin( 87./479 ); - c1->SetRightMargin( 42./479 ); - c1->SetTopMargin( 30./510 ); - c1->SetBottomMargin( 80./510 ); - c1->SetFillColor(0); - c1->SetTickx(1); - c1->SetTicky(1); - c1->SetFrameFillStyle(0); - c1->SetFrameLineWidth(2); - c1->SetFrameBorderMode(0); - - - - - int lineWidth(3); - -if( logScale ) - { - lineWidth = 1; - } - - // histogram limits, in linear and logarithmic - int nbin_(100); - float xmin_(0.), xmax_(100.); - float ymin_(0.), ymax_(40.); - float yminl_(0.1), ymaxl_(200.); - - // titles and axis, marker size - TString xtitle; - TString ytitle; -int ndivx(506); - int ndivy(506); - float markerSize(2.); - - // canvas name - TString cname("c"); - TString ctitle; - - // legend position and scale; - float xl_ = 0.; - float yl_ = 0.6; - float scalel_ = 0.05; - ndivx = 120; - -if( logScale ) - { - ndivx=506; - ndivy = 506; - } - else - { - ndivy = 506; - ndivx=506; - } - - if( logScale ) - { - markerSize = 1.2; - } - else - { - markerSize = 1.2; - } - - - if( logScale ) - { - xl_ = 0.60; - yl_ = 0.60; - } - else - { - xl_ = 0.60; - yl_ = 0.60; - scalel_ = 0.06; - } - - - - -void setHisto(TH1 * h, Color_t fill, Color_t line, double scale, int rebin) { - h->SetFillColor(fill); - h->SetLineColor(line); - h->Scale(scale); - h->Rebin(rebin); - -} - -void stat(TH1 * h1, TH1 * h2, TH1 * h3, TH1 * h4, TH1 *h5, TH1 * hdata, int rebin) { - double a = mMin/rebin +1, b = mMax/rebin; - double i1 = h1->Integral(a, b); - double err1 = sqrt(i1); - double i2 = h2->Integral(a, b); - double err2 = sqrt(i2); - double i3 = h3->Integral(a, b); - double err3 = sqrt(i3); - double i4 = h4->Integral(a, b); - double err4 = sqrt(i4); - double i5 = h5->Integral(a, b); - double err5 = sqrt(i5); - - double idata = hdata != 0 ? hdata->Integral(a, b) : 0; - double errData = sqrt(idata); - - std::cout.setf(0,ios::floatfield); - std::cout.setf(ios::fixed,ios::floatfield); - std::cout.precision(1); - std::cout <<"Zmm (" << mMin << ", " << mMax << ") = "; - std::cout.precision(8); - std::cout << i1 << "+/- " << err1 <Add(h5); - - THStack * hs = new THStack("hs",""); - - - - - if (logScale) { - - - - hs->Add(h4); - hs->Add(h3); - hs->Add(h2); - } - //hs->Add(h5); - hs->Add(h1); - - hs->Draw("HIST"); - if(hdata != 0) { - hdata->Rebin(rebin); - - /* TGraphAsymmErrors* dataGraph = (TGraphAsymmErrors*)hdata; - dataGraph->SetMarkerStyle(kFullCircle); - dataGraph->SetMarkerColor(kBlack); - dataGraph->SetMarkerSize(markerSize); - // Remove the horizontal bars (at Michael's request) - double x_(0), y_(0); - for( int ii=0; iiGetN(); ii++ ) - { - dataGraph->SetPointEXlow(ii,0); - dataGraph->SetPointEXhigh(ii,0); - dataGraph->GetPoint(ii,x_,y_ ); - if( y_==0 ) - { - dataGraph->RemovePoint( ii ); - ii--; - } - } -dataGraph->Draw("pesame"); - */ - - hdata->SetMarkerStyle(kFullCircle); - hdata->SetMarkerSize(markerSize); - hdata->SetMarkerColor(kBlack); - hdata->SetLineWidth(lineWidth); - hdata->SetLineColor(kBlack); - //gStyle->SetErrorX(.5); - gStyle->SetEndErrorSize(2); - - hdata->Draw("PE1SAME"); - hdata->GetXaxis()->SetLabelSize(0); - hdata->GetYaxis()->SetLabelSize(0); - hdata->GetXaxis()->SetNdivisions(ndivx); - hdata->GetYaxis()->SetNdivisions(ndivy); - hs->GetXaxis()->SetNdivisions(ndivx); - hs->GetYaxis()->SetNdivisions(ndivy); - // log plots, so the maximum should be one order of magnitude more... - - - - hs->SetMaximum( 8 + hdata->GetMaximum() ) ; - if (logScale) { - hs->SetMaximum( pow(10 , 2. + int(log( hdata->GetMaximum() ) ) )); - } - // lin plot - - // - } - hs->SetMinimum(min); - - hs->GetXaxis()->SetTitle("M(#mu^{+} #mu^{-}) [GeV]"); - - - - std::string yTag = ""; - switch(rebin) { - case 1: yTag = "number of events/ 1 GeV"; break; - case 2: yTag = "number of events/ 2 GeV"; break; - case 2.5: yTag = "number of events/ 2.5 GeV"; break; - case 3: yTag = "number of events/ 3 GeV"; break; - case 4: yTag = "number of events/ 4 GeV"; break; - case 5: yTag = "number of events/ 5 GeV"; break; - case 10: yTag = "number of events/ 10 GeV"; break; - default: - std::cerr << ">>> ERROR: set y tag for rebin = " << rebin << std::endl; - }; - - hs->GetYaxis()->SetTitle(yTag.c_str()); - - - /* - hs->GetXaxis()->SetTitleSize(0.05); - hs->GetYaxis()->SetTitleSize(0.05); - - */ - if (logScale) { - hs->GetXaxis()->SetTitleOffset(1.0); - hs->GetYaxis()->SetTitleOffset(1.1); - - hs->GetYaxis()->SetLabelOffset(0.0); - hs->GetXaxis()->SetLabelSize(.05); - hs->GetYaxis()->SetLabelSize(.05); - } - - -//leg = new TLegend(0.75,0.55,0.90,0.7); - - - int nChan =2; - if (logScale) nChan = 4; -float dxl_ = scalel_*5; - if (logScale) dxl_ = scalel_*4; - float dyl_ = scalel_*(nChan); - if (logScale) dyl_ = scalel_*(nChan-1); - // TLegend* legend=new TLegend(xl_,yl_,xl_+dxl_,yl_+dyl_); - // TLegend* legend=new TLegend(0.65,0.54,0.95,0.796); - // legend on the left - TLegend* legend=new TLegend(0.2,0.78,0.4,0.93); - legend->SetLineColor(0); - legend->SetFillColor(0); - - - - - - //leg = new TLegend(0.20,0.7,0.35,0.85); - if(hdata != 0) - legend->AddEntry(hdata,"data", "pl"); - legend->AddEntry(h1,"Z #rightarrow#mu #mu","f"); - if (logScale) { - - legend->AddEntry(h2,"EWK","f"); - legend->AddEntry(h4,"QCD","f"); - legend->AddEntry(h3,"t#bar{t}","f"); - //leg->AddEntry(h5,"Z#rightarrow#tau #tau","f"); - } - - // legend->SetFillColor(kWhite); - //legend->SetFillColor(kWhite); - - legend->SetShadowColor(kWhite); - legend->Draw(); - - - -TLatex latex; - latex.SetNDC(); - latex.SetTextSize(0.04); - - latex.SetTextAlign(31); // align right - latex.DrawLatex(0.90,0.96,"#sqrt{s} = 7 TeV"); - if (intLumi > 0.) { - latex.SetTextAlign(31); // align right - latex.DrawLatex(0.85,0.84,Form("#int #font[12]{L} dt = %.0f nb^{-1}",intLumi)); - } - latex.SetTextAlign(11); // align left - latex.DrawLatex(0.12,0.96,"CMS preliminary 2010"); - - - stat(h1, h2, h3, h4, h5,hdata, rebin); - - // c1->Update(); - // c1->SetTickx(0); - // c1->SetTicky(0); -} - - - - - -// allowing two variables, for plotting the muon variables... -void makePlots(const char * var1, const char * var2, TCut cut, int rebin, const char * plot, - double min = 0.001, unsigned int nbins, double xMin, double xMax, bool doData = false, bool logScale=false) { - - - -TChain * zEvents = new TChain("Events"); - - -// zEvents->Add("/scratch2/users/degruttola/Spring10Ntuples_withIso03/NtupleLoose_zmmSpring10cteq66_100pb.root"); - - - - zEvents->Add("/scratch2/users/degruttola/Summer10Ntuples/Ntuple_ZmmPowheg_36X_100pb.root"); -TChain * wEvents = new TChain("Events"); - wEvents->Add("/scratch2/users/degruttola/Summer10Ntuples/Ntuple_wplusPowheg_36X_100pb_v2.root"); - wEvents->Add("/scratch2/users/degruttola/Summer10Ntuples/Ntuple_wminusPowheg36X_100pb.root"); - -// 100 pb -TChain * tEvents = new TChain("Events"); -tEvents->Add("/scratch2/users/degruttola/Summer10Ntuples/Ntuple_ttbar_36X_100pb.root"); -// 100 pb -TChain * qEvents = new TChain("Events"); -qEvents->Add("/scratch2/users/degruttola/Summer10Ntuples/Ntuple_incl15_36X_60pb.root"); -TChain * ztEvents = new TChain("Events"); - ztEvents->Add("/scratch2/users/degruttola/Summer10Ntuples/Ntuple_ztautauPowheg36X_100pb.root"); -// 35 pb - - -TChain * dataEvents= new TChain("Events"); - - - dataEvents->Add("/scratch2/users/degruttola/data/OfficialJSON/NtupleLoose_132440_139790.root"); - dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_965_971.root"); -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_139_972_980.root"); -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_140_058_076.root"); -dataEvents->Add("/scratch2/users/degruttola/data/jun14rereco_and361p4PromptReco/NtupleLoose_140_116_126.root"); - -// .040 pb - - TH1F *h1 = new TH1F ("h1", "h1", nbins, xMin, xMax); - TH1F *hh1 = new TH1F ("hh1", "hh1", nbins, xMin, xMax); - - // h1->Rebin(rebin); - TH1F *h2 = new TH1F ("h2", "h2", nbins, xMin, xMax); - TH1F *hh2 = new TH1F ("hh2", "hh2", nbins, xMin, xMax); - - // h2->Rebin(rebin); - TH1F *h3 = new TH1F ("h3", "h3", nbins, xMin, xMax); - TH1F *hh3 = new TH1F ("hh3", "hh3", nbins, xMin, xMax); - - //h3->Rebin(rebin); - TH1F *h4 = new TH1F ("h4", "h4", nbins, xMin, xMax); - TH1F *hh4 = new TH1F ("hh4", "hh4", nbins, xMin, xMax); - - //h4->Rebin(rebin); - TH1F *h5 = new TH1F ("h5", "h5", nbins, xMin, xMax); - TH1F *hh5 = new TH1F ("hh5", "hh5", nbins, xMin, xMax); - - - zEvents->Project("h1", var1, cut); - zEvents->Project("hh1", var2, cut); - h1->Add(hh1); - - wEvents->Project("h2", var1, cut); - wEvents->Project("h2", var2, cut); - h2->Add(hh2); - - tEvents->Project("h3", var1, cut); - tEvents->Project("h3", var2, cut); - h3->Add(hh3); - - qEvents->Project("h4", var1, cut); - qEvents->Project("h4", var2, cut); - h4->Add(hh4); - - ztEvents->Project("h5", var1, cut); - ztEvents->Project("h5", var2, cut); - h5->Add(hh5); - - // TH1F *hdata = doData? (TH1F*)data.Get(var) : 0; - if (doData) { - TH1F *hdata = new TH1F ("hdata", "hdata", nbins, xMin, xMax); - TH1F *hhdata = new TH1F ("hhdata", "hhdata", nbins, xMin, xMax); - dataEvents->Project("hdata", var1, cut) ; - dataEvents->Project("hhdata", var2, cut) ; - hdata->Add(hhdata); - } - makeStack(h1, h2, h3, h4, h5, hdata, min, rebin, logScale); - - - - if (logScale) c1->SetLogy(); - - c1->SaveAs((std::string(plot)+".eps").c_str()); - c1->SaveAs((std::string(plot)+".gif").c_str()); - c1->SaveAs((std::string(plot)+".pdf").c_str()); - - TFile * out = new TFile("plot.root", "RECREATE"); - - c1->Write(); -} - - -void evalEff(const char * var1, const char * var2, TCut cut, TCut cut_Nminus1, unsigned int nbins, double xMin, double xMax) { - - -TChain * zEvents = new TChain("Events"); - -// zEvents->Add("/scratch2/users/degruttola/Spring10Ntuples_withIso03/NtupleLoose_zmmSpring10cteq66_100pb.root"); -zEvents->Add("/scratch2/users/degruttola/Summer10Ntuples/Ntuple_ZmmPowheg_36X_100pb.root"); - TH1F * htot1 = new TH1F("htot1", "htot1", nbins, xMin, xMax); - TH1F * htot2 = new TH1F("htot2", "htot2", nbins, xMin, xMax); - TH1F * hcut1 = new TH1F("hcut1", "hcut1", nbins, xMin, xMax); - TH1F * hcut2 = new TH1F("hcut2", "hcut2", nbins, xMin, xMax); - - - zEvents->Project("htot1", var1, cut); - zEvents->Project("hcut1", var1, cut_Nminus1); - zEvents->Project("htot2", var2, cut); - zEvents->Project("hcut2", var2, cut_Nminus1); - - int npass = hcut1->Integral() + hcut2->Integral() ; - int ntot = htot1->Integral() + htot2->Integral() ; - - double eff = (double) npass / ntot; - double err = sqrt(eff * (1 - eff ) / (ntot)); - std::cout << " efficiency for the given cut: " << eff; - std::cout << " npass: " << npass; - std::cout << " nTot: " << ntot; - std::cout << " binomial error: " << err << std::endl; - - -} - - - -#endif diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGolden.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGolden.C deleted file mode 100644 index 5e31e481c5a4f..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGolden.C +++ /dev/null @@ -1,70 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGolden() { - - - // TCut kin_common("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 "); - - - - // TCut dau1Loose(" (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 "); - // TCut dau2Loose(" (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 "); - - // TCut dau1TightWP1("zGoldenDau1Chi2<10 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1"); - //TCut dau2TightWP1("zGoldenDau2Chi2<10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofPixelHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau2NofMuMatches>1 && zGoldenDau2TrackerMuonBit==1"); - - - //TCut dau1TightWP2("zGoldenDau1Chi2<10 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofMuonHits>0 && zGoldenDau1TrackerMuonBit==1"); - // TCut dau2TightWP2("zGoldenDau2Chi2<10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofMuonHits>0 && zGoldenDau2TrackerMuonBit==1"); - - // TCut dau1TightWP1_hltAlso("zGoldenDau1Chi2<10 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofMuonHits>0 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau1HLTBit==1"); - // TCut dau2TightWP1_hltAlso("zGoldenDau2Chi2<10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofMuonHits>0 && zGoldenDau2TrackerMuonBit==1 && zGoldenDau2HLTBit==1"); - - - - - - - //TCut cut_zGolden("zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofPixelHits>0 && (zGoldenDau2NofStripHits+ zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1"); - - - // makePlots("zGoldenMass", "", kin_common + dau1TightWP1 + dau2TightWP1, 5, "zGolden", 0.001, 200, 0 ,200, true); - - - - - // evaluateing now the total efficency of the qulaity cut - - //TCut massCut("zGoldenMass>60 && zGoldenMass<120 "); - - //evalEff("zGoldenMass", "", kin_common + massCut, kin_common + massCut + dau1TightWP1 + dau2TightWP1 ,200, 0, 200); - - - - //makePlots("zGoldenMass", "", kin_common + ( ( dau1Loose && dau2TightWP1 ) || ( dau2Loose && dau1TightWP1 )) , 5, "zGolden", 0.001, 200, 0 ,200, true); - - //evalEff("zGoldenMass", "", kin_common + massCut, kin_common + massCut + ( ( dau1Loose && dau2TightWP1 ) || ( dau2Loose && dau1TightWP1 )) ,200, 0, 200); - - // WP2 - - //makePlots("zGoldenMass", "", kin_common + dau1TightWP2 + dau1TightWP2 , 5, "zGolden", 0.001, 200, 0 ,200, true); - - //evalEff("zGoldenMass", "", kin_common + massCut, kin_common + massCut + dau2TightWP2 + dau1TightWP2,200, 0, 200); - - // makePlots("zGoldenMass", "", kin_common + ( ( dau1Loose && dau2TightWP2 ) || ( dau2Loose && dau1TightWP2 )) , 5, "zGolden", 0.001, 200, 0 ,200, true); - - // evalEff("zGoldenMass", "", kin_common + massCut, kin_common + massCut + ( ( dau1Loose && dau2TightWP2 ) || ( dau2Loose && dau1TightWP2 )) ,200, 0, 200); - - makePlots("zGoldenMass", "", kin_common + ( ( dau1Loose && dau2TightWP1_hltAlso ) || ( dau2Loose && dau1TightWP1_hltAlso )) ,5, "zGoldenLog_b5", 0.001, 200, 0 ,200, true, true); - - evalEff("zGoldenMass", "", kin_common + massCut, kin_common + massCut + ( ( dau1Loose && dau2TightWP1_hltAlso ) || ( dau2Loose && dau1TightWP1_hltAlso )) ,200, 0, 200); - - -} - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauChi2.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauChi2.C deleted file mode 100644 index 238718fbe5019..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauChi2.C +++ /dev/null @@ -1,23 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenDauChi2() { - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<1000 && zGoldenDau2Chi2<1000 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>9 && zGoldenDau1NofPixelHits>0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits )>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - makePlots("zGoldenDau1Chi2", "zGoldenDau2Chi2", massCut + kin_common , 1, "zGoldenDauChi2", 0.0001, 100, 0 ,100, true, true); - hs->GetXaxis()->SetTitle("#chi^{2}"); - string yTag = "events"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenDauChi2.eps"); - c1->SaveAs("zGoldenDauChi2.gif"); - // c1->SaveAs("zGoldenDauChi2.pdf"); - - //TCut Ncut("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>9 && zGoldenDau1NofPixelHits>0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits )>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - //evalEff("zGoldenDau1Chi2", "zGoldenDau2Chi2", cut_zGolden, Ncut, 100, 0, 100); - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauDxy.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauDxy.C deleted file mode 100644 index 117cb80185a63..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauDxy.C +++ /dev/null @@ -1,23 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenDauDxy() { - - - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 0 && zGoldenDau2Pt>0 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits )>9 && zGoldenDau1NofPixelHits>0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits) >9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - TCut kin_common_woDxy("zGoldenDau1Pt>20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - - - makePlots("zGoldenDau1dxyFromBS", "zGoldenDau2dxyFromBS", massCut + kin_common_woDxy + ( ( dau1Loose && dau2TightWP1_hltAlso ) || ( dau2Loose && dau1TightWP1_hltAlso )), 1, "zGoldenDauDxy", 0.001, 100, -0.2 ,0.2, true); - hs->GetXaxis()->SetTitle("dxy from beam spot (cm)"); - string yTag = "events/(.001 GeV/c)"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenDauDxy.eps"); - c1->SaveAs("zGoldenDauDxy.gif"); - // c1->SaveAs("zGoldenDauPt.pdf"); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauEcalIso.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauEcalIso.C deleted file mode 100644 index b7518bf61fb93..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauEcalIso.C +++ /dev/null @@ -1,24 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenDauEcalIso() { - - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1EcalIso< 3000.0 && zGoldenDau1EcalIso < 3000.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>9 && zGoldenDau1NofPixelHits>0 && ( zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - TCut kin_common_woIso("zGoldenDau1Pt>20 && zGoldenDau2Pt>20 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 "); - - - - makePlots("zGoldenDau1Iso03EmEt", "zGoldenDau2Iso03EmEt", massCut + kin_common_woIso + ( ( dau1Loose && dau2TightWP1_hltAlso) || ( dau2Loose && dau1TightWP1_hltAlso )) , 1, "zGoldenDauEcalIso", 0.01, 50, 0 ,10, true); - hs->GetXaxis()->SetTitle("#sum Et (GeV/c) (ecal)"); - string yTag = "events/(.2 GeV/c)"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - hs->GetYaxis()->SetTitleOffset(1.2); - c1->SaveAs("zGoldenDauEcalIso.eps"); - c1->SaveAs("zGoldenDauEcalIso.gif"); - c1->SaveAs("zGoldenDauEcalIso.pdf"); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauEta.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauEta.C deleted file mode 100644 index 43762fa23a0ac..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauEta.C +++ /dev/null @@ -1,23 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenDauEta() { - - - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 0 && zGoldenDau2Pt>0 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits )>9 && zGoldenDau1NofPixelHits>0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits) >9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - - - - makePlots("zGoldenDau1Eta", "zGoldenDau2Eta", massCut + kin_common + ( ( dau1Loose && dau2TightWP1_hltAlso ) || ( dau2Loose && dau1TightWP1_hltAlso )), 1, "zGoldenDauEta", 0.001, 18, -2.7 ,2.7, true, false); - hs->GetXaxis()->SetTitle("#eta_{#mu}"); - string yTag = "events/(0.1)"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenDauEta.eps"); - c1->SaveAs("zGoldenDauEta.gif"); - // c1->SaveAs("zGoldenDauPt.pdf"); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauEtaNotTriggered.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauEtaNotTriggered.C deleted file mode 100644 index 3b93b676881c8..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauEtaNotTriggered.C +++ /dev/null @@ -1,23 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenDauEtaNotTriggered() { - - - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 0 && zGoldenDau2Pt>0 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits )>9 && zGoldenDau1NofPixelHits>0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits) >9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - - - - makePlots("zGoldenDau1Eta", "zGoldenDau2Eta", massCut + kin_common + ( (dau2TightWP1 && dau1TightWP1_hltAlso && "zGoldenDau2HLTBit==0") || ( dau2TightWP1_hltAlso && dau1TightWP1 && "zGoldenDau1HLTBit==0" )), 1, "zGoldenDauEtaNotTriggered", 0.001, 18, -2.7 ,2.7, true); - hs->GetXaxis()->SetTitle("#eta_{#mu}"); - string yTag = "events/(0.1)"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenDauEtaNotTriggered.eps"); - c1->SaveAs("zGoldenDauEtaNotTriggered.gif"); - // c1->SaveAs("zGoldenDauPt.pdf"); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauHcalIso.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauHcalIso.C deleted file mode 100644 index fba86ac784519..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauHcalIso.C +++ /dev/null @@ -1,24 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenDauHcalIso() { - - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1HcalIso< 3000.0 && zGoldenDau1HcalIso < 3000.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>9 && zGoldenDau1NofPixelHits>0 && ( zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - TCut kin_common_woIso("zGoldenDau1Pt>20 && zGoldenDau2Pt>20 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 "); - - - - makePlots("zGoldenDau1Iso03HadEt", "zGoldenDau2Iso03HadEt", massCut + kin_common_woIso + ( ( dau1Loose && dau2TightWP1_hltAlso) || ( dau2Loose && dau1TightWP1_hltAlso )) , 1, "zGoldenDauHcalIso", 0.01, 50, 0 ,10, true); - hs->GetXaxis()->SetTitle("#sum Et (GeV/c) (hcal)"); - string yTag = "events/(.2 GeV/c)"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - hs->GetYaxis()->SetTitleOffset(1.2); - c1->SaveAs("zGoldenDauHcalIso.eps"); - c1->SaveAs("zGoldenDauHcalIso.gif"); - //c1->SaveAs("zGoldenDauHcalIso.pdf"); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauMaxPt.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauMaxPt.C deleted file mode 100644 index 19a9466a278ae..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauMaxPt.C +++ /dev/null @@ -1,18 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenDauMaxPt() { -TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 0 && zGoldenDau2Pt>0 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits )>9 && zGoldenDau1NofPixelHits>0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits) >9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - makePlots("max(zGoldenDau1Pt,zGoldenDau2Pt)", "", cut_zGolden, 5, "zGoldenDauMaxPt", 0.01, 200, 0 ,200, true); - hs->GetXaxis()->SetTitle("p_{T #mu} (GeV/c)"); - string yTag = "events/(5 GeV/c)"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenDauMaxPt.eps"); - c1->SaveAs("zGoldenDauMaxPt.gif"); - c1->SaveAs("zGoldenDauMaxPt.pdf"); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauMinPt.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauMinPt.C deleted file mode 100644 index 1b20f76f3d4ef..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauMinPt.C +++ /dev/null @@ -1,19 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenDauMinPt() { -TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 0 && zGoldenDau2Pt>0 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits) >9 && zGoldenDau1NofPixelHits>0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - makePlots("min(zGoldenDau1Pt,zGoldenDau2Pt)", "", cut_zGolden, 5, "zGoldenDauMinPt", 0.01, 200, 0 ,200, true); - hs->GetXaxis()->SetTitle("p_{T #mu} (GeV/c)"); - string yTag = "events/(5 GeV/c)"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenDauMinPt.eps"); - c1->SaveAs("zGoldenDauMinPt.gif"); - c1->SaveAs("zGoldenDauMinPt.pdf"); - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauNofMuMatches.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauNofMuMatches.C deleted file mode 100644 index d16a0499431bf..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauNofMuMatches.C +++ /dev/null @@ -1,29 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenDauNofMuMatches() { - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10&& zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ( zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>9 && zGoldenDau1NofPixelHits>0 && ( zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>-1 && zGoldenDau2NofMuMatches>-1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - makePlots("zGoldenDau1NofMuMatches", "zGoldenDau2NofMuMatches", massCut + kin_common , 1, "zGoldenDauNofMuMatches", 0.001, 12, -0.5 ,11.5, true, false); - hs->GetXaxis()->SetTitle("# of matched chambers"); - string yTag = "events"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenDauNofMuMatches.eps"); - c1->SaveAs("zGoldenDauNofMuMatches.gif"); - // c1->SaveAs("zGoldenDauNofMuMatches.pdf"); - - - //TCut Ncut("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10&& zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ( zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>9 && zGoldenDau1NofPixelHits>0 && ( zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - //TCut Invcut("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10&& zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ( zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>9 && zGoldenDau1NofPixelHits>0 && ( zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches<2 && zGoldenDau2NofMuMatches<2 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - - //evalEff("zGoldenDau1NofMuMatches", "zGoldenDau2NofMuMatches", cut_zGolden, Ncut, 100, -0.5, 99.5); - //evalEff("zGoldenDau1HLTBit", "zGoldenDau2HLTBit", cut_zGolden, Invcut, 1, 0.5, 1.5); - //evalEff("zGoldenDau1HLTBit", "zGoldenDau2HLTBit", cut_zGolden, Invcut, 1, -0.5, 0.5); - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauNofMuonHits.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauNofMuonHits.C deleted file mode 100644 index d07bb75895d1f..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauNofMuonHits.C +++ /dev/null @@ -1,35 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenDauNofMuonHits() { - - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10&& zGoldenDau1NofPixelHits>0 && ( zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>-1 && zGoldenDau2NofMuonHits>-1 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - makePlots("zGoldenDau1NofMuonHits", "zGoldenDau2NofMuonHits", massCut + kin_common, 1, "zGoldenDauNofMuonHits", 0.001, 70, -0.5 ,69.5, true, false); - hs->GetXaxis()->SetTitle("# of muon hits"); - string yTag = "events"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenDauNofMuonHits.eps"); - c1->SaveAs("zGoldenDauNofMuonHits.gif"); - // c1->SaveAs("zGoldenDauNofMuonHits.pdf"); - - - //TCut Ncut("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofPixelHits>0 && ( zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - - - - - - - //evalEff("zGoldenDau1NofMuonHits", "zGoldenDau2NofMuonHits" , cut_zGolden, Ncut, 70, -0.5, 69.6); - - - - - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauNofPixelHits.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauNofPixelHits.C deleted file mode 100644 index 044124d23cf86..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauNofPixelHits.C +++ /dev/null @@ -1,23 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenDauNofPixelHits() { - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ( zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>9 && zGoldenDau1NofPixelHits>-1 && ( zGoldenDau2NofStripHits +zGoldenDau2NofPixelHits )>9 && zGoldenDau2NofPixelHits>-1 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - makePlots("zGoldenDau1NofPixelHits", "zGoldenDau2NofPixelHits", massCut + kin_common , 1, "zGoldenDauNofPixelHits", 0.01, 10, -0.5 ,9.5, true, false); - hs->GetXaxis()->SetTitle("# of pixel hits"); - string yTag = "events"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenDauNofPixelHits.eps"); - c1->SaveAs("zGoldenDauNofPixelHits.gif"); - c1->SaveAs("zGoldenDauNofPixelHits.pdf"); - - - //TCut Ncut("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ( zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>9 && zGoldenDau1NofPixelHits>0 && ( zGoldenDau2NofStripHits +zGoldenDau2NofPixelHits )>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - //evalEff("zGoldenDau1NofPixelHits", "zGoldenDau2NofPixelHits", cut_zGolden, Ncut, 10, -0.5, 9.5); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauNofStripHits.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauNofStripHits.C deleted file mode 100644 index 9d86b6716dd30..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauNofStripHits.C +++ /dev/null @@ -1,25 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenDauNofStripHits() { - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && zGoldenDau1NofStripHits>0 && zGoldenDau1NofPixelHits>0 && zGoldenDau2NofStripHits>0 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - makePlots("zGoldenDau1NofStripHits +zGoldenDau1NofPixelHits ", "zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits", massCut + kin_common, 1, "zGoldenDauNofTrkHits", 0.001, 40, -0.5 ,39.5, true, false); - hs->GetXaxis()->SetTitle("# of tracker hits"); - string yTag = "events"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenDauNofTrkHits.eps"); - c1->SaveAs("zGoldenDauNofTrkHits.gif"); - // c1->SaveAs("zGoldenDauNofTrkHits.pdf"); - - // TCut Ncut("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ( zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>10 && zGoldenDau1NofPixelHits>0 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - // evalEff("zGoldenDau1NofStripHits +zGoldenDau1NofPixelHits ", "zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits", cut_zGolden, Ncut, 40, -0.5, 39.5); - - evalEff("zGoldenDau1NofStripHits +zGoldenDau1NofPixelHits ", "zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits", massCut + kin_common , massCut + kin_common + "(zGoldenDau1NofStripHits +zGoldenDau1NofPixelHits) > 10 && (zGoldenDau2NofStripHits +zGoldenDau2NofPixelHits)>10 " , 40, -0.5, 39.5); - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauPhi.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauPhi.C deleted file mode 100644 index 9fc2282c4b8d0..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauPhi.C +++ /dev/null @@ -1,23 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenDauPhi() { - - - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 0 && zGoldenDau2Pt>0 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits )>9 && zGoldenDau1NofPixelHits>0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits) >9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - - - - makePlots("zGoldenDau1Phi", "zGoldenDau2Phi", massCut + kin_common + ( ( dau1Loose && dau2TightWP1_hltAlso ) || ( dau2Loose && dau1TightWP1_hltAlso )), 1, "zGoldenDauPhi", 0.001, 20, -3.1415 , +3.1415 , true, false); - hs->GetXaxis()->SetTitle("#phi_{#mu}"); - string yTag = "events/(20/6.28)"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenDauPhi.eps"); - c1->SaveAs("zGoldenDauPhi.gif"); - // c1->SaveAs("zGoldenDauPt.pdf"); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauPt.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauPt.C deleted file mode 100644 index c315c6a7a767c..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauPt.C +++ /dev/null @@ -1,23 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenDauPt() { - - - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 0 && zGoldenDau2Pt>0 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits )>9 && zGoldenDau1NofPixelHits>0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits) >9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - TCut kin_common_woPt("zGoldenDau1Iso03SumPt< 3.0 && zGoldenDau2Iso03SumPt < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 "); - - - - makePlots("zGoldenDau1Pt", "zGoldenDau2Pt", massCut + kin_common_woPt + ( ( dau1Loose && dau2TightWP1_hltAlso ) || ( dau2Loose && dau1TightWP1_hltAlso )), 2, "zGoldenDauPt", 0.01, 100, 0 ,100, true); - hs->GetXaxis()->SetTitle("p_{T #mu} (GeV/c)"); - string yTag = "events/(5 GeV/c)"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenDauPt.eps"); - c1->SaveAs("zGoldenDauPtLin_r2.gif"); - c1->SaveAs("zGoldenDauPt.pdf"); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauTrkIso.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauTrkIso.C deleted file mode 100644 index 01fb471208d14..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenDauTrkIso.C +++ /dev/null @@ -1,23 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenDauTrkIso() { - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3000.0 && zGoldenDau1TrkIso < 3000.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ( zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>9 && zGoldenDau1NofPixelHits>0 && ( zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - -TCut kin_common_woIso("zGoldenDau1Pt>20 && zGoldenDau2Pt>20 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 "); - - - - makePlots("zGoldenDau1Iso03SumPt", "zGoldenDau2Iso03SumPt", massCut + kin_common_woIso + ( ( dau1Loose && dau2TightWP1_hltAlso) || ( dau2Loose && dau1TightWP1_hltAlso )) , 1, "zGoldenDauTrkIso", 0.01, 25, 0 ,5, true, false); - hs->GetXaxis()->SetTitle("#sum pt [GeV] (tracker)"); - string yTag = "events/ .2 GeV "; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - hs->GetYaxis()->SetTitleOffset(1.2); - c1->SaveAs("zGoldenDauTrkIso.eps"); - c1->SaveAs("zGoldenDauTrkIso.gif"); - // c1->SaveAs("zGoldenDauTrkIso.pdf"); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenIsTrackerMuon.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenIsTrackerMuon.C deleted file mode 100644 index bc66468106714..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenIsTrackerMuon.C +++ /dev/null @@ -1,27 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenIsTrackerMuon() { - - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>9 && zGoldenDau1NofPixelHits>0 && ( zGoldenDau2NofStripHits +zGoldenDau2NofPixelHits )>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - makePlots("zGoldenDau1TrackerMuonBit", "zGoldenDau2TrackerMuonBit",massCut + kin_common , 1, "IsTrackerMuon", 0.1, 3, -0.5 ,2.5, true); - - hs->GetXaxis()->SetTitle("IsTrackerMuon"); - string yTag = "events"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("IsTrackerMuon.eps"); - c1->SaveAs("IsTrackerMuon.gif"); - //c1->SaveAs("IsTrackerMuon.pdf"); - - //TCut Ncut("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>9 && zGoldenDau1NofPixelHits>0 && ( zGoldenDau2NofStripHits +zGoldenDau2NofPixelHits )>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit ==1 && zGoldenDau2TrackerMuonBit ==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - //evalEff("zGoldenDau1TrackerMuonBit", "zGoldenDau2TrackerMuonBit", cut_zGolden, Ncut, 100, -0.5, 99.5); - -} - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenPt.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenPt.C deleted file mode 100644 index 599e44fa9fc3b..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenPt.C +++ /dev/null @@ -1,18 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zGoldenPt() { - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>9 && zGoldenDau1NofPixelHits>0 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits )>9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - makePlots("zGoldenPt", "", massCut + kin_common + ( ( dau1Loose && dau2TightWP1_hltAlso ) || ( dau2Loose && dau1TightWP1_hltAlso )), 5, "zGoldenPt", 0.001, 120, 0 ,120, true, false); - hs->GetXaxis()->SetTitle("p_{T #mu^{+} #mu^{-}} [GeV]"); - string yTag = "events/ 5 GeV"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenPt.eps"); - c1->SaveAs("zGoldenPt.gif"); - -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenY.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenY.C deleted file mode 100644 index 056c661716987..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zGoldenY.C +++ /dev/null @@ -1,19 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - - -void stack_zGoldenY() { - //TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>9 && zGoldenDau1NofPixelHits>0 && (zGoldenDau2NofStripHits +zGoldenDau2NofPixelHits ) >9 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) "); - - makePlots("zGoldenY", "", massCut + kin_common + ( ( dau1Loose && dau2TightWP1_hltAlso ) || ( dau2Loose && dau1TightWP1_hltAlso )), 1, "zGoldenY", 0.001, 31, -3 ,3.2, true, false); - hs->GetXaxis()->SetTitle("y_{#mu^{+} #mu^{-}}"); - string yTag = "events/ 0.2"; // use the correct rebin - hs->GetYaxis()->SetTitle(yTag.c_str()); - c1->SaveAs("zGoldenY.eps"); - c1->SaveAs("zGoldenY.gif"); - c1->SaveAs("zGoldenY.pdf"); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zMuSta.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zMuSta.C deleted file mode 100644 index 11114f541e244..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zMuSta.C +++ /dev/null @@ -1,38 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zMuSta() { - - /// cuts common.... - TCut kin_common("zMuStaDau1Pt> 20 && zMuStaDau2Pt>20 && zMuStaDau1Iso03SumPt<3.0 && zMuStaDau2Iso03SumPt < 3.0 && abs(zMuStaDau1Eta)<2.1 && abs(zMuStaDau2Eta)<2.1 && (zMuStaDau1HLTBit==1 || zMuStaDau2HLTBit==1) && ( ( zMuStaDau1GlobalMuonBit==1 && abs(zMuStaDau1dxyFromBS)<0.2 ) || ( zMuStaDau2GlobalMuonBit==1 && abs(zMuStaDau2dxyFromBS)<0.2 ))"); - - - - - - TCut dau1Loose("zMuStaDau1GlobalMuonBit==0 && zMuStaDau1SaChi2<10 && zMuStaDau1SaNofMuonHits>0 && zMuStaDau1NofMuMatches>1"); - TCut dau2Loose("zMuStaDau1GlobalMuonBit==0 && zMuStaDau2SaChi2<10 && zMuStaDau2SaNofMuonHits>0 && zMuStaDau2NofMuMatches>1"); - - TCut dau1TightWP2_hltAlso("zMuStaDau1GlobalMuonBit==1 && zMuStaDau1Chi2<10 && (zMuStaDau1NofStripHits + zMuStaDau1NofPixelHits)>10 && zMuStaDau1NofMuonHits>0 && zMuStaDau1NofMuMatches>1 && zMuStaDau1TrackerMuonBit==1 && zMuStaDau1HLTBit==1"); - TCut dau2TightWP2_hltAlso("zMuStaDau2GlobalMuonBit==1 && zMuStaDau2Chi2<10 && (zMuStaDau2NofStripHits + zMuStaDau2NofPixelHits)>10 && zMuStaDau2NofMuonHits>0 && zMuStaDau2NofMuMatches>1 && zMuStaDau2TrackerMuonBit==1 && zMuStaDau2HLTBit==1"); - - - TCut massCut("zMuStaMass>60 && zMuStaMass<120 "); - - - - - makePlots("zMuStaMass", "", kin_common + (( dau1TightWP2_hltAlso && dau2Loose ) || (dau2TightWP2_hltAlso + dau1Loose)), 5, "zMuSta", 0.0001, 200, 0 ,200, true, true); - - // makePlots("zMuStaMass", "", kin_common + dau1TightWP1_hltAlso , 5, "zMuSta", 0.001, 200, 0 ,200, true); - - //makePlots("zMuStaMass", "", kin_common, 5, "zMuSta", 0.001, 200, 0 ,200, true); - - -} - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zMuTrk.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zMuTrk.C deleted file mode 100644 index fdcae659be68a..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zMuTrk.C +++ /dev/null @@ -1,37 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zMuTrk() { - - /// cuts common.... - TCut kin_common("zMuTrkDau1Pt>20 && zMuTrkDau2Pt>20 && zMuTrkDau1TrkIso<3.0 && zMuTrkDau2TrkIso<3.0 && abs(zMuTrkDau1Eta)<2.1 && abs(zMuTrkDau2Eta)<2.1 && (zMuTrkDau1HLTBit==1) && abs(zMuTrkDau1dxyFromBS)<0.2 && abs(zMuTrkDau2dxyFromBS)<0.2"); - - - - - - - TCut dau2Loose("zMuTrkDau2TrkChi2<10 && (zMuTrkDau2TrkNofStripHits + zMuTrkDau2TrkNofPixelHits)>10 && zMuTrkDau2TrkNofPixelHits > 0"); - - TCut dau1TightWP2_hltAlso("zMuTrkDau1GlobalMuonBit==1 && zMuTrkDau1Chi2<10 && (zMuTrkDau1NofStripHits + zMuTrkDau1NofPixelHits)>10 && zMuTrkDau1NofMuonHits>0 && zMuTrkDau1NofMuMatches>1 && zMuTrkDau1TrackerMuonBit==1 && zMuTrkDau1HLTBit==1"); - - - - TCut massCut("zMuTrkMass>60 && zMuTrkMass<120 "); - - - - - makePlots("zMuTrkMass", "", kin_common + dau1TightWP2_hltAlso + dau2Loose, 5 , "zMuTrk" , 0.0001, 200, 0 ,200, true); - - makePlots("zMuTrkMass", "", kin_common , 5 , "zMuTrk" , 0.0001, 200, 0 ,200, true, true); - - - -} - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zMuTrkMu.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zMuTrkMu.C deleted file mode 100644 index eacd7c6273d3b..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zMuTrkMu.C +++ /dev/null @@ -1,38 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zMuTrkMu() { - - /// cuts common.... - TCut kin_common("zMuTrkMuDau1Pt> 20 && zMuTrkMuDau2Pt>20 && zMuTrkMuDau1Iso03SumPt<3.0 && zMuTrkMuDau2Iso03SumPt < 3.0 && abs(zMuTrkMuDau1Eta)<2.4 && abs(zMuTrkMuDau2Eta)<2.4 && (zMuTrkMuDau1HLTBit==1 || zMuTrkMuDau2HLTBit==1) && abs(zMuTrkMuDau1dxyFromBS)<0.2 && abs(zMuTrkMuDau2dxyFromBS)<0.2"); - - - - - - TCut dau1Loose("zMuTrkMuDau1GlobalMuonBit==0 && zMuTrkMuDau1TrkChi2<10 && (zMuTrkMuDau1TrkNofStripHits + zMuTrkMuDau1TrkNofPixelHits)>10 && zMuTrkMuDau1TrkNofPixelHits > 0"); - TCut dau2Loose("zMuTrkMuDau2GlobalMuonBit==0 && zMuTrkMuDau2TrkChi2<10 && (zMuTrkMuDau2TrkNofStripHits + zMuTrkMuDau2TrkNofPixelHits)>10 && zMuTrkMuDau2TrkNofPixelHits > 0"); - - TCut dau1TightWP2_hltAlso("zMuTrkMuDau1GlobalMuonBit==1 && zMuTrkMuDau1Chi2<10 && (zMuTrkMuDau1NofStripHits + zMuTrkMuDau1NofPixelHits)>10 && zMuTrkMuDau1NofMuonHits>0 && zMuTrkMuDau1NofMuMatches>1 && zMuTrkMuDau1TrackerMuonBit==1 && zMuTrkMuDau1HLTBit==1"); - TCut dau2TightWP2_hltAlso("zMuTrkMuDau2GlobalMuonBit==1 && zMuTrkMuDau2Chi2<10 && (zMuTrkMuDau2NofStripHits + zMuTrkMuDau2NofPixelHits)>10 && zMuTrkMuDau2NofMuonHits>0 && zMuTrkMuDau2NofMuMatches>1 && zMuTrkMuDau2TrackerMuonBit==1 && zMuTrkMuDau2HLTBit==1"); - - - TCut massCut("zMuTrkMuMass>60 && zMuTrkMuMass<120 "); - - - - - makePlots("zMuTrkMuMass", "", kin_common + (( dau1TightWP2_hltAlso && dau2Loose ) || (dau2TightWP2_hltAlso + dau1Loose)), 5, "zMuTrkMu", 0.0001, 200, 0 ,200, true, true); - - // makePlots("zMuTrkMuMass", "", kin_common + dau1TightWP1_hltAlso , 5, "zMuTrkMu", 0.001, 200, 0 ,200, true); - - //makePlots("zMuTrkMuMass", "", kin_common, 5, "zMuTrkMu", 0.001, 200, 0 ,200, true); - - -} - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zNotIso.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zNotIso.C deleted file mode 100644 index 490a1f0294079..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zNotIso.C +++ /dev/null @@ -1,21 +0,0 @@ -// stack macro -// Pasquale Noli - -#include -#include -#include "stack_common.h" - -void stack_zNotIso() { - - -TCut kin_commonButIso("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && (zGoldenDau1Iso03SumPt> 3.0 || zGoldenDau2Iso03SumPt >3.0) && abs(zGoldenDau1Eta)<2.4 && abs(zGoldenDau2Eta)<2.4 && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 "); - - - makePlots("zGoldenMass", "", kin_commonButIso + ( ( dau1Loose && dau2TightWP1_hltAlso ) || ( dau2Loose && dau1TightWP1_hltAlso )) , 5, "zNotIso", 0.001, 200, 0 ,200, true, true); - - - - -} - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmSta.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmSta.C deleted file mode 100644 index f7f24a976c883..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmSta.C +++ /dev/null @@ -1,12 +0,0 @@ -// stack macro -// Pasquale Noli -#include -#include -#include "stack_common.h" - - -void stack_zmSta() { - makePlots("goodZToMuMuOneStandAloneMuonPlots/zMass", 5, "zmSta", - 0.0001); -} - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmTrk.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmTrk.C deleted file mode 100644 index 5beb120212269..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmTrk.C +++ /dev/null @@ -1,10 +0,0 @@ -// stack macro -// Pasquale Noli -#include -#include -#include "stack_common.h" - -void stack_zmTrk() { - makePlots("goodZToMuMuOneTrackPlots/zMass", 5, "zmTrk", - 0.0001, true); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmTrkMu.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmTrkMu.C deleted file mode 100644 index 93ee28061fadc..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmTrkMu.C +++ /dev/null @@ -1,10 +0,0 @@ -// stack macro -// Pasquale Noli -#include -#include -#include "stack_common.h" - -void stack_zmTrkMu() { - makePlots("goodZToMuMuOneTrackerMuonPlots/zMass", 5, "zmTrkMu", - 0.0001); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmm0neLess2p4.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmm0neLess2p4.C deleted file mode 100644 index 45f2966ff85fb..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmm0neLess2p4.C +++ /dev/null @@ -1,9 +0,0 @@ -// stack macro -// Pasquale Noli -#include -#include -#include "stack_common.h" - -void stack_zmm0neLess2p4() { - makePlots("goodZToMuMuOnlyOneMuonWithEtaLessThan2p11HLTPlots/zMass", 1, "zmm1hltEta24", 0.0001); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmm1hlt.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmm1hlt.C deleted file mode 100644 index 2c46d315e1538..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmm1hlt.C +++ /dev/null @@ -1,15 +0,0 @@ -// stack macro -// Pasquale Noli -#include -#include -#include "stack_common.h" - -void stack_zmm1hlt() { - - -TCut cut_zGolden("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso03SumPt< 3.0 && zGoldenDau2Iso03SumPt < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ( zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>10 && zGoldenDau1NofPixelHits>0 && (zGoldenDau2NofStripHits+ zGoldenDau2NofPixelHits)>10 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==0 || zGoldenDau2HLTBit==0) "); - - makePlots("zGoldenMass", "", cut_zGolden, 5, "zGolden1hlt", 0.001, 200, 0 ,200, true, false); -} - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmm1hltAB.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmm1hltAB.C deleted file mode 100644 index 27cdf1c8868e7..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmm1hltAB.C +++ /dev/null @@ -1,15 +0,0 @@ -// stack macro -// Pasquale Noli -#include -#include -#include "stack_common.h" - -void stack_zmm1hltAB() { - - -TCut cut_zGolden("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau1TrkIso < 3.0 && ( abs(zGoldenDau1Eta)>2.1 || abs(zGoldenDau2Eta)>2.1 ) && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 && (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==0 || zGoldenDau2HLTBit==0) "); - - makePlots("zGoldenMass", cut_zGolden, 5, "zGolden1hltAB", 0.001, 200, 0 ,200, true); -} - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmm2hlt.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmm2hlt.C deleted file mode 100644 index e89cfe1686835..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmm2hlt.C +++ /dev/null @@ -1,18 +0,0 @@ - - - -// stack macro -// Pasquale Noli -#include -#include -#include "stack_common.h" - -void stack_zmm2hlt() { - - -TCut cut_zGolden("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1Iso03SumPt< 3.0 && zGoldenDau2Iso03SumPt < 3.0 && abs(zGoldenDau1Eta)<2.1 && abs(zGoldenDau2Eta)<2.1 && zGoldenDau1Chi2<10 && zGoldenDau2Chi2<10 && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 &&( zGoldenDau1NofStripHits +zGoldenDau1NofPixelHits ) >10 && zGoldenDau1NofPixelHits>0 && ( zGoldenDau2NofStripHits +zGoldenDau2NofPixelHits ) >10 && zGoldenDau2NofPixelHits>0 && zGoldenDau1NofMuonHits>0 && zGoldenDau2NofMuonHits>0 && zGoldenDau1NofMuMatches>1 && zGoldenDau2NofMuMatches>1 && zGoldenDau1TrackerMuonBit==1 && zGoldenDau2TrackerMuonBit==1 && (zGoldenDau1HLTBit==1 && zGoldenDau2HLTBit==1) "); - - makePlots("zGoldenMass", "", cut_zGolden, 5, "zGolden2hlt", 0.001, 200, 0 ,200, true, false); -} - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmmNotIso.C b/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmmNotIso.C deleted file mode 100644 index bb6bdfbdf2d5b..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/stackPlots/stack_zmmNotIso.C +++ /dev/null @@ -1,10 +0,0 @@ -// stack macro -// Pasquale Noli -#include -#include -#include "stack_common.h" - -void stack_zmmNotIso() { - makePlots("nonIsolatedZToMuMuPlots/zMass", 5, "zmmNotIso", - 0.0001); -} diff --git a/ElectroWeakAnalysis/ZMuMu/test/triggerEfficiency.py b/ElectroWeakAnalysis/ZMuMu/test/triggerEfficiency.py deleted file mode 100644 index 47d92b4fc3a40..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/triggerEfficiency.py +++ /dev/null @@ -1,81 +0,0 @@ -# il file di iuput /tmp/noli/dimuons_allevt.root su lxplus204 - -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("Lavezzi") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) - ) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - "file:dimuons_allevt.root" - # "file:dimuons_1000evt.root" - - ) -) - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("TriggerEfficiencyStudy.root") -) - - -zSelection = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2 & abs(daughter(1).eta)<2 & mass > 20 & mass < 200"), - isoCut = cms.double(3.0), - muonIsolations1 = cms.InputTag("muonIsolations"), - muonIsolations2 = cms.InputTag("muonIsolations") -) - - -process.goodZToMuMu = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - - -process.testAnalyzer = cms.EDAnalyzer( - "testAnalyzer", - selectMuon = cms.InputTag("selectedLayer1MuonsTriggerMatch"), - ZMuMu = cms.InputTag("goodZToMuMu"), - pathName = cms.string("HLT_Mu9"), - EtaBins = cms.int32(40), - minEta = cms.double(-2.), - maxEta = cms.double(2.), - PtBins = cms.int32(10), - minPt = cms.double(20.), - maxPt = cms.double(100.), - EtaPt80Bins = cms.int32(10) - ) - - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - - - - -process.path = cms.Path ( - process.goodZToMuMu + - process.testAnalyzer -) - - - -process.endPath = cms.EndPath( - process.eventInfo -) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/zChi2Fit.txt b/ElectroWeakAnalysis/ZMuMu/test/zChi2Fit.txt deleted file mode 100644 index bcdd1ca0bff97..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/zChi2Fit.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# Z -> Mu Mu fit -# -# name value error min max free/fixed (optional) -#------------------------------------------------------------------------------ -par YieldZMuMu 1000 10 0 1000000 free -par YieldBkgZMuTk 1 10 0 1000000 fixed -par YieldBkgZMuSa 1 1 0 1000000 fixed -par YieldBkgZMuMuNotIso 1 10 0 1000000 fixed -par EfficiencyTk 0.98 0.01 0 1 free -par EfficiencySa 0.98 0.01 0 1 free -par EfficiencyIso 0.98 0.01 0 1 free -par EfficiencyHLT 0.88 0.01 0 1 free -par Lambda -0. 0.001 -100 100 free -par Alpha -0. 0.001 -100 100 free -par Beta -0. 0.001 -100 100 free -par A0 1 0.1 0 1000 free -par A1 0 0.001 -10000 10000 free -par A2 0 0.0001 -1000 1000 fixed -par B0 1 0.1 0 1000 free -par B1 0 0.001 -10000 10000 free -par B2 0 1 -1000 1000 fixed -par C0 1 0.001 0 1000 free -par C1 0 0.0001 -10000 10000 fixed -par C2 0 1 -1000 1000 fixed -migrad -print_all diff --git a/ElectroWeakAnalysis/ZMuMu/test/zFitToyMc.txt b/ElectroWeakAnalysis/ZMuMu/test/zFitToyMc.txt deleted file mode 100644 index 6c1d3891bda95..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/zFitToyMc.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# Z -> Mu Mu fit -# -# name value error min max free/fixed (optional) -#------------------------------------------------------------------------------ -par YieldZMuMu 600000 10 0 1000000 free -par YieldBkgZMuTk 1 10 0 1000000 fixed -par YieldBkgZMuSa 0 1 0 1000000 fixed -par YieldBkgZMuMuNotIso 1 10 0 1000000 fixed -par EfficiencyTk 0.9985 0.001 0 1 free -par EfficiencySa 0.988525 0.01 0 1 free -par EfficiencyIso 0.98186 0.01 0 1 free -par EfficiencyHLT 0.913146 0.01 0 1 free -par Lambda -0.01244 0.009 -100 0 free -par Alpha -0.036 0.01 -100 0 free -par Beta 0.0 0.01 -100 0 fixed -par A0 0 0.1 0 2 free -par A1 3 0.001 -10000 10000 free -par A2 -0.01 0.0001 -1000 1000 free -par B0 1 0.1 0 2 free -par B1 6.0 0.001 -10000 10000 free -par B2 0.0 1 -1000 1000 free -migrad -print_all - - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/zLONLO.py b/ElectroWeakAnalysis/ZMuMu/test/zLONLO.py deleted file mode 100644 index 1ed0cc1349784..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/zLONLO.py +++ /dev/null @@ -1,67 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("zlonlo") -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( -## 'rfio:/castor/cern.ch/user/d/degrutto/MCatNLOzToMuMum20/dimuons_1.root', -## 'rfio:/castor/cern.ch/user/d/degrutto/MCatNLOzToMuMum20/dimuons_2.root', -## 'rfio:/castor/cern.ch/user/d/degrutto/MCatNLOzToMuMum20/dimuons_3.root' - - 'rfio:/castor/cern.ch/user/d/degrutto/zToMuMum20v2/dimuons_1.root', - 'rfio:/castor/cern.ch/user/d/degrutto/zToMuMum20v2/dimuons_2.root', - 'rfio:/castor/cern.ch/user/d/degrutto/zToMuMum20v2/dimuons_3.root' - - ) - ) - - -process.evtInfo = cms.OutputModule("AsciiOutputModule") - - -process.TFileService = cms.Service("TFileService", - fileName = cms.string('ZLO_10pb.root') -) - - - -process.zHistos = cms.EDAnalyzer("ZLONLOHistogrammer", - RecZ = cms.InputTag("dimuons"), - genParticles = cms.InputTag("genParticles"), - weights = cms.InputTag("genEventWeight"), - nbinsMass=cms.untracked.uint32(200), - nbinsPt=cms.untracked.uint32(200), - nbinsAng=cms.untracked.uint32(200), - massMax = cms.untracked.double(200.), - ptMax= cms.untracked.double(200.), - angMax = cms.untracked.double(6.), - #parameter for the geometric acceptance - accPtMin = cms.untracked.double(0.0), - accMassMin = cms.untracked.double(40.0), - accMassMax = cms.untracked.double(12000.0), - accEtaMin = cms.untracked.double(0.0), - accEtaMax = cms.untracked.double(2.5), - isMCatNLO= cms.untracked.bool(False) - -) - - - - - - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - - - -process.maxEvents = cms.untracked.PSet( - input =cms.untracked.int32(19440) -) - -process.path=cms.Path(process.zHistos) - -process.end = cms.EndPath(process.evtInfo ) - - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/zMuMuIsolationAnalysis.py b/ElectroWeakAnalysis/ZMuMu/test/zMuMuIsolationAnalysis.py deleted file mode 100644 index f759daf1a17d9..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/zMuMuIsolationAnalysis.py +++ /dev/null @@ -1,142 +0,0 @@ -from __future__ import print_function -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("ZMuMuIsolationAnalysis") - -process.TFileService=cms.Service( - "TFileService", - fileName=cms.string("Prova_W_Isolamento.root") - ) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) - ) - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) - ) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - - # "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/zmm/zmumu_reskim_1.root", - # "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/zmm/zmumu_reskim_2.root", - # "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/zmm/zmumu_reskim_2.root", - -# "file:/scratch1/cms/data/summer08/skim/dimuons_skim_zmumu.root", - "file:/scratch1/cms/data/summer08/skim/dimuons_skim_wmunu.root" - - # "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/qcd/noli/InclusiveMuPt15/InclusiveMuPt15SubSkim/d85f8e8eea12813d6b1603f1ce4b0f84/qcd_reskim_4.root", - # "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/qcd/noli/InclusiveMuPt15/InclusiveMuPt15SubSkim/d85f8e8eea12813d6b1603f1ce4b0f84/qcd_reskim_5.root", - # "rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/qcd/noli/InclusiveMuPt15/InclusiveMuPt15SubSkim/d85f8e8eea12813d6b1603f1ce4b0f84/qcd_reskim_6.root" - ) - ) - -process.zmumuNewIsolation = cms.EDAnalyzer( - "ZMuMuIsolationAnalyzer", - src = cms.InputTag("dimuonsOneTrack"), - ptThreshold = cms.untracked.double(1), - etEcalThreshold = cms.untracked.double(0.2), - etHcalThreshold = cms.untracked.double(0.5), - deltaRTrk = cms.untracked.double(0.2), - deltaREcal = cms.untracked.double(0.25), - deltaRHcal = cms.untracked.double(0.25), - veto = cms.untracked.double(0.015), - alpha = cms.untracked.double(0.75), - beta = cms.untracked.double(-0.75), - pt = cms.untracked.double(20), - eta = cms.untracked.double(2), - isoCut = cms.untracked.double(1.7) - ) - -cut = [0.4,0.6,0.8,1.0,1.2] - -for i in range(len(cut)): - ptThreshold = cut[i] - print(i, ") cut = ", ptThreshold) - - plotModuleLabel = "isoPlots_ptTkr_" + str(i); - module = copy.deepcopy(process.zmumuNewIsolation) - setattr(module, "ptThreshold", ptThreshold) - setattr(process, plotModuleLabel, module) - - plotPathLabel = "isoPath_ptTkr_" + str(i); - path = cms.Path(module); - setattr(process, plotPathLabel, path) - - -ecal_cut = [0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.] - -for i in range(len(ecal_cut)): - etEcalThreshold = ecal_cut[i] - print(i, ") cut = ", etEcalThreshold) - - plotModuleLabel = "isoPlots_etEcal_" + str(i); - module = copy.deepcopy(process.zmumuNewIsolation) - setattr(module, "etEcalThreshold", etEcalThreshold) - setattr(process, plotModuleLabel, module) - - plotPathLabel = "isoPath_etEcal_" + str(i); - path = cms.Path(module); - setattr(process, plotPathLabel, path) - - -hcal_cut = [0.5,0.6,0.7,0.8,0.9,1.] - -for i in range(len(hcal_cut)): - etHcalThreshold = hcal_cut[i] - print(i, ") cut = ", etHcalThreshold) - - plotModuleLabel = "isoPlots_etHcal_" + str(i); - module = copy.deepcopy(process.zmumuNewIsolation) - setattr(module, "etHcalThreshold", etHcalThreshold) - setattr(process, plotModuleLabel, module) - - plotPathLabel = "isoPath_etHcal_" + str(i); - path = cms.Path(module); - setattr(process, plotPathLabel, path) - - -deltaR_ = [0.05,0.10,0.15,0.18,0.20,0.25,0.30,0.35] - -for i in range(len(deltaR_)): - deltaRTrk = deltaR_[i] - deltaREcal = deltaR_[i] - deltaRHcal = deltaR_[i] - - print(i, ") deltaR = ", deltaRTrk) - - plotModuleLabel = "isoPlots_DR_" + str(i); - module = copy.deepcopy(process.zmumuNewIsolation) - setattr(module, "deltaRTrk", deltaRTrk) - setattr(module, "deltaREcal", deltaREcal) - setattr(module, "deltaRHcal", deltaRHcal) - setattr(process, plotModuleLabel, module) - - plotPathLabel = "isoPath_DR_" + str(i); - path = cms.Path(module); - setattr(process, plotPathLabel, path) - - -alpha_array = [0.0,0.25,0.5,0.75,1.0] -beta_array = [-1.0,-0.75,-0.5,-0.25,0,0.25,0.5,0.75,1.0] - -for i in range(len(alpha_array)): - alpha = alpha_array[i] - print(i, ") alpha = ", alpha) - - for j in range(len(beta_array)): - beta = beta_array[j] - print(i,".", j, ") beta = ", beta) - - plotModuleLabel = "isoPlots_LinearComb_" + str(i)+"_" + str(j); - module = copy.deepcopy(process.zmumuNewIsolation) - setattr(module, "alpha", alpha) - setattr(module, "beta", beta) - setattr(process, plotModuleLabel, module) - - plotPathLabel = "isoPath_LineareComb_" + str(i) +"_"+ str(j); - path = cms.Path(module); - setattr(process, plotPathLabel, path) diff --git a/ElectroWeakAnalysis/ZMuMu/test/zMuMuRooFit.txt b/ElectroWeakAnalysis/ZMuMu/test/zMuMuRooFit.txt deleted file mode 100644 index cc913f0a9a03f..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/zMuMuRooFit.txt +++ /dev/null @@ -1,22 +0,0 @@ -#"InitValue L (lo - hi) B(nBins)" for variable param. "Value C" for constant param. ORDER: Yield - nbkg_mutrk - nbkg_mumuNotIso - nbk_musa - eff_tk - eff_sa - eff_iso - eff_hlt - alpha - a0 - a1 - a2 - beta - b0 - b1 - b2 - gamma - c0 - c1## Default Yield value for signal and background at 45 pb-1, rescaled for tiy at the setted luminosity -30000 L (0 - 10000000) B(1000) -0 L (0 - 10000) B (100) -0 L (0 - 10000) B (100) -0 L (0 - 100) B (100) -0.99 L (0.001 - 1.0) B(100) -0.9 L (0.001 - 1.0) B(100) -0.9 L (0.001 - 1.0) B(100) -0.9 L (0.001 - 1.0) B(100) -0.0 L (-1. - 1.) B(200) -1 C -0 L (-100. - 100) B(200) -0 C -0.0 L (-1. - 1.) B(200) -1 C -0 L (-100. - 100) B(200) -0 C --0.01 L (-1. - 1.) B(200) -1 C -0 L (-100. - 100) B(200) -###### -PLEASE DO NOT ADD NEW LINES AND RESPECT THE ORDER diff --git a/ElectroWeakAnalysis/ZMuMu/test/zPdfUnc.py b/ElectroWeakAnalysis/ZMuMu/test/zPdfUnc.py deleted file mode 100644 index de15be1cac6db..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/zPdfUnc.py +++ /dev/null @@ -1,127 +0,0 @@ -from __future__ import print_function -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("zpdfsys") - -process.maxEvents = cms.untracked.PSet( - #input = cms.untracked.int32(-1) - input = cms.untracked.int32(-1) -) - - -## process.source = cms.Source("PoolSource", -## debugVerbosity = cms.untracked.uint32(0), -## debugFlag = cms.untracked.bool(False), -## fileNames = cms.untracked.vstring() -## ) -## import os -## dirname = "/scratch1/cms/data/summer08/Zmumu_M20/" -## dirlist = os.listdir(dirname) -## basenamelist = os.listdir(dirname + "/") -## for basename in basenamelist: -## process.source.fileNames.append("file:" + dirname + "/" + basename) -## print "Number of files to process is %s" % (len(process.source.fileNames)) - - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:genParticlePlusCteq65AndMRST06NNLOAndMSTW2007LOmodWeigths.root', -) -) -process.evtInfo = cms.OutputModule("AsciiOutputModule") - - -process.TFileService = cms.Service("TFileService", - fileName = cms.string('cteq65AndMST06NLOABDMSTW2007lomod.root') -) - - -#for i in range(41): -# proc = "process.zpdf" + str(i) - # print "proc", proc -process.zpf = cms.EDAnalyzer("zPdfUnc", - genParticles = cms.InputTag("genParticles"), - pdfweights = cms.InputTag("pdfWeights:xxxxx"), - pdfmember = cms.untracked.uint32(0), - nbinsMass=cms.untracked.uint32(200), - nbinsPt=cms.untracked.uint32(200), - nbinsAng=cms.untracked.uint32(200), - massMax = cms.untracked.double(200.), - ptMax= cms.untracked.double(200.), - angMax = cms.untracked.double(6.), - #parameter for the geometric acceptance (numerator) - accPtMin = cms.untracked.double(20.0), - accMassMin = cms.untracked.double(60.0), - accMassMax = cms.untracked.double(120.0), - accEtaMin = cms.untracked.double(0.0), - accEtaMax = cms.untracked.double(2.1), - # for denominator - accMassMinDenominator=cms.untracked.double(40.0), - isMCatNLO= cms.untracked.bool(False), - outfilename= cms.untracked.string("xxxxx.txt") - ) - -pdf_1 = "cteq65" -pdf_2 = "MRST2006nnlo" -pdf_3= "MRST2007lomod" - - - -### cteq65 has 1 + 2*20 members ### -for i in range(41): - module = copy.deepcopy(process.zpf) - setattr(module, "pdfweights", "pdfWeights:cteq65") - setattr(module, "pdfmember", i) - setattr(module, "outfilename", "cteq65.txt") - moduleLabel = module.label() + pdf_1+ "_" + str(i) - setattr(process, moduleLabel, module) - if i == 0: - seq = module - else: - seq = seq + module - -### MRST2006nnlo has 1 + 2*30 members ### -for j in range(61): - module = copy.deepcopy(process.zpf) - setattr(module, "pdfweights", "pdfWeights:MRST2006nnlo") - setattr(module, "pdfmember", j) - setattr(module, "outfilename", "MRST2006nnlo.txt") - moduleLabel = module.label() + pdf_2+ "_" + str(j) - setattr(process, moduleLabel, module) - # needed only if the sequence is filled for the first time - # if j == 0: - # seq_2 = module - # else: - seq = seq + module - -### MRST2007lomod has 1 member ### -for k in range(1): - module = copy.deepcopy(process.zpf) - setattr(module, "pdfweights", "pdfWeights:MRST2007lomod") - setattr(module, "pdfmember", k) - setattr(module, "outfilename", "MRST2007lomod.txt") - moduleLabel = module.label() + pdf_3+ "_" + str(k) - setattr(process, moduleLabel, module) - # needed only if the sequence is filled for the first time - # if k == 0: - # seq_3 = module - # else: - seq = seq + module - - - -print("sequence", seq) - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - - - - -process.path=cms.Path(seq) -process.end = cms.EndPath(process.evtInfo ) - - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/zPtScale.py b/ElectroWeakAnalysis/ZMuMu/test/zPtScale.py deleted file mode 100644 index 0cd253434c895..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/zPtScale.py +++ /dev/null @@ -1,99 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("zptscale") -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( -## 'rfio:/castor/cern.ch/user/d/degrutto/MCatNLOzToMuMum20/dimuons_1.root', -## 'rfio:/castor/cern.ch/user/d/degrutto/MCatNLOzToMuMum20/dimuons_2.root', -## 'rfio:/castor/cern.ch/user/d/degrutto/MCatNLOzToMuMum20/dimuons_3.root' - -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/086FD387-F97F-DF11-89A1-002618943957.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/E2BB3FAB-F27F-DF11-98A9-003048678AE4.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/0CC6A6C5-3C80-DF11-B35E-003048678B92.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/E4D7DBB0-EC7F-DF11-B0EE-00248C0BE016.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/1896BBB8-F97F-DF11-9F2F-001A92971B48.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/E8576675-EC7F-DF11-91DA-002618943856.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/64DB4BB0-F97F-DF11-98C7-002618943926.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/EA9489E6-EB7F-DF11-9875-002354EF3BCE.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/70A33058-2F80-DF11-8EAB-002618943983.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/EC9C1993-EB7F-DF11-9206-00261894391C.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/802A2887-F97F-DF11-855C-002618943886.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/ECD82E7B-F37F-DF11-B775-002618943800.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/AC8B97B2-F97F-DF11-BD20-002618FDA263.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/EE04C8B3-F37F-DF11-9BD1-003048679044.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/BC8AF7A7-F97F-DF11-9F75-003048678FA6.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/EED4B178-F27F-DF11-BE1A-002618943899.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/CEC0C35C-2180-DF11-809E-0018F3D095FA.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/F2A31B46-F27F-DF11-A9BD-002618943860.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/D4A4F191-F27F-DF11-BE80-00261894380B.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/FA0ACF88-EC7F-DF11-85EE-003048678DD6.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/DE2AED38-F27F-DF11-B867-002618943901.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/FE2F8537-9A80-DF11-B80E-0026189438C9.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/E05B3CBB-F27F-DF11-8E2E-002618FDA263.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/FEC277B8-F37F-DF11-A644-00261894380D.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/E0AECCD7-F27F-DF11-9601-002618FDA262.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/FEEFF5AC-F97F-DF11-A5B6-0018F3D09626.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/E0E68C3A-ED7F-DF11-8D04-003048678BE6.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/E224964B-ED7F-DF11-B36B-00261894387E.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/E2549BBA-F37F-DF11-BEA1-00261894382D.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/E289C8C2-F27F-DF11-A41B-0018F3D0965A.root', -'file:/scratch2/users/fabozzi/summer10/zmmPowheg_cteq66/E28AE239-F27F-DF11-9AA3-00261894398A.root', - - - - ) - ) - - -process.evtInfo = cms.OutputModule("AsciiOutputModule") - - -process.TFileService = cms.Service("TFileService", - fileName = cms.string('ZptScale_100K_1xcent.root') -) - - - -process.zHistos = cms.EDAnalyzer("ZMuPtScaleAnalyzer", - genParticles = cms.InputTag("genParticles"), - nbinsMass=cms.untracked.uint32(200), - nbinsPt=cms.untracked.uint32(200), - nbinsAng=cms.untracked.uint32(200), - massMax = cms.untracked.double(200.), - ptMax= cms.untracked.double(200.), - angMax = cms.untracked.double(6.), - #parameter for the geometric acceptance - accPtMin = cms.untracked.double(20.0), - accMassMin = cms.untracked.double(60.0), - accMassMax = cms.untracked.double(120.0), - accMassMinDen = cms.untracked.double(60.0), - accMassMaxDen = cms.untracked.double(120.0), - accEtaMin = cms.untracked.double(0.0), - accEtaMax = cms.untracked.double(2.1), - muPdgStatus = cms.untracked.int32(1), - # scaling of 1% - ptScale = cms.untracked.double(0.006) - -) - - - - - - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - - - -process.maxEvents = cms.untracked.PSet( - input =cms.untracked.int32(-1) -) - -process.path=cms.Path(process.zHistos) - -process.end = cms.EndPath(process.evtInfo ) - - - diff --git a/ElectroWeakAnalysis/ZMuMu/test/zToMuMuAnalysis.py b/ElectroWeakAnalysis/ZMuMu/test/zToMuMuAnalysis.py deleted file mode 100644 index ea9a813615c45..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/zToMuMuAnalysis.py +++ /dev/null @@ -1,892 +0,0 @@ -from __future__ import print_function -#analysis code. -#It produces plot for Fit study -#author Luca Lista -#modificated by Noli Pasquale 21-10-2008 -#modified by Annapaola de Cosa 18-12-2008 -#modified by Michele de Gruttola 08-10-2009 - - - -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("ZToMuMuAnalysis") - -process.load("FWCore.MessageLogger.MessageLogger_cfi") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.maxEvents = cms.untracked.PSet( -# input = cms.untracked.int32(17810) - input = cms.untracked.int32(-1) -) - -process.MessageLogger.cerr.threshold = '' -process.MessageLogger.cerr.FwkReport.reportEvery = 1000 - - - -#process.load("ElectroWeakAnalysis/ZMuMu/OCTSUBSKIM_cff") - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( -"file:/scratch2/users/degruttola/zmm_cteq66/skim/testZMuMuSubskim_oneshot_Test_1_1.root" -#"file:/tmp/degrutto/testZMuMuSubskim_doubleMu3.root", -## 'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/wmn/zMuMuSubskim_1.root', -## 'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/wmn/zMuMuSubskim_2.root', -## 'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/wmn/zMuMuSubskim_3.root', -## 'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/wmn/zMuMuSubskim_4.root', -## 'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/wmn/zMuMuSubskim_5.root', -## 'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/wmn/zMuMuSubskim_6.root', -## 'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/wmn/zMuMuSubskim_7.root', - -#'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/qcd/zMuMuSubskim_1.root', -#'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/qcd/zMuMuSubskim_2.root', -#'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/qcd/zMuMuSubskim_3.root', -#'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/qcd/zMuMuSubskim_5.root', -#'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/qcd/zMuMuSubskim_6.root', -#'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/qcd/zMuMuSubskim_7.root', -#'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/qcd/zMuMuSubskim_8.root', -#'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/qcd/zMuMuSubskim_9.root', -#'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/qcd/zMuMuSubskim_10.root', -#'rfio:/castor/cern.ch/user/d/degrutto/eta2p4/qcd/zMuMuSubskim_11.root', - - -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/zmm/testZMuMuSubSkim_1.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/zmm/testZMuMuSubSkim_2.root", -# "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_1.root", -# "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_2.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_3.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_4.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_5.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_6.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/TTbar/testZMuMuSubSkim_1.root", - - ) -) - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("Analysis_zmmAllWithTrkMuon_2_4.root") -) - -zSelection = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2.1 & abs(daughter(1).eta)<2.1 & mass > 20"), - isoCut = cms.double(3.), - ptThreshold = cms.untracked.double(1.5), - etEcalThreshold = cms.untracked.double(0.2), - etHcalThreshold = cms.untracked.double(0.5), - deltaRVetoTrk = cms.untracked.double(0.015), - deltaRTrk = cms.untracked.double(0.3), - deltaREcal = cms.untracked.double(0.25), - deltaRHcal = cms.untracked.double(0.25), - alpha = cms.untracked.double(0.), - beta = cms.untracked.double(-0.75), - relativeIsolation = cms.bool(False) - -# For standard isolation (I_Tkr<3GeV) choose this configuration: -# isoCut = cms.double(3.), -# ptThreshold = cms.untracked.double(1.5), -# etEcalThreshold = cms.untracked.double(0.2), -# etHcalThreshold = cms.untracked.double(0.5), -# deltaRVetoTrk = cms.untracked.double(0.015), -# deltaRTrk = cms.untracked.double(0.3), -# deltaREcal = cms.untracked.double(0.25), -# deltaRHcal = cms.untracked.double(0.25), -# alpha = cms.untracked.double(0.), -# beta = cms.untracked.double(-0.75), -# relativeIsolation = cms.bool(False) - ) - - -process.goodZToMuMu = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - - - -##### enlarging the eta cut for gaining statistics -### one muon with eta <2.4 - -process.zToMuMuOnlyOneMuonWithEtaLessThan2p1 = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -process.zToMuMuOnlyOneMuonWithEtaLessThan2p1.cut= cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & ((abs(daughter(0).eta)<2.1 & abs(daughter(1).eta)<2.4) | (abs(daughter(0).eta)<2.4 & abs(daughter(1).eta)<2.1)) & mass > 20") - - - - - -### two muon with 2.1< eta < 2.4 -process.zToMuMuTwoMuonWithEtaGreaterThan2p1LessThan2p4 = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -process.zToMuMuTwoMuonWithEtaGreaterThan2p1LessThan2p4.cut= cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & ( (2.1 < abs(daughter(0).eta)<2.4) & (2.1< abs(daughter(1).eta)<2.4)) & mass > 20") - - - - - -process.goodZToMuMuOnlyOneMuonWithEtaLessThan2p1 = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOnlyOneMuonWithEtaLessThan2p1"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - - - -# same charge dimuons.... -process.dimuonsGlobalSameCharge = cms.EDFilter("CandViewRefSelector", - src = cms.InputTag("userDataDimuons"), - cut = cms.string('mass > 20 & daughter(0).isGlobalMuon = 1 & daughter(1).isGlobalMuon = 1') -) - -process.goodZToMuMuSameCharge = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobalSameCharge"), - filter = cms.bool(True) -) -process.goodZToMuMuSameCharge.cut=cms.string("charge!=0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2.1 & abs(daughter(1).eta)<2.1 & mass > 20") - - -#ZMuMu: requiring at least 1 HLT trigger match (for the shape) -process.goodZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - - - -#ZMuMu: requiring 2 HLT trigger match -process.goodZToMuMu2HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("bothMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMu: requiring 1 HLT trigger match -process.goodZToMuMu1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("exactlyOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - - - -process.goodZToMuMuOnlyOneMuonWithEtaLessThan2p11HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOnlyOneMuonWithEtaLessThan2p1"), - condition =cms.string("exactlyOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -process.goodZToMuMuTwoMuonWithEtaGreaterThan2p1LessThan2p42HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("zToMuMuTwoMuonWithEtaGreaterThan2p1LessThan2p4"), - condition =cms.string("bothMatched"), - hltPath = cms.string("HLT_DoubleMu3"), - filter = cms.bool(True) -) - - - - -#ZMuMu:at least one muon is not isolated -process.nonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -#ZMuMu:1 muon is not isolated -process.oneNonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuOneNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("nonIsolatedZToMuMu"), - filter = cms.bool(True) -) - -#ZMuMu: 2 muons are not isolated -process.twoNonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuTwoNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("nonIsolatedZToMuMu"), - filter = cms.bool(True) -) - - - -#ZMuMunotIso: requiring at least 1 trigger -process.nonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("nonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMuOnenotIso: requiring at least 1 trigger -process.oneNonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("oneNonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMuTwonotIso: requiring at least 1 trigger -process.twoNonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("twoNonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - -process.zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - src = cms.InputTag("userDataDimuonsOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneTrack = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneStandAloneMuon = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsOneStandAloneMuon"), - filter = cms.bool(True) -) - -### already into the subskim - -## process.dimuonsOneTrackerMuon = cms.EDFilter("CandViewRefSelector", -## src = cms.InputTag("dimuons"), -## cut = cms.string('charge = 0 & mass > 20 & ( (daughter(0).isTrackerMuon = 1 & daughter(0).isGlobalMuon = 0 & daughter(1).isGlobalMuon = 1) | (daughter(1).isTrackerMuon = 1 & daughter(1).isGlobalMuon = 0 & daughter(0).isGlobalMuon = 1) )') -## ) - - - -## setting the filter to false, the HLT filter will be enable finally.. taht is needed for not losong events when looking at the 2.1 20 & daughter(1).pt > 20 & ((abs(daughter(0).eta)<2.1 & abs(daughter(1).eta)<2.4) | (abs(daughter(0).eta)<2.4 & abs(daughter(1).eta)<2.1)) & mass > 20") - - - - -#ZMuTk:requiring that the GlobalMuon 'First' has HLT match -process.goodZToMuMuOneTrackFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrack"), - condition =cms.string("firstMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneStandAloneMuon"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrackerMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrackerMuon"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(False) -) - -######## requiring non overlap with the 2.1 eta region -process.goodZToMuMuOneTrackerMuonOnlyOneMuonWithEtaLessThan2p1 = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrackerMuonOnlyOneMuonWithEtaLessThan2p1"), - overlap = cms.InputTag("goodZToMuMuOneTrackerMuon"), - filter = cms.bool(True) -) - - - -#ZMuSta:requiring that the GlobalMuon has HLT match -process.goodZToMuMuOneStandAloneMuonFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - condition =cms.string("globalisMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuTrkMuon:requiring that the GlobalMuon has HLT match -process.goodZToMuMuOneTrackerMuonFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrackerMuon"), - condition =cms.string("globalisMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - -process.goodZToMuMuOneTrackerMuonOnlyOneMuonWithEtaLessThan2p1FirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrackerMuonOnlyOneMuonWithEtaLessThan2p1"), - condition =cms.string("globalisMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - - -process.zmumuSaMassHistogram = cms.EDAnalyzer( - "ZMuMuSaMassHistogram", - src_m = cms.InputTag("goodZToMuMu"), - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbin = cms.untracked.int32(200) - # name = cms.untracked.string("zMass") - ) - -goodZToMuMuTemplate = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("replace this string with your cut"), - src = cms.InputTag("goodZToMuMuAtLeast1HLT"), - filter = cms.bool(False) -) - - - -#### Plot #### -zPlots = cms.PSet( - histograms = cms.VPSet( - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zMass"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(2000.0), - nbins = cms.untracked.int32(2000), - name = cms.untracked.string("zMassUpToTwoTeV"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(-10.0), - max = cms.untracked.double(10.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zEta"), - description = cms.untracked.string("Z #eta"), - plotquantity = cms.untracked.string("eta") - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("zRapidity"), - description = cms.untracked.string("Z y"), - plotquantity = cms.untracked.string("rapidity") - ), - cms.PSet( - min = cms.untracked.double(0), - max = cms.untracked.double(200), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zPt"), - description = cms.untracked.string("Z p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("pt") - ), - cms.PSet( - min = cms.untracked.double(-4), - max = cms.untracked.double(4), - nbins = cms.untracked.int32(80), - name = cms.untracked.string("zPhi"), - description = cms.untracked.string("Z #phi"), - plotquantity = cms.untracked.string("phi") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu1Pt"), - description = cms.untracked.string("Highest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("max(daughter(0).pt,daughter(1).pt)") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu2Pt"), - description = cms.untracked.string("Lowest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("min(daughter(0).pt,daughter(1).pt)"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu1Eta"), - description = cms.untracked.string("muon1 #eta"), - plotquantity = cms.untracked.string("daughter(0).eta"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu2Eta"), - description = cms.untracked.string("muon2 #eta"), - plotquantity = cms.untracked.string("daughter(1).eta"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu1y"), - description = cms.untracked.string("muon1 y"), - plotquantity = cms.untracked.string("daughter(0).rapidity"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu2y"), - description = cms.untracked.string("muon2 y"), - plotquantity = cms.untracked.string("daughter(1).rapidity"), - ), -cms.PSet( - min = cms.untracked.double(-4.0), - max = cms.untracked.double(4.0), - nbins = cms.untracked.int32(80), - name = cms.untracked.string("mu1phi"), - description = cms.untracked.string("muon1 #phi"), - plotquantity = cms.untracked.string("daughter(0).phi"), - ), - cms.PSet( - min = cms.untracked.double(-4.0), - max = cms.untracked.double(4.0), - nbins = cms.untracked.int32(80), - name = cms.untracked.string("mu2phi"), - description = cms.untracked.string("muon2 #phi"), - plotquantity = cms.untracked.string("daughter(1).phi"), - ), - cms.PSet( - min = cms.untracked.double(-0.1), - max = cms.untracked.double(6.9), - nbins = cms.untracked.int32(7000), - name = cms.untracked.string("absMu1phiMinusMu2phi"), - description = cms.untracked.string("|mu1 #phi - mu2 #phi|"), - plotquantity = cms.untracked.string("abs(daughter(0).phi - daughter(1).phi)"), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu1 dxy"), - description = cms.untracked.string("muon1 dxy"), - plotquantity = cms.untracked.string("(- daughter(0).vx * daughter(0).py + daughter(0).vy * daughter(0).px) / daughter(0).pt "), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu2 dxy"), - description = cms.untracked.string("muon2 dxy"), - plotquantity = cms.untracked.string("(- daughter(1).vx * daughter(1).py + daughter(1).vy * daughter(1).px) / daughter(1).pt "), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu1 dz"), - description = cms.untracked.string("muon1 dz"), - plotquantity = cms.untracked.string("daughter(0).vz - ( daughter(0).vx * daughter(0).px + daughter(0).vy * daughter(0).py) / daughter(0).pt * daughter(0).pz / daughter(0).pt"), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu2 dz"), - description = cms.untracked.string("muon2 dz"), - plotquantity = cms.untracked.string("daughter(1).vz - ( daughter(1).vx * daughter(1).px + daughter(1).vy * daughter(1).py) / daughter(1).pt * daughter(1).pz / daughter(1).pt"), - ) - ) -) - -## # dxy constructed from the vtx position -## dxy0 = " (- daughter(0).vx * daughter(0).py + daughter(0).vy * daughter(0).px) / daughter(0).pt " -## dxy1 = " ( - daughter(1).vx * daughter(1).py + daughter(1).vy * daughter(1).px) / daughter(1).pt " -## # dz constructed from vertex position -## dz0 = " daughter(0).vz - ( daughter(0).vx * daughter(0).px + daughter(0).vy * daughter(0).py) / daughter(0).pt * daughter(0).pz / daughter(0).pt " -## dz1 = " daughter(1).vz - ( daughter(1).vx * daughter(1).px + daughter(1).vy * daughter(1).py) / daughter(1).pt * daughter(1).pz / daughter(1).pt " - - -#ZMuMu at least 1 HLT + 2 track-iso (Shape) -goodZToMuMuPlotsTemplate = cms.EDAnalyzer( - "CandViewHistoAnalyzer", - zPlots, - src = cms.InputTag("goodZToMuMuAtLeast1HLT") -) - -#ZMuMu at least 1 HLT + at least 1 NON track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -nonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -nonIsolatedZToMuMuPlots.src = cms.InputTag("nonIsolatedZToMuMuAtLeast1HLT") -setattr(process, "nonIsolatedZToMuMuPlots", nonIsolatedZToMuMuPlots) - -#ZMuMu at least 1 HLT + 1 NON track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -oneNonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -oneNonIsolatedZToMuMuPlots.src = cms.InputTag("oneNonIsolatedZToMuMuAtLeast1HLT") -setattr(process, "oneNonIsolatedZToMuMuPlots", oneNonIsolatedZToMuMuPlots) - -#ZMuMu at least 1 HLT + 2 NON track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -twoNonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -twoNonIsolatedZToMuMuPlots.src = cms.InputTag("twoNonIsolatedZToMuMuAtLeast1HLT") -setattr(process, "twoNonIsolatedZToMuMuPlots", twoNonIsolatedZToMuMuPlots) - - - - -etaBounds = [2.1] -## if you want to perform studies on different eta bins... -##### etaBounds = [-2.1, -1.2, -0.8, 0.8, 1.2, 2.1] - -def addModulesFromTemplate(sequence, moduleLabel, src, probeSelection): - print("selection for: ", moduleLabel) - for i in range(len(etaBounds)-1): - etaMin = etaBounds[i] - etaMax = etaBounds[i+1] - module = copy.deepcopy(goodZToMuMuTemplate) - if probeSelection == "single": - cut = "%5.3f < daughter(1).eta < %5.3f" %(etaMin, etaMax) - elif probeSelection == "double": - cut = "%5.3f < daughter(0).eta < %5.3f | %5.3f < daughter(1).eta < %5.3f" %(etaMin, etaMax, etaMin, etaMax) - print(i, ") cut = ", cut) - setattr(module, "cut", cut) - setattr(module, "src", cms.InputTag(src)) - copyModuleLabel = moduleLabel + str(i) - setattr(process, copyModuleLabel, module) - if sequence == None: - sequence = module - else: - sequence = sequence + module - plotModule = copy.deepcopy(goodZToMuMuPlotsTemplate) - setattr(plotModule, "src", cms.InputTag(copyModuleLabel)) - for h in plotModule.histograms: - h.description.setValue(h.description.value() + ": " + "#eta: [%5.3f, %5.3f]" %(etaMin, etaMax)) - plotModuleLabel = moduleLabel + "Plots" + str(i) - setattr(process, plotModuleLabel, plotModule) - sequence = sequence + plotModule - path = cms.Path(sequence) - setattr(process, moduleLabel+"Path", path) - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -#ZMuMu at least 1 HLT + 2 track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate - -#ZMuMu 1 HLT + 2 track-iso -process.goodZToMuMu1HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMu1HLTPlots.src = cms.InputTag("goodZToMuMu1HLT") - -#ZMuMu 2 HLT + 2 track-iso -process.goodZToMuMu2HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMu2HLTPlots.src = cms.InputTag("goodZToMuMu2HLT") - -#ZMuSta First HLT + 2 track-iso -process.goodZToMuMuOneStandAloneMuonPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneStandAloneMuonPlots.src = cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLT") - -#ZMuTrkMuon First HLT + 2 track-iso -process.goodZToMuMuOneTrackerMuonPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneTrackerMuonPlots.src = cms.InputTag("goodZToMuMuOneTrackerMuonFirstHLT") - -process.goodZToMuMuOneTrackerMuonOnlyOneMuonWithEtaLessThan2p1Plots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneTrackerMuonOnlyOneMuonWithEtaLessThan2p1Plots.src = cms.InputTag("goodZToMuMuOneTrackerMuonOnlyOneMuonWithEtaLessThan2p1FirstHLT") - - -#ZMuTk First HLT + 2 track-iso -process.goodZToMuMuOneTrackPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneTrackPlots.src = cms.InputTag("goodZToMuMuOneTrackFirstHLT") - - -#ZMuMu same charge -process.goodZToMuMuSameChargeAtLeast1HLT = copy.deepcopy(process.goodZToMuMuAtLeast1HLT) -process.goodZToMuMuSameChargeAtLeast1HLT.src= cms.InputTag("goodZToMuMuSameCharge") - -process.goodZToMuMuSameChargeAtLeast1HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuSameChargeAtLeast1HLTPlots.src = cms.InputTag("goodZToMuMuSameChargeAtLeast1HLT") -process.goodZToMuMuSameCharge2HLT = copy.deepcopy(process.goodZToMuMu2HLT) -process.goodZToMuMuSameCharge2HLT.src= cms.InputTag("goodZToMuMuSameCharge") - -process.goodZToMuMuSameCharge2HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuSameCharge2HLTPlots.src = cms.InputTag("goodZToMuMuSameCharge2HLT") - -process.goodZToMuMuSameCharge1HLT = copy.deepcopy(process.goodZToMuMu1HLT) -process.goodZToMuMuSameCharge1HLT.src= cms.InputTag("goodZToMuMuSameCharge") - -process.goodZToMuMuSameCharge1HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuSameCharge1HLTPlots.src = cms.InputTag("goodZToMuMuSameCharge1HLT") - - -process.goodZToMuMuOnlyOneMuonWithEtaLessThan2p11HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOnlyOneMuonWithEtaLessThan2p11HLTPlots.src = cms.InputTag("goodZToMuMuOnlyOneMuonWithEtaLessThan2p11HLT") - -process.goodZToMuMuTwoMuonWithEtaGreaterThan2p1LessThan2p42HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuTwoMuonWithEtaGreaterThan2p1LessThan2p42HLTPlots.src = cms.InputTag("goodZToMuMuTwoMuonWithEtaGreaterThan2p1LessThan2p42HLT") - - - - - - -process.globalMuQualityCutsAnalysis= cms.EDAnalyzer( - "GlbMuQualityCutsAnalysis", - src = cms.InputTag("goodZToMuMuAtLeast1HLT"), - ptMin = cms.untracked.double(0.0), - massMin = cms.untracked.double(0.0), - massMax = cms.untracked.double(120.0), - etaMin = cms.untracked.double(-1.0), - etaMax = cms.untracked.double(10.0), - trkIso = cms.untracked.double(10000), - chi2Cut = cms.untracked.double(10), - nHitCut = cms.untracked.int32(10) - ) - - -# N-tuples - -process.goodZToMuMuOneStandAloneMuonNtuple = cms.EDProducer( - "CandViewNtpProducer", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - variables = cms.VPSet( - cms.PSet( - tag = cms.untracked.string("mass"), - quantity = cms.untracked.string("mass") - ) - ) -) - -process.initialGoodZToMuMuPath = cms.Path( - process.goodZToMuMu + - process.zmumuSaMassHistogram -) - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMuAtLeast1HLT+ - process.goodZToMuMuPlots , -# process.globalMuQualityCutsAnalysis, - "goodZToMuMu", "goodZToMuMu", - "double") - - -addModulesFromTemplate( - process.zToMuMuOnlyOneMuonWithEtaLessThan2p1+ - process.goodZToMuMuOnlyOneMuonWithEtaLessThan2p1+ - process.goodZToMuMuOnlyOneMuonWithEtaLessThan2p11HLT+ - process.goodZToMuMuOnlyOneMuonWithEtaLessThan2p11HLTPlots, - "goodZToMuMuOnlyOneMuonWithEtaLessThan2p1", "goodZToMuMuOnlyOneMuonWithEtaLessThan2p1", - "double") - -addModulesFromTemplate( - process.zToMuMuTwoMuonWithEtaGreaterThan2p1LessThan2p4 + - process.goodZToMuMuTwoMuonWithEtaGreaterThan2p1LessThan2p42HLT + - process.goodZToMuMuTwoMuonWithEtaGreaterThan2p1LessThan2p42HLTPlots, - "goodZToMuMuTwoMuonWithEtaGreaterThan2p1LessThan2p42HLT", "goodZToMuMuTwoMuonWithEtaGreaterThan2p1LessThan2p42HLT", - "double") - - - - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMu2HLT + - process.goodZToMuMu2HLTPlots, - "goodZToMuMu2HLT", "goodZToMuMu2HLT", - "double") - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMu1HLT + - process.goodZToMuMu1HLTPlots, - "goodZToMuMu1HLT", "goodZToMuMu1HLT", - "double") - -process.globalMuQualityCutsAnalysisSameCharge = copy.deepcopy(process.globalMuQualityCutsAnalysis) -process.globalMuQualityCutsAnalysisSameCharge.src = cms.InputTag("goodZToMuMuSameChargeAtLeast1HLT") - -addModulesFromTemplate( - process.dimuonsGlobalSameCharge+ - process.goodZToMuMuSameCharge + - process.goodZToMuMuSameChargeAtLeast1HLT+ - process.goodZToMuMuSameChargeAtLeast1HLTPlots, - # process.globalMuQualityCutsAnalysisSameCharge, - "goodZToMuMuSameCharge", "goodZToMuMuSameCharge", - "double") - - -addModulesFromTemplate( - process.dimuonsGlobalSameCharge+ - process.goodZToMuMuSameCharge + - process.goodZToMuMuSameCharge2HLT + - process.goodZToMuMuSameCharge2HLTPlots, - "goodZToMuMuSameCharge2HLT", "goodZToMuMuSameCharge2HLT", - "double") - -addModulesFromTemplate( - process.dimuonsGlobalSameCharge+ - process.goodZToMuMuSameCharge + - process.goodZToMuMuSameCharge1HLT + - process.goodZToMuMuSameCharge1HLTPlots, - "goodZToMuMuSameCharge1HLT", "goodZToMuMuSameCharge1HLT", - "double") - - - - -process.nonIsolatedZToMuMuPath = cms.Path ( - process.nonIsolatedZToMuMu + - process.nonIsolatedZToMuMuAtLeast1HLT + - process.nonIsolatedZToMuMuPlots -) -process.oneNonIsolatedZToMuMuPath = cms.Path( - process.nonIsolatedZToMuMu + - process.oneNonIsolatedZToMuMu + - process.oneNonIsolatedZToMuMuAtLeast1HLT + - process.oneNonIsolatedZToMuMuPlots -) - -process.twoNonIsolatedZToMuMuPath = cms.Path( - process.nonIsolatedZToMuMu + - process.twoNonIsolatedZToMuMu + - process.twoNonIsolatedZToMuMuAtLeast1HLT + - process.twoNonIsolatedZToMuMuPlots -) - -addModulesFromTemplate( - ~process.goodZToMuMu + - process.zToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuonFirstHLT + - process.goodZToMuMuOneStandAloneMuonNtuple + - process.goodZToMuMuOneStandAloneMuonPlots, - "goodZToMuMuOneStandAloneMuon", "goodZToMuMuOneStandAloneMuon", - "single") - -addModulesFromTemplate( - ~process.goodZToMuMu + -# process.dimuonsOneTrackerMuon + - process.zToMuMuOneTrackerMuon + - process.goodZToMuMuOneTrackerMuon + - process.goodZToMuMuOneTrackerMuonFirstHLT + - process.goodZToMuMuOneTrackerMuonPlots, - "goodZToMuMuOneTrackerMuon", "goodZToMuMuOneTrackerMuon", - "single") - - -addModulesFromTemplate( - ~process.goodZToMuMu + -# process.dimuonsOneTrackerMuon + - process.zToMuMuOneTrackerMuon + - process.goodZToMuMuOneTrackerMuon + - process.zToMuMuOneTrackerMuonOnlyOneMuonWithEtaLessThan2p1 + - process.goodZToMuMuOneTrackerMuonOnlyOneMuonWithEtaLessThan2p1+ - process.goodZToMuMuOneTrackerMuonOnlyOneMuonWithEtaLessThan2p1FirstHLT + - process.goodZToMuMuOneTrackerMuonOnlyOneMuonWithEtaLessThan2p1Plots, - "goodZToMuMuOneTrackerMuonOnlyOneMuonWithEtaLessThan2p1", "goodZToMuMuOneTrackerMuonOnlyOneMuonWithEtaLessThan2p1", - "single") - - - -addModulesFromTemplate( - ~process.goodZToMuMu + - ~process.zToMuMuOneStandAloneMuon + - process.zToMuGlobalMuOneTrack + - process.zToMuMuOneTrack + - process.goodZToMuMuOneTrack + - process.goodZToMuMuOneTrackFirstHLT + - process.goodZToMuMuOneTrackPlots, - "goodZToMuMuOneTrack", "goodZToMuMuOneTrack", - "single") - -process.out = cms.OutputModule( - "PoolOutputModule", - fileName = cms.untracked.string('zMuSa-UML_test.root'), - outputCommands = cms.untracked.vstring( - "drop *", - "keep *_goodZToMuMuOneStandAloneMuonNtuple_*_*" - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - "goodZToMuMuOneStandAloneMuonPath" - ) - ) -) - -process.endPath = cms.EndPath( - process.eventInfo - + process.out -) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/zToMuMuAnalysis_EtaRegions.py b/ElectroWeakAnalysis/ZMuMu/test/zToMuMuAnalysis_EtaRegions.py deleted file mode 100644 index f4f1f8635d6e6..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/zToMuMuAnalysis_EtaRegions.py +++ /dev/null @@ -1,638 +0,0 @@ -from __future__ import print_function -#analysis code. -#It produces plot for Fit study -#author Luca Lista -#modificated by Noli Pasquale 21-10-2008 - -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("ZToMuMuAnalysis") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(1) -) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( -"rfio:/dpm/na.infn.it/home/cms/store/user/noli/reskim/zmm/zmumu_reskim_1.root" - ) -) - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("zMuMu_qcd.root") -) - -zSelection = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2.0 & abs(daughter(1).eta)<2.0 & mass > 20"), - # adjusting isolation values - isoCut = cms.double(3.0), - ptThreshold = cms.untracked.double(1.5), - etEcalThreshold = cms.untracked.double(0.2), - etHcalThreshold = cms.untracked.double(0.5), - deltaRTrk = cms.untracked.double(0.3), - deltaREcal = cms.untracked.double(0.25), - deltaRHcal = cms.untracked.double(0.25), - # setting alpha=0 in order to have only tracker isolation - alpha = cms.untracked.double(0), - beta = cms.untracked.double(-0.75), - relativeIsolation = cms.bool(False) - ) - -#selecting endcap / endcap-barrel / barrel regions - -dict = {'Barrel':[0, 0.8],'BarrEnd':[0.8, 1.2],'EndCap':[1.2, 2.0] } - - -def addModuleEtaRegions(moduleToModify, region, src="", cut =""): - print("selection for: ", moduleToModify.label()+region) - etaMin = dict[region][0] - etaMax = dict[region][1] - module = copy.deepcopy(moduleToModify) - if cut=="": - cut = "mass>20 & charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & ( abs(daughter(0).eta) > %5.3f & abs( daughter(0).eta )< %5.3f) & ( abs(daughter(1).eta) > %5.3f & abs( daughter(1).eta )< %5.3f) " %(etaMin, etaMax, etaMin, etaMax) - print(region, ") cut = ", cut) - if 'cut' in module.parameters_(): - setattr(module, "cut", cut) - if 'src' in module.parameters_(): - setattr(module, "src", src) - copyModuleLabel = moduleToModify.label() + region - setattr(process, copyModuleLabel, module) - return module - - -def addPlotModuleEtaRegions(plotModuleToModify, region, src=""): - print("selection for: ", plotModuleToModify.label()) - etaMin = dict[region][0] - etaMax = dict[region][1] - plotModule = copy.deepcopy(plotModuleToModify) - for h in plotModule.histograms: - h.description.setValue(h.description.value() + ": " + "|#eta|: [%5.3f, %5.3f]" %(etaMin, etaMax)) - if 'src' in plotModule.parameters_(): - setattr(plotModule, "src", src) - copyPlotModuleLabel = plotModuleToModify.label() + region - setattr(process, copyPlotModuleLabel, plotModule) - return plotModule - - - -process.goodZToMuMu = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -for region in dict.keys(): - addModuleEtaRegions(process.goodZToMuMu, region,"dimuonsGlobal" ) - -#ZMuMu: richiedo almeno 1 HLT trigger match.Per la shape -process.goodZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(True) -) - -## for region in dict.keys(): -## addModuleEtaRegions(process.goodZToMuMuAtLeast1HLT, region, addModuleEtaRegions(process.goodZToMuMu, region,"dimuonsGlobal" ) ) - - - -#ZMuMu: richiedo 2 HLT trigger match -process.goodZToMuMu2HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("bothMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(True) -) - -## for region in dict.keys(): -## addModuleEtaRegions(process.goodZToMuMu2HLT, region,addModuleEtaRegions(process.goodZToMuMu, region,"dimuonsGlobal" ) ) - - - - -#ZMuMu: richiedo 1 HLT trigger match -process.goodZToMuMu1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("exactlyOneMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(True) -) -## for region in dict.keys(): -## addModuleEtaRegions(process.goodZToMuMu1HLT, region,addModuleEtaRegions(process.goodZToMuMu, region,"dimuonsGlobal" ) ) - - - -process.nonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -for region in dict.keys(): - addModuleEtaRegions(process.nonIsolatedZToMuMu, region,"dimuonsGlobal" ) - - - -#ZMuMu1notIso: richiedo almeno un trigger -process.nonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("nonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(True) -) -## for region in dict.keys(): -## addModuleEtaRegions(process.nonIsolatedZToMuMuAtLeast1HLT, region, addModuleEtaRegions(process.nonIsolatedZToMuMu, region,"dimuonsGlobal" )) - - -process.zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - src = cms.InputTag("dimuonsOneTrack"), - filter = cms.bool(True) -) - ## for region in dict.keys(): -## addModuleEtaRegions(process.zToMuGlobalMuOneTrack, region, "dimuonsOneTrack" ,"daughter(0).isGlobalMuon = 1") - - -process.zToMuMuOneTrack = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) -for region in dict.keys(): - addModuleEtaRegions(process.zToMuMuOneTrack, region, "zToMuGlobalMuOneTrack" ) - - -process.zToMuMuOneStandAloneMuon = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsOneStandAloneMuon"), - filter = cms.bool(True) -) - -for region in dict.keys(): - addModuleEtaRegions(process.zToMuMuOneStandAloneMuon, region, "dimuonsOneStandAloneMuon" ) - - -process.goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrack"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrackBarrel = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrackBarrel"), - overlap = cms.InputTag("goodZToMuMuBarrel"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrackEndCap = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrackEndCap"), - overlap = cms.InputTag("goodZToMuMuEndCap"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrackBarrEnd = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrackBarrEnd"), - overlap = cms.InputTag("goodZToMuMuBarrEnd"), - filter = cms.bool(True) -) - - -#ZMuTk:richiedo che il muGlobal 'First' ha HLT match -process.goodZToMuMuOneTrackFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrack"), - condition =cms.string("firstMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrackFirstHLTBarrel = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrackBarrel"), - condition =cms.string("firstMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrackFirstHLTEndCap = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrackEndCap"), - condition =cms.string("firstMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(True) -) -process.goodZToMuMuOneTrackFirstHLTBarrEnd = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrackBarrEnd"), - condition =cms.string("firstMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneStandAloneMuon"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -## for region in dict.keys(): -## addModuleEtaRegions(process.goodZToMuMuOneStandAloneMuon, region, addModuleEtaRegions(process.zToMuMuOneStandAloneMuon, region, "dimuonsOneStandAloneMuon" )) - -#ZMuSta:richiedo che il muGlobal 'First' ha HLT match -process.goodZToMuMuOneStandAloneMuonFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - condition =cms.string("firstMatched"), - hltPath = cms.string("hltSingleMuNoIsoL3PreFiltered"), - filter = cms.bool(True) -) -## for region in dict.keys(): -## addModuleEtaRegions(process.goodZToMuMuOneStandAloneMuonFirstHLT, region,addModuleEtaRegions(process.goodZToMuMuOneStandAloneMuon, region, addModuleEtaRegions(process.zToMuMuOneStandAloneMuon, region, "dimuonsOneStandAloneMuon" )) ) - - -process.zmumuSaMassHistogram = cms.EDAnalyzer( - "ZMuMuSaMassHistogram", - src_m = cms.InputTag("goodZToMuMu"), - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbin = cms.untracked.int32(200) -# name = cms.untracked.string("zMass") - ) - -for region in dict.keys(): - addModuleEtaRegions(process.zmumuSaMassHistogram, region, addModuleEtaRegions(process.goodZToMuMu, region,"dimuonsGlobal" ) ) - - - -goodZToMuMuTemplate = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string(""), - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(False) -) - -### Plot ### - -zPlots = cms.PSet( - histograms = cms.VPSet( - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zMass"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu1Pt"), - description = cms.untracked.string("Highest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("max(daughter(0).pt,daughter(1).pt)") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu2Pt"), - description = cms.untracked.string("Lowest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("min(daughter(0).pt,daughter(1).pt)") - ) - ) -) - -#ZMuMu almeno 1 HLT + 2 track-iso (Shape) -goodZToMuMuPlotsTemplate = cms.EDAnalyzer( - "CandViewHistoAnalyzer", - zPlots, - src = cms.InputTag("goodZToMuMuAtLeast1HLT") -) - -#ZMuMu almeno 1 HLT + almeno 1 NON track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -for region in dict.keys(): - addPlotModuleEtaRegions(process.goodZToMuMuPlots, region, "goodZToMuMuAtLeast1HLT" ) - - -nonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -nonIsolatedZToMuMuPlots.src = cms.InputTag("nonIsolatedZToMuMuAtLeast1HLT") -setattr(process, "nonIsolatedZToMuMuPlots", nonIsolatedZToMuMuPlots) -for region in dict.keys(): - addPlotModuleEtaRegions(process.nonIsolatedZToMuMuPlots, region, "nonIsolatedZToMuMuAtLeast1HLT" ) - - - - - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -#ZMuMu almeno 1 HLT + 2 track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate - -#ZMuMu 1 HLT + 2 track-iso -process.goodZToMuMu1HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMu1HLTPlots.src = cms.InputTag("goodZToMuMu1HLT") - -for region in dict.keys(): - addPlotModuleEtaRegions(process.goodZToMuMu1HLTPlots, region, "goodZToMuMuAtLeast1HLT" ) - -#ZMuMu 2 HLT + 2 track-iso -process.goodZToMuMu2HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMu2HLTPlots.src = cms.InputTag("goodZToMuMu2HLT") -for region in dict.keys(): - addPlotModuleEtaRegions(process.goodZToMuMu2HLTPlots, region, "goodZToMuMuAtLeast1HLT" ) - - -#ZMuSta First HLT + 2 track-iso -process.goodZToMuMuOneStandAloneMuonPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneStandAloneMuonPlots.src = cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLT") -for region in dict.keys(): - addPlotModuleEtaRegions(process.goodZToMuMuOneStandAloneMuonPlots, region, "goodZToMuMuOneStandAloneMuonFirstHLT" ) - - - - -#ZMuTk First HLT + 2 track-iso -process.goodZToMuMuOneTrackPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneTrackPlots.src = cms.InputTag("goodZToMuMuOneTrackFirstHLT") - -process.goodZToMuMuOneTrackPlotsBarrel = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneTrackPlotsBarrel.src = cms.InputTag("goodZToMuMuOneTrackFirstHLTBarrel") - -process.goodZToMuMuOneTrackPlotsEndCap = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneTrackPlotsEndCap.src = cms.InputTag("goodZToMuMuOneTrackFirstHLTEndCap") - -process.goodZToMuMuOneTrackPlotsBarrEnd = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneTrackPlotsBarrEnd.src = cms.InputTag("goodZToMuMuOneTrackFirstHLTBarrEnd") - - -# N-tuples - -process.goodZToMuMuOneStandAloneMuonNtuple = cms.EDProducer( - "CandViewNtpProducer", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - variables = cms.VPSet( - cms.PSet( - tag = cms.untracked.string("mass"), - quantity = cms.untracked.string("mass") - ) - ) -) - -process.initialGoodZToMuMuPath = cms.Path( - process.goodZToMuMu + - process.zmumuSaMassHistogram -) - -process.initialGoodZToMuMuBarrelPath = cms.Path( - process.goodZToMuMuBarrel+ - process.zmumuSaMassHistogramBarrel -) - -process.initialGoodZToMuMuEndCapPath = cms.Path( - process.goodZToMuMuEndCap+ - process.zmumuSaMassHistogramEndCap -) - -process.initialGoodZToMuMuBarEndCapPath = cms.Path( - process.goodZToMuMuBarrEnd+ - process.zmumuSaMassHistogramBarrEnd -) - - - -process.goodZToMuMuFinalPath = cms.Path ( - process.goodZToMuMu + - process.goodZToMuMuAtLeast1HLT+ - process.goodZToMuMuPlots - ) - -process.goodZToMuMuFinalBarrelPath = cms.Path ( - process.goodZToMuMuBarrel + - process.goodZToMuMuAtLeast1HLT+ - process.goodZToMuMuPlotsBarrel - ) - -process.goodZToMuMuFinalEndCapPath = cms.Path ( - process.goodZToMuMuEndCap + - process.goodZToMuMuAtLeast1HLT+ - process.goodZToMuMuPlotsEndCap - ) - -process.goodZToMuMuFinalBarrEndPath = cms.Path ( - process.goodZToMuMuBarrEnd + - process.goodZToMuMuAtLeast1HLT+ - process.goodZToMuMuPlotsBarrEnd - ) - -process.goodZToMuMu2HLTFinalPath= cms.Path( - process.goodZToMuMu + - process.goodZToMuMu2HLT + - process.goodZToMuMu2HLTPlots - ) - - -process.goodZToMuMu2HLTBarrelFinalPath= cms.Path( - process.goodZToMuMuBarrel + - process.goodZToMuMu2HLT + - process.goodZToMuMu2HLTPlotsBarrel - ) - -process.goodZToMuMu2HLTEndCapFinalPath= cms.Path( - process.goodZToMuMuEndCap+ - process.goodZToMuMu2HLT + - process.goodZToMuMu2HLTPlotsEndCap - ) - -process.goodZToMuMu2HLTBarrEndFinalPath= cms.Path( - process.goodZToMuMuBarrEnd + - process.goodZToMuMu2HLT + - process.goodZToMuMu2HLTPlotsBarrEnd - ) - - -process.goodZToMuMu1HLTFinalPath= cms.Path( - process.goodZToMuMu + - process.goodZToMuMu1HLT + - process.goodZToMuMu1HLTPlots - ) - - -process.goodZToMuMu1HLTBarrelFinalPath= cms.Path( - process.goodZToMuMuBarrel + - process.goodZToMuMu1HLT + - process.goodZToMuMu1HLTPlotsBarrel - ) - -process.goodZToMuMu1HLTEndCapFinalPath= cms.Path( - process.goodZToMuMuEndCap+ - process.goodZToMuMu1HLT + - process.goodZToMuMu1HLTPlotsEndCap - ) - -process.goodZToMuMu1HLTBarrEndFinalPath= cms.Path( - process.goodZToMuMuBarrEnd + - process.goodZToMuMu1HLT + - process.goodZToMuMu1HLTPlotsBarrEnd - ) - - - -process.nonIsolatedZToMuMuFinalPath = cms.Path ( - process.nonIsolatedZToMuMu + - process.nonIsolatedZToMuMuAtLeast1HLT + - process.nonIsolatedZToMuMuPlots - ) - -process.nonIsolatedZToMuMuFinalBarrelPath = cms.Path ( - process.nonIsolatedZToMuMuBarrel + - process.nonIsolatedZToMuMuAtLeast1HLT + - process.nonIsolatedZToMuMuPlotsBarrel - ) - -process.nonIsolatedZToMuMuFinalEndCapPath = cms.Path ( - process.nonIsolatedZToMuMuEndCap + - process.nonIsolatedZToMuMuAtLeast1HLT + - process.nonIsolatedZToMuMuPlotsEndCap - ) - -process.nonIsolatedZToMuMuFinalBarrEndPath = cms.Path ( - process.nonIsolatedZToMuMuBarrEnd + - process.nonIsolatedZToMuMuAtLeast1HLT + - process.nonIsolatedZToMuMuPlotsBarrEnd - ) - - - - -process.goodZToMuMuOneStandAloneMuonFinalPath=cms.Path( - ~process.goodZToMuMu + - process.zToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuonFirstHLT + - process.goodZToMuMuOneStandAloneMuonNtuple + - process.goodZToMuMuOneStandAloneMuonPlots - ) - -process.goodZToMuMuOneStandAloneMuonFinalBarrelPath=cms.Path( - ~process.goodZToMuMuBarrel + - process.zToMuMuOneStandAloneMuonBarrel + - process.goodZToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuonFirstHLT + - process.goodZToMuMuOneStandAloneMuonNtuple + - process.goodZToMuMuOneStandAloneMuonPlotsBarrel - ) - -process.goodZToMuMuOneStandAloneMuonFinalEndCapPath=cms.Path( - ~process.goodZToMuMuEndCap + - process.zToMuMuOneStandAloneMuonEndCap + - process.goodZToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuonFirstHLT + - process.goodZToMuMuOneStandAloneMuonNtuple + - process.goodZToMuMuOneStandAloneMuonPlotsEndCap - ) - -process.goodZToMuMuOneStandAloneMuonFinalBarrEndPath=cms.Path( - ~process.goodZToMuMuBarrEnd + - process.zToMuMuOneStandAloneMuonBarrEnd + - process.goodZToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuonFirstHLT + - process.goodZToMuMuOneStandAloneMuonNtuple + - process.goodZToMuMuOneStandAloneMuonPlotsBarrEnd - ) - - - - -process.goodZToMuMuOneTrackFinalPath=cms.Path( - ~process.goodZToMuMu + - ~process.zToMuMuOneStandAloneMuon + - process.zToMuGlobalMuOneTrack + - process.zToMuMuOneTrack + - process.goodZToMuMuOneTrack + - process.goodZToMuMuOneTrackFirstHLT + - process.goodZToMuMuOneTrackPlots - ) - -process.goodZToMuMuOneTrackFinalBarrelPath=cms.Path( - ~process.goodZToMuMuBarrel + - ~process.zToMuMuOneStandAloneMuonBarrel + - process.zToMuGlobalMuOneTrack + - process.zToMuMuOneTrackBarrel + - process.goodZToMuMuOneTrackBarrel + - process.goodZToMuMuOneTrackFirstHLTBarrel + - process.goodZToMuMuOneTrackPlotsBarrel - ) - -process.goodZToMuMuOneTrackFinalEndCapPath=cms.Path( - ~process.goodZToMuMuEndCap + - ~process.zToMuMuOneStandAloneMuonEndCap + - process.zToMuGlobalMuOneTrack + - process.zToMuMuOneTrackEndCap + - process.goodZToMuMuOneTrackEndCap + - process.goodZToMuMuOneTrackFirstHLTEndCap + - process.goodZToMuMuOneTrackPlotsEndCap - ) - -process.goodZToMuMuOneTrackFinalBarrEndPath=cms.Path( - ~process.goodZToMuMuBarrEnd + - ~process.zToMuMuOneStandAloneMuonBarrEnd + - process.zToMuGlobalMuOneTrack + - process.zToMuMuOneTrackBarrEnd + - process.goodZToMuMuOneTrackBarrEnd + - process.goodZToMuMuOneTrackFirstHLTBarrEnd + - process.goodZToMuMuOneTrackPlotsBarrEnd - ) - - - - - - - -process.out = cms.OutputModule( - "PoolOutputModule", - fileName = cms.untracked.string('file:./zMuSa-UML.root'), - outputCommands = cms.untracked.vstring( - "drop *", - "keep *_goodZToMuMuOneStandAloneMuonNtuple_*_*" - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - "goodZToMuMuOneStandAloneMuonFinalPath" - ) - ) -) - -process.endPath = cms.EndPath( - process.eventInfo + - process.out -) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/zToMuMuAnalysis_ntuple.py b/ElectroWeakAnalysis/ZMuMu/test/zToMuMuAnalysis_ntuple.py deleted file mode 100644 index 4d3a734f0ead3..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/zToMuMuAnalysis_ntuple.py +++ /dev/null @@ -1,889 +0,0 @@ -from __future__ import print_function -#analysis code. -#It produces plot for Fit study -#author Luca Lista -#modificated by Noli Pasquale 21-10-2008 -#modified by Annapaola de Cosa 18-12-2008 -#modified by Michele de Gruttola 08-10-2009 - - -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("ZToMuMuAnalysis") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.maxEvents = cms.untracked.PSet( -# input = cms.untracked.int32(17810) - input = cms.untracked.int32(-1) -) - - -process.load("Configuration.StandardSequences.MagneticField_cff") - - - -#process.load("ElectroWeakAnalysis/ZMuMu/OCTSUBSKIM_cff") - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_1.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_2.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_3.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_4.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_5.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_6.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_7.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_8.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_9.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_10.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_11.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_12.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_13.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_14.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_15.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_16.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_17.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_18.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_19.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_20.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_21.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_22.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_23.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_24.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_25.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_26.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_27.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_28.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_29.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_30.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_31.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_32.root", -# "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_33.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_34.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_35.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_36.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_37.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_38.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_39.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_40.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_41.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_42.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_43.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_44.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_45.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_46.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_47.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_48.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_49.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_50.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_51.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_52.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_53.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_54.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_55.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_56.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_57.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_58.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_59.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_60.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_61.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_62.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_63.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_64.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_65.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_66.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_67.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_68.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_69.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_70.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_71.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_72.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_73.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_74.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_75.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_76.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_77.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_78.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_79.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_80.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_81.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_82.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_83.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_84.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_85.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_86.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_87.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_88.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_89.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_90.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_91.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_92.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_93.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_94.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_95.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_96.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_97.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_98.root", - "rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/testZMuMuSubSkim_99.root" - ) -) - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("Analysis_zmm_10TeV_SameCharge.root") -) - -zSelection = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 10 & daughter(1).pt > 10 & abs(daughter(0).eta)<2.1 & abs(daughter(1).eta)<2.1 & mass > 0"), - isoCut = cms.double(3.), - ptThreshold = cms.untracked.double(1.5), - etEcalThreshold = cms.untracked.double(0.2), - etHcalThreshold = cms.untracked.double(0.5), - deltaRVetoTrk = cms.untracked.double(0.015), - deltaRTrk = cms.untracked.double(0.3), - deltaREcal = cms.untracked.double(0.25), - deltaRHcal = cms.untracked.double(0.25), - alpha = cms.untracked.double(0.), - beta = cms.untracked.double(-0.75), - relativeIsolation = cms.bool(False) - -# For standard isolation (I_Tkr<3GeV) choose this configuration: -# isoCut = cms.double(3.), -# ptThreshold = cms.untracked.double(1.5), -# etEcalThreshold = cms.untracked.double(0.2), -# etHcalThreshold = cms.untracked.double(0.5), -# deltaRVetoTrk = cms.untracked.double(0.015), -# deltaRTrk = cms.untracked.double(0.3), -# deltaREcal = cms.untracked.double(0.25), -# deltaRHcal = cms.untracked.double(0.25), -# alpha = cms.untracked.double(0.), -# beta = cms.untracked.double(-0.75), -# relativeIsolation = cms.bool(False) - ) - - -process.goodZToMuMu = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - - - -# same charge dimuons.... -process.dimuonsGlobalSameCharge = cms.EDFilter("CandViewRefSelector", - src = cms.InputTag("dimuons"), - cut = cms.string('mass > 20 & daughter(0).isGlobalMuon = 1 & daughter(1).isGlobalMuon = 1') -) - -process.goodZToMuMuSameCharge = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobalSameCharge"), - filter = cms.bool(True) -) -process.goodZToMuMuSameCharge.cut=cms.string("charge!=0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2.1 & abs(daughter(1).eta)<2.1 & mass > 20") - - -#ZMuMu: requiring at least 1 HLT trigger match (for the shape) -process.goodZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - - - -#ZMuMu: requiring 2 HLT trigger match -process.goodZToMuMu2HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("bothMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMu: requiring 1 HLT trigger match -process.goodZToMuMu1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("exactlyOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMu:at least one muon is not isolated -process.nonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -#ZMuMu:1 muon is not isolated -process.oneNonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuOneNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("nonIsolatedZToMuMu"), - filter = cms.bool(True) -) - -#ZMuMu: 2 muons are not isolated -process.twoNonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuTwoNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("nonIsolatedZToMuMu"), - filter = cms.bool(True) -) - - - -#ZMuMunotIso: requiring at least 1 trigger -process.nonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("nonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMuOnenotIso: requiring at least 1 trigger -process.oneNonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("oneNonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMuTwonotIso: requiring at least 1 trigger -process.twoNonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("twoNonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - - -process.zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - src = cms.InputTag("dimuonsOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneTrack = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneStandAloneMuon = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsOneStandAloneMuon"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrack"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -#ZMuTk:requiring that the GlobalMuon 'First' has HLT match -process.goodZToMuMuOneTrackFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrack"), - condition =cms.string("firstMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneStandAloneMuon"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -#ZMuSta:requiring that the GlobalMuon has HLT match -process.goodZToMuMuOneStandAloneMuonFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - condition =cms.string("globalisMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -process.zmumuSaMassHistogram = cms.EDAnalyzer( - "ZMuMuSaMassHistogram", - src_m = cms.InputTag("goodZToMuMu"), - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbin = cms.untracked.int32(200) - # name = cms.untracked.string("zMass") - ) - -goodZToMuMuTemplate = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("replace this string with your cut"), - src = cms.InputTag("goodZToMuMuAtLeast1HLT"), - filter = cms.bool(False) -) - - - -#### Plot #### -zPlots = cms.PSet( - histograms = cms.VPSet( - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zMass"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(2000.0), - nbins = cms.untracked.int32(2000), - name = cms.untracked.string("zMassUpToTwoTeV"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(-10.0), - max = cms.untracked.double(10.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zEta"), - description = cms.untracked.string("Z #eta"), - plotquantity = cms.untracked.string("eta") - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("zRapidity"), - description = cms.untracked.string("Z y"), - plotquantity = cms.untracked.string("rapidity") - ), - cms.PSet( - min = cms.untracked.double(0), - max = cms.untracked.double(200), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zPt"), - description = cms.untracked.string("Z p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("pt") - ), - cms.PSet( - min = cms.untracked.double(-4), - max = cms.untracked.double(4), - nbins = cms.untracked.int32(80), - name = cms.untracked.string("zPhi"), - description = cms.untracked.string("Z #phi"), - plotquantity = cms.untracked.string("phi") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu1Pt"), - description = cms.untracked.string("Highest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("max(daughter(0).pt,daughter(1).pt)") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu2Pt"), - description = cms.untracked.string("Lowest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("min(daughter(0).pt,daughter(1).pt)"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu1Eta"), - description = cms.untracked.string("muon1 #eta"), - plotquantity = cms.untracked.string("daughter(0).eta"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu2Eta"), - description = cms.untracked.string("muon2 #eta"), - plotquantity = cms.untracked.string("daughter(1).eta"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu1y"), - description = cms.untracked.string("muon1 y"), - plotquantity = cms.untracked.string("daughter(0).rapidity"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu2y"), - description = cms.untracked.string("muon2 y"), - plotquantity = cms.untracked.string("daughter(1).rapidity"), - ), -cms.PSet( - min = cms.untracked.double(-4.0), - max = cms.untracked.double(4.0), - nbins = cms.untracked.int32(80), - name = cms.untracked.string("mu1phi"), - description = cms.untracked.string("muon1 #phi"), - plotquantity = cms.untracked.string("daughter(0).phi"), - ), - cms.PSet( - min = cms.untracked.double(-4.0), - max = cms.untracked.double(4.0), - nbins = cms.untracked.int32(80), - name = cms.untracked.string("mu2phi"), - description = cms.untracked.string("muon2 #phi"), - plotquantity = cms.untracked.string("daughter(1).phi"), - ), - cms.PSet( - min = cms.untracked.double(-0.1), - max = cms.untracked.double(6.9), - nbins = cms.untracked.int32(7000), - name = cms.untracked.string("absMu1phiMinusMu2phi"), - description = cms.untracked.string("|mu1 #phi - mu2 #phi|"), - plotquantity = cms.untracked.string("abs(daughter(0).phi - daughter(1).phi)"), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu1 dxy"), - description = cms.untracked.string("muon1 dxy"), - plotquantity = cms.untracked.string("(- daughter(0).vx * daughter(0).py + daughter(0).vy * daughter(0).px) / daughter(0).pt "), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu2 dxy"), - description = cms.untracked.string("muon2 dxy"), - plotquantity = cms.untracked.string("(- daughter(1).vx * daughter(1).py + daughter(1).vy * daughter(1).px) / daughter(1).pt "), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu1 dz"), - description = cms.untracked.string("muon1 dz"), - plotquantity = cms.untracked.string("daughter(0).vz - ( daughter(0).vx * daughter(0).px + daughter(0).vy * daughter(0).py) / daughter(0).pt * daughter(0).pz / daughter(0).pt"), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu2 dz"), - description = cms.untracked.string("muon2 dz"), - plotquantity = cms.untracked.string("daughter(1).vz - ( daughter(1).vx * daughter(1).px + daughter(1).vy * daughter(1).py) / daughter(1).pt * daughter(1).pz / daughter(1).pt"), - ) - ) -) - -## # dxy constructed from the vtx position -## dxy0 = " (- daughter(0).vx * daughter(0).py + daughter(0).vy * daughter(0).px) / daughter(0).pt " -## dxy1 = " ( - daughter(1).vx * daughter(1).py + daughter(1).vy * daughter(1).px) / daughter(1).pt " -## # dz constructed from vertex position -## dz0 = " daughter(0).vz - ( daughter(0).vx * daughter(0).px + daughter(0).vy * daughter(0).py) / daughter(0).pt * daughter(0).pz / daughter(0).pt " -## dz1 = " daughter(1).vz - ( daughter(1).vx * daughter(1).px + daughter(1).vy * daughter(1).py) / daughter(1).pt * daughter(1).pz / daughter(1).pt " - - -#ZMuMu at least 1 HLT + 2 track-iso (Shape) -goodZToMuMuPlotsTemplate = cms.EDAnalyzer( - "CandViewHistoAnalyzer", - zPlots, - src = cms.InputTag("goodZToMuMuAtLeast1HLT") -) - -#ZMuMu at least 1 HLT + at least 1 NON track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -nonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -nonIsolatedZToMuMuPlots.src = cms.InputTag("nonIsolatedZToMuMuAtLeast1HLT") -setattr(process, "nonIsolatedZToMuMuPlots", nonIsolatedZToMuMuPlots) - -#ZMuMu at least 1 HLT + 1 NON track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -oneNonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -oneNonIsolatedZToMuMuPlots.src = cms.InputTag("oneNonIsolatedZToMuMuAtLeast1HLT") -setattr(process, "oneNonIsolatedZToMuMuPlots", oneNonIsolatedZToMuMuPlots) - -#ZMuMu at least 1 HLT + 2 NON track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -twoNonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -twoNonIsolatedZToMuMuPlots.src = cms.InputTag("twoNonIsolatedZToMuMuAtLeast1HLT") -setattr(process, "twoNonIsolatedZToMuMuPlots", twoNonIsolatedZToMuMuPlots) - - - - -etaBounds = [2.1] -## if you want to perform studies on different eta bins... -##### etaBounds = [-2.1, -1.2, -0.8, 0.8, 1.2, 2.1] - -def addModulesFromTemplate(sequence, moduleLabel, src, probeSelection): - print("selection for: ", moduleLabel) - for i in range(len(etaBounds)-1): - etaMin = etaBounds[i] - etaMax = etaBounds[i+1] - module = copy.deepcopy(goodZToMuMuTemplate) - if probeSelection == "single": - cut = "%5.3f < daughter(1).eta < %5.3f" %(etaMin, etaMax) - elif probeSelection == "double": - cut = "%5.3f < daughter(0).eta < %5.3f | %5.3f < daughter(1).eta < %5.3f" %(etaMin, etaMax, etaMin, etaMax) - print(i, ") cut = ", cut) - setattr(module, "cut", cut) - setattr(module, "src", cms.InputTag(src)) - copyModuleLabel = moduleLabel + str(i) - setattr(process, copyModuleLabel, module) - if sequence == None: - sequence = module - else: - sequence = sequence + module - plotModule = copy.deepcopy(goodZToMuMuPlotsTemplate) - setattr(plotModule, "src", cms.InputTag(copyModuleLabel)) - for h in plotModule.histograms: - h.description.setValue(h.description.value() + ": " + "#eta: [%5.3f, %5.3f]" %(etaMin, etaMax)) - plotModuleLabel = moduleLabel + "Plots" + str(i) - setattr(process, plotModuleLabel, plotModule) - sequence = sequence + plotModule - path = cms.Path(sequence) - setattr(process, moduleLabel+"Path", path) - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -#ZMuMu at least 1 HLT + 2 track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate - -#ZMuMu 1 HLT + 2 track-iso -process.goodZToMuMu1HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMu1HLTPlots.src = cms.InputTag("goodZToMuMu1HLT") - -#ZMuMu 2 HLT + 2 track-iso -process.goodZToMuMu2HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMu2HLTPlots.src = cms.InputTag("goodZToMuMu2HLT") - -#ZMuSta First HLT + 2 track-iso -process.goodZToMuMuOneStandAloneMuonPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneStandAloneMuonPlots.src = cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLT") - -#ZMuTk First HLT + 2 track-iso -process.goodZToMuMuOneTrackPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneTrackPlots.src = cms.InputTag("goodZToMuMuOneTrackFirstHLT") - - -#ZMuMu same charge -process.goodZToMuMuSameChargeAtLeast1HLT = copy.deepcopy(process.goodZToMuMuAtLeast1HLT) -process.goodZToMuMuSameChargeAtLeast1HLT.src= cms.InputTag("goodZToMuMuSameCharge") - -process.goodZToMuMuSameChargeAtLeast1HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuSameChargeAtLeast1HLTPlots.src = cms.InputTag("goodZToMuMuSameChargeAtLeast1HLT") -process.goodZToMuMuSameCharge2HLT = copy.deepcopy(process.goodZToMuMu2HLT) -process.goodZToMuMuSameCharge2HLT.src= cms.InputTag("goodZToMuMuSameCharge") - -process.goodZToMuMuSameCharge2HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuSameCharge2HLTPlots.src = cms.InputTag("goodZToMuMuSameCharge2HLT") - -process.goodZToMuMuSameCharge1HLT = copy.deepcopy(process.goodZToMuMu1HLT) -process.goodZToMuMuSameCharge1HLT.src= cms.InputTag("goodZToMuMuSameCharge") - -process.goodZToMuMuSameCharge1HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuSameCharge1HLTPlots.src = cms.InputTag("goodZToMuMuSameCharge1HLT") - - -## process.globalMuQualityCutsAnalysis= cms.EDAnalyzer( -## "GlbMuQualityCutsAnalysis", -## src = cms.InputTag("goodZToMuMuAtLeast1HLT"), -## ptMin = cms.untracked.double(0.0), -## massMin = cms.untracked.double(0.0), -## massMax = cms.untracked.double(120.0), -## etaMin = cms.untracked.double(-1.0), -## etaMax = cms.untracked.double(10.0), -## trkIso = cms.untracked.double(10000), -## chi2Cut = cms.untracked.double(10), -## nHitCut = cms.untracked.int32(10) -## ) - - -# N-tuples - -process.goodZToMuMuOneStandAloneMuonNtuple = cms.EDProducer( - "CandViewNtpProducer", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - variables = cms.VPSet( - cms.PSet( - tag = cms.untracked.string("mass"), - quantity = cms.untracked.string("mass") - ) - ) -) - -process.goodZToMuMu2HLTVtxed = cms.EDProducer( - "KalmanVertexFitCompositeCandProducer", - src = cms.InputTag("goodZToMuMu2HLT") -) - -process.goodZToMuMu2HLTVtxedNtuple = cms.EDProducer( - "CandViewNtpProducer", - src = cms.InputTag("goodZToMuMu2HLTVtxed"), - variables = cms.VPSet( - cms.PSet( - tag = cms.untracked.string("mass"), - quantity = cms.untracked.string("mass") - ), - cms.PSet( - tag = cms.untracked.string("vertexNdof"), - quantity = cms.untracked.string("vertexNdof") - ), - cms.PSet( - tag = cms.untracked.string("vertexNormalizedChi2"), - quantity = cms.untracked.string("vertexNormalizedChi2") - ), - ) -) - - - - - - - -process.goodZToMuMuEdmNtuple = cms.EDProducer( - "ZToLLEdmNtupleDumper", - zBlocks = cms.VPSet( - cms.PSet( - zName = cms.string("zGolden"), - z = cms.InputTag("goodZToMuMuAtLeast1HLT"), - zGenParticlesMatch = cms.InputTag(""), - beamSpot = cms.InputTag("offlineBeamSpot"), - primaryVertices = cms.InputTag("offlinePrimaryVerticesWithBS"), - ptThreshold = cms.double(1.5), - etEcalThreshold = cms.double(0.2), - etHcalThreshold = cms.double(0.5), - deltaRVetoTrk = cms.double(0.015), - deltaRTrk = cms.double(0.3), - deltaREcal = cms.double(0.25), - deltaRHcal = cms.double(0.25), - alpha = cms.double(0.), - beta = cms.double(-0.75), - relativeIsolation = cms.bool(False), - hltPath = cms.string("HLT_Mu9") - - ), - ) -) - - - -process.goodZToMuMu2HLTEdmNtuple = copy.deepcopy(process.goodZToMuMuEdmNtuple) -process.goodZToMuMu2HLTEdmNtuple.zBlocks[0].z = cms.InputTag("goodZToMuMu2HLT") -process.goodZToMuMu2HLTEdmNtuple.zBlocks[0].zName = cms.string("zGolden2HLT") - - -process.goodZToMuMu1HLTEdmNtuple = copy.deepcopy(process.goodZToMuMuEdmNtuple) -process.goodZToMuMu1HLTEdmNtuple.zBlocks[0].z = cms.InputTag("goodZToMuMu1HLT") -process.goodZToMuMu1HLTEdmNtuple.zBlocks[0].zName = cms.string("zGolden1HLT") - -process.oneNonIsolatedZToMuMuEdmNtuple = copy.deepcopy(process.goodZToMuMuEdmNtuple) -process.oneNonIsolatedZToMuMuEdmNtuple.zBlocks[0].z = cms.InputTag("oneNonIsolatedZToMuMuAtLeast1HLT") -process.oneNonIsolatedZToMuMuEdmNtuple.zBlocks[0].zName = cms.string("z1NotIso") - -process.twoNonIsolatedZToMuMuEdmNtuple = copy.deepcopy(process.goodZToMuMuEdmNtuple) -process.twoNonIsolatedZToMuMuEdmNtuple.zBlocks[0].z = cms.InputTag("twoNonIsolatedZToMuMuAtLeast1HLT") -process.twoNonIsolatedZToMuMuEdmNtuple.zBlocks[0].zName = cms.string("z2NotIso") - - -process.goodZToMuMuSameChargeEdmNtuple= copy.deepcopy(process.goodZToMuMuEdmNtuple) -process.goodZToMuMuSameChargeEdmNtuple.zBlocks[0].z = cms.InputTag("goodZToMuMuSameChargeAtLeast1HLT") -process.goodZToMuMuSameChargeEdmNtuple.zBlocks[0].zName = cms.string("zSameCharge") - - -process.goodZToMuMuOneStandAloneEdmNtuple= copy.deepcopy(process.goodZToMuMuEdmNtuple) -process.goodZToMuMuOneStandAloneEdmNtuple.zBlocks[0].z=cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLT") -process.goodZToMuMuOneStandAloneEdmNtuple.zBlocks[0].zName=cms.string("zMuSta") - -process.goodZToMuMuOneTrackEdmNtuple= copy.deepcopy(process.goodZToMuMuEdmNtuple) -process.goodZToMuMuOneTrackEdmNtuple.zBlocks[0].z=cms.InputTag("goodZToMuMuOneTrackFirstHLT") -process.goodZToMuMuOneTrackEdmNtuple.zBlocks[0].zName=cms.string("zMuTrk") - - - - -process.initialGoodZToMuMuPath = cms.Path( - process.goodZToMuMu + - process.zmumuSaMassHistogram -) - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMuAtLeast1HLT+ - process.goodZToMuMuPlots , -# process.goodZToMuMuEdmNtuple, - # process.globalMuQualityCutsAnalysis, - "goodZToMuMu", "goodZToMuMu", - "double") - - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMu2HLT + - process.goodZToMuMu2HLTPlots + - process.goodZToMuMu2HLTEdmNtuple + - process.goodZToMuMu2HLTVtxed + - process.goodZToMuMu2HLTVtxedNtuple, - "goodZToMuMu2HLT", "goodZToMuMu2HLT", - "double") - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMu1HLT + - process.goodZToMuMu1HLTPlots + - process.goodZToMuMu1HLTEdmNtuple, - "goodZToMuMu1HLT", "goodZToMuMu1HLT", - "double") - -#process.globalMuQualityCutsAnalysisSameCharge = copy.deepcopy(process.globalMuQualityCutsAnalysis) -#process.globalMuQualityCutsAnalysisSameCharge.src = cms.InputTag("goodZToMuMuSameChargeAtLeast1HLT") - -addModulesFromTemplate( - process.dimuonsGlobalSameCharge+ - process.goodZToMuMuSameCharge + - process.goodZToMuMuSameChargeAtLeast1HLT+ - process.goodZToMuMuSameChargeAtLeast1HLTPlots + - process.goodZToMuMuSameChargeEdmNtuple, -# process.globalMuQualityCutsAnalysisSameCharge, - "goodZToMuMuSameCharge", "goodZToMuMuSameCharge", - "double") - - -addModulesFromTemplate( - process.dimuonsGlobalSameCharge+ - process.goodZToMuMuSameCharge + - process.goodZToMuMuSameCharge2HLT + - process.goodZToMuMuSameCharge2HLTPlots, - "goodZToMuMuSameCharge2HLT", "goodZToMuMuSameCharge2HLT", - "double") - -addModulesFromTemplate( - process.dimuonsGlobalSameCharge+ - process.goodZToMuMuSameCharge + - process.goodZToMuMuSameCharge1HLT + - process.goodZToMuMuSameCharge1HLTPlots, - "goodZToMuMuSameCharge1HLT", "goodZToMuMuSameCharge1HLT", - "double") - - - - -process.nonIsolatedZToMuMuPath = cms.Path ( - process.nonIsolatedZToMuMu + - process.nonIsolatedZToMuMuAtLeast1HLT + - process.nonIsolatedZToMuMuPlots - # process.nonIsolatedZToMuMuEdmNtuple -) -process.oneNonIsolatedZToMuMuPath = cms.Path( - process.nonIsolatedZToMuMu + - process.oneNonIsolatedZToMuMu + - process.oneNonIsolatedZToMuMuAtLeast1HLT + - process.oneNonIsolatedZToMuMuPlots+ - process.oneNonIsolatedZToMuMuEdmNtuple -) - -process.twoNonIsolatedZToMuMuPath = cms.Path( - process.nonIsolatedZToMuMu + - process.twoNonIsolatedZToMuMu + - process.twoNonIsolatedZToMuMuAtLeast1HLT + - process.twoNonIsolatedZToMuMuPlots + - process.twoNonIsolatedZToMuMuEdmNtuple - -) - -addModulesFromTemplate( - ~process.goodZToMuMu + - process.zToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuonFirstHLT + - process.goodZToMuMuOneStandAloneMuonNtuple + - process.goodZToMuMuOneStandAloneEdmNtuple + - process.goodZToMuMuOneStandAloneMuonPlots, - "goodZToMuMuOneStandAloneMuon", "goodZToMuMuOneStandAloneMuon", - "single") - -addModulesFromTemplate( - ~process.goodZToMuMu + - ~process.zToMuMuOneStandAloneMuon + - process.zToMuGlobalMuOneTrack + - process.zToMuMuOneTrack + - process.goodZToMuMuOneTrack + - process.goodZToMuMuOneTrackFirstHLT + - process.goodZToMuMuOneTrackPlots + - process.goodZToMuMuOneTrackEdmNtuple , - "goodZToMuMuOneTrack", "goodZToMuMuOneTrack", - "single") - -process.out = cms.OutputModule( - "PoolOutputModule", - fileName = cms.untracked.string('Ntuple_test_v2.root'), - outputCommands = cms.untracked.vstring( - "drop *", - "keep *_goodZToMuMuOneStandAloneMuonNtuple_*_*", - "keep *_goodZToMuMuEdmNtuple_*_*", - "keep *_goodZToMuMu1HLTEdmNtuple_*_*", - "keep *_goodZToMuMu2HLTEdmNtuple_*_*", - "keep *_goodZToMuMuSameChargeEdmNtuple_*_*", - "keep *_nonIsolatedZToMuMuEdmNtuple_*_*", - "keep *_oneNonIsolatedZToMuMuEdmNtuple_*_*", - "keep *_twoNonIsolatedZToMuMuEdmNtuple_*_*", - "keep *_goodZToMuMuOneStandAloneEdmNtuple_*_*", - "keep *_goodZToMuMuOneTrackEdmNtuple_*_*", - "keep *_goodZToMuMu2HLTVtxedNtuple_*_*", - - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - "goodZToMuMuOneStandAloneMuonPath", - "goodZToMuMuPath", - "goodZToMuMu1HLTPath", - "goodZToMuMu2HLTPath", - "goodZToMuMuSameChargePath", - "nonIsolatedZToMuMuPath", - "oneNonIsolatedZToMuMuPath", - "twoNonIsolatedZToMuMuPath", - "goodZToMuMuOneTrackPath", - ) - ) -) - -process.endPath = cms.EndPath( - process.eventInfo - + process.out -) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/zToMuMuAnalysis_vtx.py b/ElectroWeakAnalysis/ZMuMu/test/zToMuMuAnalysis_vtx.py deleted file mode 100644 index 6ba343e0636bb..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/zToMuMuAnalysis_vtx.py +++ /dev/null @@ -1,1005 +0,0 @@ -from __future__ import print_function -#analysis code. -#It produces plot for Fit study -#author Luca Lista -#modificated by Noli Pasquale 21-10-2008 -#modified by Annapaola de Cosa 18-12-2008 -#modified by Michele de Gruttola 08-10-2009 - - - -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("ZToMuMuAnalysis") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") -process.load("Configuration.StandardSequences.MagneticField_cff") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.maxEvents = cms.untracked.PSet( -# input = cms.untracked.int32(17810) - input = cms.untracked.int32(-1) -) - -process.MessageLogger.cerr.threshold = '' -process.MessageLogger.cerr.FwkReport.reportEvery = 1000 - -#process.load("ElectroWeakAnalysis/ZMuMu/OCTSUBSKIM_cff") - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_1.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_10.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_11.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_12.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_13.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_14.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_15.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_16.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_17.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_18.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_19.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_2.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_20.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_21.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_22.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_23.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_24.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_25.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_26.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_27.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_28.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_29.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_3.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_30.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_31.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_32.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_33.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_34.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_35.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_36.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_37.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_38.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_39.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_4.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_40.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_41.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_42.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_44.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_45.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_46.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_47.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_48.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_49.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_5.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_50.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_51.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_52.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_53.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_54.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_55.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_56.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_57.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_58.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_59.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_6.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_60.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_61.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_62.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_63.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_64.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_65.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_66.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_67.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_68.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_69.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_7.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_70.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_71.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_72.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_73.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_74.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_75.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_76.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_77.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_78.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_79.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_8.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_80.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_81.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_82.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_83.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_84.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_85.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_86.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_87.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_88.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_89.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_9.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_90.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_91.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_92.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_93.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_94.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_95.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_96.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_97.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_98.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_99.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_100.root", -## "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/inclusiveMu15/testZMuMuSubSkim_101.root" - -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/zmm/testZMuMuSubSkim_1.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/zmm/testZMuMuSubSkim_2.root", -# "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_1.root", -# "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_2.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_3.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_4.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_5.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_6.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/TTbar/testZMuMuSubSkim_1.root", - - ) -) - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("Analysis_ttbar_7TeV_vtx.root") -) - -zSelection = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2.1 & abs(daughter(1).eta)<2.1 & mass > 20"), - isoCut = cms.double(3.), - ptThreshold = cms.untracked.double(1.5), - etEcalThreshold = cms.untracked.double(0.2), - etHcalThreshold = cms.untracked.double(0.5), - deltaRVetoTrk = cms.untracked.double(0.015), - deltaRTrk = cms.untracked.double(0.3), - deltaREcal = cms.untracked.double(0.25), - deltaRHcal = cms.untracked.double(0.25), - alpha = cms.untracked.double(0.), - beta = cms.untracked.double(-0.75), - relativeIsolation = cms.bool(False) - -# For standard isolation (I_Tkr<3GeV) choose this configuration: -# isoCut = cms.double(3.), -# ptThreshold = cms.untracked.double(1.5), -# etEcalThreshold = cms.untracked.double(0.2), -# etHcalThreshold = cms.untracked.double(0.5), -# deltaRVetoTrk = cms.untracked.double(0.015), -# deltaRTrk = cms.untracked.double(0.3), -# deltaREcal = cms.untracked.double(0.25), -# deltaRHcal = cms.untracked.double(0.25), -# alpha = cms.untracked.double(0.), -# beta = cms.untracked.double(-0.75), -# relativeIsolation = cms.bool(False) - - - ) - -process.goodZToMuMu = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - - -#ZMuMu: requiring at least 1 HLT trigger match (for the shape) -process.goodZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - -process.goodZToMuMuVtxedAtLeast1HLT = cms.EDProducer( - "KalmanVertexFitCompositeCandProducer", - src = cms.InputTag("goodZToMuMuAtLeast1HLT") -) - - -#ZMuMu: requiring 2 HLT trigger match -process.goodZToMuMu2HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("bothMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - -process.goodZToMuMu2HLTVtxed = cms.EDProducer( - "KalmanVertexFitCompositeCandProducer", - src = cms.InputTag("goodZToMuMu2HLT") -) - - -#ZMuMu: requiring 1 HLT trigger match -process.goodZToMuMu1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("exactlyOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - -process.goodZToMuMu1HLTVtxed = cms.EDProducer( - "KalmanVertexFitCompositeCandProducer", - src = cms.InputTag("goodZToMuMu1HLT") -) - - -#ZMuMu:at least one muon is not isolated -process.nonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - - - -#ZMuMu:1 muon is not isolated -process.oneNonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuOneNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("nonIsolatedZToMuMu"), - filter = cms.bool(True) -) - - - - -#ZMuMu: 2 muons are not isolated -process.twoNonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuTwoNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("nonIsolatedZToMuMu"), - filter = cms.bool(True) -) - - - - - -#ZMuMunotIso: requiring at least 1 trigger -process.nonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("nonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - -process.nonIsolatedZToMuMuVtxed = cms.EDProducer( - "KalmanVertexFitCompositeCandProducer", - src = cms.InputTag("nonIsolatedZToMuMuAtLeast1HLT") -) - - -#ZMuMuOnenotIso: requiring at least 1 trigger -process.oneNonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("oneNonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -process.oneNonIsolatedZToMuMuVtxed = cms.EDProducer( - "KalmanVertexFitCompositeCandProducer", - src = cms.InputTag("oneNonIsolatedZToMuMuAtLeast1HLT") -) - - -#ZMuMuTwonotIso: requiring at least 1 trigger -process.twoNonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("twoNonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -process.twoNonIsolatedZToMuMuVtxed = cms.EDProducer( - "KalmanVertexFitCompositeCandProducer", - src = cms.InputTag("twoNonIsolatedZToMuMuAtLeast1HLT") -) - - -process.zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - src = cms.InputTag("dimuonsOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneTrack = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneStandAloneMuon = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsOneStandAloneMuon"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrack"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -#ZMuTk:requiring that the GlobalMuon 'First' has HLT match -process.goodZToMuMuOneTrackFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrack"), - condition =cms.string("firstMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrackFirstHLTVtxed = cms.EDProducer( - "KalmanVertexFitCompositeCandProducer", - src = cms.InputTag("goodZToMuMuOneTrackFirstHLT") -) - - -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneStandAloneMuon"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -#ZMuSta:requiring that the GlobalMuon has HLT match -process.goodZToMuMuOneStandAloneMuonFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - condition =cms.string("globalisMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneStandAloneMuonFirstHLTVtxed = cms.EDProducer( - "KalmanVertexFitCompositeCandProducer", - src = cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLT") -) - - - -process.zmumuSaMassHistogram = cms.EDAnalyzer( - "ZMuMuSaMassHistogram", - src_m = cms.InputTag("goodZToMuMu"), - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbin = cms.untracked.int32(200) - # name = cms.untracked.string("zMass") - ) - -goodZToMuMuTemplate = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("replace this string with your cut"), - src = cms.InputTag("goodZToMuMuAtLeast1HLT"), - filter = cms.bool(False) -) - - - -#### Plot #### -zPlots = cms.PSet( - histograms = cms.VPSet( - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zMass"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(2000.0), - nbins = cms.untracked.int32(2000), - name = cms.untracked.string("zMassUpToTwoTeV"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(-10.0), - max = cms.untracked.double(10.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zEta"), - description = cms.untracked.string("Z #eta"), - plotquantity = cms.untracked.string("eta") - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("zRapidity"), - description = cms.untracked.string("Z y"), - plotquantity = cms.untracked.string("rapidity") - ), - cms.PSet( - min = cms.untracked.double(0), - max = cms.untracked.double(200), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zPt"), - description = cms.untracked.string("Z p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("pt") - ), - cms.PSet( - min = cms.untracked.double(-4), - max = cms.untracked.double(4), - nbins = cms.untracked.int32(80), - name = cms.untracked.string("zPhi"), - description = cms.untracked.string("Z #phi"), - plotquantity = cms.untracked.string("phi") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu1Pt"), - description = cms.untracked.string("Highest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("max(daughter(0).pt,daughter(1).pt)") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu2Pt"), - description = cms.untracked.string("Lowest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("min(daughter(0).pt,daughter(1).pt)"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu1Eta"), - description = cms.untracked.string("muon1 #eta"), - plotquantity = cms.untracked.string("daughter(0).eta"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu2Eta"), - description = cms.untracked.string("muon2 #eta"), - plotquantity = cms.untracked.string("daughter(1).eta"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu1y"), - description = cms.untracked.string("muon1 y"), - plotquantity = cms.untracked.string("daughter(0).rapidity"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu2y"), - description = cms.untracked.string("muon2 y"), - plotquantity = cms.untracked.string("daughter(1).rapidity"), - ), -cms.PSet( - min = cms.untracked.double(-4.0), - max = cms.untracked.double(4.0), - nbins = cms.untracked.int32(80), - name = cms.untracked.string("mu1phi"), - description = cms.untracked.string("muon1 #phi"), - plotquantity = cms.untracked.string("daughter(0).phi"), - ), - cms.PSet( - min = cms.untracked.double(-4.0), - max = cms.untracked.double(4.0), - nbins = cms.untracked.int32(80), - name = cms.untracked.string("mu2phi"), - description = cms.untracked.string("muon2 #phi"), - plotquantity = cms.untracked.string("daughter(1).phi"), - ), - cms.PSet( - min = cms.untracked.double(-0.1), - max = cms.untracked.double(6.9), - nbins = cms.untracked.int32(7000), - name = cms.untracked.string("absMu1phiMinusMu2phi"), - description = cms.untracked.string("|mu1 #phi - mu2 #phi|"), - plotquantity = cms.untracked.string("abs(daughter(0).phi - daughter(1).phi)"), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu1 dxy"), - description = cms.untracked.string("muon1 dxy"), - plotquantity = cms.untracked.string("(- daughter(0).vx * daughter(0).py + daughter(0).vy * daughter(0).px) / daughter(0).pt "), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu2 dxy"), - description = cms.untracked.string("muon2 dxy"), - plotquantity = cms.untracked.string("(- daughter(1).vx * daughter(1).py + daughter(1).vy * daughter(1).px) / daughter(1).pt "), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu1 dz"), - description = cms.untracked.string("muon1 dz"), - plotquantity = cms.untracked.string("daughter(0).vz - ( daughter(0).vx * daughter(0).px + daughter(0).vy * daughter(0).py) / daughter(0).pt * daughter(0).pz / daughter(0).pt"), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu2 dz"), - description = cms.untracked.string("muon2 dz"), - plotquantity = cms.untracked.string("daughter(1).vz - ( daughter(1).vx * daughter(1).px + daughter(1).vy * daughter(1).py) / daughter(1).pt * daughter(1).pz / daughter(1).pt"), - ) - ) -) - -## # dxy constructed from the vtx position -## dxy0 = " (- daughter(0).vx * daughter(0).py + daughter(0).vy * daughter(0).px) / daughter(0).pt " -## dxy1 = " ( - daughter(1).vx * daughter(1).py + daughter(1).vy * daughter(1).px) / daughter(1).pt " -## # dz constructed from vertex position -## dz0 = " daughter(0).vz - ( daughter(0).vx * daughter(0).px + daughter(0).vy * daughter(0).py) / daughter(0).pt * daughter(0).pz / daughter(0).pt " -## dz1 = " daughter(1).vz - ( daughter(1).vx * daughter(1).px + daughter(1).vy * daughter(1).py) / daughter(1).pt * daughter(1).pz / daughter(1).pt " - - -#### Plot #### -zVtxPlots = cms.PSet( - histograms = cms.VPSet( - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zMass"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(2000.0), - nbins = cms.untracked.int32(2000), - name = cms.untracked.string("zMassUpToTwoTeV"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(-10.0), - max = cms.untracked.double(10.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zEta"), - description = cms.untracked.string("Z #eta"), - plotquantity = cms.untracked.string("eta") - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("zRapidity"), - description = cms.untracked.string("Z y"), - plotquantity = cms.untracked.string("rapidity") - ), - cms.PSet( - min = cms.untracked.double(0), - max = cms.untracked.double(200), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zPt"), - description = cms.untracked.string("Z p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("pt") - ), - cms.PSet( - min = cms.untracked.double(-4), - max = cms.untracked.double(4), - nbins = cms.untracked.int32(80), - name = cms.untracked.string("zPhi"), - description = cms.untracked.string("Z #phi"), - plotquantity = cms.untracked.string("phi") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu1Pt"), - description = cms.untracked.string("Highest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("max(daughter(0).pt,daughter(1).pt)") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu2Pt"), - description = cms.untracked.string("Lowest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("min(daughter(0).pt,daughter(1).pt)"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu1Eta"), - description = cms.untracked.string("muon1 #eta"), - plotquantity = cms.untracked.string("daughter(0).eta"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu2Eta"), - description = cms.untracked.string("muon2 #eta"), - plotquantity = cms.untracked.string("daughter(1).eta"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu1y"), - description = cms.untracked.string("muon1 y"), - plotquantity = cms.untracked.string("daughter(0).rapidity"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu2y"), - description = cms.untracked.string("muon2 y"), - plotquantity = cms.untracked.string("daughter(1).rapidity"), - ), -cms.PSet( - min = cms.untracked.double(-4.0), - max = cms.untracked.double(4.0), - nbins = cms.untracked.int32(80), - name = cms.untracked.string("mu1phi"), - description = cms.untracked.string("muon1 #phi"), - plotquantity = cms.untracked.string("daughter(0).phi"), - ), - cms.PSet( - min = cms.untracked.double(-4.0), - max = cms.untracked.double(4.0), - nbins = cms.untracked.int32(80), - name = cms.untracked.string("mu2phi"), - description = cms.untracked.string("muon2 #phi"), - plotquantity = cms.untracked.string("daughter(1).phi"), - ), - cms.PSet( - min = cms.untracked.double(-0.1), - max = cms.untracked.double(6.9), - nbins = cms.untracked.int32(7000), - name = cms.untracked.string("absMu1phiMinusMu2phi"), - description = cms.untracked.string("|mu1 #phi - mu2 #phi|"), - plotquantity = cms.untracked.string("abs(daughter(0).phi - daughter(1).phi)"), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu1 dxy"), - description = cms.untracked.string("muon1 dxy"), - plotquantity = cms.untracked.string("(- daughter(0).vx * daughter(0).py + daughter(0).vy * daughter(0).px) / daughter(0).pt "), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu2 dxy"), - description = cms.untracked.string("muon2 dxy"), - plotquantity = cms.untracked.string("(- daughter(1).vx * daughter(1).py + daughter(1).vy * daughter(1).px) / daughter(1).pt "), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu1 dz"), - description = cms.untracked.string("muon1 dz"), - plotquantity = cms.untracked.string("daughter(0).vz - ( daughter(0).vx * daughter(0).px + daughter(0).vy * daughter(0).py) / daughter(0).pt * daughter(0).pz / daughter(0).pt"), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu2 dz"), - description = cms.untracked.string("muon2 dz"), - plotquantity = cms.untracked.string("daughter(1).vz - ( daughter(1).vx * daughter(1).px + daughter(1).vy * daughter(1).py) / daughter(1).pt * daughter(1).pz / daughter(1).pt"), - ), - cms.PSet( - min = cms.untracked.double(0), - max = cms.untracked.double(100), - nbins = cms.untracked.int32(100), - name = cms.untracked.string("vertexNdof"), - description = cms.untracked.string("vertexNdof"), - plotquantity = cms.untracked.string("vertexNdof"), - ), - cms.PSet( - min = cms.untracked.double(0), - max = cms.untracked.double(100), - nbins = cms.untracked.int32(100), - name = cms.untracked.string("vertexNormalizedChi2"), - description = cms.untracked.string("vertexNormalizedChi2"), - plotquantity = cms.untracked.string("vertexNormalizedChi2"), - ) - ) -) - - -#ZMuMu at least 1 HLT + 2 track-iso (Shape) -goodZToMuMuPlotsTemplate = cms.EDAnalyzer( - "CandViewHistoAnalyzer", - zPlots, - src = cms.InputTag("goodZToMuMuAtLeast1HLT") -) - -goodZToMuMuVtxPlotsTemplate = cms.EDAnalyzer( - "CandViewHistoAnalyzer", - zVtxPlots, - src = cms.InputTag("goodZToMuMuAtLeast1HLT") -) - - -#ZMuMu at least 1 HLT + at least 1 NON track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate - -#ZMuMu at least 1HLT with vertex contraint -goodZToMuMuVtxPlots = copy.deepcopy(goodZToMuMuVtxPlotsTemplate) -goodZToMuMuVtxPlots.src = cms.InputTag("goodZToMuMuVtxedAtLeast1HLT") -setattr(process, "goodZToMuMuVtxPlots", goodZToMuMuVtxPlots) - - -nonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -nonIsolatedZToMuMuPlots.src = cms.InputTag("nonIsolatedZToMuMuAtLeast1HLT") -setattr(process, "nonIsolatedZToMuMuPlots", nonIsolatedZToMuMuPlots) - -nonIsolatedZToMuMuVtxPlots = copy.deepcopy(goodZToMuMuVtxPlotsTemplate) -nonIsolatedZToMuMuVtxPlots.src = cms.InputTag("nonIsolatedZToMuMuVtxed") -setattr(process, "nonIsolatedZToMuMuVtxPlots", nonIsolatedZToMuMuVtxPlots) - - - -#ZMuMu at least 1 HLT + 1 NON track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -oneNonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -oneNonIsolatedZToMuMuPlots.src = cms.InputTag("oneNonIsolatedZToMuMuAtLeast1HLT") -setattr(process, "oneNonIsolatedZToMuMuPlots", oneNonIsolatedZToMuMuPlots) - -oneNonIsolatedZToMuMuVtxPlots = copy.deepcopy(goodZToMuMuVtxPlotsTemplate) -oneNonIsolatedZToMuMuVtxPlots.src = cms.InputTag("oneNonIsolatedZToMuMuVtxed") -setattr(process, "oneNonIsolatedZToMuMuVtxPlots", oneNonIsolatedZToMuMuVtxPlots) - - - -#ZMuMu at least 1 HLT + 2 NON track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -twoNonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -twoNonIsolatedZToMuMuPlots.src = cms.InputTag("twoNonIsolatedZToMuMuAtLeast1HLT") -setattr(process, "twoNonIsolatedZToMuMuPlots", twoNonIsolatedZToMuMuPlots) - -twoNonIsolatedZToMuMuVtxPlots = copy.deepcopy(goodZToMuMuVtxPlotsTemplate) -twoNonIsolatedZToMuMuVtxPlots.src = cms.InputTag("twoNonIsolatedZToMuMuVtxed") -setattr(process, "twoNonIsolatedZToMuMuVtxPlots", twoNonIsolatedZToMuMuVtxPlots) - - - -etaBounds = [2.1] -## if you want to perform studies on different eta bins... -##### etaBounds = [-2.1, -1.2, -0.8, 0.8, 1.2, 2.1] - -def addModulesFromTemplate(sequence, moduleLabel, src, probeSelection): - print("selection for: ", moduleLabel) - for i in range(len(etaBounds)-1): - etaMin = etaBounds[i] - etaMax = etaBounds[i+1] - module = copy.deepcopy(goodZToMuMuTemplate) - if probeSelection == "single": - cut = "%5.3f < daughter(1).eta < %5.3f" %(etaMin, etaMax) - elif probeSelection == "double": - cut = "%5.3f < daughter(0).eta < %5.3f | %5.3f < daughter(1).eta < %5.3f" %(etaMin, etaMax, etaMin, etaMax) - print(i, ") cut = ", cut) - setattr(module, "cut", cut) - setattr(module, "src", cms.InputTag(src)) - copyModuleLabel = moduleLabel + str(i) - setattr(process, copyModuleLabel, module) - if sequence == None: - sequence = module - else: - sequence = sequence + module - plotModule = copy.deepcopy(goodZToMuMuPlotsTemplate) - setattr(plotModule, "src", cms.InputTag(copyModuleLabel)) - for h in plotModule.histograms: - h.description.setValue(h.description.value() + ": " + "#eta: [%5.3f, %5.3f]" %(etaMin, etaMax)) - plotModuleLabel = moduleLabel + "Plots" + str(i) - setattr(process, plotModuleLabel, plotModule) - sequence = sequence + plotModule - path = cms.Path(sequence) - setattr(process, moduleLabel+"Path", path) - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -#ZMuMu at least 1 HLT + 2 track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate - -#ZMuMu 1 HLT + 2 track-iso -process.goodZToMuMu1HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMu1HLTPlots.src = cms.InputTag("goodZToMuMu1HLT") - -process.goodZToMuMu1HLTVtxPlots = copy.deepcopy(goodZToMuMuVtxPlotsTemplate) -process.goodZToMuMu1HLTVtxPlots.src = cms.InputTag("goodZToMuMu1HLTVtxed") - - -#ZMuMu 2 HLT + 2 track-iso -process.goodZToMuMu2HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMu2HLTPlots.src = cms.InputTag("goodZToMuMu2HLT") - -process.goodZToMuMu2HLTVtxPlots = copy.deepcopy(goodZToMuMuVtxPlotsTemplate) -process.goodZToMuMu2HLTVtxPlots.src = cms.InputTag("goodZToMuMu2HLTVtxed") - - -#ZMuSta First HLT + 2 track-iso -process.goodZToMuMuOneStandAloneMuonPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneStandAloneMuonPlots.src = cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLT") - - -process.goodZToMuMuOneStandAloneMuonVtxPlots = copy.deepcopy(goodZToMuMuVtxPlotsTemplate) -process.goodZToMuMuOneStandAloneMuonVtxPlots.src = cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLTVtxed") - - - -#ZMuTk First HLT + 2 track-iso -process.goodZToMuMuOneTrackPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneTrackPlots.src = cms.InputTag("goodZToMuMuOneTrackFirstHLT") - -process.goodZToMuMuOneTrackVtxPlots = copy.deepcopy(goodZToMuMuVtxPlotsTemplate) -process.goodZToMuMuOneTrackVtxPlots.src = cms.InputTag("goodZToMuMuOneTrackFirstHLTVtxed") - - -## process.dimuonGlobalAnalysis= cms.EDAnalyzer( -## "DimuonsAnalysis", -## src = cms.InputTag("dimuonsGlobal"), # dimuonsOneTrack, dimuonsOneStandAlone -## ptMin = cms.untracked.double(0.0), -## massMin = cms.untracked.double(0.0), -## massMax = cms.untracked.double(120.0), -## etaMin = cms.untracked.double(-1.0), -## etaMax = cms.untracked.double(10.0), -## trkIso = cms.untracked.double(10000), -## chi2Cut = cms.untracked.double(10), -## nHitCut = cms.untracked.int32(10) -## ) - -# N-tuples - -process.goodZToMuMuOneStandAloneMuonNtuple = cms.EDProducer( - "CandViewNtpProducer", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - variables = cms.VPSet( - cms.PSet( - tag = cms.untracked.string("mass"), - quantity = cms.untracked.string("mass") - ) - ) -) - -process.initialGoodZToMuMuPath = cms.Path( - process.goodZToMuMu + - process.zmumuSaMassHistogram -) - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMuAtLeast1HLT+ - process.goodZToMuMuVtxedAtLeast1HLT + - process.goodZToMuMuPlots + -# process.dimuonGlobalAnalysis, - process.goodZToMuMuVtxPlots, - "goodZToMuMu", "goodZToMuMu", - "double") - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMu2HLT + - process.goodZToMuMu2HLTVtxed + - process.goodZToMuMu2HLTPlots + - process.goodZToMuMu2HLTVtxPlots, - "goodZToMuMu2HLT", "goodZToMuMu2HLT", - "double") - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMu1HLT + - process.goodZToMuMu1HLTVtxed + - process.goodZToMuMu1HLTPlots+ - process.goodZToMuMu1HLTVtxPlots, - "goodZToMuMu1HLT", "goodZToMuMu1HLT", - "double") - -process.nonIsolatedZToMuMuPath = cms.Path ( - process.nonIsolatedZToMuMu + - process.nonIsolatedZToMuMuAtLeast1HLT + - process.nonIsolatedZToMuMuVtxed + - process.nonIsolatedZToMuMuPlots+ - process.nonIsolatedZToMuMuVtxPlots -) -process.oneNonIsolatedZToMuMuPath = cms.Path( - process.nonIsolatedZToMuMu + - process.oneNonIsolatedZToMuMu + - process.oneNonIsolatedZToMuMuAtLeast1HLT + - process.oneNonIsolatedZToMuMuVtxed + - process.oneNonIsolatedZToMuMuPlots+ - process.oneNonIsolatedZToMuMuVtxPlots - -) - -process.twoNonIsolatedZToMuMuPath = cms.Path( - process.nonIsolatedZToMuMu + - process.twoNonIsolatedZToMuMu + - process.twoNonIsolatedZToMuMuAtLeast1HLT + - process.twoNonIsolatedZToMuMuVtxed + - process.twoNonIsolatedZToMuMuPlots + - process.twoNonIsolatedZToMuMuVtxPlots -) - -addModulesFromTemplate( - ~process.goodZToMuMu + - process.zToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuonFirstHLT + - process.goodZToMuMuOneStandAloneMuonFirstHLTVtxed + - process.goodZToMuMuOneStandAloneMuonNtuple + - process.goodZToMuMuOneStandAloneMuonPlots + - process.goodZToMuMuOneStandAloneMuonVtxPlots, - "goodZToMuMuOneStandAloneMuon", "goodZToMuMuOneStandAloneMuon", - "single") - -addModulesFromTemplate( - ~process.goodZToMuMu + - ~process.zToMuMuOneStandAloneMuon + - process.zToMuGlobalMuOneTrack + - process.zToMuMuOneTrack + - process.goodZToMuMuOneTrack + - process.goodZToMuMuOneTrackFirstHLT + - process.goodZToMuMuOneTrackFirstHLTVtxed + - process.goodZToMuMuOneTrackPlots + - process.goodZToMuMuOneTrackVtxPlots, - "goodZToMuMuOneTrack", "goodZToMuMuOneTrack", - "single") - -process.out = cms.OutputModule( - "PoolOutputModule", - fileName = cms.untracked.string('zMuSa-UML_test.root'), - outputCommands = cms.untracked.vstring( - "drop *", - "keep *_goodZToMuMuOneStandAloneMuonNtuple_*_*" - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - "goodZToMuMuOneStandAloneMuonPath" - ) - ) -) - -process.endPath = cms.EndPath( - process.eventInfo + - process.out -) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/zToMuMuAnalysis_withGlbMuQualityCuts.py b/ElectroWeakAnalysis/ZMuMu/test/zToMuMuAnalysis_withGlbMuQualityCuts.py deleted file mode 100644 index 98515af2b522e..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/zToMuMuAnalysis_withGlbMuQualityCuts.py +++ /dev/null @@ -1,610 +0,0 @@ -from __future__ import print_function -#analysis code. -#It produces plot for Fit study -#author Luca Lista -#modificated by Noli Pasquale 21-10-2008 -#modified by Annapaola de Cosa 18-12-2008 -#modified by Michele de Gruttola 08-10-2009 - - - -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("ZToMuMuAnalysis") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.maxEvents = cms.untracked.PSet( -# input = cms.untracked.int32(17810) - input = cms.untracked.int32(100) -) - -#process.load("ElectroWeakAnalysis/ZMuMu/OCTSUBSKIM_cff") - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/zmm/testZMuMuSubSkim_1.root", -"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/zmm/testZMuMuSubSkim_2.root", -# "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_1.root", -# "rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_2.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_3.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_4.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_5.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/wmn/testZMuMuSubSkim_6.root", -#"rfio:/dpm/na.infn.it/home/cms/store/user/degrutto/EWK_ZMM_OCT_EX_7TeV/TTbar/testZMuMuSubSkim_1.root", - ) -) - -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("Analysis_zmm_7TeV_qualityCuts_test100ev.root") -) - -zSelection = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2.1 & abs(daughter(1).eta)<2.1 & mass > 20"), - isoCut = cms.double(3.), - ptThreshold = cms.untracked.double(1.5), - etEcalThreshold = cms.untracked.double(0.2), - etHcalThreshold = cms.untracked.double(0.5), - deltaRVetoTrk = cms.untracked.double(0.015), - deltaRTrk = cms.untracked.double(0.3), - deltaREcal = cms.untracked.double(0.25), - deltaRHcal = cms.untracked.double(0.25), - alpha = cms.untracked.double(0.), - beta = cms.untracked.double(-0.75), - relativeIsolation = cms.bool(False) - -# For standard isolation (I_Tkr<3GeV) choose this configuration: -# isoCut = cms.double(3.), -# ptThreshold = cms.untracked.double(1.5), -# etEcalThreshold = cms.untracked.double(0.2), -# etHcalThreshold = cms.untracked.double(0.5), -# deltaRVetoTrk = cms.untracked.double(0.015), -# deltaRTrk = cms.untracked.double(0.3), -# deltaREcal = cms.untracked.double(0.25), -# deltaRHcal = cms.untracked.double(0.25), -# alpha = cms.untracked.double(0.), -# beta = cms.untracked.double(-0.75), -# relativeIsolation = cms.bool(False) - - - ) - -process.goodZToMuMu = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) -#ZMuMu: requiring at least 1 HLT trigger match (for the shape) -process.goodZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMu: requiring 2 HLT trigger match -process.goodZToMuMu2HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("bothMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMu: requiring 1 HLT trigger match -process.goodZToMuMu1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMu"), - condition =cms.string("exactlyOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMu:at least one muon is not isolated -process.nonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -#ZMuMu:1 muon is not isolated -process.oneNonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuOneNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("nonIsolatedZToMuMu"), - filter = cms.bool(True) -) - -#ZMuMu: 2 muons are not isolated -process.twoNonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuTwoNonIsolatedIDSelector", - zSelection, - src = cms.InputTag("nonIsolatedZToMuMu"), - filter = cms.bool(True) -) - - - -#ZMuMunotIso: requiring at least 1 trigger -process.nonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("nonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMuOnenotIso: requiring at least 1 trigger -process.oneNonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("oneNonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -#ZMuMuTwonotIso: requiring at least 1 trigger -process.twoNonIsolatedZToMuMuAtLeast1HLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("twoNonIsolatedZToMuMu"), - condition =cms.string("atLeastOneMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - - - -process.zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - src = cms.InputTag("dimuonsOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneTrack = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneStandAloneMuon = cms.EDFilter( - "ZToMuMuIsolatedIDSelector", - zSelection, - src = cms.InputTag("dimuonsOneStandAloneMuon"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrack"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -#ZMuTk:requiring that the GlobalMuon 'First' has HLT match -process.goodZToMuMuOneTrackFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneTrack"), - condition =cms.string("firstMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneStandAloneMuon"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -#ZMuSta:requiring that the GlobalMuon has HLT match -process.goodZToMuMuOneStandAloneMuonFirstHLT = cms.EDFilter( - "ZHLTMatchFilter", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - condition =cms.string("globalisMatched"), - hltPath = cms.string("HLT_Mu9"), - filter = cms.bool(True) -) - -process.zmumuSaMassHistogram = cms.EDAnalyzer( - "ZMuMuSaMassHistogram", - src_m = cms.InputTag("goodZToMuMu"), - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbin = cms.untracked.int32(200) - # name = cms.untracked.string("zMass") - ) - -goodZToMuMuTemplate = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("replace this string with your cut"), - src = cms.InputTag("goodZToMuMuAtLeast1HLT"), - filter = cms.bool(False) -) - - - -#### Plot #### -zPlots = cms.PSet( - histograms = cms.VPSet( - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zMass"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(2000.0), - nbins = cms.untracked.int32(2000), - name = cms.untracked.string("zMassUpToTwoTeV"), - description = cms.untracked.string("Z mass [GeV/c^{2}]"), - plotquantity = cms.untracked.string("mass") - ), - cms.PSet( - min = cms.untracked.double(-10.0), - max = cms.untracked.double(10.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zEta"), - description = cms.untracked.string("Z #eta"), - plotquantity = cms.untracked.string("eta") - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("zRapidity"), - description = cms.untracked.string("Z y"), - plotquantity = cms.untracked.string("rapidity") - ), - cms.PSet( - min = cms.untracked.double(0), - max = cms.untracked.double(200), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("zPt"), - description = cms.untracked.string("Z p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("pt") - ), - cms.PSet( - min = cms.untracked.double(-4), - max = cms.untracked.double(4), - nbins = cms.untracked.int32(80), - name = cms.untracked.string("zPhi"), - description = cms.untracked.string("Z #phi"), - plotquantity = cms.untracked.string("phi") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu1Pt"), - description = cms.untracked.string("Highest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("max(daughter(0).pt,daughter(1).pt)") - ), - cms.PSet( - min = cms.untracked.double(0.0), - max = cms.untracked.double(200.0), - nbins = cms.untracked.int32(200), - name = cms.untracked.string("mu2Pt"), - description = cms.untracked.string("Lowest muon p_{t} [GeV/c]"), - plotquantity = cms.untracked.string("min(daughter(0).pt,daughter(1).pt)"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu1Eta"), - description = cms.untracked.string("muon1 #eta"), - plotquantity = cms.untracked.string("daughter(0).eta"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu2Eta"), - description = cms.untracked.string("muon2 #eta"), - plotquantity = cms.untracked.string("daughter(1).eta"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu1y"), - description = cms.untracked.string("muon1 y"), - plotquantity = cms.untracked.string("daughter(0).rapidity"), - ), - cms.PSet( - min = cms.untracked.double(-6.0), - max = cms.untracked.double(6.0), - nbins = cms.untracked.int32(120), - name = cms.untracked.string("mu2y"), - description = cms.untracked.string("muon2 y"), - plotquantity = cms.untracked.string("daughter(1).rapidity"), - ), -cms.PSet( - min = cms.untracked.double(-4.0), - max = cms.untracked.double(4.0), - nbins = cms.untracked.int32(80), - name = cms.untracked.string("mu1phi"), - description = cms.untracked.string("muon1 #phi"), - plotquantity = cms.untracked.string("daughter(0).phi"), - ), - cms.PSet( - min = cms.untracked.double(-4.0), - max = cms.untracked.double(4.0), - nbins = cms.untracked.int32(80), - name = cms.untracked.string("mu2phi"), - description = cms.untracked.string("muon2 #phi"), - plotquantity = cms.untracked.string("daughter(1).phi"), - ), - cms.PSet( - min = cms.untracked.double(-0.1), - max = cms.untracked.double(6.9), - nbins = cms.untracked.int32(7000), - name = cms.untracked.string("absMu1phiMinusMu2phi"), - description = cms.untracked.string("|mu1 #phi - mu2 #phi|"), - plotquantity = cms.untracked.string("abs(daughter(0).phi - daughter(1).phi)"), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu1 dxy"), - description = cms.untracked.string("muon1 dxy"), - plotquantity = cms.untracked.string("(- daughter(0).vx * daughter(0).py + daughter(0).vy * daughter(0).px) / daughter(0).pt "), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu2 dxy"), - description = cms.untracked.string("muon2 dxy"), - plotquantity = cms.untracked.string("(- daughter(1).vx * daughter(1).py + daughter(1).vy * daughter(1).px) / daughter(1).pt "), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu1 dz"), - description = cms.untracked.string("muon1 dz"), - plotquantity = cms.untracked.string("daughter(0).vz - ( daughter(0).vx * daughter(0).px + daughter(0).vy * daughter(0).py) / daughter(0).pt * daughter(0).pz / daughter(0).pt"), - ), - cms.PSet( - min = cms.untracked.double(-10), - max = cms.untracked.double(10), - nbins = cms.untracked.int32(1000), - name = cms.untracked.string("mu2 dz"), - description = cms.untracked.string("muon2 dz"), - plotquantity = cms.untracked.string("daughter(1).vz - ( daughter(1).vx * daughter(1).px + daughter(1).vy * daughter(1).py) / daughter(1).pt * daughter(1).pz / daughter(1).pt"), - ) - ) -) - -## # dxy constructed from the vtx position -## dxy0 = " (- daughter(0).vx * daughter(0).py + daughter(0).vy * daughter(0).px) / daughter(0).pt " -## dxy1 = " ( - daughter(1).vx * daughter(1).py + daughter(1).vy * daughter(1).px) / daughter(1).pt " -## # dz constructed from vertex position -## dz0 = " daughter(0).vz - ( daughter(0).vx * daughter(0).px + daughter(0).vy * daughter(0).py) / daughter(0).pt * daughter(0).pz / daughter(0).pt " -## dz1 = " daughter(1).vz - ( daughter(1).vx * daughter(1).px + daughter(1).vy * daughter(1).py) / daughter(1).pt * daughter(1).pz / daughter(1).pt " - - - - -#ZMuMu at least 1 HLT + 2 track-iso (Shape) -goodZToMuMuPlotsTemplate = cms.EDAnalyzer( - "CandViewHistoAnalyzer", - zPlots, - src = cms.InputTag("goodZToMuMuAtLeast1HLT") -) - -#ZMuMu at least 1 HLT + at least 1 NON track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -nonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -nonIsolatedZToMuMuPlots.src = cms.InputTag("nonIsolatedZToMuMuAtLeast1HLT") -setattr(process, "nonIsolatedZToMuMuPlots", nonIsolatedZToMuMuPlots) - -#ZMuMu at least 1 HLT + 1 NON track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -oneNonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -oneNonIsolatedZToMuMuPlots.src = cms.InputTag("oneNonIsolatedZToMuMuAtLeast1HLT") -setattr(process, "oneNonIsolatedZToMuMuPlots", oneNonIsolatedZToMuMuPlots) - -#ZMuMu at least 1 HLT + 2 NON track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate -twoNonIsolatedZToMuMuPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -twoNonIsolatedZToMuMuPlots.src = cms.InputTag("twoNonIsolatedZToMuMuAtLeast1HLT") -setattr(process, "twoNonIsolatedZToMuMuPlots", twoNonIsolatedZToMuMuPlots) - - - - -etaBounds = [2.1] -## if you want to perform studies on different eta bins... -##### etaBounds = [-2.1, -1.2, -0.8, 0.8, 1.2, 2.1] - -def addModulesFromTemplate(sequence, moduleLabel, src, probeSelection): - print("selection for: ", moduleLabel) - for i in range(len(etaBounds)-1): - etaMin = etaBounds[i] - etaMax = etaBounds[i+1] - module = copy.deepcopy(goodZToMuMuTemplate) - if probeSelection == "single": - cut = "%5.3f < daughter(1).eta < %5.3f" %(etaMin, etaMax) - elif probeSelection == "double": - cut = "%5.3f < daughter(0).eta < %5.3f | %5.3f < daughter(1).eta < %5.3f" %(etaMin, etaMax, etaMin, etaMax) - print(i, ") cut = ", cut) - setattr(module, "cut", cut) - setattr(module, "src", cms.InputTag(src)) - copyModuleLabel = moduleLabel + str(i) - setattr(process, copyModuleLabel, module) - if sequence == None: - sequence = module - else: - sequence = sequence + module - plotModule = copy.deepcopy(goodZToMuMuPlotsTemplate) - setattr(plotModule, "src", cms.InputTag(copyModuleLabel)) - for h in plotModule.histograms: - h.description.setValue(h.description.value() + ": " + "#eta: [%5.3f, %5.3f]" %(etaMin, etaMax)) - plotModuleLabel = moduleLabel + "Plots" + str(i) - setattr(process, plotModuleLabel, plotModule) - sequence = sequence + plotModule - path = cms.Path(sequence) - setattr(process, moduleLabel+"Path", path) - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -#ZMuMu at least 1 HLT + 2 track-iso -process.goodZToMuMuPlots = goodZToMuMuPlotsTemplate - -#ZMuMu 1 HLT + 2 track-iso -process.goodZToMuMu1HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMu1HLTPlots.src = cms.InputTag("goodZToMuMu1HLT") - -#ZMuMu 2 HLT + 2 track-iso -process.goodZToMuMu2HLTPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMu2HLTPlots.src = cms.InputTag("goodZToMuMu2HLT") - -#ZMuSta First HLT + 2 track-iso -process.goodZToMuMuOneStandAloneMuonPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneStandAloneMuonPlots.src = cms.InputTag("goodZToMuMuOneStandAloneMuonFirstHLT") - -#ZMuTk First HLT + 2 track-iso -process.goodZToMuMuOneTrackPlots = copy.deepcopy(goodZToMuMuPlotsTemplate) -process.goodZToMuMuOneTrackPlots.src = cms.InputTag("goodZToMuMuOneTrackFirstHLT") - - - - - - -process.globalMuQualityCutsAnalysis= cms.EDAnalyzer( - "GlbMuQualityCutsAnalysis", - src = cms.InputTag("goodZToMuMuAtLeast1HLT"), # dimuonsOneTrack, dimuonsOneStandAlone - ptMin = cms.untracked.double(0.0), - massMin = cms.untracked.double(0.0), - massMax = cms.untracked.double(120.0), - etaMin = cms.untracked.double(-1.0), - etaMax = cms.untracked.double(10.0), - trkIso = cms.untracked.double(10000), - chi2Cut = cms.untracked.double(10), - nHitCut = cms.untracked.int32(10) - ) - - - - - - -# N-tuples - -process.goodZToMuMuOneStandAloneMuonNtuple = cms.EDProducer( - "CandViewNtpProducer", - src = cms.InputTag("goodZToMuMuOneStandAloneMuon"), - variables = cms.VPSet( - cms.PSet( - tag = cms.untracked.string("mass"), - quantity = cms.untracked.string("mass") - ) - ) -) - -process.initialGoodZToMuMuPath = cms.Path( - process.goodZToMuMu + - process.zmumuSaMassHistogram -) - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMuAtLeast1HLT+ - process.goodZToMuMuPlots + - process.globalMuQualityCutsAnalysis, - "goodZToMuMu", "goodZToMuMu", - "double") - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMu2HLT + - process.goodZToMuMu2HLTPlots, - "goodZToMuMu2HLT", "goodZToMuMu2HLT", - "double") - -addModulesFromTemplate( - process.goodZToMuMu + - process.goodZToMuMu1HLT + - process.goodZToMuMu1HLTPlots, - "goodZToMuMu1HLT", "goodZToMuMu1HLT", - "double") - -process.nonIsolatedZToMuMuPath = cms.Path ( - process.nonIsolatedZToMuMu + - process.nonIsolatedZToMuMuAtLeast1HLT + - process.nonIsolatedZToMuMuPlots -) -process.oneNonIsolatedZToMuMuPath = cms.Path( - process.oneNonIsolatedZToMuMu + - process.oneNonIsolatedZToMuMuAtLeast1HLT + - process.oneNonIsolatedZToMuMuPlots -) - -process.twoNonIsolatedZToMuMuPath = cms.Path( - process.twoNonIsolatedZToMuMu + - process.twoNonIsolatedZToMuMuAtLeast1HLT + - process.twoNonIsolatedZToMuMuPlots -) - -addModulesFromTemplate( - ~process.goodZToMuMu + - process.zToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuonFirstHLT + - process.goodZToMuMuOneStandAloneMuonNtuple + - process.goodZToMuMuOneStandAloneMuonPlots, - "goodZToMuMuOneStandAloneMuon", "goodZToMuMuOneStandAloneMuon", - "single") - -addModulesFromTemplate( - ~process.goodZToMuMu + - ~process.zToMuMuOneStandAloneMuon + - process.zToMuGlobalMuOneTrack + - process.zToMuMuOneTrack + - process.goodZToMuMuOneTrack + - process.goodZToMuMuOneTrackFirstHLT + - process.goodZToMuMuOneTrackPlots, - "goodZToMuMuOneTrack", "goodZToMuMuOneTrack", - "single") - -process.out = cms.OutputModule( - "PoolOutputModule", - fileName = cms.untracked.string('zMuSa-UML_test.root'), - outputCommands = cms.untracked.vstring( - "drop *", - "keep *_goodZToMuMuOneStandAloneMuonNtuple_*_*" - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - "goodZToMuMuOneStandAloneMuonPath" - ) - ) -) - -process.endPath = cms.EndPath( - process.eventInfo + - process.out -) - diff --git a/ElectroWeakAnalysis/ZMuMu/test/zToMuMuSubSkim.py b/ElectroWeakAnalysis/ZMuMu/test/zToMuMuSubSkim.py deleted file mode 100644 index d5776bfc22da7..0000000000000 --- a/ElectroWeakAnalysis/ZMuMu/test/zToMuMuSubSkim.py +++ /dev/null @@ -1,146 +0,0 @@ -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process("ZToMuMuHistos") - -process.include("FWCore/MessageLogger/data/MessageLogger.cfi") - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(1000) -) - -process.source = cms.Source( - "PoolSource", - fileNames = cms.untracked.vstring( - "file:/scratch1/cms/data/summer08/skim/dimuons_skim_zmumu.root" - ) -) - -zSelection = cms.PSet( - cut = cms.string("charge = 0 & daughter(0).pt > 20 & daughter(1).pt > 20 & abs(daughter(0).eta)<2 & abs(daughter(1).eta)<2 & mass > 20"), - isoCut = cms.double(100.0), - isolationType = cms.string("track"), -) - -process.goodZToMuMu = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -process.nonIsolatedZToMuMu = cms.EDFilter( - "ZToMuMuNonIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsGlobal"), - filter = cms.bool(True) -) - -process.zToMuGlobalMuOneTrack = cms.EDFilter( - "CandViewRefSelector", - cut = cms.string("daughter(0).isGlobalMuon = 1"), - src = cms.InputTag("dimuonsOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneTrack = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("zToMuGlobalMuOneTrack"), - filter = cms.bool(True) -) - -process.zToMuMuOneStandAloneMuon = cms.EDFilter( - "ZToMuMuIsolatedSelector", - zSelection, - src = cms.InputTag("dimuonsOneStandAloneMuon"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneTrack = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneTrack"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -process.goodZToMuMuOneStandAloneMuon = cms.EDFilter( - "ZMuMuOverlapExclusionSelector", - src = cms.InputTag("zToMuMuOneStandAloneMuon"), - overlap = cms.InputTag("goodZToMuMu"), - filter = cms.bool(True) -) - -process.eventInfo = cms.OutputModule ( - "AsciiOutputModule" -) - -process.out = cms.OutputModule( - "PoolOutputModule", - fileName = cms.untracked.string('file:./Zmm.root'), - outputCommands = cms.untracked.vstring( - "drop *", -# "keep *_genParticles_*_*", -# "keep L1MuRegionalCands_*_*_*", -# "keep L1MuGMTCands_*_*_*", -# "keep L1MuGMTReadoutCollection_*_*_*", - "keep TriggerResults_*_*_*", -# "keep recoTracks_generalTracks_*_*", -# "keep recoTracks_globalMuons_*_*", -# "keep recoTracks_standAloneMuons_*_*", -# "keep recoMuons_muons_*_*", - "keep *_selectedLayer1Muons_*_*", - "keep *_selectedLayer1TrackCands_*_*", - 'keep *_selectedLayer1MuonsTriggerMatch_*_*', -# "keep *_goodTracks_*_*", - "keep *_dimuons_*_*", - "keep *_dimuonsOneTrack_*_*", - "keep *_dimuonsGlobal_*_*", - "keep *_dimuonsOneStandAloneMuon_*_*", -# "keep *_muonMatch_*_*", -# "keep *_allDimuonsMCMatch_*_*", - "keep *_goodZToMuMu__*", - "keep *_nonIsolatedZToMuMu__*", - "keep *_goodZToMuMuOneStandAloneMuon__*", - "keep *_goodZToMuMuOneTrack__*" - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring( - "goodZToMuMuPath", "nonIsolatedZToMuMuPath", - "zToMuMuOneStandAloneMuonPath", "goodZToMuMuOneTrackPath" - ) - ) -) - -process.goodZToMuMuPath = cms.Path( - process.goodZToMuMu -) - -process.nonIsolatedZToMuMuPath = cms.Path( - process.nonIsolatedZToMuMu -) - -process.zToMuMuOneStandAloneMuonPath = cms.Path( - ~process.goodZToMuMu + - process.zToMuMuOneStandAloneMuon + - process.goodZToMuMuOneStandAloneMuon -) - -process.goodZToMuMuOneTrackPath = cms.Path( - ~process.goodZToMuMu + - ~process.zToMuMuOneStandAloneMuon + - process.zToMuGlobalMuOneTrack + - process.zToMuMuOneTrack + - process.goodZToMuMuOneTrack -) - - -process.endPath = cms.EndPath( - process.eventInfo + - process.out -) - diff --git a/EventFilter/CSCRawToDigi/test/testCSCDigi2Raw_cfg.py b/EventFilter/CSCRawToDigi/test/testCSCDigi2Raw_cfg.py index a724408d6a697..8f606a4186175 100644 --- a/EventFilter/CSCRawToDigi/test/testCSCDigi2Raw_cfg.py +++ b/EventFilter/CSCRawToDigi/test/testCSCDigi2Raw_cfg.py @@ -48,11 +48,14 @@ process.DQMStore = cms.Service("DQMStore") # customize messagelogger -process.MessageLogger.destinations = cms.untracked.vstring('cout') +process.MessageLogger.cerr.enable = False process.MessageLogger.debugModules = cms.untracked.vstring('muonCSCDigis') ## categories: 'CSCDCCUnpacker|CSCRawToDigi', 'StatusDigis', 'StatusDigi', 'CSCRawToDigi', 'CSCDCCUnpacker', 'EventInfo', -process.MessageLogger.categories = cms.untracked.vstring("CSCDDUEventData|CSCRawToDigi", 'badData') +process.MessageLogger.CSCDDUEventData = dict() +process.MessageLogger.CSCRawToDigi = dict() +process.MessageLogger.badData = dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/EventFilter/CSCTFRawToDigi/test/analyzer.py b/EventFilter/CSCTFRawToDigi/test/analyzer.py index 1a9b25bcd3947..0dde3feda34ab 100644 --- a/EventFilter/CSCTFRawToDigi/test/analyzer.py +++ b/EventFilter/CSCTFRawToDigi/test/analyzer.py @@ -7,7 +7,7 @@ process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/EventFilter/CSCTFRawToDigi/test/data.py b/EventFilter/CSCTFRawToDigi/test/data.py index d6e25b2ab2ed9..73b50a89dff0b 100644 --- a/EventFilter/CSCTFRawToDigi/test/data.py +++ b/EventFilter/CSCTFRawToDigi/test/data.py @@ -7,7 +7,7 @@ process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/EventFilter/CSCTFRawToDigi/test/testCSCTFRawToDigi_cfg.py b/EventFilter/CSCTFRawToDigi/test/testCSCTFRawToDigi_cfg.py index fd2db13aee393..4821703cc05bb 100644 --- a/EventFilter/CSCTFRawToDigi/test/testCSCTFRawToDigi_cfg.py +++ b/EventFilter/CSCTFRawToDigi/test/testCSCTFRawToDigi_cfg.py @@ -4,7 +4,7 @@ process.load('EventFilter.CSCTFRawToDigi.csctfpacker_cfi') process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(128) ) process.load('FWCore.MessageLogger.MessageLogger_cfi') -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') process.source = cms.Source('EmptySource') diff --git a/EventFilter/CTPPSRawToDigi/src/CTPPSPixelDataFormatter.cc b/EventFilter/CTPPSRawToDigi/src/CTPPSPixelDataFormatter.cc index 35bdf10669983..b42bf70341085 100644 --- a/EventFilter/CTPPSRawToDigi/src/CTPPSPixelDataFormatter.cc +++ b/EventFilter/CTPPSRawToDigi/src/CTPPSPixelDataFormatter.cc @@ -113,11 +113,10 @@ void CTPPSPixelDataFormatter::interpretRawData( LogTrace("") << "DATA: " << print(*word); auto ww = *word; - if - UNLIKELY(ww == 0) { - m_WordCounter--; - continue; - } + if UNLIKELY (ww == 0) { + m_WordCounter--; + continue; + } int nlink = (ww >> m_LINK_shift) & m_LINK_mask; int nroc = (ww >> m_ROC_shift) & m_ROC_mask; @@ -239,7 +238,7 @@ void CTPPSPixelDataFormatter::formatRawData(unsigned int lvl1_ID, // since raw words are written in the form of 64-bit packets // add extra 32-bit word to make number of words even if necessary if (words.find(fedId)->second.size() % 2 != 0) - words[fedId].push_back(Word32(0)); + words[fedId].emplace_back(0); // size in Bytes; create output structure size_t dataSize = words.find(fedId)->second.size() * sizeof(Word32); diff --git a/EventFilter/CTPPSRawToDigi/src/CTPPSTotemDataFormatter.cc b/EventFilter/CTPPSRawToDigi/src/CTPPSTotemDataFormatter.cc index 4368b6ecaacd9..0dd75374b4dc1 100644 --- a/EventFilter/CTPPSRawToDigi/src/CTPPSTotemDataFormatter.cc +++ b/EventFilter/CTPPSRawToDigi/src/CTPPSTotemDataFormatter.cc @@ -101,8 +101,8 @@ void CTPPSTotemDataFormatter::formatRawData(unsigned int lvl1_ID, int fedId = itFed.first; int wordsS = words.find(fedId)->second.size(); //due to OrbitCounter block at RawDataUnpacker - words16[fedId].push_back(Word16(0)); - words16[fedId].push_back(Word16(0)); + words16[fedId].emplace_back(0); + words16[fedId].emplace_back(0); //writing data in 16-bit words for (int k = 0; k < wordsS; k++) { for (int b = 0; b < 12; b++) { @@ -112,7 +112,7 @@ void CTPPSTotemDataFormatter::formatRawData(unsigned int lvl1_ID, // since raw words are written in the form of 64-bit packets // add extra 16-bit words to make number of words even if necessary while (words16.find(fedId)->second.size() % 4 != 0) - words16[fedId].push_back(Word16(0)); + words16[fedId].emplace_back(0); // size in Bytes; create output structure auto dataSize = (words16.find(fedId)->second.size()) * sizeof(Word16); diff --git a/EventFilter/CTPPSRawToDigi/src/RPixErrorChecker.cc b/EventFilter/CTPPSRawToDigi/src/RPixErrorChecker.cc index 1c319dc322c55..ecd7e09590276 100644 --- a/EventFilter/CTPPSRawToDigi/src/RPixErrorChecker.cc +++ b/EventFilter/CTPPSRawToDigi/src/RPixErrorChecker.cc @@ -21,8 +21,7 @@ bool RPixErrorChecker::checkCRC(bool& errorsInEvent, int fedId, const Word64* tr LogDebug("CRCCheck") << "CRC check failed, errorType = 39"; if (includeErrors_) { int errorType = 39; - CTPPSPixelDataError error(*trailer, errorType, fedId); - errors[dummyDetId].push_back(error); + errors[dummyDetId].emplace_back(*trailer, errorType, fedId); } return false; } @@ -37,8 +36,7 @@ bool RPixErrorChecker::checkHeader(bool& errorsInEvent, int fedId, const Word64* errorsInEvent = true; if (includeErrors_) { int errorType = 32; - CTPPSPixelDataError error(*header, errorType, fedId); - errors[dummyDetId].push_back(error); + errors[dummyDetId].emplace_back(*header, errorType, fedId); } } return fedHeader.moreHeaders(); @@ -50,8 +48,7 @@ bool RPixErrorChecker::checkTrailer( if (!fedTrailer.check()) { if (includeErrors_) { int errorType = 33; - CTPPSPixelDataError error(*trailer, errorType, fedId); - errors[dummyDetId].push_back(error); + errors[dummyDetId].emplace_back(*trailer, errorType, fedId); } errorsInEvent = true; LogDebug("FedTrailerCheck") << "fedTrailer.check failed, Fed: " << fedId << ", errorType = 33"; @@ -62,8 +59,7 @@ bool RPixErrorChecker::checkTrailer( errorsInEvent = true; if (includeErrors_) { int errorType = 34; - CTPPSPixelDataError error(*trailer, errorType, fedId); - errors[dummyDetId].push_back(error); + errors[dummyDetId].emplace_back(*trailer, errorType, fedId); } } return fedTrailer.moreTrailers(); @@ -72,8 +68,8 @@ bool RPixErrorChecker::checkTrailer( bool RPixErrorChecker::checkROC( bool& errorsInEvent, int fedId, uint32_t iD, const Word32& errorWord, Errors& errors) const { int errorType = (errorWord >> ROC_shift) & ERROR_mask; - if - LIKELY(errorType < 25) return true; + if LIKELY (errorType < 25) + return true; switch (errorType) { case (25): { @@ -129,9 +125,7 @@ bool RPixErrorChecker::checkROC( } /// store error - CTPPSPixelDataError error(errorWord, errorType, fedId); - - errors[iD].push_back(error); + errors[iD].emplace_back(errorWord, errorType, fedId); } return false; @@ -162,8 +156,6 @@ void RPixErrorChecker::conversionError( LogDebug("ErrorChecker::conversionError") << " cabling check returned unexpected result, status = " << state; }; - if (includeErrors_ && errorType > 0) { - CTPPSPixelDataError error(errorWord, errorType, fedId); - errors[iD].push_back(error); - } + if (includeErrors_ && errorType > 0) + errors[iD].emplace_back(errorWord, errorType, fedId); } diff --git a/EventFilter/CTPPSRawToDigi/src/RawDataUnpacker.cc b/EventFilter/CTPPSRawToDigi/src/RawDataUnpacker.cc index 8cb62c92e4cc0..e6c8423e5ae5d 100644 --- a/EventFilter/CTPPSRawToDigi/src/RawDataUnpacker.cc +++ b/EventFilter/CTPPSRawToDigi/src/RawDataUnpacker.cc @@ -30,7 +30,7 @@ int RawDataUnpacker::run(int fedId, return 1; } - fedInfoColl.push_back(TotemFEDInfo(fedId)); + fedInfoColl.emplace_back(fedId); return processOptoRxFrame((const word *)data.data(), size_in_words, fedInfoColl.back(), &coll); } diff --git a/EventFilter/CTPPSRawToDigi/src/RawToDigiConverter.cc b/EventFilter/CTPPSRawToDigi/src/RawToDigiConverter.cc index 7db688efe01ea..601273c439ddb 100644 --- a/EventFilter/CTPPSRawToDigi/src/RawToDigiConverter.cc +++ b/EventFilter/CTPPSRawToDigi/src/RawToDigiConverter.cc @@ -220,7 +220,7 @@ void RawToDigiConverter::run(const VFATFrameCollection &input, // skip masked channels if (!anMa.fullMask && anMa.maskedChannels.find(ch) == anMa.maskedChannels.end()) { DetSet &digiDetSet = rpData.find_or_insert(detId); - digiDetSet.push_back(TotemRPDigi(offset + ch)); + digiDetSet.emplace_back(offset + ch); } } } diff --git a/EventFilter/EcalRawToDigi/BuildFile.xml b/EventFilter/EcalRawToDigi/BuildFile.xml index 88f864737813e..a00aec3dfa99b 100644 --- a/EventFilter/EcalRawToDigi/BuildFile.xml +++ b/EventFilter/EcalRawToDigi/BuildFile.xml @@ -1,14 +1,16 @@ - - + - + + + + diff --git a/EventFilter/EcalRawToDigi/bin/BuildFile.xml b/EventFilter/EcalRawToDigi/bin/BuildFile.xml new file mode 100644 index 0000000000000..ff797eb8d6e9f --- /dev/null +++ b/EventFilter/EcalRawToDigi/bin/BuildFile.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/EventFilter/EcalRawToDigi/bin/makeEcalRaw2DigiGpuValidationPlots.cpp b/EventFilter/EcalRawToDigi/bin/makeEcalRaw2DigiGpuValidationPlots.cpp new file mode 100644 index 0000000000000..609c277e19288 --- /dev/null +++ b/EventFilter/EcalRawToDigi/bin/makeEcalRaw2DigiGpuValidationPlots.cpp @@ -0,0 +1,210 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "DataFormats/Common/interface/Wrapper.h" +#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" + +int main(int argc, char* argv[]) { + if (argc < 3) { + std::cout << "run with: ./ \n"; + exit(0); + } + + // branches to use + edm::Wrapper*wgpuEB = nullptr, *wcpuEB = nullptr; + edm::Wrapper*wgpuEE = nullptr, *wcpuEE = nullptr; + + std::string inFileName{argv[1]}; + std::string outFileName{argv[2]}; + + // prep output + TFile rfout{outFileName.c_str(), "recreate"}; + + int const nbins = 400; + float const last = 4096.; + auto hADCEBGPU = new TH1D("hADCEBGPU", "hADCEBGPU", nbins, 0, last); + auto hADCEBCPU = new TH1D("hADCEBCPU", "hADCEBCPU", nbins, 0, last); + auto hADCEEGPU = new TH1D("hADCEEGPU", "hADCEEGPU", nbins, 0, last); + auto hADCEECPU = new TH1D("hADCEECPU", "hADCEECPU", nbins, 0, last); + + auto hGainEBGPU = new TH1D("hGainEBGPU", "hGainEBGPU", 4, 0, 4); + auto hGainEBCPU = new TH1D("hGainEBCPU", "hGainEBCPU", 4, 0, 4); + auto hGainEEGPU = new TH1D("hGainEEGPU", "hGainEEGPU", 4, 0, 4); + auto hGainEECPU = new TH1D("hGainEECPU", "hGainEECPU", 4, 0, 4); + + auto hADCEBGPUvsCPU = new TH2D("hADCEBGPUvsCPU", "hADCEBGPUvsCPU", nbins, 0, last, nbins, 0, last); + auto hADCEEGPUvsCPU = new TH2D("hADCEEGPUvsCPU", "hADCEEGPUvsCPU", nbins, 0, last, nbins, 0, last); + auto hGainEBGPUvsCPU = new TH2D("hGainEBGPUvsCPU", "hGainEBGPUvsCPU", 4, 0, 4, 4, 0, 4); + auto hGainEEGPUvsCPU = new TH2D("hGainEEGPUvsCPU", "hGainEEGPUvsCPU", 4, 0, 4, 4, 0, 4); + + // prep input + TFile rfin{inFileName.c_str()}; + TTree* rt = (TTree*)rfin.Get("Events"); + rt->SetBranchAddress("EBDigiCollection_ecalCPUDigisProducer_ebDigis_RECO.", &wgpuEB); + rt->SetBranchAddress("EEDigiCollection_ecalCPUDigisProducer_eeDigis_RECO.", &wgpuEE); + rt->SetBranchAddress("EBDigiCollection_ecalDigis_ebDigis_RECO.", &wcpuEB); + rt->SetBranchAddress("EEDigiCollection_ecalDigis_eeDigis_RECO.", &wcpuEE); + + // accumulate + auto const nentries = rt->GetEntries(); + std::cout << ">>> nentries = " << nentries << std::endl; + for (int ie = 0; ie < nentries; ++ie) { + rt->GetEntry(ie); + + auto const ngpuebs = wgpuEB->bareProduct().size(); + auto const ncpuebs = wcpuEB->bareProduct().size(); + auto const ngpuees = wgpuEE->bareProduct().size(); + auto const ncpuees = wcpuEE->bareProduct().size(); + + if (ngpuebs != ncpuebs or ngpuees != ncpuees) { + std::cerr << "*** mismatch in ndigis: " + << "ie = " << ie << " ngpuebs = " << ngpuebs << " ncpuebs = " << ncpuebs << " ngpuees = " << ngpuees + << " ncpuees = " << ncpuees << std::endl; + + // this is a must for now + //assert(ngpuebs==ncpuebs); + //assert(ngpuees==ncpuees); + } + + // assume identical sizes + auto const& idsgpuEB = wgpuEB->bareProduct().ids(); + auto const& datagpuEB = wgpuEB->bareProduct().data(); + auto const& idscpuEB = wcpuEB->bareProduct().ids(); + auto const& datacpuEB = wcpuEB->bareProduct().data(); + for (uint32_t ieb = 0; ieb < ngpuebs; ++ieb) { + auto const& idgpu = idsgpuEB[ieb]; + auto iter2idcpu = std::find(idscpuEB.begin(), idscpuEB.end(), idgpu); + // FIXME + assert(idgpu == *iter2idcpu); + + auto const ptrdiff = iter2idcpu - idscpuEB.begin(); + for (uint32_t s = 0u; s < 10u; s++) { + EcalMGPASample sampleGPU{datagpuEB[ieb * 10 + s]}; + EcalMGPASample sampleCPU{datacpuEB[ptrdiff * 10 + s]}; + + hADCEBGPU->Fill(sampleGPU.adc()); + hGainEBGPU->Fill(sampleGPU.gainId()); + hADCEBCPU->Fill(sampleCPU.adc()); + hGainEBCPU->Fill(sampleCPU.gainId()); + hADCEBGPUvsCPU->Fill(sampleCPU.adc(), sampleGPU.adc()); + hGainEBGPUvsCPU->Fill(sampleCPU.gainId(), sampleGPU.gainId()); + } + } + + auto const& idsgpuEE = wgpuEE->bareProduct().ids(); + auto const& datagpuEE = wgpuEE->bareProduct().data(); + auto const& idscpuEE = wcpuEE->bareProduct().ids(); + auto const& datacpuEE = wcpuEE->bareProduct().data(); + for (uint32_t iee = 0; iee < ngpuees; ++iee) { + auto const& idgpu = idsgpuEE[iee]; + auto iter2idcpu = std::find(idscpuEE.begin(), idscpuEE.end(), idgpu); + // FIXME + assert(idgpu == *iter2idcpu); + + // get the digis + auto const ptrdiff = iter2idcpu - idscpuEE.begin(); + for (uint32_t s = 0u; s < 10u; s++) { + EcalMGPASample sampleGPU{datagpuEE[iee * 10 + s]}; + EcalMGPASample sampleCPU{datacpuEE[ptrdiff * 10 + s]}; + + hADCEEGPU->Fill(sampleGPU.adc()); + hGainEEGPU->Fill(sampleGPU.gainId()); + hADCEECPU->Fill(sampleCPU.adc()); + hGainEECPU->Fill(sampleCPU.gainId()); + hADCEEGPUvsCPU->Fill(sampleCPU.adc(), sampleGPU.adc()); + hGainEEGPUvsCPU->Fill(sampleCPU.gainId(), sampleGPU.gainId()); + } + } + } + + { + TCanvas c{"plots", "plots", 4200, 6200}; + c.Divide(2, 4); + c.cd(1); + { + gPad->SetLogy(); + hADCEBCPU->SetLineColor(kBlack); + hADCEBCPU->SetLineWidth(1.); + hADCEBCPU->Draw(""); + hADCEBGPU->SetLineColor(kBlue); + hADCEBGPU->SetLineWidth(1.); + hADCEBGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats*)hADCEBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + c.cd(2); + { + gPad->SetLogy(); + hADCEECPU->SetLineColor(kBlack); + hADCEECPU->SetLineWidth(1.); + hADCEECPU->Draw(""); + hADCEEGPU->SetLineColor(kBlue); + hADCEEGPU->SetLineWidth(1.); + hADCEEGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats*)hADCEEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + c.cd(3); + { + gPad->SetLogy(); + hGainEBCPU->SetLineColor(kBlack); + hGainEBCPU->SetLineWidth(1.); + hGainEBCPU->Draw(""); + hGainEBGPU->SetLineColor(kBlue); + hGainEBGPU->SetLineWidth(1.); + hGainEBGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats*)hGainEBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + c.cd(4); + { + gPad->SetLogy(); + hGainEECPU->SetLineColor(kBlack); + hGainEECPU->SetLineWidth(1.); + hGainEECPU->Draw(""); + hGainEEGPU->SetLineColor(kBlue); + hGainEEGPU->SetLineWidth(1.); + hGainEEGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats*)hGainEEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + c.cd(5); + hADCEBGPUvsCPU->Draw("colz"); + c.cd(6); + hADCEEGPUvsCPU->Draw("colz"); + c.cd(7); + hGainEBGPUvsCPU->Draw("colz"); + c.cd(8); + hGainEEGPUvsCPU->Draw("colz"); + c.SaveAs("plots.pdf"); + } + + rfin.Close(); + rfout.Write(); + rfout.Close(); +} diff --git a/EventFilter/EcalRawToDigi/interface/EcalRegionCabling.h b/EventFilter/EcalRawToDigi/interface/EcalRegionCabling.h index fa6e9f5d5a161..38a9ebdf18cb8 100644 --- a/EventFilter/EcalRawToDigi/interface/EcalRegionCabling.h +++ b/EventFilter/EcalRawToDigi/interface/EcalRegionCabling.h @@ -1,14 +1,11 @@ -#ifndef EcalRegionCabling_H -#define EcalRegionCabling_H +#ifndef EventFilter_EcalRawToDigi_interface_EcalRegionCabling_h +#define EventFilter_EcalRawToDigi_interface_EcalRegionCabling_h -#include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h" -#include "Geometry/EcalMapping/interface/ESElectronicsMapper.h" - -#include "DataFormats/EcalRecHit/interface/EcalRecHit.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/FEDRawData/interface/FEDNumbering.h" - #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "Geometry/EcalMapping/interface/ESElectronicsMapper.h" +#include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h" class EcalRegionCabling { public: @@ -73,4 +70,4 @@ class EcalRegionCabling { const ESElectronicsMapper* es_mapping_; }; -#endif +#endif // EventFilter_EcalRawToDigi_interface_EcalRegionCabling_h diff --git a/EventFilter/EcalRawToDigi/interface/ElectronicsIdGPU.h b/EventFilter/EcalRawToDigi/interface/ElectronicsIdGPU.h new file mode 100644 index 0000000000000..abedcf5a2d479 --- /dev/null +++ b/EventFilter/EcalRawToDigi/interface/ElectronicsIdGPU.h @@ -0,0 +1,91 @@ +#ifndef EventFilter_EcalRawToDigi_interface_ElectronicsIdGPU_h +#define EventFilter_EcalRawToDigi_interface_ElectronicsIdGPU_h + +#include + +#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" + +namespace ecal { + namespace raw { + + /** \brief Ecal readout channel identification + [32:20] Unused (so far) + [19:13] DCC id + [12:6] tower + [5:3] strip + [2:0] xtal + Index starts from 1 + */ + + class ElectronicsIdGPU { + public: + /** Default constructor -- invalid value */ + constexpr ElectronicsIdGPU() : id_{0xFFFFFFFFu} {} + /** from raw */ + constexpr ElectronicsIdGPU(uint32_t id) : id_{id} {} + /** Constructor from dcc,tower,channel **/ + constexpr ElectronicsIdGPU(uint8_t const dccid, uint8_t const towerid, uint8_t const stripid, uint8_t const xtalid) + : id_{static_cast((xtalid & 0x7) | ((stripid & 0x7) << 3) | ((towerid & 0x7F) << 6) | + ((dccid & 0x7F) << 13))} {} + + constexpr uint32_t operator()() { return id_; } + constexpr uint32_t rawId() const { return id_; } + + /// get the DCC (Ecal Local DCC value not global one) id + constexpr uint8_t dccId() const { return (id_ >> 13) & 0x7F; } + /// get the tower id + constexpr uint8_t towerId() const { return (id_ >> 6) & 0x7F; } + /// get the tower id + constexpr uint8_t stripId() const { return (id_ >> 3) & 0x7; } + /// get the channel id + constexpr uint8_t xtalId() const { return (id_ & 0x7); } + + /// get the subdet + //EcalSubdetector subdet() const; + + /// get a fast, compact, unique index for linear lookups (maximum value = 4194303) + constexpr uint32_t linearIndex() const { return id_ & 0x3FFFFF; } + + /// so far for EndCap only : + //int channelId() const; // xtal id between 1 and 25 + + static constexpr int kTowersInPhi = 4; // see EBDetId + static constexpr int kCrystalsInPhi = 20; // see EBDetId + + static constexpr uint8_t MAX_DCCID = 54; //To be updated with correct and final number + static constexpr uint8_t MIN_DCCID = 1; + static constexpr uint8_t MAX_TOWERID = 70; + static constexpr uint8_t MIN_TOWERID = 1; + static constexpr uint8_t MAX_STRIPID = 5; + static constexpr uint8_t MIN_STRIPID = 1; + static constexpr uint8_t MAX_CHANNELID = 25; + static constexpr uint8_t MIN_CHANNELID = 1; + static constexpr uint8_t MAX_XTALID = 5; + static constexpr uint8_t MIN_XTALID = 1; + + static constexpr int MIN_DCCID_EEM = 1; + static constexpr int MAX_DCCID_EEM = 9; + static constexpr int MIN_DCCID_EBM = 10; + static constexpr int MAX_DCCID_EBM = 27; + static constexpr int MIN_DCCID_EBP = 28; + static constexpr int MAX_DCCID_EBP = 45; + static constexpr int MIN_DCCID_EEP = 46; + static constexpr int MAX_DCCID_EEP = 54; + + static constexpr int DCCID_PHI0_EBM = 10; + static constexpr int DCCID_PHI0_EBP = 28; + + static constexpr int kDCCChannelBoundary = 17; + static constexpr int DCC_EBM = 10; // id of the DCC in EB- which contains phi=0 deg. + static constexpr int DCC_EBP = 28; // id of the DCC in EB+ which contains phi=0 deg. + static constexpr int DCC_EEM = 1; // id of the DCC in EE- which contains phi=0 deg. + static constexpr int DCC_EEP = 46; // id of the DCC in EE+ which contains phi=0 deg. + + private: + uint32_t id_; + }; + + } // namespace raw +} // namespace ecal + +#endif // EventFilter_EcalRawToDigi_interface_ElectronicsIdGPU_h diff --git a/EventFilter/EcalRawToDigi/interface/ElectronicsMappingGPU.h b/EventFilter/EcalRawToDigi/interface/ElectronicsMappingGPU.h new file mode 100644 index 0000000000000..004821afe3ed8 --- /dev/null +++ b/EventFilter/EcalRawToDigi/interface/ElectronicsMappingGPU.h @@ -0,0 +1,47 @@ +#ifndef EventFilter_EcalRawToDigi_interface_ElectronicsMappingGPU_h +#define EventFilter_EcalRawToDigi_interface_ElectronicsMappingGPU_h + +#include "CondFormats/EcalObjects/interface/EcalMappingElectronics.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +namespace ecal { + namespace raw { + + class ElectronicsMappingGPU { + public: + struct Product { + ~Product(); + uint32_t* eid2did; + }; + +#ifndef __CUDACC__ + + // rearrange pedestals + ElectronicsMappingGPU(EcalMappingElectronics const&); + + // will call dealloation for Product thru ~Product + ~ElectronicsMappingGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + + // + static std::string name() { return std::string{"ecalElectronicsMappingGPU"}; } + + private: + // in the future, we need to arrange so to avoid this copy on the host + // store eb first then ee + std::vector> eid2did_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ + }; + + } // namespace raw +} // namespace ecal + +#endif // EventFilter_EcalRawToDigi_interface_ElectronicsMappingGPU_h diff --git a/EventFilter/EcalRawToDigi/plugins/BuildFile.xml b/EventFilter/EcalRawToDigi/plugins/BuildFile.xml index e55f1bcaab660..c3c2bd988e2c3 100644 --- a/EventFilter/EcalRawToDigi/plugins/BuildFile.xml +++ b/EventFilter/EcalRawToDigi/plugins/BuildFile.xml @@ -1,10 +1,14 @@ - + + - + - + + + + diff --git a/EventFilter/EcalRawToDigi/plugins/DeclsForKernels.h b/EventFilter/EcalRawToDigi/plugins/DeclsForKernels.h new file mode 100644 index 0000000000000..a6429121adc82 --- /dev/null +++ b/EventFilter/EcalRawToDigi/plugins/DeclsForKernels.h @@ -0,0 +1,70 @@ +#ifndef EventFilter_EcalRawToDigi_plugins_DeclsForKernels_h +#define EventFilter_EcalRawToDigi_plugins_DeclsForKernels_h + +#include + +#include "CUDADataFormats/EcalDigi/interface/DigisCollection.h" +#include "DataFormats/EcalDigi/interface/EcalDataFrame.h" +#include "EventFilter/EcalRawToDigi/interface/DCCRawDataDefinitions.h" +#include "EventFilter/EcalRawToDigi/interface/ElectronicsMappingGPU.h" +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" + +namespace ecal { + namespace raw { + + constexpr auto empty_event_size = EMPTYEVENTSIZE; + constexpr uint32_t nfeds_max = 54; + constexpr uint32_t nbytes_per_fed_max = 10 * 1024; + + struct InputDataCPU { + cms::cuda::host::unique_ptr data; + cms::cuda::host::unique_ptr offsets; + cms::cuda::host::unique_ptr feds; + }; + + struct ConfigurationParameters { + uint32_t maxChannelsEE; + uint32_t maxChannelsEB; + }; + + struct OutputDataCPU { + // [0] - eb, [1] - ee + cms::cuda::host::unique_ptr nchannels; + }; + + struct OutputDataGPU { + DigisCollection<::calo::common::DevStoragePolicy> digisEB, digisEE; + + void allocate(ConfigurationParameters const &config, cudaStream_t cudaStream) { + digisEB.data = + cms::cuda::make_device_unique(config.maxChannelsEB * EcalDataFrame::MAXSAMPLES, cudaStream); + digisEE.data = + cms::cuda::make_device_unique(config.maxChannelsEE * EcalDataFrame::MAXSAMPLES, cudaStream); + digisEB.ids = cms::cuda::make_device_unique(config.maxChannelsEB, cudaStream); + digisEE.ids = cms::cuda::make_device_unique(config.maxChannelsEE, cudaStream); + } + }; + + struct ScratchDataGPU { + // [0] = EB + // [1] = EE + cms::cuda::device::unique_ptr pChannelsCounter; + }; + + struct InputDataGPU { + cms::cuda::device::unique_ptr data; + cms::cuda::device::unique_ptr offsets; + cms::cuda::device::unique_ptr feds; + }; + + struct ConditionsProducts { + ElectronicsMappingGPU::Product const &eMappingProduct; + }; + + } // namespace raw +} // namespace ecal + +#endif // EventFilter_EcalRawToDigi_plugins_DeclsForKernels_h diff --git a/EventFilter/EcalRawToDigi/plugins/EcalCPUDigisProducer.cc b/EventFilter/EcalRawToDigi/plugins/EcalCPUDigisProducer.cc new file mode 100644 index 0000000000000..5563dd5b52cc8 --- /dev/null +++ b/EventFilter/EcalRawToDigi/plugins/EcalCPUDigisProducer.cc @@ -0,0 +1,196 @@ +#include + +#include "CUDADataFormats/EcalDigi/interface/DigisCollection.h" +#include "CondFormats/DataRecord/interface/EcalMappingElectronicsRcd.h" +#include "DataFormats/EcalDetId/interface/EcalDetIdCollections.h" +#include "DataFormats/EcalDigi/interface/EcalDataFrame.h" +#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" +#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" +#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" +#include "EventFilter/EcalRawToDigi/interface/ElectronicsMappingGPU.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +#include "DeclsForKernels.h" +#include "UnpackGPU.h" + +class EcalCPUDigisProducer : public edm::stream::EDProducer { +public: + explicit EcalCPUDigisProducer(edm::ParameterSet const& ps); + ~EcalCPUDigisProducer() override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + void acquire(edm::Event const&, edm::EventSetup const&, edm::WaitingTaskWithArenaHolder) override; + void produce(edm::Event&, edm::EventSetup const&) override; + +private: + // input digi collections in GPU-friendly format + using InputProduct = cms::cuda::Product>; + edm::EDGetTokenT digisInEBToken_; + edm::EDGetTokenT digisInEEToken_; + + // output digi collections in legacy format + edm::EDPutTokenT digisOutEBToken_; + edm::EDPutTokenT digisOutEEToken_; + + // whether to produce dummy integrity collections + bool produceDummyIntegrityCollections_; + + // dummy SRP collections + edm::EDPutTokenT ebSrFlagToken_; + edm::EDPutTokenT eeSrFlagToken_; + + // dummy integrity for xtal data + edm::EDPutTokenT ebIntegrityGainErrorsToken_; + edm::EDPutTokenT ebIntegrityGainSwitchErrorsToken_; + edm::EDPutTokenT ebIntegrityChIdErrorsToken_; + + // dummy integrity for xtal data - EE specific (to be rivisited towards EB+EE common collection) + edm::EDPutTokenT eeIntegrityGainErrorsToken_; + edm::EDPutTokenT eeIntegrityGainSwitchErrorsToken_; + edm::EDPutTokenT eeIntegrityChIdErrorsToken_; + + // dummy integrity errors + edm::EDPutTokenT integrityTTIdErrorsToken_; + edm::EDPutTokenT integrityBlockSizeErrorsToken_; + + // FIXME better way to pass pointers from acquire to produce? + std::vector> idsebtmp, idseetmp; + std::vector> dataebtmp, dataeetmp; +}; + +void EcalCPUDigisProducer::fillDescriptions(edm::ConfigurationDescriptions& confDesc) { + edm::ParameterSetDescription desc; + + desc.add("digisInLabelEB", edm::InputTag{"ecalRawToDigiGPU", "ebDigis"}); + desc.add("digisInLabelEE", edm::InputTag{"ecalRawToDigiGPU", "eeDigis"}); + desc.add("digisOutLabelEB", "ebDigis"); + desc.add("digisOutLabelEE", "eeDigis"); + + desc.add("produceDummyIntegrityCollections", false); + + std::string label = "ecalCPUDigisProducer"; + confDesc.add(label, desc); +} + +EcalCPUDigisProducer::EcalCPUDigisProducer(const edm::ParameterSet& ps) + : // input digi collections in GPU-friendly format + digisInEBToken_{consumes(ps.getParameter("digisInLabelEB"))}, + digisInEEToken_{consumes(ps.getParameter("digisInLabelEE"))}, + // output digi collections in legacy format + digisOutEBToken_{produces(ps.getParameter("digisOutLabelEB"))}, + digisOutEEToken_{produces(ps.getParameter("digisOutLabelEE"))}, + // whether to produce dummy integrity collections + produceDummyIntegrityCollections_{ps.getParameter("produceDummyIntegrityCollections")}, + // dummy SRP collections + ebSrFlagToken_{produceDummyIntegrityCollections_ ? produces() + : edm::EDPutTokenT{}}, + eeSrFlagToken_{produceDummyIntegrityCollections_ ? produces() + : edm::EDPutTokenT{}}, + // dummy integrity for xtal data + ebIntegrityGainErrorsToken_{produceDummyIntegrityCollections_ + ? produces("EcalIntegrityGainErrors") + : edm::EDPutTokenT{}}, + ebIntegrityGainSwitchErrorsToken_{produceDummyIntegrityCollections_ + ? produces("EcalIntegrityGainSwitchErrors") + : edm::EDPutTokenT{}}, + ebIntegrityChIdErrorsToken_{produceDummyIntegrityCollections_ + ? produces("EcalIntegrityChIdErrors") + : edm::EDPutTokenT{}}, + // dummy integrity for xtal data - EE specific (to be rivisited towards EB+EE common collection) + eeIntegrityGainErrorsToken_{produceDummyIntegrityCollections_ + ? produces("EcalIntegrityGainErrors") + : edm::EDPutTokenT{}}, + eeIntegrityGainSwitchErrorsToken_{produceDummyIntegrityCollections_ + ? produces("EcalIntegrityGainSwitchErrors") + : edm::EDPutTokenT{}}, + eeIntegrityChIdErrorsToken_{produceDummyIntegrityCollections_ + ? produces("EcalIntegrityChIdErrors") + : edm::EDPutTokenT{}}, + // dummy integrity errors + integrityTTIdErrorsToken_{produceDummyIntegrityCollections_ + ? produces("EcalIntegrityTTIdErrors") + : edm::EDPutTokenT{}}, + integrityBlockSizeErrorsToken_{produceDummyIntegrityCollections_ + ? produces("EcalIntegrityBlockSizeErrors") + : edm::EDPutTokenT{}} {} + +EcalCPUDigisProducer::~EcalCPUDigisProducer() {} + +void EcalCPUDigisProducer::acquire(edm::Event const& event, + edm::EventSetup const& setup, + edm::WaitingTaskWithArenaHolder taskHolder) { + // retrieve data/ctx + auto const& ebdigisProduct = event.get(digisInEBToken_); + auto const& eedigisProduct = event.get(digisInEEToken_); + cms::cuda::ScopedContextAcquire ctx{ebdigisProduct, std::move(taskHolder)}; + auto const& ebdigis = ctx.get(ebdigisProduct); + auto const& eedigis = ctx.get(eedigisProduct); + + // resize tmp buffers + dataebtmp.resize(ebdigis.size * EcalDataFrame::MAXSAMPLES); + dataeetmp.resize(eedigis.size * EcalDataFrame::MAXSAMPLES); + idsebtmp.resize(ebdigis.size); + idseetmp.resize(eedigis.size); + + // enqeue transfers + cudaCheck(cudaMemcpyAsync( + dataebtmp.data(), ebdigis.data.get(), dataebtmp.size() * sizeof(uint16_t), cudaMemcpyDeviceToHost, ctx.stream())); + cudaCheck(cudaMemcpyAsync( + dataeetmp.data(), eedigis.data.get(), dataeetmp.size() * sizeof(uint16_t), cudaMemcpyDeviceToHost, ctx.stream())); + cudaCheck(cudaMemcpyAsync( + idsebtmp.data(), ebdigis.ids.get(), idsebtmp.size() * sizeof(uint32_t), cudaMemcpyDeviceToHost, ctx.stream())); + cudaCheck(cudaMemcpyAsync( + idseetmp.data(), eedigis.ids.get(), idseetmp.size() * sizeof(uint32_t), cudaMemcpyDeviceToHost, ctx.stream())); +} + +void EcalCPUDigisProducer::produce(edm::Event& event, edm::EventSetup const& setup) { + // output collections + auto digisEB = std::make_unique(); + auto digisEE = std::make_unique(); + digisEB->resize(idsebtmp.size()); + digisEE->resize(idseetmp.size()); + + // cast constness away + // use pointers to buffers instead of move operator= semantics + // cause we have different allocators in there... + auto* dataEB = const_cast(digisEB->data().data()); + auto* dataEE = const_cast(digisEE->data().data()); + auto* idsEB = const_cast(digisEB->ids().data()); + auto* idsEE = const_cast(digisEE->ids().data()); + + // copy data + std::memcpy(dataEB, dataebtmp.data(), dataebtmp.size() * sizeof(uint16_t)); + std::memcpy(dataEE, dataeetmp.data(), dataeetmp.size() * sizeof(uint16_t)); + std::memcpy(idsEB, idsebtmp.data(), idsebtmp.size() * sizeof(uint32_t)); + std::memcpy(idsEE, idseetmp.data(), idseetmp.size() * sizeof(uint32_t)); + + event.put(digisOutEBToken_, std::move(digisEB)); + event.put(digisOutEEToken_, std::move(digisEE)); + + if (produceDummyIntegrityCollections_) { + // dummy SRP collections + event.emplace(ebSrFlagToken_); + event.emplace(eeSrFlagToken_); + // dummy integrity for xtal data + event.emplace(ebIntegrityGainErrorsToken_); + event.emplace(ebIntegrityGainSwitchErrorsToken_); + event.emplace(ebIntegrityChIdErrorsToken_); + // dummy integrity for xtal data - EE specific (to be rivisited towards EB+EE common collection) + event.emplace(eeIntegrityGainErrorsToken_); + event.emplace(eeIntegrityGainSwitchErrorsToken_); + event.emplace(eeIntegrityChIdErrorsToken_); + // dummy integrity errors + event.emplace(integrityTTIdErrorsToken_); + event.emplace(integrityBlockSizeErrorsToken_); + } +} + +DEFINE_FWK_MODULE(EcalCPUDigisProducer); diff --git a/EventFilter/EcalRawToDigi/plugins/EcalRawESProducersGPUDefs.cc b/EventFilter/EcalRawToDigi/plugins/EcalRawESProducersGPUDefs.cc new file mode 100644 index 0000000000000..84fcc7b2b2952 --- /dev/null +++ b/EventFilter/EcalRawToDigi/plugins/EcalRawESProducersGPUDefs.cc @@ -0,0 +1,9 @@ +#include "CondFormats/DataRecord/interface/EcalMappingElectronicsRcd.h" +#include "EventFilter/EcalRawToDigi/interface/ElectronicsMappingGPU.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "HeterogeneousCore/CUDACore/interface/ConvertingESProducerT.h" + +using EcalElectronicsMappingGPUESProducer = + ConvertingESProducerT; + +DEFINE_FWK_EVENTSETUP_MODULE(EcalElectronicsMappingGPUESProducer); diff --git a/EventFilter/EcalRawToDigi/plugins/EcalRawToDigiGPU.cc b/EventFilter/EcalRawToDigi/plugins/EcalRawToDigiGPU.cc new file mode 100644 index 0000000000000..4f0743c9b1b51 --- /dev/null +++ b/EventFilter/EcalRawToDigi/plugins/EcalRawToDigiGPU.cc @@ -0,0 +1,155 @@ +#include "CUDADataFormats/EcalDigi/interface/DigisCollection.h" +#include "CondFormats/DataRecord/interface/EcalMappingElectronicsRcd.h" +#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" +#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" +#include "EventFilter/EcalRawToDigi/interface/ElectronicsMappingGPU.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/ESGetToken.h" +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +#include "DeclsForKernels.h" +#include "UnpackGPU.h" + +class EcalRawToDigiGPU : public edm::stream::EDProducer { +public: + explicit EcalRawToDigiGPU(edm::ParameterSet const& ps); + ~EcalRawToDigiGPU() override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + void acquire(edm::Event const&, edm::EventSetup const&, edm::WaitingTaskWithArenaHolder) override; + void produce(edm::Event&, edm::EventSetup const&) override; + +private: + edm::EDGetTokenT rawDataToken_; + using OutputProduct = cms::cuda::Product>; + edm::EDPutTokenT digisEBToken_, digisEEToken_; + edm::ESGetToken eMappingToken_; + + cms::cuda::ContextState cudaState_; + + std::vector fedsToUnpack_; + + ecal::raw::ConfigurationParameters config_; + ecal::raw::OutputDataGPU outputGPU_; + ecal::raw::OutputDataCPU outputCPU_; +}; + +void EcalRawToDigiGPU::fillDescriptions(edm::ConfigurationDescriptions& confDesc) { + edm::ParameterSetDescription desc; + + desc.add("InputLabel", edm::InputTag("rawDataCollector")); + std::vector feds(54); + for (uint32_t i = 0; i < 54; ++i) + feds[i] = i + 601; + desc.add>("FEDs", feds); + desc.add("maxChannelsEB", 61200); + desc.add("maxChannelsEE", 14648); + desc.add("digisLabelEB", "ebDigis"); + desc.add("digisLabelEE", "eeDigis"); + + std::string label = "ecalRawToDigiGPU"; + confDesc.add(label, desc); +} + +EcalRawToDigiGPU::EcalRawToDigiGPU(const edm::ParameterSet& ps) + : rawDataToken_{consumes(ps.getParameter("InputLabel"))}, + digisEBToken_{produces(ps.getParameter("digisLabelEB"))}, + digisEEToken_{produces(ps.getParameter("digisLabelEE"))}, + eMappingToken_{esConsumes()}, + fedsToUnpack_{ps.getParameter>("FEDs")} { + config_.maxChannelsEB = ps.getParameter("maxChannelsEB"); + config_.maxChannelsEE = ps.getParameter("maxChannelsEE"); +} + +EcalRawToDigiGPU::~EcalRawToDigiGPU() {} + +void EcalRawToDigiGPU::acquire(edm::Event const& event, + edm::EventSetup const& setup, + edm::WaitingTaskWithArenaHolder holder) { + // raii + cms::cuda::ScopedContextAcquire ctx{event.streamID(), std::move(holder), cudaState_}; + + // conditions + edm::ESHandle eMappingHandle = setup.getHandle(eMappingToken_); + auto const& eMappingProduct = eMappingHandle->getProduct(ctx.stream()); + + // bundle up conditions + ecal::raw::ConditionsProducts conditions{eMappingProduct}; + + // event data + edm::Handle rawDataHandle; + event.getByToken(rawDataToken_, rawDataHandle); + + // scratch + ecal::raw::ScratchDataGPU scratchGPU = {cms::cuda::make_device_unique(2, ctx.stream())}; + + // input cpu data + ecal::raw::InputDataCPU inputCPU = { + cms::cuda::make_host_unique(ecal::raw::nfeds_max * ecal::raw::nbytes_per_fed_max, ctx.stream()), + cms::cuda::make_host_unique(ecal::raw::nfeds_max, ctx.stream()), + cms::cuda::make_host_unique(ecal::raw::nfeds_max, ctx.stream())}; + + // input data gpu + ecal::raw::InputDataGPU inputGPU = {cms::cuda::make_device_unique( + ecal::raw::nfeds_max * ecal::raw::nbytes_per_fed_max, ctx.stream()), + cms::cuda::make_device_unique(ecal::raw::nfeds_max, ctx.stream()), + cms::cuda::make_device_unique(ecal::raw::nfeds_max, ctx.stream())}; + + // output cpu + outputCPU_ = {cms::cuda::make_host_unique(2, ctx.stream())}; + + // output gpu + outputGPU_.allocate(config_, ctx.stream()); + + // iterate over feds + // TODO: another idea + // - loop over all feds to unpack and enqueue cuda memcpy + // - accumulate the sizes + // - after the loop launch cuda memcpy for sizes + // - enqueue the kernel + uint32_t currentCummOffset = 0; + uint32_t counter = 0; + for (auto const& fed : fedsToUnpack_) { + auto const& data = rawDataHandle->FEDData(fed); + auto const nbytes = data.size(); + + // skip empty feds + if (nbytes < ecal::raw::empty_event_size) + continue; + + // copy raw data into plain buffer + std::memcpy(inputCPU.data.get() + currentCummOffset, data.data(), nbytes); + // set the offset in bytes from the start + inputCPU.offsets[counter] = currentCummOffset; + inputCPU.feds[counter] = fed; + + // this is the current offset into the vector + currentCummOffset += nbytes; + ++counter; + } + + ecal::raw::entryPoint( + inputCPU, inputGPU, outputGPU_, scratchGPU, outputCPU_, conditions, ctx.stream(), counter, currentCummOffset); +} + +void EcalRawToDigiGPU::produce(edm::Event& event, edm::EventSetup const& setup) { + cms::cuda::ScopedContextProduce ctx{cudaState_}; + + // get the number of channels + outputGPU_.digisEB.size = outputCPU_.nchannels[0]; + outputGPU_.digisEE.size = outputCPU_.nchannels[1]; + + ctx.emplace(event, digisEBToken_, std::move(outputGPU_.digisEB)); + ctx.emplace(event, digisEEToken_, std::move(outputGPU_.digisEE)); + + // reset ptrs that are carried as members + outputCPU_.nchannels.reset(); +} + +DEFINE_FWK_MODULE(EcalRawToDigiGPU); diff --git a/EventFilter/EcalRawToDigi/plugins/UnpackGPU.cu b/EventFilter/EcalRawToDigi/plugins/UnpackGPU.cu new file mode 100644 index 0000000000000..a25bf235d15f6 --- /dev/null +++ b/EventFilter/EcalRawToDigi/plugins/UnpackGPU.cu @@ -0,0 +1,333 @@ +#include "EventFilter/EcalRawToDigi/interface/ElectronicsIdGPU.h" + +#include "UnpackGPU.h" + +namespace ecal { + namespace raw { + + __forceinline__ __device__ void print_raw_buffer(uint8_t const* const buffer, + uint32_t const nbytes, + uint32_t const nbytes_per_row = 20) { + for (uint32_t i = 0; i < nbytes; i++) { + if (i % nbytes_per_row == 0 && i > 0) + printf("\n"); + printf("%02X ", buffer[i]); + } + } + + __forceinline__ __device__ void print_first3bits(uint64_t const* buffer, uint32_t size) { + for (uint32_t i = 0; i < size; ++i) { + uint8_t const b61 = (buffer[i] >> 61) & 0x1; + uint8_t const b62 = (buffer[i] >> 62) & 0x1; + uint8_t const b63 = (buffer[i] >> 63) & 0x1; + printf("[word: %u] %u%u%u\n", i, b63, b62, b61); + } + } + + __forceinline__ __device__ bool is_barrel(uint8_t dccid) { + return dccid >= ElectronicsIdGPU::MIN_DCCID_EBM && dccid <= ElectronicsIdGPU::MAX_DCCID_EBP; + } + + __forceinline__ __device__ uint8_t fed2dcc(int fed) { return static_cast(fed - 600); } + + __forceinline__ __device__ int zside_for_eb(ElectronicsIdGPU const& eid) { + int dcc = eid.dccId(); + return ((dcc >= ElectronicsIdGPU::MIN_DCCID_EBM && dcc <= ElectronicsIdGPU::MAX_DCCID_EBM)) ? -1 : 1; + } + + __forceinline__ __device__ bool is_synced_towerblock(uint16_t const dccbx, + uint16_t const bx, + uint16_t const dccl1, + uint16_t const l1) { + bool const bxsync = (bx == 0 && dccbx == 3564) || (bx == dccbx && dccbx != 3564); + bool const l1sync = (l1 == ((dccl1 - 1) & 0xfff)); + return bxsync && l1sync; + } + + __forceinline__ __device__ bool right_tower_for_eb(int tower) { + // for EB, two types of tower (LVRB top/bottom) + if ((tower > 12 && tower < 21) || (tower > 28 && tower < 37) || (tower > 44 && tower < 53) || + (tower > 60 && tower < 69)) + return true; + else + return false; + } + + __forceinline__ __device__ uint32_t compute_ebdetid(ElectronicsIdGPU const& eid) { + // as in Geometry/EcalMaping/.../EcalElectronicsMapping + auto const dcc = eid.dccId(); + auto const tower = eid.towerId(); + auto const strip = eid.stripId(); + auto const xtal = eid.xtalId(); + + int smid = 0; + int iphi = 0; + bool EBPlus = (zside_for_eb(eid) > 0); + bool EBMinus = !EBPlus; + + if (zside_for_eb(eid) < 0) { + smid = dcc + 19 - ElectronicsIdGPU::DCCID_PHI0_EBM; + iphi = (smid - 19) * ElectronicsIdGPU::kCrystalsInPhi; + iphi += 5 * ((tower - 1) % ElectronicsIdGPU::kTowersInPhi); + } else { + smid = dcc + 1 - ElectronicsIdGPU::DCCID_PHI0_EBP; + iphi = (smid - 1) * ElectronicsIdGPU::kCrystalsInPhi; + iphi += 5 * (ElectronicsIdGPU::kTowersInPhi - ((tower - 1) % ElectronicsIdGPU::kTowersInPhi) - 1); + } + + bool RightTower = right_tower_for_eb(tower); + int ieta = 5 * ((tower - 1) / ElectronicsIdGPU::kTowersInPhi) + 1; + if (RightTower) { + ieta += (strip - 1); + if (strip % 2 == 1) { + if (EBMinus) + iphi += (xtal - 1) + 1; + else + iphi += (4 - (xtal - 1)) + 1; + } else { + if (EBMinus) + iphi += (4 - (xtal - 1)) + 1; + else + iphi += (xtal - 1) + 1; + } + } else { + ieta += 4 - (strip - 1); + if (strip % 2 == 1) { + if (EBMinus) + iphi += (4 - (xtal - 1)) + 1; + else + iphi += (xtal - 1) + 1; + } else { + if (EBMinus) + iphi += (xtal - 1) + 1; + else + iphi += (4 - (xtal - 1)) + 1; + } + } + + if (zside_for_eb(eid) < 0) + ieta = -ieta; + + DetId did{DetId::Ecal, EcalBarrel}; + return did.rawId() | ((ieta > 0) ? (0x10000 | (ieta << 9)) : ((-ieta) << 9)) | (iphi & 0x1FF); + } + + __forceinline__ __device__ int adc(uint16_t sample) { return sample & 0xfff; } + + __forceinline__ __device__ int gainId(uint16_t sample) { return (sample >> 12) & 0x3; } + + template + __global__ void kernel_unpack_test(unsigned char const* __restrict__ data, + uint32_t const* __restrict__ offsets, + int const* __restrict__ feds, + uint16_t* samplesEB, + uint16_t* samplesEE, + uint32_t* idsEB, + uint32_t* idsEE, + uint32_t* pChannelsCounterEBEE, + uint32_t const* eid2did, + uint32_t const nbytesTotal) { + // indices + auto const ifed = blockIdx.x; + + // offset in bytes + auto const offset = offsets[ifed]; + // fed id + auto const fed = feds[ifed]; + auto const isBarrel = is_barrel(static_cast(fed - 600)); + // size + auto const size = ifed == gridDim.x - 1 ? nbytesTotal - offset : offsets[ifed + 1] - offset; + auto* samples = isBarrel ? samplesEB : samplesEE; + auto* ids = isBarrel ? idsEB : idsEE; + auto* pChannelsCounter = isBarrel ? &pChannelsCounterEBEE[0] : &pChannelsCounterEBEE[1]; + + // offset to the right raw buffer + uint64_t const* buffer = reinterpret_cast(data + offset); + + // dump first 3 bits for each 64-bit word + //print_first3bits(buffer, size / 8); + + // + // fed header + // + auto const fed_header = buffer[0]; + uint32_t bx = (fed_header >> 20) & 0xfff; + uint32_t lv1 = (fed_header >> 32) & 0xffffff; + + // 9 for fed + dcc header + // 36 for 4 EE TCC blocks or 18 for 1 EB TCC block + // 6 for SR block size + + // dcc header w2 + auto const w2 = buffer[2]; + uint8_t const fov = (w2 >> 48) & 0xf; + + // + // print Tower block headers + // + uint8_t ntccblockwords = isBarrel ? 18 : 36; + auto const* tower_blocks_start = buffer + 9 + ntccblockwords + 6; + auto const* trailer = buffer + (size / 8 - 1); + auto const* current_tower_block = tower_blocks_start; + while (current_tower_block != trailer) { + auto const w = *current_tower_block; + uint8_t ttid = w & 0xff; + uint16_t bxlocal = (w >> 16) & 0xfff; + uint16_t lv1local = (w >> 32) & 0xfff; + uint16_t block_length = (w >> 48) & 0x1ff; + + uint16_t const dccbx = bx & 0xfff; + uint16_t const dccl1 = lv1 & 0xfff; + // fov>=1 is required to support simulated data for which bx==bxlocal==0 + if (fov >= 1 && !is_synced_towerblock(dccbx, bxlocal, dccl1, lv1local)) { + current_tower_block += block_length; + continue; + } + + // go through all the channels + // get the next channel coordinates + uint32_t nchannels = (block_length - 1) / 3; + + // 1 threads per channel in this block + for (uint32_t ich = 0; ich < nchannels; ich += NTHREADS) { + auto const i_to_access = ich + threadIdx.x; + // threads outside of the range -> leave the loop + if (i_to_access >= nchannels) + break; + + // inc the channel's counter and get the pos where to store + auto const wdata = current_tower_block[1 + i_to_access * 3]; + uint8_t const stripid = wdata & 0x7; + uint8_t const xtalid = (wdata >> 4) & 0x7; + ElectronicsIdGPU eid{fed2dcc(fed), ttid, stripid, xtalid}; + auto const didraw = isBarrel ? compute_ebdetid(eid) : eid2did[eid.linearIndex()]; + // FIXME: what kind of channels are these guys + if (didraw == 0) + continue; + + // get samples + uint16_t sampleValues[10]; + sampleValues[0] = (wdata >> 16) & 0x3fff; + sampleValues[1] = (wdata >> 32) & 0x3fff; + sampleValues[2] = (wdata >> 48) & 0x3fff; + auto const wdata1 = current_tower_block[2 + i_to_access * 3]; + sampleValues[3] = wdata1 & 0x3fff; + sampleValues[4] = (wdata1 >> 16) & 0x3fff; + sampleValues[5] = (wdata1 >> 32) & 0x3fff; + sampleValues[6] = (wdata1 >> 48) & 0x3fff; + auto const wdata2 = current_tower_block[3 + i_to_access * 3]; + sampleValues[7] = wdata2 & 0x3fff; + sampleValues[8] = (wdata2 >> 16) & 0x3fff; + sampleValues[9] = (wdata2 >> 32) & 0x3fff; + + // check gain + bool isSaturation = true; + short firstGainZeroSampID{-1}, firstGainZeroSampADC{-1}; + for (uint32_t si = 0; si < 10; si++) { + if (gainId(sampleValues[si]) == 0) { + firstGainZeroSampID = si; + firstGainZeroSampADC = adc(sampleValues[si]); + break; + } + } + if (firstGainZeroSampID != -1) { + unsigned int plateauEnd = std::min(10u, (unsigned int)(firstGainZeroSampID + 5)); + for (unsigned int s = firstGainZeroSampID; s < plateauEnd; s++) { + if (gainId(sampleValues[s]) == 0 && adc(sampleValues[s]) == firstGainZeroSampADC) { + ; + } else { + isSaturation = false; + break; + } //it's not saturation + } + // get rid of channels which are stuck in gain0 + if (firstGainZeroSampID < 3) { + isSaturation = false; + } + if (!isSaturation) + continue; + } else { // there is no zero gainId sample + // gain switch check + short numGain = 1; + bool gainSwitchError = false; + for (unsigned int si = 1; si < 10; si++) { + if ((gainId(sampleValues[si - 1]) > gainId(sampleValues[si])) && numGain < 5) + gainSwitchError = true; + if (gainId(sampleValues[si - 1]) == gainId(sampleValues[si])) + numGain++; + else + numGain = 1; + } + if (gainSwitchError) + continue; + } + + auto const pos = atomicAdd(pChannelsCounter, 1); + + // store to global + ids[pos] = didraw; + samples[pos * 10] = sampleValues[0]; + samples[pos * 10 + 1] = sampleValues[1]; + samples[pos * 10 + 2] = sampleValues[2]; + samples[pos * 10 + 3] = sampleValues[3]; + samples[pos * 10 + 4] = sampleValues[4]; + samples[pos * 10 + 5] = sampleValues[5]; + samples[pos * 10 + 6] = sampleValues[6]; + samples[pos * 10 + 7] = sampleValues[7]; + samples[pos * 10 + 8] = sampleValues[8]; + samples[pos * 10 + 9] = sampleValues[9]; + } + + current_tower_block += block_length; + } + } + + void entryPoint(InputDataCPU const& inputCPU, + InputDataGPU& inputGPU, + OutputDataGPU& outputGPU, + ScratchDataGPU& scratchGPU, + OutputDataCPU& outputCPU, + ConditionsProducts const& conditions, + cudaStream_t cudaStream, + uint32_t const nfedsWithData, + uint32_t const nbytesTotal) { + // transfer + cudaCheck(cudaMemcpyAsync(inputGPU.data.get(), + inputCPU.data.get(), + nbytesTotal * sizeof(unsigned char), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(inputGPU.offsets.get(), + inputCPU.offsets.get(), + nfedsWithData * sizeof(uint32_t), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemsetAsync(scratchGPU.pChannelsCounter.get(), + 0, + sizeof(uint32_t) * 2, // EB + EE + cudaStream)); + cudaCheck(cudaMemcpyAsync( + inputGPU.feds.get(), inputCPU.feds.get(), nfedsWithData * sizeof(int), cudaMemcpyHostToDevice, cudaStream)); + + kernel_unpack_test<32><<>>(inputGPU.data.get(), + inputGPU.offsets.get(), + inputGPU.feds.get(), + outputGPU.digisEB.data.get(), + outputGPU.digisEE.data.get(), + outputGPU.digisEB.ids.get(), + outputGPU.digisEE.ids.get(), + scratchGPU.pChannelsCounter.get(), + conditions.eMappingProduct.eid2did, + nbytesTotal); + cudaCheck(cudaGetLastError()); + + // transfer the counters for how many eb and ee channels we got + cudaCheck(cudaMemcpyAsync(outputCPU.nchannels.get(), + scratchGPU.pChannelsCounter.get(), + sizeof(uint32_t) * 2, + cudaMemcpyDeviceToHost, + cudaStream)); + } + + } // namespace raw +} // namespace ecal diff --git a/EventFilter/EcalRawToDigi/plugins/UnpackGPU.h b/EventFilter/EcalRawToDigi/plugins/UnpackGPU.h new file mode 100644 index 0000000000000..d98906e7e24a7 --- /dev/null +++ b/EventFilter/EcalRawToDigi/plugins/UnpackGPU.h @@ -0,0 +1,23 @@ +#ifndef EventFilter_EcalRawToDigi_plugins_UnpackGPU_h +#define EventFilter_EcalRawToDigi_plugins_UnpackGPU_h + +#include "DeclsForKernels.h" + +namespace ecal { + namespace raw { + + // FIXME: bundle up uint32_t values + void entryPoint(InputDataCPU const&, + InputDataGPU&, + OutputDataGPU&, + ScratchDataGPU&, + OutputDataCPU&, + ConditionsProducts const&, + cudaStream_t, + uint32_t const, + uint32_t const); + + } // namespace raw +} // namespace ecal + +#endif // EventFilter_EcalRawToDigi_plugins_UnpackGPU_h diff --git a/EventFilter/EcalRawToDigi/python/ecalDigis_cff.py b/EventFilter/EcalRawToDigi/python/ecalDigis_cff.py index 849aaeeb414a4..00a54ad56c128 100644 --- a/EventFilter/EcalRawToDigi/python/ecalDigis_cff.py +++ b/EventFilter/EcalRawToDigi/python/ecalDigis_cff.py @@ -5,3 +5,24 @@ ecalDigis = _ecalEBunpacker.clone() ecalDigisTask = cms.Task(ecalDigis) + +# process modifier to run on GPUs +from Configuration.ProcessModifiers.gpu_cff import gpu + +# GPU-friendly EventSetup modules +from EventFilter.EcalRawToDigi.ecalElectronicsMappingGPUESProducer_cfi import ecalElectronicsMappingGPUESProducer + +# raw to digi on GPUs +from EventFilter.EcalRawToDigi.ecalRawToDigiGPU_cfi import ecalRawToDigiGPU as _ecalRawToDigiGPU +ecalDigisGPU = _ecalRawToDigiGPU.clone() + +# copy the digi from the GPU to the CPU and convert to legacy format +from EventFilter.EcalRawToDigi.ecalCPUDigisProducer_cfi import ecalCPUDigisProducer as _ecalCPUDigisProducer +_ecalDigis_gpu = _ecalCPUDigisProducer.clone( + digisInLabelEB = ('ecalDigisGPU', 'ebDigis'), + digisInLabelEE = ('ecalDigisGPU', 'eeDigis'), + produceDummyIntegrityCollections = True +) +gpu.toReplaceWith(ecalDigis, _ecalDigis_gpu) + +gpu.toReplaceWith(ecalDigisTask, cms.Task(ecalElectronicsMappingGPUESProducer, ecalDigisGPU, ecalDigis)) diff --git a/EventFilter/EcalRawToDigi/src/ElectronicsMappingGPU.cc b/EventFilter/EcalRawToDigi/src/ElectronicsMappingGPU.cc new file mode 100644 index 0000000000000..8264c501a896c --- /dev/null +++ b/EventFilter/EcalRawToDigi/src/ElectronicsMappingGPU.cc @@ -0,0 +1,57 @@ +#include "EventFilter/EcalRawToDigi/interface/ElectronicsMappingGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +#include "DataFormats/EcalDetId/interface/EcalElectronicsId.h" + +namespace ecal { + namespace raw { + + // TODO: 0x3FFFFF * 4B ~= 16MB + // tmp solution for linear mapping of eid -> did + ElectronicsMappingGPU::ElectronicsMappingGPU(EcalMappingElectronics const& mapping) : eid2did_(0x3FFFFF) { + // fill in eb + // TODO: EB vector is actually empty + auto const& barrelValues = mapping.barrelItems(); + for (unsigned int i = 0; i < barrelValues.size(); i++) { + EcalElectronicsId eid{barrelValues[i].electronicsid}; + EBDetId did{EBDetId::unhashIndex(i)}; + eid2did_[eid.linearIndex()] = did.rawId(); + } + + // fill in ee + auto const& endcapValues = mapping.endcapItems(); + for (unsigned int i = 0; i < endcapValues.size(); i++) { + EcalElectronicsId eid{endcapValues[i].electronicsid}; + EEDetId did{EEDetId::unhashIndex(i)}; + eid2did_[eid.linearIndex()] = did.rawId(); + } + } + + ElectronicsMappingGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(eid2did)); + } + + ElectronicsMappingGPU::Product const& ElectronicsMappingGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](ElectronicsMappingGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck(cudaMalloc((void**)&product.eid2did, this->eid2did_.size() * sizeof(uint32_t))); + + // transfer + cudaCheck(cudaMemcpyAsync(product.eid2did, + this->eid2did_.data(), + this->eid2did_.size() * sizeof(uint32_t), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; + } + + } // namespace raw +} // namespace ecal + +TYPELOOKUP_DATA_REG(ecal::raw::ElectronicsMappingGPU); diff --git a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc index 81db0ec5e1b0e..ae046ca04303b 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc @@ -123,7 +123,7 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve } } - for (unsigned int fedId = FEDNumbering::MINGEMFEDID; fedId <= FEDNumbering::MAXME0FEDID; ++fedId) { + for (unsigned int fedId = FEDNumbering::MINGEMFEDID; fedId <= FEDNumbering::MAXGEMFEDID; ++fedId) { uint32_t amc13EvtLength = 0; std::unique_ptr amc13Event = std::make_unique(); @@ -185,7 +185,6 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve auto vfatData = std::make_unique(geb_dc.vfatVer, bc, 0, vfatId, lsData, msData); gebData->addVFAT(*vfatData); } - } // end of vfats in GEB if (!gebData->vFATs()->empty()) { @@ -196,15 +195,16 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve } } // end of GEB loop - amcSize += 5; - amcData->setAMCheader1(amcSize, BX_id, LV1_id, amcNum); - amcData->setAMCheader2(amcNum, OrN, 1); - amcData->setGEMeventHeader(amcData->gebs()->size(), 0); - amc13Event->addAMCpayload(*amcData); - // AMC header in AMC13Event - amc13Event->addAMCheader(amcSize, 0, amcNum, 0); - amc13EvtLength += amcSize + 1; // AMC data size + AMC header size - + if (!amcData->gebs()->empty()) { + amcSize += 5; + amcData->setAMCheader1(amcSize, BX_id, LV1_id, amcNum); + amcData->setAMCheader2(amcNum, OrN, 1); + amcData->setGEMeventHeader(amcData->gebs()->size(), 0); + amc13Event->addAMCpayload(*amcData); + // AMC header in AMC13Event + amc13Event->addAMCheader(amcSize, 0, amcNum, 0); + amc13EvtLength += amcSize + 1; // AMC data size + AMC header size + } } // end of AMC loop if (!amc13Event->getAMCpayloads()->empty()) { @@ -217,7 +217,6 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve //CDF trailer uint32_t EvtLength = amc13EvtLength + 4; // 2 header and 2 trailer amc13Event->setCDFTrailer(EvtLength); - amc13Events.emplace_back(std::move(amc13Event)); } // finished making amc13Event data } // end of FED loop @@ -264,7 +263,7 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve for (const auto& word : words) { *(w++) = word; } - LogDebug("GEMDigiToRawModule") << " words " << words.size(); + LogDebug("GEMDigiToRawModule") << "fedId:" << amc13e->sourceId() << " words:" << words.size(); } iEvent.put(std::move(fedRawDataCol)); diff --git a/EventFilter/GEMRawToDigi/test/unpackData-GEM.py b/EventFilter/GEMRawToDigi/test/unpackData-GEM.py index cbff040284099..7e8f06bc7d057 100644 --- a/EventFilter/GEMRawToDigi/test/unpackData-GEM.py +++ b/EventFilter/GEMRawToDigi/test/unpackData-GEM.py @@ -121,11 +121,10 @@ process.load("CommonTools.UtilAlgos.TFileService_cfi") # enable debug message logging for our modules -#process.MessageLogger.categories.append('L1TCaloEvents') +# if (options.dumpRaw): - process.MessageLogger.destinations.append('infos') - process.MessageLogger.infos = cms.untracked.PSet(INFO = cms.untracked.PSet(limit = cms.untracked.int32(0))) + process.MessageLogger.files.infos = cms.untracked.PSet(INFO = cms.untracked.PSet(limit = cms.untracked.int32(0))) if (options.debug): # process.MessageLogger.debugModules = cms.untracked.vstring('L1TRawToDigi:caloStage2Digis', 'MP7BufferDumpToRaw:stage2MPRaw', 'MP7BufferDumpToRaw:stage2DemuxRaw') diff --git a/EventFilter/HcalRawToDigi/bin/BuildFile.xml b/EventFilter/HcalRawToDigi/bin/BuildFile.xml new file mode 100644 index 0000000000000..c074e16ef4eab --- /dev/null +++ b/EventFilter/HcalRawToDigi/bin/BuildFile.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/EventFilter/HcalRawToDigi/bin/makeHcalRaw2DigiGpuValidationPlots.cpp b/EventFilter/HcalRawToDigi/bin/makeHcalRaw2DigiGpuValidationPlots.cpp new file mode 100644 index 0000000000000..039c38dd9df16 --- /dev/null +++ b/EventFilter/HcalRawToDigi/bin/makeHcalRaw2DigiGpuValidationPlots.cpp @@ -0,0 +1,386 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "CUDADataFormats/HcalDigi/interface/DigiCollection.h" +#include "DataFormats/Common/interface/Wrapper.h" +#include "DataFormats/HcalDigi/interface/HcalDigiCollections.h" + +#define CREATE_HIST_1D(varname, nbins, first, last) auto varname = new TH1D(#varname, #varname, nbins, first, last) + +#define CREATE_HIST_2D(varname, nbins, first, last) \ + auto varname = new TH2D(#varname, #varname, nbins, first, last, nbins, first, last) + +QIE11DigiCollection filterQIE11(QIE11DigiCollection const& coll) { + QIE11DigiCollection out; + out.reserve(coll.size()); + + for (uint32_t i = 0; i < coll.size(); i++) { + auto const df = coll[i]; + auto const id = HcalDetId{df.id()}; + if (id.subdetId() != HcalEndcap) + continue; + + out.push_back(QIE11DataFrame{df}); + } + + return out; +} + +int main(int argc, char* argv[]) { + if (argc < 3) { + std::cout << "run with: ./ \n"; + exit(0); + } + + auto filterf01HE = [](QIE11DigiCollection const& coll) { + QIE11DigiCollection out{coll.samples(), coll.subdetId()}; + out.reserve(coll.size()); + + for (uint32_t i = 0; i < coll.size(); i++) { + auto const df = QIE11DataFrame{coll[i]}; + auto const id = HcalDetId{df.id()}; + if ((df.flavor() == 0 or df.flavor() == 1) and id.subdetId() == HcalEndcap) + out.push_back(df); + } + + return out; + }; + + auto filterf3HB = [](QIE11DigiCollection const& coll) { + QIE11DigiCollection out{coll.samples(), coll.subdetId()}; + out.reserve(coll.size()); + + for (uint32_t i = 0; i < coll.size(); i++) { + auto const df = QIE11DataFrame{coll[i]}; + auto const did = HcalDetId{df.id()}; + if (df.flavor() == 3 and did.subdetId() == HcalBarrel) + out.push_back(df); + } + + return out; + }; + + // branches to use + using Collectionf01 = + hcal::DigiCollection>; + using Collectionf5 = + hcal::DigiCollection>; + using Collectionf3 = + hcal::DigiCollection>; + edm::Wrapper* wgpuf01he = nullptr; + edm::Wrapper* wgpuf5hb = nullptr; + edm::Wrapper* wgpuf3hb = nullptr; + edm::Wrapper* wcpuf01he = nullptr; + edm::Wrapper* wcpuf5hb = nullptr; + + std::string inFileName{argv[1]}; + std::string outFileName{argv[2]}; + + // prep output + TFile rfout{outFileName.c_str(), "recreate"}; + + CREATE_HIST_1D(hADCf01HEGPU, 256, 0, 256); + CREATE_HIST_1D(hADCf01HECPU, 256, 0, 256); + CREATE_HIST_1D(hADCf5HBGPU, 128, 0, 128); + CREATE_HIST_1D(hADCf5HBCPU, 128, 0, 128); + CREATE_HIST_1D(hADCf3HBGPU, 256, 0, 256); + CREATE_HIST_1D(hADCf3HBCPU, 256, 0, 256); + CREATE_HIST_1D(hTDCf01HEGPU, 64, 0, 64); + CREATE_HIST_1D(hTDCf01HECPU, 64, 0, 64); + + CREATE_HIST_2D(hADCf01HEGPUvsCPU, 256, 0, 256); + CREATE_HIST_2D(hADCf3HBGPUvsCPU, 256, 0, 256); + CREATE_HIST_2D(hADCf5HBGPUvsCPU, 128, 0, 128); + CREATE_HIST_2D(hTDCf01HEGPUvsCPU, 64, 0, 64); + CREATE_HIST_2D(hTDCf3HBGPUvsCPU, 4, 0, 4); + + // prep input + TFile rfin{inFileName.c_str()}; + TTree* rt = (TTree*)rfin.Get("Events"); + rt->SetBranchAddress("QIE11DataFrameHcalDataFrameContainer_hcalDigis__RECO.", &wcpuf01he); + rt->SetBranchAddress("HBHEDataFramesSorted_hcalDigis__RECO.", &wcpuf5hb); + rt->SetBranchAddress( + "hcalFlavor5calocommonCUDAHostAllocatorAliascalocommonVecStoragePolicyhcalDigiCollection_hcalCPUDigisProducer_" + "f5HBDigis_RECO.", + &wgpuf5hb); + rt->SetBranchAddress( + "hcalFlavor1calocommonCUDAHostAllocatorAliascalocommonVecStoragePolicyhcalDigiCollection_hcalCPUDigisProducer_" + "f01HEDigis_RECO.", + &wgpuf01he); + rt->SetBranchAddress( + "hcalFlavor3calocommonCUDAHostAllocatorAliascalocommonVecStoragePolicyhcalDigiCollection_hcalCPUDigisProducer_" + "f3HBDigis_RECO.", + &wgpuf3hb); + + // accumulate + auto const nentries = rt->GetEntries(); + std::cout << ">>> nentries = " << nentries << std::endl; + for (int ie = 0; ie < nentries; ++ie) { + rt->GetEntry(ie); + + auto const& f01HEProduct = wgpuf01he->bareProduct(); + auto const& f5HBProduct = wgpuf5hb->bareProduct(); + auto const& f3HBProduct = wgpuf3hb->bareProduct(); + auto const& qie11Product = wcpuf01he->bareProduct(); + auto const qie11Filteredf01 = filterf01HE(qie11Product); + auto const qie11Filteredf3 = filterf3HB(qie11Product); + auto const& qie8Product = wcpuf5hb->bareProduct(); + + auto const ngpuf01he = f01HEProduct.ids.size(); + auto const ngpuf5hb = f5HBProduct.ids.size(); + auto const ngpuf3hb = f3HBProduct.ids.size(); + auto const ncpuf01he = qie11Filteredf01.size(); + auto const ncpuf5hb = qie8Product.size(); + auto const ncpuf3hb = qie11Filteredf3.size(); + + /* + printf("ngpuf01he = %u nqie11 = %u ncpuf01he = %u ngpuf5hb = %u ncpuf5hb = %u\n", + f01HEProduct.size(), qie11Product.size(), qie11Filtered.size(), + f5HBProduct.size(), + static_cast(qie8Product.size())); + */ + + if (ngpuf01he != ncpuf01he) { + std::cerr << "*** mismatch in number of flavor 01 digis for event " << ie << std::endl + << ">>> ngpuf01he = " << ngpuf01he << std::endl + << ">>> ncpuf01he = " << ncpuf01he << std::endl; + } + + { + auto const& idsgpu = f01HEProduct.ids; + auto const& datagpu = f01HEProduct.data; + + for (uint32_t ich = 0; ich < ncpuf01he; ich++) { + auto const cpudf = QIE11DataFrame{qie11Filteredf01[ich]}; + auto const cpuid = cpudf.id(); + auto iter2idgpu = std::find(idsgpu.begin(), idsgpu.end(), cpuid); + + if (iter2idgpu == idsgpu.end()) { + std::cerr << "missing " << HcalDetId{cpuid} << std::endl; + continue; + } + + // FIXME: cna fail... + assert(*iter2idgpu == cpuid); + + auto const ptrdiff = iter2idgpu - idsgpu.begin(); + auto const nsamples_gpu = hcal::compute_nsamples(f01HEProduct.stride); + auto const nsamples_cpu = qie11Filteredf01.samples(); + assert(static_cast(nsamples_cpu) == nsamples_gpu); + + uint32_t ichgpu = ptrdiff; + uint32_t offset = ichgpu * f01HEProduct.stride; + uint16_t const* df_start = datagpu.data() + offset; + for (uint32_t sample = 0u; sample < nsamples_gpu; sample++) { + auto const cpuadc = cpudf[sample].adc(); + auto const gpuadc = hcal::adc_for_sample(df_start, sample); + auto const cputdc = cpudf[sample].tdc(); + auto const gputdc = hcal::tdc_for_sample(df_start, sample); + auto const cpucapid = cpudf[sample].capid(); + auto const gpucapid = hcal::capid_for_sample(df_start, sample); + + hADCf01HEGPU->Fill(gpuadc); + hADCf01HECPU->Fill(cpuadc); + hTDCf01HEGPU->Fill(gputdc); + hTDCf01HECPU->Fill(cputdc); + hADCf01HEGPUvsCPU->Fill(cpuadc, gpuadc); + hTDCf01HEGPUvsCPU->Fill(cputdc, gputdc); + + // At RAW Decoding level there must not be any mistmatches + // in the adc values at all! + assert(static_cast(cpuadc) == gpuadc); + assert(static_cast(cputdc) == gputdc); + assert(static_cast(cpucapid) == gpucapid); + } + } + } + + if (ngpuf3hb != ncpuf3hb) { + std::cerr << "*** mismatch in number of flavor 3 digis for event " << ie << std::endl + << ">>> ngpuf01he = " << ngpuf3hb << std::endl + << ">>> ncpuf01he = " << ncpuf3hb << std::endl; + } + + { + auto const& idsgpu = f3HBProduct.ids; + auto const& datagpu = f3HBProduct.data; + + for (uint32_t ich = 0; ich < ncpuf3hb; ich++) { + auto const cpudf = QIE11DataFrame{qie11Filteredf3[ich]}; + auto const cpuid = cpudf.id(); + auto iter2idgpu = std::find(idsgpu.begin(), idsgpu.end(), cpuid); + + if (iter2idgpu == idsgpu.end()) { + std::cerr << "missing " << HcalDetId{cpuid} << std::endl; + continue; + } + + // FIXME: cna fail... + assert(*iter2idgpu == cpuid); + + auto const ptrdiff = iter2idgpu - idsgpu.begin(); + auto const nsamples_gpu = hcal::compute_nsamples(f3HBProduct.stride); + auto const nsamples_cpu = qie11Filteredf3.samples(); + assert(static_cast(nsamples_cpu) == nsamples_gpu); + + uint32_t ichgpu = ptrdiff; + uint32_t offset = ichgpu * f3HBProduct.stride; + uint16_t const* df_start = datagpu.data() + offset; + for (uint32_t sample = 0u; sample < nsamples_gpu; sample++) { + auto const cpuadc = cpudf[sample].adc(); + auto const gpuadc = hcal::adc_for_sample(df_start, sample); + auto const cputdc = cpudf[sample].tdc(); + auto const gputdc = hcal::tdc_for_sample(df_start, sample); + + hADCf3HBGPU->Fill(gpuadc); + hADCf3HBCPU->Fill(cpuadc); + hADCf3HBGPUvsCPU->Fill(cpuadc, gpuadc); + hTDCf3HBGPUvsCPU->Fill(cputdc, gputdc); + + // At RAW Decoding level there must not be any mistmatches + // in the adc values at all! + assert(static_cast(cpuadc) == gpuadc); + assert(static_cast(cputdc) == gputdc); + } + } + } + + if (ngpuf5hb != ncpuf5hb) { + std::cerr << "*** mismatch in number of flavor 5 digis for event " << ie << std::endl + << ">>> ngpuf5hb = " << ngpuf5hb << std::endl + << ">>> ncpuf5hb = " << ncpuf5hb << std::endl; + } + + { + auto const& idsgpu = f5HBProduct.ids; + auto const& datagpu = f5HBProduct.data; + for (uint32_t i = 0; i < ncpuf5hb; i++) { + auto const cpudf = qie8Product[i]; + auto const cpuid = cpudf.id().rawId(); + auto iter2idgpu = std::find(idsgpu.begin(), idsgpu.end(), cpuid); + if (iter2idgpu == idsgpu.end()) { + std::cerr << "missing " << HcalDetId{cpuid} << std::endl; + continue; + } + + assert(*iter2idgpu == cpuid); + + auto const ptrdiff = iter2idgpu - idsgpu.begin(); + auto const nsamples_gpu = hcal::compute_nsamples(f5HBProduct.stride); + auto const nsamples_cpu = qie8Product[0].size(); + assert(static_cast(nsamples_cpu) == nsamples_gpu); + + uint32_t offset = ptrdiff * f5HBProduct.stride; + uint16_t const* df_start = datagpu.data() + offset; + for (uint32_t sample = 0u; sample < nsamples_gpu; sample++) { + auto const cpuadc = cpudf.sample(sample).adc(); + auto const gpuadc = hcal::adc_for_sample(df_start, sample); + auto const cpucapid = cpudf.sample(sample).capid(); + auto const gpucapid = hcal::capid_for_sample(df_start, sample); + + hADCf5HBGPU->Fill(gpuadc); + hADCf5HBCPU->Fill(cpuadc); + hADCf5HBGPUvsCPU->Fill(cpuadc, gpuadc); + + // the must for us at RAW Decoding stage + assert(static_cast(cpuadc) == gpuadc); + assert(static_cast(cpucapid) == gpucapid); + } + } + } + } + + { + TCanvas c{"plots", "plots", 4200, 6200}; + c.Divide(3, 3); + c.cd(1); + { + gPad->SetLogy(); + hADCf01HECPU->SetLineColor(kBlack); + hADCf01HECPU->SetLineWidth(1.); + hADCf01HECPU->Draw(""); + hADCf01HEGPU->SetLineColor(kBlue); + hADCf01HEGPU->SetLineWidth(1.); + hADCf01HEGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats*)hADCf01HEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + c.cd(2); + { + gPad->SetLogy(); + hADCf5HBCPU->SetLineColor(kBlack); + hADCf5HBCPU->SetLineWidth(1.); + hADCf5HBCPU->Draw(""); + hADCf5HBGPU->SetLineColor(kBlue); + hADCf5HBGPU->SetLineWidth(1.); + hADCf5HBGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats*)hADCf5HBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + c.cd(3); + { + gPad->SetLogy(); + hADCf3HBCPU->SetLineColor(kBlack); + hADCf3HBCPU->SetLineWidth(1.); + hADCf3HBCPU->Draw(""); + hADCf3HBGPU->SetLineColor(kBlue); + hADCf3HBGPU->SetLineWidth(1.); + hADCf3HBGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats*)hADCf3HBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + c.cd(4); + hADCf01HEGPUvsCPU->Draw("colz"); + c.cd(5); + hADCf5HBGPUvsCPU->Draw("colz"); + c.cd(6); + hADCf3HBGPUvsCPU->Draw("colz"); + c.cd(7); + { + gPad->SetLogy(); + hTDCf01HECPU->SetLineColor(kBlack); + hTDCf01HECPU->SetLineWidth(1.); + hTDCf01HECPU->Draw(""); + hTDCf01HEGPU->SetLineColor(kBlue); + hTDCf01HEGPU->SetLineWidth(1.); + hTDCf01HEGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats*)hTDCf01HEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + c.cd(8); + hTDCf01HEGPUvsCPU->Draw("colz"); + c.cd(9); + hTDCf3HBGPUvsCPU->Draw("colz"); + + c.SaveAs("plots.pdf"); + } + + rfin.Close(); + rfout.Write(); + rfout.Close(); +} diff --git a/EventFilter/HcalRawToDigi/plugins/BuildFile.xml b/EventFilter/HcalRawToDigi/plugins/BuildFile.xml index ccf6a061119c2..aa66a2cb81bdf 100644 --- a/EventFilter/HcalRawToDigi/plugins/BuildFile.xml +++ b/EventFilter/HcalRawToDigi/plugins/BuildFile.xml @@ -1,16 +1,25 @@ + + + + + - - - + - - - + + + + + + + + + diff --git a/EventFilter/HcalRawToDigi/plugins/DeclsForKernels.h b/EventFilter/HcalRawToDigi/plugins/DeclsForKernels.h new file mode 100644 index 0000000000000..9903b77efb341 --- /dev/null +++ b/EventFilter/HcalRawToDigi/plugins/DeclsForKernels.h @@ -0,0 +1,86 @@ +#ifndef EventFilter_HcalRawToDigi_interface_DeclsForKernels_h +#define EventFilter_HcalRawToDigi_interface_DeclsForKernels_h + +#include + +#include "CUDADataFormats/HcalDigi/interface/DigiCollection.h" +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" + +#include "ElectronicsMappingGPU.h" + +namespace hcal { + namespace raw { + + constexpr int32_t empty_event_size = 32; + constexpr uint32_t utca_nfeds_max = 50; + constexpr uint32_t nbytes_per_fed_max = 10 * 1024; + + // each collection corresponds to a particular flavor with a certain number of + // samples per digi + constexpr uint32_t numOutputCollections = 3; + constexpr uint8_t OutputF01HE = 0; + constexpr uint8_t OutputF5HB = 1; + constexpr uint8_t OutputF3HB = 2; + + struct ConfigurationParameters { + uint32_t maxChannelsF01HE; + uint32_t maxChannelsF5HB; + uint32_t maxChannelsF3HB; + uint32_t nsamplesF01HE; + uint32_t nsamplesF5HB; + uint32_t nsamplesF3HB; + }; + + struct InputDataCPU { + cms::cuda::host::unique_ptr data; + cms::cuda::host::unique_ptr offsets; + cms::cuda::host::unique_ptr feds; + }; + + struct OutputDataCPU { + cms::cuda::host::unique_ptr nchannels; + }; + + struct ScratchDataGPU { + // depends on the number of output collections + // that is a statically known predefined number + cms::cuda::device::unique_ptr pChannelsCounters; + }; + + struct OutputDataGPU { + DigiCollection digisF01HE; + DigiCollection digisF5HB; + DigiCollection digisF3HB; + + void allocate(ConfigurationParameters const &config, cudaStream_t cudaStream) { + digisF01HE.data = cms::cuda::make_device_unique( + config.maxChannelsF01HE * compute_stride(config.nsamplesF01HE), cudaStream); + digisF01HE.ids = cms::cuda::make_device_unique(config.maxChannelsF01HE, cudaStream); + + digisF5HB.data = cms::cuda::make_device_unique( + config.maxChannelsF5HB * compute_stride(config.nsamplesF5HB), cudaStream); + digisF5HB.ids = cms::cuda::make_device_unique(config.maxChannelsF5HB, cudaStream); + digisF5HB.npresamples = cms::cuda::make_device_unique(config.maxChannelsF5HB, cudaStream); + + digisF3HB.data = cms::cuda::make_device_unique( + config.maxChannelsF3HB * compute_stride(config.nsamplesF3HB), cudaStream); + digisF3HB.ids = cms::cuda::make_device_unique(config.maxChannelsF3HB, cudaStream); + } + }; + + struct InputDataGPU { + cms::cuda::device::unique_ptr data; + cms::cuda::device::unique_ptr offsets; + cms::cuda::device::unique_ptr feds; + }; + + struct ConditionsProducts { + ElectronicsMappingGPU::Product const &eMappingProduct; + }; + + } // namespace raw +} // namespace hcal + +#endif // EventFilter_HcalRawToDigi_interface_DeclsForKernels_h diff --git a/EventFilter/HcalRawToDigi/plugins/DecodeGPU.cu b/EventFilter/HcalRawToDigi/plugins/DecodeGPU.cu new file mode 100644 index 0000000000000..4f2ca85861b30 --- /dev/null +++ b/EventFilter/HcalRawToDigi/plugins/DecodeGPU.cu @@ -0,0 +1,593 @@ +#include "DataFormats/HcalDetId/interface/HcalElectronicsId.h" +#include "DataFormats/HcalDetId/interface/HcalSubdetector.h" +#include "DataFormats/HcalDetId/interface/HcalDetId.h" + +#include "EventFilter/HcalRawToDigi/plugins/DecodeGPU.h" + +#include +using namespace cooperative_groups; + +namespace hcal { + namespace raw { + + __forceinline__ __device__ char const* get_subdet_str(DetId const& did) { + switch (did.subdetId()) { + case HcalEmpty: + return "HcalEmpty"; + break; + case HcalBarrel: + return "HcalBarrel"; + break; + case HcalEndcap: + return "HcalEndcap"; + break; + case HcalOuter: + return "HcalOuter"; + break; + case HcalForward: + return "HcalForward"; + break; + case HcalTriggerTower: + return "HcalTriggerTower"; + break; + case HcalOther: + return "HcalOther"; + break; + default: + return "Unknown"; + break; + } + + return "Unknown"; + } + + __forceinline__ __device__ bool is_channel_header_word(uint16_t const* ptr) { + uint8_t bit = (*ptr >> 15) & 0x1; + return bit == 1; + } + + template + constexpr bool is_power_of_two(T x) { + return (x != 0) && ((x & (x - 1)) == 0); + } + + template + __global__ void kernel_rawdecode_test(unsigned char const* data, + uint32_t const* offsets, + int const* feds, + uint32_t const* eid2did, + uint32_t const* eid2tid, + uint16_t* digisF01HE, + uint32_t* idsF01HE, + uint16_t* digisF5HB, + uint32_t* idsF5HB, + uint8_t* npresamplesF5HB, + uint16_t* digisF3HB, + uint32_t* idsF3HB, + uint32_t* pChannelsCounters, + uint32_t const nsamplesF01HE, + uint32_t const nsamplesF5HB, + uint32_t const nsamplesF3HB, + uint32_t const nBytesTotal) { + // in order to properly use cooperative groups + static_assert(is_power_of_two(NTHREADS) == true && NTHREADS <= 32); + + thread_block_tile thread_group = tiled_partition(this_thread_block()); + + auto const iamc = threadIdx.x / NTHREADS; + auto const ifed = blockIdx.x; + auto const offset = offsets[ifed]; + +#ifdef HCAL_RAWDECODE_GPUDEBUG_CG + if (ifed > 0 || iamc > 0) + return; + printf("threadIdx.x = %d rank = %d iamc = %d\n", threadIdx.x, thread_group.thread_rank(), iamc); +#endif + +#ifdef HCAL_RAWDECODE_GPUDEBUG + auto const fed = feds[ifed]; + auto const size = ifed == gridDim.x - 1 ? nBytesTotal - offset : offsets[ifed + 1] - offset; + printf("ifed = %d fed = %d offset = %u size = %u\n", ifed, fed, offset, size); +#endif + + // offset to the right raw buffer + uint64_t const* buffer = reinterpret_cast(data + offset); + +#ifdef HCAL_RAWDECODE_GPUDEBUG + // + // fed header + // + auto const fed_header = buffer[0]; + uint32_t const fed_id = (fed_header >> 8) & 0xfff; + uint32_t const bx = (fed_header >> 20) & 0xfff; + uint32_t const lv1 = (fed_header >> 32) & 0xffffff; + uint8_t const trigger_type = (fed_header >> 56) & 0xf; + uint8_t const bid_fed_header = (fed_header >> 60) & 0xf; + + printf("fed = %d fed_id = %u bx = %u lv1 = %u trigger_type = %u bid = %u\n", + fed, + fed_id, + bx, + lv1, + trigger_type, + bid_fed_header); +#endif + + // amc 13 header + auto const amc13word = buffer[1]; + uint8_t const namc = (amc13word >> 52) & 0xf; + if (iamc >= namc) + return; + +#ifdef HCAL_RAWDECODE_GPUDEBUG + uint8_t const amc13version = (amc13word >> 60) & 0xf; + uint32_t const amc13OrbitNumber = (amc13word >> 4) & 0xffffffffu; + printf("fed = %d namc = %u amc13version = %u amc13OrbitNumber = %u\n", fed, namc, amc13version, amc13OrbitNumber); +#endif + + // compute the offset int to the right buffer + uint32_t amcoffset = 0; + for (uint8_t ii = 0u; ii < iamc; ii++) { + auto const word = buffer[2 + ii]; + int const amcSize = (word >> 32) & 0xffffff; + amcoffset += amcSize; + } + + auto const word = buffer[2 + iamc]; + int const amcSize = (word >> 32) & 0xffffff; + +#ifdef HCAL_RAWDECODE_GPUDEBUG + uint16_t const amcid = word & 0xffff; + int const slot = (word >> 16) & 0xf; + int const amcBlockNumber = (word >> 20) & 0xff; + printf("fed = %d amcid = %u slot = %d amcBlockNumber = %d\n", fed, amcid, slot, amcBlockNumber); + + bool const amcmore = ((word >> 61) & 0x1) != 0; + bool const amcSegmented = ((word >> 60) & 0x1) != 0; + bool const amcLengthOk = ((word >> 62) & 0x1) != 0; + bool const amcCROk = ((word >> 56) & 0x1) != 0; + bool const amcDataPresent = ((word >> 58) & 0x1) != 0; + bool const amcDataValid = ((word >> 56) & 0x1) != 0; + bool const amcEnabled = ((word >> 59) & 0x1) != 0; + printf( + "fed = %d amcmore = %d amcSegmented = %d, amcLengthOk = %d amcCROk = %d\n>> amcDataPresent = %d amcDataValid " + "= %d amcEnabled = %d\n", + fed, + static_cast(amcmore), + static_cast(amcSegmented), + static_cast(amcLengthOk), + static_cast(amcCROk), + static_cast(amcDataPresent), + static_cast(amcDataValid), + static_cast(amcEnabled)); +#endif + + // get to the payload + auto const* payload64 = buffer + 2 + namc + amcoffset; + +#ifdef HCAL_RAWDECODE_GPUDEBUG + // uhtr header v1 1st 64 bits + auto const payload64_w0 = payload64[0]; +#endif + // uhtr n bytes comes from amcSize, according to the cpu version! + uint32_t const data_length64 = amcSize; + +#ifdef HCAL_RAWDECODE_GPUDEBUG + uint16_t bcn = (payload64_w0 >> 20) & 0xfff; + uint32_t evn = (payload64_w0 >> 32) & 0xffffff; + printf("fed = %d data_length64 = %u bcn = %u evn = %u\n", fed, data_length64, bcn, evn); +#endif + + // uhtr header v1 2nd 64 bits + auto const payload64_w1 = payload64[1]; + uint8_t const uhtrcrate = payload64_w1 & 0xff; + uint8_t const uhtrslot = (payload64_w1 >> 8) & 0xf; + uint8_t const presamples = (payload64_w1 >> 12) & 0xf; + uint8_t const payloadFormat = (payload64_w1 >> 44) & 0xf; + +#ifdef HCAL_RAWDECODE_GPUDEBUG + uint16_t const orbitN = (payload64_w1 >> 16) & 0xffff; + uint8_t const firmFlavor = (payload64_w1 >> 32) & 0xff; + uint8_t const eventType = (payload64_w1 >> 40) & 0xf; + printf( + "fed = %d crate = %u slot = %u presamples = %u\n>>> orbitN = %u firmFlavor = %u eventType = %u payloadFormat " + "= %u\n", + fed, + uhtrcrate, + uhtrslot, + presamples, + orbitN, + firmFlavor, + eventType, + payloadFormat); +#endif + + // this should be filtering out uMNio... + if (payloadFormat != 1) + return; + + // skip uhtr header words + auto const channelDataSize = data_length64 - 2; // 2 uhtr header v1 words + auto const* channelDataBuffer64Start = payload64 + 2; // 2 uhtr header v2 wds + auto const* ptr = reinterpret_cast(channelDataBuffer64Start); + auto const* end = ptr + sizeof(uint64_t) / sizeof(uint16_t) * (channelDataSize - 1); + auto const t_rank = thread_group.thread_rank(); + + // iterate through the channel data + while (ptr != end) { + // this is the starting point for this thread group for this iteration + // with respect to this pointer every thread will move forward afterwards + auto const* const start_ptr = ptr; + +#ifdef HCAL_RAWDECODE_GPUDEBUG_CG + thread_group.sync(); +#endif + + // skip to the header word of the right channel for this thread + int counter = 0; + while (counter < thread_group.thread_rank()) { + // just a check for threads that land beyond the end + if (ptr == end) + break; + + // move ptr one forward past header + if (is_channel_header_word(ptr)) + ++ptr; + else { + // go to the next channel and do not consider this guy as a channel + while (ptr != end) + if (!is_channel_header_word(ptr)) + ++ptr; + else + break; + continue; + } + + // skip + while (ptr != end) + if (!is_channel_header_word(ptr)) + ++ptr; + else + break; + counter++; + } + +#ifdef HCAL_RAWDECODE_GPUDEBUG_CG + thread_group.sync(); + printf("ptr - start_ptr = %d counter = %d rank = %d\n", static_cast(ptr - start_ptr), counter, t_rank); +#endif + + // when the end is near, channels will land outside of the [start_ptr, end) region + if (ptr != end) { + // for all of the flavors, these 2 guys have the same bit layout + uint8_t const flavor = (ptr[0] >> 12) & 0x7; + uint8_t const channelid = ptr[0] & 0xff; + auto const* const new_channel_start = ptr; + + // flavor dependent stuff + switch (flavor) { + case 0: + case 1: { + // treat eid and did + uint8_t fiber = (channelid >> 3) & 0x1f; + uint8_t fchannel = channelid & 0x7; + HcalElectronicsId eid{uhtrcrate, uhtrslot, fiber, fchannel, false}; + auto const did = HcalDetId{eid2did[eid.linearIndex()]}; + +#ifdef HCAL_RAWDECODE_GPUDEBUG + printf("erawId = %u linearIndex = %u drawid = %u subdet = %s\n", + eid.rawId(), + eid.linearIndex(), + did.rawId(), + get_subdet_str(did)); + printf("flavor = %u crate = %u slot = %u channelid = %u fiber = %u fchannel = %u\n", + flavor, + uhtrcrate, + uhtrslot, + channelid, + fiber, + fchannel); +#endif + + // remove digis not for HE + if (did.subdetId() != HcalEndcap) + break; + + // count words + auto const* channel_header_word = ptr++; + while (!is_channel_header_word(ptr) && ptr != end) + ++ptr; + auto const* channel_end = ptr; // set ptr + uint32_t const nwords = channel_end - channel_header_word; + + // filter out this digi if nwords does not equal expected + auto const expected_words = compute_stride(nsamplesF01HE); + if (nwords != expected_words) + break; + + // inc the number of digis of this type + auto const pos = atomicAdd(&pChannelsCounters[OutputF01HE], 1); +#ifdef HCAL_RAWDECODE_GPUDEBUG_CG + printf("rank = %d pos = %d\n", thread_group.thread_rank(), pos); +#endif + + // store to global mem words for this digi + idsF01HE[pos] = did.rawId(); + + for (uint32_t iword = 0; iword < expected_words; iword++) + digisF01HE[pos * expected_words + iword] = channel_header_word[iword]; + +#ifdef HCAL_RAWDECODE_GPUDEBUG + printf("nwords = %u\n", nwords); +#endif + + break; + } + case 3: { + // treat eid and did + uint8_t fiber = (channelid >> 3) & 0x1f; + uint8_t fchannel = channelid & 0x7; + HcalElectronicsId eid{uhtrcrate, uhtrslot, fiber, fchannel, false}; + auto const did = HcalDetId{eid2did[eid.linearIndex()]}; + +#ifdef HCAL_RAWDECODE_GPUDEBUG + printf("erawId = %u linearIndex = %u drawid = %u subdet = %s\n", + eid.rawId(), + eid.linearIndex(), + did.rawId(), + get_subdet_str(did)); + printf("flavor = %u crate = %u slot = %u channelid = %u fiber = %u fchannel = %u\n", + flavor, + uhtrcrate, + uhtrslot, + channelid, + fiber, + fchannel); +#endif + + // remove digis not for HE + if (did.subdetId() != HcalBarrel) + break; + + // count words + auto const* channel_header_word = ptr++; + while (!is_channel_header_word(ptr) && ptr != end) + ++ptr; + auto const* channel_end = ptr; // set ptr + uint32_t const nwords = channel_end - channel_header_word; + + // filter out this digi if nwords does not equal expected + auto const expected_words = compute_stride(nsamplesF3HB); + if (nwords != expected_words) + break; + + // inc the number of digis of this type + auto const pos = atomicAdd(&pChannelsCounters[OutputF3HB], 1); + + // store to global mem words for this digi + idsF3HB[pos] = did.rawId(); + for (uint32_t iword = 0; iword < expected_words; iword++) + digisF3HB[pos * expected_words + iword] = channel_header_word[iword]; + +#ifdef HCAL_RAWDECODE_GPUDEBUG + printf("nwords = %u\n", nwords); +#endif + + break; + } + case 2: { + uint8_t fiber = (channelid >> 3) & 0x1f; + uint8_t fchannel = channelid & 0x7; + HcalElectronicsId eid{uhtrcrate, uhtrslot, fiber, fchannel, false}; + auto const did = DetId{eid2did[eid.linearIndex()]}; + +#ifdef HCAL_RAWDECODE_GPUDEBUG + printf("erawId = %u linearIndex = %u drawid = %u subdet = %s\n", + eid.rawId(), + eid.linearIndex(), + did.rawId(), + get_subdet_str(did)); + printf("flavor = %u crate = %u slot = %u channelid = %u fiber = %u fchannel = %u\n", + flavor, + uhtrcrate, + uhtrslot, + channelid, + fiber, + fchannel); +#endif + + break; + } + case 4: { + uint8_t link = (channelid >> 4) & 0xf; + uint8_t tower = channelid & 0xf; + HcalElectronicsId eid{uhtrcrate, uhtrslot, link, tower, true}; + auto const did = DetId{eid2tid[eid.linearIndex()]}; + +#ifdef HCAL_RAWDECODE_GPUDEBUG + printf("erawId = %u linearIndex = %u drawid = %u subdet = %s\n", + eid.rawId(), + eid.linearIndex(), + did.rawId(), + get_subdet_str(did)); + printf("flavor = %u crate = %u slot = %u channelid = %u link = %u tower = %u\n", + flavor, + uhtrcrate, + uhtrslot, + channelid, + link, + tower); +#endif + + break; + } + case 5: { + uint8_t fiber = (channelid >> 2) & 0x3f; + uint8_t fchannel = channelid & 0x3; + HcalElectronicsId eid{uhtrcrate, uhtrslot, fiber, fchannel, false}; + auto const did = HcalDetId{eid2did[eid.linearIndex()]}; + +#ifdef HCAL_RAWDECODE_GPUDEBUG + printf("erawId = %u linearIndex = %u drawid = %u subdet = %s\n", + eid.rawId(), + eid.linearIndex(), + did.rawId(), + get_subdet_str(did)); + printf("flavor = %u crate = %u slot = %u channelid = %u fiber = %u fchannel = %u\n", + flavor, + uhtrcrate, + uhtrslot, + channelid, + fiber, + fchannel); +#endif + + // remove digis not for HB + if (did.subdetId() != HcalBarrel) + break; + + // count words + auto const* channel_header_word = ptr++; + while (!is_channel_header_word(ptr) && ptr != end) + ++ptr; + auto const* channel_end = ptr; // set ptr + uint32_t const nwords = channel_end - channel_header_word; + + // filter out this digi if nwords does not equal expected + auto const expected_words = compute_stride(nsamplesF5HB); + if (nwords != expected_words) + break; + + // inc the number of digis of this type + auto const pos = atomicAdd(&pChannelsCounters[OutputF5HB], 1); + +#ifdef HCAL_RAWDECODE_GPUDEBUG_CG + printf("rank = %d pos = %d\n", thread_group.thread_rank(), pos); +#endif + + // store to global mem words for this digi + idsF5HB[pos] = did.rawId(); + npresamplesF5HB[pos] = presamples; + for (uint32_t iword = 0; iword < expected_words; iword++) + digisF5HB[pos * expected_words + iword] = channel_header_word[iword]; + + break; + } + case 7: { + uint8_t const fiber = (channelid >> 2) & 0x3f; + uint8_t const fchannel = channelid & 0x3; + HcalElectronicsId eid{uhtrcrate, uhtrslot, fiber, fchannel, false}; + auto const did = DetId{eid2did[eid.linearIndex()]}; + + /* uncomment to check the linear index validity + if (eid.rawId() >= HcalElectronicsId::maxLinearIndex) { +#ifdef HCAL_RAWDECODE_GPUDEBUG + printf("*** rawid = %u has no known det id***\n", eid.rawId()); +#endif + break; + } + */ + +#ifdef HCAL_RAWDECODE_GPUDEBUG + printf("erawId = %u linearIndex = %u drawid = %u\n", eid.rawId(), eid.linearIndex(), did.rawId()); + printf("flavor = %u crate = %u slot = %u channelid = %u fiber = %u fchannel = %u\n", + flavor, + uhtrcrate, + uhtrslot, + channelid, + fiber, + fchannel); +#endif + + break; + } + default: +#ifdef HCAL_RAWDECODE_GPUDEBUG + printf("flavor = %u crate = %u slot = %u channelid = %u\n", flavor, uhtrcrate, uhtrslot, channelid); +#endif + ; + } + + // skip to the next word in case + // 1) current channel was not treated + // 2) we are in the middle of the digi words and not at the end + while (new_channel_start == ptr || !is_channel_header_word(ptr) && ptr != end) + ++ptr; + } + + // thread with rank 31 of the group will have the ptr pointing to the + // header word of the next channel or the end + int const offset_to_shuffle = ptr - start_ptr; + + // always receive from the last guy in the group + auto const offset_for_rank31 = thread_group.shfl(offset_to_shuffle, NTHREADS - 1); + +#ifdef HCAL_RAWDECODE_GPUDEBUG_CG + printf("rank = %d offset_to_shuffle = %d offset_for_rank32 = %d\n", + thread_group.thread_rank(), + offset_to_shuffle, + offset_for_rank31); +#endif + + // update the ptr for all threads of this group + // NOTE: relative to the start_ptr that is the same for all threads of + // this group + ptr = start_ptr + offset_for_rank31; + } + } + + void entryPoint(InputDataCPU const& inputCPU, + InputDataGPU& inputGPU, + OutputDataGPU& outputGPU, + ScratchDataGPU& scratchGPU, + OutputDataCPU& outputCPU, + ConditionsProducts const& conditions, + ConfigurationParameters const& config, + cudaStream_t cudaStream, + uint32_t const nfedsWithData, + uint32_t const nbytesTotal) { + // transfer + cudaCheck(cudaMemcpyAsync(inputGPU.data.get(), + inputCPU.data.get(), + nbytesTotal * sizeof(unsigned char), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(inputGPU.offsets.get(), + inputCPU.offsets.get(), + nfedsWithData * sizeof(uint32_t), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck( + cudaMemsetAsync(scratchGPU.pChannelsCounters.get(), 0, sizeof(uint32_t) * numOutputCollections, cudaStream)); + cudaCheck(cudaMemcpyAsync( + inputGPU.feds.get(), inputCPU.feds.get(), nfedsWithData * sizeof(int), cudaMemcpyHostToDevice, cudaStream)); + + // 12 is the max number of modules per crate + kernel_rawdecode_test<32><<>>(inputGPU.data.get(), + inputGPU.offsets.get(), + inputGPU.feds.get(), + conditions.eMappingProduct.eid2did, + conditions.eMappingProduct.eid2tid, + outputGPU.digisF01HE.data.get(), + outputGPU.digisF01HE.ids.get(), + outputGPU.digisF5HB.data.get(), + outputGPU.digisF5HB.ids.get(), + outputGPU.digisF5HB.npresamples.get(), + outputGPU.digisF3HB.data.get(), + outputGPU.digisF3HB.ids.get(), + scratchGPU.pChannelsCounters.get(), + config.nsamplesF01HE, + config.nsamplesF5HB, + config.nsamplesF3HB, + nbytesTotal); + cudaCheck(cudaGetLastError()); + + cudaCheck(cudaMemcpyAsync(outputCPU.nchannels.get(), + scratchGPU.pChannelsCounters.get(), + sizeof(uint32_t) * numOutputCollections, + cudaMemcpyDeviceToHost, + cudaStream)); + } + + } // namespace raw +} // namespace hcal diff --git a/EventFilter/HcalRawToDigi/plugins/DecodeGPU.h b/EventFilter/HcalRawToDigi/plugins/DecodeGPU.h new file mode 100644 index 0000000000000..3d5e4eec32269 --- /dev/null +++ b/EventFilter/HcalRawToDigi/plugins/DecodeGPU.h @@ -0,0 +1,23 @@ +#ifndef EventFilter_HcalRawToDigi_interface_DecodeGPU_h +#define EventFilter_HcalRawToDigi_interface_DecodeGPU_h + +#include "DeclsForKernels.h" + +namespace hcal { + namespace raw { + + void entryPoint(InputDataCPU const&, + InputDataGPU&, + OutputDataGPU&, + ScratchDataGPU&, + OutputDataCPU&, + ConditionsProducts const&, + ConfigurationParameters const&, + cudaStream_t cudaStream, + uint32_t const, + uint32_t const); + + } +} // namespace hcal + +#endif // EventFilter_HcalRawToDigi_interface_DecodeGPU_h diff --git a/EventFilter/HcalRawToDigi/plugins/ElectronicsMappingGPU.cc b/EventFilter/HcalRawToDigi/plugins/ElectronicsMappingGPU.cc new file mode 100644 index 0000000000000..6b7b89cc6ea77 --- /dev/null +++ b/EventFilter/HcalRawToDigi/plugins/ElectronicsMappingGPU.cc @@ -0,0 +1,63 @@ +#include "DataFormats/HcalDetId/interface/HcalElectronicsId.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +#include "ElectronicsMappingGPU.h" + +namespace hcal { + namespace raw { + + // TODO: 0x3FFFFF * 4B ~= 16MB + // tmp solution for linear mapping of eid -> did + ElectronicsMappingGPU::ElectronicsMappingGPU(HcalElectronicsMap const& mapping) + : eid2tid_(HcalElectronicsId::maxLinearIndex, 0u), eid2did_(HcalElectronicsId::maxLinearIndex, 0u) { + auto const& eidsPrecision = mapping.allElectronicsIdPrecision(); + for (uint32_t i = 0; i < eidsPrecision.size(); ++i) { + auto const& eid = eidsPrecision[i]; + + // assign + eid2did_[eid.linearIndex()] = eid.isTriggerChainId() ? 0u : mapping.lookup(eid).rawId(); + } + + auto const& eidsTrigger = mapping.allElectronicsIdTrigger(); + for (uint32_t i = 0; i < eidsTrigger.size(); i++) { + auto const& eid = eidsTrigger[i]; + + // assign + eid2tid_[eid.linearIndex()] = eid.isTriggerChainId() ? mapping.lookupTrigger(eid).rawId() : 0u; + } + } + + ElectronicsMappingGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(eid2did)); + cudaCheck(cudaFree(eid2tid)); + } + + ElectronicsMappingGPU::Product const& ElectronicsMappingGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](ElectronicsMappingGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck(cudaMalloc((void**)&product.eid2did, this->eid2did_.size() * sizeof(uint32_t))); + cudaCheck(cudaMalloc((void**)&product.eid2tid, this->eid2tid_.size() * sizeof(uint32_t))); + + // transfer + cudaCheck(cudaMemcpyAsync(product.eid2did, + this->eid2did_.data(), + this->eid2did_.size() * sizeof(uint32_t), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.eid2tid, + this->eid2tid_.data(), + this->eid2tid_.size() * sizeof(uint32_t), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; + } + + } // namespace raw +} // namespace hcal + +TYPELOOKUP_DATA_REG(hcal::raw::ElectronicsMappingGPU); diff --git a/EventFilter/HcalRawToDigi/plugins/ElectronicsMappingGPU.h b/EventFilter/HcalRawToDigi/plugins/ElectronicsMappingGPU.h new file mode 100644 index 0000000000000..0f4c12f02a92d --- /dev/null +++ b/EventFilter/HcalRawToDigi/plugins/ElectronicsMappingGPU.h @@ -0,0 +1,48 @@ +#ifndef EventFilter_HcalRawToDigi_plugins_ElectronicsMappingGPU_h +#define EventFilter_HcalRawToDigi_plugins_ElectronicsMappingGPU_h + +#include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#endif + +namespace hcal { + namespace raw { + + class ElectronicsMappingGPU { + public: + struct Product { + ~Product(); + // trigger + uint32_t *eid2tid; + // detector + uint32_t *eid2did; + }; + +#ifndef __CUDACC__ + + // rearrange pedestals + ElectronicsMappingGPU(HcalElectronicsMap const &); + + // will call dealloation for Product thru ~Product + ~ElectronicsMappingGPU() = default; + + // get device pointers + Product const &getProduct(cudaStream_t) const; + + private: + // in the future, we need to arrange so to avoid this copy on the host + // if possible + std::vector> eid2tid_; + std::vector> eid2did_; + + cms::cuda::ESProduct product_; +#endif + }; + + } // namespace raw +} // namespace hcal + +#endif // EventFilter_HcalRawToDigi_plugins_ElectronicsMappingGPU_h diff --git a/EventFilter/HcalRawToDigi/plugins/HcalCPUDigisProducer.cc b/EventFilter/HcalRawToDigi/plugins/HcalCPUDigisProducer.cc new file mode 100644 index 0000000000000..c2b67a10afaff --- /dev/null +++ b/EventFilter/HcalRawToDigi/plugins/HcalCPUDigisProducer.cc @@ -0,0 +1,117 @@ +#include + +#include "CUDADataFormats/HcalDigi/interface/DigiCollection.h" +#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" +#include "DataFormats/HcalDigi/interface/HcalDigiCollections.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +class HcalCPUDigisProducer : public edm::stream::EDProducer { +public: + explicit HcalCPUDigisProducer(edm::ParameterSet const& ps); + ~HcalCPUDigisProducer() override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + void acquire(edm::Event const&, edm::EventSetup const&, edm::WaitingTaskWithArenaHolder) override; + void produce(edm::Event&, edm::EventSetup const&) override; + +private: + using IProductTypef01 = cms::cuda::Product>; + edm::EDGetTokenT digisF01HETokenIn_; + using IProductTypef5 = cms::cuda::Product>; + edm::EDGetTokenT digisF5HBTokenIn_; + using IProductTypef3 = cms::cuda::Product>; + edm::EDGetTokenT digisF3HBTokenIn_; + + using OProductTypef01 = + hcal::DigiCollection>; + edm::EDPutTokenT digisF01HETokenOut_; + using OProductTypef5 = + hcal::DigiCollection>; + edm::EDPutTokenT digisF5HBTokenOut_; + using OProductTypef3 = + hcal::DigiCollection>; + edm::EDPutTokenT digisF3HBTokenOut_; + + // needed to pass data from acquire to produce + OProductTypef01 digisf01HE_; + OProductTypef5 digisf5HB_; + OProductTypef3 digisf3HB_; +}; + +void HcalCPUDigisProducer::fillDescriptions(edm::ConfigurationDescriptions& confDesc) { + edm::ParameterSetDescription desc; + + desc.add("digisLabelF01HEIn", edm::InputTag{"hcalRawToDigiGPU", "f01HEDigisGPU"}); + desc.add("digisLabelF5HBIn", edm::InputTag{"hcalRawToDigiGPU", "f5HBDigisGPU"}); + desc.add("digisLabelF3HBIn", edm::InputTag{"hcalRawToDigiGPU", "f3HBDigisGPU"}); + desc.add("digisLabelF01HEOut", "f01HEDigis"); + desc.add("digisLabelF5HBOut", "f5HBDigis"); + desc.add("digisLabelF3HBOut", "f3HBDigis"); + + confDesc.addWithDefaultLabel(desc); +} + +HcalCPUDigisProducer::HcalCPUDigisProducer(const edm::ParameterSet& ps) + : digisF01HETokenIn_{consumes(ps.getParameter("digisLabelF01HEIn"))}, + digisF5HBTokenIn_{consumes(ps.getParameter("digisLabelF5HBIn"))}, + digisF3HBTokenIn_{consumes(ps.getParameter("digisLabelF3HBIn"))}, + digisF01HETokenOut_{produces(ps.getParameter("digisLabelF01HEOut"))}, + digisF5HBTokenOut_{produces(ps.getParameter("digisLabelF5HBOut"))}, + digisF3HBTokenOut_{produces(ps.getParameter("digisLabelF3HBOut"))} {} + +HcalCPUDigisProducer::~HcalCPUDigisProducer() {} + +void HcalCPUDigisProducer::acquire(edm::Event const& event, + edm::EventSetup const& setup, + edm::WaitingTaskWithArenaHolder taskHolder) { + // retrieve data/ctx + auto const& f01HEProduct = event.get(digisF01HETokenIn_); + auto const& f5HBProduct = event.get(digisF5HBTokenIn_); + auto const& f3HBProduct = event.get(digisF3HBTokenIn_); + cms::cuda::ScopedContextAcquire ctx{f01HEProduct, std::move(taskHolder)}; + auto const& f01HEDigis = ctx.get(f01HEProduct); + auto const& f5HBDigis = ctx.get(f5HBProduct); + auto const& f3HBDigis = ctx.get(f3HBProduct); + + // resize out tmp buffers + digisf01HE_.stride = f01HEDigis.stride; + digisf5HB_.stride = f5HBDigis.stride; + digisf3HB_.stride = f3HBDigis.stride; + digisf01HE_.resize(f01HEDigis.size); + digisf5HB_.resize(f5HBDigis.size); + digisf3HB_.resize(f3HBDigis.size); + + auto lambdaToTransfer = [&ctx](auto& dest, auto* src) { + using vector_type = typename std::remove_reference::type; + using type = typename vector_type::value_type; + using src_data_type = typename std::remove_pointer::type; + static_assert(std::is_same::value && "Dest and Src data types do not match"); + cudaCheck(cudaMemcpyAsync(dest.data(), src, dest.size() * sizeof(type), cudaMemcpyDeviceToHost, ctx.stream())); + }; + + lambdaToTransfer(digisf01HE_.data, f01HEDigis.data.get()); + lambdaToTransfer(digisf01HE_.ids, f01HEDigis.ids.get()); + + lambdaToTransfer(digisf5HB_.data, f5HBDigis.data.get()); + lambdaToTransfer(digisf5HB_.ids, f5HBDigis.ids.get()); + lambdaToTransfer(digisf5HB_.npresamples, f5HBDigis.npresamples.get()); + + lambdaToTransfer(digisf3HB_.data, f3HBDigis.data.get()); + lambdaToTransfer(digisf3HB_.ids, f3HBDigis.ids.get()); +} + +void HcalCPUDigisProducer::produce(edm::Event& event, edm::EventSetup const& setup) { + event.emplace(digisF01HETokenOut_, std::move(digisf01HE_)); + event.emplace(digisF5HBTokenOut_, std::move(digisf5HB_)); + event.emplace(digisF3HBTokenOut_, std::move(digisf3HB_)); +} + +DEFINE_FWK_MODULE(HcalCPUDigisProducer); diff --git a/EventFilter/HcalRawToDigi/plugins/HcalDigiToRawuHTR.cc b/EventFilter/HcalRawToDigi/plugins/HcalDigiToRawuHTR.cc index 6e77221303a17..a30cbb005ee55 100644 --- a/EventFilter/HcalRawToDigi/plugins/HcalDigiToRawuHTR.cc +++ b/EventFilter/HcalRawToDigi/plugins/HcalDigiToRawuHTR.cc @@ -50,42 +50,43 @@ class HcalDigiToRawuHTR : public edm::global::EDProducer<> { static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - int _verbosity; - int tdc1_; - int tdc2_; - bool packHBTDC_; + const int _verbosity; + const vector tdc1_; + const vector tdc2_; + const bool packHBTDC_; static constexpr int tdcmax_ = 49; - std::string electronicsMapLabel_; - edm::EDGetTokenT > tok_QIE10DigiCollection_; - edm::EDGetTokenT > tok_QIE11DigiCollection_; - edm::EDGetTokenT tok_HBHEDigiCollection_; - edm::EDGetTokenT tok_HFDigiCollection_; - edm::EDGetTokenT tok_TPDigiCollection_; - edm::ESGetToken tok_electronicsMap_; + const edm::EDGetTokenT> tok_QIE10DigiCollection_; + const edm::EDGetTokenT> tok_QIE11DigiCollection_; + const edm::EDGetTokenT tok_HBHEDigiCollection_; + const edm::EDGetTokenT tok_HFDigiCollection_; + const edm::EDGetTokenT tok_TPDigiCollection_; + const edm::ESGetToken tok_electronicsMap_; - bool premix_; + const bool premix_; }; HcalDigiToRawuHTR::HcalDigiToRawuHTR(const edm::ParameterSet& iConfig) : _verbosity(iConfig.getUntrackedParameter("Verbosity", 0)), - tdc1_(iConfig.getParameter("tdc1")), - tdc2_(iConfig.getParameter("tdc2")), + tdc1_(iConfig.getParameter>("tdc1")), + tdc2_(iConfig.getParameter>("tdc2")), packHBTDC_(iConfig.getParameter("packHBTDC")), - electronicsMapLabel_(iConfig.getParameter("ElectronicsMap")), tok_QIE10DigiCollection_( - consumes >(iConfig.getParameter("QIE10"))), + consumes>(iConfig.getParameter("QIE10"))), tok_QIE11DigiCollection_( - consumes >(iConfig.getParameter("QIE11"))), + consumes>(iConfig.getParameter("QIE11"))), tok_HBHEDigiCollection_(consumes(iConfig.getParameter("HBHEqie8"))), tok_HFDigiCollection_(consumes(iConfig.getParameter("HFqie8"))), tok_TPDigiCollection_(consumes(iConfig.getParameter("TP"))), - tok_electronicsMap_( - esConsumes(edm::ESInputTag("", electronicsMapLabel_))), + tok_electronicsMap_(esConsumes( + edm::ESInputTag("", iConfig.getParameter("ElectronicsMap")))), premix_(iConfig.getParameter("premix")) { produces(""); - if (!(tdc1_ >= 0 && tdc1_ <= tdc2_ && tdc2_ <= tdcmax_)) - edm::LogWarning("HcalDigiToRawuHTR") << " incorrect TDC ranges " << tdc1_ << ", " << tdc2_ << ", " << tdcmax_; + for (size_t i = 0; i < tdc1_.size(); i++) { + if (!(tdc1_.at(i) >= 0 && tdc1_.at(i) <= tdc2_.at(i) && tdc2_.at(i) <= tdcmax_)) + edm::LogWarning("HcalDigiToRawuHTR") + << " incorrect TDC ranges " << i << "-th element: " << tdc1_.at(i) << ", " << tdc2_.at(i) << ", " << tdcmax_; + } } HcalDigiToRawuHTR::~HcalDigiToRawuHTR() {} @@ -113,7 +114,7 @@ void HcalDigiToRawuHTR::produce(edm::StreamID id, edm::Event& iEvent, const edm: iEvent.getByToken(tok_TPDigiCollection_, tpDigiCollection); // first argument is the fedid (minFEDID+crateId) - map > fedMap; + map> fedMap; // - - - - - - - - - - - - - - - - - - - - - - - - - - - // QIE10 precision data @@ -262,7 +263,7 @@ void HcalDigiToRawuHTR::produce(edm::StreamID id, edm::Event& iEvent, const edm: putting together the FEDRawDataCollection ------------------------------------------------------ ------------------------------------------------------ */ - for (map >::iterator fed = fedMap.begin(); fed != fedMap.end(); ++fed) { + for (map>::iterator fed = fedMap.begin(); fed != fedMap.end(); ++fed) { int fedId = fed->first; auto& rawData = fed_buffers->FEDData(fedId); @@ -288,9 +289,13 @@ void HcalDigiToRawuHTR::fillDescriptions(edm::ConfigurationDescriptions& descrip // Please change this to state exactly what you do use, even if it is no parameters edm::ParameterSetDescription desc; desc.addUntracked("Verbosity", 0); - desc.add("tdc1", 4); - desc.add("tdc2", 20); - desc.add("packHBTDC", false); + desc.add>("tdc1", {8, 14, 15, 17, 8, 14, 15, 17, 8, 14, 14, 17, 8, 14, 14, 17, 8, 13, 14, 16, 8, 13, + 14, 16, 8, 12, 14, 15, 8, 12, 14, 15, 7, 12, 13, 15, 7, 12, 13, 15, 7, 12, 13, 15, + 7, 12, 13, 15, 7, 11, 12, 14, 7, 11, 12, 14, 7, 11, 12, 14, 7, 11, 12, 7}); + desc.add>("tdc2", {10, 16, 17, 19, 10, 16, 17, 19, 10, 16, 16, 19, 10, 16, 16, 19, 10, 15, 16, 18, 10, 15, + 16, 18, 10, 14, 16, 17, 10, 14, 16, 17, 9, 14, 15, 17, 9, 14, 15, 17, 9, 14, 15, 17, + 9, 14, 15, 17, 9, 13, 14, 16, 9, 13, 14, 16, 9, 13, 14, 16, 9, 13, 14, 9}); + desc.add("packHBTDC", true); desc.add("ElectronicsMap", ""); desc.add("QIE10", edm::InputTag("simHcalDigis", "HFQIE10DigiCollection")); desc.add("QIE11", edm::InputTag("simHcalDigis", "HBHEQIE11DigiCollection")); diff --git a/EventFilter/HcalRawToDigi/plugins/HcalDigisProducerGPU.cc b/EventFilter/HcalRawToDigi/plugins/HcalDigisProducerGPU.cc new file mode 100644 index 0000000000000..9ca33340f7036 --- /dev/null +++ b/EventFilter/HcalRawToDigi/plugins/HcalDigisProducerGPU.cc @@ -0,0 +1,235 @@ +#include + +#include "CUDADataFormats/HcalDigi/interface/DigiCollection.h" +#include "DataFormats/HcalDigi/interface/HcalDigiCollections.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDAServices/interface/CUDAService.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +class HcalDigisProducerGPU : public edm::stream::EDProducer { +public: + explicit HcalDigisProducerGPU(edm::ParameterSet const& ps); + ~HcalDigisProducerGPU() override = default; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + void acquire(edm::Event const&, edm::EventSetup const&, edm::WaitingTaskWithArenaHolder) override; + void produce(edm::Event&, edm::EventSetup const&) override; + +private: + // input product tokens + edm::EDGetTokenT hbheDigiToken_; + edm::EDGetTokenT qie11DigiToken_; + + // type aliases + using HostCollectionf01 = + hcal::DigiCollection>; + using DeviceCollectionf01 = hcal::DigiCollection; + using HostCollectionf5 = + hcal::DigiCollection>; + using DeviceCollectionf5 = hcal::DigiCollection; + using HostCollectionf3 = + hcal::DigiCollection>; + using DeviceCollectionf3 = hcal::DigiCollection; + + // output product tokens + using ProductTypef01 = cms::cuda::Product; + edm::EDPutTokenT digisF01HEToken_; + using ProductTypef5 = cms::cuda::Product; + edm::EDPutTokenT digisF5HBToken_; + using ProductTypef3 = cms::cuda::Product; + edm::EDPutTokenT digisF3HBToken_; + + cms::cuda::ContextState cudaState_; + + struct ConfigParameters { + uint32_t maxChannelsF01HE, maxChannelsF5HB, maxChannelsF3HB; + }; + ConfigParameters config_; + + // per event host buffers + HostCollectionf01 hf01_; + HostCollectionf5 hf5_; + HostCollectionf3 hf3_; + + // device products: product owns memory (i.e. not the module) + DeviceCollectionf01 df01_; + DeviceCollectionf5 df5_; + DeviceCollectionf3 df3_; +}; + +void HcalDigisProducerGPU::fillDescriptions(edm::ConfigurationDescriptions& confDesc) { + edm::ParameterSetDescription desc; + + // FIXME + desc.add("hbheDigisLabel", edm::InputTag("hcalDigis")); + desc.add("qie11DigiLabel", edm::InputTag("hcalDigis")); + desc.add("digisLabelF01HE", std::string{"f01HEDigisGPU"}); + desc.add("digisLabelF5HB", std::string{"f5HBDigisGPU"}); + desc.add("digisLabelF3HB", std::string{"f3HBDigisGPU"}); + desc.add("maxChannelsF01HE", 10000u); + desc.add("maxChannelsF5HB", 10000u); + desc.add("maxChannelsF3HB", 10000u); + + confDesc.addWithDefaultLabel(desc); +} + +HcalDigisProducerGPU::HcalDigisProducerGPU(const edm::ParameterSet& ps) + : hbheDigiToken_{consumes(ps.getParameter("hbheDigisLabel"))}, + qie11DigiToken_{consumes(ps.getParameter("qie11DigiLabel"))}, + digisF01HEToken_{produces(ps.getParameter("digisLabelF01HE"))}, + digisF5HBToken_{produces(ps.getParameter("digisLabelF5HB"))}, + digisF3HBToken_{produces(ps.getParameter("digisLabelF3HB"))} { + config_.maxChannelsF01HE = ps.getParameter("maxChannelsF01HE"); + config_.maxChannelsF5HB = ps.getParameter("maxChannelsF5HB"); + config_.maxChannelsF3HB = ps.getParameter("maxChannelsF3HB"); + + // this is a preallocation for the max statically known number of time samples + // actual stride/nsamples will be inferred from data + hf01_.stride = hcal::compute_stride(QIE11DigiCollection::MAXSAMPLES); + hf5_.stride = hcal::compute_stride(HBHEDataFrame::MAXSAMPLES); + hf3_.stride = hcal::compute_stride(QIE11DigiCollection::MAXSAMPLES); + + // preallocate pinned host memory only if CUDA is available + edm::Service cs; + if (cs and cs->enabled()) { + hf01_.reserve(config_.maxChannelsF01HE); + hf5_.reserve(config_.maxChannelsF5HB); + hf3_.reserve(config_.maxChannelsF3HB); + } +} + +void HcalDigisProducerGPU::acquire(edm::Event const& event, + edm::EventSetup const& setup, + edm::WaitingTaskWithArenaHolder holder) { + // raii + cms::cuda::ScopedContextAcquire ctx{event.streamID(), std::move(holder), cudaState_}; + + // clear host buffers + hf01_.clear(); + hf5_.clear(); + hf3_.clear(); + + // event data + edm::Handle hbheDigis; + edm::Handle qie11Digis; + event.getByToken(hbheDigiToken_, hbheDigis); + event.getByToken(qie11DigiToken_, qie11Digis); + + // init f5 collection + if (not hbheDigis->empty()) { + auto const nsamples = (*hbheDigis)[0].size(); + auto const stride = hcal::compute_stride(nsamples); + hf5_.stride = stride; + + // flavor5 get device blobs + df5_.stride = stride; + df5_.data = cms::cuda::make_device_unique(config_.maxChannelsF5HB * stride, ctx.stream()); + df5_.ids = cms::cuda::make_device_unique(config_.maxChannelsF5HB, ctx.stream()); + df5_.npresamples = cms::cuda::make_device_unique(config_.maxChannelsF5HB, ctx.stream()); + } + + if (not qie11Digis->empty()) { + auto const nsamples = qie11Digis->samples(); + auto const stride01 = hcal::compute_stride(nsamples); + auto const stride3 = hcal::compute_stride(nsamples); + + hf01_.stride = stride01; + hf3_.stride = stride3; + + // flavor 0/1 get devie blobs + df01_.stride = stride01; + df01_.data = cms::cuda::make_device_unique(config_.maxChannelsF01HE * stride01, ctx.stream()); + df01_.ids = cms::cuda::make_device_unique(config_.maxChannelsF01HE, ctx.stream()); + + // flavor3 get device blobs + df3_.stride = stride3; + df3_.data = cms::cuda::make_device_unique(config_.maxChannelsF3HB * stride3, ctx.stream()); + df3_.ids = cms::cuda::make_device_unique(config_.maxChannelsF3HB, ctx.stream()); + } + + for (auto const& hbhe : *hbheDigis) { + auto const id = hbhe.id().rawId(); + auto const presamples = hbhe.presamples(); + hf5_.ids.push_back(id); + hf5_.npresamples.push_back(presamples); + auto const stride = hcal::compute_stride(hbhe.size()); + assert(stride == hf5_.stride && "strides must be the same for every single digi of the collection"); + // simple for now... + static_assert(hcal::Flavor5::HEADER_WORDS == 1); + uint16_t header_word = (1 << 15) | (0x5 << 12) | (0 << 10) | ((hbhe.sample(0).capid() & 0x3) << 8); + hf5_.data.push_back(header_word); + for (unsigned int i = 0; i < stride - hcal::Flavor5::HEADER_WORDS; i++) { + uint16_t s0 = (0 << 7) | (static_cast(hbhe.sample(2 * i).adc()) & 0x7f); + uint16_t s1 = (0 << 7) | (static_cast(hbhe.sample(2 * i + 1).adc()) & 0x7f); + uint16_t sample = (s1 << 8) | s0; + hf5_.data.push_back(sample); + } + } + + for (unsigned int i = 0; i < qie11Digis->size(); i++) { + auto const& digi = QIE11DataFrame{(*qie11Digis)[i]}; + assert(digi.samples() == qie11Digis->samples() && "collection nsamples must equal per digi samples"); + if (digi.flavor() == 0 or digi.flavor() == 1) { + if (digi.detid().subdetId() != HcalEndcap) + continue; + auto const id = digi.detid().rawId(); + hf01_.ids.push_back(id); + for (int hw = 0; hw < hcal::Flavor1::HEADER_WORDS; hw++) + hf01_.data.push_back((*qie11Digis)[i][hw]); + for (int sample = 0; sample < digi.samples(); sample++) { + hf01_.data.push_back((*qie11Digis)[i][hcal::Flavor1::HEADER_WORDS + sample]); + } + } else if (digi.flavor() == 3) { + if (digi.detid().subdetId() != HcalBarrel) + continue; + auto const id = digi.detid().rawId(); + hf3_.ids.push_back(id); + for (int hw = 0; hw < hcal::Flavor3::HEADER_WORDS; hw++) + hf3_.data.push_back((*qie11Digis)[i][hw]); + for (int sample = 0; sample < digi.samples(); sample++) { + hf3_.data.push_back((*qie11Digis)[i][hcal::Flavor3::HEADER_WORDS + sample]); + } + } + } + + auto lambdaToTransfer = [&ctx](auto* dest, auto const& src) { + if (src.empty()) + return; + using vector_type = typename std::remove_reference::type; + using type = typename vector_type::value_type; + using dest_data_type = typename std::remove_pointer::type; + static_assert(std::is_same::value && "Dest and Src data typesdo not match"); + cudaCheck(cudaMemcpyAsync(dest, src.data(), src.size() * sizeof(type), cudaMemcpyHostToDevice, ctx.stream())); + }; + + lambdaToTransfer(df01_.data.get(), hf01_.data); + lambdaToTransfer(df01_.ids.get(), hf01_.ids); + + lambdaToTransfer(df5_.data.get(), hf5_.data); + lambdaToTransfer(df5_.ids.get(), hf5_.ids); + lambdaToTransfer(df5_.npresamples.get(), hf5_.npresamples); + + lambdaToTransfer(df3_.data.get(), hf3_.data); + lambdaToTransfer(df3_.ids.get(), hf3_.ids); + + df01_.size = hf01_.ids.size(); + df5_.size = hf5_.ids.size(); + df3_.size = hf3_.ids.size(); +} + +void HcalDigisProducerGPU::produce(edm::Event& event, edm::EventSetup const& setup) { + cms::cuda::ScopedContextProduce ctx{cudaState_}; + + ctx.emplace(event, digisF01HEToken_, std::move(df01_)); + ctx.emplace(event, digisF5HBToken_, std::move(df5_)); + ctx.emplace(event, digisF3HBToken_, std::move(df3_)); +} + +DEFINE_FWK_MODULE(HcalDigisProducerGPU); diff --git a/EventFilter/HcalRawToDigi/plugins/HcalESProducerGPUDefs.cc b/EventFilter/HcalRawToDigi/plugins/HcalESProducerGPUDefs.cc new file mode 100644 index 0000000000000..749a98e990755 --- /dev/null +++ b/EventFilter/HcalRawToDigi/plugins/HcalESProducerGPUDefs.cc @@ -0,0 +1,10 @@ +#include "CondFormats/DataRecord/interface/HcalElectronicsMapRcd.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "HeterogeneousCore/CUDACore/interface/ConvertingESProducerT.h" + +#include "ElectronicsMappingGPU.h" + +using HcalElectronicsMappingGPUESProducer = + ConvertingESProducerT; + +DEFINE_FWK_EVENTSETUP_MODULE(HcalElectronicsMappingGPUESProducer); diff --git a/EventFilter/HcalRawToDigi/plugins/HcalRawToDigiGPU.cc b/EventFilter/HcalRawToDigi/plugins/HcalRawToDigiGPU.cc new file mode 100644 index 0000000000000..7e8388a5f4d2f --- /dev/null +++ b/EventFilter/HcalRawToDigi/plugins/HcalRawToDigiGPU.cc @@ -0,0 +1,200 @@ +#include + +#include "CondFormats/DataRecord/interface/HcalElectronicsMapRcd.h" +#include "DataFormats/FEDRawData/interface/FEDNumbering.h" +#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDAServices/interface/CUDAService.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" + +#include "DeclsForKernels.h" +#include "DecodeGPU.h" +#include "ElectronicsMappingGPU.h" + +class HcalRawToDigiGPU : public edm::stream::EDProducer { +public: + explicit HcalRawToDigiGPU(edm::ParameterSet const& ps); + ~HcalRawToDigiGPU() override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + void acquire(edm::Event const&, edm::EventSetup const&, edm::WaitingTaskWithArenaHolder) override; + void produce(edm::Event&, edm::EventSetup const&) override; + +private: + edm::EDGetTokenT rawDataToken_; + using ProductTypef01 = cms::cuda::Product>; + edm::EDPutTokenT digisF01HEToken_; + using ProductTypef5 = cms::cuda::Product>; + edm::EDPutTokenT digisF5HBToken_; + using ProductTypef3 = cms::cuda::Product>; + edm::EDPutTokenT digisF3HBToken_; + + cms::cuda::ContextState cudaState_; + + std::vector fedsToUnpack_; + + hcal::raw::ConfigurationParameters config_; + hcal::raw::OutputDataGPU outputGPU_; + hcal::raw::OutputDataCPU outputCPU_; +}; + +void HcalRawToDigiGPU::fillDescriptions(edm::ConfigurationDescriptions& confDesc) { + edm::ParameterSetDescription desc; + + desc.add("InputLabel", edm::InputTag("rawDataCollector")); + auto nFeds = FEDNumbering::MAXHCALuTCAFEDID - FEDNumbering::MINHCALuTCAFEDID + 1; + std::vector feds(nFeds); + for (int i = 0; i < nFeds; ++i) + feds[i] = i + FEDNumbering::MINHCALuTCAFEDID; + desc.add>("FEDs", feds); + desc.add("maxChannelsF01HE", 10000u); + desc.add("maxChannelsF5HB", 10000u); + desc.add("maxChannelsF3HB", 10000u); + desc.add("nsamplesF01HE", 8); + desc.add("nsamplesF5HB", 8); + desc.add("nsamplesF3HB", 8); + desc.add("digisLabelF5HB", "f5HBDigisGPU"); + desc.add("digisLabelF01HE", "f01HEDigisGPU"); + desc.add("digisLabelF3HB", "f3HBDigisGPU"); + + std::string label = "hcalRawToDigiGPU"; + confDesc.add(label, desc); +} + +HcalRawToDigiGPU::HcalRawToDigiGPU(const edm::ParameterSet& ps) + : rawDataToken_{consumes(ps.getParameter("InputLabel"))}, + digisF01HEToken_{produces(ps.getParameter("digisLabelF01HE"))}, + digisF5HBToken_{produces(ps.getParameter("digisLabelF5HB"))}, + digisF3HBToken_{produces(ps.getParameter("digisLabelF3HB"))}, + fedsToUnpack_{ps.getParameter>("FEDs")} { + config_.maxChannelsF01HE = ps.getParameter("maxChannelsF01HE"); + config_.maxChannelsF5HB = ps.getParameter("maxChannelsF5HB"); + config_.maxChannelsF3HB = ps.getParameter("maxChannelsF3HB"); + config_.nsamplesF01HE = ps.getParameter("nsamplesF01HE"); + config_.nsamplesF5HB = ps.getParameter("nsamplesF5HB"); + config_.nsamplesF3HB = ps.getParameter("nsamplesF3HB"); +} + +HcalRawToDigiGPU::~HcalRawToDigiGPU() {} + +void HcalRawToDigiGPU::acquire(edm::Event const& event, + edm::EventSetup const& setup, + edm::WaitingTaskWithArenaHolder holder) { + // raii + cms::cuda::ScopedContextAcquire ctx{event.streamID(), std::move(holder), cudaState_}; + + // conditions + edm::ESHandle eMappingHandle; + setup.get().get(eMappingHandle); + auto const& eMappingProduct = eMappingHandle->getProduct(ctx.stream()); + + // bundle up conditions + hcal::raw::ConditionsProducts conditions{eMappingProduct}; + + // event data + edm::Handle rawDataHandle; + event.getByToken(rawDataToken_, rawDataHandle); + + // scratch + hcal::raw::ScratchDataGPU scratchGPU = { + cms::cuda::make_device_unique(hcal::raw::numOutputCollections, ctx.stream())}; + + // input cpu data + hcal::raw::InputDataCPU inputCPU = {cms::cuda::make_host_unique( + hcal::raw::utca_nfeds_max * hcal::raw::nbytes_per_fed_max, ctx.stream()), + cms::cuda::make_host_unique(hcal::raw::utca_nfeds_max, ctx.stream()), + cms::cuda::make_host_unique(hcal::raw::utca_nfeds_max, ctx.stream())}; + + // input data gpu + hcal::raw::InputDataGPU inputGPU = { + cms::cuda::make_device_unique(hcal::raw::utca_nfeds_max * hcal::raw::nbytes_per_fed_max, + ctx.stream()), + cms::cuda::make_device_unique(hcal::raw::utca_nfeds_max, ctx.stream()), + cms::cuda::make_device_unique(hcal::raw::utca_nfeds_max, ctx.stream())}; + + // output cpu + outputCPU_ = {cms::cuda::make_host_unique(hcal::raw::numOutputCollections, ctx.stream())}; + + // output gpu + outputGPU_.allocate(config_, ctx.stream()); + + // iterate over feds + // TODO: another idea + // - loop over all feds to unpack and enqueue cuda memcpy + // - accumulate the sizes + // - after the loop launch cuda memcpy for sizes + // - enqueue the kernel + uint32_t currentCummOffset = 0; + uint32_t counter = 0; + for (auto const& fed : fedsToUnpack_) { + auto const& data = rawDataHandle->FEDData(fed); + auto const nbytes = data.size(); + + // skip empty feds + if (nbytes < hcal::raw::empty_event_size) + continue; + +#ifdef HCAL_RAWDECODE_CPUDEBUG + printf("fed = %d nbytes = %lu\n", fed, nbytes); +#endif + + // copy raw data into plain buffer + std::memcpy(inputCPU.data.get() + currentCummOffset, data.data(), nbytes); + // set the offset in bytes from the start + inputCPU.offsets[counter] = currentCummOffset; + inputCPU.feds[counter] = fed; + + // this is the current offset into the vector + currentCummOffset += nbytes; + ++counter; + } + + hcal::raw::entryPoint(inputCPU, + inputGPU, + outputGPU_, + scratchGPU, + outputCPU_, + conditions, + config_, + ctx.stream(), + counter, + currentCummOffset); +} + +void HcalRawToDigiGPU::produce(edm::Event& event, edm::EventSetup const& setup) { + cms::cuda::ScopedContextProduce ctx{cudaState_}; + +#ifdef HCAL_RAWDECODE_CPUDEBUG + printf("f01he channels = %u f5hb channesl = %u\n", + outputCPU_.nchannels[hcal::raw::OutputF01HE], + outputCPU_.nchannels[hcal::raw::OutputF5HB]); +#endif + + // FIXME: use sizes of views directly for cuda mem cpy? + auto const nchannelsF01HE = outputCPU_.nchannels[hcal::raw::OutputF01HE]; + auto const nchannelsF5HB = outputCPU_.nchannels[hcal::raw::OutputF5HB]; + auto const nchannelsF3HB = outputCPU_.nchannels[hcal::raw::OutputF3HB]; + outputGPU_.digisF01HE.size = nchannelsF01HE; + outputGPU_.digisF5HB.size = nchannelsF5HB; + outputGPU_.digisF3HB.size = nchannelsF3HB; + outputGPU_.digisF01HE.stride = hcal::compute_stride(config_.nsamplesF01HE); + outputGPU_.digisF5HB.stride = hcal::compute_stride(config_.nsamplesF5HB); + outputGPU_.digisF3HB.stride = hcal::compute_stride(config_.nsamplesF3HB); + + ctx.emplace(event, digisF01HEToken_, std::move(outputGPU_.digisF01HE)); + ctx.emplace(event, digisF5HBToken_, std::move(outputGPU_.digisF5HB)); + ctx.emplace(event, digisF3HBToken_, std::move(outputGPU_.digisF3HB)); + + // reset ptrs that are carried as members + outputCPU_.nchannels.reset(); +} + +DEFINE_FWK_MODULE(HcalRawToDigiGPU); diff --git a/EventFilter/HcalRawToDigi/plugins/PackerHelp.h b/EventFilter/HcalRawToDigi/plugins/PackerHelp.h index 695447c10791c..ccf166ad0395b 100644 --- a/EventFilter/HcalRawToDigi/plugins/PackerHelp.h +++ b/EventFilter/HcalRawToDigi/plugins/PackerHelp.h @@ -8,6 +8,7 @@ #include "DataFormats/FEDRawData/interface/FEDHeader.h" #include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h" #include "DataFormats/HcalDigi/interface/QIE10DataFrame.h" +#include "DataFormats/HcalDigi/interface/QIE11DataFrame.h" #include #include @@ -616,14 +617,24 @@ class UHTRpacker { // converts HE QIE digies to HB data format -QIE11DataFrame convertHB(QIE11DataFrame qiehe, int tdc1, int tdc2, int tdcmax) { +QIE11DataFrame convertHB(QIE11DataFrame qiehe, + std::vector const& tdc1, + std::vector const& tdc2, + const int tdcmax) { QIE11DataFrame qiehb = qiehe; + HcalDetId did = HcalDetId(qiehb.detid()); int adc, tdc; bool soi; int is = 0; - + int capid = qiehe[0].capid(); // flavor for HB digies is hardcoded here static const int hbflavor = 3; + // maximum HB depth + static const int maxHBdepth = 4; + + const int entry = (abs(did.ieta()) - 1) * maxHBdepth + did.depth() - 1; + const int first = tdc1.at(entry); + const int second = tdc2.at(entry); // iterator over samples for (edm::DataFrame::const_iterator it = qiehe.begin(); it != qiehe.end(); ++it) { @@ -633,11 +644,11 @@ QIE11DataFrame convertHB(QIE11DataFrame qiehe, int tdc1, int tdc2, int tdcmax) { tdc = qiehe[is].tdc(); soi = qiehe[is].soi(); - if (tdc >= 0 && tdc <= tdc1) + if (tdc >= 0 && tdc <= first) tdc = 0; - else if (tdc > tdc1 && tdc <= tdc2) + else if (tdc > first && tdc <= second) tdc = 1; - else if (tdc > tdc2 && tdc <= tdcmax) + else if (tdc > second && tdc <= tdcmax) tdc = 2; else tdc = 3; @@ -648,7 +659,6 @@ QIE11DataFrame convertHB(QIE11DataFrame qiehe, int tdc1, int tdc2, int tdcmax) { // puting flavor is safe here because flavor is stored in the same bits for all flavors qiehb.setFlavor(hbflavor); - int capid = qiehe[0].capid(); qiehb.setCapid0(capid); return qiehb; diff --git a/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtEvmPacker_cfg.py b/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtEvmPacker_cfg.py index d8747a03378f1..5af68fba017ac 100644 --- a/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtEvmPacker_cfg.py +++ b/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtEvmPacker_cfg.py @@ -329,8 +329,8 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['l1GtEvmPack'] -process.MessageLogger.destinations = ['L1GtEvmPacker'] -process.MessageLogger.L1GtEvmPacker = cms.untracked.PSet( +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.L1GtEvmPacker = cms.untracked.PSet( threshold=cms.untracked.string('DEBUG'), #threshold = cms.untracked.string('INFO'), #threshold = cms.untracked.string('ERROR'), diff --git a/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtEvmUnpacker_cfg.py b/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtEvmUnpacker_cfg.py index 23880badb1607..d3960c660245c 100644 --- a/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtEvmUnpacker_cfg.py +++ b/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtEvmUnpacker_cfg.py @@ -88,29 +88,22 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['l1GtEvmUnpack', 'l1GtTrigReport'] -process.MessageLogger.categories.append('L1GlobalTriggerEvmRawToDigi') -process.MessageLogger.categories.append('L1GtTrigReport') -process.MessageLogger.destinations = ['L1GtEvmUnpacker_errors', - 'L1GtEvmUnpacker_warnings', - 'L1GtEvmUnpacker_info', - 'L1GtEvmUnpacker' - ] -process.MessageLogger.statistics = [] - -process.MessageLogger.L1GtEvmUnpacker_errors = cms.untracked.PSet( +process.MessageLogger.cerr.enable = False + +process.MessageLogger.files.L1GtEvmUnpacker_errors = cms.untracked.PSet( threshold = cms.untracked.string('ERROR'), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), L1GlobalTriggerEvmRawToDigi = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtEvmUnpacker_warnings = cms.untracked.PSet( +process.MessageLogger.files.L1GtEvmUnpacker_warnings = cms.untracked.PSet( threshold = cms.untracked.string('WARNING'), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(0) ), L1GlobalTriggerEvmRawToDigi = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtEvmUnpacker_info = cms.untracked.PSet( +process.MessageLogger.files.L1GtEvmUnpacker_info = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -118,7 +111,7 @@ L1GtTrigReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtEvmUnpacker = cms.untracked.PSet( +process.MessageLogger.files.L1GtEvmUnpacker = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(0) ), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtPacker_cfg.py b/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtPacker_cfg.py index 3645557e81e6b..7c899940ced11 100644 --- a/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtPacker_cfg.py +++ b/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtPacker_cfg.py @@ -331,8 +331,8 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['l1GtPack'] -process.MessageLogger.destinations = ['L1GtPacker'] -process.MessageLogger.L1GtPacker = cms.untracked.PSet( +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.L1GtPacker = cms.untracked.PSet( threshold=cms.untracked.string('DEBUG'), #threshold = cms.untracked.string('INFO'), #threshold = cms.untracked.string('ERROR'), diff --git a/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtRecord_cfg.py b/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtRecord_cfg.py index 5951c18d0d166..a1749f7331ea5 100644 --- a/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtRecord_cfg.py +++ b/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtRecord_cfg.py @@ -427,15 +427,11 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['l1GtRecord'] -process.MessageLogger.categories.append('L1GlobalTriggerRecord') -process.MessageLogger.categories.append('L1GtTrigReport') - process.MessageLogger.cerr.default.limit = 0 process.MessageLogger.cerr.FwkReport.limit = 0 process.MessageLogger.cerr.FwkSummary.limit = 0 -process.MessageLogger.destinations.extend('debugs', 'warnings', 'errors') -process.MessageLogger.debugs = cms.untracked.PSet( +process.MessageLogger.files.debugs = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(0) ), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -445,7 +441,7 @@ L1GtTrigReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.warnings = cms.untracked.PSet( +process.MessageLogger.files.warnings = cms.untracked.PSet( threshold = cms.untracked.string('WARNING'), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -453,7 +449,7 @@ L1GtTrigReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.errors = cms.untracked.PSet( +process.MessageLogger.files.errors = cms.untracked.PSet( threshold = cms.untracked.string('ERROR'), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), L1GlobalTriggerRecord = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtTriggerMenuLite_cfg.py b/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtTriggerMenuLite_cfg.py index 43f2db6f6309f..a1624a942a89a 100644 --- a/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtTriggerMenuLite_cfg.py +++ b/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtTriggerMenuLite_cfg.py @@ -56,14 +56,12 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['l1GtTriggerMenuLite'] -process.MessageLogger.categories.append('L1GtTriggerMenuLiteProducer') process.MessageLogger.cerr.default.limit = 0 process.MessageLogger.cerr.FwkReport.limit = 0 process.MessageLogger.cerr.FwkSummary.limit = 0 -process.MessageLogger.destinations.extend('debugs', 'warnings', 'errors') -process.MessageLogger.debugs = cms.untracked.PSet( +process.MessageLogger.files.debugs = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(0) ), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -72,14 +70,14 @@ L1GtTriggerMenuLiteProducer = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.warnings = cms.untracked.PSet( +process.MessageLogger.files.warnings = cms.untracked.PSet( threshold = cms.untracked.string('WARNING'), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(0) ), L1GtTriggerMenuLiteProducer = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.errors = cms.untracked.PSet( +process.MessageLogger.files.errors = cms.untracked.PSet( threshold = cms.untracked.string('ERROR'), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), L1GtTriggerMenuLiteProducer = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtUnpacker_cfg.py b/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtUnpacker_cfg.py index 5527f4db5f56e..7a26b624a448c 100644 --- a/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtUnpacker_cfg.py +++ b/EventFilter/L1GlobalTriggerRawToDigi/test/L1GtUnpacker_cfg.py @@ -118,29 +118,22 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['l1GtUnpack', 'l1GtTrigReport'] -process.MessageLogger.categories.append('L1GlobalTriggerRawToDigi') -process.MessageLogger.categories.append('L1GtTrigReport') -process.MessageLogger.destinations = ['L1GtUnpacker_errors', - 'L1GtUnpacker_warnings', - 'L1GtUnpacker_info', - 'L1GtUnpacker' - ] -process.MessageLogger.statistics = [] - -process.MessageLogger.L1GtUnpacker_errors = cms.untracked.PSet( +process.MessageLogger.cerr.enable = False + +process.MessageLogger.files.L1GtUnpacker_errors = cms.untracked.PSet( threshold = cms.untracked.string('ERROR'), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), L1GlobalTriggerRawToDigi = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtUnpacker_warnings = cms.untracked.PSet( +process.MessageLogger.files.L1GtUnpacker_warnings = cms.untracked.PSet( threshold = cms.untracked.string('WARNING'), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(0) ), L1GlobalTriggerRawToDigi = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtUnpacker_info = cms.untracked.PSet( +process.MessageLogger.files.L1GtUnpacker_info = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -148,7 +141,7 @@ L1GtTrigReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtUnpacker = cms.untracked.PSet( +process.MessageLogger.files.L1GtUnpacker = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(0) ), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/EventFilter/L1TRawToDigi/interface/OmtfRpcPacker.h b/EventFilter/L1TRawToDigi/interface/OmtfRpcPacker.h index ab2acd9b17b92..2da0adbb7039d 100644 --- a/EventFilter/L1TRawToDigi/interface/OmtfRpcPacker.h +++ b/EventFilter/L1TRawToDigi/interface/OmtfRpcPacker.h @@ -2,7 +2,7 @@ #define EventFilter_L1TRawToDigi_Omtf_RpcPacker_H #include - +#include #include "DataFormats/RPCDigi/interface/RPCDigiCollection.h" #include "DataFormats/L1TMuon/interface/OMTF/OmtfDataWord64.h" #include "EventFilter/L1TRawToDigi/interface/OmtfLinkMappingRpc.h" diff --git a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFPackerOutput.cc b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFPackerOutput.cc index 6531f75a696ca..0e873900c8ef8 100644 --- a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFPackerOutput.cc +++ b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFPackerOutput.cc @@ -1,7 +1,5 @@ #include "BMTFPackerOutput.h" - #include -//#include //debug // Implementation namespace l1t { @@ -12,8 +10,9 @@ namespace l1t { auto muonToken = static_cast(toks)->getOutputMuonToken(); Blocks blocks; - const int bmtfBlockID = 123; + edm::LogInfo("L1T-BMTFPackerOutput") << "Will use setup:" + << " isKalman->" << isKalman_; edm::Handle muons; event.getByToken(muonToken, muons); diff --git a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFPackerOutput.h b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFPackerOutput.h index 12396a2616595..60cc5de2ca436 100644 --- a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFPackerOutput.h +++ b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFPackerOutput.h @@ -1,4 +1,5 @@ #include "FWCore/Framework/interface/Event.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "EventFilter/L1TRawToDigi/interface/Packer.h" #include "EventFilter/L1TRawToDigi/plugins/PackerFactory.h" diff --git a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFSetup.cc b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFSetup.cc index eae0862b82d20..0cefc8e4082b0 100644 --- a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFSetup.cc +++ b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFSetup.cc @@ -19,42 +19,15 @@ namespace l1t { //res are in format res[amc_no, board_id] if (fed == 1376 || fed == 1377) { - std::array board_out = {{1, 7, 2, 8, 3, 9, 4, 10, 5, 11, 6, 12}}; //these are board_ids per amc_no-1 - - for (unsigned int i = 1; i <= board_out.size(); i++) { - if (i % 2 != 0) { //maybe this check is not needed - res[{i, board_out[i - 1]}] = {PackerFactory::get()->make("stage2::BMTFPackerOutput"), - PackerFactory::get()->make("stage2::BMTFPackerInputs")}; - } else { - res[{i, board_out[i - 1]}] = {PackerFactory::get()->make("stage2::BMTFPackerOutput"), - PackerFactory::get()->make("stage2::BMTFPackerInputs")}; + for (auto board : boardIdPerSlot) { + auto packer_out = std::make_shared(); + auto packer_in = PackerFactory::get()->make("stage2::BMTFPackerInputs"); + if (fw >= firstKalmanFwVer) { + packer_out->setKalmanAlgoTrue(); } + res[{board.first, board.second}] = {packer_out, packer_in}; } - } //if feds - - /* - if (fed == 1376) { - std::cout << "fed is 1376" << std::endl; - for (int i=1; i <= 12; i = i+2){//itr for amc_no = 1,3,5,7,9,11 - res[{i,board_out[i-1]}] = {PackerFactory::get()->make("stage2::BMTFPackerOutput"), - PackerFactory::get()->make("stage2::BMTFPackerInputs")}; - } - - } - else if (fed == 1377) { - std::cout << "fed is 1377" << std::endl; - for (int i=2; i <=12; i = i+2){//itr for amc_no = 2,4,6,8,10,12 - res[{i,board_out[i-1]}] = {PackerFactory::get()->make("stage2::BMTFPackerOutput"), - PackerFactory::get()->make("stage2::BMTFPackerInputs")}; - } - - } - else{ - std::cout << std::endl; - std::cout << "The given fed is not a BMTF fed (1376 or 1377)" << std::endl; - std::cout << std::endl; - }//if feds - */ + } //if BMTF feds return res; } //getPackers @@ -64,10 +37,6 @@ namespace l1t { prod.produces("BMTF2"); prod.produces(); prod.produces(); - - // Depricated - //prod.produces("PhiDigis"); - //prod.produces("TheDigis"); } std::unique_ptr BMTFSetup::getCollections(edm::Event& e) { @@ -77,10 +46,9 @@ namespace l1t { UnpackerMap BMTFSetup::getUnpackers(int fed, int board, int amc, unsigned int fw) { auto inputMuonsOld = UnpackerFactory::get()->make("stage2::BMTFUnpackerInputsOldQual"); auto inputMuonsNew = UnpackerFactory::get()->make("stage2::BMTFUnpackerInputsNewQual"); - - auto outputMuon = std::make_shared(); //here is the triggering collection - auto outputMuon2 = std::make_shared(false); //here is the secondary - if (fw >= 2499805536) //this is in HEX '95000160' + auto outputMuon = std::make_shared(); // triggering collection + auto outputMuon2 = std::make_shared(false); // secondary coll + if (fw >= firstKalmanFwVer) outputMuon->setKalmanAlgoTrue(); else outputMuon2->setKalmanAlgoTrue(); @@ -92,7 +60,7 @@ namespace l1t { if (iL == 12 || iL == 14 || (iL > 26 && iL < 32) || iL == 60 || iL == 62) continue; - if (fw < 2452619552) { + if (fw < firstNewInputsFwVer) { res[iL] = inputMuonsOld; } else { res[iL] = inputMuonsNew; diff --git a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFSetup.h b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFSetup.h index 3929b2acb438f..adaa54c81d69c 100644 --- a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFSetup.h +++ b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFSetup.h @@ -9,6 +9,7 @@ #include "BMTFCollections.h" #include "BMTFTokens.h" #include "BMTFUnpackerOutput.h" +#include "BMTFPackerOutput.h" namespace l1t { namespace stage2 { @@ -20,6 +21,25 @@ namespace l1t { void registerProducts(edm::ProducesCollector) override; std::unique_ptr getCollections(edm::Event& e) override; UnpackerMap getUnpackers(int fed, int board, int amc, unsigned int fw) override; + + private: + const std::map boardIdPerSlot{ + // {slot, boardId} + {1, 1}, + {3, 2}, + {5, 3}, + {7, 4}, + {9, 5}, + {11, 6}, // Top Crate + {2, 7}, + {4, 8}, + {6, 9}, + {8, 10}, + {10, 11}, + {12, 12} // Bottom Crate + }; + const unsigned int firstNewInputsFwVer = 0x92300120; + const unsigned int firstKalmanFwVer = 0x95000160; }; } // namespace stage2 } // namespace l1t diff --git a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFUnpackerOutput.cc b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFUnpackerOutput.cc index ad68ab75a0ffd..d905880a3fc74 100644 --- a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFUnpackerOutput.cc +++ b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/BMTFUnpackerOutput.cc @@ -1,7 +1,5 @@ #include "EventFilter/L1TRawToDigi/plugins/UnpackerFactory.h" - #include "L1Trigger/L1TMuon/interface/RegionalMuonRawDigiTranslator.h" - #include "BMTFUnpackerOutput.h" namespace l1t { @@ -22,6 +20,10 @@ namespace l1t { bxBlocks = block.getBxBlocks((unsigned int)6, false); //it returnes 6-32bit bxBlocks originated from the amc13 Block + edm::LogInfo("L1T") << "Will use the setup:" + << " ZS_enabled->" << ZS_enabled << " isTriggeringAlgo->" << isTriggeringAlgo << " isKalman->" + << isKalman; + RegionalMuonCandBxCollection *res; if (isTriggeringAlgo) res = static_cast(coll)->getBMTFMuons(); @@ -45,8 +47,7 @@ namespace l1t { int processor = block.amc().getBoardID() - 1; if (processor < 0 || processor > 11) { - edm::LogInfo("l1t:stage2::BMTFUnpackerOutput::unpack") - << "Processor found out of range so it will be calculated by the old way"; + edm::LogInfo("L1T") << "Processor found out of range, it will be calculated by the old way"; if (block.amc().getAMCNumber() % 2 != 0) processor = block.amc().getAMCNumber() / 2; else diff --git a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/GMTSetup.cc b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/GMTSetup.cc index 86430eee00ec3..83f29e7f27b62 100644 --- a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/GMTSetup.cc +++ b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/GMTSetup.cc @@ -44,7 +44,7 @@ namespace l1t { auto gmt_in_packer = static_pointer_cast( PackerFactory::get()->make("stage2::RegionalMuonGMTPacker")); if (fw >= 0x6000000) { - gmt_in_packer->setKalmanAlgoTrue(); + gmt_in_packer->setIsRun3(); } auto gmt_out_packer = static_pointer_cast(PackerFactory::get()->make("stage2::GMTMuonPacker")); @@ -87,7 +87,7 @@ namespace l1t { auto gmt_in_unp = static_pointer_cast( UnpackerFactory::get()->make("stage2::RegionalMuonGMTUnpacker")); if (fw >= 0x6000000) { - gmt_in_unp->setKalmanAlgoTrue(); + gmt_in_unp->setIsRun3(); } for (int iLink = 72; iLink < 144; iLink += 2) { diff --git a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTPacker.cc b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTPacker.cc index 4ba50c5c03ee7..64ed17ecf676b 100644 --- a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTPacker.cc +++ b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTPacker.cc @@ -54,7 +54,7 @@ namespace l1t { uint32_t msw = 0; uint32_t lsw = 0; - RegionalMuonRawDigiTranslator::generatePackedDataWords(*mu, lsw, msw, isKalman_); + RegionalMuonRawDigiTranslator::generatePackedDataWords(*mu, lsw, msw, isRun3_); payloadMap[linkTimes2].push_back(lsw); payloadMap[linkTimes2].push_back(msw); diff --git a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTPacker.h b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTPacker.h index 879a1dd1f5bab..67fa5f14d8aa7 100644 --- a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTPacker.h +++ b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTPacker.h @@ -13,13 +13,13 @@ namespace l1t { class RegionalMuonGMTPacker : public Packer { public: Blocks pack(const edm::Event&, const PackerTokens*) override; - void setKalmanAlgoTrue() { isKalman_ = true; }; + void setIsRun3() { isRun3_ = true; }; private: typedef std::map> PayloadMap; void packTF(const edm::Event&, const edm::EDGetTokenT&, Blocks&); - bool isKalman_{false}; + bool isRun3_{false}; }; } // namespace stage2 } // namespace l1t diff --git a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTUnpacker.cc b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTUnpacker.cc index 2a8d556dc0eba..d58909a9395fe 100644 --- a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTUnpacker.cc +++ b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTUnpacker.cc @@ -102,7 +102,7 @@ namespace l1t { RegionalMuonCand mu; RegionalMuonRawDigiTranslator::fillRegionalMuonCand( - mu, raw_data_00_31, raw_data_32_63, processor, trackFinder, isKalman_); + mu, raw_data_00_31, raw_data_32_63, processor, trackFinder, isRun3_); LogDebug("L1T") << "Mu" << nWord / 2 << ": eta " << mu.hwEta() << " phi " << mu.hwPhi() << " pT " << mu.hwPt() << " qual " << mu.hwQual() << " sign " << mu.hwSign() << " sign valid " diff --git a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTUnpacker.h b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTUnpacker.h index 97e7683109526..43362150b2a53 100644 --- a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTUnpacker.h +++ b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/RegionalMuonGMTUnpacker.h @@ -10,13 +10,13 @@ namespace l1t { class RegionalMuonGMTUnpacker : public Unpacker { public: bool unpack(const Block& block, UnpackerCollections* coll) override; - void setKalmanAlgoTrue() { isKalman_ = true; } + void setIsRun3() { isRun3_ = true; } private: static constexpr unsigned nWords_ = 6; // every link transmits 6 words (3 muons) per bx static constexpr unsigned bxzs_enable_shift_ = 1; - bool isKalman_{false}; + bool isRun3_{false}; }; } // namespace stage2 } // namespace l1t diff --git a/EventFilter/L1TRawToDigi/python/bmtfDigis_cfi.py b/EventFilter/L1TRawToDigi/python/bmtfDigis_cfi.py index 34933b72f3cf7..a8ad38d2fb423 100644 --- a/EventFilter/L1TRawToDigi/python/bmtfDigis_cfi.py +++ b/EventFilter/L1TRawToDigi/python/bmtfDigis_cfi.py @@ -6,6 +6,7 @@ InputLabel = cms.InputTag("rawDataCollector"), FedIds = cms.vint32(1376,1377), FWId = cms.uint32(1), + FWOverride = cms.bool(False), lenSlinkHeader = cms.untracked.int32(8), lenSlinkTrailer = cms.untracked.int32(8), lenAMCHeader = cms.untracked.int32(8), @@ -13,3 +14,19 @@ lenAMC13Header = cms.untracked.int32(8), lenAMC13Trailer = cms.untracked.int32(8) ) + +## Era: Run2_2016 +from Configuration.Eras.Modifier_stage2L1Trigger_cff import stage2L1Trigger +stage2L1Trigger.toModify(bmtfDigis, FWId = cms.uint32(0x93500160)) + +## Era: Run2_2017 +from Configuration.Eras.Modifier_stage2L1Trigger_2017_cff import stage2L1Trigger_2017 +stage2L1Trigger_2017.toModify(bmtfDigis, FWId = cms.uint32(0x93500160)) + +### Era: Run2_2018 +from Configuration.Eras.Modifier_stage2L1Trigger_2018_cff import stage2L1Trigger_2018 +stage2L1Trigger_2018.toModify(bmtfDigis, FWId = cms.uint32(0x93500160)) + +### Era: Run3_2021 +from Configuration.Eras.Modifier_stage2L1Trigger_2021_cff import stage2L1Trigger_2021 +stage2L1Trigger_2021.toModify(bmtfDigis, FWId = cms.uint32(0x95030160)) diff --git a/EventFilter/L1TRawToDigi/python/bmtfStage2Raw_cfi.py b/EventFilter/L1TRawToDigi/python/bmtfStage2Raw_cfi.py index 57cf90df06908..4bf318aaa0075 100644 --- a/EventFilter/L1TRawToDigi/python/bmtfStage2Raw_cfi.py +++ b/EventFilter/L1TRawToDigi/python/bmtfStage2Raw_cfi.py @@ -13,16 +13,16 @@ ## Era: Run2_2016 from Configuration.Eras.Modifier_stage2L1Trigger_cff import stage2L1Trigger -stage2L1Trigger.toModify(bmtfStage2Raw, InputLabel = cms.InputTag("simBmtfDigis", "BMTF"), FWId = cms.uint32(1)) +stage2L1Trigger.toModify(bmtfStage2Raw, InputLabel = cms.InputTag("simBmtfDigis", "BMTF"), FWId = cms.uint32(0x93500160)) ## Era: Run2_2017 from Configuration.Eras.Modifier_stage2L1Trigger_2017_cff import stage2L1Trigger_2017 -stage2L1Trigger_2017.toModify(bmtfStage2Raw, InputLabel = cms.InputTag("simBmtfDigis", "BMTF"), FWId = cms.uint32(1)) +stage2L1Trigger_2017.toModify(bmtfStage2Raw, InputLabel = cms.InputTag("simBmtfDigis", "BMTF"), FWId = cms.uint32(0x93500160)) ### Era: Run2_2018 from Configuration.Eras.Modifier_stage2L1Trigger_2018_cff import stage2L1Trigger_2018 -stage2L1Trigger_2018.toModify(bmtfStage2Raw, InputLabel = cms.InputTag("simBmtfDigis", "BMTF"), FWId = cms.uint32(1)) +stage2L1Trigger_2018.toModify(bmtfStage2Raw, InputLabel = cms.InputTag("simBmtfDigis", "BMTF"), FWId = cms.uint32(0x93500160)) ### Era: Run3_2021 from Configuration.Eras.Modifier_stage2L1Trigger_2021_cff import stage2L1Trigger_2021 -stage2L1Trigger_2021.toModify(bmtfStage2Raw, InputLabel = cms.InputTag("simKBmtfDigis", "BMTF"), FWId = cms.uint32(2499805536)) +stage2L1Trigger_2021.toModify(bmtfStage2Raw, InputLabel = cms.InputTag("simKBmtfDigis", "BMTF"), FWId = cms.uint32(0x95030160)) diff --git a/EventFilter/L1TRawToDigi/utils/unpackBuffers-CaloStage2.py b/EventFilter/L1TRawToDigi/utils/unpackBuffers-CaloStage2.py index 017e7af276310..70d1f90301bce 100644 --- a/EventFilter/L1TRawToDigi/utils/unpackBuffers-CaloStage2.py +++ b/EventFilter/L1TRawToDigi/utils/unpackBuffers-CaloStage2.py @@ -160,16 +160,14 @@ # enable debug message logging for our modules -process.MessageLogger.categories.append('L1TCaloEvents') +process.MessageLogger.L1TCaloEvents=dict() process.MessageLogger.suppressInfo = cms.untracked.vstring('Geometry', 'AfterSource') if (options.dump): - process.MessageLogger.destinations.append('infos') - process.MessageLogger.infos = cms.untracked.PSet(placeholder = cms.untracked.bool(False), + process.MessageLogger.files.infos = cms.untracked.PSet( INFO = cms.untracked.PSet(limit = cms.untracked.int32(0)), L1TCaloEvents = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), limit = cms.untracked.int32(10000) ) ) diff --git a/EventFilter/L1TRawToDigi/utils/unpackData-CaloStage1.py b/EventFilter/L1TRawToDigi/utils/unpackData-CaloStage1.py index b8bd61ee8b615..a30cf1472f7ab 100644 --- a/EventFilter/L1TRawToDigi/utils/unpackData-CaloStage1.py +++ b/EventFilter/L1TRawToDigi/utils/unpackData-CaloStage1.py @@ -92,14 +92,11 @@ # enable debug message logging for our modules process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append('L1TCaloEvents') process.MessageLogger.suppressInfo = cms.untracked.vstring('Geometry', 'AfterSource') if (options.dumpRaw or options.dumpDigis): - process.MessageLogger.destinations.append('infos') - process.MessageLogger.infos = cms.untracked.PSet(placeholder = cms.untracked.bool(False), + process.MessageLogger.files.infos = cms.untracked.PSet( INFO = cms.untracked.PSet(limit = cms.untracked.int32(0)), L1TCaloEvents = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), limit = cms.untracked.int32(10000) ) ) diff --git a/EventFilter/L1TRawToDigi/utils/unpackData-CaloStage2.py b/EventFilter/L1TRawToDigi/utils/unpackData-CaloStage2.py index 2076ad80dbffd..2337a0d613f4c 100644 --- a/EventFilter/L1TRawToDigi/utils/unpackData-CaloStage2.py +++ b/EventFilter/L1TRawToDigi/utils/unpackData-CaloStage2.py @@ -122,16 +122,13 @@ process.TFileService.fileName = cms.string('l1tCalo_2016_histos.root') # enable debug message logging for our modules -process.MessageLogger.categories.append('L1TCaloEvents') process.MessageLogger.suppressInfo = cms.untracked.vstring('Geometry', 'AfterSource') if (options.dumpRaw): - process.Messagelogger.destinations.append('infos') - process.MessageLogger.infos = cms.untracked.PSet( + process.MessageLogger.files.infos = cms.untracked.PSet( INFO = cms.untracked.PSet(limit = cms.untracked.int32(0)), L1TCaloEvents = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), limit = cms.untracked.int32(10000) ) ) diff --git a/EventFilter/RPCRawToDigi/src/RPCLBPacker.cc b/EventFilter/RPCRawToDigi/src/RPCLBPacker.cc index 02a9d471184de..eb9455a893ac7 100644 --- a/EventFilter/RPCRawToDigi/src/RPCLBPacker.cc +++ b/EventFilter/RPCRawToDigi/src/RPCLBPacker.cc @@ -1,7 +1,7 @@ #include "EventFilter/RPCRawToDigi/interface/RPCLBPacker.h" #include "FWCore/Utilities/interface/Exception.h" - +#include #include "CondFormats/RPCObjects/interface/RPCInverseLBLinkMap.h" #include "DataFormats/RPCDigi/interface/RPCDigi.h" diff --git a/EventFilter/SiPixelRawToDigi/plugins/BuildFile.xml b/EventFilter/SiPixelRawToDigi/plugins/BuildFile.xml index f92aa68373927..212738e941533 100644 --- a/EventFilter/SiPixelRawToDigi/plugins/BuildFile.xml +++ b/EventFilter/SiPixelRawToDigi/plugins/BuildFile.xml @@ -1,4 +1,7 @@ + + + diff --git a/EventFilter/SiPixelRawToDigi/plugins/SiPixelDigiErrorsFromSoA.cc b/EventFilter/SiPixelRawToDigi/plugins/SiPixelDigiErrorsFromSoA.cc new file mode 100644 index 0000000000000..d09e703c36a00 --- /dev/null +++ b/EventFilter/SiPixelRawToDigi/plugins/SiPixelDigiErrorsFromSoA.cc @@ -0,0 +1,182 @@ +#include + +#include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingTree.h" +#include "DataFormats/Common/interface/DetSetVector.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/DetId/interface/DetIdCollection.h" +#include "DataFormats/FEDRawData/interface/FEDNumbering.h" +#include "DataFormats/SiPixelDetId/interface/PixelFEDChannel.h" +#include "DataFormats/SiPixelDigi/interface/PixelDigi.h" +#include "DataFormats/SiPixelRawData/interface/SiPixelErrorsSoA.h" +#include "EventFilter/SiPixelRawToDigi/interface/PixelDataFormatter.h" +#include "FWCore/Framework/interface/ESTransientHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +class SiPixelDigiErrorsFromSoA : public edm::stream::EDProducer<> { +public: + explicit SiPixelDigiErrorsFromSoA(const edm::ParameterSet& iConfig); + ~SiPixelDigiErrorsFromSoA() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; + + const edm::ESGetToken cablingToken_; + const edm::EDGetTokenT digiErrorSoAGetToken_; + const edm::EDPutTokenT> errorPutToken_; + const edm::EDPutTokenT tkErrorPutToken_; + const edm::EDPutTokenT userErrorPutToken_; + const edm::EDPutTokenT> disabledChannelPutToken_; + + edm::ESWatcher cablingWatcher_; + std::unique_ptr cabling_; + + const std::vector tkerrorlist_; + const std::vector usererrorlist_; + + const bool usePhase1_; +}; + +SiPixelDigiErrorsFromSoA::SiPixelDigiErrorsFromSoA(const edm::ParameterSet& iConfig) + : cablingToken_(esConsumes(edm::ESInputTag("", iConfig.getParameter("CablingMapLabel")))), + digiErrorSoAGetToken_{consumes(iConfig.getParameter("digiErrorSoASrc"))}, + errorPutToken_{produces>()}, + tkErrorPutToken_{produces()}, + userErrorPutToken_{produces("UserErrorModules")}, + disabledChannelPutToken_{produces>()}, + tkerrorlist_(iConfig.getParameter>("ErrorList")), + usererrorlist_(iConfig.getParameter>("UserErrorList")), + usePhase1_(iConfig.getParameter("UsePhase1")) {} + +void SiPixelDigiErrorsFromSoA::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("digiErrorSoASrc", edm::InputTag("siPixelDigiErrorsSoA")); + // the configuration parameters here are named following those in SiPixelRawToDigi + desc.add("CablingMapLabel", "")->setComment("CablingMap label"); + desc.add("UsePhase1", false)->setComment("## Use phase1"); + desc.add>("ErrorList", std::vector{29}) + ->setComment("## ErrorList: list of error codes used by tracking to invalidate modules"); + desc.add>("UserErrorList", std::vector{40}) + ->setComment("## UserErrorList: list of error codes used by Pixel experts for investigation"); + descriptions.addWithDefaultLabel(desc); +} + +void SiPixelDigiErrorsFromSoA::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + // pack errors into collection + + // initialize cabling map or update if necessary + if (cablingWatcher_.check(iSetup)) { + // cabling map, which maps online address (fed->link->ROC->local pixel) to offline (DetId->global pixel) + const SiPixelFedCablingMap* cablingMap = &iSetup.getData(cablingToken_); + cabling_ = cablingMap->cablingTree(); + LogDebug("map version:") << cabling_->version(); + } + + const auto& digiErrors = iEvent.get(digiErrorSoAGetToken_); + + edm::DetSetVector errorcollection{}; + DetIdCollection tkerror_detidcollection{}; + DetIdCollection usererror_detidcollection{}; + edmNew::DetSetVector disabled_channelcollection{}; + + PixelDataFormatter formatter(cabling_.get(), usePhase1_); // for phase 1 & 0 + const PixelDataFormatter::Errors* formatterErrors = digiErrors.formatterErrors(); + assert(formatterErrors != nullptr); + auto errors = *formatterErrors; // make a copy + PixelDataFormatter::DetErrors nodeterrors; + + auto size = digiErrors.size(); + for (auto i = 0U; i < size; i++) { + SiPixelErrorCompact err = digiErrors.error(i); + if (err.errorType != 0) { + SiPixelRawDataError error(err.word, err.errorType, err.fedId + FEDNumbering::MINSiPixeluTCAFEDID); + errors[err.rawId].push_back(error); + } + } + + constexpr uint32_t dummydetid = 0xffffffff; + typedef PixelDataFormatter::Errors::iterator IE; + for (auto& error : errors) { + uint32_t errordetid = error.first; + if (errordetid == dummydetid) { // errors given dummy detId must be sorted by Fed + nodeterrors.insert(nodeterrors.end(), errors[errordetid].begin(), errors[errordetid].end()); + } else { + edm::DetSet& errorDetSet = errorcollection.find_or_insert(errordetid); + errorDetSet.data.insert(errorDetSet.data.end(), error.second.begin(), error.second.end()); + // Fill detid of the detectors where there is error AND the error number is listed + // in the configurable error list in the job option cfi. + // Code needs to be here, because there can be a set of errors for each + // entry in the for loop over PixelDataFormatter::Errors + + std::vector disabledChannelsDetSet; + + for (auto const& aPixelError : errorDetSet) { + // For the time being, we extend the error handling functionality with ErrorType 25 + // In the future, we should sort out how the usage of tkerrorlist can be generalized + if (aPixelError.getType() == 25) { + int fedId = aPixelError.getFedId(); + const sipixelobjects::PixelFEDCabling* fed = cabling_->fed(fedId); + if (fed) { + cms_uint32_t linkId = formatter.linkId(aPixelError.getWord32()); + const sipixelobjects::PixelFEDLink* link = fed->link(linkId); + if (link) { + // The "offline" 0..15 numbering is fixed by definition, also, the FrameConversion depends on it + // in contrast, the ROC-in-channel numbering is determined by hardware --> better to use the "offline" scheme + PixelFEDChannel ch = {fed->id(), linkId, 25, 0}; + for (unsigned int iRoc = 1; iRoc <= link->numberOfROCs(); iRoc++) { + const sipixelobjects::PixelROC* roc = link->roc(iRoc); + if (roc->idInDetUnit() < ch.roc_first) + ch.roc_first = roc->idInDetUnit(); + if (roc->idInDetUnit() > ch.roc_last) + ch.roc_last = roc->idInDetUnit(); + } + disabledChannelsDetSet.push_back(ch); + } + } + } else { + // fill list of detIds to be turned off by tracking + if (!tkerrorlist_.empty()) { + auto it_find = std::find(tkerrorlist_.begin(), tkerrorlist_.end(), aPixelError.getType()); + if (it_find != tkerrorlist_.end()) { + tkerror_detidcollection.push_back(errordetid); + } + } + } + + // fill list of detIds with errors to be studied + if (!usererrorlist_.empty()) { + auto it_find = std::find(usererrorlist_.begin(), usererrorlist_.end(), aPixelError.getType()); + if (it_find != usererrorlist_.end()) { + usererror_detidcollection.push_back(errordetid); + } + } + + } // loop on DetSet of errors + + if (!disabledChannelsDetSet.empty()) { + disabled_channelcollection.insert(errordetid, disabledChannelsDetSet.data(), disabledChannelsDetSet.size()); + } + + } // if error assigned to a real DetId + } // loop on errors in event for this FED + + edm::DetSet& errorDetSet = errorcollection.find_or_insert(dummydetid); + errorDetSet.data = nodeterrors; + + iEvent.emplace(errorPutToken_, std::move(errorcollection)); + iEvent.emplace(tkErrorPutToken_, std::move(tkerror_detidcollection)); + iEvent.emplace(userErrorPutToken_, std::move(usererror_detidcollection)); + iEvent.emplace(disabledChannelPutToken_, std::move(disabled_channelcollection)); +} + +DEFINE_FWK_MODULE(SiPixelDigiErrorsFromSoA); diff --git a/EventFilter/SiPixelRawToDigi/plugins/SiPixelDigiErrorsSoAFromCUDA.cc b/EventFilter/SiPixelRawToDigi/plugins/SiPixelDigiErrorsSoAFromCUDA.cc new file mode 100644 index 0000000000000..f2c7d0de5fe24 --- /dev/null +++ b/EventFilter/SiPixelRawToDigi/plugins/SiPixelDigiErrorsSoAFromCUDA.cc @@ -0,0 +1,79 @@ +#include "CUDADataFormats/Common/interface/Product.h" +#include "CUDADataFormats/SiPixelDigi/interface/SiPixelDigiErrorsCUDA.h" +#include "DataFormats/SiPixelRawData/interface/SiPixelErrorsSoA.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" + +class SiPixelDigiErrorsSoAFromCUDA : public edm::stream::EDProducer { +public: + explicit SiPixelDigiErrorsSoAFromCUDA(const edm::ParameterSet& iConfig); + ~SiPixelDigiErrorsSoAFromCUDA() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void acquire(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + edm::WaitingTaskWithArenaHolder waitingTaskHolder) override; + void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; + + edm::EDGetTokenT> digiErrorGetToken_; + edm::EDPutTokenT digiErrorPutToken_; + + cms::cuda::host::unique_ptr data_; + cms::cuda::SimpleVector error_; + const SiPixelFormatterErrors* formatterErrors_ = nullptr; +}; + +SiPixelDigiErrorsSoAFromCUDA::SiPixelDigiErrorsSoAFromCUDA(const edm::ParameterSet& iConfig) + : digiErrorGetToken_( + consumes>(iConfig.getParameter("src"))), + digiErrorPutToken_(produces()) {} + +void SiPixelDigiErrorsSoAFromCUDA::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("src", edm::InputTag("siPixelClustersCUDA")); + descriptions.addWithDefaultLabel(desc); +} + +void SiPixelDigiErrorsSoAFromCUDA::acquire(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + edm::WaitingTaskWithArenaHolder waitingTaskHolder) { + // Do the transfer in a CUDA stream parallel to the computation CUDA stream + cms::cuda::ScopedContextAcquire ctx{iEvent.streamID(), std::move(waitingTaskHolder)}; + + const auto& gpuDigiErrors = ctx.get(iEvent, digiErrorGetToken_); + + auto tmp = gpuDigiErrors.dataErrorToHostAsync(ctx.stream()); + error_ = tmp.first; + data_ = std::move(tmp.second); + formatterErrors_ = &(gpuDigiErrors.formatterErrors()); +} + +void SiPixelDigiErrorsSoAFromCUDA::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + // The following line copies the data from the pinned host memory to + // regular host memory. In principle that feels unnecessary (why not + // just use the pinned host memory?). There are a few arguments for + // doing it though + // - Now can release the pinned host memory back to the (caching) allocator + // * if we'd like to keep the pinned memory, we'd need to also + // keep the CUDA stream around as long as that, or allow pinned + // host memory to be allocated without a CUDA stream + // - What if a CPU algorithm would produce the same SoA? We can't + // use cudaMallocHost without a GPU... + iEvent.emplace(digiErrorPutToken_, error_.size(), error_.data(), formatterErrors_); + + error_ = cms::cuda::make_SimpleVector(0, nullptr); + data_.reset(); + formatterErrors_ = nullptr; +} + +// define as framework plugin +DEFINE_FWK_MODULE(SiPixelDigiErrorsSoAFromCUDA); diff --git a/EventFilter/SiPixelRawToDigi/plugins/SiPixelDigisSoAFromCUDA.cc b/EventFilter/SiPixelRawToDigi/plugins/SiPixelDigisSoAFromCUDA.cc new file mode 100644 index 0000000000000..dbec74585998f --- /dev/null +++ b/EventFilter/SiPixelRawToDigi/plugins/SiPixelDigisSoAFromCUDA.cc @@ -0,0 +1,83 @@ +#include "CUDADataFormats/Common/interface/Product.h" +#include "CUDADataFormats/SiPixelDigi/interface/SiPixelDigisCUDA.h" +#include "DataFormats/SiPixelDigi/interface/SiPixelDigisSoA.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" + +class SiPixelDigisSoAFromCUDA : public edm::stream::EDProducer { +public: + explicit SiPixelDigisSoAFromCUDA(const edm::ParameterSet& iConfig); + ~SiPixelDigisSoAFromCUDA() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void acquire(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + edm::WaitingTaskWithArenaHolder waitingTaskHolder) override; + void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; + + edm::EDGetTokenT> digiGetToken_; + edm::EDPutTokenT digiPutToken_; + + cms::cuda::host::unique_ptr pdigi_; + cms::cuda::host::unique_ptr rawIdArr_; + cms::cuda::host::unique_ptr adc_; + cms::cuda::host::unique_ptr clus_; + + int nDigis_; +}; + +SiPixelDigisSoAFromCUDA::SiPixelDigisSoAFromCUDA(const edm::ParameterSet& iConfig) + : digiGetToken_(consumes>(iConfig.getParameter("src"))), + digiPutToken_(produces()) {} + +void SiPixelDigisSoAFromCUDA::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("src", edm::InputTag("siPixelClustersCUDA")); + descriptions.addWithDefaultLabel(desc); +} + +void SiPixelDigisSoAFromCUDA::acquire(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + edm::WaitingTaskWithArenaHolder waitingTaskHolder) { + // Do the transfer in a CUDA stream parallel to the computation CUDA stream + cms::cuda::ScopedContextAcquire ctx{iEvent.streamID(), std::move(waitingTaskHolder)}; + + const auto& gpuDigis = ctx.get(iEvent, digiGetToken_); + + nDigis_ = gpuDigis.nDigis(); + pdigi_ = gpuDigis.pdigiToHostAsync(ctx.stream()); + rawIdArr_ = gpuDigis.rawIdArrToHostAsync(ctx.stream()); + adc_ = gpuDigis.adcToHostAsync(ctx.stream()); + clus_ = gpuDigis.clusToHostAsync(ctx.stream()); +} + +void SiPixelDigisSoAFromCUDA::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + // The following line copies the data from the pinned host memory to + // regular host memory. In principle that feels unnecessary (why not + // just use the pinned host memory?). There are a few arguments for + // doing it though + // - Now can release the pinned host memory back to the (caching) allocator + // * if we'd like to keep the pinned memory, we'd need to also + // keep the CUDA stream around as long as that, or allow pinned + // host memory to be allocated without a CUDA stream + // - What if a CPU algorithm would produce the same SoA? We can't + // use cudaMallocHost without a GPU... + iEvent.emplace(digiPutToken_, nDigis_, pdigi_.get(), rawIdArr_.get(), adc_.get(), clus_.get()); + + pdigi_.reset(); + rawIdArr_.reset(); + adc_.reset(); + clus_.reset(); +} + +// define as framework plugin +DEFINE_FWK_MODULE(SiPixelDigisSoAFromCUDA); diff --git a/EventFilter/SiPixelRawToDigi/python/SiPixelRawToDigi_cfi.py b/EventFilter/SiPixelRawToDigi/python/SiPixelRawToDigi_cfi.py index 12ff657cefd8e..50c8f0fcabd3c 100644 --- a/EventFilter/SiPixelRawToDigi/python/SiPixelRawToDigi_cfi.py +++ b/EventFilter/SiPixelRawToDigi/python/SiPixelRawToDigi_cfi.py @@ -1,7 +1,24 @@ import FWCore.ParameterSet.Config as cms -import EventFilter.SiPixelRawToDigi.siPixelRawToDigi_cfi +from EventFilter.SiPixelRawToDigi.siPixelRawToDigi_cfi import siPixelRawToDigi as _siPixelRawToDigi -siPixelDigis = EventFilter.SiPixelRawToDigi.siPixelRawToDigi_cfi.siPixelRawToDigi.clone() +from HeterogeneousCore.CUDACore.SwitchProducerCUDA import SwitchProducerCUDA +siPixelDigis = SwitchProducerCUDA( + cpu = _siPixelRawToDigi.clone() +) from Configuration.Eras.Modifier_phase1Pixel_cff import phase1Pixel -phase1Pixel.toModify(siPixelDigis, UsePhase1=True) +phase1Pixel.toModify(siPixelDigis.cpu, UsePhase1=True) + +from Configuration.ProcessModifiers.gpu_cff import gpu +gpu.toModify(siPixelDigis, + cuda = cms.EDAlias( + siPixelDigiErrors = cms.VPSet( + cms.PSet(type = cms.string("DetIdedmEDCollection")), + cms.PSet(type = cms.string("SiPixelRawDataErroredmDetSetVector")), + cms.PSet(type = cms.string("PixelFEDChanneledmNewDetSetVector")) + ), + siPixelDigisClustersPreSplitting = cms.VPSet( + cms.PSet(type = cms.string("PixelDigiedmDetSetVector")) + ) + ) +) diff --git a/EventFilter/SiPixelRawToDigi/python/siPixelDigis_cff.py b/EventFilter/SiPixelRawToDigi/python/siPixelDigis_cff.py new file mode 100644 index 0000000000000..5c1ff74be9c69 --- /dev/null +++ b/EventFilter/SiPixelRawToDigi/python/siPixelDigis_cff.py @@ -0,0 +1,30 @@ +import FWCore.ParameterSet.Config as cms + +from EventFilter.SiPixelRawToDigi.SiPixelRawToDigi_cfi import siPixelDigis +from EventFilter.SiPixelRawToDigi.siPixelDigisSoAFromCUDA_cfi import siPixelDigisSoAFromCUDA as _siPixelDigisSoAFromCUDA +from EventFilter.SiPixelRawToDigi.siPixelDigiErrorsSoAFromCUDA_cfi import siPixelDigiErrorsSoAFromCUDA as _siPixelDigiErrorsSoAFromCUDA +from EventFilter.SiPixelRawToDigi.siPixelDigiErrorsFromSoA_cfi import siPixelDigiErrorsFromSoA as _siPixelDigiErrorsFromSoA + +siPixelDigisTask = cms.Task(siPixelDigis) + +siPixelDigisSoA = _siPixelDigisSoAFromCUDA.clone( + src = "siPixelClustersPreSplittingCUDA" +) +siPixelDigiErrorsSoA = _siPixelDigiErrorsSoAFromCUDA.clone( + src = "siPixelClustersPreSplittingCUDA" +) +siPixelDigiErrors = _siPixelDigiErrorsFromSoA.clone() + +from Configuration.Eras.Modifier_phase1Pixel_cff import phase1Pixel +phase1Pixel.toModify(siPixelDigiErrors, UsePhase1=True) + +siPixelDigisTaskCUDA = cms.Task( + siPixelDigisSoA, + siPixelDigiErrorsSoA, + siPixelDigiErrors +) + +from Configuration.ProcessModifiers.gpu_cff import gpu +_siPixelDigisTask_gpu = siPixelDigisTask.copy() +_siPixelDigisTask_gpu.add(siPixelDigisTaskCUDA) +gpu.toReplaceWith(siPixelDigisTask, _siPixelDigisTask_gpu) diff --git a/EventFilter/SiStripRawToDigi/plugins/WarningSummary.cc b/EventFilter/SiStripRawToDigi/plugins/WarningSummary.cc index e420b1d791cf6..e7a78bc5ba6ee 100644 --- a/EventFilter/SiStripRawToDigi/plugins/WarningSummary.cc +++ b/EventFilter/SiStripRawToDigi/plugins/WarningSummary.cc @@ -4,11 +4,8 @@ #include void sistrip::WarningSummary::add(const std::string& message, const std::string& details) { - const auto wIt = std::find_if( - std::begin(m_warnings), std::end(m_warnings), [&message](const std::pair& item) { - return item.first == message; - }); - if (std::end(m_warnings) == wIt) { + const auto wIt = m_warnings.find(message); + if (wIt == m_warnings.end()) { m_warnings.emplace(message, 1); edm::LogWarning(m_category) << message << ": " << details << (m_debug ? "" diff --git a/EventFilter/Utilities/interface/FastMonitor.h b/EventFilter/Utilities/interface/FastMonitor.h index 5ea6e55ae14a4..81770900d7bf9 100644 --- a/EventFilter/Utilities/interface/FastMonitor.h +++ b/EventFilter/Utilities/interface/FastMonitor.h @@ -83,8 +83,8 @@ namespace jsoncollector { JsonMonitorable* getMergedIntJForLumi(std::string const& name, unsigned int forLumi); // merges and outputs everything collected for the given stream to JSON file - bool outputFullJSONs(std::string const& pathstem, std::string const& ext, unsigned int lumi); - bool outputFullJSON(std::string const& path, unsigned int lumi); + bool outputFullJSONs(std::string const& pathstem, std::string const& ext, unsigned int lumi, bool output = true); + bool outputFullJSON(std::string const& path, unsigned int lumi, bool output = true); //discard what was collected for a lumisection void discardCollected(unsigned int forLumi); diff --git a/EventFilter/Utilities/interface/FastMonitoringService.h b/EventFilter/Utilities/interface/FastMonitoringService.h index abd85f621876d..959b2d51f0d55 100644 --- a/EventFilter/Utilities/interface/FastMonitoringService.h +++ b/EventFilter/Utilities/interface/FastMonitoringService.h @@ -12,10 +12,7 @@ #include -#include - #include "EventFilter/Utilities/interface/MicroStateService.h" -#include "EventFilter/Utilities/interface/FastMonitoringThread.h" #include #include @@ -25,27 +22,22 @@ #include /*Description - this is an evolution of the MicroStateService intended to be run standalone in cmsRun or similar - As such, it has to independently create a monitoring thread and run it in each forked process, which needs - to be arranged following the standard CMSSW procedure. - We try to use boost threads for uniformity with the rest of the framework, even if they suck a bit. - A legenda for use by the monitoring process in the DAQ needs to be generated as soon as convenient - since - no access to the EventProcessor is granted, this needs to wait until after beginJob is executed. - At the same time, we try to spare time in the monitoring by avoiding even a single string lookup and using the - moduledesc pointer to key into the map instead. - As a bonus, we can now add to the monitored status the current path (and possibly associate modules to a path...) - this intermediate info will be called "ministate" :D + this is an evolution of the MicroStateService intended to be run in standalone multi-threaded cmsRun jobs + A legenda for use by the monitoring process in the DAQ needs to be generated at beginJob (when first available). + We try to spare CPU time in the monitoring by avoiding even a single string lookup and using the + moduledesc pointer to key into the map instead and no string or string pointers are used for the microstates. + Only a pointer value is stored using relaxed ordering at the time of module execution which is fast. + At snapshot time only (every few seconds) we do the map lookup to produce snapshot. + Path names use a similar logic. However path names are not accessible in the same way as later so they need to be + when starting to run associated to the memory location of path name strings as accessible when path is executed. + Path intermediate info will be called "ministate" :D The general counters and status variables (event number, number of processed events, number of passed and stored - events, luminosity section etc. are also monitored here. - - NOTA BENE!!! with respect to the MicroStateService, no string or string pointers are used for the microstates. - NOTA BENE!!! the state of the edm::EventProcessor cannot be monitored directly from within a service, so a - different solution must be identified for that (especially one needs to identify error states). - NOTA BENE!!! to keep backward compatibility with the MicroStateService, a common base class with abstract interface, - exposing the single method to be used by all other packages (except EventFilter/Processor, - which should continue to use the concrete class interface) will be defined + events, luminosity section etc.) are also monitored here. + N.B. MicroStateService is referenced by a common base class which is now trivial. + It's complete removal will be completed in the future commit. */ + class FedRawDataInputSource; namespace edm { @@ -54,74 +46,117 @@ namespace edm { namespace evf { - template - struct ContainableAtomic { - ContainableAtomic() : m_value{} {} - ContainableAtomic(T iValue) : m_value(iValue) {} - ContainableAtomic(ContainableAtomic const& iOther) : m_value(iOther.m_value.load()) {} - ContainableAtomic& operator=(const void* iValue) { - m_value.store(iValue, std::memory_order_relaxed); - return *this; - } - operator T() { return m_value.load(std::memory_order_relaxed); } + class FastMonitoringThread; + + namespace FastMonState { + + enum Microstate { + mInvalid = 0, + mIdle, + mFwkOvhSrc, + mFwkOvhMod, + mFwkEoL, + mInput, + mDqm, + mBoL, + mEoL, + mGlobEoL, + mCOUNT + }; - std::atomic m_value; - }; + enum Macrostate { + sInit = 0, + sJobReady, + sRunGiven, + sRunning, + sStopping, + sShuttingDown, + sDone, + sJobEnded, + sError, + sErrorEnded, + sEnd, + sInvalid, + MCOUNT + }; - class FastMonitoringService : public MicroStateService { - struct Encoding { - Encoding(unsigned int res) : reserved_(res), current_(reserved_), currentReserved_(0) { - if (reserved_) - dummiesForReserved_ = new edm::ModuleDescription[reserved_]; - // completeReservedWithDummies(); - } - ~Encoding() { - if (reserved_) - delete[] dummiesForReserved_; - } - //trick: only encode state when sending it over (i.e. every sec) - int encode(const void* add) { - std::unordered_map::const_iterator it = quickReference_.find(add); - return (it != quickReference_.end()) ? (*it).second : 0; - } - const void* decode(unsigned int index) { return decoder_[index]; } - void fillReserved(const void* add, unsigned int i) { - // translation_[*name]=current_; - quickReference_[add] = i; - if (decoder_.size() <= i) - decoder_.push_back(add); - else - decoder_[currentReserved_] = add; - } - void updateReserved(const void* add) { - fillReserved(add, currentReserved_); - currentReserved_++; - } - void completeReservedWithDummies() { - for (unsigned int i = currentReserved_; i < reserved_; i++) - fillReserved(dummiesForReserved_ + i, i); - } - void update(const void* add) { - // translation_[*name]=current_; - quickReference_[add] = current_; - decoder_.push_back(add); - current_++; - } - unsigned int vecsize() { return decoder_.size(); } - std::unordered_map quickReference_; - std::vector decoder_; - unsigned int reserved_; - int current_; - int currentReserved_; - edm::ModuleDescription* dummiesForReserved_; + enum InputState : short { + inIgnore = 0, + inInit, + inWaitInput, + inNewLumi, + inNewLumiBusyEndingLS, + inNewLumiIdleEndingLS, + inRunEnd, + inProcessingFile, + inWaitChunk, + inChunkReceived, + inChecksumEvent, + inCachedEvent, + inReadEvent, + inReadCleanup, + inNoRequest, + inNoRequestWithIdleThreads, + inNoRequestWithGlobalEoL, + inNoRequestWithEoLThreads, + //supervisor thread and worker threads state + inSupFileLimit, + inSupWaitFreeChunk, + inSupWaitFreeChunkCopying, + inSupWaitFreeThread, + inSupWaitFreeThreadCopying, + inSupBusy, + inSupLockPolling, + inSupLockPollingCopying, + inSupNoFile, + inSupNewFile, + inSupNewFileWaitThreadCopying, + inSupNewFileWaitThread, + inSupNewFileWaitChunkCopying, + inSupNewFileWaitChunk, + //combined with inWaitInput + inWaitInput_fileLimit, + inWaitInput_waitFreeChunk, + inWaitInput_waitFreeChunkCopying, + inWaitInput_waitFreeThread, + inWaitInput_waitFreeThreadCopying, + inWaitInput_busy, + inWaitInput_lockPolling, + inWaitInput_lockPollingCopying, + inWaitInput_runEnd, + inWaitInput_noFile, + inWaitInput_newFile, + inWaitInput_newFileWaitThreadCopying, + inWaitInput_newFileWaitThread, + inWaitInput_newFileWaitChunkCopying, + inWaitInput_newFileWaitChunk, + //combined with inWaitChunk + inWaitChunk_fileLimit, + inWaitChunk_waitFreeChunk, + inWaitChunk_waitFreeChunkCopying, + inWaitChunk_waitFreeThread, + inWaitChunk_waitFreeThreadCopying, + inWaitChunk_busy, + inWaitChunk_lockPolling, + inWaitChunk_lockPollingCopying, + inWaitChunk_runEnd, + inWaitChunk_noFile, + inWaitChunk_newFile, + inWaitChunk_newFileWaitThreadCopying, + inWaitChunk_newFileWaitThread, + inWaitChunk_newFileWaitChunkCopying, + inWaitChunk_newFileWaitChunk, + inCOUNT }; + } // namespace FastMonState + class FastMonitoringService : public MicroStateService { public: // the names of the states - some of them are never reached in an online app - static const std::string macroStateNames[FastMonitoringThread::MCOUNT]; - static const std::string inputStateNames[FastMonitoringThread::inCOUNT]; + static const edm::ModuleDescription reservedMicroStateNames[FastMonState::mCOUNT]; + static const std::string macroStateNames[FastMonState::MCOUNT]; + static const std::string inputStateNames[FastMonState::inCOUNT]; // Reserved names for microstates - // moved into base class in EventFilter/Utilities for compatibility with MicroStateServiceClassic static const std::string nopath_; FastMonitoringService(const edm::ParameterSet&, edm::ActivityRegistry&); ~FastMonitoringService() override; @@ -153,6 +188,8 @@ namespace evf { void postEvent(edm::StreamContext const&); void preSourceEvent(edm::StreamID); void postSourceEvent(edm::StreamID); + void preModuleEventAcquire(edm::StreamContext const&, edm::ModuleCallingContext const&); + void postModuleEventAcquire(edm::StreamContext const&, edm::ModuleCallingContext const&); void preModuleEvent(edm::StreamContext const&, edm::ModuleCallingContext const&); void postModuleEvent(edm::StreamContext const&, edm::ModuleCallingContext const&); void preStreamEarlyTermination(edm::StreamContext const&, edm::TerminationOrigin); @@ -161,8 +198,8 @@ namespace evf { void setExceptionDetected(unsigned int ls); //this is still needed for use in special functions like DQM which are in turn framework services - void setMicroState(MicroStateService::Microstate) override; - void setMicroState(edm::StreamID, MicroStateService::Microstate) override; + void setMicroState(FastMonState::Microstate); + void setMicroState(edm::StreamID, FastMonState::Microstate); void accumulateFileSize(unsigned int lumi, unsigned long fileSize); void startedLookingForFile(); @@ -178,63 +215,21 @@ namespace evf { } std::string getRunDirName() const { return runDirectory_.stem().string(); } void setInputSource(FedRawDataInputSource* inputSource) { inputSource_ = inputSource; } - void setInState(FastMonitoringThread::InputState inputState) { inputState_ = inputState; } - void setInStateSup(FastMonitoringThread::InputState inputState) { inputSupervisorState_ = inputState; } + void setInState(FastMonState::InputState inputState) { inputState_ = inputState; } + void setInStateSup(FastMonState::InputState inputState) { inputSupervisorState_ = inputState; } private: void doSnapshot(const unsigned int ls, const bool isGlobalEOL); - void doStreamEOLSnapshot(const unsigned int ls, const unsigned int streamID) { - //pick up only event count here - fmt_.jsonMonitor_->snapStreamAtomic(ls, streamID); - } - - void dowork() { // the function to be called in the thread. Thread completes when function returns. - monInit_.exchange(true, std::memory_order_acquire); - while (!fmt_.m_stoprequest) { - edm::LogInfo("FastMonitoringService") - << "Current states: Ms=" << fmt_.m_data.fastMacrostateJ_.value() - << " ms=" << encPath_[0].encode(ministate_[0]) << " us=" << encModule_.encode(microstate_[0]) - << " is=" << inputStateNames[inputState_] << " iss=" << inputStateNames[inputSupervisorState_] << std::endl; - - { - std::lock_guard lock(fmt_.monlock_); - - doSnapshot(lastGlobalLumi_, false); - - if (fastMonIntervals_ && (snapCounter_ % fastMonIntervals_) == 0) { - if (filePerFwkStream_) { - std::vector CSVv; - for (unsigned int i = 0; i < nStreams_; i++) { - CSVv.push_back(fmt_.jsonMonitor_->getCSVString((int)i)); - } - fmt_.monlock_.unlock(); - for (unsigned int i = 0; i < nStreams_; i++) { - if (!CSVv[i].empty()) - fmt_.jsonMonitor_->outputCSV(fastPathList_[i], CSVv[i]); - } - } else { - std::string CSV = fmt_.jsonMonitor_->getCSVString(); - //release mutex before writing out fast path file - fmt_.monlock_.unlock(); - if (!CSV.empty()) - fmt_.jsonMonitor_->outputCSV(fastPath_, CSV); - } - } - - snapCounter_++; - } - ::sleep(sleepTime_); - } - } + void snapshotRunner(); //the actual monitoring thread is held by a separate class object for ease of maintenance - FastMonitoringThread fmt_; - Encoding encModule_; - std::vector encPath_; + std::shared_ptr fmt_; + //Encoding encModule_; + //std::vector encPath_; FedRawDataInputSource* inputSource_ = nullptr; - std::atomic inputState_{FastMonitoringThread::InputState::inInit}; - std::atomic inputSupervisorState_{FastMonitoringThread::InputState::inInit}; + std::atomic inputState_{FastMonState::InputState::inInit}; + std::atomic inputSupervisorState_{FastMonState::InputState::inInit}; unsigned int nStreams_; unsigned int nThreads_; @@ -254,14 +249,6 @@ namespace evf { std::atomic isInitTransition_; unsigned int lumiFromSource_; - //global state - std::atomic macrostate_; - - //per stream - std::vector> ministate_; - std::vector> microstate_; - std::vector> threadMicrostate_; - //variables measuring source statistics (global) //unordered_map is not used because of very few elements stored concurrently std::map avgLeadTime_; @@ -278,9 +265,7 @@ namespace evf { //to disable this behavior, set #ATOMIC_LEVEL 0 or 1 in DataPoint.h std::vector*> streamCounterUpdating_; - std::vector firstEventId_; std::vector*> collectedPathList_; - std::vector> eventCountForPathInit_; std::vector pathNamesReady_; std::filesystem::path workingDirectory_, runDirectory_; @@ -294,7 +279,6 @@ namespace evf { std::string pathLegendFile_; std::string pathLegendFileJson_; std::string inputLegendFileJson_; - bool pathLegendWritten_ = false; unsigned int nOutputModules_ = 0; std::atomic monInit_; diff --git a/EventFilter/Utilities/interface/FastMonitoringThread.h b/EventFilter/Utilities/interface/FastMonitoringThread.h index 4b212f245a93e..87cc0c79bde52 100644 --- a/EventFilter/Utilities/interface/FastMonitoringThread.h +++ b/EventFilter/Utilities/interface/FastMonitoringThread.h @@ -2,104 +2,122 @@ #define EVF_FASTMONITORINGTHREAD #include "EventFilter/Utilities/interface/FastMonitor.h" +#include "EventFilter/Utilities/interface/FastMonitoringService.h" //state enums? #include +#include + #include #include #include namespace evf { + constexpr int nReservedModules = 64; + constexpr int nSpecialModules = 10; + constexpr int nReservedPaths = 1; + + namespace FastMonState { + enum Macrostate; + } + class FastMonitoringService; - class FastMonitoringThread { - public: - // a copy of the Framework/EventProcessor states - enum Macrostate { - sInit = 0, - sJobReady, - sRunGiven, - sRunning, - sStopping, - sShuttingDown, - sDone, - sJobEnded, - sError, - sErrorEnded, - sEnd, - sInvalid, - MCOUNT - }; + template + struct ContainableAtomic { + ContainableAtomic() : m_value{} {} + ContainableAtomic(T iValue) : m_value(iValue) {} + ContainableAtomic(ContainableAtomic const& iOther) : m_value(iOther.m_value.load()) {} + ContainableAtomic& operator=(T iValue) { + m_value.store(iValue, std::memory_order_relaxed); + return *this; + } + operator T() { return m_value.load(std::memory_order_relaxed); } - enum InputState { - inIgnore = 0, - inInit, - inWaitInput, - inNewLumi, - inNewLumiBusyEndingLS, - inNewLumiIdleEndingLS, - inRunEnd, - inProcessingFile, - inWaitChunk, - inChunkReceived, - inChecksumEvent, - inCachedEvent, - inReadEvent, - inReadCleanup, - inNoRequest, - inNoRequestWithIdleThreads, - inNoRequestWithGlobalEoL, - inNoRequestWithEoLThreads, - //supervisor thread and worker threads state - inSupFileLimit, - inSupWaitFreeChunk, - inSupWaitFreeChunkCopying, - inSupWaitFreeThread, - inSupWaitFreeThreadCopying, - inSupBusy, - inSupLockPolling, - inSupLockPollingCopying, - inSupNoFile, - inSupNewFile, - inSupNewFileWaitThreadCopying, - inSupNewFileWaitThread, - inSupNewFileWaitChunkCopying, - inSupNewFileWaitChunk, - //combined with inWaitInput - inWaitInput_fileLimit, - inWaitInput_waitFreeChunk, - inWaitInput_waitFreeChunkCopying, - inWaitInput_waitFreeThread, - inWaitInput_waitFreeThreadCopying, - inWaitInput_busy, - inWaitInput_lockPolling, - inWaitInput_lockPollingCopying, - inWaitInput_runEnd, - inWaitInput_noFile, - inWaitInput_newFile, - inWaitInput_newFileWaitThreadCopying, - inWaitInput_newFileWaitThread, - inWaitInput_newFileWaitChunkCopying, - inWaitInput_newFileWaitChunk, - //combined with inWaitChunk - inWaitChunk_fileLimit, - inWaitChunk_waitFreeChunk, - inWaitChunk_waitFreeChunkCopying, - inWaitChunk_waitFreeThread, - inWaitChunk_waitFreeThreadCopying, - inWaitChunk_busy, - inWaitChunk_lockPolling, - inWaitChunk_lockPollingCopying, - inWaitChunk_runEnd, - inWaitChunk_noFile, - inWaitChunk_newFile, - inWaitChunk_newFileWaitThreadCopying, - inWaitChunk_newFileWaitThread, - inWaitChunk_newFileWaitChunkCopying, - inWaitChunk_newFileWaitChunk, - inCOUNT - }; + std::atomic m_value; + }; + + struct FastMonEncoding { + FastMonEncoding(unsigned int res) : reserved_(res), current_(reserved_), currentReserved_(0) { + if (reserved_) + dummiesForReserved_ = new edm::ModuleDescription[reserved_]; + // completeReservedWithDummies(); + } + ~FastMonEncoding() { + if (reserved_) + delete[] dummiesForReserved_; + } + //trick: only encode state when sending it over (i.e. every sec) + int encode(const void* add) const { + std::unordered_map::const_iterator it = quickReference_.find(add); + return (it != quickReference_.end()) ? (*it).second : 0; + } + + //this allows to init path list in beginJob, but strings used later are not in the same memory + //position. Therefore path address lookup will be updated when snapshot (encode) is called + //with this we can remove ugly path legend update in preEventPath, but will still need a check + //that any event has been processed (any path will do) + int encodeString(const std::string* add) { + std::unordered_map::const_iterator it = quickReference_.find((void*)add); + if (it == quickReference_.end()) { + //try to match by string content (encode only used + auto it = quickReferencePreinit_.find(*add); + if (it == quickReferencePreinit_.end()) + return 0; + else { + //overwrite pointer in decoder and add to reference + decoder_[(*it).second] = (void*)add; + quickReference_[(void*)add] = (*it).second; + quickReferencePreinit_.erase(it); + return encode((void*)add); + } + } + return (*it).second; + } + const void* decode(unsigned int index) { return decoder_[index]; } + void fillReserved(const void* add, unsigned int i) { + // translation_[*name]=current_; + quickReference_[add] = i; + if (decoder_.size() <= i) + decoder_.push_back(add); + else + decoder_[currentReserved_] = add; + } + void updateReserved(const void* add) { + fillReserved(add, currentReserved_); + currentReserved_++; + } + void completeReservedWithDummies() { + for (unsigned int i = currentReserved_; i < reserved_; i++) + fillReserved(dummiesForReserved_ + i, i); + } + void update(const void* add) { + // translation_[*name]=current_; + quickReference_[add] = current_; + decoder_.push_back(add); + current_++; + } + + void updatePreinit(std::string const& add) { + // translation_[*name]=current_; + quickReferencePreinit_[add] = current_; + decoder_.push_back((void*)&add); + current_++; + } + + unsigned int vecsize() { return decoder_.size(); } + std::unordered_map quickReference_; + std::unordered_map quickReferencePreinit_; + std::vector decoder_; + unsigned int reserved_; + int current_; + int currentReserved_; + edm::ModuleDescription* dummiesForReserved_; + }; + + class FastMonitoringThread { + public: struct MonitorData { //fastpath global monitorables jsoncollector::IntJ fastMacrostateJ_; @@ -129,10 +147,22 @@ namespace evf { unsigned int microstateBins_; unsigned int inputstateBins_; + //global state + std::atomic macrostate_; + + //per stream + std::vector> ministate_; + std::vector> microstate_; + std::vector> microstateAcqFlag_; + std::vector> threadMicrostate_; + + FastMonEncoding encModule_; + std::vector encPath_; + //unsigned int prescaleindex_; // ditto - MonitorData() { - fastMacrostateJ_ = FastMonitoringThread::sInit; + MonitorData() : encModule_(nReservedModules) { + fastMacrostateJ_ = FastMonState::sInit; fastThroughputJ_ = 0; fastAvgLeadTimeJ_ = 0; fastFilesProcessedJ_ = 0; @@ -199,7 +229,7 @@ namespace evf { void resetFastMonitor(std::string const& microStateDefPath, std::string const& fastMicroStateDefPath) { std::string defGroup = "data"; - jsonMonitor_.reset(new jsoncollector::FastMonitor(microStateDefPath, defGroup, false)); + jsonMonitor_ = std::make_unique(microStateDefPath, defGroup, false); if (!fastMicroStateDefPath.empty()) jsonMonitor_->addFastPathDefinition(fastMicroStateDefPath, defGroup, false); } @@ -209,11 +239,15 @@ namespace evf { m_thread = std::make_shared(fp, cp); } void stop() { - assert(m_thread); - m_stoprequest = true; - m_thread->join(); + if (m_thread.get()) { + m_stoprequest = true; + m_thread->join(); + m_thread.reset(); + } } + ~FastMonitoringThread() { stop(); } + private: std::atomic m_stoprequest; std::shared_ptr m_thread; diff --git a/EventFilter/Utilities/interface/FedRawDataInputSource.h b/EventFilter/Utilities/interface/FedRawDataInputSource.h index 1006b664818dd..b68c98ca9a624 100644 --- a/EventFilter/Utilities/interface/FedRawDataInputSource.h +++ b/EventFilter/Utilities/interface/FedRawDataInputSource.h @@ -32,7 +32,10 @@ struct InputChunk; namespace evf { class FastMonitoringService; -} + namespace FastMonState { + enum InputState : short; + } +} // namespace evf class FedRawDataInputSource : public edm::RawInputSource { friend struct InputFile; @@ -48,6 +51,8 @@ class FedRawDataInputSource : public edm::RawInputSource { protected: Next checkNext() override; void read(edm::EventPrincipal& eventPrincipal) override; + void setMonState(evf::FastMonState::InputState state); + void setMonStateSup(evf::FastMonState::InputState state); private: void rewind_() override; diff --git a/EventFilter/Utilities/interface/MicroStateService.h b/EventFilter/Utilities/interface/MicroStateService.h index 8220f36f50612..b3c88fe52ffbc 100644 --- a/EventFilter/Utilities/interface/MicroStateService.h +++ b/EventFilter/Utilities/interface/MicroStateService.h @@ -3,49 +3,20 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/ActivityRegistry.h" -#include "DataFormats/Provenance/interface/EventID.h" -#include "DataFormats/Provenance/interface/Timestamp.h" -#include "DataFormats/Provenance/interface/ModuleDescription.h" -#include "DataFormats/Provenance/interface/ParameterSetID.h" -//#include "FWCore/ServiceRegistry/interface/StreamContext.h" - -//#include "boost/thread/thread.hpp" - -#include -#include +//#include "DataFormats/Provenance/interface/EventID.h" +//#include "DataFormats/Provenance/interface/Timestamp.h" +//#include "DataFormats/Provenance/interface/ModuleDescription.h" +//#include "DataFormats/Provenance/interface/ParameterSetID.h" namespace evf { class MicroStateService { public: - enum Microstate { - mInvalid = 0, - mIdle, - mFwkOvhSrc, - mFwkOvhMod, - mFwkEoL, - mInput, - mDqm, - mBoL, - mEoL, - mGlobEoL, - mCOUNT - }; // the names of the states - some of them are never reached in an online app - static const edm::ModuleDescription reservedMicroStateNames[mCOUNT]; MicroStateService(const edm::ParameterSet &, edm::ActivityRegistry &); virtual ~MicroStateService(); - virtual std::string getMicroState1() { return default_return_; } - - virtual std::string const &getMicroState2() { return default_return_; } - - virtual void setMicroState(Microstate m) = 0; - virtual void setMicroState(edm::StreamID sid, Microstate m) = 0; - protected: - static const std::string default_return_; - //boost::mutex lock_; }; } // namespace evf diff --git a/EventFilter/Utilities/interface/MicroStateServiceClassic.h b/EventFilter/Utilities/interface/MicroStateServiceClassic.h deleted file mode 100644 index 450b5d68437fd..0000000000000 --- a/EventFilter/Utilities/interface/MicroStateServiceClassic.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef EvFMicroStateServiceClassic_H -#define EvFMicroStateServiceClassic_H 1 - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/ActivityRegistry.h" -#include "DataFormats/Provenance/interface/EventID.h" -#include "DataFormats/Provenance/interface/Timestamp.h" -#include "DataFormats/Provenance/interface/ModuleDescription.h" -#include "DataFormats/Provenance/interface/ParameterSetID.h" - -#include "EventFilter/Utilities/interface/MicroStateService.h" - -#include -#include -#include - -namespace evf { - - class MicroStateServiceClassic : public MicroStateService { - public: - MicroStateServiceClassic(const edm::ParameterSet &, edm::ActivityRegistry &); - ~MicroStateServiceClassic() override; - - std::string getMicroState1() override; - - std::string const &getMicroState2() override; - - void postBeginJob(); - - void postEndJob(); - - void preEventProcessing(const edm::EventID &, const edm::Timestamp &); - void postEventProcessing(const edm::Event &, const edm::EventSetup &); - - void preSourceEvent(edm::StreamID); - void postSourceEvent(edm::StreamID); - - void preModule(const edm::ModuleDescription &); - void postModule(const edm::ModuleDescription &); - - void setMicroState(MicroStateService::Microstate m) override; - - private: - std::string microstate1_; - const std::string init; - const std::string done; - const std::string input; - const std::string fwkovh; - const std::string *microstate2_; - std::mutex lock_; - }; - -} // namespace evf - -#endif diff --git a/EventFilter/Utilities/plugins/FRDOutputModule.cc b/EventFilter/Utilities/plugins/FRDOutputModule.cc new file mode 100644 index 0000000000000..6c64f7390ee5b --- /dev/null +++ b/EventFilter/Utilities/plugins/FRDOutputModule.cc @@ -0,0 +1,200 @@ +#include "EventFilter/Utilities/plugins/FRDOutputModule.h" + +// system headers +#include +#include +#include +#include + +// C++ headers +#include +#include +#include +#include + +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Utilities/interface/Adler32Calculator.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/FEDRawData/interface/FEDNumbering.h" +#include "IOPool/Streamer/interface/FRDEventMessage.h" +#include "IOPool/Streamer/interface/FRDFileHeader.h" +#include "EventFilter/Utilities/interface/crc32c.h" + +FRDOutputModule::FRDOutputModule(edm::ParameterSet const& ps) + : edm::one::OutputModuleBase::OutputModuleBase(ps), + edm::one::OutputModule(ps), + token_(consumes(ps.getParameter("source"))), + frdVersion_(ps.getUntrackedParameter("frdVersion")), + frdFileVersion_(ps.getUntrackedParameter("frdFileVersion")), + filePrefix_(ps.getUntrackedParameter("filePrefix")), + fileName_(ps.getUntrackedParameter("fileName")) {} + +FRDOutputModule::~FRDOutputModule() {} + +void FRDOutputModule::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("source", edm::InputTag("rawDataCollector")); + desc.addUntracked("frdFileVersion", 1), desc.addUntracked("frdVersion", 6); + desc.addUntracked("filePrefix", ""); + desc.addUntracked("fileName", ""); + descriptions.addWithDefaultLabel(desc); +} + +void FRDOutputModule::write(edm::EventForOutput const& e) { + // serialize the FEDRawDataCollection into the format that we expect for + // FRDEventMsgView objects (may be better ways to do this) + edm::Handle fedBuffers; + e.getByToken(token_, fedBuffers); + + // determine the expected size of the FRDEvent IN BYTES !!!!! + assert(frdVersion_ <= FRDHeaderMaxVersion); + int headerSize = FRDHeaderVersionSize[frdVersion_]; + int expectedSize = headerSize; + int nFeds = frdVersion_ < 3 ? 1024 : FEDNumbering::lastFEDId() + 1; + + for (int idx = 0; idx < nFeds; ++idx) { + FEDRawData singleFED = fedBuffers->FEDData(idx); + expectedSize += singleFED.size(); + } + + // build the FRDEvent into a temporary buffer + std::unique_ptr> workBuffer( + std::make_unique>(expectedSize + 256)); + uint32* bufPtr = (uint32*)(workBuffer.get()->data()); + if (frdVersion_ <= 5) { + *bufPtr++ = (uint32)frdVersion_; // version number only + } else { + uint16 flags = 0; + if (!e.eventAuxiliary().isRealData()) + flags |= FRDEVENT_MASK_ISGENDATA; + *(uint16*)bufPtr = (uint16)(frdVersion_ & 0xffff); + *((uint16*)bufPtr + 1) = flags; + bufPtr++; + } + *bufPtr++ = (uint32)e.id().run(); + *bufPtr++ = (uint32)e.luminosityBlock(); + *bufPtr++ = (uint32)e.id().event(); + if (frdVersion_ == 4) + *bufPtr++ = 0; //64-bit event id high part + + if (frdVersion_ < 3) { + uint32 fedsize[1024]; + for (int idx = 0; idx < 1024; ++idx) { + FEDRawData singleFED = fedBuffers->FEDData(idx); + fedsize[idx] = singleFED.size(); + //std::cout << "fed size " << singleFED.size()<< std::endl; + } + memcpy(bufPtr, fedsize, 1024 * sizeof(uint32)); + bufPtr += 1024; + } else { + *bufPtr++ = expectedSize - headerSize; + *bufPtr++ = 0; + if (frdVersion_ <= 4) + *bufPtr++ = 0; + } + uint32* payloadPtr = bufPtr; + for (int idx = 0; idx < nFeds; ++idx) { + FEDRawData singleFED = fedBuffers->FEDData(idx); + if (singleFED.size() > 0) { + memcpy(bufPtr, singleFED.data(), singleFED.size()); + bufPtr += singleFED.size() / 4; + } + } + if (frdVersion_ > 4) { + //crc32c checksum + uint32_t crc = 0; + *(payloadPtr - 1) = crc32c(crc, (const unsigned char*)payloadPtr, expectedSize - headerSize); + } else if (frdVersion_ >= 3) { + //adler32 checksum + uint32 adlera = 1; + uint32 adlerb = 0; + cms::Adler32((const char*)payloadPtr, expectedSize - headerSize, adlera, adlerb); + *(payloadPtr - 1) = (adlerb << 16) | adlera; + } + + // create the FRDEventMsgView and use the template consumer to write it out + FRDEventMsgView msg(workBuffer.get()->data()); + + //write + ssize_t retval = ::write(outfd_, (void*)msg.startAddress(), msg.size()); + + if ((unsigned)retval != msg.size()) { + throw cms::Exception("FRDOutputModule", "write") + << "Error writing FED Raw Data event data to " << fileName_ << ". Possibly the output disk " + << "is full?" << std::endl; + } + + perFileEventCount_++; + perFileSize_ += msg.size(); +} + +void FRDOutputModule::beginLuminosityBlock(edm::LuminosityBlockForOutput const& lumiBlock) { + int ls = lumiBlock.id().luminosityBlock(); + + if (outfd_ != -1) + finishFileWrite(ls); + + if (fileWritten_) + throw cms::Exception("RawEventFileWriterForBU", "beginLuminosityBlock") + << "Multiple lumisections not supported in the same FRD file!"; + + std::string fileName; + if (fileName_.empty()) { + std::stringstream ss; + ss << (filePrefix_.empty() ? "" : filePrefix_ + "_") << "run" << std::setfill('0') << std::setw(6) + << lumiBlock.run() << "_ls" << std::setfill('0') << std::setw(4) << ls << "_index000000.raw"; + fileName = ss.str(); + } else { + //use exact filename (will be overwritten by last LS content if input contains multiple lumisections) + fileName = fileName_; + } + + outfd_ = open(fileName.c_str(), O_WRONLY | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO); + ftruncate(outfd_, 0); + + if (outfd_ < 0) { //attention here... it may happen that outfd_ is *not* set (e.g. missing initialize call...) + throw cms::Exception("RawEventFileWriterForBU", "beginLuminosityBlock") + << "Error opening FED Raw Data event output file: " << fileName << ": " << strerror(errno) << "\n"; + } + edm::LogInfo("RawEventFileWriterForBU") << " Opened " << fileName; + + perFileEventCount_ = 0; + perFileSize_ = 0; + + adlera_ = 1; + adlerb_ = 0; + + if (frdFileVersion_ > 0) { + assert(frdFileVersion_ == 1); + //reserve space for file header + ftruncate(outfd_, sizeof(FRDFileHeader_v1)); + lseek(outfd_, sizeof(FRDFileHeader_v1), SEEK_SET); + perFileSize_ = sizeof(FRDFileHeader_v1); + } +} + +void FRDOutputModule::endLuminosityBlock(edm::LuminosityBlockForOutput const& lumiBlock) { + int ls = lumiBlock.id().luminosityBlock(); + finishFileWrite(ls); +} + +void FRDOutputModule::finishFileWrite(int ls) { + if (outfd_ == -1) + return; + + if (frdFileVersion_ > 0) { + //rewind + lseek(outfd_, 0, SEEK_SET); + FRDFileHeader_v1 frdFileHeader(perFileEventCount_, (uint32_t)ls, perFileSize_); + ::write(outfd_, (char*)&frdFileHeader, sizeof(FRDFileHeader_v1)); + } + + close(outfd_); + outfd_ = -1; + if (!fileName_.empty()) + fileWritten_ = true; + + edm::LogInfo("FRDOutputModule") << "closed RAW input file"; +} diff --git a/EventFilter/Utilities/plugins/FRDOutputModule.h b/EventFilter/Utilities/plugins/FRDOutputModule.h new file mode 100644 index 0000000000000..85343a8999f3e --- /dev/null +++ b/EventFilter/Utilities/plugins/FRDOutputModule.h @@ -0,0 +1,52 @@ +#ifndef IOPool_Streamer_interface_FRDOutputModule_h +#define IOPool_Streamer_interface_FRDOutputModule_h + +// CMSSW headers +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +//#include "DataFormats/FEDRawData/interface/FEDRawData.h" +#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" +#include "FWCore/Framework/interface/EventForOutput.h" +#include "FWCore/Framework/interface/LuminosityBlockForOutput.h" +#include "FWCore/Framework/interface/one/OutputModule.h" +//#include "FWCore/ServiceRegistry/interface/ModuleCallingContext.h" + +class FRDOutputModule : public edm::one::OutputModule { +public: + explicit FRDOutputModule(edm::ParameterSet const& ps); + ~FRDOutputModule() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void write(edm::EventForOutput const& e) override; + //void beginRun(edm::RunForOutput const&) override {} + //void endRun(edm::RunForOutput const&) override {} + void writeRun(const edm::RunForOutput&) override {} + void writeLuminosityBlock(const edm::LuminosityBlockForOutput&) override {} + + void beginLuminosityBlock(edm::LuminosityBlockForOutput const&) override; + void endLuminosityBlock(edm::LuminosityBlockForOutput const&) override; + + void finishFileWrite(int ls); + uint32_t adler32() const { return (adlerb_ << 16) | adlera_; } + + const edm::EDGetTokenT token_; + + const uint32_t frdVersion_; + const uint32_t frdFileVersion_; + std::string filePrefix_; + std::string fileName_; + + int outfd_ = -1; + uint32_t adlera_; + uint32_t adlerb_; + + uint32_t perFileEventCount_; + uint64_t perFileSize_; + + bool fileWritten_ = false; +}; + +#endif // IOPool_Streamer_interface_FRDOutputModule_h diff --git a/EventFilter/Utilities/plugins/RawEventFileWriterForBU.cc b/EventFilter/Utilities/plugins/RawEventFileWriterForBU.cc index 51b71ce6f4a96..5cd68dd4023eb 100644 --- a/EventFilter/Utilities/plugins/RawEventFileWriterForBU.cc +++ b/EventFilter/Utilities/plugins/RawEventFileWriterForBU.cc @@ -1,34 +1,28 @@ -// $Id: RawEventFileWriterForBU.cc,v 1.1.2.6 2013/03/28 14:56:53 aspataru Exp $ +#include +#include +#include +#include +#include +#include -#include "EventFilter/Utilities/plugins/RawEventFileWriterForBU.h" +// CMSSW headers #include "EventFilter/Utilities/interface/EvFDaqDirector.h" #include "EventFilter/Utilities/interface/FileIO.h" #include "EventFilter/Utilities/interface/JSONSerializer.h" -#include "IOPool/Streamer/interface/FRDEventMessage.h" -#include "IOPool/Streamer/interface/FRDFileHeader.h" - +#include "EventFilter/Utilities/plugins/RawEventFileWriterForBU.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Adler32Calculator.h" #include "FWCore/Utilities/interface/Exception.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include -#include -#include -#include -#include -#include -#include +#include "IOPool/Streamer/interface/FRDEventMessage.h" +#include "IOPool/Streamer/interface/FRDFileHeader.h" using namespace jsoncollector; //TODO:get run directory information from DaqDirector RawEventFileWriterForBU::RawEventFileWriterForBU(edm::ParameterSet const& ps) - : // default to .5ms sleep per event - microSleep_(ps.getUntrackedParameter("microSleep", 0)), - frdFileVersion_(ps.getUntrackedParameter("frdFileVersion", 0)) -//debug_(ps.getUntrackedParameter("debug", False)) -{ + : microSleep_(ps.getParameter("microSleep")), + frdFileVersion_(ps.getParameter("frdFileVersion")) { //per-file JSD and FastMonitor rawJsonDef_.setDefaultGroup("legend"); rawJsonDef_.addLegendItem("NEvents", "integer", DataPointDefinition::SUM); @@ -308,3 +302,8 @@ void RawEventFileWriterForBU::makeRunPrefix(std::string const& destinationDir) { ss << "run" << std::setfill('0') << std::setw(6) << run_; runPrefix_ = ss.str(); } + +void RawEventFileWriterForBU::extendDescription(edm::ParameterSetDescription& desc) { + desc.add("microSleep", 0); + desc.add("frdFileVersion", 0); +} diff --git a/EventFilter/Utilities/plugins/RawEventFileWriterForBU.h b/EventFilter/Utilities/plugins/RawEventFileWriterForBU.h index 808df20ae7c59..056082fe36a7c 100644 --- a/EventFilter/Utilities/plugins/RawEventFileWriterForBU.h +++ b/EventFilter/Utilities/plugins/RawEventFileWriterForBU.h @@ -1,21 +1,22 @@ #ifndef EVFRAWEVENTFILEWRITERFORBU #define EVFRAWEVENTFILEWRITERFORBU -// $Id: RawEventFileWriterForBU.h,v 1.1.2.5 2013/03/28 14:56:53 aspataru Exp $ - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "IOPool/Streamer/interface/FRDEventMessage.h" - -#include "EventFilter/Utilities/interface/FastMonitor.h" - -#include +// C++ headers #include -#include +#include +#include +#include + +// system headers #include +#include #include -#include -#include +// CMSSW headers +#include "EventFilter/Utilities/interface/FastMonitor.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "IOPool/Streamer/interface/FRDEventMessage.h" class RawEventFileWriterForBU { public: @@ -31,9 +32,10 @@ class RawEventFileWriterForBU { void stop(); void initialize(std::string const& destinationDir, std::string const& name, int ls); void endOfLS(int ls); - bool sharedMode() const { return false; } void makeRunPrefix(std::string const& destinationDir); + static void extendDescription(edm::ParameterSetDescription& desc); + private: bool closefd() { if (outfd_ >= 0) { diff --git a/EventFilter/Utilities/plugins/RawEventOutputModuleForBU.h b/EventFilter/Utilities/plugins/RawEventOutputModuleForBU.h index 7f566b0dac082..60dd6d01f7e01 100644 --- a/EventFilter/Utilities/plugins/RawEventOutputModuleForBU.h +++ b/EventFilter/Utilities/plugins/RawEventOutputModuleForBU.h @@ -1,25 +1,26 @@ -#ifndef IOPool_Streamer_RawEventOutputModuleForBU_h -#define IOPool_Streamer_RawEventOutputModuleForBU_h +#ifndef IOPool_Streamer_interface_RawEventOutputModuleForBU_h +#define IOPool_Streamer_interface_RawEventOutputModuleForBU_h + +#include +#include -#include "FWCore/Framework/interface/EventForOutput.h" -#include "FWCore/Framework/interface/one/OutputModule.h" -#include "FWCore/Framework/interface/LuminosityBlockForOutput.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/ServiceRegistry/interface/ModuleCallingContext.h" -#include "FWCore/Utilities/interface/EDGetToken.h" #include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" -#include "DataFormats/FEDRawData/interface/FEDRawData.h" #include "DataFormats/FEDRawData/interface/FEDNumbering.h" - +#include "DataFormats/FEDRawData/interface/FEDRawData.h" +#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" #include "EventFilter/Utilities/interface/EvFDaqDirector.h" -#include "IOPool/Streamer/interface/FRDEventMessage.h" +#include "EventFilter/Utilities/interface/crc32c.h" #include "EventFilter/Utilities/plugins/EvFBuildingThrottle.h" +#include "FWCore/Framework/interface/EventForOutput.h" +#include "FWCore/Framework/interface/LuminosityBlockForOutput.h" +#include "FWCore/Framework/interface/one/OutputModule.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/ServiceRegistry/interface/ModuleCallingContext.h" +#include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/Utilities/interface/Adler32Calculator.h" -#include "EventFilter/Utilities/interface/crc32c.h" - -#include -#include +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "IOPool/Streamer/interface/FRDEventMessage.h" template class RawEventOutputModuleForBU : public edm::one::OutputModule { @@ -35,6 +36,8 @@ class RawEventOutputModuleForBU : public edm::one::OutputModule templateConsumer_; - std::string label_; - std::string instance_; - edm::EDGetTokenT token_; - unsigned int numEventsPerFile_; - unsigned int frdVersion_; - unsigned long long totsize; - unsigned long long writtensize; - unsigned long long writtenSizeLast; - unsigned int totevents; - unsigned int index_; + const edm::EDGetTokenT token_; + const unsigned int numEventsPerFile_; + const unsigned int frdVersion_; + unsigned long long totsize = 0LL; + unsigned long long writtensize = 0LL; + unsigned long long writtenSizeLast = 0LL; + unsigned int totevents = 0; + unsigned int index_ = 0; timeval startOfLastLumi; - bool firstLumi_; + bool firstLumi_ = true; }; template @@ -65,17 +66,9 @@ RawEventOutputModuleForBU::RawEventOutputModuleForBU(edm::ParameterSet : edm::one::OutputModuleBase::OutputModuleBase(ps), edm::one::OutputModule(ps), templateConsumer_(new Consumer(ps)), - label_(ps.getUntrackedParameter("ProductLabel", "source")), - instance_(ps.getUntrackedParameter("ProductInstance", "")), - token_(consumes(edm::InputTag(label_, instance_))), - numEventsPerFile_(ps.getUntrackedParameter("numEventsPerFile", 100)), - frdVersion_(ps.getUntrackedParameter("frdVersion", 6)), - totsize(0LL), - writtensize(0LL), - writtenSizeLast(0LL), - totevents(0), - index_(0), - firstLumi_(true) {} + token_(consumes(ps.getParameter("source"))), + numEventsPerFile_(ps.getParameter("numEventsPerFile")), + frdVersion_(ps.getParameter("frdVersion")) {} template RawEventOutputModuleForBU::~RawEventOutputModuleForBU() {} @@ -166,8 +159,7 @@ void RawEventOutputModuleForBU::write(edm::EventForOutput const& e) { FRDEventMsgView msg(workBuffer.get()->data()); writtensize += msg.size(); - if (!templateConsumer_->sharedMode()) - templateConsumer_->doOutputEvent(msg); + templateConsumer_->doOutputEvent(msg); } template @@ -206,9 +198,22 @@ void RawEventOutputModuleForBU::beginLuminosityBlock(edm::LuminosityBl totsize = 0LL; firstLumi_ = false; } + template void RawEventOutputModuleForBU::endLuminosityBlock(edm::LuminosityBlockForOutput const& ls) { // templateConsumer_->touchlock(ls.id().luminosityBlock(),basedir); templateConsumer_->endOfLS(ls.id().luminosityBlock()); } -#endif + +template +void RawEventOutputModuleForBU::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("source", edm::InputTag("rawDataCollector")); + desc.add("numEventsPerFile", 100); + desc.add("frdVersion", 6); + Consumer::extendDescription(desc); + + descriptions.addWithDefaultLabel(desc); +} + +#endif // IOPool_Streamer_interface_RawEventOutputModuleForBU_h diff --git a/EventFilter/Utilities/plugins/SealModule.cc b/EventFilter/Utilities/plugins/SealModule.cc deleted file mode 100644 index ecd02d58374c0..0000000000000 --- a/EventFilter/Utilities/plugins/SealModule.cc +++ /dev/null @@ -1,39 +0,0 @@ -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ServiceRegistry/interface/ServiceMaker.h" -#include "EventFilter/Utilities/interface/EvFDaqDirector.h" -#include "EventFilter/Utilities/interface/FastMonitoringService.h" -#include "EventFilter/Utilities/interface/EvFOutputModule.h" -#include "EventFilter/Utilities/plugins/ExceptionGenerator.h" -#include "EventFilter/Utilities/plugins/EvFBuildingThrottle.h" -#include "EventFilter/Utilities/plugins/EvFFEDSelector.h" -#include "EventFilter/Utilities/plugins/RawEventFileWriterForBU.h" -#include "EventFilter/Utilities/plugins/RecoEventWriterForFU.h" -#include "EventFilter/Utilities/plugins/RecoEventOutputModuleForFU.h" -#include "EventFilter/Utilities/plugins/RawEventOutputModuleForBU.h" -#include "EventFilter/Utilities/plugins/DaqFakeReader.h" -#include "FWCore/Framework/interface/InputSourceMacros.h" -#include "EventFilter/Utilities/interface/FedRawDataInputSource.h" - -using namespace edm::serviceregistry; -using namespace evf; - -//typedef edm::serviceregistry::AllArgsMaker MicroStateServiceMaker; -typedef edm::serviceregistry::AllArgsMaker FastMonitoringServiceMaker; - -typedef RawEventOutputModuleForBU RawStreamFileWriterForBU; -typedef RecoEventOutputModuleForFU ShmStreamConsumer; - -//legacy name for ConfDB compatibility - -//DEFINE_FWK_SERVICE_MAKER(MicroStateService, MicroStateServiceMaker); - -DEFINE_FWK_SERVICE_MAKER(FastMonitoringService, FastMonitoringServiceMaker); -DEFINE_FWK_SERVICE(EvFBuildingThrottle); -DEFINE_FWK_SERVICE(EvFDaqDirector); -DEFINE_FWK_MODULE(ExceptionGenerator); -DEFINE_FWK_MODULE(RawStreamFileWriterForBU); -DEFINE_FWK_MODULE(EvFFEDSelector); -DEFINE_FWK_MODULE(EvFOutputModule); -DEFINE_FWK_MODULE(ShmStreamConsumer); -DEFINE_FWK_MODULE(DaqFakeReader); -DEFINE_FWK_INPUT_SOURCE(FedRawDataInputSource); diff --git a/EventFilter/Utilities/plugins/modules.cc b/EventFilter/Utilities/plugins/modules.cc new file mode 100644 index 0000000000000..c3b6e33faec44 --- /dev/null +++ b/EventFilter/Utilities/plugins/modules.cc @@ -0,0 +1,38 @@ +#include "EventFilter/Utilities/interface/EvFDaqDirector.h" +#include "EventFilter/Utilities/interface/EvFOutputModule.h" +#include "EventFilter/Utilities/interface/FastMonitoringService.h" +#include "EventFilter/Utilities/interface/FedRawDataInputSource.h" +#include "EventFilter/Utilities/plugins/DaqFakeReader.h" +#include "EventFilter/Utilities/plugins/EvFBuildingThrottle.h" +#include "EventFilter/Utilities/plugins/EvFFEDSelector.h" +#include "EventFilter/Utilities/plugins/ExceptionGenerator.h" +#include "EventFilter/Utilities/plugins/RawEventFileWriterForBU.h" +#include "EventFilter/Utilities/plugins/RawEventOutputModuleForBU.h" +#include "EventFilter/Utilities/plugins/FRDOutputModule.h" +#include "EventFilter/Utilities/plugins/RecoEventOutputModuleForFU.h" +#include "EventFilter/Utilities/plugins/RecoEventWriterForFU.h" +#include "FWCore/Framework/interface/InputSourceMacros.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ServiceRegistry/interface/ServiceMaker.h" + +using namespace edm::serviceregistry; +using namespace evf; + +typedef edm::serviceregistry::AllArgsMaker FastMonitoringServiceMaker; +DEFINE_FWK_SERVICE_MAKER(FastMonitoringService, FastMonitoringServiceMaker); + +typedef RawEventOutputModuleForBU RawStreamFileWriterForBU; +DEFINE_FWK_MODULE(RawStreamFileWriterForBU); +DEFINE_FWK_MODULE(FRDOutputModule); + +// legacy name for ConfDB compatibility +typedef RecoEventOutputModuleForFU ShmStreamConsumer; +DEFINE_FWK_MODULE(ShmStreamConsumer); + +DEFINE_FWK_SERVICE(EvFBuildingThrottle); +DEFINE_FWK_SERVICE(EvFDaqDirector); +DEFINE_FWK_MODULE(ExceptionGenerator); +DEFINE_FWK_MODULE(EvFFEDSelector); +DEFINE_FWK_MODULE(EvFOutputModule); +DEFINE_FWK_MODULE(DaqFakeReader); +DEFINE_FWK_INPUT_SOURCE(FedRawDataInputSource); diff --git a/EventFilter/Utilities/python/MicroStateService_cfi.py b/EventFilter/Utilities/python/MicroStateService_cfi.py deleted file mode 100644 index 49c4b90fda007..0000000000000 --- a/EventFilter/Utilities/python/MicroStateService_cfi.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -MicroStateService = cms.Service( "MicroStateService", -) - diff --git a/EventFilter/Utilities/src/EvFDaqDirector.cc b/EventFilter/Utilities/src/EvFDaqDirector.cc index 88c4b8d588b4b..5943bee8c0c48 100644 --- a/EventFilter/Utilities/src/EvFDaqDirector.cc +++ b/EventFilter/Utilities/src/EvFDaqDirector.cc @@ -17,13 +17,12 @@ #include "IOPool/Streamer/interface/FRDFileHeader.h" #include -//#include +#include #include #include #include #include #include -#include #include //using boost::asio::ip::tcp; @@ -241,9 +240,16 @@ namespace evf { << " Error creating bu run dir -: " << hltdir << " mkdir error:" << strerror(errno) << "\n"; std::filesystem::copy_file(hltSourceDirectory_ + "/HltConfig.py", tmphltdir + "/HltConfig.py"); - std::filesystem::copy_file(hltSourceDirectory_ + "/fffParameters.jsn", tmphltdir + "/fffParameters.jsn"); + std::string optfiles[3] = {"hltinfo", "blacklist", "whitelist"}; + for (auto& optfile : optfiles) { + try { + std::filesystem::copy_file(hltSourceDirectory_ + "/" + optfile, tmphltdir + "/" + optfile); + } catch (...) { + } + } + std::filesystem::rename(tmphltdir, hltdir); } else throw cms::Exception("DaqDirector") << " Error looking for HLT configuration -: " << hltSourceDirectory_; @@ -1276,7 +1282,7 @@ namespace evf { std::ifstream ij(jsonDestPath); ss << ij.rdbuf(); } catch (std::filesystem::filesystem_error const& ex) { - edm::LogError("EvFDaqDirector") << "grabNextJsonFile - BOOST FILESYSTEM ERROR CAUGHT -: " << ex.what(); + edm::LogError("EvFDaqDirector") << "grabNextJsonFile - FILESYSTEM ERROR CAUGHT -: " << ex.what(); return -1; } result = reader.parse(ss.str(), deserializeRoot); diff --git a/EventFilter/Utilities/src/EvFOutputModule.cc b/EventFilter/Utilities/src/EvFOutputModule.cc index 81d37c0ecedc4..1d6d8a7311416 100644 --- a/EventFilter/Utilities/src/EvFOutputModule.cc +++ b/EventFilter/Utilities/src/EvFOutputModule.cc @@ -142,7 +142,7 @@ namespace evf { EvFOutputModuleType::fillDescription(desc); desc.addUntracked("psetMap", {"hltPSetMap"}) ->setComment("Optionally allow the map of ParameterSets to be calculated externally."); - descriptions.addDefault(desc); + descriptions.add("evfOutputModule", desc); } void EvFOutputModule::beginRun(edm::RunForOutput const& run) { diff --git a/EventFilter/Utilities/src/FastMonitor.cc b/EventFilter/Utilities/src/FastMonitor.cc index f47dae4fd2a94..d3f43b484a25e 100644 --- a/EventFilter/Utilities/src/FastMonitor.cc +++ b/EventFilter/Utilities/src/FastMonitor.cc @@ -16,7 +16,6 @@ #include #include #include -#include using namespace jsoncollector; @@ -239,16 +238,19 @@ JsonMonitorable* FastMonitor::getMergedIntJForLumi(std::string const& name, unsi return dataPoints_[it->second]->mergeAndRetrieveValue(forLumi); } -bool FastMonitor::outputFullJSONs(std::string const& pathstem, std::string const& ext, unsigned int lumi) { +bool FastMonitor::outputFullJSONs(std::string const& pathstem, std::string const& ext, unsigned int lumi, bool output) { LogDebug("FastMonitor") << "SNAP updates -: " << recentSnaps_ << " (by timer: " << recentSnapsTimer_ << ") in lumisection "; recentSnaps_ = recentSnapsTimer_ = 0; for (unsigned int i = 0; i < nStreams_; i++) { + //merge even if no output Json::Value serializeRoot; for (unsigned int j = 0; j < jsonDpIndex_.size(); j++) { dataPoints_[jsonDpIndex_[j]]->mergeAndSerialize(serializeRoot, lumi, true, i); } + if (!output) + continue; //get extension std::stringstream tidext; tidext << "_tid" << i; @@ -258,10 +260,10 @@ bool FastMonitor::outputFullJSONs(std::string const& pathstem, std::string const std::string&& result = writer.write(serializeRoot); FileIO::writeStringToFile(path, result); } - return true; + return output; } -bool FastMonitor::outputFullJSON(std::string const& path, unsigned int lumi) { +bool FastMonitor::outputFullJSON(std::string const& path, unsigned int lumi, bool output) { LogDebug("FastMonitor") << "SNAP updates -: " << recentSnaps_ << " (by timer: " << recentSnapsTimer_ << ") in lumisection "; @@ -270,6 +272,8 @@ bool FastMonitor::outputFullJSON(std::string const& path, unsigned int lumi) { for (unsigned int j = 0; j < jsonDpIndex_.size(); j++) { dataPoints_[jsonDpIndex_[j]]->mergeAndSerialize(serializeRoot, lumi, j == 0, -1); } + if (!output) + return false; Json::StyledWriter writer; std::string&& result = writer.write(serializeRoot); diff --git a/EventFilter/Utilities/src/FastMonitoringService.cc b/EventFilter/Utilities/src/FastMonitoringService.cc index fa66a96b09cfe..39d01147b53ac 100644 --- a/EventFilter/Utilities/src/FastMonitoringService.cc +++ b/EventFilter/Utilities/src/FastMonitoringService.cc @@ -1,10 +1,7 @@ #include "EventFilter/Utilities/interface/FastMonitoringService.h" -#include +#include "EventFilter/Utilities/interface/FastMonitoringThread.h" #include "FWCore/Framework/interface/Event.h" -#include -#include - #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/ServiceRegistry/interface/SystemBounds.h" #include "FWCore/ServiceRegistry/interface/GlobalContext.h" @@ -17,33 +14,47 @@ #include "FWCore/Utilities/interface/UnixSignalHandlers.h" #include "FWCore/ServiceRegistry/interface/ModuleCallingContext.h" +#include "FWCore/ServiceRegistry/interface/PathsAndConsumesOfModulesBase.h" #include "DataFormats/Provenance/interface/ModuleDescription.h" -using namespace jsoncollector; #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" -constexpr double throughputFactor() { return (1000000) / double(1024 * 1024); } +#include +#include +#include -static const int nReservedModules = 64; -static const int nSpecialModules = 10; -static const int nReservedPaths = 1; +using namespace jsoncollector; + +constexpr double throughputFactor() { return (1000000) / double(1024 * 1024); } namespace evf { - const std::string FastMonitoringService::macroStateNames[FastMonitoringThread::MCOUNT] = {"Init", - "JobReady", - "RunGiven", - "Running", - "Stopping", - "Done", - "JobEnded", - "Error", - "ErrorEnded", - "End", - "Invalid"}; - - const std::string FastMonitoringService::inputStateNames[FastMonitoringThread::inCOUNT] = { + const edm::ModuleDescription FastMonitoringService::reservedMicroStateNames[FastMonState::mCOUNT] = { + edm::ModuleDescription("Dummy", "Invalid"), + edm::ModuleDescription("Dummy", "Idle"), + edm::ModuleDescription("Dummy", "FwkOvhSrc"), + edm::ModuleDescription("Dummy", "FwkOvhMod"), //set post produce, analyze or filter + edm::ModuleDescription("Dummy", "FwkEoL"), + edm::ModuleDescription("Dummy", "Input"), + edm::ModuleDescription("Dummy", "DQM"), + edm::ModuleDescription("Dummy", "BoL"), + edm::ModuleDescription("Dummy", "EoL"), + edm::ModuleDescription("Dummy", "GlobalEoL")}; + + const std::string FastMonitoringService::macroStateNames[FastMonState::MCOUNT] = {"Init", + "JobReady", + "RunGiven", + "Running", + "Stopping", + "Done", + "JobEnded", + "Error", + "ErrorEnded", + "End", + "Invalid"}; + + const std::string FastMonitoringService::inputStateNames[FastMonState::inCOUNT] = { "Ignore", "Init", "WaitInput", @@ -111,7 +122,7 @@ namespace evf { FastMonitoringService::FastMonitoringService(const edm::ParameterSet& iPS, edm::ActivityRegistry& reg) : MicroStateService(iPS, reg), - encModule_(nReservedModules), + fmt_(new FastMonitoringThread()), nStreams_(0) //until initialized , sleepTime_(iPS.getUntrackedParameter("sleepTime", 1)), @@ -145,8 +156,11 @@ namespace evf { reg.watchPreSourceEvent(this, &FastMonitoringService::preSourceEvent); //source (with streamID of requestor) reg.watchPostSourceEvent(this, &FastMonitoringService::postSourceEvent); - reg.watchPreModuleEvent(this, &FastMonitoringService::preModuleEvent); //should be stream - reg.watchPostModuleEvent(this, &FastMonitoringService::postModuleEvent); // + reg.watchPreModuleEventAcquire(this, &FastMonitoringService::preModuleEventAcquire); //stream + reg.watchPostModuleEventAcquire(this, &FastMonitoringService::postModuleEventAcquire); + + reg.watchPreModuleEvent(this, &FastMonitoringService::preModuleEvent); //stream + reg.watchPostModuleEvent(this, &FastMonitoringService::postModuleEvent); reg.watchPreStreamEarlyTermination(this, &FastMonitoringService::preStreamEarlyTermination); reg.watchPreGlobalEarlyTermination(this, &FastMonitoringService::preGlobalEarlyTermination); @@ -183,8 +197,8 @@ namespace evf { std::string FastMonitoringService::makePathLegendaJson() { Json::Value legendaVector(Json::arrayValue); - for (int i = 0; i < encPath_[0].current_; i++) - legendaVector.append(Json::Value(*(static_cast(encPath_[0].decode(i))))); + for (int i = 0; i < fmt_->m_data.encPath_[0].current_; i++) + legendaVector.append(Json::Value(*(static_cast(fmt_->m_data.encPath_[0].decode(i))))); Json::Value valReserved(nReservedPaths); Json::Value pathLegend; pathLegend["names"] = legendaVector; @@ -195,9 +209,13 @@ namespace evf { std::string FastMonitoringService::makeModuleLegendaJson() { Json::Value legendaVector(Json::arrayValue); - for (int i = 0; i < encModule_.current_; i++) + for (int i = 0; i < fmt_->m_data.encModule_.current_; i++) legendaVector.append( - Json::Value((static_cast(encModule_.decode(i)))->moduleLabel())); + Json::Value((static_cast(fmt_->m_data.encModule_.decode(i)))->moduleLabel())); + //duplicate modules adding a list for acquire states (not all modules actually have it) + for (int i = 0; i < fmt_->m_data.encModule_.current_; i++) + legendaVector.append(Json::Value( + (static_cast(fmt_->m_data.encModule_.decode(i)))->moduleLabel() + "__ACQ")); Json::Value valReserved(nReservedModules); Json::Value valSpecial(nSpecialModules); Json::Value valOutputModules(nOutputModules_); @@ -212,7 +230,7 @@ namespace evf { std::string FastMonitoringService::makeInputLegendaJson() { Json::Value legendaVector(Json::arrayValue); - for (int i = 0; i < FastMonitoringThread::inCOUNT; i++) + for (int i = 0; i < FastMonState::inCOUNT; i++) legendaVector.append(Json::Value(inputStateNames[i])); Json::Value moduleLegend; moduleLegend["names"] = legendaVector; @@ -230,7 +248,8 @@ namespace evf { nThreads_ = 1; } - void FastMonitoringService::preBeginJob(edm::PathsAndConsumesOfModulesBase const&, edm::ProcessContext const& pc) { + void FastMonitoringService::preBeginJob(edm::PathsAndConsumesOfModulesBase const& pathsInfo, + edm::ProcessContext const& pc) { // FIND RUN DIRECTORY // The run dir should be set via the configuration of EvFDaqDirector @@ -293,45 +312,51 @@ namespace evf { * */ - macrostate_ = FastMonitoringThread::sInit; + fmt_->m_data.macrostate_ = FastMonState::sInit; - for (unsigned int i = 0; i < (mCOUNT); i++) - encModule_.updateReserved(static_cast(reservedMicroStateNames + i)); - encModule_.completeReservedWithDummies(); + for (unsigned int i = 0; i < (FastMonState::mCOUNT); i++) + fmt_->m_data.encModule_.updateReserved(static_cast(reservedMicroStateNames + i)); + fmt_->m_data.encModule_.completeReservedWithDummies(); for (unsigned int i = 0; i < nStreams_; i++) { - ministate_.emplace_back(&nopath_); - microstate_.emplace_back(&reservedMicroStateNames[mInvalid]); + fmt_->m_data.ministate_.emplace_back(&nopath_); + fmt_->m_data.microstate_.emplace_back(&reservedMicroStateNames[FastMonState::mInvalid]); + fmt_->m_data.microstateAcqFlag_.push_back(0); //for synchronization streamCounterUpdating_.push_back(new std::atomic(false)); //path (mini) state - encPath_.emplace_back(0); - encPath_[i].update(static_cast(&nopath_)); - eventCountForPathInit_.push_back(0); - firstEventId_.push_back(0); - collectedPathList_.push_back(new std::atomic(false)); + fmt_->m_data.encPath_.emplace_back(0); + fmt_->m_data.encPath_[i].update(static_cast(&nopath_)); + + for (auto& path : pathsInfo.paths()) { + fmt_->m_data.encPath_[i].updatePreinit(path); + } + for (auto& endPath : pathsInfo.endPaths()) { + fmt_->m_data.encPath_[i].updatePreinit(endPath); + } } //for (unsigned int i=0;im_data.macrostateBins_ = FastMonState::MCOUNT; + fmt_->m_data.microstateBins_ = 0; + fmt_->m_data.inputstateBins_ = FastMonState::inCOUNT; + fmt_->m_data.ministateBins_ = fmt_->m_data.encPath_[0].vecsize(); lastGlobalLumi_ = 0; isInitTransition_ = true; lumiFromSource_ = 0; //startup monitoring - fmt_.resetFastMonitor(microstateDefPath_, fastMicrostateDefPath_); - fmt_.jsonMonitor_->setNStreams(nStreams_); - fmt_.m_data.registerVariables(fmt_.jsonMonitor_.get(), nStreams_, threadIDAvailable_ ? nThreads_ : 0); + fmt_->resetFastMonitor(microstateDefPath_, fastMicrostateDefPath_); + fmt_->jsonMonitor_->setNStreams(nStreams_); + fmt_->m_data.registerVariables(fmt_->jsonMonitor_.get(), nStreams_, threadIDAvailable_ ? nThreads_ : 0); monInit_.store(false, std::memory_order_release); - fmt_.start(&FastMonitoringService::dowork, this); + if (sleepTime_ > 0) + fmt_->start(&FastMonitoringService::snapshotRunner, this); //this definition needs: #include "tbb/compat/thread" //however this would results in TBB imeplementation replacing std::thread @@ -356,7 +381,7 @@ namespace evf { edm::LogWarning("FastMonitoringService") << " STREAM " << sc.streamID().value() << " earlyTermination -: ID:" << sc.eventID() << " LS:" << sc.eventID().luminosityBlock() << " " << context; - std::lock_guard lock(fmt_.monlock_); + std::lock_guard lock(fmt_->monlock_); exceptionInLS_.push_back(sc.eventID().luminosityBlock()); } @@ -371,7 +396,7 @@ namespace evf { edm::LogWarning("FastMonitoringService") << " GLOBAL " << "earlyTermination -: LS:" << gc.luminosityBlockID().luminosityBlock() << " " << context; - std::lock_guard lock(fmt_.monlock_); + std::lock_guard lock(fmt_->monlock_); exceptionInLS_.push_back(gc.luminosityBlockID().luminosityBlock()); } @@ -385,7 +410,7 @@ namespace evf { context = " FromExternalSignal"; edm::LogWarning("FastMonitoringService") << " SOURCE " << "earlyTermination -: " << context; - std::lock_guard lock(fmt_.monlock_); + std::lock_guard lock(fmt_->monlock_); exception_detected_ = true; } @@ -396,11 +421,11 @@ namespace evf { exceptionInLS_.push_back(ls); } - void FastMonitoringService::jobFailure() { macrostate_ = FastMonitoringThread::sError; } + void FastMonitoringService::jobFailure() { fmt_->m_data.macrostate_ = FastMonState::sError; } //new output module name is stream void FastMonitoringService::preModuleBeginJob(const edm::ModuleDescription& desc) { - std::lock_guard lock(fmt_.monlock_); + std::lock_guard lock(fmt_->monlock_); //std::cout << " Pre module Begin Job module: " << desc.moduleName() << std::endl; //build a map of modules keyed by their module description address @@ -408,10 +433,10 @@ namespace evf { if (desc.moduleName() == "Stream" || desc.moduleName() == "ShmStreamConsumer" || desc.moduleName() == "EvFOutputModule" || desc.moduleName() == "EventStreamFileWriter" || desc.moduleName() == "PoolOutputModule") { - encModule_.updateReserved((void*)&desc); + fmt_->m_data.encModule_.updateReserved((void*)&desc); nOutputModules_++; } else - encModule_.update((void*)&desc); + fmt_->m_data.encModule_.update((void*)&desc); } void FastMonitoringService::postBeginJob() { @@ -421,20 +446,24 @@ namespace evf { std::string inputLegendStrJson = makeInputLegendaJson(); FileIO::writeStringToFile(inputLegendFileJson_, inputLegendStrJson); - macrostate_ = FastMonitoringThread::sJobReady; + std::string pathLegendStrJson = makePathLegendaJson(); + FileIO::writeStringToFile(pathLegendFileJson_, pathLegendStrJson); + + fmt_->m_data.macrostate_ = FastMonState::sJobReady; //update number of entries in module histogram - std::lock_guard lock(fmt_.monlock_); - fmt_.m_data.microstateBins_ = encModule_.vecsize(); + std::lock_guard lock(fmt_->monlock_); + //double the size to add post-acquire states + fmt_->m_data.microstateBins_ = fmt_->m_data.encModule_.vecsize() * 2; } void FastMonitoringService::postEndJob() { - macrostate_ = FastMonitoringThread::sJobEnded; - fmt_.stop(); + fmt_->m_data.macrostate_ = FastMonState::sJobEnded; + fmt_->stop(); } void FastMonitoringService::postGlobalBeginRun(edm::GlobalContext const& gc) { - macrostate_ = FastMonitoringThread::sRunning; + fmt_->m_data.macrostate_ = FastMonState::sRunning; isInitTransition_ = false; } @@ -444,7 +473,7 @@ namespace evf { unsigned int newLumi = gc.luminosityBlockID().luminosityBlock(); lastGlobalLumi_ = newLumi; - std::lock_guard lock(fmt_.monlock_); + std::lock_guard lock(fmt_->monlock_); lumiStartTime_[newLumi] = lumiStartTime; } @@ -454,7 +483,7 @@ namespace evf { timeval lumiStopTime; gettimeofday(&lumiStopTime, nullptr); - std::lock_guard lock(fmt_.monlock_); + std::lock_guard lock(fmt_->monlock_); // Compute throughput timeval stt = lumiStartTime_[lumi]; @@ -464,13 +493,13 @@ namespace evf { accuSize_.erase(lumi); double throughput = throughputFactor() * double(accuSize) / double(usecondsForLumi); //store to registered variable - fmt_.m_data.fastThroughputJ_.value() = throughput; + fmt_->m_data.fastThroughputJ_.value() = throughput; //update doSnapshot(lumi, true); //retrieve one result we need (todo: sanity check if it's found) - IntJ* lumiProcessedJptr = dynamic_cast(fmt_.jsonMonitor_->getMergedIntJForLumi("Processed", lumi)); + IntJ* lumiProcessedJptr = dynamic_cast(fmt_->jsonMonitor_->getMergedIntJForLumi("Processed", lumi)); if (!lumiProcessedJptr) throw cms::Exception("FastMonitoringService") << "Internal error: got null pointer from FastMonitor"; processedEventsPerLumi_[lumi] = std::pair(lumiProcessedJptr->value(), false); @@ -511,27 +540,28 @@ namespace evf { //full global and stream merge&output for this lumi // create file name for slow monitoring file + bool output = sleepTime_ > 0; if (filePerFwkStream_) { std::stringstream slowFileNameStem; slowFileNameStem << slowName_ << "_ls" << std::setfill('0') << std::setw(4) << lumi << "_pid" << std::setfill('0') << std::setw(5) << getpid(); std::filesystem::path slow = workingDirectory_; slow /= slowFileNameStem.str(); - fmt_.jsonMonitor_->outputFullJSONs(slow.string(), ".jsn", lumi); + fmt_->jsonMonitor_->outputFullJSONs(slow.string(), ".jsn", lumi, output); } else { std::stringstream slowFileName; slowFileName << slowName_ << "_ls" << std::setfill('0') << std::setw(4) << lumi << "_pid" << std::setfill('0') << std::setw(5) << getpid() << ".jsn"; std::filesystem::path slow = workingDirectory_; slow /= slowFileName.str(); - fmt_.jsonMonitor_->outputFullJSON(slow.string(), - lumi); //full global and stream merge and JSON write for this lumi + //full global and stream merge and JSON write for this lumi + fmt_->jsonMonitor_->outputFullJSON(slow.string(), lumi, output); } - fmt_.jsonMonitor_->discardCollected(lumi); //we don't do further updates for this lumi + fmt_->jsonMonitor_->discardCollected(lumi); //we don't do further updates for this lumi } void FastMonitoringService::postGlobalEndLumi(edm::GlobalContext const& gc) { - std::lock_guard lock(fmt_.monlock_); + std::lock_guard lock(fmt_->monlock_); unsigned int lumi = gc.luminosityBlockID().luminosityBlock(); //LS monitoring snapshot with input source data has been taken in previous callback avgLeadTime_.erase(lumi); @@ -545,112 +575,98 @@ namespace evf { void FastMonitoringService::preStreamBeginLumi(edm::StreamContext const& sc) { unsigned int sid = sc.streamID().value(); - std::lock_guard lock(fmt_.monlock_); - fmt_.m_data.streamLumi_[sid] = sc.eventID().luminosityBlock(); + std::lock_guard lock(fmt_->monlock_); + fmt_->m_data.streamLumi_[sid] = sc.eventID().luminosityBlock(); //reset collected values for this stream - *(fmt_.m_data.processed_[sid]) = 0; + *(fmt_->m_data.processed_[sid]) = 0; - ministate_[sid] = &nopath_; - microstate_[sid] = &reservedMicroStateNames[mBoL]; + fmt_->m_data.ministate_[sid] = &nopath_; + fmt_->m_data.microstate_[sid] = &reservedMicroStateNames[FastMonState::mBoL]; } void FastMonitoringService::postStreamBeginLumi(edm::StreamContext const& sc) { - microstate_[sc.streamID().value()] = &reservedMicroStateNames[mIdle]; + fmt_->m_data.microstate_[sc.streamID().value()] = &reservedMicroStateNames[FastMonState::mIdle]; } void FastMonitoringService::preStreamEndLumi(edm::StreamContext const& sc) { unsigned int sid = sc.streamID().value(); - std::lock_guard lock(fmt_.monlock_); + std::lock_guard lock(fmt_->monlock_); //update processed count to be complete at this time - doStreamEOLSnapshot(sc.eventID().luminosityBlock(), sid); + //doStreamEOLSnapshot(sc.eventID().luminosityBlock(), sid); + fmt_->jsonMonitor_->snapStreamAtomic(sc.eventID().luminosityBlock(), sid); //reset this in case stream does not get notified of next lumi (we keep processed events only) - ministate_[sid] = &nopath_; - microstate_[sid] = &reservedMicroStateNames[mEoL]; + fmt_->m_data.ministate_[sid] = &nopath_; + fmt_->m_data.microstate_[sid] = &reservedMicroStateNames[FastMonState::mEoL]; } void FastMonitoringService::postStreamEndLumi(edm::StreamContext const& sc) { - microstate_[sc.streamID().value()] = &reservedMicroStateNames[mFwkEoL]; + fmt_->m_data.microstate_[sc.streamID().value()] = &reservedMicroStateNames[FastMonState::mFwkEoL]; } void FastMonitoringService::prePathEvent(edm::StreamContext const& sc, edm::PathContext const& pc) { - //make sure that all path names are retrieved before allowing ministate to change - //hack: assume memory is synchronized after ~50 events seen by each stream - if (UNLIKELY(eventCountForPathInit_[sc.streamID()] < 50) && - false == collectedPathList_[sc.streamID()]->load(std::memory_order_acquire)) { - //protection between stream threads, as well as the service monitoring thread - std::lock_guard lock(fmt_.monlock_); - - if (firstEventId_[sc.streamID()] == 0) - firstEventId_[sc.streamID()] = sc.eventID().event(); - if (sc.eventID().event() == firstEventId_[sc.streamID()]) { - encPath_[sc.streamID()].update((void*)&pc.pathName()); - return; - } else { - //finished collecting path names - collectedPathList_[sc.streamID()]->store(true, std::memory_order_seq_cst); - fmt_.m_data.ministateBins_ = encPath_[sc.streamID()].vecsize(); - if (!pathLegendWritten_) { - std::string pathLegendStrJson = makePathLegendaJson(); - FileIO::writeStringToFile(pathLegendFileJson_, pathLegendStrJson); - pathLegendWritten_ = true; - } - } - } else { - ministate_[sc.streamID()] = &(pc.pathName()); - } + fmt_->m_data.ministate_[sc.streamID()] = &(pc.pathName()); } void FastMonitoringService::preEvent(edm::StreamContext const& sc) {} void FastMonitoringService::postEvent(edm::StreamContext const& sc) { - microstate_[sc.streamID()] = &reservedMicroStateNames[mIdle]; + fmt_->m_data.microstate_[sc.streamID()] = &reservedMicroStateNames[FastMonState::mIdle]; - ministate_[sc.streamID()] = &nopath_; + fmt_->m_data.ministate_[sc.streamID()] = &nopath_; - (*(fmt_.m_data.processed_[sc.streamID()]))++; - eventCountForPathInit_[sc.streamID()].m_value++; + (*(fmt_->m_data.processed_[sc.streamID()]))++; //fast path counter (events accumulated in a run) unsigned long res = totalEventsProcessed_.fetch_add(1, std::memory_order_relaxed); - fmt_.m_data.fastPathProcessedJ_ = res + 1; - //fmt_.m_data.fastPathProcessedJ_ = totalEventsProcessed_.load(std::memory_order_relaxed); + fmt_->m_data.fastPathProcessedJ_ = res + 1; } void FastMonitoringService::preSourceEvent(edm::StreamID sid) { - microstate_[sid.value()] = &reservedMicroStateNames[mInput]; + fmt_->m_data.microstate_[sid.value()] = &reservedMicroStateNames[FastMonState::mInput]; } void FastMonitoringService::postSourceEvent(edm::StreamID sid) { - microstate_[sid.value()] = &reservedMicroStateNames[mFwkOvhSrc]; + fmt_->m_data.microstate_[sid.value()] = &reservedMicroStateNames[FastMonState::mFwkOvhSrc]; + } + + void FastMonitoringService::preModuleEventAcquire(edm::StreamContext const& sc, + edm::ModuleCallingContext const& mcc) { + fmt_->m_data.microstate_[sc.streamID().value()] = (void*)(mcc.moduleDescription()); + } + + void FastMonitoringService::postModuleEventAcquire(edm::StreamContext const& sc, + edm::ModuleCallingContext const& mcc) { + //fmt_->m_data.microstate_[sc.streamID().value()] = (void*)(mcc.moduleDescription()); + fmt_->m_data.microstateAcqFlag_[sc.streamID().value()] = 1; } void FastMonitoringService::preModuleEvent(edm::StreamContext const& sc, edm::ModuleCallingContext const& mcc) { - microstate_[sc.streamID().value()] = (void*)(mcc.moduleDescription()); + fmt_->m_data.microstate_[sc.streamID().value()] = (void*)(mcc.moduleDescription()); + fmt_->m_data.microstateAcqFlag_[sc.streamID().value()] = 0; } void FastMonitoringService::postModuleEvent(edm::StreamContext const& sc, edm::ModuleCallingContext const& mcc) { - //microstate_[sc.streamID().value()] = (void*)(mcc.moduleDescription()); - microstate_[sc.streamID().value()] = &reservedMicroStateNames[mFwkOvhMod]; + fmt_->m_data.microstate_[sc.streamID().value()] = &reservedMicroStateNames[FastMonState::mFwkOvhMod]; } //FUNCTIONS CALLED FROM OUTSIDE //this is for old-fashioned service that is not thread safe and can block other streams //(we assume the worst case - everything is blocked) - void FastMonitoringService::setMicroState(MicroStateService::Microstate m) { + void FastMonitoringService::setMicroState(FastMonState::Microstate m) { for (unsigned int i = 0; i < nStreams_; i++) - microstate_[i] = &reservedMicroStateNames[m]; + fmt_->m_data.microstate_[i] = &reservedMicroStateNames[m]; } //this is for services that are multithreading-enabled or rarely blocks other streams - void FastMonitoringService::setMicroState(edm::StreamID sid, MicroStateService::Microstate m) { - microstate_[sid] = &reservedMicroStateNames[m]; + void FastMonitoringService::setMicroState(edm::StreamID sid, FastMonState::Microstate m) { + fmt_->m_data.microstate_[sid] = &reservedMicroStateNames[m]; } //from source void FastMonitoringService::accumulateFileSize(unsigned int lumi, unsigned long fileSize) { - std::lock_guard lock(fmt_.monlock_); + std::lock_guard lock(fmt_->monlock_); if (accuSize_.find(lumi) == accuSize_.end()) accuSize_[lumi] = fileSize; @@ -677,7 +693,7 @@ namespace evf { std::cout << "Stopped looking for .raw file at: s=" << fileLookStop_.tv_sec << ": ms = " << fileLookStop_.tv_usec / 1000.0 << std::endl; */ - std::lock_guard lock(fmt_.monlock_); + std::lock_guard lock(fmt_->monlock_); if (lumi > lumiFromSource_) { lumiFromSource_ = lumi; @@ -700,13 +716,13 @@ namespace evf { } void FastMonitoringService::reportLockWait(unsigned int ls, double waitTime, unsigned int lockCount) { - std::lock_guard lock(fmt_.monlock_); + std::lock_guard lock(fmt_->monlock_); lockStatsDuringLumi_[ls] = std::pair(waitTime, lockCount); } //for the output module unsigned int FastMonitoringService::getEventsProcessedForLumi(unsigned int lumi, bool* abortFlag) { - std::lock_guard lock(fmt_.monlock_); + std::lock_guard lock(fmt_->monlock_); auto it = processedEventsPerLumi_.find(lumi); if (it != processedEventsPerLumi_.end()) { @@ -724,7 +740,7 @@ namespace evf { //for the output module bool FastMonitoringService::getAbortFlagForLumi(unsigned int lumi) { - std::lock_guard lock(fmt_.monlock_); + std::lock_guard lock(fmt_->monlock_); auto it = processedEventsPerLumi_.find(lumi); if (it != processedEventsPerLumi_.end()) { @@ -738,172 +754,241 @@ namespace evf { } } + // the function to be called in the thread. Thread completes when function returns. + void FastMonitoringService::snapshotRunner() { + monInit_.exchange(true, std::memory_order_acquire); + while (!fmt_->m_stoprequest) { + std::vector> lastEnc; + { + std::lock_guard lock(fmt_->monlock_); + + doSnapshot(lastGlobalLumi_, false); + + lastEnc.emplace_back(fmt_->m_data.ministateEncoded_); + lastEnc.emplace_back(fmt_->m_data.microstateEncoded_); + + if (fastMonIntervals_ && (snapCounter_ % fastMonIntervals_) == 0) { + if (filePerFwkStream_) { + std::vector CSVv; + for (unsigned int i = 0; i < nStreams_; i++) { + CSVv.push_back(fmt_->jsonMonitor_->getCSVString((int)i)); + } + fmt_->monlock_.unlock(); + for (unsigned int i = 0; i < nStreams_; i++) { + if (!CSVv[i].empty()) + fmt_->jsonMonitor_->outputCSV(fastPathList_[i], CSVv[i]); + } + } else { + std::string CSV = fmt_->jsonMonitor_->getCSVString(); + //release mutex before writing out fast path file + fmt_->monlock_.unlock(); + if (!CSV.empty()) + fmt_->jsonMonitor_->outputCSV(fastPath_, CSV); + } + } + snapCounter_++; + } + + std::stringstream accum; + std::function)> f = [&](std::vector p) { + for (unsigned int i = 0; i < nStreams_; i++) { + if (i == 0) + accum << "[" << p[i] << ","; + else if (i <= nStreams_ - 1) + accum << p[i] << ","; + else + accum << p[i] << "]"; + } + }; + + accum << "Current states: Ms=" << fmt_->m_data.fastMacrostateJ_.value() << " ms="; + f(lastEnc[0]); + accum << " us="; + f(lastEnc[1]); + accum << " is=" << inputStateNames[inputState_] << " iss=" << inputStateNames[inputSupervisorState_]; + edm::LogInfo("FastMonitoringService") << accum.str(); + + ::sleep(sleepTime_); + } + } + void FastMonitoringService::doSnapshot(const unsigned int ls, const bool isGlobalEOL) { // update macrostate - fmt_.m_data.fastMacrostateJ_ = macrostate_; + fmt_->m_data.fastMacrostateJ_ = fmt_->m_data.macrostate_; - std::vector microstateCopy(microstate_.begin(), microstate_.end()); + std::vector microstateCopy(fmt_->m_data.microstate_.begin(), fmt_->m_data.microstate_.end()); + std::vector microstateAcqCopy(fmt_->m_data.microstateAcqFlag_.begin(), + fmt_->m_data.microstateAcqFlag_.end()); if (!isInitTransition_) { auto itd = avgLeadTime_.find(ls); if (itd != avgLeadTime_.end()) - fmt_.m_data.fastAvgLeadTimeJ_ = itd->second; + fmt_->m_data.fastAvgLeadTimeJ_ = itd->second; else - fmt_.m_data.fastAvgLeadTimeJ_ = 0.; + fmt_->m_data.fastAvgLeadTimeJ_ = 0.; auto iti = filesProcessedDuringLumi_.find(ls); if (iti != filesProcessedDuringLumi_.end()) - fmt_.m_data.fastFilesProcessedJ_ = iti->second; + fmt_->m_data.fastFilesProcessedJ_ = iti->second; else - fmt_.m_data.fastFilesProcessedJ_ = 0; + fmt_->m_data.fastFilesProcessedJ_ = 0; auto itrd = lockStatsDuringLumi_.find(ls); if (itrd != lockStatsDuringLumi_.end()) { - fmt_.m_data.fastLockWaitJ_ = itrd->second.first; - fmt_.m_data.fastLockCountJ_ = itrd->second.second; + fmt_->m_data.fastLockWaitJ_ = itrd->second.first; + fmt_->m_data.fastLockCountJ_ = itrd->second.second; } else { - fmt_.m_data.fastLockWaitJ_ = 0.; - fmt_.m_data.fastLockCountJ_ = 0.; + fmt_->m_data.fastLockWaitJ_ = 0.; + fmt_->m_data.fastLockCountJ_ = 0.; } } for (unsigned int i = 0; i < nStreams_; i++) { - fmt_.m_data.ministateEncoded_[i] = encPath_[i].encode(ministate_[i]); - fmt_.m_data.microstateEncoded_[i] = encModule_.encode(microstateCopy[i]); + fmt_->m_data.ministateEncoded_[i] = fmt_->m_data.encPath_[i].encodeString(fmt_->m_data.ministate_[i]); + if (microstateAcqCopy[i]) + fmt_->m_data.microstateEncoded_[i] = + fmt_->m_data.microstateBins_ + fmt_->m_data.encModule_.encode(microstateCopy[i]); + else + fmt_->m_data.microstateEncoded_[i] = fmt_->m_data.encModule_.encode(microstateCopy[i]); } bool inputStatePerThread = false; - if (inputState_ == FastMonitoringThread::inWaitInput) { + if (inputState_ == FastMonState::inWaitInput) { switch (inputSupervisorState_) { - case FastMonitoringThread::inSupFileLimit: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput_fileLimit; + case FastMonState::inSupFileLimit: + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput_fileLimit; break; - case FastMonitoringThread::inSupWaitFreeChunk: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput_waitFreeChunk; + case FastMonState::inSupWaitFreeChunk: + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput_waitFreeChunk; break; - case FastMonitoringThread::inSupWaitFreeChunkCopying: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput_waitFreeChunkCopying; + case FastMonState::inSupWaitFreeChunkCopying: + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput_waitFreeChunkCopying; break; - case FastMonitoringThread::inSupWaitFreeThread: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput_waitFreeThread; + case FastMonState::inSupWaitFreeThread: + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput_waitFreeThread; break; - case FastMonitoringThread::inSupWaitFreeThreadCopying: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput_waitFreeThreadCopying; + case FastMonState::inSupWaitFreeThreadCopying: + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput_waitFreeThreadCopying; break; - case FastMonitoringThread::inSupBusy: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput_busy; + case FastMonState::inSupBusy: + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput_busy; break; - case FastMonitoringThread::inSupLockPolling: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput_lockPolling; + case FastMonState::inSupLockPolling: + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput_lockPolling; break; - case FastMonitoringThread::inSupLockPollingCopying: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput_lockPollingCopying; + case FastMonState::inSupLockPollingCopying: + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput_lockPollingCopying; break; - case FastMonitoringThread::inRunEnd: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput_runEnd; + case FastMonState::inRunEnd: + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput_runEnd; break; - case FastMonitoringThread::inSupNoFile: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput_noFile; + case FastMonState::inSupNoFile: + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput_noFile; break; - case FastMonitoringThread::inSupNewFile: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput_newFile; + case FastMonState::inSupNewFile: + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput_newFile; break; - case FastMonitoringThread::inSupNewFileWaitThreadCopying: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput_newFileWaitThreadCopying; + case FastMonState::inSupNewFileWaitThreadCopying: + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput_newFileWaitThreadCopying; break; - case FastMonitoringThread::inSupNewFileWaitThread: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput_newFileWaitThread; + case FastMonState::inSupNewFileWaitThread: + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput_newFileWaitThread; break; - case FastMonitoringThread::inSupNewFileWaitChunkCopying: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput_newFileWaitChunkCopying; + case FastMonState::inSupNewFileWaitChunkCopying: + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput_newFileWaitChunkCopying; break; - case FastMonitoringThread::inSupNewFileWaitChunk: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput_newFileWaitChunk; + case FastMonState::inSupNewFileWaitChunk: + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput_newFileWaitChunk; break; default: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitInput; + fmt_->m_data.inputState_[0] = FastMonState::inWaitInput; } - } else if (inputState_ == FastMonitoringThread::inWaitChunk) { + } else if (inputState_ == FastMonState::inWaitChunk) { switch (inputSupervisorState_) { - case FastMonitoringThread::inSupFileLimit: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk_fileLimit; + case FastMonState::inSupFileLimit: + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk_fileLimit; break; - case FastMonitoringThread::inSupWaitFreeChunk: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk_waitFreeChunk; + case FastMonState::inSupWaitFreeChunk: + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk_waitFreeChunk; break; - case FastMonitoringThread::inSupWaitFreeChunkCopying: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk_waitFreeChunkCopying; + case FastMonState::inSupWaitFreeChunkCopying: + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk_waitFreeChunkCopying; break; - case FastMonitoringThread::inSupWaitFreeThread: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk_waitFreeThread; + case FastMonState::inSupWaitFreeThread: + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk_waitFreeThread; break; - case FastMonitoringThread::inSupWaitFreeThreadCopying: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk_waitFreeThreadCopying; + case FastMonState::inSupWaitFreeThreadCopying: + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk_waitFreeThreadCopying; break; - case FastMonitoringThread::inSupBusy: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk_busy; + case FastMonState::inSupBusy: + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk_busy; break; - case FastMonitoringThread::inSupLockPolling: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk_lockPolling; + case FastMonState::inSupLockPolling: + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk_lockPolling; break; - case FastMonitoringThread::inSupLockPollingCopying: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk_lockPollingCopying; + case FastMonState::inSupLockPollingCopying: + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk_lockPollingCopying; break; - case FastMonitoringThread::inRunEnd: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk_runEnd; + case FastMonState::inRunEnd: + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk_runEnd; break; - case FastMonitoringThread::inSupNoFile: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk_noFile; + case FastMonState::inSupNoFile: + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk_noFile; break; - case FastMonitoringThread::inSupNewFile: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk_newFile; + case FastMonState::inSupNewFile: + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk_newFile; break; - case FastMonitoringThread::inSupNewFileWaitThreadCopying: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk_newFileWaitThreadCopying; + case FastMonState::inSupNewFileWaitThreadCopying: + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk_newFileWaitThreadCopying; break; - case FastMonitoringThread::inSupNewFileWaitThread: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk_newFileWaitThread; + case FastMonState::inSupNewFileWaitThread: + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk_newFileWaitThread; break; - case FastMonitoringThread::inSupNewFileWaitChunkCopying: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk_newFileWaitChunkCopying; + case FastMonState::inSupNewFileWaitChunkCopying: + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk_newFileWaitChunkCopying; break; - case FastMonitoringThread::inSupNewFileWaitChunk: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk_newFileWaitChunk; + case FastMonState::inSupNewFileWaitChunk: + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk_newFileWaitChunk; break; default: - fmt_.m_data.inputState_[0] = FastMonitoringThread::inWaitChunk; + fmt_->m_data.inputState_[0] = FastMonState::inWaitChunk; } - } else if (inputState_ == FastMonitoringThread::inNoRequest) { + } else if (inputState_ == FastMonState::inNoRequest) { inputStatePerThread = true; for (unsigned int i = 0; i < nStreams_; i++) { - if (microstateCopy[i] == &reservedMicroStateNames[mIdle]) - fmt_.m_data.inputState_[i] = FastMonitoringThread::inNoRequestWithIdleThreads; - else if (microstateCopy[i] == &reservedMicroStateNames[mEoL] || - microstateCopy[i] == &reservedMicroStateNames[mFwkEoL]) - fmt_.m_data.inputState_[i] = FastMonitoringThread::inNoRequestWithEoLThreads; + if (microstateCopy[i] == &reservedMicroStateNames[FastMonState::mIdle]) + fmt_->m_data.inputState_[i] = FastMonState::inNoRequestWithIdleThreads; + else if (microstateCopy[i] == &reservedMicroStateNames[FastMonState::mEoL] || + microstateCopy[i] == &reservedMicroStateNames[FastMonState::mFwkEoL]) + fmt_->m_data.inputState_[i] = FastMonState::inNoRequestWithEoLThreads; else - fmt_.m_data.inputState_[i] = FastMonitoringThread::inNoRequest; + fmt_->m_data.inputState_[i] = FastMonState::inNoRequest; } - } else if (inputState_ == FastMonitoringThread::inNewLumi) { + } else if (inputState_ == FastMonState::inNewLumi) { inputStatePerThread = true; for (unsigned int i = 0; i < nStreams_; i++) { - if (microstateCopy[i] == &reservedMicroStateNames[mEoL] || - microstateCopy[i] == &reservedMicroStateNames[mFwkEoL]) - fmt_.m_data.inputState_[i] = FastMonitoringThread::inNewLumi; + if (microstateCopy[i] == &reservedMicroStateNames[FastMonState::mEoL] || + microstateCopy[i] == &reservedMicroStateNames[FastMonState::mFwkEoL]) + fmt_->m_data.inputState_[i] = FastMonState::inNewLumi; } } else - fmt_.m_data.inputState_[0] = inputState_; + fmt_->m_data.inputState_[0] = inputState_; //this is same for all streams if (!inputStatePerThread) for (unsigned int i = 1; i < nStreams_; i++) - fmt_.m_data.inputState_[i] = fmt_.m_data.inputState_[0]; + fmt_->m_data.inputState_[i] = fmt_->m_data.inputState_[0]; if (isGlobalEOL) { //only update global variables - fmt_.jsonMonitor_->snapGlobal(ls); + fmt_->jsonMonitor_->snapGlobal(ls); } else - fmt_.jsonMonitor_->snap(ls); + fmt_->jsonMonitor_->snap(ls); } + //compatibility + MicroStateService::MicroStateService(const edm::ParameterSet& iPS, edm::ActivityRegistry& reg) {} + + MicroStateService::~MicroStateService() {} + } //end namespace evf diff --git a/EventFilter/Utilities/src/FedRawDataInputSource.cc b/EventFilter/Utilities/src/FedRawDataInputSource.cc index 4109aa7a44994..a145898efb7c5 100644 --- a/EventFilter/Utilities/src/FedRawDataInputSource.cc +++ b/EventFilter/Utilities/src/FedRawDataInputSource.cc @@ -14,7 +14,6 @@ #include #include -#include #include "DataFormats/FEDRawData/interface/FEDHeader.h" #include "DataFormats/FEDRawData/interface/FEDTrailer.h" @@ -49,6 +48,8 @@ #include +using namespace evf::FastMonState; + FedRawDataInputSource::FedRawDataInputSource(edm::ParameterSet const& pset, edm::InputSourceDescription const& desc) : edm::RawInputSource(pset, desc), defPath_(pset.getUntrackedParameter("buDefPath", "")), @@ -146,8 +147,8 @@ FedRawDataInputSource::FedRawDataInputSource(edm::ParameterSet const& pset, edm: if (fms_) { daqDirector_->setFMS(fms_); fms_->setInputSource(this); - fms_->setInState(evf::FastMonitoringThread::inInit); - fms_->setInStateSup(evf::FastMonitoringThread::inInit); + fms_->setInState(inInit); + fms_->setInStateSup(inInit); } //should delete chunks when run stops for (unsigned int i = 0; i < numBuffers_; i++) { @@ -239,8 +240,7 @@ edm::RawInputSource::Next FedRawDataInputSource::checkNext() { //signal hltd to start event accounting if (!currentLumiSection_) daqDirector_->createProcessingNotificationMaybe(); - if (fms_) - fms_->setInState(evf::FastMonitoringThread::inWaitInput); + setMonState(inWaitInput); switch (nextEvent()) { case evf::EvFDaqDirector::runEnded: { //maybe create EoL file in working directory before ending run @@ -354,8 +354,7 @@ inline evf::EvFDaqDirector::FileStatus FedRawDataInputSource::getNextEvent() { threadError(); if (!currentFile_.get()) { evf::EvFDaqDirector::FileStatus status = evf::EvFDaqDirector::noFile; - if (fms_) - fms_->setInState(evf::FastMonitoringThread::inWaitInput); + setMonState(inWaitInput); if (!fileQueue_.try_pop(currentFile_)) { //sleep until wakeup (only in single-buffer mode) or timeout std::unique_lock lkw(mWakeup_); @@ -364,16 +363,14 @@ inline evf::EvFDaqDirector::FileStatus FedRawDataInputSource::getNextEvent() { } status = currentFile_->status_; if (status == evf::EvFDaqDirector::runEnded) { - if (fms_) - fms_->setInState(evf::FastMonitoringThread::inRunEnd); + setMonState(inRunEnd); currentFile_.reset(); return status; } else if (status == evf::EvFDaqDirector::runAbort) { throw cms::Exception("FedRawDataInputSource::getNextEvent") << "Run has been aborted by the input source reader thread"; } else if (status == evf::EvFDaqDirector::newLumi) { - if (fms_) - fms_->setInState(evf::FastMonitoringThread::inNewLumi); + setMonState(inNewLumi); if (getLSFromFilename_) { if (currentFile_->lumi_ > currentLumiSection_) { reportEventsThisLumiInSource(currentLumiSection_, eventsThisLumi_); @@ -390,8 +387,7 @@ inline evf::EvFDaqDirector::FileStatus FedRawDataInputSource::getNextEvent() { } else assert(false); } - if (fms_) - fms_->setInState(evf::FastMonitoringThread::inProcessingFile); + setMonState(inProcessingFile); //file is empty if (!currentFile_->fileSize_) { @@ -465,15 +461,13 @@ inline evf::EvFDaqDirector::FileStatus FedRawDataInputSource::getNextEvent() { } if (singleBufferMode_) { //should already be there - if (fms_) - fms_->setInState(evf::FastMonitoringThread::inWaitChunk); + setMonState(inWaitChunk); while (!currentFile_->waitForChunk(currentFile_->currentChunk_)) { usleep(10000); if (currentFile_->parent_->exceptionState() || setExceptionState_) currentFile_->parent_->threadError(); } - if (fms_) - fms_->setInState(evf::FastMonitoringThread::inChunkReceived); + setMonState(inChunkReceived); unsigned char* dataPosition = currentFile_->chunks_[0]->buf_ + currentFile_->chunkPosition_; @@ -526,15 +520,13 @@ inline evf::EvFDaqDirector::FileStatus FedRawDataInputSource::getNextEvent() { //multibuffer mode: else { //wait for the current chunk to become added to the vector - if (fms_) - fms_->setInState(evf::FastMonitoringThread::inWaitChunk); + setMonState(inWaitChunk); while (!currentFile_->waitForChunk(currentFile_->currentChunk_)) { usleep(10000); if (setExceptionState_) threadError(); } - if (fms_) - fms_->setInState(evf::FastMonitoringThread::inChunkReceived); + setMonState(inChunkReceived); //check if header is at the boundary of two chunks chunkIsFree_ = false; @@ -568,7 +560,13 @@ inline evf::EvFDaqDirector::FileStatus FedRawDataInputSource::getNextEvent() { //rewind to header start position currentFile_->rewindChunk(FRDHeaderVersionSize[detectedFRDversion_]); //copy event to a chunk start and move pointers + + setMonState(inWaitChunk); + chunkEnd = currentFile_->advance(dataPosition, FRDHeaderVersionSize[detectedFRDversion_] + msgSize); + + setMonState(inChunkReceived); + assert(chunkEnd); chunkIsFree_ = true; //header is moved @@ -581,8 +579,7 @@ inline evf::EvFDaqDirector::FileStatus FedRawDataInputSource::getNextEvent() { } } } //end multibuffer mode - if (fms_) - fms_->setInState(evf::FastMonitoringThread::inChecksumEvent); + setMonState(inChecksumEvent); if (verifyChecksum_ && event_->version() >= 5) { uint32_t crc = 0; @@ -606,8 +603,7 @@ inline evf::EvFDaqDirector::FileStatus FedRawDataInputSource::getNextEvent() { << adler; } } - if (fms_) - fms_->setInState(evf::FastMonitoringThread::inCachedEvent); + setMonState(inCachedEvent); currentFile_->nProcessed_++; @@ -615,8 +611,7 @@ inline evf::EvFDaqDirector::FileStatus FedRawDataInputSource::getNextEvent() { } void FedRawDataInputSource::read(edm::EventPrincipal& eventPrincipal) { - if (fms_) - fms_->setInState(evf::FastMonitoringThread::inReadEvent); + setMonState(inReadEvent); std::unique_ptr rawData(new FEDRawDataCollection); edm::Timestamp tstamp = fillFEDRawDataCollection(*rawData); @@ -654,8 +649,7 @@ void FedRawDataInputSource::read(edm::EventPrincipal& eventPrincipal) { eventPrincipal.put(daqProvenanceHelper_.branchDescription(), std::move(edp), daqProvenanceHelper_.dummyProvenance()); eventsThisLumi_++; - if (fms_) - fms_->setInState(evf::FastMonitoringThread::inReadCleanup); + setMonState(inReadCleanup); //resize vector if needed while (streamFileTracker_.size() <= eventPrincipal.streamID()) @@ -686,8 +680,7 @@ void FedRawDataInputSource::read(edm::EventPrincipal& eventPrincipal) { if (chunkIsFree_) freeChunks_.push(currentFile_->chunks_[currentFile_->currentChunk_ - 1]); chunkIsFree_ = false; - if (fms_) - fms_->setInState(evf::FastMonitoringThread::inNoRequest); + setMonState(inNoRequest); return; } @@ -777,17 +770,17 @@ void FedRawDataInputSource::readSupervisor() { if (j) copy_active = true; if (readingFilesCount_ >= maxBufferedFiles_) - fms_->setInStateSup(evf::FastMonitoringThread::inSupFileLimit); + setMonStateSup(inSupFileLimit); else if (freeChunks_.empty()) { if (copy_active) - fms_->setInStateSup(evf::FastMonitoringThread::inSupWaitFreeChunkCopying); + setMonStateSup(inSupWaitFreeChunkCopying); else - fms_->setInStateSup(evf::FastMonitoringThread::inSupWaitFreeChunk); + setMonStateSup(inSupWaitFreeChunk); } else { if (copy_active) - fms_->setInStateSup(evf::FastMonitoringThread::inSupWaitFreeThreadCopying); + setMonStateSup(inSupWaitFreeThreadCopying); else - fms_->setInStateSup(evf::FastMonitoringThread::inSupWaitFreeThread); + setMonStateSup(inSupWaitFreeThread); } } std::unique_lock lkw(mWakeup_); @@ -815,9 +808,9 @@ void FedRawDataInputSource::readSupervisor() { int64_t fileSizeFromMetadata; if (fms_) { - fms_->setInStateSup(evf::FastMonitoringThread::inSupBusy); + setMonStateSup(inSupBusy); fms_->startedLookingForFile(); - fms_->setInStateSup(evf::FastMonitoringThread::inSupLockPolling); + setMonStateSup(inSupLockPolling); } evf::EvFDaqDirector::FileStatus status = evf::EvFDaqDirector::noFile; @@ -872,8 +865,7 @@ void FedRawDataInputSource::readSupervisor() { thisLockWaitTimeUs); } - if (fms_) - fms_->setInStateSup(evf::FastMonitoringThread::inSupBusy); + setMonStateSup(inSupBusy); //cycle through all remaining LS even if no files get assigned if (currentLumiSection != ls && status == evf::EvFDaqDirector::runEnded) @@ -894,8 +886,7 @@ void FedRawDataInputSource::readSupervisor() { //check again for any remaining index/EoLS files after EoR file is seen if (status == evf::EvFDaqDirector::runEnded && !fileListMode_ && !useFileBroker_) { - if (fms_) - fms_->setInStateSup(evf::FastMonitoringThread::inRunEnd); + setMonStateSup(inRunEnd); usleep(100000); //now all files should have appeared in ramdisk, check again if any raw files were left behind status = daqDirector_->updateFuLock( @@ -923,7 +914,7 @@ void FedRawDataInputSource::readSupervisor() { if (ls > currentLumiSection) { if (!useFileBroker_) { //file locking - //fms_->setInStateSup(evf::FastMonitoringThread::inSupNewLumi); + //setMonStateSup(inSupNewLumi); currentLumiSection = ls; std::unique_ptr inf(new InputFile(evf::EvFDaqDirector::newLumi, currentLumiSection)); fileQueue_.push(std::move(inf)); @@ -970,8 +961,7 @@ void FedRawDataInputSource::readSupervisor() { int dbgcount = 0; if (status == evf::EvFDaqDirector::noFile) { - if (fms_) - fms_->setInStateSup(evf::FastMonitoringThread::inSupNoFile); + setMonStateSup(inSupNoFile); dbgcount++; if (!(dbgcount % 20)) LogDebug("FedRawDataInputSource") << "No file for me... sleep and try again..."; @@ -989,8 +979,7 @@ void FedRawDataInputSource::readSupervisor() { } //end of file grab loop, parse result if (status == evf::EvFDaqDirector::newFile) { - if (fms_) - fms_->setInStateSup(evf::FastMonitoringThread::inSupNewFile); + setMonStateSup(inSupNewFile); LogDebug("FedRawDataInputSource") << "The director says to grab -: " << nextFile; std::string rawFile; @@ -1012,9 +1001,9 @@ void FedRawDataInputSource::readSupervisor() { uint64_t fileSize = st.st_size; if (fms_) { - fms_->setInStateSup(evf::FastMonitoringThread::inSupBusy); + setMonStateSup(inSupBusy); fms_->stoppedLookingForFile(ls); - fms_->setInStateSup(evf::FastMonitoringThread::inSupNewFile); + setMonStateSup(inSupNewFile); } int eventsInNewFile; if (fileListMode_) { @@ -1069,9 +1058,9 @@ void FedRawDataInputSource::readSupervisor() { if (j) copy_active = true; if (copy_active) - fms_->setInStateSup(evf::FastMonitoringThread::inSupNewFileWaitThreadCopying); + setMonStateSup(inSupNewFileWaitThreadCopying); else - fms_->setInStateSup(evf::FastMonitoringThread::inSupNewFileWaitThread); + setMonStateSup(inSupNewFileWaitThread); } //get thread unsigned int newTid = 0xffffffff; @@ -1089,9 +1078,9 @@ void FedRawDataInputSource::readSupervisor() { if (j) copy_active = true; if (copy_active) - fms_->setInStateSup(evf::FastMonitoringThread::inSupNewFileWaitChunkCopying); + setMonStateSup(inSupNewFileWaitChunkCopying); else - fms_->setInStateSup(evf::FastMonitoringThread::inSupNewFileWaitChunk); + setMonStateSup(inSupNewFileWaitChunk); } InputChunk* newChunk = nullptr; while (!freeChunks_.try_pop(newChunk)) { @@ -1111,8 +1100,7 @@ void FedRawDataInputSource::readSupervisor() { } if (stop) break; - if (fms_) - fms_->setInStateSup(evf::FastMonitoringThread::inSupNewFile); + setMonStateSup(inSupNewFile); std::unique_lock lk(mReader_); @@ -1186,8 +1174,7 @@ void FedRawDataInputSource::readSupervisor() { } } } - if (fms_) - fms_->setInStateSup(evf::FastMonitoringThread::inRunEnd); + setMonStateSup(inRunEnd); //make sure threads finish reading unsigned numFinishedThreads = 0; while (numFinishedThreads < workerThreads_.size()) { @@ -1353,10 +1340,23 @@ void FedRawDataInputSource::threadError() { throw cms::Exception("FedRawDataInputSource:threadError") << " file reader thread error "; } +inline void FedRawDataInputSource::setMonState(evf::FastMonState::InputState state) { + if (fms_) + fms_->setInState(state); +} + +inline void FedRawDataInputSource::setMonStateSup(evf::FastMonState::InputState state) { + if (fms_) + fms_->setInStateSup(state); +} + inline bool InputFile::advance(unsigned char*& dataPosition, const size_t size) { //wait for chunk + while (!waitForChunk(currentChunk_)) { + parent_->setMonState(inWaitChunk); usleep(100000); + parent_->setMonState(inChunkReceived); if (parent_->exceptionState()) parent_->threadError(); } @@ -1367,7 +1367,9 @@ inline bool InputFile::advance(unsigned char*& dataPosition, const size_t size) if (currentLeft < size) { //we need next chunk while (!waitForChunk(currentChunk_ + 1)) { + parent_->setMonState(inWaitChunk); usleep(100000); + parent_->setMonState(inChunkReceived); if (parent_->exceptionState()) parent_->threadError(); } diff --git a/EventFilter/Utilities/src/MicroStateService.cc b/EventFilter/Utilities/src/MicroStateService.cc deleted file mode 100644 index e2b4585664903..0000000000000 --- a/EventFilter/Utilities/src/MicroStateService.cc +++ /dev/null @@ -1,23 +0,0 @@ -#include "EventFilter/Utilities/interface/MicroStateService.h" - -namespace evf { - - const edm::ModuleDescription MicroStateService::reservedMicroStateNames[mCOUNT] = { - edm::ModuleDescription("Dummy", "Invalid"), - edm::ModuleDescription("Dummy", "Idle"), - edm::ModuleDescription("Dummy", "FwkOvhSrc"), - edm::ModuleDescription("Dummy", "FwkOvhMod"), - edm::ModuleDescription("Dummy", "FwkEoL"), - edm::ModuleDescription("Dummy", "Input"), - edm::ModuleDescription("Dummy", "DQM"), - edm::ModuleDescription("Dummy", "BoL"), - edm::ModuleDescription("Dummy", "EoL"), - edm::ModuleDescription("Dummy", "GlobalEoL")}; - - const std::string MicroStateService::default_return_ = "NotImplemented"; - - MicroStateService::MicroStateService(const edm::ParameterSet& iPS, edm::ActivityRegistry& reg) {} - - MicroStateService::~MicroStateService() {} - -} //end namespace evf diff --git a/EventFilter/Utilities/src/MicroStateServiceClassic.cc b/EventFilter/Utilities/src/MicroStateServiceClassic.cc deleted file mode 100644 index ff395b12634a0..0000000000000 --- a/EventFilter/Utilities/src/MicroStateServiceClassic.cc +++ /dev/null @@ -1,79 +0,0 @@ -#include "EventFilter/Utilities/interface/MicroStateServiceClassic.h" - -namespace evf { - - MicroStateServiceClassic::MicroStateServiceClassic(const edm::ParameterSet& iPS, edm::ActivityRegistry& reg) - : MicroStateService(iPS, reg), - microstate2_(&(reservedMicroStateNames[MicroStateService::mInvalid].moduleLabel())) { - reg.watchPostBeginJob(this, &MicroStateServiceClassic::postBeginJob); - reg.watchPostEndJob(this, &MicroStateServiceClassic::postEndJob); - - reg.watchPreProcessEvent(this, &MicroStateServiceClassic::preEventProcessing); - reg.watchPostProcessEvent(this, &MicroStateServiceClassic::postEventProcessing); - reg.watchPreSourceEvent(this, &MicroStateServiceClassic::preSourceEvent); - reg.watchPostSourceEvent(this, &MicroStateServiceClassic::postSourceEvent); - - reg.watchPreModule(this, &MicroStateServiceClassic::preModule); - reg.watchPostModule(this, &MicroStateServiceClassic::postModule); - microstate1_ = "BJ"; - } - - MicroStateServiceClassic::~MicroStateServiceClassic() {} - - void MicroStateServiceClassic::postBeginJob() { - std::scoped_lock sl(lock_); - microstate1_ = "BJD"; - } - - void MicroStateServiceClassic::postEndJob() { - std::scoped_lock sl(lock_); - microstate1_ = "EJ"; - microstate2_ = &done; - } - - void MicroStateServiceClassic::preEventProcessing(const edm::EventID& iID, const edm::Timestamp& iTime) { - std::scoped_lock sl(lock_); - microstate1_ = "PRO"; - } - - void MicroStateServiceClassic::postEventProcessing(const edm::Event& e, const edm::EventSetup&) { - std::scoped_lock sl(lock_); - microstate2_ = &input; - } - - void MicroStateServiceClassic::preSourceEvent(edm::StreamID) { - std::scoped_lock sl(lock_); - microstate2_ = &input; - } - - void MicroStateServiceClassic::postSourceEvent(edm::StreamID) { - std::scoped_lock sl(lock_); - microstate2_ = &fwkovh; - } - - void MicroStateServiceClassic::preModule(const edm::ModuleDescription& desc) { - std::scoped_lock sl(lock_); - microstate2_ = &(desc.moduleLabel()); - } - - void MicroStateServiceClassic::postModule(const edm::ModuleDescription& desc) { - std::scoped_lock sl(lock_); - microstate2_ = &fwkovh; - } - - std::string MicroStateServiceClassic::getMicroState1() { - std::scoped_lock sl(lock_); - return microstate1_; - } - - std::string const& MicroStateServiceClassic::getMicroState2() { - std::scoped_lock sl(lock_); - return *microstate2_; - } - - void MicroStateServiceClassic::setMicroState(MicroStateService::Microstate m) { - std::scoped_lock sl(lock_); - microstate2_ = &(reservedMicroStateNames[m].moduleLabel()); - } - -} //end namespace evf diff --git a/EventFilter/Utilities/test/frdOutput.py b/EventFilter/Utilities/test/frdOutput.py new file mode 100644 index 0000000000000..de76aefea0861 --- /dev/null +++ b/EventFilter/Utilities/test/frdOutput.py @@ -0,0 +1,74 @@ +import FWCore.ParameterSet.Config as cms +import FWCore.ParameterSet.VarParsing as VarParsing +import os +import math + + +options = VarParsing.VarParsing ('analysis') + +options.register ('runNumber', + 100, # default value + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, # string, int, or float + "Run Number") + +options.register ('eventsPerLS', + 105, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, # string, int, or float + "Max LS to generate (0 to disable limit)") + +options.register ('fedMeanSize', + 1024, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, # string, int, or float + "Mean size of generated (fake) FED raw payload") + +options.register ('frdFileVersion', + 1, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, # string, int, or float + "Generate raw files with FRD file header with version 1 or separate JSON files with 0") + + + +options.parseArguments() + +process = cms.Process("RRDOUTPUT") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(options.eventsPerLS) +) + +process.MessageLogger = cms.Service("MessageLogger", + cout = cms.untracked.PSet(threshold = cms.untracked.string( "INFO" )), + destinations = cms.untracked.vstring( 'cout' ) +) + +process.source = cms.Source("EmptySource", + firstRun= cms.untracked.uint32(options.runNumber), + numberEventsInLuminosityBlock = cms.untracked.uint32(options.eventsPerLS), + numberEventsInRun = cms.untracked.uint32(0) +) + +process.a = cms.EDAnalyzer("ExceptionGenerator", + defaultAction = cms.untracked.int32(0), + defaultQualifier = cms.untracked.int32(0)) + +process.s = cms.EDProducer("DaqFakeReader", + meanSize = cms.untracked.uint32(options.fedMeanSize), + width = cms.untracked.uint32(int(math.ceil(options.fedMeanSize/2.))), + tcdsFEDID = cms.untracked.uint32(1024), + injectErrPpm = cms.untracked.uint32(0) + ) + +process.out = cms.OutputModule("FRDOutputModule", + source = cms.InputTag("s"), + frdVersion = cms.untracked.uint32(6), + frdFileVersion = cms.untracked.uint32(options.frdFileVersion), +# fileName = cms.untracked.string("frd_output.raw") + ) + +process.p = cms.Path(process.s+process.a) + +process.ep = cms.EndPath(process.out) diff --git a/EventFilter/Utilities/test/startBU.py b/EventFilter/Utilities/test/startBU.py index a42e287a1ee21..c827a6e5d3022 100644 --- a/EventFilter/Utilities/test/startBU.py +++ b/EventFilter/Utilities/test/startBU.py @@ -128,10 +128,10 @@ ) process.out = cms.OutputModule("RawStreamFileWriterForBU", - ProductLabel = cms.untracked.string("s"), - numEventsPerFile= cms.untracked.uint32(options.eventsPerFile), - frdFileVersion=cms.untracked.uint32(options.frdFileVersion), - frdVersion=cms.untracked.uint32(6), + source = cms.InputTag("s"), + numEventsPerFile = cms.uint32(options.eventsPerFile), + frdVersion = cms.uint32(6), + frdFileVersion = cms.uint32(options.frdFileVersion) ) process.p = cms.Path(process.s+process.a) diff --git a/FWCore/Catalog/test/FileLocator_t.cpp b/FWCore/Catalog/test/FileLocator_t.cpp index f56d1201c2d2f..28593833352c9 100644 --- a/FWCore/Catalog/test/FileLocator_t.cpp +++ b/FWCore/Catalog/test/FileLocator_t.cpp @@ -2,7 +2,7 @@ #include "FWCore/Catalog/interface/SiteLocalConfig.h" #include "FWCore/Utilities/interface/Exception.h" #include "FWCore/ServiceRegistry/interface/ServiceRegistry.h" -#include +#include #include @@ -46,7 +46,7 @@ TEST_CASE("FileLocator", "[filelocator]") { std::string CMSSW_BASE(std::getenv("CMSSW_BASE")); std::string CMSSW_RELEASE_BASE(std::getenv("CMSSW_RELEASE_BASE")); std::string file_name("/src/FWCore/Catalog/test/simple_catalog.xml"); - std::string full_file_name = boost::filesystem::exists((CMSSW_BASE + file_name).c_str()) + std::string full_file_name = std::filesystem::exists((CMSSW_BASE + file_name).c_str()) ? CMSSW_BASE + file_name : CMSSW_RELEASE_BASE + file_name; @@ -84,7 +84,7 @@ TEST_CASE("FileLocator", "[filelocator]") { edm::ServiceRegistry::Operate operate(tempToken); std::string override_file_name("/src/FWCore/Catalog/test/override_catalog.xml"); - std::string override_full_file_name = boost::filesystem::exists((CMSSW_BASE + override_file_name).c_str()) + std::string override_full_file_name = std::filesystem::exists((CMSSW_BASE + override_file_name).c_str()) ? CMSSW_BASE + override_file_name : CMSSW_RELEASE_BASE + override_file_name; diff --git a/FWCore/Common/interface/Provenance.h b/FWCore/Common/interface/Provenance.h index 7274f9c56b5b4..5e1da2b1ed88c 100644 --- a/FWCore/Common/interface/Provenance.h +++ b/FWCore/Common/interface/Provenance.h @@ -2,12 +2,12 @@ #define FWCore_Common_Provenance_h #include -#include "DataFormats/Provenance/interface/Provenance.h" +#include "DataFormats/Provenance/interface/StableProvenance.h" namespace edm { class ParameterSet; class ProcessHistory; - std::string moduleName(Provenance const& provenance, ProcessHistory const& history); - ParameterSet const& parameterSet(Provenance const& provenance, ProcessHistory const& history); + std::string moduleName(StableProvenance const& provenance, ProcessHistory const& history); + ParameterSet const& parameterSet(StableProvenance const& provenance, ProcessHistory const& history); } // namespace edm #endif diff --git a/FWCore/Common/interface/TriggerNames.h b/FWCore/Common/interface/TriggerNames.h index c6c5f000a485c..4b2d881dddf74 100644 --- a/FWCore/Common/interface/TriggerNames.h +++ b/FWCore/Common/interface/TriggerNames.h @@ -45,7 +45,7 @@ for names changing more often than by run even in real data. #include "DataFormats/Provenance/interface/ParameterSetID.h" #include -#include +#include #include namespace edm { @@ -54,14 +54,22 @@ namespace edm { class TriggerNames { public: - typedef std::vector Strings; - typedef std::map IndexMap; + using IndexMap = std::vector>; + using Strings = std::vector; // Users should not construct these. Instead they should // get a reference to the current one from the Event. See // comments above. - TriggerNames(); - TriggerNames(edm::ParameterSet const& pset); + TriggerNames() = default; + explicit TriggerNames(edm::ParameterSet const& pset); + + TriggerNames(TriggerNames const&); + TriggerNames(TriggerNames&&) = default; + TriggerNames& operator=(TriggerNames const&); + TriggerNames& operator=(TriggerNames&&) = default; + + // called as part of reading back object from ROOT storage + void initializeTriggerIndex(); Strings const& triggerNames() const; @@ -70,10 +78,10 @@ namespace edm { // If the input name is not known, this returns a value // equal to the size. - unsigned int triggerIndex(std::string const& name) const; + unsigned int triggerIndex(std::string_view name) const; // The number of trigger names. - Strings::size_type size() const; + std::size_t size() const; // Can be used to quickly compare two TriggerNames objects // to see whether or not they contain the same names. diff --git a/FWCore/Common/src/Provenance.cc b/FWCore/Common/src/Provenance.cc index 34a36c473053e..6af5f33b9be89 100644 --- a/FWCore/Common/src/Provenance.cc +++ b/FWCore/Common/src/Provenance.cc @@ -8,7 +8,7 @@ namespace edm { static std::string const source("source"); static std::string const triggerResultsInserter("TriggerResultsInserter"); - ParameterSet const& parameterSet(Provenance const& provenance, ProcessHistory const& history) { + ParameterSet const& parameterSet(StableProvenance const& provenance, ProcessHistory const& history) { ProcessConfiguration pc; history.getConfigurationForProcess(provenance.processName(), pc); ParameterSet const& processParameterSet = *pset::Registry::instance()->getMapped(pc.parameterSetID()); @@ -24,7 +24,7 @@ namespace edm { return processParameterSet.getParameterSet(label); } - std::string moduleName(Provenance const& provenance, ProcessHistory const& history) { + std::string moduleName(StableProvenance const& provenance, ProcessHistory const& history) { // Trigger results ia a special case if (provenance.moduleLabel() == triggerResults) { return triggerResultsInserter; diff --git a/FWCore/Common/src/TriggerNames.cc b/FWCore/Common/src/TriggerNames.cc index e1cd5d8b94b78..e08aa8cf43ba5 100644 --- a/FWCore/Common/src/TriggerNames.cc +++ b/FWCore/Common/src/TriggerNames.cc @@ -1,34 +1,62 @@ #include "FWCore/Common/interface/TriggerNames.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include +namespace { + struct PairSort { + bool operator()(std::pair const& iLHS, + std::pair const& iRHS) const { + return iLHS.first < iRHS.first; + } + bool operator()(std::string_view iLHS, std::pair const& iRHS) const { + return iLHS < iRHS.first; + } + bool operator()(std::pair const& iLHS, std::string_view iRHS) const { + return iLHS.first < iRHS; + } + }; +} // namespace namespace edm { - TriggerNames::TriggerNames() {} + TriggerNames::TriggerNames(edm::ParameterSet const& pset) + : psetID_{pset.id()}, triggerNames_{pset.getParameter("@trigger_paths")} { + initializeTriggerIndex(); + } - TriggerNames::TriggerNames(edm::ParameterSet const& pset) { - triggerNames_ = pset.getParameter("@trigger_paths"); + TriggerNames::TriggerNames(TriggerNames const& iOther) + : psetID_{iOther.psetID_}, triggerNames_{iOther.triggerNames_} { + initializeTriggerIndex(); + } + + TriggerNames& TriggerNames::operator=(TriggerNames const& iOther) { + TriggerNames temp(iOther); + *this = std::move(temp); + return *this; + } + void TriggerNames::initializeTriggerIndex() { unsigned int index = 0; - for (Strings::const_iterator iName = triggerNames_.begin(), iEnd = triggerNames_.end(); iName != iEnd; - ++iName, ++index) { - indexMap_[*iName] = index; + indexMap_.reserve(triggerNames_.size()); + for (auto const& name : triggerNames_) { + indexMap_.emplace_back(name, index); + ++index; } - psetID_ = pset.id(); + std::sort(indexMap_.begin(), indexMap_.end(), PairSort()); } TriggerNames::Strings const& TriggerNames::triggerNames() const { return triggerNames_; } std::string const& TriggerNames::triggerName(unsigned int index) const { return triggerNames_.at(index); } - unsigned int TriggerNames::triggerIndex(const std::string& name) const { - IndexMap::const_iterator const pos = indexMap_.find(name); - if (pos == indexMap_.end()) + unsigned int TriggerNames::triggerIndex(std::string_view name) const { + auto found = std::equal_range(indexMap_.begin(), indexMap_.end(), name, PairSort()); + if (found.first == found.second) return indexMap_.size(); - return pos->second; + return found.first->second; } - TriggerNames::Strings::size_type TriggerNames::size() const { return triggerNames_.size(); } + std::size_t TriggerNames::size() const { return triggerNames_.size(); } ParameterSetID const& TriggerNames::parameterSetID() const { return psetID_; } } // namespace edm diff --git a/FWCore/Common/src/classes_def.xml b/FWCore/Common/src/classes_def.xml index aa88ec655b24c..649a008684cf5 100644 --- a/FWCore/Common/src/classes_def.xml +++ b/FWCore/Common/src/classes_def.xml @@ -8,9 +8,16 @@ - + + + + + + newObj->initializeTriggerIndex(); + + diff --git a/FWCore/Common/test/BuildFile.xml b/FWCore/Common/test/BuildFile.xml new file mode 100644 index 0000000000000..2f472f3f1bbae --- /dev/null +++ b/FWCore/Common/test/BuildFile.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/FWCore/Common/test/test_catch2_TriggerNames.cc b/FWCore/Common/test/test_catch2_TriggerNames.cc new file mode 100644 index 0000000000000..e7a5264b5f31e --- /dev/null +++ b/FWCore/Common/test/test_catch2_TriggerNames.cc @@ -0,0 +1,140 @@ +#define CATCH_CONFIG_MAIN +#include "catch.hpp" +#include "FWCore/Common/interface/TriggerNames.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include + +TEST_CASE("Test TriggerNames", "[TriggerNames]") { + edm::ParameterSet pset; + const std::vector names = {{"b1"}, {"b2"}, {"a1"}, {"z5"}}; + pset.addParameter>("@trigger_paths", names); + pset.registerIt(); + + SECTION("Default constructed") { + edm::TriggerNames defaultConst; + + REQUIRE(defaultConst.size() == 0); + REQUIRE(defaultConst.triggerNames().empty()); + REQUIRE(defaultConst.triggerIndex("not here") == defaultConst.size()); + REQUIRE_THROWS_AS(defaultConst.triggerName(0), std::exception); + } + + SECTION("No names") { + edm::ParameterSet pset; + const std::vector names; + pset.addParameter>("@trigger_paths", names); + pset.registerIt(); + + edm::TriggerNames noNames(pset); + + REQUIRE(noNames.size() == 0); + REQUIRE(noNames.triggerNames().empty()); + REQUIRE(noNames.parameterSetID() == pset.id()); + REQUIRE(noNames.triggerIndex("not here") == noNames.size()); + REQUIRE_THROWS_AS(noNames.triggerName(0), std::exception); + } + + SECTION("multiple names") { + edm::TriggerNames tNames(pset); + + REQUIRE(tNames.size() == names.size()); + REQUIRE(tNames.triggerNames() == names); + REQUIRE(tNames.parameterSetID() == pset.id()); + REQUIRE(tNames.triggerIndex("not here") == tNames.size()); + REQUIRE(tNames.triggerIndex("b1") == 0); + REQUIRE(tNames.triggerIndex("b2") == 1); + REQUIRE(tNames.triggerIndex("a1") == 2); + REQUIRE(tNames.triggerIndex("z5") == 3); + REQUIRE(tNames.triggerName(0) == "b1"); + REQUIRE(tNames.triggerName(1) == "b2"); + REQUIRE(tNames.triggerName(2) == "a1"); + REQUIRE(tNames.triggerName(3) == "z5"); + REQUIRE_THROWS_AS(tNames.triggerName(names.size()), std::exception); + } + + SECTION("copy constructor") { + auto temp = std::make_unique(pset); + + edm::TriggerNames tNames(*temp); + temp.release(); + + REQUIRE(tNames.size() == names.size()); + REQUIRE(tNames.triggerNames() == names); + REQUIRE(tNames.parameterSetID() == pset.id()); + REQUIRE(tNames.triggerIndex("not here") == tNames.size()); + REQUIRE(tNames.triggerIndex("b1") == 0); + REQUIRE(tNames.triggerIndex("b2") == 1); + REQUIRE(tNames.triggerIndex("a1") == 2); + REQUIRE(tNames.triggerIndex("z5") == 3); + REQUIRE(tNames.triggerName(0) == "b1"); + REQUIRE(tNames.triggerName(1) == "b2"); + REQUIRE(tNames.triggerName(2) == "a1"); + REQUIRE(tNames.triggerName(3) == "z5"); + REQUIRE_THROWS_AS(tNames.triggerName(names.size()), std::exception); + } + + SECTION("move constructor") { + auto temp = std::make_unique(pset); + + edm::TriggerNames tNames(std::move(*temp)); + temp.release(); + + REQUIRE(tNames.size() == names.size()); + REQUIRE(tNames.triggerNames() == names); + REQUIRE(tNames.parameterSetID() == pset.id()); + REQUIRE(tNames.triggerIndex("not here") == tNames.size()); + REQUIRE(tNames.triggerIndex("b1") == 0); + REQUIRE(tNames.triggerIndex("b2") == 1); + REQUIRE(tNames.triggerIndex("a1") == 2); + REQUIRE(tNames.triggerIndex("z5") == 3); + REQUIRE(tNames.triggerName(0) == "b1"); + REQUIRE(tNames.triggerName(1) == "b2"); + REQUIRE(tNames.triggerName(2) == "a1"); + REQUIRE(tNames.triggerName(3) == "z5"); + REQUIRE_THROWS_AS(tNames.triggerName(names.size()), std::exception); + } + + SECTION("operator=") { + auto temp = std::make_unique(pset); + + edm::TriggerNames tNames; + tNames = (*temp); + temp.release(); + + REQUIRE(tNames.size() == names.size()); + REQUIRE(tNames.triggerNames() == names); + REQUIRE(tNames.parameterSetID() == pset.id()); + REQUIRE(tNames.triggerIndex("not here") == tNames.size()); + REQUIRE(tNames.triggerIndex("b1") == 0); + REQUIRE(tNames.triggerIndex("b2") == 1); + REQUIRE(tNames.triggerIndex("a1") == 2); + REQUIRE(tNames.triggerIndex("z5") == 3); + REQUIRE(tNames.triggerName(0) == "b1"); + REQUIRE(tNames.triggerName(1) == "b2"); + REQUIRE(tNames.triggerName(2) == "a1"); + REQUIRE(tNames.triggerName(3) == "z5"); + REQUIRE_THROWS_AS(tNames.triggerName(names.size()), std::exception); + } + + SECTION("operator= with move") { + auto temp = std::make_unique(pset); + + edm::TriggerNames tNames; + tNames = std::move(*temp); + temp.release(); + + REQUIRE(tNames.size() == names.size()); + REQUIRE(tNames.triggerNames() == names); + REQUIRE(tNames.parameterSetID() == pset.id()); + REQUIRE(tNames.triggerIndex("not here") == tNames.size()); + REQUIRE(tNames.triggerIndex("b1") == 0); + REQUIRE(tNames.triggerIndex("b2") == 1); + REQUIRE(tNames.triggerIndex("a1") == 2); + REQUIRE(tNames.triggerIndex("z5") == 3); + REQUIRE(tNames.triggerName(0) == "b1"); + REQUIRE(tNames.triggerName(1) == "b2"); + REQUIRE(tNames.triggerName(2) == "a1"); + REQUIRE(tNames.triggerName(3) == "z5"); + REQUIRE_THROWS_AS(tNames.triggerName(names.size()), std::exception); + } +} diff --git a/FWCore/Concurrency/interface/FunctorTask.h b/FWCore/Concurrency/interface/FunctorTask.h index bee041d435432..ae21de9449b8a 100644 --- a/FWCore/Concurrency/interface/FunctorTask.h +++ b/FWCore/Concurrency/interface/FunctorTask.h @@ -22,30 +22,27 @@ #include #include #include -#include "tbb/task.h" // user include files +#include "FWCore/Concurrency/interface/TaskBase.h" // forward declarations namespace edm { template - class FunctorTask : public tbb::task { + class FunctorTask : public TaskBase { public: explicit FunctorTask(F f) : func_(std::move(f)) {} - task* execute() override { - func_(); - return nullptr; - }; + void execute() final { func_(); }; private: F func_; }; - template - FunctorTask* make_functor_task(ALLOC&& iAlloc, F f) { - return new (iAlloc) FunctorTask(std::move(f)); + template + FunctorTask* make_functor_task(F f) { + return new FunctorTask(std::move(f)); } } // namespace edm diff --git a/FWCore/Concurrency/interface/LimitedTaskQueue.h b/FWCore/Concurrency/interface/LimitedTaskQueue.h index a95e76188c513..3a56536f26130 100644 --- a/FWCore/Concurrency/interface/LimitedTaskQueue.h +++ b/FWCore/Concurrency/interface/LimitedTaskQueue.h @@ -52,18 +52,7 @@ namespace edm { * \param[in] iAction Must be a functor that takes no arguments and return no values. */ template - void push(T&& iAction); - - /// synchronously pushes functor iAction into queue - /** - * The function will wait until iAction has completed before returning. - * If another task is already running on the queue, the system is allowed - * to find another TBB task to execute while waiting for the iAction to finish. - * In that way the core is not idled while waiting. - * \param[in] iAction Must be a functor that takes no arguments and return no values. - */ - template - void pushAndWait(T&& iAction); + void push(tbb::task_group& iGroup, T&& iAction); class Resumer { public: @@ -113,7 +102,7 @@ namespace edm { Using this function will decrease the allowed concurrency limit by 1. */ template - void pushAndPause(T&& iAction); + void pushAndPause(tbb::task_group& iGroup, T&& iAction); unsigned int concurrencyLimit() const { return m_queues.size(); } @@ -123,10 +112,10 @@ namespace edm { }; template - void LimitedTaskQueue::push(T&& iAction) { + void LimitedTaskQueue::push(tbb::task_group& iGroup, T&& iAction) { auto set_to_run = std::make_shared>(false); for (auto& q : m_queues) { - q.push([set_to_run, iAction]() mutable { + q.push(iGroup, [set_to_run, iAction]() mutable { bool expected = false; if (set_to_run->compare_exchange_strong(expected, true)) { iAction(); @@ -136,30 +125,10 @@ namespace edm { } template - void LimitedTaskQueue::pushAndWait(T&& iAction) { - tbb::empty_task* waitTask = new (tbb::task::allocate_root()) tbb::empty_task; - waitTask->set_ref_count(2); - auto set_to_run = std::make_shared>(false); - for (auto& q : m_queues) { - q.push([set_to_run, waitTask, iAction]() mutable { - bool expected = false; - if (set_to_run->compare_exchange_strong(expected, true)) { - // Exception needs to be caught in order to decrease the waitTask reference count at the end. The user of SerialTaskQueue should handle exceptions within iAction. - CMS_SA_ALLOW try { iAction(); } catch (...) { - } - waitTask->decrement_ref_count(); - } - }); - } - waitTask->wait_for_all(); - tbb::task::destroy(*waitTask); - } - - template - void LimitedTaskQueue::pushAndPause(T&& iAction) { + void LimitedTaskQueue::pushAndPause(tbb::task_group& iGroup, T&& iAction) { auto set_to_run = std::make_shared>(false); for (auto& q : m_queues) { - q.push([&q, set_to_run, iAction]() mutable { + q.push(iGroup, [&q, set_to_run, iAction]() mutable { bool expected = false; if (set_to_run->compare_exchange_strong(expected, true)) { q.pause(); diff --git a/FWCore/Concurrency/interface/SerialTaskQueue.h b/FWCore/Concurrency/interface/SerialTaskQueue.h index d72686a50ade0..0b200e0643c71 100644 --- a/FWCore/Concurrency/interface/SerialTaskQueue.h +++ b/FWCore/Concurrency/interface/SerialTaskQueue.h @@ -56,7 +56,7 @@ #include #include -#include "tbb/task.h" +#include "tbb/task_group.h" #include "tbb/concurrent_queue.h" #include "FWCore/Utilities/interface/thread_safety_macros.h" @@ -116,53 +116,33 @@ namespace edm { * \param[in] iAction Must be a functor that takes no arguments and return no values. */ template - void push(const T& iAction); - - /// synchronously pushes functor iAction into queue - /** - * The function will wait until iAction has completed before returning. - * If another task is already running on the queue, the system is allowed - * to find another TBB task to execute while waiting for the iAction to finish. - * In that way the core is not idled while waiting. - * \param[in] iAction Must be a functor that takes no arguments and return no values. - */ - template - void pushAndWait(const T& iAction); - - /// asynchronously pushes functor iAction into queue and finds next task to execute - /** - * This function is useful if you are accessing the SerialTaskQueue for the execute() - * method of a TBB task and want to efficiently schedule the next task from the queue. - * In that case you can take the return value and return it directly from your execute() method. - * The function will return immediately and not wait for iAction to run. - * \param[in] iAction Must be a functor that takes no arguments and return no values. - * \return Returns either the next task that the user must schedule with TBB or a nullptr. - */ - template - tbb::task* pushAndGetNextTaskToRun(const T& iAction); + void push(tbb::task_group&, const T& iAction); private: /** Base class for all tasks held by the SerialTaskQueue */ - class TaskBase : public tbb::task { + class TaskBase { friend class SerialTaskQueue; - TaskBase() : m_queue(nullptr) {} + + tbb::task_group* group() { return m_group; } + virtual void execute() = 0; + + public: + virtual ~TaskBase() = default; protected: - tbb::task* finishedTask(); + explicit TaskBase(tbb::task_group* iGroup) : m_group(iGroup) {} private: - void setQueue(SerialTaskQueue* iQueue) { m_queue = iQueue; } - - SerialTaskQueue* m_queue; + tbb::task_group* m_group; }; template class QueuedTask : public TaskBase { public: - QueuedTask(const T& iAction) : m_action(iAction) {} + QueuedTask(tbb::task_group& iGroup, const T& iAction) : TaskBase(&iGroup), m_action(iAction) {} private: - tbb::task* execute() override; + void execute() final; T m_action; }; @@ -170,12 +150,12 @@ namespace edm { friend class TaskBase; void pushTask(TaskBase*); - tbb::task* pushAndGetNextTask(TaskBase*); - tbb::task* finishedTask(); + TaskBase* pushAndGetNextTask(TaskBase*); + TaskBase* finishedTask(); //returns nullptr if a task is already being processed TaskBase* pickNextTask(); - void pushAndWait(tbb::empty_task* iWait, TaskBase*); + void spawn(TaskBase&); // ---------- member data -------------------------------- tbb::concurrent_queue m_tasks; @@ -184,36 +164,16 @@ namespace edm { }; template - void SerialTaskQueue::push(const T& iAction) { - QueuedTask* pTask{new (tbb::task::allocate_root()) QueuedTask{iAction}}; - pTask->setQueue(this); + void SerialTaskQueue::push(tbb::task_group& iGroup, const T& iAction) { + QueuedTask* pTask{new QueuedTask{iGroup, iAction}}; pushTask(pTask); } template - void SerialTaskQueue::pushAndWait(const T& iAction) { - tbb::empty_task* waitTask = new (tbb::task::allocate_root()) tbb::empty_task; - waitTask->set_ref_count(2); - QueuedTask* pTask{new (waitTask->allocate_child()) QueuedTask{iAction}}; - pTask->setQueue(this); - pushAndWait(waitTask, pTask); - } - - template - tbb::task* SerialTaskQueue::pushAndGetNextTaskToRun(const T& iAction) { - QueuedTask* pTask{new (tbb::task::allocate_root()) QueuedTask{iAction}}; - pTask->setQueue(this); - return pushAndGetNextTask(pTask); - } - - inline tbb::task* SerialTaskQueue::TaskBase::finishedTask() { return m_queue->finishedTask(); } - - template - tbb::task* SerialTaskQueue::QueuedTask::execute() { + void SerialTaskQueue::QueuedTask::execute() { // Exception has to swallowed in order to avoid throwing from execute(). The user of SerialTaskQueue should handle exceptions within m_action(). CMS_SA_ALLOW try { this->m_action(); } catch (...) { } - return this->finishedTask(); } } // namespace edm diff --git a/FWCore/Concurrency/interface/SerialTaskQueueChain.h b/FWCore/Concurrency/interface/SerialTaskQueueChain.h index dc5ea51ffc353..88bbb49a1c05a 100644 --- a/FWCore/Concurrency/interface/SerialTaskQueueChain.h +++ b/FWCore/Concurrency/interface/SerialTaskQueueChain.h @@ -54,18 +54,7 @@ namespace edm { * \param[in] iAction Must be a functor that takes no arguments and return no values. */ template - void push(T&& iAction); - - /// synchronously pushes functor iAction into queue - /** - * The function will wait until iAction has completed before returning. - * If another task is already running on the queue, the system is allowed - * to find another TBB task to execute while waiting for the iAction to finish. - * In that way the core is not idled while waiting. - * \param[in] iAction Must be a functor that takes no arguments and return no values. - */ - template - void pushAndWait(T&& iAction); + void push(tbb::task_group& iGroup, T&& iAction); unsigned long outstandingTasks() const { return m_outstandingTasks; } std::size_t numberOfQueues() const { return m_queues.size(); } @@ -76,61 +65,35 @@ namespace edm { std::atomic m_outstandingTasks{0}; template - void passDownChain(unsigned int iIndex, T&& iAction); + void passDownChain(unsigned int iIndex, tbb::task_group& iGroup, T&& iAction); template void actionToRun(T&& iAction); }; template - void SerialTaskQueueChain::push(T&& iAction) { + void SerialTaskQueueChain::push(tbb::task_group& iGroup, T&& iAction) { ++m_outstandingTasks; if (m_queues.size() == 1) { - m_queues[0]->push([this, iAction]() mutable { this->actionToRun(iAction); }); + m_queues[0]->push(iGroup, [this, iAction]() mutable { this->actionToRun(iAction); }); } else { assert(!m_queues.empty()); - m_queues[0]->push([this, iAction]() mutable { this->passDownChain(1, iAction); }); - } - } - - template - void SerialTaskQueueChain::pushAndWait(T&& iAction) { - auto destry = [](tbb::task* iTask) { tbb::task::destroy(*iTask); }; - - std::unique_ptr waitTask(new (tbb::task::allocate_root()) tbb::empty_task, destry); - waitTask->set_ref_count(3); - - std::exception_ptr ptr; - auto waitTaskPtr = waitTask.get(); - push([waitTaskPtr, iAction, &ptr]() { - //must wait until exception ptr would be set - auto dec = [](tbb::task* iTask) { iTask->decrement_ref_count(); }; - std::unique_ptr sentry(waitTaskPtr, dec); - // Caught exception is rethrown further below. - CMS_SA_ALLOW try { iAction(); } catch (...) { - ptr = std::current_exception(); - } - }); - - waitTask->decrement_ref_count(); - waitTask->wait_for_all(); - - if (ptr) { - std::rethrow_exception(ptr); + m_queues[0]->push(iGroup, [this, &iGroup, iAction]() mutable { this->passDownChain(1, iGroup, iAction); }); } } template - void SerialTaskQueueChain::passDownChain(unsigned int iQueueIndex, T&& iAction) { + void SerialTaskQueueChain::passDownChain(unsigned int iQueueIndex, tbb::task_group& iGroup, T&& iAction) { //Have to be sure the queue associated to this running task // does not attempt to start another task m_queues[iQueueIndex - 1]->pause(); //is this the last queue? if (iQueueIndex + 1 == m_queues.size()) { - m_queues[iQueueIndex]->push([this, iAction]() mutable { this->actionToRun(iAction); }); + m_queues[iQueueIndex]->push(iGroup, [this, iAction]() mutable { this->actionToRun(iAction); }); } else { auto nextQueue = iQueueIndex + 1; - m_queues[iQueueIndex]->push([this, nextQueue, iAction]() mutable { this->passDownChain(nextQueue, iAction); }); + m_queues[iQueueIndex]->push( + iGroup, [this, nextQueue, &iGroup, iAction]() mutable { this->passDownChain(nextQueue, iGroup, iAction); }); } } diff --git a/FWCore/Concurrency/interface/TaskBase.h b/FWCore/Concurrency/interface/TaskBase.h new file mode 100644 index 0000000000000..9c8aeb37d6d1c --- /dev/null +++ b/FWCore/Concurrency/interface/TaskBase.h @@ -0,0 +1,65 @@ +#ifndef FWCore_Concurrency_TaskBase_h +#define FWCore_Concurrency_TaskBase_h +// -*- C++ -*- +// +// Package: Concurrency +// Class : TaskBase +// +/**\class TaskBase TaskBase.h FWCore/Concurrency/interface/TaskBase.h + + Description: Base class for tasks. + + Usage: + Used as a callback to happen after a task has been completed. +*/ +// +// Original Author: Chris Jones +// Created: Tue Jan 5 13:46:31 CST 2020 +// $Id$ +// + +// system include files +#include +#include +#include + +// user include files + +// forward declarations + +namespace edm { + class TaskBase { + public: + friend class TaskSentry; + + ///Constructor + TaskBase() : m_refCount{0} {} + virtual ~TaskBase() = default; + + virtual void execute() = 0; + + void increment_ref_count() { ++m_refCount; } + unsigned int decrement_ref_count() { return --m_refCount; } + + private: + virtual void recycle() { delete this; } + + std::atomic m_refCount{0}; + }; + + class TaskSentry { + public: + TaskSentry(TaskBase* iTask) : m_task{iTask} {} + ~TaskSentry() { m_task->recycle(); } + TaskSentry() = delete; + TaskSentry(TaskSentry const&) = delete; + TaskSentry(TaskSentry&&) = delete; + TaskSentry operator=(TaskSentry const&) = delete; + TaskSentry operator=(TaskSentry&&) = delete; + + private: + TaskBase* m_task; + }; +} // namespace edm + +#endif diff --git a/FWCore/Concurrency/interface/WaitingTask.h b/FWCore/Concurrency/interface/WaitingTask.h index 905bcf5ac72df..fc8c81e48cd11 100644 --- a/FWCore/Concurrency/interface/WaitingTask.h +++ b/FWCore/Concurrency/interface/WaitingTask.h @@ -22,9 +22,9 @@ #include #include #include -#include "tbb/task.h" // user include files +#include "FWCore/Concurrency/interface/TaskBase.h" // forward declarations @@ -33,7 +33,7 @@ namespace edm { class WaitingTaskHolder; class WaitingTaskWithArenaHolder; - class WaitingTask : public tbb::task { + class WaitingTask : public TaskBase { public: friend class WaitingTaskList; friend class WaitingTaskHolder; @@ -69,23 +69,37 @@ namespace edm { std::atomic m_ptr; }; + /** Use this class on the stack to signal the final task to be run. + Call done() to check to see if the task was run and check value of + exceptionPtr() to see if an exception was thrown by any task in the group. + */ + class FinalWaitingTask : public WaitingTask { + public: + FinalWaitingTask() : m_done{false} {} + + void execute() final { m_done = true; } + + bool done() const { return m_done.load(); } + + private: + void recycle() final {} + std::atomic m_done; + }; + template class FunctorWaitingTask : public WaitingTask { public: explicit FunctorWaitingTask(F f) : func_(std::move(f)) {} - task* execute() override { - func_(exceptionPtr()); - return nullptr; - }; + void execute() final { func_(exceptionPtr()); }; private: F func_; }; - template - FunctorWaitingTask* make_waiting_task(ALLOC&& iAlloc, F f) { - return new (iAlloc) FunctorWaitingTask(std::move(f)); + template + FunctorWaitingTask* make_waiting_task(F f) { + return new FunctorWaitingTask(std::move(f)); } } // namespace edm diff --git a/FWCore/Concurrency/interface/WaitingTaskHolder.h b/FWCore/Concurrency/interface/WaitingTaskHolder.h index 35724bb4ca8e2..122110640942f 100644 --- a/FWCore/Concurrency/interface/WaitingTaskHolder.h +++ b/FWCore/Concurrency/interface/WaitingTaskHolder.h @@ -20,43 +20,61 @@ // system include files #include +#include "tbb/task_group.h" // user include files #include "FWCore/Concurrency/interface/WaitingTask.h" +#include "FWCore/Utilities/interface/thread_safety_macros.h" // forward declarations namespace edm { class WaitingTaskHolder { public: - WaitingTaskHolder() : m_task(nullptr) {} + friend class WaitingTaskList; + friend class WaitingTaskWithArenaHolder; - explicit WaitingTaskHolder(edm::WaitingTask* iTask) : m_task(iTask) { m_task->increment_ref_count(); } + WaitingTaskHolder() : m_task(nullptr), m_group(nullptr) {} + + explicit WaitingTaskHolder(tbb::task_group& iGroup, edm::WaitingTask* iTask) : m_task(iTask), m_group(&iGroup) { + m_task->increment_ref_count(); + } ~WaitingTaskHolder() { if (m_task) { doneWaiting(std::exception_ptr{}); } } - WaitingTaskHolder(const WaitingTaskHolder& iHolder) : m_task(iHolder.m_task) { m_task->increment_ref_count(); } + WaitingTaskHolder(const WaitingTaskHolder& iHolder) : m_task(iHolder.m_task), m_group(iHolder.m_group) { + m_task->increment_ref_count(); + } - WaitingTaskHolder(WaitingTaskHolder&& iOther) : m_task(iOther.m_task) { iOther.m_task = nullptr; } + WaitingTaskHolder(WaitingTaskHolder&& iOther) : m_task(iOther.m_task), m_group(iOther.m_group) { + iOther.m_task = nullptr; + } WaitingTaskHolder& operator=(const WaitingTaskHolder& iRHS) { WaitingTaskHolder tmp(iRHS); std::swap(m_task, tmp.m_task); + std::swap(m_group, tmp.m_group); return *this; } WaitingTaskHolder& operator=(WaitingTaskHolder&& iRHS) { WaitingTaskHolder tmp(std::move(iRHS)); std::swap(m_task, tmp.m_task); + std::swap(m_group, tmp.m_group); return *this; } // ---------- const member functions --------------------- - bool taskHasFailed() const { return m_task->exceptionPtr() != nullptr; } + bool taskHasFailed() const noexcept { return m_task->exceptionPtr() != nullptr; } + bool hasTask() const noexcept { return m_task != nullptr; } + /** since tbb::task_group is thread safe, we can return it non-const from here since + the object is not really part of the state of the holder + */ + CMS_SA_ALLOW tbb::task_group* group() const noexcept { return m_group; } // ---------- static member functions -------------------- // ---------- member functions --------------------------- @@ -76,20 +94,29 @@ namespace edm { if (iExcept) { m_task->dependentTaskFailed(iExcept); } - //spawn can run the task before we finish + //task_group::run can run the task before we finish // doneWaiting and some other thread might // try to reuse this object. Resetting // before spawn avoids problems auto task = m_task; m_task = nullptr; if (0 == task->decrement_ref_count()) { - tbb::task::spawn(*task); + m_group->run([task]() { + TaskSentry s{task}; + task->execute(); + }); } } private: + WaitingTask* release_no_decrement() noexcept { + auto t = m_task; + m_task = nullptr; + return t; + } // ---------- member data -------------------------------- WaitingTask* m_task; + tbb::task_group* m_group; }; } // namespace edm diff --git a/FWCore/Concurrency/interface/WaitingTaskList.h b/FWCore/Concurrency/interface/WaitingTaskList.h index 58eb1ba4081a0..37f1f49c61847 100644 --- a/FWCore/Concurrency/interface/WaitingTaskList.h +++ b/FWCore/Concurrency/interface/WaitingTaskList.h @@ -75,29 +75,12 @@ // user include files #include "FWCore/Concurrency/interface/WaitingTask.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Utilities/interface/thread_safety_macros.h" // forward declarations namespace edm { - class EmptyWaitingTask : public WaitingTask { - public: - EmptyWaitingTask() = default; - - tbb::task* execute() override { return nullptr; } - }; - - namespace waitingtask { - struct TaskDestroyer { - void operator()(tbb::task* iTask) const { tbb::task::destroy(*iTask); } - }; - } // namespace waitingtask - ///Create an EmptyWaitingTask which will properly be destroyed - inline std::unique_ptr make_empty_waiting_task() { - return std::unique_ptr(new (tbb::task::allocate_root()) - edm::EmptyWaitingTask{}); - } - class WaitingTaskList { public: ///Constructor @@ -120,12 +103,17 @@ namespace edm { void presetTaskAsFailed(std::exception_ptr iExcept); ///Adds task to the waiting list - /**If doneWaiting() has already been called then the added task will immediately be spawned. + /**If doneWaiting() has already been called then the added task will immediately be run. * If that is not the case then the task will be held until doneWaiting() is called and will - * then be spawned. + * then be run. * Calls to add() and doneWaiting() can safely be done concurrently. */ - void add(WaitingTask*); + void add(tbb::task_group*, WaitingTask*); + + ///Adds task to the waiting list + /**Calls to add() and doneWaiting() can safely be done concurrently. + */ + void add(WaitingTaskHolder); ///Signals that the resource is now available and tasks should be spawned /**The owner of the resource calls this function to allow the waiting tasks to @@ -145,13 +133,14 @@ namespace edm { void reset(); private: - /**Handles spawning the tasks, + /**Handles running the tasks, * safe to call from multiple threads */ void announce(); struct WaitNode { WaitingTask* m_task; + tbb::task_group* m_group; std::atomic m_next; bool m_fromCache; @@ -160,7 +149,7 @@ namespace edm { WaitNode* nextNode() const { return m_next; } }; - WaitNode* createNode(WaitingTask* iTask); + WaitNode* createNode(tbb::task_group* iGroup, WaitingTask* iTask); // ---------- member data -------------------------------- std::atomic m_head; diff --git a/FWCore/Concurrency/interface/WaitingTaskWithArenaHolder.h b/FWCore/Concurrency/interface/WaitingTaskWithArenaHolder.h index ccd99247e501e..9bc4568390952 100644 --- a/FWCore/Concurrency/interface/WaitingTaskWithArenaHolder.h +++ b/FWCore/Concurrency/interface/WaitingTaskWithArenaHolder.h @@ -23,6 +23,9 @@ #include #include "tbb/task_arena.h" +#include "tbb/task_group.h" + +#include "FWCore/Utilities/interface/thread_safety_macros.h" namespace edm { class WaitingTask; @@ -35,7 +38,11 @@ namespace edm { // Note that the arena will be the one containing the thread // that runs this constructor. This is the arena where you // eventually intend for the task to be spawned. - explicit WaitingTaskWithArenaHolder(WaitingTask* iTask); + explicit WaitingTaskWithArenaHolder(tbb::task_group&, WaitingTask* iTask); + + // Takes ownership of the underlying task and uses the current + // arena. + explicit WaitingTaskWithArenaHolder(WaitingTaskHolder&& iTask); ~WaitingTaskWithArenaHolder(); @@ -66,9 +73,19 @@ namespace edm { // the problem quickly). WaitingTaskHolder makeWaitingTaskHolderAndRelease(); + bool taskHasFailed() const noexcept; + + bool hasTask() const noexcept; + + /** since tbb::task_group is thread safe, we can return it non-const from here since + the object is not really part of the state of the holder + */ + CMS_SA_ALLOW tbb::task_group* group() const { return m_group; } + private: // ---------- member data -------------------------------- WaitingTask* m_task; + tbb::task_group* m_group; std::shared_ptr m_arena; }; @@ -83,10 +100,9 @@ namespace edm { }; } - template - auto make_waiting_task_with_holder(ALLOC&& iAlloc, WaitingTaskWithArenaHolder h, F&& f) { + template + auto make_waiting_task_with_holder(WaitingTaskWithArenaHolder h, F&& f) { return make_waiting_task( - std::forward(iAlloc), [holder = h, func = make_lambda_with_holder(h, std::forward(f))](std::exception_ptr const* excptr) mutable { if (excptr) { holder.doneWaiting(*excptr); diff --git a/FWCore/Concurrency/interface/include_first_syncWait.h b/FWCore/Concurrency/interface/include_first_syncWait.h new file mode 100644 index 0000000000000..6c180e88b62c5 --- /dev/null +++ b/FWCore/Concurrency/interface/include_first_syncWait.h @@ -0,0 +1,39 @@ +#ifndef FWCore_Concurrency_syncWait_h +#define FWCore_Concurrency_syncWait_h +// +// syncWait.h +// +// This file must be included before any other file that include tbb headers +// +// Created by Chris Jones on 2/24/21. +// +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" +#include "tbb/task_group.h" +#include "tbb/task.h" +#include + +namespace edm { + template + [[nodiscard]] std::exception_ptr syncWait(F&& iFunc) { + std::exception_ptr exceptPtr{}; + //tbb::task::suspend can only be run from within a task running in this arena. For 1 thread, + // it is often (always?) the case where not such task is being run here. Therefore we need + // to use a temp task_group to start up such a task. + tbb::task_group group; + group.run([&]() { + tbb::task::suspend([&](tbb::task::suspend_point tag) { + auto waitTask = make_waiting_task([tag, &exceptPtr](std::exception_ptr const* iExcept) { + if (iExcept) { + exceptPtr = *iExcept; + } + tbb::task::resume(tag); + }); + iFunc(WaitingTaskHolder(group, waitTask)); + }); //suspend + }); //group.run + + group.wait(); + return exceptPtr; + } +} // namespace edm +#endif /* FWCore_Concurrency_syncWait_h */ diff --git a/FWCore/Concurrency/src/SerialTaskQueue.cc b/FWCore/Concurrency/src/SerialTaskQueue.cc index 8804e7f4bf310..5c4bef539f1d4 100644 --- a/FWCore/Concurrency/src/SerialTaskQueue.cc +++ b/FWCore/Concurrency/src/SerialTaskQueue.cc @@ -12,6 +12,7 @@ // // system include files +#include "tbb/task.h" // user include files #include "FWCore/Concurrency/interface/SerialTaskQueue.h" @@ -28,15 +29,37 @@ SerialTaskQueue::~SerialTaskQueue() { bool isEmpty = m_tasks.empty(); bool isTaskChosen = m_taskChosen; if ((not isEmpty and not isPaused()) or isTaskChosen) { - pushAndWait([]() { return; }); + tbb::task_group g; + g.run([&g, this]() { + tbb::task::suspend( + [&g, this](tbb::task::suspend_point tag) { push(g, [tag]() { tbb::task::resume(tag); }); }); //suspend + }); //group run + g.wait(); } } +void SerialTaskQueue::spawn(TaskBase& iTask) { + auto pTask = &iTask; + iTask.group()->run([pTask, this]() { + TaskBase* t = pTask; + auto g = pTask->group(); + do { + t->execute(); + delete t; + t = finishedTask(); + if (t and t->group() != g) { + spawn(*t); + t = nullptr; + } + } while (t != nullptr); + }); +} + bool SerialTaskQueue::resume() { if (0 == --m_pauseCount) { - tbb::task* t = pickNextTask(); + auto t = pickNextTask(); if (nullptr != t) { - tbb::task::spawn(*t); + spawn(*t); } return true; } @@ -44,70 +67,48 @@ bool SerialTaskQueue::resume() { } void SerialTaskQueue::pushTask(TaskBase* iTask) { - tbb::task* t = pushAndGetNextTask(iTask); + auto t = pushAndGetNextTask(iTask); if (nullptr != t) { - tbb::task::spawn(*t); + spawn(*t); } } -tbb::task* SerialTaskQueue::pushAndGetNextTask(TaskBase* iTask) { - tbb::task* returnValue{nullptr}; - if - LIKELY(nullptr != iTask) { - m_tasks.push(iTask); - returnValue = pickNextTask(); - } +SerialTaskQueue::TaskBase* SerialTaskQueue::pushAndGetNextTask(TaskBase* iTask) { + TaskBase* returnValue{nullptr}; + if LIKELY (nullptr != iTask) { + m_tasks.push(iTask); + returnValue = pickNextTask(); + } return returnValue; } -tbb::task* SerialTaskQueue::finishedTask() { +SerialTaskQueue::TaskBase* SerialTaskQueue::finishedTask() { m_taskChosen.store(false); return pickNextTask(); } SerialTaskQueue::TaskBase* SerialTaskQueue::pickNextTask() { bool expect = false; - if - LIKELY(0 == m_pauseCount and m_taskChosen.compare_exchange_strong(expect, true)) { - TaskBase* t = nullptr; - if - LIKELY(m_tasks.try_pop(t)) { return t; } - //no task was actually pulled - m_taskChosen.store(false); - - //was a new entry added after we called 'try_pop' but before we did the clear? - expect = false; - if (not m_tasks.empty() and m_taskChosen.compare_exchange_strong(expect, true)) { - t = nullptr; - if (m_tasks.try_pop(t)) { - return t; - } - //no task was still pulled since a different thread beat us to it - m_taskChosen.store(false); - } + if LIKELY (0 == m_pauseCount and m_taskChosen.compare_exchange_strong(expect, true)) { + TaskBase* t = nullptr; + if LIKELY (m_tasks.try_pop(t)) { + return t; } - return nullptr; -} + //no task was actually pulled + m_taskChosen.store(false); -void SerialTaskQueue::pushAndWait(tbb::empty_task* iWait, TaskBase* iTask) { - auto nextTask = pushAndGetNextTask(iTask); - if - LIKELY(nullptr != nextTask) { - if - LIKELY(nextTask == iTask) { - //spawn and wait for all requires the task to have its parent set - iWait->spawn_and_wait_for_all(*nextTask); - } - else { - tbb::task::spawn(*nextTask); - iWait->wait_for_all(); + //was a new entry added after we called 'try_pop' but before we did the clear? + expect = false; + if (not m_tasks.empty() and m_taskChosen.compare_exchange_strong(expect, true)) { + t = nullptr; + if (m_tasks.try_pop(t)) { + return t; } + //no task was still pulled since a different thread beat us to it + m_taskChosen.store(false); } - else { - //a task must already be running in this queue - iWait->wait_for_all(); } - tbb::task::destroy(*iWait); + return nullptr; } // diff --git a/FWCore/Concurrency/src/WaitingTaskList.cc b/FWCore/Concurrency/src/WaitingTaskList.cc index 6b46d8d68c9cd..c8661fa7009a8 100644 --- a/FWCore/Concurrency/src/WaitingTaskList.cc +++ b/FWCore/Concurrency/src/WaitingTaskList.cc @@ -19,6 +19,7 @@ #include #include "FWCore/Concurrency/interface/WaitingTaskList.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Concurrency/interface/hardware_pause.h" #include "FWCore/Utilities/interface/Likely.h" @@ -68,7 +69,7 @@ void WaitingTaskList::reset() { m_waiting = true; } -WaitingTaskList::WaitNode* WaitingTaskList::createNode(WaitingTask* iTask) { +WaitingTaskList::WaitNode* WaitingTaskList::createNode(tbb::task_group* iGroup, WaitingTask* iTask) { unsigned int index = m_lastAssignedCacheIndex++; WaitNode* returnValue; @@ -79,6 +80,7 @@ WaitingTaskList::WaitNode* WaitingTaskList::createNode(WaitingTask* iTask) { returnValue->m_fromCache = false; } returnValue->m_task = iTask; + returnValue->m_group = iGroup; //No other thread can see m_next yet. The caller to create node // will be doing a synchronization operation anyway which will // make sure m_task and m_next are synched across threads @@ -87,17 +89,53 @@ WaitingTaskList::WaitNode* WaitingTaskList::createNode(WaitingTask* iTask) { return returnValue; } -void WaitingTaskList::add(WaitingTask* iTask) { +void WaitingTaskList::add(WaitingTaskHolder iTask) { + if (!m_waiting) { + if (m_exceptionPtr) { + iTask.doneWaiting(m_exceptionPtr); + } + } else { + auto task = iTask.release_no_decrement(); + WaitNode* newHead = createNode(iTask.group(), task); + //This exchange is sequentially consistent thereby + // ensuring ordering between it and setNextNode + WaitNode* oldHead = m_head.exchange(newHead); + newHead->setNextNode(oldHead); + + //For the case where oldHead != nullptr, + // even if 'm_waiting' changed, we don't + // have to recheck since we beat 'announce()' in + // the ordering of 'm_head.exchange' call so iTask + // is guaranteed to be in the link list + + if (nullptr == oldHead) { + newHead->setNextNode(nullptr); + if (!m_waiting) { + //if finished waiting right before we did the + // exchange our task will not be run. Also, + // additional threads may be calling add() and swapping + // heads and linking us to the new head. + // It is safe to call announce from multiple threads + announce(); + } + } + } +} + +void WaitingTaskList::add(tbb::task_group* iGroup, WaitingTask* iTask) { iTask->increment_ref_count(); if (!m_waiting) { if (UNLIKELY(bool(m_exceptionPtr))) { iTask->dependentTaskFailed(m_exceptionPtr); } if (0 == iTask->decrement_ref_count()) { - tbb::task::spawn(*iTask); + iGroup->run([iTask]() { + TaskSentry s{iTask}; + iTask->execute(); + }); } } else { - WaitNode* newHead = createNode(iTask); + WaitNode* newHead = createNode(iGroup, iTask); //This exchange is sequentially consistent thereby // ensuring ordering between it and setNextNode WaitNode* oldHead = m_head.exchange(newHead); @@ -112,7 +150,7 @@ void WaitingTaskList::add(WaitingTask* iTask) { if (nullptr == oldHead) { if (!m_waiting) { //if finished waiting right before we did the - // exchange our task will not be spawned. Also, + // exchange our task will not be run. Also, // additional threads may be calling add() and swapping // heads and linking us to the new head. // It is safe to call announce from multiple threads @@ -151,6 +189,7 @@ void WaitingTaskList::announce() { hardware_pause(); } auto t = n->m_task; + auto g = n->m_group; if (UNLIKELY(bool(m_exceptionPtr))) { t->dependentTaskFailed(m_exceptionPtr); } @@ -162,7 +201,10 @@ void WaitingTaskList::announce() { //the task may indirectly call WaitingTaskList::reset // so we need to call spawn after we are done using the node. if (0 == t->decrement_ref_count()) { - tbb::task::spawn(*t); + g->run([t]() { + TaskSentry s{t}; + t->execute(); + }); } } } diff --git a/FWCore/Concurrency/src/WaitingTaskWithArenaHolder.cc b/FWCore/Concurrency/src/WaitingTaskWithArenaHolder.cc index 830c487af17f3..5dd549a5f2ad1 100644 --- a/FWCore/Concurrency/src/WaitingTaskWithArenaHolder.cc +++ b/FWCore/Concurrency/src/WaitingTaskWithArenaHolder.cc @@ -18,11 +18,16 @@ namespace edm { // Note that the arena will be the one containing the thread // that runs this constructor. This is the arena where you // eventually intend for the task to be spawned. - WaitingTaskWithArenaHolder::WaitingTaskWithArenaHolder(WaitingTask* iTask) - : m_task(iTask), m_arena(std::make_shared(tbb::task_arena::attach())) { + WaitingTaskWithArenaHolder::WaitingTaskWithArenaHolder(tbb::task_group& iGroup, WaitingTask* iTask) + : m_task(iTask), m_group(&iGroup), m_arena(std::make_shared(tbb::task_arena::attach())) { m_task->increment_ref_count(); } + WaitingTaskWithArenaHolder::WaitingTaskWithArenaHolder(WaitingTaskHolder&& iTask) + : m_task(iTask.release_no_decrement()), + m_group(iTask.group()), + m_arena(std::make_shared(tbb::task_arena::attach())) {} + WaitingTaskWithArenaHolder::~WaitingTaskWithArenaHolder() { if (m_task) { doneWaiting(std::exception_ptr{}); @@ -30,20 +35,21 @@ namespace edm { } WaitingTaskWithArenaHolder::WaitingTaskWithArenaHolder(WaitingTaskWithArenaHolder const& iHolder) - : m_task(iHolder.m_task), m_arena(iHolder.m_arena) { + : m_task(iHolder.m_task), m_group(iHolder.m_group), m_arena(iHolder.m_arena) { if (LIKELY(m_task != nullptr)) { m_task->increment_ref_count(); } } WaitingTaskWithArenaHolder::WaitingTaskWithArenaHolder(WaitingTaskWithArenaHolder&& iOther) - : m_task(iOther.m_task), m_arena(std::move(iOther.m_arena)) { + : m_task(iOther.m_task), m_group(iOther.m_group), m_arena(std::move(iOther.m_arena)) { iOther.m_task = nullptr; } WaitingTaskWithArenaHolder& WaitingTaskWithArenaHolder::operator=(const WaitingTaskWithArenaHolder& iRHS) { WaitingTaskWithArenaHolder tmp(iRHS); std::swap(m_task, tmp.m_task); + std::swap(m_group, tmp.m_group); std::swap(m_arena, tmp.m_arena); return *this; } @@ -51,6 +57,7 @@ namespace edm { WaitingTaskWithArenaHolder& WaitingTaskWithArenaHolder::operator=(WaitingTaskWithArenaHolder&& iRHS) { WaitingTaskWithArenaHolder tmp(std::move(iRHS)); std::swap(m_task, tmp.m_task); + std::swap(m_group, tmp.m_group); std::swap(m_arena, tmp.m_arena); return *this; } @@ -72,7 +79,12 @@ namespace edm { if (0 == task->decrement_ref_count()) { // The enqueue call will cause a worker thread to be created in // the arena if there is not one already. - m_arena->enqueue([task = task]() { tbb::task::spawn(*task); }); + m_arena->enqueue([task = task, group = m_group]() { + group->run([task]() { + TaskSentry s(task); + task->execute(); + }); + }); } } @@ -89,9 +101,14 @@ namespace edm { // the problem quickly). WaitingTaskHolder WaitingTaskWithArenaHolder::makeWaitingTaskHolderAndRelease() { - WaitingTaskHolder holder(m_task); + WaitingTaskHolder holder(*m_group, m_task); m_task->decrement_ref_count(); m_task = nullptr; return holder; } + + bool WaitingTaskWithArenaHolder::taskHasFailed() const noexcept { return m_task->exceptionPtr() != nullptr; } + + bool WaitingTaskWithArenaHolder::hasTask() const noexcept { return m_task != nullptr; } + } // namespace edm diff --git a/FWCore/Concurrency/test/limitedtaskqueue_t.cppunit.cpp b/FWCore/Concurrency/test/limitedtaskqueue_t.cppunit.cpp index 0c0134d10bf87..36efe5bfd2d01 100644 --- a/FWCore/Concurrency/test/limitedtaskqueue_t.cppunit.cpp +++ b/FWCore/Concurrency/test/limitedtaskqueue_t.cppunit.cpp @@ -11,21 +11,20 @@ #include #include #include -#include "tbb/task.h" +#include "tbb/task_arena.h" +#include "FWCore/Concurrency/interface/WaitingTask.h" #include "FWCore/Concurrency/interface/LimitedTaskQueue.h" #include "FWCore/Concurrency/interface/FunctorTask.h" class LimitedTaskQueue_test : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(LimitedTaskQueue_test); CPPUNIT_TEST(testPush); - CPPUNIT_TEST(testPushAndWait); CPPUNIT_TEST(testPause); CPPUNIT_TEST(stressTest); CPPUNIT_TEST_SUITE_END(); public: void testPush(); - void testPushAndWait(); void testPause(); void stressTest(); void setUp() {} @@ -40,30 +39,30 @@ void LimitedTaskQueue_test::testPush() { edm::LimitedTaskQueue queue{1}; { - std::shared_ptr waitTask{new (tbb::task::allocate_root()) tbb::empty_task{}, - [](tbb::task* iTask) { tbb::task::destroy(*iTask); }}; - waitTask->set_ref_count(1 + 3); - tbb::task* pWaitTask = waitTask.get(); + std::atomic waitingTasks{3}; + tbb::task_group group; - queue.push([&count, pWaitTask] { + queue.push(group, [&count, &waitingTasks] { CPPUNIT_ASSERT(count++ == 0); usleep(10); - pWaitTask->decrement_ref_count(); + --waitingTasks; }); - queue.push([&count, pWaitTask] { + queue.push(group, [&count, &waitingTasks] { CPPUNIT_ASSERT(count++ == 1); usleep(10); - pWaitTask->decrement_ref_count(); + --waitingTasks; }); - queue.push([&count, pWaitTask] { + queue.push(group, [&count, &waitingTasks] { CPPUNIT_ASSERT(count++ == 2); usleep(10); - pWaitTask->decrement_ref_count(); + --waitingTasks; }); - waitTask->wait_for_all(); + do { + group.wait(); + } while (0 != waitingTasks.load()); CPPUNIT_ASSERT(count == 3); } } @@ -74,147 +73,80 @@ void LimitedTaskQueue_test::testPush() { constexpr unsigned int kMax = 2; edm::LimitedTaskQueue queue{kMax}; { - std::shared_ptr waitTask{new (tbb::task::allocate_root()) tbb::empty_task{}, - [](tbb::task* iTask) { tbb::task::destroy(*iTask); }}; - waitTask->set_ref_count(1 + 3); - tbb::task* pWaitTask = waitTask.get(); + std::atomic waitingTasks{3}; + tbb::task_group group; - queue.push([&count, pWaitTask] { + queue.push(group, [&count, &waitingTasks] { CPPUNIT_ASSERT(count++ < kMax); usleep(10); --count; - pWaitTask->decrement_ref_count(); + --waitingTasks; }); - queue.push([&count, pWaitTask] { + queue.push(group, [&count, &waitingTasks] { CPPUNIT_ASSERT(count++ < kMax); usleep(10); --count; - pWaitTask->decrement_ref_count(); + --waitingTasks; }); - queue.push([&count, pWaitTask] { + queue.push(group, [&count, &waitingTasks] { CPPUNIT_ASSERT(count++ < kMax); usleep(10); --count; - pWaitTask->decrement_ref_count(); + --waitingTasks; }); - waitTask->wait_for_all(); + do { + group.wait(); + } while (0 != waitingTasks); CPPUNIT_ASSERT(count == 0); } } } -void LimitedTaskQueue_test::testPushAndWait() { - { - std::atomic count{0}; - - edm::LimitedTaskQueue queue{1}; - { - queue.push([&count] { - CPPUNIT_ASSERT(count++ == 0); - usleep(10); - }); - - queue.push([&count] { - CPPUNIT_ASSERT(count++ == 1); - usleep(10); - }); - - queue.pushAndWait([&count] { - CPPUNIT_ASSERT(count++ == 2); - usleep(10); - }); - - CPPUNIT_ASSERT(count == 3); - } - } - - { - std::atomic count{0}; - std::atomic countTasksRun{0}; - constexpr unsigned int kMax = 2; - - edm::LimitedTaskQueue queue{kMax}; - { - queue.pushAndWait([&count, &countTasksRun] { - CPPUNIT_ASSERT(count++ < kMax); - usleep(10); - --count; - CPPUNIT_ASSERT(1 == ++countTasksRun); - }); - - queue.pushAndWait([&count, &countTasksRun] { - CPPUNIT_ASSERT(count++ < kMax); - usleep(10); - --count; - CPPUNIT_ASSERT(2 == ++countTasksRun); - }); - - queue.pushAndWait([&count, &countTasksRun] { - CPPUNIT_ASSERT(count++ < kMax); - usleep(10); - --count; - CPPUNIT_ASSERT(3 == ++countTasksRun); - }); - - auto c = count.load(); - if (c != 0) { - std::cout << "ERROR count " << c << " != 0" << std::endl; - } - CPPUNIT_ASSERT(count == 0); - - auto v = countTasksRun.load(); - if (v != 3) { - std::cout << "ERROR # tasks Run " << v << " != 3" << std::endl; - } - CPPUNIT_ASSERT(v == 3); - } - } -} void LimitedTaskQueue_test::testPause() { std::atomic count{0}; edm::LimitedTaskQueue queue{1}; { { - std::shared_ptr waitTask{new (tbb::task::allocate_root()) tbb::empty_task{}, - [](tbb::task* iTask) { tbb::task::destroy(*iTask); }}; - waitTask->set_ref_count(1 + 3); - tbb::task* pWaitTask = waitTask.get(); + std::atomic waitingTasks{3}; + tbb::task_group group; + edm::LimitedTaskQueue::Resumer resumer; std::atomic resumerSet{false}; std::exception_ptr e1; - queue.pushAndPause([&resumer, &resumerSet, &count, pWaitTask, &e1](edm::LimitedTaskQueue::Resumer iResumer) { - resumer = std::move(iResumer); - resumerSet = true; - try { - CPPUNIT_ASSERT(++count == 1); - } catch (...) { - e1 = std::current_exception(); - } - pWaitTask->decrement_ref_count(); - }); + queue.pushAndPause(group, + [&resumer, &resumerSet, &count, &waitingTasks, &e1](edm::LimitedTaskQueue::Resumer iResumer) { + resumer = std::move(iResumer); + resumerSet = true; + try { + CPPUNIT_ASSERT(++count == 1); + } catch (...) { + e1 = std::current_exception(); + } + --waitingTasks; + }); std::exception_ptr e2; - queue.push([&count, pWaitTask, &e2] { + queue.push(group, [&count, &waitingTasks, &e2] { try { CPPUNIT_ASSERT(++count == 2); } catch (...) { e2 = std::current_exception(); } - pWaitTask->decrement_ref_count(); + --waitingTasks; }); std::exception_ptr e3; - queue.push([&count, pWaitTask, &e3] { + queue.push(group, [&count, &waitingTasks, &e3] { try { CPPUNIT_ASSERT(++count == 3); } catch (...) { e3 = std::current_exception(); } - pWaitTask->decrement_ref_count(); + --waitingTasks; }); usleep(100); //can't do == since the queue may not have processed the first task yet @@ -222,7 +154,9 @@ void LimitedTaskQueue_test::testPause() { while (not resumerSet) { } CPPUNIT_ASSERT(resumer.resume()); - waitTask->wait_for_all(); + do { + group.wait(); + } while (0 != waitingTasks.load()); CPPUNIT_ASSERT(count == 3); if (e1) { std::rethrow_exception(e1); @@ -238,31 +172,28 @@ void LimitedTaskQueue_test::testPause() { } void LimitedTaskQueue_test::stressTest() { + //NOTE: group needs to last longer than queue + tbb::task_group group; + constexpr unsigned int kMax = 3; edm::LimitedTaskQueue queue{kMax}; unsigned int index = 100; const unsigned int nTasks = 1000; while (0 != --index) { - std::shared_ptr waitTask{new (tbb::task::allocate_root()) tbb::empty_task{}, - [](tbb::task* iTask) { tbb::task::destroy(*iTask); }}; - waitTask->set_ref_count(3); - tbb::task* pWaitTask = waitTask.get(); + std::atomic waiting{1}; std::atomic count{0}; std::atomic nRunningTasks{0}; std::atomic waitToStart{true}; { - auto j = edm::make_functor_task(tbb::task::allocate_root(), [&queue, &waitToStart, pWaitTask, &count, &nRunningTasks] { - //gcc 4.7 doesn't preserve the 'atomic' nature of waitToStart in the loop - while (waitToStart.load()) { - __sync_synchronize(); + group.run([&queue, &waitToStart, &group, &waiting, &count, &nRunningTasks] { + while (waitToStart) { }; - std::shared_ptr guard{pWaitTask, [](tbb::task* iTask) { iTask->decrement_ref_count(); }}; for (unsigned int i = 0; i < nTasks; ++i) { - pWaitTask->increment_ref_count(); - queue.push([&count, pWaitTask, &nRunningTasks] { - std::shared_ptr guardAgain{pWaitTask, [](tbb::task* iTask) { iTask->decrement_ref_count(); }}; + ++waiting; + queue.push(group, [&count, &waiting, &nRunningTasks] { + std::shared_ptr> guardAgain{&waiting, [](auto* v) { --(*v); }}; auto nrt = nRunningTasks++; if (nrt >= kMax) { std::cout << "ERROR " << nRunningTasks << " >= " << kMax << std::endl; @@ -273,25 +204,28 @@ void LimitedTaskQueue_test::stressTest() { }); } }); - tbb::task::enqueue(*j); - waitToStart = false; - for (unsigned int i = 0; i < nTasks; ++i) { - pWaitTask->increment_ref_count(); - queue.push([&count, pWaitTask, &nRunningTasks] { - std::shared_ptr guard{pWaitTask, [](tbb::task* iTask) { iTask->decrement_ref_count(); }}; - auto nrt = nRunningTasks++; - if (nrt >= kMax) { - std::cout << "ERROR " << nRunningTasks << " >= " << kMax << std::endl; - } - CPPUNIT_ASSERT(nrt < kMax); - ++count; - --nRunningTasks; - }); - } - pWaitTask->decrement_ref_count(); + group.run([&queue, &waitToStart, &group, &waiting, &count, &nRunningTasks] { + waitToStart = false; + for (unsigned int i = 0; i < nTasks; ++i) { + ++waiting; + queue.push(group, [&count, &waiting, &nRunningTasks] { + std::shared_ptr> guardAgain{&waiting, [](auto* v) { --(*v); }}; + auto nrt = nRunningTasks++; + if (nrt >= kMax) { + std::cout << "ERROR " << nRunningTasks << " >= " << kMax << std::endl; + } + CPPUNIT_ASSERT(nrt < kMax); + ++count; + --nRunningTasks; + }); + } + --waiting; + }); } - waitTask->wait_for_all(); + do { + group.wait(); + } while (0 != waiting.load()); CPPUNIT_ASSERT(0 == nRunningTasks); CPPUNIT_ASSERT(2 * nTasks == count); diff --git a/FWCore/Concurrency/test/serialtaskqueue_t.cppunit.cpp b/FWCore/Concurrency/test/serialtaskqueue_t.cppunit.cpp index e15057db697ee..5ad46347d9f8d 100644 --- a/FWCore/Concurrency/test/serialtaskqueue_t.cppunit.cpp +++ b/FWCore/Concurrency/test/serialtaskqueue_t.cppunit.cpp @@ -11,21 +11,20 @@ #include #include #include -#include "tbb/task.h" +#include "tbb/task_arena.h" +#include "FWCore/Concurrency/interface/WaitingTask.h" #include "FWCore/Concurrency/interface/SerialTaskQueue.h" #include "FWCore/Concurrency/interface/FunctorTask.h" class SerialTaskQueue_test : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(SerialTaskQueue_test); CPPUNIT_TEST(testPush); - CPPUNIT_TEST(testPushAndWait); CPPUNIT_TEST(testPause); CPPUNIT_TEST(stressTest); CPPUNIT_TEST_SUITE_END(); public: void testPush(); - void testPushAndWait(); void testPause(); void stressTest(); void setUp() {} @@ -39,54 +38,30 @@ void SerialTaskQueue_test::testPush() { edm::SerialTaskQueue queue; { - std::shared_ptr waitTask{new (tbb::task::allocate_root()) tbb::empty_task{}, - [](tbb::task* iTask) { tbb::task::destroy(*iTask); }}; - waitTask->set_ref_count(1 + 3); - tbb::task* pWaitTask = waitTask.get(); + std::atomic waitingTasks{3}; + tbb::task_group group; - queue.push([&count, pWaitTask] { + queue.push(group, [&count, &waitingTasks] { CPPUNIT_ASSERT(count++ == 0); usleep(10); - pWaitTask->decrement_ref_count(); + --waitingTasks; }); - queue.push([&count, pWaitTask] { + queue.push(group, [&count, &waitingTasks] { CPPUNIT_ASSERT(count++ == 1); usleep(10); - pWaitTask->decrement_ref_count(); + --waitingTasks; }); - queue.push([&count, pWaitTask] { - CPPUNIT_ASSERT(count++ == 2); - usleep(10); - pWaitTask->decrement_ref_count(); - }); - - waitTask->wait_for_all(); - CPPUNIT_ASSERT(count == 3); - } -} - -void SerialTaskQueue_test::testPushAndWait() { - std::atomic count{0}; - - edm::SerialTaskQueue queue; - { - queue.push([&count] { - CPPUNIT_ASSERT(count++ == 0); - usleep(10); - }); - - queue.push([&count] { - CPPUNIT_ASSERT(count++ == 1); - usleep(10); - }); - - queue.pushAndWait([&count] { + queue.push(group, [&count, &waitingTasks] { CPPUNIT_ASSERT(count++ == 2); usleep(10); + --waitingTasks; }); + do { + group.wait(); + } while (0 != waitingTasks.load()); CPPUNIT_ASSERT(count == 3); } } @@ -98,93 +73,93 @@ void SerialTaskQueue_test::testPause() { { queue.pause(); { - std::shared_ptr waitTask{new (tbb::task::allocate_root()) tbb::empty_task{}, - [](tbb::task* iTask) { tbb::task::destroy(*iTask); }}; - waitTask->set_ref_count(1 + 1); - tbb::task* pWaitTask = waitTask.get(); + std::atomic waitingTasks{1}; + tbb::task_group group; - queue.push([&count, pWaitTask] { + queue.push(group, [&count, &waitingTasks] { CPPUNIT_ASSERT(count++ == 0); - pWaitTask->decrement_ref_count(); + --waitingTasks; }); usleep(1000); CPPUNIT_ASSERT(0 == count); queue.resume(); - waitTask->wait_for_all(); + do { + group.wait(); + } while (0 != waitingTasks.load()); CPPUNIT_ASSERT(count == 1); } { - std::shared_ptr waitTask{new (tbb::task::allocate_root()) tbb::empty_task{}, - [](tbb::task* iTask) { tbb::task::destroy(*iTask); }}; - waitTask->set_ref_count(1 + 3); - tbb::task* pWaitTask = waitTask.get(); + std::atomic waitingTasks{3}; + tbb::task_group group; - queue.push([&count, &queue, pWaitTask] { + queue.push(group, [&count, &queue, &waitingTasks] { queue.pause(); CPPUNIT_ASSERT(count++ == 1); - pWaitTask->decrement_ref_count(); + --waitingTasks; }); - queue.push([&count, pWaitTask] { + queue.push(group, [&count, &waitingTasks] { CPPUNIT_ASSERT(count++ == 2); - pWaitTask->decrement_ref_count(); + --waitingTasks; }); - queue.push([&count, pWaitTask] { + queue.push(group, [&count, &waitingTasks] { CPPUNIT_ASSERT(count++ == 3); - pWaitTask->decrement_ref_count(); + --waitingTasks; }); usleep(100); //can't do == since the queue may not have processed the first task yet CPPUNIT_ASSERT(2 >= count); queue.resume(); - waitTask->wait_for_all(); + do { + group.wait(); + } while (0 != waitingTasks.load()); CPPUNIT_ASSERT(count == 4); } } } void SerialTaskQueue_test::stressTest() { + //note group needs to live longer than queue + tbb::task_group group; edm::SerialTaskQueue queue; unsigned int index = 100; const unsigned int nTasks = 1000; while (0 != --index) { - std::shared_ptr waitTask{new (tbb::task::allocate_root()) tbb::empty_task{}, - [](tbb::task* iTask) { tbb::task::destroy(*iTask); }}; - waitTask->set_ref_count(3); - tbb::task* pWaitTask = waitTask.get(); + std::atomic waitingTasks{2}; std::atomic count{0}; std::atomic waitToStart{true}; { - auto j = edm::make_functor_task(tbb::task::allocate_root(), [&queue, &waitToStart, pWaitTask, &count] { - //gcc 4.7 doesn't preserve the 'atomic' nature of waitToStart in the loop + group.run([&queue, &waitToStart, &waitingTasks, &count, &group] { while (waitToStart.load()) { - __sync_synchronize(); - }; + } for (unsigned int i = 0; i < nTasks; ++i) { - pWaitTask->increment_ref_count(); - queue.push([&count, pWaitTask] { + ++waitingTasks; + queue.push(group, [&count, &waitingTasks] { ++count; - pWaitTask->decrement_ref_count(); + --waitingTasks; }); } - pWaitTask->decrement_ref_count(); + --waitingTasks; + }); + + group.run([&queue, &waitToStart, &waitingTasks, &count, &group] { + waitToStart = false; + for (unsigned int i = 0; i < nTasks; ++i) { + ++waitingTasks; + queue.push(group, [&count, &waitingTasks] { + ++count; + --waitingTasks; + }); + } + --waitingTasks; }); - tbb::task::enqueue(*j); - - waitToStart = false; - for (unsigned int i = 0; i < nTasks; ++i) { - pWaitTask->increment_ref_count(); - queue.push([&count, pWaitTask] { - ++count; - pWaitTask->decrement_ref_count(); - }); - } - pWaitTask->decrement_ref_count(); } - waitTask->wait_for_all(); + do { + group.wait(); + } while (0 != waitingTasks.load()); CPPUNIT_ASSERT(2 * nTasks == count); } diff --git a/FWCore/Concurrency/test/serialtaskqueuechain_t.cppunit.cpp b/FWCore/Concurrency/test/serialtaskqueuechain_t.cppunit.cpp index 6fda4d8092f09..b25506cf2fb52 100644 --- a/FWCore/Concurrency/test/serialtaskqueuechain_t.cppunit.cpp +++ b/FWCore/Concurrency/test/serialtaskqueuechain_t.cppunit.cpp @@ -20,16 +20,12 @@ class SerialTaskQueueChain_test : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(SerialTaskQueueChain_test); CPPUNIT_TEST(testPush); CPPUNIT_TEST(testPushOne); - CPPUNIT_TEST(testPushAndWait); - CPPUNIT_TEST(testPushAndWaitOne); CPPUNIT_TEST(stressTest); CPPUNIT_TEST_SUITE_END(); public: void testPush(); void testPushOne(); - void testPushAndWait(); - void testPushAndWaitOne(); void stressTest(); void setUp() {} void tearDown() {} @@ -44,30 +40,29 @@ void SerialTaskQueueChain_test::testPush() { std::make_shared()}; edm::SerialTaskQueueChain chain(queues); { - std::shared_ptr waitTask{new (tbb::task::allocate_root()) tbb::empty_task{}, - [](tbb::task* iTask) { tbb::task::destroy(*iTask); }}; - waitTask->set_ref_count(1 + 3); - tbb::task* pWaitTask = waitTask.get(); - - chain.push([&count, pWaitTask] { + tbb::task_group group; + std::atomic waiting{3}; + chain.push(group, [&count, &waiting] { CPPUNIT_ASSERT(count++ == 0); usleep(10); - pWaitTask->decrement_ref_count(); + --waiting; }); - chain.push([&count, pWaitTask] { + chain.push(group, [&count, &waiting] { CPPUNIT_ASSERT(count++ == 1); usleep(10); - pWaitTask->decrement_ref_count(); + --waiting; }); - chain.push([&count, pWaitTask] { + chain.push(group, [&count, &waiting] { CPPUNIT_ASSERT(count++ == 2); usleep(10); - pWaitTask->decrement_ref_count(); + --waiting; }); - waitTask->wait_for_all(); + do { + group.wait(); + } while (0 != waiting.load()); CPPUNIT_ASSERT(count == 3); while (chain.outstandingTasks() != 0) ; @@ -80,91 +75,36 @@ void SerialTaskQueueChain_test::testPushOne() { std::vector> queues = {std::make_shared()}; edm::SerialTaskQueueChain chain(queues); { - std::shared_ptr waitTask{new (tbb::task::allocate_root()) tbb::empty_task{}, - [](tbb::task* iTask) { tbb::task::destroy(*iTask); }}; - waitTask->set_ref_count(1 + 3); - tbb::task* pWaitTask = waitTask.get(); + tbb::task_group group; + std::atomic waiting{3}; - chain.push([&count, pWaitTask] { + chain.push(group, [&count, &waiting] { CPPUNIT_ASSERT(count++ == 0); usleep(10); - pWaitTask->decrement_ref_count(); + --waiting; }); - chain.push([&count, pWaitTask] { + chain.push(group, [&count, &waiting] { CPPUNIT_ASSERT(count++ == 1); usleep(10); - pWaitTask->decrement_ref_count(); + --waiting; }); - chain.push([&count, pWaitTask] { + chain.push(group, [&count, &waiting] { CPPUNIT_ASSERT(count++ == 2); usleep(10); - pWaitTask->decrement_ref_count(); + --waiting; }); - waitTask->wait_for_all(); + do { + group.wait(); + } while (0 != waiting.load()); CPPUNIT_ASSERT(count == 3); while (chain.outstandingTasks() != 0) ; } } -void SerialTaskQueueChain_test::testPushAndWait() { - std::atomic count{0}; - - std::vector> queues = {std::make_shared(), - std::make_shared()}; - edm::SerialTaskQueueChain chain(queues); - { - chain.push([&count] { - CPPUNIT_ASSERT(count++ == 0); - usleep(10); - }); - - chain.push([&count] { - CPPUNIT_ASSERT(count++ == 1); - usleep(10); - }); - - chain.pushAndWait([&count] { - CPPUNIT_ASSERT(count++ == 2); - usleep(10); - }); - - CPPUNIT_ASSERT(count == 3); - } - while (chain.outstandingTasks() != 0) - ; -} - -void SerialTaskQueueChain_test::testPushAndWaitOne() { - std::atomic count{0}; - - std::vector> queues = {std::make_shared()}; - edm::SerialTaskQueueChain chain(queues); - { - chain.push([&count] { - CPPUNIT_ASSERT(count++ == 0); - usleep(10); - }); - - chain.push([&count] { - CPPUNIT_ASSERT(count++ == 1); - usleep(10); - }); - - chain.pushAndWait([&count] { - CPPUNIT_ASSERT(count++ == 2); - usleep(10); - }); - - CPPUNIT_ASSERT(count == 3); - } - while (chain.outstandingTasks() != 0) - ; -} - namespace { void join_thread(std::thread* iThread) { if (iThread->joinable()) { @@ -182,40 +122,39 @@ void SerialTaskQueueChain_test::stressTest() { unsigned int index = 100; const unsigned int nTasks = 1000; while (0 != --index) { - std::shared_ptr waitTask{new (tbb::task::allocate_root()) tbb::empty_task{}, - [](tbb::task* iTask) { tbb::task::destroy(*iTask); }}; - waitTask->set_ref_count(3); - tbb::task* pWaitTask = waitTask.get(); + tbb::task_group group; + std::atomic waiting{2}; std::atomic count{0}; std::atomic waitToStart{true}; { - std::thread pushThread([&chain, &waitToStart, pWaitTask, &count] { + std::thread pushThread([&chain, &waitToStart, &waiting, &group, &count] { while (waitToStart.load()) { }; for (unsigned int i = 0; i < nTasks; ++i) { - pWaitTask->increment_ref_count(); - chain.push([&count, pWaitTask] { + ++waiting; + chain.push(group, [&count, &waiting] { ++count; - pWaitTask->decrement_ref_count(); + --waiting; }); } - - pWaitTask->decrement_ref_count(); + --waiting; }); waitToStart = false; for (unsigned int i = 0; i < nTasks; ++i) { - pWaitTask->increment_ref_count(); - chain.push([&count, pWaitTask] { + ++waiting; + chain.push(group, [&count, &waiting] { ++count; - pWaitTask->decrement_ref_count(); + --waiting; }); } - pWaitTask->decrement_ref_count(); + --waiting; std::shared_ptr(&pushThread, join_thread); } - waitTask->wait_for_all(); + do { + group.wait(); + } while (0 != waiting.load()); CPPUNIT_ASSERT(2 * nTasks == count); } diff --git a/FWCore/Concurrency/test/waitingtasklist_t.cppunit.cpp b/FWCore/Concurrency/test/waitingtasklist_t.cppunit.cpp index 4f8fa89bc2d1e..d97ed7ba18535 100644 --- a/FWCore/Concurrency/test/waitingtasklist_t.cppunit.cpp +++ b/FWCore/Concurrency/test/waitingtasklist_t.cppunit.cpp @@ -15,10 +15,6 @@ #include "tbb/task.h" #include "FWCore/Concurrency/interface/WaitingTaskList.h" -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) -#define CXX_THREAD_AVAILABLE -#endif - class WaitingTaskList_test : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(WaitingTaskList_test); CPPUNIT_TEST(addThenDone); @@ -43,12 +39,12 @@ namespace { public: TestCalledTask(std::atomic& iCalled, std::exception_ptr& iPtr) : m_called(iCalled), m_ptr(iPtr) {} - tbb::task* execute() { + void execute() final { if (exceptionPtr()) { m_ptr = *exceptionPtr(); } m_called = true; - return nullptr; + return; } private: @@ -59,9 +55,9 @@ namespace { class TestValueSetTask : public edm::WaitingTask { public: TestValueSetTask(std::atomic& iValue) : m_value(iValue) {} - tbb::task* execute() { + void execute() final { CPPUNIT_ASSERT(m_value); - return nullptr; + return; } private: @@ -77,20 +73,16 @@ void WaitingTaskList_test::addThenDone() { { std::exception_ptr excPtr; - auto waitTask = edm::make_empty_waiting_task(); - waitTask->set_ref_count(2); - //NOTE: allocate_child does NOT increment the ref_count of waitTask! - auto t = new (waitTask->allocate_child()) TestCalledTask{called, excPtr}; + auto t = new TestCalledTask{called, excPtr}; - waitList.add(t); + tbb::task_group group; + waitList.add(edm::WaitingTaskHolder(group, t)); usleep(10); - __sync_synchronize(); CPPUNIT_ASSERT(false == called); waitList.doneWaiting(std::exception_ptr{}); - waitTask->wait_for_all(); - __sync_synchronize(); + group.wait(); CPPUNIT_ASSERT(true == called); CPPUNIT_ASSERT(bool(excPtr) == false); } @@ -101,18 +93,17 @@ void WaitingTaskList_test::addThenDone() { { std::exception_ptr excPtr; - auto waitTask = edm::make_empty_waiting_task(); - waitTask->set_ref_count(2); + auto t = new TestCalledTask{called, excPtr}; - auto t = new (waitTask->allocate_child()) TestCalledTask{called, excPtr}; + tbb::task_group group; - waitList.add(t); + waitList.add(edm::WaitingTaskHolder(group, t)); usleep(10); CPPUNIT_ASSERT(false == called); waitList.doneWaiting(std::exception_ptr{}); - waitTask->wait_for_all(); + group.wait(); CPPUNIT_ASSERT(true == called); CPPUNIT_ASSERT(bool(excPtr) == false); } @@ -124,15 +115,14 @@ void WaitingTaskList_test::doneThenAdd() { edm::WaitingTaskList waitList; { - auto waitTask = edm::make_empty_waiting_task(); - waitTask->set_ref_count(2); + tbb::task_group group; - auto t = new (waitTask->allocate_child()) TestCalledTask{called, excPtr}; + auto t = new TestCalledTask{called, excPtr}; waitList.doneWaiting(std::exception_ptr{}); - waitList.add(t); - waitTask->wait_for_all(); + waitList.add(edm::WaitingTaskHolder(group, t)); + group.wait(); CPPUNIT_ASSERT(true == called); CPPUNIT_ASSERT(bool(excPtr) == false); } @@ -145,18 +135,17 @@ void WaitingTaskList_test::addThenDoneFailed() { { std::exception_ptr excPtr; - auto waitTask = edm::make_empty_waiting_task(); - waitTask->set_ref_count(2); + auto t = new TestCalledTask{called, excPtr}; - auto t = new (waitTask->allocate_child()) TestCalledTask{called, excPtr}; + tbb::task_group group; - waitList.add(t); + waitList.add(edm::WaitingTaskHolder(group, t)); usleep(10); CPPUNIT_ASSERT(false == called); waitList.doneWaiting(std::make_exception_ptr(std::string("failed"))); - waitTask->wait_for_all(); + group.wait(); CPPUNIT_ASSERT(true == called); CPPUNIT_ASSERT(bool(excPtr) == true); } @@ -168,65 +157,52 @@ void WaitingTaskList_test::doneThenAddFailed() { edm::WaitingTaskList waitList; { - auto waitTask = edm::make_empty_waiting_task(); - waitTask->set_ref_count(2); - - auto t = new (waitTask->allocate_child()) TestCalledTask{called, excPtr}; + auto t = new TestCalledTask{called, excPtr}; waitList.doneWaiting(std::make_exception_ptr(std::string("failed"))); - waitList.add(t); - waitTask->wait_for_all(); + tbb::task_group group; + + waitList.add(edm::WaitingTaskHolder(group, t)); + group.wait(); CPPUNIT_ASSERT(true == called); CPPUNIT_ASSERT(bool(excPtr) == true); } } namespace { -#if defined(CXX_THREAD_AVAILABLE) void join_thread(std::thread* iThread) { if (iThread->joinable()) { iThread->join(); } } -#endif } // namespace void WaitingTaskList_test::stressTest() { -#if defined(CXX_THREAD_AVAILABLE) - std::atomic called{false}; - std::exception_ptr excPtr; edm::WaitingTaskList waitList; + tbb::task_group group; unsigned int index = 1000; const unsigned int nTasks = 10000; while (0 != --index) { - called = false; - auto waitTask = edm::make_empty_waiting_task(); - waitTask->set_ref_count(3); - tbb::task* pWaitTask = waitTask.get(); - + edm::FinalWaitingTask waitTask; + auto* pWaitTask = &waitTask; { - std::thread makeTasksThread([&waitList, pWaitTask, &called, &excPtr] { + edm::WaitingTaskHolder waitTaskH(group, pWaitTask); + std::thread makeTasksThread([&waitList, waitTaskH] { for (unsigned int i = 0; i < nTasks; ++i) { - auto t = new (tbb::task::allocate_additional_child_of(*pWaitTask)) TestCalledTask{called, excPtr}; - waitList.add(t); + waitList.add(waitTaskH); } - - pWaitTask->decrement_ref_count(); }); std::shared_ptr(&makeTasksThread, join_thread); - std::thread doneWaitThread([&waitList, &called, pWaitTask] { - called = true; - waitList.doneWaiting(std::exception_ptr{}); - pWaitTask->decrement_ref_count(); - }); + std::thread doneWaitThread([&waitList, waitTaskH] { waitList.doneWaiting(std::exception_ptr{}); }); std::shared_ptr(&doneWaitThread, join_thread); } - waitTask->wait_for_all(); + do { + group.wait(); + } while (not waitTask.done()); } -#endif } CPPUNIT_TEST_SUITE_REGISTRATION(WaitingTaskList_test); diff --git a/FWCore/FWLite/BuildFile.xml b/FWCore/FWLite/BuildFile.xml index 461f124c9d1a0..86cbe62d32672 100644 --- a/FWCore/FWLite/BuildFile.xml +++ b/FWCore/FWLite/BuildFile.xml @@ -2,6 +2,7 @@ + diff --git a/FWCore/Framework/interface/Callback.h b/FWCore/Framework/interface/Callback.h index c309d5867018d..efe753fc1d763 100644 --- a/FWCore/Framework/interface/Callback.h +++ b/FWCore/Framework/interface/Callback.h @@ -32,6 +32,8 @@ #include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/ServiceRegistry/interface/ServiceToken.h" #include "FWCore/ServiceRegistry/interface/ServiceRegistry.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" +#include "FWCore/ServiceRegistry/interface/ESModuleCallingContext.h" namespace edm { namespace eventsetup { @@ -56,6 +58,7 @@ namespace edm { Callback(T* iProd, method_type iMethod, unsigned int iID, const TDecorator& iDec = TDecorator()) : proxyData_{}, producer_(iProd), + callingContext_(&iProd->description()), method_(iMethod), id_(iID), wasCalledForThisRecord_(false), @@ -66,42 +69,46 @@ namespace edm { Callback(const Callback&) = delete; const Callback& operator=(const Callback&) = delete; - void prefetchAsync(WaitingTask* iTask, + void prefetchAsync(WaitingTaskHolder iTask, EventSetupRecordImpl const* iRecord, EventSetupImpl const* iEventSetupImpl, - ServiceToken const& token) { + ServiceToken const& token, + ESParentContext const& iParent) { bool expected = false; auto doPrefetch = wasCalledForThisRecord_.compare_exchange_strong(expected, true); taskList_.add(iTask); + auto group = iTask.group(); if (doPrefetch) { + callingContext_.setContext(ESModuleCallingContext::State::kPrefetching, iParent); + iRecord->activityRegistry()->preESModulePrefetchingSignal_.emit(iRecord->key(), callingContext_); if UNLIKELY (producer_->hasMayConsumes()) { //after prefetching need to do the mayGet auto mayGetTask = edm::make_waiting_task( - tbb::task::allocate_root(), [this, iRecord, iEventSetupImpl, token](std::exception_ptr const* iExcept) { + [this, iRecord, iEventSetupImpl, token, group](std::exception_ptr const* iExcept) { if (iExcept) { - runProducerAsync(iExcept, iRecord, iEventSetupImpl, token); + runProducerAsync(group, iExcept, iRecord, iEventSetupImpl, token); return; } if (handleMayGet(iRecord, iEventSetupImpl)) { auto runTask = edm::make_waiting_task( - tbb::task::allocate_root(), - [this, iRecord, iEventSetupImpl, token](std::exception_ptr const* iExcept) { - runProducerAsync(iExcept, iRecord, iEventSetupImpl, token); + [this, group, iRecord, iEventSetupImpl, token](std::exception_ptr const* iExcept) { + runProducerAsync(group, iExcept, iRecord, iEventSetupImpl, token); }); - prefetchNeededDataAsync(runTask, iEventSetupImpl, &((*postMayGetProxies_).front()), token); + prefetchNeededDataAsync( + WaitingTaskHolder(*group, runTask), iEventSetupImpl, &((*postMayGetProxies_).front()), token); } else { - runProducerAsync(iExcept, iRecord, iEventSetupImpl, token); + runProducerAsync(group, iExcept, iRecord, iEventSetupImpl, token); } }); //Get everything we can before knowing about the mayGets - prefetchNeededDataAsync(mayGetTask, iEventSetupImpl, getTokenIndices(), token); + prefetchNeededDataAsync(WaitingTaskHolder(*group, mayGetTask), iEventSetupImpl, getTokenIndices(), token); } else { auto task = edm::make_waiting_task( - tbb::task::allocate_root(), [this, iRecord, iEventSetupImpl, token](std::exception_ptr const* iExcept) { - runProducerAsync(iExcept, iRecord, iEventSetupImpl, token); + [this, group, iRecord, iEventSetupImpl, token](std::exception_ptr const* iExcept) { + runProducerAsync(group, iExcept, iRecord, iEventSetupImpl, token); }); - prefetchNeededDataAsync(task, iEventSetupImpl, getTokenIndices(), token); + prefetchNeededDataAsync(WaitingTaskHolder(*group, task), iEventSetupImpl, getTokenIndices(), token); } } } @@ -135,17 +142,16 @@ namespace edm { ESProxyIndex const* getTokenIndices() const { return producer_->getTokenIndices(id_); } private: - void prefetchNeededDataAsync(WaitingTask* task, + void prefetchNeededDataAsync(WaitingTaskHolder task, EventSetupImpl const* iImpl, ESProxyIndex const* proxies, edm::ServiceToken const& token) const { - WaitingTaskHolder h(task); auto recs = producer_->getTokenRecordIndices(id_); auto n = producer_->numberOfTokenIndices(id_); for (size_t i = 0; i != n; ++i) { auto rec = iImpl->findImpl(recs[i]); if (rec) { - rec->prefetchAsync(task, proxies[i], iImpl, token); + rec->prefetchAsync(task, proxies[i], iImpl, token, edm::ESParentContext{&callingContext_}); } } } @@ -153,12 +159,14 @@ namespace edm { bool handleMayGet(EventSetupRecordImpl const* iRecord, EventSetupImpl const* iEventSetupImpl) { //Handle mayGets TRecord rec; - rec.setImpl(iRecord, transitionID(), getTokenIndices(), iEventSetupImpl, true); + edm::ESParentContext pc{&callingContext_}; + rec.setImpl(iRecord, transitionID(), getTokenIndices(), iEventSetupImpl, &pc, true); postMayGetProxies_ = producer_->updateFromMayConsumes(id_, rec); return static_cast(postMayGetProxies_); } - void runProducerAsync(std::exception_ptr const* iExcept, + void runProducerAsync(tbb::task_group* iGroup, + std::exception_ptr const* iExcept, EventSetupRecordImpl const* iRecord, EventSetupImpl const* iEventSetupImpl, ServiceToken const& token) { @@ -167,7 +175,9 @@ namespace edm { taskList_.doneWaiting(*iExcept); return; } - producer_->queue().push([this, iRecord, iEventSetupImpl, token]() { + iRecord->activityRegistry()->postESModulePrefetchingSignal_.emit(iRecord->key(), callingContext_); + producer_->queue().push(*iGroup, [this, iRecord, iEventSetupImpl, token]() { + callingContext_.setState(ESModuleCallingContext::State::kRunning); std::exception_ptr exceptPtr; try { convertException::wrap([this, iRecord, iEventSetupImpl, token] { @@ -176,8 +186,18 @@ namespace edm { proxies = &((*postMayGetProxies_).front()); } TRecord rec; - rec.setImpl(iRecord, transitionID(), proxies, iEventSetupImpl, true); + edm::ESParentContext pc{&callingContext_}; + rec.setImpl(iRecord, transitionID(), proxies, iEventSetupImpl, &pc, true); ServiceRegistry::Operate operate(token); + iRecord->activityRegistry()->preESModuleSignal_.emit(iRecord->key(), callingContext_); + struct EndGuard { + EndGuard(EventSetupRecordImpl const* iRecord, ESModuleCallingContext const& iContext) + : record_{iRecord}, context_{iContext} {} + ~EndGuard() { record_->activityRegistry()->postESModuleSignal_.emit(record_->key(), context_); } + EventSetupRecordImpl const* record_; + ESModuleCallingContext const& context_; + }; + EndGuard guard(iRecord, callingContext_); decorator_.pre(rec); storeReturnedValues((producer_->*method_)(rec)); decorator_.post(rec); @@ -196,6 +216,7 @@ namespace edm { std::array::value> proxyData_; std::optional> postMayGetProxies_; edm::propagate_const producer_; + ESModuleCallingContext callingContext_; edm::WaitingTaskList taskList_; method_type method_; // This transition id identifies which setWhatProduced call this Callback is associated with diff --git a/FWCore/Framework/interface/CallbackProxy.h b/FWCore/Framework/interface/CallbackProxy.h index e955fdff66949..14e0bd8f69956 100644 --- a/FWCore/Framework/interface/CallbackProxy.h +++ b/FWCore/Framework/interface/CallbackProxy.h @@ -27,6 +27,7 @@ #include "FWCore/Framework/interface/DataProxy.h" #include "FWCore/Framework/interface/EventSetupRecord.h" #include "FWCore/Concurrency/interface/WaitingTaskList.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Framework/interface/produce_helpers.h" #include "FWCore/Utilities/interface/propagate_const.h" @@ -53,13 +54,14 @@ namespace edm::eventsetup { callback_->holdOntoPointer(dummy); } - void prefetchAsyncImpl(WaitingTask* iWaitTask, + void prefetchAsyncImpl(WaitingTaskHolder iWaitTask, const EventSetupRecordImpl& iRecord, const DataKey&, EventSetupImpl const* iEventSetupImpl, - ServiceToken const& iToken) final { + ServiceToken const& iToken, + edm::ESParentContext const& iParent) final { assert(iRecord.key() == RecordT::keyForClass()); - callback_->prefetchAsync(iWaitTask, &iRecord, iEventSetupImpl, iToken); + callback_->prefetchAsync(iWaitTask, &iRecord, iEventSetupImpl, iToken, iParent); } void const* getAfterPrefetchImpl() const final { return smart_pointer_traits::getPointer(data_); } diff --git a/FWCore/Framework/interface/DataProxy.h b/FWCore/Framework/interface/DataProxy.h index b63ec30764aae..8fe7b8d733d81 100644 --- a/FWCore/Framework/interface/DataProxy.h +++ b/FWCore/Framework/interface/DataProxy.h @@ -25,13 +25,14 @@ // user include files #include "FWCore/Utilities/interface/thread_safety_macros.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" // forward declarations namespace edm { class ActivityRegistry; class EventSetupImpl; - class WaitingTask; class ServiceToken; + class ESParentContext; namespace eventsetup { struct ComponentDescription; @@ -48,14 +49,19 @@ namespace edm { // ---------- const member functions --------------------- bool cacheIsValid() const { return cacheIsValid_.load(std::memory_order_acquire); } - void prefetchAsync( - WaitingTask*, EventSetupRecordImpl const&, DataKey const&, EventSetupImpl const*, ServiceToken const&) const; + void prefetchAsync(WaitingTaskHolder, + EventSetupRecordImpl const&, + DataKey const&, + EventSetupImpl const*, + ServiceToken const&, + ESParentContext const&) const; void const* get(EventSetupRecordImpl const&, DataKey const&, bool iTransiently, ActivityRegistry const*, - EventSetupImpl const*) const; + EventSetupImpl const*, + ESParentContext const&) const; void const* getAfterPrefetch(const EventSetupRecordImpl& iRecord, const DataKey& iKey, bool iTransiently) const; ///returns the description of the DataProxyProvider which owns this Proxy @@ -80,11 +86,12 @@ namespace edm { the pointer must be a pointer to that base class interface and not a pointer to an inheriting class instance. */ - virtual void prefetchAsyncImpl(WaitingTask*, + virtual void prefetchAsyncImpl(WaitingTaskHolder, EventSetupRecordImpl const&, DataKey const& iKey, EventSetupImpl const*, - ServiceToken const&) = 0; + ServiceToken const&, + ESParentContext const&) = 0; /** indicates that the Proxy should invalidate any cached information as that information has 'expired' (i.e. we have moved to a new IOV) diff --git a/FWCore/Framework/interface/DataProxyTemplate.h b/FWCore/Framework/interface/DataProxyTemplate.h index dc6134124da69..c930ece872f69 100644 --- a/FWCore/Framework/interface/DataProxyTemplate.h +++ b/FWCore/Framework/interface/DataProxyTemplate.h @@ -34,7 +34,9 @@ #include "FWCore/Framework/interface/DataProxy.h" #include "FWCore/Framework/interface/EventSetupRecord.h" #include "FWCore/ServiceRegistry/interface/ServiceRegistry.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/Concurrency/interface/WaitingTaskList.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include #include #include @@ -55,30 +57,30 @@ namespace edm { DataProxyTemplate() {} - void prefetchAsyncImpl(WaitingTask* iTask, + void prefetchAsyncImpl(WaitingTaskHolder iTask, const EventSetupRecordImpl& iRecord, const DataKey& iKey, EventSetupImpl const* iEventSetupImpl, - edm::ServiceToken const& iToken) override { + edm::ServiceToken const& iToken, + edm::ESParentContext const& iParent) override { assert(iRecord.key() == RecordT::keyForClass()); bool expected = false; bool doPrefetch = prefetching_.compare_exchange_strong(expected, true); taskList_.add(iTask); if (doPrefetch) { - tbb::task::spawn(*edm::make_waiting_task( - tbb::task::allocate_root(), [this, &iRecord, iKey, iEventSetupImpl, iToken](std::exception_ptr const*) { - try { - RecordT rec; - rec.setImpl(&iRecord, std::numeric_limits::max(), nullptr, iEventSetupImpl, true); - ServiceRegistry::Operate operate(iToken); - this->make(rec, iKey); - } catch (...) { - this->taskList_.doneWaiting(std::current_exception()); - return; - } - this->taskList_.doneWaiting(std::exception_ptr{}); - })); + iTask.group()->run([this, &iRecord, iKey, iEventSetupImpl, iToken, iParent]() { + try { + RecordT rec; + rec.setImpl(&iRecord, std::numeric_limits::max(), nullptr, iEventSetupImpl, &iParent, true); + ServiceRegistry::Operate operate(iToken); + this->make(rec, iKey); + } catch (...) { + this->taskList_.doneWaiting(std::current_exception()); + return; + } + this->taskList_.doneWaiting(std::exception_ptr{}); + }); } } diff --git a/FWCore/Framework/interface/DependentRecordImplementation.h b/FWCore/Framework/interface/DependentRecordImplementation.h index 71e1bb859b80a..e9ba823a16417 100644 --- a/FWCore/Framework/interface/DependentRecordImplementation.h +++ b/FWCore/Framework/interface/DependentRecordImplementation.h @@ -53,8 +53,11 @@ namespace edm { (list_type::template contains()), "Trying to get a Record from another Record where the second Record is not dependent on the first Record."); try { - EventSetup const eventSetupT{ - this->eventSetup(), this->transitionID(), this->getTokenIndices(), this->requireTokens()}; + EventSetup const eventSetupT{this->eventSetup(), + this->transitionID(), + this->getTokenIndices(), + *this->esParentContext(), + this->requireTokens()}; return eventSetupT.get(); } catch (cms::Exception& e) { std::ostringstream sstrm; @@ -70,8 +73,11 @@ namespace edm { static_assert( (list_type::template contains()), "Trying to get a Record from another Record where the second Record is not dependent on the first Record."); - EventSetup const eventSetupT{ - this->eventSetup(), this->transitionID(), this->getTokenIndices(), this->requireTokens()}; + EventSetup const eventSetupT{this->eventSetup(), + this->transitionID(), + this->getTokenIndices(), + *this->esParentContext(), + this->requireTokens()}; return eventSetupT.tryToGet(); } diff --git a/FWCore/Framework/interface/EDAnalyzer.h b/FWCore/Framework/interface/EDAnalyzer.h index 61a0cc04ba449..ba44bb31de8b8 100644 --- a/FWCore/Framework/interface/EDAnalyzer.h +++ b/FWCore/Framework/interface/EDAnalyzer.h @@ -7,6 +7,7 @@ #include "FWCore/Framework/interface/EDConsumerBase.h" #include "FWCore/Framework/interface/SharedResourcesAcquirer.h" #include "FWCore/Concurrency/interface/SerialTaskQueue.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include @@ -18,7 +19,6 @@ namespace edm { class PreallocationConfiguration; class ActivityRegistry; class ThinnedAssociationsHelper; - class WaitingTask; namespace maker { template @@ -60,7 +60,7 @@ namespace edm { private: bool doEvent(EventTransitionInfo const&, ActivityRegistry*, ModuleCallingContext const*); //Needed by Worker but not something supported - void preActionBeforeRunEventAsync(WaitingTask*, ModuleCallingContext const&, Principal const&) const {} + void preActionBeforeRunEventAsync(WaitingTaskHolder, ModuleCallingContext const&, Principal const&) const {} void doPreallocate(PreallocationConfiguration const&) {} void doBeginJob(); diff --git a/FWCore/Framework/interface/EDConsumerBase.h b/FWCore/Framework/interface/EDConsumerBase.h index 2f986eb984350..06e46742955bf 100644 --- a/FWCore/Framework/interface/EDConsumerBase.h +++ b/FWCore/Framework/interface/EDConsumerBase.h @@ -51,6 +51,7 @@ namespace edm { class ModuleDescription; + class ModuleProcessName; class ProductResolverIndexHelper; class ProductRegistry; class ConsumesCollector; @@ -105,7 +106,8 @@ namespace edm { typedef ProductLabels Labels; void labelsForToken(EDGetToken iToken, Labels& oLabels) const; - void modulesWhoseProductsAreConsumed(std::vector& modules, + void modulesWhoseProductsAreConsumed(std::array*, NumBranchTypes>& modulesAll, + std::vector& modulesInPreviousProcesses, ProductRegistry const& preg, std::map const& labelsToDesc, std::string const& processName) const; diff --git a/FWCore/Framework/interface/EDFilter.h b/FWCore/Framework/interface/EDFilter.h index 5dd7cfe5a1adf..a84bc729c4b80 100644 --- a/FWCore/Framework/interface/EDFilter.h +++ b/FWCore/Framework/interface/EDFilter.h @@ -16,6 +16,7 @@ These products should be informational products about the filter decision. #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/SharedResourcesAcquirer.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" #include "DataFormats/Provenance/interface/ModuleDescription.h" @@ -33,7 +34,6 @@ namespace edm { class PreallocationConfiguration; class ActivityRegistry; class ThinnedAssociationsHelper; - class WaitingTask; class EDFilter : public ProducerBase, public EDConsumerBase { public: @@ -67,7 +67,7 @@ namespace edm { private: bool doEvent(EventTransitionInfo const&, ActivityRegistry*, ModuleCallingContext const*); //Needed by WorkerT but not supported - void preActionBeforeRunEventAsync(WaitingTask*, ModuleCallingContext const&, Principal const&) const {} + void preActionBeforeRunEventAsync(WaitingTaskHolder, ModuleCallingContext const&, Principal const&) const {} void doPreallocate(PreallocationConfiguration const&) {} void doBeginJob(); diff --git a/FWCore/Framework/interface/EDProducer.h b/FWCore/Framework/interface/EDProducer.h index 05140645f020d..afe03a84a8b3a 100644 --- a/FWCore/Framework/interface/EDProducer.h +++ b/FWCore/Framework/interface/EDProducer.h @@ -15,6 +15,7 @@ EDProducts into an Event. #include "FWCore/Framework/interface/Frameworkfwd.h" #include "DataFormats/Provenance/interface/ModuleDescription.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include #include @@ -25,7 +26,6 @@ namespace edm { class PreallocationConfiguration; class ActivityRegistry; class ThinnedAssociationsHelper; - class WaitingTask; namespace maker { template @@ -63,7 +63,7 @@ namespace edm { private: bool doEvent(EventTransitionInfo const&, ActivityRegistry*, ModuleCallingContext const*); //Needed by WorkerT but not supported - void preActionBeforeRunEventAsync(WaitingTask*, ModuleCallingContext const&, Principal const&) const {} + void preActionBeforeRunEventAsync(WaitingTaskHolder, ModuleCallingContext const&, Principal const&) const {} void doPreallocate(PreallocationConfiguration const&) {} void doBeginJob(); diff --git a/FWCore/Framework/interface/ESRecordsToProxyIndices.h b/FWCore/Framework/interface/ESRecordsToProxyIndices.h index b99edc9275a3e..6bd49c288e1d1 100644 --- a/FWCore/Framework/interface/ESRecordsToProxyIndices.h +++ b/FWCore/Framework/interface/ESRecordsToProxyIndices.h @@ -47,7 +47,7 @@ namespace edm::eventsetup { static constexpr ESProxyIndex missingProxyIndex() noexcept { return ESProxyIndex{std::numeric_limits::max()}; } static constexpr ESRecordIndex missingRecordIndex() noexcept { - return ESRecordIndex{std::numeric_limits::max()}; + return ESRecordIndex{ESRecordIndex::invalidValue()}; } ESRecordIndex recordIndexFor(EventSetupRecordKey const& iRK) const noexcept; diff --git a/FWCore/Framework/interface/ESSourceDataProxyBase.h b/FWCore/Framework/interface/ESSourceDataProxyBase.h index 3c5d77e036842..199d14455f2f9 100644 --- a/FWCore/Framework/interface/ESSourceDataProxyBase.h +++ b/FWCore/Framework/interface/ESSourceDataProxyBase.h @@ -54,11 +54,12 @@ namespace edm::eventsetup { virtual void prefetch(edm::eventsetup::DataKey const& iKey, EventSetupRecordDetails) = 0; private: - void prefetchAsyncImpl(edm::WaitingTask* iTask, + void prefetchAsyncImpl(edm::WaitingTaskHolder iTask, edm::eventsetup::EventSetupRecordImpl const&, edm::eventsetup::DataKey const& iKey, edm::EventSetupImpl const*, - edm::ServiceToken const&) final; + edm::ServiceToken const&, + edm::ESParentContext const&) final; // ---------- member data -------------------------------- diff --git a/FWCore/Framework/interface/Event.h b/FWCore/Framework/interface/Event.h index 02037f4962aae..31cb7d81aa98e 100644 --- a/FWCore/Framework/interface/Event.h +++ b/FWCore/Framework/interface/Event.h @@ -219,9 +219,13 @@ namespace edm { template Handle> fillView_(BasicHandle& bh) const; - Provenance getProvenance(BranchID const& theID) const; + Provenance const& getProvenance(BranchID const& theID) const; - Provenance getProvenance(ProductID const& theID) const; + Provenance const& getProvenance(ProductID const& theID) const; + + StableProvenance const& getStableProvenance(BranchID const& theID) const; + + StableProvenance const& getStableProvenance(ProductID const& theID) const; // Get the provenance for all products that may be in the event void getAllProvenance(std::vector& provenances) const; diff --git a/FWCore/Framework/interface/EventPrincipal.h b/FWCore/Framework/interface/EventPrincipal.h index e30ddabd39940..41c53cc2aa95d 100644 --- a/FWCore/Framework/interface/EventPrincipal.h +++ b/FWCore/Framework/interface/EventPrincipal.h @@ -117,7 +117,8 @@ namespace edm { BranchListIndexes const& branchListIndexes() const; - Provenance getProvenance(ProductID const& pid, ModuleCallingContext const* mcc) const; + Provenance const& getProvenance(ProductID const& pid) const; + StableProvenance const& getStableProvenance(ProductID const& pid) const; BasicHandle getByProductID(ProductID const& oid) const; @@ -148,6 +149,7 @@ namespace edm { } using Base::getProvenance; + using Base::getStableProvenance; private: BranchID pidToBid(ProductID const& pid) const; diff --git a/FWCore/Framework/interface/EventProcessor.h b/FWCore/Framework/interface/EventProcessor.h index 5828a24a7eefa..2713eae17f1f9 100644 --- a/FWCore/Framework/interface/EventProcessor.h +++ b/FWCore/Framework/interface/EventProcessor.h @@ -199,6 +199,7 @@ namespace edm { edm::LuminosityBlockNumber_t nextLuminosityBlockID(); void readFile(); + bool fileBlockValid() { return fb_.get() != nullptr; } void closeInputFile(bool cleaningUpAfterException); void openOutputFiles(); void closeOutputFiles(); @@ -309,6 +310,9 @@ namespace edm { // only during construction, and never again. If they aren't // really needed, we should remove them. + //Guarantee that task group is the last to be destroyed + tbb::task_group taskGroup_; + std::shared_ptr actReg_; // We do not use propagate_const because the registry itself is mutable. edm::propagate_const> preg_; edm::propagate_const> branchIDListHelper_; @@ -364,6 +368,7 @@ namespace edm { ExcludedDataMap eventSetupDataToExcludeFromPrefetching_; bool printDependencies_ = false; + bool deleteNonConsumedUnscheduledModules_ = true; }; // class EventProcessor //-------------------------------------------------------------------- diff --git a/FWCore/Framework/interface/EventSetup.h b/FWCore/Framework/interface/EventSetup.h index 54b1d42cd78ca..b0a1eb656f398 100644 --- a/FWCore/Framework/interface/EventSetup.h +++ b/FWCore/Framework/interface/EventSetup.h @@ -47,6 +47,7 @@ namespace edm { template class ESGetToken; class PileUp; + class ESParentContext; namespace eventsetup { class EventSetupProvider; @@ -63,14 +64,20 @@ namespace edm { explicit EventSetup(T const& info, unsigned int iTransitionID, ESProxyIndex const* iGetTokenIndices, + ESParentContext const& iContext, bool iRequireToken) - : EventSetup(info.eventSetupImpl(), iTransitionID, iGetTokenIndices, iRequireToken) {} + : EventSetup(info.eventSetupImpl(), iTransitionID, iGetTokenIndices, iContext, iRequireToken) {} explicit EventSetup(EventSetupImpl const& iSetup, unsigned int iTransitionID, ESProxyIndex const* iGetTokenIndices, + ESParentContext const& iContext, bool iRequireToken) - : m_setup{iSetup}, m_getTokenIndices{iGetTokenIndices}, m_id{iTransitionID}, m_requireToken(iRequireToken) {} + : m_setup{iSetup}, + m_getTokenIndices{iGetTokenIndices}, + m_context(&iContext), + m_id{iTransitionID}, + m_requireToken(iRequireToken) {} EventSetup(EventSetup const&) = delete; EventSetup& operator=(EventSetup const&) = delete; @@ -91,7 +98,7 @@ namespace edm { throw eventsetup::NoRecordException(recordDoesExist(m_setup, eventsetup::EventSetupRecordKey::makeKey())); } T returnValue; - returnValue.setImpl(temp, m_id, m_getTokenIndices, &m_setup, m_requireToken); + returnValue.setImpl(temp, m_id, m_getTokenIndices, &m_setup, m_context, m_requireToken); return returnValue; } @@ -109,7 +116,7 @@ namespace edm { eventsetup::EventSetupRecordKey>()); if (temp != nullptr) { T rec; - rec.setImpl(temp, m_id, m_getTokenIndices, &m_setup, m_requireToken); + rec.setImpl(temp, m_id, m_getTokenIndices, &m_setup, m_context, m_requireToken); return rec; } return std::nullopt; @@ -167,7 +174,7 @@ namespace edm { } std::optional find(const eventsetup::EventSetupRecordKey& iKey) const { - return m_setup.find(iKey, m_id, m_getTokenIndices); + return m_setup.find(iKey, m_id, m_getTokenIndices, *m_context); } ///clears the oToFill vector and then fills it with the keys for all available records @@ -187,6 +194,7 @@ namespace edm { // ---------- member data -------------------------------- edm::EventSetupImpl const& m_setup; ESProxyIndex const* m_getTokenIndices; + ESParentContext const* m_context; unsigned int m_id; bool m_requireToken; }; diff --git a/FWCore/Framework/interface/EventSetupImpl.h b/FWCore/Framework/interface/EventSetupImpl.h index f4b4e348146ef..839dca57163ab 100644 --- a/FWCore/Framework/interface/EventSetupImpl.h +++ b/FWCore/Framework/interface/EventSetupImpl.h @@ -22,6 +22,7 @@ #include #include #include +#include "tbb/task_arena.h" // user include files #include "FWCore/Framework/interface/EventSetupRecordKey.h" @@ -58,7 +59,8 @@ namespace edm { std::optional find(const eventsetup::EventSetupRecordKey&, unsigned int iTransitionID, - ESProxyIndex const* getTokenIndices) const; + ESProxyIndex const* getTokenIndices, + ESParentContext const& iParent) const; ///clears the oToFill vector and then fills it with the keys for all available records void fillAvailableRecordKeys(std::vector& oToFill) const; @@ -69,17 +71,20 @@ namespace edm { bool validRecord(eventsetup::EventSetupRecordKey const& iKey) const; + tbb::task_arena* taskArena() const { return taskArena_; } ///Only EventSetupProvider allowed to create an EventSetupImpl friend class eventsetup::EventSetupProvider; friend class eventsetup::EventSetupRecordProvider; friend class ::testEventsetup; + friend class ::testEventsetupRecord; friend class ProcessBlockTransitionInfo; protected: void addRecordImpl(const eventsetup::EventSetupRecordImpl& iRecord); private: - EventSetupImpl(); + EventSetupImpl() = delete; + explicit EventSetupImpl(tbb::task_arena*); void insertRecordImpl(const eventsetup::EventSetupRecordKey&, const eventsetup::EventSetupRecordImpl*); @@ -91,6 +96,7 @@ namespace edm { std::vector::const_iterator keysBegin_; std::vector::const_iterator keysEnd_; std::vector recordImpls_; + tbb::task_arena* taskArena_ = nullptr; }; } // namespace edm #endif diff --git a/FWCore/Framework/interface/EventSetupProvider.h b/FWCore/Framework/interface/EventSetupProvider.h index 1fc392e3219ee..4dcb8fc0fb01e 100644 --- a/FWCore/Framework/interface/EventSetupProvider.h +++ b/FWCore/Framework/interface/EventSetupProvider.h @@ -20,6 +20,7 @@ #include "FWCore/Utilities/interface/propagate_const.h" +#include "tbb/task_arena.h" #include #include #include @@ -56,6 +57,7 @@ namespace edm { typedef std::map PreferredProviderInfo; EventSetupProvider(ActivityRegistry const*, + tbb::task_arena*, unsigned subProcessIndex = 0U, PreferredProviderInfo const* iInfo = nullptr); EventSetupProvider(EventSetupProvider const&) = delete; @@ -134,6 +136,7 @@ namespace edm { RecordProviders recordProviders_; ActivityRegistry const* activityRegistry_; + tbb::task_arena* taskArena_; bool mustFinishConfiguration_; unsigned subProcessIndex_; diff --git a/FWCore/Framework/interface/EventSetupRecord.h b/FWCore/Framework/interface/EventSetupRecord.h index b1f4aec4ac81c..3e3ef03952369 100644 --- a/FWCore/Framework/interface/EventSetupRecord.h +++ b/FWCore/Framework/interface/EventSetupRecord.h @@ -97,11 +97,13 @@ namespace edm { unsigned int transitionID, ESProxyIndex const* getTokenIndices, EventSetupImpl const* iEventSetupImpl, + ESParentContext const* iContext, bool requireTokens) { impl_ = iImpl; transitionID_ = transitionID; getTokenIndices_ = getTokenIndices; eventSetupImpl_ = iEventSetupImpl; + context_ = iContext; requireTokens_ = requireTokens; } @@ -118,7 +120,8 @@ namespace edm { typename HolderT::value_type const* value = nullptr; ComponentDescription const* desc = nullptr; std::shared_ptr whyFailedFactory; - impl_->getImplementation(value, iName, desc, iHolder.transientAccessOnly, whyFailedFactory, eventSetupImpl_); + impl_->getImplementation( + value, iName, desc, iHolder.transientAccessOnly, whyFailedFactory, *context_, eventSetupImpl_); if (value) { iHolder = HolderT(value, desc); @@ -143,7 +146,7 @@ namespace edm { ComponentDescription const* desc = nullptr; std::shared_ptr whyFailedFactory; impl_->getImplementation( - value, iTag.data().c_str(), desc, iHolder.transientAccessOnly, whyFailedFactory, eventSetupImpl_); + value, iTag.data().c_str(), desc, iHolder.transientAccessOnly, whyFailedFactory, *context_, eventSetupImpl_); if (value) { validate(desc, iTag); @@ -235,9 +238,11 @@ namespace edm { return H(value, desc); } - EventSetupImpl const& eventSetup() const { return *eventSetupImpl_; } + EventSetupImpl const& eventSetup() const noexcept { return *eventSetupImpl_; } + + ESProxyIndex const* getTokenIndices() const noexcept { return getTokenIndices_; } - ESProxyIndex const* getTokenIndices() const { return getTokenIndices_; } + ESParentContext const* esParentContext() const noexcept { return context_; } void validate(ComponentDescription const*, ESInputTag const&) const; @@ -283,6 +288,7 @@ namespace edm { EventSetupRecordImpl const* impl_ = nullptr; EventSetupImpl const* eventSetupImpl_ = nullptr; ESProxyIndex const* getTokenIndices_ = nullptr; + ESParentContext const* context_ = nullptr; unsigned int transitionID_ = std::numeric_limits::max(); bool requireTokens_ = false; }; @@ -293,8 +299,9 @@ namespace edm { unsigned int iTransitionID, ESProxyIndex const* getTokenIndices, EventSetupImpl const* eventSetupImpl, + ESParentContext const* context, bool requireTokens = false) { - setImpl(iImpl, iTransitionID, getTokenIndices, eventSetupImpl, requireTokens); + setImpl(iImpl, iTransitionID, getTokenIndices, eventSetupImpl, context, requireTokens); } EventSetupRecordKey key() const final { return impl()->key(); } diff --git a/FWCore/Framework/interface/EventSetupRecordImpl.h b/FWCore/Framework/interface/EventSetupRecordImpl.h index 97823f4d18521..2c1379f42b38e 100644 --- a/FWCore/Framework/interface/EventSetupRecordImpl.h +++ b/FWCore/Framework/interface/EventSetupRecordImpl.h @@ -40,7 +40,9 @@ through the 'validityInterval' method. #include "FWCore/Framework/interface/NoProxyException.h" #include "FWCore/Framework/interface/ValidityInterval.h" #include "FWCore/Framework/interface/EventSetupRecordKey.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Utilities/interface/thread_safety_macros.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/Utilities/interface/propagate_const.h" #include "FWCore/Utilities/interface/ESInputTag.h" #include "FWCore/Utilities/interface/ESIndices.h" @@ -57,7 +59,6 @@ through the 'validityInterval' method. // forward declarations namespace cms { class Exception; - class WaitingTask; } // namespace cms namespace edm { @@ -66,8 +67,8 @@ namespace edm { class ESHandleExceptionFactory; class ESInputTag; class EventSetupImpl; - class WaitingTask; class ServiceToken; + class ESParentContext; namespace eventsetup { struct ComponentDescription; @@ -86,7 +87,11 @@ namespace edm { ValidityInterval validityInterval() const; ///prefetch the data to setup for subsequent calls to getImplementation - void prefetchAsync(WaitingTask* iTask, ESProxyIndex iProxyIndex, EventSetupImpl const*, ServiceToken const&) const; + void prefetchAsync(WaitingTaskHolder iTask, + ESProxyIndex iProxyIndex, + EventSetupImpl const*, + ServiceToken const&, + ESParentContext) const; /**returns true only if someone has already requested data for this key and the data was retrieved @@ -144,6 +149,8 @@ namespace edm { void validate(ComponentDescription const*, ESInputTag const&) const; + ActivityRegistry const* activityRegistry() const noexcept { return activityRegistry_; } + void addTraceInfoToCmsException(cms::Exception& iException, char const* iName, ComponentDescription const*, @@ -156,12 +163,14 @@ namespace edm { void const* getFromProxy(DataKey const& iKey, ComponentDescription const*& iDesc, bool iTransientAccessOnly, + ESParentContext const&, EventSetupImpl const* = nullptr) const; void const* getFromProxy(ESProxyIndex iProxyIndex, bool iTransientAccessOnly, ComponentDescription const*& iDesc, DataKey const*& oGottenKey, + ESParentContext const&, EventSetupImpl const* = nullptr) const; void const* getFromProxyAfterPrefetch(ESProxyIndex iProxyIndex, @@ -175,10 +184,11 @@ namespace edm { ComponentDescription const*& iDesc, bool iTransientAccessOnly, std::shared_ptr& whyFailedFactory, + ESParentContext const& iParent, EventSetupImpl const* iEventSetupImpl) const { DataKey dataKey(DataKey::makeTypeTag(), iName, DataKey::kDoNotCopyMemory); - void const* pValue = this->getFromProxy(dataKey, iDesc, iTransientAccessOnly, iEventSetupImpl); + void const* pValue = this->getFromProxy(dataKey, iDesc, iTransientAccessOnly, iParent, iEventSetupImpl); if (nullptr == pValue) { whyFailedFactory = makeESHandleExceptionFactory([=] { NoProxyException ex(this->key(), dataKey); diff --git a/FWCore/Framework/interface/GenericHandle.h b/FWCore/Framework/interface/GenericHandle.h index 10937099c418c..e75c97ef1b893 100644 --- a/FWCore/Framework/interface/GenericHandle.h +++ b/FWCore/Framework/interface/GenericHandle.h @@ -125,12 +125,16 @@ namespace edm { ///Specialize the Event's getByLabel method to work with a Handle template <> - bool edm::Event::getByLabel(std::string const& label, - std::string const& productInstanceName, - Handle& result) const; + bool Event::getByLabel(std::string const& label, + std::string const& productInstanceName, + Handle& result) const; template <> - bool edm::Event::getByLabel(edm::InputTag const& tag, Handle& result) const; + bool Event::getByLabel(InputTag const& tag, Handle& result) const; + + ///Specialize the Event's getByToken method to work with a Handle + template <> + bool Event::getByToken(EDGetToken token, Handle& result) const; } // namespace edm #endif diff --git a/FWCore/Framework/interface/LuminosityBlock.h b/FWCore/Framework/interface/LuminosityBlock.h index 5add1a8da7705..1644031f31ae1 100644 --- a/FWCore/Framework/interface/LuminosityBlock.h +++ b/FWCore/Framework/interface/LuminosityBlock.h @@ -134,7 +134,9 @@ namespace edm { template void emplace(EDPutToken token, Args&&... args); - Provenance getProvenance(BranchID const& theID) const; + Provenance const& getProvenance(BranchID const& theID) const; + + StableProvenance const& getStableProvenance(BranchID const& theID) const; void getAllStableProvenance(std::vector& provenances) const; diff --git a/FWCore/Framework/interface/ModuleProcessName.h b/FWCore/Framework/interface/ModuleProcessName.h new file mode 100644 index 0000000000000..0b8b451b07ab7 --- /dev/null +++ b/FWCore/Framework/interface/ModuleProcessName.h @@ -0,0 +1,30 @@ +#ifndef FWCore_Framework_ModuleProcessName_h +#define FWCore_Framework_ModuleProcessName_h + +#include + +namespace edm { + /** + * Helper class to hold a module label and a process name + * + * Note: does NOT own the string storage, be careful to use. + */ + class ModuleProcessName { + public: + explicit ModuleProcessName(std::string_view module, std::string_view process) + : moduleLabel_{module}, processName_{process} {} + + std::string_view moduleLabel() const { return moduleLabel_; } + std::string_view processName() const { return processName_; } + + private: + std::string_view moduleLabel_; + std::string_view processName_; + }; + + inline bool operator<(ModuleProcessName const& a, ModuleProcessName const& b) { + return a.processName() == b.processName() ? a.moduleLabel() < b.moduleLabel() : a.processName() < b.processName(); + } +} // namespace edm + +#endif diff --git a/FWCore/Framework/interface/PathsAndConsumesOfModules.h b/FWCore/Framework/interface/PathsAndConsumesOfModules.h index 0cfcbcc5517e6..4bad513c8998e 100644 --- a/FWCore/Framework/interface/PathsAndConsumesOfModules.h +++ b/FWCore/Framework/interface/PathsAndConsumesOfModules.h @@ -15,6 +15,9 @@ #include "FWCore/ServiceRegistry/interface/ConsumesInfo.h" #include "FWCore/ServiceRegistry/interface/PathsAndConsumesOfModulesBase.h" +#include "FWCore/Framework/interface/ModuleProcessName.h" +#include "FWCore/Utilities/interface/BranchType.h" + #include #include #include @@ -28,10 +31,16 @@ namespace edm { class PathsAndConsumesOfModules : public PathsAndConsumesOfModulesBase { public: + PathsAndConsumesOfModules(); ~PathsAndConsumesOfModules() override; void initialize(Schedule const*, std::shared_ptr); + void removeModules(std::vector const& modules); + + std::vector const& modulesInPreviousProcessesWhoseProductsAreConsumedBy( + unsigned int moduleID) const; + private: std::vector const& doPaths() const override { return paths_; } std::vector const& doEndPaths() const override { return endPaths_; } @@ -42,10 +51,12 @@ namespace edm { std::vector const& doModulesOnPath(unsigned int pathIndex) const override; std::vector const& doModulesOnEndPath(unsigned int endPathIndex) const override; std::vector const& doModulesWhoseProductsAreConsumedBy( - unsigned int moduleID) const override; + unsigned int moduleID, BranchType branchType) const override; std::vector doConsumesInfo(unsigned int moduleID) const override; + unsigned int doLargestModuleID() const override; + unsigned int moduleIndex(unsigned int moduleID) const; // data members @@ -62,12 +73,16 @@ namespace edm { // following data member std::vector > moduleIDToIndex_; - std::vector > modulesWhoseProductsAreConsumedBy_; + std::array >, NumBranchTypes> modulesWhoseProductsAreConsumedBy_; + std::vector > modulesInPreviousProcessesWhoseProductsAreConsumedBy_; Schedule const* schedule_; std::shared_ptr preg_; }; + std::vector nonConsumedUnscheduledModules( + edm::PathsAndConsumesOfModulesBase const& iPnC, std::vector& consumedByChildren); + void checkForModuleDependencyCorrectness(edm::PathsAndConsumesOfModulesBase const& iPnC, bool iPrintDependencies); } // namespace edm #endif diff --git a/FWCore/Framework/interface/Principal.h b/FWCore/Framework/interface/Principal.h index 26701c8a0b57f..3d230e4024405 100644 --- a/FWCore/Framework/interface/Principal.h +++ b/FWCore/Framework/interface/Principal.h @@ -26,6 +26,7 @@ pointer to a ProductResolver, when queried. #include "DataFormats/Provenance/interface/ProvenanceFwd.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/ProductResolverBase.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Utilities/interface/InputTag.h" #include "FWCore/Utilities/interface/ProductKindOfType.h" #include "FWCore/Utilities/interface/propagate_const.h" @@ -47,7 +48,6 @@ namespace edm { class EDConsumerBase; class SharedResourcesAcquirer; class InputProductResolver; - class WaitingTask; class UnscheduledConfigurator; struct FilledProductPtr { @@ -126,7 +126,7 @@ namespace edm { SharedResourcesAcquirer* sra, ModuleCallingContext const* mcc) const; - void prefetchAsync(WaitingTask* waitTask, + void prefetchAsync(WaitingTaskHolder waitTask, ProductResolverIndex index, bool skipCurrentProcess, ServiceToken const& token, @@ -172,7 +172,8 @@ namespace edm { return boost::make_filter_iterator(productResolvers_.end(), productResolvers_.end()); } - Provenance getProvenance(BranchID const& bid, ModuleCallingContext const* mcc) const; + Provenance const& getProvenance(BranchID const& bid) const; + StableProvenance const& getStableProvenance(BranchID const& bid) const; void getAllProvenance(std::vector& provenances) const; diff --git a/FWCore/Framework/interface/ProductResolverBase.h b/FWCore/Framework/interface/ProductResolverBase.h index dc1b5f486824d..c8ebc537100fd 100644 --- a/FWCore/Framework/interface/ProductResolverBase.h +++ b/FWCore/Framework/interface/ProductResolverBase.h @@ -13,6 +13,7 @@ ProductResolver: Class to handle access to a WrapperBase and its related informa #include "DataFormats/Provenance/interface/BranchDescription.h" #include "DataFormats/Provenance/interface/BranchID.h" #include "DataFormats/Provenance/interface/Provenance.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Utilities/interface/ProductResolverIndex.h" #include "FWCore/Utilities/interface/TypeID.h" @@ -28,7 +29,6 @@ namespace edm { class SharedResourcesAcquirer; class Principal; class UnscheduledConfigurator; - class WaitingTask; class ServiceToken; class ProductResolverBase { @@ -66,7 +66,7 @@ namespace edm { /** oDataFetchedIsValid is allowed to be nullptr in which case no value will be assigned */ - void prefetchAsync(WaitingTask* waitTask, + void prefetchAsync(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, @@ -176,7 +176,7 @@ namespace edm { bool skipCurrentProcess, SharedResourcesAcquirer* sra, ModuleCallingContext const* mcc) const = 0; - virtual void prefetchAsync_(WaitingTask* waitTask, + virtual void prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, diff --git a/FWCore/Framework/interface/Run.h b/FWCore/Framework/interface/Run.h index 409cc5ceeede1..bcf385dfa2d2d 100644 --- a/FWCore/Framework/interface/Run.h +++ b/FWCore/Framework/interface/Run.h @@ -127,7 +127,9 @@ namespace edm { template void emplace(EDPutToken token, Args&&... args); - Provenance getProvenance(BranchID const& theID) const; + Provenance const& getProvenance(BranchID const& theID) const; + + StableProvenance const& getStableProvenance(BranchID const& theID) const; void getAllStableProvenance(std::vector& provenances) const; diff --git a/FWCore/Framework/interface/Schedule.h b/FWCore/Framework/interface/Schedule.h index 7f8a4c033aaac..81d655368f5fa 100644 --- a/FWCore/Framework/interface/Schedule.h +++ b/FWCore/Framework/interface/Schedule.h @@ -230,10 +230,13 @@ namespace edm { std::vector& descriptions, unsigned int hint) const; - void fillModuleAndConsumesInfo(std::vector& allModuleDescriptions, - std::vector>& moduleIDToIndex, - std::vector>& modulesWhoseProductsAreConsumedBy, - ProductRegistry const& preg) const; + void fillModuleAndConsumesInfo( + std::vector& allModuleDescriptions, + std::vector>& moduleIDToIndex, + std::array>, NumBranchTypes>& + modulesWhoseProductsAreConsumedBy, + std::vector>& modulesInPreviousProcessesWhoseProductsAreConsumedBy, + ProductRegistry const& preg) const; /// Return the number of events this Schedule has tried to process /// (inclues both successes and failures, including failures due @@ -277,6 +280,9 @@ namespace edm { const ProductRegistry& iRegistry, eventsetup::ESRecordsToProxyIndices const&); + /// Deletes module with label iLabel + void deleteModule(std::string const& iLabel, ActivityRegistry* areg); + /// returns the collection of pointers to workers AllWorkers const& allWorkers() const; diff --git a/FWCore/Framework/interface/UnscheduledCallProducer.h b/FWCore/Framework/interface/UnscheduledCallProducer.h index 9c94536ec16a3..543085b3c8ac6 100644 --- a/FWCore/Framework/interface/UnscheduledCallProducer.h +++ b/FWCore/Framework/interface/UnscheduledCallProducer.h @@ -20,6 +20,7 @@ #include "FWCore/Framework/interface/OccurrenceTraits.h" #include "FWCore/Framework/src/Worker.h" #include "FWCore/Framework/src/UnscheduledAuxiliary.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/ServiceRegistry/interface/ParentContext.h" #include "FWCore/ServiceRegistry/interface/ActivityRegistry.h" @@ -51,6 +52,13 @@ namespace edm { } } + void removeWorker(Worker const* worker) { + unscheduledWorkers_.erase(std::remove(unscheduledWorkers_.begin(), unscheduledWorkers_.end(), worker), + unscheduledWorkers_.end()); + accumulatorWorkers_.erase(std::remove(accumulatorWorkers_.begin(), accumulatorWorkers_.end(), worker), + accumulatorWorkers_.end()); + } + void setEventTransitionInfo(EventTransitionInfo const& info) { aux_.setEventTransitionInfo(info); } UnscheduledAuxiliary const& auxiliary() const { return aux_; } @@ -59,7 +67,7 @@ namespace edm { const_iterator end() const { return unscheduledWorkers_.end(); } template - void runNowAsync(WaitingTask* task, + void runNowAsync(WaitingTaskHolder task, typename T::TransitionInfoType const& info, ServiceToken const& token, StreamID streamID, @@ -81,7 +89,7 @@ namespace edm { } template - void runAccumulatorsAsync(WaitingTask* task, + void runAccumulatorsAsync(WaitingTaskHolder task, typename T::TransitionInfoType const& info, ServiceToken const& token, StreamID streamID, diff --git a/FWCore/Framework/interface/WorkerManager.h b/FWCore/Framework/interface/WorkerManager.h index 11322ad9c269a..4135b42cbd967 100644 --- a/FWCore/Framework/interface/WorkerManager.h +++ b/FWCore/Framework/interface/WorkerManager.h @@ -11,6 +11,7 @@ #include "FWCore/Framework/src/Worker.h" #include "FWCore/Framework/src/WorkerRegistry.h" #include "FWCore/ServiceRegistry/interface/ServiceRegistry.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Utilities/interface/ConvertException.h" #include "FWCore/Utilities/interface/Exception.h" #include "FWCore/Utilities/interface/get_underlying_safe.h" @@ -41,6 +42,9 @@ namespace edm { WorkerManager(std::shared_ptr modReg, std::shared_ptr actReg, ExceptionToActionTable const& actions); + + void deleteModuleIfExists(std::string const& moduleLabel); + void addToUnscheduledWorkers(ParameterSet& pset, ProductRegistry& preg, PreallocationConfiguration const* prealloc, @@ -50,13 +54,7 @@ namespace edm { std::vector& shouldBeUsedLabels); template - void processOneOccurrence(typename T::TransitionInfoType&, - StreamID, - typename T::Context const* topContext, - U const* context, - bool cleaningUpAfterException = false); - template - void processOneOccurrenceAsync(WaitingTask*, + void processOneOccurrenceAsync(WaitingTaskHolder, typename T::TransitionInfoType&, ServiceToken const&, StreamID, @@ -64,7 +62,7 @@ namespace edm { U const* context); template - void processAccumulatorsAsync(WaitingTask*, + void processAccumulatorsAsync(WaitingTaskHolder, typename T::TransitionInfoType const&, ServiceToken const&, StreamID, @@ -104,52 +102,24 @@ namespace edm { }; template - void WorkerManager::processOneOccurrence(typename T::TransitionInfoType& info, - StreamID streamID, - typename T::Context const* topContext, - U const* context, - bool cleaningUpAfterException) { - this->resetAll(); - - auto waitTask = make_empty_waiting_task(); - waitTask->increment_ref_count(); - processOneOccurrenceAsync( - waitTask.get(), info, ServiceRegistry::instance().presentToken(), streamID, topContext, context); - waitTask->wait_for_all(); - if (waitTask->exceptionPtr() != nullptr) { - try { - convertException::wrap([&]() { std::rethrow_exception(*(waitTask->exceptionPtr())); }); - } catch (cms::Exception& ex) { - if (ex.context().empty()) { - addContextAndPrintException( - "Calling function WorkerManager::processOneOccurrence", ex, cleaningUpAfterException); - } else { - addContextAndPrintException("", ex, cleaningUpAfterException); - } - throw; - } - } - } - - template - void WorkerManager::processOneOccurrenceAsync(WaitingTask* task, + void WorkerManager::processOneOccurrenceAsync(WaitingTaskHolder task, typename T::TransitionInfoType& info, ServiceToken const& token, StreamID streamID, typename T::Context const* topContext, U const* context) { //make sure the unscheduled items see this run or lumi transition - unscheduled_.runNowAsync(task, info, token, streamID, topContext, context); + unscheduled_.runNowAsync(std::move(task), info, token, streamID, topContext, context); } template - void WorkerManager::processAccumulatorsAsync(WaitingTask* task, + void WorkerManager::processAccumulatorsAsync(WaitingTaskHolder task, typename T::TransitionInfoType const& info, ServiceToken const& token, StreamID streamID, ParentContext const& parentContext, typename T::Context const* context) { - unscheduled_.runAccumulatorsAsync(task, info, token, streamID, parentContext, context); + unscheduled_.runAccumulatorsAsync(std::move(task), info, token, streamID, parentContext, context); } } // namespace edm diff --git a/FWCore/Framework/interface/global/EDAnalyzerBase.h b/FWCore/Framework/interface/global/EDAnalyzerBase.h index c9980972fb2c6..b5bbda7d14fd4 100644 --- a/FWCore/Framework/interface/global/EDAnalyzerBase.h +++ b/FWCore/Framework/interface/global/EDAnalyzerBase.h @@ -23,6 +23,7 @@ // user include files #include "FWCore/Framework/interface/EDConsumerBase.h" #include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "DataFormats/Provenance/interface/ModuleDescription.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" @@ -34,7 +35,6 @@ namespace edm { class StreamID; class ActivityRegistry; class ThinnedAssociationsHelper; - class WaitingTask; namespace maker { template @@ -75,8 +75,9 @@ namespace edm { private: bool doEvent(EventTransitionInfo const&, ActivityRegistry*, ModuleCallingContext const*); //For now this is a placeholder - /*virtual*/ void preActionBeforeRunEventAsync(WaitingTask*, ModuleCallingContext const&, Principal const&) const { - } + /*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder, + ModuleCallingContext const&, + Principal const&) const {} void doPreallocate(PreallocationConfiguration const&); void doBeginJob(); diff --git a/FWCore/Framework/interface/global/EDFilterBase.h b/FWCore/Framework/interface/global/EDFilterBase.h index b4ee7536f0b1f..5a4952992de34 100644 --- a/FWCore/Framework/interface/global/EDFilterBase.h +++ b/FWCore/Framework/interface/global/EDFilterBase.h @@ -27,6 +27,7 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "DataFormats/Provenance/interface/ModuleDescription.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" // forward declarations @@ -36,7 +37,6 @@ namespace edm { class StreamID; class ActivityRegistry; class ThinnedAssociationsHelper; - class WaitingTask; class WaitingTaskWithArenaHolder; namespace maker { @@ -78,7 +78,7 @@ namespace edm { ModuleCallingContext const*, WaitingTaskWithArenaHolder&); //For now this is a placeholder - /*virtual*/ void preActionBeforeRunEventAsync(WaitingTask* iTask, + /*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder iTask, ModuleCallingContext const& iModuleCallingContext, Principal const& iPrincipal) const {} diff --git a/FWCore/Framework/interface/global/EDProducerBase.h b/FWCore/Framework/interface/global/EDProducerBase.h index e9415004ae77b..2869125c864cb 100644 --- a/FWCore/Framework/interface/global/EDProducerBase.h +++ b/FWCore/Framework/interface/global/EDProducerBase.h @@ -27,6 +27,7 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "DataFormats/Provenance/interface/ModuleDescription.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" // forward declarations @@ -37,7 +38,6 @@ namespace edm { class GlobalSchedule; class ActivityRegistry; class ThinnedAssociationsHelper; - class WaitingTask; class WaitingTaskWithArenaHolder; namespace maker { @@ -111,7 +111,7 @@ namespace edm { virtual void produce(StreamID, Event&, EventSetup const&) const = 0; //For now this is a placeholder - /*virtual*/ void preActionBeforeRunEventAsync(WaitingTask* iTask, + /*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder iTask, ModuleCallingContext const& iModuleCallingContext, Principal const& iPrincipal) const {} diff --git a/FWCore/Framework/interface/global/OutputModuleBase.h b/FWCore/Framework/interface/global/OutputModuleBase.h index 7db008d1d5234..26e51f244545a 100644 --- a/FWCore/Framework/interface/global/OutputModuleBase.h +++ b/FWCore/Framework/interface/global/OutputModuleBase.h @@ -39,6 +39,7 @@ #include "FWCore/Framework/interface/EDConsumerBase.h" #include "FWCore/Framework/interface/getAllTriggerNames.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Utilities/interface/propagate_const.h" // forward declarations @@ -49,7 +50,6 @@ namespace edm { class PreallocationConfiguration; class ActivityRegistry; class ThinnedAssociationsHelper; - class WaitingTask; template class OutputModuleCommunicatorT; @@ -129,7 +129,7 @@ namespace edm { bool doEvent(EventTransitionInfo const&, ActivityRegistry*, ModuleCallingContext const*); //For now this is a placeholder - /*virtual*/ void preActionBeforeRunEventAsync(WaitingTask* iTask, + /*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder iTask, ModuleCallingContext const& iModuleCallingContext, Principal const& iPrincipal) const {} diff --git a/FWCore/Framework/interface/limited/EDAnalyzerBase.h b/FWCore/Framework/interface/limited/EDAnalyzerBase.h index fa48e01c76d82..648c4f9798c4d 100644 --- a/FWCore/Framework/interface/limited/EDAnalyzerBase.h +++ b/FWCore/Framework/interface/limited/EDAnalyzerBase.h @@ -26,6 +26,7 @@ #include "DataFormats/Provenance/interface/ModuleDescription.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" #include "FWCore/Concurrency/interface/LimitedTaskQueue.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" // forward declarations @@ -35,7 +36,6 @@ namespace edm { class StreamID; class ActivityRegistry; class ThinnedAssociationsHelper; - class WaitingTask; namespace maker { template @@ -80,7 +80,7 @@ namespace edm { private: bool doEvent(EventTransitionInfo const&, ActivityRegistry*, ModuleCallingContext const*); //For now this is a placeholder - /*virtual*/ void preActionBeforeRunEventAsync(WaitingTask* iTask, + /*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder iTask, ModuleCallingContext const& iModuleCallingContext, Principal const& iPrincipal) const {} diff --git a/FWCore/Framework/interface/limited/EDFilterBase.h b/FWCore/Framework/interface/limited/EDFilterBase.h index faf665e50c575..67d8e47c94c60 100644 --- a/FWCore/Framework/interface/limited/EDFilterBase.h +++ b/FWCore/Framework/interface/limited/EDFilterBase.h @@ -28,6 +28,7 @@ #include "DataFormats/Provenance/interface/ModuleDescription.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" #include "FWCore/Concurrency/interface/LimitedTaskQueue.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" // forward declarations @@ -37,7 +38,6 @@ namespace edm { class StreamID; class ActivityRegistry; class ThinnedAssociationsHelper; - class WaitingTask; namespace maker { template @@ -78,8 +78,9 @@ namespace edm { private: bool doEvent(EventTransitionInfo const&, ActivityRegistry*, ModuleCallingContext const*); //For now this is a placeholder - /*virtual*/ void preActionBeforeRunEventAsync(WaitingTask*, ModuleCallingContext const&, Principal const&) const { - } + /*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder, + ModuleCallingContext const&, + Principal const&) const {} void doPreallocate(PreallocationConfiguration const&); void doBeginJob(); diff --git a/FWCore/Framework/interface/limited/EDProducerBase.h b/FWCore/Framework/interface/limited/EDProducerBase.h index 6e08b30c15a4c..9538e2a03fbe8 100644 --- a/FWCore/Framework/interface/limited/EDProducerBase.h +++ b/FWCore/Framework/interface/limited/EDProducerBase.h @@ -28,6 +28,7 @@ #include "DataFormats/Provenance/interface/ModuleDescription.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" #include "FWCore/Concurrency/interface/LimitedTaskQueue.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" // forward declarations @@ -38,7 +39,6 @@ namespace edm { class GlobalSchedule; class ActivityRegistry; class ThinnedAssociationsHelper; - class WaitingTask; namespace maker { template @@ -111,7 +111,7 @@ namespace edm { virtual void produce(StreamID, Event&, EventSetup const&) const = 0; //For now this is a placeholder - /*virtual*/ void preActionBeforeRunEventAsync(WaitingTask* iTask, + /*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder iTask, ModuleCallingContext const& iModuleCallingContext, Principal const& iPrincipal) const {} diff --git a/FWCore/Framework/interface/limited/OutputModuleBase.h b/FWCore/Framework/interface/limited/OutputModuleBase.h index 51c05dcb44c54..27859a7451ddd 100644 --- a/FWCore/Framework/interface/limited/OutputModuleBase.h +++ b/FWCore/Framework/interface/limited/OutputModuleBase.h @@ -41,6 +41,7 @@ #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" #include "FWCore/Utilities/interface/propagate_const.h" #include "FWCore/Concurrency/interface/LimitedTaskQueue.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" // forward declarations namespace edm { @@ -50,7 +51,6 @@ namespace edm { class PreallocationConfiguration; class ActivityRegistry; class ThinnedAssociationsHelper; - class WaitingTask; template class OutputModuleCommunicatorT; @@ -133,8 +133,9 @@ namespace edm { bool doEvent(EventTransitionInfo const&, ActivityRegistry*, ModuleCallingContext const*); //For now this is a placeholder - /*virtual*/ void preActionBeforeRunEventAsync(WaitingTask*, ModuleCallingContext const&, Principal const&) const { - } + /*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder, + ModuleCallingContext const&, + Principal const&) const {} void doBeginProcessBlock(ProcessBlockPrincipal const&, ModuleCallingContext const*) {} void doAccessInputProcessBlock(ProcessBlockPrincipal const&, ModuleCallingContext const*) {} diff --git a/FWCore/Framework/interface/one/EDAnalyzerBase.h b/FWCore/Framework/interface/one/EDAnalyzerBase.h index 33f5bd6fd2c83..e21571493a3d2 100644 --- a/FWCore/Framework/interface/one/EDAnalyzerBase.h +++ b/FWCore/Framework/interface/one/EDAnalyzerBase.h @@ -26,6 +26,7 @@ #include "FWCore/Framework/interface/SharedResourcesAcquirer.h" #include "DataFormats/Provenance/interface/ModuleDescription.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" // forward declarations namespace edm { @@ -34,7 +35,6 @@ namespace edm { class PreallocationConfiguration; class ActivityRegistry; class ThinnedAssociationsHelper; - class WaitingTask; namespace maker { template @@ -76,8 +76,9 @@ namespace edm { private: bool doEvent(EventTransitionInfo const&, ActivityRegistry*, ModuleCallingContext const*); //For now this is a placeholder - /*virtual*/ void preActionBeforeRunEventAsync(WaitingTask*, ModuleCallingContext const&, Principal const&) const { - } + /*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder, + ModuleCallingContext const&, + Principal const&) const {} void doPreallocate(PreallocationConfiguration const&); virtual void preallocLumis(unsigned int); diff --git a/FWCore/Framework/interface/one/EDFilterBase.h b/FWCore/Framework/interface/one/EDFilterBase.h index 732b509e89d4d..f928380e46e52 100644 --- a/FWCore/Framework/interface/one/EDFilterBase.h +++ b/FWCore/Framework/interface/one/EDFilterBase.h @@ -27,6 +27,7 @@ #include "FWCore/Framework/interface/SharedResourcesAcquirer.h" #include "DataFormats/Provenance/interface/ModuleDescription.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" // forward declarations namespace edm { @@ -35,7 +36,6 @@ namespace edm { class PreallocationConfiguration; class ActivityRegistry; class ThinnedAssociationsHelper; - class WaitingTask; namespace maker { template @@ -75,8 +75,9 @@ namespace edm { private: bool doEvent(EventTransitionInfo const&, ActivityRegistry*, ModuleCallingContext const*); //For now this is a placeholder - /*virtual*/ void preActionBeforeRunEventAsync(WaitingTask*, ModuleCallingContext const&, Principal const&) const { - } + /*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder, + ModuleCallingContext const&, + Principal const&) const {} void doPreallocate(PreallocationConfiguration const&); virtual void preallocLumis(unsigned int); diff --git a/FWCore/Framework/interface/one/EDProducerBase.h b/FWCore/Framework/interface/one/EDProducerBase.h index 1b34f455f3110..a70d96a9ec77a 100644 --- a/FWCore/Framework/interface/one/EDProducerBase.h +++ b/FWCore/Framework/interface/one/EDProducerBase.h @@ -27,6 +27,7 @@ #include "FWCore/Framework/interface/SharedResourcesAcquirer.h" #include "DataFormats/Provenance/interface/ModuleDescription.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" // forward declarations namespace edm { @@ -35,7 +36,6 @@ namespace edm { class PreallocationConfiguration; class ActivityRegistry; class ThinnedAssociationsHelper; - class WaitingTask; namespace maker { template @@ -75,8 +75,9 @@ namespace edm { private: bool doEvent(EventTransitionInfo const&, ActivityRegistry*, ModuleCallingContext const*); //For now this is a placeholder - /*virtual*/ void preActionBeforeRunEventAsync(WaitingTask*, ModuleCallingContext const&, Principal const&) const { - } + /*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder, + ModuleCallingContext const&, + Principal const&) const {} void doPreallocate(PreallocationConfiguration const&); virtual void preallocLumis(unsigned int); diff --git a/FWCore/Framework/interface/one/OutputModuleBase.h b/FWCore/Framework/interface/one/OutputModuleBase.h index 812263c58cd7a..9beb0bcc206ce 100644 --- a/FWCore/Framework/interface/one/OutputModuleBase.h +++ b/FWCore/Framework/interface/one/OutputModuleBase.h @@ -41,6 +41,7 @@ #include "FWCore/Framework/interface/getAllTriggerNames.h" #include "FWCore/Framework/interface/SharedResourcesAcquirer.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Utilities/interface/propagate_const.h" // forward declarations @@ -52,7 +53,6 @@ namespace edm { class ActivityRegistry; class ThinnedAssociationsHelper; class SubProcessParentageHelper; - class WaitingTask; template class OutputModuleCommunicatorT; @@ -235,7 +235,7 @@ namespace edm { virtual bool shouldWeCloseFile() const { return false; } virtual void write(EventForOutput const&) = 0; - virtual void preActionBeforeRunEventAsync(WaitingTask* iTask, + virtual void preActionBeforeRunEventAsync(WaitingTaskHolder iTask, ModuleCallingContext const& iModuleCallingContext, Principal const& iPrincipal) const {} diff --git a/FWCore/Framework/interface/stream/EDAnalyzerAdaptor.h b/FWCore/Framework/interface/stream/EDAnalyzerAdaptor.h index 72c4ccdc0a1bf..9a50c7bafa379 100644 --- a/FWCore/Framework/interface/stream/EDAnalyzerAdaptor.h +++ b/FWCore/Framework/interface/stream/EDAnalyzerAdaptor.h @@ -33,6 +33,7 @@ #include "FWCore/Framework/interface/stream/makeGlobal.h" #include "FWCore/Framework/src/MakeModuleHelper.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" // forward declarations @@ -151,9 +152,11 @@ namespace edm { r.setConsumer(consumer()); Run const& cnstR = r; RunIndex ri = rp.index(); + ESParentContext pc{mcc}; const EventSetup c{info, static_cast(Transition::BeginRun), this->consumer()->esGetTokenIndices(Transition::BeginRun), + pc, false}; MyGlobalRun::beginRun(cnstR, c, m_global.get(), m_runs[ri]); typename T::RunContext rc(m_runs[ri].get(), m_global.get()); @@ -168,9 +171,11 @@ namespace edm { RunIndex ri = rp.index(); typename T::RunContext rc(m_runs[ri].get(), m_global.get()); + ESParentContext pc{mcc}; const EventSetup c{info, static_cast(Transition::EndRun), this->consumer()->esGetTokenIndices(Transition::EndRun), + pc, false}; MyGlobalRunSummary::globalEndRun(r, c, &rc, m_runSummaries[ri].get()); MyGlobalRun::endRun(r, c, &rc); @@ -186,9 +191,11 @@ namespace edm { LuminosityBlockIndex li = lbp.index(); RunIndex ri = lbp.runPrincipal().index(); typename T::RunContext rc(m_runs[ri].get(), m_global.get()); + ESParentContext pc{mcc}; const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), this->consumer()->esGetTokenIndices(Transition::BeginLuminosityBlock), + pc, false}; MyGlobalLuminosityBlock::beginLuminosityBlock(cnstLb, c, &rc, m_lumis[li]); typename T::LuminosityBlockContext lc(m_lumis[li].get(), m_runs[ri].get(), m_global.get()); @@ -204,9 +211,11 @@ namespace edm { LuminosityBlockIndex li = lbp.index(); RunIndex ri = lbp.runPrincipal().index(); typename T::LuminosityBlockContext lc(m_lumis[li].get(), m_runs[ri].get(), m_global.get()); + ESParentContext pc{mcc}; const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), this->consumer()->esGetTokenIndices(Transition::EndLuminosityBlock), + pc, false}; MyGlobalLuminosityBlockSummary::globalEndLuminosityBlock(lb, c, &lc, m_lumiSummaries[li].get()); MyGlobalLuminosityBlock::endLuminosityBlock(lb, c, &lc); diff --git a/FWCore/Framework/interface/stream/EDAnalyzerAdaptorBase.h b/FWCore/Framework/interface/stream/EDAnalyzerAdaptorBase.h index 7f9b08bb07bcf..6241b287010da 100644 --- a/FWCore/Framework/interface/stream/EDAnalyzerAdaptorBase.h +++ b/FWCore/Framework/interface/stream/EDAnalyzerAdaptorBase.h @@ -30,6 +30,7 @@ #include "DataFormats/Provenance/interface/ModuleDescription.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" #include "FWCore/ServiceRegistry/interface/ConsumesInfo.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Utilities/interface/StreamID.h" #include "FWCore/Utilities/interface/RunIndex.h" #include "FWCore/Utilities/interface/LuminosityBlockIndex.h" @@ -40,13 +41,13 @@ namespace edm { class ModuleCallingContext; + class ModuleProcessName; class ProductResolverIndexHelper; class EDConsumerBase; class PreallocationConfiguration; class ProductResolverIndexAndSkipBit; class ActivityRegistry; class ThinnedAssociationsHelper; - class WaitingTask; namespace maker { template @@ -111,7 +112,8 @@ namespace edm { const EDConsumerBase* consumer() const; - void modulesWhoseProductsAreConsumed(std::vector& modules, + void modulesWhoseProductsAreConsumed(std::array*, NumBranchTypes>& modules, + std::vector& modulesInPreviousProcesses, ProductRegistry const& preg, std::map const& labelsToDesc, std::string const& processName) const; @@ -126,8 +128,9 @@ namespace edm { virtual void preallocLumis(unsigned int) {} //For now this is a placeholder - /*virtual*/ void preActionBeforeRunEventAsync(WaitingTask*, ModuleCallingContext const&, Principal const&) const { - } + /*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder, + ModuleCallingContext const&, + Principal const&) const {} virtual void setupStreamModules() = 0; virtual void doBeginJob() = 0; diff --git a/FWCore/Framework/interface/stream/EDFilterAdaptorBase.h b/FWCore/Framework/interface/stream/EDFilterAdaptorBase.h index 200234d1f9550..b871f116ab06f 100644 --- a/FWCore/Framework/interface/stream/EDFilterAdaptorBase.h +++ b/FWCore/Framework/interface/stream/EDFilterAdaptorBase.h @@ -25,6 +25,7 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "DataFormats/Provenance/interface/ModuleDescription.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Utilities/interface/StreamID.h" #include "FWCore/Utilities/interface/RunIndex.h" #include "FWCore/Utilities/interface/LuminosityBlockIndex.h" @@ -35,7 +36,6 @@ namespace edm { class ModuleCallingContext; class ActivityRegistry; - class WaitingTask; class WaitingTaskWithArenaHolder; namespace maker { @@ -76,8 +76,9 @@ namespace edm { WaitingTaskWithArenaHolder&); //For now this is a placeholder - /*virtual*/ void preActionBeforeRunEventAsync(WaitingTask*, ModuleCallingContext const&, Principal const&) const { - } + /*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder, + ModuleCallingContext const&, + Principal const&) const {} }; } // namespace stream } // namespace edm diff --git a/FWCore/Framework/interface/stream/EDProducerAdaptorBase.h b/FWCore/Framework/interface/stream/EDProducerAdaptorBase.h index 23d8b59c756be..7b921eb9ade15 100644 --- a/FWCore/Framework/interface/stream/EDProducerAdaptorBase.h +++ b/FWCore/Framework/interface/stream/EDProducerAdaptorBase.h @@ -25,6 +25,7 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "DataFormats/Provenance/interface/ModuleDescription.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Utilities/interface/StreamID.h" #include "FWCore/Utilities/interface/RunIndex.h" #include "FWCore/Utilities/interface/LuminosityBlockIndex.h" @@ -35,7 +36,6 @@ namespace edm { class ModuleCallingContext; class ActivityRegistry; - class WaitingTask; class WaitingTaskWithArenaHolder; namespace maker { @@ -76,8 +76,9 @@ namespace edm { WaitingTaskWithArenaHolder&); //For now this is a placeholder - /*virtual*/ void preActionBeforeRunEventAsync(WaitingTask*, ModuleCallingContext const&, Principal const&) const { - } + /*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder, + ModuleCallingContext const&, + Principal const&) const {} }; } // namespace stream } // namespace edm diff --git a/FWCore/Framework/interface/stream/ProducingModuleAdaptor.h b/FWCore/Framework/interface/stream/ProducingModuleAdaptor.h index 0ac1b73dab3ca..b2ac3bc3c20be 100644 --- a/FWCore/Framework/interface/stream/ProducingModuleAdaptor.h +++ b/FWCore/Framework/interface/stream/ProducingModuleAdaptor.h @@ -31,6 +31,7 @@ #include "FWCore/Framework/interface/stream/dummy_helpers.h" #include "FWCore/Framework/interface/stream/makeGlobal.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" // forward declarations namespace edm { @@ -166,9 +167,11 @@ namespace edm { r.setProducer(this->producer()); Run const& cnstR = r; RunIndex ri = rp.index(); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginRun), this->consumer()->esGetTokenIndices(Transition::BeginRun), + parentC, false}; MyGlobalRun::beginRun(cnstR, c, m_global.get(), m_runs[ri]); typename T::RunContext rc(m_runs[ri].get(), m_global.get()); @@ -189,9 +192,11 @@ namespace edm { RunIndex ri = rp.index(); typename T::RunContext rc(m_runs[ri].get(), m_global.get()); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndRun), this->consumer()->esGetTokenIndices(Transition::EndRun), + parentC, false}; MyGlobalRunSummary::globalEndRun(r, c, &rc, m_runSummaries[ri].get()); if constexpr (T::HasAbility::kEndRunProducer) { @@ -213,9 +218,11 @@ namespace edm { LuminosityBlockIndex li = lbp.index(); RunIndex ri = lbp.runPrincipal().index(); typename T::RunContext rc(m_runs[ri].get(), m_global.get()); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), this->consumer()->esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; MyGlobalLuminosityBlock::beginLuminosityBlock(cnstLb, c, &rc, m_lumis[li]); @@ -238,9 +245,11 @@ namespace edm { LuminosityBlockIndex li = lbp.index(); RunIndex ri = lbp.runPrincipal().index(); typename T::LuminosityBlockContext lc(m_lumis[li].get(), m_runs[ri].get(), m_global.get()); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), this->consumer()->esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; MyGlobalLuminosityBlockSummary::globalEndLuminosityBlock(lb, c, &lc, m_lumiSummaries[li].get()); if constexpr (T::HasAbility::kEndLuminosityBlockProducer) { diff --git a/FWCore/Framework/interface/stream/ProducingModuleAdaptorBase.h b/FWCore/Framework/interface/stream/ProducingModuleAdaptorBase.h index 3da643c0518b6..3d304acb939b3 100644 --- a/FWCore/Framework/interface/stream/ProducingModuleAdaptorBase.h +++ b/FWCore/Framework/interface/stream/ProducingModuleAdaptorBase.h @@ -45,6 +45,7 @@ namespace edm { class Event; class ModuleCallingContext; + class ModuleProcessName; class ProductResolverIndexHelper; class EDConsumerBase; class PreallocationConfiguration; @@ -102,7 +103,8 @@ namespace edm { void updateLookup(BranchType iBranchType, ProductResolverIndexHelper const&, bool iPrefetchMayGet); void updateLookup(eventsetup::ESRecordsToProxyIndices const&); - void modulesWhoseProductsAreConsumed(std::vector& modules, + void modulesWhoseProductsAreConsumed(std::array*, NumBranchTypes>& modules, + std::vector& modulesInPreviousProcesses, ProductRegistry const& preg, std::map const& labelsToDesc, std::string const& processName) const; diff --git a/FWCore/Framework/src/DataProxy.cc b/FWCore/Framework/src/DataProxy.cc index 30d265babfc36..d6f7597333990 100644 --- a/FWCore/Framework/src/DataProxy.cc +++ b/FWCore/Framework/src/DataProxy.cc @@ -14,15 +14,19 @@ #include // user include files +#include "FWCore/Concurrency/interface/include_first_syncWait.h" + #include "FWCore/Framework/interface/DataProxy.h" #include "FWCore/Framework/interface/ComponentDescription.h" #include "FWCore/Framework/interface/MakeDataException.h" #include "FWCore/Framework/interface/EventSetupRecord.h" +#include "FWCore/Framework/interface/EventSetupImpl.h" #include "FWCore/ServiceRegistry/interface/ActivityRegistry.h" #include "FWCore/ServiceRegistry/interface/ServiceRegistry.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/Concurrency/interface/WaitingTaskList.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" -#include "FWCore/Framework/src/esTaskArenas.h" namespace edm { namespace eventsetup { @@ -61,12 +65,13 @@ namespace edm { } // namespace - void DataProxy::prefetchAsync(WaitingTask* iTask, + void DataProxy::prefetchAsync(WaitingTaskHolder iTask, EventSetupRecordImpl const& iRecord, DataKey const& iKey, EventSetupImpl const* iEventSetupImpl, - ServiceToken const& iToken) const { - const_cast(this)->prefetchAsyncImpl(iTask, iRecord, iKey, iEventSetupImpl, iToken); + ServiceToken const& iToken, + ESParentContext const& iParent) const { + const_cast(this)->prefetchAsyncImpl(iTask, iRecord, iKey, iEventSetupImpl, iToken, iParent); } void const* DataProxy::getAfterPrefetch(const EventSetupRecordImpl& iRecord, @@ -95,21 +100,20 @@ namespace edm { const DataKey& iKey, bool iTransiently, ActivityRegistry const* activityRegistry, - EventSetupImpl const* iEventSetupImpl) const { + EventSetupImpl const* iEventSetupImpl, + ESParentContext const& iParent) const { if (!cacheIsValid()) { - auto waitTask = edm::make_empty_waiting_task(); - waitTask->set_ref_count(2); - auto waitTaskPtr = waitTask.get(); auto token = ServiceRegistry::instance().presentToken(); - edm::esTaskArena().execute([this, waitTaskPtr, &iRecord, &iKey, iEventSetupImpl, token]() { - prefetchAsync(waitTaskPtr, iRecord, iKey, iEventSetupImpl, token); - waitTaskPtr->decrement_ref_count(); - waitTaskPtr->wait_for_all(); + std::exception_ptr exceptPtr{}; + iEventSetupImpl->taskArena()->execute([this, &exceptPtr, &iRecord, &iKey, iEventSetupImpl, token, iParent]() { + exceptPtr = syncWait([&, this](WaitingTaskHolder&& holder) { + prefetchAsync(std::move(holder), iRecord, iKey, iEventSetupImpl, token, iParent); + }); }); cache_ = getAfterPrefetchImpl(); cacheIsValid_.store(true, std::memory_order_release); - if (waitTask->exceptionPtr()) { - std::rethrow_exception(*waitTask->exceptionPtr()); + if (exceptPtr) { + std::rethrow_exception(exceptPtr); } } return getAfterPrefetch(iRecord, iKey, iTransiently); diff --git a/FWCore/Framework/src/EDAnalyzer.cc b/FWCore/Framework/src/EDAnalyzer.cc index 812880ac2358f..a451efb264bd2 100644 --- a/FWCore/Framework/src/EDAnalyzer.cc +++ b/FWCore/Framework/src/EDAnalyzer.cc @@ -21,6 +21,7 @@ #include "DataFormats/Provenance/interface/ProductRegistry.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" namespace edm { EDAnalyzer::~EDAnalyzer() {} @@ -33,7 +34,9 @@ namespace edm { e.setConsumer(this); e.setSharedResourcesAcquirer(&resourceAcquirer_); EventSignalsSentry sentry(act, mcc); - const EventSetup c{info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), false}; + ESParentContext parentC(mcc); + const EventSetup c{ + info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), parentC, false}; this->analyze(e, c); return true; } @@ -50,8 +53,9 @@ namespace edm { bool EDAnalyzer::doBeginRun(RunTransitionInfo const& info, ModuleCallingContext const* mcc) { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), parentC, false}; this->beginRun(r, c); return true; } @@ -59,8 +63,9 @@ namespace edm { bool EDAnalyzer::doEndRun(RunTransitionInfo const& info, ModuleCallingContext const* mcc) { Run r(info, moduleDescription_, mcc, true); r.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->endRun(r, c); return true; } @@ -68,9 +73,11 @@ namespace edm { bool EDAnalyzer::doBeginLuminosityBlock(LumiTransitionInfo const& info, ModuleCallingContext const* mcc) { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; this->beginLuminosityBlock(lb, c); return true; @@ -79,9 +86,11 @@ namespace edm { bool EDAnalyzer::doEndLuminosityBlock(LumiTransitionInfo const& info, ModuleCallingContext const* mcc) { LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->endLuminosityBlock(lb, c); return true; diff --git a/FWCore/Framework/src/EDConsumerBase.cc b/FWCore/Framework/src/EDConsumerBase.cc index 19efadce2b9c1..ec670f3ff0e94 100644 --- a/FWCore/Framework/src/EDConsumerBase.cc +++ b/FWCore/Framework/src/EDConsumerBase.cc @@ -22,6 +22,7 @@ #include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Framework/interface/ESRecordsToProxyIndices.h" #include "FWCore/Framework/interface/ComponentDescription.h" +#include "FWCore/Framework/interface/ModuleProcessName.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/BranchType.h" #include "FWCore/Utilities/interface/Likely.h" @@ -467,41 +468,55 @@ namespace { } } // namespace -void EDConsumerBase::modulesWhoseProductsAreConsumed(std::vector& modules, - ProductRegistry const& preg, - std::map const& labelsToDesc, - std::string const& processName) const { - ProductResolverIndexHelper const& iHelper = *preg.productLookup(InEvent); - +void EDConsumerBase::modulesWhoseProductsAreConsumed( + std::array*, NumBranchTypes>& modulesAll, + std::vector& modulesInPreviousProcesses, + ProductRegistry const& preg, + std::map const& labelsToDesc, + std::string const& processName) const { std::set alreadyFound; + auto modulesInPreviousProcessesEmplace = [&modulesInPreviousProcesses](std::string_view module, + std::string_view process) { + auto it = std::lower_bound( + modulesInPreviousProcesses.begin(), modulesInPreviousProcesses.end(), ModuleProcessName(module, process)); + modulesInPreviousProcesses.emplace(it, module, process); + }; + auto itKind = m_tokenInfo.begin(); auto itLabels = m_tokenInfo.begin(); for (auto itInfo = m_tokenInfo.begin(), itEnd = m_tokenInfo.end(); itInfo != itEnd; ++itInfo, ++itKind, ++itLabels) { - if (itInfo->m_branchType == InEvent and (not itInfo->m_index.skipCurrentProcess())) { - const unsigned int labelStart = itLabels->m_startOfModuleLabel; - const char* const consumedModuleLabel = &(m_tokenLabels[labelStart]); - const char* const consumedProductInstance = consumedModuleLabel + itLabels->m_deltaToProductInstance; - const char* const consumedProcessName = consumedModuleLabel + itLabels->m_deltaToProcessName; + ProductResolverIndexHelper const& helper = *preg.productLookup(itInfo->m_branchType); + std::vector& modules = *modulesAll[itInfo->m_branchType]; + const unsigned int labelStart = itLabels->m_startOfModuleLabel; + const char* const consumedModuleLabel = &(m_tokenLabels[labelStart]); + const char* const consumedProductInstance = consumedModuleLabel + itLabels->m_deltaToProductInstance; + const char* const consumedProcessName = consumedModuleLabel + itLabels->m_deltaToProcessName; + + if (not itInfo->m_index.skipCurrentProcess()) { if (*consumedModuleLabel != '\0') { // not a consumesMany if (*consumedProcessName != '\0') { // process name is specified in consumes call - if (processName == consumedProcessName && - iHelper.index( + if (helper.index( *itKind, itInfo->m_type, consumedModuleLabel, consumedProductInstance, consumedProcessName) != - ProductResolverIndexInvalid) { - insertFoundModuleLabel(*itKind, - itInfo->m_type, - consumedModuleLabel, - consumedProductInstance, - modules, - alreadyFound, - labelsToDesc, - preg); + ProductResolverIndexInvalid) { + if (processName == consumedProcessName) { + insertFoundModuleLabel(*itKind, + itInfo->m_type, + consumedModuleLabel, + consumedProductInstance, + modules, + alreadyFound, + labelsToDesc, + preg); + } else { + // Product explicitly from different process than the current process, so must refer to an earlier process (unless it ends up "not found") + modulesInPreviousProcessesEmplace(consumedModuleLabel, consumedProcessName); + } } } else { // process name was empty - auto matches = iHelper.relatedIndexes(*itKind, itInfo->m_type, consumedModuleLabel, consumedProductInstance); + auto matches = helper.relatedIndexes(*itKind, itInfo->m_type, consumedModuleLabel, consumedProductInstance); for (unsigned int j = 0; j < matches.numberOfMatches(); ++j) { if (processName == matches.processName(j)) { insertFoundModuleLabel(*itKind, @@ -512,12 +527,16 @@ void EDConsumerBase::modulesWhoseProductsAreConsumed(std::vectorm_index.productResolverIndex() == ProductResolverIndexInvalid) { - auto matches = iHelper.relatedIndexes(*itKind, itInfo->m_type); + auto matches = helper.relatedIndexes(*itKind, itInfo->m_type); for (unsigned int j = 0; j < matches.numberOfMatches(); ++j) { if (processName == matches.processName(j)) { insertFoundModuleLabel(*itKind, @@ -528,9 +547,22 @@ void EDConsumerBase::modulesWhoseProductsAreConsumed(std::vectorm_type, consumedModuleLabel, consumedProductInstance); + for (unsigned int j = 0; j < matches.numberOfMatches(); ++j) { + if (processName != matches.processName(j)) { + modulesInPreviousProcessesEmplace(matches.moduleLabel(j), matches.processName(j)); + } + } } } } diff --git a/FWCore/Framework/src/EDFilter.cc b/FWCore/Framework/src/EDFilter.cc index afd7702a72273..0fe1cc68d28d5 100644 --- a/FWCore/Framework/src/EDFilter.cc +++ b/FWCore/Framework/src/EDFilter.cc @@ -11,6 +11,7 @@ #include "FWCore/Framework/src/edmodule_mightGet_config.h" #include "FWCore/Framework/src/EventSignalsSentry.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "SharedResourcesRegistry.h" @@ -32,8 +33,11 @@ namespace edm { e.setProducer(this, &previousParentage_); e.setSharedResourcesAcquirer(&resourceAcquirer_); EventSignalsSentry sentry(act, mcc); + ESParentContext parentC(mcc); rc = this->filter( - e, EventSetup{info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), false}); + e, + EventSetup{ + info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), parentC, false}); commit_(e, &previousParentageId_); return rc; } @@ -51,10 +55,13 @@ namespace edm { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); Run const& cnstR = r; - this->beginRun( - cnstR, - EventSetup{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}); + ESParentContext parentC(mcc); + this->beginRun(cnstR, + EventSetup{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}); commit_(r); return; } @@ -63,9 +70,11 @@ namespace edm { Run r(info, moduleDescription_, mcc, true); r.setConsumer(this); Run const& cnstR = r; + ESParentContext parentC(mcc); this->endRun( cnstR, - EventSetup{info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}); + EventSetup{ + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}); commit_(r); return; } @@ -74,10 +83,12 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); this->beginLuminosityBlock(cnstLb, EventSetup{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}); commit_(lb); } @@ -86,10 +97,12 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); this->endLuminosityBlock(cnstLb, EventSetup{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}); commit_(lb); return; diff --git a/FWCore/Framework/src/EDLooperBase.cc b/FWCore/Framework/src/EDLooperBase.cc index 6b7fdf63ea43e..85ba5e0ccbcb7 100644 --- a/FWCore/Framework/src/EDLooperBase.cc +++ b/FWCore/Framework/src/EDLooperBase.cc @@ -26,6 +26,7 @@ #include "FWCore/ServiceRegistry/interface/ModuleCallingContext.h" #include "FWCore/ServiceRegistry/interface/ParentContext.h" #include "FWCore/ServiceRegistry/interface/StreamContext.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" namespace edm { @@ -54,7 +55,8 @@ namespace edm { Status status = kContinue; try { - const EventSetup es{esi, static_cast(Transition::Event), nullptr, false}; + ESParentContext parentC(&moduleCallingContext_); + const EventSetup es{esi, static_cast(Transition::Event), nullptr, parentC, false}; status = duringLoop(event, es, ioController); } catch (cms::Exception& e) { e.addContext("Calling the 'duringLoop' method of a looper"); @@ -69,7 +71,8 @@ namespace edm { } EDLooperBase::Status EDLooperBase::doEndOfLoop(const edm::EventSetupImpl& esi) { - const EventSetup es{esi, static_cast(Transition::EndRun), nullptr, false}; + ESParentContext parentC(&moduleCallingContext_); + const EventSetup es{esi, static_cast(Transition::EndRun), nullptr, parentC, false}; return endOfLoop(es, iCounter_); } @@ -82,7 +85,8 @@ namespace edm { } void EDLooperBase::beginOfJob(const edm::EventSetupImpl& iImpl) { - beginOfJob(EventSetup{iImpl, static_cast(Transition::BeginRun), nullptr, false}); + ESParentContext parentC(&moduleCallingContext_); + beginOfJob(EventSetup{iImpl, static_cast(Transition::BeginRun), nullptr, parentC, false}); } void EDLooperBase::beginOfJob(const edm::EventSetup&) { beginOfJob(); } void EDLooperBase::beginOfJob() {} @@ -99,7 +103,8 @@ namespace edm { ParentContext parentContext(&globalContext); ModuleContextSentry moduleContextSentry(&moduleCallingContext_, parentContext); Run run(iRP, moduleDescription_, &moduleCallingContext_, false); - const EventSetup es{iES, static_cast(Transition::BeginRun), nullptr, false}; + ESParentContext parentC(&moduleCallingContext_); + const EventSetup es{iES, static_cast(Transition::BeginRun), nullptr, parentC, false}; beginRun(run, es); } @@ -113,7 +118,8 @@ namespace edm { ParentContext parentContext(&globalContext); ModuleContextSentry moduleContextSentry(&moduleCallingContext_, parentContext); Run run(iRP, moduleDescription_, &moduleCallingContext_, true); - const EventSetup es{iES, static_cast(Transition::EndRun), nullptr, false}; + ESParentContext parentC(&moduleCallingContext_); + const EventSetup es{iES, static_cast(Transition::EndRun), nullptr, parentC, false}; endRun(run, es); } void EDLooperBase::doBeginLuminosityBlock(LuminosityBlockPrincipal& iLB, @@ -128,7 +134,8 @@ namespace edm { ParentContext parentContext(&globalContext); ModuleContextSentry moduleContextSentry(&moduleCallingContext_, parentContext); LuminosityBlock luminosityBlock(iLB, moduleDescription_, &moduleCallingContext_, false); - const EventSetup es{iES, static_cast(Transition::BeginLuminosityBlock), nullptr, false}; + ESParentContext parentC(&moduleCallingContext_); + const EventSetup es{iES, static_cast(Transition::BeginLuminosityBlock), nullptr, parentC, false}; beginLuminosityBlock(luminosityBlock, es); } void EDLooperBase::doEndLuminosityBlock(LuminosityBlockPrincipal& iLB, @@ -143,7 +150,8 @@ namespace edm { ParentContext parentContext(&globalContext); ModuleContextSentry moduleContextSentry(&moduleCallingContext_, parentContext); LuminosityBlock luminosityBlock(iLB, moduleDescription_, &moduleCallingContext_, true); - const EventSetup es{iES, static_cast(Transition::EndLuminosityBlock), nullptr, false}; + ESParentContext parentC(&moduleCallingContext_); + const EventSetup es{iES, static_cast(Transition::EndLuminosityBlock), nullptr, parentC, false}; endLuminosityBlock(luminosityBlock, es); } diff --git a/FWCore/Framework/src/EDProducer.cc b/FWCore/Framework/src/EDProducer.cc index 88e5c770655b1..d6ac5da139aff 100644 --- a/FWCore/Framework/src/EDProducer.cc +++ b/FWCore/Framework/src/EDProducer.cc @@ -11,6 +11,7 @@ #include "FWCore/Framework/src/edmodule_mightGet_config.h" #include "FWCore/Framework/src/EventSignalsSentry.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" @@ -29,7 +30,9 @@ namespace edm { e.setProducer(this, &previousParentage_); e.setSharedResourcesAcquirer(&resourceAcquirer_); EventSignalsSentry sentry(act, mcc); - const EventSetup c{info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), false}; + ESParentContext parentC(mcc); + const EventSetup c{ + info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), parentC, false}; this->produce(e, c); commit_(e, &previousParentageId_); return true; @@ -47,8 +50,9 @@ namespace edm { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); Run const& cnstR = r; + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), parentC, false}; this->beginRun(cnstR, c); commit_(r); } @@ -57,8 +61,9 @@ namespace edm { Run r(info, moduleDescription_, mcc, true); r.setConsumer(this); Run const& cnstR = r; + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->endRun(cnstR, c); commit_(r); } @@ -67,9 +72,11 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; this->beginLuminosityBlock(cnstLb, c); commit_(lb); @@ -78,9 +85,11 @@ namespace edm { void EDProducer::doEndLuminosityBlock(LumiTransitionInfo const& info, ModuleCallingContext const* mcc) { LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; LuminosityBlock const& cnstLb = lb; this->endLuminosityBlock(cnstLb, c); diff --git a/FWCore/Framework/src/ESSourceDataProxyBase.cc b/FWCore/Framework/src/ESSourceDataProxyBase.cc index 6b830bc306d6a..347444f3ad8ce 100644 --- a/FWCore/Framework/src/ESSourceDataProxyBase.cc +++ b/FWCore/Framework/src/ESSourceDataProxyBase.cc @@ -15,24 +15,36 @@ // user include files #include "FWCore/Framework/interface/ESSourceDataProxyBase.h" #include "FWCore/Framework/interface/DataKey.h" +#include "FWCore/ServiceRegistry/interface/ESModuleCallingContext.h" +#include "FWCore/ServiceRegistry/interface/ActivityRegistry.h" // // member functions // -void edm::eventsetup::ESSourceDataProxyBase::prefetchAsyncImpl(edm::WaitingTask* iTask, +void edm::eventsetup::ESSourceDataProxyBase::prefetchAsyncImpl(edm::WaitingTaskHolder iTask, edm::eventsetup::EventSetupRecordImpl const& iRecord, edm::eventsetup::DataKey const& iKey, edm::EventSetupImpl const*, - edm::ServiceToken const&) { + edm::ServiceToken const&, + edm::ESParentContext const& iParent) { bool expected = false; auto doPrefetch = m_prefetching.compare_exchange_strong(expected, true); m_waitingList.add(iTask); if (doPrefetch) { - m_queue->push([this, iKey, &iRecord]() { + m_queue->push(*iTask.group(), [this, iKey, &iRecord, iParent]() { try { { std::lock_guard guard(*m_mutex); + edm::ESModuleCallingContext context(providerDescription(), ESModuleCallingContext::State::kRunning, iParent); + iRecord.activityRegistry()->preESModuleSignal_.emit(iRecord.key(), context); + struct EndGuard { + EndGuard(EventSetupRecordImpl const& iRecord, ESModuleCallingContext const& iContext) + : record_{iRecord}, context_{iContext} {} + ~EndGuard() { record_.activityRegistry()->postESModuleSignal_.emit(record_.key(), context_); } + EventSetupRecordImpl const& record_; + ESModuleCallingContext const& context_; + } guardAR(iRecord, context); prefetch(iKey, EventSetupRecordDetails(&iRecord)); } m_waitingList.doneWaiting(std::exception_ptr{}); diff --git a/FWCore/Framework/src/Event.cc b/FWCore/Framework/src/Event.cc index 0f79c5b40bbe9..2a4cfdf8b0072 100644 --- a/FWCore/Framework/src/Event.cc +++ b/FWCore/Framework/src/Event.cc @@ -114,12 +114,18 @@ namespace edm { ProcessHistoryID const& Event::processHistoryID() const { return eventPrincipal().processHistoryID(); } - Provenance Event::getProvenance(BranchID const& bid) const { - return provRecorder_.principal().getProvenance(bid, moduleCallingContext_); + Provenance const& Event::getProvenance(BranchID const& bid) const { + return provRecorder_.principal().getProvenance(bid); } - Provenance Event::getProvenance(ProductID const& pid) const { - return eventPrincipal().getProvenance(pid, moduleCallingContext_); + Provenance const& Event::getProvenance(ProductID const& pid) const { return eventPrincipal().getProvenance(pid); } + + StableProvenance const& Event::getStableProvenance(BranchID const& bid) const { + return provRecorder_.principal().getStableProvenance(bid); + } + + StableProvenance const& Event::getStableProvenance(ProductID const& pid) const { + return eventPrincipal().getStableProvenance(pid); } void Event::getAllProvenance(std::vector& provenances) const { diff --git a/FWCore/Framework/src/EventPrincipal.cc b/FWCore/Framework/src/EventPrincipal.cc index c6040bf9aefb8..40fe4676307b6 100644 --- a/FWCore/Framework/src/EventPrincipal.cc +++ b/FWCore/Framework/src/EventPrincipal.cc @@ -351,9 +351,14 @@ namespace edm { } } - Provenance EventPrincipal::getProvenance(ProductID const& pid, ModuleCallingContext const* mcc) const { + Provenance const& EventPrincipal::getProvenance(ProductID const& pid) const { BranchID bid = pidToBid(pid); - return getProvenance(bid, mcc); + return getProvenance(bid); + } + + StableProvenance const& EventPrincipal::getStableProvenance(ProductID const& pid) const { + BranchID bid = pidToBid(pid); + return getStableProvenance(bid); } EventSelectionIDVector const& EventPrincipal::eventSelectionIDs() const { return eventSelectionIDs_; } diff --git a/FWCore/Framework/src/EventProcessor.cc b/FWCore/Framework/src/EventProcessor.cc index 3c09b9f511739..707265bd11c9b 100644 --- a/FWCore/Framework/src/EventProcessor.cc +++ b/FWCore/Framework/src/EventProcessor.cc @@ -399,6 +399,8 @@ namespace edm { IllegalParameters::setThrowAnException(optionsPset.getUntrackedParameter("throwIfIllegalParameter")); printDependencies_ = optionsPset.getUntrackedParameter("printDependencies"); + deleteNonConsumedUnscheduledModules_ = + optionsPset.getUntrackedParameter("deleteNonConsumedUnscheduledModules"); // Now do general initialization ScheduleItems items; @@ -433,6 +435,8 @@ namespace edm { nStreams = 1; nConcurrentLumis = 1; nConcurrentRuns = 1; + // in presence of looper do not delete modules + deleteNonConsumedUnscheduledModules_ = false; } espController_->setMaxConcurrentIOVs(nStreams, nConcurrentLumis); @@ -530,7 +534,12 @@ namespace edm { ParentageRegistry::instance()->clear(); } - void EventProcessor::taskCleanup() { espController_->endIOVs(); } + void EventProcessor::taskCleanup() { + edm::FinalWaitingTask task; + espController_->endIOVsAsync(edm::WaitingTaskHolder{taskGroup_, &task}); + taskGroup_.wait(); + assert(task.done()); + } void EventProcessor::beginJob() { if (beginJobCalled_) @@ -550,8 +559,45 @@ namespace edm { schedule_->convertCurrentProcessAlias(processConfiguration_->processName()); pathsAndConsumesOfModules_.initialize(schedule_.get(), preg()); - //NOTE: this may throw + std::vector consumedBySubProcesses; + for_all(subProcesses_, + [&consumedBySubProcesses, deleteModules = deleteNonConsumedUnscheduledModules_](auto& subProcess) { + auto c = subProcess.keepOnlyConsumedUnscheduledModules(deleteModules); + if (consumedBySubProcesses.empty()) { + consumedBySubProcesses = std::move(c); + } else if (not c.empty()) { + std::vector tmp; + tmp.reserve(consumedBySubProcesses.size() + c.size()); + std::merge(consumedBySubProcesses.begin(), + consumedBySubProcesses.end(), + c.begin(), + c.end(), + std::back_inserter(tmp)); + std::swap(consumedBySubProcesses, tmp); + } + }); + + // Note: all these may throw checkForModuleDependencyCorrectness(pathsAndConsumesOfModules_, printDependencies_); + if (deleteNonConsumedUnscheduledModules_) { + if (auto const unusedModules = nonConsumedUnscheduledModules(pathsAndConsumesOfModules_, consumedBySubProcesses); + not unusedModules.empty()) { + pathsAndConsumesOfModules_.removeModules(unusedModules); + + edm::LogInfo("DeleteModules").log([&unusedModules](auto& l) { + l << "Following modules are not in any Path or EndPath, nor is their output consumed by any other module, " + "and " + "therefore they are deleted before beginJob transition."; + for (auto const& description : unusedModules) { + l << "\n " << description->moduleLabel(); + } + }); + for (auto const& description : unusedModules) { + schedule_->deleteModule(description->moduleLabel(), actReg_.get()); + } + } + } + actReg_->preBeginJobSignal_(pathsAndConsumesOfModules_, processContext_); if (preallocations_.numberOfLuminosityBlocks() > 1) { @@ -773,7 +819,7 @@ namespace edm { } void EventProcessor::closeInputFile(bool cleaningUpAfterException) { - if (fb_.get() != nullptr) { + if (fileBlockValid()) { SendSourceTerminationSignalIfException sentry(actReg_.get()); input_->closeFile(fb_.get(), cleaningUpAfterException); sentry.completedSuccessfully(); @@ -782,7 +828,7 @@ namespace edm { } void EventProcessor::openOutputFiles() { - if (fb_.get() != nullptr) { + if (fileBlockValid()) { schedule_->openOutputFiles(*fb_); for_all(subProcesses_, [this](auto& subProcess) { subProcess.openOutputFiles(*fb_); }); } @@ -790,17 +836,16 @@ namespace edm { } void EventProcessor::closeOutputFiles() { - if (fb_.get() != nullptr) { - schedule_->closeOutputFiles(); - for_all(subProcesses_, [](auto& subProcess) { subProcess.closeOutputFiles(); }); - } + schedule_->closeOutputFiles(); + for_all(subProcesses_, [](auto& subProcess) { subProcess.closeOutputFiles(); }); + FDEBUG(1) << "\tcloseOutputFiles\n"; } void EventProcessor::respondToOpenInputFile() { - for_all(subProcesses_, - [this](auto& subProcess) { subProcess.updateBranchIDListHelper(branchIDListHelper_->branchIDLists()); }); - if (fb_.get() != nullptr) { + if (fileBlockValid()) { + for_all(subProcesses_, + [this](auto& subProcess) { subProcess.updateBranchIDListHelper(branchIDListHelper_->branchIDLists()); }); schedule_->respondToOpenInputFile(*fb_); for_all(subProcesses_, [this](auto& subProcess) { subProcess.respondToOpenInputFile(*fb_); }); } @@ -808,7 +853,7 @@ namespace edm { } void EventProcessor::respondToCloseInputFile() { - if (fb_.get() != nullptr) { + if (fileBlockValid()) { schedule_->respondToCloseInputFile(*fb_); for_all(subProcesses_, [this](auto& subProcess) { subProcess.respondToCloseInputFile(*fb_); }); } @@ -878,16 +923,18 @@ namespace edm { processBlockPrincipal.fillProcessBlockPrincipal(processConfiguration_->processName()); using Traits = OccurrenceTraits; - auto globalWaitTask = make_empty_waiting_task(); - globalWaitTask->increment_ref_count(); + FinalWaitingTask globalWaitTask; ProcessBlockTransitionInfo transitionInfo(processBlockPrincipal); beginGlobalTransitionAsync( - WaitingTaskHolder(globalWaitTask.get()), *schedule_, transitionInfo, serviceToken_, subProcesses_); + WaitingTaskHolder(taskGroup_, &globalWaitTask), *schedule_, transitionInfo, serviceToken_, subProcesses_); - globalWaitTask->wait_for_all(); - if (globalWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(globalWaitTask->exceptionPtr())); + do { + taskGroup_.wait(); + } while (not globalWaitTask.done()); + + if (globalWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(globalWaitTask.exceptionPtr())); } beginProcessBlockSucceeded = true; } @@ -904,24 +951,26 @@ namespace edm { processBlockPrincipal.fillProcessBlockPrincipal(processConfiguration_->processName(), reader); using Traits = OccurrenceTraits; - auto globalWaitTask = make_empty_waiting_task(); - globalWaitTask->increment_ref_count(); + FinalWaitingTask globalWaitTask; ProcessBlockTransitionInfo transitionInfo(processBlockPrincipal); beginGlobalTransitionAsync( - WaitingTaskHolder(globalWaitTask.get()), *schedule_, transitionInfo, serviceToken_, subProcesses_); + WaitingTaskHolder(taskGroup_, &globalWaitTask), *schedule_, transitionInfo, serviceToken_, subProcesses_); - globalWaitTask->wait_for_all(); - if (globalWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(globalWaitTask->exceptionPtr())); + do { + taskGroup_.wait(); + } while (not globalWaitTask.done()); + if (globalWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(globalWaitTask.exceptionPtr())); } - auto writeWaitTask = edm::make_empty_waiting_task(); - writeWaitTask->increment_ref_count(); - writeProcessBlockAsync(edm::WaitingTaskHolder{writeWaitTask.get()}, ProcessBlockType::Input); - writeWaitTask->wait_for_all(); - if (writeWaitTask->exceptionPtr()) { - std::rethrow_exception(*writeWaitTask->exceptionPtr()); + FinalWaitingTask writeWaitTask; + writeProcessBlockAsync(edm::WaitingTaskHolder{taskGroup_, &writeWaitTask}, ProcessBlockType::Input); + do { + taskGroup_.wait(); + } while (not writeWaitTask.done()); + if (writeWaitTask.exceptionPtr()) { + std::rethrow_exception(*writeWaitTask.exceptionPtr()); } processBlockPrincipal.clearPrincipal(); @@ -935,29 +984,30 @@ namespace edm { ProcessBlockPrincipal& processBlockPrincipal = principalCache_.processBlockPrincipal(); using Traits = OccurrenceTraits; - auto globalWaitTask = make_empty_waiting_task(); - globalWaitTask->increment_ref_count(); + FinalWaitingTask globalWaitTask; ProcessBlockTransitionInfo transitionInfo(processBlockPrincipal); - endGlobalTransitionAsync(WaitingTaskHolder(globalWaitTask.get()), + endGlobalTransitionAsync(WaitingTaskHolder(taskGroup_, &globalWaitTask), *schedule_, transitionInfo, serviceToken_, subProcesses_, cleaningUpAfterException); - - globalWaitTask->wait_for_all(); - if (globalWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(globalWaitTask->exceptionPtr())); + do { + taskGroup_.wait(); + } while (not globalWaitTask.done()); + if (globalWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(globalWaitTask.exceptionPtr())); } if (beginProcessBlockSucceeded) { - auto writeWaitTask = edm::make_empty_waiting_task(); - writeWaitTask->increment_ref_count(); - writeProcessBlockAsync(edm::WaitingTaskHolder{writeWaitTask.get()}, ProcessBlockType::New); - writeWaitTask->wait_for_all(); - if (writeWaitTask->exceptionPtr()) { - std::rethrow_exception(*writeWaitTask->exceptionPtr()); + FinalWaitingTask writeWaitTask; + writeProcessBlockAsync(edm::WaitingTaskHolder{taskGroup_, &writeWaitTask}, ProcessBlockType::New); + do { + taskGroup_.wait(); + } while (not writeWaitTask.done()); + if (writeWaitTask.exceptionPtr()) { + std::rethrow_exception(*writeWaitTask.exceptionPtr()); } } @@ -986,7 +1036,7 @@ namespace edm { } { SendSourceTerminationSignalIfException sentry(actReg_.get()); - espController_->eventSetupForInstance(ts); + synchronousEventSetupForInstance(ts, taskGroup_, *espController_); eventSetupForInstanceSucceeded = true; sentry.completedSuccessfully(); } @@ -999,14 +1049,15 @@ namespace edm { } { using Traits = OccurrenceTraits; - auto globalWaitTask = make_empty_waiting_task(); - globalWaitTask->increment_ref_count(); + FinalWaitingTask globalWaitTask; RunTransitionInfo transitionInfo(runPrincipal, es); beginGlobalTransitionAsync( - WaitingTaskHolder(globalWaitTask.get()), *schedule_, transitionInfo, serviceToken_, subProcesses_); - globalWaitTask->wait_for_all(); - if (globalWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(globalWaitTask->exceptionPtr())); + WaitingTaskHolder(taskGroup_, &globalWaitTask), *schedule_, transitionInfo, serviceToken_, subProcesses_); + do { + taskGroup_.wait(); + } while (not globalWaitTask.done()); + if (globalWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(globalWaitTask.exceptionPtr())); } } globalBeginSucceeded = true; @@ -1016,22 +1067,22 @@ namespace edm { } { //To wait, the ref count has to be 1+#streams - auto streamLoopWaitTask = make_empty_waiting_task(); - streamLoopWaitTask->increment_ref_count(); + FinalWaitingTask streamLoopWaitTask; using Traits = OccurrenceTraits; RunTransitionInfo transitionInfo(runPrincipal, es); - beginStreamsTransitionAsync(streamLoopWaitTask.get(), + beginStreamsTransitionAsync(WaitingTaskHolder(taskGroup_, &streamLoopWaitTask), *schedule_, preallocations_.numberOfStreams(), transitionInfo, serviceToken_, subProcesses_); - - streamLoopWaitTask->wait_for_all(); - if (streamLoopWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(streamLoopWaitTask->exceptionPtr())); + do { + taskGroup_.wait(); + } while (not streamLoopWaitTask.done()); + if (streamLoopWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(streamLoopWaitTask.exceptionPtr())); } } FDEBUG(1) << "\tstreamBeginRun " << run << "\n"; @@ -1050,16 +1101,17 @@ namespace edm { endRun(phid, run, globalBeginSucceeded, cleaningUpAfterException); if (globalBeginSucceeded) { - auto t = edm::make_empty_waiting_task(); - t->increment_ref_count(); + FinalWaitingTask t; RunPrincipal& runPrincipal = principalCache_.runPrincipal(phid, run); MergeableRunProductMetadata* mergeableRunProductMetadata = runPrincipal.mergeableRunProductMetadata(); mergeableRunProductMetadata->preWriteRun(); - writeRunAsync(edm::WaitingTaskHolder{t.get()}, phid, run, mergeableRunProductMetadata); - t->wait_for_all(); + writeRunAsync(edm::WaitingTaskHolder{taskGroup_, &t}, phid, run, mergeableRunProductMetadata); + do { + taskGroup_.wait(); + } while (not t.done()); mergeableRunProductMetadata->postWriteRun(); - if (t->exceptionPtr()) { - std::rethrow_exception(*t->exceptionPtr()); + if (t.exceptionPtr()) { + std::rethrow_exception(*t.exceptionPtr()); } } } @@ -1078,29 +1130,29 @@ namespace edm { runPrincipal.endTime()); { SendSourceTerminationSignalIfException sentry(actReg_.get()); - espController_->eventSetupForInstance(ts); + synchronousEventSetupForInstance(ts, taskGroup_, *espController_); sentry.completedSuccessfully(); } auto const& es = esp_->eventSetupImpl(); if (globalBeginSucceeded) { //To wait, the ref count has to be 1+#streams - auto streamLoopWaitTask = make_empty_waiting_task(); - streamLoopWaitTask->increment_ref_count(); + FinalWaitingTask streamLoopWaitTask; using Traits = OccurrenceTraits; RunTransitionInfo transitionInfo(runPrincipal, es); - endStreamsTransitionAsync(WaitingTaskHolder(streamLoopWaitTask.get()), + endStreamsTransitionAsync(WaitingTaskHolder(taskGroup_, &streamLoopWaitTask), *schedule_, preallocations_.numberOfStreams(), transitionInfo, serviceToken_, subProcesses_, cleaningUpAfterException); - - streamLoopWaitTask->wait_for_all(); - if (streamLoopWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(streamLoopWaitTask->exceptionPtr())); + do { + taskGroup_.wait(); + } while (not streamLoopWaitTask.done()); + if (streamLoopWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(streamLoopWaitTask.exceptionPtr())); } } FDEBUG(1) << "\tstreamEndRun " << run << "\n"; @@ -1108,20 +1160,21 @@ namespace edm { //looper_->doStreamEndRun(schedule_->streamID(),runPrincipal, es); } { - auto globalWaitTask = make_empty_waiting_task(); - globalWaitTask->increment_ref_count(); + FinalWaitingTask globalWaitTask; RunTransitionInfo transitionInfo(runPrincipal, es); using Traits = OccurrenceTraits; - endGlobalTransitionAsync(WaitingTaskHolder(globalWaitTask.get()), + endGlobalTransitionAsync(WaitingTaskHolder(taskGroup_, &globalWaitTask), *schedule_, transitionInfo, serviceToken_, subProcesses_, cleaningUpAfterException); - globalWaitTask->wait_for_all(); - if (globalWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(globalWaitTask->exceptionPtr())); + do { + taskGroup_.wait(); + } while (not globalWaitTask.done()); + if (globalWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(globalWaitTask.exceptionPtr())); } } FDEBUG(1) << "\tendRun " << run << "\n"; @@ -1131,23 +1184,23 @@ namespace edm { } InputSource::ItemType EventProcessor::processLumis(std::shared_ptr const& iRunResource) { - auto waitTask = make_empty_waiting_task(); - waitTask->increment_ref_count(); - + FinalWaitingTask waitTask; if (streamLumiActive_ > 0) { assert(streamLumiActive_ == preallocations_.numberOfStreams()); // Continue after opening a new input file - continueLumiAsync(WaitingTaskHolder{waitTask.get()}); + continueLumiAsync(WaitingTaskHolder{taskGroup_, &waitTask}); } else { beginLumiAsync(IOVSyncValue(EventID(input_->run(), input_->luminosityBlock(), 0), input_->luminosityBlockAuxiliary()->beginTime()), iRunResource, - WaitingTaskHolder{waitTask.get()}); + WaitingTaskHolder{taskGroup_, &waitTask}); } - waitTask->wait_for_all(); + do { + taskGroup_.wait(); + } while (not waitTask.done()); - if (waitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(waitTask->exceptionPtr())); + if (waitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(waitTask.exceptionPtr())); } return lastTransitionType(); } @@ -1178,108 +1231,111 @@ namespace edm { status->setResumer(std::move(iResumer)); - sourceResourcesAcquirer_.serialQueueChain().push([this, iHolder, status = std::move(status)]() mutable { - //make the services available - ServiceRegistry::Operate operate(serviceToken_); - // Caught exception is propagated via WaitingTaskHolder - CMS_SA_ALLOW try { - readLuminosityBlock(*status); + sourceResourcesAcquirer_.serialQueueChain().push( + *iHolder.group(), [this, iHolder, status = std::move(status)]() mutable { + //make the services available + ServiceRegistry::Operate operate(serviceToken_); + // Caught exception is propagated via WaitingTaskHolder + CMS_SA_ALLOW try { + readLuminosityBlock(*status); - LuminosityBlockPrincipal& lumiPrincipal = *status->lumiPrincipal(); - { - SendSourceTerminationSignalIfException sentry(actReg_.get()); + LuminosityBlockPrincipal& lumiPrincipal = *status->lumiPrincipal(); + { + SendSourceTerminationSignalIfException sentry(actReg_.get()); - input_->doBeginLumi(lumiPrincipal, &processContext_); - sentry.completedSuccessfully(); - } + input_->doBeginLumi(lumiPrincipal, &processContext_); + sentry.completedSuccessfully(); + } - Service rng; - if (rng.isAvailable()) { - LuminosityBlock lb(lumiPrincipal, ModuleDescription(), nullptr, false); - rng->preBeginLumi(lb); - } + Service rng; + if (rng.isAvailable()) { + LuminosityBlock lb(lumiPrincipal, ModuleDescription(), nullptr, false); + rng->preBeginLumi(lb); + } - //Task to start the stream beginLumis - auto beginStreamsTask = make_waiting_task( - tbb::task::allocate_root(), [this, holder = iHolder, status](std::exception_ptr const* iPtr) mutable { - if (iPtr) { - status->resetResources(); - holder.doneWaiting(*iPtr); - } else { - status->globalBeginDidSucceed(); - EventSetupImpl const& es = status->eventSetupImpl(esp_->subProcessIndex()); - - if (looper_) { - // Caught exception is propagated via WaitingTaskHolder - CMS_SA_ALLOW try { - //make the services available - ServiceRegistry::Operate operateLooper(serviceToken_); - looper_->doBeginLuminosityBlock(*(status->lumiPrincipal()), es, &processContext_); - } catch (...) { + //Task to start the stream beginLumis + auto beginStreamsTask = + make_waiting_task([this, holder = iHolder, status](std::exception_ptr const* iPtr) mutable { + if (iPtr) { status->resetResources(); - holder.doneWaiting(std::current_exception()); - return; + holder.doneWaiting(*iPtr); + } else { + status->globalBeginDidSucceed(); + EventSetupImpl const& es = status->eventSetupImpl(esp_->subProcessIndex()); + + if (looper_) { + // Caught exception is propagated via WaitingTaskHolder + CMS_SA_ALLOW try { + //make the services available + ServiceRegistry::Operate operateLooper(serviceToken_); + looper_->doBeginLuminosityBlock(*(status->lumiPrincipal()), es, &processContext_); + } catch (...) { + status->resetResources(); + holder.doneWaiting(std::current_exception()); + return; + } + } + using Traits = OccurrenceTraits; + + for (unsigned int i = 0; i < preallocations_.numberOfStreams(); ++i) { + streamQueues_[i].push(*holder.group(), [this, i, status, holder, &es]() mutable { + streamQueues_[i].pause(); + + auto eventTask = edm::make_waiting_task( + [this, i, h = std::move(holder)]( + std::exception_ptr const* exceptionFromBeginStreamLumi) mutable { + if (exceptionFromBeginStreamLumi) { + WaitingTaskHolder tmp(h); + tmp.doneWaiting(*exceptionFromBeginStreamLumi); + streamEndLumiAsync(h, i); + } else { + handleNextEventForStreamAsync(std::move(h), i); + } + }); + auto& event = principalCache_.eventPrincipal(i); + //We need to be sure that 'status' and its internal shared_ptr are only + // held by the container as this lambda may not finish executing before all the tasks it + // spawns have already started to run. + auto eventSetupImpls = &status->eventSetupImpls(); + auto lp = status->lumiPrincipal().get(); + streamLumiStatus_[i] = std::move(status); + ++streamLumiActive_; + event.setLuminosityBlockPrincipal(lp); + LumiTransitionInfo transitionInfo(*lp, es, eventSetupImpls); + beginStreamTransitionAsync(WaitingTaskHolder(*holder.group(), eventTask), + *schedule_, + i, + transitionInfo, + serviceToken_, + subProcesses_); + }); + } } - } - using Traits = OccurrenceTraits; - - for (unsigned int i = 0; i < preallocations_.numberOfStreams(); ++i) { - streamQueues_[i].push([this, i, status, holder, &es]() mutable { - streamQueues_[i].pause(); - - auto eventTask = - edm::make_waiting_task(tbb::task::allocate_root(), - [this, i, h = std::move(holder)]( - std::exception_ptr const* exceptionFromBeginStreamLumi) mutable { - if (exceptionFromBeginStreamLumi) { - WaitingTaskHolder tmp(h); - tmp.doneWaiting(*exceptionFromBeginStreamLumi); - streamEndLumiAsync(h, i); - } else { - handleNextEventForStreamAsync(std::move(h), i); - } - }); - auto& event = principalCache_.eventPrincipal(i); - //We need to be sure that 'status' and its internal shared_ptr are only - // held by the container as this lambda may not finish executing before all the tasks it - // spawns have already started to run. - auto eventSetupImpls = &status->eventSetupImpls(); - auto lp = status->lumiPrincipal().get(); - streamLumiStatus_[i] = std::move(status); - ++streamLumiActive_; - event.setLuminosityBlockPrincipal(lp); - LumiTransitionInfo transitionInfo(*lp, es, eventSetupImpls); - beginStreamTransitionAsync( - WaitingTaskHolder{eventTask}, *schedule_, i, transitionInfo, serviceToken_, subProcesses_); - }); - } - } - }); // beginStreamTask - - //task to start the global begin lumi - WaitingTaskHolder beginStreamsHolder{beginStreamsTask}; - - EventSetupImpl const& es = status->eventSetupImpl(esp_->subProcessIndex()); - { - LumiTransitionInfo transitionInfo(lumiPrincipal, es, &status->eventSetupImpls()); - using Traits = OccurrenceTraits; - beginGlobalTransitionAsync( - beginStreamsHolder, *schedule_, transitionInfo, serviceToken_, subProcesses_); - } - } catch (...) { - status->resetResources(); - iHolder.doneWaiting(std::current_exception()); - } - }); // task in sourceResourcesAcquirer - }; // end lumiWork + }); // beginStreamTask + + //task to start the global begin lumi + WaitingTaskHolder beginStreamsHolder{*iHolder.group(), beginStreamsTask}; + + EventSetupImpl const& es = status->eventSetupImpl(esp_->subProcessIndex()); + { + LumiTransitionInfo transitionInfo(lumiPrincipal, es, &status->eventSetupImpls()); + using Traits = OccurrenceTraits; + beginGlobalTransitionAsync( + beginStreamsHolder, *schedule_, transitionInfo, serviceToken_, subProcesses_); + } + } catch (...) { + status->resetResources(); + iHolder.doneWaiting(std::current_exception()); + } + }); // task in sourceResourcesAcquirer + }; // end lumiWork auto queueLumiWorkTask = make_waiting_task( - tbb::task::allocate_root(), [this, lumiWorkLambda = std::move(lumiWork), iHolder](std::exception_ptr const* iPtr) mutable { if (iPtr) { iHolder.doneWaiting(*iPtr); } - lumiQueue_->pushAndPause(std::move(lumiWorkLambda)); + lumiQueue_->pushAndPause(*iHolder.group(), std::move(lumiWorkLambda)); }); if (espController_->doWeNeedToWaitForIOVsToFinish(iSync)) { @@ -1287,9 +1343,9 @@ namespace edm { // module not able to handle concurrent IOVs (usually an ESSource) // and the new sync value is outside the current IOV of that module. - WaitingTaskHolder queueLumiWorkTaskHolder{queueLumiWorkTask}; + WaitingTaskHolder queueLumiWorkTaskHolder{*iHolder.group(), queueLumiWorkTask}; - queueWhichWaitsForIOVsToFinish_.push([this, queueLumiWorkTaskHolder, iSync, status]() mutable { + queueWhichWaitsForIOVsToFinish_.push(*iHolder.group(), [this, queueLumiWorkTaskHolder, iSync, status]() mutable { // Caught exception is propagated via WaitingTaskHolder CMS_SA_ALLOW try { SendSourceTerminationSignalIfException sentry(actReg_.get()); @@ -1297,7 +1353,7 @@ namespace edm { // need to be processed and prepare IOVs for it. // Pass in the endIOVWaitingTasks so the lumi can notify them when the // lumi is done and no longer needs its EventSetup IOVs. - espController_->eventSetupForInstance( + espController_->eventSetupForInstanceAsync( iSync, queueLumiWorkTaskHolder, status->endIOVWaitingTasks(), status->eventSetupImpls()); sentry.completedSuccessfully(); } catch (...) { @@ -1310,7 +1366,7 @@ namespace edm { queueWhichWaitsForIOVsToFinish_.pause(); // This holder will be used to wait until the EventSetup IOVs are ready - WaitingTaskHolder queueLumiWorkTaskHolder{queueLumiWorkTask}; + WaitingTaskHolder queueLumiWorkTaskHolder{*iHolder.group(), queueLumiWorkTask}; // Caught exception is propagated via WaitingTaskHolder CMS_SA_ALLOW try { SendSourceTerminationSignalIfException sentry(actReg_.get()); @@ -1319,7 +1375,7 @@ namespace edm { // need to be processed and prepare IOVs for it. // Pass in the endIOVWaitingTasks so the lumi can notify them when the // lumi is done and no longer needs its EventSetup IOVs. - espController_->eventSetupForInstance( + espController_->eventSetupForInstanceAsync( iSync, queueLumiWorkTaskHolder, status->endIOVWaitingTasks(), status->eventSetupImpls()); sentry.completedSuccessfully(); @@ -1338,14 +1394,12 @@ namespace edm { } unsigned int streamIndex = 0; + tbb::task_arena arena{tbb::task_arena::attach()}; for (; streamIndex < preallocations_.numberOfStreams() - 1; ++streamIndex) { - tbb::task::enqueue(*edm::make_functor_task(tbb::task::allocate_root(), [this, streamIndex, h = iHolder]() { - handleNextEventForStreamAsync(h, streamIndex); - })); + arena.enqueue([this, streamIndex, h = iHolder]() { handleNextEventForStreamAsync(h, streamIndex); }); } - tbb::task::spawn(*edm::make_functor_task(tbb::task::allocate_root(), [this, streamIndex, h = std::move(iHolder)]() { - handleNextEventForStreamAsync(h, streamIndex); - })); + iHolder.group()->run( + [this, streamIndex, h = std::move(iHolder)]() { handleNextEventForStreamAsync(h, streamIndex); }); } void EventProcessor::handleEndLumiExceptions(std::exception_ptr const* iPtr, WaitingTaskHolder& holder) { @@ -1368,7 +1422,6 @@ namespace edm { std::vector> const* eventSetupImpls = &iLumiStatus->eventSetupImpls(); auto finalTaskForThisLumi = edm::make_waiting_task( - tbb::task::allocate_root(), [status = std::move(iLumiStatus), iTask = std::move(iTask), this](std::exception_ptr const* iPtr) mutable { std::exception_ptr ptr; if (iPtr) { @@ -1425,9 +1478,10 @@ namespace edm { }); auto writeT = edm::make_waiting_task( - tbb::task::allocate_root(), - [this, didGlobalBeginSucceed, &lumiPrincipal = lp, task = WaitingTaskHolder(finalTaskForThisLumi)]( - std::exception_ptr const* iExcept) mutable { + [this, + didGlobalBeginSucceed, + &lumiPrincipal = lp, + task = WaitingTaskHolder(*iTask.group(), finalTaskForThisLumi)](std::exception_ptr const* iExcept) mutable { if (iExcept) { task.doneWaiting(*iExcept); } else { @@ -1442,29 +1496,32 @@ namespace edm { LumiTransitionInfo transitionInfo(lp, es, eventSetupImpls); using Traits = OccurrenceTraits; - endGlobalTransitionAsync( - WaitingTaskHolder(writeT), *schedule_, transitionInfo, serviceToken_, subProcesses_, cleaningUpAfterException); + endGlobalTransitionAsync(WaitingTaskHolder(*iTask.group(), writeT), + *schedule_, + transitionInfo, + serviceToken_, + subProcesses_, + cleaningUpAfterException); } void EventProcessor::streamEndLumiAsync(edm::WaitingTaskHolder iTask, unsigned int iStreamIndex) { - auto t = edm::make_waiting_task(tbb::task::allocate_root(), - [this, iStreamIndex, iTask](std::exception_ptr const* iPtr) mutable { - if (iPtr) { - handleEndLumiExceptions(iPtr, iTask); - } - auto status = streamLumiStatus_[iStreamIndex]; - //reset status before releasing queue else get race condtion - streamLumiStatus_[iStreamIndex].reset(); - --streamLumiActive_; - streamQueues_[iStreamIndex].resume(); - - //are we the last one? - if (status->streamFinishedLumi()) { - globalEndLumiAsync(iTask, std::move(status)); - } - }); - - edm::WaitingTaskHolder lumiDoneTask{t}; + auto t = edm::make_waiting_task([this, iStreamIndex, iTask](std::exception_ptr const* iPtr) mutable { + if (iPtr) { + handleEndLumiExceptions(iPtr, iTask); + } + auto status = streamLumiStatus_[iStreamIndex]; + //reset status before releasing queue else get race condtion + streamLumiStatus_[iStreamIndex].reset(); + --streamLumiActive_; + streamQueues_[iStreamIndex].resume(); + + //are we the last one? + if (status->streamFinishedLumi()) { + globalEndLumiAsync(iTask, std::move(status)); + } + }); + + edm::WaitingTaskHolder lumiDoneTask{*iTask.group(), t}; //Need to be sure the lumi status is released before lumiDoneTask can every be called. // therefore we do not want to hold the shared_ptr @@ -1494,19 +1551,20 @@ namespace edm { void EventProcessor::endUnfinishedLumi() { if (streamLumiActive_.load() > 0) { - auto globalWaitTask = make_empty_waiting_task(); - globalWaitTask->increment_ref_count(); + FinalWaitingTask globalWaitTask; { - WaitingTaskHolder globalTaskHolder{globalWaitTask.get()}; + WaitingTaskHolder globalTaskHolder{taskGroup_, &globalWaitTask}; for (unsigned int i = 0; i < preallocations_.numberOfStreams(); ++i) { if (streamLumiStatus_[i]) { streamEndLumiAsync(globalTaskHolder, i); } } } - globalWaitTask->wait_for_all(); - if (globalWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(globalWaitTask->exceptionPtr())); + do { + taskGroup_.wait(); + } while (not globalWaitTask.done()); + if (globalWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(globalWaitTask.exceptionPtr())); } } } @@ -1583,19 +1641,18 @@ namespace edm { } void EventProcessor::writeProcessBlockAsync(WaitingTaskHolder task, ProcessBlockType processBlockType) { - auto subsT = edm::make_waiting_task(tbb::task::allocate_root(), - [this, task, processBlockType](std::exception_ptr const* iExcept) mutable { - if (iExcept) { - task.doneWaiting(*iExcept); - } else { - ServiceRegistry::Operate op(serviceToken_); - for (auto& s : subProcesses_) { - s.writeProcessBlockAsync(task, processBlockType); - } - } - }); + auto subsT = edm::make_waiting_task([this, task, processBlockType](std::exception_ptr const* iExcept) mutable { + if (iExcept) { + task.doneWaiting(*iExcept); + } else { + ServiceRegistry::Operate op(serviceToken_); + for (auto& s : subProcesses_) { + s.writeProcessBlockAsync(task, processBlockType); + } + } + }); ServiceRegistry::Operate op(serviceToken_); - schedule_->writeProcessBlockAsync(WaitingTaskHolder(subsT), + schedule_->writeProcessBlockAsync(WaitingTaskHolder(*task.group(), subsT), principalCache_.processBlockPrincipal(processBlockType), &processContext_, actReg_.get()); @@ -1606,7 +1663,6 @@ namespace edm { RunNumber_t run, MergeableRunProductMetadata const* mergeableRunProductMetadata) { auto subsT = edm::make_waiting_task( - tbb::task::allocate_root(), [this, phid, run, task, mergeableRunProductMetadata](std::exception_ptr const* iExcept) mutable { if (iExcept) { task.doneWaiting(*iExcept); @@ -1618,7 +1674,7 @@ namespace edm { } }); ServiceRegistry::Operate op(serviceToken_); - schedule_->writeRunAsync(WaitingTaskHolder(subsT), + schedule_->writeRunAsync(WaitingTaskHolder(*task.group(), subsT), principalCache_.runPrincipal(phid, run), &processContext_, actReg_.get(), @@ -1632,22 +1688,21 @@ namespace edm { } void EventProcessor::writeLumiAsync(WaitingTaskHolder task, LuminosityBlockPrincipal& lumiPrincipal) { - auto subsT = edm::make_waiting_task(tbb::task::allocate_root(), - [this, task, &lumiPrincipal](std::exception_ptr const* iExcept) mutable { - if (iExcept) { - task.doneWaiting(*iExcept); - } else { - ServiceRegistry::Operate op(serviceToken_); - for (auto& s : subProcesses_) { - s.writeLumiAsync(task, lumiPrincipal); - } - } - }); + auto subsT = edm::make_waiting_task([this, task, &lumiPrincipal](std::exception_ptr const* iExcept) mutable { + if (iExcept) { + task.doneWaiting(*iExcept); + } else { + ServiceRegistry::Operate op(serviceToken_); + for (auto& s : subProcesses_) { + s.writeLumiAsync(task, lumiPrincipal); + } + } + }); ServiceRegistry::Operate op(serviceToken_); lumiPrincipal.runPrincipal().mergeableRunProductMetadata()->writeLumi(lumiPrincipal.luminosityBlock()); - schedule_->writeLumiAsync(WaitingTaskHolder{subsT}, lumiPrincipal, &processContext_, actReg_.get()); + schedule_->writeLumiAsync(WaitingTaskHolder{*task.group(), subsT}, lumiPrincipal, &processContext_, actReg_.get()); } void EventProcessor::deleteLumiFromCache(LuminosityBlockProcessingStatus& iStatus) { @@ -1721,7 +1776,7 @@ namespace edm { } void EventProcessor::handleNextEventForStreamAsync(WaitingTaskHolder iTask, unsigned int iStreamIndex) { - sourceResourcesAcquirer_.serialQueueChain().push([this, iTask, iStreamIndex]() mutable { + sourceResourcesAcquirer_.serialQueueChain().push(*iTask.group(), [this, iTask, iStreamIndex]() mutable { ServiceRegistry::Operate operate(serviceToken_); //we do not want to extend the lifetime of the shared_ptr to the end of this function // as steramEndLumiAsync may clear the value from streamLumiStatus_[iStreamIndex] @@ -1729,27 +1784,26 @@ namespace edm { // Caught exception is propagated to EventProcessor::runToCompletion() via deferredExceptionPtr_ CMS_SA_ALLOW try { if (readNextEventForStream(iStreamIndex, *status)) { - auto recursionTask = make_waiting_task( - tbb::task::allocate_root(), [this, iTask, iStreamIndex](std::exception_ptr const* iPtr) mutable { - if (iPtr) { - // Try to end the stream properly even if an exception was - // thrown on an event. - bool expected = false; - if (deferredExceptionPtrIsSet_.compare_exchange_strong(expected, true)) { - // This is the case where the exception in iPtr is the primary - // exception and we want to see its message. - deferredExceptionPtr_ = *iPtr; - WaitingTaskHolder tempHolder(iTask); - tempHolder.doneWaiting(*iPtr); - } - streamEndLumiAsync(std::move(iTask), iStreamIndex); - //the stream will stop now - return; - } - handleNextEventForStreamAsync(std::move(iTask), iStreamIndex); - }); - - processEventAsync(WaitingTaskHolder(recursionTask), iStreamIndex); + auto recursionTask = make_waiting_task([this, iTask, iStreamIndex](std::exception_ptr const* iPtr) mutable { + if (iPtr) { + // Try to end the stream properly even if an exception was + // thrown on an event. + bool expected = false; + if (deferredExceptionPtrIsSet_.compare_exchange_strong(expected, true)) { + // This is the case where the exception in iPtr is the primary + // exception and we want to see its message. + deferredExceptionPtr_ = *iPtr; + WaitingTaskHolder tempHolder(iTask); + tempHolder.doneWaiting(*iPtr); + } + streamEndLumiAsync(std::move(iTask), iStreamIndex); + //the stream will stop now + return; + } + handleNextEventForStreamAsync(std::move(iTask), iStreamIndex); + }); + + processEventAsync(WaitingTaskHolder(*iTask.group(), recursionTask), iStreamIndex); } else { //the stream will stop now if (status->isLumiEnding()) { @@ -1793,8 +1847,7 @@ namespace edm { } void EventProcessor::processEventAsync(WaitingTaskHolder iHolder, unsigned int iStreamIndex) { - tbb::task::spawn( - *make_functor_task(tbb::task::allocate_root(), [=]() { processEventAsyncImpl(iHolder, iStreamIndex); })); + iHolder.group()->run([=]() { processEventAsyncImpl(iHolder, iStreamIndex); }); } void EventProcessor::processEventAsyncImpl(WaitingTaskHolder iHolder, unsigned int iStreamIndex) { @@ -1807,8 +1860,8 @@ namespace edm { rng->postEventRead(ev); } - WaitingTaskHolder finalizeEventTask(make_waiting_task( - tbb::task::allocate_root(), [this, pep, iHolder, iStreamIndex](std::exception_ptr const* iPtr) mutable { + WaitingTaskHolder finalizeEventTask( + *iHolder.group(), make_waiting_task([this, pep, iHolder, iStreamIndex](std::exception_ptr const* iPtr) mutable { //NOTE: If we have a looper we only have one Stream if (looper_) { ServiceRegistry::Operate operateLooper(serviceToken_); @@ -1829,9 +1882,9 @@ namespace edm { } else { //Need to run SubProcesses after schedule has finished // with the event - afterProcessTask = WaitingTaskHolder(make_waiting_task( - tbb::task::allocate_root(), - [this, pep, finalizeEventTask, iStreamIndex](std::exception_ptr const* iPtr) mutable { + afterProcessTask = WaitingTaskHolder( + *iHolder.group(), + make_waiting_task([this, pep, finalizeEventTask, iStreamIndex](std::exception_ptr const* iPtr) mutable { if (not iPtr) { //when run with 1 thread, we want to the order to be what // it was before. This requires reversing the order since @@ -1916,7 +1969,7 @@ namespace edm { s = std::make_unique("ModulesSynchingOnLumis"); (*s) << "The following modules require synchronizing on LuminosityBlock boundaries:"; } - (*s) << "\n " << worker->description().moduleName() << " " << worker->description().moduleLabel(); + (*s) << "\n " << worker->description()->moduleName() << " " << worker->description()->moduleLabel(); } } } diff --git a/FWCore/Framework/src/EventSetupImpl.cc b/FWCore/Framework/src/EventSetupImpl.cc index a8410c81266ae..32d08eef1bd5f 100644 --- a/FWCore/Framework/src/EventSetupImpl.cc +++ b/FWCore/Framework/src/EventSetupImpl.cc @@ -23,7 +23,7 @@ namespace edm { - EventSetupImpl::EventSetupImpl() {} + EventSetupImpl::EventSetupImpl(tbb::task_arena* iArena) : taskArena_{iArena} {} EventSetupImpl::~EventSetupImpl() {} @@ -44,7 +44,8 @@ namespace edm { std::optional EventSetupImpl::find(const eventsetup::EventSetupRecordKey& iKey, unsigned int iTransitionID, - ESProxyIndex const* getTokenIndices) const { + ESProxyIndex const* getTokenIndices, + ESParentContext const& iParent) const { auto lb = std::lower_bound(keysBegin_, keysEnd_, iKey); if (lb == keysEnd_ || iKey != *lb) { return std::nullopt; @@ -53,7 +54,7 @@ namespace edm { if (recordImpls_[index] == nullptr) { return std::nullopt; } - return eventsetup::EventSetupRecordGeneric(recordImpls_[index], iTransitionID, getTokenIndices, this); + return eventsetup::EventSetupRecordGeneric(recordImpls_[index], iTransitionID, getTokenIndices, this, &iParent); } eventsetup::EventSetupRecordImpl const* EventSetupImpl::findImpl(const eventsetup::EventSetupRecordKey& iKey) const { @@ -66,7 +67,7 @@ namespace edm { } eventsetup::EventSetupRecordImpl const* EventSetupImpl::findImpl(ESRecordIndex iKey) const { - if UNLIKELY (iKey.value() == std::numeric_limits::max()) { + if UNLIKELY (iKey.value() == ESRecordIndex::invalidValue()) { return nullptr; } return recordImpls_[iKey.value()]; diff --git a/FWCore/Framework/src/EventSetupProvider.cc b/FWCore/Framework/src/EventSetupProvider.cc index 9f669b7a7f87c..d8527595f0d85 100644 --- a/FWCore/Framework/src/EventSetupProvider.cc +++ b/FWCore/Framework/src/EventSetupProvider.cc @@ -38,9 +38,11 @@ namespace edm { namespace eventsetup { EventSetupProvider::EventSetupProvider(ActivityRegistry const* activityRegistry, + tbb::task_arena* taskArena, unsigned subProcessIndex, const PreferredProviderInfo* iInfo) : activityRegistry_(activityRegistry), + taskArena_(taskArena), mustFinishConfiguration_(true), subProcessIndex_(subProcessIndex), preferredProviderInfo_((nullptr != iInfo) ? (new PreferredProviderInfo(*iInfo)) : nullptr), @@ -696,7 +698,7 @@ namespace edm { if (needNewEventSetupImpl) { //cannot use make_shared because constructor is private - eventSetupImpl_ = std::shared_ptr(new EventSetupImpl); + eventSetupImpl_ = std::shared_ptr(new EventSetupImpl(taskArena_)); newEventSetupImpl = true; eventSetupImpl_->setKeyIters(recordKeys_.begin(), recordKeys_.end()); diff --git a/FWCore/Framework/src/EventSetupProviderMaker.cc b/FWCore/Framework/src/EventSetupProviderMaker.cc index 437ffdde4f963..3f2ddfae33613 100644 --- a/FWCore/Framework/src/EventSetupProviderMaker.cc +++ b/FWCore/Framework/src/EventSetupProviderMaker.cc @@ -24,11 +24,12 @@ namespace edm { // --------------------------------------------------------------- std::unique_ptr makeEventSetupProvider(ParameterSet const& params, unsigned subProcessIndex, - ActivityRegistry* activityRegistry) { + ActivityRegistry* activityRegistry, + tbb::task_arena* taskArena) { std::vector prefers = params.getParameter >("@all_esprefers"); if (prefers.empty()) { - return std::make_unique(activityRegistry, subProcessIndex); + return std::make_unique(activityRegistry, taskArena, subProcessIndex); } EventSetupProvider::PreferredProviderInfo preferInfo; @@ -86,7 +87,7 @@ namespace edm { preferPSet.getParameter("@module_label"), false)] = recordToData; } - return std::make_unique(activityRegistry, subProcessIndex, &preferInfo); + return std::make_unique(activityRegistry, taskArena, subProcessIndex, &preferInfo); } // --------------------------------------------------------------- diff --git a/FWCore/Framework/src/EventSetupProviderMaker.h b/FWCore/Framework/src/EventSetupProviderMaker.h index ce6532a2d2047..57b506f3361d6 100644 --- a/FWCore/Framework/src/EventSetupProviderMaker.h +++ b/FWCore/Framework/src/EventSetupProviderMaker.h @@ -3,6 +3,7 @@ // system include files #include +#include "tbb/task_arena.h" // forward declarations namespace edm { @@ -14,7 +15,8 @@ namespace edm { std::unique_ptr makeEventSetupProvider(ParameterSet const& params, unsigned subProcessIndex, - ActivityRegistry*); + ActivityRegistry*, + tbb::task_arena*); void fillEventSetupProvider(EventSetupsController& esController, EventSetupProvider& cp, ParameterSet& params); diff --git a/FWCore/Framework/src/EventSetupRecordIOVQueue.cc b/FWCore/Framework/src/EventSetupRecordIOVQueue.cc index 34c9f25f4fe88..f102f0e06d058 100644 --- a/FWCore/Framework/src/EventSetupRecordIOVQueue.cc +++ b/FWCore/Framework/src/EventSetupRecordIOVQueue.cc @@ -30,30 +30,16 @@ namespace edm { for (auto& i : isAvailable_) { i.store(true); } - waitForIOVsInFlight_ = edm::make_empty_waiting_task(); - waitForIOVsInFlight_->increment_ref_count(); - waitForIOVsInFlight_->increment_ref_count(); } - EventSetupRecordIOVQueue::~EventSetupRecordIOVQueue() { - if (!endIOVCalled_) { - // This part will normally only be executed in tests - // Normally (in cmsRun) this is done by explicitly - // calling endIOV. This is necessary because in cmsRun - // we want the task ending the IOV to run inside the - // functor passed to arena::execute. + EventSetupRecordIOVQueue::~EventSetupRecordIOVQueue() { assert(endIOVCalled_); } + + void EventSetupRecordIOVQueue::endIOVAsync(edm::WaitingTaskHolder iEndTask) { + endIOVTasks_.reset(); + if (endIOVTaskHolder_.hasTask()) { + endIOVTasks_.add(std::move(iEndTask)); { WaitingTaskHolder tmp{std::move(endIOVTaskHolder_)}; } - waitForIOVsInFlight_->decrement_ref_count(); - waitForIOVsInFlight_->wait_for_all(); } - } - - void EventSetupRecordIOVQueue::endIOV() { - // The most recently opened IOV is held opened. - // This forces it to end. - { WaitingTaskHolder tmp{std::move(endIOVTaskHolder_)}; } - waitForIOVsInFlight_->decrement_ref_count(); - waitForIOVsInFlight_->wait_for_all(); endIOVCalled_ = true; } @@ -82,7 +68,7 @@ namespace edm { for (auto& recordProvider : recordProviders_) { if (recordProvider->intervalStatus() != EventSetupRecordProvider::IntervalStatus::Invalid) { - endIOVWaitingTasks.add(endIOVWaitingTask_); + endIOVWaitingTasks.add(endIOVTaskHolder_); break; } } @@ -124,30 +110,25 @@ namespace edm { recordProvider->initializeForNewIOV(iovIndex, cacheIdentifier_); } - // Needed so the EventSetupRecordIOVQueue destructor knows when - // it can run. - waitForIOVsInFlight_->increment_ref_count(); - - endIOVWaitingTask_ = make_waiting_task(tbb::task::allocate_root(), - [this, iResumer, iovIndex](std::exception_ptr const*) mutable { - for (auto recordProvider : recordProviders_) { - recordProvider->endIOV(iovIndex); - } - isAvailable_[iovIndex].store(true); - iResumer.resume(); - waitForIOVsInFlight_->decrement_ref_count(); - // There is nothing in this task to catch an exception - // because it is extremely unlikely to throw. - }); - endIOVTaskHolder_ = WaitingTaskHolder{endIOVWaitingTask_}; - endIOVWaitingTasks.add(endIOVWaitingTask_); + auto endIOVWaitingTask = make_waiting_task([this, iResumer, iovIndex](std::exception_ptr const*) mutable { + for (auto recordProvider : recordProviders_) { + recordProvider->endIOV(iovIndex); + } + isAvailable_[iovIndex].store(true); + iResumer.resume(); + endIOVTasks_.doneWaiting(std::exception_ptr()); + // There is nothing in this task to catch an exception + // because it is extremely unlikely to throw. + }); + endIOVTaskHolder_ = WaitingTaskHolder{*taskHolder->group(), endIOVWaitingTask}; + endIOVWaitingTasks.add(endIOVTaskHolder_); } catch (...) { taskHolder->doneWaiting(std::current_exception()); return; } taskHolder->doneWaiting(std::exception_ptr{}); }; - iovQueue_.pushAndPause(std::move(startIOVForRecord)); + iovQueue_.pushAndPause(*taskToStartAfterIOVInit.group(), std::move(startIOVForRecord)); } void EventSetupRecordIOVQueue::addRecProvider(EventSetupRecordProvider* recProvider) { diff --git a/FWCore/Framework/src/EventSetupRecordIOVQueue.h b/FWCore/Framework/src/EventSetupRecordIOVQueue.h index d701e5501761d..1b26bda7d18c0 100644 --- a/FWCore/Framework/src/EventSetupRecordIOVQueue.h +++ b/FWCore/Framework/src/EventSetupRecordIOVQueue.h @@ -47,7 +47,7 @@ namespace edm { EventSetupRecordIOVQueue(unsigned int nConcurrentIOVs); ~EventSetupRecordIOVQueue(); - void endIOV(); + void endIOVAsync(WaitingTaskHolder endTask); void setNewIntervalForAnySubProcess(); @@ -62,7 +62,7 @@ namespace edm { private: // Used to limit the number of concurrent IOVs edm::LimitedTaskQueue iovQueue_; - std::unique_ptr waitForIOVsInFlight_; + edm::WaitingTaskList endIOVTasks_; // Each element of this vector corresponds to one IOV // out the set of possible concurrent IOVs. @@ -74,7 +74,6 @@ namespace edm { // These are associated with the most recent iov. unsigned long long cacheIdentifier_; WaitingTaskHolder endIOVTaskHolder_; - WaitingTask* endIOVWaitingTask_ = nullptr; bool endIOVCalled_ = false; }; diff --git a/FWCore/Framework/src/EventSetupRecordImpl.cc b/FWCore/Framework/src/EventSetupRecordImpl.cc index f182dfe547d70..433b06147f6e1 100644 --- a/FWCore/Framework/src/EventSetupRecordImpl.cc +++ b/FWCore/Framework/src/EventSetupRecordImpl.cc @@ -18,7 +18,9 @@ #include "FWCore/Framework/interface/EventSetupRecordImpl.h" #include "FWCore/Framework/interface/DataProxy.h" #include "FWCore/Framework/interface/ComponentDescription.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Utilities/interface/ConvertException.h" #include "FWCore/Utilities/interface/Exception.h" @@ -180,6 +182,7 @@ namespace edm { const void* EventSetupRecordImpl::getFromProxy(DataKey const& iKey, const ComponentDescription*& iDesc, bool iTransientAccessOnly, + ESParentContext const& iParent, EventSetupImpl const* iEventSetupImpl) const { const DataProxy* proxy = this->find(iKey); @@ -188,7 +191,7 @@ namespace edm { if (nullptr != proxy) { try { convertException::wrap([&]() { - hold = proxy->get(*this, iKey, iTransientAccessOnly, activityRegistry_, iEventSetupImpl); + hold = proxy->get(*this, iKey, iTransientAccessOnly, activityRegistry_, iEventSetupImpl, iParent); iDesc = proxy->providerDescription(); }); } catch (cms::Exception& e) { @@ -205,6 +208,7 @@ namespace edm { bool iTransientAccessOnly, const ComponentDescription*& iDesc, DataKey const*& oGottenKey, + ESParentContext const& iParent, EventSetupImpl const* iEventSetupImpl) const { if (iProxyIndex.value() >= static_cast(proxies_.size())) { return nullptr; @@ -219,8 +223,9 @@ namespace edm { auto const& key = keysForProxies_[iProxyIndex.value()]; oGottenKey = &key; try { - convertException::wrap( - [&]() { hold = proxy->get(*this, key, iTransientAccessOnly, activityRegistry_, iEventSetupImpl); }); + convertException::wrap([&]() { + hold = proxy->get(*this, key, iTransientAccessOnly, activityRegistry_, iEventSetupImpl, iParent); + }); } catch (cms::Exception& e) { addTraceInfoToCmsException(e, key.name().value(), proxy->providerDescription(), key); throw; @@ -257,10 +262,11 @@ namespace edm { return proxies_[std::distance(keysForProxies_.begin(), lb)].get(); } - void EventSetupRecordImpl::prefetchAsync(WaitingTask* iTask, + void EventSetupRecordImpl::prefetchAsync(WaitingTaskHolder iTask, ESProxyIndex iProxyIndex, EventSetupImpl const* iEventSetupImpl, - ServiceToken const& iToken) const { + ServiceToken const& iToken, + ESParentContext iParent) const { if UNLIKELY (iProxyIndex.value() == std::numeric_limits::max()) { return; } @@ -268,7 +274,7 @@ namespace edm { const DataProxy* proxy = proxies_[iProxyIndex.value()]; if (nullptr != proxy) { auto const& key = keysForProxies_[iProxyIndex.value()]; - proxy->prefetchAsync(iTask, *this, key, iEventSetupImpl, iToken); + proxy->prefetchAsync(iTask, *this, key, iEventSetupImpl, iToken, iParent); } } diff --git a/FWCore/Framework/src/EventSetupsController.cc b/FWCore/Framework/src/EventSetupsController.cc index bcaba8fd7ccd3..90649f33cce42 100644 --- a/FWCore/Framework/src/EventSetupsController.cc +++ b/FWCore/Framework/src/EventSetupsController.cc @@ -31,11 +31,11 @@ namespace edm { namespace eventsetup { - EventSetupsController::EventSetupsController() {} + EventSetupsController::EventSetupsController() : taskArena_(tbb::this_task_arena::max_concurrency()) {} - void EventSetupsController::endIOVs() { + void EventSetupsController::endIOVsAsync(edm::WaitingTaskHolder iEndTask) { for (auto& eventSetupRecordIOVQueue : eventSetupRecordIOVQueues_) { - eventSetupRecordIOVQueue->endIOV(); + eventSetupRecordIOVQueue->endIOVAsync(iEndTask); } } @@ -46,7 +46,7 @@ namespace edm { // Also parses the prefer information from ParameterSets and puts // it in a map that is stored in the EventSetupProvider std::shared_ptr returnValue( - makeEventSetupProvider(iPSet, providers_.size(), activityRegistry)); + makeEventSetupProvider(iPSet, providers_.size(), activityRegistry, &taskArena_)); // Construct the ESProducers and ESSources // shared_ptrs to them are temporarily stored in this @@ -89,7 +89,7 @@ namespace edm { } } - void EventSetupsController::eventSetupForInstance( + void EventSetupsController::eventSetupForInstanceAsync( IOVSyncValue const& syncValue, WaitingTaskHolder const& taskToStartAfterIOVInit, WaitingTaskList& endIOVWaitingTasks, @@ -128,45 +128,6 @@ namespace edm { } } - void EventSetupsController::eventSetupForInstance(IOVSyncValue const& syncValue) { - // This function only supports use cases where the event setup - // system is used without multiple concurrent IOVs. - // At the time this comment is being written, this is used for - // run transitions and in unit test code. In the future, - // it may only be needed for unit tests. This function uses - // the other version of eventSetupForInstance that - // supports concurrent IOVs. To get this to work, a couple - // arguments to that function need dummy objects that do - // not serve any purpose in this context. We also need to - // add in a task to wait for the asynchronous initialization - // of IOVs to complete. - - auto waitUntilIOVInitializationCompletes = make_empty_waiting_task(); - waitUntilIOVInitializationCompletes->increment_ref_count(); - - // These do nothing ... - WaitingTaskList dummyWaitingTaskList; - std::vector> dummyEventSetupImpls; - - { - WaitingTaskHolder waitingTaskHolder(waitUntilIOVInitializationCompletes.get()); - // Caught exception is propagated via WaitingTaskHolder - CMS_SA_ALLOW try { - // All the real work is done here. - eventSetupForInstance(syncValue, waitingTaskHolder, dummyWaitingTaskList, dummyEventSetupImpls); - dummyWaitingTaskList.doneWaiting(std::exception_ptr{}); - } catch (...) { - dummyWaitingTaskList.doneWaiting(std::exception_ptr{}); - waitingTaskHolder.doneWaiting(std::current_exception()); - } - } - waitUntilIOVInitializationCompletes->wait_for_all(); - - if (waitUntilIOVInitializationCompletes->exceptionPtr() != nullptr) { - std::rethrow_exception(*(waitUntilIOVInitializationCompletes->exceptionPtr())); - } - } - bool EventSetupsController::doWeNeedToWaitForIOVsToFinish(IOVSyncValue const& syncValue) const { if (hasNonconcurrentFinder()) { for (auto& eventSetupProvider : providers_) { @@ -450,5 +411,35 @@ namespace edm { } } + void synchronousEventSetupForInstance(IOVSyncValue const& syncValue, + tbb::task_group& iGroup, + eventsetup::EventSetupsController& espController) { + FinalWaitingTask waitUntilIOVInitializationCompletes; + + // These do nothing ... + WaitingTaskList dummyWaitingTaskList; + std::vector> dummyEventSetupImpls; + + { + WaitingTaskHolder waitingTaskHolder(iGroup, &waitUntilIOVInitializationCompletes); + // Caught exception is propagated via WaitingTaskHolder + CMS_SA_ALLOW try { + // All the real work is done here. + espController.eventSetupForInstanceAsync( + syncValue, waitingTaskHolder, dummyWaitingTaskList, dummyEventSetupImpls); + dummyWaitingTaskList.doneWaiting(std::exception_ptr{}); + } catch (...) { + dummyWaitingTaskList.doneWaiting(std::exception_ptr{}); + waitingTaskHolder.doneWaiting(std::current_exception()); + } + } + do { + iGroup.wait(); + } while (not waitUntilIOVInitializationCompletes.done()); + + if (waitUntilIOVInitializationCompletes.exceptionPtr() != nullptr) { + std::rethrow_exception(*(waitUntilIOVInitializationCompletes.exceptionPtr())); + } + } } // namespace eventsetup } // namespace edm diff --git a/FWCore/Framework/src/EventSetupsController.h b/FWCore/Framework/src/EventSetupsController.h index e57ff9bdf8d20..149fce98865b7 100644 --- a/FWCore/Framework/src/EventSetupsController.h +++ b/FWCore/Framework/src/EventSetupsController.h @@ -26,6 +26,7 @@ #include #include #include +#include "tbb/task_arena.h" namespace edm { @@ -83,7 +84,7 @@ namespace edm { EventSetupsController(EventSetupsController const&) = delete; EventSetupsController const& operator=(EventSetupsController const&) = delete; - void endIOVs(); + void endIOVsAsync(edm::WaitingTaskHolder iEndTask); std::shared_ptr makeProvider(ParameterSet&, ActivityRegistry*, @@ -103,13 +104,10 @@ namespace edm { // of EventSetup access to the EventSetup system such that for each record the IOV // associated with this IOVSyncValue will be used. The first element of the vector // is for the top level process and each additional element corresponds to a SubProcess. - void eventSetupForInstance(IOVSyncValue const&, - WaitingTaskHolder const& taskToStartAfterIOVInit, - WaitingTaskList& endIOVWaitingTasks, - std::vector>&); - - // Version to use when IOVs are not allowed to run concurrently - void eventSetupForInstance(IOVSyncValue const&); + void eventSetupForInstanceAsync(IOVSyncValue const&, + WaitingTaskHolder const& taskToStartAfterIOVInit, + WaitingTaskList& endIOVWaitingTasks, + std::vector>&); bool doWeNeedToWaitForIOVsToFinish(IOVSyncValue const&) const; @@ -166,6 +164,7 @@ namespace edm { void initializeEventSetupRecordIOVQueues(); // ---------- member data -------------------------------- + tbb::task_arena taskArena_; std::vector>> providers_; NumberOfConcurrentIOVs numberOfConcurrentIOVs_; @@ -189,6 +188,10 @@ namespace edm { bool hasNonconcurrentFinder_ = false; bool mustFinishConfiguration_ = true; }; + + void synchronousEventSetupForInstance(IOVSyncValue const& syncValue, + tbb::task_group& iGroup, + eventsetup::EventSetupsController& espController); } // namespace eventsetup } // namespace edm #endif diff --git a/FWCore/Framework/src/GenericHandle.cc b/FWCore/Framework/src/GenericHandle.cc index 49319fc63cac4..464be8ebd23d3 100644 --- a/FWCore/Framework/src/GenericHandle.cc +++ b/FWCore/Framework/src/GenericHandle.cc @@ -44,9 +44,9 @@ namespace edm { ///Specialize the getByLabel method to work with a Handle template <> - bool edm::Event::getByLabel(std::string const& label, - std::string const& productInstanceName, - Handle& result) const { + bool Event::getByLabel(std::string const& label, + std::string const& productInstanceName, + Handle& result) const { BasicHandle bh = provRecorder_.getByLabel_( TypeID(result.type().typeInfo()), label, productInstanceName, std::string(), moduleCallingContext_); convert_handle(std::move(bh), result); // throws on conversion error @@ -58,7 +58,7 @@ namespace edm { } template <> - bool edm::Event::getByLabel(edm::InputTag const& tag, Handle& result) const { + bool Event::getByLabel(InputTag const& tag, Handle& result) const { if (tag.process().empty()) { return this->getByLabel(tag.label(), tag.instance(), result); } else { @@ -73,4 +73,18 @@ namespace edm { return false; } + ///Specialize the Event's getByToken method to work with a Handle + template <> + bool Event::getByToken(EDGetToken token, Handle& result) const { + result.clear(); + BasicHandle bh = + provRecorder_.getByToken_(TypeID(result.type().typeInfo()), PRODUCT_TYPE, token, moduleCallingContext_); + convert_handle(std::move(bh), result); // throws on conversion error + if (UNLIKELY(result.failedToGet())) { + return false; + } + addToGotBranchIDs(*result.provenance()); + return true; + } + } // namespace edm diff --git a/FWCore/Framework/src/GlobalSchedule.cc b/FWCore/Framework/src/GlobalSchedule.cc index 501f4443011e9..177272192850a 100644 --- a/FWCore/Framework/src/GlobalSchedule.cc +++ b/FWCore/Framework/src/GlobalSchedule.cc @@ -99,7 +99,7 @@ namespace edm { Worker* found = nullptr; for (auto& wm : workerManagers_) { for (auto const& worker : wm.allWorkers()) { - if (worker->description().moduleLabel() == iLabel) { + if (worker->description()->moduleLabel() == iLabel) { found = worker; break; } @@ -113,12 +113,18 @@ namespace edm { } } + void GlobalSchedule::deleteModule(std::string const& iLabel) { + for (auto& wm : workerManagers_) { + wm.deleteModuleIfExists(iLabel); + } + } + std::vector GlobalSchedule::getAllModuleDescriptions() const { std::vector result; result.reserve(allWorkers().size()); for (auto const& worker : allWorkers()) { - ModuleDescription const* p = worker->descPtr(); + ModuleDescription const* p = worker->description(); result.push_back(p); } return result; diff --git a/FWCore/Framework/src/GlobalSchedule.h b/FWCore/Framework/src/GlobalSchedule.h index 2c66a6b915b14..2496704455f83 100644 --- a/FWCore/Framework/src/GlobalSchedule.h +++ b/FWCore/Framework/src/GlobalSchedule.h @@ -121,6 +121,9 @@ namespace edm { /// clone the type of module with label iLabel but configure with iPSet. void replaceModule(maker::ModuleHolder* iMod, std::string const& iLabel); + /// Delete the module with label iLabel + void deleteModule(std::string const& iLabel); + /// returns the collection of pointers to workers AllWorkers const& allWorkers() const { return workerManagers_[0].allWorkers(); } @@ -173,7 +176,6 @@ namespace edm { } auto doneTask = make_waiting_task( - tbb::task::allocate_root(), [this, iHolder, cleaningUpAfterException, globalContext, token](std::exception_ptr const* iPtr) mutable { std::exception_ptr excpt; if (iPtr) { @@ -218,11 +220,11 @@ namespace edm { workerManager.setupResolvers(transitionInfo.principal()); //make sure the task doesn't get run until all workers have beens started - WaitingTaskHolder holdForLoop(doneTask); + WaitingTaskHolder holdForLoop(*iHolder.group(), doneTask); auto& aw = workerManager.allWorkers(); for (Worker* worker : boost::adaptors::reverse(aw)) { worker->doWorkAsync( - doneTask, transitionInfo, token, StreamID::invalidStreamID(), parentContext, globalContext.get()); + holdForLoop, transitionInfo, token, StreamID::invalidStreamID(), parentContext, globalContext.get()); } } catch (...) { iHolder.doneWaiting(std::current_exception()); diff --git a/FWCore/Framework/src/LuminosityBlock.cc b/FWCore/Framework/src/LuminosityBlock.cc index 7a73b72e3cad3..518940e203ca0 100644 --- a/FWCore/Framework/src/LuminosityBlock.cc +++ b/FWCore/Framework/src/LuminosityBlock.cc @@ -61,8 +61,12 @@ namespace edm { return dynamic_cast(provRecorder_.principal()); } - Provenance LuminosityBlock::getProvenance(BranchID const& bid) const { - return luminosityBlockPrincipal().getProvenance(bid, moduleCallingContext_); + Provenance const& LuminosityBlock::getProvenance(BranchID const& bid) const { + return luminosityBlockPrincipal().getProvenance(bid); + } + + StableProvenance const& LuminosityBlock::getStableProvenance(BranchID const& bid) const { + return luminosityBlockPrincipal().getStableProvenance(bid); } void LuminosityBlock::getAllStableProvenance(std::vector& provenances) const { diff --git a/FWCore/Framework/src/ModuleRegistry.cc b/FWCore/Framework/src/ModuleRegistry.cc index 289cd55ff0235..c83762beb7640 100644 --- a/FWCore/Framework/src/ModuleRegistry.cc +++ b/FWCore/Framework/src/ModuleRegistry.cc @@ -49,4 +49,35 @@ namespace edm { modItr->second = modPtr; return modItr->second.get(); } + + void ModuleRegistry::deleteModule(std::string const& iModuleLabel, + signalslot::Signal& iPre, + signalslot::Signal& iPost) { + auto modItr = labelToModule_.find(iModuleLabel); + if (modItr == labelToModule_.end()) { + throw cms::Exception("LogicError") + << "Trying to delete module " << iModuleLabel + << " but it does not exist in the ModuleRegistry. Please contact framework developers."; + } + // If iPost throws and exception, let it propagate + // If deletion throws an exception, capture it and call iPost before throwing an exception + // If iPost throws an exception, let it propagate + auto md = modItr->second->moduleDescription(); + iPre(modItr->second->moduleDescription()); + bool postCalled = false; + // exception is rethrown + CMS_SA_ALLOW try { + labelToModule_.erase(modItr); + // if exception then post will be called in the catch block + postCalled = true; + iPost(md); + } catch (...) { + if (not postCalled) { + // we're already handling exception, nothing we can do if iPost throws + CMS_SA_ALLOW try { iPost(md); } catch (...) { + } + } + throw; + } + } } // namespace edm diff --git a/FWCore/Framework/src/ModuleRegistry.h b/FWCore/Framework/src/ModuleRegistry.h index 2f9aa80d3bf29..4978ee6e2c6ee 100644 --- a/FWCore/Framework/src/ModuleRegistry.h +++ b/FWCore/Framework/src/ModuleRegistry.h @@ -48,6 +48,10 @@ namespace edm { edm::ParameterSet const& iPSet, edm::PreallocationConfiguration const&); + void deleteModule(std::string const& iModuleLabel, + signalslot::Signal& iPre, + signalslot::Signal& iPost); + template void forAllModuleHolders(F iFunc) { for (auto& labelMod : labelToModule_) { diff --git a/FWCore/Framework/src/OccurrenceForOutput.cc b/FWCore/Framework/src/OccurrenceForOutput.cc index 2e80769afe670..da5d7e6786614 100644 --- a/FWCore/Framework/src/OccurrenceForOutput.cc +++ b/FWCore/Framework/src/OccurrenceForOutput.cc @@ -26,7 +26,7 @@ namespace edm { ProcessHistoryID const& OccurrenceForOutput::processHistoryID() const { return principal().processHistoryID(); } Provenance OccurrenceForOutput::getProvenance(BranchID const& bid) const { - return provRecorder_.principal().getProvenance(bid, moduleCallingContext_); + return provRecorder_.principal().getProvenance(bid); } void OccurrenceForOutput::getAllProvenance(std::vector& provenances) const { diff --git a/FWCore/Framework/src/OutputModuleCommunicatorT.cc b/FWCore/Framework/src/OutputModuleCommunicatorT.cc index 60a983404dbfb..3d99ac5452c56 100644 --- a/FWCore/Framework/src/OutputModuleCommunicatorT.cc +++ b/FWCore/Framework/src/OutputModuleCommunicatorT.cc @@ -25,19 +25,23 @@ namespace { template - void async(edm::one::OutputModuleBase& iMod, F&& iFunc) { - iMod.sharedResourcesAcquirer().serialQueueChain().push(std::move(iFunc)); + void async(edm::one::OutputModuleBase& iMod, tbb::task_group& iGroup, F&& iFunc) { + iMod.sharedResourcesAcquirer().serialQueueChain().push(iGroup, std::move(iFunc)); } template - void async(edm::limited::OutputModuleBase& iMod, F&& iFunc) { - iMod.queue().push(std::move(iFunc)); + void async(edm::limited::OutputModuleBase& iMod, tbb::task_group& iGroup, F&& iFunc) { + iMod.queue().push(iGroup, std::move(iFunc)); } template - void async(edm::global::OutputModuleBase&, F iFunc) { - auto t = edm::make_functor_task(tbb::task::allocate_root(), iFunc); - tbb::task::spawn(*t); + void async(edm::global::OutputModuleBase&, tbb::task_group& iGroup, F iFunc) { + //NOTE, need the functor since group can not run a 'mutable' lambda + auto t = edm::make_functor_task(iFunc); + iGroup.run([t]() { + edm::TaskSentry s(t); + t->execute(); + }); } } // namespace @@ -94,7 +98,7 @@ namespace edm { } iTask.doneWaiting(ex); }; - async(module(), std::move(t)); + async(module(), *iTask.group(), std::move(t)); } template @@ -135,7 +139,7 @@ namespace edm { } iTask.doneWaiting(ex); }; - async(module(), std::move(t)); + async(module(), *iTask.group(), std::move(t)); } template @@ -169,7 +173,7 @@ namespace edm { } iTask.doneWaiting(ex); }; - async(module(), std::move(t)); + async(module(), *iTask.group(), std::move(t)); } template diff --git a/FWCore/Framework/src/Path.cc b/FWCore/Framework/src/Path.cc index fcf01ad587c75..600f8165734a5 100644 --- a/FWCore/Framework/src/Path.cc +++ b/FWCore/Framework/src/Path.cc @@ -215,7 +215,7 @@ namespace edm { pathStatusInserterWorker_ = pathStatusInserterWorker; } - void Path::processOneOccurrenceAsync(WaitingTask* iTask, + void Path::processOneOccurrenceAsync(WaitingTaskHolder iTask, EventTransitionInfo const& iInfo, ServiceToken const& iToken, StreamID const& iStreamID, @@ -238,7 +238,7 @@ namespace edm { return; } - runNextWorkerAsync(0, iInfo, iToken, iStreamID, iStreamContext); + runNextWorkerAsync(0, iInfo, iToken, iStreamID, iStreamContext, *iTask.group()); } void Path::workerFinished(std::exception_ptr const* iException, @@ -246,7 +246,8 @@ namespace edm { EventTransitionInfo const& iInfo, ServiceToken const& iToken, StreamID const& iID, - StreamContext const* iContext) { + StreamContext const* iContext, + tbb::task_group& iGroup) { EventPrincipal const& iEP = iInfo.principal(); ServiceRegistry::Operate guard(iToken); @@ -266,12 +267,14 @@ namespace edm { CMS_SA_ALLOW try { std::ostringstream ost; ost << iEP.id(); + ModuleDescription const* desc = worker.getWorker()->description(); + assert(desc != nullptr); shouldContinue = handleWorkerFailure(*pEx, iModuleIndex, /*isEvent*/ true, /*isBegin*/ true, InEvent, - worker.getWorker()->description(), + *desc, ost.str()); //If we didn't rethrow, then we effectively skipped worker.skipWorker(iEP); @@ -293,7 +296,7 @@ namespace edm { if (shouldContinue and nextIndex < workers_.size()) { if (not worker.runConcurrently()) { --modulesToRun_; - runNextWorkerAsync(nextIndex, iInfo, iToken, iID, iContext); + runNextWorkerAsync(nextIndex, iInfo, iToken, iID, iContext, iGroup); return; } } @@ -346,7 +349,8 @@ namespace edm { EventTransitionInfo const& iInfo, ServiceToken const& iToken, StreamID const& iID, - StreamContext const* iContext) { + StreamContext const* iContext, + tbb::task_group& iGroup) { //Figure out which next modules can run concurrently const int firstModuleIndex = iNextModuleIndex; int lastModuleIndex = firstModuleIndex; @@ -354,13 +358,12 @@ namespace edm { ++lastModuleIndex; } for (; lastModuleIndex >= firstModuleIndex; --lastModuleIndex) { - auto nextTask = make_waiting_task( - tbb::task::allocate_root(), - [this, lastModuleIndex, info = iInfo, iID, iContext, token = iToken](std::exception_ptr const* iException) { - this->workerFinished(iException, lastModuleIndex, info, token, iID, iContext); - }); + auto nextTask = make_waiting_task([this, lastModuleIndex, info = iInfo, iID, iContext, token = iToken, &iGroup]( + std::exception_ptr const* iException) { + this->workerFinished(iException, lastModuleIndex, info, token, iID, iContext, iGroup); + }); workers_[lastModuleIndex].runWorkerAsync>( - nextTask, iInfo, iToken, iID, iContext); + WaitingTaskHolder(iGroup, nextTask), iInfo, iToken, iID, iContext); } } diff --git a/FWCore/Framework/src/Path.h b/FWCore/Framework/src/Path.h index 959714f17eddd..ac340a48ac681 100644 --- a/FWCore/Framework/src/Path.h +++ b/FWCore/Framework/src/Path.h @@ -16,6 +16,7 @@ #include "DataFormats/Common/interface/HLTenums.h" #include "DataFormats/Common/interface/TriggerResults.h" #include "FWCore/ServiceRegistry/interface/PathContext.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Utilities/interface/BranchType.h" #include "FWCore/Utilities/interface/Exception.h" #include "FWCore/Utilities/interface/ConvertException.h" @@ -36,7 +37,6 @@ namespace edm { class EarlyDeleteHelper; class StreamContext; class StreamID; - class WaitingTask; class Path { public: @@ -61,14 +61,14 @@ namespace edm { Path& operator=(Path const&) = delete; template - void runAllModulesAsync(WaitingTask*, + void runAllModulesAsync(WaitingTaskHolder, typename T::TransitionInfoType const&, ServiceToken const&, StreamID const&, typename T::Context const*); void processOneOccurrenceAsync( - WaitingTask*, EventTransitionInfo const&, ServiceToken const&, StreamID const&, StreamContext const*); + WaitingTaskHolder, EventTransitionInfo const&, ServiceToken const&, StreamID const&, StreamContext const*); int bitPosition() const { return bitpos_; } std::string const& name() const { return pathContext_.pathName(); } @@ -148,12 +148,14 @@ namespace edm { EventTransitionInfo const&, ServiceToken const&, StreamID const&, - StreamContext const*); + StreamContext const*, + tbb::task_group& iGroup); void runNextWorkerAsync(unsigned int iNextModuleIndex, EventTransitionInfo const&, ServiceToken const&, StreamID const&, - StreamContext const*); + StreamContext const*, + tbb::task_group& iGroup); }; namespace { @@ -183,7 +185,7 @@ namespace edm { } // namespace template - void Path::runAllModulesAsync(WaitingTask* task, + void Path::runAllModulesAsync(WaitingTaskHolder task, typename T::TransitionInfoType const& info, ServiceToken const& token, StreamID const& streamID, diff --git a/FWCore/Framework/src/PathsAndConsumesOfModules.cc b/FWCore/Framework/src/PathsAndConsumesOfModules.cc index eafc1fd7550cf..646d22834cebe 100644 --- a/FWCore/Framework/src/PathsAndConsumesOfModules.cc +++ b/FWCore/Framework/src/PathsAndConsumesOfModules.cc @@ -1,6 +1,7 @@ #include "FWCore/Framework/interface/PathsAndConsumesOfModules.h" #include "FWCore/Framework/interface/Schedule.h" +#include "FWCore/Framework/interface/ModuleProcessName.h" #include "FWCore/Framework/src/Worker.h" #include "throwIfImproperDependencies.h" @@ -9,7 +10,8 @@ #include namespace edm { - PathsAndConsumesOfModules::~PathsAndConsumesOfModules() {} + PathsAndConsumesOfModules::PathsAndConsumesOfModules() = default; + PathsAndConsumesOfModules::~PathsAndConsumesOfModules() = default; void PathsAndConsumesOfModules::initialize(Schedule const* schedule, std::shared_ptr preg) { schedule_ = schedule; @@ -41,8 +43,53 @@ namespace edm { ++i; } - schedule->fillModuleAndConsumesInfo( - allModuleDescriptions_, moduleIDToIndex_, modulesWhoseProductsAreConsumedBy_, *preg); + schedule->fillModuleAndConsumesInfo(allModuleDescriptions_, + moduleIDToIndex_, + modulesWhoseProductsAreConsumedBy_, + modulesInPreviousProcessesWhoseProductsAreConsumedBy_, + *preg); + } + + void PathsAndConsumesOfModules::removeModules(std::vector const& modules) { + // First check that no modules on Paths are removed + auto checkPath = [&modules](auto const& paths) { + for (auto const& path : paths) { + for (auto const& description : path) { + if (std::find(modules.begin(), modules.end(), description) != modules.end()) { + throw cms::Exception("Assert") + << "PathsAndConsumesOfModules::removeModules() is trying to remove a module with label " + << description->moduleLabel() << " id " << description->id() << " from a Path, this should not happen."; + } + } + } + }; + checkPath(modulesOnPaths_); + checkPath(modulesOnEndPaths_); + + // Remove the modules and adjust the indices in idToIndex map + for (auto iModule = 0U; iModule != allModuleDescriptions_.size(); ++iModule) { + auto found = std::find(modules.begin(), modules.end(), allModuleDescriptions_[iModule]); + if (found != modules.end()) { + allModuleDescriptions_.erase(allModuleDescriptions_.begin() + iModule); + for (auto iBranchType = 0U; iBranchType != NumBranchTypes; ++iBranchType) { + modulesWhoseProductsAreConsumedBy_[iBranchType].erase( + modulesWhoseProductsAreConsumedBy_[iBranchType].begin() + iModule); + } + modulesInPreviousProcessesWhoseProductsAreConsumedBy_.erase( + modulesInPreviousProcessesWhoseProductsAreConsumedBy_.begin() + iModule); + for (auto& idToIndex : moduleIDToIndex_) { + if (idToIndex.second >= iModule) { + idToIndex.second--; + } + } + --iModule; + } + } + } + + std::vector const& PathsAndConsumesOfModules::modulesInPreviousProcessesWhoseProductsAreConsumedBy( + unsigned int moduleID) const { + return modulesInPreviousProcessesWhoseProductsAreConsumedBy_.at(moduleIndex(moduleID)); } ModuleDescription const* PathsAndConsumesOfModules::doModuleDescription(unsigned int moduleID) const { @@ -51,7 +98,8 @@ namespace edm { std::vector>::const_iterator iter = std::lower_bound(moduleIDToIndex_.begin(), moduleIDToIndex_.end(), target); if (iter == moduleIDToIndex_.end() || iter->first != moduleID) { - throw Exception(errors::LogicError) << "PathsAndConsumesOfModules::moduleDescription: Unknown moduleID\n"; + throw Exception(errors::LogicError) + << "PathsAndConsumesOfModules::moduleDescription: Unknown moduleID " << moduleID << "\n"; } return allModuleDescriptions_.at(iter->second); } @@ -66,8 +114,8 @@ namespace edm { } std::vector const& PathsAndConsumesOfModules::doModulesWhoseProductsAreConsumedBy( - unsigned int moduleID) const { - return modulesWhoseProductsAreConsumedBy_.at(moduleIndex(moduleID)); + unsigned int moduleID, BranchType branchType) const { + return modulesWhoseProductsAreConsumedBy_[branchType].at(moduleIndex(moduleID)); } std::vector PathsAndConsumesOfModules::doConsumesInfo(unsigned int moduleID) const { @@ -75,16 +123,107 @@ namespace edm { return worker->consumesInfo(); } + unsigned int PathsAndConsumesOfModules::doLargestModuleID() const { + // moduleIDToIndex_ is sorted, so last element has the largest ID + return moduleIDToIndex_.empty() ? 0 : moduleIDToIndex_.back().first; + } + unsigned int PathsAndConsumesOfModules::moduleIndex(unsigned int moduleID) const { unsigned int dummy = 0; auto target = std::make_pair(moduleID, dummy); std::vector>::const_iterator iter = std::lower_bound(moduleIDToIndex_.begin(), moduleIDToIndex_.end(), target); if (iter == moduleIDToIndex_.end() || iter->first != moduleID) { - throw Exception(errors::LogicError) << "PathsAndConsumesOfModules::moduleIndex: Unknown moduleID\n"; + throw Exception(errors::LogicError) + << "PathsAndConsumesOfModules::moduleIndex: Unknown moduleID " << moduleID << "\n"; } return iter->second; } +} // namespace edm + +namespace { + // helper function for nonConsumedUnscheduledModules, + void findAllConsumedModules(edm::PathsAndConsumesOfModulesBase const& iPnC, + edm::ModuleDescription const* module, + std::unordered_set& consumedModules) { + // If this node of the DAG has been processed already, no need to + // reprocess again + if (consumedModules.find(module->id()) != consumedModules.end()) { + return; + } + consumedModules.insert(module->id()); + for (auto iBranchType = 0U; iBranchType != edm::NumBranchTypes; ++iBranchType) { + for (auto const& c : + iPnC.modulesWhoseProductsAreConsumedBy(module->id(), static_cast(iBranchType))) { + findAllConsumedModules(iPnC, c, consumedModules); + } + } + } +} // namespace + +namespace edm { + std::vector nonConsumedUnscheduledModules( + edm::PathsAndConsumesOfModulesBase const& iPnC, std::vector& consumedByChildren) { + const std::string kTriggerResults("TriggerResults"); + + std::vector pathNames = iPnC.paths(); + const unsigned int kFirstEndPathIndex = pathNames.size(); + pathNames.insert(pathNames.end(), iPnC.endPaths().begin(), iPnC.endPaths().end()); + + // The goal is to find modules that are not depended upon by + // scheduled modules. To do that, we identify all modules that are + // depended upon by scheduled modules, and do a set subtraction. + // + // First, denote all scheduled modules (i.e. in Paths and + // EndPaths) as "consumers". + std::vector consumerModules; + for (unsigned int pathIndex = 0; pathIndex != pathNames.size(); ++pathIndex) { + std::vector const* moduleDescriptions; + if (pathIndex < kFirstEndPathIndex) { + moduleDescriptions = &(iPnC.modulesOnPath(pathIndex)); + } else { + moduleDescriptions = &(iPnC.modulesOnEndPath(pathIndex - kFirstEndPathIndex)); + } + std::copy(moduleDescriptions->begin(), moduleDescriptions->end(), std::back_inserter(consumerModules)); + } + + // Then add TriggerResults, and all Paths and EndPaths themselves + // to the set of "consumers" (even if they don't depend on any + // data products, they must not be deleted). Also add anything + // consumed by child SubProcesses to the set of "consumers". + auto const& allModules = iPnC.allModules(); + for (auto const& description : allModules) { + if (description->moduleLabel() == kTriggerResults or + std::find(pathNames.begin(), pathNames.end(), description->moduleLabel()) != pathNames.end()) { + consumerModules.push_back(description); + } else if (std::binary_search(consumedByChildren.begin(), + consumedByChildren.end(), + ModuleProcessName{description->moduleLabel(), description->processName()}) or + std::binary_search(consumedByChildren.begin(), + consumedByChildren.end(), + ModuleProcessName{description->moduleLabel(), ""})) { + consumerModules.push_back(description); + } + } + + // Find modules that have any data dependence path to any module + // in consumerModules. + std::unordered_set consumedModules; + for (auto& description : consumerModules) { + findAllConsumedModules(iPnC, description, consumedModules); + } + + // All other modules will then be classified as non-consumed, even + // if they would have dependencies within them. + std::vector unusedModules; + std::copy_if(allModules.begin(), + allModules.end(), + std::back_inserter(unusedModules), + [&consumedModules](ModuleDescription const* description) { + return consumedModules.find(description->id()) == consumedModules.end(); + }); + return unusedModules; + } //==================================== // checkForCorrectness algorithm diff --git a/FWCore/Framework/src/Principal.cc b/FWCore/Framework/src/Principal.cc index 17c54cd9c4815..25228ea5de14f 100644 --- a/FWCore/Framework/src/Principal.cc +++ b/FWCore/Framework/src/Principal.cc @@ -623,7 +623,7 @@ namespace edm { return BasicHandle(productData->wrapper(), &(productData->provenance())); } - void Principal::prefetchAsync(WaitingTask* task, + void Principal::prefetchAsync(WaitingTaskHolder task, ProductResolverIndex index, bool skipCurrentProcess, ServiceToken const& token, @@ -821,20 +821,28 @@ namespace edm { return productData; } - Provenance Principal::getProvenance(BranchID const& bid, ModuleCallingContext const* mcc) const { + Provenance const& Principal::getProvenance(BranchID const& bid) const { ConstProductResolverPtr const phb = getProductResolver(bid); if (phb == nullptr) { throwProductNotFoundException("getProvenance", errors::ProductNotFound, bid); } if (phb->unscheduledWasNotRun()) { - if (not phb->resolveProduct(*this, false, nullptr, mcc).data()) { - throwProductNotFoundException("getProvenance(onDemand)", errors::ProductNotFound, bid); - } + throw edm::Exception(errors::UnimplementedFeature) + << "Requesting provenance from unrun EDProducer. The requested branch ID was: " << bid; } return *phb->provenance(); } + StableProvenance const& Principal::getStableProvenance(BranchID const& bid) const { + ConstProductResolverPtr const phb = getProductResolver(bid); + if (phb == nullptr) { + throwProductNotFoundException("getStableProvenance", errors::ProductNotFound, bid); + } + //NOTE: in all implementations, this never returns a nullptr + return *phb->stableProvenance(); + } + // This one is mostly for test printout purposes // No attempt to trigger on demand execution // Skips provenance when the EDProduct is not there diff --git a/FWCore/Framework/src/ProductResolvers.cc b/FWCore/Framework/src/ProductResolvers.cc index 50ae96afbbc13..bcdb6b6ad64ac 100644 --- a/FWCore/Framework/src/ProductResolvers.cc +++ b/FWCore/Framework/src/ProductResolvers.cc @@ -243,7 +243,7 @@ namespace edm { setMergeableRunProductMetadataInProductData(mrpm); } - void InputProductResolver::prefetchAsync_(WaitingTask* waitTask, + void InputProductResolver::prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, @@ -289,11 +289,14 @@ namespace edm { } } if (queue) { - queue->push(workToDo); + queue->push(*waitTask.group(), workToDo); } else { //Have to create a new task - auto t = make_functor_task(tbb::task::allocate_root(), workToDo); - tbb::task::spawn(*t); + auto t = make_functor_task(workToDo); + waitTask.group()->run([t]() { + TaskSentry s{t}; + t->execute(); + }); } } } @@ -323,7 +326,7 @@ namespace edm { return Resolution(nullptr); } - void PuttableProductResolver::prefetchAsync_(WaitingTask* waitTask, + void PuttableProductResolver::prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, @@ -346,14 +349,14 @@ namespace edm { // if the module does not put this data product or the // module has an exception while running - auto waiting = make_waiting_task(tbb::task::allocate_root(), [this](std::exception_ptr const* iException) { + auto waiting = make_waiting_task([this](std::exception_ptr const* iException) { if (nullptr != iException) { m_waitingTasks.doneWaiting(*iException); } else { m_waitingTasks.doneWaiting(std::exception_ptr()); } }); - worker_->callWhenDoneAsync(waiting); + worker_->callWhenDoneAsync(WaitingTaskHolder(*waitTask.group(), waiting)); } } } @@ -381,48 +384,27 @@ namespace edm { void UnscheduledProductResolver::setupUnscheduled(UnscheduledConfigurator const& iConfigure) { aux_ = iConfigure.auxiliary(); worker_ = iConfigure.findWorker(branchDescription().moduleLabel()); - assert(worker_ != nullptr); } ProductResolverBase::Resolution UnscheduledProductResolver::resolveProduct_(Principal const&, bool skipCurrentProcess, - SharedResourcesAcquirer* sra, - ModuleCallingContext const* mcc) const { + SharedResourcesAcquirer*, + ModuleCallingContext const*) const { if (!skipCurrentProcess and worker_) { - return resolveProductImpl([this, sra, mcc]() { - try { - ParentContext parentContext(mcc); - aux_->preModuleDelayedGetSignal_.emit(*(mcc->getStreamContext()), *mcc); - - auto workCall = [this, &parentContext, mcc]() { - auto sentry(make_sentry(mcc, [this](ModuleCallingContext const* iContext) { - aux_->postModuleDelayedGetSignal_.emit(*(iContext->getStreamContext()), *iContext); - })); - - EventTransitionInfo const& info = aux_->eventTransitionInfo(); - worker_->doWork >( - info, info.principal().streamID(), parentContext, mcc->getStreamContext()); - }; - - if (sra) { - assert(false); - } else { - workCall(); - } - - } catch (cms::Exception& ex) { - std::ostringstream ost; - ost << "Calling produce method for unscheduled module " << worker_->description().moduleName() << "/'" - << worker_->description().moduleLabel() << "'"; - ex.addContext(ost.str()); - throw; - } + return resolveProductImpl([this]() { + edm::Exception ex(errors::UnimplementedFeature); + ex << "Attempting to run unscheduled module without doing prefetching"; + std::ostringstream ost; + ost << "Calling produce method for unscheduled module " << worker_->description()->moduleName() << "/'" + << worker_->description()->moduleLabel() << "'"; + ex.addContext(ost.str()); + throw ex; }); } return Resolution(nullptr); } - void UnscheduledProductResolver::prefetchAsync_(WaitingTask* waitTask, + void UnscheduledProductResolver::prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, @@ -431,6 +413,10 @@ namespace edm { if (skipCurrentProcess) { return; } + if (worker_ == nullptr) { + throw cms::Exception("LogicError") << "UnscheduledProductResolver::prefetchAsync_() called with null worker_. " + "This should not happen, please contact framework developers."; + } //need to try changing prefetchRequested_ before adding to waitingTasks_ bool expected = false; bool prefetchRequested = prefetchRequested_.compare_exchange_strong(expected, true); @@ -438,7 +424,7 @@ namespace edm { if (prefetchRequested) { //Have to create a new task which will make sure the state for UnscheduledProductResolver // is properly set after the module has run - auto t = make_waiting_task(tbb::task::allocate_root(), [this](std::exception_ptr const* iPtr) { + auto t = make_waiting_task([this](std::exception_ptr const* iPtr) { //The exception is being rethrown because resolveProductImpl sets the ProductResolver to a failed // state for the case where an exception occurs during the call to the function. // Caught exception is propagated via WaitingTaskList @@ -458,7 +444,12 @@ namespace edm { ParentContext parentContext(mcc); EventTransitionInfo const& info = aux_->eventTransitionInfo(); worker_->doWorkAsync >( - t, info, token, info.principal().streamID(), parentContext, mcc->getStreamContext()); + WaitingTaskHolder(*waitTask.group(), t), + info, + token, + info.principal().streamID(), + parentContext, + mcc->getStreamContext()); } } @@ -692,7 +683,7 @@ namespace edm { return Resolution(nullptr); } - void SwitchProducerProductResolver::prefetchAsync_(WaitingTask* waitTask, + void SwitchProducerProductResolver::prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, @@ -715,7 +706,7 @@ namespace edm { // the waitingTasks() list will be released from waiting even // if the module does not put this data product or the // module has an exception while running - auto waiting = make_waiting_task(tbb::task::allocate_root(), [this](std::exception_ptr const* iException) { + auto waiting = make_waiting_task([this](std::exception_ptr const* iException) { if (nullptr != iException) { waitingTasks().doneWaiting(*iException); } else { @@ -723,7 +714,7 @@ namespace edm { waitingTasks().doneWaiting(std::exception_ptr()); } }); - worker()->callWhenDoneAsync(waiting); + worker()->callWhenDoneAsync(WaitingTaskHolder(*waitTask.group(), waiting)); } } @@ -765,7 +756,7 @@ namespace edm { return resolveProductImpl(realProduct().resolveProduct(principal, skipCurrentProcess, sra, mcc)); } - void SwitchAliasProductResolver::prefetchAsync_(WaitingTask* waitTask, + void SwitchAliasProductResolver::prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, @@ -785,7 +776,7 @@ namespace edm { // the waitingTasks() list will be released from waiting even // if the module does not put this data product or the // module has an exception while running - auto waiting = make_waiting_task(tbb::task::allocate_root(), [this](std::exception_ptr const* iException) { + auto waiting = make_waiting_task([this](std::exception_ptr const* iException) { if (nullptr != iException) { waitingTasks().doneWaiting(*iException); } else { @@ -793,7 +784,8 @@ namespace edm { waitingTasks().doneWaiting(std::exception_ptr()); } }); - realProduct().prefetchAsync(waiting, principal, skipCurrentProcess, token, sra, mcc); + realProduct().prefetchAsync( + WaitingTaskHolder(*waitTask.group(), waiting), principal, skipCurrentProcess, token, sra, mcc); } } @@ -921,7 +913,7 @@ namespace edm { return Resolution(nullptr); } - void NoProcessProductResolver::prefetchAsync_(WaitingTask* waitTask, + void NoProcessProductResolver::prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, @@ -941,14 +933,14 @@ namespace edm { if (prefetchRequested) { //we are the first thread to request - tryPrefetchResolverAsync(0, principal, false, sra, mcc, token); + tryPrefetchResolverAsync(0, principal, false, sra, mcc, token, waitTask.group()); } } else { skippingWaitingTasks_.add(waitTask); bool expected = false; if (skippingPrefetchRequested_.compare_exchange_strong(expected, true)) { //we are the first thread to request - tryPrefetchResolverAsync(0, principal, true, sra, mcc, token); + tryPrefetchResolverAsync(0, principal, true, sra, mcc, token, waitTask.group()); } } } @@ -974,26 +966,27 @@ namespace edm { SharedResourcesAcquirer* iSRA, ModuleCallingContext const* iMCC, bool iSkipCurrentProcess, - ServiceToken iToken) + ServiceToken iToken, + tbb::task_group* iGroup) : resolver_(iResolver), principal_(iPrincipal), sra_(iSRA), mcc_(iMCC), + group_(iGroup), serviceToken_(iToken), index_(iResolverIndex), skipCurrentProcess_(iSkipCurrentProcess) {} - tbb::task* execute() override { + void execute() final { auto exceptPtr = exceptionPtr(); if (exceptPtr) { resolver_->prefetchFailed(index_, *principal_, skipCurrentProcess_, *exceptPtr); } else { if (not resolver_->dataValidFromResolver(index_, *principal_, skipCurrentProcess_)) { resolver_->tryPrefetchResolverAsync( - index_ + 1, *principal_, skipCurrentProcess_, sra_, mcc_, serviceToken_); + index_ + 1, *principal_, skipCurrentProcess_, sra_, mcc_, serviceToken_, group_); } } - return nullptr; } private: @@ -1001,6 +994,7 @@ namespace edm { Principal const* principal_; SharedResourcesAcquirer* sra_; ModuleCallingContext const* mcc_; + tbb::task_group* group_; ServiceToken serviceToken_; unsigned int index_; bool skipCurrentProcess_; @@ -1036,7 +1030,8 @@ namespace edm { bool skipCurrentProcess, SharedResourcesAcquirer* sra, ModuleCallingContext const* mcc, - ServiceToken token) const { + ServiceToken token, + tbb::task_group* group) const { std::vector const& lookupProcessOrder = principal.lookupProcessOrder(); auto index = iProcessingIndex; @@ -1055,18 +1050,14 @@ namespace edm { if (matchingHolders_[k] != ProductResolverIndexInvalid) { //make new task - auto task = new (tbb::task::allocate_root()) - TryNextResolverWaitingTask(this, index, &principal, sra, mcc, skipCurrentProcess, token); - task->increment_ref_count(); + auto task = new TryNextResolverWaitingTask(this, index, &principal, sra, mcc, skipCurrentProcess, token, group); + WaitingTaskHolder hTask(*group, task); ProductResolverBase const* productResolver = principal.getProductResolverByIndex(matchingHolders_[k]); //Make sure the Services are available on this thread ServiceRegistry::Operate guard(token); - productResolver->prefetchAsync(task, principal, skipCurrentProcess, token, sra, mcc); - if (0 == task->decrement_ref_count()) { - tbb::task::spawn(*task); - } + productResolver->prefetchAsync(hTask, principal, skipCurrentProcess, token, sra, mcc); return; } ++index; @@ -1178,7 +1169,7 @@ namespace edm { ->resolveProduct(principal, skipCurrentProcess, sra, mcc); } - void SingleChoiceNoProcessProductResolver::prefetchAsync_(WaitingTask* waitTask, + void SingleChoiceNoProcessProductResolver::prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, diff --git a/FWCore/Framework/src/ProductResolvers.h b/FWCore/Framework/src/ProductResolvers.h index 095618149f86a..462b154c0b2eb 100644 --- a/FWCore/Framework/src/ProductResolvers.h +++ b/FWCore/Framework/src/ProductResolvers.h @@ -17,6 +17,7 @@ a set of related EDProducts. This is the storage unit of such information. #include "FWCore/Utilities/interface/TypeID.h" #include "FWCore/Utilities/interface/thread_safety_macros.h" #include "FWCore/Concurrency/interface/WaitingTaskList.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include #include @@ -115,7 +116,7 @@ namespace edm { bool skipCurrentProcess, SharedResourcesAcquirer* sra, ModuleCallingContext const* mcc) const override; - void prefetchAsync_(WaitingTask* waitTask, + void prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, @@ -163,7 +164,7 @@ namespace edm { bool skipCurrentProcess, SharedResourcesAcquirer* sra, ModuleCallingContext const* mcc) const override; - void prefetchAsync_(WaitingTask* waitTask, + void prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, @@ -182,7 +183,7 @@ namespace edm { class UnscheduledProductResolver : public ProducedProductResolver { public: explicit UnscheduledProductResolver(std::shared_ptr bd) - : ProducedProductResolver(bd, ProductStatus::ResolveNotRun), aux_(nullptr), prefetchRequested_(false) {} + : ProducedProductResolver(bd, ProductStatus::ResolveNotRun) {} void setupUnscheduled(UnscheduledConfigurator const&) final; @@ -191,7 +192,7 @@ namespace edm { bool skipCurrentProcess, SharedResourcesAcquirer* sra, ModuleCallingContext const* mcc) const override; - void prefetchAsync_(WaitingTask* waitTask, + void prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, @@ -202,9 +203,9 @@ namespace edm { void resetProductData_(bool deleteEarly) override; CMS_THREAD_SAFE mutable WaitingTaskList waitingTasks_; - UnscheduledAuxiliary const* aux_; - Worker* worker_; - mutable std::atomic prefetchRequested_; + UnscheduledAuxiliary const* aux_ = nullptr; + Worker* worker_ = nullptr; + mutable std::atomic prefetchRequested_ = false; }; class AliasProductResolver : public DataManagingOrAliasProductResolver { @@ -225,7 +226,7 @@ namespace edm { ModuleCallingContext const* mcc) const override { return realProduct_.resolveProduct(principal, skipCurrentProcess, sra, mcc); } - void prefetchAsync_(WaitingTask* waitTask, + void prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, @@ -324,7 +325,7 @@ namespace edm { bool skipCurrentProcess, SharedResourcesAcquirer* sra, ModuleCallingContext const* mcc) const final; - void prefetchAsync_(WaitingTask* waitTask, + void prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, @@ -355,7 +356,7 @@ namespace edm { bool skipCurrentProcess, SharedResourcesAcquirer* sra, ModuleCallingContext const* mcc) const final; - void prefetchAsync_(WaitingTask* waitTask, + void prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, @@ -385,7 +386,7 @@ namespace edm { skipCurrentProcess = false; return realProduct_->resolveProduct(*parentPrincipal_, skipCurrentProcess, sra, mcc); } - void prefetchAsync_(WaitingTask* waitTask, + void prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, @@ -442,7 +443,8 @@ namespace edm { bool skipCurrentProcess, SharedResourcesAcquirer* sra, ModuleCallingContext const* mcc, - ServiceToken token) const; + ServiceToken token, + tbb::task_group*) const; bool dataValidFromResolver(unsigned int iProcessingIndex, Principal const& principal, @@ -459,7 +461,7 @@ namespace edm { bool skipCurrentProcess, SharedResourcesAcquirer* sra, ModuleCallingContext const* mcc) const override; - void prefetchAsync_(WaitingTask* waitTask, + void prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, @@ -517,7 +519,7 @@ namespace edm { bool skipCurrentProcess, SharedResourcesAcquirer* sra, ModuleCallingContext const* mcc) const override; - void prefetchAsync_(WaitingTask* waitTask, + void prefetchAsync_(WaitingTaskHolder waitTask, Principal const& principal, bool skipCurrentProcess, ServiceToken const& token, diff --git a/FWCore/Framework/src/Run.cc b/FWCore/Framework/src/Run.cc index e809ffe120b79..eced7503b8337 100644 --- a/FWCore/Framework/src/Run.cc +++ b/FWCore/Framework/src/Run.cc @@ -26,8 +26,10 @@ namespace edm { RunPrincipal const& Run::runPrincipal() const { return dynamic_cast(provRecorder_.principal()); } - Provenance Run::getProvenance(BranchID const& bid) const { - return runPrincipal().getProvenance(bid, moduleCallingContext_); + Provenance const& Run::getProvenance(BranchID const& bid) const { return runPrincipal().getProvenance(bid); } + + StableProvenance const& Run::getStableProvenance(BranchID const& bid) const { + return runPrincipal().getStableProvenance(bid); } void Run::getAllStableProvenance(std::vector& provenances) const { diff --git a/FWCore/Framework/src/Schedule.cc b/FWCore/Framework/src/Schedule.cc index 3ede512233ac4..41e674fdbec66 100644 --- a/FWCore/Framework/src/Schedule.cc +++ b/FWCore/Framework/src/Schedule.cc @@ -719,8 +719,8 @@ namespace edm { std::vector modulesToUse; modulesToUse.reserve(streamSchedules_[0]->allWorkers().size()); for (auto const& worker : streamSchedules_[0]->allWorkers()) { - if (worker->description().moduleLabel() != kTriggerResults) { - modulesToUse.push_back(worker->description().moduleLabel()); + if (worker->description()->moduleLabel() != kTriggerResults) { + modulesToUse.push_back(worker->description()->moduleLabel()); } } //The unscheduled modules are at the end of the list, but we want them at the front @@ -752,8 +752,8 @@ namespace edm { // reduceParameterSet would fail to find it. Just remove it up front. std::set usedModuleLabels; for (auto const& worker : allWorkers()) { - if (worker->description().moduleLabel() != kTriggerResults) { - usedModuleLabels.insert(worker->description().moduleLabel()); + if (worker->description()->moduleLabel() != kTriggerResults) { + usedModuleLabels.insert(worker->description()->moduleLabel()); } } std::vector modulesInConfig(proc_pset.getParameter>("@all_modules")); @@ -841,12 +841,14 @@ namespace edm { std::transform(workers.begin(), workers.end(), std::back_inserter(modDesc), - [](const Worker* iWorker) -> const ModuleDescription* { return iWorker->descPtr(); }); + [](const Worker* iWorker) -> const ModuleDescription* { return iWorker->description(); }); // propagate_const has no reset() function summaryTimeKeeper_ = std::make_unique(prealloc.numberOfStreams(), modDesc, tns, processContext); auto timeKeeperPtr = summaryTimeKeeper_.get(); + areg->watchPreModuleDestruction(timeKeeperPtr, &SystemTimeKeeper::removeModuleIfExists); + areg->watchPreModuleEvent(timeKeeperPtr, &SystemTimeKeeper::startModuleEvent); areg->watchPostModuleEvent(timeKeeperPtr, &SystemTimeKeeper::stopModuleEvent); areg->watchPreModuleEventAcquire(timeKeeperPtr, &SystemTimeKeeper::restartModuleEvent); @@ -1231,26 +1233,25 @@ namespace edm { rp.endTime(), processContext); auto t = - make_waiting_task(tbb::task::allocate_root(), - [task, activityRegistry, globalContext, token](std::exception_ptr const* iExcept) mutable { - // Propagating the exception would be nontrivial, and signal actions are not supposed to throw exceptions - CMS_SA_ALLOW try { - //services can depend on other services - ServiceRegistry::Operate op(token); - - activityRegistry->postGlobalWriteRunSignal_(globalContext); - } catch (...) { - } - std::exception_ptr ptr; - if (iExcept) { - ptr = *iExcept; - } - task.doneWaiting(ptr); - }); + make_waiting_task([task, activityRegistry, globalContext, token](std::exception_ptr const* iExcept) mutable { + // Propagating the exception would be nontrivial, and signal actions are not supposed to throw exceptions + CMS_SA_ALLOW try { + //services can depend on other services + ServiceRegistry::Operate op(token); + + activityRegistry->postGlobalWriteRunSignal_(globalContext); + } catch (...) { + } + std::exception_ptr ptr; + if (iExcept) { + ptr = *iExcept; + } + task.doneWaiting(ptr); + }); // Propagating the exception would be nontrivial, and signal actions are not supposed to throw exceptions CMS_SA_ALLOW try { activityRegistry->preGlobalWriteRunSignal_(globalContext); } catch (...) { } - WaitingTaskHolder tHolder(t); + WaitingTaskHolder tHolder(*task.group(), t); for (auto& c : all_output_communicators_) { c->writeRunAsync(tHolder, rp, processContext, activityRegistry, mergeableRunProductMetadata); @@ -1270,26 +1271,25 @@ namespace edm { processContext); auto t = - make_waiting_task(tbb::task::allocate_root(), - [task, activityRegistry, globalContext, token](std::exception_ptr const* iExcept) mutable { - // Propagating the exception would be nontrivial, and signal actions are not supposed to throw exceptions - CMS_SA_ALLOW try { - //services can depend on other services - ServiceRegistry::Operate op(token); - - activityRegistry->postWriteProcessBlockSignal_(globalContext); - } catch (...) { - } - std::exception_ptr ptr; - if (iExcept) { - ptr = *iExcept; - } - task.doneWaiting(ptr); - }); + make_waiting_task([task, activityRegistry, globalContext, token](std::exception_ptr const* iExcept) mutable { + // Propagating the exception would be nontrivial, and signal actions are not supposed to throw exceptions + CMS_SA_ALLOW try { + //services can depend on other services + ServiceRegistry::Operate op(token); + + activityRegistry->postWriteProcessBlockSignal_(globalContext); + } catch (...) { + } + std::exception_ptr ptr; + if (iExcept) { + ptr = *iExcept; + } + task.doneWaiting(ptr); + }); // Propagating the exception would be nontrivial, and signal actions are not supposed to throw exceptions CMS_SA_ALLOW try { activityRegistry->preWriteProcessBlockSignal_(globalContext); } catch (...) { } - WaitingTaskHolder tHolder(t); + WaitingTaskHolder tHolder(*task.group(), t); for (auto& c : all_output_communicators_) { c->writeProcessBlockAsync(tHolder, pbp, processContext, activityRegistry); @@ -1309,26 +1309,25 @@ namespace edm { processContext); auto t = - make_waiting_task(tbb::task::allocate_root(), - [task, activityRegistry, globalContext, token](std::exception_ptr const* iExcept) mutable { - // Propagating the exception would be nontrivial, and signal actions are not supposed to throw exceptions - CMS_SA_ALLOW try { - //services can depend on other services - ServiceRegistry::Operate op(token); - - activityRegistry->postGlobalWriteLumiSignal_(globalContext); - } catch (...) { - } - std::exception_ptr ptr; - if (iExcept) { - ptr = *iExcept; - } - task.doneWaiting(ptr); - }); + make_waiting_task([task, activityRegistry, globalContext, token](std::exception_ptr const* iExcept) mutable { + // Propagating the exception would be nontrivial, and signal actions are not supposed to throw exceptions + CMS_SA_ALLOW try { + //services can depend on other services + ServiceRegistry::Operate op(token); + + activityRegistry->postGlobalWriteLumiSignal_(globalContext); + } catch (...) { + } + std::exception_ptr ptr; + if (iExcept) { + ptr = *iExcept; + } + task.doneWaiting(ptr); + }); // Propagating the exception would be nontrivial, and signal actions are not supposed to throw exceptions CMS_SA_ALLOW try { activityRegistry->preGlobalWriteLumiSignal_(globalContext); } catch (...) { } - WaitingTaskHolder tHolder(t); + WaitingTaskHolder tHolder(*task.group(), t); for (auto& c : all_output_communicators_) { c->writeLumiAsync(tHolder, lbp, processContext, activityRegistry); } @@ -1381,7 +1380,7 @@ namespace edm { eventsetup::ESRecordsToProxyIndices const& iIndices) { Worker* found = nullptr; for (auto const& worker : allWorkers()) { - if (worker->description().moduleLabel() == iLabel) { + if (worker->description()->moduleLabel() == iLabel) { found = worker; break; } @@ -1424,12 +1423,20 @@ namespace edm { return true; } + void Schedule::deleteModule(std::string const& iLabel, ActivityRegistry* areg) { + globalSchedule_->deleteModule(iLabel); + for (auto& stream : streamSchedules_) { + stream->deleteModule(iLabel); + } + moduleRegistry_->deleteModule(iLabel, areg->preModuleDestructionSignal_, areg->postModuleDestructionSignal_); + } + std::vector Schedule::getAllModuleDescriptions() const { std::vector result; result.reserve(allWorkers().size()); for (auto const& worker : allWorkers()) { - ModuleDescription const* p = worker->descPtr(); + ModuleDescription const* p = worker->description(); result.push_back(p); } return result; @@ -1470,20 +1477,27 @@ namespace edm { void Schedule::fillModuleAndConsumesInfo( std::vector& allModuleDescriptions, std::vector>& moduleIDToIndex, - std::vector>& modulesWhoseProductsAreConsumedBy, + std::array>, NumBranchTypes>& modulesWhoseProductsAreConsumedBy, + std::vector>& modulesInPreviousProcessesWhoseProductsAreConsumedBy, ProductRegistry const& preg) const { allModuleDescriptions.clear(); moduleIDToIndex.clear(); - modulesWhoseProductsAreConsumedBy.clear(); + for (auto iBranchType = 0U; iBranchType < NumBranchTypes; ++iBranchType) { + modulesWhoseProductsAreConsumedBy[iBranchType].clear(); + } + modulesInPreviousProcessesWhoseProductsAreConsumedBy.clear(); allModuleDescriptions.reserve(allWorkers().size()); moduleIDToIndex.reserve(allWorkers().size()); - modulesWhoseProductsAreConsumedBy.resize(allWorkers().size()); + for (auto iBranchType = 0U; iBranchType < NumBranchTypes; ++iBranchType) { + modulesWhoseProductsAreConsumedBy[iBranchType].resize(allWorkers().size()); + } + modulesInPreviousProcessesWhoseProductsAreConsumedBy.resize(allWorkers().size()); std::map labelToDesc; unsigned int i = 0; for (auto const& worker : allWorkers()) { - ModuleDescription const* p = worker->descPtr(); + ModuleDescription const* p = worker->description(); allModuleDescriptions.push_back(p); moduleIDToIndex.push_back(std::pair(p->id(), i)); labelToDesc[p->moduleLabel()] = p; @@ -1493,12 +1507,18 @@ namespace edm { i = 0; for (auto const& worker : allWorkers()) { - std::vector& modules = modulesWhoseProductsAreConsumedBy.at(i); + std::array*, NumBranchTypes> modules; + for (auto iBranchType = 0U; iBranchType < NumBranchTypes; ++iBranchType) { + modules[iBranchType] = &modulesWhoseProductsAreConsumedBy[iBranchType].at(i); + } + + std::vector& modulesInPreviousProcesses = + modulesInPreviousProcessesWhoseProductsAreConsumedBy.at(i); try { - worker->modulesWhoseProductsAreConsumed(modules, preg, labelToDesc); + worker->modulesWhoseProductsAreConsumed(modules, modulesInPreviousProcesses, preg, labelToDesc); } catch (cms::Exception& ex) { ex.addContext("Calling Worker::modulesWhoseProductsAreConsumed() for module " + - worker->description().moduleLabel()); + worker->description()->moduleLabel()); throw; } ++i; diff --git a/FWCore/Framework/src/StreamSchedule.cc b/FWCore/Framework/src/StreamSchedule.cc index 05da5e216a757..ddd24d4482e6e 100644 --- a/FWCore/Framework/src/StreamSchedule.cc +++ b/FWCore/Framework/src/StreamSchedule.cc @@ -198,7 +198,7 @@ namespace edm { //See if all modules were used std::set usedWorkerLabels; for (auto const& worker : allWorkers()) { - usedWorkerLabels.insert(worker->description().moduleLabel()); + usedWorkerLabels.insert(worker->description()->moduleLabel()); } std::vector modulesInConfig(proc_pset.getParameter>("@all_modules")); std::set modulesInConfigSet(modulesInConfig.begin(), modulesInConfig.end()); @@ -291,7 +291,7 @@ namespace edm { for (auto w : allWorkers()) { //determine if this module could read a branch we want to delete early - auto pset = pset::Registry::instance()->getMapped(w->description().parameterSetID()); + auto pset = pset::Registry::instance()->getMapped(w->description()->parameterSetID()); if (nullptr != pset) { auto branches = pset->getUntrackedParameter>("mightGet", kEmpty); if (not branches.empty()) { @@ -446,10 +446,10 @@ namespace edm { // We have a filter on an end path, and the filter is not explicitly ignored. // See if the filter is allowed. std::vector allowed_filters = proc_pset.getUntrackedParameter("@filters_on_endpaths"); - if (!search_all(allowed_filters, worker->description().moduleName())) { + if (!search_all(allowed_filters, worker->description()->moduleName())) { // Filter is not allowed. Ignore the result, and issue a warning. filterAction = WorkerInPath::Ignore; - LogWarning("FilterOnEndPath") << "The EDFilter '" << worker->description().moduleName() + LogWarning("FilterOnEndPath") << "The EDFilter '" << worker->description()->moduleName() << "' with module label '" << moduleLabel << "' appears on EndPath '" << pathName << "'.\n" << "The return value of the filter will be ignored.\n" @@ -534,7 +534,7 @@ namespace edm { void StreamSchedule::replaceModule(maker::ModuleHolder* iMod, std::string const& iLabel) { Worker* found = nullptr; for (auto const& worker : allWorkers()) { - if (worker->description().moduleLabel() == iLabel) { + if (worker->description()->moduleLabel() == iLabel) { found = worker; break; } @@ -547,12 +547,14 @@ namespace edm { found->beginStream(streamID_, streamContext_); } + void StreamSchedule::deleteModule(std::string const& iLabel) { workerManager_.deleteModuleIfExists(iLabel); } + std::vector StreamSchedule::getAllModuleDescriptions() const { std::vector result; result.reserve(allWorkers().size()); for (auto const& worker : allWorkers()) { - ModuleDescription const* p = worker->descPtr(); + ModuleDescription const* p = worker->description(); result.push_back(p); } return result; @@ -607,7 +609,6 @@ namespace edm { auto pathErrorHolder = std::make_unique>(nullptr); auto pathErrorPtr = pathErrorHolder.get(); auto allPathsDone = make_waiting_task( - tbb::task::allocate_root(), [iTask, this, serviceToken, pathError = std::move(pathErrorHolder)](std::exception_ptr const* iPtr) mutable { ServiceRegistry::Operate operate(serviceToken); @@ -624,38 +625,38 @@ namespace edm { //The holder guarantees that if the paths finish before the loop ends // that we do not start too soon. It also guarantees that the task will // run under that condition. - WaitingTaskHolder allPathsHolder(allPathsDone); + WaitingTaskHolder allPathsHolder(*iTask.group(), allPathsDone); - auto pathsDone = make_waiting_task(tbb::task::allocate_root(), - [allPathsHolder, pathErrorPtr, transitionInfo = info, this, serviceToken]( + auto pathsDone = make_waiting_task([allPathsHolder, pathErrorPtr, transitionInfo = info, this, serviceToken]( std::exception_ptr const* iPtr) mutable { - ServiceRegistry::Operate operate(serviceToken); + ServiceRegistry::Operate operate(serviceToken); - if (iPtr) { - //this is used to prioritize this error over one - // that happens in EndPath or Accumulate - pathErrorPtr->store(new std::exception_ptr(*iPtr)); - } - finishedPaths(*pathErrorPtr, std::move(allPathsHolder), transitionInfo); - }); + if (iPtr) { + //this is used to prioritize this error over one + // that happens in EndPath or Accumulate + pathErrorPtr->store(new std::exception_ptr(*iPtr)); + } + finishedPaths(*pathErrorPtr, std::move(allPathsHolder), transitionInfo); + }); //The holder guarantees that if the paths finish before the loop ends // that we do not start too soon. It also guarantees that the task will // run under that condition. - WaitingTaskHolder taskHolder(pathsDone); + WaitingTaskHolder taskHolder(*iTask.group(), pathsDone); //start end paths first so on single threaded the paths will run first + WaitingTaskHolder hAllPathsDone(*iTask.group(), allPathsDone); for (auto it = end_paths_.rbegin(), itEnd = end_paths_.rend(); it != itEnd; ++it) { - it->processOneOccurrenceAsync(allPathsDone, info, serviceToken, streamID_, &streamContext_); + it->processOneOccurrenceAsync(hAllPathsDone, info, serviceToken, streamID_, &streamContext_); } for (auto it = trig_paths_.rbegin(), itEnd = trig_paths_.rend(); it != itEnd; ++it) { - it->processOneOccurrenceAsync(pathsDone, info, serviceToken, streamID_, &streamContext_); + it->processOneOccurrenceAsync(taskHolder, info, serviceToken, streamID_, &streamContext_); } ParentContext parentContext(&streamContext_); workerManager_.processAccumulatorsAsync>( - allPathsDone, info, serviceToken, streamID_, parentContext, &streamContext_); + hAllPathsDone, info, serviceToken, streamID_, parentContext, &streamContext_); } catch (...) { iTask.doneWaiting(std::current_exception()); } @@ -693,7 +694,10 @@ namespace edm { ParentContext parentContext(&streamContext_); using Traits = OccurrenceTraits; - results_inserter_->doWork(info, streamID_, parentContext, &streamContext_); + auto expt = results_inserter_->runModuleDirectly(info, streamID_, parentContext, &streamContext_); + if (expt) { + std::rethrow_exception(expt); + } } catch (cms::Exception& ex) { if (not iExcept) { if (ex.context().empty()) { @@ -764,7 +768,7 @@ namespace edm { if (itFound != trig_paths_.end()) { oLabelsToFill.reserve(itFound->size()); for (size_t i = 0; i < itFound->size(); ++i) { - oLabelsToFill.push_back(itFound->getWorker(i)->description().moduleLabel()); + oLabelsToFill.push_back(itFound->getWorker(i)->description()->moduleLabel()); } } } @@ -793,7 +797,7 @@ namespace edm { if (found) { descriptions.reserve(itFound->size()); for (size_t i = 0; i < itFound->size(); ++i) { - descriptions.push_back(itFound->getWorker(i)->descPtr()); + descriptions.push_back(itFound->getWorker(i)->description()); } } } @@ -822,7 +826,7 @@ namespace edm { if (found) { descriptions.reserve(itFound->size()); for (size_t i = 0; i < itFound->size(); ++i) { - descriptions.push_back(itFound->getWorker(i)->descPtr()); + descriptions.push_back(itFound->getWorker(i)->description()); } } } @@ -836,7 +840,7 @@ namespace edm { sum.timesPassed += path.timesPassed(which); sum.timesFailed += path.timesFailed(which); sum.timesExcept += path.timesExcept(which); - sum.moduleLabel = path.getWorker(which)->description().moduleLabel(); + sum.moduleLabel = path.getWorker(which)->description()->moduleLabel(); } static void fillPathSummary(Path const& path, PathSummary& sum) { @@ -868,7 +872,7 @@ namespace edm { sum.timesPassed += w.timesPassed(); sum.timesFailed += w.timesFailed(); sum.timesExcept += w.timesExcept(); - sum.moduleLabel = w.description().moduleLabel(); + sum.moduleLabel = w.description()->moduleLabel(); } static void fillWorkerSummary(Worker const* pw, WorkerSummary& sum) { fillWorkerSummaryAux(*pw, sum); } diff --git a/FWCore/Framework/src/StreamSchedule.h b/FWCore/Framework/src/StreamSchedule.h index 2157ec9d543ab..7c8a3efb5901c 100644 --- a/FWCore/Framework/src/StreamSchedule.h +++ b/FWCore/Framework/src/StreamSchedule.h @@ -251,6 +251,9 @@ namespace edm { /// clone the type of module with label iLabel but configure with iPSet. void replaceModule(maker::ModuleHolder* iMod, std::string const& iLabel); + /// Delete the module with label iLabel + void deleteModule(std::string const& iLabel); + /// returns the collection of pointers to workers AllWorkers const& allWorkers() const { return workerManager_.allWorkers(); } @@ -383,9 +386,8 @@ namespace edm { T::setStreamContext(streamContext_, principal); auto id = principal.id(); - auto doneTask = make_waiting_task( - tbb::task::allocate_root(), - [this, iHolder, id, cleaningUpAfterException, token](std::exception_ptr const* iPtr) mutable { + auto doneTask = + make_waiting_task([this, iHolder, id, cleaningUpAfterException, token](std::exception_ptr const* iPtr) mutable { std::exception_ptr excpt; if (iPtr) { excpt = *iPtr; @@ -418,39 +420,44 @@ namespace edm { iHolder.doneWaiting(excpt); }); - auto task = - make_functor_task(tbb::task::allocate_root(), - [this, doneTask, h = WaitingTaskHolder(doneTask), info = transitionInfo, token]() mutable { - ServiceRegistry::Operate op(token); - // Caught exception is propagated via WaitingTaskHolder - CMS_SA_ALLOW try { - T::preScheduleSignal(actReg_.get(), &streamContext_); + auto task = make_functor_task( + [this, h = WaitingTaskHolder(*iHolder.group(), doneTask), info = transitionInfo, token]() mutable { + ServiceRegistry::Operate op(token); + // Caught exception is propagated via WaitingTaskHolder + CMS_SA_ALLOW try { + T::preScheduleSignal(actReg_.get(), &streamContext_); - workerManager_.resetAll(); - } catch (...) { - h.doneWaiting(std::current_exception()); - return; - } + workerManager_.resetAll(); + } catch (...) { + h.doneWaiting(std::current_exception()); + return; + } - for (auto& p : end_paths_) { - p.runAllModulesAsync(doneTask, info, token, streamID_, &streamContext_); - } + for (auto& p : end_paths_) { + p.runAllModulesAsync(h, info, token, streamID_, &streamContext_); + } - for (auto& p : trig_paths_) { - p.runAllModulesAsync(doneTask, info, token, streamID_, &streamContext_); - } + for (auto& p : trig_paths_) { + p.runAllModulesAsync(h, info, token, streamID_, &streamContext_); + } - workerManager_.processOneOccurrenceAsync( - doneTask, info, token, streamID_, &streamContext_, &streamContext_); - }); + workerManager_.processOneOccurrenceAsync(h, info, token, streamID_, &streamContext_, &streamContext_); + }); if (streamID_.value() == 0) { //Enqueueing will start another thread if there is only // one thread in the job. Having stream == 0 use spawn // avoids starting up another thread when there is only one stream. - tbb::task::spawn(*task); + iHolder.group()->run([task]() { + TaskSentry s{task}; + task->execute(); + }); } else { - tbb::task::enqueue(*task); + tbb::task_arena arena{tbb::task_arena::attach()}; + arena.enqueue([task]() { + TaskSentry s{task}; + task->execute(); + }); } } } // namespace edm diff --git a/FWCore/Framework/src/SubProcess.cc b/FWCore/Framework/src/SubProcess.cc index a15d9d6f57326..3d1e1446b1869 100644 --- a/FWCore/Framework/src/SubProcess.cc +++ b/FWCore/Framework/src/SubProcess.cc @@ -220,6 +220,61 @@ namespace edm { SubProcess::~SubProcess() {} + std::vector SubProcess::keepOnlyConsumedUnscheduledModules(bool deleteModules) { + schedule_->convertCurrentProcessAlias(processConfiguration_->processName()); + pathsAndConsumesOfModules_.initialize(schedule_.get(), preg_); + + // Note: all these may throw + checkForModuleDependencyCorrectness(pathsAndConsumesOfModules_, false); + + // Consumes information from the child SubProcesses + std::vector consumedByChildren; + for_all(subProcesses_, [&consumedByChildren, deleteModules](auto& subProcess) { + auto c = subProcess.keepOnlyConsumedUnscheduledModules(deleteModules); + if (consumedByChildren.empty()) { + std::swap(consumedByChildren, c); + } else if (not c.empty()) { + std::vector tmp; + tmp.reserve(consumedByChildren.size() + c.size()); + std::merge(consumedByChildren.begin(), consumedByChildren.end(), c.begin(), c.end(), std::back_inserter(tmp)); + std::swap(consumedByChildren, tmp); + } + }); + + // Non-consumed unscheduled modules in this SubProcess, take into account of the consumes from child SubProcesses + if (deleteModules) { + if (auto const unusedModules = nonConsumedUnscheduledModules(pathsAndConsumesOfModules_, consumedByChildren); + not unusedModules.empty()) { + pathsAndConsumesOfModules_.removeModules(unusedModules); + + edm::LogInfo("DeleteModules").log([&unusedModules, this](auto& l) { + l << "Following modules are not in any Path or EndPath, nor is their output consumed by any other module, " + "and " + "therefore they are deleted from SubProcess " + << processConfiguration_->processName() << " before beginJob transition."; + for (auto const& description : unusedModules) { + l << "\n " << description->moduleLabel(); + } + }); + for (auto const& description : unusedModules) { + schedule_->deleteModule(description->moduleLabel(), actReg_.get()); + } + } + } + + // Products possibly consumed from the parent (Sub)Process + for (auto const& description : pathsAndConsumesOfModules_.allModules()) { + for (auto const& dep : + pathsAndConsumesOfModules_.modulesInPreviousProcessesWhoseProductsAreConsumedBy(description->id())) { + auto it = std::lower_bound(consumedByChildren.begin(), + consumedByChildren.end(), + ModuleProcessName{dep.moduleLabel(), dep.processName()}); + consumedByChildren.emplace(it, dep.moduleLabel(), dep.processName()); + } + } + return consumedByChildren; + } + void SubProcess::doBeginJob() { this->beginJob(); } void SubProcess::doEndJob() { endJob(); } @@ -235,10 +290,6 @@ namespace edm { fixBranchIDListsForEDAliases(droppedBranchIDToKeptBranchID()); } ServiceRegistry::Operate operate(serviceToken_); - schedule_->convertCurrentProcessAlias(processConfiguration_->processName()); - pathsAndConsumesOfModules_.initialize(schedule_.get(), preg_); - //NOTE: this may throw - checkForModuleDependencyCorrectness(pathsAndConsumesOfModules_, false); actReg_->preBeginJobSignal_(pathsAndConsumesOfModules_, processContext_); schedule_->beginJob(*preg_, esp_->recordsToProxyIndices()); for_all(subProcesses_, [](auto& subProcess) { subProcess.doBeginJob(); }); @@ -380,30 +431,30 @@ namespace edm { ep.setLuminosityBlockPrincipal(inUseLumiPrincipals_[principal.luminosityBlockPrincipal().index()].get()); propagateProducts(InEvent, principal, ep); - WaitingTaskHolder finalizeEventTask( - make_waiting_task(tbb::task::allocate_root(), [&ep, iHolder](std::exception_ptr const* iPtr) mutable { - ep.clearEventPrincipal(); - if (iPtr) { - iHolder.doneWaiting(*iPtr); - } else { - iHolder.doneWaiting(std::exception_ptr()); - } - })); + WaitingTaskHolder finalizeEventTask(*iHolder.group(), + make_waiting_task([&ep, iHolder](std::exception_ptr const* iPtr) mutable { + ep.clearEventPrincipal(); + if (iPtr) { + iHolder.doneWaiting(*iPtr); + } else { + iHolder.doneWaiting(std::exception_ptr()); + } + })); WaitingTaskHolder afterProcessTask; if (subProcesses_.empty()) { afterProcessTask = std::move(finalizeEventTask); } else { afterProcessTask = WaitingTaskHolder( - make_waiting_task(tbb::task::allocate_root(), - [this, &ep, finalizeEventTask, iEventSetupImpls](std::exception_ptr const* iPtr) mutable { - if (not iPtr) { - for (auto& subProcess : boost::adaptors::reverse(subProcesses_)) { - subProcess.doEventAsync(finalizeEventTask, ep, iEventSetupImpls); - } - } else { - finalizeEventTask.doneWaiting(*iPtr); - } - })); + *iHolder.group(), + make_waiting_task([this, &ep, finalizeEventTask, iEventSetupImpls](std::exception_ptr const* iPtr) mutable { + if (not iPtr) { + for (auto& subProcess : boost::adaptors::reverse(subProcesses_)) { + subProcess.doEventAsync(finalizeEventTask, ep, iEventSetupImpls); + } + } else { + finalizeEventTask.doneWaiting(*iPtr); + } + })); } EventTransitionInfo info(ep, *((*iEventSetupImpls)[esp_->subProcessIndex()])); schedule_->processOneEventAsync(std::move(afterProcessTask), ep.streamID().value(), info, serviceToken_); @@ -498,18 +549,17 @@ namespace edm { void SubProcess::writeProcessBlockAsync(edm::WaitingTaskHolder task, ProcessBlockType processBlockType) { ServiceRegistry::Operate operate(serviceToken_); - auto subTasks = edm::make_waiting_task(tbb::task::allocate_root(), - [this, task, processBlockType](std::exception_ptr const* iExcept) mutable { - if (iExcept) { - task.doneWaiting(*iExcept); - } else { - ServiceRegistry::Operate operate(serviceToken_); - for (auto& s : subProcesses_) { - s.writeProcessBlockAsync(task, processBlockType); - } - } - }); - schedule_->writeProcessBlockAsync(WaitingTaskHolder(subTasks), + auto subTasks = edm::make_waiting_task([this, task, processBlockType](std::exception_ptr const* iExcept) mutable { + if (iExcept) { + task.doneWaiting(*iExcept); + } else { + ServiceRegistry::Operate operate(serviceToken_); + for (auto& s : subProcesses_) { + s.writeProcessBlockAsync(task, processBlockType); + } + } + }); + schedule_->writeProcessBlockAsync(WaitingTaskHolder(*task.group(), subTasks), principalCache_.processBlockPrincipal(processBlockType), &processContext_, actReg_.get()); @@ -525,7 +575,6 @@ namespace edm { auto const& childPhID = it->second; auto subTasks = edm::make_waiting_task( - tbb::task::allocate_root(), [this, childPhID, runNumber, task, mergeableRunProductMetadata](std::exception_ptr const* iExcept) mutable { if (iExcept) { task.doneWaiting(*iExcept); @@ -536,7 +585,7 @@ namespace edm { } } }); - schedule_->writeRunAsync(WaitingTaskHolder(subTasks), + schedule_->writeRunAsync(WaitingTaskHolder(*task.group(), subTasks), principalCache_.runPrincipal(childPhID, runNumber), &processContext_, actReg_.get(), @@ -600,18 +649,17 @@ namespace edm { ServiceRegistry::Operate operate(serviceToken_); auto l = inUseLumiPrincipals_[principal.index()]; - auto subTasks = - edm::make_waiting_task(tbb::task::allocate_root(), [this, l, task](std::exception_ptr const* iExcept) mutable { - if (iExcept) { - task.doneWaiting(*iExcept); - } else { - ServiceRegistry::Operate operateWriteLumi(serviceToken_); - for (auto& s : subProcesses_) { - s.writeLumiAsync(task, *l); - } - } - }); - schedule_->writeLumiAsync(WaitingTaskHolder(subTasks), *l, &processContext_, actReg_.get()); + auto subTasks = edm::make_waiting_task([this, l, task](std::exception_ptr const* iExcept) mutable { + if (iExcept) { + task.doneWaiting(*iExcept); + } else { + ServiceRegistry::Operate operateWriteLumi(serviceToken_); + for (auto& s : subProcesses_) { + s.writeLumiAsync(task, *l); + } + } + }); + schedule_->writeLumiAsync(WaitingTaskHolder(*task.group(), subTasks), *l, &processContext_, actReg_.get()); } void SubProcess::deleteLumiFromCache(LuminosityBlockPrincipal& principal) { diff --git a/FWCore/Framework/src/SubProcess.h b/FWCore/Framework/src/SubProcess.h index a4b1236e60152..ac82e3ecfebaa 100644 --- a/FWCore/Framework/src/SubProcess.h +++ b/FWCore/Framework/src/SubProcess.h @@ -76,6 +76,10 @@ namespace edm { SelectedProductsForBranchType const& keptProducts() const { return keptProducts_; } + // Returns the set of modules whose products may be consumed by + // modules in this SubProcess or its child SubProcesses + std::vector keepOnlyConsumedUnscheduledModules(bool deleteModules); + void doBeginJob(); void doEndJob(); diff --git a/FWCore/Framework/src/SynchronousEventSetupsController.cc b/FWCore/Framework/src/SynchronousEventSetupsController.cc new file mode 100644 index 0000000000000..90fa35bf553fc --- /dev/null +++ b/FWCore/Framework/src/SynchronousEventSetupsController.cc @@ -0,0 +1,45 @@ +// -*- C++ -*- +// +// Package: Framework +// Class : SynchronousEventSetupsController +// +// Implementation: +// [Notes on implementation] +// +// Original Author: Chris Jones, W. David Dagenhart +// Created: Wed Jan 12 14:30:44 CST 2011 +// + +#include "FWCore/Framework/src/SynchronousEventSetupsController.h" + +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" + +#include +#include +#include + +namespace edm { + namespace eventsetup { + + SynchronousEventSetupsController::SynchronousEventSetupsController() + : globalControl_(tbb::global_control::max_allowed_parallelism, 1) {} + + SynchronousEventSetupsController::~SynchronousEventSetupsController() { + FinalWaitingTask finalTask; + controller_.endIOVsAsync(edm::WaitingTaskHolder(taskGroup_, &finalTask)); + do { + taskGroup_.wait(); + } while (not finalTask.done()); + } + + std::shared_ptr SynchronousEventSetupsController::makeProvider( + ParameterSet& iPSet, ActivityRegistry* activityRegistry, ParameterSet const* eventSetupPset) { + return controller_.makeProvider(iPSet, activityRegistry, eventSetupPset); + } + + void SynchronousEventSetupsController::eventSetupForInstance(IOVSyncValue const& syncValue) { + synchronousEventSetupForInstance(syncValue, taskGroup_, controller_); + } + + } // namespace eventsetup +} // namespace edm diff --git a/FWCore/Framework/src/SynchronousEventSetupsController.h b/FWCore/Framework/src/SynchronousEventSetupsController.h new file mode 100644 index 0000000000000..a5cf62bf48a89 --- /dev/null +++ b/FWCore/Framework/src/SynchronousEventSetupsController.h @@ -0,0 +1,54 @@ +#ifndef FWCore_Framework_SynchronousEventSetupsController_h +#define FWCore_Framework_SynchronousEventSetupsController_h +// -*- C++ -*- +// +// Package: Framework +// Class : SynchronousEventSetupsController +// +/** \class edm::eventsetup::SynchronousEventSetupsController + + Description: Manages a group of EventSetups which can share components. + + Usage: + Useful for unit testing parts of the EventSetup system + +*/ +// +// Original Authors: Chris Jones, David Dagenhart +// Created: Wed Jan 12 14:30:42 CST 2011 +// + +#include "EventSetupsController.h" + +#include "tbb/task_group.h" +#include "tbb/global_control.h" + +namespace edm { + + namespace eventsetup { + + class SynchronousEventSetupsController { + public: + SynchronousEventSetupsController(); + ~SynchronousEventSetupsController(); + + SynchronousEventSetupsController(SynchronousEventSetupsController const&) = delete; + SynchronousEventSetupsController const& operator=(SynchronousEventSetupsController const&) = delete; + SynchronousEventSetupsController(SynchronousEventSetupsController&&) = delete; + SynchronousEventSetupsController const& operator=(SynchronousEventSetupsController&&) = delete; + + std::shared_ptr makeProvider(ParameterSet&, + ActivityRegistry*, + ParameterSet const* eventSetupPset = nullptr); + + // Version to use when IOVs are not allowed to run concurrently + void eventSetupForInstance(IOVSyncValue const&); + + private: + tbb::global_control globalControl_; + tbb::task_group taskGroup_; + EventSetupsController controller_; + }; + } // namespace eventsetup +} // namespace edm +#endif diff --git a/FWCore/Framework/src/SystemTimeKeeper.cc b/FWCore/Framework/src/SystemTimeKeeper.cc index b33ce03198979..b50799f953658 100644 --- a/FWCore/Framework/src/SystemTimeKeeper.cc +++ b/FWCore/Framework/src/SystemTimeKeeper.cc @@ -27,6 +27,12 @@ #include "SystemTimeKeeper.h" using namespace edm; + +namespace { + bool lessModuleDescription(const ModuleDescription* iLHS, const ModuleDescription* iRHS) { + return iLHS->id() < iRHS->id(); + } +} // namespace // // constants, enums and typedefs // @@ -48,10 +54,7 @@ SystemTimeKeeper::SystemTimeKeeper(unsigned int iNumStreams, m_processContext(iProcessContext), m_minModuleID(0), m_numberOfEvents(0) { - std::sort( - m_modules.begin(), m_modules.end(), [](const ModuleDescription* iLHS, const ModuleDescription* iRHS) -> bool { - return iLHS->id() < iRHS->id(); - }); + std::sort(m_modules.begin(), m_modules.end(), lessModuleDescription); if (not m_modules.empty()) { m_minModuleID = m_modules.front()->id(); unsigned int numModuleSlots = m_modules.back()->id() - m_minModuleID + 1; @@ -103,6 +106,15 @@ SystemTimeKeeper::SystemTimeKeeper(unsigned int iNumStreams, // // member functions // +void SystemTimeKeeper::removeModuleIfExists(ModuleDescription const& module) { + // The deletion of a module is signaled to all (Sub)Processes, even + // though the module exists in only one of them. + auto found = std::lower_bound(m_modules.begin(), m_modules.end(), &module, lessModuleDescription); + if (*found == &module) { + m_modules.erase(found); + } +} + SystemTimeKeeper::PathTiming& SystemTimeKeeper::pathTiming(StreamContext const& iStream, PathContext const& iPath) { unsigned int offset = 0; if (iPath.isEndPath()) { diff --git a/FWCore/Framework/src/SystemTimeKeeper.h b/FWCore/Framework/src/SystemTimeKeeper.h index 2268ae64c4888..6361d72e728f1 100644 --- a/FWCore/Framework/src/SystemTimeKeeper.h +++ b/FWCore/Framework/src/SystemTimeKeeper.h @@ -58,6 +58,8 @@ namespace edm { // ---------- static member functions -------------------- // ---------- member functions --------------------------- + void removeModuleIfExists(ModuleDescription const& module); + void startProcessingLoop(); void stopProcessingLoop(); diff --git a/FWCore/Framework/src/TransitionProcessors.icc b/FWCore/Framework/src/TransitionProcessors.icc index 1c53bc4a1e754..5effc38dcbbc2 100644 --- a/FWCore/Framework/src/TransitionProcessors.icc +++ b/FWCore/Framework/src/TransitionProcessors.icc @@ -24,8 +24,10 @@ struct FileResources { if (!closingSequenceAlreadyFailed_) { ep_.respondToCloseInputFile(); ep_.closeInputFile(cleaningUpAfterException_); - ep_.endProcessBlock(cleaningUpAfterException_, beginProcessBlockSucceeded_); - ep_.closeOutputFiles(); + if (needToCloseOutputFiles_) { + ep_.endProcessBlock(cleaningUpAfterException_, beginProcessBlockSucceeded_); + ep_.closeOutputFiles(); + } } } catch (...) { if (cleaningUpAfterException_ or not ep_.setDeferredException(std::current_exception())) { @@ -42,6 +44,7 @@ struct FileResources { bool cleaningUpAfterException_ = true; bool closingSequenceAlreadyFailed_ = false; bool beginProcessBlockSucceeded_ = false; + bool needToCloseOutputFiles_ = false; }; struct RunResources { @@ -231,10 +234,12 @@ private: void readFirstFile(EventProcessor& iEP) { iEP.readFile(); + assert(iEP.fileBlockValid()); iEP.respondToOpenInputFile(); iEP.openOutputFiles(); filesOpen_ = std::make_unique(iEP); + filesOpen_->needToCloseOutputFiles_ = true; iEP.beginProcessBlock(filesOpen_->beginProcessBlockSucceeded_); iEP.inputProcessBlocks(); @@ -251,6 +256,11 @@ private: iEP.closeInputFile(false); iEP.readFile(); + if (!iEP.fileBlockValid()) { + // handle case with last file bad and + // skipBadFiles true + return; + } iEP.respondToOpenInputFile(); iEP.inputProcessBlocks(); @@ -269,15 +279,22 @@ private: iEP.endProcessBlock(cleaningUpAfterException, filesOpen_->beginProcessBlockSucceeded_); iEP.closeOutputFiles(); + filesOpen_->needToCloseOutputFiles_ = false; filesOpen_->closingSequenceAlreadyFailed_ = false; } { filesOpen_->beginProcessBlockSucceeded_ = false; iEP.readFile(); + if (!iEP.fileBlockValid()) { + // handle case with last file bad and + // skipBadFiles true + return; + } iEP.respondToOpenInputFile(); iEP.openOutputFiles(); + filesOpen_->needToCloseOutputFiles_ = true; iEP.beginProcessBlock(filesOpen_->beginProcessBlockSucceeded_); } diff --git a/FWCore/Framework/src/UnscheduledConfigurator.h b/FWCore/Framework/src/UnscheduledConfigurator.h index e3a103c704e62..cea6a18dd05eb 100644 --- a/FWCore/Framework/src/UnscheduledConfigurator.h +++ b/FWCore/Framework/src/UnscheduledConfigurator.h @@ -34,7 +34,7 @@ namespace edm { template UnscheduledConfigurator(IT iBegin, IT iEnd, UnscheduledAuxiliary const* iAux) : m_aux(iAux) { for (auto it = iBegin; it != iEnd; ++it) { - m_labelToWorker.emplace((*it)->description().moduleLabel(), *it); + m_labelToWorker.emplace((*it)->description()->moduleLabel(), *it); } } diff --git a/FWCore/Framework/src/Worker.cc b/FWCore/Framework/src/Worker.cc index 207917880c151..d5001958b0139 100644 --- a/FWCore/Framework/src/Worker.cc +++ b/FWCore/Framework/src/Worker.cc @@ -1,7 +1,7 @@ /*---------------------------------------------------------------------- ----------------------------------------------------------------------*/ - +#include "FWCore/Concurrency/interface/include_first_syncWait.h" #include "FWCore/Framework/src/Worker.h" #include "FWCore/Framework/src/EarlyDeleteHelper.h" #include "FWCore/Framework/interface/EventPrincipal.h" @@ -10,10 +10,10 @@ #include "FWCore/Framework/interface/ProcessBlockPrincipal.h" #include "FWCore/Framework/interface/RunPrincipal.h" #include "FWCore/ServiceRegistry/interface/StreamContext.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/Concurrency/interface/WaitingTask.h" #include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Concurrency/interface/WaitingTaskWithArenaHolder.h" -#include "FWCore/Framework/src/esTaskArenas.h" #include "tbb/global_control.h" namespace edm { @@ -180,7 +180,7 @@ namespace edm { return true; } - ModuleCallingContext tempContext(&description(), ModuleCallingContext::State::kInvalid, parentContext, nullptr); + ModuleCallingContext tempContext(description(), ModuleCallingContext::State::kInvalid, parentContext, nullptr); // If we are processing an endpath and the module was scheduled, treat SkipEvent or FailPath // as IgnoreCompletely, so any subsequent OutputModules are still run. @@ -201,14 +201,15 @@ namespace edm { return true; } - void Worker::prePrefetchSelectionAsync(WaitingTask* successTask, + void Worker::prePrefetchSelectionAsync(tbb::task_group& group, + WaitingTask* successTask, ServiceToken const& token, StreamID id, EventPrincipal const* iPrincipal) { successTask->increment_ref_count(); - auto choiceTask = edm::make_waiting_task( - tbb::task::allocate_root(), [id, successTask, iPrincipal, this, token](std::exception_ptr const*) { + auto choiceTask = + edm::make_waiting_task([id, successTask, iPrincipal, this, token, &group](std::exception_ptr const*) { ServiceRegistry::Operate guard(token); // There is no reasonable place to rethrow, and implDoPrePrefetchSelection() should not throw in the first place. CMS_SA_ALLOW try { @@ -218,18 +219,21 @@ namespace edm { waitingTasks_.doneWaiting(nullptr); //TBB requires that destroyed tasks have count 0 if (0 == successTask->decrement_ref_count()) { - tbb::task::destroy(*successTask); + TaskSentry s(successTask); } return; } } catch (...) { } if (0 == successTask->decrement_ref_count()) { - tbb::task::spawn(*successTask); + group.run([successTask]() { + TaskSentry s(successTask); + successTask->execute(); + }); } }); - WaitingTaskHolder choiceHolder{choiceTask}; + WaitingTaskHolder choiceHolder{group, choiceTask}; std::vector items; itemsToGetForSelection(items); @@ -238,13 +242,14 @@ namespace edm { ProductResolverIndex productResolverIndex = item.productResolverIndex(); bool skipCurrentProcess = item.skipCurrentProcess(); if (productResolverIndex != ProductResolverIndexAmbiguous) { - iPrincipal->prefetchAsync(choiceTask, productResolverIndex, skipCurrentProcess, token, &moduleCallingContext_); + iPrincipal->prefetchAsync( + choiceHolder, productResolverIndex, skipCurrentProcess, token, &moduleCallingContext_); } } choiceHolder.doneWaiting(std::exception_ptr{}); } - void Worker::esPrefetchAsync(WaitingTask* iTask, + void Worker::esPrefetchAsync(WaitingTaskHolder iTask, EventSetupImpl const& iImpl, Transition iTrans, ServiceToken const& iToken) { @@ -265,57 +270,47 @@ namespace edm { // will work. if UNLIKELY (tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism) == 1) { - //We spawn this first so that the other ES tasks are before it in the TBB queue - tbb::task_arena edArena(tbb::task_arena::attach{}); - tbb::task::spawn( - *make_functor_task(tbb::task::allocate_root(), - [this, task = edm::WaitingTaskHolder(iTask), iTrans, &iImpl, iToken, edArena]() mutable { - esTaskArena().execute([this, iTrans, &iImpl, iToken, task = std::move(task), edArena]() { - auto waitTask = edm::make_empty_waiting_task(); - auto const& recs = esRecordsToGetFrom(iTrans); - auto const& items = esItemsToGetFrom(iTrans); - waitTask->set_ref_count(2); - for (size_t i = 0; i != items.size(); ++i) { - if (recs[i] != ESRecordIndex{}) { - auto rec = iImpl.findImpl(recs[i]); - if (rec) { - rec->prefetchAsync(waitTask.get(), items[i], &iImpl, iToken); - } - } - } - waitTask->decrement_ref_count(); - waitTask->wait_for_all(); - - auto exPtr = waitTask->exceptionPtr(); - tbb::task_arena(edArena).execute([task, exPtr]() { - auto t = task; - if (exPtr) { - t.doneWaiting(*exPtr); - } else { - t.doneWaiting(std::exception_ptr{}); - } - }); - }); - })); + auto taskGroup = iTask.group(); + taskGroup->run([this, task = std::move(iTask), iTrans, &iImpl, iToken]() { + std::exception_ptr exceptPtr{}; + iImpl.taskArena()->execute([this, iTrans, &iImpl, iToken, &exceptPtr]() { + exceptPtr = syncWait([&](WaitingTaskHolder&& iHolder) { + auto const& recs = esRecordsToGetFrom(iTrans); + auto const& items = esItemsToGetFrom(iTrans); + auto hWaitTask = std::move(iHolder); + for (size_t i = 0; i != items.size(); ++i) { + if (recs[i] != ESRecordIndex{}) { + auto rec = iImpl.findImpl(recs[i]); + if (rec) { + rec->prefetchAsync(hWaitTask, items[i], &iImpl, iToken, ESParentContext(&moduleCallingContext_)); + } + } + } + }); //syncWait + }); //esTaskArena().execute + //note use of a copy gets around declaring the lambda as mutable + auto tempTask = task; + tempTask.doneWaiting(exceptPtr); + }); //group.run } else { + auto group = iTask.group(); //We need iTask to run in the default arena since it is not an ES task - auto task = - make_waiting_task(tbb::task::allocate_root(), - [holder = WaitingTaskWithArenaHolder{iTask}](std::exception_ptr const* iExcept) mutable { - if (iExcept) { - holder.doneWaiting(*iExcept); - } else { - holder.doneWaiting(std::exception_ptr{}); - } - }); - - WaitingTaskHolder tempH(task); - esTaskArena().execute([&]() { + auto task = make_waiting_task( + [holder = WaitingTaskWithArenaHolder(std::move(iTask))](std::exception_ptr const* iExcept) mutable { + if (iExcept) { + holder.doneWaiting(*iExcept); + } else { + holder.doneWaiting(std::exception_ptr{}); + } + }); + + WaitingTaskHolder tempH(*group, task); + iImpl.taskArena()->execute([&]() { for (size_t i = 0; i != items.size(); ++i) { if (recs[i] != ESRecordIndex{}) { auto rec = iImpl.findImpl(recs[i]); if (rec) { - rec->prefetchAsync(task, items[i], &iImpl, iToken); + rec->prefetchAsync(tempH, items[i], &iImpl, iToken, ESParentContext(&moduleCallingContext_)); } } } @@ -323,7 +318,7 @@ namespace edm { } } - void Worker::edPrefetchAsync(WaitingTask* iTask, ServiceToken const& token, Principal const& iPrincipal) const { + void Worker::edPrefetchAsync(WaitingTaskHolder iTask, ServiceToken const& token, Principal const& iPrincipal) const { // Prefetch products the module declares it consumes std::vector const& items = itemsToGetFrom(iPrincipal.branchType()); @@ -349,13 +344,14 @@ namespace edm { void Worker::beginJob() { try { convertException::wrap([&]() { - ModuleBeginJobSignalSentry cpp(actReg_.get(), description()); + ModuleBeginJobSignalSentry cpp(actReg_.get(), *description()); implBeginJob(); }); } catch (cms::Exception& ex) { state_ = Exception; std::ostringstream ost; - ost << "Calling beginJob for module " << description().moduleName() << "/'" << description().moduleLabel() << "'"; + ost << "Calling beginJob for module " << description()->moduleName() << "/'" << description()->moduleLabel() + << "'"; ex.addContext(ost.str()); throw; } @@ -364,13 +360,15 @@ namespace edm { void Worker::endJob() { try { convertException::wrap([&]() { - ModuleEndJobSignalSentry cpp(actReg_.get(), description()); + ModuleDescription const* desc = description(); + assert(desc != nullptr); + ModuleEndJobSignalSentry cpp(actReg_.get(), *desc); implEndJob(); }); } catch (cms::Exception& ex) { state_ = Exception; std::ostringstream ost; - ost << "Calling endJob for module " << description().moduleName() << "/'" << description().moduleLabel() << "'"; + ost << "Calling endJob for module " << description()->moduleName() << "/'" << description()->moduleLabel() << "'"; ex.addContext(ost.str()); throw; } @@ -393,7 +391,7 @@ namespace edm { } catch (cms::Exception& ex) { state_ = Exception; std::ostringstream ost; - ost << "Calling beginStream for module " << description().moduleName() << "/'" << description().moduleLabel() + ost << "Calling beginStream for module " << description()->moduleName() << "/'" << description()->moduleLabel() << "'"; ex.addContext(ost.str()); throw; @@ -417,7 +415,7 @@ namespace edm { } catch (cms::Exception& ex) { state_ = Exception; std::ostringstream ost; - ost << "Calling endStream for module " << description().moduleName() << "/'" << description().moduleLabel() + ost << "Calling endStream for module " << description()->moduleName() << "/'" << description()->moduleLabel() << "'"; ex.addContext(ost.str()); throw; @@ -428,7 +426,7 @@ namespace edm { try { implRegisterThinnedAssociations(registry, helper); } catch (cms::Exception& ex) { - ex.addContext("Calling registerThinnedAssociations() for module " + description().moduleLabel()); + ex.addContext("Calling registerThinnedAssociations() for module " + description()->moduleLabel()); throw ex; } } @@ -503,20 +501,16 @@ namespace edm { } Worker::HandleExternalWorkExceptionTask::HandleExternalWorkExceptionTask(Worker* worker, + tbb::task_group* group, WaitingTask* runModuleTask, ParentContext const& parentContext) - : m_worker(worker), m_runModuleTask(runModuleTask), m_parentContext(parentContext) {} + : m_worker(worker), m_runModuleTask(runModuleTask), m_group(group), m_parentContext(parentContext) {} - tbb::task* Worker::HandleExternalWorkExceptionTask::execute() { + void Worker::HandleExternalWorkExceptionTask::execute() { auto excptr = exceptionPtr(); + WaitingTaskHolder holder(*m_group, m_runModuleTask); if (excptr) { - // increment the ref count so the holder will not spawn it - m_runModuleTask->set_ref_count(1); - WaitingTaskHolder holder(m_runModuleTask); holder.doneWaiting(m_worker->handleExternalWorkException(excptr, m_parentContext)); } - m_runModuleTask->set_ref_count(0); - // Depend on TBB Scheduler Bypass to run the next task - return m_runModuleTask; } } // namespace edm diff --git a/FWCore/Framework/src/Worker.h b/FWCore/Framework/src/Worker.h index b236508048277..5820b77a3deb7 100644 --- a/FWCore/Framework/src/Worker.h +++ b/FWCore/Framework/src/Worker.h @@ -30,6 +30,7 @@ the worker is reset(). #include "FWCore/Framework/interface/OccurrenceTraits.h" #include "FWCore/Framework/interface/ProductResolverIndexAndSkipBit.h" #include "FWCore/Concurrency/interface/WaitingTask.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/Concurrency/interface/WaitingTaskWithArenaHolder.h" #include "FWCore/Concurrency/interface/WaitingTaskList.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -70,6 +71,7 @@ namespace edm { class EventPrincipal; class EventSetupImpl; class EarlyDeleteHelper; + class ModuleProcessName; class ProductResolverIndexHelper; class ProductResolverIndexAndSkipBit; class StreamID; @@ -100,19 +102,11 @@ namespace edm { operator bool() { return serial_ != nullptr or limited_ != nullptr; } template - void push(F&& iF) { + void push(tbb::task_group& iG, F&& iF) { if (serial_) { - serial_->push(iF); + serial_->push(iG, iF); } else { - limited_->push(iF); - } - } - template - void pushAndWait(F&& iF) { - if (serial_) { - serial_->pushAndWait(iF); - } else { - limited_->pushAndWait(iF); + limited_->push(iG, iF); } } }; @@ -123,6 +117,11 @@ namespace edm { Worker(Worker const&) = delete; // Disallow copying and moving Worker& operator=(Worker const&) = delete; // Disallow copying and moving + void clearModule() { + moduleValid_ = false; + doClearModule(); + } + virtual bool wantsProcessBlocks() const = 0; virtual bool wantsInputProcessBlocks() const = 0; virtual bool wantsGlobalRuns() const = 0; @@ -133,17 +132,16 @@ namespace edm { virtual SerialTaskQueue* globalRunsQueue() = 0; virtual SerialTaskQueue* globalLuminosityBlocksQueue() = 0; - template - bool doWork(typename T::TransitionInfoType const&, StreamID, ParentContext const&, typename T::Context const*); - - void prePrefetchSelectionAsync(WaitingTask* task, ServiceToken const&, StreamID stream, EventPrincipal const*); + void prePrefetchSelectionAsync( + tbb::task_group&, WaitingTask* task, ServiceToken const&, StreamID stream, EventPrincipal const*); - void prePrefetchSelectionAsync(WaitingTask* task, ServiceToken const&, StreamID stream, void const*) { + void prePrefetchSelectionAsync( + tbb::task_group&, WaitingTask* task, ServiceToken const&, StreamID stream, void const*) { assert(false); } template - void doWorkAsync(WaitingTask*, + void doWorkAsync(WaitingTaskHolder, typename T::TransitionInfoType const&, ServiceToken const&, StreamID, @@ -151,7 +149,7 @@ namespace edm { typename T::Context const*); template - void doWorkNoPrefetchingAsync(WaitingTask*, + void doWorkNoPrefetchingAsync(WaitingTaskHolder, typename T::TransitionInfoType const&, ServiceToken const&, StreamID, @@ -164,7 +162,7 @@ namespace edm { ParentContext const&, typename T::Context const*); - void callWhenDoneAsync(WaitingTask* task) { waitingTasks_.add(task); } + void callWhenDoneAsync(WaitingTaskHolder task) { waitingTasks_.add(std::move(task)); } void skipOnPath(EventPrincipal const& iEvent); void beginJob(); void endJob(); @@ -185,8 +183,12 @@ namespace edm { void postDoEvent(EventPrincipal const&); - ModuleDescription const& description() const { return *(moduleCallingContext_.moduleDescription()); } - ModuleDescription const* descPtr() const { return moduleCallingContext_.moduleDescription(); } + ModuleDescription const* description() const { + if (moduleValid_) { + return moduleCallingContext_.moduleDescription(); + } + return nullptr; + } ///The signals are required to live longer than the last call to 'doWork' /// this was done to improve performance based on profiling void setActivityRegistry(std::shared_ptr areg); @@ -202,7 +204,8 @@ namespace edm { iIndicies) = 0; virtual void modulesWhoseProductsAreConsumed( - std::vector& modules, + std::array*, NumBranchTypes>& modules, + std::vector& modulesInPreviousProcesses, ProductRegistry const& preg, std::map const& labelsToDesc) const = 0; @@ -236,6 +239,9 @@ namespace edm { protected: template friend class workerhelper::CallImpl; + + virtual void doClearModule() = 0; + virtual std::string workerType() const = 0; virtual bool implDo(EventTransitionInfo const&, ModuleCallingContext const*) = 0; @@ -280,7 +286,7 @@ namespace edm { virtual std::vector const& esRecordsToGetFrom(Transition) const = 0; virtual std::vector const& itemsShouldPutInEvent() const = 0; - virtual void preActionBeforeRunEventAsync(WaitingTask* iTask, + virtual void preActionBeforeRunEventAsync(WaitingTaskHolder iTask, ModuleCallingContext const& moduleCallingContext, Principal const& iPrincipal) const = 0; @@ -324,11 +330,14 @@ namespace edm { } template - void prefetchAsync( - WaitingTask*, ServiceToken const&, ParentContext const&, typename T::TransitionInfoType const&, Transition); + void prefetchAsync(WaitingTaskHolder, + ServiceToken const&, + ParentContext const&, + typename T::TransitionInfoType const&, + Transition); - void esPrefetchAsync(WaitingTask*, EventSetupImpl const&, Transition, ServiceToken const&); - void edPrefetchAsync(WaitingTask*, ServiceToken const&, Principal const&) const; + void esPrefetchAsync(WaitingTaskHolder, EventSetupImpl const&, Transition, ServiceToken const&); + void edPrefetchAsync(WaitingTaskHolder, ServiceToken const&, Principal const&) const; bool needsESPrefetching(Transition iTrans) const noexcept { return iTrans < edm::Transition::NumberOfEventSetupTransitions ? not esItemsToGetFrom(iTrans).empty() : false; @@ -364,13 +373,15 @@ namespace edm { ServiceToken const& token, StreamID streamID, ParentContext const& parentContext, - typename T::Context const* context) + typename T::Context const* context, + tbb::task_group* iGroup) : m_worker(worker), m_transitionInfo(transitionInfo), m_streamID(streamID), m_parentContext(parentContext), m_context(context), - m_serviceToken(token) {} + m_serviceToken(token), + m_group(iGroup) {} struct EnableQueueGuard { SerialTaskQueue* queue_; @@ -386,7 +397,7 @@ namespace edm { } }; - tbb::task* execute() override { + void execute() final { //Need to make the services available early so other services can see them ServiceRegistry::Operate guard(m_serviceToken); @@ -430,19 +441,18 @@ namespace edm { //keep another global transition from running if necessary auto gQueue = workerhelper::CallImpl::pauseGlobalQueue(m_worker); if (gQueue) { - gQueue->push([queue, gQueue, f]() mutable { + gQueue->push(*m_group, [queue, gQueue, f, group = m_group]() mutable { gQueue->pause(); - queue.push(std::move(f)); + queue.push(*group, std::move(f)); }); } else { - queue.push(std::move(f)); + queue.push(*m_group, std::move(f)); } - return nullptr; + return; } } m_worker->runModuleAfterAsyncPrefetch(excptr, m_transitionInfo, m_streamID, m_parentContext, m_context); - return nullptr; } private: @@ -452,6 +462,7 @@ namespace edm { ParentContext const m_parentContext; typename T::Context const* m_context; ServiceToken m_serviceToken; + tbb::task_group* m_group; }; // AcquireTask is only used for the Event case, but we define @@ -466,7 +477,7 @@ namespace edm { ServiceToken const&, ParentContext const&, WaitingTaskWithArenaHolder) {} - tbb::task* execute() override { return nullptr; } + void execute() final {} }; template @@ -483,7 +494,7 @@ namespace edm { m_holder(std::move(holder)), m_serviceToken(token) {} - tbb::task* execute() override { + void execute() final { //Need to make the services available early so other services can see them ServiceRegistry::Operate guard(m_serviceToken); @@ -504,23 +515,23 @@ namespace edm { if (not excptr) { if (auto queue = m_worker->serializeRunModule()) { - queue.push([worker = m_worker, + queue.push(*m_holder.group(), + [worker = m_worker, info = m_eventTransitionInfo, parentContext = m_parentContext, serviceToken = m_serviceToken, holder = m_holder]() { - //Need to make the services available - ServiceRegistry::Operate operateRunAcquire(serviceToken); + //Need to make the services available + ServiceRegistry::Operate operateRunAcquire(serviceToken); - std::exception_ptr* ptr = nullptr; - worker->runAcquireAfterAsyncPrefetch(ptr, info, parentContext, holder); - }); - return nullptr; + std::exception_ptr* ptr = nullptr; + worker->runAcquireAfterAsyncPrefetch(ptr, info, parentContext, holder); + }); + return; } } m_worker->runAcquireAfterAsyncPrefetch(excptr, m_eventTransitionInfo, m_parentContext, std::move(m_holder)); - return nullptr; } private: @@ -536,13 +547,17 @@ namespace edm { // exception to a CMS exception and adding context to the exception. class HandleExternalWorkExceptionTask : public WaitingTask { public: - HandleExternalWorkExceptionTask(Worker* worker, WaitingTask* runModuleTask, ParentContext const& parentContext); + HandleExternalWorkExceptionTask(Worker* worker, + tbb::task_group* group, + WaitingTask* runModuleTask, + ParentContext const& parentContext); - tbb::task* execute() override; + void execute() final; private: Worker* m_worker; WaitingTask* m_runModuleTask; + tbb::task_group* m_group; ParentContext const m_parentContext; }; @@ -567,6 +582,7 @@ namespace edm { edm::WaitingTaskList waitingTasks_; std::atomic workStarted_; bool ranAcquireWithoutException_; + bool moduleValid_ = true; }; namespace { @@ -609,7 +625,7 @@ namespace edm { return iWorker->implDo(info, mcc); } static void esPrefetchAsync(Worker* worker, - WaitingTask* waitingTask, + WaitingTaskHolder waitingTask, ServiceToken const& token, EventTransitionInfo const& info, Transition transition) { @@ -636,7 +652,7 @@ namespace edm { return iWorker->implDoBegin(info, mcc); } static void esPrefetchAsync(Worker* worker, - WaitingTask* waitingTask, + WaitingTaskHolder waitingTask, ServiceToken const& token, RunTransitionInfo const& info, Transition transition) { @@ -661,7 +677,7 @@ namespace edm { return iWorker->implDoStreamBegin(id, info, mcc); } static void esPrefetchAsync(Worker* worker, - WaitingTask* waitingTask, + WaitingTaskHolder waitingTask, ServiceToken const& token, RunTransitionInfo const& info, Transition transition) { @@ -686,7 +702,7 @@ namespace edm { return iWorker->implDoEnd(info, mcc); } static void esPrefetchAsync(Worker* worker, - WaitingTask* waitingTask, + WaitingTaskHolder waitingTask, ServiceToken const& token, RunTransitionInfo const& info, Transition transition) { @@ -711,7 +727,7 @@ namespace edm { return iWorker->implDoStreamEnd(id, info, mcc); } static void esPrefetchAsync(Worker* worker, - WaitingTask* waitingTask, + WaitingTaskHolder waitingTask, ServiceToken const& token, RunTransitionInfo const& info, Transition transition) { @@ -737,7 +753,7 @@ namespace edm { return iWorker->implDoBegin(info, mcc); } static void esPrefetchAsync(Worker* worker, - WaitingTask* waitingTask, + WaitingTaskHolder waitingTask, ServiceToken const& token, LumiTransitionInfo const& info, Transition transition) { @@ -762,7 +778,7 @@ namespace edm { return iWorker->implDoStreamBegin(id, info, mcc); } static void esPrefetchAsync(Worker* worker, - WaitingTask* waitingTask, + WaitingTaskHolder waitingTask, ServiceToken const& token, LumiTransitionInfo const& info, Transition transition) { @@ -788,7 +804,7 @@ namespace edm { return iWorker->implDoEnd(info, mcc); } static void esPrefetchAsync(Worker* worker, - WaitingTask* waitingTask, + WaitingTaskHolder waitingTask, ServiceToken const& token, LumiTransitionInfo const& info, Transition transition) { @@ -813,7 +829,7 @@ namespace edm { return iWorker->implDoStreamEnd(id, info, mcc); } static void esPrefetchAsync(Worker* worker, - WaitingTask* waitingTask, + WaitingTaskHolder waitingTask, ServiceToken const& token, LumiTransitionInfo const& info, Transition transition) { @@ -837,8 +853,8 @@ namespace edm { ModuleSignalSentry cpp(actReg, context, mcc); return iWorker->implDoBeginProcessBlock(info.principal(), mcc); } - static constexpr void esPrefetchAsync( - Worker*, WaitingTask*, ServiceToken const&, ProcessBlockTransitionInfo const&, Transition) {} + static void esPrefetchAsync( + Worker*, WaitingTaskHolder, ServiceToken const&, ProcessBlockTransitionInfo const&, Transition) {} static bool wantsTransition(Worker const* iWorker) { return iWorker->wantsProcessBlocks(); } static bool needToRunSelection(Worker const* iWorker) { return false; } static SerialTaskQueue* pauseGlobalQueue(Worker* iWorker) { return nullptr; } @@ -857,8 +873,8 @@ namespace edm { ModuleSignalSentry cpp(actReg, context, mcc); return iWorker->implDoAccessInputProcessBlock(info.principal(), mcc); } - static constexpr void esPrefetchAsync( - Worker*, WaitingTask*, ServiceToken const&, ProcessBlockTransitionInfo const&, Transition) {} + static void esPrefetchAsync( + Worker*, WaitingTaskHolder, ServiceToken const&, ProcessBlockTransitionInfo const&, Transition) {} static bool wantsTransition(Worker const* iWorker) { return iWorker->wantsInputProcessBlocks(); } static bool needToRunSelection(Worker const* iWorker) { return false; } static SerialTaskQueue* pauseGlobalQueue(Worker* iWorker) { return nullptr; } @@ -877,8 +893,8 @@ namespace edm { ModuleSignalSentry cpp(actReg, context, mcc); return iWorker->implDoEndProcessBlock(info.principal(), mcc); } - static constexpr void esPrefetchAsync( - Worker*, WaitingTask*, ServiceToken const&, ProcessBlockTransitionInfo const&, Transition) {} + static void esPrefetchAsync( + Worker*, WaitingTaskHolder, ServiceToken const&, ProcessBlockTransitionInfo const&, Transition) {} static bool wantsTransition(Worker const* iWorker) { return iWorker->wantsProcessBlocks(); } static bool needToRunSelection(Worker const* iWorker) { return false; } static SerialTaskQueue* pauseGlobalQueue(Worker* iWorker) { return nullptr; } @@ -887,7 +903,7 @@ namespace edm { } // namespace workerhelper template - void Worker::prefetchAsync(WaitingTask* iTask, + void Worker::prefetchAsync(WaitingTaskHolder iTask, ServiceToken const& token, ParentContext const& parentContext, typename T::TransitionInfoType const& transitionInfo, @@ -900,24 +916,16 @@ namespace edm { actReg_->preModuleEventPrefetchingSignal_.emit(*moduleCallingContext_.getStreamContext(), moduleCallingContext_); } - //Need to be sure the ref count isn't set to 0 immediately - iTask->increment_ref_count(); - workerhelper::CallImpl::esPrefetchAsync(this, iTask, token, transitionInfo, iTransition); edPrefetchAsync(iTask, token, principal); if (principal.branchType() == InEvent) { preActionBeforeRunEventAsync(iTask, moduleCallingContext_, principal); } - - if (0 == iTask->decrement_ref_count()) { - //if everything finishes before we leave this routine, we need to launch the task - tbb::task::spawn(*iTask); - } } template - void Worker::doWorkAsync(WaitingTask* task, + void Worker::doWorkAsync(WaitingTaskHolder task, typename T::TransitionInfoType const& transitionInfo, ServiceToken const& token, StreamID streamID, @@ -943,49 +951,46 @@ namespace edm { if (workerhelper::CallImpl::needToRunSelection(this)) { //We need to run the selection in a different task so that // we can prefetch the data needed for the selection - auto runTask = new (tbb::task::allocate_root()) - RunModuleTask(this, transitionInfo, token, streamID, parentContext, context); + auto runTask = + new RunModuleTask(this, transitionInfo, token, streamID, parentContext, context, task.group()); //make sure the task is either run or destroyed struct DestroyTask { DestroyTask(edm::WaitingTask* iTask) : m_task(iTask) {} ~DestroyTask() { - auto p = m_task.load(); + auto p = m_task.exchange(nullptr); if (p) { - tbb::task::destroy(*p); + TaskSentry s{p}; } } - edm::WaitingTask* release() { - auto t = m_task.load(); - m_task.store(nullptr); - return t; - } + edm::WaitingTask* release() { return m_task.exchange(nullptr); } + private: std::atomic m_task; }; - + auto* group = task.group(); auto ownRunTask = std::make_shared(runTask); auto selectionTask = make_waiting_task( - tbb::task::allocate_root(), - [ownRunTask, parentContext, info = transitionInfo, token, this](std::exception_ptr const*) mutable { + [ownRunTask, parentContext, info = transitionInfo, token, group, this](std::exception_ptr const*) mutable { ServiceRegistry::Operate guard(token); - prefetchAsync(ownRunTask->release(), token, parentContext, info, T::transition_); + prefetchAsync( + WaitingTaskHolder(*group, ownRunTask->release()), token, parentContext, info, T::transition_); }); - prePrefetchSelectionAsync(selectionTask, token, streamID, &transitionInfo.principal()); + prePrefetchSelectionAsync(*group, selectionTask, token, streamID, &transitionInfo.principal()); } else { - WaitingTask* moduleTask = new (tbb::task::allocate_root()) - RunModuleTask(this, transitionInfo, token, streamID, parentContext, context); + WaitingTask* moduleTask = + new RunModuleTask(this, transitionInfo, token, streamID, parentContext, context, task.group()); + auto group = task.group(); if constexpr (T::isEvent_) { if (hasAcquire()) { WaitingTaskWithArenaHolder runTaskHolder( - new (tbb::task::allocate_root()) HandleExternalWorkExceptionTask(this, moduleTask, parentContext)); - moduleTask = new (tbb::task::allocate_root()) - AcquireTask(this, transitionInfo, token, parentContext, std::move(runTaskHolder)); + *group, new HandleExternalWorkExceptionTask(this, group, moduleTask, parentContext)); + moduleTask = new AcquireTask(this, transitionInfo, token, parentContext, std::move(runTaskHolder)); } } - prefetchAsync(moduleTask, token, parentContext, transitionInfo, T::transition_); + prefetchAsync(WaitingTaskHolder(*group, moduleTask), token, parentContext, transitionInfo, T::transition_); } } } @@ -1017,7 +1022,7 @@ namespace edm { } template - void Worker::doWorkNoPrefetchingAsync(WaitingTask* task, + void Worker::doWorkNoPrefetchingAsync(WaitingTaskHolder task, typename T::TransitionInfoType const& transitionInfo, ServiceToken const& serviceToken, StreamID streamID, @@ -1048,153 +1053,32 @@ namespace edm { }; if (needsESPrefetching(T::transition_)) { - auto afterPrefetch = edm::make_waiting_task( - tbb::task::allocate_root(), [toDo = std::move(toDo), this](std::exception_ptr const* iExcept) { + auto group = task.group(); + auto afterPrefetch = + edm::make_waiting_task([toDo = std::move(toDo), group, this](std::exception_ptr const* iExcept) { if (iExcept) { this->waitingTasks_.doneWaiting(*iExcept); } else { if (auto queue = this->serializeRunModule()) { - queue.push(toDo); + queue.push(*group, toDo); } else { - auto taskToDo = make_functor_task(tbb::task::allocate_root(), toDo); - tbb::task::spawn(*taskToDo); + group->run(toDo); } } }); - esPrefetchAsync(afterPrefetch, transitionInfo.eventSetupImpl(), T::transition_, serviceToken); + esPrefetchAsync( + WaitingTaskHolder(*group, afterPrefetch), transitionInfo.eventSetupImpl(), T::transition_, serviceToken); } else { + auto group = task.group(); if (auto queue = this->serializeRunModule()) { - queue.push(toDo); + queue.push(*group, toDo); } else { - auto taskToDo = make_functor_task(tbb::task::allocate_root(), toDo); - tbb::task::spawn(*taskToDo); + group->run(toDo); } } } } - template - bool Worker::doWork(typename T::TransitionInfoType const& transitionInfo, - StreamID streamID, - ParentContext const& parentContext, - typename T::Context const* context) { - if constexpr (T::isEvent_) { - timesVisited_.fetch_add(1, std::memory_order_relaxed); - } - bool rc = false; - - switch (state_) { - case Ready: - break; - case Pass: - return true; - case Fail: - return false; - case Exception: { - std::rethrow_exception(cached_exception_); - } - } - - bool expected = false; - if (not workStarted_.compare_exchange_strong(expected, true)) { - //another thread beat us here - auto waitTask = edm::make_empty_waiting_task(); - waitTask->increment_ref_count(); - - waitingTasks_.add(waitTask.get()); - - waitTask->wait_for_all(); - - switch (state_) { - case Ready: - assert(false); - case Pass: - return true; - case Fail: - return false; - case Exception: { - std::rethrow_exception(cached_exception_); - } - } - } - - //Need the context to be set until after any exception is resolved - moduleCallingContext_.setContext(ModuleCallingContext::State::kPrefetching, parentContext, nullptr); - - auto resetContext = [](ModuleCallingContext* iContext) { - iContext->setContext(ModuleCallingContext::State::kInvalid, ParentContext(), nullptr); - }; - std::unique_ptr prefetchSentry(&moduleCallingContext_, resetContext); - - if constexpr (T::isEvent_) { - //if have TriggerResults based selection we want to reject the event before doing prefetching - if (workerhelper::CallImpl::needToRunSelection(this)) { - auto waitTask = edm::make_empty_waiting_task(); - waitTask->set_ref_count(2); - prePrefetchSelectionAsync( - waitTask.get(), ServiceRegistry::instance().presentToken(), streamID, &transitionInfo.principal()); - waitTask->decrement_ref_count(); - waitTask->wait_for_all(); - - if (state() != Ready) { - //The selection must have rejected this event - return true; - } - } - auto waitTask = edm::make_empty_waiting_task(); - { - //Make sure signal is sent once the prefetching is done - // [the 'pre' signal was sent in prefetchAsync] - //The purpose of this block is to send the signal after wait_for_all - auto sentryFunc = [this](void*) { emitPostModuleEventPrefetchingSignal(); }; - std::unique_ptr signalSentry(actReg_.get(), sentryFunc); - - //set count to 2 since wait_for_all requires value to not go to 0 - waitTask->set_ref_count(2); - - prefetchAsync( - waitTask.get(), ServiceRegistry::instance().presentToken(), parentContext, transitionInfo, T::transition_); - waitTask->decrement_ref_count(); - waitTask->wait_for_all(); - } - if (waitTask->exceptionPtr() != nullptr) { - if (shouldRethrowException(*waitTask->exceptionPtr(), parentContext, T::isEvent_)) { - setException(*waitTask->exceptionPtr()); - waitingTasks_.doneWaiting(cached_exception_); - std::rethrow_exception(cached_exception_); - } else { - setPassed(); - waitingTasks_.doneWaiting(nullptr); - return true; - } - } - } - - //successful prefetch so no reset necessary - prefetchSentry.release(); - if (auto queue = serializeRunModule()) { - auto serviceToken = ServiceRegistry::instance().presentToken(); - queue.pushAndWait([&]() { - //Need to make the services available - ServiceRegistry::Operate guard(serviceToken); - // This try-catch is primarily for paranoia: runModule() deals internally with exceptions, except for those coming from Service signal actions, which are not supposed to throw exceptions - CMS_SA_ALLOW try { rc = runModule(transitionInfo, streamID, parentContext, context); } catch (...) { - } - }); - } else { - // This try-catch is primarily for paranoia: runModule() deals internally with exceptions, except for those coming from Service signal actions, which are not supposed to throw exceptions - CMS_SA_ALLOW try { rc = runModule(transitionInfo, streamID, parentContext, context); } catch (...) { - } - } - if (state_ == Exception) { - waitingTasks_.doneWaiting(cached_exception_); - std::rethrow_exception(cached_exception_); - } - - waitingTasks_.doneWaiting(nullptr); - return rc; - } - template bool Worker::runModule(typename T::TransitionInfoType const& transitionInfo, StreamID streamID, diff --git a/FWCore/Framework/src/WorkerInPath.h b/FWCore/Framework/src/WorkerInPath.h index 278a6afc43ed9..36292cc3981f8 100644 --- a/FWCore/Framework/src/WorkerInPath.h +++ b/FWCore/Framework/src/WorkerInPath.h @@ -12,6 +12,7 @@ */ #include "FWCore/Framework/src/Worker.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" #include "FWCore/ServiceRegistry/interface/ParentContext.h" #include "FWCore/ServiceRegistry/interface/PlaceInPathContext.h" @@ -19,7 +20,6 @@ namespace edm { class PathContext; class StreamID; - class WaitingTask; class ServiceToken; class WorkerInPath { @@ -29,8 +29,11 @@ namespace edm { WorkerInPath(Worker*, FilterAction theAction, unsigned int placeInPath, bool runConcurrently); template - void runWorkerAsync( - WaitingTask*, typename T::TransitionInfoType const&, ServiceToken const&, StreamID, typename T::Context const*); + void runWorkerAsync(WaitingTaskHolder, + typename T::TransitionInfoType const&, + ServiceToken const&, + StreamID, + typename T::Context const*); bool checkResultsOfRunWorker(bool wasEvent); @@ -101,7 +104,7 @@ namespace edm { } template - void WorkerInPath::runWorkerAsync(WaitingTask* iTask, + void WorkerInPath::runWorkerAsync(WaitingTaskHolder iTask, typename T::TransitionInfoType const& info, ServiceToken const& token, StreamID streamID, diff --git a/FWCore/Framework/src/WorkerManager.cc b/FWCore/Framework/src/WorkerManager.cc index 5987c44fbbfd0..2932813deb00d 100644 --- a/FWCore/Framework/src/WorkerManager.cc +++ b/FWCore/Framework/src/WorkerManager.cc @@ -30,6 +30,16 @@ namespace edm { unscheduled_(*areg), lastSetupEventPrincipal_(nullptr) {} // WorkerManager::WorkerManager + void WorkerManager::deleteModuleIfExists(std::string const& moduleLabel) { + auto worker = workerReg_.get(moduleLabel); + if (worker != nullptr) { + auto eraseBeg = std::remove(allWorkers_.begin(), allWorkers_.end(), worker); + allWorkers_.erase(eraseBeg, allWorkers_.end()); + unscheduled_.removeWorker(worker); + workerReg_.deleteModule(moduleLabel); + } + } + Worker* WorkerManager::getWorker(ParameterSet& pset, ProductRegistry& preg, PreallocationConfiguration const* prealloc, @@ -85,7 +95,7 @@ namespace edm { auto const lumiLookup = iRegistry.productLookup(InLumi); auto const eventLookup = iRegistry.productLookup(InEvent); if (!allWorkers_.empty()) { - auto const& processName = allWorkers_[0]->description().processName(); + auto const& processName = allWorkers_[0]->description()->processName(); auto processBlockModuleToIndicies = processBlockLookup->indiciesForModulesInProcess(processName); auto runModuleToIndicies = runLookup->indiciesForModulesInProcess(processName); auto lumiModuleToIndicies = lumiLookup->indiciesForModulesInProcess(processName); diff --git a/FWCore/Framework/src/WorkerRegistry.cc b/FWCore/Framework/src/WorkerRegistry.cc index 285e149c238f5..8c24d3a3df2cf 100644 --- a/FWCore/Framework/src/WorkerRegistry.cc +++ b/FWCore/Framework/src/WorkerRegistry.cc @@ -44,4 +44,23 @@ namespace edm { } return (workerIt->second.get()); } + + Worker const* WorkerRegistry::get(std::string const& moduleLabel) const { + WorkerMap::const_iterator workerIt = m_workerMap.find(moduleLabel); + if (workerIt != m_workerMap.end()) { + return workerIt->second; + } + return nullptr; + } + + void WorkerRegistry::deleteModule(std::string const& moduleLabel) { + WorkerMap::iterator workerIt = m_workerMap.find(moduleLabel); + if (workerIt == m_workerMap.end()) { + throw cms::Exception("LogicError") + << "WorkerRegistry::deleteModule() Trying to delete the module of a Worker with label " << moduleLabel + << " but no such Worker exists in the WorkerRegistry. Please contact framework developers."; + } + workerIt->second->clearModule(); + } + } // namespace edm diff --git a/FWCore/Framework/src/WorkerRegistry.h b/FWCore/Framework/src/WorkerRegistry.h index 94ede53871a85..d87b6d9d9c039 100644 --- a/FWCore/Framework/src/WorkerRegistry.h +++ b/FWCore/Framework/src/WorkerRegistry.h @@ -50,6 +50,14 @@ namespace edm { create it @note Workers are owned by this class, do not delete them*/ Worker* getWorker(WorkerParams const& p, std::string const& moduleLabel); + + /// Retrieve particular instance of the worker without creating it + /// If one doesn't exist, returns nullptr + Worker const* get(std::string const& moduleLabel) const; + + /// Deletes the module of the Worker, but the Worker continues to exist. + void deleteModule(std::string const& moduleLabel); + void clear(); private: diff --git a/FWCore/Framework/src/WorkerT.cc b/FWCore/Framework/src/WorkerT.cc index 8885ff2ee1aed..3978441cce32c 100644 --- a/FWCore/Framework/src/WorkerT.cc +++ b/FWCore/Framework/src/WorkerT.cc @@ -685,7 +685,7 @@ namespace edm { BranchType iBranchType, std::unordered_multimap> const& iIndicies) { - resolvePutIndiciesImpl(&module(), iBranchType, iIndicies, description().moduleLabel()); + resolvePutIndiciesImpl(&module(), iBranchType, iIndicies, description()->moduleLabel()); } template diff --git a/FWCore/Framework/src/WorkerT.h b/FWCore/Framework/src/WorkerT.h index 4c8284c959d44..e373ee736eca4 100644 --- a/FWCore/Framework/src/WorkerT.h +++ b/FWCore/Framework/src/WorkerT.h @@ -22,6 +22,7 @@ WorkerT: Code common to all workers. namespace edm { class ModuleCallingContext; + class ModuleProcessName; class ProductResolverIndexAndSkipBit; class ThinnedAssociationsHelper; class WaitingTaskWithArenaHolder; @@ -77,6 +78,8 @@ namespace edm { T const& module() const { return *module_; } private: + void doClearModule() override { get_underlying_safe(module_).reset(); } + bool implDo(EventTransitionInfo const&, ModuleCallingContext const*) override; void itemsToGetForSelection(std::vector&) const final; @@ -107,10 +110,12 @@ namespace edm { TaskQueueAdaptor serializeRunModule() override; void modulesWhoseProductsAreConsumed( - std::vector& modules, + std::array*, NumBranchTypes>& modules, + std::vector& modulesInPreviousProcesses, ProductRegistry const& preg, std::map const& labelsToDesc) const override { - module_->modulesWhoseProductsAreConsumed(modules, preg, labelsToDesc, module_->moduleDescription().processName()); + module_->modulesWhoseProductsAreConsumed( + modules, modulesInPreviousProcesses, preg, labelsToDesc, module_->moduleDescription().processName()); } void convertCurrentProcessAlias(std::string const& processName) override { @@ -140,7 +145,7 @@ namespace edm { std::vector const& itemsShouldPutInEvent() const override; - void preActionBeforeRunEventAsync(WaitingTask* iTask, + void preActionBeforeRunEventAsync(WaitingTaskHolder iTask, ModuleCallingContext const& iModuleCallingContext, Principal const& iPrincipal) const override { module_->preActionBeforeRunEventAsync(iTask, iModuleCallingContext, iPrincipal); diff --git a/FWCore/Framework/src/esTaskArenas.cc b/FWCore/Framework/src/esTaskArenas.cc deleted file mode 100644 index 87778fb4099fe..0000000000000 --- a/FWCore/Framework/src/esTaskArenas.cc +++ /dev/null @@ -1,11 +0,0 @@ -#include "esTaskArenas.h" - -tbb::task_arena& edm::mainTaskArena() { - static tbb::task_arena s_arena{tbb::task_arena::attach()}; - return s_arena; -} - -tbb::task_arena& edm::esTaskArena() { - static tbb::task_arena s_arena{tbb::this_task_arena::max_concurrency()}; - return s_arena; -} diff --git a/FWCore/Framework/src/esTaskArenas.h b/FWCore/Framework/src/esTaskArenas.h deleted file mode 100644 index db8cc0073f608..0000000000000 --- a/FWCore/Framework/src/esTaskArenas.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef FWCore_Framework_ESTaskArenas_h -#define FWCore_Framework_ESTaskArenas_h - -// -*- C++ -*- -// -// Package: Framework -// - -#include - -namespace edm { - tbb::task_arena& mainTaskArena(); - tbb::task_arena& esTaskArena(); -} // namespace edm - -#endif /*FWCore_Framework_ESTaskArenas_h*/ diff --git a/FWCore/Framework/src/global/EDAnalyzerBase.cc b/FWCore/Framework/src/global/EDAnalyzerBase.cc index a276c77a7e332..714deba33f840 100644 --- a/FWCore/Framework/src/global/EDAnalyzerBase.cc +++ b/FWCore/Framework/src/global/EDAnalyzerBase.cc @@ -30,6 +30,7 @@ #include "DataFormats/Provenance/interface/ProductRegistry.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/Framework/interface/ConstProductRegistry.h" // @@ -54,8 +55,9 @@ namespace edm { Event e(info, moduleDescription_, mcc); e.setConsumer(this); EventSignalsSentry sentry(act, mcc); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), false}; + info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), parentC, false}; this->analyze(e.streamID(), e, c); return true; } @@ -96,8 +98,12 @@ namespace edm { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); Run const& cnstR = r; - const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}; this->doBeginRun_(cnstR, c); this->doBeginRunSummary_(cnstR, c); } @@ -106,8 +112,9 @@ namespace edm { Run r(info, moduleDescription_, mcc, true); r.setConsumer(this); Run const& cnstR = r; + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->doEndRunSummary_(r, c); this->doEndRun_(cnstR, c); } @@ -116,9 +123,11 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; this->doBeginLuminosityBlock_(cnstLb, c); this->doBeginLuminosityBlockSummary_(cnstLb, c); @@ -128,9 +137,11 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->doEndLuminosityBlockSummary_(cnstLb, c); this->doEndLuminosityBlock_(cnstLb, c); @@ -141,15 +152,20 @@ namespace edm { void EDAnalyzerBase::doStreamBeginRun(StreamID id, RunTransitionInfo const& info, ModuleCallingContext const* mcc) { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); - const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}; this->doStreamBeginRun_(id, r, c); } void EDAnalyzerBase::doStreamEndRun(StreamID id, RunTransitionInfo const& info, ModuleCallingContext const* mcc) { Run r(info, moduleDescription_, mcc, true); r.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->doStreamEndRun_(id, r, c); this->doStreamEndRunSummary_(id, r, c); } @@ -158,9 +174,11 @@ namespace edm { ModuleCallingContext const* mcc) { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; this->doStreamBeginLuminosityBlock_(id, lb, c); } @@ -170,9 +188,11 @@ namespace edm { ModuleCallingContext const* mcc) { LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->doStreamEndLuminosityBlock_(id, lb, c); this->doStreamEndLuminosityBlockSummary_(id, lb, c); diff --git a/FWCore/Framework/src/global/EDFilterBase.cc b/FWCore/Framework/src/global/EDFilterBase.cc index e09022c3b4b55..ac3e457ec1665 100644 --- a/FWCore/Framework/src/global/EDFilterBase.cc +++ b/FWCore/Framework/src/global/EDFilterBase.cc @@ -26,6 +26,7 @@ #include "FWCore/Framework/src/PreallocationConfiguration.h" #include "FWCore/Framework/src/edmodule_mightGet_config.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" @@ -59,8 +60,9 @@ namespace edm { e.setProducer( this, &previousParentages_[streamIndex], hasAcquire() ? &gotBranchIDsFromAcquire_[streamIndex] : nullptr); EventSignalsSentry sentry(act, mcc); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), false}; + info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), parentC, false}; bool returnValue = this->filter(e.streamID(), e, c); commit_(e, &previousParentageIds_[streamIndex]); return returnValue; @@ -75,8 +77,9 @@ namespace edm { const auto streamIndex = e.streamID().value(); e.setProducerForAcquire(this, nullptr, gotBranchIDsFromAcquire_[streamIndex]); EventAcquireSignalsSentry sentry(act, mcc); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), false}; + info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), parentC, false}; this->doAcquire_(e.streamID(), e, c, holder); } @@ -128,8 +131,12 @@ namespace edm { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); Run const& cnstR = r; - const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}; this->doBeginRun_(cnstR, c); this->doBeginRunSummary_(cnstR, c); r.setProducer(this); @@ -142,8 +149,9 @@ namespace edm { r.setConsumer(this); r.setProducer(this); Run const& cnstR = r; + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->doEndRunSummary_(r, c); this->doEndRunProduce_(r, c); this->doEndRun_(cnstR, c); @@ -154,9 +162,11 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; this->doBeginLuminosityBlock_(cnstLb, c); this->doBeginLuminosityBlockSummary_(cnstLb, c); @@ -170,9 +180,11 @@ namespace edm { lb.setConsumer(this); lb.setProducer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->doEndLuminosityBlockSummary_(cnstLb, c); this->doEndLuminosityBlockProduce_(lb, c); @@ -185,15 +197,20 @@ namespace edm { void EDFilterBase::doStreamBeginRun(StreamID id, RunTransitionInfo const& info, ModuleCallingContext const* mcc) { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); - const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}; this->doStreamBeginRun_(id, r, c); } void EDFilterBase::doStreamEndRun(StreamID id, RunTransitionInfo const& info, ModuleCallingContext const* mcc) { Run r(info, moduleDescription_, mcc, true); r.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->doStreamEndRun_(id, r, c); this->doStreamEndRunSummary_(id, r, c); } @@ -202,9 +219,11 @@ namespace edm { ModuleCallingContext const* mcc) { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; this->doStreamBeginLuminosityBlock_(id, lb, c); } @@ -214,9 +233,11 @@ namespace edm { ModuleCallingContext const* mcc) { LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->doStreamEndLuminosityBlock_(id, lb, c); this->doStreamEndLuminosityBlockSummary_(id, lb, c); diff --git a/FWCore/Framework/src/global/EDProducerBase.cc b/FWCore/Framework/src/global/EDProducerBase.cc index b48abb177cf18..6b5ef9219aec4 100644 --- a/FWCore/Framework/src/global/EDProducerBase.cc +++ b/FWCore/Framework/src/global/EDProducerBase.cc @@ -26,6 +26,7 @@ #include "FWCore/Framework/src/PreallocationConfiguration.h" #include "FWCore/Framework/src/edmodule_mightGet_config.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" @@ -63,10 +64,12 @@ namespace edm { e.setProducer( this, &previousParentages_[streamIndex], hasAcquire() ? &gotBranchIDsFromAcquire_[streamIndex] : nullptr); EventSignalsSentry sentry(act, mcc); + ESParentContext parentC(mcc); this->produce( e.streamID(), e, - EventSetup{info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), false}); + EventSetup{ + info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), parentC, false}); commit_(e, &previousParentageIds_[streamIndex]); return true; } @@ -80,8 +83,9 @@ namespace edm { const auto streamIndex = e.streamID().value(); e.setProducerForAcquire(this, nullptr, gotBranchIDsFromAcquire_[streamIndex]); EventAcquireSignalsSentry sentry(act, mcc); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), false}; + info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), parentC, false}; this->doAcquire_(e.streamID(), e, c, holder); } @@ -133,8 +137,12 @@ namespace edm { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); Run const& cnstR = r; - const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}; this->doBeginRun_(cnstR, c); this->doBeginRunSummary_(cnstR, c); r.setProducer(this); @@ -147,8 +155,9 @@ namespace edm { r.setConsumer(this); r.setProducer(this); Run const& cnstR = r; + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->doEndRunSummary_(r, c); this->doEndRunProduce_(r, c); this->doEndRun_(cnstR, c); @@ -159,9 +168,11 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; this->doBeginLuminosityBlock_(cnstLb, c); this->doBeginLuminosityBlockSummary_(cnstLb, c); @@ -175,9 +186,11 @@ namespace edm { lb.setConsumer(this); lb.setProducer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->doEndLuminosityBlockSummary_(cnstLb, c); this->doEndLuminosityBlockProduce_(lb, c); @@ -190,17 +203,21 @@ namespace edm { void EDProducerBase::doStreamBeginRun(StreamID id, RunTransitionInfo const& info, ModuleCallingContext const* mcc) { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); - this->doStreamBeginRun_( - id, - r, - EventSetup{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}); + ESParentContext parentC(mcc); + this->doStreamBeginRun_(id, + r, + EventSetup{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}); } void EDProducerBase::doStreamEndRun(StreamID id, RunTransitionInfo const& info, ModuleCallingContext const* mcc) { Run r(info, moduleDescription_, mcc, true); r.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->doStreamEndRun_(id, r, c); this->doStreamEndRunSummary_(id, r, c); } @@ -209,11 +226,14 @@ namespace edm { ModuleCallingContext const* mcc) { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); + ESParentContext parentC(mcc); + this->doStreamBeginLuminosityBlock_(id, lb, EventSetup{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}); } @@ -222,9 +242,11 @@ namespace edm { ModuleCallingContext const* mcc) { LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->doStreamEndLuminosityBlock_(id, lb, c); this->doStreamEndLuminosityBlockSummary_(id, lb, c); diff --git a/FWCore/Framework/src/globalTransitionAsync.h b/FWCore/Framework/src/globalTransitionAsync.h index 063478654ef69..e9b6ec9f56fc2 100644 --- a/FWCore/Framework/src/globalTransitionAsync.h +++ b/FWCore/Framework/src/globalTransitionAsync.h @@ -82,25 +82,23 @@ namespace edm { // When we are done processing the global for this process, // we need to run the global for all SubProcesses auto subs = - make_waiting_task(tbb::task::allocate_root(), - [&iSubProcesses, iWait, info = transitionInfo](std::exception_ptr const* iPtr) mutable { - if (iPtr) { - auto excpt = *iPtr; - auto delayError = make_waiting_task( - tbb::task::allocate_root(), - [iWait, excpt](std::exception_ptr const*) mutable { iWait.doneWaiting(excpt); }); - WaitingTaskHolder h(delayError); - for (auto& subProcess : iSubProcesses) { - subProcessDoGlobalBeginTransitionAsync(h, subProcess, info); - } - } else { - for (auto& subProcess : iSubProcesses) { - subProcessDoGlobalBeginTransitionAsync(iWait, subProcess, info); - } - } - }); - - WaitingTaskHolder h(subs); + make_waiting_task([&iSubProcesses, iWait, info = transitionInfo](std::exception_ptr const* iPtr) mutable { + if (iPtr) { + auto excpt = *iPtr; + auto delayError = + make_waiting_task([iWait, excpt](std::exception_ptr const*) mutable { iWait.doneWaiting(excpt); }); + WaitingTaskHolder h(*iWait.group(), delayError); + for (auto& subProcess : iSubProcesses) { + subProcessDoGlobalBeginTransitionAsync(h, subProcess, info); + } + } else { + for (auto& subProcess : iSubProcesses) { + subProcessDoGlobalBeginTransitionAsync(iWait, subProcess, info); + } + } + }); + + WaitingTaskHolder h(*iWait.group(), subs); iSchedule.processOneGlobalAsync(std::move(h), transitionInfo, token); } @@ -113,27 +111,24 @@ namespace edm { bool cleaningUpAfterException) { // When we are done processing the global for this process, // we need to run the global for all SubProcesses - auto subs = - make_waiting_task(tbb::task::allocate_root(), - [&iSubProcesses, iWait, info = transitionInfo, cleaningUpAfterException]( - std::exception_ptr const* iPtr) mutable { - if (iPtr) { - auto excpt = *iPtr; - auto delayError = make_waiting_task( - tbb::task::allocate_root(), - [iWait, excpt](std::exception_ptr const*) mutable { iWait.doneWaiting(excpt); }); - WaitingTaskHolder h(delayError); - for (auto& subProcess : iSubProcesses) { - subProcessDoGlobalEndTransitionAsync(h, subProcess, info, cleaningUpAfterException); - } - } else { - for (auto& subProcess : iSubProcesses) { - subProcessDoGlobalEndTransitionAsync(iWait, subProcess, info, cleaningUpAfterException); - } - } - }); - - WaitingTaskHolder h(subs); + auto subs = make_waiting_task([&iSubProcesses, iWait, info = transitionInfo, cleaningUpAfterException]( + std::exception_ptr const* iPtr) mutable { + if (iPtr) { + auto excpt = *iPtr; + auto delayError = + make_waiting_task([iWait, excpt](std::exception_ptr const*) mutable { iWait.doneWaiting(excpt); }); + WaitingTaskHolder h(*iWait.group(), delayError); + for (auto& subProcess : iSubProcesses) { + subProcessDoGlobalEndTransitionAsync(h, subProcess, info, cleaningUpAfterException); + } + } else { + for (auto& subProcess : iSubProcesses) { + subProcessDoGlobalEndTransitionAsync(iWait, subProcess, info, cleaningUpAfterException); + } + } + }); + + WaitingTaskHolder h(*iWait.group(), subs); iSchedule.processOneGlobalAsync(std::move(h), transitionInfo, token, cleaningUpAfterException); } diff --git a/FWCore/Framework/src/limited/EDAnalyzerBase.cc b/FWCore/Framework/src/limited/EDAnalyzerBase.cc index 9c7e10d232ffb..3a5f52c39abe6 100644 --- a/FWCore/Framework/src/limited/EDAnalyzerBase.cc +++ b/FWCore/Framework/src/limited/EDAnalyzerBase.cc @@ -30,6 +30,7 @@ #include "DataFormats/Provenance/interface/ProductRegistry.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/Framework/interface/ConstProductRegistry.h" // @@ -55,8 +56,9 @@ namespace edm { Event e(info, moduleDescription_, mcc); e.setConsumer(this); EventSignalsSentry sentry(act, mcc); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), false}; + info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), parentC, false}; this->analyze(e.streamID(), e, c); return true; } @@ -97,8 +99,12 @@ namespace edm { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); Run const& cnstR = r; - const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}; this->doBeginRun_(cnstR, c); this->doBeginRunSummary_(cnstR, c); } @@ -107,8 +113,9 @@ namespace edm { Run r(info, moduleDescription_, mcc, true); r.setConsumer(this); Run const& cnstR = r; + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->doEndRunSummary_(r, c); this->doEndRun_(cnstR, c); } @@ -117,9 +124,11 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; this->doBeginLuminosityBlock_(cnstLb, c); this->doBeginLuminosityBlockSummary_(cnstLb, c); @@ -129,9 +138,11 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->doEndLuminosityBlockSummary_(cnstLb, c); this->doEndLuminosityBlock_(cnstLb, c); @@ -142,15 +153,20 @@ namespace edm { void EDAnalyzerBase::doStreamBeginRun(StreamID id, RunTransitionInfo const& info, ModuleCallingContext const* mcc) { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); - const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}; this->doStreamBeginRun_(id, r, c); } void EDAnalyzerBase::doStreamEndRun(StreamID id, RunTransitionInfo const& info, ModuleCallingContext const* mcc) { Run r(info, moduleDescription_, mcc, true); r.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->doStreamEndRun_(id, r, c); this->doStreamEndRunSummary_(id, r, c); } @@ -159,9 +175,11 @@ namespace edm { ModuleCallingContext const* mcc) { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; this->doStreamBeginLuminosityBlock_(id, lb, c); } @@ -171,9 +189,11 @@ namespace edm { ModuleCallingContext const* mcc) { LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->doStreamEndLuminosityBlock_(id, lb, c); this->doStreamEndLuminosityBlockSummary_(id, lb, c); diff --git a/FWCore/Framework/src/limited/EDFilterBase.cc b/FWCore/Framework/src/limited/EDFilterBase.cc index f40fef88bd47f..436b5eaf512af 100644 --- a/FWCore/Framework/src/limited/EDFilterBase.cc +++ b/FWCore/Framework/src/limited/EDFilterBase.cc @@ -25,6 +25,7 @@ #include "FWCore/Framework/src/PreallocationConfiguration.h" #include "FWCore/Framework/src/edmodule_mightGet_config.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" @@ -57,8 +58,9 @@ namespace edm { e.setConsumer(this); const auto streamIndex = e.streamID().value(); e.setProducer(this, &previousParentages_[streamIndex]); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), false}; + info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), parentC, false}; EventSignalsSentry sentry(act, mcc); bool returnValue = this->filter(e.streamID(), e, c); commit_(e, &previousParentageIds_[streamIndex]); @@ -110,8 +112,12 @@ namespace edm { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); Run const& cnstR = r; - const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}; this->doBeginRun_(cnstR, c); this->doBeginRunSummary_(cnstR, c); r.setProducer(this); @@ -124,8 +130,9 @@ namespace edm { r.setConsumer(this); r.setProducer(this); Run const& cnstR = r; + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->doEndRunSummary_(r, c); this->doEndRunProduce_(r, c); this->doEndRun_(cnstR, c); @@ -136,9 +143,11 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; this->doBeginLuminosityBlock_(cnstLb, c); this->doBeginLuminosityBlockSummary_(cnstLb, c); @@ -152,9 +161,11 @@ namespace edm { lb.setConsumer(this); lb.setProducer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->doEndLuminosityBlockSummary_(cnstLb, c); this->doEndLuminosityBlockProduce_(lb, c); @@ -167,15 +178,20 @@ namespace edm { void EDFilterBase::doStreamBeginRun(StreamID id, RunTransitionInfo const& info, ModuleCallingContext const* mcc) { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); - const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}; this->doStreamBeginRun_(id, r, c); } void EDFilterBase::doStreamEndRun(StreamID id, RunTransitionInfo const& info, ModuleCallingContext const* mcc) { Run r(info, moduleDescription_, mcc, true); r.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->doStreamEndRun_(id, r, c); this->doStreamEndRunSummary_(id, r, c); } @@ -183,9 +199,11 @@ namespace edm { LumiTransitionInfo const& info, ModuleCallingContext const* mcc) { LuminosityBlock lb(info, moduleDescription_, mcc, false); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; lb.setConsumer(this); this->doStreamBeginLuminosityBlock_(id, lb, c); @@ -196,9 +214,11 @@ namespace edm { ModuleCallingContext const* mcc) { LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->doStreamEndLuminosityBlock_(id, lb, c); this->doStreamEndLuminosityBlockSummary_(id, lb, c); diff --git a/FWCore/Framework/src/limited/EDProducerBase.cc b/FWCore/Framework/src/limited/EDProducerBase.cc index edd1fb079f9ea..022457ff9ea2f 100644 --- a/FWCore/Framework/src/limited/EDProducerBase.cc +++ b/FWCore/Framework/src/limited/EDProducerBase.cc @@ -25,6 +25,7 @@ #include "FWCore/Framework/src/PreallocationConfiguration.h" #include "FWCore/Framework/src/edmodule_mightGet_config.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" @@ -58,8 +59,9 @@ namespace edm { const auto streamIndex = e.streamID().value(); e.setProducer(this, &previousParentages_[streamIndex]); EventSignalsSentry sentry(act, mcc); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), false}; + info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), parentC, false}; this->produce(e.streamID(), e, c); commit_(e, &previousParentageIds_[streamIndex]); return true; @@ -110,8 +112,12 @@ namespace edm { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); Run const& cnstR = r; - const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}; this->doBeginRun_(cnstR, c); this->doBeginRunSummary_(cnstR, c); r.setProducer(this); @@ -124,8 +130,9 @@ namespace edm { r.setConsumer(this); r.setProducer(this); Run const& cnstR = r; + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->doEndRunSummary_(r, c); this->doEndRunProduce_(r, c); this->doEndRun_(cnstR, c); @@ -136,9 +143,11 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; this->doBeginLuminosityBlock_(cnstLb, c); this->doBeginLuminosityBlockSummary_(cnstLb, c); @@ -152,9 +161,11 @@ namespace edm { lb.setConsumer(this); lb.setProducer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->doEndLuminosityBlockSummary_(cnstLb, c); this->doEndLuminosityBlockProduce_(lb, c); @@ -167,15 +178,20 @@ namespace edm { void EDProducerBase::doStreamBeginRun(StreamID id, RunTransitionInfo const& info, ModuleCallingContext const* mcc) { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); - const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}; this->doStreamBeginRun_(id, r, c); } void EDProducerBase::doStreamEndRun(StreamID id, RunTransitionInfo const& info, ModuleCallingContext const* mcc) { Run r(info, moduleDescription_, mcc, true); r.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->doStreamEndRun_(id, r, c); this->doStreamEndRunSummary_(id, r, c); } @@ -184,9 +200,11 @@ namespace edm { ModuleCallingContext const* mcc) { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; this->doStreamBeginLuminosityBlock_(id, lb, c); } @@ -196,9 +214,11 @@ namespace edm { ModuleCallingContext const* mcc) { LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(this); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->doStreamEndLuminosityBlock_(id, lb, c); this->doStreamEndLuminosityBlockSummary_(id, lb, c); diff --git a/FWCore/Framework/src/one/EDAnalyzerBase.cc b/FWCore/Framework/src/one/EDAnalyzerBase.cc index 998a559c08ba9..e7fea6fd340b2 100644 --- a/FWCore/Framework/src/one/EDAnalyzerBase.cc +++ b/FWCore/Framework/src/one/EDAnalyzerBase.cc @@ -28,6 +28,7 @@ #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/Framework/interface/ConstProductRegistry.h" // @@ -57,8 +58,9 @@ namespace edm { e.setConsumer(this); e.setSharedResourcesAcquirer(&resourcesAcquirer_); EventSignalsSentry sentry(act, mcc); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), false}; + info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), parentC, false}; this->analyze(e, c); return true; } @@ -109,8 +111,12 @@ namespace edm { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); Run const& cnstR = r; - const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}; this->doBeginRun_(cnstR, c); } @@ -118,8 +124,9 @@ namespace edm { Run r(info, moduleDescription_, mcc, true); r.setConsumer(this); Run const& cnstR = r; + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->doEndRun_(cnstR, c); } @@ -127,9 +134,11 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; this->doBeginLuminosityBlock_(cnstLb, c); } @@ -138,9 +147,11 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->doEndLuminosityBlock_(cnstLb, c); } diff --git a/FWCore/Framework/src/one/EDFilterBase.cc b/FWCore/Framework/src/one/EDFilterBase.cc index dcc899144bdad..176f2ec7e87aa 100644 --- a/FWCore/Framework/src/one/EDFilterBase.cc +++ b/FWCore/Framework/src/one/EDFilterBase.cc @@ -23,6 +23,7 @@ #include "FWCore/Framework/src/PreallocationConfiguration.h" #include "FWCore/Framework/src/EventSignalsSentry.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" @@ -54,8 +55,9 @@ namespace edm { bool returnValue = true; e.setSharedResourcesAcquirer(&resourcesAcquirer_); EventSignalsSentry sentry(act, mcc); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), false}; + info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), parentC, false}; returnValue = this->filter(e, c); commit_(e, &previousParentageId_); return returnValue; @@ -115,8 +117,12 @@ namespace edm { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); Run const& cnstR = r; - const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}; this->doBeginRun_(cnstR, c); r.setProducer(this); this->doBeginRunProduce_(r, c); @@ -127,8 +133,9 @@ namespace edm { Run r(info, moduleDescription_, mcc, true); r.setConsumer(this); Run const& cnstR = r; + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->doEndRun_(cnstR, c); r.setProducer(this); this->doEndRunProduce_(r, c); @@ -139,9 +146,11 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; this->doBeginLuminosityBlock_(cnstLb, c); lb.setProducer(this); @@ -153,9 +162,11 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->doEndLuminosityBlock_(cnstLb, c); lb.setProducer(this); diff --git a/FWCore/Framework/src/one/EDProducerBase.cc b/FWCore/Framework/src/one/EDProducerBase.cc index 133e40eaa64a7..ef1ff4b47d5e3 100644 --- a/FWCore/Framework/src/one/EDProducerBase.cc +++ b/FWCore/Framework/src/one/EDProducerBase.cc @@ -23,6 +23,7 @@ #include "FWCore/Framework/src/PreallocationConfiguration.h" #include "FWCore/Framework/src/EventSignalsSentry.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" @@ -53,8 +54,9 @@ namespace edm { e.setProducer(this, &previousParentage_); e.setSharedResourcesAcquirer(&resourcesAcquirer_); EventSignalsSentry sentry(act, mcc); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), false}; + info, static_cast(Transition::Event), esGetTokenIndices(Transition::Event), parentC, false}; this->produce(e, c); commit_(e, &previousParentageId_); return true; @@ -115,8 +117,12 @@ namespace edm { Run r(info, moduleDescription_, mcc, false); r.setConsumer(this); Run const& cnstR = r; - const EventSetup c{ - info, static_cast(Transition::BeginRun), esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + esGetTokenIndices(Transition::BeginRun), + parentC, + false}; this->doBeginRun_(cnstR, c); r.setProducer(this); this->doBeginRunProduce_(r, c); @@ -128,8 +134,9 @@ namespace edm { r.setConsumer(this); Run const& cnstR = r; r.setProducer(this); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), esGetTokenIndices(Transition::EndRun), parentC, false}; this->doEndRunProduce_(r, c); this->doEndRun_(cnstR, c); commit_(r); @@ -139,9 +146,11 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, false); lb.setConsumer(this); LuminosityBlock const& cnstLb = lb; + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; this->doBeginLuminosityBlock_(cnstLb, c); lb.setProducer(this); @@ -153,9 +162,11 @@ namespace edm { LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(this); lb.setProducer(this); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; this->doEndLuminosityBlockProduce_(lb, c); LuminosityBlock const& cnstLb = lb; diff --git a/FWCore/Framework/src/stream/EDAnalyzerAdaptorBase.cc b/FWCore/Framework/src/stream/EDAnalyzerAdaptorBase.cc index b88733bc0bbc5..9943544ef6bdd 100644 --- a/FWCore/Framework/src/stream/EDAnalyzerAdaptorBase.cc +++ b/FWCore/Framework/src/stream/EDAnalyzerAdaptorBase.cc @@ -23,6 +23,7 @@ #include "FWCore/Framework/interface/EventPrincipal.h" #include "FWCore/Framework/interface/LuminosityBlockPrincipal.h" #include "FWCore/Framework/interface/RunPrincipal.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/Framework/src/PreallocationConfiguration.h" #include "FWCore/Framework/src/EventSignalsSentry.h" @@ -122,12 +123,14 @@ void EDAnalyzerAdaptorBase::updateLookup(eventsetup::ESRecordsToProxyIndices con const edm::EDConsumerBase* EDAnalyzerAdaptorBase::consumer() const { return m_streamModules[0]; } void EDAnalyzerAdaptorBase::modulesWhoseProductsAreConsumed( - std::vector& modules, + std::array*, NumBranchTypes>& modules, + std::vector& modulesInPreviousProcesses, ProductRegistry const& preg, std::map const& labelsToDesc, std::string const& processName) const { assert(not m_streamModules.empty()); - return m_streamModules[0]->modulesWhoseProductsAreConsumed(modules, preg, labelsToDesc, processName); + return m_streamModules[0]->modulesWhoseProductsAreConsumed( + modules, modulesInPreviousProcesses, preg, labelsToDesc, processName); } void EDAnalyzerAdaptorBase::convertCurrentProcessAlias(std::string const& processName) { @@ -149,8 +152,9 @@ bool EDAnalyzerAdaptorBase::doEvent(EventTransitionInfo const& info, auto mod = m_streamModules[ep.streamID()]; Event e(ep, moduleDescription_, mcc); e.setConsumer(mod); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::Event), mod->esGetTokenIndices(Transition::Event), false}; + info, static_cast(Transition::Event), mod->esGetTokenIndices(Transition::Event), parentC, false}; EventSignalsSentry sentry(act, mcc); mod->analyze(e, c); return true; @@ -167,8 +171,12 @@ void EDAnalyzerAdaptorBase::doStreamBeginRun(StreamID id, setupRun(mod, rp.index()); Run r(rp, moduleDescription_, mcc, false); - const EventSetup c{ - info, static_cast(Transition::BeginRun), mod->esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + mod->esGetTokenIndices(Transition::BeginRun), + parentC, + false}; r.setConsumer(mod); mod->beginRun(r, c); } @@ -179,8 +187,9 @@ void EDAnalyzerAdaptorBase::doStreamEndRun(StreamID id, auto mod = m_streamModules[id]; Run r(info, moduleDescription_, mcc, true); r.setConsumer(mod); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::EndRun), mod->esGetTokenIndices(Transition::EndRun), false}; + info, static_cast(Transition::EndRun), mod->esGetTokenIndices(Transition::EndRun), parentC, false}; mod->endRun(r, c); streamEndRunSummary(mod, r, c); } @@ -194,9 +203,11 @@ void EDAnalyzerAdaptorBase::doStreamBeginLuminosityBlock(StreamID id, LuminosityBlock lb(lbp, moduleDescription_, mcc, false); lb.setConsumer(mod); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), mod->esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; mod->beginLuminosityBlock(lb, c); } @@ -206,9 +217,11 @@ void EDAnalyzerAdaptorBase::doStreamEndLuminosityBlock(StreamID id, auto mod = m_streamModules[id]; LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(mod); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), mod->esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; mod->endLuminosityBlock(lb, c); streamEndLuminosityBlockSummary(mod, lb, c); diff --git a/FWCore/Framework/src/stream/EDFilterAdaptorBase.cc b/FWCore/Framework/src/stream/EDFilterAdaptorBase.cc index e329d9cd822bd..7cb496bd7f209 100644 --- a/FWCore/Framework/src/stream/EDFilterAdaptorBase.cc +++ b/FWCore/Framework/src/stream/EDFilterAdaptorBase.cc @@ -26,6 +26,7 @@ #include "FWCore/Framework/src/EventSignalsSentry.h" #include "FWCore/Framework/src/stream/ProducingModuleAdaptorBase.cc" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" using namespace edm::stream; namespace edm { @@ -54,8 +55,9 @@ namespace edm { e.setConsumer(mod); e.setProducer(mod, &mod->previousParentage_, &mod->gotBranchIDsFromAcquire_); EventSignalsSentry sentry(act, mcc); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::Event), mod->esGetTokenIndices(Transition::Event), false}; + info, static_cast(Transition::Event), mod->esGetTokenIndices(Transition::Event), parentC, false}; bool result = mod->filter(e, c); commit(e, &mod->previousParentageId_); return result; @@ -72,8 +74,9 @@ namespace edm { e.setConsumer(mod); e.setProducerForAcquire(mod, nullptr, mod->gotBranchIDsFromAcquire_); EventAcquireSignalsSentry sentry(act, mcc); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::Event), mod->esGetTokenIndices(Transition::Event), false}; + info, static_cast(Transition::Event), mod->esGetTokenIndices(Transition::Event), parentC, false}; mod->doAcquire_(e, c, holder); } diff --git a/FWCore/Framework/src/stream/EDProducerAdaptorBase.cc b/FWCore/Framework/src/stream/EDProducerAdaptorBase.cc index 24cd4991d36da..b48358274bffa 100644 --- a/FWCore/Framework/src/stream/EDProducerAdaptorBase.cc +++ b/FWCore/Framework/src/stream/EDProducerAdaptorBase.cc @@ -26,6 +26,7 @@ #include "FWCore/Framework/src/EventSignalsSentry.h" #include "FWCore/Framework/src/stream/ProducingModuleAdaptorBase.cc" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" using namespace edm::stream; namespace edm { @@ -54,8 +55,9 @@ namespace edm { e.setConsumer(mod); e.setProducer(mod, &mod->previousParentage_, &mod->gotBranchIDsFromAcquire_); EventSignalsSentry sentry(act, mcc); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::Event), mod->esGetTokenIndices(Transition::Event), false}; + info, static_cast(Transition::Event), mod->esGetTokenIndices(Transition::Event), parentC, false}; mod->produce(e, c); commit(e, &mod->previousParentageId_); return true; @@ -72,8 +74,9 @@ namespace edm { e.setConsumer(mod); e.setProducerForAcquire(mod, nullptr, mod->gotBranchIDsFromAcquire_); EventAcquireSignalsSentry sentry(act, mcc); + ESParentContext parentC(mcc); const EventSetup c{ - info, static_cast(Transition::Event), mod->esGetTokenIndices(Transition::Event), false}; + info, static_cast(Transition::Event), mod->esGetTokenIndices(Transition::Event), parentC, false}; mod->doAcquire_(e, c, holder); } diff --git a/FWCore/Framework/src/stream/ProducingModuleAdaptorBase.cc b/FWCore/Framework/src/stream/ProducingModuleAdaptorBase.cc index accfb10c45514..5ed6c8bc0c5b4 100644 --- a/FWCore/Framework/src/stream/ProducingModuleAdaptorBase.cc +++ b/FWCore/Framework/src/stream/ProducingModuleAdaptorBase.cc @@ -22,6 +22,7 @@ #include "FWCore/Framework/interface/RunPrincipal.h" #include "FWCore/Framework/src/PreallocationConfiguration.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" // // constants, enums and typedefs @@ -118,12 +119,14 @@ namespace edm { template void ProducingModuleAdaptorBase::modulesWhoseProductsAreConsumed( - std::vector& modules, + std::array*, NumBranchTypes>& modules, + std::vector& modulesInPreviousProcesses, ProductRegistry const& preg, std::map const& labelsToDesc, std::string const& processName) const { assert(not m_streamModules.empty()); - return m_streamModules[0]->modulesWhoseProductsAreConsumed(modules, preg, labelsToDesc, processName); + return m_streamModules[0]->modulesWhoseProductsAreConsumed( + modules, modulesInPreviousProcesses, preg, labelsToDesc, processName); } template @@ -188,8 +191,12 @@ namespace edm { Run r(rp, moduleDescription_, mcc, false); r.setConsumer(mod); - const EventSetup c{ - info, static_cast(Transition::BeginRun), mod->esGetTokenIndices(Transition::BeginRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::BeginRun), + mod->esGetTokenIndices(Transition::BeginRun), + parentC, + false}; mod->beginRun(r, c); } @@ -200,8 +207,12 @@ namespace edm { auto mod = m_streamModules[id]; Run r(info, moduleDescription_, mcc, true); r.setConsumer(mod); - const EventSetup c{ - info, static_cast(Transition::EndRun), mod->esGetTokenIndices(Transition::EndRun), false}; + ESParentContext parentC(mcc); + const EventSetup c{info, + static_cast(Transition::EndRun), + mod->esGetTokenIndices(Transition::EndRun), + parentC, + false}; mod->endRun(r, c); streamEndRunSummary(mod, r, c); } @@ -216,9 +227,11 @@ namespace edm { LuminosityBlock lb(lbp, moduleDescription_, mcc, false); lb.setConsumer(mod); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::BeginLuminosityBlock), mod->esGetTokenIndices(Transition::BeginLuminosityBlock), + parentC, false}; mod->beginLuminosityBlock(lb, c); } @@ -230,9 +243,11 @@ namespace edm { auto mod = m_streamModules[id]; LuminosityBlock lb(info, moduleDescription_, mcc, true); lb.setConsumer(mod); + ESParentContext parentC(mcc); const EventSetup c{info, static_cast(Transition::EndLuminosityBlock), mod->esGetTokenIndices(Transition::EndLuminosityBlock), + parentC, false}; mod->endLuminosityBlock(lb, c); streamEndLuminosityBlockSummary(mod, lb, c); diff --git a/FWCore/Framework/src/streamTransitionAsync.h b/FWCore/Framework/src/streamTransitionAsync.h index 620fab3af306b..3a171b2392c0b 100644 --- a/FWCore/Framework/src/streamTransitionAsync.h +++ b/FWCore/Framework/src/streamTransitionAsync.h @@ -70,14 +70,12 @@ namespace edm { // we need to run the stream for all SubProcesses //NOTE: The subprocesses set their own service tokens auto subs = make_waiting_task( - tbb::task::allocate_root(), [&iSubProcesses, iWait, iStreamIndex, info = transitionInfo](std::exception_ptr const* iPtr) mutable { if (iPtr) { auto excpt = *iPtr; auto delayError = - make_waiting_task(tbb::task::allocate_root(), - [iWait, excpt](std::exception_ptr const*) mutable { iWait.doneWaiting(excpt); }); - WaitingTaskHolder h(delayError); + make_waiting_task([iWait, excpt](std::exception_ptr const*) mutable { iWait.doneWaiting(excpt); }); + WaitingTaskHolder h(*iWait.group(), delayError); for (auto& subProcess : iSubProcesses) { subProcessDoStreamBeginTransitionAsync(h, subProcess, iStreamIndex, info); }; @@ -88,20 +86,19 @@ namespace edm { } }); - WaitingTaskHolder h(subs); + WaitingTaskHolder h(*iWait.group(), subs); iSchedule.processOneStreamAsync(std::move(h), iStreamIndex, transitionInfo, token); } template - void beginStreamsTransitionAsync(WaitingTask* iWait, + void beginStreamsTransitionAsync(WaitingTaskHolder iWait, Schedule& iSchedule, unsigned int iNStreams, typename Traits::TransitionInfoType& transitionInfo, ServiceToken const& token, std::vector& iSubProcesses) { - WaitingTaskHolder holdUntilAllStreamsCalled(iWait); for (unsigned int i = 0; i < iNStreams; ++i) { - beginStreamTransitionAsync(WaitingTaskHolder(iWait), iSchedule, i, transitionInfo, token, iSubProcesses); + beginStreamTransitionAsync(iWait, iSchedule, i, transitionInfo, token, iSubProcesses); } } @@ -117,16 +114,14 @@ namespace edm { // we need to run the stream for all SubProcesses //NOTE: The subprocesses set their own service tokens - auto subs = make_waiting_task( - tbb::task::allocate_root(), - [&iSubProcesses, iWait, iStreamIndex, info = transitionInfo, cleaningUpAfterException]( - std::exception_ptr const* iPtr) mutable { + auto subs = + make_waiting_task([&iSubProcesses, iWait, iStreamIndex, info = transitionInfo, cleaningUpAfterException]( + std::exception_ptr const* iPtr) mutable { if (iPtr) { auto excpt = *iPtr; auto delayError = - make_waiting_task(tbb::task::allocate_root(), - [iWait, excpt](std::exception_ptr const*) mutable { iWait.doneWaiting(excpt); }); - WaitingTaskHolder h(delayError); + make_waiting_task([iWait, excpt](std::exception_ptr const*) mutable { iWait.doneWaiting(excpt); }); + WaitingTaskHolder h(*iWait.group(), delayError); for (auto& subProcess : iSubProcesses) { subProcessDoStreamEndTransitionAsync(h, subProcess, iStreamIndex, info, cleaningUpAfterException); } @@ -138,7 +133,7 @@ namespace edm { }); iSchedule.processOneStreamAsync( - WaitingTaskHolder(subs), iStreamIndex, transitionInfo, token, cleaningUpAfterException); + WaitingTaskHolder(*iWait.group(), subs), iStreamIndex, transitionInfo, token, cleaningUpAfterException); } template diff --git a/FWCore/Framework/test/BuildFile.xml b/FWCore/Framework/test/BuildFile.xml index a217cad0a9ed9..785e7581cb6b4 100644 --- a/FWCore/Framework/test/BuildFile.xml +++ b/FWCore/Framework/test/BuildFile.xml @@ -180,6 +180,13 @@ + + + + + + + @@ -385,3 +392,4 @@ + diff --git a/FWCore/Framework/test/MockEventProcessor.h b/FWCore/Framework/test/MockEventProcessor.h index a169c6e657ca9..eab28a1576c94 100644 --- a/FWCore/Framework/test/MockEventProcessor.h +++ b/FWCore/Framework/test/MockEventProcessor.h @@ -36,6 +36,7 @@ namespace edm { edm::LuminosityBlockNumber_t nextLuminosityBlockID(); void readFile(); + bool fileBlockValid() { return true; } void closeInputFile(bool cleaningUpAfterException); void openOutputFiles(); void closeOutputFiles(); diff --git a/FWCore/Framework/test/callback_t.cppunit.cc b/FWCore/Framework/test/callback_t.cppunit.cc index 1625dfe729ade..0a84052105711 100644 --- a/FWCore/Framework/test/callback_t.cppunit.cc +++ b/FWCore/Framework/test/callback_t.cppunit.cc @@ -10,7 +10,11 @@ #include "FWCore/Utilities/interface/do_nothing_deleter.h" #include "FWCore/Framework/interface/Callback.h" #include "FWCore/Framework/interface/ESProducts.h" +#include "FWCore/Framework/interface/ComponentDescription.h" #include "FWCore/Concurrency/interface/ThreadsController.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" + +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" #include #include @@ -35,21 +39,18 @@ namespace callbacktest { unsigned int transitionID, void const* getTokenIndices, void const* iEventSetupImpl, + void const* ESParentContext, bool requireTokens) {} + constexpr static bool allowConcurrentIOVs_ = false; }; struct Queue { template - void push(T&& iT) { + void push(tbb::task_group&, T&& iT) { iT(); } }; - struct ComponentDescription { - static constexpr char const* const type_ = ""; - static constexpr char const* const label_ = ""; - }; - struct Base { template std::optional> updateFromMayConsumes(A const&, B const&) const { @@ -59,7 +60,10 @@ namespace callbacktest { static constexpr edm::ESRecordIndex const* getTokenRecordIndices(unsigned int) { return nullptr; } static constexpr size_t numberOfTokenIndices(unsigned int) { return 0; } static constexpr bool hasMayConsumes() { return false; } - static ComponentDescription description() { return ComponentDescription{}; } + static edm::eventsetup::ComponentDescription const& description() { + static const edm::eventsetup::ComponentDescription s_description; + return s_description; + } Queue queue() { return Queue(); } }; @@ -97,13 +101,21 @@ namespace callbacktest { }; } // namespace callbacktest +EVENTSETUP_RECORD_REG(callbacktest::Record); + namespace { template void call(CALLBACK& iCallback) { - auto waitTask = edm::make_empty_waiting_task(); - waitTask->set_ref_count(1); - iCallback.prefetchAsync(waitTask.get(), nullptr, nullptr, edm::ServiceToken{}); - waitTask->wait_for_all(); + edm::ActivityRegistry ar; + edm::eventsetup::EventSetupRecordImpl rec(edm::eventsetup::EventSetupRecordKey::makeKey(), + &ar); + edm::FinalWaitingTask task; + tbb::task_group group; + iCallback.prefetchAsync( + edm::WaitingTaskHolder(group, &task), &rec, nullptr, edm::ServiceToken{}, edm::ESParentContext{}); + do { + group.wait(); + } while (not task.done()); } } // namespace diff --git a/FWCore/Framework/test/dependentrecord_t.cppunit.cc b/FWCore/Framework/test/dependentrecord_t.cppunit.cc index f8204032b0696..8e8ac4d5d78d3 100644 --- a/FWCore/Framework/test/dependentrecord_t.cppunit.cc +++ b/FWCore/Framework/test/dependentrecord_t.cppunit.cc @@ -24,11 +24,12 @@ #include "FWCore/Framework/interface/EDConsumerBase.h" #include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h" #include "FWCore/Framework/interface/EventSetupRecordProvider.h" -#include "FWCore/Framework/src/EventSetupsController.h" +#include "FWCore/Framework/src/SynchronousEventSetupsController.h" #include "FWCore/Framework/interface/NoRecordException.h" #include "FWCore/Framework/test/print_eventsetup_record_dependencies.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/ActivityRegistry.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include "FWCore/Utilities/interface/propagate_const.h" #include "FWCore/Concurrency/interface/ThreadsController.h" @@ -587,7 +588,7 @@ void testdependentrecord::testInvalidIOVFirstEventID() { void testdependentrecord::timeAndRunTest() { edm::ParameterSet pset = createDummyPset(); { - EventSetupsController controller; + SynchronousEventSetupsController controller; EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); std::shared_ptr dummyProv = std::make_shared(); @@ -607,17 +608,18 @@ void testdependentrecord::timeAndRunTest() { provider.add(std::shared_ptr(dummy2Finder)); { + edm::ESParentContext parentC; controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 1), edm::Timestamp(1))); - const edm::EventSetup eventSetup1(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup1(provider.eventSetupImpl(), 0, nullptr, parentC, true); long long id1 = eventSetup1.get().cacheIdentifier(); controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 1), edm::Timestamp(2))); - const edm::EventSetup eventSetup2(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup2(provider.eventSetupImpl(), 0, nullptr, parentC, true); long long id2 = eventSetup2.get().cacheIdentifier(); CPPUNIT_ASSERT(id1 == id2); controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 2), edm::Timestamp(2))); - const edm::EventSetup eventSetup3(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup3(provider.eventSetupImpl(), 0, nullptr, parentC, true); long long id3 = eventSetup3.get().cacheIdentifier(); CPPUNIT_ASSERT(id1 == id3); @@ -625,7 +627,7 @@ void testdependentrecord::timeAndRunTest() { edm::ValidityInterval(edm::IOVSyncValue(edm::Timestamp(6)), edm::IOVSyncValue(edm::Timestamp(10)))); controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 4), edm::Timestamp(7))); - const edm::EventSetup eventSetup4(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup4(provider.eventSetupImpl(), 0, nullptr, parentC, true); long long id4 = eventSetup4.get().cacheIdentifier(); CPPUNIT_ASSERT(id1 != id4); @@ -633,7 +635,7 @@ void testdependentrecord::timeAndRunTest() { edm::ValidityInterval(edm::IOVSyncValue(edm::EventID(1, 1, 6)), edm::IOVSyncValue(edm::EventID(1, 1, 10)))); controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 7), edm::Timestamp(8))); - const edm::EventSetup eventSetup5(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup5(provider.eventSetupImpl(), 0, nullptr, parentC, true); long long id5 = eventSetup5.get().cacheIdentifier(); CPPUNIT_ASSERT(id4 != id5); } @@ -642,7 +644,7 @@ void testdependentrecord::timeAndRunTest() { { //check that going all the way through EventSetup works properly // using two records with open ended IOVs - EventSetupsController controller; + SynchronousEventSetupsController controller; EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); std::shared_ptr dummyProv = std::make_shared(); @@ -661,31 +663,32 @@ void testdependentrecord::timeAndRunTest() { edm::ValidityInterval(edm::IOVSyncValue(edm::Timestamp(1)), edm::IOVSyncValue::invalidIOVSyncValue())); provider.add(std::shared_ptr(dummy2Finder)); { + edm::ESParentContext parentC; controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 1), edm::Timestamp(1))); - const edm::EventSetup eventSetup1(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup1(provider.eventSetupImpl(), 0, nullptr, parentC, true); long long id1 = eventSetup1.get().cacheIdentifier(); controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 1), edm::Timestamp(2))); - const edm::EventSetup eventSetup2(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup2(provider.eventSetupImpl(), 0, nullptr, parentC, true); long long id2 = eventSetup2.get().cacheIdentifier(); CPPUNIT_ASSERT(id1 == id2); controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 2), edm::Timestamp(2))); - const edm::EventSetup eventSetup3(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup3(provider.eventSetupImpl(), 0, nullptr, parentC, true); long long id3 = eventSetup3.get().cacheIdentifier(); CPPUNIT_ASSERT(id1 == id3); dummy2Finder->setInterval( edm::ValidityInterval(edm::IOVSyncValue(edm::Timestamp(6)), edm::IOVSyncValue::invalidIOVSyncValue())); controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 4), edm::Timestamp(7))); - const edm::EventSetup eventSetup4(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup4(provider.eventSetupImpl(), 0, nullptr, parentC, true); long long id4 = eventSetup4.get().cacheIdentifier(); CPPUNIT_ASSERT(id1 != id4); dummyFinder->setInterval( edm::ValidityInterval(edm::IOVSyncValue(edm::EventID(1, 1, 6)), edm::IOVSyncValue::invalidIOVSyncValue())); controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 7), edm::Timestamp(8))); - const edm::EventSetup eventSetup5(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup5(provider.eventSetupImpl(), 0, nullptr, parentC, true); long long id5 = eventSetup5.get().cacheIdentifier(); CPPUNIT_ASSERT(id4 != id5); } @@ -710,7 +713,7 @@ void testdependentrecord::dependentSetproviderTest() { } void testdependentrecord::getTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -724,9 +727,10 @@ void testdependentrecord::getTest() { std::shared_ptr depProv = std::make_shared(); provider.add(depProv); + edm::ESParentContext parentC; { controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 1))); - const edm::EventSetup eventSetup1(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup1(provider.eventSetupImpl(), 0, nullptr, parentC, true); const DepRecord& depRecord = eventSetup1.get(); depRecord.getRecord(); @@ -736,7 +740,7 @@ void testdependentrecord::getTest() { } { controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 4))); - const edm::EventSetup eventSetup2(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup2(provider.eventSetupImpl(), 0, nullptr, parentC, true); CPPUNIT_ASSERT_THROW(eventSetup2.get(), edm::eventsetup::NoRecordException); } } @@ -753,13 +757,15 @@ namespace { for (size_t i = 0; i != proxies.size(); ++i) { auto rec = iImpl.findImpl(recs[i]); if (rec) { - auto waitTask = edm::make_empty_waiting_task(); - waitTask->set_ref_count(2); - rec->prefetchAsync(waitTask.get(), proxies[i], &iImpl, edm::ServiceToken{}); - waitTask->decrement_ref_count(); - waitTask->wait_for_all(); - if (waitTask->exceptionPtr()) { - std::rethrow_exception(*waitTask->exceptionPtr()); + edm::FinalWaitingTask waitTask; + tbb::task_group group; + rec->prefetchAsync( + edm::WaitingTaskHolder(group, &waitTask), proxies[i], &iImpl, edm::ServiceToken{}, edm::ESParentContext{}); + do { + group.wait(); + } while (not waitTask.done()); + if (waitTask.exceptionPtr()) { + std::rethrow_exception(*waitTask.exceptionPtr()); } } } @@ -779,13 +785,15 @@ namespace { for (size_t i = 0; i != proxies.size(); ++i) { auto rec = iImpl.findImpl(recs[i]); if (rec) { - auto waitTask = edm::make_empty_waiting_task(); - waitTask->set_ref_count(2); - rec->prefetchAsync(waitTask.get(), proxies[i], &iImpl, edm::ServiceToken{}); - waitTask->decrement_ref_count(); - waitTask->wait_for_all(); - if (waitTask->exceptionPtr()) { - std::rethrow_exception(*waitTask->exceptionPtr()); + edm::FinalWaitingTask waitTask; + tbb::task_group group; + rec->prefetchAsync( + edm::WaitingTaskHolder(group, &waitTask), proxies[i], &iImpl, edm::ServiceToken{}, edm::ESParentContext{}); + do { + group.wait(); + } while (not waitTask.done()); + if (waitTask.exceptionPtr()) { + std::rethrow_exception(*waitTask.exceptionPtr()); } } } @@ -802,7 +810,7 @@ void testdependentrecord::getDataWithESGetTokenTest() { DummyData kGood{1}; DummyData kBad{0}; - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -836,6 +844,7 @@ void testdependentrecord::getDataWithESGetTokenTest() { provider.add(std::shared_ptr(dummyFinder)); controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 1))); + edm::ESParentContext parentC; { DummyDataConsumer consumer{edm::ESInputTag{"", "blah"}}; consumer.updateLookup(provider.recordsToProxyIndices()); @@ -843,6 +852,7 @@ void testdependentrecord::getDataWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& data = eventSetup.getData(consumer.m_token); CPPUNIT_ASSERT(kGood.value_ == data.value_); @@ -854,6 +864,7 @@ void testdependentrecord::getDataWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& data = eventSetup.getData(consumer.m_token); CPPUNIT_ASSERT(kBad.value_ == data.value_); @@ -865,6 +876,7 @@ void testdependentrecord::getDataWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); auto const& data = depRecord.get(consumer.m_token); @@ -877,6 +889,7 @@ void testdependentrecord::getDataWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -890,6 +903,7 @@ void testdependentrecord::getDataWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -903,6 +917,7 @@ void testdependentrecord::getDataWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -919,6 +934,7 @@ void testdependentrecord::getDataWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -931,6 +947,7 @@ void testdependentrecord::getDataWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -948,7 +965,7 @@ void testdependentrecord::getHandleWithESGetTokenTest() { DummyData kGood{1}; DummyData kBad{0}; - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -982,6 +999,7 @@ void testdependentrecord::getHandleWithESGetTokenTest() { controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 1))); + edm::ESParentContext parentC; { DummyDataConsumer consumer{edm::ESInputTag{"", "blah"}}; consumer.updateLookup(provider.recordsToProxyIndices()); @@ -989,6 +1007,7 @@ void testdependentrecord::getHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; edm::ESHandle data = eventSetup.getHandle(consumer.m_token); CPPUNIT_ASSERT(kGood.value_ == data->value_); @@ -1002,6 +1021,7 @@ void testdependentrecord::getHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; edm::ESHandle data = eventSetup.getHandle(consumer.m_token); CPPUNIT_ASSERT(kBad.value_ == data->value_); @@ -1015,6 +1035,7 @@ void testdependentrecord::getHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -1030,6 +1051,7 @@ void testdependentrecord::getHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -1045,6 +1067,7 @@ void testdependentrecord::getHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -1060,6 +1083,7 @@ void testdependentrecord::getHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -1080,6 +1104,7 @@ void testdependentrecord::getHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -1093,6 +1118,7 @@ void testdependentrecord::getHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -1111,7 +1137,7 @@ void testdependentrecord::getTransientHandleWithESGetTokenTest() { DummyData kGood{1}; DummyData kBad{0}; - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -1144,6 +1170,7 @@ void testdependentrecord::getTransientHandleWithESGetTokenTest() { provider.add(std::shared_ptr(dummyFinder)); controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 1))); + edm::ESParentContext parentC; { DummyDataConsumer consumer{edm::ESInputTag{"", "blah"}}; consumer.updateLookup(provider.recordsToProxyIndices()); @@ -1151,6 +1178,7 @@ void testdependentrecord::getTransientHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; edm::ESTransientHandle data = eventSetup.getTransientHandle(consumer.m_token); CPPUNIT_ASSERT(kGood.value_ == data->value_); @@ -1164,6 +1192,7 @@ void testdependentrecord::getTransientHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; edm::ESTransientHandle data = eventSetup.getTransientHandle(consumer.m_token); CPPUNIT_ASSERT(kBad.value_ == data->value_); @@ -1177,6 +1206,7 @@ void testdependentrecord::getTransientHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -1192,6 +1222,7 @@ void testdependentrecord::getTransientHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -1207,6 +1238,7 @@ void testdependentrecord::getTransientHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -1222,6 +1254,7 @@ void testdependentrecord::getTransientHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -1242,6 +1275,7 @@ void testdependentrecord::getTransientHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -1256,6 +1290,7 @@ void testdependentrecord::getTransientHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + parentC, true}; auto const& depRecord = eventSetup.get(); @@ -1270,7 +1305,7 @@ void testdependentrecord::getTransientHandleWithESGetTokenTest() { } void testdependentrecord::oneOfTwoRecordTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -1285,8 +1320,9 @@ void testdependentrecord::oneOfTwoRecordTest() { std::shared_ptr depProv = std::make_shared(); provider.add(depProv); { + edm::ESParentContext parentC; controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 1))); - const edm::EventSetup eventSetup1(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup1(provider.eventSetupImpl(), 0, nullptr, parentC, true); const DepOn2Record& depRecord = eventSetup1.get(); depRecord.getRecord(); @@ -1304,7 +1340,7 @@ void testdependentrecord::oneOfTwoRecordTest() { } void testdependentrecord::resetTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -1319,8 +1355,9 @@ void testdependentrecord::resetTest() { std::shared_ptr depProv = std::make_shared(); provider.add(depProv); { + edm::ESParentContext parentC; controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 1))); - const edm::EventSetup eventSetup1(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup1(provider.eventSetupImpl(), 0, nullptr, parentC, true); const DepRecord& depRecord = eventSetup1.get(); unsigned long long depCacheID = depRecord.cacheIdentifier(); const DummyRecord& dummyRecord = depRecord.getRecord(); @@ -1448,7 +1485,7 @@ void testdependentrecord::invalidRecordTest() { } void testdependentrecord::extendIOVTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -1464,19 +1501,20 @@ void testdependentrecord::extendIOVTest() { std::shared_ptr depProv = std::make_shared(); provider.add(depProv); + edm::ESParentContext parentC; std::shared_ptr dummy2Finder = std::make_shared(); dummy2Finder->setInterval(edm::ValidityInterval{startSyncValue, edm::IOVSyncValue{edm::EventID{1, 1, 6}}}); provider.add(std::shared_ptr(dummy2Finder)); { controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 1), edm::Timestamp(1))); - const edm::EventSetup eventSetup1(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup1(provider.eventSetupImpl(), 0, nullptr, parentC, true); unsigned long long id1 = eventSetup1.get().cacheIdentifier(); CPPUNIT_ASSERT(id1 == eventSetup1.get().cacheIdentifier()); CPPUNIT_ASSERT(id1 == eventSetup1.get().cacheIdentifier()); { controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 5), edm::Timestamp(2))); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, parentC, true); unsigned long long id = eventSetup.get().cacheIdentifier(); CPPUNIT_ASSERT(id1 == id); CPPUNIT_ASSERT(id1 == eventSetup.get().cacheIdentifier()); @@ -1486,7 +1524,7 @@ void testdependentrecord::extendIOVTest() { dummyFinder->setInterval(edm::ValidityInterval{startSyncValue, edm::IOVSyncValue{edm::EventID{1, 1, 7}}}); { controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 6), edm::Timestamp(7))); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, parentC, true); unsigned long long id = eventSetup.get().cacheIdentifier(); CPPUNIT_ASSERT(id1 == id); CPPUNIT_ASSERT(id1 == eventSetup.get().cacheIdentifier()); @@ -1498,7 +1536,7 @@ void testdependentrecord::extendIOVTest() { { controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 7), edm::Timestamp(7))); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, parentC, true); unsigned long long id = eventSetup.get().cacheIdentifier(); CPPUNIT_ASSERT(id1 == id); CPPUNIT_ASSERT(id1 == eventSetup.get().cacheIdentifier()); @@ -1510,7 +1548,7 @@ void testdependentrecord::extendIOVTest() { dummyFinder->setInterval(edm::ValidityInterval{startSyncValue, edm::IOVSyncValue{edm::EventID{1, 1, 8}}}); { controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 8), edm::Timestamp(7))); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, parentC, true); unsigned long long id = eventSetup.get().cacheIdentifier(); CPPUNIT_ASSERT(id1 == id); CPPUNIT_ASSERT(id1 == eventSetup.get().cacheIdentifier()); @@ -1523,7 +1561,7 @@ void testdependentrecord::extendIOVTest() { edm::ValidityInterval{edm::IOVSyncValue{edm::EventID{1, 1, 9}}, edm::IOVSyncValue{edm::EventID{1, 1, 9}}}); { controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 9), edm::Timestamp(7))); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, parentC, true); unsigned long long id = eventSetup.get().cacheIdentifier(); CPPUNIT_ASSERT(id1 + 1 == id); CPPUNIT_ASSERT(id1 + 1 == eventSetup.get().cacheIdentifier()); @@ -1538,7 +1576,7 @@ void testdependentrecord::extendIOVTest() { { controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 10), edm::Timestamp(7))); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, true); + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, parentC, true); unsigned long long id = eventSetup.get().cacheIdentifier(); CPPUNIT_ASSERT(id1 + 2 == id); CPPUNIT_ASSERT(id1 + 1 == eventSetup.get().cacheIdentifier()); diff --git a/FWCore/Framework/test/esproducer_t.cppunit.cc b/FWCore/Framework/test/esproducer_t.cppunit.cc index 5e976c12816db..2033edbc25f11 100644 --- a/FWCore/Framework/test/esproducer_t.cppunit.cc +++ b/FWCore/Framework/test/esproducer_t.cppunit.cc @@ -18,7 +18,7 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/EventSetupProvider.h" #include "FWCore/Framework/interface/EventSetupRecordKey.h" -#include "FWCore/Framework/src/EventSetupsController.h" +#include "FWCore/Framework/src/SynchronousEventSetupsController.h" #include "FWCore/Framework/interface/es_Label.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/ESProducts.h" @@ -193,7 +193,7 @@ void testEsproducer::registerTest() { } void testEsproducer::getFromTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -206,11 +206,12 @@ void testEsproducer::getFromTest() { auto pFinder = std::make_shared(); provider.add(std::shared_ptr(pFinder)); + edm::ESParentContext parentC; for (int iTime = 1; iTime != 6; ++iTime) { const edm::Timestamp time(iTime); pFinder->setInterval(edm::ValidityInterval(edm::IOVSyncValue(time), edm::IOVSyncValue(time))); controller.eventSetupForInstance(edm::IOVSyncValue(time)); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, parentC, false); edm::ESHandle pDummy; eventSetup.get().get(pDummy); CPPUNIT_ASSERT(0 != pDummy.product()); @@ -219,7 +220,7 @@ void testEsproducer::getFromTest() { } void testEsproducer::getfromShareTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -229,11 +230,12 @@ void testEsproducer::getfromShareTest() { auto pFinder = std::make_shared(); provider.add(std::shared_ptr(pFinder)); + edm::ESParentContext parentC; for (int iTime = 1; iTime != 6; ++iTime) { const edm::Timestamp time(iTime); pFinder->setInterval(edm::ValidityInterval(edm::IOVSyncValue(time), edm::IOVSyncValue(time))); controller.eventSetupForInstance(edm::IOVSyncValue(time)); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, parentC, false); edm::ESHandle pDummy; eventSetup.get().get(pDummy); CPPUNIT_ASSERT(0 != pDummy.product()); @@ -242,7 +244,7 @@ void testEsproducer::getfromShareTest() { } void testEsproducer::getfromUniqueTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -252,11 +254,12 @@ void testEsproducer::getfromUniqueTest() { auto pFinder = std::make_shared(); provider.add(std::shared_ptr(pFinder)); + edm::ESParentContext parentC; for (int iTime = 1; iTime != 6; ++iTime) { const edm::Timestamp time(iTime); pFinder->setInterval(edm::ValidityInterval(edm::IOVSyncValue(time), edm::IOVSyncValue(time))); controller.eventSetupForInstance(edm::IOVSyncValue(time)); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, parentC, false); edm::ESHandle pDummy; eventSetup.get().get(pDummy); CPPUNIT_ASSERT(0 != pDummy.product()); @@ -265,7 +268,7 @@ void testEsproducer::getfromUniqueTest() { } void testEsproducer::getfromOptionalTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -274,11 +277,12 @@ void testEsproducer::getfromOptionalTest() { auto pFinder = std::make_shared(); provider.add(std::shared_ptr(pFinder)); + edm::ESParentContext parentC; for (int iTime = 1; iTime != 6; ++iTime) { const edm::Timestamp time(iTime); pFinder->setInterval(edm::ValidityInterval(edm::IOVSyncValue(time), edm::IOVSyncValue(time))); controller.eventSetupForInstance(edm::IOVSyncValue(time)); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, parentC, false); edm::ESHandle pDummy; eventSetup.get().get(pDummy); CPPUNIT_ASSERT(0 != pDummy.product()); @@ -288,7 +292,7 @@ void testEsproducer::getfromOptionalTest() { void testEsproducer::labelTest() { try { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -298,11 +302,12 @@ void testEsproducer::labelTest() { auto pFinder = std::make_shared(); provider.add(std::shared_ptr(pFinder)); + edm::ESParentContext parentC; for (int iTime = 1; iTime != 6; ++iTime) { const edm::Timestamp time(iTime); pFinder->setInterval(edm::ValidityInterval(edm::IOVSyncValue(time), edm::IOVSyncValue(time))); controller.eventSetupForInstance(edm::IOVSyncValue(time)); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, parentC, false); edm::ESHandle pDummy; eventSetup.get().get("foo", pDummy); CPPUNIT_ASSERT(0 != pDummy.product()); @@ -347,7 +352,7 @@ class DecoratorProducer : public ESProducer { }; void testEsproducer::decoratorTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -356,11 +361,12 @@ void testEsproducer::decoratorTest() { auto pFinder = std::make_shared(); provider.add(std::shared_ptr(pFinder)); + edm::ESParentContext parentC; for (int iTime = 1; iTime != 6; ++iTime) { const edm::Timestamp time(iTime); pFinder->setInterval(edm::ValidityInterval(edm::IOVSyncValue(time), edm::IOVSyncValue(time))); controller.eventSetupForInstance(edm::IOVSyncValue(time)); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, parentC, false); edm::ESHandle pDummy; CPPUNIT_ASSERT(iTime - 1 == TestDecorator::s_pre); @@ -391,7 +397,7 @@ class DepProducer : public ESProducer { }; void testEsproducer::dependsOnTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -400,11 +406,12 @@ void testEsproducer::dependsOnTest() { auto pFinder = std::make_shared(); provider.add(std::shared_ptr(pFinder)); + edm::ESParentContext parentC; for (int iTime = 1; iTime != 6; ++iTime) { const edm::Timestamp time(iTime); pFinder->setInterval(edm::ValidityInterval(edm::IOVSyncValue(time), edm::IOVSyncValue(time))); controller.eventSetupForInstance(edm::IOVSyncValue(time)); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, parentC, false); edm::ESHandle pDummy; eventSetup.get().get(pDummy); @@ -416,7 +423,7 @@ void testEsproducer::dependsOnTest() { void testEsproducer::failMultipleRegistration() { MultiRegisterProducer dummy; } void testEsproducer::forceCacheClearTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -428,7 +435,8 @@ void testEsproducer::forceCacheClearTest() { const edm::Timestamp time(1); pFinder->setInterval(edm::ValidityInterval(edm::IOVSyncValue(time), edm::IOVSyncValue(time))); controller.eventSetupForInstance(edm::IOVSyncValue(time)); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + edm::ESParentContext parentC; + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, parentC, false); { edm::ESHandle pDummy; eventSetup.get().get(pDummy); @@ -438,7 +446,8 @@ void testEsproducer::forceCacheClearTest() { provider.forceCacheClear(); controller.eventSetupForInstance(edm::IOVSyncValue(time)); { - const edm::EventSetup eventSetup2(provider.eventSetupImpl(), 0, nullptr, false); + edm::ESParentContext parentC; + const edm::EventSetup eventSetup2(provider.eventSetupImpl(), 0, nullptr, parentC, false); edm::ESHandle pDummy; eventSetup2.get().get(pDummy); CPPUNIT_ASSERT(0 != pDummy.product()); @@ -453,11 +462,12 @@ namespace { class TestProxy : public DataProxy { public: - void prefetchAsyncImpl(edm::WaitingTask*, + void prefetchAsyncImpl(edm::WaitingTaskHolder, EventSetupRecordImpl const&, DataKey const&, edm::EventSetupImpl const*, - edm::ServiceToken const&) override {} + edm::ServiceToken const&, + edm::ESParentContext const&) override {} void invalidateCache() override {} void const* getAfterPrefetchImpl() const override { return nullptr; } }; diff --git a/FWCore/Framework/test/eventprincipal_t.cppunit.cc b/FWCore/Framework/test/eventprincipal_t.cppunit.cc index 9aa297ef1cae8..4bb7b7876d772 100644 --- a/FWCore/Framework/test/eventprincipal_t.cppunit.cc +++ b/FWCore/Framework/test/eventprincipal_t.cppunit.cc @@ -251,5 +251,5 @@ void test_ep::failgetbyInvalidIdTest() { void test_ep::failgetProvenanceTest() { edm::BranchID id; - CPPUNIT_ASSERT_THROW(pEvent_->getProvenance(id, nullptr), edm::Exception); + CPPUNIT_ASSERT_THROW(pEvent_->getProvenance(id), edm::Exception); } diff --git a/FWCore/Framework/test/eventsetup_t.cppunit.cc b/FWCore/Framework/test/eventsetup_t.cppunit.cc index 0b2200dc81b23..b8c4cabe2c3bc 100644 --- a/FWCore/Framework/test/eventsetup_t.cppunit.cc +++ b/FWCore/Framework/test/eventsetup_t.cppunit.cc @@ -32,7 +32,7 @@ #include "FWCore/Framework/interface/MakeDataException.h" #include "FWCore/Framework/interface/ValidityInterval.h" -#include "FWCore/Framework/src/EventSetupsController.h" +#include "FWCore/Framework/src/SynchronousEventSetupsController.h" #include "FWCore/Framework/test/DummyData.h" #include "FWCore/Framework/test/DummyEventSetupRecordRetriever.h" @@ -151,13 +151,15 @@ namespace { } void testEventsetup::constructTest() { - eventsetup::EventSetupProvider provider(&activityRegistry); + tbb::task_arena arena(1); + eventsetup::EventSetupProvider provider(&activityRegistry, &arena); const Timestamp time(1); const IOVSyncValue timestamp(time); bool newEventSetupImpl = false; auto eventSetupImpl = provider.eventSetupForInstance(timestamp, newEventSetupImpl); CPPUNIT_ASSERT(non_null(eventSetupImpl.get())); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, true); + edm::ESParentContext pc; + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, pc, true); } // Note there is a similar test in dependentrecord_t.cppunit.cc @@ -166,38 +168,43 @@ void testEventsetup::constructTest() { // at the lowest level. void testEventsetup::getTest() { - EventSetupImpl eventSetupImpl; + tbb::task_arena arena(1); + EventSetupImpl eventSetupImpl(&arena); std::vector keys; EventSetupRecordKey key = EventSetupRecordKey::makeKey(); keys.push_back(key); eventSetupImpl.setKeyIters(keys.begin(), keys.end()); EventSetupRecordImpl dummyRecordImpl{key, &activityRegistry}; eventSetupImpl.addRecordImpl(dummyRecordImpl); - const edm::EventSetup eventSetup(eventSetupImpl, 0, nullptr, true); + edm::ESParentContext pc; + const edm::EventSetup eventSetup(eventSetupImpl, 0, nullptr, pc, true); const DummyRecord& gottenRecord = eventSetup.get(); CPPUNIT_ASSERT(&dummyRecordImpl == gottenRecord.impl_); } void testEventsetup::tryToGetTest() { - EventSetupImpl eventSetupImpl; + tbb::task_arena arena(1); + EventSetupImpl eventSetupImpl(&arena); std::vector keys; EventSetupRecordKey key = EventSetupRecordKey::makeKey(); keys.push_back(key); eventSetupImpl.setKeyIters(keys.begin(), keys.end()); EventSetupRecordImpl dummyRecordImpl{key, &activityRegistry}; eventSetupImpl.addRecordImpl(dummyRecordImpl); - const edm::EventSetup eventSetup(eventSetupImpl, 0, nullptr, true); + edm::ESParentContext pc; + const edm::EventSetup eventSetup(eventSetupImpl, 0, nullptr, pc, true); std::optional gottenRecord = eventSetup.tryToGet(); CPPUNIT_ASSERT(gottenRecord); CPPUNIT_ASSERT(&dummyRecordImpl == gottenRecord.value().impl_); } void testEventsetup::getExcTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); controller.eventSetupForInstance(edm::IOVSyncValue(edm::EventID(1, 1, 1), edm::Timestamp(1))); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, true); + edm::ESParentContext pc; + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, pc, true); eventSetup.get(); } @@ -223,7 +230,7 @@ class DummyFinder : public EventSetupRecordIntervalFinder { }; void testEventsetup::recordValidityTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -236,33 +243,37 @@ void testEventsetup::recordValidityTest() { Timestamp time_1(1); controller.eventSetupForInstance(IOVSyncValue(time_1)); - const edm::EventSetup eventSetup1(provider.eventSetupImpl(), 0, nullptr, false); + edm::ESParentContext pc; + const edm::EventSetup eventSetup1(provider.eventSetupImpl(), 0, nullptr, pc, false); CPPUNIT_ASSERT(!eventSetup1.tryToGet().has_value()); const Timestamp time_2(2); dummyFinder->setInterval(ValidityInterval(IOVSyncValue(time_2), IOVSyncValue(Timestamp(3)))); { controller.eventSetupForInstance(IOVSyncValue(time_2)); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + edm::ESParentContext pc; + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, pc, false); eventSetup.get(); CPPUNIT_ASSERT(eventSetup.tryToGet().has_value()); } { controller.eventSetupForInstance(IOVSyncValue(Timestamp(3))); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + edm::ESParentContext pc; + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, pc, false); eventSetup.get(); CPPUNIT_ASSERT(eventSetup.tryToGet().has_value()); } { controller.eventSetupForInstance(IOVSyncValue(Timestamp(4))); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + edm::ESParentContext pc; + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, pc, false); CPPUNIT_ASSERT(!eventSetup.tryToGet().has_value()); } } void testEventsetup::recordValidityExcTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -275,29 +286,32 @@ void testEventsetup::recordValidityExcTest() { Timestamp time_1(1); controller.eventSetupForInstance(IOVSyncValue(time_1)); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, true); + edm::ESParentContext pc; + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, pc, true); eventSetup.get(); } void testEventsetup::recordValidityNoFinderTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); Timestamp time_1(1); controller.eventSetupForInstance(IOVSyncValue(time_1)); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + edm::ESParentContext pc; + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, pc, false); CPPUNIT_ASSERT(!eventSetup.tryToGet().has_value()); } void testEventsetup::recordValidityNoFinderExcTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); Timestamp time_1(1); controller.eventSetupForInstance(IOVSyncValue(time_1)); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + edm::ESParentContext pc; + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, pc, false); eventSetup.get(); } @@ -305,7 +319,7 @@ void testEventsetup::recordValidityNoFinderExcTest() { static eventsetup::RecordDependencyRegister s_factory; void testEventsetup::recordValidityProxyNoFinderTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -313,12 +327,13 @@ void testEventsetup::recordValidityProxyNoFinderTest() { Timestamp time_1(1); controller.eventSetupForInstance(IOVSyncValue(time_1)); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, true); + edm::ESParentContext pc; + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, pc, true); CPPUNIT_ASSERT(!eventSetup.tryToGet().has_value()); } void testEventsetup::recordValidityProxyNoFinderExcTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -326,12 +341,13 @@ void testEventsetup::recordValidityProxyNoFinderExcTest() { Timestamp time_1(1); controller.eventSetupForInstance(IOVSyncValue(time_1)); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, true); + edm::ESParentContext pc; + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, pc, true); eventSetup.get(); } void testEventsetup::producerConflictTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -352,7 +368,7 @@ void testEventsetup::producerConflictTest() { } void testEventsetup::sourceConflictTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -373,7 +389,7 @@ void testEventsetup::sourceConflictTest() { } void testEventsetup::twoSourceTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -393,19 +409,20 @@ void testEventsetup::twoSourceTest() { provider.add(finderPtr); } //checking for conflicts is delayed until first eventSetupForInstance + edm::ESParentContext pc; controller.eventSetupForInstance(IOVSyncValue::invalidIOVSyncValue()); - const edm::EventSetup eventSetup3(provider.eventSetupImpl(), 0, nullptr, false); + const edm::EventSetup eventSetup3(provider.eventSetupImpl(), 0, nullptr, pc, false); CPPUNIT_ASSERT(!eventSetup3.tryToGet().has_value()); CPPUNIT_ASSERT(!eventSetup3.tryToGet().has_value()); controller.eventSetupForInstance(IOVSyncValue(Timestamp(3))); - const edm::EventSetup eventSetup4(provider.eventSetupImpl(), 0, nullptr, false); + const edm::EventSetup eventSetup4(provider.eventSetupImpl(), 0, nullptr, pc, false); CPPUNIT_ASSERT(!eventSetup4.tryToGet().has_value()); CPPUNIT_ASSERT(eventSetup4.tryToGet().has_value()); eventSetup4.get(); } void testEventsetup::provenanceTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -435,7 +452,8 @@ void testEventsetup::provenanceTest() { provider.add(dummyProv); } controller.eventSetupForInstance(IOVSyncValue(Timestamp(2))); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + edm::ESParentContext pc; + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, pc, false); edm::ESHandle data; eventSetup.getData(data); CPPUNIT_ASSERT(kGood.value_ == data->value_); @@ -448,7 +466,7 @@ void testEventsetup::provenanceTest() { } void testEventsetup::getDataWithLabelTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -480,7 +498,8 @@ void testEventsetup::getDataWithLabelTest() { provider.add(dummyProv); } controller.eventSetupForInstance(IOVSyncValue(Timestamp(2))); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + edm::ESParentContext pc; + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, pc, false); edm::ESHandle data; eventSetup.getData("blah", data); CPPUNIT_ASSERT(kGood.value_ == data->value_); @@ -493,7 +512,7 @@ void testEventsetup::getDataWithLabelTest() { } void testEventsetup::getDataWithESInputTagTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -525,7 +544,8 @@ void testEventsetup::getDataWithESInputTagTest() { provider.add(dummyProv); } controller.eventSetupForInstance(IOVSyncValue(Timestamp(2))); - const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + edm::ESParentContext pc; + const edm::EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, pc, false); { edm::ESHandle data; edm::ESInputTag blahTag("", "blah"); @@ -575,13 +595,15 @@ namespace { for (size_t i = 0; i != proxies.size(); ++i) { auto rec = iImpl.findImpl(recs[i]); if (rec) { - auto waitTask = edm::make_empty_waiting_task(); - waitTask->set_ref_count(2); - rec->prefetchAsync(waitTask.get(), proxies[i], &iImpl, edm::ServiceToken{}); - waitTask->decrement_ref_count(); - waitTask->wait_for_all(); - if (waitTask->exceptionPtr()) { - std::rethrow_exception(*waitTask->exceptionPtr()); + edm::FinalWaitingTask waitTask; + tbb::task_group group; + rec->prefetchAsync( + WaitingTaskHolder(group, &waitTask), proxies[i], &iImpl, edm::ServiceToken{}, edm::ESParentContext{}); + do { + group.wait(); + } while (not waitTask.done()); + if (waitTask.exceptionPtr()) { + std::rethrow_exception(*waitTask.exceptionPtr()); } } } @@ -722,7 +744,7 @@ class SetMayConsumeProducer : public ESProducer { } // namespace void testEventsetup::getDataWithESGetTokenTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -798,6 +820,7 @@ void testEventsetup::getDataWithESGetTokenTest() { provider.add(dummyProv); } + edm::ESParentContext pc; controller.eventSetupForInstance(IOVSyncValue(Timestamp(2))); { DummyDataConsumer consumer{edm::ESInputTag("", "blah")}; @@ -806,6 +829,7 @@ void testEventsetup::getDataWithESGetTokenTest() { EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; auto const& data = eventSetup.getData(consumer.m_token); CPPUNIT_ASSERT(kGood.value_ == data.value_); @@ -826,6 +850,7 @@ void testEventsetup::getDataWithESGetTokenTest() { EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; const DummyData& data = eventSetup.getData(consumer.m_token); CPPUNIT_ASSERT(kBad.value_ == data.value_); @@ -838,6 +863,7 @@ void testEventsetup::getDataWithESGetTokenTest() { EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; auto const& data = eventSetup.getData(consumer.m_token); CPPUNIT_ASSERT(kGood.value_ == data.value_); @@ -850,6 +876,7 @@ void testEventsetup::getDataWithESGetTokenTest() { EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; CPPUNIT_ASSERT_THROW(eventSetup.getData(consumer.m_token), cms::Exception); } @@ -861,6 +888,7 @@ void testEventsetup::getDataWithESGetTokenTest() { EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; const DummyData& data = eventSetup.getData(consumer.m_token); CPPUNIT_ASSERT(kBad.value_ == data.value_); @@ -872,6 +900,7 @@ void testEventsetup::getDataWithESGetTokenTest() { EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; const DummyData& data = eventSetup.getData(consumer.m_token); CPPUNIT_ASSERT(kBad.value_ == data.value_); @@ -883,6 +912,7 @@ void testEventsetup::getDataWithESGetTokenTest() { EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; CPPUNIT_ASSERT_THROW(eventSetup.getData(consumer.m_token), edm::eventsetup::MakeDataException); } @@ -893,6 +923,7 @@ void testEventsetup::getDataWithESGetTokenTest() { EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; const DummyData& data = eventSetup.getData(consumer.m_token); CPPUNIT_ASSERT(kBad.value_ == data.value_); @@ -905,7 +936,7 @@ void testEventsetup::getDataWithESGetTokenTest() { } void testEventsetup::getHandleWithESGetTokenTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -913,6 +944,7 @@ void testEventsetup::getHandleWithESGetTokenTest() { dummyFinder->setInterval(ValidityInterval(IOVSyncValue(Timestamp(2)), IOVSyncValue(Timestamp(3)))); provider.add(std::shared_ptr(dummyFinder)); + edm::ESParentContext pc; try { { edm::eventsetup::ComponentDescription description("DummyProxyProvider", "testOne", true); @@ -945,6 +977,7 @@ void testEventsetup::getHandleWithESGetTokenTest() { EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; edm::ESHandle data = eventSetup.getHandle(consumer.m_token); CPPUNIT_ASSERT(kGood.value_ == data->value_); @@ -959,6 +992,7 @@ void testEventsetup::getHandleWithESGetTokenTest() { EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; edm::ESHandle data = eventSetup.getHandle(consumer.m_token); CPPUNIT_ASSERT(kBad.value_ == data->value_); @@ -973,6 +1007,7 @@ void testEventsetup::getHandleWithESGetTokenTest() { EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; edm::ESHandle data = eventSetup.getHandle(consumer.m_token); CPPUNIT_ASSERT(kGood.value_ == data->value_); @@ -987,6 +1022,7 @@ void testEventsetup::getHandleWithESGetTokenTest() { EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; CPPUNIT_ASSERT(not eventSetup.getHandle(consumer.m_token)); CPPUNIT_ASSERT_THROW(*eventSetup.getHandle(consumer.m_token), cms::Exception); @@ -1004,10 +1040,11 @@ void testEventsetup::getTransientHandleWithESGetTokenTest() { DummyData kGood{1}; DummyData kBad{0}; - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); + edm::ESParentContext pc; try { { edm::eventsetup::ComponentDescription description("DummyProxyProvider", "testOne", true); @@ -1044,6 +1081,7 @@ void testEventsetup::getTransientHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; edm::ESTransientHandle data = eventSetup.getTransientHandle(consumer.m_token); CPPUNIT_ASSERT(kGood.value_ == data->value_); @@ -1058,6 +1096,7 @@ void testEventsetup::getTransientHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; edm::ESTransientHandle data = eventSetup.getTransientHandle(consumer.m_token); CPPUNIT_ASSERT(kBad.value_ == data->value_); @@ -1072,6 +1111,7 @@ void testEventsetup::getTransientHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; edm::ESTransientHandle data = eventSetup.getTransientHandle(consumer.m_token); CPPUNIT_ASSERT(kGood.value_ == data->value_); @@ -1086,6 +1126,7 @@ void testEventsetup::getTransientHandleWithESGetTokenTest() { const edm::EventSetup eventSetup{provider.eventSetupImpl(), static_cast(edm::Transition::Event), consumer.esGetTokenIndices(edm::Transition::Event), + pc, true}; edm::ESTransientHandle data = eventSetup.getTransientHandle(consumer.m_token); CPPUNIT_ASSERT(not data); @@ -1100,7 +1141,7 @@ void testEventsetup::getTransientHandleWithESGetTokenTest() { void testEventsetup::sourceProducerResolutionTest() { { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -1108,6 +1149,7 @@ void testEventsetup::sourceProducerResolutionTest() { dummyFinder->setInterval(ValidityInterval(IOVSyncValue(Timestamp(2)), IOVSyncValue(Timestamp(3)))); provider.add(std::shared_ptr(dummyFinder)); + edm::ESParentContext pc; { edm::eventsetup::ComponentDescription description("DummyProxyProvider", "", true); auto dummyProv = std::make_shared(kBad); @@ -1121,7 +1163,7 @@ void testEventsetup::sourceProducerResolutionTest() { provider.add(dummyProv); } controller.eventSetupForInstance(IOVSyncValue(Timestamp(2))); - const EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, false}; + const EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, pc, false}; edm::ESHandle data; eventSetup.getData(data); CPPUNIT_ASSERT(kGood.value_ == data->value_); @@ -1129,7 +1171,7 @@ void testEventsetup::sourceProducerResolutionTest() { //reverse order { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -1149,7 +1191,8 @@ void testEventsetup::sourceProducerResolutionTest() { provider.add(dummyProv); } controller.eventSetupForInstance(IOVSyncValue(Timestamp(2))); - EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, false}; + ESParentContext pc; + EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, pc, false}; edm::ESHandle data; eventSetup.getData(data); CPPUNIT_ASSERT(kGood.value_ == data->value_); @@ -1162,9 +1205,10 @@ void testEventsetup::preferTest() { std::shared_ptr dummyFinder = std::make_shared(); dummyFinder->setInterval(ValidityInterval(IOVSyncValue(Timestamp(2)), IOVSyncValue(Timestamp(3)))); + edm::ESParentContext pc; try { { - EventSetupsController controller; + SynchronousEventSetupsController controller; EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); provider.add(std::shared_ptr(dummyFinder)); @@ -1186,7 +1230,7 @@ void testEventsetup::preferTest() { provider.add(dummyProv); } controller.eventSetupForInstance(IOVSyncValue(Timestamp(2))); - EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, false}; + EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, pc, false}; edm::ESHandle data; eventSetup.getData(data); CPPUNIT_ASSERT(kGood.value_ == data->value_); @@ -1194,7 +1238,7 @@ void testEventsetup::preferTest() { //sources { - EventSetupsController controller; + SynchronousEventSetupsController controller; EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); provider.add(std::shared_ptr(dummyFinder)); @@ -1216,7 +1260,7 @@ void testEventsetup::preferTest() { provider.add(dummyProv); } controller.eventSetupForInstance(IOVSyncValue(Timestamp(2))); - EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, false}; + EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, pc, false}; edm::ESHandle data; eventSetup.getData(data); CPPUNIT_ASSERT(kGood.value_ == data->value_); @@ -1224,7 +1268,7 @@ void testEventsetup::preferTest() { //specific name { - EventSetupsController controller; + SynchronousEventSetupsController controller; EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); provider.add(std::shared_ptr(dummyFinder)); @@ -1247,7 +1291,7 @@ void testEventsetup::preferTest() { provider.add(dummyProv); } controller.eventSetupForInstance(IOVSyncValue(Timestamp(2))); - EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, false}; + EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, pc, false}; edm::ESHandle data; eventSetup.getData(data); CPPUNIT_ASSERT(kGood.value_ == data->value_); @@ -1260,7 +1304,7 @@ void testEventsetup::preferTest() { } void testEventsetup::introspectionTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -1268,6 +1312,7 @@ void testEventsetup::introspectionTest() { dummyFinder->setInterval(ValidityInterval(IOVSyncValue(Timestamp(2)), IOVSyncValue(Timestamp(3)))); provider.add(std::shared_ptr(dummyFinder)); + edm::ESParentContext pc; try { { edm::eventsetup::ComponentDescription description("DummyProxyProvider", "", true); @@ -1292,7 +1337,7 @@ void testEventsetup::introspectionTest() { EventSetupRecordKey dummyRecordKey = EventSetupRecordKey::makeKey(); controller.eventSetupForInstance(IOVSyncValue(Timestamp(2))); { - EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, true}; + EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, pc, true}; CPPUNIT_ASSERT(eventSetup.recordIsProvidedByAModule(dummyRecordKey)); std::vector recordKeys; @@ -1307,7 +1352,7 @@ void testEventsetup::introspectionTest() { // EventSetupImpl but has a null pointer. controller.eventSetupForInstance(IOVSyncValue(Timestamp(4))); { - EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, true}; + EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, pc, true}; CPPUNIT_ASSERT(eventSetup.recordIsProvidedByAModule(dummyRecordKey)); std::vector recordKeys; @@ -1329,7 +1374,7 @@ void testEventsetup::introspectionTest() { } void testEventsetup::iovExtensionTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -1337,14 +1382,15 @@ void testEventsetup::iovExtensionTest() { finder->setInterval(ValidityInterval(IOVSyncValue(Timestamp(2)), IOVSyncValue(Timestamp(3)))); provider.add(std::shared_ptr(finder)); + edm::ESParentContext pc; { controller.eventSetupForInstance(IOVSyncValue{Timestamp(2)}); - EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, true}; + EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, pc, true}; CPPUNIT_ASSERT(2 == eventSetup.get().cacheIdentifier()); } { controller.eventSetupForInstance(IOVSyncValue{Timestamp(3)}); - EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, true}; + EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, pc, true}; eventSetup.get(); CPPUNIT_ASSERT(2 == eventSetup.get().cacheIdentifier()); } @@ -1352,7 +1398,7 @@ void testEventsetup::iovExtensionTest() { finder->setInterval(ValidityInterval(IOVSyncValue{Timestamp{2}}, IOVSyncValue{Timestamp{4}})); { controller.eventSetupForInstance(IOVSyncValue{Timestamp(4)}); - EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, true}; + EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, pc, true}; CPPUNIT_ASSERT(2 == eventSetup.get().cacheIdentifier()); } @@ -1360,13 +1406,13 @@ void testEventsetup::iovExtensionTest() { finder->setInterval(ValidityInterval(IOVSyncValue{Timestamp{5}}, IOVSyncValue{Timestamp{6}})); { controller.eventSetupForInstance(IOVSyncValue{Timestamp(5)}); - EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, true}; + EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, pc, true}; CPPUNIT_ASSERT(3 == eventSetup.get().cacheIdentifier()); } } void testEventsetup::resetProxiesTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; edm::ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -1384,9 +1430,10 @@ void testEventsetup::resetProxiesTest() { dummyProv->setDescription(description); provider.add(dummyProv); + edm::ESParentContext pc; { controller.eventSetupForInstance(IOVSyncValue{Timestamp(2)}); - EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, false}; + EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, pc, false}; CPPUNIT_ASSERT(2 == eventSetup.get().cacheIdentifier()); edm::ESHandle data; eventSetup.getData(data); @@ -1395,7 +1442,7 @@ void testEventsetup::resetProxiesTest() { provider.forceCacheClear(); { controller.eventSetupForInstance(IOVSyncValue{Timestamp(2)}); - EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, false}; + EventSetup eventSetup{provider.eventSetupImpl(), 0, nullptr, pc, false}; eventSetup.get(); CPPUNIT_ASSERT(3 == eventSetup.get().cacheIdentifier()); dummyProv->incrementData(); diff --git a/FWCore/Framework/test/eventsetupplugin_t.cppunit.cc b/FWCore/Framework/test/eventsetupplugin_t.cppunit.cc index 6c4670b9e88ef..8d56d5cfbd356 100644 --- a/FWCore/Framework/test/eventsetupplugin_t.cppunit.cc +++ b/FWCore/Framework/test/eventsetupplugin_t.cppunit.cc @@ -62,7 +62,8 @@ void testEventsetupplugin::finderTest() { doInit(); EventSetupsController esController; - EventSetupProvider provider(&activityRegistry); + tbb::task_arena taskArena(1); + EventSetupProvider provider(&activityRegistry, &taskArena); edm::ParameterSet dummyFinderPSet; dummyFinderPSet.addParameter("@module_type", std::string("LoadableDummyFinder")); diff --git a/FWCore/Framework/test/eventsetuprecord_t.cppunit.cc b/FWCore/Framework/test/eventsetuprecord_t.cppunit.cc index e1e76086c439f..eae682e5ec979 100644 --- a/FWCore/Framework/test/eventsetuprecord_t.cppunit.cc +++ b/FWCore/Framework/test/eventsetuprecord_t.cppunit.cc @@ -14,6 +14,7 @@ #include "FWCore/Framework/interface/EventSetupRecordImplementation.h" #include "FWCore/Framework/interface/EventSetupRecordKey.h" #include "FWCore/Framework/interface/EventSetupRecordProvider.h" +#include "FWCore/Framework/interface/EventSetupImpl.h" #include "FWCore/Framework/interface/RecordDependencyRegister.h" #include "FWCore/Framework/interface/MakeDataException.h" #include "FWCore/Framework/interface/EDConsumerBase.h" @@ -29,8 +30,10 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/ActivityRegistry.h" +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" #include +#include "tbb/task_arena.h" namespace { edm::ActivityRegistry activityRegistry; @@ -76,6 +79,7 @@ class testEventsetupRecord : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE_END(); public: + testEventsetupRecord(); void setUp(); void tearDown() {} @@ -93,6 +97,8 @@ class testEventsetupRecord : public CppUnit::TestFixture { void doGetExepTest(); EventSetupRecordKey dummyRecordKey_; + tbb::task_arena taskArena_; + EventSetupImpl eventSetupImpl_; }; ///registration of the test so that the runner can find it @@ -140,6 +146,7 @@ class WorkingDummyProxy : public eventsetup::DataProxyTemplate(); } class WorkingDummyProvider : public edm::eventsetup::DataProxyProvider { @@ -185,7 +192,8 @@ void testEventsetupRecord::getTest() { const DataKey dummyDataKey(DataKey::makeTypeTag(), ""); DummyRecord dummyRecord; - dummyRecord.setImpl(&dummyRecordImpl, 0, nullptr, nullptr, false); + ESParentContext pc; + dummyRecord.setImpl(&dummyRecordImpl, 0, nullptr, &eventSetupImpl_, &pc, false); ESHandle dummyPtr; CPPUNIT_ASSERT(not dummyRecord.get(dummyPtr)); CPPUNIT_ASSERT(not dummyPtr.isValid()); @@ -252,13 +260,15 @@ namespace { void prefetch(eventsetup::EventSetupRecordImpl const& iRec) const { auto const& proxies = this->esGetTokenIndicesVector(edm::Transition::Event); for (size_t i = 0; i != proxies.size(); ++i) { - auto waitTask = edm::make_empty_waiting_task(); - waitTask->set_ref_count(2); - iRec.prefetchAsync(waitTask.get(), proxies[i], nullptr, edm::ServiceToken{}); - waitTask->decrement_ref_count(); - waitTask->wait_for_all(); - if (waitTask->exceptionPtr()) { - std::rethrow_exception(*waitTask->exceptionPtr()); + edm::FinalWaitingTask waitTask; + tbb::task_group group; + iRec.prefetchAsync( + WaitingTaskHolder(group, &waitTask), proxies[i], nullptr, edm::ServiceToken{}, edm::ESParentContext{}); + do { + group.wait(); + } while (not waitTask.done()); + if (waitTask.exceptionPtr()) { + std::rethrow_exception(*waitTask.exceptionPtr()); } } } @@ -273,13 +283,15 @@ namespace { void prefetch(eventsetup::EventSetupRecordImpl const& iRec) const { auto const& proxies = this->esGetTokenIndicesVector(edm::Transition::Event); for (size_t i = 0; i != proxies.size(); ++i) { - auto waitTask = edm::make_empty_waiting_task(); - waitTask->set_ref_count(2); - iRec.prefetchAsync(waitTask.get(), proxies[i], nullptr, edm::ServiceToken{}); - waitTask->decrement_ref_count(); - waitTask->wait_for_all(); - if (waitTask->exceptionPtr()) { - std::rethrow_exception(*waitTask->exceptionPtr()); + edm::FinalWaitingTask waitTask; + tbb::task_group group; + iRec.prefetchAsync( + WaitingTaskHolder(group, &waitTask), proxies[i], nullptr, edm::ServiceToken{}, edm::ESParentContext{}); + do { + group.wait(); + } while (not waitTask.done()); + if (waitTask.exceptionPtr()) { + std::rethrow_exception(*waitTask.exceptionPtr()); } } } @@ -293,15 +305,20 @@ namespace { template struct SetupRecordT { eventsetup::EventSetupRecordImpl dummyRecordImpl; + edm::EventSetupImpl& eventSetupImpl_; CONSUMER& consumer; //we need the DataKeys to stick around since references are being kept to them std::vector> proxies; SetupRecordT(CONSUMER& iConsumer, EventSetupRecordKey const& iKey, + EventSetupImpl& iEventSetup, ActivityRegistry* iRegistry, std::vector> iProxies) - : dummyRecordImpl(iKey, iRegistry), consumer(iConsumer), proxies(std::move(iProxies)) { + : dummyRecordImpl(iKey, iRegistry), + eventSetupImpl_(iEventSetup), + consumer(iConsumer), + proxies(std::move(iProxies)) { for (auto const& d : proxies) { dummyRecordImpl.add(d.first, d.second); } @@ -318,7 +335,9 @@ namespace { DummyRecord makeRecord() { DummyRecord ret; - ret.setImpl(&dummyRecordImpl, 0, consumer.esGetTokenIndices(edm::Transition::Event), nullptr, false); + ESParentContext pc; + ret.setImpl( + &dummyRecordImpl, 0, consumer.esGetTokenIndices(edm::Transition::Event), &eventSetupImpl_, &pc, false); return ret; } }; @@ -335,7 +354,7 @@ void testEventsetupRecord::getHandleTest() { { DummyDataConsumer consumer{edm::ESInputTag("", "")}; - SetupRecord sr{consumer, dummyRecordKey_, &activityRegistry, {}}; + SetupRecord sr{consumer, dummyRecordKey_, eventSetupImpl_, &activityRegistry, {}}; DummyRecord dummyRecord = sr.makeRecord(); CPPUNIT_ASSERT(not dummyRecord.getHandle(consumer.m_token)); @@ -350,7 +369,7 @@ void testEventsetupRecord::getHandleTest() { { DummyDataConsumer consumer{edm::ESInputTag("", "")}; - SetupRecord sr{consumer, dummyRecordKey_, &activityRegistry, {{dummyDataKey, &dummyProxy}}}; + SetupRecord sr{consumer, dummyRecordKey_, eventSetupImpl_, &activityRegistry, {{dummyDataKey, &dummyProxy}}}; DummyRecord dummyRecord = sr.makeRecord(); CPPUNIT_ASSERT_THROW(dummyRecord.getHandle(consumer.m_token), ExceptionType); @@ -365,8 +384,11 @@ void testEventsetupRecord::getHandleTest() { const DataKey workingDataKey(DataKey::makeTypeTag(), "working"); { DummyDataConsumer consumer{edm::ESInputTag("", "working")}; - SetupRecord sr{ - consumer, dummyRecordKey_, &activityRegistry, {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; + SetupRecord sr{consumer, + dummyRecordKey_, + eventSetupImpl_, + &activityRegistry, + {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; DummyRecord dummyRecord = sr.makeRecord(); @@ -379,8 +401,11 @@ void testEventsetupRecord::getHandleTest() { } { DummyDataConsumer consumer{edm::ESInputTag("DummyProd", "working")}; - SetupRecord sr{ - consumer, dummyRecordKey_, &activityRegistry, {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; + SetupRecord sr{consumer, + dummyRecordKey_, + eventSetupImpl_, + &activityRegistry, + {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; DummyRecord dummyRecord = sr.makeRecord(); @@ -389,8 +414,11 @@ void testEventsetupRecord::getHandleTest() { } { DummyDataConsumer consumer{edm::ESInputTag("SmartProd", "working")}; - SetupRecord sr{ - consumer, dummyRecordKey_, &activityRegistry, {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; + SetupRecord sr{consumer, + dummyRecordKey_, + eventSetupImpl_, + &activityRegistry, + {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; DummyRecord dummyRecord = sr.makeRecord(); @@ -401,8 +429,11 @@ void testEventsetupRecord::getHandleTest() { cd.label_ = "foo"; { DummyDataConsumer consumer{edm::ESInputTag("foo", "working")}; - SetupRecord sr{ - consumer, dummyRecordKey_, &activityRegistry, {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; + SetupRecord sr{consumer, + dummyRecordKey_, + eventSetupImpl_, + &activityRegistry, + {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; DummyRecord dummyRecord = sr.makeRecord(); @@ -411,8 +442,11 @@ void testEventsetupRecord::getHandleTest() { } { DummyDataConsumer consumer{edm::ESInputTag("DummyProd", "working")}; - SetupRecord sr{ - consumer, dummyRecordKey_, &activityRegistry, {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; + SetupRecord sr{consumer, + dummyRecordKey_, + eventSetupImpl_, + &activityRegistry, + {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; DummyRecord dummyRecord = sr.makeRecord(); @@ -429,7 +463,7 @@ void testEventsetupRecord::getWithTokenTest() { { DummyDataConsumer consumer{edm::ESInputTag("", "")}; - SetupRecord sr{consumer, dummyRecordKey_, &activityRegistry, {}}; + SetupRecord sr{consumer, dummyRecordKey_, eventSetupImpl_, &activityRegistry, {}}; DummyRecord dummyRecord = sr.makeRecord(); @@ -439,7 +473,7 @@ void testEventsetupRecord::getWithTokenTest() { { DummyDataConsumer consumer{edm::ESInputTag("", "")}; - SetupRecord sr{consumer, dummyRecordKey_, &activityRegistry, {{dummyDataKey, &dummyProxy}}}; + SetupRecord sr{consumer, dummyRecordKey_, eventSetupImpl_, &activityRegistry, {{dummyDataKey, &dummyProxy}}}; DummyRecord dummyRecord = sr.makeRecord(); CPPUNIT_ASSERT_THROW(dummyRecord.get(consumer.m_token), ExceptionType); @@ -454,8 +488,11 @@ void testEventsetupRecord::getWithTokenTest() { const DataKey workingDataKey(DataKey::makeTypeTag(), "working"); { DummyDataConsumer consumer{edm::ESInputTag("", "working")}; - SetupRecord sr{ - consumer, dummyRecordKey_, &activityRegistry, {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; + SetupRecord sr{consumer, + dummyRecordKey_, + eventSetupImpl_, + &activityRegistry, + {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; DummyRecord dummyRecord = sr.makeRecord(); auto const& dummyData = dummyRecord.get(consumer.m_token); @@ -464,8 +501,11 @@ void testEventsetupRecord::getWithTokenTest() { } { DummyDataConsumer consumer{edm::ESInputTag("DummyProd", "working")}; - SetupRecord sr{ - consumer, dummyRecordKey_, &activityRegistry, {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; + SetupRecord sr{consumer, + dummyRecordKey_, + eventSetupImpl_, + &activityRegistry, + {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; DummyRecord dummyRecord = sr.makeRecord(); auto const& dummyData = dummyRecord.get(consumer.m_token); @@ -473,8 +513,11 @@ void testEventsetupRecord::getWithTokenTest() { } { DummyDataConsumer consumer{edm::ESInputTag("SmartProd", "working")}; - SetupRecord sr{ - consumer, dummyRecordKey_, &activityRegistry, {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; + SetupRecord sr{consumer, + dummyRecordKey_, + eventSetupImpl_, + &activityRegistry, + {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; DummyRecord dummyRecord = sr.makeRecord(); CPPUNIT_ASSERT_THROW(dummyRecord.get(consumer.m_token), cms::Exception); @@ -483,8 +526,11 @@ void testEventsetupRecord::getWithTokenTest() { cd.label_ = "foo"; { DummyDataConsumer consumer{edm::ESInputTag("foo", "working")}; - SetupRecord sr{ - consumer, dummyRecordKey_, &activityRegistry, {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; + SetupRecord sr{consumer, + dummyRecordKey_, + eventSetupImpl_, + &activityRegistry, + {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; DummyRecord dummyRecord = sr.makeRecord(); auto const& dummyData = dummyRecord.get(consumer.m_token); @@ -492,8 +538,11 @@ void testEventsetupRecord::getWithTokenTest() { } { DummyDataConsumer consumer{edm::ESInputTag("DummyProd", "working")}; - SetupRecord sr{ - consumer, dummyRecordKey_, &activityRegistry, {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; + SetupRecord sr{consumer, + dummyRecordKey_, + eventSetupImpl_, + &activityRegistry, + {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; DummyRecord dummyRecord = sr.makeRecord(); CPPUNIT_ASSERT_THROW(dummyRecord.get(consumer.m_token), cms::Exception); @@ -503,7 +552,8 @@ void testEventsetupRecord::getWithTokenTest() { void testEventsetupRecord::getNodataExpTest() { EventSetupRecordImpl recImpl(DummyRecord::keyForClass(), &activityRegistry); DummyRecord dummyRecord; - dummyRecord.setImpl(&recImpl, 0, nullptr, nullptr, false); + ESParentContext pc; + dummyRecord.setImpl(&recImpl, 0, nullptr, &eventSetupImpl_, &pc, false); FailingDummyProxy dummyProxy; const DataKey dummyDataKey(DataKey::makeTypeTag(), ""); @@ -523,7 +573,8 @@ void testEventsetupRecord::getExepTest() { dummyRecordImpl.add(dummyDataKey, &dummyProxy); DummyRecord dummyRecord; - dummyRecord.setImpl(&dummyRecordImpl, 0, nullptr, nullptr, false); + ESParentContext pc; + dummyRecord.setImpl(&dummyRecordImpl, 0, nullptr, &eventSetupImpl_, &pc, false); dummyRecord.get(dummyPtr); //CPPUNIT_ASSERT_THROW(dummyRecord.get(dummyPtr), ExceptionType); } @@ -534,7 +585,7 @@ void testEventsetupRecord::doGetTest() { { DummyDataConsumerGeneric consumer{dummyDataKey}; - SetupGenericRecord sr{consumer, dummyRecordKey_, &activityRegistry, {}}; + SetupGenericRecord sr{consumer, dummyRecordKey_, eventSetupImpl_, &activityRegistry, {}}; DummyRecord dummyRecord = sr.makeRecord(); @@ -546,7 +597,7 @@ void testEventsetupRecord::doGetTest() { { DummyDataConsumerGeneric consumer{dummyDataKey}; - SetupGenericRecord sr{consumer, dummyRecordKey_, &activityRegistry, {{dummyDataKey, &dummyProxy}}}; + SetupGenericRecord sr{consumer, dummyRecordKey_, eventSetupImpl_, &activityRegistry, {{dummyDataKey, &dummyProxy}}}; DummyRecord dummyRecord = sr.makeRecord(); CPPUNIT_ASSERT_THROW(dummyRecord.doGet(consumer.m_token), ExceptionType); @@ -559,8 +610,11 @@ void testEventsetupRecord::doGetTest() { { DummyDataConsumerGeneric consumer{workingDataKey}; - SetupGenericRecord sr{ - consumer, dummyRecordKey_, &activityRegistry, {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; + SetupGenericRecord sr{consumer, + dummyRecordKey_, + eventSetupImpl_, + &activityRegistry, + {{dummyDataKey, &dummyProxy}, {workingDataKey, &workingProxy}}}; DummyRecord dummyRecord = sr.makeRecord(); CPPUNIT_ASSERT(dummyRecord.doGet(consumer.m_token)); @@ -593,7 +647,8 @@ void testEventsetupRecord::introspectionTest() { CPPUNIT_ASSERT(keys.empty()); DummyRecord dummyRecord; - dummyRecord.setImpl(&dummyRecordImpl, 0, nullptr, nullptr, false); + ESParentContext pc; + dummyRecord.setImpl(&dummyRecordImpl, 0, nullptr, &eventSetupImpl_, &pc, false); std::vector esproducers; dummyRecordImpl.getESProducers(esproducers); @@ -704,7 +759,7 @@ void testEventsetupRecord::doGetExepTest() { { DummyDataConsumerGeneric consumer{dummyDataKey}; - SetupGenericRecord sr{consumer, dummyRecordKey_, &activityRegistry, {}}; + SetupGenericRecord sr{consumer, dummyRecordKey_, eventSetupImpl_, &activityRegistry, {}}; DummyRecord dummyRecord = sr.makeRecord(); @@ -718,7 +773,7 @@ void testEventsetupRecord::doGetExepTest() { DummyDataConsumerGeneric consumer{dummyDataKey}; - SetupGenericRecord sr{consumer, dummyRecordKey_, &activityRegistry, {{dummyDataKey, &dummyProxy}}}; + SetupGenericRecord sr{consumer, dummyRecordKey_, eventSetupImpl_, &activityRegistry, {{dummyDataKey, &dummyProxy}}}; DummyRecord dummyRecord = sr.makeRecord(); @@ -732,7 +787,8 @@ void testEventsetupRecord::proxyResetTest() { EventSetupRecordProvider const* constRecordProvider = dummyProvider.get(); DummyRecord dummyRecord; - dummyRecord.setImpl(&constRecordProvider->firstRecordImpl(), 0, nullptr, nullptr, false); + ESParentContext pc; + dummyRecord.setImpl(&constRecordProvider->firstRecordImpl(), 0, nullptr, &eventSetupImpl_, &pc, false); Dummy myDummy; std::shared_ptr workingProxy = std::make_shared(&myDummy); @@ -780,7 +836,8 @@ void testEventsetupRecord::transientTest() { auto dummyProvider = std::make_unique(DummyRecord::keyForClass(), &activityRegistry); DummyRecord dummyRecordNoConst; - dummyRecordNoConst.setImpl(&dummyProvider->firstRecordImpl(), 0, nullptr, nullptr, false); + ESParentContext pc; + dummyRecordNoConst.setImpl(&dummyProvider->firstRecordImpl(), 0, nullptr, &eventSetupImpl_, &pc, false); EventSetupRecord const& dummyRecord = dummyRecordNoConst; eventsetup::EventSetupRecordImpl& nonConstDummyRecordImpl = *const_cast(dummyRecord.impl_); diff --git a/FWCore/Framework/test/fullchain_t.cppunit.cc b/FWCore/Framework/test/fullchain_t.cppunit.cc index b05f877c15c25..b880947e29903 100644 --- a/FWCore/Framework/test/fullchain_t.cppunit.cc +++ b/FWCore/Framework/test/fullchain_t.cppunit.cc @@ -18,7 +18,7 @@ #include "FWCore/Framework/test/DummyFinder.h" #include "FWCore/Framework/test/DummyProxyProvider.h" #include "FWCore/Framework/test/DummyRecord.h" -#include "FWCore/Framework/src/EventSetupsController.h" +#include "FWCore/Framework/src/SynchronousEventSetupsController.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/ActivityRegistry.h" #include "FWCore/Concurrency/interface/ThreadsController.h" @@ -67,7 +67,7 @@ class testfullChain : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE_REGISTRATION(testfullChain); void testfullChain::getfromDataproxyproviderTest() { - EventSetupsController controller; + SynchronousEventSetupsController controller; ParameterSet pset = createDummyPset(); EventSetupProvider& provider = *controller.makeProvider(pset, &activityRegistry); @@ -78,10 +78,11 @@ void testfullChain::getfromDataproxyproviderTest() { auto proxyProvider = std::make_shared(); provider.add(proxyProvider); + edm::ESParentContext pc; for (unsigned int iTime = 1; iTime != 6; ++iTime) { const Timestamp time(iTime); controller.eventSetupForInstance(IOVSyncValue(time)); - EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, false); + EventSetup eventSetup(provider.eventSetupImpl(), 0, nullptr, pc, false); ESHandle pDummy; eventSetup.get().get(pDummy); CPPUNIT_ASSERT(0 != pDummy.product()); diff --git a/FWCore/Framework/test/global_filter_t.cppunit.cc b/FWCore/Framework/test/global_filter_t.cppunit.cc index 8da98e5eee7b4..820b0e62f8497 100644 --- a/FWCore/Framework/test/global_filter_t.cppunit.cc +++ b/FWCore/Framework/test/global_filter_t.cppunit.cc @@ -10,6 +10,7 @@ #include #include #include +#include "tbb/global_control.h" #include "FWCore/Framework/interface/global/EDFilter.h" #include "FWCore/Framework/src/WorkerT.h" #include "FWCore/Framework/src/ModuleHolder.h" @@ -29,6 +30,25 @@ #include "cppunit/extensions/HelperMacros.h" +namespace { + struct ShadowStreamID { + constexpr ShadowStreamID() : value(0) {} + unsigned int value; + }; + + union IDUnion { + IDUnion() : m_shadow() {} + ShadowStreamID m_shadow; + edm::StreamID m_id; + }; +} // namespace +static edm::StreamID makeID() { + IDUnion u; + assert(u.m_id.value() == 0); + return u.m_id; +} +static const edm::StreamID s_streamID0 = makeID(); + class testGlobalFilter : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(testGlobalFilter); @@ -104,6 +124,20 @@ class testGlobalFilter : public CppUnit::TestFixture { template void testTransitions(std::shared_ptr iMod, Expectations const& iExpect); + template + void doWork(edm::Worker* iBase, Info const& info, edm::ParentContext const& iContext) { + edm::FinalWaitingTask task; + tbb::task_group group; + iBase->doWorkAsync( + edm::WaitingTaskHolder(group, &task), info, edm::ServiceToken(), s_streamID0, iContext, nullptr); + do { + group.wait(); + } while (not task.done()); + if (auto e = task.exceptionPtr()) { + std::rethrow_exception(*e); + } + } + class BasicProd : public edm::global::EDFilter<> { public: mutable unsigned int m_count = 0; //[[cms-thread-safe]] @@ -328,25 +362,6 @@ class testGlobalFilter : public CppUnit::TestFixture { }; }; -namespace { - struct ShadowStreamID { - constexpr ShadowStreamID() : value(0) {} - unsigned int value; - }; - - union IDUnion { - IDUnion() : m_shadow() {} - ShadowStreamID m_shadow; - edm::StreamID m_id; - }; -} // namespace -static edm::StreamID makeID() { - IDUnion u; - assert(u.m_id.value() == 0); - return u.m_id; -} -static const edm::StreamID s_streamID0 = makeID(); - ///registration of the test so that the runner can find it CPPUNIT_TEST_SUITE_REGISTRATION(testGlobalFilter); @@ -386,26 +401,26 @@ testGlobalFilter::testGlobalFilter() typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamBeginRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kGlobalBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kEvent] = [this](edm::Worker* iBase) { @@ -414,33 +429,33 @@ testGlobalFilter::testGlobalFilter() edm::ParentContext nullParentContext(&streamContext); iBase->setActivityRegistry(m_actReg); edm::EventTransitionInfo info(*m_ep, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kGlobalEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kGlobalEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kEndStream] = [](edm::Worker* iBase) { @@ -471,6 +486,7 @@ namespace { template void testGlobalFilter::testTransitions(std::shared_ptr iMod, Expectations const& iExpect) { + tbb::global_control control(tbb::global_control::max_allowed_parallelism, 1); edm::maker::ModuleHolderT h(iMod, nullptr); h.preallocate(edm::PreallocationConfiguration{}); diff --git a/FWCore/Framework/test/global_outputmodule_t.cppunit.cc b/FWCore/Framework/test/global_outputmodule_t.cppunit.cc index e8b46780a6bca..757d20126ddfc 100644 --- a/FWCore/Framework/test/global_outputmodule_t.cppunit.cc +++ b/FWCore/Framework/test/global_outputmodule_t.cppunit.cc @@ -8,6 +8,7 @@ #include #include #include +#include "tbb/global_control.h" #include "FWCore/Framework/interface/global/OutputModule.h" #include "FWCore/Framework/src/OutputModuleCommunicatorT.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" @@ -93,6 +94,19 @@ class testGlobalOutputModule : public CppUnit::TestFixture { template void testTransitions(std::shared_ptr iMod, Expectations const& iExpect); + template + void doWork(edm::Worker* iBase, Info const& info, edm::StreamID id, edm::ParentContext const& iContext) { + edm::FinalWaitingTask task; + tbb::task_group group; + iBase->doWorkAsync(edm::WaitingTaskHolder(group, &task), info, edm::ServiceToken(), id, iContext, nullptr); + do { + group.wait(); + } while (not task.done()); + if (auto e = task.exceptionPtr()) { + std::rethrow_exception(*e); + } + } + class BasicOutputModule : public edm::global::OutputModule<> { public: using edm::global::OutputModuleBase::doPreallocate; @@ -181,14 +195,14 @@ testGlobalOutputModule::testGlobalOutputModule() typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, edm::StreamID::invalidStreamID(), parentContext, nullptr); + doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); }; m_transToFunc[Trans::kGlobalBeginLuminosityBlock] = [this](edm::Worker* iBase, edm::OutputModuleCommunicator*) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, edm::StreamID::invalidStreamID(), parentContext, nullptr); + doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); }; m_transToFunc[Trans::kEvent] = [this](edm::Worker* iBase, edm::OutputModuleCommunicator*) { @@ -197,20 +211,22 @@ testGlobalOutputModule::testGlobalOutputModule() edm::ParentContext parentContext(&streamContext); iBase->setActivityRegistry(m_actReg); edm::EventTransitionInfo info(*m_ep, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, s_streamID0, parentContext); }; m_transToFunc[Trans::kGlobalEndLuminosityBlock] = [this](edm::Worker* iBase, edm::OutputModuleCommunicator* iComm) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, edm::StreamID::invalidStreamID(), parentContext, nullptr); - auto t = edm::make_empty_waiting_task(); - t->increment_ref_count(); - iComm->writeLumiAsync(edm::WaitingTaskHolder(t.get()), *m_lbp, nullptr, &activityRegistry); - t->wait_for_all(); - if (t->exceptionPtr() != nullptr) { - std::rethrow_exception(*t->exceptionPtr()); + doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); + edm::FinalWaitingTask task; + tbb::task_group group; + iComm->writeLumiAsync(edm::WaitingTaskHolder(group, &task), *m_lbp, nullptr, &activityRegistry); + do { + group.wait(); + } while (not task.done()); + if (task.exceptionPtr() != nullptr) { + std::rethrow_exception(*task.exceptionPtr()); } }; @@ -218,13 +234,15 @@ testGlobalOutputModule::testGlobalOutputModule() typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, edm::StreamID::invalidStreamID(), parentContext, nullptr); - auto t = edm::make_empty_waiting_task(); - t->increment_ref_count(); - iComm->writeRunAsync(edm::WaitingTaskHolder(t.get()), *m_rp, nullptr, &activityRegistry, nullptr); - t->wait_for_all(); - if (t->exceptionPtr() != nullptr) { - std::rethrow_exception(*t->exceptionPtr()); + doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); + edm::FinalWaitingTask task; + tbb::task_group group; + iComm->writeRunAsync(edm::WaitingTaskHolder(group, &task), *m_rp, nullptr, &activityRegistry, nullptr); + do { + group.wait(); + } while (not task.done()); + if (task.exceptionPtr() != nullptr) { + std::rethrow_exception(*task.exceptionPtr()); } }; @@ -279,6 +297,8 @@ namespace { template void testGlobalOutputModule::testTransitions(std::shared_ptr iMod, Expectations const& iExpect) { + tbb::global_control control(tbb::global_control::max_allowed_parallelism, 1); + iMod->doPreallocate(m_preallocConfig); edm::WorkerT w{iMod, m_desc, m_params.actions_}; edm::OutputModuleCommunicatorT comm(iMod.get()); diff --git a/FWCore/Framework/test/global_producer_t.cppunit.cc b/FWCore/Framework/test/global_producer_t.cppunit.cc index d57b5b9a5d3b3..de5bc6f94ae92 100644 --- a/FWCore/Framework/test/global_producer_t.cppunit.cc +++ b/FWCore/Framework/test/global_producer_t.cppunit.cc @@ -10,6 +10,7 @@ #include #include #include +#include "tbb/global_control.h" #include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Framework/src/WorkerT.h" #include "FWCore/Framework/src/ModuleHolder.h" @@ -29,6 +30,25 @@ #include "cppunit/extensions/HelperMacros.h" +namespace { + struct ShadowStreamID { + constexpr ShadowStreamID() : value(0) {} + unsigned int value; + }; + + union IDUnion { + IDUnion() : m_shadow() {} + ShadowStreamID m_shadow; + edm::StreamID m_id; + }; +} // namespace +static edm::StreamID makeID() { + IDUnion u; + assert(u.m_id.value() == 0); + return u.m_id; +} +static const edm::StreamID s_streamID0 = makeID(); + class testGlobalProducer : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(testGlobalProducer); @@ -104,6 +124,20 @@ class testGlobalProducer : public CppUnit::TestFixture { template void testTransitions(std::shared_ptr iMod, Expectations const& iExpect); + template + void doWork(edm::Worker* iBase, Info const& info, edm::ParentContext const& iContext) { + edm::FinalWaitingTask task; + tbb::task_group group; + iBase->doWorkAsync( + edm::WaitingTaskHolder(group, &task), info, edm::ServiceToken(), s_streamID0, iContext, nullptr); + do { + group.wait(); + } while (not task.done()); + if (auto e = task.exceptionPtr()) { + std::rethrow_exception(*e); + } + } + class BasicProd : public edm::global::EDProducer<> { public: mutable unsigned int m_count = 0; //[[cms-thread-safe]] @@ -292,25 +326,6 @@ class testGlobalProducer : public CppUnit::TestFixture { }; }; -namespace { - struct ShadowStreamID { - constexpr ShadowStreamID() : value(0) {} - unsigned int value; - }; - - union IDUnion { - IDUnion() : m_shadow() {} - ShadowStreamID m_shadow; - edm::StreamID m_id; - }; -} // namespace -static edm::StreamID makeID() { - IDUnion u; - assert(u.m_id.value() == 0); - return u.m_id; -} -static const edm::StreamID s_streamID0 = makeID(); - ///registration of the test so that the runner can find it CPPUNIT_TEST_SUITE_REGISTRATION(testGlobalProducer); @@ -350,26 +365,26 @@ testGlobalProducer::testGlobalProducer() typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamBeginRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kGlobalBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kEvent] = [this](edm::Worker* iBase) { @@ -378,33 +393,33 @@ testGlobalProducer::testGlobalProducer() edm::ParentContext nullParentContext(&streamContext); iBase->setActivityRegistry(m_actReg); edm::EventTransitionInfo info(*m_ep, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kGlobalEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kGlobalEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kEndStream] = [](edm::Worker* iBase) { @@ -435,6 +450,8 @@ namespace { template void testGlobalProducer::testTransitions(std::shared_ptr iMod, Expectations const& iExpect) { + tbb::global_control control(tbb::global_control::max_allowed_parallelism, 1); + edm::maker::ModuleHolderT h(iMod, nullptr); h.preallocate(edm::PreallocationConfiguration{}); diff --git a/FWCore/Framework/test/limited_filter_t.cppunit.cc b/FWCore/Framework/test/limited_filter_t.cppunit.cc index 26c76304c46fc..491499e82f558 100644 --- a/FWCore/Framework/test/limited_filter_t.cppunit.cc +++ b/FWCore/Framework/test/limited_filter_t.cppunit.cc @@ -10,6 +10,7 @@ #include #include #include +#include "tbb/global_control.h" #include "FWCore/Framework/interface/limited/EDFilter.h" #include "FWCore/Framework/src/WorkerT.h" #include "FWCore/Framework/src/ModuleHolder.h" @@ -40,6 +41,25 @@ namespace { const edm::ParameterSet s_pset = makePSet(); } // namespace +namespace { + struct ShadowStreamID { + constexpr ShadowStreamID() : value(0) {} + unsigned int value; + }; + + union IDUnion { + IDUnion() : m_shadow() {} + ShadowStreamID m_shadow; + edm::StreamID m_id; + }; +} // namespace +static edm::StreamID makeID() { + IDUnion u; + assert(u.m_id.value() == 0); + return u.m_id; +} +static const edm::StreamID s_streamID0 = makeID(); + class testLimitedFilter : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(testLimitedFilter); @@ -114,6 +134,20 @@ class testLimitedFilter : public CppUnit::TestFixture { template void testTransitions(std::shared_ptr iMod, Expectations const& iExpect); + template + void doWork(edm::Worker* iBase, Info const& info, edm::ParentContext const& iContext) { + edm::FinalWaitingTask task; + tbb::task_group group; + iBase->doWorkAsync( + edm::WaitingTaskHolder(group, &task), info, edm::ServiceToken(), s_streamID0, iContext, nullptr); + do { + group.wait(); + } while (not task.done()); + if (auto e = task.exceptionPtr()) { + std::rethrow_exception(*e); + } + } + class BasicProd : public edm::limited::EDFilter<> { public: BasicProd() : edm::limited::EDFilterBase(s_pset), edm::limited::EDFilter<>(s_pset) {} @@ -357,25 +391,6 @@ class testLimitedFilter : public CppUnit::TestFixture { }; }; -namespace { - struct ShadowStreamID { - constexpr ShadowStreamID() : value(0) {} - unsigned int value; - }; - - union IDUnion { - IDUnion() : m_shadow() {} - ShadowStreamID m_shadow; - edm::StreamID m_id; - }; -} // namespace -static edm::StreamID makeID() { - IDUnion u; - assert(u.m_id.value() == 0); - return u.m_id; -} -static const edm::StreamID s_streamID0 = makeID(); - ///registration of the test so that the runner can find it CPPUNIT_TEST_SUITE_REGISTRATION(testLimitedFilter); @@ -414,26 +429,26 @@ testLimitedFilter::testLimitedFilter() typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamBeginRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kGlobalBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kEvent] = [this](edm::Worker* iBase) { @@ -442,33 +457,33 @@ testLimitedFilter::testLimitedFilter() edm::ParentContext nullParentContext(&streamContext); iBase->setActivityRegistry(m_actReg); edm::EventTransitionInfo info(*m_ep, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kGlobalEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kGlobalEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kEndStream] = [](edm::Worker* iBase) { @@ -499,6 +514,8 @@ namespace { template void testLimitedFilter::testTransitions(std::shared_ptr iMod, Expectations const& iExpect) { + tbb::global_control control(tbb::global_control::max_allowed_parallelism, 1); + edm::maker::ModuleHolderT h(iMod, nullptr); h.preallocate(edm::PreallocationConfiguration{}); edm::WorkerT w{iMod, m_desc, nullptr}; diff --git a/FWCore/Framework/test/limited_outputmodule_t.cppunit.cc b/FWCore/Framework/test/limited_outputmodule_t.cppunit.cc index 968cea448a613..0f19cc6480b3b 100644 --- a/FWCore/Framework/test/limited_outputmodule_t.cppunit.cc +++ b/FWCore/Framework/test/limited_outputmodule_t.cppunit.cc @@ -8,6 +8,7 @@ #include #include #include +#include "tbb/global_control.h" #include "FWCore/Framework/interface/limited/OutputModule.h" #include "FWCore/Framework/src/OutputModuleCommunicatorT.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" @@ -93,6 +94,19 @@ class testLimitedOutputModule : public CppUnit::TestFixture { template void testTransitions(std::shared_ptr iMod, Expectations const& iExpect); + template + void doWork(edm::Worker* iBase, Info const& info, edm::StreamID id, edm::ParentContext const& iContext) { + edm::FinalWaitingTask task; + tbb::task_group group; + iBase->doWorkAsync(edm::WaitingTaskHolder(group, &task), info, edm::ServiceToken(), id, iContext, nullptr); + do { + group.wait(); + } while (not task.done()); + if (auto e = task.exceptionPtr()) { + std::rethrow_exception(*e); + } + } + class BasicOutputModule : public edm::limited::OutputModule<> { public: using edm::limited::OutputModuleBase::doPreallocate; @@ -180,14 +194,14 @@ testLimitedOutputModule::testLimitedOutputModule() typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, edm::StreamID::invalidStreamID(), parentContext, nullptr); + doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); }; m_transToFunc[Trans::kGlobalBeginLuminosityBlock] = [this](edm::Worker* iBase, edm::OutputModuleCommunicator*) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, edm::StreamID::invalidStreamID(), parentContext, nullptr); + doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); }; m_transToFunc[Trans::kEvent] = [this](edm::Worker* iBase, edm::OutputModuleCommunicator*) { @@ -196,20 +210,22 @@ testLimitedOutputModule::testLimitedOutputModule() edm::ParentContext parentContext(&streamContext); iBase->setActivityRegistry(m_actReg); edm::EventTransitionInfo info(*m_ep, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, s_streamID0, parentContext); }; m_transToFunc[Trans::kGlobalEndLuminosityBlock] = [this](edm::Worker* iBase, edm::OutputModuleCommunicator* iComm) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, edm::StreamID::invalidStreamID(), parentContext, nullptr); - auto t = edm::make_empty_waiting_task(); - t->increment_ref_count(); - iComm->writeLumiAsync(edm::WaitingTaskHolder(t.get()), *m_lbp, nullptr, &activityRegistry); - t->wait_for_all(); - if (t->exceptionPtr() != nullptr) { - std::rethrow_exception(*t->exceptionPtr()); + doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); + edm::FinalWaitingTask task; + tbb::task_group group; + iComm->writeLumiAsync(edm::WaitingTaskHolder(group, &task), *m_lbp, nullptr, &activityRegistry); + do { + group.wait(); + } while (not task.done()); + if (task.exceptionPtr() != nullptr) { + std::rethrow_exception(*task.exceptionPtr()); } }; @@ -217,13 +233,15 @@ testLimitedOutputModule::testLimitedOutputModule() typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, edm::StreamID::invalidStreamID(), parentContext, nullptr); - auto t = edm::make_empty_waiting_task(); - t->increment_ref_count(); - iComm->writeRunAsync(edm::WaitingTaskHolder(t.get()), *m_rp, nullptr, &activityRegistry, nullptr); - t->wait_for_all(); - if (t->exceptionPtr() != nullptr) { - std::rethrow_exception(*t->exceptionPtr()); + doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); + edm::FinalWaitingTask task; + tbb::task_group group; + iComm->writeRunAsync(edm::WaitingTaskHolder(group, &task), *m_rp, nullptr, &activityRegistry, nullptr); + do { + group.wait(); + } while (not task.done()); + if (task.exceptionPtr() != nullptr) { + std::rethrow_exception(*task.exceptionPtr()); } }; @@ -278,6 +296,8 @@ namespace { template void testLimitedOutputModule::testTransitions(std::shared_ptr iMod, Expectations const& iExpect) { + tbb::global_control control(tbb::global_control::max_allowed_parallelism, 1); + iMod->doPreallocate(m_preallocConfig); edm::WorkerT w{iMod, m_desc, m_params.actions_}; edm::OutputModuleCommunicatorT comm(iMod.get()); diff --git a/FWCore/Framework/test/limited_producer_t.cppunit.cc b/FWCore/Framework/test/limited_producer_t.cppunit.cc index 583b735ac3d75..55daba9996f82 100644 --- a/FWCore/Framework/test/limited_producer_t.cppunit.cc +++ b/FWCore/Framework/test/limited_producer_t.cppunit.cc @@ -10,6 +10,7 @@ #include #include #include +#include "tbb/global_control.h" #include "FWCore/Framework/interface/limited/EDProducer.h" #include "FWCore/Framework/src/WorkerT.h" #include "FWCore/Framework/src/ModuleHolder.h" @@ -40,6 +41,25 @@ namespace { const edm::ParameterSet s_pset = makePSet(); } // namespace +namespace { + struct ShadowStreamID { + constexpr ShadowStreamID() : value(0) {} + unsigned int value; + }; + + union IDUnion { + IDUnion() : m_shadow() {} + ShadowStreamID m_shadow; + edm::StreamID m_id; + }; +} // namespace +static edm::StreamID makeID() { + IDUnion u; + assert(u.m_id.value() == 0); + return u.m_id; +} +static const edm::StreamID s_streamID0 = makeID(); + class testLimitedProducer : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(testLimitedProducer); @@ -114,6 +134,20 @@ class testLimitedProducer : public CppUnit::TestFixture { template void testTransitions(std::shared_ptr iMod, Expectations const& iExpect); + template + void doWork(edm::Worker* iBase, Info const& info, edm::ParentContext const& iContext) { + edm::FinalWaitingTask task; + tbb::task_group group; + iBase->doWorkAsync( + edm::WaitingTaskHolder(group, &task), info, edm::ServiceToken(), s_streamID0, iContext, nullptr); + do { + group.wait(); + } while (not task.done()); + if (auto e = task.exceptionPtr()) { + std::rethrow_exception(*e); + } + } + class BasicProd : public edm::limited::EDProducer<> { public: BasicProd() : edm::limited::EDProducerBase(s_pset), edm::limited::EDProducer<>(s_pset) {} @@ -324,25 +358,6 @@ class testLimitedProducer : public CppUnit::TestFixture { }; }; -namespace { - struct ShadowStreamID { - constexpr ShadowStreamID() : value(0) {} - unsigned int value; - }; - - union IDUnion { - IDUnion() : m_shadow() {} - ShadowStreamID m_shadow; - edm::StreamID m_id; - }; -} // namespace -static edm::StreamID makeID() { - IDUnion u; - assert(u.m_id.value() == 0); - return u.m_id; -} -static const edm::StreamID s_streamID0 = makeID(); - ///registration of the test so that the runner can find it CPPUNIT_TEST_SUITE_REGISTRATION(testLimitedProducer); @@ -381,26 +396,26 @@ testLimitedProducer::testLimitedProducer() typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamBeginRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kGlobalBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kEvent] = [this](edm::Worker* iBase) { @@ -409,33 +424,33 @@ testLimitedProducer::testLimitedProducer() edm::ParentContext nullParentContext(&streamContext); iBase->setActivityRegistry(m_actReg); edm::EventTransitionInfo info(*m_ep, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kGlobalEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kStreamEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kGlobalEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext nullParentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, nullParentContext, nullptr); + doWork(iBase, info, nullParentContext); }; m_transToFunc[Trans::kEndStream] = [](edm::Worker* iBase) { @@ -466,6 +481,8 @@ namespace { template void testLimitedProducer::testTransitions(std::shared_ptr iMod, Expectations const& iExpect) { + tbb::global_control control(tbb::global_control::max_allowed_parallelism, 1); + edm::maker::ModuleHolderT h(iMod, nullptr); h.preallocate(edm::PreallocationConfiguration{}); edm::WorkerT w{iMod, m_desc, nullptr}; diff --git a/FWCore/Framework/test/one_outputmodule_t.cppunit.cc b/FWCore/Framework/test/one_outputmodule_t.cppunit.cc index 6e525d1c95f16..64db3bbad0969 100644 --- a/FWCore/Framework/test/one_outputmodule_t.cppunit.cc +++ b/FWCore/Framework/test/one_outputmodule_t.cppunit.cc @@ -10,6 +10,7 @@ #include #include #include +#include "tbb/global_control.h" #include "FWCore/Framework/interface/one/OutputModule.h" #include "FWCore/Framework/src/OutputModuleCommunicatorT.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" @@ -105,6 +106,19 @@ class testOneOutputModule : public CppUnit::TestFixture { template void testTransitions(std::shared_ptr iMod, Expectations const& iExpect); + template + void doWork(edm::Worker* iBase, Info const& info, edm::StreamID id, edm::ParentContext const& iContext) { + edm::FinalWaitingTask task; + tbb::task_group group; + iBase->doWorkAsync(edm::WaitingTaskHolder(group, &task), info, edm::ServiceToken(), id, iContext, nullptr); + do { + group.wait(); + } while (not task.done()); + if (auto e = task.exceptionPtr()) { + std::rethrow_exception(*e); + } + } + class BasicOutputModule : public edm::one::OutputModule<> { public: using edm::one::OutputModuleBase::doPreallocate; @@ -275,14 +289,14 @@ testOneOutputModule::testOneOutputModule() typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, edm::StreamID::invalidStreamID(), parentContext, nullptr); + doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); }; m_transToFunc[Trans::kGlobalBeginLuminosityBlock] = [this](edm::Worker* iBase, edm::OutputModuleCommunicator*) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, edm::StreamID::invalidStreamID(), parentContext, nullptr); + doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); }; m_transToFunc[Trans::kEvent] = [this](edm::Worker* iBase, edm::OutputModuleCommunicator*) { @@ -291,20 +305,22 @@ testOneOutputModule::testOneOutputModule() edm::ParentContext parentContext(&streamContext); iBase->setActivityRegistry(m_actReg); edm::EventTransitionInfo info(*m_ep, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, s_streamID0, parentContext); }; m_transToFunc[Trans::kGlobalEndLuminosityBlock] = [this](edm::Worker* iBase, edm::OutputModuleCommunicator* iComm) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, edm::StreamID::invalidStreamID(), parentContext, nullptr); - auto t = edm::make_empty_waiting_task(); - t->increment_ref_count(); - iComm->writeLumiAsync(edm::WaitingTaskHolder(t.get()), *m_lbp, nullptr, &activityRegistry); - t->wait_for_all(); - if (t->exceptionPtr() != nullptr) { - std::rethrow_exception(*t->exceptionPtr()); + doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); + edm::FinalWaitingTask task; + tbb::task_group group; + iComm->writeLumiAsync(edm::WaitingTaskHolder(group, &task), *m_lbp, nullptr, &activityRegistry); + do { + group.wait(); + } while (not task.done()); + if (task.exceptionPtr() != nullptr) { + std::rethrow_exception(*task.exceptionPtr()); } }; @@ -312,13 +328,15 @@ testOneOutputModule::testOneOutputModule() typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, edm::StreamID::invalidStreamID(), parentContext, nullptr); - auto t = edm::make_empty_waiting_task(); - t->increment_ref_count(); - iComm->writeRunAsync(edm::WaitingTaskHolder(t.get()), *m_rp, nullptr, &activityRegistry, nullptr); - t->wait_for_all(); - if (t->exceptionPtr() != nullptr) { - std::rethrow_exception(*t->exceptionPtr()); + doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); + edm::FinalWaitingTask task; + tbb::task_group group; + iComm->writeRunAsync(edm::WaitingTaskHolder(group, &task), *m_rp, nullptr, &activityRegistry, nullptr); + do { + group.wait(); + } while (not task.done()); + if (task.exceptionPtr() != nullptr) { + std::rethrow_exception(*task.exceptionPtr()); } }; @@ -373,6 +391,8 @@ namespace { template void testOneOutputModule::testTransitions(std::shared_ptr iMod, Expectations const& iExpect) { + tbb::global_control control(tbb::global_control::max_allowed_parallelism, 1); + iMod->doPreallocate(m_preallocConfig); edm::WorkerT w{iMod, m_desc, m_params.actions_}; w.beginJob(); diff --git a/FWCore/Framework/test/run_module_delete_tests.sh b/FWCore/Framework/test/run_module_delete_tests.sh new file mode 100755 index 0000000000000..3738258fd6611 --- /dev/null +++ b/FWCore/Framework/test/run_module_delete_tests.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# Pass in name and status +function die { echo $1: status $2 ; exit $2; } + +TEST_DIR=src/FWCore/Framework/test + +cmsRun $TEST_DIR/test_module_delete_cfg.py || die "module deletion test failed" $? +echo "module deletion test succeeded" +cmsRun $TEST_DIR/test_module_delete_subprocess_cfg.py || die "module deletion test with subprocess failed" $? +echo "module deletion test with subprocess succeeded" +cmsRun $TEST_DIR/test_module_delete_improperDependencies_cfg.py && die "module deletion with improper module ordering test failed" $? +echo "module deletion test with improper module ordering succeeded" +cmsRun $TEST_DIR/test_module_delete_looper_cfg.py || die "module deletetion test with looper failed" $? +echo "module deletion test with looper succeeded" +cmsRun $TEST_DIR/test_module_delete_dependencygraph_cfg.py || die "module deletetion test with DependencyGraph failed" $? +echo "module deletion test with DependencyGraph succeeded" +cmsRun $TEST_DIR/test_module_delete_disable_cfg.py || die "module deletetion test with disabling the deletion failed" $? +echo "module deletion test with disabling the deletion succeeded" diff --git a/FWCore/Framework/test/stream_filter_t.cppunit.cc b/FWCore/Framework/test/stream_filter_t.cppunit.cc index c06ff6b667c0a..9eb42597c0330 100644 --- a/FWCore/Framework/test/stream_filter_t.cppunit.cc +++ b/FWCore/Framework/test/stream_filter_t.cppunit.cc @@ -9,6 +9,7 @@ #include #include #include +#include "tbb/global_control.h" #include "FWCore/Framework/src/Worker.h" #include "FWCore/Framework/src/WorkerT.h" #include "FWCore/Framework/src/ModuleHolder.h" @@ -29,6 +30,25 @@ #include "cppunit/extensions/HelperMacros.h" +namespace { + struct ShadowStreamID { + constexpr ShadowStreamID() : value(0) {} + unsigned int value; + }; + + union IDUnion { + IDUnion() : m_shadow() {} + ShadowStreamID m_shadow; + edm::StreamID m_id; + }; +} // namespace +static edm::StreamID makeID() { + IDUnion u; + assert(u.m_id.value() == 0); + return u.m_id; +} +static const edm::StreamID s_streamID0 = makeID(); + class testStreamFilter : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(testStreamFilter); @@ -103,6 +123,20 @@ class testStreamFilter : public CppUnit::TestFixture { template void testTransitions(std::shared_ptr iMod, Expectations const& iExpect); + template + void doWork(edm::Worker* iBase, Info const& info, edm::ParentContext const& iContext) { + edm::FinalWaitingTask task; + tbb::task_group group; + iBase->doWorkAsync( + edm::WaitingTaskHolder(group, &task), info, edm::ServiceToken(), s_streamID0, iContext, nullptr); + do { + group.wait(); + } while (not task.done()); + if (auto e = task.exceptionPtr()) { + std::rethrow_exception(*e); + } + } + template void runTest(Expectations const& iExpect); @@ -403,25 +437,6 @@ bool testStreamFilter::EndLumiSummaryProd::m_globalEndLuminosityBlockSummaryCall ///registration of the test so that the runner can find it CPPUNIT_TEST_SUITE_REGISTRATION(testStreamFilter); -namespace { - struct ShadowStreamID { - constexpr ShadowStreamID() : value(0) {} - unsigned int value; - }; - - union IDUnion { - IDUnion() : m_shadow() {} - ShadowStreamID m_shadow; - edm::StreamID m_id; - }; -} // namespace -static edm::StreamID makeID() { - IDUnion u; - assert(u.m_id.value() == 0); - return u.m_id; -} -static const edm::StreamID s_streamID0 = makeID(); - testStreamFilter::testStreamFilter() : m_prodReg(new edm::ProductRegistry{}), m_idHelper(new edm::BranchIDListHelper{}), @@ -464,26 +479,26 @@ testStreamFilter::testStreamFilter() typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kStreamBeginRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kGlobalBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kStreamBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kEvent] = [this](edm::Worker* iBase) { @@ -492,33 +507,33 @@ testStreamFilter::testStreamFilter() edm::ParentContext parentContext(&streamContext); iBase->setActivityRegistry(m_actReg); edm::EventTransitionInfo info(*m_ep, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kStreamEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kGlobalEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kStreamEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kGlobalEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kEndStream] = [](edm::Worker* iBase) { @@ -558,6 +573,8 @@ namespace { template void testStreamFilter::testTransitions(std::shared_ptr iMod, Expectations const& iExpect) { + tbb::global_control control(tbb::global_control::max_allowed_parallelism, 1); + edm::WorkerT w{iMod, m_desc, nullptr}; for (auto& keyVal : m_transToFunc) { testTransition(&w, keyVal.first, iExpect, keyVal.second); diff --git a/FWCore/Framework/test/stream_producer_t.cppunit.cc b/FWCore/Framework/test/stream_producer_t.cppunit.cc index 1957e96c56fb8..28aa558b67221 100644 --- a/FWCore/Framework/test/stream_producer_t.cppunit.cc +++ b/FWCore/Framework/test/stream_producer_t.cppunit.cc @@ -9,6 +9,7 @@ #include #include #include +#include "tbb/global_control.h" #include "FWCore/Framework/src/Worker.h" #include "FWCore/Framework/src/WorkerT.h" #include "FWCore/Framework/src/ModuleHolder.h" @@ -29,6 +30,25 @@ #include "cppunit/extensions/HelperMacros.h" +namespace { + struct ShadowStreamID { + constexpr ShadowStreamID() : value(0) {} + unsigned int value; + }; + + union IDUnion { + IDUnion() : m_shadow() {} + ShadowStreamID m_shadow; + edm::StreamID m_id; + }; +} // namespace +static edm::StreamID makeID() { + IDUnion u; + assert(u.m_id.value() == 0); + return u.m_id; +} +static const edm::StreamID s_streamID0 = makeID(); + class testStreamProducer : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(testStreamProducer); @@ -103,6 +123,20 @@ class testStreamProducer : public CppUnit::TestFixture { template void testTransitions(std::shared_ptr iMod, Expectations const& iExpect); + template + void doWork(edm::Worker* iBase, Info const& info, edm::ParentContext const& iContext) { + edm::FinalWaitingTask task; + tbb::task_group group; + iBase->doWorkAsync( + edm::WaitingTaskHolder(group, &task), info, edm::ServiceToken(), s_streamID0, iContext, nullptr); + do { + group.wait(); + } while (not task.done()); + if (auto e = task.exceptionPtr()) { + std::rethrow_exception(*e); + } + } + template void runTest(Expectations const& iExpect); @@ -364,25 +398,6 @@ bool testStreamProducer::EndLumiSummaryProd::m_globalEndLuminosityBlockSummaryCa ///registration of the test so that the runner can find it CPPUNIT_TEST_SUITE_REGISTRATION(testStreamProducer); -namespace { - struct ShadowStreamID { - constexpr ShadowStreamID() : value(0) {} - unsigned int value; - }; - - union IDUnion { - IDUnion() : m_shadow() {} - ShadowStreamID m_shadow; - edm::StreamID m_id; - }; -} // namespace -static edm::StreamID makeID() { - IDUnion u; - assert(u.m_id.value() == 0); - return u.m_id; -} -static const edm::StreamID s_streamID0 = makeID(); - testStreamProducer::testStreamProducer() : m_prodReg(new edm::ProductRegistry{}), m_idHelper(new edm::BranchIDListHelper{}), @@ -425,26 +440,26 @@ testStreamProducer::testStreamProducer() typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kStreamBeginRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kGlobalBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kStreamBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kEvent] = [this](edm::Worker* iBase) { @@ -453,33 +468,33 @@ testStreamProducer::testStreamProducer() edm::ParentContext parentContext(&streamContext); iBase->setActivityRegistry(m_actReg); edm::EventTransitionInfo info(*m_ep, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kStreamEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kGlobalEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kStreamEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kGlobalEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); - iBase->doWork(info, s_streamID0, parentContext, nullptr); + doWork(iBase, info, parentContext); }; m_transToFunc[Trans::kEndStream] = [](edm::Worker* iBase) { @@ -519,6 +534,8 @@ namespace { template void testStreamProducer::testTransitions(std::shared_ptr iMod, Expectations const& iExpect) { + tbb::global_control control(tbb::global_control::max_allowed_parallelism, 1); + edm::WorkerT w{iMod, m_desc, nullptr}; for (auto& keyVal : m_transToFunc) { testTransition(&w, keyVal.first, iExpect, keyVal.second); diff --git a/FWCore/Framework/test/stubs/TestGlobalAnalyzers.cc b/FWCore/Framework/test/stubs/TestGlobalAnalyzers.cc index 0c8a75e357997..06594397a930f 100644 --- a/FWCore/Framework/test/stubs/TestGlobalAnalyzers.cc +++ b/FWCore/Framework/test/stubs/TestGlobalAnalyzers.cc @@ -158,7 +158,13 @@ namespace edmtest { class LumiIntAnalyzer : public edm::global::EDAnalyzer> { public: explicit LumiIntAnalyzer(edm::ParameterSet const& p) - : trans_(p.getParameter("transitions")), cvalue_(p.getParameter("cachevalue")) {} + : trans_(p.getParameter("transitions")), cvalue_(p.getParameter("cachevalue")) { + // just to create a data dependence + auto const& tag = p.getParameter("moduleLabel"); + if (not tag.label().empty()) { + consumes(tag); + } + } const unsigned int trans_; const unsigned int cvalue_; mutable std::atomic m_count{0}; diff --git a/FWCore/Framework/test/stubs/TestGlobalProducers.cc b/FWCore/Framework/test/stubs/TestGlobalProducers.cc index 6b43b60808274..03fd019d42b83 100644 --- a/FWCore/Framework/test/stubs/TestGlobalProducers.cc +++ b/FWCore/Framework/test/stubs/TestGlobalProducers.cc @@ -786,13 +786,18 @@ namespace edmtest { } }; - class TestAccumulator : public edm::global::EDProducer { + class TestAccumulator : public edm::global::EDProducer { public: explicit TestAccumulator(edm::ParameterSet const& p) - : m_expectedCount(p.getParameter("expectedCount")) {} + : m_expectedCount(p.getParameter("expectedCount")), + m_putToken(produces()) {} void accumulate(edm::StreamID iID, edm::Event const&, edm::EventSetup const&) const override { ++m_count; } + void globalEndLuminosityBlockProduce(edm::LuminosityBlock& l, edm::EventSetup const&) const override { + l.emplace(m_putToken, m_count.load()); + } + ~TestAccumulator() { if (m_count.load() != m_expectedCount) { throw cms::Exception("TestCount") @@ -802,6 +807,7 @@ namespace edmtest { mutable std::atomic m_count{0}; const unsigned int m_expectedCount; + const edm::EDPutTokenT m_putToken; }; } // namespace global } // namespace edmtest diff --git a/FWCore/Framework/test/stubs/TestLimitedAnalyzers.cc b/FWCore/Framework/test/stubs/TestLimitedAnalyzers.cc index 0cdf8b14af93b..b702c93acc500 100644 --- a/FWCore/Framework/test/stubs/TestLimitedAnalyzers.cc +++ b/FWCore/Framework/test/stubs/TestLimitedAnalyzers.cc @@ -167,7 +167,13 @@ namespace edmtest { : edm::limited::EDAnalyzerBase(p), edm::limited::EDAnalyzer>(p), trans_(p.getParameter("transitions")), - cvalue_(p.getParameter("cachevalue")) {} + cvalue_(p.getParameter("cachevalue")) { + // just to create a data dependence + auto const& tag = p.getParameter("moduleLabel"); + if (not tag.label().empty()) { + consumes(tag); + } + } const unsigned int trans_; const unsigned int cvalue_; mutable std::atomic m_count{0}; diff --git a/FWCore/Framework/test/stubs/TestLimitedProducers.cc b/FWCore/Framework/test/stubs/TestLimitedProducers.cc index 916fe13cd3439..28d968715b86e 100644 --- a/FWCore/Framework/test/stubs/TestLimitedProducers.cc +++ b/FWCore/Framework/test/stubs/TestLimitedProducers.cc @@ -823,15 +823,20 @@ namespace edmtest { } }; - class TestAccumulator : public edm::limited::EDProducer { + class TestAccumulator : public edm::limited::EDProducer { public: explicit TestAccumulator(edm::ParameterSet const& p) : edm::limited::EDProducerBase(p), - edm::limited::EDProducer(p), - m_expectedCount(p.getParameter("expectedCount")) {} + edm::limited::EDProducer(p), + m_expectedCount(p.getParameter("expectedCount")), + m_putToken(produces()) {} void accumulate(edm::StreamID iID, edm::Event const&, edm::EventSetup const&) const override { ++m_count; } + void globalEndLuminosityBlockProduce(edm::LuminosityBlock& l, edm::EventSetup const&) const override { + l.emplace(m_putToken, m_count.load()); + } + ~TestAccumulator() { if (m_count.load() != m_expectedCount) { throw cms::Exception("TestCount") @@ -841,6 +846,7 @@ namespace edmtest { mutable std::atomic m_count{0}; const unsigned int m_expectedCount; + const edm::EDPutTokenT m_putToken; }; } // namespace limited } // namespace edmtest diff --git a/FWCore/Framework/test/stubs/TestModuleDelete.cc b/FWCore/Framework/test/stubs/TestModuleDelete.cc new file mode 100644 index 0000000000000..524a75b24e9e6 --- /dev/null +++ b/FWCore/Framework/test/stubs/TestModuleDelete.cc @@ -0,0 +1,260 @@ +#include "DataFormats/TestObjects/interface/ToyProducts.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/Framework/interface/global/EDAnalyzer.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/stream/EDAnalyzer.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Utilities/interface/EDMException.h" + +#include +#include +#include + +namespace { + // No need to protect, all access is serialized by the framework + std::vector g_constructed; + std::vector g_destructed; + + std::vector g_lumi_constructed; + std::vector g_lumi_destructed; + + std::vector g_run_constructed; + std::vector g_run_destructed; + + std::vector g_process_constructed; + std::vector g_process_destructed; +} // namespace + +namespace edmtest { + // Similar to FailingProducer, but set a flag when deleted + class TestModuleDeleteProducer : public edm::global::EDProducer<> { + public: + explicit TestModuleDeleteProducer(edm::ParameterSet const& p) + : moduleLabel_{p.getParameter("@module_label")} { + for (const auto& tag : p.getUntrackedParameter>("srcBeginProcess")) { + consumes(tag); + } + for (const auto& tag : p.getUntrackedParameter>("srcBeginRun")) { + consumes(tag); + } + for (const auto& tag : p.getUntrackedParameter>("srcBeginLumi")) { + consumes(tag); + } + for (const auto& tag : p.getUntrackedParameter>("srcEvent")) { + consumes(tag); + } + produces(); + g_constructed.push_back(moduleLabel_); + } + ~TestModuleDeleteProducer() override { g_destructed.push_back(moduleLabel_); } + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.addUntracked>("srcBeginProcess", std::vector{}); + desc.addUntracked>("srcBeginRun", std::vector{}); + desc.addUntracked>("srcBeginLumi", std::vector{}); + desc.addUntracked>("srcEvent", std::vector{}); + descriptions.addDefault(desc); + } + void produce(edm::StreamID, edm::Event& e, edm::EventSetup const& c) const override { + throw edm::Exception(edm::errors::NotFound) << "Intentional 'NotFound' exception for testing purposes\n"; + } + + private: + std::string moduleLabel_; + }; + + class TestModuleDeleteInLumiProducer : public edm::global::EDProducer { + public: + explicit TestModuleDeleteInLumiProducer(edm::ParameterSet const& p) + : moduleLabel_{p.getParameter("@module_label")} { + for (const auto& tag : p.getUntrackedParameter>("srcBeginProcess")) { + consumes(tag); + } + for (const auto& tag : p.getUntrackedParameter>("srcBeginRun")) { + consumes(tag); + } + for (const auto& tag : p.getUntrackedParameter>("srcBeginLumi")) { + consumes(tag); + } + for (const auto& tag : p.getUntrackedParameter>("srcEvent")) { + consumes(tag); + } + produces(); + g_lumi_constructed.push_back(moduleLabel_); + } + ~TestModuleDeleteInLumiProducer() override { g_lumi_destructed.push_back(moduleLabel_); } + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.addUntracked>("srcBeginProcess", std::vector{}); + desc.addUntracked>("srcBeginRun", std::vector{}); + desc.addUntracked>("srcBeginLumi", std::vector{}); + desc.addUntracked>("srcEvent", std::vector{}); + descriptions.addDefault(desc); + } + void globalBeginLuminosityBlockProduce(edm::LuminosityBlock&, edm::EventSetup const&) const override { + throw edm::Exception(edm::errors::NotFound) << "Intentional 'NotFound' exception for testing purposes\n"; + } + void produce(edm::StreamID, edm::Event& e, edm::EventSetup const& c) const override { + throw edm::Exception(edm::errors::NotFound) << "Intentional 'NotFound' exception for testing purposes\n"; + } + + private: + std::string moduleLabel_; + }; + + class TestModuleDeleteInRunProducer : public edm::global::EDProducer { + public: + explicit TestModuleDeleteInRunProducer(edm::ParameterSet const& p) + : moduleLabel_{p.getParameter("@module_label")} { + for (const auto& tag : p.getUntrackedParameter>("srcBeginProcess")) { + consumes(tag); + } + for (const auto& tag : p.getUntrackedParameter>("srcBeginRun")) { + consumes(tag); + } + for (const auto& tag : p.getUntrackedParameter>("srcBeginLumi")) { + consumes(tag); + } + for (const auto& tag : p.getUntrackedParameter>("srcEvent")) { + consumes(tag); + } + produces(); + g_run_constructed.push_back(moduleLabel_); + } + ~TestModuleDeleteInRunProducer() override { g_run_destructed.push_back(moduleLabel_); } + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.addUntracked>("srcBeginProcess", std::vector{}); + desc.addUntracked>("srcBeginRun", std::vector{}); + desc.addUntracked>("srcBeginLumi", std::vector{}); + desc.addUntracked>("srcEvent", std::vector{}); + descriptions.addDefault(desc); + } + void globalBeginRunProduce(edm::Run&, edm::EventSetup const&) const override { + throw edm::Exception(edm::errors::NotFound) << "Intentional 'NotFound' exception for testing purposes\n"; + } + void produce(edm::StreamID, edm::Event& e, edm::EventSetup const& c) const override { + throw edm::Exception(edm::errors::NotFound) << "Intentional 'NotFound' exception for testing purposes\n"; + } + + private: + std::string moduleLabel_; + }; + + class TestModuleDeleteInProcessProducer : public edm::global::EDProducer { + public: + explicit TestModuleDeleteInProcessProducer(edm::ParameterSet const& p) + : moduleLabel_{p.getParameter("@module_label")} { + for (const auto& tag : p.getUntrackedParameter>("srcBeginRun")) { + consumes(tag); + } + for (const auto& tag : p.getUntrackedParameter>("srcBeginLumi")) { + consumes(tag); + } + for (const auto& tag : p.getUntrackedParameter>("srcEvent")) { + consumes(tag); + } + produces(); + g_process_constructed.push_back(moduleLabel_); + } + ~TestModuleDeleteInProcessProducer() override { g_process_destructed.push_back(moduleLabel_); } + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.addUntracked>("srcBeginRun", std::vector{}); + desc.addUntracked>("srcBeginLumi", std::vector{}); + desc.addUntracked>("srcEvent", std::vector{}); + descriptions.addDefault(desc); + } + void beginProcessBlockProduce(edm::ProcessBlock&) const override { + throw edm::Exception(edm::errors::NotFound) << "Intentional 'NotFound' exception for testing purposes\n"; + } + void produce(edm::StreamID, edm::Event& e, edm::EventSetup const& c) const override { + throw edm::Exception(edm::errors::NotFound) << "Intentional 'NotFound' exception for testing purposes\n"; + } + + private: + std::string moduleLabel_; + }; + + class TestModuleDeleteAnalyzer : public edm::global::EDAnalyzer<> { + public: + explicit TestModuleDeleteAnalyzer(edm::ParameterSet const& /*p*/){}; + + void beginJob() override { + if (g_constructed.size() == 0) { + throw cms::Exception("LogicError") + << "No TestModuleDeleteProducer modules constructed in this job, the test is meaningless"; + } + + auto formatException = + [](std::vector& constructed, std::vector& destructed, cms::Exception& ex) { + ex << " Modules constructed but not destructed:\n"; + auto newEnd = std::remove_if(constructed.begin(), constructed.end(), [&](const std::string& label) { + auto found = std::find(destructed.begin(), destructed.end(), label); + if (found != destructed.end()) { + destructed.erase(found); + return true; + } + return false; + }); + constructed.erase(newEnd, constructed.end()); + for (const auto& lab : constructed) { + ex << " " << lab << "\n"; + } + }; + + if (g_constructed.size() != g_destructed.size()) { + cms::Exception ex("Assert"); + ex << "Number of TestModuleDeleteProducer constructors " << g_constructed.size() + << " differs from the number of destructors " << g_destructed.size() << "."; + formatException(g_constructed, g_destructed, ex); + throw ex; + } + + if (g_lumi_constructed.size() == 0) { + throw cms::Exception("LogicError") + << "No TestModuleDeleteInLumiProducer modules constructed in this job, the test is meaningless"; + } + if (g_lumi_constructed.size() != g_lumi_destructed.size()) { + cms::Exception ex("Assert"); + ex << "Number of TestModuleDeleteInLumiProducer constructors " << g_lumi_constructed.size() + << " differs from the number of destructors " << g_lumi_destructed.size() << "."; + formatException(g_lumi_constructed, g_lumi_destructed, ex); + throw ex; + } + + if (g_run_constructed.size() == 0) { + throw cms::Exception("LogicError") + << "No TestModuleDeleteInRunProducer modules constructed in this job, the test is meaningless"; + } + if (g_run_constructed.size() != g_run_destructed.size()) { + cms::Exception ex("Assert"); + ex << "Number of TestModuleDeleteInRunProducer constructors " << g_run_constructed.size() + << " differs from the number of destructors " << g_run_destructed.size() << "."; + formatException(g_run_constructed, g_run_destructed, ex); + throw ex; + } + + if (g_process_constructed.size() == 0) { + throw cms::Exception("LogicError") + << "No TestModuleDeleteInProcessProducer modules constructed in this job, the test is meaningless"; + } + if (g_process_constructed.size() != g_process_destructed.size()) { + cms::Exception ex("Assert"); + ex << "Number of TestModuleDeleteInProcessProducer constructors " << g_process_constructed.size() + << " differs from the number of destructors " << g_process_destructed.size() << "."; + formatException(g_process_constructed, g_process_destructed, ex); + throw ex; + } + } + + void analyze(edm::StreamID, edm::Event const& e, edm::EventSetup const& c) const override {} + }; +} // namespace edmtest + +DEFINE_FWK_MODULE(edmtest::TestModuleDeleteProducer); +DEFINE_FWK_MODULE(edmtest::TestModuleDeleteInLumiProducer); +DEFINE_FWK_MODULE(edmtest::TestModuleDeleteInRunProducer); +DEFINE_FWK_MODULE(edmtest::TestModuleDeleteInProcessProducer); +DEFINE_FWK_MODULE(edmtest::TestModuleDeleteAnalyzer); diff --git a/FWCore/Framework/test/stubs/TestOneAnalyzers.cc b/FWCore/Framework/test/stubs/TestOneAnalyzers.cc index 94043349a3e3c..29674a6749e4d 100644 --- a/FWCore/Framework/test/stubs/TestOneAnalyzers.cc +++ b/FWCore/Framework/test/stubs/TestOneAnalyzers.cc @@ -93,7 +93,13 @@ namespace edmtest { class WatchLumiBlocksAnalyzer : public edm::one::EDAnalyzer { public: - explicit WatchLumiBlocksAnalyzer(edm::ParameterSet const& p) : trans_(p.getParameter("transitions")) {} + explicit WatchLumiBlocksAnalyzer(edm::ParameterSet const& p) : trans_(p.getParameter("transitions")) { + // just to create a data dependence + auto const& tag = p.getParameter("moduleLabel"); + if (not tag.label().empty()) { + consumes(tag); + } + } const unsigned int trans_; bool bl = false; bool el = false; diff --git a/FWCore/Framework/test/stubs/TestOneProducers.cc b/FWCore/Framework/test/stubs/TestOneProducers.cc index 95c349048a54d..eef2ab1bf3f35 100644 --- a/FWCore/Framework/test/stubs/TestOneProducers.cc +++ b/FWCore/Framework/test/stubs/TestOneProducers.cc @@ -550,13 +550,18 @@ namespace edmtest { } }; - class TestAccumulator : public edm::one::EDProducer { + class TestAccumulator : public edm::one::EDProducer { public: explicit TestAccumulator(edm::ParameterSet const& p) - : m_expectedCount(p.getParameter("expectedCount")) {} + : m_expectedCount(p.getParameter("expectedCount")), + m_putToken(produces()) {} void accumulate(edm::Event const&, edm::EventSetup const&) override { ++m_count; } + void endLuminosityBlockProduce(edm::LuminosityBlock& l, edm::EventSetup const&) override { + l.emplace(m_putToken, m_count.load()); + } + ~TestAccumulator() { if (m_count.load() != m_expectedCount) { throw cms::Exception("TestCount") @@ -566,6 +571,7 @@ namespace edmtest { mutable std::atomic m_count{0}; const unsigned int m_expectedCount; + const edm::EDPutTokenT m_putToken; }; } // namespace one diff --git a/FWCore/Framework/test/stubs/TestStreamAnalyzers.cc b/FWCore/Framework/test/stubs/TestStreamAnalyzers.cc index d2bbbccfe247b..e13523b8bdbfd 100644 --- a/FWCore/Framework/test/stubs/TestStreamAnalyzers.cc +++ b/FWCore/Framework/test/stubs/TestStreamAnalyzers.cc @@ -177,6 +177,11 @@ namespace edmtest { trans_ = p.getParameter("transitions"); cvalue_ = p.getParameter("cachevalue"); m_count = 0; + // just to create a data dependence + auto const& tag = p.getParameter("moduleLabel"); + if (not tag.label().empty()) { + consumes(tag); + } } void analyze(edm::Event const&, edm::EventSetup const&) override { diff --git a/FWCore/Framework/test/stubs/TestStreamProducers.cc b/FWCore/Framework/test/stubs/TestStreamProducers.cc index 5c7f79d3069e2..8b97fd5c3fb58 100644 --- a/FWCore/Framework/test/stubs/TestStreamProducers.cc +++ b/FWCore/Framework/test/stubs/TestStreamProducers.cc @@ -921,14 +921,20 @@ namespace edmtest { //Using mutable since we want to update the value. mutable std::atomic m_value; mutable std::atomic m_expectedValue; + // Set only in constructor, framework runs constructors serially + CMS_THREAD_SAFE mutable edm::EDPutTokenT m_putToken; }; - class TestAccumulator : public edm::stream::EDProducer, edm::Accumulator> { + class TestAccumulator + : public edm::stream::EDProducer, edm::Accumulator, edm::EndLuminosityBlockProducer> { public: static std::atomic m_expectedCount; explicit TestAccumulator(edm::ParameterSet const& p, Count const* iCount) { iCount->m_expectedValue = p.getParameter("expectedCount"); + if (iCount->m_putToken.isUninitialized()) { + iCount->m_putToken = produces(); + } } static std::unique_ptr initializeGlobalCache(edm::ParameterSet const&) { @@ -937,6 +943,13 @@ namespace edmtest { void accumulate(edm::Event const&, edm::EventSetup const&) override { ++(globalCache()->m_value); } + static void globalEndLuminosityBlockProduce(edm::LuminosityBlock& l, + edm::EventSetup const&, + LuminosityBlockContext const* ctx) { + Count const* count = ctx->global(); + l.emplace(count->m_putToken, count->m_value.load()); + } + static void globalEndJob(Count const* iCount) { if (iCount->m_value != iCount->m_expectedValue) { throw cms::Exception("CountEvents") << "Number of events seen = " << iCount->m_value diff --git a/FWCore/Framework/test/stubs/TestTBBTasksAnalyzer.cc b/FWCore/Framework/test/stubs/TestTBBTasksAnalyzer.cc index bb59575e59746..890f09230a163 100644 --- a/FWCore/Framework/test/stubs/TestTBBTasksAnalyzer.cc +++ b/FWCore/Framework/test/stubs/TestTBBTasksAnalyzer.cc @@ -20,10 +20,11 @@ #include #include #include -#include "tbb/task.h" +#include "tbb/task_group.h" +#include "tbb/task_arena.h" // user include files -#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -31,21 +32,20 @@ #include "FWCore/Utilities/interface/Exception.h" -#include "FWCore/Utilities/interface/propagate_const.h" - // // class decleration // -class TestTBBTasksAnalyzer : public edm::EDAnalyzer { +class TestTBBTasksAnalyzer : public edm::one::EDAnalyzer<> { public: explicit TestTBBTasksAnalyzer(const edm::ParameterSet&); - ~TestTBBTasksAnalyzer(); + ~TestTBBTasksAnalyzer() override; - virtual void analyze(const edm::Event&, const edm::EventSetup&); + virtual void analyze(const edm::Event&, const edm::EventSetup&) override; private: - virtual void endJob(); + virtual void endJob() override; + unsigned int startTasks(unsigned int iNTasks, unsigned int iSleepTime) const; unsigned int m_nTasksToRun; unsigned int m_expectedNumberOfSimultaneousTasks; unsigned int m_maxCountedTasks; @@ -53,50 +53,6 @@ class TestTBBTasksAnalyzer : public edm::EDAnalyzer { // ----------member data --------------------------- }; -namespace { - class WaitTask : public tbb::task { - public: - WaitTask(unsigned int iSleepUSecs, std::atomic* iCount, std::atomic* iMaxCount) - : m_usecondsToSleep(iSleepUSecs), m_count(iCount), m_maxCount(iMaxCount) {} - tbb::task* execute() { - unsigned int c = ++(*m_count); - __sync_synchronize(); - while (true) { - unsigned int mc = *m_maxCount; - if (c > mc) { - if (m_maxCount->compare_exchange_strong(mc, c)) { - break; - } - } else { - break; - } - } - usleep(m_usecondsToSleep); - --(*m_count); - return 0; - } - - private: - unsigned int m_usecondsToSleep; - edm::propagate_const*> m_count; - edm::propagate_const*> m_maxCount; - }; - - unsigned int startTasks(unsigned int iNTasks, unsigned int iSleepTime) { - std::atomic count{0}; - std::atomic maxCount{0}; - tbb::task* sync = new (tbb::task::allocate_root()) tbb::empty_task; - sync->set_ref_count(iNTasks + 1); - for (unsigned int i = 0; i < iNTasks; ++i) { - tbb::task* t = new (sync->allocate_child()) WaitTask(iSleepTime, &count, &maxCount); - sync->spawn(*t); - } - sync->wait_for_all(); - sync->destroy(*sync); - return maxCount.load(); - } - -} // namespace // // constants, enums and typedefs // @@ -134,6 +90,32 @@ void TestTBBTasksAnalyzer::analyze(const edm::Event&, const edm::EventSetup& iSe } } +unsigned int TestTBBTasksAnalyzer::startTasks(unsigned int iNTasks, unsigned int iSleepTime) const { + std::atomic count{0}; + std::atomic maxCount{0}; + tbb::task_group grp; + + for (unsigned int i = 0; i < iNTasks; ++i) { + grp.run([&]() { + unsigned int c = ++count; + while (true) { + unsigned int mc = maxCount.load(); + if (c > mc) { + if (maxCount.compare_exchange_strong(mc, c)) { + break; + } + } else { + break; + } + } + usleep(m_usecondsToSleep); + --(count); + }); + } + grp.wait(); + return maxCount.load(); +} + void TestTBBTasksAnalyzer::endJob() { if (((m_expectedNumberOfSimultaneousTasks - 1) > m_maxCountedTasks) || (m_maxCountedTasks > m_expectedNumberOfSimultaneousTasks)) { diff --git a/FWCore/Framework/test/stubs/TestTriggerNames.cc b/FWCore/Framework/test/stubs/TestTriggerNames.cc index e8fafbddc9bc2..feedce7e8a4d9 100644 --- a/FWCore/Framework/test/stubs/TestTriggerNames.cc +++ b/FWCore/Framework/test/stubs/TestTriggerNames.cc @@ -183,7 +183,7 @@ namespace edmtest { // Test this by getting this parameter set and verifying the trigger // paths are the correct size. if (!streamerSource_) { - ParameterSet const& trigpset = parameterSet(*prod[index].provenance(), e.processHistory()); + ParameterSet const& trigpset = parameterSet(prod[index].provenance()->stable(), e.processHistory()); Strings trigpaths = trigpset.getParameter("@trigger_paths"); if (trigpaths.size() != expected_trigger_previous_.size()) { throw cms::Exception("Test Failure") diff --git a/FWCore/Framework/test/stubs/ToyAnalyzers.cc b/FWCore/Framework/test/stubs/ToyAnalyzers.cc index d01ed1893d3f5..a82e0c4b0ac56 100644 --- a/FWCore/Framework/test/stubs/ToyAnalyzers.cc +++ b/FWCore/Framework/test/stubs/ToyAnalyzers.cc @@ -18,6 +18,7 @@ Toy EDAnalyzers for testing purposes only. #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/Exception.h" #include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/Utilities/interface/transform.h" // #include #include @@ -102,6 +103,85 @@ namespace edmtest { std::vector> m_tokens; }; + //-------------------------------------------------------------------- + // + template + class GenericAnalyzerT : public edm::global::EDAnalyzer<> { + public: + GenericAnalyzerT(edm::ParameterSet const& iPSet) + : tokensBeginProcess_(edm::vector_transform( + iPSet.getUntrackedParameter>("srcBeginProcess"), + [this](edm::InputTag const& tag) { return this->consumes(tag); })), + tokensBeginRun_( + edm::vector_transform(iPSet.getUntrackedParameter>("srcBeginRun"), + [this](edm::InputTag const& tag) { return this->consumes(tag); })), + tokensBeginLumi_( + edm::vector_transform(iPSet.getUntrackedParameter>("srcBeginLumi"), + [this](edm::InputTag const& tag) { return this->consumes(tag); })), + tokensEvent_(edm::vector_transform(iPSet.getUntrackedParameter>("srcEvent"), + [this](edm::InputTag const& tag) { return this->consumes(tag); })), + tokensEndLumi_( + edm::vector_transform(iPSet.getUntrackedParameter>("srcEndLumi"), + [this](edm::InputTag const& tag) { return this->consumes(tag); })), + tokensEndRun_( + edm::vector_transform(iPSet.getUntrackedParameter>("srcEndRun"), + [this](edm::InputTag const& tag) { return this->consumes(tag); })), + tokensEndProcess_(edm::vector_transform( + iPSet.getUntrackedParameter>("srcEndProcess"), + [this](edm::InputTag const& tag) { return this->consumes(tag); })), + shouldExist_(iPSet.getUntrackedParameter("inputShouldExist")), + shouldBeMissing_(iPSet.getUntrackedParameter("inputShouldBeMissing")) { + if (shouldExist_ and shouldBeMissing_) { + throw cms::Exception("Configuration") + << "inputShouldExist and inputShouldBeMissing both can not be set to True"; + } + } + + void analyze(edm::StreamID, edm::Event const& iEvent, edm::EventSetup const&) const override { + for (auto const& token : tokensEvent_) { + if (shouldExist_) { + (void)iEvent.get(token); + } else if (shouldBeMissing_) { + auto h = iEvent.getHandle(token); + if (h.isValid()) { + edm::EDConsumerBase::Labels labels; + labelsForToken(token, labels); + throw cms::Exception("ProductExists") + << "Product " << labels.module << ":" << labels.productInstance << ":" << labels.process + << " exists, but expectation was it should be missing"; + } + } + } + } + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.addUntracked>("srcBeginProcess", std::vector{}); + desc.addUntracked>("srcBeginRun", std::vector{}); + desc.addUntracked>("srcBeginLumi", std::vector{}); + desc.addUntracked>("srcEvent", std::vector{}); + desc.addUntracked>("srcEndLumi", std::vector{}); + desc.addUntracked>("srcEndRun", std::vector{}); + desc.addUntracked>("srcEndProcess", std::vector{}); + desc.addUntracked("inputShouldExist", false); + desc.addUntracked("inputShouldBeMissing", false); + descriptions.addDefault(desc); + } + + private: + const std::vector> tokensBeginProcess_; + const std::vector> tokensBeginRun_; + const std::vector> tokensBeginLumi_; + const std::vector> tokensEvent_; + const std::vector> tokensEndLumi_; + const std::vector> tokensEndRun_; + const std::vector> tokensEndProcess_; + const bool shouldExist_; + const bool shouldBeMissing_; + }; + using GenericIntsAnalyzer = GenericAnalyzerT; + using GenericUInt64Analyzer = GenericAnalyzerT; + //-------------------------------------------------------------------- // class IntConsumingAnalyzer : public edm::global::EDAnalyzer<> { @@ -327,6 +407,8 @@ using edmtest::SimpleViewAnalyzer; DEFINE_FWK_MODULE(NonAnalyzer); DEFINE_FWK_MODULE(IntTestAnalyzer); DEFINE_FWK_MODULE(MultipleIntsAnalyzer); +DEFINE_FWK_MODULE(edmtest::GenericIntsAnalyzer); +DEFINE_FWK_MODULE(edmtest::GenericUInt64Analyzer); DEFINE_FWK_MODULE(IntConsumingAnalyzer); DEFINE_FWK_MODULE(edmtest::IntFromRunConsumingAnalyzer); DEFINE_FWK_MODULE(ConsumingStreamAnalyzer); diff --git a/FWCore/Framework/test/stubs/ToyIntProducers.cc b/FWCore/Framework/test/stubs/ToyIntProducers.cc index ea8367597674d..aa568acd426a7 100644 --- a/FWCore/Framework/test/stubs/ToyIntProducers.cc +++ b/FWCore/Framework/test/stubs/ToyIntProducers.cc @@ -53,6 +53,27 @@ namespace edmtest { // We throw an edm exception with a configurable action. throw edm::Exception(edm::errors::NotFound) << "Intentional 'NotFound' exception for testing purposes\n"; } + //-------------------------------------------------------------------- + // + // throws an exception. + // Announces an IntProduct but does not produce one; + // every call to FailingInLumiProducer::produce throws a cms exception + // + class FailingInLumiProducer : public edm::global::EDProducer { + public: + explicit FailingInLumiProducer(edm::ParameterSet const& /*p*/) { + produces(); + } + void produce(edm::StreamID, edm::Event& e, edm::EventSetup const& c) const override; + + void globalBeginLuminosityBlockProduce(edm::LuminosityBlock&, edm::EventSetup const&) const override; + }; + + void FailingInLumiProducer::produce(edm::StreamID, edm::Event&, edm::EventSetup const&) const {} + void FailingInLumiProducer::globalBeginLuminosityBlockProduce(edm::LuminosityBlock&, edm::EventSetup const&) const { + // We throw an edm exception with a configurable action. + throw edm::Exception(edm::errors::NotFound) << "Intentional 'NotFound' exception for testing purposes\n"; + } //-------------------------------------------------------------------- // @@ -716,6 +737,56 @@ namespace edmtest { processBlock.put(token3_, std::make_unique(value_ + 3)); processBlock.put(token4_, std::make_unique(value_ + 4)); } + + //-------------------------------------------------------------------- + // + // Produces an IntProduct instance, the module must get run, otherwise an exception is thrown + class MustRunIntProducer : public edm::global::EDProducer<> { + public: + explicit MustRunIntProducer(edm::ParameterSet const& p) + : moduleLabel_{p.getParameter("@module_label")}, + token_{produces()}, + value_(p.getParameter("ivalue")), + produce_{p.getParameter("produce")}, + mustRunEvent_{p.getParameter("mustRunEvent")} {} + ~MustRunIntProducer() { + if (not wasRunEndJob_) { + throw cms::Exception("NotRun") << "This module (" << moduleLabel_ + << ") should have run for endJob transition, but it did not"; + } + } + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("ivalue"); + desc.add("produce", true); + desc.add("mustRunEvent", true) + ->setComment( + "If set to false, the endJob() is still required to be called to check that the module was not deleted " + "early on"); + descriptions.addDefault(desc); + } + void produce(edm::StreamID, edm::Event& e, edm::EventSetup const& c) const override { + wasRunEvent_ = true; + if (produce_) { + e.emplace(token_, value_); + } + } + void endJob() override { + wasRunEndJob_ = true; + if (mustRunEvent_ and not wasRunEvent_) { + throw cms::Exception("NotRun") << "This module should have run for event transitions, but it did not"; + } + } + + private: + const std::string moduleLabel_; + const edm::EDPutTokenT token_; + const int value_; + const bool produce_; + const bool mustRunEvent_; + mutable std::atomic wasRunEndJob_ = false; + mutable std::atomic wasRunEvent_ = false; + }; } // namespace edmtest using edmtest::AddIntsProducer; @@ -737,6 +808,7 @@ using edmtest::NonEventIntProducer; using edmtest::NonProducer; using edmtest::TransientIntProducer; DEFINE_FWK_MODULE(FailingProducer); +DEFINE_FWK_MODULE(edmtest::FailingInLumiProducer); DEFINE_FWK_MODULE(edmtest::FailingInRunProducer); DEFINE_FWK_MODULE(NonProducer); DEFINE_FWK_MODULE(IntProducer); @@ -755,3 +827,4 @@ DEFINE_FWK_MODULE(ManyIntWhenRegisteredProducer); DEFINE_FWK_MODULE(NonEventIntProducer); DEFINE_FWK_MODULE(IntProducerBeginProcessBlock); DEFINE_FWK_MODULE(IntProducerEndProcessBlock); +DEFINE_FWK_MODULE(edmtest::MustRunIntProducer); diff --git a/FWCore/Framework/test/test_emptyEndPathWithTask_cfg.py b/FWCore/Framework/test/test_emptyEndPathWithTask_cfg.py index 5eb7ab27eea15..07c9cb1c314aa 100644 --- a/FWCore/Framework/test/test_emptyEndPathWithTask_cfg.py +++ b/FWCore/Framework/test/test_emptyEndPathWithTask_cfg.py @@ -7,6 +7,7 @@ input = cms.untracked.int32(3) ) +# note that these modules get deleted, but the module dependence check is made first process.intProducer1 = cms.EDProducer("IntProducer", ivalue = cms.int32(1)) process.intProducer2 = cms.EDProducer("AddIntsProducer", labels = cms.VInputTag("intProducer1")) diff --git a/FWCore/Framework/test/test_emptyPathWithTask_cfg.py b/FWCore/Framework/test/test_emptyPathWithTask_cfg.py index 35de48011f552..8827f99ce8834 100644 --- a/FWCore/Framework/test/test_emptyPathWithTask_cfg.py +++ b/FWCore/Framework/test/test_emptyPathWithTask_cfg.py @@ -7,6 +7,7 @@ input = cms.untracked.int32(3) ) +# note that these modules get deleted, but the module dependence check is made first process.intProducer1 = cms.EDProducer("IntProducer", ivalue = cms.int32(1)) process.intProducer2 = cms.EDProducer("AddIntsProducer", labels = cms.VInputTag("intProducer1")) diff --git a/FWCore/Framework/test/test_global_modules_cfg.py b/FWCore/Framework/test/test_global_modules_cfg.py index 5a177d5deb58e..a3c13335b8e1f 100644 --- a/FWCore/Framework/test/test_global_modules_cfg.py +++ b/FWCore/Framework/test/test_global_modules_cfg.py @@ -15,7 +15,6 @@ numberOfThreads = cms.untracked.uint32(nStreams) ) - process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(nEvt) ) @@ -107,6 +106,8 @@ process.LumiIntAn = cms.EDAnalyzer("edmtest::global::LumiIntAnalyzer", transitions = cms.int32(int(nEvt+2*(nEvt/nEvtLumi))) ,cachevalue = cms.int32(nEvtLumi) + # needed to avoid deleting TestAccumulator1 + ,moduleLabel = cms.InputTag("TestAccumulator1") ) process.RunSumIntAn = cms.EDAnalyzer("edmtest::global::RunSummaryIntAnalyzer", diff --git a/FWCore/Framework/test/test_limited_modules_cfg.py b/FWCore/Framework/test/test_limited_modules_cfg.py index 9a05413e706c5..c4bc68fbcb3ec 100644 --- a/FWCore/Framework/test/test_limited_modules_cfg.py +++ b/FWCore/Framework/test/test_limited_modules_cfg.py @@ -124,6 +124,8 @@ concurrencyLimit = cms.untracked.uint32(1), transitions = cms.int32(nEvt+2*int(nEvt/nEvtLumi)) ,cachevalue = cms.int32(nEvtLumi) + # needed to avoid deleting TestAccumulator1 + ,moduleLabel = cms.InputTag("TestAccumulator1") ) process.RunSumIntAn = cms.EDAnalyzer("edmtest::limited::RunSummaryIntAnalyzer", diff --git a/FWCore/Framework/test/test_module_delete_cfg.py b/FWCore/Framework/test/test_module_delete_cfg.py new file mode 100644 index 0000000000000..c8304da748b40 --- /dev/null +++ b/FWCore/Framework/test/test_module_delete_cfg.py @@ -0,0 +1,207 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("TESTMODULEDELETE") + +process.maxEvents.input = 8 +process.source = cms.Source("EmptySource") + +#process.Tracer = cms.Service("Tracer") + +# Cases to test +# - event/lumi/run product consumed, module kept +# - event/lumi/run product not consumed, module deleted +# - event product not consumed but module in Path, module kept +# - event/lumi/run product with the same module label but different instance name, module deleted +# - event/lumi/run product with the same module label and instance name but with skipCurrentProcess, module deleted +# - DAG of event/lumi/run producers that are not consumed by an always-running module, whole DAG deleted +# - DAG of event(/lumi/run) producers that are partly consumed (kept) and partly non-consumed (delete) +# - EDAlias with one instance consumed (original producer kept) and another non-consumed (original producer deleted) +# - SwitchProducer non-chosen case deleted + +intEventProducer = cms.EDProducer("IntProducer", ivalue = cms.int32(1)) +intNonEventProducer = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(1)) +intEventProducerMustRun = cms.EDProducer("edmtest::MustRunIntProducer", ivalue = cms.int32(1)) +intEventConsumer = cms.EDAnalyzer("IntTestAnalyzer", + moduleLabel = cms.untracked.InputTag("producerEventConsumed"), + valueMustMatch = cms.untracked.int32(1) +) +def nonEventConsumer(transition, sourcePattern, expected): + transCap = transition[0].upper() + transition[1:] + runOrLumiBlock = transCap + if "Lumi" in runOrLumiBlock: + runOrLumiBlock = runOrLumiBlock+"nosityBlock" + ret = intNonEventProducer.clone() + setattr(ret, "consumes%s"%runOrLumiBlock, cms.InputTag(sourcePattern%transCap, transition)) + setattr(ret, "expect%s"%runOrLumiBlock, cms.untracked.int32(expected)) + return ret + +process.producerEventConsumed = intEventProducer.clone(ivalue = 1) +process.producerBeginLumiConsumed = intNonEventProducer.clone(ivalue = 2) +process.producerEndLumiConsumed = intNonEventProducer.clone(ivalue = 3) +process.producerBeginRunConsumed = intNonEventProducer.clone(ivalue = 4) +process.producerEndRunConsumed = intNonEventProducer.clone(ivalue = 5) + +process.producerEventNotConsumedInPath = intEventProducerMustRun.clone() + +process.consumerEvent = intEventConsumer.clone(moduleLabel = "producerEventConsumed", valueMustMatch = 1) +process.consumerBeginLumi = nonEventConsumer("beginLumi", "producer%sConsumed", 2) +process.consumerEndLumi = nonEventConsumer("endLumi", "producer%sConsumed", 3) +process.consumerBeginRun = nonEventConsumer("beginRun", "producer%sConsumed", 4) +process.consumerEndRun = nonEventConsumer("endRun", "producer%sConsumed", 5) + +process.producerEventNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteProducer") +process.producerBeginLumiNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteInLumiProducer") +process.producerBeginRunNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteInRunProducer") +process.producerBeginProcessNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteInProcessProducer") + +process.producerEventNotConsumedChain1 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +process.producerEventNotConsumedChain2 = cms.EDProducer("edmtest::TestModuleDeleteProducer", + srcEvent = cms.untracked.VInputTag("producerEventNotConsumedChain1") +) +process.producerEventNotConsumedChain3 = cms.EDProducer("edmtest::TestModuleDeleteProducer", + srcEvent = cms.untracked.VInputTag("producerEventNotConsumedChain1") +) +process.producerEventNotConsumedChain4 = cms.EDProducer("edmtest::TestModuleDeleteProducer", + srcEvent = cms.untracked.VInputTag("producerEventNotConsumedChain2", "producerEventNotConsumedChain3") +) +process.producerEventNotConsumedChain5 = cms.EDProducer("edmtest::TestModuleDeleteInLumiProducer", + srcEvent = cms.untracked.VInputTag("producerEventNotConsumedChain1") +) +process.producerEventNotConsumedChain6 = cms.EDProducer("edmtest::TestModuleDeleteInRunProducer", + srcBeginLumi = cms.untracked.VInputTag("producerEventNotConsumedChain5") +) +process.producerEventNotConsumedChain7 = cms.EDProducer("edmtest::TestModuleDeleteInProcessProducer", + srcBeginRun = cms.untracked.VInputTag("producerEventNotConsumedChain6") +) +process.producerEventNotConsumedChain8 = cms.EDProducer("edmtest::TestModuleDeleteInRunProducer", + srcBeginLumi = cms.untracked.VInputTag("producerEventNotConsumedChain7") +) +process.producerEventNotConsumedChain9 = cms.EDProducer("edmtest::TestModuleDeleteInLumiProducer", + srcBeginRun = cms.untracked.VInputTag("producerEventNotConsumedChain8") +) +process.producerEventNotConsumedChain10 = cms.EDProducer("edmtest::TestModuleDeleteProducer", + srcBeginLumi = cms.untracked.VInputTag("producerEventNotConsumedChain9") +) + +process.producerEventPartiallyConsumedChain1 = intEventProducerMustRun.clone() +process.producerEventPartiallyConsumedChain2 = cms.EDProducer("AddIntsProducer", labels = cms.VInputTag("producerEventPartiallyConsumedChain1")) +process.producerEventPartiallyConsumedChain3 = cms.EDProducer("edmtest::TestModuleDeleteInLumiProducer", + srcEvent = cms.untracked.VInputTag("producerEventPartiallyConsumedChain1") +) +process.producerEventPartiallyConsumedChain4 = cms.EDProducer("edmtest::TestModuleDeleteInLumiProducer", + srcEvent = cms.untracked.VInputTag("producerEventPartiallyConsumedChain2", "producerEventPartiallyConsumedChain4") +) + +process.producerEventAliasNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteProducer") +process.producerEventAliasConsumed = intEventProducerMustRun.clone() +process.producerEventAlias = cms.EDAlias( + producerEventAliasNotConsumed = cms.VPSet( + cms.PSet( + type = cms.string("edmtestIntProduct"), + fromProductInstance = cms.string(""), + toProductInstance = cms.string("notConsumed"), + ) + ), + producerEventAliasConsumed = cms.VPSet( + cms.PSet( + type = cms.string("edmtestIntProduct"), + fromProductInstance = cms.string(""), + toProductInstance = cms.string("consumed"), + ) + ) +) +process.consumerEventAlias = cms.EDAnalyzer("edmtest::GenericIntsAnalyzer", + srcEvent = cms.untracked.VInputTag("producerEventAlias:consumed") +) + +class SwitchProducerTest(cms.SwitchProducer): + def __init__(self, **kargs): + super(SwitchProducerTest,self).__init__( + dict( + test1 = lambda: (True, -10), + test2 = lambda: (True, -9) + ), **kargs) +process.producerEventSwitchProducerNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteProducer") +process.producerEventSwitchProducerConsumed = intEventProducerMustRun.clone() +process.producerEventSwitchProducer = SwitchProducerTest( + test1 = cms.EDProducer("AddIntsProducer", labels = cms.VInputTag("producerEventSwitchProducerNotConsumed")), + test2 = cms.EDProducer("AddIntsProducer", labels = cms.VInputTag("producerEventSwitchProducerConsumed")), +) + +process.consumerNotExist = cms.EDAnalyzer("edmtest::GenericIntsAnalyzer", + inputShouldBeMissing = cms.untracked.bool(True), + srcBeginProcess = cms.untracked.VInputTag( + "producerBeginProcessNotConsumed:doesNotExist", + cms.InputTag("producerBeginProcessNotConsumed", "", cms.InputTag.skipCurrentProcess()) + ), + srcBeginRun = cms.untracked.VInputTag( + "producerBeginRunNotConsumed:doesNotExist", + cms.InputTag("producerBeginRunNotConsumed", "", cms.InputTag.skipCurrentProcess()) + ), + srcBeginLumi = cms.untracked.VInputTag( + "producerBeginLumiNotConsumed:doesNotExist", + cms.InputTag("producerBeginLumiNotConsumed", "", cms.InputTag.skipCurrentProcess()) + ), + srcEvent = cms.untracked.VInputTag( + "producerEventNotConsumed:doesNotExist", + cms.InputTag("producerEventNotConsumed", "", cms.InputTag.skipCurrentProcess()) + ), +) + +process.intAnalyzerDelete = cms.EDAnalyzer("edmtest::TestModuleDeleteAnalyzer") + +process.t = cms.Task( + process.producerEventConsumed, + process.producerBeginLumiConsumed, + process.producerEndLumiConsumed, + process.producerBeginRunConsumed, + process.producerEndRunConsumed, + # + process.producerEventNotConsumed, + process.producerBeginLumiNotConsumed, + process.producerBeginRunNotConsumed, + process.producerBeginProcessNotConsumed, + # + process.producerEventNotConsumedChain1, + process.producerEventNotConsumedChain2, + process.producerEventNotConsumedChain3, + process.producerEventNotConsumedChain4, + process.producerEventNotConsumedChain5, + process.producerEventNotConsumedChain6, + process.producerEventNotConsumedChain7, + process.producerEventNotConsumedChain8, + process.producerEventNotConsumedChain9, + process.producerEventNotConsumedChain10, + # + process.producerEventPartiallyConsumedChain1, + process.producerEventPartiallyConsumedChain3, + process.producerEventPartiallyConsumedChain4, + # + process.producerEventAliasNotConsumed, + process.producerEventAliasConsumed, + # + process.producerEventSwitchProducerNotConsumed, + process.producerEventSwitchProducerConsumed, +) + +process.p = cms.Path( + process.producerEventNotConsumedInPath+ + # + process.consumerEvent+ + process.consumerBeginLumi+ + process.consumerEndLumi+ + process.consumerBeginRun+ + process.consumerEndRun+ + # + process.consumerNotExist+ + # + process.producerEventPartiallyConsumedChain2+ + # + process.consumerEventAlias+ + # + process.producerEventSwitchProducer+ + # + process.intAnalyzerDelete + , + process.t +) diff --git a/FWCore/Framework/test/test_module_delete_dependencygraph_cfg.py b/FWCore/Framework/test/test_module_delete_dependencygraph_cfg.py new file mode 100644 index 0000000000000..0974efa4db6d4 --- /dev/null +++ b/FWCore/Framework/test/test_module_delete_dependencygraph_cfg.py @@ -0,0 +1,186 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("A") + +process.maxEvents.input = 1 +process.source = cms.Source("EmptySource") + +process.load("FWCore.Services.DependencyGraph_cfi") +process.DependencyGraph.fileName = "test_module_delete_dependencygraph.gv" + +intEventProducer = cms.EDProducer("IntProducer", ivalue = cms.int32(1)) +intEventProducerMustRun = cms.EDProducer("edmtest::MustRunIntProducer", ivalue = cms.int32(1), mustRunEvent = cms.bool(True)) +intEventConsumer = cms.EDAnalyzer("IntTestAnalyzer", + moduleLabel = cms.untracked.InputTag("producerEventConsumed"), + valueMustMatch = cms.untracked.int32(1) +) +intGenericConsumer = cms.EDAnalyzer("edmtest::GenericIntsAnalyzer", + srcEvent = cms.untracked.VInputTag(), + inputShouldExist = cms.untracked.bool(True) +) + +process.producerAEventConsumedInB = intEventProducer.clone(ivalue = 1) +process.producerAEventConsumedInBA = intEventProducer.clone(ivalue = 10) + +process.producerEventNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteProducer") +process.producerBeginLumiNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteInLumiProducer") +process.producerBeginRunNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteInRunProducer") +process.producerBeginProcessNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteInProcessProducer") + +# These producers do not get the event transitions for the events +# where the same-name producers in the SubProcesses produce a product. +# Nevertheless, these producers must not be deleted early, because +# their event transitions might get called. +process.producerEventMaybeConsumedInB = intEventProducerMustRun.clone(mustRunEvent=False) +process.producerEventMaybeConsumedInBA = intEventProducerMustRun.clone(mustRunEvent=False) + +process.producerAEventNotConsumedInB = cms.EDProducer("edmtest::TestModuleDeleteProducer") +process.producerAEventNotConsumedInBA = cms.EDProducer("edmtest::TestModuleDeleteProducer") + +process.producerEventConsumedInB1 = intEventProducerMustRun.clone() +process.producerEventConsumedInB2 = intEventProducerMustRun.clone() +process.producerEventConsumedInBA1 = intEventProducerMustRun.clone() +process.producerEventConsumedInBA2 = intEventProducerMustRun.clone() + +process.intAnalyzerDelete = cms.EDAnalyzer("edmtest::TestModuleDeleteAnalyzer") + +process.t = cms.Task( + process.producerAEventConsumedInB, + # + process.producerAEventConsumedInBA, + # + process.producerEventNotConsumed, + process.producerBeginLumiNotConsumed, + process.producerBeginRunNotConsumed, + process.producerBeginProcessNotConsumed, + # + process.producerEventMaybeConsumedInB, + process.producerEventMaybeConsumedInBA, + # + process.producerAEventNotConsumedInB, + process.producerAEventNotConsumedInBA, + # + process.producerEventConsumedInB1, + process.producerEventConsumedInB2, + process.producerEventConsumedInBA1, + process.producerEventConsumedInBA2, +) + +process.p = cms.Path(process.intAnalyzerDelete, process.t) + +#################### +subprocessB = cms.Process("B") +process.addSubProcess( cms.SubProcess( + process = subprocessB, + SelectEvents = cms.untracked.PSet(), + outputCommands = cms.untracked.vstring() +) ) + +subprocessB.consumerEventFromA = intEventConsumer.clone(moduleLabel = "producerAEventConsumedInB", valueMustMatch = 1) + +subprocessB.producerEventNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteProducer") + +subprocessB.producerEventMaybeConsumedInB = intEventProducerMustRun.clone() +subprocessB.producerEventMaybeConsumedInBA = intEventProducerMustRun.clone(mustRunEvent=False) +subprocessB.consumerEventMaybeInB = intGenericConsumer.clone(srcEvent = ["producerEventMaybeConsumedInB"]) + +subprocessB.producerAEventNotConsumedInB = intEventProducerMustRun.clone() +subprocessB.producerAEventNotConsumedInBA = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessB.consumerAEventNotConsumedInB = intGenericConsumer.clone(srcEvent = ["producerAEventNotConsumedInB::B"]) + +subprocessB.producerEventConsumedInB1 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessB.producerEventConsumedInB2 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessB.consumerEventNotConsumedInB1 = intGenericConsumer.clone(srcEvent = ["producerEventConsumedInB1::A"]) +subprocessB.consumerEventNotConsumedInB2 = intGenericConsumer.clone(srcEvent = [cms.InputTag("producerEventConsumedInB2", "", cms.InputTag.skipCurrentProcess())]) +subprocessB.producerBEventConsumedInBA1 = intEventProducerMustRun.clone() +subprocessB.producerBEventConsumedInBA2 = intEventProducerMustRun.clone() + +subprocessB.producerBEventConsumedInB1 = intEventProducerMustRun.clone() +subprocessB.producerBEventConsumedInB2 = intEventProducerMustRun.clone() +subprocessB.producerBEventConsumedInB3 = intEventProducerMustRun.clone() +subprocessB.consumerBEventConsumedInB1 = intGenericConsumer.clone(srcEvent = ["producerBEventConsumedInB1"]) +subprocessB.consumerBEventConsumedInB2 = intGenericConsumer.clone(srcEvent = ["producerBEventConsumedInB2::B"]) +subprocessB.consumerBEventConsumedInB3 = intGenericConsumer.clone(srcEvent = [cms.InputTag("producerBEventConsumedInB3", "", cms.InputTag.currentProcess())]) + + +subprocessB.t = cms.Task( + subprocessB.producerEventNotConsumed, + # + subprocessB.producerEventMaybeConsumedInB, + subprocessB.producerEventMaybeConsumedInBA, + # + subprocessB.producerAEventNotConsumedInB, + subprocessB.producerAEventNotConsumedInBA, + # + subprocessB.producerEventConsumedInB1, + subprocessB.producerEventConsumedInB2, + subprocessB.producerBEventConsumedInBA1, + subprocessB.producerBEventConsumedInBA2, + # + subprocessB.producerBEventConsumedInB1, + subprocessB.producerBEventConsumedInB2, + subprocessB.producerBEventConsumedInB3, +) +subprocessB.p = cms.Path( + subprocessB.consumerEventFromA+ + # + subprocessB.consumerEventMaybeInB+ + # + subprocessB.consumerAEventNotConsumedInB+ + subprocessB.consumerEventNotConsumedInB1+ + subprocessB.consumerEventNotConsumedInB2+ + # + subprocessB.consumerBEventConsumedInB1+ + subprocessB.consumerBEventConsumedInB2+ + subprocessB.consumerBEventConsumedInB3 + ,subprocessB.t +) + +#################### +subprocessBA = cms.Process("BA") +subprocessB.addSubProcess( cms.SubProcess( + process = subprocessBA, + SelectEvents = cms.untracked.PSet(), + outputCommands = cms.untracked.vstring() +) ) + +subprocessBA.consumerEventFromA = intEventConsumer.clone(moduleLabel = "producerAEventConsumedInBA", valueMustMatch = 10) + +subprocessBA.producerEventMaybeConsumedInBA = intEventProducerMustRun.clone() +subprocessBA.consumerEventMaybeInBA = intGenericConsumer.clone(srcEvent = ["producerEventMaybeConsumedInBA"]) + +subprocessBA.producerAEventNotConsumedInBA = intEventProducerMustRun.clone() +subprocessBA.consumerAEventNotConsumedInBA = intGenericConsumer.clone(srcEvent = ["producerAEventNotConsumedInBA::BA"]) + +subprocessBA.producerEventConsumedInBA1 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessBA.producerEventConsumedInBA2 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessBA.producerBEventConsumedInBA1 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessBA.producerBEventConsumedInBA2 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessBA.consumerEventNotConsumedInBA1 = intGenericConsumer.clone(srcEvent = ["producerEventConsumedInBA1::A", + "producerBEventConsumedInBA1::B"]) +subprocessBA.consumerEventNotConsumedInBA2 = intGenericConsumer.clone(srcEvent = [ + cms.InputTag("producerEventConsumedInBA2", "", cms.InputTag.skipCurrentProcess()), + cms.InputTag("producerBEventConsumedInBA2", "", cms.InputTag.skipCurrentProcess()) +]) + +subprocessBA.t = cms.Task( + subprocessBA.producerEventMaybeConsumedInBA, + # + subprocessBA.producerAEventNotConsumedInBA, + # + subprocessBA.producerEventConsumedInBA1, + subprocessBA.producerEventConsumedInBA2, + subprocessBA.producerBEventConsumedInBA1, + subprocessBA.producerBEventConsumedInBA2, +) +subprocessBA.p = cms.Path( + subprocessBA.consumerEventFromA+ + # + subprocessBA.consumerEventMaybeInBA+ + # + subprocessBA.consumerAEventNotConsumedInBA+ + # + subprocessBA.consumerEventNotConsumedInBA1+ + subprocessBA.consumerEventNotConsumedInBA2 + , subprocessBA.t +) diff --git a/FWCore/Framework/test/test_module_delete_disable_cfg.py b/FWCore/Framework/test/test_module_delete_disable_cfg.py new file mode 100644 index 0000000000000..6c53b453a9b1e --- /dev/null +++ b/FWCore/Framework/test/test_module_delete_disable_cfg.py @@ -0,0 +1,26 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("TESTMODULEDELETE") + +process.maxEvents.input = 1 +process.options.deleteNonConsumedUnscheduledModules = False +process.source = cms.Source("EmptySource") + +process.intEventProducer = cms.EDProducer("IntProducer", ivalue = cms.int32(1)) +process.intEventConsumer = cms.EDAnalyzer("IntTestAnalyzer", + moduleLabel = cms.untracked.InputTag("intEventProducer"), + valueMustMatch = cms.untracked.int32(1) +) +process.intProducerNotConsumed = cms.EDProducer("edmtest::MustRunIntProducer", + ivalue = cms.int32(1), + mustRunEvent = cms.bool(False) +) + +process.t = cms.Task( + process.intEventProducer, + process.intProducerNotConsumed +) +process.p = cms.Path( + process.intEventConsumer, + process.t +) diff --git a/FWCore/Framework/test/test_module_delete_improperDependencies_cfg.py b/FWCore/Framework/test/test_module_delete_improperDependencies_cfg.py new file mode 100644 index 0000000000000..a627baa5414ac --- /dev/null +++ b/FWCore/Framework/test/test_module_delete_improperDependencies_cfg.py @@ -0,0 +1,29 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("TESTMODULEDELETE") + +process.maxEvents.input = 8 +process.source = cms.Source("EmptySource") + +process.producerEventNotConsumed1 = cms.EDProducer("edmtest::TestModuleDeleteProducer", + srcEvent = cms.untracked.VInputTag("producerEventNotConsumed2") +) +process.producerEventNotConsumed2 = cms.EDProducer("edmtest::TestModuleDeleteProducer", + srcEvent = cms.untracked.VInputTag("producerEventNotConsumed3") +) +process.producerEventNotConsumed3 = cms.EDProducer("edmtest::TestModuleDeleteProducer", + srcEvent = cms.untracked.VInputTag("producerEventNotConsumed1") +) +process.consumerEvent = cms.EDAnalyzer("edmtest::GenericIntsAnalyzer", + srcEvent = cms.untracked.VInputTag("producerEventNotConsumed3") +) + +process.t = cms.Task( + process.producerEventNotConsumed1, + process.producerEventNotConsumed2, + process.producerEventNotConsumed3, +) +process.p = cms.Path( + process.consumerEvent, + process.t +) diff --git a/FWCore/Framework/test/test_module_delete_looper_cfg.py b/FWCore/Framework/test/test_module_delete_looper_cfg.py new file mode 100644 index 0000000000000..86a5f16887ddc --- /dev/null +++ b/FWCore/Framework/test/test_module_delete_looper_cfg.py @@ -0,0 +1,21 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("TESTMODULEDELETE") + +process.maxEvents.input = 4 +process.source = cms.Source("EmptySource") + +# In presence of looper nothing is deleted +process.producerEventNotConsumed = cms.EDProducer("edmtest::MustRunIntProducer", ivalue = cms.int32(1), mustRunEvent = cms.bool(False)) + +process.pInt = cms.EDProducer("IntProducer", + ivalue = cms.int32(1) +) +#Dummy looper will loop twice +process.looper = cms.Looper("TestModuleChangeLooper", + startingValue = cms.untracked.int32(1), + tag = cms.untracked.InputTag("pInt") +) + +process.t1 = cms.Task(process.producerEventNotConsumed) +process.p1 = cms.Path(process.pInt, process.t1) diff --git a/FWCore/Framework/test/test_module_delete_subprocess_cfg.py b/FWCore/Framework/test/test_module_delete_subprocess_cfg.py new file mode 100644 index 0000000000000..25be66a44bc97 --- /dev/null +++ b/FWCore/Framework/test/test_module_delete_subprocess_cfg.py @@ -0,0 +1,536 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("A") + +process.maxEvents.input = 8 +process.source = cms.Source("EmptySource") + +#process.Tracer = cms.Service("Tracer") + +# Process tree +# A (Process) +# ^ +# \- B +# | ^ +# | \- BA +# | +# \- C +# | +# \- D +# ^ +# \- DA + +# Cases to test +# - event/lumi/run/process product consumed in B or C, module kept +# - event/lumi/run/process product consumed in BA, module kept +# - event/lumi/run/process product not consumed anywhere, module deleted +# - event(/lumi/run) product produced in A and any SubProcess, consumed with empty process name, module kept +# - event(/lumi/run) product produced in A and any SubProcess, consumed with SubProcess name, A module deleted +# - event(/lumi/run) product produced in A and any SubProcess, consumed with A name or skipProcess, SubProcess module deleted +# - event(/lumi/run) product produced in B and consumed in BA, module kept +# - event(/lumi/run) product produced in B and consumed in C, module deleted (and product not found) +# - event(/lumi/run) product producer in A and dropped for SubProcess, module deleted + +intEventProducer = cms.EDProducer("IntProducer", ivalue = cms.int32(1)) +intNonEventProducer = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(1)) +intEventProducerMustRun = cms.EDProducer("edmtest::MustRunIntProducer", ivalue = cms.int32(1), mustRunEvent = cms.bool(True)) +intEventConsumer = cms.EDAnalyzer("IntTestAnalyzer", + moduleLabel = cms.untracked.InputTag("producerEventConsumed"), + valueMustMatch = cms.untracked.int32(1) +) +intGenericConsumer = cms.EDAnalyzer("edmtest::GenericIntsAnalyzer", + srcEvent = cms.untracked.VInputTag(), + inputShouldExist = cms.untracked.bool(True) +) +uint64GenericConsumer = cms.EDAnalyzer("edmtest::GenericUInt64Analyzer", + srcEvent = cms.untracked.VInputTag(), + inputShouldExist = cms.untracked.bool(True) +) + +def nonEventConsumer(transition, sourcePattern, expected): + transCap = transition[0].upper() + transition[1:] + blockName = transCap + if "Lumi" in blockName: + blockName = blockName+"nosityBlock" + ret = intNonEventProducer.clone() + setattr(ret, "consumes%s"%blockName, cms.InputTag(sourcePattern%transCap, transition)) + setattr(ret, "expect%s"%blockName, cms.untracked.int32(expected)) + return ret + +process.producerAEventConsumedInB = intEventProducer.clone(ivalue = 1) +process.producerABeginLumiConsumedInB = intNonEventProducer.clone(ivalue = 2) +process.producerAEndRunConsumedInB = intNonEventProducer.clone(ivalue = 5) +process.producerABeginProcessBlockConsumedInB = intNonEventProducer.clone(ivalue = 6) +process.producerAEndLumiConsumedInC = intNonEventProducer.clone(ivalue = 3) +process.producerABeginRunConsumedInC = intNonEventProducer.clone(ivalue = 4) +process.producerAEndProcessBlockConsumedInC = intNonEventProducer.clone(ivalue = 7) + +process.producerAEventConsumedInBA = intEventProducer.clone(ivalue = 10) +process.producerABeginLumiConsumedInBA = intNonEventProducer.clone(ivalue = 20) +process.producerAEndLumiConsumedInBA = intNonEventProducer.clone(ivalue = 30) +process.producerABeginRunConsumedInBA = intNonEventProducer.clone(ivalue = 40) +process.producerAEndRunConsumedInBA = intNonEventProducer.clone(ivalue = 50) +process.producerABeginProcessBlockConsumedInBA = intNonEventProducer.clone(ivalue = 60) +process.producerAEndProcessBlockConsumedInBA = intNonEventProducer.clone(ivalue = 70) + +process.producerEventNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteProducer") +process.producerBeginLumiNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteInLumiProducer") +process.producerBeginRunNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteInRunProducer") +process.producerBeginProcessBlockNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteInProcessProducer") + +# These producers do not get the event transitions for the events +# where the same-name producers in the SubProcesses produce a product. +# Nevertheless, these producers must not be deleted early, because +# their event transitions might get called. +process.producerEventMaybeConsumedInB = intEventProducerMustRun.clone(mustRunEvent=False) +process.producerEventMaybeConsumedInBA = intEventProducerMustRun.clone(mustRunEvent=False) +process.producerEventMaybeConsumedInC = intEventProducerMustRun.clone(mustRunEvent=False) + +process.producerAEventNotConsumedInB = cms.EDProducer("edmtest::TestModuleDeleteProducer") +process.producerAEventNotConsumedInBA = cms.EDProducer("edmtest::TestModuleDeleteProducer") +process.producerAEventNotConsumedInC = cms.EDProducer("edmtest::TestModuleDeleteProducer") +process.producerAEventNotConsumedInD = cms.EDProducer("edmtest::TestModuleDeleteProducer") + +process.producerEventConsumedInB1 = intEventProducerMustRun.clone() +process.producerEventConsumedInB2 = intEventProducerMustRun.clone() +process.producerEventConsumedInBA1 = intEventProducerMustRun.clone() +process.producerEventConsumedInBA2 = intEventProducerMustRun.clone() +process.producerEventConsumedInC1 = intEventProducerMustRun.clone() +process.producerEventConsumedInC2 = intEventProducerMustRun.clone() + +process.producerANotConsumedChainEvent = cms.EDProducer("edmtest::TestModuleDeleteProducer") +process.producerANotConsumedChainLumi = cms.EDProducer("edmtest::TestModuleDeleteInLumiProducer", + srcEvent = cms.untracked.VInputTag("producerANotConsumedChainEvent") +) +process.producerANotConsumedChainRun = cms.EDProducer("edmtest::TestModuleDeleteInRunProducer", + srcEvent = cms.untracked.VInputTag("producerANotConsumedChainEvent") +) + +process.intAnalyzerDelete = cms.EDAnalyzer("edmtest::TestModuleDeleteAnalyzer") + +process.t = cms.Task( + process.producerAEventConsumedInB, + process.producerABeginLumiConsumedInB, + process.producerAEndRunConsumedInB, + process.producerABeginProcessBlockConsumedInB, + process.producerAEndLumiConsumedInC, + process.producerABeginRunConsumedInC, + process.producerAEndProcessBlockConsumedInC, + # + process.producerAEventConsumedInBA, + process.producerABeginLumiConsumedInBA, + process.producerAEndLumiConsumedInBA, + process.producerABeginRunConsumedInBA, + process.producerAEndRunConsumedInBA, + process.producerABeginProcessBlockConsumedInBA, + process.producerAEndProcessBlockConsumedInBA, + # + process.producerEventNotConsumed, + process.producerBeginLumiNotConsumed, + process.producerBeginRunNotConsumed, + process.producerBeginProcessBlockNotConsumed, + # + process.producerEventMaybeConsumedInB, + process.producerEventMaybeConsumedInBA, + process.producerEventMaybeConsumedInC, + # + process.producerAEventNotConsumedInB, + process.producerAEventNotConsumedInBA, + process.producerAEventNotConsumedInC, + # + process.producerEventConsumedInB1, + process.producerEventConsumedInB2, + process.producerEventConsumedInBA1, + process.producerEventConsumedInBA2, + process.producerEventConsumedInC1, + process.producerEventConsumedInC2, + # + process.producerANotConsumedChainEvent, + process.producerANotConsumedChainLumi, + process.producerANotConsumedChainRun, +) + + +process.p = cms.Path( + process.intAnalyzerDelete + , + process.t +) + +#################### +subprocessB = cms.Process("B") +process.addSubProcess( cms.SubProcess( + process = subprocessB, + SelectEvents = cms.untracked.PSet(), + outputCommands = cms.untracked.vstring() +) ) + +subprocessB.consumerEventFromA = intEventConsumer.clone(moduleLabel = "producerAEventConsumedInB", valueMustMatch = 1) +subprocessB.consumerBeginLumiFromA = nonEventConsumer("beginLumi", "producerA%sConsumedInB", 2) +subprocessB.consumerEndRunFromA = nonEventConsumer("endRun", "producerA%sConsumedInB", 5) +subprocessB.consumerBeginProcessBlockFromA = nonEventConsumer("beginProcessBlock", "producerA%sConsumedInB", 6) + +subprocessB.consumerAEventNotConsumed = intGenericConsumer.clone( + srcEvent = [ + "producerEventNotConsumed:doesNotExist", + "producerEventNotConsumed:doesNotExist:A", + cms.InputTag("producerEventNotConsumed", "doesNotExist", cms.InputTag.skipCurrentProcess()) + ], + inputShouldExist = False, +) +subprocessB.consumerAEventNotConsumed2 = uint64GenericConsumer.clone( + srcEvent = [ + "producerEventNotConsumed", + "producerEventNotConsumed::A", + cms.InputTag("producerEventNotConsumed", "", cms.InputTag.skipCurrentProcess()) + ], + inputShouldExist = False, +) +subprocessB.producerEventNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessB.producerBeginLumiNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteInLumiProducer") +subprocessB.producerBeginRunNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteInRunProducer") +subprocessB.producerBeginProcessBlockNotConsumed = cms.EDProducer("edmtest::TestModuleDeleteInProcessProducer") + +subprocessB.producerEventMaybeConsumedInB = intEventProducerMustRun.clone() +subprocessB.producerEventMaybeConsumedInBA = intEventProducerMustRun.clone(mustRunEvent=False) +subprocessB.consumerEventMaybeInB = intGenericConsumer.clone(srcEvent = ["producerEventMaybeConsumedInB"]) + +subprocessB.producerAEventNotConsumedInB = intEventProducerMustRun.clone() +subprocessB.producerAEventNotConsumedInBA = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessB.consumerAEventNotConsumedInB = intGenericConsumer.clone(srcEvent = ["producerAEventNotConsumedInB::B"]) + +subprocessB.producerEventConsumedInB1 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessB.producerEventConsumedInB2 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessB.consumerEventNotConsumedInB1 = intGenericConsumer.clone(srcEvent = ["producerEventConsumedInB1::A"]) +subprocessB.consumerEventNotConsumedInB2 = intGenericConsumer.clone(srcEvent = [cms.InputTag("producerEventConsumedInB2", "", cms.InputTag.skipCurrentProcess())]) +subprocessB.producerBEventConsumedInBA1 = intEventProducerMustRun.clone() +subprocessB.producerBEventConsumedInBA2 = intEventProducerMustRun.clone() + +subprocessB.producerBEventConsumedInC1 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessB.producerBEventConsumedInC2 = cms.EDProducer("edmtest::TestModuleDeleteProducer") + +subprocessB.producerBEventConsumedInB1 = intEventProducerMustRun.clone() +subprocessB.producerBEventConsumedInB2 = intEventProducerMustRun.clone() +subprocessB.producerBEventConsumedInB3 = intEventProducerMustRun.clone() +subprocessB.consumerBEventConsumedInB1 = intGenericConsumer.clone(srcEvent = ["producerBEventConsumedInB1"]) +subprocessB.consumerBEventConsumedInB2 = intGenericConsumer.clone(srcEvent = ["producerBEventConsumedInB2::B"]) +subprocessB.consumerBEventConsumedInB3 = intGenericConsumer.clone(srcEvent = [cms.InputTag("producerBEventConsumedInB3", "", cms.InputTag.currentProcess())]) + +subprocessB.producerBNotConsumedChainEvent = cms.EDProducer("edmtest::TestModuleDeleteProducer", + srcBeginRun = cms.untracked.VInputTag("producerANotConsumedChainRun") +) +subprocessB.producerBNotConsumedChainLumi = cms.EDProducer("edmtest::TestModuleDeleteInLumiProducer", + srcEvent = cms.untracked.VInputTag("producerANotConsumedChainEvent") +) +subprocessB.producerBNotConsumedChainRun = cms.EDProducer("edmtest::TestModuleDeleteInRunProducer", + srcBeginLumi = cms.untracked.VInputTag("producerANotConsumedChainLumi") +) + +subprocessB.t = cms.Task( + subprocessB.producerEventNotConsumed, + subprocessB.producerBeginLumiNotConsumed, + subprocessB.producerBeginRunNotConsumed, + subprocessB.producerBeginProcessBlockNotConsumed, + # + subprocessB.producerEventMaybeConsumedInB, + subprocessB.producerEventMaybeConsumedInBA, + # + subprocessB.producerAEventNotConsumedInB, + subprocessB.producerAEventNotConsumedInBA, + # + subprocessB.producerEventConsumedInB1, + subprocessB.producerEventConsumedInB2, + subprocessB.producerBEventConsumedInBA1, + subprocessB.producerBEventConsumedInBA2, + # + subprocessB.producerBEventConsumedInC1, + subprocessB.producerBEventConsumedInC2, + # + subprocessB.producerBEventConsumedInB1, + subprocessB.producerBEventConsumedInB2, + subprocessB.producerBEventConsumedInB3, + # + subprocessB.producerBNotConsumedChainEvent, + subprocessB.producerBNotConsumedChainLumi, + subprocessB.producerBNotConsumedChainRun, +) +subprocessB.p = cms.Path( + subprocessB.consumerEventFromA+ + subprocessB.consumerBeginLumiFromA+ + subprocessB.consumerEndRunFromA+ + subprocessB.consumerBeginProcessBlockFromA+ + # + subprocessB.consumerAEventNotConsumed+ + subprocessB.consumerAEventNotConsumed2+ + # + subprocessB.consumerEventMaybeInB+ + # + subprocessB.consumerAEventNotConsumedInB+ + subprocessB.consumerEventNotConsumedInB1+ + subprocessB.consumerEventNotConsumedInB2+ + # + subprocessB.consumerBEventConsumedInB1+ + subprocessB.consumerBEventConsumedInB2+ + subprocessB.consumerBEventConsumedInB3 + ,subprocessB.t +) + +#################### +subprocessBA = cms.Process("BA") +subprocessB.addSubProcess( cms.SubProcess( + process = subprocessBA, + SelectEvents = cms.untracked.PSet(), + outputCommands = cms.untracked.vstring() +) ) + +subprocessBA.consumerEventFromA = intEventConsumer.clone(moduleLabel = "producerAEventConsumedInBA", valueMustMatch = 10) +subprocessBA.consumerBeginLumiFromA = nonEventConsumer("beginLumi", "producerA%sConsumedInBA", 20) +subprocessBA.consumerEndLumiFromA = nonEventConsumer("endLumi", "producerA%sConsumedInBA", 30) +subprocessBA.consumerBeginRunFromA = nonEventConsumer("beginRun", "producerA%sConsumedInBA", 40) +subprocessBA.consumerEndRunFromA = nonEventConsumer("endRun", "producerA%sConsumedInBA", 50) +subprocessBA.consumerBeginProcessBlockFromA = nonEventConsumer("beginProcessBlock", "producerA%sConsumedInBA", 60) +subprocessBA.consumerEndProcessBlockFromA = nonEventConsumer("endProcessBlock", "producerA%sConsumedInBA", 70) + +subprocessBA.consumerABEventNotConsumed = intGenericConsumer.clone( + srcEvent = [ + "producerEventNotConsumed:doesNotExist", + "producerEventNotConsumed:doesNotExist:A", + "producerEventNotConsumed:doesNotExist:B", + cms.InputTag("producerEventNotConsumed", "doesNotExist", cms.InputTag.skipCurrentProcess()) + ], + inputShouldExist = False, +) +subprocessBA.consumerABEventNotConsumed2 = uint64GenericConsumer.clone( + srcEvent = [ + "producerEventNotConsumed", + "producerEventNotConsumed::A", + "producerEventNotConsumed::B", + cms.InputTag("producerEventNotConsumed", "", cms.InputTag.skipCurrentProcess()) + ], + inputShouldExist = False, +) + +subprocessBA.producerEventMaybeConsumedInBA = intEventProducerMustRun.clone() +subprocessBA.consumerEventMaybeInBA = intGenericConsumer.clone(srcEvent = ["producerEventMaybeConsumedInBA"]) + +subprocessBA.producerAEventNotConsumedInBA = intEventProducerMustRun.clone() +subprocessBA.consumerAEventNotConsumedInBA = intGenericConsumer.clone(srcEvent = ["producerAEventNotConsumedInBA::BA"]) + +subprocessBA.producerEventConsumedInBA1 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessBA.producerEventConsumedInBA2 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessBA.producerBEventConsumedInBA1 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessBA.producerBEventConsumedInBA2 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessBA.consumerEventNotConsumedInBA1 = intGenericConsumer.clone(srcEvent = ["producerEventConsumedInBA1::A", + "producerBEventConsumedInBA1::B"]) +subprocessBA.consumerEventNotConsumedInBA2 = intGenericConsumer.clone(srcEvent = [ + cms.InputTag("producerEventConsumedInBA2", "", cms.InputTag.skipCurrentProcess()), + cms.InputTag("producerBEventConsumedInBA2", "", cms.InputTag.skipCurrentProcess()) +]) + +subprocessBA.producerBANotConsumedChainEvent = cms.EDProducer("edmtest::TestModuleDeleteProducer", + srcBeginLumi = cms.untracked.VInputTag("producerBNotConsumedChainLumi") +) +subprocessBA.producerBANotConsumedChainLumi = cms.EDProducer("edmtest::TestModuleDeleteInLumiProducer", + srcBeginRun = cms.untracked.VInputTag("producerBNotConsumedChainRun") +) +subprocessBA.producerBANotConsumedChainRun = cms.EDProducer("edmtest::TestModuleDeleteInRunProducer", + srcEvent = cms.untracked.VInputTag("producerBNotConsumedChainEvent") +) +subprocessBA.producerBANotConsumedChainEvent2 = cms.EDProducer("edmtest::TestModuleDeleteProducer", + srcBeginRun = cms.untracked.VInputTag("producerANotConsumedChainRun"), + srcBeginLumi = cms.untracked.VInputTag("producerANotConsumedChainLumi"), + srcEvent = cms.untracked.VInputTag("producerANotConsumedChainEvent"), +) + + +subprocessBA.t = cms.Task( + subprocessBA.producerEventMaybeConsumedInBA, + # + subprocessBA.producerAEventNotConsumedInBA, + # + subprocessBA.producerEventConsumedInBA1, + subprocessBA.producerEventConsumedInBA2, + subprocessBA.producerBEventConsumedInBA1, + subprocessBA.producerBEventConsumedInBA2, + # + subprocessBA.producerBANotConsumedChainEvent, + subprocessBA.producerBANotConsumedChainLumi, + subprocessBA.producerBANotConsumedChainRun, + subprocessBA.producerBANotConsumedChainEvent2, +) +subprocessBA.p = cms.Path( + subprocessBA.consumerEventFromA+ + subprocessBA.consumerBeginLumiFromA+ + subprocessBA.consumerEndLumiFromA+ + subprocessBA.consumerBeginRunFromA+ + subprocessBA.consumerEndRunFromA+ + subprocessBA.consumerBeginProcessBlockFromA+ + subprocessBA.consumerEndProcessBlockFromA+ + # + subprocessBA.consumerABEventNotConsumed+ + subprocessBA.consumerABEventNotConsumed2+ + # + subprocessBA.consumerEventMaybeInBA+ + # + subprocessBA.consumerAEventNotConsumedInBA+ + # + subprocessBA.consumerEventNotConsumedInBA1+ + subprocessBA.consumerEventNotConsumedInBA2 + , subprocessBA.t +) + +#################### +subprocessC = cms.Process("C") +process.addSubProcess( cms.SubProcess( + process = subprocessC, + SelectEvents = cms.untracked.PSet(), + outputCommands = cms.untracked.vstring() +) ) + +subprocessC.consumerEndLumiFromA = nonEventConsumer("endLumi", "producerA%sConsumedInC", 3) +subprocessC.consumerBeginRunFromA = nonEventConsumer("beginRun", "producerA%sConsumedInC", 4) +subprocessC.consumerEndProcessBlockFromA = nonEventConsumer("endProcessBlock", "producerA%sConsumedInC", 7) + +subprocessC.consumerAEventNotConsumed = intGenericConsumer.clone( + srcEvent = [ + "producerEventNotConsumed:doesNotExist", + "producerEventNotConsumed:doesNotExist:A", + cms.InputTag("producerEventNotConsumed", "doesNotExist", cms.InputTag.skipCurrentProcess()) + ], + inputShouldExist = False, +) +subprocessC.consumerAEventNotConsumed2 = uint64GenericConsumer.clone( + srcEvent = [ + "producerEventNotConsumed", + "producerEventNotConsumed::A", + cms.InputTag("producerEventNotConsumed", "", cms.InputTag.skipCurrentProcess()) + ], + inputShouldExist = False, +) + +subprocessC.producerEventMaybeConsumedInC = intEventProducerMustRun.clone() +subprocessC.consumerEventMaybeInC = intGenericConsumer.clone(srcEvent = ["producerEventMaybeConsumedInC"]) + +subprocessC.producerAEventNotConsumedInC = intEventProducerMustRun.clone() +subprocessC.consumerAEventNotConsumedInC = intGenericConsumer.clone(srcEvent = ["producerAEventNotConsumedInC::C"]) + +subprocessC.producerEventConsumedInC1 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessC.producerEventConsumedInC2 = cms.EDProducer("edmtest::TestModuleDeleteProducer") +subprocessC.consumerEventNotConsumedInC1 = intGenericConsumer.clone(srcEvent = ["producerEventConsumedInC1::A"]) +subprocessC.consumerEventNotConsumedInC2 = intGenericConsumer.clone(srcEvent = [cms.InputTag("producerEventConsumedInC2", "", cms.InputTag.skipCurrentProcess())]) + +subprocessC.consumerBEventConsumedInC1 = intGenericConsumer.clone(srcEvent = ["producerBEventConsumedInC1"], inputShouldExist=False) +subprocessC.consumerBEventConsumedInC2 = intGenericConsumer.clone(srcEvent = ["producerBEventConsumedInC1::B"], inputShouldExist=False) + +subprocessC.producerCNotConsumedChainEvent = cms.EDProducer("edmtest::TestModuleDeleteProducer", + srcEvent = cms.untracked.VInputTag("producerANotConsumedChainEvent") +) +subprocessC.producerCNotConsumedChainLumi = cms.EDProducer("edmtest::TestModuleDeleteInLumiProducer", + srcBeginLumi = cms.untracked.VInputTag("producerANotConsumedChainLumi") +) +subprocessC.producerCNotConsumedChainRun = cms.EDProducer("edmtest::TestModuleDeleteInRunProducer", + srcBeginRun = cms.untracked.VInputTag("producerANotConsumedChainRun") +) + +subprocessC.t = cms.Task( + subprocessC.producerEventMaybeConsumedInC, + # + subprocessC.producerAEventNotConsumedInC, + # + subprocessC.producerEventConsumedInC1, + subprocessC.producerEventConsumedInC2, + # + subprocessC.producerCNotConsumedChainEvent, + subprocessC.producerCNotConsumedChainLumi, + subprocessC.producerCNotConsumedChainRun, +) +subprocessC.p = cms.Path( + subprocessC.consumerEndLumiFromA+ + subprocessC.consumerBeginRunFromA+ + subprocessC.consumerEndProcessBlockFromA+ + # + subprocessC.consumerAEventNotConsumed+ + subprocessC.consumerAEventNotConsumed2+ + # + subprocessC.consumerEventMaybeInC+ + subprocessC.consumerAEventNotConsumedInC+ + # + subprocessC.consumerEventNotConsumedInC1+ + subprocessC.consumerEventNotConsumedInC2+ + # + subprocessC.consumerBEventConsumedInC1+ + subprocessC.consumerBEventConsumedInC2 + , subprocessC.t +) + +#################### +subprocessD = cms.Process("D") +process.addSubProcess( cms.SubProcess( + process = subprocessD, + SelectEvents = cms.untracked.PSet(), + outputCommands = cms.untracked.vstring( + "drop *_producerAEventNotConsumedInD_*_*", + ) +) ) + +subprocessD.consumerAEventNotConsumedInD = intGenericConsumer.clone( + srcEvent = [ + "producerAEvenNotConsumedInD", + "producerAEvenNotConsumedInD::A", + cms.InputTag("producerEventANotConsumedInD", "", cms.InputTag.skipCurrentProcess()) + ], + inputShouldExist = False, +) + +subprocessD.producerDEventNotConsumedInDA = cms.EDProducer("edmtest::TestModuleDeleteProducer") + +subprocessD.t = cms.Task( + subprocessD.producerDEventNotConsumedInDA +) +subprocessD.p = cms.Path( + subprocessD.consumerAEventNotConsumedInD, + subprocessD.t +) + +#################### +subprocessDA = cms.Process("BA") +subprocessD.addSubProcess( cms.SubProcess( + process = subprocessDA, + SelectEvents = cms.untracked.PSet(), + outputCommands = cms.untracked.vstring( + "drop *_producerDEventNotConsumedInDA_*_*", + ) +) ) + +subprocessDA.consumerAEventNotConsumedInD = intGenericConsumer.clone( + srcEvent = [ + "producerAEvenNotConsumedInD", + "producerAEvenNotConsumedInD::A", + cms.InputTag("producerEventANotConsumedInD", "", cms.InputTag.skipCurrentProcess()) + ], + inputShouldExist = False, +) +subprocessDA.consumerDEventNotConsumedInDA = intGenericConsumer.clone( + srcEvent = [ + "producerDEvenNotConsumedInDA", + "producerDEvenNotConsumedInDA::D", + cms.InputTag("producerEventDNotConsumedInDA", "", cms.InputTag.skipCurrentProcess()) + ], + inputShouldExist = False, +) + +subprocessDA.producerDNotConsumedChainRun = cms.EDProducer("edmtest::TestModuleDeleteInRunProducer", + srcBeginRun = cms.untracked.VInputTag("producerANotConsumedChainRun"), + srcBeginLumi = cms.untracked.VInputTag("producerANotConsumedChainLumi"), + srcEvent = cms.untracked.VInputTag("producerANotConsumedChainEvent"), +) + +subprocessDA.t = cms.Task( + subprocessDA.producerDNotConsumedChainRun +) + +subprocessDA.p = cms.Path( + subprocessDA.consumerAEventNotConsumedInD+ + subprocessDA.consumerDEventNotConsumedInDA, + subprocessDA.t +) diff --git a/FWCore/Framework/test/test_non_event_ordering_beginLumi_cfg.py b/FWCore/Framework/test/test_non_event_ordering_beginLumi_cfg.py index 132af530c6c89..38a31cea99f4d 100644 --- a/FWCore/Framework/test/test_non_event_ordering_beginLumi_cfg.py +++ b/FWCore/Framework/test/test_non_event_ordering_beginLumi_cfg.py @@ -6,12 +6,13 @@ process.maxEvents.input = 3 -process.a = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(1)) +process.d = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(1)) process.b = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(2), consumesBeginLuminosityBlock = cms.InputTag("c","beginLumi"), expectBeginLuminosityBlock = cms.untracked.int32(3) ) process.c = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(3), - consumesBeginLuminosityBlock = cms.InputTag("a", "beginLumi"), + consumesBeginLuminosityBlock = cms.InputTag("d", "beginLumi"), expectBeginLuminosityBlock = cms.untracked.int32(1)) -process.schedule = cms.Schedule(tasks=cms.Task(process.a,process.b,process.c)) +process.t = cms.Task(process.d, process.c) +process.p = cms.Path(process.b, process.t) diff --git a/FWCore/Framework/test/test_non_event_ordering_beginRun_cfg.py b/FWCore/Framework/test/test_non_event_ordering_beginRun_cfg.py index c0a47616da351..ef4dc3a84a35d 100644 --- a/FWCore/Framework/test/test_non_event_ordering_beginRun_cfg.py +++ b/FWCore/Framework/test/test_non_event_ordering_beginRun_cfg.py @@ -6,12 +6,13 @@ process.maxEvents.input = 3 -process.a = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(1)) +process.d = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(1)) process.b = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(2), consumesBeginRun = cms.InputTag("c","beginRun"), expectBeginRun = cms.untracked.int32(3) ) process.c = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(3), - consumesBeginRun = cms.InputTag("a", "beginRun"), + consumesBeginRun = cms.InputTag("d", "beginRun"), expectBeginRun = cms.untracked.int32(1)) -process.schedule = cms.Schedule(tasks=cms.Task(process.a,process.b,process.c)) +process.t = cms.Task(process.d, process.c) +process.p = cms.Path(process.b, process.t) diff --git a/FWCore/Framework/test/test_non_event_ordering_endLumi_cfg.py b/FWCore/Framework/test/test_non_event_ordering_endLumi_cfg.py index 51502288205fa..0e0e0bfd5fa10 100644 --- a/FWCore/Framework/test/test_non_event_ordering_endLumi_cfg.py +++ b/FWCore/Framework/test/test_non_event_ordering_endLumi_cfg.py @@ -6,12 +6,13 @@ process.maxEvents.input = 3 -process.a = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(1)) +process.d = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(1)) process.b = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(2), consumesEndLuminosityBlock = cms.InputTag("c","endLumi"), expectEndLuminosityBlock = cms.untracked.int32(3) ) process.c = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(3), - consumesEndLuminosityBlock = cms.InputTag("a", "endLumi"), + consumesEndLuminosityBlock = cms.InputTag("d", "endLumi"), expectEndLuminosityBlock = cms.untracked.int32(1)) -process.schedule = cms.Schedule(tasks=cms.Task(process.a,process.b,process.c)) +process.t = cms.Task(process.d, process.c) +process.p = cms.Path(process.b, process.t) diff --git a/FWCore/Framework/test/test_non_event_ordering_endRun_cfg.py b/FWCore/Framework/test/test_non_event_ordering_endRun_cfg.py index ed9c4b2482473..7e5cd37db381c 100644 --- a/FWCore/Framework/test/test_non_event_ordering_endRun_cfg.py +++ b/FWCore/Framework/test/test_non_event_ordering_endRun_cfg.py @@ -6,8 +6,9 @@ process.maxEvents.input = 3 -process.a = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(1)) +process.d = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(1)) process.b = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(2), consumesEndRun = cms.InputTag("c","endRun"), expectEndRun = cms.untracked.int32(3) ) -process.c = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(3), consumesEndRun = cms.InputTag("a", "endRun"), expectEndRun = cms.untracked.int32(1) ) +process.c = cms.EDProducer("NonEventIntProducer", ivalue = cms.int32(3), consumesEndRun = cms.InputTag("d", "endRun"), expectEndRun = cms.untracked.int32(1) ) -process.schedule = cms.Schedule(tasks=cms.Task(process.a,process.b,process.c)) +process.t = cms.Task(process.d, process.c) +process.p = cms.Path(process.b, process.t) diff --git a/FWCore/Framework/test/test_onPath_unscheduled_cfg.py b/FWCore/Framework/test/test_onPath_unscheduled_cfg.py index 47b276ebe2712..ac39c01c31442 100644 --- a/FWCore/Framework/test/test_onPath_unscheduled_cfg.py +++ b/FWCore/Framework/test/test_onPath_unscheduled_cfg.py @@ -21,19 +21,14 @@ process.Tracer = cms.Service("Tracer") process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('cout', - 'cerr' - ), - categories = cms.untracked.vstring( - 'Tracer' - ), cout = cms.untracked.PSet( - default = cms.untracked.PSet ( + Tracer = cms.untracked.PSet( + limit = cms.untracked.int32(100000000) + ), + default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), - Tracer = cms.untracked.PSet( - limit=cms.untracked.int32(100000000) - ) + enable = cms.untracked.bool(True) ) ) diff --git a/FWCore/Framework/test/test_one_modules_cfg.py b/FWCore/Framework/test/test_one_modules_cfg.py index 6ea86ce9f9ef3..098e56299e5e8 100644 --- a/FWCore/Framework/test/test_one_modules_cfg.py +++ b/FWCore/Framework/test/test_one_modules_cfg.py @@ -101,6 +101,8 @@ process.WatchLumiBlockAn = cms.EDAnalyzer("edmtest::one::WatchLumiBlocksAnalyzer", transitions = cms.int32(nEvt+2*int(nEvt/nEvtLumi)) + # needed to avoid deleting TestAccumulator1 + ,moduleLabel = cms.InputTag("TestAccumulator1") ) process.RunCacheAn = cms.EDAnalyzer("edmtest::one::RunCacheAnalyzer", diff --git a/FWCore/Framework/test/test_stream_modules_cfg.py b/FWCore/Framework/test/test_stream_modules_cfg.py index a85cc778468cb..d0bce0d9afe0e 100644 --- a/FWCore/Framework/test/test_stream_modules_cfg.py +++ b/FWCore/Framework/test/test_stream_modules_cfg.py @@ -117,6 +117,8 @@ process.LumiIntAn = cms.EDAnalyzer("edmtest::stream::LumiIntAnalyzer", transitions = cms.int32(nEvt+2*int(nEvt/nEvtLumi)) ,cachevalue = cms.int32(nEvtLumi) + # needed to avoid deleting TestAccumulator1 + ,moduleLabel = cms.InputTag("TestAccumulator1") ) process.RunSumIntAn = cms.EDAnalyzer("edmtest::stream::RunSummaryIntAnalyzer", diff --git a/FWCore/Framework/test/unit_test_outputs/statemachine_output_23.txt b/FWCore/Framework/test/unit_test_outputs/statemachine_output_23.txt index bffcecfef0f47..1ac7a472e3131 100644 --- a/FWCore/Framework/test/unit_test_outputs/statemachine_output_23.txt +++ b/FWCore/Framework/test/unit_test_outputs/statemachine_output_23.txt @@ -31,7 +31,6 @@ Machine parameters: mode = NOMERGE throwing respondToCloseInputFile closeInputFile - closeOutputFiles caught test exception Machine parameters: mode = FULLMERGE diff --git a/FWCore/Framework/test/unit_test_outputs/test_deepCall_unscheduled.log b/FWCore/Framework/test/unit_test_outputs/test_deepCall_unscheduled.log index dc6207c12ab00..67e2aba7a2c6a 100644 --- a/FWCore/Framework/test/unit_test_outputs/test_deepCall_unscheduled.log +++ b/FWCore/Framework/test/unit_test_outputs/test_deepCall_unscheduled.log @@ -244,8 +244,6 @@ ModuleCallingContext state = Running ++++++++ starting: processing event for module: stream = 0 label = 'p' id = 2 ++++++++ finished: processing event for module: stream = 0 label = 'p' id = 2 ++++++ finished: processing path 'p' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 1 time = 1000010 @@ -360,8 +358,6 @@ ModuleCallingContext state = Running ++++++++ starting: processing event for module: stream = 0 label = 'p' id = 2 ++++++++ finished: processing event for module: stream = 0 label = 'p' id = 2 ++++++ finished: processing path 'p' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 2 time = 1000020 @@ -476,8 +472,6 @@ ModuleCallingContext state = Running ++++++++ starting: processing event for module: stream = 0 label = 'p' id = 2 ++++++++ finished: processing event for module: stream = 0 label = 'p' id = 2 ++++++ finished: processing path 'p' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 3 time = 1000030 diff --git a/FWCore/Framework/test/unit_test_outputs/test_onPath_unscheduled.log b/FWCore/Framework/test/unit_test_outputs/test_onPath_unscheduled.log index e8d08d1874d39..3ad31cb336108 100644 --- a/FWCore/Framework/test/unit_test_outputs/test_onPath_unscheduled.log +++ b/FWCore/Framework/test/unit_test_outputs/test_onPath_unscheduled.log @@ -84,8 +84,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'p' id = 2 ++++++++ finished: processing event for module: stream = 0 label = 'p' id = 2 ++++++ finished: processing path 'p' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 1 time = 1000010 @@ -112,8 +110,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'p' id = 2 ++++++++ finished: processing event for module: stream = 0 label = 'p' id = 2 ++++++ finished: processing path 'p' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 2 time = 1000020 @@ -140,8 +136,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'p' id = 2 ++++++++ finished: processing event for module: stream = 0 label = 'p' id = 2 ++++++ finished: processing path 'p' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 3 time = 1000030 diff --git a/FWCore/Integration/test/AssociationMapReadTest_cfg.py b/FWCore/Integration/test/AssociationMapReadTest_cfg.py index 5837e26ada95e..0f6bdeaad15f0 100644 --- a/FWCore/Integration/test/AssociationMapReadTest_cfg.py +++ b/FWCore/Integration/test/AssociationMapReadTest_cfg.py @@ -3,8 +3,8 @@ process = cms.Process("READ") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.load("FWCore.Framework.test.cmsExceptionsFatal_cff") diff --git a/FWCore/Integration/test/AssociationMapTest_cfg.py b/FWCore/Integration/test/AssociationMapTest_cfg.py index e5cb3bed77577..010847ac68d3c 100644 --- a/FWCore/Integration/test/AssociationMapTest_cfg.py +++ b/FWCore/Integration/test/AssociationMapTest_cfg.py @@ -3,8 +3,8 @@ process = cms.Process("PROD") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.load("FWCore.Framework.test.cmsExceptionsFatal_cff") diff --git a/FWCore/Integration/test/BuildFile.xml b/FWCore/Integration/test/BuildFile.xml index b8e76e43976f8..bbe1492447656 100644 --- a/FWCore/Integration/test/BuildFile.xml +++ b/FWCore/Integration/test/BuildFile.xml @@ -199,7 +199,7 @@ - + diff --git a/FWCore/Integration/test/RefTest_cfg.py b/FWCore/Integration/test/RefTest_cfg.py index 121c34f1a6eb2..b7923c1fdd5f1 100644 --- a/FWCore/Integration/test/RefTest_cfg.py +++ b/FWCore/Integration/test/RefTest_cfg.py @@ -7,8 +7,8 @@ # The following two lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/Integration/test/TransRefTest_cfg.py b/FWCore/Integration/test/TransRefTest_cfg.py index d0934fa91f096..d3ba3ef22d2f3 100644 --- a/FWCore/Integration/test/TransRefTest_cfg.py +++ b/FWCore/Integration/test/TransRefTest_cfg.py @@ -7,8 +7,8 @@ # The following two lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/Integration/test/ViewTest_cfg.py b/FWCore/Integration/test/ViewTest_cfg.py index 81fa79af3a989..7586a5eee64ab 100644 --- a/FWCore/Integration/test/ViewTest_cfg.py +++ b/FWCore/Integration/test/ViewTest_cfg.py @@ -7,8 +7,8 @@ # The following two lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/Integration/test/WaitingThreadIntProducer.cc b/FWCore/Integration/test/WaitingThreadIntProducer.cc deleted file mode 100644 index 606187cfef6d5..0000000000000 --- a/FWCore/Integration/test/WaitingThreadIntProducer.cc +++ /dev/null @@ -1,258 +0,0 @@ -#include "FWCore/Framework/interface/global/EDProducer.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/src/PreallocationConfiguration.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Concurrency/interface/WaitingTaskList.h" -#include "DataFormats/TestObjects/interface/ToyProducts.h" - -#include -#include -#include -#include -#include - -namespace { - /* Holds the data the WaitingServer needs to remember for each stream - */ - struct StreamData { - StreamData() : in_(nullptr), out_(nullptr), task_(nullptr) {} - //The members are atomic so that a framework thread can - // be putting new values in them as the server thread is running - std::atomic const*> in_; - std::atomic*>* out_; - std::atomic task_; - }; - - /* - This class controls a waiting thread. The classes waits until the - required number of streams have passed it data (or until a time limit is reached) - and then does work on all those streams. - Synchronization between the module on a stream and this server is done - via a call to requestValuesAsync. - */ - class WaitingServer { - public: - WaitingServer(unsigned int iNumberOfStreams, - unsigned int iMinNumberOfStreamsBeforeDoingWork, - unsigned int iSecondsToWait) - : m_perStream(iNumberOfStreams), - m_minNumStreamsBeforeDoingWork(iMinNumberOfStreamsBeforeDoingWork), - m_secondsToWait(iSecondsToWait), - m_shouldStop(false), - m_drainQueue(false) {} - void start(); - void stop(); - - ///iIn and iOut must have a lifetime longer than the asynchronous call - void requestValuesAsync(edm::StreamID, - std::vector const* iIn, - std::atomic*>* iOut, - edm::WaitingTask* iWaitingTask); - - //These are not used in this example at the moment since there is no - // way at present to determine that no more events will be processed. - // In the future a call to endStreamLuminosityBlock could be used - // as a signal to start draining. - void drainQueue() { m_drainQueue.store(true); } - void stopDrainingQueue() { m_drainQueue.store(false); } - - private: - void serverDoWork(); - - bool readyForWork() const; - - edm::WaitingTaskList m_taskList; - std::mutex m_mutex; //needed by m_cond - std::condition_variable m_cond; - std::unique_ptr m_thread; - std::vector m_perStream; - std::vector m_waitingStreams; - const unsigned int m_minNumStreamsBeforeDoingWork; - const unsigned int m_secondsToWait; - std::atomic m_shouldStop; - std::atomic m_drainQueue; - }; - - void WaitingServer::requestValuesAsync(edm::StreamID iID, - std::vector const* iIn, - std::atomic*>* iOut, - edm::WaitingTask* iWaitingTask) { - auto& streamData = m_perStream[iID.value()]; - assert(streamData.in_.load() == nullptr); - - streamData.in_.store(iIn); - - //increment to keep it from running immediately - iWaitingTask->increment_ref_count(); - streamData.task_.store(iWaitingTask); - - std::lock_guard guard(m_mutex); - m_waitingStreams.push_back(iID.value()); - streamData.out_ = iOut; - m_cond.notify_one(); //wakes up the server thread - } - - void WaitingServer::stop() { - m_shouldStop = true; - m_thread->join(); - m_thread.reset(); - } - - void WaitingServer::start() { - m_thread = std::make_unique([this]() { serverDoWork(); }); - } - - /* Used to determine if there is something for the server thread to do*/ - bool WaitingServer::readyForWork() const { - if (m_shouldStop) { - return true; - } - if (m_drainQueue or (m_minNumStreamsBeforeDoingWork <= m_waitingStreams.size())) { - return true; - } - return false; - } - - void WaitingServer::serverDoWork() { - while (not m_shouldStop) { - std::vector streamsToUse; - { - std::unique_lock lk(m_mutex); - - //Other threads could have provided work to do - // before we started wait_for - if (not readyForWork()) { - //We use wait for to handle the cases where - // no more events will be sent to the server - // or where we have a synchronization point - // where all events must stop processing for a time. - // In both cases we need to drain the system - m_cond.wait_for(lk, std::chrono::seconds(m_secondsToWait), [this]() -> bool { return readyForWork(); }); - } - - if (m_shouldStop) { - lk.unlock(); - break; - } - //Once we know which streams have given us data - // we can release the lock and let other streams - // set their data - streamsToUse.swap(m_waitingStreams); - lk.unlock(); - } - - //Here is the work that the server does for the modules - // it will just add 1 to each value it has been given - for (auto index : streamsToUse) { - auto& streamData = m_perStream[index]; - auto task = streamData.task_.exchange(nullptr); - //release the waiting task for this stream when we are done - m_taskList.add(task); - task->decrement_ref_count(); - - auto out = streamData.out_->load(); - out->clear(); - auto in = streamData.in_.load(); - - for (auto v : *in) { - out->push_back(v + 1); - } - //to be sure memory in other threads will see these changes - // we will just put the pointer back into the atomic - streamData.out_->store(out); - streamData.in_.store(nullptr); - } - - //now inform all waiting tasks that we have done the work - m_taskList.doneWaiting(std::exception_ptr()); - // reset so that next call to add will wait - m_taskList.reset(); - } - } -} // namespace - -namespace edmtest { - - class WaitingThreadIntProducer : public edm::global::EDProducer<> { - public: - explicit WaitingThreadIntProducer(edm::ParameterSet const& iConfig); - ~WaitingThreadIntProducer() override; - - virtual void produce(edm::StreamID, edm::Event& e, edm::EventSetup const& c) const override; - - virtual void endJob() override; - - private: - virtual void preallocate(edm::PreallocationConfiguration const&) override; - - std::vector> m_tokens; - std::unique_ptr m_server; - const unsigned int m_numberOfStreamsToAccumulate; - const unsigned int m_secondsToWaitForWork; - }; - - WaitingThreadIntProducer::WaitingThreadIntProducer(edm::ParameterSet const& iConfig) - : m_numberOfStreamsToAccumulate(iConfig.getUntrackedParameter("streamsToAccumulate")), - m_secondsToWaitForWork(iConfig.getUntrackedParameter("secondsToWaitForWork", 10U)) { - for (auto const& tag : iConfig.getParameter>("tags")) { - m_tokens.emplace_back(consumes(tag)); - } - produces(); - } - - WaitingThreadIntProducer::~WaitingThreadIntProducer() { - if (m_server) { - m_server->stop(); - } - } - - void WaitingThreadIntProducer::preallocate(edm::PreallocationConfiguration const& iPrealloc) { - unsigned int iNStreams = iPrealloc.numberOfStreams(); - m_server = std::make_unique( - iNStreams, - m_numberOfStreamsToAccumulate <= iNStreams ? m_numberOfStreamsToAccumulate : iNStreams, - m_secondsToWaitForWork); - m_server->start(); - } - - void WaitingThreadIntProducer::endJob() { - if (m_server) { - m_server->stop(); - } - m_server.reset(); - } - - // Functions that gets called by framework every event - void WaitingThreadIntProducer::produce(edm::StreamID iID, edm::Event& e, edm::EventSetup const&) const { - std::vector retrieved; - - for (auto const& token : m_tokens) { - retrieved.push_back(e.get(token).value); - } - - std::vector values; - - auto taskToWait = edm::make_empty_waiting_task(); - taskToWait->set_ref_count(2); - std::atomic*> sync{&values}; - - m_server->requestValuesAsync(iID, &retrieved, &sync, taskToWait.get()); - taskToWait->decrement_ref_count(); - - taskToWait->wait_for_all(); - - //make sure the memory is actually synced - auto& tValues = *sync.load(); - - int sum = 0; - for (auto v : tValues) { - sum += v; - } - e.put(std::make_unique(sum)); - } -} // namespace edmtest - -using edmtest::WaitingThreadIntProducer; -DEFINE_FWK_MODULE(WaitingThreadIntProducer); diff --git a/FWCore/Integration/test/parentlessTest_cfg.py b/FWCore/Integration/test/parentlessTest_cfg.py index 63359241a086c..d758e1c010fd8 100644 --- a/FWCore/Integration/test/parentlessTest_cfg.py +++ b/FWCore/Integration/test/parentlessTest_cfg.py @@ -7,8 +7,8 @@ # The following two lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/Integration/test/testConsumesInfo_cfg.py b/FWCore/Integration/test/testConsumesInfo_cfg.py index 53b2a666f5482..72052957e8970 100644 --- a/FWCore/Integration/test/testConsumesInfo_cfg.py +++ b/FWCore/Integration/test/testConsumesInfo_cfg.py @@ -7,19 +7,14 @@ ) process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('cout', - 'cerr' - ), - categories = cms.untracked.vstring( - 'Tracer' - ), cout = cms.untracked.PSet( - default = cms.untracked.PSet ( + Tracer = cms.untracked.PSet( + limit = cms.untracked.int32(100000000) + ), + default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), - Tracer = cms.untracked.PSet( - limit=cms.untracked.int32(100000000) - ) + enable = cms.untracked.bool(True) ) ) diff --git a/FWCore/Integration/test/testGetBy1_cfg.py b/FWCore/Integration/test/testGetBy1_cfg.py index 75e6e6ca52925..e8f4111110047 100644 --- a/FWCore/Integration/test/testGetBy1_cfg.py +++ b/FWCore/Integration/test/testGetBy1_cfg.py @@ -8,19 +8,14 @@ ) process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('cout', - 'cerr' - ), - categories = cms.untracked.vstring( - 'Tracer' - ), cout = cms.untracked.PSet( - default = cms.untracked.PSet ( + Tracer = cms.untracked.PSet( + limit = cms.untracked.int32(100000000) + ), + default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), - Tracer = cms.untracked.PSet( - limit=cms.untracked.int32(100000000) - ) + enable = cms.untracked.bool(True) ) ) diff --git a/FWCore/Integration/test/testGetBy2_cfg.py b/FWCore/Integration/test/testGetBy2_cfg.py index 100b8b7abd800..95f0118dc0728 100644 --- a/FWCore/Integration/test/testGetBy2_cfg.py +++ b/FWCore/Integration/test/testGetBy2_cfg.py @@ -8,19 +8,14 @@ ) process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('cout', - 'cerr' - ), - categories = cms.untracked.vstring( - 'Tracer' - ), cout = cms.untracked.PSet( - default = cms.untracked.PSet ( + Tracer = cms.untracked.PSet( + limit = cms.untracked.int32(100000000) + ), + default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), - Tracer = cms.untracked.PSet( - limit=cms.untracked.int32(100000000) - ) + enable = cms.untracked.bool(True) ) ) diff --git a/FWCore/Integration/test/testIllegalServiceParameter_cfg.py b/FWCore/Integration/test/testIllegalServiceParameter_cfg.py index 77a276b396c4c..8d0e90be95097 100644 --- a/FWCore/Integration/test/testIllegalServiceParameter_cfg.py +++ b/FWCore/Integration/test/testIllegalServiceParameter_cfg.py @@ -7,7 +7,7 @@ process = cms.Process("TEST") process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cerr_stats.output = 'NULL' +process.MessageLogger.cerr.enableStatistics = False # Intentionally define a parameter that does not # exist in the ParameterSetDescription which diff --git a/FWCore/Integration/test/testIllegalSourceParameter_cfg.py b/FWCore/Integration/test/testIllegalSourceParameter_cfg.py index fad1878c1099c..a0b16cf51dfab 100644 --- a/FWCore/Integration/test/testIllegalSourceParameter_cfg.py +++ b/FWCore/Integration/test/testIllegalSourceParameter_cfg.py @@ -7,7 +7,7 @@ process = cms.Process("TEST") process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cerr_stats.output = 'NULL' +process.MessageLogger.cerr.enableStatistics = False # Intentionally define a parameter that does not # exist in the ParameterSetDescription which diff --git a/FWCore/Integration/test/testParameterSet_cfg.py b/FWCore/Integration/test/testParameterSet_cfg.py index 70d96d3962a18..dcd29be630a6b 100644 --- a/FWCore/Integration/test/testParameterSet_cfg.py +++ b/FWCore/Integration/test/testParameterSet_cfg.py @@ -7,7 +7,7 @@ process = cms.Process("TEST") process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cerr_stats.output = 'NULL' +process.MessageLogger.cerr.enableStatistics = False process.load("FWCore.Modules.printContent_cfi") # Intentionally define a parameter that does not diff --git a/FWCore/Integration/test/testSubProcessUnscheduled_cfg.py b/FWCore/Integration/test/testSubProcessUnscheduled_cfg.py index fe686167f4852..40bc2fa33e9cd 100644 --- a/FWCore/Integration/test/testSubProcessUnscheduled_cfg.py +++ b/FWCore/Integration/test/testSubProcessUnscheduled_cfg.py @@ -17,6 +17,7 @@ # producer process.four = cms.EDProducer("BusyWaitIntProducer", ivalue = cms.int32(4), iterations=cms.uint32(10*1000)) +process.fourConsumer = cms.EDAnalyzer("MultipleIntsAnalyzer", getFromModules=cms.untracked.VInputTag("four")) # producer process.ten = cms.EDProducer("BusyWaitIntProducer", ivalue = cms.int32(10), iterations=cms.uint32(2*1000)) @@ -25,7 +26,7 @@ process.task = cms.Task(process.two, process.four, process.ten, process.adder) -process.path = cms.Path(process.task) +process.path = cms.Path(process.fourConsumer, process.task) subprocess = cms.Process("SUB") process.addSubProcess( cms.SubProcess( diff --git a/FWCore/Integration/test/unit_test_outputs/testGetBy1.log b/FWCore/Integration/test/unit_test_outputs/testGetBy1.log index 54ccf727d71d2..b5d83a975d8bf 100644 --- a/FWCore/Integration/test/unit_test_outputs/testGetBy1.log +++ b/FWCore/Integration/test/unit_test_outputs/testGetBy1.log @@ -603,8 +603,6 @@ PathContext: pathName = p pathID = 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 ProcessContext: PROD1 be16549dc0c1f4b03231a8b98d235dac -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 8 @@ -831,8 +829,6 @@ PathContext: pathName = p pathID = 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 ProcessContext: PROD1 be16549dc0c1f4b03231a8b98d235dac -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 8 @@ -1059,8 +1055,6 @@ PathContext: pathName = p pathID = 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 be16549dc0c1f4b03231a8b98d235dac -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 8 diff --git a/FWCore/Integration/test/unit_test_outputs/testGetBy2.log b/FWCore/Integration/test/unit_test_outputs/testGetBy2.log index 819be350379f5..20a92494c0884 100644 --- a/FWCore/Integration/test/unit_test_outputs/testGetBy2.log +++ b/FWCore/Integration/test/unit_test_outputs/testGetBy2.log @@ -294,8 +294,6 @@ PathContext: pathName = p pathID = 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 ProcessContext: PROD2 7da3661f4f7dead5e42f07cf3ddf5a59 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 5 @@ -444,8 +442,6 @@ PathContext: pathName = p pathID = 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 ProcessContext: PROD2 7da3661f4f7dead5e42f07cf3ddf5a59 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 5 @@ -594,8 +590,6 @@ PathContext: pathName = p pathID = 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD2 7da3661f4f7dead5e42f07cf3ddf5a59 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 5 diff --git a/FWCore/Integration/test/unit_test_outputs/testSubProcess.grep.txt b/FWCore/Integration/test/unit_test_outputs/testSubProcess.grep.txt index d7aa064f592e8..c2ce7755657f0 100644 --- a/FWCore/Integration/test/unit_test_outputs/testSubProcess.grep.txt +++ b/FWCore/Integration/test/unit_test_outputs/testSubProcess.grep.txt @@ -1,6 +1,14 @@ Sharing ESSource: class=DoodadESSource label='' Sharing ESSource: class=DoodadESSource label='' Sharing ESSource: class=DoodadESSource label='' +++++++++ starting: prefetching for esmodule: label = '' type = DoodadESSource in record = GadgetRcd +++++++++ finished: prefetching for esmodule: label = '' type = DoodadESSource in record = GadgetRcd +++++++++ starting: processing esmodule: label = '' type = DoodadESSource in record = GadgetRcd +++++++++ finished: processing esmodule: label = '' type = DoodadESSource in record = GadgetRcd got data of type "edmtest::Doodad" with name "abcd" in record GadgetRcd +++++++++ starting: prefetching for esmodule: label = '' type = DoodadESSource in record = GadgetRcd +++++++++ finished: prefetching for esmodule: label = '' type = DoodadESSource in record = GadgetRcd +++++++++ starting: processing esmodule: label = '' type = DoodadESSource in record = GadgetRcd +++++++++ finished: processing esmodule: label = '' type = DoodadESSource in record = GadgetRcd got data of type "edmtest::Doodad" with name "abc" in record GadgetRcd got data of type "edmtest::Doodad" with name "abc" in record GadgetRcd diff --git a/FWCore/Integration/test/unit_test_outputs/testSubProcess.grep2.txt b/FWCore/Integration/test/unit_test_outputs/testSubProcess.grep2.txt index d6b3cc04461c2..ecc212c31fd9c 100644 --- a/FWCore/Integration/test/unit_test_outputs/testSubProcess.grep2.txt +++ b/FWCore/Integration/test/unit_test_outputs/testSubProcess.grep2.txt @@ -257,6 +257,10 @@ ++++ starting: global begin run 1 : time = 1 ++++++ starting: global begin run for module: label = 'thingWithMergeProducer' id = 5 ++++++ finished: global begin run for module: label = 'thingWithMergeProducer' id = 5 +++++++++ starting: prefetching for esmodule: label = '' type = DoodadESSource in record = GadgetRcd +++++++++ finished: prefetching for esmodule: label = '' type = DoodadESSource in record = GadgetRcd +++++++++ starting: processing esmodule: label = '' type = DoodadESSource in record = GadgetRcd +++++++++ finished: processing esmodule: label = '' type = DoodadESSource in record = GadgetRcd ++++++ starting: global begin run for module: label = 'get' id = 6 ++++++ finished: global begin run for module: label = 'get' id = 6 ++++++ starting: global begin run for module: label = 'getInt' id = 10 @@ -274,6 +278,10 @@ ++++++ finished: global begin run for module: label = 'test' id = 32 ++++++ starting: global begin run for module: label = 'testmerge' id = 33 ++++++ finished: global begin run for module: label = 'testmerge' id = 33 +++++++++ starting: prefetching for esmodule: label = '' type = DoodadESSource in record = GadgetRcd +++++++++ finished: prefetching for esmodule: label = '' type = DoodadESSource in record = GadgetRcd +++++++++ starting: processing esmodule: label = '' type = DoodadESSource in record = GadgetRcd +++++++++ finished: processing esmodule: label = '' type = DoodadESSource in record = GadgetRcd ++++++ starting: global begin run for module: label = 'get' id = 34 ++++++ finished: global begin run for module: label = 'get' id = 34 ++++++ starting: global begin run for module: label = 'getInt' id = 35 @@ -423,8 +431,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 1 time = 5000001 @@ -484,8 +490,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -526,8 +530,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -585,8 +587,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 2 time = 10000001 @@ -646,8 +646,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -688,8 +686,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -747,8 +743,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 3 time = 15000001 @@ -808,8 +802,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -850,8 +842,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -909,8 +899,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 4 time = 20000001 @@ -970,8 +958,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -1012,8 +998,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -1213,8 +1197,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 2 event = 5 time = 25000001 @@ -1274,8 +1256,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -1316,8 +1296,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -1375,8 +1353,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 2 event = 6 time = 30000001 @@ -1436,8 +1412,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -1478,8 +1452,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -1537,8 +1509,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 2 event = 7 time = 35000001 @@ -1598,8 +1568,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -1640,8 +1608,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -1699,8 +1665,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 2 event = 8 time = 40000001 @@ -1760,8 +1724,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -1802,8 +1764,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -2003,8 +1963,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 3 event = 9 time = 45000001 @@ -2064,8 +2022,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -2106,8 +2062,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -2165,8 +2119,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 1 lumi = 3 event = 10 time = 50000001 @@ -2226,8 +2178,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -2268,8 +2218,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -2611,8 +2559,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 2 lumi = 1 event = 1 time = 55000001 @@ -2672,8 +2618,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -2714,8 +2658,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -2773,8 +2715,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 2 lumi = 1 event = 2 time = 60000001 @@ -2834,8 +2774,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -2876,8 +2814,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -2935,8 +2871,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 2 lumi = 1 event = 3 time = 65000001 @@ -2996,8 +2930,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -3038,8 +2970,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -3097,8 +3027,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 2 lumi = 1 event = 4 time = 70000001 @@ -3158,8 +3086,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -3200,8 +3126,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -3401,8 +3325,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 2 lumi = 2 event = 5 time = 75000001 @@ -3462,8 +3384,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -3504,8 +3424,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -3563,8 +3481,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 2 lumi = 2 event = 6 time = 80000001 @@ -3624,8 +3540,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -3666,8 +3580,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -3725,8 +3637,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 2 lumi = 2 event = 7 time = 85000001 @@ -3786,8 +3696,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -3828,8 +3736,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -3887,8 +3793,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 2 lumi = 2 event = 8 time = 90000001 @@ -3948,8 +3852,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -3990,8 +3892,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -4191,8 +4091,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 2 lumi = 3 event = 9 time = 95000001 @@ -4252,8 +4150,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -4294,8 +4190,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -4353,8 +4247,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 2 lumi = 3 event = 10 time = 100000001 @@ -4414,8 +4306,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -4456,8 +4346,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -4799,8 +4687,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 3 lumi = 1 event = 1 time = 105000001 @@ -4860,8 +4746,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -4902,8 +4786,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -4961,8 +4843,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 3 lumi = 1 event = 2 time = 110000001 @@ -5022,8 +4902,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -5064,8 +4942,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -5123,8 +4999,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 3 lumi = 1 event = 3 time = 115000001 @@ -5184,8 +5058,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -5226,8 +5098,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -5285,8 +5155,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 3 lumi = 1 event = 4 time = 120000001 @@ -5346,8 +5214,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -5388,8 +5254,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -5589,8 +5453,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 3 lumi = 2 event = 5 time = 125000001 @@ -5650,8 +5512,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -5692,8 +5552,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -5751,8 +5609,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 3 lumi = 2 event = 6 time = 130000001 @@ -5812,8 +5668,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -5854,8 +5708,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -5913,8 +5765,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 3 lumi = 2 event = 7 time = 135000001 @@ -5974,8 +5824,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -6016,8 +5864,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -6075,8 +5921,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 3 lumi = 2 event = 8 time = 140000001 @@ -6136,8 +5980,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -6178,8 +6020,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -6379,8 +6219,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 3 lumi = 3 event = 9 time = 145000001 @@ -6440,8 +6278,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -6482,8 +6318,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 @@ -6541,8 +6375,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 4 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 4 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: processing event : stream = 0 run = 3 lumi = 3 event = 10 time = 150000001 @@ -6602,8 +6434,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 @@ -6644,8 +6474,6 @@ ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 ++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 diff --git a/FWCore/Integration/test/waiting_thread_cfg.py b/FWCore/Integration/test/waiting_thread_cfg.py deleted file mode 100644 index 2f03a6ce23b61..0000000000000 --- a/FWCore/Integration/test/waiting_thread_cfg.py +++ /dev/null @@ -1,29 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("Test") - -process.source = cms.Source("EmptySource") - -process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(100)) - -process.options = cms.untracked.PSet( - numberOfThreads = cms.untracked.uint32(4), - numberOfStreams = cms.untracked.uint32(0) -) - -process.waiter = cms.EDProducer("WaitingThreadIntProducer", - streamsToAccumulate = cms.untracked.uint32(3), -# streamsToAccumulate = cms.untracked.uint32(4), - tags = cms.VInputTag("busy1","busy2") - ) - -process.busy1 = cms.EDProducer("BusyWaitIntProducer",ivalue = cms.int32(1), iterations = cms.uint32(10*1000*1000)) -process.busy2 = cms.EDProducer("BusyWaitIntProducer",ivalue = cms.int32(2), iterations = cms.uint32(10*1000*1000)) - -process.tester = cms.EDAnalyzer("IntTestAnalyzer", - moduleLabel = cms.untracked.InputTag("waiter"), - valueMustMatch = cms.untracked.int32(5)) - -process.task = cms.Task(process.busy1, process.busy2, process.waiter) - -process.p = cms.Path(process.tester, process.task) diff --git a/FWCore/Integration/test/waiting_thread_test.sh b/FWCore/Integration/test/waiting_thread_test.sh index b7ecdacf03373..6da96b68e6864 100755 --- a/FWCore/Integration/test/waiting_thread_test.sh +++ b/FWCore/Integration/test/waiting_thread_test.sh @@ -4,9 +4,6 @@ function die { echo $1: status $2 ; exit $2; } pushd ${LOCAL_TMP_DIR} -echo "cmsRun waiting_thread_cfg.py" -cmsRun --parameter-set ${LOCAL_TEST_DIR}/waiting_thread_cfg.py || die 'Failed in waiting_thread_cfg.py' $? - echo "cmsRun acquireTest_cfg.py" cmsRun --parameter-set ${LOCAL_TEST_DIR}/acquireTest_cfg.py || die 'Failed in acquireTest_cfg.py' $? diff --git a/FWCore/MessageLogger/examples/simplestMLexample_cfg.py b/FWCore/MessageLogger/examples/simplestMLexample_cfg.py index f39a9eff1fee0..a22f92dfe51c7 100644 --- a/FWCore/MessageLogger/examples/simplestMLexample_cfg.py +++ b/FWCore/MessageLogger/examples/simplestMLexample_cfg.py @@ -21,9 +21,13 @@ # Here is the configuration of the MessgeLogger Service: process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('simplestML'), - simplestML = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + files = cms.untracked.PSet( + simplestML = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) ) ) diff --git a/FWCore/MessageLogger/examples/timingFilteredMLexample_cfg.py b/FWCore/MessageLogger/examples/timingFilteredMLexample_cfg.py index 679612ddaad72..d9df51f44cf4f 100644 --- a/FWCore/MessageLogger/examples/timingFilteredMLexample_cfg.py +++ b/FWCore/MessageLogger/examples/timingFilteredMLexample_cfg.py @@ -33,34 +33,29 @@ # Here is the configuration of the MessgeLogger Service: process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring( 'cout' - , 'timingFilteredML' - ) , - categories = cms.untracked.vstring( 'TimeEvent' - , 'TimeModule' - , 'TimeReport' - ) , + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - # We are about to impose a limit of 0 (meaning do no react to these) - # on each of the message categories generated by the timing service. - # Since this is inside the PSet for cout, these limits apply only to - # the cout destination. - TimeEvent = cms.untracked.PSet( - limit = cms.untracked.int32(0) + TimeEvent = cms.untracked.PSet( + limit = cms.untracked.int32(0) ), TimeModule = cms.untracked.PSet( - limit = cms.untracked.int32(0) + limit = cms.untracked.int32(0) ), TimeReport = cms.untracked.PSet( - limit = cms.untracked.int32(0) + limit = cms.untracked.int32(0) ), cat_B = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) + limit = cms.untracked.int32(0) + ), + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') ), - timingFilteredML = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), + files = cms.untracked.PSet( + timingFilteredML = cms.untracked.PSet( + threshold = cms.untracked.string('WARNING') + ) ) ) diff --git a/FWCore/MessageLogger/interface/ELextendedID.h b/FWCore/MessageLogger/interface/ELextendedID.h index 299c3cb34fcae..2359ff155b0a3 100644 --- a/FWCore/MessageLogger/interface/ELextendedID.h +++ b/FWCore/MessageLogger/interface/ELextendedID.h @@ -27,7 +27,7 @@ namespace edm { // ----- Publicly accessible data members: // std::string id; - ELseverityLevel severity; + messagelogger::ELseverityLevel severity; std::string module; std::string subroutine; diff --git a/FWCore/MessageLogger/interface/ELseverityLevel.h b/FWCore/MessageLogger/interface/ELseverityLevel.h index 1d65572d82e3a..cfd2fd7935137 100644 --- a/FWCore/MessageLogger/interface/ELseverityLevel.h +++ b/FWCore/MessageLogger/interface/ELseverityLevel.h @@ -18,120 +18,110 @@ #include namespace edm { - - // ---------------------------------------------------------------------- - // ELseverityLevel: - // ---------------------------------------------------------------------- - - class ELseverityLevel { - public: - // --- One ELseverityLevel is globally instantiated (see below) - // --- for each of the following levels: - // - enum ELsev_ { - ELsev_noValueAssigned = 0 // default returned by map when not found - , - ELsev_zeroSeverity // threshold use only - , - ELsev_success // report reaching a milestone - , - ELsev_info // information - , - ELsev_fwkInfo // framework - , - ELsev_warning // warning - , - ELsev_error // error detected - , - ELsev_unspecified // severity was not specified - , - ELsev_severe // future results are suspect - , - ELsev_highestSeverity // threshold use only - // ----- - , - nLevels // how many levels? - }; // ELsev_ - - // ----- Birth/death: - // - constexpr ELseverityLevel(ELsev_ lev = ELsev_unspecified) noexcept : myLevel(lev) {} - ELseverityLevel(std::string_view str); - // str may match getSymbol, getName, getInputStr, - // or getVarName -- see accessors - ~ELseverityLevel() noexcept = default; - - // ----- Comparator: - // - [[nodiscard]] constexpr int cmp(ELseverityLevel const& e) const noexcept { return myLevel - e.myLevel; } - - // ----- Accessors: - // - constexpr int getLevel() const noexcept { return myLevel; } - const std::string& getSymbol() const; // example: "-e" - const std::string& getName() const; // example: "Error" - const std::string& getInputStr() const; // example: "ERROR" - const std::string& getVarName() const; // example: "ELerror" - - // ----- Emitter: - // - friend std::ostream& operator<<(std::ostream& os, const ELseverityLevel& sev); - - private: - // Data per ELseverityLevel object: - // - int myLevel; - - }; // ELseverityLevel - - // ---------------------------------------------------------------------- - // Declare the globally available severity objects, - // one generator function and one proxy per non-default ELsev_: - // ---------------------------------------------------------------------- - - constexpr const ELseverityLevel ELzeroSeverity{ELseverityLevel::ELsev_zeroSeverity}; - - constexpr const ELseverityLevel ELdebug{ELseverityLevel::ELsev_success}; - - constexpr const ELseverityLevel ELinfo{ELseverityLevel::ELsev_info}; - - constexpr const ELseverityLevel ELfwkInfo{ELseverityLevel::ELsev_fwkInfo}; - - constexpr const ELseverityLevel ELwarning{ELseverityLevel::ELsev_warning}; - - constexpr const ELseverityLevel ELerror{ELseverityLevel::ELsev_error}; - - constexpr const ELseverityLevel ELunspecified{ELseverityLevel::ELsev_unspecified}; - - constexpr const ELseverityLevel ELsevere{ELseverityLevel::ELsev_severe}; - - constexpr const ELseverityLevel ELhighestSeverity{ELseverityLevel::ELsev_highestSeverity}; - - // ---------------------------------------------------------------------- - // Comparators: - // ---------------------------------------------------------------------- - - constexpr inline bool operator==(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { - return e1.cmp(e2) == 0; - } - constexpr inline bool operator!=(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { - return e1.cmp(e2) != 0; - } - constexpr inline bool operator<(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { - return e1.cmp(e2) < 0; - } - constexpr inline bool operator<=(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { - return e1.cmp(e2) <= 0; - } - constexpr inline bool operator>(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { - return e1.cmp(e2) > 0; - } - constexpr inline bool operator>=(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { - return e1.cmp(e2) >= 0; - } - - // ---------------------------------------------------------------------- - + namespace messagelogger { + // ---------------------------------------------------------------------- + // ELseverityLevel: + // ---------------------------------------------------------------------- + + class ELseverityLevel { + public: + // --- One ELseverityLevel is globally instantiated (see below) + // --- for each of the following levels: + // + enum ELsev_ { + ELsev_noValueAssigned = 0, // default returned by map when not found + ELsev_zeroSeverity, // threshold use only + ELsev_success, // report reaching a milestone + ELsev_info, // information + ELsev_fwkInfo, // framework + ELsev_warning, // warning + ELsev_error, // error detected + ELsev_unspecified, // severity was not specified + ELsev_severe, // future results are suspect + ELsev_highestSeverity, // threshold use only + // ----- + nLevels // how many levels? + }; // ELsev_ + + // ----- Birth/death: + // + constexpr ELseverityLevel(ELsev_ lev = ELsev_unspecified) noexcept : myLevel(lev) {} + ELseverityLevel(std::string_view str); + // str may match getSymbol, getName, getInputStr, + // or getVarName -- see accessors + ~ELseverityLevel() noexcept = default; + + // ----- Comparator: + // + [[nodiscard]] constexpr int cmp(ELseverityLevel const& e) const noexcept { return myLevel - e.myLevel; } + + // ----- Accessors: + // + constexpr int getLevel() const noexcept { return myLevel; } + const std::string& getSymbol() const; // example: "-e" + const std::string& getName() const; // example: "Error" + const std::string& getInputStr() const; // example: "ERROR" + const std::string& getVarName() const; // example: "ELerror" + + // ----- Emitter: + // + friend std::ostream& operator<<(std::ostream& os, const ELseverityLevel& sev); + + private: + // Data per ELseverityLevel object: + // + int myLevel; + + }; // ELseverityLevel + + // ---------------------------------------------------------------------- + // Declare the globally available severity objects, + // one generator function and one proxy per non-default ELsev_: + // ---------------------------------------------------------------------- + + constexpr const ELseverityLevel ELzeroSeverity{ELseverityLevel::ELsev_zeroSeverity}; + + constexpr const ELseverityLevel ELdebug{ELseverityLevel::ELsev_success}; + + constexpr const ELseverityLevel ELinfo{ELseverityLevel::ELsev_info}; + + constexpr const ELseverityLevel ELfwkInfo{ELseverityLevel::ELsev_fwkInfo}; + + constexpr const ELseverityLevel ELwarning{ELseverityLevel::ELsev_warning}; + + constexpr const ELseverityLevel ELerror{ELseverityLevel::ELsev_error}; + + constexpr const ELseverityLevel ELunspecified{ELseverityLevel::ELsev_unspecified}; + + constexpr const ELseverityLevel ELsevere{ELseverityLevel::ELsev_severe}; + + constexpr const ELseverityLevel ELhighestSeverity{ELseverityLevel::ELsev_highestSeverity}; + + // ---------------------------------------------------------------------- + // Comparators: + // ---------------------------------------------------------------------- + + constexpr inline bool operator==(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { + return e1.cmp(e2) == 0; + } + constexpr inline bool operator!=(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { + return e1.cmp(e2) != 0; + } + constexpr inline bool operator<(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { + return e1.cmp(e2) < 0; + } + constexpr inline bool operator<=(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { + return e1.cmp(e2) <= 0; + } + constexpr inline bool operator>(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { + return e1.cmp(e2) > 0; + } + constexpr inline bool operator>=(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept { + return e1.cmp(e2) >= 0; + } + + // ---------------------------------------------------------------------- + } // namespace messagelogger } // end of namespace edm #endif // MessageLogger_ELseverityLevel_h diff --git a/FWCore/MessageLogger/interface/ErrorObj.h b/FWCore/MessageLogger/interface/ErrorObj.h index 9e1967003a699..7f05699e2894a 100644 --- a/FWCore/MessageLogger/interface/ErrorObj.h +++ b/FWCore/MessageLogger/interface/ErrorObj.h @@ -44,7 +44,7 @@ namespace edm { public: // --- birth/death: // - ErrorObj(const ELseverityLevel& sev, std::string_view id, bool verbatim = false); + ErrorObj(const messagelogger::ELseverityLevel& sev, std::string_view id, bool verbatim = false); ErrorObj(const ErrorObj& orig); // Same serial number and everything! virtual ~ErrorObj(); @@ -64,7 +64,7 @@ namespace edm { // mutators: // - virtual void setSeverity(const ELseverityLevel& sev); + virtual void setSeverity(const messagelogger::ELseverityLevel& sev); virtual void setID(std::string_view ID); virtual void setModule(std::string_view module); virtual void setSubroutine(std::string_view subroutine); @@ -84,7 +84,7 @@ namespace edm { // --- mutators for use by ELadministrator and ELtsErrorLog // - virtual void set(const ELseverityLevel& sev, std::string_view id); + virtual void set(const messagelogger::ELseverityLevel& sev, std::string_view id); virtual void clear(); virtual void setReactedTo(bool r); diff --git a/FWCore/MessageLogger/interface/ErrorSummaryEntry.h b/FWCore/MessageLogger/interface/ErrorSummaryEntry.h index 3164867159cec..6e1836b6f3fef 100644 --- a/FWCore/MessageLogger/interface/ErrorSummaryEntry.h +++ b/FWCore/MessageLogger/interface/ErrorSummaryEntry.h @@ -33,37 +33,37 @@ // ---------------------------------------------------------------------- namespace edm { - - struct ErrorSummaryEntry { - std::string category; - std::string module; - ELseverityLevel severity; - unsigned int count; - ErrorSummaryEntry(std::string const& cat, std::string const& mod, ELseverityLevel sev, unsigned int cnt = 0) - : category(cat), module(mod), severity(sev), count(cnt) {} - ErrorSummaryEntry() : category(), module(), severity(), count(0) {} - bool operator<(ErrorSummaryEntry const& rhs) const { - if (category < rhs.category) - return true; - if (category > rhs.category) - return false; - if (module < rhs.module) - return true; - if (module > rhs.module) + namespace messagelogger { + struct ErrorSummaryEntry { + std::string category; + std::string module; + ELseverityLevel severity; + unsigned int count; + ErrorSummaryEntry(std::string const& cat, std::string const& mod, ELseverityLevel sev, unsigned int cnt = 0) + : category(cat), module(mod), severity(sev), count(cnt) {} + ErrorSummaryEntry() : category(), module(), severity(), count(0) {} + bool operator<(ErrorSummaryEntry const& rhs) const { + if (category < rhs.category) + return true; + if (category > rhs.category) + return false; + if (module < rhs.module) + return true; + if (module > rhs.module) + return false; + if (severity < rhs.severity) + return true; + if (severity > rhs.severity) + return false; + if (count < rhs.count) + return true; return false; - if (severity < rhs.severity) - return true; - if (severity > rhs.severity) - return false; - if (count < rhs.count) - return true; - return false; - } - bool operator==(ErrorSummaryEntry const& rhs) const { - return ((category < rhs.category) && (module < rhs.module) && (severity < rhs.severity) && (count < rhs.count)); - } - }; - + } + bool operator==(ErrorSummaryEntry const& rhs) const { + return ((category < rhs.category) && (module < rhs.module) && (severity < rhs.severity) && (count < rhs.count)); + } + }; + } // namespace messagelogger } // end of namespace edm #endif // MessageLogger_ErrorSummaryEntry_h diff --git a/FWCore/MessageLogger/interface/LoggedErrorsSummary.h b/FWCore/MessageLogger/interface/LoggedErrorsSummary.h index 3274c528d9be3..9096023d7f9f5 100644 --- a/FWCore/MessageLogger/interface/LoggedErrorsSummary.h +++ b/FWCore/MessageLogger/interface/LoggedErrorsSummary.h @@ -51,8 +51,8 @@ namespace edm { bool EnableLoggedErrorsSummary(); bool DisableLoggedErrorsSummary(); bool FreshErrorsExist(unsigned int iStreamID); - std::vector LoggedErrorsSummary(unsigned int iStreamID); // Errors and Warnings - std::vector LoggedErrorsOnlySummary(unsigned int iStreamID); // Errors only + std::vector LoggedErrorsSummary(unsigned int iStreamID); // Errors and Warnings + std::vector LoggedErrorsOnlySummary(unsigned int iStreamID); // Errors only } // end of namespace edm diff --git a/FWCore/MessageLogger/interface/MessageLogger.h b/FWCore/MessageLogger/interface/MessageLogger.h index 5c69805e37f8c..a61d10e414d23 100644 --- a/FWCore/MessageLogger/interface/MessageLogger.h +++ b/FWCore/MessageLogger/interface/MessageLogger.h @@ -35,33 +35,33 @@ namespace edm { namespace level { struct System { - static constexpr const ELseverityLevel level = ELsevere; + static constexpr const messagelogger::ELseverityLevel level = messagelogger::ELsevere; constexpr static bool suppress() noexcept { return false; } }; struct Error { - static constexpr const ELseverityLevel level = ELerror; + static constexpr const messagelogger::ELseverityLevel level = messagelogger::ELerror; static bool suppress() noexcept { return !MessageDrop::instance()->errorEnabled; } }; struct Warning { - static constexpr const ELseverityLevel level = ELwarning; + static constexpr const messagelogger::ELseverityLevel level = messagelogger::ELwarning; static bool suppress() noexcept { return (MessageDrop::warningAlwaysSuppressed || !MessageDrop::instance()->warningEnabled); } }; struct FwkInfo { - static constexpr const ELseverityLevel level = ELfwkInfo; + static constexpr const messagelogger::ELseverityLevel level = messagelogger::ELfwkInfo; static bool suppress() noexcept { return (MessageDrop::fwkInfoAlwaysSuppressed || !MessageDrop::instance()->fwkInfoEnabled); } }; struct Info { - static constexpr const ELseverityLevel level = ELinfo; + static constexpr const messagelogger::ELseverityLevel level = messagelogger::ELinfo; static bool suppress() noexcept { return (MessageDrop::infoAlwaysSuppressed || !MessageDrop::instance()->infoEnabled); } }; struct Debug { - static constexpr const ELseverityLevel level = ELdebug; + static constexpr const messagelogger::ELseverityLevel level = messagelogger::ELdebug; constexpr static bool suppress() noexcept { return false; } }; } // namespace level @@ -141,6 +141,10 @@ namespace edm { explicit LogDebug_(std::string_view id, std::string_view file, int line); //Needed for the LogDebug macro LogDebug_(Log const& iOther) : Log(nullptr, iOther) {} + LogDebug_(LogDebug_ const&) = delete; + LogDebug_(LogDebug_&&) = default; + LogDebug_& operator=(LogDebug_ const&) = delete; + LogDebug_& operator=(LogDebug_&&) = default; private: std::string_view stripLeadingDirectoryTree(std::string_view file) const; @@ -152,6 +156,10 @@ namespace edm { explicit LogTrace_(std::string_view id) : Log(id) {} //Needed for the LogTrace macro LogTrace_(Log const& iOther) : Log(nullptr, iOther) {} + LogTrace_(LogTrace_ const&) = delete; + LogTrace_(LogTrace_&&) = default; + LogTrace_& operator=(LogTrace_ const&) = delete; + LogTrace_& operator=(LogTrace_&&) = default; }; namespace impl { @@ -161,12 +169,14 @@ namespace edm { //Need an operator with lower precendence than operator<< LogDebug_ operator|(Log& iOther) { return LogDebug_(iOther); } LogTrace_ operator|(Log& iOther) { return LogTrace_(iOther); } + LogDebug_ operator|(Log&& iOther) { return LogDebug_(iOther); } + LogTrace_ operator|(Log&& iOther) { return LogTrace_(iOther); } }; } // namespace impl namespace edmmltest { struct WarningThatSuppressesLikeLogInfo { - static constexpr const ELseverityLevel level = ELwarning; + static constexpr const messagelogger::ELseverityLevel level = messagelogger::ELwarning; static bool suppress() noexcept { return (MessageDrop::infoAlwaysSuppressed || !MessageDrop::instance()->warningEnabled); } @@ -210,7 +220,7 @@ namespace edm { // The following two methods have no effect except in stand-alone apps // that do not create a MessageServicePresence: - void setStandAloneMessageThreshold(edm::ELseverityLevel const& severity); + void setStandAloneMessageThreshold(edm::messagelogger::ELseverityLevel const& severity); void squelchStandAloneMessageCategory(std::string const& category); } // namespace edm diff --git a/FWCore/MessageLogger/interface/MessageLoggerQ.h b/FWCore/MessageLogger/interface/MessageLoggerQ.h index 5d87b8aea48df..cc1fbb3976fe8 100644 --- a/FWCore/MessageLogger/interface/MessageLoggerQ.h +++ b/FWCore/MessageLogger/interface/MessageLoggerQ.h @@ -69,9 +69,9 @@ namespace edm { static bool handshaked(const OpCode& op); // --- special control of standAlone logging behavior - static void standAloneThreshold(edm::ELseverityLevel const& severity); + static void standAloneThreshold(edm::messagelogger::ELseverityLevel const& severity); static void squelch(std::string const& category); - static bool ignore(edm::ELseverityLevel const& severity, std::string const& category); + static bool ignore(edm::messagelogger::ELseverityLevel const& severity, std::string const& category); private: // --- traditional birth/death, but disallowed to users: @@ -84,7 +84,7 @@ namespace edm { // --- data: CMS_THREAD_SAFE static std::shared_ptr mlscribe_ptr; - CMS_THREAD_SAFE static edm::ELseverityLevel threshold; + CMS_THREAD_SAFE static edm::messagelogger::ELseverityLevel threshold; CMS_THREAD_SAFE static std::set squelchSet; }; // MessageLoggerQ diff --git a/FWCore/MessageLogger/interface/MessageSender.h b/FWCore/MessageLogger/interface/MessageSender.h index 23881f7fb19d3..64b103b8e758a 100644 --- a/FWCore/MessageLogger/interface/MessageSender.h +++ b/FWCore/MessageLogger/interface/MessageSender.h @@ -19,7 +19,10 @@ namespace edm { public: // --- birth/death: MessageSender() = default; - MessageSender(ELseverityLevel const& sev, std::string_view id, bool verbatim = false, bool suppressed = false); + MessageSender(messagelogger::ELseverityLevel const& sev, + std::string_view id, + bool verbatim = false, + bool suppressed = false); MessageSender(MessageSender&&) = default; MessageSender(MessageSender const&) = default; MessageSender& operator=(MessageSender&&) = default; diff --git a/FWCore/MessageLogger/src/ELextendedID.cc b/FWCore/MessageLogger/src/ELextendedID.cc index 7757488b9f840..e292cebc28149 100644 --- a/FWCore/MessageLogger/src/ELextendedID.cc +++ b/FWCore/MessageLogger/src/ELextendedID.cc @@ -45,7 +45,7 @@ namespace edm { void ELextendedID::clear() { id = ""; - severity = ELunspecified; + severity = messagelogger::ELunspecified; module = ""; subroutine = ""; diff --git a/FWCore/MessageLogger/src/ELseverityLevel.cc b/FWCore/MessageLogger/src/ELseverityLevel.cc index 9b3d4bdb16fb7..b7239090ac948 100644 --- a/FWCore/MessageLogger/src/ELseverityLevel.cc +++ b/FWCore/MessageLogger/src/ELseverityLevel.cc @@ -18,56 +18,57 @@ #include "FWCore/MessageLogger/interface/ELmap.h" namespace { - + using namespace edm::messagelogger; // ---------------------------------------------------------------------- // Helper to construct the string->ELsev_ map on demand: // ---------------------------------------------------------------------- - typedef std::map> ELmap; + typedef std::map> ELmap; ELmap const& loadMap() { - static const ELmap m = {{edm::ELzeroSeverity.getSymbol(), edm::ELseverityLevel::ELsev_zeroSeverity}, - {edm::ELzeroSeverity.getName(), edm::ELseverityLevel::ELsev_zeroSeverity}, - {edm::ELzeroSeverity.getInputStr(), edm::ELseverityLevel::ELsev_zeroSeverity}, - {edm::ELzeroSeverity.getVarName(), edm::ELseverityLevel::ELsev_zeroSeverity}, - {edm::ELdebug.getSymbol(), edm::ELseverityLevel::ELsev_success}, - {edm::ELdebug.getName(), edm::ELseverityLevel::ELsev_success}, - {edm::ELdebug.getInputStr(), edm::ELseverityLevel::ELsev_success}, - {edm::ELdebug.getVarName(), edm::ELseverityLevel::ELsev_success}, - {edm::ELinfo.getSymbol(), edm::ELseverityLevel::ELsev_info}, - {edm::ELinfo.getName(), edm::ELseverityLevel::ELsev_info}, - {edm::ELinfo.getInputStr(), edm::ELseverityLevel::ELsev_info}, - {edm::ELinfo.getVarName(), edm::ELseverityLevel::ELsev_info}, - {edm::ELfwkInfo.getSymbol(), edm::ELseverityLevel::ELsev_fwkInfo}, - {edm::ELfwkInfo.getName(), edm::ELseverityLevel::ELsev_fwkInfo}, - {edm::ELfwkInfo.getInputStr(), edm::ELseverityLevel::ELsev_fwkInfo}, - {edm::ELfwkInfo.getVarName(), edm::ELseverityLevel::ELsev_fwkInfo}, - {edm::ELwarning.getSymbol(), edm::ELseverityLevel::ELsev_warning}, - {edm::ELwarning.getName(), edm::ELseverityLevel::ELsev_warning}, - {edm::ELwarning.getInputStr(), edm::ELseverityLevel::ELsev_warning}, - {edm::ELwarning.getVarName(), edm::ELseverityLevel::ELsev_warning}, - {edm::ELerror.getSymbol(), edm::ELseverityLevel::ELsev_error}, - {edm::ELerror.getName(), edm::ELseverityLevel::ELsev_error}, - {edm::ELerror.getInputStr(), edm::ELseverityLevel::ELsev_error}, - {edm::ELerror.getVarName(), edm::ELseverityLevel::ELsev_error}, - {edm::ELunspecified.getSymbol(), edm::ELseverityLevel::ELsev_unspecified}, - {edm::ELunspecified.getName(), edm::ELseverityLevel::ELsev_unspecified}, - {edm::ELunspecified.getInputStr(), edm::ELseverityLevel::ELsev_unspecified}, - {edm::ELunspecified.getVarName(), edm::ELseverityLevel::ELsev_unspecified}, - {edm::ELsevere.getSymbol(), edm::ELseverityLevel::ELsev_severe}, - {edm::ELsevere.getName(), edm::ELseverityLevel::ELsev_severe}, - {edm::ELsevere.getInputStr(), edm::ELseverityLevel::ELsev_severe}, - {edm::ELsevere.getVarName(), edm::ELseverityLevel::ELsev_severe}, - {edm::ELhighestSeverity.getSymbol(), edm::ELseverityLevel::ELsev_highestSeverity}, - {edm::ELhighestSeverity.getName(), edm::ELseverityLevel::ELsev_highestSeverity}, - {edm::ELhighestSeverity.getInputStr(), edm::ELseverityLevel::ELsev_highestSeverity}, - {edm::ELhighestSeverity.getVarName(), edm::ELseverityLevel::ELsev_highestSeverity}}; + static const ELmap m = {{ELzeroSeverity.getSymbol(), ELseverityLevel::ELsev_zeroSeverity}, + {ELzeroSeverity.getName(), ELseverityLevel::ELsev_zeroSeverity}, + {ELzeroSeverity.getInputStr(), ELseverityLevel::ELsev_zeroSeverity}, + {ELzeroSeverity.getVarName(), ELseverityLevel::ELsev_zeroSeverity}, + {ELdebug.getSymbol(), ELseverityLevel::ELsev_success}, + {ELdebug.getName(), ELseverityLevel::ELsev_success}, + {ELdebug.getInputStr(), ELseverityLevel::ELsev_success}, + {ELdebug.getVarName(), ELseverityLevel::ELsev_success}, + {ELinfo.getSymbol(), ELseverityLevel::ELsev_info}, + {ELinfo.getName(), ELseverityLevel::ELsev_info}, + {ELinfo.getInputStr(), ELseverityLevel::ELsev_info}, + {ELinfo.getVarName(), ELseverityLevel::ELsev_info}, + {ELfwkInfo.getSymbol(), ELseverityLevel::ELsev_fwkInfo}, + {ELfwkInfo.getName(), ELseverityLevel::ELsev_fwkInfo}, + {ELfwkInfo.getInputStr(), ELseverityLevel::ELsev_fwkInfo}, + {ELfwkInfo.getVarName(), ELseverityLevel::ELsev_fwkInfo}, + {ELwarning.getSymbol(), ELseverityLevel::ELsev_warning}, + {ELwarning.getName(), ELseverityLevel::ELsev_warning}, + {ELwarning.getInputStr(), ELseverityLevel::ELsev_warning}, + {ELwarning.getVarName(), ELseverityLevel::ELsev_warning}, + {ELerror.getSymbol(), ELseverityLevel::ELsev_error}, + {ELerror.getName(), ELseverityLevel::ELsev_error}, + {ELerror.getInputStr(), ELseverityLevel::ELsev_error}, + {ELerror.getVarName(), ELseverityLevel::ELsev_error}, + {ELunspecified.getSymbol(), ELseverityLevel::ELsev_unspecified}, + {ELunspecified.getName(), ELseverityLevel::ELsev_unspecified}, + {ELunspecified.getInputStr(), ELseverityLevel::ELsev_unspecified}, + {ELunspecified.getVarName(), ELseverityLevel::ELsev_unspecified}, + {ELsevere.getSymbol(), ELseverityLevel::ELsev_severe}, + {ELsevere.getName(), ELseverityLevel::ELsev_severe}, + {ELsevere.getInputStr(), ELseverityLevel::ELsev_severe}, + {ELsevere.getVarName(), ELseverityLevel::ELsev_severe}, + {ELhighestSeverity.getSymbol(), ELseverityLevel::ELsev_highestSeverity}, + {ELhighestSeverity.getName(), ELseverityLevel::ELsev_highestSeverity}, + {ELhighestSeverity.getInputStr(), ELseverityLevel::ELsev_highestSeverity}, + {ELhighestSeverity.getVarName(), ELseverityLevel::ELsev_highestSeverity}}; return m; } } // namespace -namespace edm { +namespace edm::messagelogger { + // ---------------------------------------------------------------------- // Birth/death: // ---------------------------------------------------------------------- @@ -169,4 +170,4 @@ namespace edm { std::ostream& operator<<(std::ostream& os, const ELseverityLevel& sev) { return os << " -" << sev.getName() << "- "; } -} // end of namespace edm */ +} // namespace edm::messagelogger diff --git a/FWCore/MessageLogger/src/ErrorObj.cc b/FWCore/MessageLogger/src/ErrorObj.cc index 2379099b905f7..c9bf6ffc4789a 100644 --- a/FWCore/MessageLogger/src/ErrorObj.cc +++ b/FWCore/MessageLogger/src/ErrorObj.cc @@ -80,7 +80,7 @@ namespace edm { // Birth/death: // ---------------------------------------------------------------------- - ErrorObj::ErrorObj(const ELseverityLevel& sev, std::string_view id, bool verbat) : verbatim(verbat) { + ErrorObj::ErrorObj(const messagelogger::ELseverityLevel& sev, std::string_view id, bool verbat) : verbatim(verbat) { #ifdef ErrorObjCONSTRUCTOR_TRACE std::cerr << "Constructor for ErrorObj\n"; #endif @@ -159,7 +159,8 @@ namespace edm { // Mutators: // ---------------------------------------------------------------------- - void ErrorObj::setSeverity(const ELseverityLevel& sev) { + void ErrorObj::setSeverity(const messagelogger::ELseverityLevel& sev) { + using namespace edm::messagelogger; myXid.severity = (sev <= ELzeroSeverity) ? (ELseverityLevel)ELdebug : (sev >= ELhighestSeverity) ? (ELseverityLevel)ELsevere : sev; } @@ -212,7 +213,7 @@ namespace edm { } // emitToken() - void ErrorObj::set(const ELseverityLevel& sev, std::string_view id) { + void ErrorObj::set(const messagelogger::ELseverityLevel& sev, std::string_view id) { clear(); myTimestamp = time(nullptr); diff --git a/FWCore/MessageLogger/src/MessageLogger.cc b/FWCore/MessageLogger/src/MessageLogger.cc index 90e13a4836341..d8e66ec94bf5f 100644 --- a/FWCore/MessageLogger/src/MessageLogger.cc +++ b/FWCore/MessageLogger/src/MessageLogger.cc @@ -65,7 +65,7 @@ namespace edm { return file.substr(lastSlash + 1, file.size() - lastSlash - 1); } - void setStandAloneMessageThreshold(edm::ELseverityLevel const& severity) { + void setStandAloneMessageThreshold(edm::messagelogger::ELseverityLevel const& severity) { edm::MessageLoggerQ::standAloneThreshold(severity); } void squelchStandAloneMessageCategory(std::string const& category) { edm::MessageLoggerQ::squelch(category); } diff --git a/FWCore/MessageLogger/src/MessageLoggerQ.cc b/FWCore/MessageLogger/src/MessageLoggerQ.cc index 0be3720e204b8..36c90bb354768 100644 --- a/FWCore/MessageLogger/src/MessageLoggerQ.cc +++ b/FWCore/MessageLogger/src/MessageLoggerQ.cc @@ -189,11 +189,11 @@ bool MessageLoggerQ::handshaked(MessageLoggerQ::OpCode const &op) // changeLog } // MessageLoggerQ::handshaked(op) // change Log 13: -edm::ELseverityLevel MessageLoggerQ::threshold(edm::ELseverityLevel::ELsev_warning); +edm::messagelogger::ELseverityLevel MessageLoggerQ::threshold(edm::messagelogger::ELseverityLevel::ELsev_warning); std::set MessageLoggerQ::squelchSet; -void MessageLoggerQ::standAloneThreshold(edm::ELseverityLevel const &severity) { threshold = severity; } +void MessageLoggerQ::standAloneThreshold(edm::messagelogger::ELseverityLevel const &severity) { threshold = severity; } void MessageLoggerQ::squelch(std::string const &category) { squelchSet.insert(category); } -bool MessageLoggerQ::ignore(edm::ELseverityLevel const &severity, std::string const &category) { +bool MessageLoggerQ::ignore(edm::messagelogger::ELseverityLevel const &severity, std::string const &category) { if (severity < threshold) return true; if (squelchSet.count(category) > 0) diff --git a/FWCore/MessageLogger/src/MessageSender.cc b/FWCore/MessageLogger/src/MessageSender.cc index 0a33e016cfd9c..f57403b27bcdd 100644 --- a/FWCore/MessageLogger/src/MessageSender.cc +++ b/FWCore/MessageLogger/src/MessageSender.cc @@ -28,6 +28,7 @@ // using namespace edm; +using namespace edm::messagelogger; namespace { //Helper class used as 'key' to the thread safe map storing the @@ -145,6 +146,7 @@ MessageSender::~MessageSender() {} // statics can be file scoped rather than class scoped and therefore // better encapsulated. namespace edm { + using namespace messagelogger; bool EnableLoggedErrorsSummary() { bool ret = errorSummaryIsBeingKept.exchange(true, std::memory_order_acq_rel); diff --git a/FWCore/MessageLogger/src/classes.h b/FWCore/MessageLogger/src/classes.h deleted file mode 100644 index 17cd60f4a527d..0000000000000 --- a/FWCore/MessageLogger/src/classes.h +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "FWCore/MessageLogger/interface/ErrorSummaryEntry.h" diff --git a/FWCore/MessageLogger/src/classes_def.xml b/FWCore/MessageLogger/src/classes_def.xml deleted file mode 100644 index 13599ec2de920..0000000000000 --- a/FWCore/MessageLogger/src/classes_def.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/FWCore/MessageService/Readme.md b/FWCore/MessageService/Readme.md new file mode 100644 index 0000000000000..dc2555a5b6739 --- /dev/null +++ b/FWCore/MessageService/Readme.md @@ -0,0 +1,98 @@ +# Useful MessageLogger Configuration Changes + +## Turning off the end of job statistics +This requires setting the parameter of cerr +```python +process.load("FWCore.MessageService.MessageLogger_cfi") +process.MessageLogger.cerr.enableStatistics = False +``` + +## Switching from cerr to cout +One needs to switch off cerr and switch on cout + +```python +process.load("FWCore.MessageService.MessageLogger_cfi") +process.MessageLogger.cerr.enable = False +process.MessageLogger.cout.enable = True +``` + +## Writing the standard output to a file +Assuming the file you want to write is name `my_file.log` then + +```python +process.load("FWCore.MessageService.MessageLogger_cfi") +process.MessageLogger.files.my_file = dict() +``` + +The `MessageLogger` PSet knows that all parameters of `files` must be `cms.untracked.PSet` so one can use a python `dict` to allow the default values to be used. + +NOTE: The messages are still routed to cerr. If you only want messages to go to the file, also add +```python +process.MessageLogger.cerr.enable = False +``` +## Have all messages from a certain level be displayed +By default the `cerr` will reject all messages below `FWKINFO` (i.e. `threshold = "FWKINFO"`) and the defaut for `INFO` is set to print no output ,i.e. `limit = 0`. So to see all `INFO` messages one would do + +```python +process.load("FWCore.MessageService.MessageLogger_cfi") +process.MessageLogger.cerr.threshold = "INFO" +process.MessageLogger.cerr.INFO.limit = -1 +``` + +All messages above `FWKINFO` by default are set to be displayed, that is they have `limit = -1`. You can explicitly set that by doing +```python +process.load("FWCore.MessageService.MessageLogger_cfi") +process.MessageLogger.cerr.WARNING = dict(limit = -1) +``` + +The `MessageLogger.cerr` PSet knows that all _extra_ parameter labels must be of type `cms.untracked.PSet` so one can use a python `dict` set specific parameters for that PSet and allow all other parameters to use their default default values. + + +## Have specific info messages be displayed +By default the `cerr` will reject all messages below `FWKINFO` (i.e. `threshold = "FWKINFO"`) and the defaut for `INFO` is set to print no output ,i.e. `limit = 0`. In order to see messages for the category 'MyCat' the threshold must be lowered and the category must be explicitly mentioned + +```python +process.load("FWCore.MessageService.MessageLogger_cfi") +process.MessageLogger.cerr.threshold = "INFO" +process.MessageLogger.cerr.MyCat = dict() +``` + +The `MessageLogger.cerr` PSet knows that all _extra_ parameter labels must be of type `cms.untracked.PSet` so one can use a python `dict` set specific parameters for that PSet and allow all other parameters to use their default default values. + + +## Suppressing a particular category +In order to supporess messages for a given category, e.g. 'MyCat', the limit should be set to 0 + +```python +process.load("FWCore.MessageService.MessageLogger_cfi") +process.MessageLogger.MyCat = dict(limit = 0) +``` + +The `MessageLogger` PSet knows that all _extra_ parameter labels must be of type `cms.untracked.PSet` so one can use a python `dict` set specific parameters for that PSet and allow all other parameters to use their default default values. + + + +## Have debug message show for a given module +By default, all `LogDebug` code is actually removed at compilation time so any messages you want to see have to be recompiled after setting the `EDM_ML_DEBUG` compilation parameter + +```bash +> export USER_CXXFLAGS="-DEDM_ML_DEBUG" +> scram b ... +``` + +Then in the `MessageLogger` configuration you need to lower the `threshold` to `"DEBUG"` and then say you want debug messages from the module. So if your module uses the label `myModule` in the configuration, you'd specify + +```python +process.load("FWCore.MessageService.MessageLogger_cfi") +process.MessageLogger.cerr.threshold = "DEBUG" +process.MessageLogger.debugModules = ["myModule"] +``` + +If you are not interested in a particular module but instead want to see all debug messages, you can instead set `debugModules` using `*` + +```python +process.load("FWCore.MessageService.MessageLogger_cfi") +process.MessageLogger.cerr.threshold = "DEBUG" +process.MessageLogger.debugModules = ["*"] +``` + diff --git a/FWCore/MessageService/bin/edm_modernize_messagelogger.py b/FWCore/MessageService/bin/edm_modernize_messagelogger.py new file mode 100644 index 0000000000000..f31a4fbc508b4 --- /dev/null +++ b/FWCore/MessageService/bin/edm_modernize_messagelogger.py @@ -0,0 +1,70 @@ +import sys + +args = sys.argv + +if len(args) == 1: + print("file names must be passed as arguments") + exit(-1) +if args[1] == '-h' or args[1] == '--help': + print( +"""python edm_modernize_messagelogger.py [-h/--help] filename [...] + + Converts explicit constructions of cms.Service("MessageLogger") from old MessageLogger + configration syntax to new the new syntax. + The script expects a list of files to be modified in place. + + NOTE: The script is known to miss some corner-cases in the conversion so always check + the results of the transformation. +""" + ) + exit(0) + +for arg in args[1:]: + execfile(arg) + + ml = process.MessageLogger.clone() + if hasattr(process.MessageLogger, "statistics"): + stat = process.MessageLogger.statistics + for s in stat: + dest = getattr(ml, s.value()) + dest.enableStatistics = cms.untracked.bool(True) + del ml.statistics + dest = process.MessageLogger.destinations + files = cms.untracked.PSet() + if 'cerr' not in dest: + ml.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) + for d in dest: + if 'cout' == d: + continue + if 'cerr' == d: + continue + setattr(files, d, getattr(ml,d.value())) + delattr(ml, d) + + if hasattr(ml,'categories'): + del ml.categories + del ml.destinations + + f = open(arg) + newF = open(arg+"new", "w") + + processingML = False + parenthesis = 0 + for l in f.readlines(): + if not processingML: + if 'process.MessageLogger' == l[0:21]: + processingML = True + parenthesis = l.count('(') + parenthesis -= l.count(')') + if 0 == parenthesis: + processingML = False + continue + newF.write(l) + else: + parenthesis += l.count('(') + parenthesis -= l.count(')') + if 0 == parenthesis: + processingML = False + newF.write('process.MessageLogger = '+ml.dumpPython()) + + \ No newline at end of file diff --git a/FWCore/MessageService/interface/MessageLogger.h b/FWCore/MessageService/interface/MessageLogger.h index ff46741db63b2..d90822251a937 100644 --- a/FWCore/MessageService/interface/MessageLogger.h +++ b/FWCore/MessageService/interface/MessageLogger.h @@ -73,6 +73,9 @@ namespace edm { void preModuleConstruction(ModuleDescription const&); void postModuleConstruction(ModuleDescription const&); + void preModuleDestruction(ModuleDescription const&); + void postModuleDestruction(ModuleDescription const&); + void preSourceConstruction(ModuleDescription const&); void postSourceConstruction(ModuleDescription const&); @@ -168,7 +171,7 @@ namespace edm { unsigned int runInfoBegin_ = 0; std::set debugEnabledModules_; - std::map suppression_levels_; + std::map suppression_levels_; bool debugEnabled_; CMS_THREAD_SAFE static bool anyDebugEnabled_; CMS_THREAD_SAFE static bool everyDebugEnabled_; diff --git a/FWCore/MessageService/python/MessageLogger_ReleaseValidation_cfi.py b/FWCore/MessageService/python/MessageLogger_ReleaseValidation_cfi.py index fb246309a348e..abde18ba97de8 100644 --- a/FWCore/MessageService/python/MessageLogger_ReleaseValidation_cfi.py +++ b/FWCore/MessageService/python/MessageLogger_ReleaseValidation_cfi.py @@ -1,16 +1,67 @@ import FWCore.ParameterSet.Config as cms +_category = cms.optional.untracked.PSetTemplate( + reportEvery = cms.untracked.int32(1), + limit = cms.optional.untracked.int32, + timespan = cms.optional.untracked.int32 +) + +_destination_base = cms.untracked.PSet( + noLineBreaks = cms.optional.untracked.bool, + noTimeStamps = cms.optional.untracked.bool, + lineLength = cms.optional.untracked.int32, + threshold = cms.optional.untracked.string, + statisticsThreshold = cms.optional.untracked.string, + allowAnyLabel_ = _category +) +_destination_no_stat = _destination_base.clone( + enableStatistics = cms.untracked.bool(False), + resetStatistics = cms.untracked.bool(False) +) + +_file_destination = cms.optional.untracked.PSetTemplate( + noLineBreaks = cms.optional.untracked.bool, + noTimeStamps = cms.optional.untracked.bool, + lineLength = cms.optional.untracked.int32, + threshold = cms.optional.untracked.string, + statisticsThreshold = cms.optional.untracked.string, + enableStatistics = cms.untracked.bool(False), + resetStatistics = cms.untracked.bool(False), + filename = cms.optional.untracked.string, + extension = cms.optional.untracked.string, + output = cms.optional.untracked.string, + allowAnyLabel_ = _category +) + +_default_pset = cms.untracked.PSet( + reportEvery = cms.untracked.int32(1), + limit = cms.optional.untracked.int32, + timespan = cms.optional.untracked.int32, + + noLineBreaks = cms.untracked.bool(False), + noTimeStamps = cms.untracked.bool(False), + lineLength = cms.untracked.int32(80), + threshold = cms.untracked.string("INFO"), + statisticsThreshold = cms.untracked.string("INFO"), + allowAnyLabel_ = _category +) + + MessageLogger = cms.Service("MessageLogger", - suppressInfo = cms.untracked.vstring(), + suppressWarning = cms.untracked.vstring(), suppressFwkInfo = cms.untracked.vstring(), + suppressInfo = cms.untracked.vstring(), suppressDebug = cms.untracked.vstring(), - cout = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ), - default = cms.untracked.PSet( - - ), - cerr = cms.untracked.PSet( + debugModules = cms.untracked.vstring(), + cout = _destination_no_stat.clone( + enable = cms.untracked.bool(False) + ), + default = _default_pset.clone(), + cerr = _destination_base.clone( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), + resetStatistics = cms.untracked.bool(False), + statisticsThreshold = cms.untracked.string('INFO'), INFO = cms.untracked.PSet( limit = cms.untracked.int32(5) ), @@ -31,19 +82,10 @@ ), threshold = cms.untracked.string('INFO') ), - suppressWarning = cms.untracked.vstring(), - statistics = cms.untracked.vstring('cerr_stats'), - cerr_stats = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - output = cms.untracked.string('cerr') + files = cms.untracked.PSet( + allowAnyLabel_ = _file_destination ), - destinations = cms.untracked.vstring( - 'cout', - 'cerr'), - debugModules = cms.untracked.vstring(), - categories = cms.untracked.vstring('FwkReport', - 'FwkSummary', - 'Root_NoDictionary') + allowAnyLabel_ = _category ) diff --git a/FWCore/MessageService/python/MessageLogger_cfi.py b/FWCore/MessageService/python/MessageLogger_cfi.py index 6cbc7f24e17d7..88fa79fac2eb5 100644 --- a/FWCore/MessageService/python/MessageLogger_cfi.py +++ b/FWCore/MessageService/python/MessageLogger_cfi.py @@ -1,23 +1,72 @@ import FWCore.ParameterSet.Config as cms +_category = cms.optional.untracked.PSetTemplate( + reportEvery = cms.untracked.int32(1), + limit = cms.optional.untracked.int32, + timespan = cms.optional.untracked.int32 +) + +_destination_base = cms.untracked.PSet( + noLineBreaks = cms.optional.untracked.bool, + noTimeStamps = cms.optional.untracked.bool, + lineLength = cms.optional.untracked.int32, + threshold = cms.optional.untracked.string, + statisticsThreshold = cms.optional.untracked.string, + allowAnyLabel_ = _category +) +_destination_no_stat = _destination_base.clone( + enableStatistics = cms.untracked.bool(False), + resetStatistics = cms.untracked.bool(False) +) + +_file_destination = cms.optional.untracked.PSetTemplate( + noLineBreaks = cms.optional.untracked.bool, + noTimeStamps = cms.optional.untracked.bool, + lineLength = cms.optional.untracked.int32, + threshold = cms.optional.untracked.string, + statisticsThreshold = cms.optional.untracked.string, + enableStatistics = cms.untracked.bool(False), + resetStatistics = cms.untracked.bool(False), + filename = cms.optional.untracked.string, + extension = cms.optional.untracked.string, + output = cms.optional.untracked.string, + allowAnyLabel_ = _category +) + +_default_pset = cms.untracked.PSet( + reportEvery = cms.untracked.int32(1), + limit = cms.optional.untracked.int32, + timespan = cms.optional.untracked.int32, + + noLineBreaks = cms.untracked.bool(False), + noTimeStamps = cms.untracked.bool(False), + lineLength = cms.untracked.int32(80), + threshold = cms.untracked.string("INFO"), + statisticsThreshold = cms.untracked.string("INFO"), + allowAnyLabel_ = _category +) + + MessageLogger = cms.Service("MessageLogger", - suppressInfo = cms.untracked.vstring(), + suppressWarning = cms.untracked.vstring(), suppressFwkInfo = cms.untracked.vstring(), + suppressInfo = cms.untracked.vstring(), suppressDebug = cms.untracked.vstring(), - cout = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) - ), - default = cms.untracked.PSet( - - ), - cerr = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), + debugModules = cms.untracked.vstring(), + cout = _destination_no_stat.clone( + enable = cms.untracked.bool(False) + ), + default = _default_pset.clone(), + cerr = _destination_base.clone( + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), + resetStatistics = cms.untracked.bool(False), + statisticsThreshold = cms.untracked.string('WARNING'), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), noTimeStamps = cms.untracked.bool(False), FwkReport = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), reportEvery = cms.untracked.int32(1), limit = cms.untracked.int32(10000000) ), @@ -25,30 +74,18 @@ limit = cms.untracked.int32(10000000) ), Root_NoDictionary = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), limit = cms.untracked.int32(0) ), FwkSummary = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), reportEvery = cms.untracked.int32(1), limit = cms.untracked.int32(10000000) ), threshold = cms.untracked.string('INFO') ), - suppressWarning = cms.untracked.vstring(), - statistics = cms.untracked.vstring('cerr_stats'), - cerr_stats = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), - threshold = cms.untracked.string('WARNING'), - output = cms.untracked.string('cerr') + files = cms.untracked.PSet( + allowAnyLabel_ = _file_destination ), - destinations = cms.untracked.vstring( - 'cout', - 'cerr'), - debugModules = cms.untracked.vstring(), - categories = cms.untracked.vstring('FwkReport', - 'FwkSummary', - 'Root_NoDictionary') + allowAnyLabel_ = _category ) diff --git a/FWCore/MessageService/src/ELadministrator.cc b/FWCore/MessageService/src/ELadministrator.cc index 9556c7649da87..083296cd50832 100644 --- a/FWCore/MessageService/src/ELadministrator.cc +++ b/FWCore/MessageService/src/ELadministrator.cc @@ -42,20 +42,20 @@ // ELadministrator::attach( const ELdestination & sink ) // ELadministrator::attach( const ELdestination & sink, const ELstring & name ) // ELadministrator::checkSeverity() -// ELadministrator::severityCount( const ELseverityLevel & sev ) const -// ELadministrator::severityCount( const ELseverityLevel & from, -// const ELseverityLevel & to ) const -// ELadministrator::resetSeverityCount( const ELseverityLevel & sev ) -// ELadministrator::resetSeverityCount( const ELseverityLevel & from, -// const ELseverityLevel & to ) +// ELadministrator::severityCount( const messagelogger::ELseverityLevel & sev ) const +// ELadministrator::severityCount( const messagelogger::ELseverityLevel & from, +// const messagelogger::ELseverityLevel & to ) const +// ELadministrator::resetSeverityCount( const messagelogger::ELseverityLevel & sev ) +// ELadministrator::resetSeverityCount( const messagelogger::ELseverityLevel & from, +// const messagelogger::ELseverityLevel & to ) // ELadministrator::resetSeverityCount() -// ELadministrator::setThresholds( const ELseverityLevel & sev ) +// ELadministrator::setThresholds( const messagelogger::ELseverityLevel & sev ) // ELadministrator::setLimits( const ELstring & id, int limit ) -// ELadministrator::setLimits( const ELseverityLevel & sev, int limit ) +// ELadministrator::setLimits( const messagelogger::ELseverityLevel & sev, int limit ) // ELadministrator::setIntervals( const ELstring & id, int interval ) -// ELadministrator::setIntervals( const ELseverityLevel & sev, int interval ) +// ELadministrator::setIntervals( const messagelogger::ELseverityLevel & sev, int interval ) // ELadministrator::setTimespans( const ELstring & id, int seconds ) -// ELadministrator::setTimespans( const ELseverityLevel & sev, int seconds ) +// ELadministrator::setTimespans( const messagelogger::ELseverityLevel & sev, int seconds ) // ELadministrator::wipe() // ELadministrator::finish() // @@ -82,6 +82,7 @@ #include #include using std::cerr; +using namespace edm::messagelogger; namespace edm { namespace service { diff --git a/FWCore/MessageService/src/ELadministrator.h b/FWCore/MessageService/src/ELadministrator.h index ae825a4783764..9f9ef643a9485 100644 --- a/FWCore/MessageService/src/ELadministrator.h +++ b/FWCore/MessageService/src/ELadministrator.h @@ -77,39 +77,39 @@ namespace edm { // --- handle severity information: // - ELseverityLevel checkSeverity(); - int severityCount(const ELseverityLevel& sev) const; - int severityCount(const ELseverityLevel& from, const ELseverityLevel& to) const; - void resetSeverityCount(const ELseverityLevel& sev); - void resetSeverityCount(const ELseverityLevel& from, const ELseverityLevel& to); + messagelogger::ELseverityLevel checkSeverity(); + int severityCount(const messagelogger::ELseverityLevel& sev) const; + int severityCount(const messagelogger::ELseverityLevel& from, const messagelogger::ELseverityLevel& to) const; + void resetSeverityCount(const messagelogger::ELseverityLevel& sev); + void resetSeverityCount(const messagelogger::ELseverityLevel& from, const messagelogger::ELseverityLevel& to); void resetSeverityCount(); // reset all // --- apply the following actions to all attached destinations: // - void setThresholds(const ELseverityLevel& sev); + void setThresholds(const messagelogger::ELseverityLevel& sev); void setLimits(const std::string& id, int limit); - void setLimits(const ELseverityLevel& sev, int limit); + void setLimits(const messagelogger::ELseverityLevel& sev, int limit); void setIntervals(const std::string& id, int interval); - void setIntervals(const ELseverityLevel& sev, int interval); + void setIntervals(const messagelogger::ELseverityLevel& sev, int interval); void setTimespans(const std::string& id, int seconds); - void setTimespans(const ELseverityLevel& sev, int seconds); + void setTimespans(const messagelogger::ELseverityLevel& sev, int seconds); void wipe(); void finish(); protected: // --- member data accessors: // - const ELseverityLevel& abortThreshold() const; - const ELseverityLevel& exitThreshold() const; - const ELseverityLevel& highSeverity() const; + const messagelogger::ELseverityLevel& abortThreshold() const; + const messagelogger::ELseverityLevel& exitThreshold() const; + const messagelogger::ELseverityLevel& highSeverity() const; int severityCounts(int lev) const; private: // --- traditional member data: // std::list>> sinks_; - ELseverityLevel highSeverity_; - int severityCounts_[ELseverityLevel::nLevels]; + messagelogger::ELseverityLevel highSeverity_; + int severityCounts_[messagelogger::ELseverityLevel::nLevels]; std::map>> attachedDestinations_; diff --git a/FWCore/MessageService/src/ELdestination.cc b/FWCore/MessageService/src/ELdestination.cc index 16518da25c189..6129808931421 100644 --- a/FWCore/MessageService/src/ELdestination.cc +++ b/FWCore/MessageService/src/ELdestination.cc @@ -31,6 +31,7 @@ // Possible Traces: // #define ELdestinationCONSTRUCTOR_TRACE +using namespace edm::messagelogger; namespace edm { namespace service { diff --git a/FWCore/MessageService/src/ELdestination.h b/FWCore/MessageService/src/ELdestination.h index 958336e98f64a..f7a00a867b405 100644 --- a/FWCore/MessageService/src/ELdestination.h +++ b/FWCore/MessageService/src/ELdestination.h @@ -67,14 +67,14 @@ namespace edm { // ----- Behavior control methods invoked by the framework: // - void setThreshold(const ELseverityLevel& sv); - void setTraceThreshold(const ELseverityLevel& sv); + void setThreshold(const messagelogger::ELseverityLevel& sv); + void setTraceThreshold(const messagelogger::ELseverityLevel& sv); void setLimit(const std::string& s, int n); - void setLimit(const ELseverityLevel& sv, int n); + void setLimit(const messagelogger::ELseverityLevel& sv, int n); void setInterval(const std::string& s, int interval); - void setInterval(const ELseverityLevel& sv, int interval); + void setInterval(const messagelogger::ELseverityLevel& sv, int interval); void setTimespan(const std::string& s, int n); - void setTimespan(const ELseverityLevel& sv, int n); + void setTimespan(const messagelogger::ELseverityLevel& sv, int n); // ----- Select output format options: // @@ -114,8 +114,8 @@ namespace edm { virtual void flush(); protected: - ELseverityLevel threshold; - ELseverityLevel traceThreshold; + messagelogger::ELseverityLevel threshold; + messagelogger::ELseverityLevel traceThreshold; ELlimitsTable limits; std::string preamble; std::string newline; diff --git a/FWCore/MessageService/src/ELlimitsTable.cc b/FWCore/MessageService/src/ELlimitsTable.cc index 41f0c7335cb11..13afefb32b961 100644 --- a/FWCore/MessageService/src/ELlimitsTable.cc +++ b/FWCore/MessageService/src/ELlimitsTable.cc @@ -41,7 +41,7 @@ namespace edm { std::cerr << "Constructor for ELlimitsTable\n"; #endif - for (int k = 0; k < ELseverityLevel::nLevels; ++k) { + for (int k = 0; k < messagelogger::ELseverityLevel::nLevels; ++k) { severityLimits[k] = -1; // JvR 99-06-10 severityIntervals[k] = -1; severityTimespans[k] = -1; @@ -177,7 +177,7 @@ namespace edm { wildcardLimit = -1; wildcardTimespan = -1; - for (int lev = 0; lev < ELseverityLevel::nLevels; ++lev) { + for (int lev = 0; lev < messagelogger::ELseverityLevel::nLevels; ++lev) { severityLimits[lev] = -1; severityIntervals[lev] = -1; severityTimespans[lev] = -1; @@ -200,7 +200,9 @@ namespace edm { limits[id].limit = n; } - void ELlimitsTable::setLimit(const ELseverityLevel& sev, int n) { severityLimits[sev.getLevel()] = n; } + void ELlimitsTable::setLimit(const messagelogger::ELseverityLevel& sev, int n) { + severityLimits[sev.getLevel()] = n; + } void ELlimitsTable::setInterval(const std::string& id, int interval) { if (id[0] == '*') @@ -209,7 +211,7 @@ namespace edm { limits[id].interval = interval; } - void ELlimitsTable::setInterval(const ELseverityLevel& sev, int interval) { + void ELlimitsTable::setInterval(const messagelogger::ELseverityLevel& sev, int interval) { severityIntervals[sev.getLevel()] = interval; } @@ -220,7 +222,9 @@ namespace edm { limits[id].timespan = n; } - void ELlimitsTable::setTimespan(const ELseverityLevel& sev, int n) { severityTimespans[sev.getLevel()] = n; } + void ELlimitsTable::setTimespan(const messagelogger::ELseverityLevel& sev, int n) { + severityTimespans[sev.getLevel()] = n; + } // ---------------------------------------------------------------------- // Support for internal operations: @@ -232,7 +236,7 @@ namespace edm { } limits = t.limits; // The non-trivial operator= for a map! - for (int lev = 0; lev < ELseverityLevel::nLevels; ++lev) { + for (int lev = 0; lev < messagelogger::ELseverityLevel::nLevels; ++lev) { severityTimespans[lev] = t.severityTimespans[lev]; severityTimespans[lev] = t.severityTimespans[lev]; } diff --git a/FWCore/MessageService/src/ELlimitsTable.h b/FWCore/MessageService/src/ELlimitsTable.h index 560e52e9038de..3cb99ea0de505 100644 --- a/FWCore/MessageService/src/ELlimitsTable.h +++ b/FWCore/MessageService/src/ELlimitsTable.h @@ -75,20 +75,20 @@ namespace edm { void zero(); // Clears only counts. void setLimit(const std::string& id, int n); - void setLimit(const ELseverityLevel& sev, int n); + void setLimit(const messagelogger::ELseverityLevel& sev, int n); void setInterval(const std::string& id, int interval); - void setInterval(const ELseverityLevel& sev, int interval); + void setInterval(const messagelogger::ELseverityLevel& sev, int interval); void setTimespan(const std::string& id, int n); - void setTimespan(const ELseverityLevel& sev, int n); + void setTimespan(const messagelogger::ELseverityLevel& sev, int n); ELlimitsTable& operator=(const ELlimitsTable& t); // ----- Tables and auxilliary private data: // protected: - int severityLimits[ELseverityLevel::nLevels]; - int severityTimespans[ELseverityLevel::nLevels]; - int severityIntervals[ELseverityLevel::nLevels]; + int severityLimits[messagelogger::ELseverityLevel::nLevels]; + int severityTimespans[messagelogger::ELseverityLevel::nLevels]; + int severityIntervals[messagelogger::ELseverityLevel::nLevels]; int wildcardLimit; int wildcardInterval; int wildcardTimespan; diff --git a/FWCore/MessageService/src/ELoutput.cc b/FWCore/MessageService/src/ELoutput.cc index 7c6ef3b991255..714cf2b3ddf5d 100644 --- a/FWCore/MessageService/src/ELoutput.cc +++ b/FWCore/MessageService/src/ELoutput.cc @@ -116,6 +116,7 @@ namespace { } // formatTime() } // namespace +using namespace edm::messagelogger; namespace edm { namespace service { // ---------------------------------------------------------------------- diff --git a/FWCore/MessageService/src/ELstatistics.cc b/FWCore/MessageService/src/ELstatistics.cc index d41edeab5b26f..1bb932eb830f1 100644 --- a/FWCore/MessageService/src/ELstatistics.cc +++ b/FWCore/MessageService/src/ELstatistics.cc @@ -63,6 +63,8 @@ namespace { } } // namespace +using namespace edm::messagelogger; + namespace edm { namespace service { diff --git a/FWCore/MessageService/src/MessageLogger.cc b/FWCore/MessageService/src/MessageLogger.cc index fde86d978589d..72148b8e3438f 100644 --- a/FWCore/MessageService/src/MessageLogger.cc +++ b/FWCore/MessageService/src/MessageLogger.cc @@ -43,6 +43,7 @@ using namespace edm; using namespace edm::service; +using namespace edm::messagelogger; namespace { constexpr std::array s_globalTransitionNames = {{"@beginJob", @@ -228,6 +229,9 @@ namespace edm { iRegistry.watchPostSourceConstruction(this, &MessageLogger::postSourceConstruction); // change log 3 + iRegistry.watchPreModuleDestruction(this, &MessageLogger::preModuleDestruction); + iRegistry.watchPostModuleDestruction(this, &MessageLogger::postModuleDestruction); + iRegistry.watchPreModuleEvent(this, &MessageLogger::preModuleEvent); iRegistry.watchPostModuleEvent(this, &MessageLogger::postModuleEvent); @@ -494,12 +498,17 @@ namespace edm { } establishModule(desc, "@ctor"); // ChangeLog 16 } - void MessageLogger::postModuleConstruction( - const ModuleDescription& - iDescription) { //it is now guaranteed that this will be called even if the module throws + //it is now guaranteed that this will be called even if the module throws + void MessageLogger::postModuleConstruction(const ModuleDescription& iDescription) { unEstablishModule(iDescription, "AfterModConstruction"); } + void MessageLogger::preModuleDestruction(const ModuleDescription& desc) { establishModule(desc, "@dtor"); } + //it is guaranteed that this will be called even if the module throws + void MessageLogger::postModuleDestruction(const ModuleDescription& iDescription) { + unEstablishModule(iDescription, "AfterModDestruction"); + } + void MessageLogger::preModuleBeginJob(const ModuleDescription& desc) { establishModule(desc, "@beginJob"); // ChangeLog 13 } diff --git a/FWCore/MessageService/src/ThreadSafeLogMessageLoggerScribe.cc b/FWCore/MessageService/src/ThreadSafeLogMessageLoggerScribe.cc index 712cd3404fe85..22156c512691f 100644 --- a/FWCore/MessageService/src/ThreadSafeLogMessageLoggerScribe.cc +++ b/FWCore/MessageService/src/ThreadSafeLogMessageLoggerScribe.cc @@ -33,6 +33,7 @@ #include using std::cerr; +using namespace edm::messagelogger; namespace edm { namespace service { @@ -350,6 +351,14 @@ namespace edm { configure_statistics_dest(job_pset, defaults, categories, dest_pset, name, actual_filename); } } + if (cout_dest.getUntrackedParameter("enable") and + getAparameter(cout_dest, "enableStatistics", true)) { + configure_statistics_dest(job_pset, defaults, categories, cout_dest, "cout", "cout"); + } + if (cerr_dest.getUntrackedParameter("enable") and + getAparameter(cerr_dest, "enableStatistics", true)) { + configure_statistics_dest(job_pset, defaults, categories, cerr_dest, "cerr", "cerr"); + } } void ThreadSafeLogMessageLoggerScribe::configure_errorlog(edm::ParameterSet& job_pset) { diff --git a/FWCore/MessageService/test/PsetValidationSamples/cat_cfg.py b/FWCore/MessageService/test/PsetValidationSamples/cat_cfg.py index f99f9081d73b2..53d22f2713be0 100644 --- a/FWCore/MessageService/test/PsetValidationSamples/cat_cfg.py +++ b/FWCore/MessageService/test/PsetValidationSamples/cat_cfg.py @@ -11,97 +11,69 @@ process.load("FWCore.MessageService.test.Services_cff") process.MessageLogger = cms.Service("MessageLogger", - - destinations = cms.untracked.vstring( 'u1_warnings', 'u1_errors', - 'u1_infos', 'u1_debugs', 'u1_default', 'u1_x'), - categories = cms.untracked.vstring('preEventProcessing','FwkTest', - 'cat_A','cat_B', 'cat_J', 'cat_K'), - -# enabling any of these acter the first one should fail: - - cat_J = cms.untracked.PSet( - limit = cms.untracked.int32(100), - reportEvery = cms.untracked.int32(10), - timespan = cms.untracked.int32(10) + cat_J = cms.untracked.PSet( + limit = cms.untracked.int32(100), + reportEvery = cms.untracked.int32(10), + timespan = cms.untracked.int32(10) + ), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + u1_debugs = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('DEBUG') ), - -# cat_K = cms.untracked.PSet( -# limit = cms.untracked.int32(100), -# reportEvery = cms.untracked.int32(10), -# timespan = cms.untracked.int32(10), -# nonsense = cms.untracked.int32(10) -# ), - -# enabling any of these except the first 5 should fail: - - u1_x = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_default = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ) ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_errors = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') ), -# cat_K = cms.untracked.PSet( -# limit = cms.untracked.int32(100), -# reportEvery = cms.untracked.int32(10), -# timespan = cms.untracked.int32(10), -# nonsense = cms.untracked.int32(10) -# ), - -# cat_J = cms.untracked.PSet( -# a = cms.untracked.bool(True), -# b = cms.untracked.PSet( c = cms.untracked.int32(10) ) -# ), - -# this one should be fine - INFO = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - - - u1_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_warnings = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True) - ), - u1_debugs = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_infos = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('INFO') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_default = cms.untracked.PSet( - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_warnings = cms.untracked.PSet( + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_x = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + INFO = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('INFO') ) - ), - u1_errors = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), - noTimeStamps = cms.untracked.bool(True) - ), - debugModules = cms.untracked.vstring('*'), + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/PsetValidationSamples/categories_cfg.py b/FWCore/MessageService/test/PsetValidationSamples/categories_cfg.py index b10981345cfcd..9202efd569970 100644 --- a/FWCore/MessageService/test/PsetValidationSamples/categories_cfg.py +++ b/FWCore/MessageService/test/PsetValidationSamples/categories_cfg.py @@ -11,65 +11,55 @@ process.load("FWCore.MessageService.test.Services_cff") process.MessageLogger = cms.Service("MessageLogger", - - destinations = cms.untracked.vstring( 'u1_warnings', 'u1_errors', - 'u1_infos', 'u1_debugs', 'u1_default', 'u1_x'), - -#enable one of the following -- the first should pass, the rest fail - categories = cms.untracked.vstring('preEventProcessing','FwkTest', - 'cat_A','cat_B'), -# categories = cms.vstring('preEventProcessing','FwkTest','u1_x'), -# categories = cms.vstring('preEventProcessing','FwkTest','u1_y'), -# categories = cms.vstring('preEventProcessing','FwkTest','u1_f'), -# categories = cms.untracked.int32(2), -# categories = cms.untracked.vstring('preEventProcessing','FwkTest', -# 'cat_A','cat_B','cat_A'), -# categories = cms.untracked.vstring('preEventProcessing','FwkTest', -# 'cat_A','cat_B','limit'), - -# If the passing one above enabled, enabling this should now fail: cat_A = cms.untracked.int32(2), - - u1_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - u1_warnings = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True) - ), - u1_debugs = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + u1_debugs = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('DEBUG') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_default = cms.untracked.PSet( - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_default = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ) ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_errors = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') + ), + u1_infos = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('INFO') + ), + u1_warnings = cms.untracked.PSet( + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ), + u1_x = cms.untracked.PSet( + ) - ), - u1_errors = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), - noTimeStamps = cms.untracked.bool(True) - ), - debugModules = cms.untracked.vstring('*'), + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/PsetValidationSamples/dest_cfg.py b/FWCore/MessageService/test/PsetValidationSamples/dest_cfg.py index 55196d2840167..131733bea43a0 100644 --- a/FWCore/MessageService/test/PsetValidationSamples/dest_cfg.py +++ b/FWCore/MessageService/test/PsetValidationSamples/dest_cfg.py @@ -11,83 +11,64 @@ process.load("FWCore.MessageService.test.Services_cff") process.MessageLogger = cms.Service("MessageLogger", - - destinations = cms.untracked.vstring( 'u1_warnings', 'u1_errors', - 'u1_infos', 'u1_debugs', 'u1_default', 'u1_x'), - categories = cms.untracked.vstring('preEventProcessing','FwkTest', - 'cat_A','cat_B'), - -# enabling any of these except the first 5 should fail: - - u1_x = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + u1_debugs = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('DEBUG') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_default = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ) ), -# placeholder = cms.untracked.int32(2), -# limit = cms.untracked.int32(2), -# noTimeStamps = cms.untracked.int32(2), -# cat_C = cms.untracked.PSet( -# limit = cms.untracked.int32(0) -# ), -# filename = cms.untracked.string("cerr"), -# extension = cms.untracked.string("cout"), -# this one should be fine - INFO = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - -# enabling this should lead to error -# u1_y = cms.untracked.PSet( -# noTimeStamps = cms.untracked.bool(True) -# ), - - - u1_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_errors = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_warnings = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True) - ), - u1_debugs = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_infos = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('INFO') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_default = cms.untracked.PSet( - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_warnings = cms.untracked.PSet( + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_x = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + INFO = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('INFO') ) - ), - u1_errors = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), - noTimeStamps = cms.untracked.bool(True) - ), - debugModules = cms.untracked.vstring('*'), + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/PsetValidationSamples/destlist_cfg.py b/FWCore/MessageService/test/PsetValidationSamples/destlist_cfg.py index 4cd491a5cbacf..f3fa69c67872e 100644 --- a/FWCore/MessageService/test/PsetValidationSamples/destlist_cfg.py +++ b/FWCore/MessageService/test/PsetValidationSamples/destlist_cfg.py @@ -11,69 +11,52 @@ process.load("FWCore.MessageService.test.Services_cff") process.MessageLogger = cms.Service("MessageLogger", - -#enable one of the following -- the first should pass, the rest fail - destinations = cms.untracked.vstring( 'u1_warnings', 'u1_errors', - 'u1_infos', 'u1_debugs', 'u1_default', 'u1_x'), - -# destinations = cms.untracked.vstring('cerr'), -# destinations = cms.untracked.vstring('cout'), -# destinations = cms.vstring('cout'), -# destinations = cms.untracked.int32(2), -# destinations = cms.untracked.vstring('u1_warnings', 'u1_errors', 'u1_warnings'), -# destinations = cms.untracked.vstring('cerr', 'cout'), -# destinations = cms.untracked.vstring('cout','limit'), - -#enable first destinations and one of these -- should fail -# u1_x = cms.untracked.int32(0), -# u1_x = cms.untracked.bool(true), -# u1_x = cms.untracked.string('abc'), -# u1_x = cms.untracked.vstring('abc','def'), -# u1_x = cms.int32(0), -# u1_x = cms.bool(true), -# u1_x = cms.string('abc'), -# u1_x = cms.vstring('abc','def'), - - u1_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - u1_warnings = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - noTimeStamps = cms.untracked.bool(True) - ), - u1_debugs = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + u1_debugs = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('DEBUG') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_default = cms.untracked.PSet( - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_default = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ) ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_errors = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') + ), + u1_infos = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('INFO') + ), + u1_warnings = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ), + u1_x = cms.untracked.PSet( + ) - ), - u1_errors = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), - noTimeStamps = cms.untracked.bool(True) - ), - debugModules = cms.untracked.vstring('*'), - categories = cms.untracked.vstring('preEventProcessing', - 'FwkTest') + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/PsetValidationSamples/fwkJRlist_cfg.py b/FWCore/MessageService/test/PsetValidationSamples/fwkJRlist_cfg.py index c779553089fcc..6842fdab91c70 100644 --- a/FWCore/MessageService/test/PsetValidationSamples/fwkJRlist_cfg.py +++ b/FWCore/MessageService/test/PsetValidationSamples/fwkJRlist_cfg.py @@ -11,53 +11,54 @@ process.load("FWCore.MessageService.test.Services_cff") process.MessageLogger = cms.Service("MessageLogger", - - destinations = cms.untracked.vstring( 'u1_warnings', 'u1_errors', - 'u1_infos', 'u1_debugs', 'u1_default', 'u1_x'), - - - u1_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_warnings = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - u1_debugs = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + u1_debugs = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('DEBUG') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_default = cms.untracked.PSet( - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_default = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ) ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_errors = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') + ), + u1_infos = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('INFO') + ), + u1_warnings = cms.untracked.PSet( + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ), + u1_x = cms.untracked.PSet( + ) - ), - u1_errors = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), - noTimeStamps = cms.untracked.bool(True) - ), - debugModules = cms.untracked.vstring('*'), - categories = cms.untracked.vstring('preEventProcessing', - 'FwkTest') + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/PsetValidationSamples/gpm_cfg.py b/FWCore/MessageService/test/PsetValidationSamples/gpm_cfg.py index b902f7eb46cba..ddec87c2736e1 100644 --- a/FWCore/MessageService/test/PsetValidationSamples/gpm_cfg.py +++ b/FWCore/MessageService/test/PsetValidationSamples/gpm_cfg.py @@ -11,60 +11,50 @@ process.load("FWCore.MessageService.test.Services_cff") process.MessageLogger = cms.Service("MessageLogger", - -#enable one of the following -- the first should pass, the rest fail - generate_preconfiguration_message = cms.untracked.string('precon-message'), -# generate_preconfiguration_message = cms.string('precon-message'), -# generate_preconfiguration_message = cms.untracked.int32(2), - -#to test multiple stringing of flaws, enable this: -# messageSummaryToJobReport = cms.untracked.int32(2), - - u1_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_warnings = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - noTimeStamps = cms.untracked.bool(True) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - u1_debugs = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + u1_debugs = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('DEBUG') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_default = cms.untracked.PSet( - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_default = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ) + ), + u1_errors = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_infos = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('INFO') + ), + u1_warnings = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') ) ), - u1_errors = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), - noTimeStamps = cms.untracked.bool(True) - ), - debugModules = cms.untracked.vstring('*'), - categories = cms.untracked.vstring('preEventProcessing', - 'FwkTest'), - destinations = cms.untracked.vstring('u1_warnings', - 'u1_errors', - 'u1_infos', - 'u1_debugs', - 'u1_default') + generate_preconfiguration_message = cms.untracked.string('precon-message') ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/PsetValidationSamples/mstjp_cfg.py b/FWCore/MessageService/test/PsetValidationSamples/mstjp_cfg.py index d7502fa893626..d332dbea34e7f 100644 --- a/FWCore/MessageService/test/PsetValidationSamples/mstjp_cfg.py +++ b/FWCore/MessageService/test/PsetValidationSamples/mstjp_cfg.py @@ -11,57 +11,50 @@ process.load("FWCore.MessageService.test.Services_cff") process.MessageLogger = cms.Service("MessageLogger", - -#enable one of the following -- the first should pass, the rest fail - messageSummaryToJobReport = cms.untracked.bool(True), -# messageSummaryToJobReport = cms.bool(True), -# messageSummaryToJobReport = cms.untracked.int32(2), - - u1_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_warnings = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - noTimeStamps = cms.untracked.bool(True) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - u1_debugs = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + u1_debugs = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('DEBUG') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_default = cms.untracked.PSet( - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_default = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ) + ), + u1_errors = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_infos = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('INFO') + ), + u1_warnings = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') ) ), - u1_errors = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), - noTimeStamps = cms.untracked.bool(True) - ), - debugModules = cms.untracked.vstring('*'), - categories = cms.untracked.vstring('preEventProcessing', - 'FwkTest'), - destinations = cms.untracked.vstring('u1_warnings', - 'u1_errors', - 'u1_infos', - 'u1_debugs', - 'u1_default') + messageSummaryToJobReport = cms.untracked.bool(True) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/PsetValidationSamples/statlist_cfg.py b/FWCore/MessageService/test/PsetValidationSamples/statlist_cfg.py index ea292fc1170c5..0b16a277ca369 100644 --- a/FWCore/MessageService/test/PsetValidationSamples/statlist_cfg.py +++ b/FWCore/MessageService/test/PsetValidationSamples/statlist_cfg.py @@ -11,53 +11,54 @@ process.load("FWCore.MessageService.test.Services_cff") process.MessageLogger = cms.Service("MessageLogger", - - destinations = cms.untracked.vstring( 'u1_warnings', 'u1_errors', - 'u1_infos', 'u1_debugs', 'u1_default', 'u1_x'), - - - u1_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_warnings = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - u1_debugs = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + u1_debugs = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('DEBUG') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_default = cms.untracked.PSet( - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_default = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ) ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_errors = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') + ), + u1_infos = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('INFO') + ), + u1_warnings = cms.untracked.PSet( + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ), + u1_x = cms.untracked.PSet( + ) - ), - u1_errors = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), - noTimeStamps = cms.untracked.bool(True) - ), - debugModules = cms.untracked.vstring('*'), - categories = cms.untracked.vstring('preEventProcessing', - 'FwkTest') + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/PsetValidationSamples/suppress_cfg.py b/FWCore/MessageService/test/PsetValidationSamples/suppress_cfg.py index e5944d30a573d..d571bcdaf1d49 100644 --- a/FWCore/MessageService/test/PsetValidationSamples/suppress_cfg.py +++ b/FWCore/MessageService/test/PsetValidationSamples/suppress_cfg.py @@ -11,65 +11,58 @@ process.load("FWCore.MessageService.test.Services_cff") process.MessageLogger = cms.Service("MessageLogger", - - destinations = cms.untracked.vstring( 'u1_warnings', 'u1_errors', - 'u1_infos', 'u1_debugs', 'u1_default', 'u1_x'), - categories = cms.untracked.vstring('preEventProcessing','FwkTest', - 'cat_A','cat_B'), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('*'), - -#enable one of the following -- the first THREE should pass, the rest fail - - suppressInfo = cms.untracked.vstring('A', 'B'), -# suppressWarning = cms.untracked.vstring('A', 'B'), -# suppressInfo = cms.untracked.vstring('A'), suppressWarning = cms.untracked.vstring('B'), - -# suppressInfo = cms.untracked.vstring('*'), -# suppressInfo = cms.vstring('A'), -# suppressInfo = cms.untracked.int32(2), -# suppressWarning = cms.untracked.vstring('*'), -# suppressWarning = cms.vstring('A'), -# suppressWarning = cms.untracked.int32(2), - - u1_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + files = cms.untracked.PSet( + u1_debugs = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('DEBUG') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_warnings = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True) - ), - u1_debugs = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_default = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ) ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_default = cms.untracked.PSet( - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_errors = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') + ), + u1_infos = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('INFO') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_warnings = cms.untracked.PSet( + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ), + u1_x = cms.untracked.PSet( + ) ), - u1_errors = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), - noTimeStamps = cms.untracked.bool(True) - ), + suppressInfo = cms.untracked.vstring( + 'A', + 'B' + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/PsetValidationSamples/threshold_cfg.py b/FWCore/MessageService/test/PsetValidationSamples/threshold_cfg.py index 1a86cc497fa6a..de61d50b75d34 100644 --- a/FWCore/MessageService/test/PsetValidationSamples/threshold_cfg.py +++ b/FWCore/MessageService/test/PsetValidationSamples/threshold_cfg.py @@ -11,64 +11,50 @@ process.load("FWCore.MessageService.test.Services_cff") process.MessageLogger = cms.Service("MessageLogger", - -# enable one of the following -- the first four should pass, the rest fail - threshold = cms.untracked.string('DEBUG'), -# threshold = cms.untracked.string('INFO'), -# threshold = cms.untracked.string('WARNING'), -# threshold = cms.untracked.string('ERROR'), -# threshold = cms.string('ERROR'), -# threshold = cms.untracked.int32('ERROR'), -# threshold = cms.untracked.string('error'), - -#to test multiple stringing of flaws, enable this: -# messageSummaryToJobReport = cms.untracked.int32(2), - - u1_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_warnings = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - noTimeStamps = cms.untracked.bool(True) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - u1_debugs = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + u1_debugs = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('DEBUG') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_default = cms.untracked.PSet( - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_default = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ) + ), + u1_errors = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_infos = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('INFO') + ), + u1_warnings = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') ) ), - u1_errors = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), - noTimeStamps = cms.untracked.bool(True) - ), - debugModules = cms.untracked.vstring('*'), - categories = cms.untracked.vstring('preEventProcessing', - 'FwkTest'), - destinations = cms.untracked.vstring('u1_warnings', - 'u1_errors', - 'u1_infos', - 'u1_debugs', - 'u1_default') + threshold = cms.untracked.string('DEBUG') ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/PsetValidationSamples/vstring_cfg.py b/FWCore/MessageService/test/PsetValidationSamples/vstring_cfg.py index 2b1bcce93ff7d..185995291ea48 100644 --- a/FWCore/MessageService/test/PsetValidationSamples/vstring_cfg.py +++ b/FWCore/MessageService/test/PsetValidationSamples/vstring_cfg.py @@ -11,57 +11,63 @@ process.load("FWCore.MessageService.test.Services_cff") process.MessageLogger = cms.Service("MessageLogger", - - destinations = cms.untracked.vstring( 'u1_warnings', 'u1_errors', - 'u1_infos', 'u1_debugs', 'u1_default', 'u1_x'), - categories = cms.untracked.vstring('preEventProcessing','FwkTest', - 'cat_A','cat_B'), - debugModules = cms.untracked.vstring('*'), - -#enable any of the following -- all should fail - - ab = cms.untracked.vstring('A', 'B'), - abc = cms.vstring('A', 'B', 'C'), - - u1_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) + ab = cms.untracked.vstring( + 'A', + 'B' ), - u1_warnings = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True) + abc = cms.vstring( + 'A', + 'B', + 'C' ), - u1_debugs = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), - u1_default = cms.untracked.PSet( - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + u1_debugs = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('DEBUG') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_default = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ) + ), + u1_errors = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') + ), + u1_infos = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('INFO') + ), + u1_warnings = cms.untracked.PSet( + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ), + u1_x = cms.untracked.PSet( + ) - ), - u1_errors = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), - noTimeStamps = cms.untracked.bool(True) - ), + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/PsetValidationSamples/xPSet_cfg.py b/FWCore/MessageService/test/PsetValidationSamples/xPSet_cfg.py index 778c3bc392f02..7e09c76731bd3 100644 --- a/FWCore/MessageService/test/PsetValidationSamples/xPSet_cfg.py +++ b/FWCore/MessageService/test/PsetValidationSamples/xPSet_cfg.py @@ -11,58 +11,54 @@ process.load("FWCore.MessageService.test.Services_cff") process.MessageLogger = cms.Service("MessageLogger", - - destinations = cms.untracked.vstring( 'u1_warnings', 'u1_errors', - 'u1_infos', 'u1_debugs', 'u1_default', 'u1_x'), - categories = cms.untracked.vstring('preEventProcessing','FwkTest', - 'cat_A','cat_B'), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), debugModules = cms.untracked.vstring('*'), - -#enable any or all of the following -- all should fail - -# a = cms.untracked.PSet( b = cms.untracked.int32(0) ), -# c = cms.untracked.PSet( d = cms.untracked.int32(0) ), - - u1_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + files = cms.untracked.PSet( + u1_debugs = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('DEBUG') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_default = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ) ), - ), - u1_warnings = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True) - ), - u1_debugs = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noTimeStamps = cms.untracked.bool(True), - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_errors = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) - ), - u1_default = cms.untracked.PSet( - noTimeStamps = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True), - - FwkTest = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_infos = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('INFO') + ), + u1_warnings = cms.untracked.PSet( + enableStatistics = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + u1_x = cms.untracked.PSet( + ) - ), - u1_errors = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), - noTimeStamps = cms.untracked.bool(True) - ), + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/UnitTestClient_S.cc b/FWCore/MessageService/test/UnitTestClient_S.cc index 1ccddf36caa9d..ebb314604bb68 100644 --- a/FWCore/MessageService/test/UnitTestClient_S.cc +++ b/FWCore/MessageService/test/UnitTestClient_S.cc @@ -48,7 +48,7 @@ namespace edmtest { if (!edm::FreshErrorsExist(index)) { edm::LogInfo("NoFreshErrors") << "Not in this event, anyway"; } - std::vector es = edm::LoggedErrorsSummary(index); + auto es = edm::LoggedErrorsSummary(index); std::ostringstream os; for (unsigned int i = 0; i != es.size(); ++i) { os << es[i].category << " " << es[i].module << " " << es[i].count << "\n"; diff --git a/FWCore/MessageService/test/UnitTestClient_SLumi.cc b/FWCore/MessageService/test/UnitTestClient_SLumi.cc index 8abd2ecc8a20e..9ea5dcac35b0d 100644 --- a/FWCore/MessageService/test/UnitTestClient_SLumi.cc +++ b/FWCore/MessageService/test/UnitTestClient_SLumi.cc @@ -48,7 +48,7 @@ namespace edmtest { if (!edm::FreshErrorsExist(index)) { edm::LogInfo("NoFreshErrors") << "Not in this event, anyway"; } - std::vector es = edm::LoggedErrorsSummary(index); + auto es = edm::LoggedErrorsSummary(index); std::ostringstream os; for (unsigned int i = 0; i != es.size(); ++i) { os << es[i].category << " " << es[i].module << " " << es[i].count << "\n"; diff --git a/FWCore/MessageService/test/UnitTestClient_T.cc b/FWCore/MessageService/test/UnitTestClient_T.cc index e16dd285dfa16..89d7a47a08cc1 100644 --- a/FWCore/MessageService/test/UnitTestClient_T.cc +++ b/FWCore/MessageService/test/UnitTestClient_T.cc @@ -34,7 +34,7 @@ namespace edmtest { edm::LogError("summary") << "At ev = " << ev << "FreshErrorsExist() returns false" << " which is unexpected"; } - std::vector v = edm::LoggedErrorsSummary(index); + auto v = edm::LoggedErrorsSummary(index); printLES(v); } if (ev == 15) { @@ -44,18 +44,17 @@ namespace edmtest { edm::LogError("summary") << "At ev = " << ev << "FreshErrorsExist() returns false" << " which is unexpected"; } - std::vector v = edm::LoggedErrorsOnlySummary(index); + auto v = edm::LoggedErrorsOnlySummary(index); printLES(v); } ev++; } - void UTC_T2::printLES(std::vector const& v) { + void UTC_T2::printLES(std::vector const& v) { std::ostringstream s; - typedef std::vector::const_iterator IT; - IT end = v.end(); + auto end = v.end(); s << "Error Summary Vector with " << v.size() << " entries:\n"; - for (IT i = v.begin(); i != end; ++i) { + for (auto i = v.begin(); i != end; ++i) { s << "Category " << i->category << " Module " << i->module << " Severity " << (i->severity).getName() << " Count " << i->count << "\n"; } diff --git a/FWCore/MessageService/test/UnitTestClient_T.h b/FWCore/MessageService/test/UnitTestClient_T.h index 2d522d5063d92..6a6c096c9fa81 100644 --- a/FWCore/MessageService/test/UnitTestClient_T.h +++ b/FWCore/MessageService/test/UnitTestClient_T.h @@ -39,7 +39,7 @@ namespace edmtest { private: int identifier; int ev; - void printLES(std::vector const& v); + void printLES(std::vector const& v); }; } // namespace edmtest diff --git a/FWCore/MessageService/test/fmt_test.cppunit.cpp b/FWCore/MessageService/test/fmt_test.cppunit.cpp index ff35ac0c384a8..d322975bff237 100644 --- a/FWCore/MessageService/test/fmt_test.cppunit.cpp +++ b/FWCore/MessageService/test/fmt_test.cppunit.cpp @@ -57,7 +57,7 @@ void test_fmt_external::test_fmt() std::apply(print_message, args); fmt::memory_buffer buf; format_to(buf, "{}", 42); // replaces itoa(42, buffer, 10) - fmt::print(buf.data()); + fmt::print(to_string(buf)); format_to(buf, "{:x}", 42); // replaces itoa(42, buffer, 16) fmt::print(to_string(buf)); } diff --git a/FWCore/MessageService/test/makeSignals_cfg.py b/FWCore/MessageService/test/makeSignals_cfg.py index 79f05017cfc9b..bf87559e8ba6c 100644 --- a/FWCore/MessageService/test/makeSignals_cfg.py +++ b/FWCore/MessageService/test/makeSignals_cfg.py @@ -8,31 +8,32 @@ process.load("FWCore.MessageService.test.Services_cff") process.MessageLogger = cms.Service("MessageLogger", - sig_debugs = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - noTimeStamps = cms.untracked.bool(True), - FwkReport = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), debugModules = cms.untracked.vstring('*'), - sig_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), - FwkReport = cms.untracked.PSet( - limit = cms.untracked.int32(0) + files = cms.untracked.PSet( + sig_debugs = cms.untracked.PSet( + FwkReport = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('DEBUG') ), - preEventProcessing = cms.untracked.PSet( - limit = cms.untracked.int32(0) + sig_infos = cms.untracked.PSet( + FwkReport = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('INFO') ) - ), - categories = cms.untracked.vstring('preEventProcessing', - 'FwkReport'), - destinations = cms.untracked.vstring('sig_infos', - 'sig_debugs') + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/memory_t1_cfg.py b/FWCore/MessageService/test/memory_t1_cfg.py index ec140197643af..15bfc97361b90 100644 --- a/FWCore/MessageService/test/memory_t1_cfg.py +++ b/FWCore/MessageService/test/memory_t1_cfg.py @@ -18,24 +18,28 @@ ) process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + memory_t1_infos = cms.untracked.PSet( + + ) + ), o1_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(0) ), - preEventProcessing = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( limit = cms.untracked.int32(0) ), - FwkTest = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) - ), - debugModules = cms.untracked.vstring('*'), - categories = cms.untracked.vstring('preEventProcessing', - 'FwkReport', - 'FwkTest'), - destinations = cms.untracked.vstring('memory_t1_infos') + ), + threshold = cms.untracked.string('INFO') + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/memory_t2_cfg.py b/FWCore/MessageService/test/memory_t2_cfg.py index 8472c5cb1d1bf..cdf5ed420cfb1 100644 --- a/FWCore/MessageService/test/memory_t2_cfg.py +++ b/FWCore/MessageService/test/memory_t2_cfg.py @@ -18,24 +18,28 @@ ) process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + memory_t1_infos = cms.untracked.PSet( + + ) + ), o1_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(0) ), - preEventProcessing = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( limit = cms.untracked.int32(0) ), - FwkTest = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) - ), - debugModules = cms.untracked.vstring('*'), - categories = cms.untracked.vstring('preEventProcessing', - 'FwkReport', - 'FwkTest'), - destinations = cms.untracked.vstring('memory_t1_infos') + ), + threshold = cms.untracked.string('INFO') + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/memory_t3_cfg.py b/FWCore/MessageService/test/memory_t3_cfg.py index 20c019556bbba..689fa551e1a60 100644 --- a/FWCore/MessageService/test/memory_t3_cfg.py +++ b/FWCore/MessageService/test/memory_t3_cfg.py @@ -19,24 +19,28 @@ ) process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + memory_t3_infos = cms.untracked.PSet( + + ) + ), o1_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noTimeStamps = cms.untracked.bool(True), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(0) ), - preEventProcessing = cms.untracked.PSet( + FwkTest = cms.untracked.PSet( limit = cms.untracked.int32(0) ), - FwkTest = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + preEventProcessing = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) - ), - debugModules = cms.untracked.vstring('*'), - categories = cms.untracked.vstring('preEventProcessing', - 'FwkReport', - 'FwkTest'), - destinations = cms.untracked.vstring('memory_t3_infos') + ), + threshold = cms.untracked.string('INFO') + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/messageLogger_cfg.py b/FWCore/MessageService/test/messageLogger_cfg.py index e435b65aaeafa..eadc06a57e498 100644 --- a/FWCore/MessageService/test/messageLogger_cfg.py +++ b/FWCore/MessageService/test/messageLogger_cfg.py @@ -10,35 +10,36 @@ process.load("FWCore.MessageService.test.Services_cff") process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + debugModules = cms.untracked.vstring('sendSomeMessages'), default = cms.untracked.PSet( limit = cms.untracked.int32(100), timespan = cms.untracked.int32(60) ), - detailedInfo = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG'), - INFO = cms.untracked.PSet( - timespan = cms.untracked.int32(1000) - ), - default = cms.untracked.PSet( - limit = cms.untracked.int32(10), - timespan = cms.untracked.int32(600) - ), - unimportant = cms.untracked.PSet( - limit = cms.untracked.int32(5) + files = cms.untracked.PSet( + critical = cms.untracked.PSet( + threshold = cms.untracked.string('ERROR') ), - trkwarning = cms.untracked.PSet( - limit = cms.untracked.int32(100), - timespan = cms.untracked.int32(30) + detailedInfo = cms.untracked.PSet( + INFO = cms.untracked.PSet( + timespan = cms.untracked.int32(1000) + ), + default = cms.untracked.PSet( + limit = cms.untracked.int32(10), + timespan = cms.untracked.int32(600) + ), + threshold = cms.untracked.string('DEBUG'), + trkwarning = cms.untracked.PSet( + limit = cms.untracked.int32(100), + timespan = cms.untracked.int32(30) + ), + unimportant = cms.untracked.PSet( + limit = cms.untracked.int32(5) + ) ) - ), - critical = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR') - ), - debugModules = cms.untracked.vstring('sendSomeMessages'), - categories = cms.untracked.vstring('postBeginJob', 'unimportant', - 'trkwarning'), - destinations = cms.untracked.vstring('detailedInfo', - 'critical') + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/standAloneTest.cpp b/FWCore/MessageService/test/standAloneTest.cpp index b48bffcb37742..9b8b2d9593b59 100644 --- a/FWCore/MessageService/test/standAloneTest.cpp +++ b/FWCore/MessageService/test/standAloneTest.cpp @@ -4,6 +4,8 @@ namespace edmtest { void sampleStandAlone() { + LogDebug("cat_A"); //test stand alone declaration + LogDebug("cat_A").log([](auto&& iLog) { iLog << " LogDebug.log was called"; }); LogDebug("cat_A") << "LogDebug was used to send cat_A"; LogDebug("cat_B") << "LogDebug was used to send cat_B"; LogTrace("cat_A") << "LogTrace was used to send cat_A"; @@ -33,25 +35,25 @@ int main() { edmtest::sampleStandAlone(); edm::LogImportant("note") << "threshold DEBUG"; - edm::setStandAloneMessageThreshold(edm::ELdebug); + edm::setStandAloneMessageThreshold(edm::messagelogger::ELdebug); edmtest::sampleStandAlone(); edm::LogImportant("note") << "threshold INFO"; - edm::setStandAloneMessageThreshold(edm::ELinfo); + edm::setStandAloneMessageThreshold(edm::messagelogger::ELinfo); edmtest::sampleStandAlone(); edm::LogImportant("note") << "threshold FWKINFO"; - edm::setStandAloneMessageThreshold(edm::ELfwkInfo); + edm::setStandAloneMessageThreshold(edm::messagelogger::ELfwkInfo); edmtest::sampleStandAlone(); edm::LogImportant("note") << "threshold WARNING"; - edm::setStandAloneMessageThreshold(edm::ELwarning); + edm::setStandAloneMessageThreshold(edm::messagelogger::ELwarning); edmtest::sampleStandAlone(); edm::LogImportant("note") << "threshold ELerror"; // ERROR would confuse // the grep checking that // the runtests worked - edm::setStandAloneMessageThreshold(edm::ELerror); + edm::setStandAloneMessageThreshold(edm::messagelogger::ELerror); edmtest::sampleStandAlone(); edm::LogImportant("note") << "squelch cat_A"; diff --git a/FWCore/MessageService/test/t1_cfg.py b/FWCore/MessageService/test/t1_cfg.py index ecdd8b88a944f..c15e7e77f1368 100644 --- a/FWCore/MessageService/test/t1_cfg.py +++ b/FWCore/MessageService/test/t1_cfg.py @@ -12,7 +12,6 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('expect_specific') process.MessageLogger.cerr.INFO = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32( 0) ), diff --git a/FWCore/MessageService/test/t2_cfg.py b/FWCore/MessageService/test/t2_cfg.py index 7da461c367c8f..9e4877f44f6cd 100644 --- a/FWCore/MessageService/test/t2_cfg.py +++ b/FWCore/MessageService/test/t2_cfg.py @@ -12,7 +12,7 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('expect_specific') +process.MessageLogger.expect_specific=dict() process.MessageLogger.cerr.TtSemiLeptonicEvent = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/FWCore/MessageService/test/timing_t_cfg.py b/FWCore/MessageService/test/timing_t_cfg.py index 78519c1b119d2..47758561d128d 100644 --- a/FWCore/MessageService/test/timing_t_cfg.py +++ b/FWCore/MessageService/test/timing_t_cfg.py @@ -17,23 +17,24 @@ ) process.MessageLogger = cms.Service("MessageLogger", - # produce file u16_job_report.mmxml - u16_job_report = cms.untracked.PSet( - extension = cms.untracked.string('mmxml') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) ), + debugModules = cms.untracked.vstring('*'), default = cms.untracked.PSet( FwkTest = cms.untracked.PSet( limit = cms.untracked.int32(0) ) ), - timing_t = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), - noTimeStamps = cms.untracked.bool(True) + files = cms.untracked.PSet( + timing_t = cms.untracked.PSet( + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') + ) ), - debugModules = cms.untracked.vstring('*'), - categories = cms.untracked.vstring('preEventProcessing', - 'FwkTest'), - destinations = cms.untracked.vstring('timing_t') + u16_job_report = cms.untracked.PSet( + extension = cms.untracked.string('mmxml') + ) ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/u32_cfg.py b/FWCore/MessageService/test/u32_cfg.py index 7c6b4af071edf..2a4a6cbbdf2a1 100644 --- a/FWCore/MessageService/test/u32_cfg.py +++ b/FWCore/MessageService/test/u32_cfg.py @@ -14,13 +14,12 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations.append('errors') -process.MessageLogger.errors = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR'), +process.MessageLogger.files.errors = dict( + threshold = 'ERROR', default = cms.untracked.PSet( limit = cms.untracked.int32(3) ), - noTimeStamps = cms.untracked.bool(True) + noTimeStamps = True ) process.maxEvents = cms.untracked.PSet( diff --git a/FWCore/MessageService/test/u9_cfg.py b/FWCore/MessageService/test/u9_cfg.py index da849f501641d..2b1873a7e5196 100644 --- a/FWCore/MessageService/test/u9_cfg.py +++ b/FWCore/MessageService/test/u9_cfg.py @@ -12,9 +12,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['warnings', 'infos'] -del process.MessageLogger.statistics -process.MessageLogger.categories.append('FwkTest') +process.MessageLogger.cerr.enable = False process.MessageLogger.default = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(False), FwkTest = cms.untracked.PSet( @@ -22,7 +20,7 @@ ), limit = cms.untracked.int32(-1) ) -process.MessageLogger.warnings = cms.untracked.PSet( +process.MessageLogger.files.warnings = cms.untracked.PSet( threshold = cms.untracked.string('WARNING'), enableStatistics = cms.untracked.bool(True), default = cms.untracked.PSet( @@ -30,7 +28,7 @@ ), noTimeStamps = cms.untracked.bool(True) ) -process.MessageLogger.infos = cms.untracked.PSet( +process.MessageLogger.files.infos = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(2) ), diff --git a/FWCore/MessageService/test/unit_test_outputs/standAloneWithMessageLogger.cerr b/FWCore/MessageService/test/unit_test_outputs/standAloneWithMessageLogger.cerr index f6e57cb98aa60..72fdb41617681 100644 --- a/FWCore/MessageService/test/unit_test_outputs/standAloneWithMessageLogger.cerr +++ b/FWCore/MessageService/test/unit_test_outputs/standAloneWithMessageLogger.cerr @@ -18,10 +18,18 @@ LogProblem was used to send cat_B threshold DEBUG %MSG-d cat_A: standAloneTest.cpp:7 + +%MSG +%MSG-d cat_A: + standAloneTest.cpp:8 + LogDebug.log was called +%MSG +%MSG-d cat_A: + standAloneTest.cpp:9 LogDebug was used to send cat_A %MSG %MSG-d cat_B: - standAloneTest.cpp:8 + standAloneTest.cpp:10 LogDebug was used to send cat_B %MSG LogTrace was used to send cat_A diff --git a/FWCore/Modules/BuildFile.xml b/FWCore/Modules/BuildFile.xml index 341123e945d44..f547b0a833c07 100644 --- a/FWCore/Modules/BuildFile.xml +++ b/FWCore/Modules/BuildFile.xml @@ -5,5 +5,7 @@ + + diff --git a/FWCore/Modules/src/EventContentAnalyzer.cc b/FWCore/Modules/src/EventContentAnalyzer.cc index e0428cbf27528..447bc64694335 100644 --- a/FWCore/Modules/src/EventContentAnalyzer.cc +++ b/FWCore/Modules/src/EventContentAnalyzer.cc @@ -369,32 +369,28 @@ namespace edm { << " (productId = " << provenance->productID() << ")" << std::endl; if (listProvenance_) { - auto const& prov = iEvent.getProvenance(provenance->branchID()); - auto const* productProvenance = prov.productProvenance(); - if (productProvenance) { - const bool isAlias = productProvenance->branchID() != provenance->branchID(); - std::string aliasForModLabel; - LogAbsolute("EventContent") << prov; - if (isAlias) { - aliasForModLabel = iEvent.getProvenance(productProvenance->branchID()).moduleLabel(); - LogAbsolute("EventContent") << "Is an alias for " << aliasForModLabel; - } - ProcessHistory const& processHistory = iEvent.processHistory(); - for (ProcessConfiguration const& pc : processHistory) { - if (pc.processName() == prov.processName()) { - ParameterSetID const& psetID = pc.parameterSetID(); - pset::Registry const* psetRegistry = pset::Registry::instance(); - ParameterSet const* processPset = psetRegistry->getMapped(psetID); - if (processPset) { - if (processPset->existsAs(modLabel)) { - if (isAlias) { - LogAbsolute("EventContent") << "Alias PSet"; - } - LogAbsolute("EventContent") << processPset->getParameterSet(modLabel); - } - if (isAlias and processPset->existsAs(aliasForModLabel)) { - LogAbsolute("EventContent") << processPset->getParameterSet(aliasForModLabel); + const bool isAlias = provenance->branchDescription().isAlias(); + std::string aliasForModLabel; + LogAbsolute("EventContent") << *provenance; + if (isAlias) { + aliasForModLabel = iEvent.getStableProvenance(provenance->originalBranchID()).moduleLabel(); + LogAbsolute("EventContent") << "Is an alias for " << aliasForModLabel; + } + ProcessHistory const& processHistory = iEvent.processHistory(); + for (ProcessConfiguration const& pc : processHistory) { + if (pc.processName() == provenance->processName()) { + ParameterSetID const& psetID = pc.parameterSetID(); + pset::Registry const* psetRegistry = pset::Registry::instance(); + ParameterSet const* processPset = psetRegistry->getMapped(psetID); + if (processPset) { + if (processPset->existsAs(modLabel)) { + if (isAlias) { + LogAbsolute("EventContent") << "Alias PSet"; } + LogAbsolute("EventContent") << processPset->getParameterSet(modLabel); + } + if (isAlias and processPset->existsAs(aliasForModLabel)) { + LogAbsolute("EventContent") << processPset->getParameterSet(aliasForModLabel); } } } diff --git a/FWCore/Modules/src/LogErrorFilter.cc b/FWCore/Modules/src/LogErrorFilter.cc index f933ef3f48886..ddeafbc807fb3 100644 --- a/FWCore/Modules/src/LogErrorFilter.cc +++ b/FWCore/Modules/src/LogErrorFilter.cc @@ -20,7 +20,7 @@ #include "FWCore/Framework/interface/stream/EDFilter.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/MessageLogger/interface/ErrorSummaryEntry.h" +#include "DataFormats/Common/interface/ErrorSummaryEntry.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" diff --git a/FWCore/Modules/src/LogErrorHarvester.cc b/FWCore/Modules/src/LogErrorHarvester.cc index a62e126f38268..85439397c18cb 100644 --- a/FWCore/Modules/src/LogErrorHarvester.cc +++ b/FWCore/Modules/src/LogErrorHarvester.cc @@ -19,7 +19,7 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/global/EDProducer.h" -#include "FWCore/MessageLogger/interface/ErrorSummaryEntry.h" +#include "DataFormats/Common/interface/ErrorSummaryEntry.h" #include "FWCore/MessageLogger/interface/LoggedErrorsSummary.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" @@ -83,7 +83,18 @@ namespace edm { //puts a default constructed product in the event iEvent.emplace(token_); } else { - iEvent.emplace(token_, LoggedErrorsSummary(index)); + auto mlSummary = LoggedErrorsSummary(index); + std::vector summary; + summary.reserve(mlSummary.size()); + for (auto& entry : mlSummary) { + edm::ErrorSummaryEntry e; + e.category = std::move(entry.category); + e.module = std::move(entry.module); + e.severity = edm::ELseverityLevel(entry.severity.getLevel()); + e.count = entry.count; + summary.emplace_back(std::move(e)); + } + iEvent.emplace(token_, summary); } } diff --git a/FWCore/Modules/test/test_catch2_LogErrorFilter.cc b/FWCore/Modules/test/test_catch2_LogErrorFilter.cc index fee89bf3d1e15..594389ee0f429 100644 --- a/FWCore/Modules/test/test_catch2_LogErrorFilter.cc +++ b/FWCore/Modules/test/test_catch2_LogErrorFilter.cc @@ -1,6 +1,6 @@ #include "FWCore/TestProcessor/interface/TestProcessor.h" #include "FWCore/Utilities/interface/Exception.h" -#include "FWCore/MessageLogger/interface/ErrorSummaryEntry.h" +#include "DataFormats/Common/interface/ErrorSummaryEntry.h" #include #include "catch.hpp" diff --git a/FWCore/ParameterSet/BuildFile.xml b/FWCore/ParameterSet/BuildFile.xml index 160e1f45f11c5..0dbe0bff16f8a 100644 --- a/FWCore/ParameterSet/BuildFile.xml +++ b/FWCore/ParameterSet/BuildFile.xml @@ -4,7 +4,6 @@ - diff --git a/FWCore/ParameterSet/bin/edmPluginHelp.cpp b/FWCore/ParameterSet/bin/edmPluginHelp.cpp index 35b67721246db..1521b6c0a7188 100644 --- a/FWCore/ParameterSet/bin/edmPluginHelp.cpp +++ b/FWCore/ParameterSet/bin/edmPluginHelp.cpp @@ -23,7 +23,6 @@ #include "FWCore/PluginManager/interface/standard.h" #include "FWCore/Utilities/interface/Algorithms.h" -#include #include #include diff --git a/FWCore/ParameterSet/bin/edmWriteConfigs.cpp b/FWCore/ParameterSet/bin/edmWriteConfigs.cpp index 9f1fb0f937419..f472dc59f1457 100644 --- a/FWCore/ParameterSet/bin/edmWriteConfigs.cpp +++ b/FWCore/ParameterSet/bin/edmWriteConfigs.cpp @@ -40,8 +40,6 @@ #include "FWCore/PluginManager/interface/PluginFactoryManager.h" #include -#include -#include #include #include diff --git a/FWCore/ParameterSet/python/Config.py b/FWCore/ParameterSet/python/Config.py index 60e12a2f127e3..70a7f5b4ba349 100644 --- a/FWCore/ParameterSet/python/Config.py +++ b/FWCore/ParameterSet/python/Config.py @@ -227,6 +227,7 @@ def defaultOptions_(): forceEventSetupCacheClearOnNewRun = untracked.bool(False), throwIfIllegalParameter = untracked.bool(True), printDependencies = untracked.bool(False), + deleteNonConsumedUnscheduledModules = untracked.bool(True), sizeOfStackForThreadsInKB = optional.untracked.uint32, Rethrow = untracked.vstring(), SkipEvent = untracked.vstring(), @@ -1034,7 +1035,10 @@ def splitPython(self, options = PrintOptions()): sub = options.targetDirectory + '/' + sub files[sub + '/__init__.py'] = '' - for (name, (subfolder, code)) in six.iteritems(parts): + # case insensitive sort by subfolder and module name + parts = sorted(parts.items(), key = lambda nsc: (nsc[1][0].lower() if nsc[1][0] else '', nsc[0].lower())) + + for (name, (subfolder, code)) in parts: filename = name + '_cfi' if options.useSubdirectories and subfolder: filename = subfolder + '/' + filename @@ -1045,7 +1049,7 @@ def splitPython(self, options = PrintOptions()): if self.schedule_() is not None: options.isCfg = True - result += 'process.schedule = ' + self.schedule.dumpPython(options) + result += '\nprocess.schedule = ' + self.schedule.dumpPython(options) imports = specialImportRegistry.getSpecialImports() if len(imports) > 0: @@ -2010,6 +2014,7 @@ def testProcessDumpPython(self): SkipEvent = cms.untracked.vstring(), allowUnscheduled = cms.obsolete.untracked.bool, canDeleteEarly = cms.untracked.vstring(), + deleteNonConsumedUnscheduledModules = cms.untracked.bool(True), emptyRunLumiMode = cms.obsolete.untracked.string, eventSetup = cms.untracked.PSet( forceNumberOfConcurrentIOVs = cms.untracked.PSet( diff --git a/FWCore/ParameterSet/python/Mixins.py b/FWCore/ParameterSet/python/Mixins.py index aa53cf042104d..ab4383d5d83bf 100644 --- a/FWCore/ParameterSet/python/Mixins.py +++ b/FWCore/ParameterSet/python/Mixins.py @@ -422,6 +422,8 @@ def clone(self, *args, **params): args.append(None) _modifyParametersFromDict(myparams, params, self._Parameterizable__raiseBadSetAttr) + if self._Parameterizable__validator is not None: + myparams["allowAnyLabel_"] = self._Parameterizable__validator returnValue.__init__(self.__type,*args, **myparams) diff --git a/FWCore/ParameterSet/python/SequenceTypes.py b/FWCore/ParameterSet/python/SequenceTypes.py index 88164200de9ad..0c04490dfa8d7 100644 --- a/FWCore/ParameterSet/python/SequenceTypes.py +++ b/FWCore/ParameterSet/python/SequenceTypes.py @@ -211,7 +211,7 @@ def _replaceIfHeldDirectly(self,original,replacement): def findDirectDependencies(element, collection): - dependencies = [] + dependencies = set() for item in collection: # skip null items if item is None: @@ -223,23 +223,23 @@ def findDirectDependencies(element, collection): # cms.ignore(module), ~(module) elif isinstance(item, (_SequenceIgnore, _SequenceNegation)): if isinstance(item._operand, _SequenceCollection): - dependencies += item.directDependencies() + dependencies.update(item.directDependencies()) continue t = 'modules' # _SequenceCollection elif isinstance(item, _SequenceCollection): - dependencies += item.directDependencies() + dependencies.update(item.directDependencies()) continue # cms.Sequence elif isinstance(item, Sequence): if not item.hasLabel_(): - dependencies += item.directDependencies() + dependencies.update(item.directDependencies()) continue t = 'sequences' # cms.Task elif isinstance(item, Task): if not item.hasLabel_(): - dependencies += item.directDependencies() + dependencies.update(item.directDependencies()) continue t = 'tasks' # SequencePlaceholder and TaskPlaceholder do not add an explicit dependency @@ -249,8 +249,8 @@ def findDirectDependencies(element, collection): else: sys.stderr.write("Warning: unsupported element '%s' in %s '%s'\n" % (str(item), type(element).__name__, element.label_())) continue - dependencies.append((t, item.label_())) - return dependencies + dependencies.add((t, item.label_())) + return sorted(dependencies, key = lambda t_item: (t_item[0].lower(), t_item[1].lower().replace('_cfi', ''))) class _ModuleSequenceType(_ConfigureComponent, _Labelable): diff --git a/FWCore/ParameterSet/python/Types.py b/FWCore/ParameterSet/python/Types.py index f2f857e4a85be..1ecf5ae15260b 100644 --- a/FWCore/ParameterSet/python/Types.py +++ b/FWCore/ParameterSet/python/Types.py @@ -892,7 +892,11 @@ def directDependencies(self): return [] def clone(self, **params): myparams = self.parameters_() + if "allowAnyLabel_" in params: + raise AttributeError("Not allowed to change `allowAnyLabel_` value in call to clone") _modifyParametersFromDict(myparams, params, self._Parameterizable__raiseBadSetAttr) + if self._Parameterizable__validator is not None: + myparams["allowAnyLabel_"] = self._Parameterizable__validator returnValue = PSet(**myparams) returnValue.setIsTracked(self.isTracked()) returnValue._isModified = False @@ -1902,7 +1906,11 @@ def testRequired(self): self.assertEqual(p1.dumpPython(),'cms.PSet(\n aPSet = cms.untracked.PSet(\n a = cms.int32(5)\n )\n)') self.assertEqual(p1.aPSet.a.value(), 5) p1 = PSet(allowAnyLabel_=required.PSetTemplate(a=required.int32)) + p1Clone = p1.clone() self.assertEqual(p1.dumpPython(), 'cms.PSet(\n allowAnyLabel_=cms.required.PSetTemplate(\n a = cms.required.int32\n )\n)') + self.assertEqual(p1Clone.dumpPython(), 'cms.PSet(\n allowAnyLabel_=cms.required.PSetTemplate(\n a = cms.required.int32\n )\n)') + with self.assertRaises(AttributeError): + p1.clone(allowAnyLabel_=optional.double) p1.foo = dict(a=5) self.assertEqual(p1.dumpPython(),'cms.PSet(\n foo = cms.PSet(\n a = cms.int32(5)\n ),\n allowAnyLabel_=cms.required.PSetTemplate(\n a = cms.required.int32\n )\n)') self.assertEqual(p1.foo.a.value(), 5) @@ -1946,7 +1954,9 @@ def testOptional(self): self.assertEqual(p1.dumpPython(),'cms.PSet(\n aPSet = cms.PSet(\n a = cms.int32(5)\n )\n)') self.assertEqual(p1.aPSet.a.value(), 5) p1 = PSet(aPSet=optional.untracked.PSetTemplate(a=optional.int32)) + p1Clone = p1.clone() self.assertEqual(p1.dumpPython(),'cms.PSet(\n aPSet = cms.optional.untracked.PSetTemplate(\n a = cms.optional.int32\n )\n)') + self.assertEqual(p1Clone.dumpPython(),'cms.PSet(\n aPSet = cms.optional.untracked.PSetTemplate(\n a = cms.optional.int32\n )\n)') p1.aPSet = dict(a=5) self.assertEqual(p1.dumpPython(),'cms.PSet(\n aPSet = cms.untracked.PSet(\n a = cms.int32(5)\n )\n)') self.assertEqual(p1.aPSet.a.value(), 5) diff --git a/FWCore/ParameterSet/scripts/edmPythonConfigToCppValidation b/FWCore/ParameterSet/scripts/edmPythonConfigToCppValidation index 65081c2a36e34..1b4e3ba5d48c1 100755 --- a/FWCore/ParameterSet/scripts/edmPythonConfigToCppValidation +++ b/FWCore/ParameterSet/scripts/edmPythonConfigToCppValidation @@ -257,8 +257,8 @@ if len(modulesTypes) > 1: moduleType = modulesTypes.pop() spacing = ' '; -print('#include ') -print('#include ') +print('#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"') +print('#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"') print() print('void') print(moduleType + '::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {') @@ -273,6 +273,8 @@ for label, module in six.iteritems(modules): print(newSpacing + 'edm::ParameterSetDescription desc;') printParameterSetDescription(newSpacing, 'desc', module, 0) print(newSpacing + 'descriptions.add("' + label + '", desc);') + print(newSpacing + '// or use the following to generate the label from the module\'s C++ type') + print(newSpacing + '//descriptions.addWithDefaultLabel(desc);') if len(modules) > 1: print(spacing+'}') print('}') diff --git a/FWCore/ParameterSet/src/FileInPath.cc b/FWCore/ParameterSet/src/FileInPath.cc index cb7e8e53ada3b..8ed69b450b955 100644 --- a/FWCore/ParameterSet/src/FileInPath.cc +++ b/FWCore/ParameterSet/src/FileInPath.cc @@ -4,16 +4,14 @@ #include #include #include -#include "boost/filesystem/path.hpp" -#include "boost/filesystem/operations.hpp" +#include +#include #include "FWCore/ParameterSet/interface/FileInPath.h" #include "FWCore/Utilities/interface/EDMException.h" #include "FWCore/Utilities/interface/Parse.h" #include "FWCore/Utilities/interface/resolveSymbolicLinks.h" -namespace bf = boost::filesystem; - namespace { std::atomic s_fileLookupDisabled{false}; @@ -83,17 +81,17 @@ namespace { // Return false is *nothing* is found // Throw an exception if either a directory or symbolic link is found. // If true is returned, then put the - bool locateFile(bf::path p, std::string const& relative) { + bool locateFile(std::filesystem::path p, std::string const& relative) { p /= relative; - if (!bf::exists(p)) + if (!std::filesystem::exists(p)) return false; - if (bf::is_directory(p)) { + if (std::filesystem::is_directory(p)) { throw edm::Exception(edm::errors::FileInPathError) << "Path " << p.string() << " is a directory, not a file\n"; } - if (bf::is_symlink(bf::symlink_status(p))) { + if (std::filesystem::is_symlink(std::filesystem::symlink_status(p))) { throw edm::Exception(edm::errors::FileInPathError) << "Path " << p.string() << " is a symbolic link, not a file\n"; } @@ -372,16 +370,17 @@ namespace edm { for (auto const& element : pathElements) { // Set the boost::fs path to the current element of // CMSSW_SEARCH_PATH: - bf::path pathPrefix(element); + std::filesystem::path pathPrefix(element); // Does the a file exist? locateFile throws is it finds // something goofy. if (locateFile(pathPrefix, relativePath_)) { // Convert relative path to canonical form, and save it. - relativePath_ = bf::path(relativePath_).normalize().string(); + relativePath_ = std::filesystem::path(relativePath_).lexically_normal().string(); + //std::filesystem::path(relativePath_).normalize().string(); // Save the absolute path. - canonicalFilename_ = bf::absolute(relativePath_, pathPrefix).string(); + canonicalFilename_ = std::filesystem::absolute(pathPrefix / relativePath_).string(); if (canonicalFilename_.empty()) { throw edm::Exception(edm::errors::FileInPathError) << "fullPath is empty" @@ -390,10 +389,12 @@ namespace edm { // From the current path element, find the branch path (basically the path minus the // last directory, e.g. /src or /share): - for (bf::path br = pathPrefix.branch_path(); !br.normalize().string().empty(); br = br.branch_path()) { + for (std::filesystem::path br = pathPrefix.parent_path(); + !std::filesystem::weakly_canonical(br).string().empty(); + br = br.parent_path()) { if (!localTop_.empty()) { // Create a path object for our local path LOCALTOP: - bf::path local_(localTop_); + std::filesystem::path local_(localTop_); // If the branch path matches the local path, the file was found locally: if (br == local_) { location_ = Local; @@ -403,7 +404,7 @@ namespace edm { if (!releaseTop_.empty()) { // Create a path object for our release path RELEASETOP: - bf::path release_(releaseTop_); + std::filesystem::path release_(releaseTop_); // If the branch path matches the release path, the file was found in the release: if (br == release_) { location_ = Release; @@ -413,7 +414,7 @@ namespace edm { if (!dataTop_.empty()) { // Create a path object for our data path DATATOP: - bf::path data_(dataTop_); + std::filesystem::path data_(dataTop_); // If the branch path matches the data path, the file was found in the data area: if (br == data_) { location_ = Data; @@ -430,7 +431,7 @@ namespace edm { << "edm::FileInPath unable to find file " << relativePath_ << " anywhere in the search path." << "\nThe search path is defined by: " << PathVariableName << "\n${" << PathVariableName << "} is: " << std::getenv(PathVariableName.c_str()) - << "\nCurrent directory is: " << bf::initial_path().string() << "\n"; + << "\nCurrent directory is: " << std::filesystem::current_path().string() << "\n"; } void FileInPath::disableFileLookup() { s_fileLookupDisabled = true; } diff --git a/FWCore/ParameterSet/src/validateTopLevelParameterSets.cc b/FWCore/ParameterSet/src/validateTopLevelParameterSets.cc index e512232fbb042..f59e4d6a55680 100644 --- a/FWCore/ParameterSet/src/validateTopLevelParameterSets.cc +++ b/FWCore/ParameterSet/src/validateTopLevelParameterSets.cc @@ -41,6 +41,10 @@ namespace edm { description.addUntracked("throwIfIllegalParameter", true) ->setComment("Set false to disable exception throws when configuration validation detects illegal parameters"); description.addUntracked("printDependencies", false)->setComment("Print data dependencies between modules"); + description.addUntracked("deleteNonConsumedUnscheduledModules", true) + ->setComment( + "Delete modules that are unscheduled, i.e. only in Tasks, whose products are not consumed by any other " + "otherwise-running module"); // No default for this one because the parameter value is // actually used in the main function in cmsRun.cpp before diff --git a/FWCore/PluginManager/interface/PluginFactoryBase.h b/FWCore/PluginManager/interface/PluginFactoryBase.h index 2542e7d20a91f..67577ae3beeaa 100644 --- a/FWCore/PluginManager/interface/PluginFactoryBase.h +++ b/FWCore/PluginManager/interface/PluginFactoryBase.h @@ -61,7 +61,7 @@ namespace edmplugin { std::atomic m_ptr; }; - typedef tbb::concurrent_vector PMakers; + typedef tbb::concurrent_vector> PMakers; typedef tbb::concurrent_unordered_map Plugins; // ---------- const member functions --------------------- diff --git a/FWCore/PluginManager/src/PluginFactoryBase.cc b/FWCore/PluginManager/src/PluginFactoryBase.cc index 67c99ec9c9116..7949753961be4 100644 --- a/FWCore/PluginManager/src/PluginFactoryBase.cc +++ b/FWCore/PluginManager/src/PluginFactoryBase.cc @@ -75,6 +75,10 @@ namespace edmplugin { << "'\n but was not there. This means the plugin cache is incorrect. Please run 'EdmPluginRefresh " << lib << "'"; } + //The item in the container can still be under construction so wait until the m_ptr has been set since that is done last + auto const& value = itFound->second.front(); + while (value.m_ptr.load(std::memory_order_acquire) == nullptr) { + } } else { //The item in the container can still be under construction so wait until the m_ptr has been set since that is done last auto const& value = itFound->second.front(); diff --git a/FWCore/PluginManager/src/PluginManager.cc b/FWCore/PluginManager/src/PluginManager.cc index 2d91f8c96326e..5f8da0342fbbd 100644 --- a/FWCore/PluginManager/src/PluginManager.cc +++ b/FWCore/PluginManager/src/PluginManager.cc @@ -251,7 +251,7 @@ namespace edmplugin { throw; } } - loadables_[p] = ptr; + loadables_.emplace(p, ptr); justLoaded_(*ptr); return *ptr; } diff --git a/FWCore/PrescaleService/BuildFile.xml b/FWCore/PrescaleService/BuildFile.xml index 9e8fa8515c23c..e0d187a306920 100644 --- a/FWCore/PrescaleService/BuildFile.xml +++ b/FWCore/PrescaleService/BuildFile.xml @@ -1,6 +1,7 @@ + diff --git a/FWCore/PrescaleService/test/testPrescaleService_cfg.py b/FWCore/PrescaleService/test/testPrescaleService_cfg.py index c24b4e498d5d0..cc9c5eb511fb7 100644 --- a/FWCore/PrescaleService/test/testPrescaleService_cfg.py +++ b/FWCore/PrescaleService/test/testPrescaleService_cfg.py @@ -5,8 +5,13 @@ # instantiate & configure message logger service process.MessageLogger = cms.Service("MessageLogger", - cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO') ), - destinations = cms.untracked.vstring('cout') + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ) ) diff --git a/FWCore/PyDevParameterSet/test/makepset_t.cppunit.cc b/FWCore/PyDevParameterSet/test/makepset_t.cppunit.cc index ed41b8cb0bc44..1419410205860 100644 --- a/FWCore/PyDevParameterSet/test/makepset_t.cppunit.cc +++ b/FWCore/PyDevParameterSet/test/makepset_t.cppunit.cc @@ -21,7 +21,7 @@ #include // for setenv; is likely to fail #include #include -#include +#include class testmakepset : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(testmakepset); @@ -240,7 +240,7 @@ void testmakepset::fileinpathAux() { std::string const src("/src"); std::string local = localBase + src; std::string localFile = local + "/Geometry/TrackerSimData/data/trackersens.xml"; - if (!boost::filesystem::exists(localFile)) + if (!std::filesystem::exists(localFile)) CPPUNIT_ASSERT(topo.location() != edm::FileInPath::Local); else std::cerr << "Disabling test against local path for trackersens.xml as package is checked out in this test" diff --git a/FWCore/PythonFramework/BuildFile.xml b/FWCore/PythonFramework/BuildFile.xml index 363852df4932c..13223f824ab5c 100644 --- a/FWCore/PythonFramework/BuildFile.xml +++ b/FWCore/PythonFramework/BuildFile.xml @@ -1,5 +1,11 @@ + + + + + + diff --git a/FWCore/PythonFramework/src/PythonEventProcessor.cc b/FWCore/PythonFramework/src/PythonEventProcessor.cc index 47d9c39bb046c..456ac66918492 100644 --- a/FWCore/PythonFramework/src/PythonEventProcessor.cc +++ b/FWCore/PythonFramework/src/PythonEventProcessor.cc @@ -86,10 +86,26 @@ PythonEventProcessor::PythonEventProcessor(PyBind11ProcessDesc const& iDesc) createJobReport(), edm::serviceregistry::kOverlapIsError) {} +namespace { + class TaskCleanupSentry { + public: + TaskCleanupSentry(edm::EventProcessor* ep) : ep_(ep) {} + ~TaskCleanupSentry() { ep_->taskCleanup(); } + + private: + edm::EventProcessor* ep_; + }; +} // namespace + PythonEventProcessor::~PythonEventProcessor() { auto gil = PyEval_SaveThread(); // Protects the destructor from throwing exceptions. - CMS_SA_ALLOW try { processor_.endJob(); } catch (...) { + CMS_SA_ALLOW try { + tbb::task_arena{nThreads}.execute([this]() { + TaskCleanupSentry s(&processor_); + processor_.endJob(); + }); + } catch (...) { } PyEval_RestoreThread(gil); } diff --git a/FWCore/PythonParameterSet/test/makepset_t.cppunit.cc b/FWCore/PythonParameterSet/test/makepset_t.cppunit.cc index d51de43bb7bfa..221ccae043434 100644 --- a/FWCore/PythonParameterSet/test/makepset_t.cppunit.cc +++ b/FWCore/PythonParameterSet/test/makepset_t.cppunit.cc @@ -21,7 +21,7 @@ #include // for setenv; is likely to fail #include #include -#include +#include class testmakepset : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(testmakepset); @@ -240,7 +240,7 @@ void testmakepset::fileinpathAux() { std::string const src("/src"); std::string local = localBase + src; std::string localFile = local + "/Geometry/TrackerSimData/data/trackersens.xml"; - if (!boost::filesystem::exists(localFile)) + if (!std::filesystem::exists(localFile)) CPPUNIT_ASSERT(topo.location() != edm::FileInPath::Local); else std::cerr << "Disabling test against local path for trackersens.xml as package is checked out in this test" diff --git a/FWCore/ServiceRegistry/BuildFile.xml b/FWCore/ServiceRegistry/BuildFile.xml index 79ef410843e56..e3086e319aeb7 100644 --- a/FWCore/ServiceRegistry/BuildFile.xml +++ b/FWCore/ServiceRegistry/BuildFile.xml @@ -2,6 +2,7 @@ + diff --git a/FWCore/ServiceRegistry/interface/ActivityRegistry.h b/FWCore/ServiceRegistry/interface/ActivityRegistry.h index 8d689d7be6e85..95428bf3667d9 100644 --- a/FWCore/ServiceRegistry/interface/ActivityRegistry.h +++ b/FWCore/ServiceRegistry/interface/ActivityRegistry.h @@ -100,6 +100,7 @@ namespace edm { class ProcessContext; class ModuleCallingContext; class PathsAndConsumesOfModulesBase; + class ESModuleCallingContext; namespace eventsetup { struct ComponentDescription; class DataKey; @@ -502,6 +503,36 @@ namespace edm { } AR_WATCH_USING_METHOD_1(watchPreSourceEarlyTermination) + /// signal is emitted before the esmodule starts processing and before prefetching has started + typedef signalslot::Signal + PreESModulePrefetching; + PreESModulePrefetching preESModulePrefetchingSignal_; + void watchPreESModulePrefetching(PreESModulePrefetching::slot_type const& iSlot) { + preESModulePrefetchingSignal_.connect(iSlot); + } + AR_WATCH_USING_METHOD_2(watchPreESModulePrefetching) + + /// signal is emitted before the esmodule starts processing and after prefetching has finished + typedef signalslot::Signal + PostESModulePrefetching; + PostESModulePrefetching postESModulePrefetchingSignal_; + void watchPostESModulePrefetching(PostESModulePrefetching::slot_type const& iSlot) { + postESModulePrefetchingSignal_.connect_front(iSlot); + } + AR_WATCH_USING_METHOD_2(watchPostESModulePrefetching) + + /// signal is emitted before the esmodule starts processing + typedef signalslot::Signal PreESModule; + PreESModule preESModuleSignal_; + void watchPreESModule(PreESModule::slot_type const& iSlot) { preESModuleSignal_.connect(iSlot); } + AR_WATCH_USING_METHOD_2(watchPreESModule) + + /// signal is emitted after the esmodule finished processing + typedef signalslot::Signal PostESModule; + PostESModule postESModuleSignal_; + void watchPostESModule(PostESModule::slot_type const& iSlot) { postESModuleSignal_.connect_front(iSlot); } + AR_WATCH_USING_METHOD_2(watchPostESModule) + // OLD DELETE THIS typedef signalslot::ObsoleteSignal PreProcessEvent; /// signal is emitted after the Event has been created by the InputSource but before any modules have seen the Event @@ -678,6 +709,24 @@ namespace edm { // WARNING - ModuleDescription is not in fixed place. See note M above. AR_WATCH_USING_METHOD_1(watchPostModuleConstruction) + /// signal is emitted before the module is destructed, only for modules deleted before beginJob + typedef signalslot::Signal PreModuleDestruction; + PreModuleDestruction preModuleDestructionSignal_; + void watchPreModuleDestruction(PreModuleDestruction::slot_type const& iSlot) { + preModuleDestructionSignal_.connect(iSlot); + } + // note: ModuleDescription IS in the fixed place. See note M above. + AR_WATCH_USING_METHOD_1(watchPreModuleDestruction) + + /// signal is emitted after the module is destructed, only for modules deleted before beginJob + typedef signalslot::Signal PostModuleDestruction; + PostModuleDestruction postModuleDestructionSignal_; + void watchPostModuleDestruction(PostModuleDestruction::slot_type const& iSlot) { + postModuleDestructionSignal_.connect_front(iSlot); + } + // WARNING - ModuleDescription is not in fixed place. See note M above. + AR_WATCH_USING_METHOD_1(watchPostModuleDestruction) + /// signal is emitted before the module does beginJob typedef signalslot::Signal PreModuleBeginJob; PreModuleBeginJob preModuleBeginJobSignal_; diff --git a/FWCore/ServiceRegistry/interface/ESModuleCallingContext.h b/FWCore/ServiceRegistry/interface/ESModuleCallingContext.h new file mode 100644 index 0000000000000..e392d00eb7326 --- /dev/null +++ b/FWCore/ServiceRegistry/interface/ESModuleCallingContext.h @@ -0,0 +1,68 @@ +#ifndef FWCore_ServiceRegistry_ESModuleCallingContext_h +#define FWCore_ServiceRegistry_ESModuleCallingContext_h + +/**\class edm::ESModuleCallingContext + + Description: This is intended primarily to be passed to +Services as an argument to their callback functions. + + Usage: + + +*/ +// +// Original Author: W. David Dagenhart +// Created: 7/11/2013 + +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" + +#include + +namespace edm { + + namespace eventsetup { + struct ComponentDescription; + } + class ModuleCallingContext; + class ESModuleCallingContext { + public: + using Type = ESParentContext::Type; + + enum class State { + kPrefetching, // prefetching products before starting to run + kRunning, // module actually running + kInvalid + }; + + ESModuleCallingContext(edm::eventsetup::ComponentDescription const* moduleDescription); + + ESModuleCallingContext(edm::eventsetup::ComponentDescription const* moduleDescription, + State state, + ESParentContext const& parent); + + void setContext(State state, ESParentContext const& parent); + + void setState(State state) { state_ = state; } + + edm::eventsetup::ComponentDescription const* componentDescription() const { return componentDescription_; } + State state() const { return state_; } + Type type() const { return parent_.type(); } + ESParentContext const& parent() const { return parent_; } + ModuleCallingContext const* moduleCallingContext() const { return parent_.moduleCallingContext(); } + ESModuleCallingContext const* esmoduleCallingContext() const { return parent_.esmoduleCallingContext(); } + + // This function will iterate up a series of linked context objects to + // find the highest level ModuleCallingContext. + ModuleCallingContext const* getTopModuleCallingContext() const; + + // Returns the number of ESModuleCallingContexts above this ESModuleCallingContext + // in the series of linked context objects. + unsigned depth() const; + + private: + edm::eventsetup::ComponentDescription const* componentDescription_; + ESParentContext parent_; + State state_; + }; +} // namespace edm +#endif diff --git a/FWCore/ServiceRegistry/interface/ESParentContext.h b/FWCore/ServiceRegistry/interface/ESParentContext.h new file mode 100644 index 0000000000000..cb3f02b62745f --- /dev/null +++ b/FWCore/ServiceRegistry/interface/ESParentContext.h @@ -0,0 +1,43 @@ +#ifndef FWCore_ServiceRegistry_ESParentContext_h +#define FWCore_ServiceRegistry_ESParentContext_h + +/**\class edm::ESParentContext + + Description: This is intended to be used as a member of ESModuleCallingContext. + + Usage: + + +*/ +// +// Original Author: C. Jones +// Created: 2/07/2021 + +namespace edm { + + class ModuleCallingContext; + class ESModuleCallingContext; + + class ESParentContext { + public: + enum class Type { kModule, kESModule, kInvalid }; + + ESParentContext(); + explicit ESParentContext(ModuleCallingContext const*) noexcept; + explicit ESParentContext(ESModuleCallingContext const*) noexcept; + + Type type() const noexcept { return type_; } + + ModuleCallingContext const* moduleCallingContext() const; + ESModuleCallingContext const* esmoduleCallingContext() const; + + private: + Type type_; + + union Parent { + ModuleCallingContext const* module; + ESModuleCallingContext const* esmodule; + } parent_; + }; +} // namespace edm +#endif diff --git a/FWCore/ServiceRegistry/interface/PathsAndConsumesOfModulesBase.h b/FWCore/ServiceRegistry/interface/PathsAndConsumesOfModulesBase.h index c37eba496d2c1..efab365fe6ec6 100644 --- a/FWCore/ServiceRegistry/interface/PathsAndConsumesOfModulesBase.h +++ b/FWCore/ServiceRegistry/interface/PathsAndConsumesOfModulesBase.h @@ -23,6 +23,7 @@ // Created: 11/5/2014 #include "FWCore/ServiceRegistry/interface/ConsumesInfo.h" +#include "FWCore/Utilities/interface/BranchType.h" #include #include @@ -60,8 +61,9 @@ namespace edm { // it consumes a module label that is an EDAlias, the corresponding module // description will be included in the returned vector (but the label in the // module description is not the EDAlias label). - std::vector const& modulesWhoseProductsAreConsumedBy(unsigned int moduleID) const { - return doModulesWhoseProductsAreConsumedBy(moduleID); + std::vector const& modulesWhoseProductsAreConsumedBy( + unsigned int moduleID, BranchType branchType = InEvent) const { + return doModulesWhoseProductsAreConsumedBy(moduleID, branchType); } // This returns the declared consumes information for a module. @@ -73,6 +75,8 @@ namespace edm { // than just a pointer. std::vector consumesInfo(unsigned int moduleID) const { return doConsumesInfo(moduleID); } + unsigned int largestModuleID() const { return doLargestModuleID(); } + private: virtual std::vector const& doPaths() const = 0; virtual std::vector const& doEndPaths() const = 0; @@ -81,8 +85,9 @@ namespace edm { virtual std::vector const& doModulesOnPath(unsigned int pathIndex) const = 0; virtual std::vector const& doModulesOnEndPath(unsigned int endPathIndex) const = 0; virtual std::vector const& doModulesWhoseProductsAreConsumedBy( - unsigned int moduleID) const = 0; + unsigned int moduleID, BranchType branchType) const = 0; virtual std::vector doConsumesInfo(unsigned int moduleID) const = 0; + virtual unsigned int doLargestModuleID() const = 0; }; } // namespace edm #endif diff --git a/FWCore/ServiceRegistry/interface/ServiceMaker.h b/FWCore/ServiceRegistry/interface/ServiceMaker.h index 1ea67e528464e..6d1a8eddb01e1 100644 --- a/FWCore/ServiceRegistry/interface/ServiceMaker.h +++ b/FWCore/ServiceRegistry/interface/ServiceMaker.h @@ -68,7 +68,9 @@ namespace edm { class ServiceMaker : public ServiceMakerBase { public: ServiceMaker() {} - //virtual ~ServiceMaker(); + + ServiceMaker(ServiceMaker const&) = delete; + ServiceMaker const& operator=(ServiceMaker const&) = delete; // ---------- const member functions --------------------- std::type_info const& serviceType() const override { return typeid(T); } @@ -87,17 +89,6 @@ namespace edm { bool processWideService() const override { return service::isProcessWideService(static_cast(nullptr)); } - - // ---------- static member functions -------------------- - - // ---------- member functions --------------------------- - - private: - ServiceMaker(ServiceMaker const&) = delete; // stop default - - ServiceMaker const& operator=(ServiceMaker const&) = delete; // stop default - - // ---------- member data -------------------------------- }; } // namespace serviceregistry } // namespace edm diff --git a/FWCore/ServiceRegistry/src/ActivityRegistry.cc b/FWCore/ServiceRegistry/src/ActivityRegistry.cc index 0e3c764445afc..865a2cfc1918a 100644 --- a/FWCore/ServiceRegistry/src/ActivityRegistry.cc +++ b/FWCore/ServiceRegistry/src/ActivityRegistry.cc @@ -209,6 +209,9 @@ namespace edm { preModuleConstructionSignal_.connect(std::cref(iOther.preModuleConstructionSignal_)); postModuleConstructionSignal_.connect(std::cref(iOther.postModuleConstructionSignal_)); + preModuleDestructionSignal_.connect(std::cref(iOther.preModuleDestructionSignal_)); + postModuleDestructionSignal_.connect(std::cref(iOther.postModuleDestructionSignal_)); + preModuleBeginJobSignal_.connect(std::cref(iOther.preModuleBeginJobSignal_)); postModuleBeginJobSignal_.connect(std::cref(iOther.postModuleBeginJobSignal_)); @@ -272,6 +275,12 @@ namespace edm { preModuleWriteLumiSignal_.connect(std::cref(iOther.preModuleWriteLumiSignal_)); postModuleWriteLumiSignal_.connect(std::cref(iOther.postModuleWriteLumiSignal_)); + preESModulePrefetchingSignal_.connect(std::cref(iOther.preESModulePrefetchingSignal_)); + postESModulePrefetchingSignal_.connect(std::cref(iOther.postESModulePrefetchingSignal_)); + + preESModuleSignal_.connect(std::cref(iOther.preESModuleSignal_)); + postESModuleSignal_.connect(std::cref(iOther.postESModuleSignal_)); + //preModuleSignal_.connect(std::cref(iOther.preModuleSignal_)); //postModuleSignal_.connect(std::cref(iOther.postModuleSignal_)); @@ -414,6 +423,9 @@ namespace edm { copySlotsToFrom(preModuleConstructionSignal_, iOther.preModuleConstructionSignal_); copySlotsToFromReverse(postModuleConstructionSignal_, iOther.postModuleConstructionSignal_); + copySlotsToFrom(preModuleDestructionSignal_, iOther.preModuleDestructionSignal_); + copySlotsToFromReverse(postModuleDestructionSignal_, iOther.postModuleDestructionSignal_); + copySlotsToFrom(preModuleBeginJobSignal_, iOther.preModuleBeginJobSignal_); copySlotsToFromReverse(postModuleBeginJobSignal_, iOther.postModuleBeginJobSignal_); @@ -477,6 +489,11 @@ namespace edm { copySlotsToFrom(preModuleWriteLumiSignal_, iOther.preModuleWriteLumiSignal_); copySlotsToFromReverse(postModuleWriteLumiSignal_, iOther.postModuleWriteLumiSignal_); + copySlotsToFrom(preESModulePrefetchingSignal_, iOther.preESModulePrefetchingSignal_); + copySlotsToFromReverse(postESModulePrefetchingSignal_, iOther.postESModulePrefetchingSignal_); + + copySlotsToFrom(preESModuleSignal_, iOther.preESModuleSignal_); + copySlotsToFromReverse(postESModuleSignal_, iOther.postESModuleSignal_); /* copySlotsToFrom(preModuleSignal_, iOther.preModuleSignal_); copySlotsToFromReverse(postModuleSignal_, iOther.postModuleSignal_); diff --git a/FWCore/ServiceRegistry/src/ESModuleCallingContext.cc b/FWCore/ServiceRegistry/src/ESModuleCallingContext.cc new file mode 100644 index 0000000000000..4e4ee8e0932c4 --- /dev/null +++ b/FWCore/ServiceRegistry/src/ESModuleCallingContext.cc @@ -0,0 +1,41 @@ +#include "FWCore/ServiceRegistry/interface/ESModuleCallingContext.h" +#include "FWCore/ServiceRegistry/interface/ParentContext.h" +#include "FWCore/ServiceRegistry/interface/ModuleCallingContext.h" +#include "FWCore/Utilities/interface/EDMException.h" + +#include + +namespace edm { + + ESModuleCallingContext::ESModuleCallingContext(edm::eventsetup::ComponentDescription const* componentDescription) + : componentDescription_(componentDescription), parent_(), state_(State::kInvalid) {} + + ESModuleCallingContext::ESModuleCallingContext(edm::eventsetup::ComponentDescription const* componentDescription, + State state, + ESParentContext const& parent) + : componentDescription_(componentDescription), parent_(parent), state_(state) {} + + void ESModuleCallingContext::setContext(State state, ESParentContext const& parent) { + state_ = state; + parent_ = parent; + } + + ModuleCallingContext const* ESModuleCallingContext::getTopModuleCallingContext() const { + ESModuleCallingContext const* mcc = this; + while (mcc->type() == ESParentContext::Type::kESModule) { + mcc = mcc->esmoduleCallingContext(); + } + return mcc->moduleCallingContext()->getTopModuleCallingContext(); + } + + unsigned ESModuleCallingContext::depth() const { + unsigned depth = 0; + ESModuleCallingContext const* mcc = this; + while (mcc->type() == ESParentContext::Type::kESModule) { + ++depth; + mcc = mcc->esmoduleCallingContext(); + } + return depth + mcc->moduleCallingContext()->depth(); + } + +} // namespace edm diff --git a/FWCore/ServiceRegistry/src/ESParentContext.cc b/FWCore/ServiceRegistry/src/ESParentContext.cc new file mode 100644 index 0000000000000..ed4b1c3effa47 --- /dev/null +++ b/FWCore/ServiceRegistry/src/ESParentContext.cc @@ -0,0 +1,36 @@ +#include "FWCore/ServiceRegistry/interface/ESParentContext.h" +#include "FWCore/ServiceRegistry/interface/ModuleCallingContext.h" +#include "FWCore/ServiceRegistry/interface/ESModuleCallingContext.h" + +#include "FWCore/Utilities/interface/EDMException.h" + +#include + +namespace edm { + + ESParentContext::ESParentContext() : type_(Type::kInvalid) { parent_.esmodule = nullptr; } + + ESParentContext::ESParentContext(ModuleCallingContext const* module) noexcept : type_(Type::kModule) { + parent_.module = module; + } + + ESParentContext::ESParentContext(ESModuleCallingContext const* module) noexcept : type_(Type::kESModule) { + parent_.esmodule = module; + } + + ModuleCallingContext const* ESParentContext::moduleCallingContext() const { + if (type_ != Type::kModule) { + throw Exception(errors::LogicError) + << "ESParentContext::moduleCallingContext called for incorrect type of context"; + } + return parent_.module; + } + + ESModuleCallingContext const* ESParentContext::esmoduleCallingContext() const { + if (type_ != Type::kESModule) { + throw Exception(errors::LogicError) + << "ESParentContext::esmoduleCallingContext called for incorrect type of context"; + } + return parent_.esmodule; + } +} // namespace edm diff --git a/FWCore/Services/BuildFile.xml b/FWCore/Services/BuildFile.xml index f9f51d66f8c25..ece100f8425d5 100644 --- a/FWCore/Services/BuildFile.xml +++ b/FWCore/Services/BuildFile.xml @@ -3,6 +3,7 @@ + diff --git a/FWCore/Services/bin/edmTracerLogToSimpleConfig.py b/FWCore/Services/bin/edmTracerLogToSimpleConfig.py index 106bece31b75f..eb4e1faaa2b7b 100644 --- a/FWCore/Services/bin/edmTracerLogToSimpleConfig.py +++ b/FWCore/Services/bin/edmTracerLogToSimpleConfig.py @@ -120,8 +120,8 @@ def finish(self): # The following two lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.MessageLogger.cerr.FwkReport.reportEvery = 50000 process.MessageLogger.cerr.threshold = 'WARNING' diff --git a/FWCore/Services/plugins/ConcurrentModuleTimer.cc b/FWCore/Services/plugins/ConcurrentModuleTimer.cc index 6588e6b6b5e72..37f30c0c403d7 100644 --- a/FWCore/Services/plugins/ConcurrentModuleTimer.cc +++ b/FWCore/Services/plugins/ConcurrentModuleTimer.cc @@ -9,6 +9,8 @@ // Original Author: Chris Jones // Created: Tue, 10 Dec 2013 21:16:00 GMT // +#include + #include #include #include @@ -86,6 +88,12 @@ ConcurrentModuleTimer::ConcurrentModuleTimer(edm::ParameterSet const& iConfig, e } } }); + iReg.watchPreModuleDestruction([this](ModuleDescription const& iMod) { + auto found = std::find(m_excludedModuleIds.begin(), m_excludedModuleIds.end(), iMod.id()); + if (found != m_excludedModuleIds.end()) { + m_excludedModuleIds.erase(found); + } + }); iReg.watchPreModuleEvent([this](StreamContext const&, ModuleCallingContext const& iContext) { if (trackModule(iContext)) { start(); @@ -142,7 +150,7 @@ ConcurrentModuleTimer::ConcurrentModuleTimer(edm::ParameterSet const& iConfig, e iReg.watchPreallocate([this](edm::service::SystemBounds const& iBounds) { m_nTimeSums = iBounds.maxNumberOfThreads() + 1 + m_padding; - m_timeSums.reset(new std::atomic[m_nTimeSums]); + m_timeSums = std::make_unique[]>(m_nTimeSums); for (unsigned int i = 0; i < m_nTimeSums; ++i) { m_timeSums[i] = 0; } diff --git a/FWCore/Services/plugins/DependencyGraph.cc b/FWCore/Services/plugins/DependencyGraph.cc index 0e98319ac386a..8ec47c5ea751e 100644 --- a/FWCore/Services/plugins/DependencyGraph.cc +++ b/FWCore/Services/plugins/DependencyGraph.cc @@ -222,7 +222,7 @@ void DependencyGraph::preBeginJob(PathsAndConsumesOfModulesBase const &pathsAndC boost::get_property(m_graph, boost::graph_graph_attribute)["labelloc"] = "top"; // create graph vertices associated to all modules in the process - auto size = pathsAndConsumes.allModules().size(); + auto size = pathsAndConsumes.largestModuleID() - boost::num_vertices(m_graph) + 1; for (size_t i = 0; i < size; ++i) boost::add_vertex(m_graph); @@ -237,7 +237,7 @@ void DependencyGraph::preBeginJob(PathsAndConsumesOfModulesBase const &pathsAndC boost::get_property(graph, boost::graph_graph_attribute)["labelloc"] = "top"; // create graph vertices associated to all modules in the subprocess - auto size = pathsAndConsumes.allModules().size(); + auto size = pathsAndConsumes.largestModuleID() - boost::num_vertices(m_graph) + 1; for (size_t i = 0; i < size; ++i) boost::add_vertex(graph); } diff --git a/FWCore/Services/plugins/InitRootHandlers.cc b/FWCore/Services/plugins/InitRootHandlers.cc index ee4c24979cc74..a759f57534d71 100644 --- a/FWCore/Services/plugins/InitRootHandlers.cc +++ b/FWCore/Services/plugins/InitRootHandlers.cc @@ -21,6 +21,7 @@ #include "tbb/concurrent_unordered_set.h" #include "tbb/task.h" #include "tbb/task_scheduler_observer.h" +#include "tbb/global_control.h" #include #include @@ -75,7 +76,9 @@ namespace edm { public: typedef tbb::concurrent_unordered_set Container_type; - ThreadTracker() : tbb::task_scheduler_observer() { observe(true); } + ThreadTracker() : tbb::task_scheduler_observer(true) { observe(true); } + ~ThreadTracker() override = default; + void on_scheduler_entry(bool) override { // ensure thread local has been allocated; not necessary on Linux with // the current cmsRun linkage, but could be an issue if the platform @@ -85,6 +88,7 @@ namespace edm { edm::CurrentModuleOnThread::getCurrentModuleOnThread(); threadIDs_.insert(pthread_self()); } + void on_scheduler_exit(bool) override {} const Container_type& IDs() { return threadIDs_; } private: @@ -96,7 +100,13 @@ namespace edm { static void fillDescriptions(ConfigurationDescriptions& descriptions); static void stacktraceFromThread(); - static const ThreadTracker::Container_type& threadIDs() { return threadTracker_.IDs(); } + static const ThreadTracker::Container_type& threadIDs() { + static const ThreadTracker::Container_type empty; + if (threadTracker_) { + return threadTracker_->IDs(); + } + return empty; + } static int stackTracePause() { return stackTracePause_; } static std::vector> moduleListBuffers_; @@ -117,13 +127,14 @@ namespace edm { static int parentToChild_[2]; static int childToParent_[2]; static std::unique_ptr helperThread_; - static ThreadTracker threadTracker_; + static std::unique_ptr threadTracker_; static int stackTracePause_; bool unloadSigHandler_; bool resetErrHandler_; bool loadAllDictionaries_; bool autoLibraryLoader_; + bool interactiveDebug_; std::shared_ptr sigBusHandler_; std::shared_ptr sigSegvHandler_; std::shared_ptr sigIllHandler_; @@ -154,7 +165,8 @@ namespace { }) != substrs.end()); } - constexpr std::array in_message{ + //Contents of a message which should be reported as an INFO not a ERROR + constexpr std::array in_message{ {"no dictionary for class", "already in TClassTable", "matrix not positive definite", @@ -162,18 +174,21 @@ namespace { "Problems declaring payload", "Announced number of args different from the real number of argument passed", // Always printed if gDebug>0 - regardless of whether warning message is real. "nbins is <=0 - set to nbins = 1", - "nbinsy is <=0 - set to nbinsy = 1"}}; + "nbinsy is <=0 - set to nbinsy = 1", + "tbb::global_control is limiting"}}; - constexpr std::array in_location{{"Fit", + //Location generating messages which should be reported as an INFO not a ERROR + constexpr std::array in_location{{"Fit", "TDecompChol::Solve", "THistPainter::PaintInit", "TUnixSystem::SetDisplay", "TGClient::GetFontByName", - "Inverter::Dinv"}}; + "Inverter::Dinv", + "RTaskArenaWrapper"}}; - constexpr std::array in_message_print{{"number of iterations was insufficient", - "bad integrand behavior", - "integral is divergent, or slowly convergent"}}; + constexpr std::array in_message_print_error{{"number of iterations was insufficient", + "bad integrand behavior", + "integral is divergent, or slowly convergent"}}; void RootErrorHandlerImpl(int level, char const* location, char const* message) { bool die = false; @@ -257,7 +272,7 @@ namespace { // These are a special case because we do not want them to // be fatal, but we do want an error to print. bool alreadyPrinted = false; - if (find_if_string(el_message, in_message_print)) { + if (find_if_string(el_message, in_message_print_error)) { el_severity = edm::RootHandlers::SeverityLevel::kInfo; edm::LogError("Root_Error") << el_location << el_message; alreadyPrinted = true; @@ -740,19 +755,24 @@ namespace edm { int InitRootHandlers::parentToChild_[2] = {-1, -1}; int InitRootHandlers::childToParent_[2] = {-1, -1}; std::unique_ptr InitRootHandlers::helperThread_; + std::unique_ptr InitRootHandlers::threadTracker_; int InitRootHandlers::stackTracePause_ = 300; std::vector> InitRootHandlers::moduleListBuffers_; std::atomic InitRootHandlers::nextModule_(0), InitRootHandlers::doneModules_(0); - InitRootHandlers::ThreadTracker InitRootHandlers::threadTracker_; InitRootHandlers::InitRootHandlers(ParameterSet const& pset, ActivityRegistry& iReg) : RootHandlers(), unloadSigHandler_(pset.getUntrackedParameter("UnloadRootSigHandler")), resetErrHandler_(pset.getUntrackedParameter("ResetRootErrHandler")), loadAllDictionaries_(pset.getUntrackedParameter("LoadAllDictionaries")), - autoLibraryLoader_(loadAllDictionaries_ or pset.getUntrackedParameter("AutoLibraryLoader")) { + autoLibraryLoader_(loadAllDictionaries_ or pset.getUntrackedParameter("AutoLibraryLoader")), + interactiveDebug_(pset.getUntrackedParameter("InteractiveDebug")) { stackTracePause_ = pset.getUntrackedParameter("StackTracePauseTime"); + if (not threadTracker_) { + threadTracker_ = std::make_unique(); + } + if (unloadSigHandler_) { // Deactivate all the Root signal handlers and restore the system defaults gSystem->ResetSignal(kSigChild); @@ -824,7 +844,9 @@ namespace edm { // Enable Root implicit multi-threading bool imt = pset.getUntrackedParameter("EnableIMT"); if (imt && not ROOT::IsImplicitMTEnabled()) { - ROOT::EnableImplicitMT(); + //cmsRun uses global_control to set the number of allowed threads to use + // we need to tell ROOT the same value in order to avoid unnecessary warnings + ROOT::EnableImplicitMT(tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism)); } } @@ -841,6 +863,8 @@ namespace edm { iter = TIter(gROOT->GetListOfFiles()); } } + //disengage from TBB to avoid possible at exit problems + threadTracker_.reset(); } void InitRootHandlers::willBeUsingThreads() { @@ -870,6 +894,10 @@ namespace edm { ->setComment( "If True, do an abort when a signal occurs that causes a crash. If False, ROOT will do an exit which " "attempts to do a clean shutdown."); + desc.addUntracked("InteractiveDebug", false) + ->setComment( + "If True, leave gdb attached to cmsRun after a crash; " + "if False, attach gdb, print a stack trace, and quit gdb"); desc.addUntracked("DebugLevel", 0)->setComment("Sets ROOT's gDebug value."); desc.addUntracked("StackTracePauseTime", 300) ->setComment("Seconds to pause other threads during stack trace."); @@ -889,16 +917,18 @@ namespace edm { //In that case, we are already all setup return; } - if (snprintf(pidString_, - pidStringLength_ - 1, - "date; gdb -quiet -p %d 2>&1 <= pidStringLength_) { + std::string gdbcmd{"date; gdb -quiet -p %d"}; + if (!interactiveDebug_) { + gdbcmd += + " 2>&1 <= pidStringLength_) { std::ostringstream sstr; sstr << "Unable to pre-allocate stacktrace handler information"; edm::Exception except(edm::errors::OtherCMS, sstr.str()); diff --git a/FWCore/Services/plugins/StallMonitor.cc b/FWCore/Services/plugins/StallMonitor.cc index 8cb7fa530aac3..a1ea21a03bc67 100644 --- a/FWCore/Services/plugins/StallMonitor.cc +++ b/FWCore/Services/plugins/StallMonitor.cc @@ -197,6 +197,7 @@ namespace edm { private: void preModuleConstruction(edm::ModuleDescription const&); + void preModuleDestruction(edm::ModuleDescription const&); void postBeginJob(); void preSourceEvent(StreamID); void postSourceEvent(StreamID); @@ -253,6 +254,7 @@ StallMonitor::StallMonitor(ParameterSet const& iPS, ActivityRegistry& iRegistry) stallThreshold_{ std::chrono::round(duration(iPS.getUntrackedParameter("stallThreshold")))} { iRegistry.watchPreModuleConstruction(this, &StallMonitor::preModuleConstruction); + iRegistry.watchPreModuleDestruction(this, &StallMonitor::preModuleDestruction); iRegistry.watchPostBeginJob(this, &StallMonitor::postBeginJob); iRegistry.watchPostModuleEventPrefetching(this, &StallMonitor::postModuleEventPrefetching); iRegistry.watchPreModuleEventAcquire(this, &StallMonitor::preModuleEventAcquire); @@ -373,6 +375,12 @@ void StallMonitor::preModuleConstruction(ModuleDescription const& md) { } } +void StallMonitor::preModuleDestruction(ModuleDescription const& md) { + // Reset the module label back if the module is deleted before + // beginJob() so that the entry is ignored in the summary printouts. + moduleLabels_[md.id()] = ""; +} + void StallMonitor::postBeginJob() { // Since a (push,emplace)_back cannot be called for a vector of a // type containing atomics (like 'StallStatistics')--i.e. atomics diff --git a/FWCore/Services/plugins/Timing.cc b/FWCore/Services/plugins/Timing.cc index f459c1eb614e2..911ea28eec42f 100644 --- a/FWCore/Services/plugins/Timing.cc +++ b/FWCore/Services/plugins/Timing.cc @@ -263,6 +263,9 @@ namespace edm { iRegistry.watchPreModuleConstruction(this, &Timing::preModule); iRegistry.watchPostModuleConstruction(this, &Timing::postModule); + iRegistry.watchPreModuleDestruction(this, &Timing::preModule); + iRegistry.watchPostModuleDestruction(this, &Timing::postModule); + iRegistry.watchPreModuleBeginJob(this, &Timing::preModule); iRegistry.watchPostModuleBeginJob(this, &Timing::postModule); diff --git a/FWCore/Services/plugins/Tracer.cc b/FWCore/Services/plugins/Tracer.cc index 7d7c86ebd0fad..2e8fa7a2381e4 100644 --- a/FWCore/Services/plugins/Tracer.cc +++ b/FWCore/Services/plugins/Tracer.cc @@ -38,6 +38,7 @@ #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/ServiceRegistry/interface/GlobalContext.h" #include "FWCore/ServiceRegistry/interface/ModuleCallingContext.h" +#include "FWCore/ServiceRegistry/interface/ESModuleCallingContext.h" #include "FWCore/ServiceRegistry/interface/PathContext.h" #include "FWCore/ServiceRegistry/interface/ProcessContext.h" #include "FWCore/ServiceRegistry/interface/StreamContext.h" @@ -147,6 +148,9 @@ namespace edm { void preModuleConstruction(ModuleDescription const& md); void postModuleConstruction(ModuleDescription const& md); + void preModuleDestruction(ModuleDescription const& md); + void postModuleDestruction(ModuleDescription const& md); + void preModuleBeginJob(ModuleDescription const& md); void postModuleBeginJob(ModuleDescription const& md); @@ -203,6 +207,11 @@ namespace edm { void preSourceConstruction(ModuleDescription const& md); void postSourceConstruction(ModuleDescription const& md); + void preESModulePrefetching(eventsetup::EventSetupRecordKey const&, ESModuleCallingContext const&); + void postESModulePrefetching(eventsetup::EventSetupRecordKey const&, ESModuleCallingContext const&); + void preESModule(eventsetup::EventSetupRecordKey const&, ESModuleCallingContext const&); + void postESModule(eventsetup::EventSetupRecordKey const&, ESModuleCallingContext const&); + private: std::string indention_; std::set dumpContextForLabels_; @@ -322,6 +331,9 @@ Tracer::Tracer(ParameterSet const& iPS, ActivityRegistry& iRegistry) iRegistry.watchPreModuleConstruction(this, &Tracer::preModuleConstruction); iRegistry.watchPostModuleConstruction(this, &Tracer::postModuleConstruction); + iRegistry.watchPreModuleDestruction(this, &Tracer::preModuleDestruction); + iRegistry.watchPostModuleDestruction(this, &Tracer::postModuleDestruction); + iRegistry.watchPreModuleBeginJob(this, &Tracer::preModuleBeginJob); iRegistry.watchPostModuleBeginJob(this, &Tracer::postModuleBeginJob); @@ -378,6 +390,11 @@ Tracer::Tracer(ParameterSet const& iPS, ActivityRegistry& iRegistry) iRegistry.watchPreSourceConstruction(this, &Tracer::preSourceConstruction); iRegistry.watchPostSourceConstruction(this, &Tracer::postSourceConstruction); + iRegistry.watchPreESModulePrefetching(this, &Tracer::preESModulePrefetching); + iRegistry.watchPostESModulePrefetching(this, &Tracer::postESModulePrefetching); + iRegistry.watchPreESModule(this, &Tracer::preESModule); + iRegistry.watchPostESModule(this, &Tracer::postESModule); + iRegistry.preSourceEarlyTerminationSignal_.connect([this](edm::TerminationOrigin iOrigin) { LogAbsolute out("Tracer"); out << TimeStamper(printTimestamps_); @@ -980,6 +997,26 @@ void Tracer::postModuleConstruction(ModuleDescription const& desc) { } } +void Tracer::preModuleDestruction(ModuleDescription const& desc) { + LogAbsolute out("Tracer"); + out << TimeStamper(printTimestamps_); + out << indention_ << indention_ << " starting: destructing module with label '" << desc.moduleLabel() + << "' id = " << desc.id(); + if (dumpContextForLabels_.find(desc.moduleLabel()) != dumpContextForLabels_.end()) { + out << "\n" << desc; + } +} + +void Tracer::postModuleDestruction(ModuleDescription const& desc) { + LogAbsolute out("Tracer"); + out << TimeStamper(printTimestamps_); + out << indention_ << indention_ << " finished: destructing module with label '" << desc.moduleLabel() + << "' id = " << desc.id(); + if (dumpContextForLabels_.find(desc.moduleLabel()) != dumpContextForLabels_.end()) { + out << "\n" << desc; + } +} + void Tracer::preModuleBeginJob(ModuleDescription const& desc) { LogAbsolute out("Tracer"); out << TimeStamper(printTimestamps_); @@ -1586,5 +1623,49 @@ void Tracer::postSourceConstruction(ModuleDescription const& desc) { } } +void Tracer::preESModulePrefetching(eventsetup::EventSetupRecordKey const& iKey, ESModuleCallingContext const& mcc) { + LogAbsolute out("Tracer"); + out << TimeStamper(printTimestamps_); + unsigned int nIndents = mcc.depth() + 4; + for (unsigned int i = 0; i < nIndents; ++i) { + out << indention_; + } + out << " starting: prefetching for esmodule: label = '" << mcc.componentDescription()->label_ + << "' type = " << mcc.componentDescription()->type_ << " in record = " << iKey.name(); +} + +void Tracer::postESModulePrefetching(eventsetup::EventSetupRecordKey const& iKey, ESModuleCallingContext const& mcc) { + LogAbsolute out("Tracer"); + out << TimeStamper(printTimestamps_); + unsigned int nIndents = mcc.depth() + 4; + for (unsigned int i = 0; i < nIndents; ++i) { + out << indention_; + } + out << " finished: prefetching for esmodule: label = '" << mcc.componentDescription()->label_ + << "' type = " << mcc.componentDescription()->type_ << " in record = " << iKey.name(); +} + +void Tracer::preESModule(eventsetup::EventSetupRecordKey const& iKey, ESModuleCallingContext const& mcc) { + LogAbsolute out("Tracer"); + out << TimeStamper(printTimestamps_); + unsigned int nIndents = mcc.depth() + 4; + for (unsigned int i = 0; i < nIndents; ++i) { + out << indention_; + } + out << " starting: processing esmodule: label = '" << mcc.componentDescription()->label_ + << "' type = " << mcc.componentDescription()->type_ << " in record = " << iKey.name(); +} + +void Tracer::postESModule(eventsetup::EventSetupRecordKey const& iKey, ESModuleCallingContext const& mcc) { + LogAbsolute out("Tracer"); + out << TimeStamper(printTimestamps_); + unsigned int nIndents = mcc.depth() + 4; + for (unsigned int i = 0; i < nIndents; ++i) { + out << indention_; + } + out << " finished: processing esmodule: label = '" << mcc.componentDescription()->label_ + << "' type = " << mcc.componentDescription()->type_ << " in record = " << iKey.name(); +} + using edm::service::Tracer; DEFINE_FWK_SERVICE(Tracer); diff --git a/FWCore/SharedMemory/BuildFile.xml b/FWCore/SharedMemory/BuildFile.xml index b81e2600bec9f..c7a5650c1d6b0 100644 --- a/FWCore/SharedMemory/BuildFile.xml +++ b/FWCore/SharedMemory/BuildFile.xml @@ -1,4 +1,5 @@ + diff --git a/FWCore/Skeletons/mkTemplates/EDAnalyzer/EDAnalyzer.cc b/FWCore/Skeletons/mkTemplates/EDAnalyzer/EDAnalyzer.cc index eb97b42f25943..0aaa634cb54ef 100644 --- a/FWCore/Skeletons/mkTemplates/EDAnalyzer/EDAnalyzer.cc +++ b/FWCore/Skeletons/mkTemplates/EDAnalyzer/EDAnalyzer.cc @@ -137,7 +137,7 @@ void __class__::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //To use, remove the default given above and uncomment below //ParameterSetDescription desc; //desc.addUntracked("tracks","ctfWithMaterialTracks"); - //descriptions.addDefault(desc); + //descriptions.addWithDefaultLabel(desc); } //define this as a plug-in diff --git a/FWCore/Skeletons/mkTemplates/EDProducer/EDProducer.cc b/FWCore/Skeletons/mkTemplates/EDProducer/EDProducer.cc index 0de6e551ffc93..4fc965adab34e 100644 --- a/FWCore/Skeletons/mkTemplates/EDProducer/EDProducer.cc +++ b/FWCore/Skeletons/mkTemplates/EDProducer/EDProducer.cc @@ -210,7 +210,7 @@ void __class__::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { @example_myparticle //ParameterSetDescription desc; @example_myparticle //desc.add("muons","muons"); @example_myparticle //desc.add("electrons","pixelMatchGsfElectrons"); -@example_myparticle //descriptions.addDefault(desc); +@example_myparticle //descriptions.addWithDefaultLabel(desc); } //define this as a plug-in diff --git a/FWCore/Sources/BuildFile.xml b/FWCore/Sources/BuildFile.xml index 8e095391dc3b5..874e1b87c202d 100644 --- a/FWCore/Sources/BuildFile.xml +++ b/FWCore/Sources/BuildFile.xml @@ -5,6 +5,8 @@ + + diff --git a/FWCore/TFWLiteSelectorTest/BuildFile.xml b/FWCore/TFWLiteSelectorTest/BuildFile.xml index 88df63caa9b2f..21a7647fa4433 100644 --- a/FWCore/TFWLiteSelectorTest/BuildFile.xml +++ b/FWCore/TFWLiteSelectorTest/BuildFile.xml @@ -1,5 +1,8 @@ + + + diff --git a/FWCore/TestProcessor/BuildFile.xml b/FWCore/TestProcessor/BuildFile.xml index 1dac13262ab6d..c590ba41dd6bb 100644 --- a/FWCore/TestProcessor/BuildFile.xml +++ b/FWCore/TestProcessor/BuildFile.xml @@ -1,5 +1,12 @@ + + + + + + + diff --git a/FWCore/TestProcessor/interface/TestDataProxy.h b/FWCore/TestProcessor/interface/TestDataProxy.h index 0c543cf0352d3..37768a1ec533f 100644 --- a/FWCore/TestProcessor/interface/TestDataProxy.h +++ b/FWCore/TestProcessor/interface/TestDataProxy.h @@ -23,6 +23,7 @@ // user include files #include "FWCore/Framework/interface/DataProxy.h" +#include "FWCore/Concurrency/interface/WaitingTaskHolder.h" // forward declarations @@ -36,11 +37,12 @@ namespace edm { void setData(std::unique_ptr iData) { data_ = std::move(iData); } - void prefetchAsyncImpl(WaitingTask*, + void prefetchAsyncImpl(WaitingTaskHolder, eventsetup::EventSetupRecordImpl const&, eventsetup::DataKey const&, EventSetupImpl const*, - ServiceToken const&) final { + ServiceToken const&, + ESParentContext const&) final { return; } diff --git a/FWCore/TestProcessor/interface/TestProcessor.h b/FWCore/TestProcessor/interface/TestProcessor.h index d642609cdbfc0..75a46f2476ae7 100644 --- a/FWCore/TestProcessor/interface/TestProcessor.h +++ b/FWCore/TestProcessor/interface/TestProcessor.h @@ -24,6 +24,7 @@ #include #include "tbb/global_control.h" #include "tbb/task_arena.h" +#include "tbb/task_group.h" // user include files #include "FWCore/Framework/interface/SharedResourcesAcquirer.h" @@ -324,6 +325,7 @@ This simulates a problem happening early in the job which causes processing not // ---------- member data -------------------------------- tbb::global_control globalControl_; + tbb::task_group taskGroup_; tbb::task_arena arena_; std::string labelOfTestModule_; std::shared_ptr actReg_; // We do not use propagate_const because the registry itself is mutable. diff --git a/FWCore/TestProcessor/src/TestProcessor.cc b/FWCore/TestProcessor/src/TestProcessor.cc index 67d333ca4491e..d6952f7430d95 100644 --- a/FWCore/TestProcessor/src/TestProcessor.cc +++ b/FWCore/TestProcessor/src/TestProcessor.cc @@ -381,7 +381,11 @@ namespace edm { if (beginJobCalled_) { endJob(); } - espController_->endIOVs(); + edm::FinalWaitingTask task; + espController_->endIOVsAsync(edm::WaitingTaskHolder(taskGroup_, &task)); + do { + taskGroup_.wait(); + } while (not task.done()); }); } @@ -423,15 +427,14 @@ namespace edm { { ProcessBlockTransitionInfo transitionInfo(processBlockPrincipal); using Traits = OccurrenceTraits; - auto globalWaitTask = make_empty_waiting_task(); - globalWaitTask->increment_ref_count(); - + FinalWaitingTask globalWaitTask; beginGlobalTransitionAsync( - WaitingTaskHolder(globalWaitTask.get()), *schedule_, transitionInfo, serviceToken_, emptyList); - - globalWaitTask->wait_for_all(); - if (globalWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(globalWaitTask->exceptionPtr())); + WaitingTaskHolder(taskGroup_, &globalWaitTask), *schedule_, transitionInfo, serviceToken_, emptyList); + do { + taskGroup_.wait(); + } while (not globalWaitTask.done()); + if (globalWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(globalWaitTask.exceptionPtr())); } } beginProcessBlockCalled_ = true; @@ -446,7 +449,7 @@ namespace edm { RunPrincipal& runPrincipal = principalCache_.runPrincipal(phid, runNumber_); IOVSyncValue ts(EventID(runPrincipal.run(), 0, 0), runPrincipal.beginTime()); - espController_->eventSetupForInstance(ts); + eventsetup::synchronousEventSetupForInstance(ts, taskGroup_, *espController_); auto const& es = esp_->eventSetupImpl(); @@ -455,31 +458,33 @@ namespace edm { std::vector emptyList; { using Traits = OccurrenceTraits; - auto globalWaitTask = make_empty_waiting_task(); - globalWaitTask->increment_ref_count(); + FinalWaitingTask globalWaitTask; beginGlobalTransitionAsync( - WaitingTaskHolder(globalWaitTask.get()), *schedule_, transitionInfo, serviceToken_, emptyList); - globalWaitTask->wait_for_all(); - if (globalWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(globalWaitTask->exceptionPtr())); + WaitingTaskHolder(taskGroup_, &globalWaitTask), *schedule_, transitionInfo, serviceToken_, emptyList); + do { + taskGroup_.wait(); + } while (not globalWaitTask.done()); + if (globalWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(globalWaitTask.exceptionPtr())); } } { //To wait, the ref count has to be 1+#streams - auto streamLoopWaitTask = make_empty_waiting_task(); - streamLoopWaitTask->increment_ref_count(); + FinalWaitingTask streamLoopWaitTask; using Traits = OccurrenceTraits; - beginStreamsTransitionAsync(streamLoopWaitTask.get(), + beginStreamsTransitionAsync(WaitingTaskHolder(taskGroup_, &streamLoopWaitTask), *schedule_, preallocations_.numberOfStreams(), transitionInfo, serviceToken_, emptyList); - streamLoopWaitTask->wait_for_all(); - if (streamLoopWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(streamLoopWaitTask->exceptionPtr())); + do { + taskGroup_.wait(); + } while (not streamLoopWaitTask.done()); + if (streamLoopWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(streamLoopWaitTask.exceptionPtr())); } } beginRunCalled_ = true; @@ -495,7 +500,7 @@ namespace edm { lumiPrincipal_->setRunPrincipal(principalCache_.runPrincipalPtr()); IOVSyncValue ts(EventID(runNumber_, lumiNumber_, eventNumber_), lumiPrincipal_->beginTime()); - espController_->eventSetupForInstance(ts); + eventsetup::synchronousEventSetupForInstance(ts, taskGroup_, *espController_); auto const& es = esp_->eventSetupImpl(); @@ -504,32 +509,34 @@ namespace edm { std::vector emptyList; { using Traits = OccurrenceTraits; - auto globalWaitTask = make_empty_waiting_task(); - globalWaitTask->increment_ref_count(); + FinalWaitingTask globalWaitTask; beginGlobalTransitionAsync( - WaitingTaskHolder(globalWaitTask.get()), *schedule_, transitionInfo, serviceToken_, emptyList); - globalWaitTask->wait_for_all(); - if (globalWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(globalWaitTask->exceptionPtr())); + WaitingTaskHolder(taskGroup_, &globalWaitTask), *schedule_, transitionInfo, serviceToken_, emptyList); + do { + taskGroup_.wait(); + } while (not globalWaitTask.done()); + if (globalWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(globalWaitTask.exceptionPtr())); } } { //To wait, the ref count has to be 1+#streams - auto streamLoopWaitTask = make_empty_waiting_task(); - streamLoopWaitTask->increment_ref_count(); + FinalWaitingTask streamLoopWaitTask; using Traits = OccurrenceTraits; - beginStreamsTransitionAsync(streamLoopWaitTask.get(), + beginStreamsTransitionAsync(WaitingTaskHolder(taskGroup_, &streamLoopWaitTask), *schedule_, preallocations_.numberOfStreams(), transitionInfo, serviceToken_, emptyList); - streamLoopWaitTask->wait_for_all(); - if (streamLoopWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(streamLoopWaitTask->exceptionPtr())); + do { + taskGroup_.wait(); + } while (not streamLoopWaitTask.done()); + if (streamLoopWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(streamLoopWaitTask.exceptionPtr())); } } beginLumiCalled_ = true; @@ -560,15 +567,16 @@ namespace edm { ServiceRegistry::Operate operate(serviceToken_); - auto waitTask = make_empty_waiting_task(); - waitTask->increment_ref_count(); + FinalWaitingTask waitTask; EventTransitionInfo info(*pep, esp_->eventSetupImpl()); - schedule_->processOneEventAsync(edm::WaitingTaskHolder(waitTask.get()), 0, info, serviceToken_); + schedule_->processOneEventAsync(edm::WaitingTaskHolder(taskGroup_, &waitTask), 0, info, serviceToken_); - waitTask->wait_for_all(); - if (waitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(waitTask->exceptionPtr())); + do { + taskGroup_.wait(); + } while (not waitTask.done()); + if (waitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(waitTask.exceptionPtr())); } ++eventNumber_; } @@ -580,7 +588,7 @@ namespace edm { lumiPrincipal_.reset(); IOVSyncValue ts(EventID(runNumber_, lumiNumber_, eventNumber_), lumiPrincipal->endTime()); - espController_->eventSetupForInstance(ts); + eventsetup::synchronousEventSetupForInstance(ts, taskGroup_, *espController_); auto const& es = esp_->eventSetupImpl(); @@ -590,12 +598,11 @@ namespace edm { //To wait, the ref count has to be 1+#streams { - auto streamLoopWaitTask = make_empty_waiting_task(); - streamLoopWaitTask->increment_ref_count(); + FinalWaitingTask streamLoopWaitTask; using Traits = OccurrenceTraits; - endStreamsTransitionAsync(WaitingTaskHolder(streamLoopWaitTask.get()), + endStreamsTransitionAsync(WaitingTaskHolder(taskGroup_, &streamLoopWaitTask), *schedule_, preallocations_.numberOfStreams(), transitionInfo, @@ -603,21 +610,28 @@ namespace edm { emptyList, false); - streamLoopWaitTask->wait_for_all(); - if (streamLoopWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(streamLoopWaitTask->exceptionPtr())); + do { + taskGroup_.wait(); + } while (not streamLoopWaitTask.done()); + if (streamLoopWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(streamLoopWaitTask.exceptionPtr())); } } { - auto globalWaitTask = make_empty_waiting_task(); - globalWaitTask->increment_ref_count(); + FinalWaitingTask globalWaitTask; using Traits = OccurrenceTraits; - endGlobalTransitionAsync( - WaitingTaskHolder(globalWaitTask.get()), *schedule_, transitionInfo, serviceToken_, emptyList, false); - globalWaitTask->wait_for_all(); - if (globalWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(globalWaitTask->exceptionPtr())); + endGlobalTransitionAsync(WaitingTaskHolder(taskGroup_, &globalWaitTask), + *schedule_, + transitionInfo, + serviceToken_, + emptyList, + false); + do { + taskGroup_.wait(); + } while (not globalWaitTask.done()); + if (globalWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(globalWaitTask.exceptionPtr())); } } } @@ -635,7 +649,7 @@ namespace edm { IOVSyncValue ts( EventID(runPrincipal.run(), LuminosityBlockID::maxLuminosityBlockNumber(), EventID::maxEventNumber()), runPrincipal.endTime()); - espController_->eventSetupForInstance(ts); + eventsetup::synchronousEventSetupForInstance(ts, taskGroup_, *espController_); auto const& es = esp_->eventSetupImpl(); @@ -645,12 +659,11 @@ namespace edm { //To wait, the ref count has to be 1+#streams { - auto streamLoopWaitTask = make_empty_waiting_task(); - streamLoopWaitTask->increment_ref_count(); + FinalWaitingTask streamLoopWaitTask; using Traits = OccurrenceTraits; - endStreamsTransitionAsync(WaitingTaskHolder(streamLoopWaitTask.get()), + endStreamsTransitionAsync(WaitingTaskHolder(taskGroup_, &streamLoopWaitTask), *schedule_, preallocations_.numberOfStreams(), transitionInfo, @@ -658,21 +671,28 @@ namespace edm { emptyList, false); - streamLoopWaitTask->wait_for_all(); - if (streamLoopWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(streamLoopWaitTask->exceptionPtr())); + do { + taskGroup_.wait(); + } while (not streamLoopWaitTask.done()); + if (streamLoopWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(streamLoopWaitTask.exceptionPtr())); } } { - auto globalWaitTask = make_empty_waiting_task(); - globalWaitTask->increment_ref_count(); + FinalWaitingTask globalWaitTask; using Traits = OccurrenceTraits; - endGlobalTransitionAsync( - WaitingTaskHolder(globalWaitTask.get()), *schedule_, transitionInfo, serviceToken_, emptyList, false); - globalWaitTask->wait_for_all(); - if (globalWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(globalWaitTask->exceptionPtr())); + endGlobalTransitionAsync(WaitingTaskHolder(taskGroup_, &globalWaitTask), + *schedule_, + transitionInfo, + serviceToken_, + emptyList, + false); + do { + taskGroup_.wait(); + } while (not globalWaitTask.done()); + if (globalWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(globalWaitTask.exceptionPtr())); } } @@ -688,16 +708,21 @@ namespace edm { std::vector emptyList; { - auto globalWaitTask = make_empty_waiting_task(); - globalWaitTask->increment_ref_count(); + FinalWaitingTask globalWaitTask; ProcessBlockTransitionInfo transitionInfo(processBlockPrincipal); using Traits = OccurrenceTraits; - endGlobalTransitionAsync( - WaitingTaskHolder(globalWaitTask.get()), *schedule_, transitionInfo, serviceToken_, emptyList, false); - globalWaitTask->wait_for_all(); - if (globalWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(globalWaitTask->exceptionPtr())); + endGlobalTransitionAsync(WaitingTaskHolder(taskGroup_, &globalWaitTask), + *schedule_, + transitionInfo, + serviceToken_, + emptyList, + false); + do { + taskGroup_.wait(); + } while (not globalWaitTask.done()); + if (globalWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(globalWaitTask.exceptionPtr())); } } } diff --git a/FWCore/Utilities/interface/CMSUnrollLoop.h b/FWCore/Utilities/interface/CMSUnrollLoop.h new file mode 100644 index 0000000000000..a46df28a224e7 --- /dev/null +++ b/FWCore/Utilities/interface/CMSUnrollLoop.h @@ -0,0 +1,51 @@ +#ifndef FWCore_Utilities_interface_CMSUnrollLoop_h +#define FWCore_Utilities_interface_CMSUnrollLoop_h + +// convert the macro argument to a null-terminated quoted string +#define STRINGIFY_(ARG) #ARG +#define STRINGIFY(ARG) STRINGIFY_(ARG) + +#if defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) +// CUDA or HIP device compiler + +#define CMS_UNROLL_LOOP _Pragma(STRINGIFY(unroll)) +#define CMS_UNROLL_LOOP_COUNT(N) _Pragma(STRINGIFY(unroll N)) +#define CMS_UNROLL_LOOP_DISABLE _Pragma(STRINGIFY(unroll 1)) + +#define CMS_DEVICE_UNROLL_LOOP _Pragma(STRINGIFY(unroll)) +#define CMS_DEVICE_UNROLL_LOOP_COUNT(N) _Pragma(STRINGIFY(unroll N)) +#define CMS_DEVICE_UNROLL_LOOP_DISABLE _Pragma(STRINGIFY(unroll 1)) + +#else // defined (__CUDA_ARCH__) || defined (__HIP_DEVICE_COMPILE__) + +// any host compiler +#define CMS_DEVICE_UNROLL_LOOP +#define CMS_DEVICE_UNROLL_LOOP_COUNT(N) +#define CMS_DEVICE_UNROLL_LOOP_DISABLE + +#if defined(__clang__) +// clang host compiler + +#define CMS_UNROLL_LOOP _Pragma(STRINGIFY(clang loop unroll(enable))) +#define CMS_UNROLL_LOOP_COUNT(N) _Pragma(STRINGIFY(clang loop unroll_count(N))) +#define CMS_UNROLL_LOOP_DISABLE _Pragma(STRINGIFY(clang loop unroll(disable))) + +#elif defined(__GNUC__) +// GCC host compiler + +#define CMS_UNROLL_LOOP _Pragma(STRINGIFY(GCC ivdep)) +#define CMS_UNROLL_LOOP_COUNT(N) _Pragma(STRINGIFY(GCC unroll N)) _Pragma(STRINGIFY(GCC ivdep)) +#define CMS_UNROLL_LOOP_DISABLE _Pragma(STRINGIFY(GCC unroll 1)) + +#else +// unsupported or unknown compiler + +#define CMS_UNROLL_LOOP +#define CMS_UNROLL_LOOP_COUNT(N) +#define CMS_UNROLL_LOOP_DISABLE + +#endif // defined(__clang__) || defined(__GNUC__) || ... + +#endif // defined (__CUDA_ARCH__) || defined (__HIP_DEVICE_COMPILE__) + +#endif // FWCore_Utilities_interface_CMSUnrollLoop_h diff --git a/FWCore/Utilities/interface/ESIndices.h b/FWCore/Utilities/interface/ESIndices.h index f180a14846b82..eb643ab6f79e9 100644 --- a/FWCore/Utilities/interface/ESIndices.h +++ b/FWCore/Utilities/interface/ESIndices.h @@ -94,8 +94,10 @@ namespace edm { constexpr Value_t value() const noexcept { return index_; } + static constexpr Value_t invalidValue() { return std::numeric_limits::max(); } + private: - Value_t index_ = std::numeric_limits::max(); + Value_t index_ = std::numeric_limits::max(); }; inline std::ostream& operator<<(std::ostream& iOS, ESRecordIndex const& iIndex) { iOS << iIndex.value(); diff --git a/FWCore/Utilities/interface/hash_combine.h b/FWCore/Utilities/interface/hash_combine.h new file mode 100644 index 0000000000000..775e062a2ac92 --- /dev/null +++ b/FWCore/Utilities/interface/hash_combine.h @@ -0,0 +1,43 @@ +#ifndef FWCore_Utilities_hash_combine_h +#define FWCore_Utilities_hash_combine_h +// -*- C++ -*- +// +// Package: FWCore/Utilities +// Class : hash_combine +// +/**\function hash_combine hash_combine.h "FWCore/Utilities/interface/hash_combine.h" + + Description: Convenience Functions to Combine Hash Values + + Based on http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3876.pdf + Combination algorithm is the same as boost::hash_combine + + Usage: + + +*/ + +// system include files +#include + +namespace edm { + template + inline void hash_combine(std::size_t& seed, const T& val) { + seed ^= std::hash()(val) + 0x9e3779b9 + (seed << 6) + (seed >> 2); + } + + template + inline void hash_combine(std::size_t& seed, const T& val, const Types&... args) { + hash_combine(seed, val); + hash_combine(seed, args...); + } + + template + inline std::size_t hash_value(const Types&... args) { + std::size_t seed{0}; + hash_combine(seed, args...); + return seed; + } +} // namespace edm + +#endif diff --git a/FWCore/Utilities/src/InputTag.cc b/FWCore/Utilities/src/InputTag.cc index c2cca286de7d2..0ef5d31f52237 100644 --- a/FWCore/Utilities/src/InputTag.cc +++ b/FWCore/Utilities/src/InputTag.cc @@ -179,10 +179,6 @@ namespace edm { void const* productRegistry) const { ProductResolverIndex index = index_.load(); - // This will no longer be necessary when the compiler supports the memory - // order associated with atomics. - __sync_synchronize(); - if (index < ProductResolverIndexInitializing && typeID_ == typeID && branchType_ == branchType && productRegistry_ == productRegistry) { return index; @@ -199,11 +195,6 @@ namespace edm { typeID_ = typeID; branchType_ = branchType; productRegistry_ = productRegistry; - - // This will no longer be necessary when the compiler supports the memory - // order associated with atomics. - __sync_synchronize(); - index_.store(index); } } diff --git a/FastSimulation/Calorimetry/python/Calorimetry_cff.py b/FastSimulation/Calorimetry/python/Calorimetry_cff.py index bf9a36ac7959a..c09738cb2e21b 100644 --- a/FastSimulation/Calorimetry/python/Calorimetry_cff.py +++ b/FastSimulation/Calorimetry/python/Calorimetry_cff.py @@ -300,3 +300,5 @@ from Configuration.Eras.Modifier_run2_common_cff import run2_common run2_common.toModify(FamosCalorimetryBlock.Calorimetry.HFShowerLibrary, FileName = 'SimG4CMS/Calo/data/HFShowerLibrary_npmt_noatt_eta4_16en_v4.root' ) + +run2_common.toModify(FamosCalorimetryBlock.Calorimetry.HFShower, ProbMax = 0.5 ) diff --git a/FastSimulation/Calorimetry/python/TreeWriterForEcalCorrection_cfg.py b/FastSimulation/Calorimetry/python/TreeWriterForEcalCorrection_cfg.py deleted file mode 100644 index 7480495935e9e..0000000000000 --- a/FastSimulation/Calorimetry/python/TreeWriterForEcalCorrection_cfg.py +++ /dev/null @@ -1,39 +0,0 @@ -import FWCore.ParameterSet.Config as cms -process = cms.Process("ANA") - -process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cerr.FwkReport.reportEvery = 10000 -process.MessageLogger.cerr.default.limit = 100000000 - - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -from python.fastFileList import filelist -#from python.fullFileList import filelist - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - #'/store/user/kiesel/SingleElectronGun_E80_fast/SingleElectronGun_E80_fast/a88c9ccbd07595a7d33ae9d4d6a917a0/out_2_1_X2L.root', - #'/store/user/kiesel/SingleElectronGun_E80_full/SingleElectronGun_E80_full/1d73d2566f2f721e3a7146e7729d743b/out_48_1_kkW.root' - filelist - ) -) - -outFileName = "out_tree.root" - -# guess the output name from the 1. input name -fn0 = process.source.fileNames[0] -if "full" in fn0 or "Full" in fn0: - outFileName = "full_tree.root" -if "fast" in fn0 or "Fast" in fn0: - outFileName = "fast_tree.root" - -process.TFileService = cms.Service("TFileService", - fileName = cms.string( outFileName ) -) - -process.load("Configuration.StandardSequences.Analysis_cff") - -process.treeWriterForEcalCorrection = cms.EDAnalyzer('TreeWriterForEcalCorrection') -process.p = cms.Path( process.treeWriterForEcalCorrection ) - diff --git a/FastSimulation/Event/src/KineParticleFilter.cc b/FastSimulation/Event/src/KineParticleFilter.cc index 69c60d1c0b6c0..47935c37a3b2f 100644 --- a/FastSimulation/Event/src/KineParticleFilter.cc +++ b/FastSimulation/Event/src/KineParticleFilter.cc @@ -34,7 +34,7 @@ bool KineParticleFilter::acceptParticle(const RawParticle& particle) const { // keep all high-energy protons else if (pId == 2212 && particle.E() >= protonEMin) { - return true; + return acceptVertex(particle.vertex()); } // cut on the energy diff --git a/FastSimulation/ForwardDetectors/plugins/BuildFile.xml b/FastSimulation/ForwardDetectors/plugins/BuildFile.xml index d4cba3fc2890f..30a2fc179f14b 100644 --- a/FastSimulation/ForwardDetectors/plugins/BuildFile.xml +++ b/FastSimulation/ForwardDetectors/plugins/BuildFile.xml @@ -6,6 +6,7 @@ + diff --git a/FastSimulation/ForwardDetectors/test/CastorTowerProducerTest_cfg.py b/FastSimulation/ForwardDetectors/test/CastorTowerProducerTest_cfg.py index 376745c047a88..c55d4a4bf1157 100644 --- a/FastSimulation/ForwardDetectors/test/CastorTowerProducerTest_cfg.py +++ b/FastSimulation/ForwardDetectors/test/CastorTowerProducerTest_cfg.py @@ -71,7 +71,7 @@ #process.Timing = cms.Service("Timing") #process.load("FWCore/MessageService/MessageLogger_cfi") #process.MessageLogger.destinations = cms.untracked.vstring("pyDetailedInfo.txt","cout") -#process.MessageLogger.categories.append("FamosManager") +# #process.MessageLogger.cout = cms.untracked.PSet(threshold=cms.untracked.string("INFO"), # default=cms.untracked.PSet(limit=cms.untracked.int32(0)), # FamosManager=cms.untracked.PSet(limit=cms.untracked.int32(100000))) diff --git a/FastSimulation/MaterialEffects/test/NITemplate_cfg.py b/FastSimulation/MaterialEffects/test/NITemplate_cfg.py index 2cf85b6f42f68..353d156f29e2b 100644 --- a/FastSimulation/MaterialEffects/test/NITemplate_cfg.py +++ b/FastSimulation/MaterialEffects/test/NITemplate_cfg.py @@ -68,6 +68,6 @@ # Keep the logging output to a nice level # process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['detailedInfo.txt'] - +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.detailedInfo = dict(extension = 'txt') diff --git a/FastSimulation/MaterialEffects/test/testMaterialEffects_cfg.py b/FastSimulation/MaterialEffects/test/testMaterialEffects_cfg.py index f2780b47b3009..6c6df57ffceed 100644 --- a/FastSimulation/MaterialEffects/test/testMaterialEffects_cfg.py +++ b/FastSimulation/MaterialEffects/test/testMaterialEffects_cfg.py @@ -183,5 +183,6 @@ # Keep the logging output to a nice level # process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['detailedInfo.txt'] +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.detailedInfo= dict(extension='.txt') diff --git a/FastSimulation/MaterialEffects/test/testNuclearInteractions_cfg.py b/FastSimulation/MaterialEffects/test/testNuclearInteractions_cfg.py index 8a1dceaa24a5c..d943cf13d1bba 100644 --- a/FastSimulation/MaterialEffects/test/testNuclearInteractions_cfg.py +++ b/FastSimulation/MaterialEffects/test/testNuclearInteractions_cfg.py @@ -136,7 +136,7 @@ # Charged particles with pT < pTMin (GeV/c) are not simulated pTMin = cms.double(0.0), # Particles with energy smaller than EMin (GeV) are not simulated - EMin = cms.double(0.0) + EMin = cms.double(0.0), # Protons with energy in excess of this value (GeV) will kept no matter what EProton = cms.double(99999.0), ) @@ -168,6 +168,7 @@ # Keep the logging output to a nice level # process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['test.txt'] +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.test = dict(extension = 'txt') diff --git a/FastSimulation/SimplifiedGeometryPropagator/plugins/FastTrackDeDxProducer.cc b/FastSimulation/SimplifiedGeometryPropagator/plugins/FastTrackDeDxProducer.cc index f127418a6b90c..6d6bc02b8b6a6 100644 --- a/FastSimulation/SimplifiedGeometryPropagator/plugins/FastTrackDeDxProducer.cc +++ b/FastSimulation/SimplifiedGeometryPropagator/plugins/FastTrackDeDxProducer.cc @@ -27,6 +27,7 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h" @@ -99,6 +100,7 @@ class FastTrackDeDxProducer : public edm::stream::EDProducer<> { edm::EDGetTokenT simHitsToken; edm::EDGetTokenT simHit2RecHitMapToken; + const edm::ESGetToken tkGeomToken; bool usePixel; bool useStrip; @@ -137,9 +139,11 @@ void FastTrackDeDxProducer::fillDescriptions(edm::ConfigurationDescriptions& des FastTrackDeDxProducer::FastTrackDeDxProducer(const edm::ParameterSet& iConfig) : simHitsToken(consumes(iConfig.getParameter("simHits"))), simHit2RecHitMapToken( - consumes(iConfig.getParameter("simHit2RecHitMap"))) { + consumes(iConfig.getParameter("simHit2RecHitMap"))), + tkGeomToken(esConsumes()) { produces>(); + auto cCollector = consumesCollector(); string estimatorName = iConfig.getParameter("estimator"); if (estimatorName == "median") m_estimator = std::unique_ptr(new MedianDeDxEstimator(iConfig)); @@ -149,13 +153,13 @@ FastTrackDeDxProducer::FastTrackDeDxProducer(const edm::ParameterSet& iConfig) m_estimator = std::unique_ptr(new TruncatedAverageDeDxEstimator(iConfig)); //else if(estimatorName == "unbinnedFit") m_estimator = std::unique_ptr (new UnbinnedFitDeDxEstimator(iConfig));//estimator used in FullSimVersion else if (estimatorName == "productDiscrim") - m_estimator = std::unique_ptr(new ProductDeDxDiscriminator(iConfig)); + m_estimator = std::unique_ptr(new ProductDeDxDiscriminator(iConfig, cCollector)); else if (estimatorName == "btagDiscrim") - m_estimator = std::unique_ptr(new BTagLikeDeDxDiscriminator(iConfig)); + m_estimator = std::unique_ptr(new BTagLikeDeDxDiscriminator(iConfig, cCollector)); else if (estimatorName == "smirnovDiscrim") - m_estimator = std::unique_ptr(new SmirnovDeDxDiscriminator(iConfig)); + m_estimator = std::unique_ptr(new SmirnovDeDxDiscriminator(iConfig, cCollector)); else if (estimatorName == "asmirnovDiscrim") - m_estimator = std::unique_ptr(new ASmirnovDeDxDiscriminator(iConfig)); + m_estimator = std::unique_ptr(new ASmirnovDeDxDiscriminator(iConfig, cCollector)); else throw cms::Exception("fastsim::SimplifiedGeometry::FastTrackDeDxProducer.cc") << " estimator name does not exist"; diff --git a/FastSimulation/Tracking/test/beamspot/BeamSpotCalculator_cfg.py b/FastSimulation/Tracking/test/beamspot/BeamSpotCalculator_cfg.py index 1657174bb9e87..baf602b0c5b3a 100644 --- a/FastSimulation/Tracking/test/beamspot/BeamSpotCalculator_cfg.py +++ b/FastSimulation/Tracking/test/beamspot/BeamSpotCalculator_cfg.py @@ -74,7 +74,8 @@ # Keep output to a nice level # process.Timing = cms.Service("Timing") process.load("FWCore/MessageService/MessageLogger_cfi") -process.MessageLogger.destinations = cms.untracked.vstring("pyDetailedInfo.txt") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.pyDetailedInfo=dict(extension="txt") # Make the job crash in case of missing product process.options = cms.untracked.PSet( Rethrow = cms.untracked.vstring('ProductNotFound') ) diff --git a/FastSimulation/Tracking/test/testGeneralTracks_cfg.py b/FastSimulation/Tracking/test/testGeneralTracks_cfg.py index 31c15197cf126..b0373aefd9824 100644 --- a/FastSimulation/Tracking/test/testGeneralTracks_cfg.py +++ b/FastSimulation/Tracking/test/testGeneralTracks_cfg.py @@ -109,7 +109,8 @@ # Keep the logging output to a nice level # process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['test.txt'] +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.test = dict(extension = 'txt') # Should be commented out in the analysis step process.o1 = cms.OutputModule( diff --git a/FastSimulation/TrackingRecHitProducer/plugins/TrackingRecHitProducer.cc b/FastSimulation/TrackingRecHitProducer/plugins/TrackingRecHitProducer.cc index 8b108610a4e60..d50cb877010b2 100644 --- a/FastSimulation/TrackingRecHitProducer/plugins/TrackingRecHitProducer.cc +++ b/FastSimulation/TrackingRecHitProducer/plugins/TrackingRecHitProducer.cc @@ -94,11 +94,7 @@ TrackingRecHitProducer::TrackingRecHitProducer(const edm::ParameterSet& config) produces("simHit2RecHitMap"); } -TrackingRecHitProducer::~TrackingRecHitProducer() { - //--- Delete the templates. This is safe even if thePixelTemp_ vector is empty. - for (auto x : _pixelTempStore) - x.destroy(); -} +TrackingRecHitProducer::~TrackingRecHitProducer() {} void TrackingRecHitProducer::beginStream(edm::StreamID id) { for (auto& algo : _recHitAlgorithms) { diff --git a/FastSimulation/TrackingRecHitProducer/src/PixelTemplateSmearerBase.cc b/FastSimulation/TrackingRecHitProducer/src/PixelTemplateSmearerBase.cc index f0bf2e66f56c5..0b2ab2b963670 100644 --- a/FastSimulation/TrackingRecHitProducer/src/PixelTemplateSmearerBase.cc +++ b/FastSimulation/TrackingRecHitProducer/src/PixelTemplateSmearerBase.cc @@ -125,11 +125,7 @@ PixelTemplateSmearerBase::PixelTemplateSmearerBase(const std::string& name, // event. So nothing happens now. } -PixelTemplateSmearerBase::~PixelTemplateSmearerBase() { - //--- Delete the templates. This is safe even if thePixelTemp_ vector is empty. - for (auto x : thePixelTemp_) - x.destroy(); -} +PixelTemplateSmearerBase::~PixelTemplateSmearerBase() {} //------------------------------------------------------------------------------- // beginRun(); the templates are loaded in TrackingRecHitProducer, and unpacked diff --git a/FastSimulation/Validation/test/SingleElectronAnalyzer-full_cfg.py b/FastSimulation/Validation/test/SingleElectronAnalyzer-full_cfg.py index 65e7e8a7822f2..b79691696ddc7 100644 --- a/FastSimulation/Validation/test/SingleElectronAnalyzer-full_cfg.py +++ b/FastSimulation/Validation/test/SingleElectronAnalyzer-full_cfg.py @@ -68,6 +68,7 @@ process.Timing = cms.Service("Timing") process.p1 = cms.Path(process.gsfElectronAnalysis) -process.MessageLogger.destinations = ['detailedInfo.txt'] +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.detailedInfo = dict(extension='txt') diff --git a/FastSimulation/Validation/test/SingleElectronAnalyzer_cfg.py b/FastSimulation/Validation/test/SingleElectronAnalyzer_cfg.py index fa7eb70003e33..fe33c66eb4f64 100644 --- a/FastSimulation/Validation/test/SingleElectronAnalyzer_cfg.py +++ b/FastSimulation/Validation/test/SingleElectronAnalyzer_cfg.py @@ -111,6 +111,7 @@ layer.interactionModels = cms.untracked.vstring("pairProduction", "nuclearInteraction", "bremsstrahlung", "energyLoss", "multipleScattering", "trackerSimHits") for layer in process.fastSimProducer.detectorDefinition.ForwardLayers: layer.interactionModels = cms.untracked.vstring("pairProduction", "nuclearInteraction", "bremsstrahlung", "energyLoss", "multipleScattering", "trackerSimHits") -process.MessageLogger.destinations = ['detailedInfo.txt'] +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.detailedInfo=dict(extension='txt') diff --git a/FastSimulation/Validation/test/checkTiming.sh b/FastSimulation/Validation/test/checkTiming.sh index 40c1419015f9b..fb03350287389 100755 --- a/FastSimulation/Validation/test/checkTiming.sh +++ b/FastSimulation/Validation/test/checkTiming.sh @@ -11,7 +11,8 @@ else fi echo 'process.Timing = cms.Service("Timing")' >> IntegrationTestWithHLTWithTiming_cfg.py echo 'process.load("FWCore/MessageService/MessageLogger_cfi")' >> IntegrationTestWithHLTWithTiming_cfg.py -echo 'process.MessageLogger.destinations = cms.untracked.vstring("pyDetailedInfo.txt")' >> IntegrationTestWithHLTWithTiming_cfg.py +echo 'process.MessageLogger.cerr.enable = False' >> IntegrationTestWithHLTWithTiming_cfg.py +echo 'process.MessageLogger.files.pyDetailedInfo = dict(extension = "txt")' >> IntegrationTestWithHLTWithTiming_cfg.py # build the binary oval b diff --git a/FastSimulation/Validation/test/runJetPlotFast_cfg.py b/FastSimulation/Validation/test/runJetPlotFast_cfg.py index b53e19dd6e6a2..e54b67c4b8b61 100644 --- a/FastSimulation/Validation/test/runJetPlotFast_cfg.py +++ b/FastSimulation/Validation/test/runJetPlotFast_cfg.py @@ -50,6 +50,7 @@ layer.interactionModels = cms.untracked.vstring("pairProduction", "nuclearInteraction", "bremsstrahlung", "energyLoss", "multipleScattering", "trackerSimHits") for layer in process.fastSimProducer.detectorDefinition.ForwardLayers: layer.interactionModels = cms.untracked.vstring("pairProduction", "nuclearInteraction", "bremsstrahlung", "energyLoss", "multipleScattering", "trackerSimHits") -process.MessageLogger.destinations = ['detailedInfo.txt'] +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.detailedInfo = dict(extension = '.txt') diff --git a/Fireworks/Calo/plugins/FWCaloClusterProxyBuilder.cc b/Fireworks/Calo/plugins/FWCaloClusterProxyBuilder.cc index f39746cfe35e1..37ea6b506ce67 100644 --- a/Fireworks/Calo/plugins/FWCaloClusterProxyBuilder.cc +++ b/Fireworks/Calo/plugins/FWCaloClusterProxyBuilder.cc @@ -16,7 +16,7 @@ class FWCaloClusterProxyBuilder : public FWHeatmapProxyBuilderTemplate> TimeValueMapHandle; + edm::Handle>> TimeValueMapHandle; double timeLowerBound, timeUpperBound; long layer; double saturation_energy; @@ -73,7 +73,7 @@ void FWCaloClusterProxyBuilder::build(const reco::CaloCluster &iData, TEveElement &oItemHolder, const FWViewContext *) { if (enableTimeFilter && TimeValueMapHandle.isValid()) { - const float time = TimeValueMapHandle->get(iIndex); + const float time = TimeValueMapHandle->get(iIndex).first; if (time < timeLowerBound || time > timeUpperBound) return; } diff --git a/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc b/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc new file mode 100644 index 0000000000000..02d32a07b5fd4 --- /dev/null +++ b/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc @@ -0,0 +1,324 @@ +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "Fireworks/Calo/interface/FWHeatmapProxyBuilderTemplate.h" +#include "Fireworks/Core/interface/FWEventItem.h" +#include "Fireworks/Core/interface/FWGeometry.h" +#include "Fireworks/Core/interface/BuilderUtils.h" +#include "DataFormats/HGCalReco/interface/Trackster.h" +#include "DataFormats/CaloRecHit/interface/CaloCluster.h" +#include "DataFormats/Common/interface/ValueMap.h" +#include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h" +#include "DataFormats/ForwardDetId/interface/HGCScintillatorDetId.h" +#include "DataFormats/DetId/interface/DetId.h" + +#include "TEveBoxSet.h" +#include "TEveStraightLineSet.h" + +class FWTracksterHitsProxyBuilder : public FWHeatmapProxyBuilderTemplate { +public: + FWTracksterHitsProxyBuilder(void) {} + ~FWTracksterHitsProxyBuilder(void) override {} + + REGISTER_PROXYBUILDER_METHODS(); + +private: + edm::Handle>> TimeValueMapHandle; + edm::Handle> layerClustersHandle; + double timeLowerBound, timeUpperBound; + long layer; + double saturation_energy; + bool heatmap; + bool z_plus; + bool z_minus; + bool enableTimeFilter; + bool enableSeedLines; + bool enablePositionLines; + bool enableEdges; + + FWTracksterHitsProxyBuilder(const FWTracksterHitsProxyBuilder &) = delete; // stop default + const FWTracksterHitsProxyBuilder &operator=(const FWTracksterHitsProxyBuilder &) = delete; // stop default + + void setItem(const FWEventItem *iItem) override; + + void build(const FWEventItem *iItem, TEveElementList *product, const FWViewContext *vc) override; + void build(const ticl::Trackster &iData, + unsigned int iIndex, + TEveElement &oItemHolder, + const FWViewContext *) override; +}; + +void FWTracksterHitsProxyBuilder::setItem(const FWEventItem *iItem) { + FWHeatmapProxyBuilderTemplate::setItem(iItem); + if (iItem) { + iItem->getConfig()->assertParam("Cluster(0)/RecHit(1)", false); + iItem->getConfig()->assertParam("EnableSeedLines", false); + iItem->getConfig()->assertParam("EnablePositionLines", false); + iItem->getConfig()->assertParam("EnableEdges", false); + iItem->getConfig()->assertParam("EnableTimeFilter", false); + iItem->getConfig()->assertParam("TimeLowerBound(ns)", 0.01, 0.0, 75.0); + iItem->getConfig()->assertParam("TimeUpperBound(ns)", 0.01, 0.0, 75.0); + } +} + +void FWTracksterHitsProxyBuilder::build(const FWEventItem *iItem, TEveElementList *product, const FWViewContext *vc) { + iItem->getEvent()->getByLabel(edm::InputTag("hgcalLayerClusters", "timeLayerCluster"), TimeValueMapHandle); + iItem->getEvent()->getByLabel(edm::InputTag("hgcalLayerClusters"), layerClustersHandle); + if (TimeValueMapHandle.isValid()) { + timeLowerBound = item()->getConfig()->value("TimeLowerBound(ns)"); + timeUpperBound = item()->getConfig()->value("TimeUpperBound(ns)"); + if (timeLowerBound > timeUpperBound) { + edm::LogWarning("InvalidParameters") + << "lower time bound is larger than upper time bound. Maybe opposite is desired?"; + } + } else { + edm::LogWarning("DataNotFound|InvalidData") << "couldn't locate 'timeLayerCluster' ValueMap in root file."; + } + + if (!layerClustersHandle.isValid()) { + edm::LogWarning("DataNotFound|InvalidData") << "couldn't locate 'timeLayerCluster' ValueMap in root file."; + } + + layer = item()->getConfig()->value("Layer"); + saturation_energy = item()->getConfig()->value("EnergyCutOff"); + heatmap = item()->getConfig()->value("Heatmap"); + z_plus = item()->getConfig()->value("Z+"); + z_minus = item()->getConfig()->value("Z-"); + enableTimeFilter = item()->getConfig()->value("EnableTimeFilter"); + enableSeedLines = item()->getConfig()->value("EnableSeedLines"); + enablePositionLines = item()->getConfig()->value("EnablePositionLines"); + enableEdges = item()->getConfig()->value("EnableEdges"); + + FWHeatmapProxyBuilderTemplate::build(iItem, product, vc); +} + +void FWTracksterHitsProxyBuilder::build(const ticl::Trackster &iData, + unsigned int iIndex, + TEveElement &oItemHolder, + const FWViewContext *) { + if (enableTimeFilter && TimeValueMapHandle.isValid()) { + const float time = TimeValueMapHandle->get(iIndex).first; + if (time < timeLowerBound || time > timeUpperBound) + return; + } + + const ticl::Trackster &trackster = iData; + const size_t N = trackster.vertices().size(); + const std::vector &layerClusters = *layerClustersHandle; + + bool h_hex(false); + TEveBoxSet *hex_boxset = new TEveBoxSet(); + if (!heatmap) + hex_boxset->UseSingleColor(); + hex_boxset->SetPickable(true); + hex_boxset->Reset(TEveBoxSet::kBT_Hex, true, 64); + hex_boxset->SetAntiFlick(true); + + bool h_box(false); + TEveBoxSet *boxset = new TEveBoxSet(); + if (!heatmap) + boxset->UseSingleColor(); + boxset->SetPickable(true); + boxset->Reset(TEveBoxSet::kBT_FreeBox, true, 64); + boxset->SetAntiFlick(true); + + for (size_t i = 0; i < N; ++i) { + const reco::CaloCluster layerCluster = layerClusters[trackster.vertices(i)]; + std::vector> clusterDetIds = layerCluster.hitsAndFractions(); + + for (std::vector>::iterator it = clusterDetIds.begin(), itEnd = clusterDetIds.end(); + it != itEnd; + ++it) { + const uint8_t type = ((it->first >> 28) & 0xF); + + const float *corners = item()->getGeom()->getCorners(it->first); + if (corners == nullptr) + continue; + + if (heatmap && hitmap->find(it->first) == hitmap->end()) + continue; + + const bool z = (it->first >> 25) & 0x1; + + // discard everything thats not at the side that we are intersted in + if (((z_plus & z_minus) != 1) && (((z_plus | z_minus) == 0) || !(z == z_minus || z == !z_plus))) + continue; + + const float *parameters = item()->getGeom()->getParameters(it->first); + const float *shapes = item()->getGeom()->getShapePars(it->first); + + if (parameters == nullptr || shapes == nullptr) + continue; + + const int total_points = parameters[0]; + const bool isScintillator = (total_points == 4); + + uint8_t ll = layer; + if (layer > 0) { + if (layer > 28) { + if (type == 8) { + continue; + } + ll -= 28; + } else { + if (type != 8) { + continue; + } + } + + if (ll != ((it->first >> (isScintillator ? 17 : 20)) & 0x1F)) + continue; + } + + // seed and cluster position + if (layerCluster.seed().rawId() == it->first.rawId()) { + const float crossScale = 1.0f + fmin(layerCluster.energy(), 5.0f); + if (enableSeedLines) { + TEveStraightLineSet *marker = new TEveStraightLineSet; + marker->SetLineWidth(1); + + // center of RecHit + const float center[3] = {corners[total_points * 3 + 0], + corners[total_points * 3 + 1], + corners[total_points * 3 + 2] + shapes[3] * 0.5f}; + + // draw 3D cross + marker->AddLine(center[0] - crossScale, center[1], center[2], center[0] + crossScale, center[1], center[2]); + marker->AddLine(center[0], center[1] - crossScale, center[2], center[0], center[1] + crossScale, center[2]); + marker->AddLine(center[0], center[1], center[2] - crossScale, center[0], center[1], center[2] + crossScale); + + oItemHolder.AddElement(marker); + } + + if (enablePositionLines) { + TEveStraightLineSet *position_marker = new TEveStraightLineSet; + position_marker->SetLineWidth(2); + position_marker->SetLineColor(kOrange); + auto const &pos = layerCluster.position(); + const float position_crossScale = crossScale * 0.5; + position_marker->AddLine( + pos.x() - position_crossScale, pos.y(), pos.z(), pos.x() + position_crossScale, pos.y(), pos.z()); + position_marker->AddLine( + pos.x(), pos.y() - position_crossScale, pos.z(), pos.x(), pos.y() + position_crossScale, pos.z()); + + oItemHolder.AddElement(position_marker); + } + } + + const float energy = + fmin((item()->getConfig()->value("Cluster(0)/RecHit(1)") ? hitmap->at(it->first)->energy() + : layerCluster.energy()) / + saturation_energy, + 1.0f); + const uint8_t colorFactor = gradient_steps * energy; + + // Scintillator + if (isScintillator) { + const int total_vertices = 3 * total_points; + + std::vector pnts(24); + for (int i = 0; i < total_points; ++i) { + pnts[i * 3 + 0] = corners[i * 3]; + pnts[i * 3 + 1] = corners[i * 3 + 1]; + pnts[i * 3 + 2] = corners[i * 3 + 2]; + + pnts[(i * 3 + 0) + total_vertices] = corners[i * 3]; + pnts[(i * 3 + 1) + total_vertices] = corners[i * 3 + 1]; + pnts[(i * 3 + 2) + total_vertices] = corners[i * 3 + 2] + shapes[3]; + } + boxset->AddBox(&pnts[0]); + if (heatmap) { + energy ? boxset->DigitColor(gradient[0][colorFactor], gradient[1][colorFactor], gradient[2][colorFactor]) + : boxset->DigitColor(64, 64, 64); + } + + h_box = true; + } + // Silicon + else { + constexpr int offset = 9; + + float centerX = (corners[6] + corners[6 + offset]) / 2; + float centerY = (corners[7] + corners[7 + offset]) / 2; + float radius = fabs(corners[6] - corners[6 + offset]) / 2; + hex_boxset->AddHex(TEveVector(centerX, centerY, corners[2]), radius, 90.0, shapes[3]); + if (heatmap) { + energy ? hex_boxset->DigitColor(gradient[0][colorFactor], gradient[1][colorFactor], gradient[2][colorFactor]) + : hex_boxset->DigitColor(64, 64, 64); + } + + h_hex = true; + } + } + } + + if (enableEdges) { + auto &edges = trackster.edges(); + + for (auto edge : edges) { + auto doublet = std::make_pair(layerClusters[edge[0]], layerClusters[edge[1]]); + + const bool isScintillatorIn = doublet.first.seed().det() == DetId::HGCalHSc; + const bool isScintillatorOut = doublet.second.seed().det() == DetId::HGCalHSc; + int layerIn = (isScintillatorIn) ? (HGCScintillatorDetId(doublet.first.seed()).layer()) + : (HGCSiliconDetId(doublet.first.seed()).layer()); + int layerOut = (isScintillatorOut) ? (HGCScintillatorDetId(doublet.second.seed()).layer()) + : (HGCSiliconDetId(doublet.second.seed()).layer()); + + // Check if offset is needed + const int offset = 28; + const int offsetIn = offset * (doublet.first.seed().det() != DetId::HGCalEE); + const int offsetOut = offset * (doublet.second.seed().det() != DetId::HGCalEE); + layerIn += offsetIn; + layerOut += offsetOut; + + const bool isAdjacent = (layerOut - layerIn) == 1; + + TEveStraightLineSet *marker = new TEveStraightLineSet; + marker->SetLineWidth(2); + if (isAdjacent) { + marker->SetLineColor(kYellow); + } else { + marker->SetLineColor(kRed); + } + + // draw 3D cross + if (layer == 0 || fabs(layerIn - layer) == 0 || fabs(layerOut - layer) == 0) { + marker->AddLine(doublet.first.x(), + doublet.first.y(), + doublet.first.z(), + doublet.second.x(), + doublet.second.y(), + doublet.second.z()); + } + + oItemHolder.AddElement(marker); + } + } + + if (h_hex) { + hex_boxset->RefitPlex(); + + hex_boxset->CSCTakeAnyParentAsMaster(); + if (!heatmap) { + hex_boxset->CSCApplyMainColorToMatchingChildren(); + hex_boxset->CSCApplyMainTransparencyToMatchingChildren(); + hex_boxset->SetMainColor(item()->modelInfo(iIndex).displayProperties().color()); + hex_boxset->SetMainTransparency(item()->defaultDisplayProperties().transparency()); + } + oItemHolder.AddElement(hex_boxset); + } + + if (h_box) { + boxset->RefitPlex(); + + boxset->CSCTakeAnyParentAsMaster(); + if (!heatmap) { + boxset->CSCApplyMainColorToMatchingChildren(); + boxset->CSCApplyMainTransparencyToMatchingChildren(); + boxset->SetMainColor(item()->modelInfo(iIndex).displayProperties().color()); + boxset->SetMainTransparency(item()->defaultDisplayProperties().transparency()); + } + oItemHolder.AddElement(boxset); + } +} + +REGISTER_FWPROXYBUILDER(FWTracksterHitsProxyBuilder, ticl::Trackster, "Trackster hits", FWViewType::kISpyBit); diff --git a/Fireworks/Calo/plugins/FWTracksterLayersProxyBuilder.cc b/Fireworks/Calo/plugins/FWTracksterLayersProxyBuilder.cc new file mode 100644 index 0000000000000..9e424a4f39294 --- /dev/null +++ b/Fireworks/Calo/plugins/FWTracksterLayersProxyBuilder.cc @@ -0,0 +1,218 @@ +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "Fireworks/Calo/interface/FWHeatmapProxyBuilderTemplate.h" +#include "Fireworks/Core/interface/FWEventItem.h" +#include "Fireworks/Core/interface/FWGeometry.h" +#include "Fireworks/Core/interface/BuilderUtils.h" +#include "DataFormats/HGCalReco/interface/Trackster.h" +#include "DataFormats/CaloRecHit/interface/CaloCluster.h" +#include "DataFormats/Common/interface/ValueMap.h" +#include "DataFormats/DetId/interface/DetId.h" +#include "DataFormats/ForwardDetId/interface/HGCScintillatorDetId.h" +#include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h" + +#include "TEveBoxSet.h" +#include "TGeoSphere.h" +#include "TGeoTube.h" +#include "TEveGeoShape.h" +#include "TEveStraightLineSet.h" + +#include + +class FWTracksterLayersProxyBuilder : public FWHeatmapProxyBuilderTemplate { +public: + FWTracksterLayersProxyBuilder(void) {} + ~FWTracksterLayersProxyBuilder(void) override {} + + REGISTER_PROXYBUILDER_METHODS(); + +private: + edm::Handle>> TimeValueMapHandle; + edm::Handle> layerClustersHandle; + double timeLowerBound, timeUpperBound; + long layer; + bool z_plus; + bool z_minus; + bool enableTimeFilter; + bool enablePositionLines; + bool enableEdges; + double displayMode; + double proportionalityFactor; + + FWTracksterLayersProxyBuilder(const FWTracksterLayersProxyBuilder &) = delete; // stop default + const FWTracksterLayersProxyBuilder &operator=(const FWTracksterLayersProxyBuilder &) = delete; // stop default + + void setItem(const FWEventItem *iItem) override; + + void build(const FWEventItem *iItem, TEveElementList *product, const FWViewContext *vc) override; + void build(const ticl::Trackster &iData, + unsigned int iIndex, + TEveElement &oItemHolder, + const FWViewContext *) override; +}; + +void FWTracksterLayersProxyBuilder::setItem(const FWEventItem *iItem) { + FWHeatmapProxyBuilderTemplate::setItem(iItem); + if (iItem) { + iItem->getConfig()->assertParam("EnablePositionLines", false); + iItem->getConfig()->assertParam("EnableEdges", false); + iItem->getConfig()->assertParam("EnableTimeFilter", false); + iItem->getConfig()->assertParam("TimeLowerBound(ns)", 0.01, 0.0, 75.0); + iItem->getConfig()->assertParam("TimeUpperBound(ns)", 0.01, 0.0, 75.0); + iItem->getConfig()->assertParam("DisplayMode", 0.0, 0.0, 5.0); + iItem->getConfig()->assertParam("ProportionalityFactor", 1.0, 0.0, 1.0); + } +} + +void FWTracksterLayersProxyBuilder::build(const FWEventItem *iItem, TEveElementList *product, const FWViewContext *vc) { + iItem->getEvent()->getByLabel(edm::InputTag("hgcalLayerClusters", "timeLayerCluster"), TimeValueMapHandle); + iItem->getEvent()->getByLabel(edm::InputTag("hgcalLayerClusters"), layerClustersHandle); + if (TimeValueMapHandle.isValid()) { + timeLowerBound = item()->getConfig()->value("TimeLowerBound(ns)"); + timeUpperBound = item()->getConfig()->value("TimeUpperBound(ns)"); + if (timeLowerBound > timeUpperBound) { + edm::LogWarning("InvalidParameters") + << "lower time bound is larger than upper time bound. Maybe opposite is desired?"; + } + } else { + edm::LogWarning("DataNotFound|InvalidData") << "couldn't locate 'timeLayerCluster' ValueMap in root file."; + } + + if (!layerClustersHandle.isValid()) { + edm::LogWarning("DataNotFound|InvalidData") << "couldn't locate 'timeLayerCluster' ValueMap in root file."; + } + + layer = item()->getConfig()->value("Layer"); + z_plus = item()->getConfig()->value("Z+"); + z_minus = item()->getConfig()->value("Z-"); + enableTimeFilter = item()->getConfig()->value("EnableTimeFilter"); + enablePositionLines = item()->getConfig()->value("EnablePositionLines"); + enableEdges = item()->getConfig()->value("EnableEdges"); + displayMode = item()->getConfig()->value("DisplayMode"); + proportionalityFactor = item()->getConfig()->value("ProportionalityFactor"); + + FWHeatmapProxyBuilderTemplate::build(iItem, product, vc); +} + +void FWTracksterLayersProxyBuilder::build(const ticl::Trackster &iData, + unsigned int iIndex, + TEveElement &oItemHolder, + const FWViewContext *) { + if (enableTimeFilter && TimeValueMapHandle.isValid()) { + const float time = TimeValueMapHandle->get(iIndex).first; + if (time < timeLowerBound || time > timeUpperBound) + return; + } + + const ticl::Trackster &trackster = iData; + const size_t N = trackster.vertices().size(); + const std::vector &layerClusters = *layerClustersHandle; + + for (size_t i = 0; i < N; ++i) { + const reco::CaloCluster layerCluster = layerClusters[trackster.vertices(i)]; + const math::XYZPoint &position = layerCluster.position(); + const size_t nHits = layerCluster.size(); + const double energy = layerCluster.correctedEnergy(); + float radius = 0; + + // discard everything thats not at the side that we are intersted in + const bool z = (layerCluster.seed() >> 25) & 0x1; + if (((z_plus & z_minus) != 1) && (((z_plus | z_minus) == 0) || !(z == z_minus || z == !z_plus))) + continue; + + if (displayMode == 0) { + radius = sqrt(nHits); + } else if (displayMode == 1) { + radius = nHits; + } else if (displayMode == 2) { + radius = energy; + } else if (displayMode == 3) { + radius = energy / nHits; + } else if (displayMode == 4) { + const bool isScintillator = layerCluster.seed().det() == DetId::HGCalHSc; + float area = 0; + if (isScintillator) { + const bool isFine = (HGCScintillatorDetId(layerCluster.seed()).type() == 0); + float dphi = (isFine) ? 1.0 * M_PI / 180. : 1.25 * M_PI / 180.; + int ir = HGCScintillatorDetId(layerCluster.seed()).iradiusAbs(); + float dr = (isFine) ? (0.0484 * static_cast(ir) + 2.1) : (0.075 * static_cast(ir) + 2.0); + float r = (isFine) ? (0.0239 * static_cast(pow(ir, 2)) + 2.02 * static_cast(ir) + 119.6) + : (0.0367 * static_cast(pow(ir, 2)) + 1.7 * static_cast(ir) + 90.7); + area = r * dr * dphi; + } else { + const bool isFine = (HGCSiliconDetId(layerCluster.seed()).type() == 0); + float side = (isFine) ? 0.465 : 0.698; + area = pow(side, 2) * 3 * sqrt(3) / 2; + } + radius = sqrt(nHits * area) / M_PI; + } + + auto eveCircle = new TEveGeoShape("Circle"); + auto tube = new TGeoTube(0., proportionalityFactor * radius, 0.1); + eveCircle->SetShape(tube); + eveCircle->InitMainTrans(); + eveCircle->RefMainTrans().Move3PF(position.x(), position.y(), position.z()); + setupAddElement(eveCircle, &oItemHolder); + + // seed and cluster position + const float crossScale = 1.0f + fmin(energy, 5.0f); + if (enablePositionLines) { + TEveStraightLineSet *position_marker = new TEveStraightLineSet; + position_marker->SetLineWidth(2); + position_marker->SetLineColor(kOrange); + auto const &pos = layerCluster.position(); + const float position_crossScale = crossScale * 0.5; + position_marker->AddLine( + pos.x() - position_crossScale, pos.y(), pos.z(), pos.x() + position_crossScale, pos.y(), pos.z()); + position_marker->AddLine( + pos.x(), pos.y() - position_crossScale, pos.z(), pos.x(), pos.y() + position_crossScale, pos.z()); + + oItemHolder.AddElement(position_marker); + } + } + + if (enableEdges) { + auto &edges = trackster.edges(); + + for (auto edge : edges) { + auto doublet = std::make_pair(layerClusters[edge[0]], layerClusters[edge[1]]); + + const bool isScintillatorIn = doublet.first.seed().det() == DetId::HGCalHSc; + const bool isScintillatorOut = doublet.second.seed().det() == DetId::HGCalHSc; + int layerIn = (isScintillatorIn) ? (HGCScintillatorDetId(doublet.first.seed()).layer()) + : (HGCSiliconDetId(doublet.first.seed()).layer()); + int layerOut = (isScintillatorOut) ? (HGCScintillatorDetId(doublet.second.seed()).layer()) + : (HGCSiliconDetId(doublet.second.seed()).layer()); + + // Check if offset is needed + const int offset = 28; + const int offsetIn = offset * (doublet.first.seed().det() != DetId::HGCalEE); + const int offsetOut = offset * (doublet.second.seed().det() != DetId::HGCalEE); + layerIn += offsetIn; + layerOut += offsetOut; + + const bool isAdjacent = (layerOut - layerIn) == 1; + + TEveStraightLineSet *marker = new TEveStraightLineSet; + marker->SetLineWidth(2); + if (isAdjacent) { + marker->SetLineColor(kYellow); + } else { + marker->SetLineColor(kRed); + } + + // draw 3D cross + if (layer == 0 || fabs(layerIn - layer) == 0 || fabs(layerOut - layer) == 0) { + marker->AddLine(doublet.first.x(), + doublet.first.y(), + doublet.first.z(), + doublet.second.x(), + doublet.second.y(), + doublet.second.z()); + } + + oItemHolder.AddElement(marker); + } + } +} + +REGISTER_FWPROXYBUILDER(FWTracksterLayersProxyBuilder, ticl::Trackster, "Trackster layers", FWViewType::kISpyBit); diff --git a/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc new file mode 100644 index 0000000000000..479f186bc17ec --- /dev/null +++ b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc @@ -0,0 +1,48 @@ +#include "Fireworks/Core/interface/FWSimpleProxyBuilderTemplate.h" +#include "DataFormats/HGCalReco/interface/Trackster.h" + +#include "TEveTrans.h" +#include "TGeoSphere.h" +#include "TEveGeoShape.h" + +class FWTracksterProxyBuilder : public FWSimpleProxyBuilderTemplate { +public: + FWTracksterProxyBuilder(void) {} + ~FWTracksterProxyBuilder(void) override {} + + REGISTER_PROXYBUILDER_METHODS(); + +private: + FWTracksterProxyBuilder(const FWTracksterProxyBuilder &) = delete; // stop default + const FWTracksterProxyBuilder &operator=(const FWTracksterProxyBuilder &) = delete; // stop default + + void build(const ticl::Trackster &iData, + unsigned int iIndex, + TEveElement &oItemHolder, + const FWViewContext *) override; +}; + +void FWTracksterProxyBuilder::build(const ticl::Trackster &iData, + unsigned int iIndex, + TEveElement &oItemHolder, + const FWViewContext *) { + const ticl::Trackster &trackster = iData; + const ticl::Trackster::Vector &barycenter = trackster.barycenter(); + const std::array &eigenvalues = trackster.eigenvalues(); + const double theta = barycenter.Theta(); + const double phi = barycenter.Phi(); + + auto eveEllipsoid = new TEveGeoShape("Ellipsoid"); + auto sphere = new TGeoSphere(0., 1.); + eveEllipsoid->SetShape(sphere); + eveEllipsoid->InitMainTrans(); + eveEllipsoid->RefMainTrans().Move3PF(barycenter.x(), barycenter.y(), barycenter.z()); + eveEllipsoid->RefMainTrans().SetRotByAnyAngles(theta, phi, 0., "xzy"); + eveEllipsoid->RefMainTrans().SetScale(sqrt(eigenvalues[2]), sqrt(eigenvalues[1]), sqrt(eigenvalues[0])); + setupAddElement(eveEllipsoid, &oItemHolder); +} + +REGISTER_FWPROXYBUILDER(FWTracksterProxyBuilder, + ticl::Trackster, + "Trackster", + FWViewType::k3DBit | FWViewType::kAllRPZBits); diff --git a/Fireworks/Core/src/FWItemValueGetter.cc b/Fireworks/Core/src/FWItemValueGetter.cc index dc503588b4e97..3ee0aa44d5d99 100644 --- a/Fireworks/Core/src/FWItemValueGetter.cc +++ b/Fireworks/Core/src/FWItemValueGetter.cc @@ -76,6 +76,10 @@ FWItemValueGetter::FWItemValueGetter(const edm::TypeWithDict& iType, const std:: addEntry("energy", 3); addEntry("pdgId()", 3, "pdgId"); addEntry("simClusters().size()", 3, "SimClSize"); + } else if (iPurpose == "Trackster" || iPurpose == "Trackster hits" || iPurpose == "Trackster layers") { + addEntry("raw_energy", 3, "E", "GeV"); + addEntry("barycenter().Eta()", 3, "eta"); + addEntry("barycenter().Phi()", 3, "phi"); } else if (iPurpose == "HGCal MultiCluster") { addEntry("energy", 3); } else { diff --git a/Fireworks/Geometry/plugins/TGeoMgrFromDdd.cc b/Fireworks/Geometry/plugins/TGeoMgrFromDdd.cc index ebdee07f8878b..89f4c884be043 100644 --- a/Fireworks/Geometry/plugins/TGeoMgrFromDdd.cc +++ b/Fireworks/Geometry/plugins/TGeoMgrFromDdd.cc @@ -170,11 +170,10 @@ TGeoMgrFromDdd::ReturnType TGeoMgrFromDdd::produce(const DisplayGeomRecord& iRec auto info = walker.current(); if (m_verbose) { - for (unsigned int i = 0; i < parentStack.size(); ++i) { - std::cout << " "; - } - std::cout << info.first.name() << " " << info.second->copyno() << " " - << DDSolidShapesName::name(info.first.solid().shape()) << std::endl; + std::cout << "parentStack of size " << parentStack.size() << std::endl; + auto num = (info.second != nullptr) ? info.second->copyno() : 0; + std::cout << info.first.name() << " " << num << " " << DDSolidShapesName::name(info.first.solid().shape()) + << std::endl; } std::string name = m_fullname ? info.first.name().fullname() : info.first.name().name(); @@ -235,7 +234,7 @@ TGeoMgrFromDdd::ReturnType TGeoMgrFromDdd::produce(const DisplayGeomRecord& iRec //============================================================================== TGeoShape* TGeoMgrFromDdd::createShape(const std::string& iName, const DDSolid& iSolid) { - LogDebug("TGeoMgrFromDdd::createShape") << "with name: " << iName << " and solid: " << iSolid; + edm::LogVerbatim("TGeoMgrFromDdd") << "with name: " << iName << " and solid: " << iSolid; DDBase::def_type defined(iSolid.isDefined()); if (!defined.first) @@ -581,10 +580,10 @@ TGeoShape* TGeoMgrFromDdd::createShape(const std::string& iName, const DDSolid& nameToShape_[iName] = rSolid; } if (rSolid == nullptr) { - std::cerr << "COULD NOT MAKE " << iName << " of a shape " << iSolid << std::endl; + edm::LogError("TGeoMgrFromDdd") << "COULD NOT MAKE " << iName << " of a shape " << iSolid; } - LogDebug("TGeoMgrFromDdd::createShape") << "solid " << iName << " has been created."; + edm::LogVerbatim("TGeoMgrFromDdd") << "solid " << iName << " has been created."; return rSolid; } diff --git a/GeneratorInterface/Core/python/ExternalGeneratorFilter.py b/GeneratorInterface/Core/python/ExternalGeneratorFilter.py index 166b8f2831b71..a8d14acf72ee7 100644 --- a/GeneratorInterface/Core/python/ExternalGeneratorFilter.py +++ b/GeneratorInterface/Core/python/ExternalGeneratorFilter.py @@ -39,7 +39,8 @@ def dumpPython(self, options=cms.PrintOptions()): options.indent() result += "\n"+options.indentation() + self._prod.dumpPython(options) result +=options.indentation()+",\n" - result += options.indentation() + self._external_process_verbose_.dumpPython(options) + result += options.indentation() + "_external_process_waitTime_ = " + self._external_process_waitTime_.dumpPython(options) + ',\n' + result += options.indentation() + "_external_process_verbose_ = " + self._external_process_verbose_.dumpPython(options) + ',' options.unindent() result += "\n)\n" return result diff --git a/GeneratorInterface/EvtGenInterface/data/DECAY.DEC b/GeneratorInterface/EvtGenInterface/data/DECAY.DEC new file mode 100644 index 0000000000000..3784415d5a501 --- /dev/null +++ b/GeneratorInterface/EvtGenInterface/data/DECAY.DEC @@ -0,0 +1,10193 @@ + +######################################################################## +# Copyright 1998-2020 CERN for the benefit of the EvtGen authors # +# # +# This file is part of EvtGen. # +# # +# EvtGen is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# EvtGen is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with EvtGen. If not, see . # +######################################################################## + +# Updated to PDG 2010 by Tomas Pilar - T.Pilar@warwick.ac.uk +# Updated Mixing Parameters Mark Whitehead May 2009 +# +Define qoverp_incohMix_B_s0 1.0 +Define dm_incohMix_B_s0 17.8e12 +Define qoverp_incohMix_B0 1.0 +Define dm_incohMix_B0 0.507e12 +# Old definition of dm still in some decay models +Define dm 0.507e12 +#Define dgamma 0 +#Define qoverp 1 +#Define phaseqoverp 0 +#Define values for B0s mixing +#Define dms 20.e12 +# DeltaGammas corresponds to DG/G = 10% +#Define dgammas 6.852e10 +# Activate incoherent Mixing +### TODO: find a way to give mixing parameters through decay file to EvtGen +#####yesIncoherentB0Mixing dm dgamma +#####yesIncoherentBsMixing dms dgammas +# define the values of the CKM angles (alpha=70, beta=40) +Define alpha 1.365 +Define beta 0.39 +Define gamma 1.387 +Define twoBetaPlusGamma 2.167 +Define betaPlusHalfGamma 1.0835 +Define minusGamma -1.387 +Define minusTwoBeta -0.78 + +# New definitions for psiKstar modes (Lange, July 26, 2000) +Define PKHplus 0.159 +Define PKHzero 0.775 +Define PKHminus 0.612 +Define PKphHplus 1.563 +Define PKphHzero 0.0 +Define PKphHminus 2.712 + +Define Aplus 0.490 +Define Azero 1.10 +Define Aminus 0.4 +# +Define phAplus 2.5 +Define phAzero 0.0 +Define phAminus -0.17 + +# +# These particle aliases are used in for CP violating decays +# in which the decay distributions depends on how the K* decayed. +# +# +Alias K*L K*0 +Alias K*S K*0 +Alias K*BL anti-K*0 +Alias K*BS anti-K*0 +Alias K*0T K*0 +Alias anti-K*0T anti-K*0 +Alias K*BR anti-K*0 +Alias K*0R K*0 +Alias anti-K_0*0N anti-K_0*0 +Alias K_0*0N K_0*0 +# +ChargeConj K*L K*BL +ChargeConj K*S K*BS +ChargeConj K*0T anti-K*0T +ChargeConj K_0*0N anti-K_0*0N +ChargeConj K*0R K*BR +#JetSet parameter modifications +#(Very important that there are no blank spaces in the parameter string!) +#Turn of B0-B0B mixing in JetSet: +#JetSetPar MSTJ(26)=0 +# control of L=1 mesons (in order: J1S0 J0S1 J1S1 J2S1) - commented out by NB/WP +#JetSetPar PARJ(14)=0.05 +#JetSetPar PARJ(15)=0.05 +#JetSetPar PARJ(16)=0.05 +#JetSetPar PARJ(17)=0.05 +#cut-off parameter used to stop fragmentation process (should not be changed) +#####JetSetPar PARJ(33)=0.3 SET NOW IN GAUSS + +# PR LHCb 10/01/2006 +# Turn on PHOTOS for all decays +yesPhotos +# +# +#Decay vpho +#1.000 PYCONT; +#Enddecay +# +# use new VSS_BMIX mixing decay model (DK,28-Oct-1999) +Decay Upsilon(4S) +0.515122645 B+ B- VSS; #[Reconstructed PDG2011] +0.483122645 B0 anti-B0 VSS_BMIX dm; #[Reconstructed PDG2011] +0.000015583 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.000015766 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.000015766 tau+ tau- PHOTOS VLL; #[Reconstructed PDG2011] +0.000084099 Upsilon(2S) pi+ pi- VVPIPI; #[Reconstructed PDG2011] +0.000044342 Upsilon(2S) pi0 pi0 VVPIPI; #[Reconstructed PDG2011] +0.000080123 Upsilon pi+ pi- VVPIPI; #[Reconstructed PDG2011] +0.000044342 Upsilon pi0 pi0 VVPIPI; #[Reconstructed PDG2011] +0.000194392 Upsilon eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +# BF ~ (2J+1)E^3_gamma; see PRL 94, 032001 +# V-> gamma S Partial wave (L,S)=(0,0) +0.000092625 gamma chi_b0(3P) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] +# V-> gamma V Partial wave (L,S)=(0,1) +0.000138938 gamma chi_b1(3P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +# V-> gamma T Partial wave (L,S)=(0,1) +0.000129084 gamma chi_b2(3P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] +# V-> gamma S Partial wave (L,S)=(0,0) +0.000002956 gamma chi_b0(2P) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] +# V-> gamma V Partial wave (L,S)=(0,1) +0.000007883 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +# V-> gamma T Partial wave (L,S)=(0,1) +0.000011825 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] +0.000837571 g g g PYTHIA 92; +0.000039415 gamma g g PYTHIA 92; +Enddecay +# +# +# +Decay anti-B0 +# Updated to PDG 2008 +# b -> c semileptonic +# +0.0493 D*+ e- anti-nu_e PHOTOS HQET2 1.207 0.920 1.406 0.853; # 1.0 * PDG2014 +0.0219 D+ e- anti-nu_e PHOTOS HQET2 1.185 1.081; # 1.0 * PDG2014 +0.0042 D_1+ e- anti-nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.0045 D_0*+ e- anti-nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.0046 D'_1+ e- anti-nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.0033 D_2*+ e- anti-nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.00045 D*+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; # Increase by 1.5 compared to 2011 +0.00490 D*0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; # Same as 2011 +0.0015 D+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; # 1.5 * of 2011 table +0.0043 D0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; # In principle should be in D**, but go to PDG2014 to fill inclusive +# Do same as for electrons +0.0493 D*+ mu- anti-nu_mu PHOTOS HQET2 1.207 0.920 1.406 0.853; #[Reconstructed PDG2011] +0.0219 D+ mu- anti-nu_mu PHOTOS HQET2 1.185 1.081; #[Reconstructed PDG2011] +0.0042 D_1+ mu- anti-nu_mu PHOTOS ISGW2; +0.0045 D_0*+ mu- anti-nu_mu PHOTOS ISGW2; +0.0046 D'_1+ mu- anti-nu_mu PHOTOS ISGW2; +0.0033 D_2*+ mu- anti-nu_mu PHOTOS ISGW2; +0.00045 D*+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.00490 D*0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] +0.0015 D+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.0043 D0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +# +# b -> c tau nu +# +0.015000000 D*+ tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011] +0.011000000 D+ tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011] +0.0013 D_1+ tau- anti-nu_tau ISGW2; +0.0013 D_0*+ tau- anti-nu_tau ISGW2; +0.0020 D'_1+ tau- anti-nu_tau ISGW2; +0.0020 D_2*+ tau- anti-nu_tau ISGW2; +# +# b -> u l nu +# +# 03/28/01 S.Menke included inclusive B -> X_u l nu decays for m(X_u) > 1.26 GeV. +# with some thresholds to gradually switch from excl. to incl. +# modeling without big jumps keeping the better known excl. +# Brs at their actual values and constrain the incl. Br and +# weights in a way that ~40% of the total BR belongs to +# the mass region > 1.5 GeV +# October 20, 2004 - Lange - update using sl awg input +# March 30, 2005 J. Dingfelder: Updated B -> X_u l nu hybrid model +# (supersedes older version by S. Menke). Inclusive +# decays are reweighted in three kinematic +# variables mX, q2, and El (=> 512 weights total). +# The list of weights is included as ModelAlias +# once per B charge state. +# NOTE: - The specified parameters for model VUBHYBRID are: +# mb, a, alpha_s, nbins_mX, nbins_q2, nbins_El, +# list of threshold values for mX, q2, El in ascending order. +# +# *** DO NOT CHANGE ANY OF THESE PARAMETERS! *** +# Otherwise a new set of weights would be needed, since they were +# generated for a certain set of values for mb, a, excl. BFs, non-res BF. +# +# - If no binning (nbins or thresholds) are specified after the first +# three parameters (mb,a,alpha_s) no hybrid weighting is performed. + +# --- Hybrid weights for neutral B -> Xu l nu decays +# NOTE: Do NOT CHANGE any BFs without using the corresponding set of +# hybrid weights (and vice versa). + +0.000145000 pi+ e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.000294000 rho+ e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.000000 D(2S)+ e- anti-nu_e PHOTOS ISGW2; +0.000000 D*(2S)+ e- anti-nu_e PHOTOS ISGW2; +0.001892 Xu+ e- anti-nu_e PHOTOS VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; +# +0.000145000 pi+ mu- anti-nu_mu PHOTOS ISGW2; # PDG2014 +0.000294000 rho+ mu- anti-nu_mu PHOTOS ISGW2; # PDG2014 +0.000000 D(2S)+ mu- anti-nu_mu PHOTOS ISGW2; +0.000000 D*(2S)+ mu- anti-nu_mu PHOTOS ISGW2; +0.001892 Xu+ mu- anti-nu_mu PHOTOS VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; +# +0.000060 pi+ tau- anti-nu_tau ISGW2; +0.000083 rho+ tau- anti-nu_tau ISGW2; +0.000090 a_1+ tau- anti-nu_tau ISGW2; +0.000008 b_1+ tau- anti-nu_tau ISGW2; +0.000008 a_0+ tau- anti-nu_tau ISGW2; +0.000008 a_2+ tau- anti-nu_tau ISGW2; +0.000000 rho(2S)+ tau- anti-nu_tau ISGW2; +0.000000 D(2S)+ tau- anti-nu_tau ISGW2; +0.000000 D*(2S)+ tau- anti-nu_tau ISGW2; +# + +# +# b->u hadronic +# Ref. [B1]: +# Lange Nov 14, 2004 (flip D_s K -- is opposite of D_s pi) +0.000024000 D_s- pi+ PHSP; #[Reconstructed PDG2011] +0.000030000 D_s+ K- PHSP; #[Reconstructed PDG2011] +0.000021000 D_s*- pi+ SVS; #[Reconstructed PDG2011] +0.000021900 D_s*+ K- SVS; #[Reconstructed PDG2011] +# +0.000016 rho+ D_s- SVS; +0.000035000 K*- D_s+ SVS; #[Reconstructed PDG2011] +0.000041000 D_s*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000032000 D_s*+ K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] + + +# +# b -> s gamma +# +0.000043300 anti-K*0 gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# PR LHCb add omega gamma +0.000000440 omega gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +#0.0000135 anti-K_10 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000065 anti-K'_10 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000128 anti-K'*0 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000166 anti-K_2*0 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000017 anti-K''*0 gamma HELAMP 1.0 0.0 1.0 0.0; +0.0003118 anti-Xsd gamma BTOXSGAMMA 2 ; +# +0.000000160 anti-K0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001030 anti-K*0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000050 anti-Xsd e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000450 anti-K0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001050 anti-K*0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000025 anti-Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.0000001 anti-K0 tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 anti-K*0 tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 anti-Xsd tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +# +#------------------------------------------------------------------------------ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv +# B0 -> CP eigenstates (some exclusive b -> u) sum=0.00036 +# +0.000005130 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000001620 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.0000010 pi0 eta PHSP; +0.000001200 pi0 eta' PHSP; #[Reconstructed PDG2011] +0.000001 pi0 a_00 PHSP; +0.000001 pi0 f_0 PHSP; +# pi0 rho0 is with the 3-body modes +0.000001 omega pi0 SVS; +0.000001 a_10 pi0 SVS; +0.000001 b_10 pi0 SVS; +0.000001 eta eta PHSP; +0.000001 eta eta' PHSP; +0.000001 eta a_00 PHSP; +0.000001 eta f_0 PHSP; +0.000001 rho0 eta SVS; +0.000000940 omega eta SVS; #[Reconstructed PDG2011] +0.000001 a_10 eta SVS; +0.000001 b_10 eta SVS; +0.000001 eta' eta' PHSP; +0.000001 eta' a_00 PHSP; +0.000001 eta' f_0 PHSP; +0.000001 rho0 eta' SVS; +0.000001000 omega eta' SVS; #[Reconstructed PDG2011] +0.000001 a_10 eta' SVS; +0.000001 b_10 eta' SVS; +0.000001 a_00 a_00 PHSP; +0.000001 a_00 f_0 PHSP; +0.000001 rho0 a_00 SVS; +0.000001 omega a_00 SVS; +0.000001 a_10 a_00 SVS; +0.000001 b_10 a_00 SVS; +0.000001 f_0 f_0 PHSP; +0.000001 rho0 f_0 SVS; +0.000001 omega f_0 SVS; +0.000001 a_10 f_0 SVS; +0.000001 b_10 f_0 SVS; + +# Penguin dominated modes are sin2beta, not sin2alpha +0.000004300 phi K_S0 SVS; #[Reconstructed PDG2011] +0.000004300 phi K_L0 SVS; #[Reconstructed PDG2011] +0.000000550 eta K_S0 PHSP; #[Reconstructed PDG2011] +0.000000550 eta K_L0 PHSP; #[Reconstructed PDG2011] +0.000033000 eta' K_S0 PHSP; #[Reconstructed PDG2011] +0.000033000 eta' K_L0 PHSP; #[Reconstructed PDG2011] +0.000002500 omega K_S0 SVS; #[Reconstructed PDG2011] +0.000002500 omega K_L0 SVS; #[Reconstructed PDG2011] +#don't allow jetset to simulate the same decay but to a K0 or anti-K0 +#Lange 1/30/2003 +0.0 phi K0 PHSP; +0.0 phi anti-K0 PHSP; +0.0 eta K0 PHSP; +0.0 eta anti-K0 PHSP; +0.0 eta' K0 PHSP; +0.0 eta' anti-K0 PHSP; +0.0 omega K0 PHSP; +0.0 omega anti-K0 PHSP; +# phipi0 has no simple Pengiun or tree so who knows - ditto phieta/eta'? +0.000001 phi pi0 SVS; +0.000001 phi eta SVS; +0.000001 phi eta' SVS; +# +0.000015900 anti-K*0 eta SVS; #[Reconstructed PDG2011] +0.000003800 anti-K*0 eta' SVS; #[Reconstructed PDG2011] +0.000002000 anti-K*0 omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000001 phi omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 omega omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 omega rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +# +# +#2-body modes from Jim Olsen +0.000019400 K- pi+ PHSP; #[Reconstructed PDG2011] +0.0000004 K+ K- PHSP; +# K_S0 K_L0 is 0 +# see http://babar-hn.slac.stanford.edu:5090/HyperNews/get/pubboard14/156.html +0.000000240 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.0000000 K_S0 K_L0 PHSP; +0.000000240 K_L0 K_L0 PHSP; #[Reconstructed PDG2011] +# declare K0 pi0 not to have it through Pythia +0.000000 anti-K0 pi0 PHSP; +# Split into K_S0 K_L0 (LHCb - P. Robbe) +0.000004750 K_S0 pi0 PHSP; #[Reconstructed PDG2011] +0.000004750 K_L0 pi0 PHSP; #[Reconstructed PDG2011] +# 0 to keep PYTHIA from generating it +0.000000 K0 anti-K0 PHSP; +# +# 3-body decays +# this model generates interferences and higher mass rho +# +# 3-body by John Back (jback@slac.stanford.edu) - Oct 15, 2002 +# JGS intersperses modes with pi0->eta,eta' +# anti-B0 modes +# Model generates rho(770), rho(1450) and rho(1700) resonances +# with interference (uses CKM angle alpha) +0.000024 pi- pi+ pi0 BTO3PI_CP dm alpha; +# Put in with 0 BR to keep PYTHIA from generating these (see BTO3PI_CP above) +0.000000 rho0 pi0 SVS; +0.000000 rho- pi+ SVS; +0.000000 rho+ pi- SVS; +0.000000 rho(2S)- pi+ SVS; +0.000000 rho(2S)+ pi- SVS; +0.000000 rho(3S)- pi+ SVS; +0.000000 rho(3S)+ pi- SVS; +# +# rho0 3-body modes +0.000002350 rho0 K_S0 SVS; #[Reconstructed PDG2011] +0.000002350 rho0 K_L0 SVS; #[Reconstructed PDG2011] +# +# rho+ 3-body modes +0.000008400 rho+ K- SVS; #[Reconstructed PDG2011] +# +# rho(1450) 3-body modes +0.0000005 rho(2S)0 K_S0 SVS; +0.0000005 rho(2S)0 K_L0 SVS; +# +# +# f0,a0(980) 3-body modes +0.0000055 f_0 anti-K0 PHSP; +0.000001 a_00 anti-K0 PHSP; +0.000001 a_0+ K- PHSP; +0.000003 a_0+ pi- PHSP; +0.000001 a_0- pi+ PHSP; +# +# K*0(892) 3-body modes +0.000003600 anti-K*0 pi0 SVS; #[Reconstructed PDG2011] +0.000003 anti-K*0 K0 SVS; +# +# K*0(1430) 3-body modes +0.000001 anti-K_0*0 pi0 PHSP; +0.000003 anti-K_0*0 K0 PHSP; +# +# K*0(1680) 3-body modes +0.000001 anti-K''*0 pi0 SVS; +0.000001 anti-K''*0 K0 SVS; + +# +# K*-(892) 3-body modes +0.000009400 K*- pi+ SVS; #[Reconstructed PDG2011] +0.000002 K*- K+ SVS; +# +# K*-(1430) 3-body modes +0.000033000 K_0*- pi+ PHSP; #[Reconstructed PDG2011] +0.000002 K_0*- K+ PHSP; +# +# K*0(1680) 3-body modes +0.000001 K''*- pi+ SVS; +0.000001 K''*- K+ SVS; +# +# +# Non-resonant 3-body left-overs +# Most modes are set at 1e-6 +# +# pi-pi+pi0: high mass + f0(400-1200) = (1+1)e-6 +####0402270.000002 pi- pi+ pi0 PHSP; +0.000017 pi- pi+ eta PHSP; +0.000001 pi- pi+ eta' PHSP; +# +# pi- pi+ anti-K0: total-rhoK0-f0K0-piK*(892)-piK*(1430)=45-5-6-13./3-11./3 +0.000000000 pi- pi+ anti-K0 PHSP; #[Reconstructed PDG2011] +# +# K- pi+ pi0 +0.000027500 K- pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.000020 K- pi+ eta PHSP; +0.000001 K- pi+ eta' PHSP; +# +# pi- K+ K0. +# Both B0 and B0bar can decay to these => 0.5e-6 each +0.0000005 pi- K+ anti-K0 PHSP; +0.0000005 pi+ K- K0 PHSP; +# +# K- K+ anti-K0 +# PR LHCb 09 Apr 2004 split into KL/KS +0.000000 K- K+ anti-K0 PHSP; +0.000012350 K- K+ K_S0 PHSP; #[Reconstructed PDG2011] +0.000012350 K- K+ K_L0 PHSP; #[Reconstructed PDG2011] +# +# K- K+ pi0 +0.000001 K- K+ pi0 PHSP; +0.000001 K- K+ eta PHSP; +0.000001 K- K+ eta' PHSP; +# +# pi0 anti-K0 K0 +0.000002 anti-K0 K0 pi0 PHSP; +0.000001 anti-K0 K0 eta PHSP; +0.000001 anti-K0 K0 eta' PHSP; +# +# pi0 pi0 anti-K0 +0.000002 anti-K0 pi0 pi0 PHSP; +0.000001 anti-K0 pi0 eta PHSP; +0.000001 anti-K0 pi0 eta' PHSP; +0.000001 anti-K0 eta eta PHSP; +0.000001 anti-K0 eta eta' PHSP; +0.000001 anti-K0 eta' eta' PHSP; +# +# anti-K0 K0 anti-K0: 8*BF(KsKsKs)~=48 (8 is a guess) +0.000048 anti-K0 K0 anti-K0 PHSP; +# +# pi0 pi0 pi0 +0.000001 pi0 pi0 pi0 PHSP; +0.000001 pi0 pi0 eta PHSP; +0.000001 pi0 pi0 eta' PHSP; +0.000001 pi0 eta eta PHSP; +0.000001 pi0 eta eta' PHSP; +# +#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#--------------------------------------------------------------------------- +# +#4-body modes from Andrei Gritsan +#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- +# PR LHCb 21 Apr 2004 : set polarisation to longitudinal +0.000000730 rho0 rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000024200 rho+ rho- SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000003 rho0 pi+ pi- PHSP; +0.000003 omega pi+ pi- PHSP; +0.000001 rho0 pi0 pi0 PHSP; +0.000001 omega pi0 pi0 PHSP; +0.0000005 rho0 pi0 eta PHSP; +0.0000002 rho0 eta eta PHSP; +0.0000002 rho0 pi0 eta' PHSP; +0.0000001 rho0 eta eta' PHSP; +0.0000005 omega pi0 eta PHSP; +0.0000002 omega eta eta PHSP; +0.0000002 omega pi0 eta' PHSP; +0.0000001 omega eta eta' PHSP; +0.000010 rho+ pi- pi0 PHSP; +0.000005 rho+ pi- eta PHSP; +0.000010 rho- pi+ pi0 PHSP; +0.000005 rho- pi+ eta PHSP; +0.000010 pi+ pi- pi+ pi- PHSP; +0.000010 pi+ pi- pi0 pi0 PHSP; +0.000005 pi+ pi- eta pi0 PHSP; +0.000002 pi+ pi- eta eta PHSP; +0.000002 pi+ pi- eta' pi0 PHSP; +0.000001 pi+ pi- eta' eta PHSP; +0.000016500 a_1+ pi- SVS; #[Reconstructed PDG2011] +0.000016500 a_1- pi+ SVS; #[Reconstructed PDG2011] +0.0000055 b_1+ pi- SVS; +0.0000055 b_1- pi+ SVS; +0.000002 rho- a_0+ SVS; +0.000010 rho+ a_0- SVS; +0.000001 f_0 pi+ pi- PHSP; +0.000001 f_0 pi0 pi0 PHSP; +0.000001 a_0- pi+ pi0 PHSP; +0.000001 a_00 pi0 pi0 PHSP; +0.000001 a_0+ pi- pi0 PHSP; +#--- 4-body rho-K*, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- +0.000003400 rho0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000010 rho+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000050600 pi- pi+ anti-K*0 PHSP; #[Reconstructed PDG2011] +0.000010 pi+ pi0 K*- PHSP; +0.000005 pi+ eta K*- PHSP; +0.000002 pi+ eta' K*- PHSP; +0.000010 rho+ K- pi0 PHSP; +0.000005 rho+ K- eta PHSP; +0.000002 rho+ K- eta' PHSP; +0.000010 rho+ anti-K0 pi- PHSP; +0.000010 rho- anti-K0 pi+ PHSP; +0.000005 rho0 anti-K0 pi0 PHSP; +0.000002 rho0 anti-K0 eta PHSP; +0.000001 rho0 anti-K0 eta' PHSP; +0.000010 rho0 K- pi+ PHSP; +0.000005 omega anti-K0 pi0 PHSP; +0.000002 omega anti-K0 eta PHSP; +0.000001 omega anti-K0 eta' PHSP; +0.000005100 omega K- pi+ PHSP; #[Reconstructed PDG2011] +0.000010 pi+ pi0 pi- anti-K0 PHSP; +0.000005 pi+ eta pi- anti-K0 PHSP; +0.000010 pi0 pi0 pi0 anti-K0 PHSP; +0.000005 pi0 pi0 eta anti-K0 PHSP; +0.000002 pi0 eta eta anti-K0 PHSP; +0.000002 pi0 pi0 eta' anti-K0 PHSP; +0.000001 pi0 eta eta' anti-K0 PHSP; +0.000010 pi+ pi- pi+ K- PHSP; +0.000010 pi0 pi0 pi+ K- PHSP; +0.000005 pi0 eta pi+ K- PHSP; +0.000002 eta eta pi+ K- PHSP; +0.000002 pi0 eta' pi+ K- PHSP; +0.000001 eta eta' pi+ K- PHSP; +0.000010 rho0 anti-K_0*0 PHSP; +0.000020 rho+ K_0*- PHSP; +0.000010 pi- pi+ anti-K_0*0 PHSP; +0.000010 pi0 pi0 anti-K_0*0 PHSP; +0.000010 pi+ pi0 K_0*- PHSP; +0.000005 anti-K*0 f_0 SVS; +0.000010 a_10 anti-K0 SVS; +0.000016000 a_1+ K- SVS; #[Reconstructed PDG2011] +0.000010 b_10 anti-K0 SVS; +0.0000074 b_1+ K- SVS; +0.000005 anti-K*0 a_00 SVS; +0.000005 K*- a_0+ SVS; +#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ +0.000001280 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000001 K*+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.0000001 phi rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.0000001 phi pi- pi+ PHSP; +0.000001 K+ K- rho0 PHSP; +0.000001 K0 anti-K0 rho0 PHSP; +0.000001 K+ K- omega PHSP; +0.000001 K0 anti-K0 omega PHSP; +0.000001 K+ anti-K0 rho- PHSP; +0.000001 K- K0 rho+ PHSP; +0.000001 K+ K- pi- pi+ PHSP; +0.000001 K+ K- pi0 pi0 PHSP; +0.0000005 K+ K- pi0 eta PHSP; +0.0000002 K+ K- eta eta PHSP; +0.0000002 K+ K- pi0 eta' PHSP; +0.0000001 K+ K- eta eta' PHSP; +0.000001 K0 anti-K0 pi- pi+ PHSP; +0.000001 K0 anti-K0 pi0 pi0 PHSP; +0.0000005 K0 anti-K0 pi0 eta PHSP; +0.0000002 K0 anti-K0 eta eta PHSP; +0.0000002 K0 anti-K0 pi0 eta' PHSP; +0.0000001 K0 anti-K0 eta eta' PHSP; +0.000001 K*+ K- pi0 PHSP; +0.000001 K*- K+ pi0 PHSP; +0.000001 K*0 anti-K0 pi0 PHSP; +0.000001 K0 anti-K*0 pi0 PHSP; +0.000003320 K+ anti-K*0 pi- PHSP; #[Reconstructed PDG2011] +0.000001 K*+ anti-K0 pi- PHSP; +0.0000033 K- K*0 pi+ PHSP; +0.000001 K*- K0 pi+ PHSP; +#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- +0.000009800 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000010 phi K- pi+ PHSP; +0.000010 phi anti-K0 pi0 PHSP; +0.000007 phi anti-K0 eta PHSP; +0.000017700 K- K+ anti-K*0 PHSP; #[Reconstructed PDG2011] +0.000010 K- K*+ anti-K0 PHSP; +0.000010 K*- K+ anti-K0 PHSP; +0.000010 K+ K- K- pi+ PHSP; +0.000010 K+ K- anti-K0 pi0 PHSP; +0.000005 K+ K- anti-K0 eta PHSP; +0.000010 K0 anti-K0 anti-K0 pi0 PHSP; +0.000005 K0 anti-K0 anti-K0 eta PHSP; +0.000003900 phi anti-K_0*0 PHSP; #[Reconstructed PDG2011] +0.000010 K- K+ anti-K_0*0 PHSP; +0.000010 K- K_0*+ anti-K0 PHSP; +0.000010 K_0*- K+ anti-K0 PHSP; +0.000002 phi anti-K'_10 PHSP; +0.000002 K- K+ anti-K'_10 PHSP; +#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- +0.0000001 phi phi SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.0000001 phi K+ K- PHSP; +0.0000001 phi K0 anti-K0 PHSP; +0.0000001 K+ K- K+ K- PHSP; +0.0000001 K0 anti-K0 K+ K- PHSP; +0.0000001 K0 anti-K0 K0 anti-K0 PHSP; +#5-body modes from Jim Smith - 1/30/05 +#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- +0.000010 rho0 rho0 pi0 PHSP; +0.000005 rho0 rho0 eta PHSP; +0.000002 rho0 rho0 eta' PHSP; +0.000010 omega rho0 pi0 PHSP; +0.000005 omega rho0 eta PHSP; +0.000002 omega rho0 eta' PHSP; +0.000010 rho+ rho- pi0 PHSP; +0.000005 rho+ rho- eta PHSP; +0.000002 rho+ rho- eta' PHSP; +0.000010 rho0 rho+ pi- PHSP; +0.000010 omega rho+ pi- PHSP; +0.000002 rho0 pi+ pi- pi0 PHSP; +0.000001 rho0 pi+ pi- eta PHSP; +0.000001 rho0 pi+ pi- eta' PHSP; +0.000002 rho0 pi0 pi0 pi0 PHSP; +0.000001 rho0 pi0 eta pi0 PHSP; +0.000001 rho0 pi0 eta' pi0 PHSP; +0.000002 omega pi+ pi- pi0 PHSP; +0.000001 omega pi+ pi- eta PHSP; +0.000001 omega pi+ pi- eta' PHSP; +0.000002 omega pi0 pi0 pi0 PHSP; +0.000001 omega pi0 eta pi0 PHSP; +0.000001 omega pi0 eta' pi0 PHSP; +0.000002 rho+ pi- pi+ pi- PHSP; +0.000002 rho+ pi- pi0 pi0 PHSP; +0.000001 rho+ pi- pi0 eta PHSP; +0.000001 rho+ pi- pi0 eta' PHSP; +0.000002 rho- pi+ pi+ pi- PHSP; +0.000002 rho- pi+ pi0 pi0 PHSP; +0.000001 rho- pi+ pi0 eta PHSP; +0.000001 rho- pi+ pi0 eta' PHSP; +0.000001 pi+ pi- pi+ pi- pi0 PHSP; +0.0000005 pi+ pi- pi+ pi- eta PHSP; +0.0000002 pi+ pi- pi+ pi- eta' PHSP; +0.000001 pi+ pi- pi0 pi0 pi0 PHSP; +0.0000005 pi+ pi- pi0 pi0 eta PHSP; +0.0000002 pi+ pi- pi0 pi0 eta' PHSP; +0.0000005 pi0 pi0 pi0 pi0 pi0 PHSP; +0.0000002 pi0 pi0 pi0 pi0 eta PHSP; +0.0000001 pi0 pi0 pi0 pi0 eta' PHSP; +0.000010 a_1+ rho- PHSP; +0.000010 a_1- rho+ PHSP; +0.000010 a_10 rho0 PHSP; +0.000010 a_10 omega PHSP; +0.000010 a_1+ pi- pi0 PHSP; +0.000005 a_1+ pi- eta PHSP; +0.000002 a_1+ pi- eta' PHSP; +0.000010 a_10 pi+ pi- PHSP; +0.000010 a_10 pi0 pi0 PHSP; +0.000005 a_10 pi0 eta PHSP; +0.000002 a_10 pi0 eta' PHSP; +0.000010 a_1- pi+ pi0 PHSP; +0.000005 a_1- pi+ eta PHSP; +0.000002 a_1- pi+ eta' PHSP; +0.000010 rho+ f_0 pi- PHSP; +0.000010 rho- f_0 pi+ PHSP; +0.000010 rho0 f_0 pi0 PHSP; +0.000005 rho0 f_0 eta PHSP; +0.000002 rho0 f_0 eta' PHSP; +0.000010 omega f_0 pi0 PHSP; +0.000010 rho+ a_00 pi- PHSP; +0.000010 rho+ a_0- pi0 PHSP; +0.000005 rho+ a_0- eta PHSP; +0.000002 rho+ a_0- eta' PHSP; +0.000010 rho0 a_0+ pi- PHSP; +0.000010 rho0 a_0- pi+ PHSP; +0.000010 rho0 a_00 pi0 PHSP; +0.000005 rho0 a_00 eta PHSP; +0.000002 rho0 a_00 eta' PHSP; +0.000010 rho- a_00 pi+ PHSP; +0.000010 rho- a_0+ pi0 PHSP; +0.000005 rho- a_0+ eta PHSP; +0.000002 rho- a_0+ eta' PHSP; +0.000002 f_0 pi+ pi- pi0 PHSP; +0.000001 f_0 pi+ pi- eta PHSP; +0.000001 f_0 pi+ pi- eta' PHSP; +0.000002 f_0 pi0 pi0 pi0 PHSP; +0.000001 f_0 pi0 pi0 eta PHSP; +0.000001 f_0 pi0 pi0 eta' PHSP; +0.000001 a_00 pi+ pi- pi0 PHSP; +0.000001 a_00 pi0 pi0 pi0 PHSP; +0.000001 a_0+ pi- pi+ pi- PHSP; +0.000001 a_0+ pi- pi0 pi0 PHSP; +0.000001 a_0- pi+ pi+ pi- PHSP; +0.000001 a_0- pi+ pi0 pi0 PHSP; +#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- +0.000010 rho0 K*- pi+ PHSP; +0.000010 rho+ K*- pi0 PHSP; +0.000005 rho+ K*- eta PHSP; +0.000002 rho+ K*- eta' PHSP; +0.000010 rho0 anti-K*0 pi0 PHSP; +0.000005 rho0 anti-K*0 eta PHSP; +0.000002 rho0 anti-K*0 eta' PHSP; +0.000010 rho- anti-K*0 pi+ PHSP; +0.000010 rho+ anti-K*0 pi- PHSP; +0.000010 omega K*- pi+ PHSP; +0.000010 omega anti-K*0 pi0 PHSP; +0.000005 omega anti-K*0 eta PHSP; +0.000002 omega anti-K*0 eta' PHSP; +0.000010 pi+ pi- K*- pi+ PHSP; +0.000010 pi+ pi0 K*- pi0 PHSP; +0.000005 pi+ pi0 K*- eta PHSP; +0.000002 pi+ pi0 K*- eta' PHSP; +0.000010 pi+ pi- anti-K*0 pi0 PHSP; +0.000005 pi+ pi- anti-K*0 eta PHSP; +0.000002 pi+ pi- anti-K*0 eta' PHSP; +0.000010 pi0 pi0 anti-K*0 pi0 PHSP; +0.000005 pi0 pi0 anti-K*0 eta PHSP; +0.000002 pi0 pi0 anti-K*0 eta' PHSP; +0.000010 rho- K- pi+ pi+ PHSP; +0.000010 rho0 K- pi+ pi0 PHSP; +0.000005 rho0 K- pi+ eta PHSP; +0.000002 rho0 K- pi+ eta' PHSP; +0.000010 rho+ K- pi+ pi- PHSP; +0.000010 rho+ K- pi0 pi0 PHSP; +0.000005 rho+ K- pi0 eta PHSP; +0.000002 rho+ K- pi0 eta' PHSP; + +0.000010 rho0 anti-K0 pi+ pi- PHSP; +0.000010 rho0 anti-K0 pi0 pi0 PHSP; +0.000005 rho0 anti-K0 pi0 eta PHSP; +0.000002 rho0 anti-K0 pi0 eta' PHSP; +0.000010 rho- anti-K0 pi+ pi0 PHSP; +0.000005 rho- anti-K0 pi+ eta PHSP; +0.000002 rho- anti-K0 pi+ eta' PHSP; +0.000010 rho+ anti-K0 pi- pi0 PHSP; +0.000005 rho+ anti-K0 pi- eta PHSP; +0.000002 rho+ anti-K0 pi- eta' PHSP; +0.000010 omega K- pi+ pi0 PHSP; +0.000005 omega K- pi+ eta PHSP; +0.000002 omega K- pi+ eta' PHSP; +0.000010 omega anti-K0 pi+ pi- PHSP; +0.000010 omega anti-K0 pi0 pi0 PHSP; +0.000005 omega anti-K0 pi0 eta PHSP; +0.000002 omega anti-K0 pi0 eta' PHSP; +0.000002 pi+ pi- pi+ K- pi0 PHSP; +0.000001 pi+ pi- pi+ K- eta PHSP; +0.000001 pi+ pi- pi+ K- eta' PHSP; +0.000002 pi0 pi0 pi+ K- pi0 PHSP; +0.000001 pi0 pi0 pi+ K- eta PHSP; +0.000001 pi0 pi0 pi+ K- eta' PHSP; +0.000002 pi+ pi- pi+ anti-K0 pi- PHSP; +0.000002 pi+ pi- pi0 anti-K0 pi0 PHSP; +0.000001 pi+ pi- pi0 anti-K0 eta PHSP; +0.000001 pi+ pi- pi0 anti-K0 eta' PHSP; +0.000002 pi0 pi0 pi0 anti-K0 pi0 PHSP; +0.000001 pi0 pi0 pi0 anti-K0 eta PHSP; +0.000001 pi0 pi0 pi0 anti-K0 eta' PHSP; +0.000010 rho+ anti-K_0*0 pi- PHSP; +0.000010 rho0 anti-K_0*0 pi0 PHSP; +0.000005 rho0 anti-K_0*0 eta PHSP; +0.000002 rho0 anti-K_0*0 eta' PHSP; +0.000010 rho- anti-K_0*0 pi+ PHSP; +0.000010 rho+ K_0*- pi0 PHSP; +0.000005 rho+ K_0*- eta PHSP; +0.000002 rho+ K_0*- eta' PHSP; +0.000010 rho0 K_0*- pi+ PHSP; +0.000010 pi+ pi- K_0*- pi+ PHSP; +0.000010 pi+ pi0 K_0*- pi0 PHSP; +0.000005 pi+ pi0 K_0*- eta PHSP; +0.000002 pi+ pi0 K_0*- eta' PHSP; +0.000010 pi+ pi- anti-K_0*0 pi0 PHSP; +0.000005 pi+ pi- anti-K_0*0 eta PHSP; +0.000002 pi+ pi- anti-K_0*0 eta' PHSP; +0.000010 pi0 pi0 anti-K_0*0 pi0 PHSP; +0.000005 pi0 pi0 anti-K_0*0 eta PHSP; +0.000005 pi0 pi0 anti-K_0*0 eta' PHSP; +0.000010 K*- f_0 pi+ PHSP; +0.000010 anti-K*0 f_0 pi0 PHSP; +0.000005 anti-K*0 f_0 eta PHSP; +0.000002 anti-K*0 f_0 eta' PHSP; +0.000010 a_1+ anti-K0 pi- PHSP; +0.000020 a_10 anti-K*0 PHSP; +0.000010 a_10 K- pi+ PHSP; +0.000010 a_10 anti-K0 pi0 PHSP; +0.000020 a_1+ K*- PHSP; +0.000010 a_1+ K- pi0 PHSP; +0.000010 a_1- anti-K0 pi+ PHSP; +0.000005 K*- a_00 pi+ PHSP; +0.000005 K*- a_0+ pi0 PHSP; +0.000002 K*- a_0+ eta PHSP; +0.000001 K*- a_0+ eta' PHSP; +0.000005 anti-K*0 a_0+ pi- PHSP; +0.000005 anti-K*0 a_00 pi0 PHSP; +0.000002 anti-K*0 a_00 eta PHSP; +0.000001 anti-K*0 a_00 eta' PHSP; +#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ +0.000001 K*- K*0 pi+ PHSP; +0.000001 K*+ anti-K*0 pi- PHSP; +0.000001 K*- K*+ pi0 PHSP; +0.0000005 K*- K*+ eta PHSP; +0.0000002 K*- K*+ eta' PHSP; +0.000001 K*0 anti-K*0 pi0 PHSP; +0.0000005 K*0 anti-K*0 eta PHSP; +0.0000002 K*0 anti-K*0 eta' PHSP; +0.000001 phi rho+ pi- PHSP; +0.000001 phi rho- pi+ PHSP; +0.000001 phi rho0 pi0 PHSP; +0.0000005 phi rho0 eta PHSP; +0.0000002 phi rho0 eta' PHSP; +0.000001 phi omega pi0 PHSP; +0.000001 phi f_0 pi0 PHSP; +0.000001 phi pi+ pi- pi0 PHSP; +0.0000005 phi pi+ pi- eta PHSP; +0.0000002 phi pi+ pi- eta' PHSP; +0.000001 phi pi0 pi0 pi0 PHSP; +0.0000005 phi pi0 pi0 eta PHSP; +0.0000002 phi pi0 pi0 eta' PHSP; +0.000001 K0 K- rho0 pi+ PHSP; +0.000001 K0 K- rho+ pi0 PHSP; +0.0000005 K0 K- rho+ eta PHSP; +0.0000002 K0 K- rho+ eta' PHSP; +0.000001 K0 K- omega pi+ PHSP; +0.000001 K0 K- f_0 pi+ PHSP; +0.000001 K+ K- rho+ pi- PHSP; +0.000001 K+ K- rho- pi+ PHSP; +0.000001 K+ K- rho0 pi0 PHSP; +0.0000005 K+ K- rho0 eta PHSP; +0.0000002 K+ K- rho0 eta' PHSP; +0.000001 K+ K- omega pi0 PHSP; +0.0000005 K+ K- omega eta PHSP; +0.0000002 K+ K- omega eta' PHSP; +0.000001 K+ K- f_0 pi0 PHSP; +0.000001 K0 anti-K0 rho+ pi- PHSP; +0.000001 K0 anti-K0 rho- pi+ PHSP; +0.000001 K0 anti-K0 rho0 pi0 PHSP; +0.0000005 K0 anti-K0 rho0 eta PHSP; +0.0000002 K0 anti-K0 rho0 eta' PHSP; +0.000001 K0 anti-K0 omega pi0 PHSP; +0.000001 K0 anti-K0 f_0 pi0 PHSP; +0.000001 anti-K0 K+ rho0 pi- PHSP; +0.000001 anti-K0 K+ rho- pi0 PHSP; +0.0000005 anti-K0 K+ rho- eta PHSP; +0.0000002 anti-K0 K+ rho- eta' PHSP; +0.000001 anti-K0 K+ omega pi- PHSP; +0.000001 anti-K0 K+ f_0 pi- PHSP; +0.0000002 K0 K- pi+ pi+ pi- PHSP; +0.0000002 K0 K- pi+ pi0 pi0 PHSP; +0.0000001 K0 K- pi+ pi0 eta PHSP; +0.0000001 K0 K- pi+ pi0 eta' PHSP; +0.0000002 K+ K- pi+ pi- pi0 PHSP; +0.0000001 K+ K- pi+ pi- eta PHSP; +0.0000001 K+ K- pi+ pi- eta' PHSP; +0.0000002 K+ K- pi0 pi0 pi0 PHSP; +0.0000001 K+ K- pi0 pi0 eta PHSP; +0.0000001 K+ K- pi0 pi0 eta' PHSP; +0.0000002 K0 anti-K0 pi+ pi- pi0 PHSP; +0.0000001 K0 anti-K0 pi+ pi- eta PHSP; +0.0000001 K0 anti-K0 pi+ pi- eta' PHSP; +0.0000002 K0 anti-K0 pi0 pi0 pi0 PHSP; +0.0000001 K0 anti-K0 pi0 pi0 eta PHSP; +0.0000001 K0 anti-K0 pi0 pi0 eta' PHSP; +0.0000002 anti-K0 K+ pi- pi+ pi- PHSP; +0.0000002 anti-K0 K+ pi- pi0 pi0 PHSP; +0.0000001 anti-K0 K+ pi- pi0 eta PHSP; +0.0000001 anti-K0 K+ pi- pi0 eta' PHSP; +0.000001 K*0 K- pi+ pi0 PHSP; +0.0000005 K*0 K- pi+ eta PHSP; +0.0000002 K*0 K- pi+ eta' PHSP; +0.000001 K*- K0 pi+ pi0 PHSP; +0.0000005 K*- K0 pi+ eta PHSP; +0.0000002 K*- K0 pi+ eta' PHSP; +0.000001 K*+ K- pi+ pi- PHSP; +0.000001 K*+ K- pi0 pi0 PHSP; +0.0000005 K*+ K- pi0 eta PHSP; +0.0000002 K*+ K- pi0 eta' PHSP; +0.000001 K*- K+ pi+ pi- PHSP; +0.000001 K*- K+ pi0 pi0 PHSP; +0.0000005 K*- K+ pi0 eta PHSP; +0.0000002 K*- K+ pi0 eta' PHSP; +0.000001 K*0 anti-K0 pi+ pi- PHSP; +0.000001 K*0 anti-K0 pi0 pi0 PHSP; +0.0000005 K*0 anti-K0 pi0 eta PHSP; +0.0000002 K*0 anti-K0 pi0 eta' PHSP; +0.000001 K0 anti-K*0 pi+ pi- PHSP; +0.000001 K0 anti-K*0 pi0 pi0 PHSP; +0.0000005 K0 anti-K*0 pi0 eta PHSP; +0.0000002 K0 anti-K*0 pi0 eta' PHSP; +0.000001 K+ anti-K*0 pi- pi0 PHSP; +0.0000005 K+ anti-K*0 pi- eta PHSP; +0.0000002 K+ anti-K*0 pi- eta' PHSP; +0.000001 K*+ anti-K0 pi- pi0 PHSP; +0.0000005 K*+ anti-K0 pi- eta PHSP; +0.0000002 K*+ anti-K0 pi- eta' PHSP; +#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- +0.000010 phi K*- pi+ PHSP; +0.000010 phi anti-K*0 pi0 PHSP; +0.000005 phi anti-K*0 eta PHSP; +0.000002 phi anti-K*0 eta' PHSP; +0.000010 phi K- rho+ PHSP; +0.000010 phi anti-K0 rho0 PHSP; +0.000010 phi anti-K0 omega PHSP; +0.000010 phi anti-K0 f_0 PHSP; +0.000010 phi anti-K0 pi+ pi- PHSP; +0.000010 phi anti-K0 pi0 pi0 PHSP; +0.000005 phi anti-K0 pi0 eta PHSP; +0.000002 phi anti-K0 pi0 eta' PHSP; +0.000010 phi K- pi+ pi0 PHSP; +0.000005 phi K- pi+ eta PHSP; +0.000002 phi K- pi+ eta' PHSP; +0.000010 K+ K- K*- pi+ PHSP; +0.000010 K- K*+ K- pi+ PHSP; +0.000010 K- K*0 anti-K0 pi+ PHSP; +0.000010 K- K0 anti-K*0 pi+ PHSP; +0.000010 K0 K*- anti-K0 pi+ PHSP; +0.000010 K- K+ K- rho+ PHSP; +0.000010 K- K+ anti-K0 rho0 PHSP; +0.000010 K- K+ anti-K0 omega PHSP; +0.000010 K- K+ anti-K0 f_0 PHSP; +0.000010 K+ K- K- pi+ pi0 PHSP; +0.000005 K+ K- K- pi+ eta PHSP; +0.000002 K+ K- K- pi+ eta' PHSP; +0.000010 K+ K- anti-K0 pi+ pi- PHSP; +0.000010 K+ K- anti-K0 pi0 pi0 PHSP; +0.000005 K+ K- anti-K0 pi0 eta PHSP; +0.000005 K+ K- anti-K0 pi0 eta' PHSP; +0.000010 K0 anti-K0 K- pi+ pi0 PHSP; +0.000005 K0 anti-K0 K- pi+ eta PHSP; +0.000002 K0 anti-K0 K- pi+ eta' PHSP; +0.000010 K0 anti-K0 anti-K0 pi+ pi- PHSP; +0.000010 K0 anti-K0 anti-K0 pi0 pi0 PHSP; +0.000005 K0 anti-K0 anti-K0 pi0 eta PHSP; +0.000002 K0 anti-K0 anti-K0 pi0 eta' PHSP; +0.000010 phi K_0*- pi+ PHSP; +0.000010 phi anti-K_0*0 pi0 PHSP; +0.000010 K+ K- K_0*- pi+ PHSP; +0.000010 K+ K- anti-K_0*0 pi0 PHSP; +0.000005 K+ K- anti-K_0*0 eta PHSP; +0.000002 K+ K- anti-K_0*0 eta' PHSP; +0.000010 K- K- K_0*+ pi+ PHSP; +0.000010 K- anti-K_0*0 K0 pi+ PHSP; +0.000010 K- K_0*0 anti-K0 pi+ PHSP; +0.000010 K0 anti-K0 K_0*- pi+ PHSP; +0.000010 K0 anti-K0 anti-K_0*0 pi0 PHSP; +0.000005 K0 anti-K0 anti-K_0*0 eta PHSP; +0.000002 K0 anti-K0 anti-K_0*0 eta' PHSP; +0.000010 anti-K0 anti-K0 K_0*0 pi0 PHSP; +0.000005 anti-K0 anti-K0 K_0*0 eta PHSP; +0.000002 anti-K0 anti-K0 K_0*0 eta' PHSP; +0.000002 phi K'_1- pi+ PHSP; +0.000002 phi anti-K'_10 pi0 PHSP; +0.000001 phi anti-K'_10 eta PHSP; +0.000001 phi anti-K'_10 eta' PHSP; +0.000002 K- K+ K'_1- pi+ PHSP; +0.000002 K- K+ anti-K'_10 pi0 PHSP; +0.000001 K- K+ anti-K'_10 eta PHSP; +0.000001 K- K+ anti-K'_10 eta' PHSP; +0.000002 K- K- K'_1+ pi+ PHSP; +0.000002 K0 anti-K0 anti-K'_10 pi0 PHSP; +0.000001 K0 anti-K0 anti-K'_10 eta PHSP; +0.000001 K0 anti-K0 anti-K'_10 eta' PHSP; +0.000002 anti-K0 anti-K0 K'_10 pi0 PHSP; +0.000001 anti-K0 anti-K0 K'_10 eta PHSP; +0.000001 anti-K0 anti-K0 K'_10 eta' PHSP; +#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ +0.000004100 phi phi anti-K0 PHSP; #[Reconstructed PDG2011] +0.0000001 phi phi pi0 PHSP; +0.000001 phi K+ K- anti-K0 PHSP; +0.000001 phi K0 anti-K0 anti-K0 PHSP; +0.0000001 phi K+ K- pi0 PHSP; +0.0000001 phi K0 anti-K0 pi0 PHSP; +0.0000001 phi anti-K0 K+ pi- PHSP; +0.0000001 phi K0 K- pi+ PHSP; +0.0000001 K+ K- K+ K- anti-K0 PHSP; +0.0000001 K0 anti-K0 K+ K- anti-K0 PHSP; +0.0000001 K+ K- K+ K- pi0 PHSP; +0.0000001 K+ K- K0 anti-K0 pi0 PHSP; +0.0000001 K+ K- K+ anti-K0 pi- PHSP; +0.0000001 K+ K- K0 K- pi+ PHSP; +0.0000001 K0 anti-K0 K0 anti-K0 pi0 PHSP; +0.0000001 K0 anti-K0 anti-K0 K+ pi- PHSP; +0.0000001 K0 anti-K0 K0 K- pi+ PHSP; +#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ +0.000003 phi phi anti-K*0 PHSP; +0.000001 phi K+ K- anti-K*0 PHSP; +0.000001 phi K0 anti-K0 anti-K*0 PHSP; +0.000001 phi anti-K0 K- K*+ PHSP; +0.000001 phi anti-K0 anti-K0 K*0 PHSP; +0.0000001 phi K+ K- K- pi+ PHSP; +0.0000001 phi K+ K- anti-K0 pi0 PHSP; +0.0000001 phi K0 anti-K0 K- pi+ PHSP; +0.0000001 phi K0 anti-K0 anti-K0 pi0 PHSP; +#--- 6-body a1a1 ------------ +0.000050 a_10 a_10 PHSP; +0.000050 a_1+ a_1- PHSP; +# +# PR LHCb: 7 Nov 2005 Add anti-K*0 pi0 pi0 +0.0000067 anti-K*0 pi0 pi0 PHSP; +# +# B -> cc= s +# +# Charmonium states - updated from Lange's recommendations (august 23,2000) +# Based on new BABAR results I'm making the following changes (Lange, March 13, 2001 +# J/psi K0 was 10, now 9 x 10^-4 +# J/psi pi0 was 2.5, now 2.0 x 10^-4 +# J/psi Kstar was 15, now 13 +# Fix chic1 KS CP eigenstate +# adding J/psi rho and omega - for lack of better thing will use the Kstar helicity amplitudes. +# Psi2sKs 30 ->31 +# chic1 Kstar: 12 ->6 +0.000435500 J/psi K_S0 SVS; #[Reconstructed PDG2011] +0.000435500 J/psi K_L0 SVS; #[Reconstructed PDG2011] +# +# +0.001330000 J/psi anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.000017600 J/psi pi0 SVS; #[Reconstructed PDG2011] +0.000027000 J/psi rho0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.000030 J/psi omega SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; +0.000000000 J/psi K- pi+ PHSP; #[Reconstructed PDG2011] +0.0001 J/psi anti-K0 pi0 PHSP; +#rl0.0007 J/psi anti-K0 pi+ pi- PHSP; +#rl0.00035 J/psi anti-K0 pi0 pi0 PHSP; +#rl0.00035 J/psi K- pi+ pi0 PHSP; +0.001300000 J/psi anti-K_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] +0.0001 J/psi anti-K'_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; +0.0005 J/psi anti-K_2*0 PHSP; +0.000094000 J/psi phi anti-K0 PHSP; #[Reconstructed PDG2011] +# +0.000310000 psi(2S) K_S0 SVS; #[Reconstructed PDG2011] +0.000310000 psi(2S) K_L0 SVS; #[Reconstructed PDG2011] +# +# +0.000610000 psi(2S) anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] + +0.0004 psi(2S) K- pi+ PHSP; +0.0002 psi(2S) anti-K0 pi0 PHSP; +0.0002 psi(2S) anti-K0 pi+ pi- PHSP; +0.0001 psi(2S) anti-K0 pi0 pi0 PHSP; +0.0001 psi(2S) K- pi+ pi0 PHSP; +0.0004 psi(2S) anti-K_10 PHSP; + +# +0.000445000 eta_c K_S0 PHSP; #[Reconstructed PDG2011] +0.000445000 eta_c K_L0 PHSP; #[Reconstructed PDG2011] +# +# +0.000610000 anti-K*0 eta_c SVS; #[Reconstructed PDG2011] +0.0002 eta_c K- pi+ PHSP; +0.0001 eta_c anti-K0 pi0 PHSP; +0.0002 eta_c anti-K0 pi+ pi- PHSP; +0.0001 eta_c anti-K0 pi0 pi0 PHSP; +0.0001 eta_c K- pi+ pi0 PHSP; +# +0.00024 eta_c(2S) K_S0 PHSP; +0.00024 eta_c(2S) K_L0 PHSP; +# +# +0.00066 anti-K*0 eta_c(2S) SVS; +0.00008 eta_c(2S) K- pi+ PHSP; +0.00005 eta_c(2S) anti-K0 pi0 PHSP; +0.00008 eta_c(2S) anti-K0 pi+ pi- PHSP; +0.00005 eta_c(2S) anti-K0 pi0 pi0 PHSP; +0.00005 eta_c(2S) K- pi+ pi0 PHSP; +# +0.000070000 chi_c0 K_S0 PHSP; #[Reconstructed PDG2011] +0.000070000 chi_c0 K_L0 PHSP; #[Reconstructed PDG2011] +# +# +0.00030 anti-K*0 chi_c0 SVS; +0.0002 chi_c0 K- pi+ PHSP; +0.0001 chi_c0 anti-K0 pi0 PHSP; +0.0002 chi_c0 anti-K0 pi+ pi- PHSP; +0.0001 chi_c0 anti-K0 pi0 pi0 PHSP; +0.0001 chi_c0 K- pi+ pi0 PHSP; +# +0.000195000 chi_c1 K_S0 SVS; #[Reconstructed PDG2011] +0.000195000 chi_c1 K_L0 SVS; #[Reconstructed PDG2011] +# +# +0.000222000 chi_c1 anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.0004 chi_c1 K- pi+ PHSP; +0.0002 chi_c1 anti-K0 pi0 PHSP; +0.0004 chi_c1 anti-K0 pi+ pi- PHSP; +0.0002 chi_c1 anti-K0 pi0 pi0 PHSP; +0.0002 chi_c1 K- pi+ pi0 PHSP; +# +0.00005 chi_c2 K_S0 STS; +0.00005 chi_c2 K_L0 STS; +# +# +0.00003 chi_c2 anti-K*0 PHSP; +0.0002 chi_c2 K- pi+ PHSP; +0.0001 chi_c2 anti-K0 pi0 PHSP; +0.0002 chi_c2 anti-K0 pi+ pi- PHSP; +0.0001 chi_c2 anti-K0 pi0 pi0 PHSP; +0.0001 chi_c2 K- pi+ pi0 PHSP; +# +0.00024 psi(3770) K_S0 SVS; +0.00024 psi(3770) K_L0 SVS; +# +# +0.00048 psi(3770) anti-K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; +0.00014 psi(3770) K- pi+ PHSP; +0.00014 psi(3770) anti-K0 pi0 PHSP; +0.00014 psi(3770) anti-K0 pi+ pi- PHSP; +0.00007 psi(3770) anti-K0 pi0 pi0 PHSP; +0.00007 psi(3770) K- pi+ pi0 PHSP; +0.00029 psi(3770) anti-K_10 PHSP; +# +# b-> c (dc=) +# +0.000211000 D- D+ PHSP; #[Reconstructed PDG2011] +# See Ref [B1] for the next 3: +0.000305 D*+ D- SVS; +0.000610000 D*- D+ SVS; #[Reconstructed PDG2011] +0.000820000 D*+ D*- SVV_HELAMP 0.47 0.0 0.96 0.0 0.56 0.0; #[Reconstructed PDG2011] + +# +# b -> c (sc=) --> D Ds X Sum = 10% +# +0.007200000 D+ D_s- PHSP; #[Reconstructed PDG2011] +0.008000000 D*+ D_s- SVS; #[Reconstructed PDG2011] +0.007400000 D_s*- D+ SVS; #[Reconstructed PDG2011] +0.017700000 D*+ D_s*- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] +0.0006 D'_1+ D_s- SVS; +0.0012 D'_1+ D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0012 D_1+ D_s- SVS; +0.0024 D_1+ D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0042 D_2*+ D_s- STS; +0.0040 D_2*+ D_s*- PHSP; +# +0.0018 D_s- D+ pi0 PHSP; +0.0037 D_s- D0 pi+ PHSP; +0.0018 D_s*- D+ pi0 PHSP; +0.0037 D_s*- D0 pi+ PHSP; +0.0030 D_s- D+ pi+ pi- PHSP; +0.0022 D_s- D+ pi0 pi0 PHSP; +0.0022 D_s- D0 pi+ pi0 PHSP; +0.0030 D_s*- D+ pi+ pi- PHSP; +0.0022 D_s*- D+ pi0 pi0 PHSP; +0.0022 D_s*- D0 pi+ pi0 PHSP; +# +# b -> c (sc=) --> D D= K X Sum = 8% +# Update: Ref. [B1] +# +# External W-emission amplitude +0.001700000 D+ anti-D0 K- PHSP; #[Reconstructed PDG2011] +0.004600000 D+ anti-D*0 K- PHSP; #[Reconstructed PDG2011] +0.003100000 D*+ anti-D0 K- PHSP; #[Reconstructed PDG2011] +0.011800000 D*+ anti-D*0 K- PHSP; #[Reconstructed PDG2011] +# External+internal W-emission amplitude +0.0015 D+ D- anti-K0 PHSP; +0.0018 D*+ D- anti-K0 PHSP; +0.0047 D+ D*- anti-K0 PHSP; +0.007800000 D*+ D*- anti-K0 PHSP; #[Reconstructed PDG2011] +# Internal W-emission amplitude (color suppressed modes) +0.0005 D0 anti-D0 anti-K0 PHSP; +0.000120000 D*0 anti-D0 anti-K0 PHSP; #[Reconstructed PDG2011] +0.0015 D0 anti-D*0 anti-K0 PHSP; +0.0015 D*0 anti-D*0 anti-K0 PHSP; + +0.0025 D+ anti-D0 K*- PHSP; +0.0025 D*+ anti-D0 K*- PHSP; +0.0025 D+ anti-D*0 K*- PHSP; +0.0050 D*+ anti-D*0 K*- PHSP; +# +0.0025 D+ D- anti-K*0 PHSP; +0.0025 D*+ D- anti-K*0 PHSP; +0.0025 D+ D*- anti-K*0 PHSP; +0.0050 D*+ D*- anti-K*0 PHSP; +# +0.0005 anti-D0 D0 anti-K*0 PHSP; +0.0005 anti-D0 D*0 anti-K*0 PHSP; +0.0005 anti-D*0 D0 anti-K*0 PHSP; +0.0010 anti-D*0 D*0 anti-K*0 PHSP; +# +# +# B -> D(*) X Exclusive modes +# +0.002760000 D*+ pi- SVS; #[Reconstructed PDG2011] +0.002680000 D+ pi- PHSP; #[Reconstructed PDG2011] +0.007110000 rho- D+ SVS; #[Reconstructed PDG2011] +# +# D* rho HELAMP parameters taken from ICHEP 98-852. +0.006800000 rho- D*+ SVV_HELAMP 0.152 1.47 0.936 0 0.317 0.19; #[Reconstructed PDG2011] +0.0005 D+ pi- pi0 PHSP; +0.008200000 D*+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000840000 D0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000620000 D*0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.0005 D*0 pi0 pi0 PHSP; +# +# D a1 updated Ref. [B1] +0.006000000 a_1- D+ SVS; #[Reconstructed PDG2011] +0.000000000 D+ rho0 pi- PHSP; #[Reconstructed PDG2011] +0.0011 D+ rho- pi0 PHSP; +0.002000000 D+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.0010 D+ pi0 pi- pi0 PHSP; +0.0010 D0 pi+ pi- pi0 PHSP; +0.0001 D0 pi0 pi0 pi0 PHSP; +# +# SVV_HELAMP for D* a1 taken from factorization. Recommandation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: +# updated Ref. [B1] +# October 26, 2004 Lange update +# Dec 7 2015, MK update with PDG2015, details see corresponding B0 +0.011000000 D*+ a_1- SVV_HELAMP 0.200 0.0 0.866 0.0 0.458 0.0; #[Reconstructed PDG2011] +# +0.001600000 D*+ rho0 pi- PHSP; #[Reconstructed PDG2011] +0.0010 D*+ rho- pi0 PHSP; +0.0005 D*+ pi+ pi- pi- PHSP; +0.0010 D*+ pi0 pi- pi0 PHSP; +0.0010 D*0 pi+ pi- pi0 PHSP; +0.0001 D*0 pi0 pi0 pi0 PHSP; +# +# B->D** pi and D** rho, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html +#further updates October 26, 2004 - Lange +# October 26, 2004 Lange update +# +0.0001 D_1+ pi- SVS; +0.0001 D'_1+ pi- SVS; +0.00006 D_0*+ pi- PHSP; +0.000215 D_2*+ pi- STS; +0.0004 D_1+ rho- PHSP; +0.0013 D'_1+ rho- PHSP; +0.0022 D_2*+ rho- PHSP; +# +# +# B->DK, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: +# update: Ref. [B1]: +# +0.000214000 D*+ K- SVS; #[Reconstructed PDG2011] +0.000200000 D+ K- PHSP; #[Reconstructed PDG2011] +0.000330000 D*+ K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; #[Reconstructed PDG2011] +0.000450000 K*- D+ SVS; #[Reconstructed PDG2011] +#more DK modes - October 26, 2004 -Lange +0.000036 D*0 K0 SVS; +0.000052 D0 K0 PHSP; +0.000042000 anti-K*0 D0 SVS; #[Reconstructed PDG2011] +0.00001 anti-K*0 anti-D0 SVS; +0.00004 D*0 anti-K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; +0.00001 anti-D*0 anti-K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; +# +# +# Color-suppressed modes. Br's are expectations from +# Phys. Rev. D57 (1998), 5363-5369, except for the eta' modes, which are set +# equal to the eta modes. SVV_HELAMP parameters are the same as in D*0 rho-, +# with phases set to 0. Recommendation http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/169.html: +# update: See Ref [B1]: +# further update October 26, 2004 Lange +# +0.000261000 D0 pi0 PHSP; #[Reconstructed PDG2011] +0.000170000 D*0 pi0 SVS; #[Reconstructed PDG2011] +# +0.000320000 rho0 D0 SVS; #[Reconstructed PDG2011] +0.00029 D*0 rho0 SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; +# +0.000202000 D0 eta PHSP; #[Reconstructed PDG2011] +0.000200000 D*0 eta SVS; #[Reconstructed PDG2011] +# +0.000125 D0 eta' PHSP; +0.000123000 D*0 eta' SVS; #[Reconstructed PDG2011] +# +0.000259000 omega D0 SVS; #[Reconstructed PDG2011] +0.000330000 D*0 omega SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; #[Reconstructed PDG2011] +# +# +#October 26, 2004 - Lange +0.0016 D_s0*- D+ PHSP; +0.0015 D*+ D_s0*- SVS; +0.003500000 D_s1- D+ SVS; #[Reconstructed PDG2011] +0.009300000 D*+ D_s1- SVV_HELAMP 0.4904 0. 0.7204 0. 0.4904 0.; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00088 D+ K- anti-K*0 PHSP; +0.00129 D*+ K- anti-K*0 PHSP; +# +# Feb 2009 +# +0.002800000 D+ omega pi- PHSP; #[Reconstructed PDG2011] +0.002890000 D*+ omega pi- PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00049 D+ K0 pi- PHSP; +0.0003 D*+ K0 pi- PHSP; +# +# Feb 2009 +# +0.00043 D'_s1- D+ PHSP; +0.00083 D'_s1- D*+ PHSP; +##### Already included above 0.0023 D_s1- D*+ PHSP; +# +# +# Lam_c X / Sigma_c X 6.0 % +# +#0.01000 cd_0 anti-ud_0 PYTHIA 63; +#0.03000 cd_1 anti-ud_1 PYTHIA 63; +0.010463563 cd_0 anti-ud_0 PYTHIA 63; +0.020927220 cd_1 anti-ud_1 PYTHIA 63; +# +# Xi_c X 2.5% +# +#0.00600 cs_0 anti-ud_0 PYTHIA 63; +#0.01800 cs_1 anti-ud_1 PYTHIA 63; +0.002853725 cs_0 anti-ud_0 PYTHIA 63; +0.005707449 cs_1 anti-ud_1 PYTHIA 63; +# +# PR LHCb Add p pbar mode +0.0000001 p+ anti-p- PHSP; +# +0.250525685 anti-u d c anti-d PYTHIA 23; +0.042705898 anti-u d c anti-d PYTHIA 65; +0.019975978 anti-u s c anti-d PYTHIA 63; +0.017122253 anti-u c d anti-d PYTHIA 23; +0.000856098 anti-u c s anti-d PYTHIA 23; +#lange - try to crank up the psi production.... +0.070391402 anti-c s c anti-d PYTHIA 43; +0.005707449 anti-c d c anti-d PYTHIA 43; +0.002853725 anti-u d u anti-d PYTHIA 23; +0.003804966 anti-c s u anti-d PYTHIA 23; +# JGS 11/5/02 This and similar a few lines above have been divided by two +# to solve a double-counting problem for this channel +0.001950007 anti-u u d anti-d PYTHIA 23; +0.000066610 anti-d d d anti-d PYTHIA 23; +0.000085600 anti-s s d anti-d PYTHIA 23; +0.002092675 anti-u u s anti-d PYTHIA 23; +0.001712197 anti-d d s anti-d PYTHIA 23; +0.001426862 anti-s s s anti-d PYTHIA 23; +0.004756208 s anti-d PYTHIA 91; +0.000490000 D+ anti-K0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000880000 D+ K- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 D*+ anti-K0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001290000 D*+ K- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.017600000 D*+ pi- pi- pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004700000 D*+ pi- pi- pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000110000 D_s+ pi- anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000052000 D0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000046000 D0 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000006000 anti-D0 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000036000 D*0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002700000 anti-D*0 pi- pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000890000 eta_c anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000871000 J/psi anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 J/psi omega anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009500 J/psi eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000019000 J/psi pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000460000 J/psi anti-K0 pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000540000 J/psi anti-K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000800000 J/psi K*- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000660000 J/psi anti-K*0 pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000170000 anti-K0 anti-D0 D0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000620000 psi(2S) anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000140000 chi_c0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011200 chi_c1 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000390000 chi_c1 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000158000 chi_c1 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 eta anti-K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009600 eta anti-K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000016000 omega anti-K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000010100 omega anti-K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004700 anti-K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002700 f_2 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001400 f_0 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007500 anti-K_2*0 phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007600 eta anti-K0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004600 K- pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000019500 anti-K0 pi- pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000041000 K- pi+ pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000012400 anti-K_2*0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000860 rho0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002660 anti-p- p+ anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001240 anti-p- p+ anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003140 anti-p- Lambda0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004800 Lambda0 anti-Lambda0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002500 Lambda0 anti-Lambda0 anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 Lambda0 anti-Lambda0 anti-D0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000114000 D0 anti-p- p+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000028000 D_s+ Lambda0 anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000103000 D*0 anti-p- p+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001500000 D*+ anti-p- n0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000338000 D+ anti-p- p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000500000 D*+ anti-p- p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 Lambda_c+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000630000 Lambda_c+ anti-p- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000120000 Sigma_c*++ anti-p- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000150000 Sigma_c0 anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000220000 Sigma_c++ anti-p- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +# +Decay B0 +# Updated to PDG 2008 +# b -> c semileptonic +# +0.0493 D*- e+ nu_e PHOTOS HQET2 1.207 0.920 1.406 0.853; # 1.0 * PDG2014 +0.0219 D- e+ nu_e PHOTOS HQET2 1.185 1.081; # 1.0 * PDG2014 +0.0042 D_1- e+ nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.0045 D_0*- e+ nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.0046 D'_1- e+ nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.0033 D_2*- e+ nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.00045 D*- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; # Increase by 1.5 compared to 2011 +0.00490 anti-D*0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; # Same as 2011 +0.0015 D- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; # 1.5 * of 2011 table +0.0043 anti-D0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; # In principle should be in D**, but go to PDG2014 to fill inclusive +# +# Do same as for electrons +0.0493 D*- mu+ nu_mu PHOTOS HQET2 1.207 0.920 1.406 0.853; +0.0219 D- mu+ nu_mu PHOTOS HQET2 1.185 1.081; +0.0042 D_1- mu+ nu_mu PHOTOS ISGW2; +0.0045 D_0*- mu+ nu_mu PHOTOS ISGW2; +0.0046 D'_1- mu+ nu_mu PHOTOS ISGW2; +0.0033 D_2*- mu+ nu_mu PHOTOS ISGW2; +0.00045 D*- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.00490 anti-D*0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0015 D- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0043 anti-D0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; +# +# b -> c tau nu +# +0.015000000 D*- tau+ nu_tau ISGW2; #[Reconstructed PDG2011] +0.011000000 D- tau+ nu_tau ISGW2; #[Reconstructed PDG2011] +0.0013 D_1- tau+ nu_tau ISGW2; +0.0013 D_0*- tau+ nu_tau ISGW2; +0.0020 D'_1- tau+ nu_tau ISGW2; +0.0020 D_2*- tau+ nu_tau ISGW2; +# +# b -> u l nu +# +0.000145 pi- e+ nu_e PHOTOS ISGW2; # PDG2014 +0.000294 rho- e+ nu_e PHOTOS ISGW2; # PDG2014 +0.000000 D(2S)- e+ nu_e PHOTOS ISGW2; +0.000000 D*(2S)- e+ nu_e PHOTOS ISGW2; +0.001892 Xu- e+ nu_e VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; +# +0.000145 pi- mu+ nu_mu PHOTOS ISGW2; # PDG2014 (electrons) +0.000294 rho- mu+ nu_mu PHOTOS ISGW2; # PDG2014 (electrons) +0.000000 D(2S)- mu+ nu_mu PHOTOS ISGW2; +0.000000 D*(2S)- mu+ nu_mu PHOTOS ISGW2; +0.001892 Xu- mu+ nu_mu VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; +# +0.000060 pi- tau+ nu_tau ISGW2; +0.000083 rho- tau+ nu_tau ISGW2; +0.000090 a_1- tau+ nu_tau ISGW2; +0.000008 b_1- tau+ nu_tau ISGW2; +0.000008 a_0- tau+ nu_tau ISGW2; +0.000008 a_2- tau+ nu_tau ISGW2; +0.000000 rho(2S)- tau+ nu_tau ISGW2; +0.000000 D(2S)- tau+ nu_tau ISGW2; +0.000000 D*(2S)- tau+ nu_tau ISGW2; +# + +# +# b->u hadronic +# Ref. [B1]: +# Lange Nov 14, 2004 (flip D_s K --opposite of D_s pi) +0.000024000 D_s+ pi- PHSP; #[Reconstructed PDG2011] +0.000030000 D_s- K+ PHSP; #[Reconstructed PDG2011] +0.000021000 D_s*+ pi- SVS; #[Reconstructed PDG2011] +0.000021900 D_s*- K+ SVS; #[Reconstructed PDG2011] +# +0.000016 rho- D_s+ SVS; +0.000035000 K*+ D_s- SVS; #[Reconstructed PDG2011] +0.000041000 D_s*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000032000 D_s*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] + + +# +# b -> s gamma +# +0.000043300 K*0 gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# PR LHCb add omega gamma +0.000000440 omega gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +#0.0000135 K_10 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000065 K'_10 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000128 K'*0 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000166 K_2*0 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000017 K''*0 gamma HELAMP 1.0 0.0 1.0 0.0; +0.0003118 Xsd gamma BTOXSGAMMA 2 ; +# +0.000000160 K0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001030 K*0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000050 Xsd e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000450 K0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001050 K*0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000025 Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.0000001 K0 tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 K*0 tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 Xsd tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +# +#------------------------------------------------------------------------------ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv +# +# B0 -> CP eigenstates (some exclusive b -> u) sum=0.00036 +# +# PR LHCb 04/07/04 update BR +0.000005130 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000001620 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.0000010 pi0 eta PHSP; +0.000001200 pi0 eta' PHSP; #[Reconstructed PDG2011] +0.000001 pi0 a_00 PHSP; +0.000001 pi0 f_0 PHSP; +# pi0 rho0 is with the 3-body modes +0.000001 omega pi0 SVS; +0.000001 a_10 pi0 SVS; +0.000001 b_10 pi0 SVS; +0.000001 eta eta PHSP; +0.000001 eta eta' PHSP; +0.000001 eta a_00 PHSP; +0.000001 eta f_0 PHSP; +0.000001 rho0 eta SVS; +0.000000940 omega eta SVS; #[Reconstructed PDG2011] +0.000001 a_10 eta SVS; +0.000001 b_10 eta SVS; +0.000001 eta' eta' PHSP; +0.000001 eta' a_00 PHSP; +0.000001 eta' f_0 PHSP; +0.000001 rho0 eta' SVS; +0.000001000 omega eta' SVS; #[Reconstructed PDG2011] +0.000001 a_10 eta' SVS; +0.000001 b_10 eta' SVS; +0.000001 a_00 a_00 PHSP; +0.000001 a_00 f_0 PHSP; +0.000001 rho0 a_00 SVS; +0.000001 omega a_00 SVS; +0.000001 a_10 a_00 SVS; +0.000001 b_10 a_00 SVS; +0.000001 f_0 f_0 PHSP; +0.000001 rho0 f_0 SVS; +0.000001 omega f_0 SVS; +0.000001 a_10 f_0 SVS; +0.000001 b_10 f_0 SVS; + +# Penguin dominated modes are sin2beta, not sin2alpha +0.000004300 phi K_S0 SVS; #[Reconstructed PDG2011] +0.000004300 phi K_L0 SVS; #[Reconstructed PDG2011] +0.000000550 eta K_S0 PHSP; #[Reconstructed PDG2011] +0.000000550 eta K_L0 PHSP; #[Reconstructed PDG2011] +0.000033000 eta' K_S0 PHSP; #[Reconstructed PDG2011] +0.000033000 eta' K_L0 PHSP; #[Reconstructed PDG2011] +0.000002500 omega K_S0 SVS; #[Reconstructed PDG2011] +0.000002500 omega K_L0 SVS; #[Reconstructed PDG2011] +#don't allow jetset to simulate the same decay but to a K0 or anti-K0 +#Lange 1/30/2003 +0.0 phi K0 PHSP; +0.0 phi anti-K0 PHSP; +0.0 eta K0 PHSP; +0.0 eta anti-K0 PHSP; +0.0 eta' K0 PHSP; +0.0 eta' anti-K0 PHSP; +0.0 omega K0 PHSP; +0.0 omega anti-K0 PHSP; +# phipi0 has no simple Pengiun or tree so who knows - ditto phieta/eta'? +0.000001 phi pi0 SVS; +0.000001 phi eta SVS; +0.000001 phi eta' SVS; +# +0.000015900 K*0 eta SVS; #[Reconstructed PDG2011] +0.000003800 K*0 eta' SVS; #[Reconstructed PDG2011] +0.000002000 K*0 omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000001 phi omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 omega omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 omega rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +# +# PR LHCb 04/07/04 update BR +#2-body modes from Jim Olsen +0.000019400 K+ pi- PHSP; #[Reconstructed PDG2011] +0.0000004 K+ K- PHSP; +0.000000240 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.0000000 K_S0 K_L0 PHSP; +0.000000240 K_L0 K_L0 PHSP; #[Reconstructed PDG2011] +# Declare K0 pi0 not to have it through Pythia (LHCb - PR) +0.0000000 K0 pi0 PHSP; +# Split into K_s0 K_l0 (LHCb - P. Robbe) +0.000004750 K_S0 pi0 PHSP; #[Reconstructed PDG2011] +0.000004750 K_L0 pi0 PHSP; #[Reconstructed PDG2011] +#Put in with 0 BR to keep PYTHIA from generating it +0.0000000 K0 anti-K0 PHSP; +# +# 3-body John Back (jback@slac.stanford.edu) - Oct 15, 2002 +# JGS intersperses modes with pi0->eta,eta' +# B0 modes +# Model generates rho(770), rho(1450) and rho(1700) resonances +# with interference (uses CKM angle alpha) +0.000024 pi- pi+ pi0 BTO3PI_CP dm alpha; +# Put in with 0 BR to keep PYTHIA from generating these (see BTO3PI_CP above) +0.000000 rho0 pi0 SVS; +0.000000 rho+ pi- SVS; +0.000000 rho- pi+ SVS; +0.000000 rho(2S)+ pi- SVS; +0.000000 rho(2S)- pi+ SVS; +0.000000 rho(3S)+ pi- SVS; +0.000000 rho(3S)- pi+ SVS; +# +# rho0 3-body modes +0.000002350 rho0 K_S0 SVS; #[Reconstructed PDG2011] +0.000002350 rho0 K_L0 SVS; #[Reconstructed PDG2011] +# +# rho- 3-body modes +0.000008400 rho- K+ SVS; #[Reconstructed PDG2011] +# +# rho(1450) 3-body modes +0.0000005 rho(2S)0 K_S0 SVS; +0.0000005 rho(2S)0 K_L0 SVS; +# +# +# f0,a0(980) 3-body modes +0.0000055 f_0 K0 PHSP; +0.000001 a_00 K0 PHSP; +0.000001 a_0- K+ PHSP; +0.000001 a_0+ pi- PHSP; +0.000003 a_0- pi+ PHSP; +# +# K*0(892) 3-body modes +0.000003600 K*0 pi0 SVS; #[Reconstructed PDG2011] +0.000003 K*0 anti-K0 SVS; +# +# K*0(1430) 3-body modes +0.000001 K_0*0 pi0 PHSP; +0.000003 K_0*0 anti-K0 PHSP; +# +# K*0(1680) 3-body modes +0.000001 K''*0 pi0 SVS; +0.000001 K''*0 K0 SVS; + +# +# K*+(892) 3-body modes +0.000009400 K*+ pi- SVS; #[Reconstructed PDG2011] +0.000002 K*+ K- SVS; +# +# K*+(1430) 3-body modes +0.000033000 K_0*+ pi- PHSP; #[Reconstructed PDG2011] +0.000002 K_0*+ K- PHSP; +# +# K*0(1680) 3-body modes +0.000001 K''*+ pi- SVS; +0.000001 K''*+ K- SVS; +# +# +# Non-resonant 3-body left-overs +# Most modes are set at 1e-6 +# +# pi+pi-pi0: high mass + f0(400-1200) = (1+1)e-6 +#0402270.000002 pi+ pi- pi0 PHSP; +0.000017 pi+ pi- eta PHSP; +0.000001 pi+ pi- eta' PHSP; +# +# pi+ pi- K0: total-rhoK0-f0K0-piK*(892)-piK*(1430)=45-5-6-13./3-11./3 +0.000000000 pi+ pi- K0 PHSP; #[Reconstructed PDG2011] +# +# K+ pi- pi0 +0.000027500 K+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000020 K+ pi- eta PHSP; +0.000001 K+ pi- eta' PHSP; +# +# pi+ K- K0. +# Both B0 and B0bar can decay to these => 0.5e-6 each +0.0000005 pi+ K- K0 PHSP; +0.0000005 pi- K+ anti-K0 PHSP; +# +# K+ K- K0 +# PR LHCb 09 Apr 2004 split into KS/KL +0.000000 K+ K- K0 PHSP; +0.000012350 K+ K- K_S0 PHSP; #[Reconstructed PDG2011] +0.000012350 K+ K- K_L0 PHSP; #[Reconstructed PDG2011] +# +# K+ K- pi0 +0.000001 K+ K- pi0 PHSP; +0.000001 K+ K- eta PHSP; +0.000001 K+ K- eta' PHSP; +# +# pi0 K0 anti-K0 +0.000002 K0 anti-K0 pi0 PHSP; +0.000001 K0 anti-K0 eta PHSP; +0.000001 K0 anti-K0 eta' PHSP; +# +# pi0 pi0 K0 +0.000002 K0 pi0 pi0 PHSP; +0.000001 K0 pi0 eta PHSP; +0.000001 K0 pi0 eta' PHSP; +0.000001 K0 eta eta PHSP; +0.000001 K0 eta eta' PHSP; +0.000001 K0 eta' eta' PHSP; +# +# K0 anti-K0 K0: 8*BF(KsKsKs)~=48 (8 is a guess) +0.000048 K0 anti-K0 K0 PHSP; +# +# pi0 pi0 pi0 +0.000001 pi0 pi0 pi0 PHSP; +0.000001 pi0 pi0 eta PHSP; +0.000001 pi0 pi0 eta' PHSP; +0.000001 pi0 eta eta PHSP; +0.000001 pi0 eta eta' PHSP; +# +# PR LHCb: 7 Nov 2005 Add K*0 pi0 pi0 +0.0000067 K*0 pi0 pi0 PHSP; +#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#--------------------------------------------------------------------------- +# +#4-body modes from Andrei Gritsan +#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- +# PR LHCb 20 Apr 2004, set long. pol. +0.000000730 rho0 rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000024200 rho+ rho- SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000003 rho0 pi+ pi- PHSP; +0.000003 omega pi+ pi- PHSP; +0.000001 rho0 pi0 pi0 PHSP; +0.000001 omega pi0 pi0 PHSP; +0.0000005 rho0 pi0 eta PHSP; +0.0000002 rho0 eta eta PHSP; +0.0000002 rho0 pi0 eta' PHSP; +0.0000001 rho0 eta eta' PHSP; +0.0000005 omega pi0 eta PHSP; +0.0000002 omega eta eta PHSP; +0.0000002 omega pi0 eta' PHSP; +0.0000001 omega eta eta' PHSP; +0.000010 rho+ pi- pi0 PHSP; +0.000005 rho+ pi- eta PHSP; +0.000010 rho- pi+ pi0 PHSP; +0.000005 rho- pi+ eta PHSP; +0.000010 pi+ pi- pi+ pi- PHSP; +0.000010 pi+ pi- pi0 pi0 PHSP; +0.000005 pi+ pi- eta pi0 PHSP; +0.000002 pi+ pi- eta eta PHSP; +0.000002 pi+ pi- eta' pi0 PHSP; +0.000001 pi+ pi- eta' eta PHSP; +0.000016500 a_1+ pi- SVS; #[Reconstructed PDG2011] +0.000016500 a_1- pi+ SVS; #[Reconstructed PDG2011] +0.0000055 b_1+ pi- SVS; +0.0000055 b_1- pi+ SVS; +0.000002 rho- a_0+ SVS; +0.000010 rho+ a_0- SVS; +0.000001 f_0 pi+ pi- PHSP; +0.000001 f_0 pi0 pi0 PHSP; +0.000001 a_0- pi+ pi0 PHSP; +0.000001 a_00 pi0 pi0 PHSP; +0.000001 a_0+ pi- pi0 PHSP; +#--- 4-body rho-K*, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- +0.000003400 rho0 K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.0000100 rho- K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000050600 pi- pi+ K*0 PHSP; #[Reconstructed PDG2011] +0.000010 pi- pi0 K*+ PHSP; +0.000005 pi- eta K*+ PHSP; +0.000002 pi- eta' K*+ PHSP; +0.000010 rho- K+ pi0 PHSP; +0.000005 rho- K+ eta PHSP; +0.000002 rho- K+ eta' PHSP; +0.000010 rho- K0 pi+ PHSP; +0.000010 rho+ K0 pi- PHSP; +0.000005 rho0 K0 pi0 PHSP; +0.000002 rho0 K0 eta PHSP; +0.000001 rho0 K0 eta' PHSP; +0.000010 rho0 K+ pi- PHSP; +0.000005 omega K0 pi0 PHSP; +0.000002 omega K0 eta PHSP; +0.000001 omega K0 eta' PHSP; +0.000005100 omega K+ pi- PHSP; #[Reconstructed PDG2011] +0.000010 pi+ pi0 pi- K0 PHSP; +0.000005 pi+ eta pi- K0 PHSP; +0.000010 pi0 pi0 pi0 K0 PHSP; +0.000005 pi0 pi0 eta K0 PHSP; +0.000002 pi0 eta eta K0 PHSP; +0.000002 pi0 pi0 eta' K0 PHSP; +0.000001 pi0 eta eta' K0 PHSP; +0.000010 pi+ pi- pi- K+ PHSP; +0.000010 pi0 pi0 pi- K+ PHSP; +0.000005 pi0 eta pi- K+ PHSP; +0.000002 eta eta pi- K+ PHSP; +0.000002 pi0 eta' pi- K+ PHSP; +0.000001 eta eta' pi- K+ PHSP; +0.000010 rho0 K_0*0 PHSP; +0.000020 rho- K_0*+ PHSP; +0.000010 pi- pi+ K_0*0 PHSP; +0.000010 pi0 pi0 K_0*0 PHSP; +0.000010 pi- pi0 K_0*+ PHSP; +0.000005 K*0 f_0 SVS; +0.000010 a_10 K0 SVS; +0.000016000 a_1- K+ SVS; #[Reconstructed PDG2011] +0.000010 b_10 K0 SVS; +0.0000074 b_1- K+ SVS; +0.000005 K*0 a_00 SVS; +0.000005 K*+ a_0- SVS; +#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ +0.000001280 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000001 K*+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.0000001 phi rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 K+ K- rho0 PHSP; +0.000001 K0 anti-K0 rho0 PHSP; +0.000001 K+ K- omega PHSP; +0.000001 K0 anti-K0 omega PHSP; +0.000001 K+ anti-K0 rho- PHSP; +0.000001 K- K0 rho+ PHSP; +0.0000001 phi pi- pi+ PHSP; +0.000001 K+ K- pi- pi+ PHSP; +0.000001 K+ K- pi0 pi0 PHSP; +0.0000005 K+ K- pi0 eta PHSP; +0.0000002 K+ K- eta eta PHSP; +0.0000002 K+ K- pi0 eta' PHSP; +0.0000001 K+ K- eta eta' PHSP; +0.000001 K0 anti-K0 pi- pi+ PHSP; +0.000001 K0 anti-K0 pi0 pi0 PHSP; +0.0000005 K0 anti-K0 pi0 eta PHSP; +0.0000002 K0 anti-K0 eta eta PHSP; +0.0000002 K0 anti-K0 pi0 eta' PHSP; +0.0000001 K0 anti-K0 eta eta' PHSP; +0.000001 K*+ K- pi0 PHSP; +0.000001 K*- K+ pi0 PHSP; +0.000001 K*0 anti-K0 pi0 PHSP; +0.000001 K0 anti-K*0 pi0 PHSP; +0.000001 K+ anti-K*0 pi- PHSP; +0.000001 K*+ anti-K0 pi- PHSP; +0.000003320 K- K*0 pi+ PHSP; #[Reconstructed PDG2011] +0.000001 K*- K0 pi+ PHSP; +#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- +0.000009800 phi K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000010 phi K+ pi- PHSP; +0.000010 phi K0 pi0 PHSP; +0.000007 phi K0 eta PHSP; +0.000017700 K- K+ K*0 PHSP; #[Reconstructed PDG2011] +0.000010 K- K*+ K0 PHSP; +0.000010 K*- K+ K0 PHSP; +0.000010 K+ K- K+ pi- PHSP; +0.000010 K+ K- K0 pi0 PHSP; +0.000005 K+ K- K0 eta PHSP; +0.000010 K0 anti-K0 K0 pi0 PHSP; +0.000005 K0 anti-K0 K0 eta PHSP; +0.000003900 phi K_0*0 PHSP; #[Reconstructed PDG2011] +0.000010 K- K+ K_0*0 PHSP; +0.000010 K- K_0*+ K0 PHSP; +0.000010 K_0*- K+ K0 PHSP; +0.000002 phi K'_10 PHSP; +0.000002 K- K+ K'_10 PHSP; +#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- +0.0000001 phi phi SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.0000001 phi K+ K- PHSP; +0.0000001 phi K0 anti-K0 PHSP; +0.0000001 K+ K- K+ K- PHSP; +0.0000001 K0 anti-K0 K+ K- PHSP; +0.0000001 K0 anti-K0 K0 anti-K0 PHSP; +#5-body modes from Jim Smith - 1/30/05 +#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- +0.000010 rho0 rho0 pi0 PHSP; +0.000005 rho0 rho0 eta PHSP; +0.000002 rho0 rho0 eta' PHSP; +0.000010 omega rho0 pi0 PHSP; +0.000005 omega rho0 eta PHSP; +0.000002 omega rho0 eta' PHSP; +0.000010 rho+ rho- pi0 PHSP; +0.000005 rho+ rho- eta PHSP; +0.000002 rho+ rho- eta' PHSP; +0.000010 rho0 rho+ pi- PHSP; +0.000010 omega rho+ pi- PHSP; +0.000002 rho0 pi+ pi- pi0 PHSP; +0.000001 rho0 pi+ pi- eta PHSP; +0.000001 rho0 pi+ pi- eta' PHSP; +0.000002 rho0 pi0 pi0 pi0 PHSP; +0.000001 rho0 pi0 eta pi0 PHSP; +0.000001 rho0 pi0 eta' pi0 PHSP; +0.000002 omega pi+ pi- pi0 PHSP; +0.000001 omega pi+ pi- eta PHSP; +0.000001 omega pi+ pi- eta' PHSP; +0.000002 omega pi0 pi0 pi0 PHSP; +0.000001 omega pi0 eta pi0 PHSP; +0.000001 omega pi0 eta' pi0 PHSP; +0.000002 rho+ pi- pi+ pi- PHSP; +0.000002 rho+ pi- pi0 pi0 PHSP; +0.000001 rho+ pi- pi0 eta PHSP; +0.000001 rho+ pi- pi0 eta' PHSP; +0.000002 rho- pi+ pi+ pi- PHSP; +0.000002 rho- pi+ pi0 pi0 PHSP; +0.000001 rho- pi+ pi0 eta PHSP; +0.000001 rho- pi+ pi0 eta' PHSP; +0.000001 pi+ pi- pi+ pi- pi0 PHSP; +0.0000005 pi+ pi- pi+ pi- eta PHSP; +0.0000002 pi+ pi- pi+ pi- eta' PHSP; +0.000001 pi+ pi- pi0 pi0 pi0 PHSP; +0.0000005 pi+ pi- pi0 pi0 eta PHSP; +0.0000002 pi+ pi- pi0 pi0 eta' PHSP; +0.0000005 pi0 pi0 pi0 pi0 pi0 PHSP; +0.0000002 pi0 pi0 pi0 pi0 eta PHSP; +0.0000001 pi0 pi0 pi0 pi0 eta' PHSP; +0.000010 a_1+ rho- PHSP; +0.000010 a_1- rho+ PHSP; +0.000010 a_10 rho0 PHSP; +0.000010 a_10 omega PHSP; +0.000010 a_1+ pi- pi0 PHSP; +0.000005 a_1+ pi- eta PHSP; +0.000002 a_1+ pi- eta' PHSP; +0.000010 a_10 pi+ pi- PHSP; +0.000010 a_10 pi0 pi0 PHSP; +0.000005 a_10 pi0 eta PHSP; +0.000002 a_10 pi0 eta' PHSP; +0.000010 a_1- pi+ pi0 PHSP; +0.000005 a_1- pi+ eta PHSP; +0.000002 a_1- pi+ eta' PHSP; +0.000010 rho+ f_0 pi- PHSP; +0.000010 rho- f_0 pi+ PHSP; +0.000010 rho0 f_0 pi0 PHSP; +0.000005 rho0 f_0 eta PHSP; +0.000002 rho0 f_0 eta' PHSP; +0.000010 omega f_0 pi0 PHSP; +0.000010 rho+ a_00 pi- PHSP; +0.000010 rho+ a_0- pi0 PHSP; +0.000005 rho+ a_0- eta PHSP; +0.000002 rho+ a_0- eta' PHSP; +0.000010 rho0 a_0+ pi- PHSP; +0.000010 rho0 a_0- pi+ PHSP; +0.000010 rho0 a_00 pi0 PHSP; +0.000005 rho0 a_00 eta PHSP; +0.000002 rho0 a_00 eta' PHSP; +0.000010 rho- a_00 pi+ PHSP; +0.000010 rho- a_0+ pi0 PHSP; +0.000005 rho- a_0+ eta PHSP; +0.000002 rho- a_0+ eta' PHSP; +0.000002 f_0 pi+ pi- pi0 PHSP; +0.000001 f_0 pi+ pi- eta PHSP; +0.000001 f_0 pi+ pi- eta' PHSP; +0.000002 f_0 pi0 pi0 pi0 PHSP; +0.000001 f_0 pi0 pi0 eta PHSP; +0.000001 f_0 pi0 pi0 eta' PHSP; +0.000001 a_00 pi+ pi- pi0 PHSP; +0.000001 a_00 pi0 pi0 pi0 PHSP; +0.000001 a_0+ pi- pi+ pi- PHSP; +0.000001 a_0+ pi- pi0 pi0 PHSP; +0.000001 a_0- pi+ pi+ pi- PHSP; +0.000001 a_0- pi+ pi0 pi0 PHSP; +#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- +0.000010 rho0 K*+ pi- PHSP; +0.000010 rho- K*+ pi0 PHSP; +0.000005 rho- K*+ eta PHSP; +0.000002 rho- K*+ eta' PHSP; +0.000010 rho0 K*0 pi0 PHSP; +0.000005 rho0 K*0 eta PHSP; +0.000002 rho0 K*0 eta' PHSP; +0.000010 rho- K*0 pi+ PHSP; +0.000010 rho+ K*0 pi- PHSP; +0.000010 omega K*+ pi- PHSP; +0.000010 omega K*0 pi0 PHSP; +0.000005 omega K*0 eta PHSP; +0.000002 omega K*0 eta' PHSP; +0.000010 pi+ pi- K*+ pi- PHSP; +0.000010 pi- pi0 K*+ pi0 PHSP; +0.000005 pi- pi0 K*+ eta PHSP; +0.000002 pi- pi0 K*+ eta' PHSP; +0.000010 pi+ pi- K*0 pi0 PHSP; +0.000005 pi+ pi- K*0 eta PHSP; +0.000002 pi+ pi- K*0 eta' PHSP; +0.000010 pi0 pi0 K*0 pi0 PHSP; +0.000005 pi0 pi0 K*0 eta PHSP; +0.000002 pi0 pi0 K*0 eta' PHSP; +0.000010 rho+ K+ pi- pi- PHSP; +0.000010 rho0 K+ pi- pi0 PHSP; +0.000005 rho0 K+ pi- eta PHSP; +0.000002 rho0 K+ pi- eta' PHSP; +0.000010 rho- K+ pi+ pi- PHSP; +0.000010 rho- K+ pi0 pi0 PHSP; +0.000005 rho- K+ pi0 eta PHSP; +0.000002 rho- K+ pi0 eta' PHSP; +0.000010 rho0 K0 pi+ pi- PHSP; +0.000010 rho0 K0 pi0 pi0 PHSP; +0.000005 rho0 K0 pi0 eta PHSP; +0.000002 rho0 K0 pi0 eta' PHSP; +0.000010 rho+ K0 pi- pi0 PHSP; +0.000005 rho+ K0 pi- eta PHSP; +0.000002 rho+ K0 pi- eta' PHSP; +0.000010 rho- K0 pi+ pi0 PHSP; +0.000005 rho- K0 pi+ eta PHSP; +0.000002 rho- K0 pi+ eta' PHSP; +0.000010 omega K+ pi- pi0 PHSP; +0.000005 omega K+ pi- eta PHSP; +0.000002 omega K+ pi- eta' PHSP; +0.000010 omega K0 pi+ pi- PHSP; +0.000010 omega K0 pi0 pi0 PHSP; +0.000005 omega K0 pi0 eta PHSP; +0.000002 omega K0 pi0 eta' PHSP; +0.000002 pi+ pi- pi- K+ pi0 PHSP; +0.000001 pi+ pi- pi- K+ eta PHSP; +0.000001 pi+ pi- pi- K+ eta' PHSP; +0.000002 pi0 pi0 pi- K+ pi0 PHSP; +0.000001 pi0 pi0 pi- K+ eta PHSP; +0.000001 pi0 pi0 pi- K+ eta' PHSP; +0.000002 pi+ pi- pi+ K0 pi- PHSP; +0.000002 pi+ pi- pi0 K0 pi0 PHSP; +0.000001 pi+ pi- pi0 K0 eta PHSP; +0.000001 pi+ pi- pi0 K0 eta' PHSP; +0.000002 pi0 pi0 pi0 K0 pi0 PHSP; +0.000001 pi0 pi0 pi0 K0 eta PHSP; +0.000001 pi0 pi0 pi0 K0 eta' PHSP; +0.000010 rho+ K_0*0 pi- PHSP; +0.000010 rho0 K_0*0 pi0 PHSP; +0.000005 rho0 K_0*0 eta PHSP; +0.000002 rho0 K_0*0 eta' PHSP; +0.000010 rho- K_0*0 pi+ PHSP; +0.000010 rho- K_0*+ pi0 PHSP; +0.000005 rho- K_0*+ eta PHSP; +0.000002 rho- K_0*+ eta' PHSP; +0.000010 rho0 K_0*+ pi- PHSP; +0.000010 pi+ pi- K_0*+ pi- PHSP; +0.000010 pi- pi0 K_0*+ pi0 PHSP; +0.000005 pi- pi0 K_0*+ eta PHSP; +0.000002 pi- pi0 K_0*+ eta' PHSP; +0.000010 pi+ pi- K_0*0 pi0 PHSP; +0.000005 pi+ pi- K_0*0 eta PHSP; +0.000002 pi+ pi- K_0*0 eta' PHSP; +0.000010 pi0 pi0 K_0*0 pi0 PHSP; +0.000005 pi0 pi0 K_0*0 eta PHSP; +0.000005 pi0 pi0 K_0*0 eta' PHSP; +0.000010 K*+ f_0 pi- PHSP; +0.000010 K*0 f_0 pi0 PHSP; +0.000005 K*0 f_0 eta PHSP; +0.000002 K*0 f_0 eta' PHSP; +0.000010 a_1+ K0 pi- PHSP; +0.000020 a_10 K*0 PHSP; +0.000010 a_10 K+ pi- PHSP; +0.000010 a_10 K0 pi0 PHSP; +0.000020 a_1- K*+ PHSP; +0.000010 a_1- K+ pi0 PHSP; +0.000010 a_1- K0 pi+ PHSP; +0.000005 K*+ a_00 pi- PHSP; +0.000005 K*+ a_0- pi0 PHSP; +0.000002 K*+ a_0- eta PHSP; +0.000001 K*+ a_0- eta' PHSP; +0.000005 K*0 a_0+ pi- PHSP; +0.000005 K*0 a_00 pi0 PHSP; +0.000002 K*0 a_00 eta PHSP; +0.000001 K*0 a_00 eta' PHSP; +#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ +0.000001 K*- K*0 pi+ PHSP; +0.000001 K*+ anti-K*0 pi- PHSP; +0.000001 K*- K*+ pi0 PHSP; +0.0000005 K*- K*+ eta PHSP; +0.0000002 K*- K*+ eta' PHSP; +0.000001 K*0 anti-K*0 pi0 PHSP; +0.0000005 K*0 anti-K*0 eta PHSP; +0.0000002 K*0 anti-K*0 eta' PHSP; +0.000001 phi rho+ pi- PHSP; +0.000001 phi rho- pi+ PHSP; +0.000001 phi rho0 pi0 PHSP; +0.0000005 phi rho0 eta PHSP; +0.0000002 phi rho0 eta' PHSP; +0.000001 phi omega pi0 PHSP; +0.000001 phi f_0 pi0 PHSP; +0.000001 phi pi+ pi- pi0 PHSP; +0.0000005 phi pi+ pi- eta PHSP; +0.0000002 phi pi+ pi- eta' PHSP; +0.000001 phi pi0 pi0 pi0 PHSP; +0.0000005 phi pi0 pi0 eta PHSP; +0.0000002 phi pi0 pi0 eta' PHSP; +0.000001 K0 K- rho0 pi+ PHSP; +0.000001 K0 K- rho+ pi0 PHSP; +0.0000005 K0 K- rho+ eta PHSP; +0.0000002 K0 K- rho+ eta' PHSP; +0.000001 K0 K- omega pi+ PHSP; +0.000001 K0 K- f_0 pi+ PHSP; +0.000001 K+ K- rho+ pi- PHSP; +0.000001 K+ K- rho- pi+ PHSP; +0.000001 K+ K- rho0 pi0 PHSP; +0.0000005 K+ K- rho0 eta PHSP; +0.0000002 K+ K- rho0 eta' PHSP; +0.000001 K+ K- omega pi0 PHSP; +0.0000005 K+ K- omega eta PHSP; +0.0000002 K+ K- omega eta' PHSP; +0.000001 K+ K- f_0 pi0 PHSP; +0.000001 K0 anti-K0 rho+ pi- PHSP; +0.000001 K0 anti-K0 rho- pi+ PHSP; +0.000001 K0 anti-K0 rho0 pi0 PHSP; +0.0000005 K0 anti-K0 rho0 eta PHSP; +0.0000002 K0 anti-K0 rho0 eta' PHSP; +0.000001 K0 anti-K0 omega pi0 PHSP; +0.000001 K0 anti-K0 f_0 pi0 PHSP; +0.000001 anti-K0 K+ rho0 pi- PHSP; +0.000001 anti-K0 K+ rho- pi0 PHSP; +0.0000005 anti-K0 K+ rho- eta PHSP; +0.0000002 anti-K0 K+ rho- eta' PHSP; +0.000001 anti-K0 K+ omega pi- PHSP; +0.000001 anti-K0 K+ f_0 pi- PHSP; +0.0000002 K0 K- pi+ pi+ pi- PHSP; +0.0000002 K0 K- pi+ pi0 pi0 PHSP; +0.0000001 K0 K- pi+ pi0 eta PHSP; +0.0000001 K0 K- pi+ pi0 eta' PHSP; +0.0000002 K+ K- pi+ pi- pi0 PHSP; +0.0000001 K+ K- pi+ pi- eta PHSP; +0.0000001 K+ K- pi+ pi- eta' PHSP; +0.0000002 K+ K- pi0 pi0 pi0 PHSP; +0.0000001 K+ K- pi0 pi0 eta PHSP; +0.0000001 K+ K- pi0 pi0 eta' PHSP; +0.0000002 K0 anti-K0 pi+ pi- pi0 PHSP; +0.0000001 K0 anti-K0 pi+ pi- eta PHSP; +0.0000001 K0 anti-K0 pi+ pi- eta' PHSP; +0.0000002 K0 anti-K0 pi0 pi0 pi0 PHSP; +0.0000001 K0 anti-K0 pi0 pi0 eta PHSP; +0.0000001 K0 anti-K0 pi0 pi0 eta' PHSP; +0.0000002 anti-K0 K+ pi- pi+ pi- PHSP; +0.0000002 anti-K0 K+ pi- pi0 pi0 PHSP; +0.0000001 anti-K0 K+ pi- pi0 eta PHSP; +0.0000001 anti-K0 K+ pi- pi0 eta' PHSP; +0.000001 K*0 K- pi+ pi0 PHSP; +0.0000005 K*0 K- pi+ eta PHSP; +0.0000002 K*0 K- pi+ eta' PHSP; +0.000001 K*- K0 pi+ pi0 PHSP; +0.0000005 K*- K0 pi+ eta PHSP; +0.0000002 K*- K0 pi+ eta' PHSP; +0.000001 K*+ K- pi+ pi- PHSP; +0.000001 K*+ K- pi0 pi0 PHSP; +0.0000005 K*+ K- pi0 eta PHSP; +0.0000002 K*+ K- pi0 eta' PHSP; +0.000001 K*- K+ pi+ pi- PHSP; +0.000001 K*- K+ pi0 pi0 PHSP; +0.0000005 K*- K+ pi0 eta PHSP; +0.0000002 K*- K+ pi0 eta' PHSP; +0.000001 K*0 anti-K0 pi+ pi- PHSP; +0.000001 K*0 anti-K0 pi0 pi0 PHSP; +0.0000005 K*0 anti-K0 pi0 eta PHSP; +0.0000002 K*0 anti-K0 pi0 eta' PHSP; +0.000001 K0 anti-K*0 pi+ pi- PHSP; +0.000001 K0 anti-K*0 pi0 pi0 PHSP; +0.0000005 K0 anti-K*0 pi0 eta PHSP; +0.0000002 K0 anti-K*0 pi0 eta' PHSP; +0.000001 K+ anti-K*0 pi- pi0 PHSP; +0.0000005 K+ anti-K*0 pi- eta PHSP; +0.0000002 K+ anti-K*0 pi- eta' PHSP; +0.000001 K*+ anti-K0 pi- pi0 PHSP; +0.0000005 K*+ anti-K0 pi- eta PHSP; +0.0000002 K*+ anti-K0 pi- eta' PHSP; +#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- +0.000010 phi K*+ pi- PHSP; +0.000010 phi K*0 pi0 PHSP; +0.000005 phi K*0 eta PHSP; +0.000002 phi K*0 eta' PHSP; +0.000010 phi K+ rho- PHSP; +0.000010 phi K0 rho0 PHSP; +0.000010 phi K0 omega PHSP; +0.000010 phi K0 f_0 PHSP; +0.000010 phi K0 pi+ pi- PHSP; +0.000010 phi K0 pi0 pi0 PHSP; +0.000005 phi K0 pi0 eta PHSP; +0.000002 phi K0 pi0 eta' PHSP; +0.000010 phi K+ pi- pi0 PHSP; +0.000005 phi K+ pi- eta PHSP; +0.000002 phi K+ pi- eta' PHSP; +0.000010 K- K+ K*+ pi- PHSP; +0.000010 K+ K*- K+ pi- PHSP; +0.000010 K+ K*0 anti-K0 pi- PHSP; +0.000010 K+ K0 anti-K*0 pi- PHSP; +0.000010 K0 K*+ anti-K0 pi- PHSP; +0.000010 K- K+ K+ rho- PHSP; +0.000010 K- K+ K0 rho0 PHSP; +0.000010 K- K+ K0 omega PHSP; +0.000010 K- K+ K0 f_0 PHSP; +0.000010 K+ K- K+ pi- pi0 PHSP; +0.000005 K+ K- K+ pi- eta PHSP; +0.000002 K+ K- K+ pi- eta' PHSP; +0.000010 K+ K- K0 pi+ pi- PHSP; +0.000010 K+ K- K0 pi0 pi0 PHSP; +0.000005 K+ K- K0 pi0 eta PHSP; +0.000005 K+ K- K0 pi0 eta' PHSP; +0.000010 K0 anti-K0 K+ pi- pi0 PHSP; +0.000005 K0 anti-K0 K+ pi- eta PHSP; +0.000002 K0 anti-K0 K+ pi- eta' PHSP; +0.000010 K0 anti-K0 K0 pi+ pi- PHSP; +0.000010 K0 anti-K0 K0 pi0 pi0 PHSP; +0.000005 K0 anti-K0 K0 pi0 eta PHSP; +0.000002 K0 anti-K0 K0 pi0 eta' PHSP; +0.000010 phi K_0*+ pi- PHSP; +0.000010 phi K_0*0 pi0 PHSP; +0.000010 K+ K- K_0*+ pi- PHSP; +0.000010 K+ K- K_0*0 pi0 PHSP; +0.000005 K+ K- K_0*0 eta PHSP; +0.000002 K+ K- K_0*0 eta' PHSP; +0.000010 K+ K+ K_0*- pi- PHSP; +0.000010 K+ anti-K_0*0 K0 pi- PHSP; +0.000010 K+ K_0*0 anti-K0 pi- PHSP; +0.000010 K0 anti-K0 K_0*+ pi- PHSP; +0.000010 K0 anti-K0 K_0*0 pi0 PHSP; +0.000005 K0 anti-K0 K_0*0 eta PHSP; +0.000002 K0 anti-K0 K_0*0 eta' PHSP; +0.000010 K0 K0 anti-K_0*0 pi0 PHSP; +0.000005 K0 K0 anti-K_0*0 eta PHSP; +0.000002 K0 K0 anti-K_0*0 eta' PHSP; +0.000002 phi K'_1+ pi- PHSP; +0.000002 phi K'_10 pi0 PHSP; +0.000001 phi K'_10 eta PHSP; +0.000001 phi K'_10 eta' PHSP; +0.000002 K- K+ K'_1+ pi- PHSP; +0.000002 K- K+ K'_10 pi0 PHSP; +0.000001 K- K+ K'_10 eta PHSP; +0.000001 K- K+ K'_10 eta' PHSP; +0.000002 K+ K+ K'_1- pi- PHSP; +0.000002 K0 anti-K0 K'_10 pi0 PHSP; +0.000001 K0 anti-K0 K'_10 eta PHSP; +0.000001 K0 anti-K0 K'_10 eta' PHSP; +0.000002 K0 K0 anti-K'_10 pi0 PHSP; +0.000001 K0 K0 anti-K'_10 eta PHSP; +0.000001 K0 K0 anti-K'_10 eta' PHSP; +#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ +0.000004100 phi phi K0 PHSP; #[Reconstructed PDG2011] +0.0000001 phi phi pi0 PHSP; +0.000001 phi K+ K- K0 PHSP; +0.000001 phi K0 anti-K0 K0 PHSP; +0.0000001 phi K+ K- pi0 PHSP; +0.0000001 phi K0 anti-K0 pi0 PHSP; +0.0000001 phi anti-K0 K+ pi- PHSP; +0.0000001 phi K0 K- pi+ PHSP; +0.0000001 K+ K- K+ K- K0 PHSP; +0.0000001 K0 anti-K0 K+ K- K0 PHSP; +0.0000001 K+ K- K+ K- pi0 PHSP; +0.0000001 K+ K- K0 anti-K0 pi0 PHSP; +0.0000001 K+ K- K+ anti-K0 pi- PHSP; +0.0000001 K+ K- K0 K- pi+ PHSP; +0.0000001 K0 anti-K0 K0 anti-K0 pi0 PHSP; +0.0000001 K0 anti-K0 anti-K0 K+ pi- PHSP; +0.0000001 K0 anti-K0 K0 K- pi+ PHSP; +#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ +0.000003 phi phi K*0 PHSP; +0.000001 phi K+ K- K*0 PHSP; +0.000001 phi K0 anti-K0 K*0 PHSP; +0.000001 phi K0 K+ K*- PHSP; +0.000001 phi K0 K0 anti-K*0 PHSP; +0.0000001 phi K+ K- K+ pi- PHSP; +0.0000001 phi K+ K- K0 pi0 PHSP; +0.0000001 phi K0 anti-K0 K+ pi- PHSP; +0.0000001 phi K0 anti-K0 K0 pi0 PHSP; +#--- 6-body a1a1 ------------ +0.000050 a_10 a_10 PHSP; +0.000050 a_1+ a_1- PHSP; +# +# B -> cc= s +0.000435500 J/psi K_S0 SVS; #[Reconstructed PDG2011] +0.000435500 J/psi K_L0 SVS; #[Reconstructed PDG2011] +# +# +0.001330000 J/psi K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.000017600 J/psi pi0 SVS; #[Reconstructed PDG2011] +0.000027000 J/psi rho0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.00003 J/psi omega SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; +0.000000000 J/psi K+ pi- PHSP; #[Reconstructed PDG2011] +0.0001 J/psi K0 pi0 PHSP; +#rl0.0007 J/psi K0 pi- pi+ PHSP; +#rl0.00035 J/psi K0 pi0 pi0 PHSP; +#rl0.00035 J/psi K+ pi- pi0 PHSP; +0.001300000 J/psi K_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] +0.0001 J/psi K'_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; +0.0005 J/psi K_2*0 PHSP; +0.000094000 J/psi phi K0 PHSP; #[Reconstructed PDG2011] +# +0.000310000 psi(2S) K_S0 SVS; #[Reconstructed PDG2011] +0.000310000 psi(2S) K_L0 SVS; #[Reconstructed PDG2011] +# +# +0.000610000 psi(2S) K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] + +0.0004 psi(2S) K+ pi- PHSP; +0.0002 psi(2S) K0 pi0 PHSP; +0.0002 psi(2S) K0 pi- pi+ PHSP; +0.0001 psi(2S) K0 pi0 pi0 PHSP; +0.0001 psi(2S) K+ pi- pi0 PHSP; +0.0004 psi(2S) K_10 PHSP; +# +0.000445000 eta_c K_S0 PHSP; #[Reconstructed PDG2011] +0.000445000 eta_c K_L0 PHSP; #[Reconstructed PDG2011] +# +# +0.000610000 K*0 eta_c SVS; #[Reconstructed PDG2011] +0.0002 eta_c K+ pi- PHSP; +0.0001 eta_c K0 pi0 PHSP; +0.0002 eta_c K0 pi- pi+ PHSP; +0.0001 eta_c K0 pi0 pi0 PHSP; +0.0001 eta_c K+ pi- pi0 PHSP; +# +0.00024 eta_c(2S) K_S0 PHSP; +0.00024 eta_c(2S) K_L0 PHSP; +# +# +0.00066 K*0T eta_c(2S) SVS; +0.00008 eta_c(2S) K+ pi- PHSP; +0.00005 eta_c(2S) K0 pi0 PHSP; +0.00008 eta_c(2S) K0 pi- pi+ PHSP; +0.00005 eta_c(2S) K0 pi0 pi0 PHSP; +0.00005 eta_c(2S) K+ pi- pi0 PHSP; +# +0.000070000 chi_c0 K_S0 PHSP; #[Reconstructed PDG2011] +0.000070000 chi_c0 K_L0 PHSP; #[Reconstructed PDG2011] +# +# +0.0003 K*0 chi_c0 SVS; +0.0002 chi_c0 K+ pi- PHSP; +0.0001 chi_c0 K0 pi0 PHSP; +0.0002 chi_c0 K0 pi- pi+ PHSP; +0.0001 chi_c0 K0 pi0 pi0 PHSP; +0.0001 chi_c0 K+ pi- pi0 PHSP; +# +0.000195000 chi_c1 K_S0 SVS; #[Reconstructed PDG2011] +0.000195000 chi_c1 K_L0 SVS; #[Reconstructed PDG2011] +# +# +0.000222000 chi_c1 K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.0004 chi_c1 K+ pi- PHSP; +0.0002 chi_c1 K0 pi0 PHSP; +0.0004 chi_c1 K0 pi- pi+ PHSP; +0.0002 chi_c1 K0 pi0 pi0 PHSP; +0.0002 chi_c1 K+ pi- pi0 PHSP; +# +0.00005 chi_c2 K_S0 STS; +0.00005 chi_c2 K_L0 STS; +# +# +0.00003 chi_c2 K*0 PHSP; +0.0002 chi_c2 K+ pi- PHSP; +0.0001 chi_c2 K0 pi0 PHSP; +0.0002 chi_c2 K0 pi- pi+ PHSP; +0.0001 chi_c2 K0 pi0 pi0 PHSP; +0.0001 chi_c2 K+ pi- pi0 PHSP; +# +0.00024 psi(3770) K_S0 SVS; +0.00024 psi(3770) K_L0 SVS; +# +# +0.00048 psi(3770) K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; +0.00014 psi(3770) K+ pi- PHSP; +0.00014 psi(3770) K0 pi0 PHSP; +0.00014 psi(3770) K0 pi- pi+ PHSP; +0.00007 psi(3770) K0 pi0 pi0 PHSP; +0.00007 psi(3770) K+ pi- pi0 PHSP; +0.00029 psi(3770) K_10 PHSP; +# +### ALREADY Included above 0.0000 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# +# +# b-> c (dc=) +# +0.000211000 D- D+ PHSP; #[Reconstructed PDG2011] +# See Ref [B1] for the next 3: +0.000305 D*- D+ SVS; +0.000610000 D*+ D- SVS; #[Reconstructed PDG2011] +0.000820000 D*- D*+ SVV_HELAMP 0.56 0.0 0.96 0.0 0.47 0.0; #[Reconstructed PDG2011] +# +# b -> c (sc=) --> D Ds X Sum = 10% +# +0.007200000 D- D_s+ PHSP; #[Reconstructed PDG2011] +0.008000000 D*- D_s+ SVS; #[Reconstructed PDG2011] +0.007400000 D_s*+ D- SVS; #[Reconstructed PDG2011] +0.017700000 D_s*+ D*- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] +0.0006 D'_1- D_s+ SVS; +0.0012 D'_1- D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0012 D_1- D_s+ SVS; +0.0024 D_1- D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0042 D_2*- D_s+ STS; +0.0040 D_2*- D_s*+ PHSP; +# +0.0018 D_s+ D- pi0 PHSP; +0.0037 D_s+ anti-D0 pi- PHSP; +0.0018 D_s*+ D- pi0 PHSP; +0.0037 D_s*+ anti-D0 pi- PHSP; +0.0030 D_s+ D- pi- pi+ PHSP; +0.0022 D_s+ D- pi0 pi0 PHSP; +0.0022 D_s+ anti-D0 pi- pi0 PHSP; +0.0030 D_s*+ D- pi- pi+ PHSP; +0.0022 D_s*+ D- pi0 pi0 PHSP; +0.0022 D_s*+ anti-D0 pi- pi0 PHSP; +# +# b -> c (sc=) --> D D= K X Sum = 8% +# Update: Ref. [B1] +# October 26, 2004 Lange -per breco awg +# External W-emission amplitude +0.001700000 D- D0 K+ PHSP; #[Reconstructed PDG2011] +0.004600000 D- D*0 K+ PHSP; #[Reconstructed PDG2011] +0.003100000 D*- D0 K+ PHSP; #[Reconstructed PDG2011] +0.011800000 D*- D*0 K+ PHSP; #[Reconstructed PDG2011] +# External+internal W-emission amplitude +0.0015 D- D+ K0 PHSP; +0.0018 D*- D+ K0 PHSP; +0.0047 D- D*+ K0 PHSP; +0.007800000 D*- D*+ K0 PHSP; #[Reconstructed PDG2011] +# Internal W-emission amplitude (color suppressed modes) +0.0005 D0 anti-D0 K0 PHSP; +0.0005 D*0 anti-D0 K0 PHSP; +0.0015 D0 anti-D*0 K0 PHSP; +0.0015 D*0 anti-D*0 K0 PHSP; +########## +# K* modes +########### +0.0025 D- D0 K*+ PHSP; +0.0025 D*- D0 K*+ PHSP; +0.0025 D- D*0 K*+ PHSP; +0.0050 D*- D*0 K*+ PHSP; +# +0.0025 D- D+ K*0 PHSP; +0.0025 D*- D+ K*0 PHSP; +0.0025 D- D*+ K*0 PHSP; +0.0050 D*- D*+ K*0 PHSP; +# +0.0005 D0 anti-D0 K*0 PHSP; +0.0005 D0 anti-D*0 K*0 PHSP; +0.0005 D*0 anti-D0 K*0 PHSP; +0.0010 D*0 anti-D*0 K*0 PHSP; +# +# B -> D(*) X Exclusive modes +# +0.002760000 D*- pi+ SVS; #[Reconstructed PDG2011] +0.002680000 D- pi+ PHSP; #[Reconstructed PDG2011] +0.007110000 rho+ D- SVS; #[Reconstructed PDG2011] +# +# D* rho HELAMP parameters taken from ICHEP 98-852. +0.006800000 rho+ D*- SVV_HELAMP 0.317 0.19 0.936 0.0 0.152 1.47; #[Reconstructed PDG2011] +0.0005 D- pi+ pi0 PHSP; +0.008200000 D*- pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.000840000 anti-D0 pi- pi+ PHSP; #[Reconstructed PDG2011] +0.000620000 anti-D*0 pi- pi+ PHSP; #[Reconstructed PDG2011] +0.0005 anti-D*0 pi0 pi0 PHSP; +# +# D a1 updated Ref. [B1] +0.006000000 a_1+ D- SVS; #[Reconstructed PDG2011] +0.000000000 D- rho0 pi+ PHSP; #[Reconstructed PDG2011] +0.0011 D- rho+ pi0 PHSP; +0.002000000 D- pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.0010 D- pi0 pi+ pi0 PHSP; +0.0010 anti-D0 pi- pi+ pi0 PHSP; +0.0001 anti-D0 pi0 pi0 pi0 PHSP; +# +# SVV_HELAMP for D* a1 taken from factorization. Recommandation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: +# updated Ref. [B1] +# October 26, 2004 Lange update +# +0.011000000 D*- a_1+ SVV_HELAMP 0.200 0.0 0.866 0.0 0.458 0.0; # MK, update with PDG2015 +# +0.001600000 D*- rho0 pi+ PHSP; # MK, Update with PDF2015 +0.0010 D*- rho+ pi0 PHSP; +0.0005 D*- pi- pi+ pi+ PHSP; # MK, update with PDG2015 +0.0010 D*- pi0 pi+ pi0 PHSP; +0.0010 anti-D*0 pi- pi+ pi0 PHSP; +0.0001 anti-D*0 pi0 pi0 pi0 PHSP; +# +# B->D** pi and D** rho, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html +# +0.0001 D_1- pi+ SVS; +0.0001 D'_1- pi+ SVS; +0.00006 D_0*- pi+ PHSP; +0.000215 D_2*- pi+ STS; +0.0004 D_1- rho+ PHSP; +0.0013 D'_1- rho+ PHSP; +0.0022 D_2*- rho+ PHSP; +# +# +# B->DK, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: +# update: Ref. [B1]: +# +0.000214000 D*- K+ SVS; #[Reconstructed PDG2011] +0.000200000 D- K+ PHSP; #[Reconstructed PDG2011] +0.000330000 D*- K*+ SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; #[Reconstructed PDG2011] +0.000450000 K*+ D- SVS; #[Reconstructed PDG2011] +#more DK modes - October 26, 2004 -Lange +0.000036 anti-D*0 anti-K0 SVS; +0.000052 anti-D0 anti-K0 PHSP; +0.000042000 K*0 anti-D0 SVS; #[Reconstructed PDG2011] +0.00001 K*0 D0 SVS; +0.00004 anti-D*0 K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; +0.00001 D*0 K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; +# +# +# Color-suppressed modes. Br's are expectations from +# Phys. Rev. D57 (1998), 5363-5369, except for the eta' modes, which are set +# equal to the eta modes. SVV_HELAMP parameters are the same as in D*0 rho-, +# with phases set to 0. Recommendation http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/169.html: +# update: See Ref [B1]: +# further update October 26, 2004 Lange +# +0.000261000 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] +0.000170000 anti-D*0 pi0 SVS; #[Reconstructed PDG2011] +# +0.000320000 rho0 anti-D0 SVS; #[Reconstructed PDG2011] +0.00029 anti-D*0 rho0 SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; +# +0.000202000 anti-D0 eta PHSP; #[Reconstructed PDG2011] +0.000200000 anti-D*0 eta SVS; #[Reconstructed PDG2011] +# +0.000125 anti-D0 eta' PHSP; +0.000123000 anti-D*0 eta' SVS; #[Reconstructed PDG2011] +# +0.000259000 omega anti-D0 SVS; #[Reconstructed PDG2011] +0.000330000 anti-D*0 omega SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; #[Reconstructed PDG2011] +# +# PR LHCb : add ppbar mode +0.0000001 p+ anti-p- PHSP; +# +#October 26, 2004 - Lange +0.0016 D_s0*+ D- PHSP; +0.0015 D*- D_s0*+ SVS; +0.003500000 D_s1+ D- SVS; #[Reconstructed PDG2011] +0.009300000 D*- D_s1+ SVV_HELAMP 0.4904 0. 0.7204 0. 0.4904 0.; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.000880000 D- K+ anti-K*0 PHSP; #[Reconstructed PDG2011] +0.001290000 D*- K+ anti-K*0 PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.002800000 D- omega pi+ PHSP; #[Reconstructed PDG2011] +0.002890000 D*- omega pi+ PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.000490000 D- K0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 D*- K0 pi+ PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00043 D'_s1+ D- PHSP; +0.00083 D'_s1+ D*- PHSP; +#### Already included above 0.0023 D_s1+ D*- PHSP; +# +# Lam_c X / Sigma_c X 4.0 % +# +#0.01000 anti-cd_0 ud_0 PYTHIA 63; +#0.03000 anti-cd_1 ud_1 PYTHIA 63; +0.010520663 anti-cd_0 ud_0 PYTHIA 63; +0.021041421 anti-cd_1 ud_1 PYTHIA 63; +# +# Xi_c X 2.5% +# +#0.00600 anti-cs_0 ud_0 PYTHIA 63; +#0.01800 anti-cs_1 ud_1 PYTHIA 63; +0.002869298 anti-cs_0 ud_0 PYTHIA 63; +0.005738595 anti-cs_1 ud_1 PYTHIA 63; +# +# +0.251926466 u anti-d anti-c d PYTHIA 23; +0.042944682 u anti-d anti-c d PYTHIA 43; +0.020084989 u anti-s anti-c d PYTHIA 43; +0.017215691 u anti-c anti-d d PYTHIA 23; +0.000860770 u anti-c anti-s d PYTHIA 23; +#lange - try to crank up the psi production.... +0.070775534 c anti-s anti-c d PYTHIA 43; +0.005738595 c anti-d anti-c d PYTHIA 43; +0.002869298 u anti-d anti-u d PYTHIA 23; +0.003825730 c anti-s anti-u d PYTHIA 23; +# JGS 11/5/02 This and similar a few lines above have been divided by two +# to solve a double-counting problem for this channel +0.001960649 u anti-u anti-d d PYTHIA 23; +0.000066973 d anti-d anti-d d PYTHIA 23; +0.000086068 s anti-s anti-d d PYTHIA 23; +0.002104095 u anti-u anti-s d PYTHIA 23; +0.001721541 d anti-d anti-s d PYTHIA 23; +0.001434649 s anti-s anti-s d PYTHIA 23; +0.004782163 anti-s d PYTHIA 91; +0.017600000 D*- pi+ pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004700000 D*- pi+ pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000110000 D_s- pi+ K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000052000 anti-D0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000046000 anti-D0 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000006000 D0 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000036000 anti-D*0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002700000 D*0 pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000890000 eta_c K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000871000 J/psi K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 J/psi omega K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009500 J/psi eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000019000 J/psi pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000460000 J/psi K0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000540000 J/psi K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000800000 J/psi K*+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000660000 J/psi K*0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000170000 K0 D0 anti-D0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000620000 psi(2S) K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000140000 chi_c0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011200 chi_c1 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000390000 chi_c1 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000158000 chi_c1 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 eta K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009600 eta K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000016000 omega K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000010100 omega K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004700 K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002700 f_2 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001400 f_0 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007500 K_2*0 phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007600 eta K0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004600 K+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000019500 K0 pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000041000 K+ pi- pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000012400 K_2*0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000860 rho0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002660 p+ anti-p- K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001240 p+ anti-p- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003140 p+ anti-Lambda0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004800 anti-Lambda0 Lambda0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002500 anti-Lambda0 Lambda0 K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 anti-Lambda0 Lambda0 D0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000114000 anti-D0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000028000 D_s- anti-Lambda0 p+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000103000 anti-D*0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001500000 D*- p+ anti-n0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000338000 D- p+ anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000500000 D*- p+ anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 anti-Lambda_c- p+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000630000 anti-Lambda_c- p+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000120000 anti-Sigma_c*-- p+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000150000 anti-Sigma_c0 p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000220000 anti-Sigma_c-- p+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +# +# +Decay B- +# Updated to PDG 2008 +# b -> c semileptonic +# +0.0569 D*0 e- anti-nu_e PHOTOS HQET2 1.207 0.920 1.406 0.853; # 1.0 * PDG2014 +0.0227 D0 e- anti-nu_e PHOTOS HQET2 1.185 1.081; # 1.0 * PDG2014 +0.0045 D_10 e- anti-nu_e PHOTOS ISGW2; # PDG2014 + D_10->D*+pi- = 2/3 +0.0037 D_0*0 e- anti-nu_e PHOTOS ISGW2; # PDG2014 + D_0*0->D+pi- = 2/3 +0.0040 D'_10 e- anti-nu_e PHOTOS ISGW2; # PDG2014 + Dprime_10->D*+pi- = 2/3 +0.0033 D_2*0 e- anti-nu_e PHOTOS ISGW2; # DG2014 + D_2*0->D+pi- = 0.459 +0.006100 D*+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; # Same as 2011 +0.0003 D*0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; # same as 2011 +0.0021 D+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; # PDG2014 (in principle covered by other decays, but there are some decays missing to inclusives) +0.0010 D0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; # same as 2011 +# +# For muonic decays do same as for electrons +0.0569 D*0 mu- anti-nu_mu PHOTOS HQET2 1.207 0.920 1.406 0.853; +0.0227 D0 mu- anti-nu_mu PHOTOS HQET2 1.185 1.081; +0.0045 D_10 mu- anti-nu_mu PHOTOS ISGW2; +0.0037 D_0*0 mu- anti-nu_mu PHOTOS ISGW2; +0.0040 D'_10 mu- anti-nu_mu PHOTOS ISGW2; +0.0033 D_2*0 mu- anti-nu_mu PHOTOS ISGW2; +0.006100 D*+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.0003 D*0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.0021 D+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.0010 D0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +# +# b -> c tau nu +# +0.020000000 D*0 tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011] +0.007000000 D0 tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011] +0.0013 D_10 tau- anti-nu_tau ISGW2; +0.0013 D_0*0 tau- anti-nu_tau ISGW2; +0.0020 D'_10 tau- anti-nu_tau ISGW2; +0.0020 D_2*0 tau- anti-nu_tau ISGW2; +# +# b -> u l nu +# +# NOTE: Do NOT CHANGE any BFs without using the corresponding set of +# hybrid weights (and vice versa). +# This will need check whether we get correct inclusive q2 dependence + +0.00007800 pi0 e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.00003800 eta e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.00015800 rho0 e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.00011900 omega e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.000230 eta' e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.000000 D(2S)0 e- anti-nu_e PHOTOS ISGW2; +0.000000 D*(2S)0 e- anti-nu_e PHOTOS ISGW2; +0.001948 Xu0 e- anti-nu_e VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; +# +# For muons do same as for electrons +0.00007800 pi0 mu- anti-nu_mu PHOTOS ISGW2; +0.00003800 eta mu- anti-nu_mu PHOTOS ISGW2; +0.00015800 rho0 mu- anti-nu_mu PHOTOS ISGW2; +0.00011900 omega mu- anti-nu_mu PHOTOS ISGW2; +0.000230 eta' mu- anti-nu_mu PHOTOS ISGW2; +0.000000 D(2S)0 mu- anti-nu_mu PHOTOS ISGW2; +0.000000 D*(2S)0 mu- anti-nu_mu PHOTOS ISGW2; +0.001948 Xu0 mu- anti-nu_mu VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; +# +0.000030 pi0 tau- anti-nu_tau ISGW2; +0.000012 eta tau- anti-nu_tau ISGW2; +0.000042 rho0 tau- anti-nu_tau ISGW2; +0.000042 omega tau- anti-nu_tau ISGW2; +0.000018 eta' tau- anti-nu_tau ISGW2; +0.000046 a_10 tau- anti-nu_tau ISGW2; +0.000027 b_10 tau- anti-nu_tau ISGW2; +0.000004 a_00 tau- anti-nu_tau ISGW2; +0.000002 f_0 tau- anti-nu_tau ISGW2; +0.000002 f'_0 tau- anti-nu_tau ISGW2; +0.000023 f_1 tau- anti-nu_tau ISGW2; +0.000023 f'_1 tau- anti-nu_tau ISGW2; +0.000013 h_1 tau- anti-nu_tau ISGW2; +0.000013 h'_1 tau- anti-nu_tau ISGW2; +0.000020 f_2 tau- anti-nu_tau ISGW2; +0.000020 f'_2 tau- anti-nu_tau ISGW2; +0.000000 D(2S)0 tau- anti-nu_tau ISGW2; +0.000000 D*(2S)0 tau- anti-nu_tau ISGW2; +# +# +# +# b->u hadronic +# Ref. [B1]: +# +0.000016000 D_s- pi0 PHSP; #[Reconstructed PDG2011] +0.000020 D_s*- pi0 SVS; +# +0.000028 rho0 D_s- SVS; +0.000028 D_s*- rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; + +# +# b-> s gamma +# +0.000042100 K*- gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +#0.0000135 K_1- gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000065 K'_1- gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000128 K'*- gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000166 K_2*- gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000017 K''*- gamma HELAMP 1.0 0.0 1.0 0.0; +0.0003118 anti-Xsu gamma BTOXSGAMMA 2 ; +# +0.000000550 K- e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001550 K*- e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000050 anti-Xsu e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000520 K- mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001160 K*- mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000025 anti-Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.0000001 K- tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 K*- tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 anti-Xsu tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +# +# b -> l nu +# +0.000180000 tau- anti-nu_tau SLN; #[Reconstructed PDG2011] +0.000000 mu- anti-nu_mu PHOTOS SLN; +0.000000 e- anti-nu_e PHOTOS SLN; +# +#------------------------------------------------------------------------------ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv +# +# Exclusive hadronic b->u +# +0.000026 pi- pi0 pi0 CB3PI-P00 alpha; +0.000000 pi- pi- pi+ CB3PI-MPP alpha; +#### +0.000004070 eta pi- PHSP; #[Reconstructed PDG2011] +0.000002330 eta K- PHSP; #[Reconstructed PDG2011] +0.000019300 K*- eta SVS; #[Reconstructed PDG2011] +0.000007000 rho- eta SVS; #[Reconstructed PDG2011] +0.000002700 eta' pi- PHSP; #[Reconstructed PDG2011] +0.000070600 eta' K- PHSP; #[Reconstructed PDG2011] +0.000004900 K*- eta' SVS; #[Reconstructed PDG2011] +0.000008700 rho- eta' SVS; #[Reconstructed PDG2011] +0.000006900 omega pi- SVS; #[Reconstructed PDG2011] +0.000006700 omega K- SVS; #[Reconstructed PDG2011] +0.0000010 omega K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000015900 omega rho- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.0000000 phi pi- SVS; +0.000008300 phi K- SVS; #[Reconstructed PDG2011] +#2-body modes from Jim Olsen +# (K_S0 K- and K_L0 K- -> 1x10^-6, Jim Olsen - Mar 27, 2001) +# (pi- pi0 -> 5x10^-6 and K- pi0 -> 11x10^-6, Jim Olsen - Mar 27, 2001) +# PR LHCb 04/08/2004 Split into Ks/KL +0.000000 anti-K0 pi- PHSP; +0.000011550 K_S0 pi- PHSP; #[Reconstructed PDG2011] +0.000011550 K_L0 pi- PHSP; #[Reconstructed PDG2011] +0.000001360 K0 K- PHSP; #[Reconstructed PDG2011] +0.000005700 pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000012900 K- pi0 PHSP; #[Reconstructed PDG2011] +# +# 3-body John Back (jback@slac.stanford.edu) - Oct 15, 2002 +# JGS intersperses modes with pi0->eta,eta' +# B- modes +# +# rho0 3-body modes +0.000008300 rho0 pi- SVS; #[Reconstructed PDG2011] +0.000003700 rho0 K- SVS; #[Reconstructed PDG2011] +# +# rho- 3-body modes +0.000008000 rho- anti-K0 SVS; #[Reconstructed PDG2011] +0.000010900 rho- pi0 SVS; #[Reconstructed PDG2011] +# +# rho(1450) 3-body modes +0.0000022 rho(2S)0 pi- SVS; +0.000001 rho(2S)0 K- SVS; +# +# f0,a0(980) 3-body modes +0.000001 f_0 pi- PHSP; +0.0000092 f_0 K- PHSP; +0.000001 a_0- anti-K0 PHSP; +0.000001 a_00 K- PHSP; +0.000001 a_00 pi- PHSP; +0.000001 a_0- pi0 PHSP; + +0.000001600 f_2 pi- PHSP; #[Reconstructed PDG2011] + +# +# K*(1430) 3-body modes +0.000045000 anti-K_0*0 pi- PHSP; #[Reconstructed PDG2011] +0.000001 K_0*0 K- PHSP; +0.000002 K_0*- pi0 PHSP; +0.000002 K_0*- K0 PHSP; +# +# K*-(892) 3-body modes +0.000006900 K*- pi0 SVS; #[Reconstructed PDG2011] +0.0000030 K*- K0 SVS; +# +# +# +# Non-resonant 3-body left-overs +# Most modes are set at 1e-6 +# +# pi-pi+pi-: high mass + f0(400-1200) = (1+1)e-6 +#0402270.000002 pi- pi+ pi- PHSP; +# +# K- pi+ pi-: high mass + f0(400-1200) = (5+5)e-6 +0.000000000 K- pi+ pi- PHSP; #[Reconstructed PDG2011] +# +# K- K+ pi-: just non-resonant +0.000005000 K- K+ pi- PHSP; #[Reconstructed PDG2011] +# +# K- K+ K-: high mass structure near 1500 + non-res: total - phiK = 30 - 4 +0.000025400 K- K+ K- PHSP; #[Reconstructed PDG2011] +# +# +# K-K-pi+: suppressed mode (1e-7) +0.0000001 K- K- pi+ PHSP; +# K+pi-pi-: suppressed mode (1e-7) +0.0000001 K+ pi- pi- PHSP; +# +# +# K- K0 pi0 +0.000001 K- K0 pi0 PHSP; +0.000001 K- K0 eta PHSP; +0.000001 K- K0 eta' PHSP; +# +# pi- anti-K0 pi0 +0.000001 pi- anti-K0 pi0 PHSP; +0.000001 pi- anti-K0 eta PHSP; +0.000001 pi- anti-K0 eta' PHSP; +# +# pi- pi0 pi0 +#0402270.000001 pi- pi0 pi0 PHSP; +0.000001 pi- pi0 eta PHSP; +0.000001 pi- pi0 eta' PHSP; +0.000001 pi- eta eta PHSP; +0.000001 pi- eta eta' PHSP; +# +# K- pi0 pi0 +0.000001 K- pi0 pi0 PHSP; +0.000001 K- pi0 eta PHSP; +0.000001 K- pi0 eta' PHSP; +0.000001 K- eta eta PHSP; +0.000001 K- eta eta' PHSP; +0.000001 K- eta' eta' PHSP; +# +# K- anti-K0 K0: 4*BF(K+KsKs) (4 is a guess) +0.000046 K- anti-K0 K0 PHSP; +# +# pi- anti-K0 K0 +0.000001 pi- anti-K0 K0 PHSP; +# +#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#--------------------------------------------------------------------------- +# +#4-body modes from Andrei Gritsan +#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- +# PR LHCb 22 Apr 2004 Set long. pol. for rho rho +0.000024000 rho- rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000010 rho0 pi- pi0 PHSP; +0.000005 rho0 pi- eta PHSP; +0.000002 rho0 pi- eta' PHSP; +0.000010 omega pi- pi0 PHSP; +0.000005 omega pi- eta PHSP; +0.000002 omega pi- eta' PHSP; +0.000010 rho- pi- pi+ PHSP; +# PR LHCb Add rho+ pi- pi- +0.000010 rho+ pi- pi- PHSP; +0.000010 rho- pi0 pi0 PHSP; +0.000005 rho- pi0 eta PHSP; +0.000002 rho- eta eta PHSP; +0.000002 rho- pi0 eta' PHSP; +0.000010 pi+ pi- pi- pi0 PHSP; +0.000005 pi+ pi- pi- eta PHSP; +0.000002 pi+ pi- pi- eta' PHSP; +0.000010 pi- pi0 pi0 pi0 PHSP; +0.000005 pi- eta pi0 pi0 PHSP; +0.000002 pi- eta eta pi0 PHSP; +0.000002 pi- eta' pi0 pi0 PHSP; +0.000001 pi- eta' eta pi0 PHSP; +0.000020000 a_10 pi- SVS; #[Reconstructed PDG2011] +0.000026000 a_1- pi0 SVS; #[Reconstructed PDG2011] +0.0000067 b_10 pi- SVS; +0.000010 b_1- pi0 SVS; +0.000010 rho- f_0 SVS; +0.000010 rho- a_00 SVS; +0.000002 rho0 a_0- SVS; +0.000010 f_0 pi- pi0 PHSP; +0.000001 a_00 pi- pi0 PHSP; +0.000001 a_0- pi0 pi0 PHSP; +0.000001 a_0+ pi- pi- PHSP; +#--- 4-body rho-K*, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- +0.000009200 rho- anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000010 rho0 K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000010 pi- pi0 anti-K*0 PHSP; +0.000005 pi- eta anti-K*0 PHSP; +0.000069800 pi+ pi- K*- PHSP; #[Reconstructed PDG2011] +0.000010 pi0 pi0 K*- PHSP; +0.000005 pi0 eta K*- PHSP; +0.000002 eta eta K*- PHSP; +0.000002 pi0 eta' K*- PHSP; +0.000001 eta eta' K*- PHSP; +0.000010 rho- anti-K0 pi0 PHSP; +0.000005 rho- anti-K0 eta PHSP; +0.000002 rho- anti-K0 eta' PHSP; +0.000010 rho- K- pi+ PHSP; +0.000010 rho+ K- pi- PHSP; +0.000005 rho0 anti-K0 pi- PHSP; +0.000005 rho0 K- pi0 PHSP; +0.000002 rho0 K- eta PHSP; +0.000001 rho0 K- eta' PHSP; +0.000005 omega anti-K0 pi- PHSP; +0.000005 omega K- pi0 PHSP; +0.000002 omega K- eta PHSP; +0.000001 omega K- eta' PHSP; +0.000010 pi+ pi- pi- anti-K0 PHSP; +0.000010 pi- pi0 pi0 anti-K0 PHSP; +0.000005 pi- eta pi0 anti-K0 PHSP; +0.000002 pi- eta eta anti-K0 PHSP; +0.000010 pi+ pi- pi0 K- PHSP; +0.000005 pi+ pi- eta K- PHSP; +0.000010 pi0 pi0 pi0 K- PHSP; +0.000005 pi0 pi0 eta K- PHSP; +0.000002 pi0 eta eta K- PHSP; +0.000002 pi0 pi0 eta' K- PHSP; +0.000001 pi0 eta eta' K- PHSP; +0.000010 rho- anti-K_0*0 PHSP; +0.000006 rho0 K_0*- PHSP; +0.000010 pi- pi0 anti-K_0*0 PHSP; +0.000010 pi0 pi0 K_0*- PHSP; +0.000005200 K*- f_0 SVS; #[Reconstructed PDG2011] +0.000010 a_10 K- SVS; +0.000035000 a_1- anti-K0 SVS; #[Reconstructed PDG2011] +0.0000091 b_10 K- SVS; +0.000010 b_1- anti-K0 SVS; +0.000005 K*- a_00 SVS; +0.000005 anti-K*0 a_0- SVS; +#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ +0.000001 K*0 K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 phi rho- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 phi pi- pi0 PHSP; +0.0000005 phi pi- eta PHSP; +0.0000002 phi pi- eta' PHSP; +0.000001 K+ K- rho- PHSP; +0.000001 K0 anti-K0 rho- PHSP; +0.000001 K0 K- rho0 PHSP; +0.000001 K0 K- omega PHSP; +0.000001 K+ K- pi- pi0 PHSP; +0.0000005 K+ K- pi- eta PHSP; +0.0000002 K+ K- pi- eta' PHSP; +0.000001 K0 anti-K0 pi- pi0 PHSP; +0.0000005 K0 anti-K0 pi- eta PHSP; +0.0000002 K0 anti-K0 pi- eta' PHSP; +0.000001 K0 K- pi+ pi- PHSP; +0.000001 K0 K- pi0 pi0 PHSP; +0.0000005 K0 K- pi0 eta PHSP; +0.0000002 K0 K- eta eta PHSP; +0.0000002 K0 K- pi0 eta' PHSP; +0.0000001 K0 K- eta eta' PHSP; +0.000001 K*+ K- pi- PHSP; +0.000001 K*- K+ pi- PHSP; +0.000001 K*0 anti-K0 pi- PHSP; +0.000001 K0 anti-K*0 pi- PHSP; +0.000001 K- K*0 pi0 PHSP; +0.0000005 K- K*0 eta PHSP; +0.0000002 K- K*0 eta' PHSP; +0.000001 K*- K0 pi0 PHSP; +0.0000005 K*- K0 eta PHSP; +0.0000002 K*- K0 eta' PHSP; +#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- +0.000010000 phi K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000010 phi anti-K0 pi- PHSP; +0.000010 phi K- pi0 PHSP; +0.000005 phi K- eta PHSP; +0.000002 phi K- eta' PHSP; +0.000026000 K- K+ K*- PHSP; #[Reconstructed PDG2011] +0.000010 K- K*+ K- PHSP; +0.000010 K- K*0 anti-K0 PHSP; +0.000010 K- K0 anti-K*0 PHSP; +0.000010 K0 K*- anti-K0 PHSP; +0.000010 K+ K- K- pi0 PHSP; +0.000005 K+ K- K- eta PHSP; +0.000002 K+ K- K- eta' PHSP; +0.000010 K+ K- anti-K0 pi- PHSP; +0.000010 K0 anti-K0 K- pi0 PHSP; +0.000005 K0 anti-K0 K- eta PHSP; +0.000002 K0 anti-K0 K- eta' PHSP; +0.000010 K0 anti-K0 anti-K0 pi- PHSP; +0.000007000 phi K_0*- PHSP; #[Reconstructed PDG2011] +0.000010 K- K+ K_0*- PHSP; +0.000010 K- K- K_0*+ PHSP; +0.000010 K- anti-K_0*0 K0 PHSP; +0.000010 K- K_0*0 anti-K0 PHSP; +0.000002 phi K'_1- PHSP; +0.000002 K- K+ K'_1- PHSP; +#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- +0.000001 phi K0 K- PHSP; +0.000001 K+ K- K- K0 PHSP; +0.000001 K0 anti-K0 K0 K- PHSP; +# +#5-body modes from Jim Smith - 1/30/05 +#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- +0.000010 rho0 rho0 pi- PHSP; +0.000010 rho- rho0 pi0 PHSP; +0.000005 rho- rho0 eta PHSP; +0.000002 rho- rho0 eta' PHSP; +0.000010 rho+ rho- pi- PHSP; +0.000010 omega rho0 pi- PHSP; +0.000010 omega rho- pi0 PHSP; +0.000005 omega rho- eta PHSP; +0.000002 omega rho- eta' PHSP; +0.000002 rho0 pi+ pi- pi- PHSP; +0.000002 rho0 pi- pi0 pi0 PHSP; +0.000001 rho0 pi- eta pi0 PHSP; +0.000001 rho0 pi- eta' pi0 PHSP; +0.000002 omega pi- pi0 pi0 PHSP; +0.000001 omega pi- eta pi0 PHSP; +0.000001 omega pi- eta' pi0 PHSP; +0.000002 rho+ pi- pi- pi0 PHSP; +0.000001 rho+ pi- pi- eta PHSP; +0.000001 rho+ pi- pi- eta' PHSP; +0.000002 rho- pi+ pi- pi0 PHSP; +0.000001 rho- pi+ pi- eta PHSP; +0.000001 rho- pi+ pi- eta' PHSP; +0.000002 rho- pi0 pi0 pi0 PHSP; +0.000001 rho- pi0 eta pi0 PHSP; +0.000001 rho- eta eta pi0 PHSP; +0.000001 rho- pi0 eta' pi0 PHSP; +0.000001 pi+ pi- pi- pi0 pi0 PHSP; +0.000001 pi+ pi- pi- eta pi0 PHSP; +0.000001 pi+ pi- pi- eta' pi0 PHSP; +0.000001 pi- pi0 pi0 pi0 pi0 PHSP; +0.000001 pi- eta pi0 pi0 pi0 PHSP; +0.000001 pi- eta' pi0 pi0 pi0 PHSP; +0.000010 a_1- rho0 PHSP; +0.000010 a_1- omega PHSP; +0.000010 a_1- f_0 PHSP; +0.000010 a_10 pi- pi0 PHSP; +0.000005 a_10 pi- eta PHSP; +0.000002 a_10 pi- eta' PHSP; +0.000010 a_1+ pi- pi- PHSP; +0.000010 a_1- pi+ pi- PHSP; +0.000010 a_1- pi0 pi0 PHSP; +0.000005 a_1- pi0 eta PHSP; +0.000002 a_1- pi0 eta' PHSP; +0.000010 rho- f_0 pi0 PHSP; +0.000005 rho- f_0 eta PHSP; +0.000002 rho- f_0 eta' PHSP; +0.000010 rho0 f_0 pi- PHSP; +0.000010 omega f_0 pi- PHSP; +0.000010 rho- a_00 pi0 PHSP; +0.000005 rho- a_00 eta PHSP; +0.000002 rho- a_00 eta' PHSP; +0.000010 rho+ a_0- pi- PHSP; +0.000010 rho0 a_0- pi0 PHSP; +0.000005 rho0 a_0- eta PHSP; +0.000002 rho0 a_0- eta' PHSP; +0.000002 f_0 pi+ pi- pi- PHSP; +0.000002 f_0 pi- pi0 pi0 PHSP; +0.000001 f_0 pi- pi0 eta PHSP; +0.000001 f_0 pi- pi0 eta' PHSP; +0.000001 a_00 pi- pi0 pi0 PHSP; +0.000001 a_0- pi0 pi0 pi0 PHSP; +0.000001 a_0+ pi- pi- pi0 PHSP; +#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- +0.000010 rho- K*- pi+ PHSP; +0.000010 rho+ K*- pi- PHSP; +0.000010 rho- anti-K*0 pi0 PHSP; +0.000005 rho- anti-K*0 eta PHSP; +0.000002 rho- anti-K*0 eta' PHSP; +0.000010 rho0 anti-K*0 pi- PHSP; +0.000010 rho0 K*- pi0 PHSP; +0.000005 rho0 K*- eta PHSP; +0.000002 rho0 K*- eta' PHSP; +0.000010 omega anti-K*0 pi- PHSP; +0.000010 omega K*- pi0 PHSP; +0.000005 omega K*- eta PHSP; +0.000002 omega K*- eta' PHSP; +0.000010 pi+ pi- anti-K*0 pi- PHSP; +0.000010 pi- pi0 anti-K*0 pi0 PHSP; +0.000005 pi- eta anti-K*0 pi0 PHSP; +0.000002 pi- eta' anti-K*0 pi0 PHSP; +0.000010 pi- pi+ K*- pi0 PHSP; +0.000005 pi- pi+ K*- eta PHSP; +0.000002 pi- pi+ K*- eta' PHSP; +0.000010 pi0 pi0 K*- pi0 PHSP; +0.000005 pi0 eta K*- pi0 PHSP; +0.000002 eta eta K*- pi0 PHSP; +0.000002 pi0 eta' K*- pi0 PHSP; +0.000001 eta eta' K*- pi0 PHSP; +0.000010 rho- anti-K0 pi+ pi- PHSP; +0.000010 rho- anti-K0 pi0 pi0 PHSP; +0.000005 rho- anti-K0 eta pi0 PHSP; +0.000002 rho- anti-K0 eta' pi0 PHSP; +0.000010 rho- K- pi+ pi0 PHSP; +0.000010 rho+ K- pi- pi0 PHSP; +0.000010 rho+ anti-K0 pi- pi- PHSP; +0.000010 rho0 anti-K0 pi- pi0 PHSP; +0.000010 rho0 K- pi0 pi0 PHSP; +0.000005 rho0 K- eta pi0 PHSP; +0.000002 rho0 K- eta' pi0 PHSP; +0.000010 omega anti-K0 pi- pi0 PHSP; +0.000010 omega K- pi0 pi0 PHSP; +0.000005 omega K- eta pi0 PHSP; +0.000002 omega K- eta' pi0 PHSP; +0.000002 pi- pi- pi+ anti-K0 pi0 PHSP; +0.000001 pi- pi- pi+ anti-K0 eta PHSP; +0.000001 pi- pi- pi+ anti-K0 eta' PHSP; +0.000002 pi- pi0 pi0 anti-K0 pi0 PHSP; +0.000001 pi- eta pi0 anti-K0 pi0 PHSP; +0.000001 pi- eta eta anti-K0 pi0 PHSP; +0.000002 pi+ pi- pi+ K- pi- PHSP; +0.000002 pi+ pi- pi0 K- pi0 PHSP; +0.000001 pi+ pi- eta K- pi0 PHSP; +0.000001 pi+ pi- eta' K- pi0 PHSP; +0.000002 pi0 pi0 pi0 K- pi0 PHSP; +0.000001 pi0 pi0 eta K- pi0 PHSP; +0.000001 pi0 eta eta K- pi0 PHSP; +0.000001 pi0 pi0 eta' K- pi0 PHSP; +0.000001 pi0 eta eta' K- pi0 PHSP; +0.000010 rho0 anti-K_0*0 pi- PHSP; +0.000010 rho- anti-K_0*0 pi0 PHSP; +0.000005 rho- anti-K_0*0 eta PHSP; +0.000002 rho- anti-K_0*0 eta' PHSP; +0.000010 rho- K_0*- pi+ PHSP; +0.000010 rho0 K_0*- pi0 PHSP; +0.000005 rho0 K_0*- eta PHSP; +0.000002 rho0 K_0*- eta' PHSP; +0.000010 pi- pi- anti-K_0*0 pi+ PHSP; +0.000010 pi- pi0 anti-K_0*0 pi0 PHSP; +0.000005 pi- pi0 anti-K_0*0 eta PHSP; +0.000002 pi- pi0 anti-K_0*0 eta' PHSP; +0.000010 pi0 pi0 K_0*- pi0 PHSP; +0.000005 pi0 pi0 K_0*- eta PHSP; +0.000002 pi0 pi0 K_0*- eta' PHSP; +0.000010 anti-K*0 f_0 pi- PHSP; +0.000010 K*- f_0 pi0 PHSP; +0.000005 K*- f_0 eta PHSP; +0.000002 K*- f_0 eta' PHSP; +0.000020 a_10 K*- PHSP; +0.000010 a_10 K- pi0 PHSP; +0.000010 a_10 anti-K0 pi- PHSP; +0.000020 a_1- anti-K*0 PHSP; +0.000010 a_1- K- pi+ PHSP; +0.000010 a_1- anti-K0 pi0 PHSP; +0.000005 K*- a_00 pi0 PHSP; +0.000005 anti-K*0 a_0- pi0 PHSP; +#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ +0.000001 K*0 anti-K*0 pi- PHSP; +0.000001 K*0 K*- pi0 PHSP; +0.0000005 K*0 K*- eta PHSP; +0.0000002 K*0 K*- eta' PHSP; +0.000001 phi rho0 pi- PHSP; +0.000001 phi omega pi- PHSP; +0.000001 phi f_0 pi- PHSP; +0.000001 phi rho- pi0 PHSP; +0.0000005 phi rho- eta PHSP; +0.0000002 phi rho- eta' PHSP; +0.000001 phi pi+ pi- pi- PHSP; +0.000001 phi pi- pi0 pi0 PHSP; +0.0000005 phi pi- eta pi0 PHSP; +0.0000002 phi pi- eta' pi0 PHSP; +0.000001 K0 K- rho+ pi- PHSP; +0.000001 K0 K- rho- pi+ PHSP; +0.000001 K0 K- rho0 pi0 PHSP; +0.0000005 K0 K- rho0 eta PHSP; +0.0000002 K0 K- rho0 eta' PHSP; +0.000001 K0 K- omega pi0 PHSP; +0.000001 K0 K- f_0 pi0 PHSP; +0.000001 K+ K- rho0 pi- PHSP; +0.000001 K+ K- rho- pi0 PHSP; +0.0000005 K+ K- rho- eta PHSP; +0.0000002 K+ K- rho- eta' PHSP; +0.000001 K+ K- omega pi- PHSP; +0.000001 K0 anti-K0 rho0 pi- PHSP; +0.000001 K0 anti-K0 omega pi- PHSP; +0.000001 K0 anti-K0 f_0 pi- PHSP; +0.000001 K0 anti-K0 rho- pi0 PHSP; +0.0000005 K0 anti-K0 rho- eta PHSP; +0.0000002 K0 anti-K0 rho- eta' PHSP; +0.000001 anti-K0 K+ rho- pi- PHSP; +0.0000002 anti-K0 K+ pi- pi- pi0 PHSP; +0.0000001 anti-K0 K+ pi- pi- eta PHSP; +0.0000001 anti-K0 K+ pi- pi- eta' PHSP; +0.0000002 K+ K- pi+ pi- pi- PHSP; +0.0000002 K+ K- pi- pi0 pi0 PHSP; +0.0000001 K+ K- pi- eta pi0 PHSP; +0.0000001 K+ K- pi- eta' pi0 PHSP; +0.0000002 K0 anti-K0 pi+ pi- pi- PHSP; +0.0000002 K0 anti-K0 pi- pi0 pi0 PHSP; +0.0000001 K0 anti-K0 pi- eta pi0 PHSP; +0.0000001 K0 anti-K0 pi- eta' pi0 PHSP; +0.0000002 K0 K- pi+ pi- pi0 PHSP; +0.0000001 K0 K- pi+ pi- eta PHSP; +0.0000001 K0 K- pi+ pi- eta' PHSP; +0.0000002 K0 K- pi0 pi0 pi0 PHSP; +0.0000001 K0 K- pi0 eta pi0 PHSP; +0.0000001 K0 K- pi0 eta' pi0 PHSP; +0.000001 anti-K*0 K+ pi- pi- PHSP; +0.000001 K*+ anti-K0 pi- pi- PHSP; +0.000001 K*- K+ pi- pi0 PHSP; +0.000001 K*+ K- pi- pi0 PHSP; +0.000001 K*0 anti-K0 pi- pi0 PHSP; +0.000001 K0 anti-K*0 pi- pi0 PHSP; +0.000001 K- K*0 pi0 pi0 PHSP; +0.0000005 K- K*0 eta pi0 PHSP; +0.0000002 K- K*0 eta' pi0 PHSP; +0.000001 K*- K0 pi0 pi0 PHSP; +0.0000005 K*- K0 eta pi0 PHSP; +0.0000002 K*- K0 eta' pi0 PHSP; +#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- +0.000010 phi K*- pi0 PHSP; +0.000010 phi K- rho0 PHSP; +0.000010 phi K- omega PHSP; +0.000010 phi K- f_0 PHSP; +0.000010 phi anti-K0 rho- PHSP; +0.000010 phi anti-K0 pi- pi0 PHSP; +0.000010 phi K- pi+ pi- PHSP; +0.000010 phi K- pi0 pi0 PHSP; +0.000005 phi K- eta pi0 PHSP; +0.000002 phi K- eta' pi0 PHSP; +0.000010 K+ K- K*- pi0 PHSP; +0.000010 K- K*+ K- pi0 PHSP; +0.000010 K- K*0 anti-K0 pi0 PHSP; +0.000010 K- K0 anti-K*0 pi0 PHSP; +0.000010 K0 K*- anti-K0 pi0 PHSP; +0.000010 K+ K- K- rho0 PHSP; +0.000010 K+ K- K- omega PHSP; +0.000010 K+ K- K- f_0 PHSP; +0.000010 K- K+ anti-K0 rho- PHSP; +0.000010 K- K- K+ pi0 pi0 PHSP; +0.000005 K- K- K+ eta pi0 PHSP; +0.000002 K- K- K+ eta' pi0 PHSP; +0.000010 K+ K- anti-K0 pi- pi0 PHSP; +0.000010 K0 anti-K0 K- pi0 pi0 PHSP; +0.000005 K0 anti-K0 K- eta pi0 PHSP; +0.000002 K0 anti-K0 K- eta' pi0 PHSP; +0.000010 K0 anti-K0 anti-K0 pi- pi0 PHSP; +0.000010 phi anti-K_0*0 pi- PHSP; +0.000010 phi K_0*- pi0 PHSP; +0.000005 phi K_0*- eta PHSP; +0.000002 phi K_0*- eta' PHSP; +0.000010 K- K+ K_0*- pi0 PHSP; +0.000005 K- K+ K_0*- eta PHSP; +0.000002 K- K+ K_0*- eta' PHSP; +0.000010 K- K- K_0*+ pi0 PHSP; +0.000005 K- K- K_0*+ eta PHSP; +0.000002 K- K- K_0*+ eta' PHSP; +0.000010 K- K+ anti-K_0*0 pi- PHSP; +0.000010 K- K- K_0*0 pi+ PHSP; +0.000010 anti-K0 anti-K0 K_0*0 pi- PHSP; +0.000010 K- anti-K_0*0 K0 pi0 PHSP; +0.000005 K- anti-K_0*0 K0 eta PHSP; +0.000002 K- anti-K_0*0 K0 eta' PHSP; +0.000010 K- K_0*0 anti-K0 pi0 PHSP; +0.000005 K- K_0*0 anti-K0 eta PHSP; +0.000002 K- K_0*0 anti-K0 eta' PHSP; +0.000002 phi anti-K'_10 pi- PHSP; +0.000002 phi K'_1- pi0 PHSP; +0.000001 phi K'_1- eta PHSP; +0.000001 phi K'_1- eta' PHSP; +0.000002 K- K+ anti-K'_10 pi- PHSP; +0.000002 K- K+ K'_1- pi0 PHSP; +0.000001 K- K+ K'_1- eta PHSP; +0.000001 K- K+ K'_1- eta' PHSP; +0.000002 K- K- K'_1+ pi0 PHSP; +0.000002 K- K- anti-K'_10 pi+ PHSP; +0.000002 K0 anti-K0 anti-K'_10 pi- PHSP; +0.000002 K0 anti-K0 K'_1- pi0 PHSP; +0.000001 K0 anti-K0 K'_1- eta PHSP; +0.000001 K0 anti-K0 K'_1- eta' PHSP; +0.000002 anti-K0 anti-K0 K'_10 pi- PHSP; +0.000002 K0 K0 K'_1- pi0 PHSP; +0.000001 K0 K0 K'_1- eta PHSP; +0.000001 K0 K0 K'_1- eta' PHSP; +0.000010 K- K0 anti-K'_10 pi0 PHSP; +0.000005 K- K0 anti-K'_10 eta PHSP; +0.000002 K- K0 anti-K'_10 eta' PHSP; +0.000010 K- K'_10 anti-K0 pi0 PHSP; +0.000005 K- K'_10 anti-K0 eta PHSP; +0.000002 K- K'_10 anti-K0 eta' PHSP; +#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ +0.000004900 phi phi K- PHSP; #[Reconstructed PDG2011] +0.000001 phi phi pi- PHSP; +0.000001 phi K+ K- K- PHSP; +0.000001 phi K0 anti-K0 K- PHSP; +0.000001 phi K0 anti-K0 pi- PHSP; +0.000001 phi K0 K- pi0 PHSP; +0.000001 K+ K- K+ K- pi- PHSP; +0.000001 K+ K- K0 anti-K0 pi- PHSP; +0.000001 K+ K- K- K0 pi0 PHSP; +0.000001 K0 anti-K0 K0 K- pi0 PHSP; +#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ +0.000003 phi phi K*- PHSP; +0.000001 phi K+ K- K*- PHSP; +0.000001 phi K0 anti-K0 K*- PHSP; +0.000001 phi K0 K- K*0 PHSP; +0.000001 phi K+ K- K- pi0 PHSP; +0.000001 phi K+ K- anti-K0 pi- PHSP; +0.000001 phi K0 anti-K0 K- pi0 PHSP; +0.000001 phi K0 anti-K0 anti-K0 pi- PHSP; +0.000001 phi K0 K- K- pi+ PHSP; +#--- 6-body a1a1 ------------ +0.000050 a_1- a_10 PHSP; +# +# B -> cc= s sum = 1.92% +# +0.001014000 J/psi K- SVS; #[Reconstructed PDG2011] +0.001430000 J/psi K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.000049000 J/psi pi- SVS; #[Reconstructed PDG2011] +0.000050000 J/psi rho- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.0002 J/psi anti-K0 pi- PHSP; +0.0001 J/psi K- pi0 PHSP; +#rl0.0007 J/psi K- pi+ pi- PHSP; +#rl0.00035 J/psi K- pi0 pi0 PHSP; +#rl0.00035 J/psi anti-K0 pi- pi0 PHSP; +0.0001 J/psi K'_1- SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; +0.0005 J/psi K_2*- PHSP; +0.001800000 J/psi K_1- SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] +0.000052000 J/psi phi K- PHSP; #[Reconstructed PDG2011] +# +0.000646000 psi(2S) K- SVS; #[Reconstructed PDG2011] +0.000620000 psi(2S) K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.0004 psi(2S) anti-K0 pi- PHSP; +0.0002 psi(2S) K- pi0 PHSP; +0.001900000 psi(2S) K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.0001 psi(2S) K- pi0 pi0 PHSP; +0.0001 psi(2S) anti-K0 pi- pi0 PHSP; +0.0004 psi(2S) K_1- PHSP; +# +0.000910000 eta_c K- PHSP; #[Reconstructed PDG2011] +0.001200000 K*- eta_c SVS; #[Reconstructed PDG2011] +0.0002 eta_c anti-K0 pi- PHSP; +0.0001 eta_c K- pi0 PHSP; +0.0002 eta_c K- pi+ pi- PHSP; +0.0001 eta_c K- pi0 pi0 PHSP; +0.0001 eta_c anti-K0 pi- pi0 PHSP; +# +0.000340000 eta_c(2S) K- PHSP; #[Reconstructed PDG2011] +0.00048 K*- eta_c(2S) SVS; +0.00008 eta_c(2S) anti-K0 pi- PHSP; +0.00005 eta_c(2S) K- pi0 PHSP; +0.00008 eta_c(2S) K- pi+ pi- PHSP; +0.00005 eta_c(2S) K- pi0 pi0 PHSP; +0.00005 eta_c(2S) anti-K0 pi- pi0 PHSP; +# +0.000133000 chi_c0 K- PHSP; #[Reconstructed PDG2011] +0.0004 K*- chi_c0 SVS; +0.0002 chi_c0 anti-K0 pi- PHSP; +0.0001 chi_c0 K- pi0 PHSP; +0.0002 chi_c0 K- pi+ pi- PHSP; +0.0001 chi_c0 K- pi0 pi0 PHSP; +0.0001 chi_c0 anti-K0 pi- pi0 PHSP; +# +0.000460000 chi_c1 K- SVS; #[Reconstructed PDG2011] +0.000300000 chi_c1 K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.0004 chi_c1 anti-K0 pi- PHSP; +0.0002 chi_c1 K- pi0 PHSP; +0.0004 chi_c1 K- pi+ pi- PHSP; +0.0002 chi_c1 K- pi0 pi0 PHSP; +0.0002 chi_c1 anti-K0 pi- pi0 PHSP; +# +0.00002 chi_c2 K- STS; +0.00002 chi_c2 K*- PHSP; +0.0002 chi_c2 anti-K0 pi- PHSP; +0.0001 chi_c2 K- pi0 PHSP; +0.0002 chi_c2 K- pi+ pi- PHSP; +0.0001 chi_c2 K- pi0 pi0 PHSP; +0.0001 chi_c2 anti-K0 pi- pi0 PHSP; +# +0.000490000 psi(3770) K- SVS; #[Reconstructed PDG2011] +0.0005 psi(3770) K*- PHSP; +0.0003 psi(3770) anti-K0 pi- PHSP; +0.0002 psi(3770) K- pi0 PHSP; +0.0002 psi(3770) K- pi+ pi- PHSP; +0.0001 psi(3770) K- pi0 pi0 PHSP; +0.0001 psi(3770) anti-K0 pi- pi0 PHSP; +0.0003 psi(3770) K_1- PHSP; +# +# b -> c (sc=) -> D Ds X Sum = 10% +# +0.010000000 D0 D_s- PHSP; #[Reconstructed PDG2011] +0.008200000 D*0 D_s- SVS; #[Reconstructed PDG2011] +0.007600000 D_s*- D0 SVS; #[Reconstructed PDG2011] +0.017100000 D_s*- D*0 SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; #[Reconstructed PDG2011] +0.0006 D'_10 D_s- SVS; +0.0012 D'_10 D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0012 D_10 D_s- SVS; +0.0024 D_10 D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0042 D_2*0 D_s- STS; +0.0040 D_2*0 D_s*- PHSP; +# +# +# SVV_HELAMP from factorization, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: +# +0.0036 D_s- D+ pi- PHSP; +0.0018 D_s- D0 pi0 PHSP; +0.0037 D_s*- D+ pi- PHSP; +0.0018 D_s*- D0 pi0 PHSP; +0.0033 D_s- D+ pi- pi0 PHSP; +0.0033 D_s- D0 pi- pi+ PHSP; +0.0008 D_s- D0 pi0 pi0 PHSP; +0.0033 D_s*- D+ pi- pi0 PHSP; +0.0033 D_s*- D0 pi- pi+ PHSP; +0.0008 D_s*- D0 pi0 pi0 PHSP; +# +# +# b -> c (sc=) -> D D= K X Sum = 8% +# update: Ref. [B1]: +# +0.0017 D0 D- anti-K0 PHSP; +0.0052 D0 D*- anti-K0 PHSP; +0.0031 D*0 D- anti-K0 PHSP; +0.007800000 D*0 D*- anti-K0 PHSP; #[Reconstructed PDG2011] +# External+internal W-emission amplitude +0.002100000 D0 anti-D0 K- PHSP; #[Reconstructed PDG2011] +0.0018 D*0 anti-D0 K- PHSP; +0.004700000 D0 anti-D*0 K- PHSP; #[Reconstructed PDG2011] +0.005300000 D*0 anti-D*0 K- PHSP; #[Reconstructed PDG2011] +# Internal W-emission amplitude (color suppressed modes) +0.0005 D- D+ K- PHSP; +0.0005 D*- D+ K- PHSP; +0.001500000 D- D*+ K- PHSP; #[Reconstructed PDG2011] +0.0015 D*- D*+ K- PHSP; +# +0.0025 D0 D- anti-K*0 PHSP; +0.0025 D*0 D- anti-K*0 PHSP; +0.0025 D0 D*- anti-K*0 PHSP; +0.0050 D*0 D*- anti-K*0 PHSP; +# +0.0025 D0 anti-D0 K*- PHSP; +0.0025 D*0 anti-D0 K*- PHSP; +0.0025 D0 anti-D*0 K*- PHSP; +0.0050 D*0 anti-D*0 K*- PHSP; +# +0.0005 D- D+ K*- PHSP; +0.0005 D*- D+ K*- PHSP; +0.0005 D- D*+ K*- PHSP; +0.0010 D*- D*+ K*- PHSP; +# +# B->D(*)D(*). See Ref [B1]: +# +0.000380000 D- D0 PHSP; #[Reconstructed PDG2011] +0.000390000 D*- D0 SVS; #[Reconstructed PDG2011] +0.000630000 D*0 D- SVS; #[Reconstructed PDG2011] +0.000810000 D*0 D*- SVV_HELAMP 0.47 0.0 0.96 0.0 0.56 0.0; #[Reconstructed PDG2011] + +# +# B -> D(*) X Exclusive Modes +# +0.005190000 D*0 pi- SVS; #[Reconstructed PDG2011] +0.004840000 D0 pi- PHSP; #[Reconstructed PDG2011] +0.013400000 rho- D0 SVS; #[Reconstructed PDG2011] +# D* rho HELAMP parameters taken from ICHEP 98-852. +0.009800000 D*0 rho- SVV_HELAMP 0.228 0.95 0.932 0.0 0.283 1.13; #[Reconstructed PDG2011] +# +0.0005 D0 pi0 pi- PHSP; +0.0005 D*0 pi0 pi- PHSP; +0.001070000 D+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.001350000 D*+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +# D a1 updated Ref. [B1]: +0.004000000 a_1- D0 SVS; #[Reconstructed PDG2011] +0.000200000 D0 rho0 pi- PHSP; #[Reconstructed PDG2011] +0.006800000 D0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +# SVV_HELAMP from factorization, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: +# updated Ref. [B1]: +# +# +0.019000000 D*0 a_1- SVV_HELAMP 0.200 0.0 0.866 0.0 0.458 0.0; #[Reconstructed PDG2011] +# +0.00150 D*0 rho0 pi- PHSP; +0.000500000 D*0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +0.0020 D+ rho- pi- PHSP; +0.0020 D+ pi0 pi- pi- PHSP; +0.0020 D*+ rho- pi- PHSP; +0.015000000 D*+ pi0 pi- pi- PHSP; #[Reconstructed PDG2011] +0.0005 D*0 rho- pi0 PHSP; +0.0005 D*0 pi- pi0 pi0 PHSP; +# +# B->D** pi and D** rho, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html +# further update October 26, 2004 Lange +# +0.000876 D_10 pi- SVS; +0.0005 D'_10 pi- SVS; +0.00052 D_2*0 pi- STS; +0.0007 D_10 rho- PHSP; +0.0022 D'_10 rho- PHSP; +0.0038 D_2*0 rho- PHSP; +0.00061 D_0*0 pi- PHSP; +# +# +# B->DK, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: +# update: Ref [B1]: +# +0.000368000 D0 K- PHSP; #[Reconstructed PDG2011] +0.000421000 D*0 K- SVS; #[Reconstructed PDG2011] +0.000530000 K*- D0 SVS; #[Reconstructed PDG2011] +0.000810000 D*0 K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; #[Reconstructed PDG2011] +#October 26, 2004 Lange +0.0000005 D- pi0 PHSP; +0.0000005 D*- pi0 SVS; +0.000011 D- anti-K0 PHSP; +0.000006 D*- anti-K0 SVS; +# +#October 26, 2004 - Lange +0.00075 D0 D_s0*- PHSP; +0.0009 D*0 D_s0*- SVS; +0.003100000 D_s1- D0 SVS; #[Reconstructed PDG2011] +0.012000000 D*0 D_s1- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00055 D0 K- anti-K0 PHSP; +0.00075 D0 K- anti-K*0 PHSP; +0.001500000 D*0 K- anti-K*0 PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.002750000 D0 omega pi- PHSP; #[Reconstructed PDG2011] +0.004500000 D*0 omega pi- PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00045 D0 D'_s1- PHSP; +0.00094 D*0 D'_s1- PHSP; +# +# Lam_c X / Sigma_c X 4.0 % +# +#0.04000 cd_1 anti-uu_1 PYTHIA 63; +0.032587684 cd_1 anti-uu_1 PYTHIA 63; +# +# Xi_c X 2.5% +# +#0.02400 cs_1 anti-uu_1 PYTHIA 63; +0.008887593 cs_1 anti-uu_1 PYTHIA 63; +# +# +0.214329978 anti-u d c anti-u PYTHIA 23; +0.040912464 anti-u d c anti-u PYTHIA 43; +0.022218888 anti-u s c anti-u PYTHIA 43; +#lange - try to crank up the psi production.... +0.073075460 anti-c s c anti-u PYTHIA 43; +0.003950000 anti-c d c anti-u PYTHIA 43; +0.002962500 anti-u d u anti-u PYTHIA 23; +0.003950000 anti-c s u anti-u PYTHIA 23; +# JGS 11/5/02 This and similar a few lines above have been divided by two +# to solve a double-counting problem for this channel +0.002024389 anti-u u d anti-u PYTHIA 23; +0.000069145 anti-d d d anti-u PYTHIA 23; +0.000088900 anti-s s d anti-u PYTHIA 23; +0.002172556 anti-u u s anti-u PYTHIA 23; +0.001777537 anti-d d s anti-u PYTHIA 23; +0.001481296 anti-s s s anti-u PYTHIA 23; +0.004937500 s anti-u PYTHIA 91; +# +#### +0.000550000 D0 K- K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000750000 D0 K- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.018000000 D*0 pi+ pi- pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005700000 D*0 pi- pi- pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002600000 D*+ pi- pi- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000180000 D_s+ pi- K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000145000 D_s*+ pi- K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 D_s+ K- K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001070000 J/psi K- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000108000 J/psi eta K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000350000 J/psi omega K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011800 J/psi anti-p- Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000025800 psi(2S) pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 chi_c1 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000018000 eta K_0*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009100 eta K_2*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000024000 omega K_0*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000021000 omega K_2*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000010100 anti-K*0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001070 f_2 K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000005600 anti-K_2*0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001200 K*- anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000006100 phi K_1- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000008400 phi K_2*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000043000 K_1- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007900 eta K- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003500 phi K- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007600 K- pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 anti-K*0 pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000046000 anti-K0 pi- pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000014000 K_2*- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000980 rho- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001620 anti-p- p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000005900 anti-p- p+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003600 anti-p- p+ K*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002500 anti-p- Lambda0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003000 anti-p- Lambda0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 anti-p- Lambda0 pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004800 anti-p- Lambda0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002000 anti-p- Lambda0 f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003400 anti-Lambda0 Lambda0 K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002200 anti-Lambda0 Lambda0 K*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 Lambda_c+ anti-p- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 Lambda_c+ anti-p- pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002300000 Lambda_c+ anti-p- pi- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000035000 Sigma_c0 anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000440000 Sigma_c0 anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000440000 Sigma_c0 anti-p- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 Sigma_c++ anti-p- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay B+ +# Updated to PDG 2008 +# b -> c semileptonic +# +0.0569 anti-D*0 e+ nu_e PHOTOS HQET2 1.207 0.920 1.406 0.853; # For details see B- decay +0.0227 anti-D0 e+ nu_e PHOTOS HQET2 1.185 1.081; +0.0045 anti-D_10 e+ nu_e PHOTOS ISGW2; +0.0037 anti-D_0*0 e+ nu_e PHOTOS ISGW2; +0.0040 anti-D'_10 e+ nu_e PHOTOS ISGW2; +0.0033 anti-D_2*0 e+ nu_e PHOTOS ISGW2; +0.006100 D*- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; +0.0006 anti-D*0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; +0.0021 D- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; +0.0020 anti-D0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; + +# For muonic decays do same as for electrons +0.0569 anti-D*0 mu+ nu_mu PHOTOS HQET2 1.207 0.920 1.406 0.853; +0.0227 anti-D0 mu+ nu_mu PHOTOS HQET2 1.185 1.081; +0.0045 anti-D_10 mu+ nu_mu PHOTOS ISGW2; +0.0037 anti-D_0*0 mu+ nu_mu PHOTOS ISGW2; +0.0040 anti-D'_10 mu+ nu_mu PHOTOS ISGW2; +0.0033 anti-D_2*0 mu+ nu_mu PHOTOS ISGW2; +0.006100 D*- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0006 anti-D*0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0021 D- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0020 anti-D0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; +# +# b -> c tau nu +# +0.020000000 anti-D*0 tau+ nu_tau ISGW2; #[Reconstructed PDG2011] +0.007000000 anti-D0 tau+ nu_tau ISGW2; #[Reconstructed PDG2011] +0.0013 anti-D_10 tau+ nu_tau ISGW2; +0.0013 anti-D_0*0 tau+ nu_tau ISGW2; +0.0020 anti-D'_10 tau+ nu_tau ISGW2; +0.0020 anti-D_2*0 tau+ nu_tau ISGW2; +# +# b -> u l nu +# +# +# +# This will need check whether we get correct inclusive q2 dependence + +0.00007800 pi0 e+ nu_e PHOTOS ISGW2; # PDG2014 +0.00003800 eta e+ nu_e PHOTOS ISGW2; # PDG2014 +0.00015800 rho0 e+ nu_e PHOTOS ISGW2; # PDG2014 +0.00011900 omega e+ nu_e PHOTOS ISGW2; # PDG2014 +0.000230 eta' e+ nu_e PHOTOS ISGW2; # PDG2014 +0.000000 anti-D(2S)0 e+ nu_e PHOTOS ISGW2; +0.000000 anti-D*(2S)0 e+ nu_e PHOTOS ISGW2; +0.001948 Xu0 e+ nu_e VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; +# +# For muons do same as for electrons +0.00007800 pi0 mu+ nu_mu PHOTOS ISGW2; +0.00003800 eta mu+ nu_mu PHOTOS ISGW2; +0.00015800 rho0 mu+ nu_mu PHOTOS ISGW2; +0.00011900 omega mu+ nu_mu PHOTOS ISGW2; +0.000230 eta' mu+ nu_mu PHOTOS ISGW2; +0.000000 anti-D(2S)0 mu+ nu_mu PHOTOS ISGW2; +0.000000 anti-D*(2S)0 mu+ nu_mu PHOTOS ISGW2; +0.0020454 Xu0 mu+ nu_mu VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; +# +0.000030 pi0 tau+ nu_tau ISGW2; +0.000012 eta tau+ nu_tau ISGW2; +0.000042 rho0 tau+ nu_tau ISGW2; +0.000042 omega tau+ nu_tau ISGW2; +0.000018 eta' tau+ nu_tau ISGW2; +0.000046 a_10 tau+ nu_tau ISGW2; +0.000027 b_10 tau+ nu_tau ISGW2; +0.000004 a_00 tau+ nu_tau ISGW2; +0.000002 f_0 tau+ nu_tau ISGW2; +0.000002 f'_0 tau+ nu_tau ISGW2; +0.000023 f_1 tau+ nu_tau ISGW2; +0.000023 f'_1 tau+ nu_tau ISGW2; +0.000013 h_1 tau+ nu_tau ISGW2; +0.000013 h'_1 tau+ nu_tau ISGW2; +0.000020 f_2 tau+ nu_tau ISGW2; +0.000020 f'_2 tau+ nu_tau ISGW2; +0.000000 anti-D(2S)0 tau+ nu_tau ISGW2; +0.000000 anti-D*(2S)0 tau+ nu_tau ISGW2; +# +# +# +# b->u hadronic +# Ref. [B1]: +# +0.000016000 D_s+ pi0 PHSP; #[Reconstructed PDG2011] +0.000020 D_s*+ pi0 SVS; +# +0.000028 rho0 D_s+ SVS; +0.000028 D_s*+ rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; + +# +# b-> s gamma +# +0.000042100 K*+ gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +#0.0000135 K_1+ gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000065 K'_1+ gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000128 K'*+ gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000166 K_2*+ gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000017 K''*+ gamma HELAMP 1.0 0.0 1.0 0.0; +0.0003118 Xsu gamma BTOXSGAMMA 2; +# +0.000000550 K+ e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001550 K*+ e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000050 Xsu e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000520 K+ mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001160 K*+ mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000025 Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.0000001 K+ tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 K*+ tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 Xsu tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +# +# b -> l nu +# +0.000180000 tau+ nu_tau SLN; #[Reconstructed PDG2011] +0.000000 mu+ nu_mu PHOTOS SLN; +0.000000 e+ nu_e PHOTOS SLN; +# +#------------------------------------------------------------------------------ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv +# +# Exclusive hadronic b->u +# +0.000026 pi+ pi0 pi0 CB3PI-P00 alpha; +0.000000 pi+ pi+ pi- CB3PI-MPP alpha; +#### +0.000004070 eta pi+ PHSP; #[Reconstructed PDG2011] +0.000002330 eta K+ PHSP; #[Reconstructed PDG2011] +0.000019300 K*+ eta SVS; #[Reconstructed PDG2011] +0.000007000 rho+ eta SVS; #[Reconstructed PDG2011] +0.000002700 eta' pi+ PHSP; #[Reconstructed PDG2011] +0.000070600 eta' K+ PHSP; #[Reconstructed PDG2011] +0.000004900 K*+ eta' SVS; #[Reconstructed PDG2011] +0.000008700 rho+ eta' SVS; #[Reconstructed PDG2011] +0.000006900 omega pi+ SVS; #[Reconstructed PDG2011] +0.000006700 omega K+ SVS; #[Reconstructed PDG2011] +0.0000010 omega K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000015900 omega rho+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.0000000 phi pi+ SVS; +0.000008300 phi K+ SVS; #[Reconstructed PDG2011] +#2-body modes from Jim Olsen +# (K_S0 K- and K_L0 K- -> 1x10^-6, Jim Olsen - Mar 27, 2001) +# (pi- pi0 -> 5x10^-6 and K- pi0 -> 11x10^-6, Jim Olsen - Mar 27, 2001) +# PR LHCb 04/08/04 split into KS/KL +0.000000 K0 pi+ PHSP; +0.000011550 K_S0 pi+ PHSP; #[Reconstructed PDG2011] +0.000011550 K_L0 pi+ PHSP; #[Reconstructed PDG2011] +0.000001360 anti-K0 K+ PHSP; #[Reconstructed PDG2011] +0.000005700 pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.000012900 K+ pi0 PHSP; #[Reconstructed PDG2011] +# +# 3-body John Back (jback@slac.stanford.edu) - Oct 15, 2002 +# JGS intersperses modes with pi0->eta,eta' +# B+ modes +# +# rho0 3-body modes +0.000008300 rho0 pi+ SVS; #[Reconstructed PDG2011] +0.000003700 rho0 K+ SVS; #[Reconstructed PDG2011] +# +# rho+ 3-body modes +0.000010900 rho+ pi0 SVS; #[Reconstructed PDG2011] +0.000008000 rho+ K0 SVS; #[Reconstructed PDG2011] +# +# rho(1450) 3-body modes +0.0000022 rho(2S)0 pi+ SVS; +0.000001 rho(2S)0 K+ SVS; +# +# f0(980) 3-body modes +0.000001 f_0 pi+ PHSP; +0.0000092 f_0 K+ PHSP; +0.000001 a_0+ K0 PHSP; +0.000001 a_00 K+ PHSP; +0.000001 a_00 pi+ PHSP; +0.000001 a_0+ pi0 PHSP; + +0.000001600 f_2 pi+ PHSP; #[Reconstructed PDG2011] + +# +# K*0(892) 3-body modes +0.000045000 K_0*0 pi+ PHSP; #[Reconstructed PDG2011] +0.0000010 anti-K_0*0 K+ PHSP; +0.000002 K_0*+ pi0 PHSP; +0.000002 K_0*+ anti-K0 PHSP; +# +# K*+(892) 3-body modes +0.000006900 K*+ pi0 SVS; #[Reconstructed PDG2011] +0.000003 K*+ anti-K0 SVS; +# +# +# Non-resonant 3-body left-overs +# Most modes are set at 1e-6 +# +# pi+pi-pi+: high mass + f0(400-1200) = (1+1)e-6 +#0402270.000002 pi+ pi- pi+ PHSP; +# +# K+ pi- pi+: high mass + f0(400-1200) = (5+5)e-6 +0.000000000 K+ pi- pi+ PHSP; #[Reconstructed PDG2011] +# +# K+ K- pi+: just non-resonant +0.000005000 K+ K- pi+ PHSP; #[Reconstructed PDG2011] +# +# K+K-K+: high mass structure near 1500 + non-res: total - phiK = 30-4 +0.000025400 K+ K- K+ PHSP; #[Reconstructed PDG2011] +# +# +# K+K+pi-: suppressed mode (1e-7) +0.0000001 K+ K+ pi- PHSP; +# K-pi+pi+: suppressed mode (1e-7) +0.0000001 K- pi+ pi+ PHSP; +# +# +# K+ anti-K0 pi0 +0.000001 K+ anti-K0 pi0 PHSP; +0.000001 K+ anti-K0 eta PHSP; +0.000001 K+ anti-K0 eta' PHSP; +# +# pi+ K0 pi0 +0.000001 pi+ K0 pi0 PHSP; +0.000001 pi+ K0 eta PHSP; +0.000001 pi+ K0 eta' PHSP; +# +# pi+ pi0 pi0 +#0402270.000001 pi+ pi0 pi0 PHSP; +0.000001 pi+ pi0 eta PHSP; +0.000001 pi+ pi0 eta' PHSP; +0.000001 pi+ eta eta PHSP; +0.000001 pi+ eta eta' PHSP; +# +# K+ pi0 pi0 +0.000001 K+ pi0 pi0 PHSP; +0.000001 K+ pi0 eta PHSP; +0.000001 K+ pi0 eta' PHSP; +0.000001 K+ eta eta PHSP; +0.000001 K+ eta eta' PHSP; +0.000001 K+ eta' eta' PHSP; +# +# K+ K0 anti-K0: 4*BF(K+KsKs) (4 is a guess) +0.0000460 K+ K0 anti-K0 PHSP; +# +# pi+ K0 anti-K0 +0.000001 pi+ K0 anti-K0 PHSP; +# +#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#--------------------------------------------------------------------------- +# +#4-body modes from Andrei Gritsan +#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- +# PR LHCb 22 Apr 2004 Set long. pol. for rho rho +0.000024000 rho+ rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000010 rho0 pi+ pi0 PHSP; +0.000005 rho0 pi+ eta PHSP; +0.000002 rho0 pi+ eta' PHSP; +0.000010 omega pi+ pi0 PHSP; +0.000005 omega pi+ eta PHSP; +0.000002 omega pi+ eta' PHSP; +0.000010 rho+ pi+ pi- PHSP; +# PR Add rho- pi+ pi+ +0.000010 rho- pi+ pi+ PHSP; +0.000010 rho+ pi0 pi0 PHSP; +0.000005 rho+ pi0 eta PHSP; +0.000002 rho+ eta eta PHSP; +0.000002 rho+ pi0 eta' PHSP; +0.000010 pi- pi+ pi+ pi0 PHSP; +0.000005 pi- pi+ pi+ eta PHSP; +0.000002 pi- pi+ pi+ eta' PHSP; +0.000010 pi+ pi0 pi0 pi0 PHSP; +0.000005 pi+ eta pi0 pi0 PHSP; +0.000002 pi+ eta eta pi0 PHSP; +0.000002 pi+ eta' pi0 pi0 PHSP; +0.000001 pi+ eta' eta pi0 PHSP; +0.000020000 a_10 pi+ SVS; #[Reconstructed PDG2011] +0.000026000 a_1+ pi0 SVS; #[Reconstructed PDG2011] +0.0000067 b_10 pi+ SVS; +0.000010 b_1+ pi0 SVS; +0.000010 rho+ f_0 SVS; +0.000010 rho+ a_00 SVS; +0.000002 rho0 a_0+ SVS; +0.000010 f_0 pi+ pi0 PHSP; +0.000001 a_00 pi+ pi0 PHSP; +0.000001 a_0+ pi0 pi0 PHSP; +0.000001 a_0- pi+ pi+ PHSP; +#--- 4-body rho-K*, a1-K, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- +0.000009200 rho+ K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000010 rho0 K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000010 pi+ pi0 K*0 PHSP; +0.000005 pi+ eta K*0 PHSP; +0.000069800 pi- pi+ K*+ PHSP; #[Reconstructed PDG2011] +0.000010 pi0 pi0 K*+ PHSP; +0.000005 pi0 eta K*+ PHSP; +0.000002 eta eta K*+ PHSP; +0.000002 pi0 eta' K*+ PHSP; +0.000001 eta eta' K*+ PHSP; +0.000010 rho+ K0 pi0 PHSP; +0.000005 rho+ K0 eta PHSP; +0.000002 rho+ K0 eta' PHSP; +0.000010 rho+ K+ pi- PHSP; +0.000010 rho- K+ pi+ PHSP; +0.000005 rho0 K0 pi+ PHSP; +0.000005 rho0 K+ pi0 PHSP; +0.000002 rho0 K+ eta PHSP; +0.000001 rho0 K+ eta' PHSP; +0.000005 omega K0 pi+ PHSP; +0.000005 omega K+ pi0 PHSP; +0.000002 omega K+ eta PHSP; +0.000001 omega K+ eta' PHSP; +0.000010 pi+ pi+ pi- K0 PHSP; +0.000010 pi+ pi0 pi0 K0 PHSP; +0.000005 pi+ eta pi0 K0 PHSP; +0.000002 pi+ eta eta K0 PHSP; +0.000010 pi+ pi- pi0 K+ PHSP; +0.000005 pi+ pi- eta K+ PHSP; +0.000010 pi0 pi0 pi0 K+ PHSP; +0.000005 pi0 pi0 eta K+ PHSP; +0.000002 pi0 eta eta K+ PHSP; +0.000002 pi0 pi0 eta' K+ PHSP; +0.000001 pi0 eta eta' K+ PHSP; +0.000010 rho+ K_0*0 PHSP; +0.000006 rho0 K_0*+ PHSP; +0.000010 pi+ pi0 K_0*0 PHSP; +0.000010 pi0 pi0 K_0*+ PHSP; +0.000005200 K*+ f_0 SVS; #[Reconstructed PDG2011] +0.000010 a_10 K+ SVS; +0.000035000 a_1+ K0 SVS; #[Reconstructed PDG2011] +0.0000091 b_10 K+ SVS; +0.000010 b_1+ K0 SVS; +0.000005 K*+ a_00 SVS; +0.000005 K*0 a_0+ SVS; +#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ +0.000001 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 phi rho+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 phi pi+ pi0 PHSP; +0.0000005 phi pi+ eta PHSP; +0.0000002 phi pi+ eta' PHSP; +0.000001 K+ K- rho+ PHSP; +0.000001 K0 anti-K0 rho+ PHSP; +0.000001 anti-K0 K+ rho0 PHSP; +0.000001 anti-K0 K+ omega PHSP; +0.000001 K+ K- pi+ pi0 PHSP; +0.0000005 K+ K- pi+ eta PHSP; +0.0000002 K+ K- pi+ eta' PHSP; +0.000001 K0 anti-K0 pi+ pi0 PHSP; +0.0000005 K0 anti-K0 pi+ eta PHSP; +0.0000002 K0 anti-K0 pi+ eta' PHSP; +0.000001 anti-K0 K+ pi+ pi- PHSP; +0.000001 anti-K0 K+ pi0 pi0 PHSP; +0.0000005 anti-K0 K+ pi0 eta PHSP; +0.0000002 anti-K0 K+ eta eta PHSP; +0.0000002 anti-K0 K+ pi0 eta' PHSP; +0.0000001 anti-K0 K+ eta eta' PHSP; +0.000001 K*+ K- pi+ PHSP; +0.000001 K*- K+ pi+ PHSP; +0.000001 K*0 anti-K0 pi+ PHSP; +0.000001 K0 anti-K*0 pi+ PHSP; +0.000001 K+ anti-K*0 pi0 PHSP; +0.0000005 K+ anti-K*0 eta PHSP; +0.0000002 K+ anti-K*0 eta' PHSP; +0.000001 K*+ anti-K0 pi0 PHSP; +0.0000005 K*+ anti-K0 eta PHSP; +0.0000002 K*+ anti-K0 eta' PHSP; +#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- +0.000010000 phi K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000010 phi K0 pi+ PHSP; +0.000010 phi K+ pi0 PHSP; +0.000005 phi K+ eta PHSP; +0.000002 phi K+ eta' PHSP; +0.000026000 K- K+ K*+ PHSP; #[Reconstructed PDG2011] +0.000010 K+ K*- K+ PHSP; +0.000010 K+ K*0 anti-K0 PHSP; +0.000010 K+ K0 anti-K*0 PHSP; +0.000010 K0 K*+ anti-K0 PHSP; +0.000010 K+ K- K+ pi0 PHSP; +0.000005 K+ K- K+ eta PHSP; +0.000002 K+ K- K+ eta' PHSP; +0.000010 K+ K- K0 pi+ PHSP; +0.000010 K0 anti-K0 K+ pi0 PHSP; +0.000005 K0 anti-K0 K+ eta PHSP; +0.000002 K0 anti-K0 K+ eta' PHSP; +0.000010 K0 anti-K0 K0 pi+ PHSP; +0.000007000 phi K_0*+ PHSP; #[Reconstructed PDG2011] +0.000010 K- K+ K_0*+ PHSP; +0.000010 K+ K+ K_0*- PHSP; +0.000010 K+ anti-K_0*0 K0 PHSP; +0.000010 K+ K_0*0 anti-K0 PHSP; +0.000002 phi K'_1+ PHSP; +0.000002 K- K+ K'_1+ PHSP; +#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- +0.000001 phi anti-K0 K+ PHSP; +0.000001 K+ K- K+ anti-K0 PHSP; +0.000001 K0 anti-K0 anti-K0 K+ PHSP; +# +#5-body modes from Jim Smith - 1/30/05 +#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- +0.000010 rho0 rho0 pi+ PHSP; +0.000010 rho+ rho0 pi0 PHSP; +0.000005 rho+ rho0 eta PHSP; +0.000002 rho+ rho0 eta' PHSP; +0.000010 rho+ rho- pi+ PHSP; +0.000010 omega rho0 pi+ PHSP; +0.000010 omega rho+ pi0 PHSP; +0.000005 omega rho+ eta PHSP; +0.000002 omega rho+ eta' PHSP; +0.000002 rho0 pi+ pi- pi+ PHSP; +0.000002 rho0 pi+ pi0 pi0 PHSP; +0.000001 rho0 pi+ eta pi0 PHSP; +0.000001 rho0 pi+ eta' pi0 PHSP; +0.000002 omega pi+ pi0 pi0 PHSP; +0.000001 omega pi+ eta pi0 PHSP; +0.000001 omega pi+ eta' pi0 PHSP; +0.000002 rho- pi+ pi+ pi0 PHSP; +0.000001 rho- pi+ pi+ eta PHSP; +0.000001 rho- pi+ pi+ eta' PHSP; +0.000002 rho+ pi+ pi- pi0 PHSP; +0.000001 rho+ pi+ pi- eta PHSP; +0.000001 rho+ pi+ pi- eta' PHSP; +0.000002 rho+ pi0 pi0 pi0 PHSP; +0.000001 rho+ pi0 eta pi0 PHSP; +0.000001 rho+ eta eta pi0 PHSP; +0.000001 rho+ pi0 eta' pi0 PHSP; +0.000001 pi- pi+ pi+ pi0 pi0 PHSP; +0.000001 pi- pi+ pi+ eta pi0 PHSP; +0.000001 pi- pi+ pi+ eta' pi0 PHSP; +0.000001 pi+ pi0 pi0 pi0 pi0 PHSP; +0.000001 pi+ eta pi0 pi0 pi0 PHSP; +0.000001 pi+ eta' pi0 pi0 pi0 PHSP; +0.000010 a_1+ rho0 PHSP; +0.000010 a_1+ omega PHSP; +0.000010 a_1+ f_0 PHSP; +0.000010 a_10 pi+ pi0 PHSP; +0.000005 a_10 pi+ eta PHSP; +0.000002 a_10 pi+ eta' PHSP; +0.000010 a_1- pi+ pi+ PHSP; +0.000010 a_1+ pi+ pi- PHSP; +0.000010 a_1+ pi0 pi0 PHSP; +0.000005 a_1+ pi0 eta PHSP; +0.000002 a_1+ pi0 eta' PHSP; +0.000010 rho+ f_0 pi0 PHSP; +0.000005 rho+ f_0 eta PHSP; +0.000002 rho+ f_0 eta' PHSP; +0.000010 rho0 f_0 pi+ PHSP; +0.000010 omega f_0 pi+ PHSP; +0.000010 rho+ a_00 pi0 PHSP; +0.000005 rho+ a_00 eta PHSP; +0.000002 rho+ a_00 eta' PHSP; +0.000010 rho- a_0+ pi+ PHSP; +0.000010 rho0 a_0+ pi0 PHSP; +0.000005 rho0 a_0+ eta PHSP; +0.000002 rho0 a_0+ eta' PHSP; +0.000002 f_0 pi+ pi- pi+ PHSP; +0.000002 f_0 pi+ pi0 pi0 PHSP; +0.000001 f_0 pi+ pi0 eta PHSP; +0.000001 f_0 pi+ pi0 eta' PHSP; +0.000001 a_00 pi+ pi0 pi0 PHSP; +0.000001 a_0+ pi0 pi0 pi0 PHSP; +0.000001 a_0- pi+ pi+ pi0 PHSP; +#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- +0.000010 rho+ K*+ pi- PHSP; +0.000010 rho- K*+ pi+ PHSP; +0.000010 rho+ K*0 pi0 PHSP; +0.000005 rho+ K*0 eta PHSP; +0.000002 rho+ K*0 eta' PHSP; +0.000010 rho0 K*0 pi+ PHSP; +0.000010 rho0 K*+ pi0 PHSP; +0.000005 rho0 K*+ eta PHSP; +0.000002 rho0 K*+ eta' PHSP; +0.000010 omega K*0 pi+ PHSP; +0.000010 omega K*+ pi0 PHSP; +0.000005 omega K*+ eta PHSP; +0.000002 omega K*+ eta' PHSP; +0.000010 pi+ pi- K*0 pi+ PHSP; +0.000010 pi+ pi0 K*0 pi0 PHSP; +0.000005 pi+ eta K*0 pi0 PHSP; +0.000002 pi+ eta' K*0 pi0 PHSP; +0.000010 pi- pi+ K*+ pi0 PHSP; +0.000005 pi- pi+ K*+ eta PHSP; +0.000002 pi- pi+ K*+ eta' PHSP; +0.000010 pi0 pi0 K*+ pi0 PHSP; +0.000005 pi0 eta K*+ pi0 PHSP; +0.000002 eta eta K*+ pi0 PHSP; +0.000002 pi0 eta' K*+ pi0 PHSP; +0.000001 eta eta' K*+ pi0 PHSP; +0.000010 rho+ K0 pi+ pi- PHSP; +0.000010 rho+ K0 pi0 pi0 PHSP; +0.000005 rho+ K0 eta pi0 PHSP; +0.000002 rho+ K0 eta' pi0 PHSP; +0.000010 rho+ K+ pi- pi0 PHSP; +0.000010 rho- K+ pi+ pi0 PHSP; +0.000010 rho- K0 pi+ pi+ PHSP; +0.000010 rho0 K0 pi+ pi0 PHSP; +0.000010 rho0 K+ pi0 pi0 PHSP; +0.000005 rho0 K+ eta pi0 PHSP; +0.000002 rho0 K+ eta' pi0 PHSP; +0.000010 omega K0 pi+ pi0 PHSP; +0.000010 omega K+ pi0 pi0 PHSP; +0.000005 omega K+ eta pi0 PHSP; +0.000002 omega K+ eta' pi0 PHSP; +0.000002 pi+ pi+ pi- K0 pi0 PHSP; +0.000001 pi+ pi+ pi- K0 eta PHSP; +0.000001 pi+ pi+ pi- K0 eta' PHSP; +0.000002 pi+ pi0 pi0 K0 pi0 PHSP; +0.000001 pi+ eta pi0 K0 pi0 PHSP; +0.000001 pi+ eta eta K0 pi0 PHSP; +0.000002 pi+ pi- pi+ K+ pi- PHSP; +0.000002 pi+ pi- pi0 K+ pi0 PHSP; +0.000001 pi+ pi- eta K+ pi0 PHSP; +0.000001 pi+ pi- eta' K+ pi0 PHSP; +0.000002 pi0 pi0 pi0 K+ pi0 PHSP; +0.000001 pi0 pi0 eta K+ pi0 PHSP; +0.000001 pi0 eta eta K+ pi0 PHSP; +0.000001 pi0 pi0 eta' K+ pi0 PHSP; +0.000001 pi0 eta eta' K+ pi0 PHSP; +0.000010 rho0 K_0*0 pi+ PHSP; +0.000010 rho+ K_0*0 pi0 PHSP; +0.000005 rho+ K_0*0 eta PHSP; +0.000002 rho+ K_0*0 eta' PHSP; +0.000010 rho+ K_0*+ pi- PHSP; +0.000010 rho0 K_0*+ pi0 PHSP; +0.000005 rho0 K_0*+ eta PHSP; +0.000002 rho0 K_0*+ eta' PHSP; +0.000010 pi+ pi+ K_0*0 pi- PHSP; +0.000010 pi+ pi0 K_0*0 pi0 PHSP; +0.000005 pi+ pi0 K_0*0 eta PHSP; +0.000002 pi+ pi0 K_0*0 eta' PHSP; +0.000010 pi0 pi0 K_0*+ pi0 PHSP; +0.000005 pi0 pi0 K_0*+ eta PHSP; +0.000002 pi0 pi0 K_0*+ eta' PHSP; +0.000010 K*0 f_0 pi+ PHSP; +0.000010 K*+ f_0 pi0 PHSP; +0.000005 K*+ f_0 eta PHSP; +0.000002 K*+ f_0 eta' PHSP; +0.000020 a_10 K*+ PHSP; +0.000010 a_10 K+ pi0 PHSP; +0.000010 a_10 K0 pi+ PHSP; +0.000020 a_1+ K*0 PHSP; +0.000010 a_1+ K+ pi- PHSP; +0.000010 a_1+ K0 pi0 PHSP; +0.000005 K*+ a_00 pi0 PHSP; +0.000005 K*0 a_0+ pi0 PHSP; +#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ +0.000001 K*0 anti-K*0 pi+ PHSP; +0.000001 anti-K*0 K*+ pi0 PHSP; +0.0000005 anti-K*0 K*+ eta PHSP; +0.0000002 anti-K*0 K*+ eta' PHSP; +0.000001 phi rho0 pi+ PHSP; +0.000001 phi omega pi+ PHSP; +0.000001 phi f_0 pi+ PHSP; +0.000001 phi rho+ pi0 PHSP; +0.0000005 phi rho+ eta PHSP; +0.0000002 phi rho+ eta' PHSP; +0.000001 phi pi+ pi- pi+ PHSP; +0.000001 phi pi+ pi0 pi0 PHSP; +0.0000005 phi pi+ eta pi0 PHSP; +0.0000002 phi pi+ eta' pi0 PHSP; +0.000001 anti-K0 K+ rho+ pi- PHSP; +0.000001 anti-K0 K+ rho- pi+ PHSP; +0.000001 anti-K0 K+ rho0 pi0 PHSP; +0.0000005 anti-K0 K+ rho0 eta PHSP; +0.0000002 anti-K0 K+ rho0 eta' PHSP; +0.000001 anti-K0 K+ omega pi0 PHSP; +0.000001 anti-K0 K+ f_0 pi0 PHSP; +0.000001 K+ K- rho0 pi+ PHSP; +0.000001 K+ K- rho+ pi0 PHSP; +0.0000005 K+ K- rho+ eta PHSP; +0.0000002 K+ K- rho+ eta' PHSP; +0.000001 K+ K- omega pi+ PHSP; +0.000001 K0 anti-K0 rho0 pi+ PHSP; +0.000001 K0 anti-K0 omega pi+ PHSP; +0.000001 K0 anti-K0 f_0 pi+ PHSP; +0.000001 K0 anti-K0 rho+ pi0 PHSP; +0.0000005 K0 anti-K0 rho+ eta PHSP; +0.0000002 K0 anti-K0 rho+ eta' PHSP; +0.000001 K0 K- rho+ pi+ PHSP; +0.0000002 K0 K- pi+ pi+ pi0 PHSP; +0.0000001 K0 K- pi+ pi+ eta PHSP; +0.0000001 K0 K- pi+ pi+ eta' PHSP; +0.0000002 K+ K- pi+ pi- pi+ PHSP; +0.0000002 K+ K- pi+ pi0 pi0 PHSP; +0.0000001 K+ K- pi+ eta pi0 PHSP; +0.0000001 K+ K- pi+ eta' pi0 PHSP; +0.0000002 K0 anti-K0 pi+ pi- pi+ PHSP; +0.0000002 K0 anti-K0 pi+ pi0 pi0 PHSP; +0.0000001 K0 anti-K0 pi+ eta pi0 PHSP; +0.0000001 K0 anti-K0 pi+ eta' pi0 PHSP; +0.0000002 anti-K0 K+ pi+ pi- pi0 PHSP; +0.0000001 anti-K0 K+ pi+ pi- eta PHSP; +0.0000001 anti-K0 K+ pi+ pi- eta' PHSP; +0.0000002 anti-K0 K+ pi0 pi0 pi0 PHSP; +0.0000001 anti-K0 K+ pi0 eta pi0 PHSP; +0.0000001 anti-K0 K+ pi0 eta' pi0 PHSP; +0.000001 K*0 K- pi+ pi+ PHSP; +0.000001 K*- K0 pi+ pi+ PHSP; +0.000001 K*+ K- pi+ pi0 PHSP; +0.000001 K*- K+ pi+ pi0 PHSP; +0.000001 K*0 anti-K0 pi+ pi0 PHSP; +0.000001 K0 anti-K*0 pi+ pi0 PHSP; +0.000001 K+ anti-K*0 pi0 pi0 PHSP; +0.0000005 K+ anti-K*0 eta pi0 PHSP; +0.0000002 K+ anti-K*0 eta' pi0 PHSP; +0.000001 K*+ anti-K0 pi0 pi0 PHSP; +0.0000005 K*+ anti-K0 eta pi0 PHSP; +0.0000002 K*+ anti-K0 eta' pi0 PHSP; +#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- +0.000010 phi K*+ pi0 PHSP; +0.000010 phi K+ rho0 PHSP; +0.000010 phi K+ omega PHSP; +0.000010 phi K+ f_0 PHSP; +0.000010 phi K0 rho+ PHSP; +0.000010 phi K0 pi+ pi0 PHSP; +0.000010 phi K+ pi+ pi- PHSP; +0.000010 phi K+ pi0 pi0 PHSP; +0.000005 phi K+ eta pi0 PHSP; +0.000002 phi K+ eta' pi0 PHSP; +0.000010 K- K+ K*+ pi0 PHSP; +0.000010 K+ K*- K+ pi0 PHSP; +0.000010 K+ K*0 anti-K0 pi0 PHSP; +0.000010 K+ K0 anti-K*0 pi0 PHSP; +0.000010 K0 K*+ anti-K0 pi0 PHSP; +0.000010 K- K+ K+ rho0 PHSP; +0.000010 K- K+ K+ omega PHSP; +0.000010 K- K+ K+ f_0 PHSP; +0.000010 K- K+ K0 rho+ PHSP; +0.000010 K+ K- K+ pi0 pi0 PHSP; +0.000005 K+ K- K+ eta pi0 PHSP; +0.000002 K+ K- K+ eta' pi0 PHSP; +0.000010 K+ K- K0 pi+ pi0 PHSP; +0.000010 K0 anti-K0 K+ pi0 pi0 PHSP; +0.000005 K0 anti-K0 K+ eta pi0 PHSP; +0.000002 K0 anti-K0 K+ eta' pi0 PHSP; +0.000010 K0 anti-K0 K0 pi+ pi0 PHSP; +0.000010 phi K_0*0 pi+ PHSP; +0.000010 phi K_0*+ pi0 PHSP; +0.000005 phi K_0*+ eta PHSP; +0.000002 phi K_0*+ eta' PHSP; +0.000010 K- K+ K_0*+ pi0 PHSP; +0.000005 K- K+ K_0*+ eta PHSP; +0.000002 K- K+ K_0*+ eta' PHSP; +0.000010 K+ K+ K_0*- pi0 PHSP; +0.000005 K+ K+ K_0*- eta PHSP; +0.000002 K+ K+ K_0*- eta' PHSP; +0.000010 K- K+ K_0*0 pi+ PHSP; +0.000010 K+ K+ anti-K_0*0 pi- PHSP; +0.000010 K0 K0 anti-K_0*0 pi+ PHSP; +0.000010 K+ anti-K_0*0 K0 pi0 PHSP; +0.000005 K+ anti-K_0*0 K0 eta PHSP; +0.000002 K+ anti-K_0*0 K0 eta' PHSP; +0.000010 K+ K_0*0 anti-K0 pi0 PHSP; +0.000005 K+ K_0*0 anti-K0 eta PHSP; +0.000002 K+ K_0*0 anti-K0 eta' PHSP; +0.000002 phi K'_10 pi+ PHSP; +0.000002 phi K'_1+ pi0 PHSP; +0.000001 phi K'_1+ eta PHSP; +0.000001 phi K'_1+ eta' PHSP; +0.000002 K- K+ K'_10 pi+ PHSP; +0.000002 K- K+ K'_1+ pi0 PHSP; +0.000001 K- K+ K'_1+ eta PHSP; +0.000001 K- K+ K'_1+ eta' PHSP; +0.000002 K+ K+ K'_1- pi0 PHSP; +0.000002 K+ K+ anti-K'_10 pi- PHSP; +0.000002 K0 anti-K0 K'_10 pi+ PHSP; +0.000002 K0 anti-K0 K'_1+ pi0 PHSP; +0.000001 K0 anti-K0 K'_1+ eta PHSP; +0.000001 K0 anti-K0 K'_1+ eta' PHSP; +0.000002 K0 K0 anti-K'_10 pi+ PHSP; +0.000002 anti-K0 anti-K0 K'_1+ pi0 PHSP; +0.000001 anti-K0 anti-K0 K'_1+ eta PHSP; +0.000001 anti-K0 anti-K0 K'_1+ eta' PHSP; +0.000010 K+ K0 anti-K'_10 pi0 PHSP; +0.000005 K+ K0 anti-K'_10 eta PHSP; +0.000002 K+ K0 anti-K'_10 eta' PHSP; +0.000010 K+ K'_10 anti-K0 pi0 PHSP; +0.000005 K+ K'_10 anti-K0 eta PHSP; +0.000002 K+ K'_10 anti-K0 eta' PHSP; +#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ +0.000004900 phi phi K+ PHSP; #[Reconstructed PDG2011] +0.000001 phi phi pi+ PHSP; +0.000001 phi K+ K- K+ PHSP; +0.000001 phi K0 anti-K0 K+ PHSP; +0.000001 phi K0 anti-K0 pi+ PHSP; +0.000001 phi anti-K0 K+ pi0 PHSP; +0.000001 K+ K- K+ K- pi+ PHSP; +0.000001 K+ K- K0 anti-K0 pi+ PHSP; +0.000001 K+ K- K+ anti-K0 pi0 PHSP; +0.000001 K0 anti-K0 anti-K0 K+ pi0 PHSP; +#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ +0.000003 phi phi K*+ PHSP; +0.000001 phi K+ K- K*+ PHSP; +0.000001 phi K0 anti-K0 K*+ PHSP; +0.000001 phi anti-K0 K+ K*0 PHSP; +0.000001 phi K+ K- K+ pi0 PHSP; +0.000001 phi K+ K- K0 pi+ PHSP; +0.000001 phi K0 anti-K0 K+ pi0 PHSP; +0.000001 phi K0 anti-K0 K0 pi+ PHSP; +0.000001 phi anti-K0 K+ K+ pi- PHSP; +#--- 6-body a1a1 ------------ +0.000050 a_1+ a_10 PHSP; +# +# B -> cc= s sum = 1.92% +# +0.001014000 J/psi K+ SVS; #[Reconstructed PDG2011] +0.001430000 J/psi K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.000049000 J/psi pi+ SVS; #[Reconstructed PDG2011] +0.000050000 J/psi rho+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.0002 J/psi K0 pi+ PHSP; +0.0001 J/psi K+ pi0 PHSP; +#rl0.0007 J/psi K+ pi- pi+ PHSP; +#rl0.00035 J/psi K+ pi0 pi0 PHSP; +#rl0.00035 J/psi K0 pi+ pi0 PHSP; +0.0001 J/psi K'_1+ SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; +0.0005 J/psi K_2*+ PHSP; +0.001800000 J/psi K_1+ SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] +0.000052000 J/psi phi K+ PHSP; #[Reconstructed PDG2011] +# +0.000646000 psi(2S) K+ SVS; #[Reconstructed PDG2011] +0.000620000 psi(2S) K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.0004 psi(2S) K0 pi+ PHSP; +0.0002 psi(2S) K+ pi0 PHSP; +0.001900000 psi(2S) K+ pi- pi+ PHSP; #[Reconstructed PDG2011] +0.0001 psi(2S) K+ pi0 pi0 PHSP; +0.0001 psi(2S) K0 pi+ pi0 PHSP; +0.0004 psi(2S) K_1+ PHSP; +# +0.000910000 eta_c K+ PHSP; #[Reconstructed PDG2011] +0.001200000 K*+ eta_c SVS; #[Reconstructed PDG2011] +0.0002 eta_c K0 pi+ PHSP; +0.0001 eta_c K+ pi0 PHSP; +0.0002 eta_c K+ pi- pi+ PHSP; +0.0001 eta_c K+ pi0 pi0 PHSP; +0.0001 eta_c K0 pi+ pi0 PHSP; +# +0.000340000 eta_c(2S) K+ PHSP; #[Reconstructed PDG2011] +0.00048 K*+ eta_c(2S) SVS; +0.00008 eta_c(2S) K0 pi+ PHSP; +0.00005 eta_c(2S) K+ pi0 PHSP; +0.00008 eta_c(2S) K+ pi- pi+ PHSP; +0.00005 eta_c(2S) K+ pi0 pi0 PHSP; +0.00005 eta_c(2S) K0 pi+ pi0 PHSP; +# +0.000133000 chi_c0 K+ PHSP; #[Reconstructed PDG2011] +0.0004 K*+ chi_c0 SVS; +0.0002 chi_c0 K0 pi+ PHSP; +0.0001 chi_c0 K+ pi0 PHSP; +0.0002 chi_c0 K+ pi- pi+ PHSP; +0.0001 chi_c0 K+ pi0 pi0 PHSP; +0.0001 chi_c0 K0 pi+ pi0 PHSP; +# +0.000460000 chi_c1 K+ SVS; #[Reconstructed PDG2011] +0.000300000 chi_c1 K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.0004 chi_c1 K0 pi+ PHSP; +0.0002 chi_c1 K+ pi0 PHSP; +0.0004 chi_c1 K+ pi- pi+ PHSP; +0.0002 chi_c1 K+ pi0 pi0 PHSP; +0.0002 chi_c1 K0 pi+ pi0 PHSP; +# +0.00002 chi_c2 K+ STS; +0.00002 chi_c2 K*+ PHSP; +0.0002 chi_c2 K0 pi+ PHSP; +0.0001 chi_c2 K+ pi0 PHSP; +0.0002 chi_c2 K+ pi- pi+ PHSP; +0.0001 chi_c2 K+ pi0 pi0 PHSP; +0.0001 chi_c2 K0 pi+ pi0 PHSP; +# +0.000490000 psi(3770) K+ SVS; #[Reconstructed PDG2011] +0.0005 psi(3770) K*+ PHSP; +0.0003 psi(3770) K0 pi+ PHSP; +0.0002 psi(3770) K+ pi0 PHSP; +0.0002 psi(3770) K+ pi- pi+ PHSP; +0.0001 psi(3770) K+ pi0 pi0 PHSP; +0.0001 psi(3770) K0 pi+ pi0 PHSP; +0.0003 psi(3770) K_1+ PHSP; +# +# b -> c (sc=) -> D Ds X Sum = 10% +# +0.010000000 anti-D0 D_s+ PHSP; #[Reconstructed PDG2011] +0.008200000 anti-D*0 D_s+ SVS; #[Reconstructed PDG2011] +0.007600000 D_s*+ anti-D0 SVS; #[Reconstructed PDG2011] +0.017100000 D_s*+ anti-D*0 SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; #[Reconstructed PDG2011] +0.0006 anti-D'_10 D_s+ SVS; +0.0012 anti-D'_10 D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0012 anti-D_10 D_s+ SVS; +0.0024 anti-D_10 D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0042 anti-D_2*0 D_s+ STS; +0.0040 anti-D_2*0 D_s*+ PHSP; +# +# +# +# +# +0.0036 D_s+ D- pi+ PHSP; +0.0018 D_s+ anti-D0 pi0 PHSP; +0.0037 D_s*+ D- pi+ PHSP; +0.0018 D_s*+ anti-D0 pi0 PHSP; +0.0033 D_s+ D- pi+ pi0 PHSP; +0.0033 D_s+ anti-D0 pi+ pi- PHSP; +0.0008 D_s+ anti-D0 pi0 pi0 PHSP; +0.0033 D_s*+ D- pi+ pi0 PHSP; +0.0033 D_s*+ anti-D0 pi+ pi- PHSP; +0.0008 D_s*+ anti-D0 pi0 pi0 PHSP; +# +# b -> c (sc=) -> D D= K X Sum = 8% +# update: Ref. [B1]: +# update October 26, 2004 +# External W-emission amplitude +0.0017 anti-D0 D+ K0 PHSP; +0.0052 anti-D0 D*+ K0 PHSP; +0.0031 anti-D*0 D+ K0 PHSP; +0.007800000 anti-D*0 D*+ K0 PHSP; #[Reconstructed PDG2011] +# External+internal W-emission amplitude +0.002100000 anti-D0 D0 K+ PHSP; #[Reconstructed PDG2011] +0.0018 anti-D*0 D0 K+ PHSP; +0.004700000 anti-D0 D*0 K+ PHSP; #[Reconstructed PDG2011] +0.005300000 anti-D*0 D*0 K+ PHSP; #[Reconstructed PDG2011] +# Internal W-emission amplitude (color suppressed modes) +0.0005 D+ D- K+ PHSP; +0.0005 D*+ D- K+ PHSP; +0.001500000 D+ D*- K+ PHSP; #[Reconstructed PDG2011] +0.0015 D*+ D*- K+ PHSP; +# +0.0025 anti-D0 D+ K*0 PHSP; +0.0025 anti-D*0 D+ K*0 PHSP; +0.0025 anti-D0 D*+ K*0 PHSP; +0.0050 anti-D*0 D*+ K*0 PHSP; +# +0.0025 anti-D0 D0 K*+ PHSP; +0.0025 anti-D*0 D0 K*+ PHSP; +0.0025 anti-D0 D*0 K*+ PHSP; +0.0050 anti-D*0 D*0 K*+ PHSP; +# +0.0005 D+ D- K*+ PHSP; +0.0005 D*+ D- K*+ PHSP; +0.0005 D+ D*- K*+ PHSP; +0.0010 D*+ D*- K*+ PHSP; +# +# B->D(*)D(*). See Ref [B1]: +# +0.000380000 D+ anti-D0 PHSP; #[Reconstructed PDG2011] +0.000390000 D*+ anti-D0 SVS; #[Reconstructed PDG2011] +0.000630000 anti-D*0 D+ SVS; #[Reconstructed PDG2011] +0.000810000 anti-D*0 D*+ SVV_HELAMP 0.56 0.0 0.96 0.0 0.47 0.0; #[Reconstructed PDG2011] + +# +# B -> D(*) X Exclusive Modes +# October 26, 2004 Lange update +0.005190000 anti-D*0 pi+ SVS; #[Reconstructed PDG2011] +0.004840000 anti-D0 pi+ PHSP; #[Reconstructed PDG2011] +0.013400000 rho+ anti-D0 SVS; #[Reconstructed PDG2011] +# D* rho HELAMP parameters taken from ICHEP 98-852. +0.009800000 anti-D*0 rho+ SVV_HELAMP 0.283 1.13 0.932 0.0 0.228 0.95; #[Reconstructed PDG2011] +# +0.0005 anti-D0 pi0 pi+ PHSP; +0.0005 anti-D*0 pi0 pi+ PHSP; +0.001070000 D- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.001350000 D*- pi+ pi+ PHSP; #[Reconstructed PDG2011] +# +# D a1 updated Ref. [B1]: +0.004000000 a_1+ anti-D0 SVS; #[Reconstructed PDG2011] +0.000200000 anti-D0 rho0 pi+ PHSP; #[Reconstructed PDG2011] +0.006800000 anti-D0 pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] +# +# SVV_HELAMP from factorization, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: +# updated Ref. [B1]: +# October 26, 2004 Lange update +# +0.019000000 anti-D*0 a_1+ SVV_HELAMP 0.458 0.0 0.866 0.0 0.200 0.0; #[Reconstructed PDG2011] +# +0.00150 anti-D*0 rho0 pi+ PHSP; +0.000500000 anti-D*0 pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] +# +0.0020 D- rho+ pi+ PHSP; +0.0020 D- pi0 pi+ pi+ PHSP; +0.0020 D*- rho+ pi+ PHSP; +0.015000000 D*- pi0 pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.0005 anti-D*0 rho+ pi0 PHSP; +0.0005 anti-D*0 pi+ pi0 pi0 PHSP; +# +# B->D** pi and D** rho, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html +# +# +0.000876 anti-D_10 pi+ SVS; +0.0005 anti-D'_10 pi+ SVS; +0.00052 anti-D_2*0 pi+ STS; +0.0007 anti-D_10 rho+ PHSP; +0.0022 anti-D'_10 rho+ PHSP; +0.0038 anti-D_2*0 rho+ PHSP; +0.00061 anti-D_0*0 pi+ PHSP; +# +# +# B->DK, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: +# update: Ref [B1]: +# +0.000368000 anti-D0 K+ PHSP; #[Reconstructed PDG2011] +0.000421000 anti-D*0 K+ SVS; #[Reconstructed PDG2011] +0.000530000 K*+ anti-D0 SVS; #[Reconstructed PDG2011] +0.000810000 anti-D*0 K*+ SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; #[Reconstructed PDG2011] +#October 26, 2004 Lange +0.0000005 D+ pi0 PHSP; +0.0000005 D*+ pi0 SVS; +0.000011 D+ anti-K0 PHSP; +0.000006 D*+ anti-K0 SVS; +# +#October 26, 2004 - Lange +0.00075 anti-D0 D_s0*+ PHSP; +0.00090 anti-D*0 D_s0*+ SVS; +0.003100000 D_s1+ anti-D0 SVS; #[Reconstructed PDG2011] +0.012000000 anti-D*0 D_s1+ SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.000550000 anti-D0 K+ anti-K0 PHSP; #[Reconstructed PDG2011] +0.000750000 anti-D0 K+ anti-K*0 PHSP; #[Reconstructed PDG2011] +0.00150 anti-D*0 K+ anti-K*0 PHSP; +# +# Feb 2009 +# +0.002750000 anti-D0 omega pi+ PHSP; #[Reconstructed PDG2011] +0.004500000 anti-D*0 omega pi+ PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00045 anti-D0 D'_s1+ PHSP; +0.00094 anti-D*0 D'_s1+ PHSP; +# +# Lam_c X / Sigma_c X +# +#0.04000 anti-cd_1 uu_1 PYTHIA 63; +0.032572352 anti-cd_1 uu_1 PYTHIA 63; +# +# Xi_c X 2.4% + +#0.02400 anti-cs_1 uu_1 PYTHIA 63; +0.008883411 anti-cs_1 uu_1 PYTHIA 63; +# +# +0.211960282 u anti-d anti-c u PYTHIA 23; +0.040460124 u anti-d anti-c u PYTHIA 43; +0.022208435 u anti-s anti-c u PYTHIA 43; +#lange - try to crank up the psi production.... +0.073041080 c anti-s anti-c u PYTHIA 43; +0.003948141 c anti-d anti-c u PYTHIA 43; +0.002961106 u anti-d anti-u u PYTHIA 23; +0.003948141 c anti-s anti-u u PYTHIA 23; +# JGS 11/5/02 This and similar a few lines above have been divided by two +# to solve a double-counting problem for this channel +0.002023436 u anti-u anti-d u PYTHIA 23; +0.000069112 d anti-d anti-d u PYTHIA 23; +0.000088858 s anti-s anti-d u PYTHIA 23; +0.002171534 u anti-u anti-s u PYTHIA 23; +0.001776701 d anti-d anti-s u PYTHIA 23; +0.001480600 s anti-s anti-s u PYTHIA 23; +0.004935177 anti-s u PYTHIA 91; +#### +0.001500000 anti-D*0 K+ K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.018000000 anti-D*0 pi- pi+ pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005700000 anti-D*0 pi+ pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002600000 D*- pi+ pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000180000 D_s- pi+ K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000145000 D_s*- pi+ K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 D_s- K+ K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001070000 J/psi K+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000108000 J/psi eta K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000350000 J/psi omega K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011800 J/psi p+ anti-Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000025800 psi(2S) pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 chi_c1 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000018000 eta K_0*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009100 eta K_2*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000024000 omega K_0*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000021000 omega K_2*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000010100 K*0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001070 f_2 K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000005600 K_2*0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001200 K*+ K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000006100 phi K_1+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000008400 phi K_2*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000043000 K_1+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007900 eta K+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003500 phi K+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007600 K+ pi- pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 K*0 pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000046000 K0 pi+ pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000014000 K_2*+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000980 rho+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001620 p+ anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000005900 p+ anti-p- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003600 p+ anti-p- K*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002500 p+ anti-Lambda0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003000 p+ anti-Lambda0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 p+ anti-Lambda0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004800 p+ anti-Lambda0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002000 p+ anti-Lambda0 f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003400 Lambda0 anti-Lambda0 K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002200 Lambda0 anti-Lambda0 K*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 anti-Lambda_c- p+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 anti-Lambda_c- p+ pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002300000 anti-Lambda_c- p+ pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000035000 anti-Sigma_c0 p+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000440000 anti-Sigma_c0 p+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000440000 anti-Sigma_c0 p+ pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 anti-Sigma_c-- p+ pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + +#----------------------------------------------------------------- +# B references: +# +# [B1]: http://www.slac.stanford.edu/BFROOT/www/Physics/Tools/generators/dec-update/2002/Breco-recommendations.html +# +#----------------------------------------------------------------- + + +# +# +# B* mesons +# +Decay B*+ +1.0000 B+ gamma VSP_PWAVE; +Enddecay +Decay B*- +1.0000 B- gamma VSP_PWAVE; +Enddecay +Decay B*0 +1.0000 B0 gamma VSP_PWAVE; +Enddecay +Decay anti-B*0 +1.0000 anti-B0 gamma VSP_PWAVE; +Enddecay +Decay B_s*0 +1.0000 B_s0 gamma VSP_PWAVE; +Enddecay +Decay anti-B_s*0 +1.0000 anti-B_s0 gamma VSP_PWAVE; +Enddecay +# +# B_s decays. +# +# +# To count up the BR for this decay: +# awk ' /^0./{ sum = sum + $1 ;print sum } ' junk.dec +# +# anti-B_s decays. +# ------------------------------------------------------- +# whb&fkw 3/28/01 Taken from fkw's QQ tables. +# most dubious part are the B to baryons. +# fkw 4/28/00 made the Bs parallel to the Bd as best as I could +# ------------------------------------------------------- +# +# Lange - Nov14 - NOT adjusted for D_s->phipi change +# +Decay anti-B_s0 +# b --> c (l nu) +# Sum = 24.5% +0.0210 D_s+ e- anti-nu_e PHOTOS HQET 1.185 1.081; +0.0490 D_s*+ e- anti-nu_e PHOTOS HQET2 1.207 0.920 1.406 0.853; +0.0040 D_s1+ e- anti-nu_e PHOTOS ISGW2; +0.0040 D_s0*+ e- anti-nu_e PHOTOS ISGW2; +0.0070 D'_s1+ e- anti-nu_e PHOTOS ISGW2; +0.0070 D_s2*+ e- anti-nu_e PHOTOS ISGW2; +# +0.0210 D_s+ mu- anti-nu_mu PHOTOS HQET2 1.185 1.081; +0.0490 D_s*+ mu- anti-nu_mu PHOTOS HQET2 1.207 0.920 1.406 0.853; +0.0040 D_s1+ mu- anti-nu_mu PHOTOS ISGW2; +0.0040 D_s0*+ mu- anti-nu_mu PHOTOS ISGW2; +0.0070 D'_s1+ mu- anti-nu_mu PHOTOS ISGW2; +0.0070 D_s2*+ mu- anti-nu_mu PHOTOS ISGW2; +# +#0.0070 D_s+ tau- anti-nu_tau ISGW2; +#0.0150 D_s*+ tau- anti-nu_tau ISGW2; +#0.0013 D_s1+ tau- anti-nu_tau ISGW2; +#0.0013 D_s0*+ tau- anti-nu_tau ISGW2; +#0.0023 D'_s1+ tau- anti-nu_tau ISGW2; +#0.0023 D_s2*+ tau- anti-nu_tau ISGW2; +# fkw 5/04/01 changed the above to account for the non-res part that I +# had to take out. +0.0080 D_s+ tau- anti-nu_tau ISGW2; +0.0160 D_s*+ tau- anti-nu_tau ISGW2; +0.0018 D_s1+ tau- anti-nu_tau ISGW2; +0.0018 D_s0*+ tau- anti-nu_tau ISGW2; +0.0028 D'_s1+ tau- anti-nu_tau ISGW2; +0.0028 D_s2*+ tau- anti-nu_tau ISGW2; +# +# fkw 4/28/00 the next few are decays where a u\bar u or d\bar d is popped +# between the charm quark and the spectator. I can thus not +# just replace a D by a Ds as above when going from Bd to Bs. +# fkw 5/04/01 Had to take these out because they crash EvtGen. +# Will have to fix this eventually !!! +#0.0010 D*0 K+ tau- anti-nu_tau GOITY_ROBERTS; +#0.0010 D*+ K0 tau- anti-nu_tau GOITY_ROBERTS; +#0.0010 D0 K+ tau- anti-nu_tau GOITY_ROBERTS; +#0.0010 D+ K0 tau- anti-nu_tau GOITY_ROBERTS; +# fkw 4/28/00 B0B -> TAU D PI0 = 1/2 of TAU D PI+ because of pi0 wave function +# However, the same factor of 1/2 doesn't apply to BSB !!! +# +# fkw 3/28/01 There seem to be no semi-leptonic B to baryon decays in nature. +# I don't pretend to understand why. PDG 2000 has a limit of +# < 3.2e-3 where one might naively expect +# 10% * BR(B->/\c) = 0.1 * (6.4+-1.1)% +#0.0050 anti-nu_e e- ??? Baryon +#0.0050 anti-nu_mu mu- ??? Baryon +# +# b --> c (s c=) +# Sum = 11.44% +# 2-body = 4.72% +# more-body = 6.72% +0.010400000 D_s- D_s+ PHSP; #[Reconstructed PDG2011] +0.0099 D_s*+ D_s- SVS; +0.0099 D_s*- D_s+ SVS; +0.0197 D_s*- D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# fkw 4/28/00 more states with popped q\bar q. +# The one's here involve only popped and spectator. +# Popping stuff in the cs from the W comes further below. +# The same isospin comment applies here as above in the +# semi-leptonic decays with tau and popped q\bar q. +0.0096 D_s- D+ K0 PHSP; +0.0096 D_s- anti-D0 K+ PHSP; +0.0096 D_s*- D+ K0 PHSP; +0.0096 D_s*- D0 K+ PHSP; +# +0.0024 D_s- D+ pi0 K0 PHSP; +0.0048 D_s- D0 pi+ K0 PHSP; +0.0048 D_s- D+ pi- K+ PHSP; +0.0024 D_s- D0 pi0 K+ PHSP; +# +0.0024 D_s*- D+ pi0 K0 PHSP; +0.0048 D_s*- D0 pi+ K0 PHSP; +0.0048 D_s*- D+ pi- K+ PHSP; +0.0024 D_s*- D0 pi0 K+ PHSP; +# +# +# b --> (c ) (c ) (s ) +# Sum = 8.0% +# DDK amplitudes R.A.Briere 10/97 +# fkw 4/28/00 these are q\bar q popping that don't involve the spectator +# Bd->Bs just involves switching the c\bar d to c\bar s. +# +0.0150 D_s*+ anti-D*0 K- PHSP; +0.0150 D_s*+ D*- anti-K0 PHSP; +# +0.0050 D_s*+ anti-D0 K- PHSP; +0.0050 D_s*+ D- anti-K0 PHSP; +# +0.0050 D_s+ anti-D*0 K- PHSP; +0.0050 D_s+ D*- anti-K0 PHSP; +# +0.0020 D_s+ anti-D0 K- PHSP; +0.0020 D_s+ D- anti-K0 PHSP; +# +0.0030 D_s*+ anti-D*0 K*- PHSP; +0.0030 D_s*+ D*- anti-K*0 PHSP; +# +0.0050 D_s*+ anti-D0 K*- PHSP; +0.0050 D_s*+ D- anti-K*0 PHSP; +# +0.0025 D_s+ anti-D*0 K*- PHSP; +0.0025 D_s+ D*- anti-K*0 PHSP; +# +0.0025 D_s+ anti-D0 K*- PHSP; +0.0025 D_s+ D- anti-K*0 PHSP; +# +# +# b --> c (d c=) +# Sum = 1.0% +0.0017 D_s- D+ PHSP; +0.0017 D*+ D_s- SVS; +0.0017 D_s*- D+ SVS; +0.0017 D_s*- D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# fkw 4/38/00 more popping at the lower vertex +# but with upper vertex cabbibo suppressed. +0.0007 D- D+ K0 PHSP; +0.0007 D- anti-D0 K+ PHSP; +0.0007 D*- D+ K0 PHSP; +0.0007 D*- D0 K+ PHSP; +# +0.0003 D- D+ pi0 K0 PHSP; +0.0007 D- D0 pi+ K0 PHSP; +0.0003 D- D+ pi- K+ PHSP; +0.0007 D- D0 pi0 K+ PHSP; +# +0.0003 D*- D+ pi0 K0 PHSP; +0.0007 D*- D0 pi+ K0 PHSP; +0.0003 D*- D+ pi- K+ PHSP; +0.0007 D*- D0 pi0 K+ PHSP; +# +# b --> c (s u=) +# exclusive +# Sum = 0.09% +0.00015 D_s*+ K- SVS; +0.000150000 D_s+ K- PHSP; #[Reconstructed PDG2011] +0.00030 D_s*+ K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.0283 0.0; +0.00030 K*- D_s+ SVS; +# +# fkw 4/28/00 Strategy for charmonium modes: +# Take Bd BR's, replace spectator, +# assume etaprime = 2/3 ss +# and eta = 1/3 ss +# +# Note: Just for kicks I gave the c\bar c decays a small piece that is +# self tagging. See if you can find it. This is already in +# the B0 decays in cleo's version of decay.dec . +# +# B --> (c c=) (s s=) +# 2.65% +# should be: psi = 0.80% CLNS 94/1315 but isn't quite right. +0.00064 J/psi eta' SVS; +0.00032 J/psi eta SVS; +0.001300000 J/psi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.00008 J/psi K0 SVS; +0.00070 J/psi K- K+ PHSP; +0.00070 J/psi anti-K0 K0 PHSP; +0.00070 J/psi anti-K0 K+ pi- PHSP; +0.00070 J/psi anti-K0 K0 pi0 PHSP; +0.00070 J/psi K- K+ pi0 PHSP; +# LHCb PR 04/02/04 Add (cc) phi n pi(+/0) +0.00039 J/psi phi pi+ pi- PHSP; +0.00039 J/psi phi pi0 pi0 PHSP; +# LHCb PR add (cc) phi eta(') + npi see CDF QQ +0.0002 J/psi eta pi+ pi- PHSP; +0.0002 J/psi eta pi0 pi0 PHSP; +0.0004 J/psi eta' pi+ pi- PHSP; +0.0004 J/psi eta' pi0 pi0 PHSP; +0.0002 J/psi pi+ pi- PHSP; +0.0002 J/psi pi0 pi0 PHSP; +# psi' = 0.34% CLNS 94/1315 +# +0.000465 psi(2S) eta' SVS; +0.000235 psi(2S) eta SVS; +0.000680000 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.0003 psi(2S) K- K+ PHSP; +0.0003 psi(2S) anti-K0 K0 PHSP; +0.0003 psi(2S) anti-K0 K+ pi- PHSP; +0.0003 psi(2S) anti-K0 K0 pi0 PHSP; +0.0003 psi(2S) K- K+ pi0 PHSP; +0.00034 psi(2S) phi pi+ pi- PHSP; +0.00034 psi(2S) phi pi0 pi0 PHSP; +0.0002 psi(2S) eta pi+ pi- PHSP; +0.0002 psi(2S) eta pi0 pi0 PHSP; +0.0004 psi(2S) eta' pi+ pi- PHSP; +0.0004 psi(2S) eta' pi0 pi0 PHSP; +0.0002 psi(2S) pi+ pi- PHSP; +0.0002 psi(2S) pi0 pi0 PHSP; +# +# chic0 = 0.05% (20% of chic2) +# Bodwin et.al. Phys Rev D46 1992 +0.00010 chi_c0 eta' PHSP; +0.00005 chi_c0 eta PHSP; +0.00020 phi chi_c0 SVS; +0.00003 chi_c0 K- K+ PHSP; +0.00003 chi_c0 anti-K0 K0 PHSP; +0.00003 chi_c0 anti-K0 K+ pi- PHSP; +0.00003 chi_c0 anti-K0 K0 pi0 PHSP; +0.00003 chi_c0 K- K+ pi0 PHSP; +# +# +# chic1 = 0.37% CLNS 94/1315 +0.0007 chi_c1 eta' SVS; +0.0003 chi_c1 eta SVS; +0.0014 chi_c1 phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00026 chi_c1 K- K+ PHSP; +0.00026 chi_c1 anti-K0 K0 PHSP; +0.00026 chi_c1 anti-K0 K+ pi- PHSP; +0.00026 chi_c1 anti-K0 K0 pi0 PHSP; +0.00026 chi_c1 K- K+ pi0 PHSP; +0.00040 chi_c1 phi pi+ pi- PHSP; +0.00040 chi_c1 phi pi0 pi0 PHSP; +0.0001 chi_c1 eta pi+ pi- PHSP; +0.0001 chi_c1 eta pi0 pi0 PHSP; +0.0002 chi_c1 eta' pi+ pi- PHSP; +0.0002 chi_c1 eta' pi0 pi0 PHSP; +# +# +# chic2 = 0.25% CLNS 94/1315 +0.000465 chi_c2 eta' STS; +0.000235 chi_c2 eta STS; +#0.0010 chi_c2 phi STV; whb: model doesn't exist! +0.00016 chi_c2 K- K+ PHSP; +0.00016 chi_c2 anti-K0 K0 PHSP; +0.00016 chi_c2 anti-K0 K+ pi- PHSP; +0.00016 chi_c2 anti-K0 K0 pi0 PHSP; +0.00016 chi_c2 K- K+ pi0 PHSP; +# +# +# etac(1s) = 0.41% Guess: CBX 97-65 +# +0.0008 eta_c eta' PHSP; +0.0004 eta_c eta PHSP; +0.0015 phi eta_c SVS; +0.00028 eta_c K- K+ PHSP; +0.00028 eta_c anti-K0 K0 PHSP; +0.00028 eta_c anti-K0 K+ pi- PHSP; +0.00028 eta_c anti-K0 K0 pi0 PHSP; +0.00028 eta_c K- K+ pi0 PHSP; +0.00040 eta_c phi pi+ pi- PHSP; +0.00040 eta_c phi pi0 pi0 PHSP; +0.0001 eta_c eta pi+ pi- PHSP; +0.0001 eta_c eta pi0 pi0 PHSP; +0.0002 eta_c eta' pi+ pi- PHSP; +0.0002 eta_c eta' pi0 pi0 PHSP; +# +# +# etac(2s) = 0.18% Guess: CBX 97-65 +0.0004 eta_c(2S) eta' PHSP; +0.0002 eta_c(2S) eta PHSP; +0.0006 phi eta_c(2S) SVS; +0.00012 eta_c(2S) K- K+ PHSP; +0.00012 eta_c(2S) anti-K0 K0 PHSP; +0.00012 eta_c(2S) anti-K0 K+ pi- PHSP; +0.00012 eta_c(2S) anti-K0 K0 pi0 PHSP; +0.00012 eta_c(2S) K- K+ pi0 PHSP; +# +# +# hc = 0.25% (100% of chic2) +# Bodwin et.al. Phys Rev D46 1992 +# +0.000465 h_c eta' SVS; +0.000235 h_c eta SVS; +0.0010 h_c phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00016 h_c K- K+ PHSP; +0.00016 h_c anti-K0 K0 PHSP; +0.00016 h_c anti-K0 K+ pi- PHSP; +0.00016 h_c anti-K0 K0 pi0 PHSP; +0.00016 h_c K- K+ pi0 PHSP; +# +# +# b --> c (d u=) +# Exclusive Channels = 6.33% +# fkw 4/28/00 I rearanged this a bit after copying it from +# B0B decay list. +# +# first come the external W-emission decays: +# +0.0008 D_s1+ pi- SVS; +0.0021 D_s1+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0013 D_s2*+ pi- STS; +#0.0037 D_s2*+ rho- STV; # whb: model doesn't exist +# +0.0027 D_s*+ pi- SVS; +0.003200000 D_s+ pi- PHSP; #[Reconstructed PDG2011] +0.0073 rho- D_s+ SVS; +0.0070 D_s*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.0085 a_1- D_s+ SVS; +0.0009 D_s+ rho0 pi- PHSP; +0.0009 D_s+ rho- pi0 PHSP; +0.008400000 D_s+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.0009 D_s+ pi0 pi- pi0 PHSP; +# +0.0122 D_s*+ a_1- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0010 D_s*+ rho0 pi- PHSP; +0.0010 D_s*+ rho- pi0 PHSP; +0.0077 D_s*+ pi+ pi- pi- PHSP; +0.0010 D_s*+ pi0 pi- pi0 PHSP; +# +# then the color suppressed decays: +# +# fkw 4/28/00 color suppressed modes bumped up by factor 2 from isospin +# i.e. Bs doesn't have the factor 2 suppression Bd has. +0.0002 D*0 K0 SVS; +0.0002 D0 K0 PHSP; +0.0002 K*0 D0 SVS; +0.0002 D*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# PR LHCb Add p pbar mode +0.000000001 p+ anti-p- PHSP; +# fkw 4/28/00 ignore the internal W emission decays with additional +# q\bar q popping. +# +# Here come the various types of "inclusive unknown" decays: +# +# Start with B to baryons: +# fkw 3/28/01 I don't know what I'm doing here!!! This needs to be checked!!! +# Mark Whitehead 30/4/2010 Weighted PYHTIA to get total BF = 100% +0.019574780 cs_0 anti-ud_0 PYTHIA 63; +0.039129957 cs_1 anti-ud_1 PYTHIA 63; +# +# Next come external W-emission: +0.301256716 anti-u d c anti-s PYTHIA 23; +0.048443906 anti-u d c anti-s PYTHIA 65; +# Now the internal W-emission: +0.019086636 anti-u c d anti-s PYTHIA 23; +# Then some b->u external W-emission with upper vertex charm +0.003912996 anti-c s u anti-s PYTHIA 23; +# and finally some cabibbo suppressed external and internal W-emission +0.014683536 anti-u s c anti-s PYTHIA 23; +0.002152148 anti-u s c anti-s PYTHIA 65; +0.000880424 anti-u c s anti-s PYTHIA 23; +# and some c cbar d stuff as well as c cbar s +0.005391151 anti-c d c anti-s PYTHIA 43; +0.001468354 anti-c d c anti-s PYTHIA 43; +# and some miscellaneous charmless stuff +0.003521696 anti-u u d anti-s PYTHIA 23; +0.000684774 anti-d d d anti-s PYTHIA 23; +0.000880424 anti-s s d anti-s PYTHIA 23; +0.001956498 anti-u u s anti-s PYTHIA 23; +0.001565198 anti-d d s anti-s PYTHIA 23; +0.001271724 anti-s s s anti-s PYTHIA 23; +0.004891245 s anti-s PYTHIA 91; + +# fkw 5/10/00 the b->ulnu decays are loosely modelled according to B0 in EvtGen +0.000200 K+ e- anti-nu_e PHOTOS ISGW2; +0.000300 K*+ e- anti-nu_e PHOTOS ISGW2; +0.000300 K_1+ e- anti-nu_e PHOTOS ISGW2; +0.000200 K'_1+ e- anti-nu_e PHOTOS ISGW2; +# +# +0.000200 K+ mu- anti-nu_mu PHOTOS ISGW2; +0.000300 K*+ mu- anti-nu_mu PHOTOS ISGW2; +0.000300 K_1+ mu- anti-nu_mu PHOTOS ISGW2; +0.000200 K'_1+ mu- anti-nu_mu PHOTOS ISGW2; +# ------------- +# 2e-3 for charmless semi-leptonic + +#*********************************************************** +# +# fkw 5/10/00 +# +# ideas behind these (largely) made up Br's for charmless +# hadronic B decays: +# (1) any PP and PV modes that are used or calculated +# in globfit code by Hou,Smith,Wuerthwein are taken from +# the latest fit i.e. May2000 +# (2) anything else is from Ali,Kramer,Lue +# +# None of this should be taken too serious! +# +#*********************************************************** +# Mark Whitehead 30/4/2010 Updated K+K- +# PR LHCb 04/07/04 update BR +0.000033000 K- K+ PHSP; #[Reconstructed PDG2011] +# PR LHCb 04/07/04 split into KS/KL +0.0000000 anti-K0 K0 PHSP; +0.0000100 K_S0 K_S0 PHSP; +0.0000100 K_L0 K_L0 PHSP; +# PR LHCb 04/07/04 update BR +0.000004900 pi- K+ PHSP; #[Reconstructed PDG2011] +0.0000002 pi0 K0 PHSP; +# PR LHCb 04/07/04 add Bs->pi+ pi- +0.00000001 pi+ pi- PHSP; +# +0.0000012 omega eta SVS; +0.0000025 omega eta' SVS; +0.0000013 phi eta SVS; +0.0000025 phi eta' SVS; +0.00000008 omega anti-K0 SVS; +0.000000002 phi anti-K0 SVS; +# +#next is just twice PI- RHO0 +0.0000250 K*+ pi- SVS; +0.0000120 rho- K+ SVS; +0.00000002 rho0 K0 SVS; +0.00000002 K*0 pi0 SVS; +# +0.0000046 K*- K+ SVS; +# PR LHCb 04/07/04 Split into KS/KL +0.0000000 anti-K*0 K0 SVS; +0.0000020 anti-K*0 K_S0 SVS; +0.0000020 anti-K*0 K_L0 SVS; +0.0000082 K*+ K- SVS; +# PR LHCb 04/07/04 Split into KS/KL +0.0000000 K*0 anti-K0 SVS; +0.0000020 K*0 K_S0 SVS; +0.0000020 K*0 K_L0 SVS; +# +0.0000580 eta' eta' PHSP; +0.0000250 eta' eta PHSP; +0.0000040 eta eta PHSP; +#### Already included above 0.0000200 phi eta SVS; +#### Already included above 0.0000100 phi eta' SVS; +# +#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 +0.00000007 K0 eta' PHSP; +0.00000023 K0 eta PHSP; +0.000000021 K*0 eta' SVS; +0.00000007 K*0 eta SVS; +# +#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 +# for vector-vector final states +0.000020 rho- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000008 rho0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.000000005 omega K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.000006 K*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# PR LHCb 04/07/04 Update BR +0.000004 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.000014000 phi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000000004 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# decays that go via b->d penguins +#### Already included above 0.0000004 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# PR LHCb : add Bs -> mu+ mu- +0.0000000035 mu- mu+ PHSP; +#PR LHCb 04/08/2004 add Bs -> tau+ tau- (BR not to take too seriously) +0.0000000020 tau- tau+ PHSP; +# PR LHCb 04/05/2004 : add Bs -> phi gamma +0.000057000 phi gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# PR LHCb 04/08/2004 : add Bs -> phi mu mu, phi e e +0.0000023 phi e- e+ BTOSLLALI; +0.0000023 phi mu- mu+ BTOSLLALI; +# PR LHCb 16 apr 2004 : add Bs -> gamma gamma +0.0000005 gamma gamma PHSP; +#-------------- +# 257.122e-6 for all the charmless hadronic +# +0.000150000 D_s- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +# B_s decays. +# ------------------------------------------------------- +# whb&fkw 3/28/01 Taken from fkw's QQ tables. +# most dubious part are the B to baryons. +# fkw 4/28/00 made the Bs parallel to the Bd as best as I could +# ------------------------------------------------------- +Decay B_s0 +0.0210 D_s- e+ nu_e PHOTOS HQET2 1.185 1.081; +0.0490 D_s*- e+ nu_e PHOTOS HQET2 1.207 0.920 1.406 0.853; +0.0040 D_s1- e+ nu_e PHOTOS ISGW2; +0.0040 D_s0*- e+ nu_e PHOTOS ISGW2; +0.0070 D'_s1- e+ nu_e PHOTOS ISGW2; +0.0070 D_s2*- e+ nu_e PHOTOS ISGW2; +0.0210 D_s- mu+ nu_mu PHOTOS HQET2 1.185 1.081; +0.0490 D_s*- mu+ nu_mu PHOTOS HQET2 1.207 0.920 1.406 0.853; +0.0040 D_s1- mu+ nu_mu PHOTOS ISGW2; +0.0040 D_s0*- mu+ nu_mu PHOTOS ISGW2; +0.0070 D'_s1- mu+ nu_mu PHOTOS ISGW2; +0.0070 D_s2*- mu+ nu_mu PHOTOS ISGW2; +#fkw 5/04/01 changed these to account for taking out non-res +#0.0070 D_s- tau+ nu_tau ISGW2; +#0.0150 D_s*- tau+ nu_tau ISGW2; +#0.0013 D_s1- tau+ nu_tau ISGW2; +#0.0013 D_s0*- tau+ nu_tau ISGW2; +#0.0023 D'_s1- tau+ nu_tau ISGW2; +#0.0023 D_s2*- tau+ nu_tau ISGW2; +0.0080 D_s- tau+ nu_tau ISGW2; +0.0160 D_s*- tau+ nu_tau ISGW2; +0.0018 D_s1- tau+ nu_tau ISGW2; +0.0018 D_s0*- tau+ nu_tau ISGW2; +0.0028 D'_s1- tau+ nu_tau ISGW2; +0.0028 D_s2*- tau+ nu_tau ISGW2; +# +# fkw 4/28/00 the next few are decays where a u\bar u or d\bar d is popped +# between the charm quark and the spectator. I can thus not +# just replace a D by a Ds as above when going from Bd to Bs. +# +# fkw 5/04/01 Had to take non-res out because it crashed EvtGen. +#0.0010 anti-D*0 K- tau+ nu_tau GOITY_ROBERTS; +#0.0010 D*- anti-K0 tau+ nu_tau GOITY_ROBERTS; +#0.0010 anti-D0 K- tau+ nu_tau GOITY_ROBERTS; +#0.0010 D- anti-K0 tau+ nu_tau GOITY_ROBERTS; +# fkw 4/28/00 B0 -> TAU D PI0 = 1/2 of TAU D PI- because of pi0 wave function +# However, the same factor of 1/2 doesn't apply to BS0 !!! +# fkw 3/28/01 There seem to be no semi-leptonic B to baryon decays in nature. +# I don't pretend to understand why. PDG 2000 has a limit of +# < 3.2e-3 where one might naively expect +# 10% * BR(B->/\c) = 0.1 * (6.4+-1.1)% +#0.0050 nu_e e+ B-Baryon +#0.0050 nu_mu mu+ B-Baryon +# +# b --> c (s c=) +# Sum = 11.44% +# 2-body = 4.72% +# more-body = 6.72% +0.010400000 D_s- D_s+ PHSP; #[Reconstructed PDG2011] +0.0099 D_s*+ D_s- SVS; +0.0099 D_s*- D_s+ SVS; +0.0197 D_s*- D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# fkw 4/28/00 more states with popped q\bar q. +# The one's here involve only popped and spectator. +# Popping stuff in the cs from the W comes further below. +# The same isospin comment applies here as above in the +# semi-leptonic decays with tau and popped q\bar q. +0.0096 D_s+ D- anti-K0 PHSP; +0.0096 D_s+ D0 K- PHSP; +0.0096 D_s*+ D- anti-K0 PHSP; +0.0096 D_s*+ anti-D0 K- PHSP; +# +0.0024 D_s+ D- pi0 anti-K0 PHSP; +0.0048 D_s+ anti-D0 pi- anti-K0 PHSP; +0.0048 D_s+ D- pi+ K- PHSP; +0.0024 D_s+ anti-D0 pi0 K- PHSP; +# +0.0024 D_s*+ D- pi0 anti-K0 PHSP; +0.0048 D_s*+ anti-D0 pi- anti-K0 PHSP; +0.0048 D_s*+ D- pi+ K- PHSP; +0.0024 D_s*+ anti-D0 pi0 K- PHSP; +# +# +# b --> (c ) (c ) (s ) +# Sum = 8.0% +# DDK amplitudes R.A.Briere 10/97 +# fkw 4/28/00 these are q\bar q popping that don't involve the spectator +# Bd->Bs just involves switching the c\bar d to c\bar s. +# +0.0150 D_s*- D*0 K+ PHSP; +0.0150 D_s*- D*+ K0 PHSP; +0.0050 D_s*- D0 K+ PHSP; +0.0050 D_s*- D+ K0 PHSP; +0.0050 D_s- D*0 K+ PHSP; +0.0050 D_s- D*+ K0 PHSP; +0.0020 D_s- D0 K+ PHSP; +0.0020 D_s- D+ K0 PHSP; +0.0030 D_s*- D*0 K*+ PHSP; +0.0030 D_s*- D*+ K*0 PHSP; +0.0050 D_s*- D0 K*+ PHSP; +0.0050 D_s*- D+ K*0 PHSP; +0.0025 D_s- D*0 K*+ PHSP; +0.0025 D_s- D*+ K*0 PHSP; +0.0025 D_s- D0 K*+ PHSP; +0.0025 D_s- D+ K*0 PHSP; +# +# +# b --> c (d c=) +# Sum = 1.36% +0.0017 D_s+ D- PHSP; +0.0017 D*- D_s+ SVS; +0.0017 D_s*+ D- SVS; +0.0017 D_s*+ D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# fkw 4/38/00 more popping at the lower vertex +# but with upper vertex cabbibo suppressed. +0.0007 D+ D- anti-K0 PHSP; +0.0007 D+ D0 K- PHSP; +0.0007 D*+ D- anti-K0 PHSP; +0.0007 D*+ anti-D0 K- PHSP; +# +0.0003 D+ D- pi0 anti-K0 PHSP; +0.0007 D+ anti-D0 pi- anti-K0 PHSP; +0.0003 D+ D- pi+ K- PHSP; +0.0007 D+ anti-D0 pi0 K- PHSP; +# +0.0003 D*+ D- pi0 anti-K0 PHSP; +0.0007 D*+ anti-D0 pi- anti-K0 PHSP; +0.0003 D*+ D- pi+ K- PHSP; +0.0007 D*+ anti-D0 pi0 K- PHSP; +# +# b --> c (u s=) +# exclusive +# Sum = 0.9% +0.00015 D_s*- K+ SVS; +0.000150000 D_s- K+ PHSP; #[Reconstructed PDG2011] +0.00030 D_s*- K*+ SVV_HELAMP 0.0283 0.0 0.932 0.0 0.228 0.0; +0.00030 K*+ D_s- SVS; +# +# fkw 4/28/00 Strategy for charmonium modes: +# Take Bd BR's, replace spectator, +# assume etaprime = 2/3 ss +# and eta = 1/3 ss +# +# Note: Just for kicks I gave the c\bar c decays a small piece that is +# self tagging. See if you can find it. This is already in +# the B0 decays in cleo's version of decay.dec . +# +# B --> (c c=) (s s=) +# 2.65% +# should be: psi = 0.80% CLNS 94/1315 but isn't quite right. +0.00064 J/psi eta' SVS; +0.00032 J/psi eta SVS; +0.001300000 J/psi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.00008 J/psi K0 SVS; +0.00070 J/psi K- K+ PHSP; +0.00070 J/psi anti-K0 K0 PHSP; +0.00070 J/psi K0 K- pi+ PHSP; +0.00070 J/psi anti-K0 K0 pi0 PHSP; +0.00070 J/psi K- K+ pi0 PHSP; +# LHCb PR 04/02/04 Add (cc) phi n pi(+/0) +0.00039 J/psi phi pi+ pi- PHSP; +0.00039 J/psi phi pi0 pi0 PHSP; +# LHCb PR Add (cc) phi eta(') + npi like in CDF QQ +0.0002 J/psi eta pi+ pi- PHSP; +0.0002 J/psi eta pi0 pi0 PHSP; +0.0004 J/psi eta' pi+ pi- PHSP; +0.0004 J/psi eta' pi0 pi0 PHSP; +0.0002 J/psi pi+ pi- PHSP; +0.0002 J/psi pi0 pi0 PHSP; +# psi' = 0.34% CLNS 94/1315 +0.000465 psi(2S) eta' SVS; +0.000235 psi(2S) eta SVS; +0.000680000 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.0003 psi(2S) K- K+ PHSP; +0.0003 psi(2S) anti-K0 K0 PHSP; +0.0003 psi(2S) K0 K- pi+ PHSP; +0.0003 psi(2S) anti-K0 K0 pi0 PHSP; +0.0003 psi(2S) K- K+ pi0 PHSP; +0.00034 psi(2S) phi pi+ pi- PHSP; +0.00034 psi(2S) phi pi0 pi0 PHSP; +0.0002 psi(2S) eta pi+ pi- PHSP; +0.0002 psi(2S) eta pi0 pi0 PHSP; +0.0004 psi(2S) eta' pi+ pi- PHSP; +0.0004 psi(2S) eta' pi0 pi0 PHSP; +0.0002 psi(2S) pi+ pi- PHSP; +0.0002 psi(2S) pi0 pi0 PHSP; +# +# chic0 = 0.05% (20% of chic2) +# Bodwin et.al. Phys Rev D46 1992 +0.00010 chi_c0 eta' PHSP; +0.00005 chi_c0 eta PHSP; +0.00020 phi chi_c0 SVS; +0.00003 chi_c0 K- K+ PHSP; +0.00003 chi_c0 anti-K0 K0 PHSP; +0.00003 chi_c0 K0 K- pi+ PHSP; +0.00003 chi_c0 anti-K0 K0 pi0 PHSP; +0.00003 chi_c0 K- K+ pi0 PHSP; +# +# +# chic1 = 0.37% CLNS 94/1315 +0.0007 chi_c1 eta' SVS; +0.0003 chi_c1 eta SVS; +0.0014 chi_c1 phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00026 chi_c1 K- K+ PHSP; +0.00026 chi_c1 anti-K0 K0 PHSP; +0.00026 chi_c1 K0 K- pi+ PHSP; +0.00026 chi_c1 anti-K0 K0 pi0 PHSP; +0.00026 chi_c1 K- K+ pi0 PHSP; +0.00040 chi_c1 phi pi+ pi- PHSP; +0.00040 chi_c1 phi pi0 pi0 PHSP; +0.0001 chi_c1 eta pi+ pi- PHSP; +0.0001 chi_c1 eta pi0 pi0 PHSP; +0.0002 chi_c1 eta' pi+ pi- PHSP; +0.0002 chi_c1 eta' pi0 pi0 PHSP; +# +# +# chic2 = 0.25% CLNS 94/1315 +0.000465 chi_c2 eta' STS; +0.000235 chi_c2 eta STS; +#0.0010 chi_c2 phi STV; whb: doesn't exist +0.00016 chi_c2 K- K+ PHSP; +0.00016 chi_c2 anti-K0 K0 PHSP; +0.00016 chi_c2 K0 K- pi+ PHSP; +0.00016 chi_c2 anti-K0 K0 pi0 PHSP; +0.00016 chi_c2 K- K+ pi0 PHSP; +# +# +# etac(1s) = 0.41% Guess: CBX 97-65 +0.0008 eta_c eta' PHSP; +0.0004 eta_c eta PHSP; +0.0015 phi eta_c SVS; +0.00028 eta_c K- K+ PHSP; +0.00028 eta_c K0 anti-K0 PHSP; +0.00028 eta_c K0 K- pi+ PHSP; +0.00028 eta_c K0 anti-K0 pi0 PHSP; +0.00028 eta_c K- K+ pi0 PHSP; +0.00040 eta_c phi pi+ pi- PHSP; +0.00040 eta_c phi pi0 pi0 PHSP; +0.0001 eta_c eta pi+ pi- PHSP; +0.0001 eta_c eta pi0 pi0 PHSP; +0.0002 eta_c eta' pi+ pi- PHSP; +0.0002 eta_c eta' pi0 pi0 PHSP; +# +# +# etac(2s) = 0.18% Guess: CBX 97-65 +0.0004 eta_c(2S) eta' PHSP; +0.0002 eta_c(2S) eta PHSP; +0.0006 phi eta_c(2S) SVS; +0.00012 eta_c(2S) K- K+ PHSP; +0.00012 eta_c(2S) anti-K0 K0 PHSP; +0.00012 eta_c(2S) K0 K- pi+ PHSP; +0.00012 eta_c(2S) anti-K0 K0 pi0 PHSP; +0.00012 eta_c(2S) K- K+ pi0 PHSP; +# +# +# hc = 0.25% (100% of chic2) +# Bodwin et.al. Phys Rev D46 1992 +0.000465 h_c eta' SVS; +0.000235 h_c eta SVS; +0.0010 h_c phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00016 h_c K- K+ PHSP; +0.00016 h_c anti-K0 K0 PHSP; +0.00016 h_c K0 K- pi+ PHSP; +0.00016 h_c anti-K0 K0 pi0 PHSP; +0.00016 h_c K- K+ pi0 PHSP; +# +# +# b --> c (d u=) +# Exclusive Channels = 6.33% +# fkw 4/28/00 I rearanged this a bit after copying it from +# B0B decay list. +# +# first come the external W-emission decays: +# +0.0008 D_s1- pi+ SVS; +0.0021 D_s1- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0013 D_s2*- pi+ STS; +#0.0037 D_s2*- rho+ STV; #whb: STV does not exist yet +# +0.0027 D_s*- pi+ SVS; +0.003200000 D_s- pi+ PHSP; #[Reconstructed PDG2011] +0.0073 rho+ D_s- SVS; +0.0070 D_s*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.0085 a_1+ D_s- SVS; +0.0009 D_s- rho0 pi+ PHSP; +0.0009 D_s- rho+ pi0 PHSP; +0.008400000 D_s- pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.0009 D_s- pi0 pi+ pi0 PHSP; +# +0.0122 D_s*- a_1+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0010 D_s*- rho0 pi+ PHSP; +0.0010 D_s*- rho+ pi0 PHSP; +0.0077 D_s*- pi- pi+ pi+ PHSP; +0.0010 D_s*- pi0 pi+ pi0 PHSP; +# +# then the color suppressed decays: +# +# fkw 4/28/00 color suppressed modes bumped up by factor 2 from isospin +# i.e. Bs doesn't have the factor 2 suppression Bd has. +0.0002 anti-D*0 anti-K0 SVS; +0.0002 anti-D0 anti-K0 PHSP; +0.0002 anti-K*0 anti-D0 SVS; +0.0002 anti-D*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# PR LHCb : add p ppbar mode +0.000000001 p+ anti-p- PHSP; +# fkw 4/28/00 ignore the internal W emission decays with additional +# q\bar q popping. +# +# Here come the various types of "inclusive unknown" decays: +# +# Start with B to baryons: +# fkw 3/28/01 I don't know what I'm doing here!!! This needs to be checked!!! +# Mark Whitehead 30/4/2010 Weight PYTHIA to get Total BF=100% +0.019574780 anti-cs_0 ud_0 PYTHIA 63; +0.039129957 anti-cs_1 ud_1 PYTHIA 63; +# +# Next come external W-emission: +0.301256716 u anti-d anti-c s PYTHIA 23; +0.048443906 u anti-d anti-c s PYTHIA 65; +# Now the internal W-emission: +0.019086636 u anti-c anti-d s PYTHIA 23; +# Then some b->u external W-emission with upper vertex charm +0.003912996 c anti-s anti-u s PYTHIA 23; +# and finally some cabibbo suppressed external and internal W-emission +0.014683536 u anti-s anti-c s PYTHIA 23; +0.002152148 u anti-s anti-c s PYTHIA 65; +0.000880424 u anti-c anti-s s PYTHIA 23; +# and some c cbar d stuff as well as c cbar s +0.005391151 c anti-d anti-c s PYTHIA 43; +0.001468354 c anti-d anti-c s PYTHIA 43; +# and some miscellaneous charmless stuff +0.003521696 u anti-u anti-d s PYTHIA 23; +0.000684774 d anti-d anti-d s PYTHIA 23; +0.000880424 s anti-s anti-d s PYTHIA 23; +0.001956498 u anti-u anti-s s PYTHIA 23; +0.001565198 d anti-d anti-s s PYTHIA 23; +0.001271724 s anti-s anti-s s PYTHIA 23; +0.004891245 anti-s s PYTHIA 91; + +# fkw 5/10/00 the b->ulnu decays are loosely modelled according to B0 in EvtGen +0.000200 K- e+ nu_e PHOTOS ISGW2; +0.000300 K*- e+ nu_e PHOTOS ISGW2; +0.000300 K_1- e+ nu_e PHOTOS ISGW2; +0.000200 K'_1- e+ nu_e PHOTOS ISGW2; +# +# +0.000200 K- mu+ nu_mu PHOTOS ISGW2; +0.000300 K*- mu+ nu_mu PHOTOS ISGW2; +0.000300 K_1- mu+ nu_mu PHOTOS ISGW2; +0.000200 K'_1- mu+ nu_mu PHOTOS ISGW2; +# ------------- +# 2e-3 for charmless semi-leptonic + +#*********************************************************** +# +# fkw 5/10/00 +# +# ideas behind these (largely) made up Br's for charmless +# hadronic B decays: +# (1) any PP and PV modes that are used or calculated +# in globfit code by Hou,Smith,Wuerthwein are taken from +# the latest fit i.e. May2000 +# (2) anything else is from Ali,Kramer,Lue +# +# None of this should be taken too serious! +# +#*********************************************************** +# Mark Whitehead 30/4/2010 Update K+K- +# PR LHCb update Br Bs -> K- K+ +0.000033000 K- K+ PHSP; #[Reconstructed PDG2011] +# PR LHCb 4/07/04 Split in KS/KL +0.0000000 anti-K0 K0 PHSP; +0.0000100 K_S0 K_S0 PHSP; +0.0000100 K_L0 K_L0 PHSP; +# +0.000004900 pi+ K- PHSP; #[Reconstructed PDG2011] +0.0000002 pi0 anti-K0 PHSP; +# PR LHCb 4/07/04 add Bs -> pi+ pi- +0.00000001 pi+ pi- PHSP; +# +0.0000012 omega eta SVS; +0.0000025 omega eta' SVS; +0.0000013 phi eta SVS; +0.0000025 phi eta' SVS; +0.00000008 omega K0 SVS; +0.000000002 phi K0 SVS; +# +0.0000250 K*- pi+ SVS; +0.0000120 rho+ K- SVS; +0.00000002 rho0 K0 SVS; +0.00000002 anti-K*0 pi0 SVS; +# +0.0000046 K*+ K- SVS; +# PR LHCb 4/07/04 split in KS/KL +0.0000000 K*0 anti-K0 SVS; +0.0000020 K*0 K_S0 SVS; +0.0000020 K*0 K_L0 SVS; +0.0000082 K*- K+ SVS; +# PR LHCb 4/07/04 split in KS/KL +0.0000000 anti-K*0 K0 SVS; +0.0000020 anti-K*0 K_S0 SVS; +0.0000020 anti-K*0 K_L0 SVS; +# +0.0000580 eta' eta' PHSP; +0.0000250 eta' eta PHSP; +0.0000040 eta eta PHSP; +### Already included above 0.0000200 phi eta SVS; +### Already included above 0.0000100 phi eta' SVS; +# +#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 +0.00000007 anti-K0 eta' PHSP; +0.00000023 anti-K0 eta PHSP; +0.000000021 anti-K*0 eta' SVS; +0.00000007 anti-K*0 eta SVS; +# +#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 +# for vector-vector final states +0.000020 rho+ K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000008 rho0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.000000005 omega anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.000006 K*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# PR LHCb Update BR +0.000004 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.000014000 phi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000000004 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# decays that go via b->d penguins +#### Already included above 0.0000004 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +#PR LHCb add Bs -> mu+ mu- +0.0000000035 mu+ mu- PHSP; +#PR LHCb 04/08/2004 add Bs -> tau+ tau- (BR not to take too seriously) +0.0000000020 tau+ tau- PHSP; +# PR LHCb 04/05/2004 : add Bs -> phi gamma +0.000057000 phi gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# PR LHCb 04/08/2004 : add Bs -> phi mu mu, phi e e +0.0000023 phi e+ e- BTOSLLALI; +0.0000023 phi mu+ mu- BTOSLLALI; +# PR LHCb 16 Apr 2004 : add Bs -> gamma gamma +0.0000005 gamma gamma PHSP; +#-------------- +# 257.122e-6 for all the charmless hadronic +# +0.000150000 D_s+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + +# whb: QQ B_c included- Near end of File +#Decay B_c- +#CHANNEL 0 0.0700 TAU- NUTB +#CHANNEL 1 0.1100 NUEB E- *CC* +#CHANNEL 1 0.1100 NUMB MU- *CC* +#CHANNEL 1 0.0300 NUTB TAU- *CC* +#CHANNEL 0 0.3400 *DU* *CC* +#CHANNEL 0 0.0700 *SC* *CC* +#CHANNEL 0 0.2700 *SC* +#0.0700 tau- anti-nu_tau PHSP; +#0.1100 anti-nu_e e- *CC* Simpleleptonic; +#0.1100 anti-nu_mu mu- *CC* Simple leptonic; +#0.0300 anti-nu_tau tau- *CC* Simple leptonic; +#0.3400 *DU* *CC* PHSP; +#0.0700 *SC* *CC* PHSP; +#0.2700 *SC* PHSP; +#Enddecay +# +#Decay B_c+ +#CHANNEL 0 0.0700 TAU+ NUT +#CHANNEL 1 0.1100 NUE E+ *CC* +#CHANNEL 1 0.1100 NUM MU+ *CC* +#CHANNEL 1 0.0300 NUT TAU+ *CC* +#CHANNEL 0 0.3400 *UD* *CC* +#CHANNEL 0 0.0700 *CS* *CC* +#CHANNEL 0 0.2700 *CS* +#0.0700 tau+ nu_tau PHSP; +#0.1100 nu_e E+ *CC* Simple leptonic; +#0.1100 nu_mu mu+ *CC* Simple leptonic; +#0.0300 nu_tau tau+ *CC* Simple leptonic; +#0.3400 *UD* *CC* PHSP; +#0.0700 *CS* *CC* PHSP; +#0.2700 *CS* PHSP; +#Enddecay + +# +# Updated to PDG 2008 +# +Decay tau- +0.154002925 e- anti-nu_e nu_tau PHOTOS TAULNUNU; #[Reconstructed PDG2011] +0.170000000 mu- anti-nu_mu nu_tau PHOTOS TAULNUNU; #[Reconstructed PDG2011] +0.109100000 pi- nu_tau TAUSCALARNU; #[Reconstructed PDG2011] +0.006960000 K- nu_tau TAUSCALARNU; #[Reconstructed PDG2011] +0.255100000 pi- pi0 nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400; #[Reconstructed PDG2011] +0.001124109 nu_tau gamma pi- pi0 PYTHIA 21; +0.079301562 pi0 pi0 pi- nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400 1.23 0.4; #[Reconstructed PDG2011] +0.000385656 nu_tau K- pi0 pi0 PYTHIA 21; +0.008508640 nu_tau pi- pi0 pi0 pi0 PYTHIA 21; +0.000864699 nu_tau pi- pi0 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +#0.2515 rho- nu_tau TAUVECTORNU; +#0.1790 a_1- nu_tau TAUVECTORNU; +# Modes with K0s +# +0.000319939 nu_tau pi- anti-K0 PYTHIA 21; +0.001590000 nu_tau K- K0 PYTHIA 21; +0.001700000 nu_tau K0 pi- anti-K0 PYTHIA 21; +0.001590000 nu_tau K- pi0 K0 PYTHIA 21; +0.004000000 nu_tau pi- anti-K0 pi0 PYTHIA 21; +# 3 Charged Particles +# +0.093200000 pi- pi- pi+ nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400 1.23 0.4; #[Reconstructed PDG2011] +0.046100000 nu_tau pi- pi+ pi- pi0 PYTHIA 21; +0.000501526 nu_tau pi- pi- pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000155646 nu_tau pi- pi- pi+ pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.003420000 nu_tau K- pi+ pi- PYTHIA 21; +0.001360000 nu_tau K- pi+ pi- pi0 PYTHIA 21; +0.001400000 nu_tau K- pi- K+ PYTHIA 21; +0.000015800 nu_tau K- K+ K- PYTHIA 21; +# 5 Charged Particles +# +0.000700406 nu_tau pi- pi- pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.000129705 nu_tau pi- pi- pi- pi+ pi+ pi0 PHSP; #[Reconstructed PDG2011] +# Misc other modes +# +0.012000000 K*- nu_tau TAUVECTORNU; #[Reconstructed PDG2011] +0.001390000 nu_tau eta pi- pi0 PYTHIA 21; +0.003199387 nu_tau pi- omega pi0 PYTHIA 21; +0.000410000 nu_tau K- omega PYTHIA 21; +0.002200000 anti-K*0 pi- nu_tau PHSP; #[Reconstructed PDG2011] +0.002100000 K*0 K- nu_tau PHSP; #[Reconstructed PDG2011] +0.000034000 phi pi- nu_tau PHSP; #[Reconstructed PDG2011] +0.000037000 phi K- nu_tau PHSP; #[Reconstructed PDG2011] +0.003600000 mu- anti-nu_mu nu_tau gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.017500000 e- anti-nu_e nu_tau gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004290000 K- pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002200000 anti-K0 rho- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 pi- anti-K0 pi0 pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 pi- K0 anti-K0 pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000061000 K- K+ pi- pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000028000 e- e- e+ anti-nu_e nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004700000 K_1- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001700000 K'_1- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001500000 K'*- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000150000 eta pi- pi0 pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000161000 eta K- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000138000 eta K*- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000048000 eta K- pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000093000 eta anti-K0 pi- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000360000 f_1 pi- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +CDecay tau+ +# +# Vector Mesons Updated PDG 2008 +# +Decay D*+ +0.6770 D0 pi+ VSS; +0.3070 D+ pi0 VSS; +0.0160 D+ gamma VSP_PWAVE; +Enddecay +Decay D*- +0.6770 anti-D0 pi- VSS; +0.3070 D- pi0 VSS; +0.0160 D- gamma VSP_PWAVE; +Enddecay +Decay D*0 +0.619000000 D0 pi0 VSS; #[Reconstructed PDG2011] +0.381000000 D0 gamma VSP_PWAVE; #[Reconstructed PDG2011] +Enddecay +Decay anti-D*0 +0.6190 anti-D0 pi0 VSS; +0.3810 anti-D0 gamma VSP_PWAVE; +Enddecay +# +Decay D_s*+ +0.942000000 D_s+ gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.058000000 D_s+ pi0 VSS; #[Reconstructed PDG2011] +Enddecay +Decay D_s*- +0.942000000 D_s- gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.058000000 D_s- pi0 VSS; #[Reconstructed PDG2011] +Enddecay +# +# +# D+ Meson +# +Decay D+ +0.055200000 anti-K*0 e+ nu_e PHOTOS ISGW2; # PDG2014 +0.088300000 anti-K0 e+ nu_e PHOTOS ISGW2; # PDG2014 +0.002773020 anti-K_10 e+ nu_e PHOTOS ISGW2; # Keep same as in 2010 version +0.002927076 anti-K_2*0 e+ nu_e PHOTOS ISGW2; # Keep same as in 2010 version +0.004050000 pi0 e+ nu_e PHOTOS ISGW2; # PDG2014 +0.001140000 eta e+ nu_e PHOTOS ISGW2; # PDG2014 +0.000220000 eta' e+ nu_e PHOTOS ISGW2; # PDG2014 +0.002180000 rho0 e+ nu_e PHOTOS ISGW2; # PDG2014 +0.001820000 omega e+ nu_e PHOTOS ISGW2; # PDG2014 +0.003321725 K- pi+ e+ nu_e PHOTOS PHSP; # PDG2014 (subtracted K*)+tiny bit to have sum=1 +0.001200122 anti-K0 pi0 e+ nu_e PHOTOS PHSP; # Keep same as in 2010 version+tiny bit to have sum=1 +# +0.052800000 anti-K*0 mu+ nu_mu PHOTOS ISGW2; # PDG2014 +0.092000000 anti-K0 mu+ nu_mu PHOTOS ISGW2; # PDG2014 +0.002773020 anti-K_10 mu+ nu_mu PHOTOS ISGW2; # Keep same as in 2010 version +0.002927076 anti-K_2*0 mu+ nu_mu PHOTOS ISGW2; # Keep same as in 2010 version +0.004050000 pi0 mu+ nu_mu PHOTOS ISGW2; # Same as electron +0.001140000 eta mu+ nu_mu PHOTOS ISGW2; # Same as electron +0.002200000 eta' mu+ nu_mu PHOTOS ISGW2; # Same as electron +0.002400000 rho0 mu+ nu_mu PHOTOS ISGW2; # PDG2014 +0.001820000 omega mu+ nu_mu PHOTOS ISGW2; # Same as electron +0.002921725 K- pi+ mu+ nu_mu PHOTOS PHSP; # PDG2014 (subtracted K*)+tiny bit to have sum=1 +0.001200122 anti-K0 pi0 mu+ nu_mu PHOTOS PHSP; # Keep same as in 2010 version+tiny bit to have sum=1 +# +# +0.000382000 mu+ nu_mu PHOTOS SLN; #[Reconstructed PDG2011] +0.000770283 tau+ nu_tau SLN; #[Reconstructed PDG2011] +# +0.014900000 K_S0 pi+ PHSP; #[Reconstructed PDG2011] +0.014600000 K_L0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi+ PHSP; #[Reconstructed PDG2011] +# +0.025950843 a_1+ K_S0 SVS; #[Reconstructed PDG2011] +0.025950843 a_1+ K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 a_1+ anti-K0 SVS; #[Reconstructed PDG2011] +# +0.027090862 anti-K'_10 pi+ SVS; #[Reconstructed PDG2011] +#0.0115 anti-K_0*0N pi+ PHSP; +0.013387523 anti-K*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# +# the Dalitz mode below includes K*bar(892)0 pi+, +# K*bar(1430)0 pi+, and K*bar(1680)0 pi+ resonances. +0.094000000 K- pi+ pi+ D_DALITZ; #[Reconstructed PDG2011] +# the Dalitz mode below includes K0bar rho+, +# and K*bar(892)0 pi+ resonances +0.069900000 K_S0 pi+ pi0 D_DALITZ; # PDG2014 +0.069900000 K_L0 pi+ pi0 D_DALITZ; # Assume to be same as K_S0 pi+ pi0 +0.000000000 anti-K0 pi+ pi0 D_DALITZ; #[Reconstructed PDG2011] +#0.0100 anti-K0 eta pi+ PHSP; +# +0.001247859 K_S0 rho0 pi+ PHSP; #[Reconstructed PDG2011] +0.001247859 K_L0 rho0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 rho0 pi+ PHSP; #[Reconstructed PDG2011] +# +0.003851416 anti-K0 omega pi+ PHSP; #[Reconstructed PDG2011] +0.007032686 K- rho+ pi+ PHSP; #[Reconstructed PDG2011] +0.009274210 K*- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.047187552 anti-K*0 pi0 pi+ PHSP; #[Reconstructed PDG2011] +#0.0100 anti-K*0 eta pi+ PHSP; +0.001101505 anti-K*0 rho0 pi+ PHSP; #[Reconstructed PDG2011] +0.003851416 anti-K*0 omega pi+ PHSP; #[Reconstructed PDG2011] +#0.0100 K*- rho+ pi+ PHSP; +# +0.008473116 K- pi+ pi+ pi0 PHSP; #[Reconstructed PDG2011] +# +#0.002472609 K_S0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +#0.002472609 K_L0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.031200000 K_S0 pi+ pi+ pi- PHSP; # PDG2014 (why it was much smaller?) +0.031200000 K_L0 pi+ pi+ pi- PHSP; # PDG2014 +0.000000000 anti-K0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +# +#0.0188 anti-K0 pi+ pi0 pi0 PHSP; +0.005700000 K- pi+ pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.003851416 K- pi+ pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.006701464 anti-K0 pi+ pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.002695991 anti-K0 pi+ pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.004600000 K_S0 K_S0 K+ PHSP; #[Reconstructed PDG2011] +0.003111944 K_L0 K_L0 K+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 anti-K0 K+ PHSP; #[Reconstructed PDG2011] +# +0.004660214 phi pi+ SVS; #[Reconstructed PDG2011] +0.023000000 phi pi+ pi0 PHSP; #[Reconstructed PDG2011] +# +0.002860000 K_S0 K+ PHSP; #[Reconstructed PDG2011] +0.002195307 K_L0 K+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K+ PHSP; #[Reconstructed PDG2011] +# +0.002179902 anti-K*0 K+ SVS; #[Reconstructed PDG2011] +# +0.016000000 K*+ K_S0 SVS; #[Reconstructed PDG2011] +0.011145999 K*+ K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 K*+ anti-K0 SVS; #[Reconstructed PDG2011] +# +#0.0180 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.002826940 K+ K- pi+ PHSP; #[Reconstructed PDG2011] +0.000770283 K+ anti-K0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 pi+ PHSP; #[Reconstructed PDG2011] +0.000770283 K*+ K- pi+ PHSP; #[Reconstructed PDG2011] +0.000770283 K+ K*- pi+ PHSP; #[Reconstructed PDG2011] +0.000770283 K*+ anti-K0 pi0 PHSP; #[Reconstructed PDG2011] +0.000770283 K+ anti-K*0 pi0 PHSP; #[Reconstructed PDG2011] +0.000770283 anti-K*0 K0 pi+ PHSP; #[Reconstructed PDG2011] +0.000770283 anti-K0 K*0 pi+ PHSP; #[Reconstructed PDG2011] +# +0.001260000 pi0 pi+ PHSP; #[Reconstructed PDG2011] +0.000830000 rho0 pi+ SVS; #[Reconstructed PDG2011] +0.002440000 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.004700000 pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.011600000 pi+ pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.003851416 pi+ pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.003430000 eta pi+ PHSP; #[Reconstructed PDG2011] +0.004400000 eta' pi+ PHSP; #[Reconstructed PDG2011] +0.001380000 eta pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.002310850 eta pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001540566 eta pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +#lange jul22,2002 +0.001660000 pi+ pi+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +# March 2009 New Modes +0.009300000 anti-K*0 a_1+ PHSP; #[Reconstructed PDG2011] +0.010545178 K+ K- pi+ pi0 PHSP; #[Reconstructed PDG2011] +# +0.001740000 K+ K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001270967 K+ K_L0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K+ anti-K0 pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.002380000 K_S0 K- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.001756246 K_L0 K- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K- pi+ pi+ PHSP; #[Reconstructed PDG2011] +# +0.000230000 K+ K- pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.000240000 K+ K- K_S0 pi+ PHSP; #[Reconstructed PDG2011] +0.000161759 K+ K- K_L0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 K+ K- anti-K0 pi+ PHSP; #[Reconstructed PDG2011] +# Doubly Cabibbo suppressed modes +0.000237000 K+ pi0 PHSP; #[Reconstructed PDG2011] +0.000332000 K+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000089000 K+ K+ K- PHSP; #[Reconstructed PDG2011] +0.001720000 K- rho0 pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001600000 eta' pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000210000 K+ rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +# +Decay D- +0.055200000 K*0 e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.088300000 K0 e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.002773020 K_10 e- anti-nu_e PHOTOS ISGW2; # Keep same as in 2010 version +0.002927076 K_2*0 e- anti-nu_e PHOTOS ISGW2; # Keep same as in 2010 version +0.004050000 pi0 e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.001140000 eta e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.000220000 eta' e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.002180000 rho0 e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.001820000 omega e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.003321725 K+ pi- e- anti-nu_e PHOTOS PHSP; # PDG2014 (subtracted K*)+tiny bit to have sum=1 +0.001200122 K0 pi0 e- anti-nu_e PHOTOS PHSP; # Keep same as in 2010 version+tiny bit to have sum=1 +# +0.052800000 K*0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.092000000 K0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002773020 K_10 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002927076 K_2*0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.004050000 pi0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.001140000 eta mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002200000 eta' mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002400000 rho0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.001820000 omega mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002921725 K+ pi- mu- anti-nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] +0.001200122 K0 pi0 mu- anti-nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] +# +0.000382000 mu- anti-nu_mu PHOTOS SLN; #[Reconstructed PDG2011] +0.000770283 tau- anti-nu_tau SLN; #[Reconstructed PDG2011] +# +0.014900000 K_S0 pi- PHSP; #[Reconstructed PDG2011] +0.014600000 K_L0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 pi- PHSP; #[Reconstructed PDG2011] +# +0.025950843 a_1- K_S0 SVS; #[Reconstructed PDG2011] +0.025950843 a_1- K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 a_1- K0 SVS; #[Reconstructed PDG2011] +# +0.027090862 K'_10 pi- SVS; #[Reconstructed PDG2011] +#0.0115 K_0*0N pi- PHSP; +0.013387523 K*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# +# the Dalitz mode below includes K*(892)0 pi-, K*(1430)0 pi-, and K*(1680)0 pi- resonances. +0.094000000 K+ pi- pi- D_DALITZ; #[Reconstructed PDG2011] +# the Dalitz mode below includes K0 rho-, and K*(892)0 pi- resonances. +0.069900000 K_S0 pi- pi0 D_DALITZ; # PDG2014 +0.069900000 K_L0 pi- pi0 D_DALITZ; # Assume to be same as K_S0 pi- pi0 +0.000000000 K0 pi- pi0 D_DALITZ; #[Reconstructed PDG2011] +# +#0.0100 K0 eta pi- PHSP; +0.001247859 K_S0 rho0 pi- PHSP; #[Reconstructed PDG2011] +0.001247859 K_L0 rho0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 rho0 pi- PHSP; #[Reconstructed PDG2011] +# +0.003851416 K0 omega pi- PHSP; #[Reconstructed PDG2011] +0.007032686 K+ rho- pi- PHSP; #[Reconstructed PDG2011] +0.009274210 K*+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.047187552 K*0 pi0 pi- PHSP; #[Reconstructed PDG2011] +#0.0100 K*0 eta pi- PHSP; +0.001101505 K*0 rho0 pi- PHSP; #[Reconstructed PDG2011] +0.003851416 K*0 omega pi- PHSP; #[Reconstructed PDG2011] +#0.0100 K*+ rho- pi- PHSP; +# +0.008473116 K+ pi- pi- pi0 PHSP; #[Reconstructed PDG2011] +# +0.031200000 K_S0 pi- pi- pi+ PHSP; # PDG2014 (why it was much smaller?) +0.031200000 K_L0 pi- pi- pi+ PHSP; # PDG2014 +0.000000000 K0 pi- pi- pi+ PHSP; #[Reconstructed PDG2011] +# +#0.0188 K0 pi- pi0 pi0 PHSP; +0.005700000 K+ pi- pi- pi- pi+ PHSP; #[Reconstructed PDG2011] +0.003851416 K+ pi- pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.006701464 K0 pi- pi- pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.002695991 K0 pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.004600000 K_S0 K_S0 K- PHSP; #[Reconstructed PDG2011] +0.003111944 K_L0 K_L0 K- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K0 K- PHSP; #[Reconstructed PDG2011] +# +0.004660214 phi pi- SVS; #[Reconstructed PDG2011] +0.023000000 phi pi- pi0 PHSP; #[Reconstructed PDG2011] +# +0.002860000 K_S0 K- PHSP; #[Reconstructed PDG2011] +0.002195307 K_L0 K- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K- PHSP; #[Reconstructed PDG2011] +# +0.002179902 K*0 K- SVS; #[Reconstructed PDG2011] +# +0.016000000 K*- K_S0 SVS; #[Reconstructed PDG2011] +0.011145999 K*- K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 K*- K0 SVS; #[Reconstructed PDG2011] +# +#0.0180 K*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.002826940 K- K+ pi- PHSP; #[Reconstructed PDG2011] +0.000770283 K- K0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 pi- PHSP; #[Reconstructed PDG2011] +0.000770283 K*- K+ pi- PHSP; #[Reconstructed PDG2011] +0.000770283 K- K*+ pi- PHSP; #[Reconstructed PDG2011] +0.000770283 K*- K0 pi0 PHSP; #[Reconstructed PDG2011] +0.000770283 K- K*0 pi0 PHSP; #[Reconstructed PDG2011] +0.000770283 K*0 anti-K0 pi- PHSP; #[Reconstructed PDG2011] +0.000770283 K0 anti-K*0 pi- PHSP; #[Reconstructed PDG2011] +# +0.001260000 pi0 pi- PHSP; #[Reconstructed PDG2011] +0.000830000 rho0 pi- SVS; #[Reconstructed PDG2011] +0.002440000 pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.004700000 pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.011600000 pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.003851416 pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.003430000 eta pi- PHSP; #[Reconstructed PDG2011] +0.004400000 eta' pi- PHSP; #[Reconstructed PDG2011] +0.001380000 eta pi- pi0 PHSP; #[Reconstructed PDG2011] +0.002310850 eta pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001540566 eta pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +#lange jul22,2002 +0.001660000 pi+ pi- pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +# March 2009 New Modes +0.009300000 K*0 a_1- PHSP; #[Reconstructed PDG2011] +0.010545178 K+ K- pi- pi0 PHSP; #[Reconstructed PDG2011] +# +0.001740000 K- K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001270967 K- K_L0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K- K0 pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.002380000 K_S0 K+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.001756246 K_L0 K+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +0.000230000 K+ K- pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +0.000240000 K+ K- K_S0 pi- PHSP; #[Reconstructed PDG2011] +0.000161759 K+ K- K_L0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K+ K- K0 pi- PHSP; #[Reconstructed PDG2011] +# Doubly Cabibbo suppressed modes +0.000237000 K- pi0 PHSP; #[Reconstructed PDG2011] +0.000332000 K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000089000 K- K+ K- PHSP; #[Reconstructed PDG2011] +0.001720000 K+ rho0 pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001600000 eta' pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000210000 K- rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay K*BR +1.0000 anti-K0 pi0 VSS; +Enddecay +# +# +Decay D0 +# updated according to suggestions by P. Roudeau, +# using PDG2004 measurements and imposing the equality +# of sl partial widths for D+ and D0. +# Include additional decay anti-K0 pi- e+ nu_e , K- pi0 e+ nu_e. +# +0.021600000 K*- e+ nu_e PHOTOS ISGW2; # PDG2014 +0.035500000 K- e+ nu_e PHOTOS ISGW2; # PDG2014 +0.000760000 K_1- e+ nu_e PHOTOS ISGW2; # PDG2014 +0.001100000 K_2*- e+ nu_e PHOTOS ISGW2; # Small decrease as this is unmeasured +0.002890000 pi- e+ nu_e PHOTOS ISGW2; # PDG2014 +0.001770000 rho- e+ nu_e PHOTOS ISGW2; # PDG2014 +0.001080000 anti-K0 pi- e+ nu_e PHOTOS PHSP; # PDG2014 subtracting K* (decreased due large uncertaity ) +0.000400000 K- pi0 e+ nu_e PHOTOS PHSP; # PDG2014 subtracting K* (decreased due large uncertaity ) +# +0.021000000 K*- mu+ nu_mu PHOTOS ISGW2; # 1.1 * PDG2014 +0.034700000 K- mu+ nu_mu PHOTOS ISGW2; # 1.05 * PDG2014 +0.000076000 K_1- mu+ nu_mu PHOTOS ISGW2; # PDG2014 for electron +0.001100000 K_2*- mu+ nu_mu PHOTOS ISGW2; # copy from electron +0.002370000 pi- mu+ nu_mu PHOTOS ISGW2; # PDG2014 +0.002015940 rho- mu+ nu_mu PHOTOS ISGW2; # PDG2014 for electron +0.001080000 anti-K0 pi- mu+ nu_mu PHOTOS PHSP; # copy electron +0.000400000 K- pi0 mu+ nu_mu PHOTOS PHSP; # copy electron +# +0.038900000 K- pi+ PHSP; #[Reconstructed PDG2011] +# +0.012200000 K_S0 pi0 PHSP; #[Reconstructed PDG2011] +0.010000000 K_L0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.004290000 K_S0 eta PHSP; #[Reconstructed PDG2011] +0.003802795 K_L0 eta PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 eta PHSP; #[Reconstructed PDG2011] +# +0.009300000 K_S0 eta' PHSP; #[Reconstructed PDG2011] +0.008980094 K_L0 eta' PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 eta' PHSP; #[Reconstructed PDG2011] +# +0.011100000 omega K_S0 SVS; #[Reconstructed PDG2011] +0.010904400 omega K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 omega anti-K0 SVS; #[Reconstructed PDG2011] +# +0.001603588 anti-K*0 eta SVS; #[Reconstructed PDG2011] +0.000916336 anti-K*0 eta' SVS; #[Reconstructed PDG2011] +0.078000000 a_1+ K- SVS; #[Reconstructed PDG2011] +0.067625607 K*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.015800000 anti-K*0 rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.011000000 anti-K*0 omega SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# the Dalitz mode below includes K*bar(892)0 pi0, +# K*(892)- pi+, and K- rho(770)+ resonances +0.139000000 K- pi+ pi0 D_DALITZ; #[Reconstructed PDG2011] +0.006634274 K*BR pi0 SVS; #[Reconstructed PDG2011] +0.016000000 K_1- pi+ SVS; #[Reconstructed PDG2011] +0.006505987 anti-K_10 pi0 SVS; #[Reconstructed PDG2011] +# +# the Dalitz mode below includes K*(892)- pi+ and Kbar0 rho(770)0 resonances +# LHCb PR 09 Apr 2004 split into KS/KL +0.029400000 K_S0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] +0.027856619 K_L0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] +# +0.008300000 K_S0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.004425904 K_L0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.024000000 anti-K*0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.010629499 anti-K*0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.009163361 K*- pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.006231086 K- rho+ pi0 PHSP; #[Reconstructed PDG2011] +0.005305586 K- pi+ rho0 PHSP; #[Reconstructed PDG2011] +0.019000000 K- pi+ omega PHSP; #[Reconstructed PDG2011] +0.009163361 K- pi+ eta PHSP; #[Reconstructed PDG2011] +0.007500000 K- pi+ eta' PHSP; #[Reconstructed PDG2011] +0.013300000 K- pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.054000000 K_S0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.010079698 K_L0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +# +# K- pi+ pi0 pi0 is (15 +/- 5)% in the PDG, but we decrease it to +# have everything add to 1 and get enough neutral kaons: +#0.02575 K- pi+ pi0 pi0 PHSP; +# +#0.0143 anti-K0 pi0 pi0 pi0 PHSP; +0.040316317 anti-K0 pi0 pi0 pi0 PHSP; # Add in to fill sum to 1. [MK June 2015] +0.000000000 K- pi+ pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.003482077 K- pi+ pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.002800000 K_S0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002684865 K_L0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +# +#0.0638 anti-K0 pi+ pi- pi0 pi0 PHSP; +#0.0192 anti-K0 pi+ pi- pi0 pi0 pi0 PHSP; +# +0.002034266 phi K_S0 SVS; #[Reconstructed PDG2011] +0.002034266 phi K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 phi anti-K0 SVS; #[Reconstructed PDG2011] +# +0.004650000 K_S0 K+ K- PHSP; #[Reconstructed PDG2011] +0.002785662 K_L0 K+ K- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K+ K- PHSP; #[Reconstructed PDG2011] +# +0.000950000 K_S0 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.003940000 K+ K- PHSP; #[Reconstructed PDG2011] +0.000190000 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.000366534 K_L0 K_L0 PHSP; #[Reconstructed PDG2011] +0.000366534 K*0 anti-K0 SVS; #[Reconstructed PDG2011] +# +0.000091634 anti-K*0 K_S0 SVS; #[Reconstructed PDG2011] +0.000091634 anti-K*0 K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 anti-K*0 K0 SVS; #[Reconstructed PDG2011] +# +0.000485658 K*- K+ SVS; #[Reconstructed PDG2011] +0.001365341 K*+ K- SVS; #[Reconstructed PDG2011] +0.001282871 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000714742 phi pi0 SVS; #[Reconstructed PDG2011] +0.001007970 phi pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002430000 K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002749008 K+ K- pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.001280000 K_S0 K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001255381 K_L0 K_L0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.001374504 anti-K0 K0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.001397000 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000800000 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000640000 eta pi0 PHSP; #[Reconstructed PDG2011] +0.000810000 eta' pi0 PHSP; #[Reconstructed PDG2011] +0.001670000 eta eta PHSP; #[Reconstructed PDG2011] +0.009800000 rho+ pi- SVS; #[Reconstructed PDG2011] +0.004970000 rho- pi+ SVS; #[Reconstructed PDG2011] +0.003730000 rho0 pi0 SVS; #[Reconstructed PDG2011] +0.001209564 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000091634 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.005620000 pi+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.009360000 pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.001510000 pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.005498017 pi+ pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000420000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +# +# Doubly Cabibbo suppressed decays: +0.000137450 pi- K+ PHSP; #[Reconstructed PDG2011] +0.000128287 pi- K*+ PHSP; #[Reconstructed PDG2011] +0.000274901 pi- K+ pi0 PHSP; #[Reconstructed PDG2011] +0.000247411 K+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +# PR LHCb - 19 Apr. 2004 Add D0 -> mu+ mu- +0.000000000 mu+ mu- PHSP; #[Reconstructed PDG2011] +# +# March 2009 New Modes +0.000140000 phi eta PHSP; #[Reconstructed PDG2011] +0.019000000 anti-K*0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000220000 K- pi+ pi- pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] +0.000641435 K+ K- pi0 PHSP; #[Reconstructed PDG2011] +0.003100000 K+ K- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000221000 K+ K- K- pi+ PHSP; #[Reconstructed PDG2011] +# +0.005600000 K_S0 eta pi0 PHSP; #[Reconstructed PDG2011] +0.003665345 K_L0 eta pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 eta pi0 PHSP; #[Reconstructed PDG2011] +# +0.002600000 K_S0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.002382474 K_L0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K+ pi- PHSP; #[Reconstructed PDG2011] +# +0.003500000 K_S0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.003344627 K_L0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K- pi+ PHSP; #[Reconstructed PDG2011] +# +0.000310000 K_S0 K_S0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.000293228 K_L0 K_L0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 K+ pi- PHSP; #[Reconstructed PDG2011] +# +0.000310000 K_S0 K_S0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000293228 K_L0 K_L0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 K- pi+ pi- e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001820000 rho0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001090000 eta pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001600000 omega pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000450000 eta' pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001260000 eta eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000027000 phi gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000328000 anti-K*0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +# +Decay K*0R +1.0000 K0 pi0 VSS; +Enddecay +# +# +Decay anti-D0 +0.021600000 K*+ e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.035500000 K+ e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.000760000 K_1+ e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.001100000 K_2*+ e- anti-nu_e PHOTOS ISGW2; # Small decrease as this is unmeasured +0.002890000 pi+ e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.001770000 rho+ e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.001080000 K0 pi+ e- anti-nu_e PHOTOS PHSP; # PDG2014 subtracting K* (decreased due large uncertaity ) +0.000400000 K+ pi0 e- anti-nu_e PHOTOS PHSP; # PDG2014 subtracting K* (decreased due large uncertaity ) +# +0.021000000 K*+ mu- anti-nu_mu PHOTOS ISGW2; # 1.1 * PDG2014 +0.034700000 K+ mu- anti-nu_mu PHOTOS ISGW2; # 1.05 * PDG2014 +0.000076000 K_1+ mu- anti-nu_mu PHOTOS ISGW2; # PDG2014 for electron +0.001100000 K_2*+ mu- anti-nu_mu PHOTOS ISGW2; # copy from electron +0.002370000 pi+ mu- anti-nu_mu PHOTOS ISGW2; # PDG2014 +0.002015940 rho+ mu- anti-nu_mu PHOTOS ISGW2; # PDG2014 for electron +0.001080000 K0 pi+ mu- anti-nu_mu PHOTOS PHSP; # copy electron +0.000400000 K+ pi0 mu- anti-nu_mu PHOTOS PHSP; # copy electron +# +0.038900000 K+ pi- PHSP; #[Reconstructed PDG2011] +# +0.012200000 K_S0 pi0 PHSP; #[Reconstructed PDG2011] +0.010000000 K_L0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 K0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.004290000 K_S0 eta PHSP; #[Reconstructed PDG2011] +0.003818748 K_L0 eta PHSP; #[Reconstructed PDG2011] +0.000000000 K0 eta PHSP; #[Reconstructed PDG2011] +# +0.009300000 K_S0 eta' PHSP; #[Reconstructed PDG2011] +0.009017767 K_L0 eta' PHSP; #[Reconstructed PDG2011] +0.000000000 K0 eta' PHSP; #[Reconstructed PDG2011] +# +0.011100000 omega K_S0 SVS; #[Reconstructed PDG2011] +0.010950146 omega K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 omega K0 SVS; #[Reconstructed PDG2011] +# +0.001610316 K*0 eta SVS; #[Reconstructed PDG2011] +0.000920180 K*0 eta' SVS; #[Reconstructed PDG2011] +0.078000000 a_1- K+ SVS; #[Reconstructed PDG2011] +0.067909308 K*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.015800000 K*0 rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.011000000 K*0 omega SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# the Dalitz mode below includes K*(892)0 pi0, K*(892)+ pi-, and K+ rho(770)- resonances +0.139000000 K+ pi- pi0 D_DALITZ; #[Reconstructed PDG2011] +0.006662106 K*0R pi0 SVS; #[Reconstructed PDG2011] +0.016000000 K_1+ pi- SVS; #[Reconstructed PDG2011] +0.006533280 K_10 pi0 SVS; #[Reconstructed PDG2011] +# the Dalitz mode below includes K*(892)+ pi- and K0 rho(770)0 resonances +# LHCb PR 09 Apr 2004, split into KS/KL +0.000000000 K0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] +0.029400000 K_S0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] +0.027973482 K_L0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] +# +0.008300000 K_S0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.004444471 K_L0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 K0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.024000000 K*0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.010674092 K*0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.009201803 K*+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.006257226 K+ rho- pi0 PHSP; #[Reconstructed PDG2011] +0.005327844 K+ pi- rho0 PHSP; #[Reconstructed PDG2011] +0.019000000 K+ pi- omega PHSP; #[Reconstructed PDG2011] +0.009201803 K+ pi- eta PHSP; #[Reconstructed PDG2011] +0.007500000 K+ pi- eta' PHSP; #[Reconstructed PDG2011] +0.013300000 K+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.054000000 K_S0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.010121984 K_L0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 K0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +# +# K+ pi- pi0 pi0 is (15 +/- 5)% in the PDG, but we decrease it to +# have everything add to 1 and get enough neutral kaons: +#0.02575 K+ pi- pi0 pi0 PHSP; +# +#0.0143 K0 pi0 pi0 pi0 PHSP; +0.040346268 K0 pi0 pi0 pi0 PHSP; +0.000000000 K+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.003496685 K+ pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.002800000 K_S0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002696128 K_L0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +# +#0.0638 K0 pi- pi+ pi0 pi0 PHSP; +#0.0192 K0 pi- pi+ pi0 pi0 pi0 PHSP; +# +0.002042800 phi K_S0 SVS; #[Reconstructed PDG2011] +0.002042800 phi K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 phi K0 SVS; #[Reconstructed PDG2011] +# +0.004650000 K_S0 K+ K- PHSP; #[Reconstructed PDG2011] +0.002797348 K_L0 K+ K- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K+ K- PHSP; #[Reconstructed PDG2011] +# +0.000950000 K_S0 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.003940000 K+ K- PHSP; #[Reconstructed PDG2011] +0.000190000 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.000368072 K_L0 K_L0 PHSP; #[Reconstructed PDG2011] +0.000368072 anti-K*0 K0 SVS; #[Reconstructed PDG2011] +# +0.000092018 K*0 K_S0 SVS; #[Reconstructed PDG2011] +0.000092018 K*0 K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 K*0 anti-K0 SVS; #[Reconstructed PDG2011] +# +0.000487696 K*+ K- SVS; #[Reconstructed PDG2011] +0.001371069 K*- K+ SVS; #[Reconstructed PDG2011] +0.001288252 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000717741 phi pi0 SVS; #[Reconstructed PDG2011] +0.001012198 phi pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002430000 K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002760541 K+ K- pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.001280000 K_S0 K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001260647 K_L0 K_L0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.001380270 anti-K0 K0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.001397000 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000800000 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000640000 eta pi0 PHSP; #[Reconstructed PDG2011] +0.000810000 eta' pi0 PHSP; #[Reconstructed PDG2011] +0.001670000 eta eta PHSP; #[Reconstructed PDG2011] +0.009128189 rho+ pi- SVS; #[Reconstructed PDG2011] +0.004637709 rho- pi+ SVS; #[Reconstructed PDG2011] +0.003730000 rho0 pi0 SVS; #[Reconstructed PDG2011] +0.001214638 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000092018 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.005620000 pi+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.009360000 pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.001510000 pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.005521082 pi+ pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000420000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +# +# Doubly Cabibbo suppressed decays: +0.000138027 pi+ K- PHSP; #[Reconstructed PDG2011] +0.000128825 pi+ K*- PHSP; #[Reconstructed PDG2011] +0.000276054 pi+ K- pi0 PHSP; #[Reconstructed PDG2011] +0.000248449 K- pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +# PR LHCb - 19 Apr. 2004 Add anti-D0 -> mu+ mu- +0.000000000 mu- mu+ PHSP; #[Reconstructed PDG2011] +# +# March 2009 New Modes +0.000140000 phi eta PHSP; #[Reconstructed PDG2011] +0.019000000 K*0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000220000 K+ pi- pi- pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] +0.000644126 K+ K- pi0 PHSP; #[Reconstructed PDG2011] +0.003100000 K+ K- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000221000 K+ K+ K- pi- PHSP; #[Reconstructed PDG2011] +# +0.005600000 K_S0 eta pi0 PHSP; #[Reconstructed PDG2011] +0.003680721 K_L0 eta pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 K0 eta pi0 PHSP; #[Reconstructed PDG2011] +# +0.002600000 K_S0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.002392469 K_L0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K- pi+ PHSP; #[Reconstructed PDG2011] +# +0.003500000 K_S0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.003358658 K_L0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K+ pi- PHSP; #[Reconstructed PDG2011] +# +0.000310000 K_S0 K_S0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.000294458 K_L0 K_L0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 K+ pi- PHSP; #[Reconstructed PDG2011] +# +0.000310000 K_S0 K_S0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000294458 K_L0 K_L0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 K+ pi- pi+ e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001820000 rho0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001090000 eta pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001600000 omega pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000450000 eta' pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001260000 eta eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000027000 phi gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000328000 K*0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +# Updated to PDG 2008 +Decay D_s+ +0.024900000 phi e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.026700000 eta e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.009900000 eta' e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002058115 anti-K0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.000762265 anti-K*0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.018309605 phi mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.022845082 eta mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.008186726 eta' mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002058115 anti-K0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.000762265 anti-K*0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.005800000 mu+ nu_mu PHOTOS SLN; #[Reconstructed PDG2011] +0.031100000 tau+ nu_tau SLN; #[Reconstructed PDG2011] +### Lange Nov14, 2004 - average cleo + babar (prelim) using stat error only.. +0.045000000 phi pi+ SVS; #[Reconstructed PDG2011] +0.015600000 eta pi+ PHSP; #[Reconstructed PDG2011] +0.038000000 eta' pi+ PHSP; #[Reconstructed PDG2011] +0.002300000 omega pi+ SVS; #[Reconstructed PDG2011] +0.000304906 rho+ pi0 SVS; #[Reconstructed PDG2011] +0.000076226 pi+ pi0 PHSP; #[Reconstructed PDG2011] +#? +0.000196200 rho0 pi+ SVS; # PDG 2014 +0.007852048 f_0 pi+ PHSP; # PDG 2014 +0.001753646 f_2 pi+ PHSP; # PDG 2014 +0.004754077 f'_0 pi+ PHSP; # PDG 2014 +0.005768112 f_0(1500) pi+ PHSP; # PDG 2014 +#0.000735750 rho(2S)0 pi+ PHSP; # PDG 2014 +0.000000000 pi+ pi- pi+ PHSP; # PDG 2014 (filled by exclusives) +0.084000000 phi rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.089000000 rho+ eta SVS; #[Reconstructed PDG2011] +0.124213286 rho+ eta' SVS; # Decrease compared to PDG 2014 to preserve unitarity after +# # fixing Ds --> 3pi, we also have too much of inclusive eta', +# #so pick this decay +0.006500000 pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.007622650 phi pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.011433975 eta pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.011433975 eta' pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.012100000 phi pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] +0.003811325 phi pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.003811325 eta pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] +0.003811325 eta pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.014900000 K_S0 K+ PHSP; #[Reconstructed PDG2011] +0.011472088 K_L0 K+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K+ PHSP; #[Reconstructed PDG2011] +# +0.030490600 anti-K*0 K+ SVS; #[Reconstructed PDG2011] +0.054000000 K*+ anti-K0 SVS; #[Reconstructed PDG2011] +0.072000000 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.002286795 anti-K0 K+ pi0 PHSP; #[Reconstructed PDG2011] +0.000914718 anti-K*0 K+ pi0 PHSP; #[Reconstructed PDG2011] +0.000914718 K*+ anti-K0 pi0 PHSP; #[Reconstructed PDG2011] +0.003049060 anti-K*0 K*+ pi0 PHSP; #[Reconstructed PDG2011] +0.003811325 K+ K- pi+ PHSP; #[Reconstructed PDG2011] +# +0.009600000 K_S0 K+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.007470197 K_L0 K+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K+ pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.000762265 anti-K0 K+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 K+ K- pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] +0.000152453 phi K+ SVS; #[Reconstructed PDG2011] +0.001390000 eta K+ PHSP; #[Reconstructed PDG2011] +0.001600000 eta' K+ PHSP; #[Reconstructed PDG2011] +0.000152453 eta K+ pi0 PHSP; #[Reconstructed PDG2011] +0.000152453 eta K+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000152453 eta' K+ pi0 PHSP; #[Reconstructed PDG2011] +0.000152453 eta' K+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000490000 K+ K- K+ PHSP; #[Reconstructed PDG2011] +# +0.001200000 K_S0 pi+ PHSP; #[Reconstructed PDG2011] +0.000968077 K_L0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 K0 pi+ PHSP; #[Reconstructed PDG2011] +# +0.001143397 rho+ K0 SVS; #[Reconstructed PDG2011] +0.002700000 rho0 K+ SVS; #[Reconstructed PDG2011] +0.010000000 K0 pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.001905662 a_1+ K0 SVS; #[Reconstructed PDG2011] +0.006021893 K*0 pi+ SVS; #[Reconstructed PDG2011] +0.003811325 K*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.003811325 K*0 pi+ pi0 PHSP; #[Reconstructed PDG2011] +# +# March 2009 New Modes +0.000820000 K+ pi0 PHSP; #[Reconstructed PDG2011] +0.004200000 K+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.008000000 pi+ pi+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.049000000 pi+ pi+ pi+ pi- pi- pi0 PHSP; #[Reconstructed PDG2011] +0.001300000 p+ anti-n0 PHSP; #[Reconstructed PDG2011] +# +0.000840000 K_S0 K_S0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000686038 K_L0 K_L0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.002900000 K_S0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002424003 K_L0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +# Doubly Cabibbo suppressed +0.000129000 K+ K+ pi- PHSP; #[Reconstructed PDG2011] +0.003700000 K0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 K*0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 K+ K- pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.028000000 omega pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.016000000 omega pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +# Updated to PDG 2008 +Decay D_s- +0.024900000 phi e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.026700000 eta e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.009900000 eta' e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002058115 K0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.000762265 K*0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.018309605 phi mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.022845082 eta mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.008186726 eta' mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002058115 K0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.000762265 K*0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.005800000 mu- anti-nu_mu PHOTOS SLN; #[Reconstructed PDG2011] +0.031100000 tau- anti-nu_tau SLN; #[Reconstructed PDG2011] +0.045000000 phi pi- SVS; #[Reconstructed PDG2011] +0.015600000 eta pi- PHSP; #[Reconstructed PDG2011] +0.038000000 eta' pi- PHSP; #[Reconstructed PDG2011] +0.002300000 omega pi- SVS; #[Reconstructed PDG2011] +0.000304906 rho- pi0 SVS; #[Reconstructed PDG2011] +0.000076226 pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000196200 rho0 pi- SVS; # PDG 2014 +0.007852048 f_0 pi- PHSP; # PDG 2014 +0.001753646 f_2 pi- PHSP; # PDG 2014 +0.004754077 f'_0 pi- PHSP; # PDG 2014 +0.005768112 f_0(1500) pi- PHSP; # PDG 2014 +#0.000735750 rho(2S)0 pi- PHSP; # PDG 2014 +0.000000000 pi- pi+ pi- PHSP; # PDG 2014 (filled by exclusives) +0.084000000 phi rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.089000000 rho- eta SVS; #[Reconstructed PDG2011] +0.124213286 rho- eta' SVS; # Decrease compared to PDG 2014 to preserve unitarity after +0.006500000 pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.007622650 phi pi- pi0 PHSP; #[Reconstructed PDG2011] +0.011433975 eta pi- pi0 PHSP; #[Reconstructed PDG2011] +0.011433975 eta' pi- pi0 PHSP; #[Reconstructed PDG2011] +0.012100000 phi pi- pi- pi+ PHSP; #[Reconstructed PDG2011] +0.003811325 phi pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.003811325 eta pi- pi- pi+ PHSP; #[Reconstructed PDG2011] +0.003811325 eta pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.014900000 K_S0 K- PHSP; #[Reconstructed PDG2011] +0.011472088 K_L0 K- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K- PHSP; #[Reconstructed PDG2011] +# +0.030490600 K*0 K- SVS; #[Reconstructed PDG2011] +0.054000000 K*- K0 SVS; #[Reconstructed PDG2011] +0.072000000 K*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.002286795 K0 K- pi0 PHSP; #[Reconstructed PDG2011] +0.000914718 K*0 K- pi0 PHSP; #[Reconstructed PDG2011] +0.000914718 K*- K0 pi0 PHSP; #[Reconstructed PDG2011] +0.003049060 K*0 K*- pi0 PHSP; #[Reconstructed PDG2011] +0.003811325 K+ K- pi- PHSP; #[Reconstructed PDG2011] +# +0.009600000 K_S0 K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.007470197 K_L0 K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K- pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.000762265 K0 K- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 K- K+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000152453 phi K- SVS; #[Reconstructed PDG2011] +0.001390000 eta K- PHSP; #[Reconstructed PDG2011] +0.001600000 eta' K- PHSP; #[Reconstructed PDG2011] +0.000152453 eta K- pi0 PHSP; #[Reconstructed PDG2011] +0.000152453 eta K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000152453 eta' K- pi0 PHSP; #[Reconstructed PDG2011] +0.000152453 eta' K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000490000 K- K- K+ PHSP; #[Reconstructed PDG2011] +# +0.001200000 K_S0 pi- PHSP; #[Reconstructed PDG2011] +0.000968077 K_L0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi- PHSP; #[Reconstructed PDG2011] +# +0.001143397 rho- anti-K0 SVS; #[Reconstructed PDG2011] +0.002700000 rho0 K- SVS; #[Reconstructed PDG2011] +0.010000000 anti-K0 pi- pi0 PHSP; #[Reconstructed PDG2011] +0.001905662 a_1- anti-K0 SVS; #[Reconstructed PDG2011] +0.006021893 anti-K*0 pi- SVS; #[Reconstructed PDG2011] +0.003811325 anti-K*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.003811325 anti-K*0 pi- pi0 PHSP; #[Reconstructed PDG2011] +# +# March 2009 New Modes +0.000820000 K- pi0 PHSP; #[Reconstructed PDG2011] +0.004200000 K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.008000000 pi+ pi+ pi- pi- pi- PHSP; #[Reconstructed PDG2011] +0.049000000 pi+ pi+ pi- pi- pi- pi0 PHSP; #[Reconstructed PDG2011] +0.001300000 anti-p- n0 PHSP; #[Reconstructed PDG2011] +# +0.000840000 K_S0 K_S0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.000686038 K_L0 K_L0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +0.002900000 K_S0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.002424003 K_L0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +# Doubly Cabibbo suppressed +0.000129000 K- K- pi+ PHSP; #[Reconstructed PDG2011] +0.003700000 anti-K0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 anti-K*0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 K- K+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.028000000 omega pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.016000000 omega pi- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +# D** +# +Decay D_0*+ +0.3333 D+ pi0 PHSP; +0.6667 D0 pi+ PHSP; +Enddecay +Decay D_0*- +0.3333 D- pi0 PHSP; +0.6667 anti-D0 pi- PHSP; +Enddecay +Decay D_0*0 +0.3333 D0 pi0 PHSP; +0.6667 D+ pi- PHSP; +Enddecay +Decay anti-D_0*0 +0.3333 anti-D0 pi0 PHSP; +0.6667 D- pi+ PHSP; +Enddecay +# + +SetLineshapePW D_1+ D*+ pi0 2 +SetLineshapePW D_1+ D*0 pi+ 2 +SetLineshapePW D_1- D*- pi0 2 +SetLineshapePW D_1- anti-D*0 pi- 2 +SetLineshapePW D_10 D*0 pi0 2 +SetLineshapePW D_10 D*+ pi- 2 +SetLineshapePW anti-D_10 anti-D*0 pi0 2 +SetLineshapePW anti-D_10 D*- pi+ 2 + +Decay D_1+ +0.3333 D*+ pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.6667 D*0 pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +Decay D_1- +0.3333 D*- pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.6667 anti-D*0 pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +Decay D_10 +0.3333 D*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.6667 D*+ pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +Decay anti-D_10 +0.3333 anti-D*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.6667 D*- pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +# +Decay D'_1+ +0.3333 D*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.6667 D*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay D'_1- +0.3333 D*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.6667 anti-D*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay D'_10 +0.6667 D*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3333 D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay anti-D'_10 +0.3333 anti-D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.6667 D*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# + +SetLineshapePW D_2*+ D*+ pi0 2 +SetLineshapePW D_2*+ D*0 pi+ 2 +SetLineshapePW D_2*- D*- pi0 2 +SetLineshapePW D_2*- anti-D*0 pi- 2 +SetLineshapePW D_2*0 D*0 pi0 2 +SetLineshapePW D_2*0 D*+ pi- 2 +SetLineshapePW anti-D_2*0 anti-D*0 pi0 2 +SetLineshapePW anti-D_2*0 D*- pi+ 2 + +Decay D_2*+ +0.1030 D*+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.2090 D*0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.2290 D+ pi0 TSS; +0.4590 D0 pi+ TSS; +Enddecay +Decay D_2*- +0.1030 D*- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.2090 anti-D*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.2290 D- pi0 TSS; +0.4590 anti-D0 pi- TSS; +Enddecay +Decay D_2*0 +0.2090 D*+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.1030 D*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.2290 D0 pi0 TSS; +0.4590 D+ pi- TSS; +Enddecay +Decay anti-D_2*0 +0.1030 anti-D*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.2090 D*- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.2290 anti-D0 pi0 TSS; +0.4590 D- pi+ TSS; +Enddecay +# +# D_s ** +# +Decay D_s0*+ +# 0.5000 D+ K0 PHSP; +# 0.5000 D0 K+ PHSP; +1.000 D_s+ pi0 PHSP; +Enddecay +Decay D_s0*- +# 0.5000 D- anti-K0 PHSP; +# 0.5000 anti-D0 K- PHSP; +1.000 D_s- pi0 PHSP; +Enddecay +Decay D'_s1+ +0.5000 D*+ K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.5000 D*0 K+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.0000 gamma D_s*+ PHSP; +0.0000 gamma D_s+ PHSP; +Enddecay +Decay D'_s1- +0.5000 D*- anti-K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.5000 anti-D*0 K- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.0000 gamma D_s*- PHSP; +0.0000 gamma D_s- PHSP; +Enddecay +Decay D_s1+ +0.80000 D_s*+ pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.20000 D_s+ gamma VSP_PWAVE; +Enddecay +Decay D_s1- +0.80000 D_s*- pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.20000 D_s- gamma VSP_PWAVE; +Enddecay +Decay D_s2*+ +0.0500 D*+ K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0500 D*0 K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.4300 D+ K0 TSS; +0.4700 D0 K+ TSS; +Enddecay +Decay D_s2*- +0.0500 D*- anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0500 anti-D*0 K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.4300 D- anti-K0 TSS; +0.4700 anti-D0 K- TSS; +Enddecay +# +# +# Charm Mesons: Radially Excited States +# +Decay D(2S)0 +0.6667 D*+ pi- SVS; +0.3333 D*0 pi0 SVS; +Enddecay +Decay anti-D(2S)0 +0.3333 anti-D*0 pi0 SVS; +0.6667 D*- pi+ SVS; +Enddecay +Decay D(2S)+ +0.3333 D*+ pi0 SVS; +0.6667 D*0 pi+ SVS; +Enddecay +Decay D(2S)- +0.3333 D*- pi0 SVS; +0.6667 anti-D*0 pi- SVS; +Enddecay +Decay D*(2S)0 +0.3333 D*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1667 D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1667 D0 pi0 VSS; +0.3333 D+ pi- VSS; +Enddecay +Decay anti-D*(2S)0 +0.1667 anti-D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3333 D*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1667 anti-D0 pi0 VSS; +0.3333 D- pi+ VSS; +Enddecay +Decay D*(2S)+ +0.1667 D*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3333 D*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1667 D+ pi0 VSS; +0.3333 D0 pi+ VSS; +Enddecay +Decay D*(2S)- +0.1667 D*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3333 anti-D*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1667 D- pi0 VSS; +0.3333 anti-D0 pi- VSS; +Enddecay +# +# +# Strange Mesons updated to PDG 2008 +# +# +Decay K_S0 +0.691086452 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.305986452 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000201 pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001722185 pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000042831 pi+ pi- e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000025 pi0 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002399 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000344328 pi+ e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000344328 pi- e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000235400 pi+ mu- anti-nu_mu PHSP; #[New mode added] #TP manually added 9/1/2011 according to pdg +0.000235400 pi- mu+ nu_mu PHSP; #[New mode added] #TP manually added 9/1/2011 according to pdg +Enddecay +# +# K_L0 is decayed in GEANT +# +Decay K0 +0.500 K_L0 PHSP; +0.500 K_S0 PHSP; +Enddecay +Decay anti-K0 +0.500 K_L0 PHSP; +0.500 K_S0 PHSP; +Enddecay +# +Decay K*0 +0.6657 K+ pi- VSS; +0.3323 K0 pi0 VSS; +0.0020 K0 gamma VSP_PWAVE; +Enddecay +# +Decay anti-K*0 +0.6657 K- pi+ VSS; +0.3323 anti-K0 pi0 VSS; +0.0020 anti-K0 gamma VSP_PWAVE; +Enddecay +# +Decay K*+ +0.6657 K0 pi+ VSS; +0.3323 K+ pi0 VSS; +0.0020 K+ gamma VSP_PWAVE; +Enddecay +# +Decay K*- +0.6657 anti-K0 pi- VSS; +0.3323 K- pi0 VSS; +0.0020 K- gamma VSP_PWAVE; +Enddecay +# +# The decays below are for particle aliases and used when +# generating CP violating decays that depends on the decay +# of the neutral K* +# +Decay K*L +1.0000 pi0 K_L0 VSS; +Enddecay +Decay K*S +1.0000 pi0 K_S0 VSS; +Enddecay +Decay K*BL +1.0000 pi0 K_L0 VSS; +Enddecay +Decay K*BS +1.0000 pi0 K_S0 VSS; +Enddecay +Decay K*0T +1.0000 pi- K+ VSS; +Enddecay +Decay anti-K*0T +1.0000 pi+ K- VSS; +Enddecay +# +# +Decay K_0*+ +0.6667 K0 pi+ PHSP; +0.3333 K+ pi0 PHSP; +Enddecay +# +Decay K_0*- +0.6667 anti-K0 pi- PHSP; +0.3333 K- pi0 PHSP; +Enddecay +# +Decay K_0*0 +0.6667 K+ pi- PHSP; +0.3333 K0 pi0 PHSP; +Enddecay +# +Decay K_0*0N +1.0000 K0 pi0 PHSP; +Enddecay +# +Decay anti-K_0*0 +0.6667 K- pi+ PHSP; +0.3333 anti-K0 pi0 PHSP; +Enddecay +# +Decay anti-K_0*0N +1.0000 anti-K0 pi0 PHSP; +Enddecay +# +Decay K_10 +0.2800 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1400 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1067 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0533 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +#To large masses can cause infinit loops +0.1100 omega K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1444 K0 pi+ pi- PHSP; +0.1244 K+ pi- pi0 PHSP; +0.0412 K0 pi0 pi0 PHSP; +Enddecay +# +Decay anti-K_10 +0.2800 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1400 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1067 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0533 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +#To large masses can cause infinit loops +0.1100 omega anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1444 anti-K0 pi+ pi- PHSP; +0.1244 K- pi+ pi0 PHSP; +0.0412 anti-K0 pi0 pi0 PHSP; +Enddecay +# +Decay K_1+ +0.2800 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1400 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1067 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0533 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +#To large masses can cause infinit loops +0.1100 omega K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1444 K+ pi+ pi- PHSP; +0.1244 K0 pi+ pi0 PHSP; +0.0412 K+ pi0 pi0 PHSP; +Enddecay +# +Decay K_1- +0.2800 rho- anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1400 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1067 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0533 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +#To large masses can cause infinit loops +0.1100 omega K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1444 K- pi+ pi- PHSP; +0.1244 anti-K0 pi- pi0 PHSP; +0.0412 K- pi0 pi0 PHSP; +Enddecay +# +Decay K'_1+ +0.6300 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3100 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0200 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 omega K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0133 K+ pi+ pi- PHSP; +0.0067 K+ pi0 pi0 PHSP; +Enddecay +# +Decay K'_1- +0.6300 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3100 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0200 rho- anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 omega K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0133 K- pi+ pi- PHSP; +0.0067 K- pi0 pi0 PHSP; +Enddecay +# +Decay K'_10 +0.6300 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3100 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0200 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 omega K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0133 K0 pi+ pi- PHSP; +0.0067 K0 pi0 pi0 PHSP; +Enddecay +# +Decay anti-K'_10 +0.6300 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3100 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0200 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 omega anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0133 anti-K0 pi+ pi- PHSP; +0.0067 anti-K0 pi0 pi0 PHSP; +Enddecay +# +Decay K_2*+ +0.3340 K0 pi+ TSS; +0.1670 K+ pi0 TSS; +0.1645 K*0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0835 K*+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0450 K*0 pi+ pi0 PHSP; +0.0450 K*+ pi+ pi- PHSP; +0.0450 K*+ pi0 pi0 PHSP; +0.0580 rho+ K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 rho0 K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 omega K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay +# +Decay K_2*- +0.3340 anti-K0 pi- TSS; +0.1670 K- pi0 TSS; +0.1645 anti-K*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0835 K*- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0450 anti-K*0 pi- pi0 PHSP; +0.0450 K*- pi+ pi- PHSP; +0.0450 K*- pi0 pi0 PHSP; +0.0580 rho- K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 rho0 K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 omega K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay +# +Decay K_2*0 +0.3340 K+ pi- TSS; +0.1670 K0 pi0 TSS; +0.1645 K*+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0835 K*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0450 K*0 pi+ pi- PHSP; +0.0450 K*0 pi0 pi0 PHSP; +0.0450 K*+ pi- pi0 PHSP; +0.0580 rho- K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 rho0 K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 omega K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay +# +Decay anti-K_2*0 +0.3340 K- pi+ TSS; +0.1670 anti-K0 pi0 TSS; +0.1645 K*- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0835 anti-K*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0450 anti-K*0 pi+ pi- PHSP; +0.0450 anti-K*0 pi0 pi0 PHSP; +0.0450 K*- pi+ pi0 PHSP; +0.0580 rho+ K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 rho0 anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 omega anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay + + + + +# Decay K*(1410) +Decay K'*0 +0.0467 K+ pi- VSS; +0.0233 K0 pi0 VSS; +0.5760 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.2880 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0440 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0220 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay anti-K'*0 +0.0467 K- pi+ VSS; +0.0233 anti-K0 pi0 VSS; +0.5760 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.2880 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0440 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0220 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay K'*+ +0.0467 K0 pi+ VSS; +0.0233 K+ pi0 VSS; +0.5760 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.2880 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0440 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0220 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay K'*- +0.0467 anti-K0 pi- VSS; +0.0233 K- pi0 VSS; +0.5760 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.2880 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0440 rho- K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0220 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# + + +# Decay K*(1680) +Decay K''*0 +0.2580 K+ pi- VSS; +0.1290 K0 pi0 VSS; +0.2093 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1047 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1993 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0997 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay anti-K''*0 +0.2580 K- pi+ VSS; +0.1290 anti-K0 pi0 VSS; +0.2093 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1047 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1993 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0997 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay K''*+ +0.2580 K0 pi+ VSS; +0.1290 K+ pi0 VSS; +0.2093 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1047 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1993 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0997 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay K''*- +0.2580 anti-K0 pi- VSS; +0.1290 K- pi0 VSS; +0.2093 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1047 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1993 rho- K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0997 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay + +Decay Xsd +1.00000 d anti-s PYTHIA 42; +Enddecay + +Decay anti-Xsd +1.00000 anti-d s PYTHIA 42; +Enddecay + +Decay Xsu +1.00000 u anti-s PYTHIA 42; +Enddecay + +Decay anti-Xsu +1.00000 anti-u s PYTHIA 42; +Enddecay + +# Xss decays can be uncommented when Jst74/lucomp.F recognizes Xss +Decay Xss +1.00000 s anti-s PYTHIA 42; +Enddecay + +Decay anti-Xss +1.00000 anti-s s PYTHIA 42; +Enddecay + +# +# Light Mesons Updated to PDG 2008 +# +Decay pi0 +0.988228297 gamma gamma PHSP; #[Reconstructed PDG2011] +0.011738247 e+ e- gamma PI0_DALITZ; #[Reconstructed PDG2011] +0.000033392 e+ e+ e- e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000065 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay eta +0.393100000 gamma gamma PHSP; #[Reconstructed PDG2011] +0.325700000 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.227400000 pi- pi+ pi0 ETA_DALITZ; #[Reconstructed PDG2011] +0.046000000 gamma pi- pi+ PHSP; #[Reconstructed PDG2011] +0.007000000 gamma e+ e- PHSP; #[Reconstructed PDG2011] +0.000310000 gamma mu+ mu- PHSP; #[Reconstructed PDG2011] +0.000270000 gamma gamma pi0 PHSP; #[Reconstructed PDG2011] +0.000214200 pi+ pi- e+ e- PHSP; #[Reconstructed PDG2011] +0.000005800 mu+ mu- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay rho0 +1.000 pi+ pi- VSS; +Enddecay +Decay rho+ +1.000 pi+ pi0 VSS; +Enddecay +Decay rho- +1.000 pi- pi0 VSS; +Enddecay +# +Decay omega +0.892000000 pi- pi+ pi0 OMEGA_DALITZ; #[Reconstructed PDG2011] +0.082800000 pi0 gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.015300000 pi- pi+ VSS; #[Reconstructed PDG2011] +0.000460000 eta gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.000770000 pi0 e+ e- PHOTOS PHSP; #[Reconstructed PDG2011] +0.000130000 pi0 mu+ mu- PHOTOS PHSP; #[Reconstructed PDG2011] +0.00150 pi+ pi- gamma PHSP; +0.000066000 pi0 pi0 gamma PHSP; #[Reconstructed PDG2011] +0.00050 pi+ pi- pi+ pi- PHSP; +0.000072800 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000090000 mu+ mu- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay eta' +0.432000000 pi+ pi- eta PHSP; #[Reconstructed PDG2011] +0.217000000 pi0 pi0 eta PHSP; #[Reconstructed PDG2011] +0.293511000 rho0 gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.027500000 omega gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.022200000 gamma gamma PHSP; #[Reconstructed PDG2011] +0.001680000 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000109000 gamma mu- mu+ PHOTOS PHSP; #[Reconstructed PDG2011] +0.003600000 pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002400000 pi+ pi- e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay phi +0.489000000 K+ K- VSS; #[Reconstructed PDG2011] +0.342000000 K_L0 K_S0 VSS; #[Reconstructed PDG2011] +0.0425 rho+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0425 rho0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0425 rho- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0250 pi+ pi- pi0 PHSP; +0.013090000 eta gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.000687600 pi0 gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.000295400 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.000287000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.000113000 pi0 pi0 gamma PHSP; #[Reconstructed PDG2011] +0.000115000 eta e+ e- PHSP; #[Reconstructed PDG2011] +0.000322000 f_0 gamma PHSP; #[Reconstructed PDG2011] +0.000074000 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000047000 omega pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000041000 pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004000 pi+ pi- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011200 pi0 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000072700 pi0 eta gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000062500 eta' gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000014000 mu+ mu- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay a_1+ +0.4920 rho0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.5080 rho+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay a_10 +0.5000 rho- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.5000 rho+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay a_1- +0.4920 rho0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.5080 rho- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay a_2+ +0.3500 rho0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.3500 rho+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.1430 eta pi+ TSS; +0.1000 omega pi+ pi0 PHSP; +0.0490 anti-K0 K+ TSS; +0.0027 pi+ gamma PHSP; +0.0053 eta' pi+ TSS; +Enddecay +# +Decay a_2- +0.3500 rho0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.3500 rho- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.1430 eta pi- TSS; +0.1000 omega pi- pi0 PHSP; +0.0490 anti-K0 K- TSS; +0.0027 pi- gamma PHSP; +0.0053 eta' pi- TSS; +Enddecay +# +Decay a_20 +0.3500 rho+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.3500 rho- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.1430 eta pi0 TSS; +0.1000 omega pi+ pi- PHSP; +0.0245 K+ K- TSS; +0.01225 K_L0 K_L0 TSS; +0.01225 K_S0 K_S0 TSS; +0.0027 pi0 gamma PHSP; +0.0053 eta' pi0 TSS; +Enddecay +# +Decay b_1+ +0.9984 omega pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0016 pi+ gamma VSP_PWAVE; +Enddecay +Decay b_1- +0.9984 omega pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0016 pi- gamma VSP_PWAVE; +Enddecay +Decay b_10 +0.9984 omega pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0016 pi0 gamma VSP_PWAVE; +Enddecay +# +Decay a_00 +0.9000 eta pi0 PHSP; +0.0500 K+ K- PHSP; +0.0250 K_S0 K_S0 PHSP; +0.0250 K_L0 K_L0 PHSP; +Enddecay +Decay a_0+ +0.9000 eta pi+ PHSP; +0.1000 anti-K0 K+ PHSP; +Enddecay +Decay a_0- +0.9000 eta pi- PHSP; +0.1000 K0 K- PHSP; +Enddecay +# +Decay f_0 +0.6667 pi+ pi- PHSP; +0.3333 pi0 pi0 PHSP; +#0.1100 K+ K- PHSP; +#0.0550 K_S0 K_S0 PHSP; +#0.0550 K_L0 K_L0 PHSP; +Enddecay +# +# +# MK: Based on PDG 2014 without any attempt to really include everything. One +# thing, which is missing is KK mode, but data are scattered quite lot and +# I would also need to find place where to make space for it. For needs I +# have at this moment, this should be sufficient +#Decay f_0(1370) +#0.17333 pi+ pi- PHSP; +#0.08667 pi0 pi0 PHSP; +#0.26000 pi+ pi+ pi- pi- PHSP; +#0.32000 pi+ pi- pi0 pi0 PHSP; +#0.10667 rho+ rho- PHSP; +#0.05333 rho0 rho0 PHSP; +#Enddecay +Decay f'_0 +0.5200 pi+ pi- PHSP; +0.2600 pi0 pi0 PHSP; +0.0750 pi+ pi+ pi- pi- PHSP; +0.0750 pi+ pi- pi0 pi0 PHSP; +0.0350 K+ K- PHSP; +0.0175 K_S0 K_S0 PHSP; +0.0175 K_L0 K_L0 PHSP; +Enddecay +# +Decay f_1 +0.110000000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.043364159 rho0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.043442860 rho+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.043442860 rho- pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.094440999 a_00 pi0 VSS; #[Reconstructed PDG2011] +0.094440999 a_0+ pi- VSS; #[Reconstructed PDG2011] +0.094440999 a_0- pi+ VSS; #[Reconstructed PDG2011] +0.086570916 eta pi+ pi- PHSP; #[Reconstructed PDG2011] +0.043285458 eta pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.020226114 K+ K- pi0 PHSP; #[Reconstructed PDG2011] +0.010152407 K0 anti-K0 pi0 PHSP; #[Reconstructed PDG2011] +0.020226114 anti-K0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.020226114 K0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.055000000 gamma rho0 PHSP; #[Reconstructed PDG2011] +0.220000000 pi0 pi0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000740000 phi gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay f'_1 +0.2500 K+ K- pi0 PHSP; +0.2500 K0 anti-K0 pi0 PHSP; +0.2500 anti-K0 K+ pi- PHSP; +0.2500 K0 K- pi+ PHSP; +Enddecay +# +Decay f_2 +0.5650 pi+ pi- TSS; +0.2820 pi0 pi0 TSS; +0.028000000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.071000000 pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.003000000 pi0 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.0230 K+ K- TSS; +0.0115 K_S0 K_S0 TSS; +0.0115 K_L0 K_L0 TSS; +0.004000000 eta eta TSS; #[Reconstructed PDG2011] +0.000016400 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay f_0(1500) +0.019000000 eta eta' PHSP; #[Reconstructed PDG2011] +0.051000000 eta eta PHSP; #[Reconstructed PDG2011] +0.1410 pi0 pi0 pi0 pi0 PHSP; +0.3540 pi+ pi- pi+ pi- PHSP; +0.2330 pi+ pi- PHSP; +0.1160 pi0 pi0 PHSP; +0.0430 K+ K- PHSP; +0.0215 K_S0 K_S0 PHSP; +0.0215 K_L0 K_L0 PHSP; +Enddecay +# +Decay f'_2 +0.443904021 K+ K- TSS; #[Reconstructed PDG2011] +0.221952010 K_S0 K_S0 TSS; #[Reconstructed PDG2011] +0.221952010 K_L0 K_L0 TSS; #[Reconstructed PDG2011] +0.104000000 eta eta TSS; #[Reconstructed PDG2011] +0.005493862 pi+ pi- TSS; #[Reconstructed PDG2011] +0.002696987 pi0 pi0 TSS; #[Reconstructed PDG2011] +0.000001110 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay h_1 +0.3333 rho+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3333 rho- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3334 rho0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay h'_1 +0.2500 K*+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.2500 K*- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.2500 anti-K*0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.2500 K*0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay rho(2S)+ +0.4000 pi+ pi0 PHSP; +0.4000 pi+ pi+ pi- pi0 PHSP; +0.2000 pi+ pi0 pi0 pi0 PHSP; +Enddecay +Decay rho(2S)- +0.4000 pi- pi0 PHSP; +0.4000 pi- pi+ pi- pi0 PHSP; +0.2000 pi- pi0 pi0 pi0 PHSP; +Enddecay +Decay rho(2S)0 +0.4000 pi+ pi- PHSP; +0.3500 pi+ pi- pi+ pi- PHSP; +0.1500 pi+ pi- pi0 pi0 PHSP; +0.1000 pi0 pi0 pi0 pi0 PHSP; +Enddecay +Decay phi(1680) +0.08 pi+ pi- PHSP; +0.05 pi+ pi+ pi- pi- PHSP; +0.10 pi0 pi+ pi- PHSP; +0.10 pi0 pi+ pi+ pi- pi- PHSP; +0.12 pi0 pi0 pi+ pi- PHSP; +0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.05 pi0 pi0 pi0 pi+ pi- PHSP; +0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.04 K+ K- pi+ pi- PHSP; +0.02 K0 K- pi+ PHSP; +0.02 anti-K0 K+ pi- PHSP; +0.02 K0 K- pi+ pi+ pi- PHSP; +0.02 anti-K0 K+ pi- pi- pi+ PHSP; +0.02 K0 K- pi0 pi+ PHSP; +0.02 anti-K0 K+ pi0 pi- PHSP; +0.02 eta pi0 pi+ pi- PHSP; +0.01 eta rho- pi0 pi+ PHSP; +0.01 eta rho+ pi0 pi- PHSP; +Enddecay +Decay rho(3S)0 +0.08 pi+ pi- PHSP; +0.05 pi+ pi+ pi- pi- PHSP; +0.10 pi0 pi+ pi- PHSP; +0.10 pi0 pi+ pi+ pi- pi- PHSP; +0.12 pi0 pi0 pi+ pi- PHSP; +0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.05 pi0 pi0 pi0 pi+ pi- PHSP; +0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.04 K+ K- pi+ pi- PHSP; +0.02 K0 K- pi+ PHSP; +0.02 anti-K0 K+ pi- PHSP; +0.02 K0 K- pi+ pi+ pi- PHSP; +0.02 anti-K0 K+ pi- pi- pi+ PHSP; +0.02 K0 K- pi0 pi+ PHSP; +0.02 anti-K0 K+ pi0 pi- PHSP; +0.02 eta pi0 pi+ pi- PHSP; +0.01 eta rho- pi0 pi+ PHSP; +0.01 eta rho+ pi0 pi- PHSP; +Enddecay +Decay omega(1650) +0.08 pi+ pi- PHSP; +0.05 pi+ pi+ pi- pi- PHSP; +0.10 pi0 pi+ pi- PHSP; +0.10 pi0 pi+ pi+ pi- pi- PHSP; +0.12 pi0 pi0 pi+ pi- PHSP; +0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.05 pi0 pi0 pi0 pi+ pi- PHSP; +0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.04 K+ K- pi+ pi- PHSP; +0.02 K0 K- pi+ PHSP; +0.02 anti-K0 K+ pi- PHSP; +0.02 K0 K- pi+ pi+ pi- PHSP; +0.02 anti-K0 K+ pi- pi- pi+ PHSP; +0.02 K0 K- pi0 pi+ PHSP; +0.02 anti-K0 K+ pi0 pi- PHSP; +0.02 eta pi0 pi+ pi- PHSP; +0.01 eta rho- pi0 pi+ PHSP; +0.01 eta rho+ pi0 pi- PHSP; +Enddecay +#Decay rho(1900) +#0.08 pi+ pi- PHSP; +#0.05 pi+ pi+ pi- pi- PHSP; +#0.10 pi0 pi+ pi- PHSP; +#0.10 pi0 pi+ pi+ pi- pi- PHSP; +#0.12 pi0 pi0 pi+ pi- PHSP; +#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.05 pi0 pi0 pi0 pi+ pi- PHSP; +#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.04 K+ K- pi+ pi- PHSP; +#0.02 K0 K- pi+ PHSP; +#0.02 anti-K0 K+ pi- PHSP; +#0.02 K0 K- pi+ pi+ pi- PHSP; +#0.02 anti-K0 K+ pi- pi- pi+ PHSP; +#0.02 K0 K- pi0 pi+ PHSP; +#0.02 anti-K0 K+ pi0 pi- PHSP; +#0.02 eta pi0 pi+ pi- PHSP; +#0.01 eta rho- pi0 pi+ PHSP; +#0.01 eta rho+ pi0 pi- PHSP; +#Enddecay +Decay omega(2S) +0.08 pi+ pi- PHSP; +0.05 pi+ pi+ pi- pi- PHSP; +0.10 pi0 pi+ pi- PHSP; +0.10 pi0 pi+ pi+ pi- pi- PHSP; +0.12 pi0 pi0 pi+ pi- PHSP; +0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.05 pi0 pi0 pi0 pi+ pi- PHSP; +0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.04 K+ K- pi+ pi- PHSP; +0.02 K0 K- pi+ PHSP; +0.02 anti-K0 K+ pi- PHSP; +0.02 K0 K- pi+ pi+ pi- PHSP; +0.02 anti-K0 K+ pi- pi- pi+ PHSP; +0.02 K0 K- pi0 pi+ PHSP; +0.02 anti-K0 K+ pi0 pi- PHSP; +0.02 eta pi0 pi+ pi- PHSP; +0.01 eta rho- pi0 pi+ PHSP; +0.01 eta rho+ pi0 pi- PHSP; +Enddecay +#Decay rho(2150) +#0.08 pi+ pi- PHSP; +#0.05 pi+ pi+ pi- pi- PHSP; +#0.10 pi0 pi+ pi- PHSP; +#0.10 pi0 pi+ pi+ pi- pi- PHSP; +#0.12 pi0 pi0 pi+ pi- PHSP; +#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.05 pi0 pi0 pi0 pi+ pi- PHSP; +#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.04 K+ K- pi+ pi- PHSP; +#0.02 K0 K- pi+ PHSP; +#0.02 anti-K0 K+ pi- PHSP; +#0.02 K0 K- pi+ pi+ pi- PHSP; +#0.02 anti-K0 K+ pi- pi- pi+ PHSP; +#0.02 K0 K- pi0 pi+ PHSP; +#0.02 anti-K0 K+ pi0 pi- PHSP; +#0.02 eta pi0 pi+ pi- PHSP; +#0.01 eta rho- pi0 pi+ PHSP; +#0.01 eta rho+ pi0 pi- PHSP; +#Enddecay +#Decay omega(1960) +#0.08 pi+ pi- PHSP; +#0.05 pi+ pi+ pi- pi- PHSP; +#0.10 pi0 pi+ pi- PHSP; +#0.10 pi0 pi+ pi+ pi- pi- PHSP; +#0.12 pi0 pi0 pi+ pi- PHSP; +#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.05 pi0 pi0 pi0 pi+ pi- PHSP; +#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.04 K+ K- pi+ pi- PHSP; +#0.02 K0 K- pi+ PHSP; +#0.02 anti-K0 K+ pi- PHSP; +#0.02 K0 K- pi+ pi+ pi- PHSP; +#0.02 anti-K0 K+ pi- pi- pi+ PHSP; +#0.02 K0 K- pi0 pi+ PHSP; +#0.02 anti-K0 K+ pi0 pi- PHSP; +#0.02 eta pi0 pi+ pi- PHSP; +#0.01 eta rho- pi0 pi+ PHSP; +#0.01 eta rho+ pi0 pi- PHSP; +#Enddecay +#Decay rho(1965) +#0.08 pi+ pi- PHSP; +#0.05 pi+ pi+ pi- pi- PHSP; +#0.10 pi0 pi+ pi- PHSP; +#0.10 pi0 pi+ pi+ pi- pi- PHSP; +#0.12 pi0 pi0 pi+ pi- PHSP; +#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.05 pi0 pi0 pi0 pi+ pi- PHSP; +#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.04 K+ K- pi+ pi- PHSP; +#0.02 K0 K- pi+ PHSP; +#0.02 anti-K0 K+ pi- PHSP; +#0.02 K0 K- pi+ pi+ pi- PHSP; +#0.02 anti-K0 K+ pi- pi- pi+ PHSP; +#0.02 K0 K- pi0 pi+ PHSP; +#0.02 anti-K0 K+ pi0 pi- PHSP; +#0.02 eta pi0 pi+ pi- PHSP; +#0.01 eta rho- pi0 pi+ PHSP; +#0.01 eta rho+ pi0 pi- PHSP; +#Enddecay +# +# +# cc= mesons Updated to PDG 2008 +# +Decay eta_c +0.001300000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.002700000 phi phi SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; #[Reconstructed PDG2011] +0.002900000 phi K+ K- PHSP; #[Reconstructed PDG2011] +0.0067 rho0 rho0 SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; +0.0133 rho+ rho- SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; +0.012000000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001600000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] +0.015000000 K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.0327 eta pi+ pi- PHSP; +0.0163 eta pi0 pi0 PHSP; +0.0273 eta' pi+ pi- PHSP; +0.0137 eta' pi0 pi0 PHSP; +0.0117 pi0 K+ K- PHSP; +0.0233 K+ anti-K0 pi- PHSP; +0.0233 K- K0 pi+ PHSP; +0.0117 K0 anti-K0 pi0 PHSP; +0.0046 K*+ K*- SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; +0.0046 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0 ; +0.01 K*0 K- pi+ PHSP; +0.01 anti-K*0 K+ pi- PHSP; +# +#March 2009 New Modes +0.01500 K*0 anti-K*0 pi+ pi- PHSP; +0.007100000 K+ K- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.015000000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001040000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.007600000 f_2 f_2 PHSP; #[Reconstructed PDG2011] +0.027000000 f_2 f'_2 PHSP; #[Reconstructed PDG2011] +# +0.682497000 rndmflav anti-rndmflav PYTHIA 42; +0.000063000 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay eta_c(2S) + 0.019 K+ anti-K0 pi- PHSP; + 0.019 K- K0 pi+ PHSP; + 0.0095 pi0 K+ K- PHSP; + 0.0095 K0 anti-K0 pi0 PHSP; +0.943 rndmflav anti-rndmflav PYTHIA 42; +Enddecay +# +Decay J/psi +0.059400000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.059300000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.005600000 rho0 pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.00563 rho+ pi- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.00563 rho- pi+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.004000000 omega pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.00364 a_20 rho0 PHSP; +0.00363 a_2+ rho- PHSP; +0.00363 a_2- rho+ PHSP; +0.008500000 omega pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.004300000 omega f_2 PHSP; #[Reconstructed PDG2011] +0.004300000 omega pi+ pi- PHSP; #[Reconstructed PDG2011] +0.00300 K*0 anti-K_2*0 PHSP; +0.00300 anti-K*0 K_2*0 PHSP; +0.00305 omega K*0 anti-K0 PHSP; +0.00305 omega anti-K*0 K0 PHSP; +0.00256 K*+ K- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.00256 K*- K+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.002195 K*0 anti-K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.002195 anti-K*0 K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.00190 K_1+ K- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.00190 K_1- K+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.003400000 omega pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.001500000 b_1+ pi- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.001500000 b_1- pi+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +# +0.001700000 omega pi- K+ K_S0 PHSP; #[Reconstructed PDG2011] +0.0017 omega pi- K+ K_L0 PHSP; +0.001700000 omega pi+ K- K_S0 PHSP; #[Reconstructed PDG2011] +0.0017 omega pi+ K- K_L0 PHSP; +0.0000 omega pi- K+ K0 PHSP; +0.0000 omega pi- K+ anti-K0 PHSP; +0.0000 omega pi+ K- K0 PHSP; +0.0000 omega pi+ K- anti-K0 PHSP; +# +0.002300000 b_10 pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.002290000 eta pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000545 phi K*0 anti-K0 PHSP; +0.000545 phi anti-K*0 K0 PHSP; +0.000545 phi K*+ K- PHSP; +0.000545 phi K*- K+ PHSP; +0.0008 omega K0 anti-K0 PHSP; +0.0008 omega K+ K- PHSP; +0.001660000 phi pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001600000 Delta++ anti-p- pi- PHSP; #[Reconstructed PDG2011] +0.0016 anti-Delta-- p+ pi+ PHSP; +0.001740000 omega eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000915 phi K0 anti-K0 PHSP; +0.000915 phi K+ K- PHSP; +0.001100000 omega p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.0011 Delta++ anti-Delta-- PHSP; +0.000515 Sigma- anti-Sigma+ PHSP; +0.001500000 Sigma+ anti-Sigma- PHSP; #[Reconstructed PDG2011] +0.000720000 eta pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000147000 pi+ pi- PHSP; #[Reconstructed PDG2011] + +0.017000000 gamma eta_c PHSP; #[Reconstructed PDG2011] +0.008300000 gamma pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.0061 gamma eta pi+ pi- PHSP; +0.00225 gamma rho+ rho- PHSP; +0.00225 gamma rho0 rho0 PHSP; +0.005280000 gamma eta' PHSP; #[Reconstructed PDG2011] +0.001850000 gamma pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002100000 gamma K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001610000 gamma omega omega PHSP; #[Reconstructed PDG2011] +0.001430000 gamma f_2 PHSP; #[Reconstructed PDG2011] +0.0040 gamma K*0 anti-K*0 PHSP; +# +# March 2009 New Modes +0.001100000 eta pi- K+ K_S0 PHSP; #[Reconstructed PDG2011] +0.0011 eta pi- K+ K_L0 PHSP; +0.001100000 eta pi+ K- K_S0 PHSP; #[Reconstructed PDG2011] +0.0011 eta pi+ K- K_L0 PHSP; +0.0000 eta pi- K+ K0 PHSP; +0.0000 eta pi- K+ anti-K0 PHSP; +0.0000 eta pi+ K- K0 PHSP; +0.0000 eta pi+ K- anti-K0 PHSP; +# +0.055000000 pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.029000000 pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.020700000 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.019400000 pi+ pi- pi0 K+ K- PHSP; #[Reconstructed PDG2011] +0.016100000 pi+ pi- pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.009000000 pi+ pi- pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.006600000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] +0.001840000 pi+ pi- K+ K- eta PHSP; #[Reconstructed PDG2011] +0.002450000 pi0 pi0 K+ K- PHSP; #[Reconstructed PDG2011] +0.005000000 pi+ pi- pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] +0.00102 K+ K- pi0 PHSP; +0.00102 K0 anti-K0 pi0 PHSP; +0.00203 K+ anti-K0 pi- PHSP; +0.00203 K- K0 pi+ PHSP; +0.003550000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +#### Already included above 0.00229 pi+ pi- pi+ pi- eta PHSP; +0.004300000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002170000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.001190000 p+ anti-p- pi0 PHSP; #[Reconstructed PDG2011] +0.006000000 p+ anti-p- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002300000 p+ anti-p- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.002000000 p+ anti-p- eta PHSP; #[Reconstructed PDG2011] +0.002200000 n0 anti-n0 PHSP; #[Reconstructed PDG2011] +0.004000000 n0 anti-n0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001290000 Sigma0 anti-Sigma0 PHSP; #[Reconstructed PDG2011] +0.002120000 p+ anti-n0 pi- PHSP; #[Reconstructed PDG2011] +0.001200000 Xi0 anti-Xi0 PHSP; #[Reconstructed PDG2011] +0.000850000 Xi- anti-Xi+ PHSP; #[Reconstructed PDG2011] +0.001610000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +# +0.084693481 rndmflav anti-rndmflav PYTHIA 42; +0.365559757 g g g PYTHIA 92; +0.032103862 gamma g g PYTHIA 92; +0.0 K0 anti-K0 PHSP; +0.0 K_S0 K_S0 PHSP; +0.0 K_L0 K_L0 PHSP; +0.000146000 K_S0 K_L0 PHSP; #[Reconstructed PDG2011] +0.001900000 K'_1+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001900000 K'_1- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000800000 phi f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000870000 phi pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000560000 phi pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000680000 omega f'_1 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000750000 phi eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000590000 Xi*- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000450000 omega pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000400000 phi eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000320000 phi f_0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000320000 Xi*0 anti-Xi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 phi f_1 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000400000 eta pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000182000 omega eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000140000 omega f_0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000230000 K*0 anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000720000 phi f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000210000 p+ anti-p- eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000045000 p+ anti-p- phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000890000 p+ K- anti-Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000760000 K+ K- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000290000 p+ K- anti-Sigma0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000237000 K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 Lambda0 anti-Lambda0 eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000012000 gamma gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000950000 gamma f_2 f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001104000 gamma eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000610000 gamma f_1 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000450000 gamma f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000400000 gamma phi phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000380000 gamma p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000034900 gamma pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.008800000 gamma e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay psi(2S) +0.007720000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.007700000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.003000000 tau+ tau- PHOTOS VLL; #[Reconstructed PDG2011] +0.336000000 J/psi pi+ pi- VVPIPI; #[Reconstructed PDG2011] +0.177300000 J/psi pi0 pi0 VVPIPI; #[Reconstructed PDG2011] +0.032800000 J/psi eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.001300000 J/psi pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.096200000 gamma chi_c0 PHSP; #[Reconstructed PDG2011] +0.092000000 gamma chi_c1 PHSP; #[Reconstructed PDG2011] +0.087400000 gamma chi_c2 PHSP; #[Reconstructed PDG2011] +0.003400000 gamma eta_c PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000121000 gamma eta' PHSP; #[Reconstructed PDG2011] +0.000210000 gamma f_2 PHSP; #[Reconstructed PDG2011] +0.003500000 pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000350000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002900000 pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000200000 b_1+ pi- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000200000 b_1- pi+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000240000 b_10 pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000168000 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.0000545 K*0 anti-K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0000545 anti-K*0 K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000022 rho0 eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000021000 omega pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000028000 phi eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000008 rho+ pi- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000008 rho- pi+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000008 rho0 pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000001 phi pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000001 omega eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0000085 K*+ K- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0000085 K*- K+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000185000 omega K+ K- PHSP; #[Reconstructed PDG2011] +0.000340000 K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000600000 p+ anti-p- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000133000 p+ anti-p- pi0 PHSP; #[Reconstructed PDG2011] +0.000276000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.000500000 K_1+ K- PHSP; #[Reconstructed PDG2011] +0.000500000 K_1- K+ PHSP; #[Reconstructed PDG2011] +0.000220000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000280000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.000128000 Delta++ anti-Delta-- PHSP; #[Reconstructed PDG2011] +0.000220000 Sigma0 anti-Sigma0 PHSP; #[Reconstructed PDG2011] +0.00026 Sigma*+ anti-Sigma*- PHSP; +0.000180000 Xi- anti-Xi+ PHSP; #[Reconstructed PDG2011] +0.000080000 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000063000 K+ K- PHSP; #[Reconstructed PDG2011] +0.000070000 phi K- K+ PHSP; #[Reconstructed PDG2011] +0.000117000 phi pi- pi+ PHSP; #[Reconstructed PDG2011] +0.000170000 pi+ pi- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.0008 h_c pi0 PHSP; +0.0 K0 anti-K0 PHSP; +0.0 K_S0 K_S0 PHSP; +0.0 K_L0 K_L0 PHSP; +0.000054000 K_S0 K_L0 PHSP; #[Reconstructed PDG2011] +# +# March 2009 New Modes +0.004800000 pi+ pi- pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.001200000 pi+ pi- pi+ pi- eta PHSP; #[Reconstructed PDG2011] +0.001300000 K+ K- pi+ pi- eta PHSP; #[Reconstructed PDG2011] +0.001000000 K+ K- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.001900000 K+ K- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001260000 K+ K- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +# +0.013568632 rndmflav anti-rndmflav PYTHIA 42; +0.103318590 g g g PYTHIA 92; +0.007344778 gamma g g PYTHIA 92; +0.000100000 Lambda0 anti-p- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000180000 Lambda0 anti-p- K+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 Lambda0 anti-Lambda0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 Sigma+ anti-Sigma- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 Xi0 anti-Xi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000060000 eta p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000069000 omega p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000320000 p+ anti-n0 pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000950000 eta pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000450000 eta' pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 omega pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000220000 omega f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000220000 rho0 K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000190000 K*0 anti-K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000050000 rho0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 pi+ pi- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000730000 p+ anti-p- pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000060000 K+ K- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000110000 K+ K- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000031000 phi eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000032000 omega eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000027000 p+ anti-p- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000044000 phi f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000870000 gamma eta pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000400000 gamma pi+ pi- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000190000 gamma K+ K- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000029000 gamma p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000028000 gamma pi+ pi- p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + +Decay psi(4040) +0.000010700 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.000014000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.000005000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.002099938 D0 anti-D0 VSS; #[Reconstructed PDG2011] +0.000899973 D+ D- VSS; #[Reconstructed PDG2011] +0.167895013 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.167895013 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.181494610 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.181494610 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.159695257 D*0 anti-D*0 PHSP; #[Reconstructed PDG2011] +0.098197084 D*+ D*- PHSP; #[Reconstructed PDG2011] +0.000000000 D0 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D0 D- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-D0 D+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D+ pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ anti-D0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 D+ anti-D*0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D- D*0 pi+ PHSP; #[Reconstructed PDG2011] +0.040298803 D_s+ D_s- VSS; #[Reconstructed PDG2011] +Enddecay +# +Decay psi(4160) +0.000008100 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.000009999 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.000006000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.039697852 D0 anti-D0 VSS; #[Reconstructed PDG2011] +0.038697906 D+ D- VSS; #[Reconstructed PDG2011] +0.051997187 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.051997187 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.051497214 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.051497214 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.298613845 D*0 anti-D*0 PHSP; #[Reconstructed PDG2011] +0.308183327 D*+ D*- PHSP; #[Reconstructed PDG2011] +0.000000000 D0 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D0 D- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-D0 D+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D+ pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ anti-D0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 D+ anti-D*0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D- D*0 pi+ PHSP; #[Reconstructed PDG2011] +0.009999459 D_s+ D_s- VSS; #[Reconstructed PDG2011] +0.048897355 D_s*+ D_s- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.048897355 D_s*- D_s+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000000000 D_s+ D_s- pi0 PHSP; #[Reconstructed PDG2011] +Enddecay +# +Decay psi(4415) +0.000009400 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.000011000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.000007000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.024399331 D0 anti-D0 VSS; #[Reconstructed PDG2011] +0.021899400 D+ D- VSS; #[Reconstructed PDG2011] +0.031999123 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.031999123 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.034299060 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.034299060 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.345090544 D*0 anti-D*0 PHSP; #[Reconstructed PDG2011] +0.353890303 D*+ D*- PHSP; #[Reconstructed PDG2011] +0.000000000 D0 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D0 D- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-D0 D+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D+ pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ anti-D0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 D+ anti-D*0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D- D*0 pi+ PHSP; #[Reconstructed PDG2011] +0.011799677 D_s+ D_s- VSS; #[Reconstructed PDG2011] +0.041998849 D_s*+ D_s- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.041998849 D_s*- D_s+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.026299279 D_s*+ D_s*- PHSP; #[Reconstructed PDG2011] +0.000000000 D_s+ D_s- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D_s*+ D_s- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D_s+ D_s*- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D_s+ D- anti-K0 PHSP; #[Reconstructed PDG2011] +0.000000000 D_s- D+ anti-K0 PHSP; #[Reconstructed PDG2011] +0.000000000 D0 D_s- K+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-D0 D_s+ K- PHSP; #[Reconstructed PDG2011] +Enddecay +# +Decay chi_c0 +0.011600000 gamma J/psi PHSP; #[Reconstructed PDG2011] +0.000228000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.000222000 gamma gamma PHSP; #[Reconstructed PDG2011] +0.00243 pi0 pi0 PHSP; +0.00487 pi+ pi- PHSP; +0.013800000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002810000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] +0.012000000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.008900000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.0100 rho+ pi- pi0 PHSP; +0.0100 rho- pi+ pi0 PHSP; +0.00057 K+ K- PHSP; +0.000920000 phi phi PHSP; #[Reconstructed PDG2011] +0.001700000 anti-K*0 K*0 PHSP; #[Reconstructed PDG2011] +0.0036 anti-K*0 K+ pi- PHSP; +0.0036 K*0 K- pi+ PHSP; +0.0043 K*+ anti-K0 pi- PHSP; +0.0043 K*- K0 pi+ PHSP; +0.018000000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] +0.002100000 pi+ pi- p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.002680000 eta eta PHSP; #[Reconstructed PDG2011] +0.000330000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.00086 f_0 f_0 PHSP; +0.0 K0 anti-K0 PHSP; +0.003160000 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.00282 K_L0 K_L0 PHSP; +0.0 K_S0 K_L0 PHSP; +# +# March 2009 New Modes +0.002030000 eta' eta' PHSP; #[Reconstructed PDG2011] +0.002200000 omega omega PHSP; #[Reconstructed PDG2011] +0.00325 K_1+ K- PHSP; +0.00325 K_1- K+ PHSP; +0.000990000 K+ K- phi PHSP; #[Reconstructed PDG2011] +0.001140000 p+ anti-n0 pi- PHSP; #[Reconstructed PDG2011] +0.000525 K+ anti-p- Lambda0 PHSP; +0.000525 K- p+ Lambda0 PHSP; +0.005800000 K_S0 K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.00590 K_L0 K_L0 pi+ pi- PHSP; +0.00000 K0 anti-K0 pi+ pi- PHSP; +0.001400000 K+ K- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.00150 K+ K- K_L0 K_L0 PHSP; +0.00000 K+ K- K0 anti-K0 PHSP; +# +0.799360000 rndmflav anti-rndmflav PYTHIA 42; +0.034000000 pi+ pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005700000 K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.003100000 K+ K- eta pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000570000 p+ anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000370000 p+ anti-p- eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001050000 pi0 pi0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000420000 Sigma0 anti-Sigma0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 Sigma+ anti-Sigma- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000320000 Xi0 anti-Xi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000490000 Xi- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay chi_c1 +0.344000000 J/psi gamma VVP 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.007600000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000073000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.005800000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.004500000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] +0.003900000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.0020 rho+ pi- pi0 PHSP; +0.0020 rho- pi+ pi0 PHSP; +0.0016 anti-K*0 K+ pi- PHSP; +0.0016 K*0 K- pi+ PHSP; +0.001500000 anti-K*0 K*0 PHSP; #[Reconstructed PDG2011] +0.0009 K*+ anti-K0 pi- PHSP; +0.0009 K*- K0 pi+ PHSP; +0.000500000 pi+ pi- p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.000720000 pi+ pi- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.0003 K+ K- K_S0 K_S0 PHSP; +0.000118000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.00385 K+ anti-K0 pi- PHSP; +0.00385 K- K0 pi+ PHSP; +0.000560000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] +0.00000 K0 anti-K0 PHSP; +0.00001 K_S0 K_S0 PHSP; +0.00001 K_L0 K_L0 PHSP; +0.00000 K_S0 K_L0 PHSP; +# +# March 2009 New Modes +0.002200000 pi+ pi- eta PHSP; #[Reconstructed PDG2011] +0.002400000 pi+ pi- eta' PHSP; #[Reconstructed PDG2011] +0.001910000 K+ K- pi0 PHSP; #[Reconstructed PDG2011] +# +0.587724 rndmflav anti-rndmflav PYTHIA 42; +0.008700000 pi+ pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001180000 K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001200000 K+ K- eta pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000330000 K+ K- eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002800000 f_2 eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000430000 K+ K- phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000120000 p+ anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000320000 K+ anti-p- Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000084000 Xi- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000229000 gamma rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000078000 gamma omega PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + + +# +Decay chi_c2 +0.195000000 gamma J/psi PHSP; #[Reconstructed PDG2011] +0.000256000 gamma gamma PHSP; #[Reconstructed PDG2011] +0.000072000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.00072 pi0 pi0 TSS; +0.00145 pi+ pi- TSS; +0.011100000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001780000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] +0.008600000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.009200000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] +0.004000000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.0046 rho+ pi- pi0 PHSP; +0.0046 rho- pi+ pi0 PHSP; +0.001090000 K+ K- TSS; #[Reconstructed PDG2011] +0.002400000 pi+ pi- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.0003 K+ K- K_S0 K_S0 PHSP; +0.001480000 phi phi PHSP; #[Reconstructed PDG2011] +0.00115 anti-K*0 K+ pi- PHSP; +0.00115 K*0 K- pi+ PHSP; +0.002500000 anti-K*0 K*0 PHSP; #[Reconstructed PDG2011] +0.0016 K*+ anti-K0 pi- PHSP; +0.0016 K*- K0 pi+ PHSP; +0.001320000 pi+ pi- p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.000186000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.00000 K0 anti-K0 PHSP; +0.000580000 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.00065 K_L0 K_L0 PHSP; +0.00000 K_S0 K_L0 PHSP; +# +# March 2009 New Modes +0.001900000 omega omega PHSP; #[Reconstructed PDG2011] +0.0007 anti-K0 K+ pi- PHSP; +0.0007 K0 K- pi+ PHSP; +0.001550000 K+ K- phi PHSP; #[Reconstructed PDG2011] +0.001100000 p+ anti-n0 pi- PHSP; #[Reconstructed PDG2011] +# +0.709461000 rndmflav anti-rndmflav PYTHIA 42; +0.020000000 pi+ pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002200000 K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001400000 K+ K- eta pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000520000 pi+ pi- eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000540000 pi+ pi- eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000540000 eta eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000330000 K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000470000 p+ anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000200000 p+ anti-p- eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000850000 pi0 pi0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000155000 Xi- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay psi(3770) +0.410000000 D+ D- VSS; #[Reconstructed PDG2011] +0.520000000 D0 anti-D0 VSS; #[Reconstructed PDG2011] +0.001930000 J/psi pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000800000 J/psi pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.0073 gamma chi_c0 PHSP; +0.0029 gamma chi_c1 PHSP; +0.055850300 rndmflav anti-rndmflav PYTHIA 42; +0.000900000 J/psi eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009700 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 phi eta PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay X_1(3872) +1.000 rndmflav anti-rndmflav PYTHIA 42; +Enddecay +# +# +# bb= Mesons Updated to PDG 2008 +# +Decay eta_b +1.000 rndmflav anti-rndmflav PYTHIA 42; +Enddecay +# +Decay Upsilon +0.024800000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.024800000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.026000000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.014959973 d anti-d PYTHIA 91; +0.044879919 u anti-u PYTHIA 91; +0.014959973 s anti-s PYTHIA 91; +0.044879919 c anti-c PYTHIA 91; +0.774328202 g g g PYTHIA 92; +0.028922614 gamma g g PYTHIA 92; +0.000063000 gamma pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000017000 gamma pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011400 gamma K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000290000 gamma pi+ pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000250000 gamma pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000250000 gamma pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000240000 gamma pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000150000 gamma pi+ pi- p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000040000 gamma pi+ pi+ pi- pi- p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 gamma K+ K+ K- K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000037000 gamma f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000101000 gamma f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay Upsilon(2S) +0.019100000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.019300000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.020000000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.181000000 Upsilon pi+ pi- PHSP; #[Reconstructed PDG2011] +0.086000000 Upsilon pi0 pi0 PHSP; #[Reconstructed PDG2011] +# V-> gamma S Partial wave (L,S)=(0,1) +0.038000000 gamma chi_b0 HELAMP 1. 0. +1. 0.; #[Reconstructed PDG2011] +# V-> gamma V Partial wave (L,S)=(0,1) +0.069000000 gamma chi_b1 HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +# V-> gamma T Partial wave (L,S)=(0,1) +0.071500000 gamma chi_b2 HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] +0.00500 d anti-d PYTHIA 91; +0.02000 u anti-u PYTHIA 91; +0.00500 s anti-s PYTHIA 91; +0.02000 c anti-c PYTHIA 91; +0.42160 g g g PYTHIA 92; +0.01600 gamma g g PYTHIA 92; +0.000210000 Upsilon eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000390000 gamma eta_b PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay Upsilon(3S) +0.0181 e+ e- PHOTOS VLL; +0.021800000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.022900000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.044000000 Upsilon pi+ pi- PHSP; #[Reconstructed PDG2011] +0.022000000 Upsilon pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.024500000 Upsilon(2S) pi+ pi- PHSP; #[Reconstructed PDG2011] +0.018500000 Upsilon(2S) pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.050000000 Upsilon(2S) gamma gamma PHSP; #[Reconstructed PDG2011] +# V-> gamma S Partial wave (L,S)=(0,1) +0.059000000 gamma chi_b0(2P) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] +# V-> gamma V Partial wave (L,S)=(0,1) +0.126000000 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +# V-> gamma T Partial wave (L,S)=(0,1) +0.131000000 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] +0.00700 d anti-d PYTHIA 91; +0.02800 u anti-u PYTHIA 91; +0.00700 s anti-s PYTHIA 91; +0.02800 c anti-c PYTHIA 91; +0.37780 g g g PYTHIA 92; +0.01000 gamma g g PYTHIA 92; +0.003000000 gamma chi_b0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000510000 gamma eta_b PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# + +Decay Upsilon(5S) +0.5 B+ B- PHSP; +0.481487200 g g g PYTHIA 92; +0.000002800 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005300000 Upsilon pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.007800000 Upsilon(2S) pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004800000 Upsilon(3S) pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000610000 Upsilon K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + +Decay chi_b0 +# S-> gamma V Partial wave (L,S)=(0,0) +0.0500 gamma Upsilon HELAMP 1. 0. 1. 0.; +0.949650000 rndmflav anti-rndmflav PYTHIA 42; +0.000110000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000240000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay chi_b1 +# V-> gamma V Partial wave (L,S)=(0,1) +0.350000000 gamma Upsilon HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +0.643080000 g g PYTHIA 91; +0.000200000 pi+ pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000800000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000150000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000350000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000860000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000190000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001700000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000750000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001400000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay chi_b2 +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +0.220000000 gamma Upsilon PHSP; #[Reconstructed PDG2011] +#0.2200 gamma Upsilon HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +0.775550000 g g PYTHIA 91; +0.000080000 pi+ pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000350000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000110000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000210000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000390000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000070000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001000000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000360000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000080000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay chi_b0(2P) +# S-> gamma V Partial wave (L,S)=(0,0) +0.009000000 gamma Upsilon HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] +0.046000000 gamma Upsilon(2S) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] +# S-> gamma V Partial wave (L,S)=(0,0) +0.00150 gamma Upsilon_1(1D) HELAMP 1. 0. 1. 0.; +0.94350 g g PYTHIA 91; +Enddecay +# +Decay chi_b1(2P) +# V-> gamma V Partial wave (L,S)=(0,1) +0.085000000 gamma Upsilon HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +0.210000000 gamma Upsilon(2S) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +# V-> gamma V Partial wave (L,S)=(0,1) +0.0097 gamma Upsilon_1(1D) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; +# V-> gamma T Partial wave (L,S)=(0,1) +0.0236 gamma Upsilon_2(1D) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; +0.648650000 g g PYTHIA 91; +0.016300000 omega Upsilon PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 pi+ pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000590000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000100000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000550000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001000000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000120000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001200000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000200000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000610000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000170000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001900000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay chi_b2(2P) +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +0.071000000 gamma Upsilon PHSP; #[Reconstructed PDG2011] +#0.0710 gamma Upsilon HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +0.162000000 gamma Upsilon(2S) PHSP; #[Reconstructed PDG2011] +#0.1620 gamma Upsilon(2S) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +0.00023 gamma Upsilon_1(1D) PHSP; +#0.00023 gamma Upsilon_1(1D) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +# T -> gamma T Partial wave (L,S)=(0,2) +0.00290 gamma Upsilon_2(1D) PHSP; +#0.00290 gamma Upsilon_2(1D) HELAMP -1. 0. -1.2247449 0. +# -1.2247449 0. -1. 0. +# 1. 0. 1.2247449 0. +# 1.2247449 0. 1. 0.; +# spin 3 not yet in HELAMP. +0.01420 gamma Upsilon_3(1D) PYTHIA 0; +# T-> gamma 3 Partial wave (L,S)=(0,2) +#0.01420 gamma Upsilon_3(1D) HELAMP 3.8729833 0. 3.1622777 0. +# 2.4494897 0. 1.7320508. 0. 1. 0. +# 1. 0. 1.7320508 0. 2.4494897 0. +# 3.1622777 0. 3.8729833 0.; +0.734240000 g g PYTHIA 91; +0.011000000 omega Upsilon PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000390000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000090000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000240000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000470000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000090000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001200000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000140000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000420000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000090000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001300000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay h_b +1.00000 g g PYTHIA 91; +Enddecay + +Decay chi_b0(3P) +#see Kwong and Rosner, PRD 38,279 (1988) +# S-> gamma V Partial wave (L,S)=(0,0) +0.01700 gamma Upsilon(3S) HELAMP 1. 0. 1. 0.; +# S-> gamma V Partial wave (L,S)=(0,0) +0.00400 gamma Upsilon_1(2D) HELAMP 1. 0. 1. 0.; +0.97900 g g PYTHIA 91; +Enddecay + +Decay chi_b1(3P) +#see Kwong and Rosner, PRD 38,279 (1988) +# V-> gamma V Partial wave (L,S)=(0,1) +0.15000 gamma Upsilon(3S) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; +# V-> gamma T Partial wave (L,S)=(0,1) +0.03100 gamma Upsilon_2(2D) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; +# V-> gamma V Partial wave (L,S)=(0,1) +0.01300 gamma Upsilon_1(2D) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; +0.80600 g g PYTHIA 91; +Enddecay + +Decay chi_b2(3P) +#see Kwong and Rosner, PRD 38,279 (1988) +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +0.08700 gamma Upsilon(3S) PHSP; +0.00000 gamma Upsilon(2S) PHSP; +0.00000 gamma Upsilon PHSP; +#0.08700 gamma Upsilon(3S) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +#0.00000 gamma Upsilon(2S) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +#0.00000 gamma Upsilon HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +# spin 3 not yet in HELAMP +0.02200 Upsilon_3(2D) gamma PHSP; +# T -> gamma 3 Partial wave (L,S)=(0,2) +#0.02200 gamma Upsilon_3(2D) HELAMP 3.8729833 0. 3.1622777 0. +# 2.4494897 0. 1.7320508. 0. 1. 0. +# 1. 0. 1.7320508 0. 2.4494897 0. +# 3.1622777 0. 3.8729833 0.; +# T -> gamma T Partial wave (L,S)=(0,2) +0.00400 gamma Upsilon_2(2D) PHSP; +#0.00400 gamma Upsilon_2(2D) HELAMP -1. 0. -1.2247449 0. +# -1.2247449 0. -1. 0. +# 1. 0. 1.2247449 0. +# 1.2247449 0. 1. 0.; +# T-> gamma V Partial wave (L,S)=(0,2) +0.00040 gamma Upsilon_1(2D) PHSP; +#0.00040 gamma Upsilon_1(2D) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +0.88660 g g PYTHIA 91; +Enddecay + +Decay Upsilon_1(1D) +#see Kwong and Rosner, PRD 38,279 (1988) +0.00140 Upsilon pi+ pi- PHSP; +0.00070 Upsilon pi0 pi0 PHSP; +# V-> gamma S Partial wave (L,S)=(0,1) +0.60200 gamma chi_b0 HELAMP 1. 0. +1. 0.; +# V-> gamma V Partial wave (L,S)=(0,1) +0.31800 gamma chi_b1 HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; +# V-> gamma T Partial wave (L,S)=(0,1) +0.02600 gamma chi_b2 HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; +0.05190 g g g PYTHIA 92; +Enddecay + +Decay Upsilon_2(1D) +#see Kwong and Rosner, PRD 38,279 (1988) +0.00140 Upsilon pi+ pi- PHSP; +0.00070 Upsilon pi0 pi0 PHSP; +# T-> gamma T Partial wave (L,S)=(0,2) +0.20300 gamma chi_b2 PHSP; +#0.20300 gamma chi_b2 HELAMP -1. 0. -1.2247449 0. +# -1.2247449 0. -1. 0. +# 1. 0. 1.2247449 0. +# 1.2247449 0. 1. 0.; +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +0.78500 gamma chi_b1 PHSP; +#0.78500 gamma chi_b1 HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +0.00990 g g g PYTHIA 92; +Enddecay + +Decay Upsilon_3(1D) +#see Kwong and Rosner, PRD 38,279 (1988) +0.00200 Upsilon pi+ pi- PHSP; +0.00100 Upsilon pi0 pi0 PHSP; +0.95400 chi_b2 gamma PHSP; +0.04300 g g g PYTHIA 92; +Enddecay + +Decay Upsilon_1(2D) +#see Kwong and Rosner, PRD 38,279 (1988) +0.00000 Upsilon pi+ pi- PHSP; +0.00000 Upsilon pi0 pi0 PHSP; +0.00000 Upsilon(2S) pi+ pi- PHSP; +0.00000 Upsilon(2S) pi0 pi0 PHSP; +# V-> gamma S Partial wave (L,S)=(0,1) +0.51000 gamma chi_b0(2P) HELAMP 1. 0. +1. 0.; +# V-> gamma V Partial wave (L,S)=(0,1) +0.26000 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; +# V-> gamma T Partial wave (L,S)=(0,1) +0.01400 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; +0.21600 g g g PYTHIA 92; +Enddecay + +Decay Upsilon_2(2D) +#see Kwong and Rosner, PRD 38,279 (1988) +0.00000 Upsilon pi+ pi- PHSP; +0.00000 Upsilon pi0 pi0 PHSP; +0.00000 Upsilon(2S) pi+ pi- PHSP; +0.00000 Upsilon(2S) pi0 pi0 PHSP; +# T-> gamma T Partial wave (L,S)=(0,2) +0.04000 gamma chi_b2(2P) PHSP; +#0.04000 gamma chi_b2(2P) HELAMP -1. 0. -1.2247449 0. +# -1.2247449 0. -1. 0. +# 1. 0. 1.2247449 0. +# 1.2247449 0. 1. 0.; +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +0.13000 gamma chi_b1(2P) PHSP; +#0.13000 gamma chi_b1(2P) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +0.83000 g g g PYTHIA 92; +Enddecay + +Decay Upsilon_3(2D) +#see Kwong and Rosner, PRD 38,279 (1988) +0.00000 Upsilon pi+ pi- PHSP; +0.00000 Upsilon pi0 pi0 PHSP; +0.00000 Upsilon(2S) pi+ pi- PHSP; +0.00000 Upsilon(2S) pi0 pi0 PHSP; +0.72000 chi_b2(2P) gamma PHSP; +0.28000 g g g PYTHIA 92; +Enddecay + +Decay h_b(2P) +1.00000 g g PYTHIA 91; +Enddecay +Decay h_b(3P) +1.00000 g g PYTHIA 91; +Enddecay +Decay eta_b2(1D) +1.00000 g g PYTHIA 91; +Enddecay +Decay eta_b2(2D) +1.00000 g g PYTHIA 91; +Enddecay +# +# Charm Baryons +# +Decay Lambda_c+ +0.021000000 e+ nu_e Lambda0 PYTHIA 22; +0.00500 e+ nu_e Sigma0 PYTHIA 22; +0.00500 e+ nu_e Sigma*0 PYTHIA 22; +0.00300 e+ nu_e n0 PYTHIA 22; +0.00200 e+ nu_e Delta0 PYTHIA 22; +0.00600 e+ nu_e p+ pi- PYTHIA 22; +0.00600 e+ nu_e n0 pi0 PYTHIA 22; +0.020000000 mu+ nu_mu Lambda0 PYTHIA 22; +0.00500 mu+ nu_mu Sigma0 PYTHIA 22; +0.00500 mu+ nu_mu Sigma*0 PYTHIA 22; +0.00300 mu+ nu_mu n0 PYTHIA 22; +0.00200 mu+ nu_mu Delta0 PYTHIA 22; +0.00600 mu+ nu_mu p+ pi- PYTHIA 22; +0.00600 mu+ nu_mu n0 pi0 PYTHIA 22; +0.008600000 Delta++ K- PYTHIA 0; +0.02500 Delta++ K*- PYTHIA 0; +0.023000000 p+ anti-K0 PYTHIA 0; +0.016000000 p+ anti-K*0 PYTHIA 0; +0.00500 Delta+ anti-K0 PYTHIA 0; +0.00500 Delta+ anti-K*0 PYTHIA 0; +0.010700000 Lambda0 pi+ PYTHIA 0; +0.00500 Lambda0 rho+ PYTHIA 0; +0.010500000 Sigma0 pi+ PYTHIA 0; +0.00400 Sigma0 rho+ PYTHIA 0; +0.00400 Sigma*0 pi+ PYTHIA 0; +0.00400 Sigma*0 rho+ PYTHIA 0; +0.010000000 Sigma+ pi0 PYTHIA 0; +0.005500000 Sigma+ eta PYTHIA 0; +0.00200 Sigma+ eta' PYTHIA 0; +0.00400 Sigma+ rho0 PYTHIA 0; +0.027000000 Sigma+ omega PYTHIA 0; +0.00300 Sigma*+ pi0 PYTHIA 0; +0.008500000 Sigma*+ eta PYTHIA 0; +0.00300 Sigma*+ rho0 PYTHIA 0; +0.00300 Sigma*+ omega PYTHIA 0; +0.003900000 Xi0 K+ PYTHIA 0; +0.00200 Xi0 K*+ PYTHIA 0; +0.002600000 Xi*0 K+ PYTHIA 0; +0.00100 Delta++ pi- PYTHIA 0; +0.00100 Delta++ rho- PYTHIA 0; +0.00200 p+ pi0 PYTHIA 0; +0.00100 p+ eta PYTHIA 0; +0.00100 p+ eta' PYTHIA 0; +0.00200 p+ rho0 PYTHIA 0; +0.00200 p+ omega PYTHIA 0; +0.000820000 p+ phi PYTHIA 0; +0.002800000 p+ f_0 PYTHIA 0; +0.00100 Delta+ pi0 PYTHIA 0; +0.00100 Delta+ eta PYTHIA 0; +0.00100 Delta+ eta' PYTHIA 0; +0.00100 Delta+ rho0 PYTHIA 0; +0.00100 Delta+ omega PYTHIA 0; +0.00300 n0 pi+ PYTHIA 0; +0.00300 n0 rho+ PYTHIA 0; +0.00300 Delta0 pi+ PYTHIA 0; +0.00300 Delta0 rho+ PYTHIA 0; +0.00500 Lambda0 K+ PYTHIA 0; +0.00500 Lambda0 K*+ PYTHIA 0; +0.00200 Sigma0 K+ PYTHIA 0; +0.00200 Sigma0 K*+ PYTHIA 0; +0.00100 Sigma*0 K+ PYTHIA 0; +0.00100 Sigma*0 K*+ PYTHIA 0; +0.00200 Sigma+ K0 PYTHIA 0; +0.002800000 Sigma+ K*0 PYTHIA 0; +0.00100 Sigma*+ K0 PYTHIA 0; +0.00100 Sigma*+ K*0 PYTHIA 0; +0.064094509 u anti-d d su_0 PYTHIA 43; +0.028102977 u anti-d d su_1 PYTHIA 43; +0.017256214 u anti-s d su_0 PYTHIA 43; +0.017256214 u anti-d d ud_0 PYTHIA 43; +0.046838295 s uu_1 PYTHIA 43; +0.069024855 u su_0 PYTHIA 43; +0.069024855 u su_1 PYTHIA 43; +0.014791040 d uu_1 PYTHIA 43; +0.007395520 u ud_0 PYTHIA 43; +0.007395520 u ud_1 PYTHIA 43; +0.025400000 p+ K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.033000000 p+ anti-K0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.012000000 p+ anti-K0 eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.026000000 p+ anti-K0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.023000000 p+ K- pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.011000000 p+ K*- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001100000 p+ K- pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.008000000 p+ K- pi+ pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000700000 p+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 p+ pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 p+ K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.036000000 Lambda0 pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.015000000 Lambda0 pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.011000000 Lambda0 pi+ rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 Lambda0 pi+ pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.009500000 Lambda0 pi+ eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.012000000 Lambda0 pi+ omega PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004700000 Lambda0 K+ anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.036000000 Sigma+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.017000000 Sigma- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.018000000 Sigma0 pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.008300000 Sigma0 pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 Sigma+ K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.003100000 Sigma+ phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002500000 Xi- K+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 Sigma+ K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +CDecay anti-Lambda_c- +# +Decay Xi_c0 +1.000 PYTHIA 42; +Enddecay +Decay anti-Xi_c0 +1.000 PYTHIA 42; +Enddecay +# +Decay c-hadron +0.08000 e+ nu_e s specflav PYTHIA 22; +0.08000 mu+ nu_mu s specflav PYTHIA 22; +0.76000 u anti-d s specflav PYTHIA 42; +0.08000 u anti-s s specflav PYTHIA 42; +Enddecay +CDecay anti-c-hadron +# +Decay Sigma_c0 +1.0000 Lambda_c+ pi- PHSP; +Enddecay +Decay anti-Sigma_c0 +1.0000 anti-Lambda_c- pi+ PHSP; +Enddecay +# +Decay Sigma_c+ +1.0000 Lambda_c+ pi0 PHSP; +Enddecay +Decay anti-Sigma_c- +1.0000 anti-Lambda_c- pi0 PHSP; +Enddecay +# +Decay Xi_c+ +0.079535513 PYTHIA 42; +0.079535513 Sigma*+ anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.025689971 Lambda0 K- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.010339617 Sigma+ K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.064423765 Sigma+ anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.023065299 Sigma0 K- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.043744532 Xi0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.079535513 Xi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.186113099 Xi0 pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.138391792 Xi0 pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.182931679 Xi0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005567486 Omega- K+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.007158196 p+ K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.009544262 p+ anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.038177046 Sigma+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.014316392 Sigma- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.011930327 Sigma+ K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +Decay anti-Xi_c- +0.079535513 PYTHIA 42; +0.079535513 anti-Sigma*- K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.025689971 anti-Lambda0 K+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.010339617 anti-Sigma- K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.064423765 anti-Sigma- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.023065299 anti-Sigma0 K+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.043744532 anti-Xi0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.079535513 anti-Xi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.186113099 anti-Xi0 pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.138391792 anti-Xi0 pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.182931679 anti-Xi0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005567486 anti-Omega+ K- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.007158196 anti-p- K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.009544262 anti-p- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.038177046 anti-Sigma- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.014316392 anti-Sigma+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.011930327 anti-Sigma- K- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay Sigma_c++ +1.0000 Lambda_c+ pi+ PHSP; +Enddecay +Decay anti-Sigma_c-- +1.0000 anti-Lambda_c- pi- PHSP; +Enddecay +# +Decay Xi'_c+ +0.1000 Lambda0 K- pi+ pi+ PHSP; +0.0800 Sigma0 K- pi+ pi+ PHSP; +0.8200 gamma Xi_c+ PHSP; +Enddecay +Decay anti-Xi'_c- +0.1000 anti-Lambda0 K+ pi- pi- PHSP; +0.0800 anti-Sigma0 K+ pi- pi- PHSP; +0.8200 gamma anti-Xi_c- PHSP; +Enddecay +# +Decay Xi'_c0 +1.0000 gamma Xi_c0 PHSP; +Enddecay +Decay anti-Xi'_c0 +1.0000 gamma anti-Xi_c0 PHSP; +Enddecay +# +# Light Baryons +# Lambda0 updated Feb 2009 +Decay Lambda0 +0.638719992 p+ pi- PHSP; #[Reconstructed PDG2011] +0.357719992 n0 pi0 PHSP; #[Reconstructed PDG2011] +0.001741600 n0 gamma PHSP; #[Reconstructed PDG2011] +0.000832160 p+ pi- gamma PHSP; #[Reconstructed PDG2011] +0.000831216 p+ e- anti-nu_e PHOTOS PHSP; #[Reconstructed PDG2011] +0.000155040 p+ mu- anti-nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] +Enddecay +# +Decay anti-Lambda0 +0.638719992 anti-p- pi+ PHSP; #[Reconstructed PDG2011] +0.357719992 anti-n0 pi0 PHSP; #[Reconstructed PDG2011] +0.001741600 anti-n0 gamma PHSP; #[Reconstructed PDG2011] +0.000832160 anti-p- pi+ gamma PHSP; #[Reconstructed PDG2011] +0.000831216 anti-p- e+ nu_e PHOTOS PHSP; #[Reconstructed PDG2011] +0.000155040 anti-p- mu+ nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] +Enddecay +# +Decay Lambda(1405)0 +0.3333 Sigma+ pi- PHSP; +0.3333 Sigma- pi+ PHSP; +0.3333 Sigma0 pi0 PHSP; +Enddecay +# +Decay anti-Lambda(1405)0 +0.3333 anti-Sigma+ pi- PHSP; +0.3333 anti-Sigma- pi+ PHSP; +0.3333 anti-Sigma0 pi0 PHSP; +Enddecay +# +Decay Lambda(1520)0 +0.23 p+ K- PHSP; +0.23 n0 anti-K0 PHSP; +0.14 Sigma+ pi- PHSP; +0.14 Sigma- pi+ PHSP; +0.14 Sigma0 pi0 PHSP; +0.0333 Lambda0 pi0 pi0 PHSP; +0.0667 Lambda0 pi+ pi- PHSP; +0.003 Sigma+ pi- pi0 PHSP; +0.003 Sigma- pi+ pi0 PHSP; +0.001 Sigma0 pi0 pi0 PHSP; +0.002 Sigma0 pi+ pi- PHSP; +0.011 Lambda0 gamma PHSP; +Enddecay +# +Decay anti-Lambda(1520)0 +0.23 anti-p- K+ PHSP; +0.23 anti-n0 K0 PHSP; +0.14 anti-Sigma- pi+ PHSP; +0.14 anti-Sigma+ pi- PHSP; +0.14 anti-Sigma0 pi0 PHSP; +0.0333 anti-Lambda0 pi0 pi0 PHSP; +0.0667 anti-Lambda0 pi+ pi- PHSP; +0.003 anti-Sigma+ pi- pi0 PHSP; +0.003 anti-Sigma- pi+ pi0 PHSP; +0.001 anti-Sigma0 pi0 pi0 PHSP; +0.002 anti-Sigma0 pi+ pi- PHSP; +0.011 anti-Lambda0 gamma PHSP; +Enddecay +# +Decay Lambda(1600)0 +0.176 p+ K- PHSP; +0.176 n0 anti-K0 PHSP; +0.216 Sigma+ pi- PHSP; +0.216 Sigma- pi+ PHSP; +0.216 Sigma0 pi0 PHSP; +Enddecay +# +Decay anti-Lambda(1600)0 +0.176 anti-p- K+ PHSP; +0.176 anti-n0 K0 PHSP; +0.216 anti-Sigma+ pi- PHSP; +0.216 anti-Sigma- pi+ PHSP; +0.216 anti-Sigma0 pi0 PHSP; +Enddecay +# +Decay Lambda(1670)0 +0.10 p+ K- PHSP; +0.10 n0 anti-K0 PHSP; +0.16 Sigma+ pi- PHSP; +0.16 Sigma- pi+ PHSP; +0.16 Sigma0 pi0 PHSP; +0.32 Lambda0 eta PHSP; +Enddecay +# +Decay anti-Lambda(1670)0 +0.10 anti-p- K+ PHSP; +0.10 anti-n0 K0 PHSP; +0.16 anti-Sigma+ pi- PHSP; +0.16 anti-Sigma- pi+ PHSP; +0.16 anti-Sigma0 pi0 PHSP; +0.32 anti-Lambda0 eta PHSP; +Enddecay +# +Decay Lambda(1690)0 +0.125 p+ K- PHSP; +0.125 n0 anti-K0 PHSP; +0.10 Sigma+ pi- PHSP; +0.10 Sigma- pi+ PHSP; +0.10 Sigma0 pi0 PHSP; +0.0833 Lambda0 pi0 pi0 PHSP; +0.1667 Lambda0 pi+ pi- PHSP; +0.067 Sigma+ pi- pi0 PHSP; +0.067 Sigma- pi+ pi0 PHSP; +0.022 Sigma0 pi0 pi0 PHSP; +0.044 Sigma0 pi+ pi- PHSP; +Enddecay +# +Decay anti-Lambda(1690)0 +0.125 anti-p- K+ PHSP; +0.125 anti-n0 K0 PHSP; +0.10 anti-Sigma+ pi- PHSP; +0.10 anti-Sigma- pi+ PHSP; +0.10 anti-Sigma0 pi0 PHSP; +0.0833 anti-Lambda0 pi0 pi0 PHSP; +0.1667 anti-Lambda0 pi+ pi- PHSP; +0.067 anti-Sigma+ pi- pi0 PHSP; +0.067 anti-Sigma- pi+ pi0 PHSP; +0.022 anti-Sigma0 pi0 pi0 PHSP; +0.044 anti-Sigma0 pi+ pi- PHSP; +Enddecay +# +Decay Lambda(1800)0 +0.165 p+ K- PHSP; +0.165 n0 anti-K0 PHSP; +0.08 Sigma+ pi- PHSP; +0.08 Sigma- pi+ PHSP; +0.08 Sigma0 pi0 PHSP; +0.003 Sigma*+ pi- PHSP; +0.003 Sigma*- pi+ PHSP; +0.004 Sigma*0 pi0 PHSP; +0.21 p+ K*- PHSP; +0.21 n0 anti-K*0 PHSP; +Enddecay +# +Decay anti-Lambda(1800)0 +0.165 anti-p- K+ PHSP; +0.165 anti-n0 K0 PHSP; +0.08 anti-Sigma+ pi- PHSP; +0.08 anti-Sigma- pi+ PHSP; +0.08 anti-Sigma0 pi0 PHSP; +0.003 anti-Sigma*+ pi- PHSP; +0.003 anti-Sigma*- pi+ PHSP; +0.004 anti-Sigma*0 pi0 PHSP; +0.21 anti-p- K*+ PHSP; +0.21 anti-n0 K*0 PHSP; +Enddecay +# +Decay Lambda(1810)0 +0.165 p+ K- PHSP; +0.165 n0 anti-K0 PHSP; +0.08 Sigma+ pi- PHSP; +0.08 Sigma- pi+ PHSP; +0.08 Sigma0 pi0 PHSP; +0.003 Sigma*+ pi- PHSP; +0.003 Sigma*- pi+ PHSP; +0.004 Sigma*0 pi0 PHSP; +0.21 p+ K*- PHSP; +0.21 n0 anti-K*0 PHSP; +Enddecay +# +Decay anti-Lambda(1810)0 +0.165 anti-p- K+ PHSP; +0.165 anti-n0 K0 PHSP; +0.08 anti-Sigma+ pi- PHSP; +0.08 anti-Sigma- pi+ PHSP; +0.08 anti-Sigma0 pi0 PHSP; +0.003 anti-Sigma*+ pi- PHSP; +0.003 anti-Sigma*- pi+ PHSP; +0.004 anti-Sigma*0 pi0 PHSP; +0.21 anti-p- K*+ PHSP; +0.21 anti-n0 K*0 PHSP; +Enddecay +# +Decay Lambda(1820)0 +0.34 p+ K- PHSP; +0.34 n0 anti-K0 PHSP; +0.06 Sigma+ pi- PHSP; +0.06 Sigma- pi+ PHSP; +0.06 Sigma0 pi0 PHSP; +0.04 Sigma*+ pi- PHSP; +0.04 Sigma*- pi+ PHSP; +0.04 Sigma*0 pi0 PHSP; +0.01 Lambda0 eta PHSP; +0.003 Sigma+ pi- pi0 PHSP; +0.004 Sigma- pi+ pi0 PHSP; +0.001 Sigma0 pi0 pi0 PHSP; +0.002 Sigma0 pi+ pi- PHSP; +Enddecay +# +Decay anti-Lambda(1820)0 +0.34 anti-p- K+ PHSP; +0.34 anti-n0 K0 PHSP; +0.06 anti-Sigma+ pi- PHSP; +0.06 anti-Sigma- pi+ PHSP; +0.06 anti-Sigma0 pi0 PHSP; +0.04 anti-Sigma*+ pi- PHSP; +0.04 anti-Sigma*- pi+ PHSP; +0.04 anti-Sigma*0 pi0 PHSP; +0.01 anti-Lambda0 eta PHSP; +0.003 anti-Sigma+ pi- pi0 PHSP; +0.004 anti-Sigma- pi+ pi0 PHSP; +0.001 anti-Sigma0 pi0 pi0 PHSP; +0.002 anti-Sigma0 pi+ pi- PHSP; +Enddecay +# +Decay Lambda(1830)0 +0.05 p+ K- PHSP; +0.05 n0 anti-K0 PHSP; +0.24 Sigma+ pi- PHSP; +0.24 Sigma- pi+ PHSP; +0.24 Sigma0 pi0 PHSP; +0.06 Sigma*+ pi- PHSP; +0.06 Sigma*- pi+ PHSP; +0.06 Sigma*0 pi0 PHSP; +Enddecay +# +Decay anti-Lambda(1830)0 +0.05 anti-p- K+ PHSP; +0.05 anti-n0 K0 PHSP; +0.24 anti-Sigma+ pi- PHSP; +0.24 anti-Sigma- pi+ PHSP; +0.24 anti-Sigma0 pi0 PHSP; +0.06 anti-Sigma*+ pi- PHSP; +0.06 anti-Sigma*- pi+ PHSP; +0.06 anti-Sigma*0 pi0 PHSP; +Enddecay +# +# +Decay Sigma(1660)0 +0.07 p+ K- PHSP; +0.07 n0 anti-K0 PHSP; +0.16 Lambda0 pi0 PHSP; +0.35 Sigma+ pi- PHSP; +0.35 Sigma- pi+ PHSP; +Enddecay +# +Decay anti-Sigma(1660)0 +0.07 anti-p- K+ PHSP; +0.07 anti-n0 K0 PHSP; +0.16 anti-Lambda0 pi0 PHSP; +0.35 anti-Sigma+ pi- PHSP; +0.35 anti-Sigma- pi+ PHSP; +Enddecay +# +Decay Sigma(1670)0 +0.07 p+ K- PHSP; +0.07 n0 anti-K0 PHSP; +0.16 Lambda0 pi0 PHSP; +0.35 Sigma+ pi- PHSP; +0.35 Sigma- pi+ PHSP; +Enddecay +# +Decay anti-Sigma(1670)0 +0.07 anti-p- K+ PHSP; +0.07 anti-n0 K0 PHSP; +0.16 anti-Lambda0 pi0 PHSP; +0.35 anti-Sigma+ pi- PHSP; +0.35 anti-Sigma- pi+ PHSP; +Enddecay +# +Decay Sigma(1775)0 +0.215 p+ K- PHSP; +0.215 n0 anti-K0 PHSP; +0.20 Lambda0 pi0 PHSP; +0.02 Sigma+ pi- PHSP; +0.02 Sigma- pi+ PHSP; +0.055 Sigma*+ pi- PHSP; +0.055 Sigma*- pi+ PHSP; +0.22 Lambda(1520)0 pi0 PHSP; +Enddecay +# +Decay anti-Sigma(1775)0 +0.215 anti-p- K+ PHSP; +0.215 anti-n0 K0 PHSP; +0.20 anti-Lambda0 pi0 PHSP; +0.02 anti-Sigma+ pi- PHSP; +0.02 anti-Sigma- pi+ PHSP; +0.055 anti-Sigma*+ pi- PHSP; +0.055 anti-Sigma*- pi+ PHSP; +0.22 anti-Lambda(1520)0 pi0 PHSP; +Enddecay +Decay Sigma+ +0.515454300 p+ pi0 PHSP; #[Reconstructed PDG2011] +0.482854300 n0 pi+ PHSP; #[Reconstructed PDG2011] +0.001225905 p+ gamma PHSP; #[Reconstructed PDG2011] +0.000445905 n0 pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000019590 Lambda0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +Decay anti-Sigma- +0.515454300 anti-p- pi0 PHSP; #[Reconstructed PDG2011] +0.482854300 anti-n0 pi- PHSP; #[Reconstructed PDG2011] +0.001225905 anti-p- gamma PHSP; #[Reconstructed PDG2011] +0.000445905 anti-n0 pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000019590 anti-Lambda0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay Delta+ +0.6630 p+ pi0 PHSP; +0.3310 n0 pi+ PHSP; +0.0060 p+ gamma PHSP; +Enddecay +Decay anti-Delta- +0.6630 anti-p- pi0 PHSP; +0.3310 anti-n0 pi- PHSP; +0.0060 anti-p- gamma PHSP; +Enddecay +# +Decay Delta++ +1.0000 p+ pi+ PHSP; +Enddecay +Decay anti-Delta-- +1.0000 anti-p- pi- PHSP; +Enddecay +# +Decay Xi*0 +0.3330 Xi0 pi0 PHSP; +0.6670 Xi- pi+ PHSP; +Enddecay +Decay anti-Xi*0 +0.3330 anti-Xi0 pi0 PHSP; +0.6670 anti-Xi+ pi- PHSP; +Enddecay +# +Decay Delta0 +0.3310 p+ pi- PHSP; +0.6630 n0 pi0 PHSP; +0.0060 n0 gamma PHSP; +Enddecay +Decay anti-Delta0 +0.3310 anti-p- pi+ PHSP; +0.6630 anti-n0 pi0 PHSP; +0.0060 anti-n0 gamma PHSP; +Enddecay +# +Decay Delta- +1.0000 n0 pi- PHSP; +Enddecay +Decay anti-Delta+ +1.0000 anti-n0 pi+ PHSP; +Enddecay +# +Decay Sigma- +0.998015700 n0 pi- PHSP; #[Reconstructed PDG2011] +0.000460000 n0 pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001017000 n0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000450000 n0 mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000057300 Lambda0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +Decay anti-Sigma+ +0.998015700 anti-n0 pi+ PHSP; #[Reconstructed PDG2011] +0.000460000 anti-n0 pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001017000 anti-n0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000450000 anti-n0 mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000057300 anti-Lambda0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay Sigma0 +0.995024876 gamma Lambda0 PHSP; #[Reconstructed PDG2011] +0.004975124 Lambda0 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +Decay anti-Sigma0 +0.995024876 gamma anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.004975124 anti-Lambda0 e- e+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay Sigma*- +0.8800 Lambda0 pi- PHSP; +0.0600 Sigma0 pi- PHSP; +0.0600 Sigma- pi0 PHSP; +Enddecay +Decay anti-Sigma*+ +0.8800 anti-Lambda0 pi+ PHSP; +0.0600 anti-Sigma0 pi+ PHSP; +0.0600 anti-Sigma+ pi0 PHSP; +Enddecay +# +Decay Sigma*+ +0.8800 Lambda0 pi+ PHSP; +0.0600 Sigma+ pi0 PHSP; +0.0600 Sigma0 pi+ PHSP; +Enddecay +Decay anti-Sigma*- +0.8800 anti-Lambda0 pi- PHSP; +0.0600 anti-Sigma- pi0 PHSP; +0.0600 anti-Sigma0 pi- PHSP; +Enddecay +# +Decay Sigma*0 +0.8800 Lambda0 pi0 PHSP; +0.0600 Sigma+ pi- PHSP; +0.0600 Sigma- pi+ PHSP; +Enddecay +Decay anti-Sigma*0 +0.8800 anti-Lambda0 pi0 PHSP; +0.0600 anti-Sigma- pi+ PHSP; +0.0600 anti-Sigma+ pi- PHSP; +Enddecay +# +Decay Xi0 +0.995242400 Lambda0 pi0 PHSP; #[Reconstructed PDG2011] +0.001162400 Lambda0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007600 Lambda0 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.003330000 Sigma0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000253000 Sigma+ e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004600 Sigma+ mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +Decay anti-Xi0 +0.995242400 anti-Lambda0 pi0 PHSP; #[Reconstructed PDG2011] +0.001162400 anti-Lambda0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007600 anti-Lambda0 e- e+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.003330000 anti-Sigma0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000253000 anti-Sigma- e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004600 anti-Sigma- mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay Xi- +0.998870000 Lambda0 pi- PHSP; #[Reconstructed PDG2011] +0.000127000 Sigma- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000563000 Lambda0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000350000 Lambda0 mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000087000 Sigma0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +Decay anti-Xi+ +0.998870000 anti-Lambda0 pi+ PHSP; #[Reconstructed PDG2011] +0.000127000 anti-Sigma+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000563000 anti-Lambda0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000350000 anti-Lambda0 mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000087000 anti-Sigma0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay Xi*- +0.6670 Xi0 pi- PHSP; +0.3330 Xi- pi0 PHSP; +Enddecay +Decay anti-Xi*+ +0.6670 anti-Xi0 pi+ PHSP; +0.3330 anti-Xi+ pi0 PHSP; +Enddecay +# +Decay Omega- +0.675949296 Lambda0 K- PHSP; #[Reconstructed PDG2011] +0.233949296 Xi0 pi- PHSP; #[Reconstructed PDG2011] +0.084828169 Xi- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 Xi- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000493521 Xi*0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004779718 Xi0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +Decay anti-Omega+ +0.675949296 anti-Lambda0 K+ PHSP; #[Reconstructed PDG2011] +0.233949296 anti-Xi0 pi+ PHSP; #[Reconstructed PDG2011] +0.084828169 anti-Xi+ pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 anti-Xi+ pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000493521 anti-Xi*0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004779718 anti-Xi0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +# +Decay Sigma_c*0 +1.0000 Lambda_c+ pi- PHSP; +Enddecay +CDecay anti-Sigma_c*0 +# +Decay Sigma_c*+ +1.0000 Lambda_c+ pi0 PHSP; +Enddecay +CDecay anti-Sigma_c*- +# +Decay Sigma_c*++ +1.0000 Lambda_c+ pi+ PHSP; +Enddecay +CDecay anti-Sigma_c*-- +# +Decay Xi_c*0 +0.5000 Xi_c0 pi0 PHSP; +0.5000 Xi_c0 gamma PHSP; +Enddecay +CDecay anti-Xi_c*0 +# +Decay Xi_c*+ +0.5000 Xi_c+ pi0 PHSP; +0.5000 Xi_c+ gamma PHSP; +Enddecay +CDecay anti-Xi_c*- +# +Decay Omega_c0 +1.00000 PYTHIA 42; +Enddecay +# +CDecay anti-Omega_c0 +# +Decay Omega_c*0 +1.0000 Omega_c0 gamma PHSP; +Enddecay +# +CDecay anti-Omega_c*0 +# +Decay Xu0 +# X_u^0 -> u anti-u +# +1.0 u anti-u PYTHIA 42; +Enddecay +Decay Xu+ +# X_u^+ -> u anti-d +# +1.0 u anti-d PYTHIA 42; +Enddecay +CDecay Xu- + +#lange - PYTHIA is making h_c mesons - better add a decay +# channel for them. +Decay h_c +0.01 J/psi pi0 PHSP; +0.5 eta_c gamma PHSP; +0.49 rndmflav anti-rndmflav PYTHIA 42; +Enddecay + +# 12/08/03 RJT Update b-baryon decays... +Decay Lambda_b0 +# SemiLeptonic Decays (inclusive BR = 7.7 +/- 1.8%) +0.050000000 Lambda_c+ e- anti-nu_e PHSP; #[Reconstructed PDG2011] +0.006300000 Lambda_c(2593)+ e- anti-nu_e PHSP; #[Reconstructed PDG2011] +0.011000000 Lambda_c(2625)+ e- anti-nu_e PHSP; #[Reconstructed PDG2011] + 0.00000 Sigma_c0 pi+ e- anti-nu_e PHSP; + 0.00000 Sigma_c+ pi0 e- anti-nu_e PHSP; + 0.00000 Sigma_c++ pi- e- anti-nu_e PHSP; + 0.00000 Sigma_c*0 pi+ e- anti-nu_e PHSP; + 0.00000 Sigma_c*+ pi0 e- anti-nu_e PHSP; + 0.00000 Sigma_c*++ pi- e- anti-nu_e PHSP; +# +0.050000000 Lambda_c+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011] +0.006300000 Lambda_c(2593)+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011] +0.011000000 Lambda_c(2625)+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011] + 0.00000 Sigma_c0 pi+ mu- anti-nu_mu PHSP; + 0.00000 Sigma_c+ pi0 mu- anti-nu_mu PHSP; + 0.00000 Sigma_c++ pi- mu- anti-nu_mu PHSP; + 0.00000 Sigma_c*0 pi+ mu- anti-nu_mu PHSP; + 0.00000 Sigma_c*+ pi0 mu- anti-nu_mu PHSP; + 0.00000 Sigma_c*++ pi- mu- anti-nu_mu PHSP; +# + 0.01720 Lambda_c+ tau- anti-nu_tau PHSP; + 0.00430 Lambda_c(2593)+ tau- anti-nu_tau PHSP; + 0.00320 Lambda_c(2625)+ tau- anti-nu_tau PHSP; + 0.00000 Sigma_c0 pi+ tau- anti-nu_tau PHSP; + 0.00000 Sigma_c+ pi0 tau- anti-nu_tau PHSP; + 0.00000 Sigma_c++ pi- tau- anti-nu_tau PHSP; + 0.00000 Sigma_c*0 pi+ tau- anti-nu_tau PHSP; + 0.00000 Sigma_c*+ pi0 tau- anti-nu_tau PHSP; + 0.00000 Sigma_c*++ pi- tau- anti-nu_tau PHSP; +# Hadronic Decays with Lambda_c+ +0.008800000 Lambda_c+ pi- PHSP; #[Reconstructed PDG2011] + 0.02200 Lambda_c+ pi- pi+ pi- PHSP; + 0.00055 Lambda_c+ K- PHSP; + 0.02200 Lambda_c+ D_s- PHSP; + 0.04400 Lambda_c+ D_s*- PHSP; + 0.01000 Lambda_c+ rho- PHSP; + 0.02000 Lambda_c+ a_1- PHSP; + 0.02000 Lambda0 K0 pi+ pi+ pi- pi- PHSP; +# Addition PR LHCb 09 Apr 2004, Lambda_b -> Lambda D0b + 0.00080 Lambda0 anti-D0 PHSP; +# Addition PR LHCb 04/07/04 +0.000006000 p+ K- PHSP; #[Reconstructed PDG2011] +0.000003800 p+ pi- PHSP; #[Reconstructed PDG2011] +# Addition PR LHCb 09 Apr 2004, Lambda_b -> Lambda rho0 and -> Lambda phi + 0.0000050 Lambda0 rho0 PHSP; + 0.0000200 Lambda0 phi PHSP; +# + 0.00047 Lambda0 J/psi PHSP; + 0.00038 Lambda0 psi(2S) PHSP; + 0.00100 Lambda0 eta_c PHSP; + 0.00080 n0 D0 PHSP; +# +# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate + 0.00060 Sigma_c+ pi- PHSP; + 0.00060 Sigma_c0 pi0 PHSP; + 0.00040 Sigma_c0 eta PHSP; + 0.00050 Sigma_c0 eta' PHSP; + 0.00030 Xi_c0 K0 PHSP; + 0.00050 Xi'_c0 K0 PHSP; +# PR LHCb 27 Apr 2004, addition of Pythia decays +0.398544837 anti-u d c ud_0 PYTHIA 23; +0.082218903 anti-u c d ud_0 PYTHIA 43; +0.072280354 anti-c s c ud_0 PYTHIA 43; +0.010842053 anti-u d u ud_0 PYTHIA 22; +0.010842053 anti-c s u ud_0 PYTHIA 22; +# PR LHCb 2 Dec 2004, add Lambda gamma decay mode + 0.000065 Lambda0 gamma HELAMP 1. 0. 0. 0. ; + 0.000059 Lambda(1520)0 gamma PHSP ; + 0.000056 Lambda(1670)0 gamma HELAMP 1. 0. 0. 0. ; + 0.000057 Lambda(1600)0 gamma HELAMP 1. 0. 0. 0. ; +0.056000000 Lambda_c+ pi+ pi- mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +0.056000000 Lambda_c+ pi+ pi- e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + +Decay anti-Lambda_b0 +# SemiLeptonic Decays (inclusive BR = 7.7 +/- 1.8%) +0.050000000 anti-Lambda_c- e+ nu_e PHSP; #[Reconstructed PDG2011] +0.006300000 anti-Lambda_c(2593)- e+ nu_e PHSP; #[Reconstructed PDG2011] +0.011000000 anti-Lambda_c(2625)- e+ nu_e PHSP; #[Reconstructed PDG2011] + 0.00000 anti-Sigma_c0 pi- e+ nu_e PHSP; + 0.00000 anti-Sigma_c- pi0 e+ nu_e PHSP; + 0.00000 anti-Sigma_c-- pi+ e+ nu_e PHSP; + 0.00000 anti-Sigma_c*0 pi- e+ nu_e PHSP; + 0.00000 anti-Sigma_c*- pi0 e+ nu_e PHSP; + 0.00000 anti-Sigma_c*-- pi+ e+ nu_e PHSP; +# +0.050000000 anti-Lambda_c- mu+ nu_mu PHSP; #[Reconstructed PDG2011] +0.006300000 anti-Lambda_c(2593)- mu+ nu_mu PHSP; #[Reconstructed PDG2011] +0.011000000 anti-Lambda_c(2625)- mu+ nu_mu PHSP; #[Reconstructed PDG2011] + 0.00000 anti-Sigma_c0 pi- mu+ nu_mu PHSP; + 0.00000 anti-Sigma_c- pi0 mu+ nu_mu PHSP; + 0.00000 anti-Sigma_c-- pi+ mu+ nu_mu PHSP; + 0.00000 anti-Sigma_c*0 pi- mu+ nu_mu PHSP; + 0.00000 anti-Sigma_c*- pi0 mu+ nu_mu PHSP; + 0.00000 anti-Sigma_c*-- pi+ mu+ nu_mu PHSP; +# + 0.01720 anti-Lambda_c- tau+ nu_tau PHSP; + 0.00430 anti-Lambda_c(2593)- tau+ nu_tau PHSP; + 0.00320 anti-Lambda_c(2625)- tau+ nu_tau PHSP; + 0.00000 anti-Sigma_c0 pi- tau+ nu_tau PHSP; + 0.00000 anti-Sigma_c- pi0 tau+ nu_tau PHSP; + 0.00000 anti-Sigma_c-- pi+ tau+ nu_tau PHSP; + 0.00000 anti-Sigma_c*0 pi- tau+ nu_tau PHSP; + 0.00000 anti-Sigma_c*- pi0 tau+ nu_tau PHSP; + 0.00000 anti-Sigma_c*-- pi+ tau+ nu_tau PHSP; +# Hadronic Decays with anti-Lambda_c- +0.008800000 anti-Lambda_c- pi+ PHSP; #[Reconstructed PDG2011] + 0.02200 anti-Lambda_c- pi+ pi+ pi- PHSP; + 0.00055 anti-Lambda_c- K+ PHSP; + 0.02200 anti-Lambda_c- D_s+ PHSP; + 0.04400 anti-Lambda_c- D_s*+ PHSP; + 0.01000 anti-Lambda_c- rho+ PHSP; + 0.02000 anti-Lambda_c- a_1+ PHSP; + 0.02000 Lambda0 anti-K0 pi- pi- pi+ pi+ PHSP; + # Addition LHCb PR 09 Apr 2004 Lambda_b -> Lambda D0b + 0.00080 anti-Lambda0 D0 PHSP; + # PR LHCb 04/07/04 Addition +0.000006000 anti-p- K+ PHSP; #[Reconstructed PDG2011] +0.000003800 anti-p- pi+ PHSP; #[Reconstructed PDG2011] +# Addition PR LHCb 09 Apr 2004, Lambda_b -> Lambda rho0 and -> Lambda phi + 0.0000050 anti-Lambda0 rho0 PHSP; + 0.0000200 anti-Lambda0 phi PHSP; +# + 0.00047 anti-Lambda0 J/psi PHSP; + 0.00038 anti-Lambda0 psi(2S) PHSP; + 0.001000 anti-Lambda0 eta_c PHSP; + 0.00080 anti-n0 anti-D0 PHSP; +# +# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate + 0.00060 anti-Sigma_c- pi+ PHSP; + 0.00060 anti-Sigma_c0 pi0 PHSP; + 0.00040 anti-Sigma_c0 eta PHSP; + 0.00050 anti-Sigma_c0 eta' PHSP; + 0.00030 anti-Xi_c0 anti-K0 PHSP; + 0.00050 anti-Xi'_c0 anti-K0 PHSP; +# PR LHCb 27 Apr 2004, addition of Pythia decays +0.398544837 u anti-d anti-c anti-ud_0 PYTHIA 23; +0.082218903 u anti-c anti-d anti-ud_0 PYTHIA 43; +0.072280354 c anti-s anti-c anti-ud_0 PYTHIA 43; +0.010842053 u anti-d anti-u anti-ud_0 PYTHIA 22; +0.010842053 c anti-s anti-u anti-ud_0 PYTHIA 22; +# PR LHCb 2 Dec 2004 add Lambda gamma + 0.000065 anti-Lambda0 gamma HELAMP 0. 0. 1. 0. ; + 0.000059 anti-Lambda(1520)0 gamma PHSP ; + 0.000056 anti-Lambda(1670)0 gamma HELAMP 0. 0. 1. 0. ; + 0.000057 anti-Lambda(1600)0 gamma HELAMP 0. 0. 1. 0. ; +0.056000000 anti-Lambda_c- pi- pi+ mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +0.056000000 anti-Lambda_c- pi- pi+ e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + +Decay Xi_b- +# SemiLeptonic Decays + 0.05460 Xi_c0 e- anti-nu_e PHSP; + 0.05460 Xi_c0 mu- anti-nu_mu PHSP; + 0.02000 Xi_c0 tau- anti-nu_tau PHSP; +# Hadronic Decays with Xi_c0 + 0.00600 Xi_c0 pi- PHSP; + 0.02200 Xi_c0 pi- pi+ pi- PHSP; + 0.00055 Xi_c0 K- PHSP; + 0.02200 Xi_c0 D_s- PHSP; + 0.00047 Xi- J/psi PHSP; +# added by D.Litvintsev 12/8/03: + 0.00038 Xi- psi(2S) PHSP; + 0.00018 D0 Lambda0 pi- PHSP; + 0.00020 Sigma_c0 K- PHSP; + 0.00020 Omega_c0 K- PHSP; +# +# aaa 10/19/05 Do not if this is correct but filling out with inclusives +0.38757 d anti-u d cs_0 PYTHIA 43; +0.16995 d anti-u d cs_1 PYTHIA 43; +0.06335 s anti-u d cs_0 PYTHIA 43; +0.00568 d anti-u s cs_1 PYTHIA 43; +0.00797 d anti-u s cs_0 PYTHIA 43; +0.06148 s anti-c d cs_0 PYTHIA 43; +0.06918 d anti-u d cd_0 PYTHIA 43; +0.03999 s anti-c d cd_0 PYTHIA 43; +0.00865 d anti-u d su_0 PYTHIA 43; +0.00500 s anti-c d su_0 PYTHIA 43; +Enddecay + +Decay anti-Xi_b+ +# SemiLeptonic Decays + 0.05460 anti-Xi_c0 e+ nu_e PHSP; + 0.05460 anti-Xi_c0 mu+ nu_mu PHSP; + 0.02000 anti-Xi_c0 tau+ nu_tau PHSP; +# Hadronic Decays with anti-Xi_c0 + 0.00600 anti-Xi_c0 pi+ PHSP; + 0.02200 anti-Xi_c0 pi+ pi+ pi- PHSP; + 0.00055 anti-Xi_c0 K+ PHSP; + 0.02200 anti-Xi_c0 D_s+ PHSP; + 0.00047 anti-Xi+ J/psi PHSP; +# added by D.Litvintsev 12/8/03: + 0.00038 anti-Xi+ psi(2S) PHSP; + 0.00018 anti-D0 anti-Lambda0 pi+ PHSP; + 0.00020 anti-Sigma_c0 K+ PHSP; + 0.00020 anti-Omega_c0 K+ PHSP; +# aaa 10/19/05 Do not if this is correct but filling out with inclusives +0.38757 u anti-d anti-d anti-cs_0 PYTHIA 43; +0.16995 u anti-d anti-d anti-cs_1 PYTHIA 43; +0.06335 u anti-s anti-d anti-cs_0 PYTHIA 43; +0.00568 u anti-d anti-s anti-cs_1 PYTHIA 43; +0.00797 u anti-d anti-s anti-cs_0 PYTHIA 43; +0.06148 c anti-s anti-d anti-cs_0 PYTHIA 43; +0.06918 u anti-d anti-d anti-cd_0 PYTHIA 43; +0.03999 c anti-s anti-d anti-cd_0 PYTHIA 43; +0.00865 u anti-d anti-d anti-su_0 PYTHIA 43; +0.00500 c anti-s anti-d anti-su_0 PYTHIA 43; +Enddecay + +Decay Xi_b0 +# SemiLeptonic Decays + 0.05460 Xi_c+ e- anti-nu_e PHSP; + 0.05460 Xi_c+ mu- anti-nu_mu PHSP; + 0.02000 Xi_c+ tau- anti-nu_tau PHSP; +# Hadronic Decays with Xi_c+ + 0.00600 Xi_c+ pi- PHSP; + 0.02200 Xi_c+ pi- pi+ pi- PHSP; + 0.00055 Xi_c+ K- PHSP; + 0.02200 Xi_c+ D_s- PHSP; + 0.00047 Xi0 J/psi PHSP; +# added by D.Litvintsev 12/8/03: + 0.00020 D0 Lambda0 PHSP; + 0.00010 Lambda_c+ K- PHSP; + 0.00020 Sigma_c0 anti-K0 PHSP; + 0.00020 Omega_c0 K0 PHSP; +# +# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate + 0.00020 Xi'_c+ pi- PHSP; + 0.00003 Xi_c0 pi0 PHSP; + 0.00015 Xi_c0 eta PHSP; + 0.00004 Xi_c0 eta' PHSP; + 0.00020 Xi'_c0 pi0 PHSP; + 0.00020 Xi'_c0 eta PHSP; + 0.00030 Xi'_c0 eta' PHSP; + 0.00040 Sigma_c+ K- PHSP; +# aaa 10/19/05 Do not if this is correct but filling out with inclusives +0.58591 d anti-u s cu_0 PYTHIA 43; +0.01363 s anti-u s cu_1 PYTHIA 43; +0.09539 s anti-u s cc_1 PYTHIA 43; +0.10900 s anti-u d cu_1 PYTHIA 43; +0.01363 d anti-u d uu_1 PYTHIA 43; +Enddecay + +Decay anti-Xi_b0 + 0.05460 anti-Xi_c- e+ nu_e PHSP; + 0.05460 anti-Xi_c- mu+ nu_mu PHSP; + 0.02000 anti-Xi_c- tau+ nu_tau PHSP; +# Hadronic Decays with anti-Xi_c- + 0.00600 anti-Xi_c- pi+ PHSP; + 0.02200 anti-Xi_c- pi+ pi+ pi- PHSP; + 0.00055 anti-Xi_c- K+ PHSP; + 0.02200 anti-Xi_c- D_s+ PHSP; + 0.00047 anti-Xi0 J/psi PHSP; +# added by D.Litvintsev 12/8/03: + 0.00020 anti-D0 anti-Lambda0 PHSP; + 0.00010 anti-Lambda_c- K+ PHSP; + 0.00020 anti-Sigma_c0 K0 PHSP; + 0.00020 anti-Omega_c0 anti-K0 PHSP; +# +# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate + 0.00020 anti-Xi'_c- pi+ PHSP; + 0.00003 anti-Xi_c0 pi0 PHSP; + 0.00015 anti-Xi_c0 eta PHSP; + 0.00004 anti-Xi_c0 eta' PHSP; + 0.00020 anti-Xi'_c0 pi0 PHSP; + 0.00020 anti-Xi'_c0 eta PHSP; + 0.00030 anti-Xi'_c0 eta' PHSP; + 0.00040 anti-Sigma_c- K+ PHSP; +# aaa 10/19/05 Do not if this is correct but filling out with inclusives +0.58591 u anti-d anti-s anti-cu_0 PYTHIA 43; +0.01363 u anti-s anti-s anti-cu_1 PYTHIA 43; +0.09539 u anti-s anti-s anti-cc_1 PYTHIA 43; +0.10900 u anti-s anti-d anti-cu_1 PYTHIA 43; +0.01363 u anti-d anti-d anti-uu_1 PYTHIA 43; +Enddecay + +# added by D.Litvintsev 12/8/03: +Decay Omega_b- +# SemiLeptonic Decays + 0.05460 Omega_c0 e- anti-nu_e PHSP; + 0.05460 Omega_c0 mu- anti-nu_mu PHSP; + 0.02000 Omega_c0 tau- anti-nu_tau PHSP; +# Hadronic Decays with Xi_c+ + 0.00600 Omega_c0 pi- PHSP; + 0.02200 Omega_c0 pi- pi+ pi- PHSP; + 0.00055 Omega_c0 K- PHSP; + 0.02200 Omega_c0 D_s- PHSP; + 0.0011 D0 Xi- PHSP; +# + 0.00047 Omega- J/psi PHSP; + 0.00038 Omega- psi(2S) PHSP; +# aaa 10/19/05 Do not if this is correct but filling out with inclusives +0.68192 d anti-u s cs_0 PYTHIA 43; +0.10910 d anti-u d cs_0 PYTHIA 43; +0.02728 d anti-u s su_0 PYTHIA 43; +Enddecay + +Decay anti-Omega_b+ +# SemiLeptonic Decays + 0.05460 anti-Omega_c0 e+ nu_e PHSP; + 0.05460 anti-Omega_c0 mu+ nu_mu PHSP; + 0.02000 anti-Omega_c0 tau+ nu_tau PHSP; +# Hadronic Decays with Xi_c+ + 0.00600 anti-Omega_c0 pi+ PHSP; + 0.02200 anti-Omega_c0 pi+ pi+ pi- PHSP; + 0.00055 anti-Omega_c0 K+ PHSP; + 0.02200 anti-Omega_c0 D_s+ PHSP; + 0.0011 anti-D0 anti-Xi+ PHSP; +# + 0.00047 anti-Omega+ J/psi PHSP; + 0.00038 anti-Omega+ psi(2S) PHSP; +# aaa 10/19/05 Do not if this is correct but filling out with inclusives +0.68192 u anti-d anti-s anti-cs_0 PYTHIA 43; +0.10910 u anti-d anti-d anti-cs_0 PYTHIA 43; +0.02728 u anti-d anti-s anti-su_0 PYTHIA 43; +Enddecay + + +Decay Sigma_b+ + 1.00000 Lambda_b0 pi+ PHSP; +Enddecay +Decay anti-Sigma_b- + 1.00000 anti-Lambda_b0 pi- PHSP; +Enddecay + +Decay Sigma_b- + 1.00000 Lambda_b0 pi- PHSP; +Enddecay +Decay anti-Sigma_b+ + 1.00000 anti-Lambda_b0 pi+ PHSP; +Enddecay + +Decay Sigma_b0 + 1.00000 Lambda_b0 gamma PHOTOS PHSP; +Enddecay +Decay anti-Sigma_b0 + 1.00000 anti-Lambda_b0 gamma PHOTOS PHSP; +Enddecay + + +# +# B_c Mesons +# + +Decay B_c- +0.01600 tau- anti-nu_tau SLN; +# +# SemiLeptonic Decays +0.01900 J/psi e- anti-nu_e PHOTOS PHSP; +0.00094 psi(2S) e- anti-nu_e PHOTOS PHSP; +0.00750 eta_c e- anti-nu_e PHOTOS PHSP; +0.00020 eta_c(2S) e- anti-nu_e PHOTOS PHSP; +0.00004 anti-D0 e- anti-nu_e PHOTOS PHSP; +0.00018 anti-D*0 e- anti-nu_e PHOTOS PHSP; +0.04030 anti-B_s0 e- anti-nu_e PHOTOS PHSP; +0.05060 anti-B_s*0 e- anti-nu_e PHOTOS PHSP; +0.00340 anti-B0 e- anti-nu_e PHOTOS PHSP; +0.00580 anti-B*0 e- anti-nu_e PHOTOS PHSP; +# +0.01900 J/psi mu- anti-nu_mu PHOTOS PHSP; +0.00094 psi(2S) mu- anti-nu_mu PHOTOS PHSP; +0.00750 eta_c mu- anti-nu_mu PHOTOS PHSP; +0.00020 eta_c(2S) mu- anti-nu_mu PHOTOS PHSP; +0.00004 anti-D0 mu- anti-nu_mu PHOTOS PHSP; +0.00018 anti-D*0 mu- anti-nu_mu PHOTOS PHSP; +0.04030 anti-B_s0 mu- anti-nu_mu PHOTOS PHSP; +0.05060 anti-B_s*0 mu- anti-nu_mu PHOTOS PHSP; +0.00340 anti-B0 mu- anti-nu_mu PHOTOS PHSP; +0.00580 anti-B*0 mu- anti-nu_mu PHOTOS PHSP; +# +0.00480 J/psi tau- anti-nu_tau PHSP; +0.00008 psi(2S) tau- anti-nu_tau PHSP; +0.00230 eta_c tau- anti-nu_tau PHSP; +0.000016 eta_c(2S) tau- anti-nu_tau PHSP; +0.00002 anti-D0 tau- anti-nu_tau PHSP; +0.00008 anti-D*0 tau- anti-nu_tau PHSP; +# +# +# Hadronic Decays +0.00200 eta_c pi- PHSP; +0.00420 rho- eta_c SVS; +0.00013 eta_c K- PHSP; +0.00020 K*- eta_c SVS; +0.00130 J/psi pi- SVS; +0.00400 J/psi rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00011 J/psi K- SVS; +0.00022 J/psi K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.000053 D- D0 PHSP; +0.000075 D*0 D- SVS; +0.000049 D*- D0 SVS; +0.00033 D*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000048 D_s- D0 PHSP; +0.0000071 D*0 D_s- SVS; +0.0000045 D_s*- D0 SVS; +0.000026 D_s*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.0000003 D- anti-D0 PHSP; +0.0000003 anti-D*0 D- SVS; +0.0000004 D*- anti-D0 SVS; +0.0000016 anti-D*0 D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000066 D_s- anti-D0 PHSP; +0.0000063 anti-D*0 D_s- SVS; +0.0000085 D_s*- anti-D0 SVS; +0.0000404 D_s*- anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.00280 eta_c D_s- PHSP; +0.00270 D_s*- eta_c SVS; +0.00015 eta_c D- PHSP; +0.00010 D*- eta_c SVS; +0.00170 J/psi D_s- SVS; +0.00670 J/psi D_s*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00009 J/psi D- SVS; +0.00028 J/psi D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.16400 anti-B_s0 pi- PHSP; +0.07200 rho- anti-B_s0 SVS; +0.01060 anti-B_s0 K- PHSP; +0.00000 K*- anti-B_s0 SVS; +0.06500 anti-B_s*0 pi- SVS; +0.20200 anti-B_s*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00370 anti-B_s*0 K- SVS; +0.00000 anti-B_s*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.01060 anti-B0 pi- PHSP; +0.00960 rho- anti-B0 SVS; +0.00070 anti-B0 K- PHSP; +0.00015 K*- anti-B0 SVS; +0.00950 anti-B*0 pi- SVS; +0.02570 anti-B*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00055 anti-B*0 K- SVS; +0.00058 anti-B*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00037 B- pi0 PHSP; +0.00034 rho0 B- SVS; +0.01980 B- K0 PHSP; +0.00430 K*0 B- SVS; +0.00033 B*- pi0 SVS; +0.00090 B*- rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.01600 B*- K0 SVS; +0.01670 B*- K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# PR LHCb 09 Apr 2004 Add B_c+ -> rho0 pi+ + 0.00002 rho0 pi- SVS; +0.06005 anti-c s PYTHIA 42; +# PR LHCb 27 Apr 2004 Add Pythia Modes +# +# ash 10/27/03 Do not if this is correct but filling out with unknown cs +#0.0200235 cs_0 anti-uu_0 PYTHIA 63; +#0.0400470 cs_1 anti-uu_1 PYTHIA 63; +# +Enddecay + +# 09/15/03 A. Sanchez: Using BR's from hep-ph/0308214 +# +# Total Br = 0.939865 + .06135 cs +Decay B_c+ +0.01600 tau+ nu_tau SLN; +# +# SemiLeptonic Decays +0.01900 J/psi e+ nu_e PHOTOS PHSP; +0.00094 psi(2S) e+ nu_e PHOTOS PHSP; +0.00750 eta_c e+ nu_e PHOTOS PHSP; +0.00020 eta_c(2S) e+ nu_e PHOTOS PHSP; +0.00004 D0 e+ nu_e PHOTOS PHSP; +0.00018 D*0 e+ nu_e PHOTOS PHSP; +0.04030 B_s0 e+ nu_e PHOTOS PHSP; +0.05060 B_s*0 e+ nu_e PHOTOS PHSP; +0.00340 B0 e+ nu_e PHOTOS PHSP; +0.00580 B*0 e+ nu_e PHOTOS PHSP; +# +0.01900 J/psi mu+ nu_mu PHOTOS PHSP; +0.00094 psi(2S) mu+ nu_mu PHOTOS PHSP; +0.00750 eta_c mu+ nu_mu PHOTOS PHSP; +0.00020 eta_c(2S) mu+ nu_mu PHOTOS PHSP; +0.00004 D0 mu+ nu_mu PHOTOS PHSP; +0.00018 D*0 mu+ nu_mu PHOTOS PHSP; +0.04030 B_s0 mu+ nu_mu PHOTOS PHSP; +0.05060 B_s*0 mu+ nu_mu PHOTOS PHSP; +0.00340 B0 mu+ nu_mu PHOTOS PHSP; +0.00580 B*0 mu+ nu_mu PHOTOS PHSP; +# +0.00480 J/psi tau+ nu_tau PHSP; +0.00008 psi(2S) tau+ nu_tau PHSP; +0.00230 eta_c tau+ nu_tau PHSP; +0.000016 eta_c(2S) tau+ nu_tau PHSP; +0.00002 D0 tau+ nu_tau PHSP; +0.00008 D*0 tau+ nu_tau PHSP; +# +# Hadronic Decays +0.00200 eta_c pi+ PHSP; +0.00420 rho+ eta_c SVS; +0.00013 eta_c K+ PHSP; +0.00020 K*+ eta_c SVS; +0.00130 J/psi pi+ SVS; +0.00400 J/psi rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00011 J/psi K+ SVS; +0.00022 J/psi K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.000053 D+ anti-D0 PHSP; +0.000075 anti-D*0 D+ SVS; +0.000049 D*+ anti-D0 SVS; +0.00033 D*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000048 D_s+ anti-D0 PHSP; +0.0000071 anti-D*0 D_s+ SVS; +0.0000045 D_s*+ anti-D0 SVS; +0.000026 D_s*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.0000003 D+ D0 PHSP; +0.0000003 D*0 D+ SVS; +0.0000004 D*+ D0 SVS; +0.0000016 D*0 D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000066 D_s+ D0 PHSP; +0.0000063 D*0 D_s+ SVS; +0.0000085 D_s*+ D0 SVS; +0.0000404 D_s*+ D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.00280 eta_c D_s+ PHSP; +0.00270 D_s*+ eta_c SVS; +0.00015 eta_c D+ PHSP; +0.00010 D*+ eta_c SVS; +0.00170 J/psi D_s+ SVS; +0.00670 J/psi D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00009 J/psi D+ SVS; +0.00028 J/psi D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.16400 B_s0 pi+ PHSP; +0.07200 rho+ B_s0 SVS; +0.01060 B_s0 K+ PHSP; +0.00000 K*+ B_s0 SVS; +0.06500 B_s*0 pi+ SVS; +0.20200 B_s*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00370 B_s*0 K+ SVS; +0.00000 B_s*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.01060 B0 pi+ PHSP; +0.00960 rho+ B0 SVS; +0.00070 B0 K+ PHSP; +0.00015 K*+ B0 SVS; +0.00950 B*0 pi+ SVS; +0.02570 B*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00055 B*0 K+ SVS; +0.00058 B*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00037 B+ pi0 PHSP; +0.00034 rho0 B+ SVS; +0.01980 B+ anti-K0 PHSP; +0.00430 K*0 B+ SVS; +0.00033 B*+ pi0 SVS; +0.00090 B*+ rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.01600 B*+ anti-K0 SVS; +0.01670 B*+ K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# PR LHCb 09 Apr 2004 Add B_c+ -> rho0 pi+ + 0.00002 rho0 pi+ SVS; +0.06005 c anti-s PYTHIA 42; +# PR LHCb 27 Apr 2004 Add Pythia Modes +# +# ash 10/27/03 Do not if this is correct but filling out with unknown cs +#0.0200235 anti-cs_0 uu_0 PYTHIA 63; +#0.0400470 anti-cs_1 uu_1 PYTHIA 63; +# +Enddecay + + +# Add excited Lambda_c decays (R.J. Tesarek 12/9/03) +# Just a guess for the last two BR [Lambda_c(2593)+]. +Decay Lambda_c(2593)+ +0.096585366 Sigma_c++ pi- PHSP; #[Reconstructed PDG2011] +0.096585366 Sigma_c0 pi+ PHSP; #[Reconstructed PDG2011] +0.190000000 Lambda_c+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.096585366 Sigma_c+ pi0 PHSP; #[Reconstructed PDG2011] +0.036219512 Lambda_c+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.004024390 Lambda_c+ gamma PHSP; #[Reconstructed PDG2011] +0.240000000 Sigma_c*++ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.240000000 Sigma_c*0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +Decay anti-Lambda_c(2593)- +0.096585366 anti-Sigma_c-- pi+ PHSP; #[Reconstructed PDG2011] +0.096585366 anti-Sigma_c0 pi- PHSP; #[Reconstructed PDG2011] +0.190000000 anti-Lambda_c- pi- pi+ PHSP; #[Reconstructed PDG2011] +0.096585366 anti-Sigma_c- pi0 PHSP; #[Reconstructed PDG2011] +0.036219512 anti-Lambda_c- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.004024390 anti-Lambda_c- gamma PHSP; #[Reconstructed PDG2011] +0.240000000 anti-Sigma_c*-- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.240000000 anti-Sigma_c*0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay Lambda_c(2625)+ +0.670000000 Lambda_c+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.320294118 Lambda_c+ pi0 PHSP; #[Reconstructed PDG2011] +0.009705882 Lambda_c+ gamma PHSP; #[Reconstructed PDG2011] +Enddecay +Decay anti-Lambda_c(2625)- +0.670000000 anti-Lambda_c- pi- pi+ PHSP; #[Reconstructed PDG2011] +0.320294118 anti-Lambda_c- pi0 PHSP; #[Reconstructed PDG2011] +0.009705882 anti-Lambda_c- gamma PHSP; #[Reconstructed PDG2011] +Enddecay + +# Add excited B hadrons (LHCb PR 10/03/04) +# Reference : Pythia 6.205 decay table +# PDG Id = 5312 +Decay Xi'_b- + 1.0000 Xi_b- gamma PHSP; +Enddecay +Decay anti-Xi'_b+ + 1.0000 anti-Xi_b+ gamma PHSP; +Enddecay +# PDG Id = 5322 +Decay Xi'_b0 + 1.0000 Xi_b0 gamma PHSP; +Enddecay +Decay anti-Xi'_b0 + 1.0000 anti-Xi_b0 gamma PHSP; +Enddecay +# PDG Id = 10521 +Decay B_0*+ + 0.6670 B0 pi+ PHSP; + 0.3330 B+ pi0 PHSP; +Enddecay +Decay B_0*- + 0.6670 anti-B0 pi- PHSP; + 0.3330 B- pi0 PHSP; +Enddecay +# PDG Id = 20523 Broad : S wave +Decay B'_1+ + 0.6670 B*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.3330 B*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay B'_1- + 0.6670 anti-B*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.3330 B*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# PDG Id = 10523 Narrow : D wave +Decay B_1+ + 0.6670 B*0 pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.3330 B*+ pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +Decay B_1- + 0.6670 anti-B*0 pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.3330 B*- pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +# PDG Id = 525 Narrow : D wave +Decay B_2*+ + 0.3000 B0 pi+ TSS; + 0.1500 B+ pi0 TSS; + 0.1600 B*0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.0800 B*+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.1300 B*0 pi+ pi0 PHSP; + 0.0600 B*+ pi+ pi- PHSP; + 0.0800 B0 pi+ pi0 PHSP; + 0.0400 B+ pi+ pi- PHSP; +Enddecay +Decay B_2*- + 0.3000 anti-B0 pi- TSS; + 0.1500 B- pi0 TSS; + 0.1600 anti-B*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.0800 B*- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.1300 anti-B*0 pi- pi0 PHSP; + 0.0600 B*- pi- pi+ PHSP; + 0.0800 anti-B0 pi- pi0 PHSP; + 0.0400 B- pi- pi+ PHSP; +Enddecay +# PDG Id = 10511 +Decay B_0*0 + 0.6670 B+ pi- PHSP; + 0.3330 B0 pi0 PHSP; +Enddecay +Decay anti-B_0*0 + 0.6670 B- pi+ PHSP; + 0.3330 anti-B0 pi0 PHSP; +Enddecay +# PDG Id = 20513 Broad : S wave +Decay B'_10 + 0.6670 B*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.3330 B*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay anti-B'_10 + 0.6670 B*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.3330 anti-B*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# PDG Id = 10513 Narrow : D wave +Decay B_10 + 0.6670 B*+ pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.3330 B*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +Decay anti-B_10 + 0.6670 B*- pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.3330 anti-B*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +# PDG Id = 515 +Decay B_2*0 + 0.3000 B+ pi- TSS; + 0.1500 B0 pi0 TSS; + 0.1600 B*+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.0800 B*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.1300 B*+ pi- pi0 PHSP; + 0.0600 B*0 pi+ pi- PHSP; + 0.0800 B+ pi- pi0 PHSP; + 0.0400 B0 pi+ pi- PHSP; +Enddecay +Decay anti-B_2*0 + 0.3000 B- pi+ TSS; + 0.1500 anti-B0 pi0 TSS; + 0.1600 B*- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.0800 anti-B*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.1300 B*- pi+ pi0 PHSP; + 0.0600 anti-B*0 pi- pi+ PHSP; + 0.0800 B- pi+ pi0 PHSP; + 0.0400 anti-B0 pi- pi+ PHSP; +Enddecay +# PDG Id = 10531 +Decay B_s0*0 + 0.5000 B+ K- PHSP; + 0.5000 B0 anti-K0 PHSP; +Enddecay +Decay anti-B_s0*0 + 0.5000 B- K+ PHSP; + 0.5000 anti-B0 K0 PHSP; +Enddecay +# PDG Id = 20533 Broad : S wave +Decay B'_s10 + 0.5000 B*+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.5000 B*0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay anti-B'_s10 + 0.5000 B*- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.5000 anti-B*0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# PDG Id = 10533 Narrow : D wave +Decay B_s10 + 0.5000 B*+ K- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.5000 B*0 anti-K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +Decay anti-B_s10 + 0.5000 B*- K+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.5000 anti-B*0 K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +# PDG Id = 535 Narrow : D wave +Decay B_s2*0 + 0.3000 B+ K- TSS; + 0.3000 B0 anti-K0 TSS; + 0.2000 B*+ K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.2000 B*0 anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay +Decay anti-B_s2*0 + 0.3000 B- K+ TSS; + 0.3000 anti-B0 K0 TSS; + 0.2000 B*- K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.2000 anti-B*0 K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay +# PDG Id = 543 +Decay B_c*+ + 1.0000 B_c+ gamma VSP_PWAVE; +Enddecay +Decay B_c*- + 1.0000 B_c- gamma VSP_PWAVE; +Enddecay +# PDG Id = 545 Narrow : D wave +Decay B_c2*+ + 0.3000 B0 D+ TSS; + 0.3000 B+ D0 TSS; + 0.2000 B*0 D+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.2000 B*+ D0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay +Decay B_c2*- + 0.3000 anti-B0 D- TSS; + 0.3000 B- anti-D0 TSS; + 0.2000 anti-B*0 D- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.2000 B*- anti-D0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay +# PDG Id = 5114 +Decay Sigma_b*- + 1.0000 Lambda_b0 pi- PHSP; +Enddecay +Decay anti-Sigma_b*+ + 1.0000 anti-Lambda_b0 pi+ PHSP; +Enddecay +# PDG Id = 5224 +Decay Sigma_b*+ + 1.0000 Lambda_b0 pi+ PHSP; +Enddecay +Decay anti-Sigma_b*- + 1.0000 anti-Lambda_b0 pi- PHSP; +Enddecay +# PDG Id = 5214 +Decay Sigma_b*0 + 1.0000 Lambda_b0 pi0 PHSP; +Enddecay +Decay anti-Sigma_b*0 + 1.0000 anti-Lambda_b0 pi0 PHSP; +Enddecay +# PDG Id = 5314 +Decay Xi_b*- + 1.0000 Xi_b- gamma PHSP; +Enddecay +Decay anti-Xi_b*+ + 1.0000 anti-Xi_b+ gamma PHSP; +Enddecay +# PDG Id = 5324 +Decay Xi_b*0 + 1.0000 Xi_b0 gamma PHSP; +Enddecay +Decay anti-Xi_b*0 + 1.0000 anti-Xi_b0 gamma PHSP; +Enddecay +# PDG Id = 5334 +Decay Omega_b*- + 1.0000 Omega_b- gamma PHSP; +Enddecay +Decay anti-Omega_b*+ + 1.0000 anti-Omega_b+ gamma PHSP; +Enddecay +# PDG Id = 10541 +Decay B_c0*+ + 0.5000 B0 D+ PHSP; + 0.5000 B+ D0 PHSP; +Enddecay +Decay B_c0*- + 0.5000 anti-B0 D- PHSP; + 0.5000 B- anti-D0 PHSP; +Enddecay +# PDG Id = 10543 Narrow : D wave +Decay B_c1+ + 0.5000 B*0 D+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.5000 B*+ D0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +Decay B_c1- + 0.5000 anti-B*0 D- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.5000 B*- anti-D0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +# PDG Id = 20543 Broad : S wave +Decay B'_c1+ + 0.5000 B*0 D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.5000 B*+ D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay B'_c1- + 0.5000 anti-B*0 D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.5000 B*- anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay + +# Excited charmed Baryons LHCb PR 3-05-2006 +Decay Xi_cc*++ + 0.08 e+ nu_e Xi_c+ PHSP ; + 0.08 mu+ nu_mu Xi_c+ PHSP ; +0.51 u anti-d s cu_0 PYTHIA 42; +0.25 u anti-d s cu_1 PYTHIA 42; +0.05 u anti-s s cu_0 PYTHIA 42; +0.03 u anti-s s cu_1 PYTHIA 42; +Enddecay + +Decay anti-Xi_cc*-- + 0.08 e- anti-nu_e anti-Xi_c- PHSP; + 0.08 mu- anti-nu_mu anti-Xi_c- PHSP; +0.51 anti-u d anti-s anti-cu_0 PYTHIA 42; +0.25 anti-u d anti-s anti-cu_0 PYTHIA 42; +0.05 anti-u s anti-s anti-cu_1 PYTHIA 42; +0.03 anti-u s anti-s anti-cu_1 PYTHIA 42; +Enddecay + +Decay Xi_cc++ + 0.08 e+ nu_e Xi_c+ PHSP ; + 0.08 mu+ nu_mu Xi_c+ PHSP ; +0.51 u anti-d s cu_0 PYTHIA 42; +0.25 u anti-d s cu_1 PYTHIA 42; +0.05 u anti-s s cu_0 PYTHIA 42; +0.03 u anti-s s cu_1 PYTHIA 42; +Enddecay + +Decay anti-Xi_cc-- + 0.08 e- anti-nu_e anti-Xi_c- PHSP; + 0.08 mu- anti-nu_mu anti-Xi_c- PHSP; +0.51 anti-u d anti-s anti-cu_0 PYTHIA 42; +0.25 anti-u d anti-s anti-cu_0 PYTHIA 42; +0.05 anti-u s anti-s anti-cu_1 PYTHIA 42; +0.03 anti-u s anti-s anti-cu_1 PYTHIA 42; +Enddecay + +Decay Xi_cc*+ + 0.08 e+ nu_e Xi_c0 PHSP; + 0.08 mu+ nu_mu Xi_c0 PHSP; +0.51 u anti-d s cd_0 PYTHIA 42; +0.25 u anti-d s cd_1 PYTHIA 42; +0.05 u anti-s s cd_0 PYTHIA 42; +0.03 u anti-s s cd_1 PYTHIA 42; +Enddecay + +Decay anti-Xi_cc*- + 0.08 e- anti-nu_e anti-Xi_c0 PHSP; + 0.08 mu- anti-nu_mu anti-Xi_c0 PHSP; +0.51 anti-u d anti-s anti-cd_0 PYTHIA 42; +0.25 anti-u d anti-s anti-cd_1 PYTHIA 42; +0.05 anti-u s anti-s anti-cd_0 PYTHIA 42; +0.03 anti-u s anti-s anti-cd_1 PYTHIA 42; +Enddecay + +Decay Xi_cc+ + 0.08 e+ nu_e Xi_c0 PHSP; + 0.08 mu+ nu_mu Xi_c0 PHSP; +0.51 u anti-d s cd_0 PYTHIA 42; +0.25 u anti-d s cd_1 PYTHIA 42; +0.05 u anti-s s cd_0 PYTHIA 42; +0.03 u anti-s s cd_1 PYTHIA 42; +Enddecay + +Decay anti-Xi_cc- + 0.08 e- anti-nu_e anti-Xi_c0 PHSP; + 0.08 mu- anti-nu_mu anti-Xi_c0 PHSP; +0.51 anti-u d anti-s anti-cd_0 PYTHIA 42; +0.25 anti-u d anti-s anti-cd_1 PYTHIA 42; +0.05 anti-u s anti-s anti-cd_0 PYTHIA 42; +0.03 anti-u s anti-s anti-cd_1 PYTHIA 42; +Enddecay + +Decay Omega_cc+ + 0.08 e+ nu_e Omega_c0 PHSP; + 0.08 mu+ nu_mu Omega_c0 PHSP; +0.51 u anti-d s cs_0 PYTHIA 42; +0.25 u anti-d s cs_1 PYTHIA 42; +0.05 u anti-s s cs_0 PYTHIA 42; +0.03 u anti-s s cs_1 PYTHIA 42; +Enddecay + +Decay anti-Omega_cc- + 0.08 e- anti-nu_e anti-Omega_c0 PHSP; + 0.08 mu- anti-nu_mu anti-Omega_c0 PHSP; +0.51 anti-u d anti-s anti-cs_0 PYTHIA 42; +0.25 anti-u d anti-s anti-cs_1 PYTHIA 42; +0.05 anti-u s anti-s anti-cs_0 PYTHIA 42; +0.03 anti-u s anti-s anti-cs_1 PYTHIA 42; +Enddecay + +Decay Omega_cc*+ + 0.08 e+ nu_e Omega_c0 PHSP; + 0.08 mu+ nu_mu Omega_c0 PHSP; +0.51 u anti-d s cs_0 PYTHIA 42; +0.25 u anti-d s cs_1 PYTHIA 42; +0.05 u anti-s s cs_0 PYTHIA 42; +0.03 u anti-s s cs_1 PYTHIA 42; +Enddecay + +Decay anti-Omega_cc*- + 0.08 e- anti-nu_e anti-Omega_c0 PHSP; + 0.08 mu- anti-nu_mu anti-Omega_c0 PHSP; +0.51 anti-u d anti-s anti-cs_0 PYTHIA 42; +0.25 anti-u d anti-s anti-cs_1 PYTHIA 42; +0.05 anti-u s anti-s anti-cs_0 PYTHIA 42; +0.03 anti-u s anti-s anti-cs_1 PYTHIA 42; +Enddecay + +Decay K_L0 +#0.202464226 pi+ e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.202464226 pi- e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.135033299 pi+ mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.135033299 pi- mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000025738 pi0 pi+ e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000025738 pi0 pi- e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000006205 pi+ e- anti-nu_e e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000006205 pi- e+ nu_e e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.194795855 pi0 pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.125231606 pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.001880711 pi+ e- anti-nu_e gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.001880711 pi- e+ nu_e gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000277023 pi+ mu- anti-nu_mu gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000277023 pi- mu+ nu_mu gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000040995 pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000001262 pi0 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000000016 pi0 gamma e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000545653 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000009265 e+ e- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000000355 mu+ mu- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000000584 e+ e- gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000000007 mu+ mu- gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + +End diff --git a/GeneratorInterface/EvtGenInterface/data/DECAY_2009.DEC b/GeneratorInterface/EvtGenInterface/data/DECAY_2009.DEC deleted file mode 100644 index 9ecc972aea37f..0000000000000 --- a/GeneratorInterface/EvtGenInterface/data/DECAY_2009.DEC +++ /dev/null @@ -1,9660 +0,0 @@ -# $Id: DECAY.DEC,v 1.55 2009-11-26 14:16:27 robbep Exp $ -# Updated to PDG 2008 (By Mark Whitehead - m.p.whitehead@warwick.ac.uk) -# Updated Mixing Parameters Mark Whitehead May 2009 -# -Define qoverp_incohMix_B_s0 1.0 -Define dm_incohMix_B_s0 17.8e12 -Define qoverp_incohMix_B0 1.0 -Define dm_incohMix_B0 0.507e12 -# Old definition of dm still in some decay models -Define dm 0.507e12 -#Define dgamma 0 -#Define qoverp 1 -#Define phaseqoverp 0 -#Define values for B0s mixing -#Define dms 20.e12 -# DeltaGammas corresponds to DG/G = 10% -#Define dgammas 6.852e10 -# Activate incoherent Mixing -### TODO: find a way to give mixing parameters through decay file to EvtGen -#####yesIncoherentB0Mixing dm dgamma -#####yesIncoherentBsMixing dms dgammas -# define the values of the CKM angles (alpha=70, beta=40) -Define alpha 1.365 -Define beta 0.39 -Define gamma 1.387 -Define twoBetaPlusGamma 2.167 -Define betaPlusHalfGamma 1.0835 -Define minusGamma -1.387 -Define minusTwoBeta -0.78 - -# New definitions for psiKstar modes (Lange, July 26, 2000) -Define PKHplus 0.159 -Define PKHzero 0.775 -Define PKHminus 0.612 -Define PKphHplus 1.563 -Define PKphHzero 0.0 -Define PKphHminus 2.712 - -Define Aplus 0.490 -Define Azero 1.10 -Define Aminus 0.4 -# -Define phAplus 2.5 -Define phAzero 0.0 -Define phAminus -0.17 - -# -# These particle aliases are used in for CP violating decays -# in which the decay distributions depends on how the K* decayed. -# -# -Alias K*L K*0 -Alias K*S K*0 -Alias K*BL anti-K*0 -Alias K*BS anti-K*0 -Alias K*0T K*0 -Alias anti-K*0T anti-K*0 -Alias K*BR anti-K*0 -Alias K*0R K*0 -Alias anti-K_0*0N anti-K_0*0 -Alias K_0*0N K_0*0 -# -ChargeConj K*L K*BL -ChargeConj K*S K*BS -ChargeConj K*0T anti-K*0T -ChargeConj K_0*0N anti-K_0*0N -ChargeConj K*0R K*BR -# -# PR LHCb: Alias for signal productions in LHCb -# -Alias B0sig B0 -Alias anti-B0sig anti-B0 -ChargeConj B0sig anti-B0sig -Alias B+sig B+ -Alias B-sig B- -ChargeConj B+sig B-sig -Alias B_s0sig B_s0 -Alias anti-B_s0sig anti-B_s0 -ChargeConj B_s0sig anti-B_s0sig -Alias B_c+sig B_c+ -Alias B_c-sig B_c- -ChargeConj B_c+sig B_c-sig -Alias eta_bsig eta_b -ChargeConj eta_bsig eta_bsig -Alias h_bsig h_b -ChargeConj h_bsig h_bsig -Alias Sigma_b-sig Sigma_b- -Alias anti-Sigma_b+sig anti-Sigma_b+ -ChargeConj Sigma_b-sig anti-Sigma_b+sig -Alias Lambda_b0sig Lambda_b0 -Alias anti-Lambda_b0sig anti-Lambda_b0 -ChargeConj Lambda_b0sig anti-Lambda_b0sig -Alias Omega_b-sig Omega_b- -Alias anti-Omega_b+sig anti-Omega_b+ -ChargeConj Omega_b-sig anti-Omega_b+sig -Alias Xi_b-sig Xi_b- -Alias anti-Xi_b+sig anti-Xi_b+ -ChargeConj Xi_b-sig anti-Xi_b+sig -Alias Xi_b0sig Xi_b0 -Alias anti-Xi_b0sig anti-Xi_b0 -ChargeConj Xi_b0sig anti-Xi_b0sig -Alias J/psisig J/psi -ChargeConj J/psisig J/psisig -Alias chi_c0sig chi_c0 -ChargeConj chi_c0sig chi_c0sig -Alias chi_c1sig chi_c1 -ChargeConj chi_c1sig chi_c1sig -Alias chi_c2sig chi_c2 -ChargeConj chi_c2sig chi_c2sig -Alias psi(2S)sig psi(2S) -ChargeConj psi(2S)sig psi(2S)sig -Alias psi(3770)sig psi(3770) -ChargeConj psi(3770)sig psi(3770)sig -Alias D*+sig D*+ -Alias D*-sig D*- -ChargeConj D*+sig D*-sig -Alias D0sig D0 -Alias anti-D0sig anti-D0 -ChargeConj D0sig anti-D0sig -Alias D+sig D+ -Alias D-sig D- -ChargeConj D+sig D-sig -Alias D_s+sig D_s+ -Alias D_s-sig D_s- -ChargeConj D_s+sig D_s-sig -Alias Lambda_c+sig Lambda_c+ -Alias anti-Lambda_c-sig anti-Lambda_c- -ChargeConj Lambda_c+sig anti-Lambda_c-sig -Alias tau+sig tau+ -Alias tau-sig tau- -ChargeConj tau+sig tau-sig -Alias Upsilonsig Upsilon -ChargeConj Upsilonsig Upsilonsig -Alias Upsilon(2S)sig Upsilon(2S) -ChargeConj Upsilon(2S)sig Upsilon(2S)sig -Alias Upsilon(3S)sig Upsilon(3S) -ChargeConj Upsilon(3S)sig Upsilon(3S)sig -Alias Upsilon(4S)sig Upsilon(4S) -ChargeConj Upsilon(4S)sig Upsilon(4S)sig -Alias Upsilon(5S)sig Upsilon(5S) -ChargeConj Upsilon(5S)sig Upsilon(5S)sig -Alias X_1(3872)sig X_1(3872) -ChargeConj X_1(3872)sig X_1(3872)sig -Alias h_csig h_c -ChargeConj h_csig h_csig -Alias Sigma+sig Sigma+ -Alias anti-Sigma-sig anti-Sigma- -ChargeConj Sigma+sig anti-Sigma-sig -Alias Lambda0sig Lambda0 -Alias anti-Lambda0sig anti-Lambda0 -ChargeConj Lambda0sig anti-Lambda0sig - -# -#JetSet parameter modifications -#(Very important that there are no blank spaces in the parameter string!) -#Turn of B0-B0B mixing in JetSet: -## PR : done in PythiaProduction -## JetSetPar MSTJ(26)=0 -# control of L=1 mesons (in order: J1S0 J0S1 J1S1 J2S1) - commented out by NB/WP -#JetSetPar PARJ(14)=0.05 -#JetSetPar PARJ(15)=0.05 -#JetSetPar PARJ(16)=0.05 -#JetSetPar PARJ(17)=0.05 -#cut-off parameter used to stop fragmentation process (should not be changed) -#####JetSetPar PARJ(33)=0.3 SET NOW IN GAUSS - -# PR LHCb 10/01/2006 -# Turn on PHOTOS for all decays -yesPhotos -# -# -#Decay vpho -#1.000 PYCONT; -#Enddecay -# -# use new VSS_BMIX mixing decay model (DK,28-Oct-1999) -Decay Upsilon(4S) -0.508200 B+ B- VSS; -0.490000 B0 anti-B0 VSS_BMIX dm; -0.000016 e+ e- PHOTOS VLL; -0.000016 mu+ mu- PHOTOS VLL; -0.000016 tau+ tau- PHOTOS VLL; -0.000090 Upsilon(2S) pi+ pi- VVPIPI; -0.000045 Upsilon(2S) pi0 pi0 VVPIPI; -0.000090 Upsilon pi+ pi- VVPIPI; -0.000045 Upsilon pi0 pi0 VVPIPI; -0.000200 Upsilon eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -# BF ~ (2J+1)E^3_gamma; see PRL 94, 032001 -# V-> gamma S Partial wave (L,S)=(0,0) - 0.000094 gamma chi_b0(3P) HELAMP 1. 0. 1. 0.; -# V-> gamma V Partial wave (L,S)=(0,1) -0.000141 gamma chi_b1(3P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -# V-> gamma T Partial wave (L,S)=(0,1) -0.000131 gamma chi_b2(3P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; -# V-> gamma S Partial wave (L,S)=(0,0) -0.000003 gamma chi_b0(2P) HELAMP 1. 0. 1. 0.; -# V-> gamma V Partial wave (L,S)=(0,1) -0.000008 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -# V-> gamma T Partial wave (L,S)=(0,1) -0.000012 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; -0.000850 g g g PYTHIA 4; -0.00004 gamma g g PYTHIA 4; -Enddecay -# -# -# -Decay anti-B0 -# Updated to PDG 2008 -# b -> c semileptonic -# -0.0516 D*+ e- anti-nu_e PHOTOS HQET 0.77 1.33 0.92; -0.0217 D+ e- anti-nu_e PHOTOS ISGW2; -0.0054 D_1+ e- anti-nu_e PHOTOS ISGW2; -0.0020 D_0*+ e- anti-nu_e PHOTOS ISGW2; -0.0050 D'_1+ e- anti-nu_e PHOTOS ISGW2; -0.0022 D_2*+ e- anti-nu_e PHOTOS ISGW2; -0.0003 D*+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0049 D*0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0010 D+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0000 D0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; - -0.0516 D*+ mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; -0.0217 D+ mu- anti-nu_mu PHOTOS ISGW2; -0.0054 D_1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0020 D_0*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0050 D'_1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0022 D_2*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0003 D*+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0049 D*0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0010 D+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0000 D0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -# -# b -> c tau nu -# -0.0160 D*+ tau- anti-nu_tau ISGW2; -0.0100 D+ tau- anti-nu_tau ISGW2; -0.0013 D_1+ tau- anti-nu_tau ISGW2; -0.0013 D_0*+ tau- anti-nu_tau ISGW2; -0.0020 D'_1+ tau- anti-nu_tau ISGW2; -0.0020 D_2*+ tau- anti-nu_tau ISGW2; -# -# b -> u l nu -# -# 03/28/01 S.Menke included inclusive B -> X_u l nu decays for m(X_u) > 1.26 GeV. -# with some thresholds to gradually switch from excl. to incl. -# modeling without big jumps keeping the better known excl. -# Brs at their actual values and constrain the incl. Br and -# weights in a way that ~40% of the total BR belongs to -# the mass region > 1.5 GeV -# October 20, 2004 - Lange - update using sl awg input -# March 30, 2005 J. Dingfelder: Updated B -> X_u l nu hybrid model -# (supersedes older version by S. Menke). Inclusive -# decays are reweighted in three kinematic -# variables mX, q2, and El (=> 512 weights total). -# The list of weights is included as ModelAlias -# once per B charge state. -# NOTE: - The specified parameters for model VUBHYBRID are: -# mb, a, alpha_s, nbins_mX, nbins_q2, nbins_El, -# list of threshold values for mX, q2, El in ascending order. -# -# *** DO NOT CHANGE ANY OF THESE PARAMETERS! *** -# Otherwise a new set of weights would be needed, since they were -# generated for a certain set of values for mb, a, excl. BFs, non-res BF. -# -# - If no binning (nbins or thresholds) are specified after the first -# three parameters (mb,a,alpha_s) no hybrid weighting is performed. - -# --- Hybrid weights for neutral B -> Xu l nu decays -# NOTE: Do NOT CHANGE any BFs without using the corresponding set of -# hybrid weights (and vice versa). - -0.000136 pi+ e- anti-nu_e PHOTOS ISGW2; -0.000247 rho+ e- anti-nu_e PHOTOS ISGW2; -0.000000 D(2S)+ e- anti-nu_e PHOTOS ISGW2; -0.000000 D*(2S)+ e- anti-nu_e PHOTOS ISGW2; -0.001892 Xu+ e- anti-nu_e PHOTOS VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; -# -0.000136 pi+ mu- anti-nu_mu PHOTOS ISGW2; -0.000247 rho+ mu- anti-nu_mu PHOTOS ISGW2; -0.000000 D(2S)+ mu- anti-nu_mu PHOTOS ISGW2; -0.000000 D*(2S)+ mu- anti-nu_mu PHOTOS ISGW2; -0.001892 Xu+ mu- anti-nu_mu PHOTOS VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; -# -0.000060 pi+ tau- anti-nu_tau ISGW2; -0.000083 rho+ tau- anti-nu_tau ISGW2; -0.000090 a_1+ tau- anti-nu_tau ISGW2; -0.000008 b_1+ tau- anti-nu_tau ISGW2; -0.000008 a_0+ tau- anti-nu_tau ISGW2; -0.000008 a_2+ tau- anti-nu_tau ISGW2; -0.000000 rho(2S)+ tau- anti-nu_tau ISGW2; -0.000000 D(2S)+ tau- anti-nu_tau ISGW2; -0.000000 D*(2S)+ tau- anti-nu_tau ISGW2; -# - -# -# b->u hadronic -# Ref. [B1]: -# Lange Nov 14, 2004 (flip D_s K -- is opposite of D_s pi) -0.0000153 D_s- pi+ PHSP; -0.000029 D_s+ K- PHSP; -0.000030 D_s*- pi+ SVS; -0.000022 D_s*+ K- SVS; -# -0.000016 rho+ D_s- SVS; -0.000016 K*- D_s+ SVS; -0.000016 D_s*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000016 D_s*+ K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - - -# -# b -> s gamma -# -0.0000401 anti-K*0 gamma HELAMP 1.0 0.0 1.0 0.0; -# PR LHCb add omega gamma -0.0000005 omega gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000135 anti-K_10 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000065 anti-K'_10 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000128 anti-K'*0 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000166 anti-K_2*0 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000017 anti-K''*0 gamma HELAMP 1.0 0.0 1.0 0.0; -0.0003118 anti-Xsd gamma BTOXSGAMMA 2 ; -# -0.0000006 anti-K0 e+ e- PHOTOS BTOSLLBALL; -0.0000018 anti-K*0 e+ e- PHOTOS BTOSLLBALL; -0.0000050 anti-Xsd e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.0000006 anti-K0 mu+ mu- PHOTOS BTOSLLBALL; -0.0000014 anti-K*0 mu+ mu- PHOTOS BTOSLLBALL; -0.0000025 anti-Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.0000001 anti-K0 tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 anti-K*0 tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 anti-Xsd tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -# -#------------------------------------------------------------------------------ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv -# B0 -> CP eigenstates (some exclusive b -> u) sum=0.00036 -# -0.0000051 pi+ pi- PHSP; -0.0000016 pi0 pi0 PHSP; -0.0000010 pi0 eta PHSP; -0.0000015 pi0 eta' PHSP; -0.000001 pi0 a_00 PHSP; -0.000001 pi0 f_0 PHSP; -# pi0 rho0 is with the 3-body modes -0.000001 omega pi0 SVS; -0.000001 a_10 pi0 SVS; -0.000001 b_10 pi0 SVS; -0.000001 eta eta PHSP; -0.000001 eta eta' PHSP; -0.000001 eta a_00 PHSP; -0.000001 eta f_0 PHSP; -0.000001 rho0 eta SVS; -0.000001 omega eta SVS; -0.000001 a_10 eta SVS; -0.000001 b_10 eta SVS; -0.000001 eta' eta' PHSP; -0.000001 eta' a_00 PHSP; -0.000001 eta' f_0 PHSP; -0.000001 rho0 eta' SVS; -0.000001 omega eta' SVS; -0.000001 a_10 eta' SVS; -0.000001 b_10 eta' SVS; -0.000001 a_00 a_00 PHSP; -0.000001 a_00 f_0 PHSP; -0.000001 rho0 a_00 SVS; -0.000001 omega a_00 SVS; -0.000001 a_10 a_00 SVS; -0.000001 b_10 a_00 SVS; -0.000001 f_0 f_0 PHSP; -0.000001 rho0 f_0 SVS; -0.000001 omega f_0 SVS; -0.000001 a_10 f_0 SVS; -0.000001 b_10 f_0 SVS; - -# Penguin dominated modes are sin2beta, not sin2alpha -0.0000043 phi K_S0 SVS; -0.0000043 phi K_L0 SVS; -0.000001 eta K_S0 PHSP; -0.000001 eta K_L0 PHSP; -0.0000325 eta' K_S0 PHSP; -0.0000325 eta' K_L0 PHSP; -0.0000025 omega K_S0 SVS; -0.0000025 omega K_L0 SVS; -#don't allow jetset to simulate the same decay but to a K0 or anti-K0 -#Lange 1/30/2003 -0.0 phi K0 PHSP; -0.0 phi anti-K0 PHSP; -0.0 eta K0 PHSP; -0.0 eta anti-K0 PHSP; -0.0 eta' K0 PHSP; -0.0 eta' anti-K0 PHSP; -0.0 omega K0 PHSP; -0.0 omega anti-K0 PHSP; -# phipi0 has no simple Pengiun or tree so who knows - ditto phieta/eta'? -0.000001 phi pi0 SVS; -0.000001 phi eta SVS; -0.000001 phi eta' SVS; -# -0.0000159 anti-K*0 eta SVS; -0.0000038 anti-K*0 eta' SVS; -0.000001 anti-K*0 omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 phi omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 omega omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 omega rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -# -# -#2-body modes from Jim Olsen -0.0000194 K- pi+ PHSP; -0.0000004 K+ K- PHSP; -# K_S0 K_L0 is 0 -# see http://babar-hn.slac.stanford.edu:5090/HyperNews/get/pubboard14/156.html -0.0000005 K_S0 K_S0 PHSP; -0.0000000 K_S0 K_L0 PHSP; -0.0000005 K_L0 K_L0 PHSP; -# declare K0 pi0 not to have it through Pythia -0.000000 anti-K0 pi0 PHSP; -# Split into K_S0 K_L0 (LHCb - P. Robbe) -0.0000049 K_S0 pi0 PHSP; -0.0000049 K_L0 pi0 PHSP; -# 0 to keep PYTHIA from generating it -0.000000 K0 anti-K0 PHSP; -# -# 3-body decays -# this model generates interferences and higher mass rho -# -# 3-body by John Back (jback@slac.stanford.edu) - Oct 15, 2002 -# JGS intersperses modes with pi0->eta,eta' -# anti-B0 modes -# Model generates rho(770), rho(1450) and rho(1700) resonances -# with interference (uses CKM angle alpha) -0.000024 pi- pi+ pi0 BTO3PI_CP dm alpha; -# Put in with 0 BR to keep PYTHIA from generating these (see BTO3PI_CP above) -0.000000 rho0 pi0 SVS; -0.000000 rho- pi+ SVS; -0.000000 rho+ pi- SVS; -0.000000 rho(2S)- pi+ SVS; -0.000000 rho(2S)+ pi- SVS; -0.000000 rho(3S)- pi+ SVS; -0.000000 rho(3S)+ pi- SVS; -# -# rho0 3-body modes -0.0000027 rho0 K_S0 SVS; -0.0000027 rho0 K_L0 SVS; -# -# rho+ 3-body modes -0.0000085 rho+ K- SVS; -# -# rho(1450) 3-body modes -0.0000005 rho(2S)0 K_S0 SVS; -0.0000005 rho(2S)0 K_L0 SVS; -# -# -# f0,a0(980) 3-body modes -0.0000055 f_0 anti-K0 PHSP; -0.000001 a_00 anti-K0 PHSP; -0.000001 a_0+ K- PHSP; -0.000003 a_0+ pi- PHSP; -0.000001 a_0- pi+ PHSP; -# -# K*0(892) 3-body modes -0.0000017 anti-K*0 pi0 SVS; -0.000003 anti-K*0 K0 SVS; -# -# K*0(1430) 3-body modes -0.000001 anti-K_0*0 pi0 PHSP; -0.000003 anti-K_0*0 K0 PHSP; -# -# K*0(1680) 3-body modes -0.000001 anti-K''*0 pi0 SVS; -0.000001 anti-K''*0 K0 SVS; - -# -# K*-(892) 3-body modes -0.0000098 K*- pi+ SVS; -0.000002 K*- K+ SVS; -# -# K*-(1430) 3-body modes -0.00005 K_0*- pi+ PHSP; -0.000002 K_0*- K+ PHSP; -# -# K*0(1680) 3-body modes -0.000001 K''*- pi+ SVS; -0.000001 K''*- K+ SVS; -# -# -# Non-resonant 3-body left-overs -# Most modes are set at 1e-6 -# -# pi-pi+pi0: high mass + f0(400-1200) = (1+1)e-6 -####0402270.000002 pi- pi+ pi0 PHSP; -0.000017 pi- pi+ eta PHSP; -0.000001 pi- pi+ eta' PHSP; -# -# pi- pi+ anti-K0: total-rhoK0-f0K0-piK*(892)-piK*(1430)=45-5-6-13./3-11./3 -0.0000199 pi- pi+ anti-K0 PHSP; -# -# K- pi+ pi0 -0.000002 K- pi+ pi0 PHSP; -0.000020 K- pi+ eta PHSP; -0.000001 K- pi+ eta' PHSP; -# -# pi- K+ K0. -# Both B0 and B0bar can decay to these => 0.5e-6 each -0.0000005 pi- K+ anti-K0 PHSP; -0.0000005 pi+ K- K0 PHSP; -# -# K- K+ anti-K0 -# PR LHCb 09 Apr 2004 split into KL/KS -0.000000 K- K+ anti-K0 PHSP; -0.0000081 K- K+ K_S0 PHSP; -0.0000081 K- K+ K_L0 PHSP; -# -# K- K+ pi0 -0.000001 K- K+ pi0 PHSP; -0.000001 K- K+ eta PHSP; -0.000001 K- K+ eta' PHSP; -# -# pi0 anti-K0 K0 -0.000002 anti-K0 K0 pi0 PHSP; -0.000001 anti-K0 K0 eta PHSP; -0.000001 anti-K0 K0 eta' PHSP; -# -# pi0 pi0 anti-K0 -0.000002 anti-K0 pi0 pi0 PHSP; -0.000001 anti-K0 pi0 eta PHSP; -0.000001 anti-K0 pi0 eta' PHSP; -0.000001 anti-K0 eta eta PHSP; -0.000001 anti-K0 eta eta' PHSP; -0.000001 anti-K0 eta' eta' PHSP; -# -# anti-K0 K0 anti-K0: 8*BF(KsKsKs)~=48 (8 is a guess) -0.000048 anti-K0 K0 anti-K0 PHSP; -# -# pi0 pi0 pi0 -0.000001 pi0 pi0 pi0 PHSP; -0.000001 pi0 pi0 eta PHSP; -0.000001 pi0 pi0 eta' PHSP; -0.000001 pi0 eta eta PHSP; -0.000001 pi0 eta eta' PHSP; -# -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#--------------------------------------------------------------------------- -# -#4-body modes from Andrei Gritsan -#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- -# PR LHCb 21 Apr 2004 : set polarisation to longitudinal -0.0000011 rho0 rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; -0.0000242 rho+ rho- SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; -0.000003 rho0 pi+ pi- PHSP; -0.000003 omega pi+ pi- PHSP; -0.000001 rho0 pi0 pi0 PHSP; -0.000001 omega pi0 pi0 PHSP; -0.0000005 rho0 pi0 eta PHSP; -0.0000002 rho0 eta eta PHSP; -0.0000002 rho0 pi0 eta' PHSP; -0.0000001 rho0 eta eta' PHSP; -0.0000005 omega pi0 eta PHSP; -0.0000002 omega eta eta PHSP; -0.0000002 omega pi0 eta' PHSP; -0.0000001 omega eta eta' PHSP; -0.000010 rho+ pi- pi0 PHSP; -0.000005 rho+ pi- eta PHSP; -0.000010 rho- pi+ pi0 PHSP; -0.000005 rho- pi+ eta PHSP; -0.000010 pi+ pi- pi+ pi- PHSP; -0.000010 pi+ pi- pi0 pi0 PHSP; -0.000005 pi+ pi- eta pi0 PHSP; -0.000002 pi+ pi- eta eta PHSP; -0.000002 pi+ pi- eta' pi0 PHSP; -0.000001 pi+ pi- eta' eta PHSP; -0.0000165 a_1+ pi- SVS; -0.0000165 a_1- pi+ SVS; -0.0000055 b_1+ pi- SVS; -0.0000055 b_1- pi+ SVS; -0.000002 rho- a_0+ SVS; -0.000010 rho+ a_0- SVS; -0.000001 f_0 pi+ pi- PHSP; -0.000001 f_0 pi0 pi0 PHSP; -0.000001 a_0- pi+ pi0 PHSP; -0.000001 a_00 pi0 pi0 PHSP; -0.000001 a_0+ pi- pi0 PHSP; -#--- 4-body rho-K*, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- -0.0000056 rho0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000010 rho+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000484 pi- pi+ anti-K*0 PHSP; -0.000010 pi+ pi0 K*- PHSP; -0.000005 pi+ eta K*- PHSP; -0.000002 pi+ eta' K*- PHSP; -0.000010 rho+ K- pi0 PHSP; -0.000005 rho+ K- eta PHSP; -0.000002 rho+ K- eta' PHSP; -0.000010 rho+ anti-K0 pi- PHSP; -0.000010 rho- anti-K0 pi+ PHSP; -0.000005 rho0 anti-K0 pi0 PHSP; -0.000002 rho0 anti-K0 eta PHSP; -0.000001 rho0 anti-K0 eta' PHSP; -0.000010 rho0 K- pi+ PHSP; -0.000005 omega anti-K0 pi0 PHSP; -0.000002 omega anti-K0 eta PHSP; -0.000001 omega anti-K0 eta' PHSP; -0.000005 omega K- pi+ PHSP; -0.000010 pi+ pi0 pi- anti-K0 PHSP; -0.000005 pi+ eta pi- anti-K0 PHSP; -0.000010 pi0 pi0 pi0 anti-K0 PHSP; -0.000005 pi0 pi0 eta anti-K0 PHSP; -0.000002 pi0 eta eta anti-K0 PHSP; -0.000002 pi0 pi0 eta' anti-K0 PHSP; -0.000001 pi0 eta eta' anti-K0 PHSP; -0.000010 pi+ pi- pi+ K- PHSP; -0.000010 pi0 pi0 pi+ K- PHSP; -0.000005 pi0 eta pi+ K- PHSP; -0.000002 eta eta pi+ K- PHSP; -0.000002 pi0 eta' pi+ K- PHSP; -0.000001 eta eta' pi+ K- PHSP; -0.000010 rho0 anti-K_0*0 PHSP; -0.000020 rho+ K_0*- PHSP; -0.000010 pi- pi+ anti-K_0*0 PHSP; -0.000010 pi0 pi0 anti-K_0*0 PHSP; -0.000010 pi+ pi0 K_0*- PHSP; -0.000005 anti-K*0 f_0 SVS; -0.000010 a_10 anti-K0 SVS; -0.000016 a_1+ K- SVS; -0.000010 b_10 anti-K0 SVS; -0.0000074 b_1+ K- SVS; -0.000005 anti-K*0 a_00 SVS; -0.000005 K*- a_0+ SVS; -#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ -0.0000013 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 K*+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000001 phi rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000001 phi pi- pi+ PHSP; -0.000001 K+ K- rho0 PHSP; -0.000001 K0 anti-K0 rho0 PHSP; -0.000001 K+ K- omega PHSP; -0.000001 K0 anti-K0 omega PHSP; -0.000001 K+ anti-K0 rho- PHSP; -0.000001 K- K0 rho+ PHSP; -0.000001 K+ K- pi- pi+ PHSP; -0.000001 K+ K- pi0 pi0 PHSP; -0.0000005 K+ K- pi0 eta PHSP; -0.0000002 K+ K- eta eta PHSP; -0.0000002 K+ K- pi0 eta' PHSP; -0.0000001 K+ K- eta eta' PHSP; -0.000001 K0 anti-K0 pi- pi+ PHSP; -0.000001 K0 anti-K0 pi0 pi0 PHSP; -0.0000005 K0 anti-K0 pi0 eta PHSP; -0.0000002 K0 anti-K0 eta eta PHSP; -0.0000002 K0 anti-K0 pi0 eta' PHSP; -0.0000001 K0 anti-K0 eta eta' PHSP; -0.000001 K*+ K- pi0 PHSP; -0.000001 K*- K+ pi0 PHSP; -0.000001 K*0 anti-K0 pi0 PHSP; -0.000001 K0 anti-K*0 pi0 PHSP; -0.000001 K+ anti-K*0 pi- PHSP; -0.000001 K*+ anti-K0 pi- PHSP; -0.0000033 K- K*0 pi+ PHSP; -0.000001 K*- K0 pi+ PHSP; -#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- -0.0000095 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000010 phi K- pi+ PHSP; -0.000010 phi anti-K0 pi0 PHSP; -0.000007 phi anti-K0 eta PHSP; -0.000018 K- K+ anti-K*0 PHSP; -0.000010 K- K*+ anti-K0 PHSP; -0.000010 K*- K+ anti-K0 PHSP; -0.000010 K+ K- K- pi+ PHSP; -0.000010 K+ K- anti-K0 pi0 PHSP; -0.000005 K+ K- anti-K0 eta PHSP; -0.000010 K0 anti-K0 anti-K0 pi0 PHSP; -0.000005 K0 anti-K0 anti-K0 eta PHSP; -0.000010 phi anti-K_0*0 PHSP; -0.000010 K- K+ anti-K_0*0 PHSP; -0.000010 K- K_0*+ anti-K0 PHSP; -0.000010 K_0*- K+ anti-K0 PHSP; -0.000002 phi anti-K'_10 PHSP; -0.000002 K- K+ anti-K'_10 PHSP; -#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- -0.0000001 phi phi SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000001 phi K+ K- PHSP; -0.0000001 phi K0 anti-K0 PHSP; -0.0000001 K+ K- K+ K- PHSP; -0.0000001 K0 anti-K0 K+ K- PHSP; -0.0000001 K0 anti-K0 K0 anti-K0 PHSP; -#5-body modes from Jim Smith - 1/30/05 -#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- -0.000010 rho0 rho0 pi0 PHSP; -0.000005 rho0 rho0 eta PHSP; -0.000002 rho0 rho0 eta' PHSP; -0.000010 omega rho0 pi0 PHSP; -0.000005 omega rho0 eta PHSP; -0.000002 omega rho0 eta' PHSP; -0.000010 rho+ rho- pi0 PHSP; -0.000005 rho+ rho- eta PHSP; -0.000002 rho+ rho- eta' PHSP; -0.000010 rho0 rho+ pi- PHSP; -0.000010 omega rho+ pi- PHSP; -0.000002 rho0 pi+ pi- pi0 PHSP; -0.000001 rho0 pi+ pi- eta PHSP; -0.000001 rho0 pi+ pi- eta' PHSP; -0.000002 rho0 pi0 pi0 pi0 PHSP; -0.000001 rho0 pi0 eta pi0 PHSP; -0.000001 rho0 pi0 eta' pi0 PHSP; -0.000002 omega pi+ pi- pi0 PHSP; -0.000001 omega pi+ pi- eta PHSP; -0.000001 omega pi+ pi- eta' PHSP; -0.000002 omega pi0 pi0 pi0 PHSP; -0.000001 omega pi0 eta pi0 PHSP; -0.000001 omega pi0 eta' pi0 PHSP; -0.000002 rho+ pi- pi+ pi- PHSP; -0.000002 rho+ pi- pi0 pi0 PHSP; -0.000001 rho+ pi- pi0 eta PHSP; -0.000001 rho+ pi- pi0 eta' PHSP; -0.000002 rho- pi+ pi+ pi- PHSP; -0.000002 rho- pi+ pi0 pi0 PHSP; -0.000001 rho- pi+ pi0 eta PHSP; -0.000001 rho- pi+ pi0 eta' PHSP; -0.000001 pi+ pi- pi+ pi- pi0 PHSP; -0.0000005 pi+ pi- pi+ pi- eta PHSP; -0.0000002 pi+ pi- pi+ pi- eta' PHSP; -0.000001 pi+ pi- pi0 pi0 pi0 PHSP; -0.0000005 pi+ pi- pi0 pi0 eta PHSP; -0.0000002 pi+ pi- pi0 pi0 eta' PHSP; -0.0000005 pi0 pi0 pi0 pi0 pi0 PHSP; -0.0000002 pi0 pi0 pi0 pi0 eta PHSP; -0.0000001 pi0 pi0 pi0 pi0 eta' PHSP; -0.000010 a_1+ rho- PHSP; -0.000010 a_1- rho+ PHSP; -0.000010 a_10 rho0 PHSP; -0.000010 a_10 omega PHSP; -0.000010 a_1+ pi- pi0 PHSP; -0.000005 a_1+ pi- eta PHSP; -0.000002 a_1+ pi- eta' PHSP; -0.000010 a_10 pi+ pi- PHSP; -0.000010 a_10 pi0 pi0 PHSP; -0.000005 a_10 pi0 eta PHSP; -0.000002 a_10 pi0 eta' PHSP; -0.000010 a_1- pi+ pi0 PHSP; -0.000005 a_1- pi+ eta PHSP; -0.000002 a_1- pi+ eta' PHSP; -0.000010 rho+ f_0 pi- PHSP; -0.000010 rho- f_0 pi+ PHSP; -0.000010 rho0 f_0 pi0 PHSP; -0.000005 rho0 f_0 eta PHSP; -0.000002 rho0 f_0 eta' PHSP; -0.000010 omega f_0 pi0 PHSP; -0.000010 rho+ a_00 pi- PHSP; -0.000010 rho+ a_0- pi0 PHSP; -0.000005 rho+ a_0- eta PHSP; -0.000002 rho+ a_0- eta' PHSP; -0.000010 rho0 a_0+ pi- PHSP; -0.000010 rho0 a_0- pi+ PHSP; -0.000010 rho0 a_00 pi0 PHSP; -0.000005 rho0 a_00 eta PHSP; -0.000002 rho0 a_00 eta' PHSP; -0.000010 rho- a_00 pi+ PHSP; -0.000010 rho- a_0+ pi0 PHSP; -0.000005 rho- a_0+ eta PHSP; -0.000002 rho- a_0+ eta' PHSP; -0.000002 f_0 pi+ pi- pi0 PHSP; -0.000001 f_0 pi+ pi- eta PHSP; -0.000001 f_0 pi+ pi- eta' PHSP; -0.000002 f_0 pi0 pi0 pi0 PHSP; -0.000001 f_0 pi0 pi0 eta PHSP; -0.000001 f_0 pi0 pi0 eta' PHSP; -0.000001 a_00 pi+ pi- pi0 PHSP; -0.000001 a_00 pi0 pi0 pi0 PHSP; -0.000001 a_0+ pi- pi+ pi- PHSP; -0.000001 a_0+ pi- pi0 pi0 PHSP; -0.000001 a_0- pi+ pi+ pi- PHSP; -0.000001 a_0- pi+ pi0 pi0 PHSP; -#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- -0.000010 rho0 K*- pi+ PHSP; -0.000010 rho+ K*- pi0 PHSP; -0.000005 rho+ K*- eta PHSP; -0.000002 rho+ K*- eta' PHSP; -0.000010 rho0 anti-K*0 pi0 PHSP; -0.000005 rho0 anti-K*0 eta PHSP; -0.000002 rho0 anti-K*0 eta' PHSP; -0.000010 rho- anti-K*0 pi+ PHSP; -0.000010 rho+ anti-K*0 pi- PHSP; -0.000010 omega K*- pi+ PHSP; -0.000010 omega anti-K*0 pi0 PHSP; -0.000005 omega anti-K*0 eta PHSP; -0.000002 omega anti-K*0 eta' PHSP; -0.000010 pi+ pi- K*- pi+ PHSP; -0.000010 pi+ pi0 K*- pi0 PHSP; -0.000005 pi+ pi0 K*- eta PHSP; -0.000002 pi+ pi0 K*- eta' PHSP; -0.000010 pi+ pi- anti-K*0 pi0 PHSP; -0.000005 pi+ pi- anti-K*0 eta PHSP; -0.000002 pi+ pi- anti-K*0 eta' PHSP; -0.000010 pi0 pi0 anti-K*0 pi0 PHSP; -0.000005 pi0 pi0 anti-K*0 eta PHSP; -0.000002 pi0 pi0 anti-K*0 eta' PHSP; -0.000010 rho- K- pi+ pi+ PHSP; -0.000010 rho0 K- pi+ pi0 PHSP; -0.000005 rho0 K- pi+ eta PHSP; -0.000002 rho0 K- pi+ eta' PHSP; -0.000010 rho+ K- pi+ pi- PHSP; -0.000010 rho+ K- pi0 pi0 PHSP; -0.000005 rho+ K- pi0 eta PHSP; -0.000002 rho+ K- pi0 eta' PHSP; - -0.000010 rho0 anti-K0 pi+ pi- PHSP; -0.000010 rho0 anti-K0 pi0 pi0 PHSP; -0.000005 rho0 anti-K0 pi0 eta PHSP; -0.000002 rho0 anti-K0 pi0 eta' PHSP; -0.000010 rho- anti-K0 pi+ pi0 PHSP; -0.000005 rho- anti-K0 pi+ eta PHSP; -0.000002 rho- anti-K0 pi+ eta' PHSP; -0.000010 rho+ anti-K0 pi- pi0 PHSP; -0.000005 rho+ anti-K0 pi- eta PHSP; -0.000002 rho+ anti-K0 pi- eta' PHSP; -0.000010 omega K- pi+ pi0 PHSP; -0.000005 omega K- pi+ eta PHSP; -0.000002 omega K- pi+ eta' PHSP; -0.000010 omega anti-K0 pi+ pi- PHSP; -0.000010 omega anti-K0 pi0 pi0 PHSP; -0.000005 omega anti-K0 pi0 eta PHSP; -0.000002 omega anti-K0 pi0 eta' PHSP; -0.000002 pi+ pi- pi+ K- pi0 PHSP; -0.000001 pi+ pi- pi+ K- eta PHSP; -0.000001 pi+ pi- pi+ K- eta' PHSP; -0.000002 pi0 pi0 pi+ K- pi0 PHSP; -0.000001 pi0 pi0 pi+ K- eta PHSP; -0.000001 pi0 pi0 pi+ K- eta' PHSP; -0.000002 pi+ pi- pi+ anti-K0 pi- PHSP; -0.000002 pi+ pi- pi0 anti-K0 pi0 PHSP; -0.000001 pi+ pi- pi0 anti-K0 eta PHSP; -0.000001 pi+ pi- pi0 anti-K0 eta' PHSP; -0.000002 pi0 pi0 pi0 anti-K0 pi0 PHSP; -0.000001 pi0 pi0 pi0 anti-K0 eta PHSP; -0.000001 pi0 pi0 pi0 anti-K0 eta' PHSP; -0.000010 rho+ anti-K_0*0 pi- PHSP; -0.000010 rho0 anti-K_0*0 pi0 PHSP; -0.000005 rho0 anti-K_0*0 eta PHSP; -0.000002 rho0 anti-K_0*0 eta' PHSP; -0.000010 rho- anti-K_0*0 pi+ PHSP; -0.000010 rho+ K_0*- pi0 PHSP; -0.000005 rho+ K_0*- eta PHSP; -0.000002 rho+ K_0*- eta' PHSP; -0.000010 rho0 K_0*- pi+ PHSP; -0.000010 pi+ pi- K_0*- pi+ PHSP; -0.000010 pi+ pi0 K_0*- pi0 PHSP; -0.000005 pi+ pi0 K_0*- eta PHSP; -0.000002 pi+ pi0 K_0*- eta' PHSP; -0.000010 pi+ pi- anti-K_0*0 pi0 PHSP; -0.000005 pi+ pi- anti-K_0*0 eta PHSP; -0.000002 pi+ pi- anti-K_0*0 eta' PHSP; -0.000010 pi0 pi0 anti-K_0*0 pi0 PHSP; -0.000005 pi0 pi0 anti-K_0*0 eta PHSP; -0.000005 pi0 pi0 anti-K_0*0 eta' PHSP; -0.000010 K*- f_0 pi+ PHSP; -0.000010 anti-K*0 f_0 pi0 PHSP; -0.000005 anti-K*0 f_0 eta PHSP; -0.000002 anti-K*0 f_0 eta' PHSP; -0.000010 a_1+ anti-K0 pi- PHSP; -0.000020 a_10 anti-K*0 PHSP; -0.000010 a_10 K- pi+ PHSP; -0.000010 a_10 anti-K0 pi0 PHSP; -0.000020 a_1+ K*- PHSP; -0.000010 a_1+ K- pi0 PHSP; -0.000010 a_1- anti-K0 pi+ PHSP; -0.000005 K*- a_00 pi+ PHSP; -0.000005 K*- a_0+ pi0 PHSP; -0.000002 K*- a_0+ eta PHSP; -0.000001 K*- a_0+ eta' PHSP; -0.000005 anti-K*0 a_0+ pi- PHSP; -0.000005 anti-K*0 a_00 pi0 PHSP; -0.000002 anti-K*0 a_00 eta PHSP; -0.000001 anti-K*0 a_00 eta' PHSP; -#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ -0.000001 K*- K*0 pi+ PHSP; -0.000001 K*+ anti-K*0 pi- PHSP; -0.000001 K*- K*+ pi0 PHSP; -0.0000005 K*- K*+ eta PHSP; -0.0000002 K*- K*+ eta' PHSP; -0.000001 K*0 anti-K*0 pi0 PHSP; -0.0000005 K*0 anti-K*0 eta PHSP; -0.0000002 K*0 anti-K*0 eta' PHSP; -0.000001 phi rho+ pi- PHSP; -0.000001 phi rho- pi+ PHSP; -0.000001 phi rho0 pi0 PHSP; -0.0000005 phi rho0 eta PHSP; -0.0000002 phi rho0 eta' PHSP; -0.000001 phi omega pi0 PHSP; -0.000001 phi f_0 pi0 PHSP; -0.000001 phi pi+ pi- pi0 PHSP; -0.0000005 phi pi+ pi- eta PHSP; -0.0000002 phi pi+ pi- eta' PHSP; -0.000001 phi pi0 pi0 pi0 PHSP; -0.0000005 phi pi0 pi0 eta PHSP; -0.0000002 phi pi0 pi0 eta' PHSP; -0.000001 K0 K- rho0 pi+ PHSP; -0.000001 K0 K- rho+ pi0 PHSP; -0.0000005 K0 K- rho+ eta PHSP; -0.0000002 K0 K- rho+ eta' PHSP; -0.000001 K0 K- omega pi+ PHSP; -0.000001 K0 K- f_0 pi+ PHSP; -0.000001 K+ K- rho+ pi- PHSP; -0.000001 K+ K- rho- pi+ PHSP; -0.000001 K+ K- rho0 pi0 PHSP; -0.0000005 K+ K- rho0 eta PHSP; -0.0000002 K+ K- rho0 eta' PHSP; -0.000001 K+ K- omega pi0 PHSP; -0.0000005 K+ K- omega eta PHSP; -0.0000002 K+ K- omega eta' PHSP; -0.000001 K+ K- f_0 pi0 PHSP; -0.000001 K0 anti-K0 rho+ pi- PHSP; -0.000001 K0 anti-K0 rho- pi+ PHSP; -0.000001 K0 anti-K0 rho0 pi0 PHSP; -0.0000005 K0 anti-K0 rho0 eta PHSP; -0.0000002 K0 anti-K0 rho0 eta' PHSP; -0.000001 K0 anti-K0 omega pi0 PHSP; -0.000001 K0 anti-K0 f_0 pi0 PHSP; -0.000001 anti-K0 K+ rho0 pi- PHSP; -0.000001 anti-K0 K+ rho- pi0 PHSP; -0.0000005 anti-K0 K+ rho- eta PHSP; -0.0000002 anti-K0 K+ rho- eta' PHSP; -0.000001 anti-K0 K+ omega pi- PHSP; -0.000001 anti-K0 K+ f_0 pi- PHSP; -0.0000002 K0 K- pi+ pi+ pi- PHSP; -0.0000002 K0 K- pi+ pi0 pi0 PHSP; -0.0000001 K0 K- pi+ pi0 eta PHSP; -0.0000001 K0 K- pi+ pi0 eta' PHSP; -0.0000002 K+ K- pi+ pi- pi0 PHSP; -0.0000001 K+ K- pi+ pi- eta PHSP; -0.0000001 K+ K- pi+ pi- eta' PHSP; -0.0000002 K+ K- pi0 pi0 pi0 PHSP; -0.0000001 K+ K- pi0 pi0 eta PHSP; -0.0000001 K+ K- pi0 pi0 eta' PHSP; -0.0000002 K0 anti-K0 pi+ pi- pi0 PHSP; -0.0000001 K0 anti-K0 pi+ pi- eta PHSP; -0.0000001 K0 anti-K0 pi+ pi- eta' PHSP; -0.0000002 K0 anti-K0 pi0 pi0 pi0 PHSP; -0.0000001 K0 anti-K0 pi0 pi0 eta PHSP; -0.0000001 K0 anti-K0 pi0 pi0 eta' PHSP; -0.0000002 anti-K0 K+ pi- pi+ pi- PHSP; -0.0000002 anti-K0 K+ pi- pi0 pi0 PHSP; -0.0000001 anti-K0 K+ pi- pi0 eta PHSP; -0.0000001 anti-K0 K+ pi- pi0 eta' PHSP; -0.000001 K*0 K- pi+ pi0 PHSP; -0.0000005 K*0 K- pi+ eta PHSP; -0.0000002 K*0 K- pi+ eta' PHSP; -0.000001 K*- K0 pi+ pi0 PHSP; -0.0000005 K*- K0 pi+ eta PHSP; -0.0000002 K*- K0 pi+ eta' PHSP; -0.000001 K*+ K- pi+ pi- PHSP; -0.000001 K*+ K- pi0 pi0 PHSP; -0.0000005 K*+ K- pi0 eta PHSP; -0.0000002 K*+ K- pi0 eta' PHSP; -0.000001 K*- K+ pi+ pi- PHSP; -0.000001 K*- K+ pi0 pi0 PHSP; -0.0000005 K*- K+ pi0 eta PHSP; -0.0000002 K*- K+ pi0 eta' PHSP; -0.000001 K*0 anti-K0 pi+ pi- PHSP; -0.000001 K*0 anti-K0 pi0 pi0 PHSP; -0.0000005 K*0 anti-K0 pi0 eta PHSP; -0.0000002 K*0 anti-K0 pi0 eta' PHSP; -0.000001 K0 anti-K*0 pi+ pi- PHSP; -0.000001 K0 anti-K*0 pi0 pi0 PHSP; -0.0000005 K0 anti-K*0 pi0 eta PHSP; -0.0000002 K0 anti-K*0 pi0 eta' PHSP; -0.000001 K+ anti-K*0 pi- pi0 PHSP; -0.0000005 K+ anti-K*0 pi- eta PHSP; -0.0000002 K+ anti-K*0 pi- eta' PHSP; -0.000001 K*+ anti-K0 pi- pi0 PHSP; -0.0000005 K*+ anti-K0 pi- eta PHSP; -0.0000002 K*+ anti-K0 pi- eta' PHSP; -#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- -0.000010 phi K*- pi+ PHSP; -0.000010 phi anti-K*0 pi0 PHSP; -0.000005 phi anti-K*0 eta PHSP; -0.000002 phi anti-K*0 eta' PHSP; -0.000010 phi K- rho+ PHSP; -0.000010 phi anti-K0 rho0 PHSP; -0.000010 phi anti-K0 omega PHSP; -0.000010 phi anti-K0 f_0 PHSP; -0.000010 phi anti-K0 pi+ pi- PHSP; -0.000010 phi anti-K0 pi0 pi0 PHSP; -0.000005 phi anti-K0 pi0 eta PHSP; -0.000002 phi anti-K0 pi0 eta' PHSP; -0.000010 phi K- pi+ pi0 PHSP; -0.000005 phi K- pi+ eta PHSP; -0.000002 phi K- pi+ eta' PHSP; -0.000010 K+ K- K*- pi+ PHSP; -0.000010 K- K*+ K- pi+ PHSP; -0.000010 K- K*0 anti-K0 pi+ PHSP; -0.000010 K- K0 anti-K*0 pi+ PHSP; -0.000010 K0 K*- anti-K0 pi+ PHSP; -0.000010 K- K+ K- rho+ PHSP; -0.000010 K- K+ anti-K0 rho0 PHSP; -0.000010 K- K+ anti-K0 omega PHSP; -0.000010 K- K+ anti-K0 f_0 PHSP; -0.000010 K+ K- K- pi+ pi0 PHSP; -0.000005 K+ K- K- pi+ eta PHSP; -0.000002 K+ K- K- pi+ eta' PHSP; -0.000010 K+ K- anti-K0 pi+ pi- PHSP; -0.000010 K+ K- anti-K0 pi0 pi0 PHSP; -0.000005 K+ K- anti-K0 pi0 eta PHSP; -0.000005 K+ K- anti-K0 pi0 eta' PHSP; -0.000010 K0 anti-K0 K- pi+ pi0 PHSP; -0.000005 K0 anti-K0 K- pi+ eta PHSP; -0.000002 K0 anti-K0 K- pi+ eta' PHSP; -0.000010 K0 anti-K0 anti-K0 pi+ pi- PHSP; -0.000010 K0 anti-K0 anti-K0 pi0 pi0 PHSP; -0.000005 K0 anti-K0 anti-K0 pi0 eta PHSP; -0.000002 K0 anti-K0 anti-K0 pi0 eta' PHSP; -0.000010 phi K_0*- pi+ PHSP; -0.000010 phi anti-K_0*0 pi0 PHSP; -0.000010 K+ K- K_0*- pi+ PHSP; -0.000010 K+ K- anti-K_0*0 pi0 PHSP; -0.000005 K+ K- anti-K_0*0 eta PHSP; -0.000002 K+ K- anti-K_0*0 eta' PHSP; -0.000010 K- K- K_0*+ pi+ PHSP; -0.000010 K- anti-K_0*0 K0 pi+ PHSP; -0.000010 K- K_0*0 anti-K0 pi+ PHSP; -0.000010 K0 anti-K0 K_0*- pi+ PHSP; -0.000010 K0 anti-K0 anti-K_0*0 pi0 PHSP; -0.000005 K0 anti-K0 anti-K_0*0 eta PHSP; -0.000002 K0 anti-K0 anti-K_0*0 eta' PHSP; -0.000010 anti-K0 anti-K0 K_0*0 pi0 PHSP; -0.000005 anti-K0 anti-K0 K_0*0 eta PHSP; -0.000002 anti-K0 anti-K0 K_0*0 eta' PHSP; -0.000002 phi K'_1- pi+ PHSP; -0.000002 phi anti-K'_10 pi0 PHSP; -0.000001 phi anti-K'_10 eta PHSP; -0.000001 phi anti-K'_10 eta' PHSP; -0.000002 K- K+ K'_1- pi+ PHSP; -0.000002 K- K+ anti-K'_10 pi0 PHSP; -0.000001 K- K+ anti-K'_10 eta PHSP; -0.000001 K- K+ anti-K'_10 eta' PHSP; -0.000002 K- K- K'_1+ pi+ PHSP; -0.000002 K0 anti-K0 anti-K'_10 pi0 PHSP; -0.000001 K0 anti-K0 anti-K'_10 eta PHSP; -0.000001 K0 anti-K0 anti-K'_10 eta' PHSP; -0.000002 anti-K0 anti-K0 K'_10 pi0 PHSP; -0.000001 anti-K0 anti-K0 K'_10 eta PHSP; -0.000001 anti-K0 anti-K0 K'_10 eta' PHSP; -#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ -0.000003 phi phi anti-K0 PHSP; -0.0000001 phi phi pi0 PHSP; -0.000001 phi K+ K- anti-K0 PHSP; -0.000001 phi K0 anti-K0 anti-K0 PHSP; -0.0000001 phi K+ K- pi0 PHSP; -0.0000001 phi K0 anti-K0 pi0 PHSP; -0.0000001 phi anti-K0 K+ pi- PHSP; -0.0000001 phi K0 K- pi+ PHSP; -0.0000001 K+ K- K+ K- anti-K0 PHSP; -0.0000001 K0 anti-K0 K+ K- anti-K0 PHSP; -0.0000001 K+ K- K+ K- pi0 PHSP; -0.0000001 K+ K- K0 anti-K0 pi0 PHSP; -0.0000001 K+ K- K+ anti-K0 pi- PHSP; -0.0000001 K+ K- K0 K- pi+ PHSP; -0.0000001 K0 anti-K0 K0 anti-K0 pi0 PHSP; -0.0000001 K0 anti-K0 anti-K0 K+ pi- PHSP; -0.0000001 K0 anti-K0 K0 K- pi+ PHSP; -#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ -0.000003 phi phi anti-K*0 PHSP; -0.000001 phi K+ K- anti-K*0 PHSP; -0.000001 phi K0 anti-K0 anti-K*0 PHSP; -0.000001 phi anti-K0 K- K*+ PHSP; -0.000001 phi anti-K0 anti-K0 K*0 PHSP; -0.0000001 phi K+ K- K- pi+ PHSP; -0.0000001 phi K+ K- anti-K0 pi0 PHSP; -0.0000001 phi K0 anti-K0 K- pi+ PHSP; -0.0000001 phi K0 anti-K0 anti-K0 pi0 PHSP; -#--- 6-body a1a1 ------------ -0.000050 a_10 a_10 PHSP; -0.000050 a_1+ a_1- PHSP; -# -# PR LHCb: 7 Nov 2005 Add K*0 pi0 pi0 -0.0000067 K*0 pi0 pi0 PHSP; -# -# B -> cc= s -# -# Charmonium states - updated from Lange's recommendations (august 23,2000) -# Based on new BABAR results I'm making the following changes (Lange, March 13, 2001 -# J/psi K0 was 10, now 9 x 10^-4 -# J/psi pi0 was 2.5, now 2.0 x 10^-4 -# J/psi Kstar was 15, now 13 -# Fix chic1 KS CP eigenstate -# adding J/psi rho and omega - for lack of better thing will use the Kstar helicity amplitudes. -# Psi2sKs 30 ->31 -# chic1 Kstar: 12 ->6 -0.00044 J/psi K_S0 SVS; -0.00044 J/psi K_L0 SVS; -# -# -0.00133 J/psi anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; -0.0000205 J/psi pi0 SVS; -0.000027 J/psi rho0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; -0.000030 J/psi omega SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; -0.0002 J/psi K- pi+ PHSP; -0.0001 J/psi anti-K0 pi0 PHSP; -#rl0.0007 J/psi anti-K0 pi+ pi- PHSP; -#rl0.00035 J/psi anti-K0 pi0 pi0 PHSP; -#rl0.00035 J/psi K- pi+ pi0 PHSP; -0.0013 J/psi anti-K_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; -0.0001 J/psi anti-K'_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; -0.0005 J/psi anti-K_2*0 PHSP; -0.00009 J/psi phi anti-K0 PHSP; -# -0.00031 psi(2S) K_S0 SVS; -0.00031 psi(2S) K_L0 SVS; -# -# -0.00072 psi(2S) anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; - -0.0004 psi(2S) K- pi+ PHSP; -0.0002 psi(2S) anti-K0 pi0 PHSP; -0.0002 psi(2S) anti-K0 pi+ pi- PHSP; -0.0001 psi(2S) anti-K0 pi0 pi0 PHSP; -0.0001 psi(2S) K- pi+ pi0 PHSP; -0.0004 psi(2S) anti-K_10 PHSP; - -# -0.000445 eta_c K_S0 PHSP; -0.000445 eta_c K_L0 PHSP; -# -# -0.00096 anti-K*0 eta_c SVS; -0.0002 eta_c K- pi+ PHSP; -0.0001 eta_c anti-K0 pi0 PHSP; -0.0002 eta_c anti-K0 pi+ pi- PHSP; -0.0001 eta_c anti-K0 pi0 pi0 PHSP; -0.0001 eta_c K- pi+ pi0 PHSP; -# -0.00024 eta_c(2S) K_S0 PHSP; -0.00024 eta_c(2S) K_L0 PHSP; -# -# -0.00066 anti-K*0 eta_c(2S) SVS; -0.00008 eta_c(2S) K- pi+ PHSP; -0.00005 eta_c(2S) anti-K0 pi0 PHSP; -0.00008 eta_c(2S) anti-K0 pi+ pi- PHSP; -0.00005 eta_c(2S) anti-K0 pi0 pi0 PHSP; -0.00005 eta_c(2S) K- pi+ pi0 PHSP; -# -0.00015 chi_c0 K_S0 PHSP; -0.00015 chi_c0 K_L0 PHSP; -# -# -0.00030 anti-K*0 chi_c0 SVS; -0.0002 chi_c0 K- pi+ PHSP; -0.0001 chi_c0 anti-K0 pi0 PHSP; -0.0002 chi_c0 anti-K0 pi+ pi- PHSP; -0.0001 chi_c0 anti-K0 pi0 pi0 PHSP; -0.0001 chi_c0 K- pi+ pi0 PHSP; -# -0.000195 chi_c1 K_S0 SVS; -0.000195 chi_c1 K_L0 SVS; -# -# -0.00032 chi_c1 anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; -0.0004 chi_c1 K- pi+ PHSP; -0.0002 chi_c1 anti-K0 pi0 PHSP; -0.0004 chi_c1 anti-K0 pi+ pi- PHSP; -0.0002 chi_c1 anti-K0 pi0 pi0 PHSP; -0.0002 chi_c1 K- pi+ pi0 PHSP; -# -0.00005 chi_c2 K_S0 STS; -0.00005 chi_c2 K_L0 STS; -# -# -0.00003 chi_c2 anti-K*0 PHSP; -0.0002 chi_c2 K- pi+ PHSP; -0.0001 chi_c2 anti-K0 pi0 PHSP; -0.0002 chi_c2 anti-K0 pi+ pi- PHSP; -0.0001 chi_c2 anti-K0 pi0 pi0 PHSP; -0.0001 chi_c2 K- pi+ pi0 PHSP; -# -0.00024 psi(3770) K_S0 SVS; -0.00024 psi(3770) K_L0 SVS; -# -# -0.00048 psi(3770) anti-K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.00014 psi(3770) K- pi+ PHSP; -0.00014 psi(3770) anti-K0 pi0 PHSP; -0.00014 psi(3770) anti-K0 pi+ pi- PHSP; -0.00007 psi(3770) anti-K0 pi0 pi0 PHSP; -0.00007 psi(3770) K- pi+ pi0 PHSP; -0.00029 psi(3770) anti-K_10 PHSP; -# -# b-> c (dc=) -# -0.000211 D- D+ PHSP; -# See Ref [B1] for the next 3: -0.000305 D*+ D- SVS; -0.000305 D*- D+ SVS; -0.00082 D*+ D*- SVV_HELAMP 0.47 0.0 0.96 0.0 0.56 0.0; - -# -# b -> c (sc=) --> D Ds X Sum = 10% -# -0.0074 D+ D_s- PHSP; -0.0083 D*+ D_s- SVS; -0.0076 D_s*- D+ SVS; -0.0179 D*+ D_s*- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; -0.0006 D'_1+ D_s- SVS; -0.0012 D'_1+ D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0012 D_1+ D_s- SVS; -0.0024 D_1+ D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0042 D_2*+ D_s- STS; -0.0040 D_2*+ D_s*- PHSP; -# -0.0018 D_s- D+ pi0 PHSP; -0.0037 D_s- D0 pi+ PHSP; -0.0018 D_s*- D+ pi0 PHSP; -0.0037 D_s*- D0 pi+ PHSP; -0.0030 D_s- D+ pi+ pi- PHSP; -0.0022 D_s- D+ pi0 pi0 PHSP; -0.0022 D_s- D0 pi+ pi0 PHSP; -0.0030 D_s*- D+ pi+ pi- PHSP; -0.0022 D_s*- D+ pi0 pi0 PHSP; -0.0022 D_s*- D0 pi+ pi0 PHSP; -# -# b -> c (sc=) --> D D= K X Sum = 8% -# Update: Ref. [B1] -# -# External W-emission amplitude -0.0017 D+ anti-D0 K- PHSP; -0.0046 D+ anti-D*0 K- PHSP; -0.0031 D*+ anti-D0 K- PHSP; -0.0118 D*+ anti-D*0 K- PHSP; -# External+internal W-emission amplitude -0.0015 D+ D- anti-K0 PHSP; -0.0018 D*+ D- anti-K0 PHSP; -0.0047 D+ D*- anti-K0 PHSP; -0.0070 D*+ D*- anti-K0 PHSP; -# Internal W-emission amplitude (color suppressed modes) -0.0005 D0 anti-D0 anti-K0 PHSP; -0.0005 D*0 anti-D0 anti-K0 PHSP; -0.0015 D0 anti-D*0 anti-K0 PHSP; -0.0015 D*0 anti-D*0 anti-K0 PHSP; - -0.0025 D+ anti-D0 K*- PHSP; -0.0025 D*+ anti-D0 K*- PHSP; -0.0025 D+ anti-D*0 K*- PHSP; -0.0050 D*+ anti-D*0 K*- PHSP; -# -0.0025 D+ D- anti-K*0 PHSP; -0.0025 D*+ D- anti-K*0 PHSP; -0.0025 D+ D*- anti-K*0 PHSP; -0.0050 D*+ D*- anti-K*0 PHSP; -# -0.0005 anti-D0 D0 anti-K*0 PHSP; -0.0005 anti-D0 D*0 anti-K*0 PHSP; -0.0005 anti-D*0 D0 anti-K*0 PHSP; -0.0010 anti-D*0 D*0 anti-K*0 PHSP; -# -# -# B -> D(*) X Exclusive modes -# -0.00276 D*+ pi- SVS; -0.00268 D+ pi- PHSP; -0.0077 rho- D+ SVS; -# -# D* rho HELAMP parameters taken from ICHEP 98-852. -0.0068 rho- D*+ SVV_HELAMP 0.152 1.47 0.936 0 0.317 0.19; -0.0005 D+ pi- pi0 PHSP; -0.0082 D*+ pi- pi0 PHSP; -0.0005 D0 pi+ pi- PHSP; -0.00062 D*0 pi+ pi- PHSP; -0.0005 D*0 pi0 pi0 PHSP; -# -# D a1 updated Ref. [B1] -0.006 a_1- D+ SVS; -0.0011 D+ rho0 pi- PHSP; -0.0011 D+ rho- pi0 PHSP; -0.0039 D+ pi+ pi- pi- PHSP; -0.0010 D+ pi0 pi- pi0 PHSP; -0.0010 D0 pi+ pi- pi0 PHSP; -0.0001 D0 pi0 pi0 pi0 PHSP; -# -# SVV_HELAMP for D* a1 taken from factorization. Recommandation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: -# updated Ref. [B1] -# October 26, 2004 Lange update -0.0130 D*+ a_1- SVV_HELAMP 0.200 0.0 0.866 0.0 0.458 0.0; -# -0.0057 D*+ rho0 pi- PHSP; -0.0010 D*+ rho- pi0 PHSP; -0.0000 D*+ pi+ pi- pi- PHSP; -0.0010 D*+ pi0 pi- pi0 PHSP; -0.0010 D*0 pi+ pi- pi0 PHSP; -0.0001 D*0 pi0 pi0 pi0 PHSP; -# -# B->D** pi and D** rho, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html -#further updates October 26, 2004 - Lange -# October 26, 2004 Lange update -# -0.0001 D_1+ pi- SVS; -0.0001 D'_1+ pi- SVS; -0.00006 D_0*+ pi- PHSP; -0.000215 D_2*+ pi- STS; -0.0004 D_1+ rho- PHSP; -0.0013 D'_1+ rho- PHSP; -0.0022 D_2*+ rho- PHSP; -# -# -# B->DK, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: -# update: Ref. [B1]: -# -0.000214 D*+ K- SVS; -0.00020 D+ K- PHSP; -0.00033 D*+ K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; -0.00045 K*- D+ SVS; -#more DK modes - October 26, 2004 -Lange -0.000036 D*0 K0 SVS; -0.000052 D0 K0 PHSP; -0.000042 anti-K*0 D0 SVS; -0.00001 anti-K*0 anti-D0 SVS; -0.00004 D*0 anti-K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; -0.00001 anti-D*0 anti-K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; -# -# -# Color-suppressed modes. Br's are expectations from -# Phys. Rev. D57 (1998), 5363-5369, except for the eta' modes, which are set -# equal to the eta modes. SVV_HELAMP parameters are the same as in D*0 rho-, -# with phases set to 0. Recommendation http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/169.html: -# update: See Ref [B1]: -# further update October 26, 2004 Lange -# -0.000261 D0 pi0 PHSP; -0.00017 D*0 pi0 SVS; -# -0.00032 rho0 D0 SVS; -0.00029 D*0 rho0 SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; -# -0.000202 D0 eta PHSP; -0.00018 D*0 eta SVS; -# -0.000125 D0 eta' PHSP; -0.000123 D*0 eta' SVS; -# -0.000259 omega D0 SVS; -0.00027 D*0 omega SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; -# -# -#October 26, 2004 - Lange -0.0016 D_s0*- D+ PHSP; -0.0015 D*+ D_s0*- SVS; -0.0042 D_s1- D+ SVS; -0.0093 D*+ D_s1- SVV_HELAMP 0.4904 0. 0.7204 0. 0.4904 0.; -# -# Feb 2009 -# -0.00088 D+ K- anti-K*0 PHSP; -0.00129 D*+ K- anti-K*0 PHSP; -# -# Feb 2009 -# -0.0028 D+ omega pi- PHSP; -0.00289 D*+ omega pi- PHSP; -# -# Feb 2009 -# -0.00049 D+ K0 pi- PHSP; -0.0003 D*+ K0 pi- PHSP; -# -# Feb 2009 -# -0.00043 D'_s1- D+ PHSP; -0.00083 D'_s1- D*+ PHSP; -##### Already included above 0.0023 D_s1- D*+ PHSP; -# -# -# Lam_c X / Sigma_c X 6.0 % -# -#0.01000 cd_0 anti-ud_0 PYTHIA 23; -#0.03000 cd_1 anti-ud_1 PYTHIA 23; -0.0110747 cd_0 anti-ud_0 PYTHIA 23; -0.0221495 cd_1 anti-ud_1 PYTHIA 23; -# -# Xi_c X 2.5% -# -#0.00600 cs_0 anti-ud_0 PYTHIA 23; -#0.01800 cs_1 anti-ud_1 PYTHIA 23; -0.0030204 cs_0 anti-ud_0 PYTHIA 23; -0.0060408 cs_1 anti-ud_1 PYTHIA 23; -# -# PR LHCb Add p pbar mode -0.0000001 p+ anti-p- PHSP; -# -0.2716831 anti-u d c anti-d PYTHIA 48; -0.0463125 anti-u d c anti-d PYTHIA 25; -0.0211427 anti-u s c anti-d PYTHIA 23; -0.0181223 anti-u c d anti-d PYTHIA 48; -0.0009061 anti-u c s anti-d PYTHIA 48; -#lange - try to crank up the psi production.... -0.0745027 anti-c s c anti-d PYTHIA 13; -0.0060408 anti-c d c anti-d PYTHIA 13; -0.0030204 anti-u d u anti-d PYTHIA 48; -0.0040272 anti-c s u anti-d PYTHIA 48; -# JGS 11/5/02 This and similar a few lines above have been divided by two -# to solve a double-counting problem for this channel -0.0020639 anti-u u d anti-d PYTHIA 48; -0.0000705 anti-d d d anti-d PYTHIA 48; -0.0000906 anti-s s d anti-d PYTHIA 48; -0.0022149 anti-u u s anti-d PYTHIA 48; -0.0018122 anti-d d s anti-d PYTHIA 48; -0.0015102 anti-s s s anti-d PYTHIA 48; -0.005034 s anti-d PYTHIA 32; -Enddecay -# -# -Decay B0 -# Updated to PDG 2008 -# b -> c semileptonic -# -0.0516 D*- e+ nu_e PHOTOS HQET 0.77 1.33 0.92; -0.0217 D- e+ nu_e PHOTOS ISGW2; -0.0054 D_1- e+ nu_e PHOTOS ISGW2; -0.0020 D_0*- e+ nu_e PHOTOS ISGW2; -0.0050 D'_1- e+ nu_e PHOTOS ISGW2; -0.0022 D_2*- e+ nu_e PHOTOS ISGW2; -0.0003 D*- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; -0.0049 anti-D*0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; -0.0010 D- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; -# Now 0 as it duplicates other decays -0.0000 anti-D0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; -# -0.0516 D*- mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; -0.0217 D- mu+ nu_mu PHOTOS ISGW2; -0.0054 D_1- mu+ nu_mu PHOTOS ISGW2; -0.0020 D_0*- mu+ nu_mu PHOTOS ISGW2; -0.0050 D'_1- mu+ nu_mu PHOTOS ISGW2; -0.0022 D_2*- mu+ nu_mu PHOTOS ISGW2; -0.0003 D*- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0049 anti-D*0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0010 D- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0000 anti-D0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; -# -# b -> c tau nu -# -0.0160 D*- tau+ nu_tau ISGW2; -0.0100 D- tau+ nu_tau ISGW2; -0.0013 D_1- tau+ nu_tau ISGW2; -0.0013 D_0*- tau+ nu_tau ISGW2; -0.0020 D'_1- tau+ nu_tau ISGW2; -0.0020 D_2*- tau+ nu_tau ISGW2; -# -# b -> u l nu -# -0.000136 pi- e+ nu_e PHOTOS ISGW2; -0.000247 rho- e+ nu_e PHOTOS ISGW2; -0.000000 D(2S)- e+ nu_e PHOTOS ISGW2; -0.000000 D*(2S)- e+ nu_e PHOTOS ISGW2; -0.001892 Xu- e+ nu_e VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; -# -0.000136 pi- mu+ nu_mu PHOTOS ISGW2; -0.000247 rho- mu+ nu_mu PHOTOS ISGW2; -0.000000 D(2S)- mu+ nu_mu PHOTOS ISGW2; -0.000000 D*(2S)- mu+ nu_mu PHOTOS ISGW2; -0.001892 Xu- mu+ nu_mu VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; -# -0.000060 pi- tau+ nu_tau ISGW2; -0.000083 rho- tau+ nu_tau ISGW2; -0.000090 a_1- tau+ nu_tau ISGW2; -0.000008 b_1- tau+ nu_tau ISGW2; -0.000008 a_0- tau+ nu_tau ISGW2; -0.000008 a_2- tau+ nu_tau ISGW2; -0.000000 rho(2S)- tau+ nu_tau ISGW2; -0.000000 D(2S)- tau+ nu_tau ISGW2; -0.000000 D*(2S)- tau+ nu_tau ISGW2; -# - -# -# b->u hadronic -# Ref. [B1]: -# Lange Nov14,2004 (flip D_s K --opposite of D_s pi) -0.0000153 D_s+ pi- PHSP; -0.0000290 D_s- K+ PHSP; -0.0000300 D_s*+ pi- SVS; -0.0000220 D_s*- K+ SVS; -# -0.000016 rho- D_s+ SVS; -0.000016 K*+ D_s- SVS; -0.000016 D_s*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000016 D_s*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - - -# -# b -> s gamma -# -0.0000401 K*0 gamma HELAMP 1.0 0.0 1.0 0.0; -# PR LHCb add omega gamma -0.0000005 omega gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000135 K_10 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000065 K'_10 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000128 K'*0 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000166 K_2*0 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000017 K''*0 gamma HELAMP 1.0 0.0 1.0 0.0; -0.0003118 Xsd gamma BTOXSGAMMA 2 ; -# -0.0000006 K0 e+ e- PHOTOS BTOSLLBALL; -0.0000018 K*0 e+ e- PHOTOS BTOSLLBALL; -0.0000050 Xsd e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.0000006 K0 mu+ mu- PHOTOS BTOSLLBALL; -0.0000014 K*0 mu+ mu- PHOTOS BTOSLLBALL; -0.0000025 Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.0000001 K0 tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 K*0 tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 Xsd tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -# -#------------------------------------------------------------------------------ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv -# -# B0 -> CP eigenstates (some exclusive b -> u) sum=0.00036 -# -# PR LHCb 04/07/04 update BR -0.0000051 pi+ pi- PHSP; -0.0000016 pi0 pi0 PHSP; -0.0000010 pi0 eta PHSP; -0.0000015 pi0 eta' PHSP; -0.000001 pi0 a_00 PHSP; -0.000001 pi0 f_0 PHSP; -# pi0 rho0 is with the 3-body modes -0.000001 omega pi0 SVS; -0.000001 a_10 pi0 SVS; -0.000001 b_10 pi0 SVS; -0.000001 eta eta PHSP; -0.000001 eta eta' PHSP; -0.000001 eta a_00 PHSP; -0.000001 eta f_0 PHSP; -0.000001 rho0 eta SVS; -0.000001 omega eta SVS; -0.000001 a_10 eta SVS; -0.000001 b_10 eta SVS; -0.000001 eta' eta' PHSP; -0.000001 eta' a_00 PHSP; -0.000001 eta' f_0 PHSP; -0.000001 rho0 eta' SVS; -0.000001 omega eta' SVS; -0.000001 a_10 eta' SVS; -0.000001 b_10 eta' SVS; -0.000001 a_00 a_00 PHSP; -0.000001 a_00 f_0 PHSP; -0.000001 rho0 a_00 SVS; -0.000001 omega a_00 SVS; -0.000001 a_10 a_00 SVS; -0.000001 b_10 a_00 SVS; -0.000001 f_0 f_0 PHSP; -0.000001 rho0 f_0 SVS; -0.000001 omega f_0 SVS; -0.000001 a_10 f_0 SVS; -0.000001 b_10 f_0 SVS; - -# Penguin dominated modes are sin2beta, not sin2alpha -0.0000043 phi K_S0 SVS; -0.0000043 phi K_L0 SVS; -0.000001 eta K_S0 PHSP; -0.000001 eta K_L0 PHSP; -0.0000325 eta' K_S0 PHSP; -0.0000325 eta' K_L0 PHSP; -0.0000025 omega K_S0 SVS; -0.0000025 omega K_L0 SVS; -#don't allow jetset to simulate the same decay but to a K0 or anti-K0 -#Lange 1/30/2003 -0.0 phi K0 PHSP; -0.0 phi anti-K0 PHSP; -0.0 eta K0 PHSP; -0.0 eta anti-K0 PHSP; -0.0 eta' K0 PHSP; -0.0 eta' anti-K0 PHSP; -0.0 omega K0 PHSP; -0.0 omega anti-K0 PHSP; -# phipi0 has no simple Pengiun or tree so who knows - ditto phieta/eta'? -0.000001 phi pi0 SVS; -0.000001 phi eta SVS; -0.000001 phi eta' SVS; -# -0.0000159 K*0 eta SVS; -0.0000038 K*0 eta' SVS; -0.000001 K*0 omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 phi omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 omega omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 omega rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -# -# PR LHCb 04/07/04 update BR -#2-body modes from Jim Olsen -0.0000194 K+ pi- PHSP; -0.0000004 K+ K- PHSP; -0.0000005 K_S0 K_S0 PHSP; -0.0000000 K_S0 K_L0 PHSP; -0.0000005 K_L0 K_L0 PHSP; -# Declare K0 pi0 not to have it through Pythia (LHCb - PR) -0.0000000 K0 pi0 PHSP; -# Split into K_s0 K_l0 (LHCb - P. Robbe) -0.0000049 K_S0 pi0 PHSP; -0.0000049 K_L0 pi0 PHSP; -#Put in with 0 BR to keep PYTHIA from generating it -0.0000000 K0 anti-K0 PHSP; -# -# 3-body John Back (jback@slac.stanford.edu) - Oct 15, 2002 -# JGS intersperses modes with pi0->eta,eta' -# B0 modes -# Model generates rho(770), rho(1450) and rho(1700) resonances -# with interference (uses CKM angle alpha) -0.000024 pi- pi+ pi0 BTO3PI_CP dm alpha; -# Put in with 0 BR to keep PYTHIA from generating these (see BTO3PI_CP above) -0.000000 rho0 pi0 SVS; -0.000000 rho+ pi- SVS; -0.000000 rho- pi+ SVS; -0.000000 rho(2S)+ pi- SVS; -0.000000 rho(2S)- pi+ SVS; -0.000000 rho(3S)+ pi- SVS; -0.000000 rho(3S)- pi+ SVS; -# -# rho0 3-body modes -0.0000027 rho0 K_S0 SVS; -0.0000027 rho0 K_L0 SVS; -# -# rho- 3-body modes -0.0000085 rho- K+ SVS; -# -# rho(1450) 3-body modes -0.0000005 rho(2S)0 K_S0 SVS; -0.0000005 rho(2S)0 K_L0 SVS; -# -# -# f0,a0(980) 3-body modes -0.0000055 f_0 K0 PHSP; -0.000001 a_00 K0 PHSP; -0.000001 a_0- K+ PHSP; -0.000001 a_0+ pi- PHSP; -0.000003 a_0- pi+ PHSP; -# -# K*0(892) 3-body modes -0.0000017 K*0 pi0 SVS; -0.000003 K*0 anti-K0 SVS; -# -# K*0(1430) 3-body modes -0.000001 K_0*0 pi0 PHSP; -0.000003 K_0*0 anti-K0 PHSP; -# -# K*0(1680) 3-body modes -0.000001 K''*0 pi0 SVS; -0.000001 K''*0 K0 SVS; - -# -# K*+(892) 3-body modes -0.0000098 K*+ pi- SVS; -0.000002 K*+ K- SVS; -# -# K*+(1430) 3-body modes -0.000050 K_0*+ pi- PHSP; -0.000002 K_0*+ K- PHSP; -# -# K*0(1680) 3-body modes -0.000001 K''*+ pi- SVS; -0.000001 K''*+ K- SVS; -# -# -# Non-resonant 3-body left-overs -# Most modes are set at 1e-6 -# -# pi+pi-pi0: high mass + f0(400-1200) = (1+1)e-6 -#0402270.000002 pi+ pi- pi0 PHSP; -0.000017 pi+ pi- eta PHSP; -0.000001 pi+ pi- eta' PHSP; -# -# pi+ pi- K0: total-rhoK0-f0K0-piK*(892)-piK*(1430)=45-5-6-13./3-11./3 -0.0000199 pi+ pi- K0 PHSP; -# -# K+ pi- pi0 -0.000002 K+ pi- pi0 PHSP; -0.000020 K+ pi- eta PHSP; -0.000001 K+ pi- eta' PHSP; -# -# pi+ K- K0. -# Both B0 and B0bar can decay to these => 0.5e-6 each -0.0000005 pi+ K- K0 PHSP; -0.0000005 pi- K+ anti-K0 PHSP; -# -# K+ K- K0 -# PR LHCb 09 Apr 2004 split into KS/KL -0.000000 K+ K- K0 PHSP; -0.0000081 K+ K- K_S0 PHSP; -0.0000081 K+ K- K_L0 PHSP; -# -# K+ K- pi0 -0.000001 K+ K- pi0 PHSP; -0.000001 K+ K- eta PHSP; -0.000001 K+ K- eta' PHSP; -# -# pi0 K0 anti-K0 -0.000002 K0 anti-K0 pi0 PHSP; -0.000001 K0 anti-K0 eta PHSP; -0.000001 K0 anti-K0 eta' PHSP; -# -# pi0 pi0 K0 -0.000002 K0 pi0 pi0 PHSP; -0.000001 K0 pi0 eta PHSP; -0.000001 K0 pi0 eta' PHSP; -0.000001 K0 eta eta PHSP; -0.000001 K0 eta eta' PHSP; -0.000001 K0 eta' eta' PHSP; -# -# K0 anti-K0 K0: 8*BF(KsKsKs)~=48 (8 is a guess) -0.000048 K0 anti-K0 K0 PHSP; -# -# pi0 pi0 pi0 -0.000001 pi0 pi0 pi0 PHSP; -0.000001 pi0 pi0 eta PHSP; -0.000001 pi0 pi0 eta' PHSP; -0.000001 pi0 eta eta PHSP; -0.000001 pi0 eta eta' PHSP; -# -# PR LHCb: 7 Nov 2005 Add K*0 pi0 pi0 -0.0000067 K*0 pi0 pi0 PHSP; -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#--------------------------------------------------------------------------- -# -#4-body modes from Andrei Gritsan -#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- -# PR LHCb 20 Apr 2004, set long. pol. -0.0000011 rho0 rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; -0.0000242 rho+ rho- SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; -0.000003 rho0 pi+ pi- PHSP; -0.000003 omega pi+ pi- PHSP; -0.000001 rho0 pi0 pi0 PHSP; -0.000001 omega pi0 pi0 PHSP; -0.0000005 rho0 pi0 eta PHSP; -0.0000002 rho0 eta eta PHSP; -0.0000002 rho0 pi0 eta' PHSP; -0.0000001 rho0 eta eta' PHSP; -0.0000005 omega pi0 eta PHSP; -0.0000002 omega eta eta PHSP; -0.0000002 omega pi0 eta' PHSP; -0.0000001 omega eta eta' PHSP; -0.000010 rho+ pi- pi0 PHSP; -0.000005 rho+ pi- eta PHSP; -0.000010 rho- pi+ pi0 PHSP; -0.000005 rho- pi+ eta PHSP; -0.000010 pi+ pi- pi+ pi- PHSP; -0.000010 pi+ pi- pi0 pi0 PHSP; -0.000005 pi+ pi- eta pi0 PHSP; -0.000002 pi+ pi- eta eta PHSP; -0.000002 pi+ pi- eta' pi0 PHSP; -0.000001 pi+ pi- eta' eta PHSP; -0.0000165 a_1+ pi- SVS; -0.0000165 a_1- pi+ SVS; -0.0000055 b_1+ pi- SVS; -0.0000055 b_1- pi+ SVS; -0.000002 rho- a_0+ SVS; -0.000010 rho+ a_0- SVS; -0.000001 f_0 pi+ pi- PHSP; -0.000001 f_0 pi0 pi0 PHSP; -0.000001 a_0- pi+ pi0 PHSP; -0.000001 a_00 pi0 pi0 PHSP; -0.000001 a_0+ pi- pi0 PHSP; -#--- 4-body rho-K*, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- -0.0000056 rho0 K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000100 rho- K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000484 pi- pi+ K*0 PHSP; -0.000010 pi- pi0 K*+ PHSP; -0.000005 pi- eta K*+ PHSP; -0.000002 pi- eta' K*+ PHSP; -0.000010 rho- K+ pi0 PHSP; -0.000005 rho- K+ eta PHSP; -0.000002 rho- K+ eta' PHSP; -0.000010 rho- K0 pi+ PHSP; -0.000010 rho+ K0 pi- PHSP; -0.000005 rho0 K0 pi0 PHSP; -0.000002 rho0 K0 eta PHSP; -0.000001 rho0 K0 eta' PHSP; -0.000010 rho0 K+ pi- PHSP; -0.000005 omega K0 pi0 PHSP; -0.000002 omega K0 eta PHSP; -0.000001 omega K0 eta' PHSP; -0.000005 omega K+ pi- PHSP; -0.000010 pi+ pi0 pi- K0 PHSP; -0.000005 pi+ eta pi- K0 PHSP; -0.000010 pi0 pi0 pi0 K0 PHSP; -0.000005 pi0 pi0 eta K0 PHSP; -0.000002 pi0 eta eta K0 PHSP; -0.000002 pi0 pi0 eta' K0 PHSP; -0.000001 pi0 eta eta' K0 PHSP; -0.000010 pi+ pi- pi- K+ PHSP; -0.000010 pi0 pi0 pi- K+ PHSP; -0.000005 pi0 eta pi- K+ PHSP; -0.000002 eta eta pi- K+ PHSP; -0.000002 pi0 eta' pi- K+ PHSP; -0.000001 eta eta' pi- K+ PHSP; -0.000010 rho0 K_0*0 PHSP; -0.000020 rho- K_0*+ PHSP; -0.000010 pi- pi+ K_0*0 PHSP; -0.000010 pi0 pi0 K_0*0 PHSP; -0.000010 pi- pi0 K_0*+ PHSP; -0.000005 K*0 f_0 SVS; -0.000010 a_10 K0 SVS; -0.0000160 a_1- K+ SVS; -0.000010 b_10 K0 SVS; -0.0000074 b_1- K+ SVS; -0.000005 K*0 a_00 SVS; -0.000005 K*+ a_0- SVS; -#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ -0.0000013 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 K*+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000001 phi rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 K+ K- rho0 PHSP; -0.000001 K0 anti-K0 rho0 PHSP; -0.000001 K+ K- omega PHSP; -0.000001 K0 anti-K0 omega PHSP; -0.000001 K+ anti-K0 rho- PHSP; -0.000001 K- K0 rho+ PHSP; -0.0000001 phi pi- pi+ PHSP; -0.000001 K+ K- pi- pi+ PHSP; -0.000001 K+ K- pi0 pi0 PHSP; -0.0000005 K+ K- pi0 eta PHSP; -0.0000002 K+ K- eta eta PHSP; -0.0000002 K+ K- pi0 eta' PHSP; -0.0000001 K+ K- eta eta' PHSP; -0.000001 K0 anti-K0 pi- pi+ PHSP; -0.000001 K0 anti-K0 pi0 pi0 PHSP; -0.0000005 K0 anti-K0 pi0 eta PHSP; -0.0000002 K0 anti-K0 eta eta PHSP; -0.0000002 K0 anti-K0 pi0 eta' PHSP; -0.0000001 K0 anti-K0 eta eta' PHSP; -0.000001 K*+ K- pi0 PHSP; -0.000001 K*- K+ pi0 PHSP; -0.000001 K*0 anti-K0 pi0 PHSP; -0.000001 K0 anti-K*0 pi0 PHSP; -0.000001 K+ anti-K*0 pi- PHSP; -0.000001 K*+ anti-K0 pi- PHSP; -0.0000033 K- K*0 pi+ PHSP; -0.000001 K*- K0 pi+ PHSP; -#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- -0.0000095 phi K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000010 phi K+ pi- PHSP; -0.000010 phi K0 pi0 PHSP; -0.000007 phi K0 eta PHSP; -0.000018 K- K+ K*0 PHSP; -0.000010 K- K*+ K0 PHSP; -0.000010 K*- K+ K0 PHSP; -0.000010 K+ K- K+ pi- PHSP; -0.000010 K+ K- K0 pi0 PHSP; -0.000005 K+ K- K0 eta PHSP; -0.000010 K0 anti-K0 K0 pi0 PHSP; -0.000005 K0 anti-K0 K0 eta PHSP; -0.000010 phi K_0*0 PHSP; -0.000010 K- K+ K_0*0 PHSP; -0.000010 K- K_0*+ K0 PHSP; -0.000010 K_0*- K+ K0 PHSP; -0.000002 phi K'_10 PHSP; -0.000002 K- K+ K'_10 PHSP; -#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- -0.0000001 phi phi SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000001 phi K+ K- PHSP; -0.0000001 phi K0 anti-K0 PHSP; -0.0000001 K+ K- K+ K- PHSP; -0.0000001 K0 anti-K0 K+ K- PHSP; -0.0000001 K0 anti-K0 K0 anti-K0 PHSP; -#5-body modes from Jim Smith - 1/30/05 -#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- -0.000010 rho0 rho0 pi0 PHSP; -0.000005 rho0 rho0 eta PHSP; -0.000002 rho0 rho0 eta' PHSP; -0.000010 omega rho0 pi0 PHSP; -0.000005 omega rho0 eta PHSP; -0.000002 omega rho0 eta' PHSP; -0.000010 rho+ rho- pi0 PHSP; -0.000005 rho+ rho- eta PHSP; -0.000002 rho+ rho- eta' PHSP; -0.000010 rho0 rho+ pi- PHSP; -0.000010 omega rho+ pi- PHSP; -0.000002 rho0 pi+ pi- pi0 PHSP; -0.000001 rho0 pi+ pi- eta PHSP; -0.000001 rho0 pi+ pi- eta' PHSP; -0.000002 rho0 pi0 pi0 pi0 PHSP; -0.000001 rho0 pi0 eta pi0 PHSP; -0.000001 rho0 pi0 eta' pi0 PHSP; -0.000002 omega pi+ pi- pi0 PHSP; -0.000001 omega pi+ pi- eta PHSP; -0.000001 omega pi+ pi- eta' PHSP; -0.000002 omega pi0 pi0 pi0 PHSP; -0.000001 omega pi0 eta pi0 PHSP; -0.000001 omega pi0 eta' pi0 PHSP; -0.000002 rho+ pi- pi+ pi- PHSP; -0.000002 rho+ pi- pi0 pi0 PHSP; -0.000001 rho+ pi- pi0 eta PHSP; -0.000001 rho+ pi- pi0 eta' PHSP; -0.000002 rho- pi+ pi+ pi- PHSP; -0.000002 rho- pi+ pi0 pi0 PHSP; -0.000001 rho- pi+ pi0 eta PHSP; -0.000001 rho- pi+ pi0 eta' PHSP; -0.000001 pi+ pi- pi+ pi- pi0 PHSP; -0.0000005 pi+ pi- pi+ pi- eta PHSP; -0.0000002 pi+ pi- pi+ pi- eta' PHSP; -0.000001 pi+ pi- pi0 pi0 pi0 PHSP; -0.0000005 pi+ pi- pi0 pi0 eta PHSP; -0.0000002 pi+ pi- pi0 pi0 eta' PHSP; -0.0000005 pi0 pi0 pi0 pi0 pi0 PHSP; -0.0000002 pi0 pi0 pi0 pi0 eta PHSP; -0.0000001 pi0 pi0 pi0 pi0 eta' PHSP; -0.000010 a_1+ rho- PHSP; -0.000010 a_1- rho+ PHSP; -0.000010 a_10 rho0 PHSP; -0.000010 a_10 omega PHSP; -0.000010 a_1+ pi- pi0 PHSP; -0.000005 a_1+ pi- eta PHSP; -0.000002 a_1+ pi- eta' PHSP; -0.000010 a_10 pi+ pi- PHSP; -0.000010 a_10 pi0 pi0 PHSP; -0.000005 a_10 pi0 eta PHSP; -0.000002 a_10 pi0 eta' PHSP; -0.000010 a_1- pi+ pi0 PHSP; -0.000005 a_1- pi+ eta PHSP; -0.000002 a_1- pi+ eta' PHSP; -0.000010 rho+ f_0 pi- PHSP; -0.000010 rho- f_0 pi+ PHSP; -0.000010 rho0 f_0 pi0 PHSP; -0.000005 rho0 f_0 eta PHSP; -0.000002 rho0 f_0 eta' PHSP; -0.000010 omega f_0 pi0 PHSP; -0.000010 rho+ a_00 pi- PHSP; -0.000010 rho+ a_0- pi0 PHSP; -0.000005 rho+ a_0- eta PHSP; -0.000002 rho+ a_0- eta' PHSP; -0.000010 rho0 a_0+ pi- PHSP; -0.000010 rho0 a_0- pi+ PHSP; -0.000010 rho0 a_00 pi0 PHSP; -0.000005 rho0 a_00 eta PHSP; -0.000002 rho0 a_00 eta' PHSP; -0.000010 rho- a_00 pi+ PHSP; -0.000010 rho- a_0+ pi0 PHSP; -0.000005 rho- a_0+ eta PHSP; -0.000002 rho- a_0+ eta' PHSP; -0.000002 f_0 pi+ pi- pi0 PHSP; -0.000001 f_0 pi+ pi- eta PHSP; -0.000001 f_0 pi+ pi- eta' PHSP; -0.000002 f_0 pi0 pi0 pi0 PHSP; -0.000001 f_0 pi0 pi0 eta PHSP; -0.000001 f_0 pi0 pi0 eta' PHSP; -0.000001 a_00 pi+ pi- pi0 PHSP; -0.000001 a_00 pi0 pi0 pi0 PHSP; -0.000001 a_0+ pi- pi+ pi- PHSP; -0.000001 a_0+ pi- pi0 pi0 PHSP; -0.000001 a_0- pi+ pi+ pi- PHSP; -0.000001 a_0- pi+ pi0 pi0 PHSP; -#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- -0.000010 rho0 K*+ pi- PHSP; -0.000010 rho- K*+ pi0 PHSP; -0.000005 rho- K*+ eta PHSP; -0.000002 rho- K*+ eta' PHSP; -0.000010 rho0 K*0 pi0 PHSP; -0.000005 rho0 K*0 eta PHSP; -0.000002 rho0 K*0 eta' PHSP; -0.000010 rho- K*0 pi+ PHSP; -0.000010 rho+ K*0 pi- PHSP; -0.000010 omega K*+ pi- PHSP; -0.000010 omega K*0 pi0 PHSP; -0.000005 omega K*0 eta PHSP; -0.000002 omega K*0 eta' PHSP; -0.000010 pi+ pi- K*+ pi- PHSP; -0.000010 pi- pi0 K*+ pi0 PHSP; -0.000005 pi- pi0 K*+ eta PHSP; -0.000002 pi- pi0 K*+ eta' PHSP; -0.000010 pi+ pi- K*0 pi0 PHSP; -0.000005 pi+ pi- K*0 eta PHSP; -0.000002 pi+ pi- K*0 eta' PHSP; -0.000010 pi0 pi0 K*0 pi0 PHSP; -0.000005 pi0 pi0 K*0 eta PHSP; -0.000002 pi0 pi0 K*0 eta' PHSP; -0.000010 rho+ K+ pi- pi- PHSP; -0.000010 rho0 K+ pi- pi0 PHSP; -0.000005 rho0 K+ pi- eta PHSP; -0.000002 rho0 K+ pi- eta' PHSP; -0.000010 rho- K+ pi+ pi- PHSP; -0.000010 rho- K+ pi0 pi0 PHSP; -0.000005 rho- K+ pi0 eta PHSP; -0.000002 rho- K+ pi0 eta' PHSP; -0.000010 rho0 K0 pi+ pi- PHSP; -0.000010 rho0 K0 pi0 pi0 PHSP; -0.000005 rho0 K0 pi0 eta PHSP; -0.000002 rho0 K0 pi0 eta' PHSP; -0.000010 rho+ K0 pi- pi0 PHSP; -0.000005 rho+ K0 pi- eta PHSP; -0.000002 rho+ K0 pi- eta' PHSP; -0.000010 rho- K0 pi+ pi0 PHSP; -0.000005 rho- K0 pi+ eta PHSP; -0.000002 rho- K0 pi+ eta' PHSP; -0.000010 omega K+ pi- pi0 PHSP; -0.000005 omega K+ pi- eta PHSP; -0.000002 omega K+ pi- eta' PHSP; -0.000010 omega K0 pi+ pi- PHSP; -0.000010 omega K0 pi0 pi0 PHSP; -0.000005 omega K0 pi0 eta PHSP; -0.000002 omega K0 pi0 eta' PHSP; -0.000002 pi+ pi- pi- K+ pi0 PHSP; -0.000001 pi+ pi- pi- K+ eta PHSP; -0.000001 pi+ pi- pi- K+ eta' PHSP; -0.000002 pi0 pi0 pi- K+ pi0 PHSP; -0.000001 pi0 pi0 pi- K+ eta PHSP; -0.000001 pi0 pi0 pi- K+ eta' PHSP; -0.000002 pi+ pi- pi+ K0 pi- PHSP; -0.000002 pi+ pi- pi0 K0 pi0 PHSP; -0.000001 pi+ pi- pi0 K0 eta PHSP; -0.000001 pi+ pi- pi0 K0 eta' PHSP; -0.000002 pi0 pi0 pi0 K0 pi0 PHSP; -0.000001 pi0 pi0 pi0 K0 eta PHSP; -0.000001 pi0 pi0 pi0 K0 eta' PHSP; -0.000010 rho+ K_0*0 pi- PHSP; -0.000010 rho0 K_0*0 pi0 PHSP; -0.000005 rho0 K_0*0 eta PHSP; -0.000002 rho0 K_0*0 eta' PHSP; -0.000010 rho- K_0*0 pi+ PHSP; -0.000010 rho- K_0*+ pi0 PHSP; -0.000005 rho- K_0*+ eta PHSP; -0.000002 rho- K_0*+ eta' PHSP; -0.000010 rho0 K_0*+ pi- PHSP; -0.000010 pi+ pi- K_0*+ pi- PHSP; -0.000010 pi- pi0 K_0*+ pi0 PHSP; -0.000005 pi- pi0 K_0*+ eta PHSP; -0.000002 pi- pi0 K_0*+ eta' PHSP; -0.000010 pi+ pi- K_0*0 pi0 PHSP; -0.000005 pi+ pi- K_0*0 eta PHSP; -0.000002 pi+ pi- K_0*0 eta' PHSP; -0.000010 pi0 pi0 K_0*0 pi0 PHSP; -0.000005 pi0 pi0 K_0*0 eta PHSP; -0.000005 pi0 pi0 K_0*0 eta' PHSP; -0.000010 K*+ f_0 pi- PHSP; -0.000010 K*0 f_0 pi0 PHSP; -0.000005 K*0 f_0 eta PHSP; -0.000002 K*0 f_0 eta' PHSP; -0.000010 a_1+ K0 pi- PHSP; -0.000020 a_10 K*0 PHSP; -0.000010 a_10 K+ pi- PHSP; -0.000010 a_10 K0 pi0 PHSP; -0.000020 a_1- K*+ PHSP; -0.000010 a_1- K+ pi0 PHSP; -0.000010 a_1- K0 pi+ PHSP; -0.000005 K*+ a_00 pi- PHSP; -0.000005 K*+ a_0- pi0 PHSP; -0.000002 K*+ a_0- eta PHSP; -0.000001 K*+ a_0- eta' PHSP; -0.000005 K*0 a_0+ pi- PHSP; -0.000005 K*0 a_00 pi0 PHSP; -0.000002 K*0 a_00 eta PHSP; -0.000001 K*0 a_00 eta' PHSP; -#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ -0.000001 K*- K*0 pi+ PHSP; -0.000001 K*+ anti-K*0 pi- PHSP; -0.000001 K*- K*+ pi0 PHSP; -0.0000005 K*- K*+ eta PHSP; -0.0000002 K*- K*+ eta' PHSP; -0.000001 K*0 anti-K*0 pi0 PHSP; -0.0000005 K*0 anti-K*0 eta PHSP; -0.0000002 K*0 anti-K*0 eta' PHSP; -0.000001 phi rho+ pi- PHSP; -0.000001 phi rho- pi+ PHSP; -0.000001 phi rho0 pi0 PHSP; -0.0000005 phi rho0 eta PHSP; -0.0000002 phi rho0 eta' PHSP; -0.000001 phi omega pi0 PHSP; -0.000001 phi f_0 pi0 PHSP; -0.000001 phi pi+ pi- pi0 PHSP; -0.0000005 phi pi+ pi- eta PHSP; -0.0000002 phi pi+ pi- eta' PHSP; -0.000001 phi pi0 pi0 pi0 PHSP; -0.0000005 phi pi0 pi0 eta PHSP; -0.0000002 phi pi0 pi0 eta' PHSP; -0.000001 K0 K- rho0 pi+ PHSP; -0.000001 K0 K- rho+ pi0 PHSP; -0.0000005 K0 K- rho+ eta PHSP; -0.0000002 K0 K- rho+ eta' PHSP; -0.000001 K0 K- omega pi+ PHSP; -0.000001 K0 K- f_0 pi+ PHSP; -0.000001 K+ K- rho+ pi- PHSP; -0.000001 K+ K- rho- pi+ PHSP; -0.000001 K+ K- rho0 pi0 PHSP; -0.0000005 K+ K- rho0 eta PHSP; -0.0000002 K+ K- rho0 eta' PHSP; -0.000001 K+ K- omega pi0 PHSP; -0.0000005 K+ K- omega eta PHSP; -0.0000002 K+ K- omega eta' PHSP; -0.000001 K+ K- f_0 pi0 PHSP; -0.000001 K0 anti-K0 rho+ pi- PHSP; -0.000001 K0 anti-K0 rho- pi+ PHSP; -0.000001 K0 anti-K0 rho0 pi0 PHSP; -0.0000005 K0 anti-K0 rho0 eta PHSP; -0.0000002 K0 anti-K0 rho0 eta' PHSP; -0.000001 K0 anti-K0 omega pi0 PHSP; -0.000001 K0 anti-K0 f_0 pi0 PHSP; -0.000001 anti-K0 K+ rho0 pi- PHSP; -0.000001 anti-K0 K+ rho- pi0 PHSP; -0.0000005 anti-K0 K+ rho- eta PHSP; -0.0000002 anti-K0 K+ rho- eta' PHSP; -0.000001 anti-K0 K+ omega pi- PHSP; -0.000001 anti-K0 K+ f_0 pi- PHSP; -0.0000002 K0 K- pi+ pi+ pi- PHSP; -0.0000002 K0 K- pi+ pi0 pi0 PHSP; -0.0000001 K0 K- pi+ pi0 eta PHSP; -0.0000001 K0 K- pi+ pi0 eta' PHSP; -0.0000002 K+ K- pi+ pi- pi0 PHSP; -0.0000001 K+ K- pi+ pi- eta PHSP; -0.0000001 K+ K- pi+ pi- eta' PHSP; -0.0000002 K+ K- pi0 pi0 pi0 PHSP; -0.0000001 K+ K- pi0 pi0 eta PHSP; -0.0000001 K+ K- pi0 pi0 eta' PHSP; -0.0000002 K0 anti-K0 pi+ pi- pi0 PHSP; -0.0000001 K0 anti-K0 pi+ pi- eta PHSP; -0.0000001 K0 anti-K0 pi+ pi- eta' PHSP; -0.0000002 K0 anti-K0 pi0 pi0 pi0 PHSP; -0.0000001 K0 anti-K0 pi0 pi0 eta PHSP; -0.0000001 K0 anti-K0 pi0 pi0 eta' PHSP; -0.0000002 anti-K0 K+ pi- pi+ pi- PHSP; -0.0000002 anti-K0 K+ pi- pi0 pi0 PHSP; -0.0000001 anti-K0 K+ pi- pi0 eta PHSP; -0.0000001 anti-K0 K+ pi- pi0 eta' PHSP; -0.000001 K*0 K- pi+ pi0 PHSP; -0.0000005 K*0 K- pi+ eta PHSP; -0.0000002 K*0 K- pi+ eta' PHSP; -0.000001 K*- K0 pi+ pi0 PHSP; -0.0000005 K*- K0 pi+ eta PHSP; -0.0000002 K*- K0 pi+ eta' PHSP; -0.000001 K*+ K- pi+ pi- PHSP; -0.000001 K*+ K- pi0 pi0 PHSP; -0.0000005 K*+ K- pi0 eta PHSP; -0.0000002 K*+ K- pi0 eta' PHSP; -0.000001 K*- K+ pi+ pi- PHSP; -0.000001 K*- K+ pi0 pi0 PHSP; -0.0000005 K*- K+ pi0 eta PHSP; -0.0000002 K*- K+ pi0 eta' PHSP; -0.000001 K*0 anti-K0 pi+ pi- PHSP; -0.000001 K*0 anti-K0 pi0 pi0 PHSP; -0.0000005 K*0 anti-K0 pi0 eta PHSP; -0.0000002 K*0 anti-K0 pi0 eta' PHSP; -0.000001 K0 anti-K*0 pi+ pi- PHSP; -0.000001 K0 anti-K*0 pi0 pi0 PHSP; -0.0000005 K0 anti-K*0 pi0 eta PHSP; -0.0000002 K0 anti-K*0 pi0 eta' PHSP; -0.000001 K+ anti-K*0 pi- pi0 PHSP; -0.0000005 K+ anti-K*0 pi- eta PHSP; -0.0000002 K+ anti-K*0 pi- eta' PHSP; -0.000001 K*+ anti-K0 pi- pi0 PHSP; -0.0000005 K*+ anti-K0 pi- eta PHSP; -0.0000002 K*+ anti-K0 pi- eta' PHSP; -#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- -0.000010 phi K*+ pi- PHSP; -0.000010 phi K*0 pi0 PHSP; -0.000005 phi K*0 eta PHSP; -0.000002 phi K*0 eta' PHSP; -0.000010 phi K+ rho- PHSP; -0.000010 phi K0 rho0 PHSP; -0.000010 phi K0 omega PHSP; -0.000010 phi K0 f_0 PHSP; -0.000010 phi K0 pi+ pi- PHSP; -0.000010 phi K0 pi0 pi0 PHSP; -0.000005 phi K0 pi0 eta PHSP; -0.000002 phi K0 pi0 eta' PHSP; -0.000010 phi K+ pi- pi0 PHSP; -0.000005 phi K+ pi- eta PHSP; -0.000002 phi K+ pi- eta' PHSP; -0.000010 K- K+ K*+ pi- PHSP; -0.000010 K+ K*- K+ pi- PHSP; -0.000010 K+ K*0 anti-K0 pi- PHSP; -0.000010 K+ K0 anti-K*0 pi- PHSP; -0.000010 K0 K*+ anti-K0 pi- PHSP; -0.000010 K- K+ K+ rho- PHSP; -0.000010 K- K+ K0 rho0 PHSP; -0.000010 K- K+ K0 omega PHSP; -0.000010 K- K+ K0 f_0 PHSP; -0.000010 K+ K- K+ pi- pi0 PHSP; -0.000005 K+ K- K+ pi- eta PHSP; -0.000002 K+ K- K+ pi- eta' PHSP; -0.000010 K+ K- K0 pi+ pi- PHSP; -0.000010 K+ K- K0 pi0 pi0 PHSP; -0.000005 K+ K- K0 pi0 eta PHSP; -0.000005 K+ K- K0 pi0 eta' PHSP; -0.000010 K0 anti-K0 K+ pi- pi0 PHSP; -0.000005 K0 anti-K0 K+ pi- eta PHSP; -0.000002 K0 anti-K0 K+ pi- eta' PHSP; -0.000010 K0 anti-K0 K0 pi+ pi- PHSP; -0.000010 K0 anti-K0 K0 pi0 pi0 PHSP; -0.000005 K0 anti-K0 K0 pi0 eta PHSP; -0.000002 K0 anti-K0 K0 pi0 eta' PHSP; -0.000010 phi K_0*+ pi- PHSP; -0.000010 phi K_0*0 pi0 PHSP; -0.000010 K+ K- K_0*+ pi- PHSP; -0.000010 K+ K- K_0*0 pi0 PHSP; -0.000005 K+ K- K_0*0 eta PHSP; -0.000002 K+ K- K_0*0 eta' PHSP; -0.000010 K+ K+ K_0*- pi- PHSP; -0.000010 K+ anti-K_0*0 K0 pi- PHSP; -0.000010 K+ K_0*0 anti-K0 pi- PHSP; -0.000010 K0 anti-K0 K_0*+ pi- PHSP; -0.000010 K0 anti-K0 K_0*0 pi0 PHSP; -0.000005 K0 anti-K0 K_0*0 eta PHSP; -0.000002 K0 anti-K0 K_0*0 eta' PHSP; -0.000010 K0 K0 anti-K_0*0 pi0 PHSP; -0.000005 K0 K0 anti-K_0*0 eta PHSP; -0.000002 K0 K0 anti-K_0*0 eta' PHSP; -0.000002 phi K'_1+ pi- PHSP; -0.000002 phi K'_10 pi0 PHSP; -0.000001 phi K'_10 eta PHSP; -0.000001 phi K'_10 eta' PHSP; -0.000002 K- K+ K'_1+ pi- PHSP; -0.000002 K- K+ K'_10 pi0 PHSP; -0.000001 K- K+ K'_10 eta PHSP; -0.000001 K- K+ K'_10 eta' PHSP; -0.000002 K+ K+ K'_1- pi- PHSP; -0.000002 K0 anti-K0 K'_10 pi0 PHSP; -0.000001 K0 anti-K0 K'_10 eta PHSP; -0.000001 K0 anti-K0 K'_10 eta' PHSP; -0.000002 K0 K0 anti-K'_10 pi0 PHSP; -0.000001 K0 K0 anti-K'_10 eta PHSP; -0.000001 K0 K0 anti-K'_10 eta' PHSP; -#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ -0.000003 phi phi K0 PHSP; -0.0000001 phi phi pi0 PHSP; -0.000001 phi K+ K- K0 PHSP; -0.000001 phi K0 anti-K0 K0 PHSP; -0.0000001 phi K+ K- pi0 PHSP; -0.0000001 phi K0 anti-K0 pi0 PHSP; -0.0000001 phi anti-K0 K+ pi- PHSP; -0.0000001 phi K0 K- pi+ PHSP; -0.0000001 K+ K- K+ K- K0 PHSP; -0.0000001 K0 anti-K0 K+ K- K0 PHSP; -0.0000001 K+ K- K+ K- pi0 PHSP; -0.0000001 K+ K- K0 anti-K0 pi0 PHSP; -0.0000001 K+ K- K+ anti-K0 pi- PHSP; -0.0000001 K+ K- K0 K- pi+ PHSP; -0.0000001 K0 anti-K0 K0 anti-K0 pi0 PHSP; -0.0000001 K0 anti-K0 anti-K0 K+ pi- PHSP; -0.0000001 K0 anti-K0 K0 K- pi+ PHSP; -#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ -0.000003 phi phi K*0 PHSP; -0.000001 phi K+ K- K*0 PHSP; -0.000001 phi K0 anti-K0 K*0 PHSP; -0.000001 phi K0 K+ K*- PHSP; -0.000001 phi K0 K0 anti-K*0 PHSP; -0.0000001 phi K+ K- K+ pi- PHSP; -0.0000001 phi K+ K- K0 pi0 PHSP; -0.0000001 phi K0 anti-K0 K+ pi- PHSP; -0.0000001 phi K0 anti-K0 K0 pi0 PHSP; -#--- 6-body a1a1 ------------ -0.000050 a_10 a_10 PHSP; -0.000050 a_1+ a_1- PHSP; -# -# B -> cc= s -0.00044 J/psi K_S0 SVS; -0.00044 J/psi K_L0 SVS; -# -# -0.0013300 J/psi K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.0000205 J/psi pi0 SVS; -0.0000270 J/psi rho0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.00003 J/psi omega SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.0002 J/psi K+ pi- PHSP; -0.0001 J/psi K0 pi0 PHSP; -#rl0.0007 J/psi K0 pi- pi+ PHSP; -#rl0.00035 J/psi K0 pi0 pi0 PHSP; -#rl0.00035 J/psi K+ pi- pi0 PHSP; -0.0013 J/psi K_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; -0.0001 J/psi K'_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; -0.0005 J/psi K_2*0 PHSP; -0.00009 J/psi phi K0 PHSP; -# -0.00031 psi(2S) K_S0 SVS; -0.00031 psi(2S) K_L0 SVS; -# -# -0.00072 psi(2S) K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; - -0.0004 psi(2S) K+ pi- PHSP; -0.0002 psi(2S) K0 pi0 PHSP; -0.0002 psi(2S) K0 pi- pi+ PHSP; -0.0001 psi(2S) K0 pi0 pi0 PHSP; -0.0001 psi(2S) K+ pi- pi0 PHSP; -0.0004 psi(2S) K_10 PHSP; -# -0.000445 eta_c K_S0 PHSP; -0.000445 eta_c K_L0 PHSP; -# -# -0.00096 K*0 eta_c SVS; -0.0002 eta_c K+ pi- PHSP; -0.0001 eta_c K0 pi0 PHSP; -0.0002 eta_c K0 pi- pi+ PHSP; -0.0001 eta_c K0 pi0 pi0 PHSP; -0.0001 eta_c K+ pi- pi0 PHSP; -# -0.00024 eta_c(2S) K_S0 PHSP; -0.00024 eta_c(2S) K_L0 PHSP; -# -# -0.00066 K*0T eta_c(2S) SVS; -0.00008 eta_c(2S) K+ pi- PHSP; -0.00005 eta_c(2S) K0 pi0 PHSP; -0.00008 eta_c(2S) K0 pi- pi+ PHSP; -0.00005 eta_c(2S) K0 pi0 pi0 PHSP; -0.00005 eta_c(2S) K+ pi- pi0 PHSP; -# -0.00015 chi_c0 K_S0 PHSP; -0.00015 chi_c0 K_L0 PHSP; -# -# -0.0003 K*0 chi_c0 SVS; -0.0002 chi_c0 K+ pi- PHSP; -0.0001 chi_c0 K0 pi0 PHSP; -0.0002 chi_c0 K0 pi- pi+ PHSP; -0.0001 chi_c0 K0 pi0 pi0 PHSP; -0.0001 chi_c0 K+ pi- pi0 PHSP; -# -0.000195 chi_c1 K_S0 SVS; -0.000195 chi_c1 K_L0 SVS; -# -# -0.00032 chi_c1 K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.0004 chi_c1 K+ pi- PHSP; -0.0002 chi_c1 K0 pi0 PHSP; -0.0004 chi_c1 K0 pi- pi+ PHSP; -0.0002 chi_c1 K0 pi0 pi0 PHSP; -0.0002 chi_c1 K+ pi- pi0 PHSP; -# -0.00005 chi_c2 K_S0 STS; -0.00005 chi_c2 K_L0 STS; -# -# -0.00003 chi_c2 K*0 PHSP; -0.0002 chi_c2 K+ pi- PHSP; -0.0001 chi_c2 K0 pi0 PHSP; -0.0002 chi_c2 K0 pi- pi+ PHSP; -0.0001 chi_c2 K0 pi0 pi0 PHSP; -0.0001 chi_c2 K+ pi- pi0 PHSP; -# -0.00024 psi(3770) K_S0 SVS; -0.00024 psi(3770) K_L0 SVS; -# -# -0.00048 psi(3770) K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.00014 psi(3770) K+ pi- PHSP; -0.00014 psi(3770) K0 pi0 PHSP; -0.00014 psi(3770) K0 pi- pi+ PHSP; -0.00007 psi(3770) K0 pi0 pi0 PHSP; -0.00007 psi(3770) K+ pi- pi0 PHSP; -0.00029 psi(3770) K_10 PHSP; -# -### ALREADY Included above 0.0000 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# -# -# b-> c (dc=) -# -0.000211 D- D+ PHSP; -# See Ref [B1] for the next 3: -0.000305 D*- D+ SVS; -0.000305 D*+ D- SVS; -0.00082 D*- D*+ SVV_HELAMP 0.56 0.0 0.96 0.0 0.47 0.0; -# -# b -> c (sc=) --> D Ds X Sum = 10% -# -0.0074 D- D_s+ PHSP; -0.0083 D*- D_s+ SVS; -0.0076 D_s*+ D- SVS; -0.0179 D_s*+ D*- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; -0.0006 D'_1- D_s+ SVS; -0.0012 D'_1- D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0012 D_1- D_s+ SVS; -0.0024 D_1- D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0042 D_2*- D_s+ STS; -0.0040 D_2*- D_s*+ PHSP; -# -0.0018 D_s+ D- pi0 PHSP; -0.0037 D_s+ anti-D0 pi- PHSP; -0.0018 D_s*+ D- pi0 PHSP; -0.0037 D_s*+ anti-D0 pi- PHSP; -0.0030 D_s+ D- pi- pi+ PHSP; -0.0022 D_s+ D- pi0 pi0 PHSP; -0.0022 D_s+ anti-D0 pi- pi0 PHSP; -0.0030 D_s*+ D- pi- pi+ PHSP; -0.0022 D_s*+ D- pi0 pi0 PHSP; -0.0022 D_s*+ anti-D0 pi- pi0 PHSP; -# -# b -> c (sc=) --> D D= K X Sum = 8% -# Update: Ref. [B1] -# October 26, 2004 Lange -per breco awg -# External W-emission amplitude -0.0017 D- D0 K+ PHSP; -0.0046 D- D*0 K+ PHSP; -0.0031 D*- D0 K+ PHSP; -0.0118 D*- D*0 K+ PHSP; -# External+internal W-emission amplitude -0.0015 D- D+ K0 PHSP; -0.0018 D*- D+ K0 PHSP; -0.0047 D- D*+ K0 PHSP; -0.0070 D*- D*+ K0 PHSP; -# Internal W-emission amplitude (color suppressed modes) -0.0005 D0 anti-D0 K0 PHSP; -0.0005 D*0 anti-D0 K0 PHSP; -0.0015 D0 anti-D*0 K0 PHSP; -0.0015 D*0 anti-D*0 K0 PHSP; -########## -# K* modes -########### -0.0025 D- D0 K*+ PHSP; -0.0025 D*- D0 K*+ PHSP; -0.0025 D- D*0 K*+ PHSP; -0.0050 D*- D*0 K*+ PHSP; -# -0.0025 D- D+ K*0 PHSP; -0.0025 D*- D+ K*0 PHSP; -0.0025 D- D*+ K*0 PHSP; -0.0050 D*- D*+ K*0 PHSP; -# -0.0005 D0 anti-D0 K*0 PHSP; -0.0005 D0 anti-D*0 K*0 PHSP; -0.0005 D*0 anti-D0 K*0 PHSP; -0.0010 D*0 anti-D*0 K*0 PHSP; -# -# B -> D(*) X Exclusive modes -# -0.00276 D*- pi+ SVS; -0.00268 D- pi+ PHSP; -0.0077 rho+ D- SVS; -# -# D* rho HELAMP parameters taken from ICHEP 98-852. -0.0068 rho+ D*- SVV_HELAMP 0.317 0.19 0.936 0.0 0.152 1.47; -0.0005 D- pi+ pi0 PHSP; -0.0082 D*- pi+ pi0 PHSP; -0.0005 anti-D0 pi- pi+ PHSP; -0.00062 anti-D*0 pi- pi+ PHSP; -0.0005 anti-D*0 pi0 pi0 PHSP; -# -# D a1 updated Ref. [B1] -0.006 a_1+ D- SVS; -0.0011 D- rho0 pi+ PHSP; -0.0011 D- rho+ pi0 PHSP; -0.0039 D- pi- pi+ pi+ PHSP; -0.0010 D- pi0 pi+ pi0 PHSP; -0.0010 anti-D0 pi- pi+ pi0 PHSP; -0.0001 anti-D0 pi0 pi0 pi0 PHSP; -# -# SVV_HELAMP for D* a1 taken from factorization. Recommandation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: -# updated Ref. [B1] -# October 26, 2004 Lange update -# -0.0130 D*- a_1+ SVV_HELAMP 0.458 0.0 0.866 0.0 0.458 0.0; -# -0.0057 D*- rho0 pi+ PHSP; -0.0010 D*- rho+ pi0 PHSP; -0.0000 D*- pi- pi+ pi+ PHSP; -0.0010 D*- pi0 pi+ pi0 PHSP; -0.0010 anti-D*0 pi- pi+ pi0 PHSP; -0.0001 anti-D*0 pi0 pi0 pi0 PHSP; -# -# B->D** pi and D** rho, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html -# -0.0001 D_1- pi+ SVS; -0.0001 D'_1- pi+ SVS; -0.00006 D_0*- pi+ PHSP; -0.000215 D_2*- pi+ STS; -0.0004 D_1- rho+ PHSP; -0.0013 D'_1- rho+ PHSP; -0.0022 D_2*- rho+ PHSP; -# -# -# B->DK, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: -# update: Ref. [B1]: -# -0.000214 D*- K+ SVS; -0.00020 D- K+ PHSP; -0.00033 D*- K*+ SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; -0.00045 K*+ D- SVS; -#more DK modes - October 26, 2004 -Lange -0.000036 anti-D*0 anti-K0 SVS; -0.000052 anti-D0 anti-K0 PHSP; -0.000042 K*0 anti-D0 SVS; -0.00001 K*0 D0 SVS; -0.00004 anti-D*0 K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; -0.00001 D*0 K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; -# -# -# Color-suppressed modes. Br's are expectations from -# Phys. Rev. D57 (1998), 5363-5369, except for the eta' modes, which are set -# equal to the eta modes. SVV_HELAMP parameters are the same as in D*0 rho-, -# with phases set to 0. Recommendation http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/169.html: -# update: See Ref [B1]: -# further update October 26, 2004 Lange -# -0.000261 anti-D0 pi0 PHSP; -0.00017 anti-D*0 pi0 SVS; -# -0.00032 rho0 anti-D0 SVS; -0.00029 anti-D*0 rho0 SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; -# -0.000202 anti-D0 eta PHSP; -0.00018 anti-D*0 eta SVS; -# -0.000125 anti-D0 eta' PHSP; -0.000123 anti-D*0 eta' SVS; -# -0.000259 omega anti-D0 SVS; -0.00027 anti-D*0 omega SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; -# -# PR LHCb : add ppbar mode -0.0000001 p+ anti-p- PHSP; -# -#October 26, 2004 - Lange -0.0016 D_s0*+ D- PHSP; -0.0015 D*- D_s0*+ SVS; -0.0042 D_s1+ D- SVS; -0.0093 D*- D_s1+ SVV_HELAMP 0.4904 0. 0.7204 0. 0.4904 0.; -# -# Feb 2009 -# -0.00088 D- K+ anti-K*0 PHSP; -0.00129 D*- K+ anti-K*0 PHSP; -# -# Feb 2009 -# -0.0028 D- omega pi+ PHSP; -0.00289 D*- omega pi+ PHSP; -# -# Feb 2009 -# -0.00049 D- K0 pi+ PHSP; -0.0003 D*- K0 pi+ PHSP; -# -# Feb 2009 -# -0.00043 D'_s1+ D- PHSP; -0.00083 D'_s1+ D*- PHSP; -#### Already included above 0.0023 D_s1+ D*- PHSP; -# -# Lam_c X / Sigma_c X 4.0 % -# -#0.01000 anti-cd_0 ud_0 PYTHIA 23; -#0.03000 anti-cd_1 ud_1 PYTHIA 23; -0.0110747 anti-cd_0 ud_0 PYTHIA 23; -0.0221495 anti-cd_1 ud_1 PYTHIA 23; -# -# Xi_c X 2.5% -# -#0.00600 anti-cs_0 ud_0 PYTHIA 23; -#0.01800 anti-cs_1 ud_1 PYTHIA 23; -0.0030204 anti-cs_0 ud_0 PYTHIA 23; -0.0060408 anti-cs_1 ud_1 PYTHIA 23; -# -# -0.2716831 u anti-d anti-c d PYTHIA 48; -0.0463125 u anti-d anti-c d PYTHIA 13; -0.0211427 u anti-s anti-c d PYTHIA 13; -0.0181223 u anti-c anti-d d PYTHIA 48; -0.0009061 u anti-c anti-s d PYTHIA 48; -#lange - try to crank up the psi production.... -0.0745027 c anti-s anti-c d PYTHIA 13; -0.0060408 c anti-d anti-c d PYTHIA 13; -0.0030204 u anti-d anti-u d PYTHIA 48; -0.0040272 c anti-s anti-u d PYTHIA 48; -# JGS 11/5/02 This and similar a few lines above have been divided by two -# to solve a double-counting problem for this channel -0.0020639 u anti-u anti-d d PYTHIA 48; -0.0000705 d anti-d anti-d d PYTHIA 48; -0.0000906 s anti-s anti-d d PYTHIA 48; -0.0022149 u anti-u anti-s d PYTHIA 48; -0.0018122 d anti-d anti-s d PYTHIA 48; -0.0015102 s anti-s anti-s d PYTHIA 48; -0.005034 anti-s d PYTHIA 32; -Enddecay -# -# -# -Decay B- -# Updated to PDG 2008 -# b -> c semileptonic -# -0.0607 D*0 e- anti-nu_e PHOTOS HQET 0.77 1.33 0.92; -0.0227 D0 e- anti-nu_e PHOTOS ISGW2; -0.0040 D_10 e- anti-nu_e PHOTOS ISGW2; -0.0024 D_0*0 e- anti-nu_e PHOTOS ISGW2; -0.0007 D'_10 e- anti-nu_e PHOTOS ISGW2; -0.0018 D_2*0 e- anti-nu_e PHOTOS ISGW2; -0.0061 D*+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0003 D*0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -# covered by other decays -0.0000 D+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0010 D0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -# -0.0607 D*0 mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; -0.0227 D0 mu- anti-nu_mu PHOTOS ISGW2; -0.0040 D_10 mu- anti-nu_mu PHOTOS ISGW2; -0.0024 D_0*0 mu- anti-nu_mu PHOTOS ISGW2; -0.0007 D'_10 mu- anti-nu_mu PHOTOS ISGW2; -0.0018 D_2*0 mu- anti-nu_mu PHOTOS ISGW2; -0.0061 D*+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0003 D*0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0000 D+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0010 D0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -# -# b -> c tau nu -# -0.0220 D*0 tau- anti-nu_tau ISGW2; -0.0070 D0 tau- anti-nu_tau ISGW2; -0.0013 D_10 tau- anti-nu_tau ISGW2; -0.0013 D_0*0 tau- anti-nu_tau ISGW2; -0.0020 D'_10 tau- anti-nu_tau ISGW2; -0.0020 D_2*0 tau- anti-nu_tau ISGW2; -# -# b -> u l nu -# -# NOTE: Do NOT CHANGE any BFs without using the corresponding set of -# hybrid weights (and vice versa). - -0.000077 pi0 e- anti-nu_e PHOTOS ISGW2; -0.000084 eta e- anti-nu_e PHOTOS ISGW2; -0.000128 rho0 e- anti-nu_e PHOTOS ISGW2; -0.000130 omega e- anti-nu_e PHOTOS ISGW2; -0.000270 eta' e- anti-nu_e PHOTOS ISGW2; -0.000000 D(2S)0 e- anti-nu_e PHOTOS ISGW2; -0.000000 D*(2S)0 e- anti-nu_e PHOTOS ISGW2; -0.001948 Xu0 e- anti-nu_e VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; -# -0.000077 pi0 mu- anti-nu_mu PHOTOS ISGW2; -0.000084 eta mu- anti-nu_mu PHOTOS ISGW2; -0.000128 rho0 mu- anti-nu_mu PHOTOS ISGW2; -0.000130 omega mu- anti-nu_mu PHOTOS ISGW2; -0.000270 eta' mu- anti-nu_mu PHOTOS ISGW2; -0.000000 D(2S)0 mu- anti-nu_mu PHOTOS ISGW2; -0.000000 D*(2S)0 mu- anti-nu_mu PHOTOS ISGW2; -0.001948 Xu0 mu- anti-nu_mu VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; -# -0.000030 pi0 tau- anti-nu_tau ISGW2; -0.000012 eta tau- anti-nu_tau ISGW2; -0.000042 rho0 tau- anti-nu_tau ISGW2; -0.000042 omega tau- anti-nu_tau ISGW2; -0.000018 eta' tau- anti-nu_tau ISGW2; -0.000046 a_10 tau- anti-nu_tau ISGW2; -0.000027 b_10 tau- anti-nu_tau ISGW2; -0.000004 a_00 tau- anti-nu_tau ISGW2; -0.000002 f_0 tau- anti-nu_tau ISGW2; -0.000002 f'_0 tau- anti-nu_tau ISGW2; -0.000023 f_1 tau- anti-nu_tau ISGW2; -0.000023 f'_1 tau- anti-nu_tau ISGW2; -0.000013 h_1 tau- anti-nu_tau ISGW2; -0.000013 h'_1 tau- anti-nu_tau ISGW2; -0.000020 f_2 tau- anti-nu_tau ISGW2; -0.000020 f'_2 tau- anti-nu_tau ISGW2; -0.000000 D(2S)0 tau- anti-nu_tau ISGW2; -0.000000 D*(2S)0 tau- anti-nu_tau ISGW2; -# -# -# -# b->u hadronic -# Ref. [B1]: -# -0.000016 D_s- pi0 PHSP; -0.000020 D_s*- pi0 SVS; -# -0.000028 rho0 D_s- SVS; -0.000028 D_s*- rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - -# -# b-> s gamma -# -0.0000403 K*- gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000135 K_1- gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000065 K'_1- gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000128 K'*- gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000166 K_2*- gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000017 K''*- gamma HELAMP 1.0 0.0 1.0 0.0; -0.0003118 anti-Xsu gamma BTOXSGAMMA 2 ; -# -0.0000006 K- e+ e- PHOTOS BTOSLLBALL; -0.0000018 K*- e+ e- PHOTOS BTOSLLBALL; -0.0000050 anti-Xsu e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.0000006 K- mu+ mu- PHOTOS BTOSLLBALL; -0.0000014 K*- mu+ mu- PHOTOS BTOSLLBALL; -0.0000025 anti-Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.0000001 K- tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 K*- tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 anti-Xsu tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -# -# b -> l nu -# -0.000140 tau- anti-nu_tau SLN; -0.000000 mu- anti-nu_mu PHOTOS SLN; -0.000000 e- anti-nu_e PHOTOS SLN; -# -#------------------------------------------------------------------------------ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv -# -# Exclusive hadronic b->u -# -0.000026 pi- pi0 pi0 CB3PI-P00 alpha; -0.000000 pi- pi- pi+ CB3PI-MPP alpha; -#### -0.0000044 eta pi- PHSP; -0.0000027 eta K- PHSP; -0.0000193 K*- eta SVS; -0.0000054 rho- eta SVS; -0.0000027 eta' pi- PHSP; -0.0000702 eta' K- PHSP; -0.0000049 K*- eta' SVS; -0.0000087 rho- eta' SVS; -0.0000069 omega pi- SVS; -0.0000067 omega K- SVS; -0.0000010 omega K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000106 omega rho- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000000 phi pi- SVS; -0.0000083 phi K- SVS; -#2-body modes from Jim Olsen -# (K_S0 K- and K_L0 K- -> 1x10^-6, Jim Olsen - Mar 27, 2001) -# (pi- pi0 -> 5x10^-6 and K- pi0 -> 11x10^-6, Jim Olsen - Mar 27, 2001) -# PR LHCb 04/08/2004 Split into Ks/KL -0.000000 anti-K0 pi- PHSP; -0.0000115 K_S0 pi- PHSP; -0.0000115 K_L0 pi- PHSP; -0.0000014 K0 K- PHSP; -0.0000057 pi- pi0 PHSP; -0.0000129 K- pi0 PHSP; -# -# 3-body John Back (jback@slac.stanford.edu) - Oct 15, 2002 -# JGS intersperses modes with pi0->eta,eta' -# B- modes -# -# rho0 3-body modes -0.0000086 rho0 pi- SVS; -0.0000042 rho0 K- SVS; -# -# rho- 3-body modes -0.0000109 rho- anti-K0 SVS; -0.0000080 rho- pi0 SVS; -# -# rho(1450) 3-body modes -0.0000022 rho(2S)0 pi- SVS; -0.000001 rho(2S)0 K- SVS; -# -# f0,a0(980) 3-body modes -0.000001 f_0 pi- PHSP; -0.0000092 f_0 K- PHSP; -0.000001 a_0- anti-K0 PHSP; -0.000001 a_00 K- PHSP; -0.000001 a_00 pi- PHSP; -0.000001 a_0- pi0 PHSP; - -0.0000081 f_2 pi- PHSP; - -# -# K*(1430) 3-body modes -0.0000109 anti-K_0*0 pi- PHSP; -0.000001 K_0*0 K- PHSP; -0.000002 K_0*- pi0 PHSP; -0.000002 K_0*- K0 PHSP; -# -# K*-(892) 3-body modes -0.0000069 K*- pi0 SVS; -0.0000030 K*- K0 SVS; -# -# -# -# Non-resonant 3-body left-overs -# Most modes are set at 1e-6 -# -# pi-pi+pi-: high mass + f0(400-1200) = (1+1)e-6 -#0402270.000002 pi- pi+ pi- PHSP; -# -# K- pi+ pi-: high mass + f0(400-1200) = (5+5)e-6 -0.0000060 K- pi+ pi- PHSP; -# -# K- K+ pi-: just non-resonant -0.0000050 K- K+ pi- PHSP; -# -# K- K+ K-: high mass structure near 1500 + non-res: total - phiK = 30 - 4 -0.0000280 K- K+ K- PHSP; -# -# -# K-K-pi+: suppressed mode (1e-7) -0.0000001 K- K- pi+ PHSP; -# K+pi-pi-: suppressed mode (1e-7) -0.0000001 K+ pi- pi- PHSP; -# -# -# K- K0 pi0 -0.000001 K- K0 pi0 PHSP; -0.000001 K- K0 eta PHSP; -0.000001 K- K0 eta' PHSP; -# -# pi- anti-K0 pi0 -0.000001 pi- anti-K0 pi0 PHSP; -0.000001 pi- anti-K0 eta PHSP; -0.000001 pi- anti-K0 eta' PHSP; -# -# pi- pi0 pi0 -#0402270.000001 pi- pi0 pi0 PHSP; -0.000001 pi- pi0 eta PHSP; -0.000001 pi- pi0 eta' PHSP; -0.000001 pi- eta eta PHSP; -0.000001 pi- eta eta' PHSP; -# -# K- pi0 pi0 -0.000001 K- pi0 pi0 PHSP; -0.000001 K- pi0 eta PHSP; -0.000001 K- pi0 eta' PHSP; -0.000001 K- eta eta PHSP; -0.000001 K- eta eta' PHSP; -0.000001 K- eta' eta' PHSP; -# -# K- anti-K0 K0: 4*BF(K+KsKs) (4 is a guess) -0.000046 K- anti-K0 K0 PHSP; -# -# pi- anti-K0 K0 -0.000001 pi- anti-K0 K0 PHSP; -# -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#--------------------------------------------------------------------------- -# -#4-body modes from Andrei Gritsan -#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- -# PR LHCb 22 Apr 2004 Set long. pol. for rho rho -0.000018 rho- rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; -0.000010 rho0 pi- pi0 PHSP; -0.000005 rho0 pi- eta PHSP; -0.000002 rho0 pi- eta' PHSP; -0.000010 omega pi- pi0 PHSP; -0.000005 omega pi- eta PHSP; -0.000002 omega pi- eta' PHSP; -0.000010 rho- pi- pi+ PHSP; -# PR LHCb Add rho+ pi- pi- -0.000010 rho+ pi- pi- PHSP; -0.000010 rho- pi0 pi0 PHSP; -0.000005 rho- pi0 eta PHSP; -0.000002 rho- eta eta PHSP; -0.000002 rho- pi0 eta' PHSP; -0.000010 pi+ pi- pi- pi0 PHSP; -0.000005 pi+ pi- pi- eta PHSP; -0.000002 pi+ pi- pi- eta' PHSP; -0.000010 pi- pi0 pi0 pi0 PHSP; -0.000005 pi- eta pi0 pi0 PHSP; -0.000002 pi- eta eta pi0 PHSP; -0.000002 pi- eta' pi0 pi0 PHSP; -0.000001 pi- eta' eta pi0 PHSP; -0.00002 a_10 pi- SVS; -0.000026 a_1- pi0 SVS; -0.0000067 b_10 pi- SVS; -0.000010 b_1- pi0 SVS; -0.000010 rho- f_0 SVS; -0.000010 rho- a_00 SVS; -0.000002 rho0 a_0- SVS; -0.000010 f_0 pi- pi0 PHSP; -0.000001 a_00 pi- pi0 PHSP; -0.000001 a_0- pi0 pi0 PHSP; -0.000001 a_0+ pi- pi- PHSP; -#--- 4-body rho-K*, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- -0.0000092 rho- anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000010 rho0 K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000010 pi- pi0 anti-K*0 PHSP; -0.000005 pi- eta anti-K*0 PHSP; -0.0000638 pi+ pi- K*- PHSP; -0.000010 pi0 pi0 K*- PHSP; -0.000005 pi0 eta K*- PHSP; -0.000002 eta eta K*- PHSP; -0.000002 pi0 eta' K*- PHSP; -0.000001 eta eta' K*- PHSP; -0.000010 rho- anti-K0 pi0 PHSP; -0.000005 rho- anti-K0 eta PHSP; -0.000002 rho- anti-K0 eta' PHSP; -0.000010 rho- K- pi+ PHSP; -0.000010 rho+ K- pi- PHSP; -0.000005 rho0 anti-K0 pi- PHSP; -0.000005 rho0 K- pi0 PHSP; -0.000002 rho0 K- eta PHSP; -0.000001 rho0 K- eta' PHSP; -0.000005 omega anti-K0 pi- PHSP; -0.000005 omega K- pi0 PHSP; -0.000002 omega K- eta PHSP; -0.000001 omega K- eta' PHSP; -0.000010 pi+ pi- pi- anti-K0 PHSP; -0.000010 pi- pi0 pi0 anti-K0 PHSP; -0.000005 pi- eta pi0 anti-K0 PHSP; -0.000002 pi- eta eta anti-K0 PHSP; -0.000010 pi+ pi- pi0 K- PHSP; -0.000005 pi+ pi- eta K- PHSP; -0.000010 pi0 pi0 pi0 K- PHSP; -0.000005 pi0 pi0 eta K- PHSP; -0.000002 pi0 eta eta K- PHSP; -0.000002 pi0 pi0 eta' K- PHSP; -0.000001 pi0 eta eta' K- PHSP; -0.000010 rho- anti-K_0*0 PHSP; -0.000006 rho0 K_0*- PHSP; -0.000010 pi- pi0 anti-K_0*0 PHSP; -0.000010 pi0 pi0 K_0*- PHSP; -0.0000052 K*- f_0 SVS; -0.000010 a_10 K- SVS; -0.000035 a_1- anti-K0 SVS; -0.0000091 b_10 K- SVS; -0.000010 b_1- anti-K0 SVS; -0.000005 K*- a_00 SVS; -0.000005 anti-K*0 a_0- SVS; -#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ -0.000001 K*0 K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 phi rho- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 phi pi- pi0 PHSP; -0.0000005 phi pi- eta PHSP; -0.0000002 phi pi- eta' PHSP; -0.000001 K+ K- rho- PHSP; -0.000001 K0 anti-K0 rho- PHSP; -0.000001 K0 K- rho0 PHSP; -0.000001 K0 K- omega PHSP; -0.000001 K+ K- pi- pi0 PHSP; -0.0000005 K+ K- pi- eta PHSP; -0.0000002 K+ K- pi- eta' PHSP; -0.000001 K0 anti-K0 pi- pi0 PHSP; -0.0000005 K0 anti-K0 pi- eta PHSP; -0.0000002 K0 anti-K0 pi- eta' PHSP; -0.000001 K0 K- pi+ pi- PHSP; -0.000001 K0 K- pi0 pi0 PHSP; -0.0000005 K0 K- pi0 eta PHSP; -0.0000002 K0 K- eta eta PHSP; -0.0000002 K0 K- pi0 eta' PHSP; -0.0000001 K0 K- eta eta' PHSP; -0.000001 K*+ K- pi- PHSP; -0.000001 K*- K+ pi- PHSP; -0.000001 K*0 anti-K0 pi- PHSP; -0.000001 K0 anti-K*0 pi- PHSP; -0.000001 K- K*0 pi0 PHSP; -0.0000005 K- K*0 eta PHSP; -0.0000002 K- K*0 eta' PHSP; -0.000001 K*- K0 pi0 PHSP; -0.0000005 K*- K0 eta PHSP; -0.0000002 K*- K0 eta' PHSP; -#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- -0.0000105 phi K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000010 phi anti-K0 pi- PHSP; -0.000010 phi K- pi0 PHSP; -0.000005 phi K- eta PHSP; -0.000002 phi K- eta' PHSP; -0.000010 K- K+ K*- PHSP; -0.000010 K- K*+ K- PHSP; -0.000010 K- K*0 anti-K0 PHSP; -0.000010 K- K0 anti-K*0 PHSP; -0.000010 K0 K*- anti-K0 PHSP; -0.000010 K+ K- K- pi0 PHSP; -0.000005 K+ K- K- eta PHSP; -0.000002 K+ K- K- eta' PHSP; -0.000010 K+ K- anti-K0 pi- PHSP; -0.000010 K0 anti-K0 K- pi0 PHSP; -0.000005 K0 anti-K0 K- eta PHSP; -0.000002 K0 anti-K0 K- eta' PHSP; -0.000010 K0 anti-K0 anti-K0 pi- PHSP; -0.000010 phi K_0*- PHSP; -0.000010 K- K+ K_0*- PHSP; -0.000010 K- K- K_0*+ PHSP; -0.000010 K- anti-K_0*0 K0 PHSP; -0.000010 K- K_0*0 anti-K0 PHSP; -0.000002 phi K'_1- PHSP; -0.000002 K- K+ K'_1- PHSP; -#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- -0.000001 phi K0 K- PHSP; -0.000001 K+ K- K- K0 PHSP; -0.000001 K0 anti-K0 K0 K- PHSP; -# -#5-body modes from Jim Smith - 1/30/05 -#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- -0.000010 rho0 rho0 pi- PHSP; -0.000010 rho- rho0 pi0 PHSP; -0.000005 rho- rho0 eta PHSP; -0.000002 rho- rho0 eta' PHSP; -0.000010 rho+ rho- pi- PHSP; -0.000010 omega rho0 pi- PHSP; -0.000010 omega rho- pi0 PHSP; -0.000005 omega rho- eta PHSP; -0.000002 omega rho- eta' PHSP; -0.000002 rho0 pi+ pi- pi- PHSP; -0.000002 rho0 pi- pi0 pi0 PHSP; -0.000001 rho0 pi- eta pi0 PHSP; -0.000001 rho0 pi- eta' pi0 PHSP; -0.000002 omega pi- pi0 pi0 PHSP; -0.000001 omega pi- eta pi0 PHSP; -0.000001 omega pi- eta' pi0 PHSP; -0.000002 rho+ pi- pi- pi0 PHSP; -0.000001 rho+ pi- pi- eta PHSP; -0.000001 rho+ pi- pi- eta' PHSP; -0.000002 rho- pi+ pi- pi0 PHSP; -0.000001 rho- pi+ pi- eta PHSP; -0.000001 rho- pi+ pi- eta' PHSP; -0.000002 rho- pi0 pi0 pi0 PHSP; -0.000001 rho- pi0 eta pi0 PHSP; -0.000001 rho- eta eta pi0 PHSP; -0.000001 rho- pi0 eta' pi0 PHSP; -0.000001 pi+ pi- pi- pi0 pi0 PHSP; -0.000001 pi+ pi- pi- eta pi0 PHSP; -0.000001 pi+ pi- pi- eta' pi0 PHSP; -0.000001 pi- pi0 pi0 pi0 pi0 PHSP; -0.000001 pi- eta pi0 pi0 pi0 PHSP; -0.000001 pi- eta' pi0 pi0 pi0 PHSP; -0.000010 a_1- rho0 PHSP; -0.000010 a_1- omega PHSP; -0.000010 a_1- f_0 PHSP; -0.000010 a_10 pi- pi0 PHSP; -0.000005 a_10 pi- eta PHSP; -0.000002 a_10 pi- eta' PHSP; -0.000010 a_1+ pi- pi- PHSP; -0.000010 a_1- pi+ pi- PHSP; -0.000010 a_1- pi0 pi0 PHSP; -0.000005 a_1- pi0 eta PHSP; -0.000002 a_1- pi0 eta' PHSP; -0.000010 rho- f_0 pi0 PHSP; -0.000005 rho- f_0 eta PHSP; -0.000002 rho- f_0 eta' PHSP; -0.000010 rho0 f_0 pi- PHSP; -0.000010 omega f_0 pi- PHSP; -0.000010 rho- a_00 pi0 PHSP; -0.000005 rho- a_00 eta PHSP; -0.000002 rho- a_00 eta' PHSP; -0.000010 rho+ a_0- pi- PHSP; -0.000010 rho0 a_0- pi0 PHSP; -0.000005 rho0 a_0- eta PHSP; -0.000002 rho0 a_0- eta' PHSP; -0.000002 f_0 pi+ pi- pi- PHSP; -0.000002 f_0 pi- pi0 pi0 PHSP; -0.000001 f_0 pi- pi0 eta PHSP; -0.000001 f_0 pi- pi0 eta' PHSP; -0.000001 a_00 pi- pi0 pi0 PHSP; -0.000001 a_0- pi0 pi0 pi0 PHSP; -0.000001 a_0+ pi- pi- pi0 PHSP; -#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- -0.000010 rho- K*- pi+ PHSP; -0.000010 rho+ K*- pi- PHSP; -0.000010 rho- anti-K*0 pi0 PHSP; -0.000005 rho- anti-K*0 eta PHSP; -0.000002 rho- anti-K*0 eta' PHSP; -0.000010 rho0 anti-K*0 pi- PHSP; -0.000010 rho0 K*- pi0 PHSP; -0.000005 rho0 K*- eta PHSP; -0.000002 rho0 K*- eta' PHSP; -0.000010 omega anti-K*0 pi- PHSP; -0.000010 omega K*- pi0 PHSP; -0.000005 omega K*- eta PHSP; -0.000002 omega K*- eta' PHSP; -0.000010 pi+ pi- anti-K*0 pi- PHSP; -0.000010 pi- pi0 anti-K*0 pi0 PHSP; -0.000005 pi- eta anti-K*0 pi0 PHSP; -0.000002 pi- eta' anti-K*0 pi0 PHSP; -0.000010 pi- pi+ K*- pi0 PHSP; -0.000005 pi- pi+ K*- eta PHSP; -0.000002 pi- pi+ K*- eta' PHSP; -0.000010 pi0 pi0 K*- pi0 PHSP; -0.000005 pi0 eta K*- pi0 PHSP; -0.000002 eta eta K*- pi0 PHSP; -0.000002 pi0 eta' K*- pi0 PHSP; -0.000001 eta eta' K*- pi0 PHSP; -0.000010 rho- anti-K0 pi+ pi- PHSP; -0.000010 rho- anti-K0 pi0 pi0 PHSP; -0.000005 rho- anti-K0 eta pi0 PHSP; -0.000002 rho- anti-K0 eta' pi0 PHSP; -0.000010 rho- K- pi+ pi0 PHSP; -0.000010 rho+ K- pi- pi0 PHSP; -0.000010 rho+ anti-K0 pi- pi- PHSP; -0.000010 rho0 anti-K0 pi- pi0 PHSP; -0.000010 rho0 K- pi0 pi0 PHSP; -0.000005 rho0 K- eta pi0 PHSP; -0.000002 rho0 K- eta' pi0 PHSP; -0.000010 omega anti-K0 pi- pi0 PHSP; -0.000010 omega K- pi0 pi0 PHSP; -0.000005 omega K- eta pi0 PHSP; -0.000002 omega K- eta' pi0 PHSP; -0.000002 pi- pi- pi+ anti-K0 pi0 PHSP; -0.000001 pi- pi- pi+ anti-K0 eta PHSP; -0.000001 pi- pi- pi+ anti-K0 eta' PHSP; -0.000002 pi- pi0 pi0 anti-K0 pi0 PHSP; -0.000001 pi- eta pi0 anti-K0 pi0 PHSP; -0.000001 pi- eta eta anti-K0 pi0 PHSP; -0.000002 pi+ pi- pi+ K- pi- PHSP; -0.000002 pi+ pi- pi0 K- pi0 PHSP; -0.000001 pi+ pi- eta K- pi0 PHSP; -0.000001 pi+ pi- eta' K- pi0 PHSP; -0.000002 pi0 pi0 pi0 K- pi0 PHSP; -0.000001 pi0 pi0 eta K- pi0 PHSP; -0.000001 pi0 eta eta K- pi0 PHSP; -0.000001 pi0 pi0 eta' K- pi0 PHSP; -0.000001 pi0 eta eta' K- pi0 PHSP; -0.000010 rho0 anti-K_0*0 pi- PHSP; -0.000010 rho- anti-K_0*0 pi0 PHSP; -0.000005 rho- anti-K_0*0 eta PHSP; -0.000002 rho- anti-K_0*0 eta' PHSP; -0.000010 rho- K_0*- pi+ PHSP; -0.000010 rho0 K_0*- pi0 PHSP; -0.000005 rho0 K_0*- eta PHSP; -0.000002 rho0 K_0*- eta' PHSP; -0.000010 pi- pi- anti-K_0*0 pi+ PHSP; -0.000010 pi- pi0 anti-K_0*0 pi0 PHSP; -0.000005 pi- pi0 anti-K_0*0 eta PHSP; -0.000002 pi- pi0 anti-K_0*0 eta' PHSP; -0.000010 pi0 pi0 K_0*- pi0 PHSP; -0.000005 pi0 pi0 K_0*- eta PHSP; -0.000002 pi0 pi0 K_0*- eta' PHSP; -0.000010 anti-K*0 f_0 pi- PHSP; -0.000010 K*- f_0 pi0 PHSP; -0.000005 K*- f_0 eta PHSP; -0.000002 K*- f_0 eta' PHSP; -0.000020 a_10 K*- PHSP; -0.000010 a_10 K- pi0 PHSP; -0.000010 a_10 anti-K0 pi- PHSP; -0.000020 a_1- anti-K*0 PHSP; -0.000010 a_1- K- pi+ PHSP; -0.000010 a_1- anti-K0 pi0 PHSP; -0.000005 K*- a_00 pi0 PHSP; -0.000005 anti-K*0 a_0- pi0 PHSP; -#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ -0.000001 K*0 anti-K*0 pi- PHSP; -0.000001 K*0 K*- pi0 PHSP; -0.0000005 K*0 K*- eta PHSP; -0.0000002 K*0 K*- eta' PHSP; -0.000001 phi rho0 pi- PHSP; -0.000001 phi omega pi- PHSP; -0.000001 phi f_0 pi- PHSP; -0.000001 phi rho- pi0 PHSP; -0.0000005 phi rho- eta PHSP; -0.0000002 phi rho- eta' PHSP; -0.000001 phi pi+ pi- pi- PHSP; -0.000001 phi pi- pi0 pi0 PHSP; -0.0000005 phi pi- eta pi0 PHSP; -0.0000002 phi pi- eta' pi0 PHSP; -0.000001 K0 K- rho+ pi- PHSP; -0.000001 K0 K- rho- pi+ PHSP; -0.000001 K0 K- rho0 pi0 PHSP; -0.0000005 K0 K- rho0 eta PHSP; -0.0000002 K0 K- rho0 eta' PHSP; -0.000001 K0 K- omega pi0 PHSP; -0.000001 K0 K- f_0 pi0 PHSP; -0.000001 K+ K- rho0 pi- PHSP; -0.000001 K+ K- rho- pi0 PHSP; -0.0000005 K+ K- rho- eta PHSP; -0.0000002 K+ K- rho- eta' PHSP; -0.000001 K+ K- omega pi- PHSP; -0.000001 K0 anti-K0 rho0 pi- PHSP; -0.000001 K0 anti-K0 omega pi- PHSP; -0.000001 K0 anti-K0 f_0 pi- PHSP; -0.000001 K0 anti-K0 rho- pi0 PHSP; -0.0000005 K0 anti-K0 rho- eta PHSP; -0.0000002 K0 anti-K0 rho- eta' PHSP; -0.000001 anti-K0 K+ rho- pi- PHSP; -0.0000002 anti-K0 K+ pi- pi- pi0 PHSP; -0.0000001 anti-K0 K+ pi- pi- eta PHSP; -0.0000001 anti-K0 K+ pi- pi- eta' PHSP; -0.0000002 K+ K- pi+ pi- pi- PHSP; -0.0000002 K+ K- pi- pi0 pi0 PHSP; -0.0000001 K+ K- pi- eta pi0 PHSP; -0.0000001 K+ K- pi- eta' pi0 PHSP; -0.0000002 K0 anti-K0 pi+ pi- pi- PHSP; -0.0000002 K0 anti-K0 pi- pi0 pi0 PHSP; -0.0000001 K0 anti-K0 pi- eta pi0 PHSP; -0.0000001 K0 anti-K0 pi- eta' pi0 PHSP; -0.0000002 K0 K- pi+ pi- pi0 PHSP; -0.0000001 K0 K- pi+ pi- eta PHSP; -0.0000001 K0 K- pi+ pi- eta' PHSP; -0.0000002 K0 K- pi0 pi0 pi0 PHSP; -0.0000001 K0 K- pi0 eta pi0 PHSP; -0.0000001 K0 K- pi0 eta' pi0 PHSP; -0.000001 anti-K*0 K+ pi- pi- PHSP; -0.000001 K*+ anti-K0 pi- pi- PHSP; -0.000001 K*- K+ pi- pi0 PHSP; -0.000001 K*+ K- pi- pi0 PHSP; -0.000001 K*0 anti-K0 pi- pi0 PHSP; -0.000001 K0 anti-K*0 pi- pi0 PHSP; -0.000001 K- K*0 pi0 pi0 PHSP; -0.0000005 K- K*0 eta pi0 PHSP; -0.0000002 K- K*0 eta' pi0 PHSP; -0.000001 K*- K0 pi0 pi0 PHSP; -0.0000005 K*- K0 eta pi0 PHSP; -0.0000002 K*- K0 eta' pi0 PHSP; -#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- -0.000010 phi K*- pi0 PHSP; -0.000010 phi K- rho0 PHSP; -0.000010 phi K- omega PHSP; -0.000010 phi K- f_0 PHSP; -0.000010 phi anti-K0 rho- PHSP; -0.000010 phi anti-K0 pi- pi0 PHSP; -0.000010 phi K- pi+ pi- PHSP; -0.000010 phi K- pi0 pi0 PHSP; -0.000005 phi K- eta pi0 PHSP; -0.000002 phi K- eta' pi0 PHSP; -0.000010 K+ K- K*- pi0 PHSP; -0.000010 K- K*+ K- pi0 PHSP; -0.000010 K- K*0 anti-K0 pi0 PHSP; -0.000010 K- K0 anti-K*0 pi0 PHSP; -0.000010 K0 K*- anti-K0 pi0 PHSP; -0.000010 K+ K- K- rho0 PHSP; -0.000010 K+ K- K- omega PHSP; -0.000010 K+ K- K- f_0 PHSP; -0.000010 K- K+ anti-K0 rho- PHSP; -0.000010 K- K- K+ pi0 pi0 PHSP; -0.000005 K- K- K+ eta pi0 PHSP; -0.000002 K- K- K+ eta' pi0 PHSP; -0.000010 K+ K- anti-K0 pi- pi0 PHSP; -0.000010 K0 anti-K0 K- pi0 pi0 PHSP; -0.000005 K0 anti-K0 K- eta pi0 PHSP; -0.000002 K0 anti-K0 K- eta' pi0 PHSP; -0.000010 K0 anti-K0 anti-K0 pi- pi0 PHSP; -0.000010 phi anti-K_0*0 pi- PHSP; -0.000010 phi K_0*- pi0 PHSP; -0.000005 phi K_0*- eta PHSP; -0.000002 phi K_0*- eta' PHSP; -0.000010 K- K+ K_0*- pi0 PHSP; -0.000005 K- K+ K_0*- eta PHSP; -0.000002 K- K+ K_0*- eta' PHSP; -0.000010 K- K- K_0*+ pi0 PHSP; -0.000005 K- K- K_0*+ eta PHSP; -0.000002 K- K- K_0*+ eta' PHSP; -0.000010 K- K+ anti-K_0*0 pi- PHSP; -0.000010 K- K- K_0*0 pi+ PHSP; -0.000010 anti-K0 anti-K0 K_0*0 pi- PHSP; -0.000010 K- anti-K_0*0 K0 pi0 PHSP; -0.000005 K- anti-K_0*0 K0 eta PHSP; -0.000002 K- anti-K_0*0 K0 eta' PHSP; -0.000010 K- K_0*0 anti-K0 pi0 PHSP; -0.000005 K- K_0*0 anti-K0 eta PHSP; -0.000002 K- K_0*0 anti-K0 eta' PHSP; -0.000002 phi anti-K'_10 pi- PHSP; -0.000002 phi K'_1- pi0 PHSP; -0.000001 phi K'_1- eta PHSP; -0.000001 phi K'_1- eta' PHSP; -0.000002 K- K+ anti-K'_10 pi- PHSP; -0.000002 K- K+ K'_1- pi0 PHSP; -0.000001 K- K+ K'_1- eta PHSP; -0.000001 K- K+ K'_1- eta' PHSP; -0.000002 K- K- K'_1+ pi0 PHSP; -0.000002 K- K- anti-K'_10 pi+ PHSP; -0.000002 K0 anti-K0 anti-K'_10 pi- PHSP; -0.000002 K0 anti-K0 K'_1- pi0 PHSP; -0.000001 K0 anti-K0 K'_1- eta PHSP; -0.000001 K0 anti-K0 K'_1- eta' PHSP; -0.000002 anti-K0 anti-K0 K'_10 pi- PHSP; -0.000002 K0 K0 K'_1- pi0 PHSP; -0.000001 K0 K0 K'_1- eta PHSP; -0.000001 K0 K0 K'_1- eta' PHSP; -0.000010 K- K0 anti-K'_10 pi0 PHSP; -0.000005 K- K0 anti-K'_10 eta PHSP; -0.000002 K- K0 anti-K'_10 eta' PHSP; -0.000010 K- K'_10 anti-K0 pi0 PHSP; -0.000005 K- K'_10 anti-K0 eta PHSP; -0.000002 K- K'_10 anti-K0 eta' PHSP; -#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ -0.000003 phi phi K- PHSP; -0.000001 phi phi pi- PHSP; -0.000001 phi K+ K- K- PHSP; -0.000001 phi K0 anti-K0 K- PHSP; -0.000001 phi K0 anti-K0 pi- PHSP; -0.000001 phi K0 K- pi0 PHSP; -0.000001 K+ K- K+ K- pi- PHSP; -0.000001 K+ K- K0 anti-K0 pi- PHSP; -0.000001 K+ K- K- K0 pi0 PHSP; -0.000001 K0 anti-K0 K0 K- pi0 PHSP; -#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ -0.000003 phi phi K*- PHSP; -0.000001 phi K+ K- K*- PHSP; -0.000001 phi K0 anti-K0 K*- PHSP; -0.000001 phi K0 K- K*0 PHSP; -0.000001 phi K+ K- K- pi0 PHSP; -0.000001 phi K+ K- anti-K0 pi- PHSP; -0.000001 phi K0 anti-K0 K- pi0 PHSP; -0.000001 phi K0 anti-K0 anti-K0 pi- PHSP; -0.000001 phi K0 K- K- pi+ PHSP; -#--- 6-body a1a1 ------------ -0.000050 a_1- a_10 PHSP; -# -# B -> cc= s sum = 1.92% -# -0.001007 J/psi K- SVS; -0.00143 J/psi K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; -0.000049 J/psi pi- SVS; -0.00005 J/psi rho- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; -0.0002 J/psi anti-K0 pi- PHSP; -0.0001 J/psi K- pi0 PHSP; -#rl0.0007 J/psi K- pi+ pi- PHSP; -#rl0.00035 J/psi K- pi0 pi0 PHSP; -#rl0.00035 J/psi anti-K0 pi- pi0 PHSP; -0.0001 J/psi K'_1- SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; -0.0005 J/psi K_2*- PHSP; -0.0018 J/psi K_1- SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; -0.000052 J/psi phi K- PHSP; -# -0.000648 psi(2S) K- SVS; -0.00067 psi(2S) K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; -0.0004 psi(2S) anti-K0 pi- PHSP; -0.0002 psi(2S) K- pi0 PHSP; -0.0019 psi(2S) K- pi+ pi- PHSP; -0.0001 psi(2S) K- pi0 pi0 PHSP; -0.0001 psi(2S) anti-K0 pi- pi0 PHSP; -0.0004 psi(2S) K_1- PHSP; -# -0.00091 eta_c K- PHSP; -0.0012 K*- eta_c SVS; -0.0002 eta_c anti-K0 pi- PHSP; -0.0001 eta_c K- pi0 PHSP; -0.0002 eta_c K- pi+ pi- PHSP; -0.0001 eta_c K- pi0 pi0 PHSP; -0.0001 eta_c anti-K0 pi- pi0 PHSP; -# -0.00034 eta_c(2S) K- PHSP; -0.00048 K*- eta_c(2S) SVS; -0.00008 eta_c(2S) anti-K0 pi- PHSP; -0.00005 eta_c(2S) K- pi0 PHSP; -0.00008 eta_c(2S) K- pi+ pi- PHSP; -0.00005 eta_c(2S) K- pi0 pi0 PHSP; -0.00005 eta_c(2S) anti-K0 pi- pi0 PHSP; -# -0.00014 chi_c0 K- PHSP; -0.0004 K*- chi_c0 SVS; -0.0002 chi_c0 anti-K0 pi- PHSP; -0.0001 chi_c0 K- pi0 PHSP; -0.0002 chi_c0 K- pi+ pi- PHSP; -0.0001 chi_c0 K- pi0 pi0 PHSP; -0.0001 chi_c0 anti-K0 pi- pi0 PHSP; -# -0.00049 chi_c1 K- SVS; -0.00036 chi_c1 K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; -0.0004 chi_c1 anti-K0 pi- PHSP; -0.0002 chi_c1 K- pi0 PHSP; -0.0004 chi_c1 K- pi+ pi- PHSP; -0.0002 chi_c1 K- pi0 pi0 PHSP; -0.0002 chi_c1 anti-K0 pi- pi0 PHSP; -# -0.00002 chi_c2 K- STS; -0.00002 chi_c2 K*- PHSP; -0.0002 chi_c2 anti-K0 pi- PHSP; -0.0001 chi_c2 K- pi0 PHSP; -0.0002 chi_c2 K- pi+ pi- PHSP; -0.0001 chi_c2 K- pi0 pi0 PHSP; -0.0001 chi_c2 anti-K0 pi- pi0 PHSP; -# -0.00049 psi(3770) K- SVS; -0.0005 psi(3770) K*- PHSP; -0.0003 psi(3770) anti-K0 pi- PHSP; -0.0002 psi(3770) K- pi0 PHSP; -0.0002 psi(3770) K- pi+ pi- PHSP; -0.0001 psi(3770) K- pi0 pi0 PHSP; -0.0001 psi(3770) anti-K0 pi- pi0 PHSP; -0.0003 psi(3770) K_1- PHSP; -# -# b -> c (sc=) -> D Ds X Sum = 10% -# -0.0103 D0 D_s- PHSP; -0.0084 D*0 D_s- SVS; -0.0078 D_s*- D0 SVS; -0.0175 D_s*- D*0 SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0006 D'_10 D_s- SVS; -0.0012 D'_10 D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0012 D_10 D_s- SVS; -0.0024 D_10 D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0042 D_2*0 D_s- STS; -0.0040 D_2*0 D_s*- PHSP; -# -# -# SVV_HELAMP from factorization, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: -# -0.0036 D_s- D+ pi- PHSP; -0.0018 D_s- D0 pi0 PHSP; -0.0037 D_s*- D+ pi- PHSP; -0.0018 D_s*- D0 pi0 PHSP; -0.0033 D_s- D+ pi- pi0 PHSP; -0.0033 D_s- D0 pi- pi+ PHSP; -0.0008 D_s- D0 pi0 pi0 PHSP; -0.0033 D_s*- D+ pi- pi0 PHSP; -0.0033 D_s*- D0 pi- pi+ PHSP; -0.0008 D_s*- D0 pi0 pi0 PHSP; -# -# -# b -> c (sc=) -> D D= K X Sum = 8% -# update: Ref. [B1]: -# -0.0017 D0 D- anti-K0 PHSP; -0.0052 D0 D*- anti-K0 PHSP; -0.0031 D*0 D- anti-K0 PHSP; -0.0078 D*0 D*- anti-K0 PHSP; -# External+internal W-emission amplitude -0.0021 D0 anti-D0 K- PHSP; -0.0018 D*0 anti-D0 K- PHSP; -0.0047 D0 anti-D*0 K- PHSP; -0.0053 D*0 anti-D*0 K- PHSP; -# Internal W-emission amplitude (color suppressed modes) -0.0005 D- D+ K- PHSP; -0.0005 D*- D+ K- PHSP; -0.0015 D- D*+ K- PHSP; -0.0015 D*- D*+ K- PHSP; -# -0.0025 D0 D- anti-K*0 PHSP; -0.0025 D*0 D- anti-K*0 PHSP; -0.0025 D0 D*- anti-K*0 PHSP; -0.0050 D*0 D*- anti-K*0 PHSP; -# -0.0025 D0 anti-D0 K*- PHSP; -0.0025 D*0 anti-D0 K*- PHSP; -0.0025 D0 anti-D*0 K*- PHSP; -0.0050 D*0 anti-D*0 K*- PHSP; -# -0.0005 D- D+ K*- PHSP; -0.0005 D*- D+ K*- PHSP; -0.0005 D- D*+ K*- PHSP; -0.0010 D*- D*+ K*- PHSP; -# -# B->D(*)D(*). See Ref [B1]: -# -0.00042 D- D0 PHSP; -0.00039 D*- D0 SVS; -0.00063 D*0 D- SVS; -0.00081 D*0 D*- SVV_HELAMP 0.47 0.0 0.96 0.0 0.56 0.0; - -# -# B -> D(*) X Exclusive Modes -# -0.00519 D*0 pi- SVS; -0.00484 D0 pi- PHSP; -0.0134 rho- D0 SVS; -# D* rho HELAMP parameters taken from ICHEP 98-852. -0.0098 D*0 rho- SVV_HELAMP 0.228 0.95 0.932 0.0 0.283 1.13; -# -0.0005 D0 pi0 pi- PHSP; -0.0005 D*0 pi0 pi- PHSP; -0.00102 D+ pi- pi- PHSP; -0.00135 D*+ pi- pi- PHSP; -# -# D a1 updated Ref. [B1]: -0.0040 a_1- D0 SVS; -0.0042 D0 rho0 pi- PHSP; -0.0050 D0 pi+ pi- pi- PHSP; -# -# SVV_HELAMP from factorization, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: -# updated Ref. [B1]: -# -# -0.0190 D*0 a_1- SVV_HELAMP 0.200 0.0 0.866 0.0 0.458 0.0; -# -0.00042 D*0 rho0 pi- PHSP; -0.0005 D*0 pi+ pi- pi- PHSP; -# -0.0020 D+ rho- pi- PHSP; -0.0020 D+ pi0 pi- pi- PHSP; -0.0020 D*+ rho- pi- PHSP; -0.0150 D*+ pi0 pi- pi- PHSP; -0.0005 D*0 rho- pi0 PHSP; -0.0005 D*0 pi- pi0 pi0 PHSP; -# -# B->D** pi and D** rho, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html -# further update October 26, 2004 Lange -# -0.000876 D_10 pi- SVS; -0.0005 D'_10 pi- SVS; -0.00052 D_2*0 pi- STS; -0.0007 D_10 rho- PHSP; -0.0022 D'_10 rho- PHSP; -0.0038 D_2*0 rho- PHSP; -0.00061 D_0*0 pi- PHSP; -# -# -# B->DK, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: -# update: Ref [B1]: -# -0.000402 D0 K- PHSP; -0.000416 D*0 K- SVS; -0.00053 K*- D0 SVS; -0.00081 D*0 K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; -#October 26, 2004 Lange -0.0000005 D- pi0 PHSP; -0.0000005 D*- pi0 SVS; -0.000011 D- anti-K0 PHSP; -0.000006 D*- anti-K0 SVS; -# -#October 26, 2004 - Lange -0.00075 D0 D_s0*- PHSP; -0.0009 D*0 D_s0*- SVS; -0.0031 D_s1- D0 SVS; -0.0120 D*0 D_s1- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; -# -# Feb 2009 -# -0.00055 D0 K- anti-K0 PHSP; -0.00075 D0 K- anti-K*0 PHSP; -0.00150 D*0 K- anti-K*0 PHSP; -# -# Feb 2009 -# -0.00275 D0 omega pi- PHSP; -0.00450 D*0 omega pi- PHSP; -# -# Feb 2009 -# -0.00045 D0 D'_s1- PHSP; -0.00094 D*0 D'_s1- PHSP; -# -# Lam_c X / Sigma_c X 4.0 % -# -#0.04000 cd_1 anti-uu_1 PYTHIA 23; -0.0349703 cd_1 anti-uu_1 PYTHIA 23; -# -# Xi_c X 2.5% -# -#0.02400 cs_1 anti-uu_1 PYTHIA 23; -0.0095374 cs_1 anti-uu_1 PYTHIA 23; -# -# -0.238716 anti-u d c anti-u PYTHIA 48; -0.0455674 anti-u d c anti-u PYTHIA 13; -0.0238434 anti-u s c anti-u PYTHIA 13; -#lange - try to crank up the psi production.... -0.0784183 anti-c s c anti-u PYTHIA 13; -0.0042388 anti-c d c anti-u PYTHIA 13; -0.0031791 anti-u d u anti-u PYTHIA 48; -0.0042388 anti-c s u anti-u PYTHIA 48; -# JGS 11/5/02 This and similar a few lines above have been divided by two -# to solve a double-counting problem for this channel -0.0021724 anti-u u d anti-u PYTHIA 48; -0.0000742 anti-d d d anti-u PYTHIA 48; -0.0000954 anti-s s d anti-u PYTHIA 48; -0.0023314 anti-u u s anti-u PYTHIA 48; -0.0019075 anti-d d s anti-u PYTHIA 48; -0.0015896 anti-s s s anti-u PYTHIA 48; -0.0052985 s anti-u PYTHIA 32; -# -#### -Enddecay -# -Decay B+ -# Updated to PDG 2008 -# b -> c semileptonic -# -0.0607 anti-D*0 e+ nu_e PHOTOS HQET 0.77 1.33 0.92; -0.0227 anti-D0 e+ nu_e PHOTOS ISGW2; -0.0040 anti-D_10 e+ nu_e PHOTOS ISGW2; -0.0024 anti-D_0*0 e+ nu_e PHOTOS ISGW2; -0.0007 anti-D'_10 e+ nu_e PHOTOS ISGW2; -0.0018 anti-D_2*0 e+ nu_e PHOTOS ISGW2; -0.0061 D*- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; -0.0003 anti-D*0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; -# covered by other decays -0.0000 D- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; -0.0010 anti-D0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; - -0.0607 anti-D*0 mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; -0.0227 anti-D0 mu+ nu_mu PHOTOS ISGW2; -0.0040 anti-D_10 mu+ nu_mu PHOTOS ISGW2; -0.0024 anti-D_0*0 mu+ nu_mu PHOTOS ISGW2; -0.0007 anti-D'_10 mu+ nu_mu PHOTOS ISGW2; -0.0018 anti-D_2*0 mu+ nu_mu PHOTOS ISGW2; -0.0061 D*- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0003 anti-D*0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0000 D- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0010 anti-D0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; -# -# b -> c tau nu -# -0.0220 anti-D*0 tau+ nu_tau ISGW2; -0.0070 anti-D0 tau+ nu_tau ISGW2; -0.0013 anti-D_10 tau+ nu_tau ISGW2; -0.0013 anti-D_0*0 tau+ nu_tau ISGW2; -0.0020 anti-D'_10 tau+ nu_tau ISGW2; -0.0020 anti-D_2*0 tau+ nu_tau ISGW2; -# -# b -> u l nu -# -# -# - -0.000077 pi0 e+ nu_e PHOTOS ISGW2; -0.000084 eta e+ nu_e PHOTOS ISGW2; -0.000128 rho0 e+ nu_e PHOTOS ISGW2; -0.000130 omega e+ nu_e PHOTOS ISGW2; -0.000270 eta' e+ nu_e PHOTOS ISGW2; -0.000000 anti-D(2S)0 e+ nu_e PHOTOS ISGW2; -0.000000 anti-D*(2S)0 e+ nu_e PHOTOS ISGW2; -0.001948 Xu0 e+ nu_e VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; -# -0.000077 pi0 mu+ nu_mu PHOTOS ISGW2; -0.000084 eta mu+ nu_mu PHOTOS ISGW2; -0.000128 rho0 mu+ nu_mu PHOTOS ISGW2; -0.000130 omega mu+ nu_mu PHOTOS ISGW2; -0.000270 eta' mu+ nu_mu PHOTOS ISGW2; -0.000000 anti-D(2S)0 mu+ nu_mu PHOTOS ISGW2; -0.000000 anti-D*(2S)0 mu+ nu_mu PHOTOS ISGW2; -0.001948 Xu0 mu+ nu_mu VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; -# -0.000030 pi0 tau+ nu_tau ISGW2; -0.000012 eta tau+ nu_tau ISGW2; -0.000042 rho0 tau+ nu_tau ISGW2; -0.000042 omega tau+ nu_tau ISGW2; -0.000018 eta' tau+ nu_tau ISGW2; -0.000046 a_10 tau+ nu_tau ISGW2; -0.000027 b_10 tau+ nu_tau ISGW2; -0.000004 a_00 tau+ nu_tau ISGW2; -0.000002 f_0 tau+ nu_tau ISGW2; -0.000002 f'_0 tau+ nu_tau ISGW2; -0.000023 f_1 tau+ nu_tau ISGW2; -0.000023 f'_1 tau+ nu_tau ISGW2; -0.000013 h_1 tau+ nu_tau ISGW2; -0.000013 h'_1 tau+ nu_tau ISGW2; -0.000020 f_2 tau+ nu_tau ISGW2; -0.000020 f'_2 tau+ nu_tau ISGW2; -0.000000 anti-D(2S)0 tau+ nu_tau ISGW2; -0.000000 anti-D*(2S)0 tau+ nu_tau ISGW2; -# -# -# -# b->u hadronic -# Ref. [B1]: -# -0.000016 D_s+ pi0 PHSP; -0.000020 D_s*+ pi0 SVS; -# -0.000028 rho0 D_s+ SVS; -0.000028 D_s*+ rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - -# -# b-> s gamma -# -0.0000403 K*+ gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000135 K_1+ gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000065 K'_1+ gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000128 K'*+ gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000166 K_2*+ gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000017 K''*+ gamma HELAMP 1.0 0.0 1.0 0.0; -0.0003118 Xsu gamma BTOXSGAMMA 2; -# -0.0000006 K+ e+ e- PHOTOS BTOSLLBALL; -0.0000018 K*+ e+ e- PHOTOS BTOSLLBALL; -0.0000050 Xsu e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.0000006 K+ mu+ mu- PHOTOS BTOSLLBALL; -0.0000014 K*+ mu+ mu- PHOTOS BTOSLLBALL; -0.0000025 Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.0000001 K+ tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 K*+ tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 Xsu tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -# -# b -> l nu -# -0.000140 tau+ nu_tau SLN; -0.000000 mu+ nu_mu PHOTOS SLN; -0.000000 e+ nu_e PHOTOS SLN; -# -#------------------------------------------------------------------------------ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv -# -# Exclusive hadronic b->u -# -0.000026 pi+ pi0 pi0 CB3PI-P00 alpha; -0.000000 pi+ pi+ pi- CB3PI-MPP alpha; -#### -0.0000044 eta pi+ PHSP; -0.0000027 eta K+ PHSP; -0.0000193 K*+ eta SVS; -0.0000054 rho+ eta SVS; -0.0000027 eta' pi+ PHSP; -0.0000702 eta' K+ PHSP; -0.0000049 K*+ eta' SVS; -0.0000087 rho+ eta' SVS; -0.0000069 omega pi+ SVS; -0.0000067 omega K+ SVS; -0.0000010 omega K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000106 omega rho+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000000 phi pi+ SVS; -0.0000083 phi K+ SVS; -#2-body modes from Jim Olsen -# (K_S0 K- and K_L0 K- -> 1x10^-6, Jim Olsen - Mar 27, 2001) -# (pi- pi0 -> 5x10^-6 and K- pi0 -> 11x10^-6, Jim Olsen - Mar 27, 2001) -# PR LHCb 04/08/04 split into KS/KL -0.000000 K0 pi+ PHSP; -0.0000115 K_S0 pi+ PHSP; -0.0000115 K_L0 pi+ PHSP; -0.0000014 anti-K0 K+ PHSP; -0.0000057 pi+ pi0 PHSP; -0.0000129 K+ pi0 PHSP; -# -# 3-body John Back (jback@slac.stanford.edu) - Oct 15, 2002 -# JGS intersperses modes with pi0->eta,eta' -# B+ modes -# -# rho0 3-body modes -0.0000086 rho0 pi+ SVS; -0.0000042 rho0 K+ SVS; -# -# rho+ 3-body modes -0.0000109 rho+ pi0 SVS; -0.0000080 rho+ K0 SVS; -# -# rho(1450) 3-body modes -0.0000022 rho(2S)0 pi+ SVS; -0.000001 rho(2S)0 K+ SVS; -# -# f0(980) 3-body modes -0.000001 f_0 pi+ PHSP; -0.0000092 f_0 K+ PHSP; -0.000001 a_0+ K0 PHSP; -0.000001 a_00 K+ PHSP; -0.000001 a_00 pi+ PHSP; -0.000001 a_0+ pi0 PHSP; - -0.0000081 f_2 pi+ PHSP; - -# -# K*0(892) 3-body modes -0.0000109 K_0*0 pi+ PHSP; -0.0000010 anti-K_0*0 K+ PHSP; -0.000002 K_0*+ pi0 PHSP; -0.000002 K_0*+ anti-K0 PHSP; -# -# K*+(892) 3-body modes -0.0000069 K*+ pi0 SVS; -0.000003 K*+ anti-K0 SVS; -# -# -# Non-resonant 3-body left-overs -# Most modes are set at 1e-6 -# -# pi+pi-pi+: high mass + f0(400-1200) = (1+1)e-6 -#0402270.000002 pi+ pi- pi+ PHSP; -# -# K+ pi- pi+: high mass + f0(400-1200) = (5+5)e-6 -0.0000060 K+ pi- pi+ PHSP; -# -# K+ K- pi+: just non-resonant -0.0000050 K+ K- pi+ PHSP; -# -# K+K-K+: high mass structure near 1500 + non-res: total - phiK = 30-4 -0.0000280 K+ K- K+ PHSP; -# -# -# K+K+pi-: suppressed mode (1e-7) -0.0000001 K+ K+ pi- PHSP; -# K-pi+pi+: suppressed mode (1e-7) -0.0000001 K- pi+ pi+ PHSP; -# -# -# K+ anti-K0 pi0 -0.000001 K+ anti-K0 pi0 PHSP; -0.000001 K+ anti-K0 eta PHSP; -0.000001 K+ anti-K0 eta' PHSP; -# -# pi+ K0 pi0 -0.000001 pi+ K0 pi0 PHSP; -0.000001 pi+ K0 eta PHSP; -0.000001 pi+ K0 eta' PHSP; -# -# pi+ pi0 pi0 -#0402270.000001 pi+ pi0 pi0 PHSP; -0.000001 pi+ pi0 eta PHSP; -0.000001 pi+ pi0 eta' PHSP; -0.000001 pi+ eta eta PHSP; -0.000001 pi+ eta eta' PHSP; -# -# K+ pi0 pi0 -0.000001 K+ pi0 pi0 PHSP; -0.000001 K+ pi0 eta PHSP; -0.000001 K+ pi0 eta' PHSP; -0.000001 K+ eta eta PHSP; -0.000001 K+ eta eta' PHSP; -0.000001 K+ eta' eta' PHSP; -# -# K+ K0 anti-K0: 4*BF(K+KsKs) (4 is a guess) -0.0000460 K+ K0 anti-K0 PHSP; -# -# pi+ K0 anti-K0 -0.000001 pi+ K0 anti-K0 PHSP; -# -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#--------------------------------------------------------------------------- -# -#4-body modes from Andrei Gritsan -#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- -# PR LHCb 22 Apr 2004 Set long. pol. for rho rho -0.000018 rho+ rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; -0.000010 rho0 pi+ pi0 PHSP; -0.000005 rho0 pi+ eta PHSP; -0.000002 rho0 pi+ eta' PHSP; -0.000010 omega pi+ pi0 PHSP; -0.000005 omega pi+ eta PHSP; -0.000002 omega pi+ eta' PHSP; -0.000010 rho+ pi+ pi- PHSP; -# PR Add rho- pi+ pi+ -0.000010 rho- pi+ pi+ PHSP; -0.000010 rho+ pi0 pi0 PHSP; -0.000005 rho+ pi0 eta PHSP; -0.000002 rho+ eta eta PHSP; -0.000002 rho+ pi0 eta' PHSP; -0.000010 pi- pi+ pi+ pi0 PHSP; -0.000005 pi- pi+ pi+ eta PHSP; -0.000002 pi- pi+ pi+ eta' PHSP; -0.000010 pi+ pi0 pi0 pi0 PHSP; -0.000005 pi+ eta pi0 pi0 PHSP; -0.000002 pi+ eta eta pi0 PHSP; -0.000002 pi+ eta' pi0 pi0 PHSP; -0.000001 pi+ eta' eta pi0 PHSP; -0.000020 a_10 pi+ SVS; -0.000026 a_1+ pi0 SVS; -0.0000067 b_10 pi+ SVS; -0.000010 b_1+ pi0 SVS; -0.000010 rho+ f_0 SVS; -0.000010 rho+ a_00 SVS; -0.000002 rho0 a_0+ SVS; -0.000010 f_0 pi+ pi0 PHSP; -0.000001 a_00 pi+ pi0 PHSP; -0.000001 a_0+ pi0 pi0 PHSP; -0.000001 a_0- pi+ pi+ PHSP; -#--- 4-body rho-K*, a1-K, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- -0.0000092 rho+ K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000010 rho0 K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000010 pi+ pi0 K*0 PHSP; -0.000005 pi+ eta K*0 PHSP; -0.0000638 pi- pi+ K*+ PHSP; -0.000010 pi0 pi0 K*+ PHSP; -0.000005 pi0 eta K*+ PHSP; -0.000002 eta eta K*+ PHSP; -0.000002 pi0 eta' K*+ PHSP; -0.000001 eta eta' K*+ PHSP; -0.000010 rho+ K0 pi0 PHSP; -0.000005 rho+ K0 eta PHSP; -0.000002 rho+ K0 eta' PHSP; -0.000010 rho+ K+ pi- PHSP; -0.000010 rho- K+ pi+ PHSP; -0.000005 rho0 K0 pi+ PHSP; -0.000005 rho0 K+ pi0 PHSP; -0.000002 rho0 K+ eta PHSP; -0.000001 rho0 K+ eta' PHSP; -0.000005 omega K0 pi+ PHSP; -0.000005 omega K+ pi0 PHSP; -0.000002 omega K+ eta PHSP; -0.000001 omega K+ eta' PHSP; -0.000010 pi+ pi+ pi- K0 PHSP; -0.000010 pi+ pi0 pi0 K0 PHSP; -0.000005 pi+ eta pi0 K0 PHSP; -0.000002 pi+ eta eta K0 PHSP; -0.000010 pi+ pi- pi0 K+ PHSP; -0.000005 pi+ pi- eta K+ PHSP; -0.000010 pi0 pi0 pi0 K+ PHSP; -0.000005 pi0 pi0 eta K+ PHSP; -0.000002 pi0 eta eta K+ PHSP; -0.000002 pi0 pi0 eta' K+ PHSP; -0.000001 pi0 eta eta' K+ PHSP; -0.000010 rho+ K_0*0 PHSP; -0.000006 rho0 K_0*+ PHSP; -0.000010 pi+ pi0 K_0*0 PHSP; -0.000010 pi0 pi0 K_0*+ PHSP; -0.0000052 K*+ f_0 SVS; -0.000010 a_10 K+ SVS; -0.000035 a_1+ K0 SVS; -0.0000091 b_10 K+ SVS; -0.000010 b_1+ K0 SVS; -0.000005 K*+ a_00 SVS; -0.000005 K*0 a_0+ SVS; -#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ -0.000001 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 phi rho+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 phi pi+ pi0 PHSP; -0.0000005 phi pi+ eta PHSP; -0.0000002 phi pi+ eta' PHSP; -0.000001 K+ K- rho+ PHSP; -0.000001 K0 anti-K0 rho+ PHSP; -0.000001 anti-K0 K+ rho0 PHSP; -0.000001 anti-K0 K+ omega PHSP; -0.000001 K+ K- pi+ pi0 PHSP; -0.0000005 K+ K- pi+ eta PHSP; -0.0000002 K+ K- pi+ eta' PHSP; -0.000001 K0 anti-K0 pi+ pi0 PHSP; -0.0000005 K0 anti-K0 pi+ eta PHSP; -0.0000002 K0 anti-K0 pi+ eta' PHSP; -0.000001 anti-K0 K+ pi+ pi- PHSP; -0.000001 anti-K0 K+ pi0 pi0 PHSP; -0.0000005 anti-K0 K+ pi0 eta PHSP; -0.0000002 anti-K0 K+ eta eta PHSP; -0.0000002 anti-K0 K+ pi0 eta' PHSP; -0.0000001 anti-K0 K+ eta eta' PHSP; -0.000001 K*+ K- pi+ PHSP; -0.000001 K*- K+ pi+ PHSP; -0.000001 K*0 anti-K0 pi+ PHSP; -0.000001 K0 anti-K*0 pi+ PHSP; -0.000001 K+ anti-K*0 pi0 PHSP; -0.0000005 K+ anti-K*0 eta PHSP; -0.0000002 K+ anti-K*0 eta' PHSP; -0.000001 K*+ anti-K0 pi0 PHSP; -0.0000005 K*+ anti-K0 eta PHSP; -0.0000002 K*+ anti-K0 eta' PHSP; -#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- -0.0000105 phi K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000010 phi K0 pi+ PHSP; -0.000010 phi K+ pi0 PHSP; -0.000005 phi K+ eta PHSP; -0.000002 phi K+ eta' PHSP; -0.000010 K- K+ K*+ PHSP; -0.000010 K+ K*- K+ PHSP; -0.000010 K+ K*0 anti-K0 PHSP; -0.000010 K+ K0 anti-K*0 PHSP; -0.000010 K0 K*+ anti-K0 PHSP; -0.000010 K+ K- K+ pi0 PHSP; -0.000005 K+ K- K+ eta PHSP; -0.000002 K+ K- K+ eta' PHSP; -0.000010 K+ K- K0 pi+ PHSP; -0.000010 K0 anti-K0 K+ pi0 PHSP; -0.000005 K0 anti-K0 K+ eta PHSP; -0.000002 K0 anti-K0 K+ eta' PHSP; -0.000010 K0 anti-K0 K0 pi+ PHSP; -0.000010 phi K_0*+ PHSP; -0.000010 K- K+ K_0*+ PHSP; -0.000010 K+ K+ K_0*- PHSP; -0.000010 K+ anti-K_0*0 K0 PHSP; -0.000010 K+ K_0*0 anti-K0 PHSP; -0.000002 phi K'_1+ PHSP; -0.000002 K- K+ K'_1+ PHSP; -#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- -0.000001 phi anti-K0 K+ PHSP; -0.000001 K+ K- K+ anti-K0 PHSP; -0.000001 K0 anti-K0 anti-K0 K+ PHSP; -# -#5-body modes from Jim Smith - 1/30/05 -#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- -0.000010 rho0 rho0 pi+ PHSP; -0.000010 rho+ rho0 pi0 PHSP; -0.000005 rho+ rho0 eta PHSP; -0.000002 rho+ rho0 eta' PHSP; -0.000010 rho+ rho- pi+ PHSP; -0.000010 omega rho0 pi+ PHSP; -0.000010 omega rho+ pi0 PHSP; -0.000005 omega rho+ eta PHSP; -0.000002 omega rho+ eta' PHSP; -0.000002 rho0 pi+ pi- pi+ PHSP; -0.000002 rho0 pi+ pi0 pi0 PHSP; -0.000001 rho0 pi+ eta pi0 PHSP; -0.000001 rho0 pi+ eta' pi0 PHSP; -0.000002 omega pi+ pi0 pi0 PHSP; -0.000001 omega pi+ eta pi0 PHSP; -0.000001 omega pi+ eta' pi0 PHSP; -0.000002 rho- pi+ pi+ pi0 PHSP; -0.000001 rho- pi+ pi+ eta PHSP; -0.000001 rho- pi+ pi+ eta' PHSP; -0.000002 rho+ pi+ pi- pi0 PHSP; -0.000001 rho+ pi+ pi- eta PHSP; -0.000001 rho+ pi+ pi- eta' PHSP; -0.000002 rho+ pi0 pi0 pi0 PHSP; -0.000001 rho+ pi0 eta pi0 PHSP; -0.000001 rho+ eta eta pi0 PHSP; -0.000001 rho+ pi0 eta' pi0 PHSP; -0.000001 pi- pi+ pi+ pi0 pi0 PHSP; -0.000001 pi- pi+ pi+ eta pi0 PHSP; -0.000001 pi- pi+ pi+ eta' pi0 PHSP; -0.000001 pi+ pi0 pi0 pi0 pi0 PHSP; -0.000001 pi+ eta pi0 pi0 pi0 PHSP; -0.000001 pi+ eta' pi0 pi0 pi0 PHSP; -0.000010 a_1+ rho0 PHSP; -0.000010 a_1+ omega PHSP; -0.000010 a_1+ f_0 PHSP; -0.000010 a_10 pi+ pi0 PHSP; -0.000005 a_10 pi+ eta PHSP; -0.000002 a_10 pi+ eta' PHSP; -0.000010 a_1- pi+ pi+ PHSP; -0.000010 a_1+ pi+ pi- PHSP; -0.000010 a_1+ pi0 pi0 PHSP; -0.000005 a_1+ pi0 eta PHSP; -0.000002 a_1+ pi0 eta' PHSP; -0.000010 rho+ f_0 pi0 PHSP; -0.000005 rho+ f_0 eta PHSP; -0.000002 rho+ f_0 eta' PHSP; -0.000010 rho0 f_0 pi+ PHSP; -0.000010 omega f_0 pi+ PHSP; -0.000010 rho+ a_00 pi0 PHSP; -0.000005 rho+ a_00 eta PHSP; -0.000002 rho+ a_00 eta' PHSP; -0.000010 rho- a_0+ pi+ PHSP; -0.000010 rho0 a_0+ pi0 PHSP; -0.000005 rho0 a_0+ eta PHSP; -0.000002 rho0 a_0+ eta' PHSP; -0.000002 f_0 pi+ pi- pi+ PHSP; -0.000002 f_0 pi+ pi0 pi0 PHSP; -0.000001 f_0 pi+ pi0 eta PHSP; -0.000001 f_0 pi+ pi0 eta' PHSP; -0.000001 a_00 pi+ pi0 pi0 PHSP; -0.000001 a_0+ pi0 pi0 pi0 PHSP; -0.000001 a_0- pi+ pi+ pi0 PHSP; -#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- -0.000010 rho+ K*+ pi- PHSP; -0.000010 rho- K*+ pi+ PHSP; -0.000010 rho+ K*0 pi0 PHSP; -0.000005 rho+ K*0 eta PHSP; -0.000002 rho+ K*0 eta' PHSP; -0.000010 rho0 K*0 pi+ PHSP; -0.000010 rho0 K*+ pi0 PHSP; -0.000005 rho0 K*+ eta PHSP; -0.000002 rho0 K*+ eta' PHSP; -0.000010 omega K*0 pi+ PHSP; -0.000010 omega K*+ pi0 PHSP; -0.000005 omega K*+ eta PHSP; -0.000002 omega K*+ eta' PHSP; -0.000010 pi+ pi- K*0 pi+ PHSP; -0.000010 pi+ pi0 K*0 pi0 PHSP; -0.000005 pi+ eta K*0 pi0 PHSP; -0.000002 pi+ eta' K*0 pi0 PHSP; -0.000010 pi- pi+ K*+ pi0 PHSP; -0.000005 pi- pi+ K*+ eta PHSP; -0.000002 pi- pi+ K*+ eta' PHSP; -0.000010 pi0 pi0 K*+ pi0 PHSP; -0.000005 pi0 eta K*+ pi0 PHSP; -0.000002 eta eta K*+ pi0 PHSP; -0.000002 pi0 eta' K*+ pi0 PHSP; -0.000001 eta eta' K*+ pi0 PHSP; -0.000010 rho+ K0 pi+ pi- PHSP; -0.000010 rho+ K0 pi0 pi0 PHSP; -0.000005 rho+ K0 eta pi0 PHSP; -0.000002 rho+ K0 eta' pi0 PHSP; -0.000010 rho+ K+ pi- pi0 PHSP; -0.000010 rho- K+ pi+ pi0 PHSP; -0.000010 rho- K0 pi+ pi+ PHSP; -0.000010 rho0 K0 pi+ pi0 PHSP; -0.000010 rho0 K+ pi0 pi0 PHSP; -0.000005 rho0 K+ eta pi0 PHSP; -0.000002 rho0 K+ eta' pi0 PHSP; -0.000010 omega K0 pi+ pi0 PHSP; -0.000010 omega K+ pi0 pi0 PHSP; -0.000005 omega K+ eta pi0 PHSP; -0.000002 omega K+ eta' pi0 PHSP; -0.000002 pi+ pi+ pi- K0 pi0 PHSP; -0.000001 pi+ pi+ pi- K0 eta PHSP; -0.000001 pi+ pi+ pi- K0 eta' PHSP; -0.000002 pi+ pi0 pi0 K0 pi0 PHSP; -0.000001 pi+ eta pi0 K0 pi0 PHSP; -0.000001 pi+ eta eta K0 pi0 PHSP; -0.000002 pi+ pi- pi+ K+ pi- PHSP; -0.000002 pi+ pi- pi0 K+ pi0 PHSP; -0.000001 pi+ pi- eta K+ pi0 PHSP; -0.000001 pi+ pi- eta' K+ pi0 PHSP; -0.000002 pi0 pi0 pi0 K+ pi0 PHSP; -0.000001 pi0 pi0 eta K+ pi0 PHSP; -0.000001 pi0 eta eta K+ pi0 PHSP; -0.000001 pi0 pi0 eta' K+ pi0 PHSP; -0.000001 pi0 eta eta' K+ pi0 PHSP; -0.000010 rho0 K_0*0 pi+ PHSP; -0.000010 rho+ K_0*0 pi0 PHSP; -0.000005 rho+ K_0*0 eta PHSP; -0.000002 rho+ K_0*0 eta' PHSP; -0.000010 rho+ K_0*+ pi- PHSP; -0.000010 rho0 K_0*+ pi0 PHSP; -0.000005 rho0 K_0*+ eta PHSP; -0.000002 rho0 K_0*+ eta' PHSP; -0.000010 pi+ pi+ K_0*0 pi- PHSP; -0.000010 pi+ pi0 K_0*0 pi0 PHSP; -0.000005 pi+ pi0 K_0*0 eta PHSP; -0.000002 pi+ pi0 K_0*0 eta' PHSP; -0.000010 pi0 pi0 K_0*+ pi0 PHSP; -0.000005 pi0 pi0 K_0*+ eta PHSP; -0.000002 pi0 pi0 K_0*+ eta' PHSP; -0.000010 K*0 f_0 pi+ PHSP; -0.000010 K*+ f_0 pi0 PHSP; -0.000005 K*+ f_0 eta PHSP; -0.000002 K*+ f_0 eta' PHSP; -0.000020 a_10 K*+ PHSP; -0.000010 a_10 K+ pi0 PHSP; -0.000010 a_10 K0 pi+ PHSP; -0.000020 a_1+ K*0 PHSP; -0.000010 a_1+ K+ pi- PHSP; -0.000010 a_1+ K0 pi0 PHSP; -0.000005 K*+ a_00 pi0 PHSP; -0.000005 K*0 a_0+ pi0 PHSP; -#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ -0.000001 K*0 anti-K*0 pi+ PHSP; -0.000001 anti-K*0 K*+ pi0 PHSP; -0.0000005 anti-K*0 K*+ eta PHSP; -0.0000002 anti-K*0 K*+ eta' PHSP; -0.000001 phi rho0 pi+ PHSP; -0.000001 phi omega pi+ PHSP; -0.000001 phi f_0 pi+ PHSP; -0.000001 phi rho+ pi0 PHSP; -0.0000005 phi rho+ eta PHSP; -0.0000002 phi rho+ eta' PHSP; -0.000001 phi pi+ pi- pi+ PHSP; -0.000001 phi pi+ pi0 pi0 PHSP; -0.0000005 phi pi+ eta pi0 PHSP; -0.0000002 phi pi+ eta' pi0 PHSP; -0.000001 anti-K0 K+ rho+ pi- PHSP; -0.000001 anti-K0 K+ rho- pi+ PHSP; -0.000001 anti-K0 K+ rho0 pi0 PHSP; -0.0000005 anti-K0 K+ rho0 eta PHSP; -0.0000002 anti-K0 K+ rho0 eta' PHSP; -0.000001 anti-K0 K+ omega pi0 PHSP; -0.000001 anti-K0 K+ f_0 pi0 PHSP; -0.000001 K+ K- rho0 pi+ PHSP; -0.000001 K+ K- rho+ pi0 PHSP; -0.0000005 K+ K- rho+ eta PHSP; -0.0000002 K+ K- rho+ eta' PHSP; -0.000001 K+ K- omega pi+ PHSP; -0.000001 K0 anti-K0 rho0 pi+ PHSP; -0.000001 K0 anti-K0 omega pi+ PHSP; -0.000001 K0 anti-K0 f_0 pi+ PHSP; -0.000001 K0 anti-K0 rho+ pi0 PHSP; -0.0000005 K0 anti-K0 rho+ eta PHSP; -0.0000002 K0 anti-K0 rho+ eta' PHSP; -0.000001 K0 K- rho+ pi+ PHSP; -0.0000002 K0 K- pi+ pi+ pi0 PHSP; -0.0000001 K0 K- pi+ pi+ eta PHSP; -0.0000001 K0 K- pi+ pi+ eta' PHSP; -0.0000002 K+ K- pi+ pi- pi+ PHSP; -0.0000002 K+ K- pi+ pi0 pi0 PHSP; -0.0000001 K+ K- pi+ eta pi0 PHSP; -0.0000001 K+ K- pi+ eta' pi0 PHSP; -0.0000002 K0 anti-K0 pi+ pi- pi+ PHSP; -0.0000002 K0 anti-K0 pi+ pi0 pi0 PHSP; -0.0000001 K0 anti-K0 pi+ eta pi0 PHSP; -0.0000001 K0 anti-K0 pi+ eta' pi0 PHSP; -0.0000002 anti-K0 K+ pi+ pi- pi0 PHSP; -0.0000001 anti-K0 K+ pi+ pi- eta PHSP; -0.0000001 anti-K0 K+ pi+ pi- eta' PHSP; -0.0000002 anti-K0 K+ pi0 pi0 pi0 PHSP; -0.0000001 anti-K0 K+ pi0 eta pi0 PHSP; -0.0000001 anti-K0 K+ pi0 eta' pi0 PHSP; -0.000001 K*0 K- pi+ pi+ PHSP; -0.000001 K*- K0 pi+ pi+ PHSP; -0.000001 K*+ K- pi+ pi0 PHSP; -0.000001 K*- K+ pi+ pi0 PHSP; -0.000001 K*0 anti-K0 pi+ pi0 PHSP; -0.000001 K0 anti-K*0 pi+ pi0 PHSP; -0.000001 K+ anti-K*0 pi0 pi0 PHSP; -0.0000005 K+ anti-K*0 eta pi0 PHSP; -0.0000002 K+ anti-K*0 eta' pi0 PHSP; -0.000001 K*+ anti-K0 pi0 pi0 PHSP; -0.0000005 K*+ anti-K0 eta pi0 PHSP; -0.0000002 K*+ anti-K0 eta' pi0 PHSP; -#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- -0.000010 phi K*+ pi0 PHSP; -0.000010 phi K+ rho0 PHSP; -0.000010 phi K+ omega PHSP; -0.000010 phi K+ f_0 PHSP; -0.000010 phi K0 rho+ PHSP; -0.000010 phi K0 pi+ pi0 PHSP; -0.000010 phi K+ pi+ pi- PHSP; -0.000010 phi K+ pi0 pi0 PHSP; -0.000005 phi K+ eta pi0 PHSP; -0.000002 phi K+ eta' pi0 PHSP; -0.000010 K- K+ K*+ pi0 PHSP; -0.000010 K+ K*- K+ pi0 PHSP; -0.000010 K+ K*0 anti-K0 pi0 PHSP; -0.000010 K+ K0 anti-K*0 pi0 PHSP; -0.000010 K0 K*+ anti-K0 pi0 PHSP; -0.000010 K- K+ K+ rho0 PHSP; -0.000010 K- K+ K+ omega PHSP; -0.000010 K- K+ K+ f_0 PHSP; -0.000010 K- K+ K0 rho+ PHSP; -0.000010 K+ K- K+ pi0 pi0 PHSP; -0.000005 K+ K- K+ eta pi0 PHSP; -0.000002 K+ K- K+ eta' pi0 PHSP; -0.000010 K+ K- K0 pi+ pi0 PHSP; -0.000010 K0 anti-K0 K+ pi0 pi0 PHSP; -0.000005 K0 anti-K0 K+ eta pi0 PHSP; -0.000002 K0 anti-K0 K+ eta' pi0 PHSP; -0.000010 K0 anti-K0 K0 pi+ pi0 PHSP; -0.000010 phi K_0*0 pi+ PHSP; -0.000010 phi K_0*+ pi0 PHSP; -0.000005 phi K_0*+ eta PHSP; -0.000002 phi K_0*+ eta' PHSP; -0.000010 K- K+ K_0*+ pi0 PHSP; -0.000005 K- K+ K_0*+ eta PHSP; -0.000002 K- K+ K_0*+ eta' PHSP; -0.000010 K+ K+ K_0*- pi0 PHSP; -0.000005 K+ K+ K_0*- eta PHSP; -0.000002 K+ K+ K_0*- eta' PHSP; -0.000010 K- K+ K_0*0 pi+ PHSP; -0.000010 K+ K+ anti-K_0*0 pi- PHSP; -0.000010 K0 K0 anti-K_0*0 pi+ PHSP; -0.000010 K+ anti-K_0*0 K0 pi0 PHSP; -0.000005 K+ anti-K_0*0 K0 eta PHSP; -0.000002 K+ anti-K_0*0 K0 eta' PHSP; -0.000010 K+ K_0*0 anti-K0 pi0 PHSP; -0.000005 K+ K_0*0 anti-K0 eta PHSP; -0.000002 K+ K_0*0 anti-K0 eta' PHSP; -0.000002 phi K'_10 pi+ PHSP; -0.000002 phi K'_1+ pi0 PHSP; -0.000001 phi K'_1+ eta PHSP; -0.000001 phi K'_1+ eta' PHSP; -0.000002 K- K+ K'_10 pi+ PHSP; -0.000002 K- K+ K'_1+ pi0 PHSP; -0.000001 K- K+ K'_1+ eta PHSP; -0.000001 K- K+ K'_1+ eta' PHSP; -0.000002 K+ K+ K'_1- pi0 PHSP; -0.000002 K+ K+ anti-K'_10 pi- PHSP; -0.000002 K0 anti-K0 K'_10 pi+ PHSP; -0.000002 K0 anti-K0 K'_1+ pi0 PHSP; -0.000001 K0 anti-K0 K'_1+ eta PHSP; -0.000001 K0 anti-K0 K'_1+ eta' PHSP; -0.000002 K0 K0 anti-K'_10 pi+ PHSP; -0.000002 anti-K0 anti-K0 K'_1+ pi0 PHSP; -0.000001 anti-K0 anti-K0 K'_1+ eta PHSP; -0.000001 anti-K0 anti-K0 K'_1+ eta' PHSP; -0.000010 K+ K0 anti-K'_10 pi0 PHSP; -0.000005 K+ K0 anti-K'_10 eta PHSP; -0.000002 K+ K0 anti-K'_10 eta' PHSP; -0.000010 K+ K'_10 anti-K0 pi0 PHSP; -0.000005 K+ K'_10 anti-K0 eta PHSP; -0.000002 K+ K'_10 anti-K0 eta' PHSP; -#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ -0.000003 phi phi K+ PHSP; -0.000001 phi phi pi+ PHSP; -0.000001 phi K+ K- K+ PHSP; -0.000001 phi K0 anti-K0 K+ PHSP; -0.000001 phi K0 anti-K0 pi+ PHSP; -0.000001 phi anti-K0 K+ pi0 PHSP; -0.000001 K+ K- K+ K- pi+ PHSP; -0.000001 K+ K- K0 anti-K0 pi+ PHSP; -0.000001 K+ K- K+ anti-K0 pi0 PHSP; -0.000001 K0 anti-K0 anti-K0 K+ pi0 PHSP; -#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ -0.000003 phi phi K*+ PHSP; -0.000001 phi K+ K- K*+ PHSP; -0.000001 phi K0 anti-K0 K*+ PHSP; -0.000001 phi anti-K0 K+ K*0 PHSP; -0.000001 phi K+ K- K+ pi0 PHSP; -0.000001 phi K+ K- K0 pi+ PHSP; -0.000001 phi K0 anti-K0 K+ pi0 PHSP; -0.000001 phi K0 anti-K0 K0 pi+ PHSP; -0.000001 phi anti-K0 K+ K+ pi- PHSP; -#--- 6-body a1a1 ------------ -0.000050 a_1+ a_10 PHSP; -# -# B -> cc= s sum = 1.92% -# -0.001007 J/psi K+ SVS; -0.00143 J/psi K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.000049 J/psi pi+ SVS; -0.00005 J/psi rho+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.0002 J/psi K0 pi+ PHSP; -0.0001 J/psi K+ pi0 PHSP; -#rl0.0007 J/psi K+ pi- pi+ PHSP; -#rl0.00035 J/psi K+ pi0 pi0 PHSP; -#rl0.00035 J/psi K0 pi+ pi0 PHSP; -0.0001 J/psi K'_1+ SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; -0.0005 J/psi K_2*+ PHSP; -0.0018 J/psi K_1+ SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; -0.000052 J/psi phi K+ PHSP; -# -0.000648 psi(2S) K+ SVS; -0.00067 psi(2S) K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.0004 psi(2S) K0 pi+ PHSP; -0.0002 psi(2S) K+ pi0 PHSP; -0.0019 psi(2S) K+ pi- pi+ PHSP; -0.0001 psi(2S) K+ pi0 pi0 PHSP; -0.0001 psi(2S) K0 pi+ pi0 PHSP; -0.0004 psi(2S) K_1+ PHSP; -# -0.00091 eta_c K+ PHSP; -0.0012 K*+ eta_c SVS; -0.0002 eta_c K0 pi+ PHSP; -0.0001 eta_c K+ pi0 PHSP; -0.0002 eta_c K+ pi- pi+ PHSP; -0.0001 eta_c K+ pi0 pi0 PHSP; -0.0001 eta_c K0 pi+ pi0 PHSP; -# -0.00034 eta_c(2S) K+ PHSP; -0.00048 K*+ eta_c(2S) SVS; -0.00008 eta_c(2S) K0 pi+ PHSP; -0.00005 eta_c(2S) K+ pi0 PHSP; -0.00008 eta_c(2S) K+ pi- pi+ PHSP; -0.00005 eta_c(2S) K+ pi0 pi0 PHSP; -0.00005 eta_c(2S) K0 pi+ pi0 PHSP; -# -0.00014 chi_c0 K+ PHSP; -0.0004 K*+ chi_c0 SVS; -0.0002 chi_c0 K0 pi+ PHSP; -0.0001 chi_c0 K+ pi0 PHSP; -0.0002 chi_c0 K+ pi- pi+ PHSP; -0.0001 chi_c0 K+ pi0 pi0 PHSP; -0.0001 chi_c0 K0 pi+ pi0 PHSP; -# -0.00049 chi_c1 K+ SVS; -0.00036 chi_c1 K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.0004 chi_c1 K0 pi+ PHSP; -0.0002 chi_c1 K+ pi0 PHSP; -0.0004 chi_c1 K+ pi- pi+ PHSP; -0.0002 chi_c1 K+ pi0 pi0 PHSP; -0.0002 chi_c1 K0 pi+ pi0 PHSP; -# -0.00002 chi_c2 K+ STS; -0.00002 chi_c2 K*+ PHSP; -0.0002 chi_c2 K0 pi+ PHSP; -0.0001 chi_c2 K+ pi0 PHSP; -0.0002 chi_c2 K+ pi- pi+ PHSP; -0.0001 chi_c2 K+ pi0 pi0 PHSP; -0.0001 chi_c2 K0 pi+ pi0 PHSP; -# -0.00049 psi(3770) K+ SVS; -0.0005 psi(3770) K*+ PHSP; -0.0003 psi(3770) K0 pi+ PHSP; -0.0002 psi(3770) K+ pi0 PHSP; -0.0002 psi(3770) K+ pi- pi+ PHSP; -0.0001 psi(3770) K+ pi0 pi0 PHSP; -0.0001 psi(3770) K0 pi+ pi0 PHSP; -0.0003 psi(3770) K_1+ PHSP; -# -# b -> c (sc=) -> D Ds X Sum = 10% -# -0.0103 anti-D0 D_s+ PHSP; -0.0084 anti-D*0 D_s+ SVS; -0.0078 D_s*+ anti-D0 SVS; -0.0175 D_s*+ anti-D*0 SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0006 anti-D'_10 D_s+ SVS; -0.0012 anti-D'_10 D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0012 anti-D_10 D_s+ SVS; -0.0024 anti-D_10 D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0042 anti-D_2*0 D_s+ STS; -0.0040 anti-D_2*0 D_s*+ PHSP; -# -# -# -# -# -0.0036 D_s+ D- pi+ PHSP; -0.0018 D_s+ anti-D0 pi0 PHSP; -0.0037 D_s*+ D- pi+ PHSP; -0.0018 D_s*+ anti-D0 pi0 PHSP; -0.0033 D_s+ D- pi+ pi0 PHSP; -0.0033 D_s+ anti-D0 pi+ pi- PHSP; -0.0008 D_s+ anti-D0 pi0 pi0 PHSP; -0.0033 D_s*+ D- pi+ pi0 PHSP; -0.0033 D_s*+ anti-D0 pi+ pi- PHSP; -0.0008 D_s*+ anti-D0 pi0 pi0 PHSP; -# -# b -> c (sc=) -> D D= K X Sum = 8% -# update: Ref. [B1]: -# update October 26, 2004 -# External W-emission amplitude -0.0017 anti-D0 D+ K0 PHSP; -0.0052 anti-D0 D*+ K0 PHSP; -0.0031 anti-D*0 D+ K0 PHSP; -0.0078 anti-D*0 D*+ K0 PHSP; -# External+internal W-emission amplitude -0.0021 anti-D0 D0 K+ PHSP; -0.0018 anti-D*0 D0 K+ PHSP; -0.0047 anti-D0 D*0 K+ PHSP; -0.0053 anti-D*0 D*0 K+ PHSP; -# Internal W-emission amplitude (color suppressed modes) -0.0005 D+ D- K+ PHSP; -0.0005 D*+ D- K+ PHSP; -0.0015 D+ D*- K+ PHSP; -0.0015 D*+ D*- K+ PHSP; -# -0.0025 anti-D0 D+ K*0 PHSP; -0.0025 anti-D*0 D+ K*0 PHSP; -0.0025 anti-D0 D*+ K*0 PHSP; -0.0050 anti-D*0 D*+ K*0 PHSP; -# -0.0025 anti-D0 D0 K*+ PHSP; -0.0025 anti-D*0 D0 K*+ PHSP; -0.0025 anti-D0 D*0 K*+ PHSP; -0.0050 anti-D*0 D*0 K*+ PHSP; -# -0.0005 D+ D- K*+ PHSP; -0.0005 D*+ D- K*+ PHSP; -0.0005 D+ D*- K*+ PHSP; -0.0010 D*+ D*- K*+ PHSP; -# -# B->D(*)D(*). See Ref [B1]: -# -0.00042 D+ anti-D0 PHSP; -0.00039 D*+ anti-D0 SVS; -0.00063 anti-D*0 D+ SVS; -0.00081 anti-D*0 D*+ SVV_HELAMP 0.56 0.0 0.96 0.0 0.47 0.0; - -# -# B -> D(*) X Exclusive Modes -# October 26, 2004 Lange update -0.00519 anti-D*0 pi+ SVS; -0.00484 anti-D0 pi+ PHSP; -0.0134 rho+ anti-D0 SVS; -# D* rho HELAMP parameters taken from ICHEP 98-852. -0.0098 anti-D*0 rho+ SVV_HELAMP 0.283 1.13 0.932 0.0 0.228 0.95; -# -0.0005 anti-D0 pi0 pi+ PHSP; -0.0005 anti-D*0 pi0 pi+ PHSP; -0.00102 D- pi+ pi+ PHSP; -0.00135 D*- pi+ pi+ PHSP; -# -# D a1 updated Ref. [B1]: -0.004 a_1+ anti-D0 SVS; -0.0042 anti-D0 rho0 pi+ PHSP; -0.0050 anti-D0 pi- pi+ pi+ PHSP; -# -# SVV_HELAMP from factorization, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: -# updated Ref. [B1]: -# October 26, 2004 Lange update -# -0.019 anti-D*0 a_1+ SVV_HELAMP 0.458 0.0 0.866 0.0 0.200 0.0; -# -0.00042 anti-D*0 rho0 pi+ PHSP; -0.0005 anti-D*0 pi- pi+ pi+ PHSP; -# -0.0020 D- rho+ pi+ PHSP; -0.0020 D- pi0 pi+ pi+ PHSP; -0.0020 D*- rho+ pi+ PHSP; -0.0150 D*- pi0 pi+ pi+ PHSP; -0.0005 anti-D*0 rho+ pi0 PHSP; -0.0005 anti-D*0 pi+ pi0 pi0 PHSP; -# -# B->D** pi and D** rho, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html -# -# -0.000876 anti-D_10 pi+ SVS; -0.0005 anti-D'_10 pi+ SVS; -0.00052 anti-D_2*0 pi+ STS; -0.0007 anti-D_10 rho+ PHSP; -0.0022 anti-D'_10 rho+ PHSP; -0.0038 anti-D_2*0 rho+ PHSP; -0.00061 anti-D_0*0 pi+ PHSP; -# -# -# B->DK, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: -# update: Ref [B1]: -# -0.000402 anti-D0 K+ PHSP; -0.000416 anti-D*0 K+ SVS; -0.00053 K*+ anti-D0 SVS; -0.00081 anti-D*0 K*+ SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; -#October 26, 2004 Lange -0.0000005 D+ pi0 PHSP; -0.0000005 D*+ pi0 SVS; -0.000011 D+ anti-K0 PHSP; -0.000006 D*+ anti-K0 SVS; -# -#October 26, 2004 - Lange -0.00075 anti-D0 D_s0*+ PHSP; -0.00090 anti-D*0 D_s0*+ SVS; -0.0031 D_s1+ anti-D0 SVS; -0.0120 anti-D*0 D_s1+ SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; -# -# Feb 2009 -# -0.00055 anti-D0 K+ anti-K0 PHSP; -0.00075 anti-D0 K+ anti-K*0 PHSP; -0.00150 anti-D*0 K+ anti-K*0 PHSP; -# -# Feb 2009 -# -0.00275 anti-D0 omega pi+ PHSP; -0.00450 anti-D*0 omega pi+ PHSP; -# -# Feb 2009 -# -0.00045 anti-D0 D'_s1+ PHSP; -0.00094 anti-D*0 D'_s1+ PHSP; -# -# Lam_c X / Sigma_c X -# -#0.04000 anti-cd_1 uu_1 PYTHIA 23; -0.0349703 anti-cd_1 uu_1 PYTHIA 23; -# -# Xi_c X 2.4% -# -#0.02400 anti-cs_1 uu_1 PYTHIA 23; -0.0095374 anti-cs_1 uu_1 PYTHIA 23; -# -# -0.238716 u anti-d anti-c u PYTHIA 48; -0.0455674 u anti-d anti-c u PYTHIA 13; -0.0238434 u anti-s anti-c u PYTHIA 13; -#lange - try to crank up the psi production.... -0.0784183 c anti-s anti-c u PYTHIA 13; -0.0042388 c anti-d anti-c u PYTHIA 13; -0.0031791 u anti-d anti-u u PYTHIA 48; -0.0042388 c anti-s anti-u u PYTHIA 48; -# JGS 11/5/02 This and similar a few lines above have been divided by two -# to solve a double-counting problem for this channel -0.0021724 u anti-u anti-d u PYTHIA 48; -0.0000742 d anti-d anti-d u PYTHIA 48; -0.0000954 s anti-s anti-d u PYTHIA 48; -0.0023314 u anti-u anti-s u PYTHIA 48; -0.0019075 d anti-d anti-s u PYTHIA 48; -0.0015896 s anti-s anti-s u PYTHIA 48; -0.0052985 anti-s u PYTHIA 32; -#### -Enddecay - -#----------------------------------------------------------------- -# B references: -# -# [B1]: http://www.slac.stanford.edu/BFROOT/www/Physics/Tools/generators/dec-update/2002/Breco-recommendations.html -# -#----------------------------------------------------------------- - - -# -# -# B* mesons -# -Decay B*+ -1.0000 B+ gamma VSP_PWAVE; -Enddecay -Decay B*- -1.0000 B- gamma VSP_PWAVE; -Enddecay -Decay B*0 -1.0000 B0 gamma VSP_PWAVE; -Enddecay -Decay anti-B*0 -1.0000 anti-B0 gamma VSP_PWAVE; -Enddecay -Decay B_s*0 -1.0000 B_s0 gamma VSP_PWAVE; -Enddecay -Decay anti-B_s*0 -1.0000 anti-B_s0 gamma VSP_PWAVE; -Enddecay -# -# B_s decays. -# -# -# To count up the BR for this decay: -# awk ' /^0./{ sum = sum + $1 ;print sum } ' junk.dec -# -# anti-B_s decays. -# ------------------------------------------------------- -# whb&fkw 3/28/01 Taken from fkw's QQ tables. -# most dubious part are the B to baryons. -# fkw 4/28/00 made the Bs parallel to the Bd as best as I could -# ------------------------------------------------------- -# -# Lange - Nov14 - NOT adjusted for D_s->phipi change -# -Decay anti-B_s0 -# b --> c (l nu) -# Sum = 24.5% -0.0210 D_s+ e- anti-nu_e PHOTOS ISGW2; -0.0490 D_s*+ e- anti-nu_e PHOTOS ISGW2; -0.0040 D_s1+ e- anti-nu_e PHOTOS ISGW2; -0.0040 D_s0*+ e- anti-nu_e PHOTOS ISGW2; -0.0070 D'_s1+ e- anti-nu_e PHOTOS ISGW2; -0.0070 D_s2*+ e- anti-nu_e PHOTOS ISGW2; -# -0.0210 D_s+ mu- anti-nu_mu PHOTOS ISGW2; -0.0490 D_s*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0040 D_s1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0040 D_s0*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0070 D'_s1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0070 D_s2*+ mu- anti-nu_mu PHOTOS ISGW2; -# -#0.0070 D_s+ tau- anti-nu_tau ISGW2; -#0.0150 D_s*+ tau- anti-nu_tau ISGW2; -#0.0013 D_s1+ tau- anti-nu_tau ISGW2; -#0.0013 D_s0*+ tau- anti-nu_tau ISGW2; -#0.0023 D'_s1+ tau- anti-nu_tau ISGW2; -#0.0023 D_s2*+ tau- anti-nu_tau ISGW2; -# fkw 5/04/01 changed the above to account for the non-res part that I -# had to take out. -0.0080 D_s+ tau- anti-nu_tau ISGW2; -0.0160 D_s*+ tau- anti-nu_tau ISGW2; -0.0018 D_s1+ tau- anti-nu_tau ISGW2; -0.0018 D_s0*+ tau- anti-nu_tau ISGW2; -0.0028 D'_s1+ tau- anti-nu_tau ISGW2; -0.0028 D_s2*+ tau- anti-nu_tau ISGW2; -# -# fkw 4/28/00 the next few are decays where a u\bar u or d\bar d is popped -# between the charm quark and the spectator. I can thus not -# just replace a D by a Ds as above when going from Bd to Bs. -# fkw 5/04/01 Had to take these out because they crash EvtGen. -# Will have to fix this eventually !!! -#0.0010 D*0 K+ tau- anti-nu_tau GOITY_ROBERTS; -#0.0010 D*+ K0 tau- anti-nu_tau GOITY_ROBERTS; -#0.0010 D0 K+ tau- anti-nu_tau GOITY_ROBERTS; -#0.0010 D+ K0 tau- anti-nu_tau GOITY_ROBERTS; -# fkw 4/28/00 B0B -> TAU D PI0 = 1/2 of TAU D PI+ because of pi0 wave function -# However, the same factor of 1/2 doesn't apply to BSB !!! -# -# fkw 3/28/01 There seem to be no semi-leptonic B to baryon decays in nature. -# I don't pretend to understand why. PDG 2000 has a limit of -# < 3.2e-3 where one might naively expect -# 10% * BR(B->/\c) = 0.1 * (6.4+-1.1)% -#0.0050 anti-nu_e e- ??? Baryon -#0.0050 anti-nu_mu mu- ??? Baryon -# -# b --> c (s c=) -# Sum = 11.44% -# 2-body = 4.72% -# more-body = 6.72% -0.0086 D_s- D_s+ PHSP; -0.0099 D_s*+ D_s- SVS; -0.0099 D_s*- D_s+ SVS; -0.0197 D_s*- D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# fkw 4/28/00 more states with popped q\bar q. -# The one's here involve only popped and spectator. -# Popping stuff in the cs from the W comes further below. -# The same isospin comment applies here as above in the -# semi-leptonic decays with tau and popped q\bar q. -0.0096 D_s- D+ K0 PHSP; -0.0096 D_s- anti-D0 K+ PHSP; -0.0096 D_s*- D+ K0 PHSP; -0.0096 D_s*- D0 K+ PHSP; -# -0.0024 D_s- D+ pi0 K0 PHSP; -0.0048 D_s- D0 pi+ K0 PHSP; -0.0048 D_s- D+ pi- K+ PHSP; -0.0024 D_s- D0 pi0 K+ PHSP; -# -0.0024 D_s*- D+ pi0 K0 PHSP; -0.0048 D_s*- D0 pi+ K0 PHSP; -0.0048 D_s*- D+ pi- K+ PHSP; -0.0024 D_s*- D0 pi0 K+ PHSP; -# -# -# b --> (c ) (c ) (s ) -# Sum = 8.0% -# DDK amplitudes R.A.Briere 10/97 -# fkw 4/28/00 these are q\bar q popping that don't involve the spectator -# Bd->Bs just involves switching the c\bar d to c\bar s. -# -0.0150 D_s*+ anti-D*0 K- PHSP; -0.0150 D_s*+ D*- anti-K0 PHSP; -# -0.0050 D_s*+ anti-D0 K- PHSP; -0.0050 D_s*+ D- anti-K0 PHSP; -# -0.0050 D_s+ anti-D*0 K- PHSP; -0.0050 D_s+ D*- anti-K0 PHSP; -# -0.0020 D_s+ anti-D0 K- PHSP; -0.0020 D_s+ D- anti-K0 PHSP; -# -0.0030 D_s*+ anti-D*0 K*- PHSP; -0.0030 D_s*+ D*- anti-K*0 PHSP; -# -0.0050 D_s*+ anti-D0 K*- PHSP; -0.0050 D_s*+ D- anti-K*0 PHSP; -# -0.0025 D_s+ anti-D*0 K*- PHSP; -0.0025 D_s+ D*- anti-K*0 PHSP; -# -0.0025 D_s+ anti-D0 K*- PHSP; -0.0025 D_s+ D- anti-K*0 PHSP; -# -# -# b --> c (d c=) -# Sum = 1.0% -0.0017 D_s- D+ PHSP; -0.0017 D*+ D_s- SVS; -0.0017 D_s*- D+ SVS; -0.0017 D_s*- D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# fkw 4/38/00 more popping at the lower vertex -# but with upper vertex cabbibo suppressed. -0.0007 D- D+ K0 PHSP; -0.0007 D- anti-D0 K+ PHSP; -0.0007 D*- D+ K0 PHSP; -0.0007 D*- D0 K+ PHSP; -# -0.0003 D- D+ pi0 K0 PHSP; -0.0007 D- D0 pi+ K0 PHSP; -0.0003 D- D+ pi- K+ PHSP; -0.0007 D- D0 pi0 K+ PHSP; -# -0.0003 D*- D+ pi0 K0 PHSP; -0.0007 D*- D0 pi+ K0 PHSP; -0.0003 D*- D+ pi- K+ PHSP; -0.0007 D*- D0 pi0 K+ PHSP; -# -# b --> c (s u=) -# exclusive -# Sum = 0.09% -0.00015 D_s*+ K- SVS; -0.00015 D_s+ K- PHSP; -0.00030 D_s*+ K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.0283 0.0; -0.00030 K*- D_s+ SVS; -# -# fkw 4/28/00 Strategy for charmonium modes: -# Take Bd BR's, replace spectator, -# assume etaprime = 2/3 ss -# and eta = 1/3 ss -# -# Note: Just for kicks I gave the c\bar c decays a small piece that is -# self tagging. See if you can find it. This is already in -# the B0 decays in cleo's version of decay.dec . -# -# B --> (c c=) (s s=) -# 2.65% -# should be: psi = 0.80% CLNS 94/1315 but isn't quite right. -0.00064 J/psi eta' SVS; -0.00032 J/psi eta SVS; -0.00135 J/psi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00008 J/psi K0 SVS; -0.00070 J/psi K- K+ PHSP; -0.00070 J/psi anti-K0 K0 PHSP; -0.00070 J/psi anti-K0 K+ pi- PHSP; -0.00070 J/psi anti-K0 K0 pi0 PHSP; -0.00070 J/psi K- K+ pi0 PHSP; -# LHCb PR 04/02/04 Add (cc) phi n pi(+/0) -0.00039 J/psi phi pi+ pi- PHSP; -0.00039 J/psi phi pi0 pi0 PHSP; -# LHCb PR add (cc) phi eta(') + npi see CDF QQ -0.0002 J/psi eta pi+ pi- PHSP; -0.0002 J/psi eta pi0 pi0 PHSP; -0.0004 J/psi eta' pi+ pi- PHSP; -0.0004 J/psi eta' pi0 pi0 PHSP; -0.0002 J/psi pi+ pi- PHSP; -0.0002 J/psi pi0 pi0 PHSP; -# psi' = 0.34% CLNS 94/1315 -# -0.000465 psi(2S) eta' SVS; -0.000235 psi(2S) eta SVS; -0.0012 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0003 psi(2S) K- K+ PHSP; -0.0003 psi(2S) anti-K0 K0 PHSP; -0.0003 psi(2S) anti-K0 K+ pi- PHSP; -0.0003 psi(2S) anti-K0 K0 pi0 PHSP; -0.0003 psi(2S) K- K+ pi0 PHSP; -0.00034 psi(2S) phi pi+ pi- PHSP; -0.00034 psi(2S) phi pi0 pi0 PHSP; -0.0002 psi(2S) eta pi+ pi- PHSP; -0.0002 psi(2S) eta pi0 pi0 PHSP; -0.0004 psi(2S) eta' pi+ pi- PHSP; -0.0004 psi(2S) eta' pi0 pi0 PHSP; -0.0002 psi(2S) pi+ pi- PHSP; -0.0002 psi(2S) pi0 pi0 PHSP; -# -# chic0 = 0.05% (20% of chic2) -# Bodwin et.al. Phys Rev D46 1992 -0.00010 chi_c0 eta' PHSP; -0.00005 chi_c0 eta PHSP; -0.00020 phi chi_c0 SVS; -0.00003 chi_c0 K- K+ PHSP; -0.00003 chi_c0 anti-K0 K0 PHSP; -0.00003 chi_c0 anti-K0 K+ pi- PHSP; -0.00003 chi_c0 anti-K0 K0 pi0 PHSP; -0.00003 chi_c0 K- K+ pi0 PHSP; -# -# -# chic1 = 0.37% CLNS 94/1315 -0.0007 chi_c1 eta' SVS; -0.0003 chi_c1 eta SVS; -0.0014 chi_c1 phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00026 chi_c1 K- K+ PHSP; -0.00026 chi_c1 anti-K0 K0 PHSP; -0.00026 chi_c1 anti-K0 K+ pi- PHSP; -0.00026 chi_c1 anti-K0 K0 pi0 PHSP; -0.00026 chi_c1 K- K+ pi0 PHSP; -0.00040 chi_c1 phi pi+ pi- PHSP; -0.00040 chi_c1 phi pi0 pi0 PHSP; -0.0001 chi_c1 eta pi+ pi- PHSP; -0.0001 chi_c1 eta pi0 pi0 PHSP; -0.0002 chi_c1 eta' pi+ pi- PHSP; -0.0002 chi_c1 eta' pi0 pi0 PHSP; -# -# -# chic2 = 0.25% CLNS 94/1315 -0.000465 chi_c2 eta' STS; -0.000235 chi_c2 eta STS; -#0.0010 chi_c2 phi STV; whb: model doesn't exist! -0.00016 chi_c2 K- K+ PHSP; -0.00016 chi_c2 anti-K0 K0 PHSP; -0.00016 chi_c2 anti-K0 K+ pi- PHSP; -0.00016 chi_c2 anti-K0 K0 pi0 PHSP; -0.00016 chi_c2 K- K+ pi0 PHSP; -# -# -# etac(1s) = 0.41% Guess: CBX 97-65 -# -0.0008 eta_c eta' PHSP; -0.0004 eta_c eta PHSP; -0.0015 phi eta_c SVS; -0.00028 eta_c K- K+ PHSP; -0.00028 eta_c anti-K0 K0 PHSP; -0.00028 eta_c anti-K0 K+ pi- PHSP; -0.00028 eta_c anti-K0 K0 pi0 PHSP; -0.00028 eta_c K- K+ pi0 PHSP; -0.00040 eta_c phi pi+ pi- PHSP; -0.00040 eta_c phi pi0 pi0 PHSP; -0.0001 eta_c eta pi+ pi- PHSP; -0.0001 eta_c eta pi0 pi0 PHSP; -0.0002 eta_c eta' pi+ pi- PHSP; -0.0002 eta_c eta' pi0 pi0 PHSP; -# -# -# etac(2s) = 0.18% Guess: CBX 97-65 -0.0004 eta_c(2S) eta' PHSP; -0.0002 eta_c(2S) eta PHSP; -0.0006 phi eta_c(2S) SVS; -0.00012 eta_c(2S) K- K+ PHSP; -0.00012 eta_c(2S) anti-K0 K0 PHSP; -0.00012 eta_c(2S) anti-K0 K+ pi- PHSP; -0.00012 eta_c(2S) anti-K0 K0 pi0 PHSP; -0.00012 eta_c(2S) K- K+ pi0 PHSP; -# -# -# hc = 0.25% (100% of chic2) -# Bodwin et.al. Phys Rev D46 1992 -# -0.000465 h_c eta' SVS; -0.000235 h_c eta SVS; -0.0010 h_c phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00016 h_c K- K+ PHSP; -0.00016 h_c anti-K0 K0 PHSP; -0.00016 h_c anti-K0 K+ pi- PHSP; -0.00016 h_c anti-K0 K0 pi0 PHSP; -0.00016 h_c K- K+ pi0 PHSP; -# -# -# b --> c (d u=) -# Exclusive Channels = 6.33% -# fkw 4/28/00 I rearanged this a bit after copying it from -# B0B decay list. -# -# first come the external W-emission decays: -# -0.0008 D_s1+ pi- SVS; -0.0021 D_s1+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0013 D_s2*+ pi- STS; -#0.0037 D_s2*+ rho- STV; # whb: model doesn't exist -# -0.0027 D_s*+ pi- SVS; -0.0026 D_s+ pi- PHSP; -0.0073 rho- D_s+ SVS; -0.0070 D_s*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.0085 a_1- D_s+ SVS; -0.0009 D_s+ rho0 pi- PHSP; -0.0009 D_s+ rho- pi0 PHSP; -0.0009 D_s+ pi+ pi- pi- PHSP; -0.0009 D_s+ pi0 pi- pi0 PHSP; -# -0.0122 D_s*+ a_1- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0010 D_s*+ rho0 pi- PHSP; -0.0010 D_s*+ rho- pi0 PHSP; -0.0077 D_s*+ pi+ pi- pi- PHSP; -0.0010 D_s*+ pi0 pi- pi0 PHSP; -# -# then the color suppressed decays: -# -# fkw 4/28/00 color suppressed modes bumped up by factor 2 from isospin -# i.e. Bs doesn't have the factor 2 suppression Bd has. -0.0002 D*0 K0 SVS; -0.0002 D0 K0 PHSP; -0.0002 K*0 D0 SVS; -0.0002 D*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# PR LHCb Add p pbar mode -0.000000001 p+ anti-p- PHSP; -# fkw 4/28/00 ignore the internal W emission decays with additional -# q\bar q popping. -# -# Here come the various types of "inclusive unknown" decays: -# -# Start with B to baryons: -# fkw 3/28/01 I don't know what I'm doing here!!! This needs to be checked!!! -# Mark Whitehead 30/4/2010 Weighted PYHTIA to get total BF = 100% -0.01997 cs_0 anti-ud_0 PYTHIA 23; -0.03992 cs_1 anti-ud_1 PYTHIA 23; -# -# Next come external W-emission: -0.3073391615 anti-u d c anti-s PYTHIA 48; -0.049422 anti-u d c anti-s PYTHIA 25; -# Now the internal W-emission: -0.019472 anti-u c d anti-s PYTHIA 48; -# Then some b->u external W-emission with upper vertex charm -0.003992 anti-c s u anti-s PYTHIA 48; -# and finally some cabibbo suppressed external and internal W-emission -0.01498 anti-u s c anti-s PYTHIA 48; -0.0021956 anti-u s c anti-s PYTHIA 25; -0.0008982 anti-u c s anti-s PYTHIA 48; -# and some c cbar d stuff as well as c cbar s -0.00550 anti-c d c anti-s PYTHIA 13; -0.001498 anti-c d c anti-s PYTHIA 13; -# and some miscellaneous charmless stuff -0.0035928 anti-u u d anti-s PYTHIA 48; -0.0006986 anti-d d d anti-s PYTHIA 48; -0.0008982 anti-s s d anti-s PYTHIA 48; -0.001996 anti-u u s anti-s PYTHIA 48; -0.0015968 anti-d d s anti-s PYTHIA 48; -0.0012974 anti-s s s anti-s PYTHIA 48; -0.00499 s anti-s PYTHIA 32; - -# fkw 5/10/00 the b->ulnu decays are loosely modelled according to B0 in EvtGen -0.000200 K+ e- anti-nu_e PHOTOS ISGW2; -0.000300 K*+ e- anti-nu_e PHOTOS ISGW2; -0.000300 K_1+ e- anti-nu_e PHOTOS ISGW2; -0.000200 K'_1+ e- anti-nu_e PHOTOS ISGW2; -# -# -0.000200 K+ mu- anti-nu_mu PHOTOS ISGW2; -0.000300 K*+ mu- anti-nu_mu PHOTOS ISGW2; -0.000300 K_1+ mu- anti-nu_mu PHOTOS ISGW2; -0.000200 K'_1+ mu- anti-nu_mu PHOTOS ISGW2; -# ------------- -# 2e-3 for charmless semi-leptonic - -#*********************************************************** -# -# fkw 5/10/00 -# -# ideas behind these (largely) made up Br's for charmless -# hadronic B decays: -# (1) any PP and PV modes that are used or calculated -# in globfit code by Hou,Smith,Wuerthwein are taken from -# the latest fit i.e. May2000 -# (2) anything else is from Ali,Kramer,Lue -# -# None of this should be taken too serious! -# -#*********************************************************** -# Mark Whitehead 30/4/2010 Updated K+K- -# PR LHCb 04/07/04 update BR -0.0000265 K- K+ PHSP; -# PR LHCb 04/07/04 split into KS/KL -0.0000000 anti-K0 K0 PHSP; -0.0000100 K_S0 K_S0 PHSP; -0.0000100 K_L0 K_L0 PHSP; -# PR LHCb 04/07/04 update BR -0.0000048 pi- K+ PHSP; -0.0000002 pi0 K0 PHSP; -# PR LHCb 04/07/04 add Bs->pi+ pi- -0.00000001 pi+ pi- PHSP; -# -0.0000012 omega eta SVS; -0.0000025 omega eta' SVS; -0.0000013 phi eta SVS; -0.0000025 phi eta' SVS; -0.00000008 omega anti-K0 SVS; -0.000000002 phi anti-K0 SVS; -# -#next is just twice PI- RHO0 -0.0000250 K*+ pi- SVS; -0.0000120 rho- K+ SVS; -0.00000002 rho0 K0 SVS; -0.00000002 K*0 pi0 SVS; -# -0.0000046 K*- K+ SVS; -# PR LHCb 04/07/04 Split into KS/KL -0.0000000 anti-K*0 K0 SVS; -0.0000020 anti-K*0 K_S0 SVS; -0.0000020 anti-K*0 K_L0 SVS; -0.0000082 K*+ K- SVS; -# PR LHCb 04/07/04 Split into KS/KL -0.0000000 K*0 anti-K0 SVS; -0.0000020 K*0 K_S0 SVS; -0.0000020 K*0 K_L0 SVS; -# -0.0000580 eta' eta' PHSP; -0.0000250 eta' eta PHSP; -0.0000040 eta eta PHSP; -#### Already included above 0.0000200 phi eta SVS; -#### Already included above 0.0000100 phi eta' SVS; -# -#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 -0.00000007 K0 eta' PHSP; -0.00000023 K0 eta PHSP; -0.000000021 K*0 eta' SVS; -0.00000007 K*0 eta SVS; -# -#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 -# for vector-vector final states -0.000020 rho- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000008 rho0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000000005 omega K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.000006 K*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# PR LHCb 04/07/04 Update BR -0.000004 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000008 phi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000000004 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# decays that go via b->d penguins -#### Already included above 0.0000004 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# PR LHCb : add Bs -> mu+ mu- -0.0000000035 mu- mu+ PHSP; -#PR LHCb 04/08/2004 add Bs -> tau+ tau- (BR not to take too seriously) -0.0000000020 tau- tau+ PHSP; -# PR LHCb 04/05/2004 : add Bs -> phi gamma -0.000045 phi gamma SVP_HELAMP 1.0 0.0 1.0 0.0; -# PR LHCb 04/08/2004 : add Bs -> phi mu mu, phi e e -0.0000023 phi e- e+ BTOSLLALI; -0.0000023 phi mu- mu+ BTOSLLALI; -# PR LHCb 16 apr 2004 : add Bs -> gamma gamma -0.0000005 gamma gamma PHSP; -#-------------- -# 257.122e-6 for all the charmless hadronic -# -Enddecay -# -# B_s decays. -# ------------------------------------------------------- -# whb&fkw 3/28/01 Taken from fkw's QQ tables. -# most dubious part are the B to baryons. -# fkw 4/28/00 made the Bs parallel to the Bd as best as I could -# ------------------------------------------------------- -Decay B_s0 -0.0210 D_s- e+ nu_e PHOTOS ISGW2; -0.0490 D_s*- e+ nu_e PHOTOS ISGW2; -0.0040 D_s1- e+ nu_e PHOTOS ISGW2; -0.0040 D_s0*- e+ nu_e PHOTOS ISGW2; -0.0070 D'_s1- e+ nu_e PHOTOS ISGW2; -0.0070 D_s2*- e+ nu_e PHOTOS ISGW2; -0.0210 D_s- mu+ nu_mu PHOTOS ISGW2; -0.0490 D_s*- mu+ nu_mu PHOTOS ISGW2; -0.0040 D_s1- mu+ nu_mu PHOTOS ISGW2; -0.0040 D_s0*- mu+ nu_mu PHOTOS ISGW2; -0.0070 D'_s1- mu+ nu_mu PHOTOS ISGW2; -0.0070 D_s2*- mu+ nu_mu PHOTOS ISGW2; -#fkw 5/04/01 changed these to account for taking out non-res -#0.0070 D_s- tau+ nu_tau ISGW2; -#0.0150 D_s*- tau+ nu_tau ISGW2; -#0.0013 D_s1- tau+ nu_tau ISGW2; -#0.0013 D_s0*- tau+ nu_tau ISGW2; -#0.0023 D'_s1- tau+ nu_tau ISGW2; -#0.0023 D_s2*- tau+ nu_tau ISGW2; -0.0080 D_s- tau+ nu_tau ISGW2; -0.0160 D_s*- tau+ nu_tau ISGW2; -0.0018 D_s1- tau+ nu_tau ISGW2; -0.0018 D_s0*- tau+ nu_tau ISGW2; -0.0028 D'_s1- tau+ nu_tau ISGW2; -0.0028 D_s2*- tau+ nu_tau ISGW2; -# -# fkw 4/28/00 the next few are decays where a u\bar u or d\bar d is popped -# between the charm quark and the spectator. I can thus not -# just replace a D by a Ds as above when going from Bd to Bs. -# -# fkw 5/04/01 Had to take non-res out because it crashed EvtGen. -#0.0010 anti-D*0 K- tau+ nu_tau GOITY_ROBERTS; -#0.0010 D*- anti-K0 tau+ nu_tau GOITY_ROBERTS; -#0.0010 anti-D0 K- tau+ nu_tau GOITY_ROBERTS; -#0.0010 D- anti-K0 tau+ nu_tau GOITY_ROBERTS; -# fkw 4/28/00 B0 -> TAU D PI0 = 1/2 of TAU D PI- because of pi0 wave function -# However, the same factor of 1/2 doesn't apply to BS0 !!! -# fkw 3/28/01 There seem to be no semi-leptonic B to baryon decays in nature. -# I don't pretend to understand why. PDG 2000 has a limit of -# < 3.2e-3 where one might naively expect -# 10% * BR(B->/\c) = 0.1 * (6.4+-1.1)% -#0.0050 nu_e e+ B-Baryon -#0.0050 nu_mu mu+ B-Baryon -# -# b --> c (s c=) -# Sum = 11.44% -# 2-body = 4.72% -# more-body = 6.72% -0.0086 D_s- D_s+ PHSP; -0.0099 D_s*+ D_s- SVS; -0.0099 D_s*- D_s+ SVS; -0.0197 D_s*- D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# fkw 4/28/00 more states with popped q\bar q. -# The one's here involve only popped and spectator. -# Popping stuff in the cs from the W comes further below. -# The same isospin comment applies here as above in the -# semi-leptonic decays with tau and popped q\bar q. -0.0096 D_s+ D- anti-K0 PHSP; -0.0096 D_s+ D0 K- PHSP; -0.0096 D_s*+ D- anti-K0 PHSP; -0.0096 D_s*+ anti-D0 K- PHSP; -# -0.0024 D_s+ D- pi0 anti-K0 PHSP; -0.0048 D_s+ anti-D0 pi- anti-K0 PHSP; -0.0048 D_s+ D- pi+ K- PHSP; -0.0024 D_s+ anti-D0 pi0 K- PHSP; -# -0.0024 D_s*+ D- pi0 anti-K0 PHSP; -0.0048 D_s*+ anti-D0 pi- anti-K0 PHSP; -0.0048 D_s*+ D- pi+ K- PHSP; -0.0024 D_s*+ anti-D0 pi0 K- PHSP; -# -# -# b --> (c ) (c ) (s ) -# Sum = 8.0% -# DDK amplitudes R.A.Briere 10/97 -# fkw 4/28/00 these are q\bar q popping that don't involve the spectator -# Bd->Bs just involves switching the c\bar d to c\bar s. -# -0.0150 D_s*- D*0 K+ PHSP; -0.0150 D_s*- D*+ K0 PHSP; -0.0050 D_s*- D0 K+ PHSP; -0.0050 D_s*- D+ K0 PHSP; -0.0050 D_s- D*0 K+ PHSP; -0.0050 D_s- D*+ K0 PHSP; -0.0020 D_s- D0 K+ PHSP; -0.0020 D_s- D+ K0 PHSP; -0.0030 D_s*- D*0 K*+ PHSP; -0.0030 D_s*- D*+ K*0 PHSP; -0.0050 D_s*- D0 K*+ PHSP; -0.0050 D_s*- D+ K*0 PHSP; -0.0025 D_s- D*0 K*+ PHSP; -0.0025 D_s- D*+ K*0 PHSP; -0.0025 D_s- D0 K*+ PHSP; -0.0025 D_s- D+ K*0 PHSP; -# -# -# b --> c (d c=) -# Sum = 1.36% -0.0017 D_s+ D- PHSP; -0.0017 D*- D_s+ SVS; -0.0017 D_s*+ D- SVS; -0.0017 D_s*+ D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# fkw 4/38/00 more popping at the lower vertex -# but with upper vertex cabbibo suppressed. -0.0007 D+ D- anti-K0 PHSP; -0.0007 D+ D0 K- PHSP; -0.0007 D*+ D- anti-K0 PHSP; -0.0007 D*+ anti-D0 K- PHSP; -# -0.0003 D+ D- pi0 anti-K0 PHSP; -0.0007 D+ anti-D0 pi- anti-K0 PHSP; -0.0003 D+ D- pi+ K- PHSP; -0.0007 D+ anti-D0 pi0 K- PHSP; -# -0.0003 D*+ D- pi0 anti-K0 PHSP; -0.0007 D*+ anti-D0 pi- anti-K0 PHSP; -0.0003 D*+ D- pi+ K- PHSP; -0.0007 D*+ anti-D0 pi0 K- PHSP; -# -# b --> c (u s=) -# exclusive -# Sum = 0.9% -0.00015 D_s*- K+ SVS; -0.00015 D_s- K+ PHSP; -0.00030 D_s*- K*+ SVV_HELAMP 0.0283 0.0 0.932 0.0 0.228 0.0; -0.00030 K*+ D_s- SVS; -# -# fkw 4/28/00 Strategy for charmonium modes: -# Take Bd BR's, replace spectator, -# assume etaprime = 2/3 ss -# and eta = 1/3 ss -# -# Note: Just for kicks I gave the c\bar c decays a small piece that is -# self tagging. See if you can find it. This is already in -# the B0 decays in cleo's version of decay.dec . -# -# B --> (c c=) (s s=) -# 2.65% -# should be: psi = 0.80% CLNS 94/1315 but isn't quite right. -0.00064 J/psi eta' SVS; -0.00032 J/psi eta SVS; -0.00135 J/psi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00008 J/psi K0 SVS; -0.00070 J/psi K- K+ PHSP; -0.00070 J/psi anti-K0 K0 PHSP; -0.00070 J/psi K0 K- pi+ PHSP; -0.00070 J/psi anti-K0 K0 pi0 PHSP; -0.00070 J/psi K- K+ pi0 PHSP; -# LHCb PR 04/02/04 Add (cc) phi n pi(+/0) -0.00039 J/psi phi pi+ pi- PHSP; -0.00039 J/psi phi pi0 pi0 PHSP; -# LHCb PR Add (cc) phi eta(') + npi like in CDF QQ -0.0002 J/psi eta pi+ pi- PHSP; -0.0002 J/psi eta pi0 pi0 PHSP; -0.0004 J/psi eta' pi+ pi- PHSP; -0.0004 J/psi eta' pi0 pi0 PHSP; -0.0002 J/psi pi+ pi- PHSP; -0.0002 J/psi pi0 pi0 PHSP; -# psi' = 0.34% CLNS 94/1315 -0.000465 psi(2S) eta' SVS; -0.000235 psi(2S) eta SVS; -0.0012 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0003 psi(2S) K- K+ PHSP; -0.0003 psi(2S) anti-K0 K0 PHSP; -0.0003 psi(2S) K0 K- pi+ PHSP; -0.0003 psi(2S) anti-K0 K0 pi0 PHSP; -0.0003 psi(2S) K- K+ pi0 PHSP; -0.00034 psi(2S) phi pi+ pi- PHSP; -0.00034 psi(2S) phi pi0 pi0 PHSP; -0.0002 psi(2S) eta pi+ pi- PHSP; -0.0002 psi(2S) eta pi0 pi0 PHSP; -0.0004 psi(2S) eta' pi+ pi- PHSP; -0.0004 psi(2S) eta' pi0 pi0 PHSP; -0.0002 psi(2S) pi+ pi- PHSP; -0.0002 psi(2S) pi0 pi0 PHSP; -# -# chic0 = 0.05% (20% of chic2) -# Bodwin et.al. Phys Rev D46 1992 -0.00010 chi_c0 eta' PHSP; -0.00005 chi_c0 eta PHSP; -0.00020 phi chi_c0 SVS; -0.00003 chi_c0 K- K+ PHSP; -0.00003 chi_c0 anti-K0 K0 PHSP; -0.00003 chi_c0 K0 K- pi+ PHSP; -0.00003 chi_c0 anti-K0 K0 pi0 PHSP; -0.00003 chi_c0 K- K+ pi0 PHSP; -# -# -# chic1 = 0.37% CLNS 94/1315 -0.0007 chi_c1 eta' SVS; -0.0003 chi_c1 eta SVS; -0.0014 chi_c1 phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00026 chi_c1 K- K+ PHSP; -0.00026 chi_c1 anti-K0 K0 PHSP; -0.00026 chi_c1 K0 K- pi+ PHSP; -0.00026 chi_c1 anti-K0 K0 pi0 PHSP; -0.00026 chi_c1 K- K+ pi0 PHSP; -0.00040 chi_c1 phi pi+ pi- PHSP; -0.00040 chi_c1 phi pi0 pi0 PHSP; -0.0001 chi_c1 eta pi+ pi- PHSP; -0.0001 chi_c1 eta pi0 pi0 PHSP; -0.0002 chi_c1 eta' pi+ pi- PHSP; -0.0002 chi_c1 eta' pi0 pi0 PHSP; -# -# -# chic2 = 0.25% CLNS 94/1315 -0.000465 chi_c2 eta' STS; -0.000235 chi_c2 eta STS; -#0.0010 chi_c2 phi STV; whb: doesn't exist -0.00016 chi_c2 K- K+ PHSP; -0.00016 chi_c2 anti-K0 K0 PHSP; -0.00016 chi_c2 K0 K- pi+ PHSP; -0.00016 chi_c2 anti-K0 K0 pi0 PHSP; -0.00016 chi_c2 K- K+ pi0 PHSP; -# -# -# etac(1s) = 0.41% Guess: CBX 97-65 -0.0008 eta_c eta' PHSP; -0.0004 eta_c eta PHSP; -0.0015 phi eta_c SVS; -0.00028 eta_c K- K+ PHSP; -0.00028 eta_c K0 anti-K0 PHSP; -0.00028 eta_c K0 K- pi+ PHSP; -0.00028 eta_c K0 anti-K0 pi0 PHSP; -0.00028 eta_c K- K+ pi0 PHSP; -0.00040 eta_c phi pi+ pi- PHSP; -0.00040 eta_c phi pi0 pi0 PHSP; -0.0001 eta_c eta pi+ pi- PHSP; -0.0001 eta_c eta pi0 pi0 PHSP; -0.0002 eta_c eta' pi+ pi- PHSP; -0.0002 eta_c eta' pi0 pi0 PHSP; -# -# -# etac(2s) = 0.18% Guess: CBX 97-65 -0.0004 eta_c(2S) eta' PHSP; -0.0002 eta_c(2S) eta PHSP; -0.0006 phi eta_c(2S) SVS; -0.00012 eta_c(2S) K- K+ PHSP; -0.00012 eta_c(2S) anti-K0 K0 PHSP; -0.00012 eta_c(2S) K0 K- pi+ PHSP; -0.00012 eta_c(2S) anti-K0 K0 pi0 PHSP; -0.00012 eta_c(2S) K- K+ pi0 PHSP; -# -# -# hc = 0.25% (100% of chic2) -# Bodwin et.al. Phys Rev D46 1992 -0.000465 h_c eta' SVS; -0.000235 h_c eta SVS; -0.0010 h_c phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00016 h_c K- K+ PHSP; -0.00016 h_c anti-K0 K0 PHSP; -0.00016 h_c K0 K- pi+ PHSP; -0.00016 h_c anti-K0 K0 pi0 PHSP; -0.00016 h_c K- K+ pi0 PHSP; -# -# -# b --> c (d u=) -# Exclusive Channels = 6.33% -# fkw 4/28/00 I rearanged this a bit after copying it from -# B0B decay list. -# -# first come the external W-emission decays: -# -0.0008 D_s1- pi+ SVS; -0.0021 D_s1- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0013 D_s2*- pi+ STS; -#0.0037 D_s2*- rho+ STV; #whb: STV does not exist yet -# -0.0027 D_s*- pi+ SVS; -0.0026 D_s- pi+ PHSP; -0.0073 rho+ D_s- SVS; -0.0070 D_s*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.0085 a_1+ D_s- SVS; -0.0009 D_s- rho0 pi+ PHSP; -0.0009 D_s- rho+ pi0 PHSP; -0.0009 D_s- pi- pi+ pi+ PHSP; -0.0009 D_s- pi0 pi+ pi0 PHSP; -# -0.0122 D_s*- a_1+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0010 D_s*- rho0 pi+ PHSP; -0.0010 D_s*- rho+ pi0 PHSP; -0.0077 D_s*- pi- pi+ pi+ PHSP; -0.0010 D_s*- pi0 pi+ pi0 PHSP; -# -# then the color suppressed decays: -# -# fkw 4/28/00 color suppressed modes bumped up by factor 2 from isospin -# i.e. Bs doesn't have the factor 2 suppression Bd has. -0.0002 anti-D*0 anti-K0 SVS; -0.0002 anti-D0 anti-K0 PHSP; -0.0002 anti-K*0 anti-D0 SVS; -0.0002 anti-D*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# PR LHCb : add p ppbar mode -0.000000001 p+ anti-p- PHSP; -# fkw 4/28/00 ignore the internal W emission decays with additional -# q\bar q popping. -# -# Here come the various types of "inclusive unknown" decays: -# -# Start with B to baryons: -# fkw 3/28/01 I don't know what I'm doing here!!! This needs to be checked!!! -# Mark Whitehead 30/4/2010 Weight PYTHIA to get Total BF=100% -0.01997 anti-cs_0 ud_0 PYTHIA 23; -0.03992 anti-cs_1 ud_1 PYTHIA 23; -# -# Next come external W-emission: -0.3073391615 u anti-d anti-c s PYTHIA 48; -0.049422 u anti-d anti-c s PYTHIA 25; -# Now the internal W-emission: -0.019472 u anti-c anti-d s PYTHIA 48; -# Then some b->u external W-emission with upper vertex charm -0.003992 c anti-s anti-u s PYTHIA 48; -# and finally some cabibbo suppressed external and internal W-emission -0.01498 u anti-s anti-c s PYTHIA 48; -0.0021956 u anti-s anti-c s PYTHIA 25; -0.0008982 u anti-c anti-s s PYTHIA 48; -# and some c cbar d stuff as well as c cbar s -0.00550 c anti-d anti-c s PYTHIA 13; -0.001498 c anti-d anti-c s PYTHIA 13; -# and some miscellaneous charmless stuff -0.0035928 u anti-u anti-d s PYTHIA 48; -0.0006986 d anti-d anti-d s PYTHIA 48; -0.0008982 s anti-s anti-d s PYTHIA 48; -0.001996 u anti-u anti-s s PYTHIA 48; -0.0015968 d anti-d anti-s s PYTHIA 48; -0.0012974 s anti-s anti-s s PYTHIA 48; -0.00499 anti-s s PYTHIA 32; - -# fkw 5/10/00 the b->ulnu decays are loosely modelled according to B0 in EvtGen -0.000200 K- e+ nu_e PHOTOS ISGW2; -0.000300 K*- e+ nu_e PHOTOS ISGW2; -0.000300 K_1- e+ nu_e PHOTOS ISGW2; -0.000200 K'_1- e+ nu_e PHOTOS ISGW2; -# -# -0.000200 K- mu+ nu_mu PHOTOS ISGW2; -0.000300 K*- mu+ nu_mu PHOTOS ISGW2; -0.000300 K_1- mu+ nu_mu PHOTOS ISGW2; -0.000200 K'_1- mu+ nu_mu PHOTOS ISGW2; -# ------------- -# 2e-3 for charmless semi-leptonic - -#*********************************************************** -# -# fkw 5/10/00 -# -# ideas behind these (largely) made up Br's for charmless -# hadronic B decays: -# (1) any PP and PV modes that are used or calculated -# in globfit code by Hou,Smith,Wuerthwein are taken from -# the latest fit i.e. May2000 -# (2) anything else is from Ali,Kramer,Lue -# -# None of this should be taken too serious! -# -#*********************************************************** -# Mark Whitehead 30/4/2010 Update K+K- -# PR LHCb update Br Bs -> K- K+ -0.0000265 K- K+ PHSP; -# PR LHCb 4/07/04 Split in KS/KL -0.0000000 anti-K0 K0 PHSP; -0.0000100 K_S0 K_S0 PHSP; -0.0000100 K_L0 K_L0 PHSP; -# -0.0000048 pi+ K- PHSP; -0.0000002 pi0 anti-K0 PHSP; -# PR LHCb 4/07/04 add Bs -> pi+ pi- -0.00000001 pi+ pi- PHSP; -# -0.0000012 omega eta SVS; -0.0000025 omega eta' SVS; -0.0000013 phi eta SVS; -0.0000025 phi eta' SVS; -0.00000008 omega K0 SVS; -0.000000002 phi K0 SVS; -# -0.0000250 K*- pi+ SVS; -0.0000120 rho+ K- SVS; -0.00000002 rho0 K0 SVS; -0.00000002 anti-K*0 pi0 SVS; -# -0.0000046 K*+ K- SVS; -# PR LHCb 4/07/04 split in KS/KL -0.0000000 K*0 anti-K0 SVS; -0.0000020 K*0 K_S0 SVS; -0.0000020 K*0 K_L0 SVS; -0.0000082 K*- K+ SVS; -# PR LHCb 4/07/04 split in KS/KL -0.0000000 anti-K*0 K0 SVS; -0.0000020 anti-K*0 K_S0 SVS; -0.0000020 anti-K*0 K_L0 SVS; -# -0.0000580 eta' eta' PHSP; -0.0000250 eta' eta PHSP; -0.0000040 eta eta PHSP; -### Already included above 0.0000200 phi eta SVS; -### Already included above 0.0000100 phi eta' SVS; -# -#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 -0.00000007 anti-K0 eta' PHSP; -0.00000023 anti-K0 eta PHSP; -0.000000021 anti-K*0 eta' SVS; -0.00000007 anti-K*0 eta SVS; -# -#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 -# for vector-vector final states -0.000020 rho+ K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000008 rho0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000000005 omega anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.000006 K*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# PR LHCb Update BR -0.000004 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000008 phi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000000004 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# decays that go via b->d penguins -#### Already included above 0.0000004 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -#PR LHCb add Bs -> mu+ mu- -0.0000000035 mu+ mu- PHSP; -#PR LHCb 04/08/2004 add Bs -> tau+ tau- (BR not to take too seriously) -0.0000000020 tau+ tau- PHSP; -# PR LHCb 04/05/2004 : add Bs -> phi gamma -0.000045 phi gamma SVP_HELAMP 1.0 0.0 1.0 0.0; -# PR LHCb 04/08/2004 : add Bs -> phi mu mu, phi e e -0.0000023 phi e+ e- BTOSLLALI; -0.0000023 phi mu+ mu- BTOSLLALI; -# PR LHCb 16 Apr 2004 : add Bs -> gamma gamma -0.0000005 gamma gamma PHSP; -#-------------- -# 257.122e-6 for all the charmless hadronic -# -Enddecay - -# whb: QQ B_c included- Near end of File -#Decay B_c- -#CHANNEL 0 0.0700 TAU- NUTB -#CHANNEL 1 0.1100 NUEB E- *CC* -#CHANNEL 1 0.1100 NUMB MU- *CC* -#CHANNEL 1 0.0300 NUTB TAU- *CC* -#CHANNEL 0 0.3400 *DU* *CC* -#CHANNEL 0 0.0700 *SC* *CC* -#CHANNEL 0 0.2700 *SC* -#0.0700 tau- anti-nu_tau PHSP; -#0.1100 anti-nu_e e- *CC* Simpleleptonic; -#0.1100 anti-nu_mu mu- *CC* Simple leptonic; -#0.0300 anti-nu_tau tau- *CC* Simple leptonic; -#0.3400 *DU* *CC* PHSP; -#0.0700 *SC* *CC* PHSP; -#0.2700 *SC* PHSP; -#Enddecay -# -#Decay B_c+ -#CHANNEL 0 0.0700 TAU+ NUT -#CHANNEL 1 0.1100 NUE E+ *CC* -#CHANNEL 1 0.1100 NUM MU+ *CC* -#CHANNEL 1 0.0300 NUT TAU+ *CC* -#CHANNEL 0 0.3400 *UD* *CC* -#CHANNEL 0 0.0700 *CS* *CC* -#CHANNEL 0 0.2700 *CS* -#0.0700 tau+ nu_tau PHSP; -#0.1100 nu_e E+ *CC* Simple leptonic; -#0.1100 nu_mu mu+ *CC* Simple leptonic; -#0.0300 nu_tau tau+ *CC* Simple leptonic; -#0.3400 *UD* *CC* PHSP; -#0.0700 *CS* *CC* PHSP; -#0.2700 *CS* PHSP; -#Enddecay - -# -# Updated to PDG 2008 -# -Decay tau- -0.1781 e- anti-nu_e nu_tau PHOTOS TAULNUNU; -0.1732 mu- anti-nu_mu nu_tau PHOTOS TAULNUNU; -0.1085 pi- nu_tau TAUSCALARNU; -0.00676 K- nu_tau TAUSCALARNU; -0.2544 pi- pi0 nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400; -0.0013 nu_tau gamma pi- pi0 PYTHIA 41; -0.09171 pi0 pi0 pi- nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400 1.23 0.4; -0.000446 nu_tau K- pi0 pi0 PYTHIA 41; -0.00984 nu_tau pi- pi0 pi0 pi0 PYTHIA 41; -0.0010 nu_tau pi- pi0 pi0 pi0 pi0 PHSP; -#0.2515 rho- nu_tau TAUVECTORNU; -#0.1790 a_1- nu_tau TAUVECTORNU; -# Modes with K0s -# -0.00037 nu_tau pi- anti-K0 PYTHIA 41; -0.00145 nu_tau K- K0 PYTHIA 41; -0.00138 nu_tau K0 pi- anti-K0 PYTHIA 41; -0.00142 nu_tau K- pi0 K0 PYTHIA 41; -0.00358 nu_tau pi- anti-K0 pi0 PYTHIA 41; -# 3 Charged Particles -# -0.09264 pi- pi- pi+ nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400 1.23 0.4; -0.04562 nu_tau pi- pi+ pi- pi0 PYTHIA 41; -0.00058 nu_tau pi- pi- pi+ pi0 pi0 PHSP; -0.00018 nu_tau pi- pi- pi+ pi0 pi0 pi0 PHSP; -0.00328 nu_tau K- pi+ pi- PYTHIA 41; -0.00124 nu_tau K- pi+ pi- pi0 PYTHIA 41; -0.00136 nu_tau K- pi- K+ PYTHIA 41; -0.000014 nu_tau K- K+ K- PYTHIA 41; -# 5 Charged Particles -# -0.00081 nu_tau pi- pi- pi- pi+ pi+ PHSP; -0.00015 nu_tau pi- pi- pi- pi+ pi+ pi0 PHSP; -# Misc other modes -# -0.01144 K*- nu_tau TAUVECTORNU; -0.00157 nu_tau eta pi- pi0 PYTHIA 41; -0.00370 nu_tau pi- omega pi0 PYTHIA 41; -0.00032 nu_tau K- omega PYTHIA 41; -0.00180 anti-K*0 pi- nu_tau PHSP; -0.00178 K*0 K- nu_tau PHSP; -0.00003 phi pi- nu_tau PHSP; -0.00003 phi K- nu_tau PHSP; -Enddecay -# -CDecay tau+ -# -# Vector Mesons Updated PDG 2008 -# -Decay D*+ -0.6770 D0 pi+ VSS; -0.3070 D+ pi0 VSS; -0.0160 D+ gamma VSP_PWAVE; -Enddecay -Decay D*- -0.6770 anti-D0 pi- VSS; -0.3070 D- pi0 VSS; -0.0160 D- gamma VSP_PWAVE; -Enddecay -Decay D*0 -0.6190 D0 pi0 VSS; -0.3810 D0 gamma VSP_PWAVE; -Enddecay -Decay anti-D*0 -0.6190 anti-D0 pi0 VSS; -0.3810 anti-D0 gamma VSP_PWAVE; -Enddecay -# -Decay D_s*+ -0.942 D_s+ gamma VSP_PWAVE; -0.058 D_s+ pi0 VSS; -Enddecay -Decay D_s*- -0.942 D_s- gamma VSP_PWAVE; -0.058 D_s- pi0 VSS; -Enddecay -# -# -# D+ Meson -# -Decay D+ -0.05423 anti-K*0 e+ nu_e PHOTOS ISGW2; -0.08491 anti-K0 e+ nu_e PHOTOS ISGW2; -0.00360 anti-K_10 e+ nu_e PHOTOS ISGW2; -0.00380 anti-K_2*0 e+ nu_e PHOTOS ISGW2; -0.00440 pi0 e+ nu_e PHOTOS ISGW2; -0.00260 eta e+ nu_e PHOTOS ISGW2; -0.00050 eta' e+ nu_e PHOTOS ISGW2; -0.00211 rho0 e+ nu_e PHOTOS ISGW2; -0.00147 omega e+ nu_e PHOTOS ISGW2; -0.00440 K- pi+ e+ nu_e PHOTOS PHSP; -0.00140 anti-K0 pi0 e+ nu_e PHOTOS PHSP; -# -0.05314 anti-K*0 mu+ nu_mu PHOTOS ISGW2; -0.09126 anti-K0 mu+ nu_mu PHOTOS ISGW2; -0.00360 anti-K_10 mu+ nu_mu PHOTOS ISGW2; -0.00380 anti-K_2*0 mu+ nu_mu PHOTOS ISGW2; -0.00430 pi0 mu+ nu_mu PHOTOS ISGW2; -0.00260 eta mu+ nu_mu PHOTOS ISGW2; -0.00050 eta' mu+ nu_mu PHOTOS ISGW2; -0.00231 rho0 mu+ nu_mu PHOTOS ISGW2; -0.00280 omega mu+ nu_mu PHOTOS ISGW2; -0.00210 K- pi+ mu+ nu_mu PHOTOS PHSP; -0.00140 anti-K0 pi0 mu+ nu_mu PHOTOS PHSP; -# -# -0.00042 mu+ nu_mu PHOTOS SLN; -0.00100 tau+ nu_tau SLN; -# -0.01440 K_S0 pi+ PHSP; -0.01449 K_L0 pi+ PHSP; -0.00000 anti-K0 pi+ PHSP; -# -0.03369 a_1+ K_S0 SVS; -0.03369 a_1+ K_L0 SVS; -0.00000 a_1+ anti-K0 SVS; -# -0.03517 anti-K'_10 pi+ SVS; -#0.0115 anti-K_0*0N pi+ PHSP; -0.01738 anti-K*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# the Dalitz mode below includes K*bar(892)0 pi+, -# K*bar(1430)0 pi+, and K*bar(1680)0 pi+ resonances. -0.09174 K- pi+ pi+ D_DALITZ; -# the Dalitz mode below includes K0bar rho+, -# and K*bar(892)0 pi+ resonances -0.06691 K_S0 pi+ pi0 D_DALITZ; -0.06691 K_L0 pi+ pi0 D_DALITZ; -0.00000 anti-K0 pi+ pi0 D_DALITZ; -#0.0100 anti-K0 eta pi+ PHSP; -# -0.00162 K_S0 rho0 pi+ PHSP; -0.00162 K_L0 rho0 pi+ PHSP; -0.00000 anti-K0 rho0 pi+ PHSP; -# -0.00500 anti-K0 omega pi+ PHSP; -0.00913 K- rho+ pi+ PHSP; -0.01204 K*- pi+ pi+ PHSP; -0.06126 anti-K*0 pi0 pi+ PHSP; -#0.0100 anti-K*0 eta pi+ PHSP; -0.00143 anti-K*0 rho0 pi+ PHSP; -0.00500 anti-K*0 omega pi+ PHSP; -#0.0100 K*- rho+ pi+ PHSP; -# -0.0110 K- pi+ pi+ pi0 PHSP; -# -0.00321 K_S0 pi+ pi+ pi- PHSP; -0.00321 K_L0 pi+ pi+ pi- PHSP; -0.00000 anti-K0 pi+ pi+ pi- PHSP; -# -#0.0188 anti-K0 pi+ pi0 pi0 PHSP; -0.00330 K- pi+ pi+ pi+ pi- PHSP; -0.00500 K- pi+ pi+ pi0 pi0 PHSP; -0.00870 anti-K0 pi+ pi+ pi- pi0 PHSP; -0.00350 anti-K0 pi+ pi0 pi0 pi0 PHSP; -# -0.00404 K_S0 K_S0 K+ PHSP; -0.00404 K_L0 K_L0 K+ PHSP; -0.00000 anti-K0 anti-K0 K+ PHSP; -# -0.00605 phi pi+ SVS; -0.02082 phi pi+ pi0 PHSP; -# -0.00285 K_S0 K+ PHSP; -0.00285 K_L0 K+ PHSP; -0.00000 anti-K0 K+ PHSP; -# -0.00283 anti-K*0 K+ SVS; -# -0.01447 K*+ K_S0 SVS; -0.01447 K*+ K_L0 SVS; -0.00000 K*+ anti-K0 SVS; -# -#0.0180 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00367 K+ K- pi+ PHSP; -0.00100 K+ anti-K0 pi0 PHSP; -0.00000 anti-K0 K0 pi+ PHSP; -0.00100 K*+ K- pi+ PHSP; -0.00100 K+ K*- pi+ PHSP; -0.00100 K*+ anti-K0 pi0 PHSP; -0.00100 K+ anti-K*0 pi0 PHSP; -0.00100 anti-K*0 K0 pi+ PHSP; -0.00100 anti-K0 K*0 pi+ PHSP; -# -0.00123 pi0 pi+ PHSP; -0.00079 rho0 pi+ SVS; -0.00239 pi+ pi+ pi- PHSP; -0.00451 pi+ pi0 pi0 PHSP; -0.01132 pi+ pi+ pi- pi0 PHSP; -0.00500 pi+ pi0 pi0 pi0 PHSP; -0.00334 eta pi+ PHSP; -0.00488 eta' pi+ PHSP; -0.00300 eta pi+ pi0 PHSP; -0.00300 eta pi+ pi+ pi- PHSP; -0.00200 eta pi+ pi0 pi0 PHSP; -#lange jul22,2002 -0.00160 pi+ pi+ pi+ pi- pi- PHSP; -# -# March 2009 New Modes -0.00870 anti-K*0 a_1+ PHSP; -0.01369 K+ K- pi+ pi0 PHSP; -# -0.00165 K+ K_S0 pi+ pi- PHSP; -0.00165 K+ K_L0 pi+ pi- PHSP; -0.00000 K+ anti-K0 pi+ pi- PHSP; -# -0.00228 K_S0 K- pi+ pi+ PHSP; -0.00228 K_L0 K- pi+ pi+ PHSP; -0.00000 K0 K- pi+ pi+ PHSP; -# -0.00021 K+ K- pi+ pi+ pi- PHSP; -# -0.00021 K+ K- K_S0 pi+ PHSP; -0.00021 K+ K- K_L0 pi+ PHSP; -0.00000 K+ K- anti-K0 pi+ PHSP; -# Doubly Cabibbo suppressed modes -0.00023 K+ pi0 PHSP; -0.00060 K+ pi+ pi- PHSP; -0.00009 K+ K+ K- PHSP; -Enddecay -# -# -Decay D- -0.05423 K*0 e- anti-nu_e PHOTOS ISGW2; -0.08491 K0 e- anti-nu_e PHOTOS ISGW2; -0.00360 K_10 e- anti-nu_e PHOTOS ISGW2; -0.00380 K_2*0 e- anti-nu_e PHOTOS ISGW2; -0.00440 pi0 e- anti-nu_e PHOTOS ISGW2; -0.00260 eta e- anti-nu_e PHOTOS ISGW2; -0.00050 eta' e- anti-nu_e PHOTOS ISGW2; -0.00211 rho0 e- anti-nu_e PHOTOS ISGW2; -0.00147 omega e- anti-nu_e PHOTOS ISGW2; -0.00440 K+ pi- e- anti-nu_e PHOTOS PHSP; -0.00140 K0 pi0 e- anti-nu_e PHOTOS PHSP; -# -0.05314 K*0 mu- anti-nu_mu PHOTOS ISGW2; -0.09126 K0 mu- anti-nu_mu PHOTOS ISGW2; -0.00360 K_10 mu- anti-nu_mu PHOTOS ISGW2; -0.00380 K_2*0 mu- anti-nu_mu PHOTOS ISGW2; -0.00430 pi0 mu- anti-nu_mu PHOTOS ISGW2; -0.00260 eta mu- anti-nu_mu PHOTOS ISGW2; -0.00050 eta' mu- anti-nu_mu PHOTOS ISGW2; -0.00231 rho0 mu- anti-nu_mu PHOTOS ISGW2; -0.00280 omega mu- anti-nu_mu PHOTOS ISGW2; -0.00210 K+ pi- mu- anti-nu_mu PHOTOS PHSP; -0.00140 K0 pi0 mu- anti-nu_mu PHOTOS PHSP; -# -0.00042 mu- anti-nu_mu PHOTOS SLN; -0.00100 tau- anti-nu_tau SLN; -# -0.01440 K_S0 pi- PHSP; -0.01449 K_L0 pi- PHSP; -0.00000 K0 pi- PHSP; -# -0.03369 a_1- K_S0 SVS; -0.03369 a_1- K_L0 SVS; -0.00000 a_1- K0 SVS; -# -0.03517 K'_10 pi- SVS; -#0.0115 K_0*0N pi- PHSP; -0.01738 K*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# the Dalitz mode below includes K*(892)0 pi-, K*(1430)0 pi-, and K*(1680)0 pi- resonances. -0.09174 K+ pi- pi- D_DALITZ; -# the Dalitz mode below includes K0 rho-, and K*(892)0 pi- resonances. -0.06691 K_S0 pi- pi0 D_DALITZ; -0.06691 K_L0 pi- pi0 D_DALITZ; -0.00000 K0 pi- pi0 D_DALITZ; -# -#0.0100 K0 eta pi- PHSP; -0.00162 K_S0 rho0 pi- PHSP; -0.00162 K_L0 rho0 pi- PHSP; -0.00000 K0 rho0 pi- PHSP; -# -0.00500 K0 omega pi- PHSP; -0.00913 K+ rho- pi- PHSP; -0.01204 K*+ pi- pi- PHSP; -0.06126 K*0 pi0 pi- PHSP; -#0.0100 K*0 eta pi- PHSP; -0.00143 K*0 rho0 pi- PHSP; -0.00500 K*0 omega pi- PHSP; -#0.0100 K*+ rho- pi- PHSP; -# -0.01100 K+ pi- pi- pi0 PHSP; -# -0.00321 K_S0 pi- pi- pi+ PHSP; -0.00321 K_L0 pi- pi- pi+ PHSP; -0.00000 K0 pi- pi- pi+ PHSP; -# -#0.0188 K0 pi- pi0 pi0 PHSP; -0.00330 K+ pi- pi- pi- pi+ PHSP; -0.00500 K+ pi- pi- pi0 pi0 PHSP; -0.00870 K0 pi- pi- pi+ pi0 PHSP; -0.00350 K0 pi- pi0 pi0 pi0 PHSP; -# -0.00404 K_S0 K_S0 K- PHSP; -0.00404 K_L0 K_L0 K- PHSP; -0.00000 K0 K0 K- PHSP; -# -0.00605 phi pi- SVS; -0.02082 phi pi- pi0 PHSP; -# -0.00285 K_S0 K- PHSP; -0.00285 K_L0 K- PHSP; -0.00000 K0 K- PHSP; -# -0.00283 K*0 K- SVS; -# -0.01447 K*- K_S0 SVS; -0.01447 K*- K_L0 SVS; -0.00000 K*- K0 SVS; -# -#0.0180 K*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00367 K- K+ pi- PHSP; -0.00100 K- K0 pi0 PHSP; -0.00000 anti-K0 K0 pi- PHSP; -0.00100 K*- K+ pi- PHSP; -0.00100 K- K*+ pi- PHSP; -0.00100 K*- K0 pi0 PHSP; -0.00100 K- K*0 pi0 PHSP; -0.00100 K*0 anti-K0 pi- PHSP; -0.00100 K0 anti-K*0 pi- PHSP; -# -0.00123 pi0 pi- PHSP; -0.00079 rho0 pi- SVS; -0.00239 pi- pi+ pi- PHSP; -0.00451 pi- pi0 pi0 PHSP; -0.01132 pi- pi+ pi- pi0 PHSP; -0.00500 pi- pi0 pi0 pi0 PHSP; -0.00334 eta pi- PHSP; -0.00488 eta' pi- PHSP; -0.00300 eta pi- pi0 PHSP; -0.00300 eta pi- pi+ pi- PHSP; -0.00200 eta pi- pi0 pi0 PHSP; -#lange jul22,2002 -0.00160 pi+ pi- pi+ pi- pi- PHSP; -# -# March 2009 New Modes -0.00870 K*0 a_1- PHSP; -0.01369 K+ K- pi- pi0 PHSP; -# -0.00165 K- K_S0 pi+ pi- PHSP; -0.00165 K- K_L0 pi+ pi- PHSP; -0.00000 K- K0 pi+ pi- PHSP; -# -0.00228 K_S0 K+ pi- pi- PHSP; -0.00228 K_L0 K+ pi- pi- PHSP; -0.00000 anti-K0 K+ pi- pi- PHSP; -# -0.00021 K+ K- pi+ pi- pi- PHSP; -# -0.00021 K+ K- K_S0 pi- PHSP; -0.00021 K+ K- K_L0 pi- PHSP; -0.00000 K+ K- K0 pi- PHSP; -# Doubly Cabibbo suppressed modes -0.00023 K- pi0 PHSP; -0.00060 K- pi+ pi- PHSP; -0.00009 K- K+ K- PHSP; -Enddecay -# -Decay K*BR -1.0000 anti-K0 pi0 VSS; -Enddecay -# -# -Decay D0 -# updated according to suggestions by P. Roudeau, -# using PDG2004 measurements and imposing the equality -# of sl partial widths for D+ and D0. -# Include additional decay anti-K0 pi- e+ nu_e , K- pi0 e+ nu_e. -# -0.02228 K*- e+ nu_e PHOTOS ISGW2; -0.03598 K- e+ nu_e PHOTOS ISGW2; -0.00089 K_1- e+ nu_e PHOTOS ISGW2; -0.00150 K_2*- e+ nu_e PHOTOS ISGW2; -0.00288 pi- e+ nu_e PHOTOS ISGW2; -0.00202 rho- e+ nu_e PHOTOS ISGW2; -0.02970 anti-K0 pi- e+ nu_e PHOTOS PHSP; -0.01990 K- pi0 e+ nu_e PHOTOS PHSP; -# -0.02085 K*- mu+ nu_mu PHOTOS ISGW2; -0.03350 K- mu+ nu_mu PHOTOS ISGW2; -0.00089 K_1- mu+ nu_mu PHOTOS ISGW2; -0.00150 K_2*- mu+ nu_mu PHOTOS ISGW2; -0.00244 pi- mu+ nu_mu PHOTOS ISGW2; -0.00220 rho- mu+ nu_mu PHOTOS ISGW2; -0.00110 anti-K0 pi- mu+ nu_mu PHOTOS PHSP; -0.00060 K- pi0 mu+ nu_mu PHOTOS PHSP; -# -0.03900 K- pi+ PHSP; -# -0.01238 K_S0 pi0 PHSP; -0.01210 K_L0 pi0 PHSP; -0.00000 anti-K0 pi0 PHSP; -# -0.00415 K_S0 eta PHSP; -0.00415 K_L0 eta PHSP; -0.00000 anti-K0 eta PHSP; -# -0.00980 K_S0 eta' PHSP; -0.00980 K_L0 eta' PHSP; -0.00000 anti-K0 eta' PHSP; -# -0.01190 omega K_S0 SVS; -0.01190 omega K_L0 SVS; -0.00000 omega anti-K0 SVS; -# -0.00175 anti-K*0 eta SVS; -0.00100 anti-K*0 eta' SVS; -0.08130 a_1+ K- SVS; -0.07380 K*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.01685 anti-K*0 rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.01250 anti-K*0 omega SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# the Dalitz mode below includes K*bar(892)0 pi0, -# K*(892)- pi+, and K- rho(770)+ resonances -0.14050 K- pi+ pi0 D_DALITZ; -0.00724 K*BR pi0 SVS; -0.01246 K_1- pi+ SVS; -0.00710 anti-K_10 pi0 SVS; -# -# the Dalitz mode below includes K*(892)- pi+ and Kbar0 rho(770)0 resonances -# LHCb PR 09 Apr 2004 split into KS/KL -0.03040 K_S0 pi+ pi- D_DALITZ; -0.03040 K_L0 pi+ pi- D_DALITZ; -0.00000 anti-K0 pi+ pi- D_DALITZ; -# -0.00483 K_S0 pi0 pi0 PHSP; -0.00483 K_L0 pi0 pi0 PHSP; -0.00000 anti-K0 pi0 pi0 PHSP; -# -0.02550 anti-K*0 pi+ pi- PHSP; -0.01160 anti-K*0 pi0 pi0 PHSP; -0.01000 K*- pi+ pi0 PHSP; -0.00680 K- rho+ pi0 PHSP; -0.00579 K- pi+ rho0 PHSP; -0.01900 K- pi+ omega PHSP; -0.01000 K- pi+ eta PHSP; -0.00807 K- pi+ eta' PHSP; -0.01958 K- pi+ pi+ pi- PHSP; -# -0.01100 K_S0 pi+ pi- pi0 PHSP; -0.01100 K_L0 pi+ pi- pi0 PHSP; -0.00000 anti-K0 pi+ pi- pi0 PHSP; -# -# K- pi+ pi0 pi0 is (15 +/- 5)% in the PDG, but we decrease it to -# have everything add to 1 and get enough neutral kaons: -#0.02575 K- pi+ pi0 pi0 PHSP; -# -#0.0143 anti-K0 pi0 pi0 pi0 PHSP; -0.00000 K- pi+ pi+ pi- pi0 PHSP; -0.00380 K- pi+ pi0 pi0 pi0 PHSP; -# -0.00293 K_S0 pi+ pi- pi+ pi- PHSP; -0.00293 K_L0 pi+ pi- pi+ pi- PHSP; -0.00000 anti-K0 pi+ pi- pi+ pi- PHSP; -# -#0.0638 anti-K0 pi+ pi- pi0 pi0 PHSP; -#0.0192 anti-K0 pi+ pi- pi0 pi0 pi0 PHSP; -# -0.00222 phi K_S0 SVS; -0.00222 phi K_L0 SVS; -0.00000 phi anti-K0 SVS; -# -0.00304 K_S0 K+ K- PHSP; -0.00304 K_L0 K+ K- PHSP; -0.00000 anti-K0 K+ K- PHSP; -# -0.00100 K_S0 K_S0 K_S0 PHSP; -0.00395 K+ K- PHSP; -0.00040 K_S0 K_S0 PHSP; -0.00040 K_L0 K_L0 PHSP; -0.00040 K*0 anti-K0 SVS; -# -0.00010 anti-K*0 K_S0 SVS; -0.00010 anti-K*0 K_L0 SVS; -0.00000 anti-K*0 K0 SVS; -# -0.00053 K*- K+ SVS; -0.00149 K*+ K- SVS; -0.00140 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00078 phi pi0 SVS; -0.00110 phi pi+ pi- PHSP; -0.00247 K+ K- pi+ pi- PHSP; -0.00300 K+ K- pi0 pi0 PHSP; -# -0.00137 K_S0 K_S0 pi+ pi- PHSP; -0.00137 K_L0 K_L0 pi+ pi- PHSP; -0.00000 anti-K0 K0 pi+ pi- PHSP; -# -0.00150 anti-K0 K0 pi0 pi0 PHSP; -# -0.00140 pi+ pi- PHSP; -0.00082 pi0 pi0 PHSP; -0.00060 eta pi0 PHSP; -0.00100 eta' pi0 PHSP; -0.00100 eta eta PHSP; -0.00992 rho+ pi- SVS; -0.00504 rho- pi+ SVS; -0.00380 rho0 pi0 SVS; -0.00132 pi+ pi- pi0 PHSP; -0.00010 pi0 pi0 pi0 PHSP; -0.00750 pi+ pi+ pi- pi- PHSP; -0.00917 pi+ pi- pi0 pi0 PHSP; -0.00435 pi+ pi- pi+ pi- pi0 PHSP; -0.00600 pi+ pi- pi0 pi0 pi0 PHSP; -0.00046 pi+ pi- pi+ pi- pi+ pi- PHSP; -# -# Doubly Cabibbo suppressed decays: -0.00015 pi- K+ PHSP; -0.00014 pi- K*+ PHSP; -0.00030 pi- K+ pi0 PHSP; -0.00027 K+ pi- pi+ pi- PHSP; -# PR LHCb - 19 Apr. 2004 Add D0 -> mu+ mu- -0.00000 mu+ mu- PHSP; -# -# March 2009 New Modes -0.00016 phi eta PHSP; -0.02160 anti-K*0 pi+ pi- pi0 PHSP; -0.00024 K- pi+ pi- pi+ pi- pi+ PHSP; -0.00070 K+ K- pi0 PHSP; -0.00370 K+ K- pi+ pi- pi0 PHSP; -0.00023 K+ K- K- pi+ PHSP; -# -0.00400 K_S0 eta pi0 PHSP; -0.00400 K_L0 eta pi0 PHSP; -0.00000 anti-K0 eta pi0 PHSP; -# -0.00260 K_S0 K+ pi- PHSP; -0.00260 K_L0 K+ pi- PHSP; -0.00000 anti-K0 K+ pi- PHSP; -# -0.00365 K_S0 K- pi+ PHSP; -0.00365 K_L0 K- pi+ PHSP; -0.00000 K0 K- pi+ PHSP; -# -0.00032 K_S0 K_S0 K+ pi- PHSP; -0.00032 K_L0 K_L0 K+ pi- PHSP; -0.00000 anti-K0 K0 K+ pi- PHSP; -# -0.00032 K_S0 K_S0 K- pi+ PHSP; -0.00032 K_L0 K_L0 K- pi+ PHSP; -0.00000 anti-K0 K0 K- pi+ PHSP; -Enddecay -# -# -Decay K*0R -1.0000 K0 pi0 VSS; -Enddecay -# -# -Decay anti-D0 -0.02228 K*+ e- anti-nu_e PHOTOS ISGW2; -0.03598 K+ e- anti-nu_e PHOTOS ISGW2; -0.00089 K_1+ e- anti-nu_e PHOTOS ISGW2; -0.00150 K_2*+ e- anti-nu_e PHOTOS ISGW2; -0.00288 pi+ e- anti-nu_e PHOTOS ISGW2; -0.00202 rho+ e- anti-nu_e PHOTOS ISGW2; -0.02970 K0 pi+ e- anti-nu_e PHOTOS PHSP; -0.01990 K+ pi0 e- anti-nu_e PHOTOS PHSP; -# -0.02085 K*+ mu- anti-nu_mu PHOTOS ISGW2; -0.03350 K+ mu- anti-nu_mu PHOTOS ISGW2; -0.00089 K_1+ mu- anti-nu_mu PHOTOS ISGW2; -0.00150 K_2*+ mu- anti-nu_mu PHOTOS ISGW2; -0.00244 pi+ mu- anti-nu_mu PHOTOS ISGW2; -0.00220 rho+ mu- anti-nu_mu PHOTOS ISGW2; -0.00110 K0 pi+ mu- anti-nu_mu PHOTOS PHSP; -0.00060 K+ pi0 mu- anti-nu_mu PHOTOS PHSP; -# -0.03900 K+ pi- PHSP; -# -0.01238 K_S0 pi0 PHSP; -0.01210 K_L0 pi0 PHSP; -0.00000 K0 pi0 PHSP; -# -0.00415 K_S0 eta PHSP; -0.00415 K_L0 eta PHSP; -0.00000 K0 eta PHSP; -# -0.00980 K_S0 eta' PHSP; -0.00980 K_L0 eta' PHSP; -0.00000 K0 eta' PHSP; -# -0.01190 omega K_S0 SVS; -0.01190 omega K_L0 SVS; -0.00000 omega K0 SVS; -# -0.00175 K*0 eta SVS; -0.00100 K*0 eta' SVS; -0.08130 a_1- K+ SVS; -0.07380 K*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.01685 K*0 rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.01250 K*0 omega SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# the Dalitz mode below includes K*(892)0 pi0, K*(892)+ pi-, and K+ rho(770)- resonances -0.14050 K+ pi- pi0 D_DALITZ; -0.00724 K*0R pi0 SVS; -0.01246 K_1+ pi- SVS; -0.00710 K_10 pi0 SVS; -# the Dalitz mode below includes K*(892)+ pi- and K0 rho(770)0 resonances -# LHCb PR 09 Apr 2004, split into KS/KL -0.00000 K0 pi+ pi- D_DALITZ; -0.03040 K_S0 pi+ pi- D_DALITZ; -0.03040 K_L0 pi+ pi- D_DALITZ; -# -0.00483 K_S0 pi0 pi0 PHSP; -0.00483 K_L0 pi0 pi0 PHSP; -0.00000 K0 pi0 pi0 PHSP; -# -0.02550 K*0 pi+ pi- PHSP; -0.01160 K*0 pi0 pi0 PHSP; -0.01000 K*+ pi- pi0 PHSP; -0.00680 K+ rho- pi0 PHSP; -0.00579 K+ pi- rho0 PHSP; -0.01900 K+ pi- omega PHSP; -0.01000 K+ pi- eta PHSP; -0.00807 K+ pi- eta' PHSP; -0.01958 K+ pi- pi+ pi- PHSP; -# -0.01100 K_S0 pi+ pi- pi0 PHSP; -0.01100 K_L0 pi+ pi- pi0 PHSP; -0.00000 K0 pi+ pi- pi0 PHSP; -# -# K+ pi- pi0 pi0 is (15 +/- 5)% in the PDG, but we decrease it to -# have everything add to 1 and get enough neutral kaons: -#0.02575 K+ pi- pi0 pi0 PHSP; -# -#0.0143 K0 pi0 pi0 pi0 PHSP; -0.00000 K+ pi- pi+ pi- pi0 PHSP; -0.00380 K+ pi- pi0 pi0 pi0 PHSP; -# -0.00293 K_S0 pi+ pi- pi+ pi- PHSP; -0.00293 K_L0 pi+ pi- pi+ pi- PHSP; -0.00000 K0 pi+ pi- pi+ pi- PHSP; -# -#0.0638 K0 pi- pi+ pi0 pi0 PHSP; -#0.0192 K0 pi- pi+ pi0 pi0 pi0 PHSP; -# -0.00222 phi K_S0 SVS; -0.00222 phi K_L0 SVS; -0.00000 phi K0 SVS; -# -0.00304 K_S0 K+ K- PHSP; -0.00304 K_L0 K+ K- PHSP; -0.00000 K0 K+ K- PHSP; -# -0.00100 K_S0 K_S0 K_S0 PHSP; -0.00395 K+ K- PHSP; -0.00040 K_S0 K_S0 PHSP; -0.00040 K_L0 K_L0 PHSP; -0.00040 anti-K*0 K0 SVS; -# -0.00010 K*0 K_S0 SVS; -0.00010 K*0 K_L0 SVS; -0.00000 K*0 anti-K0 SVS; -# -0.00053 K*+ K- SVS; -0.00149 K*- K+ SVS; -0.00140 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00078 phi pi0 SVS; -0.00110 phi pi+ pi- PHSP; -0.00247 K+ K- pi+ pi- PHSP; -0.00300 K+ K- pi0 pi0 PHSP; -# -0.00137 K_S0 K_S0 pi+ pi- PHSP; -0.00137 K_L0 K_L0 pi+ pi- PHSP; -0.00000 anti-K0 K0 pi+ pi- PHSP; -# -0.00150 anti-K0 K0 pi0 pi0 PHSP; -# -0.00140 pi+ pi- PHSP; -0.00082 pi0 pi0 PHSP; -0.00060 eta pi0 PHSP; -0.00100 eta' pi0 PHSP; -0.00100 eta eta PHSP; -0.00992 rho+ pi- SVS; -0.00504 rho- pi+ SVS; -0.00380 rho0 pi0 SVS; -0.00132 pi+ pi- pi0 PHSP; -0.00010 pi0 pi0 pi0 PHSP; -0.00750 pi+ pi+ pi- pi- PHSP; -0.00917 pi+ pi- pi0 pi0 PHSP; -0.00435 pi+ pi- pi+ pi- pi0 PHSP; -0.00600 pi+ pi- pi0 pi0 pi0 PHSP; -0.00046 pi+ pi- pi+ pi- pi+ pi- PHSP; -# -# Doubly Cabibbo suppressed decays: -0.00015 pi+ K- PHSP; -0.00014 pi+ K*- PHSP; -0.00030 pi+ K- pi0 PHSP; -0.00027 K- pi+ pi+ pi- PHSP; -# PR LHCb - 19 Apr. 2004 Add anti-D0 -> mu+ mu- -0.00000 mu- mu+ PHSP; -# -# March 2009 New Modes -0.00016 phi eta PHSP; -0.02160 K*0 pi+ pi- pi0 PHSP; -0.00024 K+ pi- pi- pi+ pi- pi+ PHSP; -0.00070 K+ K- pi0 PHSP; -0.00370 K+ K- pi+ pi- pi0 PHSP; -0.00023 K+ K+ K- pi- PHSP; -# -0.00400 K_S0 eta pi0 PHSP; -0.00400 K_L0 eta pi0 PHSP; -0.00000 K0 eta pi0 PHSP; -# -0.00260 K_S0 K- pi+ PHSP; -0.00260 K_L0 K- pi+ PHSP; -0.00000 K0 K- pi+ PHSP; -# -0.00365 K_S0 K+ pi- PHSP; -0.00365 K_L0 K+ pi- PHSP; -0.00000 anti-K0 K+ pi- PHSP; -# -0.00032 K_S0 K_S0 K+ pi- PHSP; -0.00032 K_L0 K_L0 K+ pi- PHSP; -0.00000 anti-K0 K0 K+ pi- PHSP; -# -0.00032 K_S0 K_S0 K- pi+ PHSP; -0.00032 K_L0 K_L0 K- pi+ PHSP; -0.00000 anti-K0 K0 K- pi+ PHSP; -Enddecay -# -# Updated to PDG 2008 -Decay D_s+ -0.02402 phi e+ nu_e PHOTOS ISGW2; -0.02997 eta e+ nu_e PHOTOS ISGW2; -0.01074 eta' e+ nu_e PHOTOS ISGW2; -0.00270 anti-K0 e+ nu_e PHOTOS ISGW2; -0.00100 anti-K*0 e+ nu_e PHOTOS ISGW2; -0.02402 phi mu+ nu_mu PHOTOS ISGW2; -0.02997 eta mu+ nu_mu PHOTOS ISGW2; -0.01074 eta' mu+ nu_mu PHOTOS ISGW2; -0.00270 anti-K0 mu+ nu_mu PHOTOS ISGW2; -0.00100 anti-K*0 mu+ nu_mu PHOTOS ISGW2; -0.00630 mu+ nu_mu PHOTOS SLN; -0.06697 tau+ nu_tau SLN; -### Lange Nov14, 2004 - average cleo + babar (prelim) using stat error only.. -0.04437 phi pi+ SVS; -0.01614 eta pi+ PHSP; -0.03865 eta' pi+ PHSP; -0.00265 omega pi+ SVS; -0.00040 rho0 pi+ SVS; -0.00040 rho+ pi0 SVS; -#? -0.00010 pi+ pi0 PHSP; -0.01000 f_0 pi+ PHSP; -0.00120 f_2 pi+ PHSP; -0.04162 phi rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.13357 rho+ eta SVS; -0.12525 rho+ eta' SVS; -0.01013 pi+ pi- pi+ PHSP; -0.00005 pi+ pi0 pi0 PHSP; -0.01000 phi pi+ pi0 PHSP; -0.01500 eta pi+ pi0 PHSP; -0.01500 eta' pi+ pi0 PHSP; -0.00608 phi pi+ pi- pi+ PHSP; -0.00500 phi pi+ pi0 pi0 PHSP; -0.00500 eta pi+ pi- pi+ PHSP; -0.00500 eta pi+ pi0 pi0 PHSP; -# -0.01505 K_S0 K+ PHSP; -0.01505 K_L0 K+ PHSP; -0.00000 anti-K0 K+ PHSP; -# -0.04000 anti-K*0 K+ SVS; -0.05495 K*+ anti-K0 SVS; -0.07406 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00300 anti-K0 K+ pi0 PHSP; -0.00120 anti-K*0 K+ pi0 PHSP; -0.00120 K*+ anti-K0 pi0 PHSP; -0.00400 anti-K*0 K*+ pi0 PHSP; -0.00500 K+ K- pi+ PHSP; -# -0.00980 K_S0 K+ pi+ pi- PHSP; -0.00980 K_L0 K+ pi+ pi- PHSP; -0.00000 anti-K0 K+ pi+ pi- PHSP; -# -0.00100 anti-K0 K+ pi0 pi0 PHSP; -0.00378 K+ K- pi+ pi- pi+ PHSP; -0.00020 phi K+ SVS; -0.00146 eta K+ PHSP; -0.00168 eta' K+ PHSP; -0.00020 eta K+ pi0 PHSP; -0.00020 eta K+ pi+ pi- PHSP; -0.00020 eta' K+ pi0 PHSP; -0.00020 eta' K+ pi+ pi- PHSP; -0.00031 K+ K- K+ PHSP; -# -0.00127 K_S0 pi+ PHSP; -0.00127 K_L0 pi+ PHSP; -0.00000 K0 pi+ PHSP; -# -0.00150 rho+ K0 SVS; -0.00278 rho0 K+ SVS; -0.00100 K0 pi+ pi0 PHSP; -0.00250 a_1+ K0 SVS; -0.00790 K*0 pi+ SVS; -0.00500 K*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00500 K*0 pi+ pi0 PHSP; -# -# March 2009 New Modes -0.00086 K+ pi0 PHSP; -0.00273 K+ pi+ pi- PHSP; -0.00815 pi+ pi+ pi+ pi- pi- PHSP; -0.01214 pi+ pi+ pi+ pi- pi- pi0 PHSP; -0.00136 p+ anti-n0 PHSP; -# -0.00090 K_S0 K_S0 pi+ pi+ pi- PHSP; -0.00090 K_L0 K_L0 pi+ pi+ pi- PHSP; -0.00000 anti-K0 K0 pi+ pi+ pi- PHSP; -# -0.00318 K_S0 pi+ pi+ pi- PHSP; -0.00318 K_L0 pi+ pi+ pi- PHSP; -0.00000 anti-K0 pi+ pi+ pi- PHSP; -# Doubly Cabibbo suppressed -0.00030 K+ K+ pi- PHSP; -Enddecay -# -# Updated to PDG 2008 -Decay D_s- -0.02402 phi e- anti-nu_e PHOTOS ISGW2; -0.02997 eta e- anti-nu_e PHOTOS ISGW2; -0.01074 eta' e- anti-nu_e PHOTOS ISGW2; -0.00270 K0 e- anti-nu_e PHOTOS ISGW2; -0.00100 K*0 e- anti-nu_e PHOTOS ISGW2; -0.02402 phi mu- anti-nu_mu PHOTOS ISGW2; -0.02997 eta mu- anti-nu_mu PHOTOS ISGW2; -0.01074 eta' mu- anti-nu_mu PHOTOS ISGW2; -0.00270 K0 mu- anti-nu_mu PHOTOS ISGW2; -0.00100 K*0 mu- anti-nu_mu PHOTOS ISGW2; -0.00630 mu- anti-nu_mu PHOTOS SLN; -0.06697 tau- anti-nu_tau SLN; -0.04437 phi pi- SVS; -0.01614 eta pi- PHSP; -0.03865 eta' pi- PHSP; -0.00265 omega pi- SVS; -0.00040 rho0 pi- SVS; -0.00040 rho- pi0 SVS; -0.00010 pi- pi0 PHSP; -0.01000 f_0 pi- PHSP; -0.00120 f_2 pi- PHSP; -0.04162 phi rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.13357 rho- eta SVS; -0.12525 rho- eta' SVS; -0.01013 pi- pi- pi+ PHSP; -0.00005 pi- pi0 pi0 PHSP; -0.01000 phi pi- pi0 PHSP; -0.01500 eta pi- pi0 PHSP; -0.01500 eta' pi- pi0 PHSP; -0.00608 phi pi- pi- pi+ PHSP; -0.00500 phi pi- pi0 pi0 PHSP; -0.00500 eta pi- pi- pi+ PHSP; -0.00500 eta pi- pi0 pi0 PHSP; -# -0.01505 K_S0 K- PHSP; -0.01505 K_L0 K- PHSP; -0.00000 K0 K- PHSP; -# -0.04000 K*0 K- SVS; -0.05495 K*- K0 SVS; -0.07406 K*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00300 K0 K- pi0 PHSP; -0.00120 K*0 K- pi0 PHSP; -0.00120 K*- K0 pi0 PHSP; -0.00400 K*0 K*- pi0 PHSP; -0.00500 K+ K- pi- PHSP; -# -0.00980 K_S0 K- pi+ pi- PHSP; -0.00980 K_L0 K- pi+ pi- PHSP; -0.00000 K0 K- pi+ pi- PHSP; -# -0.00100 K0 K- pi0 pi0 PHSP; -0.00378 K- K+ pi- pi+ pi- PHSP; -0.00020 phi K- SVS; -0.00146 eta K- PHSP; -0.00168 eta' K- PHSP; -0.00020 eta K- pi0 PHSP; -0.00020 eta K- pi+ pi- PHSP; -0.00020 eta' K- pi0 PHSP; -0.00020 eta' K- pi+ pi- PHSP; -0.00031 K- K- K+ PHSP; -# -0.00127 K_S0 pi- PHSP; -0.00127 K_L0 pi- PHSP; -0.00000 anti-K0 pi- PHSP; -# -0.00150 rho- anti-K0 SVS; -0.00278 rho0 K- SVS; -0.00100 anti-K0 pi- pi0 PHSP; -0.00250 a_1- anti-K0 SVS; -0.00790 anti-K*0 pi- SVS; -0.00500 anti-K*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00500 anti-K*0 pi- pi0 PHSP; -# -# March 2009 New Modes -0.00086 K- pi0 PHSP; -0.00273 K- pi+ pi- PHSP; -0.00815 pi+ pi+ pi- pi- pi- PHSP; -0.01214 pi+ pi+ pi- pi- pi- pi0 PHSP; -0.00136 anti-p- n0 PHSP; -# -0.00090 K_S0 K_S0 pi+ pi- pi- PHSP; -0.00090 K_L0 K_L0 pi+ pi- pi- PHSP; -0.00000 anti-K0 K0 pi+ pi- pi- PHSP; -# -0.00318 K_S0 pi+ pi- pi- PHSP; -0.00318 K_L0 pi+ pi- pi- PHSP; -0.00000 K0 pi+ pi- pi- PHSP; -# Doubly Cabibbo suppressed -0.00030 K- K- pi+ PHSP; -Enddecay -# -# D** -# -Decay D_0*+ -0.3333 D+ pi0 PHSP; -0.6667 D0 pi+ PHSP; -Enddecay -Decay D_0*- -0.3333 D- pi0 PHSP; -0.6667 anti-D0 pi- PHSP; -Enddecay -Decay D_0*0 -0.3333 D0 pi0 PHSP; -0.6667 D+ pi- PHSP; -Enddecay -Decay anti-D_0*0 -0.3333 anti-D0 pi0 PHSP; -0.6667 D- pi+ PHSP; -Enddecay -# - -SetLineshapePW D_1+ D*+ pi0 2 -SetLineshapePW D_1+ D*0 pi+ 2 -SetLineshapePW D_1- D*- pi0 2 -SetLineshapePW D_1- anti-D*0 pi- 2 -SetLineshapePW D_10 D*0 pi0 2 -SetLineshapePW D_10 D*+ pi- 2 -SetLineshapePW anti-D_10 anti-D*0 pi0 2 -SetLineshapePW anti-D_10 D*- pi+ 2 - -Decay D_1+ -0.3333 D*+ pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.6667 D*0 pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -Decay D_1- -0.3333 D*- pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.6667 anti-D*0 pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -Decay D_10 -0.3333 D*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.6667 D*+ pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -Decay anti-D_10 -0.3333 anti-D*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.6667 D*- pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -# -Decay D'_1+ -0.3333 D*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.6667 D*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay D'_1- -0.3333 D*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.6667 anti-D*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay D'_10 -0.6667 D*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3333 D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay anti-D'_10 -0.3333 anti-D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.6667 D*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# - -SetLineshapePW D_2*+ D*+ pi0 2 -SetLineshapePW D_2*+ D*0 pi+ 2 -SetLineshapePW D_2*- D*- pi0 2 -SetLineshapePW D_2*- anti-D*0 pi- 2 -SetLineshapePW D_2*0 D*0 pi0 2 -SetLineshapePW D_2*0 D*+ pi- 2 -SetLineshapePW anti-D_2*0 anti-D*0 pi0 2 -SetLineshapePW anti-D_2*0 D*- pi+ 2 - -Decay D_2*+ -0.1030 D*+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.2090 D*0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.2290 D+ pi0 TSS; -0.4590 D0 pi+ TSS; -Enddecay -Decay D_2*- -0.1030 D*- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.2090 anti-D*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.2290 D- pi0 TSS; -0.4590 anti-D0 pi- TSS; -Enddecay -Decay D_2*0 -0.2090 D*+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.1030 D*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.2290 D0 pi0 TSS; -0.4590 D+ pi- TSS; -Enddecay -Decay anti-D_2*0 -0.1030 anti-D*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.2090 D*- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.2290 anti-D0 pi0 TSS; -0.4590 D- pi+ TSS; -Enddecay -# -# D_s ** -# -Decay D_s0*+ -# 0.5000 D+ K0 PHSP; -# 0.5000 D0 K+ PHSP; -1.000 D_s+ pi0 PHSP; -Enddecay -Decay D_s0*- -# 0.5000 D- anti-K0 PHSP; -# 0.5000 anti-D0 K- PHSP; -1.000 D_s- pi0 PHSP; -Enddecay -Decay D'_s1+ -0.5000 D*+ K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.5000 D*0 K+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.0000 gamma D_s*+ PHSP; -0.0000 gamma D_s+ PHSP; -Enddecay -Decay D'_s1- -0.5000 D*- anti-K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.5000 anti-D*0 K- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.0000 gamma D_s*- PHSP; -0.0000 gamma D_s- PHSP; -Enddecay -Decay D_s1+ -0.80000 D_s*+ pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.20000 D_s+ gamma VSP_PWAVE; -Enddecay -Decay D_s1- -0.80000 D_s*- pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.20000 D_s- gamma VSP_PWAVE; -Enddecay -Decay D_s2*+ -0.0500 D*+ K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0500 D*0 K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.4300 D+ K0 TSS; -0.4700 D0 K+ TSS; -Enddecay -Decay D_s2*- -0.0500 D*- anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0500 anti-D*0 K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.4300 D- anti-K0 TSS; -0.4700 anti-D0 K- TSS; -Enddecay -# -# -# Charm Mesons: Radially Excited States -# -Decay D(2S)0 -0.6667 D*+ pi- SVS; -0.3333 D*0 pi0 SVS; -Enddecay -Decay anti-D(2S)0 -0.3333 anti-D*0 pi0 SVS; -0.6667 D*- pi+ SVS; -Enddecay -Decay D(2S)+ -0.3333 D*+ pi0 SVS; -0.6667 D*0 pi+ SVS; -Enddecay -Decay D(2S)- -0.3333 D*- pi0 SVS; -0.6667 anti-D*0 pi- SVS; -Enddecay -Decay D*(2S)0 -0.3333 D*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1667 D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1667 D0 pi0 VSS; -0.3333 D+ pi- VSS; -Enddecay -Decay anti-D*(2S)0 -0.1667 anti-D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3333 D*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1667 anti-D0 pi0 VSS; -0.3333 D- pi+ VSS; -Enddecay -Decay D*(2S)+ -0.1667 D*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3333 D*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1667 D+ pi0 VSS; -0.3333 D0 pi+ VSS; -Enddecay -Decay D*(2S)- -0.1667 D*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3333 anti-D*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1667 D- pi0 VSS; -0.3333 anti-D0 pi- VSS; -Enddecay -# -# -# Strange Mesons updated to PDG 2008 -# -# -Decay K_S0 -0.6925 pi+ pi- PHSP; -0.3075 pi0 pi0 PHSP; -Enddecay -# -# K_L0 is decayed in GEANT -# -Decay K0 -0.500 K_L0 PHSP; -0.500 K_S0 PHSP; -Enddecay -Decay anti-K0 -0.500 K_L0 PHSP; -0.500 K_S0 PHSP; -Enddecay -# -Decay K*0 -0.6657 K+ pi- VSS; -0.3323 K0 pi0 VSS; -0.0020 K0 gamma VSP_PWAVE; -Enddecay -# -Decay anti-K*0 -0.6657 K- pi+ VSS; -0.3323 anti-K0 pi0 VSS; -0.0020 anti-K0 gamma VSP_PWAVE; -Enddecay -# -Decay K*+ -0.6657 K0 pi+ VSS; -0.3323 K+ pi0 VSS; -0.0020 K+ gamma VSP_PWAVE; -Enddecay -# -Decay K*- -0.6657 anti-K0 pi- VSS; -0.3323 K- pi0 VSS; -0.0020 K- gamma VSP_PWAVE; -Enddecay -# -# The decays below are for particle aliases and used when -# generating CP violating decays that depends on the decay -# of the neutral K* -# -Decay K*L -1.0000 pi0 K_L0 VSS; -Enddecay -Decay K*S -1.0000 pi0 K_S0 VSS; -Enddecay -Decay K*BL -1.0000 pi0 K_L0 VSS; -Enddecay -Decay K*BS -1.0000 pi0 K_S0 VSS; -Enddecay -Decay K*0T -1.0000 pi- K+ VSS; -Enddecay -Decay anti-K*0T -1.0000 pi+ K- VSS; -Enddecay -# -# -Decay K_0*+ -0.6667 K0 pi+ PHSP; -0.3333 K+ pi0 PHSP; -Enddecay -# -Decay K_0*- -0.6667 anti-K0 pi- PHSP; -0.3333 K- pi0 PHSP; -Enddecay -# -Decay K_0*0 -0.6667 K+ pi- PHSP; -0.3333 K0 pi0 PHSP; -Enddecay -# -Decay K_0*0N -1.0000 K0 pi0 PHSP; -Enddecay -# -Decay anti-K_0*0 -0.6667 K- pi+ PHSP; -0.3333 anti-K0 pi0 PHSP; -Enddecay -# -Decay anti-K_0*0N -1.0000 anti-K0 pi0 PHSP; -Enddecay -# -Decay K_10 -0.2800 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1400 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1067 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0533 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -#To large masses can cause infinit loops -0.1100 omega K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1444 K0 pi+ pi- PHSP; -0.1244 K+ pi- pi0 PHSP; -0.0412 K0 pi0 pi0 PHSP; -Enddecay -# -Decay anti-K_10 -0.2800 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1400 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1067 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0533 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -#To large masses can cause infinit loops -0.1100 omega anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1444 anti-K0 pi+ pi- PHSP; -0.1244 K- pi+ pi0 PHSP; -0.0412 anti-K0 pi0 pi0 PHSP; -Enddecay -# -Decay K_1+ -0.2800 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1400 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1067 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0533 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -#To large masses can cause infinit loops -0.1100 omega K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1444 K+ pi+ pi- PHSP; -0.1244 K0 pi+ pi0 PHSP; -0.0412 K+ pi0 pi0 PHSP; -Enddecay -# -Decay K_1- -0.2800 rho- anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1400 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1067 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0533 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -#To large masses can cause infinit loops -0.1100 omega K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1444 K- pi+ pi- PHSP; -0.1244 anti-K0 pi- pi0 PHSP; -0.0412 K- pi0 pi0 PHSP; -Enddecay -# -Decay K'_1+ -0.6300 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3100 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0200 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 omega K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0133 K+ pi+ pi- PHSP; -0.0067 K+ pi0 pi0 PHSP; -Enddecay -# -Decay K'_1- -0.6300 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3100 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0200 rho- anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 omega K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0133 K- pi+ pi- PHSP; -0.0067 K- pi0 pi0 PHSP; -Enddecay -# -Decay K'_10 -0.6300 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3100 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0200 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 omega K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0133 K0 pi+ pi- PHSP; -0.0067 K0 pi0 pi0 PHSP; -Enddecay -# -Decay anti-K'_10 -0.6300 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3100 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0200 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 omega anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0133 anti-K0 pi+ pi- PHSP; -0.0067 anti-K0 pi0 pi0 PHSP; -Enddecay -# -Decay K_2*+ -0.3340 K0 pi+ TSS; -0.1670 K+ pi0 TSS; -0.1645 K*0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0835 K*+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0450 K*0 pi+ pi0 PHSP; -0.0450 K*+ pi+ pi- PHSP; -0.0450 K*+ pi0 pi0 PHSP; -0.0580 rho+ K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 rho0 K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 omega K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay -# -Decay K_2*- -0.3340 anti-K0 pi- TSS; -0.1670 K- pi0 TSS; -0.1645 anti-K*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0835 K*- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0450 anti-K*0 pi- pi0 PHSP; -0.0450 K*- pi+ pi- PHSP; -0.0450 K*- pi0 pi0 PHSP; -0.0580 rho- K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 rho0 K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 omega K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay -# -Decay K_2*0 -0.3340 K+ pi- TSS; -0.1670 K0 pi0 TSS; -0.1645 K*+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0835 K*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0450 K*0 pi+ pi- PHSP; -0.0450 K*0 pi0 pi0 PHSP; -0.0450 K*+ pi- pi0 PHSP; -0.0580 rho- K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 rho0 K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 omega K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay -# -Decay anti-K_2*0 -0.3340 K- pi+ TSS; -0.1670 anti-K0 pi0 TSS; -0.1645 K*- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0835 anti-K*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0450 anti-K*0 pi+ pi- PHSP; -0.0450 anti-K*0 pi0 pi0 PHSP; -0.0450 K*- pi+ pi0 PHSP; -0.0580 rho+ K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 rho0 anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 omega anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay - - - - -# Decay K*(1410) -Decay K'*0 -0.0467 K+ pi- VSS; -0.0233 K0 pi0 VSS; -0.5760 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.2880 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0440 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0220 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay anti-K'*0 -0.0467 K- pi+ VSS; -0.0233 anti-K0 pi0 VSS; -0.5760 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.2880 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0440 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0220 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay K'*+ -0.0467 K0 pi+ VSS; -0.0233 K+ pi0 VSS; -0.5760 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.2880 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0440 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0220 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay K'*- -0.0467 anti-K0 pi- VSS; -0.0233 K- pi0 VSS; -0.5760 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.2880 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0440 rho- K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0220 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# - - -# Decay K*(1680) -Decay K''*0 -0.2580 K+ pi- VSS; -0.1290 K0 pi0 VSS; -0.2093 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1047 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1993 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0997 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay anti-K''*0 -0.2580 K- pi+ VSS; -0.1290 anti-K0 pi0 VSS; -0.2093 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1047 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1993 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0997 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay K''*+ -0.2580 K0 pi+ VSS; -0.1290 K+ pi0 VSS; -0.2093 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1047 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1993 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0997 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay K''*- -0.2580 anti-K0 pi- VSS; -0.1290 K- pi0 VSS; -0.2093 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1047 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1993 rho- K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0997 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay - -Decay Xsd -1.00000 d anti-s PYTHIA 11; -Enddecay - -Decay anti-Xsd -1.00000 anti-d s PYTHIA 11; -Enddecay - -Decay Xsu -1.00000 u anti-s PYTHIA 11; -Enddecay - -Decay anti-Xsu -1.00000 anti-u s PYTHIA 11; -Enddecay - -# Xss decays can be uncommented when Jst74/lucomp.F recognizes Xss -Decay Xss -1.00000 s anti-s PYTHIA 11; -Enddecay - -Decay anti-Xss -1.00000 anti-s s PYTHIA 11; -Enddecay - -# -# Light Mesons Updated to PDG 2008 -# -Decay pi0 -0.9880 gamma gamma PHSP; -0.0120 e+ e- gamma PI0_DALITZ; -Enddecay -# -Decay eta -0.39311 gamma gamma PHSP; -0.32561 pi0 pi0 pi0 PHSP; -0.22731 pi- pi+ pi0 ETA_DALITZ; -0.04600 gamma pi- pi+ PHSP; -0.00680 gamma e+ e- PHSP; -0.00031 gamma mu+ mu- PHSP; -0.00044 gamma gamma pi0 PHSP; -0.00042 pi+ pi- e+ e- PHSP; -Enddecay -# -Decay rho0 -1.000 pi+ pi- VSS; -Enddecay -Decay rho+ -1.000 pi+ pi0 VSS; -Enddecay -Decay rho- -1.000 pi- pi0 VSS; -Enddecay -# -Decay omega -0.89210 pi- pi+ pi0 OMEGA_DALITZ; -0.08920 pi0 gamma VSP_PWAVE; -0.01530 pi- pi+ VSS; -0.00046 eta gamma VSP_PWAVE; -0.00077 pi0 e+ e- PHOTOS PHSP; -0.00010 pi0 mu+ mu- PHOTOS PHSP; -0.00150 pi+ pi- gamma PHSP; -0.00007 pi0 pi0 gamma PHSP; -0.00050 pi+ pi- pi+ pi- PHSP; -Enddecay -# -Decay eta' -0.4460 pi+ pi- eta PHSP; -0.2070 pi0 pi0 eta PHSP; -0.2940 rho0 gamma SVP_HELAMP 1.0 0.0 1.0 0.0; -0.0304 omega gamma SVP_HELAMP 1.0 0.0 1.0 0.0; -0.0210 gamma gamma PHSP; -0.0015 pi0 pi0 pi0 PHSP; -0.0001 gamma mu- mu+ PHOTOS PHSP; -Enddecay -# -Decay phi -0.4920 K+ K- VSS; -0.3400 K_L0 K_S0 VSS; -0.0425 rho+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0425 rho0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0425 rho- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0250 pi+ pi- pi0 PHSP; -0.0131 eta gamma VSP_PWAVE; -0.00126 pi0 gamma VSP_PWAVE; -0.000297 e+ e- PHOTOS VLL; -0.000299 mu+ mu- PHOTOS VLL; -0.000115 pi0 pi0 gamma PHSP; -0.000107 eta e+ e- PHSP; -0.000322 f_0 gamma PHSP; -Enddecay -# -Decay a_1+ -0.4920 rho0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.5080 rho+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay a_10 -0.5000 rho- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.5000 rho+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay a_1- -0.4920 rho0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.5080 rho- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay a_2+ -0.3500 rho0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.3500 rho+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.1430 eta pi+ TSS; -0.1000 omega pi+ pi0 PHSP; -0.0490 anti-K0 K+ TSS; -0.0027 pi+ gamma PHSP; -0.0053 eta' pi+ TSS; -Enddecay -# -Decay a_2- -0.3500 rho0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.3500 rho- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.1430 eta pi- TSS; -0.1000 omega pi- pi0 PHSP; -0.0490 anti-K0 K- TSS; -0.0027 pi- gamma PHSP; -0.0053 eta' pi- TSS; -Enddecay -# -Decay a_20 -0.3500 rho+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.3500 rho- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.1430 eta pi0 TSS; -0.1000 omega pi+ pi- PHSP; -0.0245 K+ K- TSS; -0.01225 K_L0 K_L0 TSS; -0.01225 K_S0 K_S0 TSS; -0.0027 pi0 gamma PHSP; -0.0053 eta' pi0 TSS; -Enddecay -# -Decay b_1+ -0.9984 omega pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0016 pi+ gamma VSP_PWAVE; -Enddecay -Decay b_1- -0.9984 omega pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0016 pi- gamma VSP_PWAVE; -Enddecay -Decay b_10 -0.9984 omega pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0016 pi0 gamma VSP_PWAVE; -Enddecay -# -Decay a_00 -0.9000 eta pi0 PHSP; -0.0500 K+ K- PHSP; -0.0250 K_S0 K_S0 PHSP; -0.0250 K_L0 K_L0 PHSP; -Enddecay -Decay a_0+ -0.9000 eta pi+ PHSP; -0.1000 anti-K0 K+ PHSP; -Enddecay -Decay a_0- -0.9000 eta pi- PHSP; -0.1000 K0 K- PHSP; -Enddecay -# -Decay f_0 -0.6667 pi+ pi- PHSP; -0.3333 pi0 pi0 PHSP; -#0.1100 K+ K- PHSP; -#0.0550 K_S0 K_S0 PHSP; -#0.0550 K_L0 K_L0 PHSP; -Enddecay -# -Decay f'_0 -0.5200 pi+ pi- PHSP; -0.2600 pi0 pi0 PHSP; -0.0750 pi+ pi+ pi- pi- PHSP; -0.0750 pi+ pi- pi0 pi0 PHSP; -0.0350 K+ K- PHSP; -0.0175 K_S0 K_S0 PHSP; -0.0175 K_L0 K_L0 PHSP; -Enddecay -# -Decay f_1 -0.1655 rho0 pi+ pi- PHSP; -0.0551 rho0 pi0 pi0 PHSP; -0.0552 rho+ pi- pi0 PHSP; -0.0552 rho- pi+ pi0 PHSP; -0.1200 a_00 pi0 VSS; -0.1200 a_0+ pi- VSS; -0.1200 a_0- pi+ VSS; -0.1100 eta pi+ pi- PHSP; -0.0550 eta pi0 pi0 PHSP; -0.0257 K+ K- pi0 PHSP; -0.0129 K0 anti-K0 pi0 PHSP; -0.0257 anti-K0 K+ pi- PHSP; -0.0257 K0 K- pi+ PHSP; -0.0540 gamma rho0 PHSP; -Enddecay -# -Decay f'_1 -0.2500 K+ K- pi0 PHSP; -0.2500 K0 anti-K0 pi0 PHSP; -0.2500 anti-K0 K+ pi- PHSP; -0.2500 K0 K- pi+ PHSP; -Enddecay -# -Decay f_2 -0.5650 pi+ pi- TSS; -0.2820 pi0 pi0 TSS; -0.0280 pi+ pi- pi+ pi- PHSP; -0.0720 pi+ pi- pi0 pi0 PHSP; -0.0030 pi0 pi0 pi0 pi0 PHSP; -0.0230 K+ K- TSS; -0.0115 K_S0 K_S0 TSS; -0.0115 K_L0 K_L0 TSS; -0.0040 eta eta TSS; -Enddecay -# -Decay f_0(1500) -0.0190 eta eta' PHSP; -0.0510 eta eta PHSP; -0.1410 pi0 pi0 pi0 pi0 PHSP; -0.3540 pi+ pi- pi+ pi- PHSP; -0.2330 pi+ pi- PHSP; -0.1160 pi0 pi0 PHSP; -0.0430 K+ K- PHSP; -0.0215 K_S0 K_S0 PHSP; -0.0215 K_L0 K_L0 PHSP; -Enddecay -# -Decay f'_2 -0.4444 K+ K- TSS; -0.2222 K_S0 K_S0 TSS; -0.2222 K_L0 K_L0 TSS; -0.1030 eta eta TSS; -0.0055 pi+ pi- TSS; -0.0027 pi0 pi0 TSS; -Enddecay -# -Decay h_1 -0.3333 rho+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3333 rho- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3334 rho0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay h'_1 -0.2500 K*+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.2500 K*- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.2500 anti-K*0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.2500 K*0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay rho(2S)+ -0.4000 pi+ pi0 PHSP; -0.4000 pi+ pi+ pi- pi0 PHSP; -0.2000 pi+ pi0 pi0 pi0 PHSP; -Enddecay -Decay rho(2S)- -0.4000 pi- pi0 PHSP; -0.4000 pi- pi+ pi- pi0 PHSP; -0.2000 pi- pi0 pi0 pi0 PHSP; -Enddecay -Decay rho(2S)0 -0.4000 pi+ pi- PHSP; -0.3500 pi+ pi- pi+ pi- PHSP; -0.1500 pi+ pi- pi0 pi0 PHSP; -0.1000 pi0 pi0 pi0 pi0 PHSP; -Enddecay -Decay phi(1680) -0.08 pi+ pi- PHSP; -0.05 pi+ pi+ pi- pi- PHSP; -0.10 pi0 pi+ pi- PHSP; -0.10 pi0 pi+ pi+ pi- pi- PHSP; -0.12 pi0 pi0 pi+ pi- PHSP; -0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.05 pi0 pi0 pi0 pi+ pi- PHSP; -0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.04 K+ K- pi+ pi- PHSP; -0.02 K0 K- pi+ PHSP; -0.02 anti-K0 K+ pi- PHSP; -0.02 K0 K- pi+ pi+ pi- PHSP; -0.02 anti-K0 K+ pi- pi- pi+ PHSP; -0.02 K0 K- pi0 pi+ PHSP; -0.02 anti-K0 K+ pi0 pi- PHSP; -0.02 eta pi0 pi+ pi- PHSP; -0.01 eta rho- pi0 pi+ PHSP; -0.01 eta rho+ pi0 pi- PHSP; -Enddecay -Decay rho(3S)0 -0.08 pi+ pi- PHSP; -0.05 pi+ pi+ pi- pi- PHSP; -0.10 pi0 pi+ pi- PHSP; -0.10 pi0 pi+ pi+ pi- pi- PHSP; -0.12 pi0 pi0 pi+ pi- PHSP; -0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.05 pi0 pi0 pi0 pi+ pi- PHSP; -0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.04 K+ K- pi+ pi- PHSP; -0.02 K0 K- pi+ PHSP; -0.02 anti-K0 K+ pi- PHSP; -0.02 K0 K- pi+ pi+ pi- PHSP; -0.02 anti-K0 K+ pi- pi- pi+ PHSP; -0.02 K0 K- pi0 pi+ PHSP; -0.02 anti-K0 K+ pi0 pi- PHSP; -0.02 eta pi0 pi+ pi- PHSP; -0.01 eta rho- pi0 pi+ PHSP; -0.01 eta rho+ pi0 pi- PHSP; -Enddecay -Decay omega(1650) -0.08 pi+ pi- PHSP; -0.05 pi+ pi+ pi- pi- PHSP; -0.10 pi0 pi+ pi- PHSP; -0.10 pi0 pi+ pi+ pi- pi- PHSP; -0.12 pi0 pi0 pi+ pi- PHSP; -0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.05 pi0 pi0 pi0 pi+ pi- PHSP; -0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.04 K+ K- pi+ pi- PHSP; -0.02 K0 K- pi+ PHSP; -0.02 anti-K0 K+ pi- PHSP; -0.02 K0 K- pi+ pi+ pi- PHSP; -0.02 anti-K0 K+ pi- pi- pi+ PHSP; -0.02 K0 K- pi0 pi+ PHSP; -0.02 anti-K0 K+ pi0 pi- PHSP; -0.02 eta pi0 pi+ pi- PHSP; -0.01 eta rho- pi0 pi+ PHSP; -0.01 eta rho+ pi0 pi- PHSP; -Enddecay -#Decay rho(1900) -#0.08 pi+ pi- PHSP; -#0.05 pi+ pi+ pi- pi- PHSP; -#0.10 pi0 pi+ pi- PHSP; -#0.10 pi0 pi+ pi+ pi- pi- PHSP; -#0.12 pi0 pi0 pi+ pi- PHSP; -#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.05 pi0 pi0 pi0 pi+ pi- PHSP; -#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.04 K+ K- pi+ pi- PHSP; -#0.02 K0 K- pi+ PHSP; -#0.02 anti-K0 K+ pi- PHSP; -#0.02 K0 K- pi+ pi+ pi- PHSP; -#0.02 anti-K0 K+ pi- pi- pi+ PHSP; -#0.02 K0 K- pi0 pi+ PHSP; -#0.02 anti-K0 K+ pi0 pi- PHSP; -#0.02 eta pi0 pi+ pi- PHSP; -#0.01 eta rho- pi0 pi+ PHSP; -#0.01 eta rho+ pi0 pi- PHSP; -#Enddecay -Decay omega(2S) -0.08 pi+ pi- PHSP; -0.05 pi+ pi+ pi- pi- PHSP; -0.10 pi0 pi+ pi- PHSP; -0.10 pi0 pi+ pi+ pi- pi- PHSP; -0.12 pi0 pi0 pi+ pi- PHSP; -0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.05 pi0 pi0 pi0 pi+ pi- PHSP; -0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.04 K+ K- pi+ pi- PHSP; -0.02 K0 K- pi+ PHSP; -0.02 anti-K0 K+ pi- PHSP; -0.02 K0 K- pi+ pi+ pi- PHSP; -0.02 anti-K0 K+ pi- pi- pi+ PHSP; -0.02 K0 K- pi0 pi+ PHSP; -0.02 anti-K0 K+ pi0 pi- PHSP; -0.02 eta pi0 pi+ pi- PHSP; -0.01 eta rho- pi0 pi+ PHSP; -0.01 eta rho+ pi0 pi- PHSP; -Enddecay -#Decay rho(2150) -#0.08 pi+ pi- PHSP; -#0.05 pi+ pi+ pi- pi- PHSP; -#0.10 pi0 pi+ pi- PHSP; -#0.10 pi0 pi+ pi+ pi- pi- PHSP; -#0.12 pi0 pi0 pi+ pi- PHSP; -#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.05 pi0 pi0 pi0 pi+ pi- PHSP; -#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.04 K+ K- pi+ pi- PHSP; -#0.02 K0 K- pi+ PHSP; -#0.02 anti-K0 K+ pi- PHSP; -#0.02 K0 K- pi+ pi+ pi- PHSP; -#0.02 anti-K0 K+ pi- pi- pi+ PHSP; -#0.02 K0 K- pi0 pi+ PHSP; -#0.02 anti-K0 K+ pi0 pi- PHSP; -#0.02 eta pi0 pi+ pi- PHSP; -#0.01 eta rho- pi0 pi+ PHSP; -#0.01 eta rho+ pi0 pi- PHSP; -#Enddecay -#Decay omega(1960) -#0.08 pi+ pi- PHSP; -#0.05 pi+ pi+ pi- pi- PHSP; -#0.10 pi0 pi+ pi- PHSP; -#0.10 pi0 pi+ pi+ pi- pi- PHSP; -#0.12 pi0 pi0 pi+ pi- PHSP; -#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.05 pi0 pi0 pi0 pi+ pi- PHSP; -#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.04 K+ K- pi+ pi- PHSP; -#0.02 K0 K- pi+ PHSP; -#0.02 anti-K0 K+ pi- PHSP; -#0.02 K0 K- pi+ pi+ pi- PHSP; -#0.02 anti-K0 K+ pi- pi- pi+ PHSP; -#0.02 K0 K- pi0 pi+ PHSP; -#0.02 anti-K0 K+ pi0 pi- PHSP; -#0.02 eta pi0 pi+ pi- PHSP; -#0.01 eta rho- pi0 pi+ PHSP; -#0.01 eta rho+ pi0 pi- PHSP; -#Enddecay -#Decay rho(1965) -#0.08 pi+ pi- PHSP; -#0.05 pi+ pi+ pi- pi- PHSP; -#0.10 pi0 pi+ pi- PHSP; -#0.10 pi0 pi+ pi+ pi- pi- PHSP; -#0.12 pi0 pi0 pi+ pi- PHSP; -#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.05 pi0 pi0 pi0 pi+ pi- PHSP; -#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.04 K+ K- pi+ pi- PHSP; -#0.02 K0 K- pi+ PHSP; -#0.02 anti-K0 K+ pi- PHSP; -#0.02 K0 K- pi+ pi+ pi- PHSP; -#0.02 anti-K0 K+ pi- pi- pi+ PHSP; -#0.02 K0 K- pi0 pi+ PHSP; -#0.02 anti-K0 K+ pi0 pi- PHSP; -#0.02 eta pi0 pi+ pi- PHSP; -#0.01 eta rho- pi0 pi+ PHSP; -#0.01 eta rho+ pi0 pi- PHSP; -#Enddecay -# -# -# cc= mesons Updated to PDG 2008 -# -Decay eta_c -0.0013 p+ anti-p- PHSP; -0.0027 phi phi SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; -0.0029 phi K+ K- PHSP; -0.0067 rho0 rho0 SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; -0.0133 rho+ rho- SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; -0.0120 pi+ pi- pi+ pi- PHSP; -0.0015 K+ K- K+ K- PHSP; -0.0150 K+ K- pi+ pi- PHSP; -0.0327 eta pi+ pi- PHSP; -0.0163 eta pi0 pi0 PHSP; -0.0273 eta' pi+ pi- PHSP; -0.0137 eta' pi0 pi0 PHSP; -0.0117 pi0 K+ K- PHSP; -0.0233 K+ anti-K0 pi- PHSP; -0.0233 K- K0 pi+ PHSP; -0.0117 K0 anti-K0 pi0 PHSP; -0.0046 K*+ K*- SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; -0.0046 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0 ; -0.01 K*0 K- pi+ PHSP; -0.01 anti-K*0 K+ pi- PHSP; -# -#March 2009 New Modes -0.01500 K*0 anti-K*0 pi+ pi- PHSP; -0.01000 K+ K- pi+ pi- pi+ pi- PHSP; -0.02000 pi+ pi- pi+ pi- pi+ pi- PHSP; -0.00104 Lambda0 anti-Lambda0 PHSP; -0.01000 f_2 f_2 PHSP; -0.00800 f_2 f'_2 PHSP; -# -0.69136 rndmflav anti-rndmflav PYTHIA 12; -Enddecay -# -Decay eta_c(2S) - 0.019 K+ anti-K0 pi- PHSP; - 0.019 K- K0 pi+ PHSP; - 0.0095 pi0 K+ K- PHSP; - 0.0095 K0 anti-K0 pi0 PHSP; - 0.943 rndmflav anti-rndmflav PYTHIA 12; -Enddecay -# -Decay J/psi -0.05940 e+ e- PHOTOS VLL; -0.05930 mu+ mu- PHOTOS VLL; -0.00564 rho0 pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.00563 rho+ pi- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.00563 rho- pi+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.00400 omega pi+ pi- pi0 PHSP; -0.00364 a_20 rho0 PHSP; -0.00363 a_2+ rho- PHSP; -0.00363 a_2- rho+ PHSP; -0.00850 omega pi+ pi- pi+ pi- PHSP; -0.00430 omega f_2 PHSP; -0.00430 omega pi+ pi- PHSP; -0.00300 K*0 anti-K_2*0 PHSP; -0.00300 anti-K*0 K_2*0 PHSP; -0.00305 omega K*0 anti-K0 PHSP; -0.00305 omega anti-K*0 K0 PHSP; -0.00256 K*+ K- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.00256 K*- K+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.002195 K*0 anti-K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.002195 anti-K*0 K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.00190 K_1+ K- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.00190 K_1- K+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.00340 omega pi0 pi0 PHSP; -0.00150 b_1+ pi- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.00150 b_1- pi+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -# -0.0017 omega pi- K+ K_S0 PHSP; -0.0017 omega pi- K+ K_L0 PHSP; -0.0017 omega pi+ K- K_S0 PHSP; -0.0017 omega pi+ K- K_L0 PHSP; -0.0000 omega pi- K+ K0 PHSP; -0.0000 omega pi- K+ anti-K0 PHSP; -0.0000 omega pi+ K- K0 PHSP; -0.0000 omega pi+ K- anti-K0 PHSP; -# -0.0023 b_10 pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.00226 eta pi+ pi- pi+ pi- PHSP; -0.000545 phi K*0 anti-K0 PHSP; -0.000545 phi anti-K*0 K0 PHSP; -0.000545 phi K*+ K- PHSP; -0.000545 phi K*- K+ PHSP; -0.0008 omega K0 anti-K0 PHSP; -0.0008 omega K+ K- PHSP; -0.00166 phi pi+ pi- pi+ pi- PHSP; -0.0016 Delta++ anti-p- pi- PHSP; -0.0016 anti-Delta-- p+ pi+ PHSP; -0.00174 omega eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000915 phi K0 anti-K0 PHSP; -0.000915 phi K+ K- PHSP; -0.0011 omega p+ anti-p- PHSP; -0.0011 Delta++ anti-Delta-- PHSP; -0.000515 Sigma- anti-Sigma+ PHSP; -0.000515 Sigma+ anti-Sigma- PHSP; -0.00072 eta pi+ pi- pi+ pi- pi+ pi- PHSP; -0.00015 pi+ pi- PHSP; - -0.0130 gamma eta_c PHSP; -0.0083 gamma pi+ pi- pi0 pi0 PHSP; -0.0061 gamma eta pi+ pi- PHSP; -0.00225 gamma rho+ rho- PHSP; -0.00225 gamma rho0 rho0 PHSP; -0.00471 gamma eta' PHSP; -0.0028 gamma pi+ pi- pi+ pi- PHSP; -0.0021 gamma K+ K- pi+ pi- PHSP; -0.00161 gamma omega omega PHSP; -0.00143 gamma f_2 PHSP; -0.0040 gamma K*0 anti-K*0 PHSP; -# -# March 2009 New Modes -0.0011 eta pi- K+ K_S0 PHSP; -0.0011 eta pi- K+ K_L0 PHSP; -0.0011 eta pi+ K- K_S0 PHSP; -0.0011 eta pi+ K- K_L0 PHSP; -0.0000 eta pi- K+ K0 PHSP; -0.0000 eta pi- K+ anti-K0 PHSP; -0.0000 eta pi+ K- K0 PHSP; -0.0000 eta pi+ K- anti-K0 PHSP; -# -0.0410 pi+ pi- pi+ pi- pi0 PHSP; -0.0290 pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; -0.0207 pi+ pi- pi0 PHSP; -0.0179 pi+ pi- pi0 K+ K- PHSP; -0.0162 pi+ pi- pi+ pi- pi0 pi0 PHSP; -0.0090 pi+ pi- pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; -0.0066 pi+ pi- K+ K- PHSP; -0.00184 pi+ pi- K+ K- eta PHSP; -0.00245 pi0 pi0 K+ K- PHSP; -0.0047 pi+ pi- pi+ pi- K+ K- PHSP; -0.00102 K+ K- pi0 PHSP; -0.00102 K0 anti-K0 pi0 PHSP; -0.00203 K+ anti-K0 pi- PHSP; -0.00203 K- K0 pi+ PHSP; -0.00355 pi+ pi- pi+ pi- PHSP; -#### Already included above 0.00229 pi+ pi- pi+ pi- eta PHSP; -0.00430 pi+ pi- pi+ pi- pi+ pi- PHSP; -0.00217 p+ anti-p- PHSP; -0.00109 p+ anti-p- pi0 PHSP; -0.00600 p+ anti-p- pi+ pi- PHSP; -0.00230 p+ anti-p- pi+ pi- pi0 PHSP; -0.00209 p+ anti-p- eta PHSP; -0.00220 n0 anti-n0 PHSP; -0.00400 n0 anti-n0 pi+ pi- PHSP; -0.00129 Sigma0 anti-Sigma0 PHSP; -0.00212 p+ anti-n0 pi- PHSP; -0.00090 Xi0 anti-Xi0 PHSP; -0.00090 Xi- anti-Xi+ PHSP; -0.00161 Lambda0 anti-Lambda0 PHSP; -# -0.092624 rndmflav anti-rndmflav PYTHIA 12; -0.399790 g g g PYTHIA 4; -0.035110 gamma g g PYTHIA 4; -0.0 K0 anti-K0 PHSP; -0.0 K_S0 K_S0 PHSP; -0.0 K_L0 K_L0 PHSP; -0.000146 K_S0 K_L0 PHSP; -Enddecay -# -Decay psi(2S) -0.00752 e+ e- PHOTOS VLL; -0.00750 mu+ mu- PHOTOS VLL; -0.00300 tau+ tau- PHOTOS VLL; -0.32600 J/psi pi+ pi- VVPIPI; -0.16840 J/psi pi0 pi0 VVPIPI; -0.03160 J/psi eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.00126 J/psi pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.09400 gamma chi_c0 PHSP; -0.08800 gamma chi_c1 PHSP; -0.08300 gamma chi_c2 PHSP; -0.00300 gamma eta_c PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000136 gamma eta' PHSP; -0.00021 gamma f_2 PHSP; -0.00350 pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; -0.00035 pi+ pi- pi+ pi- pi+ pi- PHSP; -0.00290 pi+ pi- pi+ pi- pi0 PHSP; -0.00020 b_1+ pi- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.00020 b_1- pi+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.00024 b_10 pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.000168 pi+ pi- pi0 PHSP; -0.0000545 K*0 anti-K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0000545 anti-K*0 K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000022 rho0 eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000021 omega pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000028 phi eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000008 rho+ pi- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000008 rho- pi+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000008 rho0 pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000001 phi pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000001 omega eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0000085 K*+ K- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0000085 K*- K+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000185 omega K+ K- PHSP; -0.00075 K+ K- pi+ pi- PHSP; -0.00060 p+ anti-p- pi+ pi- PHSP; -0.000133 p+ anti-p- pi0 PHSP; -0.000274 p+ anti-p- PHSP; -0.00050 K_1+ K- PHSP; -0.00050 K_1- K+ PHSP; -0.00022 rho0 pi+ pi- PHSP; -0.00028 Lambda0 anti-Lambda0 PHSP; -0.000128 Delta++ anti-Delta-- PHSP; -0.00022 Sigma0 anti-Sigma0 PHSP; -0.00026 Sigma*+ anti-Sigma*- PHSP; -0.00018 Xi- anti-Xi+ PHSP; -0.00008 pi+ pi- PHSP; -0.000063 K+ K- PHSP; -0.00007 phi K- K+ PHSP; -0.000117 phi pi- pi+ PHSP; -0.00022 pi+ pi- K_S0 K_S0 PHSP; -0.0008 h_c pi0 PHSP; -0.0 K0 anti-K0 PHSP; -0.0 K_S0 K_S0 PHSP; -0.0 K_L0 K_L0 PHSP; -0.000052 K_S0 K_L0 PHSP; -# -# March 2009 New Modes -0.00470 pi+ pi- pi+ pi- pi0 pi0 PHSP; -0.00120 pi+ pi- pi+ pi- eta PHSP; -0.00130 K+ K- pi+ pi- eta PHSP; -0.00100 K+ K- pi+ pi- pi+ pi- pi0 PHSP; -0.00180 K+ K- pi+ pi- pi+ pi- PHSP; -0.00126 K+ K- pi+ pi- pi0 PHSP; -# -0.017661 rndmflav anti-rndmflav PYTHIA 12; -0.134480 g g g PYTHIA 4; -0.009560 gamma g g PYTHIA 4; -Enddecay - -Decay psi(4040) -0.000014 e+ e- PHOTOS VLL; -0.000014 mu+ mu- PHOTOS VLL; -0.000005 tau+ tau- VLL; -0.0021 D0 anti-D0 VSS; -0.0009 D+ D- VSS; -0.1679 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1679 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1815 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1815 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1597 D*0 anti-D*0 PHSP; -0.0982 D*+ D*- PHSP; -0.0000 D0 anti-D0 pi0 PHSP; -0.0000 D+ D- pi0 PHSP; -0.0000 D0 D- pi+ PHSP; -0.0000 anti-D0 D+ pi- PHSP; -0.0000 D*+ D- pi0 PHSP; -0.0000 D*- D+ pi0 PHSP; -0.0000 D*+ anti-D0 pi- PHSP; -0.0000 D*- D0 pi+ PHSP; -0.0000 D+ anti-D*0 pi- PHSP; -0.0000 D- D*0 pi+ PHSP; -0.0403 D_s+ D_s- VSS; -Enddecay -# -Decay psi(4160) -0.00001 e+ e- PHOTOS VLL; -0.00001 mu+ mu- PHOTOS VLL; -0.000006 tau+ tau- VLL; -0.0397 D0 anti-D0 VSS; -0.0387 D+ D- VSS; -0.0520 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0520 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0515 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0515 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.29863 D*0 anti-D*0 PHSP; -0.3082 D*+ D*- PHSP; -0.0000 D0 anti-D0 pi0 PHSP; -0.0000 D+ D- pi0 PHSP; -0.0000 D0 D- pi+ PHSP; -0.0000 anti-D0 D+ pi- PHSP; -0.0000 D*+ D- pi0 PHSP; -0.0000 D*- D+ pi0 PHSP; -0.0000 D*+ anti-D0 pi- PHSP; -0.0000 D*- D0 pi+ PHSP; -0.0000 D+ anti-D*0 pi- PHSP; -0.0000 D- D*0 pi+ PHSP; -0.0100 D_s+ D_s- VSS; -0.0489 D_s*+ D_s- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0489 D_s*- D_s+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0000 D_s+ D_s- pi0 PHSP; -Enddecay -# -Decay psi(4415) -0.000011 e+ e- PHOTOS VLL; -0.000011 mu+ mu- PHOTOS VLL; -0.000007 tau+ tau- VLL; -0.0244 D0 anti-D0 VSS; -0.0219 D+ D- VSS; -0.0320 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0320 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0343 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0343 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3451 D*0 anti-D*0 PHSP; -0.3539 D*+ D*- PHSP; -0.0000 D0 anti-D0 pi0 PHSP; -0.0000 D+ D- pi0 PHSP; -0.0000 D0 D- pi+ PHSP; -0.0000 anti-D0 D+ pi- PHSP; -0.0000 D*+ D- pi0 PHSP; -0.0000 D*- D+ pi0 PHSP; -0.0000 D*+ anti-D0 pi- PHSP; -0.0000 D*- D0 pi+ PHSP; -0.0000 D+ anti-D*0 pi- PHSP; -0.0000 D- D*0 pi+ PHSP; -0.0118 D_s+ D_s- VSS; -0.0420 D_s*+ D_s- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0420 D_s*- D_s+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0263 D_s*+ D_s*- PHSP; -0.0000 D_s+ D_s- pi0 PHSP; -0.0000 D_s*+ D_s- pi0 PHSP; -0.0000 D_s+ D_s*- pi0 PHSP; -0.0000 D_s+ D- anti-K0 PHSP; -0.0000 D_s- D+ anti-K0 PHSP; -0.0000 D0 D_s- K+ PHSP; -0.0000 anti-D0 D_s+ K- PHSP; -Enddecay -# -Decay chi_c0 -0.01280 gamma J/psi PHSP; -0.000215 p+ anti-p- PHSP; -0.000235 gamma gamma PHSP; -0.00243 pi0 pi0 PHSP; -0.00487 pi+ pi- PHSP; -0.02161 pi+ pi- pi+ pi- PHSP; -0.00281 K+ K- K+ K- PHSP; -0.0120 pi+ pi- pi+ pi- pi+ pi- PHSP; -0.0087 rho0 pi+ pi- PHSP; -0.0100 rho+ pi- pi0 PHSP; -0.0100 rho- pi+ pi0 PHSP; -0.00057 K+ K- PHSP; -0.00093 phi phi PHSP; -0.0018 anti-K*0 K*0 PHSP; -0.0036 anti-K*0 K+ pi- PHSP; -0.0036 K*0 K- pi+ PHSP; -0.0043 K*+ anti-K0 pi- PHSP; -0.0043 K*- K0 pi+ PHSP; -0.01773 pi+ pi- K+ K- PHSP; -0.0021 pi+ pi- p+ anti-p- PHSP; -0.0024 eta eta PHSP; -0.00044 Lambda0 anti-Lambda0 PHSP; -0.00086 f_0 f_0 PHSP; -0.0 K0 anti-K0 PHSP; -0.00282 K_S0 K_S0 PHSP; -0.00282 K_L0 K_L0 PHSP; -0.0 K_S0 K_L0 PHSP; -# -# March 2009 New Modes -0.00170 eta' eta' PHSP; -0.00230 omega omega PHSP; -0.00325 K_1+ K- PHSP; -0.00325 K_1- K+ PHSP; -0.00101 K+ K- phi PHSP; -0.00117 p+ anti-n0 pi- PHSP; -0.000525 K+ anti-p- Lambda0 PHSP; -0.000525 K- p+ Lambda0 PHSP; -0.00590 K_S0 K_S0 pi+ pi- PHSP; -0.00590 K_L0 K_L0 pi+ pi- PHSP; -0.00000 K0 anti-K0 pi+ pi- PHSP; -0.00150 K+ K- K_S0 K_S0 PHSP; -0.00150 K+ K- K_L0 K_L0 PHSP; -0.00000 K+ K- K0 anti-K0 PHSP; -# -0.83753 rndmflav anti-rndmflav PYTHIA 12; -Enddecay -# -Decay chi_c1 -0.3600 J/psi gamma VVP 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; -0.0076 pi+ pi- pi+ pi- PHSP; -0.000066 p+ anti-p- PHSP; -0.0058 pi+ pi- pi+ pi- pi+ pi- PHSP; -0.0045 pi+ pi- K+ K- PHSP; -0.0039 rho0 pi+ pi- PHSP; -0.0020 rho+ pi- pi0 PHSP; -0.0020 rho- pi+ pi0 PHSP; -0.0016 anti-K*0 K+ pi- PHSP; -0.0016 K*0 K- pi+ PHSP; -0.0016 anti-K*0 K*0 PHSP; -0.0009 K*+ anti-K0 pi- PHSP; -0.0009 K*- K0 pi+ PHSP; -0.0005 pi+ pi- p+ anti-p- PHSP; -0.00076 pi+ pi- K_S0 K_S0 PHSP; -0.0003 K+ K- K_S0 K_S0 PHSP; -0.00024 Lambda0 anti-Lambda0 PHSP; -0.00385 K+ anti-K0 pi- PHSP; -0.00385 K- K0 pi+ PHSP; -0.00058 K+ K- K+ K- PHSP; -0.00000 K0 anti-K0 PHSP; -0.00001 K_S0 K_S0 PHSP; -0.00001 K_L0 K_L0 PHSP; -0.00000 K_S0 K_L0 PHSP; -# -# March 2009 New Modes -0.0052 pi+ pi- eta PHSP; -0.0025 pi+ pi- eta' PHSP; -0.00201 K+ K- pi0 PHSP; -# -0.587724 rndmflav anti-rndmflav PYTHIA 12; -Enddecay - - -# -Decay chi_c2 -0.2000 gamma J/psi PHSP; -0.000243 gamma gamma PHSP; -0.000067 p+ anti-p- PHSP; -0.00072 pi0 pi0 TSS; -0.00145 pi+ pi- TSS; -0.0114 pi+ pi- pi+ pi- PHSP; -0.00184 K+ K- K+ K- PHSP; -0.0086 pi+ pi- pi+ pi- pi+ pi- PHSP; -0.0094 pi+ pi- K+ K- PHSP; -0.0041 rho0 pi+ pi- PHSP; -0.0046 rho+ pi- pi0 PHSP; -0.0046 rho- pi+ pi0 PHSP; -0.00079 K+ K- TSS; -0.0025 pi+ pi- K_S0 K_S0 PHSP; -0.0003 K+ K- K_S0 K_S0 PHSP; -0.00154 phi phi PHSP; -0.00115 anti-K*0 K+ pi- PHSP; -0.00115 K*0 K- pi+ PHSP; -0.0026 anti-K*0 K*0 PHSP; -0.0016 K*+ anti-K0 pi- PHSP; -0.0016 K*- K0 pi+ PHSP; -0.00132 pi+ pi- p+ anti-p- PHSP; -0.00027 Lambda0 anti-Lambda0 PHSP; -0.00000 K0 anti-K0 PHSP; -0.00065 K_S0 K_S0 PHSP; -0.00065 K_L0 K_L0 PHSP; -0.00000 K_S0 K_L0 PHSP; -# -# March 2009 New Modes -0.0020 omega omega PHSP; -0.0007 anti-K0 K+ pi- PHSP; -0.0007 K0 K- pi+ PHSP; -0.00163 K+ K- phi PHSP; -0.0012 p+ anti-n0 pi- PHSP; -# -0.73063 rndmflav anti-rndmflav PYTHIA 12; -Enddecay -# -Decay psi(3770) -0.3610 D+ D- VSS; -0.4870 D0 anti-D0 VSS; -0.00193 J/psi pi+ pi- PHSP; -0.0008 J/psi pi0 pi0 PHSP; -0.0073 gamma chi_c0 PHSP; -0.0029 gamma chi_c1 PHSP; -0.13907 rndmflav anti-rndmflav PYTHIA 12; -Enddecay -# -# Dummy decay -Decay X_1(3872) -1.000 mu+ mu- PHSP; -Enddecay -# -# -# bb= Mesons Updated to PDG 2008 -# -Decay eta_b -1.000 rndmflav anti-rndmflav PYTHIA 12; -Enddecay -# -Decay Upsilon -0.0238 e+ e- PHOTOS VLL; -0.0248 mu+ mu- PHOTOS VLL; -0.0260 tau+ tau- VLL; -0.01500 d anti-d PYTHIA 32; -0.04500 u anti-u PYTHIA 32; -0.01500 s anti-s PYTHIA 32; -0.04500 c anti-c PYTHIA 32; -0.77640 g g g PYTHIA 4; -0.02900 gamma g g PYTHIA 4; -Enddecay -# -Decay Upsilon(2S) -0.0191 e+ e- PHOTOS VLL; -0.0193 mu+ mu- PHOTOS VLL; -0.0200 tau+ tau- VLL; -0.1880 Upsilon pi+ pi- PHSP; -0.0900 Upsilon pi0 pi0 PHSP; -# V-> gamma S Partial wave (L,S)=(0,1) -0.0430 gamma chi_b0 HELAMP 1. 0. +1. 0.; -# V-> gamma V Partial wave (L,S)=(0,1) -0.0660 gamma chi_b1 HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -# V-> gamma T Partial wave (L,S)=(0,1) -0.0670 gamma chi_b2 HELAMP 2.4494897 0. 1.7320508 0. 1. 0. - 1. 0. 1.7320508 0. 2.4494897 0.; -0.00500 d anti-d PYTHIA 32; -0.02000 u anti-u PYTHIA 32; -0.00500 s anti-s PYTHIA 32; -0.02000 c anti-c PYTHIA 32; -0.42160 g g g PYTHIA 4; -0.01600 gamma g g PYTHIA 4; -Enddecay -# -Decay Upsilon(3S) -0.0181 e+ e- PHOTOS VLL; -0.0218 mu+ mu- PHOTOS VLL; -0.0229 tau+ tau- VLL; -0.0448 Upsilon pi+ pi- PHSP; -0.0206 Upsilon pi0 pi0 PHSP; -0.0280 Upsilon(2S) pi+ pi- PHSP; -0.0200 Upsilon(2S) pi0 pi0 PHSP; -0.0500 Upsilon(2S) gamma gamma PHSP; -# V-> gamma S Partial wave (L,S)=(0,1) -0.0590 gamma chi_b0(2P) HELAMP 1. 0. 1. 0.; -# V-> gamma V Partial wave (L,S)=(0,1) -0.1260 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -# V-> gamma T Partial wave (L,S)=(0,1) -0.1310 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. - 1. 0. 1.7320508 0. 2.4494897 0.; -0.00700 d anti-d PYTHIA 32; -0.02800 u anti-u PYTHIA 32; -0.00700 s anti-s PYTHIA 32; -0.02800 c anti-c PYTHIA 32; -0.37780 g g g PYTHIA 4; -0.01000 gamma g g PYTHIA 4; -Enddecay -# - -Decay Upsilon(5S) -0.5 B+ B- PHSP; -0.5 g g g PYTHIA 4; -Enddecay - -Decay chi_b0 -# S-> gamma V Partial wave (L,S)=(0,0) -0.0500 gamma Upsilon HELAMP 1. 0. 1. 0.; -0.9500 rndmflav anti-rndmflav PYTHIA 12; -Enddecay -# -Decay chi_b1 -# V-> gamma V Partial wave (L,S)=(0,1) -0.3500 gamma Upsilon HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -0.6500 g g PYTHIA 32; -Enddecay -# -Decay chi_b2 -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. -0.2200 gamma Upsilon PHSP; -#0.2200 gamma Upsilon HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -0.7800 g g PYTHIA 32; -Enddecay -# -Decay chi_b0(2P) -# S-> gamma V Partial wave (L,S)=(0,0) -0.0090 gamma Upsilon HELAMP 1. 0. 1. 0.; -0.0460 gamma Upsilon(2S) HELAMP 1. 0. 1. 0.; -# S-> gamma V Partial wave (L,S)=(0,0) -0.00150 gamma Upsilon_1(1D) HELAMP 1. 0. 1. 0.; -0.94350 g g PYTHIA 32; -Enddecay -# -Decay chi_b1(2P) -# V-> gamma V Partial wave (L,S)=(0,1) -0.0850 gamma Upsilon HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -0.2100 gamma Upsilon(2S) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -# V-> gamma V Partial wave (L,S)=(0,1) -0.0097 gamma Upsilon_1(1D) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -# V-> gamma T Partial wave (L,S)=(0,1) -0.0236 gamma Upsilon_2(1D) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. - 1. 0. 1.7320508 0. 2.4494897 0.; -0.6717 g g PYTHIA 32; -Enddecay -# -Decay chi_b2(2P) -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. -0.0710 gamma Upsilon PHSP; -#0.0710 gamma Upsilon HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -0.1620 gamma Upsilon(2S) PHSP; -#0.1620 gamma Upsilon(2S) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. -0.00023 gamma Upsilon_1(1D) PHSP; -#0.00023 gamma Upsilon_1(1D) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -# T -> gamma T Partial wave (L,S)=(0,2) -0.00290 gamma Upsilon_2(1D) PHSP; -#0.00290 gamma Upsilon_2(1D) HELAMP -1. 0. -1.2247449 0. -# -1.2247449 0. -1. 0. -# 1. 0. 1.2247449 0. -# 1.2247449 0. 1. 0.; -# spin 3 not yet in HELAMP. -0.01420 gamma Upsilon_3(1D) PYTHIA 0; -# T-> gamma 3 Partial wave (L,S)=(0,2) -#0.01420 gamma Upsilon_3(1D) HELAMP 3.8729833 0. 3.1622777 0. -# 2.4494897 0. 1.7320508. 0. 1. 0. -# 1. 0. 1.7320508 0. 2.4494897 0. -# 3.1622777 0. 3.8729833 0.; -0.74967 g g PYTHIA 32; -Enddecay -# -Decay h_b -1.00000 g g PYTHIA 32; -Enddecay - -Decay chi_b0(3P) -#see Kwong and Rosner, PRD 38,279 (1988) -# S-> gamma V Partial wave (L,S)=(0,0) -0.01700 gamma Upsilon(3S) HELAMP 1. 0. 1. 0.; -# S-> gamma V Partial wave (L,S)=(0,0) -0.00400 gamma Upsilon_1(2D) HELAMP 1. 0. 1. 0.; -0.97900 g g PYTHIA 32; -Enddecay - -Decay chi_b1(3P) -#see Kwong and Rosner, PRD 38,279 (1988) -# V-> gamma V Partial wave (L,S)=(0,1) -0.15000 gamma Upsilon(3S) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -# V-> gamma T Partial wave (L,S)=(0,1) -0.03100 gamma Upsilon_2(2D) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. - 1. 0. 1.7320508 0. 2.4494897 0.; -# V-> gamma V Partial wave (L,S)=(0,1) -0.01300 gamma Upsilon_1(2D) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -0.80600 g g PYTHIA 32; -Enddecay - -Decay chi_b2(3P) -#see Kwong and Rosner, PRD 38,279 (1988) -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. -0.08700 gamma Upsilon(3S) PHSP; -0.00000 gamma Upsilon(2S) PHSP; -0.00000 gamma Upsilon PHSP; -#0.08700 gamma Upsilon(3S) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -#0.00000 gamma Upsilon(2S) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -#0.00000 gamma Upsilon HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -# spin 3 not yet in HELAMP -0.02200 Upsilon_3(2D) gamma PHSP; -# T -> gamma 3 Partial wave (L,S)=(0,2) -#0.02200 gamma Upsilon_3(2D) HELAMP 3.8729833 0. 3.1622777 0. -# 2.4494897 0. 1.7320508. 0. 1. 0. -# 1. 0. 1.7320508 0. 2.4494897 0. -# 3.1622777 0. 3.8729833 0.; -# T -> gamma T Partial wave (L,S)=(0,2) -0.00400 gamma Upsilon_2(2D) PHSP; -#0.00400 gamma Upsilon_2(2D) HELAMP -1. 0. -1.2247449 0. -# -1.2247449 0. -1. 0. -# 1. 0. 1.2247449 0. -# 1.2247449 0. 1. 0.; -# T-> gamma V Partial wave (L,S)=(0,2) -0.00040 gamma Upsilon_1(2D) PHSP; -#0.00040 gamma Upsilon_1(2D) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -0.88660 g g PYTHIA 32; -Enddecay - -Decay Upsilon_1(1D) -#see Kwong and Rosner, PRD 38,279 (1988) -0.00140 Upsilon pi+ pi- PHSP; -0.00070 Upsilon pi0 pi0 PHSP; -# V-> gamma S Partial wave (L,S)=(0,1) -0.60200 gamma chi_b0 HELAMP 1. 0. +1. 0.; -# V-> gamma V Partial wave (L,S)=(0,1) -0.31800 gamma chi_b1 HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -# V-> gamma T Partial wave (L,S)=(0,1) -0.02600 gamma chi_b2 HELAMP 2.4494897 0. 1.7320508 0. 1. 0. - 1. 0. 1.7320508 0. 2.4494897 0.; -0.05190 g g g PYTHIA 4; -Enddecay - -Decay Upsilon_2(1D) -#see Kwong and Rosner, PRD 38,279 (1988) -0.00140 Upsilon pi+ pi- PHSP; -0.00070 Upsilon pi0 pi0 PHSP; -# T-> gamma T Partial wave (L,S)=(0,2) -0.20300 gamma chi_b2 PHSP; -#0.20300 gamma chi_b2 HELAMP -1. 0. -1.2247449 0. -# -1.2247449 0. -1. 0. -# 1. 0. 1.2247449 0. -# 1.2247449 0. 1. 0.; -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. -0.78500 gamma chi_b1 PHSP; -#0.78500 gamma chi_b1 HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -0.00990 g g g PYTHIA 4; -Enddecay - -Decay Upsilon_3(1D) -#see Kwong and Rosner, PRD 38,279 (1988) -0.00200 Upsilon pi+ pi- PHSP; -0.00100 Upsilon pi0 pi0 PHSP; -0.95400 chi_b2 gamma PHSP; -0.04300 g g g PYTHIA 4; -Enddecay - -Decay Upsilon_1(2D) -#see Kwong and Rosner, PRD 38,279 (1988) -0.00000 Upsilon pi+ pi- PHSP; -0.00000 Upsilon pi0 pi0 PHSP; -0.00000 Upsilon(2S) pi+ pi- PHSP; -0.00000 Upsilon(2S) pi0 pi0 PHSP; -# V-> gamma S Partial wave (L,S)=(0,1) -0.51000 gamma chi_b0(2P) HELAMP 1. 0. +1. 0.; -# V-> gamma V Partial wave (L,S)=(0,1) -0.26000 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -# V-> gamma T Partial wave (L,S)=(0,1) -0.01400 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. - 1. 0. 1.7320508 0. 2.4494897 0.; -0.21600 g g g PYTHIA 4; -Enddecay - -Decay Upsilon_2(2D) -#see Kwong and Rosner, PRD 38,279 (1988) -0.00000 Upsilon pi+ pi- PHSP; -0.00000 Upsilon pi0 pi0 PHSP; -0.00000 Upsilon(2S) pi+ pi- PHSP; -0.00000 Upsilon(2S) pi0 pi0 PHSP; -# T-> gamma T Partial wave (L,S)=(0,2) -0.04000 gamma chi_b2(2P) PHSP; -#0.04000 gamma chi_b2(2P) HELAMP -1. 0. -1.2247449 0. -# -1.2247449 0. -1. 0. -# 1. 0. 1.2247449 0. -# 1.2247449 0. 1. 0.; -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. -0.13000 gamma chi_b1(2P) PHSP; -#0.13000 gamma chi_b1(2P) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -0.83000 g g g PYTHIA 4; -Enddecay - -Decay Upsilon_3(2D) -#see Kwong and Rosner, PRD 38,279 (1988) -0.00000 Upsilon pi+ pi- PHSP; -0.00000 Upsilon pi0 pi0 PHSP; -0.00000 Upsilon(2S) pi+ pi- PHSP; -0.00000 Upsilon(2S) pi0 pi0 PHSP; -0.72000 chi_b2(2P) gamma PHSP; -0.28000 g g g PYTHIA 4; -Enddecay - -Decay h_b(2P) -1.00000 g g PYTHIA 32; -Enddecay -Decay h_b(3P) -1.00000 g g PYTHIA 32; -Enddecay -Decay eta_b2(1D) -1.00000 g g PYTHIA 32; -Enddecay -Decay eta_b2(2D) -1.00000 g g PYTHIA 32; -Enddecay -# -# Charm Baryons -# -Decay Lambda_c+ -0.01800 e+ nu_e Lambda0 PYTHIA 42; -0.00500 e+ nu_e Sigma0 PYTHIA 42; -0.00500 e+ nu_e Sigma*0 PYTHIA 42; -0.00300 e+ nu_e n0 PYTHIA 42; -0.00200 e+ nu_e Delta0 PYTHIA 42; -0.00600 e+ nu_e p+ pi- PYTHIA 42; -0.00600 e+ nu_e n0 pi0 PYTHIA 42; -0.01800 mu+ nu_mu Lambda0 PYTHIA 42; -0.00500 mu+ nu_mu Sigma0 PYTHIA 42; -0.00500 mu+ nu_mu Sigma*0 PYTHIA 42; -0.00300 mu+ nu_mu n0 PYTHIA 42; -0.00200 mu+ nu_mu Delta0 PYTHIA 42; -0.00600 mu+ nu_mu p+ pi- PYTHIA 42; -0.00600 mu+ nu_mu n0 pi0 PYTHIA 42; -0.00660 Delta++ K- PYTHIA 0; -0.02500 Delta++ K*- PYTHIA 0; -0.02300 p+ anti-K0 PYTHIA 0; -0.04000 p+ anti-K*0 PYTHIA 0; -0.00500 Delta+ anti-K0 PYTHIA 0; -0.00500 Delta+ anti-K*0 PYTHIA 0; -0.00580 Lambda0 pi+ PYTHIA 0; -0.00500 Lambda0 rho+ PYTHIA 0; -0.00550 Sigma0 pi+ PYTHIA 0; -0.00400 Sigma0 rho+ PYTHIA 0; -0.00400 Sigma*0 pi+ PYTHIA 0; -0.00400 Sigma*0 rho+ PYTHIA 0; -0.00400 Sigma+ pi0 PYTHIA 0; -0.00200 Sigma+ eta PYTHIA 0; -0.00200 Sigma+ eta' PYTHIA 0; -0.00400 Sigma+ rho0 PYTHIA 0; -0.00400 Sigma+ omega PYTHIA 0; -0.00300 Sigma*+ pi0 PYTHIA 0; -0.00200 Sigma*+ eta PYTHIA 0; -0.00300 Sigma*+ rho0 PYTHIA 0; -0.00300 Sigma*+ omega PYTHIA 0; -0.00200 Xi0 K+ PYTHIA 0; -0.00200 Xi0 K*+ PYTHIA 0; -0.00200 Xi*0 K+ PYTHIA 0; -0.00100 Delta++ pi- PYTHIA 0; -0.00100 Delta++ rho- PYTHIA 0; -0.00200 p+ pi0 PYTHIA 0; -0.00100 p+ eta PYTHIA 0; -0.00100 p+ eta' PYTHIA 0; -0.00200 p+ rho0 PYTHIA 0; -0.00200 p+ omega PYTHIA 0; -0.00130 p+ phi PYTHIA 0; -0.00180 p+ f_0 PYTHIA 0; -0.00100 Delta+ pi0 PYTHIA 0; -0.00100 Delta+ eta PYTHIA 0; -0.00100 Delta+ eta' PYTHIA 0; -0.00100 Delta+ rho0 PYTHIA 0; -0.00100 Delta+ omega PYTHIA 0; -0.00300 n0 pi+ PYTHIA 0; -0.00300 n0 rho+ PYTHIA 0; -0.00300 Delta0 pi+ PYTHIA 0; -0.00300 Delta0 rho+ PYTHIA 0; -0.00500 Lambda0 K+ PYTHIA 0; -0.00500 Lambda0 K*+ PYTHIA 0; -0.00200 Sigma0 K+ PYTHIA 0; -0.00200 Sigma0 K*+ PYTHIA 0; -0.00100 Sigma*0 K+ PYTHIA 0; -0.00100 Sigma*0 K*+ PYTHIA 0; -0.00200 Sigma+ K0 PYTHIA 0; -0.00200 Sigma+ K*0 PYTHIA 0; -0.00100 Sigma*+ K0 PYTHIA 0; -0.00100 Sigma*+ K*0 PYTHIA 0; -0.13000 u anti-d d su_0 PYTHIA 13; -0.05700 u anti-d d su_1 PYTHIA 13; -0.03500 u anti-s d su_0 PYTHIA 13; -0.03500 u anti-d d ud_0 PYTHIA 13; -0.09500 s uu_1 PYTHIA 13; -0.14000 u su_0 PYTHIA 13; -0.14000 u su_1 PYTHIA 13; -0.03000 d uu_1 PYTHIA 13; -0.01500 u ud_0 PYTHIA 13; -0.01500 u ud_1 PYTHIA 13; -Enddecay -CDecay anti-Lambda_c- -# -Decay Xi_c0 -1.000 PYTHIA 84; -Enddecay -Decay anti-Xi_c0 -1.000 PYTHIA 84; -Enddecay -# -Decay c-hadron -0.08000 e+ nu_e s specflav PYTHIA 42; -0.08000 mu+ nu_mu s specflav PYTHIA 42; -0.76000 u anti-d s specflav PYTHIA 11; -0.08000 u anti-s s specflav PYTHIA 11; -Enddecay -CDecay anti-c-hadron -# -Decay Sigma_c0 -1.0000 Lambda_c+ pi- PHSP; -Enddecay -Decay anti-Sigma_c0 -1.0000 anti-Lambda_c- pi+ PHSP; -Enddecay -# -Decay Sigma_c+ -1.0000 Lambda_c+ pi0 PHSP; -Enddecay -Decay anti-Sigma_c- -1.0000 anti-Lambda_c- pi0 PHSP; -Enddecay -# -Decay Xi_c+ -1.000 PYTHIA 84; -Enddecay -Decay anti-Xi_c- -1.000 PYTHIA 84; -Enddecay -# -Decay Sigma_c++ -1.0000 Lambda_c+ pi+ PHSP; -Enddecay -Decay anti-Sigma_c-- -1.0000 anti-Lambda_c- pi- PHSP; -Enddecay -# -Decay Xi'_c+ -0.1000 Lambda0 K- pi+ pi+ PHSP; -0.0800 Sigma0 K- pi+ pi+ PHSP; -0.8200 gamma Xi_c+ PHSP; -Enddecay -Decay anti-Xi'_c- -0.1000 anti-Lambda0 K+ pi- pi- PHSP; -0.0800 anti-Sigma0 K+ pi- pi- PHSP; -0.8200 gamma anti-Xi_c- PHSP; -Enddecay -# -Decay Xi'_c0 -1.0000 gamma Xi_c0 PHSP; -Enddecay -Decay anti-Xi'_c0 -1.0000 gamma anti-Xi_c0 PHSP; -Enddecay -# -# Light Baryons -# Lambda0 updated Feb 2009 -Decay Lambda0 -0.638710 p+ pi- PHSP; -0.357710 n0 pi0 PHSP; -0.001750 n0 gamma PHSP; -0.000840 p+ pi- gamma PHSP; -0.000832 p+ e- anti-nu_e PHOTOS PHSP; -0.000158 p+ mu- anti-nu_mu PHOTOS PHSP; -Enddecay -# -Decay anti-Lambda0 -0.638710 anti-p- pi+ PHSP; -0.357710 anti-n0 pi0 PHSP; -0.001750 anti-n0 gamma PHSP; -0.000840 anti-p- pi+ gamma PHSP; -0.000832 anti-p- e+ nu_e PHOTOS PHSP; -0.000158 anti-p- mu+ nu_mu PHOTOS PHSP; -Enddecay -# -Decay Lambda(1405)0 -0.3333 Sigma+ pi- PHSP; -0.3333 Sigma- pi+ PHSP; -0.3333 Sigma0 pi0 PHSP; -Enddecay -# -Decay anti-Lambda(1405)0 -0.3333 anti-Sigma+ pi- PHSP; -0.3333 anti-Sigma- pi+ PHSP; -0.3333 anti-Sigma0 pi0 PHSP; -Enddecay -# -Decay Lambda(1520)0 -0.23 p+ K- PHSP; -0.23 n0 anti-K0 PHSP; -0.14 Sigma+ pi- PHSP; -0.14 Sigma- pi+ PHSP; -0.14 Sigma0 pi0 PHSP; -0.0333 Lambda0 pi0 pi0 PHSP; -0.0667 Lambda0 pi+ pi- PHSP; -0.003 Sigma+ pi- pi0 PHSP; -0.003 Sigma- pi+ pi0 PHSP; -0.001 Sigma0 pi0 pi0 PHSP; -0.002 Sigma0 pi+ pi- PHSP; -0.011 Lambda0 gamma PHSP; -Enddecay -# -Decay anti-Lambda(1520)0 -0.23 anti-p- K+ PHSP; -0.23 anti-n0 K0 PHSP; -0.14 anti-Sigma- pi+ PHSP; -0.14 anti-Sigma+ pi- PHSP; -0.14 anti-Sigma0 pi0 PHSP; -0.0333 anti-Lambda0 pi0 pi0 PHSP; -0.0667 anti-Lambda0 pi+ pi- PHSP; -0.003 anti-Sigma+ pi- pi0 PHSP; -0.003 anti-Sigma- pi+ pi0 PHSP; -0.001 anti-Sigma0 pi0 pi0 PHSP; -0.002 anti-Sigma0 pi+ pi- PHSP; -0.011 anti-Lambda0 gamma PHSP; -Enddecay -# -Decay Lambda(1600)0 -0.176 p+ K- PHSP; -0.176 n0 anti-K0 PHSP; -0.216 Sigma+ pi- PHSP; -0.216 Sigma- pi+ PHSP; -0.216 Sigma0 pi0 PHSP; -Enddecay -# -Decay anti-Lambda(1600)0 -0.176 anti-p- K+ PHSP; -0.176 anti-n0 K0 PHSP; -0.216 anti-Sigma+ pi- PHSP; -0.216 anti-Sigma- pi+ PHSP; -0.216 anti-Sigma0 pi0 PHSP; -Enddecay -# -Decay Lambda(1670)0 -0.10 p+ K- PHSP; -0.10 n0 anti-K0 PHSP; -0.16 Sigma+ pi- PHSP; -0.16 Sigma- pi+ PHSP; -0.16 Sigma0 pi0 PHSP; -0.32 Lambda0 eta PHSP; -Enddecay -# -Decay anti-Lambda(1670)0 -0.10 anti-p- K+ PHSP; -0.10 anti-n0 K0 PHSP; -0.16 anti-Sigma+ pi- PHSP; -0.16 anti-Sigma- pi+ PHSP; -0.16 anti-Sigma0 pi0 PHSP; -0.32 anti-Lambda0 eta PHSP; -Enddecay -# -Decay Lambda(1690)0 -0.125 p+ K- PHSP; -0.125 n0 anti-K0 PHSP; -0.10 Sigma+ pi- PHSP; -0.10 Sigma- pi+ PHSP; -0.10 Sigma0 pi0 PHSP; -0.0833 Lambda0 pi0 pi0 PHSP; -0.1667 Lambda0 pi+ pi- PHSP; -0.067 Sigma+ pi- pi0 PHSP; -0.067 Sigma- pi+ pi0 PHSP; -0.022 Sigma0 pi0 pi0 PHSP; -0.044 Sigma0 pi+ pi- PHSP; -Enddecay -# -Decay anti-Lambda(1690)0 -0.125 anti-p- K+ PHSP; -0.125 anti-n0 K0 PHSP; -0.10 anti-Sigma+ pi- PHSP; -0.10 anti-Sigma- pi+ PHSP; -0.10 anti-Sigma0 pi0 PHSP; -0.0833 anti-Lambda0 pi0 pi0 PHSP; -0.1667 anti-Lambda0 pi+ pi- PHSP; -0.067 anti-Sigma+ pi- pi0 PHSP; -0.067 anti-Sigma- pi+ pi0 PHSP; -0.022 anti-Sigma0 pi0 pi0 PHSP; -0.044 anti-Sigma0 pi+ pi- PHSP; -Enddecay -# -Decay Lambda(1800)0 -0.165 p+ K- PHSP; -0.165 n0 anti-K0 PHSP; -0.08 Sigma+ pi- PHSP; -0.08 Sigma- pi+ PHSP; -0.08 Sigma0 pi0 PHSP; -0.003 Sigma*+ pi- PHSP; -0.003 Sigma*- pi+ PHSP; -0.004 Sigma*0 pi0 PHSP; -0.21 p+ K*- PHSP; -0.21 n0 anti-K*0 PHSP; -Enddecay -# -Decay anti-Lambda(1800)0 -0.165 anti-p- K+ PHSP; -0.165 anti-n0 K0 PHSP; -0.08 anti-Sigma+ pi- PHSP; -0.08 anti-Sigma- pi+ PHSP; -0.08 anti-Sigma0 pi0 PHSP; -0.003 anti-Sigma*+ pi- PHSP; -0.003 anti-Sigma*- pi+ PHSP; -0.004 anti-Sigma*0 pi0 PHSP; -0.21 anti-p- K*+ PHSP; -0.21 anti-n0 K*0 PHSP; -Enddecay -# -Decay Lambda(1810)0 -0.165 p+ K- PHSP; -0.165 n0 anti-K0 PHSP; -0.08 Sigma+ pi- PHSP; -0.08 Sigma- pi+ PHSP; -0.08 Sigma0 pi0 PHSP; -0.003 Sigma*+ pi- PHSP; -0.003 Sigma*- pi+ PHSP; -0.004 Sigma*0 pi0 PHSP; -0.21 p+ K*- PHSP; -0.21 n0 anti-K*0 PHSP; -Enddecay -# -Decay anti-Lambda(1810)0 -0.165 anti-p- K+ PHSP; -0.165 anti-n0 K0 PHSP; -0.08 anti-Sigma+ pi- PHSP; -0.08 anti-Sigma- pi+ PHSP; -0.08 anti-Sigma0 pi0 PHSP; -0.003 anti-Sigma*+ pi- PHSP; -0.003 anti-Sigma*- pi+ PHSP; -0.004 anti-Sigma*0 pi0 PHSP; -0.21 anti-p- K*+ PHSP; -0.21 anti-n0 K*0 PHSP; -Enddecay -# -Decay Lambda(1820)0 -0.34 p+ K- PHSP; -0.34 n0 anti-K0 PHSP; -0.06 Sigma+ pi- PHSP; -0.06 Sigma- pi+ PHSP; -0.06 Sigma0 pi0 PHSP; -0.04 Sigma*+ pi- PHSP; -0.04 Sigma*- pi+ PHSP; -0.04 Sigma*0 pi0 PHSP; -0.01 Lambda0 eta PHSP; -0.003 Sigma+ pi- pi0 PHSP; -0.004 Sigma- pi+ pi0 PHSP; -0.001 Sigma0 pi0 pi0 PHSP; -0.002 Sigma0 pi+ pi- PHSP; -Enddecay -# -Decay anti-Lambda(1820)0 -0.34 anti-p- K+ PHSP; -0.34 anti-n0 K0 PHSP; -0.06 anti-Sigma+ pi- PHSP; -0.06 anti-Sigma- pi+ PHSP; -0.06 anti-Sigma0 pi0 PHSP; -0.04 anti-Sigma*+ pi- PHSP; -0.04 anti-Sigma*- pi+ PHSP; -0.04 anti-Sigma*0 pi0 PHSP; -0.01 anti-Lambda0 eta PHSP; -0.003 anti-Sigma+ pi- pi0 PHSP; -0.004 anti-Sigma- pi+ pi0 PHSP; -0.001 anti-Sigma0 pi0 pi0 PHSP; -0.002 anti-Sigma0 pi+ pi- PHSP; -Enddecay -# -Decay Lambda(1830)0 -0.05 p+ K- PHSP; -0.05 n0 anti-K0 PHSP; -0.24 Sigma+ pi- PHSP; -0.24 Sigma- pi+ PHSP; -0.24 Sigma0 pi0 PHSP; -0.06 Sigma*+ pi- PHSP; -0.06 Sigma*- pi+ PHSP; -0.06 Sigma*0 pi0 PHSP; -Enddecay -# -Decay anti-Lambda(1830)0 -0.05 anti-p- K+ PHSP; -0.05 anti-n0 K0 PHSP; -0.24 anti-Sigma+ pi- PHSP; -0.24 anti-Sigma- pi+ PHSP; -0.24 anti-Sigma0 pi0 PHSP; -0.06 anti-Sigma*+ pi- PHSP; -0.06 anti-Sigma*- pi+ PHSP; -0.06 anti-Sigma*0 pi0 PHSP; -Enddecay -# -# -Decay Sigma(1660)0 -0.07 p+ K- PHSP; -0.07 n0 anti-K0 PHSP; -0.16 Lambda0 pi0 PHSP; -0.35 Sigma+ pi- PHSP; -0.35 Sigma- pi+ PHSP; -Enddecay -# -Decay anti-Sigma(1660)0 -0.07 anti-p- K+ PHSP; -0.07 anti-n0 K0 PHSP; -0.16 anti-Lambda0 pi0 PHSP; -0.35 anti-Sigma+ pi- PHSP; -0.35 anti-Sigma- pi+ PHSP; -Enddecay -# -Decay Sigma(1670)0 -0.07 p+ K- PHSP; -0.07 n0 anti-K0 PHSP; -0.16 Lambda0 pi0 PHSP; -0.35 Sigma+ pi- PHSP; -0.35 Sigma- pi+ PHSP; -Enddecay -# -Decay anti-Sigma(1670)0 -0.07 anti-p- K+ PHSP; -0.07 anti-n0 K0 PHSP; -0.16 anti-Lambda0 pi0 PHSP; -0.35 anti-Sigma+ pi- PHSP; -0.35 anti-Sigma- pi+ PHSP; -Enddecay -# -Decay Sigma(1775)0 -0.215 p+ K- PHSP; -0.215 n0 anti-K0 PHSP; -0.20 Lambda0 pi0 PHSP; -0.02 Sigma+ pi- PHSP; -0.02 Sigma- pi+ PHSP; -0.055 Sigma*+ pi- PHSP; -0.055 Sigma*- pi+ PHSP; -0.22 Lambda(1520)0 pi0 PHSP; -Enddecay -# -Decay anti-Sigma(1775)0 -0.215 anti-p- K+ PHSP; -0.215 anti-n0 K0 PHSP; -0.20 anti-Lambda0 pi0 PHSP; -0.02 anti-Sigma+ pi- PHSP; -0.02 anti-Sigma- pi+ PHSP; -0.055 anti-Sigma*+ pi- PHSP; -0.055 anti-Sigma*- pi+ PHSP; -0.22 anti-Lambda(1520)0 pi0 PHSP; -Enddecay -Decay Sigma+ -0.5157 p+ pi0 PHSP; -0.4831 n0 pi+ PHSP; -0.0012 p+ gamma PHSP; -Enddecay -Decay anti-Sigma- -0.5157 anti-p- pi0 PHSP; -0.4831 anti-n0 pi- PHSP; -0.0012 anti-p- gamma PHSP; -Enddecay -# -Decay Delta+ -0.6630 p+ pi0 PHSP; -0.3310 n0 pi+ PHSP; -0.0060 p+ gamma PHSP; -Enddecay -Decay anti-Delta- -0.6630 anti-p- pi0 PHSP; -0.3310 anti-n0 pi- PHSP; -0.0060 anti-p- gamma PHSP; -Enddecay -# -Decay Delta++ -1.0000 p+ pi+ PHSP; -Enddecay -Decay anti-Delta-- -1.0000 anti-p- pi- PHSP; -Enddecay -# -Decay Xi*0 -0.3330 Xi0 pi0 PHSP; -0.6670 Xi- pi+ PHSP; -Enddecay -Decay anti-Xi*0 -0.3330 anti-Xi0 pi0 PHSP; -0.6670 anti-Xi+ pi- PHSP; -Enddecay -# -Decay Delta0 -0.3310 p+ pi- PHSP; -0.6630 n0 pi0 PHSP; -0.0060 n0 gamma PHSP; -Enddecay -Decay anti-Delta0 -0.3310 anti-p- pi+ PHSP; -0.6630 anti-n0 pi0 PHSP; -0.0060 anti-n0 gamma PHSP; -Enddecay -# -Decay Delta- -1.0000 n0 pi- PHSP; -Enddecay -Decay anti-Delta+ -1.0000 anti-n0 pi+ PHSP; -Enddecay -# -Decay Sigma- -0.484 n0 pi- PHSP; -0.516 anti-p- pi0 PHSP; -Enddecay -Decay anti-Sigma+ -0.484 anti-n0 pi+ PHSP; -0.516 p+ pi0 PHSP; -Enddecay -# -Decay Sigma0 -1.0000 gamma Lambda0 PHSP; -Enddecay -Decay anti-Sigma0 -1.0000 gamma anti-Lambda0 PHSP; -Enddecay -# -Decay Sigma*- -0.8800 Lambda0 pi- PHSP; -0.0600 Sigma0 pi- PHSP; -0.0600 Sigma- pi0 PHSP; -Enddecay -Decay anti-Sigma*+ -0.8800 anti-Lambda0 pi+ PHSP; -0.0600 anti-Sigma0 pi+ PHSP; -0.0600 anti-Sigma+ pi0 PHSP; -Enddecay -# -Decay Sigma*+ -0.8800 Lambda0 pi+ PHSP; -0.0600 Sigma+ pi0 PHSP; -0.0600 Sigma0 pi+ PHSP; -Enddecay -Decay anti-Sigma*- -0.8800 anti-Lambda0 pi- PHSP; -0.0600 anti-Sigma- pi0 PHSP; -0.0600 anti-Sigma0 pi- PHSP; -Enddecay -# -Decay Sigma*0 -0.8800 Lambda0 pi0 PHSP; -0.0600 Sigma+ pi- PHSP; -0.0600 Sigma- pi+ PHSP; -Enddecay -Decay anti-Sigma*0 -0.8800 anti-Lambda0 pi0 PHSP; -0.0600 anti-Sigma- pi+ PHSP; -0.0600 anti-Sigma+ pi- PHSP; -Enddecay -# -Decay Xi0 -1.0000 Lambda0 pi0 PHSP; -Enddecay -Decay anti-Xi0 -1.0000 anti-Lambda0 pi0 PHSP; -Enddecay -# -Decay Xi- -1.0000 Lambda0 pi- PHSP; -Enddecay -Decay anti-Xi+ -1.0000 anti-Lambda0 pi+ PHSP; -Enddecay -# -Decay Xi*- -0.6670 Xi0 pi- PHSP; -0.3330 Xi- pi0 PHSP; -Enddecay -Decay anti-Xi*+ -0.6670 anti-Xi0 pi+ PHSP; -0.3330 anti-Xi+ pi0 PHSP; -Enddecay -# -Decay Omega- -0.6780 Lambda0 K- PHSP; -0.2360 Xi0 pi- PHSP; -0.0860 Xi- pi0 PHSP; -Enddecay -Decay anti-Omega+ -0.6780 anti-Lambda0 K+ PHSP; -0.2360 anti-Xi0 pi+ PHSP; -0.0860 anti-Xi+ pi0 PHSP; -Enddecay -# -# -Decay Sigma_c*0 -1.0000 Lambda_c+ pi- PHSP; -Enddecay -CDecay anti-Sigma_c*0 -# -Decay Sigma_c*+ -1.0000 Lambda_c+ pi0 PHSP; -Enddecay -CDecay anti-Sigma_c*- -# -Decay Sigma_c*++ -1.0000 Lambda_c+ pi+ PHSP; -Enddecay -CDecay anti-Sigma_c*-- -# -Decay Xi_c*0 -0.5000 Xi_c0 pi0 PHSP; -0.5000 Xi_c0 gamma PHSP; -Enddecay -CDecay anti-Xi_c*0 -# -Decay Xi_c*+ -0.5000 Xi_c+ pi0 PHSP; -0.5000 Xi_c+ gamma PHSP; -Enddecay -CDecay anti-Xi_c*- -# -Decay Omega_c0 -1.00000 PYTHIA 84; -Enddecay -# -CDecay anti-Omega_c0 -# -Decay Omega_c*0 -1.0000 Omega_c0 gamma PHSP; -Enddecay -# -CDecay anti-Omega_c*0 -# -Decay Xu0 -# X_u^0 -> u anti-u -# -1.0 u anti-u PYTHIA 11; -Enddecay -Decay Xu+ -# X_u^+ -> u anti-d -# -1.0 u anti-d PYTHIA 11; -Enddecay -CDecay Xu- - -#lange - PYTHIA is making h_c mesons - better add a decay -# channel for them. -Decay h_c -0.01 J/psi pi0 PHSP; -0.5 eta_c gamma PHSP; -0.49 rndmflav anti-rndmflav PYTHIA 12; -Enddecay - -# 12/08/03 RJT Update b-baryon decays... -Decay Lambda_b0 -# SemiLeptonic Decays (inclusive BR = 7.7 +/- 1.8%) - 0.05460 Lambda_c+ e- anti-nu_e PHSP; - 0.01280 Lambda_c(2593)+ e- anti-nu_e PHSP; - 0.00960 Lambda_c(2625)+ e- anti-nu_e PHSP; - 0.00000 Sigma_c0 pi+ e- anti-nu_e PHSP; - 0.00000 Sigma_c+ pi0 e- anti-nu_e PHSP; - 0.00000 Sigma_c++ pi- e- anti-nu_e PHSP; - 0.00000 Sigma_c*0 pi+ e- anti-nu_e PHSP; - 0.00000 Sigma_c*+ pi0 e- anti-nu_e PHSP; - 0.00000 Sigma_c*++ pi- e- anti-nu_e PHSP; -# - 0.05460 Lambda_c+ mu- anti-nu_mu PHSP; - 0.01280 Lambda_c(2593)+ mu- anti-nu_mu PHSP; - 0.00960 Lambda_c(2625)+ mu- anti-nu_mu PHSP; - 0.00000 Sigma_c0 pi+ mu- anti-nu_mu PHSP; - 0.00000 Sigma_c+ pi0 mu- anti-nu_mu PHSP; - 0.00000 Sigma_c++ pi- mu- anti-nu_mu PHSP; - 0.00000 Sigma_c*0 pi+ mu- anti-nu_mu PHSP; - 0.00000 Sigma_c*+ pi0 mu- anti-nu_mu PHSP; - 0.00000 Sigma_c*++ pi- mu- anti-nu_mu PHSP; -# - 0.01720 Lambda_c+ tau- anti-nu_tau PHSP; - 0.00430 Lambda_c(2593)+ tau- anti-nu_tau PHSP; - 0.00320 Lambda_c(2625)+ tau- anti-nu_tau PHSP; - 0.00000 Sigma_c0 pi+ tau- anti-nu_tau PHSP; - 0.00000 Sigma_c+ pi0 tau- anti-nu_tau PHSP; - 0.00000 Sigma_c++ pi- tau- anti-nu_tau PHSP; - 0.00000 Sigma_c*0 pi+ tau- anti-nu_tau PHSP; - 0.00000 Sigma_c*+ pi0 tau- anti-nu_tau PHSP; - 0.00000 Sigma_c*++ pi- tau- anti-nu_tau PHSP; -# Hadronic Decays with Lambda_c+ - 0.04000 Lambda_c+ pi- PHSP; - 0.02200 Lambda_c+ pi- pi+ pi- PHSP; - 0.00055 Lambda_c+ K- PHSP; - 0.02200 Lambda_c+ D_s- PHSP; - 0.04400 Lambda_c+ D_s*- PHSP; - 0.01000 Lambda_c+ rho- PHSP; - 0.02000 Lambda_c+ a_1- PHSP; - 0.02000 Lambda0 K0 pi+ pi+ pi- pi- PHSP; -# Addition PR LHCb 09 Apr 2004, Lambda_b -> Lambda D0b - 0.00080 Lambda0 anti-D0 PHSP; -# Addition PR LHCb 04/07/04 - 0.0000185 p+ K- PHSP; - 0.0000048 p+ pi- PHSP; -# Addition PR LHCb 09 Apr 2004, Lambda_b -> Lambda rho0 and -> Lambda phi - 0.0000050 Lambda0 rho0 PHSP; - 0.0000200 Lambda0 phi PHSP; -# - 0.00047 Lambda0 J/psi PHSP; - 0.00038 Lambda0 psi(2S) PHSP; - 0.00100 Lambda0 eta_c PHSP; - 0.00080 n0 D0 PHSP; -# -# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate - 0.00060 Sigma_c+ pi- PHSP; - 0.00060 Sigma_c0 pi0 PHSP; - 0.00040 Sigma_c0 eta PHSP; - 0.00050 Sigma_c0 eta' PHSP; - 0.00030 Xi_c0 K0 PHSP; - 0.00050 Xi'_c0 K0 PHSP; -# PR LHCb 27 Apr 2004, addition of Pythia decays - 0.44111 anti-u d c ud_0 PYTHIA 48; - 0.09100 anti-u c d ud_0 PYTHIA 13; - 0.08000 anti-c s c ud_0 PYTHIA 13; - 0.01200 anti-u d u ud_0 PYTHIA 42; - 0.01200 anti-c s u ud_0 PYTHIA 42; -# PR LHCb 2 Dec 2004, add Lambda gamma decay mode - 0.000065 Lambda0 gamma HELAMP 1. 0. 0. 0. ; - 0.000059 Lambda(1520)0 gamma PHSP ; - 0.000056 Lambda(1670)0 gamma HELAMP 1. 0. 0. 0. ; - 0.000057 Lambda(1600)0 gamma HELAMP 1. 0. 0. 0. ; -Enddecay - -Decay anti-Lambda_b0 -# SemiLeptonic Decays (inclusive BR = 7.7 +/- 1.8%) - 0.05460 anti-Lambda_c- e+ nu_e PHSP; - 0.01280 anti-Lambda_c(2593)- e+ nu_e PHSP; - 0.00960 anti-Lambda_c(2625)- e+ nu_e PHSP; - 0.00000 anti-Sigma_c0 pi- e+ nu_e PHSP; - 0.00000 anti-Sigma_c- pi0 e+ nu_e PHSP; - 0.00000 anti-Sigma_c-- pi+ e+ nu_e PHSP; - 0.00000 anti-Sigma_c*0 pi- e+ nu_e PHSP; - 0.00000 anti-Sigma_c*- pi0 e+ nu_e PHSP; - 0.00000 anti-Sigma_c*-- pi+ e+ nu_e PHSP; -# - 0.05460 anti-Lambda_c- mu+ nu_mu PHSP; - 0.01280 anti-Lambda_c(2593)- mu+ nu_mu PHSP; - 0.00960 anti-Lambda_c(2625)- mu+ nu_mu PHSP; - 0.00000 anti-Sigma_c0 pi- mu+ nu_mu PHSP; - 0.00000 anti-Sigma_c- pi0 mu+ nu_mu PHSP; - 0.00000 anti-Sigma_c-- pi+ mu+ nu_mu PHSP; - 0.00000 anti-Sigma_c*0 pi- mu+ nu_mu PHSP; - 0.00000 anti-Sigma_c*- pi0 mu+ nu_mu PHSP; - 0.00000 anti-Sigma_c*-- pi+ mu+ nu_mu PHSP; -# - 0.01720 anti-Lambda_c- tau+ nu_tau PHSP; - 0.00430 anti-Lambda_c(2593)- tau+ nu_tau PHSP; - 0.00320 anti-Lambda_c(2625)- tau+ nu_tau PHSP; - 0.00000 anti-Sigma_c0 pi- tau+ nu_tau PHSP; - 0.00000 anti-Sigma_c- pi0 tau+ nu_tau PHSP; - 0.00000 anti-Sigma_c-- pi+ tau+ nu_tau PHSP; - 0.00000 anti-Sigma_c*0 pi- tau+ nu_tau PHSP; - 0.00000 anti-Sigma_c*- pi0 tau+ nu_tau PHSP; - 0.00000 anti-Sigma_c*-- pi+ tau+ nu_tau PHSP; -# Hadronic Decays with anti-Lambda_c- - 0.04000 anti-Lambda_c- pi+ PHSP; - 0.02200 anti-Lambda_c- pi+ pi+ pi- PHSP; - 0.00055 anti-Lambda_c- K+ PHSP; - 0.02200 anti-Lambda_c- D_s+ PHSP; - 0.04400 anti-Lambda_c- D_s*+ PHSP; - 0.01000 anti-Lambda_c- rho+ PHSP; - 0.02000 anti-Lambda_c- a_1+ PHSP; - 0.02000 Lambda0 anti-K0 pi- pi- pi+ pi+ PHSP; - # Addition LHCb PR 09 Apr 2004 Lambda_b -> Lambda D0b - 0.00080 anti-Lambda0 D0 PHSP; - # PR LHCb 04/07/04 Addition - 0.0000185 anti-p- K+ PHSP; - 0.0000048 anti-p- pi+ PHSP; -# Addition PR LHCb 09 Apr 2004, Lambda_b -> Lambda rho0 and -> Lambda phi - 0.0000050 anti-Lambda0 rho0 PHSP; - 0.0000200 anti-Lambda0 phi PHSP; -# - 0.00047 anti-Lambda0 J/psi PHSP; - 0.00038 anti-Lambda0 psi(2S) PHSP; - 0.001000 anti-Lambda0 eta_c PHSP; - 0.00080 anti-n0 anti-D0 PHSP; -# -# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate - 0.00060 anti-Sigma_c- pi+ PHSP; - 0.00060 anti-Sigma_c0 pi0 PHSP; - 0.00040 anti-Sigma_c0 eta PHSP; - 0.00050 anti-Sigma_c0 eta' PHSP; - 0.00030 anti-Xi_c0 anti-K0 PHSP; - 0.00050 anti-Xi'_c0 anti-K0 PHSP; -# PR LHCb 27 Apr 2004, addition of Pythia decays - 0.44111 u anti-d anti-c anti-ud_0 PYTHIA 48; - 0.09100 u anti-c anti-d anti-ud_0 PYTHIA 13; - 0.08000 c anti-s anti-c anti-ud_0 PYTHIA 13; - 0.01200 u anti-d anti-u anti-ud_0 PYTHIA 42; - 0.01200 c anti-s anti-u anti-ud_0 PYTHIA 42; -# PR LHCb 2 Dec 2004 add Lambda gamma - 0.000065 anti-Lambda0 gamma HELAMP 0. 0. 1. 0. ; - 0.000059 anti-Lambda(1520)0 gamma PHSP ; - 0.000056 anti-Lambda(1670)0 gamma HELAMP 0. 0. 1. 0. ; - 0.000057 anti-Lambda(1600)0 gamma HELAMP 0. 0. 1. 0. ; -Enddecay - -Decay Xi_b- -# SemiLeptonic Decays - 0.05460 Xi_c0 e- anti-nu_e PHSP; - 0.05460 Xi_c0 mu- anti-nu_mu PHSP; - 0.02000 Xi_c0 tau- anti-nu_tau PHSP; -# Hadronic Decays with Xi_c0 - 0.00600 Xi_c0 pi- PHSP; - 0.02200 Xi_c0 pi- pi+ pi- PHSP; - 0.00055 Xi_c0 K- PHSP; - 0.02200 Xi_c0 D_s- PHSP; - 0.00047 Xi- J/psi PHSP; -# added by D.Litvintsev 12/8/03: - 0.00038 Xi- psi(2S) PHSP; - 0.00018 D0 Lambda0 pi- PHSP; - 0.00020 Sigma_c0 K- PHSP; - 0.00020 Omega_c0 K- PHSP; -# -# aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.38757 d anti-u d cs_0 PYTHIA 13; -0.16995 d anti-u d cs_1 PYTHIA 13; -0.06335 s anti-u d cs_0 PYTHIA 13; -0.00568 d anti-u s cs_1 PYTHIA 13; -0.00797 d anti-u s cs_0 PYTHIA 13; -0.06148 s anti-c d cs_0 PYTHIA 13; -0.06918 d anti-u d cd_0 PYTHIA 13; -0.03999 s anti-c d cd_0 PYTHIA 13; -0.00865 d anti-u d su_0 PYTHIA 13; -0.00500 s anti-c d su_0 PYTHIA 13; -Enddecay - -Decay anti-Xi_b+ -# SemiLeptonic Decays - 0.05460 anti-Xi_c0 e+ nu_e PHSP; - 0.05460 anti-Xi_c0 mu+ nu_mu PHSP; - 0.02000 anti-Xi_c0 tau+ nu_tau PHSP; -# Hadronic Decays with anti-Xi_c0 - 0.00600 anti-Xi_c0 pi+ PHSP; - 0.02200 anti-Xi_c0 pi+ pi+ pi- PHSP; - 0.00055 anti-Xi_c0 K+ PHSP; - 0.02200 anti-Xi_c0 D_s+ PHSP; - 0.00047 anti-Xi+ J/psi PHSP; -# added by D.Litvintsev 12/8/03: - 0.00038 anti-Xi+ psi(2S) PHSP; - 0.00018 anti-D0 anti-Lambda0 pi+ PHSP; - 0.00020 anti-Sigma_c0 K+ PHSP; - 0.00020 anti-Omega_c0 K+ PHSP; -# aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.38757 u anti-d anti-d anti-cs_0 PYTHIA 13; -0.16995 u anti-d anti-d anti-cs_1 PYTHIA 13; -0.06335 u anti-s anti-d anti-cs_0 PYTHIA 13; -0.00568 u anti-d anti-s anti-cs_1 PYTHIA 13; -0.00797 u anti-d anti-s anti-cs_0 PYTHIA 13; -0.06148 c anti-s anti-d anti-cs_0 PYTHIA 13; -0.06918 u anti-d anti-d anti-cd_0 PYTHIA 13; -0.03999 c anti-s anti-d anti-cd_0 PYTHIA 13; -0.00865 u anti-d anti-d anti-su_0 PYTHIA 13; -0.00500 c anti-s anti-d anti-su_0 PYTHIA 13; -Enddecay - -Decay Xi_b0 -# SemiLeptonic Decays - 0.05460 Xi_c+ e- anti-nu_e PHSP; - 0.05460 Xi_c+ mu- anti-nu_mu PHSP; - 0.02000 Xi_c+ tau- anti-nu_tau PHSP; -# Hadronic Decays with Xi_c+ - 0.00600 Xi_c+ pi- PHSP; - 0.02200 Xi_c+ pi- pi+ pi- PHSP; - 0.00055 Xi_c+ K- PHSP; - 0.02200 Xi_c+ D_s- PHSP; - 0.00047 Xi0 J/psi PHSP; -# added by D.Litvintsev 12/8/03: - 0.00020 D0 Lambda0 PHSP; - 0.00010 Lambda_c+ K- PHSP; - 0.00020 Sigma_c0 anti-K0 PHSP; - 0.00020 Omega_c0 K0 PHSP; -# -# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate - 0.00020 Xi'_c+ pi- PHSP; - 0.00003 Xi_c0 pi0 PHSP; - 0.00015 Xi_c0 eta PHSP; - 0.00004 Xi_c0 eta' PHSP; - 0.00020 Xi'_c0 pi0 PHSP; - 0.00020 Xi'_c0 eta PHSP; - 0.00030 Xi'_c0 eta' PHSP; - 0.00040 Sigma_c+ K- PHSP; -# aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.58591 d anti-u s cu_0 PYTHIA 13; -0.01363 s anti-u s cu_1 PYTHIA 13; -0.09539 s anti-u s cc_1 PYTHIA 13; -0.10900 s anti-u d cu_1 PYTHIA 13; -0.01363 d anti-u d uu_1 PYTHIA 13; -Enddecay - -Decay anti-Xi_b0 - 0.05460 anti-Xi_c- e+ nu_e PHSP; - 0.05460 anti-Xi_c- mu+ nu_mu PHSP; - 0.02000 anti-Xi_c- tau+ nu_tau PHSP; -# Hadronic Decays with anti-Xi_c- - 0.00600 anti-Xi_c- pi+ PHSP; - 0.02200 anti-Xi_c- pi+ pi+ pi- PHSP; - 0.00055 anti-Xi_c- K+ PHSP; - 0.02200 anti-Xi_c- D_s+ PHSP; - 0.00047 anti-Xi0 J/psi PHSP; -# added by D.Litvintsev 12/8/03: - 0.00020 anti-D0 anti-Lambda0 PHSP; - 0.00010 anti-Lambda_c- K+ PHSP; - 0.00020 anti-Sigma_c0 K0 PHSP; - 0.00020 anti-Omega_c0 anti-K0 PHSP; -# -# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate - 0.00020 anti-Xi'_c- pi+ PHSP; - 0.00003 anti-Xi_c0 pi0 PHSP; - 0.00015 anti-Xi_c0 eta PHSP; - 0.00004 anti-Xi_c0 eta' PHSP; - 0.00020 anti-Xi'_c0 pi0 PHSP; - 0.00020 anti-Xi'_c0 eta PHSP; - 0.00030 anti-Xi'_c0 eta' PHSP; - 0.00040 anti-Sigma_c- K+ PHSP; -# aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.58591 u anti-d anti-s anti-cu_0 PYTHIA 13; -0.01363 u anti-s anti-s anti-cu_1 PYTHIA 13; -0.09539 u anti-s anti-s anti-cc_1 PYTHIA 13; -0.10900 u anti-s anti-d anti-cu_1 PYTHIA 13; -0.01363 u anti-d anti-d anti-uu_1 PYTHIA 13; -Enddecay - -# added by D.Litvintsev 12/8/03: -Decay Omega_b- -# SemiLeptonic Decays - 0.05460 Omega_c0 e- anti-nu_e PHSP; - 0.05460 Omega_c0 mu- anti-nu_mu PHSP; - 0.02000 Omega_c0 tau- anti-nu_tau PHSP; -# Hadronic Decays with Xi_c+ - 0.00600 Omega_c0 pi- PHSP; - 0.02200 Omega_c0 pi- pi+ pi- PHSP; - 0.00055 Omega_c0 K- PHSP; - 0.02200 Omega_c0 D_s- PHSP; - 0.0011 D0 Xi- PHSP; -# - 0.00047 Omega- J/psi PHSP; - 0.00038 Omega- psi(2S) PHSP; -# aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.68192 d anti-u s cs_0 PYTHIA 13; -0.10910 d anti-u d cs_0 PYTHIA 13; -0.02728 d anti-u s su_0 PYTHIA 13; -Enddecay - -Decay anti-Omega_b+ -# SemiLeptonic Decays - 0.05460 anti-Omega_c0 e+ nu_e PHSP; - 0.05460 anti-Omega_c0 mu+ nu_mu PHSP; - 0.02000 anti-Omega_c0 tau+ nu_tau PHSP; -# Hadronic Decays with Xi_c+ - 0.00600 anti-Omega_c0 pi+ PHSP; - 0.02200 anti-Omega_c0 pi+ pi+ pi- PHSP; - 0.00055 anti-Omega_c0 K+ PHSP; - 0.02200 anti-Omega_c0 D_s+ PHSP; - 0.0011 anti-D0 anti-Xi+ PHSP; -# - 0.00047 anti-Omega+ J/psi PHSP; - 0.00038 anti-Omega+ psi(2S) PHSP; -# aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.68192 u anti-d anti-s anti-cs_0 PYTHIA 13; -0.10910 u anti-d anti-d anti-cs_0 PYTHIA 13; -0.02728 u anti-d anti-s anti-su_0 PYTHIA 13; -Enddecay - - -Decay Sigma_b+ - 1.00000 Lambda_b0 pi+ PHSP; -Enddecay -Decay anti-Sigma_b- - 1.00000 anti-Lambda_b0 pi- PHSP; -Enddecay - -Decay Sigma_b- - 1.00000 Lambda_b0 pi- PHSP; -Enddecay -Decay anti-Sigma_b+ - 1.00000 anti-Lambda_b0 pi+ PHSP; -Enddecay - -Decay Sigma_b0 - 1.00000 Lambda_b0 gamma PHOTOS PHSP; -Enddecay -Decay anti-Sigma_b0 - 1.00000 anti-Lambda_b0 gamma PHOTOS PHSP; -Enddecay - - -# -# B_c Mesons -# - -Decay B_c- -0.01600 tau- anti-nu_tau SLN; -# -# SemiLeptonic Decays -0.01900 J/psi e- anti-nu_e PHOTOS PHSP; -0.00094 psi(2S) e- anti-nu_e PHOTOS PHSP; -0.00750 eta_c e- anti-nu_e PHOTOS PHSP; -0.00020 eta_c(2S) e- anti-nu_e PHOTOS PHSP; -0.00004 anti-D0 e- anti-nu_e PHOTOS PHSP; -0.00018 anti-D*0 e- anti-nu_e PHOTOS PHSP; -0.04030 anti-B_s0 e- anti-nu_e PHOTOS PHSP; -0.05060 anti-B_s*0 e- anti-nu_e PHOTOS PHSP; -0.00340 anti-B0 e- anti-nu_e PHOTOS PHSP; -0.00580 anti-B*0 e- anti-nu_e PHOTOS PHSP; -# -0.01900 J/psi mu- anti-nu_mu PHOTOS PHSP; -0.00094 psi(2S) mu- anti-nu_mu PHOTOS PHSP; -0.00750 eta_c mu- anti-nu_mu PHOTOS PHSP; -0.00020 eta_c(2S) mu- anti-nu_mu PHOTOS PHSP; -0.00004 anti-D0 mu- anti-nu_mu PHOTOS PHSP; -0.00018 anti-D*0 mu- anti-nu_mu PHOTOS PHSP; -0.04030 anti-B_s0 mu- anti-nu_mu PHOTOS PHSP; -0.05060 anti-B_s*0 mu- anti-nu_mu PHOTOS PHSP; -0.00340 anti-B0 mu- anti-nu_mu PHOTOS PHSP; -0.00580 anti-B*0 mu- anti-nu_mu PHOTOS PHSP; -# -0.00480 J/psi tau- anti-nu_tau PHSP; -0.00008 psi(2S) tau- anti-nu_tau PHSP; -0.00230 eta_c tau- anti-nu_tau PHSP; -0.000016 eta_c(2S) tau- anti-nu_tau PHSP; -0.00002 anti-D0 tau- anti-nu_tau PHSP; -0.00008 anti-D*0 tau- anti-nu_tau PHSP; -# -# -# Hadronic Decays -0.00200 eta_c pi- PHSP; -0.00420 rho- eta_c SVS; -0.00013 eta_c K- PHSP; -0.00020 K*- eta_c SVS; -0.00130 J/psi pi- SVS; -0.00400 J/psi rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00011 J/psi K- SVS; -0.00022 J/psi K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.000053 D- D0 PHSP; -0.000075 D*0 D- SVS; -0.000049 D*- D0 SVS; -0.00033 D*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000048 D_s- D0 PHSP; -0.0000071 D*0 D_s- SVS; -0.0000045 D_s*- D0 SVS; -0.000026 D_s*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.0000003 D- anti-D0 PHSP; -0.0000003 anti-D*0 D- SVS; -0.0000004 D*- anti-D0 SVS; -0.0000016 anti-D*0 D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000066 D_s- anti-D0 PHSP; -0.0000063 anti-D*0 D_s- SVS; -0.0000085 D_s*- anti-D0 SVS; -0.0000404 D_s*- anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.00280 eta_c D_s- PHSP; -0.00270 D_s*- eta_c SVS; -0.00015 eta_c D- PHSP; -0.00010 D*- eta_c SVS; -0.00170 J/psi D_s- SVS; -0.00670 J/psi D_s*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00009 J/psi D- SVS; -0.00028 J/psi D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.16400 anti-B_s0 pi- PHSP; -0.07200 rho- anti-B_s0 SVS; -0.01060 anti-B_s0 K- PHSP; -0.00000 K*- anti-B_s0 SVS; -0.06500 anti-B_s*0 pi- SVS; -0.20200 anti-B_s*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00370 anti-B_s*0 K- SVS; -0.00000 anti-B_s*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.01060 anti-B0 pi- PHSP; -0.00960 rho- anti-B0 SVS; -0.00070 anti-B0 K- PHSP; -0.00015 K*- anti-B0 SVS; -0.00950 anti-B*0 pi- SVS; -0.02570 anti-B*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00055 anti-B*0 K- SVS; -0.00058 anti-B*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00037 B- pi0 PHSP; -0.00034 rho0 B- SVS; -0.01980 B- K0 PHSP; -0.00430 K*0 B- SVS; -0.00033 B*- pi0 SVS; -0.00090 B*- rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.01600 B*- K0 SVS; -0.01670 B*- K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# PR LHCb 09 Apr 2004 Add B_c+ -> rho0 pi+ - 0.00002 rho0 pi- SVS; - 0.06005 anti-c s PYTHIA 11; -# PR LHCb 27 Apr 2004 Add Pythia Modes -# -# ash 10/27/03 Do not if this is correct but filling out with unknown cs -#0.0200235 cs_0 anti-uu_0 PYTHIA 23; -#0.0400470 cs_1 anti-uu_1 PYTHIA 23; -# -Enddecay - -# 09/15/03 A. Sanchez: Using BR's from hep-ph/0308214 -# -# Total Br = 0.939865 + .06135 cs -Decay B_c+ -0.01600 tau+ nu_tau SLN; -# -# SemiLeptonic Decays -0.01900 J/psi e+ nu_e PHOTOS PHSP; -0.00094 psi(2S) e+ nu_e PHOTOS PHSP; -0.00750 eta_c e+ nu_e PHOTOS PHSP; -0.00020 eta_c(2S) e+ nu_e PHOTOS PHSP; -0.00004 D0 e+ nu_e PHOTOS PHSP; -0.00018 D*0 e+ nu_e PHOTOS PHSP; -0.04030 B_s0 e+ nu_e PHOTOS PHSP; -0.05060 B_s*0 e+ nu_e PHOTOS PHSP; -0.00340 B0 e+ nu_e PHOTOS PHSP; -0.00580 B*0 e+ nu_e PHOTOS PHSP; -# -0.01900 J/psi mu+ nu_mu PHOTOS PHSP; -0.00094 psi(2S) mu+ nu_mu PHOTOS PHSP; -0.00750 eta_c mu+ nu_mu PHOTOS PHSP; -0.00020 eta_c(2S) mu+ nu_mu PHOTOS PHSP; -0.00004 D0 mu+ nu_mu PHOTOS PHSP; -0.00018 D*0 mu+ nu_mu PHOTOS PHSP; -0.04030 B_s0 mu+ nu_mu PHOTOS PHSP; -0.05060 B_s*0 mu+ nu_mu PHOTOS PHSP; -0.00340 B0 mu+ nu_mu PHOTOS PHSP; -0.00580 B*0 mu+ nu_mu PHOTOS PHSP; -# -0.00480 J/psi tau+ nu_tau PHSP; -0.00008 psi(2S) tau+ nu_tau PHSP; -0.00230 eta_c tau+ nu_tau PHSP; -0.000016 eta_c(2S) tau+ nu_tau PHSP; -0.00002 D0 tau+ nu_tau PHSP; -0.00008 D*0 tau+ nu_tau PHSP; -# -# Hadronic Decays -0.00200 eta_c pi+ PHSP; -0.00420 rho+ eta_c SVS; -0.00013 eta_c K+ PHSP; -0.00020 K*+ eta_c SVS; -0.00130 J/psi pi+ SVS; -0.00400 J/psi rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00011 J/psi K+ SVS; -0.00022 J/psi K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.000053 D+ anti-D0 PHSP; -0.000075 anti-D*0 D+ SVS; -0.000049 D*+ anti-D0 SVS; -0.00033 D*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000048 D_s+ anti-D0 PHSP; -0.0000071 anti-D*0 D_s+ SVS; -0.0000045 D_s*+ anti-D0 SVS; -0.000026 D_s*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.0000003 D+ D0 PHSP; -0.0000003 D*0 D+ SVS; -0.0000004 D*+ D0 SVS; -0.0000016 D*0 D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000066 D_s+ D0 PHSP; -0.0000063 D*0 D_s+ SVS; -0.0000085 D_s*+ D0 SVS; -0.0000404 D_s*+ D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.00280 eta_c D_s+ PHSP; -0.00270 D_s*+ eta_c SVS; -0.00015 eta_c D+ PHSP; -0.00010 D*+ eta_c SVS; -0.00170 J/psi D_s+ SVS; -0.00670 J/psi D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00009 J/psi D+ SVS; -0.00028 J/psi D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.16400 B_s0 pi+ PHSP; -0.07200 rho+ B_s0 SVS; -0.01060 B_s0 K+ PHSP; -0.00000 K*+ B_s0 SVS; -0.06500 B_s*0 pi+ SVS; -0.20200 B_s*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00370 B_s*0 K+ SVS; -0.00000 B_s*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.01060 B0 pi+ PHSP; -0.00960 rho+ B0 SVS; -0.00070 B0 K+ PHSP; -0.00015 K*+ B0 SVS; -0.00950 B*0 pi+ SVS; -0.02570 B*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00055 B*0 K+ SVS; -0.00058 B*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00037 B+ pi0 PHSP; -0.00034 rho0 B+ SVS; -0.01980 B+ anti-K0 PHSP; -0.00430 K*0 B+ SVS; -0.00033 B*+ pi0 SVS; -0.00090 B*+ rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.01600 B*+ anti-K0 SVS; -0.01670 B*+ K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# PR LHCb 09 Apr 2004 Add B_c+ -> rho0 pi+ - 0.00002 rho0 pi+ SVS; - 0.06005 c anti-s PYTHIA 11; -# PR LHCb 27 Apr 2004 Add Pythia Modes -# -# ash 10/27/03 Do not if this is correct but filling out with unknown cs -#0.0200235 anti-cs_0 uu_0 PYTHIA 23; -#0.0400470 anti-cs_1 uu_1 PYTHIA 23; -# -Enddecay - - -# Add excited Lambda_c decays (R.J. Tesarek 12/9/03) -# Just a guess for the last two BR [Lambda_c(2593)+]. -Decay Lambda_c(2593)+ - 0.24000 Sigma_c++ pi- PHSP; - 0.24000 Sigma_c0 pi+ PHSP; - 0.18000 Lambda_c+ pi+ pi- PHSP; - 0.24000 Sigma_c+ pi0 PHSP; - 0.09000 Lambda_c+ pi0 pi0 PHSP; - 0.01000 Lambda_c+ gamma PHSP; -Enddecay -Decay anti-Lambda_c(2593)- - 0.24000 anti-Sigma_c-- pi+ PHSP; - 0.24000 anti-Sigma_c0 pi- PHSP; - 0.18000 anti-Lambda_c- pi- pi+ PHSP; - 0.24000 anti-Sigma_c- pi0 PHSP; - 0.09000 anti-Lambda_c- pi0 pi0 PHSP; - 0.01000 anti-Lambda_c- gamma PHSP; -Enddecay -# -Decay Lambda_c(2625)+ - 0.66000 Lambda_c+ pi+ pi- PHSP; - 0.33000 Lambda_c+ pi0 PHSP; - 0.01000 Lambda_c+ gamma PHSP; -Enddecay -Decay anti-Lambda_c(2625)- - 0.66000 anti-Lambda_c- pi- pi+ PHSP; - 0.33000 anti-Lambda_c- pi0 PHSP; - 0.01000 anti-Lambda_c- gamma PHSP; -Enddecay - -# Add excited B hadrons (LHCb PR 10/03/04) -# Reference : Pythia 6.205 decay table -# PDG Id = 5312 -Decay Xi'_b- - 1.0000 Xi_b- gamma PHSP; -Enddecay -Decay anti-Xi'_b+ - 1.0000 anti-Xi_b+ gamma PHSP; -Enddecay -# PDG Id = 5322 -Decay Xi'_b0 - 1.0000 Xi_b0 gamma PHSP; -Enddecay -Decay anti-Xi'_b0 - 1.0000 anti-Xi_b0 gamma PHSP; -Enddecay -# PDG Id = 10521 -Decay B_0*+ - 0.6670 B0 pi+ PHSP; - 0.3330 B+ pi0 PHSP; -Enddecay -Decay B_0*- - 0.6670 anti-B0 pi- PHSP; - 0.3330 B- pi0 PHSP; -Enddecay -# PDG Id = 20523 Broad : S wave -Decay B'_1+ - 0.6670 B*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.3330 B*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay B'_1- - 0.6670 anti-B*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.3330 B*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# PDG Id = 10523 Narrow : D wave -Decay B_1+ - 0.6670 B*0 pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.3330 B*+ pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -Decay B_1- - 0.6670 anti-B*0 pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.3330 B*- pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -# PDG Id = 525 Narrow : D wave -Decay B_2*+ - 0.3000 B0 pi+ TSS; - 0.1500 B+ pi0 TSS; - 0.1600 B*0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.0800 B*+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.1300 B*0 pi+ pi0 PHSP; - 0.0600 B*+ pi+ pi- PHSP; - 0.0800 B0 pi+ pi0 PHSP; - 0.0400 B+ pi+ pi- PHSP; -Enddecay -Decay B_2*- - 0.3000 anti-B0 pi- TSS; - 0.1500 B- pi0 TSS; - 0.1600 anti-B*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.0800 B*- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.1300 anti-B*0 pi- pi0 PHSP; - 0.0600 B*- pi- pi+ PHSP; - 0.0800 anti-B0 pi- pi0 PHSP; - 0.0400 B- pi- pi+ PHSP; -Enddecay -# PDG Id = 10511 -Decay B_0*0 - 0.6670 B+ pi- PHSP; - 0.3330 B0 pi0 PHSP; -Enddecay -Decay anti-B_0*0 - 0.6670 B- pi+ PHSP; - 0.3330 anti-B0 pi0 PHSP; -Enddecay -# PDG Id = 20513 Broad : S wave -Decay B'_10 - 0.6670 B*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.3330 B*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay anti-B'_10 - 0.6670 B*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.3330 anti-B*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# PDG Id = 10513 Narrow : D wave -Decay B_10 - 0.6670 B*+ pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.3330 B*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -Decay anti-B_10 - 0.6670 B*- pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.3330 anti-B*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -# PDG Id = 515 -Decay B_2*0 - 0.3000 B+ pi- TSS; - 0.1500 B0 pi0 TSS; - 0.1600 B*+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.0800 B*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.1300 B*+ pi- pi0 PHSP; - 0.0600 B*0 pi+ pi- PHSP; - 0.0800 B+ pi- pi0 PHSP; - 0.0400 B0 pi+ pi- PHSP; -Enddecay -Decay anti-B_2*0 - 0.3000 B- pi+ TSS; - 0.1500 anti-B0 pi0 TSS; - 0.1600 B*- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.0800 anti-B*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.1300 B*- pi+ pi0 PHSP; - 0.0600 anti-B*0 pi- pi+ PHSP; - 0.0800 B- pi+ pi0 PHSP; - 0.0400 anti-B0 pi- pi+ PHSP; -Enddecay -# PDG Id = 10531 -Decay B_s0*0 - 0.5000 B+ K- PHSP; - 0.5000 B0 anti-K0 PHSP; -Enddecay -Decay anti-B_s0*0 - 0.5000 B- K+ PHSP; - 0.5000 anti-B0 K0 PHSP; -Enddecay -# PDG Id = 20533 Broad : S wave -Decay B'_s10 - 0.5000 B*+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.5000 B*0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay anti-B'_s10 - 0.5000 B*- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.5000 anti-B*0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# PDG Id = 10533 Narrow : D wave -Decay B_s10 - 0.5000 B*+ K- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.5000 B*0 anti-K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -Decay anti-B_s10 - 0.5000 B*- K+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.5000 anti-B*0 K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -# PDG Id = 535 Narrow : D wave -Decay B_s2*0 - 0.3000 B+ K- TSS; - 0.3000 B0 anti-K0 TSS; - 0.2000 B*+ K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.2000 B*0 anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay -Decay anti-B_s2*0 - 0.3000 B- K+ TSS; - 0.3000 anti-B0 K0 TSS; - 0.2000 B*- K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.2000 anti-B*0 K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay -# PDG Id = 543 -Decay B_c*+ - 1.0000 B_c+ gamma VSP_PWAVE; -Enddecay -Decay B_c*- - 1.0000 B_c- gamma VSP_PWAVE; -Enddecay -# PDG Id = 545 Narrow : D wave -Decay B_c2*+ - 0.3000 B0 D+ TSS; - 0.3000 B+ D0 TSS; - 0.2000 B*0 D+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.2000 B*+ D0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay -Decay B_c2*- - 0.3000 anti-B0 D- TSS; - 0.3000 B- anti-D0 TSS; - 0.2000 anti-B*0 D- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.2000 B*- anti-D0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay -# PDG Id = 5114 -Decay Sigma_b*- - 1.0000 Lambda_b0 pi- PHSP; -Enddecay -Decay anti-Sigma_b*+ - 1.0000 anti-Lambda_b0 pi+ PHSP; -Enddecay -# PDG Id = 5224 -Decay Sigma_b*+ - 1.0000 Lambda_b0 pi+ PHSP; -Enddecay -Decay anti-Sigma_b*- - 1.0000 anti-Lambda_b0 pi- PHSP; -Enddecay -# PDG Id = 5214 -Decay Sigma_b*0 - 1.0000 Lambda_b0 pi0 PHSP; -Enddecay -Decay anti-Sigma_b*0 - 1.0000 anti-Lambda_b0 pi0 PHSP; -Enddecay -# PDG Id = 5314 -Decay Xi_b*- - 1.0000 Xi_b- gamma PHSP; -Enddecay -Decay anti-Xi_b*+ - 1.0000 anti-Xi_b+ gamma PHSP; -Enddecay -# PDG Id = 5324 -Decay Xi_b*0 - 1.0000 Xi_b0 gamma PHSP; -Enddecay -Decay anti-Xi_b*0 - 1.0000 anti-Xi_b0 gamma PHSP; -Enddecay -# PDG Id = 5334 -Decay Omega_b*- - 1.0000 Omega_b- gamma PHSP; -Enddecay -Decay anti-Omega_b*+ - 1.0000 anti-Omega_b+ gamma PHSP; -Enddecay -# PDG Id = 10541 -Decay B_c0*+ - 0.5000 B0 D+ PHSP; - 0.5000 B+ D0 PHSP; -Enddecay -Decay B_c0*- - 0.5000 anti-B0 D- PHSP; - 0.5000 B- anti-D0 PHSP; -Enddecay -# PDG Id = 10543 Narrow : D wave -Decay B_c1+ - 0.5000 B*0 D+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.5000 B*+ D0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -Decay B_c1- - 0.5000 anti-B*0 D- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.5000 B*- anti-D0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -# PDG Id = 20543 Broad : S wave -Decay B'_c1+ - 0.5000 B*0 D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.5000 B*+ D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay B'_c1- - 0.5000 anti-B*0 D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.5000 B*- anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay - -# Excited charmed Baryons LHCb PR 3-05-2006 -Decay Xi_cc*++ - 0.08 e+ nu_e Xi_c+ PHSP ; - 0.08 mu+ nu_mu Xi_c+ PHSP ; - 0.51 u anti-d s cu_0 PYTHIA 11 ; - 0.25 u anti-d s cu_1 PYTHIA 11 ; - 0.05 u anti-s s cu_0 PYTHIA 11 ; - 0.03 u anti-s s cu_1 PYTHIA 11 ; -Enddecay - -Decay anti-Xi_cc*-- - 0.08 e- anti-nu_e anti-Xi_c- PHSP; - 0.08 mu- anti-nu_mu anti-Xi_c- PHSP; - 0.51 anti-u d anti-s anti-cu_0 PYTHIA 11 ; - 0.25 anti-u d anti-s anti-cu_0 PYTHIA 11 ; - 0.05 anti-u s anti-s anti-cu_1 PYTHIA 11 ; - 0.03 anti-u s anti-s anti-cu_1 PYTHIA 11 ; -Enddecay - -Decay Xi_cc++ - 0.08 e+ nu_e Xi_c+ PHSP ; - 0.08 mu+ nu_mu Xi_c+ PHSP ; - 0.51 u anti-d s cu_0 PYTHIA 11 ; - 0.25 u anti-d s cu_1 PYTHIA 11 ; - 0.05 u anti-s s cu_0 PYTHIA 11 ; - 0.03 u anti-s s cu_1 PYTHIA 11 ; -Enddecay - -Decay anti-Xi_cc-- - 0.08 e- anti-nu_e anti-Xi_c- PHSP; - 0.08 mu- anti-nu_mu anti-Xi_c- PHSP; - 0.51 anti-u d anti-s anti-cu_0 PYTHIA 11 ; - 0.25 anti-u d anti-s anti-cu_0 PYTHIA 11 ; - 0.05 anti-u s anti-s anti-cu_1 PYTHIA 11 ; - 0.03 anti-u s anti-s anti-cu_1 PYTHIA 11 ; -Enddecay - -Decay Xi_cc*+ - 0.08 e+ nu_e Xi_c0 PHSP; - 0.08 mu+ nu_mu Xi_c0 PHSP; - 0.51 u anti-d s cd_0 PYTHIA 11 ; - 0.25 u anti-d s cd_1 PYTHIA 11 ; - 0.05 u anti-s s cd_0 PYTHIA 11 ; - 0.03 u anti-s s cd_1 PYTHIA 11 ; -Enddecay - -Decay anti-Xi_cc*- - 0.08 e- anti-nu_e anti-Xi_c0 PHSP; - 0.08 mu- anti-nu_mu anti-Xi_c0 PHSP; - 0.51 anti-u d anti-s anti-cd_0 PYTHIA 11 ; - 0.25 anti-u d anti-s anti-cd_1 PYTHIA 11 ; - 0.05 anti-u s anti-s anti-cd_0 PYTHIA 11 ; - 0.03 anti-u s anti-s anti-cd_1 PYTHIA 11 ; -Enddecay - -Decay Xi_cc+ - 0.08 e+ nu_e Xi_c0 PHSP; - 0.08 mu+ nu_mu Xi_c0 PHSP; - 0.51 u anti-d s cd_0 PYTHIA 11 ; - 0.25 u anti-d s cd_1 PYTHIA 11 ; - 0.05 u anti-s s cd_0 PYTHIA 11 ; - 0.03 u anti-s s cd_1 PYTHIA 11 ; -Enddecay - -Decay anti-Xi_cc- - 0.08 e- anti-nu_e anti-Xi_c0 PHSP; - 0.08 mu- anti-nu_mu anti-Xi_c0 PHSP; - 0.51 anti-u d anti-s anti-cd_0 PYTHIA 11 ; - 0.25 anti-u d anti-s anti-cd_1 PYTHIA 11 ; - 0.05 anti-u s anti-s anti-cd_0 PYTHIA 11 ; - 0.03 anti-u s anti-s anti-cd_1 PYTHIA 11 ; -Enddecay - -Decay Omega_cc+ - 0.08 e+ nu_e Omega_c0 PHSP; - 0.08 mu+ nu_mu Omega_c0 PHSP; - 0.51 u anti-d s cs_0 PYTHIA 11; - 0.25 u anti-d s cs_1 PYTHIA 11; - 0.05 u anti-s s cs_0 PYTHIA 11; - 0.03 u anti-s s cs_1 PYTHIA 11; -Enddecay - -Decay anti-Omega_cc- - 0.08 e- anti-nu_e anti-Omega_c0 PHSP; - 0.08 mu- anti-nu_mu anti-Omega_c0 PHSP; - 0.51 anti-u d anti-s anti-cs_0 PYTHIA 11; - 0.25 anti-u d anti-s anti-cs_1 PYTHIA 11; - 0.05 anti-u s anti-s anti-cs_0 PYTHIA 11; - 0.03 anti-u s anti-s anti-cs_1 PYTHIA 11; -Enddecay - -Decay Omega_cc*+ - 0.08 e+ nu_e Omega_c0 PHSP; - 0.08 mu+ nu_mu Omega_c0 PHSP; - 0.51 u anti-d s cs_0 PYTHIA 11; - 0.25 u anti-d s cs_1 PYTHIA 11; - 0.05 u anti-s s cs_0 PYTHIA 11; - 0.03 u anti-s s cs_1 PYTHIA 11; -Enddecay - -Decay anti-Omega_cc*- - 0.08 e- anti-nu_e anti-Omega_c0 PHSP; - 0.08 mu- anti-nu_mu anti-Omega_c0 PHSP; - 0.51 anti-u d anti-s anti-cs_0 PYTHIA 11; - 0.25 anti-u d anti-s anti-cs_1 PYTHIA 11; - 0.05 anti-u s anti-s anti-cs_0 PYTHIA 11; - 0.03 anti-u s anti-s anti-cs_1 PYTHIA 11; -Enddecay - -Decay K_L0 -Enddecay - -End diff --git a/GeneratorInterface/EvtGenInterface/data/DECAY_2010.DEC b/GeneratorInterface/EvtGenInterface/data/DECAY_2010.DEC deleted file mode 100644 index c6cce4f1e561f..0000000000000 --- a/GeneratorInterface/EvtGenInterface/data/DECAY_2010.DEC +++ /dev/null @@ -1,10248 +0,0 @@ -# $Id: DECAY.DEC,v 1.55 2009-11-26 14:16:27 robbep Exp $ -# Updated to PDG 2010 by Tomas Pilar - T.Pilar@warwick.ac.uk -# Updated Mixing Parameters Mark Whitehead May 2009 -# -Define qoverp_incohMix_B_s0 1.0 -Define dm_incohMix_B_s0 17.8e12 -Define qoverp_incohMix_B0 1.0 -Define dm_incohMix_B0 0.507e12 -# Old definition of dm still in some decay models -Define dm 0.507e12 -#Define dgamma 0 -#Define qoverp 1 -#Define phaseqoverp 0 -#Define values for B0s mixing -#Define dms 20.e12 -# DeltaGammas corresponds to DG/G = 10% -#Define dgammas 6.852e10 -# Activate incoherent Mixing -### TODO: find a way to give mixing parameters through decay file to EvtGen -#####yesIncoherentB0Mixing dm dgamma -#####yesIncoherentBsMixing dms dgammas -# define the values of the CKM angles (alpha=70, beta=40) -Define alpha 1.365 -Define beta 0.39 -Define gamma 1.387 -Define twoBetaPlusGamma 2.167 -Define betaPlusHalfGamma 1.0835 -Define minusGamma -1.387 -Define minusTwoBeta -0.78 - -# New definitions for psiKstar modes (Lange, July 26, 2000) -Define PKHplus 0.159 -Define PKHzero 0.775 -Define PKHminus 0.612 -Define PKphHplus 1.563 -Define PKphHzero 0.0 -Define PKphHminus 2.712 - -Define Aplus 0.490 -Define Azero 1.10 -Define Aminus 0.4 -# -Define phAplus 2.5 -Define phAzero 0.0 -Define phAminus -0.17 - -# -# These particle aliases are used in for CP violating decays -# in which the decay distributions depends on how the K* decayed. -# -# -Alias K*L K*0 -Alias K*S K*0 -Alias K*BL anti-K*0 -Alias K*BS anti-K*0 -Alias K*0T K*0 -Alias anti-K*0T anti-K*0 -Alias K*BR anti-K*0 -Alias K*0R K*0 -Alias anti-K_0*0N anti-K_0*0 -Alias K_0*0N K_0*0 -# -ChargeConj K*L K*BL -ChargeConj K*S K*BS -ChargeConj K*0T anti-K*0T -ChargeConj K_0*0N anti-K_0*0N -ChargeConj K*0R K*BR -# -# PR LHCb: Alias for signal productions in LHCb -# -Alias B0sig B0 -Alias anti-B0sig anti-B0 -ChargeConj B0sig anti-B0sig -Alias B+sig B+ -Alias B-sig B- -ChargeConj B+sig B-sig -Alias B_s0sig B_s0 -Alias anti-B_s0sig anti-B_s0 -ChargeConj B_s0sig anti-B_s0sig -Alias B_c+sig B_c+ -Alias B_c-sig B_c- -ChargeConj B_c+sig B_c-sig -Alias eta_bsig eta_b -ChargeConj eta_bsig eta_bsig -Alias h_bsig h_b -ChargeConj h_bsig h_bsig -Alias Sigma_b-sig Sigma_b- -Alias anti-Sigma_b+sig anti-Sigma_b+ -ChargeConj Sigma_b-sig anti-Sigma_b+sig -Alias Lambda_b0sig Lambda_b0 -Alias anti-Lambda_b0sig anti-Lambda_b0 -ChargeConj Lambda_b0sig anti-Lambda_b0sig -Alias Omega_b-sig Omega_b- -Alias anti-Omega_b+sig anti-Omega_b+ -ChargeConj Omega_b-sig anti-Omega_b+sig -Alias Xi_b-sig Xi_b- -Alias anti-Xi_b+sig anti-Xi_b+ -ChargeConj Xi_b-sig anti-Xi_b+sig -Alias Xi_b0sig Xi_b0 -Alias anti-Xi_b0sig anti-Xi_b0 -ChargeConj Xi_b0sig anti-Xi_b0sig -Alias J/psisig J/psi -ChargeConj J/psisig J/psisig -Alias chi_c0sig chi_c0 -ChargeConj chi_c0sig chi_c0sig -Alias chi_c1sig chi_c1 -ChargeConj chi_c1sig chi_c1sig -Alias chi_c2sig chi_c2 -ChargeConj chi_c2sig chi_c2sig -Alias psi(2S)sig psi(2S) -ChargeConj psi(2S)sig psi(2S)sig -Alias psi(3770)sig psi(3770) -ChargeConj psi(3770)sig psi(3770)sig -Alias D*+sig D*+ -Alias D*-sig D*- -ChargeConj D*+sig D*-sig -Alias D*0sig D*0 -Alias anti-D*0sig anti-D*0 -ChargeConj D*0sig anti-D*0sig -Alias D0sig D0 -Alias anti-D0sig anti-D0 -ChargeConj D0sig anti-D0sig -Alias D+sig D+ -Alias D-sig D- -ChargeConj D+sig D-sig -Alias D_s+sig D_s+ -Alias D_s-sig D_s- -ChargeConj D_s+sig D_s-sig -Alias Lambda_c+sig Lambda_c+ -Alias anti-Lambda_c-sig anti-Lambda_c- -ChargeConj Lambda_c+sig anti-Lambda_c-sig -Alias tau+sig tau+ -Alias tau-sig tau- -ChargeConj tau+sig tau-sig -Alias Upsilonsig Upsilon -ChargeConj Upsilonsig Upsilonsig -Alias Upsilon(2S)sig Upsilon(2S) -ChargeConj Upsilon(2S)sig Upsilon(2S)sig -Alias Upsilon(3S)sig Upsilon(3S) -ChargeConj Upsilon(3S)sig Upsilon(3S)sig -Alias Upsilon(4S)sig Upsilon(4S) -ChargeConj Upsilon(4S)sig Upsilon(4S)sig -Alias Upsilon(5S)sig Upsilon(5S) -ChargeConj Upsilon(5S)sig Upsilon(5S)sig -Alias X_1(3872)sig X_1(3872) -ChargeConj X_1(3872)sig X_1(3872)sig -Alias h_csig h_c -ChargeConj h_csig h_csig -Alias Sigma+sig Sigma+ -Alias anti-Sigma-sig anti-Sigma- -ChargeConj Sigma+sig anti-Sigma-sig -Alias Lambda0sig Lambda0 -Alias anti-Lambda0sig anti-Lambda0 -ChargeConj Lambda0sig anti-Lambda0sig -Alias B_10sig B_10 -Alias anti-B_10sig anti-B_10 -ChargeConj B_10sig anti-B_10sig -Alias B_2*0sig B_2*0 -Alias anti-B_2*0sig anti-B_2*0 -ChargeConj B_2*0sig anti-B_2*0sig -Alias B_s10sig B_s10 -Alias anti-B_s10sig anti-B_s10 -ChargeConj B_s10sig anti-B_s10sig -Alias B_s2*0sig B_s2*0 -Alias anti-B_s2*0sig anti-B_s2*0 -ChargeConj B_s2*0sig anti-B_s2*0sig -Alias B_1+sig B_1+ -Alias B_1-sig B_1- -ChargeConj B_1+sig B_1-sig -Alias B_2*+sig B_2*+ -Alias B_2*-sig B_2*- -ChargeConj B_2*+sig B_2*-sig -# -#JetSet parameter modifications -#(Very important that there are no blank spaces in the parameter string!) -#Turn of B0-B0B mixing in JetSet: -#JetSetPar MSTJ(26)=0 -# control of L=1 mesons (in order: J1S0 J0S1 J1S1 J2S1) - commented out by NB/WP -#JetSetPar PARJ(14)=0.05 -#JetSetPar PARJ(15)=0.05 -#JetSetPar PARJ(16)=0.05 -#JetSetPar PARJ(17)=0.05 -#cut-off parameter used to stop fragmentation process (should not be changed) -#####JetSetPar PARJ(33)=0.3 SET NOW IN GAUSS - -# PR LHCb 10/01/2006 -# Turn on PHOTOS for all decays -yesPhotos -# -# -#Decay vpho -#1.000 PYCONT; -#Enddecay -# -# use new VSS_BMIX mixing decay model (DK,28-Oct-1999) -Decay Upsilon(4S) -0.515122645 B+ B- VSS; #[Reconstructed PDG2011] -0.483122645 B0 anti-B0 VSS_BMIX dm; #[Reconstructed PDG2011] -0.000015583 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] -0.000015766 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] -0.000015766 tau+ tau- PHOTOS VLL; #[Reconstructed PDG2011] -0.000084099 Upsilon(2S) pi+ pi- VVPIPI; #[Reconstructed PDG2011] -0.000044342 Upsilon(2S) pi0 pi0 VVPIPI; #[Reconstructed PDG2011] -0.000080123 Upsilon pi+ pi- VVPIPI; #[Reconstructed PDG2011] -0.000044342 Upsilon pi0 pi0 VVPIPI; #[Reconstructed PDG2011] -0.000194392 Upsilon eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -# BF ~ (2J+1)E^3_gamma; see PRL 94, 032001 -# V-> gamma S Partial wave (L,S)=(0,0) -0.000092625 gamma chi_b0(3P) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] -# V-> gamma V Partial wave (L,S)=(0,1) -0.000138938 gamma chi_b1(3P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] -# V-> gamma T Partial wave (L,S)=(0,1) -0.000129084 gamma chi_b2(3P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] -# V-> gamma S Partial wave (L,S)=(0,0) -0.000002956 gamma chi_b0(2P) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] -# V-> gamma V Partial wave (L,S)=(0,1) -0.000007883 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] -# V-> gamma T Partial wave (L,S)=(0,1) -0.000011825 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] -0.000837571 g g g PYTHIA 4; #[Reconstructed PDG2011] -0.000039415 gamma g g PYTHIA 4; #[Reconstructed PDG2011] -Enddecay -# -# -# -Decay anti-B0 -# Updated to PDG 2008 -# b -> c semileptonic -# -0.050100000 D*+ e- anti-nu_e PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011] -0.021700000 D+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.0054 D_1+ e- anti-nu_e PHOTOS ISGW2; -0.0020 D_0*+ e- anti-nu_e PHOTOS ISGW2; -0.0050 D'_1+ e- anti-nu_e PHOTOS ISGW2; -0.0022 D_2*+ e- anti-nu_e PHOTOS ISGW2; -0.0003 D*+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.004900000 D*0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] -0.0010 D+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0000 D0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; - -0.050100000 D*+ mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011] -0.021700000 D+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.0054 D_1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0020 D_0*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0050 D'_1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0022 D_2*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0003 D*+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.004900000 D*0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] -0.0010 D+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0000 D0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -# -# b -> c tau nu -# -0.015000000 D*+ tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011] -0.011000000 D+ tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011] -0.0013 D_1+ tau- anti-nu_tau ISGW2; -0.0013 D_0*+ tau- anti-nu_tau ISGW2; -0.0020 D'_1+ tau- anti-nu_tau ISGW2; -0.0020 D_2*+ tau- anti-nu_tau ISGW2; -# -# b -> u l nu -# -# 03/28/01 S.Menke included inclusive B -> X_u l nu decays for m(X_u) > 1.26 GeV. -# with some thresholds to gradually switch from excl. to incl. -# modeling without big jumps keeping the better known excl. -# Brs at their actual values and constrain the incl. Br and -# weights in a way that ~40% of the total BR belongs to -# the mass region > 1.5 GeV -# October 20, 2004 - Lange - update using sl awg input -# March 30, 2005 J. Dingfelder: Updated B -> X_u l nu hybrid model -# (supersedes older version by S. Menke). Inclusive -# decays are reweighted in three kinematic -# variables mX, q2, and El (=> 512 weights total). -# The list of weights is included as ModelAlias -# once per B charge state. -# NOTE: - The specified parameters for model VUBHYBRID are: -# mb, a, alpha_s, nbins_mX, nbins_q2, nbins_El, -# list of threshold values for mX, q2, El in ascending order. -# -# *** DO NOT CHANGE ANY OF THESE PARAMETERS! *** -# Otherwise a new set of weights would be needed, since they were -# generated for a certain set of values for mb, a, excl. BFs, non-res BF. -# -# - If no binning (nbins or thresholds) are specified after the first -# three parameters (mb,a,alpha_s) no hybrid weighting is performed. - -# --- Hybrid weights for neutral B -> Xu l nu decays -# NOTE: Do NOT CHANGE any BFs without using the corresponding set of -# hybrid weights (and vice versa). - -0.000134000 pi+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000247000 rho+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000000 D(2S)+ e- anti-nu_e PHOTOS ISGW2; -0.000000 D*(2S)+ e- anti-nu_e PHOTOS ISGW2; -0.001892 Xu+ e- anti-nu_e PHOTOS VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; -# -0.000134000 pi+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000247000 rho+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000000 D(2S)+ mu- anti-nu_mu PHOTOS ISGW2; -0.000000 D*(2S)+ mu- anti-nu_mu PHOTOS ISGW2; -0.001892 Xu+ mu- anti-nu_mu PHOTOS VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; -# -0.000060 pi+ tau- anti-nu_tau ISGW2; -0.000083 rho+ tau- anti-nu_tau ISGW2; -0.000090 a_1+ tau- anti-nu_tau ISGW2; -0.000008 b_1+ tau- anti-nu_tau ISGW2; -0.000008 a_0+ tau- anti-nu_tau ISGW2; -0.000008 a_2+ tau- anti-nu_tau ISGW2; -0.000000 rho(2S)+ tau- anti-nu_tau ISGW2; -0.000000 D(2S)+ tau- anti-nu_tau ISGW2; -0.000000 D*(2S)+ tau- anti-nu_tau ISGW2; -# - -# -# b->u hadronic -# Ref. [B1]: -# Lange Nov 14, 2004 (flip D_s K -- is opposite of D_s pi) -0.000024000 D_s- pi+ PHSP; #[Reconstructed PDG2011] -0.000030000 D_s+ K- PHSP; #[Reconstructed PDG2011] -0.000021000 D_s*- pi+ SVS; #[Reconstructed PDG2011] -0.000021900 D_s*+ K- SVS; #[Reconstructed PDG2011] -# -0.000016 rho+ D_s- SVS; -0.000035000 K*- D_s+ SVS; #[Reconstructed PDG2011] -0.000041000 D_s*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000032000 D_s*+ K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] - - -# -# b -> s gamma -# -0.000043300 anti-K*0 gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -# PR LHCb add omega gamma -0.000000440 omega gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -#0.0000135 anti-K_10 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000065 anti-K'_10 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000128 anti-K'*0 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000166 anti-K_2*0 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000017 anti-K''*0 gamma HELAMP 1.0 0.0 1.0 0.0; -0.0003118 anti-Xsd gamma BTOXSGAMMA 2 ; -# -0.000000160 anti-K0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.000001030 anti-K*0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.0000050 anti-Xsd e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.000000450 anti-K0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.000001050 anti-K*0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.0000025 anti-Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.0000001 anti-K0 tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 anti-K*0 tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 anti-Xsd tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -# -#------------------------------------------------------------------------------ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv -# B0 -> CP eigenstates (some exclusive b -> u) sum=0.00036 -# -0.000005130 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000001620 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.0000010 pi0 eta PHSP; -0.000001200 pi0 eta' PHSP; #[Reconstructed PDG2011] -0.000001 pi0 a_00 PHSP; -0.000001 pi0 f_0 PHSP; -# pi0 rho0 is with the 3-body modes -0.000001 omega pi0 SVS; -0.000001 a_10 pi0 SVS; -0.000001 b_10 pi0 SVS; -0.000001 eta eta PHSP; -0.000001 eta eta' PHSP; -0.000001 eta a_00 PHSP; -0.000001 eta f_0 PHSP; -0.000001 rho0 eta SVS; -0.000000940 omega eta SVS; #[Reconstructed PDG2011] -0.000001 a_10 eta SVS; -0.000001 b_10 eta SVS; -0.000001 eta' eta' PHSP; -0.000001 eta' a_00 PHSP; -0.000001 eta' f_0 PHSP; -0.000001 rho0 eta' SVS; -0.000001000 omega eta' SVS; #[Reconstructed PDG2011] -0.000001 a_10 eta' SVS; -0.000001 b_10 eta' SVS; -0.000001 a_00 a_00 PHSP; -0.000001 a_00 f_0 PHSP; -0.000001 rho0 a_00 SVS; -0.000001 omega a_00 SVS; -0.000001 a_10 a_00 SVS; -0.000001 b_10 a_00 SVS; -0.000001 f_0 f_0 PHSP; -0.000001 rho0 f_0 SVS; -0.000001 omega f_0 SVS; -0.000001 a_10 f_0 SVS; -0.000001 b_10 f_0 SVS; - -# Penguin dominated modes are sin2beta, not sin2alpha -0.000004300 phi K_S0 SVS; #[Reconstructed PDG2011] -0.000004300 phi K_L0 SVS; #[Reconstructed PDG2011] -0.000000550 eta K_S0 PHSP; #[Reconstructed PDG2011] -0.000000550 eta K_L0 PHSP; #[Reconstructed PDG2011] -0.000033000 eta' K_S0 PHSP; #[Reconstructed PDG2011] -0.000033000 eta' K_L0 PHSP; #[Reconstructed PDG2011] -0.000002500 omega K_S0 SVS; #[Reconstructed PDG2011] -0.000002500 omega K_L0 SVS; #[Reconstructed PDG2011] -#don't allow jetset to simulate the same decay but to a K0 or anti-K0 -#Lange 1/30/2003 -0.0 phi K0 PHSP; -0.0 phi anti-K0 PHSP; -0.0 eta K0 PHSP; -0.0 eta anti-K0 PHSP; -0.0 eta' K0 PHSP; -0.0 eta' anti-K0 PHSP; -0.0 omega K0 PHSP; -0.0 omega anti-K0 PHSP; -# phipi0 has no simple Pengiun or tree so who knows - ditto phieta/eta'? -0.000001 phi pi0 SVS; -0.000001 phi eta SVS; -0.000001 phi eta' SVS; -# -0.000015900 anti-K*0 eta SVS; #[Reconstructed PDG2011] -0.000003800 anti-K*0 eta' SVS; #[Reconstructed PDG2011] -0.000002000 anti-K*0 omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000001 phi omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 omega omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 omega rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -# -# -#2-body modes from Jim Olsen -0.000019400 K- pi+ PHSP; #[Reconstructed PDG2011] -0.0000004 K+ K- PHSP; -# K_S0 K_L0 is 0 -# see http://babar-hn.slac.stanford.edu:5090/HyperNews/get/pubboard14/156.html -0.000000240 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] -0.0000000 K_S0 K_L0 PHSP; -0.000000240 K_L0 K_L0 PHSP; #[Reconstructed PDG2011] -# declare K0 pi0 not to have it through Pythia -0.000000 anti-K0 pi0 PHSP; -# Split into K_S0 K_L0 (LHCb - P. Robbe) -0.000004750 K_S0 pi0 PHSP; #[Reconstructed PDG2011] -0.000004750 K_L0 pi0 PHSP; #[Reconstructed PDG2011] -# 0 to keep PYTHIA from generating it -0.000000 K0 anti-K0 PHSP; -# -# 3-body decays -# this model generates interferences and higher mass rho -# -# 3-body by John Back (jback@slac.stanford.edu) - Oct 15, 2002 -# JGS intersperses modes with pi0->eta,eta' -# anti-B0 modes -# Model generates rho(770), rho(1450) and rho(1700) resonances -# with interference (uses CKM angle alpha) -0.000024 pi- pi+ pi0 BTO3PI_CP dm alpha; -# Put in with 0 BR to keep PYTHIA from generating these (see BTO3PI_CP above) -0.000000 rho0 pi0 SVS; -0.000000 rho- pi+ SVS; -0.000000 rho+ pi- SVS; -0.000000 rho(2S)- pi+ SVS; -0.000000 rho(2S)+ pi- SVS; -0.000000 rho(3S)- pi+ SVS; -0.000000 rho(3S)+ pi- SVS; -# -# rho0 3-body modes -0.000002350 rho0 K_S0 SVS; #[Reconstructed PDG2011] -0.000002350 rho0 K_L0 SVS; #[Reconstructed PDG2011] -# -# rho+ 3-body modes -0.000008400 rho+ K- SVS; #[Reconstructed PDG2011] -# -# rho(1450) 3-body modes -0.0000005 rho(2S)0 K_S0 SVS; -0.0000005 rho(2S)0 K_L0 SVS; -# -# -# f0,a0(980) 3-body modes -0.0000055 f_0 anti-K0 PHSP; -0.000001 a_00 anti-K0 PHSP; -0.000001 a_0+ K- PHSP; -0.000003 a_0+ pi- PHSP; -0.000001 a_0- pi+ PHSP; -# -# K*0(892) 3-body modes -0.000003600 anti-K*0 pi0 SVS; #[Reconstructed PDG2011] -0.000003 anti-K*0 K0 SVS; -# -# K*0(1430) 3-body modes -0.000001 anti-K_0*0 pi0 PHSP; -0.000003 anti-K_0*0 K0 PHSP; -# -# K*0(1680) 3-body modes -0.000001 anti-K''*0 pi0 SVS; -0.000001 anti-K''*0 K0 SVS; - -# -# K*-(892) 3-body modes -0.000009400 K*- pi+ SVS; #[Reconstructed PDG2011] -0.000002 K*- K+ SVS; -# -# K*-(1430) 3-body modes -0.000033000 K_0*- pi+ PHSP; #[Reconstructed PDG2011] -0.000002 K_0*- K+ PHSP; -# -# K*0(1680) 3-body modes -0.000001 K''*- pi+ SVS; -0.000001 K''*- K+ SVS; -# -# -# Non-resonant 3-body left-overs -# Most modes are set at 1e-6 -# -# pi-pi+pi0: high mass + f0(400-1200) = (1+1)e-6 -####0402270.000002 pi- pi+ pi0 PHSP; -0.000017 pi- pi+ eta PHSP; -0.000001 pi- pi+ eta' PHSP; -# -# pi- pi+ anti-K0: total-rhoK0-f0K0-piK*(892)-piK*(1430)=45-5-6-13./3-11./3 -0.000000000 pi- pi+ anti-K0 PHSP; #[Reconstructed PDG2011] -# -# K- pi+ pi0 -0.000027500 K- pi+ pi0 PHSP; #[Reconstructed PDG2011] -0.000020 K- pi+ eta PHSP; -0.000001 K- pi+ eta' PHSP; -# -# pi- K+ K0. -# Both B0 and B0bar can decay to these => 0.5e-6 each -0.0000005 pi- K+ anti-K0 PHSP; -0.0000005 pi+ K- K0 PHSP; -# -# K- K+ anti-K0 -# PR LHCb 09 Apr 2004 split into KL/KS -0.000000 K- K+ anti-K0 PHSP; -0.000012350 K- K+ K_S0 PHSP; #[Reconstructed PDG2011] -0.000012350 K- K+ K_L0 PHSP; #[Reconstructed PDG2011] -# -# K- K+ pi0 -0.000001 K- K+ pi0 PHSP; -0.000001 K- K+ eta PHSP; -0.000001 K- K+ eta' PHSP; -# -# pi0 anti-K0 K0 -0.000002 anti-K0 K0 pi0 PHSP; -0.000001 anti-K0 K0 eta PHSP; -0.000001 anti-K0 K0 eta' PHSP; -# -# pi0 pi0 anti-K0 -0.000002 anti-K0 pi0 pi0 PHSP; -0.000001 anti-K0 pi0 eta PHSP; -0.000001 anti-K0 pi0 eta' PHSP; -0.000001 anti-K0 eta eta PHSP; -0.000001 anti-K0 eta eta' PHSP; -0.000001 anti-K0 eta' eta' PHSP; -# -# anti-K0 K0 anti-K0: 8*BF(KsKsKs)~=48 (8 is a guess) -0.000048 anti-K0 K0 anti-K0 PHSP; -# -# pi0 pi0 pi0 -0.000001 pi0 pi0 pi0 PHSP; -0.000001 pi0 pi0 eta PHSP; -0.000001 pi0 pi0 eta' PHSP; -0.000001 pi0 eta eta PHSP; -0.000001 pi0 eta eta' PHSP; -# -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#--------------------------------------------------------------------------- -# -#4-body modes from Andrei Gritsan -#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- -# PR LHCb 21 Apr 2004 : set polarisation to longitudinal -0.000000730 rho0 rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.000024200 rho+ rho- SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.000003 rho0 pi+ pi- PHSP; -0.000003 omega pi+ pi- PHSP; -0.000001 rho0 pi0 pi0 PHSP; -0.000001 omega pi0 pi0 PHSP; -0.0000005 rho0 pi0 eta PHSP; -0.0000002 rho0 eta eta PHSP; -0.0000002 rho0 pi0 eta' PHSP; -0.0000001 rho0 eta eta' PHSP; -0.0000005 omega pi0 eta PHSP; -0.0000002 omega eta eta PHSP; -0.0000002 omega pi0 eta' PHSP; -0.0000001 omega eta eta' PHSP; -0.000010 rho+ pi- pi0 PHSP; -0.000005 rho+ pi- eta PHSP; -0.000010 rho- pi+ pi0 PHSP; -0.000005 rho- pi+ eta PHSP; -0.000010 pi+ pi- pi+ pi- PHSP; -0.000010 pi+ pi- pi0 pi0 PHSP; -0.000005 pi+ pi- eta pi0 PHSP; -0.000002 pi+ pi- eta eta PHSP; -0.000002 pi+ pi- eta' pi0 PHSP; -0.000001 pi+ pi- eta' eta PHSP; -0.000016500 a_1+ pi- SVS; #[Reconstructed PDG2011] -0.000016500 a_1- pi+ SVS; #[Reconstructed PDG2011] -0.0000055 b_1+ pi- SVS; -0.0000055 b_1- pi+ SVS; -0.000002 rho- a_0+ SVS; -0.000010 rho+ a_0- SVS; -0.000001 f_0 pi+ pi- PHSP; -0.000001 f_0 pi0 pi0 PHSP; -0.000001 a_0- pi+ pi0 PHSP; -0.000001 a_00 pi0 pi0 PHSP; -0.000001 a_0+ pi- pi0 PHSP; -#--- 4-body rho-K*, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- -0.000003400 rho0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000010 rho+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000050600 pi- pi+ anti-K*0 PHSP; #[Reconstructed PDG2011] -0.000010 pi+ pi0 K*- PHSP; -0.000005 pi+ eta K*- PHSP; -0.000002 pi+ eta' K*- PHSP; -0.000010 rho+ K- pi0 PHSP; -0.000005 rho+ K- eta PHSP; -0.000002 rho+ K- eta' PHSP; -0.000010 rho+ anti-K0 pi- PHSP; -0.000010 rho- anti-K0 pi+ PHSP; -0.000005 rho0 anti-K0 pi0 PHSP; -0.000002 rho0 anti-K0 eta PHSP; -0.000001 rho0 anti-K0 eta' PHSP; -0.000010 rho0 K- pi+ PHSP; -0.000005 omega anti-K0 pi0 PHSP; -0.000002 omega anti-K0 eta PHSP; -0.000001 omega anti-K0 eta' PHSP; -0.000005100 omega K- pi+ PHSP; #[Reconstructed PDG2011] -0.000010 pi+ pi0 pi- anti-K0 PHSP; -0.000005 pi+ eta pi- anti-K0 PHSP; -0.000010 pi0 pi0 pi0 anti-K0 PHSP; -0.000005 pi0 pi0 eta anti-K0 PHSP; -0.000002 pi0 eta eta anti-K0 PHSP; -0.000002 pi0 pi0 eta' anti-K0 PHSP; -0.000001 pi0 eta eta' anti-K0 PHSP; -0.000010 pi+ pi- pi+ K- PHSP; -0.000010 pi0 pi0 pi+ K- PHSP; -0.000005 pi0 eta pi+ K- PHSP; -0.000002 eta eta pi+ K- PHSP; -0.000002 pi0 eta' pi+ K- PHSP; -0.000001 eta eta' pi+ K- PHSP; -0.000010 rho0 anti-K_0*0 PHSP; -0.000020 rho+ K_0*- PHSP; -0.000010 pi- pi+ anti-K_0*0 PHSP; -0.000010 pi0 pi0 anti-K_0*0 PHSP; -0.000010 pi+ pi0 K_0*- PHSP; -0.000005 anti-K*0 f_0 SVS; -0.000010 a_10 anti-K0 SVS; -0.000016000 a_1+ K- SVS; #[Reconstructed PDG2011] -0.000010 b_10 anti-K0 SVS; -0.0000074 b_1+ K- SVS; -0.000005 anti-K*0 a_00 SVS; -0.000005 K*- a_0+ SVS; -#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ -0.000001280 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000001 K*+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000001 phi rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000001 phi pi- pi+ PHSP; -0.000001 K+ K- rho0 PHSP; -0.000001 K0 anti-K0 rho0 PHSP; -0.000001 K+ K- omega PHSP; -0.000001 K0 anti-K0 omega PHSP; -0.000001 K+ anti-K0 rho- PHSP; -0.000001 K- K0 rho+ PHSP; -0.000001 K+ K- pi- pi+ PHSP; -0.000001 K+ K- pi0 pi0 PHSP; -0.0000005 K+ K- pi0 eta PHSP; -0.0000002 K+ K- eta eta PHSP; -0.0000002 K+ K- pi0 eta' PHSP; -0.0000001 K+ K- eta eta' PHSP; -0.000001 K0 anti-K0 pi- pi+ PHSP; -0.000001 K0 anti-K0 pi0 pi0 PHSP; -0.0000005 K0 anti-K0 pi0 eta PHSP; -0.0000002 K0 anti-K0 eta eta PHSP; -0.0000002 K0 anti-K0 pi0 eta' PHSP; -0.0000001 K0 anti-K0 eta eta' PHSP; -0.000001 K*+ K- pi0 PHSP; -0.000001 K*- K+ pi0 PHSP; -0.000001 K*0 anti-K0 pi0 PHSP; -0.000001 K0 anti-K*0 pi0 PHSP; -0.000003320 K+ anti-K*0 pi- PHSP; #[Reconstructed PDG2011] -0.000001 K*+ anti-K0 pi- PHSP; -0.0000033 K- K*0 pi+ PHSP; -0.000001 K*- K0 pi+ PHSP; -#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- -0.000009800 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000010 phi K- pi+ PHSP; -0.000010 phi anti-K0 pi0 PHSP; -0.000007 phi anti-K0 eta PHSP; -0.000017700 K- K+ anti-K*0 PHSP; #[Reconstructed PDG2011] -0.000010 K- K*+ anti-K0 PHSP; -0.000010 K*- K+ anti-K0 PHSP; -0.000010 K+ K- K- pi+ PHSP; -0.000010 K+ K- anti-K0 pi0 PHSP; -0.000005 K+ K- anti-K0 eta PHSP; -0.000010 K0 anti-K0 anti-K0 pi0 PHSP; -0.000005 K0 anti-K0 anti-K0 eta PHSP; -0.000003900 phi anti-K_0*0 PHSP; #[Reconstructed PDG2011] -0.000010 K- K+ anti-K_0*0 PHSP; -0.000010 K- K_0*+ anti-K0 PHSP; -0.000010 K_0*- K+ anti-K0 PHSP; -0.000002 phi anti-K'_10 PHSP; -0.000002 K- K+ anti-K'_10 PHSP; -#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- -0.0000001 phi phi SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000001 phi K+ K- PHSP; -0.0000001 phi K0 anti-K0 PHSP; -0.0000001 K+ K- K+ K- PHSP; -0.0000001 K0 anti-K0 K+ K- PHSP; -0.0000001 K0 anti-K0 K0 anti-K0 PHSP; -#5-body modes from Jim Smith - 1/30/05 -#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- -0.000010 rho0 rho0 pi0 PHSP; -0.000005 rho0 rho0 eta PHSP; -0.000002 rho0 rho0 eta' PHSP; -0.000010 omega rho0 pi0 PHSP; -0.000005 omega rho0 eta PHSP; -0.000002 omega rho0 eta' PHSP; -0.000010 rho+ rho- pi0 PHSP; -0.000005 rho+ rho- eta PHSP; -0.000002 rho+ rho- eta' PHSP; -0.000010 rho0 rho+ pi- PHSP; -0.000010 omega rho+ pi- PHSP; -0.000002 rho0 pi+ pi- pi0 PHSP; -0.000001 rho0 pi+ pi- eta PHSP; -0.000001 rho0 pi+ pi- eta' PHSP; -0.000002 rho0 pi0 pi0 pi0 PHSP; -0.000001 rho0 pi0 eta pi0 PHSP; -0.000001 rho0 pi0 eta' pi0 PHSP; -0.000002 omega pi+ pi- pi0 PHSP; -0.000001 omega pi+ pi- eta PHSP; -0.000001 omega pi+ pi- eta' PHSP; -0.000002 omega pi0 pi0 pi0 PHSP; -0.000001 omega pi0 eta pi0 PHSP; -0.000001 omega pi0 eta' pi0 PHSP; -0.000002 rho+ pi- pi+ pi- PHSP; -0.000002 rho+ pi- pi0 pi0 PHSP; -0.000001 rho+ pi- pi0 eta PHSP; -0.000001 rho+ pi- pi0 eta' PHSP; -0.000002 rho- pi+ pi+ pi- PHSP; -0.000002 rho- pi+ pi0 pi0 PHSP; -0.000001 rho- pi+ pi0 eta PHSP; -0.000001 rho- pi+ pi0 eta' PHSP; -0.000001 pi+ pi- pi+ pi- pi0 PHSP; -0.0000005 pi+ pi- pi+ pi- eta PHSP; -0.0000002 pi+ pi- pi+ pi- eta' PHSP; -0.000001 pi+ pi- pi0 pi0 pi0 PHSP; -0.0000005 pi+ pi- pi0 pi0 eta PHSP; -0.0000002 pi+ pi- pi0 pi0 eta' PHSP; -0.0000005 pi0 pi0 pi0 pi0 pi0 PHSP; -0.0000002 pi0 pi0 pi0 pi0 eta PHSP; -0.0000001 pi0 pi0 pi0 pi0 eta' PHSP; -0.000010 a_1+ rho- PHSP; -0.000010 a_1- rho+ PHSP; -0.000010 a_10 rho0 PHSP; -0.000010 a_10 omega PHSP; -0.000010 a_1+ pi- pi0 PHSP; -0.000005 a_1+ pi- eta PHSP; -0.000002 a_1+ pi- eta' PHSP; -0.000010 a_10 pi+ pi- PHSP; -0.000010 a_10 pi0 pi0 PHSP; -0.000005 a_10 pi0 eta PHSP; -0.000002 a_10 pi0 eta' PHSP; -0.000010 a_1- pi+ pi0 PHSP; -0.000005 a_1- pi+ eta PHSP; -0.000002 a_1- pi+ eta' PHSP; -0.000010 rho+ f_0 pi- PHSP; -0.000010 rho- f_0 pi+ PHSP; -0.000010 rho0 f_0 pi0 PHSP; -0.000005 rho0 f_0 eta PHSP; -0.000002 rho0 f_0 eta' PHSP; -0.000010 omega f_0 pi0 PHSP; -0.000010 rho+ a_00 pi- PHSP; -0.000010 rho+ a_0- pi0 PHSP; -0.000005 rho+ a_0- eta PHSP; -0.000002 rho+ a_0- eta' PHSP; -0.000010 rho0 a_0+ pi- PHSP; -0.000010 rho0 a_0- pi+ PHSP; -0.000010 rho0 a_00 pi0 PHSP; -0.000005 rho0 a_00 eta PHSP; -0.000002 rho0 a_00 eta' PHSP; -0.000010 rho- a_00 pi+ PHSP; -0.000010 rho- a_0+ pi0 PHSP; -0.000005 rho- a_0+ eta PHSP; -0.000002 rho- a_0+ eta' PHSP; -0.000002 f_0 pi+ pi- pi0 PHSP; -0.000001 f_0 pi+ pi- eta PHSP; -0.000001 f_0 pi+ pi- eta' PHSP; -0.000002 f_0 pi0 pi0 pi0 PHSP; -0.000001 f_0 pi0 pi0 eta PHSP; -0.000001 f_0 pi0 pi0 eta' PHSP; -0.000001 a_00 pi+ pi- pi0 PHSP; -0.000001 a_00 pi0 pi0 pi0 PHSP; -0.000001 a_0+ pi- pi+ pi- PHSP; -0.000001 a_0+ pi- pi0 pi0 PHSP; -0.000001 a_0- pi+ pi+ pi- PHSP; -0.000001 a_0- pi+ pi0 pi0 PHSP; -#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- -0.000010 rho0 K*- pi+ PHSP; -0.000010 rho+ K*- pi0 PHSP; -0.000005 rho+ K*- eta PHSP; -0.000002 rho+ K*- eta' PHSP; -0.000010 rho0 anti-K*0 pi0 PHSP; -0.000005 rho0 anti-K*0 eta PHSP; -0.000002 rho0 anti-K*0 eta' PHSP; -0.000010 rho- anti-K*0 pi+ PHSP; -0.000010 rho+ anti-K*0 pi- PHSP; -0.000010 omega K*- pi+ PHSP; -0.000010 omega anti-K*0 pi0 PHSP; -0.000005 omega anti-K*0 eta PHSP; -0.000002 omega anti-K*0 eta' PHSP; -0.000010 pi+ pi- K*- pi+ PHSP; -0.000010 pi+ pi0 K*- pi0 PHSP; -0.000005 pi+ pi0 K*- eta PHSP; -0.000002 pi+ pi0 K*- eta' PHSP; -0.000010 pi+ pi- anti-K*0 pi0 PHSP; -0.000005 pi+ pi- anti-K*0 eta PHSP; -0.000002 pi+ pi- anti-K*0 eta' PHSP; -0.000010 pi0 pi0 anti-K*0 pi0 PHSP; -0.000005 pi0 pi0 anti-K*0 eta PHSP; -0.000002 pi0 pi0 anti-K*0 eta' PHSP; -0.000010 rho- K- pi+ pi+ PHSP; -0.000010 rho0 K- pi+ pi0 PHSP; -0.000005 rho0 K- pi+ eta PHSP; -0.000002 rho0 K- pi+ eta' PHSP; -0.000010 rho+ K- pi+ pi- PHSP; -0.000010 rho+ K- pi0 pi0 PHSP; -0.000005 rho+ K- pi0 eta PHSP; -0.000002 rho+ K- pi0 eta' PHSP; - -0.000010 rho0 anti-K0 pi+ pi- PHSP; -0.000010 rho0 anti-K0 pi0 pi0 PHSP; -0.000005 rho0 anti-K0 pi0 eta PHSP; -0.000002 rho0 anti-K0 pi0 eta' PHSP; -0.000010 rho- anti-K0 pi+ pi0 PHSP; -0.000005 rho- anti-K0 pi+ eta PHSP; -0.000002 rho- anti-K0 pi+ eta' PHSP; -0.000010 rho+ anti-K0 pi- pi0 PHSP; -0.000005 rho+ anti-K0 pi- eta PHSP; -0.000002 rho+ anti-K0 pi- eta' PHSP; -0.000010 omega K- pi+ pi0 PHSP; -0.000005 omega K- pi+ eta PHSP; -0.000002 omega K- pi+ eta' PHSP; -0.000010 omega anti-K0 pi+ pi- PHSP; -0.000010 omega anti-K0 pi0 pi0 PHSP; -0.000005 omega anti-K0 pi0 eta PHSP; -0.000002 omega anti-K0 pi0 eta' PHSP; -0.000002 pi+ pi- pi+ K- pi0 PHSP; -0.000001 pi+ pi- pi+ K- eta PHSP; -0.000001 pi+ pi- pi+ K- eta' PHSP; -0.000002 pi0 pi0 pi+ K- pi0 PHSP; -0.000001 pi0 pi0 pi+ K- eta PHSP; -0.000001 pi0 pi0 pi+ K- eta' PHSP; -0.000002 pi+ pi- pi+ anti-K0 pi- PHSP; -0.000002 pi+ pi- pi0 anti-K0 pi0 PHSP; -0.000001 pi+ pi- pi0 anti-K0 eta PHSP; -0.000001 pi+ pi- pi0 anti-K0 eta' PHSP; -0.000002 pi0 pi0 pi0 anti-K0 pi0 PHSP; -0.000001 pi0 pi0 pi0 anti-K0 eta PHSP; -0.000001 pi0 pi0 pi0 anti-K0 eta' PHSP; -0.000010 rho+ anti-K_0*0 pi- PHSP; -0.000010 rho0 anti-K_0*0 pi0 PHSP; -0.000005 rho0 anti-K_0*0 eta PHSP; -0.000002 rho0 anti-K_0*0 eta' PHSP; -0.000010 rho- anti-K_0*0 pi+ PHSP; -0.000010 rho+ K_0*- pi0 PHSP; -0.000005 rho+ K_0*- eta PHSP; -0.000002 rho+ K_0*- eta' PHSP; -0.000010 rho0 K_0*- pi+ PHSP; -0.000010 pi+ pi- K_0*- pi+ PHSP; -0.000010 pi+ pi0 K_0*- pi0 PHSP; -0.000005 pi+ pi0 K_0*- eta PHSP; -0.000002 pi+ pi0 K_0*- eta' PHSP; -0.000010 pi+ pi- anti-K_0*0 pi0 PHSP; -0.000005 pi+ pi- anti-K_0*0 eta PHSP; -0.000002 pi+ pi- anti-K_0*0 eta' PHSP; -0.000010 pi0 pi0 anti-K_0*0 pi0 PHSP; -0.000005 pi0 pi0 anti-K_0*0 eta PHSP; -0.000005 pi0 pi0 anti-K_0*0 eta' PHSP; -0.000010 K*- f_0 pi+ PHSP; -0.000010 anti-K*0 f_0 pi0 PHSP; -0.000005 anti-K*0 f_0 eta PHSP; -0.000002 anti-K*0 f_0 eta' PHSP; -0.000010 a_1+ anti-K0 pi- PHSP; -0.000020 a_10 anti-K*0 PHSP; -0.000010 a_10 K- pi+ PHSP; -0.000010 a_10 anti-K0 pi0 PHSP; -0.000020 a_1+ K*- PHSP; -0.000010 a_1+ K- pi0 PHSP; -0.000010 a_1- anti-K0 pi+ PHSP; -0.000005 K*- a_00 pi+ PHSP; -0.000005 K*- a_0+ pi0 PHSP; -0.000002 K*- a_0+ eta PHSP; -0.000001 K*- a_0+ eta' PHSP; -0.000005 anti-K*0 a_0+ pi- PHSP; -0.000005 anti-K*0 a_00 pi0 PHSP; -0.000002 anti-K*0 a_00 eta PHSP; -0.000001 anti-K*0 a_00 eta' PHSP; -#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ -0.000001 K*- K*0 pi+ PHSP; -0.000001 K*+ anti-K*0 pi- PHSP; -0.000001 K*- K*+ pi0 PHSP; -0.0000005 K*- K*+ eta PHSP; -0.0000002 K*- K*+ eta' PHSP; -0.000001 K*0 anti-K*0 pi0 PHSP; -0.0000005 K*0 anti-K*0 eta PHSP; -0.0000002 K*0 anti-K*0 eta' PHSP; -0.000001 phi rho+ pi- PHSP; -0.000001 phi rho- pi+ PHSP; -0.000001 phi rho0 pi0 PHSP; -0.0000005 phi rho0 eta PHSP; -0.0000002 phi rho0 eta' PHSP; -0.000001 phi omega pi0 PHSP; -0.000001 phi f_0 pi0 PHSP; -0.000001 phi pi+ pi- pi0 PHSP; -0.0000005 phi pi+ pi- eta PHSP; -0.0000002 phi pi+ pi- eta' PHSP; -0.000001 phi pi0 pi0 pi0 PHSP; -0.0000005 phi pi0 pi0 eta PHSP; -0.0000002 phi pi0 pi0 eta' PHSP; -0.000001 K0 K- rho0 pi+ PHSP; -0.000001 K0 K- rho+ pi0 PHSP; -0.0000005 K0 K- rho+ eta PHSP; -0.0000002 K0 K- rho+ eta' PHSP; -0.000001 K0 K- omega pi+ PHSP; -0.000001 K0 K- f_0 pi+ PHSP; -0.000001 K+ K- rho+ pi- PHSP; -0.000001 K+ K- rho- pi+ PHSP; -0.000001 K+ K- rho0 pi0 PHSP; -0.0000005 K+ K- rho0 eta PHSP; -0.0000002 K+ K- rho0 eta' PHSP; -0.000001 K+ K- omega pi0 PHSP; -0.0000005 K+ K- omega eta PHSP; -0.0000002 K+ K- omega eta' PHSP; -0.000001 K+ K- f_0 pi0 PHSP; -0.000001 K0 anti-K0 rho+ pi- PHSP; -0.000001 K0 anti-K0 rho- pi+ PHSP; -0.000001 K0 anti-K0 rho0 pi0 PHSP; -0.0000005 K0 anti-K0 rho0 eta PHSP; -0.0000002 K0 anti-K0 rho0 eta' PHSP; -0.000001 K0 anti-K0 omega pi0 PHSP; -0.000001 K0 anti-K0 f_0 pi0 PHSP; -0.000001 anti-K0 K+ rho0 pi- PHSP; -0.000001 anti-K0 K+ rho- pi0 PHSP; -0.0000005 anti-K0 K+ rho- eta PHSP; -0.0000002 anti-K0 K+ rho- eta' PHSP; -0.000001 anti-K0 K+ omega pi- PHSP; -0.000001 anti-K0 K+ f_0 pi- PHSP; -0.0000002 K0 K- pi+ pi+ pi- PHSP; -0.0000002 K0 K- pi+ pi0 pi0 PHSP; -0.0000001 K0 K- pi+ pi0 eta PHSP; -0.0000001 K0 K- pi+ pi0 eta' PHSP; -0.0000002 K+ K- pi+ pi- pi0 PHSP; -0.0000001 K+ K- pi+ pi- eta PHSP; -0.0000001 K+ K- pi+ pi- eta' PHSP; -0.0000002 K+ K- pi0 pi0 pi0 PHSP; -0.0000001 K+ K- pi0 pi0 eta PHSP; -0.0000001 K+ K- pi0 pi0 eta' PHSP; -0.0000002 K0 anti-K0 pi+ pi- pi0 PHSP; -0.0000001 K0 anti-K0 pi+ pi- eta PHSP; -0.0000001 K0 anti-K0 pi+ pi- eta' PHSP; -0.0000002 K0 anti-K0 pi0 pi0 pi0 PHSP; -0.0000001 K0 anti-K0 pi0 pi0 eta PHSP; -0.0000001 K0 anti-K0 pi0 pi0 eta' PHSP; -0.0000002 anti-K0 K+ pi- pi+ pi- PHSP; -0.0000002 anti-K0 K+ pi- pi0 pi0 PHSP; -0.0000001 anti-K0 K+ pi- pi0 eta PHSP; -0.0000001 anti-K0 K+ pi- pi0 eta' PHSP; -0.000001 K*0 K- pi+ pi0 PHSP; -0.0000005 K*0 K- pi+ eta PHSP; -0.0000002 K*0 K- pi+ eta' PHSP; -0.000001 K*- K0 pi+ pi0 PHSP; -0.0000005 K*- K0 pi+ eta PHSP; -0.0000002 K*- K0 pi+ eta' PHSP; -0.000001 K*+ K- pi+ pi- PHSP; -0.000001 K*+ K- pi0 pi0 PHSP; -0.0000005 K*+ K- pi0 eta PHSP; -0.0000002 K*+ K- pi0 eta' PHSP; -0.000001 K*- K+ pi+ pi- PHSP; -0.000001 K*- K+ pi0 pi0 PHSP; -0.0000005 K*- K+ pi0 eta PHSP; -0.0000002 K*- K+ pi0 eta' PHSP; -0.000001 K*0 anti-K0 pi+ pi- PHSP; -0.000001 K*0 anti-K0 pi0 pi0 PHSP; -0.0000005 K*0 anti-K0 pi0 eta PHSP; -0.0000002 K*0 anti-K0 pi0 eta' PHSP; -0.000001 K0 anti-K*0 pi+ pi- PHSP; -0.000001 K0 anti-K*0 pi0 pi0 PHSP; -0.0000005 K0 anti-K*0 pi0 eta PHSP; -0.0000002 K0 anti-K*0 pi0 eta' PHSP; -0.000001 K+ anti-K*0 pi- pi0 PHSP; -0.0000005 K+ anti-K*0 pi- eta PHSP; -0.0000002 K+ anti-K*0 pi- eta' PHSP; -0.000001 K*+ anti-K0 pi- pi0 PHSP; -0.0000005 K*+ anti-K0 pi- eta PHSP; -0.0000002 K*+ anti-K0 pi- eta' PHSP; -#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- -0.000010 phi K*- pi+ PHSP; -0.000010 phi anti-K*0 pi0 PHSP; -0.000005 phi anti-K*0 eta PHSP; -0.000002 phi anti-K*0 eta' PHSP; -0.000010 phi K- rho+ PHSP; -0.000010 phi anti-K0 rho0 PHSP; -0.000010 phi anti-K0 omega PHSP; -0.000010 phi anti-K0 f_0 PHSP; -0.000010 phi anti-K0 pi+ pi- PHSP; -0.000010 phi anti-K0 pi0 pi0 PHSP; -0.000005 phi anti-K0 pi0 eta PHSP; -0.000002 phi anti-K0 pi0 eta' PHSP; -0.000010 phi K- pi+ pi0 PHSP; -0.000005 phi K- pi+ eta PHSP; -0.000002 phi K- pi+ eta' PHSP; -0.000010 K+ K- K*- pi+ PHSP; -0.000010 K- K*+ K- pi+ PHSP; -0.000010 K- K*0 anti-K0 pi+ PHSP; -0.000010 K- K0 anti-K*0 pi+ PHSP; -0.000010 K0 K*- anti-K0 pi+ PHSP; -0.000010 K- K+ K- rho+ PHSP; -0.000010 K- K+ anti-K0 rho0 PHSP; -0.000010 K- K+ anti-K0 omega PHSP; -0.000010 K- K+ anti-K0 f_0 PHSP; -0.000010 K+ K- K- pi+ pi0 PHSP; -0.000005 K+ K- K- pi+ eta PHSP; -0.000002 K+ K- K- pi+ eta' PHSP; -0.000010 K+ K- anti-K0 pi+ pi- PHSP; -0.000010 K+ K- anti-K0 pi0 pi0 PHSP; -0.000005 K+ K- anti-K0 pi0 eta PHSP; -0.000005 K+ K- anti-K0 pi0 eta' PHSP; -0.000010 K0 anti-K0 K- pi+ pi0 PHSP; -0.000005 K0 anti-K0 K- pi+ eta PHSP; -0.000002 K0 anti-K0 K- pi+ eta' PHSP; -0.000010 K0 anti-K0 anti-K0 pi+ pi- PHSP; -0.000010 K0 anti-K0 anti-K0 pi0 pi0 PHSP; -0.000005 K0 anti-K0 anti-K0 pi0 eta PHSP; -0.000002 K0 anti-K0 anti-K0 pi0 eta' PHSP; -0.000010 phi K_0*- pi+ PHSP; -0.000010 phi anti-K_0*0 pi0 PHSP; -0.000010 K+ K- K_0*- pi+ PHSP; -0.000010 K+ K- anti-K_0*0 pi0 PHSP; -0.000005 K+ K- anti-K_0*0 eta PHSP; -0.000002 K+ K- anti-K_0*0 eta' PHSP; -0.000010 K- K- K_0*+ pi+ PHSP; -0.000010 K- anti-K_0*0 K0 pi+ PHSP; -0.000010 K- K_0*0 anti-K0 pi+ PHSP; -0.000010 K0 anti-K0 K_0*- pi+ PHSP; -0.000010 K0 anti-K0 anti-K_0*0 pi0 PHSP; -0.000005 K0 anti-K0 anti-K_0*0 eta PHSP; -0.000002 K0 anti-K0 anti-K_0*0 eta' PHSP; -0.000010 anti-K0 anti-K0 K_0*0 pi0 PHSP; -0.000005 anti-K0 anti-K0 K_0*0 eta PHSP; -0.000002 anti-K0 anti-K0 K_0*0 eta' PHSP; -0.000002 phi K'_1- pi+ PHSP; -0.000002 phi anti-K'_10 pi0 PHSP; -0.000001 phi anti-K'_10 eta PHSP; -0.000001 phi anti-K'_10 eta' PHSP; -0.000002 K- K+ K'_1- pi+ PHSP; -0.000002 K- K+ anti-K'_10 pi0 PHSP; -0.000001 K- K+ anti-K'_10 eta PHSP; -0.000001 K- K+ anti-K'_10 eta' PHSP; -0.000002 K- K- K'_1+ pi+ PHSP; -0.000002 K0 anti-K0 anti-K'_10 pi0 PHSP; -0.000001 K0 anti-K0 anti-K'_10 eta PHSP; -0.000001 K0 anti-K0 anti-K'_10 eta' PHSP; -0.000002 anti-K0 anti-K0 K'_10 pi0 PHSP; -0.000001 anti-K0 anti-K0 K'_10 eta PHSP; -0.000001 anti-K0 anti-K0 K'_10 eta' PHSP; -#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ -0.000004100 phi phi anti-K0 PHSP; #[Reconstructed PDG2011] -0.0000001 phi phi pi0 PHSP; -0.000001 phi K+ K- anti-K0 PHSP; -0.000001 phi K0 anti-K0 anti-K0 PHSP; -0.0000001 phi K+ K- pi0 PHSP; -0.0000001 phi K0 anti-K0 pi0 PHSP; -0.0000001 phi anti-K0 K+ pi- PHSP; -0.0000001 phi K0 K- pi+ PHSP; -0.0000001 K+ K- K+ K- anti-K0 PHSP; -0.0000001 K0 anti-K0 K+ K- anti-K0 PHSP; -0.0000001 K+ K- K+ K- pi0 PHSP; -0.0000001 K+ K- K0 anti-K0 pi0 PHSP; -0.0000001 K+ K- K+ anti-K0 pi- PHSP; -0.0000001 K+ K- K0 K- pi+ PHSP; -0.0000001 K0 anti-K0 K0 anti-K0 pi0 PHSP; -0.0000001 K0 anti-K0 anti-K0 K+ pi- PHSP; -0.0000001 K0 anti-K0 K0 K- pi+ PHSP; -#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ -0.000003 phi phi anti-K*0 PHSP; -0.000001 phi K+ K- anti-K*0 PHSP; -0.000001 phi K0 anti-K0 anti-K*0 PHSP; -0.000001 phi anti-K0 K- K*+ PHSP; -0.000001 phi anti-K0 anti-K0 K*0 PHSP; -0.0000001 phi K+ K- K- pi+ PHSP; -0.0000001 phi K+ K- anti-K0 pi0 PHSP; -0.0000001 phi K0 anti-K0 K- pi+ PHSP; -0.0000001 phi K0 anti-K0 anti-K0 pi0 PHSP; -#--- 6-body a1a1 ------------ -0.000050 a_10 a_10 PHSP; -0.000050 a_1+ a_1- PHSP; -# -# PR LHCb: 7 Nov 2005 Add K*0 pi0 pi0 -0.0000067 K*0 pi0 pi0 PHSP; -# -# B -> cc= s -# -# Charmonium states - updated from Lange's recommendations (august 23,2000) -# Based on new BABAR results I'm making the following changes (Lange, March 13, 2001 -# J/psi K0 was 10, now 9 x 10^-4 -# J/psi pi0 was 2.5, now 2.0 x 10^-4 -# J/psi Kstar was 15, now 13 -# Fix chic1 KS CP eigenstate -# adding J/psi rho and omega - for lack of better thing will use the Kstar helicity amplitudes. -# Psi2sKs 30 ->31 -# chic1 Kstar: 12 ->6 -0.000435500 J/psi K_S0 SVS; #[Reconstructed PDG2011] -0.000435500 J/psi K_L0 SVS; #[Reconstructed PDG2011] -# -# -0.001330000 J/psi anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] -0.000017600 J/psi pi0 SVS; #[Reconstructed PDG2011] -0.000027000 J/psi rho0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] -0.000030 J/psi omega SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; -0.000000000 J/psi K- pi+ PHSP; #[Reconstructed PDG2011] -0.0001 J/psi anti-K0 pi0 PHSP; -#rl0.0007 J/psi anti-K0 pi+ pi- PHSP; -#rl0.00035 J/psi anti-K0 pi0 pi0 PHSP; -#rl0.00035 J/psi K- pi+ pi0 PHSP; -0.001300000 J/psi anti-K_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] -0.0001 J/psi anti-K'_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; -0.0005 J/psi anti-K_2*0 PHSP; -0.000094000 J/psi phi anti-K0 PHSP; #[Reconstructed PDG2011] -# -0.000310000 psi(2S) K_S0 SVS; #[Reconstructed PDG2011] -0.000310000 psi(2S) K_L0 SVS; #[Reconstructed PDG2011] -# -# -0.000610000 psi(2S) anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] - -0.0004 psi(2S) K- pi+ PHSP; -0.0002 psi(2S) anti-K0 pi0 PHSP; -0.0002 psi(2S) anti-K0 pi+ pi- PHSP; -0.0001 psi(2S) anti-K0 pi0 pi0 PHSP; -0.0001 psi(2S) K- pi+ pi0 PHSP; -0.0004 psi(2S) anti-K_10 PHSP; - -# -0.000445000 eta_c K_S0 PHSP; #[Reconstructed PDG2011] -0.000445000 eta_c K_L0 PHSP; #[Reconstructed PDG2011] -# -# -0.000610000 anti-K*0 eta_c SVS; #[Reconstructed PDG2011] -0.0002 eta_c K- pi+ PHSP; -0.0001 eta_c anti-K0 pi0 PHSP; -0.0002 eta_c anti-K0 pi+ pi- PHSP; -0.0001 eta_c anti-K0 pi0 pi0 PHSP; -0.0001 eta_c K- pi+ pi0 PHSP; -# -0.00024 eta_c(2S) K_S0 PHSP; -0.00024 eta_c(2S) K_L0 PHSP; -# -# -0.00066 anti-K*0 eta_c(2S) SVS; -0.00008 eta_c(2S) K- pi+ PHSP; -0.00005 eta_c(2S) anti-K0 pi0 PHSP; -0.00008 eta_c(2S) anti-K0 pi+ pi- PHSP; -0.00005 eta_c(2S) anti-K0 pi0 pi0 PHSP; -0.00005 eta_c(2S) K- pi+ pi0 PHSP; -# -0.000070000 chi_c0 K_S0 PHSP; #[Reconstructed PDG2011] -0.000070000 chi_c0 K_L0 PHSP; #[Reconstructed PDG2011] -# -# -0.00030 anti-K*0 chi_c0 SVS; -0.0002 chi_c0 K- pi+ PHSP; -0.0001 chi_c0 anti-K0 pi0 PHSP; -0.0002 chi_c0 anti-K0 pi+ pi- PHSP; -0.0001 chi_c0 anti-K0 pi0 pi0 PHSP; -0.0001 chi_c0 K- pi+ pi0 PHSP; -# -0.000195000 chi_c1 K_S0 SVS; #[Reconstructed PDG2011] -0.000195000 chi_c1 K_L0 SVS; #[Reconstructed PDG2011] -# -# -0.000222000 chi_c1 anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] -0.0004 chi_c1 K- pi+ PHSP; -0.0002 chi_c1 anti-K0 pi0 PHSP; -0.0004 chi_c1 anti-K0 pi+ pi- PHSP; -0.0002 chi_c1 anti-K0 pi0 pi0 PHSP; -0.0002 chi_c1 K- pi+ pi0 PHSP; -# -0.00005 chi_c2 K_S0 STS; -0.00005 chi_c2 K_L0 STS; -# -# -0.00003 chi_c2 anti-K*0 PHSP; -0.0002 chi_c2 K- pi+ PHSP; -0.0001 chi_c2 anti-K0 pi0 PHSP; -0.0002 chi_c2 anti-K0 pi+ pi- PHSP; -0.0001 chi_c2 anti-K0 pi0 pi0 PHSP; -0.0001 chi_c2 K- pi+ pi0 PHSP; -# -0.00024 psi(3770) K_S0 SVS; -0.00024 psi(3770) K_L0 SVS; -# -# -0.00048 psi(3770) anti-K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.00014 psi(3770) K- pi+ PHSP; -0.00014 psi(3770) anti-K0 pi0 PHSP; -0.00014 psi(3770) anti-K0 pi+ pi- PHSP; -0.00007 psi(3770) anti-K0 pi0 pi0 PHSP; -0.00007 psi(3770) K- pi+ pi0 PHSP; -0.00029 psi(3770) anti-K_10 PHSP; -# -# b-> c (dc=) -# -0.000211000 D- D+ PHSP; #[Reconstructed PDG2011] -# See Ref [B1] for the next 3: -0.000305 D*+ D- SVS; -0.000610000 D*- D+ SVS; #[Reconstructed PDG2011] -0.000820000 D*+ D*- SVV_HELAMP 0.47 0.0 0.96 0.0 0.56 0.0; #[Reconstructed PDG2011] - -# -# b -> c (sc=) --> D Ds X Sum = 10% -# -0.007200000 D+ D_s- PHSP; #[Reconstructed PDG2011] -0.008000000 D*+ D_s- SVS; #[Reconstructed PDG2011] -0.007400000 D_s*- D+ SVS; #[Reconstructed PDG2011] -0.017700000 D*+ D_s*- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] -0.0006 D'_1+ D_s- SVS; -0.0012 D'_1+ D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0012 D_1+ D_s- SVS; -0.0024 D_1+ D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0042 D_2*+ D_s- STS; -0.0040 D_2*+ D_s*- PHSP; -# -0.0018 D_s- D+ pi0 PHSP; -0.0037 D_s- D0 pi+ PHSP; -0.0018 D_s*- D+ pi0 PHSP; -0.0037 D_s*- D0 pi+ PHSP; -0.0030 D_s- D+ pi+ pi- PHSP; -0.0022 D_s- D+ pi0 pi0 PHSP; -0.0022 D_s- D0 pi+ pi0 PHSP; -0.0030 D_s*- D+ pi+ pi- PHSP; -0.0022 D_s*- D+ pi0 pi0 PHSP; -0.0022 D_s*- D0 pi+ pi0 PHSP; -# -# b -> c (sc=) --> D D= K X Sum = 8% -# Update: Ref. [B1] -# -# External W-emission amplitude -0.001700000 D+ anti-D0 K- PHSP; #[Reconstructed PDG2011] -0.004600000 D+ anti-D*0 K- PHSP; #[Reconstructed PDG2011] -0.003100000 D*+ anti-D0 K- PHSP; #[Reconstructed PDG2011] -0.011800000 D*+ anti-D*0 K- PHSP; #[Reconstructed PDG2011] -# External+internal W-emission amplitude -0.0015 D+ D- anti-K0 PHSP; -0.0018 D*+ D- anti-K0 PHSP; -0.0047 D+ D*- anti-K0 PHSP; -0.007800000 D*+ D*- anti-K0 PHSP; #[Reconstructed PDG2011] -# Internal W-emission amplitude (color suppressed modes) -0.0005 D0 anti-D0 anti-K0 PHSP; -0.000120000 D*0 anti-D0 anti-K0 PHSP; #[Reconstructed PDG2011] -0.0015 D0 anti-D*0 anti-K0 PHSP; -0.0015 D*0 anti-D*0 anti-K0 PHSP; - -0.0025 D+ anti-D0 K*- PHSP; -0.0025 D*+ anti-D0 K*- PHSP; -0.0025 D+ anti-D*0 K*- PHSP; -0.0050 D*+ anti-D*0 K*- PHSP; -# -0.0025 D+ D- anti-K*0 PHSP; -0.0025 D*+ D- anti-K*0 PHSP; -0.0025 D+ D*- anti-K*0 PHSP; -0.0050 D*+ D*- anti-K*0 PHSP; -# -0.0005 anti-D0 D0 anti-K*0 PHSP; -0.0005 anti-D0 D*0 anti-K*0 PHSP; -0.0005 anti-D*0 D0 anti-K*0 PHSP; -0.0010 anti-D*0 D*0 anti-K*0 PHSP; -# -# -# B -> D(*) X Exclusive modes -# -0.002760000 D*+ pi- SVS; #[Reconstructed PDG2011] -0.002680000 D+ pi- PHSP; #[Reconstructed PDG2011] -0.007110000 rho- D+ SVS; #[Reconstructed PDG2011] -# -# D* rho HELAMP parameters taken from ICHEP 98-852. -0.006800000 rho- D*+ SVV_HELAMP 0.152 1.47 0.936 0 0.317 0.19; #[Reconstructed PDG2011] -0.0005 D+ pi- pi0 PHSP; -0.008200000 D*+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.000840000 D0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000620000 D*0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.0005 D*0 pi0 pi0 PHSP; -# -# D a1 updated Ref. [B1] -0.006000000 a_1- D+ SVS; #[Reconstructed PDG2011] -0.000000000 D+ rho0 pi- PHSP; #[Reconstructed PDG2011] -0.0011 D+ rho- pi0 PHSP; -0.002000000 D+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -0.0010 D+ pi0 pi- pi0 PHSP; -0.0010 D0 pi+ pi- pi0 PHSP; -0.0001 D0 pi0 pi0 pi0 PHSP; -# -# SVV_HELAMP for D* a1 taken from factorization. Recommandation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: -# updated Ref. [B1] -# October 26, 2004 Lange update -0.013000000 D*+ a_1- SVV_HELAMP 0.200 0.0 0.866 0.0 0.458 0.0; #[Reconstructed PDG2011] -# -0.005700000 D*+ rho0 pi- PHSP; #[Reconstructed PDG2011] -0.0010 D*+ rho- pi0 PHSP; -0.0000 D*+ pi+ pi- pi- PHSP; -0.0010 D*+ pi0 pi- pi0 PHSP; -0.0010 D*0 pi+ pi- pi0 PHSP; -0.0001 D*0 pi0 pi0 pi0 PHSP; -# -# B->D** pi and D** rho, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html -#further updates October 26, 2004 - Lange -# October 26, 2004 Lange update -# -0.0001 D_1+ pi- SVS; -0.0001 D'_1+ pi- SVS; -0.00006 D_0*+ pi- PHSP; -0.000215 D_2*+ pi- STS; -0.0004 D_1+ rho- PHSP; -0.0013 D'_1+ rho- PHSP; -0.0022 D_2*+ rho- PHSP; -# -# -# B->DK, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: -# update: Ref. [B1]: -# -0.000214000 D*+ K- SVS; #[Reconstructed PDG2011] -0.000200000 D+ K- PHSP; #[Reconstructed PDG2011] -0.000330000 D*+ K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; #[Reconstructed PDG2011] -0.000450000 K*- D+ SVS; #[Reconstructed PDG2011] -#more DK modes - October 26, 2004 -Lange -0.000036 D*0 K0 SVS; -0.000052 D0 K0 PHSP; -0.000042000 anti-K*0 D0 SVS; #[Reconstructed PDG2011] -0.00001 anti-K*0 anti-D0 SVS; -0.00004 D*0 anti-K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; -0.00001 anti-D*0 anti-K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; -# -# -# Color-suppressed modes. Br's are expectations from -# Phys. Rev. D57 (1998), 5363-5369, except for the eta' modes, which are set -# equal to the eta modes. SVV_HELAMP parameters are the same as in D*0 rho-, -# with phases set to 0. Recommendation http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/169.html: -# update: See Ref [B1]: -# further update October 26, 2004 Lange -# -0.000261000 D0 pi0 PHSP; #[Reconstructed PDG2011] -0.000170000 D*0 pi0 SVS; #[Reconstructed PDG2011] -# -0.000320000 rho0 D0 SVS; #[Reconstructed PDG2011] -0.00029 D*0 rho0 SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; -# -0.000202000 D0 eta PHSP; #[Reconstructed PDG2011] -0.000200000 D*0 eta SVS; #[Reconstructed PDG2011] -# -0.000125 D0 eta' PHSP; -0.000123000 D*0 eta' SVS; #[Reconstructed PDG2011] -# -0.000259000 omega D0 SVS; #[Reconstructed PDG2011] -0.000330000 D*0 omega SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; #[Reconstructed PDG2011] -# -# -#October 26, 2004 - Lange -0.0016 D_s0*- D+ PHSP; -0.0015 D*+ D_s0*- SVS; -0.003500000 D_s1- D+ SVS; #[Reconstructed PDG2011] -0.009300000 D*+ D_s1- SVV_HELAMP 0.4904 0. 0.7204 0. 0.4904 0.; #[Reconstructed PDG2011] -# -# Feb 2009 -# -0.00088 D+ K- anti-K*0 PHSP; -0.00129 D*+ K- anti-K*0 PHSP; -# -# Feb 2009 -# -0.002800000 D+ omega pi- PHSP; #[Reconstructed PDG2011] -0.002890000 D*+ omega pi- PHSP; #[Reconstructed PDG2011] -# -# Feb 2009 -# -0.00049 D+ K0 pi- PHSP; -0.0003 D*+ K0 pi- PHSP; -# -# Feb 2009 -# -0.00043 D'_s1- D+ PHSP; -0.00083 D'_s1- D*+ PHSP; -##### Already included above 0.0023 D_s1- D*+ PHSP; -# -# -# Lam_c X / Sigma_c X 6.0 % -# -#0.01000 cd_0 anti-ud_0 PYTHIA 23; -#0.03000 cd_1 anti-ud_1 PYTHIA 23; -0.010463563 cd_0 anti-ud_0 PYTHIA 23; #[Reconstructed PDG2011] -0.020927220 cd_1 anti-ud_1 PYTHIA 23; #[Reconstructed PDG2011] -# -# Xi_c X 2.5% -# -#0.00600 cs_0 anti-ud_0 PYTHIA 23; -#0.01800 cs_1 anti-ud_1 PYTHIA 23; -0.002853725 cs_0 anti-ud_0 PYTHIA 23; #[Reconstructed PDG2011] -0.005707449 cs_1 anti-ud_1 PYTHIA 23; #[Reconstructed PDG2011] -# -# PR LHCb Add p pbar mode -0.0000001 p+ anti-p- PHSP; -# -0.256690755 anti-u d c anti-d PYTHIA 48; #[Reconstructed PDG2011] -0.043756828 anti-u d c anti-d PYTHIA 25; #[Reconstructed PDG2011] -0.019975978 anti-u s c anti-d PYTHIA 23; #[Reconstructed PDG2011] -0.017122253 anti-u c d anti-d PYTHIA 48; #[Reconstructed PDG2011] -0.000856098 anti-u c s anti-d PYTHIA 48; #[Reconstructed PDG2011] -#lange - try to crank up the psi production.... -0.070391402 anti-c s c anti-d PYTHIA 13; #[Reconstructed PDG2011] -0.005707449 anti-c d c anti-d PYTHIA 13; #[Reconstructed PDG2011] -0.002853725 anti-u d u anti-d PYTHIA 48; #[Reconstructed PDG2011] -0.003804966 anti-c s u anti-d PYTHIA 48; #[Reconstructed PDG2011] -# JGS 11/5/02 This and similar a few lines above have been divided by two -# to solve a double-counting problem for this channel -0.001950007 anti-u u d anti-d PYTHIA 48; #[Reconstructed PDG2011] -0.000066610 anti-d d d anti-d PYTHIA 48; #[Reconstructed PDG2011] -0.000085600 anti-s s d anti-d PYTHIA 48; #[Reconstructed PDG2011] -0.002092675 anti-u u s anti-d PYTHIA 48; #[Reconstructed PDG2011] -0.001712197 anti-d d s anti-d PYTHIA 48; #[Reconstructed PDG2011] -0.001426862 anti-s s s anti-d PYTHIA 48; #[Reconstructed PDG2011] -0.004756208 s anti-d PYTHIA 32; #[Reconstructed PDG2011] -0.000490000 D+ anti-K0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000880000 D+ K- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000000 D*+ anti-K0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001290000 D*+ K- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.017600000 D*+ pi- pi- pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.004700000 D*+ pi- pi- pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000110000 D_s+ pi- anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000052000 D0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000046000 D0 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000006000 anti-D0 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000036000 D*0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.002700000 anti-D*0 pi- pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000890000 eta_c anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000871000 J/psi anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000310000 J/psi omega anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000009500 J/psi eta PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000019000 J/psi pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000460000 J/psi anti-K0 pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000540000 J/psi anti-K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000800000 J/psi K*- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000660000 J/psi anti-K*0 pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000170000 anti-K0 anti-D0 D0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000620000 psi(2S) anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000140000 chi_c0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000011200 chi_c1 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000390000 chi_c1 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000158000 chi_c1 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000011000 eta anti-K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000009600 eta anti-K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000016000 omega anti-K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000010100 omega anti-K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000004700 anti-K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000002700 f_2 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000001400 f_0 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000007500 anti-K_2*0 phi PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000007600 eta anti-K0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000004600 K- pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000019500 anti-K0 pi- pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000041000 K- pi+ pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000012400 anti-K_2*0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000860 rho0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000002660 anti-p- p+ anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000001240 anti-p- p+ anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000003140 anti-p- Lambda0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000004800 Lambda0 anti-Lambda0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000002500 Lambda0 anti-Lambda0 anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000011000 Lambda0 anti-Lambda0 anti-D0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000114000 D0 anti-p- p+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000028000 D_s+ Lambda0 anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000103000 D*0 anti-p- p+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001500000 D*+ anti-p- n0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000338000 D+ anti-p- p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000500000 D*+ anti-p- p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000020000 Lambda_c+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000630000 Lambda_c+ anti-p- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000120000 Sigma_c*++ anti-p- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000150000 Sigma_c0 anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000220000 Sigma_c++ anti-p- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -# -Decay B0 -# Updated to PDG 2008 -# b -> c semileptonic -# -0.050100000 D*- e+ nu_e PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011] -0.021700000 D- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.0054 D_1- e+ nu_e PHOTOS ISGW2; -0.0020 D_0*- e+ nu_e PHOTOS ISGW2; -0.0050 D'_1- e+ nu_e PHOTOS ISGW2; -0.0022 D_2*- e+ nu_e PHOTOS ISGW2; -0.0003 D*- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; -0.004900000 anti-D*0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] -0.0010 D- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; -# Now 0 as it duplicates other decays -0.0000 anti-D0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; -# -0.050100000 D*- mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011] -0.021700000 D- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.0054 D_1- mu+ nu_mu PHOTOS ISGW2; -0.0020 D_0*- mu+ nu_mu PHOTOS ISGW2; -0.0050 D'_1- mu+ nu_mu PHOTOS ISGW2; -0.0022 D_2*- mu+ nu_mu PHOTOS ISGW2; -0.0003 D*- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.004900000 anti-D*0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] -0.0010 D- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0000 anti-D0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; -# -# b -> c tau nu -# -0.015000000 D*- tau+ nu_tau ISGW2; #[Reconstructed PDG2011] -0.011000000 D- tau+ nu_tau ISGW2; #[Reconstructed PDG2011] -0.0013 D_1- tau+ nu_tau ISGW2; -0.0013 D_0*- tau+ nu_tau ISGW2; -0.0020 D'_1- tau+ nu_tau ISGW2; -0.0020 D_2*- tau+ nu_tau ISGW2; -# -# b -> u l nu -# -0.000134000 pi- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000247000 rho- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000000 D(2S)- e+ nu_e PHOTOS ISGW2; -0.000000 D*(2S)- e+ nu_e PHOTOS ISGW2; -0.001892 Xu- e+ nu_e VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; -# -0.000134000 pi- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000247000 rho- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000000 D(2S)- mu+ nu_mu PHOTOS ISGW2; -0.000000 D*(2S)- mu+ nu_mu PHOTOS ISGW2; -0.001892 Xu- mu+ nu_mu VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; -# -0.000060 pi- tau+ nu_tau ISGW2; -0.000083 rho- tau+ nu_tau ISGW2; -0.000090 a_1- tau+ nu_tau ISGW2; -0.000008 b_1- tau+ nu_tau ISGW2; -0.000008 a_0- tau+ nu_tau ISGW2; -0.000008 a_2- tau+ nu_tau ISGW2; -0.000000 rho(2S)- tau+ nu_tau ISGW2; -0.000000 D(2S)- tau+ nu_tau ISGW2; -0.000000 D*(2S)- tau+ nu_tau ISGW2; -# - -# -# b->u hadronic -# Ref. [B1]: -# Lange Nov14,2004 (flip D_s K --opposite of D_s pi) -0.000024000 D_s+ pi- PHSP; #[Reconstructed PDG2011] -0.000030000 D_s- K+ PHSP; #[Reconstructed PDG2011] -0.000021000 D_s*+ pi- SVS; #[Reconstructed PDG2011] -0.000021900 D_s*- K+ SVS; #[Reconstructed PDG2011] -# -0.000016 rho- D_s+ SVS; -0.000035000 K*+ D_s- SVS; #[Reconstructed PDG2011] -0.000041000 D_s*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000032000 D_s*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] - - -# -# b -> s gamma -# -0.000043300 K*0 gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -# PR LHCb add omega gamma -0.000000440 omega gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -#0.0000135 K_10 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000065 K'_10 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000128 K'*0 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000166 K_2*0 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000017 K''*0 gamma HELAMP 1.0 0.0 1.0 0.0; -0.0003118 Xsd gamma BTOXSGAMMA 2 ; -# -0.000000160 K0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.000001030 K*0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.0000050 Xsd e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.000000450 K0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.000001050 K*0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.0000025 Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.0000001 K0 tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 K*0 tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 Xsd tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -# -#------------------------------------------------------------------------------ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv -# -# B0 -> CP eigenstates (some exclusive b -> u) sum=0.00036 -# -# PR LHCb 04/07/04 update BR -0.000005130 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000001620 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.0000010 pi0 eta PHSP; -0.000001200 pi0 eta' PHSP; #[Reconstructed PDG2011] -0.000001 pi0 a_00 PHSP; -0.000001 pi0 f_0 PHSP; -# pi0 rho0 is with the 3-body modes -0.000001 omega pi0 SVS; -0.000001 a_10 pi0 SVS; -0.000001 b_10 pi0 SVS; -0.000001 eta eta PHSP; -0.000001 eta eta' PHSP; -0.000001 eta a_00 PHSP; -0.000001 eta f_0 PHSP; -0.000001 rho0 eta SVS; -0.000000940 omega eta SVS; #[Reconstructed PDG2011] -0.000001 a_10 eta SVS; -0.000001 b_10 eta SVS; -0.000001 eta' eta' PHSP; -0.000001 eta' a_00 PHSP; -0.000001 eta' f_0 PHSP; -0.000001 rho0 eta' SVS; -0.000001000 omega eta' SVS; #[Reconstructed PDG2011] -0.000001 a_10 eta' SVS; -0.000001 b_10 eta' SVS; -0.000001 a_00 a_00 PHSP; -0.000001 a_00 f_0 PHSP; -0.000001 rho0 a_00 SVS; -0.000001 omega a_00 SVS; -0.000001 a_10 a_00 SVS; -0.000001 b_10 a_00 SVS; -0.000001 f_0 f_0 PHSP; -0.000001 rho0 f_0 SVS; -0.000001 omega f_0 SVS; -0.000001 a_10 f_0 SVS; -0.000001 b_10 f_0 SVS; - -# Penguin dominated modes are sin2beta, not sin2alpha -0.000004300 phi K_S0 SVS; #[Reconstructed PDG2011] -0.000004300 phi K_L0 SVS; #[Reconstructed PDG2011] -0.000000550 eta K_S0 PHSP; #[Reconstructed PDG2011] -0.000000550 eta K_L0 PHSP; #[Reconstructed PDG2011] -0.000033000 eta' K_S0 PHSP; #[Reconstructed PDG2011] -0.000033000 eta' K_L0 PHSP; #[Reconstructed PDG2011] -0.000002500 omega K_S0 SVS; #[Reconstructed PDG2011] -0.000002500 omega K_L0 SVS; #[Reconstructed PDG2011] -#don't allow jetset to simulate the same decay but to a K0 or anti-K0 -#Lange 1/30/2003 -0.0 phi K0 PHSP; -0.0 phi anti-K0 PHSP; -0.0 eta K0 PHSP; -0.0 eta anti-K0 PHSP; -0.0 eta' K0 PHSP; -0.0 eta' anti-K0 PHSP; -0.0 omega K0 PHSP; -0.0 omega anti-K0 PHSP; -# phipi0 has no simple Pengiun or tree so who knows - ditto phieta/eta'? -0.000001 phi pi0 SVS; -0.000001 phi eta SVS; -0.000001 phi eta' SVS; -# -0.000015900 K*0 eta SVS; #[Reconstructed PDG2011] -0.000003800 K*0 eta' SVS; #[Reconstructed PDG2011] -0.000002000 K*0 omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000001 phi omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 omega omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 omega rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -# -# PR LHCb 04/07/04 update BR -#2-body modes from Jim Olsen -0.000019400 K+ pi- PHSP; #[Reconstructed PDG2011] -0.0000004 K+ K- PHSP; -0.000000240 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] -0.0000000 K_S0 K_L0 PHSP; -0.000000240 K_L0 K_L0 PHSP; #[Reconstructed PDG2011] -# Declare K0 pi0 not to have it through Pythia (LHCb - PR) -0.0000000 K0 pi0 PHSP; -# Split into K_s0 K_l0 (LHCb - P. Robbe) -0.000004750 K_S0 pi0 PHSP; #[Reconstructed PDG2011] -0.000004750 K_L0 pi0 PHSP; #[Reconstructed PDG2011] -#Put in with 0 BR to keep PYTHIA from generating it -0.0000000 K0 anti-K0 PHSP; -# -# 3-body John Back (jback@slac.stanford.edu) - Oct 15, 2002 -# JGS intersperses modes with pi0->eta,eta' -# B0 modes -# Model generates rho(770), rho(1450) and rho(1700) resonances -# with interference (uses CKM angle alpha) -0.000024 pi- pi+ pi0 BTO3PI_CP dm alpha; -# Put in with 0 BR to keep PYTHIA from generating these (see BTO3PI_CP above) -0.000000 rho0 pi0 SVS; -0.000000 rho+ pi- SVS; -0.000000 rho- pi+ SVS; -0.000000 rho(2S)+ pi- SVS; -0.000000 rho(2S)- pi+ SVS; -0.000000 rho(3S)+ pi- SVS; -0.000000 rho(3S)- pi+ SVS; -# -# rho0 3-body modes -0.000002350 rho0 K_S0 SVS; #[Reconstructed PDG2011] -0.000002350 rho0 K_L0 SVS; #[Reconstructed PDG2011] -# -# rho- 3-body modes -0.000008400 rho- K+ SVS; #[Reconstructed PDG2011] -# -# rho(1450) 3-body modes -0.0000005 rho(2S)0 K_S0 SVS; -0.0000005 rho(2S)0 K_L0 SVS; -# -# -# f0,a0(980) 3-body modes -0.0000055 f_0 K0 PHSP; -0.000001 a_00 K0 PHSP; -0.000001 a_0- K+ PHSP; -0.000001 a_0+ pi- PHSP; -0.000003 a_0- pi+ PHSP; -# -# K*0(892) 3-body modes -0.000003600 K*0 pi0 SVS; #[Reconstructed PDG2011] -0.000003 K*0 anti-K0 SVS; -# -# K*0(1430) 3-body modes -0.000001 K_0*0 pi0 PHSP; -0.000003 K_0*0 anti-K0 PHSP; -# -# K*0(1680) 3-body modes -0.000001 K''*0 pi0 SVS; -0.000001 K''*0 K0 SVS; - -# -# K*+(892) 3-body modes -0.000009400 K*+ pi- SVS; #[Reconstructed PDG2011] -0.000002 K*+ K- SVS; -# -# K*+(1430) 3-body modes -0.000033000 K_0*+ pi- PHSP; #[Reconstructed PDG2011] -0.000002 K_0*+ K- PHSP; -# -# K*0(1680) 3-body modes -0.000001 K''*+ pi- SVS; -0.000001 K''*+ K- SVS; -# -# -# Non-resonant 3-body left-overs -# Most modes are set at 1e-6 -# -# pi+pi-pi0: high mass + f0(400-1200) = (1+1)e-6 -#0402270.000002 pi+ pi- pi0 PHSP; -0.000017 pi+ pi- eta PHSP; -0.000001 pi+ pi- eta' PHSP; -# -# pi+ pi- K0: total-rhoK0-f0K0-piK*(892)-piK*(1430)=45-5-6-13./3-11./3 -0.000000000 pi+ pi- K0 PHSP; #[Reconstructed PDG2011] -# -# K+ pi- pi0 -0.000027500 K+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.000020 K+ pi- eta PHSP; -0.000001 K+ pi- eta' PHSP; -# -# pi+ K- K0. -# Both B0 and B0bar can decay to these => 0.5e-6 each -0.0000005 pi+ K- K0 PHSP; -0.0000005 pi- K+ anti-K0 PHSP; -# -# K+ K- K0 -# PR LHCb 09 Apr 2004 split into KS/KL -0.000000 K+ K- K0 PHSP; -0.000012350 K+ K- K_S0 PHSP; #[Reconstructed PDG2011] -0.000012350 K+ K- K_L0 PHSP; #[Reconstructed PDG2011] -# -# K+ K- pi0 -0.000001 K+ K- pi0 PHSP; -0.000001 K+ K- eta PHSP; -0.000001 K+ K- eta' PHSP; -# -# pi0 K0 anti-K0 -0.000002 K0 anti-K0 pi0 PHSP; -0.000001 K0 anti-K0 eta PHSP; -0.000001 K0 anti-K0 eta' PHSP; -# -# pi0 pi0 K0 -0.000002 K0 pi0 pi0 PHSP; -0.000001 K0 pi0 eta PHSP; -0.000001 K0 pi0 eta' PHSP; -0.000001 K0 eta eta PHSP; -0.000001 K0 eta eta' PHSP; -0.000001 K0 eta' eta' PHSP; -# -# K0 anti-K0 K0: 8*BF(KsKsKs)~=48 (8 is a guess) -0.000048 K0 anti-K0 K0 PHSP; -# -# pi0 pi0 pi0 -0.000001 pi0 pi0 pi0 PHSP; -0.000001 pi0 pi0 eta PHSP; -0.000001 pi0 pi0 eta' PHSP; -0.000001 pi0 eta eta PHSP; -0.000001 pi0 eta eta' PHSP; -# -# PR LHCb: 7 Nov 2005 Add K*0 pi0 pi0 -0.0000067 K*0 pi0 pi0 PHSP; -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#--------------------------------------------------------------------------- -# -#4-body modes from Andrei Gritsan -#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- -# PR LHCb 20 Apr 2004, set long. pol. -0.000000730 rho0 rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.000024200 rho+ rho- SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.000003 rho0 pi+ pi- PHSP; -0.000003 omega pi+ pi- PHSP; -0.000001 rho0 pi0 pi0 PHSP; -0.000001 omega pi0 pi0 PHSP; -0.0000005 rho0 pi0 eta PHSP; -0.0000002 rho0 eta eta PHSP; -0.0000002 rho0 pi0 eta' PHSP; -0.0000001 rho0 eta eta' PHSP; -0.0000005 omega pi0 eta PHSP; -0.0000002 omega eta eta PHSP; -0.0000002 omega pi0 eta' PHSP; -0.0000001 omega eta eta' PHSP; -0.000010 rho+ pi- pi0 PHSP; -0.000005 rho+ pi- eta PHSP; -0.000010 rho- pi+ pi0 PHSP; -0.000005 rho- pi+ eta PHSP; -0.000010 pi+ pi- pi+ pi- PHSP; -0.000010 pi+ pi- pi0 pi0 PHSP; -0.000005 pi+ pi- eta pi0 PHSP; -0.000002 pi+ pi- eta eta PHSP; -0.000002 pi+ pi- eta' pi0 PHSP; -0.000001 pi+ pi- eta' eta PHSP; -0.000016500 a_1+ pi- SVS; #[Reconstructed PDG2011] -0.000016500 a_1- pi+ SVS; #[Reconstructed PDG2011] -0.0000055 b_1+ pi- SVS; -0.0000055 b_1- pi+ SVS; -0.000002 rho- a_0+ SVS; -0.000010 rho+ a_0- SVS; -0.000001 f_0 pi+ pi- PHSP; -0.000001 f_0 pi0 pi0 PHSP; -0.000001 a_0- pi+ pi0 PHSP; -0.000001 a_00 pi0 pi0 PHSP; -0.000001 a_0+ pi- pi0 PHSP; -#--- 4-body rho-K*, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- -0.000003400 rho0 K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.0000100 rho- K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000050600 pi- pi+ K*0 PHSP; #[Reconstructed PDG2011] -0.000010 pi- pi0 K*+ PHSP; -0.000005 pi- eta K*+ PHSP; -0.000002 pi- eta' K*+ PHSP; -0.000010 rho- K+ pi0 PHSP; -0.000005 rho- K+ eta PHSP; -0.000002 rho- K+ eta' PHSP; -0.000010 rho- K0 pi+ PHSP; -0.000010 rho+ K0 pi- PHSP; -0.000005 rho0 K0 pi0 PHSP; -0.000002 rho0 K0 eta PHSP; -0.000001 rho0 K0 eta' PHSP; -0.000010 rho0 K+ pi- PHSP; -0.000005 omega K0 pi0 PHSP; -0.000002 omega K0 eta PHSP; -0.000001 omega K0 eta' PHSP; -0.000005100 omega K+ pi- PHSP; #[Reconstructed PDG2011] -0.000010 pi+ pi0 pi- K0 PHSP; -0.000005 pi+ eta pi- K0 PHSP; -0.000010 pi0 pi0 pi0 K0 PHSP; -0.000005 pi0 pi0 eta K0 PHSP; -0.000002 pi0 eta eta K0 PHSP; -0.000002 pi0 pi0 eta' K0 PHSP; -0.000001 pi0 eta eta' K0 PHSP; -0.000010 pi+ pi- pi- K+ PHSP; -0.000010 pi0 pi0 pi- K+ PHSP; -0.000005 pi0 eta pi- K+ PHSP; -0.000002 eta eta pi- K+ PHSP; -0.000002 pi0 eta' pi- K+ PHSP; -0.000001 eta eta' pi- K+ PHSP; -0.000010 rho0 K_0*0 PHSP; -0.000020 rho- K_0*+ PHSP; -0.000010 pi- pi+ K_0*0 PHSP; -0.000010 pi0 pi0 K_0*0 PHSP; -0.000010 pi- pi0 K_0*+ PHSP; -0.000005 K*0 f_0 SVS; -0.000010 a_10 K0 SVS; -0.000016000 a_1- K+ SVS; #[Reconstructed PDG2011] -0.000010 b_10 K0 SVS; -0.0000074 b_1- K+ SVS; -0.000005 K*0 a_00 SVS; -0.000005 K*+ a_0- SVS; -#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ -0.000001280 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000001 K*+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000001 phi rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 K+ K- rho0 PHSP; -0.000001 K0 anti-K0 rho0 PHSP; -0.000001 K+ K- omega PHSP; -0.000001 K0 anti-K0 omega PHSP; -0.000001 K+ anti-K0 rho- PHSP; -0.000001 K- K0 rho+ PHSP; -0.0000001 phi pi- pi+ PHSP; -0.000001 K+ K- pi- pi+ PHSP; -0.000001 K+ K- pi0 pi0 PHSP; -0.0000005 K+ K- pi0 eta PHSP; -0.0000002 K+ K- eta eta PHSP; -0.0000002 K+ K- pi0 eta' PHSP; -0.0000001 K+ K- eta eta' PHSP; -0.000001 K0 anti-K0 pi- pi+ PHSP; -0.000001 K0 anti-K0 pi0 pi0 PHSP; -0.0000005 K0 anti-K0 pi0 eta PHSP; -0.0000002 K0 anti-K0 eta eta PHSP; -0.0000002 K0 anti-K0 pi0 eta' PHSP; -0.0000001 K0 anti-K0 eta eta' PHSP; -0.000001 K*+ K- pi0 PHSP; -0.000001 K*- K+ pi0 PHSP; -0.000001 K*0 anti-K0 pi0 PHSP; -0.000001 K0 anti-K*0 pi0 PHSP; -0.000001 K+ anti-K*0 pi- PHSP; -0.000001 K*+ anti-K0 pi- PHSP; -0.000003320 K- K*0 pi+ PHSP; #[Reconstructed PDG2011] -0.000001 K*- K0 pi+ PHSP; -#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- -0.000009800 phi K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000010 phi K+ pi- PHSP; -0.000010 phi K0 pi0 PHSP; -0.000007 phi K0 eta PHSP; -0.000017700 K- K+ K*0 PHSP; #[Reconstructed PDG2011] -0.000010 K- K*+ K0 PHSP; -0.000010 K*- K+ K0 PHSP; -0.000010 K+ K- K+ pi- PHSP; -0.000010 K+ K- K0 pi0 PHSP; -0.000005 K+ K- K0 eta PHSP; -0.000010 K0 anti-K0 K0 pi0 PHSP; -0.000005 K0 anti-K0 K0 eta PHSP; -0.000003900 phi K_0*0 PHSP; #[Reconstructed PDG2011] -0.000010 K- K+ K_0*0 PHSP; -0.000010 K- K_0*+ K0 PHSP; -0.000010 K_0*- K+ K0 PHSP; -0.000002 phi K'_10 PHSP; -0.000002 K- K+ K'_10 PHSP; -#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- -0.0000001 phi phi SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.0000001 phi K+ K- PHSP; -0.0000001 phi K0 anti-K0 PHSP; -0.0000001 K+ K- K+ K- PHSP; -0.0000001 K0 anti-K0 K+ K- PHSP; -0.0000001 K0 anti-K0 K0 anti-K0 PHSP; -#5-body modes from Jim Smith - 1/30/05 -#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- -0.000010 rho0 rho0 pi0 PHSP; -0.000005 rho0 rho0 eta PHSP; -0.000002 rho0 rho0 eta' PHSP; -0.000010 omega rho0 pi0 PHSP; -0.000005 omega rho0 eta PHSP; -0.000002 omega rho0 eta' PHSP; -0.000010 rho+ rho- pi0 PHSP; -0.000005 rho+ rho- eta PHSP; -0.000002 rho+ rho- eta' PHSP; -0.000010 rho0 rho+ pi- PHSP; -0.000010 omega rho+ pi- PHSP; -0.000002 rho0 pi+ pi- pi0 PHSP; -0.000001 rho0 pi+ pi- eta PHSP; -0.000001 rho0 pi+ pi- eta' PHSP; -0.000002 rho0 pi0 pi0 pi0 PHSP; -0.000001 rho0 pi0 eta pi0 PHSP; -0.000001 rho0 pi0 eta' pi0 PHSP; -0.000002 omega pi+ pi- pi0 PHSP; -0.000001 omega pi+ pi- eta PHSP; -0.000001 omega pi+ pi- eta' PHSP; -0.000002 omega pi0 pi0 pi0 PHSP; -0.000001 omega pi0 eta pi0 PHSP; -0.000001 omega pi0 eta' pi0 PHSP; -0.000002 rho+ pi- pi+ pi- PHSP; -0.000002 rho+ pi- pi0 pi0 PHSP; -0.000001 rho+ pi- pi0 eta PHSP; -0.000001 rho+ pi- pi0 eta' PHSP; -0.000002 rho- pi+ pi+ pi- PHSP; -0.000002 rho- pi+ pi0 pi0 PHSP; -0.000001 rho- pi+ pi0 eta PHSP; -0.000001 rho- pi+ pi0 eta' PHSP; -0.000001 pi+ pi- pi+ pi- pi0 PHSP; -0.0000005 pi+ pi- pi+ pi- eta PHSP; -0.0000002 pi+ pi- pi+ pi- eta' PHSP; -0.000001 pi+ pi- pi0 pi0 pi0 PHSP; -0.0000005 pi+ pi- pi0 pi0 eta PHSP; -0.0000002 pi+ pi- pi0 pi0 eta' PHSP; -0.0000005 pi0 pi0 pi0 pi0 pi0 PHSP; -0.0000002 pi0 pi0 pi0 pi0 eta PHSP; -0.0000001 pi0 pi0 pi0 pi0 eta' PHSP; -0.000010 a_1+ rho- PHSP; -0.000010 a_1- rho+ PHSP; -0.000010 a_10 rho0 PHSP; -0.000010 a_10 omega PHSP; -0.000010 a_1+ pi- pi0 PHSP; -0.000005 a_1+ pi- eta PHSP; -0.000002 a_1+ pi- eta' PHSP; -0.000010 a_10 pi+ pi- PHSP; -0.000010 a_10 pi0 pi0 PHSP; -0.000005 a_10 pi0 eta PHSP; -0.000002 a_10 pi0 eta' PHSP; -0.000010 a_1- pi+ pi0 PHSP; -0.000005 a_1- pi+ eta PHSP; -0.000002 a_1- pi+ eta' PHSP; -0.000010 rho+ f_0 pi- PHSP; -0.000010 rho- f_0 pi+ PHSP; -0.000010 rho0 f_0 pi0 PHSP; -0.000005 rho0 f_0 eta PHSP; -0.000002 rho0 f_0 eta' PHSP; -0.000010 omega f_0 pi0 PHSP; -0.000010 rho+ a_00 pi- PHSP; -0.000010 rho+ a_0- pi0 PHSP; -0.000005 rho+ a_0- eta PHSP; -0.000002 rho+ a_0- eta' PHSP; -0.000010 rho0 a_0+ pi- PHSP; -0.000010 rho0 a_0- pi+ PHSP; -0.000010 rho0 a_00 pi0 PHSP; -0.000005 rho0 a_00 eta PHSP; -0.000002 rho0 a_00 eta' PHSP; -0.000010 rho- a_00 pi+ PHSP; -0.000010 rho- a_0+ pi0 PHSP; -0.000005 rho- a_0+ eta PHSP; -0.000002 rho- a_0+ eta' PHSP; -0.000002 f_0 pi+ pi- pi0 PHSP; -0.000001 f_0 pi+ pi- eta PHSP; -0.000001 f_0 pi+ pi- eta' PHSP; -0.000002 f_0 pi0 pi0 pi0 PHSP; -0.000001 f_0 pi0 pi0 eta PHSP; -0.000001 f_0 pi0 pi0 eta' PHSP; -0.000001 a_00 pi+ pi- pi0 PHSP; -0.000001 a_00 pi0 pi0 pi0 PHSP; -0.000001 a_0+ pi- pi+ pi- PHSP; -0.000001 a_0+ pi- pi0 pi0 PHSP; -0.000001 a_0- pi+ pi+ pi- PHSP; -0.000001 a_0- pi+ pi0 pi0 PHSP; -#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- -0.000010 rho0 K*+ pi- PHSP; -0.000010 rho- K*+ pi0 PHSP; -0.000005 rho- K*+ eta PHSP; -0.000002 rho- K*+ eta' PHSP; -0.000010 rho0 K*0 pi0 PHSP; -0.000005 rho0 K*0 eta PHSP; -0.000002 rho0 K*0 eta' PHSP; -0.000010 rho- K*0 pi+ PHSP; -0.000010 rho+ K*0 pi- PHSP; -0.000010 omega K*+ pi- PHSP; -0.000010 omega K*0 pi0 PHSP; -0.000005 omega K*0 eta PHSP; -0.000002 omega K*0 eta' PHSP; -0.000010 pi+ pi- K*+ pi- PHSP; -0.000010 pi- pi0 K*+ pi0 PHSP; -0.000005 pi- pi0 K*+ eta PHSP; -0.000002 pi- pi0 K*+ eta' PHSP; -0.000010 pi+ pi- K*0 pi0 PHSP; -0.000005 pi+ pi- K*0 eta PHSP; -0.000002 pi+ pi- K*0 eta' PHSP; -0.000010 pi0 pi0 K*0 pi0 PHSP; -0.000005 pi0 pi0 K*0 eta PHSP; -0.000002 pi0 pi0 K*0 eta' PHSP; -0.000010 rho+ K+ pi- pi- PHSP; -0.000010 rho0 K+ pi- pi0 PHSP; -0.000005 rho0 K+ pi- eta PHSP; -0.000002 rho0 K+ pi- eta' PHSP; -0.000010 rho- K+ pi+ pi- PHSP; -0.000010 rho- K+ pi0 pi0 PHSP; -0.000005 rho- K+ pi0 eta PHSP; -0.000002 rho- K+ pi0 eta' PHSP; -0.000010 rho0 K0 pi+ pi- PHSP; -0.000010 rho0 K0 pi0 pi0 PHSP; -0.000005 rho0 K0 pi0 eta PHSP; -0.000002 rho0 K0 pi0 eta' PHSP; -0.000010 rho+ K0 pi- pi0 PHSP; -0.000005 rho+ K0 pi- eta PHSP; -0.000002 rho+ K0 pi- eta' PHSP; -0.000010 rho- K0 pi+ pi0 PHSP; -0.000005 rho- K0 pi+ eta PHSP; -0.000002 rho- K0 pi+ eta' PHSP; -0.000010 omega K+ pi- pi0 PHSP; -0.000005 omega K+ pi- eta PHSP; -0.000002 omega K+ pi- eta' PHSP; -0.000010 omega K0 pi+ pi- PHSP; -0.000010 omega K0 pi0 pi0 PHSP; -0.000005 omega K0 pi0 eta PHSP; -0.000002 omega K0 pi0 eta' PHSP; -0.000002 pi+ pi- pi- K+ pi0 PHSP; -0.000001 pi+ pi- pi- K+ eta PHSP; -0.000001 pi+ pi- pi- K+ eta' PHSP; -0.000002 pi0 pi0 pi- K+ pi0 PHSP; -0.000001 pi0 pi0 pi- K+ eta PHSP; -0.000001 pi0 pi0 pi- K+ eta' PHSP; -0.000002 pi+ pi- pi+ K0 pi- PHSP; -0.000002 pi+ pi- pi0 K0 pi0 PHSP; -0.000001 pi+ pi- pi0 K0 eta PHSP; -0.000001 pi+ pi- pi0 K0 eta' PHSP; -0.000002 pi0 pi0 pi0 K0 pi0 PHSP; -0.000001 pi0 pi0 pi0 K0 eta PHSP; -0.000001 pi0 pi0 pi0 K0 eta' PHSP; -0.000010 rho+ K_0*0 pi- PHSP; -0.000010 rho0 K_0*0 pi0 PHSP; -0.000005 rho0 K_0*0 eta PHSP; -0.000002 rho0 K_0*0 eta' PHSP; -0.000010 rho- K_0*0 pi+ PHSP; -0.000010 rho- K_0*+ pi0 PHSP; -0.000005 rho- K_0*+ eta PHSP; -0.000002 rho- K_0*+ eta' PHSP; -0.000010 rho0 K_0*+ pi- PHSP; -0.000010 pi+ pi- K_0*+ pi- PHSP; -0.000010 pi- pi0 K_0*+ pi0 PHSP; -0.000005 pi- pi0 K_0*+ eta PHSP; -0.000002 pi- pi0 K_0*+ eta' PHSP; -0.000010 pi+ pi- K_0*0 pi0 PHSP; -0.000005 pi+ pi- K_0*0 eta PHSP; -0.000002 pi+ pi- K_0*0 eta' PHSP; -0.000010 pi0 pi0 K_0*0 pi0 PHSP; -0.000005 pi0 pi0 K_0*0 eta PHSP; -0.000005 pi0 pi0 K_0*0 eta' PHSP; -0.000010 K*+ f_0 pi- PHSP; -0.000010 K*0 f_0 pi0 PHSP; -0.000005 K*0 f_0 eta PHSP; -0.000002 K*0 f_0 eta' PHSP; -0.000010 a_1+ K0 pi- PHSP; -0.000020 a_10 K*0 PHSP; -0.000010 a_10 K+ pi- PHSP; -0.000010 a_10 K0 pi0 PHSP; -0.000020 a_1- K*+ PHSP; -0.000010 a_1- K+ pi0 PHSP; -0.000010 a_1- K0 pi+ PHSP; -0.000005 K*+ a_00 pi- PHSP; -0.000005 K*+ a_0- pi0 PHSP; -0.000002 K*+ a_0- eta PHSP; -0.000001 K*+ a_0- eta' PHSP; -0.000005 K*0 a_0+ pi- PHSP; -0.000005 K*0 a_00 pi0 PHSP; -0.000002 K*0 a_00 eta PHSP; -0.000001 K*0 a_00 eta' PHSP; -#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ -0.000001 K*- K*0 pi+ PHSP; -0.000001 K*+ anti-K*0 pi- PHSP; -0.000001 K*- K*+ pi0 PHSP; -0.0000005 K*- K*+ eta PHSP; -0.0000002 K*- K*+ eta' PHSP; -0.000001 K*0 anti-K*0 pi0 PHSP; -0.0000005 K*0 anti-K*0 eta PHSP; -0.0000002 K*0 anti-K*0 eta' PHSP; -0.000001 phi rho+ pi- PHSP; -0.000001 phi rho- pi+ PHSP; -0.000001 phi rho0 pi0 PHSP; -0.0000005 phi rho0 eta PHSP; -0.0000002 phi rho0 eta' PHSP; -0.000001 phi omega pi0 PHSP; -0.000001 phi f_0 pi0 PHSP; -0.000001 phi pi+ pi- pi0 PHSP; -0.0000005 phi pi+ pi- eta PHSP; -0.0000002 phi pi+ pi- eta' PHSP; -0.000001 phi pi0 pi0 pi0 PHSP; -0.0000005 phi pi0 pi0 eta PHSP; -0.0000002 phi pi0 pi0 eta' PHSP; -0.000001 K0 K- rho0 pi+ PHSP; -0.000001 K0 K- rho+ pi0 PHSP; -0.0000005 K0 K- rho+ eta PHSP; -0.0000002 K0 K- rho+ eta' PHSP; -0.000001 K0 K- omega pi+ PHSP; -0.000001 K0 K- f_0 pi+ PHSP; -0.000001 K+ K- rho+ pi- PHSP; -0.000001 K+ K- rho- pi+ PHSP; -0.000001 K+ K- rho0 pi0 PHSP; -0.0000005 K+ K- rho0 eta PHSP; -0.0000002 K+ K- rho0 eta' PHSP; -0.000001 K+ K- omega pi0 PHSP; -0.0000005 K+ K- omega eta PHSP; -0.0000002 K+ K- omega eta' PHSP; -0.000001 K+ K- f_0 pi0 PHSP; -0.000001 K0 anti-K0 rho+ pi- PHSP; -0.000001 K0 anti-K0 rho- pi+ PHSP; -0.000001 K0 anti-K0 rho0 pi0 PHSP; -0.0000005 K0 anti-K0 rho0 eta PHSP; -0.0000002 K0 anti-K0 rho0 eta' PHSP; -0.000001 K0 anti-K0 omega pi0 PHSP; -0.000001 K0 anti-K0 f_0 pi0 PHSP; -0.000001 anti-K0 K+ rho0 pi- PHSP; -0.000001 anti-K0 K+ rho- pi0 PHSP; -0.0000005 anti-K0 K+ rho- eta PHSP; -0.0000002 anti-K0 K+ rho- eta' PHSP; -0.000001 anti-K0 K+ omega pi- PHSP; -0.000001 anti-K0 K+ f_0 pi- PHSP; -0.0000002 K0 K- pi+ pi+ pi- PHSP; -0.0000002 K0 K- pi+ pi0 pi0 PHSP; -0.0000001 K0 K- pi+ pi0 eta PHSP; -0.0000001 K0 K- pi+ pi0 eta' PHSP; -0.0000002 K+ K- pi+ pi- pi0 PHSP; -0.0000001 K+ K- pi+ pi- eta PHSP; -0.0000001 K+ K- pi+ pi- eta' PHSP; -0.0000002 K+ K- pi0 pi0 pi0 PHSP; -0.0000001 K+ K- pi0 pi0 eta PHSP; -0.0000001 K+ K- pi0 pi0 eta' PHSP; -0.0000002 K0 anti-K0 pi+ pi- pi0 PHSP; -0.0000001 K0 anti-K0 pi+ pi- eta PHSP; -0.0000001 K0 anti-K0 pi+ pi- eta' PHSP; -0.0000002 K0 anti-K0 pi0 pi0 pi0 PHSP; -0.0000001 K0 anti-K0 pi0 pi0 eta PHSP; -0.0000001 K0 anti-K0 pi0 pi0 eta' PHSP; -0.0000002 anti-K0 K+ pi- pi+ pi- PHSP; -0.0000002 anti-K0 K+ pi- pi0 pi0 PHSP; -0.0000001 anti-K0 K+ pi- pi0 eta PHSP; -0.0000001 anti-K0 K+ pi- pi0 eta' PHSP; -0.000001 K*0 K- pi+ pi0 PHSP; -0.0000005 K*0 K- pi+ eta PHSP; -0.0000002 K*0 K- pi+ eta' PHSP; -0.000001 K*- K0 pi+ pi0 PHSP; -0.0000005 K*- K0 pi+ eta PHSP; -0.0000002 K*- K0 pi+ eta' PHSP; -0.000001 K*+ K- pi+ pi- PHSP; -0.000001 K*+ K- pi0 pi0 PHSP; -0.0000005 K*+ K- pi0 eta PHSP; -0.0000002 K*+ K- pi0 eta' PHSP; -0.000001 K*- K+ pi+ pi- PHSP; -0.000001 K*- K+ pi0 pi0 PHSP; -0.0000005 K*- K+ pi0 eta PHSP; -0.0000002 K*- K+ pi0 eta' PHSP; -0.000001 K*0 anti-K0 pi+ pi- PHSP; -0.000001 K*0 anti-K0 pi0 pi0 PHSP; -0.0000005 K*0 anti-K0 pi0 eta PHSP; -0.0000002 K*0 anti-K0 pi0 eta' PHSP; -0.000001 K0 anti-K*0 pi+ pi- PHSP; -0.000001 K0 anti-K*0 pi0 pi0 PHSP; -0.0000005 K0 anti-K*0 pi0 eta PHSP; -0.0000002 K0 anti-K*0 pi0 eta' PHSP; -0.000001 K+ anti-K*0 pi- pi0 PHSP; -0.0000005 K+ anti-K*0 pi- eta PHSP; -0.0000002 K+ anti-K*0 pi- eta' PHSP; -0.000001 K*+ anti-K0 pi- pi0 PHSP; -0.0000005 K*+ anti-K0 pi- eta PHSP; -0.0000002 K*+ anti-K0 pi- eta' PHSP; -#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- -0.000010 phi K*+ pi- PHSP; -0.000010 phi K*0 pi0 PHSP; -0.000005 phi K*0 eta PHSP; -0.000002 phi K*0 eta' PHSP; -0.000010 phi K+ rho- PHSP; -0.000010 phi K0 rho0 PHSP; -0.000010 phi K0 omega PHSP; -0.000010 phi K0 f_0 PHSP; -0.000010 phi K0 pi+ pi- PHSP; -0.000010 phi K0 pi0 pi0 PHSP; -0.000005 phi K0 pi0 eta PHSP; -0.000002 phi K0 pi0 eta' PHSP; -0.000010 phi K+ pi- pi0 PHSP; -0.000005 phi K+ pi- eta PHSP; -0.000002 phi K+ pi- eta' PHSP; -0.000010 K- K+ K*+ pi- PHSP; -0.000010 K+ K*- K+ pi- PHSP; -0.000010 K+ K*0 anti-K0 pi- PHSP; -0.000010 K+ K0 anti-K*0 pi- PHSP; -0.000010 K0 K*+ anti-K0 pi- PHSP; -0.000010 K- K+ K+ rho- PHSP; -0.000010 K- K+ K0 rho0 PHSP; -0.000010 K- K+ K0 omega PHSP; -0.000010 K- K+ K0 f_0 PHSP; -0.000010 K+ K- K+ pi- pi0 PHSP; -0.000005 K+ K- K+ pi- eta PHSP; -0.000002 K+ K- K+ pi- eta' PHSP; -0.000010 K+ K- K0 pi+ pi- PHSP; -0.000010 K+ K- K0 pi0 pi0 PHSP; -0.000005 K+ K- K0 pi0 eta PHSP; -0.000005 K+ K- K0 pi0 eta' PHSP; -0.000010 K0 anti-K0 K+ pi- pi0 PHSP; -0.000005 K0 anti-K0 K+ pi- eta PHSP; -0.000002 K0 anti-K0 K+ pi- eta' PHSP; -0.000010 K0 anti-K0 K0 pi+ pi- PHSP; -0.000010 K0 anti-K0 K0 pi0 pi0 PHSP; -0.000005 K0 anti-K0 K0 pi0 eta PHSP; -0.000002 K0 anti-K0 K0 pi0 eta' PHSP; -0.000010 phi K_0*+ pi- PHSP; -0.000010 phi K_0*0 pi0 PHSP; -0.000010 K+ K- K_0*+ pi- PHSP; -0.000010 K+ K- K_0*0 pi0 PHSP; -0.000005 K+ K- K_0*0 eta PHSP; -0.000002 K+ K- K_0*0 eta' PHSP; -0.000010 K+ K+ K_0*- pi- PHSP; -0.000010 K+ anti-K_0*0 K0 pi- PHSP; -0.000010 K+ K_0*0 anti-K0 pi- PHSP; -0.000010 K0 anti-K0 K_0*+ pi- PHSP; -0.000010 K0 anti-K0 K_0*0 pi0 PHSP; -0.000005 K0 anti-K0 K_0*0 eta PHSP; -0.000002 K0 anti-K0 K_0*0 eta' PHSP; -0.000010 K0 K0 anti-K_0*0 pi0 PHSP; -0.000005 K0 K0 anti-K_0*0 eta PHSP; -0.000002 K0 K0 anti-K_0*0 eta' PHSP; -0.000002 phi K'_1+ pi- PHSP; -0.000002 phi K'_10 pi0 PHSP; -0.000001 phi K'_10 eta PHSP; -0.000001 phi K'_10 eta' PHSP; -0.000002 K- K+ K'_1+ pi- PHSP; -0.000002 K- K+ K'_10 pi0 PHSP; -0.000001 K- K+ K'_10 eta PHSP; -0.000001 K- K+ K'_10 eta' PHSP; -0.000002 K+ K+ K'_1- pi- PHSP; -0.000002 K0 anti-K0 K'_10 pi0 PHSP; -0.000001 K0 anti-K0 K'_10 eta PHSP; -0.000001 K0 anti-K0 K'_10 eta' PHSP; -0.000002 K0 K0 anti-K'_10 pi0 PHSP; -0.000001 K0 K0 anti-K'_10 eta PHSP; -0.000001 K0 K0 anti-K'_10 eta' PHSP; -#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ -0.000004100 phi phi K0 PHSP; #[Reconstructed PDG2011] -0.0000001 phi phi pi0 PHSP; -0.000001 phi K+ K- K0 PHSP; -0.000001 phi K0 anti-K0 K0 PHSP; -0.0000001 phi K+ K- pi0 PHSP; -0.0000001 phi K0 anti-K0 pi0 PHSP; -0.0000001 phi anti-K0 K+ pi- PHSP; -0.0000001 phi K0 K- pi+ PHSP; -0.0000001 K+ K- K+ K- K0 PHSP; -0.0000001 K0 anti-K0 K+ K- K0 PHSP; -0.0000001 K+ K- K+ K- pi0 PHSP; -0.0000001 K+ K- K0 anti-K0 pi0 PHSP; -0.0000001 K+ K- K+ anti-K0 pi- PHSP; -0.0000001 K+ K- K0 K- pi+ PHSP; -0.0000001 K0 anti-K0 K0 anti-K0 pi0 PHSP; -0.0000001 K0 anti-K0 anti-K0 K+ pi- PHSP; -0.0000001 K0 anti-K0 K0 K- pi+ PHSP; -#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ -0.000003 phi phi K*0 PHSP; -0.000001 phi K+ K- K*0 PHSP; -0.000001 phi K0 anti-K0 K*0 PHSP; -0.000001 phi K0 K+ K*- PHSP; -0.000001 phi K0 K0 anti-K*0 PHSP; -0.0000001 phi K+ K- K+ pi- PHSP; -0.0000001 phi K+ K- K0 pi0 PHSP; -0.0000001 phi K0 anti-K0 K+ pi- PHSP; -0.0000001 phi K0 anti-K0 K0 pi0 PHSP; -#--- 6-body a1a1 ------------ -0.000050 a_10 a_10 PHSP; -0.000050 a_1+ a_1- PHSP; -# -# B -> cc= s -0.000435500 J/psi K_S0 SVS; #[Reconstructed PDG2011] -0.000435500 J/psi K_L0 SVS; #[Reconstructed PDG2011] -# -# -0.001330000 J/psi K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] -0.000017600 J/psi pi0 SVS; #[Reconstructed PDG2011] -0.000027000 J/psi rho0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] -0.00003 J/psi omega SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.000000000 J/psi K+ pi- PHSP; #[Reconstructed PDG2011] -0.0001 J/psi K0 pi0 PHSP; -#rl0.0007 J/psi K0 pi- pi+ PHSP; -#rl0.00035 J/psi K0 pi0 pi0 PHSP; -#rl0.00035 J/psi K+ pi- pi0 PHSP; -0.001300000 J/psi K_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] -0.0001 J/psi K'_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; -0.0005 J/psi K_2*0 PHSP; -0.000094000 J/psi phi K0 PHSP; #[Reconstructed PDG2011] -# -0.000310000 psi(2S) K_S0 SVS; #[Reconstructed PDG2011] -0.000310000 psi(2S) K_L0 SVS; #[Reconstructed PDG2011] -# -# -0.000610000 psi(2S) K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] - -0.0004 psi(2S) K+ pi- PHSP; -0.0002 psi(2S) K0 pi0 PHSP; -0.0002 psi(2S) K0 pi- pi+ PHSP; -0.0001 psi(2S) K0 pi0 pi0 PHSP; -0.0001 psi(2S) K+ pi- pi0 PHSP; -0.0004 psi(2S) K_10 PHSP; -# -0.000445000 eta_c K_S0 PHSP; #[Reconstructed PDG2011] -0.000445000 eta_c K_L0 PHSP; #[Reconstructed PDG2011] -# -# -0.000610000 K*0 eta_c SVS; #[Reconstructed PDG2011] -0.0002 eta_c K+ pi- PHSP; -0.0001 eta_c K0 pi0 PHSP; -0.0002 eta_c K0 pi- pi+ PHSP; -0.0001 eta_c K0 pi0 pi0 PHSP; -0.0001 eta_c K+ pi- pi0 PHSP; -# -0.00024 eta_c(2S) K_S0 PHSP; -0.00024 eta_c(2S) K_L0 PHSP; -# -# -0.00066 K*0T eta_c(2S) SVS; -0.00008 eta_c(2S) K+ pi- PHSP; -0.00005 eta_c(2S) K0 pi0 PHSP; -0.00008 eta_c(2S) K0 pi- pi+ PHSP; -0.00005 eta_c(2S) K0 pi0 pi0 PHSP; -0.00005 eta_c(2S) K+ pi- pi0 PHSP; -# -0.000070000 chi_c0 K_S0 PHSP; #[Reconstructed PDG2011] -0.000070000 chi_c0 K_L0 PHSP; #[Reconstructed PDG2011] -# -# -0.0003 K*0 chi_c0 SVS; -0.0002 chi_c0 K+ pi- PHSP; -0.0001 chi_c0 K0 pi0 PHSP; -0.0002 chi_c0 K0 pi- pi+ PHSP; -0.0001 chi_c0 K0 pi0 pi0 PHSP; -0.0001 chi_c0 K+ pi- pi0 PHSP; -# -0.000195000 chi_c1 K_S0 SVS; #[Reconstructed PDG2011] -0.000195000 chi_c1 K_L0 SVS; #[Reconstructed PDG2011] -# -# -0.000222000 chi_c1 K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] -0.0004 chi_c1 K+ pi- PHSP; -0.0002 chi_c1 K0 pi0 PHSP; -0.0004 chi_c1 K0 pi- pi+ PHSP; -0.0002 chi_c1 K0 pi0 pi0 PHSP; -0.0002 chi_c1 K+ pi- pi0 PHSP; -# -0.00005 chi_c2 K_S0 STS; -0.00005 chi_c2 K_L0 STS; -# -# -0.00003 chi_c2 K*0 PHSP; -0.0002 chi_c2 K+ pi- PHSP; -0.0001 chi_c2 K0 pi0 PHSP; -0.0002 chi_c2 K0 pi- pi+ PHSP; -0.0001 chi_c2 K0 pi0 pi0 PHSP; -0.0001 chi_c2 K+ pi- pi0 PHSP; -# -0.00024 psi(3770) K_S0 SVS; -0.00024 psi(3770) K_L0 SVS; -# -# -0.00048 psi(3770) K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.00014 psi(3770) K+ pi- PHSP; -0.00014 psi(3770) K0 pi0 PHSP; -0.00014 psi(3770) K0 pi- pi+ PHSP; -0.00007 psi(3770) K0 pi0 pi0 PHSP; -0.00007 psi(3770) K+ pi- pi0 PHSP; -0.00029 psi(3770) K_10 PHSP; -# -### ALREADY Included above 0.0000 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# -# -# b-> c (dc=) -# -0.000211000 D- D+ PHSP; #[Reconstructed PDG2011] -# See Ref [B1] for the next 3: -0.000305 D*- D+ SVS; -0.000610000 D*+ D- SVS; #[Reconstructed PDG2011] -0.000820000 D*- D*+ SVV_HELAMP 0.56 0.0 0.96 0.0 0.47 0.0; #[Reconstructed PDG2011] -# -# b -> c (sc=) --> D Ds X Sum = 10% -# -0.007200000 D- D_s+ PHSP; #[Reconstructed PDG2011] -0.008000000 D*- D_s+ SVS; #[Reconstructed PDG2011] -0.007400000 D_s*+ D- SVS; #[Reconstructed PDG2011] -0.017700000 D_s*+ D*- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] -0.0006 D'_1- D_s+ SVS; -0.0012 D'_1- D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0012 D_1- D_s+ SVS; -0.0024 D_1- D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0042 D_2*- D_s+ STS; -0.0040 D_2*- D_s*+ PHSP; -# -0.0018 D_s+ D- pi0 PHSP; -0.0037 D_s+ anti-D0 pi- PHSP; -0.0018 D_s*+ D- pi0 PHSP; -0.0037 D_s*+ anti-D0 pi- PHSP; -0.0030 D_s+ D- pi- pi+ PHSP; -0.0022 D_s+ D- pi0 pi0 PHSP; -0.0022 D_s+ anti-D0 pi- pi0 PHSP; -0.0030 D_s*+ D- pi- pi+ PHSP; -0.0022 D_s*+ D- pi0 pi0 PHSP; -0.0022 D_s*+ anti-D0 pi- pi0 PHSP; -# -# b -> c (sc=) --> D D= K X Sum = 8% -# Update: Ref. [B1] -# October 26, 2004 Lange -per breco awg -# External W-emission amplitude -0.001700000 D- D0 K+ PHSP; #[Reconstructed PDG2011] -0.004600000 D- D*0 K+ PHSP; #[Reconstructed PDG2011] -0.003100000 D*- D0 K+ PHSP; #[Reconstructed PDG2011] -0.011800000 D*- D*0 K+ PHSP; #[Reconstructed PDG2011] -# External+internal W-emission amplitude -0.0015 D- D+ K0 PHSP; -0.0018 D*- D+ K0 PHSP; -0.0047 D- D*+ K0 PHSP; -0.007800000 D*- D*+ K0 PHSP; #[Reconstructed PDG2011] -# Internal W-emission amplitude (color suppressed modes) -0.0005 D0 anti-D0 K0 PHSP; -0.0005 D*0 anti-D0 K0 PHSP; -0.0015 D0 anti-D*0 K0 PHSP; -0.0015 D*0 anti-D*0 K0 PHSP; -########## -# K* modes -########### -0.0025 D- D0 K*+ PHSP; -0.0025 D*- D0 K*+ PHSP; -0.0025 D- D*0 K*+ PHSP; -0.0050 D*- D*0 K*+ PHSP; -# -0.0025 D- D+ K*0 PHSP; -0.0025 D*- D+ K*0 PHSP; -0.0025 D- D*+ K*0 PHSP; -0.0050 D*- D*+ K*0 PHSP; -# -0.0005 D0 anti-D0 K*0 PHSP; -0.0005 D0 anti-D*0 K*0 PHSP; -0.0005 D*0 anti-D0 K*0 PHSP; -0.0010 D*0 anti-D*0 K*0 PHSP; -# -# B -> D(*) X Exclusive modes -# -0.002760000 D*- pi+ SVS; #[Reconstructed PDG2011] -0.002680000 D- pi+ PHSP; #[Reconstructed PDG2011] -0.007110000 rho+ D- SVS; #[Reconstructed PDG2011] -# -# D* rho HELAMP parameters taken from ICHEP 98-852. -0.006800000 rho+ D*- SVV_HELAMP 0.317 0.19 0.936 0.0 0.152 1.47; #[Reconstructed PDG2011] -0.0005 D- pi+ pi0 PHSP; -0.008200000 D*- pi+ pi0 PHSP; #[Reconstructed PDG2011] -0.000840000 anti-D0 pi- pi+ PHSP; #[Reconstructed PDG2011] -0.000620000 anti-D*0 pi- pi+ PHSP; #[Reconstructed PDG2011] -0.0005 anti-D*0 pi0 pi0 PHSP; -# -# D a1 updated Ref. [B1] -0.006000000 a_1+ D- SVS; #[Reconstructed PDG2011] -0.000000000 D- rho0 pi+ PHSP; #[Reconstructed PDG2011] -0.0011 D- rho+ pi0 PHSP; -0.002000000 D- pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] -0.0010 D- pi0 pi+ pi0 PHSP; -0.0010 anti-D0 pi- pi+ pi0 PHSP; -0.0001 anti-D0 pi0 pi0 pi0 PHSP; -# -# SVV_HELAMP for D* a1 taken from factorization. Recommandation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: -# updated Ref. [B1] -# October 26, 2004 Lange update -# -0.013000000 D*- a_1+ SVV_HELAMP 0.458 0.0 0.866 0.0 0.458 0.0; #[Reconstructed PDG2011] -# -0.005700000 D*- rho0 pi+ PHSP; #[Reconstructed PDG2011] -0.0010 D*- rho+ pi0 PHSP; -0.0000 D*- pi- pi+ pi+ PHSP; -0.0010 D*- pi0 pi+ pi0 PHSP; -0.0010 anti-D*0 pi- pi+ pi0 PHSP; -0.0001 anti-D*0 pi0 pi0 pi0 PHSP; -# -# B->D** pi and D** rho, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html -# -0.0001 D_1- pi+ SVS; -0.0001 D'_1- pi+ SVS; -0.00006 D_0*- pi+ PHSP; -0.000215 D_2*- pi+ STS; -0.0004 D_1- rho+ PHSP; -0.0013 D'_1- rho+ PHSP; -0.0022 D_2*- rho+ PHSP; -# -# -# B->DK, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: -# update: Ref. [B1]: -# -0.000214000 D*- K+ SVS; #[Reconstructed PDG2011] -0.000200000 D- K+ PHSP; #[Reconstructed PDG2011] -0.000330000 D*- K*+ SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; #[Reconstructed PDG2011] -0.000450000 K*+ D- SVS; #[Reconstructed PDG2011] -#more DK modes - October 26, 2004 -Lange -0.000036 anti-D*0 anti-K0 SVS; -0.000052 anti-D0 anti-K0 PHSP; -0.000042000 K*0 anti-D0 SVS; #[Reconstructed PDG2011] -0.00001 K*0 D0 SVS; -0.00004 anti-D*0 K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; -0.00001 D*0 K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; -# -# -# Color-suppressed modes. Br's are expectations from -# Phys. Rev. D57 (1998), 5363-5369, except for the eta' modes, which are set -# equal to the eta modes. SVV_HELAMP parameters are the same as in D*0 rho-, -# with phases set to 0. Recommendation http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/169.html: -# update: See Ref [B1]: -# further update October 26, 2004 Lange -# -0.000261000 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] -0.000170000 anti-D*0 pi0 SVS; #[Reconstructed PDG2011] -# -0.000320000 rho0 anti-D0 SVS; #[Reconstructed PDG2011] -0.00029 anti-D*0 rho0 SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; -# -0.000202000 anti-D0 eta PHSP; #[Reconstructed PDG2011] -0.000200000 anti-D*0 eta SVS; #[Reconstructed PDG2011] -# -0.000125 anti-D0 eta' PHSP; -0.000123000 anti-D*0 eta' SVS; #[Reconstructed PDG2011] -# -0.000259000 omega anti-D0 SVS; #[Reconstructed PDG2011] -0.000330000 anti-D*0 omega SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; #[Reconstructed PDG2011] -# -# PR LHCb : add ppbar mode -0.0000001 p+ anti-p- PHSP; -# -#October 26, 2004 - Lange -0.0016 D_s0*+ D- PHSP; -0.0015 D*- D_s0*+ SVS; -0.003500000 D_s1+ D- SVS; #[Reconstructed PDG2011] -0.009300000 D*- D_s1+ SVV_HELAMP 0.4904 0. 0.7204 0. 0.4904 0.; #[Reconstructed PDG2011] -# -# Feb 2009 -# -0.000880000 D- K+ anti-K*0 PHSP; #[Reconstructed PDG2011] -0.001290000 D*- K+ anti-K*0 PHSP; #[Reconstructed PDG2011] -# -# Feb 2009 -# -0.002800000 D- omega pi+ PHSP; #[Reconstructed PDG2011] -0.002890000 D*- omega pi+ PHSP; #[Reconstructed PDG2011] -# -# Feb 2009 -# -0.000490000 D- K0 pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 D*- K0 pi+ PHSP; #[Reconstructed PDG2011] -# -# Feb 2009 -# -0.00043 D'_s1+ D- PHSP; -0.00083 D'_s1+ D*- PHSP; -#### Already included above 0.0023 D_s1+ D*- PHSP; -# -# Lam_c X / Sigma_c X 4.0 % -# -#0.01000 anti-cd_0 ud_0 PYTHIA 23; -#0.03000 anti-cd_1 ud_1 PYTHIA 23; -0.010520663 anti-cd_0 ud_0 PYTHIA 23; #[Reconstructed PDG2011] -0.021041421 anti-cd_1 ud_1 PYTHIA 23; #[Reconstructed PDG2011] -# -# Xi_c X 2.5% -# -#0.00600 anti-cs_0 ud_0 PYTHIA 23; -#0.01800 anti-cs_1 ud_1 PYTHIA 23; -0.002869298 anti-cs_0 ud_0 PYTHIA 23; #[Reconstructed PDG2011] -0.005738595 anti-cs_1 ud_1 PYTHIA 23; #[Reconstructed PDG2011] -# -# -0.258091538 u anti-d anti-c d PYTHIA 48; #[Reconstructed PDG2011] -0.043995612 u anti-d anti-c d PYTHIA 13; #[Reconstructed PDG2011] -0.020084989 u anti-s anti-c d PYTHIA 13; #[Reconstructed PDG2011] -0.017215691 u anti-c anti-d d PYTHIA 48; #[Reconstructed PDG2011] -0.000860770 u anti-c anti-s d PYTHIA 48; #[Reconstructed PDG2011] -#lange - try to crank up the psi production.... -0.070775534 c anti-s anti-c d PYTHIA 13; #[Reconstructed PDG2011] -0.005738595 c anti-d anti-c d PYTHIA 13; #[Reconstructed PDG2011] -0.002869298 u anti-d anti-u d PYTHIA 48; #[Reconstructed PDG2011] -0.003825730 c anti-s anti-u d PYTHIA 48; #[Reconstructed PDG2011] -# JGS 11/5/02 This and similar a few lines above have been divided by two -# to solve a double-counting problem for this channel -0.001960649 u anti-u anti-d d PYTHIA 48; #[Reconstructed PDG2011] -0.000066973 d anti-d anti-d d PYTHIA 48; #[Reconstructed PDG2011] -0.000086068 s anti-s anti-d d PYTHIA 48; #[Reconstructed PDG2011] -0.002104095 u anti-u anti-s d PYTHIA 48; #[Reconstructed PDG2011] -0.001721541 d anti-d anti-s d PYTHIA 48; #[Reconstructed PDG2011] -0.001434649 s anti-s anti-s d PYTHIA 48; #[Reconstructed PDG2011] -0.004782163 anti-s d PYTHIA 32; #[Reconstructed PDG2011] -0.017600000 D*- pi+ pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.004700000 D*- pi+ pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000110000 D_s- pi+ K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000052000 anti-D0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000046000 anti-D0 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000006000 D0 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000036000 anti-D*0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.002700000 D*0 pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000890000 eta_c K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000871000 J/psi K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000310000 J/psi omega K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000009500 J/psi eta PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000019000 J/psi pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000460000 J/psi K0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000540000 J/psi K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000800000 J/psi K*+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000660000 J/psi K*0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000170000 K0 D0 anti-D0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000620000 psi(2S) K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000140000 chi_c0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000011200 chi_c1 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000390000 chi_c1 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000158000 chi_c1 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000011000 eta K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000009600 eta K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000016000 omega K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000010100 omega K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000004700 K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000002700 f_2 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000001400 f_0 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000007500 K_2*0 phi PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000007600 eta K0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000004600 K+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000019500 K0 pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000041000 K+ pi- pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000012400 K_2*0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000860 rho0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000002660 p+ anti-p- K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000001240 p+ anti-p- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000003140 p+ anti-Lambda0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000004800 anti-Lambda0 Lambda0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000002500 anti-Lambda0 Lambda0 K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000011000 anti-Lambda0 Lambda0 D0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000114000 anti-D0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000028000 D_s- anti-Lambda0 p+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000103000 anti-D*0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001500000 D*- p+ anti-n0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000338000 D- p+ anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000500000 D*- p+ anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000020000 anti-Lambda_c- p+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000630000 anti-Lambda_c- p+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000120000 anti-Sigma_c*-- p+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000150000 anti-Sigma_c0 p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000220000 anti-Sigma_c-- p+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -# -# -Decay B- -# Updated to PDG 2008 -# b -> c semileptonic -# -0.056800000 D*0 e- anti-nu_e PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011] -0.022300000 D0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.0040 D_10 e- anti-nu_e PHOTOS ISGW2; -0.0024 D_0*0 e- anti-nu_e PHOTOS ISGW2; -0.0007 D'_10 e- anti-nu_e PHOTOS ISGW2; -0.0018 D_2*0 e- anti-nu_e PHOTOS ISGW2; -0.006100000 D*+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] -0.0003 D*0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -# covered by other decays -0.0000 D+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0010 D0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -# -0.056800000 D*0 mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011] -0.022300000 D0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.0040 D_10 mu- anti-nu_mu PHOTOS ISGW2; -0.0024 D_0*0 mu- anti-nu_mu PHOTOS ISGW2; -0.0007 D'_10 mu- anti-nu_mu PHOTOS ISGW2; -0.0018 D_2*0 mu- anti-nu_mu PHOTOS ISGW2; -0.006100000 D*+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] -0.0003 D*0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0000 D+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0010 D0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -# -# b -> c tau nu -# -0.020000000 D*0 tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011] -0.007000000 D0 tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011] -0.0013 D_10 tau- anti-nu_tau ISGW2; -0.0013 D_0*0 tau- anti-nu_tau ISGW2; -0.0020 D'_10 tau- anti-nu_tau ISGW2; -0.0020 D_2*0 tau- anti-nu_tau ISGW2; -# -# b -> u l nu -# -# NOTE: Do NOT CHANGE any BFs without using the corresponding set of -# hybrid weights (and vice versa). - -0.000077000 pi0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000037000 eta e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000128000 rho0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000115000 omega e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000270 eta' e- anti-nu_e PHOTOS ISGW2; -0.000000 D(2S)0 e- anti-nu_e PHOTOS ISGW2; -0.000000 D*(2S)0 e- anti-nu_e PHOTOS ISGW2; -0.001948 Xu0 e- anti-nu_e VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; -# -0.000077000 pi0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000037000 eta mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000128000 rho0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000115000 omega mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000270 eta' mu- anti-nu_mu PHOTOS ISGW2; -0.000000 D(2S)0 mu- anti-nu_mu PHOTOS ISGW2; -0.000000 D*(2S)0 mu- anti-nu_mu PHOTOS ISGW2; -0.001948 Xu0 mu- anti-nu_mu VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; -# -0.000030 pi0 tau- anti-nu_tau ISGW2; -0.000012 eta tau- anti-nu_tau ISGW2; -0.000042 rho0 tau- anti-nu_tau ISGW2; -0.000042 omega tau- anti-nu_tau ISGW2; -0.000018 eta' tau- anti-nu_tau ISGW2; -0.000046 a_10 tau- anti-nu_tau ISGW2; -0.000027 b_10 tau- anti-nu_tau ISGW2; -0.000004 a_00 tau- anti-nu_tau ISGW2; -0.000002 f_0 tau- anti-nu_tau ISGW2; -0.000002 f'_0 tau- anti-nu_tau ISGW2; -0.000023 f_1 tau- anti-nu_tau ISGW2; -0.000023 f'_1 tau- anti-nu_tau ISGW2; -0.000013 h_1 tau- anti-nu_tau ISGW2; -0.000013 h'_1 tau- anti-nu_tau ISGW2; -0.000020 f_2 tau- anti-nu_tau ISGW2; -0.000020 f'_2 tau- anti-nu_tau ISGW2; -0.000000 D(2S)0 tau- anti-nu_tau ISGW2; -0.000000 D*(2S)0 tau- anti-nu_tau ISGW2; -# -# -# -# b->u hadronic -# Ref. [B1]: -# -0.000016000 D_s- pi0 PHSP; #[Reconstructed PDG2011] -0.000020 D_s*- pi0 SVS; -# -0.000028 rho0 D_s- SVS; -0.000028 D_s*- rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - -# -# b-> s gamma -# -0.000042100 K*- gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -#0.0000135 K_1- gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000065 K'_1- gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000128 K'*- gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000166 K_2*- gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000017 K''*- gamma HELAMP 1.0 0.0 1.0 0.0; -0.0003118 anti-Xsu gamma BTOXSGAMMA 2 ; -# -0.000000550 K- e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.000001550 K*- e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.0000050 anti-Xsu e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.000000520 K- mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.000001160 K*- mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.0000025 anti-Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.0000001 K- tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 K*- tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 anti-Xsu tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -# -# b -> l nu -# -0.000180000 tau- anti-nu_tau SLN; #[Reconstructed PDG2011] -0.000000 mu- anti-nu_mu PHOTOS SLN; -0.000000 e- anti-nu_e PHOTOS SLN; -# -#------------------------------------------------------------------------------ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv -# -# Exclusive hadronic b->u -# -0.000026 pi- pi0 pi0 CB3PI-P00 alpha; -0.000000 pi- pi- pi+ CB3PI-MPP alpha; -#### -0.000004070 eta pi- PHSP; #[Reconstructed PDG2011] -0.000002330 eta K- PHSP; #[Reconstructed PDG2011] -0.000019300 K*- eta SVS; #[Reconstructed PDG2011] -0.000007000 rho- eta SVS; #[Reconstructed PDG2011] -0.000002700 eta' pi- PHSP; #[Reconstructed PDG2011] -0.000070600 eta' K- PHSP; #[Reconstructed PDG2011] -0.000004900 K*- eta' SVS; #[Reconstructed PDG2011] -0.000008700 rho- eta' SVS; #[Reconstructed PDG2011] -0.000006900 omega pi- SVS; #[Reconstructed PDG2011] -0.000006700 omega K- SVS; #[Reconstructed PDG2011] -0.0000010 omega K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000015900 omega rho- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.0000000 phi pi- SVS; -0.000008300 phi K- SVS; #[Reconstructed PDG2011] -#2-body modes from Jim Olsen -# (K_S0 K- and K_L0 K- -> 1x10^-6, Jim Olsen - Mar 27, 2001) -# (pi- pi0 -> 5x10^-6 and K- pi0 -> 11x10^-6, Jim Olsen - Mar 27, 2001) -# PR LHCb 04/08/2004 Split into Ks/KL -0.000000 anti-K0 pi- PHSP; -0.000011550 K_S0 pi- PHSP; #[Reconstructed PDG2011] -0.000011550 K_L0 pi- PHSP; #[Reconstructed PDG2011] -0.000001360 K0 K- PHSP; #[Reconstructed PDG2011] -0.000005700 pi- pi0 PHSP; #[Reconstructed PDG2011] -0.000012900 K- pi0 PHSP; #[Reconstructed PDG2011] -# -# 3-body John Back (jback@slac.stanford.edu) - Oct 15, 2002 -# JGS intersperses modes with pi0->eta,eta' -# B- modes -# -# rho0 3-body modes -0.000008300 rho0 pi- SVS; #[Reconstructed PDG2011] -0.000003700 rho0 K- SVS; #[Reconstructed PDG2011] -# -# rho- 3-body modes -0.000008000 rho- anti-K0 SVS; #[Reconstructed PDG2011] -0.000010900 rho- pi0 SVS; #[Reconstructed PDG2011] -# -# rho(1450) 3-body modes -0.0000022 rho(2S)0 pi- SVS; -0.000001 rho(2S)0 K- SVS; -# -# f0,a0(980) 3-body modes -0.000001 f_0 pi- PHSP; -0.0000092 f_0 K- PHSP; -0.000001 a_0- anti-K0 PHSP; -0.000001 a_00 K- PHSP; -0.000001 a_00 pi- PHSP; -0.000001 a_0- pi0 PHSP; - -0.000001600 f_2 pi- PHSP; #[Reconstructed PDG2011] - -# -# K*(1430) 3-body modes -0.000045000 anti-K_0*0 pi- PHSP; #[Reconstructed PDG2011] -0.000001 K_0*0 K- PHSP; -0.000002 K_0*- pi0 PHSP; -0.000002 K_0*- K0 PHSP; -# -# K*-(892) 3-body modes -0.000006900 K*- pi0 SVS; #[Reconstructed PDG2011] -0.0000030 K*- K0 SVS; -# -# -# -# Non-resonant 3-body left-overs -# Most modes are set at 1e-6 -# -# pi-pi+pi-: high mass + f0(400-1200) = (1+1)e-6 -#0402270.000002 pi- pi+ pi- PHSP; -# -# K- pi+ pi-: high mass + f0(400-1200) = (5+5)e-6 -0.000000000 K- pi+ pi- PHSP; #[Reconstructed PDG2011] -# -# K- K+ pi-: just non-resonant -0.000005000 K- K+ pi- PHSP; #[Reconstructed PDG2011] -# -# K- K+ K-: high mass structure near 1500 + non-res: total - phiK = 30 - 4 -0.000025400 K- K+ K- PHSP; #[Reconstructed PDG2011] -# -# -# K-K-pi+: suppressed mode (1e-7) -0.0000001 K- K- pi+ PHSP; -# K+pi-pi-: suppressed mode (1e-7) -0.0000001 K+ pi- pi- PHSP; -# -# -# K- K0 pi0 -0.000001 K- K0 pi0 PHSP; -0.000001 K- K0 eta PHSP; -0.000001 K- K0 eta' PHSP; -# -# pi- anti-K0 pi0 -0.000001 pi- anti-K0 pi0 PHSP; -0.000001 pi- anti-K0 eta PHSP; -0.000001 pi- anti-K0 eta' PHSP; -# -# pi- pi0 pi0 -#0402270.000001 pi- pi0 pi0 PHSP; -0.000001 pi- pi0 eta PHSP; -0.000001 pi- pi0 eta' PHSP; -0.000001 pi- eta eta PHSP; -0.000001 pi- eta eta' PHSP; -# -# K- pi0 pi0 -0.000001 K- pi0 pi0 PHSP; -0.000001 K- pi0 eta PHSP; -0.000001 K- pi0 eta' PHSP; -0.000001 K- eta eta PHSP; -0.000001 K- eta eta' PHSP; -0.000001 K- eta' eta' PHSP; -# -# K- anti-K0 K0: 4*BF(K+KsKs) (4 is a guess) -0.000046 K- anti-K0 K0 PHSP; -# -# pi- anti-K0 K0 -0.000001 pi- anti-K0 K0 PHSP; -# -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#--------------------------------------------------------------------------- -# -#4-body modes from Andrei Gritsan -#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- -# PR LHCb 22 Apr 2004 Set long. pol. for rho rho -0.000024000 rho- rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.000010 rho0 pi- pi0 PHSP; -0.000005 rho0 pi- eta PHSP; -0.000002 rho0 pi- eta' PHSP; -0.000010 omega pi- pi0 PHSP; -0.000005 omega pi- eta PHSP; -0.000002 omega pi- eta' PHSP; -0.000010 rho- pi- pi+ PHSP; -# PR LHCb Add rho+ pi- pi- -0.000010 rho+ pi- pi- PHSP; -0.000010 rho- pi0 pi0 PHSP; -0.000005 rho- pi0 eta PHSP; -0.000002 rho- eta eta PHSP; -0.000002 rho- pi0 eta' PHSP; -0.000010 pi+ pi- pi- pi0 PHSP; -0.000005 pi+ pi- pi- eta PHSP; -0.000002 pi+ pi- pi- eta' PHSP; -0.000010 pi- pi0 pi0 pi0 PHSP; -0.000005 pi- eta pi0 pi0 PHSP; -0.000002 pi- eta eta pi0 PHSP; -0.000002 pi- eta' pi0 pi0 PHSP; -0.000001 pi- eta' eta pi0 PHSP; -0.000020000 a_10 pi- SVS; #[Reconstructed PDG2011] -0.000026000 a_1- pi0 SVS; #[Reconstructed PDG2011] -0.0000067 b_10 pi- SVS; -0.000010 b_1- pi0 SVS; -0.000010 rho- f_0 SVS; -0.000010 rho- a_00 SVS; -0.000002 rho0 a_0- SVS; -0.000010 f_0 pi- pi0 PHSP; -0.000001 a_00 pi- pi0 PHSP; -0.000001 a_0- pi0 pi0 PHSP; -0.000001 a_0+ pi- pi- PHSP; -#--- 4-body rho-K*, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- -0.000009200 rho- anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000010 rho0 K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000010 pi- pi0 anti-K*0 PHSP; -0.000005 pi- eta anti-K*0 PHSP; -0.000069800 pi+ pi- K*- PHSP; #[Reconstructed PDG2011] -0.000010 pi0 pi0 K*- PHSP; -0.000005 pi0 eta K*- PHSP; -0.000002 eta eta K*- PHSP; -0.000002 pi0 eta' K*- PHSP; -0.000001 eta eta' K*- PHSP; -0.000010 rho- anti-K0 pi0 PHSP; -0.000005 rho- anti-K0 eta PHSP; -0.000002 rho- anti-K0 eta' PHSP; -0.000010 rho- K- pi+ PHSP; -0.000010 rho+ K- pi- PHSP; -0.000005 rho0 anti-K0 pi- PHSP; -0.000005 rho0 K- pi0 PHSP; -0.000002 rho0 K- eta PHSP; -0.000001 rho0 K- eta' PHSP; -0.000005 omega anti-K0 pi- PHSP; -0.000005 omega K- pi0 PHSP; -0.000002 omega K- eta PHSP; -0.000001 omega K- eta' PHSP; -0.000010 pi+ pi- pi- anti-K0 PHSP; -0.000010 pi- pi0 pi0 anti-K0 PHSP; -0.000005 pi- eta pi0 anti-K0 PHSP; -0.000002 pi- eta eta anti-K0 PHSP; -0.000010 pi+ pi- pi0 K- PHSP; -0.000005 pi+ pi- eta K- PHSP; -0.000010 pi0 pi0 pi0 K- PHSP; -0.000005 pi0 pi0 eta K- PHSP; -0.000002 pi0 eta eta K- PHSP; -0.000002 pi0 pi0 eta' K- PHSP; -0.000001 pi0 eta eta' K- PHSP; -0.000010 rho- anti-K_0*0 PHSP; -0.000006 rho0 K_0*- PHSP; -0.000010 pi- pi0 anti-K_0*0 PHSP; -0.000010 pi0 pi0 K_0*- PHSP; -0.000005200 K*- f_0 SVS; #[Reconstructed PDG2011] -0.000010 a_10 K- SVS; -0.000035000 a_1- anti-K0 SVS; #[Reconstructed PDG2011] -0.0000091 b_10 K- SVS; -0.000010 b_1- anti-K0 SVS; -0.000005 K*- a_00 SVS; -0.000005 anti-K*0 a_0- SVS; -#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ -0.000001 K*0 K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 phi rho- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 phi pi- pi0 PHSP; -0.0000005 phi pi- eta PHSP; -0.0000002 phi pi- eta' PHSP; -0.000001 K+ K- rho- PHSP; -0.000001 K0 anti-K0 rho- PHSP; -0.000001 K0 K- rho0 PHSP; -0.000001 K0 K- omega PHSP; -0.000001 K+ K- pi- pi0 PHSP; -0.0000005 K+ K- pi- eta PHSP; -0.0000002 K+ K- pi- eta' PHSP; -0.000001 K0 anti-K0 pi- pi0 PHSP; -0.0000005 K0 anti-K0 pi- eta PHSP; -0.0000002 K0 anti-K0 pi- eta' PHSP; -0.000001 K0 K- pi+ pi- PHSP; -0.000001 K0 K- pi0 pi0 PHSP; -0.0000005 K0 K- pi0 eta PHSP; -0.0000002 K0 K- eta eta PHSP; -0.0000002 K0 K- pi0 eta' PHSP; -0.0000001 K0 K- eta eta' PHSP; -0.000001 K*+ K- pi- PHSP; -0.000001 K*- K+ pi- PHSP; -0.000001 K*0 anti-K0 pi- PHSP; -0.000001 K0 anti-K*0 pi- PHSP; -0.000001 K- K*0 pi0 PHSP; -0.0000005 K- K*0 eta PHSP; -0.0000002 K- K*0 eta' PHSP; -0.000001 K*- K0 pi0 PHSP; -0.0000005 K*- K0 eta PHSP; -0.0000002 K*- K0 eta' PHSP; -#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- -0.000010000 phi K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000010 phi anti-K0 pi- PHSP; -0.000010 phi K- pi0 PHSP; -0.000005 phi K- eta PHSP; -0.000002 phi K- eta' PHSP; -0.000026000 K- K+ K*- PHSP; #[Reconstructed PDG2011] -0.000010 K- K*+ K- PHSP; -0.000010 K- K*0 anti-K0 PHSP; -0.000010 K- K0 anti-K*0 PHSP; -0.000010 K0 K*- anti-K0 PHSP; -0.000010 K+ K- K- pi0 PHSP; -0.000005 K+ K- K- eta PHSP; -0.000002 K+ K- K- eta' PHSP; -0.000010 K+ K- anti-K0 pi- PHSP; -0.000010 K0 anti-K0 K- pi0 PHSP; -0.000005 K0 anti-K0 K- eta PHSP; -0.000002 K0 anti-K0 K- eta' PHSP; -0.000010 K0 anti-K0 anti-K0 pi- PHSP; -0.000007000 phi K_0*- PHSP; #[Reconstructed PDG2011] -0.000010 K- K+ K_0*- PHSP; -0.000010 K- K- K_0*+ PHSP; -0.000010 K- anti-K_0*0 K0 PHSP; -0.000010 K- K_0*0 anti-K0 PHSP; -0.000002 phi K'_1- PHSP; -0.000002 K- K+ K'_1- PHSP; -#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- -0.000001 phi K0 K- PHSP; -0.000001 K+ K- K- K0 PHSP; -0.000001 K0 anti-K0 K0 K- PHSP; -# -#5-body modes from Jim Smith - 1/30/05 -#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- -0.000010 rho0 rho0 pi- PHSP; -0.000010 rho- rho0 pi0 PHSP; -0.000005 rho- rho0 eta PHSP; -0.000002 rho- rho0 eta' PHSP; -0.000010 rho+ rho- pi- PHSP; -0.000010 omega rho0 pi- PHSP; -0.000010 omega rho- pi0 PHSP; -0.000005 omega rho- eta PHSP; -0.000002 omega rho- eta' PHSP; -0.000002 rho0 pi+ pi- pi- PHSP; -0.000002 rho0 pi- pi0 pi0 PHSP; -0.000001 rho0 pi- eta pi0 PHSP; -0.000001 rho0 pi- eta' pi0 PHSP; -0.000002 omega pi- pi0 pi0 PHSP; -0.000001 omega pi- eta pi0 PHSP; -0.000001 omega pi- eta' pi0 PHSP; -0.000002 rho+ pi- pi- pi0 PHSP; -0.000001 rho+ pi- pi- eta PHSP; -0.000001 rho+ pi- pi- eta' PHSP; -0.000002 rho- pi+ pi- pi0 PHSP; -0.000001 rho- pi+ pi- eta PHSP; -0.000001 rho- pi+ pi- eta' PHSP; -0.000002 rho- pi0 pi0 pi0 PHSP; -0.000001 rho- pi0 eta pi0 PHSP; -0.000001 rho- eta eta pi0 PHSP; -0.000001 rho- pi0 eta' pi0 PHSP; -0.000001 pi+ pi- pi- pi0 pi0 PHSP; -0.000001 pi+ pi- pi- eta pi0 PHSP; -0.000001 pi+ pi- pi- eta' pi0 PHSP; -0.000001 pi- pi0 pi0 pi0 pi0 PHSP; -0.000001 pi- eta pi0 pi0 pi0 PHSP; -0.000001 pi- eta' pi0 pi0 pi0 PHSP; -0.000010 a_1- rho0 PHSP; -0.000010 a_1- omega PHSP; -0.000010 a_1- f_0 PHSP; -0.000010 a_10 pi- pi0 PHSP; -0.000005 a_10 pi- eta PHSP; -0.000002 a_10 pi- eta' PHSP; -0.000010 a_1+ pi- pi- PHSP; -0.000010 a_1- pi+ pi- PHSP; -0.000010 a_1- pi0 pi0 PHSP; -0.000005 a_1- pi0 eta PHSP; -0.000002 a_1- pi0 eta' PHSP; -0.000010 rho- f_0 pi0 PHSP; -0.000005 rho- f_0 eta PHSP; -0.000002 rho- f_0 eta' PHSP; -0.000010 rho0 f_0 pi- PHSP; -0.000010 omega f_0 pi- PHSP; -0.000010 rho- a_00 pi0 PHSP; -0.000005 rho- a_00 eta PHSP; -0.000002 rho- a_00 eta' PHSP; -0.000010 rho+ a_0- pi- PHSP; -0.000010 rho0 a_0- pi0 PHSP; -0.000005 rho0 a_0- eta PHSP; -0.000002 rho0 a_0- eta' PHSP; -0.000002 f_0 pi+ pi- pi- PHSP; -0.000002 f_0 pi- pi0 pi0 PHSP; -0.000001 f_0 pi- pi0 eta PHSP; -0.000001 f_0 pi- pi0 eta' PHSP; -0.000001 a_00 pi- pi0 pi0 PHSP; -0.000001 a_0- pi0 pi0 pi0 PHSP; -0.000001 a_0+ pi- pi- pi0 PHSP; -#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- -0.000010 rho- K*- pi+ PHSP; -0.000010 rho+ K*- pi- PHSP; -0.000010 rho- anti-K*0 pi0 PHSP; -0.000005 rho- anti-K*0 eta PHSP; -0.000002 rho- anti-K*0 eta' PHSP; -0.000010 rho0 anti-K*0 pi- PHSP; -0.000010 rho0 K*- pi0 PHSP; -0.000005 rho0 K*- eta PHSP; -0.000002 rho0 K*- eta' PHSP; -0.000010 omega anti-K*0 pi- PHSP; -0.000010 omega K*- pi0 PHSP; -0.000005 omega K*- eta PHSP; -0.000002 omega K*- eta' PHSP; -0.000010 pi+ pi- anti-K*0 pi- PHSP; -0.000010 pi- pi0 anti-K*0 pi0 PHSP; -0.000005 pi- eta anti-K*0 pi0 PHSP; -0.000002 pi- eta' anti-K*0 pi0 PHSP; -0.000010 pi- pi+ K*- pi0 PHSP; -0.000005 pi- pi+ K*- eta PHSP; -0.000002 pi- pi+ K*- eta' PHSP; -0.000010 pi0 pi0 K*- pi0 PHSP; -0.000005 pi0 eta K*- pi0 PHSP; -0.000002 eta eta K*- pi0 PHSP; -0.000002 pi0 eta' K*- pi0 PHSP; -0.000001 eta eta' K*- pi0 PHSP; -0.000010 rho- anti-K0 pi+ pi- PHSP; -0.000010 rho- anti-K0 pi0 pi0 PHSP; -0.000005 rho- anti-K0 eta pi0 PHSP; -0.000002 rho- anti-K0 eta' pi0 PHSP; -0.000010 rho- K- pi+ pi0 PHSP; -0.000010 rho+ K- pi- pi0 PHSP; -0.000010 rho+ anti-K0 pi- pi- PHSP; -0.000010 rho0 anti-K0 pi- pi0 PHSP; -0.000010 rho0 K- pi0 pi0 PHSP; -0.000005 rho0 K- eta pi0 PHSP; -0.000002 rho0 K- eta' pi0 PHSP; -0.000010 omega anti-K0 pi- pi0 PHSP; -0.000010 omega K- pi0 pi0 PHSP; -0.000005 omega K- eta pi0 PHSP; -0.000002 omega K- eta' pi0 PHSP; -0.000002 pi- pi- pi+ anti-K0 pi0 PHSP; -0.000001 pi- pi- pi+ anti-K0 eta PHSP; -0.000001 pi- pi- pi+ anti-K0 eta' PHSP; -0.000002 pi- pi0 pi0 anti-K0 pi0 PHSP; -0.000001 pi- eta pi0 anti-K0 pi0 PHSP; -0.000001 pi- eta eta anti-K0 pi0 PHSP; -0.000002 pi+ pi- pi+ K- pi- PHSP; -0.000002 pi+ pi- pi0 K- pi0 PHSP; -0.000001 pi+ pi- eta K- pi0 PHSP; -0.000001 pi+ pi- eta' K- pi0 PHSP; -0.000002 pi0 pi0 pi0 K- pi0 PHSP; -0.000001 pi0 pi0 eta K- pi0 PHSP; -0.000001 pi0 eta eta K- pi0 PHSP; -0.000001 pi0 pi0 eta' K- pi0 PHSP; -0.000001 pi0 eta eta' K- pi0 PHSP; -0.000010 rho0 anti-K_0*0 pi- PHSP; -0.000010 rho- anti-K_0*0 pi0 PHSP; -0.000005 rho- anti-K_0*0 eta PHSP; -0.000002 rho- anti-K_0*0 eta' PHSP; -0.000010 rho- K_0*- pi+ PHSP; -0.000010 rho0 K_0*- pi0 PHSP; -0.000005 rho0 K_0*- eta PHSP; -0.000002 rho0 K_0*- eta' PHSP; -0.000010 pi- pi- anti-K_0*0 pi+ PHSP; -0.000010 pi- pi0 anti-K_0*0 pi0 PHSP; -0.000005 pi- pi0 anti-K_0*0 eta PHSP; -0.000002 pi- pi0 anti-K_0*0 eta' PHSP; -0.000010 pi0 pi0 K_0*- pi0 PHSP; -0.000005 pi0 pi0 K_0*- eta PHSP; -0.000002 pi0 pi0 K_0*- eta' PHSP; -0.000010 anti-K*0 f_0 pi- PHSP; -0.000010 K*- f_0 pi0 PHSP; -0.000005 K*- f_0 eta PHSP; -0.000002 K*- f_0 eta' PHSP; -0.000020 a_10 K*- PHSP; -0.000010 a_10 K- pi0 PHSP; -0.000010 a_10 anti-K0 pi- PHSP; -0.000020 a_1- anti-K*0 PHSP; -0.000010 a_1- K- pi+ PHSP; -0.000010 a_1- anti-K0 pi0 PHSP; -0.000005 K*- a_00 pi0 PHSP; -0.000005 anti-K*0 a_0- pi0 PHSP; -#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ -0.000001 K*0 anti-K*0 pi- PHSP; -0.000001 K*0 K*- pi0 PHSP; -0.0000005 K*0 K*- eta PHSP; -0.0000002 K*0 K*- eta' PHSP; -0.000001 phi rho0 pi- PHSP; -0.000001 phi omega pi- PHSP; -0.000001 phi f_0 pi- PHSP; -0.000001 phi rho- pi0 PHSP; -0.0000005 phi rho- eta PHSP; -0.0000002 phi rho- eta' PHSP; -0.000001 phi pi+ pi- pi- PHSP; -0.000001 phi pi- pi0 pi0 PHSP; -0.0000005 phi pi- eta pi0 PHSP; -0.0000002 phi pi- eta' pi0 PHSP; -0.000001 K0 K- rho+ pi- PHSP; -0.000001 K0 K- rho- pi+ PHSP; -0.000001 K0 K- rho0 pi0 PHSP; -0.0000005 K0 K- rho0 eta PHSP; -0.0000002 K0 K- rho0 eta' PHSP; -0.000001 K0 K- omega pi0 PHSP; -0.000001 K0 K- f_0 pi0 PHSP; -0.000001 K+ K- rho0 pi- PHSP; -0.000001 K+ K- rho- pi0 PHSP; -0.0000005 K+ K- rho- eta PHSP; -0.0000002 K+ K- rho- eta' PHSP; -0.000001 K+ K- omega pi- PHSP; -0.000001 K0 anti-K0 rho0 pi- PHSP; -0.000001 K0 anti-K0 omega pi- PHSP; -0.000001 K0 anti-K0 f_0 pi- PHSP; -0.000001 K0 anti-K0 rho- pi0 PHSP; -0.0000005 K0 anti-K0 rho- eta PHSP; -0.0000002 K0 anti-K0 rho- eta' PHSP; -0.000001 anti-K0 K+ rho- pi- PHSP; -0.0000002 anti-K0 K+ pi- pi- pi0 PHSP; -0.0000001 anti-K0 K+ pi- pi- eta PHSP; -0.0000001 anti-K0 K+ pi- pi- eta' PHSP; -0.0000002 K+ K- pi+ pi- pi- PHSP; -0.0000002 K+ K- pi- pi0 pi0 PHSP; -0.0000001 K+ K- pi- eta pi0 PHSP; -0.0000001 K+ K- pi- eta' pi0 PHSP; -0.0000002 K0 anti-K0 pi+ pi- pi- PHSP; -0.0000002 K0 anti-K0 pi- pi0 pi0 PHSP; -0.0000001 K0 anti-K0 pi- eta pi0 PHSP; -0.0000001 K0 anti-K0 pi- eta' pi0 PHSP; -0.0000002 K0 K- pi+ pi- pi0 PHSP; -0.0000001 K0 K- pi+ pi- eta PHSP; -0.0000001 K0 K- pi+ pi- eta' PHSP; -0.0000002 K0 K- pi0 pi0 pi0 PHSP; -0.0000001 K0 K- pi0 eta pi0 PHSP; -0.0000001 K0 K- pi0 eta' pi0 PHSP; -0.000001 anti-K*0 K+ pi- pi- PHSP; -0.000001 K*+ anti-K0 pi- pi- PHSP; -0.000001 K*- K+ pi- pi0 PHSP; -0.000001 K*+ K- pi- pi0 PHSP; -0.000001 K*0 anti-K0 pi- pi0 PHSP; -0.000001 K0 anti-K*0 pi- pi0 PHSP; -0.000001 K- K*0 pi0 pi0 PHSP; -0.0000005 K- K*0 eta pi0 PHSP; -0.0000002 K- K*0 eta' pi0 PHSP; -0.000001 K*- K0 pi0 pi0 PHSP; -0.0000005 K*- K0 eta pi0 PHSP; -0.0000002 K*- K0 eta' pi0 PHSP; -#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- -0.000010 phi K*- pi0 PHSP; -0.000010 phi K- rho0 PHSP; -0.000010 phi K- omega PHSP; -0.000010 phi K- f_0 PHSP; -0.000010 phi anti-K0 rho- PHSP; -0.000010 phi anti-K0 pi- pi0 PHSP; -0.000010 phi K- pi+ pi- PHSP; -0.000010 phi K- pi0 pi0 PHSP; -0.000005 phi K- eta pi0 PHSP; -0.000002 phi K- eta' pi0 PHSP; -0.000010 K+ K- K*- pi0 PHSP; -0.000010 K- K*+ K- pi0 PHSP; -0.000010 K- K*0 anti-K0 pi0 PHSP; -0.000010 K- K0 anti-K*0 pi0 PHSP; -0.000010 K0 K*- anti-K0 pi0 PHSP; -0.000010 K+ K- K- rho0 PHSP; -0.000010 K+ K- K- omega PHSP; -0.000010 K+ K- K- f_0 PHSP; -0.000010 K- K+ anti-K0 rho- PHSP; -0.000010 K- K- K+ pi0 pi0 PHSP; -0.000005 K- K- K+ eta pi0 PHSP; -0.000002 K- K- K+ eta' pi0 PHSP; -0.000010 K+ K- anti-K0 pi- pi0 PHSP; -0.000010 K0 anti-K0 K- pi0 pi0 PHSP; -0.000005 K0 anti-K0 K- eta pi0 PHSP; -0.000002 K0 anti-K0 K- eta' pi0 PHSP; -0.000010 K0 anti-K0 anti-K0 pi- pi0 PHSP; -0.000010 phi anti-K_0*0 pi- PHSP; -0.000010 phi K_0*- pi0 PHSP; -0.000005 phi K_0*- eta PHSP; -0.000002 phi K_0*- eta' PHSP; -0.000010 K- K+ K_0*- pi0 PHSP; -0.000005 K- K+ K_0*- eta PHSP; -0.000002 K- K+ K_0*- eta' PHSP; -0.000010 K- K- K_0*+ pi0 PHSP; -0.000005 K- K- K_0*+ eta PHSP; -0.000002 K- K- K_0*+ eta' PHSP; -0.000010 K- K+ anti-K_0*0 pi- PHSP; -0.000010 K- K- K_0*0 pi+ PHSP; -0.000010 anti-K0 anti-K0 K_0*0 pi- PHSP; -0.000010 K- anti-K_0*0 K0 pi0 PHSP; -0.000005 K- anti-K_0*0 K0 eta PHSP; -0.000002 K- anti-K_0*0 K0 eta' PHSP; -0.000010 K- K_0*0 anti-K0 pi0 PHSP; -0.000005 K- K_0*0 anti-K0 eta PHSP; -0.000002 K- K_0*0 anti-K0 eta' PHSP; -0.000002 phi anti-K'_10 pi- PHSP; -0.000002 phi K'_1- pi0 PHSP; -0.000001 phi K'_1- eta PHSP; -0.000001 phi K'_1- eta' PHSP; -0.000002 K- K+ anti-K'_10 pi- PHSP; -0.000002 K- K+ K'_1- pi0 PHSP; -0.000001 K- K+ K'_1- eta PHSP; -0.000001 K- K+ K'_1- eta' PHSP; -0.000002 K- K- K'_1+ pi0 PHSP; -0.000002 K- K- anti-K'_10 pi+ PHSP; -0.000002 K0 anti-K0 anti-K'_10 pi- PHSP; -0.000002 K0 anti-K0 K'_1- pi0 PHSP; -0.000001 K0 anti-K0 K'_1- eta PHSP; -0.000001 K0 anti-K0 K'_1- eta' PHSP; -0.000002 anti-K0 anti-K0 K'_10 pi- PHSP; -0.000002 K0 K0 K'_1- pi0 PHSP; -0.000001 K0 K0 K'_1- eta PHSP; -0.000001 K0 K0 K'_1- eta' PHSP; -0.000010 K- K0 anti-K'_10 pi0 PHSP; -0.000005 K- K0 anti-K'_10 eta PHSP; -0.000002 K- K0 anti-K'_10 eta' PHSP; -0.000010 K- K'_10 anti-K0 pi0 PHSP; -0.000005 K- K'_10 anti-K0 eta PHSP; -0.000002 K- K'_10 anti-K0 eta' PHSP; -#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ -0.000004900 phi phi K- PHSP; #[Reconstructed PDG2011] -0.000001 phi phi pi- PHSP; -0.000001 phi K+ K- K- PHSP; -0.000001 phi K0 anti-K0 K- PHSP; -0.000001 phi K0 anti-K0 pi- PHSP; -0.000001 phi K0 K- pi0 PHSP; -0.000001 K+ K- K+ K- pi- PHSP; -0.000001 K+ K- K0 anti-K0 pi- PHSP; -0.000001 K+ K- K- K0 pi0 PHSP; -0.000001 K0 anti-K0 K0 K- pi0 PHSP; -#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ -0.000003 phi phi K*- PHSP; -0.000001 phi K+ K- K*- PHSP; -0.000001 phi K0 anti-K0 K*- PHSP; -0.000001 phi K0 K- K*0 PHSP; -0.000001 phi K+ K- K- pi0 PHSP; -0.000001 phi K+ K- anti-K0 pi- PHSP; -0.000001 phi K0 anti-K0 K- pi0 PHSP; -0.000001 phi K0 anti-K0 anti-K0 pi- PHSP; -0.000001 phi K0 K- K- pi+ PHSP; -#--- 6-body a1a1 ------------ -0.000050 a_1- a_10 PHSP; -# -# B -> cc= s sum = 1.92% -# -0.001014000 J/psi K- SVS; #[Reconstructed PDG2011] -0.001430000 J/psi K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] -0.000049000 J/psi pi- SVS; #[Reconstructed PDG2011] -0.000050000 J/psi rho- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] -0.0002 J/psi anti-K0 pi- PHSP; -0.0001 J/psi K- pi0 PHSP; -#rl0.0007 J/psi K- pi+ pi- PHSP; -#rl0.00035 J/psi K- pi0 pi0 PHSP; -#rl0.00035 J/psi anti-K0 pi- pi0 PHSP; -0.0001 J/psi K'_1- SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; -0.0005 J/psi K_2*- PHSP; -0.001800000 J/psi K_1- SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] -0.000052000 J/psi phi K- PHSP; #[Reconstructed PDG2011] -# -0.000646000 psi(2S) K- SVS; #[Reconstructed PDG2011] -0.000620000 psi(2S) K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] -0.0004 psi(2S) anti-K0 pi- PHSP; -0.0002 psi(2S) K- pi0 PHSP; -0.001900000 psi(2S) K- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.0001 psi(2S) K- pi0 pi0 PHSP; -0.0001 psi(2S) anti-K0 pi- pi0 PHSP; -0.0004 psi(2S) K_1- PHSP; -# -0.000910000 eta_c K- PHSP; #[Reconstructed PDG2011] -0.001200000 K*- eta_c SVS; #[Reconstructed PDG2011] -0.0002 eta_c anti-K0 pi- PHSP; -0.0001 eta_c K- pi0 PHSP; -0.0002 eta_c K- pi+ pi- PHSP; -0.0001 eta_c K- pi0 pi0 PHSP; -0.0001 eta_c anti-K0 pi- pi0 PHSP; -# -0.000340000 eta_c(2S) K- PHSP; #[Reconstructed PDG2011] -0.00048 K*- eta_c(2S) SVS; -0.00008 eta_c(2S) anti-K0 pi- PHSP; -0.00005 eta_c(2S) K- pi0 PHSP; -0.00008 eta_c(2S) K- pi+ pi- PHSP; -0.00005 eta_c(2S) K- pi0 pi0 PHSP; -0.00005 eta_c(2S) anti-K0 pi- pi0 PHSP; -# -0.000133000 chi_c0 K- PHSP; #[Reconstructed PDG2011] -0.0004 K*- chi_c0 SVS; -0.0002 chi_c0 anti-K0 pi- PHSP; -0.0001 chi_c0 K- pi0 PHSP; -0.0002 chi_c0 K- pi+ pi- PHSP; -0.0001 chi_c0 K- pi0 pi0 PHSP; -0.0001 chi_c0 anti-K0 pi- pi0 PHSP; -# -0.000460000 chi_c1 K- SVS; #[Reconstructed PDG2011] -0.000300000 chi_c1 K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] -0.0004 chi_c1 anti-K0 pi- PHSP; -0.0002 chi_c1 K- pi0 PHSP; -0.0004 chi_c1 K- pi+ pi- PHSP; -0.0002 chi_c1 K- pi0 pi0 PHSP; -0.0002 chi_c1 anti-K0 pi- pi0 PHSP; -# -0.00002 chi_c2 K- STS; -0.00002 chi_c2 K*- PHSP; -0.0002 chi_c2 anti-K0 pi- PHSP; -0.0001 chi_c2 K- pi0 PHSP; -0.0002 chi_c2 K- pi+ pi- PHSP; -0.0001 chi_c2 K- pi0 pi0 PHSP; -0.0001 chi_c2 anti-K0 pi- pi0 PHSP; -# -0.000490000 psi(3770) K- SVS; #[Reconstructed PDG2011] -0.0005 psi(3770) K*- PHSP; -0.0003 psi(3770) anti-K0 pi- PHSP; -0.0002 psi(3770) K- pi0 PHSP; -0.0002 psi(3770) K- pi+ pi- PHSP; -0.0001 psi(3770) K- pi0 pi0 PHSP; -0.0001 psi(3770) anti-K0 pi- pi0 PHSP; -0.0003 psi(3770) K_1- PHSP; -# -# b -> c (sc=) -> D Ds X Sum = 10% -# -0.010000000 D0 D_s- PHSP; #[Reconstructed PDG2011] -0.008200000 D*0 D_s- SVS; #[Reconstructed PDG2011] -0.007600000 D_s*- D0 SVS; #[Reconstructed PDG2011] -0.017100000 D_s*- D*0 SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; #[Reconstructed PDG2011] -0.0006 D'_10 D_s- SVS; -0.0012 D'_10 D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0012 D_10 D_s- SVS; -0.0024 D_10 D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0042 D_2*0 D_s- STS; -0.0040 D_2*0 D_s*- PHSP; -# -# -# SVV_HELAMP from factorization, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: -# -0.0036 D_s- D+ pi- PHSP; -0.0018 D_s- D0 pi0 PHSP; -0.0037 D_s*- D+ pi- PHSP; -0.0018 D_s*- D0 pi0 PHSP; -0.0033 D_s- D+ pi- pi0 PHSP; -0.0033 D_s- D0 pi- pi+ PHSP; -0.0008 D_s- D0 pi0 pi0 PHSP; -0.0033 D_s*- D+ pi- pi0 PHSP; -0.0033 D_s*- D0 pi- pi+ PHSP; -0.0008 D_s*- D0 pi0 pi0 PHSP; -# -# -# b -> c (sc=) -> D D= K X Sum = 8% -# update: Ref. [B1]: -# -0.0017 D0 D- anti-K0 PHSP; -0.0052 D0 D*- anti-K0 PHSP; -0.0031 D*0 D- anti-K0 PHSP; -0.007800000 D*0 D*- anti-K0 PHSP; #[Reconstructed PDG2011] -# External+internal W-emission amplitude -0.002100000 D0 anti-D0 K- PHSP; #[Reconstructed PDG2011] -0.0018 D*0 anti-D0 K- PHSP; -0.004700000 D0 anti-D*0 K- PHSP; #[Reconstructed PDG2011] -0.005300000 D*0 anti-D*0 K- PHSP; #[Reconstructed PDG2011] -# Internal W-emission amplitude (color suppressed modes) -0.0005 D- D+ K- PHSP; -0.0005 D*- D+ K- PHSP; -0.001500000 D- D*+ K- PHSP; #[Reconstructed PDG2011] -0.0015 D*- D*+ K- PHSP; -# -0.0025 D0 D- anti-K*0 PHSP; -0.0025 D*0 D- anti-K*0 PHSP; -0.0025 D0 D*- anti-K*0 PHSP; -0.0050 D*0 D*- anti-K*0 PHSP; -# -0.0025 D0 anti-D0 K*- PHSP; -0.0025 D*0 anti-D0 K*- PHSP; -0.0025 D0 anti-D*0 K*- PHSP; -0.0050 D*0 anti-D*0 K*- PHSP; -# -0.0005 D- D+ K*- PHSP; -0.0005 D*- D+ K*- PHSP; -0.0005 D- D*+ K*- PHSP; -0.0010 D*- D*+ K*- PHSP; -# -# B->D(*)D(*). See Ref [B1]: -# -0.000380000 D- D0 PHSP; #[Reconstructed PDG2011] -0.000390000 D*- D0 SVS; #[Reconstructed PDG2011] -0.000630000 D*0 D- SVS; #[Reconstructed PDG2011] -0.000810000 D*0 D*- SVV_HELAMP 0.47 0.0 0.96 0.0 0.56 0.0; #[Reconstructed PDG2011] - -# -# B -> D(*) X Exclusive Modes -# -0.005190000 D*0 pi- SVS; #[Reconstructed PDG2011] -0.004840000 D0 pi- PHSP; #[Reconstructed PDG2011] -0.013400000 rho- D0 SVS; #[Reconstructed PDG2011] -# D* rho HELAMP parameters taken from ICHEP 98-852. -0.009800000 D*0 rho- SVV_HELAMP 0.228 0.95 0.932 0.0 0.283 1.13; #[Reconstructed PDG2011] -# -0.0005 D0 pi0 pi- PHSP; -0.0005 D*0 pi0 pi- PHSP; -0.001070000 D+ pi- pi- PHSP; #[Reconstructed PDG2011] -0.001350000 D*+ pi- pi- PHSP; #[Reconstructed PDG2011] -# -# D a1 updated Ref. [B1]: -0.004000000 a_1- D0 SVS; #[Reconstructed PDG2011] -0.000200000 D0 rho0 pi- PHSP; #[Reconstructed PDG2011] -0.006800000 D0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -# -# SVV_HELAMP from factorization, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: -# updated Ref. [B1]: -# -# -0.019000000 D*0 a_1- SVV_HELAMP 0.200 0.0 0.866 0.0 0.458 0.0; #[Reconstructed PDG2011] -# -0.00042 D*0 rho0 pi- PHSP; -0.010300000 D*0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -# -0.0020 D+ rho- pi- PHSP; -0.0020 D+ pi0 pi- pi- PHSP; -0.0020 D*+ rho- pi- PHSP; -0.015000000 D*+ pi0 pi- pi- PHSP; #[Reconstructed PDG2011] -0.0005 D*0 rho- pi0 PHSP; -0.0005 D*0 pi- pi0 pi0 PHSP; -# -# B->D** pi and D** rho, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html -# further update October 26, 2004 Lange -# -0.000876 D_10 pi- SVS; -0.0005 D'_10 pi- SVS; -0.00052 D_2*0 pi- STS; -0.0007 D_10 rho- PHSP; -0.0022 D'_10 rho- PHSP; -0.0038 D_2*0 rho- PHSP; -0.00061 D_0*0 pi- PHSP; -# -# -# B->DK, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: -# update: Ref [B1]: -# -0.000368000 D0 K- PHSP; #[Reconstructed PDG2011] -0.000421000 D*0 K- SVS; #[Reconstructed PDG2011] -0.000530000 K*- D0 SVS; #[Reconstructed PDG2011] -0.000810000 D*0 K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; #[Reconstructed PDG2011] -#October 26, 2004 Lange -0.0000005 D- pi0 PHSP; -0.0000005 D*- pi0 SVS; -0.000011 D- anti-K0 PHSP; -0.000006 D*- anti-K0 SVS; -# -#October 26, 2004 - Lange -0.00075 D0 D_s0*- PHSP; -0.0009 D*0 D_s0*- SVS; -0.003100000 D_s1- D0 SVS; #[Reconstructed PDG2011] -0.012000000 D*0 D_s1- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] -# -# Feb 2009 -# -0.00055 D0 K- anti-K0 PHSP; -0.00075 D0 K- anti-K*0 PHSP; -0.001500000 D*0 K- anti-K*0 PHSP; #[Reconstructed PDG2011] -# -# Feb 2009 -# -0.002750000 D0 omega pi- PHSP; #[Reconstructed PDG2011] -0.004500000 D*0 omega pi- PHSP; #[Reconstructed PDG2011] -# -# Feb 2009 -# -0.00045 D0 D'_s1- PHSP; -0.00094 D*0 D'_s1- PHSP; -# -# Lam_c X / Sigma_c X 4.0 % -# -#0.04000 cd_1 anti-uu_1 PYTHIA 23; -0.032587684 cd_1 anti-uu_1 PYTHIA 23; #[Reconstructed PDG2011] -# -# Xi_c X 2.5% -# -#0.02400 cs_1 anti-uu_1 PYTHIA 23; -0.008887593 cs_1 anti-uu_1 PYTHIA 23; #[Reconstructed PDG2011] -# -# -0.222451667 anti-u d c anti-u PYTHIA 48; #[Reconstructed PDG2011] -0.042462776 anti-u d c anti-u PYTHIA 13; #[Reconstructed PDG2011] -0.022218888 anti-u s c anti-u PYTHIA 13; #[Reconstructed PDG2011] -#lange - try to crank up the psi production.... -0.073075460 anti-c s c anti-u PYTHIA 13; #[Reconstructed PDG2011] -0.003950000 anti-c d c anti-u PYTHIA 13; #[Reconstructed PDG2011] -0.002962500 anti-u d u anti-u PYTHIA 48; #[Reconstructed PDG2011] -0.003950000 anti-c s u anti-u PYTHIA 48; #[Reconstructed PDG2011] -# JGS 11/5/02 This and similar a few lines above have been divided by two -# to solve a double-counting problem for this channel -0.002024389 anti-u u d anti-u PYTHIA 48; #[Reconstructed PDG2011] -0.000069145 anti-d d d anti-u PYTHIA 48; #[Reconstructed PDG2011] -0.000088900 anti-s s d anti-u PYTHIA 48; #[Reconstructed PDG2011] -0.002172556 anti-u u s anti-u PYTHIA 48; #[Reconstructed PDG2011] -0.001777537 anti-d d s anti-u PYTHIA 48; #[Reconstructed PDG2011] -0.001481296 anti-s s s anti-u PYTHIA 48; #[Reconstructed PDG2011] -0.004937500 s anti-u PYTHIA 32; #[Reconstructed PDG2011] -# -#### -0.000550000 D0 K- K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000750000 D0 K- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.018000000 D*0 pi+ pi- pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.005700000 D*0 pi- pi- pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.002600000 D*+ pi- pi- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000180000 D_s+ pi- K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000145000 D_s*+ pi- K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000011000 D_s+ K- K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001070000 J/psi K- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000108000 J/psi eta K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000350000 J/psi omega K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000011800 J/psi anti-p- Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000025800 psi(2S) pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000020000 chi_c1 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000018000 eta K_0*- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000009100 eta K_2*- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000024000 omega K_0*- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000021000 omega K_2*- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000010100 anti-K*0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000001070 f_2 K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000005600 anti-K_2*0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000001200 K*- anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000006100 phi K_1- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000008400 phi K_2*- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000043000 K_1- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000007900 eta K- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000003500 phi K- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000007600 K- pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000020000 anti-K*0 pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000046000 anti-K0 pi- pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000014000 K_2*- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000980 rho- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000001620 anti-p- p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000005900 anti-p- p+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000003600 anti-p- p+ K*- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000002500 anti-p- Lambda0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000003000 anti-p- Lambda0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000000 anti-p- Lambda0 pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000004800 anti-p- Lambda0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000002000 anti-p- Lambda0 f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000003400 anti-Lambda0 Lambda0 K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000002200 anti-Lambda0 Lambda0 K*- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000280000 Lambda_c+ anti-p- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001800000 Lambda_c+ anti-p- pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.002300000 Lambda_c+ anti-p- pi- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000035000 Sigma_c0 anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000440000 Sigma_c0 anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000440000 Sigma_c0 anti-p- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000280000 Sigma_c++ anti-p- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay B+ -# Updated to PDG 2008 -# b -> c semileptonic -# -0.056800000 anti-D*0 e+ nu_e PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011] -0.022300000 anti-D0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.0040 anti-D_10 e+ nu_e PHOTOS ISGW2; -0.0024 anti-D_0*0 e+ nu_e PHOTOS ISGW2; -0.0007 anti-D'_10 e+ nu_e PHOTOS ISGW2; -0.0018 anti-D_2*0 e+ nu_e PHOTOS ISGW2; -0.006100000 D*- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] -0.0003 anti-D*0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; -# covered by other decays -0.0000 D- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; -0.0010 anti-D0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; - -0.056800000 anti-D*0 mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011] -0.022300000 anti-D0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.0040 anti-D_10 mu+ nu_mu PHOTOS ISGW2; -0.0024 anti-D_0*0 mu+ nu_mu PHOTOS ISGW2; -0.0007 anti-D'_10 mu+ nu_mu PHOTOS ISGW2; -0.0018 anti-D_2*0 mu+ nu_mu PHOTOS ISGW2; -0.006100000 D*- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] -0.0003 anti-D*0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0000 D- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0010 anti-D0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; -# -# b -> c tau nu -# -0.020000000 anti-D*0 tau+ nu_tau ISGW2; #[Reconstructed PDG2011] -0.007000000 anti-D0 tau+ nu_tau ISGW2; #[Reconstructed PDG2011] -0.0013 anti-D_10 tau+ nu_tau ISGW2; -0.0013 anti-D_0*0 tau+ nu_tau ISGW2; -0.0020 anti-D'_10 tau+ nu_tau ISGW2; -0.0020 anti-D_2*0 tau+ nu_tau ISGW2; -# -# b -> u l nu -# -# -# - -0.000077000 pi0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000037000 eta e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000128000 rho0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000115000 omega e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000270 eta' e+ nu_e PHOTOS ISGW2; -0.000000 anti-D(2S)0 e+ nu_e PHOTOS ISGW2; -0.000000 anti-D*(2S)0 e+ nu_e PHOTOS ISGW2; -0.001948 Xu0 e+ nu_e VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; -# -0.000077000 pi0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000037000 eta mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000128000 rho0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000115000 omega mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000270 eta' mu+ nu_mu PHOTOS ISGW2; -0.000000 anti-D(2S)0 mu+ nu_mu PHOTOS ISGW2; -0.000000 anti-D*(2S)0 mu+ nu_mu PHOTOS ISGW2; -0.001948 Xu0 mu+ nu_mu VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; -# -0.000030 pi0 tau+ nu_tau ISGW2; -0.000012 eta tau+ nu_tau ISGW2; -0.000042 rho0 tau+ nu_tau ISGW2; -0.000042 omega tau+ nu_tau ISGW2; -0.000018 eta' tau+ nu_tau ISGW2; -0.000046 a_10 tau+ nu_tau ISGW2; -0.000027 b_10 tau+ nu_tau ISGW2; -0.000004 a_00 tau+ nu_tau ISGW2; -0.000002 f_0 tau+ nu_tau ISGW2; -0.000002 f'_0 tau+ nu_tau ISGW2; -0.000023 f_1 tau+ nu_tau ISGW2; -0.000023 f'_1 tau+ nu_tau ISGW2; -0.000013 h_1 tau+ nu_tau ISGW2; -0.000013 h'_1 tau+ nu_tau ISGW2; -0.000020 f_2 tau+ nu_tau ISGW2; -0.000020 f'_2 tau+ nu_tau ISGW2; -0.000000 anti-D(2S)0 tau+ nu_tau ISGW2; -0.000000 anti-D*(2S)0 tau+ nu_tau ISGW2; -# -# -# -# b->u hadronic -# Ref. [B1]: -# -0.000016000 D_s+ pi0 PHSP; #[Reconstructed PDG2011] -0.000020 D_s*+ pi0 SVS; -# -0.000028 rho0 D_s+ SVS; -0.000028 D_s*+ rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - -# -# b-> s gamma -# -0.000042100 K*+ gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -#0.0000135 K_1+ gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000065 K'_1+ gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000128 K'*+ gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000166 K_2*+ gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000017 K''*+ gamma HELAMP 1.0 0.0 1.0 0.0; -0.0003118 Xsu gamma BTOXSGAMMA 2; -# -0.000000550 K+ e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.000001550 K*+ e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.0000050 Xsu e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.000000520 K+ mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.000001160 K*+ mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] -0.0000025 Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.0000001 K+ tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 K*+ tau+ tau- PHOTOS BTOSLLBALL; -0.0000002 Xsu tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -# -# b -> l nu -# -0.000180000 tau+ nu_tau SLN; #[Reconstructed PDG2011] -0.000000 mu+ nu_mu PHOTOS SLN; -0.000000 e+ nu_e PHOTOS SLN; -# -#------------------------------------------------------------------------------ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv -# -# Exclusive hadronic b->u -# -0.000026 pi+ pi0 pi0 CB3PI-P00 alpha; -0.000000 pi+ pi+ pi- CB3PI-MPP alpha; -#### -0.000004070 eta pi+ PHSP; #[Reconstructed PDG2011] -0.000002330 eta K+ PHSP; #[Reconstructed PDG2011] -0.000019300 K*+ eta SVS; #[Reconstructed PDG2011] -0.000007000 rho+ eta SVS; #[Reconstructed PDG2011] -0.000002700 eta' pi+ PHSP; #[Reconstructed PDG2011] -0.000070600 eta' K+ PHSP; #[Reconstructed PDG2011] -0.000004900 K*+ eta' SVS; #[Reconstructed PDG2011] -0.000008700 rho+ eta' SVS; #[Reconstructed PDG2011] -0.000006900 omega pi+ SVS; #[Reconstructed PDG2011] -0.000006700 omega K+ SVS; #[Reconstructed PDG2011] -0.0000010 omega K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000015900 omega rho+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.0000000 phi pi+ SVS; -0.000008300 phi K+ SVS; #[Reconstructed PDG2011] -#2-body modes from Jim Olsen -# (K_S0 K- and K_L0 K- -> 1x10^-6, Jim Olsen - Mar 27, 2001) -# (pi- pi0 -> 5x10^-6 and K- pi0 -> 11x10^-6, Jim Olsen - Mar 27, 2001) -# PR LHCb 04/08/04 split into KS/KL -0.000000 K0 pi+ PHSP; -0.000011550 K_S0 pi+ PHSP; #[Reconstructed PDG2011] -0.000011550 K_L0 pi+ PHSP; #[Reconstructed PDG2011] -0.000001360 anti-K0 K+ PHSP; #[Reconstructed PDG2011] -0.000005700 pi+ pi0 PHSP; #[Reconstructed PDG2011] -0.000012900 K+ pi0 PHSP; #[Reconstructed PDG2011] -# -# 3-body John Back (jback@slac.stanford.edu) - Oct 15, 2002 -# JGS intersperses modes with pi0->eta,eta' -# B+ modes -# -# rho0 3-body modes -0.000008300 rho0 pi+ SVS; #[Reconstructed PDG2011] -0.000003700 rho0 K+ SVS; #[Reconstructed PDG2011] -# -# rho+ 3-body modes -0.000010900 rho+ pi0 SVS; #[Reconstructed PDG2011] -0.000008000 rho+ K0 SVS; #[Reconstructed PDG2011] -# -# rho(1450) 3-body modes -0.0000022 rho(2S)0 pi+ SVS; -0.000001 rho(2S)0 K+ SVS; -# -# f0(980) 3-body modes -0.000001 f_0 pi+ PHSP; -0.0000092 f_0 K+ PHSP; -0.000001 a_0+ K0 PHSP; -0.000001 a_00 K+ PHSP; -0.000001 a_00 pi+ PHSP; -0.000001 a_0+ pi0 PHSP; - -0.000001600 f_2 pi+ PHSP; #[Reconstructed PDG2011] - -# -# K*0(892) 3-body modes -0.000045000 K_0*0 pi+ PHSP; #[Reconstructed PDG2011] -0.0000010 anti-K_0*0 K+ PHSP; -0.000002 K_0*+ pi0 PHSP; -0.000002 K_0*+ anti-K0 PHSP; -# -# K*+(892) 3-body modes -0.000006900 K*+ pi0 SVS; #[Reconstructed PDG2011] -0.000003 K*+ anti-K0 SVS; -# -# -# Non-resonant 3-body left-overs -# Most modes are set at 1e-6 -# -# pi+pi-pi+: high mass + f0(400-1200) = (1+1)e-6 -#0402270.000002 pi+ pi- pi+ PHSP; -# -# K+ pi- pi+: high mass + f0(400-1200) = (5+5)e-6 -0.000000000 K+ pi- pi+ PHSP; #[Reconstructed PDG2011] -# -# K+ K- pi+: just non-resonant -0.000005000 K+ K- pi+ PHSP; #[Reconstructed PDG2011] -# -# K+K-K+: high mass structure near 1500 + non-res: total - phiK = 30-4 -0.000025400 K+ K- K+ PHSP; #[Reconstructed PDG2011] -# -# -# K+K+pi-: suppressed mode (1e-7) -0.0000001 K+ K+ pi- PHSP; -# K-pi+pi+: suppressed mode (1e-7) -0.0000001 K- pi+ pi+ PHSP; -# -# -# K+ anti-K0 pi0 -0.000001 K+ anti-K0 pi0 PHSP; -0.000001 K+ anti-K0 eta PHSP; -0.000001 K+ anti-K0 eta' PHSP; -# -# pi+ K0 pi0 -0.000001 pi+ K0 pi0 PHSP; -0.000001 pi+ K0 eta PHSP; -0.000001 pi+ K0 eta' PHSP; -# -# pi+ pi0 pi0 -#0402270.000001 pi+ pi0 pi0 PHSP; -0.000001 pi+ pi0 eta PHSP; -0.000001 pi+ pi0 eta' PHSP; -0.000001 pi+ eta eta PHSP; -0.000001 pi+ eta eta' PHSP; -# -# K+ pi0 pi0 -0.000001 K+ pi0 pi0 PHSP; -0.000001 K+ pi0 eta PHSP; -0.000001 K+ pi0 eta' PHSP; -0.000001 K+ eta eta PHSP; -0.000001 K+ eta eta' PHSP; -0.000001 K+ eta' eta' PHSP; -# -# K+ K0 anti-K0: 4*BF(K+KsKs) (4 is a guess) -0.0000460 K+ K0 anti-K0 PHSP; -# -# pi+ K0 anti-K0 -0.000001 pi+ K0 anti-K0 PHSP; -# -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC -#--------------------------------------------------------------------------- -# -#4-body modes from Andrei Gritsan -#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- -# PR LHCb 22 Apr 2004 Set long. pol. for rho rho -0.000024000 rho+ rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.000010 rho0 pi+ pi0 PHSP; -0.000005 rho0 pi+ eta PHSP; -0.000002 rho0 pi+ eta' PHSP; -0.000010 omega pi+ pi0 PHSP; -0.000005 omega pi+ eta PHSP; -0.000002 omega pi+ eta' PHSP; -0.000010 rho+ pi+ pi- PHSP; -# PR Add rho- pi+ pi+ -0.000010 rho- pi+ pi+ PHSP; -0.000010 rho+ pi0 pi0 PHSP; -0.000005 rho+ pi0 eta PHSP; -0.000002 rho+ eta eta PHSP; -0.000002 rho+ pi0 eta' PHSP; -0.000010 pi- pi+ pi+ pi0 PHSP; -0.000005 pi- pi+ pi+ eta PHSP; -0.000002 pi- pi+ pi+ eta' PHSP; -0.000010 pi+ pi0 pi0 pi0 PHSP; -0.000005 pi+ eta pi0 pi0 PHSP; -0.000002 pi+ eta eta pi0 PHSP; -0.000002 pi+ eta' pi0 pi0 PHSP; -0.000001 pi+ eta' eta pi0 PHSP; -0.000020000 a_10 pi+ SVS; #[Reconstructed PDG2011] -0.000026000 a_1+ pi0 SVS; #[Reconstructed PDG2011] -0.0000067 b_10 pi+ SVS; -0.000010 b_1+ pi0 SVS; -0.000010 rho+ f_0 SVS; -0.000010 rho+ a_00 SVS; -0.000002 rho0 a_0+ SVS; -0.000010 f_0 pi+ pi0 PHSP; -0.000001 a_00 pi+ pi0 PHSP; -0.000001 a_0+ pi0 pi0 PHSP; -0.000001 a_0- pi+ pi+ PHSP; -#--- 4-body rho-K*, a1-K, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- -0.000009200 rho+ K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000010 rho0 K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000010 pi+ pi0 K*0 PHSP; -0.000005 pi+ eta K*0 PHSP; -0.000069800 pi- pi+ K*+ PHSP; #[Reconstructed PDG2011] -0.000010 pi0 pi0 K*+ PHSP; -0.000005 pi0 eta K*+ PHSP; -0.000002 eta eta K*+ PHSP; -0.000002 pi0 eta' K*+ PHSP; -0.000001 eta eta' K*+ PHSP; -0.000010 rho+ K0 pi0 PHSP; -0.000005 rho+ K0 eta PHSP; -0.000002 rho+ K0 eta' PHSP; -0.000010 rho+ K+ pi- PHSP; -0.000010 rho- K+ pi+ PHSP; -0.000005 rho0 K0 pi+ PHSP; -0.000005 rho0 K+ pi0 PHSP; -0.000002 rho0 K+ eta PHSP; -0.000001 rho0 K+ eta' PHSP; -0.000005 omega K0 pi+ PHSP; -0.000005 omega K+ pi0 PHSP; -0.000002 omega K+ eta PHSP; -0.000001 omega K+ eta' PHSP; -0.000010 pi+ pi+ pi- K0 PHSP; -0.000010 pi+ pi0 pi0 K0 PHSP; -0.000005 pi+ eta pi0 K0 PHSP; -0.000002 pi+ eta eta K0 PHSP; -0.000010 pi+ pi- pi0 K+ PHSP; -0.000005 pi+ pi- eta K+ PHSP; -0.000010 pi0 pi0 pi0 K+ PHSP; -0.000005 pi0 pi0 eta K+ PHSP; -0.000002 pi0 eta eta K+ PHSP; -0.000002 pi0 pi0 eta' K+ PHSP; -0.000001 pi0 eta eta' K+ PHSP; -0.000010 rho+ K_0*0 PHSP; -0.000006 rho0 K_0*+ PHSP; -0.000010 pi+ pi0 K_0*0 PHSP; -0.000010 pi0 pi0 K_0*+ PHSP; -0.000005200 K*+ f_0 SVS; #[Reconstructed PDG2011] -0.000010 a_10 K+ SVS; -0.000035000 a_1+ K0 SVS; #[Reconstructed PDG2011] -0.0000091 b_10 K+ SVS; -0.000010 b_1+ K0 SVS; -0.000005 K*+ a_00 SVS; -0.000005 K*0 a_0+ SVS; -#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ -0.000001 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 phi rho+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 phi pi+ pi0 PHSP; -0.0000005 phi pi+ eta PHSP; -0.0000002 phi pi+ eta' PHSP; -0.000001 K+ K- rho+ PHSP; -0.000001 K0 anti-K0 rho+ PHSP; -0.000001 anti-K0 K+ rho0 PHSP; -0.000001 anti-K0 K+ omega PHSP; -0.000001 K+ K- pi+ pi0 PHSP; -0.0000005 K+ K- pi+ eta PHSP; -0.0000002 K+ K- pi+ eta' PHSP; -0.000001 K0 anti-K0 pi+ pi0 PHSP; -0.0000005 K0 anti-K0 pi+ eta PHSP; -0.0000002 K0 anti-K0 pi+ eta' PHSP; -0.000001 anti-K0 K+ pi+ pi- PHSP; -0.000001 anti-K0 K+ pi0 pi0 PHSP; -0.0000005 anti-K0 K+ pi0 eta PHSP; -0.0000002 anti-K0 K+ eta eta PHSP; -0.0000002 anti-K0 K+ pi0 eta' PHSP; -0.0000001 anti-K0 K+ eta eta' PHSP; -0.000001 K*+ K- pi+ PHSP; -0.000001 K*- K+ pi+ PHSP; -0.000001 K*0 anti-K0 pi+ PHSP; -0.000001 K0 anti-K*0 pi+ PHSP; -0.000001 K+ anti-K*0 pi0 PHSP; -0.0000005 K+ anti-K*0 eta PHSP; -0.0000002 K+ anti-K*0 eta' PHSP; -0.000001 K*+ anti-K0 pi0 PHSP; -0.0000005 K*+ anti-K0 eta PHSP; -0.0000002 K*+ anti-K0 eta' PHSP; -#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- -0.000010000 phi K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000010 phi K0 pi+ PHSP; -0.000010 phi K+ pi0 PHSP; -0.000005 phi K+ eta PHSP; -0.000002 phi K+ eta' PHSP; -0.000026000 K- K+ K*+ PHSP; #[Reconstructed PDG2011] -0.000010 K+ K*- K+ PHSP; -0.000010 K+ K*0 anti-K0 PHSP; -0.000010 K+ K0 anti-K*0 PHSP; -0.000010 K0 K*+ anti-K0 PHSP; -0.000010 K+ K- K+ pi0 PHSP; -0.000005 K+ K- K+ eta PHSP; -0.000002 K+ K- K+ eta' PHSP; -0.000010 K+ K- K0 pi+ PHSP; -0.000010 K0 anti-K0 K+ pi0 PHSP; -0.000005 K0 anti-K0 K+ eta PHSP; -0.000002 K0 anti-K0 K+ eta' PHSP; -0.000010 K0 anti-K0 K0 pi+ PHSP; -0.000007000 phi K_0*+ PHSP; #[Reconstructed PDG2011] -0.000010 K- K+ K_0*+ PHSP; -0.000010 K+ K+ K_0*- PHSP; -0.000010 K+ anti-K_0*0 K0 PHSP; -0.000010 K+ K_0*0 anti-K0 PHSP; -0.000002 phi K'_1+ PHSP; -0.000002 K- K+ K'_1+ PHSP; -#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- -0.000001 phi anti-K0 K+ PHSP; -0.000001 K+ K- K+ anti-K0 PHSP; -0.000001 K0 anti-K0 anti-K0 K+ PHSP; -# -#5-body modes from Jim Smith - 1/30/05 -#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- -0.000010 rho0 rho0 pi+ PHSP; -0.000010 rho+ rho0 pi0 PHSP; -0.000005 rho+ rho0 eta PHSP; -0.000002 rho+ rho0 eta' PHSP; -0.000010 rho+ rho- pi+ PHSP; -0.000010 omega rho0 pi+ PHSP; -0.000010 omega rho+ pi0 PHSP; -0.000005 omega rho+ eta PHSP; -0.000002 omega rho+ eta' PHSP; -0.000002 rho0 pi+ pi- pi+ PHSP; -0.000002 rho0 pi+ pi0 pi0 PHSP; -0.000001 rho0 pi+ eta pi0 PHSP; -0.000001 rho0 pi+ eta' pi0 PHSP; -0.000002 omega pi+ pi0 pi0 PHSP; -0.000001 omega pi+ eta pi0 PHSP; -0.000001 omega pi+ eta' pi0 PHSP; -0.000002 rho- pi+ pi+ pi0 PHSP; -0.000001 rho- pi+ pi+ eta PHSP; -0.000001 rho- pi+ pi+ eta' PHSP; -0.000002 rho+ pi+ pi- pi0 PHSP; -0.000001 rho+ pi+ pi- eta PHSP; -0.000001 rho+ pi+ pi- eta' PHSP; -0.000002 rho+ pi0 pi0 pi0 PHSP; -0.000001 rho+ pi0 eta pi0 PHSP; -0.000001 rho+ eta eta pi0 PHSP; -0.000001 rho+ pi0 eta' pi0 PHSP; -0.000001 pi- pi+ pi+ pi0 pi0 PHSP; -0.000001 pi- pi+ pi+ eta pi0 PHSP; -0.000001 pi- pi+ pi+ eta' pi0 PHSP; -0.000001 pi+ pi0 pi0 pi0 pi0 PHSP; -0.000001 pi+ eta pi0 pi0 pi0 PHSP; -0.000001 pi+ eta' pi0 pi0 pi0 PHSP; -0.000010 a_1+ rho0 PHSP; -0.000010 a_1+ omega PHSP; -0.000010 a_1+ f_0 PHSP; -0.000010 a_10 pi+ pi0 PHSP; -0.000005 a_10 pi+ eta PHSP; -0.000002 a_10 pi+ eta' PHSP; -0.000010 a_1- pi+ pi+ PHSP; -0.000010 a_1+ pi+ pi- PHSP; -0.000010 a_1+ pi0 pi0 PHSP; -0.000005 a_1+ pi0 eta PHSP; -0.000002 a_1+ pi0 eta' PHSP; -0.000010 rho+ f_0 pi0 PHSP; -0.000005 rho+ f_0 eta PHSP; -0.000002 rho+ f_0 eta' PHSP; -0.000010 rho0 f_0 pi+ PHSP; -0.000010 omega f_0 pi+ PHSP; -0.000010 rho+ a_00 pi0 PHSP; -0.000005 rho+ a_00 eta PHSP; -0.000002 rho+ a_00 eta' PHSP; -0.000010 rho- a_0+ pi+ PHSP; -0.000010 rho0 a_0+ pi0 PHSP; -0.000005 rho0 a_0+ eta PHSP; -0.000002 rho0 a_0+ eta' PHSP; -0.000002 f_0 pi+ pi- pi+ PHSP; -0.000002 f_0 pi+ pi0 pi0 PHSP; -0.000001 f_0 pi+ pi0 eta PHSP; -0.000001 f_0 pi+ pi0 eta' PHSP; -0.000001 a_00 pi+ pi0 pi0 PHSP; -0.000001 a_0+ pi0 pi0 pi0 PHSP; -0.000001 a_0- pi+ pi+ pi0 PHSP; -#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- -0.000010 rho+ K*+ pi- PHSP; -0.000010 rho- K*+ pi+ PHSP; -0.000010 rho+ K*0 pi0 PHSP; -0.000005 rho+ K*0 eta PHSP; -0.000002 rho+ K*0 eta' PHSP; -0.000010 rho0 K*0 pi+ PHSP; -0.000010 rho0 K*+ pi0 PHSP; -0.000005 rho0 K*+ eta PHSP; -0.000002 rho0 K*+ eta' PHSP; -0.000010 omega K*0 pi+ PHSP; -0.000010 omega K*+ pi0 PHSP; -0.000005 omega K*+ eta PHSP; -0.000002 omega K*+ eta' PHSP; -0.000010 pi+ pi- K*0 pi+ PHSP; -0.000010 pi+ pi0 K*0 pi0 PHSP; -0.000005 pi+ eta K*0 pi0 PHSP; -0.000002 pi+ eta' K*0 pi0 PHSP; -0.000010 pi- pi+ K*+ pi0 PHSP; -0.000005 pi- pi+ K*+ eta PHSP; -0.000002 pi- pi+ K*+ eta' PHSP; -0.000010 pi0 pi0 K*+ pi0 PHSP; -0.000005 pi0 eta K*+ pi0 PHSP; -0.000002 eta eta K*+ pi0 PHSP; -0.000002 pi0 eta' K*+ pi0 PHSP; -0.000001 eta eta' K*+ pi0 PHSP; -0.000010 rho+ K0 pi+ pi- PHSP; -0.000010 rho+ K0 pi0 pi0 PHSP; -0.000005 rho+ K0 eta pi0 PHSP; -0.000002 rho+ K0 eta' pi0 PHSP; -0.000010 rho+ K+ pi- pi0 PHSP; -0.000010 rho- K+ pi+ pi0 PHSP; -0.000010 rho- K0 pi+ pi+ PHSP; -0.000010 rho0 K0 pi+ pi0 PHSP; -0.000010 rho0 K+ pi0 pi0 PHSP; -0.000005 rho0 K+ eta pi0 PHSP; -0.000002 rho0 K+ eta' pi0 PHSP; -0.000010 omega K0 pi+ pi0 PHSP; -0.000010 omega K+ pi0 pi0 PHSP; -0.000005 omega K+ eta pi0 PHSP; -0.000002 omega K+ eta' pi0 PHSP; -0.000002 pi+ pi+ pi- K0 pi0 PHSP; -0.000001 pi+ pi+ pi- K0 eta PHSP; -0.000001 pi+ pi+ pi- K0 eta' PHSP; -0.000002 pi+ pi0 pi0 K0 pi0 PHSP; -0.000001 pi+ eta pi0 K0 pi0 PHSP; -0.000001 pi+ eta eta K0 pi0 PHSP; -0.000002 pi+ pi- pi+ K+ pi- PHSP; -0.000002 pi+ pi- pi0 K+ pi0 PHSP; -0.000001 pi+ pi- eta K+ pi0 PHSP; -0.000001 pi+ pi- eta' K+ pi0 PHSP; -0.000002 pi0 pi0 pi0 K+ pi0 PHSP; -0.000001 pi0 pi0 eta K+ pi0 PHSP; -0.000001 pi0 eta eta K+ pi0 PHSP; -0.000001 pi0 pi0 eta' K+ pi0 PHSP; -0.000001 pi0 eta eta' K+ pi0 PHSP; -0.000010 rho0 K_0*0 pi+ PHSP; -0.000010 rho+ K_0*0 pi0 PHSP; -0.000005 rho+ K_0*0 eta PHSP; -0.000002 rho+ K_0*0 eta' PHSP; -0.000010 rho+ K_0*+ pi- PHSP; -0.000010 rho0 K_0*+ pi0 PHSP; -0.000005 rho0 K_0*+ eta PHSP; -0.000002 rho0 K_0*+ eta' PHSP; -0.000010 pi+ pi+ K_0*0 pi- PHSP; -0.000010 pi+ pi0 K_0*0 pi0 PHSP; -0.000005 pi+ pi0 K_0*0 eta PHSP; -0.000002 pi+ pi0 K_0*0 eta' PHSP; -0.000010 pi0 pi0 K_0*+ pi0 PHSP; -0.000005 pi0 pi0 K_0*+ eta PHSP; -0.000002 pi0 pi0 K_0*+ eta' PHSP; -0.000010 K*0 f_0 pi+ PHSP; -0.000010 K*+ f_0 pi0 PHSP; -0.000005 K*+ f_0 eta PHSP; -0.000002 K*+ f_0 eta' PHSP; -0.000020 a_10 K*+ PHSP; -0.000010 a_10 K+ pi0 PHSP; -0.000010 a_10 K0 pi+ PHSP; -0.000020 a_1+ K*0 PHSP; -0.000010 a_1+ K+ pi- PHSP; -0.000010 a_1+ K0 pi0 PHSP; -0.000005 K*+ a_00 pi0 PHSP; -0.000005 K*0 a_0+ pi0 PHSP; -#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ -0.000001 K*0 anti-K*0 pi+ PHSP; -0.000001 anti-K*0 K*+ pi0 PHSP; -0.0000005 anti-K*0 K*+ eta PHSP; -0.0000002 anti-K*0 K*+ eta' PHSP; -0.000001 phi rho0 pi+ PHSP; -0.000001 phi omega pi+ PHSP; -0.000001 phi f_0 pi+ PHSP; -0.000001 phi rho+ pi0 PHSP; -0.0000005 phi rho+ eta PHSP; -0.0000002 phi rho+ eta' PHSP; -0.000001 phi pi+ pi- pi+ PHSP; -0.000001 phi pi+ pi0 pi0 PHSP; -0.0000005 phi pi+ eta pi0 PHSP; -0.0000002 phi pi+ eta' pi0 PHSP; -0.000001 anti-K0 K+ rho+ pi- PHSP; -0.000001 anti-K0 K+ rho- pi+ PHSP; -0.000001 anti-K0 K+ rho0 pi0 PHSP; -0.0000005 anti-K0 K+ rho0 eta PHSP; -0.0000002 anti-K0 K+ rho0 eta' PHSP; -0.000001 anti-K0 K+ omega pi0 PHSP; -0.000001 anti-K0 K+ f_0 pi0 PHSP; -0.000001 K+ K- rho0 pi+ PHSP; -0.000001 K+ K- rho+ pi0 PHSP; -0.0000005 K+ K- rho+ eta PHSP; -0.0000002 K+ K- rho+ eta' PHSP; -0.000001 K+ K- omega pi+ PHSP; -0.000001 K0 anti-K0 rho0 pi+ PHSP; -0.000001 K0 anti-K0 omega pi+ PHSP; -0.000001 K0 anti-K0 f_0 pi+ PHSP; -0.000001 K0 anti-K0 rho+ pi0 PHSP; -0.0000005 K0 anti-K0 rho+ eta PHSP; -0.0000002 K0 anti-K0 rho+ eta' PHSP; -0.000001 K0 K- rho+ pi+ PHSP; -0.0000002 K0 K- pi+ pi+ pi0 PHSP; -0.0000001 K0 K- pi+ pi+ eta PHSP; -0.0000001 K0 K- pi+ pi+ eta' PHSP; -0.0000002 K+ K- pi+ pi- pi+ PHSP; -0.0000002 K+ K- pi+ pi0 pi0 PHSP; -0.0000001 K+ K- pi+ eta pi0 PHSP; -0.0000001 K+ K- pi+ eta' pi0 PHSP; -0.0000002 K0 anti-K0 pi+ pi- pi+ PHSP; -0.0000002 K0 anti-K0 pi+ pi0 pi0 PHSP; -0.0000001 K0 anti-K0 pi+ eta pi0 PHSP; -0.0000001 K0 anti-K0 pi+ eta' pi0 PHSP; -0.0000002 anti-K0 K+ pi+ pi- pi0 PHSP; -0.0000001 anti-K0 K+ pi+ pi- eta PHSP; -0.0000001 anti-K0 K+ pi+ pi- eta' PHSP; -0.0000002 anti-K0 K+ pi0 pi0 pi0 PHSP; -0.0000001 anti-K0 K+ pi0 eta pi0 PHSP; -0.0000001 anti-K0 K+ pi0 eta' pi0 PHSP; -0.000001 K*0 K- pi+ pi+ PHSP; -0.000001 K*- K0 pi+ pi+ PHSP; -0.000001 K*+ K- pi+ pi0 PHSP; -0.000001 K*- K+ pi+ pi0 PHSP; -0.000001 K*0 anti-K0 pi+ pi0 PHSP; -0.000001 K0 anti-K*0 pi+ pi0 PHSP; -0.000001 K+ anti-K*0 pi0 pi0 PHSP; -0.0000005 K+ anti-K*0 eta pi0 PHSP; -0.0000002 K+ anti-K*0 eta' pi0 PHSP; -0.000001 K*+ anti-K0 pi0 pi0 PHSP; -0.0000005 K*+ anti-K0 eta pi0 PHSP; -0.0000002 K*+ anti-K0 eta' pi0 PHSP; -#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- -0.000010 phi K*+ pi0 PHSP; -0.000010 phi K+ rho0 PHSP; -0.000010 phi K+ omega PHSP; -0.000010 phi K+ f_0 PHSP; -0.000010 phi K0 rho+ PHSP; -0.000010 phi K0 pi+ pi0 PHSP; -0.000010 phi K+ pi+ pi- PHSP; -0.000010 phi K+ pi0 pi0 PHSP; -0.000005 phi K+ eta pi0 PHSP; -0.000002 phi K+ eta' pi0 PHSP; -0.000010 K- K+ K*+ pi0 PHSP; -0.000010 K+ K*- K+ pi0 PHSP; -0.000010 K+ K*0 anti-K0 pi0 PHSP; -0.000010 K+ K0 anti-K*0 pi0 PHSP; -0.000010 K0 K*+ anti-K0 pi0 PHSP; -0.000010 K- K+ K+ rho0 PHSP; -0.000010 K- K+ K+ omega PHSP; -0.000010 K- K+ K+ f_0 PHSP; -0.000010 K- K+ K0 rho+ PHSP; -0.000010 K+ K- K+ pi0 pi0 PHSP; -0.000005 K+ K- K+ eta pi0 PHSP; -0.000002 K+ K- K+ eta' pi0 PHSP; -0.000010 K+ K- K0 pi+ pi0 PHSP; -0.000010 K0 anti-K0 K+ pi0 pi0 PHSP; -0.000005 K0 anti-K0 K+ eta pi0 PHSP; -0.000002 K0 anti-K0 K+ eta' pi0 PHSP; -0.000010 K0 anti-K0 K0 pi+ pi0 PHSP; -0.000010 phi K_0*0 pi+ PHSP; -0.000010 phi K_0*+ pi0 PHSP; -0.000005 phi K_0*+ eta PHSP; -0.000002 phi K_0*+ eta' PHSP; -0.000010 K- K+ K_0*+ pi0 PHSP; -0.000005 K- K+ K_0*+ eta PHSP; -0.000002 K- K+ K_0*+ eta' PHSP; -0.000010 K+ K+ K_0*- pi0 PHSP; -0.000005 K+ K+ K_0*- eta PHSP; -0.000002 K+ K+ K_0*- eta' PHSP; -0.000010 K- K+ K_0*0 pi+ PHSP; -0.000010 K+ K+ anti-K_0*0 pi- PHSP; -0.000010 K0 K0 anti-K_0*0 pi+ PHSP; -0.000010 K+ anti-K_0*0 K0 pi0 PHSP; -0.000005 K+ anti-K_0*0 K0 eta PHSP; -0.000002 K+ anti-K_0*0 K0 eta' PHSP; -0.000010 K+ K_0*0 anti-K0 pi0 PHSP; -0.000005 K+ K_0*0 anti-K0 eta PHSP; -0.000002 K+ K_0*0 anti-K0 eta' PHSP; -0.000002 phi K'_10 pi+ PHSP; -0.000002 phi K'_1+ pi0 PHSP; -0.000001 phi K'_1+ eta PHSP; -0.000001 phi K'_1+ eta' PHSP; -0.000002 K- K+ K'_10 pi+ PHSP; -0.000002 K- K+ K'_1+ pi0 PHSP; -0.000001 K- K+ K'_1+ eta PHSP; -0.000001 K- K+ K'_1+ eta' PHSP; -0.000002 K+ K+ K'_1- pi0 PHSP; -0.000002 K+ K+ anti-K'_10 pi- PHSP; -0.000002 K0 anti-K0 K'_10 pi+ PHSP; -0.000002 K0 anti-K0 K'_1+ pi0 PHSP; -0.000001 K0 anti-K0 K'_1+ eta PHSP; -0.000001 K0 anti-K0 K'_1+ eta' PHSP; -0.000002 K0 K0 anti-K'_10 pi+ PHSP; -0.000002 anti-K0 anti-K0 K'_1+ pi0 PHSP; -0.000001 anti-K0 anti-K0 K'_1+ eta PHSP; -0.000001 anti-K0 anti-K0 K'_1+ eta' PHSP; -0.000010 K+ K0 anti-K'_10 pi0 PHSP; -0.000005 K+ K0 anti-K'_10 eta PHSP; -0.000002 K+ K0 anti-K'_10 eta' PHSP; -0.000010 K+ K'_10 anti-K0 pi0 PHSP; -0.000005 K+ K'_10 anti-K0 eta PHSP; -0.000002 K+ K'_10 anti-K0 eta' PHSP; -#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ -0.000004900 phi phi K+ PHSP; #[Reconstructed PDG2011] -0.000001 phi phi pi+ PHSP; -0.000001 phi K+ K- K+ PHSP; -0.000001 phi K0 anti-K0 K+ PHSP; -0.000001 phi K0 anti-K0 pi+ PHSP; -0.000001 phi anti-K0 K+ pi0 PHSP; -0.000001 K+ K- K+ K- pi+ PHSP; -0.000001 K+ K- K0 anti-K0 pi+ PHSP; -0.000001 K+ K- K+ anti-K0 pi0 PHSP; -0.000001 K0 anti-K0 anti-K0 K+ pi0 PHSP; -#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ -0.000003 phi phi K*+ PHSP; -0.000001 phi K+ K- K*+ PHSP; -0.000001 phi K0 anti-K0 K*+ PHSP; -0.000001 phi anti-K0 K+ K*0 PHSP; -0.000001 phi K+ K- K+ pi0 PHSP; -0.000001 phi K+ K- K0 pi+ PHSP; -0.000001 phi K0 anti-K0 K+ pi0 PHSP; -0.000001 phi K0 anti-K0 K0 pi+ PHSP; -0.000001 phi anti-K0 K+ K+ pi- PHSP; -#--- 6-body a1a1 ------------ -0.000050 a_1+ a_10 PHSP; -# -# B -> cc= s sum = 1.92% -# -0.001014000 J/psi K+ SVS; #[Reconstructed PDG2011] -0.001430000 J/psi K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] -0.000049000 J/psi pi+ SVS; #[Reconstructed PDG2011] -0.000050000 J/psi rho+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] -0.0002 J/psi K0 pi+ PHSP; -0.0001 J/psi K+ pi0 PHSP; -#rl0.0007 J/psi K+ pi- pi+ PHSP; -#rl0.00035 J/psi K+ pi0 pi0 PHSP; -#rl0.00035 J/psi K0 pi+ pi0 PHSP; -0.0001 J/psi K'_1+ SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; -0.0005 J/psi K_2*+ PHSP; -0.001800000 J/psi K_1+ SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] -0.000052000 J/psi phi K+ PHSP; #[Reconstructed PDG2011] -# -0.000646000 psi(2S) K+ SVS; #[Reconstructed PDG2011] -0.000620000 psi(2S) K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] -0.0004 psi(2S) K0 pi+ PHSP; -0.0002 psi(2S) K+ pi0 PHSP; -0.001900000 psi(2S) K+ pi- pi+ PHSP; #[Reconstructed PDG2011] -0.0001 psi(2S) K+ pi0 pi0 PHSP; -0.0001 psi(2S) K0 pi+ pi0 PHSP; -0.0004 psi(2S) K_1+ PHSP; -# -0.000910000 eta_c K+ PHSP; #[Reconstructed PDG2011] -0.001200000 K*+ eta_c SVS; #[Reconstructed PDG2011] -0.0002 eta_c K0 pi+ PHSP; -0.0001 eta_c K+ pi0 PHSP; -0.0002 eta_c K+ pi- pi+ PHSP; -0.0001 eta_c K+ pi0 pi0 PHSP; -0.0001 eta_c K0 pi+ pi0 PHSP; -# -0.000340000 eta_c(2S) K+ PHSP; #[Reconstructed PDG2011] -0.00048 K*+ eta_c(2S) SVS; -0.00008 eta_c(2S) K0 pi+ PHSP; -0.00005 eta_c(2S) K+ pi0 PHSP; -0.00008 eta_c(2S) K+ pi- pi+ PHSP; -0.00005 eta_c(2S) K+ pi0 pi0 PHSP; -0.00005 eta_c(2S) K0 pi+ pi0 PHSP; -# -0.000133000 chi_c0 K+ PHSP; #[Reconstructed PDG2011] -0.0004 K*+ chi_c0 SVS; -0.0002 chi_c0 K0 pi+ PHSP; -0.0001 chi_c0 K+ pi0 PHSP; -0.0002 chi_c0 K+ pi- pi+ PHSP; -0.0001 chi_c0 K+ pi0 pi0 PHSP; -0.0001 chi_c0 K0 pi+ pi0 PHSP; -# -0.000460000 chi_c1 K+ SVS; #[Reconstructed PDG2011] -0.000300000 chi_c1 K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] -0.0004 chi_c1 K0 pi+ PHSP; -0.0002 chi_c1 K+ pi0 PHSP; -0.0004 chi_c1 K+ pi- pi+ PHSP; -0.0002 chi_c1 K+ pi0 pi0 PHSP; -0.0002 chi_c1 K0 pi+ pi0 PHSP; -# -0.00002 chi_c2 K+ STS; -0.00002 chi_c2 K*+ PHSP; -0.0002 chi_c2 K0 pi+ PHSP; -0.0001 chi_c2 K+ pi0 PHSP; -0.0002 chi_c2 K+ pi- pi+ PHSP; -0.0001 chi_c2 K+ pi0 pi0 PHSP; -0.0001 chi_c2 K0 pi+ pi0 PHSP; -# -0.000490000 psi(3770) K+ SVS; #[Reconstructed PDG2011] -0.0005 psi(3770) K*+ PHSP; -0.0003 psi(3770) K0 pi+ PHSP; -0.0002 psi(3770) K+ pi0 PHSP; -0.0002 psi(3770) K+ pi- pi+ PHSP; -0.0001 psi(3770) K+ pi0 pi0 PHSP; -0.0001 psi(3770) K0 pi+ pi0 PHSP; -0.0003 psi(3770) K_1+ PHSP; -# -# b -> c (sc=) -> D Ds X Sum = 10% -# -0.010000000 anti-D0 D_s+ PHSP; #[Reconstructed PDG2011] -0.008200000 anti-D*0 D_s+ SVS; #[Reconstructed PDG2011] -0.007600000 D_s*+ anti-D0 SVS; #[Reconstructed PDG2011] -0.017100000 D_s*+ anti-D*0 SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; #[Reconstructed PDG2011] -0.0006 anti-D'_10 D_s+ SVS; -0.0012 anti-D'_10 D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0012 anti-D_10 D_s+ SVS; -0.0024 anti-D_10 D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; -0.0042 anti-D_2*0 D_s+ STS; -0.0040 anti-D_2*0 D_s*+ PHSP; -# -# -# -# -# -0.0036 D_s+ D- pi+ PHSP; -0.0018 D_s+ anti-D0 pi0 PHSP; -0.0037 D_s*+ D- pi+ PHSP; -0.0018 D_s*+ anti-D0 pi0 PHSP; -0.0033 D_s+ D- pi+ pi0 PHSP; -0.0033 D_s+ anti-D0 pi+ pi- PHSP; -0.0008 D_s+ anti-D0 pi0 pi0 PHSP; -0.0033 D_s*+ D- pi+ pi0 PHSP; -0.0033 D_s*+ anti-D0 pi+ pi- PHSP; -0.0008 D_s*+ anti-D0 pi0 pi0 PHSP; -# -# b -> c (sc=) -> D D= K X Sum = 8% -# update: Ref. [B1]: -# update October 26, 2004 -# External W-emission amplitude -0.0017 anti-D0 D+ K0 PHSP; -0.0052 anti-D0 D*+ K0 PHSP; -0.0031 anti-D*0 D+ K0 PHSP; -0.007800000 anti-D*0 D*+ K0 PHSP; #[Reconstructed PDG2011] -# External+internal W-emission amplitude -0.002100000 anti-D0 D0 K+ PHSP; #[Reconstructed PDG2011] -0.0018 anti-D*0 D0 K+ PHSP; -0.004700000 anti-D0 D*0 K+ PHSP; #[Reconstructed PDG2011] -0.005300000 anti-D*0 D*0 K+ PHSP; #[Reconstructed PDG2011] -# Internal W-emission amplitude (color suppressed modes) -0.0005 D+ D- K+ PHSP; -0.0005 D*+ D- K+ PHSP; -0.001500000 D+ D*- K+ PHSP; #[Reconstructed PDG2011] -0.0015 D*+ D*- K+ PHSP; -# -0.0025 anti-D0 D+ K*0 PHSP; -0.0025 anti-D*0 D+ K*0 PHSP; -0.0025 anti-D0 D*+ K*0 PHSP; -0.0050 anti-D*0 D*+ K*0 PHSP; -# -0.0025 anti-D0 D0 K*+ PHSP; -0.0025 anti-D*0 D0 K*+ PHSP; -0.0025 anti-D0 D*0 K*+ PHSP; -0.0050 anti-D*0 D*0 K*+ PHSP; -# -0.0005 D+ D- K*+ PHSP; -0.0005 D*+ D- K*+ PHSP; -0.0005 D+ D*- K*+ PHSP; -0.0010 D*+ D*- K*+ PHSP; -# -# B->D(*)D(*). See Ref [B1]: -# -0.000380000 D+ anti-D0 PHSP; #[Reconstructed PDG2011] -0.000390000 D*+ anti-D0 SVS; #[Reconstructed PDG2011] -0.000630000 anti-D*0 D+ SVS; #[Reconstructed PDG2011] -0.000810000 anti-D*0 D*+ SVV_HELAMP 0.56 0.0 0.96 0.0 0.47 0.0; #[Reconstructed PDG2011] - -# -# B -> D(*) X Exclusive Modes -# October 26, 2004 Lange update -0.005190000 anti-D*0 pi+ SVS; #[Reconstructed PDG2011] -0.004840000 anti-D0 pi+ PHSP; #[Reconstructed PDG2011] -0.013400000 rho+ anti-D0 SVS; #[Reconstructed PDG2011] -# D* rho HELAMP parameters taken from ICHEP 98-852. -0.009800000 anti-D*0 rho+ SVV_HELAMP 0.283 1.13 0.932 0.0 0.228 0.95; #[Reconstructed PDG2011] -# -0.0005 anti-D0 pi0 pi+ PHSP; -0.0005 anti-D*0 pi0 pi+ PHSP; -0.001070000 D- pi+ pi+ PHSP; #[Reconstructed PDG2011] -0.001350000 D*- pi+ pi+ PHSP; #[Reconstructed PDG2011] -# -# D a1 updated Ref. [B1]: -0.004000000 a_1+ anti-D0 SVS; #[Reconstructed PDG2011] -0.000200000 anti-D0 rho0 pi+ PHSP; #[Reconstructed PDG2011] -0.006800000 anti-D0 pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] -# -# SVV_HELAMP from factorization, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: -# updated Ref. [B1]: -# October 26, 2004 Lange update -# -0.019000000 anti-D*0 a_1+ SVV_HELAMP 0.458 0.0 0.866 0.0 0.200 0.0; #[Reconstructed PDG2011] -# -0.00042 anti-D*0 rho0 pi+ PHSP; -0.010300000 anti-D*0 pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] -# -0.0020 D- rho+ pi+ PHSP; -0.0020 D- pi0 pi+ pi+ PHSP; -0.0020 D*- rho+ pi+ PHSP; -0.015000000 D*- pi0 pi+ pi+ PHSP; #[Reconstructed PDG2011] -0.0005 anti-D*0 rho+ pi0 PHSP; -0.0005 anti-D*0 pi+ pi0 pi0 PHSP; -# -# B->D** pi and D** rho, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html -# -# -0.000876 anti-D_10 pi+ SVS; -0.0005 anti-D'_10 pi+ SVS; -0.00052 anti-D_2*0 pi+ STS; -0.0007 anti-D_10 rho+ PHSP; -0.0022 anti-D'_10 rho+ PHSP; -0.0038 anti-D_2*0 rho+ PHSP; -0.00061 anti-D_0*0 pi+ PHSP; -# -# -# B->DK, recommendation -# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: -# update: Ref [B1]: -# -0.000368000 anti-D0 K+ PHSP; #[Reconstructed PDG2011] -0.000421000 anti-D*0 K+ SVS; #[Reconstructed PDG2011] -0.000530000 K*+ anti-D0 SVS; #[Reconstructed PDG2011] -0.000810000 anti-D*0 K*+ SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; #[Reconstructed PDG2011] -#October 26, 2004 Lange -0.0000005 D+ pi0 PHSP; -0.0000005 D*+ pi0 SVS; -0.000011 D+ anti-K0 PHSP; -0.000006 D*+ anti-K0 SVS; -# -#October 26, 2004 - Lange -0.00075 anti-D0 D_s0*+ PHSP; -0.00090 anti-D*0 D_s0*+ SVS; -0.003100000 D_s1+ anti-D0 SVS; #[Reconstructed PDG2011] -0.012000000 anti-D*0 D_s1+ SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] -# -# Feb 2009 -# -0.000550000 anti-D0 K+ anti-K0 PHSP; #[Reconstructed PDG2011] -0.000750000 anti-D0 K+ anti-K*0 PHSP; #[Reconstructed PDG2011] -0.00150 anti-D*0 K+ anti-K*0 PHSP; -# -# Feb 2009 -# -0.002750000 anti-D0 omega pi+ PHSP; #[Reconstructed PDG2011] -0.004500000 anti-D*0 omega pi+ PHSP; #[Reconstructed PDG2011] -# -# Feb 2009 -# -0.00045 anti-D0 D'_s1+ PHSP; -0.00094 anti-D*0 D'_s1+ PHSP; -# -# Lam_c X / Sigma_c X -# -#0.04000 anti-cd_1 uu_1 PYTHIA 23; -0.032572352 anti-cd_1 uu_1 PYTHIA 23; #[Reconstructed PDG2011] -# -# Xi_c X 2.4% -# -#0.02400 anti-cs_1 uu_1 PYTHIA 23; -0.008883411 anti-cs_1 uu_1 PYTHIA 23; #[Reconstructed PDG2011] -# -# -0.222347008 u anti-d anti-c u PYTHIA 48; #[Reconstructed PDG2011] -0.042442798 u anti-d anti-c u PYTHIA 13; #[Reconstructed PDG2011] -0.022208435 u anti-s anti-c u PYTHIA 13; #[Reconstructed PDG2011] -#lange - try to crank up the psi production.... -0.073041080 c anti-s anti-c u PYTHIA 13; #[Reconstructed PDG2011] -0.003948141 c anti-d anti-c u PYTHIA 13; #[Reconstructed PDG2011] -0.002961106 u anti-d anti-u u PYTHIA 48; #[Reconstructed PDG2011] -0.003948141 c anti-s anti-u u PYTHIA 48; #[Reconstructed PDG2011] -# JGS 11/5/02 This and similar a few lines above have been divided by two -# to solve a double-counting problem for this channel -0.002023436 u anti-u anti-d u PYTHIA 48; #[Reconstructed PDG2011] -0.000069112 d anti-d anti-d u PYTHIA 48; #[Reconstructed PDG2011] -0.000088858 s anti-s anti-d u PYTHIA 48; #[Reconstructed PDG2011] -0.002171534 u anti-u anti-s u PYTHIA 48; #[Reconstructed PDG2011] -0.001776701 d anti-d anti-s u PYTHIA 48; #[Reconstructed PDG2011] -0.001480600 s anti-s anti-s u PYTHIA 48; #[Reconstructed PDG2011] -0.004935177 anti-s u PYTHIA 32; #[Reconstructed PDG2011] -#### -0.001500000 anti-D*0 K+ K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.018000000 anti-D*0 pi- pi+ pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.005700000 anti-D*0 pi+ pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.002600000 D*- pi+ pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000180000 D_s- pi+ K+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000145000 D_s*- pi+ K+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000011000 D_s- K+ K+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001070000 J/psi K+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000108000 J/psi eta K+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000350000 J/psi omega K+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000011800 J/psi p+ anti-Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000025800 psi(2S) pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000020000 chi_c1 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000018000 eta K_0*+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000009100 eta K_2*+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000024000 omega K_0*+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000021000 omega K_2*+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000010100 K*0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000001070 f_2 K+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000005600 K_2*0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000001200 K*+ K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000006100 phi K_1+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000008400 phi K_2*+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000043000 K_1+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000007900 eta K+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000003500 phi K+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000007600 K+ pi- pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000020000 K*0 pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000046000 K0 pi+ pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000014000 K_2*+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000980 rho+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000001620 p+ anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000005900 p+ anti-p- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000003600 p+ anti-p- K*+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000002500 p+ anti-Lambda0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000003000 p+ anti-Lambda0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000000 p+ anti-Lambda0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000004800 p+ anti-Lambda0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000002000 p+ anti-Lambda0 f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000003400 Lambda0 anti-Lambda0 K+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000002200 Lambda0 anti-Lambda0 K*+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000280000 anti-Lambda_c- p+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001800000 anti-Lambda_c- p+ pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.002300000 anti-Lambda_c- p+ pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000035000 anti-Sigma_c0 p+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000440000 anti-Sigma_c0 p+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000440000 anti-Sigma_c0 p+ pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000280000 anti-Sigma_c-- p+ pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay - -#----------------------------------------------------------------- -# B references: -# -# [B1]: http://www.slac.stanford.edu/BFROOT/www/Physics/Tools/generators/dec-update/2002/Breco-recommendations.html -# -#----------------------------------------------------------------- - - -# -# -# B* mesons -# -Decay B*+ -1.0000 B+ gamma VSP_PWAVE; -Enddecay -Decay B*- -1.0000 B- gamma VSP_PWAVE; -Enddecay -Decay B*0 -1.0000 B0 gamma VSP_PWAVE; -Enddecay -Decay anti-B*0 -1.0000 anti-B0 gamma VSP_PWAVE; -Enddecay -Decay B_s*0 -1.0000 B_s0 gamma VSP_PWAVE; -Enddecay -Decay anti-B_s*0 -1.0000 anti-B_s0 gamma VSP_PWAVE; -Enddecay -# -# B_s decays. -# -# -# To count up the BR for this decay: -# awk ' /^0./{ sum = sum + $1 ;print sum } ' junk.dec -# -# anti-B_s decays. -# ------------------------------------------------------- -# whb&fkw 3/28/01 Taken from fkw's QQ tables. -# most dubious part are the B to baryons. -# fkw 4/28/00 made the Bs parallel to the Bd as best as I could -# ------------------------------------------------------- -# -# Lange - Nov14 - NOT adjusted for D_s->phipi change -# -Decay anti-B_s0 -# b --> c (l nu) -# Sum = 24.5% -0.0210 D_s+ e- anti-nu_e PHOTOS ISGW2; -0.0490 D_s*+ e- anti-nu_e PHOTOS ISGW2; -0.0040 D_s1+ e- anti-nu_e PHOTOS ISGW2; -0.0040 D_s0*+ e- anti-nu_e PHOTOS ISGW2; -0.0070 D'_s1+ e- anti-nu_e PHOTOS ISGW2; -0.0070 D_s2*+ e- anti-nu_e PHOTOS ISGW2; -# -0.0210 D_s+ mu- anti-nu_mu PHOTOS ISGW2; -0.0490 D_s*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0040 D_s1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0040 D_s0*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0070 D'_s1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0070 D_s2*+ mu- anti-nu_mu PHOTOS ISGW2; -# -#0.0070 D_s+ tau- anti-nu_tau ISGW2; -#0.0150 D_s*+ tau- anti-nu_tau ISGW2; -#0.0013 D_s1+ tau- anti-nu_tau ISGW2; -#0.0013 D_s0*+ tau- anti-nu_tau ISGW2; -#0.0023 D'_s1+ tau- anti-nu_tau ISGW2; -#0.0023 D_s2*+ tau- anti-nu_tau ISGW2; -# fkw 5/04/01 changed the above to account for the non-res part that I -# had to take out. -0.0080 D_s+ tau- anti-nu_tau ISGW2; -0.0160 D_s*+ tau- anti-nu_tau ISGW2; -0.0018 D_s1+ tau- anti-nu_tau ISGW2; -0.0018 D_s0*+ tau- anti-nu_tau ISGW2; -0.0028 D'_s1+ tau- anti-nu_tau ISGW2; -0.0028 D_s2*+ tau- anti-nu_tau ISGW2; -# -# fkw 4/28/00 the next few are decays where a u\bar u or d\bar d is popped -# between the charm quark and the spectator. I can thus not -# just replace a D by a Ds as above when going from Bd to Bs. -# fkw 5/04/01 Had to take these out because they crash EvtGen. -# Will have to fix this eventually !!! -#0.0010 D*0 K+ tau- anti-nu_tau GOITY_ROBERTS; -#0.0010 D*+ K0 tau- anti-nu_tau GOITY_ROBERTS; -#0.0010 D0 K+ tau- anti-nu_tau GOITY_ROBERTS; -#0.0010 D+ K0 tau- anti-nu_tau GOITY_ROBERTS; -# fkw 4/28/00 B0B -> TAU D PI0 = 1/2 of TAU D PI+ because of pi0 wave function -# However, the same factor of 1/2 doesn't apply to BSB !!! -# -# fkw 3/28/01 There seem to be no semi-leptonic B to baryon decays in nature. -# I don't pretend to understand why. PDG 2000 has a limit of -# < 3.2e-3 where one might naively expect -# 10% * BR(B->/\c) = 0.1 * (6.4+-1.1)% -#0.0050 anti-nu_e e- ??? Baryon -#0.0050 anti-nu_mu mu- ??? Baryon -# -# b --> c (s c=) -# Sum = 11.44% -# 2-body = 4.72% -# more-body = 6.72% -0.010400000 D_s- D_s+ PHSP; #[Reconstructed PDG2011] -0.0099 D_s*+ D_s- SVS; -0.0099 D_s*- D_s+ SVS; -0.0197 D_s*- D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# fkw 4/28/00 more states with popped q\bar q. -# The one's here involve only popped and spectator. -# Popping stuff in the cs from the W comes further below. -# The same isospin comment applies here as above in the -# semi-leptonic decays with tau and popped q\bar q. -0.0096 D_s- D+ K0 PHSP; -0.0096 D_s- anti-D0 K+ PHSP; -0.0096 D_s*- D+ K0 PHSP; -0.0096 D_s*- D0 K+ PHSP; -# -0.0024 D_s- D+ pi0 K0 PHSP; -0.0048 D_s- D0 pi+ K0 PHSP; -0.0048 D_s- D+ pi- K+ PHSP; -0.0024 D_s- D0 pi0 K+ PHSP; -# -0.0024 D_s*- D+ pi0 K0 PHSP; -0.0048 D_s*- D0 pi+ K0 PHSP; -0.0048 D_s*- D+ pi- K+ PHSP; -0.0024 D_s*- D0 pi0 K+ PHSP; -# -# -# b --> (c ) (c ) (s ) -# Sum = 8.0% -# DDK amplitudes R.A.Briere 10/97 -# fkw 4/28/00 these are q\bar q popping that don't involve the spectator -# Bd->Bs just involves switching the c\bar d to c\bar s. -# -0.0150 D_s*+ anti-D*0 K- PHSP; -0.0150 D_s*+ D*- anti-K0 PHSP; -# -0.0050 D_s*+ anti-D0 K- PHSP; -0.0050 D_s*+ D- anti-K0 PHSP; -# -0.0050 D_s+ anti-D*0 K- PHSP; -0.0050 D_s+ D*- anti-K0 PHSP; -# -0.0020 D_s+ anti-D0 K- PHSP; -0.0020 D_s+ D- anti-K0 PHSP; -# -0.0030 D_s*+ anti-D*0 K*- PHSP; -0.0030 D_s*+ D*- anti-K*0 PHSP; -# -0.0050 D_s*+ anti-D0 K*- PHSP; -0.0050 D_s*+ D- anti-K*0 PHSP; -# -0.0025 D_s+ anti-D*0 K*- PHSP; -0.0025 D_s+ D*- anti-K*0 PHSP; -# -0.0025 D_s+ anti-D0 K*- PHSP; -0.0025 D_s+ D- anti-K*0 PHSP; -# -# -# b --> c (d c=) -# Sum = 1.0% -0.0017 D_s- D+ PHSP; -0.0017 D*+ D_s- SVS; -0.0017 D_s*- D+ SVS; -0.0017 D_s*- D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# fkw 4/38/00 more popping at the lower vertex -# but with upper vertex cabbibo suppressed. -0.0007 D- D+ K0 PHSP; -0.0007 D- anti-D0 K+ PHSP; -0.0007 D*- D+ K0 PHSP; -0.0007 D*- D0 K+ PHSP; -# -0.0003 D- D+ pi0 K0 PHSP; -0.0007 D- D0 pi+ K0 PHSP; -0.0003 D- D+ pi- K+ PHSP; -0.0007 D- D0 pi0 K+ PHSP; -# -0.0003 D*- D+ pi0 K0 PHSP; -0.0007 D*- D0 pi+ K0 PHSP; -0.0003 D*- D+ pi- K+ PHSP; -0.0007 D*- D0 pi0 K+ PHSP; -# -# b --> c (s u=) -# exclusive -# Sum = 0.09% -0.00015 D_s*+ K- SVS; -0.000150000 D_s+ K- PHSP; #[Reconstructed PDG2011] -0.00030 D_s*+ K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.0283 0.0; -0.00030 K*- D_s+ SVS; -# -# fkw 4/28/00 Strategy for charmonium modes: -# Take Bd BR's, replace spectator, -# assume etaprime = 2/3 ss -# and eta = 1/3 ss -# -# Note: Just for kicks I gave the c\bar c decays a small piece that is -# self tagging. See if you can find it. This is already in -# the B0 decays in cleo's version of decay.dec . -# -# B --> (c c=) (s s=) -# 2.65% -# should be: psi = 0.80% CLNS 94/1315 but isn't quite right. -0.00064 J/psi eta' SVS; -0.00032 J/psi eta SVS; -0.001300000 J/psi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.00008 J/psi K0 SVS; -0.00070 J/psi K- K+ PHSP; -0.00070 J/psi anti-K0 K0 PHSP; -0.00070 J/psi anti-K0 K+ pi- PHSP; -0.00070 J/psi anti-K0 K0 pi0 PHSP; -0.00070 J/psi K- K+ pi0 PHSP; -# LHCb PR 04/02/04 Add (cc) phi n pi(+/0) -0.00039 J/psi phi pi+ pi- PHSP; -0.00039 J/psi phi pi0 pi0 PHSP; -# LHCb PR add (cc) phi eta(') + npi see CDF QQ -0.0002 J/psi eta pi+ pi- PHSP; -0.0002 J/psi eta pi0 pi0 PHSP; -0.0004 J/psi eta' pi+ pi- PHSP; -0.0004 J/psi eta' pi0 pi0 PHSP; -0.0002 J/psi pi+ pi- PHSP; -0.0002 J/psi pi0 pi0 PHSP; -# psi' = 0.34% CLNS 94/1315 -# -0.000465 psi(2S) eta' SVS; -0.000235 psi(2S) eta SVS; -0.000680000 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.0003 psi(2S) K- K+ PHSP; -0.0003 psi(2S) anti-K0 K0 PHSP; -0.0003 psi(2S) anti-K0 K+ pi- PHSP; -0.0003 psi(2S) anti-K0 K0 pi0 PHSP; -0.0003 psi(2S) K- K+ pi0 PHSP; -0.00034 psi(2S) phi pi+ pi- PHSP; -0.00034 psi(2S) phi pi0 pi0 PHSP; -0.0002 psi(2S) eta pi+ pi- PHSP; -0.0002 psi(2S) eta pi0 pi0 PHSP; -0.0004 psi(2S) eta' pi+ pi- PHSP; -0.0004 psi(2S) eta' pi0 pi0 PHSP; -0.0002 psi(2S) pi+ pi- PHSP; -0.0002 psi(2S) pi0 pi0 PHSP; -# -# chic0 = 0.05% (20% of chic2) -# Bodwin et.al. Phys Rev D46 1992 -0.00010 chi_c0 eta' PHSP; -0.00005 chi_c0 eta PHSP; -0.00020 phi chi_c0 SVS; -0.00003 chi_c0 K- K+ PHSP; -0.00003 chi_c0 anti-K0 K0 PHSP; -0.00003 chi_c0 anti-K0 K+ pi- PHSP; -0.00003 chi_c0 anti-K0 K0 pi0 PHSP; -0.00003 chi_c0 K- K+ pi0 PHSP; -# -# -# chic1 = 0.37% CLNS 94/1315 -0.0007 chi_c1 eta' SVS; -0.0003 chi_c1 eta SVS; -0.0014 chi_c1 phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00026 chi_c1 K- K+ PHSP; -0.00026 chi_c1 anti-K0 K0 PHSP; -0.00026 chi_c1 anti-K0 K+ pi- PHSP; -0.00026 chi_c1 anti-K0 K0 pi0 PHSP; -0.00026 chi_c1 K- K+ pi0 PHSP; -0.00040 chi_c1 phi pi+ pi- PHSP; -0.00040 chi_c1 phi pi0 pi0 PHSP; -0.0001 chi_c1 eta pi+ pi- PHSP; -0.0001 chi_c1 eta pi0 pi0 PHSP; -0.0002 chi_c1 eta' pi+ pi- PHSP; -0.0002 chi_c1 eta' pi0 pi0 PHSP; -# -# -# chic2 = 0.25% CLNS 94/1315 -0.000465 chi_c2 eta' STS; -0.000235 chi_c2 eta STS; -#0.0010 chi_c2 phi STV; whb: model doesn't exist! -0.00016 chi_c2 K- K+ PHSP; -0.00016 chi_c2 anti-K0 K0 PHSP; -0.00016 chi_c2 anti-K0 K+ pi- PHSP; -0.00016 chi_c2 anti-K0 K0 pi0 PHSP; -0.00016 chi_c2 K- K+ pi0 PHSP; -# -# -# etac(1s) = 0.41% Guess: CBX 97-65 -# -0.0008 eta_c eta' PHSP; -0.0004 eta_c eta PHSP; -0.0015 phi eta_c SVS; -0.00028 eta_c K- K+ PHSP; -0.00028 eta_c anti-K0 K0 PHSP; -0.00028 eta_c anti-K0 K+ pi- PHSP; -0.00028 eta_c anti-K0 K0 pi0 PHSP; -0.00028 eta_c K- K+ pi0 PHSP; -0.00040 eta_c phi pi+ pi- PHSP; -0.00040 eta_c phi pi0 pi0 PHSP; -0.0001 eta_c eta pi+ pi- PHSP; -0.0001 eta_c eta pi0 pi0 PHSP; -0.0002 eta_c eta' pi+ pi- PHSP; -0.0002 eta_c eta' pi0 pi0 PHSP; -# -# -# etac(2s) = 0.18% Guess: CBX 97-65 -0.0004 eta_c(2S) eta' PHSP; -0.0002 eta_c(2S) eta PHSP; -0.0006 phi eta_c(2S) SVS; -0.00012 eta_c(2S) K- K+ PHSP; -0.00012 eta_c(2S) anti-K0 K0 PHSP; -0.00012 eta_c(2S) anti-K0 K+ pi- PHSP; -0.00012 eta_c(2S) anti-K0 K0 pi0 PHSP; -0.00012 eta_c(2S) K- K+ pi0 PHSP; -# -# -# hc = 0.25% (100% of chic2) -# Bodwin et.al. Phys Rev D46 1992 -# -0.000465 h_c eta' SVS; -0.000235 h_c eta SVS; -0.0010 h_c phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00016 h_c K- K+ PHSP; -0.00016 h_c anti-K0 K0 PHSP; -0.00016 h_c anti-K0 K+ pi- PHSP; -0.00016 h_c anti-K0 K0 pi0 PHSP; -0.00016 h_c K- K+ pi0 PHSP; -# -# -# b --> c (d u=) -# Exclusive Channels = 6.33% -# fkw 4/28/00 I rearanged this a bit after copying it from -# B0B decay list. -# -# first come the external W-emission decays: -# -0.0008 D_s1+ pi- SVS; -0.0021 D_s1+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0013 D_s2*+ pi- STS; -#0.0037 D_s2*+ rho- STV; # whb: model doesn't exist -# -0.0027 D_s*+ pi- SVS; -0.003200000 D_s+ pi- PHSP; #[Reconstructed PDG2011] -0.0073 rho- D_s+ SVS; -0.0070 D_s*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.0085 a_1- D_s+ SVS; -0.0009 D_s+ rho0 pi- PHSP; -0.0009 D_s+ rho- pi0 PHSP; -0.008400000 D_s+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -0.0009 D_s+ pi0 pi- pi0 PHSP; -# -0.0122 D_s*+ a_1- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0010 D_s*+ rho0 pi- PHSP; -0.0010 D_s*+ rho- pi0 PHSP; -0.0077 D_s*+ pi+ pi- pi- PHSP; -0.0010 D_s*+ pi0 pi- pi0 PHSP; -# -# then the color suppressed decays: -# -# fkw 4/28/00 color suppressed modes bumped up by factor 2 from isospin -# i.e. Bs doesn't have the factor 2 suppression Bd has. -0.0002 D*0 K0 SVS; -0.0002 D0 K0 PHSP; -0.0002 K*0 D0 SVS; -0.0002 D*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# PR LHCb Add p pbar mode -0.000000001 p+ anti-p- PHSP; -# fkw 4/28/00 ignore the internal W emission decays with additional -# q\bar q popping. -# -# Here come the various types of "inclusive unknown" decays: -# -# Start with B to baryons: -# fkw 3/28/01 I don't know what I'm doing here!!! This needs to be checked!!! -# Mark Whitehead 30/4/2010 Weighted PYHTIA to get total BF = 100% -0.019574780 cs_0 anti-ud_0 PYTHIA 23; #[Reconstructed PDG2011] -0.039129957 cs_1 anti-ud_1 PYTHIA 23; #[Reconstructed PDG2011] -# -# Next come external W-emission: -0.301256716 anti-u d c anti-s PYTHIA 48; #[Reconstructed PDG2011] -0.048443906 anti-u d c anti-s PYTHIA 25; #[Reconstructed PDG2011] -# Now the internal W-emission: -0.019086636 anti-u c d anti-s PYTHIA 48; #[Reconstructed PDG2011] -# Then some b->u external W-emission with upper vertex charm -0.003912996 anti-c s u anti-s PYTHIA 48; #[Reconstructed PDG2011] -# and finally some cabibbo suppressed external and internal W-emission -0.014683536 anti-u s c anti-s PYTHIA 48; #[Reconstructed PDG2011] -0.002152148 anti-u s c anti-s PYTHIA 25; #[Reconstructed PDG2011] -0.000880424 anti-u c s anti-s PYTHIA 48; #[Reconstructed PDG2011] -# and some c cbar d stuff as well as c cbar s -0.005391151 anti-c d c anti-s PYTHIA 13; #[Reconstructed PDG2011] -0.001468354 anti-c d c anti-s PYTHIA 13; #[Reconstructed PDG2011] -# and some miscellaneous charmless stuff -0.003521696 anti-u u d anti-s PYTHIA 48; #[Reconstructed PDG2011] -0.000684774 anti-d d d anti-s PYTHIA 48; #[Reconstructed PDG2011] -0.000880424 anti-s s d anti-s PYTHIA 48; #[Reconstructed PDG2011] -0.001956498 anti-u u s anti-s PYTHIA 48; #[Reconstructed PDG2011] -0.001565198 anti-d d s anti-s PYTHIA 48; #[Reconstructed PDG2011] -0.001271724 anti-s s s anti-s PYTHIA 48; #[Reconstructed PDG2011] -0.004891245 s anti-s PYTHIA 32; #[Reconstructed PDG2011] - -# fkw 5/10/00 the b->ulnu decays are loosely modelled according to B0 in EvtGen -0.000200 K+ e- anti-nu_e PHOTOS ISGW2; -0.000300 K*+ e- anti-nu_e PHOTOS ISGW2; -0.000300 K_1+ e- anti-nu_e PHOTOS ISGW2; -0.000200 K'_1+ e- anti-nu_e PHOTOS ISGW2; -# -# -0.000200 K+ mu- anti-nu_mu PHOTOS ISGW2; -0.000300 K*+ mu- anti-nu_mu PHOTOS ISGW2; -0.000300 K_1+ mu- anti-nu_mu PHOTOS ISGW2; -0.000200 K'_1+ mu- anti-nu_mu PHOTOS ISGW2; -# ------------- -# 2e-3 for charmless semi-leptonic - -#*********************************************************** -# -# fkw 5/10/00 -# -# ideas behind these (largely) made up Br's for charmless -# hadronic B decays: -# (1) any PP and PV modes that are used or calculated -# in globfit code by Hou,Smith,Wuerthwein are taken from -# the latest fit i.e. May2000 -# (2) anything else is from Ali,Kramer,Lue -# -# None of this should be taken too serious! -# -#*********************************************************** -# Mark Whitehead 30/4/2010 Updated K+K- -# PR LHCb 04/07/04 update BR -0.000033000 K- K+ PHSP; #[Reconstructed PDG2011] -# PR LHCb 04/07/04 split into KS/KL -0.0000000 anti-K0 K0 PHSP; -0.0000100 K_S0 K_S0 PHSP; -0.0000100 K_L0 K_L0 PHSP; -# PR LHCb 04/07/04 update BR -0.000004900 pi- K+ PHSP; #[Reconstructed PDG2011] -0.0000002 pi0 K0 PHSP; -# PR LHCb 04/07/04 add Bs->pi+ pi- -0.00000001 pi+ pi- PHSP; -# -0.0000012 omega eta SVS; -0.0000025 omega eta' SVS; -0.0000013 phi eta SVS; -0.0000025 phi eta' SVS; -0.00000008 omega anti-K0 SVS; -0.000000002 phi anti-K0 SVS; -# -#next is just twice PI- RHO0 -0.0000250 K*+ pi- SVS; -0.0000120 rho- K+ SVS; -0.00000002 rho0 K0 SVS; -0.00000002 K*0 pi0 SVS; -# -0.0000046 K*- K+ SVS; -# PR LHCb 04/07/04 Split into KS/KL -0.0000000 anti-K*0 K0 SVS; -0.0000020 anti-K*0 K_S0 SVS; -0.0000020 anti-K*0 K_L0 SVS; -0.0000082 K*+ K- SVS; -# PR LHCb 04/07/04 Split into KS/KL -0.0000000 K*0 anti-K0 SVS; -0.0000020 K*0 K_S0 SVS; -0.0000020 K*0 K_L0 SVS; -# -0.0000580 eta' eta' PHSP; -0.0000250 eta' eta PHSP; -0.0000040 eta eta PHSP; -#### Already included above 0.0000200 phi eta SVS; -#### Already included above 0.0000100 phi eta' SVS; -# -#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 -0.00000007 K0 eta' PHSP; -0.00000023 K0 eta PHSP; -0.000000021 K*0 eta' SVS; -0.00000007 K*0 eta SVS; -# -#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 -# for vector-vector final states -0.000020 rho- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000008 rho0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000000005 omega K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.000006 K*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# PR LHCb 04/07/04 Update BR -0.000004 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000014000 phi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000000004 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# decays that go via b->d penguins -#### Already included above 0.0000004 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# PR LHCb : add Bs -> mu+ mu- -0.0000000035 mu- mu+ PHSP; -#PR LHCb 04/08/2004 add Bs -> tau+ tau- (BR not to take too seriously) -0.0000000020 tau- tau+ PHSP; -# PR LHCb 04/05/2004 : add Bs -> phi gamma -0.000057000 phi gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -# PR LHCb 04/08/2004 : add Bs -> phi mu mu, phi e e -0.0000023 phi e- e+ BTOSLLALI; -0.0000023 phi mu- mu+ BTOSLLALI; -# PR LHCb 16 apr 2004 : add Bs -> gamma gamma -0.0000005 gamma gamma PHSP; -#-------------- -# 257.122e-6 for all the charmless hadronic -# -0.000150000 D_s- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -# B_s decays. -# ------------------------------------------------------- -# whb&fkw 3/28/01 Taken from fkw's QQ tables. -# most dubious part are the B to baryons. -# fkw 4/28/00 made the Bs parallel to the Bd as best as I could -# ------------------------------------------------------- -Decay B_s0 -0.0210 D_s- e+ nu_e PHOTOS ISGW2; -0.0490 D_s*- e+ nu_e PHOTOS ISGW2; -0.0040 D_s1- e+ nu_e PHOTOS ISGW2; -0.0040 D_s0*- e+ nu_e PHOTOS ISGW2; -0.0070 D'_s1- e+ nu_e PHOTOS ISGW2; -0.0070 D_s2*- e+ nu_e PHOTOS ISGW2; -0.0210 D_s- mu+ nu_mu PHOTOS ISGW2; -0.0490 D_s*- mu+ nu_mu PHOTOS ISGW2; -0.0040 D_s1- mu+ nu_mu PHOTOS ISGW2; -0.0040 D_s0*- mu+ nu_mu PHOTOS ISGW2; -0.0070 D'_s1- mu+ nu_mu PHOTOS ISGW2; -0.0070 D_s2*- mu+ nu_mu PHOTOS ISGW2; -#fkw 5/04/01 changed these to account for taking out non-res -#0.0070 D_s- tau+ nu_tau ISGW2; -#0.0150 D_s*- tau+ nu_tau ISGW2; -#0.0013 D_s1- tau+ nu_tau ISGW2; -#0.0013 D_s0*- tau+ nu_tau ISGW2; -#0.0023 D'_s1- tau+ nu_tau ISGW2; -#0.0023 D_s2*- tau+ nu_tau ISGW2; -0.0080 D_s- tau+ nu_tau ISGW2; -0.0160 D_s*- tau+ nu_tau ISGW2; -0.0018 D_s1- tau+ nu_tau ISGW2; -0.0018 D_s0*- tau+ nu_tau ISGW2; -0.0028 D'_s1- tau+ nu_tau ISGW2; -0.0028 D_s2*- tau+ nu_tau ISGW2; -# -# fkw 4/28/00 the next few are decays where a u\bar u or d\bar d is popped -# between the charm quark and the spectator. I can thus not -# just replace a D by a Ds as above when going from Bd to Bs. -# -# fkw 5/04/01 Had to take non-res out because it crashed EvtGen. -#0.0010 anti-D*0 K- tau+ nu_tau GOITY_ROBERTS; -#0.0010 D*- anti-K0 tau+ nu_tau GOITY_ROBERTS; -#0.0010 anti-D0 K- tau+ nu_tau GOITY_ROBERTS; -#0.0010 D- anti-K0 tau+ nu_tau GOITY_ROBERTS; -# fkw 4/28/00 B0 -> TAU D PI0 = 1/2 of TAU D PI- because of pi0 wave function -# However, the same factor of 1/2 doesn't apply to BS0 !!! -# fkw 3/28/01 There seem to be no semi-leptonic B to baryon decays in nature. -# I don't pretend to understand why. PDG 2000 has a limit of -# < 3.2e-3 where one might naively expect -# 10% * BR(B->/\c) = 0.1 * (6.4+-1.1)% -#0.0050 nu_e e+ B-Baryon -#0.0050 nu_mu mu+ B-Baryon -# -# b --> c (s c=) -# Sum = 11.44% -# 2-body = 4.72% -# more-body = 6.72% -0.010400000 D_s- D_s+ PHSP; #[Reconstructed PDG2011] -0.0099 D_s*+ D_s- SVS; -0.0099 D_s*- D_s+ SVS; -0.0197 D_s*- D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# fkw 4/28/00 more states with popped q\bar q. -# The one's here involve only popped and spectator. -# Popping stuff in the cs from the W comes further below. -# The same isospin comment applies here as above in the -# semi-leptonic decays with tau and popped q\bar q. -0.0096 D_s+ D- anti-K0 PHSP; -0.0096 D_s+ D0 K- PHSP; -0.0096 D_s*+ D- anti-K0 PHSP; -0.0096 D_s*+ anti-D0 K- PHSP; -# -0.0024 D_s+ D- pi0 anti-K0 PHSP; -0.0048 D_s+ anti-D0 pi- anti-K0 PHSP; -0.0048 D_s+ D- pi+ K- PHSP; -0.0024 D_s+ anti-D0 pi0 K- PHSP; -# -0.0024 D_s*+ D- pi0 anti-K0 PHSP; -0.0048 D_s*+ anti-D0 pi- anti-K0 PHSP; -0.0048 D_s*+ D- pi+ K- PHSP; -0.0024 D_s*+ anti-D0 pi0 K- PHSP; -# -# -# b --> (c ) (c ) (s ) -# Sum = 8.0% -# DDK amplitudes R.A.Briere 10/97 -# fkw 4/28/00 these are q\bar q popping that don't involve the spectator -# Bd->Bs just involves switching the c\bar d to c\bar s. -# -0.0150 D_s*- D*0 K+ PHSP; -0.0150 D_s*- D*+ K0 PHSP; -0.0050 D_s*- D0 K+ PHSP; -0.0050 D_s*- D+ K0 PHSP; -0.0050 D_s- D*0 K+ PHSP; -0.0050 D_s- D*+ K0 PHSP; -0.0020 D_s- D0 K+ PHSP; -0.0020 D_s- D+ K0 PHSP; -0.0030 D_s*- D*0 K*+ PHSP; -0.0030 D_s*- D*+ K*0 PHSP; -0.0050 D_s*- D0 K*+ PHSP; -0.0050 D_s*- D+ K*0 PHSP; -0.0025 D_s- D*0 K*+ PHSP; -0.0025 D_s- D*+ K*0 PHSP; -0.0025 D_s- D0 K*+ PHSP; -0.0025 D_s- D+ K*0 PHSP; -# -# -# b --> c (d c=) -# Sum = 1.36% -0.0017 D_s+ D- PHSP; -0.0017 D*- D_s+ SVS; -0.0017 D_s*+ D- SVS; -0.0017 D_s*+ D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# fkw 4/38/00 more popping at the lower vertex -# but with upper vertex cabbibo suppressed. -0.0007 D+ D- anti-K0 PHSP; -0.0007 D+ D0 K- PHSP; -0.0007 D*+ D- anti-K0 PHSP; -0.0007 D*+ anti-D0 K- PHSP; -# -0.0003 D+ D- pi0 anti-K0 PHSP; -0.0007 D+ anti-D0 pi- anti-K0 PHSP; -0.0003 D+ D- pi+ K- PHSP; -0.0007 D+ anti-D0 pi0 K- PHSP; -# -0.0003 D*+ D- pi0 anti-K0 PHSP; -0.0007 D*+ anti-D0 pi- anti-K0 PHSP; -0.0003 D*+ D- pi+ K- PHSP; -0.0007 D*+ anti-D0 pi0 K- PHSP; -# -# b --> c (u s=) -# exclusive -# Sum = 0.9% -0.00015 D_s*- K+ SVS; -0.000150000 D_s- K+ PHSP; #[Reconstructed PDG2011] -0.00030 D_s*- K*+ SVV_HELAMP 0.0283 0.0 0.932 0.0 0.228 0.0; -0.00030 K*+ D_s- SVS; -# -# fkw 4/28/00 Strategy for charmonium modes: -# Take Bd BR's, replace spectator, -# assume etaprime = 2/3 ss -# and eta = 1/3 ss -# -# Note: Just for kicks I gave the c\bar c decays a small piece that is -# self tagging. See if you can find it. This is already in -# the B0 decays in cleo's version of decay.dec . -# -# B --> (c c=) (s s=) -# 2.65% -# should be: psi = 0.80% CLNS 94/1315 but isn't quite right. -0.00064 J/psi eta' SVS; -0.00032 J/psi eta SVS; -0.001300000 J/psi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.00008 J/psi K0 SVS; -0.00070 J/psi K- K+ PHSP; -0.00070 J/psi anti-K0 K0 PHSP; -0.00070 J/psi K0 K- pi+ PHSP; -0.00070 J/psi anti-K0 K0 pi0 PHSP; -0.00070 J/psi K- K+ pi0 PHSP; -# LHCb PR 04/02/04 Add (cc) phi n pi(+/0) -0.00039 J/psi phi pi+ pi- PHSP; -0.00039 J/psi phi pi0 pi0 PHSP; -# LHCb PR Add (cc) phi eta(') + npi like in CDF QQ -0.0002 J/psi eta pi+ pi- PHSP; -0.0002 J/psi eta pi0 pi0 PHSP; -0.0004 J/psi eta' pi+ pi- PHSP; -0.0004 J/psi eta' pi0 pi0 PHSP; -0.0002 J/psi pi+ pi- PHSP; -0.0002 J/psi pi0 pi0 PHSP; -# psi' = 0.34% CLNS 94/1315 -0.000465 psi(2S) eta' SVS; -0.000235 psi(2S) eta SVS; -0.000680000 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.0003 psi(2S) K- K+ PHSP; -0.0003 psi(2S) anti-K0 K0 PHSP; -0.0003 psi(2S) K0 K- pi+ PHSP; -0.0003 psi(2S) anti-K0 K0 pi0 PHSP; -0.0003 psi(2S) K- K+ pi0 PHSP; -0.00034 psi(2S) phi pi+ pi- PHSP; -0.00034 psi(2S) phi pi0 pi0 PHSP; -0.0002 psi(2S) eta pi+ pi- PHSP; -0.0002 psi(2S) eta pi0 pi0 PHSP; -0.0004 psi(2S) eta' pi+ pi- PHSP; -0.0004 psi(2S) eta' pi0 pi0 PHSP; -0.0002 psi(2S) pi+ pi- PHSP; -0.0002 psi(2S) pi0 pi0 PHSP; -# -# chic0 = 0.05% (20% of chic2) -# Bodwin et.al. Phys Rev D46 1992 -0.00010 chi_c0 eta' PHSP; -0.00005 chi_c0 eta PHSP; -0.00020 phi chi_c0 SVS; -0.00003 chi_c0 K- K+ PHSP; -0.00003 chi_c0 anti-K0 K0 PHSP; -0.00003 chi_c0 K0 K- pi+ PHSP; -0.00003 chi_c0 anti-K0 K0 pi0 PHSP; -0.00003 chi_c0 K- K+ pi0 PHSP; -# -# -# chic1 = 0.37% CLNS 94/1315 -0.0007 chi_c1 eta' SVS; -0.0003 chi_c1 eta SVS; -0.0014 chi_c1 phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00026 chi_c1 K- K+ PHSP; -0.00026 chi_c1 anti-K0 K0 PHSP; -0.00026 chi_c1 K0 K- pi+ PHSP; -0.00026 chi_c1 anti-K0 K0 pi0 PHSP; -0.00026 chi_c1 K- K+ pi0 PHSP; -0.00040 chi_c1 phi pi+ pi- PHSP; -0.00040 chi_c1 phi pi0 pi0 PHSP; -0.0001 chi_c1 eta pi+ pi- PHSP; -0.0001 chi_c1 eta pi0 pi0 PHSP; -0.0002 chi_c1 eta' pi+ pi- PHSP; -0.0002 chi_c1 eta' pi0 pi0 PHSP; -# -# -# chic2 = 0.25% CLNS 94/1315 -0.000465 chi_c2 eta' STS; -0.000235 chi_c2 eta STS; -#0.0010 chi_c2 phi STV; whb: doesn't exist -0.00016 chi_c2 K- K+ PHSP; -0.00016 chi_c2 anti-K0 K0 PHSP; -0.00016 chi_c2 K0 K- pi+ PHSP; -0.00016 chi_c2 anti-K0 K0 pi0 PHSP; -0.00016 chi_c2 K- K+ pi0 PHSP; -# -# -# etac(1s) = 0.41% Guess: CBX 97-65 -0.0008 eta_c eta' PHSP; -0.0004 eta_c eta PHSP; -0.0015 phi eta_c SVS; -0.00028 eta_c K- K+ PHSP; -0.00028 eta_c K0 anti-K0 PHSP; -0.00028 eta_c K0 K- pi+ PHSP; -0.00028 eta_c K0 anti-K0 pi0 PHSP; -0.00028 eta_c K- K+ pi0 PHSP; -0.00040 eta_c phi pi+ pi- PHSP; -0.00040 eta_c phi pi0 pi0 PHSP; -0.0001 eta_c eta pi+ pi- PHSP; -0.0001 eta_c eta pi0 pi0 PHSP; -0.0002 eta_c eta' pi+ pi- PHSP; -0.0002 eta_c eta' pi0 pi0 PHSP; -# -# -# etac(2s) = 0.18% Guess: CBX 97-65 -0.0004 eta_c(2S) eta' PHSP; -0.0002 eta_c(2S) eta PHSP; -0.0006 phi eta_c(2S) SVS; -0.00012 eta_c(2S) K- K+ PHSP; -0.00012 eta_c(2S) anti-K0 K0 PHSP; -0.00012 eta_c(2S) K0 K- pi+ PHSP; -0.00012 eta_c(2S) anti-K0 K0 pi0 PHSP; -0.00012 eta_c(2S) K- K+ pi0 PHSP; -# -# -# hc = 0.25% (100% of chic2) -# Bodwin et.al. Phys Rev D46 1992 -0.000465 h_c eta' SVS; -0.000235 h_c eta SVS; -0.0010 h_c phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00016 h_c K- K+ PHSP; -0.00016 h_c anti-K0 K0 PHSP; -0.00016 h_c K0 K- pi+ PHSP; -0.00016 h_c anti-K0 K0 pi0 PHSP; -0.00016 h_c K- K+ pi0 PHSP; -# -# -# b --> c (d u=) -# Exclusive Channels = 6.33% -# fkw 4/28/00 I rearanged this a bit after copying it from -# B0B decay list. -# -# first come the external W-emission decays: -# -0.0008 D_s1- pi+ SVS; -0.0021 D_s1- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0013 D_s2*- pi+ STS; -#0.0037 D_s2*- rho+ STV; #whb: STV does not exist yet -# -0.0027 D_s*- pi+ SVS; -0.003200000 D_s- pi+ PHSP; #[Reconstructed PDG2011] -0.0073 rho+ D_s- SVS; -0.0070 D_s*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.0085 a_1+ D_s- SVS; -0.0009 D_s- rho0 pi+ PHSP; -0.0009 D_s- rho+ pi0 PHSP; -0.008400000 D_s- pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] -0.0009 D_s- pi0 pi+ pi0 PHSP; -# -0.0122 D_s*- a_1+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0010 D_s*- rho0 pi+ PHSP; -0.0010 D_s*- rho+ pi0 PHSP; -0.0077 D_s*- pi- pi+ pi+ PHSP; -0.0010 D_s*- pi0 pi+ pi0 PHSP; -# -# then the color suppressed decays: -# -# fkw 4/28/00 color suppressed modes bumped up by factor 2 from isospin -# i.e. Bs doesn't have the factor 2 suppression Bd has. -0.0002 anti-D*0 anti-K0 SVS; -0.0002 anti-D0 anti-K0 PHSP; -0.0002 anti-K*0 anti-D0 SVS; -0.0002 anti-D*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# PR LHCb : add p ppbar mode -0.000000001 p+ anti-p- PHSP; -# fkw 4/28/00 ignore the internal W emission decays with additional -# q\bar q popping. -# -# Here come the various types of "inclusive unknown" decays: -# -# Start with B to baryons: -# fkw 3/28/01 I don't know what I'm doing here!!! This needs to be checked!!! -# Mark Whitehead 30/4/2010 Weight PYTHIA to get Total BF=100% -0.019574780 anti-cs_0 ud_0 PYTHIA 23; #[Reconstructed PDG2011] -0.039129957 anti-cs_1 ud_1 PYTHIA 23; #[Reconstructed PDG2011] -# -# Next come external W-emission: -0.301256716 u anti-d anti-c s PYTHIA 48; #[Reconstructed PDG2011] -0.048443906 u anti-d anti-c s PYTHIA 25; #[Reconstructed PDG2011] -# Now the internal W-emission: -0.019086636 u anti-c anti-d s PYTHIA 48; #[Reconstructed PDG2011] -# Then some b->u external W-emission with upper vertex charm -0.003912996 c anti-s anti-u s PYTHIA 48; #[Reconstructed PDG2011] -# and finally some cabibbo suppressed external and internal W-emission -0.014683536 u anti-s anti-c s PYTHIA 48; #[Reconstructed PDG2011] -0.002152148 u anti-s anti-c s PYTHIA 25; #[Reconstructed PDG2011] -0.000880424 u anti-c anti-s s PYTHIA 48; #[Reconstructed PDG2011] -# and some c cbar d stuff as well as c cbar s -0.005391151 c anti-d anti-c s PYTHIA 13; #[Reconstructed PDG2011] -0.001468354 c anti-d anti-c s PYTHIA 13; #[Reconstructed PDG2011] -# and some miscellaneous charmless stuff -0.003521696 u anti-u anti-d s PYTHIA 48; #[Reconstructed PDG2011] -0.000684774 d anti-d anti-d s PYTHIA 48; #[Reconstructed PDG2011] -0.000880424 s anti-s anti-d s PYTHIA 48; #[Reconstructed PDG2011] -0.001956498 u anti-u anti-s s PYTHIA 48; #[Reconstructed PDG2011] -0.001565198 d anti-d anti-s s PYTHIA 48; #[Reconstructed PDG2011] -0.001271724 s anti-s anti-s s PYTHIA 48; #[Reconstructed PDG2011] -0.004891245 anti-s s PYTHIA 32; #[Reconstructed PDG2011] - -# fkw 5/10/00 the b->ulnu decays are loosely modelled according to B0 in EvtGen -0.000200 K- e+ nu_e PHOTOS ISGW2; -0.000300 K*- e+ nu_e PHOTOS ISGW2; -0.000300 K_1- e+ nu_e PHOTOS ISGW2; -0.000200 K'_1- e+ nu_e PHOTOS ISGW2; -# -# -0.000200 K- mu+ nu_mu PHOTOS ISGW2; -0.000300 K*- mu+ nu_mu PHOTOS ISGW2; -0.000300 K_1- mu+ nu_mu PHOTOS ISGW2; -0.000200 K'_1- mu+ nu_mu PHOTOS ISGW2; -# ------------- -# 2e-3 for charmless semi-leptonic - -#*********************************************************** -# -# fkw 5/10/00 -# -# ideas behind these (largely) made up Br's for charmless -# hadronic B decays: -# (1) any PP and PV modes that are used or calculated -# in globfit code by Hou,Smith,Wuerthwein are taken from -# the latest fit i.e. May2000 -# (2) anything else is from Ali,Kramer,Lue -# -# None of this should be taken too serious! -# -#*********************************************************** -# Mark Whitehead 30/4/2010 Update K+K- -# PR LHCb update Br Bs -> K- K+ -0.000033000 K- K+ PHSP; #[Reconstructed PDG2011] -# PR LHCb 4/07/04 Split in KS/KL -0.0000000 anti-K0 K0 PHSP; -0.0000100 K_S0 K_S0 PHSP; -0.0000100 K_L0 K_L0 PHSP; -# -0.000004900 pi+ K- PHSP; #[Reconstructed PDG2011] -0.0000002 pi0 anti-K0 PHSP; -# PR LHCb 4/07/04 add Bs -> pi+ pi- -0.00000001 pi+ pi- PHSP; -# -0.0000012 omega eta SVS; -0.0000025 omega eta' SVS; -0.0000013 phi eta SVS; -0.0000025 phi eta' SVS; -0.00000008 omega K0 SVS; -0.000000002 phi K0 SVS; -# -0.0000250 K*- pi+ SVS; -0.0000120 rho+ K- SVS; -0.00000002 rho0 K0 SVS; -0.00000002 anti-K*0 pi0 SVS; -# -0.0000046 K*+ K- SVS; -# PR LHCb 4/07/04 split in KS/KL -0.0000000 K*0 anti-K0 SVS; -0.0000020 K*0 K_S0 SVS; -0.0000020 K*0 K_L0 SVS; -0.0000082 K*- K+ SVS; -# PR LHCb 4/07/04 split in KS/KL -0.0000000 anti-K*0 K0 SVS; -0.0000020 anti-K*0 K_S0 SVS; -0.0000020 anti-K*0 K_L0 SVS; -# -0.0000580 eta' eta' PHSP; -0.0000250 eta' eta PHSP; -0.0000040 eta eta PHSP; -### Already included above 0.0000200 phi eta SVS; -### Already included above 0.0000100 phi eta' SVS; -# -#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 -0.00000007 anti-K0 eta' PHSP; -0.00000023 anti-K0 eta PHSP; -0.000000021 anti-K*0 eta' SVS; -0.00000007 anti-K*0 eta SVS; -# -#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 -# for vector-vector final states -0.000020 rho+ K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000008 rho0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000000005 omega anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.000006 K*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# PR LHCb Update BR -0.000004 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000014000 phi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000000004 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# decays that go via b->d penguins -#### Already included above 0.0000004 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -#PR LHCb add Bs -> mu+ mu- -0.0000000035 mu+ mu- PHSP; -#PR LHCb 04/08/2004 add Bs -> tau+ tau- (BR not to take too seriously) -0.0000000020 tau+ tau- PHSP; -# PR LHCb 04/05/2004 : add Bs -> phi gamma -0.000057000 phi gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -# PR LHCb 04/08/2004 : add Bs -> phi mu mu, phi e e -0.0000023 phi e+ e- BTOSLLALI; -0.0000023 phi mu+ mu- BTOSLLALI; -# PR LHCb 16 Apr 2004 : add Bs -> gamma gamma -0.0000005 gamma gamma PHSP; -#-------------- -# 257.122e-6 for all the charmless hadronic -# -0.000150000 D_s+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay - -# whb: QQ B_c included- Near end of File -#Decay B_c- -#CHANNEL 0 0.0700 TAU- NUTB -#CHANNEL 1 0.1100 NUEB E- *CC* -#CHANNEL 1 0.1100 NUMB MU- *CC* -#CHANNEL 1 0.0300 NUTB TAU- *CC* -#CHANNEL 0 0.3400 *DU* *CC* -#CHANNEL 0 0.0700 *SC* *CC* -#CHANNEL 0 0.2700 *SC* -#0.0700 tau- anti-nu_tau PHSP; -#0.1100 anti-nu_e e- *CC* Simpleleptonic; -#0.1100 anti-nu_mu mu- *CC* Simple leptonic; -#0.0300 anti-nu_tau tau- *CC* Simple leptonic; -#0.3400 *DU* *CC* PHSP; -#0.0700 *SC* *CC* PHSP; -#0.2700 *SC* PHSP; -#Enddecay -# -#Decay B_c+ -#CHANNEL 0 0.0700 TAU+ NUT -#CHANNEL 1 0.1100 NUE E+ *CC* -#CHANNEL 1 0.1100 NUM MU+ *CC* -#CHANNEL 1 0.0300 NUT TAU+ *CC* -#CHANNEL 0 0.3400 *UD* *CC* -#CHANNEL 0 0.0700 *CS* *CC* -#CHANNEL 0 0.2700 *CS* -#0.0700 tau+ nu_tau PHSP; -#0.1100 nu_e E+ *CC* Simple leptonic; -#0.1100 nu_mu mu+ *CC* Simple leptonic; -#0.0300 nu_tau tau+ *CC* Simple leptonic; -#0.3400 *UD* *CC* PHSP; -#0.0700 *CS* *CC* PHSP; -#0.2700 *CS* PHSP; -#Enddecay - -# -# Updated to PDG 2008 -# -Decay tau- -0.154002925 e- anti-nu_e nu_tau PHOTOS TAULNUNU; #[Reconstructed PDG2011] -0.170000000 mu- anti-nu_mu nu_tau PHOTOS TAULNUNU; #[Reconstructed PDG2011] -0.109100000 pi- nu_tau TAUSCALARNU; #[Reconstructed PDG2011] -0.006960000 K- nu_tau TAUSCALARNU; #[Reconstructed PDG2011] -0.255100000 pi- pi0 nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400; #[Reconstructed PDG2011] -0.001124109 nu_tau gamma pi- pi0 PYTHIA 41; #[Reconstructed PDG2011] -0.079301562 pi0 pi0 pi- nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400 1.23 0.4; #[Reconstructed PDG2011] -0.000385656 nu_tau K- pi0 pi0 PYTHIA 41; #[Reconstructed PDG2011] -0.008508640 nu_tau pi- pi0 pi0 pi0 PYTHIA 41; #[Reconstructed PDG2011] -0.000864699 nu_tau pi- pi0 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -#0.2515 rho- nu_tau TAUVECTORNU; -#0.1790 a_1- nu_tau TAUVECTORNU; -# Modes with K0s -# -0.000319939 nu_tau pi- anti-K0 PYTHIA 41; #[Reconstructed PDG2011] -0.001590000 nu_tau K- K0 PYTHIA 41; #[Reconstructed PDG2011] -0.001700000 nu_tau K0 pi- anti-K0 PYTHIA 41; #[Reconstructed PDG2011] -0.001590000 nu_tau K- pi0 K0 PYTHIA 41; #[Reconstructed PDG2011] -0.004000000 nu_tau pi- anti-K0 pi0 PYTHIA 41; #[Reconstructed PDG2011] -# 3 Charged Particles -# -0.093200000 pi- pi- pi+ nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400 1.23 0.4; #[Reconstructed PDG2011] -0.046100000 nu_tau pi- pi+ pi- pi0 PYTHIA 41; #[Reconstructed PDG2011] -0.000501526 nu_tau pi- pi- pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.000155646 nu_tau pi- pi- pi+ pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.003420000 nu_tau K- pi+ pi- PYTHIA 41; #[Reconstructed PDG2011] -0.001360000 nu_tau K- pi+ pi- pi0 PYTHIA 41; #[Reconstructed PDG2011] -0.001400000 nu_tau K- pi- K+ PYTHIA 41; #[Reconstructed PDG2011] -0.000015800 nu_tau K- K+ K- PYTHIA 41; #[Reconstructed PDG2011] -# 5 Charged Particles -# -0.000700406 nu_tau pi- pi- pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] -0.000129705 nu_tau pi- pi- pi- pi+ pi+ pi0 PHSP; #[Reconstructed PDG2011] -# Misc other modes -# -0.012000000 K*- nu_tau TAUVECTORNU; #[Reconstructed PDG2011] -0.001390000 nu_tau eta pi- pi0 PYTHIA 41; #[Reconstructed PDG2011] -0.003199387 nu_tau pi- omega pi0 PYTHIA 41; #[Reconstructed PDG2011] -0.000410000 nu_tau K- omega PYTHIA 41; #[Reconstructed PDG2011] -0.002200000 anti-K*0 pi- nu_tau PHSP; #[Reconstructed PDG2011] -0.002100000 K*0 K- nu_tau PHSP; #[Reconstructed PDG2011] -0.000034000 phi pi- nu_tau PHSP; #[Reconstructed PDG2011] -0.000037000 phi K- nu_tau PHSP; #[Reconstructed PDG2011] -0.003600000 mu- anti-nu_mu nu_tau gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.017500000 e- anti-nu_e nu_tau gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.004290000 K- pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] -0.002200000 anti-K0 rho- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000260000 pi- anti-K0 pi0 pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000310000 pi- K0 anti-K0 pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000061000 K- K+ pi- pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000028000 e- e- e+ anti-nu_e nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] -0.004700000 K_1- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001700000 K'_1- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001500000 K'*- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000150000 eta pi- pi0 pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000161000 eta K- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000138000 eta K*- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000048000 eta K- pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000093000 eta anti-K0 pi- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000360000 f_1 pi- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -CDecay tau+ -# -# Vector Mesons Updated PDG 2008 -# -Decay D*+ -0.6770 D0 pi+ VSS; -0.3070 D+ pi0 VSS; -0.0160 D+ gamma VSP_PWAVE; -Enddecay -Decay D*- -0.6770 anti-D0 pi- VSS; -0.3070 D- pi0 VSS; -0.0160 D- gamma VSP_PWAVE; -Enddecay -Decay D*0 -0.619000000 D0 pi0 VSS; #[Reconstructed PDG2011] -0.381000000 D0 gamma VSP_PWAVE; #[Reconstructed PDG2011] -Enddecay -Decay anti-D*0 -0.6190 anti-D0 pi0 VSS; -0.3810 anti-D0 gamma VSP_PWAVE; -Enddecay -# -Decay D_s*+ -0.942000000 D_s+ gamma VSP_PWAVE; #[Reconstructed PDG2011] -0.058000000 D_s+ pi0 VSS; #[Reconstructed PDG2011] -Enddecay -Decay D_s*- -0.942000000 D_s- gamma VSP_PWAVE; #[Reconstructed PDG2011] -0.058000000 D_s- pi0 VSS; #[Reconstructed PDG2011] -Enddecay -# -# -# D+ Meson -# -Decay D+ -0.055300000 anti-K*0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.088300000 anti-K0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002773020 anti-K_10 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002927076 anti-K_2*0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.004050000 pi0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.001330000 eta e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000385142 eta' e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002200000 rho0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.001600000 omega e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.041000000 K- pi+ e+ nu_e PHOTOS PHSP; #[Reconstructed PDG2011] -0.001078397 anti-K0 pi0 e+ nu_e PHOTOS PHSP; #[Reconstructed PDG2011] -# -0.055000000 anti-K*0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.094000000 anti-K0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002773020 anti-K_10 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002927076 anti-K_2*0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.003312218 pi0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002002736 eta mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000385142 eta' mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002500000 rho0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002156793 omega mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.039000000 K- pi+ mu+ nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] -0.001078397 anti-K0 pi0 mu+ nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] -# -# -0.000382000 mu+ nu_mu PHOTOS SLN; #[Reconstructed PDG2011] -0.000770283 tau+ nu_tau SLN; #[Reconstructed PDG2011] -# -0.014900000 K_S0 pi+ PHSP; #[Reconstructed PDG2011] -0.014600000 K_L0 pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 pi+ PHSP; #[Reconstructed PDG2011] -# -0.025950843 a_1+ K_S0 SVS; #[Reconstructed PDG2011] -0.025950843 a_1+ K_L0 SVS; #[Reconstructed PDG2011] -0.000000000 a_1+ anti-K0 SVS; #[Reconstructed PDG2011] -# -0.027090862 anti-K'_10 pi+ SVS; #[Reconstructed PDG2011] -#0.0115 anti-K_0*0N pi+ PHSP; -0.013387523 anti-K*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -# -# the Dalitz mode below includes K*bar(892)0 pi+, -# K*bar(1430)0 pi+, and K*bar(1680)0 pi+ resonances. -0.094000000 K- pi+ pi+ D_DALITZ; #[Reconstructed PDG2011] -# the Dalitz mode below includes K0bar rho+, -# and K*bar(892)0 pi+ resonances -0.069000000 K_S0 pi+ pi0 D_DALITZ; #[Reconstructed PDG2011] -0.051539652 K_L0 pi+ pi0 D_DALITZ; #[Reconstructed PDG2011] -0.000000000 anti-K0 pi+ pi0 D_DALITZ; #[Reconstructed PDG2011] -#0.0100 anti-K0 eta pi+ PHSP; -# -0.001247859 K_S0 rho0 pi+ PHSP; #[Reconstructed PDG2011] -0.001247859 K_L0 rho0 pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 rho0 pi+ PHSP; #[Reconstructed PDG2011] -# -0.003851416 anti-K0 omega pi+ PHSP; #[Reconstructed PDG2011] -0.007032686 K- rho+ pi+ PHSP; #[Reconstructed PDG2011] -0.009274210 K*- pi+ pi+ PHSP; #[Reconstructed PDG2011] -0.047187552 anti-K*0 pi0 pi+ PHSP; #[Reconstructed PDG2011] -#0.0100 anti-K*0 eta pi+ PHSP; -0.001101505 anti-K*0 rho0 pi+ PHSP; #[Reconstructed PDG2011] -0.003851416 anti-K*0 omega pi+ PHSP; #[Reconstructed PDG2011] -#0.0100 K*- rho+ pi+ PHSP; -# -0.008473116 K- pi+ pi+ pi0 PHSP; #[Reconstructed PDG2011] -# -0.002472609 K_S0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.002472609 K_L0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] -# -#0.0188 anti-K0 pi+ pi0 pi0 PHSP; -0.005700000 K- pi+ pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.003851416 K- pi+ pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.006701464 anti-K0 pi+ pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.002695991 anti-K0 pi+ pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -# -0.004600000 K_S0 K_S0 K+ PHSP; #[Reconstructed PDG2011] -0.003111944 K_L0 K_L0 K+ PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 anti-K0 K+ PHSP; #[Reconstructed PDG2011] -# -0.004660214 phi pi+ SVS; #[Reconstructed PDG2011] -0.023000000 phi pi+ pi0 PHSP; #[Reconstructed PDG2011] -# -0.002860000 K_S0 K+ PHSP; #[Reconstructed PDG2011] -0.002195307 K_L0 K+ PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K+ PHSP; #[Reconstructed PDG2011] -# -0.002179902 anti-K*0 K+ SVS; #[Reconstructed PDG2011] -# -0.016000000 K*+ K_S0 SVS; #[Reconstructed PDG2011] -0.011145999 K*+ K_L0 SVS; #[Reconstructed PDG2011] -0.000000000 K*+ anti-K0 SVS; #[Reconstructed PDG2011] -# -#0.0180 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.002826940 K+ K- pi+ PHSP; #[Reconstructed PDG2011] -0.000770283 K+ anti-K0 pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K0 pi+ PHSP; #[Reconstructed PDG2011] -0.000770283 K*+ K- pi+ PHSP; #[Reconstructed PDG2011] -0.000770283 K+ K*- pi+ PHSP; #[Reconstructed PDG2011] -0.000770283 K*+ anti-K0 pi0 PHSP; #[Reconstructed PDG2011] -0.000770283 K+ anti-K*0 pi0 PHSP; #[Reconstructed PDG2011] -0.000770283 anti-K*0 K0 pi+ PHSP; #[Reconstructed PDG2011] -0.000770283 anti-K0 K*0 pi+ PHSP; #[Reconstructed PDG2011] -# -0.001260000 pi0 pi+ PHSP; #[Reconstructed PDG2011] -0.000830000 rho0 pi+ SVS; #[Reconstructed PDG2011] -0.002440000 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.004700000 pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.011600000 pi+ pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.003851416 pi+ pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.003430000 eta pi+ PHSP; #[Reconstructed PDG2011] -0.004400000 eta' pi+ PHSP; #[Reconstructed PDG2011] -0.001380000 eta pi+ pi0 PHSP; #[Reconstructed PDG2011] -0.002310850 eta pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.001540566 eta pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] -#lange jul22,2002 -0.001660000 pi+ pi+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -# -# March 2009 New Modes -0.009300000 anti-K*0 a_1+ PHSP; #[Reconstructed PDG2011] -0.010545178 K+ K- pi+ pi0 PHSP; #[Reconstructed PDG2011] -# -0.001740000 K+ K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.001270967 K+ K_L0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 K+ anti-K0 pi+ pi- PHSP; #[Reconstructed PDG2011] -# -0.002380000 K_S0 K- pi+ pi+ PHSP; #[Reconstructed PDG2011] -0.001756246 K_L0 K- pi+ pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 K0 K- pi+ pi+ PHSP; #[Reconstructed PDG2011] -# -0.000230000 K+ K- pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] -# -0.000240000 K+ K- K_S0 pi+ PHSP; #[Reconstructed PDG2011] -0.000161759 K+ K- K_L0 pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 K+ K- anti-K0 pi+ PHSP; #[Reconstructed PDG2011] -# Doubly Cabibbo suppressed modes -0.000237000 K+ pi0 PHSP; #[Reconstructed PDG2011] -0.000332000 K+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000089000 K+ K+ K- PHSP; #[Reconstructed PDG2011] -0.001720000 K- rho0 pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001600000 eta' pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000210000 K+ rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -# -Decay D- -0.055300000 K*0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.088300000 K0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002773020 K_10 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002927076 K_2*0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.004050000 pi0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.001330000 eta e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000385142 eta' e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002200000 rho0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.001600000 omega e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.041000000 K+ pi- e- anti-nu_e PHOTOS PHSP; #[Reconstructed PDG2011] -0.001078397 K0 pi0 e- anti-nu_e PHOTOS PHSP; #[Reconstructed PDG2011] -# -0.055000000 K*0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.094000000 K0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002773020 K_10 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002927076 K_2*0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.003312218 pi0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002002736 eta mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000385142 eta' mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002500000 rho0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002156793 omega mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.039000000 K+ pi- mu- anti-nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] -0.001078397 K0 pi0 mu- anti-nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] -# -0.000382000 mu- anti-nu_mu PHOTOS SLN; #[Reconstructed PDG2011] -0.000770283 tau- anti-nu_tau SLN; #[Reconstructed PDG2011] -# -0.014900000 K_S0 pi- PHSP; #[Reconstructed PDG2011] -0.014600000 K_L0 pi- PHSP; #[Reconstructed PDG2011] -0.000000000 K0 pi- PHSP; #[Reconstructed PDG2011] -# -0.025950843 a_1- K_S0 SVS; #[Reconstructed PDG2011] -0.025950843 a_1- K_L0 SVS; #[Reconstructed PDG2011] -0.000000000 a_1- K0 SVS; #[Reconstructed PDG2011] -# -0.027090862 K'_10 pi- SVS; #[Reconstructed PDG2011] -#0.0115 K_0*0N pi- PHSP; -0.013387523 K*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -# -# the Dalitz mode below includes K*(892)0 pi-, K*(1430)0 pi-, and K*(1680)0 pi- resonances. -0.094000000 K+ pi- pi- D_DALITZ; #[Reconstructed PDG2011] -# the Dalitz mode below includes K0 rho-, and K*(892)0 pi- resonances. -0.069000000 K_S0 pi- pi0 D_DALITZ; #[Reconstructed PDG2011] -0.051539652 K_L0 pi- pi0 D_DALITZ; #[Reconstructed PDG2011] -0.000000000 K0 pi- pi0 D_DALITZ; #[Reconstructed PDG2011] -# -#0.0100 K0 eta pi- PHSP; -0.001247859 K_S0 rho0 pi- PHSP; #[Reconstructed PDG2011] -0.001247859 K_L0 rho0 pi- PHSP; #[Reconstructed PDG2011] -0.000000000 K0 rho0 pi- PHSP; #[Reconstructed PDG2011] -# -0.003851416 K0 omega pi- PHSP; #[Reconstructed PDG2011] -0.007032686 K+ rho- pi- PHSP; #[Reconstructed PDG2011] -0.009274210 K*+ pi- pi- PHSP; #[Reconstructed PDG2011] -0.047187552 K*0 pi0 pi- PHSP; #[Reconstructed PDG2011] -#0.0100 K*0 eta pi- PHSP; -0.001101505 K*0 rho0 pi- PHSP; #[Reconstructed PDG2011] -0.003851416 K*0 omega pi- PHSP; #[Reconstructed PDG2011] -#0.0100 K*+ rho- pi- PHSP; -# -0.008473116 K+ pi- pi- pi0 PHSP; #[Reconstructed PDG2011] -# -0.002472609 K_S0 pi- pi- pi+ PHSP; #[Reconstructed PDG2011] -0.002472609 K_L0 pi- pi- pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 K0 pi- pi- pi+ PHSP; #[Reconstructed PDG2011] -# -#0.0188 K0 pi- pi0 pi0 PHSP; -0.005700000 K+ pi- pi- pi- pi+ PHSP; #[Reconstructed PDG2011] -0.003851416 K+ pi- pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.006701464 K0 pi- pi- pi+ pi0 PHSP; #[Reconstructed PDG2011] -0.002695991 K0 pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -# -0.004600000 K_S0 K_S0 K- PHSP; #[Reconstructed PDG2011] -0.003111944 K_L0 K_L0 K- PHSP; #[Reconstructed PDG2011] -0.000000000 K0 K0 K- PHSP; #[Reconstructed PDG2011] -# -0.004660214 phi pi- SVS; #[Reconstructed PDG2011] -0.023000000 phi pi- pi0 PHSP; #[Reconstructed PDG2011] -# -0.002860000 K_S0 K- PHSP; #[Reconstructed PDG2011] -0.002195307 K_L0 K- PHSP; #[Reconstructed PDG2011] -0.000000000 K0 K- PHSP; #[Reconstructed PDG2011] -# -0.002179902 K*0 K- SVS; #[Reconstructed PDG2011] -# -0.016000000 K*- K_S0 SVS; #[Reconstructed PDG2011] -0.011145999 K*- K_L0 SVS; #[Reconstructed PDG2011] -0.000000000 K*- K0 SVS; #[Reconstructed PDG2011] -# -#0.0180 K*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.002826940 K- K+ pi- PHSP; #[Reconstructed PDG2011] -0.000770283 K- K0 pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K0 pi- PHSP; #[Reconstructed PDG2011] -0.000770283 K*- K+ pi- PHSP; #[Reconstructed PDG2011] -0.000770283 K- K*+ pi- PHSP; #[Reconstructed PDG2011] -0.000770283 K*- K0 pi0 PHSP; #[Reconstructed PDG2011] -0.000770283 K- K*0 pi0 PHSP; #[Reconstructed PDG2011] -0.000770283 K*0 anti-K0 pi- PHSP; #[Reconstructed PDG2011] -0.000770283 K0 anti-K*0 pi- PHSP; #[Reconstructed PDG2011] -# -0.001260000 pi0 pi- PHSP; #[Reconstructed PDG2011] -0.000830000 rho0 pi- SVS; #[Reconstructed PDG2011] -0.002440000 pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.004700000 pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.011600000 pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.003851416 pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.003430000 eta pi- PHSP; #[Reconstructed PDG2011] -0.004400000 eta' pi- PHSP; #[Reconstructed PDG2011] -0.001380000 eta pi- pi0 PHSP; #[Reconstructed PDG2011] -0.002310850 eta pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.001540566 eta pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] -#lange jul22,2002 -0.001660000 pi+ pi- pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -# -# March 2009 New Modes -0.009300000 K*0 a_1- PHSP; #[Reconstructed PDG2011] -0.010545178 K+ K- pi- pi0 PHSP; #[Reconstructed PDG2011] -# -0.001740000 K- K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.001270967 K- K_L0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 K- K0 pi+ pi- PHSP; #[Reconstructed PDG2011] -# -0.002380000 K_S0 K+ pi- pi- PHSP; #[Reconstructed PDG2011] -0.001756246 K_L0 K+ pi- pi- PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K+ pi- pi- PHSP; #[Reconstructed PDG2011] -# -0.000230000 K+ K- pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -# -0.000240000 K+ K- K_S0 pi- PHSP; #[Reconstructed PDG2011] -0.000161759 K+ K- K_L0 pi- PHSP; #[Reconstructed PDG2011] -0.000000000 K+ K- K0 pi- PHSP; #[Reconstructed PDG2011] -# Doubly Cabibbo suppressed modes -0.000237000 K- pi0 PHSP; #[Reconstructed PDG2011] -0.000332000 K- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000089000 K- K+ K- PHSP; #[Reconstructed PDG2011] -0.001720000 K+ rho0 pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001600000 eta' pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000210000 K- rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay K*BR -1.0000 anti-K0 pi0 VSS; -Enddecay -# -# -Decay D0 -# updated according to suggestions by P. Roudeau, -# using PDG2004 measurements and imposing the equality -# of sl partial widths for D+ and D0. -# Include additional decay anti-K0 pi- e+ nu_e , K- pi0 e+ nu_e. -# -0.021700000 K*- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.035500000 K- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000760000 K_1- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.001374504 K_2*- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002890000 pi- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.001900000 rho- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.027000000 anti-K0 pi- e+ nu_e PHOTOS PHSP; #[Reconstructed PDG2011] -0.016000000 K- pi0 e+ nu_e PHOTOS PHSP; #[Reconstructed PDG2011] -# -0.019800000 K*- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.033100000 K- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000815539 K_1- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.001374504 K_2*- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002370000 pi- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002015940 rho- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.001007970 anti-K0 pi- mu+ nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] -0.000549802 K- pi0 mu+ nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] -# -0.038900000 K- pi+ PHSP; #[Reconstructed PDG2011] -# -0.012200000 K_S0 pi0 PHSP; #[Reconstructed PDG2011] -0.010000000 K_L0 pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 pi0 PHSP; #[Reconstructed PDG2011] -# -0.004290000 K_S0 eta PHSP; #[Reconstructed PDG2011] -0.003802795 K_L0 eta PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 eta PHSP; #[Reconstructed PDG2011] -# -0.009300000 K_S0 eta' PHSP; #[Reconstructed PDG2011] -0.008980094 K_L0 eta' PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 eta' PHSP; #[Reconstructed PDG2011] -# -0.011100000 omega K_S0 SVS; #[Reconstructed PDG2011] -0.010904400 omega K_L0 SVS; #[Reconstructed PDG2011] -0.000000000 omega anti-K0 SVS; #[Reconstructed PDG2011] -# -0.001603588 anti-K*0 eta SVS; #[Reconstructed PDG2011] -0.000916336 anti-K*0 eta' SVS; #[Reconstructed PDG2011] -0.078000000 a_1+ K- SVS; #[Reconstructed PDG2011] -0.067625607 K*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.015800000 anti-K*0 rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.011000000 anti-K*0 omega SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -# the Dalitz mode below includes K*bar(892)0 pi0, -# K*(892)- pi+, and K- rho(770)+ resonances -0.139000000 K- pi+ pi0 D_DALITZ; #[Reconstructed PDG2011] -0.006634274 K*BR pi0 SVS; #[Reconstructed PDG2011] -0.016000000 K_1- pi+ SVS; #[Reconstructed PDG2011] -0.006505987 anti-K_10 pi0 SVS; #[Reconstructed PDG2011] -# -# the Dalitz mode below includes K*(892)- pi+ and Kbar0 rho(770)0 resonances -# LHCb PR 09 Apr 2004 split into KS/KL -0.029400000 K_S0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] -0.027856619 K_L0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] -0.000000000 anti-K0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] -# -0.008300000 K_S0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.004425904 K_L0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -# -0.024000000 anti-K*0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.010629499 anti-K*0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.009163361 K*- pi+ pi0 PHSP; #[Reconstructed PDG2011] -0.006231086 K- rho+ pi0 PHSP; #[Reconstructed PDG2011] -0.005305586 K- pi+ rho0 PHSP; #[Reconstructed PDG2011] -0.019000000 K- pi+ omega PHSP; #[Reconstructed PDG2011] -0.009163361 K- pi+ eta PHSP; #[Reconstructed PDG2011] -0.007500000 K- pi+ eta' PHSP; #[Reconstructed PDG2011] -0.013300000 K- pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] -# -0.054000000 K_S0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.010079698 K_L0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -# -# K- pi+ pi0 pi0 is (15 +/- 5)% in the PDG, but we decrease it to -# have everything add to 1 and get enough neutral kaons: -#0.02575 K- pi+ pi0 pi0 PHSP; -# -#0.0143 anti-K0 pi0 pi0 pi0 PHSP; -0.000000000 K- pi+ pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.003482077 K- pi+ pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -# -0.002800000 K_S0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.002684865 K_L0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -# -#0.0638 anti-K0 pi+ pi- pi0 pi0 PHSP; -#0.0192 anti-K0 pi+ pi- pi0 pi0 pi0 PHSP; -# -0.002034266 phi K_S0 SVS; #[Reconstructed PDG2011] -0.002034266 phi K_L0 SVS; #[Reconstructed PDG2011] -0.000000000 phi anti-K0 SVS; #[Reconstructed PDG2011] -# -0.004650000 K_S0 K+ K- PHSP; #[Reconstructed PDG2011] -0.002785662 K_L0 K+ K- PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K+ K- PHSP; #[Reconstructed PDG2011] -# -0.000950000 K_S0 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] -0.003940000 K+ K- PHSP; #[Reconstructed PDG2011] -0.000190000 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] -0.000366534 K_L0 K_L0 PHSP; #[Reconstructed PDG2011] -0.000366534 K*0 anti-K0 SVS; #[Reconstructed PDG2011] -# -0.000091634 anti-K*0 K_S0 SVS; #[Reconstructed PDG2011] -0.000091634 anti-K*0 K_L0 SVS; #[Reconstructed PDG2011] -0.000000000 anti-K*0 K0 SVS; #[Reconstructed PDG2011] -# -0.000485658 K*- K+ SVS; #[Reconstructed PDG2011] -0.001365341 K*+ K- SVS; #[Reconstructed PDG2011] -0.001282871 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000714742 phi pi0 SVS; #[Reconstructed PDG2011] -0.001007970 phi pi+ pi- PHSP; #[Reconstructed PDG2011] -0.002430000 K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.002749008 K+ K- pi0 pi0 PHSP; #[Reconstructed PDG2011] -# -0.001280000 K_S0 K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.001255381 K_L0 K_L0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K0 pi+ pi- PHSP; #[Reconstructed PDG2011] -# -0.001374504 anti-K0 K0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -# -0.001397000 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000800000 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.000640000 eta pi0 PHSP; #[Reconstructed PDG2011] -0.000810000 eta' pi0 PHSP; #[Reconstructed PDG2011] -0.001670000 eta eta PHSP; #[Reconstructed PDG2011] -0.009800000 rho+ pi- SVS; #[Reconstructed PDG2011] -0.004970000 rho- pi+ SVS; #[Reconstructed PDG2011] -0.003730000 rho0 pi0 SVS; #[Reconstructed PDG2011] -0.001209564 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.000091634 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.005620000 pi+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -0.009360000 pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.001510000 pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.005498017 pi+ pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.000420000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -# -# Doubly Cabibbo suppressed decays: -0.000137450 pi- K+ PHSP; #[Reconstructed PDG2011] -0.000128287 pi- K*+ PHSP; #[Reconstructed PDG2011] -0.000274901 pi- K+ pi0 PHSP; #[Reconstructed PDG2011] -0.000247411 K+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -# PR LHCb - 19 Apr. 2004 Add D0 -> mu+ mu- -0.000000000 mu+ mu- PHSP; #[Reconstructed PDG2011] -# -# March 2009 New Modes -0.000140000 phi eta PHSP; #[Reconstructed PDG2011] -0.019000000 anti-K*0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.000220000 K- pi+ pi- pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] -0.000641435 K+ K- pi0 PHSP; #[Reconstructed PDG2011] -0.003100000 K+ K- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.000221000 K+ K- K- pi+ PHSP; #[Reconstructed PDG2011] -# -0.005600000 K_S0 eta pi0 PHSP; #[Reconstructed PDG2011] -0.003665345 K_L0 eta pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 eta pi0 PHSP; #[Reconstructed PDG2011] -# -0.002600000 K_S0 K+ pi- PHSP; #[Reconstructed PDG2011] -0.002382474 K_L0 K+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K+ pi- PHSP; #[Reconstructed PDG2011] -# -0.003500000 K_S0 K- pi+ PHSP; #[Reconstructed PDG2011] -0.003344627 K_L0 K- pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 K0 K- pi+ PHSP; #[Reconstructed PDG2011] -# -0.000310000 K_S0 K_S0 K+ pi- PHSP; #[Reconstructed PDG2011] -0.000293228 K_L0 K_L0 K+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K0 K+ pi- PHSP; #[Reconstructed PDG2011] -# -0.000310000 K_S0 K_S0 K- pi+ PHSP; #[Reconstructed PDG2011] -0.000293228 K_L0 K_L0 K- pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K0 K- pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 K- pi+ pi- e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001820000 rho0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001090000 eta pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001600000 omega pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000450000 eta' pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001260000 eta eta' PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000027000 phi gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000328000 anti-K*0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -# -Decay K*0R -1.0000 K0 pi0 VSS; -Enddecay -# -# -Decay anti-D0 -0.021700000 K*+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.035500000 K+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000760000 K_1+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.001380270 K_2*+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002890000 pi+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.001900000 rho+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.027000000 K0 pi+ e- anti-nu_e PHOTOS PHSP; #[Reconstructed PDG2011] -0.016000000 K+ pi0 e- anti-nu_e PHOTOS PHSP; #[Reconstructed PDG2011] -# -0.019800000 K*+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.033100000 K+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000818960 K_1+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.001380270 K_2*+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002370000 pi+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002024397 rho+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.001012198 K0 pi+ mu- anti-nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] -0.000552108 K+ pi0 mu- anti-nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] -# -0.038900000 K+ pi- PHSP; #[Reconstructed PDG2011] -# -0.012200000 K_S0 pi0 PHSP; #[Reconstructed PDG2011] -0.010000000 K_L0 pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 K0 pi0 PHSP; #[Reconstructed PDG2011] -# -0.004290000 K_S0 eta PHSP; #[Reconstructed PDG2011] -0.003818748 K_L0 eta PHSP; #[Reconstructed PDG2011] -0.000000000 K0 eta PHSP; #[Reconstructed PDG2011] -# -0.009300000 K_S0 eta' PHSP; #[Reconstructed PDG2011] -0.009017767 K_L0 eta' PHSP; #[Reconstructed PDG2011] -0.000000000 K0 eta' PHSP; #[Reconstructed PDG2011] -# -0.011100000 omega K_S0 SVS; #[Reconstructed PDG2011] -0.010950146 omega K_L0 SVS; #[Reconstructed PDG2011] -0.000000000 omega K0 SVS; #[Reconstructed PDG2011] -# -0.001610316 K*0 eta SVS; #[Reconstructed PDG2011] -0.000920180 K*0 eta' SVS; #[Reconstructed PDG2011] -0.078000000 a_1- K+ SVS; #[Reconstructed PDG2011] -0.067909308 K*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.015800000 K*0 rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.011000000 K*0 omega SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -# the Dalitz mode below includes K*(892)0 pi0, K*(892)+ pi-, and K+ rho(770)- resonances -0.139000000 K+ pi- pi0 D_DALITZ; #[Reconstructed PDG2011] -0.006662106 K*0R pi0 SVS; #[Reconstructed PDG2011] -0.016000000 K_1+ pi- SVS; #[Reconstructed PDG2011] -0.006533280 K_10 pi0 SVS; #[Reconstructed PDG2011] -# the Dalitz mode below includes K*(892)+ pi- and K0 rho(770)0 resonances -# LHCb PR 09 Apr 2004, split into KS/KL -0.000000000 K0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] -0.029400000 K_S0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] -0.027973482 K_L0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] -# -0.008300000 K_S0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.004444471 K_L0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 K0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -# -0.024000000 K*0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.010674092 K*0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.009201803 K*+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.006257226 K+ rho- pi0 PHSP; #[Reconstructed PDG2011] -0.005327844 K+ pi- rho0 PHSP; #[Reconstructed PDG2011] -0.019000000 K+ pi- omega PHSP; #[Reconstructed PDG2011] -0.009201803 K+ pi- eta PHSP; #[Reconstructed PDG2011] -0.007500000 K+ pi- eta' PHSP; #[Reconstructed PDG2011] -0.013300000 K+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -# -0.054000000 K_S0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.010121984 K_L0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 K0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -# -# K+ pi- pi0 pi0 is (15 +/- 5)% in the PDG, but we decrease it to -# have everything add to 1 and get enough neutral kaons: -#0.02575 K+ pi- pi0 pi0 PHSP; -# -#0.0143 K0 pi0 pi0 pi0 PHSP; -0.000000000 K+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.003496685 K+ pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -# -0.002800000 K_S0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.002696128 K_L0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 K0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -# -#0.0638 K0 pi- pi+ pi0 pi0 PHSP; -#0.0192 K0 pi- pi+ pi0 pi0 pi0 PHSP; -# -0.002042800 phi K_S0 SVS; #[Reconstructed PDG2011] -0.002042800 phi K_L0 SVS; #[Reconstructed PDG2011] -0.000000000 phi K0 SVS; #[Reconstructed PDG2011] -# -0.004650000 K_S0 K+ K- PHSP; #[Reconstructed PDG2011] -0.002797348 K_L0 K+ K- PHSP; #[Reconstructed PDG2011] -0.000000000 K0 K+ K- PHSP; #[Reconstructed PDG2011] -# -0.000950000 K_S0 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] -0.003940000 K+ K- PHSP; #[Reconstructed PDG2011] -0.000190000 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] -0.000368072 K_L0 K_L0 PHSP; #[Reconstructed PDG2011] -0.000368072 anti-K*0 K0 SVS; #[Reconstructed PDG2011] -# -0.000092018 K*0 K_S0 SVS; #[Reconstructed PDG2011] -0.000092018 K*0 K_L0 SVS; #[Reconstructed PDG2011] -0.000000000 K*0 anti-K0 SVS; #[Reconstructed PDG2011] -# -0.000487696 K*+ K- SVS; #[Reconstructed PDG2011] -0.001371069 K*- K+ SVS; #[Reconstructed PDG2011] -0.001288252 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.000717741 phi pi0 SVS; #[Reconstructed PDG2011] -0.001012198 phi pi+ pi- PHSP; #[Reconstructed PDG2011] -0.002430000 K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.002760541 K+ K- pi0 pi0 PHSP; #[Reconstructed PDG2011] -# -0.001280000 K_S0 K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.001260647 K_L0 K_L0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K0 pi+ pi- PHSP; #[Reconstructed PDG2011] -# -0.001380270 anti-K0 K0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -# -0.001397000 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000800000 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.000640000 eta pi0 PHSP; #[Reconstructed PDG2011] -0.000810000 eta' pi0 PHSP; #[Reconstructed PDG2011] -0.001670000 eta eta PHSP; #[Reconstructed PDG2011] -0.009128189 rho+ pi- SVS; #[Reconstructed PDG2011] -0.004637709 rho- pi+ SVS; #[Reconstructed PDG2011] -0.003730000 rho0 pi0 SVS; #[Reconstructed PDG2011] -0.001214638 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.000092018 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.005620000 pi+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -0.009360000 pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.001510000 pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.005521082 pi+ pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.000420000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -# -# Doubly Cabibbo suppressed decays: -0.000138027 pi+ K- PHSP; #[Reconstructed PDG2011] -0.000128825 pi+ K*- PHSP; #[Reconstructed PDG2011] -0.000276054 pi+ K- pi0 PHSP; #[Reconstructed PDG2011] -0.000248449 K- pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] -# PR LHCb - 19 Apr. 2004 Add anti-D0 -> mu+ mu- -0.000000000 mu- mu+ PHSP; #[Reconstructed PDG2011] -# -# March 2009 New Modes -0.000140000 phi eta PHSP; #[Reconstructed PDG2011] -0.019000000 K*0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.000220000 K+ pi- pi- pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] -0.000644126 K+ K- pi0 PHSP; #[Reconstructed PDG2011] -0.003100000 K+ K- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.000221000 K+ K+ K- pi- PHSP; #[Reconstructed PDG2011] -# -0.005600000 K_S0 eta pi0 PHSP; #[Reconstructed PDG2011] -0.003680721 K_L0 eta pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 K0 eta pi0 PHSP; #[Reconstructed PDG2011] -# -0.002600000 K_S0 K- pi+ PHSP; #[Reconstructed PDG2011] -0.002392469 K_L0 K- pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 K0 K- pi+ PHSP; #[Reconstructed PDG2011] -# -0.003500000 K_S0 K+ pi- PHSP; #[Reconstructed PDG2011] -0.003358658 K_L0 K+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K+ pi- PHSP; #[Reconstructed PDG2011] -# -0.000310000 K_S0 K_S0 K+ pi- PHSP; #[Reconstructed PDG2011] -0.000294458 K_L0 K_L0 K+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K0 K+ pi- PHSP; #[Reconstructed PDG2011] -# -0.000310000 K_S0 K_S0 K- pi+ PHSP; #[Reconstructed PDG2011] -0.000294458 K_L0 K_L0 K- pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K0 K- pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 K+ pi- pi+ e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001820000 rho0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001090000 eta pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001600000 omega pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000450000 eta' pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001260000 eta eta' PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000027000 phi gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000328000 K*0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -# Updated to PDG 2008 -Decay D_s+ -0.024900000 phi e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.026700000 eta e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.009900000 eta' e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002058115 anti-K0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000762265 anti-K*0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.018309605 phi mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.022845082 eta mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.008186726 eta' mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002058115 anti-K0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000762265 anti-K*0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.005800000 mu+ nu_mu PHOTOS SLN; #[Reconstructed PDG2011] -0.031100000 tau+ nu_tau SLN; #[Reconstructed PDG2011] -### Lange Nov14, 2004 - average cleo + babar (prelim) using stat error only.. -0.045000000 phi pi+ SVS; #[Reconstructed PDG2011] -0.015600000 eta pi+ PHSP; #[Reconstructed PDG2011] -0.038000000 eta' pi+ PHSP; #[Reconstructed PDG2011] -0.002300000 omega pi+ SVS; #[Reconstructed PDG2011] -0.000200000 rho0 pi+ SVS; #[Reconstructed PDG2011] -0.000304906 rho+ pi0 SVS; #[Reconstructed PDG2011] -#? -0.000076226 pi+ pi0 PHSP; #[Reconstructed PDG2011] -0.007622650 f_0 pi+ PHSP; #[Reconstructed PDG2011] -0.000914718 f_2 pi+ PHSP; #[Reconstructed PDG2011] -0.084000000 phi rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.089000000 rho+ eta SVS; #[Reconstructed PDG2011] -0.125000000 rho+ eta' SVS; #[Reconstructed PDG2011] -0.010800000 pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] -0.006500000 pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.007622650 phi pi+ pi0 PHSP; #[Reconstructed PDG2011] -0.011433975 eta pi+ pi0 PHSP; #[Reconstructed PDG2011] -0.011433975 eta' pi+ pi0 PHSP; #[Reconstructed PDG2011] -0.012100000 phi pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] -0.003811325 phi pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.003811325 eta pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] -0.003811325 eta pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] -# -0.014900000 K_S0 K+ PHSP; #[Reconstructed PDG2011] -0.011472088 K_L0 K+ PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K+ PHSP; #[Reconstructed PDG2011] -# -0.030490600 anti-K*0 K+ SVS; #[Reconstructed PDG2011] -0.054000000 K*+ anti-K0 SVS; #[Reconstructed PDG2011] -0.072000000 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.002286795 anti-K0 K+ pi0 PHSP; #[Reconstructed PDG2011] -0.000914718 anti-K*0 K+ pi0 PHSP; #[Reconstructed PDG2011] -0.000914718 K*+ anti-K0 pi0 PHSP; #[Reconstructed PDG2011] -0.003049060 anti-K*0 K*+ pi0 PHSP; #[Reconstructed PDG2011] -0.003811325 K+ K- pi+ PHSP; #[Reconstructed PDG2011] -# -0.009600000 K_S0 K+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.007470197 K_L0 K+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K+ pi+ pi- PHSP; #[Reconstructed PDG2011] -# -0.000762265 anti-K0 K+ pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 K+ K- pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] -0.000152453 phi K+ SVS; #[Reconstructed PDG2011] -0.001390000 eta K+ PHSP; #[Reconstructed PDG2011] -0.001600000 eta' K+ PHSP; #[Reconstructed PDG2011] -0.000152453 eta K+ pi0 PHSP; #[Reconstructed PDG2011] -0.000152453 eta K+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000152453 eta' K+ pi0 PHSP; #[Reconstructed PDG2011] -0.000152453 eta' K+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000490000 K+ K- K+ PHSP; #[Reconstructed PDG2011] -# -0.001200000 K_S0 pi+ PHSP; #[Reconstructed PDG2011] -0.000968077 K_L0 pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 K0 pi+ PHSP; #[Reconstructed PDG2011] -# -0.001143397 rho+ K0 SVS; #[Reconstructed PDG2011] -0.002700000 rho0 K+ SVS; #[Reconstructed PDG2011] -0.010000000 K0 pi+ pi0 PHSP; #[Reconstructed PDG2011] -0.001905662 a_1+ K0 SVS; #[Reconstructed PDG2011] -0.006021893 K*0 pi+ SVS; #[Reconstructed PDG2011] -0.003811325 K*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.003811325 K*0 pi+ pi0 PHSP; #[Reconstructed PDG2011] -# -# March 2009 New Modes -0.000820000 K+ pi0 PHSP; #[Reconstructed PDG2011] -0.004200000 K+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.008000000 pi+ pi+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -0.049000000 pi+ pi+ pi+ pi- pi- pi0 PHSP; #[Reconstructed PDG2011] -0.001300000 p+ anti-n0 PHSP; #[Reconstructed PDG2011] -# -0.000840000 K_S0 K_S0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000686038 K_L0 K_L0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] -# -0.002900000 K_S0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.002424003 K_L0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] -# Doubly Cabibbo suppressed -0.000129000 K+ K+ pi- PHSP; #[Reconstructed PDG2011] -0.003700000 K0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001800000 K*0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000000 K+ K- pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.028000000 omega pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.016000000 omega pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -# Updated to PDG 2008 -Decay D_s- -0.024900000 phi e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.026700000 eta e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.009900000 eta' e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002058115 K0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000762265 K*0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] -0.018309605 phi mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.022845082 eta mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.008186726 eta' mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.002058115 K0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.000762265 K*0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] -0.005800000 mu- anti-nu_mu PHOTOS SLN; #[Reconstructed PDG2011] -0.031100000 tau- anti-nu_tau SLN; #[Reconstructed PDG2011] -0.045000000 phi pi- SVS; #[Reconstructed PDG2011] -0.015600000 eta pi- PHSP; #[Reconstructed PDG2011] -0.038000000 eta' pi- PHSP; #[Reconstructed PDG2011] -0.002300000 omega pi- SVS; #[Reconstructed PDG2011] -0.000200000 rho0 pi- SVS; #[Reconstructed PDG2011] -0.000304906 rho- pi0 SVS; #[Reconstructed PDG2011] -0.000076226 pi- pi0 PHSP; #[Reconstructed PDG2011] -0.007622650 f_0 pi- PHSP; #[Reconstructed PDG2011] -0.000914718 f_2 pi- PHSP; #[Reconstructed PDG2011] -0.084000000 phi rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.089000000 rho- eta SVS; #[Reconstructed PDG2011] -0.125000000 rho- eta' SVS; #[Reconstructed PDG2011] -0.010800000 pi- pi- pi+ PHSP; #[Reconstructed PDG2011] -0.006500000 pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.007622650 phi pi- pi0 PHSP; #[Reconstructed PDG2011] -0.011433975 eta pi- pi0 PHSP; #[Reconstructed PDG2011] -0.011433975 eta' pi- pi0 PHSP; #[Reconstructed PDG2011] -0.012100000 phi pi- pi- pi+ PHSP; #[Reconstructed PDG2011] -0.003811325 phi pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.003811325 eta pi- pi- pi+ PHSP; #[Reconstructed PDG2011] -0.003811325 eta pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] -# -0.014900000 K_S0 K- PHSP; #[Reconstructed PDG2011] -0.011472088 K_L0 K- PHSP; #[Reconstructed PDG2011] -0.000000000 K0 K- PHSP; #[Reconstructed PDG2011] -# -0.030490600 K*0 K- SVS; #[Reconstructed PDG2011] -0.054000000 K*- K0 SVS; #[Reconstructed PDG2011] -0.072000000 K*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.002286795 K0 K- pi0 PHSP; #[Reconstructed PDG2011] -0.000914718 K*0 K- pi0 PHSP; #[Reconstructed PDG2011] -0.000914718 K*- K0 pi0 PHSP; #[Reconstructed PDG2011] -0.003049060 K*0 K*- pi0 PHSP; #[Reconstructed PDG2011] -0.003811325 K+ K- pi- PHSP; #[Reconstructed PDG2011] -# -0.009600000 K_S0 K- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.007470197 K_L0 K- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 K0 K- pi+ pi- PHSP; #[Reconstructed PDG2011] -# -0.000762265 K0 K- pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 K- K+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000152453 phi K- SVS; #[Reconstructed PDG2011] -0.001390000 eta K- PHSP; #[Reconstructed PDG2011] -0.001600000 eta' K- PHSP; #[Reconstructed PDG2011] -0.000152453 eta K- pi0 PHSP; #[Reconstructed PDG2011] -0.000152453 eta K- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000152453 eta' K- pi0 PHSP; #[Reconstructed PDG2011] -0.000152453 eta' K- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000490000 K- K- K+ PHSP; #[Reconstructed PDG2011] -# -0.001200000 K_S0 pi- PHSP; #[Reconstructed PDG2011] -0.000968077 K_L0 pi- PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 pi- PHSP; #[Reconstructed PDG2011] -# -0.001143397 rho- anti-K0 SVS; #[Reconstructed PDG2011] -0.002700000 rho0 K- SVS; #[Reconstructed PDG2011] -0.010000000 anti-K0 pi- pi0 PHSP; #[Reconstructed PDG2011] -0.001905662 a_1- anti-K0 SVS; #[Reconstructed PDG2011] -0.006021893 anti-K*0 pi- SVS; #[Reconstructed PDG2011] -0.003811325 anti-K*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.003811325 anti-K*0 pi- pi0 PHSP; #[Reconstructed PDG2011] -# -# March 2009 New Modes -0.000820000 K- pi0 PHSP; #[Reconstructed PDG2011] -0.004200000 K- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.008000000 pi+ pi+ pi- pi- pi- PHSP; #[Reconstructed PDG2011] -0.049000000 pi+ pi+ pi- pi- pi- pi0 PHSP; #[Reconstructed PDG2011] -0.001300000 anti-p- n0 PHSP; #[Reconstructed PDG2011] -# -0.000840000 K_S0 K_S0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -0.000686038 K_L0 K_L0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -0.000000000 anti-K0 K0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -# -0.002900000 K_S0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -0.002424003 K_L0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -0.000000000 K0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] -# Doubly Cabibbo suppressed -0.000129000 K- K- pi+ PHSP; #[Reconstructed PDG2011] -0.003700000 anti-K0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001800000 anti-K*0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000000 K- K+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.028000000 omega pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.016000000 omega pi- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -# D** -# -Decay D_0*+ -0.3333 D+ pi0 PHSP; -0.6667 D0 pi+ PHSP; -Enddecay -Decay D_0*- -0.3333 D- pi0 PHSP; -0.6667 anti-D0 pi- PHSP; -Enddecay -Decay D_0*0 -0.3333 D0 pi0 PHSP; -0.6667 D+ pi- PHSP; -Enddecay -Decay anti-D_0*0 -0.3333 anti-D0 pi0 PHSP; -0.6667 D- pi+ PHSP; -Enddecay -# - -SetLineshapePW D_1+ D*+ pi0 2 -SetLineshapePW D_1+ D*0 pi+ 2 -SetLineshapePW D_1- D*- pi0 2 -SetLineshapePW D_1- anti-D*0 pi- 2 -SetLineshapePW D_10 D*0 pi0 2 -SetLineshapePW D_10 D*+ pi- 2 -SetLineshapePW anti-D_10 anti-D*0 pi0 2 -SetLineshapePW anti-D_10 D*- pi+ 2 - -Decay D_1+ -0.3333 D*+ pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.6667 D*0 pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -Decay D_1- -0.3333 D*- pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.6667 anti-D*0 pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -Decay D_10 -0.3333 D*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.6667 D*+ pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -Decay anti-D_10 -0.3333 anti-D*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.6667 D*- pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -# -Decay D'_1+ -0.3333 D*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.6667 D*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay D'_1- -0.3333 D*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.6667 anti-D*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay D'_10 -0.6667 D*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3333 D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay anti-D'_10 -0.3333 anti-D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.6667 D*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# - -SetLineshapePW D_2*+ D*+ pi0 2 -SetLineshapePW D_2*+ D*0 pi+ 2 -SetLineshapePW D_2*- D*- pi0 2 -SetLineshapePW D_2*- anti-D*0 pi- 2 -SetLineshapePW D_2*0 D*0 pi0 2 -SetLineshapePW D_2*0 D*+ pi- 2 -SetLineshapePW anti-D_2*0 anti-D*0 pi0 2 -SetLineshapePW anti-D_2*0 D*- pi+ 2 - -Decay D_2*+ -0.1030 D*+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.2090 D*0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.2290 D+ pi0 TSS; -0.4590 D0 pi+ TSS; -Enddecay -Decay D_2*- -0.1030 D*- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.2090 anti-D*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.2290 D- pi0 TSS; -0.4590 anti-D0 pi- TSS; -Enddecay -Decay D_2*0 -0.2090 D*+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.1030 D*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.2290 D0 pi0 TSS; -0.4590 D+ pi- TSS; -Enddecay -Decay anti-D_2*0 -0.1030 anti-D*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.2090 D*- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.2290 anti-D0 pi0 TSS; -0.4590 D- pi+ TSS; -Enddecay -# -# D_s ** -# -Decay D_s0*+ -# 0.5000 D+ K0 PHSP; -# 0.5000 D0 K+ PHSP; -1.000 D_s+ pi0 PHSP; -Enddecay -Decay D_s0*- -# 0.5000 D- anti-K0 PHSP; -# 0.5000 anti-D0 K- PHSP; -1.000 D_s- pi0 PHSP; -Enddecay -Decay D'_s1+ -0.5000 D*+ K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.5000 D*0 K+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.0000 gamma D_s*+ PHSP; -0.0000 gamma D_s+ PHSP; -Enddecay -Decay D'_s1- -0.5000 D*- anti-K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.5000 anti-D*0 K- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -0.0000 gamma D_s*- PHSP; -0.0000 gamma D_s- PHSP; -Enddecay -Decay D_s1+ -0.80000 D_s*+ pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.20000 D_s+ gamma VSP_PWAVE; -Enddecay -Decay D_s1- -0.80000 D_s*- pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.20000 D_s- gamma VSP_PWAVE; -Enddecay -Decay D_s2*+ -0.0500 D*+ K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0500 D*0 K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.4300 D+ K0 TSS; -0.4700 D0 K+ TSS; -Enddecay -Decay D_s2*- -0.0500 D*- anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0500 anti-D*0 K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.4300 D- anti-K0 TSS; -0.4700 anti-D0 K- TSS; -Enddecay -# -# -# Charm Mesons: Radially Excited States -# -Decay D(2S)0 -0.6667 D*+ pi- SVS; -0.3333 D*0 pi0 SVS; -Enddecay -Decay anti-D(2S)0 -0.3333 anti-D*0 pi0 SVS; -0.6667 D*- pi+ SVS; -Enddecay -Decay D(2S)+ -0.3333 D*+ pi0 SVS; -0.6667 D*0 pi+ SVS; -Enddecay -Decay D(2S)- -0.3333 D*- pi0 SVS; -0.6667 anti-D*0 pi- SVS; -Enddecay -Decay D*(2S)0 -0.3333 D*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1667 D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1667 D0 pi0 VSS; -0.3333 D+ pi- VSS; -Enddecay -Decay anti-D*(2S)0 -0.1667 anti-D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3333 D*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1667 anti-D0 pi0 VSS; -0.3333 D- pi+ VSS; -Enddecay -Decay D*(2S)+ -0.1667 D*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3333 D*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1667 D+ pi0 VSS; -0.3333 D0 pi+ VSS; -Enddecay -Decay D*(2S)- -0.1667 D*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3333 anti-D*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1667 D- pi0 VSS; -0.3333 anti-D0 pi- VSS; -Enddecay -# -# -# Strange Mesons updated to PDG 2008 -# -# -Decay K_S0 -0.691321852 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.306221852 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.000000201 pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001722185 pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000042831 pi+ pi- e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000025 pi0 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000002399 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000344328 pi+ e- nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000344328 pi- e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -# K_L0 is decayed in GEANT -# -Decay K0 -0.500 K_L0 PHSP; -0.500 K_S0 PHSP; -Enddecay -Decay anti-K0 -0.500 K_L0 PHSP; -0.500 K_S0 PHSP; -Enddecay -# -Decay K*0 -0.6657 K+ pi- VSS; -0.3323 K0 pi0 VSS; -0.0020 K0 gamma VSP_PWAVE; -Enddecay -# -Decay anti-K*0 -0.6657 K- pi+ VSS; -0.3323 anti-K0 pi0 VSS; -0.0020 anti-K0 gamma VSP_PWAVE; -Enddecay -# -Decay K*+ -0.6657 K0 pi+ VSS; -0.3323 K+ pi0 VSS; -0.0020 K+ gamma VSP_PWAVE; -Enddecay -# -Decay K*- -0.6657 anti-K0 pi- VSS; -0.3323 K- pi0 VSS; -0.0020 K- gamma VSP_PWAVE; -Enddecay -# -# The decays below are for particle aliases and used when -# generating CP violating decays that depends on the decay -# of the neutral K* -# -Decay K*L -1.0000 pi0 K_L0 VSS; -Enddecay -Decay K*S -1.0000 pi0 K_S0 VSS; -Enddecay -Decay K*BL -1.0000 pi0 K_L0 VSS; -Enddecay -Decay K*BS -1.0000 pi0 K_S0 VSS; -Enddecay -Decay K*0T -1.0000 pi- K+ VSS; -Enddecay -Decay anti-K*0T -1.0000 pi+ K- VSS; -Enddecay -# -# -Decay K_0*+ -0.6667 K0 pi+ PHSP; -0.3333 K+ pi0 PHSP; -Enddecay -# -Decay K_0*- -0.6667 anti-K0 pi- PHSP; -0.3333 K- pi0 PHSP; -Enddecay -# -Decay K_0*0 -0.6667 K+ pi- PHSP; -0.3333 K0 pi0 PHSP; -Enddecay -# -Decay K_0*0N -1.0000 K0 pi0 PHSP; -Enddecay -# -Decay anti-K_0*0 -0.6667 K- pi+ PHSP; -0.3333 anti-K0 pi0 PHSP; -Enddecay -# -Decay anti-K_0*0N -1.0000 anti-K0 pi0 PHSP; -Enddecay -# -Decay K_10 -0.2800 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1400 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1067 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0533 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -#To large masses can cause infinit loops -0.1100 omega K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1444 K0 pi+ pi- PHSP; -0.1244 K+ pi- pi0 PHSP; -0.0412 K0 pi0 pi0 PHSP; -Enddecay -# -Decay anti-K_10 -0.2800 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1400 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1067 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0533 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -#To large masses can cause infinit loops -0.1100 omega anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1444 anti-K0 pi+ pi- PHSP; -0.1244 K- pi+ pi0 PHSP; -0.0412 anti-K0 pi0 pi0 PHSP; -Enddecay -# -Decay K_1+ -0.2800 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1400 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1067 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0533 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -#To large masses can cause infinit loops -0.1100 omega K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1444 K+ pi+ pi- PHSP; -0.1244 K0 pi+ pi0 PHSP; -0.0412 K+ pi0 pi0 PHSP; -Enddecay -# -Decay K_1- -0.2800 rho- anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1400 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1067 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0533 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -#To large masses can cause infinit loops -0.1100 omega K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1444 K- pi+ pi- PHSP; -0.1244 anti-K0 pi- pi0 PHSP; -0.0412 K- pi0 pi0 PHSP; -Enddecay -# -Decay K'_1+ -0.6300 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3100 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0200 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 omega K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0133 K+ pi+ pi- PHSP; -0.0067 K+ pi0 pi0 PHSP; -Enddecay -# -Decay K'_1- -0.6300 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3100 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0200 rho- anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 omega K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0133 K- pi+ pi- PHSP; -0.0067 K- pi0 pi0 PHSP; -Enddecay -# -Decay K'_10 -0.6300 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3100 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0200 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 omega K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0133 K0 pi+ pi- PHSP; -0.0067 K0 pi0 pi0 PHSP; -Enddecay -# -Decay anti-K'_10 -0.6300 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3100 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0200 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0100 omega anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0133 anti-K0 pi+ pi- PHSP; -0.0067 anti-K0 pi0 pi0 PHSP; -Enddecay -# -Decay K_2*+ -0.3340 K0 pi+ TSS; -0.1670 K+ pi0 TSS; -0.1645 K*0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0835 K*+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0450 K*0 pi+ pi0 PHSP; -0.0450 K*+ pi+ pi- PHSP; -0.0450 K*+ pi0 pi0 PHSP; -0.0580 rho+ K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 rho0 K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 omega K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay -# -Decay K_2*- -0.3340 anti-K0 pi- TSS; -0.1670 K- pi0 TSS; -0.1645 anti-K*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0835 K*- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0450 anti-K*0 pi- pi0 PHSP; -0.0450 K*- pi+ pi- PHSP; -0.0450 K*- pi0 pi0 PHSP; -0.0580 rho- K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 rho0 K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 omega K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay -# -Decay K_2*0 -0.3340 K+ pi- TSS; -0.1670 K0 pi0 TSS; -0.1645 K*+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0835 K*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0450 K*0 pi+ pi- PHSP; -0.0450 K*0 pi0 pi0 PHSP; -0.0450 K*+ pi- pi0 PHSP; -0.0580 rho- K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 rho0 K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 omega K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay -# -Decay anti-K_2*0 -0.3340 K- pi+ TSS; -0.1670 anti-K0 pi0 TSS; -0.1645 K*- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0835 anti-K*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0450 anti-K*0 pi+ pi- PHSP; -0.0450 anti-K*0 pi0 pi0 PHSP; -0.0450 K*- pi+ pi0 PHSP; -0.0580 rho+ K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 rho0 anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0290 omega anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay - - - - -# Decay K*(1410) -Decay K'*0 -0.0467 K+ pi- VSS; -0.0233 K0 pi0 VSS; -0.5760 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.2880 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0440 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0220 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay anti-K'*0 -0.0467 K- pi+ VSS; -0.0233 anti-K0 pi0 VSS; -0.5760 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.2880 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0440 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0220 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay K'*+ -0.0467 K0 pi+ VSS; -0.0233 K+ pi0 VSS; -0.5760 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.2880 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0440 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0220 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay K'*- -0.0467 anti-K0 pi- VSS; -0.0233 K- pi0 VSS; -0.5760 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.2880 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0440 rho- K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0220 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# - - -# Decay K*(1680) -Decay K''*0 -0.2580 K+ pi- VSS; -0.1290 K0 pi0 VSS; -0.2093 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1047 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1993 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0997 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay anti-K''*0 -0.2580 K- pi+ VSS; -0.1290 anti-K0 pi0 VSS; -0.2093 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1047 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1993 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0997 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay K''*+ -0.2580 K0 pi+ VSS; -0.1290 K+ pi0 VSS; -0.2093 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1047 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1993 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0997 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay K''*- -0.2580 anti-K0 pi- VSS; -0.1290 K- pi0 VSS; -0.2093 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1047 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1993 rho- K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0997 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay - -Decay Xsd -1.00000 d anti-s PYTHIA 11; -Enddecay - -Decay anti-Xsd -1.00000 anti-d s PYTHIA 11; -Enddecay - -Decay Xsu -1.00000 u anti-s PYTHIA 11; -Enddecay - -Decay anti-Xsu -1.00000 anti-u s PYTHIA 11; -Enddecay - -# Xss decays can be uncommented when Jst74/lucomp.F recognizes Xss -Decay Xss -1.00000 s anti-s PYTHIA 11; -Enddecay - -Decay anti-Xss -1.00000 anti-s s PYTHIA 11; -Enddecay - -# -# Light Mesons Updated to PDG 2008 -# -Decay pi0 -0.988228297 gamma gamma PHSP; #[Reconstructed PDG2011] -0.011738247 e+ e- gamma PI0_DALITZ; #[Reconstructed PDG2011] -0.000033392 e+ e+ e- e- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000065 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay eta -0.393100000 gamma gamma PHSP; #[Reconstructed PDG2011] -0.325700000 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.227400000 pi- pi+ pi0 ETA_DALITZ; #[Reconstructed PDG2011] -0.046000000 gamma pi- pi+ PHSP; #[Reconstructed PDG2011] -0.007000000 gamma e+ e- PHSP; #[Reconstructed PDG2011] -0.000310000 gamma mu+ mu- PHSP; #[Reconstructed PDG2011] -0.000270000 gamma gamma pi0 PHSP; #[Reconstructed PDG2011] -0.000214200 pi+ pi- e+ e- PHSP; #[Reconstructed PDG2011] -0.000005800 mu+ mu- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay rho0 -1.000 pi+ pi- VSS; -Enddecay -Decay rho+ -1.000 pi+ pi0 VSS; -Enddecay -Decay rho- -1.000 pi- pi0 VSS; -Enddecay -# -Decay omega -0.892000000 pi- pi+ pi0 OMEGA_DALITZ; #[Reconstructed PDG2011] -0.082800000 pi0 gamma VSP_PWAVE; #[Reconstructed PDG2011] -0.015300000 pi- pi+ VSS; #[Reconstructed PDG2011] -0.000460000 eta gamma VSP_PWAVE; #[Reconstructed PDG2011] -0.000770000 pi0 e+ e- PHOTOS PHSP; #[Reconstructed PDG2011] -0.000130000 pi0 mu+ mu- PHOTOS PHSP; #[Reconstructed PDG2011] -0.00150 pi+ pi- gamma PHSP; -0.000066000 pi0 pi0 gamma PHSP; #[Reconstructed PDG2011] -0.00050 pi+ pi- pi+ pi- PHSP; -0.000072800 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000090000 mu+ mu- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay eta' -0.432000000 pi+ pi- eta PHSP; #[Reconstructed PDG2011] -0.217000000 pi0 pi0 eta PHSP; #[Reconstructed PDG2011] -0.293511000 rho0 gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.027500000 omega gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] -0.022200000 gamma gamma PHSP; #[Reconstructed PDG2011] -0.001680000 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.000109000 gamma mu- mu+ PHOTOS PHSP; #[Reconstructed PDG2011] -0.003600000 pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.002400000 pi+ pi- e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay phi -0.489000000 K+ K- VSS; #[Reconstructed PDG2011] -0.342000000 K_L0 K_S0 VSS; #[Reconstructed PDG2011] -0.0425 rho+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0425 rho0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0425 rho- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0250 pi+ pi- pi0 PHSP; -0.013090000 eta gamma VSP_PWAVE; #[Reconstructed PDG2011] -0.000687600 pi0 gamma VSP_PWAVE; #[Reconstructed PDG2011] -0.000295400 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] -0.000287000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] -0.000113000 pi0 pi0 gamma PHSP; #[Reconstructed PDG2011] -0.000115000 eta e+ e- PHSP; #[Reconstructed PDG2011] -0.000322000 f_0 gamma PHSP; #[Reconstructed PDG2011] -0.000074000 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000047000 omega pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000041000 pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000004000 pi+ pi- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000011200 pi0 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000072700 pi0 eta gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000062500 eta' gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000014000 mu+ mu- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay a_1+ -0.4920 rho0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.5080 rho+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay a_10 -0.5000 rho- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.5000 rho+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay a_1- -0.4920 rho0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.5080 rho- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay a_2+ -0.3500 rho0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.3500 rho+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.1430 eta pi+ TSS; -0.1000 omega pi+ pi0 PHSP; -0.0490 anti-K0 K+ TSS; -0.0027 pi+ gamma PHSP; -0.0053 eta' pi+ TSS; -Enddecay -# -Decay a_2- -0.3500 rho0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.3500 rho- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.1430 eta pi- TSS; -0.1000 omega pi- pi0 PHSP; -0.0490 anti-K0 K- TSS; -0.0027 pi- gamma PHSP; -0.0053 eta' pi- TSS; -Enddecay -# -Decay a_20 -0.3500 rho+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.3500 rho- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.1430 eta pi0 TSS; -0.1000 omega pi+ pi- PHSP; -0.0245 K+ K- TSS; -0.01225 K_L0 K_L0 TSS; -0.01225 K_S0 K_S0 TSS; -0.0027 pi0 gamma PHSP; -0.0053 eta' pi0 TSS; -Enddecay -# -Decay b_1+ -0.9984 omega pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0016 pi+ gamma VSP_PWAVE; -Enddecay -Decay b_1- -0.9984 omega pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0016 pi- gamma VSP_PWAVE; -Enddecay -Decay b_10 -0.9984 omega pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0016 pi0 gamma VSP_PWAVE; -Enddecay -# -Decay a_00 -0.9000 eta pi0 PHSP; -0.0500 K+ K- PHSP; -0.0250 K_S0 K_S0 PHSP; -0.0250 K_L0 K_L0 PHSP; -Enddecay -Decay a_0+ -0.9000 eta pi+ PHSP; -0.1000 anti-K0 K+ PHSP; -Enddecay -Decay a_0- -0.9000 eta pi- PHSP; -0.1000 K0 K- PHSP; -Enddecay -# -Decay f_0 -0.6667 pi+ pi- PHSP; -0.3333 pi0 pi0 PHSP; -#0.1100 K+ K- PHSP; -#0.0550 K_S0 K_S0 PHSP; -#0.0550 K_L0 K_L0 PHSP; -Enddecay -# -Decay f'_0 -0.5200 pi+ pi- PHSP; -0.2600 pi0 pi0 PHSP; -0.0750 pi+ pi+ pi- pi- PHSP; -0.0750 pi+ pi- pi0 pi0 PHSP; -0.0350 K+ K- PHSP; -0.0175 K_S0 K_S0 PHSP; -0.0175 K_L0 K_L0 PHSP; -Enddecay -# -Decay f_1 -0.110000000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.043364159 rho0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.043442860 rho+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.043442860 rho- pi+ pi0 PHSP; #[Reconstructed PDG2011] -0.094440999 a_00 pi0 VSS; #[Reconstructed PDG2011] -0.094440999 a_0+ pi- VSS; #[Reconstructed PDG2011] -0.094440999 a_0- pi+ VSS; #[Reconstructed PDG2011] -0.086570916 eta pi+ pi- PHSP; #[Reconstructed PDG2011] -0.043285458 eta pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.020226114 K+ K- pi0 PHSP; #[Reconstructed PDG2011] -0.010152407 K0 anti-K0 pi0 PHSP; #[Reconstructed PDG2011] -0.020226114 anti-K0 K+ pi- PHSP; #[Reconstructed PDG2011] -0.020226114 K0 K- pi+ PHSP; #[Reconstructed PDG2011] -0.055000000 gamma rho0 PHSP; #[Reconstructed PDG2011] -0.220000000 pi0 pi0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000000 pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000740000 phi gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay f'_1 -0.2500 K+ K- pi0 PHSP; -0.2500 K0 anti-K0 pi0 PHSP; -0.2500 anti-K0 K+ pi- PHSP; -0.2500 K0 K- pi+ PHSP; -Enddecay -# -Decay f_2 -0.5650 pi+ pi- TSS; -0.2820 pi0 pi0 TSS; -0.028000000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.071000000 pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.003000000 pi0 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.0230 K+ K- TSS; -0.0115 K_S0 K_S0 TSS; -0.0115 K_L0 K_L0 TSS; -0.004000000 eta eta TSS; #[Reconstructed PDG2011] -0.000016400 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay f_0(1500) -0.019000000 eta eta' PHSP; #[Reconstructed PDG2011] -0.051000000 eta eta PHSP; #[Reconstructed PDG2011] -0.1410 pi0 pi0 pi0 pi0 PHSP; -0.3540 pi+ pi- pi+ pi- PHSP; -0.2330 pi+ pi- PHSP; -0.1160 pi0 pi0 PHSP; -0.0430 K+ K- PHSP; -0.0215 K_S0 K_S0 PHSP; -0.0215 K_L0 K_L0 PHSP; -Enddecay -# -Decay f'_2 -0.443904021 K+ K- TSS; #[Reconstructed PDG2011] -0.221952010 K_S0 K_S0 TSS; #[Reconstructed PDG2011] -0.221952010 K_L0 K_L0 TSS; #[Reconstructed PDG2011] -0.104000000 eta eta TSS; #[Reconstructed PDG2011] -0.005493862 pi+ pi- TSS; #[Reconstructed PDG2011] -0.002696987 pi0 pi0 TSS; #[Reconstructed PDG2011] -0.000001110 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay h_1 -0.3333 rho+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3333 rho- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3334 rho0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay h'_1 -0.2500 K*+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.2500 K*- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.2500 anti-K*0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.2500 K*0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# -Decay rho(2S)+ -0.4000 pi+ pi0 PHSP; -0.4000 pi+ pi+ pi- pi0 PHSP; -0.2000 pi+ pi0 pi0 pi0 PHSP; -Enddecay -Decay rho(2S)- -0.4000 pi- pi0 PHSP; -0.4000 pi- pi+ pi- pi0 PHSP; -0.2000 pi- pi0 pi0 pi0 PHSP; -Enddecay -Decay rho(2S)0 -0.4000 pi+ pi- PHSP; -0.3500 pi+ pi- pi+ pi- PHSP; -0.1500 pi+ pi- pi0 pi0 PHSP; -0.1000 pi0 pi0 pi0 pi0 PHSP; -Enddecay -Decay phi(1680) -0.08 pi+ pi- PHSP; -0.05 pi+ pi+ pi- pi- PHSP; -0.10 pi0 pi+ pi- PHSP; -0.10 pi0 pi+ pi+ pi- pi- PHSP; -0.12 pi0 pi0 pi+ pi- PHSP; -0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.05 pi0 pi0 pi0 pi+ pi- PHSP; -0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.04 K+ K- pi+ pi- PHSP; -0.02 K0 K- pi+ PHSP; -0.02 anti-K0 K+ pi- PHSP; -0.02 K0 K- pi+ pi+ pi- PHSP; -0.02 anti-K0 K+ pi- pi- pi+ PHSP; -0.02 K0 K- pi0 pi+ PHSP; -0.02 anti-K0 K+ pi0 pi- PHSP; -0.02 eta pi0 pi+ pi- PHSP; -0.01 eta rho- pi0 pi+ PHSP; -0.01 eta rho+ pi0 pi- PHSP; -Enddecay -Decay rho(3S)0 -0.08 pi+ pi- PHSP; -0.05 pi+ pi+ pi- pi- PHSP; -0.10 pi0 pi+ pi- PHSP; -0.10 pi0 pi+ pi+ pi- pi- PHSP; -0.12 pi0 pi0 pi+ pi- PHSP; -0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.05 pi0 pi0 pi0 pi+ pi- PHSP; -0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.04 K+ K- pi+ pi- PHSP; -0.02 K0 K- pi+ PHSP; -0.02 anti-K0 K+ pi- PHSP; -0.02 K0 K- pi+ pi+ pi- PHSP; -0.02 anti-K0 K+ pi- pi- pi+ PHSP; -0.02 K0 K- pi0 pi+ PHSP; -0.02 anti-K0 K+ pi0 pi- PHSP; -0.02 eta pi0 pi+ pi- PHSP; -0.01 eta rho- pi0 pi+ PHSP; -0.01 eta rho+ pi0 pi- PHSP; -Enddecay -Decay omega(1650) -0.08 pi+ pi- PHSP; -0.05 pi+ pi+ pi- pi- PHSP; -0.10 pi0 pi+ pi- PHSP; -0.10 pi0 pi+ pi+ pi- pi- PHSP; -0.12 pi0 pi0 pi+ pi- PHSP; -0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.05 pi0 pi0 pi0 pi+ pi- PHSP; -0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.04 K+ K- pi+ pi- PHSP; -0.02 K0 K- pi+ PHSP; -0.02 anti-K0 K+ pi- PHSP; -0.02 K0 K- pi+ pi+ pi- PHSP; -0.02 anti-K0 K+ pi- pi- pi+ PHSP; -0.02 K0 K- pi0 pi+ PHSP; -0.02 anti-K0 K+ pi0 pi- PHSP; -0.02 eta pi0 pi+ pi- PHSP; -0.01 eta rho- pi0 pi+ PHSP; -0.01 eta rho+ pi0 pi- PHSP; -Enddecay -#Decay rho(1900) -#0.08 pi+ pi- PHSP; -#0.05 pi+ pi+ pi- pi- PHSP; -#0.10 pi0 pi+ pi- PHSP; -#0.10 pi0 pi+ pi+ pi- pi- PHSP; -#0.12 pi0 pi0 pi+ pi- PHSP; -#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.05 pi0 pi0 pi0 pi+ pi- PHSP; -#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.04 K+ K- pi+ pi- PHSP; -#0.02 K0 K- pi+ PHSP; -#0.02 anti-K0 K+ pi- PHSP; -#0.02 K0 K- pi+ pi+ pi- PHSP; -#0.02 anti-K0 K+ pi- pi- pi+ PHSP; -#0.02 K0 K- pi0 pi+ PHSP; -#0.02 anti-K0 K+ pi0 pi- PHSP; -#0.02 eta pi0 pi+ pi- PHSP; -#0.01 eta rho- pi0 pi+ PHSP; -#0.01 eta rho+ pi0 pi- PHSP; -#Enddecay -Decay omega(2S) -0.08 pi+ pi- PHSP; -0.05 pi+ pi+ pi- pi- PHSP; -0.10 pi0 pi+ pi- PHSP; -0.10 pi0 pi+ pi+ pi- pi- PHSP; -0.12 pi0 pi0 pi+ pi- PHSP; -0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.05 pi0 pi0 pi0 pi+ pi- PHSP; -0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -0.04 K+ K- pi+ pi- PHSP; -0.02 K0 K- pi+ PHSP; -0.02 anti-K0 K+ pi- PHSP; -0.02 K0 K- pi+ pi+ pi- PHSP; -0.02 anti-K0 K+ pi- pi- pi+ PHSP; -0.02 K0 K- pi0 pi+ PHSP; -0.02 anti-K0 K+ pi0 pi- PHSP; -0.02 eta pi0 pi+ pi- PHSP; -0.01 eta rho- pi0 pi+ PHSP; -0.01 eta rho+ pi0 pi- PHSP; -Enddecay -#Decay rho(2150) -#0.08 pi+ pi- PHSP; -#0.05 pi+ pi+ pi- pi- PHSP; -#0.10 pi0 pi+ pi- PHSP; -#0.10 pi0 pi+ pi+ pi- pi- PHSP; -#0.12 pi0 pi0 pi+ pi- PHSP; -#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.05 pi0 pi0 pi0 pi+ pi- PHSP; -#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.04 K+ K- pi+ pi- PHSP; -#0.02 K0 K- pi+ PHSP; -#0.02 anti-K0 K+ pi- PHSP; -#0.02 K0 K- pi+ pi+ pi- PHSP; -#0.02 anti-K0 K+ pi- pi- pi+ PHSP; -#0.02 K0 K- pi0 pi+ PHSP; -#0.02 anti-K0 K+ pi0 pi- PHSP; -#0.02 eta pi0 pi+ pi- PHSP; -#0.01 eta rho- pi0 pi+ PHSP; -#0.01 eta rho+ pi0 pi- PHSP; -#Enddecay -#Decay omega(1960) -#0.08 pi+ pi- PHSP; -#0.05 pi+ pi+ pi- pi- PHSP; -#0.10 pi0 pi+ pi- PHSP; -#0.10 pi0 pi+ pi+ pi- pi- PHSP; -#0.12 pi0 pi0 pi+ pi- PHSP; -#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.05 pi0 pi0 pi0 pi+ pi- PHSP; -#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.04 K+ K- pi+ pi- PHSP; -#0.02 K0 K- pi+ PHSP; -#0.02 anti-K0 K+ pi- PHSP; -#0.02 K0 K- pi+ pi+ pi- PHSP; -#0.02 anti-K0 K+ pi- pi- pi+ PHSP; -#0.02 K0 K- pi0 pi+ PHSP; -#0.02 anti-K0 K+ pi0 pi- PHSP; -#0.02 eta pi0 pi+ pi- PHSP; -#0.01 eta rho- pi0 pi+ PHSP; -#0.01 eta rho+ pi0 pi- PHSP; -#Enddecay -#Decay rho(1965) -#0.08 pi+ pi- PHSP; -#0.05 pi+ pi+ pi- pi- PHSP; -#0.10 pi0 pi+ pi- PHSP; -#0.10 pi0 pi+ pi+ pi- pi- PHSP; -#0.12 pi0 pi0 pi+ pi- PHSP; -#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.05 pi0 pi0 pi0 pi+ pi- PHSP; -#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; -#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; -#0.04 K+ K- pi+ pi- PHSP; -#0.02 K0 K- pi+ PHSP; -#0.02 anti-K0 K+ pi- PHSP; -#0.02 K0 K- pi+ pi+ pi- PHSP; -#0.02 anti-K0 K+ pi- pi- pi+ PHSP; -#0.02 K0 K- pi0 pi+ PHSP; -#0.02 anti-K0 K+ pi0 pi- PHSP; -#0.02 eta pi0 pi+ pi- PHSP; -#0.01 eta rho- pi0 pi+ PHSP; -#0.01 eta rho+ pi0 pi- PHSP; -#Enddecay -# -# -# cc= mesons Updated to PDG 2008 -# -Decay eta_c -0.001300000 p+ anti-p- PHSP; #[Reconstructed PDG2011] -0.002700000 phi phi SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; #[Reconstructed PDG2011] -0.002900000 phi K+ K- PHSP; #[Reconstructed PDG2011] -0.0067 rho0 rho0 SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; -0.0133 rho+ rho- SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; -0.012000000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.001600000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] -0.015000000 K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.0327 eta pi+ pi- PHSP; -0.0163 eta pi0 pi0 PHSP; -0.0273 eta' pi+ pi- PHSP; -0.0137 eta' pi0 pi0 PHSP; -0.0117 pi0 K+ K- PHSP; -0.0233 K+ anti-K0 pi- PHSP; -0.0233 K- K0 pi+ PHSP; -0.0117 K0 anti-K0 pi0 PHSP; -0.0046 K*+ K*- SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; -0.0046 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0 ; -0.01 K*0 K- pi+ PHSP; -0.01 anti-K*0 K+ pi- PHSP; -# -#March 2009 New Modes -0.01500 K*0 anti-K*0 pi+ pi- PHSP; -0.007100000 K+ K- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.015000000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.001040000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] -0.007600000 f_2 f_2 PHSP; #[Reconstructed PDG2011] -0.027000000 f_2 f'_2 PHSP; #[Reconstructed PDG2011] -# -0.682497000 rndmflav anti-rndmflav PYTHIA 12; #[Reconstructed PDG2011] -0.000063000 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay eta_c(2S) - 0.019 K+ anti-K0 pi- PHSP; - 0.019 K- K0 pi+ PHSP; - 0.0095 pi0 K+ K- PHSP; - 0.0095 K0 anti-K0 pi0 PHSP; - 0.943 rndmflav anti-rndmflav PYTHIA 12; -Enddecay -# -Decay J/psi -0.059400000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] -0.059300000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] -0.005600000 rho0 pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.00563 rho+ pi- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.00563 rho- pi+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.004000000 omega pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.00364 a_20 rho0 PHSP; -0.00363 a_2+ rho- PHSP; -0.00363 a_2- rho+ PHSP; -0.008500000 omega pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.004300000 omega f_2 PHSP; #[Reconstructed PDG2011] -0.004300000 omega pi+ pi- PHSP; #[Reconstructed PDG2011] -0.00300 K*0 anti-K_2*0 PHSP; -0.00300 anti-K*0 K_2*0 PHSP; -0.00305 omega K*0 anti-K0 PHSP; -0.00305 omega anti-K*0 K0 PHSP; -0.00256 K*+ K- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.00256 K*- K+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.002195 K*0 anti-K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.002195 anti-K*0 K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.00190 K_1+ K- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.00190 K_1- K+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.003400000 omega pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.001500000 b_1+ pi- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.001500000 b_1- pi+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -# -0.001700000 omega pi- K+ K_S0 PHSP; #[Reconstructed PDG2011] -0.0017 omega pi- K+ K_L0 PHSP; -0.001700000 omega pi+ K- K_S0 PHSP; #[Reconstructed PDG2011] -0.0017 omega pi+ K- K_L0 PHSP; -0.0000 omega pi- K+ K0 PHSP; -0.0000 omega pi- K+ anti-K0 PHSP; -0.0000 omega pi+ K- K0 PHSP; -0.0000 omega pi+ K- anti-K0 PHSP; -# -0.002300000 b_10 pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.002290000 eta pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000545 phi K*0 anti-K0 PHSP; -0.000545 phi anti-K*0 K0 PHSP; -0.000545 phi K*+ K- PHSP; -0.000545 phi K*- K+ PHSP; -0.0008 omega K0 anti-K0 PHSP; -0.0008 omega K+ K- PHSP; -0.001660000 phi pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.001600000 Delta++ anti-p- pi- PHSP; #[Reconstructed PDG2011] -0.0016 anti-Delta-- p+ pi+ PHSP; -0.001740000 omega eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.000915 phi K0 anti-K0 PHSP; -0.000915 phi K+ K- PHSP; -0.001100000 omega p+ anti-p- PHSP; #[Reconstructed PDG2011] -0.0011 Delta++ anti-Delta-- PHSP; -0.000515 Sigma- anti-Sigma+ PHSP; -0.001500000 Sigma+ anti-Sigma- PHSP; #[Reconstructed PDG2011] -0.000720000 eta pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000147000 pi+ pi- PHSP; #[Reconstructed PDG2011] - -0.017000000 gamma eta_c PHSP; #[Reconstructed PDG2011] -0.008300000 gamma pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.0061 gamma eta pi+ pi- PHSP; -0.00225 gamma rho+ rho- PHSP; -0.00225 gamma rho0 rho0 PHSP; -0.005280000 gamma eta' PHSP; #[Reconstructed PDG2011] -0.001850000 gamma pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.002100000 gamma K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.001610000 gamma omega omega PHSP; #[Reconstructed PDG2011] -0.001430000 gamma f_2 PHSP; #[Reconstructed PDG2011] -0.0040 gamma K*0 anti-K*0 PHSP; -# -# March 2009 New Modes -0.001100000 eta pi- K+ K_S0 PHSP; #[Reconstructed PDG2011] -0.0011 eta pi- K+ K_L0 PHSP; -0.001100000 eta pi+ K- K_S0 PHSP; #[Reconstructed PDG2011] -0.0011 eta pi+ K- K_L0 PHSP; -0.0000 eta pi- K+ K0 PHSP; -0.0000 eta pi- K+ anti-K0 PHSP; -0.0000 eta pi+ K- K0 PHSP; -0.0000 eta pi+ K- anti-K0 PHSP; -# -0.055000000 pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.029000000 pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.020700000 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.019400000 pi+ pi- pi0 K+ K- PHSP; #[Reconstructed PDG2011] -0.016100000 pi+ pi- pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.009000000 pi+ pi- pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.006600000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] -0.001840000 pi+ pi- K+ K- eta PHSP; #[Reconstructed PDG2011] -0.002450000 pi0 pi0 K+ K- PHSP; #[Reconstructed PDG2011] -0.005000000 pi+ pi- pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] -0.00102 K+ K- pi0 PHSP; -0.00102 K0 anti-K0 pi0 PHSP; -0.00203 K+ anti-K0 pi- PHSP; -0.00203 K- K0 pi+ PHSP; -0.003550000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -#### Already included above 0.00229 pi+ pi- pi+ pi- eta PHSP; -0.004300000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.002170000 p+ anti-p- PHSP; #[Reconstructed PDG2011] -0.001190000 p+ anti-p- pi0 PHSP; #[Reconstructed PDG2011] -0.006000000 p+ anti-p- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.002300000 p+ anti-p- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.002000000 p+ anti-p- eta PHSP; #[Reconstructed PDG2011] -0.002200000 n0 anti-n0 PHSP; #[Reconstructed PDG2011] -0.004000000 n0 anti-n0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.001290000 Sigma0 anti-Sigma0 PHSP; #[Reconstructed PDG2011] -0.002120000 p+ anti-n0 pi- PHSP; #[Reconstructed PDG2011] -0.001200000 Xi0 anti-Xi0 PHSP; #[Reconstructed PDG2011] -0.000850000 Xi- anti-Xi+ PHSP; #[Reconstructed PDG2011] -0.001610000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] -# -0.084693481 rndmflav anti-rndmflav PYTHIA 12; #[Reconstructed PDG2011] -0.365559757 g g g PYTHIA 4; #[Reconstructed PDG2011] -0.032103862 gamma g g PYTHIA 4; #[Reconstructed PDG2011] -0.0 K0 anti-K0 PHSP; -0.0 K_S0 K_S0 PHSP; -0.0 K_L0 K_L0 PHSP; -0.000146000 K_S0 K_L0 PHSP; #[Reconstructed PDG2011] -0.001900000 K'_1+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001900000 K'_1- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000800000 phi f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000870000 phi pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000560000 phi pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000680000 omega f'_1 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000750000 phi eta PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000590000 Xi*- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000450000 omega pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000400000 phi eta' PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000320000 phi f_0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000320000 Xi*0 anti-Xi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000260000 phi f_1 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000400000 eta pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000182000 omega eta' PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000140000 omega f_0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000230000 K*0 anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000720000 phi f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000210000 p+ anti-p- eta' PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000045000 p+ anti-p- phi PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000890000 p+ K- anti-Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000760000 K+ K- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000290000 p+ K- anti-Sigma0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000237000 K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000260000 Lambda0 anti-Lambda0 eta PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000012000 gamma gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000950000 gamma f_2 f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001104000 gamma eta PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000610000 gamma f_1 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000450000 gamma f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000400000 gamma phi phi PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000380000 gamma p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000034900 gamma pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.008800000 gamma e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay psi(2S) -0.007720000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] -0.007700000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] -0.003000000 tau+ tau- PHOTOS VLL; #[Reconstructed PDG2011] -0.336000000 J/psi pi+ pi- VVPIPI; #[Reconstructed PDG2011] -0.177300000 J/psi pi0 pi0 VVPIPI; #[Reconstructed PDG2011] -0.032800000 J/psi eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.001300000 J/psi pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.096200000 gamma chi_c0 PHSP; #[Reconstructed PDG2011] -0.092000000 gamma chi_c1 PHSP; #[Reconstructed PDG2011] -0.087400000 gamma chi_c2 PHSP; #[Reconstructed PDG2011] -0.003400000 gamma eta_c PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.000121000 gamma eta' PHSP; #[Reconstructed PDG2011] -0.000210000 gamma f_2 PHSP; #[Reconstructed PDG2011] -0.003500000 pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.000350000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.002900000 pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.000200000 b_1+ pi- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.000200000 b_1- pi+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.000240000 b_10 pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.000168000 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.0000545 K*0 anti-K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0000545 anti-K*0 K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000022 rho0 eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000021000 omega pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.000028000 phi eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.000008 rho+ pi- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000008 rho- pi+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000008 rho0 pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000001 phi pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000001 omega eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0000085 K*+ K- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0000085 K*- K+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000185000 omega K+ K- PHSP; #[Reconstructed PDG2011] -0.000340000 K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000600000 p+ anti-p- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000133000 p+ anti-p- pi0 PHSP; #[Reconstructed PDG2011] -0.000276000 p+ anti-p- PHSP; #[Reconstructed PDG2011] -0.000500000 K_1+ K- PHSP; #[Reconstructed PDG2011] -0.000500000 K_1- K+ PHSP; #[Reconstructed PDG2011] -0.000220000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000280000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] -0.000128000 Delta++ anti-Delta-- PHSP; #[Reconstructed PDG2011] -0.000220000 Sigma0 anti-Sigma0 PHSP; #[Reconstructed PDG2011] -0.00026 Sigma*+ anti-Sigma*- PHSP; -0.000180000 Xi- anti-Xi+ PHSP; #[Reconstructed PDG2011] -0.000080000 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000063000 K+ K- PHSP; #[Reconstructed PDG2011] -0.000070000 phi K- K+ PHSP; #[Reconstructed PDG2011] -0.000117000 phi pi- pi+ PHSP; #[Reconstructed PDG2011] -0.000170000 pi+ pi- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] -0.0008 h_c pi0 PHSP; -0.0 K0 anti-K0 PHSP; -0.0 K_S0 K_S0 PHSP; -0.0 K_L0 K_L0 PHSP; -0.000054000 K_S0 K_L0 PHSP; #[Reconstructed PDG2011] -# -# March 2009 New Modes -0.004800000 pi+ pi- pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.001200000 pi+ pi- pi+ pi- eta PHSP; #[Reconstructed PDG2011] -0.001300000 K+ K- pi+ pi- eta PHSP; #[Reconstructed PDG2011] -0.001000000 K+ K- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -0.001900000 K+ K- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.001260000 K+ K- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] -# -0.013568632 rndmflav anti-rndmflav PYTHIA 12; #[Reconstructed PDG2011] -0.103318590 g g g PYTHIA 4; #[Reconstructed PDG2011] -0.007344778 gamma g g PYTHIA 4; #[Reconstructed PDG2011] -0.000100000 Lambda0 anti-p- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000180000 Lambda0 anti-p- K+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000280000 Lambda0 anti-Lambda0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000260000 Sigma+ anti-Sigma- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000280000 Xi0 anti-Xi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000060000 eta p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000069000 omega p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000320000 p+ anti-n0 pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000950000 eta pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000450000 eta' pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000000 omega pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000220000 omega f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000220000 rho0 K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000190000 K*0 anti-K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000050000 rho0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000020000 pi+ pi- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000730000 p+ anti-p- pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000060000 K+ K- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000110000 K+ K- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000031000 phi eta' PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000032000 omega eta' PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000027000 p+ anti-p- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000044000 phi f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000870000 gamma eta pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000400000 gamma pi+ pi- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000190000 gamma K+ K- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000029000 gamma p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000028000 gamma pi+ pi- p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay - -Decay psi(4040) -0.000010700 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] -0.000014000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] -0.000005000 tau+ tau- VLL; #[Reconstructed PDG2011] -0.002099938 D0 anti-D0 VSS; #[Reconstructed PDG2011] -0.000899973 D+ D- VSS; #[Reconstructed PDG2011] -0.167895013 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.167895013 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.181494610 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.181494610 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.159695257 D*0 anti-D*0 PHSP; #[Reconstructed PDG2011] -0.098197084 D*+ D*- PHSP; #[Reconstructed PDG2011] -0.000000000 D0 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 D+ D- pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 D0 D- pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 anti-D0 D+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 D*+ D- pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 D*- D+ pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 D*+ anti-D0 pi- PHSP; #[Reconstructed PDG2011] -0.000000000 D*- D0 pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 D+ anti-D*0 pi- PHSP; #[Reconstructed PDG2011] -0.000000000 D- D*0 pi+ PHSP; #[Reconstructed PDG2011] -0.040298803 D_s+ D_s- VSS; #[Reconstructed PDG2011] -Enddecay -# -Decay psi(4160) -0.000008100 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] -0.000009999 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] -0.000006000 tau+ tau- VLL; #[Reconstructed PDG2011] -0.039697852 D0 anti-D0 VSS; #[Reconstructed PDG2011] -0.038697906 D+ D- VSS; #[Reconstructed PDG2011] -0.051997187 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.051997187 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.051497214 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.051497214 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.298613845 D*0 anti-D*0 PHSP; #[Reconstructed PDG2011] -0.308183327 D*+ D*- PHSP; #[Reconstructed PDG2011] -0.000000000 D0 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 D+ D- pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 D0 D- pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 anti-D0 D+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 D*+ D- pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 D*- D+ pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 D*+ anti-D0 pi- PHSP; #[Reconstructed PDG2011] -0.000000000 D*- D0 pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 D+ anti-D*0 pi- PHSP; #[Reconstructed PDG2011] -0.000000000 D- D*0 pi+ PHSP; #[Reconstructed PDG2011] -0.009999459 D_s+ D_s- VSS; #[Reconstructed PDG2011] -0.048897355 D_s*+ D_s- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.048897355 D_s*- D_s+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.000000000 D_s+ D_s- pi0 PHSP; #[Reconstructed PDG2011] -Enddecay -# -Decay psi(4415) -0.000009400 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] -0.000011000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] -0.000007000 tau+ tau- VLL; #[Reconstructed PDG2011] -0.024399331 D0 anti-D0 VSS; #[Reconstructed PDG2011] -0.021899400 D+ D- VSS; #[Reconstructed PDG2011] -0.031999123 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.031999123 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.034299060 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.034299060 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.345090544 D*0 anti-D*0 PHSP; #[Reconstructed PDG2011] -0.353890303 D*+ D*- PHSP; #[Reconstructed PDG2011] -0.000000000 D0 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 D+ D- pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 D0 D- pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 anti-D0 D+ pi- PHSP; #[Reconstructed PDG2011] -0.000000000 D*+ D- pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 D*- D+ pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 D*+ anti-D0 pi- PHSP; #[Reconstructed PDG2011] -0.000000000 D*- D0 pi+ PHSP; #[Reconstructed PDG2011] -0.000000000 D+ anti-D*0 pi- PHSP; #[Reconstructed PDG2011] -0.000000000 D- D*0 pi+ PHSP; #[Reconstructed PDG2011] -0.011799677 D_s+ D_s- VSS; #[Reconstructed PDG2011] -0.041998849 D_s*+ D_s- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.041998849 D_s*- D_s+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.026299279 D_s*+ D_s*- PHSP; #[Reconstructed PDG2011] -0.000000000 D_s+ D_s- pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 D_s*+ D_s- pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 D_s+ D_s*- pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 D_s+ D- anti-K0 PHSP; #[Reconstructed PDG2011] -0.000000000 D_s- D+ anti-K0 PHSP; #[Reconstructed PDG2011] -0.000000000 D0 D_s- K+ PHSP; #[Reconstructed PDG2011] -0.000000000 anti-D0 D_s+ K- PHSP; #[Reconstructed PDG2011] -Enddecay -# -Decay chi_c0 -0.011600000 gamma J/psi PHSP; #[Reconstructed PDG2011] -0.000228000 p+ anti-p- PHSP; #[Reconstructed PDG2011] -0.000222000 gamma gamma PHSP; #[Reconstructed PDG2011] -0.00243 pi0 pi0 PHSP; -0.00487 pi+ pi- PHSP; -0.013800000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.002810000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] -0.012000000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.008900000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.0100 rho+ pi- pi0 PHSP; -0.0100 rho- pi+ pi0 PHSP; -0.00057 K+ K- PHSP; -0.000920000 phi phi PHSP; #[Reconstructed PDG2011] -0.001700000 anti-K*0 K*0 PHSP; #[Reconstructed PDG2011] -0.0036 anti-K*0 K+ pi- PHSP; -0.0036 K*0 K- pi+ PHSP; -0.0043 K*+ anti-K0 pi- PHSP; -0.0043 K*- K0 pi+ PHSP; -0.018000000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] -0.002100000 pi+ pi- p+ anti-p- PHSP; #[Reconstructed PDG2011] -0.002680000 eta eta PHSP; #[Reconstructed PDG2011] -0.000330000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] -0.00086 f_0 f_0 PHSP; -0.0 K0 anti-K0 PHSP; -0.003160000 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] -0.00282 K_L0 K_L0 PHSP; -0.0 K_S0 K_L0 PHSP; -# -# March 2009 New Modes -0.002030000 eta' eta' PHSP; #[Reconstructed PDG2011] -0.002200000 omega omega PHSP; #[Reconstructed PDG2011] -0.00325 K_1+ K- PHSP; -0.00325 K_1- K+ PHSP; -0.000990000 K+ K- phi PHSP; #[Reconstructed PDG2011] -0.001140000 p+ anti-n0 pi- PHSP; #[Reconstructed PDG2011] -0.000525 K+ anti-p- Lambda0 PHSP; -0.000525 K- p+ Lambda0 PHSP; -0.005800000 K_S0 K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.00590 K_L0 K_L0 pi+ pi- PHSP; -0.00000 K0 anti-K0 pi+ pi- PHSP; -0.001400000 K+ K- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] -0.00150 K+ K- K_L0 K_L0 PHSP; -0.00000 K+ K- K0 anti-K0 PHSP; -# -0.799360000 rndmflav anti-rndmflav PYTHIA 12; #[Reconstructed PDG2011] -0.034000000 pi+ pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.005700000 K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.003100000 K+ K- eta pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000570000 p+ anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000370000 p+ anti-p- eta PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001050000 pi0 pi0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000420000 Sigma0 anti-Sigma0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000310000 Sigma+ anti-Sigma- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000320000 Xi0 anti-Xi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000490000 Xi- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay chi_c1 -0.344000000 J/psi gamma VVP 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] -0.007600000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000073000 p+ anti-p- PHSP; #[Reconstructed PDG2011] -0.005800000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.004500000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] -0.003900000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.0020 rho+ pi- pi0 PHSP; -0.0020 rho- pi+ pi0 PHSP; -0.0016 anti-K*0 K+ pi- PHSP; -0.0016 K*0 K- pi+ PHSP; -0.001500000 anti-K*0 K*0 PHSP; #[Reconstructed PDG2011] -0.0009 K*+ anti-K0 pi- PHSP; -0.0009 K*- K0 pi+ PHSP; -0.000500000 pi+ pi- p+ anti-p- PHSP; #[Reconstructed PDG2011] -0.000720000 pi+ pi- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] -0.0003 K+ K- K_S0 K_S0 PHSP; -0.000118000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] -0.00385 K+ anti-K0 pi- PHSP; -0.00385 K- K0 pi+ PHSP; -0.000560000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] -0.00000 K0 anti-K0 PHSP; -0.00001 K_S0 K_S0 PHSP; -0.00001 K_L0 K_L0 PHSP; -0.00000 K_S0 K_L0 PHSP; -# -# March 2009 New Modes -0.002200000 pi+ pi- eta PHSP; #[Reconstructed PDG2011] -0.002400000 pi+ pi- eta' PHSP; #[Reconstructed PDG2011] -0.001910000 K+ K- pi0 PHSP; #[Reconstructed PDG2011] -# -0.587724 rndmflav anti-rndmflav PYTHIA 12; -0.008700000 pi+ pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001180000 K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001200000 K+ K- eta pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000330000 K+ K- eta PHSP; #[New mode added] #[Reconstructed PDG2011] -0.002800000 f_2 eta PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000430000 K+ K- phi PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000120000 p+ anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000320000 K+ anti-p- Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000084000 Xi- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000229000 gamma rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000078000 gamma omega PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay - - -# -Decay chi_c2 -0.195000000 gamma J/psi PHSP; #[Reconstructed PDG2011] -0.000256000 gamma gamma PHSP; #[Reconstructed PDG2011] -0.000072000 p+ anti-p- PHSP; #[Reconstructed PDG2011] -0.00072 pi0 pi0 TSS; -0.00145 pi+ pi- TSS; -0.011100000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.001780000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] -0.008600000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] -0.009200000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] -0.004000000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.0046 rho+ pi- pi0 PHSP; -0.0046 rho- pi+ pi0 PHSP; -0.001090000 K+ K- TSS; #[Reconstructed PDG2011] -0.002400000 pi+ pi- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] -0.0003 K+ K- K_S0 K_S0 PHSP; -0.001480000 phi phi PHSP; #[Reconstructed PDG2011] -0.00115 anti-K*0 K+ pi- PHSP; -0.00115 K*0 K- pi+ PHSP; -0.002500000 anti-K*0 K*0 PHSP; #[Reconstructed PDG2011] -0.0016 K*+ anti-K0 pi- PHSP; -0.0016 K*- K0 pi+ PHSP; -0.001320000 pi+ pi- p+ anti-p- PHSP; #[Reconstructed PDG2011] -0.000186000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] -0.00000 K0 anti-K0 PHSP; -0.000580000 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] -0.00065 K_L0 K_L0 PHSP; -0.00000 K_S0 K_L0 PHSP; -# -# March 2009 New Modes -0.001900000 omega omega PHSP; #[Reconstructed PDG2011] -0.0007 anti-K0 K+ pi- PHSP; -0.0007 K0 K- pi+ PHSP; -0.001550000 K+ K- phi PHSP; #[Reconstructed PDG2011] -0.001100000 p+ anti-n0 pi- PHSP; #[Reconstructed PDG2011] -# -0.709461000 rndmflav anti-rndmflav PYTHIA 12; #[Reconstructed PDG2011] -0.020000000 pi+ pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.002200000 K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001400000 K+ K- eta pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000520000 pi+ pi- eta PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000540000 pi+ pi- eta' PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000540000 eta eta PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000330000 K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000470000 p+ anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000200000 p+ anti-p- eta PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000850000 pi0 pi0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000155000 Xi- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay psi(3770) -0.410000000 D+ D- VSS; #[Reconstructed PDG2011] -0.520000000 D0 anti-D0 VSS; #[Reconstructed PDG2011] -0.001930000 J/psi pi+ pi- PHSP; #[Reconstructed PDG2011] -0.000800000 J/psi pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.0073 gamma chi_c0 PHSP; -0.0029 gamma chi_c1 PHSP; -0.055850300 rndmflav anti-rndmflav PYTHIA 12; #[Reconstructed PDG2011] -0.000900000 J/psi eta PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000009700 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000310000 phi eta PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay X_1(3872) -1.000 rndmflav anti-rndmflav PYTHIA 12; -Enddecay -# -# -# bb= Mesons Updated to PDG 2008 -# -Decay eta_b -1.000 rndmflav anti-rndmflav PYTHIA 12; -Enddecay -# -Decay Upsilon -0.024800000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] -0.024800000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] -0.026000000 tau+ tau- VLL; #[Reconstructed PDG2011] -0.014959973 d anti-d PYTHIA 32; #[Reconstructed PDG2011] -0.044879919 u anti-u PYTHIA 32; #[Reconstructed PDG2011] -0.014959973 s anti-s PYTHIA 32; #[Reconstructed PDG2011] -0.044879919 c anti-c PYTHIA 32; #[Reconstructed PDG2011] -0.774328202 g g g PYTHIA 4; #[Reconstructed PDG2011] -0.028922614 gamma g g PYTHIA 4; #[Reconstructed PDG2011] -0.000063000 gamma pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000017000 gamma pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000011400 gamma K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000290000 gamma pi+ pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000250000 gamma pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000250000 gamma pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000240000 gamma pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000150000 gamma pi+ pi- p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000040000 gamma pi+ pi+ pi- pi- p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000020000 gamma K+ K+ K- K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000037000 gamma f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000101000 gamma f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay Upsilon(2S) -0.019100000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] -0.019300000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] -0.020000000 tau+ tau- VLL; #[Reconstructed PDG2011] -0.181000000 Upsilon pi+ pi- PHSP; #[Reconstructed PDG2011] -0.086000000 Upsilon pi0 pi0 PHSP; #[Reconstructed PDG2011] -# V-> gamma S Partial wave (L,S)=(0,1) -0.038000000 gamma chi_b0 HELAMP 1. 0. +1. 0.; #[Reconstructed PDG2011] -# V-> gamma V Partial wave (L,S)=(0,1) -0.069000000 gamma chi_b1 HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] -# V-> gamma T Partial wave (L,S)=(0,1) -0.071500000 gamma chi_b2 HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] -0.00500 d anti-d PYTHIA 32; -0.02000 u anti-u PYTHIA 32; -0.00500 s anti-s PYTHIA 32; -0.02000 c anti-c PYTHIA 32; -0.42160 g g g PYTHIA 4; -0.01600 gamma g g PYTHIA 4; -0.000210000 Upsilon eta PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000390000 gamma eta_b PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay Upsilon(3S) -0.0181 e+ e- PHOTOS VLL; -0.021800000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] -0.022900000 tau+ tau- VLL; #[Reconstructed PDG2011] -0.044000000 Upsilon pi+ pi- PHSP; #[Reconstructed PDG2011] -0.022000000 Upsilon pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.024500000 Upsilon(2S) pi+ pi- PHSP; #[Reconstructed PDG2011] -0.018500000 Upsilon(2S) pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.050000000 Upsilon(2S) gamma gamma PHSP; #[Reconstructed PDG2011] -# V-> gamma S Partial wave (L,S)=(0,1) -0.059000000 gamma chi_b0(2P) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] -# V-> gamma V Partial wave (L,S)=(0,1) -0.126000000 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] -# V-> gamma T Partial wave (L,S)=(0,1) -0.131000000 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] -0.00700 d anti-d PYTHIA 32; -0.02800 u anti-u PYTHIA 32; -0.00700 s anti-s PYTHIA 32; -0.02800 c anti-c PYTHIA 32; -0.37780 g g g PYTHIA 4; -0.01000 gamma g g PYTHIA 4; -0.003000000 gamma chi_b0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000510000 gamma eta_b PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# - -Decay Upsilon(5S) -0.5 B+ B- PHSP; -0.481487200 g g g PYTHIA 4; #[Reconstructed PDG2011] -0.000002800 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.005300000 Upsilon pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.007800000 Upsilon(2S) pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.004800000 Upsilon(3S) pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000610000 Upsilon K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay - -Decay chi_b0 -# S-> gamma V Partial wave (L,S)=(0,0) -0.0500 gamma Upsilon HELAMP 1. 0. 1. 0.; -0.949650000 rndmflav anti-rndmflav PYTHIA 12; #[Reconstructed PDG2011] -0.000110000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000240000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay chi_b1 -# V-> gamma V Partial wave (L,S)=(0,1) -0.350000000 gamma Upsilon HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] -0.643080000 g g PYTHIA 32; #[Reconstructed PDG2011] -0.000200000 pi+ pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000800000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000150000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000350000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000860000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000190000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001700000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000260000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000750000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000260000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001400000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay chi_b2 -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. -0.220000000 gamma Upsilon PHSP; #[Reconstructed PDG2011] -#0.2200 gamma Upsilon HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -0.775550000 g g PYTHIA 32; #[Reconstructed PDG2011] -0.000080000 pi+ pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000350000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000110000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000210000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000390000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000070000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001000000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000360000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000080000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001800000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay chi_b0(2P) -# S-> gamma V Partial wave (L,S)=(0,0) -0.009000000 gamma Upsilon HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] -0.046000000 gamma Upsilon(2S) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] -# S-> gamma V Partial wave (L,S)=(0,0) -0.00150 gamma Upsilon_1(1D) HELAMP 1. 0. 1. 0.; -0.94350 g g PYTHIA 32; -Enddecay -# -Decay chi_b1(2P) -# V-> gamma V Partial wave (L,S)=(0,1) -0.085000000 gamma Upsilon HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] -0.210000000 gamma Upsilon(2S) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] -# V-> gamma V Partial wave (L,S)=(0,1) -0.0097 gamma Upsilon_1(1D) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -# V-> gamma T Partial wave (L,S)=(0,1) -0.0236 gamma Upsilon_2(1D) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; -0.648650000 g g PYTHIA 32; #[Reconstructed PDG2011] -0.016300000 omega Upsilon PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000310000 pi+ pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000590000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000100000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000550000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001000000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000120000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001200000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000200000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000610000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000170000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001900000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay chi_b2(2P) -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. -0.071000000 gamma Upsilon PHSP; #[Reconstructed PDG2011] -#0.0710 gamma Upsilon HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -0.162000000 gamma Upsilon(2S) PHSP; #[Reconstructed PDG2011] -#0.1620 gamma Upsilon(2S) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. -0.00023 gamma Upsilon_1(1D) PHSP; -#0.00023 gamma Upsilon_1(1D) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -# T -> gamma T Partial wave (L,S)=(0,2) -0.00290 gamma Upsilon_2(1D) PHSP; -#0.00290 gamma Upsilon_2(1D) HELAMP -1. 0. -1.2247449 0. -# -1.2247449 0. -1. 0. -# 1. 0. 1.2247449 0. -# 1.2247449 0. 1. 0.; -# spin 3 not yet in HELAMP. -0.01420 gamma Upsilon_3(1D) PYTHIA 0; -# T-> gamma 3 Partial wave (L,S)=(0,2) -#0.01420 gamma Upsilon_3(1D) HELAMP 3.8729833 0. 3.1622777 0. -# 2.4494897 0. 1.7320508. 0. 1. 0. -# 1. 0. 1.7320508 0. 2.4494897 0. -# 3.1622777 0. 3.8729833 0.; -0.734240000 g g PYTHIA 32; #[Reconstructed PDG2011] -0.011000000 omega Upsilon PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000390000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000090000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000240000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000470000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000090000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001200000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000140000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000420000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000090000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001300000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay h_b -1.00000 g g PYTHIA 32; -Enddecay - -Decay chi_b0(3P) -#see Kwong and Rosner, PRD 38,279 (1988) -# S-> gamma V Partial wave (L,S)=(0,0) -0.01700 gamma Upsilon(3S) HELAMP 1. 0. 1. 0.; -# S-> gamma V Partial wave (L,S)=(0,0) -0.00400 gamma Upsilon_1(2D) HELAMP 1. 0. 1. 0.; -0.97900 g g PYTHIA 32; -Enddecay - -Decay chi_b1(3P) -#see Kwong and Rosner, PRD 38,279 (1988) -# V-> gamma V Partial wave (L,S)=(0,1) -0.15000 gamma Upsilon(3S) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -# V-> gamma T Partial wave (L,S)=(0,1) -0.03100 gamma Upsilon_2(2D) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; -# V-> gamma V Partial wave (L,S)=(0,1) -0.01300 gamma Upsilon_1(2D) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -0.80600 g g PYTHIA 32; -Enddecay - -Decay chi_b2(3P) -#see Kwong and Rosner, PRD 38,279 (1988) -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. -0.08700 gamma Upsilon(3S) PHSP; -0.00000 gamma Upsilon(2S) PHSP; -0.00000 gamma Upsilon PHSP; -#0.08700 gamma Upsilon(3S) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -#0.00000 gamma Upsilon(2S) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -#0.00000 gamma Upsilon HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -# spin 3 not yet in HELAMP -0.02200 Upsilon_3(2D) gamma PHSP; -# T -> gamma 3 Partial wave (L,S)=(0,2) -#0.02200 gamma Upsilon_3(2D) HELAMP 3.8729833 0. 3.1622777 0. -# 2.4494897 0. 1.7320508. 0. 1. 0. -# 1. 0. 1.7320508 0. 2.4494897 0. -# 3.1622777 0. 3.8729833 0.; -# T -> gamma T Partial wave (L,S)=(0,2) -0.00400 gamma Upsilon_2(2D) PHSP; -#0.00400 gamma Upsilon_2(2D) HELAMP -1. 0. -1.2247449 0. -# -1.2247449 0. -1. 0. -# 1. 0. 1.2247449 0. -# 1.2247449 0. 1. 0.; -# T-> gamma V Partial wave (L,S)=(0,2) -0.00040 gamma Upsilon_1(2D) PHSP; -#0.00040 gamma Upsilon_1(2D) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -0.88660 g g PYTHIA 32; -Enddecay - -Decay Upsilon_1(1D) -#see Kwong and Rosner, PRD 38,279 (1988) -0.00140 Upsilon pi+ pi- PHSP; -0.00070 Upsilon pi0 pi0 PHSP; -# V-> gamma S Partial wave (L,S)=(0,1) -0.60200 gamma chi_b0 HELAMP 1. 0. +1. 0.; -# V-> gamma V Partial wave (L,S)=(0,1) -0.31800 gamma chi_b1 HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -# V-> gamma T Partial wave (L,S)=(0,1) -0.02600 gamma chi_b2 HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; -0.05190 g g g PYTHIA 4; -Enddecay - -Decay Upsilon_2(1D) -#see Kwong and Rosner, PRD 38,279 (1988) -0.00140 Upsilon pi+ pi- PHSP; -0.00070 Upsilon pi0 pi0 PHSP; -# T-> gamma T Partial wave (L,S)=(0,2) -0.20300 gamma chi_b2 PHSP; -#0.20300 gamma chi_b2 HELAMP -1. 0. -1.2247449 0. -# -1.2247449 0. -1. 0. -# 1. 0. 1.2247449 0. -# 1.2247449 0. 1. 0.; -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. -0.78500 gamma chi_b1 PHSP; -#0.78500 gamma chi_b1 HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -0.00990 g g g PYTHIA 4; -Enddecay - -Decay Upsilon_3(1D) -#see Kwong and Rosner, PRD 38,279 (1988) -0.00200 Upsilon pi+ pi- PHSP; -0.00100 Upsilon pi0 pi0 PHSP; -0.95400 chi_b2 gamma PHSP; -0.04300 g g g PYTHIA 4; -Enddecay - -Decay Upsilon_1(2D) -#see Kwong and Rosner, PRD 38,279 (1988) -0.00000 Upsilon pi+ pi- PHSP; -0.00000 Upsilon pi0 pi0 PHSP; -0.00000 Upsilon(2S) pi+ pi- PHSP; -0.00000 Upsilon(2S) pi0 pi0 PHSP; -# V-> gamma S Partial wave (L,S)=(0,1) -0.51000 gamma chi_b0(2P) HELAMP 1. 0. +1. 0.; -# V-> gamma V Partial wave (L,S)=(0,1) -0.26000 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -# V-> gamma T Partial wave (L,S)=(0,1) -0.01400 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; -0.21600 g g g PYTHIA 4; -Enddecay - -Decay Upsilon_2(2D) -#see Kwong and Rosner, PRD 38,279 (1988) -0.00000 Upsilon pi+ pi- PHSP; -0.00000 Upsilon pi0 pi0 PHSP; -0.00000 Upsilon(2S) pi+ pi- PHSP; -0.00000 Upsilon(2S) pi0 pi0 PHSP; -# T-> gamma T Partial wave (L,S)=(0,2) -0.04000 gamma chi_b2(2P) PHSP; -#0.04000 gamma chi_b2(2P) HELAMP -1. 0. -1.2247449 0. -# -1.2247449 0. -1. 0. -# 1. 0. 1.2247449 0. -# 1.2247449 0. 1. 0.; -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. -0.13000 gamma chi_b1(2P) PHSP; -#0.13000 gamma chi_b1(2P) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -0.83000 g g g PYTHIA 4; -Enddecay - -Decay Upsilon_3(2D) -#see Kwong and Rosner, PRD 38,279 (1988) -0.00000 Upsilon pi+ pi- PHSP; -0.00000 Upsilon pi0 pi0 PHSP; -0.00000 Upsilon(2S) pi+ pi- PHSP; -0.00000 Upsilon(2S) pi0 pi0 PHSP; -0.72000 chi_b2(2P) gamma PHSP; -0.28000 g g g PYTHIA 4; -Enddecay - -Decay h_b(2P) -1.00000 g g PYTHIA 32; -Enddecay -Decay h_b(3P) -1.00000 g g PYTHIA 32; -Enddecay -Decay eta_b2(1D) -1.00000 g g PYTHIA 32; -Enddecay -Decay eta_b2(2D) -1.00000 g g PYTHIA 32; -Enddecay -# -# Charm Baryons -# -Decay Lambda_c+ -0.021000000 e+ nu_e Lambda0 PYTHIA 42; #[Reconstructed PDG2011] -0.00500 e+ nu_e Sigma0 PYTHIA 42; -0.00500 e+ nu_e Sigma*0 PYTHIA 42; -0.00300 e+ nu_e n0 PYTHIA 42; -0.00200 e+ nu_e Delta0 PYTHIA 42; -0.00600 e+ nu_e p+ pi- PYTHIA 42; -0.00600 e+ nu_e n0 pi0 PYTHIA 42; -0.020000000 mu+ nu_mu Lambda0 PYTHIA 42; #[Reconstructed PDG2011] -0.00500 mu+ nu_mu Sigma0 PYTHIA 42; -0.00500 mu+ nu_mu Sigma*0 PYTHIA 42; -0.00300 mu+ nu_mu n0 PYTHIA 42; -0.00200 mu+ nu_mu Delta0 PYTHIA 42; -0.00600 mu+ nu_mu p+ pi- PYTHIA 42; -0.00600 mu+ nu_mu n0 pi0 PYTHIA 42; -0.008600000 Delta++ K- PYTHIA 0; #[Reconstructed PDG2011] -0.02500 Delta++ K*- PYTHIA 0; -0.023000000 p+ anti-K0 PYTHIA 0; #[Reconstructed PDG2011] -0.016000000 p+ anti-K*0 PYTHIA 0; #[Reconstructed PDG2011] -0.00500 Delta+ anti-K0 PYTHIA 0; -0.00500 Delta+ anti-K*0 PYTHIA 0; -0.010700000 Lambda0 pi+ PYTHIA 0; #[Reconstructed PDG2011] -0.00500 Lambda0 rho+ PYTHIA 0; -0.010500000 Sigma0 pi+ PYTHIA 0; #[Reconstructed PDG2011] -0.00400 Sigma0 rho+ PYTHIA 0; -0.00400 Sigma*0 pi+ PYTHIA 0; -0.00400 Sigma*0 rho+ PYTHIA 0; -0.010000000 Sigma+ pi0 PYTHIA 0; #[Reconstructed PDG2011] -0.005500000 Sigma+ eta PYTHIA 0; #[Reconstructed PDG2011] -0.00200 Sigma+ eta' PYTHIA 0; -0.00400 Sigma+ rho0 PYTHIA 0; -0.027000000 Sigma+ omega PYTHIA 0; #[Reconstructed PDG2011] -0.00300 Sigma*+ pi0 PYTHIA 0; -0.008500000 Sigma*+ eta PYTHIA 0; #[Reconstructed PDG2011] -0.00300 Sigma*+ rho0 PYTHIA 0; -0.00300 Sigma*+ omega PYTHIA 0; -0.003900000 Xi0 K+ PYTHIA 0; #[Reconstructed PDG2011] -0.00200 Xi0 K*+ PYTHIA 0; -0.002600000 Xi*0 K+ PYTHIA 0; #[Reconstructed PDG2011] -0.00100 Delta++ pi- PYTHIA 0; -0.00100 Delta++ rho- PYTHIA 0; -0.00200 p+ pi0 PYTHIA 0; -0.00100 p+ eta PYTHIA 0; -0.00100 p+ eta' PYTHIA 0; -0.00200 p+ rho0 PYTHIA 0; -0.00200 p+ omega PYTHIA 0; -0.000820000 p+ phi PYTHIA 0; #[Reconstructed PDG2011] -0.002800000 p+ f_0 PYTHIA 0; #[Reconstructed PDG2011] -0.00100 Delta+ pi0 PYTHIA 0; -0.00100 Delta+ eta PYTHIA 0; -0.00100 Delta+ eta' PYTHIA 0; -0.00100 Delta+ rho0 PYTHIA 0; -0.00100 Delta+ omega PYTHIA 0; -0.00300 n0 pi+ PYTHIA 0; -0.00300 n0 rho+ PYTHIA 0; -0.00300 Delta0 pi+ PYTHIA 0; -0.00300 Delta0 rho+ PYTHIA 0; -0.00500 Lambda0 K+ PYTHIA 0; -0.00500 Lambda0 K*+ PYTHIA 0; -0.00200 Sigma0 K+ PYTHIA 0; -0.00200 Sigma0 K*+ PYTHIA 0; -0.00100 Sigma*0 K+ PYTHIA 0; -0.00100 Sigma*0 K*+ PYTHIA 0; -0.00200 Sigma+ K0 PYTHIA 0; -0.002800000 Sigma+ K*0 PYTHIA 0; #[Reconstructed PDG2011] -0.00100 Sigma*+ K0 PYTHIA 0; -0.00100 Sigma*+ K*0 PYTHIA 0; -0.064094509 u anti-d d su_0 PYTHIA 13; #[Reconstructed PDG2011] -0.028102977 u anti-d d su_1 PYTHIA 13; #[Reconstructed PDG2011] -0.017256214 u anti-s d su_0 PYTHIA 13; #[Reconstructed PDG2011] -0.017256214 u anti-d d ud_0 PYTHIA 13; #[Reconstructed PDG2011] -0.046838295 s uu_1 PYTHIA 13; #[Reconstructed PDG2011] -0.069024855 u su_0 PYTHIA 13; #[Reconstructed PDG2011] -0.069024855 u su_1 PYTHIA 13; #[Reconstructed PDG2011] -0.014791040 d uu_1 PYTHIA 13; #[Reconstructed PDG2011] -0.007395520 u ud_0 PYTHIA 13; #[Reconstructed PDG2011] -0.007395520 u ud_1 PYTHIA 13; #[Reconstructed PDG2011] -0.025400000 p+ K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.033000000 p+ anti-K0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.012000000 p+ anti-K0 eta PHSP; #[New mode added] #[Reconstructed PDG2011] -0.026000000 p+ anti-K0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.023000000 p+ K- pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.011000000 p+ K*- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001100000 p+ K- pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.008000000 p+ K- pi+ pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000700000 p+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001800000 p+ pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000000 p+ K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.036000000 Lambda0 pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.015000000 Lambda0 pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.011000000 Lambda0 pi+ rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000000 Lambda0 pi+ pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.009500000 Lambda0 pi+ eta PHSP; #[New mode added] #[Reconstructed PDG2011] -0.012000000 Lambda0 pi+ omega PHSP; #[New mode added] #[Reconstructed PDG2011] -0.004700000 Lambda0 K+ anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.036000000 Sigma+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.017000000 Sigma- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.018000000 Sigma0 pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.008300000 Sigma0 pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000000 Sigma+ K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.003100000 Sigma+ phi PHSP; #[New mode added] #[Reconstructed PDG2011] -0.002500000 Xi- K+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000000 Sigma+ K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -CDecay anti-Lambda_c- -# -Decay Xi_c0 -1.000 PYTHIA 84; -Enddecay -Decay anti-Xi_c0 -1.000 PYTHIA 84; -Enddecay -# -Decay c-hadron -0.08000 e+ nu_e s specflav PYTHIA 42; -0.08000 mu+ nu_mu s specflav PYTHIA 42; -0.76000 u anti-d s specflav PYTHIA 11; -0.08000 u anti-s s specflav PYTHIA 11; -Enddecay -CDecay anti-c-hadron -# -Decay Sigma_c0 -1.0000 Lambda_c+ pi- PHSP; -Enddecay -Decay anti-Sigma_c0 -1.0000 anti-Lambda_c- pi+ PHSP; -Enddecay -# -Decay Sigma_c+ -1.0000 Lambda_c+ pi0 PHSP; -Enddecay -Decay anti-Sigma_c- -1.0000 anti-Lambda_c- pi0 PHSP; -Enddecay -# -Decay Xi_c+ -0.079535513 PYTHIA 84; #[Reconstructed PDG2011] -0.079535513 Sigma*+ anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.025689971 Lambda0 K- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.010339617 Sigma+ K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.064423765 Sigma+ anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.023065299 Sigma0 K- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.043744532 Xi0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.079535513 Xi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.186113099 Xi0 pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.138391792 Xi0 pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.182931679 Xi0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.005567486 Omega- K+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.007158196 p+ K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.009544262 p+ anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.038177046 Sigma+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.014316392 Sigma- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.011930327 Sigma+ K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -Decay anti-Xi_c- -0.079535513 PYTHIA 84; #[Reconstructed PDG2011] -0.079535513 anti-Sigma*- K0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.025689971 anti-Lambda0 K+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.010339617 anti-Sigma- K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.064423765 anti-Sigma- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.023065299 anti-Sigma0 K+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.043744532 anti-Xi0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.079535513 anti-Xi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.186113099 anti-Xi0 pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.138391792 anti-Xi0 pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.182931679 anti-Xi0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.005567486 anti-Omega+ K- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.007158196 anti-p- K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.009544262 anti-p- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.038177046 anti-Sigma- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.014316392 anti-Sigma+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.011930327 anti-Sigma- K- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay Sigma_c++ -1.0000 Lambda_c+ pi+ PHSP; -Enddecay -Decay anti-Sigma_c-- -1.0000 anti-Lambda_c- pi- PHSP; -Enddecay -# -Decay Xi'_c+ -0.1000 Lambda0 K- pi+ pi+ PHSP; -0.0800 Sigma0 K- pi+ pi+ PHSP; -0.8200 gamma Xi_c+ PHSP; -Enddecay -Decay anti-Xi'_c- -0.1000 anti-Lambda0 K+ pi- pi- PHSP; -0.0800 anti-Sigma0 K+ pi- pi- PHSP; -0.8200 gamma anti-Xi_c- PHSP; -Enddecay -# -Decay Xi'_c0 -1.0000 gamma Xi_c0 PHSP; -Enddecay -Decay anti-Xi'_c0 -1.0000 gamma anti-Xi_c0 PHSP; -Enddecay -# -# Light Baryons -# Lambda0 updated Feb 2009 -Decay Lambda0 -0.638719992 p+ pi- PHSP; #[Reconstructed PDG2011] -0.357719992 n0 pi0 PHSP; #[Reconstructed PDG2011] -0.001741600 n0 gamma PHSP; #[Reconstructed PDG2011] -0.000832160 p+ pi- gamma PHSP; #[Reconstructed PDG2011] -0.000831216 p+ e- anti-nu_e PHOTOS PHSP; #[Reconstructed PDG2011] -0.000155040 p+ mu- anti-nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] -Enddecay -# -Decay anti-Lambda0 -0.638719992 anti-p- pi+ PHSP; #[Reconstructed PDG2011] -0.357719992 anti-n0 pi0 PHSP; #[Reconstructed PDG2011] -0.001741600 anti-n0 gamma PHSP; #[Reconstructed PDG2011] -0.000832160 anti-p- pi+ gamma PHSP; #[Reconstructed PDG2011] -0.000831216 anti-p- e+ nu_e PHOTOS PHSP; #[Reconstructed PDG2011] -0.000155040 anti-p- mu+ nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] -Enddecay -# -Decay Lambda(1405)0 -0.3333 Sigma+ pi- PHSP; -0.3333 Sigma- pi+ PHSP; -0.3333 Sigma0 pi0 PHSP; -Enddecay -# -Decay anti-Lambda(1405)0 -0.3333 anti-Sigma+ pi- PHSP; -0.3333 anti-Sigma- pi+ PHSP; -0.3333 anti-Sigma0 pi0 PHSP; -Enddecay -# -Decay Lambda(1520)0 -0.23 p+ K- PHSP; -0.23 n0 anti-K0 PHSP; -0.14 Sigma+ pi- PHSP; -0.14 Sigma- pi+ PHSP; -0.14 Sigma0 pi0 PHSP; -0.0333 Lambda0 pi0 pi0 PHSP; -0.0667 Lambda0 pi+ pi- PHSP; -0.003 Sigma+ pi- pi0 PHSP; -0.003 Sigma- pi+ pi0 PHSP; -0.001 Sigma0 pi0 pi0 PHSP; -0.002 Sigma0 pi+ pi- PHSP; -0.011 Lambda0 gamma PHSP; -Enddecay -# -Decay anti-Lambda(1520)0 -0.23 anti-p- K+ PHSP; -0.23 anti-n0 K0 PHSP; -0.14 anti-Sigma- pi+ PHSP; -0.14 anti-Sigma+ pi- PHSP; -0.14 anti-Sigma0 pi0 PHSP; -0.0333 anti-Lambda0 pi0 pi0 PHSP; -0.0667 anti-Lambda0 pi+ pi- PHSP; -0.003 anti-Sigma+ pi- pi0 PHSP; -0.003 anti-Sigma- pi+ pi0 PHSP; -0.001 anti-Sigma0 pi0 pi0 PHSP; -0.002 anti-Sigma0 pi+ pi- PHSP; -0.011 anti-Lambda0 gamma PHSP; -Enddecay -# -Decay Lambda(1600)0 -0.176 p+ K- PHSP; -0.176 n0 anti-K0 PHSP; -0.216 Sigma+ pi- PHSP; -0.216 Sigma- pi+ PHSP; -0.216 Sigma0 pi0 PHSP; -Enddecay -# -Decay anti-Lambda(1600)0 -0.176 anti-p- K+ PHSP; -0.176 anti-n0 K0 PHSP; -0.216 anti-Sigma+ pi- PHSP; -0.216 anti-Sigma- pi+ PHSP; -0.216 anti-Sigma0 pi0 PHSP; -Enddecay -# -Decay Lambda(1670)0 -0.10 p+ K- PHSP; -0.10 n0 anti-K0 PHSP; -0.16 Sigma+ pi- PHSP; -0.16 Sigma- pi+ PHSP; -0.16 Sigma0 pi0 PHSP; -0.32 Lambda0 eta PHSP; -Enddecay -# -Decay anti-Lambda(1670)0 -0.10 anti-p- K+ PHSP; -0.10 anti-n0 K0 PHSP; -0.16 anti-Sigma+ pi- PHSP; -0.16 anti-Sigma- pi+ PHSP; -0.16 anti-Sigma0 pi0 PHSP; -0.32 anti-Lambda0 eta PHSP; -Enddecay -# -Decay Lambda(1690)0 -0.125 p+ K- PHSP; -0.125 n0 anti-K0 PHSP; -0.10 Sigma+ pi- PHSP; -0.10 Sigma- pi+ PHSP; -0.10 Sigma0 pi0 PHSP; -0.0833 Lambda0 pi0 pi0 PHSP; -0.1667 Lambda0 pi+ pi- PHSP; -0.067 Sigma+ pi- pi0 PHSP; -0.067 Sigma- pi+ pi0 PHSP; -0.022 Sigma0 pi0 pi0 PHSP; -0.044 Sigma0 pi+ pi- PHSP; -Enddecay -# -Decay anti-Lambda(1690)0 -0.125 anti-p- K+ PHSP; -0.125 anti-n0 K0 PHSP; -0.10 anti-Sigma+ pi- PHSP; -0.10 anti-Sigma- pi+ PHSP; -0.10 anti-Sigma0 pi0 PHSP; -0.0833 anti-Lambda0 pi0 pi0 PHSP; -0.1667 anti-Lambda0 pi+ pi- PHSP; -0.067 anti-Sigma+ pi- pi0 PHSP; -0.067 anti-Sigma- pi+ pi0 PHSP; -0.022 anti-Sigma0 pi0 pi0 PHSP; -0.044 anti-Sigma0 pi+ pi- PHSP; -Enddecay -# -Decay Lambda(1800)0 -0.165 p+ K- PHSP; -0.165 n0 anti-K0 PHSP; -0.08 Sigma+ pi- PHSP; -0.08 Sigma- pi+ PHSP; -0.08 Sigma0 pi0 PHSP; -0.003 Sigma*+ pi- PHSP; -0.003 Sigma*- pi+ PHSP; -0.004 Sigma*0 pi0 PHSP; -0.21 p+ K*- PHSP; -0.21 n0 anti-K*0 PHSP; -Enddecay -# -Decay anti-Lambda(1800)0 -0.165 anti-p- K+ PHSP; -0.165 anti-n0 K0 PHSP; -0.08 anti-Sigma+ pi- PHSP; -0.08 anti-Sigma- pi+ PHSP; -0.08 anti-Sigma0 pi0 PHSP; -0.003 anti-Sigma*+ pi- PHSP; -0.003 anti-Sigma*- pi+ PHSP; -0.004 anti-Sigma*0 pi0 PHSP; -0.21 anti-p- K*+ PHSP; -0.21 anti-n0 K*0 PHSP; -Enddecay -# -Decay Lambda(1810)0 -0.165 p+ K- PHSP; -0.165 n0 anti-K0 PHSP; -0.08 Sigma+ pi- PHSP; -0.08 Sigma- pi+ PHSP; -0.08 Sigma0 pi0 PHSP; -0.003 Sigma*+ pi- PHSP; -0.003 Sigma*- pi+ PHSP; -0.004 Sigma*0 pi0 PHSP; -0.21 p+ K*- PHSP; -0.21 n0 anti-K*0 PHSP; -Enddecay -# -Decay anti-Lambda(1810)0 -0.165 anti-p- K+ PHSP; -0.165 anti-n0 K0 PHSP; -0.08 anti-Sigma+ pi- PHSP; -0.08 anti-Sigma- pi+ PHSP; -0.08 anti-Sigma0 pi0 PHSP; -0.003 anti-Sigma*+ pi- PHSP; -0.003 anti-Sigma*- pi+ PHSP; -0.004 anti-Sigma*0 pi0 PHSP; -0.21 anti-p- K*+ PHSP; -0.21 anti-n0 K*0 PHSP; -Enddecay -# -Decay Lambda(1820)0 -0.34 p+ K- PHSP; -0.34 n0 anti-K0 PHSP; -0.06 Sigma+ pi- PHSP; -0.06 Sigma- pi+ PHSP; -0.06 Sigma0 pi0 PHSP; -0.04 Sigma*+ pi- PHSP; -0.04 Sigma*- pi+ PHSP; -0.04 Sigma*0 pi0 PHSP; -0.01 Lambda0 eta PHSP; -0.003 Sigma+ pi- pi0 PHSP; -0.004 Sigma- pi+ pi0 PHSP; -0.001 Sigma0 pi0 pi0 PHSP; -0.002 Sigma0 pi+ pi- PHSP; -Enddecay -# -Decay anti-Lambda(1820)0 -0.34 anti-p- K+ PHSP; -0.34 anti-n0 K0 PHSP; -0.06 anti-Sigma+ pi- PHSP; -0.06 anti-Sigma- pi+ PHSP; -0.06 anti-Sigma0 pi0 PHSP; -0.04 anti-Sigma*+ pi- PHSP; -0.04 anti-Sigma*- pi+ PHSP; -0.04 anti-Sigma*0 pi0 PHSP; -0.01 anti-Lambda0 eta PHSP; -0.003 anti-Sigma+ pi- pi0 PHSP; -0.004 anti-Sigma- pi+ pi0 PHSP; -0.001 anti-Sigma0 pi0 pi0 PHSP; -0.002 anti-Sigma0 pi+ pi- PHSP; -Enddecay -# -Decay Lambda(1830)0 -0.05 p+ K- PHSP; -0.05 n0 anti-K0 PHSP; -0.24 Sigma+ pi- PHSP; -0.24 Sigma- pi+ PHSP; -0.24 Sigma0 pi0 PHSP; -0.06 Sigma*+ pi- PHSP; -0.06 Sigma*- pi+ PHSP; -0.06 Sigma*0 pi0 PHSP; -Enddecay -# -Decay anti-Lambda(1830)0 -0.05 anti-p- K+ PHSP; -0.05 anti-n0 K0 PHSP; -0.24 anti-Sigma+ pi- PHSP; -0.24 anti-Sigma- pi+ PHSP; -0.24 anti-Sigma0 pi0 PHSP; -0.06 anti-Sigma*+ pi- PHSP; -0.06 anti-Sigma*- pi+ PHSP; -0.06 anti-Sigma*0 pi0 PHSP; -Enddecay -# -# -Decay Sigma(1660)0 -0.07 p+ K- PHSP; -0.07 n0 anti-K0 PHSP; -0.16 Lambda0 pi0 PHSP; -0.35 Sigma+ pi- PHSP; -0.35 Sigma- pi+ PHSP; -Enddecay -# -Decay anti-Sigma(1660)0 -0.07 anti-p- K+ PHSP; -0.07 anti-n0 K0 PHSP; -0.16 anti-Lambda0 pi0 PHSP; -0.35 anti-Sigma+ pi- PHSP; -0.35 anti-Sigma- pi+ PHSP; -Enddecay -# -Decay Sigma(1670)0 -0.07 p+ K- PHSP; -0.07 n0 anti-K0 PHSP; -0.16 Lambda0 pi0 PHSP; -0.35 Sigma+ pi- PHSP; -0.35 Sigma- pi+ PHSP; -Enddecay -# -Decay anti-Sigma(1670)0 -0.07 anti-p- K+ PHSP; -0.07 anti-n0 K0 PHSP; -0.16 anti-Lambda0 pi0 PHSP; -0.35 anti-Sigma+ pi- PHSP; -0.35 anti-Sigma- pi+ PHSP; -Enddecay -# -Decay Sigma(1775)0 -0.215 p+ K- PHSP; -0.215 n0 anti-K0 PHSP; -0.20 Lambda0 pi0 PHSP; -0.02 Sigma+ pi- PHSP; -0.02 Sigma- pi+ PHSP; -0.055 Sigma*+ pi- PHSP; -0.055 Sigma*- pi+ PHSP; -0.22 Lambda(1520)0 pi0 PHSP; -Enddecay -# -Decay anti-Sigma(1775)0 -0.215 anti-p- K+ PHSP; -0.215 anti-n0 K0 PHSP; -0.20 anti-Lambda0 pi0 PHSP; -0.02 anti-Sigma+ pi- PHSP; -0.02 anti-Sigma- pi+ PHSP; -0.055 anti-Sigma*+ pi- PHSP; -0.055 anti-Sigma*- pi+ PHSP; -0.22 anti-Lambda(1520)0 pi0 PHSP; -Enddecay -Decay Sigma+ -0.515454300 p+ pi0 PHSP; #[Reconstructed PDG2011] -0.482854300 n0 pi+ PHSP; #[Reconstructed PDG2011] -0.001225905 p+ gamma PHSP; #[Reconstructed PDG2011] -0.000445905 n0 pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000019590 Lambda0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -Decay anti-Sigma- -0.515454300 anti-p- pi0 PHSP; #[Reconstructed PDG2011] -0.482854300 anti-n0 pi- PHSP; #[Reconstructed PDG2011] -0.001225905 anti-p- gamma PHSP; #[Reconstructed PDG2011] -0.000445905 anti-n0 pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000019590 anti-Lambda0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay Delta+ -0.6630 p+ pi0 PHSP; -0.3310 n0 pi+ PHSP; -0.0060 p+ gamma PHSP; -Enddecay -Decay anti-Delta- -0.6630 anti-p- pi0 PHSP; -0.3310 anti-n0 pi- PHSP; -0.0060 anti-p- gamma PHSP; -Enddecay -# -Decay Delta++ -1.0000 p+ pi+ PHSP; -Enddecay -Decay anti-Delta-- -1.0000 anti-p- pi- PHSP; -Enddecay -# -Decay Xi*0 -0.3330 Xi0 pi0 PHSP; -0.6670 Xi- pi+ PHSP; -Enddecay -Decay anti-Xi*0 -0.3330 anti-Xi0 pi0 PHSP; -0.6670 anti-Xi+ pi- PHSP; -Enddecay -# -Decay Delta0 -0.3310 p+ pi- PHSP; -0.6630 n0 pi0 PHSP; -0.0060 n0 gamma PHSP; -Enddecay -Decay anti-Delta0 -0.3310 anti-p- pi+ PHSP; -0.6630 anti-n0 pi0 PHSP; -0.0060 anti-n0 gamma PHSP; -Enddecay -# -Decay Delta- -1.0000 n0 pi- PHSP; -Enddecay -Decay anti-Delta+ -1.0000 anti-n0 pi+ PHSP; -Enddecay -# -Decay Sigma- -0.998015700 n0 pi- PHSP; #[Reconstructed PDG2011] -0.000460000 n0 pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001017000 n0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000450000 n0 mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000057300 Lambda0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -Decay anti-Sigma+ -0.998015700 anti-n0 pi+ PHSP; #[Reconstructed PDG2011] -0.000460000 anti-n0 pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001017000 anti-n0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000450000 anti-n0 mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000057300 anti-Lambda0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay Sigma0 -0.995024876 gamma Lambda0 PHSP; #[Reconstructed PDG2011] -0.004975124 Lambda0 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -Decay anti-Sigma0 -0.995024876 gamma anti-Lambda0 PHSP; #[Reconstructed PDG2011] -0.004975124 anti-Lambda0 e- e+ PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay Sigma*- -0.8800 Lambda0 pi- PHSP; -0.0600 Sigma0 pi- PHSP; -0.0600 Sigma- pi0 PHSP; -Enddecay -Decay anti-Sigma*+ -0.8800 anti-Lambda0 pi+ PHSP; -0.0600 anti-Sigma0 pi+ PHSP; -0.0600 anti-Sigma+ pi0 PHSP; -Enddecay -# -Decay Sigma*+ -0.8800 Lambda0 pi+ PHSP; -0.0600 Sigma+ pi0 PHSP; -0.0600 Sigma0 pi+ PHSP; -Enddecay -Decay anti-Sigma*- -0.8800 anti-Lambda0 pi- PHSP; -0.0600 anti-Sigma- pi0 PHSP; -0.0600 anti-Sigma0 pi- PHSP; -Enddecay -# -Decay Sigma*0 -0.8800 Lambda0 pi0 PHSP; -0.0600 Sigma+ pi- PHSP; -0.0600 Sigma- pi+ PHSP; -Enddecay -Decay anti-Sigma*0 -0.8800 anti-Lambda0 pi0 PHSP; -0.0600 anti-Sigma- pi+ PHSP; -0.0600 anti-Sigma+ pi- PHSP; -Enddecay -# -Decay Xi0 -0.995242400 Lambda0 pi0 PHSP; #[Reconstructed PDG2011] -0.001162400 Lambda0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000007600 Lambda0 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.003330000 Sigma0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000253000 Sigma+ e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000004600 Sigma+ mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -Decay anti-Xi0 -0.995242400 anti-Lambda0 pi0 PHSP; #[Reconstructed PDG2011] -0.001162400 anti-Lambda0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000007600 anti-Lambda0 e- e+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.003330000 anti-Sigma0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000253000 anti-Sigma- e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000004600 anti-Sigma- mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay Xi- -0.998870000 Lambda0 pi- PHSP; #[Reconstructed PDG2011] -0.000127000 Sigma- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000563000 Lambda0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000350000 Lambda0 mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000087000 Sigma0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -Decay anti-Xi+ -0.998870000 anti-Lambda0 pi+ PHSP; #[Reconstructed PDG2011] -0.000127000 anti-Sigma+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000563000 anti-Lambda0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000350000 anti-Lambda0 mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000087000 anti-Sigma0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay Xi*- -0.6670 Xi0 pi- PHSP; -0.3330 Xi- pi0 PHSP; -Enddecay -Decay anti-Xi*+ -0.6670 anti-Xi0 pi+ PHSP; -0.3330 anti-Xi+ pi0 PHSP; -Enddecay -# -Decay Omega- -0.675949296 Lambda0 K- PHSP; #[Reconstructed PDG2011] -0.233949296 Xi0 pi- PHSP; #[Reconstructed PDG2011] -0.084828169 Xi- pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 Xi- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000493521 Xi*0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.004779718 Xi0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -Decay anti-Omega+ -0.675949296 anti-Lambda0 K+ PHSP; #[Reconstructed PDG2011] -0.233949296 anti-Xi0 pi+ PHSP; #[Reconstructed PDG2011] -0.084828169 anti-Xi+ pi0 PHSP; #[Reconstructed PDG2011] -0.000000000 anti-Xi+ pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000493521 anti-Xi*0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.004779718 anti-Xi0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -# -Decay Sigma_c*0 -1.0000 Lambda_c+ pi- PHSP; -Enddecay -CDecay anti-Sigma_c*0 -# -Decay Sigma_c*+ -1.0000 Lambda_c+ pi0 PHSP; -Enddecay -CDecay anti-Sigma_c*- -# -Decay Sigma_c*++ -1.0000 Lambda_c+ pi+ PHSP; -Enddecay -CDecay anti-Sigma_c*-- -# -Decay Xi_c*0 -0.5000 Xi_c0 pi0 PHSP; -0.5000 Xi_c0 gamma PHSP; -Enddecay -CDecay anti-Xi_c*0 -# -Decay Xi_c*+ -0.5000 Xi_c+ pi0 PHSP; -0.5000 Xi_c+ gamma PHSP; -Enddecay -CDecay anti-Xi_c*- -# -Decay Omega_c0 -1.00000 PYTHIA 84; -Enddecay -# -CDecay anti-Omega_c0 -# -Decay Omega_c*0 -1.0000 Omega_c0 gamma PHSP; -Enddecay -# -CDecay anti-Omega_c*0 -# -Decay Xu0 -# X_u^0 -> u anti-u -# -1.0 u anti-u PYTHIA 11; -Enddecay -Decay Xu+ -# X_u^+ -> u anti-d -# -1.0 u anti-d PYTHIA 11; -Enddecay -CDecay Xu- - -#lange - PYTHIA is making h_c mesons - better add a decay -# channel for them. -Decay h_c -0.01 J/psi pi0 PHSP; -0.5 eta_c gamma PHSP; -0.49 rndmflav anti-rndmflav PYTHIA 12; -Enddecay - -# 12/08/03 RJT Update b-baryon decays... -Decay Lambda_b0 -# SemiLeptonic Decays (inclusive BR = 7.7 +/- 1.8%) -0.050000000 Lambda_c+ e- anti-nu_e PHSP; #[Reconstructed PDG2011] -0.006300000 Lambda_c(2593)+ e- anti-nu_e PHSP; #[Reconstructed PDG2011] -0.011000000 Lambda_c(2625)+ e- anti-nu_e PHSP; #[Reconstructed PDG2011] - 0.00000 Sigma_c0 pi+ e- anti-nu_e PHSP; - 0.00000 Sigma_c+ pi0 e- anti-nu_e PHSP; - 0.00000 Sigma_c++ pi- e- anti-nu_e PHSP; - 0.00000 Sigma_c*0 pi+ e- anti-nu_e PHSP; - 0.00000 Sigma_c*+ pi0 e- anti-nu_e PHSP; - 0.00000 Sigma_c*++ pi- e- anti-nu_e PHSP; -# -0.050000000 Lambda_c+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011] -0.006300000 Lambda_c(2593)+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011] -0.011000000 Lambda_c(2625)+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011] - 0.00000 Sigma_c0 pi+ mu- anti-nu_mu PHSP; - 0.00000 Sigma_c+ pi0 mu- anti-nu_mu PHSP; - 0.00000 Sigma_c++ pi- mu- anti-nu_mu PHSP; - 0.00000 Sigma_c*0 pi+ mu- anti-nu_mu PHSP; - 0.00000 Sigma_c*+ pi0 mu- anti-nu_mu PHSP; - 0.00000 Sigma_c*++ pi- mu- anti-nu_mu PHSP; -# - 0.01720 Lambda_c+ tau- anti-nu_tau PHSP; - 0.00430 Lambda_c(2593)+ tau- anti-nu_tau PHSP; - 0.00320 Lambda_c(2625)+ tau- anti-nu_tau PHSP; - 0.00000 Sigma_c0 pi+ tau- anti-nu_tau PHSP; - 0.00000 Sigma_c+ pi0 tau- anti-nu_tau PHSP; - 0.00000 Sigma_c++ pi- tau- anti-nu_tau PHSP; - 0.00000 Sigma_c*0 pi+ tau- anti-nu_tau PHSP; - 0.00000 Sigma_c*+ pi0 tau- anti-nu_tau PHSP; - 0.00000 Sigma_c*++ pi- tau- anti-nu_tau PHSP; -# Hadronic Decays with Lambda_c+ -0.008800000 Lambda_c+ pi- PHSP; #[Reconstructed PDG2011] - 0.02200 Lambda_c+ pi- pi+ pi- PHSP; - 0.00055 Lambda_c+ K- PHSP; - 0.02200 Lambda_c+ D_s- PHSP; - 0.04400 Lambda_c+ D_s*- PHSP; - 0.01000 Lambda_c+ rho- PHSP; - 0.02000 Lambda_c+ a_1- PHSP; - 0.02000 Lambda0 K0 pi+ pi+ pi- pi- PHSP; -# Addition PR LHCb 09 Apr 2004, Lambda_b -> Lambda D0b - 0.00080 Lambda0 anti-D0 PHSP; -# Addition PR LHCb 04/07/04 -0.000006000 p+ K- PHSP; #[Reconstructed PDG2011] -0.000003800 p+ pi- PHSP; #[Reconstructed PDG2011] -# Addition PR LHCb 09 Apr 2004, Lambda_b -> Lambda rho0 and -> Lambda phi - 0.0000050 Lambda0 rho0 PHSP; - 0.0000200 Lambda0 phi PHSP; -# - 0.00047 Lambda0 J/psi PHSP; - 0.00038 Lambda0 psi(2S) PHSP; - 0.00100 Lambda0 eta_c PHSP; - 0.00080 n0 D0 PHSP; -# -# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate - 0.00060 Sigma_c+ pi- PHSP; - 0.00060 Sigma_c0 pi0 PHSP; - 0.00040 Sigma_c0 eta PHSP; - 0.00050 Sigma_c0 eta' PHSP; - 0.00030 Xi_c0 K0 PHSP; - 0.00050 Xi'_c0 K0 PHSP; -# PR LHCb 27 Apr 2004, addition of Pythia decays -0.398544837 anti-u d c ud_0 PYTHIA 48; #[Reconstructed PDG2011] -0.082218903 anti-u c d ud_0 PYTHIA 13; #[Reconstructed PDG2011] -0.072280354 anti-c s c ud_0 PYTHIA 13; #[Reconstructed PDG2011] -0.010842053 anti-u d u ud_0 PYTHIA 42; #[Reconstructed PDG2011] -0.010842053 anti-c s u ud_0 PYTHIA 42; #[Reconstructed PDG2011] -# PR LHCb 2 Dec 2004, add Lambda gamma decay mode - 0.000065 Lambda0 gamma HELAMP 1. 0. 0. 0. ; - 0.000059 Lambda(1520)0 gamma PHSP ; - 0.000056 Lambda(1670)0 gamma HELAMP 1. 0. 0. 0. ; - 0.000057 Lambda(1600)0 gamma HELAMP 1. 0. 0. 0. ; -0.056000000 Lambda_c+ pi+ pi- mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] -0.056000000 Lambda_c+ pi+ pi- e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay - -Decay anti-Lambda_b0 -# SemiLeptonic Decays (inclusive BR = 7.7 +/- 1.8%) -0.050000000 anti-Lambda_c- e+ nu_e PHSP; #[Reconstructed PDG2011] -0.006300000 anti-Lambda_c(2593)- e+ nu_e PHSP; #[Reconstructed PDG2011] -0.011000000 anti-Lambda_c(2625)- e+ nu_e PHSP; #[Reconstructed PDG2011] - 0.00000 anti-Sigma_c0 pi- e+ nu_e PHSP; - 0.00000 anti-Sigma_c- pi0 e+ nu_e PHSP; - 0.00000 anti-Sigma_c-- pi+ e+ nu_e PHSP; - 0.00000 anti-Sigma_c*0 pi- e+ nu_e PHSP; - 0.00000 anti-Sigma_c*- pi0 e+ nu_e PHSP; - 0.00000 anti-Sigma_c*-- pi+ e+ nu_e PHSP; -# -0.050000000 anti-Lambda_c- mu+ nu_mu PHSP; #[Reconstructed PDG2011] -0.006300000 anti-Lambda_c(2593)- mu+ nu_mu PHSP; #[Reconstructed PDG2011] -0.011000000 anti-Lambda_c(2625)- mu+ nu_mu PHSP; #[Reconstructed PDG2011] - 0.00000 anti-Sigma_c0 pi- mu+ nu_mu PHSP; - 0.00000 anti-Sigma_c- pi0 mu+ nu_mu PHSP; - 0.00000 anti-Sigma_c-- pi+ mu+ nu_mu PHSP; - 0.00000 anti-Sigma_c*0 pi- mu+ nu_mu PHSP; - 0.00000 anti-Sigma_c*- pi0 mu+ nu_mu PHSP; - 0.00000 anti-Sigma_c*-- pi+ mu+ nu_mu PHSP; -# - 0.01720 anti-Lambda_c- tau+ nu_tau PHSP; - 0.00430 anti-Lambda_c(2593)- tau+ nu_tau PHSP; - 0.00320 anti-Lambda_c(2625)- tau+ nu_tau PHSP; - 0.00000 anti-Sigma_c0 pi- tau+ nu_tau PHSP; - 0.00000 anti-Sigma_c- pi0 tau+ nu_tau PHSP; - 0.00000 anti-Sigma_c-- pi+ tau+ nu_tau PHSP; - 0.00000 anti-Sigma_c*0 pi- tau+ nu_tau PHSP; - 0.00000 anti-Sigma_c*- pi0 tau+ nu_tau PHSP; - 0.00000 anti-Sigma_c*-- pi+ tau+ nu_tau PHSP; -# Hadronic Decays with anti-Lambda_c- -0.008800000 anti-Lambda_c- pi+ PHSP; #[Reconstructed PDG2011] - 0.02200 anti-Lambda_c- pi+ pi+ pi- PHSP; - 0.00055 anti-Lambda_c- K+ PHSP; - 0.02200 anti-Lambda_c- D_s+ PHSP; - 0.04400 anti-Lambda_c- D_s*+ PHSP; - 0.01000 anti-Lambda_c- rho+ PHSP; - 0.02000 anti-Lambda_c- a_1+ PHSP; - 0.02000 Lambda0 anti-K0 pi- pi- pi+ pi+ PHSP; - # Addition LHCb PR 09 Apr 2004 Lambda_b -> Lambda D0b - 0.00080 anti-Lambda0 D0 PHSP; - # PR LHCb 04/07/04 Addition -0.000006000 anti-p- K+ PHSP; #[Reconstructed PDG2011] -0.000003800 anti-p- pi+ PHSP; #[Reconstructed PDG2011] -# Addition PR LHCb 09 Apr 2004, Lambda_b -> Lambda rho0 and -> Lambda phi - 0.0000050 anti-Lambda0 rho0 PHSP; - 0.0000200 anti-Lambda0 phi PHSP; -# - 0.00047 anti-Lambda0 J/psi PHSP; - 0.00038 anti-Lambda0 psi(2S) PHSP; - 0.001000 anti-Lambda0 eta_c PHSP; - 0.00080 anti-n0 anti-D0 PHSP; -# -# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate - 0.00060 anti-Sigma_c- pi+ PHSP; - 0.00060 anti-Sigma_c0 pi0 PHSP; - 0.00040 anti-Sigma_c0 eta PHSP; - 0.00050 anti-Sigma_c0 eta' PHSP; - 0.00030 anti-Xi_c0 anti-K0 PHSP; - 0.00050 anti-Xi'_c0 anti-K0 PHSP; -# PR LHCb 27 Apr 2004, addition of Pythia decays -0.398544837 u anti-d anti-c anti-ud_0 PYTHIA 48; #[Reconstructed PDG2011] -0.082218903 u anti-c anti-d anti-ud_0 PYTHIA 13; #[Reconstructed PDG2011] -0.072280354 c anti-s anti-c anti-ud_0 PYTHIA 13; #[Reconstructed PDG2011] -0.010842053 u anti-d anti-u anti-ud_0 PYTHIA 42; #[Reconstructed PDG2011] -0.010842053 c anti-s anti-u anti-ud_0 PYTHIA 42; #[Reconstructed PDG2011] -# PR LHCb 2 Dec 2004 add Lambda gamma - 0.000065 anti-Lambda0 gamma HELAMP 0. 0. 1. 0. ; - 0.000059 anti-Lambda(1520)0 gamma PHSP ; - 0.000056 anti-Lambda(1670)0 gamma HELAMP 0. 0. 1. 0. ; - 0.000057 anti-Lambda(1600)0 gamma HELAMP 0. 0. 1. 0. ; -0.056000000 anti-Lambda_c- pi- pi+ mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] -0.056000000 anti-Lambda_c- pi- pi+ e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay - -Decay Xi_b- -# SemiLeptonic Decays - 0.05460 Xi_c0 e- anti-nu_e PHSP; - 0.05460 Xi_c0 mu- anti-nu_mu PHSP; - 0.02000 Xi_c0 tau- anti-nu_tau PHSP; -# Hadronic Decays with Xi_c0 - 0.00600 Xi_c0 pi- PHSP; - 0.02200 Xi_c0 pi- pi+ pi- PHSP; - 0.00055 Xi_c0 K- PHSP; - 0.02200 Xi_c0 D_s- PHSP; - 0.00047 Xi- J/psi PHSP; -# added by D.Litvintsev 12/8/03: - 0.00038 Xi- psi(2S) PHSP; - 0.00018 D0 Lambda0 pi- PHSP; - 0.00020 Sigma_c0 K- PHSP; - 0.00020 Omega_c0 K- PHSP; -# -# aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.38757 d anti-u d cs_0 PYTHIA 13; -0.16995 d anti-u d cs_1 PYTHIA 13; -0.06335 s anti-u d cs_0 PYTHIA 13; -0.00568 d anti-u s cs_1 PYTHIA 13; -0.00797 d anti-u s cs_0 PYTHIA 13; -0.06148 s anti-c d cs_0 PYTHIA 13; -0.06918 d anti-u d cd_0 PYTHIA 13; -0.03999 s anti-c d cd_0 PYTHIA 13; -0.00865 d anti-u d su_0 PYTHIA 13; -0.00500 s anti-c d su_0 PYTHIA 13; -Enddecay - -Decay anti-Xi_b+ -# SemiLeptonic Decays - 0.05460 anti-Xi_c0 e+ nu_e PHSP; - 0.05460 anti-Xi_c0 mu+ nu_mu PHSP; - 0.02000 anti-Xi_c0 tau+ nu_tau PHSP; -# Hadronic Decays with anti-Xi_c0 - 0.00600 anti-Xi_c0 pi+ PHSP; - 0.02200 anti-Xi_c0 pi+ pi+ pi- PHSP; - 0.00055 anti-Xi_c0 K+ PHSP; - 0.02200 anti-Xi_c0 D_s+ PHSP; - 0.00047 anti-Xi+ J/psi PHSP; -# added by D.Litvintsev 12/8/03: - 0.00038 anti-Xi+ psi(2S) PHSP; - 0.00018 anti-D0 anti-Lambda0 pi+ PHSP; - 0.00020 anti-Sigma_c0 K+ PHSP; - 0.00020 anti-Omega_c0 K+ PHSP; -# aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.38757 u anti-d anti-d anti-cs_0 PYTHIA 13; -0.16995 u anti-d anti-d anti-cs_1 PYTHIA 13; -0.06335 u anti-s anti-d anti-cs_0 PYTHIA 13; -0.00568 u anti-d anti-s anti-cs_1 PYTHIA 13; -0.00797 u anti-d anti-s anti-cs_0 PYTHIA 13; -0.06148 c anti-s anti-d anti-cs_0 PYTHIA 13; -0.06918 u anti-d anti-d anti-cd_0 PYTHIA 13; -0.03999 c anti-s anti-d anti-cd_0 PYTHIA 13; -0.00865 u anti-d anti-d anti-su_0 PYTHIA 13; -0.00500 c anti-s anti-d anti-su_0 PYTHIA 13; -Enddecay - -Decay Xi_b0 -# SemiLeptonic Decays - 0.05460 Xi_c+ e- anti-nu_e PHSP; - 0.05460 Xi_c+ mu- anti-nu_mu PHSP; - 0.02000 Xi_c+ tau- anti-nu_tau PHSP; -# Hadronic Decays with Xi_c+ - 0.00600 Xi_c+ pi- PHSP; - 0.02200 Xi_c+ pi- pi+ pi- PHSP; - 0.00055 Xi_c+ K- PHSP; - 0.02200 Xi_c+ D_s- PHSP; - 0.00047 Xi0 J/psi PHSP; -# added by D.Litvintsev 12/8/03: - 0.00020 D0 Lambda0 PHSP; - 0.00010 Lambda_c+ K- PHSP; - 0.00020 Sigma_c0 anti-K0 PHSP; - 0.00020 Omega_c0 K0 PHSP; -# -# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate - 0.00020 Xi'_c+ pi- PHSP; - 0.00003 Xi_c0 pi0 PHSP; - 0.00015 Xi_c0 eta PHSP; - 0.00004 Xi_c0 eta' PHSP; - 0.00020 Xi'_c0 pi0 PHSP; - 0.00020 Xi'_c0 eta PHSP; - 0.00030 Xi'_c0 eta' PHSP; - 0.00040 Sigma_c+ K- PHSP; -# aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.58591 d anti-u s cu_0 PYTHIA 13; -0.01363 s anti-u s cu_1 PYTHIA 13; -0.09539 s anti-u s cc_1 PYTHIA 13; -0.10900 s anti-u d cu_1 PYTHIA 13; -0.01363 d anti-u d uu_1 PYTHIA 13; -Enddecay - -Decay anti-Xi_b0 - 0.05460 anti-Xi_c- e+ nu_e PHSP; - 0.05460 anti-Xi_c- mu+ nu_mu PHSP; - 0.02000 anti-Xi_c- tau+ nu_tau PHSP; -# Hadronic Decays with anti-Xi_c- - 0.00600 anti-Xi_c- pi+ PHSP; - 0.02200 anti-Xi_c- pi+ pi+ pi- PHSP; - 0.00055 anti-Xi_c- K+ PHSP; - 0.02200 anti-Xi_c- D_s+ PHSP; - 0.00047 anti-Xi0 J/psi PHSP; -# added by D.Litvintsev 12/8/03: - 0.00020 anti-D0 anti-Lambda0 PHSP; - 0.00010 anti-Lambda_c- K+ PHSP; - 0.00020 anti-Sigma_c0 K0 PHSP; - 0.00020 anti-Omega_c0 anti-K0 PHSP; -# -# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate - 0.00020 anti-Xi'_c- pi+ PHSP; - 0.00003 anti-Xi_c0 pi0 PHSP; - 0.00015 anti-Xi_c0 eta PHSP; - 0.00004 anti-Xi_c0 eta' PHSP; - 0.00020 anti-Xi'_c0 pi0 PHSP; - 0.00020 anti-Xi'_c0 eta PHSP; - 0.00030 anti-Xi'_c0 eta' PHSP; - 0.00040 anti-Sigma_c- K+ PHSP; -# aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.58591 u anti-d anti-s anti-cu_0 PYTHIA 13; -0.01363 u anti-s anti-s anti-cu_1 PYTHIA 13; -0.09539 u anti-s anti-s anti-cc_1 PYTHIA 13; -0.10900 u anti-s anti-d anti-cu_1 PYTHIA 13; -0.01363 u anti-d anti-d anti-uu_1 PYTHIA 13; -Enddecay - -# added by D.Litvintsev 12/8/03: -Decay Omega_b- -# SemiLeptonic Decays - 0.05460 Omega_c0 e- anti-nu_e PHSP; - 0.05460 Omega_c0 mu- anti-nu_mu PHSP; - 0.02000 Omega_c0 tau- anti-nu_tau PHSP; -# Hadronic Decays with Xi_c+ - 0.00600 Omega_c0 pi- PHSP; - 0.02200 Omega_c0 pi- pi+ pi- PHSP; - 0.00055 Omega_c0 K- PHSP; - 0.02200 Omega_c0 D_s- PHSP; - 0.0011 D0 Xi- PHSP; -# - 0.00047 Omega- J/psi PHSP; - 0.00038 Omega- psi(2S) PHSP; -# aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.68192 d anti-u s cs_0 PYTHIA 13; -0.10910 d anti-u d cs_0 PYTHIA 13; -0.02728 d anti-u s su_0 PYTHIA 13; -Enddecay - -Decay anti-Omega_b+ -# SemiLeptonic Decays - 0.05460 anti-Omega_c0 e+ nu_e PHSP; - 0.05460 anti-Omega_c0 mu+ nu_mu PHSP; - 0.02000 anti-Omega_c0 tau+ nu_tau PHSP; -# Hadronic Decays with Xi_c+ - 0.00600 anti-Omega_c0 pi+ PHSP; - 0.02200 anti-Omega_c0 pi+ pi+ pi- PHSP; - 0.00055 anti-Omega_c0 K+ PHSP; - 0.02200 anti-Omega_c0 D_s+ PHSP; - 0.0011 anti-D0 anti-Xi+ PHSP; -# - 0.00047 anti-Omega+ J/psi PHSP; - 0.00038 anti-Omega+ psi(2S) PHSP; -# aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.68192 u anti-d anti-s anti-cs_0 PYTHIA 13; -0.10910 u anti-d anti-d anti-cs_0 PYTHIA 13; -0.02728 u anti-d anti-s anti-su_0 PYTHIA 13; -Enddecay - - -Decay Sigma_b+ - 1.00000 Lambda_b0 pi+ PHSP; -Enddecay -Decay anti-Sigma_b- - 1.00000 anti-Lambda_b0 pi- PHSP; -Enddecay - -Decay Sigma_b- - 1.00000 Lambda_b0 pi- PHSP; -Enddecay -Decay anti-Sigma_b+ - 1.00000 anti-Lambda_b0 pi+ PHSP; -Enddecay - -Decay Sigma_b0 - 1.00000 Lambda_b0 gamma PHOTOS PHSP; -Enddecay -Decay anti-Sigma_b0 - 1.00000 anti-Lambda_b0 gamma PHOTOS PHSP; -Enddecay - - -# -# B_c Mesons -# - -Decay B_c- -0.01600 tau- anti-nu_tau SLN; -# -# SemiLeptonic Decays -0.01900 J/psi e- anti-nu_e PHOTOS PHSP; -0.00094 psi(2S) e- anti-nu_e PHOTOS PHSP; -0.00750 eta_c e- anti-nu_e PHOTOS PHSP; -0.00020 eta_c(2S) e- anti-nu_e PHOTOS PHSP; -0.00004 anti-D0 e- anti-nu_e PHOTOS PHSP; -0.00018 anti-D*0 e- anti-nu_e PHOTOS PHSP; -0.04030 anti-B_s0 e- anti-nu_e PHOTOS PHSP; -0.05060 anti-B_s*0 e- anti-nu_e PHOTOS PHSP; -0.00340 anti-B0 e- anti-nu_e PHOTOS PHSP; -0.00580 anti-B*0 e- anti-nu_e PHOTOS PHSP; -# -0.01900 J/psi mu- anti-nu_mu PHOTOS PHSP; -0.00094 psi(2S) mu- anti-nu_mu PHOTOS PHSP; -0.00750 eta_c mu- anti-nu_mu PHOTOS PHSP; -0.00020 eta_c(2S) mu- anti-nu_mu PHOTOS PHSP; -0.00004 anti-D0 mu- anti-nu_mu PHOTOS PHSP; -0.00018 anti-D*0 mu- anti-nu_mu PHOTOS PHSP; -0.04030 anti-B_s0 mu- anti-nu_mu PHOTOS PHSP; -0.05060 anti-B_s*0 mu- anti-nu_mu PHOTOS PHSP; -0.00340 anti-B0 mu- anti-nu_mu PHOTOS PHSP; -0.00580 anti-B*0 mu- anti-nu_mu PHOTOS PHSP; -# -0.00480 J/psi tau- anti-nu_tau PHSP; -0.00008 psi(2S) tau- anti-nu_tau PHSP; -0.00230 eta_c tau- anti-nu_tau PHSP; -0.000016 eta_c(2S) tau- anti-nu_tau PHSP; -0.00002 anti-D0 tau- anti-nu_tau PHSP; -0.00008 anti-D*0 tau- anti-nu_tau PHSP; -# -# -# Hadronic Decays -0.00200 eta_c pi- PHSP; -0.00420 rho- eta_c SVS; -0.00013 eta_c K- PHSP; -0.00020 K*- eta_c SVS; -0.00130 J/psi pi- SVS; -0.00400 J/psi rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00011 J/psi K- SVS; -0.00022 J/psi K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.000053 D- D0 PHSP; -0.000075 D*0 D- SVS; -0.000049 D*- D0 SVS; -0.00033 D*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000048 D_s- D0 PHSP; -0.0000071 D*0 D_s- SVS; -0.0000045 D_s*- D0 SVS; -0.000026 D_s*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.0000003 D- anti-D0 PHSP; -0.0000003 anti-D*0 D- SVS; -0.0000004 D*- anti-D0 SVS; -0.0000016 anti-D*0 D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000066 D_s- anti-D0 PHSP; -0.0000063 anti-D*0 D_s- SVS; -0.0000085 D_s*- anti-D0 SVS; -0.0000404 D_s*- anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.00280 eta_c D_s- PHSP; -0.00270 D_s*- eta_c SVS; -0.00015 eta_c D- PHSP; -0.00010 D*- eta_c SVS; -0.00170 J/psi D_s- SVS; -0.00670 J/psi D_s*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00009 J/psi D- SVS; -0.00028 J/psi D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.16400 anti-B_s0 pi- PHSP; -0.07200 rho- anti-B_s0 SVS; -0.01060 anti-B_s0 K- PHSP; -0.00000 K*- anti-B_s0 SVS; -0.06500 anti-B_s*0 pi- SVS; -0.20200 anti-B_s*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00370 anti-B_s*0 K- SVS; -0.00000 anti-B_s*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.01060 anti-B0 pi- PHSP; -0.00960 rho- anti-B0 SVS; -0.00070 anti-B0 K- PHSP; -0.00015 K*- anti-B0 SVS; -0.00950 anti-B*0 pi- SVS; -0.02570 anti-B*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00055 anti-B*0 K- SVS; -0.00058 anti-B*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00037 B- pi0 PHSP; -0.00034 rho0 B- SVS; -0.01980 B- K0 PHSP; -0.00430 K*0 B- SVS; -0.00033 B*- pi0 SVS; -0.00090 B*- rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.01600 B*- K0 SVS; -0.01670 B*- K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# PR LHCb 09 Apr 2004 Add B_c+ -> rho0 pi+ - 0.00002 rho0 pi- SVS; - 0.06005 anti-c s PYTHIA 11; -# PR LHCb 27 Apr 2004 Add Pythia Modes -# -# ash 10/27/03 Do not if this is correct but filling out with unknown cs -#0.0200235 cs_0 anti-uu_0 PYTHIA 23; -#0.0400470 cs_1 anti-uu_1 PYTHIA 23; -# -Enddecay - -# 09/15/03 A. Sanchez: Using BR's from hep-ph/0308214 -# -# Total Br = 0.939865 + .06135 cs -Decay B_c+ -0.01600 tau+ nu_tau SLN; -# -# SemiLeptonic Decays -0.01900 J/psi e+ nu_e PHOTOS PHSP; -0.00094 psi(2S) e+ nu_e PHOTOS PHSP; -0.00750 eta_c e+ nu_e PHOTOS PHSP; -0.00020 eta_c(2S) e+ nu_e PHOTOS PHSP; -0.00004 D0 e+ nu_e PHOTOS PHSP; -0.00018 D*0 e+ nu_e PHOTOS PHSP; -0.04030 B_s0 e+ nu_e PHOTOS PHSP; -0.05060 B_s*0 e+ nu_e PHOTOS PHSP; -0.00340 B0 e+ nu_e PHOTOS PHSP; -0.00580 B*0 e+ nu_e PHOTOS PHSP; -# -0.01900 J/psi mu+ nu_mu PHOTOS PHSP; -0.00094 psi(2S) mu+ nu_mu PHOTOS PHSP; -0.00750 eta_c mu+ nu_mu PHOTOS PHSP; -0.00020 eta_c(2S) mu+ nu_mu PHOTOS PHSP; -0.00004 D0 mu+ nu_mu PHOTOS PHSP; -0.00018 D*0 mu+ nu_mu PHOTOS PHSP; -0.04030 B_s0 mu+ nu_mu PHOTOS PHSP; -0.05060 B_s*0 mu+ nu_mu PHOTOS PHSP; -0.00340 B0 mu+ nu_mu PHOTOS PHSP; -0.00580 B*0 mu+ nu_mu PHOTOS PHSP; -# -0.00480 J/psi tau+ nu_tau PHSP; -0.00008 psi(2S) tau+ nu_tau PHSP; -0.00230 eta_c tau+ nu_tau PHSP; -0.000016 eta_c(2S) tau+ nu_tau PHSP; -0.00002 D0 tau+ nu_tau PHSP; -0.00008 D*0 tau+ nu_tau PHSP; -# -# Hadronic Decays -0.00200 eta_c pi+ PHSP; -0.00420 rho+ eta_c SVS; -0.00013 eta_c K+ PHSP; -0.00020 K*+ eta_c SVS; -0.00130 J/psi pi+ SVS; -0.00400 J/psi rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00011 J/psi K+ SVS; -0.00022 J/psi K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.000053 D+ anti-D0 PHSP; -0.000075 anti-D*0 D+ SVS; -0.000049 D*+ anti-D0 SVS; -0.00033 D*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000048 D_s+ anti-D0 PHSP; -0.0000071 anti-D*0 D_s+ SVS; -0.0000045 D_s*+ anti-D0 SVS; -0.000026 D_s*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.0000003 D+ D0 PHSP; -0.0000003 D*0 D+ SVS; -0.0000004 D*+ D0 SVS; -0.0000016 D*0 D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000066 D_s+ D0 PHSP; -0.0000063 D*0 D_s+ SVS; -0.0000085 D_s*+ D0 SVS; -0.0000404 D_s*+ D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.00280 eta_c D_s+ PHSP; -0.00270 D_s*+ eta_c SVS; -0.00015 eta_c D+ PHSP; -0.00010 D*+ eta_c SVS; -0.00170 J/psi D_s+ SVS; -0.00670 J/psi D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00009 J/psi D+ SVS; -0.00028 J/psi D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.16400 B_s0 pi+ PHSP; -0.07200 rho+ B_s0 SVS; -0.01060 B_s0 K+ PHSP; -0.00000 K*+ B_s0 SVS; -0.06500 B_s*0 pi+ SVS; -0.20200 B_s*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00370 B_s*0 K+ SVS; -0.00000 B_s*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.01060 B0 pi+ PHSP; -0.00960 rho+ B0 SVS; -0.00070 B0 K+ PHSP; -0.00015 K*+ B0 SVS; -0.00950 B*0 pi+ SVS; -0.02570 B*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00055 B*0 K+ SVS; -0.00058 B*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00037 B+ pi0 PHSP; -0.00034 rho0 B+ SVS; -0.01980 B+ anti-K0 PHSP; -0.00430 K*0 B+ SVS; -0.00033 B*+ pi0 SVS; -0.00090 B*+ rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.01600 B*+ anti-K0 SVS; -0.01670 B*+ K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# PR LHCb 09 Apr 2004 Add B_c+ -> rho0 pi+ - 0.00002 rho0 pi+ SVS; - 0.06005 c anti-s PYTHIA 11; -# PR LHCb 27 Apr 2004 Add Pythia Modes -# -# ash 10/27/03 Do not if this is correct but filling out with unknown cs -#0.0200235 anti-cs_0 uu_0 PYTHIA 23; -#0.0400470 anti-cs_1 uu_1 PYTHIA 23; -# -Enddecay - - -# Add excited Lambda_c decays (R.J. Tesarek 12/9/03) -# Just a guess for the last two BR [Lambda_c(2593)+]. -Decay Lambda_c(2593)+ -0.096585366 Sigma_c++ pi- PHSP; #[Reconstructed PDG2011] -0.096585366 Sigma_c0 pi+ PHSP; #[Reconstructed PDG2011] -0.190000000 Lambda_c+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.096585366 Sigma_c+ pi0 PHSP; #[Reconstructed PDG2011] -0.036219512 Lambda_c+ pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.004024390 Lambda_c+ gamma PHSP; #[Reconstructed PDG2011] -0.240000000 Sigma_c*++ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.240000000 Sigma_c*0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -Decay anti-Lambda_c(2593)- -0.096585366 anti-Sigma_c-- pi+ PHSP; #[Reconstructed PDG2011] -0.096585366 anti-Sigma_c0 pi- PHSP; #[Reconstructed PDG2011] -0.190000000 anti-Lambda_c- pi- pi+ PHSP; #[Reconstructed PDG2011] -0.096585366 anti-Sigma_c- pi0 PHSP; #[Reconstructed PDG2011] -0.036219512 anti-Lambda_c- pi0 pi0 PHSP; #[Reconstructed PDG2011] -0.004024390 anti-Lambda_c- gamma PHSP; #[Reconstructed PDG2011] -0.240000000 anti-Sigma_c*-- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] -0.240000000 anti-Sigma_c*0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay -# -Decay Lambda_c(2625)+ -0.670000000 Lambda_c+ pi+ pi- PHSP; #[Reconstructed PDG2011] -0.320294118 Lambda_c+ pi0 PHSP; #[Reconstructed PDG2011] -0.009705882 Lambda_c+ gamma PHSP; #[Reconstructed PDG2011] -Enddecay -Decay anti-Lambda_c(2625)- -0.670000000 anti-Lambda_c- pi- pi+ PHSP; #[Reconstructed PDG2011] -0.320294118 anti-Lambda_c- pi0 PHSP; #[Reconstructed PDG2011] -0.009705882 anti-Lambda_c- gamma PHSP; #[Reconstructed PDG2011] -Enddecay - -# Add excited B hadrons (LHCb PR 10/03/04) -# Reference : Pythia 6.205 decay table -# PDG Id = 5312 -Decay Xi'_b- - 1.0000 Xi_b- gamma PHSP; -Enddecay -Decay anti-Xi'_b+ - 1.0000 anti-Xi_b+ gamma PHSP; -Enddecay -# PDG Id = 5322 -Decay Xi'_b0 - 1.0000 Xi_b0 gamma PHSP; -Enddecay -Decay anti-Xi'_b0 - 1.0000 anti-Xi_b0 gamma PHSP; -Enddecay -# PDG Id = 10521 -Decay B_0*+ - 0.6670 B0 pi+ PHSP; - 0.3330 B+ pi0 PHSP; -Enddecay -Decay B_0*- - 0.6670 anti-B0 pi- PHSP; - 0.3330 B- pi0 PHSP; -Enddecay -# PDG Id = 20523 Broad : S wave -Decay B'_1+ - 0.6670 B*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.3330 B*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay B'_1- - 0.6670 anti-B*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.3330 B*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# PDG Id = 10523 Narrow : D wave -Decay B_1+ - 0.6670 B*0 pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.3330 B*+ pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -Decay B_1- - 0.6670 anti-B*0 pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.3330 B*- pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -# PDG Id = 525 Narrow : D wave -Decay B_2*+ - 0.3000 B0 pi+ TSS; - 0.1500 B+ pi0 TSS; - 0.1600 B*0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.0800 B*+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.1300 B*0 pi+ pi0 PHSP; - 0.0600 B*+ pi+ pi- PHSP; - 0.0800 B0 pi+ pi0 PHSP; - 0.0400 B+ pi+ pi- PHSP; -Enddecay -Decay B_2*- - 0.3000 anti-B0 pi- TSS; - 0.1500 B- pi0 TSS; - 0.1600 anti-B*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.0800 B*- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.1300 anti-B*0 pi- pi0 PHSP; - 0.0600 B*- pi- pi+ PHSP; - 0.0800 anti-B0 pi- pi0 PHSP; - 0.0400 B- pi- pi+ PHSP; -Enddecay -# PDG Id = 10511 -Decay B_0*0 - 0.6670 B+ pi- PHSP; - 0.3330 B0 pi0 PHSP; -Enddecay -Decay anti-B_0*0 - 0.6670 B- pi+ PHSP; - 0.3330 anti-B0 pi0 PHSP; -Enddecay -# PDG Id = 20513 Broad : S wave -Decay B'_10 - 0.6670 B*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.3330 B*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay anti-B'_10 - 0.6670 B*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.3330 anti-B*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# PDG Id = 10513 Narrow : D wave -Decay B_10 - 0.6670 B*+ pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.3330 B*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -Decay anti-B_10 - 0.6670 B*- pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.3330 anti-B*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -# PDG Id = 515 -Decay B_2*0 - 0.3000 B+ pi- TSS; - 0.1500 B0 pi0 TSS; - 0.1600 B*+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.0800 B*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.1300 B*+ pi- pi0 PHSP; - 0.0600 B*0 pi+ pi- PHSP; - 0.0800 B+ pi- pi0 PHSP; - 0.0400 B0 pi+ pi- PHSP; -Enddecay -Decay anti-B_2*0 - 0.3000 B- pi+ TSS; - 0.1500 anti-B0 pi0 TSS; - 0.1600 B*- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.0800 anti-B*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.1300 B*- pi+ pi0 PHSP; - 0.0600 anti-B*0 pi- pi+ PHSP; - 0.0800 B- pi+ pi0 PHSP; - 0.0400 anti-B0 pi- pi+ PHSP; -Enddecay -# PDG Id = 10531 -Decay B_s0*0 - 0.5000 B+ K- PHSP; - 0.5000 B0 anti-K0 PHSP; -Enddecay -Decay anti-B_s0*0 - 0.5000 B- K+ PHSP; - 0.5000 anti-B0 K0 PHSP; -Enddecay -# PDG Id = 20533 Broad : S wave -Decay B'_s10 - 0.5000 B*+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.5000 B*0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay anti-B'_s10 - 0.5000 B*- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.5000 anti-B*0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -# PDG Id = 10533 Narrow : D wave -Decay B_s10 - 0.5000 B*+ K- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.5000 B*0 anti-K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -Decay anti-B_s10 - 0.5000 B*- K+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.5000 anti-B*0 K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -# PDG Id = 535 Narrow : D wave -Decay B_s2*0 - 0.3000 B+ K- TSS; - 0.3000 B0 anti-K0 TSS; - 0.2000 B*+ K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.2000 B*0 anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay -Decay anti-B_s2*0 - 0.3000 B- K+ TSS; - 0.3000 anti-B0 K0 TSS; - 0.2000 B*- K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.2000 anti-B*0 K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay -# PDG Id = 543 -Decay B_c*+ - 1.0000 B_c+ gamma VSP_PWAVE; -Enddecay -Decay B_c*- - 1.0000 B_c- gamma VSP_PWAVE; -Enddecay -# PDG Id = 545 Narrow : D wave -Decay B_c2*+ - 0.3000 B0 D+ TSS; - 0.3000 B+ D0 TSS; - 0.2000 B*0 D+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.2000 B*+ D0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay -Decay B_c2*- - 0.3000 anti-B0 D- TSS; - 0.3000 B- anti-D0 TSS; - 0.2000 anti-B*0 D- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; - 0.2000 B*- anti-D0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -Enddecay -# PDG Id = 5114 -Decay Sigma_b*- - 1.0000 Lambda_b0 pi- PHSP; -Enddecay -Decay anti-Sigma_b*+ - 1.0000 anti-Lambda_b0 pi+ PHSP; -Enddecay -# PDG Id = 5224 -Decay Sigma_b*+ - 1.0000 Lambda_b0 pi+ PHSP; -Enddecay -Decay anti-Sigma_b*- - 1.0000 anti-Lambda_b0 pi- PHSP; -Enddecay -# PDG Id = 5214 -Decay Sigma_b*0 - 1.0000 Lambda_b0 pi0 PHSP; -Enddecay -Decay anti-Sigma_b*0 - 1.0000 anti-Lambda_b0 pi0 PHSP; -Enddecay -# PDG Id = 5314 -Decay Xi_b*- - 1.0000 Xi_b- gamma PHSP; -Enddecay -Decay anti-Xi_b*+ - 1.0000 anti-Xi_b+ gamma PHSP; -Enddecay -# PDG Id = 5324 -Decay Xi_b*0 - 1.0000 Xi_b0 gamma PHSP; -Enddecay -Decay anti-Xi_b*0 - 1.0000 anti-Xi_b0 gamma PHSP; -Enddecay -# PDG Id = 5334 -Decay Omega_b*- - 1.0000 Omega_b- gamma PHSP; -Enddecay -Decay anti-Omega_b*+ - 1.0000 anti-Omega_b+ gamma PHSP; -Enddecay -# PDG Id = 10541 -Decay B_c0*+ - 0.5000 B0 D+ PHSP; - 0.5000 B+ D0 PHSP; -Enddecay -Decay B_c0*- - 0.5000 anti-B0 D- PHSP; - 0.5000 B- anti-D0 PHSP; -Enddecay -# PDG Id = 10543 Narrow : D wave -Decay B_c1+ - 0.5000 B*0 D+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.5000 B*+ D0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -Decay B_c1- - 0.5000 anti-B*0 D- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; - 0.5000 B*- anti-D0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; -Enddecay -# PDG Id = 20543 Broad : S wave -Decay B'_c1+ - 0.5000 B*0 D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.5000 B*+ D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay -Decay B'_c1- - 0.5000 anti-B*0 D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; - 0.5000 B*- anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -Enddecay - -# Excited charmed Baryons LHCb PR 3-05-2006 -Decay Xi_cc*++ - 0.08 e+ nu_e Xi_c+ PHSP ; - 0.08 mu+ nu_mu Xi_c+ PHSP ; - 0.51 u anti-d s cu_0 PYTHIA 11 ; - 0.25 u anti-d s cu_1 PYTHIA 11 ; - 0.05 u anti-s s cu_0 PYTHIA 11 ; - 0.03 u anti-s s cu_1 PYTHIA 11 ; -Enddecay - -Decay anti-Xi_cc*-- - 0.08 e- anti-nu_e anti-Xi_c- PHSP; - 0.08 mu- anti-nu_mu anti-Xi_c- PHSP; - 0.51 anti-u d anti-s anti-cu_0 PYTHIA 11 ; - 0.25 anti-u d anti-s anti-cu_0 PYTHIA 11 ; - 0.05 anti-u s anti-s anti-cu_1 PYTHIA 11 ; - 0.03 anti-u s anti-s anti-cu_1 PYTHIA 11 ; -Enddecay - -Decay Xi_cc++ - 0.08 e+ nu_e Xi_c+ PHSP ; - 0.08 mu+ nu_mu Xi_c+ PHSP ; - 0.51 u anti-d s cu_0 PYTHIA 11 ; - 0.25 u anti-d s cu_1 PYTHIA 11 ; - 0.05 u anti-s s cu_0 PYTHIA 11 ; - 0.03 u anti-s s cu_1 PYTHIA 11 ; -Enddecay - -Decay anti-Xi_cc-- - 0.08 e- anti-nu_e anti-Xi_c- PHSP; - 0.08 mu- anti-nu_mu anti-Xi_c- PHSP; - 0.51 anti-u d anti-s anti-cu_0 PYTHIA 11 ; - 0.25 anti-u d anti-s anti-cu_0 PYTHIA 11 ; - 0.05 anti-u s anti-s anti-cu_1 PYTHIA 11 ; - 0.03 anti-u s anti-s anti-cu_1 PYTHIA 11 ; -Enddecay - -Decay Xi_cc*+ - 0.08 e+ nu_e Xi_c0 PHSP; - 0.08 mu+ nu_mu Xi_c0 PHSP; - 0.51 u anti-d s cd_0 PYTHIA 11 ; - 0.25 u anti-d s cd_1 PYTHIA 11 ; - 0.05 u anti-s s cd_0 PYTHIA 11 ; - 0.03 u anti-s s cd_1 PYTHIA 11 ; -Enddecay - -Decay anti-Xi_cc*- - 0.08 e- anti-nu_e anti-Xi_c0 PHSP; - 0.08 mu- anti-nu_mu anti-Xi_c0 PHSP; - 0.51 anti-u d anti-s anti-cd_0 PYTHIA 11 ; - 0.25 anti-u d anti-s anti-cd_1 PYTHIA 11 ; - 0.05 anti-u s anti-s anti-cd_0 PYTHIA 11 ; - 0.03 anti-u s anti-s anti-cd_1 PYTHIA 11 ; -Enddecay - -Decay Xi_cc+ - 0.08 e+ nu_e Xi_c0 PHSP; - 0.08 mu+ nu_mu Xi_c0 PHSP; - 0.51 u anti-d s cd_0 PYTHIA 11 ; - 0.25 u anti-d s cd_1 PYTHIA 11 ; - 0.05 u anti-s s cd_0 PYTHIA 11 ; - 0.03 u anti-s s cd_1 PYTHIA 11 ; -Enddecay - -Decay anti-Xi_cc- - 0.08 e- anti-nu_e anti-Xi_c0 PHSP; - 0.08 mu- anti-nu_mu anti-Xi_c0 PHSP; - 0.51 anti-u d anti-s anti-cd_0 PYTHIA 11 ; - 0.25 anti-u d anti-s anti-cd_1 PYTHIA 11 ; - 0.05 anti-u s anti-s anti-cd_0 PYTHIA 11 ; - 0.03 anti-u s anti-s anti-cd_1 PYTHIA 11 ; -Enddecay - -Decay Omega_cc+ - 0.08 e+ nu_e Omega_c0 PHSP; - 0.08 mu+ nu_mu Omega_c0 PHSP; - 0.51 u anti-d s cs_0 PYTHIA 11; - 0.25 u anti-d s cs_1 PYTHIA 11; - 0.05 u anti-s s cs_0 PYTHIA 11; - 0.03 u anti-s s cs_1 PYTHIA 11; -Enddecay - -Decay anti-Omega_cc- - 0.08 e- anti-nu_e anti-Omega_c0 PHSP; - 0.08 mu- anti-nu_mu anti-Omega_c0 PHSP; - 0.51 anti-u d anti-s anti-cs_0 PYTHIA 11; - 0.25 anti-u d anti-s anti-cs_1 PYTHIA 11; - 0.05 anti-u s anti-s anti-cs_0 PYTHIA 11; - 0.03 anti-u s anti-s anti-cs_1 PYTHIA 11; -Enddecay - -Decay Omega_cc*+ - 0.08 e+ nu_e Omega_c0 PHSP; - 0.08 mu+ nu_mu Omega_c0 PHSP; - 0.51 u anti-d s cs_0 PYTHIA 11; - 0.25 u anti-d s cs_1 PYTHIA 11; - 0.05 u anti-s s cs_0 PYTHIA 11; - 0.03 u anti-s s cs_1 PYTHIA 11; -Enddecay - -Decay anti-Omega_cc*- - 0.08 e- anti-nu_e anti-Omega_c0 PHSP; - 0.08 mu- anti-nu_mu anti-Omega_c0 PHSP; - 0.51 anti-u d anti-s anti-cs_0 PYTHIA 11; - 0.25 anti-u d anti-s anti-cs_1 PYTHIA 11; - 0.05 anti-u s anti-s anti-cs_0 PYTHIA 11; - 0.03 anti-u s anti-s anti-cs_1 PYTHIA 11; -Enddecay - -Decay K_L0 -0.202464226 pi+ e- nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.202464226 pi- e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.135033299 pi+ mu- nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] -0.135033299 pi- mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000025738 pi0 pi+ e- nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000025738 pi0 pi- e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000006205 pi+ e- nu_e e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000006205 pi- e+ nu_e e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.194795855 pi0 pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.125231606 pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001880711 pi+ e- nu_e gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.001880711 pi- e+ nu_e gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000277023 pi+ mu- nu_mu gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000277023 pi- mu+ nu_mu gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000040995 pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000001262 pi0 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000016 pi0 gamma e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000545653 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000009265 e+ e- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000355 mu+ mu- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000584 e+ e- gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -0.000000007 mu+ mu- gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] -Enddecay - -End diff --git a/GeneratorInterface/EvtGenInterface/data/DECAY_NOLONGLIFE.DEC b/GeneratorInterface/EvtGenInterface/data/DECAY_NOLONGLIFE.DEC index 254e70f4991e1..5fe810d29b606 100644 --- a/GeneratorInterface/EvtGenInterface/data/DECAY_NOLONGLIFE.DEC +++ b/GeneratorInterface/EvtGenInterface/data/DECAY_NOLONGLIFE.DEC @@ -1,12 +1,43 @@ -#Define the B0B0bar mass difference -Define dm 0.502e12 -Define dgamma 0 -Define qoverp 1 -Define phaseqoverp 0 + +######################################################################## +# Copyright 1998-2020 CERN for the benefit of the EvtGen authors # +# # +# This file is part of EvtGen. # +# # +# EvtGen is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# EvtGen is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with EvtGen. If not, see . # +######################################################################## + +# Updated to PDG 2010 by Tomas Pilar - T.Pilar@warwick.ac.uk +# Updated Mixing Parameters Mark Whitehead May 2009 +# +Define qoverp_incohMix_B_s0 1.0 +Define dm_incohMix_B_s0 17.8e12 +Define qoverp_incohMix_B0 1.0 +Define dm_incohMix_B0 0.507e12 +# Old definition of dm still in some decay models +Define dm 0.507e12 +#Define dgamma 0 +#Define qoverp 1 +#Define phaseqoverp 0 #Define values for B0s mixing -Define dms 20.e12 +#Define dms 20.e12 # DeltaGammas corresponds to DG/G = 10% -Define dgammas 6.852e10 +#Define dgammas 6.852e10 +# Activate incoherent Mixing +### TODO: find a way to give mixing parameters through decay file to EvtGen +#####yesIncoherentB0Mixing dm dgamma +#####yesIncoherentBsMixing dms dgammas # define the values of the CKM angles (alpha=70, beta=40) Define alpha 1.365 Define beta 0.39 @@ -52,57 +83,11 @@ ChargeConj K*L K*BL ChargeConj K*S K*BS ChargeConj K*0T anti-K*0T ChargeConj K_0*0N anti-K_0*0N -ChargeConj K*0R K*BR -# -# PR LHCb: Alias for signal productions in LHCb -# -Alias B0sig B0 -Alias anti-B0sig anti-B0 -ChargeConj B0sig anti-B0sig -Alias B+sig B+ -Alias B-sig B- -ChargeConj B+sig B-sig -Alias B_s0sig B_s0 -Alias anti-B_s0sig anti-B_s0 -ChargeConj B_s0sig anti-B_s0sig -Alias B_c+sig B_c+ -Alias B_c-sig B_c- -ChargeConj B_c+sig B_c-sig -Alias eta_bsig eta_b -ChargeConj eta_bsig eta_bsig -Alias h_bsig h_b -ChargeConj h_bsig h_bsig -Alias Sigma_b-sig Sigma_b- -Alias anti-Sigma_b+sig anti-Sigma_b+ -ChargeConj Sigma_b-sig anti-Sigma_b+sig -Alias Lambda_b0sig Lambda_b0 -Alias anti-Lambda_b0sig anti-Lambda_b0 -ChargeConj Lambda_b0sig anti-Lambda_b0sig -Alias J/psisig J/psi -ChargeConj J/psisig J/psisig -Alias D*+sig D*+ -Alias D*-sig D*- -ChargeConj D*+sig D*-sig -Alias D0sig D0 -Alias anti-D0sig anti-D0 -ChargeConj D0sig anti-D0sig -Alias D+sig D+ -Alias D-sig D- -ChargeConj D+sig D-sig -Alias D_s+sig D_s+ -Alias D_s-sig D_s- -ChargeConj D_s+sig D_s-sig -Alias Lambda_c+sig Lambda_c+ -Alias anti-Lambda_c-sig anti-Lambda_c- -ChargeConj Lambda_c+sig anti-Lambda_c-sig -Alias tau+sig tau+ -Alias tau-sig tau- -ChargeConj tau+sig tau-sig -# +ChargeConj K*0R K*BR #JetSet parameter modifications #(Very important that there are no blank spaces in the parameter string!) #Turn of B0-B0B mixing in JetSet: -JetSetPar MSTJ(26)=0 +#JetSetPar MSTJ(26)=0 # control of L=1 mesons (in order: J1S0 J0S1 J1S1 J2S1) - commented out by NB/WP #JetSetPar PARJ(14)=0.05 #JetSetPar PARJ(15)=0.05 @@ -122,52 +107,65 @@ yesPhotos # # use new VSS_BMIX mixing decay model (DK,28-Oct-1999) Decay Upsilon(4S) -0.50000 B+ B- VSS; -0.49913 B0 anti-B0 VSS_BMIX dm; -0.00000 Upsilon(2S) pi+ pi- PHSP; -0.00000 Upsilon(2S) pi0 pi0 PHSP; +0.515122645 B+ B- VSS; #[Reconstructed PDG2011] +0.483122645 B0 anti-B0 VSS_BMIX dm; #[Reconstructed PDG2011] +0.000015583 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.000015766 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.000015766 tau+ tau- PHOTOS VLL; #[Reconstructed PDG2011] +0.000084099 Upsilon(2S) pi+ pi- VVPIPI; #[Reconstructed PDG2011] +0.000044342 Upsilon(2S) pi0 pi0 VVPIPI; #[Reconstructed PDG2011] +0.000080123 Upsilon pi+ pi- VVPIPI; #[Reconstructed PDG2011] +0.000044342 Upsilon pi0 pi0 VVPIPI; #[Reconstructed PDG2011] +0.000194392 Upsilon eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +# BF ~ (2J+1)E^3_gamma; see PRL 94, 032001 +# V-> gamma S Partial wave (L,S)=(0,0) +0.000092625 gamma chi_b0(3P) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] +# V-> gamma V Partial wave (L,S)=(0,1) +0.000138938 gamma chi_b1(3P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +# V-> gamma T Partial wave (L,S)=(0,1) +0.000129084 gamma chi_b2(3P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] # V-> gamma S Partial wave (L,S)=(0,0) -0.00007 gamma chi_b0(3P) HELAMP 1. 0. 1. 0.; +0.000002956 gamma chi_b0(2P) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] # V-> gamma V Partial wave (L,S)=(0,1) -0.00014 gamma chi_b1(3P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; +0.000007883 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] # V-> gamma T Partial wave (L,S)=(0,1) -0.00014 gamma chi_b2(3P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. - 1. 0. 1.7320508 0. 2.4494897 0.; -0.00050 g g g PYTHIA 4; -0.00002 gamma g g PYTHIA 4; +0.000011825 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] +0.000837571 g g g PYTHIA 92; +0.000039415 gamma g g PYTHIA 92; Enddecay # # # Decay anti-B0 +# Updated to PDG 2008 # b -> c semileptonic # -0.0570 D*+ e- anti-nu_e PHOTOS HQET 0.77 1.33 0.92; -0.0207 D+ e- anti-nu_e PHOTOS ISGW2; -0.0052 D_1+ e- anti-nu_e PHOTOS ISGW2; -0.0045 D_0*+ e- anti-nu_e PHOTOS ISGW2; -0.0083 D'_1+ e- anti-nu_e PHOTOS ISGW2; -0.0023 D_2*+ e- anti-nu_e PHOTOS ISGW2; -0.0003 D*+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0007 D*0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0010 D+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0020 D0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; - -0.0570 D*+ mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; -0.0207 D+ mu- anti-nu_mu PHOTOS ISGW2; -0.0052 D_1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0045 D_0*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0083 D'_1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0023 D_2*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0003 D*+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0007 D*0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0010 D+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0020 D0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.0493 D*+ e- anti-nu_e PHOTOS HQET2 1.207 0.920 1.406 0.853; # 1.0 * PDG2014 +0.0219 D+ e- anti-nu_e PHOTOS HQET2 1.185 1.081; # 1.0 * PDG2014 +0.0042 D_1+ e- anti-nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.0045 D_0*+ e- anti-nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.0046 D'_1+ e- anti-nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.0033 D_2*+ e- anti-nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.00045 D*+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; # Increase by 1.5 compared to 2011 +0.00490 D*0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; # Same as 2011 +0.0015 D+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; # 1.5 * of 2011 table +0.0043 D0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; # In principle should be in D**, but go to PDG2014 to fill inclusive +# Do same as for electrons +0.0493 D*+ mu- anti-nu_mu PHOTOS HQET2 1.207 0.920 1.406 0.853; #[Reconstructed PDG2011] +0.0219 D+ mu- anti-nu_mu PHOTOS HQET2 1.185 1.081; #[Reconstructed PDG2011] +0.0042 D_1+ mu- anti-nu_mu PHOTOS ISGW2; +0.0045 D_0*+ mu- anti-nu_mu PHOTOS ISGW2; +0.0046 D'_1+ mu- anti-nu_mu PHOTOS ISGW2; +0.0033 D_2*+ mu- anti-nu_mu PHOTOS ISGW2; +0.00045 D*+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.00490 D*0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] +0.0015 D+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.0043 D0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; # # b -> c tau nu # -0.0160 D*+ tau- anti-nu_tau ISGW2; -0.0070 D+ tau- anti-nu_tau ISGW2; +0.015000000 D*+ tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011] +0.011000000 D+ tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011] 0.0013 D_1+ tau- anti-nu_tau ISGW2; 0.0013 D_0*+ tau- anti-nu_tau ISGW2; 0.0020 D'_1+ tau- anti-nu_tau ISGW2; @@ -178,41 +176,41 @@ Decay anti-B0 # 03/28/01 S.Menke included inclusive B -> X_u l nu decays for m(X_u) > 1.26 GeV. # with some thresholds to gradually switch from excl. to incl. # modeling without big jumps keeping the better known excl. -# Brs at their actual values and constrain the incl. Br and -# weights in a way that ~40% of the total BR belongs to +# Brs at their actual values and constrain the incl. Br and +# weights in a way that ~40% of the total BR belongs to # the mass region > 1.5 GeV # October 20, 2004 - Lange - update using sl awg input -# March 30, 2005 J. Dingfelder: Updated B -> X_u l nu hybrid model +# March 30, 2005 J. Dingfelder: Updated B -> X_u l nu hybrid model # (supersedes older version by S. Menke). Inclusive -# decays are reweighted in three kinematic +# decays are reweighted in three kinematic # variables mX, q2, and El (=> 512 weights total). -# The list of weights is included as ModelAlias +# The list of weights is included as ModelAlias # once per B charge state. # NOTE: - The specified parameters for model VUBHYBRID are: -# mb, a, alpha_s, nbins_mX, nbins_q2, nbins_El, +# mb, a, alpha_s, nbins_mX, nbins_q2, nbins_El, # list of threshold values for mX, q2, El in ascending order. # -# *** DO NOT CHANGE ANY OF THESE PARAMETERS! *** -# Otherwise a new set of weights would be needed, since they were +# *** DO NOT CHANGE ANY OF THESE PARAMETERS! *** +# Otherwise a new set of weights would be needed, since they were # generated for a certain set of values for mb, a, excl. BFs, non-res BF. # -# - If no binning (nbins or thresholds) are specified after the first +# - If no binning (nbins or thresholds) are specified after the first # three parameters (mb,a,alpha_s) no hybrid weighting is performed. # --- Hybrid weights for neutral B -> Xu l nu decays -# NOTE: Do NOT CHANGE any BFs without using the corresponding set of +# NOTE: Do NOT CHANGE any BFs without using the corresponding set of # hybrid weights (and vice versa). - -0.000133 pi+ e- anti-nu_e PHOTOS ISGW2; -0.000269 rho+ e- anti-nu_e PHOTOS ISGW2; -0.000000 D(2S)+ e- anti-nu_e PHOTOS ISGW2; -0.000000 D*(2S)+ e- anti-nu_e PHOTOS ISGW2; + +0.000145000 pi+ e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.000294000 rho+ e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.000000 D(2S)+ e- anti-nu_e PHOTOS ISGW2; +0.000000 D*(2S)+ e- anti-nu_e PHOTOS ISGW2; 0.001892 Xu+ e- anti-nu_e PHOTOS VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; # -0.000133 pi+ mu- anti-nu_mu PHOTOS ISGW2; -0.000269 rho+ mu- anti-nu_mu PHOTOS ISGW2; -0.000000 D(2S)+ mu- anti-nu_mu PHOTOS ISGW2; -0.000000 D*(2S)+ mu- anti-nu_mu PHOTOS ISGW2; +0.000145000 pi+ mu- anti-nu_mu PHOTOS ISGW2; # PDG2014 +0.000294000 rho+ mu- anti-nu_mu PHOTOS ISGW2; # PDG2014 +0.000000 D(2S)+ mu- anti-nu_mu PHOTOS ISGW2; +0.000000 D*(2S)+ mu- anti-nu_mu PHOTOS ISGW2; 0.001892 Xu+ mu- anti-nu_mu PHOTOS VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; # 0.000060 pi+ tau- anti-nu_tau ISGW2; @@ -227,52 +225,52 @@ Decay anti-B0 # # -# b->u hadronic +# b->u hadronic # Ref. [B1]: # Lange Nov 14, 2004 (flip D_s K -- is opposite of D_s pi) -0.000039 D_s- pi+ PHSP; -0.000046 D_s+ K- PHSP; -0.000026 D_s*- pi+ SVS; -0.000016 D_s*+ K- SVS; +0.000024000 D_s- pi+ PHSP; #[Reconstructed PDG2011] +0.000030000 D_s+ K- PHSP; #[Reconstructed PDG2011] +0.000021000 D_s*- pi+ SVS; #[Reconstructed PDG2011] +0.000021900 D_s*+ K- SVS; #[Reconstructed PDG2011] # 0.000016 rho+ D_s- SVS; -0.000016 K*- D_s+ SVS; -0.000016 D_s*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000016 D_s*+ K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.000035000 K*- D_s+ SVS; #[Reconstructed PDG2011] +0.000041000 D_s*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000032000 D_s*+ K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] # # b -> s gamma # -0.0000401 anti-K*0 gamma HELAMP 1.0 0.0 1.0 0.0; -# PR LHCb add omega gamma -0.00000049 omega gamma HELAMP 1.0 0.0 1.0 0.0; +0.000043300 anti-K*0 gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# PR LHCb add omega gamma +0.000000440 omega gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] #0.0000135 anti-K_10 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000065 anti-K'_10 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000065 anti-K'_10 gamma HELAMP 1.0 0.0 1.0 0.0; #0.0000128 anti-K'*0 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000166 anti-K_2*0 gamma HELAMP 1.0 0.0 1.0 0.0; -#0.0000017 anti-K''*0 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000166 anti-K_2*0 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000017 anti-K''*0 gamma HELAMP 1.0 0.0 1.0 0.0; 0.0003118 anti-Xsd gamma BTOXSGAMMA 2 ; # -0.000000574 anti-K0 e+ e- PHOTOS BTOSLLBALL; -0.000001835 anti-K*0 e+ e- PHOTOS BTOSLLBALL; -0.000004994 anti-Xsd e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.000000574 anti-K0 mu+ mu- PHOTOS BTOSLLBALL; -0.000001380 anti-K*0 mu+ mu- PHOTOS BTOSLLBALL; -0.000002506 anti-Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.000000130 anti-K0 tau+ tau- PHOTOS BTOSLLBALL; -0.000000190 anti-K*0 tau+ tau- PHOTOS BTOSLLBALL; -0.000000200 anti-Xsd tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000160 anti-K0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001030 anti-K*0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000050 anti-Xsd e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000450 anti-K0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001050 anti-K*0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000025 anti-Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.0000001 anti-K0 tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 anti-K*0 tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 anti-Xsd tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; # #------------------------------------------------------------------------------ # 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC #vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv # B0 -> CP eigenstates (some exclusive b -> u) sum=0.00036 # -0.0000046 pi+ pi- PHSP; -0.0000015 pi0 pi0 PHSP; -0.000001 pi0 eta PHSP; -0.000001 pi0 eta' PHSP; +0.000005130 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000001620 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.0000010 pi0 eta PHSP; +0.000001200 pi0 eta' PHSP; #[Reconstructed PDG2011] 0.000001 pi0 a_00 PHSP; 0.000001 pi0 f_0 PHSP; # pi0 rho0 is with the 3-body modes @@ -284,19 +282,19 @@ Decay anti-B0 0.000001 eta a_00 PHSP; 0.000001 eta f_0 PHSP; 0.000001 rho0 eta SVS; -0.000001 omega eta SVS; +0.000000940 omega eta SVS; #[Reconstructed PDG2011] 0.000001 a_10 eta SVS; 0.000001 b_10 eta SVS; 0.000001 eta' eta' PHSP; 0.000001 eta' a_00 PHSP; 0.000001 eta' f_0 PHSP; 0.000001 rho0 eta' SVS; -0.000001 omega eta' SVS; +0.000001000 omega eta' SVS; #[Reconstructed PDG2011] 0.000001 a_10 eta' SVS; 0.000001 b_10 eta' SVS; 0.000001 a_00 a_00 PHSP; 0.000001 a_00 f_0 PHSP; -0.000001 rho0 a_00 SVS; +0.000001 rho0 a_00 SVS; 0.000001 omega a_00 SVS; 0.000001 a_10 a_00 SVS; 0.000001 b_10 a_00 SVS; @@ -307,14 +305,14 @@ Decay anti-B0 0.000001 b_10 f_0 SVS; # Penguin dominated modes are sin2beta, not sin2alpha -0.0000042 phi K_S0 SVS; -0.0000042 phi K_L0 SVS; -0.000001 eta K_S0 PHSP; -0.000001 eta K_L0 PHSP; -0.000032 eta' K_S0 PHSP; -0.000032 eta' K_L0 PHSP; -0.0000023 omega K_S0 SVS; -0.0000023 omega K_L0 SVS; +0.000004300 phi K_S0 SVS; #[Reconstructed PDG2011] +0.000004300 phi K_L0 SVS; #[Reconstructed PDG2011] +0.000000550 eta K_S0 PHSP; #[Reconstructed PDG2011] +0.000000550 eta K_L0 PHSP; #[Reconstructed PDG2011] +0.000033000 eta' K_S0 PHSP; #[Reconstructed PDG2011] +0.000033000 eta' K_L0 PHSP; #[Reconstructed PDG2011] +0.000002500 omega K_S0 SVS; #[Reconstructed PDG2011] +0.000002500 omega K_L0 SVS; #[Reconstructed PDG2011] #don't allow jetset to simulate the same decay but to a K0 or anti-K0 #Lange 1/30/2003 0.0 phi K0 PHSP; @@ -330,37 +328,37 @@ Decay anti-B0 0.000001 phi eta SVS; 0.000001 phi eta' SVS; # -0.000019 anti-K*0 eta SVS; -0.000001 anti-K*0 eta' SVS; -0.000001 anti-K*0 omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000015900 anti-K*0 eta SVS; #[Reconstructed PDG2011] +0.000003800 anti-K*0 eta' SVS; #[Reconstructed PDG2011] +0.000002000 anti-K*0 omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] 0.000001 phi omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; 0.000001 omega omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; 0.000001 omega rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; # # #2-body modes from Jim Olsen -0.000018 K- pi+ PHSP; -0.000001 K+ K- PHSP; +0.000019400 K- pi+ PHSP; #[Reconstructed PDG2011] +0.0000004 K+ K- PHSP; # K_S0 K_L0 is 0 # see http://babar-hn.slac.stanford.edu:5090/HyperNews/get/pubboard14/156.html -0.0000006 K_S0 K_S0 PHSP; +0.000000240 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] 0.0000000 K_S0 K_L0 PHSP; -0.0000006 K_L0 K_L0 PHSP; +0.000000240 K_L0 K_L0 PHSP; #[Reconstructed PDG2011] # declare K0 pi0 not to have it through Pythia 0.000000 anti-K0 pi0 PHSP; # Split into K_S0 K_L0 (LHCb - P. Robbe) -0.000006 K_S0 pi0 PHSP; -0.000006 K_L0 pi0 PHSP; +0.000004750 K_S0 pi0 PHSP; #[Reconstructed PDG2011] +0.000004750 K_L0 pi0 PHSP; #[Reconstructed PDG2011] # 0 to keep PYTHIA from generating it 0.000000 K0 anti-K0 PHSP; -# +# # 3-body decays # this model generates interferences and higher mass rho # # 3-body by John Back (jback@slac.stanford.edu) - Oct 15, 2002 # JGS intersperses modes with pi0->eta,eta' # anti-B0 modes -# Model generates rho(770), rho(1450) and rho(1700) resonances +# Model generates rho(770), rho(1450) and rho(1700) resonances # with interference (uses CKM angle alpha) 0.000024 pi- pi+ pi0 BTO3PI_CP dm alpha; # Put in with 0 BR to keep PYTHIA from generating these (see BTO3PI_CP above) @@ -373,11 +371,11 @@ Decay anti-B0 0.000000 rho(3S)+ pi- SVS; # # rho0 3-body modes -0.0000026 rho0 K_S0 SVS; -0.0000026 rho0 K_L0 SVS; +0.000002350 rho0 K_S0 SVS; #[Reconstructed PDG2011] +0.000002350 rho0 K_L0 SVS; #[Reconstructed PDG2011] # # rho+ 3-body modes -0.0000099 rho+ K- SVS; +0.000008400 rho+ K- SVS; #[Reconstructed PDG2011] # # rho(1450) 3-body modes 0.0000005 rho(2S)0 K_S0 SVS; @@ -385,14 +383,14 @@ Decay anti-B0 # # # f0,a0(980) 3-body modes -0.000006 f_0 anti-K0 PHSP; +0.0000055 f_0 anti-K0 PHSP; 0.000001 a_00 anti-K0 PHSP; 0.000001 a_0+ K- PHSP; 0.000003 a_0+ pi- PHSP; 0.000001 a_0- pi+ PHSP; # # K*0(892) 3-body modes -0.0000017 anti-K*0 pi0 SVS; +0.000003600 anti-K*0 pi0 SVS; #[Reconstructed PDG2011] 0.000003 anti-K*0 K0 SVS; # # K*0(1430) 3-body modes @@ -405,15 +403,15 @@ Decay anti-B0 # # K*-(892) 3-body modes -0.000013 K*- pi+ SVS; +0.000009400 K*- pi+ SVS; #[Reconstructed PDG2011] 0.000002 K*- K+ SVS; # # K*-(1430) 3-body modes -0.000001 K_0*- pi+ PHSP; +0.000033000 K_0*- pi+ PHSP; #[Reconstructed PDG2011] 0.000002 K_0*- K+ PHSP; # # K*0(1680) 3-body modes -0.000001 K''*- pi+ SVS; +0.000001 K''*- pi+ SVS; 0.000001 K''*- K+ SVS; # # @@ -426,23 +424,23 @@ Decay anti-B0 0.000001 pi- pi+ eta' PHSP; # # pi- pi+ anti-K0: total-rhoK0-f0K0-piK*(892)-piK*(1430)=45-5-6-13./3-11./3 -0.000026 pi- pi+ anti-K0 PHSP; +0.000000000 pi- pi+ anti-K0 PHSP; #[Reconstructed PDG2011] # # K- pi+ pi0 -0.000002 K- pi+ pi0 PHSP; +0.000027500 K- pi+ pi0 PHSP; #[Reconstructed PDG2011] 0.000020 K- pi+ eta PHSP; 0.000001 K- pi+ eta' PHSP; # -# pi- K+ K0. +# pi- K+ K0. # Both B0 and B0bar can decay to these => 0.5e-6 each -0.0000005 pi- K+ anti-K0 PHSP; +0.0000005 pi- K+ anti-K0 PHSP; 0.0000005 pi+ K- K0 PHSP; # # K- K+ anti-K0 # PR LHCb 09 Apr 2004 split into KL/KS 0.000000 K- K+ anti-K0 PHSP; -0.0000105 K- K+ K_S0 PHSP; -0.0000105 K- K+ K_L0 PHSP; +0.000012350 K- K+ K_S0 PHSP; #[Reconstructed PDG2011] +0.000012350 K- K+ K_L0 PHSP; #[Reconstructed PDG2011] # # K- K+ pi0 0.000001 K- K+ pi0 PHSP; @@ -463,7 +461,7 @@ Decay anti-B0 0.000001 anti-K0 eta' eta' PHSP; # # anti-K0 K0 anti-K0: 8*BF(KsKsKs)~=48 (8 is a guess) -0.000048 anti-K0 K0 anti-K0 PHSP; +0.000048 anti-K0 K0 anti-K0 PHSP; # # pi0 pi0 pi0 0.000001 pi0 pi0 pi0 PHSP; @@ -479,8 +477,8 @@ Decay anti-B0 #4-body modes from Andrei Gritsan #--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- # PR LHCb 21 Apr 2004 : set polarisation to longitudinal -0.000002 rho0 rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; -0.000030 rho+ rho- SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; +0.000000730 rho0 rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000024200 rho+ rho- SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] 0.000003 rho0 pi+ pi- PHSP; 0.000003 omega pi+ pi- PHSP; 0.000001 rho0 pi0 pi0 PHSP; @@ -503,21 +501,21 @@ Decay anti-B0 0.000002 pi+ pi- eta eta PHSP; 0.000002 pi+ pi- eta' pi0 PHSP; 0.000001 pi+ pi- eta' eta PHSP; -0.000040 a_1+ pi- SVS; -0.000040 a_1- pi+ SVS; -0.000010 b_1+ pi- SVS; -0.000010 b_1- pi+ SVS; -0.000010 rho- a_0+ SVS; -0.000002 rho+ a_0- SVS; +0.000016500 a_1+ pi- SVS; #[Reconstructed PDG2011] +0.000016500 a_1- pi+ SVS; #[Reconstructed PDG2011] +0.0000055 b_1+ pi- SVS; +0.0000055 b_1- pi+ SVS; +0.000002 rho- a_0+ SVS; +0.000010 rho+ a_0- SVS; 0.000001 f_0 pi+ pi- PHSP; 0.000001 f_0 pi0 pi0 PHSP; 0.000001 a_0- pi+ pi0 PHSP; 0.000001 a_00 pi0 pi0 PHSP; 0.000001 a_0+ pi- pi0 PHSP; #--- 4-body rho-K*, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- -0.000010 rho0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000020 rho+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000010 pi- pi+ anti-K*0 PHSP; +0.000003400 rho0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000010 rho+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000050600 pi- pi+ anti-K*0 PHSP; #[Reconstructed PDG2011] 0.000010 pi+ pi0 K*- PHSP; 0.000005 pi+ eta K*- PHSP; 0.000002 pi+ eta' K*- PHSP; @@ -529,11 +527,11 @@ Decay anti-B0 0.000005 rho0 anti-K0 pi0 PHSP; 0.000002 rho0 anti-K0 eta PHSP; 0.000001 rho0 anti-K0 eta' PHSP; -0.000005 rho0 K- pi+ PHSP; +0.000010 rho0 K- pi+ PHSP; 0.000005 omega anti-K0 pi0 PHSP; 0.000002 omega anti-K0 eta PHSP; 0.000001 omega anti-K0 eta' PHSP; -0.000005 omega K- pi+ PHSP; +0.000005100 omega K- pi+ PHSP; #[Reconstructed PDG2011] 0.000010 pi+ pi0 pi- anti-K0 PHSP; 0.000005 pi+ eta pi- anti-K0 PHSP; 0.000010 pi0 pi0 pi0 anti-K0 PHSP; @@ -554,13 +552,13 @@ Decay anti-B0 0.000010 pi+ pi0 K_0*- PHSP; 0.000005 anti-K*0 f_0 SVS; 0.000010 a_10 anti-K0 SVS; -0.000010 a_1+ K- SVS; +0.000016000 a_1+ K- SVS; #[Reconstructed PDG2011] 0.000010 b_10 anti-K0 SVS; -0.000010 b_1+ K- SVS; +0.0000074 b_1+ K- SVS; 0.000005 anti-K*0 a_00 SVS; 0.000005 K*- a_0+ SVS; #--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ -0.000001 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001280 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] 0.000001 K*+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; 0.0000001 phi rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; 0.0000001 phi pi- pi+ PHSP; @@ -586,16 +584,16 @@ Decay anti-B0 0.000001 K*- K+ pi0 PHSP; 0.000001 K*0 anti-K0 pi0 PHSP; 0.000001 K0 anti-K*0 pi0 PHSP; -0.000001 K+ anti-K*0 pi- PHSP; +0.000003320 K+ anti-K*0 pi- PHSP; #[Reconstructed PDG2011] 0.000001 K*+ anti-K0 pi- PHSP; -0.000001 K- K*0 pi+ PHSP; +0.0000033 K- K*0 pi+ PHSP; 0.000001 K*- K0 pi+ PHSP; #--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- -0.000011 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000009800 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] 0.000010 phi K- pi+ PHSP; 0.000010 phi anti-K0 pi0 PHSP; -0.000005 phi anti-K0 eta PHSP; -0.000010 K- K+ anti-K*0 PHSP; +0.000007 phi anti-K0 eta PHSP; +0.000017700 K- K+ anti-K*0 PHSP; #[Reconstructed PDG2011] 0.000010 K- K*+ anti-K0 PHSP; 0.000010 K*- K+ anti-K0 PHSP; 0.000010 K+ K- K- pi+ PHSP; @@ -603,14 +601,14 @@ Decay anti-B0 0.000005 K+ K- anti-K0 eta PHSP; 0.000010 K0 anti-K0 anti-K0 pi0 PHSP; 0.000005 K0 anti-K0 anti-K0 eta PHSP; -0.000010 phi anti-K_0*0 PHSP; +0.000003900 phi anti-K_0*0 PHSP; #[Reconstructed PDG2011] 0.000010 K- K+ anti-K_0*0 PHSP; 0.000010 K- K_0*+ anti-K0 PHSP; 0.000010 K_0*- K+ anti-K0 PHSP; 0.000002 phi anti-K'_10 PHSP; 0.000002 K- K+ anti-K'_10 PHSP; #--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- -0.0000001 phi phi SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.0000001 phi phi SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; 0.0000001 phi K+ K- PHSP; 0.0000001 phi K0 anti-K0 PHSP; 0.0000001 K+ K- K+ K- PHSP; @@ -973,7 +971,7 @@ Decay anti-B0 0.000001 anti-K0 anti-K0 K'_10 eta PHSP; 0.000001 anti-K0 anti-K0 K'_10 eta' PHSP; #--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ -0.000003 phi phi anti-K0 PHSP; +0.000004100 phi phi anti-K0 PHSP; #[Reconstructed PDG2011] 0.0000001 phi phi pi0 PHSP; 0.000001 phi K+ K- anti-K0 PHSP; 0.000001 phi K0 anti-K0 anti-K0 PHSP; @@ -1004,10 +1002,10 @@ Decay anti-B0 0.000050 a_10 a_10 PHSP; 0.000050 a_1+ a_1- PHSP; # -# PR LHCb: 7 Nov 2005 Add K*0 pi0 pi0 -0.00000666 K*0 pi0 pi0 PHSP; +# PR LHCb: 7 Nov 2005 Add anti-K*0 pi0 pi0 +0.0000067 anti-K*0 pi0 pi0 PHSP; # -# B -> cc= s +# B -> cc= s # # Charmonium states - updated from Lange's recommendations (august 23,2000) # Based on new BABAR results I'm making the following changes (Lange, March 13, 2001 @@ -1018,30 +1016,29 @@ Decay anti-B0 # adding J/psi rho and omega - for lack of better thing will use the Kstar helicity amplitudes. # Psi2sKs 30 ->31 # chic1 Kstar: 12 ->6 -0.00044 J/psi K_S0 SVS; -0.00044 J/psi K_L0 SVS; +0.000435500 J/psi K_S0 SVS; #[Reconstructed PDG2011] +0.000435500 J/psi K_L0 SVS; #[Reconstructed PDG2011] # # -0.001231 J/psi anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; -0.000022 J/psi pi0 SVS; -0.000016 J/psi rho0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; +0.001330000 J/psi anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.000017600 J/psi pi0 SVS; #[Reconstructed PDG2011] +0.000027000 J/psi rho0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] 0.000030 J/psi omega SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; - -0.0002 J/psi K- pi+ PHSP; +0.000000000 J/psi K- pi+ PHSP; #[Reconstructed PDG2011] 0.0001 J/psi anti-K0 pi0 PHSP; #rl0.0007 J/psi anti-K0 pi+ pi- PHSP; #rl0.00035 J/psi anti-K0 pi0 pi0 PHSP; #rl0.00035 J/psi K- pi+ pi0 PHSP; -0.0015 J/psi anti-K_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; +0.001300000 J/psi anti-K_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] 0.0001 J/psi anti-K'_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; 0.0005 J/psi anti-K_2*0 PHSP; -0.00009 J/psi phi anti-K0 PHSP; +0.000094000 J/psi phi anti-K0 PHSP; #[Reconstructed PDG2011] # -0.00033 psi(2S) K_S0 SVS; -0.00033 psi(2S) K_L0 SVS; +0.000310000 psi(2S) K_S0 SVS; #[Reconstructed PDG2011] +0.000310000 psi(2S) K_L0 SVS; #[Reconstructed PDG2011] # # -0.00066 psi(2S) anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; +0.000610000 psi(2S) anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] 0.0004 psi(2S) K- pi+ PHSP; 0.0002 psi(2S) anti-K0 pi0 PHSP; @@ -1051,11 +1048,11 @@ Decay anti-B0 0.0004 psi(2S) anti-K_10 PHSP; # -0.0006 eta_c K_S0 PHSP; -0.0006 eta_c K_L0 PHSP; +0.000445000 eta_c K_S0 PHSP; #[Reconstructed PDG2011] +0.000445000 eta_c K_L0 PHSP; #[Reconstructed PDG2011] # # -0.00162 anti-K*0 eta_c SVS; +0.000610000 anti-K*0 eta_c SVS; #[Reconstructed PDG2011] 0.0002 eta_c K- pi+ PHSP; 0.0001 eta_c anti-K0 pi0 PHSP; 0.0002 eta_c anti-K0 pi+ pi- PHSP; @@ -1073,34 +1070,34 @@ Decay anti-B0 0.00005 eta_c(2S) anti-K0 pi0 pi0 PHSP; 0.00005 eta_c(2S) K- pi+ pi0 PHSP; # -0.00015 chi_c0 K_S0 PHSP; -0.00015 chi_c0 K_L0 PHSP; +0.000070000 chi_c0 K_S0 PHSP; #[Reconstructed PDG2011] +0.000070000 chi_c0 K_L0 PHSP; #[Reconstructed PDG2011] # # -0.0003 anti-K*0 chi_c0 SVS; +0.00030 anti-K*0 chi_c0 SVS; 0.0002 chi_c0 K- pi+ PHSP; 0.0001 chi_c0 anti-K0 pi0 PHSP; 0.0002 chi_c0 anti-K0 pi+ pi- PHSP; 0.0001 chi_c0 anti-K0 pi0 pi0 PHSP; 0.0001 chi_c0 K- pi+ pi0 PHSP; # -0.00023 chi_c1 K_S0 SVS; -0.00023 chi_c1 K_L0 SVS; +0.000195000 chi_c1 K_S0 SVS; #[Reconstructed PDG2011] +0.000195000 chi_c1 K_L0 SVS; #[Reconstructed PDG2011] # # -0.0003 chi_c1 anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; +0.000222000 chi_c1 anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] 0.0004 chi_c1 K- pi+ PHSP; 0.0002 chi_c1 anti-K0 pi0 PHSP; 0.0004 chi_c1 anti-K0 pi+ pi- PHSP; 0.0002 chi_c1 anti-K0 pi0 pi0 PHSP; 0.0002 chi_c1 K- pi+ pi0 PHSP; # -0.00001 chi_c2 K_S0 STS; -0.00001 chi_c2 K_L0 STS; +0.00005 chi_c2 K_S0 STS; +0.00005 chi_c2 K_L0 STS; # # 0.00003 chi_c2 anti-K*0 PHSP; -0.0002 chi_c2 K- pi+ PHSP; +0.0002 chi_c2 K- pi+ PHSP; 0.0001 chi_c2 anti-K0 pi0 PHSP; 0.0002 chi_c2 anti-K0 pi+ pi- PHSP; 0.0001 chi_c2 anti-K0 pi0 pi0 PHSP; @@ -1120,19 +1117,19 @@ Decay anti-B0 # # b-> c (dc=) # -0.00027 D- D+ PHSP; +0.000211000 D- D+ PHSP; #[Reconstructed PDG2011] # See Ref [B1] for the next 3: -0.000335 D*+ D- SVS; -0.000335 D*- D+ SVS; -0.00083 D*+ D*- SVV_HELAMP 0.47 0.0 0.96 0.0 0.56 0.0; +0.000305 D*+ D- SVS; +0.000610000 D*- D+ SVS; #[Reconstructed PDG2011] +0.000820000 D*+ D*- SVV_HELAMP 0.47 0.0 0.96 0.0 0.56 0.0; #[Reconstructed PDG2011] # # b -> c (sc=) --> D Ds X Sum = 10% # -0.0090 D+ D_s- PHSP; -0.0126 D*+ D_s- SVS; -0.0090 D_s*- D+ SVS; -0.0240 D*+ D_s*- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; +0.007200000 D+ D_s- PHSP; #[Reconstructed PDG2011] +0.008000000 D*+ D_s- SVS; #[Reconstructed PDG2011] +0.007400000 D_s*- D+ SVS; #[Reconstructed PDG2011] +0.017700000 D*+ D_s*- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] 0.0006 D'_1+ D_s- SVS; 0.0012 D'_1+ D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; 0.0012 D_1+ D_s- SVS; @@ -1155,20 +1152,20 @@ Decay anti-B0 # Update: Ref. [B1] # # External W-emission amplitude -0.0017 D+ anti-D0 K- PHSP; -0.0049 D+ anti-D*0 K- PHSP; -0.0031 D*+ anti-D0 K- PHSP; -0.0100 D*+ anti-D*0 K- PHSP; +0.001700000 D+ anti-D0 K- PHSP; #[Reconstructed PDG2011] +0.004600000 D+ anti-D*0 K- PHSP; #[Reconstructed PDG2011] +0.003100000 D*+ anti-D0 K- PHSP; #[Reconstructed PDG2011] +0.011800000 D*+ anti-D*0 K- PHSP; #[Reconstructed PDG2011] # External+internal W-emission amplitude -0.0015 D+ D- anti-K0 PHSP; -0.0018 D*+ D- anti-K0 PHSP; -0.0047 D+ D*- anti-K0 PHSP; -0.0070 D*+ D*- anti-K0 PHSP; +0.0015 D+ D- anti-K0 PHSP; +0.0018 D*+ D- anti-K0 PHSP; +0.0047 D+ D*- anti-K0 PHSP; +0.007800000 D*+ D*- anti-K0 PHSP; #[Reconstructed PDG2011] # Internal W-emission amplitude (color suppressed modes) -0.0005 D0 anti-D0 anti-K0 PHSP; -0.0005 D*0 anti-D0 anti-K0 PHSP; -0.0015 D0 anti-D*0 anti-K0 PHSP; -0.0015 D*0 anti-D*0 anti-K0 PHSP; +0.0005 D0 anti-D0 anti-K0 PHSP; +0.000120000 D*0 anti-D0 anti-K0 PHSP; #[Reconstructed PDG2011] +0.0015 D0 anti-D*0 anti-K0 PHSP; +0.0015 D*0 anti-D*0 anti-K0 PHSP; 0.0025 D+ anti-D0 K*- PHSP; 0.0025 D*+ anti-D0 K*- PHSP; @@ -1188,36 +1185,37 @@ Decay anti-B0 # # B -> D(*) X Exclusive modes # -0.0028 D*+ pi- SVS; -0.0028 D+ pi- PHSP; -0.0077 rho- D+ SVS; +0.002760000 D*+ pi- SVS; #[Reconstructed PDG2011] +0.002680000 D+ pi- PHSP; #[Reconstructed PDG2011] +0.007110000 rho- D+ SVS; #[Reconstructed PDG2011] # # D* rho HELAMP parameters taken from ICHEP 98-852. -0.0068 rho- D*+ SVV_HELAMP 0.152 1.47 0.936 0 0.317 0.19; +0.006800000 rho- D*+ SVV_HELAMP 0.152 1.47 0.936 0 0.317 0.19; #[Reconstructed PDG2011] 0.0005 D+ pi- pi0 PHSP; -0.0008 D*+ pi- pi0 PHSP; -0.0005 D0 pi+ pi- PHSP; -0.0003 D*0 pi+ pi- PHSP; +0.008200000 D*+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000840000 D0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000620000 D*0 pi+ pi- PHSP; #[Reconstructed PDG2011] 0.0005 D*0 pi0 pi0 PHSP; # # D a1 updated Ref. [B1] -0.00834 a_1- D+ SVS; -0.0011 D+ rho0 pi- PHSP; +0.006000000 a_1- D+ SVS; #[Reconstructed PDG2011] +0.000000000 D+ rho0 pi- PHSP; #[Reconstructed PDG2011] 0.0011 D+ rho- pi0 PHSP; -0.0022 D+ pi+ pi- pi- PHSP; +0.002000000 D+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] 0.0010 D+ pi0 pi- pi0 PHSP; 0.0010 D0 pi+ pi- pi0 PHSP; 0.0001 D0 pi0 pi0 pi0 PHSP; # -# SVV_HELAMP for D* a1 taken from factorization. Recommandation +# SVV_HELAMP for D* a1 taken from factorization. Recommandation # http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: # updated Ref. [B1] # October 26, 2004 Lange update -0.0120 D*+ a_1- SVV_HELAMP 0.200 0.0 0.866 0.0 0.458 0.0; +# Dec 7 2015, MK update with PDG2015, details see corresponding B0 +0.011000000 D*+ a_1- SVV_HELAMP 0.200 0.0 0.866 0.0 0.458 0.0; #[Reconstructed PDG2011] # -0.0010 D*+ rho0 pi- PHSP; +0.001600000 D*+ rho0 pi- PHSP; #[Reconstructed PDG2011] 0.0010 D*+ rho- pi0 PHSP; -0.0000 D*+ pi+ pi- pi- PHSP; +0.0005 D*+ pi+ pi- pi- PHSP; 0.0010 D*+ pi0 pi- pi0 PHSP; 0.0010 D*0 pi+ pi- pi0 PHSP; 0.0001 D*0 pi0 pi0 pi0 PHSP; @@ -1227,129 +1225,211 @@ Decay anti-B0 #further updates October 26, 2004 - Lange # October 26, 2004 Lange update # -0.0006 D_1+ pi- SVS; +0.0001 D_1+ pi- SVS; 0.0001 D'_1+ pi- SVS; -0.0002 D_0*+ pi- PHSP; -0.0009 D_2*+ pi- STS; -0.0004 D_1+ rho- PHSP; -0.0013 D'_1+ rho- PHSP; -0.0022 D_2*+ rho- PHSP; +0.00006 D_0*+ pi- PHSP; +0.000215 D_2*+ pi- STS; +0.0004 D_1+ rho- PHSP; +0.0013 D'_1+ rho- PHSP; +0.0022 D_2*+ rho- PHSP; # # -# B->DK, recommendation +# B->DK, recommendation # http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: # update: Ref. [B1]: # -0.00017 D*+ K- SVS; -0.00020 D+ K- PHSP; -0.00038 D*+ K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; -0.00037 K*- D+ SVS; +0.000214000 D*+ K- SVS; #[Reconstructed PDG2011] +0.000200000 D+ K- PHSP; #[Reconstructed PDG2011] +0.000330000 D*+ K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; #[Reconstructed PDG2011] +0.000450000 K*- D+ SVS; #[Reconstructed PDG2011] #more DK modes - October 26, 2004 -Lange -0.00004 D*0 K0 SVS; -0.00004 D0 K0 PHSP; -0.00004 anti-K*0 D0 SVS; +0.000036 D*0 K0 SVS; +0.000052 D0 K0 PHSP; +0.000042000 anti-K*0 D0 SVS; #[Reconstructed PDG2011] 0.00001 anti-K*0 anti-D0 SVS; 0.00004 D*0 anti-K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; 0.00001 anti-D*0 anti-K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; # # -# Color-suppressed modes. Br's are expectations from +# Color-suppressed modes. Br's are expectations from # Phys. Rev. D57 (1998), 5363-5369, except for the eta' modes, which are set # equal to the eta modes. SVV_HELAMP parameters are the same as in D*0 rho-, # with phases set to 0. Recommendation http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/169.html: # update: See Ref [B1]: # further update October 26, 2004 Lange # -0.00029 D0 pi0 PHSP; -0.00027 D*0 pi0 SVS; +0.000261000 D0 pi0 PHSP; #[Reconstructed PDG2011] +0.000170000 D*0 pi0 SVS; #[Reconstructed PDG2011] # -0.00029 rho0 D0 SVS; +0.000320000 rho0 D0 SVS; #[Reconstructed PDG2011] 0.00029 D*0 rho0 SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; # -0.00022 D0 eta PHSP; -0.00026 D*0 eta SVS; +0.000202000 D0 eta PHSP; #[Reconstructed PDG2011] +0.000200000 D*0 eta SVS; #[Reconstructed PDG2011] # -0.00017 D0 eta' PHSP; -0.00017 D*0 eta' SVS; +0.000125 D0 eta' PHSP; +0.000123000 D*0 eta' SVS; #[Reconstructed PDG2011] # -0.00025 omega D0 SVS; -0.00042 D*0 omega SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; +0.000259000 omega D0 SVS; #[Reconstructed PDG2011] +0.000330000 D*0 omega SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; #[Reconstructed PDG2011] # # #October 26, 2004 - Lange 0.0016 D_s0*- D+ PHSP; -0.0016 D*+ D_s0*- SVS; -0.0041 D_s1- D+ SVS; -0.0098 D*+ D_s1- SVV_HELAMP 0.4904 0. 0.7204 0. 0.4904 0.; +0.0015 D*+ D_s0*- SVS; +0.003500000 D_s1- D+ SVS; #[Reconstructed PDG2011] +0.009300000 D*+ D_s1- SVV_HELAMP 0.4904 0. 0.7204 0. 0.4904 0.; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00088 D+ K- anti-K*0 PHSP; +0.00129 D*+ K- anti-K*0 PHSP; +# +# Feb 2009 +# +0.002800000 D+ omega pi- PHSP; #[Reconstructed PDG2011] +0.002890000 D*+ omega pi- PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00049 D+ K0 pi- PHSP; +0.0003 D*+ K0 pi- PHSP; +# +# Feb 2009 +# +0.00043 D'_s1- D+ PHSP; +0.00083 D'_s1- D*+ PHSP; +##### Already included above 0.0023 D_s1- D*+ PHSP; # # # Lam_c X / Sigma_c X 6.0 % # -#0.01000 cd_0 anti-ud_0 PYTHIA 23; -#0.03000 cd_1 anti-ud_1 PYTHIA 23; -0.01100 cd_0 anti-ud_0 PYTHIA 23; -0.022000 cd_1 anti-ud_1 PYTHIA 23; +#0.01000 cd_0 anti-ud_0 PYTHIA 63; +#0.03000 cd_1 anti-ud_1 PYTHIA 63; +0.010463563 cd_0 anti-ud_0 PYTHIA 63; +0.020927220 cd_1 anti-ud_1 PYTHIA 63; # # Xi_c X 2.5% # -#0.00600 cs_0 anti-ud_0 PYTHIA 23; -#0.01800 cs_1 anti-ud_1 PYTHIA 23; -0.00300 cs_0 anti-ud_0 PYTHIA 23; -0.00600 cs_1 anti-ud_1 PYTHIA 23; +#0.00600 cs_0 anti-ud_0 PYTHIA 63; +#0.01800 cs_1 anti-ud_1 PYTHIA 63; +0.002853725 cs_0 anti-ud_0 PYTHIA 63; +0.005707449 cs_1 anti-ud_1 PYTHIA 63; # # PR LHCb Add p pbar mode 0.0000001 p+ anti-p- PHSP; # -0.27000 anti-u d c anti-d PYTHIA 48; -0.04600 anti-u d c anti-d PYTHIA 25; -0.02100 anti-u s c anti-d PYTHIA 23; -0.01800 anti-u c d anti-d PYTHIA 48; -0.00090 anti-u c s anti-d PYTHIA 48; +0.250525685 anti-u d c anti-d PYTHIA 23; +0.042705898 anti-u d c anti-d PYTHIA 65; +0.019975978 anti-u s c anti-d PYTHIA 63; +0.017122253 anti-u c d anti-d PYTHIA 23; +0.000856098 anti-u c s anti-d PYTHIA 23; #lange - try to crank up the psi production.... -0.07400 anti-c s c anti-d PYTHIA 13; -0.00600 anti-c d c anti-d PYTHIA 13; -0.00300 anti-u d u anti-d PYTHIA 48; -0.00400 anti-c s u anti-d PYTHIA 48; +0.070391402 anti-c s c anti-d PYTHIA 43; +0.005707449 anti-c d c anti-d PYTHIA 43; +0.002853725 anti-u d u anti-d PYTHIA 23; +0.003804966 anti-c s u anti-d PYTHIA 23; # JGS 11/5/02 This and similar a few lines above have been divided by two -# to solve a double-counting problem for this channel -0.00205 anti-u u d anti-d PYTHIA 48; -0.00007 anti-d d d anti-d PYTHIA 48; -0.00009 anti-s s d anti-d PYTHIA 48; -0.00220 anti-u u s anti-d PYTHIA 48; -0.00180 anti-d d s anti-d PYTHIA 48; -0.00150 anti-s s s anti-d PYTHIA 48; -0.00500 s g anti-d PYTHIA 33; +# to solve a double-counting problem for this channel +0.001950007 anti-u u d anti-d PYTHIA 23; +0.000066610 anti-d d d anti-d PYTHIA 23; +0.000085600 anti-s s d anti-d PYTHIA 23; +0.002092675 anti-u u s anti-d PYTHIA 23; +0.001712197 anti-d d s anti-d PYTHIA 23; +0.001426862 anti-s s s anti-d PYTHIA 23; +0.004756208 s anti-d PYTHIA 91; +0.000490000 D+ anti-K0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000880000 D+ K- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 D*+ anti-K0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001290000 D*+ K- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.017600000 D*+ pi- pi- pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004700000 D*+ pi- pi- pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000110000 D_s+ pi- anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000052000 D0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000046000 D0 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000006000 anti-D0 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000036000 D*0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002700000 anti-D*0 pi- pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000890000 eta_c anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000871000 J/psi anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 J/psi omega anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009500 J/psi eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000019000 J/psi pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000460000 J/psi anti-K0 pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000540000 J/psi anti-K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000800000 J/psi K*- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000660000 J/psi anti-K*0 pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000170000 anti-K0 anti-D0 D0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000620000 psi(2S) anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000140000 chi_c0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011200 chi_c1 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000390000 chi_c1 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000158000 chi_c1 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 eta anti-K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009600 eta anti-K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000016000 omega anti-K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000010100 omega anti-K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004700 anti-K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002700 f_2 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001400 f_0 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007500 anti-K_2*0 phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007600 eta anti-K0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004600 K- pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000019500 anti-K0 pi- pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000041000 K- pi+ pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000012400 anti-K_2*0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000860 rho0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002660 anti-p- p+ anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001240 anti-p- p+ anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003140 anti-p- Lambda0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004800 Lambda0 anti-Lambda0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002500 Lambda0 anti-Lambda0 anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 Lambda0 anti-Lambda0 anti-D0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000114000 D0 anti-p- p+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000028000 D_s+ Lambda0 anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000103000 D*0 anti-p- p+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001500000 D*+ anti-p- n0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000338000 D+ anti-p- p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000500000 D*+ anti-p- p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 Lambda_c+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000630000 Lambda_c+ anti-p- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000120000 Sigma_c*++ anti-p- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000150000 Sigma_c0 anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000220000 Sigma_c++ anti-p- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # # Decay B0 +# Updated to PDG 2008 # b -> c semileptonic -# =10.4% total non-D and D* = 3.4% (changing to 2.7) -0.0570 D*- e+ nu_e PHOTOS HQET 0.77 1.33 0.92; -0.0207 D- e+ nu_e PHOTOS ISGW2; -0.0052 D_1- e+ nu_e PHOTOS ISGW2; -0.0045 D_0*- e+ nu_e PHOTOS ISGW2; -0.0083 D'_1- e+ nu_e PHOTOS ISGW2; -0.0023 D_2*- e+ nu_e PHOTOS ISGW2; -0.0003 D*- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; -0.0007 anti-D*0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; -0.0010 D- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; -0.0020 anti-D0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; -0.0570 D*- mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; -0.0207 D- mu+ nu_mu PHOTOS ISGW2; -0.0052 D_1- mu+ nu_mu PHOTOS ISGW2; -0.0045 D_0*- mu+ nu_mu PHOTOS ISGW2; -0.0083 D'_1- mu+ nu_mu PHOTOS ISGW2; -0.0023 D_2*- mu+ nu_mu PHOTOS ISGW2; -0.0003 D*- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0007 anti-D*0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0010 D- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0020 anti-D0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; +# +0.0493 D*- e+ nu_e PHOTOS HQET2 1.207 0.920 1.406 0.853; # 1.0 * PDG2014 +0.0219 D- e+ nu_e PHOTOS HQET2 1.185 1.081; # 1.0 * PDG2014 +0.0042 D_1- e+ nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.0045 D_0*- e+ nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.0046 D'_1- e+ nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.0033 D_2*- e+ nu_e PHOTOS ISGW2; # PDG2014+D_J below +0.00045 D*- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; # Increase by 1.5 compared to 2011 +0.00490 anti-D*0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; # Same as 2011 +0.0015 D- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; # 1.5 * of 2011 table +0.0043 anti-D0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; # In principle should be in D**, but go to PDG2014 to fill inclusive +# +# Do same as for electrons +0.0493 D*- mu+ nu_mu PHOTOS HQET2 1.207 0.920 1.406 0.853; +0.0219 D- mu+ nu_mu PHOTOS HQET2 1.185 1.081; +0.0042 D_1- mu+ nu_mu PHOTOS ISGW2; +0.0045 D_0*- mu+ nu_mu PHOTOS ISGW2; +0.0046 D'_1- mu+ nu_mu PHOTOS ISGW2; +0.0033 D_2*- mu+ nu_mu PHOTOS ISGW2; +0.00045 D*- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.00490 anti-D*0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0015 D- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0043 anti-D0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; # # b -> c tau nu # -0.0160 D*- tau+ nu_tau ISGW2; -0.0070 D- tau+ nu_tau ISGW2; +0.015000000 D*- tau+ nu_tau ISGW2; #[Reconstructed PDG2011] +0.011000000 D- tau+ nu_tau ISGW2; #[Reconstructed PDG2011] 0.0013 D_1- tau+ nu_tau ISGW2; 0.0013 D_0*- tau+ nu_tau ISGW2; 0.0020 D'_1- tau+ nu_tau ISGW2; @@ -1357,16 +1437,16 @@ Decay B0 # # b -> u l nu # -0.000133 pi- e+ nu_e PHOTOS ISGW2; -0.000269 rho- e+ nu_e PHOTOS ISGW2; -0.000000 D(2S)- e+ nu_e PHOTOS ISGW2; -0.000000 D*(2S)- e+ nu_e PHOTOS ISGW2; +0.000145 pi- e+ nu_e PHOTOS ISGW2; # PDG2014 +0.000294 rho- e+ nu_e PHOTOS ISGW2; # PDG2014 +0.000000 D(2S)- e+ nu_e PHOTOS ISGW2; +0.000000 D*(2S)- e+ nu_e PHOTOS ISGW2; 0.001892 Xu- e+ nu_e VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; # -0.000133 pi- mu+ nu_mu PHOTOS ISGW2; -0.000269 rho- mu+ nu_mu PHOTOS ISGW2; +0.000145 pi- mu+ nu_mu PHOTOS ISGW2; # PDG2014 (electrons) +0.000294 rho- mu+ nu_mu PHOTOS ISGW2; # PDG2014 (electrons) 0.000000 D(2S)- mu+ nu_mu PHOTOS ISGW2; -0.000000 D*(2S)- mu+ nu_mu PHOTOS ISGW2; +0.000000 D*(2S)- mu+ nu_mu PHOTOS ISGW2; 0.001892 Xu- mu+ nu_mu VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; # 0.000060 pi- tau+ nu_tau ISGW2; @@ -1381,26 +1461,26 @@ Decay B0 # # -# b->u hadronic +# b->u hadronic # Ref. [B1]: -# Lange Nov14,2004 (flip D_s K --opposite of D_s pi) -0.000039 D_s+ pi- PHSP; -0.000046 D_s- K+ PHSP; -0.000026 D_s*+ pi- SVS; -0.000016 D_s*- K+ SVS; +# Lange Nov 14, 2004 (flip D_s K --opposite of D_s pi) +0.000024000 D_s+ pi- PHSP; #[Reconstructed PDG2011] +0.000030000 D_s- K+ PHSP; #[Reconstructed PDG2011] +0.000021000 D_s*+ pi- SVS; #[Reconstructed PDG2011] +0.000021900 D_s*- K+ SVS; #[Reconstructed PDG2011] # 0.000016 rho- D_s+ SVS; -0.000016 K*+ D_s- SVS; -0.000016 D_s*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000016 D_s*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.000035000 K*+ D_s- SVS; #[Reconstructed PDG2011] +0.000041000 D_s*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000032000 D_s*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] # # b -> s gamma # -0.0000401 K*0 gamma HELAMP 1.0 0.0 1.0 0.0; -# PR LHCb add omega gamma -0.00000049 omega gamma HELAMP 1.0 0.0 1.0 0.0; +0.000043300 K*0 gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# PR LHCb add omega gamma +0.000000440 omega gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] #0.0000135 K_10 gamma HELAMP 1.0 0.0 1.0 0.0; #0.0000065 K'_10 gamma HELAMP 1.0 0.0 1.0 0.0; #0.0000128 K'*0 gamma HELAMP 1.0 0.0 1.0 0.0; @@ -1408,15 +1488,15 @@ Decay B0 #0.0000017 K''*0 gamma HELAMP 1.0 0.0 1.0 0.0; 0.0003118 Xsd gamma BTOXSGAMMA 2 ; # -0.000000574 K0 e+ e- PHOTOS BTOSLLBALL; -0.000001835 K*0 e+ e- PHOTOS BTOSLLBALL; -0.000004994 Xsd e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.000000574 K0 mu+ mu- PHOTOS BTOSLLBALL; -0.000001380 K*0 mu+ mu- PHOTOS BTOSLLBALL; -0.000002506 Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.000000130 K0 tau+ tau- PHOTOS BTOSLLBALL; -0.000000190 K*0 tau+ tau- PHOTOS BTOSLLBALL; -0.000000200 Xsd tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000160 K0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001030 K*0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000050 Xsd e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000450 K0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001050 K*0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000025 Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.0000001 K0 tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 K*0 tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 Xsd tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; # #------------------------------------------------------------------------------ # 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC @@ -1425,10 +1505,10 @@ Decay B0 # B0 -> CP eigenstates (some exclusive b -> u) sum=0.00036 # # PR LHCb 04/07/04 update BR -0.0000046 pi+ pi- PHSP; -0.0000015 pi0 pi0 PHSP; -0.000001 pi0 eta PHSP; -0.000001 pi0 eta' PHSP; +0.000005130 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000001620 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.0000010 pi0 eta PHSP; +0.000001200 pi0 eta' PHSP; #[Reconstructed PDG2011] 0.000001 pi0 a_00 PHSP; 0.000001 pi0 f_0 PHSP; # pi0 rho0 is with the 3-body modes @@ -1440,14 +1520,14 @@ Decay B0 0.000001 eta a_00 PHSP; 0.000001 eta f_0 PHSP; 0.000001 rho0 eta SVS; -0.000001 omega eta SVS; +0.000000940 omega eta SVS; #[Reconstructed PDG2011] 0.000001 a_10 eta SVS; 0.000001 b_10 eta SVS; 0.000001 eta' eta' PHSP; 0.000001 eta' a_00 PHSP; 0.000001 eta' f_0 PHSP; 0.000001 rho0 eta' SVS; -0.000001 omega eta' SVS; +0.000001000 omega eta' SVS; #[Reconstructed PDG2011] 0.000001 a_10 eta' SVS; 0.000001 b_10 eta' SVS; 0.000001 a_00 a_00 PHSP; @@ -1463,14 +1543,14 @@ Decay B0 0.000001 b_10 f_0 SVS; # Penguin dominated modes are sin2beta, not sin2alpha -0.0000042 phi K_S0 SVS; -0.0000042 phi K_L0 SVS; -0.000001 eta K_S0 PHSP; -0.000001 eta K_L0 PHSP; -0.000032 eta' K_S0 PHSP; -0.000032 eta' K_L0 PHSP; -0.0000023 omega K_S0 SVS; -0.0000023 omega K_L0 SVS; +0.000004300 phi K_S0 SVS; #[Reconstructed PDG2011] +0.000004300 phi K_L0 SVS; #[Reconstructed PDG2011] +0.000000550 eta K_S0 PHSP; #[Reconstructed PDG2011] +0.000000550 eta K_L0 PHSP; #[Reconstructed PDG2011] +0.000033000 eta' K_S0 PHSP; #[Reconstructed PDG2011] +0.000033000 eta' K_L0 PHSP; #[Reconstructed PDG2011] +0.000002500 omega K_S0 SVS; #[Reconstructed PDG2011] +0.000002500 omega K_L0 SVS; #[Reconstructed PDG2011] #don't allow jetset to simulate the same decay but to a K0 or anti-K0 #Lange 1/30/2003 0.0 phi K0 PHSP; @@ -1486,32 +1566,32 @@ Decay B0 0.000001 phi eta SVS; 0.000001 phi eta' SVS; # -0.000019 K*0 eta SVS; -0.000001 K*0 eta' SVS; -0.000001 K*0 omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000015900 K*0 eta SVS; #[Reconstructed PDG2011] +0.000003800 K*0 eta' SVS; #[Reconstructed PDG2011] +0.000002000 K*0 omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] 0.000001 phi omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; 0.000001 omega omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; 0.000001 omega rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; # # PR LHCb 04/07/04 update BR #2-body modes from Jim Olsen -0.000018 K+ pi- PHSP; -0.000001 K+ K- PHSP; -0.0000006 K_S0 K_S0 PHSP; -0.0000000 K_S0 K_L0 PHSP; -0.0000006 K_L0 K_L0 PHSP; +0.000019400 K+ pi- PHSP; #[Reconstructed PDG2011] +0.0000004 K+ K- PHSP; +0.000000240 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.0000000 K_S0 K_L0 PHSP; +0.000000240 K_L0 K_L0 PHSP; #[Reconstructed PDG2011] # Declare K0 pi0 not to have it through Pythia (LHCb - PR) -0.000000 K0 pi0 PHSP; -# Split into K_s0 K_l0 (LHCb - P. Robbe) -0.000006 K_S0 pi0 PHSP; -0.000006 K_L0 pi0 PHSP; +0.0000000 K0 pi0 PHSP; +# Split into K_s0 K_l0 (LHCb - P. Robbe) +0.000004750 K_S0 pi0 PHSP; #[Reconstructed PDG2011] +0.000004750 K_L0 pi0 PHSP; #[Reconstructed PDG2011] #Put in with 0 BR to keep PYTHIA from generating it -0.0000000 K0 anti-K0 PHSP; +0.0000000 K0 anti-K0 PHSP; # # 3-body John Back (jback@slac.stanford.edu) - Oct 15, 2002 # JGS intersperses modes with pi0->eta,eta' # B0 modes -# Model generates rho(770), rho(1450) and rho(1700) resonances +# Model generates rho(770), rho(1450) and rho(1700) resonances # with interference (uses CKM angle alpha) 0.000024 pi- pi+ pi0 BTO3PI_CP dm alpha; # Put in with 0 BR to keep PYTHIA from generating these (see BTO3PI_CP above) @@ -1524,11 +1604,11 @@ Decay B0 0.000000 rho(3S)- pi+ SVS; # # rho0 3-body modes -0.0000026 rho0 K_S0 SVS; -0.0000026 rho0 K_L0 SVS; +0.000002350 rho0 K_S0 SVS; #[Reconstructed PDG2011] +0.000002350 rho0 K_L0 SVS; #[Reconstructed PDG2011] # # rho- 3-body modes -0.0000099 rho- K+ SVS; +0.000008400 rho- K+ SVS; #[Reconstructed PDG2011] # # rho(1450) 3-body modes 0.0000005 rho(2S)0 K_S0 SVS; @@ -1536,14 +1616,14 @@ Decay B0 # # # f0,a0(980) 3-body modes -0.000006 f_0 K0 PHSP; +0.0000055 f_0 K0 PHSP; 0.000001 a_00 K0 PHSP; 0.000001 a_0- K+ PHSP; 0.000001 a_0+ pi- PHSP; 0.000003 a_0- pi+ PHSP; # # K*0(892) 3-body modes -0.0000017 K*0 pi0 SVS; +0.000003600 K*0 pi0 SVS; #[Reconstructed PDG2011] 0.000003 K*0 anti-K0 SVS; # # K*0(1430) 3-body modes @@ -1556,11 +1636,11 @@ Decay B0 # # K*+(892) 3-body modes -0.000013 K*+ pi- SVS; +0.000009400 K*+ pi- SVS; #[Reconstructed PDG2011] 0.000002 K*+ K- SVS; # # K*+(1430) 3-body modes -0.000001 K_0*+ pi- PHSP; +0.000033000 K_0*+ pi- PHSP; #[Reconstructed PDG2011] 0.000002 K_0*+ K- PHSP; # # K*0(1680) 3-body modes @@ -1577,14 +1657,14 @@ Decay B0 0.000001 pi+ pi- eta' PHSP; # # pi+ pi- K0: total-rhoK0-f0K0-piK*(892)-piK*(1430)=45-5-6-13./3-11./3 -0.000026 pi+ pi- K0 PHSP; +0.000000000 pi+ pi- K0 PHSP; #[Reconstructed PDG2011] # # K+ pi- pi0 -0.000002 K+ pi- pi0 PHSP; +0.000027500 K+ pi- pi0 PHSP; #[Reconstructed PDG2011] 0.000020 K+ pi- eta PHSP; 0.000001 K+ pi- eta' PHSP; # -# pi+ K- K0. +# pi+ K- K0. # Both B0 and B0bar can decay to these => 0.5e-6 each 0.0000005 pi+ K- K0 PHSP; 0.0000005 pi- K+ anti-K0 PHSP; @@ -1592,8 +1672,8 @@ Decay B0 # K+ K- K0 # PR LHCb 09 Apr 2004 split into KS/KL 0.000000 K+ K- K0 PHSP; -0.00000105 K+ K- K_S0 PHSP; -0.00000105 K+ K- K_L0 PHSP; +0.000012350 K+ K- K_S0 PHSP; #[Reconstructed PDG2011] +0.000012350 K+ K- K_L0 PHSP; #[Reconstructed PDG2011] # # K+ K- pi0 0.000001 K+ K- pi0 PHSP; @@ -1624,7 +1704,7 @@ Decay B0 0.000001 pi0 eta eta' PHSP; # # PR LHCb: 7 Nov 2005 Add K*0 pi0 pi0 -0.00000666 K*0 pi0 pi0 PHSP; +0.0000067 K*0 pi0 pi0 PHSP; #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ # 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC #--------------------------------------------------------------------------- @@ -1632,8 +1712,8 @@ Decay B0 #4-body modes from Andrei Gritsan #--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- # PR LHCb 20 Apr 2004, set long. pol. -0.000002 rho0 rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; -0.000030 rho+ rho- SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; +0.000000730 rho0 rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000024200 rho+ rho- SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] 0.000003 rho0 pi+ pi- PHSP; 0.000003 omega pi+ pi- PHSP; 0.000001 rho0 pi0 pi0 PHSP; @@ -1656,10 +1736,10 @@ Decay B0 0.000002 pi+ pi- eta eta PHSP; 0.000002 pi+ pi- eta' pi0 PHSP; 0.000001 pi+ pi- eta' eta PHSP; -0.000040 a_1+ pi- SVS; -0.000040 a_1- pi+ SVS; -0.000010 b_1+ pi- SVS; -0.000010 b_1- pi+ SVS; +0.000016500 a_1+ pi- SVS; #[Reconstructed PDG2011] +0.000016500 a_1- pi+ SVS; #[Reconstructed PDG2011] +0.0000055 b_1+ pi- SVS; +0.0000055 b_1- pi+ SVS; 0.000002 rho- a_0+ SVS; 0.000010 rho+ a_0- SVS; 0.000001 f_0 pi+ pi- PHSP; @@ -1668,9 +1748,9 @@ Decay B0 0.000001 a_00 pi0 pi0 PHSP; 0.000001 a_0+ pi- pi0 PHSP; #--- 4-body rho-K*, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- -0.000010 rho0 K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000020 rho- K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000010 pi- pi+ K*0 PHSP; +0.000003400 rho0 K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.0000100 rho- K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000050600 pi- pi+ K*0 PHSP; #[Reconstructed PDG2011] 0.000010 pi- pi0 K*+ PHSP; 0.000005 pi- eta K*+ PHSP; 0.000002 pi- eta' K*+ PHSP; @@ -1686,7 +1766,7 @@ Decay B0 0.000005 omega K0 pi0 PHSP; 0.000002 omega K0 eta PHSP; 0.000001 omega K0 eta' PHSP; -0.000005 omega K+ pi- PHSP; +0.000005100 omega K+ pi- PHSP; #[Reconstructed PDG2011] 0.000010 pi+ pi0 pi- K0 PHSP; 0.000005 pi+ eta pi- K0 PHSP; 0.000010 pi0 pi0 pi0 K0 PHSP; @@ -1707,13 +1787,13 @@ Decay B0 0.000010 pi- pi0 K_0*+ PHSP; 0.000005 K*0 f_0 SVS; 0.000010 a_10 K0 SVS; -0.000010 a_1- K+ SVS; +0.000016000 a_1- K+ SVS; #[Reconstructed PDG2011] 0.000010 b_10 K0 SVS; -0.000010 b_1- K+ SVS; +0.0000074 b_1- K+ SVS; 0.000005 K*0 a_00 SVS; 0.000005 K*+ a_0- SVS; #--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ -0.000001 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001280 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] 0.000001 K*+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; 0.0000001 phi rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; 0.000001 K+ K- rho0 PHSP; @@ -1741,14 +1821,14 @@ Decay B0 0.000001 K0 anti-K*0 pi0 PHSP; 0.000001 K+ anti-K*0 pi- PHSP; 0.000001 K*+ anti-K0 pi- PHSP; -0.000001 K- K*0 pi+ PHSP; +0.000003320 K- K*0 pi+ PHSP; #[Reconstructed PDG2011] 0.000001 K*- K0 pi+ PHSP; #--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- -0.000011 phi K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000009800 phi K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] 0.000010 phi K+ pi- PHSP; 0.000010 phi K0 pi0 PHSP; 0.000007 phi K0 eta PHSP; -0.000010 K- K+ K*0 PHSP; +0.000017700 K- K+ K*0 PHSP; #[Reconstructed PDG2011] 0.000010 K- K*+ K0 PHSP; 0.000010 K*- K+ K0 PHSP; 0.000010 K+ K- K+ pi- PHSP; @@ -1756,14 +1836,14 @@ Decay B0 0.000005 K+ K- K0 eta PHSP; 0.000010 K0 anti-K0 K0 pi0 PHSP; 0.000005 K0 anti-K0 K0 eta PHSP; -0.000010 phi K_0*0 PHSP; +0.000003900 phi K_0*0 PHSP; #[Reconstructed PDG2011] 0.000010 K- K+ K_0*0 PHSP; 0.000010 K- K_0*+ K0 PHSP; 0.000010 K_0*- K+ K0 PHSP; 0.000002 phi K'_10 PHSP; 0.000002 K- K+ K'_10 PHSP; #--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- -0.0000001 phi phi SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.0000001 phi phi SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; 0.0000001 phi K+ K- PHSP; 0.0000001 phi K0 anti-K0 PHSP; 0.0000001 K+ K- K+ K- PHSP; @@ -2125,7 +2205,7 @@ Decay B0 0.000001 K0 K0 anti-K'_10 eta PHSP; 0.000001 K0 K0 anti-K'_10 eta' PHSP; #--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ -0.000003 phi phi K0 PHSP; +0.000004100 phi phi K0 PHSP; #[Reconstructed PDG2011] 0.0000001 phi phi pi0 PHSP; 0.000001 phi K+ K- K0 PHSP; 0.000001 phi K0 anti-K0 K0 PHSP; @@ -2156,30 +2236,30 @@ Decay B0 0.000050 a_10 a_10 PHSP; 0.000050 a_1+ a_1- PHSP; # -# B -> cc= s -0.00044 J/psi K_S0 SVS; -0.00044 J/psi K_L0 SVS; +# B -> cc= s +0.000435500 J/psi K_S0 SVS; #[Reconstructed PDG2011] +0.000435500 J/psi K_L0 SVS; #[Reconstructed PDG2011] # # -0.001291 J/psi K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.000022 J/psi pi0 SVS; -0.000016 J/psi rho0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.00003 J/psi omega SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.0002 J/psi K+ pi- PHSP; +0.001330000 J/psi K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.000017600 J/psi pi0 SVS; #[Reconstructed PDG2011] +0.000027000 J/psi rho0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.00003 J/psi omega SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; +0.000000000 J/psi K+ pi- PHSP; #[Reconstructed PDG2011] 0.0001 J/psi K0 pi0 PHSP; #rl0.0007 J/psi K0 pi- pi+ PHSP; #rl0.00035 J/psi K0 pi0 pi0 PHSP; #rl0.00035 J/psi K+ pi- pi0 PHSP; -0.0015 J/psi K_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; +0.001300000 J/psi K_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] 0.0001 J/psi K'_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; 0.0005 J/psi K_2*0 PHSP; -0.00009 J/psi phi K0 PHSP; +0.000094000 J/psi phi K0 PHSP; #[Reconstructed PDG2011] # -0.00033 psi(2S) K_S0 SVS; -0.00033 psi(2S) K_L0 SVS; +0.000310000 psi(2S) K_S0 SVS; #[Reconstructed PDG2011] +0.000310000 psi(2S) K_L0 SVS; #[Reconstructed PDG2011] # # -0.00066 psi(2S) K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; +0.000610000 psi(2S) K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] 0.0004 psi(2S) K+ pi- PHSP; 0.0002 psi(2S) K0 pi0 PHSP; @@ -2188,11 +2268,11 @@ Decay B0 0.0001 psi(2S) K+ pi- pi0 PHSP; 0.0004 psi(2S) K_10 PHSP; # -0.0006 eta_c K_S0 PHSP; -0.0006 eta_c K_L0 PHSP; +0.000445000 eta_c K_S0 PHSP; #[Reconstructed PDG2011] +0.000445000 eta_c K_L0 PHSP; #[Reconstructed PDG2011] # # -0.00162 K*0 eta_c SVS; +0.000610000 K*0 eta_c SVS; #[Reconstructed PDG2011] 0.0002 eta_c K+ pi- PHSP; 0.0001 eta_c K0 pi0 PHSP; 0.0002 eta_c K0 pi- pi+ PHSP; @@ -2208,10 +2288,10 @@ Decay B0 0.00005 eta_c(2S) K0 pi0 PHSP; 0.00008 eta_c(2S) K0 pi- pi+ PHSP; 0.00005 eta_c(2S) K0 pi0 pi0 PHSP; -0.00005 eta_c(2S) K+ pi- pi0 PHSP; +0.00005 eta_c(2S) K+ pi- pi0 PHSP; # -0.00015 chi_c0 K_S0 PHSP; -0.00015 chi_c0 K_L0 PHSP; +0.000070000 chi_c0 K_S0 PHSP; #[Reconstructed PDG2011] +0.000070000 chi_c0 K_L0 PHSP; #[Reconstructed PDG2011] # # 0.0003 K*0 chi_c0 SVS; @@ -2221,11 +2301,11 @@ Decay B0 0.0001 chi_c0 K0 pi0 pi0 PHSP; 0.0001 chi_c0 K+ pi- pi0 PHSP; # -0.00023 chi_c1 K_S0 SVS; -0.00023 chi_c1 K_L0 SVS; +0.000195000 chi_c1 K_S0 SVS; #[Reconstructed PDG2011] +0.000195000 chi_c1 K_L0 SVS; #[Reconstructed PDG2011] # # -0.0003 chi_c1 K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; +0.000222000 chi_c1 K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] 0.0004 chi_c1 K+ pi- PHSP; 0.0002 chi_c1 K0 pi0 PHSP; 0.0004 chi_c1 K0 pi- pi+ PHSP; @@ -2255,24 +2335,24 @@ Decay B0 0.00007 psi(3770) K+ pi- pi0 PHSP; 0.00029 psi(3770) K_10 PHSP; # -0.0000 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +### ALREADY Included above 0.0000 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # # # # b-> c (dc=) # -0.00027 D- D+ PHSP; +0.000211000 D- D+ PHSP; #[Reconstructed PDG2011] # See Ref [B1] for the next 3: -0.000335 D*- D+ SVS; -0.000335 D*+ D- SVS; -0.00083 D*- D*+ SVV_HELAMP 0.56 0.0 0.96 0.0 0.47 0.0; +0.000305 D*- D+ SVS; +0.000610000 D*+ D- SVS; #[Reconstructed PDG2011] +0.000820000 D*- D*+ SVV_HELAMP 0.56 0.0 0.96 0.0 0.47 0.0; #[Reconstructed PDG2011] # # b -> c (sc=) --> D Ds X Sum = 10% # -0.0090 D- D_s+ PHSP; -0.0126 D*- D_s+ SVS; -0.0090 D_s*+ D- SVS; -0.0240 D_s*+ D*- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; +0.007200000 D- D_s+ PHSP; #[Reconstructed PDG2011] +0.008000000 D*- D_s+ SVS; #[Reconstructed PDG2011] +0.007400000 D_s*+ D- SVS; #[Reconstructed PDG2011] +0.017700000 D_s*+ D*- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] 0.0006 D'_1- D_s+ SVS; 0.0012 D'_1- D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; 0.0012 D_1- D_s+ SVS; @@ -2295,71 +2375,71 @@ Decay B0 # Update: Ref. [B1] # October 26, 2004 Lange -per breco awg # External W-emission amplitude -0.0017 D- D0 K+ PHSP; -0.0049 D- D*0 K+ PHSP; -0.0031 D*- D0 K+ PHSP; -0.0100 D*- D*0 K+ PHSP; +0.001700000 D- D0 K+ PHSP; #[Reconstructed PDG2011] +0.004600000 D- D*0 K+ PHSP; #[Reconstructed PDG2011] +0.003100000 D*- D0 K+ PHSP; #[Reconstructed PDG2011] +0.011800000 D*- D*0 K+ PHSP; #[Reconstructed PDG2011] # External+internal W-emission amplitude -0.0015 D- D+ K0 PHSP; -0.0018 D*- D+ K0 PHSP; -0.0047 D- D*+ K0 PHSP; -0.0070 D*- D*+ K0 PHSP; +0.0015 D- D+ K0 PHSP; +0.0018 D*- D+ K0 PHSP; +0.0047 D- D*+ K0 PHSP; +0.007800000 D*- D*+ K0 PHSP; #[Reconstructed PDG2011] # Internal W-emission amplitude (color suppressed modes) 0.0005 D0 anti-D0 K0 PHSP; -0.0005 D*0 anti-D0 K0 PHSP; -0.0015 D0 anti-D*0 K0 PHSP; -0.0015 D*0 anti-D*0 K0 PHSP; +0.0005 D*0 anti-D0 K0 PHSP; +0.0015 D0 anti-D*0 K0 PHSP; +0.0015 D*0 anti-D*0 K0 PHSP; ########## # K* modes ########### -0.0025 D- D0 K*+ PHSP; +0.0025 D- D0 K*+ PHSP; 0.0025 D*- D0 K*+ PHSP; 0.0025 D- D*0 K*+ PHSP; 0.0050 D*- D*0 K*+ PHSP; # -0.0025 D- D+ K*0 PHSP; -0.0025 D*- D+ K*0 PHSP; -0.0025 D- D*+ K*0 PHSP; +0.0025 D- D+ K*0 PHSP; +0.0025 D*- D+ K*0 PHSP; +0.0025 D- D*+ K*0 PHSP; 0.0050 D*- D*+ K*0 PHSP; # -0.0005 D0 anti-D0 K*0 PHSP; -0.0005 D0 anti-D*0 K*0 PHSP; -0.0005 D*0 anti-D0 K*0 PHSP; -0.0010 D*0 anti-D*0 K*0 PHSP; +0.0005 D0 anti-D0 K*0 PHSP; +0.0005 D0 anti-D*0 K*0 PHSP; +0.0005 D*0 anti-D0 K*0 PHSP; +0.0010 D*0 anti-D*0 K*0 PHSP; # # B -> D(*) X Exclusive modes # -0.0028 D*- pi+ SVS; -0.0028 D- pi+ PHSP; -0.0077 rho+ D- SVS; +0.002760000 D*- pi+ SVS; #[Reconstructed PDG2011] +0.002680000 D- pi+ PHSP; #[Reconstructed PDG2011] +0.007110000 rho+ D- SVS; #[Reconstructed PDG2011] # # D* rho HELAMP parameters taken from ICHEP 98-852. -0.0068 rho+ D*- SVV_HELAMP 0.317 0.19 0.936 0.0 0.152 1.47; +0.006800000 rho+ D*- SVV_HELAMP 0.317 0.19 0.936 0.0 0.152 1.47; #[Reconstructed PDG2011] 0.0005 D- pi+ pi0 PHSP; -0.0008 D*- pi+ pi0 PHSP; -0.0005 anti-D0 pi- pi+ PHSP; -0.0003 anti-D*0 pi- pi+ PHSP; +0.008200000 D*- pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.000840000 anti-D0 pi- pi+ PHSP; #[Reconstructed PDG2011] +0.000620000 anti-D*0 pi- pi+ PHSP; #[Reconstructed PDG2011] 0.0005 anti-D*0 pi0 pi0 PHSP; # # D a1 updated Ref. [B1] -0.00834 a_1+ D- SVS; -0.0011 D- rho0 pi+ PHSP; +0.006000000 a_1+ D- SVS; #[Reconstructed PDG2011] +0.000000000 D- rho0 pi+ PHSP; #[Reconstructed PDG2011] 0.0011 D- rho+ pi0 PHSP; -0.0022 D- pi- pi+ pi+ PHSP; +0.002000000 D- pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] 0.0010 D- pi0 pi+ pi0 PHSP; 0.0010 anti-D0 pi- pi+ pi0 PHSP; 0.0001 anti-D0 pi0 pi0 pi0 PHSP; # -# SVV_HELAMP for D* a1 taken from factorization. Recommandation +# SVV_HELAMP for D* a1 taken from factorization. Recommandation # http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: # updated Ref. [B1] # October 26, 2004 Lange update # -0.0120 D*- a_1+ SVV_HELAMP 0.458 0.0 0.866 0.0 0.458 0.0; +0.011000000 D*- a_1+ SVV_HELAMP 0.200 0.0 0.866 0.0 0.458 0.0; # MK, update with PDG2015 # -0.0010 D*- rho0 pi+ PHSP; +0.001600000 D*- rho0 pi+ PHSP; # MK, Update with PDF2015 0.0010 D*- rho+ pi0 PHSP; -0.0000 D*- pi- pi+ pi+ PHSP; +0.0005 D*- pi- pi+ pi+ PHSP; # MK, update with PDG2015 0.0010 D*- pi0 pi+ pi0 PHSP; 0.0010 anti-D*0 pi- pi+ pi0 PHSP; 0.0001 anti-D*0 pi0 pi0 pi0 PHSP; @@ -2367,131 +2447,207 @@ Decay B0 # B->D** pi and D** rho, recommendation # http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html # -0.0006 D_1- pi+ SVS; +0.0001 D_1- pi+ SVS; 0.0001 D'_1- pi+ SVS; -0.0002 D_0*- pi+ PHSP; -0.0009 D_2*- pi+ STS; -0.0004 D_1- rho+ PHSP; -0.0013 D'_1- rho+ PHSP; -0.0022 D_2*- rho+ PHSP; +0.00006 D_0*- pi+ PHSP; +0.000215 D_2*- pi+ STS; +0.0004 D_1- rho+ PHSP; +0.0013 D'_1- rho+ PHSP; +0.0022 D_2*- rho+ PHSP; # # -# B->DK, recommendation +# B->DK, recommendation # http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: # update: Ref. [B1]: # -0.00017 D*- K+ SVS; -0.00020 D- K+ PHSP; -0.00038 D*- K*+ SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; -0.00037 K*+ D- SVS; +0.000214000 D*- K+ SVS; #[Reconstructed PDG2011] +0.000200000 D- K+ PHSP; #[Reconstructed PDG2011] +0.000330000 D*- K*+ SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; #[Reconstructed PDG2011] +0.000450000 K*+ D- SVS; #[Reconstructed PDG2011] #more DK modes - October 26, 2004 -Lange -0.00004 anti-D*0 anti-K0 SVS; -0.00004 anti-D0 anti-K0 PHSP; -0.00004 K*0 anti-D0 SVS; -0.00001 K*0 D0 SVS; -0.00004 anti-D*0 K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; -0.00001 D*0 K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; +0.000036 anti-D*0 anti-K0 SVS; +0.000052 anti-D0 anti-K0 PHSP; +0.000042000 K*0 anti-D0 SVS; #[Reconstructed PDG2011] +0.00001 K*0 D0 SVS; +0.00004 anti-D*0 K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; +0.00001 D*0 K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; # # -# Color-suppressed modes. Br's are expectations from +# Color-suppressed modes. Br's are expectations from # Phys. Rev. D57 (1998), 5363-5369, except for the eta' modes, which are set # equal to the eta modes. SVV_HELAMP parameters are the same as in D*0 rho-, # with phases set to 0. Recommendation http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/169.html: # update: See Ref [B1]: # further update October 26, 2004 Lange # -0.00029 anti-D0 pi0 PHSP; -0.00027 anti-D*0 pi0 SVS; +0.000261000 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] +0.000170000 anti-D*0 pi0 SVS; #[Reconstructed PDG2011] # -0.00029 rho0 anti-D0 SVS; +0.000320000 rho0 anti-D0 SVS; #[Reconstructed PDG2011] 0.00029 anti-D*0 rho0 SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; # -0.00022 anti-D0 eta PHSP; -0.00026 anti-D*0 eta SVS; +0.000202000 anti-D0 eta PHSP; #[Reconstructed PDG2011] +0.000200000 anti-D*0 eta SVS; #[Reconstructed PDG2011] # -0.00017 anti-D0 eta' PHSP; -0.00017 anti-D*0 eta' SVS; +0.000125 anti-D0 eta' PHSP; +0.000123000 anti-D*0 eta' SVS; #[Reconstructed PDG2011] # -0.00025 omega anti-D0 SVS; -0.00042 anti-D*0 omega SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; +0.000259000 omega anti-D0 SVS; #[Reconstructed PDG2011] +0.000330000 anti-D*0 omega SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; #[Reconstructed PDG2011] # # PR LHCb : add ppbar mode 0.0000001 p+ anti-p- PHSP; # -#October 26,2004 - Lange +#October 26, 2004 - Lange 0.0016 D_s0*+ D- PHSP; -0.0016 D*- D_s0*+ SVS; -0.0041 D_s1+ D- SVS; -0.0098 D*- D_s1+ SVV_HELAMP 0.4904 0. 0.7204 0. 0.4904 0.; +0.0015 D*- D_s0*+ SVS; +0.003500000 D_s1+ D- SVS; #[Reconstructed PDG2011] +0.009300000 D*- D_s1+ SVV_HELAMP 0.4904 0. 0.7204 0. 0.4904 0.; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.000880000 D- K+ anti-K*0 PHSP; #[Reconstructed PDG2011] +0.001290000 D*- K+ anti-K*0 PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.002800000 D- omega pi+ PHSP; #[Reconstructed PDG2011] +0.002890000 D*- omega pi+ PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.000490000 D- K0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 D*- K0 pi+ PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00043 D'_s1+ D- PHSP; +0.00083 D'_s1+ D*- PHSP; +#### Already included above 0.0023 D_s1+ D*- PHSP; # # Lam_c X / Sigma_c X 4.0 % # -#0.01000 anti-cd_0 ud_0 PYTHIA 23; -#0.03000 anti-cd_1 ud_1 PYTHIA 23; -0.01100 anti-cd_0 ud_0 PYTHIA 23; -0.02200 anti-cd_1 ud_1 PYTHIA 23; +#0.01000 anti-cd_0 ud_0 PYTHIA 63; +#0.03000 anti-cd_1 ud_1 PYTHIA 63; +0.010520663 anti-cd_0 ud_0 PYTHIA 63; +0.021041421 anti-cd_1 ud_1 PYTHIA 63; # # Xi_c X 2.5% # -#0.00600 anti-cs_0 ud_0 PYTHIA 23; -#0.01800 anti-cs_1 ud_1 PYTHIA 23; -0.00300 anti-cs_0 ud_0 PYTHIA 23; -0.00600 anti-cs_1 ud_1 PYTHIA 23; +#0.00600 anti-cs_0 ud_0 PYTHIA 63; +#0.01800 anti-cs_1 ud_1 PYTHIA 63; +0.002869298 anti-cs_0 ud_0 PYTHIA 63; +0.005738595 anti-cs_1 ud_1 PYTHIA 63; # # -0.26985 u anti-d anti-c d PYTHIA 48; -0.04600 u anti-d anti-c d PYTHIA 13; -0.02100 u anti-s anti-c d PYTHIA 13; -0.01800 u anti-c anti-d d PYTHIA 48; -0.00090 u anti-c anti-s d PYTHIA 48; +0.251926466 u anti-d anti-c d PYTHIA 23; +0.042944682 u anti-d anti-c d PYTHIA 43; +0.020084989 u anti-s anti-c d PYTHIA 43; +0.017215691 u anti-c anti-d d PYTHIA 23; +0.000860770 u anti-c anti-s d PYTHIA 23; #lange - try to crank up the psi production.... -0.07400 c anti-s anti-c d PYTHIA 13; -0.00600 c anti-d anti-c d PYTHIA 13; -0.00300 u anti-d anti-u d PYTHIA 48; -0.00400 c anti-s anti-u d PYTHIA 48; +0.070775534 c anti-s anti-c d PYTHIA 43; +0.005738595 c anti-d anti-c d PYTHIA 43; +0.002869298 u anti-d anti-u d PYTHIA 23; +0.003825730 c anti-s anti-u d PYTHIA 23; # JGS 11/5/02 This and similar a few lines above have been divided by two -# to solve a double-counting problem for this channel -0.00205 u anti-u anti-d d PYTHIA 48; -0.00007 d anti-d anti-d d PYTHIA 48; -0.00009 s anti-s anti-d d PYTHIA 48; -0.00220 u anti-u anti-s d PYTHIA 48; -0.00180 d anti-d anti-s d PYTHIA 48; -0.00150 s anti-s anti-s d PYTHIA 48; -0.00500 anti-s g d PYTHIA 33; +# to solve a double-counting problem for this channel +0.001960649 u anti-u anti-d d PYTHIA 23; +0.000066973 d anti-d anti-d d PYTHIA 23; +0.000086068 s anti-s anti-d d PYTHIA 23; +0.002104095 u anti-u anti-s d PYTHIA 23; +0.001721541 d anti-d anti-s d PYTHIA 23; +0.001434649 s anti-s anti-s d PYTHIA 23; +0.004782163 anti-s d PYTHIA 91; +0.017600000 D*- pi+ pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004700000 D*- pi+ pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000110000 D_s- pi+ K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000052000 anti-D0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000046000 anti-D0 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000006000 D0 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000036000 anti-D*0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002700000 D*0 pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000890000 eta_c K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000871000 J/psi K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 J/psi omega K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009500 J/psi eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000019000 J/psi pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000460000 J/psi K0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000540000 J/psi K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000800000 J/psi K*+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000660000 J/psi K*0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000170000 K0 D0 anti-D0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000620000 psi(2S) K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000140000 chi_c0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011200 chi_c1 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000390000 chi_c1 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000158000 chi_c1 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 eta K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009600 eta K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000016000 omega K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000010100 omega K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004700 K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002700 f_2 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001400 f_0 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007500 K_2*0 phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007600 eta K0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004600 K+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000019500 K0 pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000041000 K+ pi- pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000012400 K_2*0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000860 rho0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002660 p+ anti-p- K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001240 p+ anti-p- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003140 p+ anti-Lambda0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004800 anti-Lambda0 Lambda0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002500 anti-Lambda0 Lambda0 K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 anti-Lambda0 Lambda0 D0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000114000 anti-D0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000028000 D_s- anti-Lambda0 p+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000103000 anti-D*0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001500000 D*- p+ anti-n0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000338000 D- p+ anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000500000 D*- p+ anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 anti-Lambda_c- p+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000630000 anti-Lambda_c- p+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000120000 anti-Sigma_c*-- p+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000150000 anti-Sigma_c0 p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000220000 anti-Sigma_c-- p+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # # # Decay B- -# +# Updated to PDG 2008 # b -> c semileptonic # -0.0617 D*0 e- anti-nu_e PHOTOS HQET 0.77 1.33 0.92; -0.0224 D0 e- anti-nu_e PHOTOS ISGW2; -0.0056 D_10 e- anti-nu_e PHOTOS ISGW2; -0.0049 D_0*0 e- anti-nu_e PHOTOS ISGW2; -0.009 D'_10 e- anti-nu_e PHOTOS ISGW2; -0.003 D_2*0 e- anti-nu_e PHOTOS ISGW2; -0.0006 D*+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0003 D*0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0019 D+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0010 D0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -# -0.0617 D*0 mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; -0.0224 D0 mu- anti-nu_mu PHOTOS ISGW2; -0.0056 D_10 mu- anti-nu_mu PHOTOS ISGW2; -0.0049 D_0*0 mu- anti-nu_mu PHOTOS ISGW2; -0.009 D'_10 mu- anti-nu_mu PHOTOS ISGW2; -0.003 D_2*0 mu- anti-nu_mu PHOTOS ISGW2; -0.0006 D*+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.0569 D*0 e- anti-nu_e PHOTOS HQET2 1.207 0.920 1.406 0.853; # 1.0 * PDG2014 +0.0227 D0 e- anti-nu_e PHOTOS HQET2 1.185 1.081; # 1.0 * PDG2014 +0.0045 D_10 e- anti-nu_e PHOTOS ISGW2; # PDG2014 + D_10->D*+pi- = 2/3 +0.0037 D_0*0 e- anti-nu_e PHOTOS ISGW2; # PDG2014 + D_0*0->D+pi- = 2/3 +0.0040 D'_10 e- anti-nu_e PHOTOS ISGW2; # PDG2014 + Dprime_10->D*+pi- = 2/3 +0.0033 D_2*0 e- anti-nu_e PHOTOS ISGW2; # DG2014 + D_2*0->D+pi- = 0.459 +0.006100 D*+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; # Same as 2011 +0.0003 D*0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; # same as 2011 +0.0021 D+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; # PDG2014 (in principle covered by other decays, but there are some decays missing to inclusives) +0.0010 D0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; # same as 2011 +# +# For muonic decays do same as for electrons +0.0569 D*0 mu- anti-nu_mu PHOTOS HQET2 1.207 0.920 1.406 0.853; +0.0227 D0 mu- anti-nu_mu PHOTOS HQET2 1.185 1.081; +0.0045 D_10 mu- anti-nu_mu PHOTOS ISGW2; +0.0037 D_0*0 mu- anti-nu_mu PHOTOS ISGW2; +0.0040 D'_10 mu- anti-nu_mu PHOTOS ISGW2; +0.0033 D_2*0 mu- anti-nu_mu PHOTOS ISGW2; +0.006100 D*+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; 0.0003 D*0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0019 D+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.0021 D+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; 0.0010 D0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; # # b -> c tau nu # -0.0160 D*0 tau- anti-nu_tau ISGW2; -0.0070 D0 tau- anti-nu_tau ISGW2; +0.020000000 D*0 tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011] +0.007000000 D0 tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011] 0.0013 D_10 tau- anti-nu_tau ISGW2; 0.0013 D_0*0 tau- anti-nu_tau ISGW2; 0.0020 D'_10 tau- anti-nu_tau ISGW2; @@ -2499,25 +2655,27 @@ Decay B- # # b -> u l nu # -# NOTE: Do NOT CHANGE any BFs without using the corresponding set of -# hybrid weights (and vice versa). +# NOTE: Do NOT CHANGE any BFs without using the corresponding set of +# hybrid weights (and vice versa). +# This will need check whether we get correct inclusive q2 dependence -0.000072 pi0 e- anti-nu_e PHOTOS ISGW2; -0.000084 eta e- anti-nu_e PHOTOS ISGW2; -0.000145 rho0 e- anti-nu_e PHOTOS ISGW2; -0.000145 omega e- anti-nu_e PHOTOS ISGW2; -0.000084 eta' e- anti-nu_e PHOTOS ISGW2; -0.000000 D(2S)0 e- anti-nu_e PHOTOS ISGW2; -0.000000 D*(2S)0 e- anti-nu_e PHOTOS ISGW2; -0.001948 Xu0 e- anti-nu_e VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; -# -0.000072 pi0 mu- anti-nu_mu PHOTOS ISGW2; -0.000084 eta mu- anti-nu_mu PHOTOS ISGW2; -0.000145 rho0 mu- anti-nu_mu PHOTOS ISGW2; -0.000145 omega mu- anti-nu_mu PHOTOS ISGW2; -0.000084 eta' mu- anti-nu_mu PHOTOS ISGW2; +0.00007800 pi0 e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.00003800 eta e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.00015800 rho0 e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.00011900 omega e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.000230 eta' e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.000000 D(2S)0 e- anti-nu_e PHOTOS ISGW2; +0.000000 D*(2S)0 e- anti-nu_e PHOTOS ISGW2; +0.001948 Xu0 e- anti-nu_e VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; +# +# For muons do same as for electrons +0.00007800 pi0 mu- anti-nu_mu PHOTOS ISGW2; +0.00003800 eta mu- anti-nu_mu PHOTOS ISGW2; +0.00015800 rho0 mu- anti-nu_mu PHOTOS ISGW2; +0.00011900 omega mu- anti-nu_mu PHOTOS ISGW2; +0.000230 eta' mu- anti-nu_mu PHOTOS ISGW2; 0.000000 D(2S)0 mu- anti-nu_mu PHOTOS ISGW2; -0.000000 D*(2S)0 mu- anti-nu_mu PHOTOS ISGW2; +0.000000 D*(2S)0 mu- anti-nu_mu PHOTOS ISGW2; 0.001948 Xu0 mu- anti-nu_mu VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; # 0.000030 pi0 tau- anti-nu_tau ISGW2; @@ -2541,10 +2699,10 @@ Decay B- # # # -# b->u hadronic +# b->u hadronic # Ref. [B1]: # -0.000020 D_s- pi0 PHSP; +0.000016000 D_s- pi0 PHSP; #[Reconstructed PDG2011] 0.000020 D_s*- pi0 SVS; # 0.000028 rho0 D_s- SVS; @@ -2553,7 +2711,7 @@ Decay B- # # b-> s gamma # -0.0000403 K*- gamma HELAMP 1.0 0.0 1.0 0.0; +0.000042100 K*- gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] #0.0000135 K_1- gamma HELAMP 1.0 0.0 1.0 0.0; #0.0000065 K'_1- gamma HELAMP 1.0 0.0 1.0 0.0; #0.0000128 K'*- gamma HELAMP 1.0 0.0 1.0 0.0; @@ -2561,19 +2719,19 @@ Decay B- #0.0000017 K''*- gamma HELAMP 1.0 0.0 1.0 0.0; 0.0003118 anti-Xsu gamma BTOXSGAMMA 2 ; # -0.000000574 K- e+ e- PHOTOS BTOSLLBALL; -0.000001835 K*- e+ e- PHOTOS BTOSLLBALL; -0.000004994 anti-Xsu e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.000000574 K- mu+ mu- PHOTOS BTOSLLBALL; -0.000001380 K*- mu+ mu- PHOTOS BTOSLLBALL; -0.000002506 anti-Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.000000130 K- tau+ tau- PHOTOS BTOSLLBALL; -0.000000190 K*- tau+ tau- PHOTOS BTOSLLBALL; -0.000000200 anti-Xsu tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000550 K- e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001550 K*- e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000050 anti-Xsu e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000520 K- mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001160 K*- mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000025 anti-Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.0000001 K- tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 K*- tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 anti-Xsu tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; # # b -> l nu # -0.000093 tau- anti-nu_tau SLN; +0.000180000 tau- anti-nu_tau SLN; #[Reconstructed PDG2011] 0.000000 mu- anti-nu_mu PHOTOS SLN; 0.000000 e- anti-nu_e PHOTOS SLN; # @@ -2584,44 +2742,44 @@ Decay B- # Exclusive hadronic b->u # 0.000026 pi- pi0 pi0 CB3PI-P00 alpha; -0.000016 pi- pi- pi+ CB3PI-MPP alpha; +0.000000 pi- pi- pi+ CB3PI-MPP alpha; #### -0.0000048 eta pi- PHSP; -0.0000026 eta K- PHSP; -0.000024 K*- eta SVS; -0.0000086 rho- eta SVS; -0.0000042 eta' pi- PHSP; -0.000078 eta' K- PHSP; -0.000001 K*- eta' SVS; -0.000001 rho- eta' SVS; -0.0000059 omega pi- SVS; -0.0000051 omega K- SVS; -0.000001 omega K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000013 omega rho- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 phi pi- SVS; -0.0000090 phi K- SVS; +0.000004070 eta pi- PHSP; #[Reconstructed PDG2011] +0.000002330 eta K- PHSP; #[Reconstructed PDG2011] +0.000019300 K*- eta SVS; #[Reconstructed PDG2011] +0.000007000 rho- eta SVS; #[Reconstructed PDG2011] +0.000002700 eta' pi- PHSP; #[Reconstructed PDG2011] +0.000070600 eta' K- PHSP; #[Reconstructed PDG2011] +0.000004900 K*- eta' SVS; #[Reconstructed PDG2011] +0.000008700 rho- eta' SVS; #[Reconstructed PDG2011] +0.000006900 omega pi- SVS; #[Reconstructed PDG2011] +0.000006700 omega K- SVS; #[Reconstructed PDG2011] +0.0000010 omega K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000015900 omega rho- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.0000000 phi pi- SVS; +0.000008300 phi K- SVS; #[Reconstructed PDG2011] #2-body modes from Jim Olsen # (K_S0 K- and K_L0 K- -> 1x10^-6, Jim Olsen - Mar 27, 2001) # (pi- pi0 -> 5x10^-6 and K- pi0 -> 11x10^-6, Jim Olsen - Mar 27, 2001) # PR LHCb 04/08/2004 Split into Ks/KL 0.000000 anti-K0 pi- PHSP; -0.000012 K_S0 pi- PHSP; -0.000012 K_L0 pi- PHSP; -0.000001 K0 K- PHSP; -0.0000055 pi- pi0 PHSP; -0.000012 K- pi0 PHSP; +0.000011550 K_S0 pi- PHSP; #[Reconstructed PDG2011] +0.000011550 K_L0 pi- PHSP; #[Reconstructed PDG2011] +0.000001360 K0 K- PHSP; #[Reconstructed PDG2011] +0.000005700 pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000012900 K- pi0 PHSP; #[Reconstructed PDG2011] # # 3-body John Back (jback@slac.stanford.edu) - Oct 15, 2002 # JGS intersperses modes with pi0->eta,eta' # B- modes # # rho0 3-body modes -0.0000091 rho0 pi- SVS; -0.0000052 rho0 K- SVS; +0.000008300 rho0 pi- SVS; #[Reconstructed PDG2011] +0.000003700 rho0 K- SVS; #[Reconstructed PDG2011] # # rho- 3-body modes -0.000001 rho- anti-K0 SVS; -0.000012 rho- pi0 SVS; +0.000008000 rho- anti-K0 SVS; #[Reconstructed PDG2011] +0.000010900 rho- pi0 SVS; #[Reconstructed PDG2011] # # rho(1450) 3-body modes 0.0000022 rho(2S)0 pi- SVS; @@ -2629,24 +2787,24 @@ Decay B- # # f0,a0(980) 3-body modes 0.000001 f_0 pi- PHSP; -0.0000085 f_0 K- PHSP; +0.0000092 f_0 K- PHSP; 0.000001 a_0- anti-K0 PHSP; 0.000001 a_00 K- PHSP; 0.000001 a_00 pi- PHSP; 0.000001 a_0- pi0 PHSP; -0.0000023 f_2 pi- PHSP; +0.000001600 f_2 pi- PHSP; #[Reconstructed PDG2011] # # K*(1430) 3-body modes -0.000070 anti-K_0*0 pi- PHSP; -0.000002 K_0*0 K- PHSP; +0.000045000 anti-K_0*0 pi- PHSP; #[Reconstructed PDG2011] +0.000001 K_0*0 K- PHSP; 0.000002 K_0*- pi0 PHSP; 0.000002 K_0*- K0 PHSP; # # K*-(892) 3-body modes -0.000002 K*- pi0 SVS; -0.000003 K*- K0 SVS; +0.000006900 K*- pi0 SVS; #[Reconstructed PDG2011] +0.0000030 K*- K0 SVS; # # # @@ -2657,15 +2815,15 @@ Decay B- #0402270.000002 pi- pi+ pi- PHSP; # # K- pi+ pi-: high mass + f0(400-1200) = (5+5)e-6 -0.0000049 K- pi+ pi- PHSP; +0.000000000 K- pi+ pi- PHSP; #[Reconstructed PDG2011] # # K- K+ pi-: just non-resonant -0.000001 K- K+ pi- PHSP; +0.000005000 K- K+ pi- PHSP; #[Reconstructed PDG2011] # # K- K+ K-: high mass structure near 1500 + non-res: total - phiK = 30 - 4 -0.000026 K- K+ K- PHSP; +0.000025400 K- K+ K- PHSP; #[Reconstructed PDG2011] +# # -# # K-K-pi+: suppressed mode (1e-7) 0.0000001 K- K- pi+ PHSP; # K+pi-pi-: suppressed mode (1e-7) @@ -2698,7 +2856,7 @@ Decay B- 0.000001 K- eta' eta' PHSP; # # K- anti-K0 K0: 4*BF(K+KsKs) (4 is a guess) -0.000048 K- anti-K0 K0 PHSP; +0.000046 K- anti-K0 K0 PHSP; # # pi- anti-K0 K0 0.000001 pi- anti-K0 K0 PHSP; @@ -2710,7 +2868,7 @@ Decay B- #4-body modes from Andrei Gritsan #--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- # PR LHCb 22 Apr 2004 Set long. pol. for rho rho -0.000015 rho- rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; +0.000024000 rho- rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] 0.000010 rho0 pi- pi0 PHSP; 0.000005 rho0 pi- eta PHSP; 0.000002 rho0 pi- eta' PHSP; @@ -2732,9 +2890,9 @@ Decay B- 0.000002 pi- eta eta pi0 PHSP; 0.000002 pi- eta' pi0 pi0 PHSP; 0.000001 pi- eta' eta pi0 PHSP; -0.000040 a_10 pi- SVS; -0.000040 a_1- pi0 SVS; -0.000010 b_10 pi- SVS; +0.000020000 a_10 pi- SVS; #[Reconstructed PDG2011] +0.000026000 a_1- pi0 SVS; #[Reconstructed PDG2011] +0.0000067 b_10 pi- SVS; 0.000010 b_1- pi0 SVS; 0.000010 rho- f_0 SVS; 0.000010 rho- a_00 SVS; @@ -2744,11 +2902,11 @@ Decay B- 0.000001 a_0- pi0 pi0 PHSP; 0.000001 a_0+ pi- pi- PHSP; #--- 4-body rho-K*, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- -0.000010 rho- anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000009200 rho- anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] 0.000010 rho0 K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; 0.000010 pi- pi0 anti-K*0 PHSP; 0.000005 pi- eta anti-K*0 PHSP; -0.000010 pi+ pi- K*- PHSP; +0.000069800 pi+ pi- K*- PHSP; #[Reconstructed PDG2011] 0.000010 pi0 pi0 K*- PHSP; 0.000005 pi0 eta K*- PHSP; 0.000002 eta eta K*- PHSP; @@ -2779,13 +2937,13 @@ Decay B- 0.000002 pi0 pi0 eta' K- PHSP; 0.000001 pi0 eta eta' K- PHSP; 0.000010 rho- anti-K_0*0 PHSP; -0.000010 rho0 K_0*- PHSP; +0.000006 rho0 K_0*- PHSP; 0.000010 pi- pi0 anti-K_0*0 PHSP; 0.000010 pi0 pi0 K_0*- PHSP; -0.000010 K*- f_0 SVS; +0.000005200 K*- f_0 SVS; #[Reconstructed PDG2011] 0.000010 a_10 K- SVS; -0.000010 a_1- anti-K0 SVS; -0.000010 b_10 K- SVS; +0.000035000 a_1- anti-K0 SVS; #[Reconstructed PDG2011] +0.0000091 b_10 K- SVS; 0.000010 b_1- anti-K0 SVS; 0.000005 K*- a_00 SVS; 0.000005 anti-K*0 a_0- SVS; @@ -2822,12 +2980,12 @@ Decay B- 0.0000005 K*- K0 eta PHSP; 0.0000002 K*- K0 eta' PHSP; #--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- -0.000011 phi K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000010000 phi K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] 0.000010 phi anti-K0 pi- PHSP; 0.000010 phi K- pi0 PHSP; 0.000005 phi K- eta PHSP; 0.000002 phi K- eta' PHSP; -0.000010 K- K+ K*- PHSP; +0.000026000 K- K+ K*- PHSP; #[Reconstructed PDG2011] 0.000010 K- K*+ K- PHSP; 0.000010 K- K*0 anti-K0 PHSP; 0.000010 K- K0 anti-K*0 PHSP; @@ -2840,7 +2998,7 @@ Decay B- 0.000005 K0 anti-K0 K- eta PHSP; 0.000002 K0 anti-K0 K- eta' PHSP; 0.000010 K0 anti-K0 anti-K0 pi- PHSP; -0.000010 phi K_0*- PHSP; +0.000007000 phi K_0*- PHSP; #[Reconstructed PDG2011] 0.000010 K- K+ K_0*- PHSP; 0.000010 K- K- K_0*+ PHSP; 0.000010 K- anti-K_0*0 K0 PHSP; @@ -3134,7 +3292,7 @@ Decay B- 0.000005 K- K'_10 anti-K0 eta PHSP; 0.000002 K- K'_10 anti-K0 eta' PHSP; #--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ -0.000003 phi phi K- PHSP; +0.000004900 phi phi K- PHSP; #[Reconstructed PDG2011] 0.000001 phi phi pi- PHSP; 0.000001 phi K+ K- K- PHSP; 0.000001 phi K0 anti-K0 K- PHSP; @@ -3159,10 +3317,10 @@ Decay B- # # B -> cc= s sum = 1.92% # -0.00106 J/psi K- SVS; -0.00143 J/psi K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; -0.00004 J/psi pi- SVS; -0.00006 J/psi rho- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; +0.001014000 J/psi K- SVS; #[Reconstructed PDG2011] +0.001430000 J/psi K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.000049000 J/psi pi- SVS; #[Reconstructed PDG2011] +0.000050000 J/psi rho- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] 0.0002 J/psi anti-K0 pi- PHSP; 0.0001 J/psi K- pi0 PHSP; #rl0.0007 J/psi K- pi+ pi- PHSP; @@ -3170,27 +3328,27 @@ Decay B- #rl0.00035 J/psi anti-K0 pi- pi0 PHSP; 0.0001 J/psi K'_1- SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; 0.0005 J/psi K_2*- PHSP; -0.0018 J/psi K_1- SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; -0.00009 J/psi phi K- PHSP; +0.001800000 J/psi K_1- SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] +0.000052000 J/psi phi K- PHSP; #[Reconstructed PDG2011] # -0.00063 psi(2S) K- SVS; -0.0006 psi(2S) K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; +0.000646000 psi(2S) K- SVS; #[Reconstructed PDG2011] +0.000620000 psi(2S) K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] 0.0004 psi(2S) anti-K0 pi- PHSP; 0.0002 psi(2S) K- pi0 PHSP; -0.0002 psi(2S) K- pi+ pi- PHSP; +0.001900000 psi(2S) K- pi+ pi- PHSP; #[Reconstructed PDG2011] 0.0001 psi(2S) K- pi0 pi0 PHSP; 0.0001 psi(2S) anti-K0 pi- pi0 PHSP; 0.0004 psi(2S) K_1- PHSP; # -0.0009 eta_c K- PHSP; -0.0012 K*- eta_c SVS; +0.000910000 eta_c K- PHSP; #[Reconstructed PDG2011] +0.001200000 K*- eta_c SVS; #[Reconstructed PDG2011] 0.0002 eta_c anti-K0 pi- PHSP; 0.0001 eta_c K- pi0 PHSP; 0.0002 eta_c K- pi+ pi- PHSP; 0.0001 eta_c K- pi0 pi0 PHSP; 0.0001 eta_c anti-K0 pi- pi0 PHSP; # -0.00036 eta_c(2S) K- PHSP; +0.000340000 eta_c(2S) K- PHSP; #[Reconstructed PDG2011] 0.00048 K*- eta_c(2S) SVS; 0.00008 eta_c(2S) anti-K0 pi- PHSP; 0.00005 eta_c(2S) K- pi0 PHSP; @@ -3198,7 +3356,7 @@ Decay B- 0.00005 eta_c(2S) K- pi0 pi0 PHSP; 0.00005 eta_c(2S) anti-K0 pi- pi0 PHSP; # -0.0003 chi_c0 K- PHSP; +0.000133000 chi_c0 K- PHSP; #[Reconstructed PDG2011] 0.0004 K*- chi_c0 SVS; 0.0002 chi_c0 anti-K0 pi- PHSP; 0.0001 chi_c0 K- pi0 PHSP; @@ -3206,8 +3364,8 @@ Decay B- 0.0001 chi_c0 K- pi0 pi0 PHSP; 0.0001 chi_c0 anti-K0 pi- pi0 PHSP; # -0.00057 chi_c1 K- SVS; -0.00029 chi_c1 K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; +0.000460000 chi_c1 K- SVS; #[Reconstructed PDG2011] +0.000300000 chi_c1 K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] 0.0004 chi_c1 anti-K0 pi- PHSP; 0.0002 chi_c1 K- pi0 PHSP; 0.0004 chi_c1 K- pi+ pi- PHSP; @@ -3215,14 +3373,14 @@ Decay B- 0.0002 chi_c1 anti-K0 pi- pi0 PHSP; # 0.00002 chi_c2 K- STS; -0.00004 chi_c2 K*- PHSP; +0.00002 chi_c2 K*- PHSP; 0.0002 chi_c2 anti-K0 pi- PHSP; 0.0001 chi_c2 K- pi0 PHSP; 0.0002 chi_c2 K- pi+ pi- PHSP; 0.0001 chi_c2 K- pi0 pi0 PHSP; 0.0001 chi_c2 anti-K0 pi- pi0 PHSP; # -0.00048 psi(3770) K- SVS; +0.000490000 psi(3770) K- SVS; #[Reconstructed PDG2011] 0.0005 psi(3770) K*- PHSP; 0.0003 psi(3770) anti-K0 pi- PHSP; 0.0002 psi(3770) K- pi0 PHSP; @@ -3233,10 +3391,10 @@ Decay B- # # b -> c (sc=) -> D Ds X Sum = 10% # -0.0129 D0 D_s- PHSP; -0.0124 D*0 D_s- SVS; -0.0111 D_s*- D0 SVS; -0.0278 D_s*- D*0 SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.010000000 D0 D_s- PHSP; #[Reconstructed PDG2011] +0.008200000 D*0 D_s- SVS; #[Reconstructed PDG2011] +0.007600000 D_s*- D0 SVS; #[Reconstructed PDG2011] +0.017100000 D_s*- D*0 SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; #[Reconstructed PDG2011] 0.0006 D'_10 D_s- SVS; 0.0012 D'_10 D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; 0.0012 D_10 D_s- SVS; @@ -3264,18 +3422,18 @@ Decay B- # update: Ref. [B1]: # 0.0017 D0 D- anti-K0 PHSP; -0.0049 D0 D*- anti-K0 PHSP; -0.0031 D*0 D- anti-K0 PHSP; -0.0100 D*0 D*- anti-K0 PHSP; +0.0052 D0 D*- anti-K0 PHSP; +0.0031 D*0 D- anti-K0 PHSP; +0.007800000 D*0 D*- anti-K0 PHSP; #[Reconstructed PDG2011] # External+internal W-emission amplitude -0.0015 D0 anti-D0 K- PHSP; +0.002100000 D0 anti-D0 K- PHSP; #[Reconstructed PDG2011] 0.0018 D*0 anti-D0 K- PHSP; -0.0047 D0 anti-D*0 K- PHSP; -0.0070 D*0 anti-D*0 K- PHSP; +0.004700000 D0 anti-D*0 K- PHSP; #[Reconstructed PDG2011] +0.005300000 D*0 anti-D*0 K- PHSP; #[Reconstructed PDG2011] # Internal W-emission amplitude (color suppressed modes) 0.0005 D- D+ K- PHSP; 0.0005 D*- D+ K- PHSP; -0.0015 D- D*+ K- PHSP; +0.001500000 D- D*+ K- PHSP; #[Reconstructed PDG2011] 0.0015 D*- D*+ K- PHSP; # 0.0025 D0 D- anti-K*0 PHSP; @@ -3295,44 +3453,44 @@ Decay B- # # B->D(*)D(*). See Ref [B1]: # -0.00027 D- D0 PHSP; -0.000335 D*- D0 SVS; -0.000335 D*0 D- SVS; -0.00104 D*0 D*- SVV_HELAMP 0.47 0.0 0.96 0.0 0.56 0.0; +0.000380000 D- D0 PHSP; #[Reconstructed PDG2011] +0.000390000 D*- D0 SVS; #[Reconstructed PDG2011] +0.000630000 D*0 D- SVS; #[Reconstructed PDG2011] +0.000810000 D*0 D*- SVV_HELAMP 0.47 0.0 0.96 0.0 0.56 0.0; #[Reconstructed PDG2011] # # B -> D(*) X Exclusive Modes # -0.0046 D*0 pi- SVS; -0.0050 D0 pi- PHSP; -0.0134 rho- D0 SVS; +0.005190000 D*0 pi- SVS; #[Reconstructed PDG2011] +0.004840000 D0 pi- PHSP; #[Reconstructed PDG2011] +0.013400000 rho- D0 SVS; #[Reconstructed PDG2011] # D* rho HELAMP parameters taken from ICHEP 98-852. -0.0098 D*0 rho- SVV_HELAMP 0.228 0.95 0.932 0.0 0.283 1.13; +0.009800000 D*0 rho- SVV_HELAMP 0.228 0.95 0.932 0.0 0.283 1.13; #[Reconstructed PDG2011] # 0.0005 D0 pi0 pi- PHSP; 0.0005 D*0 pi0 pi- PHSP; -0.00102 D+ pi- pi- PHSP; -0.00125 D*+ pi- pi- PHSP; +0.001070000 D+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.001350000 D*+ pi- pi- PHSP; #[Reconstructed PDG2011] # # D a1 updated Ref. [B1]: -0.00887 a_1- D0 SVS; -0.0021 D0 rho0 pi- PHSP; -0.0050 D0 pi+ pi- pi- PHSP; +0.004000000 a_1- D0 SVS; #[Reconstructed PDG2011] +0.000200000 D0 rho0 pi- PHSP; #[Reconstructed PDG2011] +0.006800000 D0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] # # SVV_HELAMP from factorization, recommendation # http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: # updated Ref. [B1]: # # -0.01597 D*0 a_1- SVV_HELAMP 0.200 0.0 0.866 0.0 0.458 0.0; +0.019000000 D*0 a_1- SVV_HELAMP 0.200 0.0 0.866 0.0 0.458 0.0; #[Reconstructed PDG2011] # -0.0005 D*0 rho0 pi- PHSP; -0.0005 D*0 pi+ pi- pi- PHSP; +0.00150 D*0 rho0 pi- PHSP; +0.000500000 D*0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] # 0.0020 D+ rho- pi- PHSP; 0.0020 D+ pi0 pi- pi- PHSP; 0.0020 D*+ rho- pi- PHSP; -0.0150 D*+ pi0 pi- pi- PHSP; +0.015000000 D*+ pi0 pi- pi- PHSP; #[Reconstructed PDG2011] 0.0005 D*0 rho- pi0 PHSP; 0.0005 D*0 pi- pi0 pi0 PHSP; # @@ -3340,97 +3498,163 @@ Decay B- # http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html # further update October 26, 2004 Lange # -0.0010 D_10 pi- SVS; -0.00075 D'_10 pi- SVS; -0.00080 D_2*0 pi- STS; +0.000876 D_10 pi- SVS; +0.0005 D'_10 pi- SVS; +0.00052 D_2*0 pi- STS; 0.0007 D_10 rho- PHSP; 0.0022 D'_10 rho- PHSP; 0.0038 D_2*0 rho- PHSP; -0.00091 D_0*0 pi- PHSP; +0.00061 D_0*0 pi- PHSP; # # -# B->DK, recommendation +# B->DK, recommendation # http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: # update: Ref [B1]: # -0.00041 D0 K- PHSP; -0.00036 D*0 K- SVS; -0.00061 K*- D0 SVS; -0.00077 D*0 K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; +0.000368000 D0 K- PHSP; #[Reconstructed PDG2011] +0.000421000 D*0 K- SVS; #[Reconstructed PDG2011] +0.000530000 K*- D0 SVS; #[Reconstructed PDG2011] +0.000810000 D*0 K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; #[Reconstructed PDG2011] #October 26, 2004 Lange -0.00000054 D- pi0 PHSP; -0.00000054 D*- pi0 SVS; -0.000011 D- anti-K0 PHSP; +0.0000005 D- pi0 PHSP; +0.0000005 D*- pi0 SVS; +0.000011 D- anti-K0 PHSP; 0.000006 D*- anti-K0 SVS; # #October 26, 2004 - Lange -0.0016 D0 D_s0*- PHSP; -0.0016 D*0 D_s0*- SVS; -0.0041 D_s1- D0 SVS; -0.0098 D*0 D_s1- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; +0.00075 D0 D_s0*- PHSP; +0.0009 D*0 D_s0*- SVS; +0.003100000 D_s1- D0 SVS; #[Reconstructed PDG2011] +0.012000000 D*0 D_s1- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00055 D0 K- anti-K0 PHSP; +0.00075 D0 K- anti-K*0 PHSP; +0.001500000 D*0 K- anti-K*0 PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.002750000 D0 omega pi- PHSP; #[Reconstructed PDG2011] +0.004500000 D*0 omega pi- PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00045 D0 D'_s1- PHSP; +0.00094 D*0 D'_s1- PHSP; # # Lam_c X / Sigma_c X 4.0 % # -#0.04000 cd_1 anti-uu_1 PYTHIA 23; -0.0330 cd_1 anti-uu_1 PYTHIA 23; +#0.04000 cd_1 anti-uu_1 PYTHIA 63; +0.032587684 cd_1 anti-uu_1 PYTHIA 63; # # Xi_c X 2.5% # -#0.02400 cs_1 anti-uu_1 PYTHIA 23; -0.00900 cs_1 anti-uu_1 PYTHIA 23; +#0.02400 cs_1 anti-uu_1 PYTHIA 63; +0.008887593 cs_1 anti-uu_1 PYTHIA 63; # # -0.225336 anti-u d c anti-u PYTHIA 48; -0.04300 anti-u d c anti-u PYTHIA 13; -0.02250 anti-u s c anti-u PYTHIA 13; +0.214329978 anti-u d c anti-u PYTHIA 23; +0.040912464 anti-u d c anti-u PYTHIA 43; +0.022218888 anti-u s c anti-u PYTHIA 43; #lange - try to crank up the psi production.... -0.07400 anti-c s c anti-u PYTHIA 13; -0.00400 anti-c d c anti-u PYTHIA 13; -0.00300 anti-u d u anti-u PYTHIA 48; -0.00400 anti-c s u anti-u PYTHIA 48; +0.073075460 anti-c s c anti-u PYTHIA 43; +0.003950000 anti-c d c anti-u PYTHIA 43; +0.002962500 anti-u d u anti-u PYTHIA 23; +0.003950000 anti-c s u anti-u PYTHIA 23; # JGS 11/5/02 This and similar a few lines above have been divided by two -# to solve a double-counting problem for this channel -0.00205 anti-u u d anti-u PYTHIA 48; -0.00007 anti-d d d anti-u PYTHIA 48; -0.00009 anti-s s d anti-u PYTHIA 48; -0.00220 anti-u u s anti-u PYTHIA 48; -0.00180 anti-d d s anti-u PYTHIA 48; -0.00150 anti-s s s anti-u PYTHIA 48; -0.00500 s g anti-u PYTHIA 33; +# to solve a double-counting problem for this channel +0.002024389 anti-u u d anti-u PYTHIA 23; +0.000069145 anti-d d d anti-u PYTHIA 23; +0.000088900 anti-s s d anti-u PYTHIA 23; +0.002172556 anti-u u s anti-u PYTHIA 23; +0.001777537 anti-d d s anti-u PYTHIA 23; +0.001481296 anti-s s s anti-u PYTHIA 23; +0.004937500 s anti-u PYTHIA 91; # #### +0.000550000 D0 K- K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000750000 D0 K- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.018000000 D*0 pi+ pi- pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005700000 D*0 pi- pi- pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002600000 D*+ pi- pi- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000180000 D_s+ pi- K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000145000 D_s*+ pi- K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 D_s+ K- K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001070000 J/psi K- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000108000 J/psi eta K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000350000 J/psi omega K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011800 J/psi anti-p- Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000025800 psi(2S) pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 chi_c1 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000018000 eta K_0*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009100 eta K_2*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000024000 omega K_0*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000021000 omega K_2*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000010100 anti-K*0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001070 f_2 K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000005600 anti-K_2*0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001200 K*- anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000006100 phi K_1- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000008400 phi K_2*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000043000 K_1- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007900 eta K- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003500 phi K- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007600 K- pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 anti-K*0 pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000046000 anti-K0 pi- pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000014000 K_2*- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000980 rho- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001620 anti-p- p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000005900 anti-p- p+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003600 anti-p- p+ K*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002500 anti-p- Lambda0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003000 anti-p- Lambda0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 anti-p- Lambda0 pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004800 anti-p- Lambda0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002000 anti-p- Lambda0 f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003400 anti-Lambda0 Lambda0 K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002200 anti-Lambda0 Lambda0 K*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 Lambda_c+ anti-p- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 Lambda_c+ anti-p- pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002300000 Lambda_c+ anti-p- pi- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000035000 Sigma_c0 anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000440000 Sigma_c0 anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000440000 Sigma_c0 anti-p- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 Sigma_c++ anti-p- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay B+ -# +# Updated to PDG 2008 # b -> c semileptonic # -0.0617 anti-D*0 e+ nu_e PHOTOS HQET 0.77 1.33 0.92; -0.0224 anti-D0 e+ nu_e PHOTOS ISGW2; -0.0056 anti-D_10 e+ nu_e PHOTOS ISGW2; -0.0049 anti-D_0*0 e+ nu_e PHOTOS ISGW2; -0.009 anti-D'_10 e+ nu_e PHOTOS ISGW2; -0.003 anti-D_2*0 e+ nu_e PHOTOS ISGW2; -0.0006 D*- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; -0.0003 anti-D*0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; -0.0019 D- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; -0.0010 anti-D0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; +0.0569 anti-D*0 e+ nu_e PHOTOS HQET2 1.207 0.920 1.406 0.853; # For details see B- decay +0.0227 anti-D0 e+ nu_e PHOTOS HQET2 1.185 1.081; +0.0045 anti-D_10 e+ nu_e PHOTOS ISGW2; +0.0037 anti-D_0*0 e+ nu_e PHOTOS ISGW2; +0.0040 anti-D'_10 e+ nu_e PHOTOS ISGW2; +0.0033 anti-D_2*0 e+ nu_e PHOTOS ISGW2; +0.006100 D*- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; +0.0006 anti-D*0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; +0.0021 D- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; +0.0020 anti-D0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; -0.0617 anti-D*0 mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; -0.0224 anti-D0 mu+ nu_mu PHOTOS ISGW2; -0.0056 anti-D_10 mu+ nu_mu PHOTOS ISGW2; -0.0049 anti-D_0*0 mu+ nu_mu PHOTOS ISGW2; -0.009 anti-D'_10 mu+ nu_mu PHOTOS ISGW2; -0.003 anti-D_2*0 mu+ nu_mu PHOTOS ISGW2; -0.0006 D*- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0003 anti-D*0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0019 D- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0010 anti-D0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; +# For muonic decays do same as for electrons +0.0569 anti-D*0 mu+ nu_mu PHOTOS HQET2 1.207 0.920 1.406 0.853; +0.0227 anti-D0 mu+ nu_mu PHOTOS HQET2 1.185 1.081; +0.0045 anti-D_10 mu+ nu_mu PHOTOS ISGW2; +0.0037 anti-D_0*0 mu+ nu_mu PHOTOS ISGW2; +0.0040 anti-D'_10 mu+ nu_mu PHOTOS ISGW2; +0.0033 anti-D_2*0 mu+ nu_mu PHOTOS ISGW2; +0.006100 D*- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0006 anti-D*0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0021 D- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0020 anti-D0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; # # b -> c tau nu # -0.0160 anti-D*0 tau+ nu_tau ISGW2; -0.0070 anti-D0 tau+ nu_tau ISGW2; +0.020000000 anti-D*0 tau+ nu_tau ISGW2; #[Reconstructed PDG2011] +0.007000000 anti-D0 tau+ nu_tau ISGW2; #[Reconstructed PDG2011] 0.0013 anti-D_10 tau+ nu_tau ISGW2; 0.0013 anti-D_0*0 tau+ nu_tau ISGW2; 0.0020 anti-D'_10 tau+ nu_tau ISGW2; @@ -3440,24 +3664,26 @@ Decay B+ # # # +# This will need check whether we get correct inclusive q2 dependence -0.000072 pi0 e+ nu_e PHOTOS ISGW2; -0.000084 eta e+ nu_e PHOTOS ISGW2; -0.000145 rho0 e+ nu_e PHOTOS ISGW2; -0.000145 omega e+ nu_e PHOTOS ISGW2; -0.000084 eta' e+ nu_e PHOTOS ISGW2; +0.00007800 pi0 e+ nu_e PHOTOS ISGW2; # PDG2014 +0.00003800 eta e+ nu_e PHOTOS ISGW2; # PDG2014 +0.00015800 rho0 e+ nu_e PHOTOS ISGW2; # PDG2014 +0.00011900 omega e+ nu_e PHOTOS ISGW2; # PDG2014 +0.000230 eta' e+ nu_e PHOTOS ISGW2; # PDG2014 0.000000 anti-D(2S)0 e+ nu_e PHOTOS ISGW2; -0.000000 anti-D*(2S)0 e+ nu_e PHOTOS ISGW2; -0.001948 Xu0 e+ nu_e VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; -# -0.000072 pi0 mu+ nu_mu PHOTOS ISGW2; -0.000084 eta mu+ nu_mu PHOTOS ISGW2; -0.000145 rho0 mu+ nu_mu PHOTOS ISGW2; -0.000145 omega mu+ nu_mu PHOTOS ISGW2; -0.000084 eta' mu+ nu_mu PHOTOS ISGW2; +0.000000 anti-D*(2S)0 e+ nu_e PHOTOS ISGW2; +0.001948 Xu0 e+ nu_e VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; +# +# For muons do same as for electrons +0.00007800 pi0 mu+ nu_mu PHOTOS ISGW2; +0.00003800 eta mu+ nu_mu PHOTOS ISGW2; +0.00015800 rho0 mu+ nu_mu PHOTOS ISGW2; +0.00011900 omega mu+ nu_mu PHOTOS ISGW2; +0.000230 eta' mu+ nu_mu PHOTOS ISGW2; 0.000000 anti-D(2S)0 mu+ nu_mu PHOTOS ISGW2; -0.000000 anti-D*(2S)0 mu+ nu_mu PHOTOS ISGW2; -0.001948 Xu0 mu+ nu_mu VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; +0.000000 anti-D*(2S)0 mu+ nu_mu PHOTOS ISGW2; +0.0020454 Xu0 mu+ nu_mu VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; # 0.000030 pi0 tau+ nu_tau ISGW2; 0.000012 eta tau+ nu_tau ISGW2; @@ -3480,10 +3706,10 @@ Decay B+ # # # -# b->u hadronic +# b->u hadronic # Ref. [B1]: # -0.000020 D_s+ pi0 PHSP; +0.000016000 D_s+ pi0 PHSP; #[Reconstructed PDG2011] 0.000020 D_s*+ pi0 SVS; # 0.000028 rho0 D_s+ SVS; @@ -3492,7 +3718,7 @@ Decay B+ # # b-> s gamma # -0.0000403 K*+ gamma HELAMP 1.0 0.0 1.0 0.0; +0.000042100 K*+ gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] #0.0000135 K_1+ gamma HELAMP 1.0 0.0 1.0 0.0; #0.0000065 K'_1+ gamma HELAMP 1.0 0.0 1.0 0.0; #0.0000128 K'*+ gamma HELAMP 1.0 0.0 1.0 0.0; @@ -3500,19 +3726,19 @@ Decay B+ #0.0000017 K''*+ gamma HELAMP 1.0 0.0 1.0 0.0; 0.0003118 Xsu gamma BTOXSGAMMA 2; # -0.000000574 K+ e+ e- PHOTOS BTOSLLBALL; -0.000001835 K*+ e+ e- PHOTOS BTOSLLBALL; -0.000004994 Xsu e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.000000574 K+ mu+ mu- PHOTOS BTOSLLBALL; -0.000001380 K*+ mu+ mu- PHOTOS BTOSLLBALL; -0.000002506 Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; -0.000000130 K+ tau+ tau- PHOTOS BTOSLLBALL; -0.000000190 K*+ tau+ tau- PHOTOS BTOSLLBALL; -0.000000200 Xsu tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000550 K+ e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001550 K*+ e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000050 Xsu e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000520 K+ mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001160 K*+ mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000025 Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.0000001 K+ tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 K*+ tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 Xsu tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; # # b -> l nu # -0.000093 tau+ nu_tau SLN; +0.000180000 tau+ nu_tau SLN; #[Reconstructed PDG2011] 0.000000 mu+ nu_mu PHOTOS SLN; 0.000000 e+ nu_e PHOTOS SLN; # @@ -3523,44 +3749,44 @@ Decay B+ # Exclusive hadronic b->u # 0.000026 pi+ pi0 pi0 CB3PI-P00 alpha; -0.000016 pi+ pi+ pi- CB3PI-MPP alpha; +0.000000 pi+ pi+ pi- CB3PI-MPP alpha; #### -0.0000048 eta pi+ PHSP; -0.0000026 eta K+ PHSP; -0.000024 K*+ eta SVS; -0.0000086 rho+ eta SVS; -0.0000042 eta' pi+ PHSP; -0.000078 eta' K+ PHSP; -0.000001 K*+ eta' SVS; -0.000001 rho+ eta' SVS; -0.0000059 omega pi+ SVS; -0.0000051 omega K+ SVS; -0.000001 omega K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000013 omega rho+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; -0.000001 phi pi+ SVS; -0.0000090 phi K+ SVS; +0.000004070 eta pi+ PHSP; #[Reconstructed PDG2011] +0.000002330 eta K+ PHSP; #[Reconstructed PDG2011] +0.000019300 K*+ eta SVS; #[Reconstructed PDG2011] +0.000007000 rho+ eta SVS; #[Reconstructed PDG2011] +0.000002700 eta' pi+ PHSP; #[Reconstructed PDG2011] +0.000070600 eta' K+ PHSP; #[Reconstructed PDG2011] +0.000004900 K*+ eta' SVS; #[Reconstructed PDG2011] +0.000008700 rho+ eta' SVS; #[Reconstructed PDG2011] +0.000006900 omega pi+ SVS; #[Reconstructed PDG2011] +0.000006700 omega K+ SVS; #[Reconstructed PDG2011] +0.0000010 omega K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000015900 omega rho+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.0000000 phi pi+ SVS; +0.000008300 phi K+ SVS; #[Reconstructed PDG2011] #2-body modes from Jim Olsen # (K_S0 K- and K_L0 K- -> 1x10^-6, Jim Olsen - Mar 27, 2001) # (pi- pi0 -> 5x10^-6 and K- pi0 -> 11x10^-6, Jim Olsen - Mar 27, 2001) # PR LHCb 04/08/04 split into KS/KL 0.000000 K0 pi+ PHSP; -0.000012 K_S0 pi+ PHSP; -0.000012 K_L0 pi+ PHSP; -0.000001 anti-K0 K+ PHSP; -0.0000055 pi+ pi0 PHSP; -0.000012 K+ pi0 PHSP; +0.000011550 K_S0 pi+ PHSP; #[Reconstructed PDG2011] +0.000011550 K_L0 pi+ PHSP; #[Reconstructed PDG2011] +0.000001360 anti-K0 K+ PHSP; #[Reconstructed PDG2011] +0.000005700 pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.000012900 K+ pi0 PHSP; #[Reconstructed PDG2011] # # 3-body John Back (jback@slac.stanford.edu) - Oct 15, 2002 # JGS intersperses modes with pi0->eta,eta' # B+ modes # # rho0 3-body modes -0.0000091 rho0 pi+ SVS; -0.0000052 rho0 K+ SVS; +0.000008300 rho0 pi+ SVS; #[Reconstructed PDG2011] +0.000003700 rho0 K+ SVS; #[Reconstructed PDG2011] # # rho+ 3-body modes -0.000012 rho+ pi0 SVS; -0.000001 rho+ K0 SVS; +0.000010900 rho+ pi0 SVS; #[Reconstructed PDG2011] +0.000008000 rho+ K0 SVS; #[Reconstructed PDG2011] # # rho(1450) 3-body modes 0.0000022 rho(2S)0 pi+ SVS; @@ -3568,23 +3794,23 @@ Decay B+ # # f0(980) 3-body modes 0.000001 f_0 pi+ PHSP; -0.0000085 f_0 K+ PHSP; +0.0000092 f_0 K+ PHSP; 0.000001 a_0+ K0 PHSP; 0.000001 a_00 K+ PHSP; 0.000001 a_00 pi+ PHSP; 0.000001 a_0+ pi0 PHSP; -0.0000023 f_2 pi+ PHSP; +0.000001600 f_2 pi+ PHSP; #[Reconstructed PDG2011] # # K*0(892) 3-body modes -0.000070 K_0*0 pi+ PHSP; -0.000002 anti-K_0*0 K+ PHSP; +0.000045000 K_0*0 pi+ PHSP; #[Reconstructed PDG2011] +0.0000010 anti-K_0*0 K+ PHSP; 0.000002 K_0*+ pi0 PHSP; 0.000002 K_0*+ anti-K0 PHSP; # # K*+(892) 3-body modes -0.000002 K*+ pi0 SVS; +0.000006900 K*+ pi0 SVS; #[Reconstructed PDG2011] 0.000003 K*+ anti-K0 SVS; # # @@ -3595,15 +3821,15 @@ Decay B+ #0402270.000002 pi+ pi- pi+ PHSP; # # K+ pi- pi+: high mass + f0(400-1200) = (5+5)e-6 -0.0000049 K+ pi- pi+ PHSP; +0.000000000 K+ pi- pi+ PHSP; #[Reconstructed PDG2011] # # K+ K- pi+: just non-resonant -0.000001 K+ K- pi+ PHSP; +0.000005000 K+ K- pi+ PHSP; #[Reconstructed PDG2011] # # K+K-K+: high mass structure near 1500 + non-res: total - phiK = 30-4 -0.000026 K+ K- K+ PHSP; +0.000025400 K+ K- K+ PHSP; #[Reconstructed PDG2011] +# # -# # K+K+pi-: suppressed mode (1e-7) 0.0000001 K+ K+ pi- PHSP; # K-pi+pi+: suppressed mode (1e-7) @@ -3636,7 +3862,7 @@ Decay B+ 0.000001 K+ eta' eta' PHSP; # # K+ K0 anti-K0: 4*BF(K+KsKs) (4 is a guess) -0.000048 K+ K0 anti-K0 PHSP; +0.0000460 K+ K0 anti-K0 PHSP; # # pi+ K0 anti-K0 0.000001 pi+ K0 anti-K0 PHSP; @@ -3648,7 +3874,7 @@ Decay B+ #4-body modes from Andrei Gritsan #--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- # PR LHCb 22 Apr 2004 Set long. pol. for rho rho -0.000015 rho+ rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; +0.000024000 rho+ rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] 0.000010 rho0 pi+ pi0 PHSP; 0.000005 rho0 pi+ eta PHSP; 0.000002 rho0 pi+ eta' PHSP; @@ -3670,9 +3896,9 @@ Decay B+ 0.000002 pi+ eta eta pi0 PHSP; 0.000002 pi+ eta' pi0 pi0 PHSP; 0.000001 pi+ eta' eta pi0 PHSP; -0.000040 a_10 pi+ SVS; -0.000040 a_1+ pi0 SVS; -0.000010 b_10 pi+ SVS; +0.000020000 a_10 pi+ SVS; #[Reconstructed PDG2011] +0.000026000 a_1+ pi0 SVS; #[Reconstructed PDG2011] +0.0000067 b_10 pi+ SVS; 0.000010 b_1+ pi0 SVS; 0.000010 rho+ f_0 SVS; 0.000010 rho+ a_00 SVS; @@ -3682,11 +3908,11 @@ Decay B+ 0.000001 a_0+ pi0 pi0 PHSP; 0.000001 a_0- pi+ pi+ PHSP; #--- 4-body rho-K*, a1-K, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- -0.000010 rho+ K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000009200 rho+ K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] 0.000010 rho0 K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; 0.000010 pi+ pi0 K*0 PHSP; 0.000005 pi+ eta K*0 PHSP; -0.000010 pi- pi+ K*+ PHSP; +0.000069800 pi- pi+ K*+ PHSP; #[Reconstructed PDG2011] 0.000010 pi0 pi0 K*+ PHSP; 0.000005 pi0 eta K*+ PHSP; 0.000002 eta eta K*+ PHSP; @@ -3717,26 +3943,26 @@ Decay B+ 0.000002 pi0 pi0 eta' K+ PHSP; 0.000001 pi0 eta eta' K+ PHSP; 0.000010 rho+ K_0*0 PHSP; -0.000010 rho0 K_0*+ PHSP; +0.000006 rho0 K_0*+ PHSP; 0.000010 pi+ pi0 K_0*0 PHSP; 0.000010 pi0 pi0 K_0*+ PHSP; -0.000010 K*+ f_0 SVS; +0.000005200 K*+ f_0 SVS; #[Reconstructed PDG2011] 0.000010 a_10 K+ SVS; -0.000010 a_1+ K0 SVS; -0.000010 b_10 K+ SVS; +0.000035000 a_1+ K0 SVS; #[Reconstructed PDG2011] +0.0000091 b_10 K+ SVS; 0.000010 b_1+ K0 SVS; 0.000005 K*+ a_00 SVS; 0.000005 K*0 a_0+ SVS; #--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ -0.000001 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; 0.000001 phi rho+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; 0.000001 phi pi+ pi0 PHSP; 0.0000005 phi pi+ eta PHSP; 0.0000002 phi pi+ eta' PHSP; 0.000001 K+ K- rho+ PHSP; 0.000001 K0 anti-K0 rho+ PHSP; -0.000001 anti-K0 K+ rho0 PHSP; -0.000001 anti-K0 K+ omega PHSP; +0.000001 anti-K0 K+ rho0 PHSP; +0.000001 anti-K0 K+ omega PHSP; 0.000001 K+ K- pi+ pi0 PHSP; 0.0000005 K+ K- pi+ eta PHSP; 0.0000002 K+ K- pi+ eta' PHSP; @@ -3760,12 +3986,12 @@ Decay B+ 0.0000005 K*+ anti-K0 eta PHSP; 0.0000002 K*+ anti-K0 eta' PHSP; #--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- -0.000011 phi K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000010000 phi K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] 0.000010 phi K0 pi+ PHSP; 0.000010 phi K+ pi0 PHSP; 0.000005 phi K+ eta PHSP; 0.000002 phi K+ eta' PHSP; -0.000010 K- K+ K*+ PHSP; +0.000026000 K- K+ K*+ PHSP; #[Reconstructed PDG2011] 0.000010 K+ K*- K+ PHSP; 0.000010 K+ K*0 anti-K0 PHSP; 0.000010 K+ K0 anti-K*0 PHSP; @@ -3778,7 +4004,7 @@ Decay B+ 0.000005 K0 anti-K0 K+ eta PHSP; 0.000002 K0 anti-K0 K+ eta' PHSP; 0.000010 K0 anti-K0 K0 pi+ PHSP; -0.000010 phi K_0*+ PHSP; +0.000007000 phi K_0*+ PHSP; #[Reconstructed PDG2011] 0.000010 K- K+ K_0*+ PHSP; 0.000010 K+ K+ K_0*- PHSP; 0.000010 K+ anti-K_0*0 K0 PHSP; @@ -3786,8 +4012,8 @@ Decay B+ 0.000002 phi K'_1+ PHSP; 0.000002 K- K+ K'_1+ PHSP; #--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- -0.000001 phi anti-K0 K+ PHSP; -0.000001 K+ K- K+ anti-K0 PHSP; +0.000001 phi anti-K0 K+ PHSP; +0.000001 K+ K- K+ anti-K0 PHSP; 0.000001 K0 anti-K0 anti-K0 K+ PHSP; # #5-body modes from Jim Smith - 1/30/05 @@ -4072,7 +4298,7 @@ Decay B+ 0.000005 K+ K'_10 anti-K0 eta PHSP; 0.000002 K+ K'_10 anti-K0 eta' PHSP; #--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ -0.000003 phi phi K+ PHSP; +0.000004900 phi phi K+ PHSP; #[Reconstructed PDG2011] 0.000001 phi phi pi+ PHSP; 0.000001 phi K+ K- K+ PHSP; 0.000001 phi K0 anti-K0 K+ PHSP; @@ -4097,10 +4323,10 @@ Decay B+ # # B -> cc= s sum = 1.92% # -0.00106 J/psi K+ SVS; -0.00143 J/psi K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; -0.00004 J/psi pi+ SVS; -0.00006 J/psi rho+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; +0.001014000 J/psi K+ SVS; #[Reconstructed PDG2011] +0.001430000 J/psi K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.000049000 J/psi pi+ SVS; #[Reconstructed PDG2011] +0.000050000 J/psi rho+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] 0.0002 J/psi K0 pi+ PHSP; 0.0001 J/psi K+ pi0 PHSP; #rl0.0007 J/psi K+ pi- pi+ PHSP; @@ -4108,27 +4334,27 @@ Decay B+ #rl0.00035 J/psi K0 pi+ pi0 PHSP; 0.0001 J/psi K'_1+ SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; 0.0005 J/psi K_2*+ PHSP; -0.0018 J/psi K_1+ SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; -0.00009 J/psi phi K+ PHSP; +0.001800000 J/psi K_1+ SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] +0.000052000 J/psi phi K+ PHSP; #[Reconstructed PDG2011] # -0.00063 psi(2S) K+ SVS; -0.0006 psi(2S) K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; +0.000646000 psi(2S) K+ SVS; #[Reconstructed PDG2011] +0.000620000 psi(2S) K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] 0.0004 psi(2S) K0 pi+ PHSP; 0.0002 psi(2S) K+ pi0 PHSP; -0.0002 psi(2S) K+ pi- pi+ PHSP; +0.001900000 psi(2S) K+ pi- pi+ PHSP; #[Reconstructed PDG2011] 0.0001 psi(2S) K+ pi0 pi0 PHSP; 0.0001 psi(2S) K0 pi+ pi0 PHSP; 0.0004 psi(2S) K_1+ PHSP; # -0.0009 eta_c K+ PHSP; -0.0012 K*+ eta_c SVS; +0.000910000 eta_c K+ PHSP; #[Reconstructed PDG2011] +0.001200000 K*+ eta_c SVS; #[Reconstructed PDG2011] 0.0002 eta_c K0 pi+ PHSP; 0.0001 eta_c K+ pi0 PHSP; 0.0002 eta_c K+ pi- pi+ PHSP; 0.0001 eta_c K+ pi0 pi0 PHSP; 0.0001 eta_c K0 pi+ pi0 PHSP; # -0.00036 eta_c(2S) K+ PHSP; +0.000340000 eta_c(2S) K+ PHSP; #[Reconstructed PDG2011] 0.00048 K*+ eta_c(2S) SVS; 0.00008 eta_c(2S) K0 pi+ PHSP; 0.00005 eta_c(2S) K+ pi0 PHSP; @@ -4136,7 +4362,7 @@ Decay B+ 0.00005 eta_c(2S) K+ pi0 pi0 PHSP; 0.00005 eta_c(2S) K0 pi+ pi0 PHSP; # -0.0003 chi_c0 K+ PHSP; +0.000133000 chi_c0 K+ PHSP; #[Reconstructed PDG2011] 0.0004 K*+ chi_c0 SVS; 0.0002 chi_c0 K0 pi+ PHSP; 0.0001 chi_c0 K+ pi0 PHSP; @@ -4144,8 +4370,8 @@ Decay B+ 0.0001 chi_c0 K+ pi0 pi0 PHSP; 0.0001 chi_c0 K0 pi+ pi0 PHSP; # -0.00057 chi_c1 K+ SVS; -0.00029 chi_c1 K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; +0.000460000 chi_c1 K+ SVS; #[Reconstructed PDG2011] +0.000300000 chi_c1 K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] 0.0004 chi_c1 K0 pi+ PHSP; 0.0002 chi_c1 K+ pi0 PHSP; 0.0004 chi_c1 K+ pi- pi+ PHSP; @@ -4160,7 +4386,7 @@ Decay B+ 0.0001 chi_c2 K+ pi0 pi0 PHSP; 0.0001 chi_c2 K0 pi+ pi0 PHSP; # -0.00048 psi(3770) K+ SVS; +0.000490000 psi(3770) K+ SVS; #[Reconstructed PDG2011] 0.0005 psi(3770) K*+ PHSP; 0.0003 psi(3770) K0 pi+ PHSP; 0.0002 psi(3770) K+ pi0 PHSP; @@ -4171,10 +4397,10 @@ Decay B+ # # b -> c (sc=) -> D Ds X Sum = 10% # -0.0129 anti-D0 D_s+ PHSP; -0.0124 anti-D*0 D_s+ SVS; -0.0111 D_s*+ anti-D0 SVS; -0.0278 D_s*+ anti-D*0 SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.010000000 anti-D0 D_s+ PHSP; #[Reconstructed PDG2011] +0.008200000 anti-D*0 D_s+ SVS; #[Reconstructed PDG2011] +0.007600000 D_s*+ anti-D0 SVS; #[Reconstructed PDG2011] +0.017100000 D_s*+ anti-D*0 SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; #[Reconstructed PDG2011] 0.0006 anti-D'_10 D_s+ SVS; 0.0012 anti-D'_10 D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; 0.0012 anti-D_10 D_s+ SVS; @@ -4202,18 +4428,18 @@ Decay B+ # update October 26, 2004 # External W-emission amplitude 0.0017 anti-D0 D+ K0 PHSP; -0.0049 anti-D0 D*+ K0 PHSP; -0.0031 anti-D*0 D+ K0 PHSP; -0.0100 anti-D*0 D*+ K0 PHSP; +0.0052 anti-D0 D*+ K0 PHSP; +0.0031 anti-D*0 D+ K0 PHSP; +0.007800000 anti-D*0 D*+ K0 PHSP; #[Reconstructed PDG2011] # External+internal W-emission amplitude -0.0015 anti-D0 D0 K+ PHSP; +0.002100000 anti-D0 D0 K+ PHSP; #[Reconstructed PDG2011] 0.0018 anti-D*0 D0 K+ PHSP; -0.0047 anti-D0 D*0 K+ PHSP; -0.0070 anti-D*0 D*0 K+ PHSP; +0.004700000 anti-D0 D*0 K+ PHSP; #[Reconstructed PDG2011] +0.005300000 anti-D*0 D*0 K+ PHSP; #[Reconstructed PDG2011] # Internal W-emission amplitude (color suppressed modes) 0.0005 D+ D- K+ PHSP; 0.0005 D*+ D- K+ PHSP; -0.0015 D+ D*- K+ PHSP; +0.001500000 D+ D*- K+ PHSP; #[Reconstructed PDG2011] 0.0015 D*+ D*- K+ PHSP; # 0.0025 anti-D0 D+ K*0 PHSP; @@ -4233,44 +4459,44 @@ Decay B+ # # B->D(*)D(*). See Ref [B1]: # -0.00027 D+ anti-D0 PHSP; -0.000335 D*+ anti-D0 SVS; -0.000335 anti-D*0 D+ SVS; -0.00104 anti-D*0 D*+ SVV_HELAMP 0.56 0.0 0.96 0.0 0.47 0.0; +0.000380000 D+ anti-D0 PHSP; #[Reconstructed PDG2011] +0.000390000 D*+ anti-D0 SVS; #[Reconstructed PDG2011] +0.000630000 anti-D*0 D+ SVS; #[Reconstructed PDG2011] +0.000810000 anti-D*0 D*+ SVV_HELAMP 0.56 0.0 0.96 0.0 0.47 0.0; #[Reconstructed PDG2011] # # B -> D(*) X Exclusive Modes # October 26, 2004 Lange update -0.0046 anti-D*0 pi+ SVS; -0.0050 anti-D0 pi+ PHSP; -0.0134 rho+ anti-D0 SVS; +0.005190000 anti-D*0 pi+ SVS; #[Reconstructed PDG2011] +0.004840000 anti-D0 pi+ PHSP; #[Reconstructed PDG2011] +0.013400000 rho+ anti-D0 SVS; #[Reconstructed PDG2011] # D* rho HELAMP parameters taken from ICHEP 98-852. -0.0098 anti-D*0 rho+ SVV_HELAMP 0.283 1.13 0.932 0.0 0.228 0.95; +0.009800000 anti-D*0 rho+ SVV_HELAMP 0.283 1.13 0.932 0.0 0.228 0.95; #[Reconstructed PDG2011] # -0.0005 anti-D0 pi0 pi+ PHSP; +0.0005 anti-D0 pi0 pi+ PHSP; 0.0005 anti-D*0 pi0 pi+ PHSP; -0.00102 D- pi+ pi+ PHSP; -0.00125 D*- pi+ pi+ PHSP; +0.001070000 D- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.001350000 D*- pi+ pi+ PHSP; #[Reconstructed PDG2011] # # D a1 updated Ref. [B1]: -0.00887 a_1+ anti-D0 SVS; -0.0021 anti-D0 rho0 pi+ PHSP; -0.0050 anti-D0 pi- pi+ pi+ PHSP; +0.004000000 a_1+ anti-D0 SVS; #[Reconstructed PDG2011] +0.000200000 anti-D0 rho0 pi+ PHSP; #[Reconstructed PDG2011] +0.006800000 anti-D0 pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] # # SVV_HELAMP from factorization, recommendation # http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: # updated Ref. [B1]: # October 26, 2004 Lange update # -0.01597 anti-D*0 a_1+ SVV_HELAMP 0.458 0.0 0.866 0.0 0.200 0.0; +0.019000000 anti-D*0 a_1+ SVV_HELAMP 0.458 0.0 0.866 0.0 0.200 0.0; #[Reconstructed PDG2011] # -0.0005 anti-D*0 rho0 pi+ PHSP; -0.0005 anti-D*0 pi- pi+ pi+ PHSP; +0.00150 anti-D*0 rho0 pi+ PHSP; +0.000500000 anti-D*0 pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] # 0.0020 D- rho+ pi+ PHSP; 0.0020 D- pi0 pi+ pi+ PHSP; 0.0020 D*- rho+ pi+ PHSP; -0.0150 D*- pi0 pi+ pi+ PHSP; +0.015000000 D*- pi0 pi+ pi+ PHSP; #[Reconstructed PDG2011] 0.0005 anti-D*0 rho+ pi0 PHSP; 0.0005 anti-D*0 pi+ pi0 pi0 PHSP; # @@ -4278,64 +4504,128 @@ Decay B+ # http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html # # -0.0010 anti-D_10 pi+ SVS; -0.00075 anti-D'_10 pi+ SVS; -0.00080 anti-D_2*0 pi+ STS; +0.000876 anti-D_10 pi+ SVS; +0.0005 anti-D'_10 pi+ SVS; +0.00052 anti-D_2*0 pi+ STS; 0.0007 anti-D_10 rho+ PHSP; 0.0022 anti-D'_10 rho+ PHSP; 0.0038 anti-D_2*0 rho+ PHSP; -0.00091 anti-D_0*0 pi+ PHSP; +0.00061 anti-D_0*0 pi+ PHSP; # # -# B->DK, recommendation +# B->DK, recommendation # http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: # update: Ref [B1]: # -0.00041 anti-D0 K+ PHSP; -0.00036 anti-D*0 K+ SVS; -0.00061 K*+ anti-D0 SVS; -0.00077 anti-D*0 K*+ SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; +0.000368000 anti-D0 K+ PHSP; #[Reconstructed PDG2011] +0.000421000 anti-D*0 K+ SVS; #[Reconstructed PDG2011] +0.000530000 K*+ anti-D0 SVS; #[Reconstructed PDG2011] +0.000810000 anti-D*0 K*+ SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; #[Reconstructed PDG2011] #October 26, 2004 Lange -0.00000054 D+ pi0 PHSP; -0.00000054 D*+ pi0 SVS; -0.000011 D+ anti-K0 PHSP; +0.0000005 D+ pi0 PHSP; +0.0000005 D*+ pi0 SVS; +0.000011 D+ anti-K0 PHSP; 0.000006 D*+ anti-K0 SVS; # #October 26, 2004 - Lange -0.0016 anti-D0 D_s0*+ PHSP; -0.0016 anti-D*0 D_s0*+ SVS; -0.0041 D_s1+ anti-D0 SVS; -0.0098 anti-D*0 D_s1+ SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; +0.00075 anti-D0 D_s0*+ PHSP; +0.00090 anti-D*0 D_s0*+ SVS; +0.003100000 D_s1+ anti-D0 SVS; #[Reconstructed PDG2011] +0.012000000 anti-D*0 D_s1+ SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] # -# Lam_c X / Sigma_c X +# Feb 2009 # -#0.04000 anti-cd_1 uu_1 PYTHIA 23; -0.0330 anti-cd_1 uu_1 PYTHIA 23; +0.000550000 anti-D0 K+ anti-K0 PHSP; #[Reconstructed PDG2011] +0.000750000 anti-D0 K+ anti-K*0 PHSP; #[Reconstructed PDG2011] +0.00150 anti-D*0 K+ anti-K*0 PHSP; # -# Xi_c X 2.4% +# Feb 2009 +# +0.002750000 anti-D0 omega pi+ PHSP; #[Reconstructed PDG2011] +0.004500000 anti-D*0 omega pi+ PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00045 anti-D0 D'_s1+ PHSP; +0.00094 anti-D*0 D'_s1+ PHSP; # -#0.02400 anti-cs_1 uu_1 PYTHIA 23; -0.00900 anti-cs_1 uu_1 PYTHIA 23; +# Lam_c X / Sigma_c X # +#0.04000 anti-cd_1 uu_1 PYTHIA 63; +0.032572352 anti-cd_1 uu_1 PYTHIA 63; # -0.225266 u anti-d anti-c u PYTHIA 48; -0.04300 u anti-d anti-c u PYTHIA 13; -0.02250 u anti-s anti-c u PYTHIA 13; +# Xi_c X 2.4% + +#0.02400 anti-cs_1 uu_1 PYTHIA 63; +0.008883411 anti-cs_1 uu_1 PYTHIA 63; +# +# +0.211960282 u anti-d anti-c u PYTHIA 23; +0.040460124 u anti-d anti-c u PYTHIA 43; +0.022208435 u anti-s anti-c u PYTHIA 43; #lange - try to crank up the psi production.... -0.07400 c anti-s anti-c u PYTHIA 13; -0.00400 c anti-d anti-c u PYTHIA 13; -0.00300 u anti-d anti-u u PYTHIA 48; -0.00400 c anti-s anti-u u PYTHIA 48; +0.073041080 c anti-s anti-c u PYTHIA 43; +0.003948141 c anti-d anti-c u PYTHIA 43; +0.002961106 u anti-d anti-u u PYTHIA 23; +0.003948141 c anti-s anti-u u PYTHIA 23; # JGS 11/5/02 This and similar a few lines above have been divided by two -# to solve a double-counting problem for this channel -0.00205 u anti-u anti-d u PYTHIA 48; -0.00007 d anti-d anti-d u PYTHIA 48; -0.00009 s anti-s anti-d u PYTHIA 48; -0.00220 u anti-u anti-s u PYTHIA 48; -0.00180 d anti-d anti-s u PYTHIA 48; -0.00150 s anti-s anti-s u PYTHIA 48; -0.00500 anti-s g u PYTHIA 33; +# to solve a double-counting problem for this channel +0.002023436 u anti-u anti-d u PYTHIA 23; +0.000069112 d anti-d anti-d u PYTHIA 23; +0.000088858 s anti-s anti-d u PYTHIA 23; +0.002171534 u anti-u anti-s u PYTHIA 23; +0.001776701 d anti-d anti-s u PYTHIA 23; +0.001480600 s anti-s anti-s u PYTHIA 23; +0.004935177 anti-s u PYTHIA 91; #### +0.001500000 anti-D*0 K+ K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.018000000 anti-D*0 pi- pi+ pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005700000 anti-D*0 pi+ pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002600000 D*- pi+ pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000180000 D_s- pi+ K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000145000 D_s*- pi+ K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 D_s- K+ K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001070000 J/psi K+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000108000 J/psi eta K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000350000 J/psi omega K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011800 J/psi p+ anti-Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000025800 psi(2S) pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 chi_c1 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000018000 eta K_0*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009100 eta K_2*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000024000 omega K_0*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000021000 omega K_2*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000010100 K*0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001070 f_2 K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000005600 K_2*0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001200 K*+ K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000006100 phi K_1+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000008400 phi K_2*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000043000 K_1+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007900 eta K+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003500 phi K+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007600 K+ pi- pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 K*0 pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000046000 K0 pi+ pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000014000 K_2*+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000980 rho+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001620 p+ anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000005900 p+ anti-p- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003600 p+ anti-p- K*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002500 p+ anti-Lambda0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003000 p+ anti-Lambda0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 p+ anti-Lambda0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004800 p+ anti-Lambda0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002000 p+ anti-Lambda0 f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003400 Lambda0 anti-Lambda0 K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002200 Lambda0 anti-Lambda0 K*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 anti-Lambda_c- p+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 anti-Lambda_c- p+ pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002300000 anti-Lambda_c- p+ pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000035000 anti-Sigma_c0 p+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000440000 anti-Sigma_c0 p+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000440000 anti-Sigma_c0 p+ pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 anti-Sigma_c-- p+ pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay #----------------------------------------------------------------- @@ -4387,19 +4677,19 @@ Enddecay Decay anti-B_s0 # b --> c (l nu) # Sum = 24.5% -0.0210 D_s+ e- anti-nu_e PHOTOS ISGW2; -0.0490 D_s*+ e- anti-nu_e PHOTOS ISGW2; +0.0210 D_s+ e- anti-nu_e PHOTOS HQET 1.185 1.081; +0.0490 D_s*+ e- anti-nu_e PHOTOS HQET2 1.207 0.920 1.406 0.853; 0.0040 D_s1+ e- anti-nu_e PHOTOS ISGW2; 0.0040 D_s0*+ e- anti-nu_e PHOTOS ISGW2; 0.0070 D'_s1+ e- anti-nu_e PHOTOS ISGW2; 0.0070 D_s2*+ e- anti-nu_e PHOTOS ISGW2; # -0.0210 D_s+ mu- anti-nu_mu PHOTOS ISGW2; -0.0490 D_s*+ mu- anti-nu_mu PHOTOS ISGW2; +0.0210 D_s+ mu- anti-nu_mu PHOTOS HQET2 1.185 1.081; +0.0490 D_s*+ mu- anti-nu_mu PHOTOS HQET2 1.207 0.920 1.406 0.853; 0.0040 D_s1+ mu- anti-nu_mu PHOTOS ISGW2; 0.0040 D_s0*+ mu- anti-nu_mu PHOTOS ISGW2; 0.0070 D'_s1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0070 D_s2*+ mu- anti-nu_mu PHOTOS ISGW2; +0.0070 D_s2*+ mu- anti-nu_mu PHOTOS ISGW2; # #0.0070 D_s+ tau- anti-nu_tau ISGW2; #0.0150 D_s*+ tau- anti-nu_tau ISGW2; @@ -4419,49 +4709,49 @@ Decay anti-B_s0 # fkw 4/28/00 the next few are decays where a u\bar u or d\bar d is popped # between the charm quark and the spectator. I can thus not # just replace a D by a Ds as above when going from Bd to Bs. -# fkw 5/04/01 Had to take these out because they crash EvtGen. +# fkw 5/04/01 Had to take these out because they crash EvtGen. # Will have to fix this eventually !!! #0.0010 D*0 K+ tau- anti-nu_tau GOITY_ROBERTS; #0.0010 D*+ K0 tau- anti-nu_tau GOITY_ROBERTS; #0.0010 D0 K+ tau- anti-nu_tau GOITY_ROBERTS; #0.0010 D+ K0 tau- anti-nu_tau GOITY_ROBERTS; # fkw 4/28/00 B0B -> TAU D PI0 = 1/2 of TAU D PI+ because of pi0 wave function -# However, the same factor of 1/2 doesn't apply to BSB !!! +# However, the same factor of 1/2 doesn't apply to BSB !!! # # fkw 3/28/01 There seem to be no semi-leptonic B to baryon decays in nature. # I don't pretend to understand why. PDG 2000 has a limit of -# < 3.2e-3 where one might naively expect -# 10% * BR(B->/\c) = 0.1 * (6.4+-1.1)% -#0.0050 anti-nu_e e- ??? Baryon +# < 3.2e-3 where one might naively expect +# 10% * BR(B->/\c) = 0.1 * (6.4+-1.1)% +#0.0050 anti-nu_e e- ??? Baryon #0.0050 anti-nu_mu mu- ??? Baryon # # b --> c (s c=) # Sum = 11.44% # 2-body = 4.72% # more-body = 6.72% -0.0086 D_s- D_s+ PHSP; -0.0090 D_s*+ D_s- SVS; +0.010400000 D_s- D_s+ PHSP; #[Reconstructed PDG2011] +0.0099 D_s*+ D_s- SVS; 0.0099 D_s*- D_s+ SVS; 0.0197 D_s*- D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # # fkw 4/28/00 more states with popped q\bar q. # The one's here involve only popped and spectator. -# Popping stuff in the cs from the W comes further below. +# Popping stuff in the cs from the W comes further below. # The same isospin comment applies here as above in the # semi-leptonic decays with tau and popped q\bar q. -0.0096 D_s- D+ K0 PHSP; -0.0096 D_s- anti-D0 K+ PHSP; -0.0096 D_s*- D+ K0 PHSP; -0.0096 D_s*- D0 K+ PHSP; -# -0.0024 D_s- D+ pi0 K0 PHSP; -0.0048 D_s- D0 pi+ K0 PHSP; -0.0048 D_s- D+ pi- K+ PHSP; +0.0096 D_s- D+ K0 PHSP; +0.0096 D_s- anti-D0 K+ PHSP; +0.0096 D_s*- D+ K0 PHSP; +0.0096 D_s*- D0 K+ PHSP; +# +0.0024 D_s- D+ pi0 K0 PHSP; +0.0048 D_s- D0 pi+ K0 PHSP; +0.0048 D_s- D+ pi- K+ PHSP; 0.0024 D_s- D0 pi0 K+ PHSP; # -0.0024 D_s*- D+ pi0 K0 PHSP; +0.0024 D_s*- D+ pi0 K0 PHSP; 0.0048 D_s*- D0 pi+ K0 PHSP; -0.0048 D_s*- D+ pi- K+ PHSP; +0.0048 D_s*- D+ pi- K+ PHSP; 0.0024 D_s*- D0 pi0 K+ PHSP; # # @@ -4474,62 +4764,62 @@ Decay anti-B_s0 0.0150 D_s*+ anti-D*0 K- PHSP; 0.0150 D_s*+ D*- anti-K0 PHSP; # -0.0050 D_s*+ anti-D0 K- PHSP; +0.0050 D_s*+ anti-D0 K- PHSP; 0.0050 D_s*+ D- anti-K0 PHSP; # -0.0050 D_s+ anti-D*0 K- PHSP; +0.0050 D_s+ anti-D*0 K- PHSP; 0.0050 D_s+ D*- anti-K0 PHSP; # -0.0020 D_s+ anti-D0 K- PHSP; +0.0020 D_s+ anti-D0 K- PHSP; 0.0020 D_s+ D- anti-K0 PHSP; # -0.0030 D_s*+ anti-D*0 K*- PHSP; +0.0030 D_s*+ anti-D*0 K*- PHSP; 0.0030 D_s*+ D*- anti-K*0 PHSP; # -0.0050 D_s*+ anti-D0 K*- PHSP; -0.0050 D_s*+ D- anti-K*0 PHSP; +0.0050 D_s*+ anti-D0 K*- PHSP; +0.0050 D_s*+ D- anti-K*0 PHSP; # -0.0025 D_s+ anti-D*0 K*- PHSP; +0.0025 D_s+ anti-D*0 K*- PHSP; 0.0025 D_s+ D*- anti-K*0 PHSP; # -0.0025 D_s+ anti-D0 K*- PHSP; +0.0025 D_s+ anti-D0 K*- PHSP; 0.0025 D_s+ D- anti-K*0 PHSP; # # # b --> c (d c=) # Sum = 1.0% -0.0017 D_s- D+ PHSP; -0.0017 D*+ D_s- SVS; +0.0017 D_s- D+ PHSP; +0.0017 D*+ D_s- SVS; 0.0017 D_s*- D+ SVS; 0.0017 D_s*- D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # -# fkw 4/38/00 more popping at the lower vertex +# fkw 4/38/00 more popping at the lower vertex # but with upper vertex cabbibo suppressed. -0.0007 D- D+ K0 PHSP; -0.0007 D- anti-D0 K+ PHSP; -0.0007 D*- D+ K0 PHSP; +0.0007 D- D+ K0 PHSP; +0.0007 D- anti-D0 K+ PHSP; +0.0007 D*- D+ K0 PHSP; 0.0007 D*- D0 K+ PHSP; # -0.0003 D- D+ pi0 K0 PHSP; -0.0007 D- D0 pi+ K0 PHSP; -0.0003 D- D+ pi- K+ PHSP; +0.0003 D- D+ pi0 K0 PHSP; +0.0007 D- D0 pi+ K0 PHSP; +0.0003 D- D+ pi- K+ PHSP; 0.0007 D- D0 pi0 K+ PHSP; # -0.0003 D*- D+ pi0 K0 PHSP; -0.0007 D*- D0 pi+ K0 PHSP; -0.0003 D*- D+ pi- K+ PHSP; +0.0003 D*- D+ pi0 K0 PHSP; +0.0007 D*- D0 pi+ K0 PHSP; +0.0003 D*- D+ pi- K+ PHSP; 0.0007 D*- D0 pi0 K+ PHSP; # # b --> c (s u=) # exclusive # Sum = 0.09% -0.00015 D_s*+ K- SVS; -0.00015 D_s+ K- PHSP; +0.00015 D_s*+ K- SVS; +0.000150000 D_s+ K- PHSP; #[Reconstructed PDG2011] 0.00030 D_s*+ K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.0283 0.0; -0.00030 K*- D_s+ SVS; +0.00030 K*- D_s+ SVS; # # fkw 4/28/00 Strategy for charmonium modes: -# Take Bd BR's, replace spectator, +# Take Bd BR's, replace spectator, # assume etaprime = 2/3 ss # and eta = 1/3 ss # @@ -4542,7 +4832,7 @@ Decay anti-B_s0 # should be: psi = 0.80% CLNS 94/1315 but isn't quite right. 0.00064 J/psi eta' SVS; 0.00032 J/psi eta SVS; -0.00135 J/psi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.001300000 J/psi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] 0.00008 J/psi K0 SVS; 0.00070 J/psi K- K+ PHSP; 0.00070 J/psi anti-K0 K0 PHSP; @@ -4563,9 +4853,9 @@ Decay anti-B_s0 # 0.000465 psi(2S) eta' SVS; 0.000235 psi(2S) eta SVS; -0.0012 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0003 psi(2S) K- K+ PHSP; -0.0003 psi(2S) anti-K0 K0 PHSP; +0.000680000 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.0003 psi(2S) K- K+ PHSP; +0.0003 psi(2S) anti-K0 K0 PHSP; 0.0003 psi(2S) anti-K0 K+ pi- PHSP; 0.0003 psi(2S) anti-K0 K0 pi0 PHSP; 0.0003 psi(2S) K- K+ pi0 PHSP; @@ -4580,10 +4870,10 @@ Decay anti-B_s0 # # chic0 = 0.05% (20% of chic2) # Bodwin et.al. Phys Rev D46 1992 -0.00010 chi_c0 eta' PHSP; +0.00010 chi_c0 eta' PHSP; 0.00005 chi_c0 eta PHSP; -0.00020 phi chi_c0 SVS; -0.00003 chi_c0 K- K+ PHSP; +0.00020 phi chi_c0 SVS; +0.00003 chi_c0 K- K+ PHSP; 0.00003 chi_c0 anti-K0 K0 PHSP; 0.00003 chi_c0 anti-K0 K+ pi- PHSP; 0.00003 chi_c0 anti-K0 K0 pi0 PHSP; @@ -4594,7 +4884,7 @@ Decay anti-B_s0 0.0007 chi_c1 eta' SVS; 0.0003 chi_c1 eta SVS; 0.0014 chi_c1 phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00026 chi_c1 K- K+ PHSP; +0.00026 chi_c1 K- K+ PHSP; 0.00026 chi_c1 anti-K0 K0 PHSP; 0.00026 chi_c1 anti-K0 K+ pi- PHSP; 0.00026 chi_c1 anti-K0 K0 pi0 PHSP; @@ -4608,7 +4898,7 @@ Decay anti-B_s0 # # # chic2 = 0.25% CLNS 94/1315 -0.000465 chi_c2 eta' STS; +0.000465 chi_c2 eta' STS; 0.000235 chi_c2 eta STS; #0.0010 chi_c2 phi STV; whb: model doesn't exist! 0.00016 chi_c2 K- K+ PHSP; @@ -4646,7 +4936,7 @@ Decay anti-B_s0 0.00012 eta_c(2S) anti-K0 K0 pi0 PHSP; 0.00012 eta_c(2S) K- K+ pi0 PHSP; # -# +# # hc = 0.25% (100% of chic2) # Bodwin et.al. Phys Rev D46 1992 # @@ -4663,24 +4953,24 @@ Decay anti-B_s0 # b --> c (d u=) # Exclusive Channels = 6.33% # fkw 4/28/00 I rearanged this a bit after copying it from -# B0B decay list. -# +# B0B decay list. +# # first come the external W-emission decays: # 0.0008 D_s1+ pi- SVS; 0.0021 D_s1+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; 0.0013 D_s2*+ pi- STS; -#0.0037 D_s2*+ rho- STV; # whb: model doesn't exist +#0.0037 D_s2*+ rho- STV; # whb: model doesn't exist # -0.0027 D_s*+ pi- SVS; -0.0026 D_s+ pi- PHSP; -0.0073 rho- D_s+ SVS; +0.0027 D_s*+ pi- SVS; +0.003200000 D_s+ pi- PHSP; #[Reconstructed PDG2011] +0.0073 rho- D_s+ SVS; 0.0070 D_s*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # -0.0085 a_1- D_s+ SVS; -0.0009 D_s+ rho0 pi- PHSP; -0.0009 D_s+ rho- pi0 PHSP; -0.0009 D_s+ pi+ pi- pi- PHSP; +0.0085 a_1- D_s+ SVS; +0.0009 D_s+ rho0 pi- PHSP; +0.0009 D_s+ rho- pi0 PHSP; +0.008400000 D_s+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] 0.0009 D_s+ pi0 pi- pi0 PHSP; # 0.0122 D_s*+ a_1- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; @@ -4693,10 +4983,10 @@ Decay anti-B_s0 # # fkw 4/28/00 color suppressed modes bumped up by factor 2 from isospin # i.e. Bs doesn't have the factor 2 suppression Bd has. -0.0002 D*0 K0 SVS; +0.0002 D*0 K0 SVS; 0.0002 D0 K0 PHSP; -0.0002 K*0 D0 SVS; -0.0002 D*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0002 K*0 D0 SVS; +0.0002 D*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # # PR LHCb Add p pbar mode 0.000000001 p+ anti-p- PHSP; @@ -4705,33 +4995,34 @@ Decay anti-B_s0 # # Here come the various types of "inclusive unknown" decays: # -# Start with B to baryons: +# Start with B to baryons: # fkw 3/28/01 I don't know what I'm doing here!!! This needs to be checked!!! -0.0200 cs_0 anti-ud_0 PYTHIA 23; -0.0400 cs_1 anti-ud_1 PYTHIA 23; +# Mark Whitehead 30/4/2010 Weighted PYHTIA to get total BF = 100% +0.019574780 cs_0 anti-ud_0 PYTHIA 63; +0.039129957 cs_1 anti-ud_1 PYTHIA 63; # # Next come external W-emission: -0.307935 anti-u d c anti-s PYTHIA 48; -0.0495 anti-u d c anti-s PYTHIA 25; +0.301256716 anti-u d c anti-s PYTHIA 23; +0.048443906 anti-u d c anti-s PYTHIA 65; # Now the internal W-emission: -0.01950 anti-u c d anti-s PYTHIA 48; +0.019086636 anti-u c d anti-s PYTHIA 23; # Then some b->u external W-emission with upper vertex charm -0.00400 anti-c s u anti-s PYTHIA 48; +0.003912996 anti-c s u anti-s PYTHIA 23; # and finally some cabibbo suppressed external and internal W-emission -0.0150 anti-u s c anti-s PYTHIA 48; -0.00220 anti-u s c anti-s PYTHIA 25; -0.00090 anti-u c s anti-s PYTHIA 48; +0.014683536 anti-u s c anti-s PYTHIA 23; +0.002152148 anti-u s c anti-s PYTHIA 65; +0.000880424 anti-u c s anti-s PYTHIA 23; # and some c cbar d stuff as well as c cbar s -0.00550 anti-c d c anti-s PYTHIA 13; -0.00150 anti-c d c anti-s PYTHIA 13; -# and some miscellaneous charmless stuff -0.00360 anti-u u d anti-s PYTHIA 48; -0.00070 anti-d d d anti-s PYTHIA 48; -0.00090 anti-s s d anti-s PYTHIA 48; -0.00200 anti-u u s anti-s PYTHIA 48; -0.00160 anti-d d s anti-s PYTHIA 48; -0.00130 anti-s s s anti-s PYTHIA 48; -0.00500 s g anti-s PYTHIA 33; +0.005391151 anti-c d c anti-s PYTHIA 43; +0.001468354 anti-c d c anti-s PYTHIA 43; +# and some miscellaneous charmless stuff +0.003521696 anti-u u d anti-s PYTHIA 23; +0.000684774 anti-d d d anti-s PYTHIA 23; +0.000880424 anti-s s d anti-s PYTHIA 23; +0.001956498 anti-u u s anti-s PYTHIA 23; +0.001565198 anti-d d s anti-s PYTHIA 23; +0.001271724 anti-s s s anti-s PYTHIA 23; +0.004891245 s anti-s PYTHIA 91; # fkw 5/10/00 the b->ulnu decays are loosely modelled according to B0 in EvtGen 0.000200 K+ e- anti-nu_e PHOTOS ISGW2; @@ -4739,7 +5030,7 @@ Decay anti-B_s0 0.000300 K_1+ e- anti-nu_e PHOTOS ISGW2; 0.000200 K'_1+ e- anti-nu_e PHOTOS ISGW2; # -# +# 0.000200 K+ mu- anti-nu_mu PHOTOS ISGW2; 0.000300 K*+ mu- anti-nu_mu PHOTOS ISGW2; 0.000300 K_1+ mu- anti-nu_mu PHOTOS ISGW2; @@ -4761,14 +5052,15 @@ Decay anti-B_s0 # None of this should be taken too serious! # #*********************************************************** +# Mark Whitehead 30/4/2010 Updated K+K- # PR LHCb 04/07/04 update BR -0.0000185 K- K+ PHSP; +0.000033000 K- K+ PHSP; #[Reconstructed PDG2011] # PR LHCb 04/07/04 split into KS/KL 0.0000000 anti-K0 K0 PHSP; 0.0000100 K_S0 K_S0 PHSP; 0.0000100 K_L0 K_L0 PHSP; # PR LHCb 04/07/04 update BR -0.0000048 pi- K+ PHSP; +0.000004900 pi- K+ PHSP; #[Reconstructed PDG2011] 0.0000002 pi0 K0 PHSP; # PR LHCb 04/07/04 add Bs->pi+ pi- 0.00000001 pi+ pi- PHSP; @@ -4800,8 +5092,8 @@ Decay anti-B_s0 0.0000580 eta' eta' PHSP; 0.0000250 eta' eta PHSP; 0.0000040 eta eta PHSP; -0.0000200 phi eta SVS; -0.0000100 phi eta' SVS; +#### Already included above 0.0000200 phi eta SVS; +#### Already included above 0.0000100 phi eta' SVS; # #next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 0.00000007 K0 eta' PHSP; @@ -4818,25 +5110,26 @@ Decay anti-B_s0 0.000006 K*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # PR LHCb 04/07/04 Update BR 0.000004 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000008 phi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.000014000 phi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] 0.000000004 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # # decays that go via b->d penguins -0.0000004 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +#### Already included above 0.0000004 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # PR LHCb : add Bs -> mu+ mu- 0.0000000035 mu- mu+ PHSP; #PR LHCb 04/08/2004 add Bs -> tau+ tau- (BR not to take too seriously) -0.0000000020 tau- tau+ PHSP; +0.0000000020 tau- tau+ PHSP; # PR LHCb 04/05/2004 : add Bs -> phi gamma -0.000045 phi gamma SVP_HELAMP 1.0 0.0 1.0 0.0; +0.000057000 phi gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] # PR LHCb 04/08/2004 : add Bs -> phi mu mu, phi e e 0.0000023 phi e- e+ BTOSLLALI; -0.0000023 phi mu- mu+ BTOSLLALI; +0.0000023 phi mu- mu+ BTOSLLALI; # PR LHCb 16 apr 2004 : add Bs -> gamma gamma -0.0000005 gamma gamma PHSP; +0.0000005 gamma gamma PHSP; #-------------- # 257.122e-6 for all the charmless hadronic # +0.000150000 D_s- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # # B_s decays. @@ -4846,14 +5139,14 @@ Enddecay # fkw 4/28/00 made the Bs parallel to the Bd as best as I could # ------------------------------------------------------- Decay B_s0 -0.0210 D_s- e+ nu_e PHOTOS ISGW2; -0.0490 D_s*- e+ nu_e PHOTOS ISGW2; +0.0210 D_s- e+ nu_e PHOTOS HQET2 1.185 1.081; +0.0490 D_s*- e+ nu_e PHOTOS HQET2 1.207 0.920 1.406 0.853; 0.0040 D_s1- e+ nu_e PHOTOS ISGW2; 0.0040 D_s0*- e+ nu_e PHOTOS ISGW2; 0.0070 D'_s1- e+ nu_e PHOTOS ISGW2; 0.0070 D_s2*- e+ nu_e PHOTOS ISGW2; -0.0210 D_s- mu+ nu_mu PHOTOS ISGW2; -0.0490 D_s*- mu+ nu_mu PHOTOS ISGW2; +0.0210 D_s- mu+ nu_mu PHOTOS HQET2 1.185 1.081; +0.0490 D_s*- mu+ nu_mu PHOTOS HQET2 1.207 0.920 1.406 0.853; 0.0040 D_s1- mu+ nu_mu PHOTOS ISGW2; 0.0040 D_s0*- mu+ nu_mu PHOTOS ISGW2; 0.0070 D'_s1- mu+ nu_mu PHOTOS ISGW2; @@ -4882,11 +5175,11 @@ Decay B_s0 #0.0010 anti-D0 K- tau+ nu_tau GOITY_ROBERTS; #0.0010 D- anti-K0 tau+ nu_tau GOITY_ROBERTS; # fkw 4/28/00 B0 -> TAU D PI0 = 1/2 of TAU D PI- because of pi0 wave function -# However, the same factor of 1/2 doesn't apply to BS0 !!! +# However, the same factor of 1/2 doesn't apply to BS0 !!! # fkw 3/28/01 There seem to be no semi-leptonic B to baryon decays in nature. # I don't pretend to understand why. PDG 2000 has a limit of -# < 3.2e-3 where one might naively expect -# 10% * BR(B->/\c) = 0.1 * (6.4+-1.1)% +# < 3.2e-3 where one might naively expect +# 10% * BR(B->/\c) = 0.1 * (6.4+-1.1)% #0.0050 nu_e e+ B-Baryon #0.0050 nu_mu mu+ B-Baryon # @@ -4894,14 +5187,14 @@ Decay B_s0 # Sum = 11.44% # 2-body = 4.72% # more-body = 6.72% -0.0086 D_s- D_s+ PHSP; -0.0090 D_s*+ D_s- SVS; +0.010400000 D_s- D_s+ PHSP; #[Reconstructed PDG2011] +0.0099 D_s*+ D_s- SVS; 0.0099 D_s*- D_s+ SVS; 0.0197 D_s*- D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # # fkw 4/28/00 more states with popped q\bar q. # The one's here involve only popped and spectator. -# Popping stuff in the cs from the W comes further below. +# Popping stuff in the cs from the W comes further below. # The same isospin comment applies here as above in the # semi-leptonic decays with tau and popped q\bar q. 0.0096 D_s+ D- anti-K0 PHSP; @@ -4909,13 +5202,13 @@ Decay B_s0 0.0096 D_s*+ D- anti-K0 PHSP; 0.0096 D_s*+ anti-D0 K- PHSP; # -0.0024 D_s+ D- pi0 anti-K0 PHSP; -0.0048 D_s+ anti-D0 pi- anti-K0 PHSP; +0.0024 D_s+ D- pi0 anti-K0 PHSP; +0.0048 D_s+ anti-D0 pi- anti-K0 PHSP; 0.0048 D_s+ D- pi+ K- PHSP; -0.0024 D_s+ anti-D0 pi0 K- PHSP; +0.0024 D_s+ anti-D0 pi0 K- PHSP; # -0.0024 D_s*+ D- pi0 anti-K0 PHSP; -0.0048 D_s*+ anti-D0 pi- anti-K0 PHSP; +0.0024 D_s*+ D- pi0 anti-K0 PHSP; +0.0048 D_s*+ anti-D0 pi- anti-K0 PHSP; 0.0048 D_s*+ D- pi+ K- PHSP; 0.0024 D_s*+ anti-D0 pi0 K- PHSP; # @@ -4928,13 +5221,13 @@ Decay B_s0 # 0.0150 D_s*- D*0 K+ PHSP; 0.0150 D_s*- D*+ K0 PHSP; -0.0050 D_s*- D0 K+ PHSP; +0.0050 D_s*- D0 K+ PHSP; 0.0050 D_s*- D+ K0 PHSP; -0.0050 D_s- D*0 K+ PHSP; +0.0050 D_s- D*0 K+ PHSP; 0.0050 D_s- D*+ K0 PHSP; -0.0020 D_s- D0 K+ PHSP; -0.0020 D_s- D+ K0 PHSP; -0.0030 D_s*- D*0 K*+ PHSP; +0.0020 D_s- D0 K+ PHSP; +0.0020 D_s- D+ K0 PHSP; +0.0030 D_s*- D*0 K*+ PHSP; 0.0030 D_s*- D*+ K*0 PHSP; 0.0050 D_s*- D0 K*+ PHSP; 0.0050 D_s*- D+ K*0 PHSP; @@ -4951,20 +5244,20 @@ Decay B_s0 0.0017 D_s*+ D- SVS; 0.0017 D_s*+ D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # -# fkw 4/38/00 more popping at the lower vertex +# fkw 4/38/00 more popping at the lower vertex # but with upper vertex cabbibo suppressed. 0.0007 D+ D- anti-K0 PHSP; 0.0007 D+ D0 K- PHSP; 0.0007 D*+ D- anti-K0 PHSP; 0.0007 D*+ anti-D0 K- PHSP; # -0.0003 D+ D- pi0 anti-K0 PHSP; -0.0007 D+ anti-D0 pi- anti-K0 PHSP; +0.0003 D+ D- pi0 anti-K0 PHSP; +0.0007 D+ anti-D0 pi- anti-K0 PHSP; 0.0003 D+ D- pi+ K- PHSP; 0.0007 D+ anti-D0 pi0 K- PHSP; # 0.0003 D*+ D- pi0 anti-K0 PHSP; -0.0007 D*+ anti-D0 pi- anti-K0 PHSP; +0.0007 D*+ anti-D0 pi- anti-K0 PHSP; 0.0003 D*+ D- pi+ K- PHSP; 0.0007 D*+ anti-D0 pi0 K- PHSP; # @@ -4972,12 +5265,12 @@ Decay B_s0 # exclusive # Sum = 0.9% 0.00015 D_s*- K+ SVS; -0.00015 D_s- K+ PHSP; +0.000150000 D_s- K+ PHSP; #[Reconstructed PDG2011] 0.00030 D_s*- K*+ SVV_HELAMP 0.0283 0.0 0.932 0.0 0.228 0.0; -0.00030 K*+ D_s- SVS; +0.00030 K*+ D_s- SVS; # # fkw 4/28/00 Strategy for charmonium modes: -# Take Bd BR's, replace spectator, +# Take Bd BR's, replace spectator, # assume etaprime = 2/3 ss # and eta = 1/3 ss # @@ -4987,10 +5280,10 @@ Decay B_s0 # # B --> (c c=) (s s=) # 2.65% -# should be: psi = 0.80% CLNS 94/1315 but isn't quite right. +# should be: psi = 0.80% CLNS 94/1315 but isn't quite right. 0.00064 J/psi eta' SVS; 0.00032 J/psi eta SVS; -0.00135 J/psi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.001300000 J/psi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] 0.00008 J/psi K0 SVS; 0.00070 J/psi K- K+ PHSP; 0.00070 J/psi anti-K0 K0 PHSP; @@ -5010,7 +5303,7 @@ Decay B_s0 # psi' = 0.34% CLNS 94/1315 0.000465 psi(2S) eta' SVS; 0.000235 psi(2S) eta SVS; -0.0012 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.000680000 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] 0.0003 psi(2S) K- K+ PHSP; 0.0003 psi(2S) anti-K0 K0 PHSP; 0.0003 psi(2S) K0 K- pi+ PHSP; @@ -5040,7 +5333,7 @@ Decay B_s0 # chic1 = 0.37% CLNS 94/1315 0.0007 chi_c1 eta' SVS; 0.0003 chi_c1 eta SVS; -0.0014 chi_c1 phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0014 chi_c1 phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; 0.00026 chi_c1 K- K+ PHSP; 0.00026 chi_c1 anti-K0 K0 PHSP; 0.00026 chi_c1 K0 K- pi+ PHSP; @@ -5092,12 +5385,12 @@ Decay B_s0 0.00012 eta_c(2S) anti-K0 K0 pi0 PHSP; 0.00012 eta_c(2S) K- K+ pi0 PHSP; # -# +# # hc = 0.25% (100% of chic2) # Bodwin et.al. Phys Rev D46 1992 0.000465 h_c eta' SVS; 0.000235 h_c eta SVS; -0.0010 h_c phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0010 h_c phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; 0.00016 h_c K- K+ PHSP; 0.00016 h_c anti-K0 K0 PHSP; 0.00016 h_c K0 K- pi+ PHSP; @@ -5108,27 +5401,27 @@ Decay B_s0 # b --> c (d u=) # Exclusive Channels = 6.33% # fkw 4/28/00 I rearanged this a bit after copying it from -# B0B decay list. -# +# B0B decay list. +# # first come the external W-emission decays: # 0.0008 D_s1- pi+ SVS; -0.0021 D_s1- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0021 D_s1- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; 0.0013 D_s2*- pi+ STS; -#0.0037 D_s2*- rho+ STV; #whb: STV does not exist yet +#0.0037 D_s2*- rho+ STV; #whb: STV does not exist yet # 0.0027 D_s*- pi+ SVS; -0.0026 D_s- pi+ PHSP; +0.003200000 D_s- pi+ PHSP; #[Reconstructed PDG2011] 0.0073 rho+ D_s- SVS; -0.0070 D_s*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0070 D_s*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # 0.0085 a_1+ D_s- SVS; 0.0009 D_s- rho0 pi+ PHSP; 0.0009 D_s- rho+ pi0 PHSP; -0.0009 D_s- pi- pi+ pi+ PHSP; -0.0009 D_s- pi0 pi+ pi0 PHSP; +0.008400000 D_s- pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.0009 D_s- pi0 pi+ pi0 PHSP; # -0.0122 D_s*- a_1+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0122 D_s*- a_1+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; 0.0010 D_s*- rho0 pi+ PHSP; 0.0010 D_s*- rho+ pi0 PHSP; 0.0077 D_s*- pi- pi+ pi+ PHSP; @@ -5141,7 +5434,7 @@ Decay B_s0 0.0002 anti-D*0 anti-K0 SVS; 0.0002 anti-D0 anti-K0 PHSP; 0.0002 anti-K*0 anti-D0 SVS; -0.0002 anti-D*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0002 anti-D*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # # PR LHCb : add p ppbar mode 0.000000001 p+ anti-p- PHSP; @@ -5150,33 +5443,34 @@ Decay B_s0 # # Here come the various types of "inclusive unknown" decays: # -# Start with B to baryons: +# Start with B to baryons: # fkw 3/28/01 I don't know what I'm doing here!!! This needs to be checked!!! -0.0200 anti-cs_0 ud_0 PYTHIA 23; -0.0400 anti-cs_1 ud_1 PYTHIA 23; +# Mark Whitehead 30/4/2010 Weight PYTHIA to get Total BF=100% +0.019574780 anti-cs_0 ud_0 PYTHIA 63; +0.039129957 anti-cs_1 ud_1 PYTHIA 63; # # Next come external W-emission: -0.307935 u anti-d anti-c s PYTHIA 48; -0.0495 u anti-d anti-c s PYTHIA 25; +0.301256716 u anti-d anti-c s PYTHIA 23; +0.048443906 u anti-d anti-c s PYTHIA 65; # Now the internal W-emission: -0.01950 u anti-c anti-d s PYTHIA 48; +0.019086636 u anti-c anti-d s PYTHIA 23; # Then some b->u external W-emission with upper vertex charm -0.00400 c anti-s anti-u s PYTHIA 48; +0.003912996 c anti-s anti-u s PYTHIA 23; # and finally some cabibbo suppressed external and internal W-emission -0.0150 u anti-s anti-c s PYTHIA 48; -0.00220 u anti-s anti-c s PYTHIA 25; -0.00090 u anti-c anti-s s PYTHIA 48; +0.014683536 u anti-s anti-c s PYTHIA 23; +0.002152148 u anti-s anti-c s PYTHIA 65; +0.000880424 u anti-c anti-s s PYTHIA 23; # and some c cbar d stuff as well as c cbar s -0.00550 c anti-d anti-c s PYTHIA 13; -0.00150 c anti-d anti-c s PYTHIA 13; -# and some miscellaneous charmless stuff -0.00360 u anti-u anti-d s PYTHIA 48; -0.00070 d anti-d anti-d s PYTHIA 48; -0.00090 s anti-s anti-d s PYTHIA 48; -0.00200 u anti-u anti-s s PYTHIA 48; -0.00160 d anti-d anti-s s PYTHIA 48; -0.00130 s anti-s anti-s s PYTHIA 48; -0.00500 anti-s g s PYTHIA 33; +0.005391151 c anti-d anti-c s PYTHIA 43; +0.001468354 c anti-d anti-c s PYTHIA 43; +# and some miscellaneous charmless stuff +0.003521696 u anti-u anti-d s PYTHIA 23; +0.000684774 d anti-d anti-d s PYTHIA 23; +0.000880424 s anti-s anti-d s PYTHIA 23; +0.001956498 u anti-u anti-s s PYTHIA 23; +0.001565198 d anti-d anti-s s PYTHIA 23; +0.001271724 s anti-s anti-s s PYTHIA 23; +0.004891245 anti-s s PYTHIA 91; # fkw 5/10/00 the b->ulnu decays are loosely modelled according to B0 in EvtGen 0.000200 K- e+ nu_e PHOTOS ISGW2; @@ -5184,7 +5478,7 @@ Decay B_s0 0.000300 K_1- e+ nu_e PHOTOS ISGW2; 0.000200 K'_1- e+ nu_e PHOTOS ISGW2; # -# +# 0.000200 K- mu+ nu_mu PHOTOS ISGW2; 0.000300 K*- mu+ nu_mu PHOTOS ISGW2; 0.000300 K_1- mu+ nu_mu PHOTOS ISGW2; @@ -5206,17 +5500,18 @@ Decay B_s0 # None of this should be taken too serious! # #*********************************************************** +# Mark Whitehead 30/4/2010 Update K+K- # PR LHCb update Br Bs -> K- K+ -0.0000185 K- K+ PHSP; +0.000033000 K- K+ PHSP; #[Reconstructed PDG2011] # PR LHCb 4/07/04 Split in KS/KL 0.0000000 anti-K0 K0 PHSP; 0.0000100 K_S0 K_S0 PHSP; 0.0000100 K_L0 K_L0 PHSP; # -0.0000048 pi+ K- PHSP; +0.000004900 pi+ K- PHSP; #[Reconstructed PDG2011] 0.0000002 pi0 anti-K0 PHSP; # PR LHCb 4/07/04 add Bs -> pi+ pi- -0.00000001 pi+ pi- PHSP; +0.00000001 pi+ pi- PHSP; # 0.0000012 omega eta SVS; 0.0000025 omega eta' SVS; @@ -5234,7 +5529,7 @@ Decay B_s0 # PR LHCb 4/07/04 split in KS/KL 0.0000000 K*0 anti-K0 SVS; 0.0000020 K*0 K_S0 SVS; -0.0000020 K*0 K_L0 SVS; +0.0000020 K*0 K_L0 SVS; 0.0000082 K*- K+ SVS; # PR LHCb 4/07/04 split in KS/KL 0.0000000 anti-K*0 K0 SVS; @@ -5244,8 +5539,8 @@ Decay B_s0 0.0000580 eta' eta' PHSP; 0.0000250 eta' eta PHSP; 0.0000040 eta eta PHSP; -0.0000200 phi eta SVS; -0.0000100 phi eta' SVS; +### Already included above 0.0000200 phi eta SVS; +### Already included above 0.0000100 phi eta' SVS; # #next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 0.00000007 anti-K0 eta' PHSP; @@ -5262,17 +5557,17 @@ Decay B_s0 0.000006 K*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # PR LHCb Update BR 0.000004 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000008 phi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.000014000 phi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] 0.000000004 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # # decays that go via b->d penguins -0.0000004 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +#### Already included above 0.0000004 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #PR LHCb add Bs -> mu+ mu- -0.0000000035 mu+ mu- PHSP; +0.0000000035 mu+ mu- PHSP; #PR LHCb 04/08/2004 add Bs -> tau+ tau- (BR not to take too seriously) -0.0000000020 tau+ tau- PHSP; +0.0000000020 tau+ tau- PHSP; # PR LHCb 04/05/2004 : add Bs -> phi gamma -0.000045 phi gamma SVP_HELAMP 1.0 0.0 1.0 0.0; +0.000057000 phi gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] # PR LHCb 04/08/2004 : add Bs -> phi mu mu, phi e e 0.0000023 phi e+ e- BTOSLLALI; 0.0000023 phi mu+ mu- BTOSLLALI; @@ -5281,9 +5576,10 @@ Decay B_s0 #-------------- # 257.122e-6 for all the charmless hadronic # +0.000150000 D_s+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay -# whb: QQ B_c included. Needs more work! +# whb: QQ B_c included- Near end of File #Decay B_c- #CHANNEL 0 0.0700 TAU- NUTB #CHANNEL 1 0.1100 NUEB E- *CC* @@ -5319,56 +5615,88 @@ Enddecay #Enddecay # -# The tau branching fractions needs to be looked over! +# Updated to PDG 2008 # Decay tau- -0.1778 e- anti-nu_e nu_tau PHOTOS TAULNUNU; -0.1731 mu- anti-nu_mu nu_tau PHOTOS TAULNUNU; -0.1095 pi- nu_tau TAUSCALARNU; -0.2531 pi- pi0 nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400; -0.09234 pi- pi- pi+ nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400 1.23 0.4; -0.0910 pi0 pi0 pi- nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400 1.23 0.4; +0.154002925 e- anti-nu_e nu_tau PHOTOS TAULNUNU; #[Reconstructed PDG2011] +0.170000000 mu- anti-nu_mu nu_tau PHOTOS TAULNUNU; #[Reconstructed PDG2011] +0.109100000 pi- nu_tau TAUSCALARNU; #[Reconstructed PDG2011] +0.006960000 K- nu_tau TAUSCALARNU; #[Reconstructed PDG2011] +0.255100000 pi- pi0 nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400; #[Reconstructed PDG2011] +0.001124109 nu_tau gamma pi- pi0 PYTHIA 21; +0.079301562 pi0 pi0 pi- nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400 1.23 0.4; #[Reconstructed PDG2011] +0.000385656 nu_tau K- pi0 pi0 PYTHIA 21; +0.008508640 nu_tau pi- pi0 pi0 pi0 PYTHIA 21; +0.000864699 nu_tau pi- pi0 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] #0.2515 rho- nu_tau TAUVECTORNU; #0.1790 a_1- nu_tau TAUVECTORNU; -0.00686 K- nu_tau TAUSCALARNU; -0.0134 K*- nu_tau TAUVECTORNU; -0.0450 nu_tau pi- pi+ pi- pi0 PYTHIA 41; -0.0100 nu_tau pi- pi0 pi0 pi0 PYTHIA 41; -0.0015 nu_tau K- pi- K+ PYTHIA 41; -0.0015 nu_tau K0 pi- anti-K0 PYTHIA 41; -0.0015 nu_tau K- pi0 K0 PYTHIA 41; -0.0005 nu_tau K- pi0 pi0 PYTHIA 41; -0.0050 nu_tau K- pi+ pi- PYTHIA 41; -0.0055 nu_tau pi- anti-K0 pi0 PYTHIA 41; -0.0017 nu_tau eta pi- pi0 PYTHIA 41; -0.0013 nu_tau gamma pi- pi0 PYTHIA 41; -0.0009 nu_tau pi- pi- pi+ pi0 pi0 PHSP; -0.0008 nu_tau pi- pi- pi- pi+ pi+ PHSP; -0.0003 nu_tau pi- pi- pi- pi+ pi+ pi0 PHSP; -0.0005 nu_tau pi- pi- pi+ pi0 pi0 pi0 PHSP; -0.0010 nu_tau pi- pi0 pi0 pi0 pi0 PHSP; -0.0039 nu_tau pi- omega pi0 PYTHIA 41; -0.0010 nu_tau K- K0 PYTHIA 41; -0.0010 nu_tau K- omega PYTHIA 41; +# Modes with K0s +# +0.000319939 nu_tau pi- anti-K0 PYTHIA 21; +0.001590000 nu_tau K- K0 PYTHIA 21; +0.001700000 nu_tau K0 pi- anti-K0 PYTHIA 21; +0.001590000 nu_tau K- pi0 K0 PYTHIA 21; +0.004000000 nu_tau pi- anti-K0 pi0 PYTHIA 21; +# 3 Charged Particles +# +0.093200000 pi- pi- pi+ nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400 1.23 0.4; #[Reconstructed PDG2011] +0.046100000 nu_tau pi- pi+ pi- pi0 PYTHIA 21; +0.000501526 nu_tau pi- pi- pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000155646 nu_tau pi- pi- pi+ pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.003420000 nu_tau K- pi+ pi- PYTHIA 21; +0.001360000 nu_tau K- pi+ pi- pi0 PYTHIA 21; +0.001400000 nu_tau K- pi- K+ PYTHIA 21; +0.000015800 nu_tau K- K+ K- PYTHIA 21; +# 5 Charged Particles +# +0.000700406 nu_tau pi- pi- pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.000129705 nu_tau pi- pi- pi- pi+ pi+ pi0 PHSP; #[Reconstructed PDG2011] +# Misc other modes +# +0.012000000 K*- nu_tau TAUVECTORNU; #[Reconstructed PDG2011] +0.001390000 nu_tau eta pi- pi0 PYTHIA 21; +0.003199387 nu_tau pi- omega pi0 PYTHIA 21; +0.000410000 nu_tau K- omega PYTHIA 21; +0.002200000 anti-K*0 pi- nu_tau PHSP; #[Reconstructed PDG2011] +0.002100000 K*0 K- nu_tau PHSP; #[Reconstructed PDG2011] +0.000034000 phi pi- nu_tau PHSP; #[Reconstructed PDG2011] +0.000037000 phi K- nu_tau PHSP; #[Reconstructed PDG2011] +0.003600000 mu- anti-nu_mu nu_tau gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.017500000 e- anti-nu_e nu_tau gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004290000 K- pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002200000 anti-K0 rho- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 pi- anti-K0 pi0 pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 pi- K0 anti-K0 pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000061000 K- K+ pi- pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000028000 e- e- e+ anti-nu_e nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004700000 K_1- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001700000 K'_1- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001500000 K'*- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000150000 eta pi- pi0 pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000161000 eta K- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000138000 eta K*- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000048000 eta K- pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000093000 eta anti-K0 pi- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000360000 f_1 pi- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # CDecay tau+ # -# Vector Mesons +# Vector Mesons Updated PDG 2008 # Decay D*+ -0.6830 D0 pi+ VSS; -0.3060 D+ pi0 VSS; -0.0110 D+ gamma VSP_PWAVE; +0.6770 D0 pi+ VSS; +0.3070 D+ pi0 VSS; +0.0160 D+ gamma VSP_PWAVE; Enddecay Decay D*- -0.6830 anti-D0 pi- VSS; -0.3060 D- pi0 VSS; -0.0110 D- gamma VSP_PWAVE; +0.6770 anti-D0 pi- VSS; +0.3070 D- pi0 VSS; +0.0160 D- gamma VSP_PWAVE; Enddecay Decay D*0 -0.6190 D0 pi0 VSS; -0.3810 D0 gamma VSP_PWAVE; +0.619000000 D0 pi0 VSS; #[Reconstructed PDG2011] +0.381000000 D0 gamma VSP_PWAVE; #[Reconstructed PDG2011] Enddecay Decay anti-D*0 0.6190 anti-D0 pi0 VSS; @@ -5376,195 +5704,303 @@ Decay anti-D*0 Enddecay # Decay D_s*+ -0.942 D_s+ gamma VSP_PWAVE; -0.058 D_s+ pi0 VSS; +0.942000000 D_s+ gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.058000000 D_s+ pi0 VSS; #[Reconstructed PDG2011] Enddecay Decay D_s*- -0.942 D_s- gamma VSP_PWAVE; -0.058 D_s- pi0 VSS; +0.942000000 D_s- gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.058000000 D_s- pi0 VSS; #[Reconstructed PDG2011] Enddecay # # # D+ Meson # Decay D+ -0.0554 anti-K*0 e+ nu_e PHOTOS ISGW2; -0.0900 anti-K0 e+ nu_e PHOTOS ISGW2; -0.0036 anti-K_10 e+ nu_e PHOTOS ISGW2; -0.0038 anti-K_2*0 e+ nu_e PHOTOS ISGW2; -0.0043 pi0 e+ nu_e PHOTOS ISGW2; -0.0026 eta e+ nu_e PHOTOS ISGW2; -0.0005 eta' e+ nu_e PHOTOS ISGW2; -0.0028 rho0 e+ nu_e PHOTOS ISGW2; -0.0028 omega e+ nu_e PHOTOS ISGW2; -0.0027 K- pi+ e+ nu_e PHOTOS PHSP; -0.0014 anti-K0 pi0 e+ nu_e PHOTOS PHSP; -# -0.0533 anti-K*0 mu+ nu_mu PHOTOS ISGW2; -0.0874 anti-K0 mu+ nu_mu PHOTOS ISGW2; -0.0036 anti-K_10 mu+ nu_mu PHOTOS ISGW2; -0.0038 anti-K_2*0 mu+ nu_mu PHOTOS ISGW2; -0.0043 pi0 mu+ nu_mu PHOTOS ISGW2; -0.0026 eta mu+ nu_mu PHOTOS ISGW2; -0.0005 eta' mu+ nu_mu PHOTOS ISGW2; -0.0028 rho0 mu+ nu_mu PHOTOS ISGW2; -0.0028 omega mu+ nu_mu PHOTOS ISGW2; -0.0027 K- pi+ mu+ nu_e PHOTOS PHSP; -0.0014 anti-K0 pi0 mu+ nu_mu PHOTOS PHSP; -# -# -0.0004 mu+ nu_mu PHOTOS SLN; -0.0010 tau+ nu_tau SLN; -# -0.0282 anti-K0 pi+ PHSP; -0.0800 a_1+ anti-K0 SVS; -0.0508 anti-K'_10 pi+ SVS; -0.0115 anti-K_0*0N pi+ PHSP; -0.0210 anti-K*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -# the Dalitz mode below includes K*bar(892)0 pi+, +0.055200000 anti-K*0 e+ nu_e PHOTOS ISGW2; # PDG2014 +0.088300000 anti-K0 e+ nu_e PHOTOS ISGW2; # PDG2014 +0.002773020 anti-K_10 e+ nu_e PHOTOS ISGW2; # Keep same as in 2010 version +0.002927076 anti-K_2*0 e+ nu_e PHOTOS ISGW2; # Keep same as in 2010 version +0.004050000 pi0 e+ nu_e PHOTOS ISGW2; # PDG2014 +0.001140000 eta e+ nu_e PHOTOS ISGW2; # PDG2014 +0.000220000 eta' e+ nu_e PHOTOS ISGW2; # PDG2014 +0.002180000 rho0 e+ nu_e PHOTOS ISGW2; # PDG2014 +0.001820000 omega e+ nu_e PHOTOS ISGW2; # PDG2014 +0.003321725 K- pi+ e+ nu_e PHOTOS PHSP; # PDG2014 (subtracted K*)+tiny bit to have sum=1 +0.001200122 anti-K0 pi0 e+ nu_e PHOTOS PHSP; # Keep same as in 2010 version+tiny bit to have sum=1 +# +0.052800000 anti-K*0 mu+ nu_mu PHOTOS ISGW2; # PDG2014 +0.092000000 anti-K0 mu+ nu_mu PHOTOS ISGW2; # PDG2014 +0.002773020 anti-K_10 mu+ nu_mu PHOTOS ISGW2; # Keep same as in 2010 version +0.002927076 anti-K_2*0 mu+ nu_mu PHOTOS ISGW2; # Keep same as in 2010 version +0.004050000 pi0 mu+ nu_mu PHOTOS ISGW2; # Same as electron +0.001140000 eta mu+ nu_mu PHOTOS ISGW2; # Same as electron +0.002200000 eta' mu+ nu_mu PHOTOS ISGW2; # Same as electron +0.002400000 rho0 mu+ nu_mu PHOTOS ISGW2; # PDG2014 +0.001820000 omega mu+ nu_mu PHOTOS ISGW2; # Same as electron +0.002921725 K- pi+ mu+ nu_mu PHOTOS PHSP; # PDG2014 (subtracted K*)+tiny bit to have sum=1 +0.001200122 anti-K0 pi0 mu+ nu_mu PHOTOS PHSP; # Keep same as in 2010 version+tiny bit to have sum=1 +# +# +0.000382000 mu+ nu_mu PHOTOS SLN; #[Reconstructed PDG2011] +0.000770283 tau+ nu_tau SLN; #[Reconstructed PDG2011] +# +0.014900000 K_S0 pi+ PHSP; #[Reconstructed PDG2011] +0.014600000 K_L0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi+ PHSP; #[Reconstructed PDG2011] +# +0.025950843 a_1+ K_S0 SVS; #[Reconstructed PDG2011] +0.025950843 a_1+ K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 a_1+ anti-K0 SVS; #[Reconstructed PDG2011] +# +0.027090862 anti-K'_10 pi+ SVS; #[Reconstructed PDG2011] +#0.0115 anti-K_0*0N pi+ PHSP; +0.013387523 anti-K*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# +# the Dalitz mode below includes K*bar(892)0 pi+, # K*bar(1430)0 pi+, and K*bar(1680)0 pi+ resonances. -0.0920 K- pi+ pi+ D_DALITZ; -# the Dalitz mode below includes K0bar rho+, +0.094000000 K- pi+ pi+ D_DALITZ; #[Reconstructed PDG2011] +# the Dalitz mode below includes K0bar rho+, # and K*bar(892)0 pi+ resonances -0.0970 anti-K0 pi+ pi0 D_DALITZ; -0.0100 anti-K0 eta pi+ PHSP; -0.0050 anti-K0 rho0 pi+ PHSP; -0.0050 anti-K0 omega pi+ PHSP; -0.0110 K- rho+ pi+ PHSP; -0.0070 K*- pi+ pi+ PHSP; -0.0100 anti-K*0 pi0 pi+ PHSP; -0.0100 anti-K*0 eta pi+ PHSP; -0.0078 anti-K*0 rho0 pi+ PHSP; -0.0050 anti-K*0 omega pi+ PHSP; -0.0100 K*- rho+ pi+ PHSP; -# -0.0120 K- pi+ pi+ pi0 PHSP; -0.0000 anti-K0 pi+ pi+ pi- PHSP; -0.0188 anti-K0 pi+ pi0 pi0 PHSP; -0.0022 K- pi+ pi+ pi+ pi- PHSP; -0.005 K- pi+ pi+ pi0 pi0 PHSP; -0.0087 anti-K0 pi+ pi+ pi- pi0 PHSP; -0.0035 anti-K0 pi+ pi0 pi0 pi0 PHSP; -# -0.0100 anti-K0 anti-K0 K+ PHSP; -0.0070 phi pi+ SVS; -0.0230 phi pi+ pi0 PHSP; -0.0074 anti-K0 K+ PHSP; -0.0042 anti-K*0 K+ SVS; -0.0310 K*+ anti-K0 SVS; -0.0180 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0046 K+ K- pi+ PHSP; -0.0010 K+ anti-K0 pi0 PHSP; -0.0010 anti-K0 K0 pi+ PHSP; -0.0010 K*+ K- pi+ PHSP; -0.0010 K+ K*- pi+ PHSP; -0.0010 K*+ anti-K0 pi0 PHSP; -0.0010 K+ anti-K*0 pi0 PHSP; -0.0010 anti-K*0 K0 pi+ PHSP; -0.0010 anti-K0 K*0 pi+ PHSP; -# -0.0026 pi0 pi+ PHSP; -0.0010 rho0 pi+ SVS; -0.0020 pi+ pi+ pi- PHSP; -0.0015 pi+ pi0 pi0 PHSP; -0.0090 pi+ pi+ pi- pi0 PHSP; -0.0050 pi+ pi0 pi0 pi0 PHSP; -0.0076 eta pi+ PHSP; -0.0030 eta pi+ pi0 PHSP; -0.0030 eta pi+ pi+ pi- PHSP; -0.0020 eta pi+ pi0 pi0 PHSP; +0.069900000 K_S0 pi+ pi0 D_DALITZ; # PDG2014 +0.069900000 K_L0 pi+ pi0 D_DALITZ; # Assume to be same as K_S0 pi+ pi0 +0.000000000 anti-K0 pi+ pi0 D_DALITZ; #[Reconstructed PDG2011] +#0.0100 anti-K0 eta pi+ PHSP; +# +0.001247859 K_S0 rho0 pi+ PHSP; #[Reconstructed PDG2011] +0.001247859 K_L0 rho0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 rho0 pi+ PHSP; #[Reconstructed PDG2011] +# +0.003851416 anti-K0 omega pi+ PHSP; #[Reconstructed PDG2011] +0.007032686 K- rho+ pi+ PHSP; #[Reconstructed PDG2011] +0.009274210 K*- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.047187552 anti-K*0 pi0 pi+ PHSP; #[Reconstructed PDG2011] +#0.0100 anti-K*0 eta pi+ PHSP; +0.001101505 anti-K*0 rho0 pi+ PHSP; #[Reconstructed PDG2011] +0.003851416 anti-K*0 omega pi+ PHSP; #[Reconstructed PDG2011] +#0.0100 K*- rho+ pi+ PHSP; +# +0.008473116 K- pi+ pi+ pi0 PHSP; #[Reconstructed PDG2011] +# +#0.002472609 K_S0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +#0.002472609 K_L0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.031200000 K_S0 pi+ pi+ pi- PHSP; # PDG2014 (why it was much smaller?) +0.031200000 K_L0 pi+ pi+ pi- PHSP; # PDG2014 +0.000000000 anti-K0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +# +#0.0188 anti-K0 pi+ pi0 pi0 PHSP; +0.005700000 K- pi+ pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.003851416 K- pi+ pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.006701464 anti-K0 pi+ pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.002695991 anti-K0 pi+ pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.004600000 K_S0 K_S0 K+ PHSP; #[Reconstructed PDG2011] +0.003111944 K_L0 K_L0 K+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 anti-K0 K+ PHSP; #[Reconstructed PDG2011] +# +0.004660214 phi pi+ SVS; #[Reconstructed PDG2011] +0.023000000 phi pi+ pi0 PHSP; #[Reconstructed PDG2011] +# +0.002860000 K_S0 K+ PHSP; #[Reconstructed PDG2011] +0.002195307 K_L0 K+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K+ PHSP; #[Reconstructed PDG2011] +# +0.002179902 anti-K*0 K+ SVS; #[Reconstructed PDG2011] +# +0.016000000 K*+ K_S0 SVS; #[Reconstructed PDG2011] +0.011145999 K*+ K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 K*+ anti-K0 SVS; #[Reconstructed PDG2011] +# +#0.0180 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.002826940 K+ K- pi+ PHSP; #[Reconstructed PDG2011] +0.000770283 K+ anti-K0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 pi+ PHSP; #[Reconstructed PDG2011] +0.000770283 K*+ K- pi+ PHSP; #[Reconstructed PDG2011] +0.000770283 K+ K*- pi+ PHSP; #[Reconstructed PDG2011] +0.000770283 K*+ anti-K0 pi0 PHSP; #[Reconstructed PDG2011] +0.000770283 K+ anti-K*0 pi0 PHSP; #[Reconstructed PDG2011] +0.000770283 anti-K*0 K0 pi+ PHSP; #[Reconstructed PDG2011] +0.000770283 anti-K0 K*0 pi+ PHSP; #[Reconstructed PDG2011] +# +0.001260000 pi0 pi+ PHSP; #[Reconstructed PDG2011] +0.000830000 rho0 pi+ SVS; #[Reconstructed PDG2011] +0.002440000 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.004700000 pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.011600000 pi+ pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.003851416 pi+ pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.003430000 eta pi+ PHSP; #[Reconstructed PDG2011] +0.004400000 eta' pi+ PHSP; #[Reconstructed PDG2011] +0.001380000 eta pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.002310850 eta pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001540566 eta pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] #lange jul22,2002 -0.0021 pi+ pi+ pi+ pi- pi- PHSP; +0.001660000 pi+ pi+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +# March 2009 New Modes +0.009300000 anti-K*0 a_1+ PHSP; #[Reconstructed PDG2011] +0.010545178 K+ K- pi+ pi0 PHSP; #[Reconstructed PDG2011] +# +0.001740000 K+ K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001270967 K+ K_L0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K+ anti-K0 pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.002380000 K_S0 K- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.001756246 K_L0 K- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K- pi+ pi+ PHSP; #[Reconstructed PDG2011] +# +0.000230000 K+ K- pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.000240000 K+ K- K_S0 pi+ PHSP; #[Reconstructed PDG2011] +0.000161759 K+ K- K_L0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 K+ K- anti-K0 pi+ PHSP; #[Reconstructed PDG2011] +# Doubly Cabibbo suppressed modes +0.000237000 K+ pi0 PHSP; #[Reconstructed PDG2011] +0.000332000 K+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000089000 K+ K+ K- PHSP; #[Reconstructed PDG2011] +0.001720000 K- rho0 pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001600000 eta' pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000210000 K+ rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # # Decay D- -0.0554 K*0 e- anti-nu_e PHOTOS ISGW2; -0.0900 K0 e- anti-nu_e PHOTOS ISGW2; -0.0036 K_10 e- anti-nu_e PHOTOS ISGW2; -0.0038 K_2*0 e- anti-nu_e PHOTOS ISGW2; -0.0043 pi0 e- anti-nu_e PHOTOS ISGW2; -0.0026 eta e- anti-nu_e PHOTOS ISGW2; -0.0005 eta' e- anti-nu_e PHOTOS ISGW2; -0.0028 rho0 e- anti-nu_e PHOTOS ISGW2; -0.0028 omega e- anti-nu_e PHOTOS ISGW2; -0.0027 K+ pi- e- anti-nu_e PHOTOS PHSP; -0.0014 K0 pi0 e- anti-nu_e PHOTOS PHSP; -# -0.0533 K*0 mu- anti-nu_mu PHOTOS ISGW2; -0.0874 K0 mu- anti-nu_mu PHOTOS ISGW2; -0.0036 K_10 mu- anti-nu_mu PHOTOS ISGW2; -0.0038 K_2*0 mu- anti-nu_mu PHOTOS ISGW2; -0.0043 pi0 mu- anti-nu_mu PHOTOS ISGW2; -0.0026 eta mu- anti-nu_mu PHOTOS ISGW2; -0.0005 eta' mu- anti-nu_mu PHOTOS ISGW2; -0.0028 rho0 mu- anti-nu_mu PHOTOS ISGW2; -0.0028 omega mu- anti-nu_mu PHOTOS ISGW2; -0.0027 K+ pi- mu- anti-nu_mu PHOTOS PHSP; -0.0014 K0 pi0 mu- anti-nu_mu PHOTOS PHSP; -# -0.0004 mu- anti-nu_mu PHOTOS SLN; -0.0010 tau- anti-nu_tau SLN; -# -0.0282 K0 pi- PHSP; -0.0800 a_1- K0 SVS; -0.0508 K'_10 pi- SVS; -0.0115 K_0*0N pi- PHSP; -0.0210 K*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.055200000 K*0 e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.088300000 K0 e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.002773020 K_10 e- anti-nu_e PHOTOS ISGW2; # Keep same as in 2010 version +0.002927076 K_2*0 e- anti-nu_e PHOTOS ISGW2; # Keep same as in 2010 version +0.004050000 pi0 e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.001140000 eta e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.000220000 eta' e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.002180000 rho0 e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.001820000 omega e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.003321725 K+ pi- e- anti-nu_e PHOTOS PHSP; # PDG2014 (subtracted K*)+tiny bit to have sum=1 +0.001200122 K0 pi0 e- anti-nu_e PHOTOS PHSP; # Keep same as in 2010 version+tiny bit to have sum=1 +# +0.052800000 K*0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.092000000 K0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002773020 K_10 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002927076 K_2*0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.004050000 pi0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.001140000 eta mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002200000 eta' mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002400000 rho0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.001820000 omega mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002921725 K+ pi- mu- anti-nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] +0.001200122 K0 pi0 mu- anti-nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] +# +0.000382000 mu- anti-nu_mu PHOTOS SLN; #[Reconstructed PDG2011] +0.000770283 tau- anti-nu_tau SLN; #[Reconstructed PDG2011] +# +0.014900000 K_S0 pi- PHSP; #[Reconstructed PDG2011] +0.014600000 K_L0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 pi- PHSP; #[Reconstructed PDG2011] +# +0.025950843 a_1- K_S0 SVS; #[Reconstructed PDG2011] +0.025950843 a_1- K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 a_1- K0 SVS; #[Reconstructed PDG2011] +# +0.027090862 K'_10 pi- SVS; #[Reconstructed PDG2011] +#0.0115 K_0*0N pi- PHSP; +0.013387523 K*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] # # the Dalitz mode below includes K*(892)0 pi-, K*(1430)0 pi-, and K*(1680)0 pi- resonances. -0.0920 K+ pi- pi- D_DALITZ; +0.094000000 K+ pi- pi- D_DALITZ; #[Reconstructed PDG2011] # the Dalitz mode below includes K0 rho-, and K*(892)0 pi- resonances. -0.0970 K0 pi- pi0 D_DALITZ; -0.0100 K0 eta pi- PHSP; -0.0050 K0 rho0 pi- PHSP; -0.0050 K0 omega pi- PHSP; -0.0110 K+ rho- pi- PHSP; -0.0070 K*+ pi- pi- PHSP; -0.0100 K*0 pi0 pi- PHSP; -0.0100 K*0 eta pi- PHSP; -0.0078 K*0 rho0 pi- PHSP; -0.0050 K*0 omega pi- PHSP; -0.0100 K*+ rho- pi- PHSP; -# -0.0120 K+ pi- pi- pi0 PHSP; -0.0000 K0 pi- pi- pi+ PHSP; -0.0188 K0 pi- pi0 pi0 PHSP; -0.0022 K+ pi- pi- pi- pi+ PHSP; -0.005 K+ pi- pi- pi0 pi0 PHSP; -0.0087 K0 pi- pi- pi+ pi0 PHSP; -0.0035 K0 pi- pi0 pi0 pi0 PHSP; -# -0.0100 K0 K0 K- PHSP; -0.0070 phi pi- SVS; -0.0230 phi pi- pi0 PHSP; -0.0074 K0 K- PHSP; -0.0042 K*0 K- SVS; -0.0310 K*- K0 SVS; -0.0180 K*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0046 K- K+ pi- PHSP; -0.0010 K- K0 pi0 PHSP; -0.0010 anti-K0 K0 pi- PHSP; -0.0010 K*- K+ pi- PHSP; -0.0010 K- K*+ pi- PHSP; -0.0010 K*- K0 pi0 PHSP; -0.0010 K- K*0 pi0 PHSP; -0.0010 K*0 anti-K0 pi- PHSP; -0.0010 K0 anti-K*0 pi- PHSP; -# -0.0026 pi0 pi- PHSP; -0.0010 rho0 pi- SVS; -0.0020 pi- pi+ pi- PHSP; -0.0015 pi- pi0 pi0 PHSP; -0.0090 pi- pi+ pi- pi0 PHSP; -0.0050 pi- pi0 pi0 pi0 PHSP; -0.0076 eta pi- PHSP; -0.0030 eta pi- pi0 PHSP; -0.0030 eta pi- pi+ pi- PHSP; -0.0020 eta pi- pi0 pi0 PHSP; +0.069900000 K_S0 pi- pi0 D_DALITZ; # PDG2014 +0.069900000 K_L0 pi- pi0 D_DALITZ; # Assume to be same as K_S0 pi- pi0 +0.000000000 K0 pi- pi0 D_DALITZ; #[Reconstructed PDG2011] +# +#0.0100 K0 eta pi- PHSP; +0.001247859 K_S0 rho0 pi- PHSP; #[Reconstructed PDG2011] +0.001247859 K_L0 rho0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 rho0 pi- PHSP; #[Reconstructed PDG2011] +# +0.003851416 K0 omega pi- PHSP; #[Reconstructed PDG2011] +0.007032686 K+ rho- pi- PHSP; #[Reconstructed PDG2011] +0.009274210 K*+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.047187552 K*0 pi0 pi- PHSP; #[Reconstructed PDG2011] +#0.0100 K*0 eta pi- PHSP; +0.001101505 K*0 rho0 pi- PHSP; #[Reconstructed PDG2011] +0.003851416 K*0 omega pi- PHSP; #[Reconstructed PDG2011] +#0.0100 K*+ rho- pi- PHSP; +# +0.008473116 K+ pi- pi- pi0 PHSP; #[Reconstructed PDG2011] +# +0.031200000 K_S0 pi- pi- pi+ PHSP; # PDG2014 (why it was much smaller?) +0.031200000 K_L0 pi- pi- pi+ PHSP; # PDG2014 +0.000000000 K0 pi- pi- pi+ PHSP; #[Reconstructed PDG2011] +# +#0.0188 K0 pi- pi0 pi0 PHSP; +0.005700000 K+ pi- pi- pi- pi+ PHSP; #[Reconstructed PDG2011] +0.003851416 K+ pi- pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.006701464 K0 pi- pi- pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.002695991 K0 pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.004600000 K_S0 K_S0 K- PHSP; #[Reconstructed PDG2011] +0.003111944 K_L0 K_L0 K- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K0 K- PHSP; #[Reconstructed PDG2011] +# +0.004660214 phi pi- SVS; #[Reconstructed PDG2011] +0.023000000 phi pi- pi0 PHSP; #[Reconstructed PDG2011] +# +0.002860000 K_S0 K- PHSP; #[Reconstructed PDG2011] +0.002195307 K_L0 K- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K- PHSP; #[Reconstructed PDG2011] +# +0.002179902 K*0 K- SVS; #[Reconstructed PDG2011] +# +0.016000000 K*- K_S0 SVS; #[Reconstructed PDG2011] +0.011145999 K*- K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 K*- K0 SVS; #[Reconstructed PDG2011] +# +#0.0180 K*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.002826940 K- K+ pi- PHSP; #[Reconstructed PDG2011] +0.000770283 K- K0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 pi- PHSP; #[Reconstructed PDG2011] +0.000770283 K*- K+ pi- PHSP; #[Reconstructed PDG2011] +0.000770283 K- K*+ pi- PHSP; #[Reconstructed PDG2011] +0.000770283 K*- K0 pi0 PHSP; #[Reconstructed PDG2011] +0.000770283 K- K*0 pi0 PHSP; #[Reconstructed PDG2011] +0.000770283 K*0 anti-K0 pi- PHSP; #[Reconstructed PDG2011] +0.000770283 K0 anti-K*0 pi- PHSP; #[Reconstructed PDG2011] +# +0.001260000 pi0 pi- PHSP; #[Reconstructed PDG2011] +0.000830000 rho0 pi- SVS; #[Reconstructed PDG2011] +0.002440000 pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.004700000 pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.011600000 pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.003851416 pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.003430000 eta pi- PHSP; #[Reconstructed PDG2011] +0.004400000 eta' pi- PHSP; #[Reconstructed PDG2011] +0.001380000 eta pi- pi0 PHSP; #[Reconstructed PDG2011] +0.002310850 eta pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001540566 eta pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] #lange jul22,2002 -0.0021 pi+ pi- pi+ pi- pi- PHSP; +0.001660000 pi+ pi- pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +# March 2009 New Modes +0.009300000 K*0 a_1- PHSP; #[Reconstructed PDG2011] +0.010545178 K+ K- pi- pi0 PHSP; #[Reconstructed PDG2011] +# +0.001740000 K- K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001270967 K- K_L0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K- K0 pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.002380000 K_S0 K+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.001756246 K_L0 K+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +0.000230000 K+ K- pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +0.000240000 K+ K- K_S0 pi- PHSP; #[Reconstructed PDG2011] +0.000161759 K+ K- K_L0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K+ K- K0 pi- PHSP; #[Reconstructed PDG2011] +# Doubly Cabibbo suppressed modes +0.000237000 K- pi0 PHSP; #[Reconstructed PDG2011] +0.000332000 K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000089000 K- K+ K- PHSP; #[Reconstructed PDG2011] +0.001720000 K+ rho0 pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001600000 eta' pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000210000 K- rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay K*BR @@ -5578,109 +6014,186 @@ Decay D0 # of sl partial widths for D+ and D0. # Include additional decay anti-K0 pi- e+ nu_e , K- pi0 e+ nu_e. # -0.0225 K*- e+ nu_e PHOTOS ISGW2; -0.0350 K- e+ nu_e PHOTOS ISGW2; -0.0014 K_1- e+ nu_e PHOTOS ISGW2; -0.0015 K_2*- e+ nu_e PHOTOS ISGW2; -0.0034 pi- e+ nu_e PHOTOS ISGW2; -0.0022 rho- e+ nu_e PHOTOS ISGW2; -0.0011 anti-K0 pi- e+ nu_e PHOTOS PHSP; -0.0006 K- pi0 e+ nu_e PHOTOS PHSP; -# -0.0214 K*- mu+ nu_mu PHOTOS ISGW2; -0.0340 K- mu+ nu_mu PHOTOS ISGW2; -0.0014 K_1- mu+ nu_mu PHOTOS ISGW2; -0.0015 K_2*- mu+ nu_mu PHOTOS ISGW2; -0.0034 pi- mu+ nu_mu PHOTOS ISGW2; -0.0022 rho- mu+ nu_mu PHOTOS ISGW2; -0.0011 anti-K0 pi- mu+ nu_mu PHOTOS PHSP; -0.0006 K- pi0 mu+ nu_mu PHOTOS PHSP; -# -0.0383 K- pi+ PHSP; -0.0212 anti-K0 pi0 PHSP; -0.0071 anti-K0 eta PHSP; -0.0172 anti-K0 eta' PHSP; -0.0210 omega anti-K0 SVS; -0.0190 anti-K*0 eta SVS; -0.0020 anti-K*0 eta' SVS; -0.0730 a_1+ K- SVS; -0.0610 K*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0146 anti-K*0 rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0110 anti-K*0 omega SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# the Dalitz mode below includes K*bar(892)0 pi0, +0.021600000 K*- e+ nu_e PHOTOS ISGW2; # PDG2014 +0.035500000 K- e+ nu_e PHOTOS ISGW2; # PDG2014 +0.000760000 K_1- e+ nu_e PHOTOS ISGW2; # PDG2014 +0.001100000 K_2*- e+ nu_e PHOTOS ISGW2; # Small decrease as this is unmeasured +0.002890000 pi- e+ nu_e PHOTOS ISGW2; # PDG2014 +0.001770000 rho- e+ nu_e PHOTOS ISGW2; # PDG2014 +0.001080000 anti-K0 pi- e+ nu_e PHOTOS PHSP; # PDG2014 subtracting K* (decreased due large uncertaity ) +0.000400000 K- pi0 e+ nu_e PHOTOS PHSP; # PDG2014 subtracting K* (decreased due large uncertaity ) +# +0.021000000 K*- mu+ nu_mu PHOTOS ISGW2; # 1.1 * PDG2014 +0.034700000 K- mu+ nu_mu PHOTOS ISGW2; # 1.05 * PDG2014 +0.000076000 K_1- mu+ nu_mu PHOTOS ISGW2; # PDG2014 for electron +0.001100000 K_2*- mu+ nu_mu PHOTOS ISGW2; # copy from electron +0.002370000 pi- mu+ nu_mu PHOTOS ISGW2; # PDG2014 +0.002015940 rho- mu+ nu_mu PHOTOS ISGW2; # PDG2014 for electron +0.001080000 anti-K0 pi- mu+ nu_mu PHOTOS PHSP; # copy electron +0.000400000 K- pi0 mu+ nu_mu PHOTOS PHSP; # copy electron +# +0.038900000 K- pi+ PHSP; #[Reconstructed PDG2011] +# +0.012200000 K_S0 pi0 PHSP; #[Reconstructed PDG2011] +0.010000000 K_L0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.004290000 K_S0 eta PHSP; #[Reconstructed PDG2011] +0.003802795 K_L0 eta PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 eta PHSP; #[Reconstructed PDG2011] +# +0.009300000 K_S0 eta' PHSP; #[Reconstructed PDG2011] +0.008980094 K_L0 eta' PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 eta' PHSP; #[Reconstructed PDG2011] +# +0.011100000 omega K_S0 SVS; #[Reconstructed PDG2011] +0.010904400 omega K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 omega anti-K0 SVS; #[Reconstructed PDG2011] +# +0.001603588 anti-K*0 eta SVS; #[Reconstructed PDG2011] +0.000916336 anti-K*0 eta' SVS; #[Reconstructed PDG2011] +0.078000000 a_1+ K- SVS; #[Reconstructed PDG2011] +0.067625607 K*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.015800000 anti-K*0 rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.011000000 anti-K*0 omega SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# the Dalitz mode below includes K*bar(892)0 pi0, # K*(892)- pi+, and K- rho(770)+ resonances -0.1390 K- pi+ pi0 D_DALITZ; -0.0085 K*BR pi0 SVS; -0.0107 K_1- pi+ SVS; -0.0071 anti-K_10 pi0 SVS; +0.139000000 K- pi+ pi0 D_DALITZ; #[Reconstructed PDG2011] +0.006634274 K*BR pi0 SVS; #[Reconstructed PDG2011] +0.016000000 K_1- pi+ SVS; #[Reconstructed PDG2011] +0.006505987 anti-K_10 pi0 SVS; #[Reconstructed PDG2011] # # the Dalitz mode below includes K*(892)- pi+ and Kbar0 rho(770)0 resonances # LHCb PR 09 Apr 2004 split into KS/KL -0.0000 anti-K0 pi+ pi- D_DALITZ; -0.0270 K_S0 pi+ pi- D_DALITZ; -0.0270 K_L0 pi+ pi- D_DALITZ; -0.0078 anti-K0 pi0 pi0 PHSP; -0.0225 anti-K*0 pi+ pi- PHSP; -0.0116 anti-K*0 pi0 pi0 PHSP; -0.0100 K*- pi+ pi0 PHSP; -0.0068 K- rho+ pi0 PHSP; -0.0060 K- pi+ rho0 PHSP; -0.0303 K- pi+ omega PHSP; -0.0100 K- pi+ eta PHSP; -0.0075 K- pi+ eta' PHSP; -0.0074 K- pi+ pi+ pi- PHSP; -0.0085 anti-K0 pi+ pi- pi0 PHSP; -# -# K- pi+ pi0 pi0 is (15 +/- 5)% in the PDG, but we decrease it to +0.029400000 K_S0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] +0.027856619 K_L0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] +# +0.008300000 K_S0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.004425904 K_L0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.024000000 anti-K*0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.010629499 anti-K*0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.009163361 K*- pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.006231086 K- rho+ pi0 PHSP; #[Reconstructed PDG2011] +0.005305586 K- pi+ rho0 PHSP; #[Reconstructed PDG2011] +0.019000000 K- pi+ omega PHSP; #[Reconstructed PDG2011] +0.009163361 K- pi+ eta PHSP; #[Reconstructed PDG2011] +0.007500000 K- pi+ eta' PHSP; #[Reconstructed PDG2011] +0.013300000 K- pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.054000000 K_S0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.010079698 K_L0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +# +# K- pi+ pi0 pi0 is (15 +/- 5)% in the PDG, but we decrease it to # have everything add to 1 and get enough neutral kaons: -0.02575 K- pi+ pi0 pi0 PHSP; -# -0.0143 anti-K0 pi0 pi0 pi0 PHSP; -0.0038 K- pi+ pi+ pi- pi0 PHSP; -0.0038 K- pi+ pi0 pi0 pi0 PHSP; -0.0058 anti-K0 pi+ pi- pi+ pi- PHSP; -# -0.0638 anti-K0 pi+ pi- pi0 pi0 PHSP; -0.0192 anti-K0 pi+ pi- pi0 pi0 pi0 PHSP; -# -0.0086 phi anti-K0 SVS; -0.0051 anti-K0 K+ K- PHSP; -0.0008 K_S0 K_S0 K_S0 PHSP; -0.0043 K+ K- PHSP; -0.0006 K_S0 K_S0 PHSP; -0.0006 K_L0 K_L0 PHSP; -0.0004 K*0 anti-K0 SVS; -0.0008 anti-K*0 K0 SVS; -0.0018 K*- K+ SVS; -0.0035 K*+ K- SVS; -0.0014 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0007 phi pi0 SVS; -0.0011 phi pi+ pi- PHSP; -0.0025 K+ K- pi+ pi- PHSP; -0.0030 K+ K- pi0 pi0 PHSP; -0.0015 anti-K0 K0 pi+ pi- PHSP; -0.0015 anti-K0 K0 pi0 pi0 PHSP; -# -0.0015 pi+ pi- PHSP; -0.0008 pi0 pi0 PHSP; -0.0010 eta pi0 PHSP; -0.0010 eta' pi0 PHSP; -0.0010 eta eta PHSP; -0.0040 rho+ pi- SVS; -0.0040 rho- pi+ SVS; -0.0020 rho0 pi0 SVS; -0.0060 pi+ pi- pi0 PHSP; -0.0010 pi0 pi0 pi0 PHSP; -0.0073 pi+ pi+ pi- pi- PHSP; -0.0050 pi+ pi- pi0 pi0 PHSP; -0.0177 pi+ pi- pi+ pi- pi0 PHSP; -0.0060 pi+ pi- pi0 pi0 pi0 PHSP; +#0.02575 K- pi+ pi0 pi0 PHSP; +# +#0.0143 anti-K0 pi0 pi0 pi0 PHSP; +0.040316317 anti-K0 pi0 pi0 pi0 PHSP; # Add in to fill sum to 1. [MK June 2015] +0.000000000 K- pi+ pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.003482077 K- pi+ pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.002800000 K_S0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002684865 K_L0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +# +#0.0638 anti-K0 pi+ pi- pi0 pi0 PHSP; +#0.0192 anti-K0 pi+ pi- pi0 pi0 pi0 PHSP; +# +0.002034266 phi K_S0 SVS; #[Reconstructed PDG2011] +0.002034266 phi K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 phi anti-K0 SVS; #[Reconstructed PDG2011] +# +0.004650000 K_S0 K+ K- PHSP; #[Reconstructed PDG2011] +0.002785662 K_L0 K+ K- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K+ K- PHSP; #[Reconstructed PDG2011] +# +0.000950000 K_S0 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.003940000 K+ K- PHSP; #[Reconstructed PDG2011] +0.000190000 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.000366534 K_L0 K_L0 PHSP; #[Reconstructed PDG2011] +0.000366534 K*0 anti-K0 SVS; #[Reconstructed PDG2011] +# +0.000091634 anti-K*0 K_S0 SVS; #[Reconstructed PDG2011] +0.000091634 anti-K*0 K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 anti-K*0 K0 SVS; #[Reconstructed PDG2011] +# +0.000485658 K*- K+ SVS; #[Reconstructed PDG2011] +0.001365341 K*+ K- SVS; #[Reconstructed PDG2011] +0.001282871 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000714742 phi pi0 SVS; #[Reconstructed PDG2011] +0.001007970 phi pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002430000 K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002749008 K+ K- pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.001280000 K_S0 K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001255381 K_L0 K_L0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.001374504 anti-K0 K0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.001397000 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000800000 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000640000 eta pi0 PHSP; #[Reconstructed PDG2011] +0.000810000 eta' pi0 PHSP; #[Reconstructed PDG2011] +0.001670000 eta eta PHSP; #[Reconstructed PDG2011] +0.009800000 rho+ pi- SVS; #[Reconstructed PDG2011] +0.004970000 rho- pi+ SVS; #[Reconstructed PDG2011] +0.003730000 rho0 pi0 SVS; #[Reconstructed PDG2011] +0.001209564 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000091634 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.005620000 pi+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.009360000 pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.001510000 pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.005498017 pi+ pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000420000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] # # Doubly Cabibbo suppressed decays: -0.00015 pi- K+ PHSP; -0.0005 pi- K+ pi0 PHSP; +0.000137450 pi- K+ PHSP; #[Reconstructed PDG2011] +0.000128287 pi- K*+ PHSP; #[Reconstructed PDG2011] +0.000274901 pi- K+ pi0 PHSP; #[Reconstructed PDG2011] +0.000247411 K+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] # PR LHCb - 19 Apr. 2004 Add D0 -> mu+ mu- -0.000000000001 mu+ mu- PHSP; +0.000000000 mu+ mu- PHSP; #[Reconstructed PDG2011] +# +# March 2009 New Modes +0.000140000 phi eta PHSP; #[Reconstructed PDG2011] +0.019000000 anti-K*0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000220000 K- pi+ pi- pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] +0.000641435 K+ K- pi0 PHSP; #[Reconstructed PDG2011] +0.003100000 K+ K- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000221000 K+ K- K- pi+ PHSP; #[Reconstructed PDG2011] +# +0.005600000 K_S0 eta pi0 PHSP; #[Reconstructed PDG2011] +0.003665345 K_L0 eta pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 eta pi0 PHSP; #[Reconstructed PDG2011] +# +0.002600000 K_S0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.002382474 K_L0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K+ pi- PHSP; #[Reconstructed PDG2011] +# +0.003500000 K_S0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.003344627 K_L0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K- pi+ PHSP; #[Reconstructed PDG2011] +# +0.000310000 K_S0 K_S0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.000293228 K_L0 K_L0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 K+ pi- PHSP; #[Reconstructed PDG2011] +# +0.000310000 K_S0 K_S0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000293228 K_L0 K_L0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 K- pi+ pi- e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001820000 rho0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001090000 eta pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001600000 omega pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000450000 eta' pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001260000 eta eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000027000 phi gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000328000 anti-K*0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # # @@ -5690,239 +6203,392 @@ Enddecay # # Decay anti-D0 -0.0225 K*+ e- anti-nu_e PHOTOS ISGW2; -0.0350 K+ e- anti-nu_e PHOTOS ISGW2; -0.0014 K_1+ e- anti-nu_e PHOTOS ISGW2; -0.0015 K_2*+ e- anti-nu_e PHOTOS ISGW2; -0.0034 pi+ e- anti-nu_e PHOTOS ISGW2; -0.0022 rho+ e- anti-nu_e PHOTOS ISGW2; -0.0011 K0 pi+ e- anti-nu_e PHOTOS PHSP; -0.0006 K+ pi0 e- anti-nu_e PHOTOS PHSP; -# -0.0214 K*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0340 K+ mu- anti-nu_mu PHOTOS ISGW2; -0.0014 K_1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0015 K_2*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0034 pi+ mu- anti-nu_mu PHOTOS ISGW2; -0.0022 rho+ mu- anti-nu_mu PHOTOS ISGW2; -0.0011 K0 pi+ mu- anti-nu_mu PHOTOS PHSP; -0.0006 K+ pi0 mu- anti-nu_mu PHOTOS PHSP; -# -0.0383 K+ pi- PHSP; -0.0212 K0 pi0 PHSP; -0.0071 K0 eta PHSP; -0.0172 K0 eta' PHSP; -0.0210 omega K0 SVS; -0.0190 K*0 eta SVS; -0.0020 K*0 eta' SVS; -0.0730 a_1- K+ SVS; -0.0610 K*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0146 K*0 rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0110 K*0 omega SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.021600000 K*+ e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.035500000 K+ e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.000760000 K_1+ e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.001100000 K_2*+ e- anti-nu_e PHOTOS ISGW2; # Small decrease as this is unmeasured +0.002890000 pi+ e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.001770000 rho+ e- anti-nu_e PHOTOS ISGW2; # PDG2014 +0.001080000 K0 pi+ e- anti-nu_e PHOTOS PHSP; # PDG2014 subtracting K* (decreased due large uncertaity ) +0.000400000 K+ pi0 e- anti-nu_e PHOTOS PHSP; # PDG2014 subtracting K* (decreased due large uncertaity ) +# +0.021000000 K*+ mu- anti-nu_mu PHOTOS ISGW2; # 1.1 * PDG2014 +0.034700000 K+ mu- anti-nu_mu PHOTOS ISGW2; # 1.05 * PDG2014 +0.000076000 K_1+ mu- anti-nu_mu PHOTOS ISGW2; # PDG2014 for electron +0.001100000 K_2*+ mu- anti-nu_mu PHOTOS ISGW2; # copy from electron +0.002370000 pi+ mu- anti-nu_mu PHOTOS ISGW2; # PDG2014 +0.002015940 rho+ mu- anti-nu_mu PHOTOS ISGW2; # PDG2014 for electron +0.001080000 K0 pi+ mu- anti-nu_mu PHOTOS PHSP; # copy electron +0.000400000 K+ pi0 mu- anti-nu_mu PHOTOS PHSP; # copy electron +# +0.038900000 K+ pi- PHSP; #[Reconstructed PDG2011] +# +0.012200000 K_S0 pi0 PHSP; #[Reconstructed PDG2011] +0.010000000 K_L0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 K0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.004290000 K_S0 eta PHSP; #[Reconstructed PDG2011] +0.003818748 K_L0 eta PHSP; #[Reconstructed PDG2011] +0.000000000 K0 eta PHSP; #[Reconstructed PDG2011] +# +0.009300000 K_S0 eta' PHSP; #[Reconstructed PDG2011] +0.009017767 K_L0 eta' PHSP; #[Reconstructed PDG2011] +0.000000000 K0 eta' PHSP; #[Reconstructed PDG2011] +# +0.011100000 omega K_S0 SVS; #[Reconstructed PDG2011] +0.010950146 omega K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 omega K0 SVS; #[Reconstructed PDG2011] +# +0.001610316 K*0 eta SVS; #[Reconstructed PDG2011] +0.000920180 K*0 eta' SVS; #[Reconstructed PDG2011] +0.078000000 a_1- K+ SVS; #[Reconstructed PDG2011] +0.067909308 K*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.015800000 K*0 rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.011000000 K*0 omega SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] # the Dalitz mode below includes K*(892)0 pi0, K*(892)+ pi-, and K+ rho(770)- resonances -0.1390 K+ pi- pi0 D_DALITZ; -0.0085 K*0R pi0 SVS; -0.0107 K_1+ pi- SVS; -0.0071 K_10 pi0 SVS; +0.139000000 K+ pi- pi0 D_DALITZ; #[Reconstructed PDG2011] +0.006662106 K*0R pi0 SVS; #[Reconstructed PDG2011] +0.016000000 K_1+ pi- SVS; #[Reconstructed PDG2011] +0.006533280 K_10 pi0 SVS; #[Reconstructed PDG2011] # the Dalitz mode below includes K*(892)+ pi- and K0 rho(770)0 resonances # LHCb PR 09 Apr 2004, split into KS/KL -0.0000 K0 pi+ pi- D_DALITZ; -0.0270 K_S0 pi+ pi- D_DALITZ; -0.0270 K_L0 pi+ pi- D_DALITZ; -0.0078 K0 pi0 pi0 PHSP; -0.0225 K*0 pi+ pi- PHSP; -0.0116 K*0 pi0 pi0 PHSP; -0.0100 K*+ pi- pi0 PHSP; -0.0068 K+ rho- pi0 PHSP; -0.0060 K+ pi- rho0 PHSP; -0.0303 K+ pi- omega PHSP; -0.0100 K+ pi- eta PHSP; -0.0075 K+ pi- eta' PHSP; -0.0074 K+ pi- pi+ pi- PHSP; -0.0085 K0 pi+ pi- pi0 PHSP; -# -# K+ pi- pi0 pi0 is (15 +/- 5)% in the PDG, but we decrease it to +0.000000000 K0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] +0.029400000 K_S0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] +0.027973482 K_L0 pi+ pi- D_DALITZ; #[Reconstructed PDG2011] +# +0.008300000 K_S0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.004444471 K_L0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 K0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.024000000 K*0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.010674092 K*0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.009201803 K*+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.006257226 K+ rho- pi0 PHSP; #[Reconstructed PDG2011] +0.005327844 K+ pi- rho0 PHSP; #[Reconstructed PDG2011] +0.019000000 K+ pi- omega PHSP; #[Reconstructed PDG2011] +0.009201803 K+ pi- eta PHSP; #[Reconstructed PDG2011] +0.007500000 K+ pi- eta' PHSP; #[Reconstructed PDG2011] +0.013300000 K+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.054000000 K_S0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.010121984 K_L0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 K0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +# +# K+ pi- pi0 pi0 is (15 +/- 5)% in the PDG, but we decrease it to # have everything add to 1 and get enough neutral kaons: -0.02575 K+ pi- pi0 pi0 PHSP; -# -0.0143 K0 pi0 pi0 pi0 PHSP; -0.0038 K+ pi- pi+ pi- pi0 PHSP; -0.0038 K+ pi- pi0 pi0 pi0 PHSP; -0.0058 K0 pi+ pi- pi+ pi- PHSP; -# -0.0638 K0 pi- pi+ pi0 pi0 PHSP; -0.0192 K0 pi- pi+ pi0 pi0 pi0 PHSP; -# -0.0086 phi K0 SVS; -0.0051 K0 K+ K- PHSP; -0.0008 K_S0 K_S0 K_S0 PHSP; -0.0043 K+ K- PHSP; -0.0006 K_S0 K_S0 PHSP; -0.0006 K_L0 K_L0 PHSP; -0.0004 anti-K*0 K0 SVS; -0.0008 K*0 anti-K0 SVS; -0.0018 K*+ K- SVS; -0.0035 K*- K+ SVS; -0.0014 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0007 phi pi0 SVS; -0.0011 phi pi+ pi- PHSP; -0.0025 K+ K- pi+ pi- PHSP; -0.0030 K+ K- pi0 pi0 PHSP; -0.0015 anti-K0 K0 pi+ pi- PHSP; -0.0015 anti-K0 K0 pi0 pi0 PHSP; -# -0.0015 pi+ pi- PHSP; -0.0008 pi0 pi0 PHSP; -0.0010 eta pi0 PHSP; -0.0010 eta' pi0 PHSP; -0.0010 eta eta PHSP; -0.0040 rho+ pi- SVS; -0.0040 rho- pi+ SVS; -0.0020 rho0 pi0 SVS; -0.0060 pi+ pi- pi0 PHSP; -0.0010 pi0 pi0 pi0 PHSP; -0.0073 pi+ pi+ pi- pi- PHSP; -0.0050 pi+ pi- pi0 pi0 PHSP; -0.0177 pi+ pi- pi+ pi- pi0 PHSP; -0.0060 pi+ pi- pi0 pi0 pi0 PHSP; +#0.02575 K+ pi- pi0 pi0 PHSP; +# +#0.0143 K0 pi0 pi0 pi0 PHSP; +0.040346268 K0 pi0 pi0 pi0 PHSP; +0.000000000 K+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.003496685 K+ pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.002800000 K_S0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002696128 K_L0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +# +#0.0638 K0 pi- pi+ pi0 pi0 PHSP; +#0.0192 K0 pi- pi+ pi0 pi0 pi0 PHSP; +# +0.002042800 phi K_S0 SVS; #[Reconstructed PDG2011] +0.002042800 phi K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 phi K0 SVS; #[Reconstructed PDG2011] +# +0.004650000 K_S0 K+ K- PHSP; #[Reconstructed PDG2011] +0.002797348 K_L0 K+ K- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K+ K- PHSP; #[Reconstructed PDG2011] +# +0.000950000 K_S0 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.003940000 K+ K- PHSP; #[Reconstructed PDG2011] +0.000190000 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.000368072 K_L0 K_L0 PHSP; #[Reconstructed PDG2011] +0.000368072 anti-K*0 K0 SVS; #[Reconstructed PDG2011] +# +0.000092018 K*0 K_S0 SVS; #[Reconstructed PDG2011] +0.000092018 K*0 K_L0 SVS; #[Reconstructed PDG2011] +0.000000000 K*0 anti-K0 SVS; #[Reconstructed PDG2011] +# +0.000487696 K*+ K- SVS; #[Reconstructed PDG2011] +0.001371069 K*- K+ SVS; #[Reconstructed PDG2011] +0.001288252 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000717741 phi pi0 SVS; #[Reconstructed PDG2011] +0.001012198 phi pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002430000 K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002760541 K+ K- pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.001280000 K_S0 K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001260647 K_L0 K_L0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.001380270 anti-K0 K0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.001397000 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000800000 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000640000 eta pi0 PHSP; #[Reconstructed PDG2011] +0.000810000 eta' pi0 PHSP; #[Reconstructed PDG2011] +0.001670000 eta eta PHSP; #[Reconstructed PDG2011] +0.009128189 rho+ pi- SVS; #[Reconstructed PDG2011] +0.004637709 rho- pi+ SVS; #[Reconstructed PDG2011] +0.003730000 rho0 pi0 SVS; #[Reconstructed PDG2011] +0.001214638 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000092018 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.005620000 pi+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.009360000 pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.001510000 pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.005521082 pi+ pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000420000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] # # Doubly Cabibbo suppressed decays: -0.00015 pi+ K- PHSP; -0.0005 pi+ K- pi0 PHSP; +0.000138027 pi+ K- PHSP; #[Reconstructed PDG2011] +0.000128825 pi+ K*- PHSP; #[Reconstructed PDG2011] +0.000276054 pi+ K- pi0 PHSP; #[Reconstructed PDG2011] +0.000248449 K- pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] # PR LHCb - 19 Apr. 2004 Add anti-D0 -> mu+ mu- -0.000000000001 mu- mu+ PHSP; -Enddecay -# +0.000000000 mu- mu+ PHSP; #[Reconstructed PDG2011] +# +# March 2009 New Modes +0.000140000 phi eta PHSP; #[Reconstructed PDG2011] +0.019000000 K*0 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000220000 K+ pi- pi- pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] +0.000644126 K+ K- pi0 PHSP; #[Reconstructed PDG2011] +0.003100000 K+ K- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000221000 K+ K+ K- pi- PHSP; #[Reconstructed PDG2011] +# +0.005600000 K_S0 eta pi0 PHSP; #[Reconstructed PDG2011] +0.003680721 K_L0 eta pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 K0 eta pi0 PHSP; #[Reconstructed PDG2011] +# +0.002600000 K_S0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.002392469 K_L0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K- pi+ PHSP; #[Reconstructed PDG2011] +# +0.003500000 K_S0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.003358658 K_L0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K+ pi- PHSP; #[Reconstructed PDG2011] +# +0.000310000 K_S0 K_S0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.000294458 K_L0 K_L0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 K+ pi- PHSP; #[Reconstructed PDG2011] +# +0.000310000 K_S0 K_S0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000294458 K_L0 K_L0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 K+ pi- pi+ e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001820000 rho0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001090000 eta pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001600000 omega pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000450000 eta' pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001260000 eta eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000027000 phi gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000328000 K*0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +# Updated to PDG 2008 Decay D_s+ -0.0242 phi e+ nu_e PHOTOS ISGW2; -0.0307 eta e+ nu_e PHOTOS ISGW2; -0.0106 eta' e+ nu_e PHOTOS ISGW2; -0.0027 anti-K0 e+ nu_e PHOTOS ISGW2; -0.0010 anti-K*0 e+ nu_e PHOTOS ISGW2; -0.0242 phi mu+ nu_mu PHOTOS ISGW2; -0.0307 eta mu+ nu_mu PHOTOS ISGW2; -0.0106 eta' mu+ nu_mu PHOTOS ISGW2; -0.0027 anti-K0 mu+ nu_mu PHOTOS ISGW2; -0.0010 anti-K*0 mu+ nu_mu PHOTOS ISGW2; -0.00616 mu+ nu_mu PHOTOS SLN; -0.064 tau+ nu_tau SLN; +0.024900000 phi e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.026700000 eta e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.009900000 eta' e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002058115 anti-K0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.000762265 anti-K*0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.018309605 phi mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.022845082 eta mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.008186726 eta' mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002058115 anti-K0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.000762265 anti-K*0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.005800000 mu+ nu_mu PHOTOS SLN; #[Reconstructed PDG2011] +0.031100000 tau+ nu_tau SLN; #[Reconstructed PDG2011] ### Lange Nov14, 2004 - average cleo + babar (prelim) using stat error only.. -0.044 phi pi+ SVS; -0.021 eta pi+ PHSP; -0.047 eta' pi+ PHSP; -0.0034 omega pi+ SVS; -0.0004 rho0 pi+ SVS; -0.0004 rho+ pi0 SVS; +0.045000000 phi pi+ SVS; #[Reconstructed PDG2011] +0.015600000 eta pi+ PHSP; #[Reconstructed PDG2011] +0.038000000 eta' pi+ PHSP; #[Reconstructed PDG2011] +0.002300000 omega pi+ SVS; #[Reconstructed PDG2011] +0.000304906 rho+ pi0 SVS; #[Reconstructed PDG2011] +0.000076226 pi+ pi0 PHSP; #[Reconstructed PDG2011] #? -0.0010 pi+ pi0 PHSP; -0.01 f_0 pi+ PHSP; -0.0023 f_2 pi+ PHSP; -0.082 phi rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.131 rho+ eta SVS; -0.122 rho+ eta' SVS; -0.00005 pi+ pi- pi+ PHSP; -0.00005 pi+ pi0 pi0 PHSP; -0.010 phi pi+ pi0 PHSP; -0.0150 eta pi+ pi0 PHSP; -0.0150 eta' pi+ pi0 PHSP; -0.008 phi pi+ pi- pi+ PHSP; -0.0050 phi pi+ pi0 pi0 PHSP; -0.0050 eta pi+ pi- pi+ PHSP; -0.0050 eta pi+ pi0 pi0 PHSP; -0.044 anti-K0 K+ PHSP; -0.040 anti-K*0 K+ SVS; -0.053 K*+ anti-K0 SVS; -0.070 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.003 anti-K0 K+ pi0 PHSP; -0.0012 anti-K*0 K+ pi0 PHSP; -0.0012 K*+ anti-K0 pi0 PHSP; -0.004 anti-K*0 K*+ pi0 PHSP; -0.011 K+ K- pi+ PHSP; -0.0010 anti-K0 K+ pi+ pi- PHSP; -0.0010 anti-K0 K+ pi0 pi0 PHSP; -0.0043 K+ K- pi+ pi- pi+ PHSP; -0.0003 phi K+ SVS; -0.0002 eta K+ PHSP; -0.0002 eta' K+ PHSP; -0.0002 eta K+ pi0 PHSP; -0.0002 eta K+ pi+ pi- PHSP; -0.0002 eta' K+ pi0 PHSP; -0.0002 eta' K+ pi+ pi- PHSP; -0.0002 K+ K- K+ PHSP; -0.0040 K0 pi+ PHSP; -0.0015 rho+ K0 SVS; -0.0015 rho0 K+ SVS; -0.0010 K0 pi+ pi0 PHSP; -0.0025 a_1+ K0 SVS; -0.0079 K*0 pi+ SVS; -0.0050 K*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0050 K*0 pi+ pi0 PHSP; -Enddecay -# +0.000196200 rho0 pi+ SVS; # PDG 2014 +0.007852048 f_0 pi+ PHSP; # PDG 2014 +0.001753646 f_2 pi+ PHSP; # PDG 2014 +0.004754077 f'_0 pi+ PHSP; # PDG 2014 +0.005768112 f_0(1500) pi+ PHSP; # PDG 2014 +#0.000735750 rho(2S)0 pi+ PHSP; # PDG 2014 +0.000000000 pi+ pi- pi+ PHSP; # PDG 2014 (filled by exclusives) +0.084000000 phi rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.089000000 rho+ eta SVS; #[Reconstructed PDG2011] +0.124213286 rho+ eta' SVS; # Decrease compared to PDG 2014 to preserve unitarity after +# # fixing Ds --> 3pi, we also have too much of inclusive eta', +# #so pick this decay +0.006500000 pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.007622650 phi pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.011433975 eta pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.011433975 eta' pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.012100000 phi pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] +0.003811325 phi pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.003811325 eta pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] +0.003811325 eta pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.014900000 K_S0 K+ PHSP; #[Reconstructed PDG2011] +0.011472088 K_L0 K+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K+ PHSP; #[Reconstructed PDG2011] +# +0.030490600 anti-K*0 K+ SVS; #[Reconstructed PDG2011] +0.054000000 K*+ anti-K0 SVS; #[Reconstructed PDG2011] +0.072000000 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.002286795 anti-K0 K+ pi0 PHSP; #[Reconstructed PDG2011] +0.000914718 anti-K*0 K+ pi0 PHSP; #[Reconstructed PDG2011] +0.000914718 K*+ anti-K0 pi0 PHSP; #[Reconstructed PDG2011] +0.003049060 anti-K*0 K*+ pi0 PHSP; #[Reconstructed PDG2011] +0.003811325 K+ K- pi+ PHSP; #[Reconstructed PDG2011] +# +0.009600000 K_S0 K+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.007470197 K_L0 K+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K+ pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.000762265 anti-K0 K+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 K+ K- pi+ pi- pi+ PHSP; #[Reconstructed PDG2011] +0.000152453 phi K+ SVS; #[Reconstructed PDG2011] +0.001390000 eta K+ PHSP; #[Reconstructed PDG2011] +0.001600000 eta' K+ PHSP; #[Reconstructed PDG2011] +0.000152453 eta K+ pi0 PHSP; #[Reconstructed PDG2011] +0.000152453 eta K+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000152453 eta' K+ pi0 PHSP; #[Reconstructed PDG2011] +0.000152453 eta' K+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000490000 K+ K- K+ PHSP; #[Reconstructed PDG2011] +# +0.001200000 K_S0 pi+ PHSP; #[Reconstructed PDG2011] +0.000968077 K_L0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 K0 pi+ PHSP; #[Reconstructed PDG2011] +# +0.001143397 rho+ K0 SVS; #[Reconstructed PDG2011] +0.002700000 rho0 K+ SVS; #[Reconstructed PDG2011] +0.010000000 K0 pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.001905662 a_1+ K0 SVS; #[Reconstructed PDG2011] +0.006021893 K*0 pi+ SVS; #[Reconstructed PDG2011] +0.003811325 K*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.003811325 K*0 pi+ pi0 PHSP; #[Reconstructed PDG2011] +# +# March 2009 New Modes +0.000820000 K+ pi0 PHSP; #[Reconstructed PDG2011] +0.004200000 K+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.008000000 pi+ pi+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.049000000 pi+ pi+ pi+ pi- pi- pi0 PHSP; #[Reconstructed PDG2011] +0.001300000 p+ anti-n0 PHSP; #[Reconstructed PDG2011] +# +0.000840000 K_S0 K_S0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000686038 K_L0 K_L0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.002900000 K_S0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002424003 K_L0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi+ pi+ pi- PHSP; #[Reconstructed PDG2011] +# Doubly Cabibbo suppressed +0.000129000 K+ K+ pi- PHSP; #[Reconstructed PDG2011] +0.003700000 K0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 K*0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 K+ K- pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.028000000 omega pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.016000000 omega pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +# Updated to PDG 2008 Decay D_s- -0.0242 phi e- anti-nu_e PHOTOS ISGW2; -0.0307 eta e- anti-nu_e PHOTOS ISGW2; -0.0106 eta' e- anti-nu_e PHOTOS ISGW2; -0.0027 K0 e- anti-nu_e PHOTOS ISGW2; -0.0010 K*0 e- anti-nu_e PHOTOS ISGW2; -0.0242 phi mu- anti-nu_mu PHOTOS ISGW2; -0.0307 eta mu- anti-nu_mu PHOTOS ISGW2; -0.0106 eta' mu- anti-nu_mu PHOTOS ISGW2; -0.0027 K0 mu- anti-nu_mu PHOTOS ISGW2; -0.0010 K*0 mu- anti-nu_mu PHOTOS ISGW2; -0.00616 mu- anti-nu_mu PHOTOS SLN; -0.064 tau- anti-nu_tau SLN; -0.0440 phi pi- SVS; -0.0210 eta pi- PHSP; -0.0470 eta' pi- PHSP; -0.0034 omega pi- SVS; -0.0004 rho0 pi- SVS; -0.0004 rho- pi0 SVS; -0.0010 pi- pi0 PHSP; -0.010 f_0 pi- PHSP; -0.0023 f_2 pi- PHSP; -0.0820 phi rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.131 rho- eta SVS; -0.122 rho- eta' SVS; -0.00005 pi- pi- pi+ PHSP; -0.00005 pi- pi0 pi0 PHSP; -0.010 phi pi- pi0 PHSP; -0.0150 eta pi- pi0 PHSP; -0.0150 eta' pi- pi0 PHSP; -0.008 phi pi- pi- pi+ PHSP; -0.0050 phi pi- pi0 pi0 PHSP; -0.0050 eta pi- pi- pi+ PHSP; -0.0050 eta pi- pi0 pi0 PHSP; -# -0.0440 K0 K- PHSP; -0.0400 K*0 K- SVS; -0.0530 K*- K0 SVS; -0.0700 K*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.003 K0 K- pi0 PHSP; -0.0012 K*0 K- pi0 PHSP; -0.0012 K*- K0 pi0 PHSP; -0.004 K*0 K*- pi0 PHSP; -# -0.0110 K+ K- pi- PHSP; -0.0010 K0 K- pi+ pi- PHSP; -0.0010 K0 K- pi0 pi0 PHSP; -0.0043 K- K+ pi- pi+ pi- PHSP; -0.0003 phi K- SVS; -0.0002 eta K- PHSP; -0.0002 eta' K- PHSP; -0.0002 eta K- pi0 PHSP; -0.0002 eta K- pi+ pi- PHSP; -0.0002 eta' K- pi0 PHSP; -0.0002 eta' K- pi+ pi- PHSP; -0.0002 K- K- K+ PHSP; -0.0040 anti-K0 pi- PHSP; -0.0015 rho- anti-K0 SVS; -0.0015 rho0 K- SVS; -0.0010 anti-K0 pi- pi0 PHSP; -0.0025 a_1- anti-K0 SVS; -0.0079 anti-K*0 pi- SVS; -0.0050 anti-K*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0050 anti-K*0 pi- pi0 PHSP; +0.024900000 phi e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.026700000 eta e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.009900000 eta' e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002058115 K0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.000762265 K*0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] +0.018309605 phi mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.022845082 eta mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.008186726 eta' mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.002058115 K0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.000762265 K*0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] +0.005800000 mu- anti-nu_mu PHOTOS SLN; #[Reconstructed PDG2011] +0.031100000 tau- anti-nu_tau SLN; #[Reconstructed PDG2011] +0.045000000 phi pi- SVS; #[Reconstructed PDG2011] +0.015600000 eta pi- PHSP; #[Reconstructed PDG2011] +0.038000000 eta' pi- PHSP; #[Reconstructed PDG2011] +0.002300000 omega pi- SVS; #[Reconstructed PDG2011] +0.000304906 rho- pi0 SVS; #[Reconstructed PDG2011] +0.000076226 pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000196200 rho0 pi- SVS; # PDG 2014 +0.007852048 f_0 pi- PHSP; # PDG 2014 +0.001753646 f_2 pi- PHSP; # PDG 2014 +0.004754077 f'_0 pi- PHSP; # PDG 2014 +0.005768112 f_0(1500) pi- PHSP; # PDG 2014 +#0.000735750 rho(2S)0 pi- PHSP; # PDG 2014 +0.000000000 pi- pi+ pi- PHSP; # PDG 2014 (filled by exclusives) +0.084000000 phi rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.089000000 rho- eta SVS; #[Reconstructed PDG2011] +0.124213286 rho- eta' SVS; # Decrease compared to PDG 2014 to preserve unitarity after +0.006500000 pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.007622650 phi pi- pi0 PHSP; #[Reconstructed PDG2011] +0.011433975 eta pi- pi0 PHSP; #[Reconstructed PDG2011] +0.011433975 eta' pi- pi0 PHSP; #[Reconstructed PDG2011] +0.012100000 phi pi- pi- pi+ PHSP; #[Reconstructed PDG2011] +0.003811325 phi pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.003811325 eta pi- pi- pi+ PHSP; #[Reconstructed PDG2011] +0.003811325 eta pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +# +0.014900000 K_S0 K- PHSP; #[Reconstructed PDG2011] +0.011472088 K_L0 K- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K- PHSP; #[Reconstructed PDG2011] +# +0.030490600 K*0 K- SVS; #[Reconstructed PDG2011] +0.054000000 K*- K0 SVS; #[Reconstructed PDG2011] +0.072000000 K*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.002286795 K0 K- pi0 PHSP; #[Reconstructed PDG2011] +0.000914718 K*0 K- pi0 PHSP; #[Reconstructed PDG2011] +0.000914718 K*- K0 pi0 PHSP; #[Reconstructed PDG2011] +0.003049060 K*0 K*- pi0 PHSP; #[Reconstructed PDG2011] +0.003811325 K+ K- pi- PHSP; #[Reconstructed PDG2011] +# +0.009600000 K_S0 K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.007470197 K_L0 K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 K- pi+ pi- PHSP; #[Reconstructed PDG2011] +# +0.000762265 K0 K- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 K- K+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000152453 phi K- SVS; #[Reconstructed PDG2011] +0.001390000 eta K- PHSP; #[Reconstructed PDG2011] +0.001600000 eta' K- PHSP; #[Reconstructed PDG2011] +0.000152453 eta K- pi0 PHSP; #[Reconstructed PDG2011] +0.000152453 eta K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000152453 eta' K- pi0 PHSP; #[Reconstructed PDG2011] +0.000152453 eta' K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000490000 K- K- K+ PHSP; #[Reconstructed PDG2011] +# +0.001200000 K_S0 pi- PHSP; #[Reconstructed PDG2011] +0.000968077 K_L0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 pi- PHSP; #[Reconstructed PDG2011] +# +0.001143397 rho- anti-K0 SVS; #[Reconstructed PDG2011] +0.002700000 rho0 K- SVS; #[Reconstructed PDG2011] +0.010000000 anti-K0 pi- pi0 PHSP; #[Reconstructed PDG2011] +0.001905662 a_1- anti-K0 SVS; #[Reconstructed PDG2011] +0.006021893 anti-K*0 pi- SVS; #[Reconstructed PDG2011] +0.003811325 anti-K*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.003811325 anti-K*0 pi- pi0 PHSP; #[Reconstructed PDG2011] +# +# March 2009 New Modes +0.000820000 K- pi0 PHSP; #[Reconstructed PDG2011] +0.004200000 K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.008000000 pi+ pi+ pi- pi- pi- PHSP; #[Reconstructed PDG2011] +0.049000000 pi+ pi+ pi- pi- pi- pi0 PHSP; #[Reconstructed PDG2011] +0.001300000 anti-p- n0 PHSP; #[Reconstructed PDG2011] +# +0.000840000 K_S0 K_S0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.000686038 K_L0 K_L0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.000000000 anti-K0 K0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +0.002900000 K_S0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.002424003 K_L0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.000000000 K0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +# Doubly Cabibbo suppressed +0.000129000 K- K- pi+ PHSP; #[Reconstructed PDG2011] +0.003700000 anti-K0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 anti-K*0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 K- K+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.028000000 omega pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.016000000 omega pi- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # # D** @@ -5984,7 +6650,7 @@ Decay D'_10 0.3333 D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; Enddecay Decay anti-D'_10 -0.3333 anti-D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3333 anti-D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; 0.6667 D*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; Enddecay # @@ -6006,9 +6672,9 @@ Decay D_2*+ Enddecay Decay D_2*- 0.1030 D*- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.2090 anti-D*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.2090 anti-D*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; 0.2290 D- pi0 TSS; -0.4590 anti-D0 pi- TSS; +0.4590 anti-D0 pi- TSS; Enddecay Decay D_2*0 0.2090 D*+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; @@ -6113,12 +6779,11 @@ Decay D*(2S)- Enddecay # # -# Strange Mesons +# Strange Mesons updated to PDG 2008 # # -# -# K_S0 is decayed in GEANT -# +Decay K_S0 +Enddecay # # K_L0 is decayed in GEANT # @@ -6136,20 +6801,23 @@ Decay K*0 0.3323 K0 pi0 VSS; 0.0020 K0 gamma VSP_PWAVE; Enddecay +# Decay anti-K*0 0.6657 K- pi+ VSS; 0.3323 anti-K0 pi0 VSS; 0.0020 anti-K0 gamma VSP_PWAVE; Enddecay +# Decay K*+ -0.6660 K0 pi+ VSS; -0.3330 K+ pi0 VSS; -0.0010 K+ gamma VSP_PWAVE; +0.6657 K0 pi+ VSS; +0.3323 K+ pi0 VSS; +0.0020 K+ gamma VSP_PWAVE; Enddecay +# Decay K*- -0.6660 anti-K0 pi- VSS; -0.3330 K- pi0 VSS; -0.0010 K- gamma VSP_PWAVE; +0.6657 anti-K0 pi- VSS; +0.3323 K- pi0 VSS; +0.0020 K- gamma VSP_PWAVE; Enddecay # # The decays below are for particle aliases and used when @@ -6215,6 +6883,7 @@ Decay K_10 0.1244 K+ pi- pi0 PHSP; 0.0412 K0 pi0 pi0 PHSP; Enddecay +# Decay anti-K_10 0.2800 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; 0.1400 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; @@ -6238,6 +6907,7 @@ Decay K_1+ 0.1244 K0 pi+ pi0 PHSP; 0.0412 K+ pi0 pi0 PHSP; Enddecay +# Decay K_1- 0.2800 rho- anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; 0.1400 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; @@ -6259,6 +6929,7 @@ Decay K'_1+ 0.0133 K+ pi+ pi- PHSP; 0.0067 K+ pi0 pi0 PHSP; Enddecay +# Decay K'_1- 0.6300 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; 0.3100 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; @@ -6268,6 +6939,7 @@ Decay K'_1- 0.0133 K- pi+ pi- PHSP; 0.0067 K- pi0 pi0 PHSP; Enddecay +# Decay K'_10 0.6300 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; 0.3100 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; @@ -6277,6 +6949,7 @@ Decay K'_10 0.0133 K0 pi+ pi- PHSP; 0.0067 K0 pi0 pi0 PHSP; Enddecay +# Decay anti-K'_10 0.6300 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; 0.3100 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; @@ -6288,55 +6961,62 @@ Decay anti-K'_10 Enddecay # Decay K_2*+ -0.3310 K0 pi+ TSS; -0.1660 K+ pi0 TSS; -0.1680 K*0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0840 K*+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0540 K*0 pi+ pi0 PHSP; -0.0540 K*+ pi+ pi- PHSP; -0.0540 K*+ pi0 pi0 PHSP; -0.0590 rho+ K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0300 rho0 K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.3340 K0 pi+ TSS; +0.1670 K+ pi0 TSS; +0.1645 K*0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0835 K*+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0450 K*0 pi+ pi0 PHSP; +0.0450 K*+ pi+ pi- PHSP; +0.0450 K*+ pi0 pi0 PHSP; +0.0580 rho+ K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 rho0 K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 omega K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; Enddecay +# Decay K_2*- -0.3310 anti-K0 pi- TSS; -0.1660 K- pi0 TSS; -0.1680 anti-K*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0840 K*- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0540 anti-K*0 pi- pi0 PHSP; -0.0540 K*- pi+ pi- PHSP; -0.0540 K*- pi0 pi0 PHSP; -0.0590 rho- K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0300 rho0 K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.3340 anti-K0 pi- TSS; +0.1670 K- pi0 TSS; +0.1645 anti-K*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0835 K*- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0450 anti-K*0 pi- pi0 PHSP; +0.0450 K*- pi+ pi- PHSP; +0.0450 K*- pi0 pi0 PHSP; +0.0580 rho- K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 rho0 K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 omega K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; Enddecay +# Decay K_2*0 -0.3310 K+ pi- TSS; -0.1660 K0 pi0 TSS; -0.1680 K*+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0840 K*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0540 K*0 pi+ pi- PHSP; -0.0540 K*0 pi0 pi0 PHSP; -0.0540 K*+ pi- pi0 PHSP; -0.0590 rho- K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0300 rho0 K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.3340 K+ pi- TSS; +0.1670 K0 pi0 TSS; +0.1645 K*+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0835 K*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0450 K*0 pi+ pi- PHSP; +0.0450 K*0 pi0 pi0 PHSP; +0.0450 K*+ pi- pi0 PHSP; +0.0580 rho- K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 rho0 K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 omega K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; Enddecay +# Decay anti-K_2*0 -0.3310 K- pi+ TSS; -0.1660 anti-K0 pi0 TSS; -0.1680 K*- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0840 anti-K*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0540 anti-K*0 pi+ pi- PHSP; -0.0540 anti-K*0 pi0 pi0 PHSP; -0.0540 K*- pi+ pi0 PHSP; -0.0590 rho+ K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0300 rho0 anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.3340 K- pi+ TSS; +0.1670 anti-K0 pi0 TSS; +0.1645 K*- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0835 anti-K*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0450 anti-K*0 pi+ pi- PHSP; +0.0450 anti-K*0 pi0 pi0 PHSP; +0.0450 K*- pi+ pi0 PHSP; +0.0580 rho+ K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 rho0 anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 omega anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; Enddecay # Decay K*(1410) -Decay K'*0 +Decay K'*0 0.0467 K+ pi- VSS; 0.0233 K0 pi0 VSS; 0.5760 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; @@ -6345,7 +7025,7 @@ Decay K'*0 0.0220 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; Enddecay # -Decay anti-K'*0 +Decay anti-K'*0 0.0467 K- pi+ VSS; 0.0233 anti-K0 pi0 VSS; 0.5760 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; @@ -6354,7 +7034,7 @@ Decay anti-K'*0 0.0220 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; Enddecay # -Decay K'*+ +Decay K'*+ 0.0467 K0 pi+ VSS; 0.0233 K+ pi0 VSS; 0.5760 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; @@ -6363,7 +7043,7 @@ Decay K'*+ 0.0220 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; Enddecay # -Decay K'*- +Decay K'*- 0.0467 anti-K0 pi- VSS; 0.0233 K- pi0 VSS; 0.5760 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; @@ -6375,7 +7055,7 @@ Enddecay # Decay K*(1680) -Decay K''*0 +Decay K''*0 0.2580 K+ pi- VSS; 0.1290 K0 pi0 VSS; 0.2093 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; @@ -6384,7 +7064,7 @@ Decay K''*0 0.0997 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; Enddecay # -Decay anti-K''*0 +Decay anti-K''*0 0.2580 K- pi+ VSS; 0.1290 anti-K0 pi0 VSS; 0.2093 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; @@ -6393,7 +7073,7 @@ Decay anti-K''*0 0.0997 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; Enddecay # -Decay K''*+ +Decay K''*+ 0.2580 K0 pi+ VSS; 0.1290 K+ pi0 VSS; 0.2093 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; @@ -6402,7 +7082,7 @@ Decay K''*+ 0.0997 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; Enddecay # -Decay K''*- +Decay K''*- 0.2580 anti-K0 pi- VSS; 0.1290 K- pi0 VSS; 0.2093 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; @@ -6412,47 +7092,50 @@ Decay K''*- Enddecay Decay Xsd -1.00000 d anti-s PYTHIA 11; +1.00000 d anti-s PYTHIA 42; Enddecay Decay anti-Xsd -1.00000 anti-d s PYTHIA 11; +1.00000 anti-d s PYTHIA 42; Enddecay Decay Xsu -1.00000 u anti-s PYTHIA 11; +1.00000 u anti-s PYTHIA 42; Enddecay Decay anti-Xsu -1.00000 anti-u s PYTHIA 11; +1.00000 anti-u s PYTHIA 42; Enddecay # Xss decays can be uncommented when Jst74/lucomp.F recognizes Xss Decay Xss -1.00000 s anti-s PYTHIA 11; +1.00000 s anti-s PYTHIA 42; Enddecay Decay anti-Xss -1.00000 anti-s s PYTHIA 11; +1.00000 anti-s s PYTHIA 42; Enddecay # -# Light Mesons +# Light Mesons Updated to PDG 2008 # Decay pi0 -0.9880 gamma gamma PHSP; -0.0120 e+ e- gamma PI0_DALITZ; +0.988228297 gamma gamma PHSP; #[Reconstructed PDG2011] +0.011738247 e+ e- gamma PI0_DALITZ; #[Reconstructed PDG2011] +0.000033392 e+ e+ e- e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000065 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay eta -0.39466 gamma gamma PHSP; -0.3251 pi0 pi0 pi0 PHSP; -0.2260 pi- pi+ pi0 ETA_DALITZ; -0.0468 gamma pi- pi+ PHSP; -0.0060 gamma e+ e- PHSP; -0.00031 gamma mu+ mu- PHSP; -0.00072 gamma gamma pi0 PHSP; -0.00040 pi+ pi- e+ e- PHSP; +0.393100000 gamma gamma PHSP; #[Reconstructed PDG2011] +0.325700000 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.227400000 pi- pi+ pi0 ETA_DALITZ; #[Reconstructed PDG2011] +0.046000000 gamma pi- pi+ PHSP; #[Reconstructed PDG2011] +0.007000000 gamma e+ e- PHSP; #[Reconstructed PDG2011] +0.000310000 gamma mu+ mu- PHSP; #[Reconstructed PDG2011] +0.000270000 gamma gamma pi0 PHSP; #[Reconstructed PDG2011] +0.000214200 pi+ pi- e+ e- PHSP; #[Reconstructed PDG2011] +0.000005800 mu+ mu- PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay rho0 @@ -6466,38 +7149,53 @@ Decay rho- Enddecay # Decay omega -0.8880 pi- pi+ pi0 OMEGA_DALITZ; -0.0850 pi0 gamma VSP_PWAVE; -0.0221 pi- pi+ VSS; -0.0008 eta gamma VSP_PWAVE; -0.0006 pi0 e+ e- PHOTOS PHSP; -0.0001 pi0 mu+ mu- PHOTOS PHSP; -0.0020 pi+ pi- gamma PHSP; -0.0004 pi0 pi0 gamma PHSP; -0.0010 pi+ pi- pi+ pi- PHSP; +0.892000000 pi- pi+ pi0 OMEGA_DALITZ; #[Reconstructed PDG2011] +0.082800000 pi0 gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.015300000 pi- pi+ VSS; #[Reconstructed PDG2011] +0.000460000 eta gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.000770000 pi0 e+ e- PHOTOS PHSP; #[Reconstructed PDG2011] +0.000130000 pi0 mu+ mu- PHOTOS PHSP; #[Reconstructed PDG2011] +0.00150 pi+ pi- gamma PHSP; +0.000066000 pi0 pi0 gamma PHSP; #[Reconstructed PDG2011] +0.00050 pi+ pi- pi+ pi- PHSP; +0.000072800 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000090000 mu+ mu- PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay eta' -0.4370 pi+ pi- eta PHSP; -0.2080 pi0 pi0 eta PHSP; -0.3020 rho0 gamma SVP_HELAMP 1.0 0.0 1.0 0.0; -0.0302 omega gamma SVP_HELAMP 1.0 0.0 1.0 0.0; -0.0212 gamma gamma PHSP; -0.0015 pi0 pi0 pi0 PHSP; -0.0001 gamma mu- mu+ PHOTOS PHSP; +0.432000000 pi+ pi- eta PHSP; #[Reconstructed PDG2011] +0.217000000 pi0 pi0 eta PHSP; #[Reconstructed PDG2011] +0.293511000 rho0 gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.027500000 omega gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.022200000 gamma gamma PHSP; #[Reconstructed PDG2011] +0.001680000 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000109000 gamma mu- mu+ PHOTOS PHSP; #[Reconstructed PDG2011] +0.003600000 pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002400000 pi+ pi- e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay phi -0.4910 K+ K- VSS; -0.3410 K_L0 K_S0 VSS; -0.0430 rho+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0430 rho0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0430 rho- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.489000000 K+ K- VSS; #[Reconstructed PDG2011] +0.342000000 K_L0 K_S0 VSS; #[Reconstructed PDG2011] +0.0425 rho+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0425 rho0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0425 rho- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; 0.0250 pi+ pi- pi0 PHSP; -0.0121 eta gamma VSP_PWAVE; -0.0013 pi0 gamma VSP_PWAVE; -0.0003 e+ e- PHOTOS VLL; -0.0003 mu+ mu- PHOTOS VLL; +0.013090000 eta gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.000687600 pi0 gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.000295400 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.000287000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.000113000 pi0 pi0 gamma PHSP; #[Reconstructed PDG2011] +0.000115000 eta e+ e- PHSP; #[Reconstructed PDG2011] +0.000322000 f_0 gamma PHSP; #[Reconstructed PDG2011] +0.000074000 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000047000 omega pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000041000 pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004000 pi+ pi- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011200 pi0 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000072700 pi0 eta gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000062500 eta' gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000014000 mu+ mu- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay a_1+ @@ -6516,28 +7214,33 @@ Enddecay Decay a_2+ 0.3500 rho0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; 0.3500 rho+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.1440 eta pi+ TSS; -0.1050 omega pi+ pi0 PHSP; -0.0480 anti-K0 K+ TSS; -0.0030 pi+ gamma PHSP; +0.1430 eta pi+ TSS; +0.1000 omega pi+ pi0 PHSP; +0.0490 anti-K0 K+ TSS; +0.0027 pi+ gamma PHSP; +0.0053 eta' pi+ TSS; Enddecay +# Decay a_2- 0.3500 rho0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; 0.3500 rho- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.1440 eta pi- TSS; -0.1050 omega pi- pi0 PHSP; -0.0480 anti-K0 K- TSS; -0.0030 pi- gamma PHSP; +0.1430 eta pi- TSS; +0.1000 omega pi- pi0 PHSP; +0.0490 anti-K0 K- TSS; +0.0027 pi- gamma PHSP; +0.0053 eta' pi- TSS; Enddecay +# Decay a_20 0.3500 rho+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; 0.3500 rho- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.1440 eta pi0 TSS; -0.1050 omega pi+ pi- PHSP; -0.0240 K+ K- TSS; -0.0120 K_L0 K_L0 TSS; -0.0120 K_S0 K_S0 TSS; -0.0030 pi0 gamma PHSP; +0.1430 eta pi0 TSS; +0.1000 omega pi+ pi- PHSP; +0.0245 K+ K- TSS; +0.01225 K_L0 K_L0 TSS; +0.01225 K_S0 K_S0 TSS; +0.0027 pi0 gamma PHSP; +0.0053 eta' pi0 TSS; Enddecay # Decay b_1+ @@ -6569,13 +7272,26 @@ Decay a_0- Enddecay # Decay f_0 -0.5200 pi+ pi- PHSP; -0.2600 pi0 pi0 PHSP; -0.1100 K+ K- PHSP; -0.0550 K_S0 K_S0 PHSP; -0.0550 K_L0 K_L0 PHSP; -Enddecay -# +0.6667 pi+ pi- PHSP; +0.3333 pi0 pi0 PHSP; +#0.1100 K+ K- PHSP; +#0.0550 K_S0 K_S0 PHSP; +#0.0550 K_L0 K_L0 PHSP; +Enddecay +# +# +# MK: Based on PDG 2014 without any attempt to really include everything. One +# thing, which is missing is KK mode, but data are scattered quite lot and +# I would also need to find place where to make space for it. For needs I +# have at this moment, this should be sufficient +#Decay f_0(1370) +#0.17333 pi+ pi- PHSP; +#0.08667 pi0 pi0 PHSP; +#0.26000 pi+ pi+ pi- pi- PHSP; +#0.32000 pi+ pi- pi0 pi0 PHSP; +#0.10667 rho+ rho- PHSP; +#0.05333 rho0 rho0 PHSP; +#Enddecay Decay f'_0 0.5200 pi+ pi- PHSP; 0.2600 pi0 pi0 PHSP; @@ -6587,20 +7303,23 @@ Decay f'_0 Enddecay # Decay f_1 -0.1500 rho0 pi+ pi- PHSP; -0.0500 rho0 pi0 pi0 PHSP; -0.0500 rho+ pi- pi0 PHSP; -0.0500 rho- pi+ pi0 PHSP; -0.1400 a_00 pi0 VSS; -0.1400 a_0+ pi- VSS; -0.1400 a_0- pi+ VSS; -0.0700 eta pi+ pi- PHSP; -0.0300 eta pi0 pi0 PHSP; -0.0300 K+ K- pi0 PHSP; -0.0200 K0 anti-K0 pi0 PHSP; -0.0300 anti-K0 K+ pi- PHSP; -0.0300 K0 K- pi+ PHSP; -0.0700 gamma rho0 PHSP; +0.110000000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.043364159 rho0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.043442860 rho+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.043442860 rho- pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.094440999 a_00 pi0 VSS; #[Reconstructed PDG2011] +0.094440999 a_0+ pi- VSS; #[Reconstructed PDG2011] +0.094440999 a_0- pi+ VSS; #[Reconstructed PDG2011] +0.086570916 eta pi+ pi- PHSP; #[Reconstructed PDG2011] +0.043285458 eta pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.020226114 K+ K- pi0 PHSP; #[Reconstructed PDG2011] +0.010152407 K0 anti-K0 pi0 PHSP; #[Reconstructed PDG2011] +0.020226114 anti-K0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.020226114 K0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.055000000 gamma rho0 PHSP; #[Reconstructed PDG2011] +0.220000000 pi0 pi0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000740000 phi gamma PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay f'_1 @@ -6613,34 +7332,36 @@ Enddecay Decay f_2 0.5650 pi+ pi- TSS; 0.2820 pi0 pi0 TSS; -0.0280 pi+ pi- pi+ pi- PHSP; -0.0720 pi+ pi- pi0 pi0 PHSP; -0.0030 pi0 pi0 pi0 pi0 PHSP; +0.028000000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.071000000 pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.003000000 pi0 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] 0.0230 K+ K- TSS; 0.0115 K_S0 K_S0 TSS; 0.0115 K_L0 K_L0 TSS; -0.0040 eta eta TSS; +0.004000000 eta eta TSS; #[Reconstructed PDG2011] +0.000016400 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay f_0(1500) -0.0500 eta eta' PHSP; -0.1500 eta eta PHSP; -0.1000 pi0 pi0 pi0 pi0 PHSP; -0.2500 pi+ pi- pi+ pi- PHSP; -0.1000 pi+ pi- PHSP; -0.0500 pi0 pi0 PHSP; -0.1000 K+ K- PHSP; -0.1000 K_S0 K_S0 PHSP; -0.1000 K_L0 K_L0 PHSP; +0.019000000 eta eta' PHSP; #[Reconstructed PDG2011] +0.051000000 eta eta PHSP; #[Reconstructed PDG2011] +0.1410 pi0 pi0 pi0 pi0 PHSP; +0.3540 pi+ pi- pi+ pi- PHSP; +0.2330 pi+ pi- PHSP; +0.1160 pi0 pi0 PHSP; +0.0430 K+ K- PHSP; +0.0215 K_S0 K_S0 PHSP; +0.0215 K_L0 K_L0 PHSP; Enddecay # Decay f'_2 -0.4444 K+ K- TSS; -0.2222 K_S0 K_S0 TSS; -0.2222 K_L0 K_L0 TSS; -0.1030 eta eta TSS; -0.0055 pi+ pi- TSS; -0.0027 pi0 pi0 TSS; +0.443904021 K+ K- TSS; #[Reconstructed PDG2011] +0.221952010 K_S0 K_S0 TSS; #[Reconstructed PDG2011] +0.221952010 K_L0 K_L0 TSS; #[Reconstructed PDG2011] +0.104000000 eta eta TSS; #[Reconstructed PDG2011] +0.005493862 pi+ pi- TSS; #[Reconstructed PDG2011] +0.002696987 pi0 pi0 TSS; #[Reconstructed PDG2011] +0.000001110 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay h_1 @@ -6655,7 +7376,7 @@ Decay h'_1 0.2500 anti-K*0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; 0.2500 K*0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; Enddecay -# +# Decay rho(2S)+ 0.4000 pi+ pi0 PHSP; 0.4000 pi+ pi+ pi- pi0 PHSP; @@ -6672,32 +7393,226 @@ Decay rho(2S)0 0.1500 pi+ pi- pi0 pi0 PHSP; 0.1000 pi0 pi0 pi0 pi0 PHSP; Enddecay +Decay phi(1680) +0.08 pi+ pi- PHSP; +0.05 pi+ pi+ pi- pi- PHSP; +0.10 pi0 pi+ pi- PHSP; +0.10 pi0 pi+ pi+ pi- pi- PHSP; +0.12 pi0 pi0 pi+ pi- PHSP; +0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.05 pi0 pi0 pi0 pi+ pi- PHSP; +0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.04 K+ K- pi+ pi- PHSP; +0.02 K0 K- pi+ PHSP; +0.02 anti-K0 K+ pi- PHSP; +0.02 K0 K- pi+ pi+ pi- PHSP; +0.02 anti-K0 K+ pi- pi- pi+ PHSP; +0.02 K0 K- pi0 pi+ PHSP; +0.02 anti-K0 K+ pi0 pi- PHSP; +0.02 eta pi0 pi+ pi- PHSP; +0.01 eta rho- pi0 pi+ PHSP; +0.01 eta rho+ pi0 pi- PHSP; +Enddecay +Decay rho(3S)0 +0.08 pi+ pi- PHSP; +0.05 pi+ pi+ pi- pi- PHSP; +0.10 pi0 pi+ pi- PHSP; +0.10 pi0 pi+ pi+ pi- pi- PHSP; +0.12 pi0 pi0 pi+ pi- PHSP; +0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.05 pi0 pi0 pi0 pi+ pi- PHSP; +0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.04 K+ K- pi+ pi- PHSP; +0.02 K0 K- pi+ PHSP; +0.02 anti-K0 K+ pi- PHSP; +0.02 K0 K- pi+ pi+ pi- PHSP; +0.02 anti-K0 K+ pi- pi- pi+ PHSP; +0.02 K0 K- pi0 pi+ PHSP; +0.02 anti-K0 K+ pi0 pi- PHSP; +0.02 eta pi0 pi+ pi- PHSP; +0.01 eta rho- pi0 pi+ PHSP; +0.01 eta rho+ pi0 pi- PHSP; +Enddecay +Decay omega(1650) +0.08 pi+ pi- PHSP; +0.05 pi+ pi+ pi- pi- PHSP; +0.10 pi0 pi+ pi- PHSP; +0.10 pi0 pi+ pi+ pi- pi- PHSP; +0.12 pi0 pi0 pi+ pi- PHSP; +0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.05 pi0 pi0 pi0 pi+ pi- PHSP; +0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.04 K+ K- pi+ pi- PHSP; +0.02 K0 K- pi+ PHSP; +0.02 anti-K0 K+ pi- PHSP; +0.02 K0 K- pi+ pi+ pi- PHSP; +0.02 anti-K0 K+ pi- pi- pi+ PHSP; +0.02 K0 K- pi0 pi+ PHSP; +0.02 anti-K0 K+ pi0 pi- PHSP; +0.02 eta pi0 pi+ pi- PHSP; +0.01 eta rho- pi0 pi+ PHSP; +0.01 eta rho+ pi0 pi- PHSP; +Enddecay +#Decay rho(1900) +#0.08 pi+ pi- PHSP; +#0.05 pi+ pi+ pi- pi- PHSP; +#0.10 pi0 pi+ pi- PHSP; +#0.10 pi0 pi+ pi+ pi- pi- PHSP; +#0.12 pi0 pi0 pi+ pi- PHSP; +#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.05 pi0 pi0 pi0 pi+ pi- PHSP; +#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.04 K+ K- pi+ pi- PHSP; +#0.02 K0 K- pi+ PHSP; +#0.02 anti-K0 K+ pi- PHSP; +#0.02 K0 K- pi+ pi+ pi- PHSP; +#0.02 anti-K0 K+ pi- pi- pi+ PHSP; +#0.02 K0 K- pi0 pi+ PHSP; +#0.02 anti-K0 K+ pi0 pi- PHSP; +#0.02 eta pi0 pi+ pi- PHSP; +#0.01 eta rho- pi0 pi+ PHSP; +#0.01 eta rho+ pi0 pi- PHSP; +#Enddecay +Decay omega(2S) +0.08 pi+ pi- PHSP; +0.05 pi+ pi+ pi- pi- PHSP; +0.10 pi0 pi+ pi- PHSP; +0.10 pi0 pi+ pi+ pi- pi- PHSP; +0.12 pi0 pi0 pi+ pi- PHSP; +0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.05 pi0 pi0 pi0 pi+ pi- PHSP; +0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.04 K+ K- pi+ pi- PHSP; +0.02 K0 K- pi+ PHSP; +0.02 anti-K0 K+ pi- PHSP; +0.02 K0 K- pi+ pi+ pi- PHSP; +0.02 anti-K0 K+ pi- pi- pi+ PHSP; +0.02 K0 K- pi0 pi+ PHSP; +0.02 anti-K0 K+ pi0 pi- PHSP; +0.02 eta pi0 pi+ pi- PHSP; +0.01 eta rho- pi0 pi+ PHSP; +0.01 eta rho+ pi0 pi- PHSP; +Enddecay +#Decay rho(2150) +#0.08 pi+ pi- PHSP; +#0.05 pi+ pi+ pi- pi- PHSP; +#0.10 pi0 pi+ pi- PHSP; +#0.10 pi0 pi+ pi+ pi- pi- PHSP; +#0.12 pi0 pi0 pi+ pi- PHSP; +#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.05 pi0 pi0 pi0 pi+ pi- PHSP; +#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.04 K+ K- pi+ pi- PHSP; +#0.02 K0 K- pi+ PHSP; +#0.02 anti-K0 K+ pi- PHSP; +#0.02 K0 K- pi+ pi+ pi- PHSP; +#0.02 anti-K0 K+ pi- pi- pi+ PHSP; +#0.02 K0 K- pi0 pi+ PHSP; +#0.02 anti-K0 K+ pi0 pi- PHSP; +#0.02 eta pi0 pi+ pi- PHSP; +#0.01 eta rho- pi0 pi+ PHSP; +#0.01 eta rho+ pi0 pi- PHSP; +#Enddecay +#Decay omega(1960) +#0.08 pi+ pi- PHSP; +#0.05 pi+ pi+ pi- pi- PHSP; +#0.10 pi0 pi+ pi- PHSP; +#0.10 pi0 pi+ pi+ pi- pi- PHSP; +#0.12 pi0 pi0 pi+ pi- PHSP; +#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.05 pi0 pi0 pi0 pi+ pi- PHSP; +#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.04 K+ K- pi+ pi- PHSP; +#0.02 K0 K- pi+ PHSP; +#0.02 anti-K0 K+ pi- PHSP; +#0.02 K0 K- pi+ pi+ pi- PHSP; +#0.02 anti-K0 K+ pi- pi- pi+ PHSP; +#0.02 K0 K- pi0 pi+ PHSP; +#0.02 anti-K0 K+ pi0 pi- PHSP; +#0.02 eta pi0 pi+ pi- PHSP; +#0.01 eta rho- pi0 pi+ PHSP; +#0.01 eta rho+ pi0 pi- PHSP; +#Enddecay +#Decay rho(1965) +#0.08 pi+ pi- PHSP; +#0.05 pi+ pi+ pi- pi- PHSP; +#0.10 pi0 pi+ pi- PHSP; +#0.10 pi0 pi+ pi+ pi- pi- PHSP; +#0.12 pi0 pi0 pi+ pi- PHSP; +#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.05 pi0 pi0 pi0 pi+ pi- PHSP; +#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.04 K+ K- pi+ pi- PHSP; +#0.02 K0 K- pi+ PHSP; +#0.02 anti-K0 K+ pi- PHSP; +#0.02 K0 K- pi+ pi+ pi- PHSP; +#0.02 anti-K0 K+ pi- pi- pi+ PHSP; +#0.02 K0 K- pi0 pi+ PHSP; +#0.02 anti-K0 K+ pi0 pi- PHSP; +#0.02 eta pi0 pi+ pi- PHSP; +#0.01 eta rho- pi0 pi+ PHSP; +#0.01 eta rho+ pi0 pi- PHSP; +#Enddecay # # -# cc= mesons +# cc= mesons Updated to PDG 2008 # Decay eta_c -0.0013 p+ anti-p- PHSP; -0.0026 phi phi SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; -0.0018 phi K+ K- PHSP; -0.0087 rho0 rho0 SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; -0.0173 rho+ rho- SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; -0.0033 pi+ pi- pi+ pi- PHSP; -0.0006 K+ K- K+ K- PHSP; -0.0054 K+ K- pi+ pi- PHSP; - 0.0327 eta pi+ pi- PHSP; - 0.0163 eta pi0 pi0 PHSP; - 0.0273 eta' pi+ pi- PHSP; - 0.0137 eta' pi0 pi0 PHSP; -0.0095 pi0 K+ K- PHSP; -0.0191 K+ anti-K0 pi- PHSP; -0.0191 K- K0 pi+ PHSP; -0.0095 K0 anti-K0 pi0 PHSP; -0.0043 K*+ K*- SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; -0.0042 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0 ; -0.0072 K*0 K- pi+ PHSP; -0.0072 anti-K*0 K+ pi- PHSP; -0.7889 rndmflav anti-rndmflav PYTHIA 12; +0.001300000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.002700000 phi phi SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; #[Reconstructed PDG2011] +0.002900000 phi K+ K- PHSP; #[Reconstructed PDG2011] +0.0067 rho0 rho0 SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; +0.0133 rho+ rho- SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; +0.012000000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001600000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] +0.015000000 K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.0327 eta pi+ pi- PHSP; +0.0163 eta pi0 pi0 PHSP; +0.0273 eta' pi+ pi- PHSP; +0.0137 eta' pi0 pi0 PHSP; +0.0117 pi0 K+ K- PHSP; +0.0233 K+ anti-K0 pi- PHSP; +0.0233 K- K0 pi+ PHSP; +0.0117 K0 anti-K0 pi0 PHSP; +0.0046 K*+ K*- SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; +0.0046 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0 ; +0.01 K*0 K- pi+ PHSP; +0.01 anti-K*0 K+ pi- PHSP; +# +#March 2009 New Modes +0.01500 K*0 anti-K*0 pi+ pi- PHSP; +0.007100000 K+ K- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.015000000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001040000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.007600000 f_2 f_2 PHSP; #[Reconstructed PDG2011] +0.027000000 f_2 f'_2 PHSP; #[Reconstructed PDG2011] +# +0.682497000 rndmflav anti-rndmflav PYTHIA 42; +0.000063000 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay eta_c(2S) @@ -6705,462 +7620,724 @@ Decay eta_c(2S) 0.019 K- K0 pi+ PHSP; 0.0095 pi0 K+ K- PHSP; 0.0095 K0 anti-K0 pi0 PHSP; - 0.943 rndmflav anti-rndmflav PYTHIA 12; +0.943 rndmflav anti-rndmflav PYTHIA 42; Enddecay # Decay J/psi -0.05933 e+ e- PHOTOS VLL; -0.05933 mu+ mu- PHOTOS VLL; -0.0060 rho0 pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0060 rho+ pi- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0060 rho- pi+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0030 pi+ pi- pi0 PHSP; -0.0036 a_20 rho0 PHSP; -0.0036 a_2+ rho- PHSP; -0.0036 a_2- rho+ PHSP; -0.0085 omega pi+ pi- pi+ pi- PHSP; -0.0043 omega f_2 PHSP; -0.0029 omega pi+ pi- PHSP; -0.0034 K*0 anti-K_2*0 PHSP; -0.0034 anti-K*0 K_2*0 PHSP; -0.0026 omega K*0 anti-K0 PHSP; -0.0026 omega anti-K*0 K0 PHSP; -0.0025 K*+ K- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0025 K*- K+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0021 K*0 anti-K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0021 anti-K*0 K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0019 K_1+ K- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0019 K_1- K+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0034 omega pi0 pi0 PHSP; -0.0015 b_1+ pi- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0015 b_1- pi+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0014 omega pi- K+ K0 PHSP; -0.0014 omega pi- K+ anti-K0 PHSP; -0.0015 omega pi+ K- K0 PHSP; -0.0015 omega pi+ K- anti-K0 PHSP; -0.0023 b_10 pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.00226 eta pi+ pi- pi+ pi- PHSP; -0.0005 phi K*0 anti-K0 PHSP; -0.0005 phi anti-K*0 K0 PHSP; -0.0005 phi K*+ K- PHSP; -0.0005 phi K*- K+ PHSP; -0.0005 omega K0 anti-K0 PHSP; -0.0004 omega K+ K- PHSP; -0.0016 phi pi+ pi- pi+ pi- PHSP; -0.0016 Delta++ anti-p- pi- PHSP; +0.059400000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.059300000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.005600000 rho0 pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.00563 rho+ pi- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.00563 rho- pi+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.004000000 omega pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.00364 a_20 rho0 PHSP; +0.00363 a_2+ rho- PHSP; +0.00363 a_2- rho+ PHSP; +0.008500000 omega pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.004300000 omega f_2 PHSP; #[Reconstructed PDG2011] +0.004300000 omega pi+ pi- PHSP; #[Reconstructed PDG2011] +0.00300 K*0 anti-K_2*0 PHSP; +0.00300 anti-K*0 K_2*0 PHSP; +0.00305 omega K*0 anti-K0 PHSP; +0.00305 omega anti-K*0 K0 PHSP; +0.00256 K*+ K- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.00256 K*- K+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.002195 K*0 anti-K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.002195 anti-K*0 K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.00190 K_1+ K- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.00190 K_1- K+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.003400000 omega pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.001500000 b_1+ pi- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.001500000 b_1- pi+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +# +0.001700000 omega pi- K+ K_S0 PHSP; #[Reconstructed PDG2011] +0.0017 omega pi- K+ K_L0 PHSP; +0.001700000 omega pi+ K- K_S0 PHSP; #[Reconstructed PDG2011] +0.0017 omega pi+ K- K_L0 PHSP; +0.0000 omega pi- K+ K0 PHSP; +0.0000 omega pi- K+ anti-K0 PHSP; +0.0000 omega pi+ K- K0 PHSP; +0.0000 omega pi+ K- anti-K0 PHSP; +# +0.002300000 b_10 pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.002290000 eta pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000545 phi K*0 anti-K0 PHSP; +0.000545 phi anti-K*0 K0 PHSP; +0.000545 phi K*+ K- PHSP; +0.000545 phi K*- K+ PHSP; +0.0008 omega K0 anti-K0 PHSP; +0.0008 omega K+ K- PHSP; +0.001660000 phi pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001600000 Delta++ anti-p- pi- PHSP; #[Reconstructed PDG2011] 0.0016 anti-Delta-- p+ pi+ PHSP; -0.0016 omega eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0003 phi K0 anti-K0 PHSP; -0.0004 phi K+ K- PHSP; -0.0013 omega p+ anti-p- PHSP; +0.001740000 omega eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000915 phi K0 anti-K0 PHSP; +0.000915 phi K+ K- PHSP; +0.001100000 omega p+ anti-p- PHSP; #[Reconstructed PDG2011] 0.0011 Delta++ anti-Delta-- PHSP; -0.0005 Sigma- anti-Sigma+ PHSP; -0.0005 Sigma+ anti-Sigma- PHSP; -0.00072 eta pi+ pi- pi+ pi- pi+ pi- PHSP; -0.00015 pi+ pi- PHSP; +0.000515 Sigma- anti-Sigma+ PHSP; +0.001500000 Sigma+ anti-Sigma- PHSP; #[Reconstructed PDG2011] +0.000720000 eta pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000147000 pi+ pi- PHSP; #[Reconstructed PDG2011] -0.0130 gamma eta_c PHSP; -0.0083 gamma pi+ pi- pi0 pi0 PHSP; +0.017000000 gamma eta_c PHSP; #[Reconstructed PDG2011] +0.008300000 gamma pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] 0.0061 gamma eta pi+ pi- PHSP; -0.0023 gamma rho+ rho- PHSP; -0.0023 gamma rho0 rho0 PHSP; -0.0043 gamma eta' PHSP; -0.0028 gamma pi+ pi- pi+ pi- PHSP; -0.0021 gamma K+ K- pi+ pi- PHSP; -0.0016 gamma omega omega PHSP; -0.0014 gamma f_2 PHSP; +0.00225 gamma rho+ rho- PHSP; +0.00225 gamma rho0 rho0 PHSP; +0.005280000 gamma eta' PHSP; #[Reconstructed PDG2011] +0.001850000 gamma pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002100000 gamma K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001610000 gamma omega omega PHSP; #[Reconstructed PDG2011] +0.001430000 gamma f_2 PHSP; #[Reconstructed PDG2011] 0.0040 gamma K*0 anti-K*0 PHSP; - -0.1305 rndmflav anti-rndmflav PYTHIA 12; -0.56385 g g g PYTHIA 4; -0.03511 gamma g g PYTHIA 4; +# +# March 2009 New Modes +0.001100000 eta pi- K+ K_S0 PHSP; #[Reconstructed PDG2011] +0.0011 eta pi- K+ K_L0 PHSP; +0.001100000 eta pi+ K- K_S0 PHSP; #[Reconstructed PDG2011] +0.0011 eta pi+ K- K_L0 PHSP; +0.0000 eta pi- K+ K0 PHSP; +0.0000 eta pi- K+ anti-K0 PHSP; +0.0000 eta pi+ K- K0 PHSP; +0.0000 eta pi+ K- anti-K0 PHSP; +# +0.055000000 pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.029000000 pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.020700000 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.019400000 pi+ pi- pi0 K+ K- PHSP; #[Reconstructed PDG2011] +0.016100000 pi+ pi- pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.009000000 pi+ pi- pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.006600000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] +0.001840000 pi+ pi- K+ K- eta PHSP; #[Reconstructed PDG2011] +0.002450000 pi0 pi0 K+ K- PHSP; #[Reconstructed PDG2011] +0.005000000 pi+ pi- pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] +0.00102 K+ K- pi0 PHSP; +0.00102 K0 anti-K0 pi0 PHSP; +0.00203 K+ anti-K0 pi- PHSP; +0.00203 K- K0 pi+ PHSP; +0.003550000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +#### Already included above 0.00229 pi+ pi- pi+ pi- eta PHSP; +0.004300000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002170000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.001190000 p+ anti-p- pi0 PHSP; #[Reconstructed PDG2011] +0.006000000 p+ anti-p- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002300000 p+ anti-p- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.002000000 p+ anti-p- eta PHSP; #[Reconstructed PDG2011] +0.002200000 n0 anti-n0 PHSP; #[Reconstructed PDG2011] +0.004000000 n0 anti-n0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001290000 Sigma0 anti-Sigma0 PHSP; #[Reconstructed PDG2011] +0.002120000 p+ anti-n0 pi- PHSP; #[Reconstructed PDG2011] +0.001200000 Xi0 anti-Xi0 PHSP; #[Reconstructed PDG2011] +0.000850000 Xi- anti-Xi+ PHSP; #[Reconstructed PDG2011] +0.001610000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +# +0.084693481 rndmflav anti-rndmflav PYTHIA 42; +0.365559757 g g g PYTHIA 92; +0.032103862 gamma g g PYTHIA 92; 0.0 K0 anti-K0 PHSP; 0.0 K_S0 K_S0 PHSP; 0.0 K_L0 K_L0 PHSP; -0.000146 K_S0 K_L0 PHSP; +0.000146000 K_S0 K_L0 PHSP; #[Reconstructed PDG2011] +0.001900000 K'_1+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001900000 K'_1- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000800000 phi f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000870000 phi pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000560000 phi pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000680000 omega f'_1 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000750000 phi eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000590000 Xi*- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000450000 omega pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000400000 phi eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000320000 phi f_0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000320000 Xi*0 anti-Xi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 phi f_1 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000400000 eta pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000182000 omega eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000140000 omega f_0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000230000 K*0 anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000720000 phi f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000210000 p+ anti-p- eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000045000 p+ anti-p- phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000890000 p+ K- anti-Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000760000 K+ K- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000290000 p+ K- anti-Sigma0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000237000 K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 Lambda0 anti-Lambda0 eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000012000 gamma gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000950000 gamma f_2 f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001104000 gamma eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000610000 gamma f_1 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000450000 gamma f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000400000 gamma phi phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000380000 gamma p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000034900 gamma pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.008800000 gamma e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay psi(2S) -0.00755 e+ e- PHOTOS VLL; -0.00730 mu+ mu- PHOTOS VLL; -0.00280 tau+ tau- PHOTOS VLL; -0.3366 J/psi pi+ pi- VVPIPI; -0.1658 J/psi pi0 pi0 VVPIPI; -0.0324 J/psi eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0013 J/psi pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0922 gamma chi_c0 PHSP; -0.0907 gamma chi_c1 PHSP; -0.0933 gamma chi_c2 PHSP; -0.0032 gamma eta_c PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.00015 gamma eta' PHSP; -0.00021 gamma f_2 PHSP; -0.0035 pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; -0.00015 pi+ pi- pi+ pi- pi+ pi- PHSP; -0.0030 pi+ pi- pi+ pi- pi0 PHSP; -0.000214 b_1+ pi- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.000214 b_1- pi+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.000214 b_10 pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.000164 pi+ pi- pi0 PHSP; -0.000046 K*0 anti-K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000046 anti-K*0 K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000030 rho0 eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000025 omega pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.000020 phi eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.007720000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.007700000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.003000000 tau+ tau- PHOTOS VLL; #[Reconstructed PDG2011] +0.336000000 J/psi pi+ pi- VVPIPI; #[Reconstructed PDG2011] +0.177300000 J/psi pi0 pi0 VVPIPI; #[Reconstructed PDG2011] +0.032800000 J/psi eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.001300000 J/psi pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.096200000 gamma chi_c0 PHSP; #[Reconstructed PDG2011] +0.092000000 gamma chi_c1 PHSP; #[Reconstructed PDG2011] +0.087400000 gamma chi_c2 PHSP; #[Reconstructed PDG2011] +0.003400000 gamma eta_c PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000121000 gamma eta' PHSP; #[Reconstructed PDG2011] +0.000210000 gamma f_2 PHSP; #[Reconstructed PDG2011] +0.003500000 pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000350000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002900000 pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000200000 b_1+ pi- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000200000 b_1- pi+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000240000 b_10 pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000168000 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.0000545 K*0 anti-K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0000545 anti-K*0 K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000022 rho0 eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000021000 omega pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000028000 phi eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] 0.000008 rho+ pi- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; 0.000008 rho- pi+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; 0.000008 rho0 pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; 0.000001 phi pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; 0.000001 omega eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0000065 K*+ K- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.0000065 K*- K+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; -0.00015 omega K+ K- PHSP; -0.0016 K+ K- pi+ pi- PHSP; -0.0008 p+ anti-p- pi+ pi- PHSP; -0.00014 p+ anti-p- pi0 PHSP; -0.00021 p+ anti-p- PHSP; -0.0010 K_1+ K- PHSP; -0.0010 K_1- K+ PHSP; -0.00042 rho0 pi+ pi- PHSP; -0.00018 Lambda0 anti-Lambda0 PHSP; -0.00013 Delta++ anti-Delta-- PHSP; -0.00012 Sigma0 anti-Sigma0 PHSP; -0.00011 Sigma*+ anti-Sigma*- PHSP; -0.00009 Xi- anti-Xi+ PHSP; -0.00008 pi+ pi- PHSP; -0.00010 K+ K- PHSP; -0.00006 phi K- K+ PHSP; -0.00015 phi pi- pi+ PHSP; -0.00022 pi+ pi- K_S0 K_S0 PHSP; +0.0000085 K*+ K- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0000085 K*- K+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000185000 omega K+ K- PHSP; #[Reconstructed PDG2011] +0.000340000 K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000600000 p+ anti-p- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000133000 p+ anti-p- pi0 PHSP; #[Reconstructed PDG2011] +0.000276000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.000500000 K_1+ K- PHSP; #[Reconstructed PDG2011] +0.000500000 K_1- K+ PHSP; #[Reconstructed PDG2011] +0.000220000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000280000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.000128000 Delta++ anti-Delta-- PHSP; #[Reconstructed PDG2011] +0.000220000 Sigma0 anti-Sigma0 PHSP; #[Reconstructed PDG2011] +0.00026 Sigma*+ anti-Sigma*- PHSP; +0.000180000 Xi- anti-Xi+ PHSP; #[Reconstructed PDG2011] +0.000080000 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000063000 K+ K- PHSP; #[Reconstructed PDG2011] +0.000070000 phi K- K+ PHSP; #[Reconstructed PDG2011] +0.000117000 phi pi- pi+ PHSP; #[Reconstructed PDG2011] +0.000170000 pi+ pi- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] 0.0008 h_c pi0 PHSP; 0.0 K0 anti-K0 PHSP; 0.0 K_S0 K_S0 PHSP; 0.0 K_L0 K_L0 PHSP; -0.000052 K_S0 K_L0 PHSP; -0.0166 rndmflav anti-rndmflav PYTHIA 12; -0.125878 g g g PYTHIA 4; -0.008938 gamma g g PYTHIA 4; +0.000054000 K_S0 K_L0 PHSP; #[Reconstructed PDG2011] +# +# March 2009 New Modes +0.004800000 pi+ pi- pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.001200000 pi+ pi- pi+ pi- eta PHSP; #[Reconstructed PDG2011] +0.001300000 K+ K- pi+ pi- eta PHSP; #[Reconstructed PDG2011] +0.001000000 K+ K- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.001900000 K+ K- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001260000 K+ K- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +# +0.013568632 rndmflav anti-rndmflav PYTHIA 42; +0.103318590 g g g PYTHIA 92; +0.007344778 gamma g g PYTHIA 92; +0.000100000 Lambda0 anti-p- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000180000 Lambda0 anti-p- K+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 Lambda0 anti-Lambda0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 Sigma+ anti-Sigma- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 Xi0 anti-Xi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000060000 eta p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000069000 omega p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000320000 p+ anti-n0 pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000950000 eta pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000450000 eta' pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 omega pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000220000 omega f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000220000 rho0 K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000190000 K*0 anti-K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000050000 rho0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 pi+ pi- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000730000 p+ anti-p- pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000060000 K+ K- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000110000 K+ K- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000031000 phi eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000032000 omega eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000027000 p+ anti-p- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000044000 phi f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000870000 gamma eta pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000400000 gamma pi+ pi- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000190000 gamma K+ K- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000029000 gamma p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000028000 gamma pi+ pi- p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay Decay psi(4040) -0.000014 e+ e- PHOTOS VLL; -0.000014 mu+ mu- PHOTOS VLL; -0.000005 tau+ tau- VLL; -0.0021 D0 anti-D0 VSS; -0.0009 D+ D- VSS; -0.1679 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1679 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1815 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1815 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.1597 D*0 anti-D*0 PHSP; -0.0982 D*+ D*- PHSP; -0.0000 D0 anti-D0 pi0 PHSP; -0.0000 D+ D- pi0 PHSP; -0.0000 D0 D- pi+ PHSP; -0.0000 anti-D0 D+ pi- PHSP; -0.0000 D*+ D- pi0 PHSP; -0.0000 D*- D+ pi0 PHSP; -0.0000 D*+ anti-D0 pi- PHSP; -0.0000 D*- D0 pi+ PHSP; -0.0000 D+ anti-D*0 pi- PHSP; -0.0000 D- D*0 pi+ PHSP; -0.0403 D_s+ D_s- VSS; +0.000010700 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.000014000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.000005000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.002099938 D0 anti-D0 VSS; #[Reconstructed PDG2011] +0.000899973 D+ D- VSS; #[Reconstructed PDG2011] +0.167895013 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.167895013 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.181494610 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.181494610 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.159695257 D*0 anti-D*0 PHSP; #[Reconstructed PDG2011] +0.098197084 D*+ D*- PHSP; #[Reconstructed PDG2011] +0.000000000 D0 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D0 D- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-D0 D+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D+ pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ anti-D0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 D+ anti-D*0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D- D*0 pi+ PHSP; #[Reconstructed PDG2011] +0.040298803 D_s+ D_s- VSS; #[Reconstructed PDG2011] Enddecay # Decay psi(4160) -0.00001 e+ e- PHOTOS VLL; -0.00001 mu+ mu- PHOTOS VLL; -0.000006 tau+ tau- VLL; -0.0397 D0 anti-D0 VSS; -0.0387 D+ D- VSS; -0.0520 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0520 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0515 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0515 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.29863 D*0 anti-D*0 PHSP; -0.3082 D*+ D*- PHSP; -0.0000 D0 anti-D0 pi0 PHSP; -0.0000 D+ D- pi0 PHSP; -0.0000 D0 D- pi+ PHSP; -0.0000 anti-D0 D+ pi- PHSP; -0.0000 D*+ D- pi0 PHSP; -0.0000 D*- D+ pi0 PHSP; -0.0000 D*+ anti-D0 pi- PHSP; -0.0000 D*- D0 pi+ PHSP; -0.0000 D+ anti-D*0 pi- PHSP; -0.0000 D- D*0 pi+ PHSP; -0.0100 D_s+ D_s- VSS; -0.0489 D_s*+ D_s- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0489 D_s*- D_s+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0000 D_s+ D_s- pi0 PHSP; +0.000008100 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.000009999 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.000006000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.039697852 D0 anti-D0 VSS; #[Reconstructed PDG2011] +0.038697906 D+ D- VSS; #[Reconstructed PDG2011] +0.051997187 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.051997187 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.051497214 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.051497214 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.298613845 D*0 anti-D*0 PHSP; #[Reconstructed PDG2011] +0.308183327 D*+ D*- PHSP; #[Reconstructed PDG2011] +0.000000000 D0 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D0 D- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-D0 D+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D+ pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ anti-D0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 D+ anti-D*0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D- D*0 pi+ PHSP; #[Reconstructed PDG2011] +0.009999459 D_s+ D_s- VSS; #[Reconstructed PDG2011] +0.048897355 D_s*+ D_s- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.048897355 D_s*- D_s+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000000000 D_s+ D_s- pi0 PHSP; #[Reconstructed PDG2011] Enddecay # Decay psi(4415) -0.000011 e+ e- PHOTOS VLL; -0.000011 mu+ mu- PHOTOS VLL; -0.000007 tau+ tau- VLL; -0.0244 D0 anti-D0 VSS; -0.0219 D+ D- VSS; -0.0320 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0320 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0343 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0343 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.3451 D*0 anti-D*0 PHSP; -0.3539 D*+ D*- PHSP; -0.0000 D0 anti-D0 pi0 PHSP; -0.0000 D+ D- pi0 PHSP; -0.0000 D0 D- pi+ PHSP; -0.0000 anti-D0 D+ pi- PHSP; -0.0000 D*+ D- pi0 PHSP; -0.0000 D*- D+ pi0 PHSP; -0.0000 D*+ anti-D0 pi- PHSP; -0.0000 D*- D0 pi+ PHSP; -0.0000 D+ anti-D*0 pi- PHSP; -0.0000 D- D*0 pi+ PHSP; -0.0118 D_s+ D_s- VSS; -0.0420 D_s*+ D_s- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0420 D_s*- D_s+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; -0.0263 D_s*+ D_s*- PHSP; -0.0000 D_s+ D_s- pi0 PHSP; -0.0000 D_s*+ D_s- pi0 PHSP; -0.0000 D_s+ D_s*- pi0 PHSP; -0.0000 D_s+ D- anti-K0 PHSP; -0.0000 D_s- D+ anti-K0 PHSP; -0.0000 D0 D_s- K+ PHSP; -0.0000 anti-D0 D_s+ K- PHSP; +0.000009400 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.000011000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.000007000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.024399331 D0 anti-D0 VSS; #[Reconstructed PDG2011] +0.021899400 D+ D- VSS; #[Reconstructed PDG2011] +0.031999123 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.031999123 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.034299060 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.034299060 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.345090544 D*0 anti-D*0 PHSP; #[Reconstructed PDG2011] +0.353890303 D*+ D*- PHSP; #[Reconstructed PDG2011] +0.000000000 D0 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D0 D- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-D0 D+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D+ pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ anti-D0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 D+ anti-D*0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D- D*0 pi+ PHSP; #[Reconstructed PDG2011] +0.011799677 D_s+ D_s- VSS; #[Reconstructed PDG2011] +0.041998849 D_s*+ D_s- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.041998849 D_s*- D_s+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.026299279 D_s*+ D_s*- PHSP; #[Reconstructed PDG2011] +0.000000000 D_s+ D_s- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D_s*+ D_s- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D_s+ D_s*- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D_s+ D- anti-K0 PHSP; #[Reconstructed PDG2011] +0.000000000 D_s- D+ anti-K0 PHSP; #[Reconstructed PDG2011] +0.000000000 D0 D_s- K+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-D0 D_s+ K- PHSP; #[Reconstructed PDG2011] Enddecay # Decay chi_c0 -0.020 gamma J/psi PHSP; -0.00022 p+ anti-p- PHSP; -0.00026 gamma gamma PHSP; -0.0049 pi+ pi- PHSP; -0.0134 pi+ pi- pi+ pi- PHSP; -0.0021 K+ K- K+ K- PHSP; -0.0098 pi+ pi- pi+ pi- pi+ pi- PHSP; -0.0100 rho0 pi+ pi- PHSP; +0.011600000 gamma J/psi PHSP; #[Reconstructed PDG2011] +0.000228000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.000222000 gamma gamma PHSP; #[Reconstructed PDG2011] +0.00243 pi0 pi0 PHSP; +0.00487 pi+ pi- PHSP; +0.013800000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002810000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] +0.012000000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.008900000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] 0.0100 rho+ pi- pi0 PHSP; 0.0100 rho- pi+ pi0 PHSP; -0.0060 K+ K- PHSP; -0.0010 phi phi PHSP; -0.0016 anti-K*0 K*0 PHSP; -0.0032 anti-K*0 K+ pi- PHSP; -0.0032 K*0 K- pi+ PHSP; +0.00057 K+ K- PHSP; +0.000920000 phi phi PHSP; #[Reconstructed PDG2011] +0.001700000 anti-K*0 K*0 PHSP; #[Reconstructed PDG2011] +0.0036 anti-K*0 K+ pi- PHSP; +0.0036 K*0 K- pi+ PHSP; 0.0043 K*+ anti-K0 pi- PHSP; 0.0043 K*- K0 pi+ PHSP; -0.0153 pi+ pi- K+ K- PHSP; -0.0022 pi+ pi- p+ anti-p- PHSP; -0.0021 eta eta PHSP; -0.0005 Lambda0 anti-Lambda0 PHSP; -0.0028 f_0 f_0 PHSP; +0.018000000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] +0.002100000 pi+ pi- p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.002680000 eta eta PHSP; #[Reconstructed PDG2011] +0.000330000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.00086 f_0 f_0 PHSP; 0.0 K0 anti-K0 PHSP; -0.0021 K_S0 K_S0 PHSP; -0.0021 K_L0 K_L0 PHSP; +0.003160000 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.00282 K_L0 K_L0 PHSP; 0.0 K_S0 K_L0 PHSP; -0.86862 rndmflav anti-rndmflav PYTHIA 12; +# +# March 2009 New Modes +0.002030000 eta' eta' PHSP; #[Reconstructed PDG2011] +0.002200000 omega omega PHSP; #[Reconstructed PDG2011] +0.00325 K_1+ K- PHSP; +0.00325 K_1- K+ PHSP; +0.000990000 K+ K- phi PHSP; #[Reconstructed PDG2011] +0.001140000 p+ anti-n0 pi- PHSP; #[Reconstructed PDG2011] +0.000525 K+ anti-p- Lambda0 PHSP; +0.000525 K- p+ Lambda0 PHSP; +0.005800000 K_S0 K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.00590 K_L0 K_L0 pi+ pi- PHSP; +0.00000 K0 anti-K0 pi+ pi- PHSP; +0.001400000 K+ K- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.00150 K+ K- K_L0 K_L0 PHSP; +0.00000 K+ K- K0 anti-K0 PHSP; +# +0.799360000 rndmflav anti-rndmflav PYTHIA 42; +0.034000000 pi+ pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005700000 K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.003100000 K+ K- eta pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000570000 p+ anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000370000 p+ anti-p- eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001050000 pi0 pi0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000420000 Sigma0 anti-Sigma0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 Sigma+ anti-Sigma- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000320000 Xi0 anti-Xi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000490000 Xi- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay chi_c1 -0.38 J/psi gamma VVP 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; -0.0062 pi+ pi- pi+ pi- PHSP; -0.000072 p+ anti-p- PHSP; -0.0058 pi+ pi- pi+ pi- pi+ pi- PHSP; -0.0038 pi+ pi- K+ K- PHSP; -0.0020 rho0 pi+ pi- PHSP; +0.344000000 J/psi gamma VVP 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.007600000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000073000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.005800000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.004500000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] +0.003900000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] 0.0020 rho+ pi- pi0 PHSP; 0.0020 rho- pi+ pi0 PHSP; -0.0002 anti-K*0 K+ pi- PHSP; -0.0016 anti-K*0 K*0 PHSP; -0.0002 K*0 K- pi+ PHSP; -0.0009 K*+ anti-K0 pi- PHSP; -0.0009 K*- K0 pi+ PHSP; -0.0005 pi+ pi- p+ anti-p- PHSP; -0.0008 pi+ pi- K_S0 K_S0 PHSP; -0.0003 K+ K- K_S0 K_S0 PHSP; -0.0003 Lambda0 anti-Lambda0 PHSP; -0.0025 K+ anti-K0 pi- PHSP; -0.0025 K- K0 pi+ PHSP; -0.0004 K+ K- K+ K- PHSP; -0.0 K0 anti-K0 PHSP; -0.00001 K_S0 K_S0 PHSP; -0.00001 K_L0 K_L0 PHSP; -0.0 K_S0 K_L0 PHSP; -0.587008 rndmflav anti-rndmflav PYTHIA 12; +0.0016 anti-K*0 K+ pi- PHSP; +0.0016 K*0 K- pi+ PHSP; +0.001500000 anti-K*0 K*0 PHSP; #[Reconstructed PDG2011] +0.0009 K*+ anti-K0 pi- PHSP; +0.0009 K*- K0 pi+ PHSP; +0.000500000 pi+ pi- p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.000720000 pi+ pi- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.0003 K+ K- K_S0 K_S0 PHSP; +0.000118000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.00385 K+ anti-K0 pi- PHSP; +0.00385 K- K0 pi+ PHSP; +0.000560000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] +0.00000 K0 anti-K0 PHSP; +0.00001 K_S0 K_S0 PHSP; +0.00001 K_L0 K_L0 PHSP; +0.00000 K_S0 K_L0 PHSP; +# +# March 2009 New Modes +0.002200000 pi+ pi- eta PHSP; #[Reconstructed PDG2011] +0.002400000 pi+ pi- eta' PHSP; #[Reconstructed PDG2011] +0.001910000 K+ K- pi0 PHSP; #[Reconstructed PDG2011] +# +0.587724 rndmflav anti-rndmflav PYTHIA 42; +0.008700000 pi+ pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001180000 K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001200000 K+ K- eta pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000330000 K+ K- eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002800000 f_2 eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000430000 K+ K- phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000120000 p+ anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000320000 K+ anti-p- Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000084000 Xi- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000229000 gamma rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000078000 gamma omega PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay chi_c2 -0.199 gamma J/psi PHSP; -0.00025 gamma gamma PHSP; -0.000068 p+ anti-p- PHSP; -0.0018 pi+ pi- TSS; -0.0102 pi+ pi- pi+ pi- PHSP; -0.0012 K+ K- K+ K- PHSP; -0.0107 pi+ pi- pi+ pi- pi+ pi- PHSP; -0.0103 pi+ pi- K+ K- PHSP; -0.0046 rho0 pi+ pi- PHSP; +0.195000000 gamma J/psi PHSP; #[Reconstructed PDG2011] +0.000256000 gamma gamma PHSP; #[Reconstructed PDG2011] +0.000072000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.00072 pi0 pi0 TSS; +0.00145 pi+ pi- TSS; +0.011100000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001780000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] +0.008600000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.009200000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] +0.004000000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] 0.0046 rho+ pi- pi0 PHSP; 0.0046 rho- pi+ pi0 PHSP; -0.0009 K+ K- TSS; - -0.0003 pi+ pi- K_S0 K_S0 PHSP; +0.001090000 K+ K- TSS; #[Reconstructed PDG2011] +0.002400000 pi+ pi- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] 0.0003 K+ K- K_S0 K_S0 PHSP; -0.0024 phi phi PHSP; -0.0015 anti-K*0 K+ pi- PHSP; -0.0015 K*0 K- pi+ PHSP; -0.0047 anti-K*0 K*0 PHSP; +0.001480000 phi phi PHSP; #[Reconstructed PDG2011] +0.00115 anti-K*0 K+ pi- PHSP; +0.00115 K*0 K- pi+ PHSP; +0.002500000 anti-K*0 K*0 PHSP; #[Reconstructed PDG2011] 0.0016 K*+ anti-K0 pi- PHSP; 0.0016 K*- K0 pi+ PHSP; -0.0017 pi+ pi- p+ anti-p- PHSP; -0.0003 Lambda0 anti-Lambda0 PHSP; -0.0 K0 anti-K0 PHSP; -0.00089 K_S0 K_S0 PHSP; -0.00089 K_L0 K_L0 PHSP; -0.0 K_S0 K_L0 PHSP; -0.734102 rndmflav anti-rndmflav PYTHIA 12; +0.001320000 pi+ pi- p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.000186000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.00000 K0 anti-K0 PHSP; +0.000580000 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.00065 K_L0 K_L0 PHSP; +0.00000 K_S0 K_L0 PHSP; +# +# March 2009 New Modes +0.001900000 omega omega PHSP; #[Reconstructed PDG2011] +0.0007 anti-K0 K+ pi- PHSP; +0.0007 K0 K- pi+ PHSP; +0.001550000 K+ K- phi PHSP; #[Reconstructed PDG2011] +0.001100000 p+ anti-n0 pi- PHSP; #[Reconstructed PDG2011] +# +0.709461000 rndmflav anti-rndmflav PYTHIA 42; +0.020000000 pi+ pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002200000 K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001400000 K+ K- eta pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000520000 pi+ pi- eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000540000 pi+ pi- eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000540000 eta eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000330000 K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000470000 p+ anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000200000 p+ anti-p- eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000850000 pi0 pi0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000155000 Xi- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay psi(3770) -0.4243 D+ D- VSS; -0.5723 D0 anti-D0 VSS; -0.0034 J/psi pi+ pi- PHSP; +0.410000000 D+ D- VSS; #[Reconstructed PDG2011] +0.520000000 D0 anti-D0 VSS; #[Reconstructed PDG2011] +0.001930000 J/psi pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000800000 J/psi pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.0073 gamma chi_c0 PHSP; +0.0029 gamma chi_c1 PHSP; +0.055850300 rndmflav anti-rndmflav PYTHIA 42; +0.000900000 J/psi eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009700 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 phi eta PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay X_1(3872) +1.000 rndmflav anti-rndmflav PYTHIA 42; Enddecay # # -# bb= Mesons +# bb= Mesons Updated to PDG 2008 # Decay eta_b -1.000 rndmflav anti-rndmflav PYTHIA 12; +1.000 rndmflav anti-rndmflav PYTHIA 42; Enddecay # Decay Upsilon -0.0256 e+ e- PHOTOS VLL; -0.0256 mu+ mu- PHOTOS VLL; -0.0256 tau+ tau- VLL; -0.01500 d anti-d PYTHIA 32; -0.04500 u anti-u PYTHIA 32; -0.01500 s anti-s PYTHIA 32; -0.04500 c anti-c PYTHIA 32; -0.77420 g g g PYTHIA 4; -0.02900 gamma g g PYTHIA 4; +0.024800000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.024800000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.026000000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.014959973 d anti-d PYTHIA 91; +0.044879919 u anti-u PYTHIA 91; +0.014959973 s anti-s PYTHIA 91; +0.044879919 c anti-c PYTHIA 91; +0.774328202 g g g PYTHIA 92; +0.028922614 gamma g g PYTHIA 92; +0.000063000 gamma pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000017000 gamma pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011400 gamma K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000290000 gamma pi+ pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000250000 gamma pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000250000 gamma pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000240000 gamma pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000150000 gamma pi+ pi- p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000040000 gamma pi+ pi+ pi- pi- p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 gamma K+ K+ K- K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000037000 gamma f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000101000 gamma f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay Upsilon(2S) -0.0150 e+ e- PHOTOS VLL; -0.0150 mu+ mu- PHOTOS VLL; -0.0150 tau+ tau- VLL; -0.1850 Upsilon pi+ pi- PHSP; -0.0900 Upsilon pi0 pi0 PHSP; +0.019100000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.019300000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.020000000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.181000000 Upsilon pi+ pi- PHSP; #[Reconstructed PDG2011] +0.086000000 Upsilon pi0 pi0 PHSP; #[Reconstructed PDG2011] # V-> gamma S Partial wave (L,S)=(0,1) -0.0430 gamma chi_b0 HELAMP 1. 0. +1. 0.; +0.038000000 gamma chi_b0 HELAMP 1. 0. +1. 0.; #[Reconstructed PDG2011] # V-> gamma V Partial wave (L,S)=(0,1) -0.0660 gamma chi_b1 HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; +0.069000000 gamma chi_b1 HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] # V-> gamma T Partial wave (L,S)=(0,1) -0.0670 gamma chi_b2 HELAMP 2.4494897 0. 1.7320508 0. 1. 0. - 1. 0. 1.7320508 0. 2.4494897 0.; -0.00500 d anti-d PYTHIA 32; -0.02000 u anti-u PYTHIA 32; -0.00500 s anti-s PYTHIA 32; -0.02000 c anti-c PYTHIA 32; -0.43800 g g g PYTHIA 4; -0.01600 gamma g g PYTHIA 4; +0.071500000 gamma chi_b2 HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] +0.00500 d anti-d PYTHIA 91; +0.02000 u anti-u PYTHIA 91; +0.00500 s anti-s PYTHIA 91; +0.02000 c anti-c PYTHIA 91; +0.42160 g g g PYTHIA 92; +0.01600 gamma g g PYTHIA 92; +0.000210000 Upsilon eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000390000 gamma eta_b PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay Upsilon(3S) 0.0181 e+ e- PHOTOS VLL; -0.0181 mu+ mu- PHOTOS VLL; -0.0150 tau+ tau- VLL; -0.0448 Upsilon pi+ pi- PHSP; -0.0206 Upsilon pi0 pi0 PHSP; -0.0280 Upsilon(2S) pi+ pi- PHSP; -0.0200 Upsilon(2S) pi0 pi0 PHSP; -0.0500 Upsilon(2S) gamma gamma PHSP; +0.021800000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.022900000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.044000000 Upsilon pi+ pi- PHSP; #[Reconstructed PDG2011] +0.022000000 Upsilon pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.024500000 Upsilon(2S) pi+ pi- PHSP; #[Reconstructed PDG2011] +0.018500000 Upsilon(2S) pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.050000000 Upsilon(2S) gamma gamma PHSP; #[Reconstructed PDG2011] # V-> gamma S Partial wave (L,S)=(0,1) -0.0540 gamma chi_b0(2P) HELAMP 1. 0. 1. 0.; +0.059000000 gamma chi_b0(2P) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] # V-> gamma V Partial wave (L,S)=(0,1) -0.1140 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; +0.126000000 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] # V-> gamma T Partial wave (L,S)=(0,1) -0.1130 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. - 1. 0. 1.7320508 0. 2.4494897 0.; -0.00700 d anti-d PYTHIA 32; -0.02800 u anti-u PYTHIA 32; -0.00700 s anti-s PYTHIA 32; -0.02800 c anti-c PYTHIA 32; -0.41940 g g g PYTHIA 4; -0.01500 gamma g g PYTHIA 4; +0.131000000 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] +0.00700 d anti-d PYTHIA 91; +0.02800 u anti-u PYTHIA 91; +0.00700 s anti-s PYTHIA 91; +0.02800 c anti-c PYTHIA 91; +0.37780 g g g PYTHIA 92; +0.01000 gamma g g PYTHIA 92; +0.003000000 gamma chi_b0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000510000 gamma eta_b PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # + +Decay Upsilon(5S) +0.5 B+ B- PHSP; +0.481487200 g g g PYTHIA 92; +0.000002800 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005300000 Upsilon pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.007800000 Upsilon(2S) pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004800000 Upsilon(3S) pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000610000 Upsilon K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + Decay chi_b0 # S-> gamma V Partial wave (L,S)=(0,0) 0.0500 gamma Upsilon HELAMP 1. 0. 1. 0.; -0.9500 rndmflav anti-rndmflav PYTHIA 12; +0.949650000 rndmflav anti-rndmflav PYTHIA 42; +0.000110000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000240000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay chi_b1 # V-> gamma V Partial wave (L,S)=(0,1) -0.3500 gamma Upsilon HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -0.6500 g g PYTHIA 32; +0.350000000 gamma Upsilon HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +0.643080000 g g PYTHIA 91; +0.000200000 pi+ pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000800000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000150000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000350000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000860000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000190000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001700000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000750000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001400000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay chi_b2 -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. -0.2200 gamma Upsilon PHSP; +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +0.220000000 gamma Upsilon PHSP; #[Reconstructed PDG2011] #0.2200 gamma Upsilon HELAMP 1. 0. 1.7320508 0. 2.4494897 0. # 2.4494897 0. 1.7320508 0. 1. 0.; -0.7800 g g PYTHIA 32; +0.775550000 g g PYTHIA 91; +0.000080000 pi+ pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000350000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000110000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000210000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000390000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000070000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001000000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000360000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000080000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay chi_b0(2P) # S-> gamma V Partial wave (L,S)=(0,0) -0.0090 gamma Upsilon HELAMP 1. 0. 1. 0.; -0.0460 gamma Upsilon(2S) HELAMP 1. 0. 1. 0.; +0.009000000 gamma Upsilon HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] +0.046000000 gamma Upsilon(2S) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] # S-> gamma V Partial wave (L,S)=(0,0) 0.00150 gamma Upsilon_1(1D) HELAMP 1. 0. 1. 0.; -0.94350 g g PYTHIA 32; +0.94350 g g PYTHIA 91; Enddecay # Decay chi_b1(2P) # V-> gamma V Partial wave (L,S)=(0,1) -0.0850 gamma Upsilon HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -0.2100 gamma Upsilon(2S) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; +0.085000000 gamma Upsilon HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +0.210000000 gamma Upsilon(2S) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] # V-> gamma V Partial wave (L,S)=(0,1) 0.0097 gamma Upsilon_1(1D) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; # V-> gamma T Partial wave (L,S)=(0,1) -0.0236 gamma Upsilon_2(1D) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. - 1. 0. 1.7320508 0. 2.4494897 0.; -0.6717 g g PYTHIA 32; +0.0236 gamma Upsilon_2(1D) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; +0.648650000 g g PYTHIA 91; +0.016300000 omega Upsilon PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 pi+ pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000590000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000100000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000550000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001000000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000120000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001200000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000200000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000610000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000170000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001900000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay chi_b2(2P) -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. -0.0710 gamma Upsilon PHSP; +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +0.071000000 gamma Upsilon PHSP; #[Reconstructed PDG2011] #0.0710 gamma Upsilon HELAMP 1. 0. 1.7320508 0. 2.4494897 0. -# 2.4494897 0. 1.7320508 0. 1. 0.; -0.1620 gamma Upsilon(2S) PHSP; +# 2.4494897 0. 1.7320508 0. 1. 0.; +0.162000000 gamma Upsilon(2S) PHSP; #[Reconstructed PDG2011] #0.1620 gamma Upsilon(2S) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. # 2.4494897 0. 1.7320508 0. 1. 0.; -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. 0.00023 gamma Upsilon_1(1D) PHSP; #0.00023 gamma Upsilon_1(1D) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. # 2.4494897 0. 1.7320508 0. 1. 0.; # T -> gamma T Partial wave (L,S)=(0,2) 0.00290 gamma Upsilon_2(1D) PHSP; #0.00290 gamma Upsilon_2(1D) HELAMP -1. 0. -1.2247449 0. -# -1.2247449 0. -1. 0. +# -1.2247449 0. -1. 0. # 1. 0. 1.2247449 0. # 1.2247449 0. 1. 0.; -# spin 3 not yet in HELAMP. -0.01420 gamma Upsilon_3(1D) PYTHIA 0; +# spin 3 not yet in HELAMP. +0.01420 gamma Upsilon_3(1D) PYTHIA 0; # T-> gamma 3 Partial wave (L,S)=(0,2) -#0.01420 gamma Upsilon_3(1D) HELAMP 3.8729833 0. 3.1622777 0. +#0.01420 gamma Upsilon_3(1D) HELAMP 3.8729833 0. 3.1622777 0. # 2.4494897 0. 1.7320508. 0. 1. 0. # 1. 0. 1.7320508 0. 2.4494897 0. # 3.1622777 0. 3.8729833 0.; -0.74967 g g PYTHIA 32; +0.734240000 g g PYTHIA 91; +0.011000000 omega Upsilon PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000390000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000090000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000240000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000470000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000090000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001200000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000140000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000420000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000090000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001300000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay h_b -1.00000 g g PYTHIA 32; +1.00000 g g PYTHIA 91; Enddecay Decay chi_b0(3P) @@ -7169,7 +8346,7 @@ Decay chi_b0(3P) 0.01700 gamma Upsilon(3S) HELAMP 1. 0. 1. 0.; # S-> gamma V Partial wave (L,S)=(0,0) 0.00400 gamma Upsilon_1(2D) HELAMP 1. 0. 1. 0.; -0.97900 g g PYTHIA 32; +0.97900 g g PYTHIA 91; Enddecay Decay chi_b1(3P) @@ -7177,16 +8354,15 @@ Decay chi_b1(3P) # V-> gamma V Partial wave (L,S)=(0,1) 0.15000 gamma Upsilon(3S) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; # V-> gamma T Partial wave (L,S)=(0,1) -0.03100 gamma Upsilon_2(2D) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. - 1. 0. 1.7320508 0. 2.4494897 0.; +0.03100 gamma Upsilon_2(2D) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; # V-> gamma V Partial wave (L,S)=(0,1) 0.01300 gamma Upsilon_1(2D) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; -0.80600 g g PYTHIA 32; +0.80600 g g PYTHIA 91; Enddecay Decay chi_b2(3P) #see Kwong and Rosner, PRD 38,279 (1988) -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. 0.08700 gamma Upsilon(3S) PHSP; 0.00000 gamma Upsilon(2S) PHSP; 0.00000 gamma Upsilon PHSP; @@ -7199,21 +8375,21 @@ Decay chi_b2(3P) # spin 3 not yet in HELAMP 0.02200 Upsilon_3(2D) gamma PHSP; # T -> gamma 3 Partial wave (L,S)=(0,2) -#0.02200 gamma Upsilon_3(2D) HELAMP 3.8729833 0. 3.1622777 0. +#0.02200 gamma Upsilon_3(2D) HELAMP 3.8729833 0. 3.1622777 0. # 2.4494897 0. 1.7320508. 0. 1. 0. # 1. 0. 1.7320508 0. 2.4494897 0. # 3.1622777 0. 3.8729833 0.; # T -> gamma T Partial wave (L,S)=(0,2) 0.00400 gamma Upsilon_2(2D) PHSP; #0.00400 gamma Upsilon_2(2D) HELAMP -1. 0. -1.2247449 0. -# -1.2247449 0. -1. 0. +# -1.2247449 0. -1. 0. # 1. 0. 1.2247449 0. # 1.2247449 0. 1. 0.; # T-> gamma V Partial wave (L,S)=(0,2) 0.00040 gamma Upsilon_1(2D) PHSP; #0.00040 gamma Upsilon_1(2D) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. # 2.4494897 0. 1.7320508 0. 1. 0.; -0.88660 g g PYTHIA 32; +0.88660 g g PYTHIA 91; Enddecay Decay Upsilon_1(1D) @@ -7225,9 +8401,8 @@ Decay Upsilon_1(1D) # V-> gamma V Partial wave (L,S)=(0,1) 0.31800 gamma chi_b1 HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; # V-> gamma T Partial wave (L,S)=(0,1) -0.02600 gamma chi_b2 HELAMP 2.4494897 0. 1.7320508 0. 1. 0. - 1. 0. 1.7320508 0. 2.4494897 0.; -0.05190 g g g PYTHIA 4; +0.02600 gamma chi_b2 HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; +0.05190 g g g PYTHIA 92; Enddecay Decay Upsilon_2(1D) @@ -7237,14 +8412,14 @@ Decay Upsilon_2(1D) # T-> gamma T Partial wave (L,S)=(0,2) 0.20300 gamma chi_b2 PHSP; #0.20300 gamma chi_b2 HELAMP -1. 0. -1.2247449 0. -# -1.2247449 0. -1. 0. +# -1.2247449 0. -1. 0. # 1. 0. 1.2247449 0. # 1.2247449 0. 1. 0.; -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. 0.78500 gamma chi_b1 PHSP; #0.78500 gamma chi_b1 HELAMP 1. 0. 1.7320508 0. 2.4494897 0. # 2.4494897 0. 1.7320508 0. 1. 0.; -0.00990 g g g PYTHIA 4; +0.00990 g g g PYTHIA 92; Enddecay Decay Upsilon_3(1D) @@ -7252,7 +8427,7 @@ Decay Upsilon_3(1D) 0.00200 Upsilon pi+ pi- PHSP; 0.00100 Upsilon pi0 pi0 PHSP; 0.95400 chi_b2 gamma PHSP; -0.04300 g g g PYTHIA 4; +0.04300 g g g PYTHIA 92; Enddecay Decay Upsilon_1(2D) @@ -7266,9 +8441,8 @@ Decay Upsilon_1(2D) # V-> gamma V Partial wave (L,S)=(0,1) 0.26000 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; # V-> gamma T Partial wave (L,S)=(0,1) -0.01400 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. - 1. 0. 1.7320508 0. 2.4494897 0.; -0.21600 g g g PYTHIA 4; +0.01400 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; +0.21600 g g g PYTHIA 92; Enddecay Decay Upsilon_2(2D) @@ -7280,14 +8454,14 @@ Decay Upsilon_2(2D) # T-> gamma T Partial wave (L,S)=(0,2) 0.04000 gamma chi_b2(2P) PHSP; #0.04000 gamma chi_b2(2P) HELAMP -1. 0. -1.2247449 0. -# -1.2247449 0. -1. 0. +# -1.2247449 0. -1. 0. # 1. 0. 1.2247449 0. # 1.2247449 0. 1. 0.; -# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. 0.13000 gamma chi_b1(2P) PHSP; #0.13000 gamma chi_b1(2P) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. # 2.4494897 0. 1.7320508 0. 1. 0.; -0.83000 g g g PYTHIA 4; +0.83000 g g g PYTHIA 92; Enddecay Decay Upsilon_3(2D) @@ -7297,116 +8471,142 @@ Decay Upsilon_3(2D) 0.00000 Upsilon(2S) pi+ pi- PHSP; 0.00000 Upsilon(2S) pi0 pi0 PHSP; 0.72000 chi_b2(2P) gamma PHSP; -0.28000 g g g PYTHIA 4; +0.28000 g g g PYTHIA 92; Enddecay Decay h_b(2P) -1.00000 g g PYTHIA 32; +1.00000 g g PYTHIA 91; Enddecay Decay h_b(3P) -1.00000 g g PYTHIA 32; +1.00000 g g PYTHIA 91; Enddecay Decay eta_b2(1D) -1.00000 g g PYTHIA 32; +1.00000 g g PYTHIA 91; Enddecay Decay eta_b2(2D) -1.00000 g g PYTHIA 32; +1.00000 g g PYTHIA 91; Enddecay # # Charm Baryons # Decay Lambda_c+ -0.01800 e+ nu_e Lambda0 PYTHIA 42; -0.00500 e+ nu_e Sigma0 PYTHIA 42; -0.00500 e+ nu_e Sigma*0 PYTHIA 42; -0.00300 e+ nu_e n0 PYTHIA 42; -0.00200 e+ nu_e Delta0 PYTHIA 42; -0.00600 e+ nu_e p+ pi- PYTHIA 42; -0.00600 e+ nu_e n0 pi0 PYTHIA 42; -0.01800 mu+ nu_mu Lambda0 PYTHIA 42; -0.00500 mu+ nu_mu Sigma0 PYTHIA 42; -0.00500 mu+ nu_mu Sigma*0 PYTHIA 42; -0.00300 mu+ nu_mu n0 PYTHIA 42; -0.00200 mu+ nu_mu Delta0 PYTHIA 42; -0.00600 mu+ nu_mu p+ pi- PYTHIA 42; -0.00600 mu+ nu_mu n0 pi0 PYTHIA 42; -0.00660 Delta++ K- PYTHIA 0; -0.02500 Delta++ K*- PYTHIA 0; -0.02300 p+ anti-K0 PYTHIA 0; -0.04000 p+ anti-K*0 PYTHIA 0; -0.00500 Delta+ anti-K0 PYTHIA 0; -0.00500 Delta+ anti-K*0 PYTHIA 0; -0.00580 Lambda0 pi+ PYTHIA 0; -0.00500 Lambda0 rho+ PYTHIA 0; -0.00550 Sigma0 pi+ PYTHIA 0; -0.00400 Sigma0 rho+ PYTHIA 0; -0.00400 Sigma*0 pi+ PYTHIA 0; -0.00400 Sigma*0 rho+ PYTHIA 0; -0.00400 Sigma+ pi0 PYTHIA 0; -0.00200 Sigma+ eta PYTHIA 0; -0.00200 Sigma+ eta' PYTHIA 0; -0.00400 Sigma+ rho0 PYTHIA 0; -0.00400 Sigma+ omega PYTHIA 0; -0.00300 Sigma*+ pi0 PYTHIA 0; -0.00200 Sigma*+ eta PYTHIA 0; -0.00300 Sigma*+ rho0 PYTHIA 0; -0.00300 Sigma*+ omega PYTHIA 0; -0.00200 Xi0 K+ PYTHIA 0; -0.00200 Xi0 K*+ PYTHIA 0; -0.00200 Xi*0 K+ PYTHIA 0; -0.00100 Delta++ pi- PYTHIA 0; -0.00100 Delta++ rho- PYTHIA 0; -0.00200 p+ pi0 PYTHIA 0; -0.00100 p+ eta PYTHIA 0; -0.00100 p+ eta' PYTHIA 0; -0.00200 p+ rho0 PYTHIA 0; -0.00200 p+ omega PYTHIA 0; -0.00130 p+ phi PYTHIA 0; -0.00180 p+ f_0 PYTHIA 0; -0.00100 Delta+ pi0 PYTHIA 0; -0.00100 Delta+ eta PYTHIA 0; -0.00100 Delta+ eta' PYTHIA 0; -0.00100 Delta+ rho0 PYTHIA 0; -0.00100 Delta+ omega PYTHIA 0; -0.00300 n0 pi+ PYTHIA 0; -0.00300 n0 rho+ PYTHIA 0; -0.00300 Delta0 pi+ PYTHIA 0; -0.00300 Delta0 rho+ PYTHIA 0; -0.00500 Lambda0 K+ PYTHIA 0; -0.00500 Lambda0 K*+ PYTHIA 0; -0.00200 Sigma0 K+ PYTHIA 0; -0.00200 Sigma0 K*+ PYTHIA 0; -0.00100 Sigma*0 K+ PYTHIA 0; -0.00100 Sigma*0 K*+ PYTHIA 0; -0.00200 Sigma+ K0 PYTHIA 0; -0.00200 Sigma+ K*0 PYTHIA 0; -0.00100 Sigma*+ K0 PYTHIA 0; -0.00100 Sigma*+ K*0 PYTHIA 0; -0.13000 u anti-d d su_0 PYTHIA 13; -0.05700 u anti-d d su_1 PYTHIA 13; -0.03500 u anti-s d su_0 PYTHIA 13; -0.03500 u anti-d d ud_0 PYTHIA 13; -0.09500 s uu_1 PYTHIA 13; -0.14000 u su_0 PYTHIA 13; -0.14000 u su_1 PYTHIA 13; -0.03000 d uu_1 PYTHIA 13; -0.01500 u ud_0 PYTHIA 13; -0.01500 u ud_1 PYTHIA 13; +0.021000000 e+ nu_e Lambda0 PYTHIA 22; +0.00500 e+ nu_e Sigma0 PYTHIA 22; +0.00500 e+ nu_e Sigma*0 PYTHIA 22; +0.00300 e+ nu_e n0 PYTHIA 22; +0.00200 e+ nu_e Delta0 PYTHIA 22; +0.00600 e+ nu_e p+ pi- PYTHIA 22; +0.00600 e+ nu_e n0 pi0 PYTHIA 22; +0.020000000 mu+ nu_mu Lambda0 PYTHIA 22; +0.00500 mu+ nu_mu Sigma0 PYTHIA 22; +0.00500 mu+ nu_mu Sigma*0 PYTHIA 22; +0.00300 mu+ nu_mu n0 PYTHIA 22; +0.00200 mu+ nu_mu Delta0 PYTHIA 22; +0.00600 mu+ nu_mu p+ pi- PYTHIA 22; +0.00600 mu+ nu_mu n0 pi0 PYTHIA 22; +0.008600000 Delta++ K- PYTHIA 0; +0.02500 Delta++ K*- PYTHIA 0; +0.023000000 p+ anti-K0 PYTHIA 0; +0.016000000 p+ anti-K*0 PYTHIA 0; +0.00500 Delta+ anti-K0 PYTHIA 0; +0.00500 Delta+ anti-K*0 PYTHIA 0; +0.010700000 Lambda0 pi+ PYTHIA 0; +0.00500 Lambda0 rho+ PYTHIA 0; +0.010500000 Sigma0 pi+ PYTHIA 0; +0.00400 Sigma0 rho+ PYTHIA 0; +0.00400 Sigma*0 pi+ PYTHIA 0; +0.00400 Sigma*0 rho+ PYTHIA 0; +0.010000000 Sigma+ pi0 PYTHIA 0; +0.005500000 Sigma+ eta PYTHIA 0; +0.00200 Sigma+ eta' PYTHIA 0; +0.00400 Sigma+ rho0 PYTHIA 0; +0.027000000 Sigma+ omega PYTHIA 0; +0.00300 Sigma*+ pi0 PYTHIA 0; +0.008500000 Sigma*+ eta PYTHIA 0; +0.00300 Sigma*+ rho0 PYTHIA 0; +0.00300 Sigma*+ omega PYTHIA 0; +0.003900000 Xi0 K+ PYTHIA 0; +0.00200 Xi0 K*+ PYTHIA 0; +0.002600000 Xi*0 K+ PYTHIA 0; +0.00100 Delta++ pi- PYTHIA 0; +0.00100 Delta++ rho- PYTHIA 0; +0.00200 p+ pi0 PYTHIA 0; +0.00100 p+ eta PYTHIA 0; +0.00100 p+ eta' PYTHIA 0; +0.00200 p+ rho0 PYTHIA 0; +0.00200 p+ omega PYTHIA 0; +0.000820000 p+ phi PYTHIA 0; +0.002800000 p+ f_0 PYTHIA 0; +0.00100 Delta+ pi0 PYTHIA 0; +0.00100 Delta+ eta PYTHIA 0; +0.00100 Delta+ eta' PYTHIA 0; +0.00100 Delta+ rho0 PYTHIA 0; +0.00100 Delta+ omega PYTHIA 0; +0.00300 n0 pi+ PYTHIA 0; +0.00300 n0 rho+ PYTHIA 0; +0.00300 Delta0 pi+ PYTHIA 0; +0.00300 Delta0 rho+ PYTHIA 0; +0.00500 Lambda0 K+ PYTHIA 0; +0.00500 Lambda0 K*+ PYTHIA 0; +0.00200 Sigma0 K+ PYTHIA 0; +0.00200 Sigma0 K*+ PYTHIA 0; +0.00100 Sigma*0 K+ PYTHIA 0; +0.00100 Sigma*0 K*+ PYTHIA 0; +0.00200 Sigma+ K0 PYTHIA 0; +0.002800000 Sigma+ K*0 PYTHIA 0; +0.00100 Sigma*+ K0 PYTHIA 0; +0.00100 Sigma*+ K*0 PYTHIA 0; +0.064094509 u anti-d d su_0 PYTHIA 43; +0.028102977 u anti-d d su_1 PYTHIA 43; +0.017256214 u anti-s d su_0 PYTHIA 43; +0.017256214 u anti-d d ud_0 PYTHIA 43; +0.046838295 s uu_1 PYTHIA 43; +0.069024855 u su_0 PYTHIA 43; +0.069024855 u su_1 PYTHIA 43; +0.014791040 d uu_1 PYTHIA 43; +0.007395520 u ud_0 PYTHIA 43; +0.007395520 u ud_1 PYTHIA 43; +0.025400000 p+ K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.033000000 p+ anti-K0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.012000000 p+ anti-K0 eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.026000000 p+ anti-K0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.023000000 p+ K- pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.011000000 p+ K*- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001100000 p+ K- pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.008000000 p+ K- pi+ pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000700000 p+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 p+ pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 p+ K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.036000000 Lambda0 pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.015000000 Lambda0 pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.011000000 Lambda0 pi+ rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 Lambda0 pi+ pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.009500000 Lambda0 pi+ eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.012000000 Lambda0 pi+ omega PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004700000 Lambda0 K+ anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.036000000 Sigma+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.017000000 Sigma- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.018000000 Sigma0 pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.008300000 Sigma0 pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 Sigma+ K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.003100000 Sigma+ phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002500000 Xi- K+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 Sigma+ K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay CDecay anti-Lambda_c- # Decay Xi_c0 -1.000 PYTHIA 84; +1.000 PYTHIA 42; Enddecay Decay anti-Xi_c0 -1.000 PYTHIA 84; +1.000 PYTHIA 42; Enddecay # Decay c-hadron -0.08000 e+ nu_e s specflav PYTHIA 42; -0.08000 mu+ nu_mu s specflav PYTHIA 42; -0.76000 u anti-d s specflav PYTHIA 11; -0.08000 u anti-s s specflav PYTHIA 11; +0.08000 e+ nu_e s specflav PYTHIA 22; +0.08000 mu+ nu_mu s specflav PYTHIA 22; +0.76000 u anti-d s specflav PYTHIA 42; +0.08000 u anti-s s specflav PYTHIA 42; Enddecay CDecay anti-c-hadron # @@ -7425,10 +8625,42 @@ Decay anti-Sigma_c- Enddecay # Decay Xi_c+ -1.000 PYTHIA 84; +0.079535513 PYTHIA 42; +0.079535513 Sigma*+ anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.025689971 Lambda0 K- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.010339617 Sigma+ K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.064423765 Sigma+ anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.023065299 Sigma0 K- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.043744532 Xi0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.079535513 Xi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.186113099 Xi0 pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.138391792 Xi0 pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.182931679 Xi0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005567486 Omega- K+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.007158196 p+ K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.009544262 p+ anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.038177046 Sigma+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.014316392 Sigma- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.011930327 Sigma+ K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay Decay anti-Xi_c- -1.000 PYTHIA 84; +0.079535513 PYTHIA 42; +0.079535513 anti-Sigma*- K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.025689971 anti-Lambda0 K+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.010339617 anti-Sigma- K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.064423765 anti-Sigma- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.023065299 anti-Sigma0 K+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.043744532 anti-Xi0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.079535513 anti-Xi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.186113099 anti-Xi0 pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.138391792 anti-Xi0 pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.182931679 anti-Xi0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005567486 anti-Omega+ K- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.007158196 anti-p- K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.009544262 anti-p- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.038177046 anti-Sigma- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.014316392 anti-Sigma+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.011930327 anti-Sigma- K- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay Sigma_c++ @@ -7457,10 +8689,12 @@ Decay anti-Xi'_c0 Enddecay # # Light Baryons +# Lambda0 updated Feb 2009 +Decay Lambda0 +Enddecay # -# -# Lambda0 is decayed in GEANT -# +Decay anti-Lambda0 +Enddecay # Decay Lambda(1405)0 0.3333 Sigma+ pi- PHSP; @@ -7726,9 +8960,10 @@ Decay anti-Sigma(1775)0 0.055 anti-Sigma*- pi+ PHSP; 0.22 anti-Lambda(1520)0 pi0 PHSP; Enddecay -# -# Sigma+ is decayed in GEANT -# +Decay Sigma+ +Enddecay +Decay anti-Sigma- +Enddecay # Decay Delta+ 0.6630 p+ pi0 PHSP; @@ -7775,16 +9010,18 @@ Decay anti-Delta+ 1.0000 anti-n0 pi+ PHSP; Enddecay # -# -# Sigma- is decayed in GEANT -# -# +Decay Sigma- +Enddecay +Decay anti-Sigma+ +Enddecay # Decay Sigma0 -1.0000 gamma Lambda0 PHSP; +0.995024876 gamma Lambda0 PHSP; #[Reconstructed PDG2011] +0.004975124 Lambda0 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay Decay anti-Sigma0 -1.0000 gamma anti-Lambda0 PHSP; +0.995024876 gamma anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.004975124 anti-Lambda0 e- e+ PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay Sigma*- @@ -7820,10 +9057,15 @@ Decay anti-Sigma*0 0.0600 anti-Sigma+ pi- PHSP; Enddecay # +Decay Xi0 +Enddecay +Decay anti-Xi0 +Enddecay # -# Xi0/Xi- is decayed in GEANT -# -# +Decay Xi- +Enddecay +Decay anti-Xi+ +Enddecay # Decay Xi*- 0.6670 Xi0 pi- PHSP; @@ -7834,10 +9076,10 @@ Decay anti-Xi*+ 0.3330 anti-Xi+ pi0 PHSP; Enddecay # -# -# -# Omega- is decayed in GEANT -# +Decay Omega- +Enddecay +Decay anti-Omega+ +Enddecay # # Decay Sigma_c*0 @@ -7868,7 +9110,7 @@ Enddecay CDecay anti-Xi_c*- # Decay Omega_c0 -1.00000 PYTHIA 84; +1.00000 PYTHIA 42; Enddecay # CDecay anti-Omega_c0 @@ -7882,12 +9124,12 @@ CDecay anti-Omega_c*0 Decay Xu0 # X_u^0 -> u anti-u # -1.0 u anti-u PYTHIA 11; +1.0 u anti-u PYTHIA 42; Enddecay Decay Xu+ # X_u^+ -> u anti-d # -1.0 u anti-d PYTHIA 11; +1.0 u anti-d PYTHIA 42; Enddecay CDecay Xu- @@ -7896,32 +9138,32 @@ CDecay Xu- Decay h_c 0.01 J/psi pi0 PHSP; 0.5 eta_c gamma PHSP; -0.49 rndmflav anti-rndmflav PYTHIA 12; +0.49 rndmflav anti-rndmflav PYTHIA 42; Enddecay -# 12/08/03 RJT Update b-baryon decays... +# 12/08/03 RJT Update b-baryon decays... Decay Lambda_b0 - # SemiLeptonic Decays (inclusive BR = 7.7 +/- 1.8%) - 0.05460 Lambda_c+ e- anti-nu_e PHSP; - 0.01280 Lambda_c(2593)+ e- anti-nu_e PHSP; - 0.00960 Lambda_c(2625)+ e- anti-nu_e PHSP; +# SemiLeptonic Decays (inclusive BR = 7.7 +/- 1.8%) +0.050000000 Lambda_c+ e- anti-nu_e PHSP; #[Reconstructed PDG2011] +0.006300000 Lambda_c(2593)+ e- anti-nu_e PHSP; #[Reconstructed PDG2011] +0.011000000 Lambda_c(2625)+ e- anti-nu_e PHSP; #[Reconstructed PDG2011] 0.00000 Sigma_c0 pi+ e- anti-nu_e PHSP; 0.00000 Sigma_c+ pi0 e- anti-nu_e PHSP; 0.00000 Sigma_c++ pi- e- anti-nu_e PHSP; 0.00000 Sigma_c*0 pi+ e- anti-nu_e PHSP; 0.00000 Sigma_c*+ pi0 e- anti-nu_e PHSP; 0.00000 Sigma_c*++ pi- e- anti-nu_e PHSP; - # - 0.05460 Lambda_c+ mu- anti-nu_mu PHSP; - 0.01280 Lambda_c(2593)+ mu- anti-nu_mu PHSP; - 0.00960 Lambda_c(2625)+ mu- anti-nu_mu PHSP; +# +0.050000000 Lambda_c+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011] +0.006300000 Lambda_c(2593)+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011] +0.011000000 Lambda_c(2625)+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011] 0.00000 Sigma_c0 pi+ mu- anti-nu_mu PHSP; 0.00000 Sigma_c+ pi0 mu- anti-nu_mu PHSP; 0.00000 Sigma_c++ pi- mu- anti-nu_mu PHSP; 0.00000 Sigma_c*0 pi+ mu- anti-nu_mu PHSP; 0.00000 Sigma_c*+ pi0 mu- anti-nu_mu PHSP; 0.00000 Sigma_c*++ pi- mu- anti-nu_mu PHSP; - # +# 0.01720 Lambda_c+ tau- anti-nu_tau PHSP; 0.00430 Lambda_c(2593)+ tau- anti-nu_tau PHSP; 0.00320 Lambda_c(2625)+ tau- anti-nu_tau PHSP; @@ -7931,8 +9173,8 @@ Decay Lambda_b0 0.00000 Sigma_c*0 pi+ tau- anti-nu_tau PHSP; 0.00000 Sigma_c*+ pi0 tau- anti-nu_tau PHSP; 0.00000 Sigma_c*++ pi- tau- anti-nu_tau PHSP; - # Hadronic Decays with Lambda_c+ - 0.04000 Lambda_c+ pi- PHSP; +# Hadronic Decays with Lambda_c+ +0.008800000 Lambda_c+ pi- PHSP; #[Reconstructed PDG2011] 0.02200 Lambda_c+ pi- pi+ pi- PHSP; 0.00055 Lambda_c+ K- PHSP; 0.02200 Lambda_c+ D_s- PHSP; @@ -7943,18 +9185,18 @@ Decay Lambda_b0 # Addition PR LHCb 09 Apr 2004, Lambda_b -> Lambda D0b 0.00080 Lambda0 anti-D0 PHSP; # Addition PR LHCb 04/07/04 - 0.0000185 p+ K- PHSP; - 0.0000048 p+ pi- PHSP; +0.000006000 p+ K- PHSP; #[Reconstructed PDG2011] +0.000003800 p+ pi- PHSP; #[Reconstructed PDG2011] # Addition PR LHCb 09 Apr 2004, Lambda_b -> Lambda rho0 and -> Lambda phi 0.0000050 Lambda0 rho0 PHSP; 0.0000200 Lambda0 phi PHSP; - # +# 0.00047 Lambda0 J/psi PHSP; 0.00038 Lambda0 psi(2S) PHSP; 0.00100 Lambda0 eta_c PHSP; 0.00080 n0 D0 PHSP; - # - # Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate +# +# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate 0.00060 Sigma_c+ pi- PHSP; 0.00060 Sigma_c0 pi0 PHSP; 0.00040 Sigma_c0 eta PHSP; @@ -7962,23 +9204,25 @@ Decay Lambda_b0 0.00030 Xi_c0 K0 PHSP; 0.00050 Xi'_c0 K0 PHSP; # PR LHCb 27 Apr 2004, addition of Pythia decays - 0.44111 anti-u d c ud_0 PYTHIA 48; - 0.09100 anti-u c d ud_0 PYTHIA 13; - 0.08000 anti-c s c ud_0 PYTHIA 13; - 0.01200 anti-u d u ud_0 PYTHIA 42; - 0.01200 anti-c s u ud_0 PYTHIA 42; +0.398544837 anti-u d c ud_0 PYTHIA 23; +0.082218903 anti-u c d ud_0 PYTHIA 43; +0.072280354 anti-c s c ud_0 PYTHIA 43; +0.010842053 anti-u d u ud_0 PYTHIA 22; +0.010842053 anti-c s u ud_0 PYTHIA 22; # PR LHCb 2 Dec 2004, add Lambda gamma decay mode 0.000065 Lambda0 gamma HELAMP 1. 0. 0. 0. ; 0.000059 Lambda(1520)0 gamma PHSP ; 0.000056 Lambda(1670)0 gamma HELAMP 1. 0. 0. 0. ; 0.000057 Lambda(1600)0 gamma HELAMP 1. 0. 0. 0. ; +0.056000000 Lambda_c+ pi+ pi- mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +0.056000000 Lambda_c+ pi+ pi- e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay Decay anti-Lambda_b0 # SemiLeptonic Decays (inclusive BR = 7.7 +/- 1.8%) - 0.05460 anti-Lambda_c- e+ nu_e PHSP; - 0.01280 anti-Lambda_c(2593)- e+ nu_e PHSP; - 0.00960 anti-Lambda_c(2625)- e+ nu_e PHSP; +0.050000000 anti-Lambda_c- e+ nu_e PHSP; #[Reconstructed PDG2011] +0.006300000 anti-Lambda_c(2593)- e+ nu_e PHSP; #[Reconstructed PDG2011] +0.011000000 anti-Lambda_c(2625)- e+ nu_e PHSP; #[Reconstructed PDG2011] 0.00000 anti-Sigma_c0 pi- e+ nu_e PHSP; 0.00000 anti-Sigma_c- pi0 e+ nu_e PHSP; 0.00000 anti-Sigma_c-- pi+ e+ nu_e PHSP; @@ -7986,9 +9230,9 @@ Decay anti-Lambda_b0 0.00000 anti-Sigma_c*- pi0 e+ nu_e PHSP; 0.00000 anti-Sigma_c*-- pi+ e+ nu_e PHSP; # - 0.05460 anti-Lambda_c- mu+ nu_mu PHSP; - 0.01280 anti-Lambda_c(2593)- mu+ nu_mu PHSP; - 0.00960 anti-Lambda_c(2625)- mu+ nu_mu PHSP; +0.050000000 anti-Lambda_c- mu+ nu_mu PHSP; #[Reconstructed PDG2011] +0.006300000 anti-Lambda_c(2593)- mu+ nu_mu PHSP; #[Reconstructed PDG2011] +0.011000000 anti-Lambda_c(2625)- mu+ nu_mu PHSP; #[Reconstructed PDG2011] 0.00000 anti-Sigma_c0 pi- mu+ nu_mu PHSP; 0.00000 anti-Sigma_c- pi0 mu+ nu_mu PHSP; 0.00000 anti-Sigma_c-- pi+ mu+ nu_mu PHSP; @@ -8006,7 +9250,7 @@ Decay anti-Lambda_b0 0.00000 anti-Sigma_c*- pi0 tau+ nu_tau PHSP; 0.00000 anti-Sigma_c*-- pi+ tau+ nu_tau PHSP; # Hadronic Decays with anti-Lambda_c- - 0.04000 anti-Lambda_c- pi+ PHSP; +0.008800000 anti-Lambda_c- pi+ PHSP; #[Reconstructed PDG2011] 0.02200 anti-Lambda_c- pi+ pi+ pi- PHSP; 0.00055 anti-Lambda_c- K+ PHSP; 0.02200 anti-Lambda_c- D_s+ PHSP; @@ -8017,8 +9261,8 @@ Decay anti-Lambda_b0 # Addition LHCb PR 09 Apr 2004 Lambda_b -> Lambda D0b 0.00080 anti-Lambda0 D0 PHSP; # PR LHCb 04/07/04 Addition - 0.0000185 anti-p- K+ PHSP; - 0.0000048 anti-p- pi+ PHSP; +0.000006000 anti-p- K+ PHSP; #[Reconstructed PDG2011] +0.000003800 anti-p- pi+ PHSP; #[Reconstructed PDG2011] # Addition PR LHCb 09 Apr 2004, Lambda_b -> Lambda rho0 and -> Lambda phi 0.0000050 anti-Lambda0 rho0 PHSP; 0.0000200 anti-Lambda0 phi PHSP; @@ -8036,16 +9280,18 @@ Decay anti-Lambda_b0 0.00030 anti-Xi_c0 anti-K0 PHSP; 0.00050 anti-Xi'_c0 anti-K0 PHSP; # PR LHCb 27 Apr 2004, addition of Pythia decays - 0.44111 u anti-d anti-c anti-ud_0 PYTHIA 48; - 0.09100 u anti-c anti-d anti-ud_0 PYTHIA 13; - 0.08000 c anti-s anti-c anti-ud_0 PYTHIA 13; - 0.01200 u anti-d anti-u anti-ud_0 PYTHIA 42; - 0.01200 c anti-s anti-u anti-ud_0 PYTHIA 42; +0.398544837 u anti-d anti-c anti-ud_0 PYTHIA 23; +0.082218903 u anti-c anti-d anti-ud_0 PYTHIA 43; +0.072280354 c anti-s anti-c anti-ud_0 PYTHIA 43; +0.010842053 u anti-d anti-u anti-ud_0 PYTHIA 22; +0.010842053 c anti-s anti-u anti-ud_0 PYTHIA 22; # PR LHCb 2 Dec 2004 add Lambda gamma 0.000065 anti-Lambda0 gamma HELAMP 0. 0. 1. 0. ; 0.000059 anti-Lambda(1520)0 gamma PHSP ; 0.000056 anti-Lambda(1670)0 gamma HELAMP 0. 0. 1. 0. ; 0.000057 anti-Lambda(1600)0 gamma HELAMP 0. 0. 1. 0. ; +0.056000000 anti-Lambda_c- pi- pi+ mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +0.056000000 anti-Lambda_c- pi- pi+ e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay Decay Xi_b- @@ -8066,18 +9312,18 @@ Decay Xi_b- 0.00020 Omega_c0 K- PHSP; # # aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.38757 d anti-u d cs_0 PYTHIA 13; -0.16995 d anti-u d cs_1 PYTHIA 13; -0.06335 s anti-u d cs_0 PYTHIA 13; -0.00568 d anti-u s cs_1 PYTHIA 13; -0.00797 d anti-u s cs_0 PYTHIA 13; -0.06148 s anti-c d cs_0 PYTHIA 13; -0.06918 d anti-u d cd_0 PYTHIA 13; -0.03999 s anti-c d cd_0 PYTHIA 13; -0.00865 d anti-u d su_0 PYTHIA 13; -0.00500 s anti-c d su_0 PYTHIA 13; -Enddecay - +0.38757 d anti-u d cs_0 PYTHIA 43; +0.16995 d anti-u d cs_1 PYTHIA 43; +0.06335 s anti-u d cs_0 PYTHIA 43; +0.00568 d anti-u s cs_1 PYTHIA 43; +0.00797 d anti-u s cs_0 PYTHIA 43; +0.06148 s anti-c d cs_0 PYTHIA 43; +0.06918 d anti-u d cd_0 PYTHIA 43; +0.03999 s anti-c d cd_0 PYTHIA 43; +0.00865 d anti-u d su_0 PYTHIA 43; +0.00500 s anti-c d su_0 PYTHIA 43; +Enddecay + Decay anti-Xi_b+ # SemiLeptonic Decays 0.05460 anti-Xi_c0 e+ nu_e PHSP; @@ -8095,16 +9341,16 @@ Decay anti-Xi_b+ 0.00020 anti-Sigma_c0 K+ PHSP; 0.00020 anti-Omega_c0 K+ PHSP; # aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.38757 u anti-d anti-d anti-cs_0 PYTHIA 13; -0.16995 u anti-d anti-d anti-cs_1 PYTHIA 13; -0.06335 u anti-s anti-d anti-cs_0 PYTHIA 13; -0.00568 u anti-d anti-s anti-cs_1 PYTHIA 13; -0.00797 u anti-d anti-s anti-cs_0 PYTHIA 13; -0.06148 c anti-s anti-d anti-cs_0 PYTHIA 13; -0.06918 u anti-d anti-d anti-cd_0 PYTHIA 13; -0.03999 c anti-s anti-d anti-cd_0 PYTHIA 13; -0.00865 u anti-d anti-d anti-su_0 PYTHIA 13; -0.00500 c anti-s anti-d anti-su_0 PYTHIA 13; +0.38757 u anti-d anti-d anti-cs_0 PYTHIA 43; +0.16995 u anti-d anti-d anti-cs_1 PYTHIA 43; +0.06335 u anti-s anti-d anti-cs_0 PYTHIA 43; +0.00568 u anti-d anti-s anti-cs_1 PYTHIA 43; +0.00797 u anti-d anti-s anti-cs_0 PYTHIA 43; +0.06148 c anti-s anti-d anti-cs_0 PYTHIA 43; +0.06918 u anti-d anti-d anti-cd_0 PYTHIA 43; +0.03999 c anti-s anti-d anti-cd_0 PYTHIA 43; +0.00865 u anti-d anti-d anti-su_0 PYTHIA 43; +0.00500 c anti-s anti-d anti-su_0 PYTHIA 43; Enddecay Decay Xi_b0 @@ -8134,11 +9380,11 @@ Decay Xi_b0 0.00030 Xi'_c0 eta' PHSP; 0.00040 Sigma_c+ K- PHSP; # aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.58591 d anti-u s cu_0 PYTHIA 13; -0.01363 s anti-u s cu_1 PYTHIA 13; -0.09539 s anti-u s cc_1 PYTHIA 13; -0.10900 s anti-u d cu_1 PYTHIA 13; -0.01363 d anti-u d uu_1 PYTHIA 13; +0.58591 d anti-u s cu_0 PYTHIA 43; +0.01363 s anti-u s cu_1 PYTHIA 43; +0.09539 s anti-u s cc_1 PYTHIA 43; +0.10900 s anti-u d cu_1 PYTHIA 43; +0.01363 d anti-u d uu_1 PYTHIA 43; Enddecay Decay anti-Xi_b0 @@ -8167,11 +9413,11 @@ Decay anti-Xi_b0 0.00030 anti-Xi'_c0 eta' PHSP; 0.00040 anti-Sigma_c- K+ PHSP; # aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.58591 u anti-d anti-s anti-cu_0 PYTHIA 13; -0.01363 u anti-s anti-s anti-cu_1 PYTHIA 13; -0.09539 u anti-s anti-s anti-cc_1 PYTHIA 13; -0.10900 u anti-s anti-d anti-cu_1 PYTHIA 13; -0.01363 u anti-d anti-d anti-uu_1 PYTHIA 13; +0.58591 u anti-d anti-s anti-cu_0 PYTHIA 43; +0.01363 u anti-s anti-s anti-cu_1 PYTHIA 43; +0.09539 u anti-s anti-s anti-cc_1 PYTHIA 43; +0.10900 u anti-s anti-d anti-cu_1 PYTHIA 43; +0.01363 u anti-d anti-d anti-uu_1 PYTHIA 43; Enddecay # added by D.Litvintsev 12/8/03: @@ -8190,9 +9436,9 @@ Decay Omega_b- 0.00047 Omega- J/psi PHSP; 0.00038 Omega- psi(2S) PHSP; # aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.68192 d anti-u s cs_0 PYTHIA 13; -0.10910 d anti-u d cs_0 PYTHIA 13; -0.02728 d anti-u s su_0 PYTHIA 13; +0.68192 d anti-u s cs_0 PYTHIA 43; +0.10910 d anti-u d cs_0 PYTHIA 43; +0.02728 d anti-u s su_0 PYTHIA 43; Enddecay Decay anti-Omega_b+ @@ -8210,9 +9456,9 @@ Decay anti-Omega_b+ 0.00047 anti-Omega+ J/psi PHSP; 0.00038 anti-Omega+ psi(2S) PHSP; # aaa 10/19/05 Do not if this is correct but filling out with inclusives -0.68192 u anti-d anti-s anti-cs_0 PYTHIA 13; -0.10910 u anti-d anti-d anti-cs_0 PYTHIA 13; -0.02728 u anti-d anti-s anti-su_0 PYTHIA 13; +0.68192 u anti-d anti-s anti-cs_0 PYTHIA 43; +0.10910 u anti-d anti-d anti-cs_0 PYTHIA 43; +0.02728 u anti-d anti-s anti-su_0 PYTHIA 43; Enddecay @@ -8220,14 +9466,14 @@ Decay Sigma_b+ 1.00000 Lambda_b0 pi+ PHSP; Enddecay Decay anti-Sigma_b- - 1.00000 anti-Lambda_b0 pi- PHSP; + 1.00000 anti-Lambda_b0 pi- PHSP; Enddecay Decay Sigma_b- 1.00000 Lambda_b0 pi- PHSP; Enddecay Decay anti-Sigma_b+ - 1.00000 anti-Lambda_b0 pi+ PHSP; + 1.00000 anti-Lambda_b0 pi+ PHSP; Enddecay Decay Sigma_b0 @@ -8243,9 +9489,9 @@ Enddecay # Decay B_c- - 0.01600 tau- anti-nu_tau SLN; - # - # SemiLeptonic Decays +0.01600 tau- anti-nu_tau SLN; +# +# SemiLeptonic Decays 0.01900 J/psi e- anti-nu_e PHOTOS PHSP; 0.00094 psi(2S) e- anti-nu_e PHOTOS PHSP; 0.00750 eta_c e- anti-nu_e PHOTOS PHSP; @@ -8267,94 +9513,94 @@ Decay B_c- 0.05060 anti-B_s*0 mu- anti-nu_mu PHOTOS PHSP; 0.00340 anti-B0 mu- anti-nu_mu PHOTOS PHSP; 0.00580 anti-B*0 mu- anti-nu_mu PHOTOS PHSP; - # - 0.00480 J/psi tau- anti-nu_tau PHSP; - 0.00008 psi(2S) tau- anti-nu_tau PHSP; - 0.00230 eta_c tau- anti-nu_tau PHSP; - 0.000016 eta_c(2S) tau- anti-nu_tau PHSP; - 0.00002 anti-D0 tau- anti-nu_tau PHSP; - 0.00008 anti-D*0 tau- anti-nu_tau PHSP; - # - # - # Hadronic Decays - 0.00200 eta_c pi- PHSP; - 0.00420 rho- eta_c SVS; - 0.00013 eta_c K- PHSP; - 0.00020 K*- eta_c SVS; - 0.00130 J/psi pi- SVS; - 0.00400 J/psi rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.00011 J/psi K- SVS; - 0.00022 J/psi K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - # - 0.000053 D- D0 PHSP; - 0.000075 D*0 D- SVS; - 0.000049 D*- D0 SVS; - 0.00033 D*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.0000048 D_s- D0 PHSP; - 0.0000071 D*0 D_s- SVS; - 0.0000045 D_s*- D0 SVS; - 0.000026 D_s*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - # - 0.0000003 D- anti-D0 PHSP; - 0.0000003 anti-D*0 D- SVS; - 0.0000004 D*- anti-D0 SVS; - 0.0000016 anti-D*0 D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.0000066 D_s- anti-D0 PHSP; - 0.0000063 anti-D*0 D_s- SVS; - 0.0000085 D_s*- anti-D0 SVS; - 0.0000404 D_s*- anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - # - 0.00280 eta_c D_s- PHSP; - 0.00270 D_s*- eta_c SVS; - 0.00015 eta_c D- PHSP; - 0.00010 D*- eta_c SVS; - 0.00170 J/psi D_s- SVS; - 0.00670 J/psi D_s*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.00009 J/psi D- SVS; - 0.00028 J/psi D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - # - 0.16400 anti-B_s0 pi- PHSP; - 0.07200 rho- anti-B_s0 SVS; - 0.01060 anti-B_s0 K- PHSP; - 0.00000 K*- anti-B_s0 SVS; - 0.06500 anti-B_s*0 pi- SVS; - 0.20200 anti-B_s*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.00370 anti-B_s*0 K- SVS; - 0.00000 anti-B_s*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.01060 anti-B0 pi- PHSP; - 0.00960 rho- anti-B0 SVS; - 0.00070 anti-B0 K- PHSP; - 0.00015 K*- anti-B0 SVS; - 0.00950 anti-B*0 pi- SVS; - 0.02570 anti-B*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.00055 anti-B*0 K- SVS; - 0.00058 anti-B*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.00037 B- pi0 PHSP; - 0.00034 rho0 B- SVS; - 0.01980 B- K0 PHSP; - 0.00430 K*0 B- SVS; - 0.00033 B*- pi0 SVS; - 0.00090 B*- rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.01600 B*- K0 SVS; - 0.01670 B*- K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.00480 J/psi tau- anti-nu_tau PHSP; +0.00008 psi(2S) tau- anti-nu_tau PHSP; +0.00230 eta_c tau- anti-nu_tau PHSP; +0.000016 eta_c(2S) tau- anti-nu_tau PHSP; +0.00002 anti-D0 tau- anti-nu_tau PHSP; +0.00008 anti-D*0 tau- anti-nu_tau PHSP; +# +# +# Hadronic Decays +0.00200 eta_c pi- PHSP; +0.00420 rho- eta_c SVS; +0.00013 eta_c K- PHSP; +0.00020 K*- eta_c SVS; +0.00130 J/psi pi- SVS; +0.00400 J/psi rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00011 J/psi K- SVS; +0.00022 J/psi K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.000053 D- D0 PHSP; +0.000075 D*0 D- SVS; +0.000049 D*- D0 SVS; +0.00033 D*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000048 D_s- D0 PHSP; +0.0000071 D*0 D_s- SVS; +0.0000045 D_s*- D0 SVS; +0.000026 D_s*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.0000003 D- anti-D0 PHSP; +0.0000003 anti-D*0 D- SVS; +0.0000004 D*- anti-D0 SVS; +0.0000016 anti-D*0 D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000066 D_s- anti-D0 PHSP; +0.0000063 anti-D*0 D_s- SVS; +0.0000085 D_s*- anti-D0 SVS; +0.0000404 D_s*- anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.00280 eta_c D_s- PHSP; +0.00270 D_s*- eta_c SVS; +0.00015 eta_c D- PHSP; +0.00010 D*- eta_c SVS; +0.00170 J/psi D_s- SVS; +0.00670 J/psi D_s*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00009 J/psi D- SVS; +0.00028 J/psi D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.16400 anti-B_s0 pi- PHSP; +0.07200 rho- anti-B_s0 SVS; +0.01060 anti-B_s0 K- PHSP; +0.00000 K*- anti-B_s0 SVS; +0.06500 anti-B_s*0 pi- SVS; +0.20200 anti-B_s*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00370 anti-B_s*0 K- SVS; +0.00000 anti-B_s*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.01060 anti-B0 pi- PHSP; +0.00960 rho- anti-B0 SVS; +0.00070 anti-B0 K- PHSP; +0.00015 K*- anti-B0 SVS; +0.00950 anti-B*0 pi- SVS; +0.02570 anti-B*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00055 anti-B*0 K- SVS; +0.00058 anti-B*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00037 B- pi0 PHSP; +0.00034 rho0 B- SVS; +0.01980 B- K0 PHSP; +0.00430 K*0 B- SVS; +0.00033 B*- pi0 SVS; +0.00090 B*- rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.01600 B*- K0 SVS; +0.01670 B*- K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # PR LHCb 09 Apr 2004 Add B_c+ -> rho0 pi+ 0.00002 rho0 pi- SVS; - 0.06005 anti-c s PYTHIA 11; +0.06005 anti-c s PYTHIA 42; # PR LHCb 27 Apr 2004 Add Pythia Modes - # - # ash 10/27/03 Do not if this is correct but filling out with unknown cs -#0.0200235 cs_0 anti-uu_0 PYTHIA 23; -#0.0400470 cs_1 anti-uu_1 PYTHIA 23; - # +# +# ash 10/27/03 Do not if this is correct but filling out with unknown cs +#0.0200235 cs_0 anti-uu_0 PYTHIA 63; +#0.0400470 cs_1 anti-uu_1 PYTHIA 63; +# Enddecay # 09/15/03 A. Sanchez: Using BR's from hep-ph/0308214 # # Total Br = 0.939865 + .06135 cs Decay B_c+ - 0.01600 tau+ nu_tau SLN; - # - # SemiLeptonic Decays +0.01600 tau+ nu_tau SLN; +# +# SemiLeptonic Decays 0.01900 J/psi e+ nu_e PHOTOS PHSP; 0.00094 psi(2S) e+ nu_e PHOTOS PHSP; 0.00750 eta_c e+ nu_e PHOTOS PHSP; @@ -8376,115 +9622,119 @@ Decay B_c+ 0.05060 B_s*0 mu+ nu_mu PHOTOS PHSP; 0.00340 B0 mu+ nu_mu PHOTOS PHSP; 0.00580 B*0 mu+ nu_mu PHOTOS PHSP; - # - 0.00480 J/psi tau+ nu_tau PHSP; - 0.00008 psi(2S) tau+ nu_tau PHSP; - 0.00230 eta_c tau+ nu_tau PHSP; - 0.000016 eta_c(2S) tau+ nu_tau PHSP; - 0.00002 D0 tau+ nu_tau PHSP; - 0.00008 D*0 tau+ nu_tau PHSP; - # - # Hadronic Decays - 0.00200 eta_c pi+ PHSP; - 0.00420 rho+ eta_c SVS; - 0.00013 eta_c K+ PHSP; - 0.00020 K*+ eta_c SVS; - 0.00130 J/psi pi+ SVS; - 0.00400 J/psi rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.00011 J/psi K+ SVS; - 0.00022 J/psi K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - # - 0.000053 D+ anti-D0 PHSP; - 0.000075 anti-D*0 D+ SVS; - 0.000049 D*+ anti-D0 SVS; - 0.00033 D*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.0000048 D_s+ anti-D0 PHSP; - 0.0000071 anti-D*0 D_s+ SVS; - 0.0000045 D_s*+ anti-D0 SVS; - 0.000026 D_s*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - # - 0.0000003 D+ D0 PHSP; - 0.0000003 D*0 D+ SVS; - 0.0000004 D*+ D0 SVS; - 0.0000016 D*0 D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.0000066 D_s+ D0 PHSP; - 0.0000063 D*0 D_s+ SVS; - 0.0000085 D_s*+ D0 SVS; - 0.0000404 D_s*+ D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - # - 0.00280 eta_c D_s+ PHSP; - 0.00270 D_s*+ eta_c SVS; - 0.00015 eta_c D+ PHSP; - 0.00010 D*+ eta_c SVS; - 0.00170 J/psi D_s+ SVS; - 0.00670 J/psi D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.00009 J/psi D+ SVS; - 0.00028 J/psi D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - # - 0.16400 B_s0 pi+ PHSP; - 0.07200 rho+ B_s0 SVS; - 0.01060 B_s0 K+ PHSP; - 0.00000 K*+ B_s0 SVS; - 0.06500 B_s*0 pi+ SVS; - 0.20200 B_s*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.00370 B_s*0 K+ SVS; - 0.00000 B_s*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.01060 B0 pi+ PHSP; - 0.00960 rho+ B0 SVS; - 0.00070 B0 K+ PHSP; - 0.00015 K*+ B0 SVS; - 0.00950 B*0 pi+ SVS; - 0.02570 B*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.00055 B*0 K+ SVS; - 0.00058 B*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.00037 B+ pi0 PHSP; - 0.00034 rho0 B+ SVS; - 0.01980 B+ anti-K0 PHSP; - 0.00430 K*0 B+ SVS; - 0.00033 B*+ pi0 SVS; - 0.00090 B*+ rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - 0.01600 B*+ anti-K0 SVS; - 0.01670 B*+ K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.00480 J/psi tau+ nu_tau PHSP; +0.00008 psi(2S) tau+ nu_tau PHSP; +0.00230 eta_c tau+ nu_tau PHSP; +0.000016 eta_c(2S) tau+ nu_tau PHSP; +0.00002 D0 tau+ nu_tau PHSP; +0.00008 D*0 tau+ nu_tau PHSP; +# +# Hadronic Decays +0.00200 eta_c pi+ PHSP; +0.00420 rho+ eta_c SVS; +0.00013 eta_c K+ PHSP; +0.00020 K*+ eta_c SVS; +0.00130 J/psi pi+ SVS; +0.00400 J/psi rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00011 J/psi K+ SVS; +0.00022 J/psi K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.000053 D+ anti-D0 PHSP; +0.000075 anti-D*0 D+ SVS; +0.000049 D*+ anti-D0 SVS; +0.00033 D*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000048 D_s+ anti-D0 PHSP; +0.0000071 anti-D*0 D_s+ SVS; +0.0000045 D_s*+ anti-D0 SVS; +0.000026 D_s*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.0000003 D+ D0 PHSP; +0.0000003 D*0 D+ SVS; +0.0000004 D*+ D0 SVS; +0.0000016 D*0 D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000066 D_s+ D0 PHSP; +0.0000063 D*0 D_s+ SVS; +0.0000085 D_s*+ D0 SVS; +0.0000404 D_s*+ D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.00280 eta_c D_s+ PHSP; +0.00270 D_s*+ eta_c SVS; +0.00015 eta_c D+ PHSP; +0.00010 D*+ eta_c SVS; +0.00170 J/psi D_s+ SVS; +0.00670 J/psi D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00009 J/psi D+ SVS; +0.00028 J/psi D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.16400 B_s0 pi+ PHSP; +0.07200 rho+ B_s0 SVS; +0.01060 B_s0 K+ PHSP; +0.00000 K*+ B_s0 SVS; +0.06500 B_s*0 pi+ SVS; +0.20200 B_s*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00370 B_s*0 K+ SVS; +0.00000 B_s*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.01060 B0 pi+ PHSP; +0.00960 rho+ B0 SVS; +0.00070 B0 K+ PHSP; +0.00015 K*+ B0 SVS; +0.00950 B*0 pi+ SVS; +0.02570 B*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00055 B*0 K+ SVS; +0.00058 B*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00037 B+ pi0 PHSP; +0.00034 rho0 B+ SVS; +0.01980 B+ anti-K0 PHSP; +0.00430 K*0 B+ SVS; +0.00033 B*+ pi0 SVS; +0.00090 B*+ rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.01600 B*+ anti-K0 SVS; +0.01670 B*+ K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; # PR LHCb 09 Apr 2004 Add B_c+ -> rho0 pi+ 0.00002 rho0 pi+ SVS; - 0.06005 c anti-s PYTHIA 11; +0.06005 c anti-s PYTHIA 42; # PR LHCb 27 Apr 2004 Add Pythia Modes - # - # ash 10/27/03 Do not if this is correct but filling out with unknown cs -#0.0200235 anti-cs_0 uu_0 PYTHIA 23; -#0.0400470 anti-cs_1 uu_1 PYTHIA 23; - # +# +# ash 10/27/03 Do not if this is correct but filling out with unknown cs +#0.0200235 anti-cs_0 uu_0 PYTHIA 63; +#0.0400470 anti-cs_1 uu_1 PYTHIA 63; +# Enddecay # Add excited Lambda_c decays (R.J. Tesarek 12/9/03) # Just a guess for the last two BR [Lambda_c(2593)+]. Decay Lambda_c(2593)+ - 0.24000 Sigma_c++ pi- PHSP; - 0.24000 Sigma_c0 pi+ PHSP; - 0.18000 Lambda_c+ pi+ pi- PHSP; - 0.24000 Sigma_c+ pi0 PHSP; - 0.09000 Lambda_c+ pi0 pi0 PHSP; - 0.01000 Lambda_c+ gamma PHSP; +0.096585366 Sigma_c++ pi- PHSP; #[Reconstructed PDG2011] +0.096585366 Sigma_c0 pi+ PHSP; #[Reconstructed PDG2011] +0.190000000 Lambda_c+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.096585366 Sigma_c+ pi0 PHSP; #[Reconstructed PDG2011] +0.036219512 Lambda_c+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.004024390 Lambda_c+ gamma PHSP; #[Reconstructed PDG2011] +0.240000000 Sigma_c*++ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.240000000 Sigma_c*0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay Decay anti-Lambda_c(2593)- - 0.24000 anti-Sigma_c-- pi+ PHSP; - 0.24000 anti-Sigma_c0 pi- PHSP; - 0.18000 anti-Lambda_c- pi- pi+ PHSP; - 0.24000 anti-Sigma_c- pi0 PHSP; - 0.09000 anti-Lambda_c- pi0 pi0 PHSP; - 0.01000 anti-Lambda_c- gamma PHSP; +0.096585366 anti-Sigma_c-- pi+ PHSP; #[Reconstructed PDG2011] +0.096585366 anti-Sigma_c0 pi- PHSP; #[Reconstructed PDG2011] +0.190000000 anti-Lambda_c- pi- pi+ PHSP; #[Reconstructed PDG2011] +0.096585366 anti-Sigma_c- pi0 PHSP; #[Reconstructed PDG2011] +0.036219512 anti-Lambda_c- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.004024390 anti-Lambda_c- gamma PHSP; #[Reconstructed PDG2011] +0.240000000 anti-Sigma_c*-- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.240000000 anti-Sigma_c*0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] Enddecay # Decay Lambda_c(2625)+ - 0.66000 Lambda_c+ pi+ pi- PHSP; - 0.33000 Lambda_c+ pi0 PHSP; - 0.01000 Lambda_c+ gamma PHSP; +0.670000000 Lambda_c+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.320294118 Lambda_c+ pi0 PHSP; #[Reconstructed PDG2011] +0.009705882 Lambda_c+ gamma PHSP; #[Reconstructed PDG2011] Enddecay Decay anti-Lambda_c(2625)- - 0.66000 anti-Lambda_c- pi- pi+ PHSP; - 0.33000 anti-Lambda_c- pi0 PHSP; - 0.01000 anti-Lambda_c- gamma PHSP; +0.670000000 anti-Lambda_c- pi- pi+ PHSP; #[Reconstructed PDG2011] +0.320294118 anti-Lambda_c- pi0 PHSP; #[Reconstructed PDG2011] +0.009705882 anti-Lambda_c- gamma PHSP; #[Reconstructed PDG2011] Enddecay # Add excited B hadrons (LHCb PR 10/03/04) @@ -8526,7 +9776,7 @@ Decay B_1+ 0.6670 B*0 pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; 0.3330 B*+ pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; Enddecay -Decay B_1- +Decay B_1- 0.6670 anti-B*0 pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; 0.3330 B*- pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; Enddecay @@ -8733,109 +9983,109 @@ Enddecay Decay Xi_cc*++ 0.08 e+ nu_e Xi_c+ PHSP ; 0.08 mu+ nu_mu Xi_c+ PHSP ; - 0.51 u anti-d s cu_0 PYTHIA 11 ; - 0.25 u anti-d s cu_1 PYTHIA 11 ; - 0.05 u anti-s s cu_0 PYTHIA 11 ; - 0.03 u anti-s s cu_1 PYTHIA 11 ; +0.51 u anti-d s cu_0 PYTHIA 42; +0.25 u anti-d s cu_1 PYTHIA 42; +0.05 u anti-s s cu_0 PYTHIA 42; +0.03 u anti-s s cu_1 PYTHIA 42; Enddecay Decay anti-Xi_cc*-- 0.08 e- anti-nu_e anti-Xi_c- PHSP; 0.08 mu- anti-nu_mu anti-Xi_c- PHSP; - 0.51 anti-u d anti-s anti-cu_0 PYTHIA 11 ; - 0.25 anti-u d anti-s anti-cu_0 PYTHIA 11 ; - 0.05 anti-u s anti-s anti-cu_1 PYTHIA 11 ; - 0.03 anti-u s anti-s anti-cu_1 PYTHIA 11 ; +0.51 anti-u d anti-s anti-cu_0 PYTHIA 42; +0.25 anti-u d anti-s anti-cu_0 PYTHIA 42; +0.05 anti-u s anti-s anti-cu_1 PYTHIA 42; +0.03 anti-u s anti-s anti-cu_1 PYTHIA 42; Enddecay Decay Xi_cc++ 0.08 e+ nu_e Xi_c+ PHSP ; 0.08 mu+ nu_mu Xi_c+ PHSP ; - 0.51 u anti-d s cu_0 PYTHIA 11 ; - 0.25 u anti-d s cu_1 PYTHIA 11 ; - 0.05 u anti-s s cu_0 PYTHIA 11 ; - 0.03 u anti-s s cu_1 PYTHIA 11 ; +0.51 u anti-d s cu_0 PYTHIA 42; +0.25 u anti-d s cu_1 PYTHIA 42; +0.05 u anti-s s cu_0 PYTHIA 42; +0.03 u anti-s s cu_1 PYTHIA 42; Enddecay Decay anti-Xi_cc-- 0.08 e- anti-nu_e anti-Xi_c- PHSP; 0.08 mu- anti-nu_mu anti-Xi_c- PHSP; - 0.51 anti-u d anti-s anti-cu_0 PYTHIA 11 ; - 0.25 anti-u d anti-s anti-cu_0 PYTHIA 11 ; - 0.05 anti-u s anti-s anti-cu_1 PYTHIA 11 ; - 0.03 anti-u s anti-s anti-cu_1 PYTHIA 11 ; +0.51 anti-u d anti-s anti-cu_0 PYTHIA 42; +0.25 anti-u d anti-s anti-cu_0 PYTHIA 42; +0.05 anti-u s anti-s anti-cu_1 PYTHIA 42; +0.03 anti-u s anti-s anti-cu_1 PYTHIA 42; Enddecay Decay Xi_cc*+ 0.08 e+ nu_e Xi_c0 PHSP; 0.08 mu+ nu_mu Xi_c0 PHSP; - 0.51 u anti-d s cd_0 PYTHIA 11 ; - 0.25 u anti-d s cd_1 PYTHIA 11 ; - 0.05 u anti-s s cd_0 PYTHIA 11 ; - 0.03 u anti-s s cd_1 PYTHIA 11 ; +0.51 u anti-d s cd_0 PYTHIA 42; +0.25 u anti-d s cd_1 PYTHIA 42; +0.05 u anti-s s cd_0 PYTHIA 42; +0.03 u anti-s s cd_1 PYTHIA 42; Enddecay Decay anti-Xi_cc*- 0.08 e- anti-nu_e anti-Xi_c0 PHSP; 0.08 mu- anti-nu_mu anti-Xi_c0 PHSP; - 0.51 anti-u d anti-s anti-cd_0 PYTHIA 11 ; - 0.25 anti-u d anti-s anti-cd_1 PYTHIA 11 ; - 0.05 anti-u s anti-s anti-cd_0 PYTHIA 11 ; - 0.03 anti-u s anti-s anti-cd_1 PYTHIA 11 ; +0.51 anti-u d anti-s anti-cd_0 PYTHIA 42; +0.25 anti-u d anti-s anti-cd_1 PYTHIA 42; +0.05 anti-u s anti-s anti-cd_0 PYTHIA 42; +0.03 anti-u s anti-s anti-cd_1 PYTHIA 42; Enddecay Decay Xi_cc+ 0.08 e+ nu_e Xi_c0 PHSP; 0.08 mu+ nu_mu Xi_c0 PHSP; - 0.51 u anti-d s cd_0 PYTHIA 11 ; - 0.25 u anti-d s cd_1 PYTHIA 11 ; - 0.05 u anti-s s cd_0 PYTHIA 11 ; - 0.03 u anti-s s cd_1 PYTHIA 11 ; +0.51 u anti-d s cd_0 PYTHIA 42; +0.25 u anti-d s cd_1 PYTHIA 42; +0.05 u anti-s s cd_0 PYTHIA 42; +0.03 u anti-s s cd_1 PYTHIA 42; Enddecay Decay anti-Xi_cc- 0.08 e- anti-nu_e anti-Xi_c0 PHSP; 0.08 mu- anti-nu_mu anti-Xi_c0 PHSP; - 0.51 anti-u d anti-s anti-cd_0 PYTHIA 11 ; - 0.25 anti-u d anti-s anti-cd_1 PYTHIA 11 ; - 0.05 anti-u s anti-s anti-cd_0 PYTHIA 11 ; - 0.03 anti-u s anti-s anti-cd_1 PYTHIA 11 ; +0.51 anti-u d anti-s anti-cd_0 PYTHIA 42; +0.25 anti-u d anti-s anti-cd_1 PYTHIA 42; +0.05 anti-u s anti-s anti-cd_0 PYTHIA 42; +0.03 anti-u s anti-s anti-cd_1 PYTHIA 42; Enddecay Decay Omega_cc+ 0.08 e+ nu_e Omega_c0 PHSP; 0.08 mu+ nu_mu Omega_c0 PHSP; - 0.51 u anti-d s cs_0 PYTHIA 11; - 0.25 u anti-d s cs_1 PYTHIA 11; - 0.05 u anti-s s cs_0 PYTHIA 11; - 0.03 u anti-s s cs_1 PYTHIA 11; +0.51 u anti-d s cs_0 PYTHIA 42; +0.25 u anti-d s cs_1 PYTHIA 42; +0.05 u anti-s s cs_0 PYTHIA 42; +0.03 u anti-s s cs_1 PYTHIA 42; Enddecay Decay anti-Omega_cc- 0.08 e- anti-nu_e anti-Omega_c0 PHSP; 0.08 mu- anti-nu_mu anti-Omega_c0 PHSP; - 0.51 anti-u d anti-s anti-cs_0 PYTHIA 11; - 0.25 anti-u d anti-s anti-cs_1 PYTHIA 11; - 0.05 anti-u s anti-s anti-cs_0 PYTHIA 11; - 0.03 anti-u s anti-s anti-cs_1 PYTHIA 11; +0.51 anti-u d anti-s anti-cs_0 PYTHIA 42; +0.25 anti-u d anti-s anti-cs_1 PYTHIA 42; +0.05 anti-u s anti-s anti-cs_0 PYTHIA 42; +0.03 anti-u s anti-s anti-cs_1 PYTHIA 42; Enddecay Decay Omega_cc*+ 0.08 e+ nu_e Omega_c0 PHSP; 0.08 mu+ nu_mu Omega_c0 PHSP; - 0.51 u anti-d s cs_0 PYTHIA 11; - 0.25 u anti-d s cs_1 PYTHIA 11; - 0.05 u anti-s s cs_0 PYTHIA 11; - 0.03 u anti-s s cs_1 PYTHIA 11; +0.51 u anti-d s cs_0 PYTHIA 42; +0.25 u anti-d s cs_1 PYTHIA 42; +0.05 u anti-s s cs_0 PYTHIA 42; +0.03 u anti-s s cs_1 PYTHIA 42; Enddecay Decay anti-Omega_cc*- 0.08 e- anti-nu_e anti-Omega_c0 PHSP; 0.08 mu- anti-nu_mu anti-Omega_c0 PHSP; - 0.51 anti-u d anti-s anti-cs_0 PYTHIA 11; - 0.25 anti-u d anti-s anti-cs_1 PYTHIA 11; - 0.05 anti-u s anti-s anti-cs_0 PYTHIA 11; - 0.03 anti-u s anti-s anti-cs_1 PYTHIA 11; +0.51 anti-u d anti-s anti-cs_0 PYTHIA 42; +0.25 anti-u d anti-s anti-cs_1 PYTHIA 42; +0.05 anti-u s anti-s anti-cs_0 PYTHIA 42; +0.03 anti-u s anti-s anti-cs_1 PYTHIA 42; Enddecay Decay K_L0 diff --git a/GeneratorInterface/EvtGenInterface/data/evt.pdl b/GeneratorInterface/EvtGenInterface/data/evt.pdl index e62aa12dea38b..cb904cae74b22 100644 --- a/GeneratorInterface/EvtGenInterface/data/evt.pdl +++ b/GeneratorInterface/EvtGenInterface/data/evt.pdl @@ -1,3 +1,20 @@ +* Copyright 1998-2020 CERN for the benefit of the EvtGen authors +* +* This file is part of EvtGen. +* +* EvtGen is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* EvtGen is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with EvtGen. If not, see . +* *--------------------------------------------------------------------------------------------------------------------------------------- * 5/10/2013 Updated by R. Godang. The format and convention are based on the current evt.pdl and PDG 2012 *--------------------------------------------------------------------------------------------------------------------------------------- @@ -6,379 +23,379 @@ add p Particle K_4*+ 329 2.0450000e+00 1.9800000e add p Particle h_b(2P) 110553 1.0255000e+01 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 110553 add p Particle b 5 5.0000000e+00 0.0000000e+00 0.0000000e+00 -1 1 0.0000000e+00 5 add p Particle anti-nu_e -12 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 -12 -add p Particle D_2*0 425 2.4611000e+00 4.3000001e-02 3.0900000e-01 0 4 0.0000000e+00 425 -add p Particle Upsilon 553 9.4603000e+00 5.4000022e-05 5.0000000e-04 0 2 0.0000000e+00 553 +add p Particle D_2*0 425 2.4607000e+00 4.7500000e-02 3.0900000e-01 0 4 0.0000000e+00 425 +add p Particle Upsilon 553 9.4603000e+00 5.4020000e-05 5.0000000e-04 0 2 0.0000000e+00 553 add p Particle anti-B'_10 -20513 5.7570000e+00 2.5027080e-01 2.0000000e-01 0 2 0.0000000e+00 -20513 -add p Particle anti-K0 -311 4.9761400e-01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 -311 -add p Particle Lambda(1405)0 13122 1.4060000e+00 5.0000015e-02 7.0000000e-02 0 1 0.0000000e+00 0 -add p Particle K*+ 323 8.9166000e-01 5.0800012e-02 2.3000000e-01 3 2 0.0000000e+00 323 -add p Particle e+ -11 5.1099891e-04 0.0000000e+00 0.0000000e+00 3 1 0.0000000e+00 -11 +add p Particle anti-K0 -311 4.9761100e-01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 -311 +add p Particle Lambda(1405)0 13122 1.4051000e+00 5.0500000e-02 7.0000000e-02 0 1 0.0000000e+00 0 +add p Particle K*+ 323 8.9166000e-01 5.0300000e-02 2.3000000e-01 3 2 0.0000000e+00 323 +add p Particle e+ -11 5.1099895e-04 0.0000000e+00 0.0000000e+00 3 1 0.0000000e+00 -11 add p Particle B0H 510 5.2795300e+00 0.0000000e+00 0.0000000e+00 0 0 4.5718350e-01 0 -add p Particle K_2*- -325 1.4256000e+00 9.8500006e-02 7.0000000e-01 -3 4 0.0000000e+00 -325 +add p Particle K_2*- -325 1.4256000e+00 9.8500000e-02 7.0000000e-01 -3 4 0.0000000e+00 -325 add p Particle B'_10 20513 5.7570000e+00 2.5027080e-01 2.0000000e-01 0 2 0.0000000e+00 20513 add p Particle K- -321 4.9367700e-01 0.0000000e+00 0.0000000e+00 -3 0 3.7114306e+03 -321 add p Particle eta_b2(2D) 110555 1.0441000e+01 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 110555 -add p Particle K'*0 100313 1.4140000e+00 2.3199996e-01 6.0000000e-01 0 2 0.0000000e+00 0 -add p Particle B_s10 10533 5.8310000e+00 3.9891649e-02 1.0000000e-02 0 2 0.0000000e+00 10533 -add p Particle K_S0 310 4.9761400e-01 0.0000000e+00 0.0000000e+00 0 0 2.6840419e+01 310 +add p Particle K'*0 100313 1.4210000e+00 2.3600000e-01 6.0000000e-01 0 2 0.0000000e+00 0 +add p Particle B_s10 10533 5.8287000e+00 5.0000000e-04 1.0000000e-02 0 2 0.0000000e+00 10533 +add p Particle K_S0 310 4.9761100e-01 0.0000000e+00 0.0000000e+00 0 0 2.6840419e+01 310 add p Particle Upsilon_1(2D) 130553 1.0434900e+01 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 130553 add p Particle B_0*- -10521 5.7380000e+00 1.4993444e-01 2.0000000e-01 -3 0 0.0000000e+00 -10521 add p Particle D'_10 20423 2.4450000e+00 2.5027080e-01 3.0000000e-01 0 2 0.0000000e+00 20423 -add p Particle B+ 521 5.2791500e+00 0.0000000e+00 0.0000000e+00 3 0 4.9106005e-01 521 +add p Particle B+ 521 5.2793300e+00 0.0000000e+00 0.0000000e+00 3 0 4.9106005e-01 521 add p Particle B_0*+ 10521 5.7380000e+00 1.4993444e-01 2.0000000e-01 3 0 0.0000000e+00 10521 -add p Particle Sigma_b*- 5114 5.8364000e+00 0.0000000e+00 0.0000000e+00 -3 3 0.0000000e+00 5114 -add p Particle anti-Lambda(1405)0 -13122 1.4060000e+00 5.0000015e-02 7.0000000e-02 0 1 0.0000000e+00 0 -add p Particle anti-B_s10 -10533 5.8310000e+00 3.9891649e-02 1.0000000e-02 0 2 0.0000000e+00 -10533 +add p Particle Sigma_b*- 5114 5.8347400e+00 1.0400000e-02 0.0000000e+00 -3 3 0.0000000e+00 5114 +add p Particle anti-Lambda(1405)0 -13122 1.4051000e+00 5.0500000e-02 7.0000000e-02 0 1 0.0000000e+00 0 +add p Particle anti-B_s10 -10533 5.8287000e+00 5.0000000e-04 1.0000000e-02 0 2 0.0000000e+00 -10533 add p Particle B0L 150 5.2795300e+00 0.0000000e+00 0.0000000e+00 0 0 4.5718350e-01 0 add p Particle anti-B_0*0 -10511 5.7380000e+00 1.4993444e-01 2.0000000e-01 0 0 0.0000000e+00 -10511 add p Particle anti-Sigma(1660)0 -13212 1.6600000e+00 1.0000000e-01 4.0000000e-01 0 1 0.0000000e+00 0 -add p Particle Xi_b0 5232 5.7924000e+00 0.0000000e+00 0.0000000e+00 0 1 4.2570529e-01 5232 -add p Particle D_2*- -415 2.4601000e+00 3.6999998e-02 3.1200000e-01 -3 4 0.0000000e+00 -415 -add p Particle b_1- -10213 1.2295000e+00 1.4200001e-01 2.5000000e-01 -3 2 0.0000000e+00 -10213 -add p Particle K*0 313 8.9600000e-01 5.0299999e-02 2.3000000e-01 0 2 0.0000000e+00 313 -add p Particle anti-K'*0 -100313 1.4140000e+00 2.3199996e-01 6.0000000e-01 0 2 0.0000000e+00 0 -add p Particle anti-Lambda(1600)0 -23122 1.6000000e+00 1.5000001e-01 2.5000000e-01 0 1 0.0000000e+00 0 +add p Particle Xi_b0 5232 5.7919000e+00 0.0000000e+00 0.0000000e+00 0 1 4.2570529e-01 5232 +add p Particle D_2*- -415 2.4654000e+00 4.6700000e-02 3.1200000e-01 -3 4 0.0000000e+00 -415 +add p Particle b_1- -10213 1.2295000e+00 1.4200000e-01 2.5000000e-01 -3 2 0.0000000e+00 -10213 +add p Particle K*0 313 8.9555000e-01 4.7300000e-02 2.3000000e-01 0 2 0.0000000e+00 313 +add p Particle anti-K'*0 -100313 1.4210000e+00 2.3600000e-01 6.0000000e-01 0 2 0.0000000e+00 0 +add p Particle anti-Lambda(1600)0 -23122 1.6000000e+00 1.5000000e-01 2.5000000e-01 0 1 0.0000000e+00 0 add p Particle B'_1+ 20523 5.7570000e+00 2.5027080e-01 2.0000000e-01 3 2 0.0000000e+00 20523 -add p Particle tau- 15 1.7768400e+00 0.0000000e+00 0.0000000e+00 -3 1 8.7119688e-02 15 -add p Particle f'_1 20333 1.4264000e+00 5.4900015e-02 1.0000000e-01 0 2 0.0000000e+00 20333 +add p Particle tau- 15 1.7768600e+00 0.0000000e+00 0.0000000e+00 -3 1 8.7119688e-02 15 +add p Particle f'_1 20333 1.4264000e+00 5.4900000e-02 1.0000000e-01 0 2 0.0000000e+00 20333 add p Particle D(2S)- -100411 2.5800000e+00 0.0000000e+00 0.0000000e+00 -3 0 0.0000000e+00 0 -add p Particle D_s2*- -435 2.5726000e+00 2.0000000e-02 6.0000000e-02 -3 4 0.0000000e+00 -435 -add p Particle n0 2112 9.3956536e-01 0.0000000e+00 0.0000000e+00 0 1 2.6552618e+14 2112 -add p Particle anti-Xi*+ -3314 1.5350000e+00 9.9000002e-03 5.0000000e-02 3 3 0.0000000e+00 -3314 -add p Particle D*- -413 2.0102700e+00 9.6000002e-05 4.0000000e-04 -3 2 0.0000000e+00 -413 -add p Particle a_1+ 20213 1.2300000e+00 4.1999998e-01 6.0000000e-01 3 2 0.0000000e+00 20213 -add p Particle D*+ 413 2.0102700e+00 9.6000002e-05 4.0000000e-04 3 2 0.0000000e+00 413 +add p Particle D_s2*- -435 2.5691000e+00 1.6900000e-02 6.0000000e-02 -3 4 0.0000000e+00 -435 +add p Particle n0 2112 9.3956541e-01 0.0000000e+00 0.0000000e+00 0 1 2.6552618e+14 2112 +add p Particle anti-Xi*+ -3314 1.5350000e+00 9.9000000e-03 5.0000000e-02 3 3 0.0000000e+00 -3314 +add p Particle D*- -413 2.0102600e+00 8.3400000e-05 4.0000000e-04 -3 2 0.0000000e+00 -413 +add p Particle a_1+ 20213 1.2300000e+00 4.2000000e-01 6.0000000e-01 3 2 0.0000000e+00 20213 +add p Particle D*+ 413 2.0102600e+00 8.3400000e-05 4.0000000e-04 3 2 0.0000000e+00 413 add p Particle rndmflav 82 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 82 add p Particle anti-uu_1 -2203 0.0000000e+00 0.0000000e+00 0.0000000e+00 -4 2 0.0000000e+00 -2203 add p Particle anti-c -4 1.3500000e+00 0.0000000e+00 0.0000000e+00 -2 1 0.0000000e+00 -4 -add p Particle Upsilon(5S) 9000553 1.0865000e+01 1.1000001e-01 1.6500000e+00 0 2 0.0000000e+00 0 +add p Particle Upsilon(5S) 9000553 1.0889900e+01 5.1000000e-02 1.6500000e+00 0 2 0.0000000e+00 0 add p Particle Xi_cc++ 4422 3.5979800e+00 0.0000000e+00 0.0000000e+00 6 1 1.0000000e-01 4422 -add p Particle B_c- -541 6.2760000e+00 0.0000000e+00 0.0000000e+00 -3 0 1.3490661e-01 -541 -add p Particle anti-Sigma*+ -3114 1.3872000e+00 3.9400008e-02 4.0000000e-02 3 3 0.0000000e+00 -3114 +add p Particle B_c- -541 6.2737000e+00 0.0000000e+00 0.0000000e+00 -3 0 1.3490661e-01 -541 +add p Particle anti-Sigma*+ -3114 1.3872000e+00 3.9400000e-02 4.0000000e-02 3 3 0.0000000e+00 -3114 add p Particle anti-b'-hadron -87 4.0000000e+02 0.0000000e+00 0.0000000e+00 1 0 0.0000000e+00 0 -add p Particle Upsilon_1(1D) 30553 1.0150100e+01 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 30553 -add p Particle eta_c(2S) 100441 3.6370000e+00 1.3999999e-02 2.0000000e-02 0 0 0.0000000e+00 100441 -add p Particle anti-Delta- -2214 1.2320000e+00 1.1800001e-01 1.4000000e-01 -3 3 0.0000000e+00 -2214 -add p Particle anti-D_0*0 -10421 2.4000000e+00 1.5027676e-01 2.9900000e-01 0 0 0.0000000e+00 -10421 +add p Particle Upsilon_1(1D) 30553 1.0163700e+01 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 30553 +add p Particle eta_c(2S) 100441 3.6375000e+00 1.1300000e-02 2.0000000e-02 0 0 0.0000000e+00 100441 +add p Particle anti-Delta- -2214 1.2320000e+00 1.1700000e-01 1.4000000e-01 -3 3 0.0000000e+00 -2214 +add p Particle anti-D_0*0 -10421 2.3000000e+00 2.7000000e-01 2.9900000e-01 0 0 0.0000000e+00 -10421 add p Particle anti-nu_L -18 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 -18 -add p Particle Lambda(1830)0 13126 1.8300000e+00 9.5000007e-02 4.8000000e-01 0 5 0.0000000e+00 0 +add p Particle Lambda(1830)0 13126 1.8300000e+00 9.5000000e-02 4.8000000e-01 0 5 0.0000000e+00 0 add p Particle Lambda0 3122 1.1156830e+00 0.0000000e+00 0.0000000e+00 0 1 7.8875396e+01 3122 add p Particle uu_1 2203 0.0000000e+00 0.0000000e+00 0.0000000e+00 4 2 0.0000000e+00 2203 -add p Particle psi(4160) 9010443 4.1530000e+00 7.8000000e-02 1.5000000e-01 0 2 0.0000000e+00 0 +add p Particle psi(4160) 9010443 4.1910000e+00 7.0000000e-02 1.5000000e-01 0 2 0.0000000e+00 0 add p Particle Xi'_b0 5322 5.9600000e+00 6.5821220e-06 1.0000000e-04 0 1 0.0000000e+00 5322 add p Particle b'-hadron 87 4.0000000e+02 0.0000000e+00 0.0000000e+00 -1 0 0.0000000e+00 0 add p Particle Omega- 3334 1.6724500e+00 0.0000000e+00 0.0000000e+00 -3 3 2.4612961e+01 3334 -add p Particle B_10 10513 5.7320000e+00 3.9891649e-02 2.0000000e-01 0 2 0.0000000e+00 10513 +add p Particle B_10 10513 5.7261000e+00 2.7500000e-02 2.0000000e-01 0 2 0.0000000e+00 10513 add p Particle anti-ud_1 -2103 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 2 0.0000000e+00 -2103 add p Particle t-hadron 86 1.7500000e+02 0.0000000e+00 0.0000000e+00 2 0 0.0000000e+00 0 add p Particle anti-t-hadron -86 1.7500000e+02 0.0000000e+00 0.0000000e+00 -2 0 0.0000000e+00 0 -add p Particle anti-Sigma0 -3212 1.1926420e+00 8.8947595e-06 1.3000000e-04 0 1 0.0000000e+00 -3212 +add p Particle anti-Sigma0 -3212 1.1926420e+00 8.9000000e-06 1.3000000e-04 0 1 0.0000000e+00 -3212 add p Particle B'_1- -20523 5.7570000e+00 2.5027080e-01 2.0000000e-01 -3 2 0.0000000e+00 -20523 -add p Particle Lambda_c(2593)+ 14122 2.5954000e+00 3.6000005e-03 5.4000000e-02 3 1 0.0000000e+00 0 -add p Particle anti-Lambda(1820)0 -3126 1.8200000e+00 7.9999995e-02 4.0000000e-01 0 5 0.0000000e+00 0 +add p Particle Lambda_c(2593)+ 14122 2.5922500e+00 2.6000000e-03 5.4000000e-02 3 1 0.0000000e+00 0 +add p Particle anti-Lambda(1820)0 -3126 1.8200000e+00 8.0000000e-02 4.0000000e-01 0 5 0.0000000e+00 0 add p Particle Omega_cc+ 4432 3.7866300e+00 0.0000000e+00 0.0000000e+00 3 1 1.0000000e-01 4432 -add p Particle anti-Delta-- -2224 1.2320000e+00 1.1800001e-01 1.4000000e-01 -6 3 0.0000000e+00 -2224 -add p Particle B_2*0 515 5.7469000e+00 5.0245206e-02 2.0000000e-01 0 4 0.0000000e+00 515 -add p Particle K'_10 20313 1.4030000e+00 1.7399999e-01 4.0000000e-01 0 2 0.0000000e+00 20313 -add p Particle sigma_0 9000221 4.7800000e-01 0.0000000e+00 4.7800000e-01 0 0 0.0000000e+00 0 +add p Particle anti-Delta-- -2224 1.2320000e+00 1.1700000e-01 1.4000000e-01 -6 3 0.0000000e+00 -2224 +add p Particle B_2*0 515 5.7395000e+00 2.4200000e-02 2.0000000e-01 0 4 0.0000000e+00 515 +add p Particle K'_10 20313 1.4030000e+00 1.7400000e-01 4.0000000e-01 0 2 0.0000000e+00 20313 +add p Particle sigma_0 9000221 4.7500000e-01 5.5000000e-01 4.7800000e-01 0 0 0.0000000e+00 0 add p Particle anti-Xi_cc*-- -4424 3.6564800e+00 0.0000000e+00 0.0000000e+00 -6 3 0.0000000e+00 -4424 -add p Particle anti-D_10 -10423 2.4223000e+00 2.0400003e-02 2.7200000e-01 0 2 0.0000000e+00 -10423 -add p Particle anti-Lambda_c(2593)- -14122 2.5954000e+00 3.6000005e-03 5.4000000e-02 -3 1 0.0000000e+00 0 -add p Particle B_1- -10523 5.7320000e+00 3.9891649e-02 2.0000000e-01 -3 2 0.0000000e+00 -10523 +add p Particle anti-D_10 -10423 2.4208000e+00 3.1700000e-02 2.7200000e-01 0 2 0.0000000e+00 -10423 +add p Particle anti-Lambda_c(2593)- -14122 2.5922500e+00 2.6000000e-03 5.4000000e-02 -3 1 0.0000000e+00 0 +add p Particle B_1- -10523 5.7259000e+00 3.1000000e-02 2.0000000e-01 -3 2 0.0000000e+00 -10523 add p Particle anti-Xi_cc- -4412 3.5979800e+00 0.0000000e+00 0.0000000e+00 -3 1 1.0000000e-01 -4412 -add p Particle D_s- -431 1.9684900e+00 0.0000000e+00 0.0000000e+00 -3 0 1.4989623e-01 -431 +add p Particle D_s- -431 1.9683400e+00 0.0000000e+00 0.0000000e+00 -3 0 1.4989623e-01 -431 add p Particle anti-Lambda_c- -4122 2.2864600e+00 0.0000000e+00 0.0000000e+00 -3 1 5.9958492e-02 -4122 add p Particle Xi_cc+ 4412 3.5979800e+00 0.0000000e+00 0.0000000e+00 3 1 1.0000000e-01 4412 -add p Particle B_1+ 10523 5.7320000e+00 3.9891649e-02 2.0000000e-01 3 2 0.0000000e+00 10523 -add p Particle D_0*- -10411 2.4000000e+00 1.5027676e-01 3.0300000e-01 -3 0 0.0000000e+00 -10411 +add p Particle B_1+ 10523 5.7259000e+00 3.1000000e-02 2.0000000e-01 3 2 0.0000000e+00 10523 +add p Particle D_0*- -10411 2.3000000e+00 2.7000000e-01 3.0300000e-01 -3 0 0.0000000e+00 -10411 add p Particle anti-Xi_cc-- -4422 3.5979800e+00 0.0000000e+00 0.0000000e+00 -6 1 1.0000000e-01 -4422 -add p Particle anti-Sigma_b*+ -5114 5.8364000e+00 0.0000000e+00 0.0000000e+00 3 3 0.0000000e+00 -5114 +add p Particle anti-Sigma_b*+ -5114 5.8347400e+00 1.0400000e-02 0.0000000e+00 3 3 0.0000000e+00 -5114 add p Particle chi_b2(3P) 200555 1.0526400e+01 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 200555 -add p Particle K''*- -30323 1.7170000e+00 3.2000002e-01 7.0000000e-01 -3 2 0.0000000e+00 0 +add p Particle K''*- -30323 1.7180000e+00 3.2000000e-01 7.0000000e-01 -3 2 0.0000000e+00 0 add p Particle vpho 10022 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 0 add p Particle K_4*- -329 2.0450000e+00 1.9800000e-01 2.0000000e-01 -3 8 0.0000000e+00 0 -add p Particle K_L0 130 4.9761400e-01 0.0000000e+00 0.0000000e+00 0 0 1.5337382e+04 130 +add p Particle K_L0 130 4.9761100e-01 0.0000000e+00 0.0000000e+00 0 0 1.5337382e+04 130 add p Particle eta_b(3S) 200551 1.0335000e+01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 0 -add p Particle K''*+ 30323 1.7170000e+00 3.2000002e-01 7.0000000e-01 3 2 0.0000000e+00 0 -add p Particle Lambda(1800)0 43122 1.8000000e+00 2.9999996e-01 4.5000000e-01 0 1 0.0000000e+00 0 -add p Particle anti-Lambda(1800)0 -43122 1.8000000e+00 2.9999996e-01 4.5000000e-01 0 1 0.0000000e+00 0 -add p Particle K_10 10313 1.2720000e+00 8.9999999e-02 2.0000000e-01 0 2 0.0000000e+00 10313 +add p Particle K''*+ 30323 1.7180000e+00 3.2000000e-01 7.0000000e-01 3 2 0.0000000e+00 0 +add p Particle Lambda(1800)0 43122 1.8000000e+00 3.0000000e-01 4.5000000e-01 0 1 0.0000000e+00 0 +add p Particle anti-Lambda(1800)0 -43122 1.8000000e+00 3.0000000e-01 4.5000000e-01 0 1 0.0000000e+00 0 +add p Particle K_10 10313 1.2720000e+00 9.0000000e-02 2.0000000e-01 0 2 0.0000000e+00 10313 add p Particle D*(2S)- -100413 2.6400000e+00 0.0000000e+00 0.0000000e+00 -3 2 0.0000000e+00 0 add p Particle CELLjet 98 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 98 add p Particle B_c2*- -545 7.3500000e+00 0.0000000e+00 6.0000000e-02 -3 4 0.0000000e+00 -545 -add p Particle K_0*0 10311 1.4200000e+00 2.7000000e-01 6.0000000e-01 0 0 0.0000000e+00 10311 +add p Particle K_0*0 10311 1.4300000e+00 2.7000000e-01 6.0000000e-01 0 0 0.0000000e+00 10311 add p Particle D_s0*- -10431 2.3178000e+00 1.0000033e-03 1.0000000e-02 -3 0 0.0000000e+00 -10431 add p Particle h_b(3P) 210553 1.0516000e+01 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 210553 add p Particle Lambda_c+ 4122 2.2864600e+00 0.0000000e+00 0.0000000e+00 3 1 5.9958492e-02 4122 -add p Particle Xi_c0 4132 2.4710000e+00 0.0000000e+00 0.0000000e+00 0 1 3.3576755e-02 4132 +add p Particle Xi_c0 4132 2.4709100e+00 0.0000000e+00 0.0000000e+00 0 1 4.5921780e-02 4132 add p Particle D_s0*+ 10431 2.3178000e+00 1.0000033e-03 1.0000000e-02 3 0 0.0000000e+00 10431 add p Particle junction 88 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 88 -add p Particle K'_1- -20323 1.4030000e+00 1.7399999e-01 4.0000000e-01 -3 2 0.0000000e+00 -20323 +add p Particle K'_1- -20323 1.4030000e+00 1.7400000e-01 4.0000000e-01 -3 2 0.0000000e+00 -20323 add p Particle X_2(3872) 9910445 3.8722000e+00 3.1700598e-04 2.9000000e-03 0 4 0.0000000e+00 9910445 add p Particle K+ 321 4.9367700e-01 0.0000000e+00 0.0000000e+00 3 0 3.7114306e+03 321 add p Particle anti-Xi_cc*- -4414 3.6564800e+00 0.0000000e+00 0.0000000e+00 -3 3 0.0000000e+00 -4414 add p Particle s 3 1.9900000e-01 0.0000000e+00 0.0000000e+00 -1 1 0.0000000e+00 3 add p Particle D*(2S)+ 100413 2.6400000e+00 0.0000000e+00 0.0000000e+00 3 2 0.0000000e+00 0 -add p Particle D_s*+ 433 2.1123000e+00 6.5821023e-06 1.0000000e-04 3 2 0.0000000e+00 433 -add p Particle anti-Omega_c*0 -4334 2.7683000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 -4334 -add p Particle D_0*+ 10411 2.4000000e+00 1.5027676e-01 3.0300000e-01 3 0 0.0000000e+00 10411 -add p Particle anti-p- -2212 9.3827203e-01 0.0000000e+00 0.0000000e+00 -3 1 0.0000000e+00 -2212 +add p Particle D_s*+ 433 2.1122000e+00 6.5821023e-06 1.0000000e-04 3 2 0.0000000e+00 433 +add p Particle anti-Omega_c*0 -4334 2.7659000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 -4334 +add p Particle D_0*+ 10411 2.3000000e+00 2.7000000e-01 3.0300000e-01 3 0 0.0000000e+00 10411 +add p Particle anti-p- -2212 9.3827208e-01 0.0000000e+00 0.0000000e+00 -3 1 0.0000000e+00 -2212 add p Particle anti-bd_1 -5103 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 2 0.0000000e+00 -5103 -add p Particle h_b 10553 9.8750000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 10553 -add p Particle anti-Lambda(1830)0 -13126 1.8300000e+00 9.5000007e-02 4.8000000e-01 0 5 0.0000000e+00 0 +add p Particle h_b 10553 9.8993000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 10553 +add p Particle anti-Lambda(1830)0 -13126 1.8300000e+00 9.5000000e-02 4.8000000e-01 0 5 0.0000000e+00 0 add p Particle anti-u -2 5.6000000e-03 0.0000000e+00 0.0000000e+00 -2 1 0.0000000e+00 -2 add p Particle mu+ -13 1.0565837e-01 0.0000000e+00 0.0000000e+00 3 1 6.5864973e+05 -13 add p Particle bc_0 5401 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 0 0.0000000e+00 5401 add p Particle alpha 1000020040 3.7274170e+00 0.0000000e+00 0.0000000e+00 6 0 0.0000000e+00 0 -add p Particle Sigma*- 3114 1.3872000e+00 3.9400008e-02 4.0000000e-02 -3 3 0.0000000e+00 3114 -add p Particle K''*0 30313 1.7170000e+00 3.2000002e-01 7.0000000e-01 0 2 0.0000000e+00 0 -add p Particle B*- -523 5.3251000e+00 6.5819970e-06 1.0000000e-04 -3 2 0.0000000e+00 -523 +add p Particle Sigma*- 3114 1.3872000e+00 3.9400000e-02 4.0000000e-02 -3 3 0.0000000e+00 3114 +add p Particle K''*0 30313 1.7180000e+00 3.2000000e-01 7.0000000e-01 0 2 0.0000000e+00 0 +add p Particle B*- -523 5.3247000e+00 6.5819970e-06 1.0000000e-04 -3 2 0.0000000e+00 -523 add p Particle phasespa 83 1.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 83 -add p Particle b_10 10113 1.2295000e+00 1.4200001e-01 2.5000000e-01 0 2 0.0000000e+00 10113 -add p Particle D+ 411 1.8696200e+00 0.0000000e+00 0.0000000e+00 3 0 3.1178416e-01 411 +add p Particle b_10 10113 1.2295000e+00 1.4200000e-01 2.5000000e-01 0 2 0.0000000e+00 10113 +add p Particle D+ 411 1.8696500e+00 0.0000000e+00 0.0000000e+00 3 0 3.1178416e-01 411 add p Particle b-hadron 85 5.0000000e+00 0.0000000e+00 0.0000000e+00 -1 0 3.8699999e-01 85 add p Particle anti-Xi_b*0 -5324 5.9700000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 -5324 add p Particle chi_b1(3P) 220553 1.0516000e+01 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 220553 add p Particle D*(2S)0 100423 2.6400000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 0 -add p Particle anti-D*0 -423 2.0069700e+00 6.5821023e-06 3.0000000e-04 0 2 0.0000000e+00 -423 -add p Particle Lambda(1810)0 53122 1.8100000e+00 1.5000001e-01 4.6000000e-01 0 1 0.0000000e+00 0 -add p Particle rho0 113 7.7549000e-01 1.4940001e-01 4.8000000e-01 0 2 0.0000000e+00 113 -add p Particle anti-B*0 -513 5.3251000e+00 6.5819970e-06 1.0000000e-04 0 2 0.0000000e+00 -513 -add p Particle pi- -211 1.3957018e-01 0.0000000e+00 0.0000000e+00 -3 0 7.8044971e+03 -211 +add p Particle anti-D*0 -423 2.0068500e+00 6.5821023e-06 3.0000000e-04 0 2 0.0000000e+00 -423 +add p Particle Lambda(1810)0 53122 1.8100000e+00 1.5000000e-01 4.6000000e-01 0 1 0.0000000e+00 0 +add p Particle rho0 113 7.7526000e-01 1.4910000e-01 4.8000000e-01 0 2 0.0000000e+00 113 +add p Particle anti-B*0 -513 5.3247000e+00 6.5819970e-06 1.0000000e-04 0 2 0.0000000e+00 -513 +add p Particle pi- -211 1.3957061e-01 0.0000000e+00 0.0000000e+00 -3 0 7.8044971e+03 -211 add p Particle anti-B'_s10 -20533 5.8590000e+00 2.5027080e-01 2.0000000e-02 0 2 0.0000000e+00 -20533 -add p Particle h_1 10223 1.1700000e+00 3.6000005e-01 2.0000000e-01 0 2 0.0000000e+00 10223 +add p Particle h_1 10223 1.1700000e+00 3.6000000e-01 2.0000000e-01 0 2 0.0000000e+00 10223 add p Particle geantino 480000000 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 0 add p Particle indep 93 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 93 add p Particle Cerenkov 20022 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 0 -add p Particle anti-Sigma*0 -3214 1.3837000e+00 3.6000005e-02 3.5000000e-02 0 3 0.0000000e+00 -3214 -add p Particle a_10 20113 1.2300000e+00 4.1999998e-01 6.0000000e-01 0 2 0.0000000e+00 20113 +add p Particle anti-Sigma*0 -3214 1.3837000e+00 3.6000000e-02 3.5000000e-02 0 3 0.0000000e+00 -3214 +add p Particle a_10 20113 1.2300000e+00 4.2000000e-01 6.0000000e-01 0 2 0.0000000e+00 20113 add p Particle Higgs+ 37 3.1000000e+02 7.0022575e+00 0.0000000e+00 3 0 0.0000000e+00 37 -add p Particle Sigma*0 3214 1.3837000e+00 3.6000005e-02 3.5000000e-02 0 3 0.0000000e+00 3214 +add p Particle Sigma*0 3214 1.3837000e+00 3.6000000e-02 3.5000000e-02 0 3 0.0000000e+00 3214 add p Particle Xi_cc*+ 4414 3.6564800e+00 0.0000000e+00 0.0000000e+00 3 3 0.0000000e+00 4414 -add p Particle f'_2 335 1.5250000e+00 7.3000004e-02 2.0000000e-01 0 4 0.0000000e+00 335 -add p Particle Xi_b- 5132 5.7924000e+00 0.0000000e+00 0.0000000e+00 -3 1 4.2570529e-01 5132 +add p Particle f'_2 335 1.5250000e+00 7.3000000e-02 2.0000000e-01 0 4 0.0000000e+00 335 +add p Particle Xi_b- 5132 5.7970000e+00 0.0000000e+00 0.0000000e+00 -3 1 4.2570529e-01 5132 add p Particle anti-K_4*0 -319 2.0450000e+00 1.9800000e-01 2.0000000e-01 0 8 0.0000000e+00 0 -add p Particle rho(2S)+ 100213 1.4650000e+00 4.0000012e-01 5.0000000e-01 3 2 0.0000000e+00 0 -add p Particle eta_c 441 2.9803000e+00 2.6700003e-02 1.5000000e-01 0 0 0.0000000e+00 441 -add p Particle D_0*0 10421 2.4000000e+00 1.5027676e-01 2.9900000e-01 0 0 0.0000000e+00 10421 +add p Particle rho(2S)+ 100213 1.4650000e+00 4.0000000e-01 5.0000000e-01 3 2 0.0000000e+00 0 +add p Particle eta_c 441 2.9839000e+00 3.1900000e-02 1.5000000e-01 0 0 0.0000000e+00 441 +add p Particle D_0*0 10421 2.3000000e+00 2.7000000e-01 2.9900000e-01 0 0 0.0000000e+00 10421 add p Particle bu_1 5203 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 2 0.0000000e+00 5203 add p Particle anti-su_1 -3203 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 2 0.0000000e+00 -3203 add p Particle K_2*0 315 1.4324000e+00 1.0900000e-01 7.0000000e-01 0 4 0.0000000e+00 315 -add p Particle anti-Omega_c0 -4332 2.6975000e+00 0.0000000e+00 0.0000000e+00 0 1 2.0685680e-02 -4332 -add p Particle D_s1- -20433 2.4596000e+00 1.0000033e-03 1.0000000e-02 -3 2 0.0000000e+00 -20433 +add p Particle anti-Omega_c0 -4332 2.6952000e+00 0.0000000e+00 0.0000000e+00 0 1 2.0685680e-02 -4332 +add p Particle D_s1- -20433 2.4595000e+00 1.0000033e-03 1.0000000e-02 -3 2 0.0000000e+00 -20433 add p Particle anti-deuteron -1000010020 1.8756130e+00 0.0000000e+00 0.0000000e+00 -3 0 0.0000000e+00 0 add p Particle cd_1 4103 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 2 0.0000000e+00 4103 add p Particle B_c1+ 10543 7.3000000e+00 0.0000000e+00 6.0000000e-02 3 2 0.0000000e+00 10543 -add p Particle D_s2*+ 435 2.5726000e+00 2.0000000e-02 6.0000000e-02 3 4 0.0000000e+00 435 -add p Particle Omega_b- 5332 6.1200000e+00 0.0000000e+00 0.0000000e+00 -3 1 4.6467831e-01 5332 +add p Particle D_s2*+ 435 2.5691000e+00 1.6900000e-02 6.0000000e-02 3 4 0.0000000e+00 435 +add p Particle Omega_b- 5332 6.0461000e+00 0.0000000e+00 0.0000000e+00 -3 1 4.9365900e-01 5332 add p Particle B_c0*- -10541 7.2500000e+00 0.0000000e+00 6.0000000e-02 -3 0 0.0000000e+00 -10541 -add p Particle Upsilon(4S) 300553 1.0579400e+01 2.0500001e-02 3.9000000e-02 0 2 0.0000000e+00 300553 -add p Particle Sigma_b*+ 5224 5.8290000e+00 0.0000000e+00 0.0000000e+00 3 3 0.0000000e+00 5224 -add p Particle anti-Delta0 -2114 1.2320000e+00 1.1800001e-01 1.4000000e-01 0 3 0.0000000e+00 -2114 +add p Particle Upsilon(4S) 300553 1.0579400e+01 2.0500000e-02 3.9000000e-02 0 2 0.0000000e+00 300553 +add p Particle Sigma_b*+ 5224 5.8303200e+00 9.4000000e-03 0.0000000e+00 3 3 0.0000000e+00 5224 +add p Particle anti-Delta0 -2114 1.2320000e+00 1.1700000e-01 1.4000000e-01 0 3 0.0000000e+00 -2114 add p Particle sd_0 3101 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 0 0.0000000e+00 3101 add p Particle anti-sd_0 -3101 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 0 0.0000000e+00 -3101 -add p Particle D_s1+ 20433 2.4596000e+00 1.0000033e-03 1.0000000e-02 3 2 0.0000000e+00 20433 -add p Particle Upsilon(2S) 100553 1.0023260e+01 3.2000002e-05 4.0000000e-04 0 2 0.0000000e+00 100553 -add p Particle eta' 331 9.5766000e-01 2.0500001e-04 2.0000000e-03 0 0 0.0000000e+00 331 -add p Particle anti-Sigma(1775)0 -3216 1.7750000e+00 1.1999999e-01 5.0000000e-01 0 5 0.0000000e+00 0 -add p Particle D_10 10423 2.4223000e+00 2.0400003e-02 2.7200000e-01 0 2 0.0000000e+00 10423 +add p Particle D_s1+ 20433 2.4595000e+00 1.0000033e-03 1.0000000e-02 3 2 0.0000000e+00 20433 +add p Particle Upsilon(2S) 100553 1.0023260e+01 3.1980000e-05 4.0000000e-04 0 2 0.0000000e+00 100553 +add p Particle eta' 331 9.5778000e-01 1.9600000e-04 2.0000000e-03 0 0 0.0000000e+00 331 +add p Particle anti-Sigma(1775)0 -3216 1.7750000e+00 1.2000000e-01 5.0000000e-01 0 5 0.0000000e+00 0 +add p Particle D_10 10423 2.4208000e+00 3.1700000e-02 2.7200000e-01 0 2 0.0000000e+00 10423 add p Particle Sigma_b*0 5214 5.8290000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 5214 -add p Particle K*- -323 8.9166000e-01 5.0800012e-02 2.3000000e-01 -3 2 0.0000000e+00 -323 +add p Particle K*- -323 8.9166000e-01 5.0300000e-02 2.3000000e-01 -3 2 0.0000000e+00 -323 add p Particle anti-nu_mu -14 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 -14 -add p Particle Sigma_b+ 5222 5.8078000e+00 6.5821220e-06 1.0000000e-04 3 1 0.0000000e+00 5222 +add p Particle Sigma_b+ 5222 5.8105600e+00 5.0000000e-03 1.0000000e-04 3 1 0.0000000e+00 5222 add p Particle anti-K_2*0 -315 1.4324000e+00 1.0900000e-01 7.0000000e-01 0 4 0.0000000e+00 -315 -add p Particle chi_c1 20443 3.5106600e+00 8.8999997e-04 1.0000000e-02 0 2 0.0000000e+00 20443 +add p Particle chi_c1 20443 3.5106700e+00 8.4000000e-04 1.0000000e-02 0 2 0.0000000e+00 20443 add p Particle D'_1+ 20413 2.4450000e+00 2.5027080e-01 3.0000000e-01 3 2 0.0000000e+00 20413 -add p Particle anti-Xi_b+ -5132 5.7924000e+00 0.0000000e+00 0.0000000e+00 3 1 4.2570529e-01 -5132 +add p Particle anti-Xi_b+ -5132 5.7970000e+00 0.0000000e+00 0.0000000e+00 3 1 4.2570529e-01 -5132 add p Particle anti-Xss -30363 1.8000000e+00 0.0000000e+00 1.0000000e+00 0 2 0.0000000e+00 -30363 -add p Particle D- -411 1.8696200e+00 0.0000000e+00 0.0000000e+00 -3 0 3.1178416e-01 -411 -add p Particle B*0 513 5.3251000e+00 6.5819970e-06 1.0000000e-04 0 2 0.0000000e+00 513 +add p Particle D- -411 1.8696500e+00 0.0000000e+00 0.0000000e+00 -3 0 3.1178416e-01 -411 +add p Particle B*0 513 5.3247000e+00 6.5819970e-06 1.0000000e-04 0 2 0.0000000e+00 513 add p Particle Xu+ 44 1.0000000e+00 0.0000000e+00 0.0000000e+00 3 0 0.0000000e+00 44 add p Particle B'_s10 20533 5.8590000e+00 2.5027080e-01 2.0000000e-02 0 2 0.0000000e+00 20533 add p Particle anti-Xi0 -3322 1.3148600e+00 0.0000000e+00 0.0000000e+00 0 1 8.6939813e+01 -3322 -add p Particle Xi*0 3324 1.5318000e+00 9.1000002e-03 5.0000000e-02 0 3 0.0000000e+00 3324 +add p Particle Xi*0 3324 1.5318000e+00 9.1000000e-03 5.0000000e-02 0 3 0.0000000e+00 3324 add p Particle anti-b-hadron -85 5.0000000e+00 0.0000000e+00 0.0000000e+00 1 0 3.8699999e-01 -85 add p Particle CLUSjet 97 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 97 add p Particle d 1 9.9000000e-03 0.0000000e+00 0.0000000e+00 -1 1 0.0000000e+00 1 -add p Particle psi(4415) 9020443 4.4210000e+00 6.1999976e-02 8.0000000e-02 0 2 0.0000000e+00 0 +add p Particle psi(4415) 9020443 4.4210000e+00 6.2000000e-02 8.0000000e-02 0 2 0.0000000e+00 0 add p Particle B_0*0 10511 5.7380000e+00 1.4993444e-01 2.0000000e-01 0 0 0.0000000e+00 10511 -add p Particle h'_1 10333 1.4000000e+00 0.0000000e+00 1.0000000e-02 0 2 0.0000000e+00 10333 -add p Particle anti-Xi_c- -4232 2.4679000e+00 0.0000000e+00 0.0000000e+00 -3 1 1.3250827e-01 -4232 +add p Particle h'_1 10333 1.4160000e+00 9.0000000e-02 1.0000000e-02 0 2 0.0000000e+00 10333 +add p Particle anti-Xi_c- -4232 2.4679300e+00 0.0000000e+00 0.0000000e+00 -3 1 1.3250827e-01 -4232 add p Particle anti-b -5 5.0000000e+00 0.0000000e+00 0.0000000e+00 1 1 0.0000000e+00 -5 add p Particle cu_0 4201 0.0000000e+00 0.0000000e+00 0.0000000e+00 4 0 0.0000000e+00 4201 -add p Particle K_1- -10323 1.2720000e+00 8.9999999e-02 2.0000000e-01 -3 2 0.0000000e+00 -10323 -add p Particle f_1 20223 1.2818000e+00 2.4300002e-02 5.0000000e-02 0 2 0.0000000e+00 20223 -add p Particle omega(2S) 100223 1.4250000e+00 2.1500001e-01 4.0000000e-01 0 2 0.0000000e+00 0 -add p Particle Sigma*+ 3224 1.3828000e+00 3.5799992e-02 3.5000000e-02 3 3 0.0000000e+00 3224 +add p Particle K_1- -10323 1.2720000e+00 9.0000000e-02 2.0000000e-01 -3 2 0.0000000e+00 -10323 +add p Particle f_1 20223 1.2819000e+00 2.2700000e-02 5.0000000e-02 0 2 0.0000000e+00 20223 +add p Particle omega(2S) 100223 1.4250000e+00 2.1500000e-01 4.0000000e-01 0 2 0.0000000e+00 0 +add p Particle Sigma*+ 3224 1.3828000e+00 3.6000000e-02 3.5000000e-02 3 3 0.0000000e+00 3224 add p Particle bu_0 5201 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 0 0.0000000e+00 5201 -add p Particle a_1- -20213 1.2300000e+00 4.1999998e-01 6.0000000e-01 -3 2 0.0000000e+00 -20213 -add p Particle f'_0 30221 1.3500000e+00 3.5000005e-01 3.5000000e-01 0 0 0.0000000e+00 10331 -add p Particle anti-K''*0 -30313 1.7170000e+00 3.2000002e-01 7.0000000e-01 0 2 0.0000000e+00 0 -add p Particle rho(3S)- -30213 1.7200000e+00 2.4999998e-01 5.0000000e-01 -3 2 0.0000000e+00 0 -add p Particle K_2*+ 325 1.4256000e+00 9.8500006e-02 7.0000000e-01 3 4 0.0000000e+00 325 -add p Particle D'_s1- -10433 2.5353000e+00 1.0000033e-03 1.0000000e-02 -3 2 0.0000000e+00 -10433 -add p Particle D'_s1+ 10433 2.5353000e+00 1.0000033e-03 1.0000000e-02 3 2 0.0000000e+00 10433 -add p Particle K'_1+ 20323 1.4030000e+00 1.7399999e-01 4.0000000e-01 3 2 0.0000000e+00 20323 -add p Particle anti-Omega_b+ -5332 6.1200000e+00 0.0000000e+00 0.0000000e+00 3 1 4.6467831e-01 -5332 -add p Particle b_1+ 10213 1.2295000e+00 1.4200001e-01 2.5000000e-01 3 2 0.0000000e+00 10213 -add p Particle rho- -213 7.7549000e-01 1.4940001e-01 4.8000000e-01 -3 2 0.0000000e+00 -213 +add p Particle a_1- -20213 1.2300000e+00 4.2000000e-01 6.0000000e-01 -3 2 0.0000000e+00 -20213 +add p Particle f'_0 30221 1.3500000e+00 3.5000000e-01 3.5000000e-01 0 0 0.0000000e+00 10331 +add p Particle anti-K''*0 -30313 1.7180000e+00 3.2000000e-01 7.0000000e-01 0 2 0.0000000e+00 0 +add p Particle rho(3S)- -30213 1.7200000e+00 2.5000000e-01 5.0000000e-01 -3 2 0.0000000e+00 0 +add p Particle K_2*+ 325 1.4256000e+00 9.8500000e-02 7.0000000e-01 3 4 0.0000000e+00 325 +add p Particle D'_s1- -10433 2.5351100e+00 9.2000000e-04 1.0000000e-02 -3 2 0.0000000e+00 -10433 +add p Particle D'_s1+ 10433 2.5351100e+00 9.2000000e-04 1.0000000e-02 3 2 0.0000000e+00 10433 +add p Particle K'_1+ 20323 1.4030000e+00 1.7400000e-01 4.0000000e-01 3 2 0.0000000e+00 20323 +add p Particle anti-Omega_b+ -5332 6.0461000e+00 0.0000000e+00 0.0000000e+00 3 1 4.6467831e-01 -5332 +add p Particle b_1+ 10213 1.2295000e+00 1.4200000e-01 2.5000000e-01 3 2 0.0000000e+00 10213 +add p Particle rho- -213 7.7526000e-01 1.4910000e-01 4.8000000e-01 -3 2 0.0000000e+00 -213 add p Particle B_c*- -543 6.6020000e+00 0.0000000e+00 0.0000000e+00 -3 2 0.0000000e+00 -543 -add p Particle Upsilon(3S) 200553 1.0355200e+01 2.0299998e-05 2.6000000e-04 0 2 0.0000000e+00 200553 -add p Particle B*+ 523 5.3251000e+00 6.5819970e-06 1.0000000e-04 3 2 0.0000000e+00 523 +add p Particle Upsilon(3S) 200553 1.0355200e+01 2.0320000e-05 2.6000000e-04 0 2 0.0000000e+00 200553 +add p Particle B*+ 523 5.3247000e+00 6.5819970e-06 1.0000000e-04 3 2 0.0000000e+00 523 add p Particle Sigma(1660)0 13212 1.6600000e+00 1.0000000e-01 4.0000000e-01 0 1 0.0000000e+00 0 add p Particle anti-cu_0 -4201 0.0000000e+00 0.0000000e+00 0.0000000e+00 -4 0 0.0000000e+00 -4201 add p Particle su_1 3203 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 2 0.0000000e+00 3203 -add p Particle f_2 225 1.2751000e+00 1.8509998e-01 2.7000000e-01 0 4 0.0000000e+00 225 +add p Particle f_2 225 1.2755000e+00 1.8670000e-01 2.7000000e-01 0 4 0.0000000e+00 225 add p Particle anti-c-hadron -84 2.0000000e+00 0.0000000e+00 0.0000000e+00 -2 0 1.0000000e-01 -84 -add p Particle a_2- -215 1.3183000e+00 1.0700000e-01 5.0000000e-01 -3 4 0.0000000e+00 -215 +add p Particle a_2- -215 1.3169000e+00 1.0700000e-01 5.0000000e-01 -3 4 0.0000000e+00 -215 add p Particle c-hadron 84 2.0000000e+00 0.0000000e+00 0.0000000e+00 2 0 1.0000000e-01 84 add p Particle anti-cd_1 -4103 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 2 0.0000000e+00 -4103 add p Particle b' 7 4.0000000e+02 0.0000000e+00 0.0000000e+00 -1 1 0.0000000e+00 7 -add p Particle anti-Sigma_b*- -5224 5.8290000e+00 0.0000000e+00 0.0000000e+00 -3 3 0.0000000e+00 -5224 +add p Particle anti-Sigma_b*- -5224 5.8303200e+00 9.4000000e-03 0.0000000e+00 -3 3 0.0000000e+00 -5224 add p Particle anti-t -6 1.7500000e+02 1.3981600e+00 1.3981560e+01 -2 1 0.0000000e+00 -6 add p Particle t 6 1.7500000e+02 1.3981600e+00 1.3981560e+01 2 1 0.0000000e+00 6 -add p Particle pi+ 211 1.3957018e-01 0.0000000e+00 0.0000000e+00 3 0 7.8044971e+03 211 -add p Particle anti-Lambda(1690)0 -13124 1.6900000e+00 6.0000018e-02 3.0000000e-01 0 3 0.0000000e+00 0 -add p Particle Delta0 2114 1.2320000e+00 1.1800001e-01 1.4000000e-01 0 3 0.0000000e+00 2114 -add p Particle B- -521 5.2791500e+00 0.0000000e+00 0.0000000e+00 -3 0 4.9106005e-01 -521 +add p Particle pi+ 211 1.3957061e-01 0.0000000e+00 0.0000000e+00 3 0 7.8044971e+03 211 +add p Particle anti-Lambda(1690)0 -13124 1.6900000e+00 6.0000000e-02 3.0000000e-01 0 3 0.0000000e+00 0 +add p Particle Delta0 2114 1.2320000e+00 1.1700000e-01 1.4000000e-01 0 3 0.0000000e+00 2114 +add p Particle B- -521 5.2793300e+00 0.0000000e+00 0.0000000e+00 -3 0 4.9106005e-01 -521 add p Particle ud_1 2103 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 2 0.0000000e+00 2103 add p Particle Z''0 33 9.0000000e+02 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 33 add p Particle anti-ss_1 -3303 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 2 0.0000000e+00 -3303 add p Particle anti-cd_0 -4101 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 0 0.0000000e+00 -4101 add p Particle anti-cs_0 -4301 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 0 0.0000000e+00 -4301 -add p Particle D_s+ 431 1.9684900e+00 0.0000000e+00 0.0000000e+00 3 0 1.4989623e-01 431 -add p Particle anti-D_2*0 -425 2.4611000e+00 4.3000001e-02 3.0900000e-01 0 4 0.0000000e+00 -425 +add p Particle D_s+ 431 1.9683400e+00 0.0000000e+00 0.0000000e+00 3 0 1.4989623e-01 431 +add p Particle anti-D_2*0 -425 2.4607000e+00 4.7500000e-02 3.0900000e-01 0 4 0.0000000e+00 -425 add p Particle L- 17 4.0000000e+02 0.0000000e+00 0.0000000e+00 -3 1 0.0000000e+00 17 -add p Particle omega 223 7.8265000e-01 8.4899999e-03 1.8000000e-01 0 2 0.0000000e+00 223 -add p Particle e- 11 5.1099891e-04 0.0000000e+00 0.0000000e+00 -3 1 0.0000000e+00 11 -add p Particle a_20 115 1.3183000e+00 1.0700000e-01 5.0000000e-01 0 4 0.0000000e+00 115 +add p Particle omega 223 7.8265000e-01 8.4900000e-03 1.8000000e-01 0 2 0.0000000e+00 223 +add p Particle e- 11 5.1099895e-04 0.0000000e+00 0.0000000e+00 -3 1 0.0000000e+00 11 +add p Particle a_20 115 1.3169000e+00 1.0700000e-01 5.0000000e-01 0 4 0.0000000e+00 115 add p Particle t' 8 5.0000000e+02 0.0000000e+00 0.0000000e+00 2 1 0.0000000e+00 8 add p Particle cs_0 4301 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 0 0.0000000e+00 4301 -add p Particle pi(2S)+ 100211 1.3000000e+00 3.9999988e-01 5.0000000e-01 3 0 0.0000000e+00 0 +add p Particle pi(2S)+ 100211 1.3000000e+00 4.0000000e-01 5.0000000e-01 3 0 0.0000000e+00 0 add p Particle cu_1 4203 0.0000000e+00 0.0000000e+00 0.0000000e+00 4 2 0.0000000e+00 4203 add p Particle Sigma_b0 5212 5.8078000e+00 6.5821220e-06 1.0000000e-04 0 1 0.0000000e+00 5212 add p Particle anti-su_0 -3201 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 0 0.0000000e+00 -3201 add p Particle anti-D'_10 -20423 2.4450000e+00 2.5027080e-01 3.0000000e-01 0 2 0.0000000e+00 -20423 add p Particle anti-Sigma_c- -4212 2.4529000e+00 1.6455309e-03 2.4680000e-02 -3 1 0.0000000e+00 -4212 -add p Particle chi_b1(2P) 120553 1.0255500e+01 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 120553 +add p Particle chi_b1(2P) 120553 1.0255460e+01 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 120553 add p Particle bd_0 5101 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 0 0.0000000e+00 5101 add p Particle Omega_cc*+ 4434 3.8246600e+00 0.0000000e+00 0.0000000e+00 3 3 0.0000000e+00 4434 -add p Particle anti-Lambda(1670)0 -33122 1.6700000e+00 3.5000005e-02 1.8000000e-01 0 1 0.0000000e+00 0 +add p Particle anti-Lambda(1670)0 -33122 1.6700000e+00 3.5000000e-02 1.8000000e-01 0 1 0.0000000e+00 0 add p Particle nu_e 12 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 12 add p Particle CMshower 94 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 94 add p Particle su_0 3201 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 0 0.0000000e+00 3201 add p Particle Omega_b*- 5334 6.1300000e+00 0.0000000e+00 0.0000000e+00 -3 3 0.0000000e+00 5334 add p Particle eta_b(2S) 100551 9.9970000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 0 -add p Particle h_c 10443 3.5259300e+00 0.0000000e+00 2.0000000e-02 0 2 0.0000000e+00 10443 -add p Particle W+ 24 8.0398000e+01 2.1400000e+00 1.0000000e+01 3 2 0.0000000e+00 24 -add p Particle a_2+ 215 1.3183000e+00 1.0700000e-01 5.0000000e-01 3 4 0.0000000e+00 215 -add p Particle K_0*- -10321 1.4200000e+00 2.7000000e-01 6.0000000e-01 -3 0 0.0000000e+00 -10321 +add p Particle h_c 10443 3.5253800e+00 7.0000000e-04 2.0000000e-02 0 2 0.0000000e+00 10443 +add p Particle W+ 24 8.0379000e+01 2.0850000e+00 1.0000000e+01 3 2 0.0000000e+00 24 +add p Particle a_2+ 215 1.3169000e+00 1.0700000e-01 5.0000000e-01 3 4 0.0000000e+00 215 +add p Particle K_0*- -10321 1.4300000e+00 2.7000000e-01 6.0000000e-01 -3 0 0.0000000e+00 -10321 add p Particle Upsilon_3(1D) 557 1.0159900e+01 0.0000000e+00 0.0000000e+00 0 6 0.0000000e+00 557 add p Particle eta_b2(1D) 10555 1.0157000e+01 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 10555 add p Particle cluster 91 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 91 -add p Particle D*0 423 2.0069700e+00 6.5821023e-06 3.0000000e-04 0 2 0.0000000e+00 423 -add p Particle Sigma_c*0 4114 2.5180000e+00 1.6100002e-02 9.1900000e-02 0 3 0.0000000e+00 4114 -add p Particle K_3*- -327 1.7760000e+00 1.5900001e-01 7.0000000e-01 -3 6 0.0000000e+00 0 +add p Particle D*0 423 2.0068500e+00 6.5821023e-06 3.0000000e-04 0 2 0.0000000e+00 423 +add p Particle Sigma_c*0 4114 2.5184800e+00 1.5300000e-02 9.1900000e-02 0 3 0.0000000e+00 4114 +add p Particle K_3*- -327 1.7760000e+00 1.5900000e-01 7.0000000e-01 -3 6 0.0000000e+00 0 add p Particle anti-rndmflav -82 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 -82 -add p Particle anti-Sigma_c*0 -4114 2.5180000e+00 1.6100002e-02 9.1900000e-02 0 3 0.0000000e+00 -4114 -add p Particle anti-K_10 -10313 1.2720000e+00 8.9999999e-02 2.0000000e-01 0 2 0.0000000e+00 -10313 -add p Particle omega(1650) 30223 1.6700000e+00 3.1499993e-01 0.0000000e+00 0 2 0.0000000e+00 0 +add p Particle anti-Sigma_c*0 -4114 2.5184800e+00 1.5300000e-02 9.1900000e-02 0 3 0.0000000e+00 -4114 +add p Particle anti-K_10 -10313 1.2720000e+00 9.0000000e-02 2.0000000e-01 0 2 0.0000000e+00 -10313 +add p Particle omega(1650) 30223 1.6700000e+00 3.1500000e-01 0.0000000e+00 0 2 0.0000000e+00 0 add p Particle anti-t' -8 5.0000000e+02 0.0000000e+00 0.0000000e+00 -2 1 0.0000000e+00 -8 -add p Particle Lambda_b0 5122 5.6202000e+00 0.0000000e+00 0.0000000e+00 0 1 4.1371359e-01 5122 +add p Particle Lambda_b0 5122 5.6196000e+00 0.0000000e+00 0.0000000e+00 0 1 4.1371359e-01 5122 add p Particle chi_b0(3P) 210551 1.0500700e+01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 210551 add p Particle anti-Omega+ -3334 1.6724500e+00 0.0000000e+00 0.0000000e+00 3 3 2.4612961e+01 -3334 add p Particle bs_1 5303 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 2 0.0000000e+00 5303 add p Particle tritium 1000010030 2.8092500e+00 0.0000000e+00 0.0000000e+00 3 0 0.0000000e+00 0 -add p Particle Lambda(1670)0 33122 1.6700000e+00 3.5000005e-02 1.8000000e-01 0 1 0.0000000e+00 0 +add p Particle Lambda(1670)0 33122 1.6700000e+00 3.5000000e-02 1.8000000e-01 0 1 0.0000000e+00 0 add p Particle anti-cc_1 -4403 0.0000000e+00 0.0000000e+00 0.0000000e+00 -4 2 0.0000000e+00 -4403 -add p Particle anti-Sigma(1670)0 -13214 1.6700000e+00 6.0000018e-02 3.0000000e-01 0 3 0.0000000e+00 0 -add p Particle B_s0 531 5.3663000e+00 0.0000000e+00 0.0000000e+00 0 0 4.4129450e-01 531 +add p Particle anti-Sigma(1670)0 -13214 1.6700000e+00 6.0000000e-02 3.0000000e-01 0 3 0.0000000e+00 0 +add p Particle B_s0 531 5.3668800e+00 0.0000000e+00 0.0000000e+00 0 0 4.4129450e-01 531 add p Particle A0 36 3.1000000e+02 7.0022575e+00 0.0000000e+00 0 0 0.0000000e+00 36 add p Particle anti-Lambda_c(2625)- -4124 2.6266000e+00 0.0000000e+00 2.8500000e-02 -3 3 0.0000000e+00 0 add p Particle THRUaxis 96 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 96 -add p Particle chi_b2(2P) 100555 1.0268600e+01 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 100555 +add p Particle chi_b2(2P) 100555 1.0268650e+01 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 100555 add p Particle SPHEaxis 95 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 95 add p Particle B'_c1- -20543 7.4000000e+00 0.0000000e+00 2.0000000e-01 -3 2 0.0000000e+00 -20543 add p Particle string 92 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 92 -add p Particle eta(2S) 100221 1.2940000e+00 5.5000021e-02 2.0000000e-01 0 0 0.0000000e+00 0 -add p Particle Xi'_c0 4312 2.5780000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 4312 +add p Particle eta(2S) 100221 1.2940000e+00 5.5000000e-02 2.0000000e-01 0 0 0.0000000e+00 0 +add p Particle Xi'_c0 4312 2.5792000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 4312 add p Particle cc_1 4403 0.0000000e+00 0.0000000e+00 0.0000000e+00 4 2 0.0000000e+00 4403 -add p Particle anti-Xi_c0 -4132 2.4710000e+00 0.0000000e+00 0.0000000e+00 0 1 3.3576755e-02 -4132 +add p Particle anti-Xi_c0 -4132 2.4709100e+00 0.0000000e+00 0.0000000e+00 0 1 4.5921780e-02 -4132 add p Particle anti-D(2S)0 -100421 2.5800000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 0 -add p Particle a_00 9000111 9.8470000e-01 7.4999997e-02 5.0000000e-02 0 0 0.0000000e+00 10111 -add p Particle Delta+ 2214 1.2320000e+00 1.1800001e-01 1.4000000e-01 3 3 0.0000000e+00 2214 +add p Particle a_00 9000111 9.8000000e-01 7.5000000e-02 5.0000000e-02 0 0 0.0000000e+00 10111 +add p Particle Delta+ 2214 1.2320000e+00 1.1700000e-01 1.4000000e-01 3 3 0.0000000e+00 2214 add p Particle sd_1 3103 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 2 0.0000000e+00 3103 -add p Particle pi(2S)- -100211 1.3000000e+00 3.9999988e-01 5.0000000e-01 -3 0 0.0000000e+00 0 +add p Particle pi(2S)- -100211 1.3000000e+00 4.0000000e-01 5.0000000e-01 -3 0 0.0000000e+00 0 add p Particle bb_1 5503 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 2 0.0000000e+00 5503 -add p Particle K_3*+ 327 1.7760000e+00 1.5900001e-01 7.0000000e-01 3 6 0.0000000e+00 0 +add p Particle K_3*+ 327 1.7760000e+00 1.5900000e-01 7.0000000e-01 3 6 0.0000000e+00 0 add p Particle anti-bs_1 -5303 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 2 0.0000000e+00 -5303 add p Particle cs_1 4303 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 2 0.0000000e+00 4303 add p Particle anti-bu_1 -5203 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 2 0.0000000e+00 -5203 -add p Particle phi(1680) 100333 1.6800000e+00 1.5000001e-01 0.0000000e+00 0 2 0.0000000e+00 0 -add p Particle Sigma_c++ 4222 2.4540200e+00 2.2300002e-03 2.7000000e-02 6 1 0.0000000e+00 4222 +add p Particle phi(1680) 100333 1.6800000e+00 1.5000000e-01 0.0000000e+00 0 2 0.0000000e+00 0 +add p Particle Sigma_c++ 4222 2.4539700e+00 1.8900000e-03 2.7000000e-02 6 1 0.0000000e+00 4222 add p Particle Xss 30363 1.8000000e+00 0.0000000e+00 1.0000000e+00 0 2 0.0000000e+00 30363 add p Particle anti-Omega_cc*- -4434 3.8246600e+00 0.0000000e+00 0.0000000e+00 -3 3 0.0000000e+00 -4434 add p Particle anti-sd_1 -3103 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 2 0.0000000e+00 -3103 add p Particle W'+ 34 5.0000000e+02 0.0000000e+00 0.0000000e+00 3 2 0.0000000e+00 34 -add p Particle Sigma(1670)0 13214 1.6700000e+00 6.0000018e-02 3.0000000e-01 0 3 0.0000000e+00 0 +add p Particle Sigma(1670)0 13214 1.6700000e+00 6.0000000e-02 3.0000000e-01 0 3 0.0000000e+00 0 add p Particle bd_1 5103 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 2 0.0000000e+00 5103 -add p Particle anti-B0 -511 5.2795300e+00 0.0000000e+00 0.0000000e+00 0 0 4.5718350e-01 -511 -add p Particle phi 333 1.0194550e+00 4.2600002e-03 3.2000000e-02 0 2 0.0000000e+00 333 -add p Particle B0 511 5.2795300e+00 0.0000000e+00 0.0000000e+00 0 0 4.5718350e-01 511 +add p Particle anti-B0 -511 5.2796400e+00 0.0000000e+00 0.0000000e+00 0 0 4.5718350e-01 -511 +add p Particle phi 333 1.0194610e+00 4.2490000e-03 3.2000000e-02 0 2 0.0000000e+00 333 +add p Particle B0 511 5.2796400e+00 0.0000000e+00 0.0000000e+00 0 0 4.5718350e-01 511 add p Particle system 90 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 90 -add p Particle Xi_c*0 4314 2.6461000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 4314 -add p Particle anti-Xi_c*- -4324 2.6466000e+00 0.0000000e+00 0.0000000e+00 -3 3 0.0000000e+00 -4324 -add p Particle Lambda(1600)0 23122 1.6000000e+00 1.5000001e-01 2.5000000e-01 0 1 0.0000000e+00 0 +add p Particle Xi_c*0 4314 2.6463800e+00 2.3500000e-03 0.0000000e+00 0 3 0.0000000e+00 4314 +add p Particle anti-Xi_c*- -4324 2.6455700e+00 2.1400000e-03 0.0000000e+00 -3 3 0.0000000e+00 -4324 +add p Particle Lambda(1600)0 23122 1.6000000e+00 1.5000000e-01 2.5000000e-01 0 1 0.0000000e+00 0 add p Particle anti-Lambda(1520)0 -3124 1.5195000e+00 1.5600000e-02 1.8000000e-01 0 3 0.0000000e+00 0 -add p Particle anti-B_s*0 -533 5.4128000e+00 6.5821220e-06 1.0000000e-04 0 2 0.0000000e+00 -533 -add p Particle Higgs0 25 1.1500000e+02 7.0022575e+00 0.0000000e+00 0 0 0.0000000e+00 25 +add p Particle anti-B_s*0 -533 5.4154000e+00 6.5821220e-06 1.0000000e-04 0 2 0.0000000e+00 -533 +add p Particle Higgs0 25 1.2510000e+02 7.0022575e+00 0.0000000e+00 0 0 0.0000000e+00 25 add p Particle D(2S)0 100421 2.5800000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 0 add p Particle Xi_cc*++ 4424 3.6564800e+00 0.0000000e+00 0.0000000e+00 6 3 0.0000000e+00 4424 add p Particle anti-R0 -41 5.0000000e+03 0.0000000e+00 4.1729150e+03 0 2 0.0000000e+00 -41 -add p Particle psi(3770) 30443 3.7729200e+00 2.7199998e-02 3.0000000e-02 0 2 0.0000000e+00 30443 -add p Particle B_2*- -525 5.7469000e+00 5.0245206e-02 2.0000000e-01 -3 4 0.0000000e+00 -525 -add p Particle anti-Xi*0 -3324 1.5318000e+00 9.1000002e-03 5.0000000e-02 0 3 0.0000000e+00 -3324 -add p Particle rho+ 213 7.7549000e-01 1.4940001e-01 4.8000000e-01 3 2 0.0000000e+00 213 -add p Particle K'*+ 100323 1.4140000e+00 2.3199996e-01 6.0000000e-01 3 2 0.0000000e+00 0 +add p Particle psi(3770) 30443 3.7731300e+00 2.7200000e-02 3.0000000e-02 0 2 0.0000000e+00 30443 +add p Particle B_2*- -525 5.7372000e+00 2.0000000e-02 2.0000000e-01 -3 4 0.0000000e+00 -525 +add p Particle anti-Xi*0 -3324 1.5318000e+00 9.1000000e-03 5.0000000e-02 0 3 0.0000000e+00 -3324 +add p Particle rho+ 213 7.7526000e-01 1.4910000e-01 4.8000000e-01 3 2 0.0000000e+00 213 +add p Particle K'*+ 100323 1.4210000e+00 2.3600000e-01 6.0000000e-01 3 2 0.0000000e+00 0 add p Particle R0 41 5.0000000e+03 0.0000000e+00 4.1729150e+03 0 2 0.0000000e+00 41 add p Particle Xsu 30353 1.6000000e+00 0.0000000e+00 1.0000000e+00 3 2 0.0000000e+00 30353 add p Particle anti-Xsu -30353 1.6000000e+00 0.0000000e+00 1.0000000e+00 -3 2 0.0000000e+00 -30353 add p Particle anti-Sigma+ -3112 1.1974490e+00 0.0000000e+00 0.0000000e+00 3 1 4.4339305e+01 -3112 add p Particle Lambda_c(2625)+ 4124 2.6266000e+00 0.0000000e+00 2.8500000e-02 3 3 0.0000000e+00 0 -add p Particle Xi'_c+ 4322 2.5757000e+00 0.0000000e+00 0.0000000e+00 3 1 0.0000000e+00 4322 -add p Particle anti-K_3*0 -317 1.7760000e+00 1.5900001e-01 7.0000000e-01 0 6 0.0000000e+00 0 +add p Particle Xi'_c+ 4322 2.5784000e+00 0.0000000e+00 0.0000000e+00 3 1 0.0000000e+00 4322 +add p Particle anti-K_3*0 -317 1.7760000e+00 1.5900000e-01 7.0000000e-01 0 6 0.0000000e+00 0 add p Particle Lambda(1520)0 3124 1.5195000e+00 1.5600000e-02 1.8000000e-01 0 3 0.0000000e+00 0 add p Particle anti-B_s0*0 -10531 5.8410000e+00 1.4993444e-01 6.5000000e-02 0 0 0.0000000e+00 -10531 -add p Particle Sigma(1775)0 3216 1.7750000e+00 1.1999999e-01 5.0000000e-01 0 5 0.0000000e+00 0 -add p Particle tau+ -15 1.7768400e+00 0.0000000e+00 0.0000000e+00 3 1 8.7119688e-02 -15 +add p Particle Sigma(1775)0 3216 1.7750000e+00 1.2000000e-01 5.0000000e-01 0 5 0.0000000e+00 0 +add p Particle tau+ -15 1.7768600e+00 0.0000000e+00 0.0000000e+00 3 1 8.7119688e-02 -15 add p Particle anti-Sigma- -3222 1.1893700e+00 0.0000000e+00 0.0000000e+00 -3 1 2.4037359e+01 -3222 add p Particle K_4*0 319 2.0450000e+00 1.9800000e-01 2.0000000e-01 0 8 0.0000000e+00 0 add p Particle D'_1- -20413 2.4450000e+00 2.5027080e-01 3.0000000e-01 -3 2 0.0000000e+00 -20413 -add p Particle B_2*+ 525 5.7469000e+00 5.0245206e-02 2.0000000e-01 3 4 0.0000000e+00 525 +add p Particle B_2*+ 525 5.7372000e+00 2.0000000e-02 2.0000000e-01 3 4 0.0000000e+00 525 add p Particle anti-He3 -1000020030 2.8092300e+00 0.0000000e+00 0.0000000e+00 -6 0 0.0000000e+00 0 -add p Particle anti-K'_10 -20313 1.4030000e+00 1.7399999e-01 4.0000000e-01 0 2 0.0000000e+00 -20313 +add p Particle anti-K'_10 -20313 1.4030000e+00 1.7400000e-01 4.0000000e-01 0 2 0.0000000e+00 -20313 add p Particle Z(4430)- -9042413 4.4330000e+00 3.1700598e-04 0.0000000e+00 -3 2 0.0000000e+00 -9042413 -add p Particle D_2*+ 415 2.4601000e+00 3.6999998e-02 3.1200000e-01 3 4 0.0000000e+00 415 -add p Particle Z0 23 9.1187600e+01 2.4951996e+00 1.0000000e+01 0 2 0.0000000e+00 23 +add p Particle D_2*+ 415 2.4654000e+00 4.6700000e-02 3.1200000e-01 3 4 0.0000000e+00 415 +add p Particle Z0 23 9.1187600e+01 2.4952000e+00 1.0000000e+01 0 2 0.0000000e+00 23 add p Particle Xi0 3322 1.3148600e+00 0.0000000e+00 0.0000000e+00 0 1 8.6939813e+01 3322 -add p Particle chi_c2 445 3.5562000e+00 2.0299998e-03 6.0000000e-03 0 4 0.0000000e+00 445 +add p Particle chi_c2 445 3.5561700e+00 1.9700000e-03 6.0000000e-03 0 4 0.0000000e+00 445 add p Particle B_s0*0 10531 5.8410000e+00 1.4993444e-01 6.5000000e-02 0 0 0.0000000e+00 10531 add p Particle anti-Omega_b*+ -5334 6.1300000e+00 0.0000000e+00 0.0000000e+00 3 3 0.0000000e+00 -5334 add p Particle Xsd 30343 1.6000000e+00 0.0000000e+00 1.0000000e+00 0 2 0.0000000e+00 30343 add p Particle bc_1 5403 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 2 0.0000000e+00 5403 add p Particle anti-bc_1 -5403 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 2 0.0000000e+00 -5403 -add p Particle Xi_c*+ 4324 2.6466000e+00 0.0000000e+00 0.0000000e+00 3 3 0.0000000e+00 4324 -add p Particle anti-Sigma_b- -5222 5.8078000e+00 6.5821220e-06 1.0000000e-04 -3 1 0.0000000e+00 -5222 +add p Particle Xi_c*+ 4324 2.6455700e+00 2.1400000e-03 0.0000000e+00 3 3 0.0000000e+00 4324 +add p Particle anti-Sigma_b- -5222 5.8105600e+00 5.0000000e-03 1.0000000e-04 -3 1 0.0000000e+00 -5222 add p Particle bs_0 5301 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 0 0.0000000e+00 5301 -add p Particle chi_b1 20553 9.8927000e+00 9.8928000e+00 0.0000000e+00 0 2 0.0000000e+00 20553 -add p Particle Omega_c0 4332 2.6975000e+00 0.0000000e+00 0.0000000e+00 0 1 2.0685680e-02 4332 +add p Particle chi_b1 20553 9.8928780e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 20553 +add p Particle Omega_c0 4332 2.6952000e+00 0.0000000e+00 0.0000000e+00 0 1 2.0685680e-02 4332 add p Particle chi_b0(2P) 110551 1.0232500e+01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 110551 -add p Particle anti-D0 -421 1.8648400e+00 0.0000000e+00 0.0000000e+00 0 0 1.2294489e-01 -421 +add p Particle anti-D0 -421 1.8648300e+00 0.0000000e+00 0.0000000e+00 0 0 1.2294489e-01 -421 add p Particle anti-Xsd -30343 1.6000000e+00 0.0000000e+00 1.0000000e+00 0 2 0.0000000e+00 -30343 add p Particle anti-cu_1 -4203 0.0000000e+00 0.0000000e+00 0.0000000e+00 -4 2 0.0000000e+00 -4203 -add p Particle K0 311 4.9761400e-01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 311 -add p Particle psi(2S) 100443 3.6860900e+00 3.1700003e-04 8.0000000e-04 0 2 0.0000000e+00 100443 -add p Particle anti-B_2*0 -515 5.7469000e+00 5.0245206e-02 2.0000000e-01 0 4 0.0000000e+00 -515 +add p Particle K0 311 4.9761100e-01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 311 +add p Particle psi(2S) 100443 3.6860970e+00 2.9400000e-04 8.0000000e-04 0 2 0.0000000e+00 100443 +add p Particle anti-B_2*0 -515 5.7395000e+00 2.4200000e-02 2.0000000e-01 0 4 0.0000000e+00 -515 add p Particle mu- 13 1.0565837e-01 0.0000000e+00 0.0000000e+00 -3 1 6.5864973e+05 13 add p Particle anti-Xi'_b+ -5312 5.9600000e+00 6.5821220e-06 1.0000000e-04 3 1 0.0000000e+00 -5312 add p Particle anti-tritium -1000010030 2.8092500e+00 0.0000000e+00 0.0000000e+00 -3 0 0.0000000e+00 0 @@ -386,127 +403,127 @@ add p Particle u 2 5.6000000e-03 0.0000000e add p Particle Xi_b*0 5324 5.9700000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 5324 add p Particle ud_0 2101 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 0 0.0000000e+00 2101 add p Particle anti-bc_0 -5401 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 0 0.0000000e+00 -5401 -add p Particle K_3*0 317 1.7760000e+00 1.5900001e-01 7.0000000e-01 0 6 0.0000000e+00 0 +add p Particle K_3*0 317 1.7760000e+00 1.5900000e-01 7.0000000e-01 0 6 0.0000000e+00 0 add p Particle anti-ud_0 -2101 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 0 0.0000000e+00 -2101 -add p Particle rho(3S)+ 30213 1.7200000e+00 2.4999998e-01 5.0000000e-01 3 2 0.0000000e+00 0 +add p Particle rho(3S)+ 30213 1.7200000e+00 2.5000000e-01 5.0000000e-01 3 2 0.0000000e+00 0 add p Particle anti-Omega_cc- -4432 3.7866300e+00 0.0000000e+00 0.0000000e+00 -3 1 1.0000000e-01 -4432 add p Particle Sigma+ 3222 1.1893700e+00 0.0000000e+00 0.0000000e+00 3 1 2.4037359e+01 3222 -add p Particle anti-Sigma_c0 -4112 2.4537600e+00 2.1999997e-03 2.4000000e-02 0 1 0.0000000e+00 -4112 +add p Particle anti-Sigma_c0 -4112 2.4537500e+00 1.8300000e-03 2.4000000e-02 0 1 0.0000000e+00 -4112 add p Particle Sigma_c+ 4212 2.4529000e+00 1.6455309e-03 2.4680000e-02 3 1 0.0000000e+00 4212 add p Particle He3 1000020030 2.8092300e+00 0.0000000e+00 0.0000000e+00 6 0 0.0000000e+00 0 add p Particle anti-Lambda0 -3122 1.1156830e+00 0.0000000e+00 0.0000000e+00 0 1 7.8875396e+01 -3122 -add p Particle D0 421 1.8648400e+00 0.0000000e+00 0.0000000e+00 0 0 1.2294489e-01 421 +add p Particle D0 421 1.8648300e+00 0.0000000e+00 0.0000000e+00 0 0 1.2294489e-01 421 add p Particle Upsilon_2(1D) 20555 1.0156200e+01 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 20555 -add p Particle psi(4040) 9000443 4.0390000e+00 8.0000005e-02 1.0000000e-01 0 2 0.0000000e+00 0 +add p Particle psi(4040) 9000443 4.0390000e+00 8.0000000e-02 1.0000000e-01 0 2 0.0000000e+00 0 add p Particle B_s0L 350 5.3663000e+00 0.0000000e+00 0.0000000e+00 0 0 4.2184546e-01 0 add p Particle Xi'_b- 5312 5.9600000e+00 6.5821220e-06 1.0000000e-04 -3 1 0.0000000e+00 5312 -add p Particle anti-Xi'_c- -4322 2.5757000e+00 0.0000000e+00 0.0000000e+00 -3 1 0.0000000e+00 -4322 +add p Particle anti-Xi'_c- -4322 2.5784000e+00 0.0000000e+00 0.0000000e+00 -3 1 0.0000000e+00 -4322 add p Particle anti-bu_0 -5201 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 0 0.0000000e+00 -5201 add p Particle Xu- -44 1.0000000e+00 0.0000000e+00 0.0000000e+00 -3 0 0.0000000e+00 -44 -add p Particle Sigma_c0 4112 2.4537600e+00 2.1999997e-03 2.4000000e-02 0 1 0.0000000e+00 4112 -add p Particle K'*- -100323 1.4140000e+00 2.3199996e-01 6.0000000e-01 -3 2 0.0000000e+00 0 +add p Particle Sigma_c0 4112 2.4537500e+00 1.8300000e-03 2.4000000e-02 0 1 0.0000000e+00 4112 +add p Particle K'*- -100323 1.4210000e+00 2.3600000e-01 6.0000000e-01 -3 2 0.0000000e+00 0 add p Particle table 99 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 99 add p Particle Higgs'0 35 3.1000000e+02 7.0022575e+00 0.0000000e+00 0 0 0.0000000e+00 35 add p Particle anti-bs_0 -5301 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 0 0.0000000e+00 -5301 add p Particle Sigma- 3112 1.1974490e+00 0.0000000e+00 0.0000000e+00 -3 1 4.4339305e+01 3112 add p Particle anti-Sigma_b*0 -5214 5.8290000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 -5214 -add p Particle anti-B_10 -10513 5.7320000e+00 3.9891649e-02 2.0000000e-01 0 2 0.0000000e+00 -10513 +add p Particle anti-B_10 -10513 5.7261000e+00 2.7500000e-02 2.0000000e-01 0 2 0.0000000e+00 -10513 add p Particle anti-s -3 1.9900000e-01 0.0000000e+00 0.0000000e+00 1 1 0.0000000e+00 -3 add p Particle anti-Xi'_b0 -5322 5.9600000e+00 6.5821220e-06 1.0000000e-04 0 1 0.0000000e+00 -5322 add p Particle chi_b0 10551 9.8594000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 10551 add p Particle D_1+ 10413 2.4230000e+00 2.0006450e-02 2.7000000e-01 3 2 0.0000000e+00 10413 -add p Particle J/psi 443 3.0969160e+00 9.3199996e-05 2.0000000e-04 0 2 0.0000000e+00 443 -add p Particle eta 221 5.4785300e-01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 221 +add p Particle J/psi 443 3.0969000e+00 9.2900000e-05 2.0000000e-04 0 2 0.0000000e+00 443 +add p Particle eta 221 5.4786200e-01 1.3100000e-06 0.0000000e+00 0 0 0.0000000e+00 221 add p Particle specflav 81 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 81 -add p Particle W- -24 8.0398000e+01 2.1400000e+00 1.0000000e+01 -3 2 0.0000000e+00 -24 +add p Particle W- -24 8.0379000e+01 2.0850000e+00 1.0000000e+01 -3 2 0.0000000e+00 -24 add p Particle nu_mu 14 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 14 -add p Particle p+ 2212 9.3827203e-01 0.0000000e+00 0.0000000e+00 3 1 0.0000000e+00 2212 -add p Particle anti-Sigma*- -3224 1.3828000e+00 3.5799992e-02 3.5000000e-02 -3 3 0.0000000e+00 -3224 -add p Particle Omega_c*0 4334 2.7683000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 4334 +add p Particle p+ 2212 9.3827208e-01 0.0000000e+00 0.0000000e+00 3 1 0.0000000e+00 2212 +add p Particle anti-Sigma*- -3224 1.3828000e+00 3.6000000e-02 3.5000000e-02 -3 3 0.0000000e+00 -3224 +add p Particle Omega_c*0 4334 2.7659000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 4334 add p Particle Xi_b*- 5314 5.9700000e+00 0.0000000e+00 0.0000000e+00 -3 3 0.0000000e+00 5314 -add p Particle pi0 111 1.3497660e-01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 111 -add p Particle D_s*- -433 2.1123000e+00 6.5821023e-06 1.0000000e-04 -3 2 0.0000000e+00 -433 -add p Particle a_0+ 9000211 9.8470000e-01 7.4999997e-02 5.0000000e-02 3 0 0.0000000e+00 10211 +add p Particle pi0 111 1.3497700e-01 7.7300000e-09 0.0000000e+00 0 0 0.0000000e+00 111 +add p Particle D_s*- -433 2.1122000e+00 6.5821023e-06 1.0000000e-04 -3 2 0.0000000e+00 -433 +add p Particle a_0+ 9000211 9.8000000e-01 7.5000000e-02 5.0000000e-02 3 0 0.0000000e+00 10211 add p Particle nu_L 18 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 18 -add p Particle Xi_c+ 4232 2.4679000e+00 0.0000000e+00 0.0000000e+00 3 1 1.3250827e-01 4232 -add p Particle K_0*+ 10321 1.4200000e+00 2.7000000e-01 6.0000000e-01 3 0 0.0000000e+00 10321 -add p Particle rho(2S)- -100213 1.4650000e+00 4.0000012e-01 5.0000000e-01 -3 2 0.0000000e+00 0 -add p Particle eta_b 551 9.4030000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 551 +add p Particle Xi_c+ 4232 2.4679300e+00 0.0000000e+00 0.0000000e+00 3 1 1.3250827e-01 4232 +add p Particle K_0*+ 10321 1.4300000e+00 2.7000000e-01 6.0000000e-01 3 0 0.0000000e+00 10321 +add p Particle rho(2S)- -100213 1.4650000e+00 4.0000000e-01 5.0000000e-01 -3 2 0.0000000e+00 0 +add p Particle eta_b 551 9.3987000e+00 1.0000000e-02 0.0000000e+00 0 0 0.0000000e+00 551 add p Particle ss_1 3303 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 2 0.0000000e+00 3303 add p Particle anti-d -1 9.9000000e-03 0.0000000e+00 0.0000000e+00 1 1 0.0000000e+00 -1 add p Particle anti-Xi_b*+ -5314 5.9700000e+00 0.0000000e+00 0.0000000e+00 3 3 0.0000000e+00 -5314 -add p Particle anti-K*0 -313 8.9600000e-01 5.0299999e-02 2.3000000e-01 0 2 0.0000000e+00 -313 -add p Particle anti-B_s0 -531 5.3663000e+00 0.0000000e+00 0.0000000e+00 0 0 4.4129450e-01 -531 -add p Particle Delta- 1114 1.2320000e+00 1.1800001e-01 1.4000000e-01 -3 3 0.0000000e+00 1114 -add p Particle anti-n0 -2112 9.3956536e-01 0.0000000e+00 0.0000000e+00 0 1 2.6552618e+14 -2112 +add p Particle anti-K*0 -313 8.9555000e-01 4.7300000e-02 2.3000000e-01 0 2 0.0000000e+00 -313 +add p Particle anti-B_s0 -531 5.3668800e+00 0.0000000e+00 0.0000000e+00 0 0 4.4129450e-01 -531 +add p Particle Delta- 1114 1.2320000e+00 1.1700000e-01 1.4000000e-01 -3 3 0.0000000e+00 1114 +add p Particle anti-n0 -2112 9.3956541e-01 0.0000000e+00 0.0000000e+00 0 1 2.6552618e+14 -2112 add p Particle W'- -34 5.0000000e+02 0.0000000e+00 0.0000000e+00 -3 2 0.0000000e+00 -34 add p Particle B_c0*+ 10541 7.2500000e+00 0.0000000e+00 6.0000000e-02 3 0 0.0000000e+00 10541 -add p Particle B_s2*0 535 5.8397000e+00 5.0245206e-02 2.9000000e-02 0 4 0.0000000e+00 535 +add p Particle B_s2*0 535 5.8398500e+00 1.4900000e-03 2.9000000e-02 0 4 0.0000000e+00 535 add p Particle X_1(3872) 9920443 3.8722000e+00 3.1700598e-04 2.9000000e-03 0 2 0.0000000e+00 9920443 -add p Particle anti-Sigma_c-- -4222 2.4540200e+00 2.2300002e-03 2.7000000e-02 -6 1 0.0000000e+00 -4222 -add p Particle anti-B_s2*0 -535 5.8397000e+00 5.0245206e-02 2.9000000e-02 0 4 0.0000000e+00 -535 -add p Particle Delta++ 2224 1.2320000e+00 1.1800001e-01 1.4000000e-01 6 3 0.0000000e+00 2224 +add p Particle anti-Sigma_c-- -4222 2.4539700e+00 1.8900000e-03 2.7000000e-02 -6 1 0.0000000e+00 -4222 +add p Particle anti-B_s2*0 -535 5.8398500e+00 1.4900000e-03 2.9000000e-02 0 4 0.0000000e+00 -535 +add p Particle Delta++ 2224 1.2320000e+00 1.1700000e-01 1.4000000e-01 6 3 0.0000000e+00 2224 add p Particle Upsilon_2(2D) 120555 1.0440600e+01 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 120555 -add p Particle chi_c0 10441 3.4147500e+00 1.0200000e-02 5.0000000e-02 0 0 0.0000000e+00 10441 +add p Particle chi_c0 10441 3.4147100e+00 1.0800000e-02 5.0000000e-02 0 0 0.0000000e+00 10441 add p Particle Xu0 43 1.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 43 -add p Particle anti-Xi'_c0 -4312 2.5780000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 -4312 -add p Particle chi_b2 555 9.9122000e+00 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 555 +add p Particle anti-Xi'_c0 -4312 2.5792000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 -4312 +add p Particle chi_b2 555 9.9122100e+00 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 555 add p Particle B'_c1+ 20543 7.4000000e+00 0.0000000e+00 2.0000000e-01 3 2 0.0000000e+00 20543 add p Particle deuteron 1000010020 1.8756130e+00 0.0000000e+00 0.0000000e+00 3 0 0.0000000e+00 0 -add p Particle anti-Lambda(1810)0 -53122 1.8100000e+00 1.5000001e-01 4.6000000e-01 0 1 0.0000000e+00 0 +add p Particle anti-Lambda(1810)0 -53122 1.8100000e+00 1.5000000e-01 4.6000000e-01 0 1 0.0000000e+00 0 add p Particle B_c*+ 543 6.6020000e+00 0.0000000e+00 0.0000000e+00 3 2 0.0000000e+00 543 add p Particle B_c2*+ 545 7.3500000e+00 0.0000000e+00 6.0000000e-02 3 4 0.0000000e+00 545 -add p Particle Xi*- 3314 1.5350000e+00 9.9000002e-03 5.0000000e-02 -3 3 0.0000000e+00 3314 -add p Particle f_0(1500) 9030221 1.5050000e+00 1.0900000e-01 3.0000000e-01 0 0 0.0000000e+00 0 -add p Particle anti-Delta+ -1114 1.2320000e+00 1.1800001e-01 1.4000000e-01 3 3 0.0000000e+00 -1114 -add p Particle Sigma0 3212 1.1926420e+00 8.8947595e-06 1.3000000e-04 0 1 0.0000000e+00 3212 +add p Particle Xi*- 3314 1.5350000e+00 9.9000000e-03 5.0000000e-02 -3 3 0.0000000e+00 3314 +add p Particle f_0(1500) 9030221 1.5060000e+00 1.1200000e-01 3.0000000e-01 0 0 0.0000000e+00 0 +add p Particle anti-Delta+ -1114 1.2320000e+00 1.1700000e-01 1.4000000e-01 3 3 0.0000000e+00 -1114 +add p Particle Sigma0 3212 1.1926420e+00 8.9000000e-06 1.3000000e-04 0 1 0.0000000e+00 3212 add p Particle Z(4430)+ 9042413 4.4330000e+00 3.1700598e-04 0.0000000e+00 3 2 0.0000000e+00 9042413 -add p Particle B_c+ 541 6.2760000e+00 0.0000000e+00 0.0000000e+00 3 0 1.3490661e-01 541 -add p Particle B_s*0 533 5.4128000e+00 6.5821220e-06 1.0000000e-04 0 2 0.0000000e+00 533 -add p Particle rho(2S)0 100113 1.4650000e+00 4.0000012e-01 5.0000000e-01 0 2 0.0000000e+00 0 +add p Particle B_c+ 541 6.2737000e+00 0.0000000e+00 0.0000000e+00 3 0 1.3490661e-01 541 +add p Particle B_s*0 533 5.4154000e+00 6.5821220e-06 1.0000000e-04 0 2 0.0000000e+00 533 +add p Particle rho(2S)0 100113 1.4650000e+00 4.0000000e-01 5.0000000e-01 0 2 0.0000000e+00 0 add p Particle anti-alpha -1000020040 3.7274170e+00 0.0000000e+00 0.0000000e+00 -6 0 0.0000000e+00 0 add p Particle dd_1 1103 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 2 0.0000000e+00 1103 add p Particle Xi- 3312 1.3217100e+00 0.0000000e+00 0.0000000e+00 -3 1 4.9135984e+01 3312 -add p Particle Lambda(1820)0 3126 1.8200000e+00 7.9999995e-02 4.0000000e-01 0 5 0.0000000e+00 0 +add p Particle Lambda(1820)0 3126 1.8200000e+00 8.0000000e-02 4.0000000e-01 0 5 0.0000000e+00 0 add p Particle anti-Sigma_b0 -5212 5.8078000e+00 6.5821220e-06 1.0000000e-04 0 1 0.0000000e+00 -5212 -add p Particle anti-Sigma_b+ -5112 5.8152000e+00 6.5821220e-06 1.0000000e-04 3 1 0.0000000e+00 -5112 +add p Particle anti-Sigma_b+ -5112 5.8156400e+00 5.3000000e-03 1.0000000e-04 3 1 0.0000000e+00 -5112 add p Particle cd_0 4101 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 0 0.0000000e+00 4101 add p Particle anti-cs_1 -4303 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 2 0.0000000e+00 -4303 -add p Particle K_1+ 10323 1.2720000e+00 8.9999999e-02 2.0000000e-01 3 2 0.0000000e+00 10323 +add p Particle K_1+ 10323 1.2720000e+00 9.0000000e-02 2.0000000e-01 3 2 0.0000000e+00 10323 add p Particle Higgs- -37 3.1000000e+02 7.0022575e+00 0.0000000e+00 -3 0 0.0000000e+00 -37 -add p Particle anti-K_0*0 -10311 1.4200000e+00 2.7000000e-01 6.0000000e-01 0 0 0.0000000e+00 -10311 -add p Particle anti-Xi_c*0 -4314 2.6461000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 -4314 +add p Particle anti-K_0*0 -10311 1.4300000e+00 2.7000000e-01 6.0000000e-01 0 0 0.0000000e+00 -10311 +add p Particle anti-Xi_c*0 -4314 2.6463800e+00 2.3500000e-03 0.0000000e+00 0 3 0.0000000e+00 -4314 add p Particle anti-Xi+ -3312 1.3217100e+00 0.0000000e+00 0.0000000e+00 3 1 4.9135984e+01 -3312 add p Particle anti-D*(2S)0 -100423 2.6400000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 0 add p Particle anti-dd_1 -1103 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 2 0.0000000e+00 -1103 add p Particle anti-b' -7 4.0000000e+02 0.0000000e+00 0.0000000e+00 1 1 0.0000000e+00 -7 -add p Particle a_0- -9000211 9.8470000e-01 7.4999997e-02 5.0000000e-02 -3 0 0.0000000e+00 -10211 +add p Particle a_0- -9000211 9.8000000e-01 7.5000000e-02 5.0000000e-02 -3 0 0.0000000e+00 -10211 add p Particle anti-nu_tau -16 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 -16 add p Particle Z'0 32 5.0000000e+02 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 32 add p Particle g 21 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 21 add p Particle nu_tau 16 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 16 add p Particle c 4 1.3500000e+00 0.0000000e+00 0.0000000e+00 2 1 0.0000000e+00 4 add p Particle Upsilon_3(2D) 100557 1.0444300e+01 0.0000000e+00 0.0000000e+00 0 6 0.0000000e+00 100557 -add p Particle Lambda(1690)0 13124 1.6900000e+00 6.0000018e-02 3.0000000e-01 0 3 0.0000000e+00 0 -add p Particle f_0 9010221 9.8000000e-01 7.0000003e-02 5.0000000e-03 0 0 0.0000000e+00 10221 -add p Particle pi(2S)0 100111 1.3000000e+00 3.9999988e-01 5.0000000e-01 0 0 0.0000000e+00 0 +add p Particle Lambda(1690)0 13124 1.6900000e+00 6.0000000e-02 3.0000000e-01 0 3 0.0000000e+00 0 +add p Particle f_0 9010221 9.9000000e-01 6.0000000e-02 5.0000000e-03 0 0 0.0000000e+00 10221 +add p Particle pi(2S)0 100111 1.3000000e+00 4.0000000e-01 5.0000000e-01 0 0 0.0000000e+00 0 add p Particle Sigma_c*+ 4214 2.5175000e+00 2.0000000e-03 3.0000000e-02 3 3 0.0000000e+00 4214 -add p Particle Sigma(1750)0 23212 1.7500000e+00 8.9999999e-02 4.5000000e-01 0 1 0.0000000e+00 0 +add p Particle Sigma(1750)0 23212 1.7500000e+00 9.0000000e-02 4.5000000e-01 0 1 0.0000000e+00 0 add p Particle D_1- -10413 2.4230000e+00 2.0006450e-02 2.7000000e-01 -3 2 0.0000000e+00 -10413 add p Particle anti-bd_0 -5101 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 0 0.0000000e+00 -5101 add p Particle B_c1- -10543 7.3000000e+00 0.0000000e+00 6.0000000e-02 -3 2 0.0000000e+00 -10543 add p Particle D(2S)+ 100411 2.5800000e+00 0.0000000e+00 0.0000000e+00 3 0 0.0000000e+00 0 add p Particle anti-Sigma_c*- -4214 2.5175000e+00 2.0000000e-03 3.0000000e-02 -3 3 0.0000000e+00 -4214 -add p Particle anti-Lambda_b0 -5122 5.6202000e+00 0.0000000e+00 0.0000000e+00 0 1 4.1371359e-01 -5122 -add p Particle rho(3S)0 30113 1.7200000e+00 2.4999998e-01 5.0000000e-01 0 2 0.0000000e+00 0 +add p Particle anti-Lambda_b0 -5122 5.6196000e+00 0.0000000e+00 0.0000000e+00 0 1 4.1371359e-01 -5122 +add p Particle rho(3S)0 30113 1.7200000e+00 2.5000000e-01 5.0000000e-01 0 2 0.0000000e+00 0 add p Particle anti-bb_1 -5503 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 2 0.0000000e+00 -5503 -add p Particle Sigma_b- 5112 5.8152000e+00 6.5821220e-06 1.0000000e-04 -3 1 0.0000000e+00 5112 -add p Particle anti-Sigma(1750)0 -23212 1.7500000e+00 8.9999999e-02 4.5000000e-01 0 1 0.0000000e+00 0 -add p Particle anti-Sigma_c*-- -4224 2.5184000e+00 1.4900002e-02 9.2000000e-02 -6 3 0.0000000e+00 -4224 -add p Particle Sigma_c*++ 4224 2.5184000e+00 1.4900002e-02 9.2000000e-02 6 3 0.0000000e+00 4224 +add p Particle Sigma_b- 5112 5.8156400e+00 5.3000000e-03 1.0000000e-04 -3 1 0.0000000e+00 5112 +add p Particle anti-Sigma(1750)0 -23212 1.7500000e+00 9.0000000e-02 4.5000000e-01 0 1 0.0000000e+00 0 +add p Particle anti-Sigma_c*-- -4224 2.5184100e+00 1.4780000e-02 9.2000000e-02 -6 3 0.0000000e+00 -4224 +add p Particle Sigma_c*++ 4224 2.5184100e+00 1.4780000e-02 9.2000000e-02 6 3 0.0000000e+00 4224 add p Particle B_s0H 530 5.3663000e+00 0.0000000e+00 0.0000000e+00 0 0 4.6074353e-01 0 add p Particle L+ -17 4.0000000e+02 0.0000000e+00 0.0000000e+00 3 1 0.0000000e+00 -17 -add p Particle anti-Xi_b0 -5232 5.7924000e+00 0.0000000e+00 0.0000000e+00 0 1 4.2570529e-01 -5232 +add p Particle anti-Xi_b0 -5232 5.7919000e+00 0.0000000e+00 0.0000000e+00 0 1 4.2570529e-01 -5232 add p Particle gamma 22 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 22 *--------------------------------------------------------------------------------------------------------------------------------------- * Added by R. Godang 5/10/2013 for Belle II. The parameters are given by Shohei Nishida @@ -518,34 +535,33 @@ add p Particle anti-Xdu- -30653 1.6000000e+00 5.0000000e *--------------------------------------------------------------------------------------------------------------------------------------- * Added by R. Godang 5/10/2013 for Belle II. The parameters are given by Kiyoshi Hayasaka *--------------------------------------------------------------------------------------------------------------------------------------- -add p Particle pi(1)(1400)0 9000113 1.3540000e+00 3.3000000e-01 0.0000000e+00 0 4 5.9796000e-13 0 -add p Particle pi(1)(1400)+ 9000213 1.3540000e+00 3.3000000e-01 0.0000000e+00 3 4 5.9796000e-13 0 -add p Particle eta(1405) 9020221 1.4089000e+00 5.1100000e-02 0.0000000e+00 0 0 3.8616000e-12 0 -add p Particle a(0)(1450)0 10111 1.4740000e+00 2.6500000e-01 0.0000000e+00 0 0 7.4463000e-13 0 -add p Particle a(0)(1450)+ 10211 1.4740000e+00 2.6500000e-01 0.0000000e+00 3 0 7.4463000e-13 0 -add p Particle eta(1475) 100331 1.4760000e+00 8.5000000e-02 0.0000000e+00 0 0 2.3215000e-12 0 -add p Particle pi(1)(1600)0 9010113 1.6620000e+00 2.4000000e-01 0.0000000e+00 0 4 8.2220000e-13 0 -add p Particle pi(1)(1600)+ 9010213 1.6620000e+00 2.4000000e-01 0.0000000e+00 3 4 8.2220000e-13 0 -add p Particle eta(2)(1645) 10225 1.6170000e+00 1.8100000e-01 0.0000000e+00 0 8 1.0902000e-12 0 -add p Particle omega(3)(1670) 227 1.6670000e+00 1.6800000e-01 0.0000000e+00 0 12 1.1746000e-12 0 -add p Particle pi(2)(1670)0 10115 1.6722000e+00 2.6000000e-01 0.0000000e+00 0 8 7.5895000e-13 0 -add p Particle pi(2)(1670)+ 10215 1.6722000e+00 2.6000000e-01 0.0000000e+00 3 8 7.5895000e-13 0 -add p Particle rho(3)(1690)0 117 1.6888000e+00 1.6100000e-01 0.0000000e+00 0 12 1.2256000e-12 0 -add p Particle rho(3)(1690)+ 217 1.6888000e+00 1.6100000e-01 0.0000000e+00 3 12 1.2256000e-12 0 -add p Particle f(0)(1710) 10331 1.7200000e+00 1.3500000e-01 0.0000000e+00 0 0 1.4617000e-12 0 -add p Particle pi(1800)0 9010111 1.8120000e+00 2.0800000e-01 0.0000000e+00 0 0 9.4869000e-13 0 -add p Particle pi(1800)+ 9010211 1.8120000e+00 2.0800000e-01 0.0000000e+00 3 0 9.4869000e-13 0 -add p Particle phi(3)(1850) 337 1.8540000e+00 8.7000000e-02 0.0000000e+00 0 12 2.2681000e-12 0 -add p Particle f(2)(1950) 9050225 1.9440000e+00 4.7200000e-01 0.0000000e+00 0 8 4.1807000e-13 0 -add p Particle f(2)(2010) 9060225 2.0100000e+00 2.0000000e-01 0.0000000e+00 0 8 9.8663000e-13 0 -add p Particle a(4)(2040)0 119 1.9960000e+00 2.5500000e-01 0.0000000e+00 0 16 7.7383000e-13 0 -add p Particle a(4)(2040)+ 219 1.9960000e+00 2.5500000e-01 0.0000000e+00 3 16 7.7383000e-13 0 -add p Particle f(4)(2050) 229 2.0180000e+00 2.3700000e-01 0.0000000e+00 0 16 8.3260000e-13 0 -add p Particle f(2)(2300) 9080225 2.2970000e+00 1.5000000e-01 0.0000000e+00 0 8 1.3155000e-12 0 -add p Particle f(2)(2340) 9090225 2.3400000e+00 1.5000000e-01 0.0000000e+00 0 8 6.1665000e-13 0 -add p Particle K(2)(1770)0 10315 1.7730000e+00 1.8600000e-01 0.0000000e+00 0 8 1.0609000e-12 0 -add p Particle K(2)(1770)+ 10325 1.7730000e+00 1.8600000e-01 0.0000000e+00 3 8 1.0609000e-12 0 -add p Particle K(2)(1820)0 20315 1.8160000e+00 2.7600000e-01 0.0000000e+00 0 8 7.1495000e-13 0 -add p Particle K(2)(1820)+ 20325 1.8160000e+00 2.7600000e-01 0.0000000e+00 3 8 7.1495000e-13 0 +add p Particle pi(1)(1400)0 9000113 1.3540000e+00 3.3000000e-01 0.0000000e+00 0 4 5.9796000e-13 0 +add p Particle pi(1)(1400)+ 9000213 1.3540000e+00 3.3000000e-01 0.0000000e+00 3 4 5.9796000e-13 0 +add p Particle eta(1405) 9020221 1.4088000e+00 5.1000000e-02 0.0000000e+00 0 0 3.8616000e-12 0 +add p Particle a(0)(1450)0 10111 1.4670000e+00 2.6500000e-01 0.0000000e+00 0 0 7.4463000e-13 0 +add p Particle a(0)(1450)+ 10211 1.4670000e+00 2.6500000e-01 0.0000000e+00 3 0 7.4463000e-13 0 +add p Particle eta(1475) 100331 1.4750000e+00 8.5000000e-02 0.0000000e+00 0 0 2.3215000e-12 0 +add p Particle pi(1)(1600)0 9010113 1.6600000e+00 2.4100000e-01 0.0000000e+00 0 4 8.2220000e-13 0 +add p Particle pi(1)(1600)+ 9010213 1.6600000e+00 2.4100000e-01 0.0000000e+00 3 4 8.2220000e-13 0 +add p Particle eta(2)(1645) 10225 1.6170000e+00 1.8100000e-01 0.0000000e+00 0 8 1.0902000e-12 0 +add p Particle omega(3)(1670) 227 1.6670000e+00 1.6800000e-01 0.0000000e+00 0 12 1.1746000e-12 0 +add p Particle pi(2)(1670)0 10115 1.6706000e+00 2.6000000e-01 0.0000000e+00 0 8 7.5895000e-13 0 +add p Particle pi(2)(1670)+ 10215 1.6706000e+00 2.6000000e-01 0.0000000e+00 3 8 7.5895000e-13 0 +add p Particle rho(3)(1690)0 117 1.6888000e+00 1.6100000e-01 0.0000000e+00 0 12 1.2256000e-12 0 +add p Particle rho(3)(1690)+ 217 1.6888000e+00 1.6100000e-01 0.0000000e+00 3 12 1.2256000e-12 0 +add p Particle f(0)(1710) 10331 1.7040000e+00 1.3500000e-01 0.0000000e+00 0 0 1.4617000e-12 0 +add p Particle pi(1800)0 9010111 1.8100000e+00 2.0800000e-01 0.0000000e+00 0 0 9.4869000e-13 0 +add p Particle pi(1800)+ 9010211 1.8100000e+00 2.0800000e-01 0.0000000e+00 3 0 9.4869000e-13 0 +add p Particle phi(3)(1850) 337 1.8540000e+00 8.7000000e-02 0.0000000e+00 0 12 2.2681000e-12 0 +add p Particle f(2)(1950) 9050225 1.9360000e+00 4.7200000e-01 0.0000000e+00 0 8 4.1807000e-13 0 +add p Particle f(2)(2010) 9060225 2.0100000e+00 2.0200000e-01 0.0000000e+00 0 8 9.8663000e-13 0 +add p Particle a(4)(2040)0 119 1.9670000e+00 2.5500000e-01 0.0000000e+00 0 16 7.7383000e-13 0 +add p Particle a(4)(2040)+ 219 1.9670000e+00 2.5500000e-01 0.0000000e+00 3 16 7.7383000e-13 0 +add p Particle f(4)(2050) 229 2.0180000e+00 2.3700000e-01 0.0000000e+00 0 16 8.3260000e-13 0 +add p Particle f(2)(2300) 9080225 2.2970000e+00 1.4900000e-01 0.0000000e+00 0 8 1.3155000e-12 0 +add p Particle f(2)(2340) 9090225 2.3500000e+00 3.1900000e-01 0.0000000e+00 0 8 6.1665000e-13 0 +add p Particle K(2)(1770)0 10315 1.7730000e+00 1.8600000e-01 0.0000000e+00 0 8 1.0609000e-12 0 +add p Particle K(2)(1770)+ 10325 1.7730000e+00 1.8600000e-01 0.0000000e+00 3 8 1.0609000e-12 0 +add p Particle K(2)(1820)0 20315 1.8190000e+00 2.7600000e-01 0.0000000e+00 0 8 7.1495000e-13 0 +add p Particle K(2)(1820)+ 20325 1.8190000e+00 2.7600000e-01 0.0000000e+00 3 8 7.1495000e-13 0 end - diff --git a/GeneratorInterface/EvtGenInterface/plugins/EvtGen/EvtGenInterface.cc b/GeneratorInterface/EvtGenInterface/plugins/EvtGen/EvtGenInterface.cc index 0a643c6abec4e..26b5f1d437ae2 100644 --- a/GeneratorInterface/EvtGenInterface/plugins/EvtGen/EvtGenInterface.cc +++ b/GeneratorInterface/EvtGenInterface/plugins/EvtGen/EvtGenInterface.cc @@ -363,7 +363,7 @@ void EvtGenInterface::init() { if (fPSet->exists("user_decay_embedded")) { std::vector user_decay_lines = fPSet->getParameter >("user_decay_embedded"); - char user_decay_tmp[] = "/tmp/user_decay_tmpfileXXXXXX"; + char user_decay_tmp[] = "user_decay_tmpfileXXXXXX"; int tmp_creation = mkstemp(user_decay_tmp); FILE* tmpf = std::fopen(user_decay_tmp, "w"); if (!tmpf || (tmp_creation == -1)) { diff --git a/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSR.cpp b/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSR.cpp deleted file mode 100644 index 6980c919f4e1c..0000000000000 --- a/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSR.cpp +++ /dev/null @@ -1,157 +0,0 @@ - - -// -// Environment: -// This software is part of the EvtGen package developed jointly -// for the BaBar and CLEO collaborations. If you use all or part -// of it, please give an appropriate acknowledgement. -// -// Copyright Information: -// Copyright (C) 1998 Caltech, UCSB -// -// Module: EvtLb2plnuLCSR.cc -// -// Description: Routine to implement Lb->p l nu semileptonic decays using form factor -// predictions form Light Cone Sum Rules. The form factors are from -// A. Khodjamirian, C. Klein, T. Mannel and Y.-M. Wang, arXiv.1108.2971 (2011) -// -// -// Modification history: -// -// William Sutcliffe 27/07/2013 Module created -// -// -//------------------------------------------------------------------------ - -#include "EvtGenBase/EvtPatches.hh" -#include -#include "EvtGenBase/EvtParticle.hh" -#include "EvtGenBase/EvtGenKine.hh" -#include "EvtGenBase/EvtPDL.hh" -#include "EvtGenBase/EvtReport.hh" -#include "GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSR.hh" -#include "EvtGenBase/EvtConst.hh" -#include "EvtGenBase/EvtIdSet.hh" -#include -#include "GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSRFF.hh" - -using namespace std; -#ifdef D0 -#undef D0 -#endif -EvtLb2plnuLCSR::EvtLb2plnuLCSR() : ffmodel(nullptr), calcamp(nullptr) {} - -EvtLb2plnuLCSR::~EvtLb2plnuLCSR() { - delete ffmodel; - ffmodel = nullptr; - delete calcamp; - calcamp = nullptr; -} - -std::string EvtLb2plnuLCSR::getName() { return "Lb2plnuLCSR"; } - -EvtDecayBase* EvtLb2plnuLCSR::clone() { return new EvtLb2plnuLCSR; } - -void EvtLb2plnuLCSR::decay(EvtParticle* p) { - //This is a kludge to avoid warnings because the K_2* mass becomes to large. - static EvtIdSet regenerateMasses("K_2*+", - "K_2*-", - "K_2*0", - "anti-K_2*0", - "K_1+", - "K_1-", - "K_10", - "anti-K_10", - "D'_1+", - "D'_1-", - "D'_10", - "anti-D'_10"); - - if (regenerateMasses.contains(getDaug(0))) { - p->resetFirstOrNot(); - } - - p->initializePhaseSpace(getNDaug(), getDaugs()); - - EvtComplex r00(getArg(0), 0.0); - EvtComplex r01(getArg(1), 0.0); - EvtComplex r10(getArg(2), 0.0); - EvtComplex r11(getArg(3), 0.0); - - calcamp->CalcAmp(p, _amp2, ffmodel, r00, r01, r10, r11); -} - -void EvtLb2plnuLCSR::initProbMax() { - static EvtId LAMB = EvtPDL::getId("Lambda_b0"); - static EvtId LAMBB = EvtPDL::getId("anti-Lambda_b0"); - static EvtId PRO = EvtPDL::getId("p+"); - static EvtId PROB = EvtPDL::getId("anti-p-"); - - EvtId parnum, barnum; - - parnum = getParentId(); - barnum = getDaug(0); - - if ((parnum == LAMB && barnum == PRO) || (parnum == LAMBB && barnum == PROB)) { - setProbMax(22000.0); - } else { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Decay does not have Lb->p setting ProbMax = 0 " << endl; - setProbMax(0.0); - } -} - -void EvtLb2plnuLCSR::init() { - if (getNArg() != 4) { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "EvtLb2plnuLCSR generator expected " - << " 4 arguments but found:" << getNArg() << endl; - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Will terminate execution!" << endl; - ::abort(); - } - - if (getNDaug() != 3) { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Wrong number of daughters in EvtLb2plnu.cc " - << " 3 daughters expected but found: " << getNDaug() << endl; - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Will terminate execution!" << endl; - ::abort(); - } - - //We expect the parent to be a dirac particle - //and the daughters to be X lepton neutrino - - EvtSpinType::spintype parenttype = EvtPDL::getSpinType(getParentId()); - EvtSpinType::spintype baryontype = EvtPDL::getSpinType(getDaug(0)); - EvtSpinType::spintype leptontype = EvtPDL::getSpinType(getDaug(1)); - EvtSpinType::spintype neutrinotype = EvtPDL::getSpinType(getDaug(2)); - - if (parenttype != EvtSpinType::DIRAC) { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "EvtLb2plnuLCSR generator expected " - << " a DIRAC parent, found:" << EvtPDL::name(getParentId()) << endl; - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Will terminate execution!" << endl; - ::abort(); - } - if (leptontype != EvtSpinType::DIRAC) { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "EvtLb2plnuLCSR generator expected " - << " a DIRAC 2nd daughter, found:" << EvtPDL::name(getDaug(1)) << endl; - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Will terminate execution!" << endl; - ::abort(); - } - if (neutrinotype != EvtSpinType::NEUTRINO) { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "EvtLb2plnuLCSR generator expected " - << " a NEUTRINO 3rd daughter, found:" << EvtPDL::name(getDaug(2)) << endl; - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Will terminate execution!" << endl; - ::abort(); - } - - //set ffmodel - ffmodel = new EvtLb2plnuLCSRFF; - - if (baryontype == EvtSpinType::DIRAC) { - calcamp = new EvtSLBaryonAmp; - } else { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Wrong baryon spin type in EvtLb2plnuLCSR.cc " - << "Expected spin type " << EvtSpinType::DIRAC << ", found spin type " - << baryontype << endl; - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Will terminate execution!" << endl; - ::abort(); - } -} diff --git a/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSR.hh b/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSR.hh deleted file mode 100644 index 6df47986aef0d..0000000000000 --- a/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSR.hh +++ /dev/null @@ -1,49 +0,0 @@ -//-------------------------------------------------------------------------- -// -// Environment: -// This software is part of the EvtGen package developed jointly -// for the BaBar and CLEO collaborations. If you use all or part -// of it, please give an appropriate acknowledgement. -// -// Copyright Information: -// Copyright (C) 1998 Caltech, UCSB -// -// Module: EvtGen/EvtLb2plnuLCSR.hh -// -// Description:Implementation of the Lb2plnuLCSR model -// Class to handle semileptonic Lb -> p l nu decays using the using form factor predictions from Light Cone Sum Rules. -// -// -// Modification history: -// -// William Sutcliffe July 27, 2013 Module created -// -//------------------------------------------------------------------------ - -#ifndef EVTLB2PMUNULCSR_HH -#define EVTLB2PMUNULCSR_HH - -#include "EvtGenBase/EvtDecayAmp.hh" -#include "EvtGenBase/EvtSemiLeptonicFF.hh" -#include "GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtSLBaryonAmp.hh" - -class EvtParticle; - -class EvtLb2plnuLCSR : public EvtDecayAmp { -public: - EvtLb2plnuLCSR(); - ~EvtLb2plnuLCSR() override; - - std::string getName() override; - EvtDecayBase *clone() override; - - void decay(EvtParticle *p) override; - void initProbMax() override; - void init() override; - -private: - EvtSemiLeptonicFF *ffmodel; - EvtSLBaryonAmp *calcamp; -}; - -#endif diff --git a/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSRFF.cpp b/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSRFF.cpp deleted file mode 100644 index 0a79585d8ae74..0000000000000 --- a/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSRFF.cpp +++ /dev/null @@ -1,118 +0,0 @@ -//-------------------------------------------------------------------------- -// -// Environment: -// This software is part of the EvtGen package developed jointly -// for the BaBar and CLEO collaborations. If you use all or part -// of it, please give an appropriate acknowledgement. -// -// Copyright Information: -// Copyright (C) 1998 Caltech, UCSB -// -// Module: EvtLb2plnuLCSRFF.cc -// -// Description: Routine to implement Lb->p l nu form factors -// according to predictions from LCSR -// -// Modification history: -// -// William Sutcliffe 27/07/2013 Module created -// -// -//-------------------------------------------------------------------------- -#include "EvtGenBase/EvtPatches.hh" -#include "EvtGenBase/EvtReport.hh" -#include "GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSRFF.hh" -#include "EvtGenBase/EvtPDL.hh" -#include "EvtGenBase/EvtId.hh" -#include "EvtGenBase/EvtIdSet.hh" -#include "EvtGenBase/EvtConst.hh" -#include -#include -#include -using std::endl; - -void EvtLb2plnuLCSRFF::getdiracff(EvtId parent, - EvtId daught, - double q2, - double /* mass */, - double* f1, - double* f2, - double* f3, - double* g1, - double* g2, - double* g3) { - // Define Event IDs for Lb and p - static EvtId LAMB = EvtPDL::getId("Lambda_b0"); - static EvtId LAMBB = EvtPDL::getId("anti-Lambda_b0"); - static EvtId PRO = EvtPDL::getId("p+"); - static EvtId PROB = EvtPDL::getId("anti-p-"); - - if ((parent == LAMB && daught == PRO) || (parent == LAMBB && daught == PROB)) { - // Calculate Lb->p form factors based on LCSR predictions - // Predictions taken from A. Khodjamirian, C. Klein, T. Mannel and Y.-M. Wang, arXiv.1108.2971 (2011) - - double MLamB = EvtPDL::getMass(parent); - double MPro = EvtPDL::getMass(daught); - - double tplus = (MLamB + MPro) * (MLamB + MPro); - double tminus = (MLamB - MPro) * (MLamB - MPro); - double t0 = tplus - sqrt(tplus - tminus) * sqrt(tplus + 6); - double z = (sqrt(tplus - q2) - sqrt(tplus - t0)) / (sqrt(tplus - q2) + sqrt(tplus - t0)); - double z0 = (sqrt(tplus) - sqrt(tplus - t0)) / (sqrt(tplus) + sqrt(tplus - t0)); - - // FF parameters - double f10 = 0.14; - double bf1 = -1.49; - double f20 = -0.054; - double bf2 = -14.0; - double g10 = 0.14; - double bg1 = -4.05; - double g20 = -0.028; - double bg2 = -20.2; - - //FF paramterisation - double F1 = (f10 / (1.0 - q2 / (5.325 * 5.325))) * (1.0 + bf1 * (z - z0)); - double F2 = (f20 / (1.0 - q2 / (5.325 * 5.325))) * (1.0 + bf2 * (z - z0)); - double G1 = (g10 / (1.0 - q2 / (5.723 * 5.723))) * (1.0 + bg1 * (z - z0)); - double G2 = (g20 / (1.0 - q2 / (5.723 * 5.723))) * (1.0 + bg2 * (z - z0)); - - *f1 = F1 - (MLamB + MPro) * F2 / MLamB; - *f2 = F2; - *f3 = MPro * (F2) / MLamB; - *g1 = G1 - (MLamB - MPro) * G2 / MLamB; - *g2 = -G2; - *g3 = -MPro * G2 / MLamB; - - } else { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Only Lb -> p transitions allowed in EvtLb2plnuLCSRFF.\n"; - ::abort(); - } - - return; -} - -void EvtLb2plnuLCSRFF::getraritaff( - EvtId, EvtId, double, double, double*, double*, double*, double*, double*, double*, double*, double*) { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Not implemented :getraritaff in EvtLb2plnuLCSRFF.\n"; - ::abort(); -} - -void EvtLb2plnuLCSRFF::getscalarff(EvtId, EvtId, double, double, double*, double*) { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Not implemented :getscalarff in EvtLb2plnuLCSRFF.\n"; - ::abort(); -} - -void EvtLb2plnuLCSRFF::getvectorff(EvtId, EvtId, double, double, double*, double*, double*, double*) { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Not implemented :getvectorff in EvtLb2plnuLCSRFF.\n"; - ::abort(); -} - -void EvtLb2plnuLCSRFF::gettensorff(EvtId, EvtId, double, double, double*, double*, double*, double*) { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Not implemented :gettensorff in EvtLb2plnuLCSRFF.\n"; - ::abort(); -} - -void EvtLb2plnuLCSRFF::getbaryonff(EvtId, EvtId, double, double, double*, double*, double*, double*) { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Not implemented :getbaryonff in EvtLb2plnuLCSRFF.\n"; - ::abort(); -} diff --git a/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSRFF.hh b/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSRFF.hh deleted file mode 100644 index 10857b073fe85..0000000000000 --- a/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSRFF.hh +++ /dev/null @@ -1,63 +0,0 @@ -//-------------------------------------------------------------------------- -// -// Environment: -// This software is part of the EvtGen package developed jointly -// for the BaBar and CLEO collaborations. If you use all or part -// of it, please give an appropriate acknowledgement. -// -// Copyright Information: -// Copyright (C) 1998 Caltech, UCSB -// -// Module: EvtGen/EvtLb2plnuLCSRFF.hh -// -// Description: Module for computation of Lb->p form factors via LCSR -// -// Modification history: -// -// William Sutcliffe July 27, 2013 Module created -// -//------------------------------------------------------------------------ - -#ifndef EVTLB2PMUNULCSRFF_HH -#define EVTLB2PMUNULCSRFF_HH - -#include "EvtGenBase/EvtSemiLeptonicFF.hh" - -class EvtId; - -class EvtLb2plnuLCSRFF : public EvtSemiLeptonicFF { -public: - void getscalarff(EvtId parent, EvtId daught, double t, double mass, double *fpf, double *f0f) override; - void getvectorff( - EvtId parent, EvtId daught, double t, double mass, double *a1f, double *a2f, double *vf, double *a0f) override; - void gettensorff( - EvtId parent, EvtId daught, double t, double mass, double *hf, double *kf, double *bpf, double *bmf) override; - - void getbaryonff(EvtId, EvtId, double, double, double *, double *, double *, double *) override; - - void getdiracff(EvtId parent, - EvtId daught, - double q2, - double mass, - double *f1, - double *f2, - double *f3, - double *g1, - double *g2, - double *g3) override; - - void getraritaff(EvtId parent, - EvtId daught, - double q2, - double mass, - double *f1, - double *f2, - double *f3, - double *f4, - double *g1, - double *g2, - double *g3, - double *g4) override; -}; - -#endif diff --git a/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtModelUserReg.cpp b/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtModelUserReg.cpp index 2ae3552ac5255..3bdde89d20225 100644 --- a/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtModelUserReg.cpp +++ b/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtModelUserReg.cpp @@ -1,13 +1,10 @@ #include "GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtModelUserReg.h" -#include "GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtLb2plnuLCSR.hh" #include std::list EvtModelUserReg::getUserModels() { // Create user models - EvtLb2plnuLCSR* EvtLb2plnuLCSRModel = new EvtLb2plnuLCSR(); std::list extraModels; - extraModels.push_back(EvtLb2plnuLCSRModel); // Return the list of models return extraModels; diff --git a/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtSLBaryonAmp.cpp b/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtSLBaryonAmp.cpp deleted file mode 100644 index e392c6a846145..0000000000000 --- a/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtSLBaryonAmp.cpp +++ /dev/null @@ -1,751 +0,0 @@ -//-------------------------------------------------------------------------- -// -// Environment: -// This software is part of the EvtGen package developed jointly -// for the BaBar and CLEO collaborations. If you use all or part -// of it, please give an appropriate acknowledgement. -// -// Copyright Information: See EvtGen/COPYRIGHT -// Copyright (C) 1998 Caltech, UCSB -// -// Module: EvtSLBaryonAmp.cc -// -// Description: Routine to implement semileptonic decays of Dirac baryons -// -// Modification history: -// -// R.J. Tesarek May 28, 2004 Module created -// Karen Gibson 1/20/2006 Module updated for 1/2+->1/2+, -// 1/2+->1/2-, 1/2+->3/2- Lambda decays -// -//-------------------------------------------------------------------------- - -#include "EvtGenBase/EvtPatches.hh" -#include "EvtGenBase/EvtParticle.hh" -#include "EvtGenBase/EvtGenKine.hh" -#include "EvtGenBase/EvtPDL.hh" -#include "EvtGenBase/EvtReport.hh" -#include "EvtGenBase/EvtTensor4C.hh" -#include "EvtGenBase/EvtVector4C.hh" -#include "EvtGenBase/EvtDiracSpinor.hh" -#include "EvtGenBase/EvtDiracParticle.hh" -#include "EvtGenBase/EvtRaritaSchwinger.hh" -#include "GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtSLBaryonAmp.hh" -#include "EvtGenBase/EvtId.hh" -#include "EvtGenBase/EvtAmp.hh" -#include "EvtGenBase/EvtSemiLeptonicFF.hh" -#include "EvtGenBase/EvtGammaMatrix.hh" - -#include - -using std::endl; - -EvtSLBaryonAmp::~EvtSLBaryonAmp() {} - -void EvtSLBaryonAmp::CalcAmp(EvtParticle *parent, EvtAmp &, EvtSemiLeptonicFF *FormFactors) { - static EvtId EM = EvtPDL::getId("e-"); - static EvtId MUM = EvtPDL::getId("mu-"); - static EvtId TAUM = EvtPDL::getId("tau-"); - static EvtId EP = EvtPDL::getId("e+"); - static EvtId MUP = EvtPDL::getId("mu+"); - static EvtId TAUP = EvtPDL::getId("tau+"); - - //Add the lepton and neutrino 4 momenta to find q2 - - EvtVector4R q = parent->getDaug(1)->getP4() + parent->getDaug(2)->getP4(); - double q2 = (q.mass2()); - - double f1v, f1a, f2v, f2a; - double m_meson = parent->getDaug(0)->mass(); - - FormFactors->getbaryonff(parent->getId(), parent->getDaug(0)->getId(), q2, m_meson, &f1v, &f1a, &f2v, &f2a); - - EvtVector4R p4b; - p4b.set(parent->mass(), 0.0, 0.0, 0.0); - - EvtVector4C temp_00_term1; - EvtVector4C temp_00_term2; - - EvtVector4C temp_01_term1; - EvtVector4C temp_01_term2; - - EvtVector4C temp_10_term1; - EvtVector4C temp_10_term2; - - EvtVector4C temp_11_term1; - EvtVector4C temp_11_term2; - - EvtDiracSpinor p0 = parent->sp(0); - EvtDiracSpinor p1 = parent->sp(1); - - EvtDiracSpinor d0 = parent->getDaug(0)->spParent(0); - EvtDiracSpinor d1 = parent->getDaug(0)->spParent(1); - - temp_00_term1.set(0, f1v * (d0 * (EvtGammaMatrix::g0() * p0))); - temp_00_term2.set(0, f1a * (d0 * ((EvtGammaMatrix::g0() * EvtGammaMatrix::g5()) * p0))); - temp_01_term1.set(0, f1v * (d0 * (EvtGammaMatrix::g0() * p1))); - temp_01_term2.set(0, f1a * (d0 * ((EvtGammaMatrix::g0() * EvtGammaMatrix::g5()) * p1))); - temp_10_term1.set(0, f1v * (d1 * (EvtGammaMatrix::g0() * p0))); - temp_10_term2.set(0, f1a * (d1 * ((EvtGammaMatrix::g0() * EvtGammaMatrix::g5()) * p0))); - temp_11_term1.set(0, f1v * (d1 * (EvtGammaMatrix::g0() * p1))); - temp_11_term2.set(0, f1a * (d1 * ((EvtGammaMatrix::g0() * EvtGammaMatrix::g5()) * p1))); - - temp_00_term1.set(1, f1v * (d0 * (EvtGammaMatrix::g1() * p0))); - temp_00_term2.set(1, f1a * (d0 * ((EvtGammaMatrix::g1() * EvtGammaMatrix::g5()) * p0))); - temp_01_term1.set(1, f1v * (d0 * (EvtGammaMatrix::g1() * p1))); - temp_01_term2.set(1, f1a * (d0 * ((EvtGammaMatrix::g1() * EvtGammaMatrix::g5()) * p1))); - temp_10_term1.set(1, f1v * (d1 * (EvtGammaMatrix::g1() * p0))); - temp_10_term2.set(1, f1a * (d1 * ((EvtGammaMatrix::g1() * EvtGammaMatrix::g5()) * p0))); - temp_11_term1.set(1, f1v * (d1 * (EvtGammaMatrix::g1() * p1))); - temp_11_term2.set(1, f1a * (d1 * ((EvtGammaMatrix::g1() * EvtGammaMatrix::g5()) * p1))); - - temp_00_term1.set(2, f1v * (d0 * (EvtGammaMatrix::g2() * p0))); - temp_00_term2.set(2, f1a * (d0 * ((EvtGammaMatrix::g2() * EvtGammaMatrix::g5()) * p0))); - temp_01_term1.set(2, f1v * (d0 * (EvtGammaMatrix::g2() * p1))); - temp_01_term2.set(2, f1a * (d0 * ((EvtGammaMatrix::g2() * EvtGammaMatrix::g5()) * p1))); - temp_10_term1.set(2, f1v * (d1 * (EvtGammaMatrix::g2() * p0))); - temp_10_term2.set(2, f1a * (d1 * ((EvtGammaMatrix::g2() * EvtGammaMatrix::g5()) * p0))); - temp_11_term1.set(2, f1v * (d1 * (EvtGammaMatrix::g2() * p1))); - temp_11_term2.set(2, f1a * (d1 * ((EvtGammaMatrix::g2() * EvtGammaMatrix::g5()) * p1))); - - temp_00_term1.set(3, f1v * (d0 * (EvtGammaMatrix::g3() * p0))); - temp_00_term2.set(3, f1a * (d0 * ((EvtGammaMatrix::g3() * EvtGammaMatrix::g5()) * p0))); - temp_01_term1.set(3, f1v * (d0 * (EvtGammaMatrix::g3() * p1))); - temp_01_term2.set(3, f1a * (d0 * ((EvtGammaMatrix::g3() * EvtGammaMatrix::g5()) * p1))); - temp_10_term1.set(3, f1v * (d1 * (EvtGammaMatrix::g3() * p0))); - temp_10_term2.set(3, f1a * (d1 * ((EvtGammaMatrix::g3() * EvtGammaMatrix::g5()) * p0))); - temp_11_term1.set(3, f1v * (d1 * (EvtGammaMatrix::g3() * p1))); - temp_11_term2.set(3, f1a * (d1 * ((EvtGammaMatrix::g3() * EvtGammaMatrix::g5()) * p1))); - - EvtVector4C l1, l2; - - EvtId l_num = parent->getDaug(1)->getId(); - if (l_num == EM || l_num == MUM || l_num == TAUM) { - l1 = EvtLeptonVACurrent(parent->getDaug(1)->spParent(0), parent->getDaug(2)->spParentNeutrino()); - l2 = EvtLeptonVACurrent(parent->getDaug(1)->spParent(1), parent->getDaug(2)->spParentNeutrino()); - } else { - if (l_num == EP || l_num == MUP || l_num == TAUP) { - l1 = EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(), parent->getDaug(1)->spParent(0)); - l2 = EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(), parent->getDaug(1)->spParent(1)); - } else { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Wrong lepton number" << endl; - } - } - - amp.vertex(0, 0, 0, l1.cont(temp_00_term1 + temp_00_term2)); - amp.vertex(0, 0, 1, l2.cont(temp_00_term1 + temp_00_term2)); - - amp.vertex(0, 1, 0, l1.cont(temp_01_term1 + temp_01_term2)); - amp.vertex(0, 1, 1, l2.cont(temp_01_term1 + temp_01_term2)); - - amp.vertex(1, 0, 0, l1.cont(temp_10_term1 + temp_10_term2)); - amp.vertex(1, 0, 1, l2.cont(temp_10_term1 + temp_10_term2)); - - amp.vertex(1, 1, 0, l1.cont(temp_11_term1 + temp_11_term2)); - amp.vertex(1, 1, 1, l2.cont(temp_11_term1 + temp_11_term2)); - - return; -} - -double EvtSLBaryonAmp::CalcMaxProb(EvtId parent, - EvtId baryon, - EvtId lepton, - EvtId nudaug, - EvtSemiLeptonicFF *FormFactors, - EvtComplex r00, - EvtComplex r01, - EvtComplex r10, - EvtComplex r11) { - //This routine takes the arguements parent, baryon, and lepton - //number, and a form factor model, and returns a maximum - //probability for this semileptonic form factor model. A - //brute force method is used. The 2D cos theta lepton and - //q2 phase space is probed. - - //Start by declaring a particle at rest. - - //It only makes sense to have a scalar parent. For now. - //This should be generalized later. - - // EvtScalarParticle *scalar_part; - // scalar_part=new EvtScalarParticle; - - EvtDiracParticle *dirac_part; - EvtParticle *root_part; - dirac_part = new EvtDiracParticle; - - //cludge to avoid generating random numbers! - // scalar_part->noLifeTime(); - dirac_part->noLifeTime(); - - EvtVector4R p_init; - - p_init.set(EvtPDL::getMass(parent), 0.0, 0.0, 0.0); - // scalar_part->init(parent,p_init); - // root_part=(EvtParticle *)scalar_part; - // root_part->set_type(EvtSpinType::SCALAR); - - dirac_part->init(parent, p_init); - root_part = (EvtParticle *)dirac_part; - root_part->setDiagonalSpinDensity(); - - EvtParticle *daughter, *lep, *trino; - - EvtAmp amp; - - EvtId listdaug[3]; - listdaug[0] = baryon; - listdaug[1] = lepton; - listdaug[2] = nudaug; - - amp.init(parent, 3, listdaug); - - root_part->makeDaughters(3, listdaug); - daughter = root_part->getDaug(0); - lep = root_part->getDaug(1); - trino = root_part->getDaug(2); - - //cludge to avoid generating random numbers! - daughter->noLifeTime(); - lep->noLifeTime(); - trino->noLifeTime(); - - //Initial particle is unpolarized, well it is a scalar so it is - //trivial - EvtSpinDensity rho; - rho.setDiag(root_part->getSpinStates()); - - double mass[3]; - - double m = root_part->mass(); - - EvtVector4R p4baryon, p4lepton, p4nu, p4w; - double q2max; - - double q2, elepton, plepton; - int i, j; - double erho, prho, costl; - - double maxfoundprob = 0.0; - double prob = -10.0; - int massiter; - - for (massiter = 0; massiter < 3; massiter++) { - mass[0] = EvtPDL::getMass(baryon); - mass[1] = EvtPDL::getMass(lepton); - mass[2] = EvtPDL::getMass(nudaug); - if (massiter == 1) { - mass[0] = EvtPDL::getMinMass(baryon); - } - if (massiter == 2) { - mass[0] = EvtPDL::getMaxMass(baryon); - } - - q2max = (m - mass[0]) * (m - mass[0]); - - //loop over q2 - - for (i = 0; i < 25; i++) { - q2 = ((i + 0.5) * q2max) / 25.0; - - erho = (m * m + mass[0] * mass[0] - q2) / (2.0 * m); - - prho = sqrt(erho * erho - mass[0] * mass[0]); - - p4baryon.set(erho, 0.0, 0.0, -1.0 * prho); - p4w.set(m - erho, 0.0, 0.0, prho); - - //This is in the W rest frame - elepton = (q2 + mass[1] * mass[1]) / (2.0 * sqrt(q2)); - plepton = sqrt(elepton * elepton - mass[1] * mass[1]); - - double probctl[3]; - - for (j = 0; j < 3; j++) { - costl = 0.99 * (j - 1.0); - - //These are in the W rest frame. Need to boost out into - //the B frame. - p4lepton.set(elepton, 0.0, plepton * sqrt(1.0 - costl * costl), plepton * costl); - p4nu.set(plepton, 0.0, -1.0 * plepton * sqrt(1.0 - costl * costl), -1.0 * plepton * costl); - - EvtVector4R boost((m - erho), 0.0, 0.0, 1.0 * prho); - p4lepton = boostTo(p4lepton, boost); - p4nu = boostTo(p4nu, boost); - - //Now initialize the daughters... - - daughter->init(baryon, p4baryon); - lep->init(lepton, p4lepton); - trino->init(nudaug, p4nu); - - CalcAmp(root_part, amp, FormFactors, r00, r01, r10, r11); - - //Now find the probability at this q2 and cos theta lepton point - //and compare to maxfoundprob. - - //Do a little magic to get the probability!! - prob = rho.normalizedProb(amp.getSpinDensity()); - - probctl[j] = prob; - } - - //probclt contains prob at ctl=-1,0,1. - //prob=a+b*ctl+c*ctl^2 - - double a = probctl[1]; - double b = 0.5 * (probctl[2] - probctl[0]); - double c = 0.5 * (probctl[2] + probctl[0]) - probctl[1]; - - prob = probctl[0]; - if (probctl[1] > prob) - prob = probctl[1]; - if (probctl[2] > prob) - prob = probctl[2]; - - if (fabs(c) > 1e-20) { - double ctlx = -0.5 * b / c; - if (fabs(ctlx) < 1.0) { - double probtmp = a + b * ctlx + c * ctlx * ctlx; - if (probtmp > prob) - prob = probtmp; - } - } - - //report(DEBUG,"EvtGen") << "prob,probctl:"< maxfoundprob) { - maxfoundprob = prob; - } - } - if (EvtPDL::getWidth(baryon) <= 0.0) { - //if the particle is narrow dont bother with changing the mass. - massiter = 4; - } - } - root_part->deleteTree(); - - maxfoundprob *= 1.1; - return maxfoundprob; -} -void EvtSLBaryonAmp::CalcAmp(EvtParticle *parent, - EvtAmp &, - EvtSemiLeptonicFF *FormFactors, - EvtComplex r00, - EvtComplex r01, - EvtComplex r10, - EvtComplex r11) { - // Leptons - static EvtId EM = EvtPDL::getId("e-"); - static EvtId MUM = EvtPDL::getId("mu-"); - static EvtId TAUM = EvtPDL::getId("tau-"); - // Anti-Leptons - static EvtId EP = EvtPDL::getId("e+"); - static EvtId MUP = EvtPDL::getId("mu+"); - static EvtId TAUP = EvtPDL::getId("tau+"); - - // Baryons - static EvtId LAMCP = EvtPDL::getId("Lambda_c+"); - static EvtId LAMC1P = EvtPDL::getId("Lambda_c(2593)+"); - static EvtId LAMC2P = EvtPDL::getId("Lambda_c(2625)+"); - static EvtId LAMB = EvtPDL::getId("Lambda_b0"); - static EvtId PRO = EvtPDL::getId("p+"); - static EvtId N1440 = EvtPDL::getId("N(1440)+"); - static EvtId N1520 = EvtPDL::getId("N(1520)+"); - static EvtId N1535 = EvtPDL::getId("N(1535)+"); - static EvtId N1720 = EvtPDL::getId("N(1720)+"); - static EvtId N1650 = EvtPDL::getId("N(1650)+"); - static EvtId N1700 = EvtPDL::getId("N(1700)+"); - static EvtId N1710 = EvtPDL::getId("N(1710)+"); - static EvtId N1875 = EvtPDL::getId("N(1875)+"); - static EvtId N1900 = EvtPDL::getId("N(1900)+"); - - // Anti-Baryons - static EvtId LAMCM = EvtPDL::getId("anti-Lambda_c-"); - static EvtId LAMC1M = EvtPDL::getId("anti-Lambda_c(2593)-"); - static EvtId LAMC2M = EvtPDL::getId("anti-Lambda_c(2625)-"); - static EvtId LAMBB = EvtPDL::getId("anti-Lambda_b0"); - static EvtId PROB = EvtPDL::getId("anti-p-"); - static EvtId N1440B = EvtPDL::getId("anti-N(1440)-"); - static EvtId N1520B = EvtPDL::getId("anti-N(1520)-"); - static EvtId N1535B = EvtPDL::getId("anti-N(1535)-"); - static EvtId N1720B = EvtPDL::getId("anti-N(1720)-"); - static EvtId N1650B = EvtPDL::getId("anti-N(1650)-"); - static EvtId N1700B = EvtPDL::getId("anti-N(1700)-"); - static EvtId N1710B = EvtPDL::getId("anti-N(1710)-"); - static EvtId N1875B = EvtPDL::getId("anti-N(1875)-"); - static EvtId N1900B = EvtPDL::getId("anti-N(1900)-"); - - // Set the spin density matrix of the parent baryon - EvtSpinDensity rho; - rho.setDim(2); - rho.set(0, 0, r00); - rho.set(0, 1, r01); - - rho.set(1, 0, r10); - rho.set(1, 1, r11); - - EvtVector4R vector4P = parent->getP4Lab(); - double pmag = vector4P.d3mag(); - double cosTheta = vector4P.get(3) / pmag; - - double theta = acos(cosTheta); - double phi = atan2(vector4P.get(2), vector4P.get(1)); - - parent->setSpinDensityForwardHelicityBasis(rho, phi, theta, 0.0); - //parent->setSpinDensityForward(rho); - - // Set the four momentum of the parent baryon in it's rest frame - EvtVector4R p4b; - p4b.set(parent->mass(), 0.0, 0.0, 0.0); - - // Get the four momentum of the daughter baryon in the parent's rest frame - EvtVector4R p4daught = parent->getDaug(0)->getP4(); - - // Add the lepton and neutrino 4 momenta to find q (q^2) - EvtVector4R q = parent->getDaug(1)->getP4() + parent->getDaug(2)->getP4(); - - double q2 = q.mass2(); - - EvtId l_num = parent->getDaug(1)->getId(); - EvtId bar_num = parent->getDaug(0)->getId(); - EvtId par_num = parent->getId(); - - double baryonmass = parent->getDaug(0)->mass(); - - // Handle spin-1/2 daughter baryon Dirac spinor cases - if (EvtPDL::getSpinType(parent->getDaug(0)->getId()) == EvtSpinType::DIRAC) { - // Set the form factors - double f1, f2, f3, g1, g2, g3; - FormFactors->getdiracff(par_num, bar_num, q2, baryonmass, &f1, &f2, &f3, &g1, &g2, &g3); - - const double form_fact[6] = {f1, f2, f3, g1, g2, g3}; - - EvtVector4C b11, b12, b21, b22, l1, l2; - - // Lepton Current - if (l_num == EM || l_num == MUM || l_num == TAUM) { - l1 = EvtLeptonVACurrent(parent->getDaug(1)->spParent(0), parent->getDaug(2)->spParentNeutrino()); - l2 = EvtLeptonVACurrent(parent->getDaug(1)->spParent(1), parent->getDaug(2)->spParentNeutrino()); - - } else if (l_num == EP || l_num == MUP || l_num == TAUP) { - l1 = EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(), parent->getDaug(1)->spParent(0)); - l2 = EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(), parent->getDaug(1)->spParent(1)); - - } else { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Wrong lepton number \n"; - ::abort(); - } - - // Baryon current - - // Flag for particle/anti-particle parent, daughter with same/opp. parity - // pflag = 0 => particle, same parity parent, daughter - // pflag = 1 => particle, opp. parity parent, daughter - // pflag = 2 => anti-particle, same parity parent, daughter - // pflag = 3 => anti-particle, opp. parity parent, daughter - - int pflag = 0; - - // Handle 1/2+ -> 1/2+ first - if ((par_num == LAMB && bar_num == LAMCP) || (par_num == LAMBB && bar_num == LAMCM) || - (par_num == LAMB && bar_num == PRO) || (par_num == LAMBB && bar_num == PROB) || - (par_num == LAMB && bar_num == N1440) || (par_num == LAMBB && bar_num == N1440B) || - (par_num == LAMB && bar_num == N1710) || (par_num == LAMBB && bar_num == N1710B) - - ) { - // Set particle/anti-particle flag - if (bar_num == LAMCP || bar_num == PRO || bar_num == N1440 || bar_num == N1710) - pflag = 0; - else if (bar_num == LAMCM || bar_num == PROB || bar_num == N1440B || bar_num == N1710B) - pflag = 2; - - b11 = EvtBaryonVACurrent(parent->getDaug(0)->spParent(0), parent->sp(0), p4b, p4daught, form_fact, pflag); - b21 = EvtBaryonVACurrent(parent->getDaug(0)->spParent(0), parent->sp(1), p4b, p4daught, form_fact, pflag); - b12 = EvtBaryonVACurrent(parent->getDaug(0)->spParent(1), parent->sp(0), p4b, p4daught, form_fact, pflag); - b22 = EvtBaryonVACurrent(parent->getDaug(0)->spParent(1), parent->sp(1), p4b, p4daught, form_fact, pflag); - } - - // Handle 1/2+ -> 1/2- second - else if ((par_num == LAMB && bar_num == LAMC1P) || (par_num == LAMBB && bar_num == LAMC1M) || - (par_num == LAMB && bar_num == N1535) || (par_num == LAMBB && bar_num == N1535B) || - (par_num == LAMB && bar_num == N1650) || (par_num == LAMBB && bar_num == N1650B)) { - // Set particle/anti-particle flag - if (bar_num == LAMC1P || bar_num == N1535 || bar_num == N1650) - pflag = 1; - else if (bar_num == LAMC1M || bar_num == N1535B || bar_num == N1650B) - pflag = 3; - - b11 = EvtBaryonVACurrent( - (parent->getDaug(0)->spParent(0)), (EvtGammaMatrix::g5() * parent->sp(0)), p4b, p4daught, form_fact, pflag); - b21 = EvtBaryonVACurrent( - (parent->getDaug(0)->spParent(0)), (EvtGammaMatrix::g5() * parent->sp(1)), p4b, p4daught, form_fact, pflag); - b12 = EvtBaryonVACurrent( - (parent->getDaug(0)->spParent(1)), (EvtGammaMatrix::g5() * parent->sp(0)), p4b, p4daught, form_fact, pflag); - b22 = EvtBaryonVACurrent( - (parent->getDaug(0)->spParent(1)), (EvtGammaMatrix::g5() * parent->sp(1)), p4b, p4daught, form_fact, pflag); - - } - - else { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Dirac semilep. baryon current " - << "not implemented for this decay sequence." << std::endl; - ::abort(); - } - - amp.vertex(0, 0, 0, l1 * b11); - amp.vertex(0, 0, 1, l2 * b11); - - amp.vertex(1, 0, 0, l1 * b21); - amp.vertex(1, 0, 1, l2 * b21); - - amp.vertex(0, 1, 0, l1 * b12); - amp.vertex(0, 1, 1, l2 * b12); - - amp.vertex(1, 1, 0, l1 * b22); - amp.vertex(1, 1, 1, l2 * b22); - - } - - // Need special handling for the spin-3/2 daughter baryon - // Rarita-Schwinger spinor cases - else if (EvtPDL::getSpinType(parent->getDaug(0)->getId()) == EvtSpinType::RARITASCHWINGER) { - // Set the form factors - double f1, f2, f3, f4, g1, g2, g3, g4; - FormFactors->getraritaff(par_num, bar_num, q2, baryonmass, &f1, &f2, &f3, &f4, &g1, &g2, &g3, &g4); - - const double form_fact[8] = {f1, f2, f3, f4, g1, g2, g3, g4}; - - EvtId l_num = parent->getDaug(1)->getId(); - - EvtVector4C b11, b12, b21, b22, b13, b23, b14, b24, l1, l2; - - // Lepton Current - if (l_num == EM || l_num == MUM || l_num == TAUM) { - // Lepton Current - l1 = EvtLeptonVACurrent(parent->getDaug(1)->spParent(0), parent->getDaug(2)->spParentNeutrino()); - l2 = EvtLeptonVACurrent(parent->getDaug(1)->spParent(1), parent->getDaug(2)->spParentNeutrino()); - } else if (l_num == EP || l_num == MUP || l_num == TAUP) { - l1 = EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(), parent->getDaug(1)->spParent(0)); - l2 = EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(), parent->getDaug(1)->spParent(1)); - - } else { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Wrong lepton number \n"; - } - - // Baryon Current - // Declare particle, anti-particle flag, same/opp. parity - // pflag = 0 => particle - // pflag = 1 => anti-particle - int pflag = 0; - - // Handle cases of 1/2+ -> 3/2- or 3/2+ - if ((par_num == LAMB && bar_num == LAMC2P) || (par_num == LAMB && bar_num == N1720) || - (par_num == LAMB && bar_num == N1520) || (par_num == LAMB && bar_num == N1700) || - (par_num == LAMB && bar_num == N1875) || (par_num == LAMB && bar_num == N1900)) { - // Set flag for particle case - pflag = 0; - } else if ((par_num == LAMBB && bar_num == LAMC2M) || (par_num == LAMBB && bar_num == N1520B) || - (par_num == LAMBB && bar_num == N1700B) || (par_num == LAMBB && bar_num == N1875B)) { - // Set flag for anti-particle opposite parity case - pflag = 1; - } - // Handle anti-particle case for 1/2+ -> 3/2+ - else if ((par_num == LAMBB && bar_num == N1720B) || (par_num == LAMBB && bar_num == N1900B)) { - pflag = 2; - } else { - EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Rarita-Schwinger semilep. baryon current " - << "not implemented for this decay sequence." << std::endl; - ::abort(); - } - - // Baryon current - b11 = EvtBaryonVARaritaCurrent(parent->getDaug(0)->spRSParent(0), parent->sp(0), p4b, p4daught, form_fact, pflag); - b21 = EvtBaryonVARaritaCurrent(parent->getDaug(0)->spRSParent(0), parent->sp(1), p4b, p4daught, form_fact, pflag); - - b12 = EvtBaryonVARaritaCurrent(parent->getDaug(0)->spRSParent(1), parent->sp(0), p4b, p4daught, form_fact, pflag); - b22 = EvtBaryonVARaritaCurrent(parent->getDaug(0)->spRSParent(1), parent->sp(1), p4b, p4daught, form_fact, pflag); - - b13 = EvtBaryonVARaritaCurrent(parent->getDaug(0)->spRSParent(2), parent->sp(0), p4b, p4daught, form_fact, pflag); - b23 = EvtBaryonVARaritaCurrent(parent->getDaug(0)->spRSParent(2), parent->sp(1), p4b, p4daught, form_fact, pflag); - - b14 = EvtBaryonVARaritaCurrent(parent->getDaug(0)->spRSParent(3), parent->sp(0), p4b, p4daught, form_fact, pflag); - b24 = EvtBaryonVARaritaCurrent(parent->getDaug(0)->spRSParent(3), parent->sp(1), p4b, p4daught, form_fact, pflag); - - amp.vertex(0, 0, 0, l1 * b11); - amp.vertex(0, 0, 1, l2 * b11); - - amp.vertex(1, 0, 0, l1 * b21); - amp.vertex(1, 0, 1, l2 * b21); - - amp.vertex(0, 1, 0, l1 * b12); - amp.vertex(0, 1, 1, l2 * b12); - - amp.vertex(1, 1, 0, l1 * b22); - amp.vertex(1, 1, 1, l2 * b22); - - amp.vertex(0, 2, 0, l1 * b13); - amp.vertex(0, 2, 1, l2 * b13); - - amp.vertex(1, 2, 0, l1 * b23); - amp.vertex(1, 2, 1, l2 * b23); - - amp.vertex(0, 3, 0, l1 * b14); - amp.vertex(0, 3, 1, l2 * b14); - - amp.vertex(1, 3, 0, l1 * b24); - amp.vertex(1, 3, 1, l2 * b24); - } -} - -EvtVector4C EvtSLBaryonAmp::EvtBaryonVACurrent(const EvtDiracSpinor &Bf, - const EvtDiracSpinor &Bi, - EvtVector4R parent, - EvtVector4R daught, - const double *ff, - int pflag) { - // flag == 0 => particle - // flag == 1 => particle, opposite parity - // flag == 2 => anti-particle, same parity - // flag == 3 => anti-particle, opposite parity - - // particle - EvtComplex cv = EvtComplex(1.0, 0.); - EvtComplex ca = EvtComplex(1.0, 0.); - - EvtComplex cg0 = EvtComplex(1.0, 0.); - EvtComplex cg5 = EvtComplex(1.0, 0.); - - // antiparticle- same parity parent & daughter - if (pflag == 2) { - cv = EvtComplex(-1.0, 0.); - ca = EvtComplex(1.0, 0.); - - cg0 = EvtComplex(1.0, 0.0); - // Changed cg5 from -i to -1 as appears to fix particle - anti-particle discrepency - cg5 = EvtComplex(-1.0, 0.0); - } - // antiparticle- opposite parity parent & daughter - else if (pflag == 3) { - cv = EvtComplex(1.0, 0.); - ca = EvtComplex(-1.0, 0.); - - // Changed cg0 from -i to -1 as appears to fix particle - anti-particle discrepency - cg0 = EvtComplex(-1.0, 0.0); - cg5 = EvtComplex(1.0, 0.0); - } - - EvtVector4C t[6]; - - // Term 1 = \bar{u}(p',s')*(F_1(q^2)*\gamma_{mu})*u(p,s) - t[0] = cv * EvtLeptonVCurrent(Bf, Bi); - - // Term 2 = \bar{u}(p',s')*(F_2(q^2)*(p_{mu}/m_{\Lambda_Q}))*u(p,s) - t[1] = cg0 * EvtLeptonSCurrent(Bf, Bi) * (parent / parent.mass()); - - // Term 3 = \bar{u}(p',s')*(F_3(q^2)*(p'_{mu}/m_{\Lambda_q}))*u(p,s) - t[2] = cg0 * EvtLeptonSCurrent(Bf, Bi) * (daught / daught.mass()); - - // Term 4 = \bar{u}(p',s')*(G_1(q^2)*\gamma_{mu}*\gamma_5)*u(p,s) - t[3] = ca * EvtLeptonACurrent(Bf, Bi); - - // Term 5 = \bar{u}(p',s')*(G_2(q^2)*(p_{mu}/m_{\Lambda_Q})*\gamma_5)*u(p,s) - t[4] = cg5 * EvtLeptonPCurrent(Bf, Bi) * (parent / parent.mass()); - - // Term 6 = \bar{u}(p',s')*(G_3(q^2)*(p'_{mu}/m_{\Lambda_q})*\gamma_5)*u(p,s) - t[5] = cg5 * EvtLeptonPCurrent(Bf, Bi) * (daught / daught.mass()); - - // Sum the individual terms - EvtVector4C current = (ff[0] * t[0] + ff[1] * t[1] + ff[2] * t[2] - ff[3] * t[3] - ff[4] * t[4] - ff[5] * t[5]); - - return current; -} - -EvtVector4C EvtSLBaryonAmp::EvtBaryonVARaritaCurrent(const EvtRaritaSchwinger &Bf, - const EvtDiracSpinor &Bi, - EvtVector4R parent, - EvtVector4R daught, - const double *ff, - int pflag) { - // flag == 0 => particle - // flag == 1 => anti-particle - - // particle - EvtComplex cv = EvtComplex(1.0, 0.); - EvtComplex ca = EvtComplex(1.0, 0.); - - EvtComplex cg0 = EvtComplex(1.0, 0.); - EvtComplex cg5 = EvtComplex(1.0, 0.); - - // antiparticle opposite parity - if (pflag == 1) { - cv = EvtComplex(-1.0, 0.); - ca = EvtComplex(1.0, 0.); - - cg0 = EvtComplex(1.0, 0.0); - cg5 = EvtComplex(-1.0, 0.0); - } - // antiparticle same parity - else if (pflag == 2) { - cv = EvtComplex(1.0, 0.); - ca = EvtComplex(-1.0, 0.); - - cg0 = EvtComplex(-1.0, 0.0); - cg5 = EvtComplex(1.0, 0.0); - } - - EvtVector4C t[8]; - EvtTensor4C id; - id.setdiag(1.0, 1.0, 1.0, 1.0); - - EvtDiracSpinor tmp; - for (int i = 0; i < 4; i++) { - tmp.set_spinor(i, Bf.getVector(i) * parent); - } - - EvtVector4C v1, v2; - for (int i = 0; i < 4; i++) { - v1.set(i, EvtLeptonSCurrent(Bf.getSpinor(i), Bi)); - v2.set(i, EvtLeptonPCurrent(Bf.getSpinor(i), Bi)); - } - - // Term 1 = \bar{u}^{\alpha}(p',s')*(p_{\alpha}/m_{\Lambda_Q})*(F_1(q^2)*\gamma_{mu})*u(p,s) - t[0] = (cv / parent.mass()) * EvtLeptonVCurrent(tmp, Bi); - - // Term 2 - // = \bar{u}^{\alpha}(p',s')*(p_{\alpha}/m_{\Lambda_Q})*(F_2(q^2)*(p_{mu}/m_{\Lambda_Q}))*u(p,s) - t[1] = ((cg0 / parent.mass()) * EvtLeptonSCurrent(tmp, Bi)) * (parent / parent.mass()); - - // Term 3 - // = \bar{u}^{\alpha}(p',s')*(p_{\alpha}/m_{\Lambda_Q})*(F_3(q^2)*(p'_{mu}/m_{\Lambda_q}))*u(p,s) - t[2] = ((cg0 / parent.mass()) * EvtLeptonSCurrent(tmp, Bi)) * (daught / daught.mass()); - - // Term 4 = \bar{u}^{\alpha}(p',s')*(F_4(q^2)*g_{\alpha,\mu})*u(p,s) - t[3] = cg0 * (id.cont2(v1)); - - // Term 5 - // = \bar{u}^{\alpha}(p',s')*(p_{\alpha}/m_{\Lambda_Q})*(G_1(q^2)*\gamma_{mu}*\gamma_5)*u(p,s) - t[4] = (ca / parent.mass()) * EvtLeptonACurrent(tmp, Bi); - - // Term 6 - // = \bar{u}^{\alpha}(p',s')*(p_{\alpha}/m_{\Lambda_Q}) - // *(G_2(q^2)*(p_{mu}/m_{\Lambda_Q})*\gamma_5)*u(p,s) - t[5] = ((cg5 / parent.mass()) * EvtLeptonPCurrent(tmp, Bi)) * (parent / parent.mass()); - - // Term 7 - // = \bar{u}^{\alpha}(p',s')*(p_{\alpha}/m_{\Lambda_Q}) - // *(G_3(q^2)*(p'_{mu}/m_{\Lambda_q})*\gamma_5)*u(p,s) - t[6] = ((cg5 / parent.mass()) * EvtLeptonPCurrent(tmp, Bi)) * (daught / daught.mass()); - - // Term 8 = \bar{u}^{\alpha}(p',s')*(G_4(q^2)*g_{\alpha,\mu}*\gamma_5))*u(p,s) - t[7] = cg5 * (id.cont2(v2)); - - // Sum the individual terms - EvtVector4C current = (ff[0] * t[0] + ff[1] * t[1] + ff[2] * t[2] + ff[3] * t[3] - ff[4] * t[4] - ff[5] * t[5] - - ff[6] * t[6] - ff[7] * t[7]); - - return current; -} diff --git a/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtSLBaryonAmp.hh b/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtSLBaryonAmp.hh deleted file mode 100644 index 40a48e1febe14..0000000000000 --- a/GeneratorInterface/EvtGenInterface/plugins/EvtGenUserModels/EvtSLBaryonAmp.hh +++ /dev/null @@ -1,78 +0,0 @@ -//-------------------------------------------------------------------------- -// -// Environment: -// This software is part of the EvtGen package developed jointly -// for the BaBar and CLEO collaborations. If you use all or part -// of it, please give an appropriate acknowledgement. -// -// Copyright Information: See EvtGen/COPYRIGHT -// Copyright (C) 1998 Caltech, UCSB -// -// Module: EvtGen/EvtSLBaryonAmp.hh -// -// Description: -// -// Modification history: -// -// Lange Oct 20, 2004 Created -// -//------------------------------------------------------------------------ - -#ifndef EVTSLBARYONAMP_HH -#define EVTSLBARYONAMP_HH - -#include "EvtGenBase/EvtSemiLeptonicAmp.hh" -#include "EvtGenBase/EvtComplex.hh" - -class EvtParticle; -class EvtAmp; -class EvtSemiLeptonicFF; - -class EvtVector4C; -class EvtVector4R; -class EvtDiracSpinor; -class EvtRaritaSchwinger; - -class EvtSLBaryonAmp : public EvtSemiLeptonicAmp { -public: - ~EvtSLBaryonAmp() override; - - //Daughters are initialized and have been added to the parent. - //No need to carry around the daughters seperately! - void CalcAmp(EvtParticle *parent, EvtAmp &, EvtSemiLeptonicFF *FormFactors) override; - - void CalcAmp(EvtParticle *parent, - EvtAmp &, - EvtSemiLeptonicFF *FormFactors, - EvtComplex r00, - EvtComplex r01, - EvtComplex r10, - EvtComplex r11); - - double CalcMaxProb(EvtId parent, - EvtId meson, - EvtId lepton, - EvtId nudaug, - EvtSemiLeptonicFF *FormFactors, - EvtComplex r00, - EvtComplex r01, - EvtComplex r10, - EvtComplex r11); - -private: - EvtVector4C EvtBaryonVACurrent(const EvtDiracSpinor &Bf, - const EvtDiracSpinor &Bi, - EvtVector4R parent, - EvtVector4R daught, - const double *ff, - int pflag); - - EvtVector4C EvtBaryonVARaritaCurrent(const EvtRaritaSchwinger &Bf_vect, - const EvtDiracSpinor &Bi, - EvtVector4R parent, - EvtVector4R daught, - const double *ff, - int pflag); -}; - -#endif diff --git a/GeneratorInterface/EvtGenInterface/plugins/test/Py8_lambadb_evtgen1_Lb2plnuLCSR_cfg.py b/GeneratorInterface/EvtGenInterface/plugins/test/Py8_lambadb_evtgen1_Lb2plnuLCSR_cfg.py index e9f69503ae183..e5397be84521b 100644 --- a/GeneratorInterface/EvtGenInterface/plugins/test/Py8_lambadb_evtgen1_Lb2plnuLCSR_cfg.py +++ b/GeneratorInterface/EvtGenInterface/plugins/test/Py8_lambadb_evtgen1_Lb2plnuLCSR_cfg.py @@ -53,9 +53,9 @@ ExternalDecays = cms.PSet( EvtGen1 = cms.untracked.PSet( convertPythiaCodes = cms.untracked.bool(False), - decay_table = cms.string('GeneratorInterface/EvtGenInterface/data/DECAY_2014_NOLONGLIFE.DEC'), + decay_table = cms.string('GeneratorInterface/EvtGenInterface/data/DECAY_NOLONGLIFE.DEC'), list_forced_decays = cms.vstring('MyLambda_b0','Myanti-Lambda_b0'), - particle_property_file = cms.FileInPath('GeneratorInterface/EvtGenInterface/data/evt_2014.pdl'), + particle_property_file = cms.FileInPath('GeneratorInterface/EvtGenInterface/data/evt.pdl'), operates_on_particles = cms.vint32(5122), #only care about signal particle user_decay_embedded = cms.vstring( """ diff --git a/GeneratorInterface/EvtGenInterface/test/Py8_bplus_evtgen1_cfg.py b/GeneratorInterface/EvtGenInterface/test/Py8_bplus_evtgen1_cfg.py index 95e59233a6305..ca3f35b889e06 100644 --- a/GeneratorInterface/EvtGenInterface/test/Py8_bplus_evtgen1_cfg.py +++ b/GeneratorInterface/EvtGenInterface/test/Py8_bplus_evtgen1_cfg.py @@ -76,9 +76,9 @@ ExternalDecays = cms.PSet( EvtGen1 = cms.untracked.PSet( convertPythiaCodes = cms.untracked.bool(False), - decay_table = cms.string('GeneratorInterface/EvtGenInterface/data/DECAY_2014_NOLONGLIFE.DEC'), + decay_table = cms.string('GeneratorInterface/EvtGenInterface/data/DECAY_NOLONGLIFE.DEC'), list_forced_decays = cms.vstring('MyB+','MyB-'), - particle_property_file = cms.FileInPath('GeneratorInterface/EvtGenInterface/data/evt_2014.pdl'), + particle_property_file = cms.FileInPath('GeneratorInterface/EvtGenInterface/data/evt.pdl'), user_decay_embedded = cms.vstring( 'Alias MyB+ B+', 'Alias MyB- B-', diff --git a/GeneratorInterface/EvtGenInterface/test/Py8_tt_evtgen1_cfg.py b/GeneratorInterface/EvtGenInterface/test/Py8_tt_evtgen1_cfg.py index f12074f40ff01..db0b7f6c948cf 100644 --- a/GeneratorInterface/EvtGenInterface/test/Py8_tt_evtgen1_cfg.py +++ b/GeneratorInterface/EvtGenInterface/test/Py8_tt_evtgen1_cfg.py @@ -20,11 +20,11 @@ ExternalDecays = cms.PSet( EvtGen1 = cms.untracked.PSet( - decay_table = cms.string('GeneratorInterface/EvtGenInterface/data/DECAY_2014_NOLONGLIFE.DEC'), - particle_property_file = cms.FileInPath('GeneratorInterface/EvtGenInterface/data/evt_2014.pdl'), - convertPythiaCodes = cms.untracked.bool(False), # this is needed for evt_2014.pdl + decay_table = cms.string('GeneratorInterface/EvtGenInterface/data/DECAY_NOLONGLIFE.DEC'), + particle_property_file = cms.FileInPath('GeneratorInterface/EvtGenInterface/data/evt.pdl'), + convertPythiaCodes = cms.untracked.bool(False), # this is needed since 1.6 list_forced_decays = cms.vstring(), - operates_on_particles = cms.vint32(0) #will decay all particles coded in interface + operates_on_particles = cms.vint32(0) #will decay all particles coded in interface, it test the whole system ), parameterSets = cms.vstring('EvtGen1') ), diff --git a/GeneratorInterface/ExhumeInterface/test/BuildFile.xml b/GeneratorInterface/ExhumeInterface/test/BuildFile.xml index 27069b6201cd9..43501f382ddaf 100644 --- a/GeneratorInterface/ExhumeInterface/test/BuildFile.xml +++ b/GeneratorInterface/ExhumeInterface/test/BuildFile.xml @@ -2,6 +2,7 @@ + diff --git a/GeneratorInterface/ExternalDecays/test/Py6EvtGenFilter_cfg.py b/GeneratorInterface/ExternalDecays/test/Py6EvtGenFilter_cfg.py index ede491450e894..524e261b98a74 100644 --- a/GeneratorInterface/ExternalDecays/test/Py6EvtGenFilter_cfg.py +++ b/GeneratorInterface/ExternalDecays/test/Py6EvtGenFilter_cfg.py @@ -14,8 +14,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(500)) diff --git a/GeneratorInterface/ExternalDecays/test/Py6GenFilter_Photos_cfg.py b/GeneratorInterface/ExternalDecays/test/Py6GenFilter_Photos_cfg.py index 759eeb5ba7444..8d171f018c170 100644 --- a/GeneratorInterface/ExternalDecays/test/Py6GenFilter_Photos_cfg.py +++ b/GeneratorInterface/ExternalDecays/test/Py6GenFilter_Photos_cfg.py @@ -23,8 +23,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(20)) diff --git a/GeneratorInterface/ExternalDecays/test/Py6GenFilter_W2TauNu_Tauola_cfg.py b/GeneratorInterface/ExternalDecays/test/Py6GenFilter_W2TauNu_Tauola_cfg.py index 70ea3183896b1..634acd329d95c 100644 --- a/GeneratorInterface/ExternalDecays/test/Py6GenFilter_W2TauNu_Tauola_cfg.py +++ b/GeneratorInterface/ExternalDecays/test/Py6GenFilter_W2TauNu_Tauola_cfg.py @@ -27,8 +27,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(5)) diff --git a/GeneratorInterface/ExternalDecays/test/Py8GenFilter_Onia_EvtGen_cfg.py b/GeneratorInterface/ExternalDecays/test/Py8GenFilter_Onia_EvtGen_cfg.py index a19f5bfd79f43..813ba78f2bcc8 100644 --- a/GeneratorInterface/ExternalDecays/test/Py8GenFilter_Onia_EvtGen_cfg.py +++ b/GeneratorInterface/ExternalDecays/test/Py8GenFilter_Onia_EvtGen_cfg.py @@ -68,8 +68,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService", diff --git a/GeneratorInterface/ExternalDecays/test/Py8GenFilter_Photos_cfg.py b/GeneratorInterface/ExternalDecays/test/Py8GenFilter_Photos_cfg.py index 0321b3a54f78e..4aab273830836 100644 --- a/GeneratorInterface/ExternalDecays/test/Py8GenFilter_Photos_cfg.py +++ b/GeneratorInterface/ExternalDecays/test/Py8GenFilter_Photos_cfg.py @@ -61,8 +61,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService", diff --git a/GeneratorInterface/ExternalDecays/test/Py8GenFilter_W2TauNu_Tauola_cfg.py b/GeneratorInterface/ExternalDecays/test/Py8GenFilter_W2TauNu_Tauola_cfg.py index b47fbf0361f87..0f25b3b5ad04f 100644 --- a/GeneratorInterface/ExternalDecays/test/Py8GenFilter_W2TauNu_Tauola_cfg.py +++ b/GeneratorInterface/ExternalDecays/test/Py8GenFilter_W2TauNu_Tauola_cfg.py @@ -74,8 +74,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService", diff --git a/GeneratorInterface/ExternalDecays/test/Py8_Z2tautau_tauolacxx_cfg.py b/GeneratorInterface/ExternalDecays/test/Py8_Z2tautau_tauolacxx_cfg.py index 4a73cd921926a..933e0a1f06e7e 100644 --- a/GeneratorInterface/ExternalDecays/test/Py8_Z2tautau_tauolacxx_cfg.py +++ b/GeneratorInterface/ExternalDecays/test/Py8_Z2tautau_tauolacxx_cfg.py @@ -75,8 +75,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService", diff --git a/GeneratorInterface/ExternalDecays/test/TauSpinnerWTest.py b/GeneratorInterface/ExternalDecays/test/TauSpinnerWTest.py index 9e48e5d243397..7437aeb6f4381 100644 --- a/GeneratorInterface/ExternalDecays/test/TauSpinnerWTest.py +++ b/GeneratorInterface/ExternalDecays/test/TauSpinnerWTest.py @@ -31,8 +31,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(100)) diff --git a/GeneratorInterface/ExternalDecays/test/TauSpinnerZTest.py b/GeneratorInterface/ExternalDecays/test/TauSpinnerZTest.py index ba33caac5a2a3..6bb08e027980b 100644 --- a/GeneratorInterface/ExternalDecays/test/TauSpinnerZTest.py +++ b/GeneratorInterface/ExternalDecays/test/TauSpinnerZTest.py @@ -24,8 +24,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(100)) diff --git a/GeneratorInterface/GenExtensions/test/EDDE_cfg.py b/GeneratorInterface/GenExtensions/test/EDDE_cfg.py index 309490a7d52f7..da7933661db60 100644 --- a/GeneratorInterface/GenExtensions/test/EDDE_cfg.py +++ b/GeneratorInterface/GenExtensions/test/EDDE_cfg.py @@ -22,8 +22,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(50)) diff --git a/GeneratorInterface/GenFilters/plugins/CosmicGenFilterHelix.cc b/GeneratorInterface/GenFilters/plugins/CosmicGenFilterHelix.cc index e79dadb9ec7c4..ed88f22d5420d 100644 --- a/GeneratorInterface/GenFilters/plugins/CosmicGenFilterHelix.cc +++ b/GeneratorInterface/GenFilters/plugins/CosmicGenFilterHelix.cc @@ -8,19 +8,12 @@ // user include files #include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/Common/interface/Handle.h" - #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/InputTag.h" - -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" - #include "TrackPropagation/SteppingHelixPropagator/interface/SteppingHelixPropagator.h" -#include "TrackingTools/Records/interface/TrackingComponentsRecord.h" - #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h" #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h" #include "TrackingTools/TrajectoryParametrization/interface/GlobalTrajectoryParameters.h" - #include "CommonTools/UtilAlgos/interface/TFileService.h" #include "CommonTools/Utils/interface/TFileDirectory.h" #include "FWCore/ServiceRegistry/interface/Service.h" @@ -38,9 +31,10 @@ /////////////////////////////////////////////////////////////////////////////////////////////////// CosmicGenFilterHelix::CosmicGenFilterHelix(const edm::ParameterSet &cfg) - : theIds(cfg.getParameter >("pdgIds")), + : theMFToken(esConsumes()), + thePropToken(esConsumes(edm::ESInputTag("", cfg.getParameter("propagator")))), + theIds(cfg.getParameter >("pdgIds")), theCharges(cfg.getParameter >("charges")), - thePropagatorName(cfg.getParameter("propagator")), theMinP2(cfg.getParameter("minP") * cfg.getParameter("minP")), theMinPt2(cfg.getParameter("minPt") * cfg.getParameter("minPt")), theDoMonitor(cfg.getUntrackedParameter("doMonitor")) { @@ -345,18 +339,12 @@ bool CosmicGenFilterHelix::charge(int id, int &charge) const { //_________________________________________________________________________________________________ const MagneticField *CosmicGenFilterHelix::getMagneticField(const edm::EventSetup &setup) const { - edm::ESHandle fieldHandle; - setup.get().get(fieldHandle); - - return fieldHandle.product(); + return &setup.getData(theMFToken); } //_________________________________________________________________________________________________ const Propagator *CosmicGenFilterHelix::getPropagator(const edm::EventSetup &setup) const { - edm::ESHandle propHandle; - setup.get().get(thePropagatorName, propHandle); - - const Propagator *prop = propHandle.product(); + const Propagator *prop = &setup.getData(thePropToken); if (!dynamic_cast(prop)) { edm::LogWarning("BadConfig") << "@SUB=CosmicGenFilterHelix::getPropagator" << "Not a SteppingHelixPropagator!"; diff --git a/GeneratorInterface/GenFilters/plugins/CosmicGenFilterHelix.h b/GeneratorInterface/GenFilters/plugins/CosmicGenFilterHelix.h index 25144ad75875a..69360eeb20671 100644 --- a/GeneratorInterface/GenFilters/plugins/CosmicGenFilterHelix.h +++ b/GeneratorInterface/GenFilters/plugins/CosmicGenFilterHelix.h @@ -29,6 +29,9 @@ #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" +#include "TrackingTools/Records/interface/TrackingComponentsRecord.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" + #include #include @@ -59,12 +62,14 @@ class CosmicGenFilterHelix : public edm::one::EDFilter theMFToken; + const edm::ESGetToken thePropToken; + edm::EDGetTokenT theSrcToken; - const std::vector theIds; /// requested Ids - const std::vector theCharges; /// charges, parallel to theIds - const std::string thePropagatorName; // tag to get propagator from ESetup - const double theMinP2; /// minimal momentum^2 after propagation to cylinder - const double theMinPt2; /// minimal transverse^2 momentum after propagation to cylinder + const std::vector theIds; /// requested Ids + const std::vector theCharges; /// charges, parallel to theIds + const double theMinP2; /// minimal momentum^2 after propagation to cylinder + const double theMinPt2; /// minimal transverse^2 momentum after propagation to cylinder Cylinder::ConstCylinderPointer theTargetCylinder; /// target cylinder, around z-axis Plane::ConstPlanePointer theTargetPlaneMin; /// plane closing cylinder at 'negative' side diff --git a/GeneratorInterface/GenFilters/plugins/MCMultiParticleFilter.cc b/GeneratorInterface/GenFilters/plugins/MCMultiParticleFilter.cc index 32350541cfd6a..cd6fefd93b380 100644 --- a/GeneratorInterface/GenFilters/plugins/MCMultiParticleFilter.cc +++ b/GeneratorInterface/GenFilters/plugins/MCMultiParticleFilter.cc @@ -56,6 +56,10 @@ class MCMultiParticleFilter : public edm::global::EDFilter<> { std::vector ptMin_; // minimum Pt of particles std::vector etaMax_; // maximum fabs(eta) of particles std::vector status_; // status of particles + std::vector decayRadiusMin; + std::vector decayRadiusMax; + std::vector decayZMin; + std::vector decayZMax; }; MCMultiParticleFilter::MCMultiParticleFilter(const edm::ParameterSet& iConfig) @@ -75,14 +79,35 @@ MCMultiParticleFilter::MCMultiParticleFilter(const edm::ParameterSet& iConfig) std::vector defstat(1, 0); std::vector defmother; defmother.push_back(0); - motherID_ = iConfig.getUntrackedParameter >("MotherID", defstat); + motherID_ = iConfig.getUntrackedParameter >("MotherID", defmother); + + std::vector defDecayRadiusmin; + defDecayRadiusmin.push_back(-1.); + decayRadiusMin = iConfig.getUntrackedParameter >("MinDecayRadius", defDecayRadiusmin); + + std::vector defDecayRadiusmax; + defDecayRadiusmax.push_back(1.e5); + decayRadiusMax = iConfig.getUntrackedParameter >("MaxDecayRadius", defDecayRadiusmax); + + std::vector defDecayZmin; + defDecayZmin.push_back(-1.e5); + decayZMin = iConfig.getUntrackedParameter >("MinDecayZ", defDecayZmin); + + std::vector defDecayZmax; + defDecayZmax.push_back(1.e5); + decayZMax = iConfig.getUntrackedParameter >("MaxDecayZ", defDecayZmax); // check for same size if ((ptMin_.size() > 1 && particleID_.size() != ptMin_.size()) || (etaMax_.size() > 1 && particleID_.size() != etaMax_.size()) || (status_.size() > 1 && particleID_.size() != status_.size()) || - (motherID_.size() > 1 && particleID_.size() != motherID_.size())) { + (motherID_.size() > 1 && particleID_.size() != motherID_.size()) || + (decayRadiusMin.size() > 1 && particleID_.size() != decayRadiusMin.size()) || + (decayRadiusMax.size() > 1 && particleID_.size() != decayRadiusMax.size()) || + (decayZMin.size() > 1 && particleID_.size() != decayZMin.size()) || + (decayZMax.size() > 1 && particleID_.size() != decayZMax.size())) { edm::LogWarning("MCMultiParticleFilter") << "WARNING: MCMultiParticleFilter: size of PtMin, EtaMax, motherID, " + "decayRadiusMin, decayRadiusMax, decayZMin, decayZMax" "and/or Status does not match ParticleID size!" << std::endl; } @@ -96,6 +121,32 @@ MCMultiParticleFilter::MCMultiParticleFilter(const edm::ParameterSet& iConfig) status_.push_back(defstat[0]); while (motherID_.size() < particleID_.size()) motherID_.push_back(defmother[0]); + + // if decayRadiusMin size smaller than particleID , fill up further with defaults + if (particleID_.size() > decayRadiusMin.size()) { + for (unsigned int i = decayRadiusMin.size(); i < particleID_.size(); i++) { + decayRadiusMin.push_back(-10.); + } + } + // if decayRadiusMax size smaller than particleID , fill up further with defaults + if (particleID_.size() > decayRadiusMax.size()) { + for (unsigned int i = decayRadiusMax.size(); i < particleID_.size(); i++) { + decayRadiusMax.push_back(1.e5); + } + } + + // if decayZMin size smaller than particleID , fill up further with defaults + if (particleID_.size() > decayZMin.size()) { + for (unsigned int i = decayZMin.size(); i < particleID_.size(); i++) { + decayZMin.push_back(-1.e5); + } + } + // if decayZMax size smaller than particleID , fill up further with defaults + if (particleID_.size() > decayZMax.size()) { + for (unsigned int i = decayZMax.size(); i < particleID_.size(); i++) { + decayZMax.push_back(1.e5); + } + } } // ------------ method called to skim the data ------------ @@ -113,6 +164,23 @@ bool MCMultiParticleFilter::filter(edm::StreamID, edm::Event& iEvent, const edm: if ((particleID_[i] == 0 || std::abs(particleID_[i]) == std::abs((*p)->pdg_id())) && (*p)->momentum().perp() > ptMin_[i] && std::fabs((*p)->momentum().eta()) < etaMax_[i] && (status_[i] == 0 || (*p)->status() == status_[i])) { + if (!((*p)->production_vertex())) + continue; + + double decx = (*p)->production_vertex()->position().x(); + double decy = (*p)->production_vertex()->position().y(); + double decrad = sqrt(decx * decx + decy * decy); + if (decrad < decayRadiusMin[i]) + continue; + if (decrad > decayRadiusMax[i]) + continue; + + double decz = (*p)->production_vertex()->position().z(); + if (decz < decayZMin[i]) + continue; + if (decz > decayZMax[i]) + continue; + if (motherID_[i] == 0) { // do not check for mother ID if not sepcified nFound++; break; // only match a given particle once! diff --git a/GeneratorInterface/GenFilters/plugins/MCSmartSingleParticleFilter.cc b/GeneratorInterface/GenFilters/plugins/MCSmartSingleParticleFilter.cc index c8ccb35a45126..ac67cf9292992 100644 --- a/GeneratorInterface/GenFilters/plugins/MCSmartSingleParticleFilter.cc +++ b/GeneratorInterface/GenFilters/plugins/MCSmartSingleParticleFilter.cc @@ -56,7 +56,7 @@ using namespace std; MCSmartSingleParticleFilter::MCSmartSingleParticleFilter(const edm::ParameterSet& iConfig) : token_(consumes( - edm::InputTag(iConfig.getUntrackedParameter("moduleLabel", std::string("generator")), "unsmeared"))), + iConfig.getUntrackedParameter("moduleLabel", edm::InputTag("generator", "unsmeared")))), betaBoost(iConfig.getUntrackedParameter("BetaBoost", 0.)) { vector defpid; defpid.push_back(0); @@ -111,77 +111,59 @@ MCSmartSingleParticleFilter::MCSmartSingleParticleFilter(const edm::ParameterSet // if pMin size smaller than particleID , fill up further with defaults if (particleID.size() > pMin.size()) { - vector defpmin2; - for (unsigned int i = 0; i < particleID.size(); i++) { - defpmin2.push_back(0.); + for (unsigned int i = pMin.size(); i < particleID.size(); i++) { + pMin.push_back(0.); } - pMin = defpmin2; } // if ptMin size smaller than particleID , fill up further with defaults if (particleID.size() > ptMin.size()) { - vector defptmin2; - for (unsigned int i = 0; i < particleID.size(); i++) { - defptmin2.push_back(0.); + for (unsigned int i = ptMin.size(); i < particleID.size(); i++) { + ptMin.push_back(0.); } - ptMin = defptmin2; } // if etaMin size smaller than particleID , fill up further with defaults if (particleID.size() > etaMin.size()) { - vector defetamin2; - for (unsigned int i = 0; i < particleID.size(); i++) { - defetamin2.push_back(-10.); + for (unsigned int i = etaMin.size(); i < particleID.size(); i++) { + etaMin.push_back(-10.); } - etaMin = defetamin2; } // if etaMax size smaller than particleID , fill up further with defaults if (particleID.size() > etaMax.size()) { - vector defetamax2; - for (unsigned int i = 0; i < particleID.size(); i++) { - defetamax2.push_back(10.); + for (unsigned int i = etaMax.size(); i < particleID.size(); i++) { + etaMax.push_back(10.); } - etaMax = defetamax2; } // if status size smaller than particleID , fill up further with defaults if (particleID.size() > status.size()) { - vector defstat2; - for (unsigned int i = 0; i < particleID.size(); i++) { - defstat2.push_back(0); + for (unsigned int i = status.size(); i < particleID.size(); i++) { + status.push_back(0); } - status = defstat2; } // if decayRadiusMin size smaller than particleID , fill up further with defaults if (particleID.size() > decayRadiusMin.size()) { - vector decayRadiusmin2; - for (unsigned int i = 0; i < particleID.size(); i++) { - decayRadiusmin2.push_back(-10.); + for (unsigned int i = decayRadiusMin.size(); i < particleID.size(); i++) { + decayRadiusMin.push_back(-10.); } - decayRadiusMin = decayRadiusmin2; } // if decayRadiusMax size smaller than particleID , fill up further with defaults if (particleID.size() > decayRadiusMax.size()) { - vector decayRadiusmax2; - for (unsigned int i = 0; i < particleID.size(); i++) { - decayRadiusmax2.push_back(1.e5); + for (unsigned int i = decayRadiusMax.size(); i < particleID.size(); i++) { + decayRadiusMax.push_back(1.e5); } - decayRadiusMax = decayRadiusmax2; } // if decayZMin size smaller than particleID , fill up further with defaults if (particleID.size() > decayZMin.size()) { - vector decayZmin2; - for (unsigned int i = 0; i < particleID.size(); i++) { - decayZmin2.push_back(-1.e5); + for (unsigned int i = decayZMin.size(); i < particleID.size(); i++) { + decayZMin.push_back(-1.e5); } - decayZMin = decayZmin2; } // if decayZMax size smaller than particleID , fill up further with defaults if (particleID.size() > decayZMax.size()) { - vector decayZmax2; - for (unsigned int i = 0; i < particleID.size(); i++) { - decayZmax2.push_back(1.e5); + for (unsigned int i = decayZMax.size(); i < particleID.size(); i++) { + decayZMax.push_back(1.e5); } - decayZMax = decayZmax2; } // check if beta is smaller than 1 diff --git a/GeneratorInterface/GenFilters/plugins/PythiaFilterMultiAncestor.cc b/GeneratorInterface/GenFilters/plugins/PythiaFilterMultiAncestor.cc new file mode 100644 index 0000000000000..aee959d971e78 --- /dev/null +++ b/GeneratorInterface/GenFilters/plugins/PythiaFilterMultiAncestor.cc @@ -0,0 +1,223 @@ +/* +This filter allows to select events where a given particle originates *either directly +(daughter) or indirectly ((grand)^n-daughter)* from a list of possible ancestors. + +It also allows to filter on the immediate daughters of the said particle. + +Kinematic selections can also be applied on the particle and its daughters. + +The example below shows how to select a jpsi->mumu coming from *any* b hadron (notice +that MotherIDs is just 5, i.e. b-quark) however long the decay chain is. +This includes, for example, B->Jpsi + X as well as B->Psi(2S)(->JPsi) X + +process.jpsi_from_bhadron_filter = cms.EDFilter("PythiaFilterMultiAncestor", + DaughterIDs = cms.untracked.vint32(-13, 13), + DaughterMaxEtas = cms.untracked.vdouble(3., 3.), + DaughterMaxPts = cms.untracked.vdouble(100000.0, 100000.0), + DaughterMinEtas = cms.untracked.vdouble(-2.6, -2.6), + DaughterMinPts = cms.untracked.vdouble(2.5, 2.5), + MaxEta = cms.untracked.double(3.0), + MinEta = cms.untracked.double(-3.0), + MinPt = cms.untracked.double(6.0), + MotherIDs = cms.untracked.vint32(5), + ParticleID = cms.untracked.int32(443) +) +*/ + +// system include files +#include +#include + +// user include files +#include "DataFormats/HepMCCandidate/interface/GenParticle.h" + +// #include "FWCore/Framework/interface/EDFilter.h" +#include "FWCore/Framework/interface/global/EDFilter.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "GeneratorInterface/GenFilters/plugins/MCFilterZboostHelper.h" + +#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" + +using namespace edm; +using namespace std; + +namespace edm { + class HepMCProduct; +} + +class PythiaFilterMultiAncestor : public edm::global::EDFilter<> { +public: + explicit PythiaFilterMultiAncestor(const edm::ParameterSet&); + + bool filter(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + +private: + bool isAncestor(HepMC::GenParticle* particle, int IDtoMatch) const; + + const edm::EDGetTokenT token_; + const int particleID; + const double minpcut; + const double maxpcut; + const double minptcut; + const double maxptcut; + const double minetacut; + const double maxetacut; + const double minrapcut; + const double maxrapcut; + const double minphicut; + const double maxphicut; + + const int status; + const std::vector motherIDs; + const std::vector daughterIDs; + const std::vector daughterMinPts; + const std::vector daughterMaxPts; + const std::vector daughterMinEtas; + const std::vector daughterMaxEtas; + + const int processID; + + const double betaBoost; +}; + +PythiaFilterMultiAncestor::PythiaFilterMultiAncestor(const edm::ParameterSet& iConfig) + : token_(consumes( + edm::InputTag(iConfig.getUntrackedParameter("moduleLabel", std::string("generator")), "unsmeared"))), + particleID(iConfig.getUntrackedParameter("ParticleID", 0)), + minpcut(iConfig.getUntrackedParameter("MinP", 0.)), + maxpcut(iConfig.getUntrackedParameter("MaxP", 10000.)), + minptcut(iConfig.getUntrackedParameter("MinPt", 0.)), + maxptcut(iConfig.getUntrackedParameter("MaxPt", 10000.)), + minetacut(iConfig.getUntrackedParameter("MinEta", -10.)), + maxetacut(iConfig.getUntrackedParameter("MaxEta", 10.)), + minrapcut(iConfig.getUntrackedParameter("MinRapidity", -20.)), + maxrapcut(iConfig.getUntrackedParameter("MaxRapidity", 20.)), + minphicut(iConfig.getUntrackedParameter("MinPhi", -3.5)), + maxphicut(iConfig.getUntrackedParameter("MaxPhi", 3.5)), + status(iConfig.getUntrackedParameter("Status", 0)), + motherIDs(iConfig.getUntrackedParameter("MotherIDs", std::vector{0})), + daughterIDs(iConfig.getUntrackedParameter("DaughterIDs", std::vector{0})), + daughterMinPts(iConfig.getUntrackedParameter("DaughterMinPts", std::vector{0.})), + daughterMaxPts(iConfig.getUntrackedParameter("DaughterMaxPts", std::vector{10000.})), + daughterMinEtas(iConfig.getUntrackedParameter("DaughterMinEtas", std::vector{-10.})), + daughterMaxEtas(iConfig.getUntrackedParameter("DaughterMaxEtas", std::vector{10.})), + processID(iConfig.getUntrackedParameter("ProcessID", 0)), + betaBoost(iConfig.getUntrackedParameter("BetaBoost", 0.)) { + //now do what ever initialization is needed +} + +// ------------ access the full genealogy --------- +bool PythiaFilterMultiAncestor::isAncestor(HepMC::GenParticle* particle, int IDtoMatch) const { + for (HepMC::GenVertex::particle_iterator ancestor = particle->production_vertex()->particles_begin(HepMC::ancestors); + ancestor != particle->production_vertex()->particles_end(HepMC::ancestors); + ++ancestor) { + // std::cout << __LINE__ << "]\t particle's PDG ID " << particle->pdg_id() + // << " \t particle's ancestor's PDG ID " << (*ancestor)->pdg_id() + // << " \t ID to match " << IDtoMatch << std::endl; + + if (abs((*ancestor)->pdg_id()) == abs(IDtoMatch)) { + // std::cout << __LINE__ << "]\t found!" << std::endl; + return true; + } + } + + // std::cout << __LINE__ << "]\t nope, no luck" << std::endl; + return false; +} + +// ------------ method called to produce the data ------------ +bool PythiaFilterMultiAncestor::filter(edm::StreamID, edm::Event& iEvent, const edm::EventSetup&) const { + using namespace edm; + bool accepted = false; + Handle evt; + iEvent.getByToken(token_, evt); + + const HepMC::GenEvent* myGenEvent = evt->GetEvent(); + + if (processID == 0 || processID == myGenEvent->signal_process_id()) { + for (HepMC::GenEvent::particle_const_iterator p = myGenEvent->particles_begin(); p != myGenEvent->particles_end(); + ++p) { + HepMC::FourVector mom = MCFilterZboostHelper::zboost((*p)->momentum(), betaBoost); + double rapidity = 0.5 * log((mom.e() + mom.pz()) / (mom.e() - mom.pz())); + + if (abs((*p)->pdg_id()) == particleID && mom.rho() > minpcut && mom.rho() < maxpcut && + (*p)->momentum().perp() > minptcut && (*p)->momentum().perp() < maxptcut && mom.eta() > minetacut && + mom.eta() < maxetacut && rapidity > minrapcut && rapidity < maxrapcut && (*p)->momentum().phi() > minphicut && + (*p)->momentum().phi() < maxphicut) { + // find the mother + for (std::vector::const_iterator motherID = motherIDs.begin(); motherID != motherIDs.end(); ++motherID) { + // check status if no mother's pdgID is specified + if (status == 0 && *motherID == 0) { + accepted = true; + } + if (status != 0 && *motherID == 0) { + if ((*p)->status() == status) + accepted = true; + } + + // check the mother's pdgID + if (status == 0 && *motherID != 0) { + // if (abs(mother->pdg_id()) == abs(*motherID)) { + if (isAncestor(*p, *motherID)) { + accepted = true; + } + } + if (status != 0 && *motherID != 0) { + // if ((*p)->status() == status && abs(mother->pdg_id()) == abs(*motherID)){ + if ((*p)->status() == status && isAncestor(*p, *motherID)) { + accepted = true; + } + } + } + + // find the daughters + if (accepted & (!daughterIDs.empty())) { + // if you got this far it means that the mother was found + // now let's check the daughters + // use a counter, if there's enough daughters that match the pdg and kinematic + // criteria accept the event + uint good_dau = 0; + for (HepMC::GenVertex::particle_iterator dau = (*p)->end_vertex()->particles_begin(HepMC::children); + dau != (*p)->end_vertex()->particles_end(HepMC::children); + ++dau) { + for (unsigned int i = 0; i < daughterIDs.size(); ++i) { + // if a daughter has its pdgID among the desired ones, apply kin cuts on it + // if it survives, add a notch to the counter + if ((*dau)->pdg_id() == daughterIDs[i]) { + if ((*dau)->momentum().perp() < daughterMinPts[i]) + continue; + if ((*dau)->momentum().perp() > daughterMaxPts[i]) + continue; + if ((*dau)->momentum().eta() < daughterMinEtas[i]) + continue; + if ((*dau)->momentum().eta() > daughterMaxEtas[i]) + continue; + ++good_dau; + } + } + } + if (good_dau < daughterIDs.size()) + accepted = false; + } + } + // only need to satisfy the conditions _once_ + if (accepted) + break; + } + + } else { + accepted = true; + } + + if (accepted) { + return true; + } else { + return false; + } +} + +DEFINE_FWK_MODULE(PythiaFilterMultiAncestor); diff --git a/GeneratorInterface/GenFilters/test/comphep_singletop_Py8.py b/GeneratorInterface/GenFilters/test/comphep_singletop_Py8.py index 963c67086b4f3..c2db21e38f894 100644 --- a/GeneratorInterface/GenFilters/test/comphep_singletop_Py8.py +++ b/GeneratorInterface/GenFilters/test/comphep_singletop_Py8.py @@ -16,8 +16,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -##process.MessageLogger.destinations = ['cerr'] -##process.MessageLogger.statistics = [] +## +##process.MessageLogger.cerr.enableStatistics = False ## ##process.MessageLogger.cerr.threshold = "Warning" diff --git a/GeneratorInterface/GenFilters/test/test_EMJetHeep_cfg.py b/GeneratorInterface/GenFilters/test/test_EMJetHeep_cfg.py index e2bfcd5c730a5..4c7b76ff1f101 100644 --- a/GeneratorInterface/GenFilters/test/test_EMJetHeep_cfg.py +++ b/GeneratorInterface/GenFilters/test/test_EMJetHeep_cfg.py @@ -24,8 +24,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.MessageLogger.cerr.threshold = "Warning" diff --git a/GeneratorInterface/GenFilters/test/test_EMJetMB_cfg.py b/GeneratorInterface/GenFilters/test/test_EMJetMB_cfg.py index bb5100b177d4f..0467fdd282842 100644 --- a/GeneratorInterface/GenFilters/test/test_EMJetMB_cfg.py +++ b/GeneratorInterface/GenFilters/test/test_EMJetMB_cfg.py @@ -24,8 +24,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.MessageLogger.cerr.threshold = "Warning" diff --git a/GeneratorInterface/GenFilters/test/test_isotrack_cfg.py b/GeneratorInterface/GenFilters/test/test_isotrack_cfg.py index af5d058a84dc0..37c2e474f692b 100644 --- a/GeneratorInterface/GenFilters/test/test_isotrack_cfg.py +++ b/GeneratorInterface/GenFilters/test/test_isotrack_cfg.py @@ -17,7 +17,7 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append('PythiaFilter') +process.MessageLogger.PythiaFilter=dict() process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(1000)) diff --git a/GeneratorInterface/Herwig7Interface/BuildFile.xml b/GeneratorInterface/Herwig7Interface/BuildFile.xml index 9fa05f3c95d15..7b6bd585232f4 100644 --- a/GeneratorInterface/Herwig7Interface/BuildFile.xml +++ b/GeneratorInterface/Herwig7Interface/BuildFile.xml @@ -2,7 +2,7 @@ - + diff --git a/GeneratorInterface/Herwig7Interface/plugins/BuildFile.xml b/GeneratorInterface/Herwig7Interface/plugins/BuildFile.xml index bf271de620621..65590e1491bf7 100644 --- a/GeneratorInterface/Herwig7Interface/plugins/BuildFile.xml +++ b/GeneratorInterface/Herwig7Interface/plugins/BuildFile.xml @@ -1,5 +1,5 @@ - + diff --git a/GeneratorInterface/Herwig7Interface/python/Herwig7_Matchbox_ppToee_cff.py b/GeneratorInterface/Herwig7Interface/python/Herwig7_Matchbox_ppToee_cff.py new file mode 100644 index 0000000000000..e728b8440cdf1 --- /dev/null +++ b/GeneratorInterface/Herwig7Interface/python/Herwig7_Matchbox_ppToee_cff.py @@ -0,0 +1,48 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.Herwig7Settings.Herwig7StableParticlesForDetector_cfi import * +from Configuration.Generator.Herwig7Settings.Herwig7CH3TuneSettings_cfi import * + +generator = cms.EDFilter("Herwig7GeneratorFilter", + herwig7StableParticlesForDetectorBlock, + herwig7CH3SettingsBlock, + run = cms.string('InterfaceMatchboxTest'), + dumpConfig = cms.untracked.string('HerwigConfig.in'), + repository = cms.string('${HERWIGPATH}/HerwigDefaults.rpo'), + dataLocation = cms.string('${HERWIGPATH:-6}'), + generatorModule = cms.string('/Herwig/Generators/EventGenerator'), + eventHandlers = cms.string('/Herwig/EventHandlers'), + configFiles = cms.vstring(), + crossSection = cms.untracked.double(-1), + filterEfficiency = cms.untracked.double(1.0), + Matchbox = cms.vstring( 'read snippets/Matchbox.in', + 'read snippets/PPCollider.in', + 'cd /Herwig/EventHandlers', + 'set EventHandler:LuminosityFunction:Energy 13000*GeV', + '## Model assumptions', + 'read Matchbox/StandardModelLike.in', + 'read Matchbox/DiagonalCKM.in', + '## Set the order of the couplings', + 'cd /Herwig/MatrixElements/Matchbox', + 'set Factory:OrderInAlphaS 0', + 'set Factory:OrderInAlphaEW 2', + '## Select the process', + 'do Factory:Process p p -> e+ e-', + '# read Matchbox/MadGraph-GoSam.in', + '# read Matchbox/MadGraph-MadGraph.in', + 'read Matchbox/MadGraph-OpenLoops.in', + 'set /Herwig/Cuts/ChargedLeptonPairMassCut:MinMass 60*GeV', + 'set /Herwig/Cuts/ChargedLeptonPairMassCut:MaxMass 120*GeV', + 'cd /Herwig/MatrixElements/Matchbox', + 'set Factory:ScaleChoice /Herwig/MatrixElements/Matchbox/Scales/LeptonPairMassScale', + 'read Matchbox/MCatNLO-DefaultShower.in', + '# read Matchbox/NLO-NoShower.in', + '# read Matchbox/LO-NoShower.in', + 'read Matchbox/FiveFlavourScheme.in', + 'read Matchbox/MMHT2014.in', + 'do /Herwig/MatrixElements/Matchbox/Factory:ProductionMode', + ), + parameterSets = cms.vstring('herwig7CH3PDF', 'herwig7CH3AlphaS', 'herwig7StableParticlesForDetector', 'Matchbox'), +) + +ProductionFilterSequence = cms.Sequence(generator) diff --git a/GeneratorInterface/Herwig7Interface/python/Herwig7_Standalone_DYLO_cff.py b/GeneratorInterface/Herwig7Interface/python/Herwig7_Standalone_DYLO_cff.py new file mode 100644 index 0000000000000..d1072b4238aae --- /dev/null +++ b/GeneratorInterface/Herwig7Interface/python/Herwig7_Standalone_DYLO_cff.py @@ -0,0 +1,27 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.Herwig7Settings.Herwig7StableParticlesForDetector_cfi import * +from Configuration.Generator.Herwig7Settings.Herwig7CH3TuneSettings_cfi import * + + +generator = cms.EDFilter("Herwig7GeneratorFilter", + herwig7StableParticlesForDetectorBlock, + herwig7CH3SettingsBlock, + run = cms.string('InterfaceMatchboxTest'), + repository = cms.string('${HERWIGPATH}/HerwigDefaults.rpo'), + dataLocation = cms.string('${HERWIGPATH:-6}'), + generatorModule = cms.string('/Herwig/Generators/EventGenerator'), + eventHandlers = cms.string('/Herwig/EventHandlers'), + configFiles = cms.vstring(), + crossSection = cms.untracked.double(-1), + pptoll = cms.vstring( + 'read snippets/PPCollider.in', + 'cd /Herwig/Generators', + 'set EventGenerator:EventHandler:LuminosityFunction:Energy 13000.0', + 'cd /Herwig/MatrixElements/', + 'insert SubProcess:MatrixElements[0] MEqq2gZ2ff'), + parameterSets = cms.vstring('herwig7CH3PDF', 'herwig7CH3AlphaS', 'herwig7StableParticlesForDetector', 'pptoll'), + filterEfficiency = cms.untracked.double(1.0), +) + +ProductionFilterSequence = cms.Sequence(generator) diff --git a/GeneratorInterface/Herwig7Interface/src/Herwig7Interface.cc b/GeneratorInterface/Herwig7Interface/src/Herwig7Interface.cc index 71a31ced809ba..57d20cd91ede2 100644 --- a/GeneratorInterface/Herwig7Interface/src/Herwig7Interface.cc +++ b/GeneratorInterface/Herwig7Interface/src/Herwig7Interface.cc @@ -14,8 +14,6 @@ #include -#include - #include #include #include diff --git a/GeneratorInterface/Herwig7Interface/test/Herwig7_Matchbox_ppToee_cfg.py b/GeneratorInterface/Herwig7Interface/test/Herwig7_Matchbox_ppToee_cfg.py new file mode 100644 index 0000000000000..c5ae0301759ea --- /dev/null +++ b/GeneratorInterface/Herwig7Interface/test/Herwig7_Matchbox_ppToee_cfg.py @@ -0,0 +1,198 @@ +# Auto generated configuration file +# using: +# Revision: 1.19 +# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v +# with command line options: GeneratorInterface/Herwig7Interface/python/Herwig7_Matchbox_ppToee_cff.py --eventcontent RAWSIM --datatier GEN --conditions auto:run2_mc --step GEN --python_filename Herwig7_Matchbox_ppToee_cfg.py --no_exec -n 100 +import FWCore.ParameterSet.Config as cms + + + +process = cms.Process('GEN') + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedRealistic50ns13TeVCollision_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(100), + output = cms.optional.untracked.allowed(cms.int32,cms.PSet) +) + +# Input source +process.source = cms.Source("EmptySource") + +process.options = cms.untracked.PSet( + FailPath = cms.untracked.vstring(), + IgnoreCompletely = cms.untracked.vstring(), + Rethrow = cms.untracked.vstring(), + SkipEvent = cms.untracked.vstring(), + allowUnscheduled = cms.obsolete.untracked.bool, + canDeleteEarly = cms.untracked.vstring(), + emptyRunLumiMode = cms.obsolete.untracked.string, + eventSetup = cms.untracked.PSet( + forceNumberOfConcurrentIOVs = cms.untracked.PSet( + allowAnyLabel_=cms.required.untracked.uint32 + ), + numberOfConcurrentIOVs = cms.untracked.uint32(1) + ), + fileMode = cms.untracked.string('FULLMERGE'), + forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False), + makeTriggerResults = cms.obsolete.untracked.bool, + numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(1), + numberOfConcurrentRuns = cms.untracked.uint32(1), + numberOfStreams = cms.untracked.uint32(0), + numberOfThreads = cms.untracked.uint32(1), + printDependencies = cms.untracked.bool(False), + sizeOfStackForThreadsInKB = cms.optional.untracked.uint32, + throwIfIllegalParameter = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(False) +) + +# Production Info +process.configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('GeneratorInterface/Herwig7Interface/python/Herwig7_Matchbox_ppToee_cff.py nevts:100'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +# Output definition + +process.RAWSIMoutput = cms.OutputModule("PoolOutputModule", + SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring('generation_step') + ), + compressionAlgorithm = cms.untracked.string('LZMA'), + compressionLevel = cms.untracked.int32(1), + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('GEN'), + filterName = cms.untracked.string('') + ), + eventAutoFlushCompressedSize = cms.untracked.int32(20971520), + fileName = cms.untracked.string('Herwig7_Matchbox_ppToee_cff_py_GEN.root'), + outputCommands = process.RAWSIMEventContent.outputCommands, + splitLevel = cms.untracked.int32(0) +) + +# Additional output definition + +# Other statements +process.genstepfilter.triggerConditions=cms.vstring("generation_step") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_mc', '') + +process.generator = cms.EDFilter("Herwig7GeneratorFilter", + Matchbox = cms.vstring( + 'read snippets/Matchbox.in', + 'read snippets/PPCollider.in', + 'cd /Herwig/EventHandlers', + 'set EventHandler:LuminosityFunction:Energy 13000*GeV', + '## Model assumptions', + 'read Matchbox/StandardModelLike.in', + 'read Matchbox/DiagonalCKM.in', + '## Set the order of the couplings', + 'cd /Herwig/MatrixElements/Matchbox', + 'set Factory:OrderInAlphaS 0', + 'set Factory:OrderInAlphaEW 2', + '## Select the process', + 'do Factory:Process p p -> e+ e-', + '# read Matchbox/MadGraph-GoSam.in', + '# read Matchbox/MadGraph-MadGraph.in', + 'read Matchbox/MadGraph-OpenLoops.in', + 'set /Herwig/Cuts/ChargedLeptonPairMassCut:MinMass 60*GeV', + 'set /Herwig/Cuts/ChargedLeptonPairMassCut:MaxMass 120*GeV', + 'cd /Herwig/MatrixElements/Matchbox', + 'set Factory:ScaleChoice /Herwig/MatrixElements/Matchbox/Scales/LeptonPairMassScale', + 'read Matchbox/MCatNLO-DefaultShower.in', + '# read Matchbox/NLO-NoShower.in', + '# read Matchbox/LO-NoShower.in', + 'read Matchbox/FiveFlavourScheme.in', + 'read Matchbox/MMHT2014.in', + 'do /Herwig/MatrixElements/Matchbox/Factory:ProductionMode' + ), + configFiles = cms.vstring(), + crossSection = cms.untracked.double(-1), + dataLocation = cms.string('${HERWIGPATH:-6}'), + dumpConfig = cms.untracked.string('HerwigConfig.in'), + eventHandlers = cms.string('/Herwig/EventHandlers'), + filterEfficiency = cms.untracked.double(1.0), + generatorModule = cms.string('/Herwig/Generators/EventGenerator'), + herwig7CH3AlphaS = cms.vstring( + 'cd /Herwig/Shower', + 'set AlphaQCD:AlphaIn 0.118', + 'cd /' + ), + herwig7CH3MPISettings = cms.vstring( + 'set /Herwig/Hadronization/ColourReconnector:ReconnectionProbability 0.4712', + 'set /Herwig/UnderlyingEvent/MPIHandler:pTmin0 3.04', + 'set /Herwig/UnderlyingEvent/MPIHandler:InvRadius 1.284', + 'set /Herwig/UnderlyingEvent/MPIHandler:Power 0.1362' + ), + herwig7CH3PDF = cms.vstring( + 'cd /Herwig/Partons', + 'create ThePEG::LHAPDF PDFSet_nnlo ThePEGLHAPDF.so', + 'set PDFSet_nnlo:PDFName NNPDF31_nnlo_as_0118.LHgrid', + 'set PDFSet_nnlo:RemnantHandler HadronRemnants', + 'set /Herwig/Particles/p+:PDF PDFSet_nnlo', + 'set /Herwig/Particles/pbar-:PDF PDFSet_nnlo', + 'set /Herwig/Partons/PPExtractor:FirstPDF PDFSet_nnlo', + 'set /Herwig/Partons/PPExtractor:SecondPDF PDFSet_nnlo', + 'set /Herwig/Shower/ShowerHandler:PDFA PDFSet_nnlo', + 'set /Herwig/Shower/ShowerHandler:PDFB PDFSet_nnlo', + 'create ThePEG::LHAPDF PDFSet_lo ThePEGLHAPDF.so', + 'set PDFSet_lo:PDFName NNPDF31_lo_as_0130.LHgrid', + 'set PDFSet_lo:RemnantHandler HadronRemnants', + 'set /Herwig/Shower/ShowerHandler:PDFARemnant PDFSet_lo', + 'set /Herwig/Shower/ShowerHandler:PDFBRemnant PDFSet_lo', + 'set /Herwig/Partons/MPIExtractor:FirstPDF PDFSet_lo', + 'set /Herwig/Partons/MPIExtractor:SecondPDF PDFSet_lo', + 'cd /' + ), + herwig7StableParticlesForDetector = cms.vstring( + 'set /Herwig/Decays/DecayHandler:MaxLifeTime 10*mm', + 'set /Herwig/Decays/DecayHandler:LifeTimeOption Average' + ), + parameterSets = cms.vstring( + 'herwig7CH3PDF', + 'herwig7CH3AlphaS', + 'herwig7StableParticlesForDetector', + 'Matchbox' + ), + repository = cms.string('${HERWIGPATH}/HerwigDefaults.rpo'), + run = cms.string('InterfaceMatchboxTest') +) + + +process.ProductionFilterSequence = cms.Sequence(process.generator) + +# Path and EndPath definitions +process.generation_step = cms.Path(process.pgen) +process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.RAWSIMoutput_step = cms.EndPath(process.RAWSIMoutput) + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step,process.genfiltersummary_step,process.endjob_step,process.RAWSIMoutput_step) +from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask +associatePatAlgosToolsTask(process) +# filter all path with the production filter sequence +for path in process.paths: + getattr(process,path).insert(0, process.ProductionFilterSequence) + + + +# Customisation from command line + +# Add early deletion of temporary data products to reduce peak memory need +from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete +process = customiseEarlyDelete(process) +# End adding early deletion diff --git a/GeneratorInterface/Herwig7Interface/test/Herwig7_Standalone_DYLO_cfg.py b/GeneratorInterface/Herwig7Interface/test/Herwig7_Standalone_DYLO_cfg.py new file mode 100644 index 0000000000000..5db0778b34058 --- /dev/null +++ b/GeneratorInterface/Herwig7Interface/test/Herwig7_Standalone_DYLO_cfg.py @@ -0,0 +1,176 @@ +# Auto generated configuration file +# using: +# Revision: 1.19 +# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v +# with command line options: GeneratorInterface/Herwig7Interface/python/Herwig7_Standalone_DYLO_cff.py --eventcontent RAWSIM --datatier GEN --conditions auto:run2_mc --step GEN --python_filename Herwig7_Standalone_DYLO_cfg.py --no_exec -n 100 +import FWCore.ParameterSet.Config as cms + + + +process = cms.Process('GEN') + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedRealistic50ns13TeVCollision_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(100), + output = cms.optional.untracked.allowed(cms.int32,cms.PSet) +) + +# Input source +process.source = cms.Source("EmptySource") + +process.options = cms.untracked.PSet( + FailPath = cms.untracked.vstring(), + IgnoreCompletely = cms.untracked.vstring(), + Rethrow = cms.untracked.vstring(), + SkipEvent = cms.untracked.vstring(), + allowUnscheduled = cms.obsolete.untracked.bool, + canDeleteEarly = cms.untracked.vstring(), + emptyRunLumiMode = cms.obsolete.untracked.string, + eventSetup = cms.untracked.PSet( + forceNumberOfConcurrentIOVs = cms.untracked.PSet( + allowAnyLabel_=cms.required.untracked.uint32 + ), + numberOfConcurrentIOVs = cms.untracked.uint32(1) + ), + fileMode = cms.untracked.string('FULLMERGE'), + forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False), + makeTriggerResults = cms.obsolete.untracked.bool, + numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(1), + numberOfConcurrentRuns = cms.untracked.uint32(1), + numberOfStreams = cms.untracked.uint32(0), + numberOfThreads = cms.untracked.uint32(1), + printDependencies = cms.untracked.bool(False), + sizeOfStackForThreadsInKB = cms.optional.untracked.uint32, + throwIfIllegalParameter = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(False) +) + +# Production Info +process.configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('GeneratorInterface/Herwig7Interface/python/Herwig7_Standalone_DYLO_cff.py nevts:100'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +# Output definition + +process.RAWSIMoutput = cms.OutputModule("PoolOutputModule", + SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring('generation_step') + ), + compressionAlgorithm = cms.untracked.string('LZMA'), + compressionLevel = cms.untracked.int32(1), + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('GEN'), + filterName = cms.untracked.string('') + ), + eventAutoFlushCompressedSize = cms.untracked.int32(20971520), + fileName = cms.untracked.string('Herwig7_Standalone_DYLO_cff_py_GEN.root'), + outputCommands = process.RAWSIMEventContent.outputCommands, + splitLevel = cms.untracked.int32(0) +) + +# Additional output definition + +# Other statements +process.genstepfilter.triggerConditions=cms.vstring("generation_step") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_mc', '') + +process.generator = cms.EDFilter("Herwig7GeneratorFilter", + configFiles = cms.vstring(), + crossSection = cms.untracked.double(-1), + dataLocation = cms.string('${HERWIGPATH:-6}'), + eventHandlers = cms.string('/Herwig/EventHandlers'), + filterEfficiency = cms.untracked.double(1.0), + generatorModule = cms.string('/Herwig/Generators/EventGenerator'), + herwig7CH3AlphaS = cms.vstring( + 'cd /Herwig/Shower', + 'set AlphaQCD:AlphaIn 0.118', + 'cd /' + ), + herwig7CH3MPISettings = cms.vstring( + 'set /Herwig/Hadronization/ColourReconnector:ReconnectionProbability 0.4712', + 'set /Herwig/UnderlyingEvent/MPIHandler:pTmin0 3.04', + 'set /Herwig/UnderlyingEvent/MPIHandler:InvRadius 1.284', + 'set /Herwig/UnderlyingEvent/MPIHandler:Power 0.1362' + ), + herwig7CH3PDF = cms.vstring( + 'cd /Herwig/Partons', + 'create ThePEG::LHAPDF PDFSet_nnlo ThePEGLHAPDF.so', + 'set PDFSet_nnlo:PDFName NNPDF31_nnlo_as_0118.LHgrid', + 'set PDFSet_nnlo:RemnantHandler HadronRemnants', + 'set /Herwig/Particles/p+:PDF PDFSet_nnlo', + 'set /Herwig/Particles/pbar-:PDF PDFSet_nnlo', + 'set /Herwig/Partons/PPExtractor:FirstPDF PDFSet_nnlo', + 'set /Herwig/Partons/PPExtractor:SecondPDF PDFSet_nnlo', + 'set /Herwig/Shower/ShowerHandler:PDFA PDFSet_nnlo', + 'set /Herwig/Shower/ShowerHandler:PDFB PDFSet_nnlo', + 'create ThePEG::LHAPDF PDFSet_lo ThePEGLHAPDF.so', + 'set PDFSet_lo:PDFName NNPDF31_lo_as_0130.LHgrid', + 'set PDFSet_lo:RemnantHandler HadronRemnants', + 'set /Herwig/Shower/ShowerHandler:PDFARemnant PDFSet_lo', + 'set /Herwig/Shower/ShowerHandler:PDFBRemnant PDFSet_lo', + 'set /Herwig/Partons/MPIExtractor:FirstPDF PDFSet_lo', + 'set /Herwig/Partons/MPIExtractor:SecondPDF PDFSet_lo', + 'cd /' + ), + herwig7StableParticlesForDetector = cms.vstring( + 'set /Herwig/Decays/DecayHandler:MaxLifeTime 10*mm', + 'set /Herwig/Decays/DecayHandler:LifeTimeOption Average' + ), + parameterSets = cms.vstring( + 'herwig7CH3PDF', + 'herwig7CH3AlphaS', + 'herwig7StableParticlesForDetector', + 'pptoll' + ), + pptoll = cms.vstring( + 'read snippets/PPCollider.in', + 'cd /Herwig/Generators', + 'set EventGenerator:EventHandler:LuminosityFunction:Energy 13000.0', + 'cd /Herwig/MatrixElements/', + 'insert SubProcess:MatrixElements[0] MEqq2gZ2ff' + ), + repository = cms.string('${HERWIGPATH}/HerwigDefaults.rpo'), + run = cms.string('InterfaceMatchboxTest') +) + + +process.ProductionFilterSequence = cms.Sequence(process.generator) + +# Path and EndPath definitions +process.generation_step = cms.Path(process.pgen) +process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.RAWSIMoutput_step = cms.EndPath(process.RAWSIMoutput) + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step,process.genfiltersummary_step,process.endjob_step,process.RAWSIMoutput_step) +from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask +associatePatAlgosToolsTask(process) +# filter all path with the production filter sequence +for path in process.paths: + getattr(process,path).insert(0, process.ProductionFilterSequence) + + + +# Customisation from command line + +# Add early deletion of temporary data products to reduce peak memory need +from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete +process = customiseEarlyDelete(process) +# End adding early deletion diff --git a/GeneratorInterface/LHEInterface/plugins/BuildFile.xml b/GeneratorInterface/LHEInterface/plugins/BuildFile.xml index b96e39874c6f2..167989f991b0d 100644 --- a/GeneratorInterface/LHEInterface/plugins/BuildFile.xml +++ b/GeneratorInterface/LHEInterface/plugins/BuildFile.xml @@ -6,7 +6,6 @@ - diff --git a/GeneratorInterface/LHEInterface/plugins/ExternalLHEProducer.cc b/GeneratorInterface/LHEInterface/plugins/ExternalLHEProducer.cc index 63269fb35b56a..bdf8305213b11 100644 --- a/GeneratorInterface/LHEInterface/plugins/ExternalLHEProducer.cc +++ b/GeneratorInterface/LHEInterface/plugins/ExternalLHEProducer.cc @@ -31,6 +31,7 @@ Description: [one line class summary] #include #include #include "tbb/task_arena.h" +#include "tbb/task_group.h" #include "boost/ptr_container/ptr_deque.hpp" @@ -43,8 +44,6 @@ Description: [one line class summary] #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Concurrency/interface/FunctorTask.h" - #include "FWCore/ParameterSet/interface/FileInPath.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -276,35 +275,29 @@ void ExternalLHEProducer::beginRunProduce(edm::Run& run, edm::EventSetup const& std::atomic exceptSet{0}; tbb::this_task_arena::isolate([this, &except, &infiles, &exceptSet, nEventsAve, overflow, seed]() { - tbb::empty_task* waitTask = new (tbb::task::allocate_root()) tbb::empty_task; - waitTask->set_ref_count(1 + nThreads_); - + tbb::task_group group; for (unsigned int t = 0; t < nThreads_; ++t) { uint32_t nEvents = nEventsAve; if (nEvents_ % nThreads_ != 0 and t >= overflow) { nEvents += 1; } - auto task = edm::make_functor_task(tbb::task::allocate_root(), - [t, this, &infiles, seed, nEvents, &except, &exceptSet, waitTask]() { - CMS_SA_ALLOW try { - using namespace std::filesystem; - using namespace std::string_literals; - auto out = path("thread"s + std::to_string(t)) / path(outputFile_); - infiles[t] = out.native(); - executeScript(makeArgs(nEvents, 1, seed + t), t); - } catch (...) { - char expected = 0; - if (exceptSet.compare_exchange_strong(expected, 1)) { - except = std::current_exception(); - exceptSet.store(2); - } - } - waitTask->decrement_ref_count(); - }); - tbb::task::spawn(*task); + group.run([t, this, &infiles, seed, nEvents, &except, &exceptSet]() { + CMS_SA_ALLOW try { + using namespace std::filesystem; + using namespace std::string_literals; + auto out = path("thread"s + std::to_string(t)) / path(outputFile_); + infiles[t] = out.native(); + executeScript(makeArgs(nEvents, 1, seed + t), t); + } catch (...) { + char expected = 0; + if (exceptSet.compare_exchange_strong(expected, 1)) { + except = std::current_exception(); + exceptSet.store(2); + } + } + }); } - waitTask->wait_for_all(); - tbb::task::destroy(*waitTask); + group.wait(); }); if (exceptSet != 0) { std::rethrow_exception(except); diff --git a/GeneratorInterface/Pythia6Interface/src/Pythia6Service.cc b/GeneratorInterface/Pythia6Interface/src/Pythia6Service.cc index b903847d032ba..98ff2cf883eaa 100644 --- a/GeneratorInterface/Pythia6Interface/src/Pythia6Service.cc +++ b/GeneratorInterface/Pythia6Interface/src/Pythia6Service.cc @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include "CLHEP/Random/RandomEngine.h" @@ -324,13 +324,13 @@ void Pythia6Service::setPYUPDAParams(bool afterPyinit) { void Pythia6Service::setSLHAFromHeader(const std::vector& lines) { std::set blocks; unsigned int model = 0, subModel = 0; + char tempslhaname[] = "pythia6slhaXXXXXX"; + int fd = mkstemp(tempslhaname); - std::string fnamest = boost::filesystem::unique_path().string(); - const char* fname = fnamest.c_str(); - std::ofstream file(fname, std::fstream::out | std::fstream::trunc); std::string block; + std::stringstream f_info; for (std::vector::const_iterator iter = lines.begin(); iter != lines.end(); ++iter) { - file << *iter; + f_info << *iter; std::string line = *iter; std::transform(line.begin(), line.end(), line.begin(), (int (*)(int))std::toupper); @@ -386,7 +386,8 @@ void Pythia6Service::setSLHAFromHeader(const std::vector& lines) { } } } - file.close(); + write(fd, f_info.str().c_str(), f_info.str().size()); + close(fd); if (blocks.count("SMINPUTS")) pydat1_.paru[102 - 1] = @@ -402,8 +403,8 @@ void Pythia6Service::setSLHAFromHeader(const std::vector& lines) { call_pygive("IMSS(22)=24"); */ - openSLHA(fname); - std::remove(fname); + openSLHA(tempslhaname); + std::remove(tempslhaname); if (model || blocks.count("HIGMIX") || blocks.count("SBOTMIX") || blocks.count("STOPMIX") || blocks.count("STAUMIX") || blocks.count("AMIX") || blocks.count("NMIX") || blocks.count("UMIX") || diff --git a/GeneratorInterface/Pythia6Interface/test/AlpgenSource_Py6Had_cfg.py b/GeneratorInterface/Pythia6Interface/test/AlpgenSource_Py6Had_cfg.py index 80cc75fc99a25..c39a1e6963884 100644 --- a/GeneratorInterface/Pythia6Interface/test/AlpgenSource_Py6Had_cfg.py +++ b/GeneratorInterface/Pythia6Interface/test/AlpgenSource_Py6Had_cfg.py @@ -26,8 +26,8 @@ ) process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.generator = cms.EDFilter("Pythia6HadronizerFilter", diff --git a/GeneratorInterface/Pythia6Interface/test/Py6EvtGenFilter_cfg.py b/GeneratorInterface/Pythia6Interface/test/Py6EvtGenFilter_cfg.py index e3a35c3b447dc..de4065740f845 100755 --- a/GeneratorInterface/Pythia6Interface/test/Py6EvtGenFilter_cfg.py +++ b/GeneratorInterface/Pythia6Interface/test/Py6EvtGenFilter_cfg.py @@ -14,8 +14,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(10)) diff --git a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_CSAMode_cfg.py b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_CSAMode_cfg.py index e01e74a8788c5..266f6b3dadd3c 100644 --- a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_CSAMode_cfg.py +++ b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_CSAMode_cfg.py @@ -17,8 +17,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(5)) diff --git a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_ElectronProtonInitialState_cfg.py b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_ElectronProtonInitialState_cfg.py index b92792d727f65..ee041ad7af269 100644 --- a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_ElectronProtonInitialState_cfg.py +++ b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_ElectronProtonInitialState_cfg.py @@ -16,8 +16,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + +process.MessageLogger.cerr.enableStatistics = False process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(20)) diff --git a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_EvtGenTest_cfg.py b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_EvtGenTest_cfg.py index 354193ee4b347..644c0628d6da8 100644 --- a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_EvtGenTest_cfg.py +++ b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_EvtGenTest_cfg.py @@ -24,8 +24,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + + process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(5)) diff --git a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_PDG_convert_cfg.py b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_PDG_convert_cfg.py index cf4324895c73d..d4cc1e20589da 100644 --- a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_PDG_convert_cfg.py +++ b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_PDG_convert_cfg.py @@ -17,8 +17,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + + process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(1)) diff --git a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_Photos_cfg.py b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_Photos_cfg.py index de9fb60f453b9..f53ee7e18358a 100644 --- a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_Photos_cfg.py +++ b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_Photos_cfg.py @@ -23,8 +23,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + + process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(20)) diff --git a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_SLHA_cfg.py b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_SLHA_cfg.py index 7db80613f59b7..8adc47c6bbcac 100644 --- a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_SLHA_cfg.py +++ b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_SLHA_cfg.py @@ -17,8 +17,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + + process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(1)) diff --git a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_Ztautau_Tauola_cfg.py b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_Ztautau_Tauola_cfg.py index a639942db65c5..0db7023abd583 100644 --- a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_Ztautau_Tauola_cfg.py +++ b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_Ztautau_Tauola_cfg.py @@ -16,8 +16,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + + process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(5)) diff --git a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_cfg.py b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_cfg.py index df00e85617e90..39dcdf28dbf27 100644 --- a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_cfg.py +++ b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_cfg.py @@ -16,8 +16,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + + process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(20)) diff --git a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_gluino_cfg.py b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_gluino_cfg.py index 74c45cdce09b4..19476063c8469 100644 --- a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_gluino_cfg.py +++ b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_gluino_cfg.py @@ -17,8 +17,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + + process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(1)) diff --git a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_stophadrons_cfg.py b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_stophadrons_cfg.py index 61c18d4e0c4d3..91d0755c2674a 100644 --- a/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_stophadrons_cfg.py +++ b/GeneratorInterface/Pythia6Interface/test/Py6GenFilter_stophadrons_cfg.py @@ -17,8 +17,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + + process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(1)) diff --git a/GeneratorInterface/Pythia6Interface/test/Py6HadFilter_RestoreRNDM_cfg.py b/GeneratorInterface/Pythia6Interface/test/Py6HadFilter_RestoreRNDM_cfg.py index 9f7a328748f30..fba914f955b2a 100644 --- a/GeneratorInterface/Pythia6Interface/test/Py6HadFilter_RestoreRNDM_cfg.py +++ b/GeneratorInterface/Pythia6Interface/test/Py6HadFilter_RestoreRNDM_cfg.py @@ -22,8 +22,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + + process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(5)) diff --git a/GeneratorInterface/Pythia6Interface/test/Py6HadFilter_cfg.py b/GeneratorInterface/Pythia6Interface/test/Py6HadFilter_cfg.py index a711c6424b292..052f7480377f7 100644 --- a/GeneratorInterface/Pythia6Interface/test/Py6HadFilter_cfg.py +++ b/GeneratorInterface/Pythia6Interface/test/Py6HadFilter_cfg.py @@ -21,8 +21,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + + process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(50)) diff --git a/GeneratorInterface/Pythia6Interface/test/Py6HadFilter_mgmatching_cfg.py b/GeneratorInterface/Pythia6Interface/test/Py6HadFilter_mgmatching_cfg.py index ca5a8752dab60..4641c9c4dd40d 100644 --- a/GeneratorInterface/Pythia6Interface/test/Py6HadFilter_mgmatching_cfg.py +++ b/GeneratorInterface/Pythia6Interface/test/Py6HadFilter_mgmatching_cfg.py @@ -21,8 +21,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + + process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(1000)) diff --git a/GeneratorInterface/Pythia8Interface/src/Py8InterfaceBase.cc b/GeneratorInterface/Pythia8Interface/src/Py8InterfaceBase.cc index c331ab2530a86..da9708c4fb253 100644 --- a/GeneratorInterface/Pythia8Interface/src/Py8InterfaceBase.cc +++ b/GeneratorInterface/Pythia8Interface/src/Py8InterfaceBase.cc @@ -6,9 +6,7 @@ #include "FWCore/Utilities/interface/Exception.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "boost/filesystem.hpp" -#include "boost/filesystem/path.hpp" +#include // EvtGen plugin // @@ -58,23 +56,15 @@ namespace gen { if (ps.exists("evtgenUserFileEmbedded")) { std::vector user_decay_lines = ps.getParameter >("evtgenUserFileEmbedded"); - auto tmp_dir = boost::filesystem::temp_directory_path(); - tmp_dir += "/%%%%-%%%%-%%%%-%%%%"; - auto tmp_path = boost::filesystem::unique_path(tmp_dir); - std::string user_decay_tmp = std::string(tmp_path.c_str()); - FILE* tmpf = std::fopen(user_decay_tmp.c_str(), "w"); - if (!tmpf) { - edm::LogError("Py8InterfaceBase::~Py8InterfaceBase") - << "Py8InterfaceBase::Py8InterfaceBase fails when trying to open a temporary file for embedded user.dec " - "for EvtGenPlugin. Terminating program "; - exit(0); - } + char tempslhaname[] = "pythia8evtgenXXXXXX"; + int fd = mkstemp(tempslhaname); + for (unsigned int i = 0; i < user_decay_lines.size(); i++) { user_decay_lines.at(i) += "\n"; - std::fputs(user_decay_lines.at(i).c_str(), tmpf); + write(fd, user_decay_lines.at(i).c_str(), user_decay_lines.at(i).size()); } - std::fclose(tmpf); - evtgenUserFiles.push_back(user_decay_tmp); + close(fd); + evtgenUserFiles.push_back(std::string(tempslhaname)); } } } diff --git a/GeneratorInterface/RivetInterface/interface/RivetAnalysis.h b/GeneratorInterface/RivetInterface/interface/RivetAnalysis.h index c41874e359ab6..7dfc7609c4bd0 100644 --- a/GeneratorInterface/RivetInterface/interface/RivetAnalysis.h +++ b/GeneratorInterface/RivetInterface/interface/RivetAnalysis.h @@ -198,6 +198,22 @@ namespace Rivet { _fatjets = apply(event, "FatJets").jetsByPt(fatjet_cut); _neutrinos = apply(event, "Neutrinos").particlesByPt(); _met = apply(event, "MET").missingMomentum().p3(); + + // check for leptonic decays of tag particles + for (auto& jet : _jets) { + for (auto& pt : jet.tags()) { + for (auto& p : pt.children(isLepton)) { + pt.addConstituent(p, false); + } + } + } + for (auto& jet : _fatjets) { + for (auto& pt : jet.tags()) { + for (auto& p : pt.children(isLepton)) { + pt.addConstituent(p, false); + } + } + } }; // Do nothing here diff --git a/GeneratorInterface/RivetInterface/interface/RivetAnalyzer.h b/GeneratorInterface/RivetInterface/interface/RivetAnalyzer.h index 03cb4e9652253..e69f7adc97a8e 100644 --- a/GeneratorInterface/RivetInterface/interface/RivetAnalyzer.h +++ b/GeneratorInterface/RivetInterface/interface/RivetAnalyzer.h @@ -47,24 +47,28 @@ class RivetAnalyzer void normalizeTree(); edm::EDGetTokenT _hepmcCollection; - bool _useExternalWeight; bool _useLHEweights; - int _LHEweightNumber; - bool _useGENweights; - int _GENweightNumber; + double _weightCap; + double _NLOSmearing; + bool _skipMultiWeights; + std::string _selectMultiWeights; + std::string _deselectMultiWeights; + std::string _setNominalWeightName; edm::EDGetTokenT _LHECollection; edm::EDGetTokenT _genEventInfoCollection; edm::EDGetTokenT _genLumiInfoToken; edm::EDGetTokenT _lheRunInfoToken; - Rivet::AnalysisHandler _analysisHandler; + std::unique_ptr _analysisHandler; bool _isFirstEvent; std::string _outFileName; + std::vector _analysisNames; bool _doFinalize; bool _produceDQM; const edm::InputTag _lheLabel; double _xsection; std::vector _weightNames; std::vector _lheWeightNames; + std::vector _cleanedWeightNames; DQMStore *dbe; std::vector _mes; diff --git a/GeneratorInterface/RivetInterface/plugins/HTXSRivetProducer.cc b/GeneratorInterface/RivetInterface/plugins/HTXSRivetProducer.cc index 564a710855c8c..89a7bcc3558f4 100644 --- a/GeneratorInterface/RivetInterface/plugins/HTXSRivetProducer.cc +++ b/GeneratorInterface/RivetInterface/plugins/HTXSRivetProducer.cc @@ -163,7 +163,10 @@ void HTXSRivetProducer::produce(edm::Event& iEvent, const edm::EventSetup&) { } } -void HTXSRivetProducer::endRun(edm::Run const& iRun, edm::EventSetup const& es) { _HTXS->printClassificationSummary(); } +void HTXSRivetProducer::endRun(edm::Run const& iRun, edm::EventSetup const& es) { + if (_HTXS) + _HTXS->printClassificationSummary(); +} void HTXSRivetProducer::beginRun(edm::Run const& iRun, edm::EventSetup const& es) { if (_prodMode == "AUTO") { diff --git a/GeneratorInterface/RivetInterface/plugins/ParticleLevelProducer.cc b/GeneratorInterface/RivetInterface/plugins/ParticleLevelProducer.cc index 63c0a267b8abc..a66f67cfd1afc 100644 --- a/GeneratorInterface/RivetInterface/plugins/ParticleLevelProducer.cc +++ b/GeneratorInterface/RivetInterface/plugins/ParticleLevelProducer.cc @@ -88,6 +88,16 @@ void ParticleLevelProducer::addGenJet(Rivet::Jet jet, } else { tags->push_back(reco::GenParticle(p.charge(), p4(p) * 1e-20, genVertex_, p.pid(), 2, true)); genJet.addDaughter(edm::refToPtr(reco::GenParticleRef(tagsRefHandle, ++iTag))); + // Also save lepton+neutrino daughters of tag particles + int iTagMother = iTag; + for (auto const& d : p.constituents()) { + ++iTag; + int d_status = (d.isStable()) ? 1 : 2; + tags->push_back(reco::GenParticle(d.charge(), p4(d) * 1e-20, genVertex_, d.pid(), d_status, true)); + tags->at(iTag).addMother(reco::GenParticleRef(tagsRefHandle, iTagMother)); + tags->at(iTagMother).addDaughter(reco::GenParticleRef(tagsRefHandle, iTag)); + genJet.addDaughter(edm::refToPtr(reco::GenParticleRef(tagsRefHandle, iTag))); + } } } diff --git a/GeneratorInterface/RivetInterface/plugins/RivetAnalyzer.cc b/GeneratorInterface/RivetInterface/plugins/RivetAnalyzer.cc index a5d971df2018b..615a1a8561781 100644 --- a/GeneratorInterface/RivetInterface/plugins/RivetAnalyzer.cc +++ b/GeneratorInterface/RivetInterface/plugins/RivetAnalyzer.cc @@ -17,9 +17,9 @@ using namespace Rivet; using namespace edm; RivetAnalyzer::RivetAnalyzer(const edm::ParameterSet& pset) - : _analysisHandler(), - _isFirstEvent(true), + : _isFirstEvent(true), _outFileName(pset.getParameter("OutputFile")), + _analysisNames(pset.getParameter >("AnalysisNames")), //decide whether to finalize the plots or not. //deciding not to finalize them can be useful for further harvesting of many jobs _doFinalize(pset.getParameter("DoFinalize")), @@ -28,9 +28,6 @@ RivetAnalyzer::RivetAnalyzer(const edm::ParameterSet& pset) _xsection(-1.) { usesResource("Rivet"); - //retrive the analysis name from parameter set - std::vector analysisNames = pset.getParameter >("AnalysisNames"); - _hepmcCollection = consumes(pset.getParameter("HepMCCollection")); _genLumiInfoToken = consumes(pset.getParameter("genLumiInfo")); @@ -40,8 +37,12 @@ RivetAnalyzer::RivetAnalyzer(const edm::ParameterSet& pset) _LHECollection = consumes(_lheLabel); } - //get the analyses - _analysisHandler.addAnalyses(analysisNames); + _weightCap = pset.getParameter("weightCap"); + _NLOSmearing = pset.getParameter("NLOSmearing"); + _skipMultiWeights = pset.getParameter("skipMultiWeights"); + _selectMultiWeights = pset.getParameter("selectMultiWeights"); + _deselectMultiWeights = pset.getParameter("deselectMultiWeights"); + _setNominalWeightName = pset.getParameter("setNominalWeightName"); //set user cross section if needed _xsection = pset.getParameter("CrossSection"); @@ -115,6 +116,17 @@ void RivetAnalyzer::beginLuminosityBlock(const edm::LuminosityBlock& iLumi, cons void RivetAnalyzer::endLuminosityBlock(const edm::LuminosityBlock& iLumi, const edm::EventSetup& iSetup) { return; } void RivetAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { + //finalize weight names on the first event + if (_isFirstEvent) { + if (_useLHEweights) { + _weightNames.insert(_weightNames.end(), _lheWeightNames.begin(), _lheWeightNames.end()); + } + // clean weight names to be accepted by Rivet plotting + for (const std::string& wn : _weightNames) { + _cleanedWeightNames.push_back(std::regex_replace(wn, std::regex("[^A-Za-z\\d\\._=]"), "_")); + } + } + //get the hepmc product from the event edm::Handle evt; iEvent.getByToken(_hepmcCollection, evt); @@ -123,63 +135,65 @@ void RivetAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe const HepMC::GenEvent* myGenEvent = evt->GetEvent(); std::unique_ptr tmpGenEvtPtr; //if you want to use an external weight or set the cross section we have to clone the GenEvent and change the weight - if (_useLHEweights || _xsection > 0) { - tmpGenEvtPtr = std::make_unique(*(evt->GetEvent())); + tmpGenEvtPtr = std::make_unique(*(evt->GetEvent())); - if (_xsection > 0) { - HepMC::GenCrossSection xsec; - xsec.set_cross_section(_xsection); - tmpGenEvtPtr->set_cross_section(xsec); - } - - if (_useLHEweights) { - std::vector mergedWeights; - for (unsigned int i = 0; i < tmpGenEvtPtr->weights().size(); i++) { - mergedWeights.push_back(tmpGenEvtPtr->weights()[i]); - } + if (_xsection > 0) { + HepMC::GenCrossSection xsec; + xsec.set_cross_section(_xsection); + tmpGenEvtPtr->set_cross_section(xsec); + } - edm::Handle lheEventHandle; - iEvent.getByToken(_LHECollection, lheEventHandle); - for (unsigned int i = 0; i < _lheWeightNames.size(); i++) { - mergedWeights.push_back(tmpGenEvtPtr->weights()[0] * lheEventHandle->weights().at(i).wgt / - lheEventHandle->originalXWGTUP()); - } + std::vector mergedWeights; + for (unsigned int i = 0; i < tmpGenEvtPtr->weights().size(); i++) { + mergedWeights.push_back(tmpGenEvtPtr->weights()[i]); + } - tmpGenEvtPtr->weights() = mergedWeights; + if (_useLHEweights) { + edm::Handle lheEventHandle; + iEvent.getByToken(_LHECollection, lheEventHandle); + for (unsigned int i = 0; i < _lheWeightNames.size(); i++) { + mergedWeights.push_back(tmpGenEvtPtr->weights()[0] * lheEventHandle->weights().at(i).wgt / + lheEventHandle->originalXWGTUP()); } - myGenEvent = tmpGenEvtPtr.get(); } + tmpGenEvtPtr->weights().clear(); + for (unsigned int i = 0; i < _cleanedWeightNames.size(); i++) { + tmpGenEvtPtr->weights()[_cleanedWeightNames[i]] = mergedWeights[i]; + } + myGenEvent = tmpGenEvtPtr.get(); + //apply the beams initialization on the first event if (_isFirstEvent) { - if (_useLHEweights) { - _weightNames.insert(_weightNames.end(), _lheWeightNames.begin(), _lheWeightNames.end()); - } - // clean weight names to be accepted by Rivet plotting - std::vector cleanedWeightNames; - for (const std::string& wn : _weightNames) { - cleanedWeightNames.push_back(std::regex_replace(wn, std::regex("[^A-Za-z\\d\\._=]"), "_")); - } - _analysisHandler.init(*myGenEvent, cleanedWeightNames); - const HepMC::GenCrossSection* xs = myGenEvent->cross_section(); - _analysisHandler.setCrossSection(make_pair(xs->cross_section(), xs->cross_section_error())); + _analysisHandler = std::make_unique(); + _analysisHandler->addAnalyses(_analysisNames); + + /// Set analysis handler weight options + _analysisHandler->skipMultiWeights(_skipMultiWeights); + _analysisHandler->selectMultiWeights(_selectMultiWeights); + _analysisHandler->deselectMultiWeights(_deselectMultiWeights); + _analysisHandler->setNominalWeightName(_setNominalWeightName); + _analysisHandler->setWeightCap(_weightCap); + _analysisHandler->setNLOSmearing(_NLOSmearing); + + _analysisHandler->init(*myGenEvent); _isFirstEvent = false; } //run the analysis - _analysisHandler.analyze(*myGenEvent); + _analysisHandler->analyze(*myGenEvent); } void RivetAnalyzer::endRun(const edm::Run& iRun, const edm::EventSetup& iSetup) { if (_doFinalize) - _analysisHandler.finalize(); + _analysisHandler->finalize(); else { //if we don't finalize we just want to do the transformation from histograms to DPS - ////normalizeTree(_analysisHandler.tree()); + ////normalizeTree(_analysisHandler->tree()); //normalizeTree(); } - _analysisHandler.writeData(_outFileName); + _analysisHandler->writeData(_outFileName); return; } @@ -194,7 +208,7 @@ void RivetAnalyzer::endJob() {} void RivetAnalyzer::normalizeTree() { using namespace YODA; - std::vector analyses = _analysisHandler.analysisNames(); + std::vector analyses = _analysisHandler->analysisNames(); //tree.ls(".", true); const string tmpdir = "/RivetNormalizeTmp"; @@ -205,12 +219,12 @@ void RivetAnalyzer::normalizeTree() { //global variables that are always present //sumOfWeights TH1F nevent("nEvt", "n analyzed Events", 1, 0., 1.); - nevent.SetBinContent(1, _analysisHandler.sumW()); + nevent.SetBinContent(1, _analysisHandler->sumW()); _mes.push_back(dbe->book1D("nEvt", &nevent)); } //cross section //TH1F xsection("xSection", "Cross Section", 1, 0., 1.); - //xsection.SetBinContent(1,_analysisHandler.crossSection()); + //xsection.SetBinContent(1,_analysisHandler->crossSection()); //_mes.push_back(dbe->book1D("xSection",&xsection)); //now loop over the histograms @@ -236,7 +250,7 @@ void RivetAnalyzer::normalizeTree() { if (histo) { IHistogram1D* tmphisto = dynamic_cast(tree.find(tmppath)); if (tmphisto) { - _analysisHandler.datapointsetFactory().create(path, *tmphisto); + _analysisHandler->datapointsetFactory().create(path, *tmphisto); } //now convert to root and then ME //need aida2flat (from Rivet 1.X) & flat2root here @@ -250,7 +264,7 @@ void RivetAnalyzer::normalizeTree() { else if (prof) { IProfile1D* tmpprof = dynamic_cast(tree.find(tmppath)); if (tmpprof) { - _analysisHandler.datapointsetFactory().create(path, *tmpprof); + _analysisHandler->datapointsetFactory().create(path, *tmpprof); } //now convert to root and then ME //need aida2flat (from Rivet 1.X) & flat2root here diff --git a/GeneratorInterface/RivetInterface/python/rivetAnalyzer_cfi.py b/GeneratorInterface/RivetInterface/python/rivetAnalyzer_cfi.py index 22750da6cc409..19c9185decc27 100644 --- a/GeneratorInterface/RivetInterface/python/rivetAnalyzer_cfi.py +++ b/GeneratorInterface/RivetInterface/python/rivetAnalyzer_cfi.py @@ -8,6 +8,12 @@ # Info: useLHEWeights will create BIG yoda files with Rivet 3. # Default plotting fails with too many histos, use -m/M options useLHEweights = cms.bool(False), + weightCap = cms.double(0.), + NLOSmearing = cms.double(0.), + skipMultiWeights = cms.bool(False), + selectMultiWeights = cms.string(''), + deselectMultiWeights = cms.string(''), + setNominalWeightName = cms.string(''), LHECollection = cms.InputTag('externalLHEProducer'), CrossSection = cms.double(-1), DoFinalize = cms.bool(True), diff --git a/GeneratorInterface/RivetInterface/test/BuildFile.xml b/GeneratorInterface/RivetInterface/test/BuildFile.xml index ca06300ccbe72..c044a6dbd8d59 100644 --- a/GeneratorInterface/RivetInterface/test/BuildFile.xml +++ b/GeneratorInterface/RivetInterface/test/BuildFile.xml @@ -1,2 +1,11 @@ + + + + + + + + + diff --git a/GeneratorInterface/RivetInterface/test/particleLevel_cfg.py b/GeneratorInterface/RivetInterface/test/particleLevel_cfg.py index 1d4773321ef0d..d5ca59d4d63a3 100644 --- a/GeneratorInterface/RivetInterface/test/particleLevel_cfg.py +++ b/GeneratorInterface/RivetInterface/test/particleLevel_cfg.py @@ -8,7 +8,7 @@ process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring( #relValTTbar - '/store/relval/CMSSW_11_0_0_pre4/RelValProdTTbar/AODSIM/106X_mcRun1_realistic_v3-v1/20000/26A4F099-D3A0-0C47-9E05-408C49CFD404.root' + '/store/relval/CMSSW_11_0_0/RelValTTbar_14TeV/GEN-SIM/110X_mcRun4_realistic_v3_2026D49PU200-v1/20000/22BAADDB-EE84-794F-9A5D-812F341D8075.root' ) ) diff --git a/GeneratorInterface/RivetInterface/test/rivet_cfg.py b/GeneratorInterface/RivetInterface/test/rivet_cfg.py index a84a71d85de8a..975d9022f81a1 100644 --- a/GeneratorInterface/RivetInterface/test/rivet_cfg.py +++ b/GeneratorInterface/RivetInterface/test/rivet_cfg.py @@ -83,7 +83,7 @@ ) process.load("GeneratorInterface.RivetInterface.rivetAnalyzer_cfi") -process.rivetAnalyzer.AnalysisNames = cms.vstring('MC_GENERIC', 'CMS_2014_I1305624') +process.rivetAnalyzer.AnalysisNames = cms.vstring('MC_GENERIC', 'CMS_2014_I1305624', 'MC_XS') # Path and EndPath definitions process.generation_step = cms.Path(process.pgen*process.rivetAnalyzer) diff --git a/GeneratorInterface/RivetInterface/test/runRivetAnalyzerMiniAOD_cfg.py b/GeneratorInterface/RivetInterface/test/runRivetAnalyzerMiniAOD_cfg.py index 79b9822e53270..8f73f344130d6 100644 --- a/GeneratorInterface/RivetInterface/test/runRivetAnalyzerMiniAOD_cfg.py +++ b/GeneratorInterface/RivetInterface/test/runRivetAnalyzerMiniAOD_cfg.py @@ -1,6 +1,6 @@ import FWCore.ParameterSet.Config as cms -process = cms.Process('GEN') +process = cms.Process('Rivet') process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = cms.untracked.int32(100) diff --git a/GeneratorInterface/RivetInterface/test/test-rivet-nan.sh b/GeneratorInterface/RivetInterface/test/test-rivet-nan.sh new file mode 100755 index 0000000000000..0a6f725df2661 --- /dev/null +++ b/GeneratorInterface/RivetInterface/test/test-rivet-nan.sh @@ -0,0 +1,3 @@ +#!/bin/sh -e + +! grep "nan" out.yoda diff --git a/GeneratorInterface/RivetInterface/test/test-yoda-merge.sh b/GeneratorInterface/RivetInterface/test/test-yoda-merge.sh new file mode 100755 index 0000000000000..51d58b4db3795 --- /dev/null +++ b/GeneratorInterface/RivetInterface/test/test-yoda-merge.sh @@ -0,0 +1,3 @@ +#!/bin/sh -e + +yodamerge -o merged.yoda out.yoda out.yoda diff --git a/GeneratorInterface/RivetInterface/test/test-yoda-root.sh b/GeneratorInterface/RivetInterface/test/test-yoda-root.sh new file mode 100755 index 0000000000000..1257724a9b01a --- /dev/null +++ b/GeneratorInterface/RivetInterface/test/test-yoda-root.sh @@ -0,0 +1,3 @@ +#!/bin/sh -e + +yoda2root out.yoda diff --git a/GeneratorInterface/TauolaInterface/BuildFile.xml b/GeneratorInterface/TauolaInterface/BuildFile.xml index 42c4eec40ea93..22b450b225970 100644 --- a/GeneratorInterface/TauolaInterface/BuildFile.xml +++ b/GeneratorInterface/TauolaInterface/BuildFile.xml @@ -1,3 +1,4 @@ + diff --git a/GeneratorInterface/TauolaInterface/plugins/BuildFile.xml b/GeneratorInterface/TauolaInterface/plugins/BuildFile.xml index e18f8b3190fa9..f65842a456d8b 100644 --- a/GeneratorInterface/TauolaInterface/plugins/BuildFile.xml +++ b/GeneratorInterface/TauolaInterface/plugins/BuildFile.xml @@ -14,6 +14,7 @@ + diff --git a/GeneratorInterface/TauolaInterface/test/TauSpinnerWTest.py b/GeneratorInterface/TauolaInterface/test/TauSpinnerWTest.py index c1c818649c313..5eca3a504a372 100644 --- a/GeneratorInterface/TauolaInterface/test/TauSpinnerWTest.py +++ b/GeneratorInterface/TauolaInterface/test/TauSpinnerWTest.py @@ -24,8 +24,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + + process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(100)) diff --git a/GeneratorInterface/TauolaInterface/test/TauSpinnerZTest.py b/GeneratorInterface/TauolaInterface/test/TauSpinnerZTest.py index f73b330a985a8..c298d4ff934e9 100644 --- a/GeneratorInterface/TauolaInterface/test/TauSpinnerZTest.py +++ b/GeneratorInterface/TauolaInterface/test/TauSpinnerZTest.py @@ -24,8 +24,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + + process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(100)) diff --git a/Geometry/CMSCommonData/data/beampipe/2026/v1/beampipe.xml b/Geometry/CMSCommonData/data/beampipe/2026/v1/beampipe.xml index 53fb703bfe7f6..ca3893aeee385 100644 --- a/Geometry/CMSCommonData/data/beampipe/2026/v1/beampipe.xml +++ b/Geometry/CMSCommonData/data/beampipe/2026/v1/beampipe.xml @@ -4,7 +4,6 @@ - diff --git a/Geometry/CMSCommonData/data/beampipe/2026/v2/beampipe.xml b/Geometry/CMSCommonData/data/beampipe/2026/v2/beampipe.xml index cdba26573009b..1ea326a81683b 100644 --- a/Geometry/CMSCommonData/data/beampipe/2026/v2/beampipe.xml +++ b/Geometry/CMSCommonData/data/beampipe/2026/v2/beampipe.xml @@ -4,7 +4,6 @@ - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021.xml index 2491439b9be81..a3789e119280b 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021.xml @@ -137,7 +137,7 @@ - + @@ -208,19 +208,19 @@ - - + + + + + - - - @@ -230,10 +230,10 @@ - + - + @@ -288,8 +288,8 @@ - - + + @@ -315,10 +315,10 @@ - - - - + + + + @@ -345,9 +345,9 @@ - - - + + + @@ -355,11 +355,11 @@ - + - + @@ -370,11 +370,11 @@ - + - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus05Percent.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus05Percent.xml new file mode 100644 index 0000000000000..27df4d10c9cd2 --- /dev/null +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus05Percent.xml @@ -0,0 +1,381 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus10Percent.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus10Percent.xml new file mode 100644 index 0000000000000..14f76d7bc2eea --- /dev/null +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus10Percent.xml @@ -0,0 +1,381 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus05Percent.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus05Percent.xml new file mode 100644 index 0000000000000..4fae7d8c6e643 --- /dev/null +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus05Percent.xml @@ -0,0 +1,381 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus10Percent.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus10Percent.xml new file mode 100644 index 0000000000000..8c3823c4c9e59 --- /dev/null +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus10Percent.xml @@ -0,0 +1,381 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021ZeroMaterial.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021ZeroMaterial.xml index 3268a34b38929..2e9a1fd37418b 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021ZeroMaterial.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021ZeroMaterial.xml @@ -137,7 +137,7 @@ - + @@ -208,18 +208,19 @@ - + + + + + - - - @@ -229,10 +230,10 @@ - + - + @@ -287,8 +288,8 @@ - - + + @@ -314,10 +315,10 @@ - - - - + + + + @@ -344,9 +345,9 @@ - - - + + + @@ -354,11 +355,11 @@ - + - + @@ -369,11 +370,11 @@ - + - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D49.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D49.xml index 9bdfee6f95ccd..5f0fae8b83670 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D49.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D49.xml @@ -101,7 +101,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D50.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D50.xml index f3c2d5e4d591d..2f786745ddd85 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D50.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D50.xml @@ -101,7 +101,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D60.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D60.xml index 27d860e08664e..f784c75637c09 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D60.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D60.xml @@ -52,7 +52,7 @@ - + @@ -106,7 +106,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D64.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D64.xml index d3c4dd77c0407..cca7d324c2638 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D64.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D64.xml @@ -101,7 +101,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D65.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D65.xml index 9500682ca1e3d..6a925e965d7fa 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D65.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D65.xml @@ -100,7 +100,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D66.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D66.xml index a477c2c511e52..74914117a363e 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D66.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D66.xml @@ -101,7 +101,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D67.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D67.xml index 208b1d526a760..85f415a9e83c3 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D67.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D67.xml @@ -101,7 +101,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D68.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D68.xml index af8ed7641dead..e3b80700b7ce2 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D68.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D68.xml @@ -101,7 +101,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D69.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D69.xml index a627242525199..24800fe00879c 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D69.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D69.xml @@ -106,7 +106,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D70.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D70.xml index 28743f3447e6e..d849085871aec 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D70.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D70.xml @@ -102,7 +102,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D71.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D71.xml index f7d2c1bc3ec0f..3970a99df9fcf 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D71.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D71.xml @@ -52,7 +52,7 @@ - + @@ -102,7 +102,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D72.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D72.xml index a888757fae6f8..cc1bc3b93df03 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D72.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D72.xml @@ -101,7 +101,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D73.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D73.xml deleted file mode 100644 index ae66188cad873..0000000000000 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D73.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D74.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D74.xml index 7c4018a93c4f4..823dfff8da26f 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D74.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D74.xml @@ -52,7 +52,7 @@ - + @@ -102,7 +102,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D75.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D75.xml new file mode 100644 index 0000000000000..530bfeeace755 --- /dev/null +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D75.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D76.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D76.xml new file mode 100644 index 0000000000000..3b392a7b84a2e --- /dev/null +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D76.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D77.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D77.xml new file mode 100644 index 0000000000000..6fa3fbbd94bb9 --- /dev/null +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D77.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D78.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D78.xml new file mode 100644 index 0000000000000..e2e7fb19961f2 --- /dev/null +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D78.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D79.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D79.xml new file mode 100644 index 0000000000000..32d4c11009f35 --- /dev/null +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D79.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/CMSCommonData/data/muonBase/2026/v3/muonBase.xml b/Geometry/CMSCommonData/data/muonBase/2026/v3/muonBase.xml index 6e8161e8ec956..571099e855827 100644 --- a/Geometry/CMSCommonData/data/muonBase/2026/v3/muonBase.xml +++ b/Geometry/CMSCommonData/data/muonBase/2026/v3/muonBase.xml @@ -1,8 +1,8 @@ - + - + diff --git a/Geometry/CMSCommonData/data/muonBase/2026/v4/muonBase.xml b/Geometry/CMSCommonData/data/muonBase/2026/v4/muonBase.xml index a28f017f33277..4bc0fdc06ea98 100644 --- a/Geometry/CMSCommonData/data/muonBase/2026/v4/muonBase.xml +++ b/Geometry/CMSCommonData/data/muonBase/2026/v4/muonBase.xml @@ -1,8 +1,8 @@ - + - + diff --git a/Geometry/CMSCommonData/data/muonBase/2026/v5/muonBase.xml b/Geometry/CMSCommonData/data/muonBase/2026/v5/muonBase.xml index 06c382b290bee..571099e855827 100644 --- a/Geometry/CMSCommonData/data/muonBase/2026/v5/muonBase.xml +++ b/Geometry/CMSCommonData/data/muonBase/2026/v5/muonBase.xml @@ -1,8 +1,8 @@ - + - + diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2017FlatMinus05PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2017FlatMinus05PercentXML_cfi.py deleted file mode 100644 index ed66803e968bf..0000000000000 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2017FlatMinus05PercentXML_cfi.py +++ /dev/null @@ -1,290 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", - geomXMLFiles = cms.vstring( - 'Geometry/CMSCommonData/data/materials/2017/v1/materials.xml', - 'Geometry/CMSCommonData/data/rotations.xml', - 'Geometry/CMSCommonData/data/extend/cmsextent.xml', - 'Geometry/CMSCommonData/data/cms/2017/v1/cms.xml', - 'Geometry/CMSCommonData/data/cmsMother.xml', - 'Geometry/CMSCommonData/data/eta3/etaMax.xml', - 'Geometry/CMSCommonData/data/cmsTracker.xml', - 'Geometry/CMSCommonData/data/caloBase/2017/v1/caloBase.xml', - 'Geometry/CMSCommonData/data/cmsCalo.xml', - 'Geometry/CMSCommonData/data/muonBase.xml', - 'Geometry/CMSCommonData/data/cmsMuon.xml', - 'Geometry/CMSCommonData/data/mgnt.xml', - 'Geometry/CMSCommonData/data/beampipe/2017/v1/beampipe.xml', - 'Geometry/CMSCommonData/data/cmsBeam.xml', - 'Geometry/CMSCommonData/data/muonMB.xml', - 'Geometry/CMSCommonData/data/muonMagnet.xml', - 'Geometry/CMSCommonData/data/cavern.xml', - 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/trackermaterial.xml', - 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/pixfwdMaterials.xml', - 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/pixbarmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/tibtidcommonmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/tibmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/tidmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/tobmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/tecmaterial.xml', - 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', - 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbar.xml', - 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', - 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', - 'Geometry/TrackerCommonData/data/tibmodpar.xml', - 'Geometry/TrackerCommonData/data/tibmodule0.xml', - 'Geometry/TrackerCommonData/data/tibmodule0a.xml', - 'Geometry/TrackerCommonData/data/tibmodule0b.xml', - 'Geometry/TrackerCommonData/data/tibmodule2.xml', - 'Geometry/TrackerCommonData/data/tibstringpar.xml', - 'Geometry/TrackerCommonData/data/tibstring0ll.xml', - 'Geometry/TrackerCommonData/data/tibstring0lr.xml', - 'Geometry/TrackerCommonData/data/tibstring0ul.xml', - 'Geometry/TrackerCommonData/data/tibstring0ur.xml', - 'Geometry/TrackerCommonData/data/tibstring0.xml', - 'Geometry/TrackerCommonData/data/tibstring1ll.xml', - 'Geometry/TrackerCommonData/data/tibstring1lr.xml', - 'Geometry/TrackerCommonData/data/tibstring1ul.xml', - 'Geometry/TrackerCommonData/data/tibstring1ur.xml', - 'Geometry/TrackerCommonData/data/tibstring1.xml', - 'Geometry/TrackerCommonData/data/tibstring2ll.xml', - 'Geometry/TrackerCommonData/data/tibstring2lr.xml', - 'Geometry/TrackerCommonData/data/tibstring2ul.xml', - 'Geometry/TrackerCommonData/data/tibstring2ur.xml', - 'Geometry/TrackerCommonData/data/tibstring2.xml', - 'Geometry/TrackerCommonData/data/tibstring3ll.xml', - 'Geometry/TrackerCommonData/data/tibstring3lr.xml', - 'Geometry/TrackerCommonData/data/tibstring3ul.xml', - 'Geometry/TrackerCommonData/data/tibstring3ur.xml', - 'Geometry/TrackerCommonData/data/tibstring3.xml', - 'Geometry/TrackerCommonData/data/tiblayerpar.xml', - 'Geometry/TrackerCommonData/data/tiblayer0.xml', - 'Geometry/TrackerCommonData/data/tiblayer1.xml', - 'Geometry/TrackerCommonData/data/tiblayer2.xml', - 'Geometry/TrackerCommonData/data/tiblayer3.xml', - 'Geometry/TrackerCommonData/data/tib.xml', - 'Geometry/TrackerCommonData/data/tidmodpar.xml', - 'Geometry/TrackerCommonData/data/tidmodule0.xml', - 'Geometry/TrackerCommonData/data/tidmodule0r.xml', - 'Geometry/TrackerCommonData/data/tidmodule0l.xml', - 'Geometry/TrackerCommonData/data/tidmodule1.xml', - 'Geometry/TrackerCommonData/data/tidmodule1r.xml', - 'Geometry/TrackerCommonData/data/tidmodule1l.xml', - 'Geometry/TrackerCommonData/data/tidmodule2.xml', - 'Geometry/TrackerCommonData/data/tidringpar.xml', - 'Geometry/TrackerCommonData/data/tidring0.xml', - 'Geometry/TrackerCommonData/data/tidring0f.xml', - 'Geometry/TrackerCommonData/data/tidring0b.xml', - 'Geometry/TrackerCommonData/data/tidring1.xml', - 'Geometry/TrackerCommonData/data/tidring1f.xml', - 'Geometry/TrackerCommonData/data/tidring1b.xml', - 'Geometry/TrackerCommonData/data/tidring2.xml', - 'Geometry/TrackerCommonData/data/tid.xml', - 'Geometry/TrackerCommonData/data/tidf.xml', - 'Geometry/TrackerCommonData/data/tidb.xml', - 'Geometry/TrackerCommonData/data/tibtidservices.xml', - 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', - 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', - 'Geometry/TrackerCommonData/data/tobmodpar.xml', - 'Geometry/TrackerCommonData/data/tobmodule0.xml', - 'Geometry/TrackerCommonData/data/tobmodule2.xml', - 'Geometry/TrackerCommonData/data/tobmodule4.xml', - 'Geometry/TrackerCommonData/data/tobrodpar.xml', - 'Geometry/TrackerCommonData/data/tobrod0c.xml', - 'Geometry/TrackerCommonData/data/tobrod0l.xml', - 'Geometry/TrackerCommonData/data/tobrod0h.xml', - 'Geometry/TrackerCommonData/data/tobrod0.xml', - 'Geometry/TrackerCommonData/data/tobrod1l.xml', - 'Geometry/TrackerCommonData/data/tobrod1h.xml', - 'Geometry/TrackerCommonData/data/tobrod1.xml', - 'Geometry/TrackerCommonData/data/tobrod2c.xml', - 'Geometry/TrackerCommonData/data/tobrod2l.xml', - 'Geometry/TrackerCommonData/data/tobrod2h.xml', - 'Geometry/TrackerCommonData/data/tobrod2.xml', - 'Geometry/TrackerCommonData/data/tobrod3l.xml', - 'Geometry/TrackerCommonData/data/tobrod3h.xml', - 'Geometry/TrackerCommonData/data/tobrod3.xml', - 'Geometry/TrackerCommonData/data/tobrod4c.xml', - 'Geometry/TrackerCommonData/data/tobrod4l.xml', - 'Geometry/TrackerCommonData/data/tobrod4h.xml', - 'Geometry/TrackerCommonData/data/tobrod4.xml', - 'Geometry/TrackerCommonData/data/tobrod5l.xml', - 'Geometry/TrackerCommonData/data/tobrod5h.xml', - 'Geometry/TrackerCommonData/data/tobrod5.xml', - 'Geometry/TrackerCommonData/data/v2/tob.xml', - 'Geometry/TrackerCommonData/data/tecmodpar.xml', - 'Geometry/TrackerCommonData/data/tecmodule0.xml', - 'Geometry/TrackerCommonData/data/tecmodule0r.xml', - 'Geometry/TrackerCommonData/data/tecmodule0s.xml', - 'Geometry/TrackerCommonData/data/tecmodule1.xml', - 'Geometry/TrackerCommonData/data/tecmodule1r.xml', - 'Geometry/TrackerCommonData/data/tecmodule1s.xml', - 'Geometry/TrackerCommonData/data/tecmodule2.xml', - 'Geometry/TrackerCommonData/data/tecmodule3.xml', - 'Geometry/TrackerCommonData/data/tecmodule4.xml', - 'Geometry/TrackerCommonData/data/tecmodule4r.xml', - 'Geometry/TrackerCommonData/data/tecmodule4s.xml', - 'Geometry/TrackerCommonData/data/tecmodule5.xml', - 'Geometry/TrackerCommonData/data/tecmodule6.xml', - 'Geometry/TrackerCommonData/data/tecpetpar.xml', - 'Geometry/TrackerCommonData/data/tecring0.xml', - 'Geometry/TrackerCommonData/data/tecring1.xml', - 'Geometry/TrackerCommonData/data/tecring2.xml', - 'Geometry/TrackerCommonData/data/tecring3.xml', - 'Geometry/TrackerCommonData/data/tecring4.xml', - 'Geometry/TrackerCommonData/data/tecring5.xml', - 'Geometry/TrackerCommonData/data/tecring6.xml', - 'Geometry/TrackerCommonData/data/tecring0f.xml', - 'Geometry/TrackerCommonData/data/tecring1f.xml', - 'Geometry/TrackerCommonData/data/tecring2f.xml', - 'Geometry/TrackerCommonData/data/tecring3f.xml', - 'Geometry/TrackerCommonData/data/tecring4f.xml', - 'Geometry/TrackerCommonData/data/tecring5f.xml', - 'Geometry/TrackerCommonData/data/tecring6f.xml', - 'Geometry/TrackerCommonData/data/tecring0b.xml', - 'Geometry/TrackerCommonData/data/tecring1b.xml', - 'Geometry/TrackerCommonData/data/tecring2b.xml', - 'Geometry/TrackerCommonData/data/tecring3b.xml', - 'Geometry/TrackerCommonData/data/tecring4b.xml', - 'Geometry/TrackerCommonData/data/tecring5b.xml', - 'Geometry/TrackerCommonData/data/tecring6b.xml', - 'Geometry/TrackerCommonData/data/tecpetalf.xml', - 'Geometry/TrackerCommonData/data/tecpetalb.xml', - 'Geometry/TrackerCommonData/data/tecpetal0.xml', - 'Geometry/TrackerCommonData/data/tecpetal0f.xml', - 'Geometry/TrackerCommonData/data/tecpetal0b.xml', - 'Geometry/TrackerCommonData/data/tecpetal3.xml', - 'Geometry/TrackerCommonData/data/tecpetal3f.xml', - 'Geometry/TrackerCommonData/data/tecpetal3b.xml', - 'Geometry/TrackerCommonData/data/tecpetal6f.xml', - 'Geometry/TrackerCommonData/data/tecpetal6b.xml', - 'Geometry/TrackerCommonData/data/tecpetal8f.xml', - 'Geometry/TrackerCommonData/data/tecpetal8b.xml', - 'Geometry/TrackerCommonData/data/tecwheel.xml', - 'Geometry/TrackerCommonData/data/tecwheela.xml', - 'Geometry/TrackerCommonData/data/tecwheelb.xml', - 'Geometry/TrackerCommonData/data/tecwheelc.xml', - 'Geometry/TrackerCommonData/data/tecwheeld.xml', - 'Geometry/TrackerCommonData/data/tecwheel6.xml', - 'Geometry/TrackerCommonData/data/tecservices.xml', - 'Geometry/TrackerCommonData/data/tecbackplate.xml', - 'Geometry/TrackerCommonData/data/tec.xml', - 'Geometry/TrackerCommonData/data/Run2/tracker.xml', - 'Geometry/TrackerCommonData/data/trackerpixbar.xml', - 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', - 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', - 'Geometry/TrackerCommonData/data/trackertib.xml', - 'Geometry/TrackerCommonData/data/trackertid.xml', - 'Geometry/TrackerCommonData/data/trackertob.xml', - 'Geometry/TrackerCommonData/data/trackertec.xml', - 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', - 'Geometry/TrackerCommonData/data/trackerother.xml', - 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', - 'Geometry/EcalCommonData/data/ebalgo.xml', - 'Geometry/EcalCommonData/data/ebcon.xml', - 'Geometry/EcalCommonData/data/ebrot.xml', - 'Geometry/EcalCommonData/data/eecon.xml', - 'Geometry/EcalCommonData/data/eefixed.xml', - 'Geometry/EcalCommonData/data/eehier.xml', - 'Geometry/EcalCommonData/data/eealgo.xml', - 'Geometry/EcalCommonData/data/escon.xml', - 'Geometry/EcalCommonData/data/esalgo.xml', - 'Geometry/EcalCommonData/data/eeF.xml', - 'Geometry/EcalCommonData/data/eeB.xml', - 'Geometry/EcalCommonData/data/ectkcable.xml', - 'Geometry/HcalCommonData/data/hcalrotations.xml', - 'Geometry/HcalCommonData/data/hcal/PhaseI/hcalalgo.xml', - 'Geometry/HcalCommonData/data/hcalcablealgo.xml', - 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', - 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', - 'Geometry/HcalCommonData/data/hcalouteralgo.xml', - 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', - 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', - 'Geometry/HcalCommonData/data/hcalSimNumbering/2017Plan0/hcalSimNumbering.xml', - 'Geometry/HcalCommonData/data/hcalRecNumbering/2017/hcalRecNumbering.xml', - 'Geometry/MuonCommonData/data/mbCommon/2017/v1/mbCommon.xml', - 'Geometry/MuonCommonData/data/mb1/2015/v1/mb1.xml', - 'Geometry/MuonCommonData/data/mb2/2015/v1/mb2.xml', - 'Geometry/MuonCommonData/data/mb3/2015/v1/mb3.xml', - 'Geometry/MuonCommonData/data/mb4/2015/v1/mb4.xml', - 'Geometry/MuonCommonData/data/muonYoke/2015/v1/muonYoke.xml', - 'Geometry/MuonCommonData/data/mf/2017/v1/mf.xml', - 'Geometry/MuonCommonData/data/rpcf/2015/v1/rpcf.xml', - 'Geometry/MuonCommonData/data/csc/2015/v1/csc.xml', - 'Geometry/MuonCommonData/data/mfshield/2017/v1/mfshield.xml', - 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', - 'Geometry/MuonCommonData/data/gem11/2017/v2/gem11.xml', - 'Geometry/ForwardCommonData/data/forward.xml', - 'Geometry/ForwardCommonData/data/forwardshield/2015/v1/forwardshield.xml', - 'Geometry/ForwardCommonData/data/brmrotations.xml', - 'Geometry/ForwardCommonData/data/brm.xml', - 'Geometry/ForwardCommonData/data/Run2/totemMaterials.xml', - 'Geometry/ForwardCommonData/data/totemRotations.xml', - 'Geometry/ForwardCommonData/data/Run2/totemt1.xml', - 'Geometry/ForwardCommonData/data/Run2/totemt2.xml', - 'Geometry/ForwardCommonData/data/ionpump.xml', - 'Geometry/ForwardCommonData/data/Run2/castor.xml', - 'Geometry/ForwardCommonData/data/zdcmaterials.xml', - 'Geometry/ForwardCommonData/data/lumimaterials.xml', - 'Geometry/ForwardCommonData/data/zdcrotations.xml', - 'Geometry/ForwardCommonData/data/lumirotations.xml', - 'Geometry/ForwardCommonData/data/zdc.xml', - 'Geometry/ForwardCommonData/data/zdclumi.xml', - 'Geometry/ForwardCommonData/data/cmszdc.xml')+cms.vstring( - 'Geometry/MuonCommonData/data/muonNumbering/2017/v1/muonNumbering.xml', - 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', - 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', - 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', - 'Geometry/EcalSimData/data/ecalsens.xml', - 'Geometry/HcalCommonData/data/hcalsenspmf.xml', - 'Geometry/HcalSimData/data/hf.xml', - 'Geometry/HcalSimData/data/hfpmt.xml', - 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', - 'Geometry/MuonSimData/data/v2/muonSens.xml', - 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', - 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', - 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', - 'Geometry/RPCGeometryBuilder/data/RPCSpecs.xml', - 'Geometry/GEMGeometryBuilder/data/GEMSpecsFilter17.xml', - 'Geometry/GEMGeometryBuilder/data/v4/GEMSpecs.xml', - 'Geometry/ForwardCommonData/data/brmsens.xml', - 'Geometry/ForwardSimData/data/castorsens.xml', - 'Geometry/ForwardSimData/data/zdcsens.xml', - 'Geometry/HcalSimData/data/HcalProdCuts.xml', - 'Geometry/EcalSimData/data/EcalProdCuts.xml', - 'Geometry/EcalSimData/data/ESProdCuts.xml', - 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', - 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', - 'Geometry/MuonSimData/data/muonProdCuts.xml', - 'Geometry/ForwardSimData/data/CastorProdCuts.xml', - 'Geometry/ForwardSimData/data/zdcProdCuts.xml', - 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', - 'Geometry/CMSCommonData/data/FieldParameters.xml'), - rootNodeName = cms.string('cms:OCMS') -) - - diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2017FlatMinus10PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2017FlatMinus10PercentXML_cfi.py deleted file mode 100644 index 6f7bd54da8852..0000000000000 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2017FlatMinus10PercentXML_cfi.py +++ /dev/null @@ -1,290 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", - geomXMLFiles = cms.vstring( - 'Geometry/CMSCommonData/data/materials/2017/v1/materials.xml', - 'Geometry/CMSCommonData/data/rotations.xml', - 'Geometry/CMSCommonData/data/extend/cmsextent.xml', - 'Geometry/CMSCommonData/data/cms/2017/v1/cms.xml', - 'Geometry/CMSCommonData/data/cmsMother.xml', - 'Geometry/CMSCommonData/data/eta3/etaMax.xml', - 'Geometry/CMSCommonData/data/cmsTracker.xml', - 'Geometry/CMSCommonData/data/caloBase/2017/v1/caloBase.xml', - 'Geometry/CMSCommonData/data/cmsCalo.xml', - 'Geometry/CMSCommonData/data/muonBase.xml', - 'Geometry/CMSCommonData/data/cmsMuon.xml', - 'Geometry/CMSCommonData/data/mgnt.xml', - 'Geometry/CMSCommonData/data/beampipe/2017/v1/beampipe.xml', - 'Geometry/CMSCommonData/data/cmsBeam.xml', - 'Geometry/CMSCommonData/data/muonMB.xml', - 'Geometry/CMSCommonData/data/muonMagnet.xml', - 'Geometry/CMSCommonData/data/cavern.xml', - 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/trackermaterial.xml', - 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/pixfwdMaterials.xml', - 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/pixbarmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/tibtidcommonmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/tibmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/tidmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/tobmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/tecmaterial.xml', - 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', - 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbar.xml', - 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', - 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', - 'Geometry/TrackerCommonData/data/tibmodpar.xml', - 'Geometry/TrackerCommonData/data/tibmodule0.xml', - 'Geometry/TrackerCommonData/data/tibmodule0a.xml', - 'Geometry/TrackerCommonData/data/tibmodule0b.xml', - 'Geometry/TrackerCommonData/data/tibmodule2.xml', - 'Geometry/TrackerCommonData/data/tibstringpar.xml', - 'Geometry/TrackerCommonData/data/tibstring0ll.xml', - 'Geometry/TrackerCommonData/data/tibstring0lr.xml', - 'Geometry/TrackerCommonData/data/tibstring0ul.xml', - 'Geometry/TrackerCommonData/data/tibstring0ur.xml', - 'Geometry/TrackerCommonData/data/tibstring0.xml', - 'Geometry/TrackerCommonData/data/tibstring1ll.xml', - 'Geometry/TrackerCommonData/data/tibstring1lr.xml', - 'Geometry/TrackerCommonData/data/tibstring1ul.xml', - 'Geometry/TrackerCommonData/data/tibstring1ur.xml', - 'Geometry/TrackerCommonData/data/tibstring1.xml', - 'Geometry/TrackerCommonData/data/tibstring2ll.xml', - 'Geometry/TrackerCommonData/data/tibstring2lr.xml', - 'Geometry/TrackerCommonData/data/tibstring2ul.xml', - 'Geometry/TrackerCommonData/data/tibstring2ur.xml', - 'Geometry/TrackerCommonData/data/tibstring2.xml', - 'Geometry/TrackerCommonData/data/tibstring3ll.xml', - 'Geometry/TrackerCommonData/data/tibstring3lr.xml', - 'Geometry/TrackerCommonData/data/tibstring3ul.xml', - 'Geometry/TrackerCommonData/data/tibstring3ur.xml', - 'Geometry/TrackerCommonData/data/tibstring3.xml', - 'Geometry/TrackerCommonData/data/tiblayerpar.xml', - 'Geometry/TrackerCommonData/data/tiblayer0.xml', - 'Geometry/TrackerCommonData/data/tiblayer1.xml', - 'Geometry/TrackerCommonData/data/tiblayer2.xml', - 'Geometry/TrackerCommonData/data/tiblayer3.xml', - 'Geometry/TrackerCommonData/data/tib.xml', - 'Geometry/TrackerCommonData/data/tidmodpar.xml', - 'Geometry/TrackerCommonData/data/tidmodule0.xml', - 'Geometry/TrackerCommonData/data/tidmodule0r.xml', - 'Geometry/TrackerCommonData/data/tidmodule0l.xml', - 'Geometry/TrackerCommonData/data/tidmodule1.xml', - 'Geometry/TrackerCommonData/data/tidmodule1r.xml', - 'Geometry/TrackerCommonData/data/tidmodule1l.xml', - 'Geometry/TrackerCommonData/data/tidmodule2.xml', - 'Geometry/TrackerCommonData/data/tidringpar.xml', - 'Geometry/TrackerCommonData/data/tidring0.xml', - 'Geometry/TrackerCommonData/data/tidring0f.xml', - 'Geometry/TrackerCommonData/data/tidring0b.xml', - 'Geometry/TrackerCommonData/data/tidring1.xml', - 'Geometry/TrackerCommonData/data/tidring1f.xml', - 'Geometry/TrackerCommonData/data/tidring1b.xml', - 'Geometry/TrackerCommonData/data/tidring2.xml', - 'Geometry/TrackerCommonData/data/tid.xml', - 'Geometry/TrackerCommonData/data/tidf.xml', - 'Geometry/TrackerCommonData/data/tidb.xml', - 'Geometry/TrackerCommonData/data/tibtidservices.xml', - 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', - 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', - 'Geometry/TrackerCommonData/data/tobmodpar.xml', - 'Geometry/TrackerCommonData/data/tobmodule0.xml', - 'Geometry/TrackerCommonData/data/tobmodule2.xml', - 'Geometry/TrackerCommonData/data/tobmodule4.xml', - 'Geometry/TrackerCommonData/data/tobrodpar.xml', - 'Geometry/TrackerCommonData/data/tobrod0c.xml', - 'Geometry/TrackerCommonData/data/tobrod0l.xml', - 'Geometry/TrackerCommonData/data/tobrod0h.xml', - 'Geometry/TrackerCommonData/data/tobrod0.xml', - 'Geometry/TrackerCommonData/data/tobrod1l.xml', - 'Geometry/TrackerCommonData/data/tobrod1h.xml', - 'Geometry/TrackerCommonData/data/tobrod1.xml', - 'Geometry/TrackerCommonData/data/tobrod2c.xml', - 'Geometry/TrackerCommonData/data/tobrod2l.xml', - 'Geometry/TrackerCommonData/data/tobrod2h.xml', - 'Geometry/TrackerCommonData/data/tobrod2.xml', - 'Geometry/TrackerCommonData/data/tobrod3l.xml', - 'Geometry/TrackerCommonData/data/tobrod3h.xml', - 'Geometry/TrackerCommonData/data/tobrod3.xml', - 'Geometry/TrackerCommonData/data/tobrod4c.xml', - 'Geometry/TrackerCommonData/data/tobrod4l.xml', - 'Geometry/TrackerCommonData/data/tobrod4h.xml', - 'Geometry/TrackerCommonData/data/tobrod4.xml', - 'Geometry/TrackerCommonData/data/tobrod5l.xml', - 'Geometry/TrackerCommonData/data/tobrod5h.xml', - 'Geometry/TrackerCommonData/data/tobrod5.xml', - 'Geometry/TrackerCommonData/data/v2/tob.xml', - 'Geometry/TrackerCommonData/data/tecmodpar.xml', - 'Geometry/TrackerCommonData/data/tecmodule0.xml', - 'Geometry/TrackerCommonData/data/tecmodule0r.xml', - 'Geometry/TrackerCommonData/data/tecmodule0s.xml', - 'Geometry/TrackerCommonData/data/tecmodule1.xml', - 'Geometry/TrackerCommonData/data/tecmodule1r.xml', - 'Geometry/TrackerCommonData/data/tecmodule1s.xml', - 'Geometry/TrackerCommonData/data/tecmodule2.xml', - 'Geometry/TrackerCommonData/data/tecmodule3.xml', - 'Geometry/TrackerCommonData/data/tecmodule4.xml', - 'Geometry/TrackerCommonData/data/tecmodule4r.xml', - 'Geometry/TrackerCommonData/data/tecmodule4s.xml', - 'Geometry/TrackerCommonData/data/tecmodule5.xml', - 'Geometry/TrackerCommonData/data/tecmodule6.xml', - 'Geometry/TrackerCommonData/data/tecpetpar.xml', - 'Geometry/TrackerCommonData/data/tecring0.xml', - 'Geometry/TrackerCommonData/data/tecring1.xml', - 'Geometry/TrackerCommonData/data/tecring2.xml', - 'Geometry/TrackerCommonData/data/tecring3.xml', - 'Geometry/TrackerCommonData/data/tecring4.xml', - 'Geometry/TrackerCommonData/data/tecring5.xml', - 'Geometry/TrackerCommonData/data/tecring6.xml', - 'Geometry/TrackerCommonData/data/tecring0f.xml', - 'Geometry/TrackerCommonData/data/tecring1f.xml', - 'Geometry/TrackerCommonData/data/tecring2f.xml', - 'Geometry/TrackerCommonData/data/tecring3f.xml', - 'Geometry/TrackerCommonData/data/tecring4f.xml', - 'Geometry/TrackerCommonData/data/tecring5f.xml', - 'Geometry/TrackerCommonData/data/tecring6f.xml', - 'Geometry/TrackerCommonData/data/tecring0b.xml', - 'Geometry/TrackerCommonData/data/tecring1b.xml', - 'Geometry/TrackerCommonData/data/tecring2b.xml', - 'Geometry/TrackerCommonData/data/tecring3b.xml', - 'Geometry/TrackerCommonData/data/tecring4b.xml', - 'Geometry/TrackerCommonData/data/tecring5b.xml', - 'Geometry/TrackerCommonData/data/tecring6b.xml', - 'Geometry/TrackerCommonData/data/tecpetalf.xml', - 'Geometry/TrackerCommonData/data/tecpetalb.xml', - 'Geometry/TrackerCommonData/data/tecpetal0.xml', - 'Geometry/TrackerCommonData/data/tecpetal0f.xml', - 'Geometry/TrackerCommonData/data/tecpetal0b.xml', - 'Geometry/TrackerCommonData/data/tecpetal3.xml', - 'Geometry/TrackerCommonData/data/tecpetal3f.xml', - 'Geometry/TrackerCommonData/data/tecpetal3b.xml', - 'Geometry/TrackerCommonData/data/tecpetal6f.xml', - 'Geometry/TrackerCommonData/data/tecpetal6b.xml', - 'Geometry/TrackerCommonData/data/tecpetal8f.xml', - 'Geometry/TrackerCommonData/data/tecpetal8b.xml', - 'Geometry/TrackerCommonData/data/tecwheel.xml', - 'Geometry/TrackerCommonData/data/tecwheela.xml', - 'Geometry/TrackerCommonData/data/tecwheelb.xml', - 'Geometry/TrackerCommonData/data/tecwheelc.xml', - 'Geometry/TrackerCommonData/data/tecwheeld.xml', - 'Geometry/TrackerCommonData/data/tecwheel6.xml', - 'Geometry/TrackerCommonData/data/tecservices.xml', - 'Geometry/TrackerCommonData/data/tecbackplate.xml', - 'Geometry/TrackerCommonData/data/tec.xml', - 'Geometry/TrackerCommonData/data/Run2/tracker.xml', - 'Geometry/TrackerCommonData/data/trackerpixbar.xml', - 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', - 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', - 'Geometry/TrackerCommonData/data/trackertib.xml', - 'Geometry/TrackerCommonData/data/trackertid.xml', - 'Geometry/TrackerCommonData/data/trackertob.xml', - 'Geometry/TrackerCommonData/data/trackertec.xml', - 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', - 'Geometry/TrackerCommonData/data/trackerother.xml', - 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', - 'Geometry/EcalCommonData/data/ebalgo.xml', - 'Geometry/EcalCommonData/data/ebcon.xml', - 'Geometry/EcalCommonData/data/ebrot.xml', - 'Geometry/EcalCommonData/data/eecon.xml', - 'Geometry/EcalCommonData/data/eefixed.xml', - 'Geometry/EcalCommonData/data/eehier.xml', - 'Geometry/EcalCommonData/data/eealgo.xml', - 'Geometry/EcalCommonData/data/escon.xml', - 'Geometry/EcalCommonData/data/esalgo.xml', - 'Geometry/EcalCommonData/data/eeF.xml', - 'Geometry/EcalCommonData/data/eeB.xml', - 'Geometry/EcalCommonData/data/ectkcable.xml', - 'Geometry/HcalCommonData/data/hcalrotations.xml', - 'Geometry/HcalCommonData/data/hcal/PhaseI/hcalalgo.xml', - 'Geometry/HcalCommonData/data/hcalcablealgo.xml', - 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', - 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', - 'Geometry/HcalCommonData/data/hcalouteralgo.xml', - 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', - 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', - 'Geometry/HcalCommonData/data/hcalSimNumbering/2017Plan0/hcalSimNumbering.xml', - 'Geometry/HcalCommonData/data/hcalRecNumbering/2017/hcalRecNumbering.xml', - 'Geometry/MuonCommonData/data/mbCommon/2017/v1/mbCommon.xml', - 'Geometry/MuonCommonData/data/mb1/2015/v1/mb1.xml', - 'Geometry/MuonCommonData/data/mb2/2015/v1/mb2.xml', - 'Geometry/MuonCommonData/data/mb3/2015/v1/mb3.xml', - 'Geometry/MuonCommonData/data/mb4/2015/v1/mb4.xml', - 'Geometry/MuonCommonData/data/muonYoke/2015/v1/muonYoke.xml', - 'Geometry/MuonCommonData/data/mf/2017/v1/mf.xml', - 'Geometry/MuonCommonData/data/rpcf/2015/v1/rpcf.xml', - 'Geometry/MuonCommonData/data/csc/2015/v1/csc.xml', - 'Geometry/MuonCommonData/data/mfshield/2017/v1/mfshield.xml', - 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', - 'Geometry/MuonCommonData/data/gem11/2017/v2/gem11.xml', - 'Geometry/ForwardCommonData/data/forward.xml', - 'Geometry/ForwardCommonData/data/forwardshield/2015/v1/forwardshield.xml', - 'Geometry/ForwardCommonData/data/brmrotations.xml', - 'Geometry/ForwardCommonData/data/brm.xml', - 'Geometry/ForwardCommonData/data/Run2/totemMaterials.xml', - 'Geometry/ForwardCommonData/data/totemRotations.xml', - 'Geometry/ForwardCommonData/data/Run2/totemt1.xml', - 'Geometry/ForwardCommonData/data/Run2/totemt2.xml', - 'Geometry/ForwardCommonData/data/ionpump.xml', - 'Geometry/ForwardCommonData/data/Run2/castor.xml', - 'Geometry/ForwardCommonData/data/zdcmaterials.xml', - 'Geometry/ForwardCommonData/data/lumimaterials.xml', - 'Geometry/ForwardCommonData/data/zdcrotations.xml', - 'Geometry/ForwardCommonData/data/lumirotations.xml', - 'Geometry/ForwardCommonData/data/zdc.xml', - 'Geometry/ForwardCommonData/data/zdclumi.xml', - 'Geometry/ForwardCommonData/data/cmszdc.xml')+cms.vstring( - 'Geometry/MuonCommonData/data/muonNumbering/2017/v1/muonNumbering.xml', - 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', - 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', - 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', - 'Geometry/EcalSimData/data/ecalsens.xml', - 'Geometry/HcalCommonData/data/hcalsenspmf.xml', - 'Geometry/HcalSimData/data/hf.xml', - 'Geometry/HcalSimData/data/hfpmt.xml', - 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', - 'Geometry/MuonSimData/data/v2/muonSens.xml', - 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', - 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', - 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', - 'Geometry/RPCGeometryBuilder/data/RPCSpecs.xml', - 'Geometry/GEMGeometryBuilder/data/GEMSpecsFilter17.xml', - 'Geometry/GEMGeometryBuilder/data/v4/GEMSpecs.xml', - 'Geometry/ForwardCommonData/data/brmsens.xml', - 'Geometry/ForwardSimData/data/castorsens.xml', - 'Geometry/ForwardSimData/data/zdcsens.xml', - 'Geometry/HcalSimData/data/HcalProdCuts.xml', - 'Geometry/EcalSimData/data/EcalProdCuts.xml', - 'Geometry/EcalSimData/data/ESProdCuts.xml', - 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', - 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', - 'Geometry/MuonSimData/data/muonProdCuts.xml', - 'Geometry/ForwardSimData/data/CastorProdCuts.xml', - 'Geometry/ForwardSimData/data/zdcProdCuts.xml', - 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', - 'Geometry/CMSCommonData/data/FieldParameters.xml'), - rootNodeName = cms.string('cms:OCMS') -) - - diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2017FlatPlus05PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2017FlatPlus05PercentXML_cfi.py deleted file mode 100644 index 6496f2adac52f..0000000000000 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2017FlatPlus05PercentXML_cfi.py +++ /dev/null @@ -1,290 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", - geomXMLFiles = cms.vstring( - 'Geometry/CMSCommonData/data/materials/2017/v1/materials.xml', - 'Geometry/CMSCommonData/data/rotations.xml', - 'Geometry/CMSCommonData/data/extend/cmsextent.xml', - 'Geometry/CMSCommonData/data/cms/2017/v1/cms.xml', - 'Geometry/CMSCommonData/data/cmsMother.xml', - 'Geometry/CMSCommonData/data/eta3/etaMax.xml', - 'Geometry/CMSCommonData/data/cmsTracker.xml', - 'Geometry/CMSCommonData/data/caloBase/2017/v1/caloBase.xml', - 'Geometry/CMSCommonData/data/cmsCalo.xml', - 'Geometry/CMSCommonData/data/muonBase.xml', - 'Geometry/CMSCommonData/data/cmsMuon.xml', - 'Geometry/CMSCommonData/data/mgnt.xml', - 'Geometry/CMSCommonData/data/beampipe/2017/v1/beampipe.xml', - 'Geometry/CMSCommonData/data/cmsBeam.xml', - 'Geometry/CMSCommonData/data/muonMB.xml', - 'Geometry/CMSCommonData/data/muonMagnet.xml', - 'Geometry/CMSCommonData/data/cavern.xml', - 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/trackermaterial.xml', - 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/pixfwdMaterials.xml', - 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/pixbarmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/tibtidcommonmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/tibmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/tidmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/tobmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/tecmaterial.xml', - 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', - 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbar.xml', - 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', - 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', - 'Geometry/TrackerCommonData/data/tibmodpar.xml', - 'Geometry/TrackerCommonData/data/tibmodule0.xml', - 'Geometry/TrackerCommonData/data/tibmodule0a.xml', - 'Geometry/TrackerCommonData/data/tibmodule0b.xml', - 'Geometry/TrackerCommonData/data/tibmodule2.xml', - 'Geometry/TrackerCommonData/data/tibstringpar.xml', - 'Geometry/TrackerCommonData/data/tibstring0ll.xml', - 'Geometry/TrackerCommonData/data/tibstring0lr.xml', - 'Geometry/TrackerCommonData/data/tibstring0ul.xml', - 'Geometry/TrackerCommonData/data/tibstring0ur.xml', - 'Geometry/TrackerCommonData/data/tibstring0.xml', - 'Geometry/TrackerCommonData/data/tibstring1ll.xml', - 'Geometry/TrackerCommonData/data/tibstring1lr.xml', - 'Geometry/TrackerCommonData/data/tibstring1ul.xml', - 'Geometry/TrackerCommonData/data/tibstring1ur.xml', - 'Geometry/TrackerCommonData/data/tibstring1.xml', - 'Geometry/TrackerCommonData/data/tibstring2ll.xml', - 'Geometry/TrackerCommonData/data/tibstring2lr.xml', - 'Geometry/TrackerCommonData/data/tibstring2ul.xml', - 'Geometry/TrackerCommonData/data/tibstring2ur.xml', - 'Geometry/TrackerCommonData/data/tibstring2.xml', - 'Geometry/TrackerCommonData/data/tibstring3ll.xml', - 'Geometry/TrackerCommonData/data/tibstring3lr.xml', - 'Geometry/TrackerCommonData/data/tibstring3ul.xml', - 'Geometry/TrackerCommonData/data/tibstring3ur.xml', - 'Geometry/TrackerCommonData/data/tibstring3.xml', - 'Geometry/TrackerCommonData/data/tiblayerpar.xml', - 'Geometry/TrackerCommonData/data/tiblayer0.xml', - 'Geometry/TrackerCommonData/data/tiblayer1.xml', - 'Geometry/TrackerCommonData/data/tiblayer2.xml', - 'Geometry/TrackerCommonData/data/tiblayer3.xml', - 'Geometry/TrackerCommonData/data/tib.xml', - 'Geometry/TrackerCommonData/data/tidmodpar.xml', - 'Geometry/TrackerCommonData/data/tidmodule0.xml', - 'Geometry/TrackerCommonData/data/tidmodule0r.xml', - 'Geometry/TrackerCommonData/data/tidmodule0l.xml', - 'Geometry/TrackerCommonData/data/tidmodule1.xml', - 'Geometry/TrackerCommonData/data/tidmodule1r.xml', - 'Geometry/TrackerCommonData/data/tidmodule1l.xml', - 'Geometry/TrackerCommonData/data/tidmodule2.xml', - 'Geometry/TrackerCommonData/data/tidringpar.xml', - 'Geometry/TrackerCommonData/data/tidring0.xml', - 'Geometry/TrackerCommonData/data/tidring0f.xml', - 'Geometry/TrackerCommonData/data/tidring0b.xml', - 'Geometry/TrackerCommonData/data/tidring1.xml', - 'Geometry/TrackerCommonData/data/tidring1f.xml', - 'Geometry/TrackerCommonData/data/tidring1b.xml', - 'Geometry/TrackerCommonData/data/tidring2.xml', - 'Geometry/TrackerCommonData/data/tid.xml', - 'Geometry/TrackerCommonData/data/tidf.xml', - 'Geometry/TrackerCommonData/data/tidb.xml', - 'Geometry/TrackerCommonData/data/tibtidservices.xml', - 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', - 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', - 'Geometry/TrackerCommonData/data/tobmodpar.xml', - 'Geometry/TrackerCommonData/data/tobmodule0.xml', - 'Geometry/TrackerCommonData/data/tobmodule2.xml', - 'Geometry/TrackerCommonData/data/tobmodule4.xml', - 'Geometry/TrackerCommonData/data/tobrodpar.xml', - 'Geometry/TrackerCommonData/data/tobrod0c.xml', - 'Geometry/TrackerCommonData/data/tobrod0l.xml', - 'Geometry/TrackerCommonData/data/tobrod0h.xml', - 'Geometry/TrackerCommonData/data/tobrod0.xml', - 'Geometry/TrackerCommonData/data/tobrod1l.xml', - 'Geometry/TrackerCommonData/data/tobrod1h.xml', - 'Geometry/TrackerCommonData/data/tobrod1.xml', - 'Geometry/TrackerCommonData/data/tobrod2c.xml', - 'Geometry/TrackerCommonData/data/tobrod2l.xml', - 'Geometry/TrackerCommonData/data/tobrod2h.xml', - 'Geometry/TrackerCommonData/data/tobrod2.xml', - 'Geometry/TrackerCommonData/data/tobrod3l.xml', - 'Geometry/TrackerCommonData/data/tobrod3h.xml', - 'Geometry/TrackerCommonData/data/tobrod3.xml', - 'Geometry/TrackerCommonData/data/tobrod4c.xml', - 'Geometry/TrackerCommonData/data/tobrod4l.xml', - 'Geometry/TrackerCommonData/data/tobrod4h.xml', - 'Geometry/TrackerCommonData/data/tobrod4.xml', - 'Geometry/TrackerCommonData/data/tobrod5l.xml', - 'Geometry/TrackerCommonData/data/tobrod5h.xml', - 'Geometry/TrackerCommonData/data/tobrod5.xml', - 'Geometry/TrackerCommonData/data/v2/tob.xml', - 'Geometry/TrackerCommonData/data/tecmodpar.xml', - 'Geometry/TrackerCommonData/data/tecmodule0.xml', - 'Geometry/TrackerCommonData/data/tecmodule0r.xml', - 'Geometry/TrackerCommonData/data/tecmodule0s.xml', - 'Geometry/TrackerCommonData/data/tecmodule1.xml', - 'Geometry/TrackerCommonData/data/tecmodule1r.xml', - 'Geometry/TrackerCommonData/data/tecmodule1s.xml', - 'Geometry/TrackerCommonData/data/tecmodule2.xml', - 'Geometry/TrackerCommonData/data/tecmodule3.xml', - 'Geometry/TrackerCommonData/data/tecmodule4.xml', - 'Geometry/TrackerCommonData/data/tecmodule4r.xml', - 'Geometry/TrackerCommonData/data/tecmodule4s.xml', - 'Geometry/TrackerCommonData/data/tecmodule5.xml', - 'Geometry/TrackerCommonData/data/tecmodule6.xml', - 'Geometry/TrackerCommonData/data/tecpetpar.xml', - 'Geometry/TrackerCommonData/data/tecring0.xml', - 'Geometry/TrackerCommonData/data/tecring1.xml', - 'Geometry/TrackerCommonData/data/tecring2.xml', - 'Geometry/TrackerCommonData/data/tecring3.xml', - 'Geometry/TrackerCommonData/data/tecring4.xml', - 'Geometry/TrackerCommonData/data/tecring5.xml', - 'Geometry/TrackerCommonData/data/tecring6.xml', - 'Geometry/TrackerCommonData/data/tecring0f.xml', - 'Geometry/TrackerCommonData/data/tecring1f.xml', - 'Geometry/TrackerCommonData/data/tecring2f.xml', - 'Geometry/TrackerCommonData/data/tecring3f.xml', - 'Geometry/TrackerCommonData/data/tecring4f.xml', - 'Geometry/TrackerCommonData/data/tecring5f.xml', - 'Geometry/TrackerCommonData/data/tecring6f.xml', - 'Geometry/TrackerCommonData/data/tecring0b.xml', - 'Geometry/TrackerCommonData/data/tecring1b.xml', - 'Geometry/TrackerCommonData/data/tecring2b.xml', - 'Geometry/TrackerCommonData/data/tecring3b.xml', - 'Geometry/TrackerCommonData/data/tecring4b.xml', - 'Geometry/TrackerCommonData/data/tecring5b.xml', - 'Geometry/TrackerCommonData/data/tecring6b.xml', - 'Geometry/TrackerCommonData/data/tecpetalf.xml', - 'Geometry/TrackerCommonData/data/tecpetalb.xml', - 'Geometry/TrackerCommonData/data/tecpetal0.xml', - 'Geometry/TrackerCommonData/data/tecpetal0f.xml', - 'Geometry/TrackerCommonData/data/tecpetal0b.xml', - 'Geometry/TrackerCommonData/data/tecpetal3.xml', - 'Geometry/TrackerCommonData/data/tecpetal3f.xml', - 'Geometry/TrackerCommonData/data/tecpetal3b.xml', - 'Geometry/TrackerCommonData/data/tecpetal6f.xml', - 'Geometry/TrackerCommonData/data/tecpetal6b.xml', - 'Geometry/TrackerCommonData/data/tecpetal8f.xml', - 'Geometry/TrackerCommonData/data/tecpetal8b.xml', - 'Geometry/TrackerCommonData/data/tecwheel.xml', - 'Geometry/TrackerCommonData/data/tecwheela.xml', - 'Geometry/TrackerCommonData/data/tecwheelb.xml', - 'Geometry/TrackerCommonData/data/tecwheelc.xml', - 'Geometry/TrackerCommonData/data/tecwheeld.xml', - 'Geometry/TrackerCommonData/data/tecwheel6.xml', - 'Geometry/TrackerCommonData/data/tecservices.xml', - 'Geometry/TrackerCommonData/data/tecbackplate.xml', - 'Geometry/TrackerCommonData/data/tec.xml', - 'Geometry/TrackerCommonData/data/Run2/tracker.xml', - 'Geometry/TrackerCommonData/data/trackerpixbar.xml', - 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', - 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', - 'Geometry/TrackerCommonData/data/trackertib.xml', - 'Geometry/TrackerCommonData/data/trackertid.xml', - 'Geometry/TrackerCommonData/data/trackertob.xml', - 'Geometry/TrackerCommonData/data/trackertec.xml', - 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', - 'Geometry/TrackerCommonData/data/trackerother.xml', - 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', - 'Geometry/EcalCommonData/data/ebalgo.xml', - 'Geometry/EcalCommonData/data/ebcon.xml', - 'Geometry/EcalCommonData/data/ebrot.xml', - 'Geometry/EcalCommonData/data/eecon.xml', - 'Geometry/EcalCommonData/data/eefixed.xml', - 'Geometry/EcalCommonData/data/eehier.xml', - 'Geometry/EcalCommonData/data/eealgo.xml', - 'Geometry/EcalCommonData/data/escon.xml', - 'Geometry/EcalCommonData/data/esalgo.xml', - 'Geometry/EcalCommonData/data/eeF.xml', - 'Geometry/EcalCommonData/data/eeB.xml', - 'Geometry/EcalCommonData/data/ectkcable.xml', - 'Geometry/HcalCommonData/data/hcalrotations.xml', - 'Geometry/HcalCommonData/data/hcal/PhaseI/hcalalgo.xml', - 'Geometry/HcalCommonData/data/hcalcablealgo.xml', - 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', - 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', - 'Geometry/HcalCommonData/data/hcalouteralgo.xml', - 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', - 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', - 'Geometry/HcalCommonData/data/hcalSimNumbering/2017Plan0/hcalSimNumbering.xml', - 'Geometry/HcalCommonData/data/hcalRecNumbering/2017/hcalRecNumbering.xml', - 'Geometry/MuonCommonData/data/mbCommon/2017/v1/mbCommon.xml', - 'Geometry/MuonCommonData/data/mb1/2015/v1/mb1.xml', - 'Geometry/MuonCommonData/data/mb2/2015/v1/mb2.xml', - 'Geometry/MuonCommonData/data/mb3/2015/v1/mb3.xml', - 'Geometry/MuonCommonData/data/mb4/2015/v1/mb4.xml', - 'Geometry/MuonCommonData/data/muonYoke/2015/v1/muonYoke.xml', - 'Geometry/MuonCommonData/data/mf/2017/v1/mf.xml', - 'Geometry/MuonCommonData/data/rpcf/2015/v1/rpcf.xml', - 'Geometry/MuonCommonData/data/csc/2015/v1/csc.xml', - 'Geometry/MuonCommonData/data/mfshield/2017/v1/mfshield.xml', - 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', - 'Geometry/MuonCommonData/data/gem11/2017/v2/gem11.xml', - 'Geometry/ForwardCommonData/data/forward.xml', - 'Geometry/ForwardCommonData/data/forwardshield/2015/v1/forwardshield.xml', - 'Geometry/ForwardCommonData/data/brmrotations.xml', - 'Geometry/ForwardCommonData/data/brm.xml', - 'Geometry/ForwardCommonData/data/Run2/totemMaterials.xml', - 'Geometry/ForwardCommonData/data/totemRotations.xml', - 'Geometry/ForwardCommonData/data/Run2/totemt1.xml', - 'Geometry/ForwardCommonData/data/Run2/totemt2.xml', - 'Geometry/ForwardCommonData/data/ionpump.xml', - 'Geometry/ForwardCommonData/data/Run2/castor.xml', - 'Geometry/ForwardCommonData/data/zdcmaterials.xml', - 'Geometry/ForwardCommonData/data/lumimaterials.xml', - 'Geometry/ForwardCommonData/data/zdcrotations.xml', - 'Geometry/ForwardCommonData/data/lumirotations.xml', - 'Geometry/ForwardCommonData/data/zdc.xml', - 'Geometry/ForwardCommonData/data/zdclumi.xml', - 'Geometry/ForwardCommonData/data/cmszdc.xml')+cms.vstring( - 'Geometry/MuonCommonData/data/muonNumbering/2017/v1/muonNumbering.xml', - 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', - 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', - 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', - 'Geometry/EcalSimData/data/ecalsens.xml', - 'Geometry/HcalCommonData/data/hcalsenspmf.xml', - 'Geometry/HcalSimData/data/hf.xml', - 'Geometry/HcalSimData/data/hfpmt.xml', - 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', - 'Geometry/MuonSimData/data/v2/muonSens.xml', - 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', - 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', - 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', - 'Geometry/RPCGeometryBuilder/data/RPCSpecs.xml', - 'Geometry/GEMGeometryBuilder/data/GEMSpecsFilter17.xml', - 'Geometry/GEMGeometryBuilder/data/v4/GEMSpecs.xml', - 'Geometry/ForwardCommonData/data/brmsens.xml', - 'Geometry/ForwardSimData/data/castorsens.xml', - 'Geometry/ForwardSimData/data/zdcsens.xml', - 'Geometry/HcalSimData/data/HcalProdCuts.xml', - 'Geometry/EcalSimData/data/EcalProdCuts.xml', - 'Geometry/EcalSimData/data/ESProdCuts.xml', - 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', - 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', - 'Geometry/MuonSimData/data/muonProdCuts.xml', - 'Geometry/ForwardSimData/data/CastorProdCuts.xml', - 'Geometry/ForwardSimData/data/zdcProdCuts.xml', - 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', - 'Geometry/CMSCommonData/data/FieldParameters.xml'), - rootNodeName = cms.string('cms:OCMS') -) - - diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2017FlatPlus10PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2017FlatPlus10PercentXML_cfi.py deleted file mode 100644 index 011552b67648f..0000000000000 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2017FlatPlus10PercentXML_cfi.py +++ /dev/null @@ -1,290 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", - geomXMLFiles = cms.vstring( - 'Geometry/CMSCommonData/data/materials/2017/v1/materials.xml', - 'Geometry/CMSCommonData/data/rotations.xml', - 'Geometry/CMSCommonData/data/extend/cmsextent.xml', - 'Geometry/CMSCommonData/data/cms/2017/v1/cms.xml', - 'Geometry/CMSCommonData/data/cmsMother.xml', - 'Geometry/CMSCommonData/data/eta3/etaMax.xml', - 'Geometry/CMSCommonData/data/cmsTracker.xml', - 'Geometry/CMSCommonData/data/caloBase/2017/v1/caloBase.xml', - 'Geometry/CMSCommonData/data/cmsCalo.xml', - 'Geometry/CMSCommonData/data/muonBase.xml', - 'Geometry/CMSCommonData/data/cmsMuon.xml', - 'Geometry/CMSCommonData/data/mgnt.xml', - 'Geometry/CMSCommonData/data/beampipe/2017/v1/beampipe.xml', - 'Geometry/CMSCommonData/data/cmsBeam.xml', - 'Geometry/CMSCommonData/data/muonMB.xml', - 'Geometry/CMSCommonData/data/muonMagnet.xml', - 'Geometry/CMSCommonData/data/cavern.xml', - 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/trackermaterial.xml', - 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/pixfwdMaterials.xml', - 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/pixbarmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/tibtidcommonmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/tibmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/tidmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/tobmaterial.xml', - 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/tecmaterial.xml', - 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', - 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbar.xml', - 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', - 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', - 'Geometry/TrackerCommonData/data/tibmodpar.xml', - 'Geometry/TrackerCommonData/data/tibmodule0.xml', - 'Geometry/TrackerCommonData/data/tibmodule0a.xml', - 'Geometry/TrackerCommonData/data/tibmodule0b.xml', - 'Geometry/TrackerCommonData/data/tibmodule2.xml', - 'Geometry/TrackerCommonData/data/tibstringpar.xml', - 'Geometry/TrackerCommonData/data/tibstring0ll.xml', - 'Geometry/TrackerCommonData/data/tibstring0lr.xml', - 'Geometry/TrackerCommonData/data/tibstring0ul.xml', - 'Geometry/TrackerCommonData/data/tibstring0ur.xml', - 'Geometry/TrackerCommonData/data/tibstring0.xml', - 'Geometry/TrackerCommonData/data/tibstring1ll.xml', - 'Geometry/TrackerCommonData/data/tibstring1lr.xml', - 'Geometry/TrackerCommonData/data/tibstring1ul.xml', - 'Geometry/TrackerCommonData/data/tibstring1ur.xml', - 'Geometry/TrackerCommonData/data/tibstring1.xml', - 'Geometry/TrackerCommonData/data/tibstring2ll.xml', - 'Geometry/TrackerCommonData/data/tibstring2lr.xml', - 'Geometry/TrackerCommonData/data/tibstring2ul.xml', - 'Geometry/TrackerCommonData/data/tibstring2ur.xml', - 'Geometry/TrackerCommonData/data/tibstring2.xml', - 'Geometry/TrackerCommonData/data/tibstring3ll.xml', - 'Geometry/TrackerCommonData/data/tibstring3lr.xml', - 'Geometry/TrackerCommonData/data/tibstring3ul.xml', - 'Geometry/TrackerCommonData/data/tibstring3ur.xml', - 'Geometry/TrackerCommonData/data/tibstring3.xml', - 'Geometry/TrackerCommonData/data/tiblayerpar.xml', - 'Geometry/TrackerCommonData/data/tiblayer0.xml', - 'Geometry/TrackerCommonData/data/tiblayer1.xml', - 'Geometry/TrackerCommonData/data/tiblayer2.xml', - 'Geometry/TrackerCommonData/data/tiblayer3.xml', - 'Geometry/TrackerCommonData/data/tib.xml', - 'Geometry/TrackerCommonData/data/tidmodpar.xml', - 'Geometry/TrackerCommonData/data/tidmodule0.xml', - 'Geometry/TrackerCommonData/data/tidmodule0r.xml', - 'Geometry/TrackerCommonData/data/tidmodule0l.xml', - 'Geometry/TrackerCommonData/data/tidmodule1.xml', - 'Geometry/TrackerCommonData/data/tidmodule1r.xml', - 'Geometry/TrackerCommonData/data/tidmodule1l.xml', - 'Geometry/TrackerCommonData/data/tidmodule2.xml', - 'Geometry/TrackerCommonData/data/tidringpar.xml', - 'Geometry/TrackerCommonData/data/tidring0.xml', - 'Geometry/TrackerCommonData/data/tidring0f.xml', - 'Geometry/TrackerCommonData/data/tidring0b.xml', - 'Geometry/TrackerCommonData/data/tidring1.xml', - 'Geometry/TrackerCommonData/data/tidring1f.xml', - 'Geometry/TrackerCommonData/data/tidring1b.xml', - 'Geometry/TrackerCommonData/data/tidring2.xml', - 'Geometry/TrackerCommonData/data/tid.xml', - 'Geometry/TrackerCommonData/data/tidf.xml', - 'Geometry/TrackerCommonData/data/tidb.xml', - 'Geometry/TrackerCommonData/data/tibtidservices.xml', - 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', - 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', - 'Geometry/TrackerCommonData/data/tobmodpar.xml', - 'Geometry/TrackerCommonData/data/tobmodule0.xml', - 'Geometry/TrackerCommonData/data/tobmodule2.xml', - 'Geometry/TrackerCommonData/data/tobmodule4.xml', - 'Geometry/TrackerCommonData/data/tobrodpar.xml', - 'Geometry/TrackerCommonData/data/tobrod0c.xml', - 'Geometry/TrackerCommonData/data/tobrod0l.xml', - 'Geometry/TrackerCommonData/data/tobrod0h.xml', - 'Geometry/TrackerCommonData/data/tobrod0.xml', - 'Geometry/TrackerCommonData/data/tobrod1l.xml', - 'Geometry/TrackerCommonData/data/tobrod1h.xml', - 'Geometry/TrackerCommonData/data/tobrod1.xml', - 'Geometry/TrackerCommonData/data/tobrod2c.xml', - 'Geometry/TrackerCommonData/data/tobrod2l.xml', - 'Geometry/TrackerCommonData/data/tobrod2h.xml', - 'Geometry/TrackerCommonData/data/tobrod2.xml', - 'Geometry/TrackerCommonData/data/tobrod3l.xml', - 'Geometry/TrackerCommonData/data/tobrod3h.xml', - 'Geometry/TrackerCommonData/data/tobrod3.xml', - 'Geometry/TrackerCommonData/data/tobrod4c.xml', - 'Geometry/TrackerCommonData/data/tobrod4l.xml', - 'Geometry/TrackerCommonData/data/tobrod4h.xml', - 'Geometry/TrackerCommonData/data/tobrod4.xml', - 'Geometry/TrackerCommonData/data/tobrod5l.xml', - 'Geometry/TrackerCommonData/data/tobrod5h.xml', - 'Geometry/TrackerCommonData/data/tobrod5.xml', - 'Geometry/TrackerCommonData/data/v2/tob.xml', - 'Geometry/TrackerCommonData/data/tecmodpar.xml', - 'Geometry/TrackerCommonData/data/tecmodule0.xml', - 'Geometry/TrackerCommonData/data/tecmodule0r.xml', - 'Geometry/TrackerCommonData/data/tecmodule0s.xml', - 'Geometry/TrackerCommonData/data/tecmodule1.xml', - 'Geometry/TrackerCommonData/data/tecmodule1r.xml', - 'Geometry/TrackerCommonData/data/tecmodule1s.xml', - 'Geometry/TrackerCommonData/data/tecmodule2.xml', - 'Geometry/TrackerCommonData/data/tecmodule3.xml', - 'Geometry/TrackerCommonData/data/tecmodule4.xml', - 'Geometry/TrackerCommonData/data/tecmodule4r.xml', - 'Geometry/TrackerCommonData/data/tecmodule4s.xml', - 'Geometry/TrackerCommonData/data/tecmodule5.xml', - 'Geometry/TrackerCommonData/data/tecmodule6.xml', - 'Geometry/TrackerCommonData/data/tecpetpar.xml', - 'Geometry/TrackerCommonData/data/tecring0.xml', - 'Geometry/TrackerCommonData/data/tecring1.xml', - 'Geometry/TrackerCommonData/data/tecring2.xml', - 'Geometry/TrackerCommonData/data/tecring3.xml', - 'Geometry/TrackerCommonData/data/tecring4.xml', - 'Geometry/TrackerCommonData/data/tecring5.xml', - 'Geometry/TrackerCommonData/data/tecring6.xml', - 'Geometry/TrackerCommonData/data/tecring0f.xml', - 'Geometry/TrackerCommonData/data/tecring1f.xml', - 'Geometry/TrackerCommonData/data/tecring2f.xml', - 'Geometry/TrackerCommonData/data/tecring3f.xml', - 'Geometry/TrackerCommonData/data/tecring4f.xml', - 'Geometry/TrackerCommonData/data/tecring5f.xml', - 'Geometry/TrackerCommonData/data/tecring6f.xml', - 'Geometry/TrackerCommonData/data/tecring0b.xml', - 'Geometry/TrackerCommonData/data/tecring1b.xml', - 'Geometry/TrackerCommonData/data/tecring2b.xml', - 'Geometry/TrackerCommonData/data/tecring3b.xml', - 'Geometry/TrackerCommonData/data/tecring4b.xml', - 'Geometry/TrackerCommonData/data/tecring5b.xml', - 'Geometry/TrackerCommonData/data/tecring6b.xml', - 'Geometry/TrackerCommonData/data/tecpetalf.xml', - 'Geometry/TrackerCommonData/data/tecpetalb.xml', - 'Geometry/TrackerCommonData/data/tecpetal0.xml', - 'Geometry/TrackerCommonData/data/tecpetal0f.xml', - 'Geometry/TrackerCommonData/data/tecpetal0b.xml', - 'Geometry/TrackerCommonData/data/tecpetal3.xml', - 'Geometry/TrackerCommonData/data/tecpetal3f.xml', - 'Geometry/TrackerCommonData/data/tecpetal3b.xml', - 'Geometry/TrackerCommonData/data/tecpetal6f.xml', - 'Geometry/TrackerCommonData/data/tecpetal6b.xml', - 'Geometry/TrackerCommonData/data/tecpetal8f.xml', - 'Geometry/TrackerCommonData/data/tecpetal8b.xml', - 'Geometry/TrackerCommonData/data/tecwheel.xml', - 'Geometry/TrackerCommonData/data/tecwheela.xml', - 'Geometry/TrackerCommonData/data/tecwheelb.xml', - 'Geometry/TrackerCommonData/data/tecwheelc.xml', - 'Geometry/TrackerCommonData/data/tecwheeld.xml', - 'Geometry/TrackerCommonData/data/tecwheel6.xml', - 'Geometry/TrackerCommonData/data/tecservices.xml', - 'Geometry/TrackerCommonData/data/tecbackplate.xml', - 'Geometry/TrackerCommonData/data/tec.xml', - 'Geometry/TrackerCommonData/data/Run2/tracker.xml', - 'Geometry/TrackerCommonData/data/trackerpixbar.xml', - 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', - 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', - 'Geometry/TrackerCommonData/data/trackertib.xml', - 'Geometry/TrackerCommonData/data/trackertid.xml', - 'Geometry/TrackerCommonData/data/trackertob.xml', - 'Geometry/TrackerCommonData/data/trackertec.xml', - 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', - 'Geometry/TrackerCommonData/data/trackerother.xml', - 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', - 'Geometry/EcalCommonData/data/ebalgo.xml', - 'Geometry/EcalCommonData/data/ebcon.xml', - 'Geometry/EcalCommonData/data/ebrot.xml', - 'Geometry/EcalCommonData/data/eecon.xml', - 'Geometry/EcalCommonData/data/eefixed.xml', - 'Geometry/EcalCommonData/data/eehier.xml', - 'Geometry/EcalCommonData/data/eealgo.xml', - 'Geometry/EcalCommonData/data/escon.xml', - 'Geometry/EcalCommonData/data/esalgo.xml', - 'Geometry/EcalCommonData/data/eeF.xml', - 'Geometry/EcalCommonData/data/eeB.xml', - 'Geometry/EcalCommonData/data/ectkcable.xml', - 'Geometry/HcalCommonData/data/hcalrotations.xml', - 'Geometry/HcalCommonData/data/hcal/PhaseI/hcalalgo.xml', - 'Geometry/HcalCommonData/data/hcalcablealgo.xml', - 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', - 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', - 'Geometry/HcalCommonData/data/hcalouteralgo.xml', - 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', - 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', - 'Geometry/HcalCommonData/data/hcalSimNumbering/2017Plan0/hcalSimNumbering.xml', - 'Geometry/HcalCommonData/data/hcalRecNumbering/2017/hcalRecNumbering.xml', - 'Geometry/MuonCommonData/data/mbCommon/2017/v1/mbCommon.xml', - 'Geometry/MuonCommonData/data/mb1/2015/v1/mb1.xml', - 'Geometry/MuonCommonData/data/mb2/2015/v1/mb2.xml', - 'Geometry/MuonCommonData/data/mb3/2015/v1/mb3.xml', - 'Geometry/MuonCommonData/data/mb4/2015/v1/mb4.xml', - 'Geometry/MuonCommonData/data/muonYoke/2015/v1/muonYoke.xml', - 'Geometry/MuonCommonData/data/mf/2017/v1/mf.xml', - 'Geometry/MuonCommonData/data/rpcf/2015/v1/rpcf.xml', - 'Geometry/MuonCommonData/data/csc/2015/v1/csc.xml', - 'Geometry/MuonCommonData/data/mfshield/2017/v1/mfshield.xml', - 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', - 'Geometry/MuonCommonData/data/gem11/2017/v2/gem11.xml', - 'Geometry/ForwardCommonData/data/forward.xml', - 'Geometry/ForwardCommonData/data/forwardshield/2015/v1/forwardshield.xml', - 'Geometry/ForwardCommonData/data/brmrotations.xml', - 'Geometry/ForwardCommonData/data/brm.xml', - 'Geometry/ForwardCommonData/data/Run2/totemMaterials.xml', - 'Geometry/ForwardCommonData/data/totemRotations.xml', - 'Geometry/ForwardCommonData/data/Run2/totemt1.xml', - 'Geometry/ForwardCommonData/data/Run2/totemt2.xml', - 'Geometry/ForwardCommonData/data/ionpump.xml', - 'Geometry/ForwardCommonData/data/Run2/castor.xml', - 'Geometry/ForwardCommonData/data/zdcmaterials.xml', - 'Geometry/ForwardCommonData/data/lumimaterials.xml', - 'Geometry/ForwardCommonData/data/zdcrotations.xml', - 'Geometry/ForwardCommonData/data/lumirotations.xml', - 'Geometry/ForwardCommonData/data/zdc.xml', - 'Geometry/ForwardCommonData/data/zdclumi.xml', - 'Geometry/ForwardCommonData/data/cmszdc.xml')+cms.vstring( - 'Geometry/MuonCommonData/data/muonNumbering/2017/v1/muonNumbering.xml', - 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', - 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', - 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', - 'Geometry/EcalSimData/data/ecalsens.xml', - 'Geometry/HcalCommonData/data/hcalsenspmf.xml', - 'Geometry/HcalSimData/data/hf.xml', - 'Geometry/HcalSimData/data/hfpmt.xml', - 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', - 'Geometry/MuonSimData/data/v2/muonSens.xml', - 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', - 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', - 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', - 'Geometry/RPCGeometryBuilder/data/RPCSpecs.xml', - 'Geometry/GEMGeometryBuilder/data/GEMSpecsFilter17.xml', - 'Geometry/GEMGeometryBuilder/data/v4/GEMSpecs.xml', - 'Geometry/ForwardCommonData/data/brmsens.xml', - 'Geometry/ForwardSimData/data/castorsens.xml', - 'Geometry/ForwardSimData/data/zdcsens.xml', - 'Geometry/HcalSimData/data/HcalProdCuts.xml', - 'Geometry/EcalSimData/data/EcalProdCuts.xml', - 'Geometry/EcalSimData/data/ESProdCuts.xml', - 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', - 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', - 'Geometry/MuonSimData/data/muonProdCuts.xml', - 'Geometry/ForwardSimData/data/CastorProdCuts.xml', - 'Geometry/ForwardSimData/data/zdcProdCuts.xml', - 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', - 'Geometry/CMSCommonData/data/FieldParameters.xml'), - rootNodeName = cms.string('cms:OCMS') -) - - diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2017Plan1FlatMinus05PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2017Plan1FlatMinus05PercentXML_cfi.py new file mode 100644 index 0000000000000..15d6910c005ba --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2017Plan1FlatMinus05PercentXML_cfi.py @@ -0,0 +1,290 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2017/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/cmsextent.xml', + 'Geometry/CMSCommonData/data/cms/2017/v1/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2017/v1/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2017/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2017/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbar.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', + 'Geometry/TrackerCommonData/data/tibmodpar.xml', + 'Geometry/TrackerCommonData/data/tibmodule0.xml', + 'Geometry/TrackerCommonData/data/tibmodule0a.xml', + 'Geometry/TrackerCommonData/data/tibmodule0b.xml', + 'Geometry/TrackerCommonData/data/tibmodule2.xml', + 'Geometry/TrackerCommonData/data/tibstringpar.xml', + 'Geometry/TrackerCommonData/data/tibstring0ll.xml', + 'Geometry/TrackerCommonData/data/tibstring0lr.xml', + 'Geometry/TrackerCommonData/data/tibstring0ul.xml', + 'Geometry/TrackerCommonData/data/tibstring0ur.xml', + 'Geometry/TrackerCommonData/data/tibstring0.xml', + 'Geometry/TrackerCommonData/data/tibstring1ll.xml', + 'Geometry/TrackerCommonData/data/tibstring1lr.xml', + 'Geometry/TrackerCommonData/data/tibstring1ul.xml', + 'Geometry/TrackerCommonData/data/tibstring1ur.xml', + 'Geometry/TrackerCommonData/data/tibstring1.xml', + 'Geometry/TrackerCommonData/data/tibstring2ll.xml', + 'Geometry/TrackerCommonData/data/tibstring2lr.xml', + 'Geometry/TrackerCommonData/data/tibstring2ul.xml', + 'Geometry/TrackerCommonData/data/tibstring2ur.xml', + 'Geometry/TrackerCommonData/data/tibstring2.xml', + 'Geometry/TrackerCommonData/data/tibstring3ll.xml', + 'Geometry/TrackerCommonData/data/tibstring3lr.xml', + 'Geometry/TrackerCommonData/data/tibstring3ul.xml', + 'Geometry/TrackerCommonData/data/tibstring3ur.xml', + 'Geometry/TrackerCommonData/data/tibstring3.xml', + 'Geometry/TrackerCommonData/data/tiblayerpar.xml', + 'Geometry/TrackerCommonData/data/tiblayer0.xml', + 'Geometry/TrackerCommonData/data/tiblayer1.xml', + 'Geometry/TrackerCommonData/data/tiblayer2.xml', + 'Geometry/TrackerCommonData/data/tiblayer3.xml', + 'Geometry/TrackerCommonData/data/tib.xml', + 'Geometry/TrackerCommonData/data/tidmodpar.xml', + 'Geometry/TrackerCommonData/data/tidmodule0.xml', + 'Geometry/TrackerCommonData/data/tidmodule0r.xml', + 'Geometry/TrackerCommonData/data/tidmodule0l.xml', + 'Geometry/TrackerCommonData/data/tidmodule1.xml', + 'Geometry/TrackerCommonData/data/tidmodule1r.xml', + 'Geometry/TrackerCommonData/data/tidmodule1l.xml', + 'Geometry/TrackerCommonData/data/tidmodule2.xml', + 'Geometry/TrackerCommonData/data/tidringpar.xml', + 'Geometry/TrackerCommonData/data/tidring0.xml', + 'Geometry/TrackerCommonData/data/tidring0f.xml', + 'Geometry/TrackerCommonData/data/tidring0b.xml', + 'Geometry/TrackerCommonData/data/tidring1.xml', + 'Geometry/TrackerCommonData/data/tidring1f.xml', + 'Geometry/TrackerCommonData/data/tidring1b.xml', + 'Geometry/TrackerCommonData/data/tidring2.xml', + 'Geometry/TrackerCommonData/data/tid.xml', + 'Geometry/TrackerCommonData/data/tidf.xml', + 'Geometry/TrackerCommonData/data/tidb.xml', + 'Geometry/TrackerCommonData/data/tibtidservices.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', + 'Geometry/TrackerCommonData/data/tobmodpar.xml', + 'Geometry/TrackerCommonData/data/tobmodule0.xml', + 'Geometry/TrackerCommonData/data/tobmodule2.xml', + 'Geometry/TrackerCommonData/data/tobmodule4.xml', + 'Geometry/TrackerCommonData/data/tobrodpar.xml', + 'Geometry/TrackerCommonData/data/tobrod0c.xml', + 'Geometry/TrackerCommonData/data/tobrod0l.xml', + 'Geometry/TrackerCommonData/data/tobrod0h.xml', + 'Geometry/TrackerCommonData/data/tobrod0.xml', + 'Geometry/TrackerCommonData/data/tobrod1l.xml', + 'Geometry/TrackerCommonData/data/tobrod1h.xml', + 'Geometry/TrackerCommonData/data/tobrod1.xml', + 'Geometry/TrackerCommonData/data/tobrod2c.xml', + 'Geometry/TrackerCommonData/data/tobrod2l.xml', + 'Geometry/TrackerCommonData/data/tobrod2h.xml', + 'Geometry/TrackerCommonData/data/tobrod2.xml', + 'Geometry/TrackerCommonData/data/tobrod3l.xml', + 'Geometry/TrackerCommonData/data/tobrod3h.xml', + 'Geometry/TrackerCommonData/data/tobrod3.xml', + 'Geometry/TrackerCommonData/data/tobrod4c.xml', + 'Geometry/TrackerCommonData/data/tobrod4l.xml', + 'Geometry/TrackerCommonData/data/tobrod4h.xml', + 'Geometry/TrackerCommonData/data/tobrod4.xml', + 'Geometry/TrackerCommonData/data/tobrod5l.xml', + 'Geometry/TrackerCommonData/data/tobrod5h.xml', + 'Geometry/TrackerCommonData/data/tobrod5.xml', + 'Geometry/TrackerCommonData/data/v2/tob.xml', + 'Geometry/TrackerCommonData/data/tecmodpar.xml', + 'Geometry/TrackerCommonData/data/tecmodule0.xml', + 'Geometry/TrackerCommonData/data/tecmodule0r.xml', + 'Geometry/TrackerCommonData/data/tecmodule0s.xml', + 'Geometry/TrackerCommonData/data/tecmodule1.xml', + 'Geometry/TrackerCommonData/data/tecmodule1r.xml', + 'Geometry/TrackerCommonData/data/tecmodule1s.xml', + 'Geometry/TrackerCommonData/data/tecmodule2.xml', + 'Geometry/TrackerCommonData/data/tecmodule3.xml', + 'Geometry/TrackerCommonData/data/tecmodule4.xml', + 'Geometry/TrackerCommonData/data/tecmodule4r.xml', + 'Geometry/TrackerCommonData/data/tecmodule4s.xml', + 'Geometry/TrackerCommonData/data/tecmodule5.xml', + 'Geometry/TrackerCommonData/data/tecmodule6.xml', + 'Geometry/TrackerCommonData/data/tecpetpar.xml', + 'Geometry/TrackerCommonData/data/tecring0.xml', + 'Geometry/TrackerCommonData/data/tecring1.xml', + 'Geometry/TrackerCommonData/data/tecring2.xml', + 'Geometry/TrackerCommonData/data/tecring3.xml', + 'Geometry/TrackerCommonData/data/tecring4.xml', + 'Geometry/TrackerCommonData/data/tecring5.xml', + 'Geometry/TrackerCommonData/data/tecring6.xml', + 'Geometry/TrackerCommonData/data/tecring0f.xml', + 'Geometry/TrackerCommonData/data/tecring1f.xml', + 'Geometry/TrackerCommonData/data/tecring2f.xml', + 'Geometry/TrackerCommonData/data/tecring3f.xml', + 'Geometry/TrackerCommonData/data/tecring4f.xml', + 'Geometry/TrackerCommonData/data/tecring5f.xml', + 'Geometry/TrackerCommonData/data/tecring6f.xml', + 'Geometry/TrackerCommonData/data/tecring0b.xml', + 'Geometry/TrackerCommonData/data/tecring1b.xml', + 'Geometry/TrackerCommonData/data/tecring2b.xml', + 'Geometry/TrackerCommonData/data/tecring3b.xml', + 'Geometry/TrackerCommonData/data/tecring4b.xml', + 'Geometry/TrackerCommonData/data/tecring5b.xml', + 'Geometry/TrackerCommonData/data/tecring6b.xml', + 'Geometry/TrackerCommonData/data/tecpetalf.xml', + 'Geometry/TrackerCommonData/data/tecpetalb.xml', + 'Geometry/TrackerCommonData/data/tecpetal0.xml', + 'Geometry/TrackerCommonData/data/tecpetal0f.xml', + 'Geometry/TrackerCommonData/data/tecpetal0b.xml', + 'Geometry/TrackerCommonData/data/tecpetal3.xml', + 'Geometry/TrackerCommonData/data/tecpetal3f.xml', + 'Geometry/TrackerCommonData/data/tecpetal3b.xml', + 'Geometry/TrackerCommonData/data/tecpetal6f.xml', + 'Geometry/TrackerCommonData/data/tecpetal6b.xml', + 'Geometry/TrackerCommonData/data/tecpetal8f.xml', + 'Geometry/TrackerCommonData/data/tecpetal8b.xml', + 'Geometry/TrackerCommonData/data/tecwheel.xml', + 'Geometry/TrackerCommonData/data/tecwheela.xml', + 'Geometry/TrackerCommonData/data/tecwheelb.xml', + 'Geometry/TrackerCommonData/data/tecwheelc.xml', + 'Geometry/TrackerCommonData/data/tecwheeld.xml', + 'Geometry/TrackerCommonData/data/tecwheel6.xml', + 'Geometry/TrackerCommonData/data/tecservices.xml', + 'Geometry/TrackerCommonData/data/tecbackplate.xml', + 'Geometry/TrackerCommonData/data/tec.xml', + 'Geometry/TrackerCommonData/data/Run2/tracker.xml', + 'Geometry/TrackerCommonData/data/trackerpixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', + 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', + 'Geometry/TrackerCommonData/data/trackertib.xml', + 'Geometry/TrackerCommonData/data/trackertid.xml', + 'Geometry/TrackerCommonData/data/trackertob.xml', + 'Geometry/TrackerCommonData/data/trackertec.xml', + 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', + 'Geometry/TrackerCommonData/data/trackerother.xml', + 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/EcalCommonData/data/eecon.xml', + 'Geometry/EcalCommonData/data/eefixed.xml', + 'Geometry/EcalCommonData/data/eehier.xml', + 'Geometry/EcalCommonData/data/eealgo.xml', + 'Geometry/EcalCommonData/data/escon.xml', + 'Geometry/EcalCommonData/data/esalgo.xml', + 'Geometry/EcalCommonData/data/eeF.xml', + 'Geometry/EcalCommonData/data/eeB.xml', + 'Geometry/EcalCommonData/data/ectkcable.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/hcal/PhaseI/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/2017Plan1/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/2017/hcalRecNumbering.xml', + 'Geometry/MuonCommonData/data/mbCommon/2017/v1/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2015/v1/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2015/v1/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2015/v1/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v1/mb4.xml', + 'Geometry/MuonCommonData/data/muonYoke/2015/v1/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2017/v1/mf.xml', + 'Geometry/MuonCommonData/data/rpcf/2015/v1/rpcf.xml', + 'Geometry/MuonCommonData/data/csc/2015/v1/csc.xml', + 'Geometry/MuonCommonData/data/mfshield/2017/v1/mfshield.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/2017/v2/gem11.xml', + 'Geometry/ForwardCommonData/data/forward.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2015/v1/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm.xml', + 'Geometry/ForwardCommonData/data/Run2/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/ForwardCommonData/data/Run2/totemt1.xml', + 'Geometry/ForwardCommonData/data/Run2/totemt2.xml', + 'Geometry/ForwardCommonData/data/ionpump.xml', + 'Geometry/ForwardCommonData/data/Run2/castor.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml')+cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/2017/v1/muonNumbering.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', + 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', + 'Geometry/EcalSimData/data/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/MuonSimData/data/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/GEMSpecsFilter17.xml', + 'Geometry/GEMGeometryBuilder/data/v4/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/castorsens.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/EcalSimData/data/ESProdCuts.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/MuonSimData/data/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/CastorProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml'), + rootNodeName = cms.string('cms:OCMS') +) + + diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2017Plan1FlatMinus10PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2017Plan1FlatMinus10PercentXML_cfi.py new file mode 100644 index 0000000000000..fc26d3559f157 --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2017Plan1FlatMinus10PercentXML_cfi.py @@ -0,0 +1,290 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2017/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/cmsextent.xml', + 'Geometry/CMSCommonData/data/cms/2017/v1/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2017/v1/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2017/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2017/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbar.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', + 'Geometry/TrackerCommonData/data/tibmodpar.xml', + 'Geometry/TrackerCommonData/data/tibmodule0.xml', + 'Geometry/TrackerCommonData/data/tibmodule0a.xml', + 'Geometry/TrackerCommonData/data/tibmodule0b.xml', + 'Geometry/TrackerCommonData/data/tibmodule2.xml', + 'Geometry/TrackerCommonData/data/tibstringpar.xml', + 'Geometry/TrackerCommonData/data/tibstring0ll.xml', + 'Geometry/TrackerCommonData/data/tibstring0lr.xml', + 'Geometry/TrackerCommonData/data/tibstring0ul.xml', + 'Geometry/TrackerCommonData/data/tibstring0ur.xml', + 'Geometry/TrackerCommonData/data/tibstring0.xml', + 'Geometry/TrackerCommonData/data/tibstring1ll.xml', + 'Geometry/TrackerCommonData/data/tibstring1lr.xml', + 'Geometry/TrackerCommonData/data/tibstring1ul.xml', + 'Geometry/TrackerCommonData/data/tibstring1ur.xml', + 'Geometry/TrackerCommonData/data/tibstring1.xml', + 'Geometry/TrackerCommonData/data/tibstring2ll.xml', + 'Geometry/TrackerCommonData/data/tibstring2lr.xml', + 'Geometry/TrackerCommonData/data/tibstring2ul.xml', + 'Geometry/TrackerCommonData/data/tibstring2ur.xml', + 'Geometry/TrackerCommonData/data/tibstring2.xml', + 'Geometry/TrackerCommonData/data/tibstring3ll.xml', + 'Geometry/TrackerCommonData/data/tibstring3lr.xml', + 'Geometry/TrackerCommonData/data/tibstring3ul.xml', + 'Geometry/TrackerCommonData/data/tibstring3ur.xml', + 'Geometry/TrackerCommonData/data/tibstring3.xml', + 'Geometry/TrackerCommonData/data/tiblayerpar.xml', + 'Geometry/TrackerCommonData/data/tiblayer0.xml', + 'Geometry/TrackerCommonData/data/tiblayer1.xml', + 'Geometry/TrackerCommonData/data/tiblayer2.xml', + 'Geometry/TrackerCommonData/data/tiblayer3.xml', + 'Geometry/TrackerCommonData/data/tib.xml', + 'Geometry/TrackerCommonData/data/tidmodpar.xml', + 'Geometry/TrackerCommonData/data/tidmodule0.xml', + 'Geometry/TrackerCommonData/data/tidmodule0r.xml', + 'Geometry/TrackerCommonData/data/tidmodule0l.xml', + 'Geometry/TrackerCommonData/data/tidmodule1.xml', + 'Geometry/TrackerCommonData/data/tidmodule1r.xml', + 'Geometry/TrackerCommonData/data/tidmodule1l.xml', + 'Geometry/TrackerCommonData/data/tidmodule2.xml', + 'Geometry/TrackerCommonData/data/tidringpar.xml', + 'Geometry/TrackerCommonData/data/tidring0.xml', + 'Geometry/TrackerCommonData/data/tidring0f.xml', + 'Geometry/TrackerCommonData/data/tidring0b.xml', + 'Geometry/TrackerCommonData/data/tidring1.xml', + 'Geometry/TrackerCommonData/data/tidring1f.xml', + 'Geometry/TrackerCommonData/data/tidring1b.xml', + 'Geometry/TrackerCommonData/data/tidring2.xml', + 'Geometry/TrackerCommonData/data/tid.xml', + 'Geometry/TrackerCommonData/data/tidf.xml', + 'Geometry/TrackerCommonData/data/tidb.xml', + 'Geometry/TrackerCommonData/data/tibtidservices.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', + 'Geometry/TrackerCommonData/data/tobmodpar.xml', + 'Geometry/TrackerCommonData/data/tobmodule0.xml', + 'Geometry/TrackerCommonData/data/tobmodule2.xml', + 'Geometry/TrackerCommonData/data/tobmodule4.xml', + 'Geometry/TrackerCommonData/data/tobrodpar.xml', + 'Geometry/TrackerCommonData/data/tobrod0c.xml', + 'Geometry/TrackerCommonData/data/tobrod0l.xml', + 'Geometry/TrackerCommonData/data/tobrod0h.xml', + 'Geometry/TrackerCommonData/data/tobrod0.xml', + 'Geometry/TrackerCommonData/data/tobrod1l.xml', + 'Geometry/TrackerCommonData/data/tobrod1h.xml', + 'Geometry/TrackerCommonData/data/tobrod1.xml', + 'Geometry/TrackerCommonData/data/tobrod2c.xml', + 'Geometry/TrackerCommonData/data/tobrod2l.xml', + 'Geometry/TrackerCommonData/data/tobrod2h.xml', + 'Geometry/TrackerCommonData/data/tobrod2.xml', + 'Geometry/TrackerCommonData/data/tobrod3l.xml', + 'Geometry/TrackerCommonData/data/tobrod3h.xml', + 'Geometry/TrackerCommonData/data/tobrod3.xml', + 'Geometry/TrackerCommonData/data/tobrod4c.xml', + 'Geometry/TrackerCommonData/data/tobrod4l.xml', + 'Geometry/TrackerCommonData/data/tobrod4h.xml', + 'Geometry/TrackerCommonData/data/tobrod4.xml', + 'Geometry/TrackerCommonData/data/tobrod5l.xml', + 'Geometry/TrackerCommonData/data/tobrod5h.xml', + 'Geometry/TrackerCommonData/data/tobrod5.xml', + 'Geometry/TrackerCommonData/data/v2/tob.xml', + 'Geometry/TrackerCommonData/data/tecmodpar.xml', + 'Geometry/TrackerCommonData/data/tecmodule0.xml', + 'Geometry/TrackerCommonData/data/tecmodule0r.xml', + 'Geometry/TrackerCommonData/data/tecmodule0s.xml', + 'Geometry/TrackerCommonData/data/tecmodule1.xml', + 'Geometry/TrackerCommonData/data/tecmodule1r.xml', + 'Geometry/TrackerCommonData/data/tecmodule1s.xml', + 'Geometry/TrackerCommonData/data/tecmodule2.xml', + 'Geometry/TrackerCommonData/data/tecmodule3.xml', + 'Geometry/TrackerCommonData/data/tecmodule4.xml', + 'Geometry/TrackerCommonData/data/tecmodule4r.xml', + 'Geometry/TrackerCommonData/data/tecmodule4s.xml', + 'Geometry/TrackerCommonData/data/tecmodule5.xml', + 'Geometry/TrackerCommonData/data/tecmodule6.xml', + 'Geometry/TrackerCommonData/data/tecpetpar.xml', + 'Geometry/TrackerCommonData/data/tecring0.xml', + 'Geometry/TrackerCommonData/data/tecring1.xml', + 'Geometry/TrackerCommonData/data/tecring2.xml', + 'Geometry/TrackerCommonData/data/tecring3.xml', + 'Geometry/TrackerCommonData/data/tecring4.xml', + 'Geometry/TrackerCommonData/data/tecring5.xml', + 'Geometry/TrackerCommonData/data/tecring6.xml', + 'Geometry/TrackerCommonData/data/tecring0f.xml', + 'Geometry/TrackerCommonData/data/tecring1f.xml', + 'Geometry/TrackerCommonData/data/tecring2f.xml', + 'Geometry/TrackerCommonData/data/tecring3f.xml', + 'Geometry/TrackerCommonData/data/tecring4f.xml', + 'Geometry/TrackerCommonData/data/tecring5f.xml', + 'Geometry/TrackerCommonData/data/tecring6f.xml', + 'Geometry/TrackerCommonData/data/tecring0b.xml', + 'Geometry/TrackerCommonData/data/tecring1b.xml', + 'Geometry/TrackerCommonData/data/tecring2b.xml', + 'Geometry/TrackerCommonData/data/tecring3b.xml', + 'Geometry/TrackerCommonData/data/tecring4b.xml', + 'Geometry/TrackerCommonData/data/tecring5b.xml', + 'Geometry/TrackerCommonData/data/tecring6b.xml', + 'Geometry/TrackerCommonData/data/tecpetalf.xml', + 'Geometry/TrackerCommonData/data/tecpetalb.xml', + 'Geometry/TrackerCommonData/data/tecpetal0.xml', + 'Geometry/TrackerCommonData/data/tecpetal0f.xml', + 'Geometry/TrackerCommonData/data/tecpetal0b.xml', + 'Geometry/TrackerCommonData/data/tecpetal3.xml', + 'Geometry/TrackerCommonData/data/tecpetal3f.xml', + 'Geometry/TrackerCommonData/data/tecpetal3b.xml', + 'Geometry/TrackerCommonData/data/tecpetal6f.xml', + 'Geometry/TrackerCommonData/data/tecpetal6b.xml', + 'Geometry/TrackerCommonData/data/tecpetal8f.xml', + 'Geometry/TrackerCommonData/data/tecpetal8b.xml', + 'Geometry/TrackerCommonData/data/tecwheel.xml', + 'Geometry/TrackerCommonData/data/tecwheela.xml', + 'Geometry/TrackerCommonData/data/tecwheelb.xml', + 'Geometry/TrackerCommonData/data/tecwheelc.xml', + 'Geometry/TrackerCommonData/data/tecwheeld.xml', + 'Geometry/TrackerCommonData/data/tecwheel6.xml', + 'Geometry/TrackerCommonData/data/tecservices.xml', + 'Geometry/TrackerCommonData/data/tecbackplate.xml', + 'Geometry/TrackerCommonData/data/tec.xml', + 'Geometry/TrackerCommonData/data/Run2/tracker.xml', + 'Geometry/TrackerCommonData/data/trackerpixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', + 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', + 'Geometry/TrackerCommonData/data/trackertib.xml', + 'Geometry/TrackerCommonData/data/trackertid.xml', + 'Geometry/TrackerCommonData/data/trackertob.xml', + 'Geometry/TrackerCommonData/data/trackertec.xml', + 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', + 'Geometry/TrackerCommonData/data/trackerother.xml', + 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/EcalCommonData/data/eecon.xml', + 'Geometry/EcalCommonData/data/eefixed.xml', + 'Geometry/EcalCommonData/data/eehier.xml', + 'Geometry/EcalCommonData/data/eealgo.xml', + 'Geometry/EcalCommonData/data/escon.xml', + 'Geometry/EcalCommonData/data/esalgo.xml', + 'Geometry/EcalCommonData/data/eeF.xml', + 'Geometry/EcalCommonData/data/eeB.xml', + 'Geometry/EcalCommonData/data/ectkcable.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/hcal/PhaseI/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/2017Plan1/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/2017/hcalRecNumbering.xml', + 'Geometry/MuonCommonData/data/mbCommon/2017/v1/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2015/v1/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2015/v1/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2015/v1/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v1/mb4.xml', + 'Geometry/MuonCommonData/data/muonYoke/2015/v1/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2017/v1/mf.xml', + 'Geometry/MuonCommonData/data/rpcf/2015/v1/rpcf.xml', + 'Geometry/MuonCommonData/data/csc/2015/v1/csc.xml', + 'Geometry/MuonCommonData/data/mfshield/2017/v1/mfshield.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/2017/v2/gem11.xml', + 'Geometry/ForwardCommonData/data/forward.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2015/v1/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm.xml', + 'Geometry/ForwardCommonData/data/Run2/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/ForwardCommonData/data/Run2/totemt1.xml', + 'Geometry/ForwardCommonData/data/Run2/totemt2.xml', + 'Geometry/ForwardCommonData/data/ionpump.xml', + 'Geometry/ForwardCommonData/data/Run2/castor.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml')+cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/2017/v1/muonNumbering.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', + 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', + 'Geometry/EcalSimData/data/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/MuonSimData/data/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/GEMSpecsFilter17.xml', + 'Geometry/GEMGeometryBuilder/data/v4/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/castorsens.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/EcalSimData/data/ESProdCuts.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/MuonSimData/data/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/CastorProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml'), + rootNodeName = cms.string('cms:OCMS') +) + + diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2017Plan1FlatPlus05PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2017Plan1FlatPlus05PercentXML_cfi.py new file mode 100644 index 0000000000000..92d3f5c568195 --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2017Plan1FlatPlus05PercentXML_cfi.py @@ -0,0 +1,290 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2017/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/cmsextent.xml', + 'Geometry/CMSCommonData/data/cms/2017/v1/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2017/v1/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2017/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2017/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbar.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', + 'Geometry/TrackerCommonData/data/tibmodpar.xml', + 'Geometry/TrackerCommonData/data/tibmodule0.xml', + 'Geometry/TrackerCommonData/data/tibmodule0a.xml', + 'Geometry/TrackerCommonData/data/tibmodule0b.xml', + 'Geometry/TrackerCommonData/data/tibmodule2.xml', + 'Geometry/TrackerCommonData/data/tibstringpar.xml', + 'Geometry/TrackerCommonData/data/tibstring0ll.xml', + 'Geometry/TrackerCommonData/data/tibstring0lr.xml', + 'Geometry/TrackerCommonData/data/tibstring0ul.xml', + 'Geometry/TrackerCommonData/data/tibstring0ur.xml', + 'Geometry/TrackerCommonData/data/tibstring0.xml', + 'Geometry/TrackerCommonData/data/tibstring1ll.xml', + 'Geometry/TrackerCommonData/data/tibstring1lr.xml', + 'Geometry/TrackerCommonData/data/tibstring1ul.xml', + 'Geometry/TrackerCommonData/data/tibstring1ur.xml', + 'Geometry/TrackerCommonData/data/tibstring1.xml', + 'Geometry/TrackerCommonData/data/tibstring2ll.xml', + 'Geometry/TrackerCommonData/data/tibstring2lr.xml', + 'Geometry/TrackerCommonData/data/tibstring2ul.xml', + 'Geometry/TrackerCommonData/data/tibstring2ur.xml', + 'Geometry/TrackerCommonData/data/tibstring2.xml', + 'Geometry/TrackerCommonData/data/tibstring3ll.xml', + 'Geometry/TrackerCommonData/data/tibstring3lr.xml', + 'Geometry/TrackerCommonData/data/tibstring3ul.xml', + 'Geometry/TrackerCommonData/data/tibstring3ur.xml', + 'Geometry/TrackerCommonData/data/tibstring3.xml', + 'Geometry/TrackerCommonData/data/tiblayerpar.xml', + 'Geometry/TrackerCommonData/data/tiblayer0.xml', + 'Geometry/TrackerCommonData/data/tiblayer1.xml', + 'Geometry/TrackerCommonData/data/tiblayer2.xml', + 'Geometry/TrackerCommonData/data/tiblayer3.xml', + 'Geometry/TrackerCommonData/data/tib.xml', + 'Geometry/TrackerCommonData/data/tidmodpar.xml', + 'Geometry/TrackerCommonData/data/tidmodule0.xml', + 'Geometry/TrackerCommonData/data/tidmodule0r.xml', + 'Geometry/TrackerCommonData/data/tidmodule0l.xml', + 'Geometry/TrackerCommonData/data/tidmodule1.xml', + 'Geometry/TrackerCommonData/data/tidmodule1r.xml', + 'Geometry/TrackerCommonData/data/tidmodule1l.xml', + 'Geometry/TrackerCommonData/data/tidmodule2.xml', + 'Geometry/TrackerCommonData/data/tidringpar.xml', + 'Geometry/TrackerCommonData/data/tidring0.xml', + 'Geometry/TrackerCommonData/data/tidring0f.xml', + 'Geometry/TrackerCommonData/data/tidring0b.xml', + 'Geometry/TrackerCommonData/data/tidring1.xml', + 'Geometry/TrackerCommonData/data/tidring1f.xml', + 'Geometry/TrackerCommonData/data/tidring1b.xml', + 'Geometry/TrackerCommonData/data/tidring2.xml', + 'Geometry/TrackerCommonData/data/tid.xml', + 'Geometry/TrackerCommonData/data/tidf.xml', + 'Geometry/TrackerCommonData/data/tidb.xml', + 'Geometry/TrackerCommonData/data/tibtidservices.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', + 'Geometry/TrackerCommonData/data/tobmodpar.xml', + 'Geometry/TrackerCommonData/data/tobmodule0.xml', + 'Geometry/TrackerCommonData/data/tobmodule2.xml', + 'Geometry/TrackerCommonData/data/tobmodule4.xml', + 'Geometry/TrackerCommonData/data/tobrodpar.xml', + 'Geometry/TrackerCommonData/data/tobrod0c.xml', + 'Geometry/TrackerCommonData/data/tobrod0l.xml', + 'Geometry/TrackerCommonData/data/tobrod0h.xml', + 'Geometry/TrackerCommonData/data/tobrod0.xml', + 'Geometry/TrackerCommonData/data/tobrod1l.xml', + 'Geometry/TrackerCommonData/data/tobrod1h.xml', + 'Geometry/TrackerCommonData/data/tobrod1.xml', + 'Geometry/TrackerCommonData/data/tobrod2c.xml', + 'Geometry/TrackerCommonData/data/tobrod2l.xml', + 'Geometry/TrackerCommonData/data/tobrod2h.xml', + 'Geometry/TrackerCommonData/data/tobrod2.xml', + 'Geometry/TrackerCommonData/data/tobrod3l.xml', + 'Geometry/TrackerCommonData/data/tobrod3h.xml', + 'Geometry/TrackerCommonData/data/tobrod3.xml', + 'Geometry/TrackerCommonData/data/tobrod4c.xml', + 'Geometry/TrackerCommonData/data/tobrod4l.xml', + 'Geometry/TrackerCommonData/data/tobrod4h.xml', + 'Geometry/TrackerCommonData/data/tobrod4.xml', + 'Geometry/TrackerCommonData/data/tobrod5l.xml', + 'Geometry/TrackerCommonData/data/tobrod5h.xml', + 'Geometry/TrackerCommonData/data/tobrod5.xml', + 'Geometry/TrackerCommonData/data/v2/tob.xml', + 'Geometry/TrackerCommonData/data/tecmodpar.xml', + 'Geometry/TrackerCommonData/data/tecmodule0.xml', + 'Geometry/TrackerCommonData/data/tecmodule0r.xml', + 'Geometry/TrackerCommonData/data/tecmodule0s.xml', + 'Geometry/TrackerCommonData/data/tecmodule1.xml', + 'Geometry/TrackerCommonData/data/tecmodule1r.xml', + 'Geometry/TrackerCommonData/data/tecmodule1s.xml', + 'Geometry/TrackerCommonData/data/tecmodule2.xml', + 'Geometry/TrackerCommonData/data/tecmodule3.xml', + 'Geometry/TrackerCommonData/data/tecmodule4.xml', + 'Geometry/TrackerCommonData/data/tecmodule4r.xml', + 'Geometry/TrackerCommonData/data/tecmodule4s.xml', + 'Geometry/TrackerCommonData/data/tecmodule5.xml', + 'Geometry/TrackerCommonData/data/tecmodule6.xml', + 'Geometry/TrackerCommonData/data/tecpetpar.xml', + 'Geometry/TrackerCommonData/data/tecring0.xml', + 'Geometry/TrackerCommonData/data/tecring1.xml', + 'Geometry/TrackerCommonData/data/tecring2.xml', + 'Geometry/TrackerCommonData/data/tecring3.xml', + 'Geometry/TrackerCommonData/data/tecring4.xml', + 'Geometry/TrackerCommonData/data/tecring5.xml', + 'Geometry/TrackerCommonData/data/tecring6.xml', + 'Geometry/TrackerCommonData/data/tecring0f.xml', + 'Geometry/TrackerCommonData/data/tecring1f.xml', + 'Geometry/TrackerCommonData/data/tecring2f.xml', + 'Geometry/TrackerCommonData/data/tecring3f.xml', + 'Geometry/TrackerCommonData/data/tecring4f.xml', + 'Geometry/TrackerCommonData/data/tecring5f.xml', + 'Geometry/TrackerCommonData/data/tecring6f.xml', + 'Geometry/TrackerCommonData/data/tecring0b.xml', + 'Geometry/TrackerCommonData/data/tecring1b.xml', + 'Geometry/TrackerCommonData/data/tecring2b.xml', + 'Geometry/TrackerCommonData/data/tecring3b.xml', + 'Geometry/TrackerCommonData/data/tecring4b.xml', + 'Geometry/TrackerCommonData/data/tecring5b.xml', + 'Geometry/TrackerCommonData/data/tecring6b.xml', + 'Geometry/TrackerCommonData/data/tecpetalf.xml', + 'Geometry/TrackerCommonData/data/tecpetalb.xml', + 'Geometry/TrackerCommonData/data/tecpetal0.xml', + 'Geometry/TrackerCommonData/data/tecpetal0f.xml', + 'Geometry/TrackerCommonData/data/tecpetal0b.xml', + 'Geometry/TrackerCommonData/data/tecpetal3.xml', + 'Geometry/TrackerCommonData/data/tecpetal3f.xml', + 'Geometry/TrackerCommonData/data/tecpetal3b.xml', + 'Geometry/TrackerCommonData/data/tecpetal6f.xml', + 'Geometry/TrackerCommonData/data/tecpetal6b.xml', + 'Geometry/TrackerCommonData/data/tecpetal8f.xml', + 'Geometry/TrackerCommonData/data/tecpetal8b.xml', + 'Geometry/TrackerCommonData/data/tecwheel.xml', + 'Geometry/TrackerCommonData/data/tecwheela.xml', + 'Geometry/TrackerCommonData/data/tecwheelb.xml', + 'Geometry/TrackerCommonData/data/tecwheelc.xml', + 'Geometry/TrackerCommonData/data/tecwheeld.xml', + 'Geometry/TrackerCommonData/data/tecwheel6.xml', + 'Geometry/TrackerCommonData/data/tecservices.xml', + 'Geometry/TrackerCommonData/data/tecbackplate.xml', + 'Geometry/TrackerCommonData/data/tec.xml', + 'Geometry/TrackerCommonData/data/Run2/tracker.xml', + 'Geometry/TrackerCommonData/data/trackerpixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', + 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', + 'Geometry/TrackerCommonData/data/trackertib.xml', + 'Geometry/TrackerCommonData/data/trackertid.xml', + 'Geometry/TrackerCommonData/data/trackertob.xml', + 'Geometry/TrackerCommonData/data/trackertec.xml', + 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', + 'Geometry/TrackerCommonData/data/trackerother.xml', + 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/EcalCommonData/data/eecon.xml', + 'Geometry/EcalCommonData/data/eefixed.xml', + 'Geometry/EcalCommonData/data/eehier.xml', + 'Geometry/EcalCommonData/data/eealgo.xml', + 'Geometry/EcalCommonData/data/escon.xml', + 'Geometry/EcalCommonData/data/esalgo.xml', + 'Geometry/EcalCommonData/data/eeF.xml', + 'Geometry/EcalCommonData/data/eeB.xml', + 'Geometry/EcalCommonData/data/ectkcable.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/hcal/PhaseI/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/2017Plan1/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/2017/hcalRecNumbering.xml', + 'Geometry/MuonCommonData/data/mbCommon/2017/v1/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2015/v1/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2015/v1/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2015/v1/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v1/mb4.xml', + 'Geometry/MuonCommonData/data/muonYoke/2015/v1/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2017/v1/mf.xml', + 'Geometry/MuonCommonData/data/rpcf/2015/v1/rpcf.xml', + 'Geometry/MuonCommonData/data/csc/2015/v1/csc.xml', + 'Geometry/MuonCommonData/data/mfshield/2017/v1/mfshield.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/2017/v2/gem11.xml', + 'Geometry/ForwardCommonData/data/forward.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2015/v1/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm.xml', + 'Geometry/ForwardCommonData/data/Run2/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/ForwardCommonData/data/Run2/totemt1.xml', + 'Geometry/ForwardCommonData/data/Run2/totemt2.xml', + 'Geometry/ForwardCommonData/data/ionpump.xml', + 'Geometry/ForwardCommonData/data/Run2/castor.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml')+cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/2017/v1/muonNumbering.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', + 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', + 'Geometry/EcalSimData/data/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/MuonSimData/data/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/GEMSpecsFilter17.xml', + 'Geometry/GEMGeometryBuilder/data/v4/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/castorsens.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/EcalSimData/data/ESProdCuts.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/MuonSimData/data/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/CastorProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml'), + rootNodeName = cms.string('cms:OCMS') +) + + diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2017Plan1FlatPlus10PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2017Plan1FlatPlus10PercentXML_cfi.py new file mode 100644 index 0000000000000..d38eabd6ad835 --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2017Plan1FlatPlus10PercentXML_cfi.py @@ -0,0 +1,290 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2017/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/cmsextent.xml', + 'Geometry/CMSCommonData/data/cms/2017/v1/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2017/v1/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2017/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2017/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v0/pixbar.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', + 'Geometry/TrackerCommonData/data/tibmodpar.xml', + 'Geometry/TrackerCommonData/data/tibmodule0.xml', + 'Geometry/TrackerCommonData/data/tibmodule0a.xml', + 'Geometry/TrackerCommonData/data/tibmodule0b.xml', + 'Geometry/TrackerCommonData/data/tibmodule2.xml', + 'Geometry/TrackerCommonData/data/tibstringpar.xml', + 'Geometry/TrackerCommonData/data/tibstring0ll.xml', + 'Geometry/TrackerCommonData/data/tibstring0lr.xml', + 'Geometry/TrackerCommonData/data/tibstring0ul.xml', + 'Geometry/TrackerCommonData/data/tibstring0ur.xml', + 'Geometry/TrackerCommonData/data/tibstring0.xml', + 'Geometry/TrackerCommonData/data/tibstring1ll.xml', + 'Geometry/TrackerCommonData/data/tibstring1lr.xml', + 'Geometry/TrackerCommonData/data/tibstring1ul.xml', + 'Geometry/TrackerCommonData/data/tibstring1ur.xml', + 'Geometry/TrackerCommonData/data/tibstring1.xml', + 'Geometry/TrackerCommonData/data/tibstring2ll.xml', + 'Geometry/TrackerCommonData/data/tibstring2lr.xml', + 'Geometry/TrackerCommonData/data/tibstring2ul.xml', + 'Geometry/TrackerCommonData/data/tibstring2ur.xml', + 'Geometry/TrackerCommonData/data/tibstring2.xml', + 'Geometry/TrackerCommonData/data/tibstring3ll.xml', + 'Geometry/TrackerCommonData/data/tibstring3lr.xml', + 'Geometry/TrackerCommonData/data/tibstring3ul.xml', + 'Geometry/TrackerCommonData/data/tibstring3ur.xml', + 'Geometry/TrackerCommonData/data/tibstring3.xml', + 'Geometry/TrackerCommonData/data/tiblayerpar.xml', + 'Geometry/TrackerCommonData/data/tiblayer0.xml', + 'Geometry/TrackerCommonData/data/tiblayer1.xml', + 'Geometry/TrackerCommonData/data/tiblayer2.xml', + 'Geometry/TrackerCommonData/data/tiblayer3.xml', + 'Geometry/TrackerCommonData/data/tib.xml', + 'Geometry/TrackerCommonData/data/tidmodpar.xml', + 'Geometry/TrackerCommonData/data/tidmodule0.xml', + 'Geometry/TrackerCommonData/data/tidmodule0r.xml', + 'Geometry/TrackerCommonData/data/tidmodule0l.xml', + 'Geometry/TrackerCommonData/data/tidmodule1.xml', + 'Geometry/TrackerCommonData/data/tidmodule1r.xml', + 'Geometry/TrackerCommonData/data/tidmodule1l.xml', + 'Geometry/TrackerCommonData/data/tidmodule2.xml', + 'Geometry/TrackerCommonData/data/tidringpar.xml', + 'Geometry/TrackerCommonData/data/tidring0.xml', + 'Geometry/TrackerCommonData/data/tidring0f.xml', + 'Geometry/TrackerCommonData/data/tidring0b.xml', + 'Geometry/TrackerCommonData/data/tidring1.xml', + 'Geometry/TrackerCommonData/data/tidring1f.xml', + 'Geometry/TrackerCommonData/data/tidring1b.xml', + 'Geometry/TrackerCommonData/data/tidring2.xml', + 'Geometry/TrackerCommonData/data/tid.xml', + 'Geometry/TrackerCommonData/data/tidf.xml', + 'Geometry/TrackerCommonData/data/tidb.xml', + 'Geometry/TrackerCommonData/data/tibtidservices.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', + 'Geometry/TrackerCommonData/data/tobmodpar.xml', + 'Geometry/TrackerCommonData/data/tobmodule0.xml', + 'Geometry/TrackerCommonData/data/tobmodule2.xml', + 'Geometry/TrackerCommonData/data/tobmodule4.xml', + 'Geometry/TrackerCommonData/data/tobrodpar.xml', + 'Geometry/TrackerCommonData/data/tobrod0c.xml', + 'Geometry/TrackerCommonData/data/tobrod0l.xml', + 'Geometry/TrackerCommonData/data/tobrod0h.xml', + 'Geometry/TrackerCommonData/data/tobrod0.xml', + 'Geometry/TrackerCommonData/data/tobrod1l.xml', + 'Geometry/TrackerCommonData/data/tobrod1h.xml', + 'Geometry/TrackerCommonData/data/tobrod1.xml', + 'Geometry/TrackerCommonData/data/tobrod2c.xml', + 'Geometry/TrackerCommonData/data/tobrod2l.xml', + 'Geometry/TrackerCommonData/data/tobrod2h.xml', + 'Geometry/TrackerCommonData/data/tobrod2.xml', + 'Geometry/TrackerCommonData/data/tobrod3l.xml', + 'Geometry/TrackerCommonData/data/tobrod3h.xml', + 'Geometry/TrackerCommonData/data/tobrod3.xml', + 'Geometry/TrackerCommonData/data/tobrod4c.xml', + 'Geometry/TrackerCommonData/data/tobrod4l.xml', + 'Geometry/TrackerCommonData/data/tobrod4h.xml', + 'Geometry/TrackerCommonData/data/tobrod4.xml', + 'Geometry/TrackerCommonData/data/tobrod5l.xml', + 'Geometry/TrackerCommonData/data/tobrod5h.xml', + 'Geometry/TrackerCommonData/data/tobrod5.xml', + 'Geometry/TrackerCommonData/data/v2/tob.xml', + 'Geometry/TrackerCommonData/data/tecmodpar.xml', + 'Geometry/TrackerCommonData/data/tecmodule0.xml', + 'Geometry/TrackerCommonData/data/tecmodule0r.xml', + 'Geometry/TrackerCommonData/data/tecmodule0s.xml', + 'Geometry/TrackerCommonData/data/tecmodule1.xml', + 'Geometry/TrackerCommonData/data/tecmodule1r.xml', + 'Geometry/TrackerCommonData/data/tecmodule1s.xml', + 'Geometry/TrackerCommonData/data/tecmodule2.xml', + 'Geometry/TrackerCommonData/data/tecmodule3.xml', + 'Geometry/TrackerCommonData/data/tecmodule4.xml', + 'Geometry/TrackerCommonData/data/tecmodule4r.xml', + 'Geometry/TrackerCommonData/data/tecmodule4s.xml', + 'Geometry/TrackerCommonData/data/tecmodule5.xml', + 'Geometry/TrackerCommonData/data/tecmodule6.xml', + 'Geometry/TrackerCommonData/data/tecpetpar.xml', + 'Geometry/TrackerCommonData/data/tecring0.xml', + 'Geometry/TrackerCommonData/data/tecring1.xml', + 'Geometry/TrackerCommonData/data/tecring2.xml', + 'Geometry/TrackerCommonData/data/tecring3.xml', + 'Geometry/TrackerCommonData/data/tecring4.xml', + 'Geometry/TrackerCommonData/data/tecring5.xml', + 'Geometry/TrackerCommonData/data/tecring6.xml', + 'Geometry/TrackerCommonData/data/tecring0f.xml', + 'Geometry/TrackerCommonData/data/tecring1f.xml', + 'Geometry/TrackerCommonData/data/tecring2f.xml', + 'Geometry/TrackerCommonData/data/tecring3f.xml', + 'Geometry/TrackerCommonData/data/tecring4f.xml', + 'Geometry/TrackerCommonData/data/tecring5f.xml', + 'Geometry/TrackerCommonData/data/tecring6f.xml', + 'Geometry/TrackerCommonData/data/tecring0b.xml', + 'Geometry/TrackerCommonData/data/tecring1b.xml', + 'Geometry/TrackerCommonData/data/tecring2b.xml', + 'Geometry/TrackerCommonData/data/tecring3b.xml', + 'Geometry/TrackerCommonData/data/tecring4b.xml', + 'Geometry/TrackerCommonData/data/tecring5b.xml', + 'Geometry/TrackerCommonData/data/tecring6b.xml', + 'Geometry/TrackerCommonData/data/tecpetalf.xml', + 'Geometry/TrackerCommonData/data/tecpetalb.xml', + 'Geometry/TrackerCommonData/data/tecpetal0.xml', + 'Geometry/TrackerCommonData/data/tecpetal0f.xml', + 'Geometry/TrackerCommonData/data/tecpetal0b.xml', + 'Geometry/TrackerCommonData/data/tecpetal3.xml', + 'Geometry/TrackerCommonData/data/tecpetal3f.xml', + 'Geometry/TrackerCommonData/data/tecpetal3b.xml', + 'Geometry/TrackerCommonData/data/tecpetal6f.xml', + 'Geometry/TrackerCommonData/data/tecpetal6b.xml', + 'Geometry/TrackerCommonData/data/tecpetal8f.xml', + 'Geometry/TrackerCommonData/data/tecpetal8b.xml', + 'Geometry/TrackerCommonData/data/tecwheel.xml', + 'Geometry/TrackerCommonData/data/tecwheela.xml', + 'Geometry/TrackerCommonData/data/tecwheelb.xml', + 'Geometry/TrackerCommonData/data/tecwheelc.xml', + 'Geometry/TrackerCommonData/data/tecwheeld.xml', + 'Geometry/TrackerCommonData/data/tecwheel6.xml', + 'Geometry/TrackerCommonData/data/tecservices.xml', + 'Geometry/TrackerCommonData/data/tecbackplate.xml', + 'Geometry/TrackerCommonData/data/tec.xml', + 'Geometry/TrackerCommonData/data/Run2/tracker.xml', + 'Geometry/TrackerCommonData/data/trackerpixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', + 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', + 'Geometry/TrackerCommonData/data/trackertib.xml', + 'Geometry/TrackerCommonData/data/trackertid.xml', + 'Geometry/TrackerCommonData/data/trackertob.xml', + 'Geometry/TrackerCommonData/data/trackertec.xml', + 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', + 'Geometry/TrackerCommonData/data/trackerother.xml', + 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/EcalCommonData/data/eecon.xml', + 'Geometry/EcalCommonData/data/eefixed.xml', + 'Geometry/EcalCommonData/data/eehier.xml', + 'Geometry/EcalCommonData/data/eealgo.xml', + 'Geometry/EcalCommonData/data/escon.xml', + 'Geometry/EcalCommonData/data/esalgo.xml', + 'Geometry/EcalCommonData/data/eeF.xml', + 'Geometry/EcalCommonData/data/eeB.xml', + 'Geometry/EcalCommonData/data/ectkcable.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/hcal/PhaseI/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/2017Plan1/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/2017/hcalRecNumbering.xml', + 'Geometry/MuonCommonData/data/mbCommon/2017/v1/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2015/v1/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2015/v1/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2015/v1/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v1/mb4.xml', + 'Geometry/MuonCommonData/data/muonYoke/2015/v1/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2017/v1/mf.xml', + 'Geometry/MuonCommonData/data/rpcf/2015/v1/rpcf.xml', + 'Geometry/MuonCommonData/data/csc/2015/v1/csc.xml', + 'Geometry/MuonCommonData/data/mfshield/2017/v1/mfshield.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/2017/v2/gem11.xml', + 'Geometry/ForwardCommonData/data/forward.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2015/v1/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm.xml', + 'Geometry/ForwardCommonData/data/Run2/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/ForwardCommonData/data/Run2/totemt1.xml', + 'Geometry/ForwardCommonData/data/Run2/totemt2.xml', + 'Geometry/ForwardCommonData/data/ionpump.xml', + 'Geometry/ForwardCommonData/data/Run2/castor.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml')+cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/2017/v1/muonNumbering.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', + 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', + 'Geometry/EcalSimData/data/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/MuonSimData/data/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/GEMSpecsFilter17.xml', + 'Geometry/GEMGeometryBuilder/data/v4/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/castorsens.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/EcalSimData/data/ESProdCuts.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/MuonSimData/data/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/CastorProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml'), + rootNodeName = cms.string('cms:OCMS') +) + + diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatMinus05PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatMinus05PercentXML_cfi.py new file mode 100644 index 0000000000000..f6f2f6cf06d23 --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatMinus05PercentXML_cfi.py @@ -0,0 +1,385 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v2/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v3/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2021/v3/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2017/v1/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase/2018/v1/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2021/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam/2021/v1/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml', + 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus05Percent/2021/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbar.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', + 'Geometry/TrackerCommonData/data/tibmodpar.xml', + 'Geometry/TrackerCommonData/data/tibmodule0.xml', + 'Geometry/TrackerCommonData/data/tibmodule0a.xml', + 'Geometry/TrackerCommonData/data/tibmodule0b.xml', + 'Geometry/TrackerCommonData/data/tibmodule2.xml', + 'Geometry/TrackerCommonData/data/tibstringpar.xml', + 'Geometry/TrackerCommonData/data/tibstring0ll.xml', + 'Geometry/TrackerCommonData/data/tibstring0lr.xml', + 'Geometry/TrackerCommonData/data/tibstring0ul.xml', + 'Geometry/TrackerCommonData/data/tibstring0ur.xml', + 'Geometry/TrackerCommonData/data/tibstring0.xml', + 'Geometry/TrackerCommonData/data/tibstring1ll.xml', + 'Geometry/TrackerCommonData/data/tibstring1lr.xml', + 'Geometry/TrackerCommonData/data/tibstring1ul.xml', + 'Geometry/TrackerCommonData/data/tibstring1ur.xml', + 'Geometry/TrackerCommonData/data/tibstring1.xml', + 'Geometry/TrackerCommonData/data/tibstring2ll.xml', + 'Geometry/TrackerCommonData/data/tibstring2lr.xml', + 'Geometry/TrackerCommonData/data/tibstring2ul.xml', + 'Geometry/TrackerCommonData/data/tibstring2ur.xml', + 'Geometry/TrackerCommonData/data/tibstring2.xml', + 'Geometry/TrackerCommonData/data/tibstring3ll.xml', + 'Geometry/TrackerCommonData/data/tibstring3lr.xml', + 'Geometry/TrackerCommonData/data/tibstring3ul.xml', + 'Geometry/TrackerCommonData/data/tibstring3ur.xml', + 'Geometry/TrackerCommonData/data/tibstring3.xml', + 'Geometry/TrackerCommonData/data/tiblayerpar.xml', + 'Geometry/TrackerCommonData/data/tiblayer0.xml', + 'Geometry/TrackerCommonData/data/tiblayer1.xml', + 'Geometry/TrackerCommonData/data/tiblayer2.xml', + 'Geometry/TrackerCommonData/data/tiblayer3.xml', + 'Geometry/TrackerCommonData/data/tib.xml', + 'Geometry/TrackerCommonData/data/tidmodpar.xml', + 'Geometry/TrackerCommonData/data/tidmodule0.xml', + 'Geometry/TrackerCommonData/data/tidmodule0r.xml', + 'Geometry/TrackerCommonData/data/tidmodule0l.xml', + 'Geometry/TrackerCommonData/data/tidmodule1.xml', + 'Geometry/TrackerCommonData/data/tidmodule1r.xml', + 'Geometry/TrackerCommonData/data/tidmodule1l.xml', + 'Geometry/TrackerCommonData/data/tidmodule2.xml', + 'Geometry/TrackerCommonData/data/tidringpar.xml', + 'Geometry/TrackerCommonData/data/tidring0.xml', + 'Geometry/TrackerCommonData/data/tidring0f.xml', + 'Geometry/TrackerCommonData/data/tidring0b.xml', + 'Geometry/TrackerCommonData/data/tidring1.xml', + 'Geometry/TrackerCommonData/data/tidring1f.xml', + 'Geometry/TrackerCommonData/data/tidring1b.xml', + 'Geometry/TrackerCommonData/data/tidring2.xml', + 'Geometry/TrackerCommonData/data/tid.xml', + 'Geometry/TrackerCommonData/data/tidf.xml', + 'Geometry/TrackerCommonData/data/tidb.xml', + 'Geometry/TrackerCommonData/data/tibtidservices.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', + 'Geometry/TrackerCommonData/data/tobmodpar.xml', + 'Geometry/TrackerCommonData/data/tobmodule0.xml', + 'Geometry/TrackerCommonData/data/tobmodule2.xml', + 'Geometry/TrackerCommonData/data/tobmodule4.xml', + 'Geometry/TrackerCommonData/data/tobrodpar.xml', + 'Geometry/TrackerCommonData/data/tobrod0c.xml', + 'Geometry/TrackerCommonData/data/tobrod0l.xml', + 'Geometry/TrackerCommonData/data/tobrod0h.xml', + 'Geometry/TrackerCommonData/data/tobrod0.xml', + 'Geometry/TrackerCommonData/data/tobrod1l.xml', + 'Geometry/TrackerCommonData/data/tobrod1h.xml', + 'Geometry/TrackerCommonData/data/tobrod1.xml', + 'Geometry/TrackerCommonData/data/tobrod2c.xml', + 'Geometry/TrackerCommonData/data/tobrod2l.xml', + 'Geometry/TrackerCommonData/data/tobrod2h.xml', + 'Geometry/TrackerCommonData/data/tobrod2.xml', + 'Geometry/TrackerCommonData/data/tobrod3l.xml', + 'Geometry/TrackerCommonData/data/tobrod3h.xml', + 'Geometry/TrackerCommonData/data/tobrod3.xml', + 'Geometry/TrackerCommonData/data/tobrod4c.xml', + 'Geometry/TrackerCommonData/data/tobrod4l.xml', + 'Geometry/TrackerCommonData/data/tobrod4h.xml', + 'Geometry/TrackerCommonData/data/tobrod4.xml', + 'Geometry/TrackerCommonData/data/tobrod5l.xml', + 'Geometry/TrackerCommonData/data/tobrod5h.xml', + 'Geometry/TrackerCommonData/data/tobrod5.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', + 'Geometry/TrackerCommonData/data/tecmodpar.xml', + 'Geometry/TrackerCommonData/data/tecmodule0.xml', + 'Geometry/TrackerCommonData/data/tecmodule0r.xml', + 'Geometry/TrackerCommonData/data/tecmodule0s.xml', + 'Geometry/TrackerCommonData/data/tecmodule1.xml', + 'Geometry/TrackerCommonData/data/tecmodule1r.xml', + 'Geometry/TrackerCommonData/data/tecmodule1s.xml', + 'Geometry/TrackerCommonData/data/tecmodule2.xml', + 'Geometry/TrackerCommonData/data/tecmodule3.xml', + 'Geometry/TrackerCommonData/data/tecmodule4.xml', + 'Geometry/TrackerCommonData/data/tecmodule4r.xml', + 'Geometry/TrackerCommonData/data/tecmodule4s.xml', + 'Geometry/TrackerCommonData/data/tecmodule5.xml', + 'Geometry/TrackerCommonData/data/tecmodule6.xml', + 'Geometry/TrackerCommonData/data/tecpetpar.xml', + 'Geometry/TrackerCommonData/data/tecring0.xml', + 'Geometry/TrackerCommonData/data/tecring1.xml', + 'Geometry/TrackerCommonData/data/tecring2.xml', + 'Geometry/TrackerCommonData/data/tecring3.xml', + 'Geometry/TrackerCommonData/data/tecring4.xml', + 'Geometry/TrackerCommonData/data/tecring5.xml', + 'Geometry/TrackerCommonData/data/tecring6.xml', + 'Geometry/TrackerCommonData/data/tecring0f.xml', + 'Geometry/TrackerCommonData/data/tecring1f.xml', + 'Geometry/TrackerCommonData/data/tecring2f.xml', + 'Geometry/TrackerCommonData/data/tecring3f.xml', + 'Geometry/TrackerCommonData/data/tecring4f.xml', + 'Geometry/TrackerCommonData/data/tecring5f.xml', + 'Geometry/TrackerCommonData/data/tecring6f.xml', + 'Geometry/TrackerCommonData/data/tecring0b.xml', + 'Geometry/TrackerCommonData/data/tecring1b.xml', + 'Geometry/TrackerCommonData/data/tecring2b.xml', + 'Geometry/TrackerCommonData/data/tecring3b.xml', + 'Geometry/TrackerCommonData/data/tecring4b.xml', + 'Geometry/TrackerCommonData/data/tecring5b.xml', + 'Geometry/TrackerCommonData/data/tecring6b.xml', + 'Geometry/TrackerCommonData/data/tecpetalf.xml', + 'Geometry/TrackerCommonData/data/tecpetalb.xml', + 'Geometry/TrackerCommonData/data/tecpetal0.xml', + 'Geometry/TrackerCommonData/data/tecpetal0f.xml', + 'Geometry/TrackerCommonData/data/tecpetal0b.xml', + 'Geometry/TrackerCommonData/data/tecpetal3.xml', + 'Geometry/TrackerCommonData/data/tecpetal3f.xml', + 'Geometry/TrackerCommonData/data/tecpetal3b.xml', + 'Geometry/TrackerCommonData/data/tecpetal6f.xml', + 'Geometry/TrackerCommonData/data/tecpetal6b.xml', + 'Geometry/TrackerCommonData/data/tecpetal8f.xml', + 'Geometry/TrackerCommonData/data/tecpetal8b.xml', + 'Geometry/TrackerCommonData/data/tecwheel/2021/v1/tecwheel.xml', + 'Geometry/TrackerCommonData/data/tecwheela.xml', + 'Geometry/TrackerCommonData/data/tecwheelb.xml', + 'Geometry/TrackerCommonData/data/tecwheelc.xml', + 'Geometry/TrackerCommonData/data/tecwheeld.xml', + 'Geometry/TrackerCommonData/data/tecwheel6.xml', + 'Geometry/TrackerCommonData/data/tecservices.xml', + 'Geometry/TrackerCommonData/data/tecbackplate.xml', + 'Geometry/TrackerCommonData/data/tec.xml', + 'Geometry/TrackerCommonData/data/Run2/tracker.xml', + 'Geometry/TrackerCommonData/data/trackerpixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', + 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', + 'Geometry/TrackerCommonData/data/trackertib.xml', + 'Geometry/TrackerCommonData/data/trackertid.xml', + 'Geometry/TrackerCommonData/data/trackertob.xml', + 'Geometry/TrackerCommonData/data/trackertec.xml', + 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', + 'Geometry/TrackerCommonData/data/trackerother.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', + 'Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/eecon.xml', + 'Geometry/EcalCommonData/data/escon.xml', + 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/EcalCommonData/data/eefixed/2021/v1/eefixed.xml', + 'Geometry/EcalCommonData/data/eehier.xml', + 'Geometry/EcalCommonData/data/eealgo.xml', + 'Geometry/EcalCommonData/data/esalgo.xml', + 'Geometry/EcalCommonData/data/eeF.xml', + 'Geometry/EcalCommonData/data/eeB.xml', + 'Geometry/EcalCommonData/data/ectkcable.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/hcal/PhaseI/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/2021/v1/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/2021/hcalRecNumbering.xml', + 'Geometry/MuonCommonData/data/mbCommon/2021/v2/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2021/v1/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2021/v1/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2021/v1/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml', + 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml', + 'Geometry/MuonCommonData/data/muonYoke/2021/v5/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2021/v2/mf.xml', + 'Geometry/MuonCommonData/data/rpcf/2015/v1/rpcf.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', + 'Geometry/MuonCommonData/data/csc/2021/v3/csc.xml', + 'Geometry/MuonCommonData/data/mfshield/2017/v2/mfshield.xml', + )+ + cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/2021/v3/muonNumbering.xml', + 'Geometry/ForwardCommonData/data/forward/2021/v1/forward.xml', + 'Geometry/ForwardCommonData/data/totemt2/2021/v1/totemt2.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2021/v1/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm/2021/v1/brm.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials/2021/v1/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc/2021/v1/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi/2021/v2/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml', + 'Geometry/ForwardCommonData/data/Run2/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/VeryForwardData/data/RP_Box.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_000.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_001.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_002.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_003.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_004.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_005.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_020.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_021.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_022.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_023.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_024.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_025.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_100.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_101.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_102.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_103.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_104.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_105.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_120.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_121.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_122.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_123.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_124.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_125.xml', + 'Geometry/VeryForwardData/data/RP_Hybrid/v1/RP_Hybrid.xml', + 'Geometry/VeryForwardData/data/RP_Materials/v2/RP_Materials.xml', + 'Geometry/VeryForwardData/data/RP_Transformations.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_000.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_001.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_002.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_004.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_005.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_020.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_021.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_022.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_024.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_025.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_100.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_101.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_102.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_104.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_105.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_120.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_121.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_122.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_124.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_125.xml', + 'Geometry/VeryForwardData/data/RP_Device.xml', + 'Geometry/VeryForwardData/data/RP_Vertical_Device.xml', + 'Geometry/VeryForwardData/data/RP_Horizontal_Device.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Right_Station/v1/CTPPS_220_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Left_Station/v1/CTPPS_220_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Right_Station/v1/CTPPS_210_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Left_Station/v1/CTPPS_210_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_Stations_Assembly.xml', + 'Geometry/VeryForwardData/data/CTPPS_Cuts_Per_Region.xml', + 'Geometry/VeryForwardData/data/RP_Sensitive_Dets.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Materials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Transformations.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Parameters.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Station_Parameters.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Horizontal_Pot.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern1_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern2_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern2_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment5.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Detector_Assembly.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Sensitive_Dets_TimingHits.xml', + 'Geometry/VeryForwardData/data/ppstrackerMaterials/v2/ppstrackerMaterials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module/v3/CTPPS_Pixel_Module.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module_2x2/v3/CTPPS_Pixel_Module_2x2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_003.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_023.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_103.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_123.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Sens.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/RP_Dist_Beam_Cent.xml', + 'Geometry/EcalSimData/data/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsens/2021/v1/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil/2021/v1/CaloUtil.xml', + 'Geometry/MuonSimData/data/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/GEMSpecsFilter17.xml', + 'Geometry/GEMGeometryBuilder/data/v4/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/totemsensT2/2021/totemsensT2.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2021/v2/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/EcalSimData/data/ESProdCuts.xml', + 'Geometry/MuonSimData/data/muonProdCuts/2021/v1/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatMinus10PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatMinus10PercentXML_cfi.py new file mode 100644 index 0000000000000..a41a3051a90a6 --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatMinus10PercentXML_cfi.py @@ -0,0 +1,385 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v2/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v3/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2021/v3/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2017/v1/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase/2018/v1/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2021/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam/2021/v1/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml', + 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatMinus10Percent/2021/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbar.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', + 'Geometry/TrackerCommonData/data/tibmodpar.xml', + 'Geometry/TrackerCommonData/data/tibmodule0.xml', + 'Geometry/TrackerCommonData/data/tibmodule0a.xml', + 'Geometry/TrackerCommonData/data/tibmodule0b.xml', + 'Geometry/TrackerCommonData/data/tibmodule2.xml', + 'Geometry/TrackerCommonData/data/tibstringpar.xml', + 'Geometry/TrackerCommonData/data/tibstring0ll.xml', + 'Geometry/TrackerCommonData/data/tibstring0lr.xml', + 'Geometry/TrackerCommonData/data/tibstring0ul.xml', + 'Geometry/TrackerCommonData/data/tibstring0ur.xml', + 'Geometry/TrackerCommonData/data/tibstring0.xml', + 'Geometry/TrackerCommonData/data/tibstring1ll.xml', + 'Geometry/TrackerCommonData/data/tibstring1lr.xml', + 'Geometry/TrackerCommonData/data/tibstring1ul.xml', + 'Geometry/TrackerCommonData/data/tibstring1ur.xml', + 'Geometry/TrackerCommonData/data/tibstring1.xml', + 'Geometry/TrackerCommonData/data/tibstring2ll.xml', + 'Geometry/TrackerCommonData/data/tibstring2lr.xml', + 'Geometry/TrackerCommonData/data/tibstring2ul.xml', + 'Geometry/TrackerCommonData/data/tibstring2ur.xml', + 'Geometry/TrackerCommonData/data/tibstring2.xml', + 'Geometry/TrackerCommonData/data/tibstring3ll.xml', + 'Geometry/TrackerCommonData/data/tibstring3lr.xml', + 'Geometry/TrackerCommonData/data/tibstring3ul.xml', + 'Geometry/TrackerCommonData/data/tibstring3ur.xml', + 'Geometry/TrackerCommonData/data/tibstring3.xml', + 'Geometry/TrackerCommonData/data/tiblayerpar.xml', + 'Geometry/TrackerCommonData/data/tiblayer0.xml', + 'Geometry/TrackerCommonData/data/tiblayer1.xml', + 'Geometry/TrackerCommonData/data/tiblayer2.xml', + 'Geometry/TrackerCommonData/data/tiblayer3.xml', + 'Geometry/TrackerCommonData/data/tib.xml', + 'Geometry/TrackerCommonData/data/tidmodpar.xml', + 'Geometry/TrackerCommonData/data/tidmodule0.xml', + 'Geometry/TrackerCommonData/data/tidmodule0r.xml', + 'Geometry/TrackerCommonData/data/tidmodule0l.xml', + 'Geometry/TrackerCommonData/data/tidmodule1.xml', + 'Geometry/TrackerCommonData/data/tidmodule1r.xml', + 'Geometry/TrackerCommonData/data/tidmodule1l.xml', + 'Geometry/TrackerCommonData/data/tidmodule2.xml', + 'Geometry/TrackerCommonData/data/tidringpar.xml', + 'Geometry/TrackerCommonData/data/tidring0.xml', + 'Geometry/TrackerCommonData/data/tidring0f.xml', + 'Geometry/TrackerCommonData/data/tidring0b.xml', + 'Geometry/TrackerCommonData/data/tidring1.xml', + 'Geometry/TrackerCommonData/data/tidring1f.xml', + 'Geometry/TrackerCommonData/data/tidring1b.xml', + 'Geometry/TrackerCommonData/data/tidring2.xml', + 'Geometry/TrackerCommonData/data/tid.xml', + 'Geometry/TrackerCommonData/data/tidf.xml', + 'Geometry/TrackerCommonData/data/tidb.xml', + 'Geometry/TrackerCommonData/data/tibtidservices.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', + 'Geometry/TrackerCommonData/data/tobmodpar.xml', + 'Geometry/TrackerCommonData/data/tobmodule0.xml', + 'Geometry/TrackerCommonData/data/tobmodule2.xml', + 'Geometry/TrackerCommonData/data/tobmodule4.xml', + 'Geometry/TrackerCommonData/data/tobrodpar.xml', + 'Geometry/TrackerCommonData/data/tobrod0c.xml', + 'Geometry/TrackerCommonData/data/tobrod0l.xml', + 'Geometry/TrackerCommonData/data/tobrod0h.xml', + 'Geometry/TrackerCommonData/data/tobrod0.xml', + 'Geometry/TrackerCommonData/data/tobrod1l.xml', + 'Geometry/TrackerCommonData/data/tobrod1h.xml', + 'Geometry/TrackerCommonData/data/tobrod1.xml', + 'Geometry/TrackerCommonData/data/tobrod2c.xml', + 'Geometry/TrackerCommonData/data/tobrod2l.xml', + 'Geometry/TrackerCommonData/data/tobrod2h.xml', + 'Geometry/TrackerCommonData/data/tobrod2.xml', + 'Geometry/TrackerCommonData/data/tobrod3l.xml', + 'Geometry/TrackerCommonData/data/tobrod3h.xml', + 'Geometry/TrackerCommonData/data/tobrod3.xml', + 'Geometry/TrackerCommonData/data/tobrod4c.xml', + 'Geometry/TrackerCommonData/data/tobrod4l.xml', + 'Geometry/TrackerCommonData/data/tobrod4h.xml', + 'Geometry/TrackerCommonData/data/tobrod4.xml', + 'Geometry/TrackerCommonData/data/tobrod5l.xml', + 'Geometry/TrackerCommonData/data/tobrod5h.xml', + 'Geometry/TrackerCommonData/data/tobrod5.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', + 'Geometry/TrackerCommonData/data/tecmodpar.xml', + 'Geometry/TrackerCommonData/data/tecmodule0.xml', + 'Geometry/TrackerCommonData/data/tecmodule0r.xml', + 'Geometry/TrackerCommonData/data/tecmodule0s.xml', + 'Geometry/TrackerCommonData/data/tecmodule1.xml', + 'Geometry/TrackerCommonData/data/tecmodule1r.xml', + 'Geometry/TrackerCommonData/data/tecmodule1s.xml', + 'Geometry/TrackerCommonData/data/tecmodule2.xml', + 'Geometry/TrackerCommonData/data/tecmodule3.xml', + 'Geometry/TrackerCommonData/data/tecmodule4.xml', + 'Geometry/TrackerCommonData/data/tecmodule4r.xml', + 'Geometry/TrackerCommonData/data/tecmodule4s.xml', + 'Geometry/TrackerCommonData/data/tecmodule5.xml', + 'Geometry/TrackerCommonData/data/tecmodule6.xml', + 'Geometry/TrackerCommonData/data/tecpetpar.xml', + 'Geometry/TrackerCommonData/data/tecring0.xml', + 'Geometry/TrackerCommonData/data/tecring1.xml', + 'Geometry/TrackerCommonData/data/tecring2.xml', + 'Geometry/TrackerCommonData/data/tecring3.xml', + 'Geometry/TrackerCommonData/data/tecring4.xml', + 'Geometry/TrackerCommonData/data/tecring5.xml', + 'Geometry/TrackerCommonData/data/tecring6.xml', + 'Geometry/TrackerCommonData/data/tecring0f.xml', + 'Geometry/TrackerCommonData/data/tecring1f.xml', + 'Geometry/TrackerCommonData/data/tecring2f.xml', + 'Geometry/TrackerCommonData/data/tecring3f.xml', + 'Geometry/TrackerCommonData/data/tecring4f.xml', + 'Geometry/TrackerCommonData/data/tecring5f.xml', + 'Geometry/TrackerCommonData/data/tecring6f.xml', + 'Geometry/TrackerCommonData/data/tecring0b.xml', + 'Geometry/TrackerCommonData/data/tecring1b.xml', + 'Geometry/TrackerCommonData/data/tecring2b.xml', + 'Geometry/TrackerCommonData/data/tecring3b.xml', + 'Geometry/TrackerCommonData/data/tecring4b.xml', + 'Geometry/TrackerCommonData/data/tecring5b.xml', + 'Geometry/TrackerCommonData/data/tecring6b.xml', + 'Geometry/TrackerCommonData/data/tecpetalf.xml', + 'Geometry/TrackerCommonData/data/tecpetalb.xml', + 'Geometry/TrackerCommonData/data/tecpetal0.xml', + 'Geometry/TrackerCommonData/data/tecpetal0f.xml', + 'Geometry/TrackerCommonData/data/tecpetal0b.xml', + 'Geometry/TrackerCommonData/data/tecpetal3.xml', + 'Geometry/TrackerCommonData/data/tecpetal3f.xml', + 'Geometry/TrackerCommonData/data/tecpetal3b.xml', + 'Geometry/TrackerCommonData/data/tecpetal6f.xml', + 'Geometry/TrackerCommonData/data/tecpetal6b.xml', + 'Geometry/TrackerCommonData/data/tecpetal8f.xml', + 'Geometry/TrackerCommonData/data/tecpetal8b.xml', + 'Geometry/TrackerCommonData/data/tecwheel/2021/v1/tecwheel.xml', + 'Geometry/TrackerCommonData/data/tecwheela.xml', + 'Geometry/TrackerCommonData/data/tecwheelb.xml', + 'Geometry/TrackerCommonData/data/tecwheelc.xml', + 'Geometry/TrackerCommonData/data/tecwheeld.xml', + 'Geometry/TrackerCommonData/data/tecwheel6.xml', + 'Geometry/TrackerCommonData/data/tecservices.xml', + 'Geometry/TrackerCommonData/data/tecbackplate.xml', + 'Geometry/TrackerCommonData/data/tec.xml', + 'Geometry/TrackerCommonData/data/Run2/tracker.xml', + 'Geometry/TrackerCommonData/data/trackerpixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', + 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', + 'Geometry/TrackerCommonData/data/trackertib.xml', + 'Geometry/TrackerCommonData/data/trackertid.xml', + 'Geometry/TrackerCommonData/data/trackertob.xml', + 'Geometry/TrackerCommonData/data/trackertec.xml', + 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', + 'Geometry/TrackerCommonData/data/trackerother.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', + 'Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/eecon.xml', + 'Geometry/EcalCommonData/data/escon.xml', + 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/EcalCommonData/data/eefixed/2021/v1/eefixed.xml', + 'Geometry/EcalCommonData/data/eehier.xml', + 'Geometry/EcalCommonData/data/eealgo.xml', + 'Geometry/EcalCommonData/data/esalgo.xml', + 'Geometry/EcalCommonData/data/eeF.xml', + 'Geometry/EcalCommonData/data/eeB.xml', + 'Geometry/EcalCommonData/data/ectkcable.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/hcal/PhaseI/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/2021/v1/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/2021/hcalRecNumbering.xml', + 'Geometry/MuonCommonData/data/mbCommon/2021/v2/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2021/v1/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2021/v1/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2021/v1/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml', + 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml', + 'Geometry/MuonCommonData/data/muonYoke/2021/v5/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2021/v2/mf.xml', + 'Geometry/MuonCommonData/data/rpcf/2015/v1/rpcf.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', + 'Geometry/MuonCommonData/data/csc/2021/v3/csc.xml', + 'Geometry/MuonCommonData/data/mfshield/2017/v2/mfshield.xml', + )+ + cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/2021/v3/muonNumbering.xml', + 'Geometry/ForwardCommonData/data/forward/2021/v1/forward.xml', + 'Geometry/ForwardCommonData/data/totemt2/2021/v1/totemt2.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2021/v1/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm/2021/v1/brm.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials/2021/v1/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc/2021/v1/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi/2021/v2/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml', + 'Geometry/ForwardCommonData/data/Run2/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/VeryForwardData/data/RP_Box.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_000.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_001.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_002.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_003.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_004.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_005.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_020.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_021.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_022.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_023.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_024.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_025.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_100.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_101.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_102.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_103.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_104.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_105.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_120.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_121.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_122.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_123.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_124.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_125.xml', + 'Geometry/VeryForwardData/data/RP_Hybrid/v1/RP_Hybrid.xml', + 'Geometry/VeryForwardData/data/RP_Materials/v2/RP_Materials.xml', + 'Geometry/VeryForwardData/data/RP_Transformations.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_000.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_001.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_002.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_004.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_005.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_020.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_021.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_022.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_024.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_025.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_100.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_101.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_102.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_104.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_105.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_120.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_121.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_122.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_124.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_125.xml', + 'Geometry/VeryForwardData/data/RP_Device.xml', + 'Geometry/VeryForwardData/data/RP_Vertical_Device.xml', + 'Geometry/VeryForwardData/data/RP_Horizontal_Device.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Right_Station/v1/CTPPS_220_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Left_Station/v1/CTPPS_220_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Right_Station/v1/CTPPS_210_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Left_Station/v1/CTPPS_210_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_Stations_Assembly.xml', + 'Geometry/VeryForwardData/data/CTPPS_Cuts_Per_Region.xml', + 'Geometry/VeryForwardData/data/RP_Sensitive_Dets.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Materials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Transformations.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Parameters.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Station_Parameters.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Horizontal_Pot.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern1_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern2_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern2_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment5.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Detector_Assembly.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Sensitive_Dets_TimingHits.xml', + 'Geometry/VeryForwardData/data/ppstrackerMaterials/v2/ppstrackerMaterials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module/v3/CTPPS_Pixel_Module.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module_2x2/v3/CTPPS_Pixel_Module_2x2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_003.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_023.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_103.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_123.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Sens.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/RP_Dist_Beam_Cent.xml', + 'Geometry/EcalSimData/data/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsens/2021/v1/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil/2021/v1/CaloUtil.xml', + 'Geometry/MuonSimData/data/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/GEMSpecsFilter17.xml', + 'Geometry/GEMGeometryBuilder/data/v4/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/totemsensT2/2021/totemsensT2.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2021/v2/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/EcalSimData/data/ESProdCuts.xml', + 'Geometry/MuonSimData/data/muonProdCuts/2021/v1/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatPlus05PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatPlus05PercentXML_cfi.py new file mode 100644 index 0000000000000..c8f975766fc33 --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatPlus05PercentXML_cfi.py @@ -0,0 +1,385 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v2/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v3/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2021/v3/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2017/v1/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase/2018/v1/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2021/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam/2021/v1/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml', + 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus05Percent/2021/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbar.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', + 'Geometry/TrackerCommonData/data/tibmodpar.xml', + 'Geometry/TrackerCommonData/data/tibmodule0.xml', + 'Geometry/TrackerCommonData/data/tibmodule0a.xml', + 'Geometry/TrackerCommonData/data/tibmodule0b.xml', + 'Geometry/TrackerCommonData/data/tibmodule2.xml', + 'Geometry/TrackerCommonData/data/tibstringpar.xml', + 'Geometry/TrackerCommonData/data/tibstring0ll.xml', + 'Geometry/TrackerCommonData/data/tibstring0lr.xml', + 'Geometry/TrackerCommonData/data/tibstring0ul.xml', + 'Geometry/TrackerCommonData/data/tibstring0ur.xml', + 'Geometry/TrackerCommonData/data/tibstring0.xml', + 'Geometry/TrackerCommonData/data/tibstring1ll.xml', + 'Geometry/TrackerCommonData/data/tibstring1lr.xml', + 'Geometry/TrackerCommonData/data/tibstring1ul.xml', + 'Geometry/TrackerCommonData/data/tibstring1ur.xml', + 'Geometry/TrackerCommonData/data/tibstring1.xml', + 'Geometry/TrackerCommonData/data/tibstring2ll.xml', + 'Geometry/TrackerCommonData/data/tibstring2lr.xml', + 'Geometry/TrackerCommonData/data/tibstring2ul.xml', + 'Geometry/TrackerCommonData/data/tibstring2ur.xml', + 'Geometry/TrackerCommonData/data/tibstring2.xml', + 'Geometry/TrackerCommonData/data/tibstring3ll.xml', + 'Geometry/TrackerCommonData/data/tibstring3lr.xml', + 'Geometry/TrackerCommonData/data/tibstring3ul.xml', + 'Geometry/TrackerCommonData/data/tibstring3ur.xml', + 'Geometry/TrackerCommonData/data/tibstring3.xml', + 'Geometry/TrackerCommonData/data/tiblayerpar.xml', + 'Geometry/TrackerCommonData/data/tiblayer0.xml', + 'Geometry/TrackerCommonData/data/tiblayer1.xml', + 'Geometry/TrackerCommonData/data/tiblayer2.xml', + 'Geometry/TrackerCommonData/data/tiblayer3.xml', + 'Geometry/TrackerCommonData/data/tib.xml', + 'Geometry/TrackerCommonData/data/tidmodpar.xml', + 'Geometry/TrackerCommonData/data/tidmodule0.xml', + 'Geometry/TrackerCommonData/data/tidmodule0r.xml', + 'Geometry/TrackerCommonData/data/tidmodule0l.xml', + 'Geometry/TrackerCommonData/data/tidmodule1.xml', + 'Geometry/TrackerCommonData/data/tidmodule1r.xml', + 'Geometry/TrackerCommonData/data/tidmodule1l.xml', + 'Geometry/TrackerCommonData/data/tidmodule2.xml', + 'Geometry/TrackerCommonData/data/tidringpar.xml', + 'Geometry/TrackerCommonData/data/tidring0.xml', + 'Geometry/TrackerCommonData/data/tidring0f.xml', + 'Geometry/TrackerCommonData/data/tidring0b.xml', + 'Geometry/TrackerCommonData/data/tidring1.xml', + 'Geometry/TrackerCommonData/data/tidring1f.xml', + 'Geometry/TrackerCommonData/data/tidring1b.xml', + 'Geometry/TrackerCommonData/data/tidring2.xml', + 'Geometry/TrackerCommonData/data/tid.xml', + 'Geometry/TrackerCommonData/data/tidf.xml', + 'Geometry/TrackerCommonData/data/tidb.xml', + 'Geometry/TrackerCommonData/data/tibtidservices.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', + 'Geometry/TrackerCommonData/data/tobmodpar.xml', + 'Geometry/TrackerCommonData/data/tobmodule0.xml', + 'Geometry/TrackerCommonData/data/tobmodule2.xml', + 'Geometry/TrackerCommonData/data/tobmodule4.xml', + 'Geometry/TrackerCommonData/data/tobrodpar.xml', + 'Geometry/TrackerCommonData/data/tobrod0c.xml', + 'Geometry/TrackerCommonData/data/tobrod0l.xml', + 'Geometry/TrackerCommonData/data/tobrod0h.xml', + 'Geometry/TrackerCommonData/data/tobrod0.xml', + 'Geometry/TrackerCommonData/data/tobrod1l.xml', + 'Geometry/TrackerCommonData/data/tobrod1h.xml', + 'Geometry/TrackerCommonData/data/tobrod1.xml', + 'Geometry/TrackerCommonData/data/tobrod2c.xml', + 'Geometry/TrackerCommonData/data/tobrod2l.xml', + 'Geometry/TrackerCommonData/data/tobrod2h.xml', + 'Geometry/TrackerCommonData/data/tobrod2.xml', + 'Geometry/TrackerCommonData/data/tobrod3l.xml', + 'Geometry/TrackerCommonData/data/tobrod3h.xml', + 'Geometry/TrackerCommonData/data/tobrod3.xml', + 'Geometry/TrackerCommonData/data/tobrod4c.xml', + 'Geometry/TrackerCommonData/data/tobrod4l.xml', + 'Geometry/TrackerCommonData/data/tobrod4h.xml', + 'Geometry/TrackerCommonData/data/tobrod4.xml', + 'Geometry/TrackerCommonData/data/tobrod5l.xml', + 'Geometry/TrackerCommonData/data/tobrod5h.xml', + 'Geometry/TrackerCommonData/data/tobrod5.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', + 'Geometry/TrackerCommonData/data/tecmodpar.xml', + 'Geometry/TrackerCommonData/data/tecmodule0.xml', + 'Geometry/TrackerCommonData/data/tecmodule0r.xml', + 'Geometry/TrackerCommonData/data/tecmodule0s.xml', + 'Geometry/TrackerCommonData/data/tecmodule1.xml', + 'Geometry/TrackerCommonData/data/tecmodule1r.xml', + 'Geometry/TrackerCommonData/data/tecmodule1s.xml', + 'Geometry/TrackerCommonData/data/tecmodule2.xml', + 'Geometry/TrackerCommonData/data/tecmodule3.xml', + 'Geometry/TrackerCommonData/data/tecmodule4.xml', + 'Geometry/TrackerCommonData/data/tecmodule4r.xml', + 'Geometry/TrackerCommonData/data/tecmodule4s.xml', + 'Geometry/TrackerCommonData/data/tecmodule5.xml', + 'Geometry/TrackerCommonData/data/tecmodule6.xml', + 'Geometry/TrackerCommonData/data/tecpetpar.xml', + 'Geometry/TrackerCommonData/data/tecring0.xml', + 'Geometry/TrackerCommonData/data/tecring1.xml', + 'Geometry/TrackerCommonData/data/tecring2.xml', + 'Geometry/TrackerCommonData/data/tecring3.xml', + 'Geometry/TrackerCommonData/data/tecring4.xml', + 'Geometry/TrackerCommonData/data/tecring5.xml', + 'Geometry/TrackerCommonData/data/tecring6.xml', + 'Geometry/TrackerCommonData/data/tecring0f.xml', + 'Geometry/TrackerCommonData/data/tecring1f.xml', + 'Geometry/TrackerCommonData/data/tecring2f.xml', + 'Geometry/TrackerCommonData/data/tecring3f.xml', + 'Geometry/TrackerCommonData/data/tecring4f.xml', + 'Geometry/TrackerCommonData/data/tecring5f.xml', + 'Geometry/TrackerCommonData/data/tecring6f.xml', + 'Geometry/TrackerCommonData/data/tecring0b.xml', + 'Geometry/TrackerCommonData/data/tecring1b.xml', + 'Geometry/TrackerCommonData/data/tecring2b.xml', + 'Geometry/TrackerCommonData/data/tecring3b.xml', + 'Geometry/TrackerCommonData/data/tecring4b.xml', + 'Geometry/TrackerCommonData/data/tecring5b.xml', + 'Geometry/TrackerCommonData/data/tecring6b.xml', + 'Geometry/TrackerCommonData/data/tecpetalf.xml', + 'Geometry/TrackerCommonData/data/tecpetalb.xml', + 'Geometry/TrackerCommonData/data/tecpetal0.xml', + 'Geometry/TrackerCommonData/data/tecpetal0f.xml', + 'Geometry/TrackerCommonData/data/tecpetal0b.xml', + 'Geometry/TrackerCommonData/data/tecpetal3.xml', + 'Geometry/TrackerCommonData/data/tecpetal3f.xml', + 'Geometry/TrackerCommonData/data/tecpetal3b.xml', + 'Geometry/TrackerCommonData/data/tecpetal6f.xml', + 'Geometry/TrackerCommonData/data/tecpetal6b.xml', + 'Geometry/TrackerCommonData/data/tecpetal8f.xml', + 'Geometry/TrackerCommonData/data/tecpetal8b.xml', + 'Geometry/TrackerCommonData/data/tecwheel/2021/v1/tecwheel.xml', + 'Geometry/TrackerCommonData/data/tecwheela.xml', + 'Geometry/TrackerCommonData/data/tecwheelb.xml', + 'Geometry/TrackerCommonData/data/tecwheelc.xml', + 'Geometry/TrackerCommonData/data/tecwheeld.xml', + 'Geometry/TrackerCommonData/data/tecwheel6.xml', + 'Geometry/TrackerCommonData/data/tecservices.xml', + 'Geometry/TrackerCommonData/data/tecbackplate.xml', + 'Geometry/TrackerCommonData/data/tec.xml', + 'Geometry/TrackerCommonData/data/Run2/tracker.xml', + 'Geometry/TrackerCommonData/data/trackerpixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', + 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', + 'Geometry/TrackerCommonData/data/trackertib.xml', + 'Geometry/TrackerCommonData/data/trackertid.xml', + 'Geometry/TrackerCommonData/data/trackertob.xml', + 'Geometry/TrackerCommonData/data/trackertec.xml', + 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', + 'Geometry/TrackerCommonData/data/trackerother.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', + 'Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/eecon.xml', + 'Geometry/EcalCommonData/data/escon.xml', + 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/EcalCommonData/data/eefixed/2021/v1/eefixed.xml', + 'Geometry/EcalCommonData/data/eehier.xml', + 'Geometry/EcalCommonData/data/eealgo.xml', + 'Geometry/EcalCommonData/data/esalgo.xml', + 'Geometry/EcalCommonData/data/eeF.xml', + 'Geometry/EcalCommonData/data/eeB.xml', + 'Geometry/EcalCommonData/data/ectkcable.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/hcal/PhaseI/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/2021/v1/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/2021/hcalRecNumbering.xml', + 'Geometry/MuonCommonData/data/mbCommon/2021/v2/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2021/v1/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2021/v1/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2021/v1/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml', + 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml', + 'Geometry/MuonCommonData/data/muonYoke/2021/v5/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2021/v2/mf.xml', + 'Geometry/MuonCommonData/data/rpcf/2015/v1/rpcf.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', + 'Geometry/MuonCommonData/data/csc/2021/v3/csc.xml', + 'Geometry/MuonCommonData/data/mfshield/2017/v2/mfshield.xml', + )+ + cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/2021/v3/muonNumbering.xml', + 'Geometry/ForwardCommonData/data/forward/2021/v1/forward.xml', + 'Geometry/ForwardCommonData/data/totemt2/2021/v1/totemt2.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2021/v1/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm/2021/v1/brm.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials/2021/v1/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc/2021/v1/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi/2021/v2/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml', + 'Geometry/ForwardCommonData/data/Run2/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/VeryForwardData/data/RP_Box.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_000.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_001.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_002.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_003.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_004.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_005.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_020.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_021.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_022.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_023.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_024.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_025.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_100.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_101.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_102.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_103.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_104.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_105.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_120.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_121.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_122.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_123.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_124.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_125.xml', + 'Geometry/VeryForwardData/data/RP_Hybrid/v1/RP_Hybrid.xml', + 'Geometry/VeryForwardData/data/RP_Materials/v2/RP_Materials.xml', + 'Geometry/VeryForwardData/data/RP_Transformations.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_000.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_001.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_002.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_004.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_005.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_020.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_021.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_022.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_024.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_025.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_100.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_101.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_102.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_104.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_105.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_120.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_121.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_122.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_124.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_125.xml', + 'Geometry/VeryForwardData/data/RP_Device.xml', + 'Geometry/VeryForwardData/data/RP_Vertical_Device.xml', + 'Geometry/VeryForwardData/data/RP_Horizontal_Device.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Right_Station/v1/CTPPS_220_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Left_Station/v1/CTPPS_220_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Right_Station/v1/CTPPS_210_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Left_Station/v1/CTPPS_210_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_Stations_Assembly.xml', + 'Geometry/VeryForwardData/data/CTPPS_Cuts_Per_Region.xml', + 'Geometry/VeryForwardData/data/RP_Sensitive_Dets.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Materials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Transformations.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Parameters.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Station_Parameters.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Horizontal_Pot.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern1_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern2_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern2_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment5.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Detector_Assembly.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Sensitive_Dets_TimingHits.xml', + 'Geometry/VeryForwardData/data/ppstrackerMaterials/v2/ppstrackerMaterials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module/v3/CTPPS_Pixel_Module.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module_2x2/v3/CTPPS_Pixel_Module_2x2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_003.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_023.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_103.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_123.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Sens.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/RP_Dist_Beam_Cent.xml', + 'Geometry/EcalSimData/data/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsens/2021/v1/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil/2021/v1/CaloUtil.xml', + 'Geometry/MuonSimData/data/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/GEMSpecsFilter17.xml', + 'Geometry/GEMGeometryBuilder/data/v4/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/totemsensT2/2021/totemsensT2.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2021/v2/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/EcalSimData/data/ESProdCuts.xml', + 'Geometry/MuonSimData/data/muonProdCuts/2021/v1/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatPlus10PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatPlus10PercentXML_cfi.py new file mode 100644 index 0000000000000..ce736f4b9f258 --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatPlus10PercentXML_cfi.py @@ -0,0 +1,385 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2021Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v2/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v3/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2021/v3/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2017/v1/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase/2018/v1/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2021/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam/2021/v1/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml', + 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/FlatPlus10Percent/2021/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbar.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', + 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', + 'Geometry/TrackerCommonData/data/tibmodpar.xml', + 'Geometry/TrackerCommonData/data/tibmodule0.xml', + 'Geometry/TrackerCommonData/data/tibmodule0a.xml', + 'Geometry/TrackerCommonData/data/tibmodule0b.xml', + 'Geometry/TrackerCommonData/data/tibmodule2.xml', + 'Geometry/TrackerCommonData/data/tibstringpar.xml', + 'Geometry/TrackerCommonData/data/tibstring0ll.xml', + 'Geometry/TrackerCommonData/data/tibstring0lr.xml', + 'Geometry/TrackerCommonData/data/tibstring0ul.xml', + 'Geometry/TrackerCommonData/data/tibstring0ur.xml', + 'Geometry/TrackerCommonData/data/tibstring0.xml', + 'Geometry/TrackerCommonData/data/tibstring1ll.xml', + 'Geometry/TrackerCommonData/data/tibstring1lr.xml', + 'Geometry/TrackerCommonData/data/tibstring1ul.xml', + 'Geometry/TrackerCommonData/data/tibstring1ur.xml', + 'Geometry/TrackerCommonData/data/tibstring1.xml', + 'Geometry/TrackerCommonData/data/tibstring2ll.xml', + 'Geometry/TrackerCommonData/data/tibstring2lr.xml', + 'Geometry/TrackerCommonData/data/tibstring2ul.xml', + 'Geometry/TrackerCommonData/data/tibstring2ur.xml', + 'Geometry/TrackerCommonData/data/tibstring2.xml', + 'Geometry/TrackerCommonData/data/tibstring3ll.xml', + 'Geometry/TrackerCommonData/data/tibstring3lr.xml', + 'Geometry/TrackerCommonData/data/tibstring3ul.xml', + 'Geometry/TrackerCommonData/data/tibstring3ur.xml', + 'Geometry/TrackerCommonData/data/tibstring3.xml', + 'Geometry/TrackerCommonData/data/tiblayerpar.xml', + 'Geometry/TrackerCommonData/data/tiblayer0.xml', + 'Geometry/TrackerCommonData/data/tiblayer1.xml', + 'Geometry/TrackerCommonData/data/tiblayer2.xml', + 'Geometry/TrackerCommonData/data/tiblayer3.xml', + 'Geometry/TrackerCommonData/data/tib.xml', + 'Geometry/TrackerCommonData/data/tidmodpar.xml', + 'Geometry/TrackerCommonData/data/tidmodule0.xml', + 'Geometry/TrackerCommonData/data/tidmodule0r.xml', + 'Geometry/TrackerCommonData/data/tidmodule0l.xml', + 'Geometry/TrackerCommonData/data/tidmodule1.xml', + 'Geometry/TrackerCommonData/data/tidmodule1r.xml', + 'Geometry/TrackerCommonData/data/tidmodule1l.xml', + 'Geometry/TrackerCommonData/data/tidmodule2.xml', + 'Geometry/TrackerCommonData/data/tidringpar.xml', + 'Geometry/TrackerCommonData/data/tidring0.xml', + 'Geometry/TrackerCommonData/data/tidring0f.xml', + 'Geometry/TrackerCommonData/data/tidring0b.xml', + 'Geometry/TrackerCommonData/data/tidring1.xml', + 'Geometry/TrackerCommonData/data/tidring1f.xml', + 'Geometry/TrackerCommonData/data/tidring1b.xml', + 'Geometry/TrackerCommonData/data/tidring2.xml', + 'Geometry/TrackerCommonData/data/tid.xml', + 'Geometry/TrackerCommonData/data/tidf.xml', + 'Geometry/TrackerCommonData/data/tidb.xml', + 'Geometry/TrackerCommonData/data/tibtidservices.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', + 'Geometry/TrackerCommonData/data/tobmodpar.xml', + 'Geometry/TrackerCommonData/data/tobmodule0.xml', + 'Geometry/TrackerCommonData/data/tobmodule2.xml', + 'Geometry/TrackerCommonData/data/tobmodule4.xml', + 'Geometry/TrackerCommonData/data/tobrodpar.xml', + 'Geometry/TrackerCommonData/data/tobrod0c.xml', + 'Geometry/TrackerCommonData/data/tobrod0l.xml', + 'Geometry/TrackerCommonData/data/tobrod0h.xml', + 'Geometry/TrackerCommonData/data/tobrod0.xml', + 'Geometry/TrackerCommonData/data/tobrod1l.xml', + 'Geometry/TrackerCommonData/data/tobrod1h.xml', + 'Geometry/TrackerCommonData/data/tobrod1.xml', + 'Geometry/TrackerCommonData/data/tobrod2c.xml', + 'Geometry/TrackerCommonData/data/tobrod2l.xml', + 'Geometry/TrackerCommonData/data/tobrod2h.xml', + 'Geometry/TrackerCommonData/data/tobrod2.xml', + 'Geometry/TrackerCommonData/data/tobrod3l.xml', + 'Geometry/TrackerCommonData/data/tobrod3h.xml', + 'Geometry/TrackerCommonData/data/tobrod3.xml', + 'Geometry/TrackerCommonData/data/tobrod4c.xml', + 'Geometry/TrackerCommonData/data/tobrod4l.xml', + 'Geometry/TrackerCommonData/data/tobrod4h.xml', + 'Geometry/TrackerCommonData/data/tobrod4.xml', + 'Geometry/TrackerCommonData/data/tobrod5l.xml', + 'Geometry/TrackerCommonData/data/tobrod5h.xml', + 'Geometry/TrackerCommonData/data/tobrod5.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', + 'Geometry/TrackerCommonData/data/tecmodpar.xml', + 'Geometry/TrackerCommonData/data/tecmodule0.xml', + 'Geometry/TrackerCommonData/data/tecmodule0r.xml', + 'Geometry/TrackerCommonData/data/tecmodule0s.xml', + 'Geometry/TrackerCommonData/data/tecmodule1.xml', + 'Geometry/TrackerCommonData/data/tecmodule1r.xml', + 'Geometry/TrackerCommonData/data/tecmodule1s.xml', + 'Geometry/TrackerCommonData/data/tecmodule2.xml', + 'Geometry/TrackerCommonData/data/tecmodule3.xml', + 'Geometry/TrackerCommonData/data/tecmodule4.xml', + 'Geometry/TrackerCommonData/data/tecmodule4r.xml', + 'Geometry/TrackerCommonData/data/tecmodule4s.xml', + 'Geometry/TrackerCommonData/data/tecmodule5.xml', + 'Geometry/TrackerCommonData/data/tecmodule6.xml', + 'Geometry/TrackerCommonData/data/tecpetpar.xml', + 'Geometry/TrackerCommonData/data/tecring0.xml', + 'Geometry/TrackerCommonData/data/tecring1.xml', + 'Geometry/TrackerCommonData/data/tecring2.xml', + 'Geometry/TrackerCommonData/data/tecring3.xml', + 'Geometry/TrackerCommonData/data/tecring4.xml', + 'Geometry/TrackerCommonData/data/tecring5.xml', + 'Geometry/TrackerCommonData/data/tecring6.xml', + 'Geometry/TrackerCommonData/data/tecring0f.xml', + 'Geometry/TrackerCommonData/data/tecring1f.xml', + 'Geometry/TrackerCommonData/data/tecring2f.xml', + 'Geometry/TrackerCommonData/data/tecring3f.xml', + 'Geometry/TrackerCommonData/data/tecring4f.xml', + 'Geometry/TrackerCommonData/data/tecring5f.xml', + 'Geometry/TrackerCommonData/data/tecring6f.xml', + 'Geometry/TrackerCommonData/data/tecring0b.xml', + 'Geometry/TrackerCommonData/data/tecring1b.xml', + 'Geometry/TrackerCommonData/data/tecring2b.xml', + 'Geometry/TrackerCommonData/data/tecring3b.xml', + 'Geometry/TrackerCommonData/data/tecring4b.xml', + 'Geometry/TrackerCommonData/data/tecring5b.xml', + 'Geometry/TrackerCommonData/data/tecring6b.xml', + 'Geometry/TrackerCommonData/data/tecpetalf.xml', + 'Geometry/TrackerCommonData/data/tecpetalb.xml', + 'Geometry/TrackerCommonData/data/tecpetal0.xml', + 'Geometry/TrackerCommonData/data/tecpetal0f.xml', + 'Geometry/TrackerCommonData/data/tecpetal0b.xml', + 'Geometry/TrackerCommonData/data/tecpetal3.xml', + 'Geometry/TrackerCommonData/data/tecpetal3f.xml', + 'Geometry/TrackerCommonData/data/tecpetal3b.xml', + 'Geometry/TrackerCommonData/data/tecpetal6f.xml', + 'Geometry/TrackerCommonData/data/tecpetal6b.xml', + 'Geometry/TrackerCommonData/data/tecpetal8f.xml', + 'Geometry/TrackerCommonData/data/tecpetal8b.xml', + 'Geometry/TrackerCommonData/data/tecwheel/2021/v1/tecwheel.xml', + 'Geometry/TrackerCommonData/data/tecwheela.xml', + 'Geometry/TrackerCommonData/data/tecwheelb.xml', + 'Geometry/TrackerCommonData/data/tecwheelc.xml', + 'Geometry/TrackerCommonData/data/tecwheeld.xml', + 'Geometry/TrackerCommonData/data/tecwheel6.xml', + 'Geometry/TrackerCommonData/data/tecservices.xml', + 'Geometry/TrackerCommonData/data/tecbackplate.xml', + 'Geometry/TrackerCommonData/data/tec.xml', + 'Geometry/TrackerCommonData/data/Run2/tracker.xml', + 'Geometry/TrackerCommonData/data/trackerpixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', + 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', + 'Geometry/TrackerCommonData/data/trackertib.xml', + 'Geometry/TrackerCommonData/data/trackertid.xml', + 'Geometry/TrackerCommonData/data/trackertob.xml', + 'Geometry/TrackerCommonData/data/trackertec.xml', + 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', + 'Geometry/TrackerCommonData/data/trackerother.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', + 'Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/eecon.xml', + 'Geometry/EcalCommonData/data/escon.xml', + 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/EcalCommonData/data/eefixed/2021/v1/eefixed.xml', + 'Geometry/EcalCommonData/data/eehier.xml', + 'Geometry/EcalCommonData/data/eealgo.xml', + 'Geometry/EcalCommonData/data/esalgo.xml', + 'Geometry/EcalCommonData/data/eeF.xml', + 'Geometry/EcalCommonData/data/eeB.xml', + 'Geometry/EcalCommonData/data/ectkcable.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/hcal/PhaseI/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/2021/v1/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/2021/hcalRecNumbering.xml', + 'Geometry/MuonCommonData/data/mbCommon/2021/v2/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2021/v1/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2021/v1/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2021/v1/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml', + 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml', + 'Geometry/MuonCommonData/data/muonYoke/2021/v5/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2021/v2/mf.xml', + 'Geometry/MuonCommonData/data/rpcf/2015/v1/rpcf.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', + 'Geometry/MuonCommonData/data/csc/2021/v3/csc.xml', + 'Geometry/MuonCommonData/data/mfshield/2017/v2/mfshield.xml', + )+ + cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/2021/v3/muonNumbering.xml', + 'Geometry/ForwardCommonData/data/forward/2021/v1/forward.xml', + 'Geometry/ForwardCommonData/data/totemt2/2021/v1/totemt2.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2021/v1/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm/2021/v1/brm.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials/2021/v1/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc/2021/v1/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi/2021/v2/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml', + 'Geometry/ForwardCommonData/data/Run2/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/VeryForwardData/data/RP_Box.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_000.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_001.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_002.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_003.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_004.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_005.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_020.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_021.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_022.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_023.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_024.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_025.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_100.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_101.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_102.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_103.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_104.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_105.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_120.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_121.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_122.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_123.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_124.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_125.xml', + 'Geometry/VeryForwardData/data/RP_Hybrid/v1/RP_Hybrid.xml', + 'Geometry/VeryForwardData/data/RP_Materials/v2/RP_Materials.xml', + 'Geometry/VeryForwardData/data/RP_Transformations.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_000.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_001.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_002.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_004.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_005.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_020.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_021.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_022.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_024.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_025.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_100.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_101.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_102.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_104.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_105.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_120.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_121.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_122.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_124.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_125.xml', + 'Geometry/VeryForwardData/data/RP_Device.xml', + 'Geometry/VeryForwardData/data/RP_Vertical_Device.xml', + 'Geometry/VeryForwardData/data/RP_Horizontal_Device.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Right_Station/v1/CTPPS_220_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Left_Station/v1/CTPPS_220_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Right_Station/v1/CTPPS_210_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Left_Station/v1/CTPPS_210_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_Stations_Assembly.xml', + 'Geometry/VeryForwardData/data/CTPPS_Cuts_Per_Region.xml', + 'Geometry/VeryForwardData/data/RP_Sensitive_Dets.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Materials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Transformations.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Parameters.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Station_Parameters.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Horizontal_Pot.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern1_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern2_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern2_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment5.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Detector_Assembly.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Sensitive_Dets_TimingHits.xml', + 'Geometry/VeryForwardData/data/ppstrackerMaterials/v2/ppstrackerMaterials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module/v3/CTPPS_Pixel_Module.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module_2x2/v3/CTPPS_Pixel_Module_2x2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_003.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_023.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_103.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_123.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Sens.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/RP_Dist_Beam_Cent.xml', + 'Geometry/EcalSimData/data/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsens/2021/v1/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil/2021/v1/CaloUtil.xml', + 'Geometry/MuonSimData/data/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/GEMSpecsFilter17.xml', + 'Geometry/GEMGeometryBuilder/data/v4/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/totemsensT2/2021/totemsensT2.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2021/v2/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/EcalSimData/data/ESProdCuts.xml', + 'Geometry/MuonSimData/data/muonProdCuts/2021/v1/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021XML_cfi.py index 550b40ddf97b8..5ed098f260ba3 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021XML_cfi.py @@ -138,7 +138,7 @@ 'Geometry/TrackerCommonData/data/tobrod5l.xml', 'Geometry/TrackerCommonData/data/tobrod5h.xml', 'Geometry/TrackerCommonData/data/tobrod5.xml', - 'Geometry/TrackerCommonData/data/v2/tob.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', 'Geometry/TrackerCommonData/data/tecmaterial/2021/v1/tecmaterial.xml', 'Geometry/TrackerCommonData/data/tecmodpar.xml', 'Geometry/TrackerCommonData/data/tecmodule0.xml', @@ -209,19 +209,19 @@ 'Geometry/TrackerCommonData/data/trackerother.xml', 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', - 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', - 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI.xml', + 'Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml', 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/eecon.xml', + 'Geometry/EcalCommonData/data/escon.xml', 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', 'Geometry/EcalCommonData/data/ebalgo.xml', - 'Geometry/EcalCommonData/data/ebcon.xml', 'Geometry/EcalCommonData/data/ebrot.xml', - 'Geometry/EcalCommonData/data/eecon.xml', 'Geometry/EcalCommonData/data/eefixed/2021/v1/eefixed.xml', 'Geometry/EcalCommonData/data/eehier.xml', 'Geometry/EcalCommonData/data/eealgo.xml', - 'Geometry/EcalCommonData/data/escon.xml', 'Geometry/EcalCommonData/data/esalgo.xml', 'Geometry/EcalCommonData/data/eeF.xml', 'Geometry/EcalCommonData/data/eeB.xml', @@ -231,10 +231,10 @@ 'Geometry/HcalCommonData/data/hcalcablealgo.xml', 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', - 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', - 'Geometry/HcalCommonData/data/hcalSimNumbering/2021/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/2021/v1/hcalSimNumbering.xml', 'Geometry/HcalCommonData/data/hcalRecNumbering/2021/hcalRecNumbering.xml', 'Geometry/MuonCommonData/data/mbCommon/2021/v2/mbCommon.xml', 'Geometry/MuonCommonData/data/mb1/2021/v1/mb1.xml', @@ -291,8 +291,8 @@ 'Geometry/VeryForwardData/data/RP_Box/RP_Box_123.xml', 'Geometry/VeryForwardData/data/RP_Box/RP_Box_124.xml', 'Geometry/VeryForwardData/data/RP_Box/RP_Box_125.xml', - 'Geometry/VeryForwardData/data/RP_Hybrid.xml', - 'Geometry/VeryForwardData/data/RP_Materials.xml', + 'Geometry/VeryForwardData/data/RP_Hybrid/v1/RP_Hybrid.xml', + 'Geometry/VeryForwardData/data/RP_Materials/v2/RP_Materials.xml', 'Geometry/VeryForwardData/data/RP_Transformations.xml', 'Geometry/VeryForwardData/data/RP_Detectors_Assembly.xml', 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_000.xml', @@ -318,10 +318,10 @@ 'Geometry/VeryForwardData/data/RP_Device.xml', 'Geometry/VeryForwardData/data/RP_Vertical_Device.xml', 'Geometry/VeryForwardData/data/RP_Horizontal_Device.xml', - 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Right_Station.xml', - 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Left_Station.xml', - 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Right_Station.xml', - 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Right_Station/v1/CTPPS_220_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Left_Station/v1/CTPPS_220_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Right_Station/v1/CTPPS_210_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Left_Station/v1/CTPPS_210_Left_Station.xml', 'Geometry/VeryForwardData/data/CTPPS_Stations_Assembly.xml', 'Geometry/VeryForwardData/data/CTPPS_Cuts_Per_Region.xml', 'Geometry/VeryForwardData/data/RP_Sensitive_Dets.xml', @@ -348,9 +348,9 @@ 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane4.xml', 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Detector_Assembly.xml', 'Geometry/VeryForwardData/data/CTPPS_Diamond_Sensitive_Dets_TimingHits.xml', - 'Geometry/VeryForwardData/data/ppstrackerMaterials/v1/ppstrackerMaterials.xml', - 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module/v2/CTPPS_Pixel_Module.xml', - 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module_2x2/v2/CTPPS_Pixel_Module_2x2.xml', + 'Geometry/VeryForwardData/data/ppstrackerMaterials/v2/ppstrackerMaterials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module/v3/CTPPS_Pixel_Module.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module_2x2/v3/CTPPS_Pixel_Module_2x2.xml', 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_003.xml', 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_023.xml', 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_103.xml', @@ -358,11 +358,11 @@ 'Geometry/VeryForwardData/data/CTPPS_Pixel_Sens.xml', 'Geometry/VeryForwardData/data/CTPPS_2018/RP_Dist_Beam_Cent.xml', 'Geometry/EcalSimData/data/ecalsens.xml', - 'Geometry/HcalCommonData/data/hcalsenspmf.xml', + 'Geometry/HcalCommonData/data/hcalsens/2021/v1/hcalsenspmf.xml', 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2021/v1/CaloUtil.xml', 'Geometry/MuonSimData/data/v2/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', @@ -373,11 +373,11 @@ 'Geometry/ForwardCommonData/data/brmsens.xml', 'Geometry/ForwardSimData/data/totemsensT2/2021/totemsensT2.xml', 'Geometry/ForwardSimData/data/zdcsens.xml', - 'Geometry/HcalSimData/data/HcalProdCuts.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2021/v2/HcalProdCuts.xml', 'Geometry/EcalSimData/data/EcalProdCuts.xml', 'Geometry/EcalSimData/data/ESProdCuts.xml', 'Geometry/MuonSimData/data/muonProdCuts/2021/v1/muonProdCuts.xml', - 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml', 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', 'Geometry/CMSCommonData/data/FieldParameters.xml', ), diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021ZeroMaterialXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021ZeroMaterialXML_cfi.py index 519a73894e888..11876df440471 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021ZeroMaterialXML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021ZeroMaterialXML_cfi.py @@ -138,7 +138,7 @@ 'Geometry/TrackerCommonData/data/tobrod5l.xml', 'Geometry/TrackerCommonData/data/tobrod5h.xml', 'Geometry/TrackerCommonData/data/tobrod5.xml', - 'Geometry/TrackerCommonData/data/v2/tob.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/tecmaterial.xml', 'Geometry/TrackerCommonData/data/tecmodpar.xml', 'Geometry/TrackerCommonData/data/tecmodule0.xml', @@ -209,18 +209,19 @@ 'Geometry/TrackerCommonData/data/trackerother.xml', 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', - 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', + 'Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml', 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/eecon.xml', + 'Geometry/EcalCommonData/data/escon.xml', 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', 'Geometry/EcalCommonData/data/ebalgo.xml', - 'Geometry/EcalCommonData/data/ebcon.xml', 'Geometry/EcalCommonData/data/ebrot.xml', - 'Geometry/EcalCommonData/data/eecon.xml', 'Geometry/EcalCommonData/data/eefixed/2021/v1/eefixed.xml', 'Geometry/EcalCommonData/data/eehier.xml', 'Geometry/EcalCommonData/data/eealgo.xml', - 'Geometry/EcalCommonData/data/escon.xml', 'Geometry/EcalCommonData/data/esalgo.xml', 'Geometry/EcalCommonData/data/eeF.xml', 'Geometry/EcalCommonData/data/eeB.xml', @@ -230,10 +231,10 @@ 'Geometry/HcalCommonData/data/hcalcablealgo.xml', 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', - 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', - 'Geometry/HcalCommonData/data/hcalSimNumbering/2021/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/2021/v1/hcalSimNumbering.xml', 'Geometry/HcalCommonData/data/hcalRecNumbering/2021/hcalRecNumbering.xml', 'Geometry/MuonCommonData/data/mbCommon/2021/v2/mbCommon.xml', 'Geometry/MuonCommonData/data/mb1/2021/v1/mb1.xml', @@ -290,8 +291,8 @@ 'Geometry/VeryForwardData/data/RP_Box/RP_Box_123.xml', 'Geometry/VeryForwardData/data/RP_Box/RP_Box_124.xml', 'Geometry/VeryForwardData/data/RP_Box/RP_Box_125.xml', - 'Geometry/VeryForwardData/data/RP_Hybrid.xml', - 'Geometry/VeryForwardData/data/RP_Materials.xml', + 'Geometry/VeryForwardData/data/RP_Hybrid/v1/RP_Hybrid.xml', + 'Geometry/VeryForwardData/data/RP_Materials/v2/RP_Materials.xml', 'Geometry/VeryForwardData/data/RP_Transformations.xml', 'Geometry/VeryForwardData/data/RP_Detectors_Assembly.xml', 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_000.xml', @@ -317,10 +318,10 @@ 'Geometry/VeryForwardData/data/RP_Device.xml', 'Geometry/VeryForwardData/data/RP_Vertical_Device.xml', 'Geometry/VeryForwardData/data/RP_Horizontal_Device.xml', - 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Right_Station.xml', - 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Left_Station.xml', - 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Right_Station.xml', - 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Right_Station/v1/CTPPS_220_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Left_Station/v1/CTPPS_220_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Right_Station/v1/CTPPS_210_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Left_Station/v1/CTPPS_210_Left_Station.xml', 'Geometry/VeryForwardData/data/CTPPS_Stations_Assembly.xml', 'Geometry/VeryForwardData/data/CTPPS_Cuts_Per_Region.xml', 'Geometry/VeryForwardData/data/RP_Sensitive_Dets.xml', @@ -347,9 +348,9 @@ 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane4.xml', 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Detector_Assembly.xml', 'Geometry/VeryForwardData/data/CTPPS_Diamond_Sensitive_Dets_TimingHits.xml', - 'Geometry/VeryForwardData/data/ppstrackerMaterials/v1/ppstrackerMaterials.xml', - 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module/v2/CTPPS_Pixel_Module.xml', - 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module_2x2/v2/CTPPS_Pixel_Module_2x2.xml', + 'Geometry/VeryForwardData/data/ppstrackerMaterials/v2/ppstrackerMaterials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module/v3/CTPPS_Pixel_Module.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module_2x2/v3/CTPPS_Pixel_Module_2x2.xml', 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_003.xml', 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_023.xml', 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_103.xml', @@ -357,11 +358,11 @@ 'Geometry/VeryForwardData/data/CTPPS_Pixel_Sens.xml', 'Geometry/VeryForwardData/data/CTPPS_2018/RP_Dist_Beam_Cent.xml', 'Geometry/EcalSimData/data/ecalsens.xml', - 'Geometry/HcalCommonData/data/hcalsenspmf.xml', + 'Geometry/HcalCommonData/data/hcalsens/2021/v1/hcalsenspmf.xml', 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2021/v1/CaloUtil.xml', 'Geometry/MuonSimData/data/v2/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', @@ -372,11 +373,11 @@ 'Geometry/ForwardCommonData/data/brmsens.xml', 'Geometry/ForwardSimData/data/totemsensT2/2021/totemsensT2.xml', 'Geometry/ForwardSimData/data/zdcsens.xml', - 'Geometry/HcalSimData/data/HcalProdCuts.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2021/v2/HcalProdCuts.xml', 'Geometry/EcalSimData/data/EcalProdCuts.xml', 'Geometry/EcalSimData/data/ESProdCuts.xml', 'Geometry/MuonSimData/data/muonProdCuts/2021/v1/muonProdCuts.xml', - 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml', 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', 'Geometry/CMSCommonData/data/FieldParameters.xml', ), diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D49XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D49XML_cfi.py index a06a5f5807b50..a075fa8dd6573 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D49XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D49XML_cfi.py @@ -104,7 +104,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D50XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D50XML_cfi.py index 65a8a6789303e..e18bceb5d90f3 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D50XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D50XML_cfi.py @@ -104,7 +104,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D60XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D60XML_cfi.py index ab21189359c2e..c88be18b41ad3 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D60XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D60XML_cfi.py @@ -53,7 +53,7 @@ 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', - 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml', 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/hcalRecNumbering.xml', @@ -109,7 +109,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v5c/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/ForwardSimData/data/hfnosesens.xml', 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D64XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D64XML_cfi.py index 101cf2d5996c4..779da28ba5e8f 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D64XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D64XML_cfi.py @@ -104,7 +104,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D65XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D65XML_cfi.py index dd9c3f393257d..763def4e2c365 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D65XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D65XML_cfi.py @@ -103,7 +103,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D66XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D66XML_cfi.py index 1c4e62e448d56..0530b9131a5ba 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D66XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D66XML_cfi.py @@ -104,7 +104,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D67XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D67XML_cfi.py index 153f0514f4284..a2bd966647a94 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D67XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D67XML_cfi.py @@ -104,7 +104,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/MuonSimData/data/PhaseII/v2/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D68XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D68XML_cfi.py index b9dbd14f0199f..ddfca5d3e5869 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D68XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D68XML_cfi.py @@ -104,7 +104,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D69XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D69XML_cfi.py index 0f91219bc09c9..5e22a8890e797 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D69XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D69XML_cfi.py @@ -109,7 +109,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v5/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/ForwardSimData/data/hfnosesens.xml', 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D70XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D70XML_cfi.py index f91680ea07bb9..01ffc45747393 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D70XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D70XML_cfi.py @@ -105,7 +105,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D71XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D71XML_cfi.py index d96ecd3aa728c..6713131a7846a 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D71XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D71XML_cfi.py @@ -53,7 +53,7 @@ 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', - 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml', 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/hcalRecNumbering.xml', @@ -105,7 +105,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D72XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D72XML_cfi.py index 651c09ab6b86c..d07d04eb3bc3f 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D72XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D72XML_cfi.py @@ -104,7 +104,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D73XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D73XML_cfi.py deleted file mode 100644 index 49853ad7d5b89..0000000000000 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D73XML_cfi.py +++ /dev/null @@ -1,129 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# This config was generated automatically using generate2026Geometry.py -# If you notice a mistake, please update the generating script, not just this config - -XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", - geomXMLFiles = cms.vstring( - 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', - 'Geometry/CMSCommonData/data/rotations.xml', - 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', - 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', - 'Geometry/CMSCommonData/data/cms/2026/v4/cms.xml', - 'Geometry/CMSCommonData/data/cmsMother.xml', - 'Geometry/CMSCommonData/data/eta3/etaMax.xml', - 'Geometry/CMSCommonData/data/cmsTracker.xml', - 'Geometry/CMSCommonData/data/caloBase/2026/v3/caloBase.xml', - 'Geometry/CMSCommonData/data/cmsCalo.xml', - 'Geometry/CMSCommonData/data/muonBase/2026/v4/muonBase.xml', - 'Geometry/CMSCommonData/data/cmsMuon.xml', - 'Geometry/CMSCommonData/data/mgnt.xml', - 'Geometry/CMSCommonData/data/beampipe/2026/v2/beampipe.xml', - 'Geometry/CMSCommonData/data/cmsBeam/2026/v1/cmsBeam.xml', - 'Geometry/CMSCommonData/data/muonMB.xml', - 'Geometry/CMSCommonData/data/muonMagnet.xml', - 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml', - 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml', - 'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml', - 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', - 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/pixfwd.xml', - 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/pixbar.xml', - 'Geometry/TrackerCommonData/data/trackermaterial.xml', - 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml', - 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker800_2020_07/tracker.xml', - 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker615/pixel.xml', - 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml', - 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml', - 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerStructureTopology.xml', - 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613/pixelStructureTopology.xml', - 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/trackersens.xml', - 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/pixelsens.xml', - 'Geometry/TrackerRecoData/data/PhaseII/OuterTracker616_2020_04/trackerRecoMaterial.xml', - 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII.xml', - 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/trackerProdCuts.xml', - 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/pixelProdCuts.xml', - 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', - 'Geometry/EcalCommonData/data/eregalgo/2026/v2/eregalgo.xml', - 'Geometry/EcalCommonData/data/ectkcable/2026/v1/ectkcable.xml', - 'Geometry/EcalCommonData/data/ectkcablemat/2026/v1/ectkcablemat.xml', - 'Geometry/EcalCommonData/data/ebalgo.xml', - 'Geometry/EcalCommonData/data/ebcon.xml', - 'Geometry/EcalCommonData/data/ebrot.xml', - 'Geometry/HcalCommonData/data/hcalrotations.xml', - 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', - 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', - 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', - 'Geometry/HcalCommonData/data/hcalouteralgo.xml', - 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', - 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml', - 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/hcalRecNumbering.xml', - 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', - 'Geometry/HGCalCommonData/data/hgcalMaterial/v1/hgcalMaterial.xml', - 'Geometry/HGCalCommonData/data/hgcal/v12/hgcal.xml', - 'Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalcell.xml', - 'Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalwafer.xml', - 'Geometry/HGCalCommonData/data/hgcalEE/v12/hgcalEE.xml', - 'Geometry/HGCalCommonData/data/hgcalHEsil/v12/hgcalHEsil.xml', - 'Geometry/HGCalCommonData/data/hgcalHEmix/v12/hgcalHEmix.xml', - 'Geometry/HGCalCommonData/data/hgcalCons/v12/hgcalCons.xml', - 'Geometry/MuonCommonData/data/mbCommon/2021/v1/mbCommon.xml', - 'Geometry/MuonCommonData/data/mb1/2015/v2/mb1.xml', - 'Geometry/MuonCommonData/data/mb2/2015/v2/mb2.xml', - 'Geometry/MuonCommonData/data/mb3/2015/v2/mb3.xml', - 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml', - 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml', - 'Geometry/MuonCommonData/data/muonYoke/2026/v1/muonYoke.xml', - 'Geometry/MuonCommonData/data/mf/2026/v5/mf.xml', - 'Geometry/MuonCommonData/data/csc/2021/v2/csc.xml', - 'Geometry/MuonCommonData/data/rpcf/2026/v3/rpcf.xml', - 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', - 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', - 'Geometry/MuonCommonData/data/gem21/TDR_Dev/gem21.xml', - 'Geometry/MuonCommonData/data/mfshield/2026/v1/mfshield.xml', - 'Geometry/MuonCommonData/data/me0/TDR_Dev/v3/me0.xml', - 'Geometry/ForwardCommonData/data/forwardshield/2026/v2/forwardshield.xml', - 'Geometry/ForwardCommonData/data/brmrotations.xml', - 'Geometry/ForwardCommonData/data/PostLS2/brm.xml', - 'Geometry/ForwardCommonData/data/zdcmaterials.xml', - 'Geometry/ForwardCommonData/data/lumimaterials.xml', - 'Geometry/ForwardCommonData/data/zdcrotations.xml', - 'Geometry/ForwardCommonData/data/lumirotations.xml', - 'Geometry/ForwardCommonData/data/zdc.xml', - 'Geometry/ForwardCommonData/data/zdclumi.xml', - 'Geometry/ForwardCommonData/data/cmszdc.xml', - 'Geometry/MTDCommonData/data/mtdMaterial/v2/mtdMaterial.xml', - 'Geometry/MTDCommonData/data/btl/v1/btl.xml', - 'Geometry/MTDCommonData/data/etl/v5/etl.xml', - 'Geometry/MTDCommonData/data/mtdParameters/v3/mtdStructureTopology.xml', - 'Geometry/MTDCommonData/data/mtdParameters/v2/mtdParameters.xml', - )+ - cms.vstring( - 'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/v1/muonNumbering.xml', - 'Geometry/EcalSimData/data/PhaseII/ecalsens.xml', - 'Geometry/HcalCommonData/data/hcalsens/NoHE/hcalsenspmf.xml', - 'Geometry/HcalSimData/data/hf.xml', - 'Geometry/HcalSimData/data/hfpmt.xml', - 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', - 'Geometry/HGCalSimData/data/hgcsensv9.xml', - 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', - 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', - 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', - 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', - 'Geometry/RPCGeometryBuilder/data/2026/v1/RPCSpecs.xml', - 'Geometry/GEMGeometryBuilder/data/v7/GEMSpecsFilter.xml', - 'Geometry/GEMGeometryBuilder/data/v7/GEMSpecs.xml', - 'Geometry/ForwardCommonData/data/brmsens.xml', - 'Geometry/ForwardSimData/data/zdcsens.xml', - 'Geometry/MTDSimData/data/v2/mtdsens.xml', - 'Geometry/HcalSimData/data/HcalProdCuts/2021/v1/HcalProdCuts.xml', - 'Geometry/EcalSimData/data/EcalProdCuts.xml', - 'Geometry/HGCalSimData/data/hgcProdCutsv9.xml', - 'Geometry/MuonSimData/data/PhaseII/muonProdCuts.xml', - 'Geometry/ForwardSimData/data/zdcProdCuts.xml', - 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', - 'Geometry/MTDSimData/data/v2/mtdProdCuts.xml', - 'Geometry/CMSCommonData/data/FieldParameters.xml', - ), - rootNodeName = cms.string('cms:OCMS') -) diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D74XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D74XML_cfi.py index 6f504d6dcbe97..c34ab790dbc1d 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D74XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D74XML_cfi.py @@ -53,7 +53,7 @@ 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', - 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml', 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/hcalRecNumbering.xml', @@ -105,7 +105,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/MuonSimData/data/PhaseII/v2/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D75XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D75XML_cfi.py new file mode 100644 index 0000000000000..1f08ffced3064 --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D75XML_cfi.py @@ -0,0 +1,130 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2026/v5/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase/2026/v5/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2026/v3/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam/2026/v1/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml', + 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml', + 'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/pixbar.xml', + 'Geometry/TrackerCommonData/data/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker800_2020_07/tracker.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker615/pixel.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerStructureTopology.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613/pixelStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/trackersens.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/pixelsens.xml', + 'Geometry/TrackerRecoData/data/PhaseII/OuterTracker616_2020_04/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/pixelProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/EcalCommonData/data/eregalgo/2026/v2/eregalgo.xml', + 'Geometry/EcalCommonData/data/ectkcable/2026/v1/ectkcable.xml', + 'Geometry/EcalCommonData/data/ectkcablemat/2026/v1/ectkcablemat.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/hcalRecNumbering.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v1/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcal/v14/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcalEE/v14/hgcalEE.xml', + 'Geometry/HGCalCommonData/data/hgcalHEsil/v14/hgcalHEsil.xml', + 'Geometry/HGCalCommonData/data/hgcalHEmix/v14/hgcalHEmix.xml', + 'Geometry/HGCalCommonData/data/hgcalCons/v14/hgcalCons.xml', + 'Geometry/HGCalCommonData/data/hgcalConsData/v13/hgcalConsData.xml', + 'Geometry/MuonCommonData/data/mbCommon/2021/v1/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2015/v2/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2015/v2/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2015/v2/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml', + 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml', + 'Geometry/MuonCommonData/data/muonYoke/2026/v1/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2026/v6/mf.xml', + 'Geometry/MuonCommonData/data/csc/2021/v2/csc.xml', + 'Geometry/MuonCommonData/data/rpcf/2026/v3/rpcf.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', + 'Geometry/MuonCommonData/data/gem21/TDR_Dev/gem21.xml', + 'Geometry/MuonCommonData/data/mfshield/2026/v4/mfshield.xml', + 'Geometry/MuonCommonData/data/me0/TDR_Dev/v3/me0.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2026/v4/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm/2026/v1/brm.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml', + 'Geometry/MTDCommonData/data/mtdMaterial/v2/mtdMaterial.xml', + 'Geometry/MTDCommonData/data/btl/v1/btl.xml', + 'Geometry/MTDCommonData/data/etl/v5/etl.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v3/mtdStructureTopology.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v2/mtdParameters.xml', + )+ + cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/v1/muonNumbering.xml', + 'Geometry/EcalSimData/data/PhaseII/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsens/NoHE/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml', + 'Geometry/HGCalSimData/data/hgcsensv9.xml', + 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/2026/v1/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/v7/GEMSpecsFilter.xml', + 'Geometry/GEMGeometryBuilder/data/v7/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/MTDSimData/data/v2/mtdsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2021/v1/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/HGCalSimData/data/hgcProdCutsv9.xml', + 'Geometry/MuonSimData/data/PhaseII/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/MTDSimData/data/v2/mtdProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D76XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D76XML_cfi.py new file mode 100644 index 0000000000000..4a2cee92e3932 --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D76XML_cfi.py @@ -0,0 +1,130 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2026/v5/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase/2026/v5/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2026/v3/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam/2026/v1/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml', + 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml', + 'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/pixbar.xml', + 'Geometry/TrackerCommonData/data/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker800_2020_07/tracker.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker615/pixel.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerStructureTopology.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613/pixelStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/trackersens.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/pixelsens.xml', + 'Geometry/TrackerRecoData/data/PhaseII/OuterTracker616_2020_04/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/pixelProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/EcalCommonData/data/eregalgo/2026/v2/eregalgo.xml', + 'Geometry/EcalCommonData/data/ectkcable/2026/v1/ectkcable.xml', + 'Geometry/EcalCommonData/data/ectkcablemat/2026/v1/ectkcablemat.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/hcalRecNumbering.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v1/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcal/v14/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcalEE/v14/hgcalEE.xml', + 'Geometry/HGCalCommonData/data/hgcalHEsil/v14/hgcalHEsil.xml', + 'Geometry/HGCalCommonData/data/hgcalHEmix/v14/hgcalHEmix.xml', + 'Geometry/HGCalCommonData/data/hgcalCons/v14/hgcalCons.xml', + 'Geometry/HGCalCommonData/data/hgcalConsData/v13/hgcalConsData.xml', + 'Geometry/MuonCommonData/data/mbCommon/2021/v1/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2015/v2/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2015/v2/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2015/v2/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml', + 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml', + 'Geometry/MuonCommonData/data/muonYoke/2026/v1/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2026/v7/mf.xml', + 'Geometry/MuonCommonData/data/csc/2021/v2/csc.xml', + 'Geometry/MuonCommonData/data/rpcf/2026/v3/rpcf.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', + 'Geometry/MuonCommonData/data/gem21/TDR_Eta16/gem21.xml', + 'Geometry/MuonCommonData/data/mfshield/2026/v5/mfshield.xml', + 'Geometry/MuonCommonData/data/ge0/TDR_Dev/v3/ge0.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2026/v4/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm/2026/v1/brm.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml', + 'Geometry/MTDCommonData/data/mtdMaterial/v2/mtdMaterial.xml', + 'Geometry/MTDCommonData/data/btl/v1/btl.xml', + 'Geometry/MTDCommonData/data/etl/v5/etl.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v3/mtdStructureTopology.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v2/mtdParameters.xml', + )+ + cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/v3/muonNumbering.xml', + 'Geometry/EcalSimData/data/PhaseII/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsens/NoHE/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml', + 'Geometry/HGCalSimData/data/hgcsensv9.xml', + 'Geometry/MuonSimData/data/PhaseII/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/2026/v1/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecsFilter.xml', + 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/MTDSimData/data/v2/mtdsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2021/v1/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/HGCalSimData/data/hgcProdCutsv9.xml', + 'Geometry/MuonSimData/data/PhaseII/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/MTDSimData/data/v2/mtdProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D77XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D77XML_cfi.py new file mode 100644 index 0000000000000..00f3f4d417b32 --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D77XML_cfi.py @@ -0,0 +1,130 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2026/v5/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase/2026/v5/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2026/v3/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam/2026/v1/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml', + 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml', + 'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/pixbar.xml', + 'Geometry/TrackerCommonData/data/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/tracker.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixel.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerStructureTopology.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelsens.xml', + 'Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII/v1/trackingMaterialGroups_ForPhaseII.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/EcalCommonData/data/eregalgo/2026/v2/eregalgo.xml', + 'Geometry/EcalCommonData/data/ectkcable/2026/v1/ectkcable.xml', + 'Geometry/EcalCommonData/data/ectkcablemat/2026/v1/ectkcablemat.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/hcalRecNumbering.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v1/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcal/v14/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcalEE/v14/hgcalEE.xml', + 'Geometry/HGCalCommonData/data/hgcalHEsil/v14/hgcalHEsil.xml', + 'Geometry/HGCalCommonData/data/hgcalHEmix/v14/hgcalHEmix.xml', + 'Geometry/HGCalCommonData/data/hgcalCons/v14/hgcalCons.xml', + 'Geometry/HGCalCommonData/data/hgcalConsData/v13/hgcalConsData.xml', + 'Geometry/MuonCommonData/data/mbCommon/2021/v1/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2015/v2/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2015/v2/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2015/v2/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml', + 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml', + 'Geometry/MuonCommonData/data/muonYoke/2026/v1/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2026/v7/mf.xml', + 'Geometry/MuonCommonData/data/csc/2021/v2/csc.xml', + 'Geometry/MuonCommonData/data/rpcf/2026/v3/rpcf.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', + 'Geometry/MuonCommonData/data/gem21/TDR_Eta16/gem21.xml', + 'Geometry/MuonCommonData/data/mfshield/2026/v5/mfshield.xml', + 'Geometry/MuonCommonData/data/ge0/TDR_Dev/v3/ge0.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2026/v4/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm/2026/v1/brm.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml', + 'Geometry/MTDCommonData/data/mtdMaterial/v2/mtdMaterial.xml', + 'Geometry/MTDCommonData/data/btl/v1/btl.xml', + 'Geometry/MTDCommonData/data/etl/v5/etl.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v3/mtdStructureTopology.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v2/mtdParameters.xml', + )+ + cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/v3/muonNumbering.xml', + 'Geometry/EcalSimData/data/PhaseII/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsens/NoHE/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml', + 'Geometry/HGCalSimData/data/hgcsensv9.xml', + 'Geometry/MuonSimData/data/PhaseII/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/2026/v1/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecsFilter.xml', + 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/MTDSimData/data/v2/mtdsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2021/v1/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/HGCalSimData/data/hgcProdCutsv9.xml', + 'Geometry/MuonSimData/data/PhaseII/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/MTDSimData/data/v2/mtdProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D78XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D78XML_cfi.py new file mode 100644 index 0000000000000..6076fa279011b --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D78XML_cfi.py @@ -0,0 +1,130 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2026/v5/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase/2026/v5/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2026/v3/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam/2026/v1/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml', + 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml', + 'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/pixbar.xml', + 'Geometry/TrackerCommonData/data/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker800_2020_07/tracker.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker615/pixel.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerStructureTopology.xml', + 'Geometry/TrackerCommonData/data/PhaseII/InnerTracker621_50x50_2020_07/pixelStructureTopology.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/trackersens.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/pixelsens.xml', + 'Geometry/TrackerRecoData/data/PhaseII/OuterTracker616_2020_04/trackerRecoMaterial.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/pixelProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/EcalCommonData/data/eregalgo/2026/v2/eregalgo.xml', + 'Geometry/EcalCommonData/data/ectkcable/2026/v1/ectkcable.xml', + 'Geometry/EcalCommonData/data/ectkcablemat/2026/v1/ectkcablemat.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/hcalRecNumbering.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v1/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcal/v14/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcalEE/v14/hgcalEE.xml', + 'Geometry/HGCalCommonData/data/hgcalHEsil/v14/hgcalHEsil.xml', + 'Geometry/HGCalCommonData/data/hgcalHEmix/v14/hgcalHEmix.xml', + 'Geometry/HGCalCommonData/data/hgcalCons/v14/hgcalCons.xml', + 'Geometry/HGCalCommonData/data/hgcalConsData/v13/hgcalConsData.xml', + 'Geometry/MuonCommonData/data/mbCommon/2021/v1/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2015/v2/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2015/v2/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2015/v2/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml', + 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml', + 'Geometry/MuonCommonData/data/muonYoke/2026/v1/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2026/v7/mf.xml', + 'Geometry/MuonCommonData/data/csc/2021/v2/csc.xml', + 'Geometry/MuonCommonData/data/rpcf/2026/v3/rpcf.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', + 'Geometry/MuonCommonData/data/gem21/TDR_Eta16/gem21.xml', + 'Geometry/MuonCommonData/data/mfshield/2026/v5/mfshield.xml', + 'Geometry/MuonCommonData/data/ge0/TDR_Dev/v3/ge0.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2026/v4/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm/2026/v1/brm.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml', + 'Geometry/MTDCommonData/data/mtdMaterial/v2/mtdMaterial.xml', + 'Geometry/MTDCommonData/data/btl/v1/btl.xml', + 'Geometry/MTDCommonData/data/etl/v5/etl.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v3/mtdStructureTopology.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v2/mtdParameters.xml', + )+ + cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/v3/muonNumbering.xml', + 'Geometry/EcalSimData/data/PhaseII/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsens/NoHE/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml', + 'Geometry/HGCalSimData/data/hgcsensv9.xml', + 'Geometry/MuonSimData/data/PhaseII/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/2026/v1/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecsFilter.xml', + 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/MTDSimData/data/v2/mtdsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2021/v1/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/HGCalSimData/data/hgcProdCutsv9.xml', + 'Geometry/MuonSimData/data/PhaseII/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/MTDSimData/data/v2/mtdProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D79XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D79XML_cfi.py new file mode 100644 index 0000000000000..f667652fd5921 --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D79XML_cfi.py @@ -0,0 +1,129 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2026/v5/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase/2026/v5/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2026/v3/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam/2026/v1/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml', + 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml', + 'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/pixbar.xml', + 'Geometry/TrackerCommonData/data/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker800_2020_07/tracker.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker700/pixel.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerStructureTopology.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker700/pixelStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/trackersens.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker700/pixelsens.xml', + 'Geometry/TrackerRecoData/data/PhaseII/TiltedTracker700/trackerRecoMaterial.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker700/pixelProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/EcalCommonData/data/eregalgo/2026/v2/eregalgo.xml', + 'Geometry/EcalCommonData/data/ectkcable/2026/v1/ectkcable.xml', + 'Geometry/EcalCommonData/data/ectkcablemat/2026/v1/ectkcablemat.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/hcalRecNumbering.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v1/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcal/v14/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcalEE/v14/hgcalEE.xml', + 'Geometry/HGCalCommonData/data/hgcalHEsil/v14/hgcalHEsil.xml', + 'Geometry/HGCalCommonData/data/hgcalHEmix/v14/hgcalHEmix.xml', + 'Geometry/HGCalCommonData/data/hgcalCons/v14/hgcalCons.xml', + 'Geometry/HGCalCommonData/data/hgcalConsData/v13/hgcalConsData.xml', + 'Geometry/MuonCommonData/data/mbCommon/2021/v1/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2015/v2/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2015/v2/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2015/v2/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml', + 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml', + 'Geometry/MuonCommonData/data/muonYoke/2026/v1/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2026/v7/mf.xml', + 'Geometry/MuonCommonData/data/csc/2021/v2/csc.xml', + 'Geometry/MuonCommonData/data/rpcf/2026/v3/rpcf.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', + 'Geometry/MuonCommonData/data/gem21/TDR_Eta16/gem21.xml', + 'Geometry/MuonCommonData/data/mfshield/2026/v5/mfshield.xml', + 'Geometry/MuonCommonData/data/ge0/TDR_Dev/v3/ge0.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2026/v4/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm/2026/v1/brm.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml', + 'Geometry/MTDCommonData/data/mtdMaterial/v2/mtdMaterial.xml', + 'Geometry/MTDCommonData/data/btl/v1/btl.xml', + 'Geometry/MTDCommonData/data/etl/v5/etl.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v3/mtdStructureTopology.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v2/mtdParameters.xml', + )+ + cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/v3/muonNumbering.xml', + 'Geometry/EcalSimData/data/PhaseII/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsens/NoHE/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml', + 'Geometry/HGCalSimData/data/hgcsensv9.xml', + 'Geometry/MuonSimData/data/PhaseII/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/2026/v1/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecsFilter.xml', + 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/MTDSimData/data/v2/mtdsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2021/v1/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/HGCalSimData/data/hgcProdCutsv9.xml', + 'Geometry/MuonSimData/data/PhaseII/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/MTDSimData/data/v2/mtdProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometryGFlashXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometryGFlashXML_cfi.py index c056ec8841680..485bfdfab3b9d 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometryGFlashXML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometryGFlashXML_cfi.py @@ -250,7 +250,8 @@ 'Geometry/EcalSimData/data/ecalsens.xml', 'Geometry/HcalCommonData/data/hcalsens/Run1/hcalsens.xml', 'Geometry/HcalSimData/data/CaloUtil.xml', - 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibre.xml', 'Geometry/MuonSimData/data/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometryHFLibraryNoCastorXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometryHFLibraryNoCastorXML_cfi.py index ab63f0dbb69ea..60fca665b576a 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometryHFLibraryNoCastorXML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometryHFLibraryNoCastorXML_cfi.py @@ -249,6 +249,7 @@ 'Geometry/EcalSimData/data/ecalsens.xml', 'Geometry/HcalCommonData/data/hcalsens/Run1/hcalsens.xml', 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hffibre.xml', 'Geometry/MuonSimData/data/muonSens.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometryHFLibraryXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometryHFLibraryXML_cfi.py index a0326b62b52e5..2d9f68f8592ef 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometryHFLibraryXML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometryHFLibraryXML_cfi.py @@ -251,6 +251,7 @@ 'Geometry/HcalCommonData/data/hcalsens/Run1/hcalsens.xml', 'Geometry/HcalSimData/data/CaloUtil.xml', 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibre.xml', 'Geometry/MuonSimData/data/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsIdealGeometryNoAPDXML_cfi.py b/Geometry/CMSCommonData/python/cmsIdealGeometryNoAPDXML_cfi.py index aac6030a4bfaa..605b0d2e7b5ea 100644 --- a/Geometry/CMSCommonData/python/cmsIdealGeometryNoAPDXML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsIdealGeometryNoAPDXML_cfi.py @@ -242,6 +242,7 @@ 'Geometry/HcalCommonData/data/hcalsens/Run1/hcalsens.xml', 'Geometry/HcalSimData/data/CaloUtil.xml', 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibre.xml', 'Geometry/MuonSimData/data/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsIdealGeometryTotemT1XML_cfi.py b/Geometry/CMSCommonData/python/cmsIdealGeometryTotemT1XML_cfi.py index 195ea3640cab1..d6e3a57457af6 100644 --- a/Geometry/CMSCommonData/python/cmsIdealGeometryTotemT1XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsIdealGeometryTotemT1XML_cfi.py @@ -242,6 +242,7 @@ 'Geometry/HcalCommonData/data/hcalsens/Run1/hcalsens.xml', 'Geometry/HcalSimData/data/CaloUtil.xml', 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibre.xml', 'Geometry/MuonSimData/data/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsNoCastorGeometryXML_cfi.py b/Geometry/CMSCommonData/python/cmsNoCastorGeometryXML_cfi.py index fadd647eee2b6..359c103dce5a4 100644 --- a/Geometry/CMSCommonData/python/cmsNoCastorGeometryXML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsNoCastorGeometryXML_cfi.py @@ -250,6 +250,7 @@ 'Geometry/HcalCommonData/data/hcalsens/Run1/hcalsens.xml', 'Geometry/HcalSimData/data/CaloUtil.xml', 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibre.xml', 'Geometry/MuonSimData/data/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsSimIdealGeometryXML_cfi.py b/Geometry/CMSCommonData/python/cmsSimIdealGeometryXML_cfi.py index 7fe0126f1d511..a256b7237a8fc 100644 --- a/Geometry/CMSCommonData/python/cmsSimIdealGeometryXML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsSimIdealGeometryXML_cfi.py @@ -242,6 +242,7 @@ 'Geometry/HcalCommonData/data/hcalsens/Run1/hcalsens.xml', 'Geometry/HcalSimData/data/CaloUtil.xml', 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibre.xml', 'Geometry/MuonSimData/data/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/ecalhcalHFLibraryXML_cfi.py b/Geometry/CMSCommonData/python/ecalhcalHFLibraryXML_cfi.py index 0752b14e0e3f9..86cc65f323bc7 100644 --- a/Geometry/CMSCommonData/python/ecalhcalHFLibraryXML_cfi.py +++ b/Geometry/CMSCommonData/python/ecalhcalHFLibraryXML_cfi.py @@ -41,6 +41,7 @@ 'Geometry/HcalCommonData/data/hcalsens/Run1/hcalsens.xml', 'Geometry/HcalSimData/data/CaloUtil.xml', 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibre.xml', 'Geometry/HcalSimData/data/HcalProdCuts.xml', 'Geometry/EcalSimData/data/EcalProdCuts.xml', diff --git a/Geometry/CMSCommonData/python/hcalOnlyHFLibraryXML_cfi.py b/Geometry/CMSCommonData/python/hcalOnlyHFLibraryXML_cfi.py index f1fc7b707cc99..eb56d90e1325d 100644 --- a/Geometry/CMSCommonData/python/hcalOnlyHFLibraryXML_cfi.py +++ b/Geometry/CMSCommonData/python/hcalOnlyHFLibraryXML_cfi.py @@ -26,6 +26,7 @@ 'Geometry/HcalCommonData/data/hcalsens/Run1/hcalsens.xml', 'Geometry/HcalSimData/data/CaloUtil.xml', 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibre.xml', 'Geometry/HcalSimData/data/HcalProdCuts.xml', 'Geometry/CMSCommonData/data/FieldParameters.xml'), diff --git a/Geometry/CMSCommonData/test/dump2021FM05_cfg.py b/Geometry/CMSCommonData/test/dump2021FM05_cfg.py new file mode 100644 index 0000000000000..5a7962b909a2d --- /dev/null +++ b/Geometry/CMSCommonData/test/dump2021FM05_cfg.py @@ -0,0 +1,31 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DUMP") + +process.load("Configuration.Geometry.GeometryExtended2021FlatMinus05Percent_cff") +process.load('FWCore.MessageService.MessageLogger_cfi') + +if 'MessageLogger' in process.__dict__: + process.MessageLogger.categories.append('PixelGeom') + process.MessageLogger.categories.append('TIBGeom') + process.MessageLogger.categories.append('TIDGeom') + process.MessageLogger.categories.append('TOBGeom') + process.MessageLogger.categories.append('TECGeom') + +process.source = cms.Source("EmptySource") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +process.add_(cms.ESProducer("TGeoMgrFromDdd", + verbose = cms.untracked.bool(False), + level = cms.untracked.int32(14) +)) + + +process.dump = cms.EDAnalyzer("DumpSimGeometry", + outputFileName = cms.untracked.string('track2021FM05.root') +) + +process.p = cms.Path(process.dump) diff --git a/Geometry/CSCGeometry/test/cgac_cfg.py b/Geometry/CSCGeometry/test/cgac_cfg.py index 22f574056fd23..a15fc24fa2da2 100644 --- a/Geometry/CSCGeometry/test/cgac_cfg.py +++ b/Geometry/CSCGeometry/test/cgac_cfg.py @@ -31,8 +31,6 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.debugModules.append('CSCGeometryESModule') -process.MessageLogger.categories.append('CSCGeometry') -process.MessageLogger.categories.append('CSCGeometryBuilder') process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/Geometry/CSCGeometry/test/cgac_db_withb_cfg.py b/Geometry/CSCGeometry/test/cgac_db_withb_cfg.py index 3ad0a9885d48e..d908ba10e3496 100644 --- a/Geometry/CSCGeometry/test/cgac_db_withb_cfg.py +++ b/Geometry/CSCGeometry/test/cgac_db_withb_cfg.py @@ -42,8 +42,6 @@ # ============================== process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.debugModules.append('CSCGeometryESModule') -process.MessageLogger.categories.append('CSCGeometry') -process.MessageLogger.categories.append('CSCGeometryBuilder') process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/Geometry/CSCGeometry/test/cgacwithb_cfg.py b/Geometry/CSCGeometry/test/cgacwithb_cfg.py index ada899336febc..1802532897d1d 100644 --- a/Geometry/CSCGeometry/test/cgacwithb_cfg.py +++ b/Geometry/CSCGeometry/test/cgacwithb_cfg.py @@ -36,8 +36,6 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.debugModules.append('CSCGeometryESModule') -process.MessageLogger.categories.append('CSCGeometry') -process.MessageLogger.categories.append('CSCGeometryBuilder') process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/Geometry/CSCGeometry/test/cgal_cfg.py b/Geometry/CSCGeometry/test/cgal_cfg.py index 8e56638a13daf..87f9a7cef4570 100644 --- a/Geometry/CSCGeometry/test/cgal_cfg.py +++ b/Geometry/CSCGeometry/test/cgal_cfg.py @@ -34,9 +34,6 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.debugModules.append('*') -process.MessageLogger.categories.append('CSCLayerGeometry') -process.MessageLogger.categories.append('CSCGeometry') -process.MessageLogger.categories.append('CSCGeometryBuilder') process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/Geometry/CSCGeometry/test/cgos_cfg.py b/Geometry/CSCGeometry/test/cgos_cfg.py index 8dcc9ea30764e..7835d20c95cc6 100644 --- a/Geometry/CSCGeometry/test/cgos_cfg.py +++ b/Geometry/CSCGeometry/test/cgos_cfg.py @@ -31,8 +31,6 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.debugModules.append('CSCGeometryESModule') -process.MessageLogger.categories.append('CSCGeometry') -process.MessageLogger.categories.append('CSCGeometryBuilder') process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/Geometry/CSCGeometry/test/cgos_db_cfg.py b/Geometry/CSCGeometry/test/cgos_db_cfg.py index db15ef04ab772..596e7549c145b 100644 --- a/Geometry/CSCGeometry/test/cgos_db_cfg.py +++ b/Geometry/CSCGeometry/test/cgos_db_cfg.py @@ -25,8 +25,6 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.debugModules.append('CSCGeometryESModule') -process.MessageLogger.categories.append('CSCGeometry') -process.MessageLogger.categories.append('CSCGeometryBuilder') process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/Geometry/CSCGeometry/test/cgow_cfg.py b/Geometry/CSCGeometry/test/cgow_cfg.py index ecd36f9c7e801..d05e76ef33da8 100644 --- a/Geometry/CSCGeometry/test/cgow_cfg.py +++ b/Geometry/CSCGeometry/test/cgow_cfg.py @@ -31,8 +31,6 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.debugModules.append('CSCGeometryESModule') -process.MessageLogger.categories.append('CSCGeometry') -process.MessageLogger.categories.append('CSCGeometryBuilder') process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/Geometry/CSCGeometry/test/cgow_db_cfg.py b/Geometry/CSCGeometry/test/cgow_db_cfg.py index ee0dcf0b8ec0d..776946e43bbfe 100644 --- a/Geometry/CSCGeometry/test/cgow_db_cfg.py +++ b/Geometry/CSCGeometry/test/cgow_db_cfg.py @@ -25,8 +25,6 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.debugModules.append('CSCGeometryESModule') -process.MessageLogger.categories.append('CSCGeometry') -process.MessageLogger.categories.append('CSCGeometryBuilder') process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/Geometry/CSCGeometry/test/cgowung_db_cfg.py b/Geometry/CSCGeometry/test/cgowung_db_cfg.py index 0f0074c8a9011..c9c426ccec8f6 100644 --- a/Geometry/CSCGeometry/test/cgowung_db_cfg.py +++ b/Geometry/CSCGeometry/test/cgowung_db_cfg.py @@ -25,8 +25,6 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.debugModules.append('CSCGeometryESModule') -process.MessageLogger.categories.append('CSCGeometry') -process.MessageLogger.categories.append('CSCGeometryBuilder') process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/Geometry/CSCGeometry/test/clgi_cfg.py b/Geometry/CSCGeometry/test/clgi_cfg.py index 0c9394682a131..7d915d1685299 100644 --- a/Geometry/CSCGeometry/test/clgi_cfg.py +++ b/Geometry/CSCGeometry/test/clgi_cfg.py @@ -54,8 +54,6 @@ # Note that this has no effect on errors from DDD - they come even if this is removed! process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.debugModules.append('CSCGeometryESModule') -process.MessageLogger.categories.append('CSCGeometry') -process.MessageLogger.categories.append('CSCGeometryBuilder') process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/Geometry/CSCGeometry/test/testCSCGeometryFromDB_cfg.py b/Geometry/CSCGeometry/test/testCSCGeometryFromDB_cfg.py index 2852144b68504..b2383d21ffd74 100644 --- a/Geometry/CSCGeometry/test/testCSCGeometryFromDB_cfg.py +++ b/Geometry/CSCGeometry/test/testCSCGeometryFromDB_cfg.py @@ -20,8 +20,6 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.debugModules.append('CSCGeometryESModule') -process.MessageLogger.categories.append('CSCGeometry') -process.MessageLogger.categories.append('CSCGeometryBuilder') process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/Geometry/CSCGeometry/test/testCSCGeometry_cfg.py b/Geometry/CSCGeometry/test/testCSCGeometry_cfg.py index a0e35e2fb608d..fb846d842e6c0 100644 --- a/Geometry/CSCGeometry/test/testCSCGeometry_cfg.py +++ b/Geometry/CSCGeometry/test/testCSCGeometry_cfg.py @@ -25,8 +25,6 @@ process.load('FWCore.MessageLogger.MessageLogger_cfi') process.MessageLogger.debugModules.append('CSCGeometryESModule') -process.MessageLogger.categories.append('CSCGeometry') -process.MessageLogger.categories.append('CSCGeometryBuilder') process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/Geometry/CSCGeometryBuilder/plugins/CSCGeometryESModule.cc b/Geometry/CSCGeometryBuilder/plugins/CSCGeometryESModule.cc index 44a65d68ce257..171df17d2177d 100644 --- a/Geometry/CSCGeometryBuilder/plugins/CSCGeometryESModule.cc +++ b/Geometry/CSCGeometryBuilder/plugins/CSCGeometryESModule.cc @@ -205,6 +205,7 @@ std::shared_ptr CSCGeometryESModule::produce(const MuonGeometryReco void CSCGeometryESModule::initCSCGeometry_(const MuonGeometryRecord& record, std::shared_ptr& host) { if (fromDDD_) { + edm::LogVerbatim("CSCGeoemtryESModule") << "(0) CSCGeometryESModule - DDD "; host->ifRecordChanges(record, [&host, &record, this](auto const& rec) { host->clear(); edm::ESTransientHandle cpv = record.getTransientHandle(cpvToken_); @@ -213,6 +214,7 @@ void CSCGeometryESModule::initCSCGeometry_(const MuonGeometryRecord& record, std builder.build(*host, cpv.product(), mdc); }); } else if (fromDD4hep_) { + edm::LogVerbatim("CSCGeoemtryESModule") << "(0) CSCGeometryESModule - DD4HEP "; host->ifRecordChanges(record, [&host, &record, this](auto const& rec) { host->clear(); edm::ESTransientHandle cpv = record.getTransientHandle(cpvTokendd4hep_); @@ -228,8 +230,9 @@ void CSCGeometryESModule::initCSCGeometry_(const MuonGeometryRecord& record, std host->ifRecordChanges(record, [&recreateGeometry](auto const& rec) { recreateGeometry = true; }); - + edm::LogVerbatim("CSCGeoemtryESModule") << "(0) CSCGeometryESModule - DB recreateGeometry=false "; if (recreateGeometry) { + edm::LogVerbatim("CSCGeoemtryESModule") << "(0) CSCGeometryESModule - DB recreateGeometry=true "; host->clear(); const auto& rig = record.get(rigToken_); const auto& rdp = record.get(rdpToken_); diff --git a/Geometry/CSCGeometryBuilder/src/CSCGeometryParsFromDD.cc b/Geometry/CSCGeometryBuilder/src/CSCGeometryParsFromDD.cc index c5e72bc604fac..fad1961a088ba 100644 --- a/Geometry/CSCGeometryBuilder/src/CSCGeometryParsFromDD.cc +++ b/Geometry/CSCGeometryBuilder/src/CSCGeometryParsFromDD.cc @@ -7,7 +7,7 @@ // \author Sergio Lo Meo (sergio.lo.meo@cern.ch) following what Ianna Osburne made for DTs (DD4HEP migration) // Created: Thu, 05 March 2020 // Modified: Thu, 04 June 2020, following what made in PR #30047 -// +// Modified: Wed, 23 December 2020 // Original author: Tim Cox */ #include "CSCGeometryParsFromDD.h" @@ -21,7 +21,6 @@ #include "Geometry/CSCGeometry/src/CSCWireGroupPackage.h" #include "CondFormats/GeometryObjects/interface/CSCRecoDigiParameters.h" #include "CondFormats/GeometryObjects/interface/RecoIdealGeometry.h" -#include "CLHEP/Units/GlobalSystemOfUnits.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DetectorDescription/DDCMS/interface/DDFilteredView.h" #include "DetectorDescription/DDCMS/interface/DDCompactView.h" @@ -31,11 +30,14 @@ using namespace std; using namespace cms_units::operators; +using namespace geant_units::operators; CSCGeometryParsFromDD::CSCGeometryParsFromDD() : myName("CSCGeometryParsFromDD") {} CSCGeometryParsFromDD::~CSCGeometryParsFromDD() {} +//ddd + bool CSCGeometryParsFromDD::build(const DDCompactView* cview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rig, @@ -65,6 +67,9 @@ bool CSCGeometryParsFromDD::build(const DDCompactView* cview, std::vector gtran(3); std::vector grmat(9); std::vector trm(9); + + edm::LogVerbatim("CSCGeometryParsFromDD") << "(0) CSCGeometryParsFromDD - DDD "; + while (doSubDets) { spec = fv.specifics(); spit = spec.begin(); @@ -91,6 +96,10 @@ bool CSCGeometryParsFromDD::build(const DDCompactView* cview, int jchamber = detid.chamber(); int jlayer = detid.layer(); + edm::LogVerbatim("CSCGeometryParsFromDD") + << "(1) detId: " << id << " jendcap: " << jendcap << " jstation: " << jstation << " jring: " << jring + << " jchamber: " << jchamber << " jlayer: " << jlayer; + // Package up the wire group info as it's decoded CSCWireGroupPackage wg; uparvals.clear(); @@ -137,16 +146,21 @@ bool CSCGeometryParsFromDD::build(const DDCompactView* cview, } } else if (it->second.name() == "WireSpacing") { wg.wireSpacing = it->second.doubles()[0]; + edm::LogVerbatim("CSCGeometryParsFromDD") << "(2) wireSpacing: " << wg.wireSpacing; } else if (it->second.name() == "AlignmentPinToFirstWire") { wg.alignmentPinToFirstWire = it->second.doubles()[0]; + edm::LogVerbatim("CSCGeometryParsFromDD") << "(3) alignmentPinToFirstWire: " << wg.alignmentPinToFirstWire; } else if (it->second.name() == "TotNumWireGroups") { wg.numberOfGroups = int(it->second.doubles()[0]); } else if (it->second.name() == "LengthOfFirstWire") { wg.narrowWidthOfWirePlane = it->second.doubles()[0]; + edm::LogVerbatim("CSCGeometryParsFromDD") << "(4) narrowWidthOfWirePlane: " << wg.narrowWidthOfWirePlane; } else if (it->second.name() == "LengthOfLastWire") { wg.wideWidthOfWirePlane = it->second.doubles()[0]; + edm::LogVerbatim("CSCGeometryParsFromDD") << "(5) wideWidthOfWirePlane: " << wg.wideWidthOfWirePlane; } else if (it->second.name() == "RadialExtentOfWirePlane") { wg.lengthOfWirePlane = it->second.doubles()[0]; + edm::LogVerbatim("CSCGeometryParsFromDD") << "(6) lengthOfWirePlane: " << wg.lengthOfWirePlane; } } } @@ -198,22 +212,28 @@ bool CSCGeometryParsFromDD::build(const DDCompactView* cview, LogTrace(myName) << myName << ": noOfAnonParams=" << noOfAnonParams; LogTrace(myName) << myName << ": fill fpar..."; - LogTrace(myName) << myName << ": dpars are... " << dpar[4] / cm << ", " << dpar[8] / cm << ", " << dpar[3] / cm - << ", " << dpar[0] / cm; + LogTrace(myName) << myName << ": dpars are... " << convertMmToCm(dpar[4]) << ", " << convertMmToCm(dpar[8]) << ", " + << convertMmToCm(dpar[3]) << ", " << convertMmToCm(dpar[0]); + edm::LogVerbatim("CSCGeometryParsFromDD") + << "(7) dpar[4]: " << convertMmToCm(dpar[4]) << " dpar[8]: " << convertMmToCm(dpar[8]) + << " dpar[3]: " << convertMmToCm(dpar[3]) << " dpar[0]: " << convertMmToCm(dpar[0]); - fpar.emplace_back((dpar[4] / cm)); - fpar.emplace_back((dpar[8] / cm)); - fpar.emplace_back((dpar[3] / cm)); - fpar.emplace_back((dpar[0] / cm)); + fpar.emplace_back(convertMmToCm(dpar[4])); + fpar.emplace_back(convertMmToCm(dpar[8])); + fpar.emplace_back(convertMmToCm(dpar[3])); + fpar.emplace_back(convertMmToCm(dpar[0])); LogTrace(myName) << myName << ": fill gtran..."; - gtran[0] = (float)1.0 * (fv.translation().X() / cm); - gtran[1] = (float)1.0 * (fv.translation().Y() / cm); - gtran[2] = (float)1.0 * (fv.translation().Z() / cm); + gtran[0] = (float)1.0 * (convertMmToCm(fv.translation().X())); + gtran[1] = (float)1.0 * (convertMmToCm(fv.translation().Y())); + gtran[2] = (float)1.0 * (convertMmToCm(fv.translation().Z())); LogTrace(myName) << myName << ": gtran[0]=" << gtran[0] << ", gtran[1]=" << gtran[1] << ", gtran[2]=" << gtran[2]; + edm::LogVerbatim("CSCGeometryParsFromDD") + << "(8) gtran[0]: " << gtran[0] << " gtran[1]: " << gtran[1] << " gtran[2]: " << gtran[2]; + LogTrace(myName) << myName << ": fill grmat..."; fv.rotation().GetComponents(trm.begin(), trm.end()); @@ -369,6 +389,9 @@ bool CSCGeometryParsFromDD::build(const cms::DDCompactView* cview, std::vector gtran(3); std::vector grmat(9); std::vector trm(9); + + edm::LogVerbatim("CSCGeometryParsFromDD") << "(0) CSCGeometryParsFromDD - DD4HEP "; + while (fv.firstChild()) { MuonGeometryNumbering mbn(muonConstants); CSCNumberingScheme cscnum(muonConstants); @@ -381,6 +404,10 @@ bool CSCGeometryParsFromDD::build(const cms::DDCompactView* cview, int jchamber = detid.chamber(); int jlayer = detid.layer(); + edm::LogVerbatim("CSCGeometryParsFromDD") + << "(1) detId: " << id << " jendcap: " << jendcap << " jstation: " << jstation << " jring: " << jring + << " jchamber: " << jchamber << " jlayer: " << jlayer; + // Package up the wire group info as it's decoded CSCWireGroupPackage wg; uparvals.clear(); @@ -426,24 +453,29 @@ bool CSCGeometryParsFromDD::build(const cms::DDCompactView* cview, } auto wirespacing = fv.get("WireSpacing"); - wg.wireSpacing = static_cast(wirespacing); + wg.wireSpacing = static_cast(wirespacing / dd4hep::mm); + edm::LogVerbatim("CSCGeometryParsFromDD") << "(2) wireSpacing: " << wg.wireSpacing; auto alignmentpintofirstwire = fv.get("AlignmentPinToFirstWire"); - wg.alignmentPinToFirstWire = static_cast(alignmentpintofirstwire); + wg.alignmentPinToFirstWire = static_cast(alignmentpintofirstwire / dd4hep::mm); + edm::LogVerbatim("CSCGeometryParsFromDD") << "(3) alignmentPinToFirstWire: " << wg.alignmentPinToFirstWire; auto totnumwiregroups = fv.get("TotNumWireGroups"); wg.numberOfGroups = static_cast(totnumwiregroups); auto lengthoffirstwire = fv.get("LengthOfFirstWire"); - wg.narrowWidthOfWirePlane = static_cast(lengthoffirstwire); + wg.narrowWidthOfWirePlane = static_cast(lengthoffirstwire / dd4hep::mm); + edm::LogVerbatim("CSCGeometryParsFromDD") << "(4) narrowWidthOfWirePlane: " << wg.narrowWidthOfWirePlane; auto lengthoflastwire = fv.get("LengthOfLastWire"); - wg.wideWidthOfWirePlane = static_cast(lengthoflastwire); + wg.wideWidthOfWirePlane = static_cast(lengthoflastwire / dd4hep::mm); + edm::LogVerbatim("CSCGeometryParsFromDD") << "(5) wideWidthOfWirePlane: " << wg.wideWidthOfWirePlane; auto radialextentofwireplane = fv.get("RadialExtentOfWirePlane"); - wg.lengthOfWirePlane = static_cast(radialextentofwireplane); + wg.lengthOfWirePlane = static_cast(radialextentofwireplane / dd4hep::mm); + edm::LogVerbatim("CSCGeometryParsFromDD") << "(6) lengthOfWirePlane: " << wg.lengthOfWirePlane; - uparvals.emplace_back((wg.wireSpacing) * 10.0); + uparvals.emplace_back(wg.wireSpacing); uparvals.emplace_back(wg.alignmentPinToFirstWire); uparvals.emplace_back(wg.numberOfGroups); uparvals.emplace_back(wg.narrowWidthOfWirePlane); @@ -477,25 +509,36 @@ bool CSCGeometryParsFromDD::build(const cms::DDCompactView* cview, std::transform( dpar.begin(), dpar.end(), dpar.begin(), [](double i) -> double { return cms_rounding::roundIfNear0(i); }); - fpar.emplace_back((dpar[1])); - fpar.emplace_back((dpar[2])); - fpar.emplace_back((dpar[3])); - fpar.emplace_back((dpar[4])); + fpar.emplace_back((dpar[1] / dd4hep::cm)); + fpar.emplace_back((dpar[2] / dd4hep::cm)); + fpar.emplace_back((dpar[3] / dd4hep::cm)); + fpar.emplace_back((dpar[4] / dd4hep::cm)); + edm::LogVerbatim("CSCGeometryParsFromDD") + << "(7) - Subtraction - dpar[1] (ddd dpar[4]): " << dpar[1] / dd4hep::cm + << " (ddd dpar[8]): " << dpar[2] / dd4hep::cm << " dpar[3] (as ddd): " << dpar[3] / dd4hep::cm + << " dpar[4] (ddd dpar[0]): " << dpar[4] / dd4hep::cm; } else { dpar = fv.parameters(); std::transform( dpar.begin(), dpar.end(), dpar.begin(), [](double i) -> double { return cms_rounding::roundIfNear0(i); }); - fpar.emplace_back((dpar[0])); - fpar.emplace_back((dpar[1])); - fpar.emplace_back((dpar[2])); - fpar.emplace_back((dpar[3])); + fpar.emplace_back((dpar[0] / dd4hep::cm)); + fpar.emplace_back((dpar[1] / dd4hep::cm)); + fpar.emplace_back((dpar[2] / dd4hep::cm)); + fpar.emplace_back((dpar[3] / dd4hep::cm)); + edm::LogVerbatim("CSCGeometryParsFromDD") + << "(7)Bis - Else - dpar[0]: " << dpar[0] / dd4hep::cm << " dpar[1]: " << dpar[1] / dd4hep::cm + << " dpar[2]: " << dpar[2] / dd4hep::cm << " dpar[3]: " << dpar[3] / dd4hep::cm; } - gtran[0] = static_cast(fv.translation().X()); - gtran[1] = static_cast(fv.translation().Y()); - gtran[2] = static_cast(fv.translation().Z()); + gtran[0] = static_cast(fv.translation().X() / dd4hep::cm); + gtran[1] = static_cast(fv.translation().Y() / dd4hep::cm); + gtran[2] = static_cast(fv.translation().Z() / dd4hep::cm); + + edm::LogVerbatim("CSCGeometryParsFromDD") + << "(8) gtran[0]: " << gtran[0] / dd4hep::cm << " gtran[1]: " << gtran[1] / dd4hep::cm + << " gtran[2]: " << gtran[2] / dd4hep::cm; std::transform( gtran.begin(), gtran.end(), gtran.begin(), [](double i) -> double { return cms_rounding::roundIfNear0(i); }); @@ -510,10 +553,7 @@ bool CSCGeometryParsFromDD::build(const cms::DDCompactView* cview, } } - if (wg.numberOfGroups != 0) { - for (size_t i = 0; i < wg.consecutiveGroups.size(); i++) { - } - } else { + if (wg.numberOfGroups == 0) { LogTrace(myName) << myName << " wg.numberOfGroups == 0 "; } diff --git a/Geometry/CSCGeometryBuilder/test/python/dumpCSCGeometryDD4hep_cfg.py b/Geometry/CSCGeometryBuilder/test/python/dumpCSCGeometryDD4hep_cfg.py index 6390df82a146b..07475bd27f97e 100644 --- a/Geometry/CSCGeometryBuilder/test/python/dumpCSCGeometryDD4hep_cfg.py +++ b/Geometry/CSCGeometryBuilder/test/python/dumpCSCGeometryDD4hep_cfg.py @@ -17,9 +17,9 @@ process.CSCGeometryESModule.applyAlignment = False if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('Geometry') - process.MessageLogger.categories.append('CSCNumberingScheme') - process.MessageLogger.categories.append('CSCGeometry') + process.MessageLogger.Geometry=dict() + process.MessageLogger.CSCNumberingScheme=dict() + process.MessageLogger.CSCGeometry=dict() process.source = cms.Source('EmptySource') @@ -27,6 +27,17 @@ input = cms.untracked.int32(1) ) +process.MessageLogger = cms.Service( + "MessageLogger", + destinations = cms.untracked.vstring( + 'cout' + ), + cout = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG') + ), + debugModules = cms.untracked.vstring('*') +) + process.cscGeometryDump.verbose = True process.p = cms.Path(process.cscGeometryDump) diff --git a/Geometry/CSCGeometryBuilder/test/python/dumpCSCGeometryDDD_cfg.py b/Geometry/CSCGeometryBuilder/test/python/dumpCSCGeometryDDD_cfg.py index a9cfd1a6903af..b1e3d3439092e 100644 --- a/Geometry/CSCGeometryBuilder/test/python/dumpCSCGeometryDDD_cfg.py +++ b/Geometry/CSCGeometryBuilder/test/python/dumpCSCGeometryDDD_cfg.py @@ -15,11 +15,12 @@ process.load("Geometry.CSCGeometryBuilder.cscGeometry_cfi") process.load("Geometry.CSCGeometryBuilder.cscGeometryDump_cfi") + process.CSCGeometryESModule.applyAlignment = False if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('Geometry') - process.MessageLogger.categories.append('CSCNumberingScheme') - process.MessageLogger.categories.append('CSCGeometry') + process.MessageLogger.Geometry=dict() + process.MessageLogger.CSCNumberingScheme=dict() + process.MessageLogger.CSCGeometry=dict() process.source = cms.Source('EmptySource') @@ -27,6 +28,18 @@ input = cms.untracked.int32(1) ) +process.MessageLogger = cms.Service( + "MessageLogger", + destinations = cms.untracked.vstring( + 'cout' + ), + cout = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG') + ), + debugModules = cms.untracked.vstring('*') +) + + process.cscGeometryDump.verbose = True process.p = cms.Path(process.cscGeometryDump) diff --git a/Geometry/CSCGeometryBuilder/test/python/validateCSCGeometryDD4hep_cfg.py b/Geometry/CSCGeometryBuilder/test/python/validateCSCGeometryDD4hep_cfg.py index 2b957acd0fb1a..a749741e2dab7 100644 --- a/Geometry/CSCGeometryBuilder/test/python/validateCSCGeometryDD4hep_cfg.py +++ b/Geometry/CSCGeometryBuilder/test/python/validateCSCGeometryDD4hep_cfg.py @@ -9,12 +9,18 @@ input = cms.untracked.int32(1) ) - process.load('Configuration.StandardSequences.DD4hep_GeometrySim_cff') process.load("FWCore.MessageLogger.MessageLogger_cfi") process.load("Geometry.MuonNumbering.muonGeometryConstants_cff") process.load("Geometry.CSCGeometryBuilder.cscGeometry_cfi") +process.MessageLogger = cms.Service("MessageLogger", + destinations = cms.untracked.vstring('myLog'), + myLog = cms.untracked.PSet( + threshold = cms.untracked.string('INFO'), + ) + ) + process.CSCGeometryESModule.applyAlignment = False # @@ -25,7 +31,7 @@ # process.valid = cms.EDAnalyzer("CSCGeometryValidate", infileName = cms.untracked.string('cmsRecoGeom-2021.root'), - outfileName = cms.untracked.string('validateCSCGeometry.root'), + outfileName = cms.untracked.string('validateCSCGeometryDD4HEP.root'), tolerance = cms.untracked.int32(7) ) diff --git a/Geometry/CSCGeometryBuilder/test/python/validateCSCGeometryDDD_cfg.py b/Geometry/CSCGeometryBuilder/test/python/validateCSCGeometryDDD_cfg.py index a390da8374d24..baaf7cf1346cc 100644 --- a/Geometry/CSCGeometryBuilder/test/python/validateCSCGeometryDDD_cfg.py +++ b/Geometry/CSCGeometryBuilder/test/python/validateCSCGeometryDDD_cfg.py @@ -14,6 +14,13 @@ process.load("Geometry.MuonNumbering.muonNumberingInitialization_cfi") process.load("Geometry.CSCGeometryBuilder.cscGeometry_cfi") +process.MessageLogger = cms.Service("MessageLogger", + destinations = cms.untracked.vstring('myLog'), + myLog = cms.untracked.PSet( + threshold = cms.untracked.string('INFO'), + ) + ) + process.CSCGeometryESModule.applyAlignment = False # @@ -24,7 +31,7 @@ # process.valid = cms.EDAnalyzer("CSCGeometryValidate", infileName = cms.untracked.string('cmsRecoGeom-2021.root'), - outfileName = cms.untracked.string('validateCSCGeometry2.root'), + outfileName = cms.untracked.string('validateCSCGeometryDDD.root'), tolerance = cms.untracked.int32(7) ) diff --git a/Geometry/CaloEventSetup/interface/CaloGeometryLoader.h b/Geometry/CaloEventSetup/interface/CaloGeometryLoader.h index a20806af12d0d..5668ee52e35b6 100644 --- a/Geometry/CaloEventSetup/interface/CaloGeometryLoader.h +++ b/Geometry/CaloEventSetup/interface/CaloGeometryLoader.h @@ -8,6 +8,7 @@ #include "DetectorDescription/DDCMS/interface/DDCompactView.h" #include "DetectorDescription/DDCMS/interface/DDFilteredView.h" +#include "DD4hep/DD4hepUnits.h" #include "CLHEP/Geometry/Transform3D.h" #include #include @@ -25,8 +26,8 @@ class CaloGeometryLoader { using ParVec = CaloSubdetectorGeometry::ParVec; using ParVecVec = CaloSubdetectorGeometry::ParVecVec; - static constexpr double k_ScaleFromDDDtoGeant = 0.1; - static constexpr double k_ScaleFromDD4HeptoGeant = 1.0; + static constexpr double k_ScaleFromDDD = 0.1; + static constexpr double k_ScaleFromDD4Hep = (1.0 / dd4hep::cm); CaloGeometryLoader() {} diff --git a/Geometry/CaloEventSetup/interface/CaloGeometryLoader.icc b/Geometry/CaloEventSetup/interface/CaloGeometryLoader.icc index babbf5e80e1fe..518229e4cc58a 100644 --- a/Geometry/CaloEventSetup/interface/CaloGeometryLoader.icc +++ b/Geometry/CaloEventSetup/interface/CaloGeometryLoader.icc @@ -84,7 +84,7 @@ void CaloGeometryLoader::makeGeometry(const DDCompactView* cpv, const CLHEP::HepRotation hr(temp); const CLHEP::Hep3Vector h3v(fv.translation().X(), fv.translation().Y(), fv.translation().Z()); const HepGeom::Transform3D ht3d(hr, // only scale translation - k_ScaleFromDDDtoGeant * h3v); + k_ScaleFromDDD * h3v); const DetId id(getDetIdForDDDNode(fv)); @@ -105,7 +105,7 @@ void CaloGeometryLoader::makeGeometry(const DDCompactView* cpv, nullptr == at ? ht3d : (nullptr == globalT ? at->transform() * ht3d : at->transform() * globalT->transform() * ht3d)); - fillGeom(geom, parameters, atr, id, k_ScaleFromDDDtoGeant); + fillGeom(geom, parameters, atr, id, k_ScaleFromDDD); } assert(counter <= T::k_NumberOfCellsForCorners); @@ -149,7 +149,7 @@ void CaloGeometryLoader::makeGeometry(const cms::DDCompactView* cpv, const CLHEP::HepRotation hr(temp); const CLHEP::Hep3Vector h3v(fv.translation().X(), fv.translation().Y(), fv.translation().Z()); const HepGeom::Transform3D ht3d(hr, // only scale translation - k_ScaleFromDD4HeptoGeant * h3v); + k_ScaleFromDD4Hep * h3v); const DetId id(getDetIdForDD4HepNode(fv)); @@ -170,7 +170,7 @@ void CaloGeometryLoader::makeGeometry(const cms::DDCompactView* cpv, nullptr == at ? ht3d : (nullptr == globalT ? at->transform() * ht3d : at->transform() * globalT->transform() * ht3d)); - fillGeom(geom, parameters, atr, id, k_ScaleFromDD4HeptoGeant); + fillGeom(geom, parameters, atr, id, k_ScaleFromDD4Hep); } assert(counter <= T::k_NumberOfCellsForCorners); diff --git a/Geometry/CaloTopology/interface/HGCalTopology.h b/Geometry/CaloTopology/interface/HGCalTopology.h index 4d2abbdcbf8ec..3f5b613609d8f 100644 --- a/Geometry/CaloTopology/interface/HGCalTopology.h +++ b/Geometry/CaloTopology/interface/HGCalTopology.h @@ -152,7 +152,7 @@ class HGCalTopology : public CaloSubdetectorTopology { ForwardSubdetector subdet_; int sectors_, layers_, cells_, types_; int firstLay_, cellMax_, waferOff_, waferMax_; - int kHGhalf_, kHGeomHalf_; + int kHGhalf_, kHGeomHalf_, kHGhalfType_; unsigned int kSizeForDenseIndexing; }; diff --git a/Geometry/CaloTopology/src/HGCalTopology.cc b/Geometry/CaloTopology/src/HGCalTopology.cc index 2e1ab87e9b968..da3e5ffc076de 100644 --- a/Geometry/CaloTopology/src/HGCalTopology.cc +++ b/Geometry/CaloTopology/src/HGCalTopology.cc @@ -33,14 +33,15 @@ HGCalTopology::HGCalTopology(const HGCalDDDConstants& hdcons, int det) : hdcons_ det_ = (DetId::Detector)(det); subdet_ = ForwardEmpty; kHGeomHalf_ = sectors_ * layers_ * cellMax_; - types_ = 2; + types_ = 3; } else { det_ = (DetId::Detector)(det); subdet_ = ForwardEmpty; kHGeomHalf_ = sectors_ * layers_; types_ = 3; } - kSizeForDenseIndexing = (unsigned int)(2 * kHGhalf_); + kHGhalfType_ = sectors_ * layers_ * cells_ * types_; + kSizeForDenseIndexing = static_cast(2 * kHGhalf_); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "HGCalTopology initialized for detector " << det << ":" << det_ << ":" << subdet_ << " having " << sectors_ << " Sectors, " << layers_ << " Layers from " << firstLay_ @@ -350,7 +351,7 @@ uint32_t HGCalTopology::detId2denseId(const DetId& idin) const { uint32_t idx; if (waferHexagon6()) { int type = (id.iType > 0) ? 1 : 0; - idx = (uint32_t)(((id.zSide > 0) ? kHGhalf_ : 0) + + idx = (uint32_t)(((id.zSide > 0) ? kHGhalfType_ : 0) + ((((id.iCell1 - 1) * layers_ + id.iLay - 1) * sectors_ + id.iSec1) * types_ + type)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "Input Hex " << id.zSide << ":" << id.iLay << ":" << id.iSec1 << ":" << id.iCell1 @@ -359,7 +360,7 @@ uint32_t HGCalTopology::detId2denseId(const DetId& idin) const { #endif } else if (tileTrapezoid()) { idx = - (uint32_t)(((id.zSide > 0) ? kHGhalf_ : 0) + + (uint32_t)(((id.zSide > 0) ? kHGhalfType_ : 0) + ((((id.iCell1 - 1) * layers_ + id.iLay - firstLay_) * sectors_ + id.iSec1 - 1) * types_ + id.iType)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "Input Trap " << id.zSide << ":" << id.iLay << ":" << id.iSec1 << ":" << id.iCell1 @@ -368,7 +369,7 @@ uint32_t HGCalTopology::detId2denseId(const DetId& idin) const { #endif } else { idx = - (uint32_t)(((id.zSide > 0) ? kHGhalf_ : 0) + + (uint32_t)(((id.zSide > 0) ? kHGhalfType_ : 0) + (((((id.iCell1 * cellMax_ + id.iCell2) * layers_ + id.iLay - 1) * waferMax_ + id.iSec1 + waferOff_) * waferMax_ + id.iSec2 + waferOff_) * @@ -387,8 +388,8 @@ uint32_t HGCalTopology::detId2denseId(const DetId& idin) const { DetId HGCalTopology::denseId2detId(uint32_t hi) const { HGCalTopology::DecodedDetId id; if (validHashIndex(hi)) { - id.zSide = ((int)(hi) < kHGhalf_ ? -1 : 1); - int di = ((int)(hi) % kHGhalf_); + id.zSide = ((int)(hi) < kHGhalfType_ ? -1 : 1); + int di = ((int)(hi) % kHGhalfType_); if (waferHexagon6()) { int type = (di % types_); id.iType = (type == 0 ? -1 : 1); @@ -634,15 +635,21 @@ HGCalTopology::DecodedDetId HGCalTopology::decode(const DetId& startId) const { DetId HGCalTopology::encode(const HGCalTopology::DecodedDetId& idx) const { DetId id; #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "Encode " << idx.det << ":" << idx.zSide << ":" << idx.iType << ":" << idx.iLay - << ":" << idx.iSec1 << ":" << idx.iSec2 << ":" << idx.iCell1 << ":" << idx.iCell2; + edm::LogVerbatim("HGCalGeomX") << "Encode " << idx.det << ":" << idx.zSide << ":" << idx.iType << ":" << idx.iLay + << ":" << idx.iSec1 << ":" << idx.iSec2 << ":" << idx.iCell1 << ":" << idx.iCell2; #endif if (waferHexagon6()) { id = HGCalDetId((ForwardSubdetector)(idx.det), idx.zSide, idx.iLay, ((idx.iType > 0) ? 1 : 0), idx.iSec1, idx.iCell1) .rawId(); } else if (tileTrapezoid()) { - id = HGCScintillatorDetId(idx.iType, idx.iLay, idx.zSide * idx.iSec1, idx.iCell1).rawId(); + HGCScintillatorDetId hid(idx.iType, idx.iLay, idx.zSide * idx.iSec1, idx.iCell1); + std::pair typm = hdcons_.tileType(hid.layer(), hid.ring(), 0); + if (typm.first >= 0) { + hid.setType(typm.first); + hid.setSiPM(typm.second); + } + id = hid.rawId(); } else if (det_ == DetId::Forward && subdet_ == ForwardSubdetector::HFNose) { id = HFNoseDetId(idx.zSide, idx.iType, idx.iLay, idx.iSec1, idx.iSec2, idx.iCell1, idx.iCell2).rawId(); } else { diff --git a/Geometry/CaloTopology/test/testCaloTowerMap_cfg.py b/Geometry/CaloTopology/test/testCaloTowerMap_cfg.py index a5ce934f97965..efc0b9e66a0ab 100644 --- a/Geometry/CaloTopology/test/testCaloTowerMap_cfg.py +++ b/Geometry/CaloTopology/test/testCaloTowerMap_cfg.py @@ -7,8 +7,8 @@ process.load("RecoJets.Configuration.CaloTowersES_cfi") process.load("FWCore.MessageService.MessageLogger_cfi") -#if 'MessageLogger' in process.__dict__: -# process.MessageLogger.categories.append('HcalGeom') +# +# process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/CaloTopology/test/testHGCalTopology_cfg.py b/Geometry/CaloTopology/test/testHGCalTopology_cfg.py index 219a3bcf870a1..8ae704246a954 100644 --- a/Geometry/CaloTopology/test/testHGCalTopology_cfg.py +++ b/Geometry/CaloTopology/test/testHGCalTopology_cfg.py @@ -7,7 +7,7 @@ process.load("Geometry.CaloTopology.hgcalTopologyTester_cfi") if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/CaloTopology/test/testHcalDetId2DenseTester_cfg.py b/Geometry/CaloTopology/test/testHcalDetId2DenseTester_cfg.py index d6f66d221b046..54c86bb1c44fd 100644 --- a/Geometry/CaloTopology/test/testHcalDetId2DenseTester_cfg.py +++ b/Geometry/CaloTopology/test/testHcalDetId2DenseTester_cfg.py @@ -10,8 +10,8 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HcalGeom') - process.MessageLogger.categories.append('CaloTopology') + process.MessageLogger.HcalGeom=dict() + process.MessageLogger.CaloTopology=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/DTGeometryBuilder/plugins/dd4hep/DTGeometryBuilder.cc b/Geometry/DTGeometryBuilder/plugins/dd4hep/DTGeometryBuilder.cc index b90565496fdb8..0392759972018 100644 --- a/Geometry/DTGeometryBuilder/plugins/dd4hep/DTGeometryBuilder.cc +++ b/Geometry/DTGeometryBuilder/plugins/dd4hep/DTGeometryBuilder.cc @@ -40,6 +40,7 @@ #include "Geometry/MuonNumbering/interface/DTNumberingScheme.h" #include "DTGeometryBuilder.h" #include "DD4hep/Detector.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include @@ -50,6 +51,8 @@ using namespace std; using namespace cms; void DTGeometryBuilder::buildGeometry(DDFilteredView& fview, DTGeometry& geom, const MuonGeometryConstants& num) const { + edm::LogVerbatim("DTGeometryBuilder") << "(0) DTGeometryBuilder - DD4Hep "; + bool doChamber = fview.firstChild(); while (doChamber) { @@ -83,7 +86,7 @@ DTGeometryBuilder::RCPPlane DTGeometryBuilder::plane(const DDFilteredView& fview const Double_t* rot = fview.rot(); return RCPPlane( - new Plane(Surface::PositionType(tr[0], tr[1], tr[2]), + new Plane(Surface::PositionType(tr[0] / dd4hep::cm, tr[1] / dd4hep::cm, tr[2] / dd4hep::cm), Surface::RotationType(rot[0], rot[3], rot[6], rot[1], rot[4], rot[7], rot[2], rot[5], rot[8]), bounds)); } @@ -96,7 +99,11 @@ DTChamber* DTGeometryBuilder::buildChamber(DDFilteredView& fview, const MuonGeom DTChamberId detId(rawid); auto const& par = fview.parameters(); - RCPPlane surf(plane(fview, new RectangularPlaneBounds(par[0], par[1], par[2]))); + edm::LogVerbatim("DTGeometryBuilder") << "(1) detId: " << rawid << " par[0]: " << par[0] / dd4hep::cm + << " par[1]: " << par[1] / dd4hep::cm << " par[2]: " << par[2] / dd4hep::cm; + + RCPPlane surf( + plane(fview, new RectangularPlaneBounds(par[0] / dd4hep::cm, par[1] / dd4hep::cm, par[2] / dd4hep::cm))); DTChamber* chamber = new DTChamber(detId, surf); @@ -114,7 +121,11 @@ DTSuperLayer* DTGeometryBuilder::buildSuperLayer(DDFilteredView& fview, auto const& par = fview.parameters(); - RCPPlane surf(plane(fview, new RectangularPlaneBounds(par[0], par[1], par[2]))); + edm::LogVerbatim("DTGeometryBuilder") << "(2) detId: " << rawid << " par[0]: " << par[0] / dd4hep::cm + << " par[1]: " << par[1] / dd4hep::cm << " par[2]: " << par[2] / dd4hep::cm; + + RCPPlane surf( + plane(fview, new RectangularPlaneBounds(par[0] / dd4hep::cm, par[1] / dd4hep::cm, par[2] / dd4hep::cm))); DTSuperLayer* slayer = new DTSuperLayer(slId, surf, chamber); @@ -134,13 +145,20 @@ DTLayer* DTGeometryBuilder::buildLayer(DDFilteredView& fview, auto const& par = fview.parameters(); - RCPPlane surf(plane(fview, new RectangularPlaneBounds(par[0], par[1], par[2]))); + edm::LogVerbatim("DTGeometryBuilder") << "(3) detId: " << rawid << " par[0]: " << par[0] / dd4hep::cm + << " par[1]: " << par[1] / dd4hep::cm << " par[2]: " << par[2] / dd4hep::cm; + + RCPPlane surf( + plane(fview, new RectangularPlaneBounds(par[0] / dd4hep::cm, par[1] / dd4hep::cm, par[2] / dd4hep::cm))); fview.down(); bool doWire = fview.sibling(); int firstWire = fview.volume()->GetNumber(); auto const& wpar = fview.parameters(); - float wireLength = wpar[1]; + float wireLength = wpar[1] / dd4hep::cm; + + edm::LogVerbatim("DTGeometryBuilder") << "(4) detId: " << rawid << " wpar[1]: " << wpar[1] / dd4hep::cm + << " firstWire: " << firstWire; int WCounter = 0; while (doWire) { diff --git a/Geometry/DTGeometryBuilder/src/DTGeometryBuilderFromDD4Hep.cc b/Geometry/DTGeometryBuilder/src/DTGeometryBuilderFromDD4Hep.cc index 3fd47f124b065..f8a3e58dd3f94 100644 --- a/Geometry/DTGeometryBuilder/src/DTGeometryBuilderFromDD4Hep.cc +++ b/Geometry/DTGeometryBuilder/src/DTGeometryBuilderFromDD4Hep.cc @@ -38,6 +38,7 @@ #include "Geometry/MuonNumbering/interface/DTNumberingScheme.h" #include "DTGeometryBuilderFromDD4Hep.h" #include "DD4hep/Detector.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include @@ -49,6 +50,8 @@ using namespace std; void DTGeometryBuilderFromDD4Hep::buildGeometry(cms::DDFilteredView& fview, DTGeometry& geom, const MuonGeometryConstants& num) const { + edm::LogVerbatim("DTGeometryBuilder") << "(0) DTGeometryBuilder - DD4Hep "; + bool doChamber = fview.firstChild(); while (doChamber) { @@ -83,7 +86,7 @@ DTGeometryBuilderFromDD4Hep::RCPPlane DTGeometryBuilderFromDD4Hep::plane(const c const Double_t* rot = fview.rot(); return RCPPlane( - new Plane(Surface::PositionType(tr[0], tr[1], tr[2]), + new Plane(Surface::PositionType(tr[0] / dd4hep::cm, tr[1] / dd4hep::cm, tr[2] / dd4hep::cm), Surface::RotationType(rot[0], rot[3], rot[6], rot[1], rot[4], rot[7], rot[2], rot[5], rot[8]), bounds)); } @@ -97,7 +100,11 @@ DTChamber* DTGeometryBuilderFromDD4Hep::buildChamber(cms::DDFilteredView& fview, DTChamberId detId(rawid); auto const& par = fview.parameters(); - RCPPlane surf(plane(fview, new RectangularPlaneBounds(par[0], par[1], par[2]))); + RCPPlane surf( + plane(fview, new RectangularPlaneBounds(par[0] / dd4hep::cm, par[1] / dd4hep::cm, par[2] / dd4hep::cm))); + + edm::LogVerbatim("DTGeometryBuilder") << "(1) detId: " << rawid << " par[0]: " << par[0] / dd4hep::cm + << " par[1]: " << par[1] / dd4hep::cm << " par[2]: " << par[2] / dd4hep::cm; DTChamber* chamber = new DTChamber(detId, surf); @@ -115,7 +122,11 @@ DTSuperLayer* DTGeometryBuilderFromDD4Hep::buildSuperLayer(cms::DDFilteredView& auto const& par = fview.parameters(); - RCPPlane surf(plane(fview, new RectangularPlaneBounds(par[0], par[1], par[2]))); + RCPPlane surf( + plane(fview, new RectangularPlaneBounds(par[0] / dd4hep::cm, par[1] / dd4hep::cm, par[2] / dd4hep::cm))); + + edm::LogVerbatim("DTGeometryBuilder") << "(2) detId: " << rawid << " par[0]: " << par[0] / dd4hep::cm + << " par[1]: " << par[1] / dd4hep::cm << " par[2]: " << par[2] / dd4hep::cm; DTSuperLayer* slayer = new DTSuperLayer(slId, surf, chamber); @@ -135,13 +146,20 @@ DTLayer* DTGeometryBuilderFromDD4Hep::buildLayer(cms::DDFilteredView& fview, auto const& par = fview.parameters(); - RCPPlane surf(plane(fview, new RectangularPlaneBounds(par[0], par[1], par[2]))); + RCPPlane surf( + plane(fview, new RectangularPlaneBounds(par[0] / dd4hep::cm, par[1] / dd4hep::cm, par[2] / dd4hep::cm))); + + edm::LogVerbatim("DTGeometryBuilder") << "(3) detId: " << rawid << " par[0]: " << par[0] / dd4hep::cm + << " par[1]: " << par[1] / dd4hep::cm << " par[2]: " << par[2] / dd4hep::cm; fview.down(); bool doWire = fview.sibling(); int firstWire = fview.volume()->GetNumber(); auto const& wpar = fview.parameters(); - float wireLength = wpar[1]; + float wireLength = wpar[1] / dd4hep::cm; + + edm::LogVerbatim("DTGeometryBuilder") << "(4) detId: " << rawid << " wpar[1]: " << wpar[1] / dd4hep::cm + << " firstWire: " << firstWire; int WCounter = 0; while (doWire) { diff --git a/Geometry/DTGeometryBuilder/src/DTGeometryBuilderFromDDD.cc b/Geometry/DTGeometryBuilder/src/DTGeometryBuilderFromDDD.cc index 437cfb03d6b4e..a1fac46f1b1a2 100644 --- a/Geometry/DTGeometryBuilder/src/DTGeometryBuilderFromDDD.cc +++ b/Geometry/DTGeometryBuilder/src/DTGeometryBuilderFromDDD.cc @@ -16,9 +16,8 @@ #include "Geometry/MuonNumbering/interface/MuonBaseNumber.h" #include "Geometry/MuonNumbering/interface/DTNumberingScheme.h" #include "DataFormats/MuonDetId/interface/DTChamberId.h" - #include "DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h" - +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include using namespace std; @@ -54,6 +53,8 @@ void DTGeometryBuilderFromDDD::build(DTGeometry& theGeometry, void DTGeometryBuilderFromDDD::buildGeometry(DTGeometry& theGeometry, DDFilteredView& fv, const MuonGeometryConstants& muonConstants) const { + edm::LogVerbatim("DTGeometryBuilder") << "(0) DTGeometryBuilder - DDD "; + bool doChamber = fv.firstChild(); // Loop on chambers @@ -119,6 +120,9 @@ DTChamber* DTGeometryBuilderFromDDD::buildChamber(DDFilteredView& fv, // length is along local Y. z dimension - constant 125.55 cm // thickness is long local Z. radial thickness - almost constant about 18 cm + edm::LogVerbatim("DTGeometryBuilder") << "(1) detId: " << rawid << " par[0]: " << par[0] << " par[1]: " << par[1] + << " par[2]: " << par[2]; + RCPPlane surf(plane(fv, dtGeometryBuilder::getRecPlaneBounds(par.begin()))); DTChamber* chamber = new DTChamber(detId, surf); @@ -138,6 +142,9 @@ DTSuperLayer* DTGeometryBuilderFromDDD::buildSuperLayer(DDFilteredView& fv, // Slayer specific parameter (size) vector par = extractParameters(fv); + edm::LogVerbatim("DTGeometryBuilder") << "(2) detId: " << rawid << " par[0]: " << par[0] << " par[1]: " << par[1] + << " par[2]: " << par[2]; + // r-phi dimension - different in different chambers // z dimension - constant 126.8 cm // radial thickness - almost constant about 20 cm @@ -172,12 +179,20 @@ DTLayer* DTGeometryBuilderFromDDD::buildLayer(DDFilteredView& fv, RCPPlane surf(plane(fv, dtGeometryBuilder::getRecPlaneBounds(par.begin()))); + edm::LogVerbatim("DTGeometryBuilder") << "(3) detId: " << rawid << " par[0]: " << par[0] << " par[1]: " << par[1] + << " par[2]: " << par[2]; + // Loop on wires bool doWire = fv.firstChild(); int WCounter = 0; int firstWire = fv.copyno(); par = extractParameters(fv); float wireLength = convertMmToCm(par[1]); + + edm::LogVerbatim("DTGeometryBuilder") << "(4) detId: " << rawid + << " wireLenght in ddd, wpar[1] in dd4hep: " << wireLength + << " firstWire: " << firstWire; + while (doWire) { WCounter++; doWire = fv.nextSibling(); // next wire diff --git a/Geometry/DTGeometryBuilder/src/DTGeometryParsFromDD.cc b/Geometry/DTGeometryBuilder/src/DTGeometryParsFromDD.cc index 8c7d2209d99a0..64305ee33ed59 100644 --- a/Geometry/DTGeometryBuilder/src/DTGeometryParsFromDD.cc +++ b/Geometry/DTGeometryBuilder/src/DTGeometryParsFromDD.cc @@ -1,13 +1,16 @@ -/** \file +/** \class DTGeometryParsFromDD + * + * Build the RPCGeometry from the DDD and DD4Hep description + * + * DD4hep part added to the original old file (DD version) made by Stefano Lacaprara (INFN LNL) + * \author: Sergio Lo Meo (sergio.lo.meo@cern.ch) + * Created: Tue, 26 Jan 2021 * - * \author Stefano Lacaprara INFN LNL */ - #include #include #include #include - #include #include #include @@ -18,11 +21,16 @@ #include "DataFormats/MuonDetId/interface/DTChamberId.h" #include "DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h" #include "DataFormats/Math/interface/GeantUnits.h" - +#include "DataFormats/GeometryVector/interface/Basic3DVector.h" +#include +#include +#include "DetectorDescription/DDCMS/interface/DDSpecParRegistry.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include +#include #include using namespace std; - using namespace geant_units; using namespace geant_units::operators; @@ -30,6 +38,7 @@ DTGeometryParsFromDD::DTGeometryParsFromDD() {} DTGeometryParsFromDD::~DTGeometryParsFromDD() {} +// DD void DTGeometryParsFromDD::build(const DDCompactView* cview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rig) { @@ -47,12 +56,27 @@ void DTGeometryParsFromDD::build(const DDCompactView* cview, //cout << "RecoIdealGeometry " << rig.size() << endl; } +// DD4Hep + +void DTGeometryParsFromDD::build(const cms::DDCompactView* cview, + const MuonGeometryConstants& muonConstants, + RecoIdealGeometry& rgeo) { + const std::string attribute = "MuStructure"; + const std::string value = "MuonBarrelDT"; + const cms::DDFilter filter(attribute, value); + cms::DDFilteredView fview(*cview, filter); + buildGeometry(fview, muonConstants, rgeo); +} + +// DD void DTGeometryParsFromDD::buildGeometry(DDFilteredView& fv, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rig) const { // static const string t0 = "DTGeometryParsFromDD::buildGeometry"; // TimeMe timer(t0,true); + edm::LogVerbatim("DTGeometryParsFromDD") << "(0) DTGeometryParsFromDD - DDD "; + bool doChamber = fv.firstChild(); // Loop on chambers @@ -113,14 +137,14 @@ void DTGeometryParsFromDD::insertChamber(DDFilteredView& fv, par.emplace_back(DTChamberTag); vector size = extractParameters(fv); par.insert(par.end(), size.begin(), size.end()); - + edm::LogVerbatim("DTGeometryParsFromDD") + << "(1) DDD, Chamber DetID " << rawid << " " << par[0] << " " << par[1] << " " << par[2] << " " << par[3]; ///SL the definition of length, width, thickness depends on the local reference frame of the Det // width is along local X // length is along local Y // thickness is long local Z PosRotPair posRot(plane(fv)); - rig.insert(rawid, posRot.first, posRot.second, par); } @@ -139,10 +163,10 @@ void DTGeometryParsFromDD::insertSuperLayer(DDFilteredView& fv, par.emplace_back(DTSuperLayerTag); vector size = extractParameters(fv); par.insert(par.end(), size.begin(), size.end()); - + edm::LogVerbatim("DTGeometryParsFromDD") + << "(2) DDD, Super Layer DetID " << rawid << " " << par[0] << " " << par[1] << " " << par[2] << " " << par[3]; // Ok this is the slayer position... PosRotPair posRot(plane(fv)); - rig.insert(slId, posRot.first, posRot.second, par); } @@ -180,6 +204,9 @@ void DTGeometryParsFromDD::insertLayer(DDFilteredView& fv, PosRotPair posRot(plane(fv)); + edm::LogVerbatim("DTGeometryParsFromDD") + << "(3) DDD, Layer DetID " << rawid << " " << par[0] << " " << par[1] << " " << par[2] << " " << par[3] << " " + << par[4] << " " << par[5] << " " << par[6]; rig.insert(layId, posRot.first, posRot.second, par); } @@ -208,16 +235,13 @@ DTGeometryParsFromDD::PosRotPair DTGeometryParsFromDD::plane(const DDFilteredVie gtran[1] = convertMmToCm(trans.y()); gtran[2] = convertMmToCm(trans.z()); + edm::LogVerbatim("DTGeometryParsFromDD") << "(4) DDD, Position " + << " " << gtran[0] << " " << gtran[1] << " " << gtran[2]; // now the rotation // 'active' and 'passive' rotations are inverse to each other const DDRotationMatrix& rotation = fv.rotation(); //REMOVED .Inverse(); DD3Vector x, y, z; rotation.GetComponents(x, y, z); - // std::cout << "INVERSE rotation by its own operator: "<< fv.rotation() << std::endl; - // std::cout << "INVERSE rotation manually: " - // << x.X() << ", " << x.Y() << ", " << x.Z() << std::endl - // << y.X() << ", " << y.Y() << ", " << y.Z() << std::endl - // << z.X() << ", " << z.Y() << ", " << z.Z() << std::endl; std::vector grmat(9); grmat[0] = x.X(); @@ -232,13 +256,153 @@ DTGeometryParsFromDD::PosRotPair DTGeometryParsFromDD::plane(const DDFilteredVie grmat[7] = z.Y(); grmat[8] = z.Z(); - // std::cout << "rotation by its own operator: "<< tmp << std::endl; - // DD3Vector tx, ty,tz; - // tmp.GetComponents(tx, ty, tz); - // std::cout << "rotation manually: " - // << tx.X() << ", " << tx.Y() << ", " << tx.Z() << std::endl - // << ty.X() << ", " << ty.Y() << ", " << ty.Z() << std::endl - // << tz.X() << ", " << tz.Y() << ", " << tz.Z() << std::endl; + return pair, std::vector >(gtran, grmat); +} + +// DD4Hep + +void DTGeometryParsFromDD::buildGeometry(cms::DDFilteredView& fv, + const MuonGeometryConstants& muonConstants, + RecoIdealGeometry& rig) const { + edm::LogVerbatim("DTGeometryParsFromDD") << "(0) DTGeometryParsFromDD - DD4HEP "; + + bool doChamber = fv.firstChild(); + + while (doChamber) { + insertChamber(fv, muonConstants, rig); + + bool doSL = fv.nextSibling(); + while (doSL) { + insertSuperLayer(fv, muonConstants, rig); + + fv.down(); + bool doLayers = fv.sibling(); + while (doLayers) { + insertLayer(fv, muonConstants, rig); + + doLayers = fv.sibling(); + } + + doSL = fv.nextSibling(); + } + + fv.parent(); + doChamber = fv.firstChild(); + } +} + +DTGeometryParsFromDD::PosRotPair DTGeometryParsFromDD::plane(const cms::DDFilteredView& fv) const { + const Double_t* tr = fv.trans(); + + std::vector gtran(3); + + gtran[0] = tr[0] / dd4hep::cm; + gtran[1] = tr[1] / dd4hep::cm; + gtran[2] = tr[2] / dd4hep::cm; + + edm::LogVerbatim("DTGeometryParsFromDD") << "(4) DD4HEP, Position " + << " " << gtran[0] << " " << gtran[1] << " " << gtran[2]; + + DDRotationMatrix rotation = fv.rotation(); + DD3Vector x, y, z; + rotation.GetComponents(x, y, z); + + std::vector grmat(9); + + grmat[0] = x.X(); + grmat[1] = x.Y(); + grmat[2] = x.Z(); + + grmat[3] = y.X(); + grmat[4] = y.Y(); + grmat[5] = y.Z(); + + grmat[6] = z.X(); + grmat[7] = z.Y(); + grmat[8] = z.Z(); return pair, std::vector >(gtran, grmat); } + +void DTGeometryParsFromDD::insertChamber(cms::DDFilteredView& fv, + const MuonGeometryConstants& muonConstants, + RecoIdealGeometry& rig) const { + MuonGeometryNumbering mdddnum(muonConstants); + DTNumberingScheme dtnum(muonConstants); + int rawid = dtnum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fv.history())); + DTChamberId detId(rawid); + + vector par_temp = fv.parameters(); + vector par(4); + par[0] = DTChamberTag; //DTChamberTag is the ID of a Chamber + par[1] = par_temp[0] / dd4hep::mm; + par[2] = par_temp[1] / dd4hep::mm; + par[3] = par_temp[2] / dd4hep::mm; + + edm::LogVerbatim("DTGeometryParsFromDD") + << "(1) DD4HEP, Chamber DetID " << rawid << " " << par[0] << " " << par[1] << " " << par[2] << " " << par[3]; + PosRotPair posRot(plane(fv)); + rig.insert(rawid, posRot.first, posRot.second, par); +} + +void DTGeometryParsFromDD::insertSuperLayer(cms::DDFilteredView& fv, + const MuonGeometryConstants& muonConstants, + RecoIdealGeometry& rig) const { + MuonGeometryNumbering mdddnum(muonConstants); + DTNumberingScheme dtnum(muonConstants); + int rawid = dtnum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fv.history())); + DTSuperLayerId slId(rawid); + + vector par_temp = fv.parameters(); + vector par(4); + par[0] = DTSuperLayerTag; //DTSuperLayerTag is the ID of a SuperLayer + par[1] = par_temp[0] / dd4hep::mm; + par[2] = par_temp[1] / dd4hep::mm; + par[3] = par_temp[2] / dd4hep::mm; + + edm::LogVerbatim("DTGeometryParsFromDD") + << "(2) DD4HEP, Super Layer DetID " << rawid << " " << par[0] << " " << par[1] << " " << par[2] << " " << par[3]; + PosRotPair posRot(plane(fv)); + rig.insert(slId, posRot.first, posRot.second, par); +} + +void DTGeometryParsFromDD::insertLayer(cms::DDFilteredView& fv, + const MuonGeometryConstants& muonConstants, + RecoIdealGeometry& rig) const { + MuonGeometryNumbering mdddnum(muonConstants); + DTNumberingScheme dtnum(muonConstants); + int rawid = dtnum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fv.history())); + DTLayerId layId(rawid); + + vector par_temp = fv.parameters(); + vector par(4); + par[0] = DTLayerTag; //DTLayerTag is the ID of a Layer + par[1] = par_temp[0] / dd4hep::mm; + par[2] = par_temp[1] / dd4hep::mm; + par[3] = par_temp[2] / dd4hep::mm; + + fv.down(); + bool doWire = fv.sibling(); + int firstWire = fv.volume()->GetNumber(); + auto const& wpar = fv.parameters(); + float wireLength = wpar[1] / dd4hep::mm; + + int WCounter = 0; + while (doWire) { + doWire = fv.checkChild(); + WCounter++; + } + + par.emplace_back(firstWire); + par.emplace_back(WCounter); + par.emplace_back(wireLength); + + fv.up(); + + PosRotPair posRot(plane(fv)); + + edm::LogVerbatim("DTGeometryParsFromDD") + << "(3) DD4HEP, Layer DetID " << rawid << " " << par[0] << " " << par[1] << " " << par[2] << " " << par[3] << " " + << par[4] << " " << par[5] << " " << par[6]; + rig.insert(layId, posRot.first, posRot.second, par); +} diff --git a/Geometry/DTGeometryBuilder/src/DTGeometryParsFromDD.h b/Geometry/DTGeometryBuilder/src/DTGeometryParsFromDD.h index 6b4be45c7fdce..6ffc55685aa74 100644 --- a/Geometry/DTGeometryBuilder/src/DTGeometryParsFromDD.h +++ b/Geometry/DTGeometryBuilder/src/DTGeometryParsFromDD.h @@ -1,19 +1,24 @@ #ifndef DTGeometryBuilder_DTGeometryParsFromDD_h #define DTGeometryBuilder_DTGeometryParsFromDD_h - /** \class DTGeometryParsFromDD * - * Build the DTGeometry from the DDD description. + * Build the RPCGeometry from the DDD and DD4Hep description + * + * DD4hep part added to the original old file (DD version) made by Stefano Lacaprara (INFN LNL) + * \author: Sergio Lo Meo (sergio.lo.meo@cern.ch) + * Created: Tue, 26 Jan 2021 * - * \author Stefano Lacaprara INFN LNL */ - #include "DataFormats/GeometrySurface/interface/BoundPlane.h" #include class DTGeometry; class DDCompactView; class DDFilteredView; +namespace cms { // DD4Hep + class DDFilteredView; + class DDCompactView; +} // namespace cms class DTChamber; class DTSuperLayer; class DTLayer; @@ -29,12 +34,16 @@ class DTGeometryParsFromDD { /// Destructor virtual ~DTGeometryParsFromDD(); - // Operations + // DD void build(const DDCompactView* cview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rig); + // DD4Hep + void build(const cms::DDCompactView* cview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rgeo); + enum DTDetTag { DTChamberTag, DTSuperLayerTag, DTLayerTag }; private: + // DD /// create the chamber void insertChamber(DDFilteredView& fv, const std::string& type, @@ -61,5 +70,22 @@ class DTGeometryParsFromDD { PosRotPair plane(const DDFilteredView& fv) const; void buildGeometry(DDFilteredView& fv, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rig) const; + + // DD4Hep + + void buildGeometry(cms::DDFilteredView& fv, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rig) const; + + /// create the chamber + void insertChamber(cms::DDFilteredView& fv, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rig) const; + + /// create the SL + void insertSuperLayer(cms::DDFilteredView& fv, + const MuonGeometryConstants& muonConstants, + RecoIdealGeometry& rig) const; + + /// create the layer + void insertLayer(cms::DDFilteredView& fv, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rig) const; + + PosRotPair plane(const cms::DDFilteredView& fv) const; }; #endif diff --git a/Geometry/DTGeometryBuilder/test/python/validateDTGeometryDDD_cfg.py b/Geometry/DTGeometryBuilder/test/python/validateDTGeometryDDD_cfg.py new file mode 100644 index 0000000000000..023360b4b18ef --- /dev/null +++ b/Geometry/DTGeometryBuilder/test/python/validateDTGeometryDDD_cfg.py @@ -0,0 +1,30 @@ +import FWCore.ParameterSet.Config as cms +from Configuration.Eras.Era_Run3_cff import Run3 + +process = cms.Process('VALID',Run3) + +process.source = cms.Source('EmptySource') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) + ) + +process.load('Configuration.Geometry.GeometryExtended2021_cff') +process.load("FWCore.MessageLogger.MessageLogger_cfi") +process.load("Geometry.MuonNumbering.muonNumberingInitialization_cfi") +process.load("Geometry.MuonNumbering.muonGeometryConstants_cff") +process.load("Geometry.DTGeometryBuilder.dtGeometry_cfi") + +process.MessageLogger = cms.Service("MessageLogger", + destinations = cms.untracked.vstring('myLog'), + myLog = cms.untracked.PSet( + threshold = cms.untracked.string('INFO'), + ) + ) + +process.valid = cms.EDAnalyzer("DTGeometryValidate", + infileName = cms.untracked.string('cmsRecoGeom-2021.root'), + outfileName = cms.untracked.string('validateDTGeometryDDD.root'), + ) + +process.p = cms.Path(process.valid) diff --git a/Geometry/DTGeometryBuilder/test/python/validateDTGeometry_cfg.py b/Geometry/DTGeometryBuilder/test/python/validateDTGeometry_cfg.py index 0f53b68a50039..1a5b07744c3cf 100644 --- a/Geometry/DTGeometryBuilder/test/python/validateDTGeometry_cfg.py +++ b/Geometry/DTGeometryBuilder/test/python/validateDTGeometry_cfg.py @@ -1,3 +1,7 @@ +# This config does not work with the version of DD4hep that uses Geant4 units. This config performs a comparison +# with a reference geometry which might use the ROOT units convention. This mismatch somehow triggers a ROOT exception. +# We don't currently have a fix for this problem. + import FWCore.ParameterSet.Config as cms process = cms.Process('VALID') @@ -13,6 +17,12 @@ process.load("Geometry.MuonNumbering.muonNumberingInitialization_cfi") process.load("Geometry.MuonNumbering.muonGeometryConstants_cff") +process.MessageLogger = cms.Service("MessageLogger", + destinations = cms.untracked.vstring('myLog'), + myLog = cms.untracked.PSet( + threshold = cms.untracked.string('INFO'), + ) + ) process.DTGeometryESProducer = cms.ESProducer("DTGeometryESProducer", DDDetector = cms.ESInputTag('',''), diff --git a/Geometry/DTGeometryBuilder/test/runTest.sh b/Geometry/DTGeometryBuilder/test/runTest.sh index 3441aa6d73a9a..4df95b1f03022 100755 --- a/Geometry/DTGeometryBuilder/test/runTest.sh +++ b/Geometry/DTGeometryBuilder/test/runTest.sh @@ -21,8 +21,9 @@ FILE4=dtGeometryFiltered.log echo " testing Geometry/DTGeometryBuilder" export tmpdir=${LOCAL_TMP_DIR:-/tmp} -echo "===== Test \"cmsRun validateDTGeometry_cfg.py\" ====" -(cmsRun $F1) || die "Failure using cmsRun $F1" $? +# The following test does not work with DD4hep with Geant4 units +# echo "===== Test \"cmsRun validateDTGeometry_cfg.py\" ====" +# (cmsRun $F1) || die "Failure using cmsRun $F1" $? echo "===== Test \"cmsRun testDTGeometry.py\" ====" (cmsRun $F2; grep -v 'Benchmark ' $FILE2 | grep -v '^ *[1-9]' | grep -v '%MSG-i' | grep -v '^Info '>& $FILE4; diff --git a/Geometry/EcalAlgo/test/EcalBarrelCellParameterDump.cc b/Geometry/EcalAlgo/test/EcalBarrelCellParameterDump.cc index 8ffb62273aaf3..5184826e07f54 100644 --- a/Geometry/EcalAlgo/test/EcalBarrelCellParameterDump.cc +++ b/Geometry/EcalAlgo/test/EcalBarrelCellParameterDump.cc @@ -1,7 +1,6 @@ #include "DataFormats/EcalDetId/interface/EBDetId.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "Geometry/Records/interface/CaloGeometryRecord.h" @@ -17,17 +16,21 @@ typedef EZArrayFL CornersVec; class EcalBarrelCellParameterDump : public edm::one::EDAnalyzer<> { public: - explicit EcalBarrelCellParameterDump(const edm::ParameterSet&) {} + explicit EcalBarrelCellParameterDump(const edm::ParameterSet&); void beginJob() override {} void analyze(edm::Event const& iEvent, edm::EventSetup const&) override; void endJob() override {} + +private: + const edm::ESGetToken tok_geom_; }; +EcalBarrelCellParameterDump::EcalBarrelCellParameterDump(const edm::ParameterSet&) + : tok_geom_(esConsumes()) {} + void EcalBarrelCellParameterDump::analyze(const edm::Event& /*iEvent*/, const edm::EventSetup& iSetup) { - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry* geo = pG.product(); + const CaloGeometry* geo = &iSetup.getData(tok_geom_); const CaloSubdetectorGeometry* ecalGeom = static_cast(geo->getSubdetectorGeometry(DetId::Ecal, EcalBarrel)); diff --git a/Geometry/EcalAlgo/test/EcalEndcapCellParameterDump.cc b/Geometry/EcalAlgo/test/EcalEndcapCellParameterDump.cc index ceb4bb187bfbf..beb17f661e18d 100644 --- a/Geometry/EcalAlgo/test/EcalEndcapCellParameterDump.cc +++ b/Geometry/EcalAlgo/test/EcalEndcapCellParameterDump.cc @@ -1,7 +1,6 @@ #include "DataFormats/EcalDetId/interface/EEDetId.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "Geometry/Records/interface/CaloGeometryRecord.h" @@ -17,17 +16,21 @@ typedef EZArrayFL CornersVec; class EcalEndcapCellParameterDump : public edm::one::EDAnalyzer<> { public: - explicit EcalEndcapCellParameterDump(const edm::ParameterSet&) {} + explicit EcalEndcapCellParameterDump(const edm::ParameterSet&); void beginJob() override {} void analyze(edm::Event const& iEvent, edm::EventSetup const&) override; void endJob() override {} + +private: + const edm::ESGetToken tok_geom_; }; +EcalEndcapCellParameterDump::EcalEndcapCellParameterDump(const edm::ParameterSet&) + : tok_geom_(esConsumes()) {} + void EcalEndcapCellParameterDump::analyze(const edm::Event& /*iEvent*/, const edm::EventSetup& iSetup) { - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry* geo = pG.product(); + const CaloGeometry* geo = &iSetup.getData(tok_geom_); const CaloSubdetectorGeometry* ecalGeom = static_cast(geo->getSubdetectorGeometry(DetId::Ecal, EcalEndcap)); diff --git a/Geometry/EcalAlgo/test/EcalPreshowerParameterDump.cc b/Geometry/EcalAlgo/test/EcalPreshowerParameterDump.cc index 0112baa65ef16..e3167a6ff74c4 100644 --- a/Geometry/EcalAlgo/test/EcalPreshowerParameterDump.cc +++ b/Geometry/EcalAlgo/test/EcalPreshowerParameterDump.cc @@ -2,7 +2,6 @@ #include "DataFormats/EcalDetId/interface/ESDetId.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" @@ -34,11 +33,13 @@ class EcalPreshowerCellParameterDump : public edm::one::EDAnalyzer tok_geom_; std::vector hist_; }; EcalPreshowerCellParameterDump::EcalPreshowerCellParameterDump(const edm::ParameterSet& ps) - : debug_(ps.getUntrackedParameter("debug", false)) { + : debug_(ps.getUntrackedParameter("debug", false)), + tok_geom_(esConsumes()) { usesResource(TFileService::kSharedResource); if (debug_) { @@ -63,9 +64,7 @@ void EcalPreshowerCellParameterDump::fillDescriptions(edm::ConfigurationDescript } void EcalPreshowerCellParameterDump::analyze(const edm::Event& /*iEvent*/, const edm::EventSetup& iSetup) { - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry* geo = pG.product(); + const CaloGeometry* geo = &iSetup.getData(tok_geom_); const CaloSubdetectorGeometry* ecalGeom = static_cast(geo->getSubdetectorGeometry(DetId::Ecal, EcalPreshower)); diff --git a/Geometry/EcalAlgo/test/python/runEcalCellDumpDD4Hep_cfg.py b/Geometry/EcalAlgo/test/python/runEcalCellDumpDD4Hep_cfg.py index 2e81e7f7feb8b..55df55e29e4f8 100644 --- a/Geometry/EcalAlgo/test/python/runEcalCellDumpDD4Hep_cfg.py +++ b/Geometry/EcalAlgo/test/python/runEcalCellDumpDD4Hep_cfg.py @@ -1,40 +1,21 @@ import FWCore.ParameterSet.Config as cms +from Configuration.Eras.Era_Run3_dd4hep_cff import Run3_dd4hep -process = cms.Process("EcalGeometryTest") +process = cms.Process("EcalGeometryTest",Run3_dd4hep) -process.load("Geometry.HcalCommonData.hcalDDDSimConstants_cff") -process.load("Geometry.HcalCommonData.hcalDDDRecConstants_cfi") -process.load("Geometry.EcalCommonData.ecalSimulationParameters_cff") -process.load("Geometry.CMSCommonData.cmsIdealGeometryXML_cfi"); -process.load("Geometry.CaloEventSetup.CaloTopology_cfi") -process.load("Geometry.CaloEventSetup.CaloGeometry_cff") -process.load("Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi") -process.load("Geometry.EcalMapping.EcalMapping_cfi") -process.load("Geometry.EcalMapping.EcalMappingRecord_cfi") - -process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", - confGeomXMLFiles = cms.FileInPath('Geometry/EcalCommonData/data/dd4hep/cms-ecal-geometry.xml'), - appendToDataLabel = cms.string('') -) - -process.DDCompactViewESProducer = cms.ESProducer("DDCompactViewESProducer", - appendToDataLabel = cms.string('') -) +process.load('Configuration.Geometry.GeometryDD4hepExtended2021_cff') +process.load('Configuration.Geometry.GeometryDD4hepExtended2021Reco_cff') process.source = cms.Source("EmptySource") process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) ) -process.hcalParameters.fromDD4Hep = cms.bool(True) -process.caloSimulationParameters.fromDD4Hep = cms.bool(True) -process.CaloGeometryBuilder.SelectedCalos = ['EcalBarrel', 'EcalEndcap', 'EcalPreshower'] -process.ecalSimulationParametersEB.fromDD4Hep = cms.bool(True) -process.ecalSimulationParametersEE.fromDD4Hep = cms.bool(True) -process.ecalSimulationParametersES.fromDD4Hep = cms.bool(True) - process.demo1 = cms.EDAnalyzer("EcalBarrelCellParameterDump") process.demo2 = cms.EDAnalyzer("EcalEndcapCellParameterDump") process.demo3 = cms.EDAnalyzer("EcalPreshowerCellParameterDump") +process.Timing = cms.Service("Timing") +process.SimpleMemoryCheck = cms.Service("SimpleMemoryCheck") + process.p1 = cms.Path(process.demo1 * process.demo2 * process.demo3) diff --git a/Geometry/EcalAlgo/test/python/runEcalCellDumpDDD_cfg.py b/Geometry/EcalAlgo/test/python/runEcalCellDumpDDD_cfg.py index 54c1ef46b6145..894581eb2c378 100644 --- a/Geometry/EcalAlgo/test/python/runEcalCellDumpDDD_cfg.py +++ b/Geometry/EcalAlgo/test/python/runEcalCellDumpDDD_cfg.py @@ -1,16 +1,9 @@ import FWCore.ParameterSet.Config as cms +from Configuration.Eras.Era_Run3_cff import Run3 -process = cms.Process("EcalGeometryTest") +process = cms.Process("EcalGeometryTest",Run3) -process.load("Geometry.HcalCommonData.hcalDDDSimConstants_cff") -process.load("Geometry.HcalCommonData.hcalDDDRecConstants_cfi") -process.load("Geometry.EcalCommonData.ecalSimulationParameters_cff") -process.load("Geometry.CMSCommonData.cmsIdealGeometryXML_cfi"); -process.load("Geometry.CaloEventSetup.CaloTopology_cfi") -process.load("Geometry.CaloEventSetup.CaloGeometry_cff") -process.load("Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi") -process.load("Geometry.EcalMapping.EcalMapping_cfi") -process.load("Geometry.EcalMapping.EcalMappingRecord_cfi") +process.load("Configuration.Geometry.GeometryExtended2021Reco_cff") process.source = cms.Source("EmptySource") process.maxEvents = cms.untracked.PSet( diff --git a/Geometry/EcalCommonData/plugins/DDEcalBarrelNewAlgo.cc b/Geometry/EcalCommonData/plugins/DDEcalBarrelNewAlgo.cc index e115e428e553b..8249f1d2faae5 100644 --- a/Geometry/EcalCommonData/plugins/DDEcalBarrelNewAlgo.cc +++ b/Geometry/EcalCommonData/plugins/DDEcalBarrelNewAlgo.cc @@ -1541,7 +1541,13 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { Rota(Vec3(vecBarRota2()[0], vecBarRota2()[1], vecBarRota2()[2]), vecBarRota2()[3]) * Rota(Vec3(vecBarRota()[0], vecBarRota()[1], vecBarRota()[2]), vecBarRota()[3]))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << barName().name() << ":" << copyOne << " positioned in " << parent().name().name(); + edm::LogVerbatim("EBGeom") << barName() << " PolyCone from " << barPhiLo() / CLHEP::deg << " to " + << barPhiHi() / CLHEP::deg << " with " << vecBarZPts().size() << " points"; + for (unsigned int k = 0; k < vecBarZPts().size(); ++k) + edm::LogVerbatim("EBGeom") << "[" << k << "] " << vecBarZPts()[k] << ":" << vecBarRMin()[k] << ":" + << vecBarRMax()[k]; + edm::LogVerbatim("EBGeomX") << barName() << ":" << copyOne << " positioned in " << parent().name() << " at " + << DDTranslation(vecBarTran()[0], vecBarTran()[1], vecBarTran()[2]) << " with rotation"; #endif // End Barrel parent volume---------------------------------------------------------- @@ -1550,6 +1556,14 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { const DDName spmcut1ddname((0 != spmCutShow()) ? spmName() : ddname(m_SpmName + "CUT1")); const DDSolid ddspm( DDSolidFactory::polycone(spmcut1ddname, spmLowPhi(), spmDelPhi(), vecSpmZPts(), vecSpmRMin(), vecSpmRMax())); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << spmcut1ddname << " PolyCone from " << spmLowPhi() / CLHEP::deg << " to " + << (spmLowPhi() + spmDelPhi()) / CLHEP::deg << " with " << vecSpmZPts().size() + << " points"; + for (unsigned int k = 0; k < vecSpmZPts().size(); ++k) + edm::LogVerbatim("EBGeom") << "[" << k << "] " << vecSpmZPts()[k] << ":" << vecSpmRMin()[k] << ":" + << vecSpmRMax()[k]; +#endif const unsigned int indx(vecSpmRMax().size() / 2); @@ -1558,19 +1572,27 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { 1.05 * (vecSpmRMax()[indx] - vecSpmRMin()[indx]) / 2., spmCutThick() / 2., fabs(vecSpmZPts().back() - vecSpmZPts().front()) / 2. + 1 * mm)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << spmCutName() << " Box " << 1.05 * (vecSpmRMax()[indx] - vecSpmRMin()[indx]) / 2. + << ":" << spmCutThick() / 2. << ":" + << (fabs(vecSpmZPts().back() - vecSpmZPts().front()) / 2. + 1 * mm); +#endif const std::vector& cutBoxParms(spmCutBox.parameters()); const DDLogicalPart spmCutLog(spmCutName(), spmMat(), spmCutBox); - + /* // Now the expansion box const double xExp(spmExpThick() / 2.); const double yExp(spmExpWide() / 2.); const double zExp(fabs(vecSpmZPts().back() - vecSpmZPts().front()) / 2.); const DDName expName(m_SpmName + "EXP"); const DDSolid spmExpBox(DDSolidFactory::box(expName, xExp, yExp, zExp)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << expName << " Box " << xExp << ":" << yExp << ":" << zExp; +#endif const DDTranslation expTra(vecSpmRMax().back() - xExp, spmExpYOff(), vecSpmZPts().front() + zExp); const DDLogicalPart expLog(expName, spmMat(), spmExpBox); - /* const DDName unionName ( ddname( m_SpmName + "UNI" ) ) ; + const DDName unionName ( ddname( m_SpmName + "UNI" ) ) ; if( 0 != spmCutShow() ) { cpv.position( expLog, spmName(), copyOne, expTra, DDRotation() ) ; @@ -1581,11 +1603,16 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { unionName, spmcut1ddname, expName, expTra, DDRotation() ) ) ; - }*/ + } + */ // Supermodule side platess const DDSolid sideSolid(DDSolidFactory::box( spmSideName(), spmSideHigh() / 2., spmSideThick() / 2., fabs(vecSpmZPts()[1] - vecSpmZPts()[0]) / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << spmSideName() << " Box " << spmSideHigh() / 2. << ":" << spmSideThick() / 2. << ":" + << fabs(vecSpmZPts()[1] - vecSpmZPts()[0]) / 2.; +#endif const std::vector& sideParms(sideSolid.parameters()); const DDLogicalPart sideLog(spmSideName(), spmSideMat(), sideSolid); @@ -1619,21 +1646,30 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { cpv.position(sideLog, spmName(), icopy, sideddtra, sideddrot); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << sideLog.name().name() << ":" << icopy << " positioned in " << spmName().name(); + edm::LogVerbatim("EBGeomX") << sideLog.name() << ":" << icopy << " positioned in " << spmName() << " at " + << sideddtra << " with rotation"; #endif if (0 != spmCutShow()) // do this if we are "showing" the boxes { cpv.position(spmCutLog, spmName(), icopy, ddtra, ddrot); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << spmCutLog.name().name() << ":" << icopy << " positioned in " - << spmName().name(); + edm::LogVerbatim("EBGeomX") << spmCutLog.name() << ":" << icopy << " positioned in " << spmName() << " at " + << ddtra << " with rotation"; #endif } else // do this if we are subtracting the boxes { if (1 == icopy) { temp1 = DDSolidFactory::subtraction(DDName(m_SpmName + "_T1"), spmcut1ddname, spmCutBox, ddtra, ddrot); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << DDName(m_SpmName + "_T1") << " Subtraction " << spmcut1ddname << ":" + << spmCutBox.name() << " at " << ddtra; +#endif } else { temp2 = DDSolidFactory::subtraction(spmName(), temp1, spmCutBox, ddtra, ddrot); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << spmName() << " Subtraction " << temp1.name() << ":" << spmCutBox.name() + << " at " << ddtra; +#endif } } } @@ -1671,8 +1707,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation myTran(both.getTranslation().x(), both.getTranslation().y(), both.getTranslation().z()); cpv.position(spmLog, barName(), iphi + 1, myTran, rota); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << spmLog.name().name() << ":" << (iphi + 1) << " positioned in " - << barName().name(); + edm::LogVerbatim("EBGeomX") << spmLog.name() << ":" << (iphi + 1) << " positioned in " << barName() << " at " + << myTran << " with rotation"; #endif } } @@ -1688,10 +1724,15 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { const DDName ilyDDName(ddname(ilyName())); const DDSolid ilySolid( DDSolidFactory::tubs(ilyDDName, ilyLength / 2, ilyRMin, ilyRMin + ilyThick, ilyPhiLow(), ilyDelPhi())); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << ilyDDName << " Tubs " << ilyLength / 2 << ":" << ilyRMin << ":" << ilyRMin + ilyThick + << ":" << ilyPhiLow() / CLHEP::deg << ":" << ilyDelPhi() / CLHEP::deg; +#endif const DDLogicalPart ilyLog(ilyDDName, spmMat(), ilySolid); cpv.position(ilyLog, spmLog, copyOne, DDTranslation(0, 0, ilyLength / 2), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << ilyDDName.name() << ":" << copyOne << " positioned in " << spmLog.name().name(); + edm::LogVerbatim("EBGeomX") << ilyDDName << ":" << copyOne << " positioned in " << spmLog.name() << " at " + << DDTranslation(0, 0, ilyLength / 2) << " with no rotation"; #endif DDLogicalPart ilyPipeLog[200]; @@ -1701,38 +1742,67 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDSolid ilyPipeSolid( DDSolidFactory::tubs(pName, vecIlyPipeLength()[iPipeType] / 2., 0, ilyPipeOD() / 2, 0 * deg, 360 * deg)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pName << " Tubs " << vecIlyPipeLength()[iPipeType] / 2. + << ":0:" << ilyPipeOD() / 2 << ":0:360"; +#endif ilyPipeLog[iPipeType] = DDLogicalPart(pName, ilyPipeMat(), ilyPipeSolid); const DDName pWaName(ddname(ilyPipeName() + "Wa_" + std::to_string(iPipeType + 1))); DDSolid ilyPipeWaSolid( DDSolidFactory::tubs(pWaName, vecIlyPipeLength()[iPipeType] / 2., 0, ilyPipeID() / 2, 0 * deg, 360 * deg)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pWaName << " Tubs " << vecIlyPipeLength()[iPipeType] / 2. + << ":0:" << ilyPipeID() / 2 << ":0:360"; +#endif const DDLogicalPart ilyPipeWaLog(pWaName, backPipeWaterMat(), ilyPipeWaSolid); cpv.position(ilyPipeWaLog, pName, copyOne, DDTranslation(0, 0, 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << pWaName.name() << ":" << copyOne << " positioned in " << pName.name(); + edm::LogVerbatim("EBGeomX") << pWaName << ":" << copyOne << " positioned in " << pName << " at " + << DDTranslation(0, 0, 0) << " with no rotation"; #endif } } DDSolid ilyPTMSolid( DDSolidFactory::box(ilyPTMName(), ilyPTMHeight() / 2., ilyPTMWidth() / 2., ilyPTMLength() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << ilyPTMName() << " Box " << ilyPTMHeight() / 2. << ":" << ilyPTMWidth() / 2. << ":" + << ilyPTMLength() / 2.; +#endif const DDLogicalPart ilyPTMLog(ilyPTMName(), ilyPTMMat(), ilyPTMSolid); DDSolid ilyFanOutSolid( DDSolidFactory::box(ilyFanOutName(), ilyFanOutHeight() / 2., ilyFanOutWidth() / 2., ilyFanOutLength() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << ilyFanOutName() << " Box " << ilyFanOutHeight() / 2. << ":" << ilyFanOutWidth() / 2. + << ":" << ilyFanOutLength() / 2.; +#endif const DDLogicalPart ilyFanOutLog(ilyFanOutName(), ilyFanOutMat(), ilyFanOutSolid); DDSolid ilyFEMSolid( DDSolidFactory::box(ilyFEMName(), ilyFEMHeight() / 2., ilyFEMWidth() / 2., ilyFEMLength() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << ilyFEMName() << " Box " << ilyFEMHeight() / 2. << ":" << ilyFEMWidth() / 2. << ":" + << ilyFEMLength() / 2.; +#endif const DDLogicalPart ilyFEMLog(ilyFEMName(), ilyFEMMat(), ilyFEMSolid); DDSolid ilyDiffSolid( DDSolidFactory::box(ilyDiffName(), ilyFanOutHeight() / 2., ilyFanOutWidth() / 2., ilyDiffLength() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << ilyDiffName() << " Box " << ilyFanOutHeight() / 2. << ":" << ilyFanOutWidth() / 2. + << ":" << ilyDiffLength() / 2.; +#endif const DDLogicalPart ilyDiffLog(ilyDiffName(), ilyDiffMat(), ilyDiffSolid); DDSolid ilyBndlSolid( DDSolidFactory::box(ilyBndlName(), ilyFanOutHeight() / 2., ilyFanOutWidth() / 2., ilyBndlLength() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << ilyBndlName() << " Box " << ilyFanOutHeight() / 2. << ":" << ilyFanOutWidth() / 2. + << ":" << ilyBndlLength() / 2.; +#endif const DDLogicalPart ilyBndlLog(ilyBndlName(), ilyBndlMat(), ilyBndlSolid); cpv.position(ilyDiffLog, ilyFanOutName(), @@ -1740,8 +1810,9 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(0, 0, -ilyFanOutLength() / 2 + ilyDiffLength() / 2 + ilyDiffOff()), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << ilyDiffName().name() << ":" << copyOne << " positioned in " - << ilyFanOutName().name(); + edm::LogVerbatim("EBGeomX") << ilyDiffName() << ":" << copyOne << " positioned in " << ilyFanOutName() << " at " + << DDTranslation(0, 0, -ilyFanOutLength() / 2 + ilyDiffLength() / 2 + ilyDiffOff()) + << " with no rotation"; #endif cpv.position(ilyBndlLog, ilyFanOutName(), @@ -1749,21 +1820,27 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(0, 0, -ilyFanOutLength() / 2 + ilyBndlLength() / 2 + ilyBndlOff()), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << ilyBndlName().name() << ":" << copyOne << " positioned in " - << ilyFanOutName().name(); + edm::LogVerbatim("EBGeomX") << ilyBndlName() << ":" << copyOne << " positioned in " << ilyFanOutName() << " at " + << DDTranslation(0, 0, -ilyFanOutLength() / 2 + ilyBndlLength() / 2 + ilyBndlOff()) + << " with no rotation"; #endif for (unsigned int ily(0); ily != vecIlyThick().size(); ++ily) { const double ilyRMax(ilyRMin + vecIlyThick()[ily]); const DDName xilyName(ddname(ilyName() + std::to_string(ily))); const DDSolid xilySolid( DDSolidFactory::tubs(xilyName, ilyLength / 2, ilyRMin, ilyRMax, ilyPhiLow(), ilyDelPhi())); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << xilyName << " Tubs " << ilyLength / 2 << ":" << ilyRMin << ":" << ilyRMax << ":" + << ilyPhiLow() / CLHEP::deg << ":" << ilyDelPhi() / CLHEP::deg; +#endif const DDLogicalPart xilyLog(xilyName, ddmat(vecIlyMat()[ily]), xilySolid); if (0 != ilyHere()) { cpv.position(xilyLog, ilyLog, copyOne, DDTranslation(0, 0, 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << xilyName.name() << ":" << copyOne << " positioned in " << ilyName(); + edm::LogVerbatim("EBGeomX") << xilyLog.name() << ":" << copyOne << " positioned in " << ilyLog.name() << " at " + << DDTranslation(0, 0, 0) << " with no rotation"; #endif unsigned int copyNum[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; @@ -1782,8 +1859,9 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(xx, yy, vecIlyPTMZ()[ilyPTM] - ilyLength / 2), myrot(ilyPTMLog.name().name() + "_rot" + std::to_string(ptmCopy), CLHEP::HepRotationZ(phi))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") - << ilyPTMLog.name().name() << ":" << ptmCopy << " positioned in " << xilyLog.name().name(); + edm::LogVerbatim("EBGeomX") + << ilyPTMLog.name() << ":" << ptmCopy << " positioned in " << xilyLog.name() << " at " + << DDTranslation(xx, yy, vecIlyPTMZ()[ilyPTM] - ilyLength / 2) << " with rotation"; #endif } } @@ -1802,8 +1880,9 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { myrot(ilyFanOutLog.name().name() + "_rot" + std::to_string(fanOutCopy), CLHEP::HepRotationZ(phi) * CLHEP::HepRotationY(180 * deg))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") - << ilyFanOutLog.name().name() << ":" << fanOutCopy << " positioned in " << xilyLog.name().name(); + edm::LogVerbatim("EBGeomX") + << ilyFanOutLog.name() << ":" << fanOutCopy << " positioned in " << xilyLog.name() << " at " + << DDTranslation(xx, yy, vecIlyFanOutZ()[ilyFO] - ilyLength / 2) << " with rotation"; #endif } unsigned int femCopy(0); @@ -1819,8 +1898,9 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(xx, yy, vecIlyFEMZ()[ilyFEM] - ilyLength / 2), myrot(ilyFEMLog.name().name() + "_rot" + std::to_string(femCopy), CLHEP::HepRotationZ(phi))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") - << ilyFEMLog.name().name() << ":" << femCopy << " positioned in " << xilyLog.name().name(); + edm::LogVerbatim("EBGeomX") + << ilyFEMLog.name() << ":" << femCopy << " positioned in " << xilyLog.name() << " at " + << DDTranslation(xx, yy, vecIlyFEMZ()[ilyFEM] - ilyLength / 2) << " with rotation"; #endif } } @@ -1844,8 +1924,9 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { : myrot(ilyPipeLog[type].name().name() + "_rot" + std::to_string(copyNum[type]), Rota(Vec3(xx, yy, 0), 90 * deg)))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << ilyPipeLog[type].name().name() << ":" << copyNum[type] - << " positioned in " << xilyLog.name().name(); + std::string rrr = (9 > type) ? " with no rotation" : " with rotation"; + edm::LogVerbatim("EBGeomX") << ilyPipeLog[type].name() << ":" << copyNum[type] << " positioned in " + << xilyLog.name() << " at" << DDTranslation(xx, yy, zz) << rrr; #endif } } @@ -1866,11 +1947,16 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { cri.emplace_back(vecSpmRMin()[2]); cro.emplace_back(vecSpmRMin()[2] + 10 * mm); const DDSolid clyrSolid(DDSolidFactory::polycone(clyrName, -9.5 * deg, 19 * deg, czz, cri, cro)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << clyrName << " PolyCone from -9.5 to 9.5 with " << czz.size() << " points"; + for (unsigned int k = 0; k < czz.size(); ++k) + edm::LogVerbatim("EBGeom") << "[" << k << "] " << czz[k] << ":" << cri[k] << ":" << cro[k]; +#endif const DDLogicalPart clyrLog(clyrName, ddmat(vecIlyMat()[4]), clyrSolid); cpv.position(clyrLog, spmLog, copyOne, DDTranslation(0, 0, 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << clyrLog.name().name() << ":" << copyOne << " positioned in " - << spmLog.name().name(); + edm::LogVerbatim("EBGeomX") << clyrLog.name() << ":" << copyOne << " positioned in " << spmLog.name() << " at " + << DDTranslation(0, 0, 0) << " with no rotation"; #endif // Begin Alveolar Wedge parent ------------------------------------------------------ //---------------- @@ -1947,6 +2033,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { // HAW cut box to cut off back end of wedge const DDName hawCutName(ddname(hawRName().name() + "CUTBOX")); const DDSolid hawCutBox(DDSolidFactory::box(hawCutName, b_hawR / 2 + hawBoxClr, hawRCutY() / 2, hawRCutZ() / 2)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << hawCutName << " Box " << (b_hawR / 2 + hawBoxClr) << ":" << hawRCutY() / 2 << ":" + << hawRCutZ() / 2; +#endif const std::vector& hawBoxParms(hawCutBox.parameters()); const DDLogicalPart hawCutLog(hawCutName, spmMat(), hawCutBox); @@ -1970,11 +2060,22 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation( hawCutForm.getTranslation().x(), hawCutForm.getTranslation().y(), hawCutForm.getTranslation().z()), myrot(hawCutName.name() + "R", hawCutForm.getRotation()))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << hawRName() << " Subtraction " << hawRSolid1.name() << ":" << hawCutBox.name() + << " at " + << DDTranslation(hawCutForm.getTranslation().x(), + hawCutForm.getTranslation().y(), + hawCutForm.getTranslation().z()); +#endif const DDLogicalPart hawRLog(hawRName(), spmMat(), hawRSolid); // FAW cut box to cut off back end of wedge const DDName fawCutName(ddname(fawName().name() + "CUTBOX")); const DDSolid fawCutBox(DDSolidFactory::box(fawCutName, 2 * hawBoxParms[0], hawBoxParms[1], hawBoxParms[2])); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << fawCutName << " Box " << 2 * hawBoxParms[0] << ":" << hawBoxParms[1] << ":" + << hawBoxParms[2]; +#endif const std::vector& fawBoxParms(fawCutBox.parameters()); const DDLogicalPart fawCutLog(fawCutName, spmMat(), fawCutBox); @@ -1997,6 +2098,12 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation( fawCutForm.getTranslation().x(), fawCutForm.getTranslation().y(), fawCutForm.getTranslation().z()), myrot(fawCutName.name() + "R", fawCutForm.getRotation()))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << fawName() << " Subtraction " << fawSolid1.name() << ":" << fawCutBox.name() << " at " + << DDTranslation(fawCutForm.getTranslation().x(), + fawCutForm.getTranslation().y(), + fawCutForm.getTranslation().z()); +#endif const DDLogicalPart fawLog(fawName(), spmMat(), fawSolid); const Tf3D hawRform(vHAW[3], @@ -2012,8 +2119,11 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(hawRform.getTranslation().x(), hawRform.getTranslation().y(), hawRform.getTranslation().z()), myrot(hawRName().name() + "R", hawRform.getRotation())); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << hawRLog.name().name() << ":" << copyOne << " positioned in " - << fawLog.name().name(); + edm::LogVerbatim("EBGeomX") << hawRLog.name() << ":" << copyOne << " positioned in " << fawLog.name() << " at " + << DDTranslation(hawRform.getTranslation().x(), + hawRform.getTranslation().y(), + hawRform.getTranslation().z()) + << " with rotation"; #endif cpv.position( hawRLog, @@ -2024,8 +2134,11 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { CLHEP::HepRotationY(180 * deg) * // rotate about Y after refl thru Z CLHEP::HepRep3x3(1, 0, 0, 0, 1, 0, 0, 0, -1))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << hawRLog.name().name() << ":" << copyTwo << " positioned in " - << fawLog.name().name(); + edm::LogVerbatim("EBGeomX") << hawRLog.name() << ":" << copyTwo << " positioned in " << fawLog.name() << " at " + << DDTranslation(-hawRform.getTranslation().x(), + -hawRform.getTranslation().y(), + -hawRform.getTranslation().z()) + << " with rotation"; #endif /* this for display of haw cut box instead of subtraction cpv.position( hawCutLog, @@ -2049,7 +2162,11 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(fawform.getTranslation().x(), fawform.getTranslation().y(), fawform.getTranslation().z()), myrot(fawName().name() + "_Rot" + std::to_string(iPhi), fawform.getRotation())); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << fawLog.name().name() << ":" << iPhi << " positioned in " << spmLog.name().name(); + edm::LogVerbatim("EBGeomX") << fawLog.name() << ":" << iPhi << " positioned in " << spmLog.name() << " at " + << DDTranslation(fawform.getTranslation().x(), + fawform.getTranslation().y(), + fawform.getTranslation().z()) + << " with rotation"; #endif } @@ -2090,8 +2207,11 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(gridForm.getTranslation().x(), gridForm.getTranslation().y(), gridForm.getTranslation().z()), myrot(gridName().name() + "R", gridForm.getRotation())); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << gridLog.name().name() << ":" << copyOne << " positioned in " - << hawRLog.name().name(); + edm::LogVerbatim("EBGeomX") << gridLog.name() << ":" << copyOne << " positioned in " << hawRLog.name() << " at " + << DDTranslation(gridForm.getTranslation().x(), + gridForm.getTranslation().y(), + gridForm.getTranslation().z()) + << " with rotation"; #endif // End Grid + Tablet insertion @@ -2161,12 +2281,20 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { const DDName capDDName(capName().name() + sType); DDSolid capSolid(DDSolidFactory::box(capDDName, capXSize() / 2., capYSize() / 2., capThick() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << capDDName << " Box " << capXSize() / 2. << ":" << capYSize() / 2 << ":" + << capThick() / 2; +#endif const DDLogicalPart capLog(capDDName, capMat(), capSolid); const DDName sglDDName(sglName().name() + sType); DDSolid sglSolid(DDSolidFactory::box(sglDDName, capXSize() / 2., capYSize() / 2., sglThick() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << sglDDName << " Box " << capXSize() / 2. << ":" << capYSize() / 2 << ":" + << sglThick() / 2; +#endif const DDLogicalPart sglLog(sglDDName, sglMat(), sglSolid); @@ -2175,6 +2303,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { const DDName cerDDName(cerName().name() + sType); DDSolid cerSolid(DDSolidFactory::box(cerDDName, cerXSize() / 2., cerYSize() / 2., cerThick() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << cerDDName << " Box " << cerXSize() / 2. << ":" << cerYSize() / 2 << ":" + << cerThick() / 2; +#endif const DDLogicalPart cerLog(cerDDName, cerMat(), cerSolid); @@ -2183,6 +2315,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { const DDName bsiDDName(bsiName().name() + sType); DDSolid bsiSolid(DDSolidFactory::box(bsiDDName, bsiXSize() / 2., bsiYSize() / 2., bsiThick() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << bsiDDName << " Box " << bsiXSize() / 2. << ":" << bsiYSize() / 2 << ":" + << bsiThick() / 2; +#endif const DDLogicalPart bsiLog(bsiDDName, bsiMat(), bsiSolid); @@ -2191,6 +2327,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { const DDName atjDDName(atjName().name() + sType); DDSolid atjSolid(DDSolidFactory::box(atjDDName, apdSide() / 2., apdSide() / 2., atjThick() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << atjDDName << " Box " << apdSide() / 2. << ":" << apdSide() / 2 << ":" + << atjThick() / 2; +#endif const DDLogicalPart atjLog(atjDDName, atjMat(), atjSolid); @@ -2199,6 +2339,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { const DDName aglDDName(aglName().name() + sType); DDSolid aglSolid(DDSolidFactory::box(aglDDName, bsiXSize() / 2., bsiYSize() / 2., aglThick() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << aglDDName << " Box " << bsiXSize() / 2. << ":" << bsiYSize() / 2 << ":" + << aglThick() / 2; +#endif const DDLogicalPart aglLog(aglDDName, aglMat(), aglSolid); @@ -2207,6 +2351,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { const DDName andDDName(andName().name() + sType); DDSolid andSolid(DDSolidFactory::box(andDDName, apdSide() / 2., apdSide() / 2., andThick() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << andDDName << " Box " << apdSide() / 2. << ":" << apdSide() / 2 << ":" + << andThick() / 2; +#endif const DDLogicalPart andLog(andDDName, andMat(), andSolid); @@ -2215,6 +2363,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { const DDName apdDDName(apdName().name() + sType); DDSolid apdSolid(DDSolidFactory::box(apdDDName, apdSide() / 2., apdSide() / 2., apdThick() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << apdDDName << " Box " << apdSide() / 2. << ":" << apdSide() / 2. << ":" + << apdThick() / 2; +#endif const DDLogicalPart apdLog(apdDDName, apdMat(), apdSolid); @@ -2341,21 +2493,22 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(0, 0, (rClr - fClr) / 2), //SAME as cryToClr above. DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << cryLog.name().name() << ":" << copyOne << " positioned in " - << clrLog.name().name(); + edm::LogVerbatim("EBGeomX") << cryLog.name() << ":" << copyOne << " positioned in " << clrLog.name() << " at " + << DDTranslation(0, 0, (rClr - fClr) / 2) << " with no rotation"; #endif if (0 != capHere()) { cpv.position(aglLog, bsiLog, copyAGL, DDTranslation(0, 0, -aglThick() / 2. + bsiThick() / 2.), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << aglLog.name().name() << ":" << copyAGL << " positioned in " - << bsiLog.name().name(); + edm::LogVerbatim("EBGeomX") << aglLog.name() << ":" << copyAGL << " positioned in " << bsiLog.name() << " at " + << DDTranslation(0, 0, -aglThick() / 2. + bsiThick() / 2.) << " with no rotation"; #endif cpv.position( andLog, bsiLog, copyAND, DDTranslation(0, 0, -andThick() / 2. - aglThick() + bsiThick() / 2.), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << andLog.name().name() << ":" << copyAND << " positioned in " - << bsiLog.name().name(); + edm::LogVerbatim("EBGeomX") << andLog.name() << ":" << copyAND << " positioned in " << bsiLog.name() << " at " + << DDTranslation(0, 0, -andThick() / 2. - aglThick() + bsiThick() / 2.) + << " with no rotation"; #endif cpv.position(apdLog, bsiLog, @@ -2363,8 +2516,9 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(0, 0, -apdThick() / 2. - andThick() - aglThick() + bsiThick() / 2.), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << apdLog.name().name() << ":" << copyAPD << " positioned in " - << bsiLog.name().name(); + edm::LogVerbatim("EBGeomX") << apdLog.name() << ":" << copyAPD << " positioned in " << bsiLog.name() << " at " + << DDTranslation(0, 0, -apdThick() / 2. - andThick() - aglThick() + bsiThick() / 2.) + << " with no rotation"; #endif cpv.position(atjLog, bsiLog, @@ -2372,18 +2526,20 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(0, 0, -atjThick() / 2. - apdThick() - andThick() - aglThick() + bsiThick() / 2.), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << atjLog.name().name() << ":" << copyATJ << " positioned in " - << bsiLog.name().name(); + edm::LogVerbatim("EBGeomX") + << atjLog.name() << ":" << copyATJ << " positioned in " << bsiLog.name() << " at " + << DDTranslation(0, 0, -atjThick() / 2. - apdThick() - andThick() - aglThick() + bsiThick() / 2.) + << " with no rotation"; #endif cpv.position(bsiLog, cerLog, copyBSi, DDTranslation(0, 0, -bsiThick() / 2. + cerThick() / 2.), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << bsiLog.name().name() << ":" << copyBSi << " positioned in " - << cerLog.name().name(); + edm::LogVerbatim("EBGeomX") << bsiLog.name() << ":" << copyBSi << " positioned in " << cerLog.name() << " at " + << DDTranslation(0, 0, -bsiThick() / 2. + cerThick() / 2.) << " with no rotation"; #endif cpv.position(sglLog, capLog, copySGL, DDTranslation(0, 0, -sglThick() / 2. + capThick() / 2.), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << sglLog.name().name() << ":" << copySGL << " positioned in " - << capLog.name().name(); + edm::LogVerbatim("EBGeomX") << sglLog.name() << ":" << copySGL << " positioned in " << capLog.name() << " at " + << DDTranslation(0, 0, -sglThick() / 2. + capThick() / 2.) << " with no rotation"; #endif for (unsigned int ijkl(0); ijkl != 2; ++ijkl) { cpv.position(cerLog, @@ -2394,8 +2550,11 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { -sglThick() - cerThick() / 2. + capThick() / 2.), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << cerLog.name().name() << ":" << copyCER << " positioned in " - << capLog.name().name(); + edm::LogVerbatim("EBGeomX") << cerLog.name() << ":" << copyCER << " positioned in " << capLog.name() << " at " + << DDTranslation(trapCry.bl1() - (0 == ijkl ? apdX1() : apdX2()), + (trapCry.h1() - apdZ()), + (-sglThick() - cerThick() / 2. + capThick() / 2.)) + << " with no rotation"; #endif } cpv.position(capLog, @@ -2404,8 +2563,9 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(0, 0, -trapCry.dz() - capThick() / 2. + (rClr - fClr) / 2.), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << capLog.name().name() << ":" << copyCap << " positioned in " - << clrLog.name().name(); + edm::LogVerbatim("EBGeomX") << capLog.name() << ":" << copyCap << " positioned in " << clrLog.name() << " at " + << DDTranslation(0, 0, -trapCry.dz() - capThick() / 2. + (rClr - fClr) / 2.) + << " with no rotation"; #endif } @@ -2417,8 +2577,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(0, 0, (rWrap - fWrap) / 2), //SAME as cryToWrap DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << clrLog.name().name() << ":" << copyOne << " positioned in " - << wrapLog.name().name(); + edm::LogVerbatim("EBGeomX") << clrLog.name() << ":" << copyOne << " positioned in " << wrapLog.name() << " at " + << DDTranslation(0, 0, (rWrap - fWrap) / 2) << " with no rotation"; #endif // Now for placement of clr within wall @@ -2431,8 +2591,9 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(Vec3((cryType > 9 ? 0 : 0.005 * mm), 0, 0) + wrapToWall1), //SAME as wrapToWall DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << wrapLog.name().name() << ":" << copyOne << " positioned in " - << wallLog.name().name(); + edm::LogVerbatim("EBGeomX") << wrapLog.name() << ":" << copyOne << " positioned in " << wallLog.name() << " at " + << DDTranslation(Vec3((cryType > 9 ? 0 : 0.005 * mm), 0, 0) + wrapToWall1) + << " with no rotation"; #endif const Trap::VertexList vWall(trapWall.vertexList()); const Trap::VertexList vCry(trapCry.vertexList()); @@ -2493,8 +2654,11 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(tForm.getTranslation().x(), tForm.getTranslation().y(), tForm.getTranslation().z()), myrot(wallLog.name().name() + "_" + std::to_string(etaAlv), tForm.getRotation())); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << wallLog.name().name() << ":" << etaAlv << " positioned in " - << hawRLog.name().name(); + edm::LogVerbatim("EBGeomX") << wallLog.name() << ":" << etaAlv << " positioned in " << hawRLog.name() << " at " + << DDTranslation(tForm.getTranslation().x(), + tForm.getTranslation().y(), + tForm.getTranslation().z()) + << " with rotation"; #endif theta -= delta; side = sidePrime; @@ -2547,6 +2711,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDSolid backPlateSolid( DDSolidFactory::box(backPlateName(), backPlateWidth() / 2., realBPthick / 2., backPlateLength() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << backPlateName() << " Box " << backPlateWidth() / 2. << ":" << realBPthick / 2. + << ":" << backPlateLength() / 2; +#endif const std::vector& backPlateParms(backPlateSolid.parameters()); const DDLogicalPart backPlateLog(backPlateName(), backPlateMat(), backPlateSolid); @@ -2555,6 +2723,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDSolid backPlate2Solid( DDSolidFactory::box(backPlate2Name(), backPlateWidth() / 2., backPlate2Thick() / 2., backPlateLength() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << backPlate2Name() << " Box " << backPlateWidth() / 2. << ":" + << backPlate2Thick() / 2. << ":" << backPlateLength() / 2; +#endif const DDLogicalPart backPlate2Log(backPlate2Name(), backPlate2Mat(), backPlate2Solid); @@ -2562,8 +2734,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { if (0 != backPlateHere()) { cpv.position(backPlate2Log, backPlateName(), copyOne, backPlate2Tra, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backPlate2Log.name().name() << ":" << copyOne << " positioned in " - << backPlateName().name(); + edm::LogVerbatim("EBGeomX") << backPlate2Log.name() << ":" << copyOne << " positioned in " << backPlateName() + << " at " << backPlate2Tra << " with no rotation"; #endif cpv.position(backPlateLog, spmName(), @@ -2571,8 +2743,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { outtra + backPlateTra, myrot(backPlateName().name() + "Rot5", CLHEP::HepRotationZ(270 * deg))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backPlateLog.name().name() << ":" << copyOne << " positioned in " - << spmName().name(); + edm::LogVerbatim("EBGeomX") << backPlateLog.name() << ":" << copyOne << " positioned in " << spmName() << " at " + << (outtra + backPlateTra) << " with rotation"; #endif } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2610,8 +2782,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { outtra + backSideTra1, myrot(backSideName().name() + "Rot8", CLHEP::HepRotationX(180 * deg) * CLHEP::HepRotationZ(90 * deg))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backSideLog.name().name() << ":" << copyOne << " positioned in " - << spmName().name(); + edm::LogVerbatim("EBGeomX") << backSideLog.name() << ":" << copyOne << " positioned in " << spmName() << " at " + << (outtra + backSideTra1) << " with rotation"; #endif const DDTranslation backSideTra2(0 * mm, -backPlateWidth() / 2 + backSideYOff2(), 1 * mm); cpv.position(backSideLog, @@ -2620,8 +2792,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { outtra + backSideTra2, myrot(backSideName().name() + "Rot9", CLHEP::HepRotationZ(90 * deg))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backSideLog.name().name() << ":" << copyTwo << " positioned in " - << spmName().name(); + edm::LogVerbatim("EBGeomX") << backSideLog.name() << ":" << copyTwo << " positioned in " << spmName() << " at " + << (outtra + backSideTra2) << " with rotation"; #endif } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2643,16 +2815,24 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDSolid mBManifSolid(DDSolidFactory::tubs( mBManifName(), backCoolWidth / 2. - manifCut, 0, mBManifOutDiam() / 2, 0 * deg, 360 * deg)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << mBManifName() << " Tubs " << backCoolWidth / 2. - manifCut + << ":0:" << mBManifOutDiam() / 2 << ":0:360"; +#endif const DDLogicalPart mBManifLog(mBManifName(), mBManifMat(), mBManifSolid); const DDName mBManifWaName(ddname(mBManifName().name() + "Wa")); DDSolid mBManifWaSolid(DDSolidFactory::tubs( mBManifWaName, backCoolWidth / 2. - manifCut, 0, mBManifInnDiam() / 2, 0 * deg, 360 * deg)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << mBManifWaName << " Tubs " << backCoolWidth / 2. - manifCut + << ":0:" << mBManifInnDiam() / 2 << ":0:360"; +#endif const DDLogicalPart mBManifWaLog(mBManifWaName, backPipeWaterMat(), mBManifWaSolid); cpv.position(mBManifWaLog, mBManifName(), copyOne, DDTranslation(0, 0, 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << mBManifWaLog.name().name() << ":" << copyOne << " positioned in " - << mBManifName().name(); + edm::LogVerbatim("EBGeomX") << mBManifWaLog.name() << ":" << copyOne << " positioned in " << mBManifName() + << " at " << DDTranslation(0, 0, 0) << " with no rotation"; #endif //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2670,6 +2850,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDSolid grEdgeSlotSolid( DDSolidFactory::box(grEdgeSlotName(), grEdgeSlotHeight() / 2., grEdgeSlotWidth() / 2., grilleThick() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << grEdgeSlotName() << " Box " << grEdgeSlotHeight() / 2. << ":" + << grEdgeSlotWidth() / 2 << ":" << grilleThick() / 2; +#endif const DDLogicalPart grEdgeSlotLog(grEdgeSlotName(), grEdgeSlotMat(), grEdgeSlotSolid); unsigned int edgeSlotCopy(0); @@ -2681,6 +2865,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDName gName(ddname(grilleName() + std::to_string(iGr))); DDSolid grilleSolid( DDSolidFactory::box(gName, vecGrilleHeight()[iGr] / 2., backCoolWidth / 2., grilleThick() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << gName << " Box " << vecGrilleHeight()[iGr] / 2. << ":" << backCoolWidth / 2 << ":" + << grilleThick() / 2; +#endif const DDLogicalPart grilleLog(gName, grilleMat(), grilleSolid); const DDTranslation grilleTra(-realBPthick / 2 - vecGrilleHeight()[iGr] / 2, @@ -2693,6 +2881,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDName mName(ddname(grMidSlotName() + std::to_string(iGr / 2))); DDSolid grMidSlotSolid(DDSolidFactory::box( mName, vecGrMidSlotHeight()[(iGr - 1) / 2] / 2., grMidSlotWidth() / 2., grilleThick() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << mName << " Box " << vecGrMidSlotHeight()[(iGr - 1) / 2] / 2. << ":" + << grMidSlotWidth() / 2 << ":" << grilleThick() / 2; +#endif grMidSlotLog[(iGr - 1) / 2] = DDLogicalPart(mName, grMidSlotMat(), grMidSlotSolid); } cpv.position(grMidSlotLog[(iGr - 1) / 2], @@ -2702,8 +2894,13 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { vecGrilleHeight()[iGr] / 2. - vecGrMidSlotHeight()[(iGr - 1) / 2] / 2., +grMidSlotXOff(), 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << grMidSlotLog[(iGr - 1) / 2].name().name() << ":" << midSlotCopy - << " positioned in " << gName.name(); + edm::LogVerbatim("EBGeomX") << grMidSlotLog[(iGr - 1) / 2].name() << ":" << midSlotCopy << " positioned in " + << gName << " at " + << DDTranslation( + vecGrilleHeight()[iGr] / 2. - vecGrMidSlotHeight()[(iGr - 1) / 2] / 2., + +grMidSlotXOff(), + 0) + << " with no rotation"; #endif cpv.position(grMidSlotLog[(iGr - 1) / 2], @@ -2713,8 +2910,13 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { vecGrilleHeight()[iGr] / 2. - vecGrMidSlotHeight()[(iGr - 1) / 2] / 2., -grMidSlotXOff(), 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << grMidSlotLog[(iGr - 1) / 2].name().name() << ":" << midSlotCopy - << " positioned in " << gName.name(); + edm::LogVerbatim("EBGeomX") << grMidSlotLog[(iGr - 1) / 2].name() << ":" << midSlotCopy << " positioned in " + << gName << " at " + << DDTranslation( + vecGrilleHeight()[iGr] / 2. - vecGrMidSlotHeight()[(iGr - 1) / 2] / 2., + -grMidSlotXOff(), + 0) + << " with no rotation"; #endif } @@ -2727,8 +2929,12 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { vecGrilleHeight()[iGr] / 2. - grEdgeSlotHeight() / 2., backCoolWidth / 2 - grEdgeSlotWidth() / 2., 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << grEdgeSlotLog.name().name() << ":" << edgeSlotCopy << " positioned in " - << gName.name(); + edm::LogVerbatim("EBGeomX") << grEdgeSlotLog.name() << ":" << edgeSlotCopy << " positioned in " << gName + << " at " + << DDTranslation(vecGrilleHeight()[iGr] / 2. - grEdgeSlotHeight() / 2., + backCoolWidth / 2 - grEdgeSlotWidth() / 2., + 0) + << " with no rotation"; #endif cpv.position(grEdgeSlotLog, gName, @@ -2738,15 +2944,19 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << grEdgeSlotLog.name().name() << ":" << edgeSlotCopy << " positioned in " - << gName.name(); + edm::LogVerbatim("EBGeomX") << grEdgeSlotLog.name() << ":" << edgeSlotCopy << " positioned in " << gName + << " at " + << DDTranslation(vecGrilleHeight()[iGr] / 2. - grEdgeSlotHeight() / 2., + -backCoolWidth / 2 + grEdgeSlotWidth() / 2., + 0) + << " with no rotation"; #endif } if (0 != grilleHere()) { cpv.position(grilleLog, spmName(), iGr, gTra, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << grilleLog.name().name() << ":" << iGr << " positioned in " - << spmName().name(); + edm::LogVerbatim("EBGeomX") << grilleLog.name() << ":" << iGr << " positioned in " << spmName() << " at " + << gTra << " with no rotation"; #endif } if ((0 != iGr % 2) && (0 != mBManifHere())) { @@ -2758,8 +2968,11 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { grilleThick() / 2. + 3 * mBManifOutDiam() / 2.), myrot(mBManifName().name() + "R1", CLHEP::HepRotationX(90 * deg))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << mBManifLog.name().name() << ":" << iGr << " positioned in " - << spmName().name(); + edm::LogVerbatim("EBGeomX") << mBManifLog.name() << ":" << iGr << " positioned in " << spmName() << " at " + << (gTra - DDTranslation(-mBManifOutDiam() / 2. + vecGrilleHeight()[iGr] / 2., + manifCut, + grilleThick() / 2. + 3 * mBManifOutDiam() / 2.)) + << " with rotation"; #endif cpv.position(mBManifLog, spmName(), @@ -2769,8 +2982,12 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { grilleThick() / 2 + 3 * mBManifOutDiam() / 2.), myrot(mBManifName().name() + "R2", CLHEP::HepRotationX(90 * deg))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << mBManifLog.name().name() << ":" << (iGr - 1) << " positioned in " - << spmName().name(); + edm::LogVerbatim("EBGeomX") << mBManifLog.name() << ":" << (iGr - 1) << " positioned in " << spmName() + << " at " + << (gTra - DDTranslation(-3 * mBManifOutDiam() / 2. + vecGrilleHeight()[iGr] / 2., + manifCut, + grilleThick() / 2 + 3 * mBManifOutDiam() / 2.)) + << " with rotation"; #endif } } @@ -2789,26 +3006,38 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDSolid backCoolBarSolid(DDSolidFactory::box( backCoolBarName(), backCoolBarHeight() / 2., backCoolBarWidth() / 2., backCoolBarThick() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << backCoolBarName() << " Box " << backCoolBarHeight() / 2. << ":" + << backCoolBarWidth() / 2 << ":" << backCoolBarThick() / 2; +#endif const DDLogicalPart backCoolBarLog(backCoolBarName(), backCoolBarMat(), backCoolBarSolid); DDSolid backCoolBarSSSolid(DDSolidFactory::box( backCoolBarSSName(), backCoolBarHeight() / 2., backCoolBarWidth() / 2., backCoolBarSSThick() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << backCoolBarSSName() << " Box " << backCoolBarHeight() / 2. << ":" + << backCoolBarWidth() / 2. << ":" << backCoolBarSSThick() / 2.; +#endif const DDLogicalPart backCoolBarSSLog(backCoolBarSSName(), backCoolBarSSMat(), backCoolBarSSSolid); const DDTranslation backCoolBarSSTra(0, 0, 0); cpv.position(backCoolBarSSLog, backCoolBarName(), copyOne, backCoolBarSSTra, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backCoolBarSSLog.name().name() << ":" << copyOne << " positioned in " - << backCoolBarName().name(); + edm::LogVerbatim("EBGeomX") << backCoolBarSSLog.name() << ":" << copyOne << " positioned in " << backCoolBarName() + << " at " << backCoolBarSSTra << " with no rotation"; #endif DDSolid backCoolBarWaSolid(DDSolidFactory::box( backCoolBarWaName(), backCoolBarHeight() / 2., backCoolBarWidth() / 2., backCoolBarWaThick() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << backCoolBarWaName() << " Box " << backCoolBarHeight() / 2. << ":" + << backCoolBarWidth() / 2. << ":" << backCoolBarWaThick() / 2; +#endif const DDLogicalPart backCoolBarWaLog(backCoolBarWaName(), backCoolBarWaMat(), backCoolBarWaSolid); const DDTranslation backCoolBarWaTra(0, 0, 0); cpv.position(backCoolBarWaLog, backCoolBarSSName(), copyOne, backCoolBarWaTra, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backCoolBarWaLog.name().name() << ":" << copyOne << " positioned in " - << backCoolBarSSName().name(); + edm::LogVerbatim("EBGeomX") << backCoolBarWaLog.name() << ":" << copyOne << " positioned in " + << backCoolBarSSName() << " at " << backCoolBarWaTra << " with no rotation"; #endif //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2829,6 +3058,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { } DDSolid backVFESolid( DDSolidFactory::box(backVFEName(), backCoolBarHeight() / 2., backCoolBarWidth() / 2., thickVFE / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << backVFEName() << " Box " << backCoolBarHeight() / 2. << ":" + << backCoolBarWidth() / 2 << ":" << thickVFE / 2; +#endif const DDLogicalPart backVFELog(backVFEName(), backVFEMat(), backVFESolid); DDTranslation offTra(0, 0, -thickVFE / 2); for (unsigned int iLyr(0); iLyr != vecBackVFELyrThick().size(); ++iLyr) { @@ -2836,13 +3069,17 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { backCoolBarHeight() / 2., backCoolBarWidth() / 2., vecBackVFELyrThick()[iLyr] / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << ddname(vecBackVFELyrName()[iLyr]) << " Box " << backCoolBarHeight() / 2. << ":" + << backCoolBarWidth() / 2. << ":" << vecBackVFELyrThick()[iLyr] / 2; +#endif const DDLogicalPart backVFELyrLog( ddname(vecBackVFELyrName()[iLyr]), ddmat(vecBackVFELyrMat()[iLyr]), backVFELyrSolid); const DDTranslation backVFELyrTra(0, 0, vecBackVFELyrThick()[iLyr] / 2); cpv.position(backVFELyrLog, backVFEName(), copyOne, backVFELyrTra + offTra, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backVFELyrLog.name().name() << ":" << copyOne << " positioned in " - << backVFEName().name(); + edm::LogVerbatim("EBGeomX") << backVFELyrLog.name() << ":" << copyOne << " positioned in " << backVFEName() + << " at " << (backVFELyrTra + offTra) << " with no rotation"; #endif offTra += 2 * backVFELyrTra; } @@ -2862,12 +3099,16 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { const double halfZCoolVFE(thickVFE + backCoolBarThick() / 2.); DDSolid backCoolVFESolid( DDSolidFactory::box(backCoolVFEName(), backCoolBarHeight() / 2., backCoolBarWidth() / 2., halfZCoolVFE)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << backCoolVFEName() << " Box " << backCoolBarHeight() / 2. << ":" + << backCoolBarWidth() / 2. << ":" << halfZCoolVFE; +#endif const DDLogicalPart backCoolVFELog(backCoolVFEName(), backCoolVFEMat(), backCoolVFESolid); if (0 != backCoolBarHere()) { cpv.position(backCoolBarLog, backCoolVFEName(), copyOne, DDTranslation(), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backCoolBarLog.name().name() << ":" << copyOne << " positioned in " - << backCoolVFEName().name(); + edm::LogVerbatim("EBGeomX") << backCoolBarLog.name() << ":" << copyOne << " positioned in " << backCoolVFEName() + << " at " << DDTranslation() << " with no rotation"; #endif } if (0 != backCoolVFEHere()) { @@ -2877,8 +3118,9 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(0, 0, backCoolBarThick() / 2. + thickVFE / 2.), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backVFELog.name().name() << ":" << copyOne << " positioned in " - << backCoolVFEName().name(); + edm::LogVerbatim("EBGeomX") << backVFELog.name() << ":" << copyOne << " positioned in " << backCoolVFEName() + << " at " << DDTranslation(0, 0, backCoolBarThick() / 2. + thickVFE / 2.) + << " with no rotation"; #endif } cpv.position(backVFELog, @@ -2887,8 +3129,9 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(0, 0, -backCoolBarThick() / 2. - thickVFE / 2.), myrot(backVFEName().name() + "Flip", CLHEP::HepRotationX(180 * deg))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backVFELog.name().name() << ":" << copyTwo << " positioned in " - << backCoolVFEName().name(); + edm::LogVerbatim("EBGeomX") << backVFELog.name() << ":" << copyTwo << " positioned in " << backCoolVFEName() + << " at " << DDTranslation(0, 0, -backCoolBarThick() / 2. - thickVFE / 2.) + << " with rotation"; #endif //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2925,6 +3168,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDName backCName(ddname(vecBackCoolName()[iMod])); const double halfZBCool((pipeLength - 2 * mBManifOutDiam() - grilleZSpace()) / 2); DDSolid backCoolSolid(DDSolidFactory::box(backCName, backCoolHeight / 2., backCoolWidth / 2., halfZBCool)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << backCName << " Box " << backCoolHeight / 2. << ":" << backCoolWidth / 2. << ":" + << halfZBCool; +#endif const DDLogicalPart backCoolLog(backCName, spmMat(), backCoolSolid); const DDTranslation bCoolTra( @@ -2934,8 +3181,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { if (0 != backCoolHere()) { cpv.position(backCoolLog, spmName(), iMod + 1, outtra + backPlateTra + bCoolTra, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backCoolLog.name().name() << ":" << (iMod + 1) << " positioned in " - << spmName().name(); + edm::LogVerbatim("EBGeomX") << backCoolLog.name() << ":" << (iMod + 1) << " positioned in " << spmName() + << " at " << (outtra + backPlateTra + bCoolTra) << " with no rotation"; #endif } //=== @@ -2946,6 +3193,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDName bTankName(ddname(backCoolTankName() + std::to_string(iMod + 1))); DDSolid backCoolTankSolid( DDSolidFactory::box(bTankName, backCoolTankHeight / 2., backCoolTankWidth() / 2., halfZTank)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << bTankName << " Box " << backCoolTankHeight / 2. << ":" << backCoolTankWidth() / 2. + << ":" << halfZTank; +#endif const DDLogicalPart backCoolTankLog(bTankName, backCoolTankMat(), backCoolTankSolid); if (0 != backCoolTankHere()) { cpv.position(backCoolTankLog, @@ -2956,8 +3207,12 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backCoolTankLog.name().name() << ":" << copyOne << " positioned in " - << backCName.name(); + edm::LogVerbatim("EBGeomX") << backCoolTankLog.name() << ":" << copyOne << " positioned in " << backCName + << " at " + << DDTranslation(-backCoolHeight / 2 + backCoolTankHeight / 2. + bottomThick, + backCoolBarWidth() / 2. + backCoolTankWidth() / 2., + 0) + << " with no rotation"; #endif } @@ -2966,16 +3221,25 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { backCoolTankHeight / 2. - backCoolTankThick() / 2., backCoolTankWaWidth() / 2., halfZTank - backCoolTankThick() / 2.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << bTankWaName << " Box " << (backCoolTankHeight / 2. - backCoolTankThick() / 2.) + << ":" << backCoolTankWaWidth() / 2. << ":" + << (halfZTank - backCoolTankThick() / 2.); +#endif const DDLogicalPart backCoolTankWaLog(bTankWaName, backCoolTankWaMat(), backCoolTankWaSolid); cpv.position(backCoolTankWaLog, bTankName, copyOne, DDTranslation(0, 0, 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backCoolTankWaLog.name().name() << ":" << copyOne << " positioned in " - << bTankName.name(); + edm::LogVerbatim("EBGeomX") << backCoolTankWaLog.name() << ":" << copyOne << " positioned in " << bTankName + << " at " << DDTranslation(0, 0, 0) << " with no rotation"; #endif DDName bBracketName(ddname(backBracketName() + std::to_string(iMod + 1))); DDSolid backBracketSolid( DDSolidFactory::box(bBracketName, backBracketHeight() / 2., backCoolTankWidth() / 2., halfZTank)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << bBracketName << " Box " << backBracketHeight() / 2. << ":" + << backCoolTankWidth() / 2. << ":" << halfZTank; +#endif const DDLogicalPart backBracketLog(bBracketName, backBracketMat(), backBracketSolid); if (0 != backCoolTankHere()) { cpv.position(backBracketLog, @@ -2986,8 +3250,13 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backBracketLog.name().name() << ":" << copyOne << " positioned in " - << backCName.name(); + edm::LogVerbatim("EBGeomX") << backBracketLog.name() << ":" << copyOne << " positioned in " << backCName + << " at " + << DDTranslation(backCoolBarHeight() - backCoolHeight / 2. - + backBracketHeight() / 2. + bottomThick, + -backCoolBarWidth() / 2. - backCoolTankWidth() / 2., + 0) + << " with no rotation"; #endif } @@ -3009,6 +3278,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { vecBackMiscThick()[iMod * nMisc + j] / 2, backCoolBarWidth() / 2. + backCoolTankWidth(), halfZBCool)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << bName << " Box " << vecBackMiscThick()[iMod * nMisc + j] / 2 << ":" + << backCoolBarWidth() / 2. + backCoolTankWidth() << ":" << halfZBCool; +#endif const DDLogicalPart bLog(bName, ddmat(vecBackMiscMat()[iMod * nMisc + j]), bSolid); @@ -3017,8 +3290,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { if (0 != backMiscHere()) { cpv.position(bLog, backCName, copyOne, bSumTra + bTra, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << bLog.name().name() << ":" << copyOne << " positioned in " - << backCName.name(); + edm::LogVerbatim("EBGeomX") << bLog.name() << ":" << copyOne << " positioned in " << backCName << " at " + << (bSumTra + bTra) << " with no rotation"; #endif } bSumTra += 2 * bTra; @@ -3033,14 +3306,18 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { const DDName mName(ddname(vecMBLyrName()[j] + "_" + std::to_string(iMod + 1))); DDSolid mSolid(DDSolidFactory::box(mName, vecMBLyrThick()[j] / 2, bHalfWidth, halfZBCool)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << mName << " Box " << vecMBLyrThick()[j] / 2 << ":" << bHalfWidth << ":" + << halfZBCool; +#endif const DDLogicalPart mLog(mName, ddmat(vecMBLyrMat()[j]), mSolid); mTra += DDTranslation(vecMBLyrThick()[j] / 2.0, 0 * mm, 0 * mm); cpv.position(mLog, backCName, copyOne, mTra, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << mLog.name().name() << ":" << copyOne << " positioned in " - << backCName.name(); + edm::LogVerbatim("EBGeomX") << mLog.name() << ":" << copyOne << " positioned in " << backCName << " at " + << mTra << " with no rotation"; #endif mTra += DDTranslation(vecMBLyrThick()[j] / 2.0, 0 * mm, 0 * mm); } @@ -3051,15 +3328,24 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDSolid mBCoolTubeSolid( DDSolidFactory::tubs(mBName, halfZBCool, 0, mBCoolTubeOutDiam() / 2, 0 * deg, 360 * deg)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << mBName << " Tubs " << halfZBCool << ":0:" << mBCoolTubeOutDiam() / 2 + << ":0:360"; +#endif const DDLogicalPart mBLog(mBName, mBCoolTubeMat(), mBCoolTubeSolid); const DDName mBWaName(ddname(mBCoolTubeName() + "Wa_" + std::to_string(iMod + 1))); DDSolid mBCoolTubeWaSolid( DDSolidFactory::tubs(mBWaName, halfZBCool, 0, mBCoolTubeInnDiam() / 2, 0 * deg, 360 * deg)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << mBWaName << " Tubs " << halfZBCool << ":0:" << mBCoolTubeInnDiam() / 2 + << ":0:360"; +#endif const DDLogicalPart mBWaLog(mBWaName, backPipeWaterMat(), mBCoolTubeWaSolid); cpv.position(mBWaLog, mBName, copyOne, DDTranslation(0, 0, 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << mBWaLog.name().name() << ":" << copyOne << " positioned in " << mBName.name(); + edm::LogVerbatim("EBGeomX") << mBWaLog.name() << ":" << copyOne << " positioned in " << mBName << " at " + << DDTranslation(0, 0, 0) << " with no rotation"; #endif for (unsigned int j(0); j != mBCoolTubeNum(); ++j) // loop over all MB cooling circuits { @@ -3071,8 +3357,12 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { -backCoolHeight / 2.0 + mBCoolTubeOutDiam() / 2., -bHalfWidth + (j + 1) * bHalfWidth / 5, 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << mBLog.name().name() << ":" << (2 * j + 1) << " positioned in " - << backCName.name(); + edm::LogVerbatim("EBGeomX") << mBLog.name() << ":" << (2 * j + 1) << " positioned in " << backCName + << " at " + << DDTranslation(-backCoolHeight / 2.0 + mBCoolTubeOutDiam() / 2., + -bHalfWidth + (j + 1) * bHalfWidth / 5, + 0) + << " with no rotation"; #endif } } @@ -3088,6 +3378,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDSolid backPipeSolid( DDSolidFactory::tubs(bPipeName, pipeLength / 2, 0 * mm, vecBackPipeDiam()[iMod] / 2, 0 * deg, 360 * deg)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << bPipeName << " Tubs " << pipeLength / 2 << ":0:" << vecBackPipeDiam()[iMod] / 2 + << ":0:360"; +#endif DDSolid backInnerSolid(DDSolidFactory::tubs(bInnerName, pipeLength / 2, @@ -3095,6 +3389,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { vecBackPipeDiam()[iMod] / 2 - vecBackPipeThick()[iMod], 0 * deg, 360 * deg)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << bInnerName << " Tubs " << pipeLength / 2 + << ":0:" << vecBackPipeDiam()[iMod] / 2 - vecBackPipeThick()[iMod] << ":0:360"; +#endif const DDLogicalPart backPipeLog(bPipeName, backPipeMat(), backPipeSolid); @@ -3107,8 +3405,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { cpv.position(backPipeLog, spmName(), copyOne, bPipeTra1, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backPipeLog.name().name() << ":" << copyOne << " positioned in " - << spmName().name(); + edm::LogVerbatim("EBGeomX") << backPipeLog.name() << ":" << copyOne << " positioned in " << spmName() + << " at " << bPipeTra1 << " with no rotation"; #endif const DDTranslation bPipeTra2(bPipeTra1.x(), @@ -3117,13 +3415,13 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { cpv.position(backPipeLog, spmName(), copyTwo, bPipeTra2, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backPipeLog.name().name() << ":" << copyTwo << " positioned in " - << spmName().name(); + edm::LogVerbatim("EBGeomX") << backPipeLog.name() << ":" << copyTwo << " positioned in " << spmName() + << " at " << bPipeTra2 << " with no rotation"; #endif cpv.position(backInnerLog, bPipeName, copyOne, DDTranslation(), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backInnerLog.name().name() << ":" << copyOne << " positioned in " - << bPipeName.name(); + edm::LogVerbatim("EBGeomX") << backInnerLog.name() << ":" << copyOne << " positioned in " << bPipeName + << " at " << DDTranslation() << " with no rotation"; #endif } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -3139,6 +3437,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDSolid dryAirTubeSolid(DDSolidFactory::tubs( dryAirTubName, pipeLength / 2, dryAirTubeInnDiam() / 2, dryAirTubeOutDiam() / 2, 0 * deg, 360 * deg)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << dryAirTubName << " Tubs " << pipeLength / 2 << ":" << dryAirTubeInnDiam() / 2 + << ":" << dryAirTubeOutDiam() / 2 << ":0:360"; +#endif const DDLogicalPart dryAirTubeLog(dryAirTubName, dryAirTubeMat(), dryAirTubeSolid); @@ -3149,8 +3451,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { cpv.position(dryAirTubeLog, spmName(), copyOne, dryAirTubeTra1, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << dryAirTubeLog.name().name() << ":" << copyOne << " positioned in " - << spmName().name(); + edm::LogVerbatim("EBGeomX") << dryAirTubeLog.name() << ":" << copyOne << " positioned in " << spmName() + << " at " << dryAirTubeTra1 << " with no rotation"; #endif const DDTranslation dryAirTubeTra2( @@ -3160,8 +3462,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { cpv.position(dryAirTubeLog, spmName(), copyTwo, dryAirTubeTra2, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << dryAirTubeLog.name().name() << ":" << copyTwo << " positioned in " - << spmName().name(); + edm::LogVerbatim("EBGeomX") << dryAirTubeLog.name() << ":" << copyTwo << " positioned in " << spmName() + << " at " << dryAirTubeTra2 << " with no rotation"; #endif } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -3179,8 +3481,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { for (unsigned int iBar(0); iBar != nMax; ++iBar) { cpv.position(backCoolVFELog, backCName, iCVFECopy++, cTra, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backCoolVFELog.name().name() << ":" << iCVFECopy << " positioned in " - << backCName.name(); + edm::LogVerbatim("EBGeomX") << backCoolVFELog.name() << ":" << iCVFECopy << " positioned in " << backCName + << " at " << cTra << " with no rotation"; #endif cTra += DDTranslation(0, 0, backCBStdSep()); } @@ -3216,6 +3518,10 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { patchHeight / 2., backCoolBarWidth() / 2., (vecSpmZPts().back() - vecGrilleZOff().back() - grilleThick()) / 2)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << patchPanelName() << " Box " << patchHeight / 2. << ":" << backCoolBarWidth() / 2. + << ":" << (vecSpmZPts().back() - vecGrilleZOff().back() - grilleThick()) / 2; +#endif const std::vector& patchParms(patchSolid.parameters()); @@ -3225,8 +3531,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { if (0 != patchPanelHere()) { cpv.position(patchLog, spmName(), copyOne, patchTra, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << patchLog.name().name() << ":" << copyOne << " positioned in " - << spmName().name(); + edm::LogVerbatim("EBGeomX") << patchLog.name() << ":" << copyOne << " positioned in " << spmName() << " at " + << patchTra << " with no rotation"; #endif } DDTranslation pTra(-patchParms[0], 0, 0); @@ -3235,15 +3541,18 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { const DDName pName(ddname(vecPatchPanelNames()[j])); DDSolid pSolid(DDSolidFactory::box(pName, vecPatchPanelThick()[j] / 2., patchParms[1], patchParms[2])); - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pName << " Box " << vecPatchPanelThick()[j] / 2. << ":" << patchParms[1] << ":" + << patchParms[2]; +#endif const DDLogicalPart pLog(pName, ddmat(vecPatchPanelMat()[j]), pSolid); pTra += DDTranslation(vecPatchPanelThick()[j] / 2, 0 * mm, 0 * mm); cpv.position(pLog, patchPanelName(), copyOne, pTra, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << pLog.name().name() << ":" << copyOne << " positioned in " - << patchPanelName().name(); + edm::LogVerbatim("EBGeomX") << pLog.name() << ":" << copyOne << " positioned in " << patchPanelName() << " at " + << pTra << " with no rotation"; #endif pTra += DDTranslation(vecPatchPanelThick()[j] / 2, 0 * mm, 0 * mm); } @@ -3264,15 +3573,27 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDSolid rodSolid( DDSolidFactory::box(pincerRodName(), pincerEnvWidth() / 2., pincerEnvHeight() / 2., ilyLength / 2)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pincerRodName() << " Box " << pincerEnvWidth() / 2. << ":" + << pincerEnvHeight() / 2. << ":" << ilyLength / 2; +#endif const DDLogicalPart rodLog(pincerRodName(), pincerRodMat(), rodSolid); DDSolid envSolid( DDSolidFactory::box(pincerEnvName(), pincerEnvWidth() / 2., pincerEnvHeight() / 2., pincerEnvLength() / 2)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pincerEnvName() << " Box " << pincerEnvWidth() / 2. << ":" + << pincerEnvHeight() / 2. << ":" << pincerEnvLength() / 2; +#endif const DDLogicalPart envLog(pincerEnvName(), pincerEnvMat(), envSolid); const std::vector& envParms(envSolid.parameters()); DDSolid blkSolid( DDSolidFactory::box(pincerBlkName(), pincerEnvWidth() / 2., pincerEnvHeight() / 2., pincerBlkLength() / 2)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pincerBlkName() << " Box " << pincerEnvWidth() / 2. << ":" + << pincerEnvHeight() / 2. << ":" << pincerBlkLength() / 2; +#endif const DDLogicalPart blkLog(pincerBlkName(), pincerBlkMat(), blkSolid); const std::vector& blkParms(blkSolid.parameters()); cpv.position(blkLog, @@ -3281,12 +3602,17 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(0, 0, pincerEnvLength() / 2 - pincerBlkLength() / 2), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << blkLog.name().name() << ":" << copyOne << " positioned in " - << pincerEnvName().name(); + edm::LogVerbatim("EBGeomX") << blkLog.name() << ":" << copyOne << " positioned in " << pincerEnvName() << " at " + << DDTranslation(0, 0, pincerEnvLength() / 2 - pincerBlkLength() / 2) + << " with no rotation"; #endif DDSolid cutSolid( DDSolidFactory::box(pincerCutName(), pincerCutWidth() / 2., pincerCutHeight() / 2., pincerBlkLength() / 2)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pincerCutName() << " Box " << pincerCutWidth() / 2. << ":" + << pincerCutHeight() / 2 << ":" << pincerBlkLength() / 2; +#endif const DDLogicalPart cutLog(pincerCutName(), pincerCutMat(), cutSolid); const std::vector& cutParms(cutSolid.parameters()); cpv.position( @@ -3297,12 +3623,20 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { +blkParms[0] - cutParms[0] - pincerShim1Width() + pincerShim2Width(), -blkParms[1] + cutParms[1], 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << cutLog.name().name() << ":" << copyOne << " positioned in " - << pincerBlkName().name(); + edm::LogVerbatim("EBGeomX") << cutLog.name() << ":" << copyOne << " positioned in " << pincerBlkName() << " at " + << DDTranslation( + blkParms[0] - cutParms[0] - pincerShim1Width() + pincerShim2Width(), + -blkParms[1] + cutParms[1], + 0) + << " with no rotation"; #endif DDSolid shim2Solid(DDSolidFactory::box( pincerShim2Name(), pincerShim2Width() / 2., pincerShimHeight() / 2., pincerBlkLength() / 2)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pincerShim2Name() << " Box " << pincerShim2Width() / 2. << ":" + << pincerShimHeight() / 2. << ":" << pincerBlkLength() / 2; +#endif const DDLogicalPart shim2Log(pincerShim2Name(), pincerShimMat(), shim2Solid); const std::vector& shim2Parms(shim2Solid.parameters()); cpv.position(shim2Log, @@ -3311,14 +3645,20 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(+cutParms[0] - shim2Parms[0], -cutParms[1] + shim2Parms[1], 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << shim2Log.name().name() << ":" << copyOne << " positioned in " - << pincerCutName().name(); + edm::LogVerbatim("EBGeomX") << shim2Log.name() << ":" << copyOne << " positioned in " << pincerCutName() + << " at " + << DDTranslation(+cutParms[0] - shim2Parms[0], -cutParms[1] + shim2Parms[1], 0) + << " with no rotation"; #endif DDSolid shim1Solid(DDSolidFactory::box(pincerShim1Name(), pincerShim1Width() / 2., pincerShimHeight() / 2., (pincerEnvLength() - pincerBlkLength()) / 2)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pincerShim1Name() << " Box " << pincerShim1Width() / 2. << ":" + << pincerShimHeight() / 2. << ":" << (pincerEnvLength() - pincerBlkLength()) / 2; +#endif const DDLogicalPart shim1Log(pincerShim1Name(), pincerShimMat(), shim1Solid); const std::vector& shim1Parms(shim1Solid.parameters()); @@ -3329,8 +3669,12 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(+envParms[0] - shim1Parms[0], -envParms[1] + shim1Parms[1], -envParms[2] + shim1Parms[2]), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << shim1Log.name().name() << ":" << copyOne << " positioned in " - << pincerEnvName().name(); + edm::LogVerbatim("EBGeomX") << shim1Log.name() << ":" << copyOne << " positioned in " << pincerEnvName() + << " at " + << DDTranslation(+envParms[0] - shim1Parms[0], + -envParms[1] + shim1Parms[1], + -envParms[2] + shim1Parms[2]) + << " with no rotation"; #endif for (unsigned int iEnv(0); iEnv != vecPincerEnvZOff().size(); ++iEnv) { cpv.position(envLog, @@ -3339,8 +3683,11 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(0, 0, -ilyLength / 2. + vecPincerEnvZOff()[iEnv] - pincerEnvLength() / 2.), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << envLog.name().name() << ":" << (1 + iEnv) << " positioned in " - << pincerRodName().name(); + edm::LogVerbatim("EBGeomX") << envLog.name() << ":" << (1 + iEnv) << " positioned in " << pincerRodName() + << " at " + << DDTranslation( + 0, 0, -ilyLength / 2. + vecPincerEnvZOff()[iEnv] - pincerEnvLength() / 2.) + << " with no rotation"; #endif } @@ -3361,8 +3708,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { myrot(pincerRodName().name() + std::to_string(iRod), CLHEP::HepRotationZ(90 * deg + vecPincerRodAzimuth()[iRod]))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << rodLog.name().name() << ":" << (1 + iRod) << " positioned in " - << xilyName.name(); + edm::LogVerbatim("EBGeomX") << rodLog.name() << ":" << (1 + iRod) << " positioned in " << xilyName << " at " + << rodTra << " with rotation"; #endif } } @@ -3398,6 +3745,11 @@ DDName DDEcalBarrelNewAlgo::ddname(const std::string& s) const { } DDSolid DDEcalBarrelNewAlgo::mytrap(const std::string& s, const EcalTrapezoidParameters& t) const { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << DDName(s) << " Trap " << t.theta() / CLHEP::deg << ":" << t.phi() / CLHEP::deg << ":" + << t.h1() << ":" << t.bl1() << ":" << t.tl1() << ":" << t.alp1() / CLHEP::deg << ":" + << t.h2() << ":" << t.bl2() << ":" << t.tl2() << ":" << t.alp2() / CLHEP::deg; +#endif return DDSolidFactory::trap( ddname(s), t.dz(), t.theta(), t.phi(), t.h1(), t.bl1(), t.tl1(), t.alp1(), t.h2(), t.bl2(), t.tl2(), t.alp2()); } @@ -3455,7 +3807,8 @@ void DDEcalBarrelNewAlgo::web(unsigned int iWeb, DDTranslation(0, 0, 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << webPlLog.name().name() << ":" << copyOne << " positioned in " << webClrDDName.name(); + edm::LogVerbatim("EBGeomX") << webPlLog.name() << ":" << copyOne << " positioned in " << webClrDDName << " at " + << DDTranslation(0, 0, 0) << " with no rotation"; #endif const Trap::VertexList vWeb(trapWebClr.vertexList()); @@ -3484,8 +3837,11 @@ void DDEcalBarrelNewAlgo::web(unsigned int iWeb, DDTranslation(tForm.getTranslation().x(), tForm.getTranslation().y(), tForm.getTranslation().z()), myrot(webClrLog.name().name() + std::to_string(iWeb), tForm.getRotation())); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << webClrLog.name().name() << ":" << copyOne << " positioned in " - << logPar.name().name(); + edm::LogVerbatim("EBGeomX") << webClrLog.name() << ":" << copyOne << " positioned in " << logPar.name() << " at " + << DDTranslation(tForm.getTranslation().x(), + tForm.getTranslation().y(), + tForm.getTranslation().z()) + << " with rotation"; #endif } } diff --git a/Geometry/EcalCommonData/plugins/DDEcalEndcapAlgo.cc b/Geometry/EcalCommonData/plugins/DDEcalEndcapAlgo.cc index 43b0c6d248ebf..7d3e50e562680 100644 --- a/Geometry/EcalCommonData/plugins/DDEcalEndcapAlgo.cc +++ b/Geometry/EcalCommonData/plugins/DDEcalEndcapAlgo.cc @@ -30,6 +30,8 @@ #include "Geometry/CaloGeometry/interface/EcalTrapezoidParameters.h" #include "CLHEP/Geometry/Transform3D.h" +//#define EDM_ML_DEBUG + class DDEcalEndcapAlgo : public DDAlgorithm { public: typedef EcalTrapezoidParameters Trap; @@ -250,7 +252,7 @@ DDEcalEndcapAlgo::DDEcalEndcapAlgo() m_iXYOff(0), m_cryZOff(0), m_zFront(0) { - LogDebug("EcalGeom") << "DDEcalEndcapAlgo info: Creating an instance"; + edm::LogVerbatim("EcalGeomX") << "DDEcalEndcapAlgo info: Creating an instance"; } DDEcalEndcapAlgo::~DDEcalEndcapAlgo() {} @@ -260,7 +262,9 @@ void DDEcalEndcapAlgo::initialize(const DDNumericArguments& nArgs, const DDMapArguments& /*mArgs*/, const DDStringArguments& sArgs, const DDStringVectorArguments& /*vsArgs*/) { - // edm::LogInfo("EcalGeom") << "DDEcalEndcapAlgo info: Initialize" ; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeomX") << "DDEcalEndcapAlgo info: Initialize"; +#endif m_idNameSpace = DDCurrentNamespace::ns(); // TRICK! m_idNameSpace = parent().name().ns(); @@ -351,7 +355,7 @@ void DDEcalEndcapAlgo::execute(DDCompactView& cpv) { m_cutParms = &eeCutBox.parameters(); //************************************************************** - const double zFix(m_zFront - 3172 * mm); // fix for changing z offset + const double zFix(m_zFront - 3172.0 * mm); // fix for changing z offset //** fill supercrystal front and rear center positions from xml input for (unsigned int iC(0); iC != (unsigned int)eenSCquad(); ++iC) { @@ -407,21 +411,29 @@ void DDEcalEndcapAlgo::execute(DDCompactView& cpv) { scrys.translate(DDTranslation(0., 0., -eezOff())); DDName rname(envName(isctype).name() + std::to_string(icol) + "R" + std::to_string(irow)); - /* - edm::LogInfo("EcalGeom") << "Quadrant, SC col/row " - << eeQuaName() << " " << icol << " / " << irow << std::endl - << " Limits " << int(colLimits[2*icol-2]) << "->" << int(colLimits[2*icol-1]) << std::endl - << " SC type = " << isctype << std::endl - << " Zoff, Scz = " << eezOff() << " " << sc1.z() << std::endl - << " Rotation " << rname << " " << scrys.rotation() << std::endl - << " Position " << sccentre << std::endl; -*/ + +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeoXm") << "Quadrant, SC col/row " << eeQuaName() << " " << icol << " / " << irow + << std::endl + << " Limits " << int(colLimits[2 * icol - 2]) << "->" + << int(colLimits[2 * icol - 1]) << std::endl + << " SC type = " << isctype << std::endl + << " Zoff = " << eezOff() << std::endl + << " Rotation " << rname << " " << scrys.rotation() << std::endl + << " Position " << scrys.centrePos(); +#endif // Position SC in endcap cpv.position(envName(isctype), eeQuaName(), 100 * isctype + 10 * (icol - 1) + (irow - 1), scrys.centrePos(), myrot(rname.fullname(), scrys.rotation())); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EEGeom") << envName(isctype) << " " << (100 * isctype + 10 * (icol - 1) + (irow - 1)) + << " in " << eeQuaName(); + edm::LogVerbatim("EcalGeom") << envName(isctype) << " " << (100 * isctype + 10 * (icol - 1) + (irow - 1)) + << " in " << eeQuaName() << " at " << scrys.centrePos(); +#endif } } } @@ -431,13 +443,13 @@ void DDEcalEndcapAlgo::EECreateSC(const unsigned int iSCType, DDCompactView& cpv) { // EECreateSCType Create SC logical volume of the given type DDRotation noRot; - DDLogicalPart eeSCELog; DDLogicalPart eeSCALog; DDLogicalPart eeSCILog; - // edm::LogInfo("EcalGeom") << "EECreateSC: Creating SC envelope" << std::endl; - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeomX") << "EECreateSC: Creating SC envelope"; +#endif const string anum(std::to_string(iSCType)); const double eFront(0.5 * eeSCEFront()); @@ -457,6 +469,11 @@ void DDEcalEndcapAlgo::EECreateSC(const unsigned int iSCType, eRear, eRear, zerod)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << eeSCEnv.name() << " Trap with parameters: " << 0.5 * eeSCELength() << ":" << eAng + << ffived << ":" << eFront << ":" << eFront << ":" << eFront << ":" << zerod << ":" + << eRear << ":" << eRear << ":" << eRear << ":" << zerod; +#endif const double aFront(0.5 * eeSCAFront()); const double aRear(0.5 * eeSCARear()); @@ -473,7 +490,11 @@ void DDEcalEndcapAlgo::EECreateSC(const unsigned int iSCType, aRear, aRear, zerod)); - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << eeSCAlv.name() << " Trap with parameters: " << 0.5 * eeSCALength() << ":" << aAng + << ":" << ffived << ":" << aFront << ":" << aFront << ":" << aFront << ":" << zerod + << ":" << aRear << ":" << aRear << ":" << aRear << ":" << zerod; +#endif const double dwall(eeSCAWall()); const double iFront(aFront - dwall); const double iRear(iFront); //aRear - dwall ) ; @@ -490,7 +511,12 @@ void DDEcalEndcapAlgo::EECreateSC(const unsigned int iSCType, iRear, iRear, zerod)); - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << eeSCInt.name() << " Trap with parameters: " << iLen / 2. << ":" + << (atan((eeSCARear() - eeSCAFront()) / (sqrt(2.) * eeSCALength()))) << ":" << ffived + << ":" << iFront << ":" << iFront << ":" << iFront << ":" << zerod << ":" << iRear << ":" + << iRear << ":" << iRear << ":" << zerod; +#endif const double dz(-0.5 * (eeSCELength() - eeSCALength())); const double dxy(0.5 * dz * (eeSCERear() - eeSCEFront()) / eeSCELength()); const double zIOff(-(eeSCALength() - iLen) / 2.); @@ -532,18 +558,29 @@ void DDEcalEndcapAlgo::EECreateSC(const unsigned int iSCType, DDSolid eeCutEnv( DDSolidFactory::subtraction(envName(iSCType), addTmp(envName(iSCType)), cutBoxName(), cutTra, cutRot)); - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << eeCutEnv.name() << " Subtracted by " << (eeSCERear() / sqrt(2.)) << ":" + << (eeSCERear() / sqrt(2.)) << ":" << (eeSCELength() / sqrt(2.)); +#endif const DDTranslation extra(dxy, dxy, dz); DDSolid eeCutAlv( DDSolidFactory::subtraction(alvName(iSCType), addTmp(alvName(iSCType)), cutBoxName(), cutTra - extra, cutRot)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << eeCutAlv.name() << " Subtracted by " << (eeSCERear() / sqrt(2.)) << ":" + << (eeSCERear() / sqrt(2.)) << ":" << (eeSCELength() / sqrt(2.)); +#endif const double mySign(iSCType < 4 ? +1. : -1.); const DDTranslation extraI(xyIOff + mySign * 2 * mm, xyIOff + mySign * 2 * mm, zIOff); DDSolid eeCutInt( DDSolidFactory::subtraction(intName(iSCType), addTmp(intName(iSCType)), cutBoxName(), cutTra - extraI, cutRot)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << eeCutInt.name() << " Subtracted by " << (eeSCERear() / sqrt(2.)) << ":" + << (eeSCERear() / sqrt(2.)) << ":" << (eeSCELength() / sqrt(2.)); +#endif eeSCELog = DDLogicalPart(envName(iSCType), eeMat(), eeCutEnv); eeSCALog = DDLogicalPart(alvName(iSCType), eeWallMat(), eeCutAlv); @@ -552,7 +589,14 @@ void DDEcalEndcapAlgo::EECreateSC(const unsigned int iSCType, cpv.position(eeSCALog, envName(iSCType), iSCType * 100 + 1, DDTranslation(dxy, dxy, dz), noRot); cpv.position(eeSCILog, alvName(iSCType), iSCType * 100 + 1, DDTranslation(xyIOff, xyIOff, zIOff), noRot); - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EEGeom") << eeSCALog.name() << " " << (iSCType * 100 + 1) << " in " << envName(iSCType); + edm::LogVerbatim("EEGeom") << eeSCILog.name() << " " << (iSCType * 100 + 1) << " in " << alvName(iSCType); + edm::LogVerbatim("EcalGeom") << eeSCALog.name() << " " << (iSCType * 100 + 1) << " in " << envName(iSCType) << " at (" + << dxy << ", " << dxy << ", " << dz << ")"; + edm::LogVerbatim("EcalGeom") << eeSCILog.name() << " " << (iSCType * 100 + 1) << " in " << alvName(iSCType) << " at (" + << xyIOff << ", " << xyIOff << ", " << zIOff << ")"; +#endif DDTranslation croffset(0., 0., 0.); EEPositionCRs(alvName(iSCType), croffset, iSCType, cpv); } @@ -562,8 +606,9 @@ unsigned int DDEcalEndcapAlgo::EEGetSCType(const unsigned int iCol, const unsign for (unsigned int ii = 0; ii < (unsigned int)(eenSCCutaway()); ++ii) { if ((eevecEESCCutaway()[3 * ii] == iCol) && (eevecEESCCutaway()[3 * ii + 1] == iRow)) { iType = int(eevecEESCCutaway()[3 * ii + 2]); - // edm::LogInfo("EcalGeom") << "EEGetSCType: col, row, type = " - // << iCol << " " << iRow << " " << iType << std::endl; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeomX") << "EEGetSCType: col, row, type = " << iCol << " " << iRow << " " << iType; +#endif } } return iType; @@ -572,8 +617,9 @@ unsigned int DDEcalEndcapAlgo::EEGetSCType(const unsigned int iCol, const unsign void DDEcalEndcapAlgo::EECreateCR() { // EECreateCR Create endcap crystal logical volume - // edm::LogInfo("EcalGeom") << "EECreateCR: = " << std::endl; - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeomX") << "EECreateCR: = "; +#endif DDSolid EECRSolid(DDSolidFactory::trap(cryName(), 0.5 * eeCrysLength(), atan((eeCrysRear() - eeCrysFront()) / (sqrt(2.) * eeCrysLength())), @@ -586,6 +632,13 @@ void DDEcalEndcapAlgo::EECreateCR() { 0.5 * eeCrysRear(), 0.5 * eeCrysRear(), 0. * deg)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << EECRSolid.name() << " Trap with parameters: " << 0.5 * eeCrysLength() << ":" + << (atan((eeCrysRear() - eeCrysFront()) / (sqrt(2.) * eeCrysLength()))) << ":" + << 45. * deg << ":" << 0.5 * eeCrysFront() << ":" << 0.5 * eeCrysFront() << ":" + << 0.5 * eeCrysFront() << ":" << 0. * deg << ":" << 0.5 * eeCrysRear() << ":" + << 0.5 * eeCrysRear() << ":" << 0.5 * eeCrysRear() << ":" << 0. * deg; +#endif DDLogicalPart part(cryName(), eeCrysMat(), EECRSolid); } @@ -596,8 +649,9 @@ void DDEcalEndcapAlgo::EEPositionCRs(const DDName& pName, DDCompactView& cpv) { // EEPositionCRs Position crystals within parent supercrystal interior volume - // edm::LogInfo("EcalGeom") << "EEPositionCRs called " << std::endl; - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeomX") << "EEPositionCRs called "; +#endif static const unsigned int ncol(5); if (iSCType > 0 && iSCType <= eenSCTypes()) { @@ -614,9 +668,9 @@ void DDEcalEndcapAlgo::EEPositionCRs(const DDName& pName, if (imax > 0) { // Loop over crystals in this row for (int irow(imin); irow <= imax; ++irow) { - // edm::LogInfo("EcalGeom") << " type, col, row " << iSCType - // << " " << icol << " " << irow << std::endl; - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeomX") << " type, col, row " << iSCType << " " << icol << " " << irow; +#endif // Create crystal as a DDEcalEndcapTrap object and calculate rotation and // translation required to position it in the SC. DDEcalEndcapTrap crystal(1, eeCrysFront(), eeCrysRear(), eeCrysLength()); @@ -630,6 +684,12 @@ void DDEcalEndcapAlgo::EEPositionCRs(const DDName& pName, 100 * iSCType + 10 * (icol - 1) + (irow - 1), crystal.centrePos() - DDTranslation(0, 0, m_cryZOff), myrot(rname.fullname(), crystal.rotation())); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EEGeom") << cryName() << " " << (100 * iSCType + 10 * (icol - 1) + (irow - 1)) << " in " + << pName; + edm::LogVerbatim("EcalGeom") << cryName() << " " << (100 * iSCType + 10 * (icol - 1) + (irow - 1)) << " in " + << pName << " at " << (crystal.centrePos() - DDTranslation(0, 0, m_cryZOff)); +#endif } } } diff --git a/Geometry/EcalCommonData/plugins/DDEcalPreshowerAlgo.cc b/Geometry/EcalCommonData/plugins/DDEcalPreshowerAlgo.cc index 153b1aa3b461d..458647c4017bc 100644 --- a/Geometry/EcalCommonData/plugins/DDEcalPreshowerAlgo.cc +++ b/Geometry/EcalCommonData/plugins/DDEcalPreshowerAlgo.cc @@ -12,6 +12,8 @@ #include "DetectorDescription/Core/interface/DDAlgorithm.h" #include "DetectorDescription/Core/interface/DDMaterial.h" +//#define EDM_ML_DEBUG + class DDEcalPreshowerAlgo : public DDAlgorithm { public: DDMaterial getMaterial(unsigned int i) const { return DDMaterial(materials_[i]); } @@ -67,7 +69,9 @@ class DDEcalPreshowerAlgo : public DDAlgorithm { }; DDEcalPreshowerAlgo::DDEcalPreshowerAlgo() : DDAlgorithm() { - LogDebug("EcalGeom") << "DDEcalPreshowerAlgo info: Creating an instance"; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << "DDEcalPreshowerAlgo info: Creating an instance"; +#endif } void DDEcalPreshowerAlgo::initialize(const DDNumericArguments& nArgs, @@ -75,7 +79,7 @@ void DDEcalPreshowerAlgo::initialize(const DDNumericArguments& nArgs, const DDMapArguments& mArgs, const DDStringArguments& sArgs, const DDStringVectorArguments& vsArgs) { - LogDebug("EcalGeom") << "DDEcalPreshowerAlgo info: Initialize"; + edm::LogVerbatim("EcalGeom") << "DDEcalPreshowerAlgo info: Initialize"; asym_ladd_ = vArgs["ASYMETRIC_LADDER"]; types_l5_ = vsArgs["TYPES_OF_LADD_L5"]; @@ -133,8 +137,9 @@ void DDEcalPreshowerAlgo::initialize(const DDNumericArguments& nArgs, } void DDEcalPreshowerAlgo::execute(DDCompactView& cpv) { - LogDebug("EcalGeom") << "******** DDEcalPreshowerAlgo execute!"; - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << "******** DDEcalPreshowerAlgo execute!"; +#endif // creates all the tube-like layers of the preshower doLayers(cpv); // creates and places the ladders @@ -145,7 +150,6 @@ void DDEcalPreshowerAlgo::execute(DDCompactView& cpv) { void DDEcalPreshowerAlgo::doLayers(DDCompactView& cpv) { double zpos = -thickness_ / 2., sdx(0), sdy(0), bdx(0), bdy(0); - ; for (size_t i = 0; i < thickLayers_.size(); ++i) { int I = int(i) + 1; // FOTRAN I (offset +1) @@ -162,7 +166,9 @@ void DDEcalPreshowerAlgo::doLayers(DDCompactView& cpv) { // create a logical part representing a single layer in the preshower DDSolid solid = DDSolidFactory::tubs(ddname, zHalf, rIn, rOut, 0., 360. * deg); - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << ddname << " Tubs " << zHalf << ":" << rIn << ":" << rOut << ":0:360"; +#endif DDLogicalPart layer = DDLogicalPart(ddname, getMaterial(i), solid); // position the logical part w.r.t. the parent volume @@ -195,7 +201,6 @@ void DDEcalPreshowerAlgo::doLayers(DDCompactView& cpv) { DDName dd_tmp_name_b(getLayName(i) + "Lcut", "esalgo"); DDName dd_tmp_name_c(getLayName(i) + "tmpb", "esalgo"); DDName dd_tmp_name_d(getLayName(i) + "LinPb", "esalgo"); - DDName dd_tmp_name_e(getLayName(i) + "LinAl", "esalgo"); DDName dd_tmp_name_f(getLayName(i) + "LOutAl", "esalgo"); @@ -218,6 +223,10 @@ void DDEcalPreshowerAlgo::doLayers(DDCompactView& cpv) { DDSolid Out_Al = DDSolidFactory::tubs(dd_Alname_f, zHalf - 0.1 * mm, rMax_Abs_Al_ - 20 * cm, rMax_Abs_Al_, 0., 90. * deg); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_Alname_f << " Tubs " << (zHalf - 0.1 * mm) << ":" << (rMax_Abs_Al_ - 20 * cm) + << ":" << rMax_Abs_Al_ << ":0:90"; +#endif outalbx = absAlX_X_ * 0.1; outalby = rMax_Abs_Al_ + 0.1 * mm - absAlX_subtr1_Yshift_; @@ -230,6 +239,12 @@ void DDEcalPreshowerAlgo::doLayers(DDCompactView& cpv) { DDSolid OutAltmp = DDSolidFactory::box(dd_Alname_h, outalbx / 2 + 0.1 * mm, outalby / 2 + 0.1 * mm, zHalf); DDSolid Out_Altmp3 = DDSolidFactory::subtraction( dd_Alname_j, Out_Al, OutAltmp, DDTranslation(outalbx / 2, outalby / 2 + shiftR, 0), DDRotation()); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_Alname_h << " Box " << (outalbx / 2 + 0.1 * mm) << ":" + << (outalby / 2 + 0.1 * mm) << ":" << zHalf; + edm::LogVerbatim("SFGeomX") << dd_Alname_j << " Subtraction " << Out_Al.name() << ":" << OutAltmp.name() << " at " + << DDTranslation(outalbx / 2, outalby / 2 + shiftR, 0) << " no rotation"; +#endif outalby2 = absAlX_Y_ * 0.1; outalbx2 = rMax_Abs_Al_ + 0.1 * mm - absAlX_subtr1_Xshift_; shiftR2 = absAlX_subtr1_Xshift_; @@ -247,6 +262,19 @@ void DDEcalPreshowerAlgo::doLayers(DDCompactView& cpv) { dd_Alname_m, Out_Altmp5, Out_Altmp4, DDTranslation(0, 0, 0), DDRotation("esalgo:RABS180B")); DDSolid Out_Al2 = DDSolidFactory::unionSolid( dd_Alname_g, Out_Altmp6, Out_Altmp4, DDTranslation(0, 0, 0), DDRotation("esalgo:R180")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_Alname_i << " Box " << (outalbx2 / 2 + 0.1 * mm) << ":" + << (outalby2 / 2 + 0.1 * mm) << ":" << zHalf; + edm::LogVerbatim("SFGeomX") << dd_Alname_k << " Subtraction " << Out_Altmp3.name() << ":" << OutAltmp2.name() + << " at " << DDTranslation(outalbx2 / 2 + shiftR2, outalby2 / 2, 0) << " no rotation"; + edm::LogVerbatim("SFGeomX") << dd_Alname_l << " Union " << Out_Altmp4.name() << ":" << Out_Altmp4.name() << " at " + << DDTranslation(0, 0, 0) << " rotation esalgo:RABS90"; + edm::LogVerbatim("SFGeomX") << dd_Alname_m << " Union " << Out_Altmp5.name() << ":" << Out_Altmp4.name() << " at " + << DDTranslation(0, 0, 0) << " rotation esalgo:RABS180B"; + edm::LogVerbatim("SFGeomX") << dd_Alname_g << " Union " << Out_Altmp6.name() << ":" << Out_Altmp4.name() << " at " + << DDTranslation(0, 0, 0) << " rotation esalgo:R180"; + edm::LogVerbatim("SFGeomX") << Outer_Al; +#endif for (int L = 0; L < absz; ++L) { int K = L; @@ -298,6 +326,11 @@ void DDEcalPreshowerAlgo::doLayers(DDCompactView& cpv) { DDSolid solid_b = DDSolidFactory::box(dd_tmp_name_b, bdx, bdy, zHalf); DDSolid solid_b2 = DDSolidFactory::box(dd_tmp_name_b2, bdx + 0.1 * mm, bdy + 0.1 * mm, zHalf); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Box " << bdx << ":" << bdy << ":" << zHalf; + edm::LogVerbatim("SFGeomX") << dd_tmp_name_b2 << " Box " << (bdx + 0.1 * mm) << ":" << (bdy + 0.1 * mm) << ":" + << zHalf; +#endif sdx = abs1stx[K] - bdx; sdy = 0; @@ -315,15 +348,32 @@ void DDEcalPreshowerAlgo::doLayers(DDCompactView& cpv) { cpv.position(layer, layerFinOutAl, 1, DDTranslation(sdx, sdy, 0), DDRotation()); cpv.position(layer, layerFinOutAl, 2, DDTranslation(-sdx, sdy, 0), DDRotation()); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << layer.name() << " copy 1 in " << layerFinOutAl.name() << " at " + << DDTranslation(sdx, sdy, 0) << " no rotation"; + edm::LogVerbatim("SFGeom") << layer.name() << " copy 2 in " << layerFinOutAl.name() << " at " + << DDTranslation(-sdx, sdy, 0) << " no rotation"; +#endif DDSolid solid_c = DDSolid(dd_FAl_name_c); DDSolid solid_d1 = DDSolidFactory::unionSolid(dd_FAl_name_d1, solid_c, solid_b2, DDTranslation(sdx, sdy, 0), DDRotation()); DDSolid solid_d2 = DDSolidFactory::unionSolid(dd_FAl_name_d, solid_d1, solid_b2, DDTranslation(-sdx, -sdy, 0), DDRotation()); - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_FAl_name_d1 << " Union " << solid_c.name() << ":" << solid_b2.name() << " at " + << DDTranslation(sdx, sdy, 0) << " no rotation"; + edm::LogVerbatim("SFGeomX") << dd_FAl_name_d << " Union " << solid_d1.name() << ":" << solid_b2.name() << " at " + << DDTranslation(-sdx, -sdy, 0) << " no rotation"; +#endif if (((abs1stx[K] < rIn + 30 * cm) && I == 10) || ((abs2ndx[K] < rIn + 30 * cm) && I == 20)) { cpv.position(layer, layerFinOutAl, 3, DDTranslation(sdx, -sdy, 0), DDRotation()); cpv.position(layer, layerFinOutAl, 4, DDTranslation(-sdx, -sdy, 0), DDRotation()); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << layer.name() << " copy 3 in " << layerFinOutAl.name() << " at " + << DDTranslation(sdx, -sdy, 0) << " no rotation"; + edm::LogVerbatim("SFGeom") << layer.name() << " copy 4 in " << layerFinOutAl.name() << " at " + << DDTranslation(-sdx, -sdy, 0) << " no rotation"; +#endif DDSolid solid_c = DDSolid(dd_FAl_name_c); DDSolid solid_d1 = DDSolidFactory::unionSolid(dd_FAl_name_d1, solid_c, solid_b2, DDTranslation(sdx, sdy, 0), DDRotation()); @@ -333,6 +383,16 @@ void DDEcalPreshowerAlgo::doLayers(DDCompactView& cpv) { DDSolidFactory::unionSolid(dd_FAl_name_d3, solid_d2, solid_b2, DDTranslation(-sdx, sdy, 0), DDRotation()); DDSolid solid_d4 = DDSolidFactory::unionSolid(dd_FAl_name_d, solid_d3, solid_b2, DDTranslation(-sdx, -sdy, 0), DDRotation()); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_FAl_name_d1 << " Union " << solid_c.name() << ":" << solid_b2.name() + << " at " << DDTranslation(sdx, sdy, 0) << " no rotation"; + edm::LogVerbatim("SFGeomX") << dd_FAl_name_d2 << " Union " << solid_d1.name() << ":" << solid_b2.name() + << " at " << DDTranslation(sdx, -sdy, 0) << " no rotation"; + edm::LogVerbatim("SFGeomX") << dd_FAl_name_d3 << " Union " << solid_d2.name() << ":" << solid_b2.name() + << " at " << DDTranslation(-sdx, sdy, 0) << " no rotation"; + edm::LogVerbatim("SFGeomX") << dd_FAl_name_d << " Union " << solid_d3.name() << ":" << solid_b2.name() + << " at " << DDTranslation(-sdx, -sdy, 0) << " no rotation"; +#endif } } @@ -346,21 +406,42 @@ void DDEcalPreshowerAlgo::doLayers(DDCompactView& cpv) { DDSolid iner = DDSolidFactory::tubs(dd_tmp_name_c, zHalf + 0.1 * mm, 0, In_rad_Abs_Pb, 0., 360. * deg); DDSolid final = DDSolidFactory::subtraction(dd_tmp_name_d, solidcut, iner, DDTranslation(0, 0, 0), DDRotation()); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Box " << bdx << ":" << bdy << ":" << zHalf; + edm::LogVerbatim("SFGeomX") << dd_tmp_name_c << " Tubs " << (zHalf + 0.1 * mm) << ":0:" << In_rad_Abs_Pb + << ":0:360"; + edm::LogVerbatim("SFGeomX") << dd_tmp_name_d << " Subtraction " << solidcut.name() << ":" << iner.name() + << " at (0,0,0) no rotation"; +#endif DDLogicalPart layer = DDLogicalPart(dd_tmp_name_d, getMaterial(i), final); cpv.position(layer, parent(), 1, DDTranslation(0, 0, zpos), DDRotation()); - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << layer.name() << " copy 1 in " << parent().name() << " at " + << DDTranslation(0, 0, zpos) << " no rotation"; +#endif DDSolid iner_Al = DDSolidFactory::tubs(dd_tmp_name_e, zHalf, In_rad_Abs_Al, In_rad_Abs_Pb - 0.01 * mm, 0., 360. * deg); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_e << " Tubs " << zHalf << ":" << In_rad_Abs_Al << ":" + << (In_rad_Abs_Pb - 0.01 * mm) << ":0:360"; +#endif DDLogicalPart layerAl = DDLogicalPart(dd_tmp_name_e, getMaterial(i - 1), iner_Al); cpv.position(layerAl, parent(), 1, DDTranslation(0, 0, zpos), DDRotation()); cpv.position(layerFinOutAl, parent(), 1, DDTranslation(0, 0, zpos), DDRotation()); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << layerAl.name() << " copy 1 in " << parent().name() << " at " + << DDTranslation(0, 0, zpos) << " no rotation"; + edm::LogVerbatim("SFGeom") << layerFinOutAl.name() << " copy 1 in " << parent().name() << " at " + << DDTranslation(0, 0, zpos) << " no rotation"; +#endif } else { cpv.position(layer, parent(), 1, DDTranslation(0., 0., zpos), DDRotation()); - - LogDebug("SFGeom") << " debug : tubs, Logical part: " << DDLogicalPart(ddname, getMaterial(i), solid) - << "\n translation " << DDTranslation(0., 0., zpos) << " rotation " << DDRotation() << "\n"; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << layer.name() << " copy 1 in " << parent().name() << " at " + << DDTranslation(0, 0, zpos) << " no rotation"; +#endif } zpos += zHalf; } @@ -384,9 +465,9 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { 0, // pPhi ladder_width / 2, // pDy1 (ladder_thick) / 2, // pDx1 - (ladder_thick) / 2, // pDx2 - 0, //pAlp1 - ladder_width / 2, //pDy2 + (ladder_thick) / 2, // pDx2 + 0, // pAlp1 + ladder_width / 2, // pDy2 (ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2, // pDx3 (ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2, // pDx4 0); @@ -397,9 +478,9 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { 0, // pPhi ladder_width / 2, // pDy1 (box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2, // pDx1 - (box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2, // pDx2 - 0, //pAlp1 - ladder_width / 2, //pDy2 + (box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2, // pDx2 + 0, // pAlp1 + ladder_width / 2, // pDy2 (ladder_thick - wedge_back_thick) / 2, // pDx3 (ladder_thick - wedge_back_thick) / 2, // pDx4 0); @@ -410,9 +491,9 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { 0, // pPhi (ladder_width / 2) / 2, // pDy1 (ladder_thick) / 2, // pDx1 - (ladder_thick) / 2, // pDx2 - 0, //pAlp1 - (ladder_width / 2) / 2, //pDy2 + (ladder_thick) / 2, // pDx2 + 0, // pAlp1 + (ladder_width / 2) / 2, // pDy2 (ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2, // pDx3 (ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2, // pDx4 0); @@ -423,9 +504,9 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { 0, // pPhi (ladder_width / 2) / 2, // pDy1 (box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2, // pDx1 - (box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2, // pDx2 - 0, //pAlp1 - (ladder_width / 2) / 2, //pDy2 + (box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2, // pDx2 + 0, // pAlp1 + (ladder_width / 2) / 2, // pDy2 (ladder_thick - wedge_back_thick) / 2, // pDx3 (ladder_thick - wedge_back_thick) / 2, // pDx4 0); @@ -437,12 +518,42 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { 0, // pPhi (ladder_width / 2) / 2, // pDy1 (ladder_thick) / 2, // pDx1 - (ladder_thick) / 2, // pDx2 - 0, //pAlp1 - (ladder_width / 2) / 2, //pDy2 + (ladder_thick) / 2, // pDx2 + 0, // pAlp1 + (ladder_width / 2) / 2, // pDy2 (ladder_thick - (ceramic_length - waf_active) * sin(wedge_angle * 2)) / 2, // pDx3 (ladder_thick - (ceramic_length - waf_active) * sin(wedge_angle * 2)) / 2, // pDx4 0); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << DDName("LDRFRNT", "esalgo") << " Trap " << (LdrFrnt_Length / 2) << ":" + << -wedge_angle / CLHEP::deg << ":0:" << (ladder_width / 2) << ":" << (ladder_thick / 2) + << ":" << (ladder_thick / 2) << ":0:" << (ladder_width / 2) << ":" + << ((ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2) << ":" + << ((ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2) << ":0"; + edm::LogVerbatim("SFGeomX") << DDName("LDRBCK", "esalgo") << " Trap " << (LdrBck_Length / 2) << ":" + << -wedge_angle / CLHEP::deg << ":0:" << (ladder_width / 2) << ":" + << ((box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2) << ":" + << ((box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2) << ":0:" << (ladder_width / 2) + << ":" << ((ladder_thick - wedge_back_thick) / 2) << ":" + << ((ladder_thick - wedge_back_thick) / 2) << ":0"; + edm::LogVerbatim("SFGeomX") << DDName("LDRFHALF", "esalgo") << " Trap " << (LdrFrnt_Length / 2) << ":" + << -wedge_angle / CLHEP::deg << ":0:" << ((ladder_width / 2) / 2) << ":" + << (ladder_thick / 2) << ":" << (ladder_thick / 2) << ":0:" << ((ladder_width / 2) / 2) + << ":" << ((ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2) << ":" + << ((ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2) << ":0"; + edm::LogVerbatim("SFGeomX") << DDName("LDRBHALF", "esalgo") << " Trap " << (LdrBck_Length / 2) << ":" + << -wedge_angle / CLHEP::deg << ":0:" << ((ladder_width / 2) / 2) << ":" + << ((box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2) << ":" + << ((box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2) + << ":0:" << ((ladder_width / 2) / 2) << ":" << ((ladder_thick - wedge_back_thick) / 2) + << ":" << ((ladder_thick - wedge_back_thick) / 2) << ":0"; + edm::LogVerbatim("SFGeomX") << DDName("LDRFHTR", "esalgo") << " Trap " << ((LdrFrnt_Length - waf_active) / 2) << ":" + << -wedge_angle / CLHEP::deg << ":0:" << ((ladder_width / 2) / 2) << ":" + << ((ladder_thick) / 2) << ":" << ((ladder_thick) / 2) + << ":0:" << ((ladder_width / 2) / 2) << ":" + << ((ladder_thick - (ceramic_length - waf_active) * sin(wedge_angle * 2)) / 2) << ":" + << ((ladder_thick - (ceramic_length - waf_active) * sin(wedge_angle * 2)) / 2) << ":0"; +#endif // Creation of ladders with 5 micromodules length @@ -458,7 +569,10 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { } } } - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << "Side " << ladd_side << ":" << ladd_upper << ":" << ladd_subtr_no << ":" + << ladd_not_plain << " Index " << M << ":" << types_l5_.size(); +#endif DDName ddname(getLadPrefix(0) + types_l5_[M], "esalgo"); ladder_length = micromodule_length + 4 * waf_active + 0.1 * mm; @@ -485,6 +599,10 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { boxaz = ladder_thick; DDSolid solid_5a = DDSolidFactory::box(dd_tmp_name_5a, boxax / 2, boxay / 2, boxaz / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_5a << " Box " << (boxax / 2) << ":" << (boxay / 2) << ":" + << (boxaz / 2); +#endif if (ladd_side == 0) sdxe[enb] = ladder_width / 4; sdye[enb] = -boxay / 2 - LdrFrnt_Length / 2; @@ -497,6 +615,11 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { solid_lfhalf, DDTranslation(sdxe[enb], sdye[enb], sdze[enb]), DDRotation("esalgo:RM1299")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_5b << " Union " << solid_5a.name() << ":" << solid_lfhalf.name() + << " at " << DDTranslation(sdxe[enb], sdye[enb], sdze[enb]) + << " rotation esalgo:RM1299"; +#endif if (ladd_side == 0) sdxe2[enb] = -ladder_width / 4; @@ -510,6 +633,11 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { solid_lfhtrunc, DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb]), DDRotation("esalgo:RM1299")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_5c << " Union " << solid_5b.name() << ":" << solid_lfhtrunc.name() + << " at " << DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb]) + << " rotation esalgo:RM1299"; +#endif sdxe3[enb] = 0; sdye3[enb] = boxay / 2 + LdrBck_Length / 2; @@ -519,6 +647,10 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { solid_lbck, DDTranslation(sdxe3[enb], sdye3[enb], sdze3[enb]), DDRotation("esalgo:RM1299")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_5c.name() << ":" << solid_lbck.name() << " at " + << DDTranslation(sdxe3[enb], sdye3[enb], sdze3[enb]) << " rotation esalgo:RM1299"; +#endif DDLogicalPart ladder = DDLogicalPart(ddname, getLaddMaterial(), solid); DDName ddname2(getLadPrefix(1) + types_l5_[M], "esalgo"); @@ -535,12 +667,20 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { boxaz = ladder_thick; DDSolid solid_5pa = DDSolidFactory::box(dd_tmp_name_5pa, boxax / 2, boxay / 2, boxaz / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_5pa << " Box " << (boxax / 2) << ":" << (boxay / 2) << ":" + << (boxaz / 2); +#endif sdx = 0; sdy = -boxay / 2 - LdrFrnt_Length / 2; sdz = -ladder_thick / 2. + LdrFrnt_Offset; DDSolid solid_5pb = DDSolidFactory::unionSolid( dd_tmp_name_5pb, solid_5pa, solid_lfront, DDTranslation(sdx, sdy, sdz), DDRotation("esalgo:RM1299")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_5pb << " Union " << solid_5pa.name() << ":" << solid_lfront.name() + << " at " << DDTranslation(sdx, sdy, sdz) << " rotation esalgo:RM1299"; +#endif sdx = 0; sdy = boxay / 2 + LdrBck_Length / 2; @@ -548,6 +688,10 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { DDSolid solid = DDSolidFactory::unionSolid( ddname, solid_5pb, solid_lbck, DDTranslation(sdx, sdy, sdz), DDRotation("esalgo:RM1299")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_5pb.name() << ":" << solid_lbck.name() << " at " + << DDTranslation(sdx, sdy, sdz) << " rotation esalgo:RM1299"; +#endif DDLogicalPart ladder = DDLogicalPart(ddname, getLaddMaterial(), solid); DDName ddname2(getLadPrefix(1) + types_l5_[M], "esalgo"); @@ -571,7 +715,10 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { } } } - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << "Side " << ladd_side << ":" << ladd_upper << ":" << ladd_subtr_no << ":" + << ladd_not_plain << " Index " << M << ":" << types_l5_.size(); +#endif DDName ddname(getLadPrefix(0) + types_l4_[d], "esalgo"); ladder_length = micromodule_length + 3 * waf_active + 0.1 * mm; @@ -593,6 +740,10 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { boxax = ladder_width; boxaz = ladder_thick; DDSolid solid_a = DDSolidFactory::box(dd_tmp_name_a, boxax / 2, boxay / 2, boxaz / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_a << " Box " << (boxax / 2) << ":" << (boxay / 2) << ":" + << (boxaz / 2); +#endif sdxe[enb] = 0; sdye[enb] = -boxay / 2 - LdrFrnt_Length / 2; @@ -602,6 +753,11 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { solid_lfront, DDTranslation(sdxe[enb], sdye[enb], sdze[enb]), DDRotation("esalgo:RM1299")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Union " << solid_a.name() << ":" << solid_lfront.name() + << " at " << DDTranslation(sdxe[enb], sdye[enb], sdze[enb]) + << " rotation esalgo:RM1299"; +#endif if (ladd_side == 0) sdxe2[enb] = ladder_width / 4; @@ -614,6 +770,10 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { solid_lbhalf, DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb]), DDRotation("esalgo:RM1299")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_b.name() << ":" << solid_lbhalf.name() << " at " + << DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb]) << " rotation esalgo:RM1299"; +#endif DDLogicalPart ladder = DDLogicalPart(ddname, getLaddMaterial(), solid); DDName ddname2(getLadPrefix(1) + types_l4_[d], "esalgo"); @@ -638,6 +798,10 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { boxaz = ladder_thick; DDSolid solid_a = DDSolidFactory::box(dd_tmp_name_a, boxax / 2, boxay / 2, boxaz / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_a << " Box " << (boxax / 2) << ":" << (boxay / 2) << ":" + << (boxaz / 2); +#endif if (ladd_side == 0) sdxe[enb] = ladder_width / 4; sdye[enb] = -boxay / 2 - LdrFrnt_Length / 2; @@ -650,6 +814,11 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { solid_lfhalf, DDTranslation(sdxe[enb], sdye[enb], sdze[enb]), DDRotation("esalgo:RM1299")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Union " << solid_a.name() << ":" << solid_lfhalf.name() + << " at " << DDTranslation(sdxe[enb], sdye[enb], sdze[enb]) + << " rotation esalgo:RM1299"; +#endif sdxe2[enb] = 0; sdye2[enb] = boxay / 2 + LdrBck_Length / 2; @@ -660,6 +829,11 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { solid_lbck, DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb]), DDRotation("esalgo:RM1299")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_b.name() << ":" << solid_lbck.name() << " at " + << DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb]) + << " rotation esalgo:RM1299"; +#endif DDLogicalPart ladder = DDLogicalPart(ddname, getLaddMaterial(), solid); DDName ddname2(getLadPrefix(1) + types_l4_[d], "esalgo"); @@ -679,6 +853,10 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { boxax = ladder_width; boxaz = ladder_thick; DDSolid solid_a = DDSolidFactory::box(dd_tmp_name_a, boxax / 2, boxay / 2, boxaz / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_a << " Box " << (boxax / 2) << ":" << (boxay / 2) << ":" + << (boxaz / 2); +#endif if (ladd_side == 0) sdxe[enb] = ladder_width / 4; sdye[enb] = -boxay / 2 - LdrFrnt_Length / 2; @@ -691,6 +869,11 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { solid_lfhalf, DDTranslation(sdxe[enb], sdye[enb], sdze[enb]), DDRotation("esalgo:RM1299")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Union " << solid_a.name() << ":" << solid_lfhalf.name() + << " at " << DDTranslation(sdxe[enb], sdye[enb], sdze[enb]) + << " rotation esalgo:RM1299"; +#endif if (ladd_side == 0) sdxe2[enb] = -ladder_width / 4; @@ -704,6 +887,11 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { solid_lfhtrunc, DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb]), DDRotation("esalgo:RM1299")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_c << " Union " << solid_b.name() << ":" << solid_lfhtrunc.name() + << " at " << DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb]) + << " rotation esalgo:RM1299"; +#endif sdxe3[enb] = 0; sdye3[enb] = boxay / 2 + LdrBck_Length / 2; @@ -713,6 +901,11 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { solid_lbck, DDTranslation(sdxe3[enb], sdye3[enb], sdze3[enb]), DDRotation("esalgo:RM1299")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_c.name() << ":" << solid_lbck.name() << " at " + << DDTranslation(sdxe3[enb], sdye3[enb], sdze3[enb]) + << " rotation esalgo:RM1299"; +#endif DDLogicalPart ladder = DDLogicalPart(ddname, getLaddMaterial(), solid); DDName ddname2(getLadPrefix(1) + types_l4_[d], "esalgo"); @@ -730,18 +923,30 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { boxaz = ladder_thick; DDSolid solid_pa = DDSolidFactory::box(dd_tmp_name_pa, boxax / 2, boxay / 2, boxaz / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_pa << " Box " << (boxax / 2) << ":" << (boxay / 2) << ":" + << (boxaz / 2); +#endif sdx = 0; sdy = -boxay / 2 - LdrFrnt_Length / 2; sdz = -ladder_thick / 2. + LdrFrnt_Offset; DDSolid solid_pb = DDSolidFactory::unionSolid( dd_tmp_name_pb, solid_pa, solid_lfront, DDTranslation(sdx, sdy, sdz), DDRotation("esalgo:RM1299")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_pb << " Union " << solid_pa.name() << ":" << solid_lfront.name() + << " at " << DDTranslation(sdx, sdy, sdz) << " rotation esalgo:RM1299"; +#endif sdx = 0; sdy = boxay / 2 + LdrBck_Length / 2; sdz = -ladder_thick / 2. + LdrBck_Offset; DDSolid solid = DDSolidFactory::unionSolid( ddname, solid_pb, solid_lbck, DDTranslation(sdx, sdy, sdz), DDRotation("esalgo:RM1299")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_pb.name() << ":" << solid_lbck.name() << " at " + << DDTranslation(sdx, sdy, sdz) << " rotation esalgo:RM1299"; +#endif DDLogicalPart ladder = DDLogicalPart(ddname, getLaddMaterial(), solid); DDName ddname2(getLadPrefix(1) + types_l4_[d], "esalgo"); DDLogicalPart ladder2 = DDLogicalPart(ddname2, getLaddMaterial(), solid); @@ -771,7 +976,14 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { scopy + 1000 * swed_scopy_glob + 100, DDTranslation(xpos, ypos, zpos), DDRotation("esalgo:RM1299")); - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SWED").name() << " copy " + << (scopy + 1000 * swed_scopy_glob) << " in " << ddname << " at " + << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1299"; + edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SWED").name() << " copy " + << (scopy + 1000 * swed_scopy_glob + 100) << " in " << ddname2 << " at " + << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1299"; +#endif ypos = ypos + ywedge_ceramic_diff; zpos = -ladder_thick / 2. + 0.005 * mm + zwedge_ceramic_diff; cpv.position(DDLogicalPart("esalgo:SFBX"), @@ -784,6 +996,14 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { scopy + 1000 * swed_scopy_glob, DDTranslation(xpos, ypos, zpos), DDRotation("esalgo:RM1300A")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SFBX").name() << " copy " + << (scopy + 1000 * swed_scopy_glob) << " in " << ddname << " at " + << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1298"; + edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SFBY").name() << " copy " + << (scopy + 1000 * swed_scopy_glob) << " in " << ddname2 << " at " + << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1300A"; +#endif } } } @@ -809,7 +1029,14 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { scopy + 1000 * swed_scopy_glob + 100, DDTranslation(xpos, ypos, zpos), DDRotation("esalgo:RM1299")); - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SWED").name() << " copy " + << (scopy + 1000 * swed_scopy_glob) << " in " << ddname << " at " + << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1299"; + edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SWED").name() << " copy " + << (scopy + 1000 * swed_scopy_glob + 100) << " in " << ddname2 << " at " + << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1299"; +#endif ypos = ypos + ywedge_ceramic_diff; zpos = -ladder_thick / 2. + 0.005 * mm + zwedge_ceramic_diff; cpv.position(DDLogicalPart("esalgo:SFBX"), @@ -822,6 +1049,14 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { scopy + 1000 * swed_scopy_glob, DDTranslation(xpos, ypos, zpos), DDRotation("esalgo:RM1300A")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SFBX").name() << " copy " + << (scopy + 1000 * swed_scopy_glob) << " in " << ddname << " at " + << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1298"; + edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SFBY").name() << " copy " + << (scopy + 1000 * swed_scopy_glob) << " in " << ddname2 << " at " + << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1300A"; +#endif } } } @@ -894,7 +1129,11 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { cpv.position( DDLogicalPart(ddname), DDName("SF", "esalgo"), icopy[j], DDTranslation(xpos, ypos, zpos), DDRotation()); - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << DDLogicalPart(ddname).name() << " copy " << icopy[j] << " in " + << DDName("SF", "esalgo") << " at " << DDTranslation(xpos, ypos, zpos) + << " no rotation"; +#endif DDName ddname2(getLadPrefix(1) + type, "esalgo"); xpos = I * (2 * waf_intra_col_sep + waf_inter_col_sep); @@ -904,7 +1143,11 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { icopy[j], DDTranslation(ypos, -xpos, zpos - zlead1_ + zlead2_), DDRotation("esalgo:R270")); - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << DDLogicalPart(ddname2).name() << " copy " << icopy[j] << " in " + << DDName("SF", "esalgo") << " at " + << DDTranslation(ypos, -xpos, zpos - zlead1_ + zlead2_) << " rotation esalgo:R270"; +#endif int changed = 0; for (int t = 0; t < int(types_l5_.size()); t++) if (type == types_l5_[t]) { @@ -946,7 +1189,11 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { icopy[j], DDTranslation(xpos, -ypos, zpos), DDRotation("esalgo:R180")); - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << DDLogicalPart(ddname3).name() << " copy " << icopy[j] << " in " + << DDName("SF", "esalgo") << " at " << DDTranslation(xpos, -ypos, zpos) + << " rotation esalgo:R180"; +#endif DDName ddname4(getLadPrefix(1) + type, "esalgo"); xpos = I * (2 * waf_intra_col_sep + waf_inter_col_sep); @@ -956,6 +1203,11 @@ void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) { icopy[j], DDTranslation(-ypos, -xpos, zpos - zlead1_ + zlead2_), DDRotation("esalgo:R090")); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << DDLogicalPart(ddname4).name() << " copy " << icopy[j] << " in " + << DDName("SF", "esalgo") << " at " + << DDTranslation(-ypos, -xpos, zpos - zlead1_ + zlead2_) << " rotation esalgo:R090"; +#endif } } } @@ -966,16 +1218,18 @@ void DDEcalPreshowerAlgo::doSens(DDCompactView& cpv) { xpos = -waf_active / 2. + i * waf_active / 32. + waf_active / 64.; cpv.position( DDLogicalPart("esalgo:SFSX"), DDName("SFWX", "esalgo"), i + 1, DDTranslation(xpos, 0., 0.), DDRotation()); - - LogDebug("SFGeom") << " debug : SFSX, Logical part: " << DDLogicalPart("esalgo:SFSX") << "\n translation " - << DDTranslation(xpos, 0., 0.) << " rotation " << DDRotation() << " copy number= " << i << "\n"; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SFSX").name() << " copy " << (i + 1) << " in " + << DDName("SFWX", "esalgo") << " at " << DDTranslation(xpos, 0., 0.) << " no rotation"; +#endif ypos = -waf_active / 2. + i * waf_active / 32. + waf_active / 64.; cpv.position( DDLogicalPart("esalgo:SFSY"), DDName("SFWY", "esalgo"), i + 1, DDTranslation(0., ypos, 0.), DDRotation()); - - LogDebug("SFGeom") << " debug : SFSY, Logical part: " << DDLogicalPart("esalgo:SFSY") << "\n translation " - << DDTranslation(0., ypos, 0.) << " rotation " << DDRotation() << " copy number= " << i << "\n"; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SFSY").name() << " copy " << (i + 1) << " in " + << DDName("SFWY", "esalgo") << " at " << DDTranslation(0., ypos, 0.) << " no rotation"; +#endif } } diff --git a/Geometry/EcalCommonData/plugins/dd4hep/DDEcalBarrelNewAlgo.cc b/Geometry/EcalCommonData/plugins/dd4hep/DDEcalBarrelNewAlgo.cc index 99860f3bf0567..636a7357a2a0d 100644 --- a/Geometry/EcalCommonData/plugins/dd4hep/DDEcalBarrelNewAlgo.cc +++ b/Geometry/EcalCommonData/plugins/dd4hep/DDEcalBarrelNewAlgo.cc @@ -1,9 +1,9 @@ #include "DD4hep/DetFactoryHelper.h" #include "DD4hep/Printout.h" -#include "DataFormats/Math/interface/CMSUnits.h" -#include "DetectorDescription/Core/interface/DDSplit.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" #include "DetectorDescription/DDCMS/interface/BenchmarkGrd.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Geometry/CaloGeometry/interface/EcalTrapezoidParameters.h" #include "Math/AxisAngle.h" @@ -16,7 +16,7 @@ using namespace std; using namespace cms; using namespace dd4hep; -using namespace cms_units::operators; +using namespace angle_units::operators; using VecDouble = vector; using VecStr = vector; @@ -450,21 +450,17 @@ namespace { } Solid mytrap(const std::string& nam, const EcalTrapezoidParameters& t) { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << nam << " Trap " << convertRadToDeg(t.theta()) << ":" << convertRadToDeg(t.phi()) + << ":" << cms::convert2mm(t.h1()) << ":" << cms::convert2mm(t.bl1()) << ":" + << cms::convert2mm(t.tl1()) << ":" << convertRadToDeg(t.alp1()) << ":" + << cms::convert2mm(t.h2()) << ":" << cms::convert2mm(t.bl2()) << ":" + << cms::convert2mm(t.tl2()) << ":" << convertRadToDeg(t.alp2()); +#endif return Trap( nam, t.dz(), t.theta(), t.phi(), t.h1(), t.bl1(), t.tl1(), t.alp1(), t.h2(), t.bl2(), t.tl2(), t.alp2()); } - TGeoCombiTrans* createPlacement(const Rotation3D& iRot, const Position& iTrans) { - double elements[9]; - iRot.GetComponents(elements); - TGeoRotation r; - r.SetMatrix(elements); - - TGeoTranslation t(iTrans.x(), iTrans.y(), iTrans.z()); - - return new TGeoCombiTrans(t, r); - } - string_view mynamespace(string_view input) { string_view v = input; auto trim_pos = v.find(':'); @@ -485,51 +481,51 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext // Barrel volume // barrel parent volume Barrel bar; - bar.name = ns.prepend(args.str("BarName")); // Barrel volume name - bar.mat = args.str("BarMat"); // Barrel material name - bar.vecZPts = args.vecDble("BarZPts"); // Barrel list of z pts - bar.vecRMin = args.vecDble("BarRMin"); // Barrel list of rMin pts - bar.vecRMax = args.vecDble("BarRMax"); // Barrel list of rMax pts - bar.vecTran = args.vecDble("BarTran"); // Barrel translation - bar.vecRota = args.vecDble("BarRota"); // Barrel rotation - bar.vecRota2 = args.vecDble("BarRota2"); // 2nd Barrel rotation - bar.vecRota3 = args.vecDble("BarRota3"); // 3rd Barrel rotation - bar.phiLo = args.dble("BarPhiLo"); // Barrel phi lo - bar.phiHi = args.dble("BarPhiHi"); // Barrel phi hi - bar.here = args.dble("BarHere"); // Barrel presence flag + bar.name = myns + args.str("BarName"); // Barrel volume name + bar.mat = args.str("BarMat"); // Barrel material name + bar.vecZPts = args.vecDble("BarZPts"); // Barrel list of z pts + bar.vecRMin = args.vecDble("BarRMin"); // Barrel list of rMin pts + bar.vecRMax = args.vecDble("BarRMax"); // Barrel list of rMax pts + bar.vecTran = args.vecDble("BarTran"); // Barrel translation + bar.vecRota = args.vecDble("BarRota"); // Barrel rotation + bar.vecRota2 = args.vecDble("BarRota2"); // 2nd Barrel rotation + bar.vecRota3 = args.vecDble("BarRota3"); // 3rd Barrel rotation + bar.phiLo = args.dble("BarPhiLo"); // Barrel phi lo + bar.phiHi = args.dble("BarPhiHi"); // Barrel phi hi + bar.here = args.dble("BarHere"); // Barrel presence flag // Supermodule volume Supermodule spm; - spm.name = ns.prepend(args.str("SpmName")); // Supermodule volume name - spm.mat = args.str("SpmMat"); // Supermodule material name - spm.vecZPts = args.vecDble("SpmZPts"); // Supermodule list of z pts - spm.vecRMin = args.vecDble("SpmRMin"); // Supermodule list of rMin pts - spm.vecRMax = args.vecDble("SpmRMax"); // Supermodule list of rMax pts - spm.vecTran = args.vecDble("SpmTran"); // Supermodule translation - spm.vecRota = args.vecDble("SpmRota"); // Supermodule rotation - spm.vecBTran = args.vecDble("SpmBTran"); // Base Supermodule translation - spm.vecBRota = args.vecDble("SpmBRota"); // Base Supermodule rotation - spm.nPerHalf = args.integer("SpmNPerHalf"); // # Supermodules per half detector - spm.lowPhi = args.dble("SpmLowPhi"); // Low phi value of base supermodule - spm.delPhi = args.dble("SpmDelPhi"); // Delta phi value of base supermodule - spm.phiOff = args.dble("SpmPhiOff"); // Phi offset value supermodule - spm.vecHere = args.vecDble("SpmHere"); // Bit saying if a supermodule is present or not - spm.cutName = ns.prepend(args.str("SpmCutName")); // Name of cut box - spm.cutThick = args.dble("SpmCutThick"); // Box thickness - spm.cutShow = args.value("SpmCutShow"); // Non-zero means show the box on display (testing only) - spm.vecCutTM = args.vecDble("SpmCutTM"); // Translation for minus phi cut box - spm.vecCutTP = args.vecDble("SpmCutTP"); // Translation for plus phi cut box - spm.cutRM = args.dble("SpmCutRM"); // Rotation for minus phi cut box - spm.cutRP = args.dble("SpmCutRP"); // Rotation for plus phi cut box - spm.expThick = args.dble("SpmExpThick"); // Thickness (x) of supermodule expansion box - spm.expWide = args.dble("SpmExpWide"); // Width (y) of supermodule expansion box - spm.expYOff = args.dble("SpmExpYOff"); // Offset (y) of supermodule expansion box - spm.sideName = ns.prepend(args.str("SpmSideName")); // Supermodule Side Plate volume name - spm.sideMat = args.str("SpmSideMat"); // Supermodule Side Plate material name - spm.sideHigh = args.dble("SpmSideHigh"); // Side plate height - spm.sideThick = args.dble("SpmSideThick"); // Side plate thickness - spm.sideYOffM = args.dble("SpmSideYOffM"); // Side plate Y offset on minus phi side - spm.sideYOffP = args.dble("SpmSideYOffP"); // Side plate Y offset on plus phi side + spm.name = ns.prepend(args.str("SpmName")); // Supermodule volume name + spm.mat = args.str("SpmMat"); // Supermodule material name + spm.vecZPts = args.vecDble("SpmZPts"); // Supermodule list of z pts + spm.vecRMin = args.vecDble("SpmRMin"); // Supermodule list of rMin pts + spm.vecRMax = args.vecDble("SpmRMax"); // Supermodule list of rMax pts + spm.vecTran = args.vecDble("SpmTran"); // Supermodule translation + spm.vecRota = args.vecDble("SpmRota"); // Supermodule rotation + spm.vecBTran = args.vecDble("SpmBTran"); // Base Supermodule translation + spm.vecBRota = args.vecDble("SpmBRota"); // Base Supermodule rotation + spm.nPerHalf = args.integer("SpmNPerHalf"); // # Supermodules per half detector + spm.lowPhi = args.dble("SpmLowPhi"); // Low phi value of base supermodule + spm.delPhi = args.dble("SpmDelPhi"); // Delta phi value of base supermodule + spm.phiOff = args.dble("SpmPhiOff"); // Phi offset value supermodule + spm.vecHere = args.vecDble("SpmHere"); // Bit saying if a supermodule is present or not + spm.cutName = ns.prepend(args.str("SpmCutName")); // Name of cut box + spm.cutThick = args.dble("SpmCutThick"); // Box thickness + spm.cutShow = args.value("SpmCutShow"); // Non-zero means show the box on display (testing only) + spm.vecCutTM = args.vecDble("SpmCutTM"); // Translation for minus phi cut box + spm.vecCutTP = args.vecDble("SpmCutTP"); // Translation for plus phi cut box + spm.cutRM = args.dble("SpmCutRM"); // Rotation for minus phi cut box + spm.cutRP = args.dble("SpmCutRP"); // Rotation for plus phi cut box + spm.expThick = args.dble("SpmExpThick"); // Thickness (x) of supermodule expansion box + spm.expWide = args.dble("SpmExpWide"); // Width (y) of supermodule expansion box + spm.expYOff = args.dble("SpmExpYOff"); // Offset (y) of supermodule expansion box + spm.sideName = myns + args.str("SpmSideName"); // Supermodule Side Plate volume name + spm.sideMat = args.str("SpmSideMat"); // Supermodule Side Plate material name + spm.sideHigh = args.dble("SpmSideHigh"); // Side plate height + spm.sideThick = args.dble("SpmSideThick"); // Side plate thickness + spm.sideYOffM = args.dble("SpmSideYOffM"); // Side plate Y offset on minus phi side + spm.sideYOffP = args.dble("SpmSideYOffP"); // Side plate Y offset on plus phi side Crystal cry; cry.nomCryDimAF = args.dble("NomCryDimAF"); @@ -634,13 +630,13 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext InnerLayerVolume ily; ily.here = args.dble("IlyHere"); - ily.name = ns.prepend(args.str("IlyName")); + ily.name = myns + args.str("IlyName"); ily.phiLow = args.dble("IlyPhiLow"); ily.delPhi = args.dble("IlyDelPhi"); ily.vecIlyMat = args.vecStr("IlyMat"); ily.vecIlyThick = args.vecDble("IlyThick"); - ily.pipeName = ns.prepend(args.str("IlyPipeName")); + ily.pipeName = myns + args.str("IlyPipeName"); ily.pipeHere = args.dble("IlyPipeHere"); ily.pipeMat = args.str("IlyPipeMat"); ily.pipeODHalf = 0.5 * args.dble("IlyPipeOD"); @@ -655,7 +651,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ily.vecIlyPipePhi = args.vecDble("IlyPipePhi"); ily.vecIlyPipeZ = args.vecDble("IlyPipeZ"); - ily.pTMName = ns.prepend(args.str("IlyPTMName")); + ily.pTMName = myns + args.str("IlyPTMName"); ily.pTMHere = args.dble("IlyPTMHere"); ily.pTMMat = args.str("IlyPTMMat"); ily.pTMWidthHalf = 0.5 * args.dble("IlyPTMWidth"); @@ -664,7 +660,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ily.vecIlyPTMZ = args.vecDble("IlyPTMZ"); ily.vecIlyPTMPhi = args.vecDble("IlyPTMPhi"); - ily.fanOutName = ns.prepend(args.str("IlyFanOutName")); + ily.fanOutName = myns + args.str("IlyFanOutName"); ily.fanOutHere = args.dble("IlyFanOutHere"); ily.fanOutMat = args.str("IlyFanOutMat"); ily.fanOutWidthHalf = 0.5 * args.dble("IlyFanOutWidth"); @@ -672,15 +668,15 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ily.fanOutHeightHalf = 0.5 * args.dble("IlyFanOutHeight"); ily.vecIlyFanOutZ = args.vecDble("IlyFanOutZ"); ily.vecIlyFanOutPhi = args.vecDble("IlyFanOutPhi"); - ily.diffName = ns.prepend(args.str("IlyDiffName")); + ily.diffName = myns + args.str("IlyDiffName"); ily.diffMat = args.str("IlyDiffMat"); ily.diffOff = args.dble("IlyDiffOff"); ily.diffLengthHalf = 0.5 * args.dble("IlyDiffLength"); - ily.bndlName = ns.prepend(args.str("IlyBndlName")); + ily.bndlName = myns + args.str("IlyBndlName"); ily.bndlMat = args.str("IlyBndlMat"); ily.bndlOff = args.dble("IlyBndlOff"); - ily.bndlLengthHalf = args.dble("IlyBndlLength"); - ily.fEMName = ns.prepend(args.str("IlyFEMName")); + ily.bndlLengthHalf = 0.5 * args.dble("IlyBndlLength"); + ily.fEMName = myns + args.str("IlyFEMName"); ily.fEMMat = args.str("IlyFEMMat"); ily.fEMWidthHalf = 0.5 * args.dble("IlyFEMWidth"); ily.fEMLengthHalf = 0.5 * args.dble("IlyFEMLength"); @@ -689,8 +685,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ily.vecIlyFEMPhi = args.vecDble("IlyFEMPhi"); AlveolarWedge alvWedge; - alvWedge.hawRName = ns.prepend(args.str("HawRName")); - alvWedge.fawName = ns.prepend(args.str("FawName")); + alvWedge.hawRName = myns + args.str("HawRName"); + alvWedge.fawName = myns + args.str("FawName"); alvWedge.fawHere = args.dble("FawHere"); alvWedge.hawRHBIG = args.dble("HawRHBIG"); alvWedge.hawRhsml = args.dble("HawRhsml"); @@ -707,7 +703,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Grid grid; grid.here = args.dble("GridHere"); - grid.name = ns.prepend(args.str("GridName")); + grid.name = myns + args.str("GridName"); grid.mat = args.str("GridMat"); grid.thick = args.dble("GridThick"); @@ -715,7 +711,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext back.here = args.dble("BackHere"); back.xOff = args.dble("BackXOff"); back.yOff = args.dble("BackYOff"); - back.sideName = ns.prepend(args.str("BackSideName")); + back.sideName = myns + args.str("BackSideName"); back.sideHere = args.dble("BackSideHere"); back.sideLength = args.dble("BackSideLength"); back.sideHeight = args.dble("BackSideHeight"); @@ -724,18 +720,18 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext back.sideYOff2 = args.dble("BackSideYOff2"); back.sideAngle = args.dble("BackSideAngle"); back.sideMat = args.str("BackSideMat"); - back.plateName = ns.prepend(args.str("BackPlateName")); + back.plateName = myns + args.str("BackPlateName"); back.plateHere = args.dble("BackPlateHere"); back.plateLength = args.dble("BackPlateLength"); back.plateThick = args.dble("BackPlateThick"); back.plateWidth = args.dble("BackPlateWidth"); back.plateMat = args.str("BackPlateMat"); - back.plate2Name = ns.prepend(args.str("BackPlate2Name")); + back.plate2Name = myns + args.str("BackPlate2Name"); back.plate2Thick = args.dble("BackPlate2Thick"); back.plate2Mat = args.str("BackPlate2Mat"); Grille grille; - grille.name = ns.prepend(args.str("GrilleName")); + grille.name = myns + args.str("GrilleName"); grille.here = args.dble("GrilleHere"); grille.thick = args.dble("GrilleThick"); grille.width = args.dble("GrilleWidth"); @@ -744,12 +740,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext grille.vecHeight = args.vecDble("GrilleHeight"); grille.vecZOff = args.vecDble("GrilleZOff"); - grille.edgeSlotName = ns.prepend(args.str("GrEdgeSlotName")); + grille.edgeSlotName = myns + args.str("GrEdgeSlotName"); grille.edgeSlotMat = args.str("GrEdgeSlotMat"); grille.edgeSlotHere = args.dble("GrEdgeSlotHere"); grille.edgeSlotHeight = args.dble("GrEdgeSlotHeight"); grille.edgeSlotWidth = args.dble("GrEdgeSlotWidth"); - grille.midSlotName = ns.prepend(args.str("GrMidSlotName")); + grille.midSlotName = myns + args.str("GrMidSlotName"); grille.midSlotMat = args.str("GrMidSlotMat"); grille.midSlotHere = args.dble("GrMidSlotHere"); grille.midSlotWidth = args.dble("GrMidSlotWidth"); @@ -758,7 +754,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext BackPipe backPipe; backPipe.here = args.dble("BackPipeHere"); - backPipe.name = ns.prepend(args.str("BackPipeName")); + backPipe.name = myns + args.str("BackPipeName"); backPipe.vecDiam = args.vecDble("BackPipeDiam"); backPipe.vecThick = args.vecDble("BackPipeThick"); backPipe.mat = args.str("BackPipeMat"); @@ -770,31 +766,31 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext std::transform(backCool.vecName.begin(), backCool.vecName.end(), backCool.vecName.begin(), - [&ns](std::string name) -> std::string { return ns.prepend(name); }); + [&myns](std::string name) -> std::string { return (myns + name); }); backCool.barHere = args.dble("BackCoolBarHere"); backCool.barWidth = args.dble("BackCoolBarWidth"); backCool.barHeight = args.dble("BackCoolBarHeight"); backCool.mat = args.str("BackCoolMat"); - backCool.barName = ns.prepend(args.str("BackCoolBarName")); + backCool.barName = myns + args.str("BackCoolBarName"); backCool.barThick = args.dble("BackCoolBarThick"); backCool.barMat = args.str("BackCoolBarMat"); - backCool.barSSName = ns.prepend(args.str("BackCoolBarSSName")); + backCool.barSSName = myns + args.str("BackCoolBarSSName"); backCool.barSSThick = args.dble("BackCoolBarSSThick"); backCool.barSSMat = args.str("BackCoolBarSSMat"); - backCool.barWaName = ns.prepend(args.str("BackCoolBarWaName")); + backCool.barWaName = myns + args.str("BackCoolBarWaName"); backCool.barWaThick = args.dble("BackCoolBarWaThick"); backCool.barWaMat = args.str("BackCoolBarWaMat"); backCool.vFEHere = args.dble("BackCoolVFEHere"); - backCool.vFEName = args.str("BackCoolVFEName"); + backCool.vFEName = myns + args.str("BackCoolVFEName"); backCool.vFEMat = args.str("BackCoolVFEMat"); - backCool.backVFEName = ns.prepend(args.str("BackVFEName")); + backCool.backVFEName = args.str("BackVFEName"); backCool.backVFEMat = args.str("BackVFEMat"); backCool.vecBackVFELyrThick = args.vecDble("BackVFELyrThick"); backCool.vecBackVFELyrName = args.vecStr("BackVFELyrName"); std::transform(backCool.vecBackVFELyrName.begin(), backCool.vecBackVFELyrName.end(), backCool.vecBackVFELyrName.begin(), - [&ns](std::string name) -> std::string { return ns.prepend(name); }); + [&myns](std::string name) -> std::string { return (myns + name); }); backCool.vecBackVFELyrMat = args.vecStr("BackVFELyrMat"); backCool.vecBackCoolNSec = args.vecDble("BackCoolNSec"); backCool.vecBackCoolSecSep = args.vecDble("BackCoolSecSep"); @@ -807,7 +803,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext std::transform(backMisc.vecName.begin(), backMisc.vecName.end(), backMisc.vecName.begin(), - [&ns](std::string name) -> std::string { return ns.prepend(name); }); + [&myns](std::string name) -> std::string { return (myns + name); }); backMisc.vecMat = args.vecStr("BackMiscMat"); backMisc.backCBStdSep = args.dble("BackCBStdSep"); @@ -818,21 +814,21 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext std::transform(patchPanel.vecNames.begin(), patchPanel.vecNames.end(), patchPanel.vecNames.begin(), - [&ns](std::string name) -> std::string { return ns.prepend(name); }); + [&myns](std::string name) -> std::string { return (myns + name); }); patchPanel.vecMat = args.vecStr("PatchPanelMat"); - patchPanel.name = ns.prepend(args.str("PatchPanelName")); + patchPanel.name = myns + args.str("PatchPanelName"); BackCoolTank backCoolTank; backCoolTank.here = args.dble("BackCoolTankHere"); - backCoolTank.name = ns.prepend(args.str("BackCoolTankName")); + backCoolTank.name = myns + args.str("BackCoolTankName"); backCoolTank.width = args.dble("BackCoolTankWidth"); backCoolTank.thick = args.dble("BackCoolTankThick"); backCoolTank.mat = args.str("BackCoolTankMat"); - backCoolTank.waName = ns.prepend(args.str("BackCoolTankWaName")); + backCoolTank.waName = myns + args.str("BackCoolTankWaName"); backCoolTank.waWidth = args.dble("BackCoolTankWaWidth"); backCoolTank.waMat = args.str("BackCoolTankWaMat"); - backCoolTank.backBracketName = ns.prepend(args.str("BackBracketName")); + backCoolTank.backBracketName = myns + args.str("BackBracketName"); backCoolTank.backBracketHeight = args.dble("BackBracketHeight"); backCoolTank.backBracketMat = args.str("BackBracketMat"); @@ -846,14 +842,14 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext MBCoolTube mbCoolTube; mbCoolTube.here = args.dble("MBCoolTubeHere"); - mbCoolTube.name = ns.prepend(args.str("MBCoolTubeName")); + mbCoolTube.name = myns + args.str("MBCoolTubeName"); mbCoolTube.innDiam = args.dble("MBCoolTubeInnDiam"); mbCoolTube.outDiam = args.dble("MBCoolTubeOutDiam"); mbCoolTube.mat = args.str("MBCoolTubeMat"); MBManif mbManif; mbManif.here = args.dble("MBManifHere"); - mbManif.name = ns.prepend(args.str("MBManifName")); + mbManif.name = myns + args.str("MBManifName"); mbManif.innDiam = args.dble("MBManifInnDiam"); mbManif.outDiam = args.dble("MBManifOutDiam"); mbManif.mat = args.str("MBManifMat"); @@ -865,30 +861,30 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext std::transform(mbLyr.vecMBLyrName.begin(), mbLyr.vecMBLyrName.end(), mbLyr.vecMBLyrName.begin(), - [&ns](std::string name) -> std::string { return ns.prepend(name); }); + [&myns](std::string name) -> std::string { return (myns + name); }); mbLyr.vecMBLyrMat = args.vecStr("MBLyrMat"); Pincer pincer; pincer.rodHere = args.dble("PincerRodHere"); - pincer.rodName = ns.prepend(args.str("PincerRodName")); + pincer.rodName = myns + args.str("PincerRodName"); pincer.rodMat = args.str("PincerRodMat"); pincer.vecRodAzimuth = args.vecDble("PincerRodAzimuth"); - pincer.envName = ns.prepend(args.str("PincerEnvName")); + pincer.envName = myns + args.str("PincerEnvName"); pincer.envMat = args.str("PincerEnvMat"); pincer.envWidthHalf = 0.5 * args.dble("PincerEnvWidth"); pincer.envHeightHalf = 0.5 * args.dble("PincerEnvHeight"); pincer.envLengthHalf = 0.5 * args.dble("PincerEnvLength"); pincer.vecEnvZOff = args.vecDble("PincerEnvZOff"); - pincer.blkName = ns.prepend(args.str("PincerBlkName")); + pincer.blkName = myns + args.str("PincerBlkName"); pincer.blkMat = args.str("PincerBlkMat"); pincer.blkLengthHalf = 0.5 * args.dble("PincerBlkLength"); - pincer.shim1Name = ns.prepend(args.str("PincerShim1Name")); + pincer.shim1Name = myns + args.str("PincerShim1Name"); pincer.shimHeight = args.dble("PincerShimHeight"); - pincer.shim2Name = ns.prepend(args.str("PincerShim2Name")); + pincer.shim2Name = myns + args.str("PincerShim2Name"); pincer.shimMat = args.str("PincerShimMat"); pincer.shim1Width = args.dble("PincerShim1Width"); pincer.shim2Width = args.dble("PincerShim2Width"); - pincer.cutName = ns.prepend(args.str("PincerCutName")); + pincer.cutName = myns + args.str("PincerCutName"); pincer.cutMat = args.str("PincerCutMat"); pincer.cutWidth = args.dble("PincerCutWidth"); pincer.cutHeight = args.dble("PincerCutHeight"); @@ -898,7 +894,14 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const unsigned int copyOne(1); const unsigned int copyTwo(2); // Barrel parent volume---------------------------------------------------------- - Solid barSolid = Polycone(bar.phiLo, (bar.phiHi - bar.phiLo), bar.vecRMin, bar.vecRMax, bar.vecZPts); + Solid barSolid = Polycone(bar.name, bar.phiLo, (bar.phiHi - bar.phiLo), bar.vecRMin, bar.vecRMax, bar.vecZPts); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << bar.name << " PolyCone from " << convertRadToDeg(bar.phiLo) << " to " + << convertRadToDeg(bar.phiHi) << " with " << bar.vecZPts.size() << " points"; + for (unsigned int k = 0; k < bar.vecZPts.size(); ++k) + edm::LogVerbatim("EBGeom") << "[" << k << "] " << cms::convert2mm(bar.vecZPts[k]) << ":" + << cms::convert2mm(bar.vecRMin[k]) << ":" << cms::convert2mm(bar.vecRMax[k]); +#endif Position tran(bar.vecTran[0], bar.vecTran[1], bar.vecTran[2]); Rotation3D rotation = myrot(ns, bar.name + "Rot", @@ -908,27 +911,46 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Volume barVolume = Volume(bar.name, barSolid, ns.material(bar.mat)); parentVolume.placeVolume(barVolume, copyOne, Transform3D(rotation, tran)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << barVolume.name() << ":" << copyOne << " positioned in " << parentVolume.name(); + edm::LogVerbatim("EBGeomX") << barVolume.name() << ":" << copyOne << " positioned in " << parentVolume.name() + << " at (" << cms::convert2mm(tran.x()) << "," << cms::convert2mm(tran.y()) << "," + << cms::convert2mm(tran.z()) << ") with rotation"; #endif // End Barrel parent volume---------------------------------------------------------- // Supermodule parent------------------------------------------------------------ const string spmcut1ddname((0 != spm.cutShow) ? spm.name : (spm.name + "CUT1")); - Solid ddspm = Polycone(spm.lowPhi, spm.delPhi, spm.vecRMin, spm.vecRMax, spm.vecZPts); + Solid ddspm = Polycone(spmcut1ddname, spm.lowPhi, spm.delPhi, spm.vecRMin, spm.vecRMax, spm.vecZPts); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << spmcut1ddname << " PolyCone from " << convertRadToDeg(spm.lowPhi) << " to " + << convertRadToDeg(spm.lowPhi + spm.delPhi) << " with " << spm.vecZPts.size() + << " points"; + for (unsigned int k = 0; k < spm.vecZPts.size(); ++k) + edm::LogVerbatim("EBGeom") << "[" << k << "] " << cms::convert2mm(spm.vecZPts[k]) << ":" + << cms::convert2mm(spm.vecRMin[k]) << ":" << cms::convert2mm(spm.vecRMax[k]); +#endif const unsigned int indx(0.5 * spm.vecRMax.size()); // Deal with the cut boxes first array cutBoxParms{{1.05 * (spm.vecRMax[indx] - spm.vecRMin[indx]) * 0.5, 0.5 * spm.cutThick, - fabs(spm.vecZPts.back() - spm.vecZPts.front()) * 0.5 + 1_mm}}; + fabs(spm.vecZPts.back() - spm.vecZPts.front()) * 0.5 + 1.0 * dd4hep::mm}}; Solid spmCutBox = Box(spm.cutName, cutBoxParms[0], cutBoxParms[1], cutBoxParms[2]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << spm.cutName << " Box " << cms::convert2mm(cutBoxParms[0]) << ":" + << cms::convert2mm(cutBoxParms[1]) << ":" << cms::convert2mm(cutBoxParms[2]); + +#endif Volume spmCutLog = Volume(spm.cutName, spmCutBox, ns.material(spm.mat)); // Supermodule side platess array sideParms{{0.5 * spm.sideHigh, 0.5 * spm.sideThick, 0.5 * fabs(spm.vecZPts[1] - spm.vecZPts[0])}}; - Solid sideSolid = Box(sideParms[0], sideParms[1], sideParms[2]); + Solid sideSolid = Box(spm.sideName, sideParms[0], sideParms[1], sideParms[2]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << spm.sideName << " Box " << cms::convert2mm(sideParms[0]) << ":" + << cms::convert2mm(sideParms[1]) << ":" << cms::convert2mm(sideParms[2]); +#endif Volume sideLog = Volume(spm.sideName, sideSolid, ns.material(spm.sideMat)); Solid temp1; @@ -951,9 +973,21 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext if (1 == icopy) { alltrot1 = alltrot; temp1 = SubtractionSolid(spm.name + "_T1", ddspm, spmCutBox, alltrot); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << (spm.name + "_T1") << " Subtraction " << ddspm.name() << ":" << spmCutBox.name() + << " at (" << cms::convert2mm(alltrot.Translation().Vect().x()) << "," + << cms::convert2mm(alltrot.Translation().Vect().y()) << "," + << cms::convert2mm(alltrot.Translation().Vect().z()) << ")"; +#endif } else { alltrot2 = alltrot; temp2 = SubtractionSolid(spm.name, temp1, spmCutBox, alltrot); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << spm.name << " Subtraction " << temp1.name() << ":" << spmCutBox.name() << " at (" + << cms::convert2mm(alltrot.Translation().Vect().x()) << "," + << cms::convert2mm(alltrot.Translation().Vect().y()) << "," + << cms::convert2mm(alltrot.Translation().Vect().z()) << ")"; +#endif } const Tl3D trSide(tvec[0], tvec[1] + (1 == icopy ? 1. : -1.) * (cutBoxParms[1] + sideParms[1]) + @@ -972,20 +1006,30 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext if (0 != spm.cutShow) { spmLog.placeVolume(spmCutLog, 1, alltrot1); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << spmCutLog.name() << ":1 positioned in " << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << spmCutLog.name() << ":1 positioned in " << spmLog.name() << " at (" + << cms::convert2mm(alltrot1.Translation().Vect().x()) << "," + << cms::convert2mm(alltrot1.Translation().Vect().y()) << "," + << cms::convert2mm(alltrot1.Translation().Vect().z()) << ") with rotation"; #endif spmLog.placeVolume(spmCutLog, 1, alltrot2); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << spmCutLog.name() << ":1 positioned in " << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << spmCutLog.name() << ":1 positioned in " << spmLog.name() << " at (" + << cms::convert2mm(alltrot2.Translation().Vect().x()) << "," + << cms::convert2mm(alltrot2.Translation().Vect().y()) << "," + << cms::convert2mm(alltrot2.Translation().Vect().z()) << ") with rotation"; #endif } spmLog.placeVolume(sideLog, 1, Transform3D(ns.rotation(spm.sideName + std::to_string(1)), sideddtra1)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << sideLog.name() << ":1 positioned in " << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << sideLog.name() << ":1 positioned in " << spmLog.name() << " at (" + << cms::convert2mm(sideddtra1.x()) << "," << cms::convert2mm(sideddtra1.y()) << "," + << cms::convert2mm(sideddtra1.z()) << ") with rotation"; #endif spmLog.placeVolume(sideLog, 2, Transform3D(ns.rotation(spm.sideName + std::to_string(2)), sideddtra2)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << sideLog.name() << ":2 positioned in " << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << sideLog.name() << ":2 positioned in " << spmLog.name() << " at (" + << cms::convert2mm(sideddtra2.x()) << "," << cms::convert2mm(sideddtra2.y()) << "," + << cms::convert2mm(sideddtra2.z()) << ") with rotation"; #endif const double dphi(360._deg / (1. * spm.nPerHalf)); @@ -1018,8 +1062,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Position myTran(both.getTranslation().x(), both.getTranslation().y(), both.getTranslation().z()); barVolume.placeVolume(spmLog, iphi + 1, Transform3D(rota, myTran)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << DDSplit(spmLog.name()).first << ":" << (iphi + 1) << " positioned in " - << barVolume.name(); + edm::LogVerbatim("EBGeomX") << spmLog.name() << ":" << (iphi + 1) << " positioned in " << barVolume.name() + << " at (" << cms::convert2mm(myTran.x()) << "," << cms::convert2mm(myTran.y()) + << "," << cms::convert2mm(myTran.z()) << ") with rotation"; #endif } } @@ -1038,11 +1083,16 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ilyLengthHalf, // dz ily.phiLow, // startPhi ily.phiLow + ily.delPhi); // startPhi + deltaPhi +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << ily.name << " Tubs " << cms::convert2mm(ilyLengthHalf) << ":" + << cms::convert2mm(ilyRMin) << ":" << cms::convert2mm(ilyRMin + ilyThick) << ":" + << convertRadToDeg(ily.phiLow) << ":" << convertRadToDeg(ily.delPhi); +#endif Volume ilyLog = Volume(ily.name, ilySolid, ns.material(spm.mat)); spmLog.placeVolume(ilyLog, copyOne, Position(0, 0, ilyLengthHalf)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << ilyLog.name() << ":" << copyOne << " positioned in " - << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << ilyLog.name() << ":" << copyOne << " positioned in " << spmLog.name() << " at (0,0," + << cms::convert2mm(ilyLengthHalf) << ") with no rotation"; #endif Volume ilyPipeLog[200]; if (0 != ily.pipeHere) { @@ -1055,6 +1105,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ily.vecIlyPipeLengthHalf[iPipeType], // dz 0_deg, // startPhi 360_deg); // startPhi + deltaPhi +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pName << " Tubs " << cms::convert2mm(ily.vecIlyPipeLengthHalf[iPipeType]) + << ":0:" << cms::convert2mm(ily.pipeODHalf) << ":0:360"; +#endif ilyPipeLog[iPipeType] = Volume(pName, ilyPipeSolid, ns.material(ily.pipeMat)); string pWaName(ily.pipeName + "Wa_" + std::to_string(iPipeType + 1)); @@ -1064,39 +1118,69 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ily.vecIlyPipeLengthHalf[iPipeType], // dz 0_deg, // startPhi 360_deg); // startPhi + deltaPhi +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pWaName << " Tubs " << cms::convert2mm(ily.vecIlyPipeLengthHalf[iPipeType]) + << ":0:" << cms::convert2mm(0.5 * ily.pipeID) << ":0:360"; +#endif Volume ilyPipeWaLog = Volume(pWaName, ilyPipeWaSolid, ns.material(backPipe.waterMat)); ilyPipeLog[iPipeType].placeVolume(ilyPipeWaLog, copyOne); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << ilyPipeWaLog.name() << ":" << copyOne << " positioned in " - << ilyPipeLog[iPipeType].name(); + edm::LogVerbatim("EBGeomX") << ilyPipeWaLog.name() << ":" << copyOne << " positioned in " + << ilyPipeLog[iPipeType].name() << " at (0,0,0) with no rotation"; #endif } } - Solid ilyPTMSolid = Box(ily.pTMHeightHalf, ily.pTMWidthHalf, ily.pTMLengthHalf); + Solid ilyPTMSolid = Box(ily.pTMName, ily.pTMHeightHalf, ily.pTMWidthHalf, ily.pTMLengthHalf); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << ily.pTMName << " Box " << cms::convert2mm(ily.pTMHeightHalf) << ":" + << cms::convert2mm(ily.pTMWidthHalf) << ":" << cms::convert2mm(ily.pTMLengthHalf); +#endif Volume ilyPTMLog = Volume(ily.pTMName, ilyPTMSolid, ns.material(ily.pTMMat)); - Solid ilyFanOutSolid = Box(ily.fanOutHeightHalf, ily.fanOutWidthHalf, ily.fanOutLengthHalf); + Solid ilyFanOutSolid = Box(ily.fanOutName, ily.fanOutHeightHalf, ily.fanOutWidthHalf, ily.fanOutLengthHalf); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << ily.fanOutName << " Box " << cms::convert2mm(ily.fanOutHeightHalf) << ":" + << cms::convert2mm(ily.fanOutWidthHalf) << ":" << cms::convert2mm(ily.fanOutLengthHalf); +#endif Volume ilyFanOutLog = Volume(ily.fanOutName, ilyFanOutSolid, ns.material(ily.fanOutMat)); - Solid ilyFEMSolid = Box(ily.fEMHeightHalf, ily.fEMWidthHalf, ily.fEMLengthHalf); + Solid ilyFEMSolid = Box(ily.fEMName, ily.fEMHeightHalf, ily.fEMWidthHalf, ily.fEMLengthHalf); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << ily.fEMName << " Box " << cms::convert2mm(ily.fEMHeightHalf) << ":" + << cms::convert2mm(ily.fEMWidthHalf) << ":" << cms::convert2mm(ily.fEMLengthHalf); +#endif Volume ilyFEMLog = Volume(ily.fEMName, ilyFEMSolid, ns.material(ily.fEMMat)); - Solid ilyDiffSolid = Box(ily.fanOutHeightHalf, ily.fanOutWidthHalf, ily.diffLengthHalf); + Solid ilyDiffSolid = Box(ily.diffName, ily.fanOutHeightHalf, ily.fanOutWidthHalf, ily.diffLengthHalf); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << ily.diffName << " Box " << cms::convert2mm(ily.fanOutHeightHalf) << ":" + << cms::convert2mm(ily.fanOutWidthHalf) << ":" << cms::convert2mm(ily.diffLengthHalf); +#endif Volume ilyDiffLog = Volume(ily.diffName, ilyDiffSolid, ns.material(ily.diffMat)); - Solid ilyBndlSolid = Box(ily.fanOutHeightHalf, ily.fanOutWidthHalf, ily.bndlLengthHalf); + Solid ilyBndlSolid = Box(ily.bndlName, ily.fanOutHeightHalf, ily.fanOutWidthHalf, ily.bndlLengthHalf); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << ily.bndlName << " Box " << cms::convert2mm(ily.fanOutHeightHalf) << ":" + << cms::convert2mm(ily.fanOutWidthHalf) << ":" << cms::convert2mm(ily.bndlLengthHalf); +#endif Volume ilyBndlLog = Volume(ily.bndlName, ilyBndlSolid, ns.material(ily.bndlMat)); ilyFanOutLog.placeVolume( - ilyDiffLog, copyOne, Position(0_mm, 0_mm, -ily.fanOutLengthHalf + ily.diffLengthHalf + ily.diffOff)); + ilyDiffLog, copyOne, Position(0, 0, -ily.fanOutLengthHalf + ily.diffLengthHalf + ily.diffOff)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << ilyDiffLog.name() << ":" << copyOne << " positioned in " << ilyFanOutLog.name(); + edm::LogVerbatim("EBGeomX") << ilyDiffLog.name() << ":" << copyOne << " positioned in " << ilyFanOutLog.name() + << " at (0,0," + << cms::convert2mm(-ily.fanOutLengthHalf + ily.diffLengthHalf + ily.diffOff) + << ") with no rotation"; #endif ilyFanOutLog.placeVolume( - ilyBndlLog, copyOne, Position(0_mm, 0_mm, -ily.fanOutLengthHalf + ily.bndlLengthHalf + ily.bndlOff)); + ilyBndlLog, copyOne, Position(0, 0, -ily.fanOutLengthHalf + ily.bndlLengthHalf + ily.bndlOff)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << ilyBndlLog.name() << ":" << copyOne << " positioned in " << ilyFanOutLog.name(); + edm::LogVerbatim("EBGeomX") << ilyBndlLog.name() << ":" << copyOne << " positioned in " << ilyFanOutLog.name() + << " at (0,0," + << cms::convert2mm(-ily.fanOutLengthHalf + ily.bndlLengthHalf + ily.bndlOff) + << ") with no rotation"; #endif Volume xilyLog; @@ -1104,19 +1188,25 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const double ilyRMax(ilyRMin + ily.vecIlyThick[iily]); string xilyName(ily.name + std::to_string(iily)); Solid xilySolid = Tube(xilyName, ilyRMin, ilyRMax, ilyLengthHalf, ily.phiLow, ily.phiLow + ily.delPhi); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << xilyName << " Tubs " << cms::convert2mm(ilyLengthHalf) << ":" + << cms::convert2mm(ilyRMin) << ":" << cms::convert2mm(ilyRMax) << ":" + << convertRadToDeg(ily.phiLow) << ":" << convertRadToDeg(ily.delPhi); +#endif xilyLog = ns.addVolume(Volume(xilyName, xilySolid, ns.material(ily.vecIlyMat[iily]))); if (0 != ily.here) { ilyLog.placeVolume(xilyLog, copyOne); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << xilyLog.name() << ":" << copyOne << " positioned in " << ilyLog.name(); + edm::LogVerbatim("EBGeomX") << xilyLog.name() << ":" << copyOne << " positioned in " << ilyLog.name() + << " at (0,0,0) with no rotation"; #endif unsigned int copyNum[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - if (10_mm < ily.vecIlyThick[iily] && ily.vecIlyThick.size() != (iily + 1) && 0 != ily.pipeHere) { + if (10 * dd4hep::mm < ily.vecIlyThick[iily] && ily.vecIlyThick.size() != (iily + 1) && 0 != ily.pipeHere) { if (0 != ily.pTMHere) { unsigned int ptmCopy(0); for (unsigned int ilyPTM(0); ilyPTM != ily.vecIlyPTMZ.size(); ++ilyPTM) { - const double radius(ilyRMax - 1_mm - ily.pTMHeightHalf); + const double radius(ilyRMax - 1 * dd4hep::mm - ily.pTMHeightHalf); const double phi(ily.vecIlyPTMPhi[ilyPTM]); const double yy(radius * sin(phi)); const double xx(radius * cos(phi)); @@ -1126,14 +1216,17 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ptmCopy, Transform3D(RotationZ(phi), Position(xx, yy, ily.vecIlyPTMZ[ilyPTM] - ilyLengthHalf))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << ilyPTMLog.name() << ":" << ptmCopy << " positioned in " << xilyLog.name(); + edm::LogVerbatim("EBGeomX") + << ilyPTMLog.name() << ":" << ptmCopy << " positioned in " << xilyLog.name() << " at (" + << cms::convert2mm(xx) << "," << cms::convert2mm(yy) << "," + << cms::convert2mm(ily.vecIlyPTMZ[ilyPTM] - ilyLengthHalf) << ") with rotation"; #endif } } if (0 != ily.fanOutHere) { unsigned int fanOutCopy(0); for (unsigned int ilyFO(0); ilyFO != ily.vecIlyFanOutZ.size(); ++ilyFO) { - const double radius(ilyRMax - 1_mm - ily.fanOutHeightHalf); + const double radius(ilyRMax - 1 * dd4hep::mm - ily.fanOutHeightHalf); const double phi(ily.vecIlyFanOutPhi[ilyFO]); const double yy(radius * sin(phi)); const double xx(radius * cos(phi)); @@ -1143,13 +1236,15 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Transform3D(RotationZ(phi) * RotationY(180_deg), Position(xx, yy, ily.vecIlyFanOutZ[ilyFO] - ilyLengthHalf))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") - << ilyFanOutLog.name() << ":" << fanOutCopy << " positioned in " << xilyLog.name(); + edm::LogVerbatim("EBGeomX") + << ilyFanOutLog.name() << ":" << fanOutCopy << " positioned in " << xilyLog.name() << " at (" + << cms::convert2mm(xx) << "," << cms::convert2mm(yy) << "," + << cms::convert2mm(ily.vecIlyFanOutZ[ilyFO] - ilyLengthHalf) << ") with rotation"; #endif } unsigned int femCopy(0); for (unsigned int ilyFEM(0); ilyFEM != ily.vecIlyFEMZ.size(); ++ilyFEM) { - const double radius(ilyRMax - 1_mm - ily.fEMHeightHalf); + const double radius(ilyRMax - 1 * dd4hep::mm - ily.fEMHeightHalf); const double phi(ily.vecIlyFEMPhi[ilyFEM]); const double yy(radius * sin(phi)); const double xx(radius * cos(phi)); @@ -1159,7 +1254,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext femCopy, Transform3D(RotationZ(phi), Position(xx, yy, ily.vecIlyFEMZ[ilyFEM] - ilyLengthHalf))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << ilyFEMLog.name() << ":" << femCopy << " positioned in " << xilyLog.name(); + edm::LogVerbatim("EBGeomX") + << ilyFEMLog.name() << ":" << femCopy << " positioned in " << xilyLog.name() << " at (" + << cms::convert2mm(xx) << "," << cms::convert2mm(yy) << "," + << cms::convert2mm(ily.vecIlyFEMZ[ilyFEM] - ilyLengthHalf) << ") with rotation"; #endif } } @@ -1168,7 +1266,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const double zz(-ilyLengthHalf + ily.vecIlyPipeZ[iPipe] + (9 > type ? ily.vecIlyPipeLengthHalf[type] : 0)); for (unsigned int ly(0); ly != 2; ++ly) { - const double radius(0 == ly ? ilyRMin + ily.pipeODHalf + 1_mm : ilyRMax - ily.pipeODHalf - 1_mm); + const double radius(0 == ly ? ilyRMin + ily.pipeODHalf + 1 * dd4hep::mm + : ilyRMax - ily.pipeODHalf - 1 * dd4hep::mm); const double phi(ily.vecIlyPipePhi[iPipe]); const double yy(radius * sin(phi)); const double xx(radius * cos(phi)); @@ -1176,8 +1275,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext if (9 > type) { xilyLog.placeVolume(ilyPipeLog[type], copyNum[type], Position(xx, yy, zz)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") - << ilyPipeLog[type].name() << ":" << copyNum[type] << " positioned in " << xilyLog.name(); + edm::LogVerbatim("EBGeomX") + << ilyPipeLog[type].name() << ":" << copyNum[type] << " positioned in " << xilyLog.name() << " at (" + << cms::convert2mm(xx) << "," << cms::convert2mm(yy) << "," << cms::convert2mm(zz) + << ") with no rotation"; #endif } else { xilyLog.placeVolume( @@ -1186,8 +1287,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Transform3D(Rotation3D(ROOT::Math::AxisAngle(ROOT::Math::AxisAngle::XYZVector(xx, yy, 0), 90_deg)), Position(xx, yy, zz))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") - << ilyPipeLog[type].name() << ":" << copyNum[type] << " positioned in " << xilyLog.name(); + edm::LogVerbatim("EBGeomX") << ilyPipeLog[type].name() << ":" << copyNum[type] << " positioned in " + << xilyLog.name() << " at (" << cms::convert2mm(xx) << "," + << cms::convert2mm(yy) << "," << cms::convert2mm(zz) << ") with rotation"; #endif } } @@ -1204,16 +1306,22 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext std::vector czz; czz.emplace_back(spm.vecZPts[1]); cri.emplace_back(spm.vecRMin[0]); - cro.emplace_back(spm.vecRMin[0] + 25_mm); + cro.emplace_back(spm.vecRMin[0] + 25 * dd4hep::mm); czz.emplace_back(spm.vecZPts[2]); cri.emplace_back(spm.vecRMin[2]); - cro.emplace_back(spm.vecRMin[2] + 10_mm); + cro.emplace_back(spm.vecRMin[2] + 10 * dd4hep::mm); Solid clyrSolid = Polycone(clyrName, -9.5_deg, 19_deg, cri, cro, czz); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << clyrName << " PolyCone from -9.5 to 9.5 with " << czz.size() << " points"; + for (unsigned int k = 0; k < czz.size(); ++k) + edm::LogVerbatim("EBGeom") << "[" << k << "] " << cms::convert2mm(czz[k]) << ":" << cms::convert2mm(cri[k]) << ":" + << cms::convert2mm(cro[k]); +#endif Volume clyrLog = Volume(clyrName, clyrSolid, ns.material(ily.vecIlyMat[4])); spmLog.placeVolume(clyrLog, copyOne); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << clyrLog.name() << ":" << copyOne << " positioned in " - << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << clyrLog.name() << ":" << copyOne << " positioned in " << spmLog.name() + << " at (0,0,0) with no rotation"; #endif // Begin Alveolar Wedge parent ------------------------------------------------------ //---------------- @@ -1276,12 +1384,16 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const EcalTrap::VertexList vHAW(trapHAWR.vertexList()); const EcalTrap::VertexList vFAW(trapFAW.vertexList()); - const double hawBoxClr(1_mm); + const double hawBoxClr(1 * dd4hep::mm); // HAW cut box to cut off back end of wedge const string hawCutName(alvWedge.hawRName + "CUTBOX"); array hawBoxParms{{0.5 * b_hawR + hawBoxClr, 0.5 * alvWedge.hawRCutY, 0.5 * alvWedge.hawRCutZ}}; Solid hawCutBox = Box(hawCutName, hawBoxParms[0], hawBoxParms[1], hawBoxParms[2]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << hawCutName << " Box " << cms::convert2mm(hawBoxParms[0]) << ":" + << cms::convert2mm(hawBoxParms[1]) << ":" << cms::convert2mm(hawBoxParms[2]); +#endif const Pt3D b1(hawBoxParms[0], hawBoxParms[1], hawBoxParms[2]); const Pt3D b2(-hawBoxParms[0], hawBoxParms[1], hawBoxParms[2]); @@ -1303,12 +1415,22 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Position(hawCutForm.getTranslation().x(), hawCutForm.getTranslation().y(), hawCutForm.getTranslation().z()))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << alvWedge.hawRName << " Subtraction " << hawRSolid1.name() << ":" << hawCutBox.name() + << " at (" << cms::convert2mm(hawCutForm.getTranslation().x()) << "," + << cms::convert2mm(hawCutForm.getTranslation().y()) << "," + << cms::convert2mm(hawCutForm.getTranslation().z()) << ")"; +#endif Volume hawRLog = Volume(alvWedge.hawRName, hawRSolid, ns.material(spm.mat)); // FAW cut box to cut off back end of wedge const string fawCutName(alvWedge.fawName + "CUTBOX"); const array fawBoxParms{{2 * hawBoxParms[0], hawBoxParms[1], hawBoxParms[2]}}; Solid fawCutBox = Box(fawCutName, fawBoxParms[0], fawBoxParms[1], fawBoxParms[2]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << fawCutName << " Box " << cms::convert2mm(fawBoxParms[0]) << ":" + << cms::convert2mm(fawBoxParms[1]) << ":" << cms::convert2mm(fawBoxParms[2]); +#endif const Pt3D bb1(fawBoxParms[0], fawBoxParms[1], fawBoxParms[2]); const Pt3D bb2(-fawBoxParms[0], fawBoxParms[1], fawBoxParms[2]); @@ -1317,16 +1439,22 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const Tf3D fawCutForm(bb1, bb2, bb3, - vFAW[2] + Pt3D(2 * hawBoxClr, -5_mm, 0), - vFAW[1] + Pt3D(-2 * hawBoxClr, -5_mm, 0), + vFAW[2] + Pt3D(2 * hawBoxClr, -5 * dd4hep::mm, 0), + vFAW[1] + Pt3D(-2 * hawBoxClr, -5 * dd4hep::mm, 0), Pt3D(vFAW[1].x() - 2 * hawBoxClr, vFAW[1].y() - trapFAW.h(), vFAW[1].z() - zDel)); - // FIXME: EFAW extruded by: EFAW/EHAWR_2 ovlp=0.209316 cm + Solid fawSolid = SubtractionSolid(fawSolid1, fawCutBox, Transform3D(myrot(ns, fawCutName + "R", fawCutForm.getRotation()), Position(fawCutForm.getTranslation().x(), fawCutForm.getTranslation().y(), fawCutForm.getTranslation().z()))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << alvWedge.fawName << " Subtraction " << fawSolid1.name() << ":" << fawCutBox.name() + << " at (" << cms::convert2mm(fawCutForm.getTranslation().x()) << "," + << cms::convert2mm(fawCutForm.getTranslation().y()) << "," + << cms::convert2mm(fawCutForm.getTranslation().z()) << ")"; +#endif Volume fawLog = Volume(alvWedge.fawName, fawSolid, ns.material(spm.mat)); const Tf3D hawRform(vHAW[3], @@ -1343,19 +1471,23 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext myrot(ns, alvWedge.hawRName + "R", hawRform.getRotation()), Position(hawRform.getTranslation().x(), hawRform.getTranslation().y(), hawRform.getTranslation().z()))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << hawRLog.name() << ":" << copyOne << " positioned in " << fawLog.name(); + edm::LogVerbatim("EBGeomX") << hawRLog.name() << ":" << copyOne << " positioned in " << fawLog.name() << " at (" + << cms::convert2mm(hawRform.getTranslation().x()) << "," + << cms::convert2mm(hawRform.getTranslation().y()) << "," + << cms::convert2mm(hawRform.getTranslation().z()) << ") with rotation"; #endif - // FIXME: extrusion when using placeVolume, - // use TGeoCombiTrans instead - fawLog->AddNode( //.placeVolume( + fawLog.placeVolume( hawRLog, copyTwo, - createPlacement( - Rotation3D(1., 0., 0., 0., 1., 0., 0., 0., -1.) * RotationY(-M_PI), // rotate about Y after refl thru Z + Transform3D( + Rotation3D(1., 0., 0., 0., 1., 0., 0., 0., -1.) * RotationY(M_PI), // rotate about Y after refl thru Z Position(-hawRform.getTranslation().x(), -hawRform.getTranslation().y(), -hawRform.getTranslation().z()))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << hawRLog.name() << ":" << copyTwo << " positioned in " << fawLog.name(); + edm::LogVerbatim("EBGeomX") << hawRLog.name() << ":" << copyTwo << " positioned in " << fawLog.name() << " at (" + << cms::convert2mm(-hawRform.getTranslation().x()) << "," + << cms::convert2mm(-hawRform.getTranslation().y()) << "," + << cms::convert2mm(-hawRform.getTranslation().z()) << ") with rotation"; #endif for (unsigned int iPhi(1); iPhi <= alvWedge.nFawPerSupm; ++iPhi) { const double rPhi(alvWedge.fawPhiOff + (iPhi - 0.5) * alvWedge.fawDelPhi); @@ -1371,8 +1503,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext myrot(ns, alvWedge.fawName + "_Rot" + std::to_string(iPhi), fawform.getRotation()), Position(fawform.getTranslation().x(), fawform.getTranslation().y(), fawform.getTranslation().z()))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << fawLog.name() << ":" << iPhi << " positioned in " - << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << fawLog.name() << ":" << iPhi << " positioned in " << spmLog.name() << " at (" + << cms::convert2mm(fawform.getTranslation().x()) << "," + << cms::convert2mm(fawform.getTranslation().y()) << "," + << cms::convert2mm(fawform.getTranslation().z()) << ") with rotation"; #endif } } @@ -1388,7 +1522,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 0.5 * b_hawR, // tl2, b/2 0.5 * h_Grid, // h1, H/2 0.5 * h_Grid, // h2, h/2 - 0.5 * (L_hawR - 8_cm), // dz, L/2 + 0.5 * (L_hawR - 8 * dd4hep::cm), // dz, L/2 90_deg, // alfa1 0, // x15 H_hawR - h_hawR // y15 @@ -1414,7 +1548,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext myrot(ns, grid.name + "R", gridForm.getRotation()), Position(gridForm.getTranslation().x(), gridForm.getTranslation().y(), gridForm.getTranslation().z()))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << gridLog.name() << ":" << copyOne << " positioned in " << hawRLog.name(); + edm::LogVerbatim("EBGeomX") << gridLog.name() << ":" << copyOne << " positioned in " << hawRLog.name() << " at (" + << cms::convert2mm(gridForm.getTranslation().x()) << "," + << cms::convert2mm(gridForm.getTranslation().y()) << "," + << cms::convert2mm(gridForm.getTranslation().z()) << ") with rotation"; #endif } // End Grid + Tablet insertion @@ -1445,8 +1582,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext // theta is angle in yz plane between z axis & leading edge of crystal double theta(90_deg); - double zee(0_mm); - double side(0_mm); + double zee(0); + double side(0); double zeta(0_deg); // increment in theta for last crystal for (unsigned int cryType(1); cryType <= alv.nCryTypes; ++cryType) { @@ -1481,41 +1618,73 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext //++++++++++++++++++++++++++++++++++ APD ++++++++++++++++++++++++++++++++++ const unsigned int copyCap(1); const string capDDName(cap.name + sType); - Solid capSolid = Box(cap.xSizeHalf, cap.ySizeHalf, cap.thickHalf); + Solid capSolid = Box(capDDName, cap.xSizeHalf, cap.ySizeHalf, cap.thickHalf); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << capDDName << " Box " << cms::convert2mm(cap.xSizeHalf) << ":" + << cms::convert2mm(cap.ySizeHalf) << ":" << cms::convert2mm(cap.thickHalf); +#endif Volume capLog = Volume(capDDName, capSolid, ns.material(cap.mat)); const string sglDDName(apd.sglName + sType); - Solid sglSolid = Box(cap.xSizeHalf, cap.ySizeHalf, apd.sglThick / 2.); + Solid sglSolid = Box(sglDDName, cap.xSizeHalf, cap.ySizeHalf, apd.sglThick / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << sglDDName << " Box " << cms::convert2mm(cap.xSizeHalf) << ":" + << cms::convert2mm(cap.ySizeHalf) << ":" << cms::convert2mm(apd.sglThick / 2.); +#endif Volume sglLog = Volume(sglDDName, sglSolid, ns.material(apd.sglMat)); const unsigned int copySGL(1); const string cerDDName(cer.name + sType); - Solid cerSolid = Box(cer.xSizeHalf, cer.ySizeHalf, cer.thickHalf); + Solid cerSolid = Box(cerDDName, cer.xSizeHalf, cer.ySizeHalf, cer.thickHalf); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << cerDDName << " Box " << cms::convert2mm(cer.xSizeHalf) << ":" + << cms::convert2mm(cer.ySizeHalf) << ":" << cms::convert2mm(cer.thickHalf); +#endif Volume cerLog = Volume(cerDDName, cerSolid, ns.material(cer.mat)); unsigned int copyCER(0); const string bsiDDName(bSi.name + sType); - Solid bsiSolid = Box(bSi.xSizeHalf, bSi.ySizeHalf, bSi.thickHalf); + Solid bsiSolid = Box(bsiDDName, bSi.xSizeHalf, bSi.ySizeHalf, bSi.thickHalf); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << bsiDDName << " Box " << cms::convert2mm(bSi.xSizeHalf) << ":" + << cms::convert2mm(bSi.ySizeHalf) << ":" << cms::convert2mm(bSi.thickHalf); +#endif Volume bsiLog = Volume(bsiDDName, bsiSolid, ns.material(bSi.mat)); const unsigned int copyBSi(1); const string atjDDName(apd.atjName + sType); Solid atjSolid = Box(atjDDName, 0.5 * apd.side, 0.5 * apd.side, apd.atjThickHalf); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << atjDDName << " Box " << cms::convert2mm(0.5 * apd.side) << ":" + << cms::convert2mm(0.5 * apd.side) << ":" << cms::convert2mm(apd.atjThickHalf); +#endif Volume atjLog = Volume(atjDDName, atjSolid, ns.material(apd.atjMat)); const unsigned int copyATJ(1); const string aglDDName(apd.aglName + sType); - Solid aglSolid = Box(bSi.xSizeHalf, bSi.ySizeHalf, 0.5 * apd.aglThick); + Solid aglSolid = Box(aglDDName, bSi.xSizeHalf, bSi.ySizeHalf, 0.5 * apd.aglThick); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << aglDDName << " Box " << cms::convert2mm(bSi.xSizeHalf) << ":" + << cms::convert2mm(bSi.ySizeHalf) << ":" << cms::convert2mm(0.5 * apd.aglThick); +#endif Volume aglLog = Volume(aglDDName, aglSolid, ns.material(apd.aglMat)); const unsigned int copyAGL(1); const string andDDName(apd.andName + sType); - Solid andSolid = Box(0.5 * apd.side, 0.5 * apd.side, 0.5 * apd.andThick); + Solid andSolid = Box(andDDName, 0.5 * apd.side, 0.5 * apd.side, 0.5 * apd.andThick); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << andDDName << " Box " << cms::convert2mm(0.5 * apd.side) << ":" + << cms::convert2mm(0.5 * apd.side) << ":" << cms::convert2mm(0.5 * apd.andThick); +#endif Volume andLog = Volume(andDDName, andSolid, ns.material(apd.andMat)); const unsigned int copyAND(1); const string apdDDName(apd.name + sType); Solid apdSolid = Box(apdDDName, 0.5 * apd.side, 0.5 * apd.side, 0.5 * apd.thick); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << apdDDName << " Box " << cms::convert2mm(0.5 * apd.side) << ":" + << cms::convert2mm(0.5 * apd.side) << ":" << cms::convert2mm(0.5 * apd.thick); +#endif Volume apdLog = Volume(apdDDName, apdSolid, ns.material(apd.mat)); const unsigned int copyAPD(1); @@ -1558,7 +1727,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 0.5 * (trapClr.h() + 2. * sWrap - fWrap * sindelta), // h2, h/2 0.5 * (trapClr.L() + fWrap + rWrap), // dz, L/2 alfWrap, //double aAngleAD , // alfa1 - aNom - ANom - (cryType > 9 ? 0 : 0.020_mm), + aNom - ANom - (cryType > 9 ? 0 : 0.020 * dd4hep::mm), hNom - HNom //double aCoord15Y // y15 ); @@ -1577,7 +1746,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 0.5 * (trapWrap.h() + 2 * sWall - fWall * sindelta), // h/2 0.5 * (trapWrap.L() + fWall + rWall), // L/2 alfWall, // alfa1 - aNom - ANom - (cryType < 10 ? 0.150_mm : 0.100_mm), + aNom - ANom - (cryType < 10 ? 0.150 * dd4hep::mm : 0.100 * dd4hep::mm), hNom - HNom // y15 ); @@ -1587,38 +1756,54 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext // Now for placement of cry within clr const Vec3 cryToClr(0., 0., 0.5 * (rClr - fClr)); - clrLog.placeVolume(cryLog, copyOne, Position(0_mm, 0_mm, 0.5 * (rClr - fClr))); + clrLog.placeVolume(cryLog, copyOne, Position(0, 0, 0.5 * (rClr - fClr))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << cryLog.name() << ":" << copyOne << " positioned in " << clrLog.name(); + edm::LogVerbatim("EBGeomX") << cryLog.name() << ":" << copyOne << " positioned in " << clrLog.name() + << " at (0,0," << cms::convert2mm(0.5 * (rClr - fClr)) << ") with no rotation"; #endif if (0 != cap.here) { - bsiLog.placeVolume(aglLog, copyAGL, Position(0_mm, 0_mm, -0.5 * apd.aglThick + bSi.thickHalf)); + bsiLog.placeVolume(aglLog, copyAGL, Position(0, 0, -0.5 * apd.aglThick + bSi.thickHalf)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << aglLog.name() << ":" << copyAGL << " positioned in " << bsiLog.name(); + edm::LogVerbatim("EBGeomX") << aglLog.name() << ":" << copyAGL << " positioned in " << bsiLog.name() + << " at (0,0," << cms::convert2mm(-0.5 * apd.aglThick + bSi.thickHalf) + << ") with no rotation"; #endif - bsiLog.placeVolume(andLog, copyAND, Position(0_mm, 0_mm, -0.5 * apd.andThick - apd.aglThick + bSi.thickHalf)); + bsiLog.placeVolume(andLog, copyAND, Position(0, 0, -0.5 * apd.andThick - apd.aglThick + bSi.thickHalf)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << andLog.name() << ":" << copyAND << " positioned in " << bsiLog.name(); + edm::LogVerbatim("EBGeomX") << andLog.name() << ":" << copyAND << " positioned in " << bsiLog.name() + << " at (0,0," + << cms::convert2mm(-0.5 * apd.andThick - apd.aglThick + bSi.thickHalf) + << ") with no rotation"; #endif bsiLog.placeVolume( - apdLog, copyAPD, Position(0_mm, 0_mm, -0.5 * apd.thick - apd.andThick - apd.aglThick + bSi.thickHalf)); + apdLog, copyAPD, Position(0, 0, -0.5 * apd.thick - apd.andThick - apd.aglThick + bSi.thickHalf)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << apdLog.name() << ":" << copyAPD << " positioned in " << bsiLog.name(); + edm::LogVerbatim("EBGeomX") << apdLog.name() << ":" << copyAPD << " positioned in " << bsiLog.name() + << " at (0,0," + << cms::convert2mm(-0.5 * apd.thick - apd.andThick - apd.aglThick + bSi.thickHalf) + << ") with no rotation"; #endif - bsiLog.placeVolume( - atjLog, - copyATJ, - Position(0_mm, 0_mm, -apd.atjThickHalf - apd.thick - apd.andThick - apd.aglThick + bSi.thickHalf)); + bsiLog.placeVolume(atjLog, + copyATJ, + Position(0, 0, -apd.atjThickHalf - apd.thick - apd.andThick - apd.aglThick + bSi.thickHalf)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << atjLog.name() << ":" << copyATJ << " positioned in " << bsiLog.name(); + edm::LogVerbatim("EBGeomX") << atjLog.name() << ":" << copyATJ << " positioned in " << bsiLog.name() + << " at (0,0," + << cms::convert2mm(-apd.atjThickHalf - apd.thick - apd.andThick - apd.aglThick + + bSi.thickHalf) + << ") with no rotation"; #endif - cerLog.placeVolume(bsiLog, copyBSi, Position(0_mm, 0_mm, -bSi.thickHalf + cer.thickHalf)); + cerLog.placeVolume(bsiLog, copyBSi, Position(0, 0, -bSi.thickHalf + cer.thickHalf)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << bsiLog.name() << ":" << copyBSi << " positioned in " << cerLog.name(); + edm::LogVerbatim("EBGeomX") << bsiLog.name() << ":" << copyBSi << " positioned in " << cerLog.name() + << " at (0,0," << cms::convert2mm(-bSi.thickHalf + cer.thickHalf) + << ") with no rotation"; #endif - capLog.placeVolume(sglLog, copySGL, Position(0_mm, 0_mm, -0.5 * apd.sglThick + cap.thickHalf)); + capLog.placeVolume(sglLog, copySGL, Position(0, 0, -0.5 * apd.sglThick + cap.thickHalf)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << sglLog.name() << ":" << copySGL << " positioned in " << capLog.name(); + edm::LogVerbatim("EBGeomX") << sglLog.name() << ":" << copySGL << " positioned in " << capLog.name() + << " at (0,0," << cms::convert2mm(-0.5 * apd.sglThick + cap.thickHalf) + << ") with no rotation"; #endif for (unsigned int ijkl(0); ijkl != 2; ++ijkl) { @@ -1628,30 +1813,40 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext trapCry.h1() - apd.z, -apd.sglThick - cer.thickHalf + cap.thickHalf)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << cerLog.name() << ":" << copyCER << " positioned in " << capLog.name(); + edm::LogVerbatim("EBGeomX") << cerLog.name() << ":" << copyCER << " positioned in " << capLog.name() + << " at (" << cms::convert2mm(trapCry.bl1() - (0 == ijkl ? apd.x1 : apd.x2)) + << "," << cms::convert2mm(trapCry.h1() - apd.z) << "," + << cms::convert2mm(-apd.sglThick - cer.thickHalf + cap.thickHalf) + << ") with no rotation"; #endif } - clrLog.placeVolume(capLog, copyCap, Position(0_mm, 0_mm, -trapCry.dz() - cap.thickHalf + 0.5 * (rClr - fClr))); + clrLog.placeVolume(capLog, copyCap, Position(0, 0, -trapCry.dz() - cap.thickHalf + 0.5 * (rClr - fClr))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << capLog.name() << ":" << copyCap << " positioned in " << clrLog.name(); + edm::LogVerbatim("EBGeomX") << capLog.name() << ":" << copyCap << " positioned in " << clrLog.name() + << " at (0,0," + << cms::convert2mm(-trapCry.dz() - cap.thickHalf + 0.5 * (rClr - fClr)) + << ") with no rotation"; #endif } const Vec3 clrToWrap(0, 0, 0.5 * (rWrap - fWrap)); - wrapLog.placeVolume(clrLog, copyOne, Position(0_mm, 0_mm, 0.5 * (rWrap - fWrap))); //SAME as cryToWrap + wrapLog.placeVolume(clrLog, copyOne, Position(0, 0, 0.5 * (rWrap - fWrap))); //SAME as cryToWrap #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << clrLog.name() << ":" << copyOne << " positioned in " << wrapLog.name(); + edm::LogVerbatim("EBGeomX") << clrLog.name() << ":" << copyOne << " positioned in " << wrapLog.name() + << " at (0,0," << cms::convert2mm(0.5 * (rWrap - fWrap)) << ") with no rotation"; #endif // Now for placement of clr within wall - const Vec3 wrapToWall1(0_mm, 0_mm, 0.5 * (rWall - fWall)); - const Vec3 wrapToWall(Vec3((cryType > 9 ? 0_mm : 0.005_mm), 0_mm, 0_mm) + wrapToWall1); + const Vec3 wrapToWall1(0, 0, 0.5 * (rWall - fWall)); + const Vec3 wrapToWall(Vec3((cryType > 9 ? 0 : 0.005 * dd4hep::mm), 0, 0) + wrapToWall1); wallLog.placeVolume( wrapLog, copyOne, - Position(Vec3((cryType > 9 ? 0_mm : 0.005_mm), 0_mm, 0_mm) + wrapToWall1)); //SAME as wrapToWall + Position(Vec3((cryType > 9 ? 0 : 0.005 * dd4hep::mm), 0, 0) + wrapToWall1)); //SAME as wrapToWall #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << wrapLog.name() << ":" << copyOne << " positioned in " << wallLog.name(); + edm::LogVerbatim("EBGeomX") << wrapLog.name() << ":" << copyOne << " positioned in " << wallLog.name() << " at (" + << cms::convert2mm(wrapToWall.x()) << "," << cms::convert2mm(wrapToWall.y()) << "," + << cms::convert2mm(wrapToWall.z()) << ") with no rotation"; #endif const EcalTrap::VertexList vWall(trapWall.vertexList()); @@ -1701,7 +1896,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext webClrLog.placeVolume(webPlLog, copyOne); // place plate inside clearance volume #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << webPlLog.name() << ":" << copyOne << " positioned in " << webClrName; + edm::LogVerbatim("EBGeomX") << webPlLog.name() << ":" << copyOne << " positioned in " << webClrName + << " at (0,0,0) with no rotation"; #endif const EcalTrap::VertexList vWeb(trapWebClr.vertexList()); @@ -1729,7 +1925,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext myrot(ns, webClrName + std::to_string(iWeb), tForm.getRotation()), Position(tForm.getTranslation().x(), tForm.getTranslation().y(), tForm.getTranslation().z()))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << webClrLog.name() << ":" << copyOne << " positioned in " << hawRLog.name(); + edm::LogVerbatim("EBGeomX") << webClrLog.name() << ":" << copyOne << " positioned in " << hawRLog.name() + << " at (" << cms::convert2mm(tForm.getTranslation().x()) << "," + << cms::convert2mm(tForm.getTranslation().y()) << "," + << cms::convert2mm(tForm.getTranslation().z()) << ") with rotation"; #endif } zee += alv.vecGapAlvEta[0]; @@ -1742,7 +1941,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext << ", zee=" << zee; #endif - zee += 0.075_mm + (side * cos(zeta) + trapWall.h() - sidePrime) / sin(theta); + zee += 0.075 * dd4hep::mm + (side * cos(zeta) + trapWall.h() - sidePrime) / sin(theta); // make transform for placing enclosed crystal @@ -1757,7 +1956,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const Tf3D tForm1(trap1, trap2, trap3, wedge1, wedge2, wedge3); - const double xx(0.050_mm); + const double xx(0.050 * dd4hep::mm); const Tf3D tForm(HepGeom::Translate3D(xx, 0, 0) * tForm1); hawRLog.placeVolume( @@ -1766,7 +1965,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Transform3D(myrot(ns, wallDDName + "_" + std::to_string(etaAlv), tForm.getRotation()), Position(tForm.getTranslation().x(), tForm.getTranslation().y(), tForm.getTranslation().z()))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << wallLog.name() << ":" << etaAlv << " positioned in " << hawRLog.name(); + edm::LogVerbatim("EBGeomX") << wallLog.name() << ":" << etaAlv << " positioned in " << hawRLog.name() << " at (" + << cms::convert2mm(tForm.getTranslation().x()) << "," + << cms::convert2mm(tForm.getTranslation().y()) << "," + << cms::convert2mm(tForm.getTranslation().z()) << ") with rotation"; #endif theta -= delta; side = sidePrime; @@ -1812,7 +2014,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext webClrLog.placeVolume(webPlLog, copyOne); // place plate inside clearance volume #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << webPlLog.name() << ":" << copyOne << " positioned in " << webClrName; + edm::LogVerbatim("EBGeomX") << webPlLog.name() << ":" << copyOne << " positioned in " << webClrName + << " at (0,0,0) with no rotation"; #endif const EcalTrap::VertexList vWeb(trapWebClr.vertexList()); @@ -1840,7 +2043,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext myrot(ns, webClrName + std::to_string(iWeb), tForm.getRotation()), Position(tForm.getTranslation().x(), tForm.getTranslation().y(), tForm.getTranslation().z()))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << webClrLog.name() << ":" << copyOne << " positioned in " << hawRLog.name(); + edm::LogVerbatim("EBGeomX") << webClrLog.name() << ":" << copyOne << " positioned in " << hawRLog.name() + << " at (" << cms::convert2mm(tForm.getTranslation().x()) << "," + << cms::convert2mm(tForm.getTranslation().y()) << "," + << cms::convert2mm(tForm.getTranslation().z()) << ") with rotation"; #endif } @@ -1873,29 +2079,43 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const double realBPthick(back.plateThick + back.plate2Thick); array backPlateParms{{0.5 * back.plateWidth, 0.5 * realBPthick, 0.5 * back.plateLength}}; - Solid backPlateSolid = Box(backPlateParms[0], backPlateParms[1], backPlateParms[2]); + Solid backPlateSolid = Box(back.plateName, backPlateParms[0], backPlateParms[1], backPlateParms[2]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << back.plateName << " Box " << cms::convert2mm(backPlateParms[0]) << ":" + << cms::convert2mm(backPlateParms[1]) << ":" << cms::convert2mm(backPlateParms[2]); +#endif Volume backPlateLog = Volume(back.plateName, backPlateSolid, ns.material(back.plateMat)); const Position backPlateTra( - 0.5 * back.sideHeight + backPlateParms[1], 0_mm, backPlateParms[2] - 0.5 * back.sideLength); + 0.5 * back.sideHeight + backPlateParms[1], 0, backPlateParms[2] - 0.5 * back.sideLength); - Solid backPlate2Solid = Box(0.5 * back.plateWidth, 0.5 * back.plate2Thick, 0.5 * back.plateLength); + Solid backPlate2Solid = + Box(back.plate2Name, 0.5 * back.plateWidth, 0.5 * back.plate2Thick, 0.5 * back.plateLength); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << back.plate2Name << " Box " << cms::convert2mm(0.5 * back.plateWidth) << ":" + << cms::convert2mm(0.5 * back.plate2Thick) << ":" + << cms::convert2mm(0.5 * back.plateLength); +#endif Volume backPlate2Log = Volume(back.plate2Name, backPlate2Solid, ns.material(back.plate2Mat)); - const Position backPlate2Tra(0_mm, -backPlateParms[1] + back.plate2Thick / 2., 0_mm); + const Position backPlate2Tra(0, -backPlateParms[1] + back.plate2Thick / 2., 0); if (0 != back.plateHere) { backPlateLog.placeVolume(backPlate2Log, copyOne, Transform3D(backPlate2Tra)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backPlate2Log.name() << ":" << copyOne << " positioned in " - << backPlateLog.name(); + edm::LogVerbatim("EBGeomX") << backPlate2Log.name() << ":" << copyOne << " positioned in " + << backPlateLog.name() << " at (" << cms::convert2mm(backPlate2Tra.x()) << "," + << cms::convert2mm(backPlate2Tra.y()) << "," << cms::convert2mm(backPlate2Tra.z()) + << ") with no rotation"; #endif spmLog.placeVolume( backPlateLog, copyOne, Transform3D(myrot(ns, back.plateName + "Rot5", CLHEP::HepRotationZ(270_deg)), outtra + backPlateTra)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backPlateLog.name() << ":" << copyOne << " positioned in " - << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << backPlateLog.name() << ":" << copyOne << " positioned in " << spmLog.name() + << " at (" << cms::convert2mm((outtra + backPlateTra).x()) << "," + << cms::convert2mm((outtra + backPlateTra).y()) << "," + << cms::convert2mm((outtra + backPlateTra).z()) << ") with rotation"; #endif } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -1924,7 +2144,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Solid backSideSolid = mytrap(back.sideName, trapBS); Volume backSideLog = Volume(back.sideName, backSideSolid, ns.material(back.sideMat)); - const Position backSideTra1(0_mm, back.plateWidth / 2 + back.sideYOff1, 1_mm); + const Position backSideTra1(0, back.plateWidth / 2 + back.sideYOff1, 1 * dd4hep::mm); if (0 != back.sideHere) { spmLog.placeVolume( backSideLog, @@ -1932,17 +2152,21 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Transform3D(myrot(ns, back.sideName + "Rot8", CLHEP::HepRotationX(180_deg) * CLHEP::HepRotationZ(90_deg)), outtra + backSideTra1)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backSideLog.name() << ":" << copyOne << " positioned in " - << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << backSideLog.name() << ":" << copyOne << " positioned in " << spmLog.name() + << " at (" << cms::convert2mm((outtra + backSideTra1).x()) << "," + << cms::convert2mm((outtra + backSideTra1).y()) << "," + << cms::convert2mm((outtra + backSideTra1).z()) << ") with rotation"; #endif - const Position backSideTra2(0_mm, -back.plateWidth / 2 + back.sideYOff2, 1_mm); + const Position backSideTra2(0, -back.plateWidth / 2 + back.sideYOff2, 1 * dd4hep::mm); spmLog.placeVolume( backSideLog, copyTwo, Transform3D(myrot(ns, back.sideName + "Rot9", CLHEP::HepRotationZ(90_deg)), outtra + backSideTra2)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backSideLog.name() << ":" << copyTwo << " positioned in " - << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << backSideLog.name() << ":" << copyTwo << " positioned in " << spmLog.name() + << " at (" << cms::convert2mm((outtra + backSideTra2).x()) << "," + << cms::convert2mm((outtra + backSideTra2).y()) << "," + << cms::convert2mm((outtra + backSideTra2).z()) << ") with rotation"; #endif } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -1960,17 +2184,26 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - const double manifCut(2_mm); + const double manifCut(2 * dd4hep::mm); Solid mBManifSolid = Tube(0, mbManif.outDiam / 2, backCoolWidth / 2. - manifCut, 0_deg, 360_deg); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << mbManif.name << " Tubs " << cms::convert2mm(backCoolWidth / 2. - manifCut) + << ":0:" << cms::convert2mm(mbManif.outDiam / 2) << ":0:360"; +#endif Volume mBManifLog = Volume(mbManif.name, mBManifSolid, ns.material(mbManif.mat)); const string mBManifWaName(mbManif.name + "Wa"); Solid mBManifWaSolid = Tube(0, mbManif.innDiam / 2, backCoolWidth / 2. - manifCut, 0_deg, 360_deg); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << mBManifWaName << " Tubs " << cms::convert2mm(backCoolWidth / 2. - manifCut) + << ":0:" << cms::convert2mm(mbManif.innDiam / 2) << ":0:360"; +#endif Volume mBManifWaLog(mBManifWaName, mBManifWaSolid, ns.material(backPipe.waterMat)); mBManifLog.placeVolume(mBManifWaLog, copyOne); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << mBManifWaLog.name() << ":" << copyOne << " positioned in " << mBManifLog.name(); + edm::LogVerbatim("EBGeomX") << mBManifWaLog.name() << ":" << copyOne << " positioned in " << mBManifLog.name() + << " at (0,0,0) with no rotation"; #endif //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -1985,9 +2218,15 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext //!!!!!!!!!!!!!! Begin Loop over Grilles & MB Cooling Manifold !!!! //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - const double deltaY(-5_mm); + const double deltaY(-5 * dd4hep::mm); - Solid grEdgeSlotSolid = Box(grille.edgeSlotHeight / 2., grille.edgeSlotWidth / 2., grille.thick / 2.); + Solid grEdgeSlotSolid = + Box(grille.edgeSlotName, grille.edgeSlotHeight / 2., grille.edgeSlotWidth / 2., grille.thick / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << grille.edgeSlotName << " Box " << cms::convert2mm(grille.edgeSlotHeight / 2.) << ":" + << cms::convert2mm(grille.edgeSlotWidth / 2.) << ":" + << cms::convert2mm(grille.thick / 2.); +#endif Volume grEdgeSlotLog = Volume(grille.edgeSlotName, grEdgeSlotSolid, ns.material(grille.edgeSlotMat)); unsigned int edgeSlotCopy(0); @@ -1998,6 +2237,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext for (unsigned int iGr(0); iGr != grille.vecHeight.size(); ++iGr) { string gName(grille.name + std::to_string(iGr)); Solid grilleSolid = Box(gName, grille.vecHeight[iGr] / 2., backCoolWidth / 2., grille.thick / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << gName << " Box " << cms::convert2mm(grille.vecHeight[iGr] / 2.) << ":" + << cms::convert2mm(backCoolWidth / 2.) << ":" << cms::convert2mm(grille.thick / 2.); +#endif Volume grilleLog = Volume(gName, grilleSolid, ns.material(grille.mat)); const Position grilleTra(-realBPthick / 2 - grille.vecHeight[iGr] / 2, @@ -2010,6 +2253,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext string mName(grille.midSlotName + std::to_string(iGr / 2)); Solid grMidSlotSolid = Box(mName, grille.vecMidSlotHeight[(iGr - 1) / 2] / 2., grille.midSlotWidth / 2., grille.thick / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << mName << " Box " + << cms::convert2mm(grille.vecMidSlotHeight[(iGr - 1) / 2] / 2.) << ":" + << cms::convert2mm(grille.midSlotWidth / 2.) << ":" + << cms::convert2mm(grille.thick / 2.); +#endif grMidSlotLog[(iGr - 1) / 2] = Volume(mName, grMidSlotSolid, ns.material(grille.midSlotMat)); } grilleLog.placeVolume( @@ -2018,8 +2267,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Transform3D(Position( grille.vecHeight[iGr] / 2. - grille.vecMidSlotHeight[(iGr - 1) / 2] / 2., +grille.midSlotXOff, 0))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << grMidSlotLog[(iGr - 1) / 2].name() << ":" << midSlotCopy << " positioned in " - << grilleLog.name(); + edm::LogVerbatim("EBGeomX") << grMidSlotLog[(iGr - 1) / 2].name() << ":" << midSlotCopy << " positioned in " + << grilleLog.name() << " at (" + << cms::convert2mm(grille.vecHeight[iGr] / 2. - + grille.vecMidSlotHeight[(iGr - 1) / 2] / 2.) + << "," << cms::convert2mm(grille.midSlotXOff) << ",0) with no rotation"; #endif grilleLog.placeVolume( grMidSlotLog[(iGr - 1) / 2], @@ -2027,8 +2279,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Transform3D(Position( grille.vecHeight[iGr] / 2. - grille.vecMidSlotHeight[(iGr - 1) / 2] / 2., -grille.midSlotXOff, 0))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << grMidSlotLog[(iGr - 1) / 2].name() << ":" << midSlotCopy << " positioned in " - << grilleLog.name(); + edm::LogVerbatim("EBGeomX") << grMidSlotLog[(iGr - 1) / 2].name() << ":" << midSlotCopy << " positioned in " + << grilleLog.name() << " at (" + << cms::convert2mm(grille.vecHeight[iGr] / 2. - + grille.vecMidSlotHeight[(iGr - 1) / 2] / 2.) + << "," << cms::convert2mm(-grille.midSlotXOff) << ",0) with no rotation"; #endif } @@ -2039,8 +2294,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext backCoolWidth / 2 - grille.edgeSlotWidth / 2., 0))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << grEdgeSlotLog.name() << ":" << edgeSlotCopy << " positioned in " - << grilleLog.name(); + edm::LogVerbatim("EBGeomX") << grEdgeSlotLog.name() << ":" << edgeSlotCopy << " positioned in " + << grilleLog.name() << " at (" + << cms::convert2mm(grille.vecHeight[iGr] / 2. - grille.edgeSlotHeight / 2.) << "," + << cms::convert2mm(backCoolWidth / 2 - grille.edgeSlotWidth / 2.) + << ",0) with no rotation"; #endif grilleLog.placeVolume(grEdgeSlotLog, ++edgeSlotCopy, @@ -2048,15 +2306,19 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext -backCoolWidth / 2 + grille.edgeSlotWidth / 2., 0))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << grEdgeSlotLog.name() << ":" << edgeSlotCopy << " positioned in " - << grilleLog.name(); + edm::LogVerbatim("EBGeomX") << grEdgeSlotLog.name() << ":" << edgeSlotCopy << " positioned in " + << grilleLog.name() << " at (" + << cms::convert2mm(grille.vecHeight[iGr] / 2. - grille.edgeSlotHeight / 2.) << "," + << cms::convert2mm(-backCoolWidth / 2 + grille.edgeSlotWidth / 2.) + << ",0) with no rotation"; #endif } if (0 != grille.here) { spmLog.placeVolume(grilleLog, iGr, Transform3D(gTra)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << grilleLog.name() << ":" << iGr << " positioned in " - << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << grilleLog.name() << ":" << iGr << " positioned in " << spmLog.name() << " at (" + << cms::convert2mm(gTra.x()) << "," << cms::convert2mm(gTra.y()) << "," + << cms::convert2mm(gTra.z()) << ") with no rotation"; #endif } @@ -2068,8 +2330,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext manifCut, grille.thick / 2. + 3 * mbManif.outDiam / 2.))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << mBManifLog.name() << ":" << iGr << " positioned in " - << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << mBManifLog.name() << ":" << iGr << " positioned in " << spmLog.name() + << " at (" + << cms::convert2mm(gTra.x() + mbManif.outDiam / 2. - grille.vecHeight[iGr] / 2.) + << "," << cms::convert2mm(gTra.y() - manifCut) << "," + << cms::convert2mm(gTra.z() - grille.thick / 2. - 3 * mbManif.outDiam / 2.) + << ") with rotation"; #endif spmLog.placeVolume(mBManifLog, iGr - 1, @@ -2078,8 +2344,13 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext manifCut, grille.thick / 2 + 3 * mbManif.outDiam / 2.))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << mBManifLog.name() << ":" << (iGr - 1) << " positioned in " - << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << mBManifLog.name() << ":" << (iGr - 1) << " positioned in " << spmLog.name() + << " at (" + << cms::convert2mm(gTra.x() + 3 * mbManif.outDiam / 2. - + grille.vecHeight[iGr] / 2.) + << "," << cms::convert2mm(gTra.y() - manifCut) << "," + << cms::convert2mm(gTra.z() - grille.thick / 2 - 3 * mbManif.outDiam / 2.) + << ") with rotation"; #endif } } @@ -2096,25 +2367,47 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - Solid backCoolBarSolid = Box(backCool.barHeight / 2., backCool.barWidth / 2., backCool.barThick / 2.); + Solid backCoolBarSolid = + Box(backCool.barName, backCool.barHeight / 2., backCool.barWidth / 2., backCool.barThick / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << backCool.barName << " Box " << cms::convert2mm(backCool.barHeight / 2.) << ":" + << cms::convert2mm(backCool.barWidth / 2.) << ":" + << cms::convert2mm(backCool.barThick / 2.); +#endif Volume backCoolBarLog = Volume(backCool.barName, backCoolBarSolid, ns.material(backCool.barMat)); - Solid backCoolBarSSSolid = Box(backCool.barHeight / 2., backCool.barWidth / 2., backCool.barSSThick / 2.); + Solid backCoolBarSSSolid = + Box(backCool.barSSName, backCool.barHeight / 2., backCool.barWidth / 2., backCool.barSSThick / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << backCool.barSSName << " Box " << cms::convert2mm(backCool.barHeight / 2.) << ":" + << cms::convert2mm(backCool.barWidth / 2.) << ":" + << cms::convert2mm(backCool.barSSThick / 2.); +#endif Volume backCoolBarSSLog = Volume(backCool.barSSName, backCoolBarSSSolid, ns.material(backCool.barSSMat)); const Position backCoolBarSSTra(0, 0, 0); backCoolBarLog.placeVolume(backCoolBarSSLog, copyOne, Transform3D(backCoolBarSSTra)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backCoolBarSSLog.name() << ":" << copyOne << " positioned in " - << backCoolBarLog.name(); + edm::LogVerbatim("EBGeomX") << backCoolBarSSLog.name() << ":" << copyOne << " positioned in " + << backCoolBarLog.name() << " at (" << cms::convert2mm(backCoolBarSSTra.x()) << "," + << cms::convert2mm(backCoolBarSSTra.y()) << "," + << cms::convert2mm(backCoolBarSSTra.z()) << ") with no rotation"; #endif - Solid backCoolBarWaSolid = Box(backCool.barHeight / 2., backCool.barWidth / 2., backCool.barWaThick / 2.); + Solid backCoolBarWaSolid = + Box(backCool.barWaName, backCool.barHeight / 2., backCool.barWidth / 2., backCool.barWaThick / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << backCool.barWaName << " Box " << cms::convert2mm(backCool.barHeight / 2.) << ":" + << cms::convert2mm(backCool.barWidth / 2.) << ":" + << cms::convert2mm(backCool.barWaThick / 2.); +#endif Volume backCoolBarWaLog = Volume(backCool.barWaName, backCoolBarWaSolid, ns.material(backCool.barWaMat)); const Position backCoolBarWaTra(0, 0, 0); backCoolBarSSLog.placeVolume(backCoolBarWaLog, copyOne, Transform3D(backCoolBarWaTra)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backCoolBarWaLog.name() << ":" << copyOne << " positioned in " - << backCoolBarSSLog.name(); + edm::LogVerbatim("EBGeomX") << backCoolBarWaLog.name() << ":" << copyOne << " positioned in " + << backCoolBarSSLog.name() << " at (" << cms::convert2mm(backCoolBarWaTra.x()) << "," + << cms::convert2mm(backCoolBarWaTra.y()) << "," + << cms::convert2mm(backCoolBarWaTra.z()) << ") with no rotation"; #endif //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2133,19 +2426,36 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext for (unsigned int iLyr(0); iLyr != backCool.vecBackVFELyrThick.size(); ++iLyr) { thickVFE += backCool.vecBackVFELyrThick[iLyr]; } - Solid backVFESolid = Box(backCool.barHeight / 2., backCool.barWidth / 2., thickVFE / 2.); - Volume backVFELog = ns.addVolume(Volume(myns + backCool.vFEName, backVFESolid, ns.material(backCool.vFEMat))); + Solid backVFESolid = + Box((myns + backCool.backVFEName), backCool.barHeight / 2., backCool.barWidth / 2., thickVFE / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << (myns + backCool.backVFEName) << " Box " << cms::convert2mm(backCool.barHeight / 2.) + << ":" << cms::convert2mm(backCool.barWidth / 2.) << ":" + << cms::convert2mm(thickVFE / 2.); +#endif + Volume backVFELog = + ns.addVolume(Volume(myns + backCool.backVFEName, backVFESolid, ns.material(backCool.backVFEMat))); Position offTra(0, 0, -thickVFE / 2); for (unsigned int iLyr(0); iLyr != backCool.vecBackVFELyrThick.size(); ++iLyr) { - Solid backVFELyrSolid = - Box(backCool.barHeight / 2., backCool.barWidth / 2., backCool.vecBackVFELyrThick[iLyr] / 2.); + Solid backVFELyrSolid = Box(backCool.vecBackVFELyrName[iLyr], + backCool.barHeight / 2., + backCool.barWidth / 2., + backCool.vecBackVFELyrThick[iLyr] / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << backCool.vecBackVFELyrName[iLyr] << " Box " + << cms::convert2mm(backCool.barHeight / 2.) << ":" + << cms::convert2mm(backCool.barWidth / 2.) << ":" + << cms::convert2mm(backCool.vecBackVFELyrThick[iLyr] / 2.); +#endif Volume backVFELyrLog = Volume(backCool.vecBackVFELyrName[iLyr], backVFELyrSolid, ns.material(backCool.vecBackVFELyrMat[iLyr])); const Position backVFELyrTra(0, 0, backCool.vecBackVFELyrThick[iLyr] / 2); backVFELog.placeVolume(backVFELyrLog, copyOne, Transform3D(backVFELyrTra + offTra)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backVFELyrLog.name() << ":" << copyOne << " positioned in " - << DDSplit(backVFELog.name()).first; + edm::LogVerbatim("EBGeomX") << backVFELyrLog.name() << ":" << copyOne << " positioned in " << backVFELog.name() + << " at (" << cms::convert2mm((backVFELyrTra + offTra).x()) << "," + << cms::convert2mm((backVFELyrTra + offTra).y()) << "," + << cms::convert2mm((backVFELyrTra + offTra).z()) << ") with no rotation"; #endif offTra += 2 * backVFELyrTra; } @@ -2164,29 +2474,35 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const double halfZCoolVFE(thickVFE + backCool.barThick / 2.); Solid backCoolVFESolid = Box(backCool.barHeight / 2., backCool.barWidth / 2., halfZCoolVFE); - Volume backCoolVFELog = Volume(backCool.backVFEName, backCoolVFESolid, ns.material(backCool.backVFEMat)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << backCool.vFEName << " Box " << cms::convert2mm(backCool.barHeight / 2.) << ":" + << cms::convert2mm(backCool.barWidth / 2.) << ":" << cms::convert2mm(halfZCoolVFE); +#endif + Volume backCoolVFELog = ns.addVolume(Volume(backCool.vFEName, backCoolVFESolid, ns.material(backCool.vFEMat))); if (0 != backCool.barHere) { backCoolVFELog.placeVolume(backCoolBarLog, copyOne, Transform3D()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backCoolBarLog.name() << ":" << copyOne << " positioned in " - << backCoolVFELog.name(); + edm::LogVerbatim("EBGeomX") << backCoolBarLog.name() << ":" << copyOne << " positioned in " + << backCoolVFELog.name() << " at (0,0,0) with no rotation"; #endif } if (0 != backCool.vFEHere) { backCoolVFELog.placeVolume( backVFELog, copyOne, Transform3D(Position(0, 0, backCool.barThick / 2. + thickVFE / 2.))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << DDSplit(backVFELog.name()).first << ":" << copyOne << " positioned in " - << backCoolVFELog.name(); + edm::LogVerbatim("EBGeomX") << backVFELog.name() << ":" << copyOne << " positioned in " << backCoolVFELog.name() + << " at (0,0," << cms::convert2mm(backCool.barThick / 2. + thickVFE / 2.) + << ") with no rotation"; #endif } backCoolVFELog.placeVolume(backVFELog, copyTwo, - Transform3D(myrot(ns, backCool.backVFEName + "Flip", CLHEP::HepRotationX(180_deg)), + Transform3D(myrot(ns, backCool.vFEName + "Flip", CLHEP::HepRotationX(180_deg)), Position(0, 0, -backCool.barThick / 2. - thickVFE / 2.))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << DDSplit(backVFELog.name()).first << ":" << copyTwo << " positioned in " - << backCoolVFELog.name(); + edm::LogVerbatim("EBGeomX") << backVFELog.name() << ":" << copyTwo << " positioned in " << backCoolVFELog.name() + << " at (0,0," << cms::convert2mm(-backCool.barThick / 2. - thickVFE / 2.) + << ") with rotation"; #endif //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2205,8 +2521,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext unsigned int iNSec(0); const unsigned int nMisc(backMisc.vecThick.size() / 4); for (unsigned int iMod(0); iMod != 4; ++iMod) { - const double pipeLength(grille.vecZOff[2 * iMod + 1] - grille.vecZOff[2 * iMod] - grille.thick - 3_mm); - const double pipeZPos(grille.vecZOff[2 * iMod + 1] - pipeLength / 2 - 1.5_mm); + const double pipeLength(grille.vecZOff[2 * iMod + 1] - grille.vecZOff[2 * iMod] - grille.thick - + 3 * dd4hep::mm); + const double pipeZPos(grille.vecZOff[2 * iMod + 1] - pipeLength / 2 - 1.5 * dd4hep::mm); // accumulate total height of parent volume double backCoolHeight(backCool.barHeight + mbCoolTube.outDiam); @@ -2220,7 +2537,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext } const double halfZBCool((pipeLength - 2 * mbManif.outDiam - grille.zSpace) / 2); - Solid backCoolSolid = Box(backCoolHeight / 2., backCoolWidth / 2., halfZBCool); + Solid backCoolSolid = Box(backCool.vecName[iMod], backCoolHeight / 2., backCoolWidth / 2., halfZBCool); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << backCool.vecName[iMod] << " Box " << cms::convert2mm(backCoolHeight / 2.) << ":" + << cms::convert2mm(backCoolWidth / 2.) << ":" << cms::convert2mm(halfZBCool); +#endif Volume backCoolLog = Volume(backCool.vecName[iMod], backCoolSolid, ns.material(spm.mat)); const Position bCoolTra( @@ -2230,17 +2551,24 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext if (0 != backCool.here) { spmLog.placeVolume(backCoolLog, iMod + 1, outtra + backPlateTra + bCoolTra); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backCoolLog.name() << ":" << (iMod + 1) << " positioned in " - << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << backCoolLog.name() << ":" << (iMod + 1) << " positioned in " << spmLog.name() + << " at (" << cms::convert2mm((outtra + backPlateTra + bCoolTra).x()) << "," + << cms::convert2mm((outtra + backPlateTra + bCoolTra).y()) << "," + << cms::convert2mm((outtra + backPlateTra + bCoolTra).z()) + << ") with no rotation"; #endif } //=== const double backCoolTankHeight(backCool.barHeight); // - backBracketHeight() ) ; - const double halfZTank(halfZBCool - 5_cm); + const double halfZTank(halfZBCool - 5 * dd4hep::cm); string bTankName(backCoolTank.name + std::to_string(iMod + 1)); - Solid backCoolTankSolid = Box(backCoolTankHeight / 2., backCoolTank.width / 2., halfZTank); + Solid backCoolTankSolid = Box(bTankName, backCoolTankHeight / 2., backCoolTank.width / 2., halfZTank); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << bTankName << " Box " << cms::convert2mm(backCoolTankHeight / 2.) << ":" + << cms::convert2mm(backCoolTank.width / 2.) << ":" << cms::convert2mm(halfZTank); +#endif Volume backCoolTankLog = Volume(bTankName, backCoolTankSolid, ns.material(backCoolTank.mat)); if (0 != backCoolTank.here) { backCoolLog.placeVolume(backCoolTankLog, @@ -2250,24 +2578,40 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext backCool.barWidth / 2. + backCoolTank.width / 2., 0))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backCoolTankLog.name() << ":" << copyOne << " positioned in " - << backCoolLog.name(); + edm::LogVerbatim("EBGeomX") << backCoolTankLog.name() << ":" << copyOne << " positioned in " + << backCoolLog.name() << " at (" + << cms::convert2mm(-backCoolHeight / 2 + backCoolTankHeight / 2. + bottomThick) + << "," << cms::convert2mm(backCool.barWidth / 2. + backCoolTank.width / 2.) + << ",0) with no rotation"; #endif } string bTankWaName(backCoolTank.waName + std::to_string(iMod + 1)); - Solid backCoolTankWaSolid = Box(backCoolTankHeight / 2. - backCoolTank.thick / 2., + Solid backCoolTankWaSolid = Box(bTankWaName, + backCoolTankHeight / 2. - backCoolTank.thick / 2., backCoolTank.waWidth / 2., halfZTank - backCoolTank.thick / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << bTankWaName << " Box " + << cms::convert2mm(backCoolTankHeight / 2. - backCoolTank.thick / 2.) << ":" + << cms::convert2mm(backCoolTank.waWidth / 2.) << ":" + << cms::convert2mm(halfZTank - backCoolTank.thick / 2.); +#endif Volume backCoolTankWaLog = Volume(bTankWaName, backCoolTankWaSolid, ns.material(backCoolTank.waMat)); backCoolTankLog.placeVolume(backCoolTankWaLog, copyOne, Transform3D(Rotation3D(), Position(0, 0, 0))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backCoolTankWaLog.name() << ":" << copyOne << " positioned in " - << backCoolTankLog.name(); + edm::LogVerbatim("EBGeomX") << backCoolTankWaLog.name() << ":" << copyOne << " positioned in " + << backCoolTankLog.name() << " at (0,0,0) with no rotation"; #endif string bBracketName(backCoolTank.backBracketName + std::to_string(iMod + 1)); - Solid backBracketSolid = Box(backCoolTank.backBracketHeight / 2., backCoolTank.width / 2., halfZTank); + Solid backBracketSolid = + Box(bBracketName, backCoolTank.backBracketHeight / 2., backCoolTank.width / 2., halfZTank); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << bBracketName << " Box " << cms::convert2mm(backCoolTank.backBracketHeight / 2.) + << ":" << cms::convert2mm(backCoolTank.width / 2.) << ":" + << cms::convert2mm(halfZTank); +#endif Volume backBracketLog = Volume(bBracketName, backBracketSolid, ns.material(backCoolTank.backBracketMat)); if (0 != backCoolTank.here) { backCoolLog.placeVolume(backBracketLog, @@ -2278,26 +2622,41 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext -backCool.barWidth / 2. - backCoolTank.width / 2., 0))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backBracketLog.name() << ":" << copyOne << " positioned in " - << backCoolLog.name(); + edm::LogVerbatim("EBGeomX") << backBracketLog.name() << ":" << copyOne << " positioned in " + << backCoolLog.name() << " at (" + << cms::convert2mm(backCool.barHeight - backCoolHeight / 2. - + backCoolTank.backBracketHeight / 2. + bottomThick) + << "," << cms::convert2mm(-backCool.barWidth / 2. - backCoolTank.width / 2.) + << ",0) with no rotation"; #endif } //=== Position bSumTra(backCool.barHeight - backCoolHeight / 2. + bottomThick, 0, 0); for (unsigned int j(0); j != nMisc; ++j) { // loop over miscellaneous layers - Solid bSolid = - Box(backMisc.vecThick[iMod * nMisc + j] / 2, backCool.barWidth / 2. + backCoolTank.width, halfZBCool); + Solid bSolid = Box(backMisc.vecName[iMod * nMisc + j], + backMisc.vecThick[iMod * nMisc + j] / 2, + backCool.barWidth / 2. + backCoolTank.width, + halfZBCool); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << backMisc.vecName[iMod * nMisc + j] << " Box " + << cms::convert2mm(backMisc.vecThick[iMod * nMisc + j] / 2) << ":" + << cms::convert2mm(backCool.barWidth / 2. + backCoolTank.width) << ":" + << cms::convert2mm(halfZBCool); +#endif Volume bLog = Volume(backMisc.vecName[iMod * nMisc + j], bSolid, ns.material(backMisc.vecMat[iMod * nMisc + j])); - const Position bTra(backMisc.vecThick[iMod * nMisc + j] / 2, 0_mm, 0_mm); + const Position bTra(backMisc.vecThick[iMod * nMisc + j] / 2, 0, 0); if (0 != backMisc.here) { backCoolLog.placeVolume(bLog, copyOne, Transform3D(Rotation3D(), bSumTra + bTra)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << bLog.name() << ":" << copyOne << " positioned in " << backCoolLog.name(); + edm::LogVerbatim("EBGeomX") << bLog.name() << ":" << copyOne << " positioned in " << backCoolLog.name() + << " at (" << cms::convert2mm((bSumTra + bTra).x()) << "," + << cms::convert2mm((bSumTra + bTra).y()) << "," + << cms::convert2mm((bSumTra + bTra).z()) << ") with no rotation"; #endif } @@ -2311,15 +2670,22 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext for (unsigned int j(0); j != mbLyr.vecMBLyrThick.size(); ++j) // loop over MB layers { Solid mSolid = Box(mbLyr.vecMBLyrThick[j] / 2, bHalfWidth, halfZBCool); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << (mbLyr.vecMBLyrName[j] + "_" + std::to_string(iMod + 1)) << " Box " + << cms::convert2mm(mbLyr.vecMBLyrThick[j] / 2) << ":" + << cms::convert2mm(bHalfWidth) << ":" << cms::convert2mm(halfZBCool); +#endif Volume mLog = Volume( mbLyr.vecMBLyrName[j] + "_" + std::to_string(iMod + 1), mSolid, ns.material(mbLyr.vecMBLyrMat[j])); - mTra += Position(mbLyr.vecMBLyrThick[j] / 2.0, 0_mm, 0_mm); + mTra += Position(mbLyr.vecMBLyrThick[j] / 2.0, 0, 0); backCoolLog.placeVolume(mLog, copyOne, Transform3D(Rotation3D(), mTra)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << mLog.name() << ":" << copyOne << " positioned in " << backCoolLog.name(); + edm::LogVerbatim("EBGeomX") << mLog.name() << ":" << copyOne << " positioned in " << backCoolLog.name() + << " at (" << cms::convert2mm(mTra.x()) << "," << cms::convert2mm(mTra.y()) + << "," << cms::convert2mm(mTra.z()) << ") with no rotation"; #endif - mTra += Position(mbLyr.vecMBLyrThick[j] / 2.0, 0_mm, 0_mm); + mTra += Position(mbLyr.vecMBLyrThick[j] / 2.0, 0, 0); } } @@ -2327,14 +2693,23 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const string mBName(mbCoolTube.name + "_" + std::to_string(iMod + 1)); Solid mBCoolTubeSolid = Tube(0, mbCoolTube.outDiam / 2, halfZBCool, 0_deg, 360_deg); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << mBName << " Tubs " << cms::convert2mm(halfZBCool) + << ":0:" << cms::convert2mm(mbCoolTube.outDiam / 2) << ":0:360"; +#endif Volume mBLog = Volume(mBName, mBCoolTubeSolid, ns.material(mbCoolTube.mat)); const string mBWaName(mbCoolTube.name + "Wa_" + std::to_string(iMod + 1)); Solid mBCoolTubeWaSolid = Tube(mBWaName, 0, mbCoolTube.innDiam / 2, halfZBCool, 0_deg, 360_deg); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << mBWaName << " Tubs " << cms::convert2mm(halfZBCool) + << ":0:" << cms::convert2mm(mbCoolTube.innDiam / 2) << ":0:360"; +#endif Volume mBWaLog = Volume(mBWaName, mBCoolTubeWaSolid, ns.material(backPipe.waterMat)); mBLog.placeVolume(mBWaLog, copyOne); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << mBWaLog.name() << ":" << copyOne << " positioned in " << mBLog.name(); + edm::LogVerbatim("EBGeomX") << mBWaLog.name() << ":" << copyOne << " positioned in " << mBLog.name() + << " at (0,0,0) with no rotation"; #endif for (unsigned int j(0); j != dryAirTube.mbCoolTubeNum; ++j) // loop over all MB cooling circuits @@ -2346,8 +2721,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext -bHalfWidth + (j + 1) * bHalfWidth / 5, 0))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << mBLog.name() << ":" << (2 * j + 1) << " positioned in " - << backCoolLog.name(); + edm::LogVerbatim("EBGeomX") << mBLog.name() << ":" << (2 * j + 1) << " positioned in " << backCoolLog.name() + << " at (" << cms::convert2mm(-backCoolHeight / 2.0 + mbCoolTube.outDiam / 2.) + << "," << cms::convert2mm(-bHalfWidth + (j + 1) * bHalfWidth / 5) + << ",0) with no rotation"; #endif } } @@ -2361,9 +2738,16 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext string bPipeName(backPipe.name + "_" + std::to_string(iMod + 1)); string bInnerName(backPipe.name + "_H2O_" + std::to_string(iMod + 1)); - Solid backPipeSolid = Tube(bPipeName, 0_mm, backPipe.vecDiam[iMod] / 2, pipeLength / 2, 0_deg, 360_deg); - Solid backInnerSolid = Tube( - bInnerName, 0_mm, backPipe.vecDiam[iMod] / 2 - backPipe.vecThick[iMod], pipeLength / 2, 0_deg, 360_deg); + Solid backPipeSolid = Tube(bPipeName, 0, backPipe.vecDiam[iMod] / 2, pipeLength / 2, 0_deg, 360_deg); + Solid backInnerSolid = + Tube(bInnerName, 0, backPipe.vecDiam[iMod] / 2 - backPipe.vecThick[iMod], pipeLength / 2, 0_deg, 360_deg); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << bPipeName << " Tubs " << cms::convert2mm(pipeLength / 2) + << ":0:" << cms::convert2mm(backPipe.vecDiam[iMod] / 2) << ":0:360"; + edm::LogVerbatim("EBGeom") << bInnerName << " Tubs " << cms::convert2mm(pipeLength / 2) + << ":0:" << cms::convert2mm(backPipe.vecDiam[iMod] / 2 - backPipe.vecThick[iMod]) + << ":0:360"; +#endif Volume backPipeLog = Volume(bPipeName, backPipeSolid, ns.material(backPipe.mat)); Volume backInnerLog = Volume(bInnerName, backInnerSolid, ns.material(backPipe.waterMat)); @@ -2374,22 +2758,26 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext spmLog.placeVolume(backPipeLog, copyOne, Transform3D(Rotation3D(), bPipeTra1)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backPipeLog.name() << ":" << copyOne << " positioned in " - << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << backPipeLog.name() << ":" << copyOne << " positioned in " << spmLog.name() + << " at (" << cms::convert2mm(bPipeTra1.x()) << "," + << cms::convert2mm(bPipeTra1.y()) << "," << cms::convert2mm(bPipeTra1.z()) + << ") with no rotation"; #endif const Position bPipeTra2( bPipeTra1.x(), back.yOff - back.plateWidth / 2 + back.sideWidth + backPipe.vecDiam[iMod], bPipeTra1.z()); spmLog.placeVolume(backPipeLog, copyTwo, Transform3D(Rotation3D(), bPipeTra2)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backPipeLog.name() << ":" << copyTwo << " positioned in " - << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << backPipeLog.name() << ":" << copyTwo << " positioned in " << spmLog.name() + << " at (" << cms::convert2mm(bPipeTra2.x()) << "," + << cms::convert2mm(bPipeTra2.y()) << "," << cms::convert2mm(bPipeTra2.z()) + << ") with no rotation"; #endif backPipeLog.placeVolume(backInnerLog, copyOne, Transform3D(Rotation3D(), Position())); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backInnerLog.name() << ":" << copyOne << " positioned in " - << backPipeLog.name(); + edm::LogVerbatim("EBGeomX") << backInnerLog.name() << ":" << copyOne << " positioned in " + << backPipeLog.name() << " at (0,0,0) with no rotation"; #endif } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2405,7 +2793,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Solid dryAirTubeSolid = Tube(dryAirTubName, dryAirTube.innDiam / 2, dryAirTube.outDiam / 2, pipeLength / 2, 0_deg, 360_deg); - Volume dryAirTubeLog = Volume(ns.prepend(dryAirTubName), dryAirTubeSolid, ns.material(dryAirTube.mat)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << dryAirTubName << " Tubs " << cms::convert2mm(pipeLength / 2) << ":" + << cms::convert2mm(dryAirTube.innDiam / 2) << ":" + << cms::convert2mm(dryAirTube.outDiam / 2) << ":0:360"; +#endif + Volume dryAirTubeLog = Volume((myns + dryAirTubName), dryAirTubeSolid, ns.material(dryAirTube.mat)); const Position dryAirTubeTra1(back.xOff + back.sideHeight - 0.7 * dryAirTube.outDiam - backPipe.vecDiam[iMod], back.yOff + back.plateWidth / 2 - back.sideWidth - 1.2 * dryAirTube.outDiam, @@ -2413,8 +2806,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext spmLog.placeVolume(dryAirTubeLog, copyOne, Transform3D(Rotation3D(), dryAirTubeTra1)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << dryAirTubeLog.name() << ":" << copyOne << " positioned in " - << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << dryAirTubeLog.name() << ":" << copyOne << " positioned in " << spmLog.name() + << " at (" << cms::convert2mm(dryAirTubeTra1.x()) << "," + << cms::convert2mm(dryAirTubeTra1.y()) << "," + << cms::convert2mm(dryAirTubeTra1.z()) << ") with no rotation"; #endif const Position dryAirTubeTra2(dryAirTubeTra1.x(), @@ -2423,8 +2818,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext spmLog.placeVolume(dryAirTubeLog, copyTwo, Transform3D(Rotation3D(), dryAirTubeTra2)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << dryAirTubeLog.name() << ":" << copyTwo << " positioned in " - << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << dryAirTubeLog.name() << ":" << copyTwo << " positioned in " << spmLog.name() + << " at (" << cms::convert2mm(dryAirTubeTra2.x()) << "," + << cms::convert2mm(dryAirTubeTra2.y()) << "," + << cms::convert2mm(dryAirTubeTra2.z()) << ") with no rotation"; #endif } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -2442,8 +2839,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext for (unsigned int iBar(0); iBar != nMax; ++iBar) { backCoolLog.placeVolume(backCoolVFELog, iCVFECopy++, cTra); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backCoolVFELog.name() << ":" << iCVFECopy << " positioned in " - << backCoolLog.name(); + edm::LogVerbatim("EBGeomX") << backCoolVFELog.name() << ":" << iCVFECopy << " positioned in " + << backCoolLog.name() << " at (" << cms::convert2mm(cTra.x()) << "," + << cms::convert2mm(cTra.y()) << "," << cms::convert2mm(cTra.z()) + << ") with no rotation"; #endif cTra += Position(0, 0, backMisc.backCBStdSep); } @@ -2478,14 +2877,19 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext array patchParms{ {patchHeight / 2., backCool.barWidth / 2., (spm.vecZPts.back() - grille.vecZOff.back() - grille.thick) / 2}}; Solid patchSolid = Box(patchParms[0], patchParms[1], patchParms[2]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << patchPanel.name << " Box " << cms::convert2mm(patchParms[0]) << ":" + << cms::convert2mm(patchParms[1]) << ":" << cms::convert2mm(patchParms[2]); +#endif Volume patchLog = Volume(patchPanel.name, patchSolid, ns.material(spm.mat)); - const Position patchTra(back.xOff + 4_mm, 0_mm, grille.vecZOff.back() + grille.thick + patchParms[2]); + const Position patchTra(back.xOff + 4 * dd4hep::mm, 0, grille.vecZOff.back() + grille.thick + patchParms[2]); if (0 != patchPanel.here) { spmLog.placeVolume(patchLog, copyOne, patchTra); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << patchLog.name() << ":" << copyOne << " positioned in " - << DDSplit(spmLog.name()).first; + edm::LogVerbatim("EBGeomX") << patchLog.name() << ":" << copyOne << " positioned in " << spmLog.name() + << " at (" << cms::convert2mm(patchTra.x()) << "," << cms::convert2mm(patchTra.y()) + << "," << cms::convert2mm(patchTra.z()) << ") with no rotation"; #endif } @@ -2493,15 +2897,21 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext for (unsigned int j(0); j != patchPanel.vecNames.size(); ++j) { Solid pSolid = Box(patchPanel.vecThick[j] / 2., patchParms[1], patchParms[2]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << patchPanel.vecNames[j] << " Box " << cms::convert2mm(patchPanel.vecThick[j] / 2.) + << ":" << cms::convert2mm(patchParms[1]) << ":" << cms::convert2mm(patchParms[2]); +#endif Volume pLog = Volume(patchPanel.vecNames[j], pSolid, ns.material(patchPanel.vecMat[j])); - pTra += Position(patchPanel.vecThick[j] / 2, 0_mm, 0_mm); + pTra += Position(patchPanel.vecThick[j] / 2, 0, 0); patchLog.placeVolume(pLog, copyOne, pTra); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << pLog.name() << ":" << copyOne << " positioned in " << patchLog.name(); + edm::LogVerbatim("EBGeomX") << pLog.name() << ":" << copyOne << " positioned in " << patchLog.name() << " at (" + << cms::convert2mm(pTra.x()) << "," << cms::convert2mm(pTra.y()) << "," + << cms::convert2mm(pTra.z()) << ") with no rotation"; #endif - pTra += Position(patchPanel.vecThick[j] / 2, 0_mm, 0_mm); + pTra += Position(patchPanel.vecThick[j] / 2, 0, 0); } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2519,68 +2929,104 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext // Make hierarchy of rods, envelopes, blocks, shims, and cutouts Solid rodSolid = Box(pincer.rodName, pincer.envWidthHalf, pincer.envHeightHalf, ilyLengthHalf); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pincer.rodName << " Box " << cms::convert2mm(pincer.envWidthHalf) << ":" + << cms::convert2mm(pincer.envHeightHalf) << ":" << cms::convert2mm(ilyLengthHalf); +#endif Volume rodLog = Volume(pincer.rodName, rodSolid, ns.material(pincer.rodMat)); array envParms{{pincer.envWidthHalf, pincer.envHeightHalf, pincer.envLengthHalf}}; Solid envSolid = Box(pincer.envName, envParms[0], envParms[1], envParms[2]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pincer.envName << " Box " << cms::convert2mm(envParms[0]) << ":" + << cms::convert2mm(envParms[1]) << ":" << cms::convert2mm(envParms[2]); +#endif Volume envLog = Volume(pincer.envName, envSolid, ns.material(pincer.envMat)); array blkParms{{pincer.envWidthHalf, pincer.envHeightHalf, pincer.blkLengthHalf}}; Solid blkSolid = Box(pincer.blkName, blkParms[0], blkParms[1], blkParms[2]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pincer.blkName << " Box " << cms::convert2mm(blkParms[0]) << ":" + << cms::convert2mm(blkParms[1]) << ":" << cms::convert2mm(blkParms[2]); +#endif Volume blkLog = Volume(pincer.blkName, blkSolid, ns.material(pincer.blkMat)); - envLog.placeVolume(blkLog, copyOne, Position(0_mm, 0_mm, pincer.envLengthHalf - pincer.blkLengthHalf)); + envLog.placeVolume(blkLog, copyOne, Position(0, 0, pincer.envLengthHalf - pincer.blkLengthHalf)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << blkLog.name() << ":" << copyOne << " positioned in " << envLog.name(); + edm::LogVerbatim("EBGeomX") << blkLog.name() << ":" << copyOne << " positioned in " << envLog.name() + << " at (0,0," << cms::convert2mm(pincer.envLengthHalf - pincer.blkLengthHalf) + << ") with no rotation"; #endif array cutParms{{pincer.cutWidth / 2., pincer.cutHeight / 2., pincer.blkLengthHalf}}; Solid cutSolid = Box(pincer.cutName, cutParms[0], cutParms[1], cutParms[2]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pincer.cutName << " Box " << cms::convert2mm(cutParms[0]) << ":" + << cms::convert2mm(cutParms[1]) << ":" << cms::convert2mm(cutParms[2]); +#endif Volume cutLog = Volume(pincer.cutName, cutSolid, ns.material(pincer.cutMat)); blkLog.placeVolume( cutLog, copyOne, Position( - +blkParms[0] - cutParms[0] - pincer.shim1Width + pincer.shim2Width, -blkParms[1] + cutParms[1], 0_mm)); + +blkParms[0] - cutParms[0] - pincer.shim1Width + pincer.shim2Width, -blkParms[1] + cutParms[1], 0)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << cutLog.name() << ":" << copyOne << " positioned in " << blkLog.name(); + edm::LogVerbatim("EBGeomX") << cutLog.name() << ":" << copyOne << " positioned in " << blkLog.name() << " at (" + << cms::convert2mm(+blkParms[0] - cutParms[0] - pincer.shim1Width + + pincer.shim2Width) + << "," << cms::convert2mm(-blkParms[1] + cutParms[1]) << ",0) with no rotation"; #endif array shim2Parms{{pincer.shim2Width / 2., pincer.shimHeight / 2., pincer.blkLengthHalf}}; Solid shim2Solid = Box(pincer.shim2Name, shim2Parms[0], shim2Parms[1], shim2Parms[2]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pincer.shim2Name << " Box " << cms::convert2mm(shim2Parms[0]) << ":" + << cms::convert2mm(shim2Parms[1]) << ":" << cms::convert2mm(shim2Parms[2]); +#endif Volume shim2Log = Volume(pincer.shim2Name, shim2Solid, ns.material(pincer.shimMat)); - cutLog.placeVolume( - shim2Log, copyOne, Position(+cutParms[0] - shim2Parms[0], -cutParms[1] + shim2Parms[1], 0_mm)); + cutLog.placeVolume(shim2Log, copyOne, Position(+cutParms[0] - shim2Parms[0], -cutParms[1] + shim2Parms[1], 0)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << shim2Log.name() << ":" << copyOne << " positioned in " << cutLog.name(); + edm::LogVerbatim("EBGeomX") << shim2Log.name() << ":" << copyOne << " positioned in " << cutLog.name() + << " at (" << cms::convert2mm(cutParms[0] - shim2Parms[0]) << "," + << cms::convert2mm(-cutParms[1] + shim2Parms[1]) << ",0) with no rotation"; #endif array shim1Parms{ {pincer.shim1Width / 2., pincer.shimHeight / 2., pincer.envLengthHalf - pincer.blkLengthHalf}}; Solid shim1Solid = Box(pincer.shim1Name, shim1Parms[0], shim1Parms[1], shim1Parms[2]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << pincer.shim1Name << " Box " << cms::convert2mm(shim1Parms[0]) << ":" + << cms::convert2mm(shim1Parms[1]) << ":" << cms::convert2mm(shim1Parms[2]); +#endif Volume shim1Log = Volume(pincer.shim1Name, shim1Solid, ns.material(pincer.shimMat)); envLog.placeVolume( shim1Log, copyOne, Position(+envParms[0] - shim1Parms[0], -envParms[1] + shim1Parms[1], -envParms[2] + shim1Parms[2])); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << shim1Log.name() << ":" << copyOne << " positioned in " << envLog.name(); + edm::LogVerbatim("EBGeomX") << shim1Log.name() << ":" << copyOne << " positioned in " << envLog.name() + << " at (" << cms::convert2mm(envParms[0] - shim1Parms[0]) << "," + << cms::convert2mm(-envParms[1] + shim1Parms[1]) << "," + << cms::convert2mm(-envParms[2] + shim1Parms[2]) << ") with no rotation"; #endif for (unsigned int iEnv(0); iEnv != pincer.vecEnvZOff.size(); ++iEnv) { rodLog.placeVolume( - envLog, 1 + iEnv, Position(0_mm, 0_mm, -ilyLengthHalf + pincer.vecEnvZOff[iEnv] - pincer.envLengthHalf)); + envLog, 1 + iEnv, Position(0, 0, -ilyLengthHalf + pincer.vecEnvZOff[iEnv] - pincer.envLengthHalf)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << envLog.name() << ":" << (1 + iEnv) << " positioned in " << rodLog.name(); + edm::LogVerbatim("EBGeomX") << envLog.name() << ":" << (1 + iEnv) << " positioned in " << rodLog.name() + << " at (0,0," + << cms::convert2mm(-ilyLengthHalf + pincer.vecEnvZOff[iEnv] - + pincer.envLengthHalf) + << ") with no rotation"; #endif } // Place the rods - const double radius(ilyRMin - pincer.envHeightHalf - 1_mm); + const double radius(ilyRMin - pincer.envHeightHalf - 1 * dd4hep::mm); const string xilyName(ily.name + std::to_string(ily.vecIlyMat.size() - 1)); for (unsigned int iRod(0); iRod != pincer.vecRodAzimuth.size(); ++iRod) { - const Position rodTra( - radius * cos(pincer.vecRodAzimuth[iRod]), radius * sin(pincer.vecRodAzimuth[iRod]), 0_mm); + const Position rodTra(radius * cos(pincer.vecRodAzimuth[iRod]), radius * sin(pincer.vecRodAzimuth[iRod]), 0); xilyLog.placeVolume(rodLog, 1 + iRod, Transform3D(myrot(ns, @@ -2588,7 +3034,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext CLHEP::HepRotationZ(90_deg + pincer.vecRodAzimuth[iRod])), rodTra)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << rodLog.name() << ":" << (1 + iRod) << " positioned in " << xilyLog.name(); + edm::LogVerbatim("EBGeomX") << rodLog.name() << ":" << (1 + iRod) << " positioned in " << xilyLog.name() + << " at (" << cms::convert2mm(rodTra.x()) << "," << cms::convert2mm(rodTra.y()) + << "," << cms::convert2mm(rodTra.z()) << ") with rotation"; #endif } } diff --git a/Geometry/EcalCommonData/plugins/dd4hep/DDEcalEndcapAlgo.cc b/Geometry/EcalCommonData/plugins/dd4hep/DDEcalEndcapAlgo.cc index 5bd7f36b4dcd5..e8efe7e37608c 100644 --- a/Geometry/EcalCommonData/plugins/dd4hep/DDEcalEndcapAlgo.cc +++ b/Geometry/EcalCommonData/plugins/dd4hep/DDEcalEndcapAlgo.cc @@ -1,7 +1,8 @@ #include "DD4hep/DetFactoryHelper.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" #include "DetectorDescription/DDCMS/interface/BenchmarkGrd.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" +#include "DataFormats/Math/interface/angle_units.h" // Header files for endcap supercrystal geometry #include "Geometry/EcalCommonData/interface/DDEcalEndcapTrap.h" #include @@ -9,24 +10,23 @@ #include #include -using namespace std; -using namespace cms; -using namespace dd4hep; -using namespace cms_units::operators; +using namespace angle_units::operators; using DDTranslation = ROOT::Math::DisplacementVector3D >; using DDRotation = ROOT::Math::Rotation3D; +//#define EDM_ML_DEBUG + namespace { struct Endcap { - string mat; + std::string mat; double zOff; - string quaName; - string quaMat; + std::string quaName; + std::string quaMat; - string crysMat; - string wallMat; + std::string crysMat; + std::string wallMat; double crysLength; double crysRear; @@ -42,23 +42,23 @@ namespace { double sCHSide; double nSCTypes; - vector vecEESCProf; + std::vector vecEESCProf; double nColumns; - vector vecEEShape; + std::vector vecEEShape; double nSCCutaway; - vector vecEESCCutaway; + std::vector vecEESCCutaway; double nSCquad; - vector vecEESCCtrs; + std::vector vecEESCCtrs; double nCRSC; - vector vecEECRCtrs; + std::vector vecEECRCtrs; - array cutParms; - string cutBoxName; + std::array cutParms; + std::string cutBoxName; - string envName; - string alvName; - string intName; - string cryName; + std::string envName; + std::string alvName; + std::string intName; + std::string cryName; DDTranslation cryFCtr[5][5]; DDTranslation cryRCtr[5][5]; @@ -69,7 +69,7 @@ namespace { double pFFifth; double pF45; - vector vecEESCLims; + std::vector vecEESCLims; double iLength; double iXYOff; @@ -77,13 +77,13 @@ namespace { double zFront; }; - const Rotation3D& myrot(cms::DDNamespace& ns, const string& nam, const Rotation3D& r) { + const DDRotation& myrot(cms::DDNamespace& ns, const std::string& nam, const DDRotation& r) { ns.addRotation(nam, r); return ns.rotation(ns.prepend(nam)); } - string_view mynamespace(string_view input) { - string_view v = input; + std::string_view mynamespace(std::string_view input) { + std::string_view v = input; auto trim_pos = v.find(':'); if (trim_pos != v.npos) v.remove_suffix(v.size() - (trim_pos + 1)); @@ -97,7 +97,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext cms::DDAlgoArguments args(ctxt, e); // TRICK! - string myns{mynamespace(args.parentName()).data(), mynamespace(args.parentName()).size()}; + std::string myns{mynamespace(args.parentName()).data(), mynamespace(args.parentName()).size()}; Endcap ee; ee.mat = args.str("EEMat"); @@ -154,10 +154,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ee.cutParms[0] = cutWid; ee.cutParms[1] = cutWid; ee.cutParms[2] = ee.sCELength / sqrt(2.); - Solid eeCutBox = Box(ee.cutBoxName, ee.cutParms[0], ee.cutParms[1], ee.cutParms[2]); + dd4hep::Solid eeCutBox = dd4hep::Box(ee.cutBoxName, ee.cutParms[0], ee.cutParms[1], ee.cutParms[2]); //************************************************************** - const double zFix(ee.zFront - 3172_mm); // fix for changing z offset + const double zFix(ee.zFront - 3172 * dd4hep::mm); // fix for changing z offset //** fill supercrystal front and rear center positions from xml input for (unsigned int iC(0); iC != (unsigned int)ee.nSCquad; ++iC) { @@ -189,82 +189,115 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext DDTranslation(ee.vecEECRCtrs[iOff + 3], ee.vecEECRCtrs[iOff + 5], ee.vecEECRCtrs[iOff + 7]); } - Solid eeCRSolid = Trap(ee.cryName, - 0.5 * ee.crysLength, - atan((ee.crysRear - ee.crysFront) / (sqrt(2.) * ee.crysLength)), - 45._deg, - 0.5 * ee.crysFront, - 0.5 * ee.crysFront, - 0.5 * ee.crysFront, - 0._deg, - 0.5 * ee.crysRear, - 0.5 * ee.crysRear, - 0.5 * ee.crysRear, - 0._deg); - Volume eeCRLog = Volume(ee.cryName, eeCRSolid, ns.material(ee.crysMat)); + dd4hep::Solid eeCRSolid = dd4hep::Trap(ee.cryName, + 0.5 * ee.crysLength, + atan((ee.crysRear - ee.crysFront) / (sqrt(2.) * ee.crysLength)), + 45._deg, + 0.5 * ee.crysFront, + 0.5 * ee.crysFront, + 0.5 * ee.crysFront, + 0._deg, + 0.5 * ee.crysRear, + 0.5 * ee.crysRear, + 0.5 * ee.crysRear, + 0._deg); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << eeCRSolid.name() << " Trap with parameters: " << cms::convert2mm(0.5 * ee.crysLength) + << ":" << (atan((ee.crysRear - ee.crysFront) / (sqrt(2.) * ee.crysLength))) << ":" + << 45._deg << ":" << cms::convert2mm(0.5 * ee.crysFront) << ":" + << cms::convert2mm(0.5 * ee.crysFront) << ":" << cms::convert2mm(0.5 * ee.crysFront) + << ":" << 0._deg << ":" << cms::convert2mm(0.5 * ee.crysRear) << ":" + << cms::convert2mm(0.5 * ee.crysRear) << ":" << cms::convert2mm(0.5 * ee.crysRear) << ":" + << 0._deg; +#endif + dd4hep::Volume eeCRLog = dd4hep::Volume(myns + ee.cryName, eeCRSolid, ns.material(ee.crysMat)); for (unsigned int isc(0); isc < ee.nSCTypes; ++isc) { unsigned int iSCType = isc + 1; - const string anum(std::to_string(iSCType)); + const std::string anum(std::to_string(iSCType)); const double eFront(0.5 * ee.sCEFront); const double eRear(0.5 * ee.sCERear); const double eAng(atan((ee.sCERear - ee.sCEFront) / (sqrt(2.) * ee.sCELength))); const double ffived(45_deg); const double zerod(0_deg); - string eeSCEnvName(1 == iSCType ? ee.envName + std::to_string(iSCType) - : (ee.envName + std::to_string(iSCType) + "Tmp")); - Solid eeSCEnv = ns.addSolidNS( + std::string eeSCEnvName(1 == iSCType ? ee.envName + std::to_string(iSCType) + : (ee.envName + std::to_string(iSCType) + "Tmp")); + dd4hep::Solid eeSCEnv = ns.addSolidNS( eeSCEnvName, - Trap(eeSCEnvName, 0.5 * ee.sCELength, eAng, ffived, eFront, eFront, eFront, zerod, eRear, eRear, eRear, zerod)); + dd4hep::Trap( + eeSCEnvName, 0.5 * ee.sCELength, eAng, ffived, eFront, eFront, eFront, zerod, eRear, eRear, eRear, zerod)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << eeSCEnv.name() << " Trap with parameters: " << cms::convert2mm(0.5 * ee.sCELength) + << ":" << eAng << ":" << ffived << ":" << cms::convert2mm(eFront) << ":" + << cms::convert2mm(eFront) << ":" << cms::convert2mm(eFront) << ":" << zerod << ":" + << cms::convert2mm(eRear) << ":" << cms::convert2mm(eRear) << ":" + << cms::convert2mm(eRear) << ":" << zerod; +#endif const double aFront(0.5 * ee.sCAFront); const double aRear(0.5 * ee.sCARear); const double aAng(atan((ee.sCARear - ee.sCAFront) / (sqrt(2.) * ee.sCALength))); - string eeSCAlvName( + std::string eeSCAlvName( (1 == iSCType ? ee.alvName + std::to_string(iSCType) : (ee.alvName + std::to_string(iSCType) + "Tmp"))); - Solid eeSCAlv = ns.addSolidNS( + dd4hep::Solid eeSCAlv = ns.addSolidNS( eeSCAlvName, - Trap(eeSCAlvName, 0.5 * ee.sCALength, aAng, ffived, aFront, aFront, aFront, zerod, aRear, aRear, aRear, zerod)); + dd4hep::Trap( + eeSCAlvName, 0.5 * ee.sCALength, aAng, ffived, aFront, aFront, aFront, zerod, aRear, aRear, aRear, zerod)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << eeSCAlv.name() << " Trap with parameters: " << cms::convert2mm(0.5 * ee.sCALength) + << ":" << aAng << ":" << ffived << ":" << cms::convert2mm(aFront) << ":" + << cms::convert2mm(aFront) << ":" << cms::convert2mm(aFront) << ":" << zerod << ":" + << cms::convert2mm(aRear) << ":" << cms::convert2mm(aRear) << ":" + << cms::convert2mm(aRear) << ":" << zerod; +#endif const double dwall(ee.sCAWall); const double iFront(aFront - dwall); const double iRear(iFront); const double iLen(ee.iLength); - string eeSCIntName(1 == iSCType ? ee.intName + std::to_string(iSCType) - : (ee.intName + std::to_string(iSCType) + "Tmp")); - Solid eeSCInt = ns.addSolidNS(eeSCIntName, - Trap(eeSCIntName, - iLen / 2., - atan((ee.sCARear - ee.sCAFront) / (sqrt(2.) * ee.sCALength)), - ffived, - iFront, - iFront, - iFront, - zerod, - iRear, - iRear, - iRear, - zerod)); + std::string eeSCIntName(1 == iSCType ? ee.intName + std::to_string(iSCType) + : (ee.intName + std::to_string(iSCType) + "Tmp")); + dd4hep::Solid eeSCInt = ns.addSolidNS(eeSCIntName, + dd4hep::Trap(eeSCIntName, + iLen / 2., + atan((ee.sCARear - ee.sCAFront) / (sqrt(2.) * ee.sCALength)), + ffived, + iFront, + iFront, + iFront, + zerod, + iRear, + iRear, + iRear, + zerod)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << eeSCAlv.name() << " Trap with parameters: " << cms::convert2mm(iLen / 2.) << ":" + << (atan((ee.sCARear - ee.sCAFront) / (sqrt(2.) * ee.sCALength))) << ":" << ffived + << ":" << cms::convert2mm(iFront) << ":" << cms::convert2mm(iFront) << ":" + << cms::convert2mm(iFront) << ":" << zerod << ":" << cms::convert2mm(iRear) << ":" + << cms::convert2mm(iRear) << ":" << cms::convert2mm(iRear) << ":" << zerod; +#endif const double dz(-0.5 * (ee.sCELength - ee.sCALength)); const double dxy(0.5 * dz * (ee.sCERear - ee.sCEFront) / ee.sCELength); const double zIOff(-(ee.sCALength - iLen) / 2.); const double xyIOff(ee.iXYOff); - Volume eeSCELog; - Volume eeSCALog; - Volume eeSCILog; + dd4hep::Volume eeSCELog; + dd4hep::Volume eeSCALog; + dd4hep::Volume eeSCILog; if (1 == iSCType) { // standard SC in this block - eeSCELog = ns.addVolumeNS(Volume(myns + ee.envName + std::to_string(iSCType), eeSCEnv, ns.material(ee.mat))); - eeSCALog = Volume(ee.alvName + std::to_string(iSCType), eeSCAlv, ns.material(ee.wallMat)); - eeSCILog = Volume(ee.intName + std::to_string(iSCType), eeSCInt, ns.material(ee.mat)); + eeSCELog = + ns.addVolumeNS(dd4hep::Volume(myns + ee.envName + std::to_string(iSCType), eeSCEnv, ns.material(ee.mat))); + eeSCALog = dd4hep::Volume(myns + ee.alvName + std::to_string(iSCType), eeSCAlv, ns.material(ee.wallMat)); + eeSCILog = dd4hep::Volume(myns + ee.intName + std::to_string(iSCType), eeSCInt, ns.material(ee.mat)); } else { // partial SCs this block: create subtraction volumes as appropriate const double half(ee.cutParms[0] - ee.pFHalf * ee.crysRear); const double fifth(ee.cutParms[0] + ee.pFFifth * ee.crysRear); const double fac(ee.pF45); - const double zmm(0_mm); + const double zmm(0 * dd4hep::mm); DDTranslation cutTra( 2 == iSCType ? DDTranslation(zmm, half, zmm) @@ -275,10 +308,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const CLHEP::HepRotationZ cutm(ffived); - Rotation3D cutRot(5 != iSCType ? Rotation3D() + DDRotation cutRot(5 != iSCType ? DDRotation() : myrot(ns, "EECry5Rot", - Rotation3D(cutm.xx(), + DDRotation(cutm.xx(), cutm.xy(), cutm.xz(), cutm.yx(), @@ -288,34 +321,56 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext cutm.zy(), cutm.zz()))); - Solid eeCutEnv = SubtractionSolid(ee.envName + std::to_string(iSCType), - ns.solid(ee.envName + std::to_string(iSCType) + "Tmp"), - eeCutBox, - Transform3D(cutRot, cutTra)); + dd4hep::Solid eeCutEnv = dd4hep::SubtractionSolid(ee.envName + std::to_string(iSCType), + ns.solid(ee.envName + std::to_string(iSCType) + "Tmp"), + eeCutBox, + dd4hep::Transform3D(cutRot, cutTra)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << eeCutEnv.name() << " Subtracted by " << cms::convert2mm(ee.cutParms[0]) << ":" + << cms::convert2mm(ee.cutParms[1]) << ":" << cms::convert2mm(ee.cutParms[2]); +#endif const DDTranslation extra(dxy, dxy, dz); - Solid eeCutAlv = SubtractionSolid(ee.alvName + std::to_string(iSCType), - ns.solid(ee.alvName + std::to_string(iSCType) + "Tmp"), - eeCutBox, - Transform3D(cutRot, cutTra - extra)); + dd4hep::Solid eeCutAlv = dd4hep::SubtractionSolid(ee.alvName + std::to_string(iSCType), + ns.solid(ee.alvName + std::to_string(iSCType) + "Tmp"), + eeCutBox, + dd4hep::Transform3D(cutRot, cutTra - extra)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << eeCutAlv.name() << " Subtracted by " << cms::convert2mm(ee.cutParms[0]) << ":" + << cms::convert2mm(ee.cutParms[1]) << ":" << cms::convert2mm(ee.cutParms[2]); +#endif const double mySign(iSCType < 4 ? +1. : -1.); - const DDTranslation extraI(xyIOff + mySign * 2_mm, xyIOff + mySign * 2_mm, zIOff); - - Solid eeCutInt = SubtractionSolid(ee.intName + std::to_string(iSCType), - ns.solid(ee.intName + std::to_string(iSCType) + "Tmp"), - eeCutBox, - Transform3D(cutRot, cutTra - extraI)); - - eeSCELog = ns.addVolumeNS(Volume(myns + ee.envName + std::to_string(iSCType), eeCutEnv, ns.material(ee.mat))); - eeSCALog = Volume(ee.alvName + std::to_string(iSCType), eeCutAlv, ns.material(ee.wallMat)); - eeSCILog = Volume(ee.intName + std::to_string(iSCType), eeCutInt, ns.material(ee.mat)); + const DDTranslation extraI(xyIOff + mySign * 2 * dd4hep::mm, xyIOff + mySign * 2 * dd4hep::mm, zIOff); + + dd4hep::Solid eeCutInt = dd4hep::SubtractionSolid(ee.intName + std::to_string(iSCType), + ns.solid(ee.intName + std::to_string(iSCType) + "Tmp"), + eeCutBox, + dd4hep::Transform3D(cutRot, cutTra - extraI)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << eeCutInt.name() << " Subtracted by " << cms::convert2mm(ee.cutParms[0]) << ":" + << cms::convert2mm(ee.cutParms[1]) << ":" << cms::convert2mm(ee.cutParms[2]); +#endif + + eeSCELog = + ns.addVolumeNS(dd4hep::Volume(myns + ee.envName + std::to_string(iSCType), eeCutEnv, ns.material(ee.mat))); + eeSCALog = dd4hep::Volume(myns + ee.alvName + std::to_string(iSCType), eeCutAlv, ns.material(ee.wallMat)); + eeSCILog = dd4hep::Volume(myns + ee.intName + std::to_string(iSCType), eeCutInt, ns.material(ee.mat)); } - eeSCELog.placeVolume(eeSCALog, iSCType * 100 + 1, Position(dxy, dxy, dz)); - eeSCALog.placeVolume(eeSCILog, iSCType * 100 + 1, Position(xyIOff, xyIOff, zIOff)); - + eeSCELog.placeVolume(eeSCALog, iSCType * 100 + 1, dd4hep::Position(dxy, dxy, dz)); + eeSCALog.placeVolume(eeSCILog, iSCType * 100 + 1, dd4hep::Position(xyIOff, xyIOff, zIOff)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EEGeom") << eeSCALog.name() << " " << (iSCType * 100 + 1) << " in " << eeSCELog.name(); + edm::LogVerbatim("EEGeom") << eeSCILog.name() << " " << (iSCType * 100 + 1) << " in " << eeSCALog.name(); + edm::LogVerbatim("EcalGeom") << eeSCALog.name() << " " << (iSCType * 100 + 1) << " in " << eeSCELog.name() + << " at (" << cms::convert2mm(dxy) << ", " << cms::convert2mm(dxy) << ", " + << cms::convert2mm(dz) << ")"; + edm::LogVerbatim("EcalGeom") << eeSCILog.name() << " " << (iSCType * 100 + 1) << " in " << eeSCALog.name() + << " at (" << cms::convert2mm(xyIOff) << ", " << cms::convert2mm(xyIOff) << ", " + << cms::convert2mm(zIOff) << ")"; +#endif DDTranslation croffset(0., 0., 0.); // Position crystals within parent supercrystal interior volume @@ -341,14 +396,23 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext crystal.moveto(ee.cryFCtr[icol - 1][irow - 1], ee.cryRCtr[icol - 1][irow - 1]); - string rname("EECrRoC" + std::to_string(icol) + "R" + std::to_string(irow)); - - eeSCALog.placeVolume( - eeCRLog, - 100 * iSCType + 10 * (icol - 1) + (irow - 1), - Transform3D( - myrot(ns, rname, crystal.rotation()), - Position(crystal.centrePos().x(), crystal.centrePos().y(), crystal.centrePos().z() - ee.cryZOff))); + std::string rname("EECrRoC" + std::to_string(icol) + "R" + std::to_string(irow)); + + eeSCALog.placeVolume(eeCRLog, + 100 * iSCType + 10 * (icol - 1) + (irow - 1), + dd4hep::Transform3D(myrot(ns, rname, crystal.rotation()), + dd4hep::Position(crystal.centrePos().x(), + crystal.centrePos().y(), + crystal.centrePos().z() - ee.cryZOff))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EEGeom") << eeCRLog.name() << " " << (100 * iSCType + 10 * (icol - 1) + (irow - 1)) + << " in " << eeSCALog.name(); + edm::LogVerbatim("EcalGeom") << eeCRLog.name() << " " << (100 * iSCType + 10 * (icol - 1) + (irow - 1)) + << " in " << eeSCALog.name() << " at (" + << cms::convert2mm(crystal.centrePos().x()) << ", " + << cms::convert2mm(crystal.centrePos().y()) << ", " + << cms::convert2mm((crystal.centrePos().z() - ee.cryZOff)) << ")"; +#endif } } } @@ -376,13 +440,21 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext scrys.moveto(ee.scrFCtr[icol - 1][irow - 1], ee.scrRCtr[icol - 1][irow - 1]); scrys.translate(DDTranslation(0., 0., -ee.zOff)); - string rname(ee.envName + std::to_string(isctype) + std::to_string(icol) + "R" + std::to_string(irow)); + std::string rname(ee.envName + std::to_string(isctype) + std::to_string(icol) + "R" + std::to_string(irow)); // Position SC in endcap - Volume quaLog = ns.volume(ee.quaName); - Volume childEnvLog = ns.volume(myns + ee.envName + std::to_string(isctype)); + dd4hep::Volume quaLog = ns.volume(ee.quaName); + dd4hep::Volume childEnvLog = ns.volume(myns + ee.envName + std::to_string(isctype)); quaLog.placeVolume(childEnvLog, 100 * isctype + 10 * (icol - 1) + (irow - 1), - Transform3D(scrys.rotation(), scrys.centrePos())); + dd4hep::Transform3D(scrys.rotation(), scrys.centrePos())); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EEGeom") << childEnvLog.name() << " " << (100 * isctype + 10 * (icol - 1) + (irow - 1)) + << " in " << quaLog.name(); + edm::LogVerbatim("EcalGeom") << childEnvLog.name() << " " << (100 * isctype + 10 * (icol - 1) + (irow - 1)) + << " in " << quaLog.name() << " at (" << cms::convert2mm(scrys.centrePos().x()) + << ", " << cms::convert2mm(scrys.centrePos().y()) << ", " + << cms::convert2mm(scrys.centrePos().z()) << ")"; +#endif } } } diff --git a/Geometry/EcalCommonData/plugins/dd4hep/DDEcalPreshowerAlgo.cc b/Geometry/EcalCommonData/plugins/dd4hep/DDEcalPreshowerAlgo.cc index 93d16db5338fe..fabe6d3cf75ac 100644 --- a/Geometry/EcalCommonData/plugins/dd4hep/DDEcalPreshowerAlgo.cc +++ b/Geometry/EcalCommonData/plugins/dd4hep/DDEcalPreshowerAlgo.cc @@ -1,7 +1,8 @@ #include "DD4hep/DetFactoryHelper.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" #include "DetectorDescription/DDCMS/interface/BenchmarkGrd.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DD4hep/Shapes.h" #include @@ -10,7 +11,9 @@ using namespace std; using namespace cms; using namespace dd4hep; -using namespace cms_units::operators; +using namespace angle_units::operators; + +//#define EDM_ML_DEBUG namespace { @@ -160,6 +163,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext // create a logical part representing a single layer in the preshower Solid solid = ns.addSolid(ddname, Tube(ddname, rIn, rOut, zHalf, 0., 360._deg)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << ddname << " Tubs " << cms::convert2mm(zHalf) << ":" << cms::convert2mm(rIn) << ":" + << cms::convert2mm(rOut) << ":0:360"; +#endif Volume layer = ns.addVolume(Volume(ddname, solid, ns.material(es.materials[i]))); // position the logical part w.r.t. the parent volume @@ -205,33 +212,53 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const string& dd_Alname_l("esalgo:" + es.layName[i] + "LOutAltmp5"); const string& dd_Alname_m("esalgo:" + es.layName[i] + "LOutAltmp6"); - Solid outAl = - ns.addSolid(dd_Alname_f, Tube(dd_Alname_f, es.rMax_Abs_Al - 70_cm, es.rMax_Abs_Al, zHalf, 0., 90._deg)); + Solid outAl = ns.addSolid( + dd_Alname_f, Tube(dd_Alname_f, es.rMax_Abs_Al - 70 * dd4hep::cm, es.rMax_Abs_Al, zHalf, 0., 90._deg)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_Alname_f << " Tubs " << cms::convert2mm(zHalf - 0.1 * dd4hep::mm) << ":" + << cms::convert2mm(es.rMax_Abs_Al - 20 * dd4hep::cm) << ":" + << cms::convert2mm(es.rMax_Abs_Al) << ":0:90"; +#endif outalbx = es.absAlX_X * 0.1; - outalby = es.rMax_Abs_Al + 0.1_mm - es.absAlX_subtr1_Yshift; + outalby = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlX_subtr1_Yshift; shiftR = es.absAlX_subtr1_Yshift; if (I == 20) { outalbx = es.absAlY_X * 0.1; - outalby = es.rMax_Abs_Al + 0.1_mm - es.absAlY_subtr1_Yshift; + outalby = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlY_subtr1_Yshift; shiftR = es.absAlY_subtr1_Xshift; } - Solid outAltmp = - ns.addSolid(dd_Alname_h, Box(dd_Alname_h, outalbx / 2. + 0.1_mm, outalby / 2. + 0.1_mm, zHalf + 0.1_mm)); + Solid outAltmp = ns.addSolid(dd_Alname_h, + Box(dd_Alname_h, + outalbx / 2. + 0.1 * dd4hep::mm, + outalby / 2. + 0.1 * dd4hep::mm, + zHalf + 0.1 * dd4hep::mm)); Solid outAltmp3 = ns.addSolid( dd_Alname_j, SubtractionSolid(dd_Alname_j, outAl, outAltmp, Position(outalbx / 2., outalby / 2. + shiftR, 0))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_Alname_h << " Box " << cms::convert2mm(outalbx / 2. + 0.1 * dd4hep::mm) << ":" + << cms::convert2mm(outalby / 2. + 0.1 * dd4hep::mm) << ":" + << cms::convert2mm(zHalf); + edm::LogVerbatim("SFGeomX") << dd_Alname_j << " Subtraction " << outAl.name() << ":" << outAltmp.name() + << " at (" << cms::convert2mm(outalbx / 2.) << "," + << cms::convert2mm(outalby / 2. + shiftR) << "," + << "0) no rotation"; +#endif outalby2 = es.absAlX_Y * 0.1; - outalbx2 = es.rMax_Abs_Al + 0.1_mm - es.absAlX_subtr1_Xshift; + outalbx2 = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlX_subtr1_Xshift; shiftR2 = es.absAlX_subtr1_Xshift; if (I == 20) { outalby2 = es.absAlY_Y * 0.1; - outalbx2 = es.rMax_Abs_Al + 0.1_mm - es.absAlY_subtr1_Xshift; + outalbx2 = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlY_subtr1_Xshift; shiftR2 = es.absAlY_subtr1_Xshift; } - Solid outAltmp2 = - ns.addSolid(dd_Alname_i, Box(dd_Alname_i, outalbx2 / 2. + 0.1_mm, outalby2 / 2. + 0.1_mm, zHalf + 0.1_mm)); + Solid outAltmp2 = ns.addSolid(dd_Alname_i, + Box(dd_Alname_i, + outalbx2 / 2. + 0.1 * dd4hep::mm, + outalby2 / 2. + 0.1 * dd4hep::mm, + zHalf + 0.1 * dd4hep::mm)); Solid outAltmp4 = ns.addSolid( dd_Alname_k, SubtractionSolid(dd_Alname_k, outAltmp3, outAltmp2, Position(outalbx2 / 2. + shiftR2, outalby2 / 2., 0))); @@ -242,9 +269,27 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Solid outAl2 = ns.addSolid(dd_Alname_g, UnionSolid(dd_Alname_g, outAltmp6, outAltmp4, ns.rotation("esalgo:R180"))); - Solid outAlCut = Box(65_cm, 60_cm - 0.1_mm, zHalf + 0.2_mm); + Solid outAlCut = Box(65 * dd4hep::cm, 60 * dd4hep::cm - 0.1 * dd4hep::mm, zHalf + 0.2 * dd4hep::mm); Solid outAlFin = SubtractionSolid(outAl2, outAlCut); - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_Alname_i << " Box " << cms::convert2mm(outalbx2 / 2. + 0.1 * dd4hep::mm) + << ":" << cms::convert2mm(outalby2 / 2. + 0.1 * dd4hep::mm) << ":" + << cms::convert2mm(zHalf); + edm::LogVerbatim("SFGeomX") << dd_Alname_k << " Subtraction " << outAltmp3.name() << ":" << outAltmp2.name() + << " at (" << cms::convert2mm(outalbx2 / 2. + shiftR2) << "," + << cms::convert2mm(outalby2 / 2) << ",0) no rotation"; + edm::LogVerbatim("SFGeomX") << dd_Alname_l << " Union " << outAltmp4.name() << ":" << outAltmp4.name() + << " at (0,0,0) rotation esalgo:RABS90"; + edm::LogVerbatim("SFGeomX") << dd_Alname_m << " Union " << outAltmp5.name() << ":" << outAltmp4.name() + << " at (0,0,0) rotation esalgo:RABS180B"; + edm::LogVerbatim("SFGeomX") << dd_Alname_g << " Union " << outAltmp6.name() << ":" << outAltmp4.name() + << " at (0,0,0) rotation esalgo:R180"; + edm::LogVerbatim("SFGeomX") << outAlCut.name() << " Box " << cms::convert2mm(65 * dd4hep::cm) << ":" + << cms::convert2mm(60 * dd4hep::cm - 0.1 * dd4hep::mm) << ":" + << cms::convert2mm(zHalf + 0.2 * dd4hep::mm); + edm::LogVerbatim("SFGeomX") << outAlFin.name() << " Subtraction " << outAl2.name() << ":" << outAlCut.name() + << " at (0,0,0) no rotation"; +#endif Volume layerFinOutAl = Volume(dd_tmp_name_f, outAlFin, ns.material(es.materials[i - 1])); for (int L = 0; L < absz; ++L) { @@ -277,8 +322,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext if (L > 0) bdx = abs(es.abs1stx[K] - es.abs1stx[K - 1]) / 2.; bdy = es.abs1sty[K]; - if (es.abs1stx[K] < rIn + 30_cm) { - bdy = es.abs1sty[K] / 2. - 30_cm; + if (es.abs1stx[K] < rIn + 30 * dd4hep::cm) { + bdy = es.abs1sty[K] / 2. - 30 * dd4hep::cm; cutabsx = K; } @@ -290,66 +335,134 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext bdy = es.abs2ndy[K]; } - if ((es.abs2ndx[K] < rIn + 30_cm) && I == 20) { - bdy = es.abs2ndy[K] / 2. - 30_cm; + if ((es.abs2ndx[K] < rIn + 30 * dd4hep::cm) && I == 20) { + bdy = es.abs2ndy[K] / 2. - 30 * dd4hep::cm; cutabsy = K; } Solid solid_b = Box(dd_tmp_name_b, bdx, bdy, zHalf); - Solid solid_b2 = Box(dd_tmp_name_b2, bdx + 0.1_mm, bdy + 0.1_mm, zHalf); - + Solid solid_b2 = Box(dd_tmp_name_b2, bdx + 0.1 * dd4hep::mm, bdy + 0.1 * dd4hep::mm, zHalf); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Box " << cms::convert2mm(bdx) << ":" << cms::convert2mm(bdy) + << ":" << cms::convert2mm(zHalf); + edm::LogVerbatim("SFGeomX") << dd_tmp_name_b2 << " Box " << cms::convert2mm(bdx + 0.1 * dd4hep::mm) << ":" + << cms::convert2mm(bdy + 0.1 * dd4hep::mm) << ":" << cms::convert2mm(zHalf); +#endif sdx = es.abs1stx[K] - bdx; sdy = 0; - if (es.abs1stx[K] < rIn + 30_cm) + if (es.abs1stx[K] < rIn + 30 * dd4hep::cm) sdy = es.abs1sty[K] - bdy; if (I == 20) { sdx = es.abs2ndx[K] - bdx; sdy = 0; } - if ((es.abs2ndx[K] < rIn + 30_cm) && I == 20) + if ((es.abs2ndx[K] < rIn + 30 * dd4hep::cm) && I == 20) sdy = es.abs2ndy[K] - bdy; Volume layer = Volume(dd_tmp_name_b, solid_b, ns.material(es.materials[i])); layerFinOutAl.placeVolume(layer, 1, Position(sdx, sdy, 0)); layerFinOutAl.placeVolume(layer, 2, Position(-sdx, sdy, 0)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << layer.name() << " copy 1 in " << layerFinOutAl.name() << " at (" + << cms::convert2mm(sdx) << "," << cms::convert2mm(sdy) << ",0) no rotation"; + edm::LogVerbatim("SFGeom") << layer.name() << " copy 2 in " << layerFinOutAl.name() << " at (" + << -cms::convert2mm(sdx) << "," << cms::convert2mm(sdy) << ",0) no rotation"; +#endif Solid solid_c = ns.solid(dd_FAl_name_c); Solid solid_d1 = UnionSolid(dd_FAl_name_d1, solid_c, solid_b2, Position(sdx, sdy, 0)); Solid solid_d2 = ns.addSolid(dd_FAl_name_d, UnionSolid(dd_FAl_name_d, solid_d1, solid_b2, Position(-sdx, -sdy, 0))); - - if (((es.abs1stx[K] < rIn + 30_cm) && I == 10) || ((es.abs2ndx[K] < rIn + 30_cm) && I == 20)) { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_FAl_name_d1 << " Union " << solid_c.name() << ":" << solid_b2.name() + << " at (" << cms::convert2mm(sdx) << "," << cms::convert2mm(sdy) + << ",0) no rotation"; + edm::LogVerbatim("SFGeomX") << dd_FAl_name_d << " Union " << solid_d1.name() << ":" << solid_b2.name() + << " at (" << -cms::convert2mm(sdx) << "," << -cms::convert2mm(sdy) + << ",0) no rotation"; +#endif + + if (((es.abs1stx[K] < rIn + 30 * dd4hep::cm) && I == 10) || + ((es.abs2ndx[K] < rIn + 30 * dd4hep::cm) && I == 20)) { layerFinOutAl.placeVolume(layer, 3, Position(sdx, -sdy, 0)); layerFinOutAl.placeVolume(layer, 4, Position(-sdx, -sdy, 0)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << layer.name() << " copy 3 in " << layerFinOutAl.name() << " at (" + << cms::convert2mm(sdx) << "," << -cms::convert2mm(sdy) << ",0) no rotation"; + edm::LogVerbatim("SFGeom") << layer.name() << " copy 4 in " << layerFinOutAl.name() << " at (" + << -cms::convert2mm(sdx) << "," << -cms::convert2mm(sdy) << ",0) no rotation"; +#endif Solid solid_c = ns.solid(dd_FAl_name_c); Solid solid_d1 = UnionSolid(dd_FAl_name_d1, solid_c, solid_b2, Position(sdx, sdy, 0)); ns.addSolid(dd_FAl_name_d2, UnionSolid(dd_FAl_name_d2, solid_d1, solid_b2, Position(sdx, -sdy, 0))); Solid solid_d3 = UnionSolid(dd_FAl_name_d3, solid_d2, solid_b2, Position(-sdx, sdy, 0)); ns.addSolid(dd_FAl_name_d, UnionSolid(dd_FAl_name_d, solid_d3, solid_b2, Position(-sdx, -sdy, 0))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_FAl_name_d1 << " Union " << solid_c.name() << ":" << solid_b2.name() + << " at (" << cms::convert2mm(sdx) << "," << cms::convert2mm(sdy) + << ",0) no rotation"; + edm::LogVerbatim("SFGeomX") << dd_FAl_name_d2 << " Union " << solid_d1.name() << ":" << solid_b2.name() + << " at (" << cms::convert2mm(sdx) << "," << -cms::convert2mm(sdy) + << ",0) no rotation"; + edm::LogVerbatim("SFGeomX") << dd_FAl_name_d3 << " Union " << solid_d2.name() << ":" << solid_b2.name() + << " at (" << -cms::convert2mm(sdx) << "," << cms::convert2mm(sdy) + << ",0) no rotation"; + edm::LogVerbatim("SFGeomX") << dd_FAl_name_d << " Union " << solid_d3.name() << ":" << solid_b2.name() + << " at (" << -cms::convert2mm(sdx) << "," << -cms::convert2mm(sdy) + << ",0) no rotation"; +#endif } } bdx = es.abs1stx[cutabsx]; if (I == 20) bdx = es.abs2ndx[cutabsy]; - bdy = 2 * 30_cm; + bdy = 2 * 30 * dd4hep::cm; Solid solidcut = Box(dd_tmp_name_b, bdx, bdy, zHalf); - Solid iner = Tube(dd_tmp_name_c, 0, es.in_rad_Abs_Pb, zHalf + 0.1_mm, 0., 360._deg); + Solid iner = Tube(dd_tmp_name_c, 0, es.in_rad_Abs_Pb, zHalf + 0.1 * dd4hep::mm, 0., 360._deg); Solid final = SubtractionSolid(dd_tmp_name_d, solidcut, iner); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Box " << cms::convert2mm(bdx) << ":" << cms::convert2mm(bdy) + << ":" << cms::convert2mm(zHalf); + edm::LogVerbatim("SFGeomX") << dd_tmp_name_c << " Tubs " << cms::convert2mm(zHalf + 0.1 * dd4hep::mm) + << ":0:" << cms::convert2mm(es.in_rad_Abs_Pb) << ":0:360"; + edm::LogVerbatim("SFGeomX") << dd_tmp_name_d << " Subtraction " << solidcut.name() << ":" << iner.name() + << " at (0,0,0) no rotation"; +#endif Volume blayer = Volume(dd_tmp_name_d, final, ns.material(es.materials[i])); parentVolume.placeVolume(blayer, 1, Position(0, 0, zpos)); - - Solid iner_Al = Tube(dd_tmp_name_e, es.in_rad_Abs_Al, es.in_rad_Abs_Pb - 0.01_mm, zHalf, 0., 360._deg); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << blayer.name() << " copy 1 in " << parentVolume.name() << " at (0,0," + << cms::convert2mm(zpos) << ") no rotation"; +#endif + + Solid iner_Al = + Tube(dd_tmp_name_e, es.in_rad_Abs_Al, es.in_rad_Abs_Pb - 0.01 * dd4hep::mm, zHalf, 0., 360._deg); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_e << " Tubs " << cms::convert2mm(zHalf) << ":" + << cms::convert2mm(es.in_rad_Abs_Al) << ":" + << cms::convert2mm(es.in_rad_Abs_Pb - 0.01 * dd4hep::mm) << ":0:360"; +#endif Volume layerAl = Volume(dd_tmp_name_e, iner_Al, ns.material(es.materials[i - 1])); parentVolume.placeVolume(layerAl, 1, Position(0, 0, zpos)); parentVolume.placeVolume(layerFinOutAl, 1, Position(0, 0, zpos)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << layerAl.name() << " copy 1 in " << parentVolume.name() << " at (0,0," + << cms::convert2mm(zpos) << ") no rotation"; + edm::LogVerbatim("SFGeom") << layerFinOutAl.name() << " copy 1 in " << parentVolume.name() << " at (0,0," + << cms::convert2mm(zpos) << ") no rotation"; +#endif } else { parentVolume.placeVolume(layer, 1, Position(0., 0., zpos)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << layer.name() << " copy 1 in " << parentVolume.name() << " at (0,0," + << cms::convert2mm(zpos) << ") no rotation"; +#endif } zpos += zHalf; } @@ -382,16 +495,16 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 0.); Solid solid_lbck = Trap("esalgo:LDRBCK", - es.ldrBck_Length / 2., // pDz - -es.wedge_angle, // pTheta - 0, // pPhi - es.ladder_width / 2., // pDy1 - (es.box_thick / cos(es.wedge_angle * 2) + 0.02_mm) / 2., // pDx1 - (es.box_thick / cos(es.wedge_angle * 2) + 0.02_mm) / 2., // pDx2 - 0, // pAlp1 - es.ladder_width / 2., // pDy2 - (es.ladder_thick - es.wedge_back_thick) / 2., // pDx3 - (es.ladder_thick - es.wedge_back_thick) / 2., // pDx4 + es.ldrBck_Length / 2., // pDz + -es.wedge_angle, // pTheta + 0, // pPhi + es.ladder_width / 2., // pDy1 + (es.box_thick / cos(es.wedge_angle * 2) + 0.02 * dd4hep::mm) / 2., // pDx1 + (es.box_thick / cos(es.wedge_angle * 2) + 0.02 * dd4hep::mm) / 2., // pDx2 + 0, // pAlp1 + es.ladder_width / 2., // pDy2 + (es.ladder_thick - es.wedge_back_thick) / 2., // pDx3 + (es.ladder_thick - es.wedge_back_thick) / 2., // pDx4 0.); Solid solid_lfhalf = Trap("esalgo:LDRFHALF", @@ -408,16 +521,16 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 0.); Solid solid_lbhalf = Trap("esalgo:LDRBHALF", - es.ldrBck_Length / 2., // pDz - -es.wedge_angle, // pTheta - 0, // pPhi - (es.ladder_width / 2.) / 2., // pDy1 - (es.box_thick / cos(es.wedge_angle * 2.) + 0.02_mm) / 2., // pDx1 - (es.box_thick / cos(es.wedge_angle * 2.) + 0.02_mm) / 2., // pDx2 - 0, // pAlp1 - (es.ladder_width / 2.) / 2., // pDy2 - (es.ladder_thick - es.wedge_back_thick) / 2., // pDx3 - (es.ladder_thick - es.wedge_back_thick) / 2., // pDx4 + es.ldrBck_Length / 2., // pDz + -es.wedge_angle, // pTheta + 0, // pPhi + (es.ladder_width / 2.) / 2., // pDy1 + (es.box_thick / cos(es.wedge_angle * 2.) + 0.02 * dd4hep::mm) / 2., // pDx1 + (es.box_thick / cos(es.wedge_angle * 2.) + 0.02 * dd4hep::mm) / 2., // pDx2 + 0, // pAlp1 + (es.ladder_width / 2.) / 2., // pDy2 + (es.ladder_thick - es.wedge_back_thick) / 2., // pDx3 + (es.ladder_thick - es.wedge_back_thick) / 2., // pDx4 0.); Solid solid_lfhtrunc = @@ -433,6 +546,49 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext (es.ladder_thick - (es.ceramic_length - es.waf_active) * sin(es.wedge_angle * 2)) / 2., // pDx3 (es.ladder_thick - (es.ceramic_length - es.waf_active) * sin(es.wedge_angle * 2)) / 2., // pDx4 0.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") + << "esalgo:LDRFRNT Trap " << cms::convert2mm(es.ldrFrnt_Length / 2.) << ":" + << -convertRadToDeg(es.wedge_angle) << ":0:" << cms::convert2mm(es.ladder_width / 2.) << ":" + << cms::convert2mm((es.ladder_thick) / 2.) << ":" << cms::convert2mm((es.ladder_thick) / 2.) + << ":0:" << cms::convert2mm(es.ladder_width / 2.) << ":" + << cms::convert2mm((es.ladder_thick - es.ceramic_length * sin(es.wedge_angle * 2.)) / 2.) << ":" + << cms::convert2mm((es.ladder_thick - es.ceramic_length * sin(es.wedge_angle * 2.)) / 2.) << ":0"; + edm::LogVerbatim("SFGeomX") << "esalgo:LDRBCK Trap " << cms::convert2mm(es.ldrBck_Length / 2.) << ":" + << -convertRadToDeg(es.wedge_angle) << ":0:" << cms::convert2mm(es.ladder_width / 2.) + << ":" + << cms::convert2mm((es.box_thick / cos(es.wedge_angle * 2) + 0.02 * dd4hep::mm) / 2.) + << ":" + << cms::convert2mm((es.box_thick / cos(es.wedge_angle * 2) + 0.02 * dd4hep::mm) / 2.) + << ":0:" << cms::convert2mm(es.ladder_width / 2.) << ":" + << cms::convert2mm((es.ladder_thick - es.wedge_back_thick) / 2.) << ":" + << cms::convert2mm((es.ladder_thick - es.wedge_back_thick) / 2.) << ":0"; + edm::LogVerbatim("SFGeomX") + << "esalgo:LDRFHALF Trap " << cms::convert2mm(es.ldrFrnt_Length / 2.) << ":" + << -convertRadToDeg(es.wedge_angle) << ":0:" << cms::convert2mm((es.ladder_width / 2.) / 2.) << ":" + << cms::convert2mm((es.ladder_thick) / 2.) << ":" << cms::convert2mm((es.ladder_thick) / 2.) + << ":0:" << cms::convert2mm((es.ladder_width / 2.) / 2.) << ":" + << cms::convert2mm((es.ladder_thick - es.ceramic_length * sin(es.wedge_angle * 2.)) / 2.) << ":" + << cms::convert2mm((es.ladder_thick - es.ceramic_length * sin(es.wedge_angle * 2.)) / 2.) << ":0"; + edm::LogVerbatim("SFGeomX") << "esalgo:LDRBHALF Trap " << cms::convert2mm(es.ldrBck_Length / 2.) << ":" + << -convertRadToDeg(es.wedge_angle) + << ":0:" << cms::convert2mm((es.ladder_width / 2.) / 2.) << ":" + << cms::convert2mm((es.box_thick / cos(es.wedge_angle * 2.) + 0.02 * dd4hep::mm) / 2.) + << ":" + << cms::convert2mm((es.box_thick / cos(es.wedge_angle * 2.) + 0.02 * dd4hep::mm) / 2.) + << ":0:" << cms::convert2mm((es.ladder_width / 2.) / 2.) << ":" + << cms::convert2mm((es.ladder_thick - es.wedge_back_thick) / 2.) << ":" + << cms::convert2mm((es.ladder_thick - es.wedge_back_thick) / 2.) << ":0"; + edm::LogVerbatim("SFGeomX") + << "esalgo:LDRFHTR Trap " << cms::convert2mm((es.ldrFrnt_Length - es.waf_active) / 2.) << ":" + << -convertRadToDeg(es.wedge_angle) << ":0:" << cms::convert2mm((es.ladder_width / 2.) / 2.) << ":" + << cms::convert2mm((es.ladder_thick) / 2.) << ":" << cms::convert2mm((es.ladder_thick) / 2.) + << ":0:" << cms::convert2mm((es.ladder_width / 2.) / 2.) << ":" + << cms::convert2mm((es.ladder_thick - (es.ceramic_length - es.waf_active) * sin(es.wedge_angle * 2)) / 2.) + << ":" + << cms::convert2mm((es.ladder_thick - (es.ceramic_length - es.waf_active) * sin(es.wedge_angle * 2)) / 2.) + << ":0"; +#endif // Creation of ladders with 5 micromodules length @@ -444,12 +600,16 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ladd_subtr_no++; if (j > 1) ladd_upper = 1; + ladd_side = i; } } } - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << "Side " << ladd_side << ":" << ladd_upper << ":" << ladd_subtr_no << ":" + << ladd_not_plain << " Index " << M << ":" << es.typesL5.size(); +#endif const string& ddname("esalgo:" + es.ladPfx[0] + es.typesL5[M]); - ladder_length = es.micromodule_length + 4 * es.waf_active + 0.1_mm; + ladder_length = es.micromodule_length + 4 * es.waf_active + 0.1 * dd4hep::mm; if (ladd_not_plain) { if (!ladd_upper) { @@ -463,6 +623,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext boxaz = es.ladder_thick; Solid solid_5a = Box(dd_tmp_name_5a, boxax / 2., boxay / 2., boxaz / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_5a << " Box " << cms::convert2mm(boxax / 2.) << ":" + << cms::convert2mm(boxay / 2.) << ":" << cms::convert2mm(boxaz / 2.); +#endif if (ladd_side == 0) sdxe[enb] = es.ladder_width / 4.; sdye[enb] = -boxay / 2. - es.ldrFrnt_Length / 2.; @@ -475,6 +639,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext solid_5a, solid_lfhalf, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe[enb], sdye[enb], sdze[enb]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_5b << " Union " << solid_5a.name() << ":" << solid_lfhalf.name() + << " at (" << cms::convert2mm(sdxe[enb]) << "," << cms::convert2mm(sdye[enb]) + << "," << cms::convert2mm(sdze[enb]) << ") rotation esalgo:RM1299"; +#endif if (ladd_side == 0) sdxe2[enb] = -es.ladder_width / 4.; @@ -488,6 +657,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext solid_5b, solid_lfhtrunc, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe2[enb], sdye2[enb], sdze2[enb]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_5c << " Union " << solid_5b.name() << ":" + << solid_lfhtrunc.name() << " at (" << cms::convert2mm(sdxe2[enb]) << "," + << cms::convert2mm(sdye2[enb]) << "," << cms::convert2mm(sdze2[enb]) + << ") rotation esalgo:RM1299"; +#endif sdxe3[enb] = 0; sdye3[enb] = boxay / 2. + es.ldrBck_Length / 2.; @@ -497,6 +672,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext solid_5c, solid_lbck, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe3[enb], sdye3[enb], sdze3[enb]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_5c.name() << ":" << solid_lbck.name() << " at (" + << cms::convert2mm(sdxe3[enb]) << "," << cms::convert2mm(sdye3[enb]) << "," + << cms::convert2mm(sdze3[enb]) << ") rotation esalgo:RM1299"; +#endif ns.addVolumeNS(Volume(ddname, solid, ns.material(es.laddMaterial))); ns.addVolumeNS(Volume("esalgo:" + es.ladPfx[1] + es.typesL5[M], solid, ns.material(es.laddMaterial))); @@ -511,6 +691,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext boxaz = es.ladder_thick; Solid solid_5pa = Box(dd_tmp_name_5pa, boxax / 2., boxay / 2., boxaz / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_5pa << " Box " << cms::convert2mm(boxax / 2) << ":" + << cms::convert2mm(boxay / 2) << ":" << cms::convert2mm(boxaz / 2); +#endif sdx = 0; sdy = -boxay / 2. - es.ldrFrnt_Length / 2.; sdz = -es.ladder_thick / 2. + es.ldrFrnt_Offset; @@ -519,6 +703,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext solid_5pa, solid_lfront, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdx, sdy, sdz))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_5pb << " Union " << solid_5pa.name() << ":" << solid_lfront.name() + << " at (" << cms::convert2mm(sdx) << "," << cms::convert2mm(sdy) << "," + << cms::convert2mm(sdz) << ") rotation esalgo:RM1299"; +#endif sdx = 0; sdy = boxay / 2. + es.ldrBck_Length / 2.; @@ -526,6 +715,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Solid solid = UnionSolid( ddname, solid_5pb, solid_lbck, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdx, sdy, sdz))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_5pb.name() << ":" << solid_lbck.name() << " at (" + << cms::convert2mm(sdx) << "," << cms::convert2mm(sdy) << "," + << cms::convert2mm(sdz) << ") rotation esalgo:RM1299"; +#endif ns.addVolumeNS(Volume(ddname, solid, ns.material(es.laddMaterial))); ns.addVolumeNS(Volume("esalgo:" + es.ladPfx[1] + es.typesL5[M], solid, ns.material(es.laddMaterial))); } @@ -543,12 +737,16 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ladd_subtr_no++; if (j > 1) ladd_upper = 1; + ladd_side = i; } } } - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << "Side " << ladd_side << ":" << ladd_upper << ":" << ladd_subtr_no << ":" + << ladd_not_plain << " Index " << M << ":" << es.typesL5.size(); +#endif const string& ddname("esalgo:" + es.ladPfx[0] + es.typesL4[d]); - ladder_length = es.micromodule_length + 3 * es.waf_active + 0.1_mm; + ladder_length = es.micromodule_length + 3 * es.waf_active + 0.1 * dd4hep::mm; if (ladd_not_plain) { if (ladd_upper) { @@ -561,6 +759,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext boxax = es.ladder_width; boxaz = es.ladder_thick; Solid solid_a = Box(dd_tmp_name_a, boxax / 2., boxay / 2., boxaz / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_a << " Box " << cms::convert2mm(boxax / 2) << ":" + << cms::convert2mm(boxay / 2) << ":" << cms::convert2mm(boxaz / 2); +#endif sdxe[enb] = 0; sdye[enb] = -boxay / 2. - es.ldrFrnt_Length / 2.; @@ -570,6 +772,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext solid_a, solid_lfront, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe[enb], sdye[enb], sdze[enb]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Union " << solid_a.name() << ":" << solid_lfront.name() + << " at (" << cms::convert2mm(sdxe[enb]) << "," << cms::convert2mm(sdye[enb]) + << "," << cms::convert2mm(sdze[enb]) << ") rotation esalgo:RM1299"; +#endif if (ladd_side == 0) sdxe2[enb] = es.ladder_width / 4.; @@ -582,6 +789,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext solid_b, solid_lbhalf, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe2[enb], sdye2[enb], sdze2[enb]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_b.name() << ":" << solid_lbhalf.name() + << " at (" << cms::convert2mm(sdxe2[enb]) << "," << cms::convert2mm(sdye2[enb]) + << "," << cms::convert2mm(sdze2[enb]) << ") rotation esalgo:RM1299"; +#endif ns.addVolumeNS(Volume(ddname, solid, ns.material(es.laddMaterial))); ns.addVolumeNS(Volume("esalgo:" + es.ladPfx[1] + es.typesL4[d], solid, ns.material(es.laddMaterial))); @@ -599,6 +811,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext boxaz = es.ladder_thick; Solid solid_a = Box(dd_tmp_name_a, boxax / 2., boxay / 2., boxaz / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_a << " Box " << cms::convert2mm(boxax / 2) << ":" + << cms::convert2mm(boxay / 2) << ":" << cms::convert2mm(boxaz / 2); +#endif if (ladd_side == 0) sdxe[enb] = es.ladder_width / 4.; sdye[enb] = -boxay / 2. - es.ldrFrnt_Length / 2.; @@ -611,6 +827,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext solid_a, solid_lfhalf, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe[enb], sdye[enb], sdze[enb]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Union " << solid_a.name() << ":" << solid_lfhalf.name() + << " at (" << cms::convert2mm(sdxe[enb]) << "," << cms::convert2mm(sdye[enb]) + << "," << cms::convert2mm(sdze[enb]) << ") rotation esalgo:RM1299"; +#endif sdxe2[enb] = 0; sdye2[enb] = boxay / 2. + es.ldrBck_Length / 2.; @@ -621,6 +842,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext solid_b, solid_lbck, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe2[enb], sdye2[enb], sdze2[enb]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") + << ddname << " Union " << solid_b.name() << ":" << solid_lbck.name() << " at (" + << cms::convert2mm(sdxe2[enb]) << "," << cms::convert2mm(sdye2[enb]) << "," + << cms::convert2mm(sdze2[enb]) << ") rotation esalgo:RM1299"; +#endif ns.addVolumeNS(Volume(ddname, solid, ns.material(es.laddMaterial))); ns.addVolumeNS(Volume("esalgo:" + es.ladPfx[1] + es.typesL4[d], solid, ns.material(es.laddMaterial))); @@ -634,6 +861,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext boxax = es.ladder_width; boxaz = es.ladder_thick; Solid solid_a = Box(dd_tmp_name_a, boxax / 2., boxay / 2., boxaz / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_a << " Box " << cms::convert2mm(boxax / 2) << ":" + << cms::convert2mm(boxay / 2) << ":" << cms::convert2mm(boxaz / 2); +#endif if (ladd_side == 0) sdxe[enb] = es.ladder_width / 4.; sdye[enb] = -boxay / 2. - es.ldrFrnt_Length / 2.; @@ -646,6 +877,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext solid_a, solid_lfhalf, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe[enb], sdye[enb], sdze[enb]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Union " << solid_a.name() << ":" << solid_lfhalf.name() + << " at (" << cms::convert2mm(sdxe[enb]) << "," << cms::convert2mm(sdye[enb]) + << "," << cms::convert2mm(sdze[enb]) << ") rotation esalgo:RM1299"; +#endif if (ladd_side == 0) sdxe2[enb] = -es.ladder_width / 4.; @@ -659,6 +895,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext solid_b, solid_lfhtrunc, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe2[enb], sdye2[enb], sdze2[enb]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") + << dd_tmp_name_c << " Union " << solid_b.name() << ":" << solid_lfhtrunc.name() << " at (" + << cms::convert2mm(sdxe2[enb]) << "," << cms::convert2mm(sdye2[enb]) << "," + << cms::convert2mm(sdze2[enb]) << ") rotation esalgo:RM1299"; +#endif sdxe3[enb] = 0; sdye3[enb] = boxay / 2. + es.ldrBck_Length / 2.; @@ -668,6 +910,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext solid_c, solid_lbck, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe3[enb], sdye3[enb], sdze3[enb]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") + << ddname << " Union " << solid_c.name() << ":" << solid_lbck.name() << " at (" + << cms::convert2mm(sdxe3[enb]) << "," << cms::convert2mm(sdye3[enb]) << "," + << cms::convert2mm(sdze3[enb]) << ") rotation esalgo:RM1299"; +#endif ns.addVolumeNS(Volume(ddname, solid, ns.material(es.laddMaterial))); ns.addVolumeNS(Volume("esalgo:" + es.ladPfx[1] + es.typesL4[d], solid, ns.material(es.laddMaterial))); @@ -683,6 +931,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext boxaz = es.ladder_thick; Solid solid_pa = Box(dd_tmp_name_pa, boxax / 2., boxay / 2., boxaz / 2.); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_pa << " Box " << cms::convert2mm(boxax / 2) << ":" + << cms::convert2mm(boxay / 2) << ":" << cms::convert2mm(boxaz / 2); +#endif sdx = 0; sdy = -boxay / 2. - es.ldrFrnt_Length / 2.; sdz = -es.ladder_thick / 2. + es.ldrFrnt_Offset; @@ -691,12 +943,22 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext solid_pa, solid_lfront, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdx, sdy, sdz))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << dd_tmp_name_pb << " Union " << solid_pa.name() << ":" << solid_lfront.name() + << " at (" << cms::convert2mm(sdx) << "," << cms::convert2mm(sdy) << "," + << cms::convert2mm(sdz) << ") rotation esalgo:RM1299"; +#endif sdx = 0; sdy = boxay / 2. + es.ldrBck_Length / 2.; sdz = -es.ladder_thick / 2. + es.ldrBck_Offset; Solid solid = UnionSolid( ddname, solid_pb, solid_lbck, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdx, sdy, sdz))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_pb.name() << ":" << solid_lbck.name() << " at (" + << cms::convert2mm(sdx) << "," << cms::convert2mm(sdy) << "," + << cms::convert2mm(sdz) << ") rotation esalgo:RM1299"; +#endif ns.addVolumeNS(Volume(ddname, solid, ns.material(es.laddMaterial))); ns.addVolumeNS(Volume("esalgo:" + es.ladPfx[1] + es.typesL4[d], solid, ns.material(es.laddMaterial))); } @@ -710,9 +972,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext for (int i = 0; i <= 1; i++) { for (int j = 0; j <= 4; j++) { xpos = (i * 2 - 1) * es.waf_intra_col_sep / 2.; - ypos = -ladder_length / 2. + 0.05_mm - (es.ldrFrnt_Length - es.ldrBck_Length) / 2. + es.wedge_length / 2. + - j * es.waf_active; - zpos = -es.ladder_thick / 2. + 0.005_mm + es.wedge_offset; + ypos = -ladder_length / 2. + 0.05 * dd4hep::mm - (es.ldrFrnt_Length - es.ldrBck_Length) / 2. + + es.wedge_length / 2. + j * es.waf_active; + zpos = -es.ladder_thick / 2. + 0.005 * dd4hep::mm + es.wedge_offset; if (es.laddL5map[(i + j * 2 + M * 10)] == 1) { scopy++; ns.volume(ddname).placeVolume(swedLog, @@ -721,15 +983,32 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ns.volume(ddname2).placeVolume(swedLog, scopy + 1000 * swed_scopy_glob + 100, Transform3D(ns.rotation("esalgo:RM1299"), Position(xpos, ypos, zpos))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << swedLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob) << " in " + << ddname << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) + << "," << cms::convert2mm(zpos) << ") rotation esalgo:RM1299"; + edm::LogVerbatim("SFGeom") << swedLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob + 100) + << " in " << ddname2 << " at (" << cms::convert2mm(xpos) << "," + << cms::convert2mm(ypos) << "," << cms::convert2mm(zpos) + << ") rotation esalgo:RM1299"; +#endif ypos = ypos + es.ywedge_ceramic_diff; - zpos = -es.ladder_thick / 2. + 0.005_mm + es.zwedge_ceramic_diff; + zpos = -es.ladder_thick / 2. + 0.005 * dd4hep::mm + es.zwedge_ceramic_diff; ns.volume(ddname).placeVolume(sfbxLog, scopy + 1000 * swed_scopy_glob, Transform3D(ns.rotation("esalgo:RM1298"), Position(xpos, ypos, zpos))); ns.volume(ddname2).placeVolume(sfbyLog, scopy + 1000 * swed_scopy_glob, Transform3D(ns.rotation("esalgo:RM1300A"), Position(xpos, ypos, zpos))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << sfbxLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob) << " in " + << ddname << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) + << "," << cms::convert2mm(zpos) << ") rotation esalgo:RM1298"; + edm::LogVerbatim("SFGeom") << sfbyLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob) << " in " + << ddname2 << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) + << "," << cms::convert2mm(zpos) << ") rotation esalgo:RM1300A"; +#endif } } } @@ -740,9 +1019,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext for (int i = 0; i <= 1; i++) { for (int j = 0; j <= 3; j++) { xpos = (i * 2 - 1) * es.waf_intra_col_sep / 2.; - ypos = -ladder_length / 2. + 0.05_mm - (es.ldrFrnt_Length - es.ldrBck_Length) / 2. + es.wedge_length / 2. + - j * es.waf_active; - zpos = -es.ladder_thick / 2. + 0.005_mm + es.wedge_offset; + ypos = -ladder_length / 2. + 0.05 * dd4hep::mm - (es.ldrFrnt_Length - es.ldrBck_Length) / 2. + + es.wedge_length / 2. + j * es.waf_active; + zpos = -es.ladder_thick / 2. + 0.005 * dd4hep::mm + es.wedge_offset; if (es.laddL4map[(i + j * 2 + (M - es.typesL5.size()) * 8)] == 1) { scopy++; ns.volume(ddname).placeVolume(swedLog, @@ -751,15 +1030,32 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ns.volume(ddname2).placeVolume(swedLog, scopy + 1000 * swed_scopy_glob + 100, Transform3D(ns.rotation("esalgo:RM1299"), Position(xpos, ypos, zpos))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << swedLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob) << " in " + << ddname << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) + << "," << cms::convert2mm(zpos) << ") rotation esalgo:RM1299"; + edm::LogVerbatim("SFGeom") << swedLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob + 100) + << " in " << ddname2 << " at (" << cms::convert2mm(xpos) << "," + << cms::convert2mm(ypos) << "," << cms::convert2mm(zpos) + << ") rotation esalgo:RM1299"; +#endif ypos = ypos + es.ywedge_ceramic_diff; - zpos = -es.ladder_thick / 2. + 0.005_mm + es.zwedge_ceramic_diff; + zpos = -es.ladder_thick / 2. + 0.005 * dd4hep::mm + es.zwedge_ceramic_diff; ns.volume(ddname).placeVolume(sfbxLog, scopy + 1000 * swed_scopy_glob, Transform3D(ns.rotation("esalgo:RM1298"), Position(xpos, ypos, zpos))); ns.volume(ddname2).placeVolume(sfbyLog, scopy + 1000 * swed_scopy_glob, Transform3D(ns.rotation("esalgo:RM1300A"), Position(xpos, ypos, zpos))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << sfbxLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob) << " in " + << ddname << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) + << "," << cms::convert2mm(zpos) << ") rotation esalgo:RM1298"; + edm::LogVerbatim("SFGeom") << sfbyLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob) << " in " + << ddname2 << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) + << "," << cms::convert2mm(zpos) << ") rotation esalgo:RM1300A"; +#endif } } } @@ -820,19 +1116,29 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext xpos = xpos - es.dee_separation; ypos = (sz - int(es.startOfFirstLadd[J])) * es.waf_active - ladder_new_length / 2. + - (es.ldrFrnt_Length - es.ldrBck_Length) / 2. + es.micromodule_length + 0.05_cm - prev_length; + (es.ldrFrnt_Length - es.ldrBck_Length) / 2. + es.micromodule_length + 0.05 * dd4hep::cm - prev_length; prev_length += ladd_shift; - zpos = es.zlead1 + es.ladder_thick / 2. + 0.01_mm; + zpos = es.zlead1 + es.ladder_thick / 2. + 0.01 * dd4hep::mm; icopy[j] += 1; sfLog.placeVolume(ns.volume("esalgo:" + es.ladPfx[0] + type), icopy[j], Position(xpos, ypos, zpos)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << ("esalgo:" + es.ladPfx[0] + type) << " copy " << icopy[j] << " in " + << sfLog.name() << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) + << "," << cms::convert2mm(zpos) << ") no rotation"; +#endif xpos = I * (2 * es.waf_intra_col_sep + es.waf_inter_col_sep); sfLog.placeVolume(ns.volume("esalgo:" + es.ladPfx[1] + type), icopy[j], Transform3D(ns.rotation("esalgo:R270"), Position(ypos, -xpos, zpos - es.zlead1 + es.zlead2))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << ("esalgo:" + es.ladPfx[1] + type) << " copy " << icopy[j] << " in " + << sfLog.name() << " at (" << cms::convert2mm(ypos) << "," << -cms::convert2mm(xpos) + << "," << cms::convert2mm(zpos - es.zlead1 + es.zlead2) << ") rotation esalgo:R270"; +#endif int changed = 0; for (int t = 0; t < int(es.typesL5.size()); t++) @@ -872,6 +1178,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext sfLog.placeVolume(ns.volume("esalgo:" + es.ladPfx[0] + type), icopy[j], Transform3D(ns.rotation("esalgo:R180"), Position(xpos, -ypos, zpos))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << ("esalgo:" + es.ladPfx[0] + type) << " copy " << icopy[j] << " in " + << sfLog.name() << " at (" << cms::convert2mm(xpos) << "," << -cms::convert2mm(ypos) + << "," << cms::convert2mm(zpos) << ") rotation esalgo:R180"; +#endif xpos = I * (2 * es.waf_intra_col_sep + es.waf_inter_col_sep); @@ -879,6 +1190,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ns.volume("esalgo:" + es.ladPfx[1] + type), icopy[j], Transform3D(ns.rotation("esalgo:R090"), Position(-ypos, -xpos, zpos - es.zlead1 + es.zlead2))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << ("esalgo:" + es.ladPfx[1] + type) << " copy " << icopy[j] << " in " + << sfLog.name() << " at (" << -cms::convert2mm(ypos) << "," << -cms::convert2mm(xpos) + << "," << cms::convert2mm(zpos - es.zlead1 + es.zlead2) << ") rotation esalgo:R090"; +#endif } } } @@ -893,9 +1209,17 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext for (size_t i = 0; i < 32; ++i) { xpos = -es.waf_active / 2. + i * es.waf_active / 32. + es.waf_active / 64.; sfwxLog.placeVolume(sfsxLog, i + 1, Position(xpos, 0., 0.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << sfsxLog.name() << " copy " << (i + 1) << " in " << sfwxLog.name() << " at (" + << cms::convert2mm(xpos) << ",0,0) no rotation"; +#endif ypos = -es.waf_active / 2. + i * es.waf_active / 32. + es.waf_active / 64.; sfwyLog.placeVolume(sfsyLog, i + 1, Position(0., ypos, 0.)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("SFGeom") << sfsyLog.name() << " copy " << (i + 1) << " in " << sfwyLog.name() << " at (0," + << cms::convert2mm(ypos) << ",0) no rotation"; +#endif } } return 1; diff --git a/Geometry/EcalCommonData/plugins/dd4hep/DDEcalPreshowerNewAlgo.cc b/Geometry/EcalCommonData/plugins/dd4hep/DDEcalPreshowerNewAlgo.cc index 07d3cbb332490..70ad560befd78 100644 --- a/Geometry/EcalCommonData/plugins/dd4hep/DDEcalPreshowerNewAlgo.cc +++ b/Geometry/EcalCommonData/plugins/dd4hep/DDEcalPreshowerNewAlgo.cc @@ -1,7 +1,7 @@ #include "DD4hep/DetFactoryHelper.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" #include "DetectorDescription/DDCMS/interface/BenchmarkGrd.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DD4hep/Shapes.h" #include @@ -10,7 +10,7 @@ using namespace std; using namespace cms; using namespace dd4hep; -using namespace cms_units::operators; +using namespace angle_units::operators; static constexpr float const& k_half = 0.5; static constexpr float const& k_one32nd = 0.03125; @@ -209,33 +209,39 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const string& dd_Alname_l("esalgo:" + es.layName[i] + "LOutAltmp5"); const string& dd_Alname_m("esalgo:" + es.layName[i] + "LOutAltmp6"); - Solid outAl = - ns.addSolid(dd_Alname_f, Tube(dd_Alname_f, es.rMax_Abs_Al - 70_cm, es.rMax_Abs_Al, zHalf, 0., 90._deg)); + Solid outAl = ns.addSolid( + dd_Alname_f, Tube(dd_Alname_f, es.rMax_Abs_Al - 70 * dd4hep::cm, es.rMax_Abs_Al, zHalf, 0., 90._deg)); outalbx = es.absAlX_X * 0.1; - outalby = es.rMax_Abs_Al + 0.1_mm - es.absAlX_subtr1_Yshift; + outalby = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlX_subtr1_Yshift; shiftR = es.absAlX_subtr1_Yshift; if (I == 20) { outalbx = es.absAlY_X * 0.1; - outalby = es.rMax_Abs_Al + 0.1_mm - es.absAlY_subtr1_Yshift; + outalby = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlY_subtr1_Yshift; shiftR = es.absAlY_subtr1_Xshift; } - Solid outAltmp = ns.addSolid( - dd_Alname_h, Box(dd_Alname_h, outalbx * k_half + 0.1_mm, outalby * k_half + 0.1_mm, zHalf + 0.1_mm)); + Solid outAltmp = ns.addSolid(dd_Alname_h, + Box(dd_Alname_h, + outalbx * k_half + 0.1 * dd4hep::mm, + outalby * k_half + 0.1 * dd4hep::mm, + zHalf + 0.1 * dd4hep::mm)); Solid outAltmp3 = ns.addSolid( dd_Alname_j, SubtractionSolid(dd_Alname_j, outAl, outAltmp, Position(outalbx * k_half, outalby * k_half + shiftR, 0))); outalby2 = es.absAlX_Y * 0.1; - outalbx2 = es.rMax_Abs_Al + 0.1_mm - es.absAlX_subtr1_Xshift; + outalbx2 = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlX_subtr1_Xshift; shiftR2 = es.absAlX_subtr1_Xshift; if (I == 20) { outalby2 = es.absAlY_Y * 0.1; - outalbx2 = es.rMax_Abs_Al + 0.1_mm - es.absAlY_subtr1_Xshift; + outalbx2 = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlY_subtr1_Xshift; shiftR2 = es.absAlY_subtr1_Xshift; } - Solid outAltmp2 = ns.addSolid( - dd_Alname_i, Box(dd_Alname_i, outalbx2 * k_half + 0.1_mm, outalby2 * k_half + 0.1_mm, zHalf + 0.1_mm)); + Solid outAltmp2 = ns.addSolid(dd_Alname_i, + Box(dd_Alname_i, + outalbx2 * k_half + 0.1 * dd4hep::mm, + outalby2 * k_half + 0.1 * dd4hep::mm, + zHalf + 0.1 * dd4hep::mm)); Solid outAltmp4 = ns.addSolid( dd_Alname_k, SubtractionSolid( @@ -247,7 +253,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Solid outAl2 = ns.addSolid(dd_Alname_g, UnionSolid(dd_Alname_g, outAltmp6, outAltmp4, ns.rotation("esalgo:R180"))); - Solid outAlCut = Box(65_cm, 60_cm - 0.1_mm, zHalf + 0.2_mm); + Solid outAlCut = Box(65 * dd4hep::cm, 60 * dd4hep::cm - 0.1 * dd4hep::mm, zHalf + 0.2 * dd4hep::mm); Solid outAlFin = SubtractionSolid(outAl2, outAlCut); Volume layerFinOutAl = Volume(dd_tmp_name_f, outAlFin, ns.material(es.materials[i - 1])); @@ -282,8 +288,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext if (L > 0) bdx = abs(es.abs1stx[K] - es.abs1stx[K - 1]) * k_half; bdy = es.abs1sty[K]; - if (es.abs1stx[K] < rIn + 30_cm) { - bdy = es.abs1sty[K] * k_half - 30_cm; + if (es.abs1stx[K] < rIn + 30 * dd4hep::cm) { + bdy = es.abs1sty[K] * k_half - 30 * dd4hep::cm; cutabsx = K; } @@ -295,24 +301,24 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext bdy = es.abs2ndy[K]; } - if ((es.abs2ndx[K] < rIn + 30_cm) && I == 20) { - bdy = es.abs2ndy[K] * k_half - 30_cm; + if ((es.abs2ndx[K] < rIn + 30 * dd4hep::cm) && I == 20) { + bdy = es.abs2ndy[K] * k_half - 30 * dd4hep::cm; cutabsy = K; } Solid solid_b = Box(dd_tmp_name_b, bdx, bdy, zHalf); - Solid solid_b2 = Box(dd_tmp_name_b2, bdx + 0.1_mm, bdy + 0.1_mm, zHalf); + Solid solid_b2 = Box(dd_tmp_name_b2, bdx + 0.1 * dd4hep::mm, bdy + 0.1 * dd4hep::mm, zHalf); sdx = es.abs1stx[K] - bdx; sdy = 0; - if (es.abs1stx[K] < rIn + 30_cm) + if (es.abs1stx[K] < rIn + 30 * dd4hep::cm) sdy = es.abs1sty[K] - bdy; if (I == 20) { sdx = es.abs2ndx[K] - bdx; sdy = 0; } - if ((es.abs2ndx[K] < rIn + 30_cm) && I == 20) + if ((es.abs2ndx[K] < rIn + 30 * dd4hep::cm) && I == 20) sdy = es.abs2ndy[K] - bdy; Volume layer = Volume(dd_tmp_name_b, solid_b, ns.material(es.materials[i])); @@ -326,7 +332,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Solid solid_d2 = ns.addSolid(dd_FAl_name_d, UnionSolid(dd_FAl_name_d, solid_d1, solid_b2, Position(-sdx, -sdy, 0))); - if (((es.abs1stx[K] < rIn + 30_cm) && I == 10) || ((es.abs2ndx[K] < rIn + 30_cm) && I == 20)) { + if (((es.abs1stx[K] < rIn + 30 * dd4hep::cm) && I == 10) || + ((es.abs2ndx[K] < rIn + 30 * dd4hep::cm) && I == 20)) { layerFinOutAl.placeVolume(layer, 3, Position(sdx, -sdy, 0)); layerFinOutAl.placeVolume(layer, 4, Position(-sdx, -sdy, 0)); @@ -341,16 +348,17 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext bdx = es.abs1stx[cutabsx]; if (I == 20) bdx = es.abs2ndx[cutabsy]; - bdy = 2 * 30_cm; + bdy = 2 * 30 * dd4hep::cm; Solid solidcut = Box(dd_tmp_name_b, bdx, bdy, zHalf); - Solid iner = Tube(dd_tmp_name_c, 0, es.in_rad_Abs_Pb, zHalf + 0.1_mm, 0., 360._deg); + Solid iner = Tube(dd_tmp_name_c, 0, es.in_rad_Abs_Pb, zHalf + 0.1 * dd4hep::mm, 0., 360._deg); Solid final = SubtractionSolid(dd_tmp_name_d, solidcut, iner); Volume blayer = Volume(dd_tmp_name_d, final, ns.material(es.materials[i])); parentVolume.placeVolume(blayer, 1, Position(0, 0, zpos)); - Solid iner_Al = Tube(dd_tmp_name_e, es.in_rad_Abs_Al, es.in_rad_Abs_Pb - 0.01_mm, zHalf, 0., 360._deg); + Solid iner_Al = + Tube(dd_tmp_name_e, es.in_rad_Abs_Al, es.in_rad_Abs_Pb - 0.01 * dd4hep::mm, zHalf, 0., 360._deg); Volume layerAl = Volume(dd_tmp_name_e, iner_Al, ns.material(es.materials[i - 1])); parentVolume.placeVolume(layerAl, 1, Position(0, 0, zpos)); parentVolume.placeVolume(layerFinOutAl, 1, Position(0, 0, zpos)); @@ -387,7 +395,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext } const string& ddname("esalgo:" + es.ladPfx[0] + es.typesL5[M]); - ladder_length = es.micromodule_length + 4 * es.waf_active + 0.1_mm; + ladder_length = es.micromodule_length + 4 * es.waf_active + 0.1 * dd4hep::mm; if (ladd_not_plain) { if (!ladd_upper) { @@ -418,7 +426,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext } const string& ddname("esalgo:" + es.ladPfx[0] + es.typesL4[d]); - ladder_length = es.micromodule_length + 3 * es.waf_active + 0.1_mm; + ladder_length = es.micromodule_length + 3 * es.waf_active + 0.1 * dd4hep::mm; if (ladd_not_plain) { if (ladd_upper) { @@ -450,9 +458,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext for (int i = 0; i <= 1; i++) { for (int j = 0; j <= 4; j++) { xpos = (i * 2 - 1) * es.waf_intra_col_sep * k_half; - ypos = -ladder_length * k_half + 0.05_mm - (es.ldrFrnt_Length - es.ldrBck_Length) * k_half + + ypos = -ladder_length * k_half + 0.05 * dd4hep::mm - (es.ldrFrnt_Length - es.ldrBck_Length) * k_half + es.wedge_length * k_half + j * es.waf_active; - zpos = -es.ladder_thick * k_half + 0.005_mm + es.wedge_offset; + zpos = -es.ladder_thick * k_half + 0.005 * dd4hep::mm + es.wedge_offset; if (es.laddL5map[(i + j * 2 + M * 10)] == 1) { scopy++; ns.assembly(ddname).placeVolume(swedLog, @@ -463,7 +471,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Transform3D(ns.rotation("esalgo:RM1299"), Position(xpos, ypos, zpos))); ypos = ypos + es.ywedge_ceramic_diff; - zpos = -es.ladder_thick * k_half + 0.005_mm + es.zwedge_ceramic_diff; + zpos = -es.ladder_thick * k_half + 0.005 * dd4hep::mm + es.zwedge_ceramic_diff; ns.assembly(ddname).placeVolume(sfbxLog, scopy + 1000 * swed_scopy_glob, Transform3D(ns.rotation("esalgo:RM1298"), Position(xpos, ypos, zpos))); @@ -480,9 +488,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext for (int i = 0; i <= 1; i++) { for (int j = 0; j <= 3; j++) { xpos = (i * 2 - 1) * es.waf_intra_col_sep * k_half; - ypos = -ladder_length * k_half + 0.05_mm - (es.ldrFrnt_Length - es.ldrBck_Length) * k_half + + ypos = -ladder_length * k_half + 0.05 * dd4hep::mm - (es.ldrFrnt_Length - es.ldrBck_Length) * k_half + es.wedge_length * k_half + j * es.waf_active; - zpos = -es.ladder_thick * k_half + 0.005_mm + es.wedge_offset; + zpos = -es.ladder_thick * k_half + 0.005 * dd4hep::mm + es.wedge_offset; if (es.laddL4map[(i + j * 2 + (M - es.typesL5.size()) * 8)] == 1) { scopy++; ns.assembly(ddname).placeVolume(swedLog, @@ -493,7 +501,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Transform3D(ns.rotation("esalgo:RM1299"), Position(xpos, ypos, zpos))); ypos = ypos + es.ywedge_ceramic_diff; - zpos = -es.ladder_thick * k_half + 0.005_mm + es.zwedge_ceramic_diff; + zpos = -es.ladder_thick * k_half + 0.005 * dd4hep::mm + es.zwedge_ceramic_diff; ns.assembly(ddname).placeVolume(sfbxLog, scopy + 1000 * swed_scopy_glob, Transform3D(ns.rotation("esalgo:RM1298"), Position(xpos, ypos, zpos))); @@ -560,11 +568,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext xpos = xpos - es.dee_separation; ypos = (sz - int(es.startOfFirstLadd[J])) * es.waf_active - ladder_new_length * k_half + - (es.ldrFrnt_Length - es.ldrBck_Length) * k_half + es.micromodule_length + 0.05_cm - prev_length; + (es.ldrFrnt_Length - es.ldrBck_Length) * k_half + es.micromodule_length + 0.05 * dd4hep::cm - + prev_length; prev_length += ladd_shift; - zpos = es.zlead1 + es.ladder_thick * k_half + 0.01_mm; + zpos = es.zlead1 + es.ladder_thick * k_half + 0.01 * dd4hep::mm; icopy[j] += 1; sfLog.placeVolume(ns.assembly("esalgo:" + es.ladPfx[0] + type), icopy[j], Position(xpos, ypos, zpos)); diff --git a/Geometry/EcalCommonData/src/EcalSimParametersFromDD.cc b/Geometry/EcalCommonData/src/EcalSimParametersFromDD.cc index 19a0f220c0e35..bbac9925f6e81 100644 --- a/Geometry/EcalCommonData/src/EcalSimParametersFromDD.cc +++ b/Geometry/EcalCommonData/src/EcalSimParametersFromDD.cc @@ -1,5 +1,4 @@ #include "CondFormats/GeometryObjects/interface/EcalSimulationParameters.h" -#include "DataFormats/Math/interface/GeantUnits.h" #include "DetectorDescription/Core/interface/DDFilteredView.h" #include "DetectorDescription/Core/interface/DDFilter.h" #include "DetectorDescription/Core/interface/DDValue.h" @@ -11,8 +10,6 @@ //#define EDM_ML_DEBUG -using namespace geant_units::operators; - template void myPrint(std::string value, const std::vector& vec) { edm::LogVerbatim("EcalGeom") << "EcalSimParametersFromDD: " << vec.size() << " entries for " << value << ":"; @@ -166,7 +163,7 @@ bool EcalSimParametersFromDD::build(const cms::DDCompactView* cpv, php.matNames_.emplace_back(matName); php.lvNames_.emplace_back(name); const std::vector& paras = fv.parameters(); - double dz = (dd4hep::isA(fv.solid())) ? convertCmToMm(2 * paras[0]) : 0.0; + double dz = (dd4hep::isA(fv.solid())) ? ((2.0 * paras[0]) / dd4hep::mm) : 0.0; php.dzs_.emplace_back(dz); } }; diff --git a/Geometry/EcalCommonData/test/python/dumpECDD4Hep_cfg.py b/Geometry/EcalCommonData/test/python/dumpECDD4Hep_cfg.py index 59b08fd01e584..9ebfe5adac08f 100644 --- a/Geometry/EcalCommonData/test/python/dumpECDD4Hep_cfg.py +++ b/Geometry/EcalCommonData/test/python/dumpECDD4Hep_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('EcalGeom') + process.MessageLogger.EcalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/EcalCommonData/data/dd4hep/cms-ecal-geometry-dump.xml'), diff --git a/Geometry/EcalCommonData/test/python/dumpECDDD_cfg.py b/Geometry/EcalCommonData/test/python/dumpECDDD_cfg.py index be1df858cafdf..0cc7392056f65 100644 --- a/Geometry/EcalCommonData/test/python/dumpECDDD_cfg.py +++ b/Geometry/EcalCommonData/test/python/dumpECDDD_cfg.py @@ -6,9 +6,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('EcalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.EcalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/EcalCommonData/test/python/runEcalSimParameterDD4Hep_cfg.py b/Geometry/EcalCommonData/test/python/runEcalSimParameterDD4Hep_cfg.py index cf445b0341409..1b4b6cba9bf78 100644 --- a/Geometry/EcalCommonData/test/python/runEcalSimParameterDD4Hep_cfg.py +++ b/Geometry/EcalCommonData/test/python/runEcalSimParameterDD4Hep_cfg.py @@ -7,9 +7,9 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('EcalGeom') - process.MessageLogger.categories.append('EcalSim') - process.MessageLogger.categories.append('Geometry') + process.MessageLogger.EcalGeom=dict() + process.MessageLogger.EcalSim=dict() + process.MessageLogger.Geometry=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/EcalCommonData/data/dd4hep/cms-ecal-geometry.xml'), diff --git a/Geometry/EcalCommonData/test/python/runEcalSimParameterDDD_cfg.py b/Geometry/EcalCommonData/test/python/runEcalSimParameterDDD_cfg.py index 3f8b54e3516a9..93ce124851f4c 100644 --- a/Geometry/EcalCommonData/test/python/runEcalSimParameterDDD_cfg.py +++ b/Geometry/EcalCommonData/test/python/runEcalSimParameterDDD_cfg.py @@ -12,8 +12,8 @@ ) if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('EcalGeom') - process.MessageLogger.categories.append('EcalSim') + process.MessageLogger.EcalGeom=dict() + process.MessageLogger.EcalSim=dict() process.load('Geometry.EcalCommonData.ecalSimulationParametersAnalyzer_cff') diff --git a/Geometry/EcalTestBeam/test/runSurveyToTransforms_cfg.py b/Geometry/EcalTestBeam/test/runSurveyToTransforms_cfg.py index 0c34f74647256..e0c2ddc4b353f 100755 --- a/Geometry/EcalTestBeam/test/runSurveyToTransforms_cfg.py +++ b/Geometry/EcalTestBeam/test/runSurveyToTransforms_cfg.py @@ -5,7 +5,7 @@ process = cms.Process("SurveyToTransforms") #process.load("FWCore.MessageLogger.MessageLogger_cfi") -#process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +#process.MessageLogger.cout.enable = cms.untracked.bool(True) #process.MessageLogger.cout.threshold = cms.untracked.string('INFO') #process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/Geometry/ForwardCommonData/data/zdcmaterials/2021/v1/zdcmaterials.xml b/Geometry/ForwardCommonData/data/zdcmaterials/2021/v1/zdcmaterials.xml index 24e6431880ba8..ce5b6b18c3118 100644 --- a/Geometry/ForwardCommonData/data/zdcmaterials/2021/v1/zdcmaterials.xml +++ b/Geometry/ForwardCommonData/data/zdcmaterials/2021/v1/zdcmaterials.xml @@ -1,14 +1,6 @@ - - - - - - - - o diff --git a/Geometry/ForwardCommonData/test/dumpHFNoseGeometry_cfg.py b/Geometry/ForwardCommonData/test/dumpHFNoseGeometry_cfg.py index d26224add1522..5269ea7b7b59a 100644 --- a/Geometry/ForwardCommonData/test/dumpHFNoseGeometry_cfg.py +++ b/Geometry/ForwardCommonData/test/dumpHFNoseGeometry_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/ForwardCommonData/test/dumpT2Geometry_cfg.py b/Geometry/ForwardCommonData/test/dumpT2Geometry_cfg.py index 9e69ff405182d..56ce8ef7dcb64 100644 --- a/Geometry/ForwardCommonData/test/dumpT2Geometry_cfg.py +++ b/Geometry/ForwardCommonData/test/dumpT2Geometry_cfg.py @@ -6,9 +6,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('ForwardGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.ForwardGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/ForwardCommonData/test/g4OverlapCheck_cfg.py b/Geometry/ForwardCommonData/test/g4OverlapCheck_cfg.py index 45567791fe268..b273782d34b96 100644 --- a/Geometry/ForwardCommonData/test/g4OverlapCheck_cfg.py +++ b/Geometry/ForwardCommonData/test/g4OverlapCheck_cfg.py @@ -6,9 +6,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('SimG4CoreApplication') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('ForwardGeom') + process.MessageLogger.SimG4CoreApplication=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.ForwardGeom=dict() from SimG4Core.PrintGeomInfo.g4TestGeometry_cfi import * process = checkOverlap(process) diff --git a/Geometry/ForwardCommonData/test/testHFNoseNumbering_cfg.py b/Geometry/ForwardCommonData/test/testHFNoseNumbering_cfg.py index 64a68818cd194..0c8d2deaefb3b 100644 --- a/Geometry/ForwardCommonData/test/testHFNoseNumbering_cfg.py +++ b/Geometry/ForwardCommonData/test/testHFNoseNumbering_cfg.py @@ -8,7 +8,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/ForwardCommonData/test/testHFNoseParameters_cfg.py b/Geometry/ForwardCommonData/test/testHFNoseParameters_cfg.py index 064280c9b4e59..fa22239cef670 100644 --- a/Geometry/ForwardCommonData/test/testHFNoseParameters_cfg.py +++ b/Geometry/ForwardCommonData/test/testHFNoseParameters_cfg.py @@ -7,7 +7,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/ForwardCommonData/test/testTotemT2Geometry_cfg.py b/Geometry/ForwardCommonData/test/testTotemT2Geometry_cfg.py index 84f8f8304992d..d24ebd7be157f 100644 --- a/Geometry/ForwardCommonData/test/testTotemT2Geometry_cfg.py +++ b/Geometry/ForwardCommonData/test/testTotemT2Geometry_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('ForwardGeom') + process.MessageLogger.ForwardGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/ForwardCommonData/data/dd4hep/cms-test-ddtotemt2-algorithm.xml'), diff --git a/Geometry/ForwardGeometry/test/testHFNoseGeometry_cfg.py b/Geometry/ForwardGeometry/test/testHFNoseGeometry_cfg.py index 3d37f43c49a12..5020ae2eaa50d 100644 --- a/Geometry/ForwardGeometry/test/testHFNoseGeometry_cfg.py +++ b/Geometry/ForwardGeometry/test/testHFNoseGeometry_cfg.py @@ -11,7 +11,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml b/Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml new file mode 100644 index 0000000000000..425da92038296 --- /dev/null +++ b/Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Geometry/GEMGeometry/test/runGEMDetIdAnalysis_cfg.py b/Geometry/GEMGeometry/test/runGEMDetIdAnalysis_cfg.py index 856cc3066f952..a7be075f6538f 100644 --- a/Geometry/GEMGeometry/test/runGEMDetIdAnalysis_cfg.py +++ b/Geometry/GEMGeometry/test/runGEMDetIdAnalysis_cfg.py @@ -6,7 +6,7 @@ process.load('DataFormats.MuonDetId.gemDetIdAnalyzer_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('GEMAnalysis') + process.MessageLogger.GEMAnalysis=dict() process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring( diff --git a/Geometry/GEMGeometry/test/testGE0Geometry_cfg.py b/Geometry/GEMGeometry/test/testGE0Geometry_cfg.py index 289adf927dfac..82ef9e70896dd 100644 --- a/Geometry/GEMGeometry/test/testGE0Geometry_cfg.py +++ b/Geometry/GEMGeometry/test/testGE0Geometry_cfg.py @@ -13,19 +13,6 @@ ) process.source = cms.Source("EmptySource") -process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('cout'), - categories = cms.untracked.vstring('GEMGeometryBuilderFromDDD'), - cout = cms.untracked.PSet( - default = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - GEMGeometryBuilderFromDDD = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ) - ) - ) - process.test = cms.EDAnalyzer("GEMGeometryAnalyzer") process.p = cms.Path(process.test) @@ -38,11 +25,13 @@ ### before issuing the scram command above ############################################################### process.load("FWCore.MessageLogger.MessageLogger_cfi") -# process.MessageLogger.categories.append("GEMGeometryBuilderFromDDD") -# process.MessageLogger.categories.append("GEMNumberingScheme") +# +# process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.destinations = cms.untracked.vstring("cout","junk") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.junk = cms.untracked.PSet() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("DEBUG"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/Geometry/GEMGeometry/test/testGEMGeometry_cfg.py b/Geometry/GEMGeometry/test/testGEMGeometry_cfg.py index da8e2d3fe1bb2..2c78ed6ff2151 100644 --- a/Geometry/GEMGeometry/test/testGEMGeometry_cfg.py +++ b/Geometry/GEMGeometry/test/testGEMGeometry_cfg.py @@ -13,19 +13,6 @@ ) process.source = cms.Source("EmptySource") -process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('cout'), - categories = cms.untracked.vstring('GEMGeometryBuilderFromDDD'), - cout = cms.untracked.PSet( - default = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - GEMGeometryBuilderFromDDD = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ) - ) - ) - process.test = cms.EDAnalyzer("GEMGeometryAnalyzer") process.p = cms.Path(process.test) @@ -38,11 +25,13 @@ ### before issuing the scram command above ############################################################### process.load("FWCore.MessageLogger.MessageLogger_cfi") -# process.MessageLogger.categories.append("GEMGeometryBuilderFromDDD") -# process.MessageLogger.categories.append("GEMNumberingScheme") +# +# process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.destinations = cms.untracked.vstring("cout","junk") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.junk = dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("DEBUG"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/Geometry/GEMGeometry/test/testME0Geometry_cfg.py b/Geometry/GEMGeometry/test/testME0Geometry_cfg.py index 81a2621d86ea1..bd0092411a409 100644 --- a/Geometry/GEMGeometry/test/testME0Geometry_cfg.py +++ b/Geometry/GEMGeometry/test/testME0Geometry_cfg.py @@ -13,12 +13,14 @@ ### before issuing the scram command above ############################################################### process.load("FWCore.MessageLogger.MessageLogger_cfi") -# process.MessageLogger.categories.append("ME0GeometryESModule") -# process.MessageLogger.categories.append("ME0GeometryBuilder") -# process.MessageLogger.categories.append("ME0NumberingScheme") +# +# +# process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.destinations = cms.untracked.vstring("cout","junk") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.junk = dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("DEBUG"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/Geometry/GEMGeometryBuilder/plugins/ME0GeometryESModule.cc b/Geometry/GEMGeometryBuilder/plugins/ME0GeometryESModule.cc index d9483a1dc00f9..e83ad0556cecf 100644 --- a/Geometry/GEMGeometryBuilder/plugins/ME0GeometryESModule.cc +++ b/Geometry/GEMGeometryBuilder/plugins/ME0GeometryESModule.cc @@ -76,18 +76,21 @@ std::unique_ptr ME0GeometryESModule::produce(const MuonGeometryReco edm::LogVerbatim("GEMGeometry") << "ME0GeometryESModule::produce with fromDDD = " << fromDDD_ << " fromDD4hep " << fromDD4hep_; if (fromDDD_) { + edm::LogVerbatim("ME0GeometryESModule") << "(0) ME0GeometryESModule - DDD "; edm::LogVerbatim("GEMGeometry") << "ME0GeometryESModule::produce :: ME0GeometryBuilder builder"; auto cpv = record.getTransientHandle(cpvToken_); const auto& mdc = record.get(mdcToken_); ME0GeometryBuilder builder; return std::unique_ptr(builder.build(cpv.product(), mdc)); } else if (fromDD4hep_) { + edm::LogVerbatim("ME0GeometryESModule") << "(0) ME0GeometryESModule - DD4HEP "; edm::LogVerbatim("GEMGeometry") << "ME0GeometryESModule::produce :: ME0GeometryBuilder builder DD4hep"; auto cpv = record.getTransientHandle(dd4hepcpvToken_); const auto& mdc = record.get(mdcToken_); ME0GeometryBuilder builder; return std::unique_ptr(builder.build(cpv.product(), mdc)); } else { + edm::LogVerbatim("ME0GeometryESModule") << "(0) ME0GeometryESModule - DB "; edm::LogVerbatim("GEMGeometry") << "ME0GeometryESModule::produce :: ME0GeometryBuilderFromCondDB builder"; const auto& rigme0 = record.get(rigme0Token_); ME0GeometryBuilderFromCondDB builder; diff --git a/Geometry/GEMGeometryBuilder/src/GEMGeometryBuilder.cc b/Geometry/GEMGeometryBuilder/src/GEMGeometryBuilder.cc index c1ddbc86fc01a..81c7812eaaf9a 100644 --- a/Geometry/GEMGeometryBuilder/src/GEMGeometryBuilder.cc +++ b/Geometry/GEMGeometryBuilder/src/GEMGeometryBuilder.cc @@ -27,16 +27,13 @@ #include "DetectorDescription/DDCMS/interface/DDSpecParRegistry.h" -#include "DataFormats/Math/interface/CMSUnits.h" #include "DataFormats/Math/interface/GeantUnits.h" -#include "CLHEP/Units/GlobalSystemOfUnits.h" - #include #include #include -using namespace cms_units::operators; +using namespace geant_units::operators; //#define EDM_ML_DEBUG @@ -165,10 +162,10 @@ GEMSuperChamber* GEMGeometryBuilder::buildSuperChamber(DDFilteredView& fv, GEMDe bool ge0Station = detId.station() == GEMDetId::minStationId0; std::vector dpar = ge0Station ? solid.parameters() : solid.solidA().parameters(); - double dy = geant_units::operators::convertMmToCm(dpar[0]); //length is along local Y - double dz = geant_units::operators::convertMmToCm(dpar[3]); // thickness is long local Z - double dx1 = geant_units::operators::convertMmToCm(dpar[4]); // bottom width is along local X - double dx2 = geant_units::operators::convertMmToCm(dpar[8]); // top width is along local X + double dy = convertMmToCm(dpar[0]); //length is along local Y + double dz = convertMmToCm(dpar[3]); // thickness is long local Z + double dx1 = convertMmToCm(dpar[4]); // bottom width is along local X + double dx2 = convertMmToCm(dpar[8]); // top width is along local X if (!ge0Station) { const int nch = 2; @@ -176,9 +173,9 @@ GEMSuperChamber* GEMGeometryBuilder::buildSuperChamber(DDFilteredView& fv, GEMDe dpar = solid.solidB().parameters(); - dz += geant_units::operators::convertMmToCm(dpar[3]); // chamber thickness - dz *= nch; // 2 chambers in superchamber - dz += chgap; // gap between chambers + dz += convertMmToCm(dpar[3]); // chamber thickness + dz *= nch; // 2 chambers in superchamber + dz += chgap; // gap between chambers } bool isOdd = detId.chamber() % 2; @@ -199,14 +196,14 @@ GEMChamber* GEMGeometryBuilder::buildChamber(DDFilteredView& fv, GEMDetId detId) bool ge0Station = detId.station() == GEMDetId::minStationId0; std::vector dpar = ge0Station ? solid.parameters() : solid.solidA().parameters(); - double dy = geant_units::operators::convertMmToCm(dpar[0]); //length is along local Y - double dz = geant_units::operators::convertMmToCm(dpar[3]); // thickness is long local Z - double dx1 = geant_units::operators::convertMmToCm(dpar[4]); // bottom width is along local X - double dx2 = geant_units::operators::convertMmToCm(dpar[8]); // top width is along local X + double dy = convertMmToCm(dpar[0]); //length is along local Y + double dz = convertMmToCm(dpar[3]); // thickness is long local Z + double dx1 = convertMmToCm(dpar[4]); // bottom width is along local X + double dx2 = convertMmToCm(dpar[8]); // top width is along local X if (!ge0Station) { dpar = solid.solidB().parameters(); - dz += geant_units::operators::convertMmToCm(dpar[3]); // chamber thickness + dz += convertMmToCm(dpar[3]); // chamber thickness } bool isOdd = ge0Station ? false : detId.chamber() % 2; @@ -247,10 +244,10 @@ GEMEtaPartition* GEMGeometryBuilder::buildEtaPartition(DDFilteredView& fv, GEMDe // EtaPartition specific parameter (size) std::vector dpar = fv.logicalPart().solid().parameters(); - double be = geant_units::operators::convertMmToCm(dpar[4]); // half bottom edge - double te = geant_units::operators::convertMmToCm(dpar[8]); // half top edge - double ap = geant_units::operators::convertMmToCm(dpar[0]); // half apothem - double ti = 0.4; // half thickness + double be = convertMmToCm(dpar[4]); // half bottom edge + double te = convertMmToCm(dpar[8]); // half top edge + double ap = convertMmToCm(dpar[0]); // half apothem + double ti = 0.4; // half thickness std::vector pars; pars.emplace_back(be); @@ -277,7 +274,7 @@ GEMGeometryBuilder::RCPBoundPlane GEMGeometryBuilder::boundPlane(const DDFiltere bool isOddChamber) const { // extract the position const DDTranslation& trans(fv.translation()); - const Surface::PositionType posResult(float(trans.x() / cm), float(trans.y() / cm), float(trans.z() / cm)); + const Surface::PositionType posResult(convertMmToCm(trans.x()), convertMmToCm(trans.y()), convertMmToCm(trans.z())); // now the rotation const DDRotationMatrix& rotation = fv.rotation(); @@ -389,19 +386,19 @@ GEMSuperChamber* GEMGeometryBuilder::buildSuperChamber(cms::DDFilteredView& fv, auto solidA = solid.solidA(); std::vector dpar = solidA.dimensions(); - double dy = dpar[3]; //length is along local Y - double dz = dpar[2]; // thickness is long local Z - double dx1 = dpar[0]; // bottom width is along local X - double dx2 = dpar[1]; // top width is along loc + double dy = k_ScaleFromDD4Hep * dpar[3]; //length is along local Y + double dz = k_ScaleFromDD4Hep * dpar[2]; // thickness is long local Z + double dx1 = k_ScaleFromDD4Hep * dpar[0]; // bottom width is along local X + double dx2 = k_ScaleFromDD4Hep * dpar[1]; // top width is along loc auto solidB = solid.solidB(); dpar = solidB.dimensions(); const int nch = 2; const double chgap = 2.105; - dz += dpar[2]; // chamber thickness - dz *= nch; // 2 chambers in superchamber - dz += chgap; // gap between chambers + dz += (k_ScaleFromDD4Hep * dpar[2]); // chamber thickness + dz *= nch; // 2 chambers in superchamber + dz += chgap; // gap between chambers bool isOdd = detId.chamber() % 2; RCPBoundPlane surf(boundPlane(fv, new TrapezoidalPlaneBounds(dx1, dx2, dy, dz), isOdd)); @@ -415,15 +412,15 @@ GEMChamber* GEMGeometryBuilder::buildChamber(cms::DDFilteredView& fv, GEMDetId d auto solidA = solid.solidA(); std::vector dpar = solidA.dimensions(); - double dy = dpar[3]; //length is along local Y - double dz = dpar[2]; // thickness is long local Z - double dx1 = dpar[0]; // bottom width is along local X - double dx2 = dpar[1]; // top width is along local X + double dy = k_ScaleFromDD4Hep * dpar[3]; //length is along local Y + double dz = k_ScaleFromDD4Hep * dpar[2]; // thickness is long local Z + double dx1 = k_ScaleFromDD4Hep * dpar[0]; // bottom width is along local X + double dx2 = k_ScaleFromDD4Hep * dpar[1]; // top width is along local X auto solidB = solid.solidB(); dpar = solidB.dimensions(); - dz += dpar[2]; // chamber thickness + dz += (k_ScaleFromDD4Hep * dpar[2]); // chamber thickness bool isOdd = detId.chamber() % 2; RCPBoundPlane surf(boundPlane(fv, new TrapezoidalPlaneBounds(dx1, dx2, dy, dz), isOdd)); @@ -444,11 +441,19 @@ GEMEtaPartition* GEMGeometryBuilder::buildEtaPartition(cms::DDFilteredView& fv, double ti = 0.4; // half thickness - const std::vector pars{ - float(dpar[0]), float(dpar[1]), float(dpar[3]), float(nStrips), float(nPads), float(dPhi)}; + const std::vector pars{float(k_ScaleFromDD4Hep * dpar[0]), + float(k_ScaleFromDD4Hep * dpar[1]), + float(k_ScaleFromDD4Hep * dpar[3]), + float(nStrips), + float(nPads), + float(dPhi)}; bool isOdd = detId.chamber() % 2; - RCPBoundPlane surf(boundPlane(fv, new TrapezoidalPlaneBounds(dpar[0], dpar[1], dpar[3], ti), isOdd)); + RCPBoundPlane surf( + boundPlane(fv, + new TrapezoidalPlaneBounds( + k_ScaleFromDD4Hep * dpar[0], k_ScaleFromDD4Hep * dpar[1], k_ScaleFromDD4Hep * dpar[3], ti), + isOdd)); std::string_view name = fv.name(); @@ -463,7 +468,8 @@ GEMGeometryBuilder::RCPBoundPlane GEMGeometryBuilder::boundPlane(const cms::DDFi bool isOddChamber) const { // extract the position const Double_t* tran = fv.trans(); - Surface::PositionType posResult(tran[0], tran[1], tran[2]); + Surface::PositionType posResult( + k_ScaleFromDD4Hep * tran[0], k_ScaleFromDD4Hep * tran[1], k_ScaleFromDD4Hep * tran[2]); // now the rotation DDRotationMatrix rota; diff --git a/Geometry/GEMGeometryBuilder/src/GEMGeometryBuilder.h b/Geometry/GEMGeometryBuilder/src/GEMGeometryBuilder.h index 54cc04143f651..074133c665dd0 100644 --- a/Geometry/GEMGeometryBuilder/src/GEMGeometryBuilder.h +++ b/Geometry/GEMGeometryBuilder/src/GEMGeometryBuilder.h @@ -15,6 +15,7 @@ #include #include #include "DataFormats/MuonDetId/interface/GEMDetId.h" +#include "DD4hep/DD4hepUnits.h" class DDCompactView; class DDFilteredView; @@ -66,6 +67,8 @@ class GEMGeometryBuilder { // Common void buildRegions(GEMGeometry&, const std::vector&); + + static constexpr double k_ScaleFromDD4Hep = (1.0 / dd4hep::cm); }; #endif diff --git a/Geometry/GEMGeometryBuilder/src/GEMGeometryParsFromDD.cc b/Geometry/GEMGeometryBuilder/src/GEMGeometryParsFromDD.cc index c0b62e712f924..62b97b39cfee2 100644 --- a/Geometry/GEMGeometryBuilder/src/GEMGeometryParsFromDD.cc +++ b/Geometry/GEMGeometryBuilder/src/GEMGeometryParsFromDD.cc @@ -1,6 +1,10 @@ -/** Implementation of the GEM Geometry Builder from DDD +/* Implementation of the GEMGeometryParsFromDD Class + * Build the GEMGeometry from the DDD and DD4Hep description + * + * DD4hep part added to the original old file (DD version) made by M. Maggi (INFN Bari) + * Author: Sergio Lo Meo (sergio.lo.meo@cern.ch) + * Created: Mon, 15 Feb 2021 * - * \author M. Maggi - INFN Bari */ #include "Geometry/GEMGeometryBuilder/src/GEMGeometryParsFromDD.h" #include "DataFormats/MuonDetId/interface/GEMDetId.h" @@ -13,10 +17,13 @@ #include "Geometry/MuonNumbering/interface/MuonGeometryNumbering.h" #include "Geometry/MuonNumbering/interface/MuonBaseNumber.h" #include "Geometry/MuonNumbering/interface/GEMNumberingScheme.h" +#include "Geometry/MuonNumbering/interface/MuonGeometryConstants.h" #include "DataFormats/GeometryVector/interface/Basic3DVector.h" -#include "CLHEP/Units/GlobalSystemOfUnits.h" +#include "DetectorDescription/DDCMS/interface/DDFilteredView.h" +#include "DetectorDescription/DDCMS/interface/DDCompactView.h" +#include "DetectorDescription/DDCMS/interface/DDSpecParRegistry.h" #include #include @@ -25,6 +32,8 @@ GEMGeometryParsFromDD::GEMGeometryParsFromDD() {} GEMGeometryParsFromDD::~GEMGeometryParsFromDD() {} +// DDD + void GEMGeometryParsFromDD::build(const DDCompactView* cview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rgeo) { @@ -45,10 +54,12 @@ void GEMGeometryParsFromDD::buildGeometry(DDFilteredView& fv, LogDebug("GEMGeometryParsFromDD") << "About to run through the GEM structure\n" << " First logical part " << fv.logicalPart().name().name(); + edm::LogVerbatim("GEMGeometryParsFromDD") << "(0) GEMGeometryParsFromDD - DDD "; MuonGeometryNumbering muonDDDNumbering(muonConstants); GEMNumberingScheme gemNumbering(muonConstants); bool doSuper = fv.firstChild(); + LogDebug("GEMGeometryParsFromDD") << "doSuperChamber = " << doSuper; // loop over superchambers while (doSuper) { @@ -97,22 +108,26 @@ void GEMGeometryParsFromDD::buildSuperChamber(DDFilteredView& fv, GEMDetId detId DDBooleanSolid solid = (DDBooleanSolid)(fv.logicalPart().solid()); std::vector dpar = solid.solidA().parameters(); + GEMDetId gemid = detId.superChamberId(); + double dy = dpar[0]; //length is along local Y double dz = dpar[3]; // thickness is long local Z double dx1 = dpar[4]; // bottom width is along local X double dx2 = dpar[8]; // top width is along local X dpar = solid.solidB().parameters(); + dz += dpar[3]; // chamber thickness dz *= 2; // 2 chambers in superchamber dz += 2.105; // gap between chambers - GEMDetId gemid = detId.superChamberId(); - std::vector pars{dx1, dx2, dy, dz}; std::vector vtra = getTranslation(fv); std::vector vrot = getRotation(fv); LogDebug("GEMGeometryParsFromDD") << "dimension dx1 " << dx1 << ", dx2 " << dx2 << ", dy " << dy << ", dz " << dz; + edm::LogVerbatim("GEMGeometryParsFromDD") + << "(3) DDD, SuperChamber DetID " << gemid.rawId() << " Name " << fv.logicalPart().name().name() << " dx1 " << dx1 + << " dx2 " << dx2 << " dy " << dy << " dz " << dz; rgeo.insert(gemid.rawId(), vtra, vrot, pars, {fv.logicalPart().name().name()}); } @@ -136,6 +151,9 @@ void GEMGeometryParsFromDD::buildChamber(DDFilteredView& fv, GEMDetId detId, Rec std::vector vrot = getRotation(fv); LogDebug("GEMGeometryParsFromDD") << "dimension dx1 " << dx1 << ", dx2 " << dx2 << ", dy " << dy << ", dz " << dz; + edm::LogVerbatim("GEMGeometryParsFromDD") + << "(4) DDD, Chamber DetID " << gemid.rawId() << " Name " << fv.logicalPart().name().name() << " dx1 " << dx1 + << " dx2 " << dx2 << " dy " << dy << " dz " << dz; rgeo.insert(gemid.rawId(), vtra, vrot, pars, {fv.logicalPart().name().name()}); } @@ -174,12 +192,20 @@ void GEMGeometryParsFromDD::buildEtaPartition(DDFilteredView& fv, GEMDetId detId std::vector vtra = getTranslation(fv); std::vector vrot = getRotation(fv); - LogDebug("GEMGeometryParsFromDD") << "dimension dx1 " << dx1 << ", dx2 " << dx2 << ", dy " << dy << ", dz " << dz; + LogDebug("GEMGeometryParsFromDD") << " dx1 " << dx1 << " dx2 " << dx2 << " dy " << dy << " dz " << dz << " nStrips " + << nStrips << " nPads " << nPads << " dPhi " << dPhi; + + edm::LogVerbatim("GEMGeometryParsFromDD") + << "(5) DDD, Eta Partion DetID " << detId.rawId() << " Name " << fv.logicalPart().name().name() << " dx1 " << dx1 + << " dx2 " << dx2 << " dy " << dy << " dz " << dz << " nStrips " << nStrips << " nPads " << nPads << " dPhi " + << dPhi; rgeo.insert(detId.rawId(), vtra, vrot, pars, {fv.logicalPart().name().name()}); } std::vector GEMGeometryParsFromDD::getTranslation(DDFilteredView& fv) { const DDTranslation& tran = fv.translation(); + edm::LogVerbatim("GEMGeometryParsFromDD") + << "(1) DDD, tran vector " << tran.x() << " " << tran.y() << " " << tran.z(); return {tran.x(), tran.y(), tran.z()}; } @@ -187,5 +213,173 @@ std::vector GEMGeometryParsFromDD::getRotation(DDFilteredView& fv) { const DDRotationMatrix& rota = fv.rotation(); //.Inverse(); DD3Vector x, y, z; rota.GetComponents(x, y, z); + edm::LogVerbatim("GEMGeometryParsFromDD") + << "(2) DDD, rot matrix " << x.X() << " " << x.Y() << " " << x.Z() << " " << y.X() << " " << y.Y() << " " + << y.Z() << " " << z.X() << " " << z.Y() << " " << z.Z(); return {x.X(), x.Y(), x.Z(), y.X(), y.Y(), y.Z(), z.X(), z.Y(), z.Z()}; } + +// DD4Hep + +void GEMGeometryParsFromDD::build(const cms::DDCompactView* cview, + const MuonGeometryConstants& muonConstants, + RecoIdealGeometry& rgeo) { + std::string attribute = "MuStructure"; + std::string value = "MuonEndCapGEM"; + + const cms::DDFilter filter(attribute, value); + cms::DDFilteredView fv(*cview, filter); + + this->buildGeometry(fv, muonConstants, rgeo); +} + +void GEMGeometryParsFromDD::buildGeometry(cms::DDFilteredView& fv, + const MuonGeometryConstants& muonConstants, + RecoIdealGeometry& rgeo) { + edm::LogVerbatim("GEMGeometryParsFromDD") << "(0) GEMGeometryParsFromDD - DD4HEP "; + + MuonGeometryNumbering mdddnum(muonConstants); + GEMNumberingScheme gemNum(muonConstants); + static constexpr uint32_t levelChamb = 7; + int chamb(0), region(0); + int theLevelPart = muonConstants.getValue("level"); + int theRingLevel = muonConstants.getValue("mg_ring") / theLevelPart; + int theSectorLevel = muonConstants.getValue("mg_sector") / theLevelPart; + + while (fv.firstChild()) { + const auto& history = fv.history(); + MuonBaseNumber num(mdddnum.geoHistoryToBaseNumber(history)); + GEMDetId detId(gemNum.baseNumberToUnitNumber(num)); + + if (detId.station() == GEMDetId::minStationId0) { + if (num.getLevels() == theRingLevel) { + if (detId.region() != region) { + region = detId.region(); + chamb = 0; + } + ++chamb; + detId = GEMDetId(detId.region(), detId.ring(), detId.station(), detId.layer(), chamb, 0); + buildSuperChamber(fv, detId, rgeo); + } else if (num.getLevels() == theSectorLevel) { + buildChamber(fv, detId, rgeo); + } else { + buildEtaPartition(fv, detId, rgeo); + } + } else { + if (fv.level() == levelChamb) { + if (detId.layer() == 1) { + buildSuperChamber(fv, detId, rgeo); + } + buildChamber(fv, detId, rgeo); + } else if (num.getLevels() > theSectorLevel) { + buildEtaPartition(fv, detId, rgeo); + } + } + } +} + +void GEMGeometryParsFromDD::buildSuperChamber(cms::DDFilteredView& fv, GEMDetId detId, RecoIdealGeometry& rgeo) { + cms::DDSolid solid(fv.solid()); + auto solidA = solid.solidA(); + std::vector dpar = solidA.dimensions(); + + double dy = dpar[3] / dd4hep::mm; //length is along local Y + double dz = dpar[2] / dd4hep::mm; // thickness is long local Z + double dx1 = dpar[0] / dd4hep::mm; // bottom width is along local X + double dx2 = dpar[1] / dd4hep::mm; // top width is along loc + + auto solidB = solid.solidB(); + dpar = solidB.dimensions(); + const int nch = 2; + const double chgap = 2.105; + + GEMDetId gemid = detId.superChamberId(); + std::string_view name = fv.name(); + + dz += (dpar[2] / dd4hep::mm); // chamber thickness + dz *= nch; // 2 chambers in superchamber + dz += chgap; // gap between chambers + + std::vector pars{dx1, dx2, dy, dz}; + std::vector vtra = getTranslation(fv); + std::vector vrot = getRotation(fv); + + edm::LogVerbatim("GEMGeometryParsFromDD") + << "(3) DD4HEP, SuperChamber DetID " << gemid.rawId() << " Name " << std::string(name) << " dx1 " << dx1 + << " dx2 " << dx2 << " dy " << dy << " dz " << dz; + rgeo.insert(gemid.rawId(), vtra, vrot, pars, {std::string(name)}); +} + +void GEMGeometryParsFromDD::buildChamber(cms::DDFilteredView& fv, GEMDetId detId, RecoIdealGeometry& rgeo) { + cms::DDSolid solid(fv.solid()); + auto solidA = solid.solidA(); + std::vector dpar = solidA.dimensions(); + + double dy = dpar[3] / dd4hep::mm; //length is along local Y + double dz = dpar[2] / dd4hep::mm; // thickness is long local Z + double dx1 = dpar[0] / dd4hep::mm; // bottom width is along local X + double dx2 = dpar[1] / dd4hep::mm; // top width is along local X + + auto solidB = solid.solidB(); + dpar = solidB.dimensions(); + + dz += (dpar[2] / dd4hep::mm); // chamber thickness + + GEMDetId gemid = detId.chamberId(); + std::string_view name = fv.name(); + + std::vector pars{dx1, dx2, dy, dz}; + std::vector vtra = getTranslation(fv); + std::vector vrot = getRotation(fv); + + edm::LogVerbatim("GEMGeometryParsFromDD") + << "(4) DD4HEP, Chamber DetID " << gemid.rawId() << " Name " << std::string(name) << " dx1 " << dx1 << " dx2 " + << dx2 << " dy " << dy << " dz " << dz; + rgeo.insert(gemid.rawId(), vtra, vrot, pars, {std::string(name)}); +} + +void GEMGeometryParsFromDD::buildEtaPartition(cms::DDFilteredView& fv, GEMDetId detId, RecoIdealGeometry& rgeo) { + auto nStrips = fv.get("nStrips"); + auto nPads = fv.get("nPads"); + auto dPhi = fv.get("dPhi"); + + std::vector dpar = fv.parameters(); + std::string_view name = fv.name(); + + double dx1 = dpar[0] / dd4hep::mm; + double dx2 = dpar[1] / dd4hep::mm; + double dy = dpar[3] / dd4hep::mm; + double dz = dpar[2] / dd4hep::mm; + + std::vector pars{dx1, dx2, dy, dz, nStrips, nPads, dPhi}; + std::vector vtra = getTranslation(fv); + std::vector vrot = getRotation(fv); + + edm::LogVerbatim("GEMGeometryParsFromDD") + << "(5) DD4HEP, Eta Partion DetID " << detId.rawId() << " Name " << std::string(name) << " dx1 " << dx1 << " dx2 " + << dx2 << " dy " << dy << " dz " << dz << " nStrips " << nStrips << " nPads " << nPads << " dPhi " << dPhi; + rgeo.insert(detId.rawId(), vtra, vrot, pars, {std::string(name)}); +} + +std::vector GEMGeometryParsFromDD::getTranslation(cms::DDFilteredView& fv) { + std::vector tran(3); + tran[0] = static_cast(fv.translation().X()) / dd4hep::mm; + tran[1] = static_cast(fv.translation().Y()) / dd4hep::mm; + tran[2] = static_cast(fv.translation().Z()) / dd4hep::mm; + + edm::LogVerbatim("GEMGeometryParsFromDD") + << "(1) DD4HEP, tran vector " << tran[0] << " " << tran[1] << " " << tran[2]; + return {tran[0], tran[1], tran[2]}; +} + +std::vector GEMGeometryParsFromDD::getRotation(cms::DDFilteredView& fv) { + DDRotationMatrix rota; + fv.rot(rota); + DD3Vector x, y, z; + rota.GetComponents(x, y, z); + const std::vector rot = {x.X(), x.Y(), x.Z(), y.X(), y.Y(), y.Z(), z.X(), z.Y(), z.Z()}; + edm::LogVerbatim("GEMGeometryParsFromDD") + << "(2) DD4HEP, rot matrix " << rot[0] << " " << rot[1] << " " << rot[2] << " " << rot[3] << " " << rot[4] + << " " << rot[5] << " " << rot[6] << " " << rot[7] << " " << rot[8]; + return {rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]}; +} diff --git a/Geometry/GEMGeometryBuilder/src/GEMGeometryParsFromDD.h b/Geometry/GEMGeometryBuilder/src/GEMGeometryParsFromDD.h index 776ea51821031..a51263a643054 100644 --- a/Geometry/GEMGeometryBuilder/src/GEMGeometryParsFromDD.h +++ b/Geometry/GEMGeometryBuilder/src/GEMGeometryParsFromDD.h @@ -1,10 +1,12 @@ #ifndef Geometry_GEMGeometry_GEMGeometryParsFromDD_H #define Geometry_GEMGeometry_GEMGeometryParsFromDD_H -/** \class GEMGeometryParsFromDD - * Build the GEMGeometry ftom the DDD description - * - * \author M. Maggi - INFN Bari +/* Implementation of the GEMGeometryParsFromDD Class + * Build the GEMGeometry from the DDD and DD4Hep description + * + * DD4hep part added to the original old file (DD version) made by M. Maggi (INFN Bari) + * Author: Sergio Lo Meo (sergio.lo.meo@cern.ch) + * Created: Mon, 15 Feb 2021 * */ @@ -15,6 +17,10 @@ class DDCompactView; class DDFilteredView; +namespace cms { // DD4Hep + class DDFilteredView; + class DDCompactView; +} // namespace cms class MuonGeometryConstants; class RecoIdealGeometry; class GEMDetId; @@ -25,16 +31,29 @@ class GEMGeometryParsFromDD { ~GEMGeometryParsFromDD(); + // DD void build(const DDCompactView* cview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rgeo); + // DD4Hep + void build(const cms::DDCompactView* cview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rgeo); private: + // DD void buildGeometry(DDFilteredView& fview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rgeo); - void buildSuperChamber(DDFilteredView& fv, GEMDetId detId, RecoIdealGeometry& rgeo); void buildChamber(DDFilteredView& fv, GEMDetId detId, RecoIdealGeometry& rgeo); void buildEtaPartition(DDFilteredView& fv, GEMDetId detId, RecoIdealGeometry& rgeo); std::vector getTranslation(DDFilteredView& fv); std::vector getRotation(DDFilteredView& fv); + + // DD4Hep + + void buildGeometry(cms::DDFilteredView& fview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rgeo); + void buildSuperChamber(cms::DDFilteredView& fv, GEMDetId detId, RecoIdealGeometry& rgeo); + void buildChamber(cms::DDFilteredView& fv, GEMDetId detId, RecoIdealGeometry& rgeo); + void buildEtaPartition(cms::DDFilteredView& fv, GEMDetId detId, RecoIdealGeometry& rgeo); + + std::vector getTranslation(cms::DDFilteredView& fv); + std::vector getRotation(cms::DDFilteredView& fv); }; #endif diff --git a/Geometry/GEMGeometryBuilder/src/ME0GeometryBuilder.cc b/Geometry/GEMGeometryBuilder/src/ME0GeometryBuilder.cc index 6303e3bf1cbff..d674a8ac6c584 100644 --- a/Geometry/GEMGeometryBuilder/src/ME0GeometryBuilder.cc +++ b/Geometry/GEMGeometryBuilder/src/ME0GeometryBuilder.cc @@ -434,10 +434,10 @@ ME0Geometry* ME0GeometryBuilder::buildGeometry(cms::DDFilteredView& fv, const Mu ME0Chamber* ME0GeometryBuilder::buildChamber(cms::DDFilteredView& fv, ME0DetId detId) const { std::vector dpar = fv.parameters(); - double L = dpar[3]; - double T = dpar[2]; - double b = dpar[0]; - double B = dpar[1]; + double L = k_ScaleFromDD4Hep * dpar[3]; + double T = k_ScaleFromDD4Hep * dpar[2]; + double b = k_ScaleFromDD4Hep * dpar[0]; + double B = k_ScaleFromDD4Hep * dpar[1]; bool isOdd = false; ME0BoundPlane surf(boundPlane(fv, new TrapezoidalPlaneBounds(b, B, L, T), isOdd)); ME0Chamber* chamber = new ME0Chamber(detId.chamberId(), surf); @@ -448,10 +448,10 @@ ME0Chamber* ME0GeometryBuilder::buildChamber(cms::DDFilteredView& fv, ME0DetId d ME0Layer* ME0GeometryBuilder::buildLayer(cms::DDFilteredView& fv, ME0DetId detId) const { std::vector dpar = fv.parameters(); - double L = dpar[3]; - double t = dpar[2]; - double b = dpar[0]; - double B = dpar[1]; + double L = k_ScaleFromDD4Hep * dpar[3]; + double t = k_ScaleFromDD4Hep * dpar[2]; + double b = k_ScaleFromDD4Hep * dpar[0]; + double B = k_ScaleFromDD4Hep * dpar[1]; bool isOdd = false; ME0BoundPlane surf(boundPlane(fv, new TrapezoidalPlaneBounds(b, B, L, t), isOdd)); ME0Layer* layer = new ME0Layer(detId.layerId(), surf); @@ -468,10 +468,10 @@ ME0EtaPartition* ME0GeometryBuilder::buildEtaPartition(cms::DDFilteredView& fv, std::vector dpar = fv.parameters(); - double b = dpar[0]; - double B = dpar[1]; - double L = dpar[3]; - double t = dpar[2]; + double b = k_ScaleFromDD4Hep * dpar[0]; + double B = k_ScaleFromDD4Hep * dpar[1]; + double L = k_ScaleFromDD4Hep * dpar[3]; + double t = k_ScaleFromDD4Hep * dpar[2]; const std::vector pars{float(dpar[0]), float(dpar[1]), float(dpar[3]), float(nStrips), float(nPads)}; @@ -492,7 +492,8 @@ ME0GeometryBuilder::ME0BoundPlane ME0GeometryBuilder::boundPlane(const cms::DDFi bool isOddChamber) const { // extract the position const Double_t* trans = fv.trans(); - Surface::PositionType posResult(trans[0], trans[1], trans[2]); + Surface::PositionType posResult( + k_ScaleFromDD4Hep * trans[0], k_ScaleFromDD4Hep * trans[1], k_ScaleFromDD4Hep * trans[2]); // now the rotation DDRotationMatrix rotation; diff --git a/Geometry/GEMGeometryBuilder/src/ME0GeometryBuilder.h b/Geometry/GEMGeometryBuilder/src/ME0GeometryBuilder.h index 8afa8ac2968dd..a7ea75dc41911 100644 --- a/Geometry/GEMGeometryBuilder/src/ME0GeometryBuilder.h +++ b/Geometry/GEMGeometryBuilder/src/ME0GeometryBuilder.h @@ -12,6 +12,7 @@ #include "DataFormats/GeometrySurface/interface/Plane.h" #include "DataFormats/MuonDetId/interface/ME0DetId.h" +#include "DD4hep/DD4hepUnits.h" #include #include #include @@ -61,6 +62,8 @@ class ME0GeometryBuilder { ME0Layer* buildLayer(cms::DDFilteredView& fv, ME0DetId detId) const; ME0EtaPartition* buildEtaPartition(cms::DDFilteredView& fv, ME0DetId detId) const; + + static constexpr double k_ScaleFromDD4Hep = (1.0 / dd4hep::cm); }; #endif diff --git a/Geometry/GEMGeometryBuilder/src/ME0GeometryBuilderFromCondDB.cc b/Geometry/GEMGeometryBuilder/src/ME0GeometryBuilderFromCondDB.cc index 5bab741681043..082c3e036139b 100644 --- a/Geometry/GEMGeometryBuilder/src/ME0GeometryBuilderFromCondDB.cc +++ b/Geometry/GEMGeometryBuilder/src/ME0GeometryBuilderFromCondDB.cc @@ -19,11 +19,13 @@ #include "DataFormats/GeometryVector/interface/Basic3DVector.h" -#include "CLHEP/Units/GlobalSystemOfUnits.h" +#include "DataFormats/Math/interface/GeantUnits.h" #include #include +using namespace geant_units::operators; + ME0GeometryBuilderFromCondDB::ME0GeometryBuilderFromCondDB() {} ME0GeometryBuilderFromCondDB::~ME0GeometryBuilderFromCondDB() {} @@ -47,8 +49,8 @@ ME0Geometry* ME0GeometryBuilderFromCondDB::build(const RecoIdealGeometry& rgeo) strStart = rgeo.strStart(id); name = *(strStart); - Surface::PositionType pos(*(tranStart) / cm, *(tranStart + 1) / cm, *(tranStart + 2) / cm); - // CLHEP way + Surface::PositionType pos( + convertMmToCm(*(tranStart)), convertMmToCm(*(tranStart + 1)), convertMmToCm(*(tranStart + 2))); Surface::RotationType rot(*(rotStart + 0), *(rotStart + 1), *(rotStart + 2), @@ -60,10 +62,10 @@ ME0Geometry* ME0GeometryBuilderFromCondDB::build(const RecoIdealGeometry& rgeo) *(rotStart + 8)); Bounds* bounds = nullptr; - float be = *(shapeStart + 0) / cm; - float te = *(shapeStart + 1) / cm; - float ap = *(shapeStart + 2) / cm; - float ti = *(shapeStart + 3) / cm; + float be = convertMmToCm(*(shapeStart + 0)); + float te = convertMmToCm(*(shapeStart + 1)); + float ap = convertMmToCm(*(shapeStart + 2)); + float ti = convertMmToCm(*(shapeStart + 3)); float nstrip = *(shapeStart + 4); float npad = *(shapeStart + 5); // TrapezoidalPlaneBounds* diff --git a/Geometry/GEMGeometryBuilder/src/ME0GeometryParsFromDD.cc b/Geometry/GEMGeometryBuilder/src/ME0GeometryParsFromDD.cc index 6534f0e058625..f6a049ac7409a 100644 --- a/Geometry/GEMGeometryBuilder/src/ME0GeometryParsFromDD.cc +++ b/Geometry/GEMGeometryBuilder/src/ME0GeometryParsFromDD.cc @@ -1,3 +1,11 @@ +/* Implementation of the ME0GeometryParsFromDD Class + * Build the ME0Geometry from the DDD and DD4Hep description + * + * DD4hep part added to the original old file (DD version) made by M. Maggi (INFN Bari) + * Author: Sergio Lo Meo (sergio.lo.meo@cern.ch) + * Created: Thu, 25 Feb 2021 + * + */ #include "Geometry/GEMGeometryBuilder/src/ME0GeometryParsFromDD.h" #include "DataFormats/MuonDetId/interface/ME0DetId.h" #include "CondFormats/GeometryObjects/interface/RecoIdealGeometry.h" @@ -7,8 +15,16 @@ #include "Geometry/MuonNumbering/interface/MuonGeometryNumbering.h" #include "Geometry/MuonNumbering/interface/MuonBaseNumber.h" #include "Geometry/MuonNumbering/interface/ME0NumberingScheme.h" +#include "Geometry/MuonNumbering/interface/MuonGeometryConstants.h" #include "DataFormats/GeometryVector/interface/Basic3DVector.h" -#include "CLHEP/Units/GlobalSystemOfUnits.h" +#include "DetectorDescription/DDCMS/interface/DDFilteredView.h" +#include "DetectorDescription/DDCMS/interface/DDCompactView.h" +#include "DetectorDescription/DDCMS/interface/DDSpecParRegistry.h" + +#include +#include + +// DD void ME0GeometryParsFromDD::build(const DDCompactView* cview, const MuonGeometryConstants& muonConstants, @@ -30,6 +46,7 @@ void ME0GeometryParsFromDD::buildGeometry(DDFilteredView& fv, LogDebug("ME0GeometryParsFromDD") << "About to run through the ME0 structure\n" << " First logical part " << fv.logicalPart().name().name(); + edm::LogVerbatim("ME0GeometryParsFromDD") << "(0) ME0GeometryParsFromDD - DDD "; MuonGeometryNumbering muonDDDNumbering(muonConstants); ME0NumberingScheme me0Numbering(muonConstants); @@ -83,6 +100,8 @@ void ME0GeometryParsFromDD::buildChamber(DDFilteredView& fv, ME0DetId detId, Rec std::vector pars = getDimension(fv); std::vector vtra = getTranslation(fv); std::vector vrot = getRotation(fv); + edm::LogVerbatim("ME0GeometryParsFromDD") + << "(4) DDD, Chamber DetID " << detId.chamberId().rawId() << " Name " << fv.logicalPart().name().name(); rgeo.insert(detId.chamberId().rawId(), vtra, vrot, pars, {fv.logicalPart().name().name()}); } @@ -94,6 +113,8 @@ void ME0GeometryParsFromDD::buildLayer(DDFilteredView& fv, ME0DetId detId, RecoI std::vector vtra = getTranslation(fv); std::vector vrot = getRotation(fv); + edm::LogVerbatim("ME0GeometryParsFromDD") + << "(5) DDD, Layer DetID " << detId.layerId().rawId() << " Name " << fv.logicalPart().name().name(); rgeo.insert(detId.layerId().rawId(), vtra, vrot, pars, {fv.logicalPart().name().name()}); } @@ -123,6 +144,10 @@ void ME0GeometryParsFromDD::buildEtaPartition(DDFilteredView& fv, ME0DetId detId std::vector vtra = getTranslation(fv); std::vector vrot = getRotation(fv); + edm::LogVerbatim("ME0GeometryParsFromDD") + << "(6) DDD, Eta Partion DetID " << detId.rawId() << " Name " << fv.logicalPart().name().name() << " nStrips " + << nStrips << " nPads " << nPads; + rgeo.insert(detId.rawId(), vtra, vrot, pars, {fv.logicalPart().name().name()}); } @@ -134,11 +159,15 @@ std::vector ME0GeometryParsFromDD::getDimension(DDFilteredView& fv) { //dpar[0] length is along local Y LogDebug("ME0GeometryParsFromDD") << "dimension dx1 " << dpar[4] << ", dx2 " << dpar[8] << ", dy " << dpar[0] << ", dz " << dpar[3]; + edm::LogVerbatim("ME0GeometryParsFromDD") + << "(1) DDD, dimension dx1 " << dpar[4] << ", dx2 " << dpar[8] << ", dy " << dpar[0] << ", dz " << dpar[3]; return {dpar[4], dpar[8], dpar[0], dpar[3]}; } std::vector ME0GeometryParsFromDD::getTranslation(DDFilteredView& fv) { const DDTranslation& tran = fv.translation(); + edm::LogVerbatim("ME0GeometryParsFromDD") + << "(2) DDD, tran vector " << tran.x() << " " << tran.y() << " " << tran.z(); return {tran.x(), tran.y(), tran.z()}; } @@ -146,5 +175,120 @@ std::vector ME0GeometryParsFromDD::getRotation(DDFilteredView& fv) { const DDRotationMatrix& rota = fv.rotation(); //.Inverse(); DD3Vector x, y, z; rota.GetComponents(x, y, z); + edm::LogVerbatim("ME0GeometryParsFromDD") + << "(3) DDD, rot matrix " << x.X() << " " << x.Y() << " " << x.Z() << " " << y.X() << " " << y.Y() << " " + << y.Z() << " " << z.X() << " " << z.Y() << " " << z.Z(); return {x.X(), x.Y(), x.Z(), y.X(), y.Y(), y.Z(), z.X(), z.Y(), z.Z()}; } + +// DD4HEP + +void ME0GeometryParsFromDD::build(const cms::DDCompactView* cview, + const MuonGeometryConstants& muonConstants, + RecoIdealGeometry& rgeo) { + std::string attribute = "MuStructure"; + std::string value = "MuonEndCapME0"; + const cms::DDFilter filter(attribute, value); + cms::DDFilteredView fview(*cview, filter); + this->buildGeometry(fview, muonConstants, rgeo); +} + +void ME0GeometryParsFromDD::buildGeometry(cms::DDFilteredView& fv, + const MuonGeometryConstants& muonConstants, + RecoIdealGeometry& rgeo) { + edm::LogVerbatim("ME0GeometryParsFromDD") << "(0) ME0GeometryParsFromDD - DD4HEP "; + + MuonGeometryNumbering mdddnum(muonConstants); + ME0NumberingScheme me0Num(muonConstants); + + static constexpr uint32_t levelChamber = 7; + static constexpr uint32_t levelLayer = 8; + uint32_t theLevelPart = muonConstants.getValue("level"); + uint32_t theSectorLevel = muonConstants.getValue("m0_sector") / theLevelPart; + + while (fv.firstChild()) { + const auto& history = fv.history(); + MuonBaseNumber num(mdddnum.geoHistoryToBaseNumber(history)); + ME0DetId detId(me0Num.baseNumberToUnitNumber(num)); + + if (fv.level() == levelChamber) { + buildChamber(fv, detId, rgeo); + } else if (fv.level() == levelLayer) { + buildLayer(fv, detId, rgeo); + } else if (history.tags.size() > theSectorLevel) { + buildEtaPartition(fv, detId, rgeo); + } + } // end while +} // end buildGeometry + +void ME0GeometryParsFromDD::buildChamber(cms::DDFilteredView& fv, ME0DetId detId, RecoIdealGeometry& rgeo) { + std::string_view name = fv.name(); + std::vector pars = getDimension(fv); + std::vector vtra = getTranslation(fv); + std::vector vrot = getRotation(fv); + + edm::LogVerbatim("ME0GeometryParsFromDD") + << "(4) DD4HEP, Chamber DetID " << detId.chamberId().rawId() << " Name " << std::string(name); + + rgeo.insert(detId.chamberId().rawId(), vtra, vrot, pars, {std::string(name)}); +} + +void ME0GeometryParsFromDD::buildLayer(cms::DDFilteredView& fv, ME0DetId detId, RecoIdealGeometry& rgeo) { + std::string_view name = fv.name(); + std::vector pars = getDimension(fv); + std::vector vtra = getTranslation(fv); + std::vector vrot = getRotation(fv); + + edm::LogVerbatim("ME0GeometryParsFromDD") + << "(5) DD4HEP, Layer DetID " << detId.layerId().rawId() << " Name " << std::string(name); + rgeo.insert(detId.layerId().rawId(), vtra, vrot, pars, {std::string(name)}); +} + +void ME0GeometryParsFromDD::buildEtaPartition(cms::DDFilteredView& fv, ME0DetId detId, RecoIdealGeometry& rgeo) { + auto nStrips = fv.get("nStrips"); + auto nPads = fv.get("nPads"); + std::string_view name = fv.name(); + std::vector pars = getDimension(fv); + pars.emplace_back(nStrips); + pars.emplace_back(nPads); + std::vector vtra = getTranslation(fv); + std::vector vrot = getRotation(fv); + + edm::LogVerbatim("ME0GeometryParsFromDD") << "(6) DD4HEP, Eta Partion DetID " << detId.rawId() << " Name " + << std::string(name) << " nStrips " << nStrips << " nPads " << nPads; + + rgeo.insert(detId.rawId(), vtra, vrot, pars, {std::string(name)}); +} + +std::vector ME0GeometryParsFromDD::getDimension(cms::DDFilteredView& fv) { + std::vector dpar = fv.parameters(); + + edm::LogVerbatim("ME0GeometryParsFromDD") + << "(1) DD4HEP, dimension dx1 " << dpar[0] / dd4hep::mm << ", dx2 " << dpar[1] / dd4hep::mm << ", dy " + << dpar[3] / dd4hep::mm << ", dz " << dpar[2] / dd4hep::mm; + + return {dpar[0] / dd4hep::mm, dpar[1] / dd4hep::mm, dpar[3] / dd4hep::mm, dpar[2] / dd4hep::mm}; +} + +std::vector ME0GeometryParsFromDD::getTranslation(cms::DDFilteredView& fv) { + std::vector tran(3); + tran[0] = static_cast(fv.translation().X()) / dd4hep::mm; + tran[1] = static_cast(fv.translation().Y()) / dd4hep::mm; + tran[2] = static_cast(fv.translation().Z()) / dd4hep::mm; + + edm::LogVerbatim("ME0GeometryParsFromDD") + << "(2) DD4HEP, tran vector " << tran[0] << " " << tran[1] << " " << tran[2]; + return {tran[0], tran[1], tran[2]}; +} + +std::vector ME0GeometryParsFromDD::getRotation(cms::DDFilteredView& fv) { + DDRotationMatrix rota; + fv.rot(rota); + DD3Vector x, y, z; + rota.GetComponents(x, y, z); + const std::vector rot = {x.X(), x.Y(), x.Z(), y.X(), y.Y(), y.Z(), z.X(), z.Y(), z.Z()}; + edm::LogVerbatim("ME0GeometryParsFromDD") + << "(3) DD4HEP, rot matrix " << rot[0] << " " << rot[1] << " " << rot[2] << " " << rot[3] << " " << rot[4] + << " " << rot[5] << " " << rot[6] << " " << rot[7] << " " << rot[8]; + return {rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]}; +} diff --git a/Geometry/GEMGeometryBuilder/src/ME0GeometryParsFromDD.h b/Geometry/GEMGeometryBuilder/src/ME0GeometryParsFromDD.h index ff6d43ab23cf3..dc142dc9edb94 100644 --- a/Geometry/GEMGeometryBuilder/src/ME0GeometryParsFromDD.h +++ b/Geometry/GEMGeometryBuilder/src/ME0GeometryParsFromDD.h @@ -1,10 +1,23 @@ #ifndef Geometry_GEMGeometry_ME0GeometryParsFromDD_H #define Geometry_GEMGeometry_ME0GeometryParsFromDD_H +/* Implementation of the ME0GeometryParsFromDD Class + * Build the ME0Geometry from the DDD and DD4Hep description + * + * DD4hep part added to the original old file (DD version) made by M. Maggi (INFN Bari) + * Author: Sergio Lo Meo (sergio.lo.meo@cern.ch) + * Created: Thu, 25 Feb 2021 + * + */ + #include class DDCompactView; class DDFilteredView; +namespace cms { // DD4Hep + class DDFilteredView; + class DDCompactView; +} // namespace cms class MuonGeometryConstants; class RecoIdealGeometry; class ME0DetId; @@ -14,10 +27,13 @@ class ME0GeometryParsFromDD { ME0GeometryParsFromDD(void) {} ~ME0GeometryParsFromDD(void) {} - + // DD void build(const DDCompactView*, const MuonGeometryConstants&, RecoIdealGeometry&); + // DD4HEP + void build(const cms::DDCompactView*, const MuonGeometryConstants&, RecoIdealGeometry&); private: + // DD void buildGeometry(DDFilteredView&, const MuonGeometryConstants&, RecoIdealGeometry&); void buildChamber(DDFilteredView& fv, ME0DetId detId, RecoIdealGeometry& rgeo); @@ -27,5 +43,17 @@ class ME0GeometryParsFromDD { std::vector getDimension(DDFilteredView& fv); std::vector getTranslation(DDFilteredView& fv); std::vector getRotation(DDFilteredView& fv); + + //DD4HEP + + void buildGeometry(cms::DDFilteredView&, const MuonGeometryConstants&, RecoIdealGeometry&); + + void buildChamber(cms::DDFilteredView& fv, ME0DetId detId, RecoIdealGeometry& rgeo); + void buildLayer(cms::DDFilteredView& fv, ME0DetId detId, RecoIdealGeometry& rgeo); + void buildEtaPartition(cms::DDFilteredView& fv, ME0DetId detId, RecoIdealGeometry& rgeo); + + std::vector getDimension(cms::DDFilteredView& fv); + std::vector getTranslation(cms::DDFilteredView& fv); + std::vector getRotation(cms::DDFilteredView& fv); }; #endif diff --git a/Geometry/GEMGeometryBuilder/test/ME0GeometryDump.cc b/Geometry/GEMGeometryBuilder/test/ME0GeometryDump.cc index 20b23e7924d82..2fcc73f95b10f 100644 --- a/Geometry/GEMGeometryBuilder/test/ME0GeometryDump.cc +++ b/Geometry/GEMGeometryBuilder/test/ME0GeometryDump.cc @@ -62,13 +62,16 @@ void ME0GeometryDump::analyze(const edm::Event& event, const edm::EventSetup& ev for (unsigned int k3 = 0; k3 < etaPartitions.size(); ++k3) { edm::LogVerbatim("ME0Geometry") << "\nEtaPartition " << k3 << ":" << etaPartitions[k3]->id() << etaPartitions[k3]->type().name() - << " with " << etaPartitions[k3]->nstrips() << " strips of pitch " << etaPartitions[k3]->pitch() - << " and " << etaPartitions[k3]->npads() << " pads of pitch " << etaPartitions[k3]->padPitch(); + << " with " << etaPartitions[k3]->nstrips() << " strips of pitch " << std::setprecision(4) + << etaPartitions[k3]->pitch() << " and " << etaPartitions[k3]->npads() << " pads of pitch " + << std::setprecision(4) << etaPartitions[k3]->padPitch(); if (verbose_) { for (int k = 0; k < etaPartitions[k3]->nstrips(); ++k) - edm::LogVerbatim("ME0Geometry") << "Strip[" << k << "] " << etaPartitions[k3]->centreOfStrip(k); + edm::LogVerbatim("ME0Geometry") + << "Strip[" << k << "] " << std::setprecision(4) << etaPartitions[k3]->centreOfStrip(k); for (int k = 0; k < etaPartitions[k3]->npads(); ++k) - edm::LogVerbatim("ME0Geometry") << "Pad[" << k << "] " << etaPartitions[k3]->centreOfPad(k); + edm::LogVerbatim("ME0Geometry") + << "Pad[" << k << "] " << std::setprecision(4) << etaPartitions[k3]->centreOfPad(k); } } } diff --git a/Geometry/GEMGeometryBuilder/test/python/dumpGEMGeometryDD4Hep_cfg.py b/Geometry/GEMGeometryBuilder/test/python/dumpGEMGeometryDD4Hep_cfg.py index 1f6455fbd1dff..bc9613250a309 100644 --- a/Geometry/GEMGeometryBuilder/test/python/dumpGEMGeometryDD4Hep_cfg.py +++ b/Geometry/GEMGeometryBuilder/test/python/dumpGEMGeometryDD4Hep_cfg.py @@ -17,9 +17,9 @@ ) if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('Geometry') - process.MessageLogger.categories.append('GEMNumberingScheme') - process.MessageLogger.categories.append('GEMGeometry') + process.MessageLogger.Geometry=dict() + process.MessageLogger.GEMNumberingScheme=dict() + process.MessageLogger.GEMGeometry=dict() process.source = cms.Source('EmptySource') diff --git a/Geometry/GEMGeometryBuilder/test/python/dumpGEMGeometryDDD_cfg.py b/Geometry/GEMGeometryBuilder/test/python/dumpGEMGeometryDDD_cfg.py index 9a0d4f7d56973..5bd4ad7d2ab0b 100644 --- a/Geometry/GEMGeometryBuilder/test/python/dumpGEMGeometryDDD_cfg.py +++ b/Geometry/GEMGeometryBuilder/test/python/dumpGEMGeometryDDD_cfg.py @@ -10,9 +10,9 @@ process.load("Geometry.GEMGeometryBuilder.gemGeometryDump_cfi") if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('Geometry') - process.MessageLogger.categories.append('GEMNumberingScheme') - process.MessageLogger.categories.append('GEMGeometry') + process.MessageLogger.Geometry=dict() + process.MessageLogger.GEMNumberingScheme=dict() + process.MessageLogger.GEMGeometry=dict() process.source = cms.Source('EmptySource') diff --git a/Geometry/GEMGeometryBuilder/test/python/dumpME0GeometryDD4Hep_cfg.py b/Geometry/GEMGeometryBuilder/test/python/dumpME0GeometryDD4Hep_cfg.py index 13b2f3e093ca2..b43f4bcfa0e57 100644 --- a/Geometry/GEMGeometryBuilder/test/python/dumpME0GeometryDD4Hep_cfg.py +++ b/Geometry/GEMGeometryBuilder/test/python/dumpME0GeometryDD4Hep_cfg.py @@ -18,9 +18,9 @@ ) if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('Geometry') - process.MessageLogger.categories.append('ME0NumberingScheme') - process.MessageLogger.categories.append('ME0Geometry') + process.MessageLogger.Geometry=dict() + process.MessageLogger.ME0NumberingScheme=dict() + process.MessageLogger.ME0Geometry=dict() process.source = cms.Source('EmptySource') diff --git a/Geometry/GEMGeometryBuilder/test/python/dumpME0GeometryDDD_cfg.py b/Geometry/GEMGeometryBuilder/test/python/dumpME0GeometryDDD_cfg.py index 9864d96c4a713..e3c3caa6df8c8 100644 --- a/Geometry/GEMGeometryBuilder/test/python/dumpME0GeometryDDD_cfg.py +++ b/Geometry/GEMGeometryBuilder/test/python/dumpME0GeometryDDD_cfg.py @@ -10,9 +10,9 @@ process.load("Geometry.GEMGeometryBuilder.me0GeometryDump_cfi") if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('Geometry') - process.MessageLogger.categories.append('ME0NumberingScheme') - process.MessageLogger.categories.append('ME0Geometry') + process.MessageLogger.Geometry=dict() + process.MessageLogger.ME0NumberingScheme=dict() + process.MessageLogger.ME0Geometry=dict() process.source = cms.Source('EmptySource') diff --git a/Geometry/GEMGeometryBuilder/test/python/validateGEMGeometryDD4Hep_cfg.py b/Geometry/GEMGeometryBuilder/test/python/validateGEMGeometryDD4Hep_cfg.py index b23f5c2844a64..be9f02e3e22f8 100644 --- a/Geometry/GEMGeometryBuilder/test/python/validateGEMGeometryDD4Hep_cfg.py +++ b/Geometry/GEMGeometryBuilder/test/python/validateGEMGeometryDD4Hep_cfg.py @@ -14,8 +14,8 @@ process.load("Geometry.GEMGeometryBuilder.gemGeometry_cff") if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('Geometry') - process.MessageLogger.categories.append('GEMNumberingScheme') + process.MessageLogger.Geometry=dict() + process.MessageLogger.GEMNumberingScheme=dict() process.test = cms.EDAnalyzer("DDTestMuonNumbering") diff --git a/Geometry/GEMGeometryBuilder/test/python/validateGEMGeometryDDD_cfg.py b/Geometry/GEMGeometryBuilder/test/python/validateGEMGeometryDDD_cfg.py index cb43f7535fb8f..db82cbdb795be 100644 --- a/Geometry/GEMGeometryBuilder/test/python/validateGEMGeometryDDD_cfg.py +++ b/Geometry/GEMGeometryBuilder/test/python/validateGEMGeometryDDD_cfg.py @@ -15,8 +15,8 @@ process.load("Geometry.GEMGeometryBuilder.gemGeometry_cff") if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('Geometry') - process.MessageLogger.categories.append('GEMNumberingScheme') + process.MessageLogger.Geometry=dict() + process.MessageLogger.GEMNumberingScheme=dict() # # Note: Please, download the geometry file from a location diff --git a/Geometry/HGCalCommonData/data/TB181/Oct184/hgcal.xml b/Geometry/HGCalCommonData/data/TB181/Oct184/hgcal.xml new file mode 100644 index 0000000000000..27fb00306d13a --- /dev/null +++ b/Geometry/HGCalCommonData/data/TB181/Oct184/hgcal.xml @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/TB181/Oct184/hgcalEE.xml b/Geometry/HGCalCommonData/data/TB181/Oct184/hgcalEE.xml new file mode 100644 index 0000000000000..396fe3390dbf3 --- /dev/null +++ b/Geometry/HGCalCommonData/data/TB181/Oct184/hgcalEE.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + hgcalwafer:HGCalEEWaferFine, hgcalwafer:HGCalEEWaferCoarse + + hgcal:HGCalEESensitive, hgcal:HGCalEEPCB, + hgcal:HGCalEEKapton, hgcal:HGCalEEAbsorber, + hgcal:HGCalEECuAbsorber, hgcal:HGCalEEAbsorber48To63, + hgcal:HGCalEEAbsorber52To70, hgcal:HGCalEEAbsorber59To62, + hgcal:HGCalEEAbsorber68To74, hgcal:HGCalEECuKapton, + hgcal:HGCalEECuPCB + + materials:Air, materials:Air, materials:Air, + materials:Air, materials:Air, materials:Air, + materials:Air, materials:Air, materials:StainlessSteel, + materials:Lead, materials:Copper, materials:Air, + materials:Aluminium, materials:Air, materials:Air, + materials:Air, materials:Air, materials:Air, + materials:Air, materials:Air, materials:Air, + materials:Air, materials:Air, materials:Air, + materials:Iron, materials:Air, materials:Air, + materials:Air, materials:Aluminium + + EEPCB, EEKapton, EECuWShield, + EECuShield, EECuWShield48To63, EECuWShield52To70, + EECuWShield59To62, EECuWShield68To74, EEFeAbsorber, + EEPbAbsorber, EECuHeatShield, EESensitive, + EEAlcase, EEgap1, EEgap2, + EEgap3, EEgap4, EEgap5, + EEgap6, EEgap7, EEgap8, + EEgap9, EEgap10, EEgap11, + EEFHAbs, EECuKapton, EECuPCB, + EEgap12, EEMCPAl + + [hgcal:thPCB], [hgcal:thKapton], [hgcal:thAbsEE], + [hgcal:thAbsCuEE], [hgcal:thAbsEE48To63], [hgcal:thAbsEE52To70], + [hgcal:thAbsEE59To62], [hgcal:thAbsEE68To74], 0.3*mm, + 4.9*mm, 6.0*mm, [hgcal:thSilicon], + 2.1*mm, 3.095*mm, 3.145*mm, + 3.7*mm, 4.7*mm, 5.5*mm, + 6.7*mm, 7.7*mm, 8.7*mm, + 9.5*mm, 10.09*mm, 119.7*mm, + 40.0*mm, [hgcal:thCuKapton], [hgcal:thCuPCB], + 44.0*mm, 5.0*mm + + 144.15*mm, 29.05*mm, 29.05*mm, + 30.05*mm, 30.05*mm, 30.05*mm, + 28.05*mm, 28.05*mm, 28.05*mm, + 28.05*mm, 32.25*mm, 35.05*mm, + 30.295*mm, 30.835*mm, 86.10*mm + + + + 0, 23, 45, 67, 89,111,133,155,177,199,221,245,269,293,317 + + 22, 44, 66, 88,110,132,154,176,198,220,244,268,292,316,319 + + 12, 23, 8, 9, 8, 16, 0, 26, 11, 11, 11, 25, 1, 2, 10, 2, 1, 25, 11, 11, 11, 26, 0, + 19, 8, 9, 8, 15, 0, 26, 11, 11, 11, 25, 1, 2, 10, 2, 1, 25, 11, 11, 11, 26, 0, + 19, 8, 9, 8, 15, 0, 26, 11, 11, 11, 25, 1, 2, 10, 2, 1, 25, 11, 11, 11, 26, 0, + 20, 8, 9, 8, 15, 0, 26, 11, 11, 11, 25, 1, 2, 10, 2, 1, 25, 11, 11, 11, 26, 0, + 20, 8, 9, 8, 15, 0, 26, 11, 11, 11, 25, 1, 2, 10, 2, 1, 25, 11, 11, 11, 26, 0, + 20, 8, 9, 8, 15, 0, 26, 11, 11, 11, 25, 1, 2, 10, 2, 1, 25, 11, 11, 11, 26, 0, + 18, 8, 9, 8, 15, 0, 26, 11, 11, 11, 25, 1, 2, 10, 2, 1, 25, 11, 11, 11, 26, 0, + 18, 8, 9, 8, 15, 0, 26, 11, 11, 11, 25, 1, 2, 10, 2, 1, 25, 11, 11, 11, 26, 0, + 18, 8, 9, 8, 15, 0, 26, 11, 11, 11, 25, 1, 2, 10, 2, 1, 25, 11, 11, 11, 26, 0, + 18, 8, 9, 8, 15, 0, 26, 11, 11, 11, 25, 1, 2, 10, 2, 1, 25, 11, 11, 11, 26, 0, + 18, 8, 9, 8, 17, 0, 26, 11, 11, 11, 25, 1, 3, 2, 10, 2, 3, 1, 25, 11, 11, 11, 26, 0, + 21, 8, 9, 8, 17, 0, 26, 11, 11, 11, 25, 1, 3, 2, 10, 2, 3, 1, 25, 11, 11, 11, 26, 0, + 21, 8, 9, 8, 14, 0, 26, 11, 11, 11, 25, 1, 5, 5, 10, 5, 5, 1, 25, 11, 11, 11, 26, 0, + 22, 8, 9, 8, 13, 0, 26, 11, 11, 11, 25, 1, 5, 5, 10, 5, 5, 1, 25, 11, 11, 11, 26, 0, + 24, 27, 12 + + + 0, 0, 0, 0, 0, 0, 2, 11, 1, 1, 1, 10, 3, 4, 0, 4, 3, 10, 1, 1, 1, 11, 2, + 0, 0, 0, 0, 0, 2, 11, 1, 1, 1, 10, 3, 4, 0, 4, 3, 10, 1, 1, 1, 11, 2, + 0, 0, 0, 0, 0, 2, 11, 1, 1, 1, 10, 3, 4, 0, 4, 3, 10, 1, 1, 1, 11, 2, + 0, 0, 0, 0, 0, 2, 11, 1, 1, 1, 10, 3, 4, 0, 4, 3, 10, 1, 1, 1, 11, 2, + 0, 0, 0, 0, 0, 2, 11, 1, 1, 1, 10, 3, 4, 0, 4, 3, 10, 1, 1, 1, 11, 2, + 0, 0, 0, 0, 0, 2, 11, 1, 1, 1, 10, 3, 4, 0, 4, 3, 10, 1, 1, 1, 11, 2, + 0, 0, 0, 0, 0, 2, 11, 1, 1, 1, 10, 3, 4, 0, 4, 3, 10, 1, 1, 1, 11, 2, + 0, 0, 0, 0, 0, 2, 11, 1, 1, 1, 10, 3, 4, 0, 4, 3, 10, 1, 1, 1, 11, 2, + 0, 0, 0, 0, 0, 2, 11, 1, 1, 1, 10, 3, 4, 0, 4, 3, 10, 1, 1, 1, 11, 2, + 0, 0, 0, 0, 0, 2, 11, 1, 1, 1, 10, 3, 4, 0, 4, 3, 10, 1, 1, 1, 11, 2, + 0, 0, 0, 0, 0, 2, 11, 1, 1, 1, 10, 3, 5, 4, 0, 4, 5, 3, 10, 1, 1, 1, 11, 2, + 0, 0, 0, 0, 0, 2, 11, 1, 1, 1, 10, 3, 5, 4, 0, 4, 5, 3, 10, 1, 1, 1, 11, 2, + 0, 0, 0, 0, 0, 2, 11, 1, 1, 1, 10, 3, 7, 7, 0, 7, 7, 3, 10, 1, 1, 1, 11, 2, + 0, 0, 0, 0, 0, 2, 11, 1, 1, 1, 10, 3, 7, 7, 0, 7, 7, 3, 10, 1, 1, 1, 11, 2, + 0, 0, 0 + + + 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalEEFile-algorithm.xml b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalEEFile-algorithm.xml new file mode 100644 index 0000000000000..de4cab1b24c79 --- /dev/null +++ b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalEEFile-algorithm.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalEEV15-algorithm.xml b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalEEV15-algorithm.xml new file mode 100644 index 0000000000000..69e9db9fafb80 --- /dev/null +++ b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalEEV15-algorithm.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalHEmixFile-algorithm.xml b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalHEmixFile-algorithm.xml new file mode 100644 index 0000000000000..dcaedccdb0374 --- /dev/null +++ b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalHEmixFile-algorithm.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalHEmixV15-algorithm.xml b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalHEmixV15-algorithm.xml new file mode 100644 index 0000000000000..e51257d8381ce --- /dev/null +++ b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalHEmixV15-algorithm.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalHEsilV15-algorithm.xml b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalHEsilV15-algorithm.xml new file mode 100644 index 0000000000000..a99c73ddf5900 --- /dev/null +++ b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalHEsilV15-algorithm.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalTBModule-algorithm.xml b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalTBModule-algorithm.xml index 1da7a6df307b8..8f7a2d9fce6a5 100644 --- a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalTBModule-algorithm.xml +++ b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalTBModule-algorithm.xml @@ -24,8 +24,8 @@ - + diff --git a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalWaferAlgo-algorithm.xml b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalWaferAlgo-algorithm.xml index 9f6f509790f57..7f8d95cca3595 100644 --- a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalWaferAlgo-algorithm.xml +++ b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalWaferAlgo-algorithm.xml @@ -25,6 +25,7 @@ + diff --git a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalcell-algorithm.xml b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalcell-algorithm.xml index a9f1e9ef144f7..808bb8923e33d 100644 --- a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalcell-algorithm.xml +++ b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalcell-algorithm.xml @@ -25,6 +25,7 @@ + diff --git a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwafer-algorithm.xml b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwafer-algorithm.xml index c2461ac2efdb0..c02ceaf0c5d93 100644 --- a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwafer-algorithm.xml +++ b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwafer-algorithm.xml @@ -25,6 +25,7 @@ + diff --git a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwafer8-algorithm.xml b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwafer8-algorithm.xml index 8a27f2eae7e12..11be0d3f457d1 100644 --- a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwafer8-algorithm.xml +++ b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwafer8-algorithm.xml @@ -26,6 +26,7 @@ + diff --git a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwaferF-algorithm.xml b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwaferF-algorithm.xml new file mode 100644 index 0000000000000..d2bdf8d2423bd --- /dev/null +++ b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwaferF-algorithm.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwaferP-algorithm.xml b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwaferP-algorithm.xml new file mode 100644 index 0000000000000..05fdb74233d19 --- /dev/null +++ b/Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwaferP-algorithm.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcal/v10c/hgcal.xml b/Geometry/HGCalCommonData/data/hgcal/v10c/hgcal.xml deleted file mode 100644 index f33d5e6791e17..0000000000000 --- a/Geometry/HGCalCommonData/data/hgcal/v10c/hgcal.xml +++ /dev/null @@ -1,287 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/HGCalCommonData/data/hgcal/v15/hgcal.xml b/Geometry/HGCalCommonData/data/hgcal/v15/hgcal.xml new file mode 100644 index 0000000000000..7a48a55cbc1bd --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcal/v15/hgcal.xml @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcal/v9a/hgcal.xml b/Geometry/HGCalCommonData/data/hgcal/v9a/hgcal.xml deleted file mode 100644 index 0e420810e0c38..0000000000000 --- a/Geometry/HGCalCommonData/data/hgcal/v9a/hgcal.xml +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # eta 3.1 288.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # additional shift 10 mm - - - - - - # eta 3.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #ring1f - #ring1b - #ring21f - #ring21b - #ring22f - #ring22b - #ring31f - #ring31b - #ring32f - #ring32b - #ring41f - #ring41b - #ring42f - #ring42b - #ring51f - #ring51b - #ring52f - #ring52b - #ring61f - #ring61b - #ring62f - #ring62b - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/HGCalCommonData/data/hgcal/v9c/hgcal.xml b/Geometry/HGCalCommonData/data/hgcal/v9c/hgcal.xml deleted file mode 100644 index bd91ce0806a1d..0000000000000 --- a/Geometry/HGCalCommonData/data/hgcal/v9c/hgcal.xml +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/HGCalCommonData/data/hgcal/v9p/hgcal.xml b/Geometry/HGCalCommonData/data/hgcal/v9p/hgcal.xml deleted file mode 100644 index e8e2cdd5f5765..0000000000000 --- a/Geometry/HGCalCommonData/data/hgcal/v9p/hgcal.xml +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/HGCalCommonData/data/hgcalCons/v9a/hgcalCons.xml b/Geometry/HGCalCommonData/data/hgcalCons/v9a/hgcalCons.xml deleted file mode 100644 index d5fb6a9788f25..0000000000000 --- a/Geometry/HGCalCommonData/data/hgcalCons/v9a/hgcalCons.xml +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - - [hgcal:radMixL0], [hgcal:radMixL1], [hgcal:radMixL2], [hgcal:radMixL3], - [hgcal:radMixL4], [hgcal:radMixL5], [hgcal:radMixL6], [hgcal:radMixL7], - [hgcal:radMixL8], [hgcal:radMixL9], [hgcal:radMixL10],[hgcal:radMixL11], - [hgcal:radMixL12],[hgcal:radMixL13],[hgcal:radMixL14],[hgcal:radMixL15] - - - 360, 360, 360, 360, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288 - - [hgcal:zMinEE], [hgcal:zMinHEsil], [hgcal:zMinHEmix], - [hgcal:zMaxHEmix] - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/HGCalCommonData/data/hgcalCons/v9ap/hgcalCons.xml b/Geometry/HGCalCommonData/data/hgcalCons/v9ap/hgcalCons.xml deleted file mode 100644 index ae7dd56906aec..0000000000000 --- a/Geometry/HGCalCommonData/data/hgcalCons/v9ap/hgcalCons.xml +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - - [hgcal:radMixL0], [hgcal:radMixL1], [hgcal:radMixL2], [hgcal:radMixL3], - [hgcal:radMixL4], [hgcal:radMixL5], [hgcal:radMixL6], [hgcal:radMixL7], - [hgcal:radMixL8], [hgcal:radMixL9], [hgcal:radMixL10],[hgcal:radMixL11], - [hgcal:radMixL12],[hgcal:radMixL13],[hgcal:radMixL14],[hgcal:radMixL15] - - - 360, 360, 360, 360, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288 - - [hgcal:zMinEE], [hgcal:zMinHEsil], [hgcal:zMinHEmix], - [hgcal:zMaxHEmix] - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/HGCalCommonData/data/hgcalCons/v9p/hgcalCons.xml b/Geometry/HGCalCommonData/data/hgcalCons/v9p/hgcalCons.xml deleted file mode 100644 index c35b90c0db843..0000000000000 --- a/Geometry/HGCalCommonData/data/hgcalCons/v9p/hgcalCons.xml +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - [hgcal:radMixL0], [hgcal:radMixL1], [hgcal:radMixL2], [hgcal:radMixL3], - [hgcal:radMixL4], [hgcal:radMixL5], [hgcal:radMixL6], [hgcal:radMixL7], - [hgcal:radMixL8], [hgcal:radMixL9], [hgcal:radMixL10],[hgcal:radMixL11], - [hgcal:radMixL12],[hgcal:radMixL13],[hgcal:radMixL14],[hgcal:radMixL15] - - - [hgcal:zMinEE], [hgcal:zMinHEsil], [hgcal:zMinHEmix], - [hgcal:zMaxHEmix] - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/HGCalCommonData/data/hgcalConsData/v13/hgcalConsData.xml b/Geometry/HGCalCommonData/data/hgcalConsData/v13/hgcalConsData.xml index fdda8f176f44c..22fbb702ff221 100644 --- a/Geometry/HGCalCommonData/data/hgcalConsData/v13/hgcalConsData.xml +++ b/Geometry/HGCalCommonData/data/hgcalConsData/v13/hgcalConsData.xml @@ -1,5 +1,5 @@ - + @@ -1250,1324 +1250,737 @@ 7342632, 7342633, 7342634, 7342656, 7342657, 7342689, 7342690, 7342691, 7342692, 7342693, 7342694, 7342695, 7342696, 7342697, 7342698, 7342753, 7342754, 7342755, 7342756, 7342757, 7342758, - 7342759, 7342760, 7342761, 7342820, 7342821, 7342822, 7342823 + 7342759, 7342760, 7342761, 7342820, 7342821, 7342822, 7342823 - - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 0, 0, - 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, - 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, - 0, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, - 1, 2, 2, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, - 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, - 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, - 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, - 1, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, - 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, 2, 0, 0, 0, - 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 0, 0, 1, 1, 1, 1, - 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, 2, 0, 0, 0, - 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 0, 0, 1, 1, 1, 1, - 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, - 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, - 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 1, 2, 2, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 0, 0, - 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 1, 2, 2, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, - 1, 1, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, - 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, - 2, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, - 2, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, - 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, - 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, - 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, - 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 1, - 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 0, - 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 2, 2, 1, 0, 0, 0, - 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, - 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, - 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, - 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 1, 1, - 1, 2, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, - 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, - 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 2, 2, - 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, - 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, - 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 2, 0, 1, 1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, - 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, - 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 1, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, - 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, - 1, 1, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 0, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, - 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 1, 1, - 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, - 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, - 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, - 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 1, - 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, - 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 1, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, - 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 1, 1, - 1, 2, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, - 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, - 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, - 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 1, 1, 1, - 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, - 2, 2, 0, 1, 1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, - 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, - 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, - 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, - 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 0, 0, - 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, - 1, 1, 1, 2, 2, 2, 0, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, - 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 0, 0, 1, 1, 1, 1, 1, - 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, - 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, - 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, - 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, - 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, 2, 2, - 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 0, - 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, - 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, - 2, 2, 0, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, - 2, 1, 1, 1, 1, 2, 2, 2, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, - 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, - 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, - 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, - 1, 2, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 2, - 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, - 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 0, 0, 1, 1, 1, - 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 - - - 3, 0, 0, 0, 0, 0, 0, 7, 3, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 1, 3, 6, 3, 0, 0, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 7, 0, 7, 7, 1, 0, 0, 0, 0, 0, 0, 0, 7, 7, 4, 1, 5, 1, 4, - 7, 6, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 7, 6, 3, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 7, 7, 1, 0, 0, 0, 0, 0, 0, 0, 7, 7, - 4, 1, 5, 1, 4, 7, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 4, 3, 6, 3, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, - 4, 1, 0, 0, 0, 0, 1, 4, 7, 7, 7, 6, 0, 0, 0, 0, 0, 0, 4, 6, - 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 1, 6, 3, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 1, 0, 0, 0, 0, 1, 4, 7, - 7, 7, 3, 0, 0, 0, 0, 0, 0, 7, 3, 0, 0, 0, 0, 0, 0, 7, 6, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 1, 3, 6, 3, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, - 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 7, 0, 7, 7, 1, 0, 0, 0, 0, 0, 0, 0, 7, 7, 4, 1, 5, - 1, 4, 7, 6, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 7, 6, 3, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 7, 1, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 4, 1, 5, 1, 4, 7, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 4, 3, 6, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, 4, 7, 5, 5, 5, 7, 6, - 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, - 0, 0, 0, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 4, 7, 5, 5, 5, 7, 3, 0, 0, 0, - 0, 0, 0, 7, 3, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 1, 3, 6, 3, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 0, 7, - 7, 1, 0, 0, 0, 0, 0, 0, 0, 7, 7, 4, 1, 5, 1, 4, 7, 6, 0, 0, - 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, - 0, 7, 6, 3, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 7, 7, 1, 0, 0, 0, 0, 0, 0, 0, 7, 7, 4, 1, 5, 1, - 4, 7, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 4, 3, 6, 3, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, - 4, 0, 0, 0, 0, 0, 0, 4, 7, 5, 5, 5, 7, 6, 0, 0, 0, 0, 0, 0, - 4, 6, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 0, 6, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, - 0, 0, 0, 0, 4, 7, 5, 5, 5, 7, 3, 0, 0, 0, 0, 0, 0, 7, 3, 0, - 0, 0, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 1, 3, 6, 3, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 0, 7, 7, 1, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 4, 1, 5, 1, 4, 7, 6, 0, 0, 0, 0, 0, 0, 1, 6, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 7, 6, 3, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 7, - 1, 0, 0, 0, 0, 0, 0, 0, 7, 7, 4, 1, 5, 1, 4, 7, 3, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 4, 6, 0, - 0, 0, 0, 0, 0, 4, 3, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, - 0, 4, 5, 5, 5, 5, 5, 6, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, - 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 4, 5, - 5, 5, 5, 5, 3, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 4, - 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 1, - 0, 5, 0, 1, 4, 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 1, 0, 5, 0, 1, 4, 3, 0, 0, 0, 0, 0, 0, 4, 3, 0, - 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, - 0, 1, 3, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 4, 1, 0, 0, 0, 0, 0, 0, 1, 4, - 5, 5, 5, 5, 5, 6, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, - 1, 3, 0, 0, 0, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 1, 0, 0, 0, 0, 0, 0, 1, 4, 5, - 5, 5, 5, 5, 3, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 4, - 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 1, - 0, 5, 0, 1, 4, 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 1, 0, 5, 0, 1, 4, 3, 0, 0, 0, 0, 0, 0, 4, 3, 0, - 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, - 0, 1, 3, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 4, 1, 0, 0, 0, 0, 0, 0, 1, 4, - 4, 1, 5, 1, 4, 6, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, - 1, 3, 0, 0, 0, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 1, 0, 0, 0, 0, 0, 0, 1, 4, 4, - 1, 5, 1, 4, 3, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 4, - 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 1, - 0, 1, 0, 1, 4, 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 1, 0, 1, 0, 1, 4, 3, 0, 0, 0, 0, 0, 0, 4, 3, 0, - 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 3, 6, 3, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 7, 5, 1, 1, 1, 5, 7, 6, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 7, 6, 3, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 5, 1, 1, 1, 5, 7, 3, 0, 0, 0, - 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 1, 0, 0, - 4, 7, 7, 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 4, 0, 0, 1, 0, 0, 4, 7, 7, 3, 0, 0, 0, 0, 0, - 0, 4, 3, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 3, 6, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 4, 1, 1, 1, 1, 1, 4, 6, 0, 0, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, - 6, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 1, 1, 1, 1, 1, 4, - 3, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, - 0, 1, 0, 0, 4, 7, 7, 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 1, 0, 0, 4, 7, 7, 3, 0, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, - 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 1, 1, 1, 1, 1, 4, 6, - 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 1, 1, - 1, 1, 1, 4, 3, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 1, - 6, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 7, 4, 0, 0, 1, 0, 0, 4, 7, 7, 7, 6, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 3, 0, 0, 0, 0, 0, 0, 0, 4, - 6, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, - 0, 1, 0, 0, 4, 7, 7, 7, 3, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, - 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 3, 6, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 4, 1, 0, 1, 0, 1, 4, 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, - 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 4, 1, 0, 1, 0, 1, 4, 3, 0, 0, 0, 0, 0, - 0, 1, 3, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 0, 4, 6, - 0, 0, 0, 0, 0, 0, 0, 7, 3, 6, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 7, 1, 0, 0, - 1, 0, 0, 1, 4, 7, 7, 6, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, 0, - 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 0, 1, 6, 3, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 7, 1, 0, 0, 1, 0, 0, - 1, 4, 7, 7, 3, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 4, - 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 1, - 0, 1, 0, 1, 4, 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 1, 0, 1, 0, 1, 4, 3, 0, 0, 0, 0, 0, 0, 1, 3, 0, - 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, - 0, 0, 0, 7, 3, 6, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 7, 1, 0, 0, 1, 0, 0, 1, - 4, 7, 7, 6, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 0, - 4, 3, 0, 0, 0, 0, 0, 0, 0, 1, 6, 3, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 7, 7, 1, 0, 0, 1, 0, 0, 1, 4, 7, 7, - 3, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, - 0, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, - 4, 0, 0, 1, 0, 0, 4, 7, 7, 7, 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 7, 3, 0, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 1, 0, 0, - 4, 7, 7, 7, 3, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 1, - 6, 0, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 0, 7, 3, 6, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 7, 0, 0, 0, 0, 0, - 0, 0, 4, 7, 5, 7, 7, 5, 7, 6, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, - 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 7, 7, 0, 0, 0, 0, 0, 0, 0, 4, 7, 5, 7, 7, 5, 7, 3, 0, - 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, - 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 0, 7, 3, 6, 3, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 7, 4, 7, 1, 0, 0, 0, 0, 0, 1, 4, 7, 7, 7, 7, 6, 0, 0, - 0, 0, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, - 0, 0, 0, 1, 6, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 7, 7, 1, 0, 0, 0, 0, 0, 1, 4, 7, 7, 7, 7, - 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 0, 4, 3, 6, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, - 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 4, 7, - 5, 7, 7, 5, 7, 6, 0, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, - 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, - 0, 0, 0, 0, 0, 0, 0, 4, 7, 5, 7, 7, 5, 7, 3, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 4, 6, - 0, 0, 0, 0, 0, 0, 0, 4, 3, 6, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, - 4, 1, 0, 0, 0, 0, 0, 1, 4, 5, 7, 7, 5, 6, 0, 0, 0, 0, 0, 0, - 0, 4, 6, 0, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 0, 1, - 6, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 1, 0, 0, 0, 0, 0, 1, 4, 5, 7, 7, 5 - - - 3, 0, 0, 0, 0, 0, 0, 5, 0, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, - 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 4, 5, 4, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 3, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 2, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 1, 2, 1, - 1, 2, 4, 4, 4, 4, 4, 4, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, - 4, 4, 4, 4, 4, 5, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, - 4, 4, 4, 0, 4, 4, 4, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, - 0, 4, 4, 4, 4, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, - 4, 4, 2, 2, 2, 2, 3, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 2, 2, - 2, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 5, 4, - 4, 4, 4, 4, 4, 4, 4, 5, 3, 4, 0, 4, 4, 4, 4, 4, 4, 4, 3, 4, - 5, 5, 4, 5, 4, 4, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, - 3, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 3, 5, 4, 4, 0, - 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 2, 0, 0, 0, 0, 2, 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 0, 0, - 2, 2, 2, 2, 2, 2, 3, 2, 4, 4, 4, 4, 4, 4, 0, 1, 1, 2, 2, 2, - 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, - 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 2, 2, 3, 4, 4, 4, - 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, 4, 4, 5, 4, 4, - 4, 4, 4, 4, 2, 2, 2, 3, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 2, 4, - 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 5, 4, 4, - 4, 4, 3, 0, 0, 0, 0, 0, 0, 5, 0, 2, 2, 2, 2, 2, 2, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 4, 5, 4, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 3, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 0, 2, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 1, - 2, 1, 1, 2, 4, 4, 4, 4, 4, 4, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, - 4, 4, 4, 4, 4, 0, 4, 4, 4, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, - 4, 4, 0, 4, 4, 4, 4, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 5, 4, - 4, 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, - 2, 2, 2, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, - 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 3, 4, 0, 4, 4, 4, 4, 4, 4, 4, - 3, 4, 5, 5, 4, 5, 4, 4, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, - 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 3, 5, 4, - 4, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, - 4, 4, 4, 4, 4, 4, 0, 0, 2, 2, 2, 2, 2, 2, 3, 2, 4, 4, 4, 4, - 4, 4, 4, 1, 1, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 5, - 4, 4, 4, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, - 4, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, - 2, 2, 3, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 2, 2, 2, 3, 4, 4, - 4, 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, 3, 4, 5, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 0, 0, 0, - 0, 0, 0, 5, 0, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, - 5, 2, 2, 2, 2, 2, 2, 4, 5, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, - 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, - 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 1, 2, 1, 1, 2, 4, 4, - 4, 4, 4, 4, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, - 4, 5, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 0, - 4, 4, 4, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, - 4, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, - 2, 2, 3, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 2, 2, 2, 4, 4, 4, - 4, 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 5, 4, 4, 4, 4, 4, - 4, 4, 4, 5, 3, 4, 0, 4, 4, 4, 4, 4, 4, 4, 3, 4, 5, 5, 4, 5, - 4, 4, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, - 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 3, 5, 4, 4, 0, 0, 0, 0, 0, - 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, - 0, 0, 2, 2, 2, 2, 2, 2, 3, 2, 4, 4, 4, 4, 4, 4, 4, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 2, 2, 2, - 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 2, 2, - 3, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, 4, - 4, 5, 4, 4, 4, 4, 4, 4, 2, 2, 2, 3, 4, 4, 4, 5, 4, 4, 4, 4, - 4, 4, 4, 2, 2, 3, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 0, 0, 0, 0, 0, 0, 5, 0, 2, - 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, - 2, 4, 5, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 1, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 2, 1, 2, 1, 1, 2, 4, 4, 4, 4, 4, 4, 1, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 2, 2, 2, - 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 2, 2, 2, 2, 2, - 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, 4, - 4, 0, 4, 4, 4, 4, 4, 4, 2, 2, 2, 4, 4, 4, 4, 5, 4, 4, 4, 4, - 4, 4, 4, 2, 2, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 3, 4, - 0, 4, 4, 4, 4, 4, 4, 4, 3, 4, 5, 5, 4, 5, 4, 4, 3, 0, 0, 0, - 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 5, 2, - 2, 2, 2, 2, 2, 3, 5, 4, 4, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 0, 0, 2, 2, 2, 2, - 2, 2, 3, 2, 4, 4, 4, 4, 4, 4, 4, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 2, 2, 2, 2, 2, 2, 3, 4, 4, - 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, - 5, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, 4, 4, 5, 4, 4, 4, 4, - 4, 4, 2, 2, 2, 3, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, 3, - 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, - 3, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 5, 4, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, - 0, 1, 0, 2, 1, 2, 4, 4, 4, 4, 4, 4, 4, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 4, 4, 4, 4, 4, 4, 4, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, - 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, - 5, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 2, 2, 2, 2, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, - 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 5, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 5, 5, 4, 4, 4, 5, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 1, 5, 2, 2, 2, 2, 2, - 2, 3, 5, 4, 4, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 2, 0, 0, 0, 0, 0, 0, 2, 1, - 1, 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 0, 0, 2, 2, 2, 2, 2, 2, - 4, 2, 4, 4, 4, 4, 4, 4, 4, 1, 1, 2, 2, 2, 2, 2, 2, 2, 4, 4, - 4, 4, 4, 4, 4, 5, 4, 4, 4, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, - 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 4, - 4, 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, - 2, 2, 2, 3, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, 3, 4, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, 5, 4, 4, - 4, 4, 4, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, - 3, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 5, 4, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, - 0, 1, 0, 2, 1, 2, 4, 4, 4, 4, 4, 4, 4, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 4, 4, 4, 4, 4, 4, 4, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, - 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, - 5, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 2, 2, 2, 2, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, - 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 5, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 5, 5, 4, 4, 4, 5, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 1, 5, 2, 2, 2, 2, 2, - 2, 3, 5, 4, 4, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 2, 0, 0, 0, 0, 0, 0, 2, 1, - 2, 2, 1, 2, 1, 2, 4, 4, 4, 4, 4, 4, 0, 0, 2, 2, 2, 2, 2, 2, - 4, 2, 4, 4, 4, 4, 4, 4, 4, 1, 1, 2, 2, 2, 2, 2, 2, 2, 4, 4, - 4, 4, 4, 4, 4, 0, 4, 4, 4, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, - 4, 4, 0, 4, 4, 4, 4, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 5, 4, - 4, 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, - 2, 2, 2, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, 5, 4, 5, - 5, 4, 5, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, - 3, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 5, 4, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, - 0, 2, 0, 2, 1, 2, 4, 4, 4, 4, 4, 4, 4, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 4, 4, 4, 4, 4, 4, 4, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, - 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, - 0, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 2, 2, 2, 2, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, - 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 5, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, - 2, 2, 5, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 2, 1, 1, 2, 4, 4, 4, 4, 4, 4, 4, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 2, 2, 2, - 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 2, 2, 2, 2, 2, - 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, - 4, 0, 4, 4, 4, 4, 4, 4, 2, 2, 2, 4, 4, 4, 4, 5, 4, 4, 4, 4, - 4, 4, 4, 2, 2, 3, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, 3, 5, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 4, 4, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, - 5, 2, 2, 2, 2, 2, 2, 2, 5, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 2, 0, 0, - 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 4, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 4, 4, 4, 4, 4, 4, 4, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, - 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, - 0, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, - 2, 3, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 5, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 4, 3, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 5, 2, - 2, 2, 2, 2, 2, 2, 5, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, - 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, - 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 3, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 1, 2, 4, 4, 4, 4, - 4, 4, 4, 0, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 0, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, - 4, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 2, - 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 2, 2, 2, 2, - 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 2, 2, 2, 4, 4, 4, 4, 0, - 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, - 4, 2, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 4, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, - 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 5, 4, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, - 0, 2, 0, 0, 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 4, 0, 2, 2, 2, 2, - 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 0, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, - 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 3, 4, - 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, - 4, 4, 2, 2, 2, 3, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 5, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 4, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, - 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 5, 4, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, - 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 3, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 1, 2, - 4, 4, 4, 4, 4, 4, 4, 0, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, - 4, 4, 4, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, - 4, 0, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 0, 4, - 4, 4, 4, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, - 2, 2, 2, 2, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 2, 2, 2, 4, - 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 5, 4, 4, 4, - 4, 4, 4, 4, 4, 2, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, - 5, 5, 5, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 5, 4, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 2, 2, 0, 0, 2, 0, 0, 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, - 4, 4, 0, 2, 2, 2, 2, 2, 2, 2, 3, 2, 4, 4, 4, 4, 4, 4, 4, 0, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 2, 2, - 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, - 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 3, 4, 4, 5, 4, 4, 4, - 4, 4, 4, 4, 4, 2, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, - 4, 5, 4, 4, 4, 4, 4, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, - 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, - 5, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 2, 2, 0, 2, 0, 2, 1, 2, 4, 4, 4, 4, 4, 4, 4, 0, 2, 2, - 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 0, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 2, 2, 2, 2, 2, - 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, - 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, - 4, 2, 2, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 5, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 3, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 2, 2, 2, 2, 2, 2, 2, 3, 5, 4, 4, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, - 2, 0, 0, 2, 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 4, 0, 0, 2, 2, 2, - 2, 2, 2, 2, 3, 2, 4, 4, 4, 4, 4, 4, 4, 0, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, - 2, 2, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, - 3, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 5, 4, 4, 4, - 4, 4, 4, 4, 2, 2, 2, 3, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 2, - 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 4, 4, - 5, 4, 4, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, - 3, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 5, 4, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, - 0, 2, 0, 2, 1, 2, 4, 4, 4, 4, 4, 4, 4, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 4, 4, 4, 4, 4, 4, 4, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, - 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, - 0, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 2, 2, 2, 2, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, - 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 5, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, - 2, 2, 2, 3, 5, 4, 4, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, - 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 3, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 2, 0, 0, 2, - 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 4, 0, 0, 2, 2, 2, 2, 2, 2, 2, - 3, 2, 4, 4, 4, 4, 4, 4, 4, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 4, 4, - 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, - 4, 4, 0, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, - 2, 2, 2, 3, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 5, 5, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 4, 4, 5, 4, 4, 4, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 5, 4, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 2, 0, 0, 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 4, 0, 2, - 2, 2, 2, 2, 2, 2, 3, 2, 4, 4, 4, 4, 4, 4, 4, 0, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, - 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 2, - 2, 2, 3, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 5, 4, - 4, 4, 4, 4, 4, 4, 2, 2, 2, 3, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, - 4, 2, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 5, 4, 4, - 4, 4, 4, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 3, 5, 4, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 4, 0, 0, 2, - 2, 2, 2, 2, 2, 2, 3, 2, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 2, 2, - 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, - 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, 2, - 2, 2, 3, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, - 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 3, 4, 4, 4, 5, - 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 3, 5, 5, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 3, 5, 4, 4, 0, 0, 0, 0, 0, - 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 2, 1, 1, 1, 1, 1, 2, 4, 4, - 4, 4, 4, 4, 4, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 2, 4, 4, 4, 4, - 4, 4, 4, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 5, - 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, - 4, 4, 4, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, - 4, 2, 2, 2, 2, 3, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, - 2, 3, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 5, 5, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 3, 5, 4, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 4, 0, 0, 2, 2, 2, 2, 2, - 2, 2, 3, 2, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 2, 2, 2, 2, 2, 2, - 2, 3, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, - 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 3, 4, - 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, 4, 4, - 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 3, 4, 4, 4, 5, 4, 4, 4, 4, - 4, 4, 4, 4, 2, 2, 3, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 2, 2, 2, 2, 2, 2, 2, 3, 5, 4, 4, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 2, 0, 0, 0, 0, 0, 2, 1, 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, - 4, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 2, 4, 4, 4, 4, 4, 4, 4, 0, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, - 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 2, 2, 2, - 2, 3, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 3, 4, 4, - 0, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4 + + 330, 0, 0, 1, 1, 1, 2, 572, 30, 200, 200, 201, + 201, 201, 202, 272, 360, 0, 0, 1, 1, 1, 2, 2, + 560, 200, 200, 201, 201, 201, 202, 412, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 72, 200, 200, 200, 201, 201, + 201, 202, 272, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 42, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 201, + 202, 312, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 112, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 142, 202, 202, 242, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 212, 72, 202, 272, + 172, 312, 2, 2, 2, 2, 2, 2, 2, 72, 172, 242, + 212, 152, 212, 142, 172, 260, 400, 400, 401, 401, 401, 402, + 112, 60, 200, 200, 201, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 572, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 372, 400, 400, 400, 401, 401, 401, 402, 42, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 342, 400, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 412, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 12, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 412, 401, 402, + 402, 542, 401, 401, 401, 401, 401, 401, 401, 202, 202, 442, + 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, 512, + 372, 472, 12, 402, 402, 402, 402, 402, 402, 402, 372, 472, + 542, 512, 452, 512, 442, 472, 330, 0, 0, 1, 1, 1, + 2, 30, 200, 200, 201, 201, 201, 202, 360, 0, 0, 1, + 1, 1, 2, 42, 560, 200, 200, 201, 201, 201, 202, 342, + 530, 460, 430, 0, 0, 0, 1, 1, 1, 112, 200, 200, + 200, 201, 201, 201, 312, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 200, 200, 201, 201, 201, 202, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 72, 201, 201, 201, 201, + 202, 272, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 72, 201, 201, 201, 202, 272, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 72, 201, 201, 202, 272, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 112, 202, 312, 202, 2, 1, + 1, 1, 1, 1, 2, 2, 142, 242, 242, 212, 2, 2, + 2, 2, 212, 142, 172, 172, 172, 260, 400, 400, 401, 401, + 401, 402, 42, 60, 200, 200, 201, 201, 201, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 12, 160, 130, 200, 200, 200, + 201, 201, 201, 412, 400, 400, 400, 401, 401, 401, 402, 400, + 400, 400, 200, 200, 201, 201, 201, 202, 400, 401, 401, 401, + 401, 402, 572, 400, 400, 400, 400, 201, 201, 201, 201, 202, + 372, 401, 401, 401, 401, 402, 572, 401, 400, 400, 401, 401, + 201, 201, 201, 202, 372, 401, 401, 401, 402, 572, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 372, 401, 402, 12, 401, + 401, 401, 401, 401, 401, 401, 202, 412, 402, 542, 402, 401, + 401, 401, 401, 401, 402, 402, 442, 542, 512, 402, 402, 402, + 402, 512, 442, 472, 472, 472, 330, 0, 0, 1, 1, 1, + 2, 572, 30, 200, 200, 201, 201, 201, 202, 272, 360, 0, + 0, 1, 1, 1, 2, 2, 560, 200, 200, 201, 201, 201, + 202, 412, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 72, 200, 200, 200, 201, 201, 201, 202, 272, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 1, 1, 1, 1, + 2, 112, 201, 201, 201, 201, 202, 312, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 142, 202, 202, 242, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 212, 72, 202, 272, 172, 312, 2, 2, 2, 2, + 2, 2, 2, 72, 172, 242, 212, 152, 212, 142, 172, 260, + 400, 400, 401, 401, 401, 402, 112, 60, 200, 200, 201, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 572, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 372, 400, 400, + 400, 401, 401, 401, 402, 42, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 342, 400, 401, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 201, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 552, 401, 400, 400, 401, 401, 201, 201, 201, 202, + 352, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 542, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 442, 402, 402, 572, 402, 401, 401, + 401, 401, 401, 402, 402, 512, 372, 472, 12, 402, 402, 402, + 402, 402, 402, 402, 372, 472, 542, 512, 452, 512, 442, 472, + 330, 0, 0, 1, 1, 1, 2, 30, 200, 200, 201, 201, + 201, 202, 360, 0, 0, 1, 1, 1, 2, 42, 560, 200, + 200, 201, 201, 201, 202, 342, 530, 460, 430, 0, 0, 0, + 1, 1, 1, 2, 200, 200, 200, 201, 201, 201, 202, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 72, 200, 200, + 201, 201, 201, 202, 272, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 52, 201, 201, 201, 201, 202, 252, 201, 1, + 0, 0, 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, + 202, 252, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 72, 202, 202, 272, 202, 2, 1, 1, 1, + 1, 1, 2, 2, 142, 242, 242, 2, 2, 2, 2, 2, + 2, 142, 172, 152, 152, 152, 172, 260, 400, 400, 401, 401, + 401, 402, 42, 60, 200, 200, 201, 201, 201, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, + 201, 201, 201, 202, 400, 400, 400, 401, 401, 401, 402, 572, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 372, 400, 401, + 401, 401, 401, 402, 552, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 352, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 552, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 352, 401, 402, + 402, 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, 372, + 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 442, 542, + 402, 402, 402, 402, 402, 402, 442, 472, 452, 452, 452, 472, + 330, 0, 0, 1, 1, 1, 2, 572, 30, 200, 200, 201, + 201, 201, 202, 272, 360, 0, 0, 1, 1, 1, 2, 2, + 560, 200, 200, 201, 201, 201, 202, 412, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 72, 200, 200, 200, 201, 201, + 201, 202, 272, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 42, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 201, + 202, 312, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 112, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 142, 202, 202, 242, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 212, 72, 202, 272, + 172, 312, 2, 2, 2, 2, 2, 2, 2, 72, 172, 242, + 212, 152, 212, 142, 172, 260, 400, 400, 401, 401, 401, 402, + 112, 60, 200, 200, 201, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 572, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 372, 400, 400, 400, 401, 401, 401, 402, 42, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 342, 400, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 412, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 12, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 412, 401, 402, + 402, 542, 401, 401, 401, 401, 401, 401, 401, 202, 202, 442, + 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, 512, + 372, 472, 12, 402, 402, 402, 402, 402, 402, 402, 372, 472, + 542, 512, 452, 512, 442, 472, 330, 0, 0, 1, 1, 1, + 2, 30, 200, 200, 201, 201, 201, 202, 360, 0, 0, 1, + 1, 1, 2, 42, 560, 200, 200, 201, 201, 201, 202, 342, + 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, 200, 200, + 200, 201, 201, 201, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 72, 200, 200, 201, 201, 201, 202, 272, 200, + 0, 0, 0, 0, 1, 1, 1, 1, 2, 52, 201, 201, + 201, 201, 202, 252, 201, 1, 0, 0, 1, 1, 1, 1, + 1, 2, 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 52, 201, 201, 202, 252, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 72, 202, 202, + 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, 142, 242, + 242, 2, 2, 2, 2, 2, 2, 142, 172, 152, 152, 152, + 172, 260, 400, 400, 401, 401, 401, 402, 42, 60, 200, 200, + 201, 201, 201, 202, 342, 230, 400, 400, 400, 401, 401, 401, + 402, 160, 130, 200, 200, 200, 201, 201, 201, 202, 400, 400, + 400, 401, 401, 401, 402, 572, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 372, 400, 401, 401, 401, 401, 402, 552, 400, + 400, 400, 400, 201, 201, 201, 201, 202, 352, 401, 401, 401, + 401, 402, 552, 401, 400, 400, 401, 401, 201, 201, 201, 202, + 352, 401, 401, 401, 402, 552, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 352, 401, 402, 402, 572, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 372, 402, 542, 402, 401, 401, 401, + 401, 401, 402, 402, 442, 542, 402, 402, 402, 402, 402, 402, + 442, 472, 452, 452, 452, 472, 330, 0, 0, 1, 1, 1, + 2, 572, 30, 200, 200, 201, 201, 201, 202, 272, 360, 0, + 0, 1, 1, 1, 2, 2, 560, 200, 200, 201, 201, 201, + 202, 412, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 72, 200, 200, 200, 201, 201, 201, 202, 272, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 1, 1, 1, 1, + 2, 112, 201, 201, 201, 201, 202, 312, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 142, 202, 202, 242, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 212, 72, 202, 272, 172, 312, 2, 2, 2, 2, + 2, 2, 2, 72, 172, 242, 212, 152, 212, 142, 172, 260, + 400, 400, 401, 401, 401, 402, 112, 60, 200, 200, 201, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 572, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 372, 400, 400, + 400, 401, 401, 401, 402, 42, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 342, 400, 401, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 201, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 552, 401, 400, 400, 401, 401, 201, 201, 201, 202, + 352, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 542, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 442, 402, 402, 572, 402, 401, 401, + 401, 401, 401, 402, 402, 512, 372, 472, 12, 402, 402, 402, + 402, 402, 402, 402, 372, 472, 542, 512, 452, 512, 442, 472, + 330, 0, 0, 1, 1, 1, 2, 30, 200, 200, 201, 201, + 201, 202, 360, 0, 0, 1, 1, 1, 2, 42, 560, 200, + 200, 201, 201, 201, 202, 342, 530, 460, 430, 0, 0, 0, + 1, 1, 1, 2, 200, 200, 200, 201, 201, 201, 202, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 52, 200, 200, + 201, 201, 201, 202, 252, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 52, 201, 201, 201, 201, 202, 252, 201, 1, + 0, 0, 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, + 202, 252, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 52, 202, 202, 252, 202, 2, 1, 1, 1, + 1, 1, 2, 2, 142, 242, 242, 2, 2, 2, 2, 2, + 2, 142, 152, 152, 152, 152, 152, 260, 400, 400, 401, 401, + 401, 402, 42, 60, 200, 200, 201, 201, 201, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, + 201, 201, 201, 202, 400, 400, 400, 401, 401, 401, 402, 552, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 352, 400, 401, + 401, 401, 401, 402, 552, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 352, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 552, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 352, 401, 402, + 402, 552, 401, 401, 401, 401, 401, 401, 401, 202, 202, 352, + 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 442, 542, + 402, 402, 402, 402, 402, 402, 442, 452, 452, 452, 452, 452, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 1, 1, 1, 2, 2, + 560, 200, 200, 201, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 2, 201, 201, 201, 201, + 202, 202, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 152, 2, 212, 142, 260, 400, 400, 401, 401, 401, 402, + 402, 60, 200, 200, 201, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 401, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 452, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 1, 1, 1, 2, 112, 560, 200, 200, 201, 201, 201, + 202, 312, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 200, 200, 200, 201, 201, 201, 202, 200, 0, 0, 0, 0, + 0, 1, 1, 1, 2, 52, 200, 200, 201, 201, 201, 202, + 252, 200, 0, 0, 0, 0, 1, 1, 1, 1, 2, 52, + 201, 201, 201, 201, 202, 252, 201, 1, 0, 0, 1, 1, + 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, 201, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 52, 201, 201, 202, + 252, 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 52, + 202, 202, 252, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 112, 312, 242, 212, 2, 2, 2, 2, 2, 2, 212, 142, + 152, 152, 152, 152, 152, 260, 400, 400, 401, 401, 401, 402, + 12, 60, 200, 200, 201, 201, 201, 202, 412, 230, 400, 400, + 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, 201, 201, + 201, 202, 400, 400, 400, 401, 401, 401, 402, 552, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 352, 400, 401, 401, 401, + 401, 402, 552, 400, 400, 400, 400, 201, 201, 201, 201, 202, + 352, 401, 401, 401, 401, 402, 552, 401, 400, 400, 401, 401, + 201, 201, 201, 202, 352, 401, 401, 401, 402, 552, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 352, 401, 402, 402, 552, + 401, 401, 401, 401, 401, 401, 401, 202, 202, 352, 402, 12, + 402, 401, 401, 401, 401, 401, 402, 402, 412, 542, 512, 402, + 402, 402, 402, 402, 402, 512, 442, 452, 452, 452, 452, 452, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 152, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 552, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 452, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 112, 560, 200, 200, 200, 201, 201, + 202, 312, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 200, 200, 200, 201, 201, 201, 202, 200, 0, 0, 0, 0, + 0, 1, 1, 1, 2, 42, 200, 200, 201, 201, 201, 202, + 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, 2, 112, + 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, 0, 1, + 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, 201, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, 201, 202, + 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 142, + 202, 202, 242, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 112, 312, 242, 212, 2, 2, 2, 2, 2, 2, 212, 142, + 242, 212, 152, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 12, 60, 200, 200, 200, 201, 201, 202, 412, 230, 400, 400, + 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, 201, 201, + 201, 202, 400, 400, 400, 401, 401, 401, 402, 42, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 342, 400, 400, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 200, 201, 201, 201, 202, + 412, 401, 401, 401, 401, 402, 552, 400, 400, 400, 400, 401, + 201, 201, 201, 202, 352, 401, 401, 401, 402, 12, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 412, 401, 402, 402, 542, + 401, 401, 401, 401, 401, 401, 401, 202, 202, 442, 402, 12, + 402, 401, 401, 401, 401, 401, 402, 402, 412, 542, 512, 402, + 402, 402, 402, 402, 402, 512, 442, 542, 512, 452, 512, 442, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 212, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 512, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 2, 560, 200, 200, 200, 201, 201, + 202, 202, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 72, 200, 200, 200, 201, 201, 201, 202, 272, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 52, 200, 200, 201, 201, + 201, 202, 252, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, + 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 202, 312, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 52, 202, 202, 252, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 2, 72, 202, 272, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 172, 152, 212, 212, 212, 152, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 572, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 372, 400, 400, + 400, 401, 401, 401, 402, 552, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 352, 400, 400, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 200, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, 201, 202, + 412, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 552, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 352, 402, 402, 572, 402, 401, 401, + 401, 401, 401, 402, 402, 202, 372, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 442, 472, 452, 512, 512, 512, 452, 472, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, 201, + 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, 1, + 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, 2, 2, + 2, 142, 242, 2, 2, 212, 2, 2, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, 402, 572, + 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, 372, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, + 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, 401, 401, + 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, 572, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, 402, 402, + 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, 442, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, 402, 402, + 512, 402, 402, 442, 472, 472, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 2, 560, 200, 200, 200, 201, 201, + 202, 202, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 42, 200, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 112, 200, 200, 201, 201, + 201, 202, 312, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, + 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 202, 312, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 112, 202, 202, 312, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 212, 212, 212, 212, 212, 142, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 12, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 412, 400, 400, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 200, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, 201, 202, + 412, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 12, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 412, 402, 402, 542, 402, 401, 401, + 401, 401, 401, 402, 402, 202, 442, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 442, 542, 512, 512, 512, 512, 512, 442, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, 201, + 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, 1, + 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, 2, 2, + 2, 142, 242, 2, 2, 212, 2, 2, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, 402, 572, + 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, 372, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, + 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, 401, 401, + 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, 572, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, 402, 402, + 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, 442, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, 402, 402, + 512, 402, 402, 442, 472, 472, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 2, 560, 200, 200, 200, 201, 201, + 202, 202, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 42, 200, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 112, 200, 200, 201, 201, + 201, 202, 312, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, + 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 202, 312, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 112, 202, 202, 312, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 212, 212, 212, 212, 212, 142, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 12, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 412, 400, 400, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 200, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, 201, 202, + 412, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 12, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 412, 402, 402, 542, 402, 401, 401, + 401, 401, 401, 402, 402, 202, 442, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 442, 542, 512, 512, 512, 512, 512, 442, + 330, 0, 0, 1, 1, 1, 2, 12, 30, 200, 200, 201, + 201, 201, 202, 312, 360, 0, 0, 0, 1, 1, 2, 2, + 72, 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, + 201, 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, + 1, 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, + 0, 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, + 201, 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, + 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, + 202, 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, + 2, 2, 142, 202, 242, 212, 2, 2, 2, 2, 2, 2, + 2, 2, 112, 272, 242, 2, 2, 212, 2, 2, 142, 172, + 172, 172, 260, 400, 400, 400, 401, 401, 402, 402, 60, 200, + 200, 200, 201, 201, 202, 202, 372, 230, 400, 400, 400, 401, + 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, 201, 201, + 202, 342, 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, + 401, 402, 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 402, 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, + 202, 372, 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, + 402, 202, 442, 512, 572, 402, 402, 402, 402, 402, 402, 402, + 402, 412, 542, 402, 402, 512, 402, 402, 442, 472, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 212, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 512, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 12, 30, 200, 200, 201, 201, 201, 202, 312, 360, 0, + 0, 0, 1, 1, 2, 2, 42, 560, 200, 200, 200, 201, + 201, 202, 202, 372, 530, 460, 430, 0, 0, 0, 1, 1, + 1, 2, 112, 200, 200, 200, 201, 201, 201, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 201, 201, 201, 202, 202, 272, + 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, 112, 201, + 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 72, 202, 202, 202, 272, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 112, 202, 312, + 212, 2, 2, 2, 2, 2, 2, 2, 2, 112, 172, 242, + 272, 212, 2, 2, 212, 2, 2, 212, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 72, 60, 200, 200, 200, + 201, 201, 202, 202, 342, 230, 400, 400, 400, 401, 401, 401, + 402, 12, 160, 130, 200, 200, 200, 201, 201, 201, 202, 412, + 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, + 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, + 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, + 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, + 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, + 402, 402, 12, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 412, 512, 542, 402, 402, 402, 402, 402, 402, 402, 402, 412, + 472, 572, 512, 402, 402, 512, 402, 402, 512, 442, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 212, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 512, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 12, 30, 200, 200, 201, 201, 201, 202, 312, 360, 0, + 0, 0, 1, 1, 2, 2, 42, 560, 200, 200, 200, 201, + 201, 202, 202, 372, 530, 460, 430, 0, 0, 0, 1, 1, + 1, 2, 112, 200, 200, 200, 201, 201, 201, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 201, 201, 201, 202, 202, 272, + 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, 112, 201, + 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 72, 202, 202, 202, 272, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 112, 202, 312, + 212, 2, 2, 2, 2, 2, 2, 2, 2, 112, 172, 242, + 272, 212, 2, 2, 212, 2, 2, 212, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 72, 60, 200, 200, 200, + 201, 201, 202, 202, 342, 230, 400, 400, 400, 401, 401, 401, + 402, 12, 160, 130, 200, 200, 200, 201, 201, 201, 202, 412, + 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, + 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, + 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, + 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, + 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, + 402, 402, 12, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 412, 512, 542, 402, 402, 402, 402, 402, 402, 402, 402, 412, + 472, 572, 512, 402, 402, 512, 402, 402, 512, 442, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 12, 30, 200, 200, 201, + 201, 201, 202, 312, 360, 0, 0, 0, 1, 1, 2, 2, + 72, 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, + 201, 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, + 1, 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, + 0, 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, + 201, 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, + 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, + 202, 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, + 2, 2, 142, 202, 242, 212, 2, 2, 2, 2, 2, 2, + 2, 2, 112, 272, 242, 2, 2, 212, 2, 2, 142, 172, + 172, 172, 260, 400, 400, 400, 401, 401, 402, 402, 60, 200, + 200, 200, 201, 201, 202, 202, 372, 230, 400, 400, 400, 401, + 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, 201, 201, + 202, 342, 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, + 401, 402, 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 402, 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, + 202, 372, 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, + 402, 202, 442, 512, 572, 402, 402, 402, 402, 402, 402, 402, + 402, 412, 542, 402, 402, 512, 402, 402, 442, 472, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 12, 30, 200, 200, 201, + 201, 201, 202, 312, 360, 0, 0, 1, 1, 1, 2, 2, + 42, 560, 200, 200, 201, 201, 201, 202, 202, 372, 530, 460, + 430, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 200, 201, 201, 201, 202, 202, + 272, 200, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, + 52, 201, 201, 201, 201, 202, 202, 252, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 2, 72, 201, 201, 201, 202, + 202, 272, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 72, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 52, 202, 202, 202, 252, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 72, 202, + 202, 272, 212, 2, 2, 2, 2, 2, 2, 2, 2, 112, + 172, 242, 272, 2, 2, 2, 2, 2, 2, 2, 142, 172, + 152, 172, 172, 152, 172, 260, 400, 400, 401, 401, 401, 402, + 402, 72, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 402, 160, 130, 200, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 400, 401, 401, 401, + 402, 402, 572, 400, 400, 400, 200, 200, 201, 201, 201, 202, + 202, 372, 400, 401, 401, 401, 401, 402, 402, 552, 400, 400, + 400, 400, 201, 201, 201, 201, 202, 202, 352, 401, 401, 401, + 401, 402, 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 402, 402, 572, 401, 401, 401, + 401, 401, 401, 201, 201, 202, 202, 372, 401, 402, 402, 402, + 552, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, + 202, 202, 372, 512, 542, 402, 402, 402, 402, 402, 402, 402, + 402, 412, 472, 572, 402, 402, 402, 402, 402, 402, 402, 442, + 472, 452, 472, 472, 452, 472, 330, 0, 0, 1, 1, 1, + 2, 12, 30, 200, 200, 201, 201, 201, 202, 312, 360, 0, + 0, 1, 1, 1, 2, 2, 42, 560, 200, 200, 201, 201, + 201, 202, 202, 372, 530, 460, 430, 0, 0, 0, 1, 1, + 1, 2, 112, 200, 200, 200, 201, 201, 201, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 2, 72, 201, 201, 201, 201, 202, 202, 272, + 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 72, + 201, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 72, 201, 201, 202, 202, 272, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 2, 112, 202, 312, 212, 2, 2, 2, 2, 2, 2, 2, + 2, 112, 172, 242, 272, 212, 2, 2, 2, 2, 2, 212, + 142, 172, 172, 172, 172, 260, 400, 400, 401, 401, 401, 402, + 402, 72, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 12, 160, 130, 200, 200, + 200, 201, 201, 201, 202, 412, 400, 400, 400, 401, 401, 401, + 402, 402, 400, 400, 400, 200, 200, 201, 201, 201, 202, 202, + 400, 401, 401, 401, 401, 402, 402, 572, 400, 400, 400, 400, + 201, 201, 201, 201, 202, 202, 372, 401, 401, 401, 401, 402, + 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, 202, 202, + 372, 401, 401, 401, 402, 402, 572, 401, 401, 401, 401, 401, + 401, 201, 201, 202, 202, 372, 401, 402, 402, 402, 572, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, 402, 402, + 12, 402, 401, 401, 401, 401, 401, 402, 402, 202, 412, 512, + 542, 402, 402, 402, 402, 402, 402, 402, 402, 412, 472, 572, + 512, 402, 402, 402, 402, 402, 512, 442, 472, 472, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 2, 30, 200, 200, 201, + 201, 201, 202, 202, 360, 0, 0, 1, 1, 1, 2, 2, + 42, 560, 200, 200, 201, 201, 201, 202, 202, 342, 530, 460, + 430, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 200, 201, 201, 201, 202, 202, + 272, 200, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, + 52, 201, 201, 201, 201, 202, 202, 252, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 2, 72, 201, 201, 201, 202, + 202, 272, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 72, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 52, 202, 202, 202, 252, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 72, 202, + 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 142, 242, 242, 2, 2, 2, 2, 2, 2, 2, 142, 172, + 152, 172, 172, 152, 172, 260, 400, 400, 401, 401, 401, 402, + 402, 42, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 402, 160, 130, 200, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 400, 401, 401, 401, + 402, 402, 572, 400, 400, 400, 200, 200, 201, 201, 201, 202, + 202, 372, 400, 401, 401, 401, 401, 402, 402, 552, 400, 400, + 400, 400, 201, 201, 201, 201, 202, 202, 352, 401, 401, 401, + 401, 402, 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 402, 402, 572, 401, 401, 401, + 401, 401, 401, 201, 201, 202, 202, 372, 401, 402, 402, 402, + 552, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, + 202, 202, 372, 402, 542, 402, 402, 402, 402, 402, 402, 402, + 402, 402, 442, 542, 402, 402, 402, 402, 402, 402, 402, 442, + 472, 452, 472, 472, 452, 472, 330, 0, 0, 1, 1, 1, + 2, 2, 30, 200, 200, 201, 201, 201, 202, 202, 360, 0, + 0, 1, 1, 1, 2, 2, 42, 560, 200, 200, 201, 201, + 201, 202, 202, 342, 530, 460, 430, 0, 0, 0, 1, 1, + 2, 2, 112, 200, 200, 200, 201, 201, 202, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 2, 52, 201, 201, 201, 201, 202, 202, 252, + 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 72, + 201, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 72, 201, 202, 202, 202, 272, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 52, 202, + 202, 202, 252, 202, 2, 2, 1, 1, 1, 2, 2, 2, + 2, 112, 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 142, 242, 242, 212, 2, 2, 2, 2, 2, 212, + 142, 152, 172, 172, 152, 260, 400, 400, 401, 401, 401, 402, + 402, 42, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 402, 402, 12, 160, 130, 200, 200, + 200, 201, 201, 202, 202, 412, 400, 400, 400, 401, 401, 401, + 402, 402, 400, 400, 400, 200, 200, 201, 201, 201, 202, 202, + 400, 401, 401, 401, 401, 402, 402, 552, 400, 400, 400, 400, + 201, 201, 201, 201, 202, 202, 352, 401, 401, 401, 401, 402, + 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, 202, 202, + 372, 401, 401, 402, 402, 402, 572, 401, 401, 401, 401, 401, + 401, 201, 202, 202, 202, 372, 401, 402, 402, 402, 552, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 352, 402, 402, + 12, 402, 402, 401, 401, 401, 402, 402, 402, 202, 412, 402, + 542, 402, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 402, 402, 402, 402, 512, 442, 452, 472, 472, 452 262146, 262147, 262148, 262149, 262150, 262151, 262152, @@ -3421,910 +2834,506 @@ 5769447, 5769472, 5769473, 5769474, 5769475, 5769505, 5769506, 5769507, 5769508, 5769509, 5769510, 5769511, 5769536, 5769537, 5769569, 5769570, 5769571, 5769572, 5769573, 5769574, 5769633, - 5769634, 5769635, 5769636, 5769637 - - - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 1, 0, 0, 0, 1, 1, 1, - 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, - 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, - 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, - 2, 2, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, - 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 2, 2, - 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 1, - 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 1, - 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, - 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, - 1, 1, 1, 1, 2, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, - 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, - 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, - 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, - 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, - 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 1, 1, - 1, 2, 2, 2, 2, 2, 1, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, - 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, - 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 0, 0, 1, - 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, - 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 1, 1, 1, 2, - 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, - 2, 2, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 1, 1, 2, 2, 2, 2, 0, 0, 0, 1, 1, 2, 2, 2, 2, 0, 0, 0, - 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 1, - 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, - 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, - 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, - 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 0, - 0, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, - 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 0, - 1, 1, 1, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 2, - 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 2, 1, 0, 0, 0, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, - 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 0, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 1, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 2, 0, 1, 1, 1, 2, - 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, - 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, - 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, - 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, - 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, - 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 0, 1, 1, 2, 2, 2, 2, 0, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, - 2, 2, 1, 1, 1, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 0, 1, 1, - 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, - 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, - 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, - 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, - 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, - 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, - 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, - 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, - 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, - 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, - 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, - 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, - 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, - 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, - 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, - 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, - 2, 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, - 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, - 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, - 2, 2, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 2, - 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, - 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, - 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1, - 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, - 2, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 2, 2, - 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, - 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, - 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 2, - 2, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 2, 2, - 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, - 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, - 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 2, 2, - 1, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, - 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, - 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2 - - - 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 7, 0, 0, 0, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 4, 1, 0, 7, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 0, 0, 1, 1, 0, 0, - 4, 7, 7, 7, 7, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, - 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 4, 0, 0, 0, 0, 0, 0, 4, 7, - 5, 5, 7, 4, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 4, 0, 0, 5, 0, 0, 4, 7, - 7, 7, 4, 0, 0, 0, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 0, 7, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 4, 1, 0, 0, 5, 0, - 0, 1, 4, 7, 7, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 5, 5, 5, 5, 7, 4, 0, 0, 0, 0, 0, 0, 0, 7, - 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 4, 4, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 4, 1, 1, 4, 7, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 4, 7, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 4, 0, 0, 0, 5, 0, 0, - 0, 4, 7, 7, 7, 7, 4, 0, 0, 0, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, - 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 4, 0, - 0, 0, 5, 0, 0, 0, 4, 7, 5, 5, 7, 0, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 4, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 4, 1, 1, 4, - 7, 4, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, - 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 1, 0, 0, 5, 0, 0, 1, 4, - 7, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 4, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5, 1, 4, 4, - 1, 5, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 7, 0, 0, 0, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 7, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 4, 1, 0, 0, 1, 1, 0, 0, - 1, 4, 7, 5, 5, 7, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 7, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 7, 7, 4, 1, 7, 7, 1, 4, 7, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 7, 0, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, - 7, 4, 0, 0, 4, 4, 0, 0, 4, 7, 7, 7, 7, 7, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 4, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 7, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, - 1, 4, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 4, 1, 0, 0, 1, 4, 7, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 1, 0, 0, 0, 0, 1, 4, 7, 7, - 7, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, - 0, 0, 0, 0, 0, 0, 4, 7, 5, 5, 5, 5, 7, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 4, 7, 5, 5, 5, 5, 7, 1, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 7, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 4, 1, 0, 0, 0, 0, 1, 4, 7, 7, 7, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 1, 0, 0, 0, 0, 1, 4, 7, 7, - 7, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, - 0, 0, 0, 0, 0, 0, 4, 7, 5, 5, 5, 5, 7, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 4, 7, 5, 5, 5, 5, 7, 1, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 7, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 4, 1, 0, 0, 0, 0, 1, 4, 7, 7, 7, 4, 0, 0, 0, 0, 4, 4, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, - 0, 7, 4, 0, 0, 0, 0, 0, 7, 0, 1, 1, 0, 0, 0, 0, 0, 0, 5, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 1, 0, - 0, 0, 1, 4, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 4, 1, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 4, 7, 5, 5, 5, - 7, 4, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, - 1, 1, 0, 0, 0, 0, 1, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, - 0, 0, 4, 7, 5, 5, 5, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 5, 1, - 1, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, - 4, 1, 0, 0, 0, 1, 4, 7, 7, 4, 0, 0, 0, 4, 4, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 7, 0, - 1, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 4, 4, 4, 1, 1, 1, 1, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 4, 1, 0, 0, 0, 4, 1, 0, 0, 0, 1, 1, 0, 0, 0, - 1, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 4, 7, 7, 7, 7, 4, 0, 0, - 0, 4, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, - 1, 0, 0, 0, 4, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 4, 4, 0, 0, - 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, - 4, 0, 0, 0, 0, 0, 4, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 7, 1, 1, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 0, 4, 4, - 1, 1, 1, 1, 4, 4, 0, 0, 0, 4, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 7, 0, 1, 1, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 4, 4, 4, 1, 1, 1, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 4, 1, 0, 0, 0, 4, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, - 0, 1, 4, 4, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 4, 4, 0, 0, 0, 0, 0, 4, 7, 7, 7, 7, 4, 0, 0, 0, 4, 4, 0, - 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 1, 0, 0, 0, - 4, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 4, 4, 0, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, - 0, 0, 4, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, - 7, 4, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 7, 1, 1, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 0, 4, 4, 1, 1, 1, 1, - 4, 4, 0, 0, 4, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 7, - 4, 0, 0, 0, 7, 0, 1, 1, 0, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 4, 4, 4, 1, 1, 1, - 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 1, 0, 0, 4, 1, 0, 0, 1, 1, - 0, 0, 1, 0, 0, 0, 1, 4, 4, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 4, 7, 7, - 7, 4, 0, 0, 4, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 1, - 0, 0, 4, 1, 0, 0, 1, 1, 0, 0, 1, 0, 4, 4, 0, 0, 0, 1, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 4, 4, - 4, 0, 0, 0, 0, 4, 7, 7, 7, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 7, - 4, 0, 0, 0, 7, 0, 0, 0, 0, 7, 1, 1, 0, 0, 0, 0, 7, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 4, 4, 1, 1, 1, - 4, 4, 0, 0, 4, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 7, - 4, 0, 0, 0, 7, 0, 1, 1, 0, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 4, 4, 4, 1, 1, 1, - 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 1, 0, 0, 4, 1, 0, 0, 1, 1, - 0, 0, 1, 0, 0, 0, 1, 4, 4, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 4, 7, 7, - 7, 4, 0, 0, 4, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 1, - 0, 0, 4, 1, 0, 0, 1, 1, 0, 0, 1, 0, 4, 4, 0, 0, 0, 1, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 4, 4, - 4, 0, 0, 0, 0, 4, 7, 7, 7, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 7, - 4, 0, 0, 0, 7, 0, 0, 0, 0, 7, 1, 1, 0, 0, 0, 0, 7, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 4, 4, 1, 1, 1, - 4 + 5769634, 5769635, 5769636, 5769637 - - 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 3, 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 2, 0, 1, 0, 2, 1, 4, 4, 4, 4, 4, 4, 4, 0, 2, - 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 1, 2, 2, 2, 2, - 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 0, 2, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 2, 2, 2, 2, 2, 2, - 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, - 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 3, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 4, 4, 4, 0, 4, 4, 4, - 4, 4, 4, 4, 2, 2, 2, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, - 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 0, 4, 4, - 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 0, 2, 2, 2, 2, 2, 2, - 2, 4, 4, 4, 4, 4, 4, 4, 5, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 5, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, - 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, - 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, - 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 4, 4, - 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 0, - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 1, 0, 2, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 4, 0, 1, 2, 2, 2, 2, 2, 2, 2, - 3, 2, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 4, 4, 4, 4, 4, 4, 4, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, - 2, 4, 4, 4, 4, 4, 4, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, - 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, - 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 4, 4, 4, 5, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 3, 2, 4, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 4, 0, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 5, 2, 2, 4, 2, 2, 4, 4, - 4, 4, 3, 0, 0, 0, 0, 0, 0, 0, 5, 0, 2, 2, 2, 2, 2, 2, 2, 3, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 2, 0, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 1, 0, - 0, 2, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 3, 4, 4, 4, 4, 4, 4, 4, 0, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, - 4, 4, 4, 4, 4, 4, 4, 0, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, - 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, - 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 4, 4, 4, 4, 5, 4, 4, 4, 4, - 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 2, - 2, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 5, 4, 4, 4, 4, - 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 0, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 5, 0, 0, 0, - 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 4, 4, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 4, 4, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 1, 1, 2, - 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, - 4, 4, 4, 4, 4, 4, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 4, - 4, 4, 4, 4, 4, 4, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 4, - 4, 4, 4, 4, 4, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 4, 4, - 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 0, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 4, 4, 4, 5, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 4, 2, 4, 4, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 0, 4, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 5, 2, 2, 2, 4, 2, 2, - 2, 4, 4, 4, 4, 4, 3, 0, 0, 0, 0, 0, 0, 0, 5, 0, 2, 2, 2, 2, - 2, 2, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, - 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, - 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, - 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 0, 1, 2, 2, 2, - 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, - 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, 2, - 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 4, - 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, 4, 5, - 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 3, 4, 5, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 5, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 5, 5, 5, 4, - 4, 3, 4, 4, 4, 4, 4, 4, 4, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 4, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 3, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 4, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, - 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 1, 0, 0, 2, 1, - 1, 1, 2, 4, 4, 4, 4, 4, 4, 4, 4, 0, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 2, 4, 2, 2, 2, 2, 2, 2, - 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, - 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 2, - 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, 2, 2, - 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 4, - 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, 4, - 0, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 0, 4, 5, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 3, 0, - 5, 4, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 2, 2, 2, 2, 2, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 1, 3, 0, 0, - 2, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 0, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 2, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, - 4, 4, 2, 2, 2, 2, 2, 2, 5, 3, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, - 4, 4, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, - 4, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, - 2, 2, 2, 2, 3, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, - 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 5, 4, 4, 4, 4, 5, - 4, 4, 4, 4, 3, 4, 5, 5, 3, 5, 5, 4, 4, 3, 4, 4, 4, 4, 4, 4, - 4, 4, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 3, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 2, 0, 0, 0, 3, 0, 0, 1, 1, 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 5, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 0, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, - 2, 2, 2, 2, 5, 3, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 2, - 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 2, - 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, - 2, 2, 2, 3, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, - 0, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 3, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 4, 4, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, - 2, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, 0, 0, 2, 1, 1, 1, - 1, 3, 4, 4, 4, 4, 4, 4, 0, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, - 4, 0, 2, 2, 2, 2, 2, 2, 3, 2, 4, 4, 4, 4, 4, 4, 0, 1, 2, 2, - 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 2, 2, 2, 2, 2, - 2, 2, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 3, - 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 3, 4, 4, 4, - 4, 5, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, 0, 4, 4, 4, 4, - 4, 4, 4, 2, 2, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 5, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, - 2, 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 5, 4, 0, 0, 0, - 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 3, 2, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 3, - 4, 4, 4, 4, 4, 4, 1, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, - 4, 5, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 5, 4, - 4, 4, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, - 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, 2, - 2, 3, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 2, 2, 2, 3, 4, 4, 4, - 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, 3, 4, 5, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 5, 5, 4, 4, 4, 4, 5, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, - 2, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, 0, 0, 2, 1, 1, 1, - 1, 3, 4, 4, 4, 4, 4, 4, 0, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, - 4, 0, 2, 2, 2, 2, 2, 2, 3, 2, 4, 4, 4, 4, 4, 4, 0, 1, 2, 2, - 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 2, 2, 2, 2, 2, - 2, 2, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 3, - 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 3, 4, 4, 4, - 4, 5, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, 0, 4, 4, 4, 4, - 4, 4, 4, 2, 2, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 5, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, - 2, 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 5, 4, 0, 0, 0, - 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 3, 2, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 3, - 4, 4, 4, 4, 4, 4, 1, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, - 4, 5, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 5, 4, - 4, 4, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, - 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, 2, - 2, 3, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 2, 2, 2, 3, 4, 4, 4, - 5, 4, 4, 4, 4, 4, 4, 4, 2, 2, 3, 4, 5, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 5, 5, 4, 4, 4, 4, 5, 4, 4, 4, 4, 3, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 4, 0, 0, 0, 0, - 0, 0, 5, 2, 2, 2, 2, 2, 2, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, - 0, 0, 2, 1, 1, 1, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 3, 4, 4, 4, - 4, 0, 1, 2, 2, 2, 2, 3, 3, 4, 4, 4, 4, 0, 1, 2, 2, 2, 2, 4, - 4, 4, 4, 4, 4, 4, 2, 1, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 5, - 4, 4, 4, 4, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, - 2, 2, 2, 2, 3, 4, 4, 0, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 5, 4, - 4, 4, 4, 4, 4, 4, 2, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 3, 4, 4, 4, 4, 0, 0, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 2, 2, - 2, 2, 2, 4, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 3, 4, 0, 0, 0, 0, - 1, 0, 2, 2, 2, 2, 3, 2, 5, 4, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, - 4, 4, 4, 4, 5, 1, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 5, 2, - 2, 4, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, - 2, 2, 3, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, 2, 3, 4, 4, 4, - 5, 4, 4, 4, 4, 4, 4, 2, 2, 3, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, - 5, 5, 4, 4, 4, 5, 4, 4, 4, 3, 0, 0, 0, 0, 0, 2, 2, 2, 3, 0, - 0, 0, 0, 2, 2, 2, 2, 4, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 0, - 5, 5, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, - 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 1, 4, 4, 4, 4, 2, 2, 2, - 2, 3, 4, 4, 4, 0, 1, 2, 2, 2, 3, 3, 4, 4, 4, 0, 1, 2, 2, 2, - 4, 4, 4, 4, 4, 0, 2, 1, 2, 2, 2, 2, 4, 4, 4, 4, 0, 4, 4, 4, - 4, 2, 2, 2, 4, 4, 4, 0, 4, 4, 4, 4, 4, 2, 2, 4, 4, 5, 4, 4, - 4, 4, 4, 4, 2, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, - 4, 0, 0, 2, 2, 2, 3, 0, 0, 0, 0, 2, 2, 2, 2, 4, 0, 0, 0, 0, - 0, 2, 2, 2, 3, 4, 0, 0, 0, 1, 0, 2, 2, 2, 3, 2, 5, 4, 0, 0, - 0, 0, 1, 2, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 2, - 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4, 4, 4, 4, 2, 2, 2, 2, 2, - 4, 4, 4, 4, 5, 1, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 2, 2, 4, - 2, 2, 2, 2, 3, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 3, 4, 4, - 4, 5, 4, 4, 4, 4, 4, 2, 2, 3, 4, 5, 4, 4, 4, 4, 4, 4, 4, 5, - 5, 5, 5, 5, 4, 3, 0, 0, 0, 0, 0, 2, 2, 2, 3, 0, 0, 0, 0, 2, - 2, 2, 2, 4, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 2, 0, 5, 5, 0, 0, - 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 1, 2, 2, 2, 2, 2, 2, 1, 4, 4, 4, 4, 2, 2, 2, 2, 3, 4, 4, - 4, 0, 1, 2, 2, 2, 3, 3, 4, 4, 4, 0, 1, 2, 2, 2, 4, 4, 4, 4, - 4, 0, 2, 1, 2, 2, 2, 2, 4, 4, 4, 4, 0, 4, 4, 4, 4, 2, 2, 2, - 4, 4, 4, 0, 4, 4, 4, 4, 4, 2, 2, 4, 4, 5, 4, 4, 4, 4, 4, 4, - 2, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 0, 0, 2, - 2, 2, 3, 0, 0, 0, 0, 2, 2, 2, 2, 4, 0, 0, 0, 0, 0, 2, 2, 2, - 3, 4, 0, 0, 0, 1, 0, 2, 2, 2, 3, 2, 5, 4, 0, 0, 0, 0, 1, 2, - 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 2, 0, 0, 0, 0, - 0, 0, 0, 1, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 4, 4, 4, 4, 2, 2, 2, 2, 2, 4, 4, 4, 4, - 5, 1, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 2, 2, 4, 2, 2, 2, 2, - 3, 4, 4, 4, 4, 5, 4, 4, 4, 4, 2, 2, 2, 3, 4, 4, 4, 5, 4, 4, - 4, 4, 4, 2, 2, 3, 4, 5, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, - 4, 3, 0, 0, 0, 0, 2, 2, 3, 0, 0, 0, 2, 2, 2, 4, 0, 0, 0, 0, - 5, 2, 2, 2, 2, 0, 5, 5, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, - 1, 4, 4, 4, 2, 2, 2, 3, 4, 4, 0, 1, 2, 2, 3, 3, 4, 4, 0, 1, - 2, 2, 4, 4, 4, 4, 0, 2, 1, 2, 2, 2, 4, 4, 4, 0, 4, 4, 4, 4, - 2, 2, 4, 4, 5, 4, 4, 4, 4, 4, 2, 4, 5, 4, 4, 4, 4, 4, 4, 4, - 4, 3, 4, 4, 0, 0, 2, 2, 3, 0, 0, 0, 2, 2, 2, 4, 0, 0, 0, 0, - 2, 2, 3, 4, 0, 0, 1, 0, 2, 2, 3, 2, 5, 4, 0, 0, 0, 1, 2, 2, - 3, 2, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 1, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 5, - 1, 2, 2, 2, 3, 4, 4, 4, 4, 5, 2, 2, 4, 2, 2, 2, 3, 4, 4, 4, - 5, 4, 4, 4, 4, 2, 2, 3, 4, 5, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, - 4, 3, 0, 0, 0, 0, 2, 2, 3, 0, 0, 0, 2, 2, 2, 4, 0, 0, 0, 0, - 5, 2, 2, 2, 2, 0, 5, 5, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, - 1, 4, 4, 4, 2, 2, 2, 3, 4, 4, 0, 1, 2, 2, 3, 3, 4, 4, 0, 1, - 2, 2, 4, 4, 4, 4, 0, 2, 1, 2, 2, 2, 4, 4, 4, 0, 4, 4, 4, 4, - 2, 2, 4, 4, 5, 4, 4, 4, 4, 4, 2, 4, 5, 4, 4, 4, 4, 4, 4, 4, - 4, 3, 4, 4, 0, 0, 2, 2, 3, 0, 0, 0, 2, 2, 2, 4, 0, 0, 0, 0, - 2, 2, 3, 4, 0, 0, 1, 0, 2, 2, 3, 2, 5, 4, 0, 0, 0, 1, 2, 2, - 3, 2, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 1, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 5, - 1, 2, 2, 2, 3, 4, 4, 4, 4, 5, 2, 2, 4, 2, 2, 2, 3, 4, 4, 4, - 5, 4, 4, 4, 4, 2, 2, 3, 4, 5, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, - 4 + + 340, 0, 0, 1, 1, 1, 2, 2, 40, 200, 200, 201, + 201, 201, 202, 202, 440, 0, 0, 1, 1, 1, 2, 2, + 42, 540, 200, 200, 201, 201, 201, 202, 202, 342, 0, 510, + 0, 0, 0, 1, 1, 1, 2, 2, 2, 200, 200, 201, + 201, 201, 202, 202, 202, 0, 0, 0, 0, 0, 1, 1, + 1, 2, 2, 2, 72, 200, 201, 201, 201, 202, 202, 202, + 272, 1, 0, 0, 0, 1, 1, 1, 1, 2, 2, 212, + 72, 201, 201, 201, 202, 202, 212, 272, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 12, 201, 201, 202, 202, 412, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, + 201, 202, 202, 202, 272, 2, 2, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 72, 202, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 142, 202, 242, 272, 2, + 2, 2, 2, 2, 2, 2, 2, 72, 242, 212, 2, 172, + 2, 212, 142, 400, 400, 401, 401, 401, 402, 402, 72, 200, + 200, 201, 201, 201, 202, 202, 272, 310, 400, 400, 401, 401, + 402, 402, 402, 110, 200, 200, 201, 201, 202, 202, 202, 400, + 400, 400, 401, 401, 401, 402, 402, 42, 240, 140, 200, 200, + 200, 201, 201, 201, 202, 202, 342, 400, 400, 401, 401, 401, + 402, 402, 12, 400, 400, 400, 200, 200, 201, 201, 201, 202, + 202, 412, 401, 401, 401, 401, 402, 402, 402, 400, 400, 400, + 400, 201, 201, 201, 201, 202, 202, 202, 401, 401, 401, 402, + 402, 572, 401, 401, 401, 401, 401, 201, 201, 201, 202, 202, + 372, 401, 402, 402, 402, 402, 401, 401, 401, 401, 401, 401, + 201, 202, 202, 202, 202, 402, 402, 402, 12, 401, 401, 401, + 401, 401, 401, 401, 202, 202, 202, 412, 402, 402, 542, 402, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 442, 472, 402, + 402, 402, 402, 402, 402, 402, 402, 402, 472, 542, 402, 402, + 412, 12, 402, 402, 442, 472, 472, 472, 472, 340, 400, 400, + 401, 401, 402, 402, 402, 40, 200, 200, 201, 201, 202, 202, + 202, 400, 400, 401, 401, 401, 402, 402, 542, 0, 0, 1, + 1, 1, 2, 2, 442, 410, 400, 401, 401, 401, 402, 402, + 402, 72, 10, 0, 1, 1, 1, 2, 2, 2, 272, 0, + 540, 440, 400, 400, 400, 401, 401, 401, 402, 402, 42, 0, + 0, 1, 1, 1, 2, 2, 342, 0, 0, 0, 0, 400, + 401, 401, 401, 401, 402, 402, 402, 1, 1, 1, 1, 2, + 2, 2, 1, 0, 0, 0, 0, 401, 401, 401, 401, 402, + 402, 402, 72, 1, 1, 1, 2, 2, 2, 272, 1, 1, + 1, 1, 1, 1, 401, 401, 401, 402, 402, 52, 1, 1, + 2, 2, 252, 1, 1, 1, 1, 1, 1, 1, 401, 402, + 402, 402, 402, 2, 2, 2, 2, 2, 2, 1, 1, 1, + 1, 1, 2, 402, 402, 402, 402, 72, 2, 2, 2, 272, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 402, 402, 142, + 2, 242, 142, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 242, 72, 272, 242, 2, 2, 2, 2, 2, 2, 142, 172, + 152, 152, 172, 240, 400, 400, 401, 401, 401, 402, 402, 42, + 140, 200, 200, 201, 201, 201, 202, 202, 342, 200, 400, 400, + 401, 401, 401, 402, 402, 402, 210, 200, 200, 200, 201, 201, + 201, 202, 202, 202, 200, 400, 401, 401, 401, 402, 402, 402, + 572, 200, 200, 200, 200, 201, 201, 201, 202, 202, 202, 372, + 201, 401, 401, 401, 402, 402, 402, 552, 201, 200, 201, 201, + 201, 201, 201, 202, 202, 202, 352, 201, 401, 401, 402, 402, + 402, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, 201, + 402, 402, 402, 402, 552, 201, 201, 201, 201, 201, 201, 202, + 202, 202, 202, 352, 202, 402, 402, 402, 572, 202, 201, 201, + 201, 201, 202, 202, 202, 202, 202, 372, 202, 402, 542, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 442, 42, 202, 202, + 202, 202, 202, 202, 202, 202, 342, 472, 542, 202, 202, 452, + 202, 202, 442, 472, 472, 472, 340, 0, 1, 1, 1, 2, + 2, 2, 572, 40, 200, 201, 201, 201, 202, 202, 202, 372, + 440, 0, 0, 1, 1, 1, 2, 2, 2, 540, 200, 200, + 201, 201, 201, 202, 202, 202, 0, 510, 0, 0, 0, 1, + 1, 1, 2, 2, 2, 72, 200, 200, 201, 201, 201, 202, + 202, 202, 272, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 2, 2, 52, 201, 201, 201, 201, 202, 202, 202, 252, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 52, 201, + 201, 201, 202, 202, 202, 252, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 201, 201, 202, 202, 202, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 52, 202, 202, + 202, 202, 252, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 52, 202, 202, 202, 252, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 342, 2, + 2, 2, 2, 2, 2, 2, 2, 42, 172, 172, 242, 212, + 2, 2, 152, 2, 2, 212, 142, 172, 172, 400, 400, 401, + 401, 401, 402, 402, 142, 200, 200, 201, 201, 201, 202, 202, + 242, 310, 400, 401, 401, 401, 402, 402, 402, 42, 110, 200, + 201, 201, 201, 202, 202, 202, 342, 400, 400, 401, 401, 401, + 402, 402, 402, 12, 240, 140, 200, 200, 201, 201, 201, 202, + 202, 202, 412, 400, 401, 401, 401, 402, 402, 402, 402, 400, + 400, 400, 200, 201, 201, 201, 202, 202, 202, 202, 401, 401, + 401, 402, 402, 402, 402, 572, 401, 400, 400, 401, 201, 201, + 201, 202, 202, 202, 202, 372, 401, 401, 402, 402, 402, 552, + 401, 401, 401, 401, 401, 201, 201, 202, 202, 202, 352, 401, + 402, 402, 402, 402, 401, 401, 401, 401, 401, 401, 201, 202, + 202, 202, 202, 402, 402, 402, 402, 572, 402, 401, 401, 401, + 401, 401, 402, 202, 202, 202, 202, 372, 402, 402, 12, 402, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 412, 442, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 402, 542, 442, 572, + 402, 402, 402, 402, 402, 402, 402, 402, 372, 472, 452, 452, + 452, 452, 472, 340, 400, 401, 401, 401, 402, 402, 402, 72, + 40, 200, 201, 201, 201, 202, 202, 202, 272, 400, 400, 401, + 401, 402, 402, 402, 542, 0, 0, 1, 1, 2, 2, 2, + 442, 410, 400, 401, 401, 401, 402, 402, 402, 42, 10, 0, + 1, 1, 1, 2, 2, 2, 342, 0, 540, 440, 400, 400, + 401, 401, 401, 402, 402, 402, 402, 0, 1, 1, 1, 2, + 2, 2, 2, 0, 0, 0, 0, 400, 401, 401, 401, 402, + 402, 402, 402, 72, 1, 1, 1, 2, 2, 2, 2, 272, + 1, 1, 0, 0, 1, 401, 401, 401, 402, 402, 402, 402, + 72, 1, 1, 2, 2, 2, 2, 272, 1, 1, 1, 1, + 1, 1, 401, 401, 402, 402, 402, 52, 1, 2, 2, 2, + 252, 2, 1, 1, 1, 1, 1, 1, 402, 402, 402, 402, + 402, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, + 2, 402, 402, 402, 402, 72, 2, 2, 2, 272, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 402, 402, 402, 72, 2, + 2, 272, 142, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 242, 142, 242, 272, 2, 2, 2, 2, 2, 2, 2, 2, + 72, 172, 242, 212, 212, 142, 172, 240, 400, 400, 401, 401, + 402, 402, 402, 402, 140, 200, 200, 201, 201, 202, 202, 202, + 202, 200, 400, 400, 401, 401, 401, 402, 402, 402, 572, 210, + 200, 200, 200, 201, 201, 201, 202, 202, 202, 372, 200, 401, + 401, 401, 401, 402, 402, 402, 42, 200, 200, 200, 201, 201, + 201, 201, 202, 202, 202, 342, 201, 401, 401, 401, 402, 402, + 402, 12, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, + 412, 201, 401, 402, 402, 402, 402, 201, 201, 201, 201, 201, + 201, 202, 202, 202, 202, 202, 402, 402, 402, 402, 12, 201, + 201, 201, 201, 201, 202, 202, 202, 202, 202, 412, 202, 402, + 402, 402, 542, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 442, 202, 402, 402, 572, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 372, 42, 472, 202, 202, 202, 202, 202, + 202, 202, 202, 342, 472, 542, 202, 202, 202, 452, 202, 202, + 202, 442, 472, 472, 472, 472, 340, 0, 1, 1, 1, 2, + 2, 2, 572, 40, 200, 201, 201, 201, 202, 202, 202, 372, + 440, 0, 1, 1, 1, 2, 2, 2, 2, 540, 200, 201, + 201, 201, 202, 202, 202, 202, 0, 510, 0, 0, 1, 1, + 1, 2, 2, 2, 2, 72, 200, 201, 201, 201, 202, 202, + 202, 202, 272, 0, 0, 0, 0, 1, 1, 1, 2, 2, + 2, 2, 42, 201, 201, 201, 202, 202, 202, 202, 342, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 112, 201, + 201, 202, 202, 202, 202, 312, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 201, 202, 202, 202, 202, 2, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 112, 202, 202, + 202, 202, 312, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 142, 202, 202, 202, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 342, 2, + 2, 2, 2, 2, 2, 2, 2, 42, 172, 172, 242, 2, + 2, 2, 152, 2, 2, 2, 142, 172, 152, 152, 172, 400, + 400, 401, 401, 402, 402, 402, 142, 200, 200, 201, 201, 202, + 202, 202, 242, 310, 400, 401, 401, 401, 402, 402, 402, 42, + 110, 200, 201, 201, 201, 202, 202, 202, 342, 400, 400, 401, + 401, 401, 402, 402, 402, 402, 240, 140, 200, 200, 201, 201, + 201, 202, 202, 202, 202, 400, 401, 401, 401, 402, 402, 402, + 402, 572, 400, 400, 400, 200, 201, 201, 201, 202, 202, 202, + 202, 372, 401, 401, 401, 402, 402, 402, 402, 552, 401, 401, + 401, 401, 201, 201, 201, 202, 202, 202, 202, 352, 401, 401, + 402, 402, 402, 552, 401, 401, 401, 401, 401, 201, 201, 202, + 202, 202, 352, 402, 402, 402, 402, 402, 401, 401, 401, 401, + 401, 401, 202, 202, 202, 202, 202, 402, 402, 402, 402, 552, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 402, 402, + 202, 202, 202, 372, 442, 542, 402, 402, 402, 402, 402, 402, + 402, 402, 402, 542, 442, 572, 402, 402, 402, 402, 402, 402, + 402, 402, 372, 472, 542, 512, 512, 442, 472, 340, 400, 401, + 401, 402, 402, 402, 402, 142, 40, 200, 201, 201, 202, 202, + 202, 202, 242, 0, 1, 1, 1, 2, 2, 2, 12, 200, + 201, 201, 201, 202, 202, 202, 412, 410, 0, 1, 1, 2, + 2, 2, 2, 2, 10, 200, 201, 201, 202, 202, 202, 202, + 202, 200, 540, 440, 0, 0, 1, 1, 1, 2, 2, 2, + 2, 72, 200, 201, 201, 201, 202, 202, 202, 202, 272, 201, + 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 52, + 201, 201, 201, 202, 202, 202, 202, 252, 201, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 112, 201, 201, 202, + 202, 202, 202, 312, 201, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 242, 202, 202, 202, 202, 202, 142, 202, + 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 542, + 202, 202, 202, 202, 442, 202, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 112, 202, 202, 202, 312, 202, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 52, 202, + 202, 252, 212, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 212, 2, 72, 202, 272, 342, 2, 2, 2, 2, 2, 2, + 2, 2, 42, 242, 212, 2, 2, 152, 2, 2, 212, 142, + 172, 172, 240, 400, 401, 401, 401, 402, 402, 402, 402, 42, + 140, 200, 201, 201, 201, 202, 202, 202, 202, 342, 400, 400, + 401, 401, 401, 402, 402, 402, 402, 12, 210, 400, 200, 201, + 201, 201, 202, 202, 202, 202, 412, 401, 401, 401, 401, 402, + 402, 402, 402, 402, 400, 400, 401, 201, 201, 201, 202, 202, + 202, 202, 202, 401, 401, 401, 402, 402, 402, 402, 402, 572, + 401, 401, 401, 401, 201, 201, 202, 202, 202, 202, 202, 372, + 401, 402, 402, 402, 402, 402, 552, 401, 401, 401, 401, 401, + 202, 202, 202, 202, 202, 352, 402, 402, 402, 402, 402, 402, + 402, 401, 401, 401, 402, 402, 202, 202, 202, 202, 202, 402, + 402, 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 402, + 202, 202, 202, 202, 372, 402, 402, 402, 12, 402, 402, 402, + 402, 402, 402, 402, 402, 202, 202, 412, 12, 442, 542, 402, + 402, 402, 402, 402, 402, 402, 402, 412, 542, 442, 402, 402, + 402, 402, 402, 402, 402, 402, 402, 472, 452, 512, 342, 42, + 512, 452, 472, 340, 0, 1, 1, 2, 2, 2, 2, 2, + 572, 40, 200, 201, 201, 202, 202, 202, 202, 202, 372, 440, + 0, 1, 1, 1, 2, 2, 2, 2, 2, 540, 200, 201, + 201, 201, 202, 202, 202, 202, 202, 0, 510, 0, 0, 1, + 1, 1, 2, 2, 2, 2, 2, 72, 200, 201, 201, 201, + 202, 202, 202, 202, 202, 272, 1, 0, 0, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 42, 201, 201, 201, 202, 202, + 202, 202, 202, 342, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 112, 201, 201, 202, 202, 202, 202, 202, + 312, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 112, 172, 202, 202, 202, 202, 202, 312, 172, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 572, 202, 202, + 202, 202, 202, 372, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 112, 202, 202, 202, 202, 312, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 142, 202, + 202, 202, 242, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 72, 202, 202, 272, 342, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 42, 172, 172, 242, 212, 2, 2, + 112, 312, 2, 2, 212, 142, 172, 152, 152, 172, 400, 401, + 401, 401, 402, 402, 402, 402, 142, 200, 201, 201, 201, 202, + 202, 202, 202, 242, 310, 400, 401, 401, 402, 402, 402, 402, + 402, 42, 110, 200, 201, 201, 202, 202, 202, 202, 202, 342, + 400, 400, 401, 401, 402, 402, 402, 402, 402, 12, 240, 140, + 200, 200, 201, 201, 202, 202, 202, 202, 202, 412, 401, 401, + 401, 401, 402, 402, 402, 402, 402, 400, 400, 400, 201, 201, + 201, 201, 202, 202, 202, 202, 202, 401, 401, 402, 402, 402, + 402, 402, 402, 572, 401, 401, 401, 401, 201, 201, 202, 202, + 202, 202, 202, 202, 372, 401, 402, 402, 402, 402, 402, 512, + 552, 401, 401, 401, 401, 401, 201, 202, 202, 202, 202, 202, + 512, 352, 402, 402, 402, 402, 402, 112, 402, 401, 401, 401, + 401, 402, 202, 202, 202, 202, 202, 312, 402, 402, 402, 402, + 402, 552, 402, 402, 402, 402, 402, 402, 402, 202, 202, 202, + 202, 202, 352, 402, 402, 402, 402, 572, 402, 402, 402, 402, + 402, 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 12, + 402, 402, 402, 402, 402, 402, 402, 402, 402, 202, 202, 412, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, + 542, 442, 572, 402, 402, 402, 402, 512, 402, 402, 402, 402, + 372, 472, 542, 512, 372, 572, 512, 442, 472, 340, 400, 401, + 401, 402, 402, 402, 402, 402, 142, 40, 200, 201, 201, 202, + 202, 202, 202, 202, 242, 0, 1, 1, 1, 2, 2, 2, + 2, 12, 200, 201, 201, 201, 202, 202, 202, 202, 412, 410, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 10, 201, 201, + 201, 202, 202, 202, 202, 202, 202, 200, 540, 440, 0, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 72, 201, 201, 201, + 202, 202, 202, 202, 202, 202, 272, 201, 0, 0, 0, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 42, 201, 201, 202, + 202, 202, 202, 202, 202, 342, 201, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 112, 201, 202, 202, 202, + 202, 202, 202, 312, 201, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 2, 202, 202, 202, 202, 202, 202, + 202, 202, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 202, 202, 202, 202, 202, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 202, 202, 202, + 202, 202, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 112, 202, 202, 202, 312, 202, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 142, 202, 202, + 242, 212, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 212, 2, 72, 202, 272, 342, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 42, 172, 242, 2, 2, 42, 342, 2, 2, + 142, 172, 172, 172, 172, 172, 240, 400, 401, 401, 402, 402, + 402, 402, 402, 402, 572, 140, 200, 201, 201, 202, 202, 202, + 202, 202, 202, 372, 400, 400, 401, 401, 401, 402, 402, 402, + 402, 402, 42, 210, 400, 200, 201, 201, 201, 202, 202, 202, + 202, 202, 342, 401, 401, 401, 401, 402, 402, 402, 402, 402, + 402, 401, 401, 401, 201, 201, 201, 202, 202, 202, 202, 202, + 202, 401, 401, 402, 402, 402, 402, 402, 402, 402, 572, 401, + 401, 401, 401, 201, 202, 202, 202, 202, 202, 202, 202, 372, + 401, 402, 402, 402, 402, 402, 402, 442, 572, 401, 401, 401, + 401, 401, 202, 202, 202, 202, 202, 202, 542, 372, 402, 402, + 402, 402, 402, 402, 142, 402, 402, 402, 402, 402, 402, 202, + 202, 202, 202, 202, 242, 402, 402, 402, 402, 402, 402, 572, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 202, 202, 202, + 372, 402, 402, 402, 402, 402, 572, 402, 402, 402, 402, 402, + 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 402, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 402, 202, 202, 442, + 12, 442, 572, 402, 402, 402, 402, 402, 402, 402, 402, 402, + 412, 542, 372, 402, 402, 402, 402, 402, 402, 402, 402, 402, + 402, 472, 542, 512, 402, 402, 512, 442, 472, 1, 1, 1, + 2, 2, 2, 42, 201, 201, 201, 202, 202, 202, 342, 411, + 1, 1, 2, 2, 2, 2, 11, 201, 201, 202, 202, 202, + 202, 540, 440, 1, 1, 1, 2, 2, 2, 2, 72, 201, + 201, 201, 202, 202, 202, 202, 272, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 52, 201, 201, 202, 202, 202, 202, + 252, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 52, + 201, 202, 202, 202, 202, 252, 2, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 52, 202, 202, 202, 202, 252, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 52, 202, 202, 202, + 252, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 72, + 202, 202, 272, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 142, 242, 242, 212, 2, 2, 2, 2, 212, 142, 172, 172, + 172, 340, 401, 401, 402, 402, 402, 402, 40, 201, 201, 202, + 202, 202, 202, 401, 401, 401, 402, 402, 402, 42, 201, 201, + 201, 202, 202, 202, 342, 240, 401, 401, 401, 402, 402, 402, + 12, 140, 201, 201, 201, 202, 202, 202, 412, 401, 401, 401, + 402, 402, 402, 402, 401, 211, 401, 201, 201, 201, 202, 202, + 202, 202, 401, 401, 402, 402, 402, 402, 572, 401, 401, 401, + 401, 201, 201, 202, 202, 202, 202, 372, 402, 402, 402, 402, + 402, 572, 401, 401, 401, 401, 401, 202, 202, 202, 202, 202, + 372, 402, 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, + 202, 202, 202, 202, 372, 402, 402, 12, 402, 402, 402, 402, + 402, 402, 402, 202, 202, 412, 402, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 202, 442, 542, 402, 402, 402, 402, 402, + 402, 402, 442, 472, 452, 452, 452, 452, 472, 401, 401, 401, + 402, 402, 402, 42, 201, 201, 201, 202, 202, 202, 342, 341, + 1, 1, 2, 2, 2, 2, 41, 201, 201, 202, 202, 202, + 202, 1, 1, 1, 2, 2, 2, 42, 201, 201, 201, 202, + 202, 202, 342, 541, 441, 1, 1, 1, 2, 2, 2, 112, + 201, 201, 201, 202, 202, 202, 312, 201, 1, 511, 1, 1, + 1, 1, 2, 2, 2, 2, 201, 201, 202, 202, 202, 202, + 201, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 72, + 201, 202, 202, 202, 202, 272, 202, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 72, 202, 202, 202, 202, 272, 202, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 112, 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 142, 242, 242, 2, 2, 2, 2, 2, 2, 2, + 142, 172, 152, 152, 152, 152, 172, 311, 401, 401, 402, 402, + 402, 402, 111, 201, 201, 202, 202, 202, 202, 241, 401, 401, + 401, 402, 402, 402, 402, 572, 141, 201, 201, 201, 202, 202, + 202, 202, 372, 401, 401, 401, 402, 402, 402, 402, 552, 401, + 401, 401, 201, 201, 202, 202, 202, 202, 352, 401, 401, 402, + 402, 402, 402, 552, 401, 401, 401, 401, 201, 202, 202, 202, + 202, 352, 402, 402, 402, 402, 402, 552, 401, 401, 401, 401, + 402, 202, 202, 202, 202, 352, 402, 402, 402, 402, 552, 402, + 402, 402, 402, 402, 402, 202, 202, 202, 352, 402, 402, 402, + 572, 402, 402, 402, 402, 402, 402, 402, 202, 202, 372, 402, + 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, 512, + 402, 402, 402, 402, 512, 442, 472, 472, 472, 1, 1, 2, + 2, 2, 2, 42, 201, 201, 202, 202, 202, 202, 342, 411, + 1, 1, 2, 2, 2, 2, 11, 201, 201, 202, 202, 202, + 202, 541, 441, 1, 1, 1, 2, 2, 2, 2, 72, 201, + 201, 201, 202, 202, 202, 202, 272, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 52, 201, 201, 202, 202, 202, 202, + 252, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 52, + 202, 202, 202, 202, 202, 252, 2, 2, 1, 1, 2, 2, + 2, 2, 2, 2, 52, 202, 202, 202, 202, 252, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 52, 202, 202, 202, + 252, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 72, + 202, 202, 272, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 142, 242, 242, 212, 2, 2, 2, 2, 212, 142, 172, 172, + 172, 341, 401, 401, 402, 402, 402, 402, 41, 201, 201, 202, + 202, 202, 202, 401, 401, 402, 402, 402, 402, 42, 201, 201, + 202, 202, 202, 202, 342, 241, 401, 401, 401, 402, 402, 402, + 12, 141, 201, 201, 201, 202, 202, 202, 412, 401, 401, 401, + 402, 402, 402, 402, 401, 211, 401, 201, 201, 201, 202, 202, + 202, 202, 401, 402, 402, 402, 402, 402, 572, 401, 401, 401, + 401, 201, 202, 202, 202, 202, 202, 372, 402, 402, 402, 402, + 402, 572, 402, 401, 401, 401, 402, 202, 202, 202, 202, 202, + 372, 402, 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, + 202, 202, 202, 202, 372, 402, 402, 12, 402, 402, 402, 402, + 402, 402, 402, 202, 202, 412, 402, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 202, 442, 542, 402, 402, 402, 402, 402, + 402, 402, 442, 472, 452, 452, 452, 452, 472, 401, 401, 402, + 402, 402, 402, 42, 201, 201, 202, 202, 202, 202, 342, 341, + 1, 1, 2, 2, 2, 2, 41, 201, 201, 202, 202, 202, + 202, 1, 1, 2, 2, 2, 2, 42, 201, 201, 202, 202, + 202, 202, 342, 541, 441, 1, 1, 2, 2, 2, 2, 112, + 201, 201, 202, 202, 202, 202, 312, 201, 1, 511, 1, 1, + 1, 2, 2, 2, 2, 2, 201, 202, 202, 202, 202, 202, + 201, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 72, + 202, 202, 202, 202, 202, 272, 202, 2, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 72, 202, 202, 202, 202, 272, 202, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 112, 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 142, 242, 242, 2, 2, 2, 2, 2, 2, 2, + 142, 172, 152, 152, 152, 152, 172, 311, 401, 401, 402, 402, + 402, 402, 111, 201, 201, 202, 202, 202, 202, 241, 401, 401, + 401, 402, 402, 402, 402, 572, 141, 201, 201, 201, 202, 202, + 202, 202, 372, 401, 401, 401, 402, 402, 402, 402, 552, 401, + 401, 401, 201, 201, 202, 202, 202, 202, 352, 401, 402, 402, + 402, 402, 402, 552, 401, 401, 401, 401, 202, 202, 202, 202, + 202, 352, 402, 402, 402, 402, 402, 552, 402, 402, 402, 402, + 402, 202, 202, 202, 202, 352, 402, 402, 402, 402, 552, 402, + 402, 402, 402, 402, 402, 202, 202, 202, 352, 402, 402, 402, + 572, 402, 402, 402, 402, 402, 402, 402, 202, 202, 372, 402, + 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, 512, + 402, 402, 402, 402, 512, 442, 472, 472, 472, 341, 1, 2, + 2, 2, 42, 41, 201, 202, 202, 202, 342, 1, 2, 2, + 2, 2, 201, 202, 202, 202, 202, 441, 1, 2, 2, 2, + 2, 72, 541, 201, 202, 202, 202, 202, 272, 1, 511, 511, + 1, 1, 2, 2, 2, 2, 52, 201, 202, 202, 202, 202, + 252, 1, 1, 1, 1, 1, 2, 2, 2, 2, 52, 202, + 202, 202, 202, 252, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 52, 202, 202, 202, 252, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 242, 212, 2, 2, 2, 212, 142, + 172, 172, 401, 401, 402, 402, 402, 201, 201, 202, 202, 202, + 311, 401, 402, 402, 402, 42, 111, 201, 202, 202, 202, 342, + 311, 401, 402, 402, 402, 12, 111, 201, 202, 202, 202, 412, + 401, 401, 402, 402, 402, 402, 241, 141, 201, 201, 202, 202, + 202, 202, 401, 402, 402, 402, 402, 572, 401, 401, 401, 401, + 201, 202, 202, 202, 202, 372, 402, 402, 402, 402, 572, 402, + 402, 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 12, + 402, 402, 402, 402, 402, 402, 202, 202, 412, 402, 542, 402, + 402, 402, 402, 402, 402, 402, 202, 442, 542, 402, 402, 402, + 402, 402, 402, 442, 472, 452, 452, 452, 472, 341, 401, 402, + 402, 402, 42, 41, 201, 202, 202, 202, 342, 1, 2, 2, + 2, 2, 201, 202, 202, 202, 202, 411, 1, 2, 2, 2, + 42, 11, 201, 202, 202, 202, 342, 411, 1, 2, 2, 2, + 112, 11, 201, 202, 202, 202, 312, 201, 541, 441, 1, 1, + 2, 2, 2, 2, 201, 202, 202, 202, 202, 202, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 72, 202, 202, 202, 202, + 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, 72, + 202, 202, 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, + 2, 112, 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, + 2, 142, 242, 242, 2, 2, 2, 2, 2, 2, 142, 172, + 152, 152, 152, 172, 401, 402, 402, 402, 402, 201, 202, 202, + 202, 202, 241, 401, 402, 402, 402, 402, 572, 141, 201, 202, + 202, 202, 202, 372, 401, 401, 402, 402, 402, 402, 552, 211, + 211, 401, 201, 202, 202, 202, 202, 352, 402, 402, 402, 402, + 402, 552, 401, 401, 401, 402, 202, 202, 202, 202, 352, 402, + 402, 402, 402, 552, 402, 402, 402, 402, 402, 202, 202, 202, + 352, 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 202, + 202, 372, 402, 542, 402, 402, 402, 402, 402, 402, 402, 442, + 542, 512, 402, 402, 402, 512, 442, 472, 472, 341, 1, 2, + 2, 42, 41, 201, 202, 202, 342, 1, 2, 2, 2, 201, + 202, 202, 202, 441, 1, 2, 2, 2, 72, 541, 201, 202, + 202, 202, 272, 1, 511, 511, 1, 1, 2, 2, 2, 72, + 201, 202, 202, 202, 272, 2, 1, 1, 1, 2, 2, 2, + 2, 72, 202, 202, 202, 272, 2, 2, 2, 2, 2, 2, + 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, 2, 2, + 2, 142, 242, 242, 212, 212, 212, 212, 142, 401, 402, 402, + 402, 201, 202, 202, 202, 311, 401, 402, 402, 42, 111, 201, + 202, 202, 342, 311, 401, 402, 402, 12, 111, 201, 202, 202, + 412, 401, 401, 402, 402, 12, 241, 141, 201, 201, 202, 202, + 412, 402, 402, 402, 12, 401, 401, 401, 401, 202, 202, 202, + 412, 402, 402, 12, 402, 402, 402, 402, 402, 202, 202, 412, + 402, 542, 402, 402, 402, 402, 402, 402, 202, 442, 542, 402, + 402, 402, 402, 402, 442, 472, 472, 472, 472, 341, 401, 402, + 402, 42, 41, 201, 202, 202, 342, 1, 2, 2, 2, 201, + 202, 202, 202, 411, 1, 2, 2, 42, 11, 201, 202, 202, + 342, 411, 1, 2, 2, 112, 11, 201, 202, 202, 312, 201, + 541, 441, 1, 1, 2, 2, 112, 201, 202, 202, 312, 202, + 1, 1, 1, 1, 2, 2, 2, 112, 202, 202, 312, 202, + 2, 2, 2, 2, 2, 2, 2, 112, 202, 312, 202, 2, + 2, 2, 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, + 2, 2, 142, 172, 172, 172, 172, 401, 402, 402, 402, 201, + 202, 202, 202, 241, 401, 402, 402, 402, 572, 141, 201, 202, + 202, 202, 372, 401, 401, 402, 402, 402, 572, 211, 211, 401, + 201, 202, 202, 202, 372, 402, 402, 402, 402, 572, 401, 401, + 401, 402, 202, 202, 202, 372, 402, 402, 402, 572, 402, 402, + 402, 402, 402, 202, 202, 372, 402, 542, 402, 402, 402, 402, + 402, 402, 442, 542, 512, 512, 512, 512, 442, 341, 1, 2, + 2, 42, 41, 201, 202, 202, 342, 1, 2, 2, 2, 201, + 202, 202, 202, 441, 1, 2, 2, 2, 72, 541, 201, 202, + 202, 202, 272, 1, 511, 511, 1, 1, 2, 2, 2, 72, + 201, 202, 202, 202, 272, 2, 2, 1, 2, 2, 2, 2, + 2, 72, 202, 202, 202, 272, 2, 2, 2, 2, 2, 2, + 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, 2, 2, + 2, 142, 242, 242, 212, 212, 212, 212, 142, 401, 402, 402, + 402, 201, 202, 202, 202, 311, 402, 402, 402, 42, 111, 202, + 202, 202, 342, 311, 401, 402, 402, 12, 111, 201, 202, 202, + 412, 401, 402, 402, 402, 12, 241, 141, 201, 202, 202, 202, + 412, 402, 402, 402, 12, 401, 401, 401, 401, 202, 202, 202, + 412, 402, 402, 12, 402, 402, 402, 402, 402, 202, 202, 412, + 402, 542, 402, 402, 402, 402, 402, 402, 202, 442, 542, 402, + 402, 402, 402, 402, 442, 472, 472, 472, 472, 341, 402, 402, + 402, 42, 41, 202, 202, 202, 342, 1, 2, 2, 2, 201, + 202, 202, 202, 411, 2, 2, 2, 42, 11, 202, 202, 202, + 342, 411, 2, 2, 2, 112, 11, 202, 202, 202, 312, 201, + 541, 441, 1, 2, 2, 2, 112, 202, 202, 202, 312, 202, + 2, 1, 1, 2, 2, 2, 2, 112, 202, 202, 312, 202, + 2, 2, 2, 2, 2, 2, 2, 112, 202, 312, 202, 2, + 2, 2, 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, + 2, 2, 142, 172, 172, 172, 172, 401, 402, 402, 402, 201, + 202, 202, 202, 241, 401, 402, 402, 402, 572, 141, 201, 202, + 202, 202, 372, 401, 402, 402, 402, 402, 572, 211, 211, 401, + 202, 202, 202, 202, 372, 402, 402, 402, 402, 572, 402, 402, + 402, 402, 202, 202, 202, 372, 402, 402, 402, 572, 402, 402, + 402, 402, 402, 202, 202, 372, 402, 542, 402, 402, 402, 402, + 402, 402, 442, 542, 512, 512, 512, 512, 442, 341, 2, 2, + 42, 41, 202, 202, 342, 1, 2, 2, 201, 202, 202, 441, + 1, 2, 2, 72, 541, 201, 202, 202, 272, 1, 511, 511, + 1, 2, 2, 2, 72, 202, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, + 2, 2, 142, 242, 242, 212, 212, 212, 142, 401, 402, 402, + 201, 202, 202, 311, 402, 402, 42, 111, 202, 202, 342, 311, + 402, 402, 12, 111, 202, 202, 412, 401, 402, 402, 12, 241, + 141, 201, 202, 202, 412, 402, 402, 12, 402, 401, 401, 402, + 202, 202, 412, 402, 542, 402, 402, 402, 402, 402, 202, 442, + 542, 402, 402, 402, 402, 442, 472, 472, 472, 341, 402, 402, + 42, 41, 202, 202, 342, 1, 2, 2, 201, 202, 202, 411, + 2, 2, 42, 11, 202, 202, 342, 411, 2, 2, 112, 11, + 202, 202, 312, 201, 541, 441, 1, 2, 2, 112, 202, 202, + 312, 202, 2, 1, 1, 2, 2, 2, 112, 202, 312, 202, + 2, 2, 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, + 2, 142, 172, 172, 172, 401, 402, 402, 201, 202, 202, 241, + 401, 402, 402, 572, 141, 201, 202, 202, 372, 401, 402, 402, + 402, 572, 211, 211, 401, 202, 202, 202, 372, 402, 402, 402, + 572, 402, 402, 402, 402, 202, 202, 372, 402, 542, 402, 402, + 402, 402, 402, 442, 542, 512, 512, 512, 442, 341, 2, 2, + 42, 41, 202, 202, 342, 2, 2, 2, 202, 202, 202, 441, + 2, 2, 2, 72, 541, 202, 202, 202, 272, 1, 511, 511, + 1, 2, 2, 2, 72, 202, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, + 2, 2, 142, 242, 242, 212, 212, 212, 142, 401, 402, 402, + 201, 202, 202, 311, 402, 402, 42, 111, 202, 202, 342, 311, + 402, 402, 12, 111, 202, 202, 412, 401, 402, 402, 12, 241, + 141, 201, 202, 202, 412, 402, 402, 12, 402, 402, 402, 402, + 202, 202, 412, 402, 542, 402, 402, 402, 402, 402, 202, 442, + 542, 402, 402, 402, 402, 442, 472, 472, 472, 342, 402, 402, + 42, 42, 202, 202, 342, 2, 2, 2, 202, 202, 202, 411, + 2, 2, 42, 11, 202, 202, 342, 411, 2, 2, 112, 11, + 202, 202, 312, 202, 542, 442, 2, 2, 2, 112, 202, 202, + 312, 202, 2, 2, 2, 2, 2, 2, 112, 202, 312, 202, + 2, 2, 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, + 2, 142, 172, 172, 172, 402, 402, 402, 202, 202, 202, 242, + 402, 402, 402, 572, 142, 202, 202, 202, 372, 402, 402, 402, + 402, 572, 211, 211, 402, 202, 202, 202, 372, 402, 402, 402, + 572, 402, 402, 402, 402, 202, 202, 372, 402, 542, 402, 402, + 402, 402, 402, 442, 542, 512, 512, 512, 442 1037.83*mm, 1060.98*mm, 1084.12*mm, 1108.3*mm, 1132.48*mm, 1157.73*mm, @@ -4333,7 +3342,7 @@ 1537.05*mm, 1571.33*mm, 1605.6*mm, 1641.41*mm, 1677.22*mm, 1714.62*mm, 1752.03*mm, 1791.1*mm, 1830.17*mm, 1870.99*mm, 1911.8*mm, 1954.44*mm, 1997.08*mm, 2041.61*mm, 2086.15*mm, 2132.67*mm, 2179.2*mm, 2227.8*mm, - 2276.4*mm, 2327.16*mm, 2377.93*mm, 2430.96*mm, 2483.99*mm, 2539.39*mm + 2276.4*mm, 2327.16*mm, 2377.93*mm, 2430.96*mm, 2483.99*mm, 2539.39*mm 1060.98*mm, 1084.12*mm, 1108.3*mm, 1132.48*mm, 1157.73*mm, 1182.99*mm, @@ -4342,121 +3351,105 @@ 1571.33*mm, 1605.6*mm, 1641.41*mm, 1677.22*mm, 1714.62*mm, 1752.03*mm, 1791.1*mm, 1830.17*mm, 1870.99*mm, 1911.8*mm, 1954.44*mm, 1997.08*mm, 2041.61*mm, 2086.15*mm, 2132.67*mm, 2179.2*mm, 2227.8*mm, 2276.4*mm, - 2327.16*mm, 2377.93*mm, 2430.96*mm, 2483.99*mm, 2539.39*mm, 2594.79*mm + 2327.16*mm, 2377.93*mm, 2430.96*mm, 2483.99*mm, 2539.39*mm, 2594.79*mm - 18, 18, 18, 18, 13, 13, 6, 6, 6, 6, 0, 0, 0, 0 + 18, 18, 18, 18, 13, 13, 6, 6, 6, 6, 0, 0, 0, 0 - 29, 31, 32, 33, 36, 38, 40, 41, 41, 41, 41, 41, 41, 39 + 29, 31, 32, 33, 36, 38, 40, 41, 41, 41, 41, 41, 41, 39 - 271360, 271872, 272384, 272896, 273408, 273920, 274432, - 274944, 275456, 275968, 276480, 276992, 533504, 534016, - 534528, 535040, 535552, 536064, 536576, 537088, 537600, - 538112, 538624, 539136, 539648, 540160, 795648, 796160, - 796672, 797184, 797696, 798208, 798720, 799232, 799744, - 800256, 800768, 801280, 801792, 802304, 802816, 1057792, - 1058304, 1058816, 1059328, 1059840, 1060352, 1060864, 1061376, - 1061888, 1062400, 1062912, 1063424, 1063936, 1064448, 1064960, - 1065472, 1317376, 1317888, 1318400, 1318912, 1319424, 1319936, - 1320448, 1320960, 1321472, 1321984, 1322496, 1323008, 1323520, - 1324032, 1324544, 1325056, 1325568, 1326080, 1326592, 1327104, - 1327616, 1328128, 1328640, 1329152, 1579520, 1580032, 1580544, - 1581056, 1581568, 1582080, 1582592, 1583104, 1583616, 1584128, - 1584640, 1585152, 1585664, 1586176, 1586688, 1587200, 1587712, - 1588224, 1588736, 1589248, 1589760, 1590272, 1590784, 1591296, - 1591808, 1592320, 1838080, 1838592, 1839104, 1839616, 1840128, - 1840640, 1841152, 1841664, 1842176, 1842688, 1843200, 1843712, - 1844224, 1844736, 1845248, 1845760, 1846272, 1846784, 1847296, - 1847808, 1848320, 1848832, 1849344, 1849856, 1850368, 1850880, - 1851392, 1851904, 1852416, 1852928, 1853440, 1853952, 1854464, - 1854976, 1855488, 2100224, 2100736, 2101248, 2101760, 2102272, - 2102784, 2103296, 2103808, 2104320, 2104832, 2105344, 2105856, - 2106368, 2106880, 2107392, 2107904, 2108416, 2108928, 2109440, - 2109952, 2110464, 2110976, 2111488, 2112000, 2112512, 2113024, - 2113536, 2114048, 2114560, 2115072, 2115584, 2116096, 2116608, - 2117120, 2117632, 2118144, 2362368, 2362880, 2363392, 2363904, - 2364416, 2364928, 2365440, 2365952, 2366464, 2366976, 2367488, - 2368000, 2368512, 2369024, 2369536, 2370048, 2370560, 2371072, - 2371584, 2372096, 2372608, 2373120, 2373632, 2374144, 2374656, - 2375168, 2375680, 2376192, 2376704, 2377216, 2377728, 2378240, - 2378752, 2379264, 2379776, 2380288, 2624512, 2625024, 2625536, - 2626048, 2626560, 2627072, 2627584, 2628096, 2628608, 2629120, - 2629632, 2630144, 2630656, 2631168, 2631680, 2632192, 2632704, - 2633216, 2633728, 2634240, 2634752, 2635264, 2635776, 2636288, - 2636800, 2637312, 2637824, 2638336, 2638848, 2639360, 2639872, - 2640384, 2640896, 2641408, 2641920, 2642432, 2883584, 2884096, - 2884608, 2885120, 2885632, 2886144, 2886656, 2887168, 2887680, - 2888192, 2888704, 2889216, 2889728, 2890240, 2890752, 2891264, - 2891776, 2892288, 2892800, 2893312, 2893824, 2894336, 2894848, - 2895360, 2895872, 2896384, 2896896, 2897408, 2897920, 2898432, - 2898944, 2899456, 2899968, 2900480, 2900992, 2901504, 2902016, - 2902528, 2903040, 2903552, 2904064, 2904576, 3145728, 3146240, - 3146752, 3147264, 3147776, 3148288, 3148800, 3149312, 3149824, - 3150336, 3150848, 3151360, 3151872, 3152384, 3152896, 3153408, - 3153920, 3154432, 3154944, 3155456, 3155968, 3156480, 3156992, - 3157504, 3158016, 3158528, 3159040, 3159552, 3160064, 3160576, - 3161088, 3161600, 3162112, 3162624, 3163136, 3163648, 3164160, - 3164672, 3165184, 3165696, 3166208, 3166720, 3407872, 3408384, - 3408896, 3409408, 3409920, 3410432, 3410944, 3411456, 3411968, - 3412480, 3412992, 3413504, 3414016, 3414528, 3415040, 3415552, - 3416064, 3416576, 3417088, 3417600, 3418112, 3418624, 3419136, - 3419648, 3420160, 3420672, 3421184, 3421696, 3422208, 3422720, - 3423232, 3423744, 3424256, 3424768, 3425280, 3425792, 3426304, - 3426816, 3427328, 3427840, 3428352, 3428864, 3670016, 3670528, - 3671040, 3671552, 3672064, 3672576, 3673088, 3673600, 3674112, - 3674624, 3675136, 3675648, 3676160, 3676672, 3677184, 3677696, - 3678208, 3678720, 3679232, 3679744, 3680256, 3680768, 3681280, - 3681792, 3682304, 3682816, 3683328, 3683840, 3684352, 3684864, - 3685376, 3685888, 3686400, 3686912, 3687424, 3687936, 3688448, - 3688960, 3689472, 3689984 + 2369024, 2369536, 2370048, 2370560, 2371072, 2371584, 2372096, + 2372608, 2373120, 2373632, 2374144, 2374656, 2631168, 2631680, + 2632192, 2632704, 2633216, 2633728, 2634240, 2634752, 2635264, + 2635776, 2636288, 2636800, 2637312, 2637824, 2893312, 2893824, + 2894336, 2894848, 2895360, 2895872, 2896384, 2896896, 2897408, + 2897920, 2898432, 2898944, 2899456, 2899968, 2900480, 3155456, + 3155968, 3156480, 3156992, 3157504, 3158016, 3158528, 3159040, + 3159552, 3160064, 3160576, 3161088, 3161600, 3162112, 3162624, + 3163136, 3415040, 3415552, 3416064, 3416576, 3417088, 3417600, + 3418112, 3418624, 3419136, 3419648, 3420160, 3420672, 3421184, + 3421696, 3422208, 3422720, 3423232, 3423744, 3424256, 3424768, + 3425280, 3425792, 3426304, 3426816, 3677184, 3677696, 3678208, + 3678720, 3679232, 3679744, 3680256, 3680768, 3681280, 3681792, + 3682304, 3682816, 3683328, 3683840, 3684352, 3684864, 3685376, + 3685888, 3686400, 3686912, 3687424, 3687936, 3688448, 3688960, + 3689472, 3689984, 3935744, 3936256, 3936768, 3937280, 3937792, + 3938304, 3938816, 3939328, 3939840, 3940352, 3940864, 3941376, + 3941888, 3942400, 3942912, 3943424, 3943936, 3944448, 3944960, + 3945472, 3945984, 3946496, 3947008, 3947520, 3948032, 3948544, + 3949056, 3949568, 3950080, 3950592, 3951104, 3951616, 3952128, + 3952640, 3953152, 4197888, 4198400, 4198912, 4199424, 4199936, + 4200448, 4200960, 4201472, 4201984, 4202496, 4203008, 4203520, + 4204032, 4204544, 4205056, 4205568, 4206080, 4206592, 4207104, + 4207616, 4208128, 4208640, 4209152, 4209664, 4210176, 4210688, + 4211200, 4211712, 4212224, 4212736, 4213248, 4213760, 4214272, + 4214784, 4215296, 4215808, 4460032, 4460544, 4461056, 4461568, + 4462080, 4462592, 4463104, 4463616, 4464128, 4464640, 4465152, + 4465664, 4466176, 4466688, 4467200, 4467712, 4468224, 4468736, + 4469248, 4469760, 4470272, 4470784, 4471296, 4471808, 4472320, + 4472832, 4473344, 4473856, 4474368, 4474880, 4475392, 4475904, + 4476416, 4476928, 4477440, 4477952, 4722176, 4722688, 4723200, + 4723712, 4724224, 4724736, 4725248, 4725760, 4726272, 4726784, + 4727296, 4727808, 4728320, 4728832, 4729344, 4729856, 4730368, + 4730880, 4731392, 4731904, 4732416, 4732928, 4733440, 4733952, + 4734464, 4734976, 4735488, 4736000, 4736512, 4737024, 4737536, + 4738048, 4738560, 4739072, 4739584, 4740096, 4981248, 4981760, + 4982272, 4982784, 4983296, 4983808, 4984320, 4984832, 4985344, + 4985856, 4986368, 4986880, 4987392, 4987904, 4988416, 4988928, + 4989440, 4989952, 4990464, 4990976, 4991488, 4992000, 4992512, + 4993024, 4993536, 4994048, 4994560, 4995072, 4995584, 4996096, + 4996608, 4997120, 4997632, 4998144, 4998656, 4999168, 4999680, + 5000192, 5000704, 5001216, 5001728, 5002240, 5243392, 5243904, + 5244416, 5244928, 5245440, 5245952, 5246464, 5246976, 5247488, + 5248000, 5248512, 5249024, 5249536, 5250048, 5250560, 5251072, + 5251584, 5252096, 5252608, 5253120, 5253632, 5254144, 5254656, + 5255168, 5255680, 5256192, 5256704, 5257216, 5257728, 5258240, + 5258752, 5259264, 5259776, 5260288, 5260800, 5261312, 5261824, + 5262336, 5262848, 5263360, 5263872, 5264384, 5505536, 5506048, + 5506560, 5507072, 5507584, 5508096, 5508608, 5509120, 5509632, + 5510144, 5510656, 5511168, 5511680, 5512192, 5512704, 5513216, + 5513728, 5514240, 5514752, 5515264, 5515776, 5516288, 5516800, + 5517312, 5517824, 5518336, 5518848, 5519360, 5519872, 5520384, + 5520896, 5521408, 5521920, 5522432, 5522944, 5523456, 5523968, + 5524480, 5524992, 5525504, 5526016, 5526528, 5767680, 5768192, + 5768704, 5769216, 5769728, 5770240, 5770752, 5771264, 5771776, + 5772288, 5772800, 5773312, 5773824, 5774336, 5774848, 5775360, + 5775872, 5776384, 5776896, 5777408, 5777920, 5778432, 5778944, + 5779456, 5779968, 5780480, 5780992, 5781504, 5782016, 5782528, + 5783040, 5783552, 5784064, 5784576, 5785088, 5785600, 5786112, + 5786624, 5787136, 5787648 - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - - - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, - 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, - 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 + + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 40, 40, 40, 40, 40, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 20, + 20, 20, 20, 20, 20, 20, 20, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 20, 20, 20, 20, 20, 20, 20, 20, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 21, 21, 21, 21, + 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 41, 41, 41, 41, 41, 41, 41, 41, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 40, 40, 40, 40, 40, + 40, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 41, 41, + 41, 41, 41, 41, 41, 41, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 40, 40, 40, 40, 40, 40, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 40, 40, 40, 40, 40, 40, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, @@ -4528,7 +3521,7 @@ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff + 0xffffff, 0xffffff 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, @@ -4600,7 +3593,7 @@ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff + 0xffffff, 0xffffff 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, @@ -4672,7 +3665,7 @@ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff + 0xffffff, 0xffffff 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, diff --git a/Geometry/HGCalCommonData/data/hgcalConsData/v15/hgcalConsData.xml b/Geometry/HGCalCommonData/data/hgcalConsData/v15/hgcalConsData.xml new file mode 100644 index 0000000000000..f0dcf4baad0e8 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalConsData/v15/hgcalConsData.xml @@ -0,0 +1,3754 @@ + + + + + + 262146, 262147, 262148, 262149, 262150, 262151, 262152, + 262153, 262178, 262179, 262180, 262181, 262182, 262183, + 262184, 262185, 262210, 262211, 262212, 262213, 262214, + 262215, 262216, 262217, 262241, 262242, 262243, 262244, + 262245, 262246, 262247, 262248, 262272, 262273, 262274, + 262275, 262276, 262277, 262278, 262279, 262280, 262281, + 262282, 262305, 262306, 262307, 262308, 262309, 262310, + 262311, 262312, 262336, 262337, 262338, 262339, 262340, + 262341, 262342, 262343, 262344, 262345, 262346, 262369, + 262370, 262371, 262372, 262373, 262374, 262375, 262400, + 262401, 262402, 262403, 262404, 262405, 262406, 262407, + 262408, 262409, 262410, 262433, 262434, 262435, 262436, + 262437, 262438, 262464, 262465, 262466, 262467, 262468, + 262469, 262470, 262471, 262472, 262473, 262474, 262497, + 262498, 262499, 262500, 262501, 262528, 262529, 262530, + 262531, 262532, 262533, 262534, 262535, 262536, 262537, + 262538, 262561, 262562, 262563, 262564, 262592, 262593, + 262594, 262595, 262596, 262597, 262598, 262599, 262600, + 262601, 262602, 262625, 262626, 262627, 262656, 262657, + 262658, 262659, 262660, 262661, 262662, 262663, 262664, + 262665, 262666, 262689, 262690, 262720, 262721, 262722, + 262723, 262724, 262725, 262726, 262727, 262728, 262729, + 262786, 262787, 262788, 262789, 262790, 262791, 262792, + 264257, 264258, 264259, 264260, 264261, 264262, 264263, + 264264, 264290, 264291, 264292, 264293, 264294, 264295, + 264296, 264297, 264320, 264321, 264322, 264323, 264324, + 264325, 264326, 264327, 264328, 264353, 264354, 264355, + 264356, 264357, 264358, 264359, 264360, 264361, 264362, + 264384, 264385, 264386, 264387, 264388, 264389, 264390, + 264391, 264417, 264418, 264419, 264420, 264421, 264422, + 264423, 264424, 264425, 264426, 264448, 264449, 264450, + 264451, 264452, 264453, 264454, 264481, 264482, 264483, + 264484, 264485, 264486, 264487, 264488, 264489, 264490, + 264512, 264513, 264514, 264515, 264516, 264517, 264545, + 264546, 264547, 264548, 264549, 264550, 264551, 264552, + 264553, 264554, 264576, 264577, 264578, 264579, 264580, + 264609, 264610, 264611, 264612, 264613, 264614, 264615, + 264616, 264617, 264618, 264640, 264641, 264642, 264643, + 264673, 264674, 264675, 264676, 264677, 264678, 264679, + 264680, 264681, 264682, 264704, 264705, 264706, 264737, + 264738, 264739, 264740, 264741, 264742, 264743, 264744, + 264745, 264746, 264768, 264801, 264802, 264803, 264804, + 264805, 264806, 264807, 264808, 264809, 264866, 264867, + 264868, 264869, 264870, 264871, 264872, 524290, 524291, + 524292, 524293, 524294, 524295, 524296, 524322, 524323, + 524324, 524325, 524326, 524327, 524328, 524354, 524355, + 524356, 524357, 524358, 524359, 524360, 524361, 524385, + 524386, 524387, 524388, 524389, 524390, 524391, 524392, + 524416, 524417, 524418, 524419, 524420, 524421, 524422, + 524423, 524424, 524425, 524449, 524450, 524451, 524452, + 524453, 524454, 524455, 524480, 524481, 524482, 524483, + 524484, 524485, 524486, 524487, 524488, 524489, 524513, + 524514, 524515, 524516, 524517, 524518, 524544, 524545, + 524546, 524547, 524548, 524549, 524550, 524551, 524552, + 524553, 524554, 524577, 524578, 524579, 524580, 524581, + 524582, 524608, 524609, 524610, 524611, 524612, 524613, + 524614, 524615, 524616, 524617, 524618, 524641, 524642, + 524643, 524644, 524645, 524672, 524673, 524674, 524675, + 524676, 524677, 524678, 524679, 524680, 524681, 524682, + 524705, 524706, 524707, 524708, 524736, 524737, 524738, + 524739, 524740, 524741, 524742, 524743, 524744, 524745, + 524769, 524770, 524800, 524801, 524802, 524803, 524804, + 524805, 524806, 524807, 524808, 524809, 524833, 524865, + 524866, 524867, 524868, 524869, 524870, 524871, 524872, + 524932, 524933, 524934, 526401, 526402, 526403, 526404, + 526405, 526406, 526407, 526408, 526434, 526435, 526436, + 526437, 526438, 526439, 526440, 526441, 526464, 526465, + 526466, 526467, 526468, 526469, 526470, 526471, 526497, + 526498, 526499, 526500, 526501, 526502, 526503, 526504, + 526505, 526528, 526529, 526530, 526531, 526532, 526533, + 526534, 526561, 526562, 526563, 526564, 526565, 526566, + 526567, 526568, 526569, 526592, 526593, 526594, 526595, + 526596, 526597, 526598, 526625, 526626, 526627, 526628, + 526629, 526630, 526631, 526632, 526633, 526634, 526656, + 526657, 526658, 526659, 526660, 526661, 526689, 526690, + 526691, 526692, 526693, 526694, 526695, 526696, 526697, + 526698, 526720, 526721, 526722, 526723, 526724, 526753, + 526754, 526755, 526756, 526757, 526758, 526759, 526760, + 526761, 526762, 526784, 526785, 526786, 526817, 526818, + 526819, 526820, 526821, 526822, 526823, 526824, 526825, + 526848, 526849, 526881, 526882, 526883, 526884, 526885, + 526886, 526887, 526888, 526889, 526945, 526946, 526947, + 526948, 526949, 526950, 526951, 526952, 527012, 527013, + 527014, 786434, 786435, 786436, 786437, 786438, 786439, + 786440, 786441, 786466, 786467, 786468, 786469, 786470, + 786471, 786472, 786473, 786498, 786499, 786500, 786501, + 786502, 786503, 786504, 786505, 786529, 786530, 786531, + 786532, 786533, 786534, 786535, 786536, 786560, 786561, + 786562, 786563, 786564, 786565, 786566, 786567, 786568, + 786569, 786570, 786593, 786594, 786595, 786596, 786597, + 786598, 786599, 786600, 786624, 786625, 786626, 786627, + 786628, 786629, 786630, 786631, 786632, 786633, 786634, + 786657, 786658, 786659, 786660, 786661, 786662, 786663, + 786688, 786689, 786690, 786691, 786692, 786693, 786694, + 786695, 786696, 786697, 786698, 786721, 786722, 786723, + 786724, 786725, 786726, 786752, 786753, 786754, 786755, + 786756, 786757, 786758, 786759, 786760, 786761, 786762, + 786785, 786786, 786787, 786788, 786789, 786816, 786817, + 786818, 786819, 786820, 786821, 786822, 786823, 786824, + 786825, 786826, 786849, 786850, 786851, 786852, 786880, + 786881, 786882, 786883, 786884, 786885, 786886, 786887, + 786888, 786889, 786890, 786913, 786914, 786915, 786944, + 786945, 786946, 786947, 786948, 786949, 786950, 786951, + 786952, 786953, 786954, 786977, 786978, 787008, 787009, + 787010, 787011, 787012, 787013, 787014, 787015, 787016, + 787017, 787074, 787075, 787076, 787077, 787078, 787079, + 787080, 788545, 788546, 788547, 788548, 788549, 788550, + 788551, 788552, 788578, 788579, 788580, 788581, 788582, + 788583, 788584, 788585, 788608, 788609, 788610, 788611, + 788612, 788613, 788614, 788615, 788616, 788641, 788642, + 788643, 788644, 788645, 788646, 788647, 788648, 788649, + 788650, 788672, 788673, 788674, 788675, 788676, 788677, + 788678, 788679, 788705, 788706, 788707, 788708, 788709, + 788710, 788711, 788712, 788713, 788714, 788736, 788737, + 788738, 788739, 788740, 788741, 788742, 788769, 788770, + 788771, 788772, 788773, 788774, 788775, 788776, 788777, + 788778, 788800, 788801, 788802, 788803, 788804, 788805, + 788833, 788834, 788835, 788836, 788837, 788838, 788839, + 788840, 788841, 788842, 788864, 788865, 788866, 788867, + 788868, 788897, 788898, 788899, 788900, 788901, 788902, + 788903, 788904, 788905, 788906, 788928, 788929, 788930, + 788931, 788961, 788962, 788963, 788964, 788965, 788966, + 788967, 788968, 788969, 788970, 788992, 788993, 788994, + 789025, 789026, 789027, 789028, 789029, 789030, 789031, + 789032, 789033, 789034, 789056, 789089, 789090, 789091, + 789092, 789093, 789094, 789095, 789096, 789097, 789154, + 789155, 789156, 789157, 789158, 789159, 789160, 1048578, + 1048579, 1048580, 1048581, 1048582, 1048583, 1048584, 1048610, + 1048611, 1048612, 1048613, 1048614, 1048615, 1048616, 1048642, + 1048643, 1048644, 1048645, 1048646, 1048647, 1048648, 1048649, + 1048673, 1048674, 1048675, 1048676, 1048677, 1048678, 1048679, + 1048680, 1048704, 1048705, 1048706, 1048707, 1048708, 1048709, + 1048710, 1048711, 1048712, 1048713, 1048737, 1048738, 1048739, + 1048740, 1048741, 1048742, 1048743, 1048768, 1048769, 1048770, + 1048771, 1048772, 1048773, 1048774, 1048775, 1048776, 1048777, + 1048778, 1048801, 1048802, 1048803, 1048804, 1048805, 1048806, + 1048807, 1048832, 1048833, 1048834, 1048835, 1048836, 1048837, + 1048838, 1048839, 1048840, 1048841, 1048842, 1048865, 1048866, + 1048867, 1048868, 1048869, 1048870, 1048896, 1048897, 1048898, + 1048899, 1048900, 1048901, 1048902, 1048903, 1048904, 1048905, + 1048906, 1048929, 1048930, 1048931, 1048932, 1048933, 1048960, + 1048961, 1048962, 1048963, 1048964, 1048965, 1048966, 1048967, + 1048968, 1048969, 1048970, 1048993, 1048994, 1048995, 1048996, + 1049024, 1049025, 1049026, 1049027, 1049028, 1049029, 1049030, + 1049031, 1049032, 1049033, 1049034, 1049057, 1049058, 1049059, + 1049088, 1049089, 1049090, 1049091, 1049092, 1049093, 1049094, + 1049095, 1049096, 1049097, 1049121, 1049153, 1049154, 1049155, + 1049156, 1049157, 1049158, 1049159, 1049160, 1049219, 1049220, + 1049221, 1049222, 1049223, 1050689, 1050690, 1050691, 1050692, + 1050693, 1050694, 1050695, 1050696, 1050722, 1050723, 1050724, + 1050725, 1050726, 1050727, 1050728, 1050729, 1050752, 1050753, + 1050754, 1050755, 1050756, 1050757, 1050758, 1050759, 1050785, + 1050786, 1050787, 1050788, 1050789, 1050790, 1050791, 1050792, + 1050793, 1050816, 1050817, 1050818, 1050819, 1050820, 1050821, + 1050822, 1050823, 1050849, 1050850, 1050851, 1050852, 1050853, + 1050854, 1050855, 1050856, 1050857, 1050858, 1050880, 1050881, + 1050882, 1050883, 1050884, 1050885, 1050886, 1050913, 1050914, + 1050915, 1050916, 1050917, 1050918, 1050919, 1050920, 1050921, + 1050922, 1050944, 1050945, 1050946, 1050947, 1050948, 1050949, + 1050977, 1050978, 1050979, 1050980, 1050981, 1050982, 1050983, + 1050984, 1050985, 1050986, 1051008, 1051009, 1051010, 1051011, + 1051012, 1051041, 1051042, 1051043, 1051044, 1051045, 1051046, + 1051047, 1051048, 1051049, 1051050, 1051072, 1051073, 1051074, + 1051075, 1051105, 1051106, 1051107, 1051108, 1051109, 1051110, + 1051111, 1051112, 1051113, 1051114, 1051136, 1051137, 1051169, + 1051170, 1051171, 1051172, 1051173, 1051174, 1051175, 1051176, + 1051177, 1051233, 1051234, 1051235, 1051236, 1051237, 1051238, + 1051239, 1051240, 1051299, 1051300, 1051301, 1051302, 1051303, + 1310722, 1310723, 1310724, 1310725, 1310726, 1310727, 1310728, + 1310729, 1310754, 1310755, 1310756, 1310757, 1310758, 1310759, + 1310760, 1310761, 1310786, 1310787, 1310788, 1310789, 1310790, + 1310791, 1310792, 1310793, 1310817, 1310818, 1310819, 1310820, + 1310821, 1310822, 1310823, 1310824, 1310848, 1310849, 1310850, + 1310851, 1310852, 1310853, 1310854, 1310855, 1310856, 1310857, + 1310858, 1310881, 1310882, 1310883, 1310884, 1310885, 1310886, + 1310887, 1310888, 1310912, 1310913, 1310914, 1310915, 1310916, + 1310917, 1310918, 1310919, 1310920, 1310921, 1310922, 1310945, + 1310946, 1310947, 1310948, 1310949, 1310950, 1310951, 1310976, + 1310977, 1310978, 1310979, 1310980, 1310981, 1310982, 1310983, + 1310984, 1310985, 1310986, 1311009, 1311010, 1311011, 1311012, + 1311013, 1311014, 1311040, 1311041, 1311042, 1311043, 1311044, + 1311045, 1311046, 1311047, 1311048, 1311049, 1311050, 1311073, + 1311074, 1311075, 1311076, 1311077, 1311104, 1311105, 1311106, + 1311107, 1311108, 1311109, 1311110, 1311111, 1311112, 1311113, + 1311114, 1311137, 1311138, 1311139, 1311140, 1311168, 1311169, + 1311170, 1311171, 1311172, 1311173, 1311174, 1311175, 1311176, + 1311177, 1311178, 1311201, 1311202, 1311203, 1311232, 1311233, + 1311234, 1311235, 1311236, 1311237, 1311238, 1311239, 1311240, + 1311241, 1311242, 1311265, 1311266, 1311296, 1311297, 1311298, + 1311299, 1311300, 1311301, 1311302, 1311303, 1311304, 1311305, + 1311362, 1311363, 1311364, 1311365, 1311366, 1311367, 1311368, + 1312833, 1312834, 1312835, 1312836, 1312837, 1312838, 1312839, + 1312840, 1312866, 1312867, 1312868, 1312869, 1312870, 1312871, + 1312872, 1312873, 1312896, 1312897, 1312898, 1312899, 1312900, + 1312901, 1312902, 1312903, 1312904, 1312929, 1312930, 1312931, + 1312932, 1312933, 1312934, 1312935, 1312936, 1312937, 1312938, + 1312960, 1312961, 1312962, 1312963, 1312964, 1312965, 1312966, + 1312967, 1312993, 1312994, 1312995, 1312996, 1312997, 1312998, + 1312999, 1313000, 1313001, 1313002, 1313024, 1313025, 1313026, + 1313027, 1313028, 1313029, 1313030, 1313057, 1313058, 1313059, + 1313060, 1313061, 1313062, 1313063, 1313064, 1313065, 1313066, + 1313088, 1313089, 1313090, 1313091, 1313092, 1313093, 1313121, + 1313122, 1313123, 1313124, 1313125, 1313126, 1313127, 1313128, + 1313129, 1313130, 1313152, 1313153, 1313154, 1313155, 1313156, + 1313185, 1313186, 1313187, 1313188, 1313189, 1313190, 1313191, + 1313192, 1313193, 1313194, 1313216, 1313217, 1313218, 1313219, + 1313249, 1313250, 1313251, 1313252, 1313253, 1313254, 1313255, + 1313256, 1313257, 1313258, 1313280, 1313281, 1313282, 1313313, + 1313314, 1313315, 1313316, 1313317, 1313318, 1313319, 1313320, + 1313321, 1313322, 1313344, 1313377, 1313378, 1313379, 1313380, + 1313381, 1313382, 1313383, 1313384, 1313385, 1313442, 1313443, + 1313444, 1313445, 1313446, 1313447, 1313448, 1572866, 1572867, + 1572868, 1572869, 1572870, 1572871, 1572872, 1572898, 1572899, + 1572900, 1572901, 1572902, 1572903, 1572904, 1572930, 1572931, + 1572932, 1572933, 1572934, 1572935, 1572936, 1572937, 1572961, + 1572962, 1572963, 1572964, 1572965, 1572966, 1572967, 1572968, + 1572992, 1572993, 1572994, 1572995, 1572996, 1572997, 1572998, + 1572999, 1573000, 1573001, 1573025, 1573026, 1573027, 1573028, + 1573029, 1573030, 1573031, 1573056, 1573057, 1573058, 1573059, + 1573060, 1573061, 1573062, 1573063, 1573064, 1573065, 1573066, + 1573089, 1573090, 1573091, 1573092, 1573093, 1573094, 1573095, + 1573120, 1573121, 1573122, 1573123, 1573124, 1573125, 1573126, + 1573127, 1573128, 1573129, 1573130, 1573153, 1573154, 1573155, + 1573156, 1573157, 1573158, 1573184, 1573185, 1573186, 1573187, + 1573188, 1573189, 1573190, 1573191, 1573192, 1573193, 1573194, + 1573217, 1573218, 1573219, 1573220, 1573221, 1573248, 1573249, + 1573250, 1573251, 1573252, 1573253, 1573254, 1573255, 1573256, + 1573257, 1573258, 1573281, 1573282, 1573283, 1573284, 1573312, + 1573313, 1573314, 1573315, 1573316, 1573317, 1573318, 1573319, + 1573320, 1573321, 1573322, 1573345, 1573346, 1573347, 1573376, + 1573377, 1573378, 1573379, 1573380, 1573381, 1573382, 1573383, + 1573384, 1573385, 1573409, 1573441, 1573442, 1573443, 1573444, + 1573445, 1573446, 1573447, 1573448, 1573507, 1573508, 1573509, + 1573510, 1573511, 1574977, 1574978, 1574979, 1574980, 1574981, + 1574982, 1574983, 1574984, 1575010, 1575011, 1575012, 1575013, + 1575014, 1575015, 1575016, 1575017, 1575040, 1575041, 1575042, + 1575043, 1575044, 1575045, 1575046, 1575047, 1575073, 1575074, + 1575075, 1575076, 1575077, 1575078, 1575079, 1575080, 1575081, + 1575104, 1575105, 1575106, 1575107, 1575108, 1575109, 1575110, + 1575111, 1575137, 1575138, 1575139, 1575140, 1575141, 1575142, + 1575143, 1575144, 1575145, 1575146, 1575168, 1575169, 1575170, + 1575171, 1575172, 1575173, 1575174, 1575201, 1575202, 1575203, + 1575204, 1575205, 1575206, 1575207, 1575208, 1575209, 1575210, + 1575232, 1575233, 1575234, 1575235, 1575236, 1575237, 1575265, + 1575266, 1575267, 1575268, 1575269, 1575270, 1575271, 1575272, + 1575273, 1575274, 1575296, 1575297, 1575298, 1575299, 1575300, + 1575329, 1575330, 1575331, 1575332, 1575333, 1575334, 1575335, + 1575336, 1575337, 1575338, 1575360, 1575361, 1575362, 1575363, + 1575393, 1575394, 1575395, 1575396, 1575397, 1575398, 1575399, + 1575400, 1575401, 1575402, 1575424, 1575425, 1575457, 1575458, + 1575459, 1575460, 1575461, 1575462, 1575463, 1575464, 1575465, + 1575521, 1575522, 1575523, 1575524, 1575525, 1575526, 1575527, + 1575528, 1575587, 1575588, 1575589, 1575590, 1575591, 1835010, + 1835011, 1835012, 1835013, 1835014, 1835015, 1835016, 1835017, + 1835042, 1835043, 1835044, 1835045, 1835046, 1835047, 1835048, + 1835049, 1835074, 1835075, 1835076, 1835077, 1835078, 1835079, + 1835080, 1835081, 1835105, 1835106, 1835107, 1835108, 1835109, + 1835110, 1835111, 1835112, 1835136, 1835137, 1835138, 1835139, + 1835140, 1835141, 1835142, 1835143, 1835144, 1835145, 1835146, + 1835169, 1835170, 1835171, 1835172, 1835173, 1835174, 1835175, + 1835176, 1835200, 1835201, 1835202, 1835203, 1835204, 1835205, + 1835206, 1835207, 1835208, 1835209, 1835210, 1835233, 1835234, + 1835235, 1835236, 1835237, 1835238, 1835239, 1835264, 1835265, + 1835266, 1835267, 1835268, 1835269, 1835270, 1835271, 1835272, + 1835273, 1835274, 1835297, 1835298, 1835299, 1835300, 1835301, + 1835302, 1835328, 1835329, 1835330, 1835331, 1835332, 1835333, + 1835334, 1835335, 1835336, 1835337, 1835338, 1835361, 1835362, + 1835363, 1835364, 1835365, 1835392, 1835393, 1835394, 1835395, + 1835396, 1835397, 1835398, 1835399, 1835400, 1835401, 1835402, + 1835425, 1835426, 1835427, 1835428, 1835456, 1835457, 1835458, + 1835459, 1835460, 1835461, 1835462, 1835463, 1835464, 1835465, + 1835466, 1835489, 1835490, 1835491, 1835520, 1835521, 1835522, + 1835523, 1835524, 1835525, 1835526, 1835527, 1835528, 1835529, + 1835530, 1835553, 1835554, 1835584, 1835585, 1835586, 1835587, + 1835588, 1835589, 1835590, 1835591, 1835592, 1835593, 1835650, + 1835651, 1835652, 1835653, 1835654, 1835655, 1835656, 1837121, + 1837122, 1837123, 1837124, 1837125, 1837126, 1837127, 1837128, + 1837154, 1837155, 1837156, 1837157, 1837158, 1837159, 1837160, + 1837161, 1837184, 1837185, 1837186, 1837187, 1837188, 1837189, + 1837190, 1837191, 1837192, 1837217, 1837218, 1837219, 1837220, + 1837221, 1837222, 1837223, 1837224, 1837225, 1837226, 1837248, + 1837249, 1837250, 1837251, 1837252, 1837253, 1837254, 1837255, + 1837281, 1837282, 1837283, 1837284, 1837285, 1837286, 1837287, + 1837288, 1837289, 1837290, 1837312, 1837313, 1837314, 1837315, + 1837316, 1837317, 1837318, 1837345, 1837346, 1837347, 1837348, + 1837349, 1837350, 1837351, 1837352, 1837353, 1837354, 1837376, + 1837377, 1837378, 1837379, 1837380, 1837381, 1837409, 1837410, + 1837411, 1837412, 1837413, 1837414, 1837415, 1837416, 1837417, + 1837418, 1837440, 1837441, 1837442, 1837443, 1837444, 1837473, + 1837474, 1837475, 1837476, 1837477, 1837478, 1837479, 1837480, + 1837481, 1837482, 1837504, 1837505, 1837506, 1837507, 1837537, + 1837538, 1837539, 1837540, 1837541, 1837542, 1837543, 1837544, + 1837545, 1837546, 1837568, 1837569, 1837570, 1837601, 1837602, + 1837603, 1837604, 1837605, 1837606, 1837607, 1837608, 1837609, + 1837610, 1837632, 1837665, 1837666, 1837667, 1837668, 1837669, + 1837670, 1837671, 1837672, 1837673, 1837730, 1837731, 1837732, + 1837733, 1837734, 1837735, 1837736, 2097154, 2097155, 2097156, + 2097157, 2097158, 2097159, 2097160, 2097186, 2097187, 2097188, + 2097189, 2097190, 2097191, 2097192, 2097218, 2097219, 2097220, + 2097221, 2097222, 2097223, 2097224, 2097225, 2097249, 2097250, + 2097251, 2097252, 2097253, 2097254, 2097255, 2097256, 2097280, + 2097281, 2097282, 2097283, 2097284, 2097285, 2097286, 2097287, + 2097288, 2097289, 2097313, 2097314, 2097315, 2097316, 2097317, + 2097318, 2097319, 2097344, 2097345, 2097346, 2097347, 2097348, + 2097349, 2097350, 2097351, 2097352, 2097353, 2097354, 2097377, + 2097378, 2097379, 2097380, 2097381, 2097382, 2097383, 2097408, + 2097409, 2097410, 2097411, 2097412, 2097413, 2097414, 2097415, + 2097416, 2097417, 2097418, 2097441, 2097442, 2097443, 2097444, + 2097445, 2097446, 2097472, 2097473, 2097474, 2097475, 2097476, + 2097477, 2097478, 2097479, 2097480, 2097481, 2097482, 2097505, + 2097506, 2097507, 2097508, 2097509, 2097536, 2097537, 2097538, + 2097539, 2097540, 2097541, 2097542, 2097543, 2097544, 2097545, + 2097546, 2097569, 2097570, 2097571, 2097572, 2097600, 2097601, + 2097602, 2097603, 2097604, 2097605, 2097606, 2097607, 2097608, + 2097609, 2097610, 2097633, 2097634, 2097635, 2097664, 2097665, + 2097666, 2097667, 2097668, 2097669, 2097670, 2097671, 2097672, + 2097673, 2097697, 2097729, 2097730, 2097731, 2097732, 2097733, + 2097734, 2097735, 2097736, 2097795, 2097796, 2097797, 2097798, + 2097799, 2099265, 2099266, 2099267, 2099268, 2099269, 2099270, + 2099271, 2099272, 2099298, 2099299, 2099300, 2099301, 2099302, + 2099303, 2099304, 2099305, 2099328, 2099329, 2099330, 2099331, + 2099332, 2099333, 2099334, 2099335, 2099361, 2099362, 2099363, + 2099364, 2099365, 2099366, 2099367, 2099368, 2099369, 2099392, + 2099393, 2099394, 2099395, 2099396, 2099397, 2099398, 2099399, + 2099425, 2099426, 2099427, 2099428, 2099429, 2099430, 2099431, + 2099432, 2099433, 2099434, 2099456, 2099457, 2099458, 2099459, + 2099460, 2099461, 2099462, 2099489, 2099490, 2099491, 2099492, + 2099493, 2099494, 2099495, 2099496, 2099497, 2099498, 2099520, + 2099521, 2099522, 2099523, 2099524, 2099525, 2099553, 2099554, + 2099555, 2099556, 2099557, 2099558, 2099559, 2099560, 2099561, + 2099562, 2099584, 2099585, 2099586, 2099587, 2099588, 2099617, + 2099618, 2099619, 2099620, 2099621, 2099622, 2099623, 2099624, + 2099625, 2099626, 2099648, 2099649, 2099650, 2099651, 2099681, + 2099682, 2099683, 2099684, 2099685, 2099686, 2099687, 2099688, + 2099689, 2099690, 2099712, 2099713, 2099745, 2099746, 2099747, + 2099748, 2099749, 2099750, 2099751, 2099752, 2099753, 2099809, + 2099810, 2099811, 2099812, 2099813, 2099814, 2099815, 2099816, + 2099875, 2099876, 2099877, 2099878, 2099879, 2359298, 2359299, + 2359300, 2359301, 2359302, 2359303, 2359304, 2359305, 2359330, + 2359331, 2359332, 2359333, 2359334, 2359335, 2359336, 2359337, + 2359362, 2359363, 2359364, 2359365, 2359366, 2359367, 2359368, + 2359369, 2359393, 2359394, 2359395, 2359396, 2359397, 2359398, + 2359399, 2359400, 2359424, 2359425, 2359426, 2359427, 2359428, + 2359429, 2359430, 2359431, 2359432, 2359433, 2359434, 2359457, + 2359458, 2359459, 2359460, 2359461, 2359462, 2359463, 2359464, + 2359488, 2359489, 2359490, 2359491, 2359492, 2359493, 2359494, + 2359495, 2359496, 2359497, 2359498, 2359521, 2359522, 2359523, + 2359524, 2359525, 2359526, 2359527, 2359552, 2359553, 2359554, + 2359555, 2359556, 2359557, 2359558, 2359559, 2359560, 2359561, + 2359562, 2359585, 2359586, 2359587, 2359588, 2359589, 2359590, + 2359616, 2359617, 2359618, 2359619, 2359620, 2359621, 2359622, + 2359623, 2359624, 2359625, 2359626, 2359649, 2359650, 2359651, + 2359652, 2359653, 2359680, 2359681, 2359682, 2359683, 2359684, + 2359685, 2359686, 2359687, 2359688, 2359689, 2359690, 2359713, + 2359714, 2359715, 2359716, 2359744, 2359745, 2359746, 2359747, + 2359748, 2359749, 2359750, 2359751, 2359752, 2359753, 2359754, + 2359777, 2359778, 2359779, 2359808, 2359809, 2359810, 2359811, + 2359812, 2359813, 2359814, 2359815, 2359816, 2359817, 2359818, + 2359841, 2359842, 2359872, 2359873, 2359874, 2359875, 2359876, + 2359877, 2359878, 2359879, 2359880, 2359881, 2359938, 2359939, + 2359940, 2359941, 2359942, 2359943, 2359944, 2361409, 2361410, + 2361411, 2361412, 2361413, 2361414, 2361415, 2361416, 2361442, + 2361443, 2361444, 2361445, 2361446, 2361447, 2361448, 2361449, + 2361472, 2361473, 2361474, 2361475, 2361476, 2361477, 2361478, + 2361479, 2361480, 2361505, 2361506, 2361507, 2361508, 2361509, + 2361510, 2361511, 2361512, 2361513, 2361514, 2361536, 2361537, + 2361538, 2361539, 2361540, 2361541, 2361542, 2361543, 2361569, + 2361570, 2361571, 2361572, 2361573, 2361574, 2361575, 2361576, + 2361577, 2361578, 2361600, 2361601, 2361602, 2361603, 2361604, + 2361605, 2361606, 2361633, 2361634, 2361635, 2361636, 2361637, + 2361638, 2361639, 2361640, 2361641, 2361642, 2361664, 2361665, + 2361666, 2361667, 2361668, 2361669, 2361697, 2361698, 2361699, + 2361700, 2361701, 2361702, 2361703, 2361704, 2361705, 2361706, + 2361728, 2361729, 2361730, 2361731, 2361732, 2361761, 2361762, + 2361763, 2361764, 2361765, 2361766, 2361767, 2361768, 2361769, + 2361770, 2361792, 2361793, 2361794, 2361795, 2361825, 2361826, + 2361827, 2361828, 2361829, 2361830, 2361831, 2361832, 2361833, + 2361834, 2361856, 2361857, 2361858, 2361889, 2361890, 2361891, + 2361892, 2361893, 2361894, 2361895, 2361896, 2361897, 2361898, + 2361920, 2361953, 2361954, 2361955, 2361956, 2361957, 2361958, + 2361959, 2361960, 2361961, 2362018, 2362019, 2362020, 2362021, + 2362022, 2362023, 2362024, 2621442, 2621443, 2621444, 2621445, + 2621446, 2621447, 2621448, 2621449, 2621474, 2621475, 2621476, + 2621477, 2621478, 2621479, 2621480, 2621481, 2621506, 2621507, + 2621508, 2621509, 2621510, 2621511, 2621512, 2621513, 2621537, + 2621538, 2621539, 2621540, 2621541, 2621542, 2621543, 2621544, + 2621568, 2621569, 2621570, 2621571, 2621572, 2621573, 2621574, + 2621575, 2621576, 2621577, 2621601, 2621602, 2621603, 2621604, + 2621605, 2621606, 2621607, 2621632, 2621633, 2621634, 2621635, + 2621636, 2621637, 2621638, 2621639, 2621640, 2621641, 2621642, + 2621665, 2621666, 2621667, 2621668, 2621669, 2621670, 2621671, + 2621696, 2621697, 2621698, 2621699, 2621700, 2621701, 2621702, + 2621703, 2621704, 2621705, 2621706, 2621729, 2621730, 2621731, + 2621732, 2621733, 2621734, 2621760, 2621761, 2621762, 2621763, + 2621764, 2621765, 2621766, 2621767, 2621768, 2621769, 2621770, + 2621793, 2621794, 2621795, 2621796, 2621797, 2621824, 2621825, + 2621826, 2621827, 2621828, 2621829, 2621830, 2621831, 2621832, + 2621833, 2621834, 2621857, 2621858, 2621859, 2621860, 2621888, + 2621889, 2621890, 2621891, 2621892, 2621893, 2621894, 2621895, + 2621896, 2621897, 2621898, 2621921, 2621922, 2621923, 2621952, + 2621953, 2621954, 2621955, 2621956, 2621957, 2621958, 2621959, + 2621960, 2621961, 2621985, 2622016, 2622017, 2622018, 2622019, + 2622020, 2622021, 2622022, 2622023, 2622024, 2622025, 2622083, + 2622084, 2622085, 2622086, 2622087, 2623553, 2623554, 2623555, + 2623556, 2623557, 2623558, 2623559, 2623560, 2623586, 2623587, + 2623588, 2623589, 2623590, 2623591, 2623592, 2623593, 2623616, + 2623617, 2623618, 2623619, 2623620, 2623621, 2623622, 2623623, + 2623649, 2623650, 2623651, 2623652, 2623653, 2623654, 2623655, + 2623656, 2623657, 2623680, 2623681, 2623682, 2623683, 2623684, + 2623685, 2623686, 2623687, 2623713, 2623714, 2623715, 2623716, + 2623717, 2623718, 2623719, 2623720, 2623721, 2623722, 2623744, + 2623745, 2623746, 2623747, 2623748, 2623749, 2623750, 2623777, + 2623778, 2623779, 2623780, 2623781, 2623782, 2623783, 2623784, + 2623785, 2623786, 2623808, 2623809, 2623810, 2623811, 2623812, + 2623813, 2623841, 2623842, 2623843, 2623844, 2623845, 2623846, + 2623847, 2623848, 2623849, 2623850, 2623872, 2623873, 2623874, + 2623875, 2623876, 2623905, 2623906, 2623907, 2623908, 2623909, + 2623910, 2623911, 2623912, 2623913, 2623914, 2623936, 2623937, + 2623938, 2623939, 2623969, 2623970, 2623971, 2623972, 2623973, + 2623974, 2623975, 2623976, 2623977, 2623978, 2624000, 2624001, + 2624033, 2624034, 2624035, 2624036, 2624037, 2624038, 2624039, + 2624040, 2624041, 2624064, 2624097, 2624098, 2624099, 2624100, + 2624101, 2624102, 2624103, 2624104, 2624105, 2624163, 2624164, + 2624165, 2624166, 2624167, 2883586, 2883587, 2883588, 2883589, + 2883590, 2883591, 2883592, 2883593, 2883618, 2883619, 2883620, + 2883621, 2883622, 2883623, 2883624, 2883625, 2883650, 2883651, + 2883652, 2883653, 2883654, 2883655, 2883656, 2883657, 2883681, + 2883682, 2883683, 2883684, 2883685, 2883686, 2883687, 2883688, + 2883712, 2883713, 2883714, 2883715, 2883716, 2883717, 2883718, + 2883719, 2883720, 2883721, 2883722, 2883745, 2883746, 2883747, + 2883748, 2883749, 2883750, 2883751, 2883752, 2883776, 2883777, + 2883778, 2883779, 2883780, 2883781, 2883782, 2883783, 2883784, + 2883785, 2883786, 2883809, 2883810, 2883811, 2883812, 2883813, + 2883814, 2883815, 2883840, 2883841, 2883842, 2883843, 2883844, + 2883845, 2883846, 2883847, 2883848, 2883849, 2883850, 2883873, + 2883874, 2883875, 2883876, 2883877, 2883878, 2883904, 2883905, + 2883906, 2883907, 2883908, 2883909, 2883910, 2883911, 2883912, + 2883913, 2883914, 2883937, 2883938, 2883939, 2883940, 2883941, + 2883968, 2883969, 2883970, 2883971, 2883972, 2883973, 2883974, + 2883975, 2883976, 2883977, 2883978, 2884001, 2884002, 2884003, + 2884004, 2884032, 2884033, 2884034, 2884035, 2884036, 2884037, + 2884038, 2884039, 2884040, 2884041, 2884042, 2884065, 2884066, + 2884067, 2884096, 2884097, 2884098, 2884099, 2884100, 2884101, + 2884102, 2884103, 2884104, 2884105, 2884106, 2884129, 2884130, + 2884160, 2884161, 2884162, 2884163, 2884164, 2884165, 2884166, + 2884167, 2884168, 2884169, 2884226, 2884227, 2884228, 2884229, + 2884230, 2884231, 2884232, 2885697, 2885698, 2885699, 2885700, + 2885701, 2885702, 2885703, 2885704, 2885730, 2885731, 2885732, + 2885733, 2885734, 2885735, 2885736, 2885737, 2885760, 2885761, + 2885762, 2885763, 2885764, 2885765, 2885766, 2885767, 2885768, + 2885793, 2885794, 2885795, 2885796, 2885797, 2885798, 2885799, + 2885800, 2885801, 2885802, 2885824, 2885825, 2885826, 2885827, + 2885828, 2885829, 2885830, 2885831, 2885857, 2885858, 2885859, + 2885860, 2885861, 2885862, 2885863, 2885864, 2885865, 2885866, + 2885888, 2885889, 2885890, 2885891, 2885892, 2885893, 2885894, + 2885921, 2885922, 2885923, 2885924, 2885925, 2885926, 2885927, + 2885928, 2885929, 2885930, 2885952, 2885953, 2885954, 2885955, + 2885956, 2885957, 2885985, 2885986, 2885987, 2885988, 2885989, + 2885990, 2885991, 2885992, 2885993, 2885994, 2886016, 2886017, + 2886018, 2886019, 2886020, 2886049, 2886050, 2886051, 2886052, + 2886053, 2886054, 2886055, 2886056, 2886057, 2886058, 2886080, + 2886081, 2886082, 2886083, 2886113, 2886114, 2886115, 2886116, + 2886117, 2886118, 2886119, 2886120, 2886121, 2886122, 2886144, + 2886145, 2886146, 2886177, 2886178, 2886179, 2886180, 2886181, + 2886182, 2886183, 2886184, 2886185, 2886186, 2886208, 2886241, + 2886242, 2886243, 2886244, 2886245, 2886246, 2886247, 2886248, + 2886249, 2886306, 2886307, 2886308, 2886309, 2886310, 2886311, + 2886312, 3145730, 3145731, 3145732, 3145733, 3145734, 3145735, + 3145736, 3145737, 3145762, 3145763, 3145764, 3145765, 3145766, + 3145767, 3145768, 3145769, 3145794, 3145795, 3145796, 3145797, + 3145798, 3145799, 3145800, 3145801, 3145825, 3145826, 3145827, + 3145828, 3145829, 3145830, 3145831, 3145832, 3145856, 3145857, + 3145858, 3145859, 3145860, 3145861, 3145862, 3145863, 3145864, + 3145865, 3145889, 3145890, 3145891, 3145892, 3145893, 3145894, + 3145895, 3145920, 3145921, 3145922, 3145923, 3145924, 3145925, + 3145926, 3145927, 3145928, 3145929, 3145930, 3145953, 3145954, + 3145955, 3145956, 3145957, 3145958, 3145959, 3145984, 3145985, + 3145986, 3145987, 3145988, 3145989, 3145990, 3145991, 3145992, + 3145993, 3145994, 3146017, 3146018, 3146019, 3146020, 3146021, + 3146022, 3146048, 3146049, 3146050, 3146051, 3146052, 3146053, + 3146054, 3146055, 3146056, 3146057, 3146058, 3146081, 3146082, + 3146083, 3146084, 3146085, 3146112, 3146113, 3146114, 3146115, + 3146116, 3146117, 3146118, 3146119, 3146120, 3146121, 3146122, + 3146145, 3146146, 3146147, 3146148, 3146176, 3146177, 3146178, + 3146179, 3146180, 3146181, 3146182, 3146183, 3146184, 3146185, + 3146186, 3146209, 3146210, 3146211, 3146240, 3146241, 3146242, + 3146243, 3146244, 3146245, 3146246, 3146247, 3146248, 3146249, + 3146273, 3146304, 3146305, 3146306, 3146307, 3146308, 3146309, + 3146310, 3146311, 3146312, 3146313, 3146371, 3146372, 3146373, + 3146374, 3146375, 3147841, 3147842, 3147843, 3147844, 3147845, + 3147846, 3147847, 3147848, 3147874, 3147875, 3147876, 3147877, + 3147878, 3147879, 3147880, 3147881, 3147904, 3147905, 3147906, + 3147907, 3147908, 3147909, 3147910, 3147911, 3147937, 3147938, + 3147939, 3147940, 3147941, 3147942, 3147943, 3147944, 3147945, + 3147968, 3147969, 3147970, 3147971, 3147972, 3147973, 3147974, + 3147975, 3148001, 3148002, 3148003, 3148004, 3148005, 3148006, + 3148007, 3148008, 3148009, 3148010, 3148032, 3148033, 3148034, + 3148035, 3148036, 3148037, 3148038, 3148065, 3148066, 3148067, + 3148068, 3148069, 3148070, 3148071, 3148072, 3148073, 3148074, + 3148096, 3148097, 3148098, 3148099, 3148100, 3148101, 3148129, + 3148130, 3148131, 3148132, 3148133, 3148134, 3148135, 3148136, + 3148137, 3148138, 3148160, 3148161, 3148162, 3148163, 3148164, + 3148193, 3148194, 3148195, 3148196, 3148197, 3148198, 3148199, + 3148200, 3148201, 3148202, 3148224, 3148225, 3148226, 3148227, + 3148257, 3148258, 3148259, 3148260, 3148261, 3148262, 3148263, + 3148264, 3148265, 3148266, 3148288, 3148289, 3148321, 3148322, + 3148323, 3148324, 3148325, 3148326, 3148327, 3148328, 3148329, + 3148352, 3148385, 3148386, 3148387, 3148388, 3148389, 3148390, + 3148391, 3148392, 3148393, 3148451, 3148452, 3148453, 3148454, + 3148455, 3407874, 3407875, 3407876, 3407877, 3407878, 3407879, + 3407880, 3407881, 3407906, 3407907, 3407908, 3407909, 3407910, + 3407911, 3407912, 3407913, 3407938, 3407939, 3407940, 3407941, + 3407942, 3407943, 3407944, 3407945, 3407969, 3407970, 3407971, + 3407972, 3407973, 3407974, 3407975, 3407976, 3408000, 3408001, + 3408002, 3408003, 3408004, 3408005, 3408006, 3408007, 3408008, + 3408009, 3408010, 3408033, 3408034, 3408035, 3408036, 3408037, + 3408038, 3408039, 3408040, 3408064, 3408065, 3408066, 3408067, + 3408068, 3408069, 3408070, 3408071, 3408072, 3408073, 3408074, + 3408097, 3408098, 3408099, 3408100, 3408101, 3408102, 3408103, + 3408128, 3408129, 3408130, 3408131, 3408132, 3408133, 3408134, + 3408135, 3408136, 3408137, 3408138, 3408161, 3408162, 3408163, + 3408164, 3408165, 3408166, 3408192, 3408193, 3408194, 3408195, + 3408196, 3408197, 3408198, 3408199, 3408200, 3408201, 3408202, + 3408225, 3408226, 3408227, 3408228, 3408229, 3408256, 3408257, + 3408258, 3408259, 3408260, 3408261, 3408262, 3408263, 3408264, + 3408265, 3408266, 3408289, 3408290, 3408291, 3408292, 3408320, + 3408321, 3408322, 3408323, 3408324, 3408325, 3408326, 3408327, + 3408328, 3408329, 3408330, 3408353, 3408354, 3408355, 3408384, + 3408385, 3408386, 3408387, 3408388, 3408389, 3408390, 3408391, + 3408392, 3408393, 3408394, 3408417, 3408418, 3408448, 3408449, + 3408450, 3408451, 3408452, 3408453, 3408454, 3408455, 3408456, + 3408457, 3408514, 3408515, 3408516, 3408517, 3408518, 3408519, + 3408520, 3409985, 3409986, 3409987, 3409988, 3409989, 3409990, + 3409991, 3409992, 3410018, 3410019, 3410020, 3410021, 3410022, + 3410023, 3410024, 3410025, 3410048, 3410049, 3410050, 3410051, + 3410052, 3410053, 3410054, 3410055, 3410056, 3410081, 3410082, + 3410083, 3410084, 3410085, 3410086, 3410087, 3410088, 3410089, + 3410090, 3410112, 3410113, 3410114, 3410115, 3410116, 3410117, + 3410118, 3410119, 3410145, 3410146, 3410147, 3410148, 3410149, + 3410150, 3410151, 3410152, 3410153, 3410154, 3410176, 3410177, + 3410178, 3410179, 3410180, 3410181, 3410182, 3410209, 3410210, + 3410211, 3410212, 3410213, 3410214, 3410215, 3410216, 3410217, + 3410218, 3410240, 3410241, 3410242, 3410243, 3410244, 3410245, + 3410273, 3410274, 3410275, 3410276, 3410277, 3410278, 3410279, + 3410280, 3410281, 3410282, 3410304, 3410305, 3410306, 3410307, + 3410308, 3410337, 3410338, 3410339, 3410340, 3410341, 3410342, + 3410343, 3410344, 3410345, 3410346, 3410368, 3410369, 3410370, + 3410371, 3410401, 3410402, 3410403, 3410404, 3410405, 3410406, + 3410407, 3410408, 3410409, 3410410, 3410432, 3410433, 3410434, + 3410465, 3410466, 3410467, 3410468, 3410469, 3410470, 3410471, + 3410472, 3410473, 3410474, 3410496, 3410529, 3410530, 3410531, + 3410532, 3410533, 3410534, 3410535, 3410536, 3410537, 3410594, + 3410595, 3410596, 3410597, 3410598, 3410599, 3410600, 3670018, + 3670019, 3670020, 3670021, 3670022, 3670023, 3670024, 3670025, + 3670050, 3670051, 3670052, 3670053, 3670054, 3670055, 3670056, + 3670057, 3670082, 3670083, 3670084, 3670085, 3670086, 3670087, + 3670088, 3670089, 3670113, 3670114, 3670115, 3670116, 3670117, + 3670118, 3670119, 3670120, 3670144, 3670145, 3670146, 3670147, + 3670148, 3670149, 3670150, 3670151, 3670152, 3670153, 3670154, + 3670177, 3670178, 3670179, 3670180, 3670181, 3670182, 3670183, + 3670184, 3670208, 3670209, 3670210, 3670211, 3670212, 3670213, + 3670214, 3670215, 3670216, 3670217, 3670218, 3670241, 3670242, + 3670243, 3670244, 3670245, 3670246, 3670247, 3670272, 3670273, + 3670274, 3670275, 3670276, 3670277, 3670278, 3670279, 3670280, + 3670281, 3670282, 3670305, 3670306, 3670307, 3670308, 3670309, + 3670310, 3670336, 3670337, 3670338, 3670339, 3670340, 3670341, + 3670342, 3670343, 3670344, 3670345, 3670346, 3670369, 3670370, + 3670371, 3670372, 3670373, 3670400, 3670401, 3670402, 3670403, + 3670404, 3670405, 3670406, 3670407, 3670408, 3670409, 3670410, + 3670433, 3670434, 3670435, 3670436, 3670464, 3670465, 3670466, + 3670467, 3670468, 3670469, 3670470, 3670471, 3670472, 3670473, + 3670474, 3670497, 3670498, 3670499, 3670528, 3670529, 3670530, + 3670531, 3670532, 3670533, 3670534, 3670535, 3670536, 3670537, + 3670538, 3670561, 3670562, 3670592, 3670593, 3670594, 3670595, + 3670596, 3670597, 3670598, 3670599, 3670600, 3670601, 3670658, + 3670659, 3670660, 3670661, 3670662, 3670663, 3670664, 3672129, + 3672130, 3672131, 3672132, 3672133, 3672134, 3672135, 3672136, + 3672162, 3672163, 3672164, 3672165, 3672166, 3672167, 3672168, + 3672169, 3672192, 3672193, 3672194, 3672195, 3672196, 3672197, + 3672198, 3672199, 3672200, 3672225, 3672226, 3672227, 3672228, + 3672229, 3672230, 3672231, 3672232, 3672233, 3672234, 3672256, + 3672257, 3672258, 3672259, 3672260, 3672261, 3672262, 3672263, + 3672289, 3672290, 3672291, 3672292, 3672293, 3672294, 3672295, + 3672296, 3672297, 3672298, 3672320, 3672321, 3672322, 3672323, + 3672324, 3672325, 3672326, 3672353, 3672354, 3672355, 3672356, + 3672357, 3672358, 3672359, 3672360, 3672361, 3672362, 3672384, + 3672385, 3672386, 3672387, 3672388, 3672389, 3672417, 3672418, + 3672419, 3672420, 3672421, 3672422, 3672423, 3672424, 3672425, + 3672426, 3672448, 3672449, 3672450, 3672451, 3672452, 3672481, + 3672482, 3672483, 3672484, 3672485, 3672486, 3672487, 3672488, + 3672489, 3672490, 3672512, 3672513, 3672514, 3672515, 3672545, + 3672546, 3672547, 3672548, 3672549, 3672550, 3672551, 3672552, + 3672553, 3672554, 3672576, 3672577, 3672578, 3672609, 3672610, + 3672611, 3672612, 3672613, 3672614, 3672615, 3672616, 3672617, + 3672618, 3672640, 3672673, 3672674, 3672675, 3672676, 3672677, + 3672678, 3672679, 3672680, 3672681, 3672738, 3672739, 3672740, + 3672741, 3672742, 3672743, 3672744, 3932162, 3932163, 3932164, + 3932165, 3932166, 3932167, 3932168, 3932169, 3932194, 3932195, + 3932196, 3932197, 3932198, 3932199, 3932200, 3932201, 3932226, + 3932227, 3932228, 3932229, 3932230, 3932231, 3932232, 3932233, + 3932257, 3932258, 3932259, 3932260, 3932261, 3932262, 3932263, + 3932264, 3932288, 3932289, 3932290, 3932291, 3932292, 3932293, + 3932294, 3932295, 3932296, 3932297, 3932298, 3932321, 3932322, + 3932323, 3932324, 3932325, 3932326, 3932327, 3932328, 3932352, + 3932353, 3932354, 3932355, 3932356, 3932357, 3932358, 3932359, + 3932360, 3932361, 3932362, 3932385, 3932386, 3932387, 3932388, + 3932389, 3932390, 3932391, 3932416, 3932417, 3932418, 3932419, + 3932420, 3932421, 3932422, 3932423, 3932424, 3932425, 3932426, + 3932427, 3932449, 3932450, 3932451, 3932452, 3932453, 3932454, + 3932455, 3932480, 3932481, 3932482, 3932483, 3932484, 3932485, + 3932486, 3932487, 3932488, 3932489, 3932490, 3932513, 3932514, + 3932515, 3932516, 3932517, 3932544, 3932545, 3932546, 3932547, + 3932548, 3932549, 3932550, 3932551, 3932552, 3932553, 3932554, + 3932577, 3932578, 3932579, 3932580, 3932608, 3932609, 3932610, + 3932611, 3932612, 3932613, 3932614, 3932615, 3932616, 3932617, + 3932618, 3932619, 3932641, 3932642, 3932643, 3932644, 3932672, + 3932673, 3932674, 3932675, 3932676, 3932677, 3932678, 3932679, + 3932680, 3932681, 3932682, 3932705, 3932706, 3932736, 3932737, + 3932738, 3932739, 3932740, 3932741, 3932742, 3932743, 3932744, + 3932745, 3932802, 3932803, 3932804, 3932805, 3932806, 3932807, + 3932808, 3932868, 3932871, 3934273, 3934274, 3934275, 3934276, + 3934277, 3934278, 3934279, 3934280, 3934306, 3934307, 3934308, + 3934309, 3934310, 3934311, 3934312, 3934313, 3934336, 3934337, + 3934338, 3934339, 3934340, 3934341, 3934342, 3934343, 3934344, + 3934369, 3934370, 3934371, 3934372, 3934373, 3934374, 3934375, + 3934376, 3934377, 3934378, 3934400, 3934401, 3934402, 3934403, + 3934404, 3934405, 3934406, 3934407, 3934433, 3934434, 3934435, + 3934436, 3934437, 3934438, 3934439, 3934440, 3934441, 3934442, + 3934464, 3934465, 3934466, 3934467, 3934468, 3934469, 3934470, + 3934471, 3934497, 3934498, 3934499, 3934500, 3934501, 3934502, + 3934503, 3934504, 3934505, 3934506, 3934507, 3934528, 3934529, + 3934530, 3934531, 3934532, 3934533, 3934561, 3934562, 3934563, + 3934564, 3934565, 3934566, 3934567, 3934568, 3934569, 3934570, + 3934592, 3934593, 3934594, 3934595, 3934596, 3934625, 3934626, + 3934627, 3934628, 3934629, 3934630, 3934631, 3934632, 3934633, + 3934634, 3934656, 3934657, 3934658, 3934659, 3934660, 3934689, + 3934690, 3934691, 3934692, 3934693, 3934694, 3934695, 3934696, + 3934697, 3934698, 3934699, 3934720, 3934721, 3934722, 3934753, + 3934754, 3934755, 3934756, 3934757, 3934758, 3934759, 3934760, + 3934761, 3934762, 3934784, 3934817, 3934818, 3934819, 3934820, + 3934821, 3934822, 3934823, 3934824, 3934825, 3934882, 3934883, + 3934884, 3934885, 3934886, 3934887, 3934888, 3934948, 3934951, + 4194306, 4194307, 4194308, 4194309, 4194310, 4194311, 4194312, + 4194313, 4194338, 4194339, 4194340, 4194341, 4194342, 4194343, + 4194344, 4194345, 4194370, 4194371, 4194372, 4194373, 4194374, + 4194375, 4194376, 4194377, 4194401, 4194402, 4194403, 4194404, + 4194405, 4194406, 4194407, 4194408, 4194432, 4194433, 4194434, + 4194435, 4194436, 4194437, 4194438, 4194439, 4194440, 4194441, + 4194442, 4194465, 4194466, 4194467, 4194468, 4194469, 4194470, + 4194471, 4194472, 4194496, 4194497, 4194498, 4194499, 4194500, + 4194501, 4194502, 4194503, 4194504, 4194505, 4194506, 4194529, + 4194530, 4194531, 4194532, 4194533, 4194534, 4194535, 4194560, + 4194561, 4194562, 4194563, 4194564, 4194565, 4194566, 4194567, + 4194568, 4194569, 4194570, 4194593, 4194594, 4194595, 4194596, + 4194597, 4194598, 4194624, 4194625, 4194626, 4194627, 4194628, + 4194629, 4194630, 4194631, 4194632, 4194633, 4194634, 4194657, + 4194658, 4194659, 4194660, 4194661, 4194688, 4194689, 4194690, + 4194691, 4194692, 4194693, 4194694, 4194695, 4194696, 4194697, + 4194698, 4194721, 4194722, 4194723, 4194724, 4194752, 4194753, + 4194754, 4194755, 4194756, 4194757, 4194758, 4194759, 4194760, + 4194761, 4194762, 4194785, 4194786, 4194787, 4194816, 4194817, + 4194818, 4194819, 4194820, 4194821, 4194822, 4194823, 4194824, + 4194825, 4194826, 4194849, 4194850, 4194880, 4194881, 4194882, + 4194883, 4194884, 4194885, 4194886, 4194887, 4194888, 4194889, + 4194946, 4194947, 4194948, 4194949, 4194950, 4194951, 4194952, + 4196417, 4196418, 4196419, 4196420, 4196421, 4196422, 4196423, + 4196424, 4196450, 4196451, 4196452, 4196453, 4196454, 4196455, + 4196456, 4196457, 4196480, 4196481, 4196482, 4196483, 4196484, + 4196485, 4196486, 4196487, 4196488, 4196513, 4196514, 4196515, + 4196516, 4196517, 4196518, 4196519, 4196520, 4196521, 4196522, + 4196544, 4196545, 4196546, 4196547, 4196548, 4196549, 4196550, + 4196551, 4196577, 4196578, 4196579, 4196580, 4196581, 4196582, + 4196583, 4196584, 4196585, 4196586, 4196608, 4196609, 4196610, + 4196611, 4196612, 4196613, 4196614, 4196641, 4196642, 4196643, + 4196644, 4196645, 4196646, 4196647, 4196648, 4196649, 4196650, + 4196672, 4196673, 4196674, 4196675, 4196676, 4196677, 4196705, + 4196706, 4196707, 4196708, 4196709, 4196710, 4196711, 4196712, + 4196713, 4196714, 4196736, 4196737, 4196738, 4196739, 4196740, + 4196769, 4196770, 4196771, 4196772, 4196773, 4196774, 4196775, + 4196776, 4196777, 4196778, 4196800, 4196801, 4196802, 4196803, + 4196833, 4196834, 4196835, 4196836, 4196837, 4196838, 4196839, + 4196840, 4196841, 4196842, 4196864, 4196865, 4196866, 4196897, + 4196898, 4196899, 4196900, 4196901, 4196902, 4196903, 4196904, + 4196905, 4196906, 4196928, 4196961, 4196962, 4196963, 4196964, + 4196965, 4196966, 4196967, 4196968, 4196969, 4197026, 4197027, + 4197028, 4197029, 4197030, 4197031, 4197032, 4456450, 4456451, + 4456452, 4456453, 4456454, 4456455, 4456456, 4456457, 4456482, + 4456483, 4456484, 4456485, 4456486, 4456487, 4456488, 4456489, + 4456514, 4456515, 4456516, 4456517, 4456518, 4456519, 4456520, + 4456521, 4456545, 4456546, 4456547, 4456548, 4456549, 4456550, + 4456551, 4456552, 4456576, 4456577, 4456578, 4456579, 4456580, + 4456581, 4456582, 4456583, 4456584, 4456585, 4456586, 4456609, + 4456610, 4456611, 4456612, 4456613, 4456614, 4456615, 4456616, + 4456640, 4456641, 4456642, 4456643, 4456644, 4456645, 4456646, + 4456647, 4456648, 4456649, 4456650, 4456673, 4456674, 4456675, + 4456676, 4456677, 4456678, 4456679, 4456704, 4456705, 4456706, + 4456707, 4456708, 4456709, 4456710, 4456711, 4456712, 4456713, + 4456714, 4456715, 4456737, 4456738, 4456739, 4456740, 4456741, + 4456742, 4456743, 4456768, 4456769, 4456770, 4456771, 4456772, + 4456773, 4456774, 4456775, 4456776, 4456777, 4456778, 4456801, + 4456802, 4456803, 4456804, 4456805, 4456832, 4456833, 4456834, + 4456835, 4456836, 4456837, 4456838, 4456839, 4456840, 4456841, + 4456842, 4456865, 4456866, 4456867, 4456868, 4456896, 4456897, + 4456898, 4456899, 4456900, 4456901, 4456902, 4456903, 4456904, + 4456905, 4456906, 4456907, 4456929, 4456930, 4456931, 4456932, + 4456960, 4456961, 4456962, 4456963, 4456964, 4456965, 4456966, + 4456967, 4456968, 4456969, 4456970, 4456993, 4456994, 4457024, + 4457025, 4457026, 4457027, 4457028, 4457029, 4457030, 4457031, + 4457032, 4457033, 4457090, 4457091, 4457092, 4457093, 4457094, + 4457095, 4457096, 4457156, 4457159, 4458561, 4458562, 4458563, + 4458564, 4458565, 4458566, 4458567, 4458568, 4458594, 4458595, + 4458596, 4458597, 4458598, 4458599, 4458600, 4458601, 4458624, + 4458625, 4458626, 4458627, 4458628, 4458629, 4458630, 4458631, + 4458632, 4458657, 4458658, 4458659, 4458660, 4458661, 4458662, + 4458663, 4458664, 4458665, 4458666, 4458688, 4458689, 4458690, + 4458691, 4458692, 4458693, 4458694, 4458695, 4458721, 4458722, + 4458723, 4458724, 4458725, 4458726, 4458727, 4458728, 4458729, + 4458730, 4458752, 4458753, 4458754, 4458755, 4458756, 4458757, + 4458758, 4458759, 4458785, 4458786, 4458787, 4458788, 4458789, + 4458790, 4458791, 4458792, 4458793, 4458794, 4458795, 4458816, + 4458817, 4458818, 4458819, 4458820, 4458821, 4458849, 4458850, + 4458851, 4458852, 4458853, 4458854, 4458855, 4458856, 4458857, + 4458858, 4458880, 4458881, 4458882, 4458883, 4458884, 4458913, + 4458914, 4458915, 4458916, 4458917, 4458918, 4458919, 4458920, + 4458921, 4458922, 4458944, 4458945, 4458946, 4458947, 4458948, + 4458977, 4458978, 4458979, 4458980, 4458981, 4458982, 4458983, + 4458984, 4458985, 4458986, 4458987, 4459008, 4459009, 4459010, + 4459041, 4459042, 4459043, 4459044, 4459045, 4459046, 4459047, + 4459048, 4459049, 4459050, 4459072, 4459105, 4459106, 4459107, + 4459108, 4459109, 4459110, 4459111, 4459112, 4459113, 4459170, + 4459171, 4459172, 4459173, 4459174, 4459175, 4459176, 4459236, + 4459239, 4718594, 4718595, 4718596, 4718597, 4718598, 4718599, + 4718600, 4718601, 4718626, 4718627, 4718628, 4718629, 4718630, + 4718631, 4718632, 4718633, 4718658, 4718659, 4718660, 4718661, + 4718662, 4718663, 4718664, 4718665, 4718689, 4718690, 4718691, + 4718692, 4718693, 4718694, 4718695, 4718696, 4718720, 4718721, + 4718722, 4718723, 4718724, 4718725, 4718726, 4718727, 4718728, + 4718729, 4718730, 4718753, 4718754, 4718755, 4718756, 4718757, + 4718758, 4718759, 4718760, 4718784, 4718785, 4718786, 4718787, + 4718788, 4718789, 4718790, 4718791, 4718792, 4718793, 4718794, + 4718817, 4718818, 4718819, 4718820, 4718821, 4718822, 4718823, + 4718848, 4718849, 4718850, 4718851, 4718852, 4718853, 4718854, + 4718855, 4718856, 4718857, 4718858, 4718881, 4718882, 4718883, + 4718884, 4718885, 4718886, 4718912, 4718913, 4718914, 4718915, + 4718916, 4718917, 4718918, 4718919, 4718920, 4718921, 4718922, + 4718945, 4718946, 4718947, 4718948, 4718949, 4718976, 4718977, + 4718978, 4718979, 4718980, 4718981, 4718982, 4718983, 4718984, + 4718985, 4718986, 4719009, 4719010, 4719011, 4719012, 4719040, + 4719041, 4719042, 4719043, 4719044, 4719045, 4719046, 4719047, + 4719048, 4719049, 4719050, 4719073, 4719074, 4719075, 4719104, + 4719105, 4719106, 4719107, 4719108, 4719109, 4719110, 4719111, + 4719112, 4719113, 4719114, 4719137, 4719138, 4719168, 4719169, + 4719170, 4719171, 4719172, 4719173, 4719174, 4719175, 4719176, + 4719177, 4719234, 4719235, 4719236, 4719237, 4719238, 4719239, + 4719240, 4720705, 4720706, 4720707, 4720708, 4720709, 4720710, + 4720711, 4720712, 4720738, 4720739, 4720740, 4720741, 4720742, + 4720743, 4720744, 4720745, 4720768, 4720769, 4720770, 4720771, + 4720772, 4720773, 4720774, 4720775, 4720776, 4720801, 4720802, + 4720803, 4720804, 4720805, 4720806, 4720807, 4720808, 4720809, + 4720810, 4720832, 4720833, 4720834, 4720835, 4720836, 4720837, + 4720838, 4720839, 4720865, 4720866, 4720867, 4720868, 4720869, + 4720870, 4720871, 4720872, 4720873, 4720874, 4720896, 4720897, + 4720898, 4720899, 4720900, 4720901, 4720902, 4720929, 4720930, + 4720931, 4720932, 4720933, 4720934, 4720935, 4720936, 4720937, + 4720938, 4720960, 4720961, 4720962, 4720963, 4720964, 4720965, + 4720993, 4720994, 4720995, 4720996, 4720997, 4720998, 4720999, + 4721000, 4721001, 4721002, 4721024, 4721025, 4721026, 4721027, + 4721028, 4721057, 4721058, 4721059, 4721060, 4721061, 4721062, + 4721063, 4721064, 4721065, 4721066, 4721088, 4721089, 4721090, + 4721091, 4721121, 4721122, 4721123, 4721124, 4721125, 4721126, + 4721127, 4721128, 4721129, 4721130, 4721152, 4721153, 4721154, + 4721185, 4721186, 4721187, 4721188, 4721189, 4721190, 4721191, + 4721192, 4721193, 4721194, 4721216, 4721249, 4721250, 4721251, + 4721252, 4721253, 4721254, 4721255, 4721256, 4721257, 4721314, + 4721315, 4721316, 4721317, 4721318, 4721319, 4721320, 4980738, + 4980739, 4980740, 4980741, 4980742, 4980743, 4980744, 4980745, + 4980770, 4980771, 4980772, 4980773, 4980774, 4980775, 4980776, + 4980777, 4980802, 4980803, 4980804, 4980805, 4980806, 4980807, + 4980808, 4980809, 4980810, 4980833, 4980834, 4980835, 4980836, + 4980837, 4980838, 4980839, 4980840, 4980864, 4980865, 4980866, + 4980867, 4980868, 4980869, 4980870, 4980871, 4980872, 4980873, + 4980874, 4980897, 4980898, 4980899, 4980900, 4980901, 4980902, + 4980903, 4980904, 4980928, 4980929, 4980930, 4980931, 4980932, + 4980933, 4980934, 4980935, 4980936, 4980937, 4980938, 4980961, + 4980962, 4980963, 4980964, 4980965, 4980966, 4980967, 4980992, + 4980993, 4980994, 4980995, 4980996, 4980997, 4980998, 4980999, + 4981000, 4981001, 4981002, 4981003, 4981025, 4981026, 4981027, + 4981028, 4981029, 4981030, 4981031, 4981056, 4981057, 4981058, + 4981059, 4981060, 4981061, 4981062, 4981063, 4981064, 4981065, + 4981066, 4981089, 4981090, 4981091, 4981092, 4981093, 4981120, + 4981121, 4981122, 4981123, 4981124, 4981125, 4981126, 4981127, + 4981128, 4981129, 4981130, 4981153, 4981154, 4981155, 4981156, + 4981184, 4981185, 4981186, 4981187, 4981188, 4981189, 4981190, + 4981191, 4981192, 4981193, 4981194, 4981195, 4981217, 4981218, + 4981219, 4981220, 4981248, 4981249, 4981250, 4981251, 4981252, + 4981253, 4981254, 4981255, 4981256, 4981257, 4981258, 4981281, + 4981282, 4981312, 4981313, 4981314, 4981315, 4981316, 4981317, + 4981318, 4981319, 4981320, 4981321, 4981345, 4981378, 4981379, + 4981380, 4981381, 4981382, 4981383, 4981384, 4981385, 4981444, + 4981447, 4982849, 4982850, 4982851, 4982852, 4982853, 4982854, + 4982855, 4982856, 4982882, 4982883, 4982884, 4982885, 4982886, + 4982887, 4982888, 4982889, 4982890, 4982912, 4982913, 4982914, + 4982915, 4982916, 4982917, 4982918, 4982919, 4982920, 4982945, + 4982946, 4982947, 4982948, 4982949, 4982950, 4982951, 4982952, + 4982953, 4982954, 4982976, 4982977, 4982978, 4982979, 4982980, + 4982981, 4982982, 4982983, 4983009, 4983010, 4983011, 4983012, + 4983013, 4983014, 4983015, 4983016, 4983017, 4983018, 4983040, + 4983041, 4983042, 4983043, 4983044, 4983045, 4983046, 4983047, + 4983073, 4983074, 4983075, 4983076, 4983077, 4983078, 4983079, + 4983080, 4983081, 4983082, 4983083, 4983104, 4983105, 4983106, + 4983107, 4983108, 4983109, 4983137, 4983138, 4983139, 4983140, + 4983141, 4983142, 4983143, 4983144, 4983145, 4983146, 4983168, + 4983169, 4983170, 4983171, 4983172, 4983201, 4983202, 4983203, + 4983204, 4983205, 4983206, 4983207, 4983208, 4983209, 4983210, + 4983232, 4983233, 4983234, 4983235, 4983236, 4983265, 4983266, + 4983267, 4983268, 4983269, 4983270, 4983271, 4983272, 4983273, + 4983274, 4983275, 4983296, 4983297, 4983298, 4983329, 4983330, + 4983331, 4983332, 4983333, 4983334, 4983335, 4983336, 4983337, + 4983338, 4983360, 4983361, 4983393, 4983394, 4983395, 4983396, + 4983397, 4983398, 4983399, 4983400, 4983401, 4983458, 4983459, + 4983460, 4983461, 4983462, 4983463, 4983464, 4983465, 4983524, + 4983527, 5242882, 5242883, 5242884, 5242885, 5242886, 5242887, + 5242888, 5242889, 5242914, 5242915, 5242916, 5242917, 5242918, + 5242919, 5242920, 5242921, 5242946, 5242947, 5242948, 5242949, + 5242950, 5242951, 5242952, 5242953, 5242977, 5242978, 5242979, + 5242980, 5242981, 5242982, 5242983, 5242984, 5243008, 5243009, + 5243010, 5243011, 5243012, 5243013, 5243014, 5243015, 5243016, + 5243017, 5243018, 5243041, 5243042, 5243043, 5243044, 5243045, + 5243046, 5243047, 5243048, 5243072, 5243073, 5243074, 5243075, + 5243076, 5243077, 5243078, 5243079, 5243080, 5243081, 5243082, + 5243105, 5243106, 5243107, 5243108, 5243109, 5243110, 5243111, + 5243136, 5243137, 5243138, 5243139, 5243140, 5243141, 5243142, + 5243143, 5243144, 5243145, 5243146, 5243169, 5243170, 5243171, + 5243172, 5243173, 5243174, 5243200, 5243201, 5243202, 5243203, + 5243204, 5243205, 5243206, 5243207, 5243208, 5243209, 5243210, + 5243233, 5243234, 5243235, 5243236, 5243237, 5243264, 5243265, + 5243266, 5243267, 5243268, 5243269, 5243270, 5243271, 5243272, + 5243273, 5243274, 5243297, 5243298, 5243299, 5243300, 5243328, + 5243329, 5243330, 5243331, 5243332, 5243333, 5243334, 5243335, + 5243336, 5243337, 5243338, 5243361, 5243362, 5243363, 5243392, + 5243393, 5243394, 5243395, 5243396, 5243397, 5243398, 5243399, + 5243400, 5243401, 5243402, 5243425, 5243426, 5243456, 5243457, + 5243458, 5243459, 5243460, 5243461, 5243462, 5243463, 5243464, + 5243465, 5243522, 5243523, 5243524, 5243525, 5243526, 5243527, + 5243528, 5244993, 5244994, 5244995, 5244996, 5244997, 5244998, + 5244999, 5245000, 5245026, 5245027, 5245028, 5245029, 5245030, + 5245031, 5245032, 5245033, 5245056, 5245057, 5245058, 5245059, + 5245060, 5245061, 5245062, 5245063, 5245064, 5245089, 5245090, + 5245091, 5245092, 5245093, 5245094, 5245095, 5245096, 5245097, + 5245098, 5245120, 5245121, 5245122, 5245123, 5245124, 5245125, + 5245126, 5245127, 5245153, 5245154, 5245155, 5245156, 5245157, + 5245158, 5245159, 5245160, 5245161, 5245162, 5245184, 5245185, + 5245186, 5245187, 5245188, 5245189, 5245190, 5245217, 5245218, + 5245219, 5245220, 5245221, 5245222, 5245223, 5245224, 5245225, + 5245226, 5245248, 5245249, 5245250, 5245251, 5245252, 5245253, + 5245281, 5245282, 5245283, 5245284, 5245285, 5245286, 5245287, + 5245288, 5245289, 5245290, 5245312, 5245313, 5245314, 5245315, + 5245316, 5245345, 5245346, 5245347, 5245348, 5245349, 5245350, + 5245351, 5245352, 5245353, 5245354, 5245376, 5245377, 5245378, + 5245379, 5245409, 5245410, 5245411, 5245412, 5245413, 5245414, + 5245415, 5245416, 5245417, 5245418, 5245440, 5245441, 5245442, + 5245473, 5245474, 5245475, 5245476, 5245477, 5245478, 5245479, + 5245480, 5245481, 5245482, 5245504, 5245537, 5245538, 5245539, + 5245540, 5245541, 5245542, 5245543, 5245544, 5245545, 5245602, + 5245603, 5245604, 5245605, 5245606, 5245607, 5245608, 5505026, + 5505027, 5505028, 5505029, 5505030, 5505031, 5505032, 5505033, + 5505058, 5505059, 5505060, 5505061, 5505062, 5505063, 5505064, + 5505065, 5505090, 5505091, 5505092, 5505093, 5505094, 5505095, + 5505096, 5505097, 5505098, 5505121, 5505122, 5505123, 5505124, + 5505125, 5505126, 5505127, 5505128, 5505129, 5505152, 5505153, + 5505154, 5505155, 5505156, 5505157, 5505158, 5505159, 5505160, + 5505161, 5505162, 5505185, 5505186, 5505187, 5505188, 5505189, + 5505190, 5505191, 5505192, 5505216, 5505217, 5505218, 5505219, + 5505220, 5505221, 5505222, 5505223, 5505224, 5505225, 5505226, + 5505249, 5505250, 5505251, 5505252, 5505253, 5505254, 5505255, + 5505280, 5505281, 5505282, 5505283, 5505284, 5505285, 5505286, + 5505287, 5505288, 5505289, 5505290, 5505291, 5505313, 5505314, + 5505315, 5505316, 5505317, 5505318, 5505319, 5505344, 5505345, + 5505346, 5505347, 5505348, 5505349, 5505350, 5505351, 5505352, + 5505353, 5505354, 5505377, 5505378, 5505379, 5505380, 5505381, + 5505408, 5505409, 5505410, 5505411, 5505412, 5505413, 5505414, + 5505415, 5505416, 5505417, 5505418, 5505441, 5505442, 5505443, + 5505444, 5505472, 5505473, 5505474, 5505475, 5505476, 5505477, + 5505478, 5505479, 5505480, 5505481, 5505482, 5505483, 5505505, + 5505506, 5505507, 5505508, 5505536, 5505537, 5505538, 5505539, + 5505540, 5505541, 5505542, 5505543, 5505544, 5505545, 5505546, + 5505569, 5505570, 5505600, 5505601, 5505602, 5505603, 5505604, + 5505605, 5505606, 5505607, 5505608, 5505609, 5505610, 5505633, + 5505665, 5505666, 5505667, 5505668, 5505669, 5505670, 5505671, + 5505672, 5505673, 5505732, 5505735, 5507137, 5507138, 5507139, + 5507140, 5507141, 5507142, 5507143, 5507144, 5507145, 5507170, + 5507171, 5507172, 5507173, 5507174, 5507175, 5507176, 5507177, + 5507178, 5507200, 5507201, 5507202, 5507203, 5507204, 5507205, + 5507206, 5507207, 5507208, 5507233, 5507234, 5507235, 5507236, + 5507237, 5507238, 5507239, 5507240, 5507241, 5507242, 5507264, + 5507265, 5507266, 5507267, 5507268, 5507269, 5507270, 5507271, + 5507297, 5507298, 5507299, 5507300, 5507301, 5507302, 5507303, + 5507304, 5507305, 5507306, 5507328, 5507329, 5507330, 5507331, + 5507332, 5507333, 5507334, 5507335, 5507361, 5507362, 5507363, + 5507364, 5507365, 5507366, 5507367, 5507368, 5507369, 5507370, + 5507371, 5507392, 5507393, 5507394, 5507395, 5507396, 5507397, + 5507425, 5507426, 5507427, 5507428, 5507429, 5507430, 5507431, + 5507432, 5507433, 5507434, 5507456, 5507457, 5507458, 5507459, + 5507460, 5507489, 5507490, 5507491, 5507492, 5507493, 5507494, + 5507495, 5507496, 5507497, 5507498, 5507520, 5507521, 5507522, + 5507523, 5507524, 5507553, 5507554, 5507555, 5507556, 5507557, + 5507558, 5507559, 5507560, 5507561, 5507562, 5507563, 5507584, + 5507585, 5507586, 5507617, 5507618, 5507619, 5507620, 5507621, + 5507622, 5507623, 5507624, 5507625, 5507626, 5507648, 5507649, + 5507681, 5507682, 5507683, 5507684, 5507685, 5507686, 5507687, + 5507688, 5507689, 5507690, 5507745, 5507746, 5507747, 5507748, + 5507749, 5507750, 5507751, 5507752, 5507753, 5507812, 5507815, + 5767170, 5767171, 5767172, 5767173, 5767174, 5767175, 5767176, + 5767177, 5767202, 5767203, 5767204, 5767205, 5767206, 5767207, + 5767208, 5767209, 5767234, 5767235, 5767236, 5767237, 5767238, + 5767239, 5767240, 5767241, 5767265, 5767266, 5767267, 5767268, + 5767269, 5767270, 5767271, 5767272, 5767296, 5767297, 5767298, + 5767299, 5767300, 5767301, 5767302, 5767303, 5767304, 5767305, + 5767306, 5767329, 5767330, 5767331, 5767332, 5767333, 5767334, + 5767335, 5767336, 5767360, 5767361, 5767362, 5767363, 5767364, + 5767365, 5767366, 5767367, 5767368, 5767369, 5767370, 5767393, + 5767394, 5767395, 5767396, 5767397, 5767398, 5767399, 5767424, + 5767425, 5767426, 5767427, 5767428, 5767429, 5767430, 5767431, + 5767432, 5767433, 5767434, 5767457, 5767458, 5767459, 5767460, + 5767461, 5767462, 5767488, 5767489, 5767490, 5767491, 5767492, + 5767493, 5767494, 5767495, 5767496, 5767497, 5767498, 5767521, + 5767522, 5767523, 5767524, 5767525, 5767552, 5767553, 5767554, + 5767555, 5767556, 5767557, 5767558, 5767559, 5767560, 5767561, + 5767562, 5767585, 5767586, 5767587, 5767588, 5767616, 5767617, + 5767618, 5767619, 5767620, 5767621, 5767622, 5767623, 5767624, + 5767625, 5767626, 5767649, 5767650, 5767651, 5767680, 5767681, + 5767682, 5767683, 5767684, 5767685, 5767686, 5767687, 5767688, + 5767689, 5767690, 5767713, 5767714, 5767744, 5767745, 5767746, + 5767747, 5767748, 5767749, 5767750, 5767751, 5767752, 5767753, + 5767810, 5767811, 5767812, 5767813, 5767814, 5767815, 5767816, + 5769281, 5769282, 5769283, 5769284, 5769285, 5769286, 5769287, + 5769288, 5769314, 5769315, 5769316, 5769317, 5769318, 5769319, + 5769320, 5769321, 5769344, 5769345, 5769346, 5769347, 5769348, + 5769349, 5769350, 5769351, 5769352, 5769377, 5769378, 5769379, + 5769380, 5769381, 5769382, 5769383, 5769384, 5769385, 5769386, + 5769408, 5769409, 5769410, 5769411, 5769412, 5769413, 5769414, + 5769415, 5769441, 5769442, 5769443, 5769444, 5769445, 5769446, + 5769447, 5769448, 5769449, 5769450, 5769472, 5769473, 5769474, + 5769475, 5769476, 5769477, 5769478, 5769505, 5769506, 5769507, + 5769508, 5769509, 5769510, 5769511, 5769512, 5769513, 5769514, + 5769536, 5769537, 5769538, 5769539, 5769540, 5769541, 5769569, + 5769570, 5769571, 5769572, 5769573, 5769574, 5769575, 5769576, + 5769577, 5769578, 5769600, 5769601, 5769602, 5769603, 5769604, + 5769633, 5769634, 5769635, 5769636, 5769637, 5769638, 5769639, + 5769640, 5769641, 5769642, 5769664, 5769665, 5769666, 5769667, + 5769697, 5769698, 5769699, 5769700, 5769701, 5769702, 5769703, + 5769704, 5769705, 5769706, 5769728, 5769729, 5769730, 5769761, + 5769762, 5769763, 5769764, 5769765, 5769766, 5769767, 5769768, + 5769769, 5769770, 5769792, 5769825, 5769826, 5769827, 5769828, + 5769829, 5769830, 5769831, 5769832, 5769833, 5769890, 5769891, + 5769892, 5769893, 5769894, 5769895, 5769896, 6029314, 6029315, + 6029316, 6029317, 6029318, 6029319, 6029320, 6029321, 6029346, + 6029347, 6029348, 6029349, 6029350, 6029351, 6029352, 6029353, + 6029378, 6029379, 6029380, 6029381, 6029382, 6029383, 6029384, + 6029385, 6029386, 6029409, 6029410, 6029411, 6029412, 6029413, + 6029414, 6029415, 6029416, 6029417, 6029440, 6029441, 6029442, + 6029443, 6029444, 6029445, 6029446, 6029447, 6029448, 6029449, + 6029450, 6029473, 6029474, 6029475, 6029476, 6029477, 6029478, + 6029479, 6029480, 6029504, 6029505, 6029506, 6029507, 6029508, + 6029509, 6029510, 6029511, 6029512, 6029513, 6029514, 6029537, + 6029538, 6029539, 6029540, 6029541, 6029542, 6029543, 6029568, + 6029569, 6029570, 6029571, 6029572, 6029573, 6029574, 6029575, + 6029576, 6029577, 6029578, 6029579, 6029601, 6029602, 6029603, + 6029604, 6029605, 6029606, 6029607, 6029632, 6029633, 6029634, + 6029635, 6029636, 6029637, 6029638, 6029639, 6029640, 6029641, + 6029642, 6029665, 6029666, 6029667, 6029668, 6029669, 6029696, + 6029697, 6029698, 6029699, 6029700, 6029701, 6029702, 6029703, + 6029704, 6029705, 6029706, 6029729, 6029730, 6029731, 6029732, + 6029760, 6029761, 6029762, 6029763, 6029764, 6029765, 6029766, + 6029767, 6029768, 6029769, 6029770, 6029771, 6029793, 6029794, + 6029795, 6029796, 6029824, 6029825, 6029826, 6029827, 6029828, + 6029829, 6029830, 6029831, 6029832, 6029833, 6029834, 6029857, + 6029858, 6029888, 6029889, 6029890, 6029891, 6029892, 6029893, + 6029894, 6029895, 6029896, 6029897, 6029898, 6029921, 6029953, + 6029954, 6029955, 6029956, 6029957, 6029958, 6029959, 6029960, + 6029961, 6030020, 6030023, 6031425, 6031426, 6031427, 6031428, + 6031429, 6031430, 6031431, 6031432, 6031433, 6031458, 6031459, + 6031460, 6031461, 6031462, 6031463, 6031464, 6031465, 6031466, + 6031488, 6031489, 6031490, 6031491, 6031492, 6031493, 6031494, + 6031495, 6031496, 6031521, 6031522, 6031523, 6031524, 6031525, + 6031526, 6031527, 6031528, 6031529, 6031530, 6031552, 6031553, + 6031554, 6031555, 6031556, 6031557, 6031558, 6031559, 6031585, + 6031586, 6031587, 6031588, 6031589, 6031590, 6031591, 6031592, + 6031593, 6031594, 6031616, 6031617, 6031618, 6031619, 6031620, + 6031621, 6031622, 6031623, 6031649, 6031650, 6031651, 6031652, + 6031653, 6031654, 6031655, 6031656, 6031657, 6031658, 6031659, + 6031680, 6031681, 6031682, 6031683, 6031684, 6031685, 6031713, + 6031714, 6031715, 6031716, 6031717, 6031718, 6031719, 6031720, + 6031721, 6031722, 6031744, 6031745, 6031746, 6031747, 6031748, + 6031777, 6031778, 6031779, 6031780, 6031781, 6031782, 6031783, + 6031784, 6031785, 6031786, 6031808, 6031809, 6031810, 6031811, + 6031812, 6031841, 6031842, 6031843, 6031844, 6031845, 6031846, + 6031847, 6031848, 6031849, 6031850, 6031851, 6031872, 6031873, + 6031874, 6031905, 6031906, 6031907, 6031908, 6031909, 6031910, + 6031911, 6031912, 6031913, 6031914, 6031936, 6031937, 6031969, + 6031970, 6031971, 6031972, 6031973, 6031974, 6031975, 6031976, + 6031977, 6031978, 6032033, 6032034, 6032035, 6032036, 6032037, + 6032038, 6032039, 6032040, 6032041, 6032100, 6032103, 6291458, + 6291459, 6291460, 6291461, 6291462, 6291463, 6291464, 6291465, + 6291490, 6291491, 6291492, 6291493, 6291494, 6291495, 6291496, + 6291497, 6291522, 6291523, 6291524, 6291525, 6291526, 6291527, + 6291528, 6291529, 6291530, 6291553, 6291554, 6291555, 6291556, + 6291557, 6291558, 6291559, 6291560, 6291584, 6291585, 6291586, + 6291587, 6291588, 6291589, 6291590, 6291591, 6291592, 6291593, + 6291594, 6291617, 6291618, 6291619, 6291620, 6291621, 6291622, + 6291623, 6291624, 6291648, 6291649, 6291650, 6291651, 6291652, + 6291653, 6291654, 6291655, 6291656, 6291657, 6291658, 6291681, + 6291682, 6291683, 6291684, 6291685, 6291686, 6291687, 6291712, + 6291713, 6291714, 6291715, 6291716, 6291717, 6291718, 6291719, + 6291720, 6291721, 6291722, 6291723, 6291745, 6291746, 6291747, + 6291748, 6291749, 6291750, 6291751, 6291776, 6291777, 6291778, + 6291779, 6291780, 6291781, 6291782, 6291783, 6291784, 6291785, + 6291786, 6291809, 6291810, 6291811, 6291812, 6291813, 6291840, + 6291841, 6291842, 6291843, 6291844, 6291845, 6291846, 6291847, + 6291848, 6291849, 6291850, 6291873, 6291874, 6291875, 6291876, + 6291904, 6291905, 6291906, 6291907, 6291908, 6291909, 6291910, + 6291911, 6291912, 6291913, 6291914, 6291915, 6291937, 6291938, + 6291939, 6291940, 6291968, 6291969, 6291970, 6291971, 6291972, + 6291973, 6291974, 6291975, 6291976, 6291977, 6291978, 6292001, + 6292002, 6292032, 6292033, 6292034, 6292035, 6292036, 6292037, + 6292038, 6292039, 6292040, 6292041, 6292065, 6292098, 6292099, + 6292100, 6292101, 6292102, 6292103, 6292104, 6292105, 6292164, + 6292167, 6293569, 6293570, 6293571, 6293572, 6293573, 6293574, + 6293575, 6293576, 6293602, 6293603, 6293604, 6293605, 6293606, + 6293607, 6293608, 6293609, 6293610, 6293632, 6293633, 6293634, + 6293635, 6293636, 6293637, 6293638, 6293639, 6293640, 6293665, + 6293666, 6293667, 6293668, 6293669, 6293670, 6293671, 6293672, + 6293673, 6293674, 6293696, 6293697, 6293698, 6293699, 6293700, + 6293701, 6293702, 6293703, 6293729, 6293730, 6293731, 6293732, + 6293733, 6293734, 6293735, 6293736, 6293737, 6293738, 6293760, + 6293761, 6293762, 6293763, 6293764, 6293765, 6293766, 6293767, + 6293793, 6293794, 6293795, 6293796, 6293797, 6293798, 6293799, + 6293800, 6293801, 6293802, 6293803, 6293824, 6293825, 6293826, + 6293827, 6293828, 6293829, 6293857, 6293858, 6293859, 6293860, + 6293861, 6293862, 6293863, 6293864, 6293865, 6293866, 6293888, + 6293889, 6293890, 6293891, 6293892, 6293921, 6293922, 6293923, + 6293924, 6293925, 6293926, 6293927, 6293928, 6293929, 6293930, + 6293952, 6293953, 6293954, 6293955, 6293956, 6293985, 6293986, + 6293987, 6293988, 6293989, 6293990, 6293991, 6293992, 6293993, + 6293994, 6293995, 6294016, 6294017, 6294018, 6294049, 6294050, + 6294051, 6294052, 6294053, 6294054, 6294055, 6294056, 6294057, + 6294058, 6294080, 6294081, 6294113, 6294114, 6294115, 6294116, + 6294117, 6294118, 6294119, 6294120, 6294121, 6294178, 6294179, + 6294180, 6294181, 6294182, 6294183, 6294184, 6294185, 6294244, + 6294247, 6553602, 6553603, 6553604, 6553605, 6553606, 6553607, + 6553608, 6553609, 6553634, 6553635, 6553636, 6553637, 6553638, + 6553639, 6553640, 6553641, 6553666, 6553667, 6553668, 6553669, + 6553670, 6553671, 6553672, 6553673, 6553674, 6553697, 6553698, + 6553699, 6553700, 6553701, 6553702, 6553703, 6553704, 6553705, + 6553728, 6553729, 6553730, 6553731, 6553732, 6553733, 6553734, + 6553735, 6553736, 6553737, 6553738, 6553761, 6553762, 6553763, + 6553764, 6553765, 6553766, 6553767, 6553768, 6553792, 6553793, + 6553794, 6553795, 6553796, 6553797, 6553798, 6553799, 6553800, + 6553801, 6553802, 6553803, 6553825, 6553826, 6553827, 6553828, + 6553829, 6553830, 6553831, 6553832, 6553856, 6553857, 6553858, + 6553859, 6553860, 6553861, 6553862, 6553863, 6553864, 6553865, + 6553866, 6553867, 6553889, 6553890, 6553891, 6553892, 6553893, + 6553894, 6553895, 6553920, 6553921, 6553922, 6553923, 6553924, + 6553925, 6553926, 6553927, 6553928, 6553929, 6553930, 6553931, + 6553953, 6553954, 6553955, 6553956, 6553957, 6553958, 6553984, + 6553985, 6553986, 6553987, 6553988, 6553989, 6553990, 6553991, + 6553992, 6553993, 6553994, 6553995, 6554017, 6554018, 6554019, + 6554020, 6554021, 6554048, 6554049, 6554050, 6554051, 6554052, + 6554053, 6554054, 6554055, 6554056, 6554057, 6554058, 6554059, + 6554081, 6554082, 6554083, 6554084, 6554112, 6554113, 6554114, + 6554115, 6554116, 6554117, 6554118, 6554119, 6554120, 6554121, + 6554122, 6554123, 6554145, 6554146, 6554147, 6554176, 6554177, + 6554178, 6554179, 6554180, 6554181, 6554182, 6554183, 6554184, + 6554185, 6554186, 6554209, 6554241, 6554242, 6554243, 6554244, + 6554245, 6554246, 6554247, 6554248, 6554249, 6554307, 6554308, + 6554309, 6554310, 6554311, 6554312, 6555713, 6555714, 6555715, + 6555716, 6555717, 6555718, 6555719, 6555720, 6555721, 6555746, + 6555747, 6555748, 6555749, 6555750, 6555751, 6555752, 6555753, + 6555754, 6555776, 6555777, 6555778, 6555779, 6555780, 6555781, + 6555782, 6555783, 6555784, 6555809, 6555810, 6555811, 6555812, + 6555813, 6555814, 6555815, 6555816, 6555817, 6555818, 6555840, + 6555841, 6555842, 6555843, 6555844, 6555845, 6555846, 6555847, + 6555848, 6555873, 6555874, 6555875, 6555876, 6555877, 6555878, + 6555879, 6555880, 6555881, 6555882, 6555883, 6555904, 6555905, + 6555906, 6555907, 6555908, 6555909, 6555910, 6555911, 6555937, + 6555938, 6555939, 6555940, 6555941, 6555942, 6555943, 6555944, + 6555945, 6555946, 6555947, 6555968, 6555969, 6555970, 6555971, + 6555972, 6555973, 6555974, 6556001, 6556002, 6556003, 6556004, + 6556005, 6556006, 6556007, 6556008, 6556009, 6556010, 6556011, + 6556032, 6556033, 6556034, 6556035, 6556036, 6556037, 6556065, + 6556066, 6556067, 6556068, 6556069, 6556070, 6556071, 6556072, + 6556073, 6556074, 6556075, 6556096, 6556097, 6556098, 6556099, + 6556100, 6556129, 6556130, 6556131, 6556132, 6556133, 6556134, + 6556135, 6556136, 6556137, 6556138, 6556139, 6556160, 6556161, + 6556162, 6556163, 6556193, 6556194, 6556195, 6556196, 6556197, + 6556198, 6556199, 6556200, 6556201, 6556202, 6556203, 6556224, + 6556225, 6556257, 6556258, 6556259, 6556260, 6556261, 6556262, + 6556263, 6556264, 6556265, 6556266, 6556321, 6556322, 6556323, + 6556324, 6556325, 6556326, 6556327, 6556328, 6556329, 6556387, + 6556388, 6556389, 6556390, 6556391, 6556392, 6815746, 6815747, + 6815748, 6815749, 6815750, 6815751, 6815752, 6815753, 6815778, + 6815779, 6815780, 6815781, 6815782, 6815783, 6815784, 6815785, + 6815810, 6815811, 6815812, 6815813, 6815814, 6815815, 6815816, + 6815817, 6815818, 6815841, 6815842, 6815843, 6815844, 6815845, + 6815846, 6815847, 6815848, 6815849, 6815872, 6815873, 6815874, + 6815875, 6815876, 6815877, 6815878, 6815879, 6815880, 6815881, + 6815882, 6815905, 6815906, 6815907, 6815908, 6815909, 6815910, + 6815911, 6815912, 6815936, 6815937, 6815938, 6815939, 6815940, + 6815941, 6815942, 6815943, 6815944, 6815945, 6815946, 6815969, + 6815970, 6815971, 6815972, 6815973, 6815974, 6815975, 6816000, + 6816001, 6816002, 6816003, 6816004, 6816005, 6816006, 6816007, + 6816008, 6816009, 6816010, 6816011, 6816033, 6816034, 6816035, + 6816036, 6816037, 6816038, 6816039, 6816064, 6816065, 6816066, + 6816067, 6816068, 6816069, 6816070, 6816071, 6816072, 6816073, + 6816074, 6816075, 6816097, 6816098, 6816099, 6816100, 6816101, + 6816102, 6816128, 6816129, 6816130, 6816131, 6816132, 6816133, + 6816134, 6816135, 6816136, 6816137, 6816138, 6816139, 6816161, + 6816162, 6816163, 6816164, 6816165, 6816192, 6816193, 6816194, + 6816195, 6816196, 6816197, 6816198, 6816199, 6816200, 6816201, + 6816202, 6816203, 6816225, 6816226, 6816227, 6816228, 6816256, + 6816257, 6816258, 6816259, 6816260, 6816261, 6816262, 6816263, + 6816264, 6816265, 6816266, 6816289, 6816290, 6816320, 6816321, + 6816322, 6816323, 6816324, 6816325, 6816326, 6816327, 6816328, + 6816329, 6816330, 6816353, 6816385, 6816386, 6816387, 6816388, + 6816389, 6816390, 6816391, 6816392, 6816393, 6816452, 6816453, + 6816454, 6816455, 6817857, 6817858, 6817859, 6817860, 6817861, + 6817862, 6817863, 6817864, 6817865, 6817890, 6817891, 6817892, + 6817893, 6817894, 6817895, 6817896, 6817897, 6817898, 6817920, + 6817921, 6817922, 6817923, 6817924, 6817925, 6817926, 6817927, + 6817928, 6817953, 6817954, 6817955, 6817956, 6817957, 6817958, + 6817959, 6817960, 6817961, 6817962, 6817984, 6817985, 6817986, + 6817987, 6817988, 6817989, 6817990, 6817991, 6818017, 6818018, + 6818019, 6818020, 6818021, 6818022, 6818023, 6818024, 6818025, + 6818026, 6818048, 6818049, 6818050, 6818051, 6818052, 6818053, + 6818054, 6818055, 6818081, 6818082, 6818083, 6818084, 6818085, + 6818086, 6818087, 6818088, 6818089, 6818090, 6818091, 6818112, + 6818113, 6818114, 6818115, 6818116, 6818117, 6818118, 6818145, + 6818146, 6818147, 6818148, 6818149, 6818150, 6818151, 6818152, + 6818153, 6818154, 6818155, 6818176, 6818177, 6818178, 6818179, + 6818180, 6818181, 6818209, 6818210, 6818211, 6818212, 6818213, + 6818214, 6818215, 6818216, 6818217, 6818218, 6818219, 6818240, + 6818241, 6818242, 6818243, 6818244, 6818273, 6818274, 6818275, + 6818276, 6818277, 6818278, 6818279, 6818280, 6818281, 6818282, + 6818283, 6818304, 6818305, 6818306, 6818337, 6818338, 6818339, + 6818340, 6818341, 6818342, 6818343, 6818344, 6818345, 6818346, + 6818368, 6818369, 6818401, 6818402, 6818403, 6818404, 6818405, + 6818406, 6818407, 6818408, 6818409, 6818410, 6818465, 6818466, + 6818467, 6818468, 6818469, 6818470, 6818471, 6818472, 6818473, + 6818532, 6818533, 6818534, 6818535, 7077890, 7077891, 7077892, + 7077893, 7077894, 7077895, 7077896, 7077897, 7077922, 7077923, + 7077924, 7077925, 7077926, 7077927, 7077928, 7077929, 7077954, + 7077955, 7077956, 7077957, 7077958, 7077959, 7077960, 7077961, + 7077962, 7077985, 7077986, 7077987, 7077988, 7077989, 7077990, + 7077991, 7077992, 7077993, 7078016, 7078017, 7078018, 7078019, + 7078020, 7078021, 7078022, 7078023, 7078024, 7078025, 7078026, + 7078049, 7078050, 7078051, 7078052, 7078053, 7078054, 7078055, + 7078056, 7078080, 7078081, 7078082, 7078083, 7078084, 7078085, + 7078086, 7078087, 7078088, 7078089, 7078090, 7078091, 7078113, + 7078114, 7078115, 7078116, 7078117, 7078118, 7078119, 7078120, + 7078144, 7078145, 7078146, 7078147, 7078148, 7078149, 7078150, + 7078151, 7078152, 7078153, 7078154, 7078155, 7078177, 7078178, + 7078179, 7078180, 7078181, 7078182, 7078183, 7078208, 7078209, + 7078210, 7078211, 7078212, 7078213, 7078214, 7078215, 7078216, + 7078217, 7078218, 7078219, 7078241, 7078242, 7078243, 7078244, + 7078245, 7078246, 7078272, 7078273, 7078274, 7078275, 7078276, + 7078277, 7078278, 7078279, 7078280, 7078281, 7078282, 7078283, + 7078305, 7078306, 7078307, 7078308, 7078309, 7078336, 7078337, + 7078338, 7078339, 7078340, 7078341, 7078342, 7078343, 7078344, + 7078345, 7078346, 7078347, 7078369, 7078370, 7078371, 7078372, + 7078400, 7078401, 7078402, 7078403, 7078404, 7078405, 7078406, + 7078407, 7078408, 7078409, 7078410, 7078411, 7078433, 7078434, + 7078435, 7078464, 7078465, 7078466, 7078467, 7078468, 7078469, + 7078470, 7078471, 7078472, 7078473, 7078474, 7078497, 7078529, + 7078530, 7078531, 7078532, 7078533, 7078534, 7078535, 7078536, + 7078537, 7078595, 7078596, 7078597, 7078598, 7078599, 7078600, + 7080001, 7080002, 7080003, 7080004, 7080005, 7080006, 7080007, + 7080008, 7080009, 7080034, 7080035, 7080036, 7080037, 7080038, + 7080039, 7080040, 7080041, 7080042, 7080064, 7080065, 7080066, + 7080067, 7080068, 7080069, 7080070, 7080071, 7080072, 7080097, + 7080098, 7080099, 7080100, 7080101, 7080102, 7080103, 7080104, + 7080105, 7080106, 7080128, 7080129, 7080130, 7080131, 7080132, + 7080133, 7080134, 7080135, 7080136, 7080161, 7080162, 7080163, + 7080164, 7080165, 7080166, 7080167, 7080168, 7080169, 7080170, + 7080171, 7080192, 7080193, 7080194, 7080195, 7080196, 7080197, + 7080198, 7080199, 7080225, 7080226, 7080227, 7080228, 7080229, + 7080230, 7080231, 7080232, 7080233, 7080234, 7080235, 7080256, + 7080257, 7080258, 7080259, 7080260, 7080261, 7080262, 7080289, + 7080290, 7080291, 7080292, 7080293, 7080294, 7080295, 7080296, + 7080297, 7080298, 7080299, 7080320, 7080321, 7080322, 7080323, + 7080324, 7080325, 7080353, 7080354, 7080355, 7080356, 7080357, + 7080358, 7080359, 7080360, 7080361, 7080362, 7080363, 7080384, + 7080385, 7080386, 7080387, 7080388, 7080417, 7080418, 7080419, + 7080420, 7080421, 7080422, 7080423, 7080424, 7080425, 7080426, + 7080427, 7080448, 7080449, 7080450, 7080451, 7080481, 7080482, + 7080483, 7080484, 7080485, 7080486, 7080487, 7080488, 7080489, + 7080490, 7080491, 7080512, 7080513, 7080545, 7080546, 7080547, + 7080548, 7080549, 7080550, 7080551, 7080552, 7080553, 7080554, + 7080609, 7080610, 7080611, 7080612, 7080613, 7080614, 7080615, + 7080616, 7080617, 7080675, 7080676, 7080677, 7080678, 7080679, + 7080680, 7340034, 7340035, 7340036, 7340037, 7340038, 7340039, + 7340040, 7340041, 7340066, 7340067, 7340068, 7340069, 7340070, + 7340071, 7340072, 7340073, 7340098, 7340099, 7340100, 7340101, + 7340102, 7340103, 7340104, 7340105, 7340106, 7340129, 7340130, + 7340131, 7340132, 7340133, 7340134, 7340135, 7340136, 7340137, + 7340160, 7340161, 7340162, 7340163, 7340164, 7340165, 7340166, + 7340167, 7340168, 7340169, 7340170, 7340193, 7340194, 7340195, + 7340196, 7340197, 7340198, 7340199, 7340200, 7340224, 7340225, + 7340226, 7340227, 7340228, 7340229, 7340230, 7340231, 7340232, + 7340233, 7340234, 7340257, 7340258, 7340259, 7340260, 7340261, + 7340262, 7340263, 7340288, 7340289, 7340290, 7340291, 7340292, + 7340293, 7340294, 7340295, 7340296, 7340297, 7340298, 7340299, + 7340321, 7340322, 7340323, 7340324, 7340325, 7340326, 7340327, + 7340352, 7340353, 7340354, 7340355, 7340356, 7340357, 7340358, + 7340359, 7340360, 7340361, 7340362, 7340363, 7340385, 7340386, + 7340387, 7340388, 7340389, 7340390, 7340416, 7340417, 7340418, + 7340419, 7340420, 7340421, 7340422, 7340423, 7340424, 7340425, + 7340426, 7340427, 7340449, 7340450, 7340451, 7340452, 7340453, + 7340480, 7340481, 7340482, 7340483, 7340484, 7340485, 7340486, + 7340487, 7340488, 7340489, 7340490, 7340491, 7340513, 7340514, + 7340515, 7340516, 7340544, 7340545, 7340546, 7340547, 7340548, + 7340549, 7340550, 7340551, 7340552, 7340553, 7340554, 7340577, + 7340578, 7340608, 7340609, 7340610, 7340611, 7340612, 7340613, + 7340614, 7340615, 7340616, 7340617, 7340618, 7340641, 7340673, + 7340674, 7340675, 7340676, 7340677, 7340678, 7340679, 7340680, + 7340681, 7340740, 7340741, 7340742, 7340743, 7342145, 7342146, + 7342147, 7342148, 7342149, 7342150, 7342151, 7342152, 7342153, + 7342178, 7342179, 7342180, 7342181, 7342182, 7342183, 7342184, + 7342185, 7342186, 7342208, 7342209, 7342210, 7342211, 7342212, + 7342213, 7342214, 7342215, 7342216, 7342241, 7342242, 7342243, + 7342244, 7342245, 7342246, 7342247, 7342248, 7342249, 7342250, + 7342272, 7342273, 7342274, 7342275, 7342276, 7342277, 7342278, + 7342279, 7342305, 7342306, 7342307, 7342308, 7342309, 7342310, + 7342311, 7342312, 7342313, 7342314, 7342336, 7342337, 7342338, + 7342339, 7342340, 7342341, 7342342, 7342343, 7342369, 7342370, + 7342371, 7342372, 7342373, 7342374, 7342375, 7342376, 7342377, + 7342378, 7342379, 7342400, 7342401, 7342402, 7342403, 7342404, + 7342405, 7342406, 7342433, 7342434, 7342435, 7342436, 7342437, + 7342438, 7342439, 7342440, 7342441, 7342442, 7342443, 7342464, + 7342465, 7342466, 7342467, 7342468, 7342469, 7342497, 7342498, + 7342499, 7342500, 7342501, 7342502, 7342503, 7342504, 7342505, + 7342506, 7342507, 7342528, 7342529, 7342530, 7342531, 7342532, + 7342561, 7342562, 7342563, 7342564, 7342565, 7342566, 7342567, + 7342568, 7342569, 7342570, 7342571, 7342592, 7342593, 7342594, + 7342625, 7342626, 7342627, 7342628, 7342629, 7342630, 7342631, + 7342632, 7342633, 7342634, 7342656, 7342657, 7342689, 7342690, + 7342691, 7342692, 7342693, 7342694, 7342695, 7342696, 7342697, + 7342698, 7342753, 7342754, 7342755, 7342756, 7342757, 7342758, + 7342759, 7342760, 7342761, 7342820, 7342821, 7342822, 7342823 + + + 330, 0, 0, 1, 1, 1, 2, 572, 30, 200, 200, 201, + 201, 201, 202, 272, 360, 0, 0, 1, 1, 1, 2, 2, + 560, 200, 200, 201, 201, 201, 202, 412, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 72, 200, 200, 200, 201, 201, + 201, 202, 272, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 42, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 201, + 202, 312, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 112, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 142, 202, 202, 242, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 212, 72, 202, 272, + 172, 312, 2, 2, 2, 2, 2, 2, 2, 72, 172, 242, + 212, 152, 212, 142, 172, 260, 400, 400, 401, 401, 401, 402, + 112, 60, 200, 200, 201, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 572, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 372, 400, 400, 400, 401, 401, 401, 402, 42, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 342, 400, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 412, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 12, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 412, 401, 402, + 402, 542, 401, 401, 401, 401, 401, 401, 401, 202, 202, 442, + 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, 512, + 372, 472, 12, 402, 402, 402, 402, 402, 402, 402, 372, 472, + 542, 512, 452, 512, 442, 472, 330, 0, 0, 1, 1, 1, + 2, 30, 200, 200, 201, 201, 201, 202, 360, 0, 0, 1, + 1, 1, 2, 42, 560, 200, 200, 201, 201, 201, 202, 342, + 530, 460, 430, 0, 0, 0, 1, 1, 1, 112, 200, 200, + 200, 201, 201, 201, 312, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 200, 200, 201, 201, 201, 202, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 72, 201, 201, 201, 201, + 202, 272, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 72, 201, 201, 201, 202, 272, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 72, 201, 201, 202, 272, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 112, 202, 312, 202, 2, 1, + 1, 1, 1, 1, 2, 2, 142, 242, 242, 212, 2, 2, + 2, 2, 212, 142, 172, 172, 172, 260, 400, 400, 401, 401, + 401, 402, 42, 60, 200, 200, 201, 201, 201, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 12, 160, 130, 200, 200, 200, + 201, 201, 201, 412, 400, 400, 400, 401, 401, 401, 402, 400, + 400, 400, 200, 200, 201, 201, 201, 202, 400, 401, 401, 401, + 401, 402, 572, 400, 400, 400, 400, 201, 201, 201, 201, 202, + 372, 401, 401, 401, 401, 402, 572, 401, 400, 400, 401, 401, + 201, 201, 201, 202, 372, 401, 401, 401, 402, 572, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 372, 401, 402, 12, 401, + 401, 401, 401, 401, 401, 401, 202, 412, 402, 542, 402, 401, + 401, 401, 401, 401, 402, 402, 442, 542, 512, 402, 402, 402, + 402, 512, 442, 472, 472, 472, 330, 0, 0, 1, 1, 1, + 2, 572, 30, 200, 200, 201, 201, 201, 202, 272, 360, 0, + 0, 1, 1, 1, 2, 2, 560, 200, 200, 201, 201, 201, + 202, 412, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 72, 200, 200, 200, 201, 201, 201, 202, 272, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 1, 1, 1, 1, + 2, 112, 201, 201, 201, 201, 202, 312, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 142, 202, 202, 242, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 212, 72, 202, 272, 172, 312, 2, 2, 2, 2, + 2, 2, 2, 72, 172, 242, 212, 152, 212, 142, 172, 260, + 400, 400, 401, 401, 401, 402, 112, 60, 200, 200, 201, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 572, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 372, 400, 400, + 400, 401, 401, 401, 402, 42, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 342, 400, 401, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 201, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 552, 401, 400, 400, 401, 401, 201, 201, 201, 202, + 352, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 542, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 442, 402, 402, 572, 402, 401, 401, + 401, 401, 401, 402, 402, 512, 372, 472, 12, 402, 402, 402, + 402, 402, 402, 402, 372, 472, 542, 512, 452, 512, 442, 472, + 330, 0, 0, 1, 1, 1, 2, 30, 200, 200, 201, 201, + 201, 202, 360, 0, 0, 1, 1, 1, 2, 42, 560, 200, + 200, 201, 201, 201, 202, 342, 530, 460, 430, 0, 0, 0, + 1, 1, 1, 2, 200, 200, 200, 201, 201, 201, 202, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 72, 200, 200, + 201, 201, 201, 202, 272, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 52, 201, 201, 201, 201, 202, 252, 201, 1, + 0, 0, 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, + 202, 252, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 72, 202, 202, 272, 202, 2, 1, 1, 1, + 1, 1, 2, 2, 142, 242, 242, 2, 2, 2, 2, 2, + 2, 142, 172, 152, 152, 152, 172, 260, 400, 400, 401, 401, + 401, 402, 42, 60, 200, 200, 201, 201, 201, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, + 201, 201, 201, 202, 400, 400, 400, 401, 401, 401, 402, 572, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 372, 400, 401, + 401, 401, 401, 402, 552, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 352, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 552, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 352, 401, 402, + 402, 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, 372, + 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 442, 542, + 402, 402, 402, 402, 402, 402, 442, 472, 452, 452, 452, 472, + 330, 0, 0, 1, 1, 1, 2, 572, 30, 200, 200, 201, + 201, 201, 202, 272, 360, 0, 0, 1, 1, 1, 2, 2, + 560, 200, 200, 201, 201, 201, 202, 412, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 72, 200, 200, 200, 201, 201, + 201, 202, 272, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 42, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 201, + 202, 312, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 112, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 142, 202, 202, 242, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 212, 72, 202, 272, + 172, 312, 2, 2, 2, 2, 2, 2, 2, 72, 172, 242, + 212, 152, 212, 142, 172, 260, 400, 400, 401, 401, 401, 402, + 112, 60, 200, 200, 201, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 572, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 372, 400, 400, 400, 401, 401, 401, 402, 42, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 342, 400, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 412, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 12, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 412, 401, 402, + 402, 542, 401, 401, 401, 401, 401, 401, 401, 202, 202, 442, + 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, 512, + 372, 472, 12, 402, 402, 402, 402, 402, 402, 402, 372, 472, + 542, 512, 452, 512, 442, 472, 330, 0, 0, 1, 1, 1, + 2, 30, 200, 200, 201, 201, 201, 202, 360, 0, 0, 1, + 1, 1, 2, 42, 560, 200, 200, 201, 201, 201, 202, 342, + 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, 200, 200, + 200, 201, 201, 201, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 72, 200, 200, 201, 201, 201, 202, 272, 200, + 0, 0, 0, 0, 1, 1, 1, 1, 2, 52, 201, 201, + 201, 201, 202, 252, 201, 1, 0, 0, 1, 1, 1, 1, + 1, 2, 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 52, 201, 201, 202, 252, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 72, 202, 202, + 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, 142, 242, + 242, 2, 2, 2, 2, 2, 2, 142, 172, 152, 152, 152, + 172, 260, 400, 400, 401, 401, 401, 402, 42, 60, 200, 200, + 201, 201, 201, 202, 342, 230, 400, 400, 400, 401, 401, 401, + 402, 160, 130, 200, 200, 200, 201, 201, 201, 202, 400, 400, + 400, 401, 401, 401, 402, 572, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 372, 400, 401, 401, 401, 401, 402, 552, 400, + 400, 400, 400, 201, 201, 201, 201, 202, 352, 401, 401, 401, + 401, 402, 552, 401, 400, 400, 401, 401, 201, 201, 201, 202, + 352, 401, 401, 401, 402, 552, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 352, 401, 402, 402, 572, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 372, 402, 542, 402, 401, 401, 401, + 401, 401, 402, 402, 442, 542, 402, 402, 402, 402, 402, 402, + 442, 472, 452, 452, 452, 472, 330, 0, 0, 1, 1, 1, + 2, 572, 30, 200, 200, 201, 201, 201, 202, 272, 360, 0, + 0, 1, 1, 1, 2, 2, 560, 200, 200, 201, 201, 201, + 202, 412, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 72, 200, 200, 200, 201, 201, 201, 202, 272, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 1, 1, 1, 1, + 2, 112, 201, 201, 201, 201, 202, 312, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 142, 202, 202, 242, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 212, 72, 202, 272, 172, 312, 2, 2, 2, 2, + 2, 2, 2, 72, 172, 242, 212, 152, 212, 142, 172, 260, + 400, 400, 401, 401, 401, 402, 112, 60, 200, 200, 201, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 572, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 372, 400, 400, + 400, 401, 401, 401, 402, 42, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 342, 400, 401, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 201, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 552, 401, 400, 400, 401, 401, 201, 201, 201, 202, + 352, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 542, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 442, 402, 402, 572, 402, 401, 401, + 401, 401, 401, 402, 402, 512, 372, 472, 12, 402, 402, 402, + 402, 402, 402, 402, 372, 472, 542, 512, 452, 512, 442, 472, + 330, 0, 0, 1, 1, 1, 2, 30, 200, 200, 201, 201, + 201, 202, 360, 0, 0, 1, 1, 1, 2, 42, 560, 200, + 200, 201, 201, 201, 202, 342, 530, 460, 430, 0, 0, 0, + 1, 1, 1, 2, 200, 200, 200, 201, 201, 201, 202, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 52, 200, 200, + 201, 201, 201, 202, 252, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 52, 201, 201, 201, 201, 202, 252, 201, 1, + 0, 0, 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, + 202, 252, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 52, 202, 202, 252, 202, 2, 1, 1, 1, + 1, 1, 2, 2, 142, 242, 242, 2, 2, 2, 2, 2, + 2, 142, 152, 152, 152, 152, 152, 260, 400, 400, 401, 401, + 401, 402, 42, 60, 200, 200, 201, 201, 201, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, + 201, 201, 201, 202, 400, 400, 400, 401, 401, 401, 402, 552, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 352, 400, 401, + 401, 401, 401, 402, 552, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 352, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 552, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 352, 401, 402, + 402, 552, 401, 401, 401, 401, 401, 401, 401, 202, 202, 352, + 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 442, 542, + 402, 402, 402, 402, 402, 402, 442, 452, 452, 452, 452, 452, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 1, 1, 1, 2, 2, + 560, 200, 200, 201, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 2, 201, 201, 201, 201, + 202, 202, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 152, 2, 212, 142, 260, 400, 400, 401, 401, 401, 402, + 402, 60, 200, 200, 201, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 401, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 452, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 1, 1, 1, 2, 112, 560, 200, 200, 201, 201, 201, + 202, 312, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 200, 200, 200, 201, 201, 201, 202, 200, 0, 0, 0, 0, + 0, 1, 1, 1, 2, 52, 200, 200, 201, 201, 201, 202, + 252, 200, 0, 0, 0, 0, 1, 1, 1, 1, 2, 52, + 201, 201, 201, 201, 202, 252, 201, 1, 0, 0, 1, 1, + 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, 201, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 52, 201, 201, 202, + 252, 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 52, + 202, 202, 252, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 112, 312, 242, 212, 2, 2, 2, 2, 2, 2, 212, 142, + 152, 152, 152, 152, 152, 260, 400, 400, 401, 401, 401, 402, + 12, 60, 200, 200, 201, 201, 201, 202, 412, 230, 400, 400, + 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, 201, 201, + 201, 202, 400, 400, 400, 401, 401, 401, 402, 552, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 352, 400, 401, 401, 401, + 401, 402, 552, 400, 400, 400, 400, 201, 201, 201, 201, 202, + 352, 401, 401, 401, 401, 402, 552, 401, 400, 400, 401, 401, + 201, 201, 201, 202, 352, 401, 401, 401, 402, 552, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 352, 401, 402, 402, 552, + 401, 401, 401, 401, 401, 401, 401, 202, 202, 352, 402, 12, + 402, 401, 401, 401, 401, 401, 402, 402, 412, 542, 512, 402, + 402, 402, 402, 402, 402, 512, 442, 452, 452, 452, 452, 452, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 152, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 552, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 452, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 112, 560, 200, 200, 200, 201, 201, + 202, 312, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 200, 200, 200, 201, 201, 201, 202, 200, 0, 0, 0, 0, + 0, 1, 1, 1, 2, 42, 200, 200, 201, 201, 201, 202, + 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, 2, 112, + 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, 0, 1, + 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, 201, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, 201, 202, + 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 142, + 202, 202, 242, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 112, 312, 242, 212, 2, 2, 2, 2, 2, 2, 212, 142, + 242, 212, 152, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 12, 60, 200, 200, 200, 201, 201, 202, 412, 230, 400, 400, + 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, 201, 201, + 201, 202, 400, 400, 400, 401, 401, 401, 402, 42, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 342, 400, 400, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 200, 201, 201, 201, 202, + 412, 401, 401, 401, 401, 402, 552, 400, 400, 400, 400, 401, + 201, 201, 201, 202, 352, 401, 401, 401, 402, 12, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 412, 401, 402, 402, 542, + 401, 401, 401, 401, 401, 401, 401, 202, 202, 442, 402, 12, + 402, 401, 401, 401, 401, 401, 402, 402, 412, 542, 512, 402, + 402, 402, 402, 402, 402, 512, 442, 542, 512, 452, 512, 442, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 212, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 512, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 2, 560, 200, 200, 200, 201, 201, + 202, 202, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 72, 200, 200, 200, 201, 201, 201, 202, 272, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 52, 200, 200, 201, 201, + 201, 202, 252, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, + 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 202, 312, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 52, 202, 202, 252, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 2, 72, 202, 272, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 172, 152, 212, 212, 212, 152, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 572, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 372, 400, 400, + 400, 401, 401, 401, 402, 552, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 352, 400, 400, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 200, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, 201, 202, + 412, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 552, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 352, 402, 402, 572, 402, 401, 401, + 401, 401, 401, 402, 402, 202, 372, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 442, 472, 452, 512, 512, 512, 452, 472, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, 201, + 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, 1, + 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, 2, 2, + 2, 142, 242, 2, 2, 212, 2, 2, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, 402, 572, + 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, 372, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, + 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, 401, 401, + 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, 572, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, 402, 402, + 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, 442, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, 402, 402, + 512, 402, 402, 442, 472, 472, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 2, 560, 200, 200, 200, 201, 201, + 202, 202, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 42, 200, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 112, 200, 200, 201, 201, + 201, 202, 312, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, + 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 202, 312, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 112, 202, 202, 312, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 212, 212, 212, 212, 212, 142, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 12, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 412, 400, 400, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 200, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, 201, 202, + 412, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 12, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 412, 402, 402, 542, 402, 401, 401, + 401, 401, 401, 402, 402, 202, 442, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 442, 542, 512, 512, 512, 512, 512, 442, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, 201, + 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, 1, + 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, 2, 2, + 2, 142, 242, 2, 2, 212, 2, 2, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, 402, 572, + 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, 372, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, + 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, 401, 401, + 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, 572, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, 402, 402, + 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, 442, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, 402, 402, + 512, 402, 402, 442, 472, 472, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 2, 560, 200, 200, 200, 201, 201, + 202, 202, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 42, 200, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 112, 200, 200, 201, 201, + 201, 202, 312, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, + 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 202, 312, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 112, 202, 202, 312, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 212, 212, 212, 212, 212, 142, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 12, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 412, 400, 400, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 200, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, 201, 202, + 412, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 12, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 412, 402, 402, 542, 402, 401, 401, + 401, 401, 401, 402, 402, 202, 442, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 442, 542, 512, 512, 512, 512, 512, 442, + 330, 0, 0, 1, 1, 1, 2, 12, 30, 200, 200, 201, + 201, 201, 202, 312, 360, 0, 0, 0, 1, 1, 2, 2, + 72, 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, + 201, 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, + 1, 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, + 0, 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, + 201, 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, + 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, + 202, 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, + 2, 2, 142, 202, 242, 212, 2, 2, 2, 2, 2, 2, + 2, 2, 112, 272, 242, 2, 2, 212, 2, 2, 142, 172, + 172, 172, 260, 400, 400, 400, 401, 401, 402, 402, 60, 200, + 200, 200, 201, 201, 202, 202, 372, 230, 400, 400, 400, 401, + 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, 201, 201, + 202, 342, 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, + 401, 402, 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 402, 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, + 202, 372, 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, + 402, 202, 442, 512, 572, 402, 402, 402, 402, 402, 402, 402, + 402, 412, 542, 402, 402, 512, 402, 402, 442, 472, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 212, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 512, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 12, 30, 200, 200, 201, 201, 201, 202, 312, 360, 0, + 0, 0, 1, 1, 2, 2, 42, 560, 200, 200, 200, 201, + 201, 202, 202, 372, 530, 460, 430, 0, 0, 0, 1, 1, + 1, 2, 112, 200, 200, 200, 201, 201, 201, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 201, 201, 201, 202, 202, 272, + 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, 112, 201, + 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 72, 202, 202, 202, 272, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 112, 202, 312, + 212, 2, 2, 2, 2, 2, 2, 2, 2, 112, 172, 242, + 272, 212, 2, 2, 212, 2, 2, 212, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 72, 60, 200, 200, 200, + 201, 201, 202, 202, 342, 230, 400, 400, 400, 401, 401, 401, + 402, 12, 160, 130, 200, 200, 200, 201, 201, 201, 202, 412, + 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, + 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, + 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, + 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, + 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, + 402, 402, 12, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 412, 512, 542, 402, 402, 402, 402, 402, 402, 402, 402, 412, + 472, 572, 512, 402, 402, 512, 402, 402, 512, 442, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 212, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 512, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 12, 30, 200, 200, 201, 201, 201, 202, 312, 360, 0, + 0, 0, 1, 1, 2, 2, 42, 560, 200, 200, 200, 201, + 201, 202, 202, 372, 530, 460, 430, 0, 0, 0, 1, 1, + 1, 2, 112, 200, 200, 200, 201, 201, 201, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 201, 201, 201, 202, 202, 272, + 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, 112, 201, + 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 72, 202, 202, 202, 272, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 112, 202, 312, + 212, 2, 2, 2, 2, 2, 2, 2, 2, 112, 172, 242, + 272, 212, 2, 2, 212, 2, 2, 212, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 72, 60, 200, 200, 200, + 201, 201, 202, 202, 342, 230, 400, 400, 400, 401, 401, 401, + 402, 12, 160, 130, 200, 200, 200, 201, 201, 201, 202, 412, + 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, + 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, + 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, + 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, + 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, + 402, 402, 12, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 412, 512, 542, 402, 402, 402, 402, 402, 402, 402, 402, 412, + 472, 572, 512, 402, 402, 512, 402, 402, 512, 442, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 12, 30, 200, 200, 201, + 201, 201, 202, 312, 360, 0, 0, 0, 1, 1, 2, 2, + 72, 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, + 201, 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, + 1, 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, + 0, 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, + 201, 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, + 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, + 202, 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, + 2, 2, 142, 202, 242, 212, 2, 2, 2, 2, 2, 2, + 2, 2, 112, 272, 242, 2, 2, 212, 2, 2, 142, 172, + 172, 172, 260, 400, 400, 400, 401, 401, 402, 402, 60, 200, + 200, 200, 201, 201, 202, 202, 372, 230, 400, 400, 400, 401, + 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, 201, 201, + 202, 342, 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, + 401, 402, 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 402, 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, + 202, 372, 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, + 402, 202, 442, 512, 572, 402, 402, 402, 402, 402, 402, 402, + 402, 412, 542, 402, 402, 512, 402, 402, 442, 472, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 12, 30, 200, 200, 201, + 201, 201, 202, 312, 360, 0, 0, 1, 1, 1, 2, 2, + 42, 560, 200, 200, 201, 201, 201, 202, 202, 372, 530, 460, + 430, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 200, 201, 201, 201, 202, 202, + 272, 200, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, + 52, 201, 201, 201, 201, 202, 202, 252, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 2, 72, 201, 201, 201, 202, + 202, 272, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 72, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 52, 202, 202, 202, 252, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 72, 202, + 202, 272, 212, 2, 2, 2, 2, 2, 2, 2, 2, 112, + 172, 242, 272, 2, 2, 2, 2, 2, 2, 2, 142, 172, + 152, 172, 172, 152, 172, 260, 400, 400, 401, 401, 401, 402, + 402, 72, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 402, 160, 130, 200, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 400, 401, 401, 401, + 402, 402, 572, 400, 400, 400, 200, 200, 201, 201, 201, 202, + 202, 372, 400, 401, 401, 401, 401, 402, 402, 552, 400, 400, + 400, 400, 201, 201, 201, 201, 202, 202, 352, 401, 401, 401, + 401, 402, 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 402, 402, 572, 401, 401, 401, + 401, 401, 401, 201, 201, 202, 202, 372, 401, 402, 402, 402, + 552, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, + 202, 202, 372, 512, 542, 402, 402, 402, 402, 402, 402, 402, + 402, 412, 472, 572, 402, 402, 402, 402, 402, 402, 402, 442, + 472, 452, 472, 472, 452, 472, 330, 0, 0, 1, 1, 1, + 2, 12, 30, 200, 200, 201, 201, 201, 202, 312, 360, 0, + 0, 1, 1, 1, 2, 2, 42, 560, 200, 200, 201, 201, + 201, 202, 202, 372, 530, 460, 430, 0, 0, 0, 1, 1, + 1, 2, 112, 200, 200, 200, 201, 201, 201, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 2, 72, 201, 201, 201, 201, 202, 202, 272, + 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 72, + 201, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 72, 201, 201, 202, 202, 272, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 2, 112, 202, 312, 212, 2, 2, 2, 2, 2, 2, 2, + 2, 112, 172, 242, 272, 212, 2, 2, 2, 2, 2, 212, + 142, 172, 172, 172, 172, 260, 400, 400, 401, 401, 401, 402, + 402, 72, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 12, 160, 130, 200, 200, + 200, 201, 201, 201, 202, 412, 400, 400, 400, 401, 401, 401, + 402, 402, 400, 400, 400, 200, 200, 201, 201, 201, 202, 202, + 400, 401, 401, 401, 401, 402, 402, 572, 400, 400, 400, 400, + 201, 201, 201, 201, 202, 202, 372, 401, 401, 401, 401, 402, + 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, 202, 202, + 372, 401, 401, 401, 402, 402, 572, 401, 401, 401, 401, 401, + 401, 201, 201, 202, 202, 372, 401, 402, 402, 402, 572, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, 402, 402, + 12, 402, 401, 401, 401, 401, 401, 402, 402, 202, 412, 512, + 542, 402, 402, 402, 402, 402, 402, 402, 402, 412, 472, 572, + 512, 402, 402, 402, 402, 402, 512, 442, 472, 472, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 2, 30, 200, 200, 201, + 201, 201, 202, 202, 360, 0, 0, 1, 1, 1, 2, 2, + 42, 560, 200, 200, 201, 201, 201, 202, 202, 342, 530, 460, + 430, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 200, 201, 201, 201, 202, 202, + 272, 200, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, + 52, 201, 201, 201, 201, 202, 202, 252, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 2, 72, 201, 201, 201, 202, + 202, 272, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 72, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 52, 202, 202, 202, 252, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 72, 202, + 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 142, 242, 242, 2, 2, 2, 2, 2, 2, 2, 142, 172, + 152, 172, 172, 152, 172, 260, 400, 400, 401, 401, 401, 402, + 402, 42, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 402, 160, 130, 200, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 400, 401, 401, 401, + 402, 402, 572, 400, 400, 400, 200, 200, 201, 201, 201, 202, + 202, 372, 400, 401, 401, 401, 401, 402, 402, 552, 400, 400, + 400, 400, 201, 201, 201, 201, 202, 202, 352, 401, 401, 401, + 401, 402, 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 402, 402, 572, 401, 401, 401, + 401, 401, 401, 201, 201, 202, 202, 372, 401, 402, 402, 402, + 552, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, + 202, 202, 372, 402, 542, 402, 402, 402, 402, 402, 402, 402, + 402, 402, 442, 542, 402, 402, 402, 402, 402, 402, 402, 442, + 472, 452, 472, 472, 452, 472, 330, 0, 0, 1, 1, 1, + 2, 2, 30, 200, 200, 201, 201, 201, 202, 202, 360, 0, + 0, 1, 1, 1, 2, 2, 42, 560, 200, 200, 201, 201, + 201, 202, 202, 342, 530, 460, 430, 0, 0, 0, 1, 1, + 2, 2, 112, 200, 200, 200, 201, 201, 202, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 2, 52, 201, 201, 201, 201, 202, 202, 252, + 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 72, + 201, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 72, 201, 202, 202, 202, 272, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 52, 202, + 202, 202, 252, 202, 2, 2, 1, 1, 1, 2, 2, 2, + 2, 112, 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 142, 242, 242, 212, 2, 2, 2, 2, 2, 212, + 142, 152, 172, 172, 152, 260, 400, 400, 401, 401, 401, 402, + 402, 42, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 402, 402, 12, 160, 130, 200, 200, + 200, 201, 201, 202, 202, 412, 400, 400, 400, 401, 401, 401, + 402, 402, 400, 400, 400, 200, 200, 201, 201, 201, 202, 202, + 400, 401, 401, 401, 401, 402, 402, 552, 400, 400, 400, 400, + 201, 201, 201, 201, 202, 202, 352, 401, 401, 401, 401, 402, + 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, 202, 202, + 372, 401, 401, 402, 402, 402, 572, 401, 401, 401, 401, 401, + 401, 201, 202, 202, 202, 372, 401, 402, 402, 402, 552, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 352, 402, 402, + 12, 402, 402, 401, 401, 401, 402, 402, 402, 202, 412, 402, + 542, 402, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 402, 402, 402, 402, 512, 442, 452, 472, 472, 452 + + + 0, 306, 582, 888, 1176, 1482, 1770, 2076, 2364, 2670, + 2964, 3270, 3564, 3870, 4176, 4494, 4800, 5118, 5424, 5748, + 6054, 6384, 6690, 7020, 7344, 7698, 8040, 8394 + + + 262146, 262147, 262148, 262149, 262150, 262151, 262152, + 262153, 262178, 262179, 262180, 262181, 262182, 262183, + 262184, 262185, 262210, 262211, 262212, 262213, 262214, + 262215, 262216, 262217, 262218, 262241, 262242, 262243, + 262244, 262245, 262246, 262247, 262248, 262249, 262272, + 262273, 262274, 262275, 262276, 262277, 262278, 262279, + 262280, 262281, 262282, 262305, 262306, 262307, 262308, + 262309, 262310, 262311, 262312, 262336, 262337, 262338, + 262339, 262340, 262341, 262342, 262343, 262344, 262345, + 262346, 262347, 262369, 262370, 262371, 262372, 262373, + 262374, 262375, 262376, 262400, 262401, 262402, 262403, + 262404, 262405, 262406, 262407, 262408, 262409, 262410, + 262411, 262433, 262434, 262435, 262436, 262437, 262438, + 262439, 262464, 262465, 262466, 262467, 262468, 262469, + 262470, 262471, 262472, 262473, 262474, 262497, 262498, + 262499, 262500, 262501, 262528, 262529, 262530, 262531, + 262532, 262533, 262534, 262535, 262536, 262537, 262538, + 262539, 262561, 262562, 262563, 262564, 262565, 262592, + 262593, 262594, 262595, 262596, 262597, 262598, 262599, + 262600, 262601, 262602, 262603, 262625, 262626, 262627, + 262628, 262656, 262657, 262658, 262659, 262660, 262661, + 262662, 262663, 262664, 262665, 262666, 262689, 262690, + 262720, 262721, 262722, 262723, 262724, 262725, 262726, + 262727, 262728, 262729, 262786, 262787, 262788, 262789, + 262790, 262791, 262792, 264258, 264259, 264260, 264261, + 264262, 264263, 264264, 264265, 264291, 264292, 264293, + 264294, 264295, 264296, 264297, 264298, 264321, 264322, + 264323, 264324, 264325, 264326, 264327, 264328, 264355, + 264356, 264357, 264358, 264359, 264360, 264361, 264362, + 264384, 264385, 264386, 264387, 264388, 264389, 264390, + 264391, 264392, 264417, 264418, 264419, 264420, 264421, + 264422, 264423, 264424, 264425, 264426, 264427, 264448, + 264449, 264450, 264451, 264452, 264453, 264454, 264455, + 264481, 264482, 264483, 264484, 264485, 264486, 264487, + 264488, 264489, 264490, 264491, 264512, 264513, 264514, + 264515, 264516, 264517, 264518, 264545, 264546, 264547, + 264548, 264549, 264550, 264551, 264552, 264553, 264554, + 264555, 264576, 264577, 264578, 264579, 264580, 264581, + 264609, 264610, 264611, 264612, 264613, 264614, 264615, + 264616, 264617, 264618, 264619, 264640, 264641, 264642, + 264643, 264644, 264673, 264674, 264675, 264676, 264677, + 264678, 264679, 264680, 264681, 264682, 264683, 264704, + 264705, 264706, 264707, 264737, 264738, 264739, 264740, + 264741, 264742, 264743, 264744, 264745, 264746, 264747, + 264768, 264769, 264770, 264801, 264802, 264803, 264804, + 264805, 264806, 264807, 264808, 264809, 264810, 264811, + 264832, 264865, 264866, 264867, 264868, 264869, 264870, + 264871, 264872, 264873, 264874, 264930, 264931, 264932, + 264933, 264934, 264935, 264936, 264937, 264996, 264997, + 264999, 265000, 524290, 524291, 524292, 524293, 524294, + 524295, 524296, 524297, 524322, 524323, 524324, 524325, + 524326, 524327, 524328, 524329, 524355, 524356, 524357, + 524358, 524359, 524360, 524361, 524362, 524386, 524387, + 524388, 524389, 524390, 524391, 524392, 524393, 524419, + 524420, 524421, 524422, 524423, 524424, 524425, 524426, + 524427, 524449, 524450, 524451, 524452, 524453, 524454, + 524455, 524456, 524457, 524480, 524481, 524482, 524483, + 524484, 524485, 524486, 524487, 524488, 524489, 524490, + 524491, 524513, 524514, 524515, 524516, 524517, 524518, + 524519, 524520, 524544, 524545, 524546, 524547, 524548, + 524549, 524550, 524551, 524552, 524553, 524554, 524555, + 524577, 524578, 524579, 524580, 524581, 524582, 524583, + 524608, 524609, 524610, 524611, 524612, 524613, 524614, + 524615, 524616, 524617, 524618, 524619, 524620, 524641, + 524642, 524643, 524644, 524645, 524646, 524647, 524672, + 524673, 524674, 524675, 524676, 524677, 524678, 524679, + 524680, 524681, 524682, 524683, 524705, 524706, 524707, + 524708, 524709, 524736, 524737, 524738, 524739, 524740, + 524741, 524742, 524743, 524744, 524745, 524746, 524747, + 524769, 524770, 524771, 524772, 524800, 524801, 524802, + 524803, 524804, 524805, 524806, 524807, 524808, 524809, + 524810, 524811, 524812, 524833, 524834, 524835, 524836, + 524864, 524865, 524866, 524867, 524868, 524869, 524870, + 524871, 524872, 524873, 524874, 524875, 524897, 524898, + 524928, 524929, 524930, 524931, 524932, 524933, 524934, + 524935, 524936, 524937, 524938, 524939, 524961, 524994, + 524995, 524996, 524997, 524998, 524999, 525000, 525001, + 525060, 525061, 525063, 525064, 526401, 526402, 526403, + 526404, 526405, 526406, 526407, 526408, 526409, 526434, + 526435, 526436, 526437, 526438, 526439, 526440, 526441, + 526442, 526464, 526465, 526466, 526467, 526468, 526469, + 526470, 526471, 526472, 526497, 526498, 526499, 526500, + 526501, 526502, 526503, 526504, 526505, 526506, 526528, + 526529, 526530, 526531, 526532, 526533, 526534, 526535, + 526536, 526561, 526562, 526563, 526564, 526565, 526566, + 526567, 526568, 526569, 526570, 526571, 526592, 526593, + 526594, 526595, 526596, 526597, 526598, 526599, 526625, + 526626, 526627, 526628, 526629, 526630, 526631, 526632, + 526633, 526634, 526635, 526656, 526657, 526658, 526659, + 526660, 526661, 526689, 526690, 526691, 526692, 526693, + 526694, 526695, 526696, 526697, 526698, 526720, 526721, + 526722, 526723, 526724, 526725, 526753, 526754, 526755, + 526756, 526757, 526758, 526759, 526760, 526761, 526762, + 526763, 526784, 526785, 526786, 526787, 526788, 526817, + 526818, 526819, 526820, 526821, 526822, 526823, 526824, + 526825, 526826, 526827, 526848, 526849, 526850, 526881, + 526882, 526883, 526884, 526885, 526886, 526887, 526888, + 526889, 526890, 526912, 526945, 526946, 526947, 526948, + 526949, 526950, 526951, 526952, 526953, 527009, 527010, + 527011, 527012, 527013, 527014, 527015, 527016, 527017, + 527076, 527079, 786434, 786435, 786436, 786437, 786438, + 786439, 786440, 786441, 786442, 786466, 786467, 786468, + 786469, 786470, 786471, 786472, 786473, 786474, 786498, + 786499, 786500, 786501, 786502, 786503, 786504, 786505, + 786506, 786529, 786530, 786531, 786532, 786533, 786534, + 786535, 786536, 786537, 786560, 786561, 786562, 786563, + 786564, 786565, 786566, 786567, 786568, 786569, 786570, + 786571, 786593, 786594, 786595, 786596, 786597, 786598, + 786599, 786600, 786601, 786624, 786625, 786626, 786627, + 786628, 786629, 786630, 786631, 786632, 786633, 786634, + 786635, 786657, 786658, 786659, 786660, 786661, 786662, + 786663, 786664, 786688, 786689, 786690, 786691, 786692, + 786693, 786694, 786695, 786696, 786697, 786698, 786699, + 786721, 786722, 786723, 786724, 786725, 786726, 786727, + 786752, 786753, 786754, 786755, 786756, 786757, 786758, + 786759, 786760, 786761, 786762, 786785, 786786, 786787, + 786788, 786789, 786816, 786817, 786818, 786819, 786820, + 786821, 786822, 786823, 786824, 786825, 786826, 786827, + 786849, 786850, 786851, 786852, 786853, 786880, 786881, + 786882, 786883, 786884, 786885, 786886, 786887, 786888, + 786889, 786890, 786891, 786913, 786914, 786915, 786916, + 786944, 786945, 786946, 786947, 786948, 786949, 786950, + 786951, 786952, 786953, 786954, 786955, 786977, 786978, + 786979, 787008, 787009, 787010, 787011, 787012, 787013, + 787014, 787015, 787016, 787017, 787018, 787041, 787073, + 787074, 787075, 787076, 787077, 787078, 787079, 787080, + 787081, 787140, 787143, 788546, 788547, 788548, 788549, + 788550, 788551, 788552, 788553, 788579, 788580, 788581, + 788582, 788583, 788584, 788585, 788586, 788609, 788610, + 788611, 788612, 788613, 788614, 788615, 788616, 788617, + 788643, 788644, 788645, 788646, 788647, 788648, 788649, + 788650, 788651, 788672, 788673, 788674, 788675, 788676, + 788677, 788678, 788679, 788680, 788705, 788706, 788707, + 788708, 788709, 788710, 788711, 788712, 788713, 788714, + 788715, 788736, 788737, 788738, 788739, 788740, 788741, + 788742, 788743, 788769, 788770, 788771, 788772, 788773, + 788774, 788775, 788776, 788777, 788778, 788779, 788800, + 788801, 788802, 788803, 788804, 788805, 788806, 788807, + 788833, 788834, 788835, 788836, 788837, 788838, 788839, + 788840, 788841, 788842, 788843, 788844, 788864, 788865, + 788866, 788867, 788868, 788869, 788897, 788898, 788899, + 788900, 788901, 788902, 788903, 788904, 788905, 788906, + 788907, 788928, 788929, 788930, 788931, 788932, 788961, + 788962, 788963, 788964, 788965, 788966, 788967, 788968, + 788969, 788970, 788971, 788992, 788993, 788994, 788995, + 788996, 789025, 789026, 789027, 789028, 789029, 789030, + 789031, 789032, 789033, 789034, 789035, 789036, 789056, + 789057, 789058, 789089, 789090, 789091, 789092, 789093, + 789094, 789095, 789096, 789097, 789098, 789099, 789120, + 789121, 789153, 789154, 789155, 789156, 789157, 789158, + 789159, 789160, 789161, 789162, 789163, 789217, 789218, + 789219, 789220, 789221, 789222, 789223, 789224, 789225, + 789226, 789283, 789284, 789285, 789287, 789288, 789289, + 1048578, 1048579, 1048580, 1048581, 1048582, 1048583, 1048584, + 1048585, 1048586, 1048610, 1048611, 1048612, 1048613, 1048614, + 1048615, 1048616, 1048617, 1048618, 1048643, 1048644, 1048645, + 1048646, 1048647, 1048648, 1048649, 1048650, 1048674, 1048675, + 1048676, 1048677, 1048678, 1048679, 1048680, 1048681, 1048707, + 1048708, 1048709, 1048710, 1048711, 1048712, 1048713, 1048714, + 1048715, 1048737, 1048738, 1048739, 1048740, 1048741, 1048742, + 1048743, 1048744, 1048745, 1048768, 1048769, 1048770, 1048771, + 1048772, 1048773, 1048774, 1048775, 1048776, 1048777, 1048778, + 1048779, 1048801, 1048802, 1048803, 1048804, 1048805, 1048806, + 1048807, 1048808, 1048832, 1048833, 1048834, 1048835, 1048836, + 1048837, 1048838, 1048839, 1048840, 1048841, 1048842, 1048843, + 1048844, 1048865, 1048866, 1048867, 1048868, 1048869, 1048870, + 1048871, 1048872, 1048896, 1048897, 1048898, 1048899, 1048900, + 1048901, 1048902, 1048903, 1048904, 1048905, 1048906, 1048907, + 1048908, 1048929, 1048930, 1048931, 1048932, 1048933, 1048934, + 1048935, 1048960, 1048961, 1048962, 1048963, 1048964, 1048965, + 1048966, 1048967, 1048968, 1048969, 1048970, 1048971, 1048993, + 1048994, 1048995, 1048996, 1048997, 1049024, 1049025, 1049026, + 1049027, 1049028, 1049029, 1049030, 1049031, 1049032, 1049033, + 1049034, 1049035, 1049057, 1049058, 1049059, 1049060, 1049088, + 1049089, 1049090, 1049091, 1049092, 1049093, 1049094, 1049095, + 1049096, 1049097, 1049098, 1049099, 1049100, 1049121, 1049122, + 1049123, 1049124, 1049152, 1049153, 1049154, 1049155, 1049156, + 1049157, 1049158, 1049159, 1049160, 1049161, 1049162, 1049163, + 1049164, 1049185, 1049186, 1049187, 1049216, 1049217, 1049218, + 1049219, 1049220, 1049221, 1049222, 1049223, 1049224, 1049225, + 1049226, 1049227, 1049249, 1049281, 1049282, 1049283, 1049284, + 1049285, 1049286, 1049287, 1049288, 1049289, 1049290, 1049347, + 1049348, 1049349, 1049351, 1049352, 1049353, 1050689, 1050690, + 1050691, 1050692, 1050693, 1050694, 1050695, 1050696, 1050697, + 1050722, 1050723, 1050724, 1050725, 1050726, 1050727, 1050728, + 1050729, 1050730, 1050752, 1050753, 1050754, 1050755, 1050756, + 1050757, 1050758, 1050759, 1050760, 1050761, 1050785, 1050786, + 1050787, 1050788, 1050789, 1050790, 1050791, 1050792, 1050793, + 1050794, 1050795, 1050816, 1050817, 1050818, 1050819, 1050820, + 1050821, 1050822, 1050823, 1050824, 1050849, 1050850, 1050851, + 1050852, 1050853, 1050854, 1050855, 1050856, 1050857, 1050858, + 1050859, 1050880, 1050881, 1050882, 1050883, 1050884, 1050885, + 1050886, 1050887, 1050913, 1050914, 1050915, 1050916, 1050917, + 1050918, 1050919, 1050920, 1050921, 1050922, 1050923, 1050944, + 1050945, 1050946, 1050947, 1050948, 1050949, 1050977, 1050978, + 1050979, 1050980, 1050981, 1050982, 1050983, 1050984, 1050985, + 1050986, 1051008, 1051009, 1051010, 1051011, 1051012, 1051013, + 1051041, 1051042, 1051043, 1051044, 1051045, 1051046, 1051047, + 1051048, 1051049, 1051050, 1051051, 1051072, 1051073, 1051074, + 1051075, 1051076, 1051105, 1051106, 1051107, 1051108, 1051109, + 1051110, 1051111, 1051112, 1051113, 1051114, 1051115, 1051136, + 1051137, 1051138, 1051139, 1051169, 1051170, 1051171, 1051172, + 1051173, 1051174, 1051175, 1051176, 1051177, 1051178, 1051179, + 1051200, 1051201, 1051233, 1051234, 1051235, 1051236, 1051237, + 1051238, 1051239, 1051240, 1051241, 1051242, 1051297, 1051298, + 1051299, 1051300, 1051301, 1051302, 1051303, 1051304, 1051305, + 1051363, 1051364, 1051367, 1051368, 1310722, 1310723, 1310724, + 1310725, 1310726, 1310727, 1310728, 1310729, 1310730, 1310754, + 1310755, 1310756, 1310757, 1310758, 1310759, 1310760, 1310761, + 1310762, 1310786, 1310787, 1310788, 1310789, 1310790, 1310791, + 1310792, 1310793, 1310794, 1310817, 1310818, 1310819, 1310820, + 1310821, 1310822, 1310823, 1310824, 1310825, 1310848, 1310849, + 1310850, 1310851, 1310852, 1310853, 1310854, 1310855, 1310856, + 1310857, 1310858, 1310859, 1310881, 1310882, 1310883, 1310884, + 1310885, 1310886, 1310887, 1310888, 1310889, 1310912, 1310913, + 1310914, 1310915, 1310916, 1310917, 1310918, 1310919, 1310920, + 1310921, 1310922, 1310923, 1310945, 1310946, 1310947, 1310948, + 1310949, 1310950, 1310951, 1310952, 1310976, 1310977, 1310978, + 1310979, 1310980, 1310981, 1310982, 1310983, 1310984, 1310985, + 1310986, 1310987, 1311009, 1311010, 1311011, 1311012, 1311013, + 1311014, 1311015, 1311040, 1311041, 1311042, 1311043, 1311044, + 1311045, 1311046, 1311047, 1311048, 1311049, 1311050, 1311073, + 1311074, 1311075, 1311076, 1311077, 1311104, 1311105, 1311106, + 1311107, 1311108, 1311109, 1311110, 1311111, 1311112, 1311113, + 1311114, 1311115, 1311137, 1311138, 1311139, 1311140, 1311141, + 1311168, 1311169, 1311170, 1311171, 1311172, 1311173, 1311174, + 1311175, 1311176, 1311177, 1311178, 1311179, 1311201, 1311202, + 1311203, 1311204, 1311232, 1311233, 1311234, 1311235, 1311236, + 1311237, 1311238, 1311239, 1311240, 1311241, 1311242, 1311243, + 1311265, 1311266, 1311267, 1311296, 1311297, 1311298, 1311299, + 1311300, 1311301, 1311302, 1311303, 1311304, 1311305, 1311306, + 1311329, 1311361, 1311362, 1311363, 1311364, 1311365, 1311366, + 1311367, 1311368, 1311369, 1311427, 1311428, 1311431, 1311432, + 1312834, 1312835, 1312836, 1312837, 1312838, 1312839, 1312840, + 1312841, 1312867, 1312868, 1312869, 1312870, 1312871, 1312872, + 1312873, 1312874, 1312897, 1312898, 1312899, 1312900, 1312901, + 1312902, 1312903, 1312904, 1312905, 1312931, 1312932, 1312933, + 1312934, 1312935, 1312936, 1312937, 1312938, 1312939, 1312960, + 1312961, 1312962, 1312963, 1312964, 1312965, 1312966, 1312967, + 1312968, 1312993, 1312994, 1312995, 1312996, 1312997, 1312998, + 1312999, 1313000, 1313001, 1313002, 1313003, 1313024, 1313025, + 1313026, 1313027, 1313028, 1313029, 1313030, 1313031, 1313032, + 1313057, 1313058, 1313059, 1313060, 1313061, 1313062, 1313063, + 1313064, 1313065, 1313066, 1313067, 1313068, 1313088, 1313089, + 1313090, 1313091, 1313092, 1313093, 1313094, 1313095, 1313121, + 1313122, 1313123, 1313124, 1313125, 1313126, 1313127, 1313128, + 1313129, 1313130, 1313131, 1313132, 1313152, 1313153, 1313154, + 1313155, 1313156, 1313157, 1313185, 1313186, 1313187, 1313188, + 1313189, 1313190, 1313191, 1313192, 1313193, 1313194, 1313195, + 1313216, 1313217, 1313218, 1313219, 1313220, 1313249, 1313250, + 1313251, 1313252, 1313253, 1313254, 1313255, 1313256, 1313257, + 1313258, 1313259, 1313280, 1313281, 1313282, 1313283, 1313284, + 1313313, 1313314, 1313315, 1313316, 1313317, 1313318, 1313319, + 1313320, 1313321, 1313322, 1313323, 1313324, 1313344, 1313345, + 1313346, 1313347, 1313377, 1313378, 1313379, 1313380, 1313381, + 1313382, 1313383, 1313384, 1313385, 1313386, 1313387, 1313388, + 1313408, 1313409, 1313441, 1313442, 1313443, 1313444, 1313445, + 1313446, 1313447, 1313448, 1313449, 1313450, 1313451, 1313505, + 1313506, 1313507, 1313508, 1313509, 1313510, 1313511, 1313512, + 1313513, 1313514, 1313571, 1313572, 1313573, 1313575, 1313576, + 1313577, 1572866, 1572867, 1572868, 1572869, 1572870, 1572871, + 1572872, 1572873, 1572874, 1572898, 1572899, 1572900, 1572901, + 1572902, 1572903, 1572904, 1572905, 1572906, 1572931, 1572932, + 1572933, 1572934, 1572935, 1572936, 1572937, 1572938, 1572962, + 1572963, 1572964, 1572965, 1572966, 1572967, 1572968, 1572969, + 1572995, 1572996, 1572997, 1572998, 1572999, 1573000, 1573001, + 1573002, 1573003, 1573025, 1573026, 1573027, 1573028, 1573029, + 1573030, 1573031, 1573032, 1573033, 1573056, 1573057, 1573058, + 1573059, 1573060, 1573061, 1573062, 1573063, 1573064, 1573065, + 1573066, 1573067, 1573068, 1573089, 1573090, 1573091, 1573092, + 1573093, 1573094, 1573095, 1573096, 1573097, 1573120, 1573121, + 1573122, 1573123, 1573124, 1573125, 1573126, 1573127, 1573128, + 1573129, 1573130, 1573131, 1573132, 1573153, 1573154, 1573155, + 1573156, 1573157, 1573158, 1573159, 1573160, 1573184, 1573185, + 1573186, 1573187, 1573188, 1573189, 1573190, 1573191, 1573192, + 1573193, 1573194, 1573195, 1573196, 1573217, 1573218, 1573219, + 1573220, 1573221, 1573222, 1573223, 1573248, 1573249, 1573250, + 1573251, 1573252, 1573253, 1573254, 1573255, 1573256, 1573257, + 1573258, 1573259, 1573260, 1573281, 1573282, 1573283, 1573284, + 1573285, 1573286, 1573312, 1573313, 1573314, 1573315, 1573316, + 1573317, 1573318, 1573319, 1573320, 1573321, 1573322, 1573323, + 1573324, 1573345, 1573346, 1573347, 1573348, 1573349, 1573376, + 1573377, 1573378, 1573379, 1573380, 1573381, 1573382, 1573383, + 1573384, 1573385, 1573386, 1573387, 1573388, 1573409, 1573410, + 1573411, 1573412, 1573440, 1573441, 1573442, 1573443, 1573444, + 1573445, 1573446, 1573447, 1573448, 1573449, 1573450, 1573451, + 1573452, 1573473, 1573474, 1573475, 1573504, 1573505, 1573506, + 1573507, 1573508, 1573509, 1573510, 1573511, 1573512, 1573513, + 1573514, 1573515, 1573516, 1573537, 1573538, 1573569, 1573570, + 1573571, 1573572, 1573573, 1573574, 1573575, 1573576, 1573577, + 1573578, 1573634, 1573635, 1573636, 1573637, 1573638, 1573639, + 1573640, 1573641, 1573642, 1573701, 1573704, 1574977, 1574978, + 1574979, 1574980, 1574981, 1574982, 1574983, 1574984, 1574985, + 1574986, 1575010, 1575011, 1575012, 1575013, 1575014, 1575015, + 1575016, 1575017, 1575018, 1575019, 1575040, 1575041, 1575042, + 1575043, 1575044, 1575045, 1575046, 1575047, 1575048, 1575049, + 1575073, 1575074, 1575075, 1575076, 1575077, 1575078, 1575079, + 1575080, 1575081, 1575082, 1575083, 1575104, 1575105, 1575106, + 1575107, 1575108, 1575109, 1575110, 1575111, 1575112, 1575137, + 1575138, 1575139, 1575140, 1575141, 1575142, 1575143, 1575144, + 1575145, 1575146, 1575147, 1575168, 1575169, 1575170, 1575171, + 1575172, 1575173, 1575174, 1575175, 1575176, 1575201, 1575202, + 1575203, 1575204, 1575205, 1575206, 1575207, 1575208, 1575209, + 1575210, 1575211, 1575212, 1575232, 1575233, 1575234, 1575235, + 1575236, 1575237, 1575238, 1575265, 1575266, 1575267, 1575268, + 1575269, 1575270, 1575271, 1575272, 1575273, 1575274, 1575275, + 1575296, 1575297, 1575298, 1575299, 1575300, 1575301, 1575329, + 1575330, 1575331, 1575332, 1575333, 1575334, 1575335, 1575336, + 1575337, 1575338, 1575339, 1575360, 1575361, 1575362, 1575363, + 1575364, 1575365, 1575393, 1575394, 1575395, 1575396, 1575397, + 1575398, 1575399, 1575400, 1575401, 1575402, 1575403, 1575404, + 1575424, 1575425, 1575426, 1575427, 1575457, 1575458, 1575459, + 1575460, 1575461, 1575462, 1575463, 1575464, 1575465, 1575466, + 1575467, 1575488, 1575489, 1575490, 1575521, 1575522, 1575523, + 1575524, 1575525, 1575526, 1575527, 1575528, 1575529, 1575530, + 1575531, 1575585, 1575586, 1575587, 1575588, 1575589, 1575590, + 1575591, 1575592, 1575593, 1575650, 1575651, 1575652, 1575653, + 1575654, 1575655, 1575656, 1575657, 1835010, 1835011, 1835012, + 1835013, 1835014, 1835015, 1835016, 1835017, 1835018, 1835019, + 1835042, 1835043, 1835044, 1835045, 1835046, 1835047, 1835048, + 1835049, 1835050, 1835051, 1835074, 1835075, 1835076, 1835077, + 1835078, 1835079, 1835080, 1835081, 1835082, 1835083, 1835105, + 1835106, 1835107, 1835108, 1835109, 1835110, 1835111, 1835112, + 1835113, 1835114, 1835136, 1835137, 1835138, 1835139, 1835140, + 1835141, 1835142, 1835143, 1835144, 1835145, 1835146, 1835147, + 1835148, 1835169, 1835170, 1835171, 1835172, 1835173, 1835174, + 1835175, 1835176, 1835177, 1835178, 1835200, 1835201, 1835202, + 1835203, 1835204, 1835205, 1835206, 1835207, 1835208, 1835209, + 1835210, 1835211, 1835212, 1835233, 1835234, 1835235, 1835236, + 1835237, 1835238, 1835239, 1835240, 1835241, 1835264, 1835265, + 1835266, 1835267, 1835268, 1835269, 1835270, 1835271, 1835272, + 1835273, 1835274, 1835275, 1835276, 1835297, 1835298, 1835299, + 1835300, 1835301, 1835302, 1835303, 1835304, 1835328, 1835329, + 1835330, 1835331, 1835332, 1835333, 1835334, 1835335, 1835336, + 1835337, 1835338, 1835339, 1835340, 1835361, 1835362, 1835363, + 1835364, 1835365, 1835366, 1835367, 1835392, 1835393, 1835394, + 1835395, 1835396, 1835397, 1835398, 1835399, 1835400, 1835401, + 1835402, 1835403, 1835404, 1835425, 1835426, 1835427, 1835428, + 1835429, 1835430, 1835456, 1835457, 1835458, 1835459, 1835460, + 1835461, 1835462, 1835463, 1835464, 1835465, 1835466, 1835467, + 1835468, 1835489, 1835490, 1835491, 1835492, 1835493, 1835520, + 1835521, 1835522, 1835523, 1835524, 1835525, 1835526, 1835527, + 1835528, 1835529, 1835530, 1835531, 1835532, 1835553, 1835554, + 1835555, 1835556, 1835584, 1835585, 1835586, 1835587, 1835588, + 1835589, 1835590, 1835591, 1835592, 1835593, 1835594, 1835595, + 1835596, 1835617, 1835618, 1835619, 1835648, 1835649, 1835650, + 1835651, 1835652, 1835653, 1835654, 1835655, 1835656, 1835657, + 1835658, 1835659, 1835681, 1835713, 1835714, 1835715, 1835716, + 1835717, 1835718, 1835719, 1835720, 1835721, 1835722, 1835780, + 1835781, 1835783, 1835784, 1837122, 1837123, 1837124, 1837125, + 1837126, 1837127, 1837128, 1837129, 1837130, 1837155, 1837156, + 1837157, 1837158, 1837159, 1837160, 1837161, 1837162, 1837163, + 1837185, 1837186, 1837187, 1837188, 1837189, 1837190, 1837191, + 1837192, 1837193, 1837194, 1837219, 1837220, 1837221, 1837222, + 1837223, 1837224, 1837225, 1837226, 1837227, 1837228, 1837248, + 1837249, 1837250, 1837251, 1837252, 1837253, 1837254, 1837255, + 1837256, 1837257, 1837281, 1837282, 1837283, 1837284, 1837285, + 1837286, 1837287, 1837288, 1837289, 1837290, 1837291, 1837292, + 1837312, 1837313, 1837314, 1837315, 1837316, 1837317, 1837318, + 1837319, 1837320, 1837345, 1837346, 1837347, 1837348, 1837349, + 1837350, 1837351, 1837352, 1837353, 1837354, 1837355, 1837356, + 1837376, 1837377, 1837378, 1837379, 1837380, 1837381, 1837382, + 1837383, 1837384, 1837409, 1837410, 1837411, 1837412, 1837413, + 1837414, 1837415, 1837416, 1837417, 1837418, 1837419, 1837420, + 1837421, 1837440, 1837441, 1837442, 1837443, 1837444, 1837445, + 1837446, 1837447, 1837473, 1837474, 1837475, 1837476, 1837477, + 1837478, 1837479, 1837480, 1837481, 1837482, 1837483, 1837484, + 1837485, 1837504, 1837505, 1837506, 1837507, 1837508, 1837509, + 1837537, 1837538, 1837539, 1837540, 1837541, 1837542, 1837543, + 1837544, 1837545, 1837546, 1837547, 1837548, 1837568, 1837569, + 1837570, 1837571, 1837572, 1837573, 1837601, 1837602, 1837603, + 1837604, 1837605, 1837606, 1837607, 1837608, 1837609, 1837610, + 1837611, 1837612, 1837613, 1837632, 1837633, 1837634, 1837635, + 1837636, 1837665, 1837666, 1837667, 1837668, 1837669, 1837670, + 1837671, 1837672, 1837673, 1837674, 1837675, 1837676, 1837677, + 1837696, 1837697, 1837698, 1837729, 1837730, 1837731, 1837732, + 1837733, 1837734, 1837735, 1837736, 1837737, 1837738, 1837739, + 1837740, 1837760, 1837761, 1837793, 1837794, 1837795, 1837796, + 1837797, 1837798, 1837799, 1837800, 1837801, 1837802, 1837803, + 1837804, 1837857, 1837858, 1837859, 1837860, 1837861, 1837862, + 1837863, 1837864, 1837865, 1837866, 1837867, 1837923, 1837924, + 1837925, 1837926, 1837927, 1837928, 1837929, 1837930, 2097154, + 2097155, 2097156, 2097157, 2097158, 2097159, 2097160, 2097161, + 2097162, 2097163, 2097186, 2097187, 2097188, 2097189, 2097190, + 2097191, 2097192, 2097193, 2097194, 2097195, 2097219, 2097220, + 2097221, 2097222, 2097223, 2097224, 2097225, 2097226, 2097227, + 2097250, 2097251, 2097252, 2097253, 2097254, 2097255, 2097256, + 2097257, 2097258, 2097283, 2097284, 2097285, 2097286, 2097287, + 2097288, 2097289, 2097290, 2097291, 2097292, 2097313, 2097314, + 2097315, 2097316, 2097317, 2097318, 2097319, 2097320, 2097321, + 2097322, 2097344, 2097345, 2097346, 2097347, 2097348, 2097349, + 2097350, 2097351, 2097352, 2097353, 2097354, 2097355, 2097356, + 2097357, 2097377, 2097378, 2097379, 2097380, 2097381, 2097382, + 2097383, 2097384, 2097385, 2097386, 2097408, 2097409, 2097410, + 2097411, 2097412, 2097413, 2097414, 2097415, 2097416, 2097417, + 2097418, 2097419, 2097420, 2097421, 2097441, 2097442, 2097443, + 2097444, 2097445, 2097446, 2097447, 2097448, 2097449, 2097472, + 2097473, 2097474, 2097475, 2097476, 2097477, 2097478, 2097479, + 2097480, 2097481, 2097482, 2097483, 2097484, 2097485, 2097505, + 2097506, 2097507, 2097508, 2097509, 2097510, 2097511, 2097512, + 2097536, 2097537, 2097538, 2097539, 2097540, 2097541, 2097542, + 2097543, 2097544, 2097545, 2097546, 2097547, 2097548, 2097549, + 2097569, 2097570, 2097571, 2097572, 2097573, 2097574, 2097575, + 2097600, 2097601, 2097602, 2097603, 2097604, 2097605, 2097606, + 2097607, 2097608, 2097609, 2097610, 2097611, 2097612, 2097633, + 2097634, 2097635, 2097636, 2097637, 2097664, 2097665, 2097666, + 2097667, 2097668, 2097669, 2097670, 2097671, 2097672, 2097673, + 2097674, 2097675, 2097676, 2097677, 2097697, 2097698, 2097699, + 2097700, 2097701, 2097728, 2097729, 2097730, 2097731, 2097732, + 2097733, 2097734, 2097735, 2097736, 2097737, 2097738, 2097739, + 2097740, 2097741, 2097761, 2097762, 2097763, 2097764, 2097792, + 2097793, 2097794, 2097795, 2097796, 2097797, 2097798, 2097799, + 2097800, 2097801, 2097802, 2097803, 2097804, 2097805, 2097825, + 2097826, 2097827, 2097856, 2097857, 2097858, 2097859, 2097860, + 2097861, 2097862, 2097863, 2097864, 2097865, 2097866, 2097867, + 2097868, 2097869, 2097889, 2097890, 2097921, 2097922, 2097923, + 2097924, 2097925, 2097926, 2097927, 2097928, 2097929, 2097930, + 2097931, 2097986, 2097987, 2097988, 2097989, 2097990, 2097991, + 2097992, 2097993, 2097994, 2097995, 2098053, 2098054, 2098056, + 2098057, 2099265, 2099266, 2099267, 2099268, 2099269, 2099270, + 2099271, 2099272, 2099273, 2099274, 2099275, 2099298, 2099299, + 2099300, 2099301, 2099302, 2099303, 2099304, 2099305, 2099306, + 2099307, 2099308, 2099328, 2099329, 2099330, 2099331, 2099332, + 2099333, 2099334, 2099335, 2099336, 2099337, 2099338, 2099361, + 2099362, 2099363, 2099364, 2099365, 2099366, 2099367, 2099368, + 2099369, 2099370, 2099371, 2099372, 2099392, 2099393, 2099394, + 2099395, 2099396, 2099397, 2099398, 2099399, 2099400, 2099401, + 2099425, 2099426, 2099427, 2099428, 2099429, 2099430, 2099431, + 2099432, 2099433, 2099434, 2099435, 2099436, 2099456, 2099457, + 2099458, 2099459, 2099460, 2099461, 2099462, 2099463, 2099464, + 2099465, 2099489, 2099490, 2099491, 2099492, 2099493, 2099494, + 2099495, 2099496, 2099497, 2099498, 2099499, 2099500, 2099501, + 2099520, 2099521, 2099522, 2099523, 2099524, 2099525, 2099526, + 2099527, 2099528, 2099553, 2099554, 2099555, 2099556, 2099557, + 2099558, 2099559, 2099560, 2099561, 2099562, 2099563, 2099564, + 2099565, 2099584, 2099585, 2099586, 2099587, 2099588, 2099589, + 2099590, 2099617, 2099618, 2099619, 2099620, 2099621, 2099622, + 2099623, 2099624, 2099625, 2099626, 2099627, 2099628, 2099648, + 2099649, 2099650, 2099651, 2099652, 2099653, 2099654, 2099681, + 2099682, 2099683, 2099684, 2099685, 2099686, 2099687, 2099688, + 2099689, 2099690, 2099691, 2099692, 2099693, 2099712, 2099713, + 2099714, 2099715, 2099716, 2099717, 2099745, 2099746, 2099747, + 2099748, 2099749, 2099750, 2099751, 2099752, 2099753, 2099754, + 2099755, 2099756, 2099757, 2099776, 2099777, 2099778, 2099779, + 2099809, 2099810, 2099811, 2099812, 2099813, 2099814, 2099815, + 2099816, 2099817, 2099818, 2099819, 2099820, 2099840, 2099841, + 2099842, 2099873, 2099874, 2099875, 2099876, 2099877, 2099878, + 2099879, 2099880, 2099881, 2099882, 2099883, 2099884, 2099937, + 2099938, 2099939, 2099940, 2099941, 2099942, 2099943, 2099944, + 2099945, 2099946, 2100002, 2100003, 2100004, 2100005, 2100007, + 2100008, 2100009, 2100010, 2359299, 2359300, 2359301, 2359302, + 2359303, 2359304, 2359305, 2359331, 2359332, 2359333, 2359334, + 2359335, 2359336, 2359337, 2359363, 2359364, 2359365, 2359366, + 2359367, 2359368, 2359369, 2359394, 2359395, 2359396, 2359397, + 2359398, 2359399, 2359400, 2359424, 2359426, 2359427, 2359428, + 2359429, 2359430, 2359431, 2359432, 2359433, 2359434, 2359457, + 2359458, 2359459, 2359460, 2359461, 2359462, 2359463, 2359464, + 2359488, 2359489, 2359490, 2359491, 2359492, 2359493, 2359494, + 2359495, 2359496, 2359497, 2359498, 2359521, 2359522, 2359523, + 2359524, 2359525, 2359526, 2359527, 2359552, 2359553, 2359554, + 2359555, 2359556, 2359557, 2359558, 2359559, 2359560, 2359561, + 2359562, 2359585, 2359586, 2359587, 2359588, 2359589, 2359590, + 2359616, 2359617, 2359618, 2359619, 2359620, 2359621, 2359622, + 2359623, 2359624, 2359625, 2359626, 2359649, 2359650, 2359651, + 2359652, 2359653, 2359680, 2359681, 2359682, 2359683, 2359684, + 2359685, 2359686, 2359687, 2359688, 2359689, 2359690, 2359713, + 2359714, 2359715, 2359716, 2359744, 2359745, 2359746, 2359747, + 2359748, 2359749, 2359750, 2359751, 2359752, 2359753, 2359754, + 2359777, 2359778, 2359779, 2359808, 2359809, 2359810, 2359811, + 2359812, 2359813, 2359814, 2359815, 2359816, 2359817, 2359841, + 2359873, 2359874, 2359875, 2359876, 2359877, 2359878, 2359879, + 2359880, 2359940, 2359941, 2359942, 2361410, 2361411, 2361412, + 2361413, 2361414, 2361415, 2361416, 2361443, 2361444, 2361445, + 2361446, 2361447, 2361448, 2361449, 2361474, 2361475, 2361476, + 2361477, 2361478, 2361479, 2361480, 2361508, 2361509, 2361510, + 2361511, 2361512, 2361513, 2361514, 2361536, 2361537, 2361538, + 2361539, 2361540, 2361541, 2361542, 2361543, 2361571, 2361572, + 2361573, 2361574, 2361575, 2361576, 2361577, 2361578, 2361600, + 2361601, 2361602, 2361603, 2361604, 2361605, 2361606, 2361633, + 2361634, 2361635, 2361636, 2361637, 2361638, 2361639, 2361640, + 2361641, 2361642, 2361664, 2361665, 2361666, 2361667, 2361668, + 2361669, 2361670, 2361697, 2361698, 2361699, 2361700, 2361701, + 2361702, 2361703, 2361704, 2361705, 2361706, 2361707, 2361728, + 2361729, 2361730, 2361731, 2361732, 2361733, 2361761, 2361762, + 2361763, 2361764, 2361765, 2361766, 2361767, 2361768, 2361769, + 2361770, 2361771, 2361792, 2361793, 2361794, 2361795, 2361796, + 2361825, 2361826, 2361827, 2361828, 2361829, 2361830, 2361831, + 2361832, 2361833, 2361834, 2361835, 2361856, 2361857, 2361858, + 2361889, 2361890, 2361891, 2361892, 2361893, 2361894, 2361895, + 2361896, 2361897, 2361898, 2361920, 2361921, 2361953, 2361954, + 2361955, 2361956, 2361957, 2361958, 2361959, 2361960, 2361961, + 2361962, 2362017, 2362018, 2362019, 2362020, 2362021, 2362022, + 2362023, 2362024, 2362025, 2362083, 2362084, 2362085, 2362086, + 2362087, 2362088, 2621443, 2621444, 2621445, 2621446, 2621447, + 2621448, 2621449, 2621475, 2621476, 2621477, 2621478, 2621479, + 2621480, 2621481, 2621507, 2621508, 2621509, 2621510, 2621511, + 2621512, 2621513, 2621538, 2621539, 2621540, 2621541, 2621542, + 2621543, 2621544, 2621572, 2621573, 2621574, 2621575, 2621576, + 2621577, 2621578, 2621602, 2621603, 2621604, 2621605, 2621606, + 2621607, 2621608, 2621632, 2621635, 2621636, 2621637, 2621638, + 2621639, 2621640, 2621641, 2621642, 2621665, 2621666, 2621667, + 2621668, 2621669, 2621670, 2621671, 2621696, 2621697, 2621698, + 2621699, 2621700, 2621701, 2621702, 2621703, 2621704, 2621705, + 2621706, 2621729, 2621730, 2621731, 2621732, 2621733, 2621734, + 2621760, 2621761, 2621762, 2621763, 2621764, 2621765, 2621766, + 2621767, 2621768, 2621769, 2621770, 2621771, 2621793, 2621794, + 2621795, 2621796, 2621797, 2621798, 2621824, 2621825, 2621826, + 2621827, 2621828, 2621829, 2621830, 2621831, 2621832, 2621833, + 2621834, 2621835, 2621857, 2621858, 2621859, 2621860, 2621861, + 2621888, 2621889, 2621890, 2621891, 2621892, 2621893, 2621894, + 2621895, 2621896, 2621897, 2621898, 2621899, 2621921, 2621922, + 2621923, 2621924, 2621952, 2621953, 2621954, 2621955, 2621956, + 2621957, 2621958, 2621959, 2621960, 2621961, 2621962, 2621985, + 2621986, 2622016, 2622017, 2622018, 2622019, 2622020, 2622021, + 2622022, 2622023, 2622024, 2622025, 2622026, 2622049, 2622081, + 2622082, 2622083, 2622084, 2622085, 2622086, 2622087, 2622088, + 2622089, 2622147, 2622148, 2622149, 2622150, 2622151, 2622152, + 2623554, 2623555, 2623556, 2623557, 2623558, 2623559, 2623560, + 2623587, 2623588, 2623589, 2623590, 2623591, 2623592, 2623593, + 2623616, 2623617, 2623618, 2623619, 2623620, 2623621, 2623622, + 2623623, 2623624, 2623650, 2623651, 2623652, 2623653, 2623654, + 2623655, 2623656, 2623657, 2623658, 2623680, 2623681, 2623682, + 2623683, 2623684, 2623685, 2623686, 2623687, 2623713, 2623714, + 2623715, 2623716, 2623717, 2623718, 2623719, 2623720, 2623721, + 2623722, 2623744, 2623745, 2623746, 2623747, 2623748, 2623749, + 2623750, 2623777, 2623778, 2623779, 2623780, 2623781, 2623782, + 2623783, 2623784, 2623785, 2623786, 2623808, 2623809, 2623810, + 2623811, 2623812, 2623813, 2623841, 2623842, 2623843, 2623844, + 2623845, 2623846, 2623847, 2623848, 2623849, 2623850, 2623872, + 2623873, 2623874, 2623875, 2623876, 2623905, 2623906, 2623907, + 2623908, 2623909, 2623910, 2623911, 2623912, 2623913, 2623914, + 2623936, 2623937, 2623938, 2623939, 2623969, 2623970, 2623971, + 2623972, 2623973, 2623974, 2623975, 2623976, 2623977, 2623978, + 2624000, 2624001, 2624033, 2624034, 2624035, 2624036, 2624037, + 2624038, 2624039, 2624040, 2624041, 2624097, 2624098, 2624099, + 2624100, 2624101, 2624102, 2624103, 2624104, 2624164, 2624165, + 2624166, 2883587, 2883588, 2883589, 2883590, 2883591, 2883592, + 2883593, 2883619, 2883620, 2883621, 2883622, 2883623, 2883624, + 2883625, 2883651, 2883652, 2883653, 2883654, 2883655, 2883656, + 2883657, 2883682, 2883683, 2883684, 2883685, 2883686, 2883687, + 2883688, 2883712, 2883714, 2883715, 2883716, 2883717, 2883718, + 2883719, 2883720, 2883721, 2883722, 2883745, 2883746, 2883747, + 2883748, 2883749, 2883750, 2883751, 2883752, 2883776, 2883777, + 2883778, 2883779, 2883780, 2883781, 2883782, 2883783, 2883784, + 2883785, 2883786, 2883809, 2883810, 2883811, 2883812, 2883813, + 2883814, 2883815, 2883840, 2883841, 2883842, 2883843, 2883844, + 2883845, 2883846, 2883847, 2883848, 2883849, 2883850, 2883873, + 2883874, 2883875, 2883876, 2883877, 2883878, 2883904, 2883905, + 2883906, 2883907, 2883908, 2883909, 2883910, 2883911, 2883912, + 2883913, 2883914, 2883937, 2883938, 2883939, 2883940, 2883941, + 2883968, 2883969, 2883970, 2883971, 2883972, 2883973, 2883974, + 2883975, 2883976, 2883977, 2883978, 2884001, 2884002, 2884003, + 2884004, 2884032, 2884033, 2884034, 2884035, 2884036, 2884037, + 2884038, 2884039, 2884040, 2884041, 2884042, 2884065, 2884066, + 2884067, 2884096, 2884097, 2884098, 2884099, 2884100, 2884101, + 2884102, 2884103, 2884104, 2884105, 2884129, 2884161, 2884162, + 2884163, 2884164, 2884165, 2884166, 2884167, 2884168, 2884228, + 2884229, 2884230, 2885698, 2885699, 2885700, 2885701, 2885702, + 2885703, 2885704, 2885731, 2885732, 2885733, 2885734, 2885735, + 2885736, 2885737, 2885762, 2885763, 2885764, 2885765, 2885766, + 2885767, 2885768, 2885796, 2885797, 2885798, 2885799, 2885800, + 2885801, 2885802, 2885824, 2885825, 2885826, 2885827, 2885828, + 2885829, 2885830, 2885831, 2885859, 2885860, 2885861, 2885862, + 2885863, 2885864, 2885865, 2885866, 2885888, 2885889, 2885890, + 2885891, 2885892, 2885893, 2885894, 2885921, 2885922, 2885923, + 2885924, 2885925, 2885926, 2885927, 2885928, 2885929, 2885930, + 2885952, 2885953, 2885954, 2885955, 2885956, 2885957, 2885958, + 2885985, 2885986, 2885987, 2885988, 2885989, 2885990, 2885991, + 2885992, 2885993, 2885994, 2885995, 2886016, 2886017, 2886018, + 2886019, 2886020, 2886021, 2886049, 2886050, 2886051, 2886052, + 2886053, 2886054, 2886055, 2886056, 2886057, 2886058, 2886059, + 2886080, 2886081, 2886082, 2886083, 2886084, 2886113, 2886114, + 2886115, 2886116, 2886117, 2886118, 2886119, 2886120, 2886121, + 2886122, 2886123, 2886144, 2886145, 2886146, 2886177, 2886178, + 2886179, 2886180, 2886181, 2886182, 2886183, 2886184, 2886185, + 2886186, 2886208, 2886209, 2886241, 2886242, 2886243, 2886244, + 2886245, 2886246, 2886247, 2886248, 2886249, 2886250, 2886305, + 2886306, 2886307, 2886308, 2886309, 2886310, 2886311, 2886312, + 2886313, 2886371, 2886372, 2886373, 2886374, 2886375, 2886376, + 3145731, 3145732, 3145733, 3145734, 3145735, 3145736, 3145737, + 3145763, 3145764, 3145765, 3145766, 3145767, 3145768, 3145769, + 3145795, 3145796, 3145797, 3145798, 3145799, 3145800, 3145801, + 3145826, 3145827, 3145828, 3145829, 3145830, 3145831, 3145832, + 3145860, 3145861, 3145862, 3145863, 3145864, 3145865, 3145866, + 3145890, 3145891, 3145892, 3145893, 3145894, 3145895, 3145896, + 3145920, 3145923, 3145924, 3145925, 3145926, 3145927, 3145928, + 3145929, 3145930, 3145953, 3145954, 3145955, 3145956, 3145957, + 3145958, 3145959, 3145984, 3145985, 3145986, 3145987, 3145988, + 3145989, 3145990, 3145991, 3145992, 3145993, 3145994, 3146017, + 3146018, 3146019, 3146020, 3146021, 3146022, 3146048, 3146049, + 3146050, 3146051, 3146052, 3146053, 3146054, 3146055, 3146056, + 3146057, 3146058, 3146059, 3146081, 3146082, 3146083, 3146084, + 3146085, 3146086, 3146112, 3146113, 3146114, 3146115, 3146116, + 3146117, 3146118, 3146119, 3146120, 3146121, 3146122, 3146123, + 3146145, 3146146, 3146147, 3146148, 3146149, 3146176, 3146177, + 3146178, 3146179, 3146180, 3146181, 3146182, 3146183, 3146184, + 3146185, 3146186, 3146187, 3146209, 3146210, 3146211, 3146212, + 3146240, 3146241, 3146242, 3146243, 3146244, 3146245, 3146246, + 3146247, 3146248, 3146249, 3146250, 3146273, 3146274, 3146304, + 3146305, 3146306, 3146307, 3146308, 3146309, 3146310, 3146311, + 3146312, 3146313, 3146314, 3146337, 3146369, 3146370, 3146371, + 3146372, 3146373, 3146374, 3146375, 3146376, 3146377, 3146435, + 3146436, 3146437, 3146438, 3146439, 3146440, 3147842, 3147843, + 3147844, 3147845, 3147846, 3147847, 3147848, 3147875, 3147876, + 3147877, 3147878, 3147879, 3147880, 3147881, 3147904, 3147905, + 3147906, 3147907, 3147908, 3147909, 3147910, 3147911, 3147912, + 3147938, 3147939, 3147940, 3147941, 3147942, 3147943, 3147944, + 3147945, 3147946, 3147968, 3147969, 3147970, 3147971, 3147972, + 3147973, 3147974, 3147975, 3148001, 3148002, 3148003, 3148004, + 3148005, 3148006, 3148007, 3148008, 3148009, 3148010, 3148032, + 3148033, 3148034, 3148035, 3148036, 3148037, 3148038, 3148065, + 3148066, 3148067, 3148068, 3148069, 3148070, 3148071, 3148072, + 3148073, 3148074, 3148096, 3148097, 3148098, 3148099, 3148100, + 3148101, 3148129, 3148130, 3148131, 3148132, 3148133, 3148134, + 3148135, 3148136, 3148137, 3148138, 3148160, 3148161, 3148162, + 3148163, 3148164, 3148193, 3148194, 3148195, 3148196, 3148197, + 3148198, 3148199, 3148200, 3148201, 3148202, 3148224, 3148225, + 3148226, 3148227, 3148257, 3148258, 3148259, 3148260, 3148261, + 3148262, 3148263, 3148264, 3148265, 3148266, 3148288, 3148289, + 3148321, 3148322, 3148323, 3148324, 3148325, 3148326, 3148327, + 3148328, 3148329, 3148385, 3148386, 3148387, 3148388, 3148389, + 3148390, 3148391, 3148392, 3148452, 3148453, 3148454, 3407875, + 3407876, 3407877, 3407878, 3407879, 3407880, 3407907, 3407908, + 3407909, 3407910, 3407911, 3407912, 3407940, 3407941, 3407942, + 3407943, 3407944, 3407971, 3407972, 3407973, 3407974, 3407975, + 3408003, 3408004, 3408005, 3408006, 3408007, 3408008, 3408009, + 3408033, 3408034, 3408035, 3408036, 3408037, 3408038, 3408039, + 3408064, 3408065, 3408066, 3408067, 3408068, 3408069, 3408070, + 3408071, 3408072, 3408073, 3408097, 3408098, 3408099, 3408100, + 3408101, 3408102, 3408128, 3408129, 3408130, 3408131, 3408132, + 3408133, 3408134, 3408135, 3408136, 3408137, 3408161, 3408162, + 3408163, 3408164, 3408165, 3408192, 3408193, 3408194, 3408195, + 3408196, 3408197, 3408198, 3408199, 3408200, 3408201, 3408225, + 3408226, 3408227, 3408228, 3408256, 3408257, 3408258, 3408259, + 3408260, 3408261, 3408262, 3408263, 3408264, 3408265, 3408289, + 3408290, 3408291, 3408320, 3408321, 3408322, 3408323, 3408324, + 3408325, 3408326, 3408327, 3408328, 3408353, 3408385, 3408386, + 3408387, 3408388, 3408389, 3408390, 3408391, 3408452, 3408453, + 3409987, 3409988, 3409989, 3409990, 3409991, 3410020, 3410021, + 3410022, 3410023, 3410024, 3410050, 3410051, 3410052, 3410053, + 3410054, 3410055, 3410084, 3410085, 3410086, 3410087, 3410088, + 3410089, 3410113, 3410114, 3410115, 3410116, 3410117, 3410118, + 3410148, 3410149, 3410150, 3410151, 3410152, 3410153, 3410176, + 3410177, 3410178, 3410179, 3410180, 3410181, 3410209, 3410211, + 3410212, 3410213, 3410214, 3410215, 3410216, 3410217, 3410240, + 3410241, 3410242, 3410243, 3410244, 3410245, 3410273, 3410274, + 3410275, 3410276, 3410277, 3410278, 3410279, 3410280, 3410281, + 3410282, 3410304, 3410305, 3410306, 3410307, 3410308, 3410337, + 3410338, 3410339, 3410340, 3410341, 3410342, 3410343, 3410344, + 3410345, 3410346, 3410368, 3410369, 3410370, 3410401, 3410402, + 3410403, 3410404, 3410405, 3410406, 3410407, 3410408, 3410409, + 3410432, 3410433, 3410465, 3410466, 3410467, 3410468, 3410469, + 3410470, 3410471, 3410472, 3410473, 3410529, 3410530, 3410531, + 3410532, 3410533, 3410534, 3410535, 3410536, 3410595, 3410596, + 3410597, 3410598, 3410599, 3670019, 3670020, 3670021, 3670022, + 3670023, 3670024, 3670051, 3670052, 3670053, 3670054, 3670055, + 3670056, 3670084, 3670085, 3670086, 3670087, 3670088, 3670115, + 3670116, 3670117, 3670118, 3670119, 3670148, 3670149, 3670150, + 3670151, 3670152, 3670153, 3670178, 3670179, 3670180, 3670181, + 3670182, 3670183, 3670212, 3670213, 3670214, 3670215, 3670216, + 3670217, 3670241, 3670242, 3670243, 3670244, 3670245, 3670246, + 3670272, 3670273, 3670275, 3670276, 3670277, 3670278, 3670279, + 3670280, 3670281, 3670305, 3670306, 3670307, 3670308, 3670309, + 3670336, 3670337, 3670338, 3670339, 3670340, 3670341, 3670342, + 3670343, 3670344, 3670345, 3670346, 3670369, 3670370, 3670371, + 3670372, 3670373, 3670400, 3670401, 3670402, 3670403, 3670404, + 3670405, 3670406, 3670407, 3670408, 3670409, 3670410, 3670433, + 3670434, 3670435, 3670436, 3670464, 3670465, 3670466, 3670467, + 3670468, 3670469, 3670470, 3670471, 3670472, 3670473, 3670497, + 3670498, 3670528, 3670529, 3670530, 3670531, 3670532, 3670533, + 3670534, 3670535, 3670536, 3670537, 3670561, 3670593, 3670594, + 3670595, 3670596, 3670597, 3670598, 3670599, 3670600, 3670659, + 3670660, 3670661, 3670662, 3670663, 3672131, 3672132, 3672133, + 3672134, 3672135, 3672164, 3672165, 3672166, 3672167, 3672168, + 3672193, 3672194, 3672195, 3672196, 3672197, 3672198, 3672199, + 3672227, 3672228, 3672229, 3672230, 3672231, 3672232, 3672233, + 3672256, 3672257, 3672258, 3672259, 3672260, 3672261, 3672262, + 3672289, 3672290, 3672291, 3672292, 3672293, 3672294, 3672295, + 3672296, 3672297, 3672320, 3672321, 3672322, 3672323, 3672324, + 3672325, 3672353, 3672354, 3672355, 3672356, 3672357, 3672358, + 3672359, 3672360, 3672361, 3672384, 3672385, 3672386, 3672387, + 3672388, 3672417, 3672418, 3672419, 3672420, 3672421, 3672422, + 3672423, 3672424, 3672425, 3672448, 3672449, 3672450, 3672451, + 3672481, 3672482, 3672483, 3672484, 3672485, 3672486, 3672487, + 3672488, 3672489, 3672512, 3672513, 3672545, 3672546, 3672547, + 3672548, 3672549, 3672550, 3672551, 3672552, 3672609, 3672610, + 3672611, 3672612, 3672613, 3672614, 3672615, 3672676, 3672677, + 3932163, 3932164, 3932165, 3932166, 3932167, 3932195, 3932196, + 3932197, 3932198, 3932199, 3932228, 3932229, 3932230, 3932231, + 3932259, 3932260, 3932261, 3932262, 3932291, 3932292, 3932293, + 3932294, 3932295, 3932296, 3932321, 3932322, 3932323, 3932324, + 3932325, 3932326, 3932352, 3932353, 3932354, 3932355, 3932356, + 3932357, 3932358, 3932359, 3932360, 3932385, 3932386, 3932387, + 3932388, 3932389, 3932416, 3932417, 3932418, 3932419, 3932420, + 3932421, 3932422, 3932423, 3932424, 3932449, 3932450, 3932451, + 3932452, 3932480, 3932481, 3932482, 3932483, 3932484, 3932485, + 3932486, 3932487, 3932488, 3932513, 3932514, 3932515, 3932544, + 3932545, 3932546, 3932547, 3932548, 3932549, 3932550, 3932551, + 3932577, 3932609, 3932610, 3932611, 3932612, 3932613, 3932614, + 3934275, 3934276, 3934277, 3934278, 3934308, 3934309, 3934310, + 3934311, 3934338, 3934339, 3934340, 3934341, 3934342, 3934372, + 3934373, 3934374, 3934375, 3934376, 3934401, 3934402, 3934403, + 3934404, 3934405, 3934436, 3934437, 3934438, 3934439, 3934440, + 3934464, 3934465, 3934466, 3934467, 3934468, 3934497, 3934499, + 3934500, 3934501, 3934502, 3934503, 3934504, 3934528, 3934529, + 3934530, 3934531, 3934561, 3934562, 3934563, 3934564, 3934565, + 3934566, 3934567, 3934568, 3934592, 3934593, 3934594, 3934625, + 3934626, 3934627, 3934628, 3934629, 3934630, 3934631, 3934632, + 3934656, 3934657, 3934689, 3934690, 3934691, 3934692, 3934693, + 3934694, 3934695, 3934696, 3934753, 3934754, 3934755, 3934756, + 3934757, 3934758, 3934759, 3934819, 3934820, 3934821, 3934822, + 4194307, 4194308, 4194309, 4194310, 4194311, 4194339, 4194340, + 4194341, 4194342, 4194343, 4194372, 4194373, 4194374, 4194375, + 4194403, 4194404, 4194405, 4194406, 4194436, 4194437, 4194438, + 4194439, 4194440, 4194466, 4194467, 4194468, 4194469, 4194470, + 4194500, 4194501, 4194502, 4194503, 4194504, 4194529, 4194530, + 4194531, 4194532, 4194533, 4194560, 4194561, 4194563, 4194564, + 4194565, 4194566, 4194567, 4194568, 4194593, 4194594, 4194595, + 4194596, 4194624, 4194625, 4194626, 4194627, 4194628, 4194629, + 4194630, 4194631, 4194632, 4194657, 4194658, 4194659, 4194688, + 4194689, 4194690, 4194691, 4194692, 4194693, 4194694, 4194695, + 4194696, 4194721, 4194722, 4194752, 4194753, 4194754, 4194755, + 4194756, 4194757, 4194758, 4194759, 4194760, 4194785, 4194817, + 4194818, 4194819, 4194820, 4194821, 4194822, 4194823, 4194883, + 4194884, 4194885, 4194886, 4196419, 4196420, 4196421, 4196422, + 4196452, 4196453, 4196454, 4196455, 4196481, 4196482, 4196483, + 4196484, 4196485, 4196486, 4196515, 4196516, 4196517, 4196518, + 4196519, 4196520, 4196544, 4196545, 4196546, 4196547, 4196548, + 4196549, 4196577, 4196578, 4196579, 4196580, 4196581, 4196582, + 4196583, 4196584, 4196608, 4196609, 4196610, 4196611, 4196612, + 4196641, 4196642, 4196643, 4196644, 4196645, 4196646, 4196647, + 4196648, 4196672, 4196673, 4196674, 4196675, 4196705, 4196706, + 4196707, 4196708, 4196709, 4196710, 4196711, 4196712, 4196736, + 4196737, 4196769, 4196770, 4196771, 4196772, 4196773, 4196774, + 4196775, 4196833, 4196834, 4196835, 4196836, 4196837, 4196838, + 4456451, 4456452, 4456453, 4456454, 4456455, 4456483, 4456484, + 4456485, 4456486, 4456487, 4456516, 4456517, 4456518, 4456519, + 4456547, 4456548, 4456549, 4456550, 4456579, 4456580, 4456581, + 4456582, 4456583, 4456584, 4456609, 4456610, 4456611, 4456612, + 4456613, 4456614, 4456640, 4456641, 4456642, 4456643, 4456644, + 4456645, 4456646, 4456647, 4456648, 4456673, 4456674, 4456675, + 4456676, 4456677, 4456704, 4456705, 4456706, 4456707, 4456708, + 4456709, 4456710, 4456711, 4456712, 4456737, 4456738, 4456739, + 4456740, 4456768, 4456769, 4456770, 4456771, 4456772, 4456773, + 4456774, 4456775, 4456776, 4456801, 4456802, 4456803, 4456832, + 4456833, 4456834, 4456835, 4456836, 4456837, 4456838, 4456839, + 4456865, 4456897, 4456898, 4456899, 4456900, 4456901, 4456902, + 4458563, 4458564, 4458565, 4458566, 4458596, 4458597, 4458598, + 4458599, 4458626, 4458627, 4458628, 4458629, 4458630, 4458660, + 4458661, 4458662, 4458663, 4458664, 4458689, 4458690, 4458691, + 4458692, 4458693, 4458724, 4458725, 4458726, 4458727, 4458728, + 4458752, 4458753, 4458754, 4458755, 4458756, 4458785, 4458787, + 4458788, 4458789, 4458790, 4458791, 4458792, 4458816, 4458817, + 4458818, 4458819, 4458849, 4458850, 4458851, 4458852, 4458853, + 4458854, 4458855, 4458856, 4458880, 4458881, 4458882, 4458913, + 4458914, 4458915, 4458916, 4458917, 4458918, 4458919, 4458920, + 4458944, 4458945, 4458977, 4458978, 4458979, 4458980, 4458981, + 4458982, 4458983, 4458984, 4459041, 4459042, 4459043, 4459044, + 4459045, 4459046, 4459047, 4459107, 4459108, 4459109, 4459110, + 4718595, 4718596, 4718597, 4718598, 4718599, 4718627, 4718628, + 4718629, 4718630, 4718631, 4718660, 4718661, 4718662, 4718663, + 4718691, 4718692, 4718693, 4718694, 4718724, 4718725, 4718726, + 4718727, 4718728, 4718754, 4718755, 4718756, 4718757, 4718758, + 4718788, 4718789, 4718790, 4718791, 4718792, 4718817, 4718818, + 4718819, 4718820, 4718821, 4718848, 4718849, 4718851, 4718852, + 4718853, 4718854, 4718855, 4718856, 4718881, 4718882, 4718883, + 4718884, 4718912, 4718913, 4718914, 4718915, 4718916, 4718917, + 4718918, 4718919, 4718920, 4718945, 4718946, 4718947, 4718976, + 4718977, 4718978, 4718979, 4718980, 4718981, 4718982, 4718983, + 4718984, 4719009, 4719010, 4719040, 4719041, 4719042, 4719043, + 4719044, 4719045, 4719046, 4719047, 4719048, 4719073, 4719105, + 4719106, 4719107, 4719108, 4719109, 4719110, 4719111, 4719171, + 4719172, 4719173, 4719174, 4720707, 4720708, 4720709, 4720710, + 4720740, 4720741, 4720742, 4720743, 4720769, 4720770, 4720771, + 4720772, 4720773, 4720774, 4720803, 4720804, 4720805, 4720806, + 4720807, 4720808, 4720832, 4720833, 4720834, 4720835, 4720836, + 4720837, 4720865, 4720866, 4720867, 4720868, 4720869, 4720870, + 4720871, 4720872, 4720896, 4720897, 4720898, 4720899, 4720900, + 4720929, 4720930, 4720931, 4720932, 4720933, 4720934, 4720935, + 4720936, 4720960, 4720961, 4720962, 4720963, 4720993, 4720994, + 4720995, 4720996, 4720997, 4720998, 4720999, 4721000, 4721024, + 4721025, 4721057, 4721058, 4721059, 4721060, 4721061, 4721062, + 4721063, 4721121, 4721122, 4721123, 4721124, 4721125, 4721126, + 4980739, 4980740, 4980741, 4980742, 4980771, 4980772, 4980773, + 4980774, 4980804, 4980805, 4980806, 4980835, 4980836, 4980837, + 4980867, 4980868, 4980869, 4980870, 4980871, 4980897, 4980898, + 4980899, 4980900, 4980901, 4980928, 4980929, 4980930, 4980931, + 4980932, 4980933, 4980934, 4980935, 4980961, 4980962, 4980963, + 4980964, 4980992, 4980993, 4980994, 4980995, 4980996, 4980997, + 4980998, 4980999, 4981025, 4981026, 4981027, 4981056, 4981057, + 4981058, 4981059, 4981060, 4981061, 4981062, 4981089, 4981121, + 4981122, 4981123, 4981124, 4981125, 4982851, 4982852, 4982853, + 4982884, 4982885, 4982886, 4982914, 4982915, 4982916, 4982917, + 4982948, 4982949, 4982950, 4982951, 4982977, 4982978, 4982979, + 4982980, 4983012, 4983013, 4983014, 4983015, 4983040, 4983041, + 4983042, 4983043, 4983073, 4983075, 4983076, 4983077, 4983078, + 4983079, 4983104, 4983105, 4983106, 4983137, 4983138, 4983139, + 4983140, 4983141, 4983142, 4983143, 4983168, 4983169, 4983201, + 4983202, 4983203, 4983204, 4983205, 4983206, 4983207, 4983265, + 4983266, 4983267, 4983268, 4983269, 4983270, 4983331, 4983332, + 4983333, 5242883, 5242884, 5242885, 5242886, 5242915, 5242916, + 5242917, 5242918, 5242948, 5242949, 5242950, 5242979, 5242980, + 5242981, 5243012, 5243013, 5243014, 5243015, 5243042, 5243043, + 5243044, 5243045, 5243076, 5243077, 5243078, 5243079, 5243105, + 5243106, 5243107, 5243108, 5243136, 5243137, 5243139, 5243140, + 5243141, 5243142, 5243143, 5243169, 5243170, 5243171, 5243200, + 5243201, 5243202, 5243203, 5243204, 5243205, 5243206, 5243207, + 5243233, 5243234, 5243264, 5243265, 5243266, 5243267, 5243268, + 5243269, 5243270, 5243271, 5243297, 5243329, 5243330, 5243331, + 5243332, 5243333, 5243334, 5243395, 5243396, 5243397, 5244995, + 5244996, 5244997, 5245028, 5245029, 5245030, 5245057, 5245058, + 5245059, 5245060, 5245061, 5245091, 5245092, 5245093, 5245094, + 5245095, 5245120, 5245121, 5245122, 5245123, 5245124, 5245153, + 5245154, 5245155, 5245156, 5245157, 5245158, 5245159, 5245184, + 5245185, 5245186, 5245187, 5245217, 5245218, 5245219, 5245220, + 5245221, 5245222, 5245223, 5245248, 5245249, 5245281, 5245282, + 5245283, 5245284, 5245285, 5245286, 5245345, 5245346, 5245347, + 5245348, 5245349, 5505027, 5505028, 5505029, 5505030, 5505059, + 5505060, 5505061, 5505062, 5505092, 5505093, 5505094, 5505123, + 5505124, 5505125, 5505155, 5505156, 5505157, 5505158, 5505159, + 5505185, 5505186, 5505187, 5505188, 5505189, 5505216, 5505217, + 5505218, 5505219, 5505220, 5505221, 5505222, 5505223, 5505249, + 5505250, 5505251, 5505252, 5505280, 5505281, 5505282, 5505283, + 5505284, 5505285, 5505286, 5505287, 5505313, 5505314, 5505315, + 5505344, 5505345, 5505346, 5505347, 5505348, 5505349, 5505350, + 5505377, 5505409, 5505410, 5505411, 5505412, 5505413, 5507139, + 5507140, 5507141, 5507172, 5507173, 5507174, 5507202, 5507203, + 5507204, 5507205, 5507236, 5507237, 5507238, 5507239, 5507265, + 5507266, 5507267, 5507268, 5507300, 5507301, 5507302, 5507303, + 5507328, 5507329, 5507330, 5507331, 5507361, 5507363, 5507364, + 5507365, 5507366, 5507367, 5507392, 5507393, 5507394, 5507425, + 5507426, 5507427, 5507428, 5507429, 5507430, 5507431, 5507456, + 5507457, 5507489, 5507490, 5507491, 5507492, 5507493, 5507494, + 5507495, 5507553, 5507554, 5507555, 5507556, 5507557, 5507558, + 5507619, 5507620, 5507621, 5767171, 5767172, 5767173, 5767174, + 5767203, 5767204, 5767205, 5767206, 5767236, 5767237, 5767238, + 5767267, 5767268, 5767269, 5767300, 5767301, 5767302, 5767303, + 5767330, 5767331, 5767332, 5767333, 5767364, 5767365, 5767366, + 5767367, 5767393, 5767394, 5767395, 5767396, 5767424, 5767425, + 5767427, 5767428, 5767429, 5767430, 5767431, 5767457, 5767458, + 5767459, 5767488, 5767489, 5767490, 5767491, 5767492, 5767493, + 5767494, 5767495, 5767521, 5767522, 5767552, 5767553, 5767554, + 5767555, 5767556, 5767557, 5767558, 5767559, 5767585, 5767617, + 5767618, 5767619, 5767620, 5767621, 5767622, 5767683, 5767684, + 5767685, 5769283, 5769284, 5769285, 5769316, 5769317, 5769318, + 5769345, 5769346, 5769347, 5769348, 5769349, 5769379, 5769380, + 5769381, 5769382, 5769383, 5769408, 5769409, 5769410, 5769411, + 5769412, 5769441, 5769442, 5769443, 5769444, 5769445, 5769446, + 5769447, 5769472, 5769473, 5769474, 5769475, 5769505, 5769506, + 5769507, 5769508, 5769509, 5769510, 5769511, 5769536, 5769537, + 5769569, 5769570, 5769571, 5769572, 5769573, 5769574, 5769633, + 5769634, 5769635, 5769636, 5769637 + + + 340, 0, 0, 1, 1, 1, 2, 2, 40, 200, 200, 201, + 201, 201, 202, 202, 440, 0, 0, 1, 1, 1, 2, 2, + 42, 540, 200, 200, 201, 201, 201, 202, 202, 342, 0, 510, + 0, 0, 0, 1, 1, 1, 2, 2, 2, 200, 200, 201, + 201, 201, 202, 202, 202, 0, 0, 0, 0, 0, 1, 1, + 1, 2, 2, 2, 72, 200, 201, 201, 201, 202, 202, 202, + 272, 1, 0, 0, 0, 1, 1, 1, 1, 2, 2, 212, + 72, 201, 201, 201, 202, 202, 212, 272, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 12, 201, 201, 202, 202, 412, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, + 201, 202, 202, 202, 272, 2, 2, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 72, 202, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 142, 202, 242, 272, 2, + 2, 2, 2, 2, 2, 2, 2, 72, 242, 212, 2, 172, + 2, 212, 142, 400, 400, 401, 401, 401, 402, 402, 72, 200, + 200, 201, 201, 201, 202, 202, 272, 310, 400, 400, 401, 401, + 402, 402, 402, 110, 200, 200, 201, 201, 202, 202, 202, 400, + 400, 400, 401, 401, 401, 402, 402, 42, 240, 140, 200, 200, + 200, 201, 201, 201, 202, 202, 342, 400, 400, 401, 401, 401, + 402, 402, 12, 400, 400, 400, 200, 200, 201, 201, 201, 202, + 202, 412, 401, 401, 401, 401, 402, 402, 402, 400, 400, 400, + 400, 201, 201, 201, 201, 202, 202, 202, 401, 401, 401, 402, + 402, 572, 401, 401, 401, 401, 401, 201, 201, 201, 202, 202, + 372, 401, 402, 402, 402, 402, 401, 401, 401, 401, 401, 401, + 201, 202, 202, 202, 202, 402, 402, 402, 12, 401, 401, 401, + 401, 401, 401, 401, 202, 202, 202, 412, 402, 402, 542, 402, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 442, 472, 402, + 402, 402, 402, 402, 402, 402, 402, 402, 472, 542, 402, 402, + 412, 12, 402, 402, 442, 472, 472, 472, 472, 340, 400, 400, + 401, 401, 402, 402, 402, 40, 200, 200, 201, 201, 202, 202, + 202, 400, 400, 401, 401, 401, 402, 402, 542, 0, 0, 1, + 1, 1, 2, 2, 442, 410, 400, 401, 401, 401, 402, 402, + 402, 72, 10, 0, 1, 1, 1, 2, 2, 2, 272, 0, + 540, 440, 400, 400, 400, 401, 401, 401, 402, 402, 42, 0, + 0, 1, 1, 1, 2, 2, 342, 0, 0, 0, 0, 400, + 401, 401, 401, 401, 402, 402, 402, 1, 1, 1, 1, 2, + 2, 2, 1, 0, 0, 0, 0, 401, 401, 401, 401, 402, + 402, 402, 72, 1, 1, 1, 2, 2, 2, 272, 1, 1, + 1, 1, 1, 1, 401, 401, 401, 402, 402, 52, 1, 1, + 2, 2, 252, 1, 1, 1, 1, 1, 1, 1, 401, 402, + 402, 402, 402, 2, 2, 2, 2, 2, 2, 1, 1, 1, + 1, 1, 2, 402, 402, 402, 402, 72, 2, 2, 2, 272, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 402, 402, 142, + 2, 242, 142, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 242, 72, 272, 242, 2, 2, 2, 2, 2, 2, 142, 172, + 152, 152, 172, 240, 400, 400, 401, 401, 401, 402, 402, 42, + 140, 200, 200, 201, 201, 201, 202, 202, 342, 200, 400, 400, + 401, 401, 401, 402, 402, 402, 210, 200, 200, 200, 201, 201, + 201, 202, 202, 202, 200, 400, 401, 401, 401, 402, 402, 402, + 572, 200, 200, 200, 200, 201, 201, 201, 202, 202, 202, 372, + 201, 401, 401, 401, 402, 402, 402, 552, 201, 200, 201, 201, + 201, 201, 201, 202, 202, 202, 352, 201, 401, 401, 402, 402, + 402, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, 201, + 402, 402, 402, 402, 552, 201, 201, 201, 201, 201, 201, 202, + 202, 202, 202, 352, 202, 402, 402, 402, 572, 202, 201, 201, + 201, 201, 202, 202, 202, 202, 202, 372, 202, 402, 542, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 442, 42, 202, 202, + 202, 202, 202, 202, 202, 202, 342, 472, 542, 202, 202, 452, + 202, 202, 442, 472, 472, 472, 340, 0, 1, 1, 1, 2, + 2, 2, 572, 40, 200, 201, 201, 201, 202, 202, 202, 372, + 440, 0, 0, 1, 1, 1, 2, 2, 2, 540, 200, 200, + 201, 201, 201, 202, 202, 202, 0, 510, 0, 0, 0, 1, + 1, 1, 2, 2, 2, 72, 200, 200, 201, 201, 201, 202, + 202, 202, 272, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 2, 2, 52, 201, 201, 201, 201, 202, 202, 202, 252, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 52, 201, + 201, 201, 202, 202, 202, 252, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 201, 201, 202, 202, 202, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 52, 202, 202, + 202, 202, 252, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 52, 202, 202, 202, 252, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 342, 2, + 2, 2, 2, 2, 2, 2, 2, 42, 172, 172, 242, 212, + 2, 2, 152, 2, 2, 212, 142, 172, 172, 400, 400, 401, + 401, 401, 402, 402, 142, 200, 200, 201, 201, 201, 202, 202, + 242, 310, 400, 401, 401, 401, 402, 402, 402, 42, 110, 200, + 201, 201, 201, 202, 202, 202, 342, 400, 400, 401, 401, 401, + 402, 402, 402, 12, 240, 140, 200, 200, 201, 201, 201, 202, + 202, 202, 412, 400, 401, 401, 401, 402, 402, 402, 402, 400, + 400, 400, 200, 201, 201, 201, 202, 202, 202, 202, 401, 401, + 401, 402, 402, 402, 402, 572, 401, 400, 400, 401, 201, 201, + 201, 202, 202, 202, 202, 372, 401, 401, 402, 402, 402, 552, + 401, 401, 401, 401, 401, 201, 201, 202, 202, 202, 352, 401, + 402, 402, 402, 402, 401, 401, 401, 401, 401, 401, 201, 202, + 202, 202, 202, 402, 402, 402, 402, 572, 402, 401, 401, 401, + 401, 401, 402, 202, 202, 202, 202, 372, 402, 402, 12, 402, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 412, 442, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 402, 542, 442, 572, + 402, 402, 402, 402, 402, 402, 402, 402, 372, 472, 452, 452, + 452, 452, 472, 340, 400, 401, 401, 401, 402, 402, 402, 72, + 40, 200, 201, 201, 201, 202, 202, 202, 272, 400, 400, 401, + 401, 402, 402, 402, 542, 0, 0, 1, 1, 2, 2, 2, + 442, 410, 400, 401, 401, 401, 402, 402, 402, 42, 10, 0, + 1, 1, 1, 2, 2, 2, 342, 0, 540, 440, 400, 400, + 401, 401, 401, 402, 402, 402, 402, 0, 1, 1, 1, 2, + 2, 2, 2, 0, 0, 0, 0, 400, 401, 401, 401, 402, + 402, 402, 402, 72, 1, 1, 1, 2, 2, 2, 2, 272, + 1, 1, 0, 0, 1, 401, 401, 401, 402, 402, 402, 402, + 72, 1, 1, 2, 2, 2, 2, 272, 1, 1, 1, 1, + 1, 1, 401, 401, 402, 402, 402, 52, 1, 2, 2, 2, + 252, 2, 1, 1, 1, 1, 1, 1, 402, 402, 402, 402, + 402, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, + 2, 402, 402, 402, 402, 72, 2, 2, 2, 272, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 402, 402, 402, 72, 2, + 2, 272, 142, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 242, 142, 242, 272, 2, 2, 2, 2, 2, 2, 2, 2, + 72, 172, 242, 212, 212, 142, 172, 240, 400, 400, 401, 401, + 402, 402, 402, 402, 140, 200, 200, 201, 201, 202, 202, 202, + 202, 200, 400, 400, 401, 401, 401, 402, 402, 402, 572, 210, + 200, 200, 200, 201, 201, 201, 202, 202, 202, 372, 200, 401, + 401, 401, 401, 402, 402, 402, 42, 200, 200, 200, 201, 201, + 201, 201, 202, 202, 202, 342, 201, 401, 401, 401, 402, 402, + 402, 12, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, + 412, 201, 401, 402, 402, 402, 402, 201, 201, 201, 201, 201, + 201, 202, 202, 202, 202, 202, 402, 402, 402, 402, 12, 201, + 201, 201, 201, 201, 202, 202, 202, 202, 202, 412, 202, 402, + 402, 402, 542, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 442, 202, 402, 402, 572, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 372, 42, 472, 202, 202, 202, 202, 202, + 202, 202, 202, 342, 472, 542, 202, 202, 202, 452, 202, 202, + 202, 442, 472, 472, 472, 472, 340, 0, 1, 1, 1, 2, + 2, 2, 572, 40, 200, 201, 201, 201, 202, 202, 202, 372, + 440, 0, 1, 1, 1, 2, 2, 2, 2, 540, 200, 201, + 201, 201, 202, 202, 202, 202, 0, 510, 0, 0, 1, 1, + 1, 2, 2, 2, 2, 72, 200, 201, 201, 201, 202, 202, + 202, 202, 272, 0, 0, 0, 0, 1, 1, 1, 2, 2, + 2, 2, 42, 201, 201, 201, 202, 202, 202, 202, 342, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 112, 201, + 201, 202, 202, 202, 202, 312, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 201, 202, 202, 202, 202, 2, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 112, 202, 202, + 202, 202, 312, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 142, 202, 202, 202, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 342, 2, + 2, 2, 2, 2, 2, 2, 2, 42, 172, 172, 242, 2, + 2, 2, 152, 2, 2, 2, 142, 172, 152, 152, 172, 400, + 400, 401, 401, 402, 402, 402, 142, 200, 200, 201, 201, 202, + 202, 202, 242, 310, 400, 401, 401, 401, 402, 402, 402, 42, + 110, 200, 201, 201, 201, 202, 202, 202, 342, 400, 400, 401, + 401, 401, 402, 402, 402, 402, 240, 140, 200, 200, 201, 201, + 201, 202, 202, 202, 202, 400, 401, 401, 401, 402, 402, 402, + 402, 572, 400, 400, 400, 200, 201, 201, 201, 202, 202, 202, + 202, 372, 401, 401, 401, 402, 402, 402, 402, 552, 401, 401, + 401, 401, 201, 201, 201, 202, 202, 202, 202, 352, 401, 401, + 402, 402, 402, 552, 401, 401, 401, 401, 401, 201, 201, 202, + 202, 202, 352, 402, 402, 402, 402, 402, 401, 401, 401, 401, + 401, 401, 202, 202, 202, 202, 202, 402, 402, 402, 402, 552, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 402, 402, + 202, 202, 202, 372, 442, 542, 402, 402, 402, 402, 402, 402, + 402, 402, 402, 542, 442, 572, 402, 402, 402, 402, 402, 402, + 402, 402, 372, 472, 542, 512, 512, 442, 472, 340, 400, 401, + 401, 402, 402, 402, 402, 142, 40, 200, 201, 201, 202, 202, + 202, 202, 242, 0, 1, 1, 1, 2, 2, 2, 12, 200, + 201, 201, 201, 202, 202, 202, 412, 410, 0, 1, 1, 2, + 2, 2, 2, 2, 10, 200, 201, 201, 202, 202, 202, 202, + 202, 200, 540, 440, 0, 0, 1, 1, 1, 2, 2, 2, + 2, 72, 200, 201, 201, 201, 202, 202, 202, 202, 272, 201, + 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 52, + 201, 201, 201, 202, 202, 202, 202, 252, 201, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 112, 201, 201, 202, + 202, 202, 202, 312, 201, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 242, 202, 202, 202, 202, 202, 142, 202, + 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 542, + 202, 202, 202, 202, 442, 202, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 112, 202, 202, 202, 312, 202, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 52, 202, + 202, 252, 212, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 212, 2, 72, 202, 272, 342, 2, 2, 2, 2, 2, 2, + 2, 2, 42, 242, 212, 2, 2, 152, 2, 2, 212, 142, + 172, 172, 240, 400, 401, 401, 401, 402, 402, 402, 402, 42, + 140, 200, 201, 201, 201, 202, 202, 202, 202, 342, 400, 400, + 401, 401, 401, 402, 402, 402, 402, 12, 210, 400, 200, 201, + 201, 201, 202, 202, 202, 202, 412, 401, 401, 401, 401, 402, + 402, 402, 402, 402, 400, 400, 401, 201, 201, 201, 202, 202, + 202, 202, 202, 401, 401, 401, 402, 402, 402, 402, 402, 572, + 401, 401, 401, 401, 201, 201, 202, 202, 202, 202, 202, 372, + 401, 402, 402, 402, 402, 402, 552, 401, 401, 401, 401, 401, + 202, 202, 202, 202, 202, 352, 402, 402, 402, 402, 402, 402, + 402, 401, 401, 401, 402, 402, 202, 202, 202, 202, 202, 402, + 402, 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 402, + 202, 202, 202, 202, 372, 402, 402, 402, 12, 402, 402, 402, + 402, 402, 402, 402, 402, 202, 202, 412, 12, 442, 542, 402, + 402, 402, 402, 402, 402, 402, 402, 412, 542, 442, 402, 402, + 402, 402, 402, 402, 402, 402, 402, 472, 452, 512, 342, 42, + 512, 452, 472, 340, 0, 1, 1, 2, 2, 2, 2, 2, + 572, 40, 200, 201, 201, 202, 202, 202, 202, 202, 372, 440, + 0, 1, 1, 1, 2, 2, 2, 2, 2, 540, 200, 201, + 201, 201, 202, 202, 202, 202, 202, 0, 510, 0, 0, 1, + 1, 1, 2, 2, 2, 2, 2, 72, 200, 201, 201, 201, + 202, 202, 202, 202, 202, 272, 1, 0, 0, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 42, 201, 201, 201, 202, 202, + 202, 202, 202, 342, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 112, 201, 201, 202, 202, 202, 202, 202, + 312, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 112, 172, 202, 202, 202, 202, 202, 312, 172, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 572, 202, 202, + 202, 202, 202, 372, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 112, 202, 202, 202, 202, 312, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 142, 202, + 202, 202, 242, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 72, 202, 202, 272, 342, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 42, 172, 172, 242, 212, 2, 2, + 112, 312, 2, 2, 212, 142, 172, 152, 152, 172, 400, 401, + 401, 401, 402, 402, 402, 402, 142, 200, 201, 201, 201, 202, + 202, 202, 202, 242, 310, 400, 401, 401, 402, 402, 402, 402, + 402, 42, 110, 200, 201, 201, 202, 202, 202, 202, 202, 342, + 400, 400, 401, 401, 402, 402, 402, 402, 402, 12, 240, 140, + 200, 200, 201, 201, 202, 202, 202, 202, 202, 412, 401, 401, + 401, 401, 402, 402, 402, 402, 402, 400, 400, 400, 201, 201, + 201, 201, 202, 202, 202, 202, 202, 401, 401, 402, 402, 402, + 402, 402, 402, 572, 401, 401, 401, 401, 201, 201, 202, 202, + 202, 202, 202, 202, 372, 401, 402, 402, 402, 402, 402, 512, + 552, 401, 401, 401, 401, 401, 201, 202, 202, 202, 202, 202, + 512, 352, 402, 402, 402, 402, 402, 112, 402, 401, 401, 401, + 401, 402, 202, 202, 202, 202, 202, 312, 402, 402, 402, 402, + 402, 552, 402, 402, 402, 402, 402, 402, 402, 202, 202, 202, + 202, 202, 352, 402, 402, 402, 402, 572, 402, 402, 402, 402, + 402, 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 12, + 402, 402, 402, 402, 402, 402, 402, 402, 402, 202, 202, 412, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, + 542, 442, 572, 402, 402, 402, 402, 512, 402, 402, 402, 402, + 372, 472, 542, 512, 372, 572, 512, 442, 472, 340, 400, 401, + 401, 402, 402, 402, 402, 402, 142, 40, 200, 201, 201, 202, + 202, 202, 202, 202, 242, 0, 1, 1, 1, 2, 2, 2, + 2, 12, 200, 201, 201, 201, 202, 202, 202, 202, 412, 410, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 10, 201, 201, + 201, 202, 202, 202, 202, 202, 202, 200, 540, 440, 0, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 72, 201, 201, 201, + 202, 202, 202, 202, 202, 202, 272, 201, 0, 0, 0, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 42, 201, 201, 202, + 202, 202, 202, 202, 202, 342, 201, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 112, 201, 202, 202, 202, + 202, 202, 202, 312, 201, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 2, 202, 202, 202, 202, 202, 202, + 202, 202, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 202, 202, 202, 202, 202, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 202, 202, 202, + 202, 202, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 112, 202, 202, 202, 312, 202, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 142, 202, 202, + 242, 212, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 212, 2, 72, 202, 272, 342, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 42, 172, 242, 2, 2, 42, 342, 2, 2, + 142, 172, 172, 172, 172, 172, 240, 400, 401, 401, 402, 402, + 402, 402, 402, 402, 572, 140, 200, 201, 201, 202, 202, 202, + 202, 202, 202, 372, 400, 400, 401, 401, 401, 402, 402, 402, + 402, 402, 42, 210, 400, 200, 201, 201, 201, 202, 202, 202, + 202, 202, 342, 401, 401, 401, 401, 402, 402, 402, 402, 402, + 402, 401, 401, 401, 201, 201, 201, 202, 202, 202, 202, 202, + 202, 401, 401, 402, 402, 402, 402, 402, 402, 402, 572, 401, + 401, 401, 401, 201, 202, 202, 202, 202, 202, 202, 202, 372, + 401, 402, 402, 402, 402, 402, 402, 442, 572, 401, 401, 401, + 401, 401, 202, 202, 202, 202, 202, 202, 542, 372, 402, 402, + 402, 402, 402, 402, 142, 402, 402, 402, 402, 402, 402, 202, + 202, 202, 202, 202, 242, 402, 402, 402, 402, 402, 402, 572, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 202, 202, 202, + 372, 402, 402, 402, 402, 402, 572, 402, 402, 402, 402, 402, + 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 402, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 402, 202, 202, 442, + 12, 442, 572, 402, 402, 402, 402, 402, 402, 402, 402, 402, + 412, 542, 372, 402, 402, 402, 402, 402, 402, 402, 402, 402, + 402, 472, 542, 512, 402, 402, 512, 442, 472, 1, 1, 1, + 2, 2, 2, 42, 201, 201, 201, 202, 202, 202, 342, 411, + 1, 1, 2, 2, 2, 2, 11, 201, 201, 202, 202, 202, + 202, 540, 440, 1, 1, 1, 2, 2, 2, 2, 72, 201, + 201, 201, 202, 202, 202, 202, 272, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 52, 201, 201, 202, 202, 202, 202, + 252, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 52, + 201, 202, 202, 202, 202, 252, 2, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 52, 202, 202, 202, 202, 252, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 52, 202, 202, 202, + 252, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 72, + 202, 202, 272, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 142, 242, 242, 212, 2, 2, 2, 2, 212, 142, 172, 172, + 172, 340, 401, 401, 402, 402, 402, 402, 40, 201, 201, 202, + 202, 202, 202, 401, 401, 401, 402, 402, 402, 42, 201, 201, + 201, 202, 202, 202, 342, 240, 401, 401, 401, 402, 402, 402, + 12, 140, 201, 201, 201, 202, 202, 202, 412, 401, 401, 401, + 402, 402, 402, 402, 401, 211, 401, 201, 201, 201, 202, 202, + 202, 202, 401, 401, 402, 402, 402, 402, 572, 401, 401, 401, + 401, 201, 201, 202, 202, 202, 202, 372, 402, 402, 402, 402, + 402, 572, 401, 401, 401, 401, 401, 202, 202, 202, 202, 202, + 372, 402, 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, + 202, 202, 202, 202, 372, 402, 402, 12, 402, 402, 402, 402, + 402, 402, 402, 202, 202, 412, 402, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 202, 442, 542, 402, 402, 402, 402, 402, + 402, 402, 442, 472, 452, 452, 452, 452, 472, 401, 401, 401, + 402, 402, 402, 42, 201, 201, 201, 202, 202, 202, 342, 341, + 1, 1, 2, 2, 2, 2, 41, 201, 201, 202, 202, 202, + 202, 1, 1, 1, 2, 2, 2, 42, 201, 201, 201, 202, + 202, 202, 342, 541, 441, 1, 1, 1, 2, 2, 2, 112, + 201, 201, 201, 202, 202, 202, 312, 201, 1, 511, 1, 1, + 1, 1, 2, 2, 2, 2, 201, 201, 202, 202, 202, 202, + 201, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 72, + 201, 202, 202, 202, 202, 272, 202, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 72, 202, 202, 202, 202, 272, 202, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 112, 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 142, 242, 242, 2, 2, 2, 2, 2, 2, 2, + 142, 172, 152, 152, 152, 152, 172, 311, 401, 401, 402, 402, + 402, 402, 111, 201, 201, 202, 202, 202, 202, 241, 401, 401, + 401, 402, 402, 402, 402, 572, 141, 201, 201, 201, 202, 202, + 202, 202, 372, 401, 401, 401, 402, 402, 402, 402, 552, 401, + 401, 401, 201, 201, 202, 202, 202, 202, 352, 401, 401, 402, + 402, 402, 402, 552, 401, 401, 401, 401, 201, 202, 202, 202, + 202, 352, 402, 402, 402, 402, 402, 552, 401, 401, 401, 401, + 402, 202, 202, 202, 202, 352, 402, 402, 402, 402, 552, 402, + 402, 402, 402, 402, 402, 202, 202, 202, 352, 402, 402, 402, + 572, 402, 402, 402, 402, 402, 402, 402, 202, 202, 372, 402, + 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, 512, + 402, 402, 402, 402, 512, 442, 472, 472, 472, 1, 1, 2, + 2, 2, 2, 42, 201, 201, 202, 202, 202, 202, 342, 411, + 1, 1, 2, 2, 2, 2, 11, 201, 201, 202, 202, 202, + 202, 541, 441, 1, 1, 1, 2, 2, 2, 2, 72, 201, + 201, 201, 202, 202, 202, 202, 272, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 52, 201, 201, 202, 202, 202, 202, + 252, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 52, + 202, 202, 202, 202, 202, 252, 2, 2, 1, 1, 2, 2, + 2, 2, 2, 2, 52, 202, 202, 202, 202, 252, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 52, 202, 202, 202, + 252, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 72, + 202, 202, 272, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 142, 242, 242, 212, 2, 2, 2, 2, 212, 142, 172, 172, + 172, 341, 401, 401, 402, 402, 402, 402, 41, 201, 201, 202, + 202, 202, 202, 401, 401, 402, 402, 402, 402, 42, 201, 201, + 202, 202, 202, 202, 342, 241, 401, 401, 401, 402, 402, 402, + 12, 141, 201, 201, 201, 202, 202, 202, 412, 401, 401, 401, + 402, 402, 402, 402, 401, 211, 401, 201, 201, 201, 202, 202, + 202, 202, 401, 402, 402, 402, 402, 402, 572, 401, 401, 401, + 401, 201, 202, 202, 202, 202, 202, 372, 402, 402, 402, 402, + 402, 572, 402, 401, 401, 401, 402, 202, 202, 202, 202, 202, + 372, 402, 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, + 202, 202, 202, 202, 372, 402, 402, 12, 402, 402, 402, 402, + 402, 402, 402, 202, 202, 412, 402, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 202, 442, 542, 402, 402, 402, 402, 402, + 402, 402, 442, 472, 452, 452, 452, 452, 472, 401, 401, 402, + 402, 402, 402, 42, 201, 201, 202, 202, 202, 202, 342, 341, + 1, 1, 2, 2, 2, 2, 41, 201, 201, 202, 202, 202, + 202, 1, 1, 2, 2, 2, 2, 42, 201, 201, 202, 202, + 202, 202, 342, 541, 441, 1, 1, 2, 2, 2, 2, 112, + 201, 201, 202, 202, 202, 202, 312, 201, 1, 511, 1, 1, + 1, 2, 2, 2, 2, 2, 201, 202, 202, 202, 202, 202, + 201, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 72, + 202, 202, 202, 202, 202, 272, 202, 2, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 72, 202, 202, 202, 202, 272, 202, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 112, 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 142, 242, 242, 2, 2, 2, 2, 2, 2, 2, + 142, 172, 152, 152, 152, 152, 172, 311, 401, 401, 402, 402, + 402, 402, 111, 201, 201, 202, 202, 202, 202, 241, 401, 401, + 401, 402, 402, 402, 402, 572, 141, 201, 201, 201, 202, 202, + 202, 202, 372, 401, 401, 401, 402, 402, 402, 402, 552, 401, + 401, 401, 201, 201, 202, 202, 202, 202, 352, 401, 402, 402, + 402, 402, 402, 552, 401, 401, 401, 401, 202, 202, 202, 202, + 202, 352, 402, 402, 402, 402, 402, 552, 402, 402, 402, 402, + 402, 202, 202, 202, 202, 352, 402, 402, 402, 402, 552, 402, + 402, 402, 402, 402, 402, 202, 202, 202, 352, 402, 402, 402, + 572, 402, 402, 402, 402, 402, 402, 402, 202, 202, 372, 402, + 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, 512, + 402, 402, 402, 402, 512, 442, 472, 472, 472, 341, 1, 2, + 2, 2, 42, 41, 201, 202, 202, 202, 342, 1, 2, 2, + 2, 2, 201, 202, 202, 202, 202, 441, 1, 2, 2, 2, + 2, 72, 541, 201, 202, 202, 202, 202, 272, 1, 511, 511, + 1, 1, 2, 2, 2, 2, 52, 201, 202, 202, 202, 202, + 252, 1, 1, 1, 1, 1, 2, 2, 2, 2, 52, 202, + 202, 202, 202, 252, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 52, 202, 202, 202, 252, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 242, 212, 2, 2, 2, 212, 142, + 172, 172, 401, 401, 402, 402, 402, 201, 201, 202, 202, 202, + 311, 401, 402, 402, 402, 42, 111, 201, 202, 202, 202, 342, + 311, 401, 402, 402, 402, 12, 111, 201, 202, 202, 202, 412, + 401, 401, 402, 402, 402, 402, 241, 141, 201, 201, 202, 202, + 202, 202, 401, 402, 402, 402, 402, 572, 401, 401, 401, 401, + 201, 202, 202, 202, 202, 372, 402, 402, 402, 402, 572, 402, + 402, 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 12, + 402, 402, 402, 402, 402, 402, 202, 202, 412, 402, 542, 402, + 402, 402, 402, 402, 402, 402, 202, 442, 542, 402, 402, 402, + 402, 402, 402, 442, 472, 452, 452, 452, 472, 341, 401, 402, + 402, 402, 42, 41, 201, 202, 202, 202, 342, 1, 2, 2, + 2, 2, 201, 202, 202, 202, 202, 411, 1, 2, 2, 2, + 42, 11, 201, 202, 202, 202, 342, 411, 1, 2, 2, 2, + 112, 11, 201, 202, 202, 202, 312, 201, 541, 441, 1, 1, + 2, 2, 2, 2, 201, 202, 202, 202, 202, 202, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 72, 202, 202, 202, 202, + 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, 72, + 202, 202, 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, + 2, 112, 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, + 2, 142, 242, 242, 2, 2, 2, 2, 2, 2, 142, 172, + 152, 152, 152, 172, 401, 402, 402, 402, 402, 201, 202, 202, + 202, 202, 241, 401, 402, 402, 402, 402, 572, 141, 201, 202, + 202, 202, 202, 372, 401, 401, 402, 402, 402, 402, 552, 211, + 211, 401, 201, 202, 202, 202, 202, 352, 402, 402, 402, 402, + 402, 552, 401, 401, 401, 402, 202, 202, 202, 202, 352, 402, + 402, 402, 402, 552, 402, 402, 402, 402, 402, 202, 202, 202, + 352, 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 202, + 202, 372, 402, 542, 402, 402, 402, 402, 402, 402, 402, 442, + 542, 512, 402, 402, 402, 512, 442, 472, 472, 341, 1, 2, + 2, 42, 41, 201, 202, 202, 342, 1, 2, 2, 2, 201, + 202, 202, 202, 441, 1, 2, 2, 2, 72, 541, 201, 202, + 202, 202, 272, 1, 511, 511, 1, 1, 2, 2, 2, 72, + 201, 202, 202, 202, 272, 2, 1, 1, 1, 2, 2, 2, + 2, 72, 202, 202, 202, 272, 2, 2, 2, 2, 2, 2, + 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, 2, 2, + 2, 142, 242, 242, 212, 212, 212, 212, 142, 401, 402, 402, + 402, 201, 202, 202, 202, 311, 401, 402, 402, 42, 111, 201, + 202, 202, 342, 311, 401, 402, 402, 12, 111, 201, 202, 202, + 412, 401, 401, 402, 402, 12, 241, 141, 201, 201, 202, 202, + 412, 402, 402, 402, 12, 401, 401, 401, 401, 202, 202, 202, + 412, 402, 402, 12, 402, 402, 402, 402, 402, 202, 202, 412, + 402, 542, 402, 402, 402, 402, 402, 402, 202, 442, 542, 402, + 402, 402, 402, 402, 442, 472, 472, 472, 472, 341, 401, 402, + 402, 42, 41, 201, 202, 202, 342, 1, 2, 2, 2, 201, + 202, 202, 202, 411, 1, 2, 2, 42, 11, 201, 202, 202, + 342, 411, 1, 2, 2, 112, 11, 201, 202, 202, 312, 201, + 541, 441, 1, 1, 2, 2, 112, 201, 202, 202, 312, 202, + 1, 1, 1, 1, 2, 2, 2, 112, 202, 202, 312, 202, + 2, 2, 2, 2, 2, 2, 2, 112, 202, 312, 202, 2, + 2, 2, 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, + 2, 2, 142, 172, 172, 172, 172, 401, 402, 402, 402, 201, + 202, 202, 202, 241, 401, 402, 402, 402, 572, 141, 201, 202, + 202, 202, 372, 401, 401, 402, 402, 402, 572, 211, 211, 401, + 201, 202, 202, 202, 372, 402, 402, 402, 402, 572, 401, 401, + 401, 402, 202, 202, 202, 372, 402, 402, 402, 572, 402, 402, + 402, 402, 402, 202, 202, 372, 402, 542, 402, 402, 402, 402, + 402, 402, 442, 542, 512, 512, 512, 512, 442, 341, 1, 2, + 2, 42, 41, 201, 202, 202, 342, 1, 2, 2, 2, 201, + 202, 202, 202, 441, 1, 2, 2, 2, 72, 541, 201, 202, + 202, 202, 272, 1, 511, 511, 1, 1, 2, 2, 2, 72, + 201, 202, 202, 202, 272, 2, 2, 1, 2, 2, 2, 2, + 2, 72, 202, 202, 202, 272, 2, 2, 2, 2, 2, 2, + 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, 2, 2, + 2, 142, 242, 242, 212, 212, 212, 212, 142, 401, 402, 402, + 402, 201, 202, 202, 202, 311, 402, 402, 402, 42, 111, 202, + 202, 202, 342, 311, 401, 402, 402, 12, 111, 201, 202, 202, + 412, 401, 402, 402, 402, 12, 241, 141, 201, 202, 202, 202, + 412, 402, 402, 402, 12, 401, 401, 401, 401, 202, 202, 202, + 412, 402, 402, 12, 402, 402, 402, 402, 402, 202, 202, 412, + 402, 542, 402, 402, 402, 402, 402, 402, 202, 442, 542, 402, + 402, 402, 402, 402, 442, 472, 472, 472, 472, 341, 402, 402, + 402, 42, 41, 202, 202, 202, 342, 1, 2, 2, 2, 201, + 202, 202, 202, 411, 2, 2, 2, 42, 11, 202, 202, 202, + 342, 411, 2, 2, 2, 112, 11, 202, 202, 202, 312, 201, + 541, 441, 1, 2, 2, 2, 112, 202, 202, 202, 312, 202, + 2, 1, 1, 2, 2, 2, 2, 112, 202, 202, 312, 202, + 2, 2, 2, 2, 2, 2, 2, 112, 202, 312, 202, 2, + 2, 2, 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, + 2, 2, 142, 172, 172, 172, 172, 401, 402, 402, 402, 201, + 202, 202, 202, 241, 401, 402, 402, 402, 572, 141, 201, 202, + 202, 202, 372, 401, 402, 402, 402, 402, 572, 211, 211, 401, + 202, 202, 202, 202, 372, 402, 402, 402, 402, 572, 402, 402, + 402, 402, 202, 202, 202, 372, 402, 402, 402, 572, 402, 402, + 402, 402, 402, 202, 202, 372, 402, 542, 402, 402, 402, 402, + 402, 402, 442, 542, 512, 512, 512, 512, 442, 341, 2, 2, + 42, 41, 202, 202, 342, 1, 2, 2, 201, 202, 202, 441, + 1, 2, 2, 72, 541, 201, 202, 202, 272, 1, 511, 511, + 1, 2, 2, 2, 72, 202, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, + 2, 2, 142, 242, 242, 212, 212, 212, 142, 401, 402, 402, + 201, 202, 202, 311, 402, 402, 42, 111, 202, 202, 342, 311, + 402, 402, 12, 111, 202, 202, 412, 401, 402, 402, 12, 241, + 141, 201, 202, 202, 412, 402, 402, 12, 402, 401, 401, 402, + 202, 202, 412, 402, 542, 402, 402, 402, 402, 402, 202, 442, + 542, 402, 402, 402, 402, 442, 472, 472, 472, 341, 402, 402, + 42, 41, 202, 202, 342, 1, 2, 2, 201, 202, 202, 411, + 2, 2, 42, 11, 202, 202, 342, 411, 2, 2, 112, 11, + 202, 202, 312, 201, 541, 441, 1, 2, 2, 112, 202, 202, + 312, 202, 2, 1, 1, 2, 2, 2, 112, 202, 312, 202, + 2, 2, 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, + 2, 142, 172, 172, 172, 401, 402, 402, 201, 202, 202, 241, + 401, 402, 402, 572, 141, 201, 202, 202, 372, 401, 402, 402, + 402, 572, 211, 211, 401, 202, 202, 202, 372, 402, 402, 402, + 572, 402, 402, 402, 402, 202, 202, 372, 402, 542, 402, 402, + 402, 402, 402, 442, 542, 512, 512, 512, 442, 341, 2, 2, + 42, 41, 202, 202, 342, 2, 2, 2, 202, 202, 202, 441, + 2, 2, 2, 72, 541, 202, 202, 202, 272, 1, 511, 511, + 1, 2, 2, 2, 72, 202, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, + 2, 2, 142, 242, 242, 212, 212, 212, 142, 401, 402, 402, + 201, 202, 202, 311, 402, 402, 42, 111, 202, 202, 342, 311, + 402, 402, 12, 111, 202, 202, 412, 401, 402, 402, 12, 241, + 141, 201, 202, 202, 412, 402, 402, 12, 402, 402, 402, 402, + 202, 202, 412, 402, 542, 402, 402, 402, 402, 402, 202, 442, + 542, 402, 402, 402, 402, 442, 472, 472, 472, 342, 402, 402, + 42, 42, 202, 202, 342, 2, 2, 2, 202, 202, 202, 411, + 2, 2, 42, 11, 202, 202, 342, 411, 2, 2, 112, 11, + 202, 202, 312, 202, 542, 442, 2, 2, 2, 112, 202, 202, + 312, 202, 2, 2, 2, 2, 2, 2, 112, 202, 312, 202, + 2, 2, 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, + 2, 142, 172, 172, 172, 402, 402, 402, 202, 202, 202, 242, + 402, 402, 402, 572, 142, 202, 202, 202, 372, 402, 402, 402, + 402, 572, 211, 211, 402, 202, 202, 202, 372, 402, 402, 402, + 572, 402, 402, 402, 402, 202, 202, 372, 402, 542, 402, 402, + 402, 402, 402, 442, 542, 512, 512, 512, 442 + + + 0, 345, 702, 1071, 1446, 1821, 2223, 2673, 3153, 3453, + 3753, 4053, 4353, 4581, 4809, 4977, 5145, 5313, 5481, 5601, + 5721, 5841 + + + 1037.83*mm, 1060.98*mm, 1084.12*mm, 1108.3*mm, 1132.48*mm, 1157.73*mm, + 1182.99*mm, 1209.37*mm, 1235.75*mm, 1263.31*mm, 1290.87*mm, 1319.66*mm, + 1348.45*mm, 1378.52*mm, 1408.59*mm, 1440*mm, 1471.42*mm, 1504.23*mm, + 1537.05*mm, 1571.33*mm, 1605.6*mm, 1641.41*mm, 1677.22*mm, 1714.62*mm, + 1752.03*mm, 1791.1*mm, 1830.17*mm, 1870.99*mm, 1911.8*mm, 1954.44*mm, + 1997.08*mm, 2041.61*mm, 2086.15*mm, 2132.67*mm, 2179.2*mm, 2227.8*mm, + 2276.4*mm, 2327.16*mm, 2377.93*mm, 2430.96*mm, 2483.99*mm, 2539.39*mm + + + 1060.98*mm, 1084.12*mm, 1108.3*mm, 1132.48*mm, 1157.73*mm, 1182.99*mm, + 1209.37*mm, 1235.75*mm, 1263.31*mm, 1290.87*mm, 1319.66*mm, 1348.45*mm, + 1378.52*mm, 1408.59*mm, 1440*mm, 1471.42*mm, 1504.23*mm, 1537.05*mm, + 1571.33*mm, 1605.6*mm, 1641.41*mm, 1677.22*mm, 1714.62*mm, 1752.03*mm, + 1791.1*mm, 1830.17*mm, 1870.99*mm, 1911.8*mm, 1954.44*mm, 1997.08*mm, + 2041.61*mm, 2086.15*mm, 2132.67*mm, 2179.2*mm, 2227.8*mm, 2276.4*mm, + 2327.16*mm, 2377.93*mm, 2430.96*mm, 2483.99*mm, 2539.39*mm, 2594.79*mm + + + 18, 18, 18, 18, 13, 13, 6, 6, 6, 6, 0, 0, 0, 0 + + + 29, 31, 32, 33, 36, 38, 40, 41, 41, 41, 41, 41, 41, 39 + + + 2369024, 2369536, 2370048, 2370560, 2371072, 2371584, 2372096, + 2372608, 2373120, 2373632, 2374144, 2374656, 2631168, 2631680, + 2632192, 2632704, 2633216, 2633728, 2634240, 2634752, 2635264, + 2635776, 2636288, 2636800, 2637312, 2637824, 2893312, 2893824, + 2894336, 2894848, 2895360, 2895872, 2896384, 2896896, 2897408, + 2897920, 2898432, 2898944, 2899456, 2899968, 2900480, 3155456, + 3155968, 3156480, 3156992, 3157504, 3158016, 3158528, 3159040, + 3159552, 3160064, 3160576, 3161088, 3161600, 3162112, 3162624, + 3163136, 3415040, 3415552, 3416064, 3416576, 3417088, 3417600, + 3418112, 3418624, 3419136, 3419648, 3420160, 3420672, 3421184, + 3421696, 3422208, 3422720, 3423232, 3423744, 3424256, 3424768, + 3425280, 3425792, 3426304, 3426816, 3677184, 3677696, 3678208, + 3678720, 3679232, 3679744, 3680256, 3680768, 3681280, 3681792, + 3682304, 3682816, 3683328, 3683840, 3684352, 3684864, 3685376, + 3685888, 3686400, 3686912, 3687424, 3687936, 3688448, 3688960, + 3689472, 3689984, 3935744, 3936256, 3936768, 3937280, 3937792, + 3938304, 3938816, 3939328, 3939840, 3940352, 3940864, 3941376, + 3941888, 3942400, 3942912, 3943424, 3943936, 3944448, 3944960, + 3945472, 3945984, 3946496, 3947008, 3947520, 3948032, 3948544, + 3949056, 3949568, 3950080, 3950592, 3951104, 3951616, 3952128, + 3952640, 3953152, 4197888, 4198400, 4198912, 4199424, 4199936, + 4200448, 4200960, 4201472, 4201984, 4202496, 4203008, 4203520, + 4204032, 4204544, 4205056, 4205568, 4206080, 4206592, 4207104, + 4207616, 4208128, 4208640, 4209152, 4209664, 4210176, 4210688, + 4211200, 4211712, 4212224, 4212736, 4213248, 4213760, 4214272, + 4214784, 4215296, 4215808, 4460032, 4460544, 4461056, 4461568, + 4462080, 4462592, 4463104, 4463616, 4464128, 4464640, 4465152, + 4465664, 4466176, 4466688, 4467200, 4467712, 4468224, 4468736, + 4469248, 4469760, 4470272, 4470784, 4471296, 4471808, 4472320, + 4472832, 4473344, 4473856, 4474368, 4474880, 4475392, 4475904, + 4476416, 4476928, 4477440, 4477952, 4722176, 4722688, 4723200, + 4723712, 4724224, 4724736, 4725248, 4725760, 4726272, 4726784, + 4727296, 4727808, 4728320, 4728832, 4729344, 4729856, 4730368, + 4730880, 4731392, 4731904, 4732416, 4732928, 4733440, 4733952, + 4734464, 4734976, 4735488, 4736000, 4736512, 4737024, 4737536, + 4738048, 4738560, 4739072, 4739584, 4740096, 4981248, 4981760, + 4982272, 4982784, 4983296, 4983808, 4984320, 4984832, 4985344, + 4985856, 4986368, 4986880, 4987392, 4987904, 4988416, 4988928, + 4989440, 4989952, 4990464, 4990976, 4991488, 4992000, 4992512, + 4993024, 4993536, 4994048, 4994560, 4995072, 4995584, 4996096, + 4996608, 4997120, 4997632, 4998144, 4998656, 4999168, 4999680, + 5000192, 5000704, 5001216, 5001728, 5002240, 5243392, 5243904, + 5244416, 5244928, 5245440, 5245952, 5246464, 5246976, 5247488, + 5248000, 5248512, 5249024, 5249536, 5250048, 5250560, 5251072, + 5251584, 5252096, 5252608, 5253120, 5253632, 5254144, 5254656, + 5255168, 5255680, 5256192, 5256704, 5257216, 5257728, 5258240, + 5258752, 5259264, 5259776, 5260288, 5260800, 5261312, 5261824, + 5262336, 5262848, 5263360, 5263872, 5264384, 5505536, 5506048, + 5506560, 5507072, 5507584, 5508096, 5508608, 5509120, 5509632, + 5510144, 5510656, 5511168, 5511680, 5512192, 5512704, 5513216, + 5513728, 5514240, 5514752, 5515264, 5515776, 5516288, 5516800, + 5517312, 5517824, 5518336, 5518848, 5519360, 5519872, 5520384, + 5520896, 5521408, 5521920, 5522432, 5522944, 5523456, 5523968, + 5524480, 5524992, 5525504, 5526016, 5526528, 5767680, 5768192, + 5768704, 5769216, 5769728, 5770240, 5770752, 5771264, 5771776, + 5772288, 5772800, 5773312, 5773824, 5774336, 5774848, 5775360, + 5775872, 5776384, 5776896, 5777408, 5777920, 5778432, 5778944, + 5779456, 5779968, 5780480, 5780992, 5781504, 5782016, 5782528, + 5783040, 5783552, 5784064, 5784576, 5785088, 5785600, 5786112, + 5786624, 5787136, 5787648 + + + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 40, 40, 40, 40, 40, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 20, + 20, 20, 20, 20, 20, 20, 20, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 20, 20, 20, 20, 20, 20, 20, 20, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 21, 21, 21, 21, + 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 41, 41, 41, 41, 41, 41, 41, 41, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 40, 40, 40, 40, 40, + 40, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 41, 41, + 41, 41, 41, 41, 41, 41, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 40, 40, 40, 40, 40, 40, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 40, 40, 40, 40, 40, 40, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21 + + + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x7ffffe, 0x7ffffe, 0x3ffffc, 0x3ffffc, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, + 0x3ffffc, 0x3ffffc, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0x3ffffc, 0x3ffffc, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff + + + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x7ffffe, 0x7ffffe, 0x3ffffc, 0x3ffffc, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, + 0x3ffffc, 0x3ffffc, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0x3ffffc, 0x3ffffc, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xff0000, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xff0000, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff0000, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff0000, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff + + + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x7ffffe, 0x7ffffe, 0x3ffffc, 0x3ffffc, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, + 0x3ffffc, 0x3ffffc, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0x3ffffc, 0x3ffffc, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff + + + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x7ffffe, 0x7ffffe, 0x3ffffc, 0x3ffffc, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, + 0x3ffffc, 0x3ffffc, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0x3ffffc, 0x3ffffc, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xff0000, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0x3ffffc, 0x3ffffc, 0x3ffffc, 0xff0000, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff0000, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff0000, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0x3ffffc, 0x3ffffc, 0xff00ff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, + 0xffffff, 0xffffff + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalEE/v14/hgcal.xml b/Geometry/HGCalCommonData/data/hgcalEE/v14/hgcal.xml new file mode 100644 index 0000000000000..5ba2f5ab82018 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalEE/v14/hgcal.xml @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalEE/v14/hgcalEE.xml b/Geometry/HGCalCommonData/data/hgcalEE/v14/hgcalEE.xml index 6a7527e75f506..e15d3904decc1 100644 --- a/Geometry/HGCalCommonData/data/hgcalEE/v14/hgcalEE.xml +++ b/Geometry/HGCalCommonData/data/hgcalEE/v14/hgcalEE.xml @@ -1,5 +1,5 @@ - + @@ -68,13 +68,6 @@ - - [hgcal:rad100200P0], [hgcal:rad100200P1], [hgcal:rad100200P2], - [hgcal:rad100200P3], [hgcal:rad100200P4] - - [hgcal:rad200300P0], [hgcal:rad200300P1], [hgcal:rad200300P2], - [hgcal:rad200300P3], [hgcal:rad200300P4] - 262146, 262147, 262148, 262149, 262150, 262151, 262152, 262153, 262178, 262179, 262180, 262181, 262182, 262183, @@ -1323,450 +1316,738 @@ 7342632, 7342633, 7342634, 7342656, 7342657, 7342689, 7342690, 7342691, 7342692, 7342693, 7342694, 7342695, 7342696, 7342697, 7342698, 7342753, 7342754, 7342755, 7342756, 7342757, 7342758, - 7342759, 7342760, 7342761, 7342820, 7342821, 7342822, 7342823 + 7342759, 7342760, 7342761, 7342820, 7342821, 7342822, 7342823 - - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 0, 0, - 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, - 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, - 0, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, - 1, 2, 2, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, - 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, - 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, - 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, - 1, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, - 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, 2, 0, 0, 0, - 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 0, 0, 1, 1, 1, 1, - 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, 2, 0, 0, 0, - 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 0, 0, 1, 1, 1, 1, - 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, - 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, - 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 1, 2, 2, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 0, 0, - 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 1, 2, 2, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, - 1, 1, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, - 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, - 2, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, - 2, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, - 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, - 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, - 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, - 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 0, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 1, - 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 0, - 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 2, 2, 1, 0, 0, 0, - 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, - 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, - 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, - 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 1, 1, - 1, 2, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, - 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, - 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 2, 2, - 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, - 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, - 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 2, 0, 1, 1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, - 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, - 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 1, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, - 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, - 1, 1, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 0, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, - 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 1, 1, - 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, - 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, - 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, - 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 1, - 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, - 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 1, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, - 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 1, 1, - 1, 2, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, - 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, - 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, - 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, - 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, - 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 1, 1, 1, - 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, - 2, 2, 0, 1, 1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, - 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, - 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, - 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, - 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 0, 0, - 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, - 1, 1, 1, 2, 2, 2, 0, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, - 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 0, 0, 1, 1, 1, 1, 1, - 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, - 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, - 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, - 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, - 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, 2, 2, - 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 0, - 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, - 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, - 2, 2, 0, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, - 2, 1, 1, 1, 1, 2, 2, 2, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, - 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, - 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, - 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, - 1, 2, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, - 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 2, 2, 2, - 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, - 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 0, 0, 1, 1, 1, - 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 + + 330, 0, 0, 1, 1, 1, 2, 572, 30, 200, 200, 201, + 201, 201, 202, 272, 360, 0, 0, 1, 1, 1, 2, 2, + 560, 200, 200, 201, 201, 201, 202, 412, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 72, 200, 200, 200, 201, 201, + 201, 202, 272, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 42, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 201, + 202, 312, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 112, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 142, 202, 202, 242, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 212, 72, 202, 272, + 172, 312, 2, 2, 2, 2, 2, 2, 2, 72, 172, 242, + 212, 152, 212, 142, 172, 260, 400, 400, 401, 401, 401, 402, + 112, 60, 200, 200, 201, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 572, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 372, 400, 400, 400, 401, 401, 401, 402, 42, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 342, 400, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 412, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 12, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 412, 401, 402, + 402, 542, 401, 401, 401, 401, 401, 401, 401, 202, 202, 442, + 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, 512, + 372, 472, 12, 402, 402, 402, 402, 402, 402, 402, 372, 472, + 542, 512, 452, 512, 442, 472, 330, 0, 0, 1, 1, 1, + 2, 30, 200, 200, 201, 201, 201, 202, 360, 0, 0, 1, + 1, 1, 2, 42, 560, 200, 200, 201, 201, 201, 202, 342, + 530, 460, 430, 0, 0, 0, 1, 1, 1, 112, 200, 200, + 200, 201, 201, 201, 312, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 200, 200, 201, 201, 201, 202, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 72, 201, 201, 201, 201, + 202, 272, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 72, 201, 201, 201, 202, 272, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 72, 201, 201, 202, 272, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 112, 202, 312, 202, 2, 1, + 1, 1, 1, 1, 2, 2, 142, 242, 242, 212, 2, 2, + 2, 2, 212, 142, 172, 172, 172, 260, 400, 400, 401, 401, + 401, 402, 42, 60, 200, 200, 201, 201, 201, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 12, 160, 130, 200, 200, 200, + 201, 201, 201, 412, 400, 400, 400, 401, 401, 401, 402, 400, + 400, 400, 200, 200, 201, 201, 201, 202, 400, 401, 401, 401, + 401, 402, 572, 400, 400, 400, 400, 201, 201, 201, 201, 202, + 372, 401, 401, 401, 401, 402, 572, 401, 400, 400, 401, 401, + 201, 201, 201, 202, 372, 401, 401, 401, 402, 572, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 372, 401, 402, 12, 401, + 401, 401, 401, 401, 401, 401, 202, 412, 402, 542, 402, 401, + 401, 401, 401, 401, 402, 402, 442, 542, 512, 402, 402, 402, + 402, 512, 442, 472, 472, 472, 330, 0, 0, 1, 1, 1, + 2, 572, 30, 200, 200, 201, 201, 201, 202, 272, 360, 0, + 0, 1, 1, 1, 2, 2, 560, 200, 200, 201, 201, 201, + 202, 412, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 72, 200, 200, 200, 201, 201, 201, 202, 272, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 1, 1, 1, 1, + 2, 112, 201, 201, 201, 201, 202, 312, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 142, 202, 202, 242, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 212, 72, 202, 272, 172, 312, 2, 2, 2, 2, + 2, 2, 2, 72, 172, 242, 212, 152, 212, 142, 172, 260, + 400, 400, 401, 401, 401, 402, 112, 60, 200, 200, 201, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 572, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 372, 400, 400, + 400, 401, 401, 401, 402, 42, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 342, 400, 401, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 201, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 552, 401, 400, 400, 401, 401, 201, 201, 201, 202, + 352, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 542, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 442, 402, 402, 572, 402, 401, 401, + 401, 401, 401, 402, 402, 512, 372, 472, 12, 402, 402, 402, + 402, 402, 402, 402, 372, 472, 542, 512, 452, 512, 442, 472, + 330, 0, 0, 1, 1, 1, 2, 30, 200, 200, 201, 201, + 201, 202, 360, 0, 0, 1, 1, 1, 2, 42, 560, 200, + 200, 201, 201, 201, 202, 342, 530, 460, 430, 0, 0, 0, + 1, 1, 1, 2, 200, 200, 200, 201, 201, 201, 202, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 72, 200, 200, + 201, 201, 201, 202, 272, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 52, 201, 201, 201, 201, 202, 252, 201, 1, + 0, 0, 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, + 202, 252, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 72, 202, 202, 272, 202, 2, 1, 1, 1, + 1, 1, 2, 2, 142, 242, 242, 2, 2, 2, 2, 2, + 2, 142, 172, 152, 152, 152, 172, 260, 400, 400, 401, 401, + 401, 402, 42, 60, 200, 200, 201, 201, 201, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, + 201, 201, 201, 202, 400, 400, 400, 401, 401, 401, 402, 572, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 372, 400, 401, + 401, 401, 401, 402, 552, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 352, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 552, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 352, 401, 402, + 402, 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, 372, + 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 442, 542, + 402, 402, 402, 402, 402, 402, 442, 472, 452, 452, 452, 472, + 330, 0, 0, 1, 1, 1, 2, 572, 30, 200, 200, 201, + 201, 201, 202, 272, 360, 0, 0, 1, 1, 1, 2, 2, + 560, 200, 200, 201, 201, 201, 202, 412, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 72, 200, 200, 200, 201, 201, + 201, 202, 272, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 42, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 201, + 202, 312, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 112, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 142, 202, 202, 242, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 212, 72, 202, 272, + 172, 312, 2, 2, 2, 2, 2, 2, 2, 72, 172, 242, + 212, 152, 212, 142, 172, 260, 400, 400, 401, 401, 401, 402, + 112, 60, 200, 200, 201, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 572, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 372, 400, 400, 400, 401, 401, 401, 402, 42, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 342, 400, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 412, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 12, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 412, 401, 402, + 402, 542, 401, 401, 401, 401, 401, 401, 401, 202, 202, 442, + 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, 512, + 372, 472, 12, 402, 402, 402, 402, 402, 402, 402, 372, 472, + 542, 512, 452, 512, 442, 472, 330, 0, 0, 1, 1, 1, + 2, 30, 200, 200, 201, 201, 201, 202, 360, 0, 0, 1, + 1, 1, 2, 42, 560, 200, 200, 201, 201, 201, 202, 342, + 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, 200, 200, + 200, 201, 201, 201, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 72, 200, 200, 201, 201, 201, 202, 272, 200, + 0, 0, 0, 0, 1, 1, 1, 1, 2, 52, 201, 201, + 201, 201, 202, 252, 201, 1, 0, 0, 1, 1, 1, 1, + 1, 2, 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 52, 201, 201, 202, 252, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 72, 202, 202, + 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, 142, 242, + 242, 2, 2, 2, 2, 2, 2, 142, 172, 152, 152, 152, + 172, 260, 400, 400, 401, 401, 401, 402, 42, 60, 200, 200, + 201, 201, 201, 202, 342, 230, 400, 400, 400, 401, 401, 401, + 402, 160, 130, 200, 200, 200, 201, 201, 201, 202, 400, 400, + 400, 401, 401, 401, 402, 572, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 372, 400, 401, 401, 401, 401, 402, 552, 400, + 400, 400, 400, 201, 201, 201, 201, 202, 352, 401, 401, 401, + 401, 402, 552, 401, 400, 400, 401, 401, 201, 201, 201, 202, + 352, 401, 401, 401, 402, 552, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 352, 401, 402, 402, 572, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 372, 402, 542, 402, 401, 401, 401, + 401, 401, 402, 402, 442, 542, 402, 402, 402, 402, 402, 402, + 442, 472, 452, 452, 452, 472, 330, 0, 0, 1, 1, 1, + 2, 572, 30, 200, 200, 201, 201, 201, 202, 272, 360, 0, + 0, 1, 1, 1, 2, 2, 560, 200, 200, 201, 201, 201, + 202, 412, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 72, 200, 200, 200, 201, 201, 201, 202, 272, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 1, 1, 1, 1, + 2, 112, 201, 201, 201, 201, 202, 312, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 142, 202, 202, 242, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 212, 72, 202, 272, 172, 312, 2, 2, 2, 2, + 2, 2, 2, 72, 172, 242, 212, 152, 212, 142, 172, 260, + 400, 400, 401, 401, 401, 402, 112, 60, 200, 200, 201, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 572, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 372, 400, 400, + 400, 401, 401, 401, 402, 42, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 342, 400, 401, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 201, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 552, 401, 400, 400, 401, 401, 201, 201, 201, 202, + 352, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 542, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 442, 402, 402, 572, 402, 401, 401, + 401, 401, 401, 402, 402, 512, 372, 472, 12, 402, 402, 402, + 402, 402, 402, 402, 372, 472, 542, 512, 452, 512, 442, 472, + 330, 0, 0, 1, 1, 1, 2, 30, 200, 200, 201, 201, + 201, 202, 360, 0, 0, 1, 1, 1, 2, 42, 560, 200, + 200, 201, 201, 201, 202, 342, 530, 460, 430, 0, 0, 0, + 1, 1, 1, 2, 200, 200, 200, 201, 201, 201, 202, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 52, 200, 200, + 201, 201, 201, 202, 252, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 52, 201, 201, 201, 201, 202, 252, 201, 1, + 0, 0, 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, + 202, 252, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 52, 202, 202, 252, 202, 2, 1, 1, 1, + 1, 1, 2, 2, 142, 242, 242, 2, 2, 2, 2, 2, + 2, 142, 152, 152, 152, 152, 152, 260, 400, 400, 401, 401, + 401, 402, 42, 60, 200, 200, 201, 201, 201, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, + 201, 201, 201, 202, 400, 400, 400, 401, 401, 401, 402, 552, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 352, 400, 401, + 401, 401, 401, 402, 552, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 352, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 552, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 352, 401, 402, + 402, 552, 401, 401, 401, 401, 401, 401, 401, 202, 202, 352, + 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 442, 542, + 402, 402, 402, 402, 402, 402, 442, 452, 452, 452, 452, 452, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 1, 1, 1, 2, 2, + 560, 200, 200, 201, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 2, 201, 201, 201, 201, + 202, 202, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 152, 2, 212, 142, 260, 400, 400, 401, 401, 401, 402, + 402, 60, 200, 200, 201, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 401, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 452, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 1, 1, 1, 2, 112, 560, 200, 200, 201, 201, 201, + 202, 312, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 200, 200, 200, 201, 201, 201, 202, 200, 0, 0, 0, 0, + 0, 1, 1, 1, 2, 52, 200, 200, 201, 201, 201, 202, + 252, 200, 0, 0, 0, 0, 1, 1, 1, 1, 2, 52, + 201, 201, 201, 201, 202, 252, 201, 1, 0, 0, 1, 1, + 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, 201, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 52, 201, 201, 202, + 252, 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 52, + 202, 202, 252, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 112, 312, 242, 212, 2, 2, 2, 2, 2, 2, 212, 142, + 152, 152, 152, 152, 152, 260, 400, 400, 401, 401, 401, 402, + 12, 60, 200, 200, 201, 201, 201, 202, 412, 230, 400, 400, + 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, 201, 201, + 201, 202, 400, 400, 400, 401, 401, 401, 402, 552, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 352, 400, 401, 401, 401, + 401, 402, 552, 400, 400, 400, 400, 201, 201, 201, 201, 202, + 352, 401, 401, 401, 401, 402, 552, 401, 400, 400, 401, 401, + 201, 201, 201, 202, 352, 401, 401, 401, 402, 552, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 352, 401, 402, 402, 552, + 401, 401, 401, 401, 401, 401, 401, 202, 202, 352, 402, 12, + 402, 401, 401, 401, 401, 401, 402, 402, 412, 542, 512, 402, + 402, 402, 402, 402, 402, 512, 442, 452, 452, 452, 452, 452, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 152, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 552, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 452, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 112, 560, 200, 200, 200, 201, 201, + 202, 312, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 200, 200, 200, 201, 201, 201, 202, 200, 0, 0, 0, 0, + 0, 1, 1, 1, 2, 42, 200, 200, 201, 201, 201, 202, + 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, 2, 112, + 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, 0, 1, + 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, 201, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, 201, 202, + 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 142, + 202, 202, 242, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 112, 312, 242, 212, 2, 2, 2, 2, 2, 2, 212, 142, + 242, 212, 152, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 12, 60, 200, 200, 200, 201, 201, 202, 412, 230, 400, 400, + 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, 201, 201, + 201, 202, 400, 400, 400, 401, 401, 401, 402, 42, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 342, 400, 400, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 200, 201, 201, 201, 202, + 412, 401, 401, 401, 401, 402, 552, 400, 400, 400, 400, 401, + 201, 201, 201, 202, 352, 401, 401, 401, 402, 12, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 412, 401, 402, 402, 542, + 401, 401, 401, 401, 401, 401, 401, 202, 202, 442, 402, 12, + 402, 401, 401, 401, 401, 401, 402, 402, 412, 542, 512, 402, + 402, 402, 402, 402, 402, 512, 442, 542, 512, 452, 512, 442, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 212, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 512, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 2, 560, 200, 200, 200, 201, 201, + 202, 202, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 72, 200, 200, 200, 201, 201, 201, 202, 272, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 52, 200, 200, 201, 201, + 201, 202, 252, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, + 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 202, 312, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 52, 202, 202, 252, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 2, 72, 202, 272, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 172, 152, 212, 212, 212, 152, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 572, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 372, 400, 400, + 400, 401, 401, 401, 402, 552, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 352, 400, 400, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 200, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, 201, 202, + 412, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 552, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 352, 402, 402, 572, 402, 401, 401, + 401, 401, 401, 402, 402, 202, 372, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 442, 472, 452, 512, 512, 512, 452, 472, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, 201, + 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, 1, + 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, 2, 2, + 2, 142, 242, 2, 2, 212, 2, 2, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, 402, 572, + 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, 372, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, + 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, 401, 401, + 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, 572, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, 402, 402, + 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, 442, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, 402, 402, + 512, 402, 402, 442, 472, 472, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 2, 560, 200, 200, 200, 201, 201, + 202, 202, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 42, 200, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 112, 200, 200, 201, 201, + 201, 202, 312, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, + 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 202, 312, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 112, 202, 202, 312, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 212, 212, 212, 212, 212, 142, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 12, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 412, 400, 400, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 200, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, 201, 202, + 412, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 12, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 412, 402, 402, 542, 402, 401, 401, + 401, 401, 401, 402, 402, 202, 442, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 442, 542, 512, 512, 512, 512, 512, 442, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, 201, + 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, 1, + 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, 2, 2, + 2, 142, 242, 2, 2, 212, 2, 2, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, 402, 572, + 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, 372, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, + 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, 401, 401, + 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, 572, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, 402, 402, + 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, 442, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, 402, 402, + 512, 402, 402, 442, 472, 472, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 2, 560, 200, 200, 200, 201, 201, + 202, 202, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 42, 200, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 112, 200, 200, 201, 201, + 201, 202, 312, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, + 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 202, 312, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 112, 202, 202, 312, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 212, 212, 212, 212, 212, 142, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 12, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 412, 400, 400, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 200, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, 201, 202, + 412, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 12, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 412, 402, 402, 542, 402, 401, 401, + 401, 401, 401, 402, 402, 202, 442, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 442, 542, 512, 512, 512, 512, 512, 442, + 330, 0, 0, 1, 1, 1, 2, 12, 30, 200, 200, 201, + 201, 201, 202, 312, 360, 0, 0, 0, 1, 1, 2, 2, + 72, 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, + 201, 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, + 1, 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, + 0, 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, + 201, 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, + 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, + 202, 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, + 2, 2, 142, 202, 242, 212, 2, 2, 2, 2, 2, 2, + 2, 2, 112, 272, 242, 2, 2, 212, 2, 2, 142, 172, + 172, 172, 260, 400, 400, 400, 401, 401, 402, 402, 60, 200, + 200, 200, 201, 201, 202, 202, 372, 230, 400, 400, 400, 401, + 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, 201, 201, + 202, 342, 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, + 401, 402, 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 402, 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, + 202, 372, 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, + 402, 202, 442, 512, 572, 402, 402, 402, 402, 402, 402, 402, + 402, 412, 542, 402, 402, 512, 402, 402, 442, 472, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 212, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 512, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 12, 30, 200, 200, 201, 201, 201, 202, 312, 360, 0, + 0, 0, 1, 1, 2, 2, 42, 560, 200, 200, 200, 201, + 201, 202, 202, 372, 530, 460, 430, 0, 0, 0, 1, 1, + 1, 2, 112, 200, 200, 200, 201, 201, 201, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 201, 201, 201, 202, 202, 272, + 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, 112, 201, + 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 72, 202, 202, 202, 272, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 112, 202, 312, + 212, 2, 2, 2, 2, 2, 2, 2, 2, 112, 172, 242, + 272, 212, 2, 2, 212, 2, 2, 212, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 72, 60, 200, 200, 200, + 201, 201, 202, 202, 342, 230, 400, 400, 400, 401, 401, 401, + 402, 12, 160, 130, 200, 200, 200, 201, 201, 201, 202, 412, + 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, + 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, + 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, + 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, + 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, + 402, 402, 12, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 412, 512, 542, 402, 402, 402, 402, 402, 402, 402, 402, 412, + 472, 572, 512, 402, 402, 512, 402, 402, 512, 442, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 212, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 512, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 12, 30, 200, 200, 201, 201, 201, 202, 312, 360, 0, + 0, 0, 1, 1, 2, 2, 42, 560, 200, 200, 200, 201, + 201, 202, 202, 372, 530, 460, 430, 0, 0, 0, 1, 1, + 1, 2, 112, 200, 200, 200, 201, 201, 201, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 201, 201, 201, 202, 202, 272, + 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, 112, 201, + 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 72, 202, 202, 202, 272, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 112, 202, 312, + 212, 2, 2, 2, 2, 2, 2, 2, 2, 112, 172, 242, + 272, 212, 2, 2, 212, 2, 2, 212, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 72, 60, 200, 200, 200, + 201, 201, 202, 202, 342, 230, 400, 400, 400, 401, 401, 401, + 402, 12, 160, 130, 200, 200, 200, 201, 201, 201, 202, 412, + 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, + 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, + 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, + 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, + 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, + 402, 402, 12, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 412, 512, 542, 402, 402, 402, 402, 402, 402, 402, 402, 412, + 472, 572, 512, 402, 402, 512, 402, 402, 512, 442, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 12, 30, 200, 200, 201, + 201, 201, 202, 312, 360, 0, 0, 0, 1, 1, 2, 2, + 72, 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, + 201, 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, + 1, 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, + 0, 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, + 201, 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, + 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, + 202, 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, + 2, 2, 142, 202, 242, 212, 2, 2, 2, 2, 2, 2, + 2, 2, 112, 272, 242, 2, 2, 212, 2, 2, 142, 172, + 172, 172, 260, 400, 400, 400, 401, 401, 402, 402, 60, 200, + 200, 200, 201, 201, 202, 202, 372, 230, 400, 400, 400, 401, + 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, 201, 201, + 202, 342, 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, + 401, 402, 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 402, 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, + 202, 372, 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, + 402, 202, 442, 512, 572, 402, 402, 402, 402, 402, 402, 402, + 402, 412, 542, 402, 402, 512, 402, 402, 442, 472, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 12, 30, 200, 200, 201, + 201, 201, 202, 312, 360, 0, 0, 1, 1, 1, 2, 2, + 42, 560, 200, 200, 201, 201, 201, 202, 202, 372, 530, 460, + 430, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 200, 201, 201, 201, 202, 202, + 272, 200, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, + 52, 201, 201, 201, 201, 202, 202, 252, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 2, 72, 201, 201, 201, 202, + 202, 272, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 72, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 52, 202, 202, 202, 252, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 72, 202, + 202, 272, 212, 2, 2, 2, 2, 2, 2, 2, 2, 112, + 172, 242, 272, 2, 2, 2, 2, 2, 2, 2, 142, 172, + 152, 172, 172, 152, 172, 260, 400, 400, 401, 401, 401, 402, + 402, 72, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 402, 160, 130, 200, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 400, 401, 401, 401, + 402, 402, 572, 400, 400, 400, 200, 200, 201, 201, 201, 202, + 202, 372, 400, 401, 401, 401, 401, 402, 402, 552, 400, 400, + 400, 400, 201, 201, 201, 201, 202, 202, 352, 401, 401, 401, + 401, 402, 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 402, 402, 572, 401, 401, 401, + 401, 401, 401, 201, 201, 202, 202, 372, 401, 402, 402, 402, + 552, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, + 202, 202, 372, 512, 542, 402, 402, 402, 402, 402, 402, 402, + 402, 412, 472, 572, 402, 402, 402, 402, 402, 402, 402, 442, + 472, 452, 472, 472, 452, 472, 330, 0, 0, 1, 1, 1, + 2, 12, 30, 200, 200, 201, 201, 201, 202, 312, 360, 0, + 0, 1, 1, 1, 2, 2, 42, 560, 200, 200, 201, 201, + 201, 202, 202, 372, 530, 460, 430, 0, 0, 0, 1, 1, + 1, 2, 112, 200, 200, 200, 201, 201, 201, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 2, 72, 201, 201, 201, 201, 202, 202, 272, + 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 72, + 201, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 72, 201, 201, 202, 202, 272, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 2, 112, 202, 312, 212, 2, 2, 2, 2, 2, 2, 2, + 2, 112, 172, 242, 272, 212, 2, 2, 2, 2, 2, 212, + 142, 172, 172, 172, 172, 260, 400, 400, 401, 401, 401, 402, + 402, 72, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 12, 160, 130, 200, 200, + 200, 201, 201, 201, 202, 412, 400, 400, 400, 401, 401, 401, + 402, 402, 400, 400, 400, 200, 200, 201, 201, 201, 202, 202, + 400, 401, 401, 401, 401, 402, 402, 572, 400, 400, 400, 400, + 201, 201, 201, 201, 202, 202, 372, 401, 401, 401, 401, 402, + 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, 202, 202, + 372, 401, 401, 401, 402, 402, 572, 401, 401, 401, 401, 401, + 401, 201, 201, 202, 202, 372, 401, 402, 402, 402, 572, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, 402, 402, + 12, 402, 401, 401, 401, 401, 401, 402, 402, 202, 412, 512, + 542, 402, 402, 402, 402, 402, 402, 402, 402, 412, 472, 572, + 512, 402, 402, 402, 402, 402, 512, 442, 472, 472, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 2, 30, 200, 200, 201, + 201, 201, 202, 202, 360, 0, 0, 1, 1, 1, 2, 2, + 42, 560, 200, 200, 201, 201, 201, 202, 202, 342, 530, 460, + 430, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 200, 201, 201, 201, 202, 202, + 272, 200, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, + 52, 201, 201, 201, 201, 202, 202, 252, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 2, 72, 201, 201, 201, 202, + 202, 272, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 72, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 52, 202, 202, 202, 252, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 72, 202, + 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 142, 242, 242, 2, 2, 2, 2, 2, 2, 2, 142, 172, + 152, 172, 172, 152, 172, 260, 400, 400, 401, 401, 401, 402, + 402, 42, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 402, 160, 130, 200, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 400, 401, 401, 401, + 402, 402, 572, 400, 400, 400, 200, 200, 201, 201, 201, 202, + 202, 372, 400, 401, 401, 401, 401, 402, 402, 552, 400, 400, + 400, 400, 201, 201, 201, 201, 202, 202, 352, 401, 401, 401, + 401, 402, 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 402, 402, 572, 401, 401, 401, + 401, 401, 401, 201, 201, 202, 202, 372, 401, 402, 402, 402, + 552, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, + 202, 202, 372, 402, 542, 402, 402, 402, 402, 402, 402, 402, + 402, 402, 442, 542, 402, 402, 402, 402, 402, 402, 402, 442, + 472, 452, 472, 472, 452, 472, 330, 0, 0, 1, 1, 1, + 2, 2, 30, 200, 200, 201, 201, 201, 202, 202, 360, 0, + 0, 1, 1, 1, 2, 2, 42, 560, 200, 200, 201, 201, + 201, 202, 202, 342, 530, 460, 430, 0, 0, 0, 1, 1, + 2, 2, 112, 200, 200, 200, 201, 201, 202, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 2, 52, 201, 201, 201, 201, 202, 202, 252, + 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 72, + 201, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 72, 201, 202, 202, 202, 272, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 52, 202, + 202, 202, 252, 202, 2, 2, 1, 1, 1, 2, 2, 2, + 2, 112, 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 142, 242, 242, 212, 2, 2, 2, 2, 2, 212, + 142, 152, 172, 172, 152, 260, 400, 400, 401, 401, 401, 402, + 402, 42, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 402, 402, 12, 160, 130, 200, 200, + 200, 201, 201, 202, 202, 412, 400, 400, 400, 401, 401, 401, + 402, 402, 400, 400, 400, 200, 200, 201, 201, 201, 202, 202, + 400, 401, 401, 401, 401, 402, 402, 552, 400, 400, 400, 400, + 201, 201, 201, 201, 202, 202, 352, 401, 401, 401, 401, 402, + 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, 202, 202, + 372, 401, 401, 402, 402, 402, 572, 401, 401, 401, 401, 401, + 401, 201, 202, 202, 202, 372, 401, 402, 402, 402, 552, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 352, 402, 402, + 12, 402, 402, 401, 401, 401, 402, 402, 402, 202, 412, 402, + 542, 402, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 402, 402, 402, 402, 512, 442, 452, 472, 472, 452 - - - diff --git a/Geometry/HGCalCommonData/data/hgcalEE/v15/hgcal.xml b/Geometry/HGCalCommonData/data/hgcalEE/v15/hgcal.xml new file mode 100644 index 0000000000000..0d80b87bc3c58 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalEE/v15/hgcal.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalEE/v15/hgcalEE.xml b/Geometry/HGCalCommonData/data/hgcalEE/v15/hgcalEE.xml new file mode 100644 index 0000000000000..b19aa3ca70748 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalEE/v15/hgcalEE.xml @@ -0,0 +1,2206 @@ + + + + + + + + + + + + + + + + + + + hgcalwafer:HGCalEEWafer0Fine, hgcalwafer:HGCalEEWafer0Coarse1, + hgcalwafer:HGCalEEWafer0Coarse2, hgcalwafer:HGCalEEWafer1Fine, + hgcalwafer:HGCalEEWafer1Coarse1, hgcalwafer:HGCalEEWafer1Coarse2 + + hgcalwafer:HGCalEEWafer0Fineb0, hgcalwafer:HGCalEEWafer0Fineb1, + hgcalwafer:HGCalEEWafer0Fineb2, hgcalwafer:HGCalEEWafer0Fineb3, + hgcalwafer:HGCalEEWafer0Fineb4, hgcalwafer:HGCalEEWafer0Fineb5, + hgcalwafer:HGCalEEWafer0Coarse1b0, hgcalwafer:HGCalEEWafer0Coarse1b1, + hgcalwafer:HGCalEEWafer0Coarse1b2, hgcalwafer:HGCalEEWafer0Coarse1b3, + hgcalwafer:HGCalEEWafer0Coarse1b4, hgcalwafer:HGCalEEWafer0Coarse1b5, + hgcalwafer:HGCalEEWafer0Coarse2b0, hgcalwafer:HGCalEEWafer0Coarse2b1, + hgcalwafer:HGCalEEWafer0Coarse2b2, hgcalwafer:HGCalEEWafer0Coarse2b3, + hgcalwafer:HGCalEEWafer0Coarse2b4, hgcalwafer:HGCalEEWafer0Coarse2b5, + hgcalwafer:HGCalEEWafer1Fineb0, hgcalwafer:HGCalEEWafer1Fineb1, + hgcalwafer:HGCalEEWafer1Fineb2, hgcalwafer:HGCalEEWafer1Fineb3, + hgcalwafer:HGCalEEWafer1Fineb4, hgcalwafer:HGCalEEWafer1Fineb5, + hgcalwafer:HGCalEEWafer1Coarse1b0, hgcalwafer:HGCalEEWafer1Coarse1b1, + hgcalwafer:HGCalEEWafer1Coarse1b2, hgcalwafer:HGCalEEWafer1Coarse1b3, + hgcalwafer:HGCalEEWafer1Coarse1b4, hgcalwafer:HGCalEEWafer1Coarse1b5, + hgcalwafer:HGCalEEWafer1Coarse2b0, hgcalwafer:HGCalEEWafer1Coarse2b1, + hgcalwafer:HGCalEEWafer1Coarse2b2, hgcalwafer:HGCalEEWafer1Coarse2b3, + hgcalwafer:HGCalEEWafer1Coarse2b4, hgcalwafer:HGCalEEWafer1Coarse2b5, + hgcalwafer:HGCalEEWafer0Fineg0, hgcalwafer:HGCalEEWafer0Fineg1, + hgcalwafer:HGCalEEWafer0Fineg2, hgcalwafer:HGCalEEWafer0Fineg3, + hgcalwafer:HGCalEEWafer0Fineg4, hgcalwafer:HGCalEEWafer0Fineg5, + hgcalwafer:HGCalEEWafer0Coarse1g0, hgcalwafer:HGCalEEWafer0Coarse1g1, + hgcalwafer:HGCalEEWafer0Coarse1g2, hgcalwafer:HGCalEEWafer0Coarse1g3, + hgcalwafer:HGCalEEWafer0Coarse1g4, hgcalwafer:HGCalEEWafer0Coarse1g5, + hgcalwafer:HGCalEEWafer0Coarse2g0, hgcalwafer:HGCalEEWafer0Coarse2g1, + hgcalwafer:HGCalEEWafer0Coarse2g2, hgcalwafer:HGCalEEWafer0Coarse2g3, + hgcalwafer:HGCalEEWafer0Coarse2g4, hgcalwafer:HGCalEEWafer0Coarse2g5, + hgcalwafer:HGCalEEWafer1Fineg0, hgcalwafer:HGCalEEWafer1Fineg1, + hgcalwafer:HGCalEEWafer1Fineg2, hgcalwafer:HGCalEEWafer1Fineg3, + hgcalwafer:HGCalEEWafer1Fineg4, hgcalwafer:HGCalEEWafer1Fineg5, + hgcalwafer:HGCalEEWafer1Coarse1g0, hgcalwafer:HGCalEEWafer1Coarse1g1, + hgcalwafer:HGCalEEWafer1Coarse1g2, hgcalwafer:HGCalEEWafer1Coarse1g3, + hgcalwafer:HGCalEEWafer1Coarse1g4, hgcalwafer:HGCalEEWafer1Coarse1g5, + hgcalwafer:HGCalEEWafer1Coarse2g0, hgcalwafer:HGCalEEWafer1Coarse2g1, + hgcalwafer:HGCalEEWafer1Coarse2g2, hgcalwafer:HGCalEEWafer1Coarse2g3, + hgcalwafer:HGCalEEWafer1Coarse2g4, hgcalwafer:HGCalEEWafer1Coarse2g5, + hgcalwafer:HGCalEEWafer0Finegm0, hgcalwafer:HGCalEEWafer0Finegm1, + hgcalwafer:HGCalEEWafer0Finegm2, hgcalwafer:HGCalEEWafer0Finegm3, + hgcalwafer:HGCalEEWafer0Finegm4, hgcalwafer:HGCalEEWafer0Finegm5, + hgcalwafer:HGCalEEWafer0Coarse1gm0, hgcalwafer:HGCalEEWafer0Coarse1gm1, + hgcalwafer:HGCalEEWafer0Coarse1gm2, hgcalwafer:HGCalEEWafer0Coarse1gm3, + hgcalwafer:HGCalEEWafer0Coarse1gm4, hgcalwafer:HGCalEEWafer0Coarse1gm5, + hgcalwafer:HGCalEEWafer0Coarse2gm0, hgcalwafer:HGCalEEWafer0Coarse2gm1, + hgcalwafer:HGCalEEWafer0Coarse2gm2, hgcalwafer:HGCalEEWafer0Coarse2gm3, + hgcalwafer:HGCalEEWafer0Coarse2gm4, hgcalwafer:HGCalEEWafer0Coarse2gm5, + hgcalwafer:HGCalEEWafer1Finegm0, hgcalwafer:HGCalEEWafer1Finegm1, + hgcalwafer:HGCalEEWafer1Finegm2, hgcalwafer:HGCalEEWafer1Finegm3, + hgcalwafer:HGCalEEWafer1Finegm4, hgcalwafer:HGCalEEWafer1Finegm5, + hgcalwafer:HGCalEEWafer1Coarse1gm0, hgcalwafer:HGCalEEWafer1Coarse1gm1, + hgcalwafer:HGCalEEWafer1Coarse1gm2, hgcalwafer:HGCalEEWafer1Coarse1gm3, + hgcalwafer:HGCalEEWafer1Coarse1gm4, hgcalwafer:HGCalEEWafer1Coarse1gm5, + hgcalwafer:HGCalEEWafer1Coarse2gm0, hgcalwafer:HGCalEEWafer1Coarse2gm1, + hgcalwafer:HGCalEEWafer1Coarse2gm2, hgcalwafer:HGCalEEWafer1Coarse2gm3, + hgcalwafer:HGCalEEWafer1Coarse2gm4, hgcalwafer:HGCalEEWafer1Coarse2gm5, + hgcalwafer:HGCalEEWafer0Finea0, hgcalwafer:HGCalEEWafer0Finea1, + hgcalwafer:HGCalEEWafer0Finea2, hgcalwafer:HGCalEEWafer0Finea3, + hgcalwafer:HGCalEEWafer0Finea4, hgcalwafer:HGCalEEWafer0Finea5, + hgcalwafer:HGCalEEWafer0Coarse1a0, hgcalwafer:HGCalEEWafer0Coarse1a1, + hgcalwafer:HGCalEEWafer0Coarse1a2, hgcalwafer:HGCalEEWafer0Coarse1a3, + hgcalwafer:HGCalEEWafer0Coarse1a4, hgcalwafer:HGCalEEWafer0Coarse1a5, + hgcalwafer:HGCalEEWafer0Coarse2a0, hgcalwafer:HGCalEEWafer0Coarse2a1, + hgcalwafer:HGCalEEWafer0Coarse2a2, hgcalwafer:HGCalEEWafer0Coarse2a3, + hgcalwafer:HGCalEEWafer0Coarse2a4, hgcalwafer:HGCalEEWafer0Coarse2a5, + hgcalwafer:HGCalEEWafer1Finea0, hgcalwafer:HGCalEEWafer1Finea1, + hgcalwafer:HGCalEEWafer1Finea2, hgcalwafer:HGCalEEWafer1Finea3, + hgcalwafer:HGCalEEWafer1Finea4, hgcalwafer:HGCalEEWafer1Finea5, + hgcalwafer:HGCalEEWafer1Coarse1a0, hgcalwafer:HGCalEEWafer1Coarse1a1, + hgcalwafer:HGCalEEWafer1Coarse1a2, hgcalwafer:HGCalEEWafer1Coarse1a3, + hgcalwafer:HGCalEEWafer1Coarse1a4, hgcalwafer:HGCalEEWafer1Coarse1a5, + hgcalwafer:HGCalEEWafer1Coarse2a0, hgcalwafer:HGCalEEWafer1Coarse2a1, + hgcalwafer:HGCalEEWafer1Coarse2a2, hgcalwafer:HGCalEEWafer1Coarse2a3, + hgcalwafer:HGCalEEWafer1Coarse2a4, hgcalwafer:HGCalEEWafer1Coarse2a5, + hgcalwafer:HGCalEEWafer0Fined0, hgcalwafer:HGCalEEWafer0Fined1, + hgcalwafer:HGCalEEWafer0Fined2, hgcalwafer:HGCalEEWafer0Fined3, + hgcalwafer:HGCalEEWafer0Fined4, hgcalwafer:HGCalEEWafer0Fined5, + hgcalwafer:HGCalEEWafer0Coarse1d0, hgcalwafer:HGCalEEWafer0Coarse1d1, + hgcalwafer:HGCalEEWafer0Coarse1d2, hgcalwafer:HGCalEEWafer0Coarse1d3, + hgcalwafer:HGCalEEWafer0Coarse1d4, hgcalwafer:HGCalEEWafer0Coarse1d5, + hgcalwafer:HGCalEEWafer0Coarse2d0, hgcalwafer:HGCalEEWafer0Coarse2d1, + hgcalwafer:HGCalEEWafer0Coarse2d2, hgcalwafer:HGCalEEWafer0Coarse2d3, + hgcalwafer:HGCalEEWafer0Coarse2d4, hgcalwafer:HGCalEEWafer0Coarse2d5, + hgcalwafer:HGCalEEWafer1Fined0, hgcalwafer:HGCalEEWafer1Fined1, + hgcalwafer:HGCalEEWafer1Fined2, hgcalwafer:HGCalEEWafer1Fined3, + hgcalwafer:HGCalEEWafer1Fined4, hgcalwafer:HGCalEEWafer1Fined5, + hgcalwafer:HGCalEEWafer1Coarse1d0, hgcalwafer:HGCalEEWafer1Coarse1d1, + hgcalwafer:HGCalEEWafer1Coarse1d2, hgcalwafer:HGCalEEWafer1Coarse1d3, + hgcalwafer:HGCalEEWafer1Coarse1d4, hgcalwafer:HGCalEEWafer1Coarse1d5, + hgcalwafer:HGCalEEWafer1Coarse2d0, hgcalwafer:HGCalEEWafer1Coarse2d1, + hgcalwafer:HGCalEEWafer1Coarse2d2, hgcalwafer:HGCalEEWafer1Coarse2d3, + hgcalwafer:HGCalEEWafer1Coarse2d4, hgcalwafer:HGCalEEWafer1Coarse2d5, + hgcalwafer:HGCalEEWafer0Finedm0, hgcalwafer:HGCalEEWafer0Finedm1, + hgcalwafer:HGCalEEWafer0Finedm2, hgcalwafer:HGCalEEWafer0Finedm3, + hgcalwafer:HGCalEEWafer0Finedm4, hgcalwafer:HGCalEEWafer0Finedm5, + hgcalwafer:HGCalEEWafer0Coarse1dm0, hgcalwafer:HGCalEEWafer0Coarse1dm1, + hgcalwafer:HGCalEEWafer0Coarse1dm2, hgcalwafer:HGCalEEWafer0Coarse1dm3, + hgcalwafer:HGCalEEWafer0Coarse1dm4, hgcalwafer:HGCalEEWafer0Coarse1dm5, + hgcalwafer:HGCalEEWafer0Coarse2dm0, hgcalwafer:HGCalEEWafer0Coarse2dm1, + hgcalwafer:HGCalEEWafer0Coarse2dm2, hgcalwafer:HGCalEEWafer0Coarse2dm3, + hgcalwafer:HGCalEEWafer0Coarse2dm4, hgcalwafer:HGCalEEWafer0Coarse2dm5, + hgcalwafer:HGCalEEWafer1Finedm0, hgcalwafer:HGCalEEWafer1Finedm1, + hgcalwafer:HGCalEEWafer1Finedm2, hgcalwafer:HGCalEEWafer1Finedm3, + hgcalwafer:HGCalEEWafer1Finedm4, hgcalwafer:HGCalEEWafer1Finedm5, + hgcalwafer:HGCalEEWafer1Coarse1dm0, hgcalwafer:HGCalEEWafer1Coarse1dm1, + hgcalwafer:HGCalEEWafer1Coarse1dm2, hgcalwafer:HGCalEEWafer1Coarse1dm3, + hgcalwafer:HGCalEEWafer1Coarse1dm4, hgcalwafer:HGCalEEWafer1Coarse1dm5, + hgcalwafer:HGCalEEWafer1Coarse2dm0, hgcalwafer:HGCalEEWafer1Coarse2dm1, + hgcalwafer:HGCalEEWafer1Coarse2dm2, hgcalwafer:HGCalEEWafer1Coarse2dm3, + hgcalwafer:HGCalEEWafer1Coarse2dm4, hgcalwafer:HGCalEEWafer1Coarse2dm5, + hgcalwafer:HGCalEEWafer0Finec0, hgcalwafer:HGCalEEWafer0Finec1, + hgcalwafer:HGCalEEWafer0Finec2, hgcalwafer:HGCalEEWafer0Finec3, + hgcalwafer:HGCalEEWafer0Finec4, hgcalwafer:HGCalEEWafer0Finec5, + hgcalwafer:HGCalEEWafer0Coarse1c0, hgcalwafer:HGCalEEWafer0Coarse1c1, + hgcalwafer:HGCalEEWafer0Coarse1c2, hgcalwafer:HGCalEEWafer0Coarse1c3, + hgcalwafer:HGCalEEWafer0Coarse1c4, hgcalwafer:HGCalEEWafer0Coarse1c5, + hgcalwafer:HGCalEEWafer0Coarse2c0, hgcalwafer:HGCalEEWafer0Coarse2c1, + hgcalwafer:HGCalEEWafer0Coarse2c2, hgcalwafer:HGCalEEWafer0Coarse2c3, + hgcalwafer:HGCalEEWafer0Coarse2c4, hgcalwafer:HGCalEEWafer0Coarse2c5, + hgcalwafer:HGCalEEWafer1Finec0, hgcalwafer:HGCalEEWafer1Finec1, + hgcalwafer:HGCalEEWafer1Finec2, hgcalwafer:HGCalEEWafer1Finec3, + hgcalwafer:HGCalEEWafer1Finec4, hgcalwafer:HGCalEEWafer1Finec5, + hgcalwafer:HGCalEEWafer1Coarse1c0, hgcalwafer:HGCalEEWafer1Coarse1c1, + hgcalwafer:HGCalEEWafer1Coarse1c2, hgcalwafer:HGCalEEWafer1Coarse1c3, + hgcalwafer:HGCalEEWafer1Coarse1c4, hgcalwafer:HGCalEEWafer1Coarse1c5, + hgcalwafer:HGCalEEWafer1Coarse2c0, hgcalwafer:HGCalEEWafer1Coarse2c1, + hgcalwafer:HGCalEEWafer1Coarse2c2, hgcalwafer:HGCalEEWafer1Coarse2c3, + hgcalwafer:HGCalEEWafer1Coarse2c4, hgcalwafer:HGCalEEWafer1Coarse2c5 + + materials:Air, materials:Copper, materials:StainlessSteel, + materials:Epoxy, materials:Lead, materials:Epoxy, materials:Lead, + materials:Copper, materials:Copper, materials:Air, materials:Air + + HGCalEEHardPointGap, HGCalEEAbsorberCopper, HGCalEEAbsorberStainlessSteel, + HGCalEEAbsorberEpoxy1, HGCalEEAbsorberLead1, HGCalEEAbsorberEpoxy2, + HGCalEEAbsorberLead2, HGCalEECoolingPlate, HGCalEECopperCover, + HGCalEEModuleF, HGCalEEModuleB + + 0.1*mm, 0.1*mm, 0.3*mm, 0.075*mm, 4.25*mm, 0.0875*mm, 2.125*mm, + 6.1*mm, 1.0*mm, [hgcal:ModuleThicknessEE], [hgcal:ModuleThicknessEE] + + + 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13 + + 27.5*mm, 29.7*mm, 29.7*mm, 29.7*mm, 29.7*mm, 29.7*mm, 29.7*mm, + 29.7*mm, 29.7*mm, 29.7*mm, 29.7*mm, 29.7*mm, 29.7*mm, 30.7*mm + + 0, 2, 5, 6, 5, 2, 1, 9, 7, 10, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 9, 7, 10, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 9, 7, 10, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 9, 7, 10, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 9, 7, 10, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 9, 7, 10, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 9, 7, 10, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 9, 7, 10, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 9, 7, 10, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 9, 7, 10, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 9, 7, 10, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 9, 7, 10, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 9, 7, 10, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 9, 7, 10, 0, 8 + + + 0,-2,-2,-2,-2,-2, 0, 1, 0, 2, 0, + 0,-2,-2,-2,-2,-2,-2, 0, 1, 0, 2, 0, + 0,-2,-2,-2,-2,-2,-2, 0, 1, 0, 2, 0, + 0,-2,-2,-2,-2,-2,-2, 0, 1, 0, 2, 0, + 0,-2,-2,-2,-2,-2,-2, 0, 1, 0, 2, 0, + 0,-2,-2,-2,-2,-2,-2, 0, 1, 0, 2, 0, + 0,-2,-2,-2,-2,-2,-2, 0, 1, 0, 2, 0, + 0,-2,-2,-2,-2,-2,-2, 0, 1, 0, 2, 0, + 0,-2,-2,-2,-2,-2,-2, 0, 1, 0, 2, 0, + 0,-2,-2,-2,-2,-2,-2, 0, 1, 0, 2, 0, + 0,-2,-2,-2,-2,-2,-2, 0, 1, 0, 2, 0, + 0,-2,-2,-2,-2,-2,-2, 0, 1, 0, 2, 0, + 0,-2,-2,-2,-2,-2,-2, 0, 1, 0, 2, 0, + 0,-2,-2,-2,-2,-2,-2, 0, 1, 0, 2, 0,-2 + + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + + 0, 0, 0, 0 + + [hgcal:zHGCal0], [hgcal:zHGCal2], [hgcal:zHGCal7], + [hgcal:zHGCal8] + + [hgcal:rMinHGCal2], [hgcal:rMinHGCal4], + [hgcal:rMinHGCal6], [hgcal:rMinHGCal8] + + [hgcal:slope2], [hgcal:slope3], 0, 0 + + [hgcal:zHGCal0], [hgcal:zHGCal5], [hgcal:zHGCal10], + [hgcal:zHGCal11] + + [hgcal:rMaxHGCal0], [hgcal:rMaxHGCal5], [hgcal:rMaxHGCal10], + [hgcal:rMaxHGCal11] + + 262146, 262147, 262148, 262149, 262150, 262151, 262152, + 262153, 262178, 262179, 262180, 262181, 262182, 262183, + 262184, 262185, 262210, 262211, 262212, 262213, 262214, + 262215, 262216, 262217, 262241, 262242, 262243, 262244, + 262245, 262246, 262247, 262248, 262272, 262273, 262274, + 262275, 262276, 262277, 262278, 262279, 262280, 262281, + 262282, 262305, 262306, 262307, 262308, 262309, 262310, + 262311, 262312, 262336, 262337, 262338, 262339, 262340, + 262341, 262342, 262343, 262344, 262345, 262346, 262369, + 262370, 262371, 262372, 262373, 262374, 262375, 262400, + 262401, 262402, 262403, 262404, 262405, 262406, 262407, + 262408, 262409, 262410, 262433, 262434, 262435, 262436, + 262437, 262438, 262464, 262465, 262466, 262467, 262468, + 262469, 262470, 262471, 262472, 262473, 262474, 262497, + 262498, 262499, 262500, 262501, 262528, 262529, 262530, + 262531, 262532, 262533, 262534, 262535, 262536, 262537, + 262538, 262561, 262562, 262563, 262564, 262592, 262593, + 262594, 262595, 262596, 262597, 262598, 262599, 262600, + 262601, 262602, 262625, 262626, 262627, 262656, 262657, + 262658, 262659, 262660, 262661, 262662, 262663, 262664, + 262665, 262666, 262689, 262690, 262720, 262721, 262722, + 262723, 262724, 262725, 262726, 262727, 262728, 262729, + 262786, 262787, 262788, 262789, 262790, 262791, 262792, + 264257, 264258, 264259, 264260, 264261, 264262, 264263, + 264264, 264290, 264291, 264292, 264293, 264294, 264295, + 264296, 264297, 264320, 264321, 264322, 264323, 264324, + 264325, 264326, 264327, 264328, 264353, 264354, 264355, + 264356, 264357, 264358, 264359, 264360, 264361, 264362, + 264384, 264385, 264386, 264387, 264388, 264389, 264390, + 264391, 264417, 264418, 264419, 264420, 264421, 264422, + 264423, 264424, 264425, 264426, 264448, 264449, 264450, + 264451, 264452, 264453, 264454, 264481, 264482, 264483, + 264484, 264485, 264486, 264487, 264488, 264489, 264490, + 264512, 264513, 264514, 264515, 264516, 264517, 264545, + 264546, 264547, 264548, 264549, 264550, 264551, 264552, + 264553, 264554, 264576, 264577, 264578, 264579, 264580, + 264609, 264610, 264611, 264612, 264613, 264614, 264615, + 264616, 264617, 264618, 264640, 264641, 264642, 264643, + 264673, 264674, 264675, 264676, 264677, 264678, 264679, + 264680, 264681, 264682, 264704, 264705, 264706, 264737, + 264738, 264739, 264740, 264741, 264742, 264743, 264744, + 264745, 264746, 264768, 264801, 264802, 264803, 264804, + 264805, 264806, 264807, 264808, 264809, 264866, 264867, + 264868, 264869, 264870, 264871, 264872, 524290, 524291, + 524292, 524293, 524294, 524295, 524296, 524322, 524323, + 524324, 524325, 524326, 524327, 524328, 524354, 524355, + 524356, 524357, 524358, 524359, 524360, 524361, 524385, + 524386, 524387, 524388, 524389, 524390, 524391, 524392, + 524416, 524417, 524418, 524419, 524420, 524421, 524422, + 524423, 524424, 524425, 524449, 524450, 524451, 524452, + 524453, 524454, 524455, 524480, 524481, 524482, 524483, + 524484, 524485, 524486, 524487, 524488, 524489, 524513, + 524514, 524515, 524516, 524517, 524518, 524544, 524545, + 524546, 524547, 524548, 524549, 524550, 524551, 524552, + 524553, 524554, 524577, 524578, 524579, 524580, 524581, + 524582, 524608, 524609, 524610, 524611, 524612, 524613, + 524614, 524615, 524616, 524617, 524618, 524641, 524642, + 524643, 524644, 524645, 524672, 524673, 524674, 524675, + 524676, 524677, 524678, 524679, 524680, 524681, 524682, + 524705, 524706, 524707, 524708, 524736, 524737, 524738, + 524739, 524740, 524741, 524742, 524743, 524744, 524745, + 524769, 524770, 524800, 524801, 524802, 524803, 524804, + 524805, 524806, 524807, 524808, 524809, 524833, 524865, + 524866, 524867, 524868, 524869, 524870, 524871, 524872, + 524932, 524933, 524934, 526401, 526402, 526403, 526404, + 526405, 526406, 526407, 526408, 526434, 526435, 526436, + 526437, 526438, 526439, 526440, 526441, 526464, 526465, + 526466, 526467, 526468, 526469, 526470, 526471, 526497, + 526498, 526499, 526500, 526501, 526502, 526503, 526504, + 526505, 526528, 526529, 526530, 526531, 526532, 526533, + 526534, 526561, 526562, 526563, 526564, 526565, 526566, + 526567, 526568, 526569, 526592, 526593, 526594, 526595, + 526596, 526597, 526598, 526625, 526626, 526627, 526628, + 526629, 526630, 526631, 526632, 526633, 526634, 526656, + 526657, 526658, 526659, 526660, 526661, 526689, 526690, + 526691, 526692, 526693, 526694, 526695, 526696, 526697, + 526698, 526720, 526721, 526722, 526723, 526724, 526753, + 526754, 526755, 526756, 526757, 526758, 526759, 526760, + 526761, 526762, 526784, 526785, 526786, 526817, 526818, + 526819, 526820, 526821, 526822, 526823, 526824, 526825, + 526848, 526849, 526881, 526882, 526883, 526884, 526885, + 526886, 526887, 526888, 526889, 526945, 526946, 526947, + 526948, 526949, 526950, 526951, 526952, 527012, 527013, + 527014, 786434, 786435, 786436, 786437, 786438, 786439, + 786440, 786441, 786466, 786467, 786468, 786469, 786470, + 786471, 786472, 786473, 786498, 786499, 786500, 786501, + 786502, 786503, 786504, 786505, 786529, 786530, 786531, + 786532, 786533, 786534, 786535, 786536, 786560, 786561, + 786562, 786563, 786564, 786565, 786566, 786567, 786568, + 786569, 786570, 786593, 786594, 786595, 786596, 786597, + 786598, 786599, 786600, 786624, 786625, 786626, 786627, + 786628, 786629, 786630, 786631, 786632, 786633, 786634, + 786657, 786658, 786659, 786660, 786661, 786662, 786663, + 786688, 786689, 786690, 786691, 786692, 786693, 786694, + 786695, 786696, 786697, 786698, 786721, 786722, 786723, + 786724, 786725, 786726, 786752, 786753, 786754, 786755, + 786756, 786757, 786758, 786759, 786760, 786761, 786762, + 786785, 786786, 786787, 786788, 786789, 786816, 786817, + 786818, 786819, 786820, 786821, 786822, 786823, 786824, + 786825, 786826, 786849, 786850, 786851, 786852, 786880, + 786881, 786882, 786883, 786884, 786885, 786886, 786887, + 786888, 786889, 786890, 786913, 786914, 786915, 786944, + 786945, 786946, 786947, 786948, 786949, 786950, 786951, + 786952, 786953, 786954, 786977, 786978, 787008, 787009, + 787010, 787011, 787012, 787013, 787014, 787015, 787016, + 787017, 787074, 787075, 787076, 787077, 787078, 787079, + 787080, 788545, 788546, 788547, 788548, 788549, 788550, + 788551, 788552, 788578, 788579, 788580, 788581, 788582, + 788583, 788584, 788585, 788608, 788609, 788610, 788611, + 788612, 788613, 788614, 788615, 788616, 788641, 788642, + 788643, 788644, 788645, 788646, 788647, 788648, 788649, + 788650, 788672, 788673, 788674, 788675, 788676, 788677, + 788678, 788679, 788705, 788706, 788707, 788708, 788709, + 788710, 788711, 788712, 788713, 788714, 788736, 788737, + 788738, 788739, 788740, 788741, 788742, 788769, 788770, + 788771, 788772, 788773, 788774, 788775, 788776, 788777, + 788778, 788800, 788801, 788802, 788803, 788804, 788805, + 788833, 788834, 788835, 788836, 788837, 788838, 788839, + 788840, 788841, 788842, 788864, 788865, 788866, 788867, + 788868, 788897, 788898, 788899, 788900, 788901, 788902, + 788903, 788904, 788905, 788906, 788928, 788929, 788930, + 788931, 788961, 788962, 788963, 788964, 788965, 788966, + 788967, 788968, 788969, 788970, 788992, 788993, 788994, + 789025, 789026, 789027, 789028, 789029, 789030, 789031, + 789032, 789033, 789034, 789056, 789089, 789090, 789091, + 789092, 789093, 789094, 789095, 789096, 789097, 789154, + 789155, 789156, 789157, 789158, 789159, 789160, 1048578, + 1048579, 1048580, 1048581, 1048582, 1048583, 1048584, 1048610, + 1048611, 1048612, 1048613, 1048614, 1048615, 1048616, 1048642, + 1048643, 1048644, 1048645, 1048646, 1048647, 1048648, 1048649, + 1048673, 1048674, 1048675, 1048676, 1048677, 1048678, 1048679, + 1048680, 1048704, 1048705, 1048706, 1048707, 1048708, 1048709, + 1048710, 1048711, 1048712, 1048713, 1048737, 1048738, 1048739, + 1048740, 1048741, 1048742, 1048743, 1048768, 1048769, 1048770, + 1048771, 1048772, 1048773, 1048774, 1048775, 1048776, 1048777, + 1048778, 1048801, 1048802, 1048803, 1048804, 1048805, 1048806, + 1048807, 1048832, 1048833, 1048834, 1048835, 1048836, 1048837, + 1048838, 1048839, 1048840, 1048841, 1048842, 1048865, 1048866, + 1048867, 1048868, 1048869, 1048870, 1048896, 1048897, 1048898, + 1048899, 1048900, 1048901, 1048902, 1048903, 1048904, 1048905, + 1048906, 1048929, 1048930, 1048931, 1048932, 1048933, 1048960, + 1048961, 1048962, 1048963, 1048964, 1048965, 1048966, 1048967, + 1048968, 1048969, 1048970, 1048993, 1048994, 1048995, 1048996, + 1049024, 1049025, 1049026, 1049027, 1049028, 1049029, 1049030, + 1049031, 1049032, 1049033, 1049034, 1049057, 1049058, 1049059, + 1049088, 1049089, 1049090, 1049091, 1049092, 1049093, 1049094, + 1049095, 1049096, 1049097, 1049121, 1049153, 1049154, 1049155, + 1049156, 1049157, 1049158, 1049159, 1049160, 1049219, 1049220, + 1049221, 1049222, 1049223, 1050689, 1050690, 1050691, 1050692, + 1050693, 1050694, 1050695, 1050696, 1050722, 1050723, 1050724, + 1050725, 1050726, 1050727, 1050728, 1050729, 1050752, 1050753, + 1050754, 1050755, 1050756, 1050757, 1050758, 1050759, 1050785, + 1050786, 1050787, 1050788, 1050789, 1050790, 1050791, 1050792, + 1050793, 1050816, 1050817, 1050818, 1050819, 1050820, 1050821, + 1050822, 1050823, 1050849, 1050850, 1050851, 1050852, 1050853, + 1050854, 1050855, 1050856, 1050857, 1050858, 1050880, 1050881, + 1050882, 1050883, 1050884, 1050885, 1050886, 1050913, 1050914, + 1050915, 1050916, 1050917, 1050918, 1050919, 1050920, 1050921, + 1050922, 1050944, 1050945, 1050946, 1050947, 1050948, 1050949, + 1050977, 1050978, 1050979, 1050980, 1050981, 1050982, 1050983, + 1050984, 1050985, 1050986, 1051008, 1051009, 1051010, 1051011, + 1051012, 1051041, 1051042, 1051043, 1051044, 1051045, 1051046, + 1051047, 1051048, 1051049, 1051050, 1051072, 1051073, 1051074, + 1051075, 1051105, 1051106, 1051107, 1051108, 1051109, 1051110, + 1051111, 1051112, 1051113, 1051114, 1051136, 1051137, 1051169, + 1051170, 1051171, 1051172, 1051173, 1051174, 1051175, 1051176, + 1051177, 1051233, 1051234, 1051235, 1051236, 1051237, 1051238, + 1051239, 1051240, 1051299, 1051300, 1051301, 1051302, 1051303, + 1310722, 1310723, 1310724, 1310725, 1310726, 1310727, 1310728, + 1310729, 1310754, 1310755, 1310756, 1310757, 1310758, 1310759, + 1310760, 1310761, 1310786, 1310787, 1310788, 1310789, 1310790, + 1310791, 1310792, 1310793, 1310817, 1310818, 1310819, 1310820, + 1310821, 1310822, 1310823, 1310824, 1310848, 1310849, 1310850, + 1310851, 1310852, 1310853, 1310854, 1310855, 1310856, 1310857, + 1310858, 1310881, 1310882, 1310883, 1310884, 1310885, 1310886, + 1310887, 1310888, 1310912, 1310913, 1310914, 1310915, 1310916, + 1310917, 1310918, 1310919, 1310920, 1310921, 1310922, 1310945, + 1310946, 1310947, 1310948, 1310949, 1310950, 1310951, 1310976, + 1310977, 1310978, 1310979, 1310980, 1310981, 1310982, 1310983, + 1310984, 1310985, 1310986, 1311009, 1311010, 1311011, 1311012, + 1311013, 1311014, 1311040, 1311041, 1311042, 1311043, 1311044, + 1311045, 1311046, 1311047, 1311048, 1311049, 1311050, 1311073, + 1311074, 1311075, 1311076, 1311077, 1311104, 1311105, 1311106, + 1311107, 1311108, 1311109, 1311110, 1311111, 1311112, 1311113, + 1311114, 1311137, 1311138, 1311139, 1311140, 1311168, 1311169, + 1311170, 1311171, 1311172, 1311173, 1311174, 1311175, 1311176, + 1311177, 1311178, 1311201, 1311202, 1311203, 1311232, 1311233, + 1311234, 1311235, 1311236, 1311237, 1311238, 1311239, 1311240, + 1311241, 1311242, 1311265, 1311266, 1311296, 1311297, 1311298, + 1311299, 1311300, 1311301, 1311302, 1311303, 1311304, 1311305, + 1311362, 1311363, 1311364, 1311365, 1311366, 1311367, 1311368, + 1312833, 1312834, 1312835, 1312836, 1312837, 1312838, 1312839, + 1312840, 1312866, 1312867, 1312868, 1312869, 1312870, 1312871, + 1312872, 1312873, 1312896, 1312897, 1312898, 1312899, 1312900, + 1312901, 1312902, 1312903, 1312904, 1312929, 1312930, 1312931, + 1312932, 1312933, 1312934, 1312935, 1312936, 1312937, 1312938, + 1312960, 1312961, 1312962, 1312963, 1312964, 1312965, 1312966, + 1312967, 1312993, 1312994, 1312995, 1312996, 1312997, 1312998, + 1312999, 1313000, 1313001, 1313002, 1313024, 1313025, 1313026, + 1313027, 1313028, 1313029, 1313030, 1313057, 1313058, 1313059, + 1313060, 1313061, 1313062, 1313063, 1313064, 1313065, 1313066, + 1313088, 1313089, 1313090, 1313091, 1313092, 1313093, 1313121, + 1313122, 1313123, 1313124, 1313125, 1313126, 1313127, 1313128, + 1313129, 1313130, 1313152, 1313153, 1313154, 1313155, 1313156, + 1313185, 1313186, 1313187, 1313188, 1313189, 1313190, 1313191, + 1313192, 1313193, 1313194, 1313216, 1313217, 1313218, 1313219, + 1313249, 1313250, 1313251, 1313252, 1313253, 1313254, 1313255, + 1313256, 1313257, 1313258, 1313280, 1313281, 1313282, 1313313, + 1313314, 1313315, 1313316, 1313317, 1313318, 1313319, 1313320, + 1313321, 1313322, 1313344, 1313377, 1313378, 1313379, 1313380, + 1313381, 1313382, 1313383, 1313384, 1313385, 1313442, 1313443, + 1313444, 1313445, 1313446, 1313447, 1313448, 1572866, 1572867, + 1572868, 1572869, 1572870, 1572871, 1572872, 1572898, 1572899, + 1572900, 1572901, 1572902, 1572903, 1572904, 1572930, 1572931, + 1572932, 1572933, 1572934, 1572935, 1572936, 1572937, 1572961, + 1572962, 1572963, 1572964, 1572965, 1572966, 1572967, 1572968, + 1572992, 1572993, 1572994, 1572995, 1572996, 1572997, 1572998, + 1572999, 1573000, 1573001, 1573025, 1573026, 1573027, 1573028, + 1573029, 1573030, 1573031, 1573056, 1573057, 1573058, 1573059, + 1573060, 1573061, 1573062, 1573063, 1573064, 1573065, 1573066, + 1573089, 1573090, 1573091, 1573092, 1573093, 1573094, 1573095, + 1573120, 1573121, 1573122, 1573123, 1573124, 1573125, 1573126, + 1573127, 1573128, 1573129, 1573130, 1573153, 1573154, 1573155, + 1573156, 1573157, 1573158, 1573184, 1573185, 1573186, 1573187, + 1573188, 1573189, 1573190, 1573191, 1573192, 1573193, 1573194, + 1573217, 1573218, 1573219, 1573220, 1573221, 1573248, 1573249, + 1573250, 1573251, 1573252, 1573253, 1573254, 1573255, 1573256, + 1573257, 1573258, 1573281, 1573282, 1573283, 1573284, 1573312, + 1573313, 1573314, 1573315, 1573316, 1573317, 1573318, 1573319, + 1573320, 1573321, 1573322, 1573345, 1573346, 1573347, 1573376, + 1573377, 1573378, 1573379, 1573380, 1573381, 1573382, 1573383, + 1573384, 1573385, 1573409, 1573441, 1573442, 1573443, 1573444, + 1573445, 1573446, 1573447, 1573448, 1573507, 1573508, 1573509, + 1573510, 1573511, 1574977, 1574978, 1574979, 1574980, 1574981, + 1574982, 1574983, 1574984, 1575010, 1575011, 1575012, 1575013, + 1575014, 1575015, 1575016, 1575017, 1575040, 1575041, 1575042, + 1575043, 1575044, 1575045, 1575046, 1575047, 1575073, 1575074, + 1575075, 1575076, 1575077, 1575078, 1575079, 1575080, 1575081, + 1575104, 1575105, 1575106, 1575107, 1575108, 1575109, 1575110, + 1575111, 1575137, 1575138, 1575139, 1575140, 1575141, 1575142, + 1575143, 1575144, 1575145, 1575146, 1575168, 1575169, 1575170, + 1575171, 1575172, 1575173, 1575174, 1575201, 1575202, 1575203, + 1575204, 1575205, 1575206, 1575207, 1575208, 1575209, 1575210, + 1575232, 1575233, 1575234, 1575235, 1575236, 1575237, 1575265, + 1575266, 1575267, 1575268, 1575269, 1575270, 1575271, 1575272, + 1575273, 1575274, 1575296, 1575297, 1575298, 1575299, 1575300, + 1575329, 1575330, 1575331, 1575332, 1575333, 1575334, 1575335, + 1575336, 1575337, 1575338, 1575360, 1575361, 1575362, 1575363, + 1575393, 1575394, 1575395, 1575396, 1575397, 1575398, 1575399, + 1575400, 1575401, 1575402, 1575424, 1575425, 1575457, 1575458, + 1575459, 1575460, 1575461, 1575462, 1575463, 1575464, 1575465, + 1575521, 1575522, 1575523, 1575524, 1575525, 1575526, 1575527, + 1575528, 1575587, 1575588, 1575589, 1575590, 1575591, 1835010, + 1835011, 1835012, 1835013, 1835014, 1835015, 1835016, 1835017, + 1835042, 1835043, 1835044, 1835045, 1835046, 1835047, 1835048, + 1835049, 1835074, 1835075, 1835076, 1835077, 1835078, 1835079, + 1835080, 1835081, 1835105, 1835106, 1835107, 1835108, 1835109, + 1835110, 1835111, 1835112, 1835136, 1835137, 1835138, 1835139, + 1835140, 1835141, 1835142, 1835143, 1835144, 1835145, 1835146, + 1835169, 1835170, 1835171, 1835172, 1835173, 1835174, 1835175, + 1835176, 1835200, 1835201, 1835202, 1835203, 1835204, 1835205, + 1835206, 1835207, 1835208, 1835209, 1835210, 1835233, 1835234, + 1835235, 1835236, 1835237, 1835238, 1835239, 1835264, 1835265, + 1835266, 1835267, 1835268, 1835269, 1835270, 1835271, 1835272, + 1835273, 1835274, 1835297, 1835298, 1835299, 1835300, 1835301, + 1835302, 1835328, 1835329, 1835330, 1835331, 1835332, 1835333, + 1835334, 1835335, 1835336, 1835337, 1835338, 1835361, 1835362, + 1835363, 1835364, 1835365, 1835392, 1835393, 1835394, 1835395, + 1835396, 1835397, 1835398, 1835399, 1835400, 1835401, 1835402, + 1835425, 1835426, 1835427, 1835428, 1835456, 1835457, 1835458, + 1835459, 1835460, 1835461, 1835462, 1835463, 1835464, 1835465, + 1835466, 1835489, 1835490, 1835491, 1835520, 1835521, 1835522, + 1835523, 1835524, 1835525, 1835526, 1835527, 1835528, 1835529, + 1835530, 1835553, 1835554, 1835584, 1835585, 1835586, 1835587, + 1835588, 1835589, 1835590, 1835591, 1835592, 1835593, 1835650, + 1835651, 1835652, 1835653, 1835654, 1835655, 1835656, 1837121, + 1837122, 1837123, 1837124, 1837125, 1837126, 1837127, 1837128, + 1837154, 1837155, 1837156, 1837157, 1837158, 1837159, 1837160, + 1837161, 1837184, 1837185, 1837186, 1837187, 1837188, 1837189, + 1837190, 1837191, 1837192, 1837217, 1837218, 1837219, 1837220, + 1837221, 1837222, 1837223, 1837224, 1837225, 1837226, 1837248, + 1837249, 1837250, 1837251, 1837252, 1837253, 1837254, 1837255, + 1837281, 1837282, 1837283, 1837284, 1837285, 1837286, 1837287, + 1837288, 1837289, 1837290, 1837312, 1837313, 1837314, 1837315, + 1837316, 1837317, 1837318, 1837345, 1837346, 1837347, 1837348, + 1837349, 1837350, 1837351, 1837352, 1837353, 1837354, 1837376, + 1837377, 1837378, 1837379, 1837380, 1837381, 1837409, 1837410, + 1837411, 1837412, 1837413, 1837414, 1837415, 1837416, 1837417, + 1837418, 1837440, 1837441, 1837442, 1837443, 1837444, 1837473, + 1837474, 1837475, 1837476, 1837477, 1837478, 1837479, 1837480, + 1837481, 1837482, 1837504, 1837505, 1837506, 1837507, 1837537, + 1837538, 1837539, 1837540, 1837541, 1837542, 1837543, 1837544, + 1837545, 1837546, 1837568, 1837569, 1837570, 1837601, 1837602, + 1837603, 1837604, 1837605, 1837606, 1837607, 1837608, 1837609, + 1837610, 1837632, 1837665, 1837666, 1837667, 1837668, 1837669, + 1837670, 1837671, 1837672, 1837673, 1837730, 1837731, 1837732, + 1837733, 1837734, 1837735, 1837736, 2097154, 2097155, 2097156, + 2097157, 2097158, 2097159, 2097160, 2097186, 2097187, 2097188, + 2097189, 2097190, 2097191, 2097192, 2097218, 2097219, 2097220, + 2097221, 2097222, 2097223, 2097224, 2097225, 2097249, 2097250, + 2097251, 2097252, 2097253, 2097254, 2097255, 2097256, 2097280, + 2097281, 2097282, 2097283, 2097284, 2097285, 2097286, 2097287, + 2097288, 2097289, 2097313, 2097314, 2097315, 2097316, 2097317, + 2097318, 2097319, 2097344, 2097345, 2097346, 2097347, 2097348, + 2097349, 2097350, 2097351, 2097352, 2097353, 2097354, 2097377, + 2097378, 2097379, 2097380, 2097381, 2097382, 2097383, 2097408, + 2097409, 2097410, 2097411, 2097412, 2097413, 2097414, 2097415, + 2097416, 2097417, 2097418, 2097441, 2097442, 2097443, 2097444, + 2097445, 2097446, 2097472, 2097473, 2097474, 2097475, 2097476, + 2097477, 2097478, 2097479, 2097480, 2097481, 2097482, 2097505, + 2097506, 2097507, 2097508, 2097509, 2097536, 2097537, 2097538, + 2097539, 2097540, 2097541, 2097542, 2097543, 2097544, 2097545, + 2097546, 2097569, 2097570, 2097571, 2097572, 2097600, 2097601, + 2097602, 2097603, 2097604, 2097605, 2097606, 2097607, 2097608, + 2097609, 2097610, 2097633, 2097634, 2097635, 2097664, 2097665, + 2097666, 2097667, 2097668, 2097669, 2097670, 2097671, 2097672, + 2097673, 2097697, 2097729, 2097730, 2097731, 2097732, 2097733, + 2097734, 2097735, 2097736, 2097795, 2097796, 2097797, 2097798, + 2097799, 2099265, 2099266, 2099267, 2099268, 2099269, 2099270, + 2099271, 2099272, 2099298, 2099299, 2099300, 2099301, 2099302, + 2099303, 2099304, 2099305, 2099328, 2099329, 2099330, 2099331, + 2099332, 2099333, 2099334, 2099335, 2099361, 2099362, 2099363, + 2099364, 2099365, 2099366, 2099367, 2099368, 2099369, 2099392, + 2099393, 2099394, 2099395, 2099396, 2099397, 2099398, 2099399, + 2099425, 2099426, 2099427, 2099428, 2099429, 2099430, 2099431, + 2099432, 2099433, 2099434, 2099456, 2099457, 2099458, 2099459, + 2099460, 2099461, 2099462, 2099489, 2099490, 2099491, 2099492, + 2099493, 2099494, 2099495, 2099496, 2099497, 2099498, 2099520, + 2099521, 2099522, 2099523, 2099524, 2099525, 2099553, 2099554, + 2099555, 2099556, 2099557, 2099558, 2099559, 2099560, 2099561, + 2099562, 2099584, 2099585, 2099586, 2099587, 2099588, 2099617, + 2099618, 2099619, 2099620, 2099621, 2099622, 2099623, 2099624, + 2099625, 2099626, 2099648, 2099649, 2099650, 2099651, 2099681, + 2099682, 2099683, 2099684, 2099685, 2099686, 2099687, 2099688, + 2099689, 2099690, 2099712, 2099713, 2099745, 2099746, 2099747, + 2099748, 2099749, 2099750, 2099751, 2099752, 2099753, 2099809, + 2099810, 2099811, 2099812, 2099813, 2099814, 2099815, 2099816, + 2099875, 2099876, 2099877, 2099878, 2099879, 2359298, 2359299, + 2359300, 2359301, 2359302, 2359303, 2359304, 2359305, 2359330, + 2359331, 2359332, 2359333, 2359334, 2359335, 2359336, 2359337, + 2359362, 2359363, 2359364, 2359365, 2359366, 2359367, 2359368, + 2359369, 2359393, 2359394, 2359395, 2359396, 2359397, 2359398, + 2359399, 2359400, 2359424, 2359425, 2359426, 2359427, 2359428, + 2359429, 2359430, 2359431, 2359432, 2359433, 2359434, 2359457, + 2359458, 2359459, 2359460, 2359461, 2359462, 2359463, 2359464, + 2359488, 2359489, 2359490, 2359491, 2359492, 2359493, 2359494, + 2359495, 2359496, 2359497, 2359498, 2359521, 2359522, 2359523, + 2359524, 2359525, 2359526, 2359527, 2359552, 2359553, 2359554, + 2359555, 2359556, 2359557, 2359558, 2359559, 2359560, 2359561, + 2359562, 2359585, 2359586, 2359587, 2359588, 2359589, 2359590, + 2359616, 2359617, 2359618, 2359619, 2359620, 2359621, 2359622, + 2359623, 2359624, 2359625, 2359626, 2359649, 2359650, 2359651, + 2359652, 2359653, 2359680, 2359681, 2359682, 2359683, 2359684, + 2359685, 2359686, 2359687, 2359688, 2359689, 2359690, 2359713, + 2359714, 2359715, 2359716, 2359744, 2359745, 2359746, 2359747, + 2359748, 2359749, 2359750, 2359751, 2359752, 2359753, 2359754, + 2359777, 2359778, 2359779, 2359808, 2359809, 2359810, 2359811, + 2359812, 2359813, 2359814, 2359815, 2359816, 2359817, 2359818, + 2359841, 2359842, 2359872, 2359873, 2359874, 2359875, 2359876, + 2359877, 2359878, 2359879, 2359880, 2359881, 2359938, 2359939, + 2359940, 2359941, 2359942, 2359943, 2359944, 2361409, 2361410, + 2361411, 2361412, 2361413, 2361414, 2361415, 2361416, 2361442, + 2361443, 2361444, 2361445, 2361446, 2361447, 2361448, 2361449, + 2361472, 2361473, 2361474, 2361475, 2361476, 2361477, 2361478, + 2361479, 2361480, 2361505, 2361506, 2361507, 2361508, 2361509, + 2361510, 2361511, 2361512, 2361513, 2361514, 2361536, 2361537, + 2361538, 2361539, 2361540, 2361541, 2361542, 2361543, 2361569, + 2361570, 2361571, 2361572, 2361573, 2361574, 2361575, 2361576, + 2361577, 2361578, 2361600, 2361601, 2361602, 2361603, 2361604, + 2361605, 2361606, 2361633, 2361634, 2361635, 2361636, 2361637, + 2361638, 2361639, 2361640, 2361641, 2361642, 2361664, 2361665, + 2361666, 2361667, 2361668, 2361669, 2361697, 2361698, 2361699, + 2361700, 2361701, 2361702, 2361703, 2361704, 2361705, 2361706, + 2361728, 2361729, 2361730, 2361731, 2361732, 2361761, 2361762, + 2361763, 2361764, 2361765, 2361766, 2361767, 2361768, 2361769, + 2361770, 2361792, 2361793, 2361794, 2361795, 2361825, 2361826, + 2361827, 2361828, 2361829, 2361830, 2361831, 2361832, 2361833, + 2361834, 2361856, 2361857, 2361858, 2361889, 2361890, 2361891, + 2361892, 2361893, 2361894, 2361895, 2361896, 2361897, 2361898, + 2361920, 2361953, 2361954, 2361955, 2361956, 2361957, 2361958, + 2361959, 2361960, 2361961, 2362018, 2362019, 2362020, 2362021, + 2362022, 2362023, 2362024, 2621442, 2621443, 2621444, 2621445, + 2621446, 2621447, 2621448, 2621449, 2621474, 2621475, 2621476, + 2621477, 2621478, 2621479, 2621480, 2621481, 2621506, 2621507, + 2621508, 2621509, 2621510, 2621511, 2621512, 2621513, 2621537, + 2621538, 2621539, 2621540, 2621541, 2621542, 2621543, 2621544, + 2621568, 2621569, 2621570, 2621571, 2621572, 2621573, 2621574, + 2621575, 2621576, 2621577, 2621601, 2621602, 2621603, 2621604, + 2621605, 2621606, 2621607, 2621632, 2621633, 2621634, 2621635, + 2621636, 2621637, 2621638, 2621639, 2621640, 2621641, 2621642, + 2621665, 2621666, 2621667, 2621668, 2621669, 2621670, 2621671, + 2621696, 2621697, 2621698, 2621699, 2621700, 2621701, 2621702, + 2621703, 2621704, 2621705, 2621706, 2621729, 2621730, 2621731, + 2621732, 2621733, 2621734, 2621760, 2621761, 2621762, 2621763, + 2621764, 2621765, 2621766, 2621767, 2621768, 2621769, 2621770, + 2621793, 2621794, 2621795, 2621796, 2621797, 2621824, 2621825, + 2621826, 2621827, 2621828, 2621829, 2621830, 2621831, 2621832, + 2621833, 2621834, 2621857, 2621858, 2621859, 2621860, 2621888, + 2621889, 2621890, 2621891, 2621892, 2621893, 2621894, 2621895, + 2621896, 2621897, 2621898, 2621921, 2621922, 2621923, 2621952, + 2621953, 2621954, 2621955, 2621956, 2621957, 2621958, 2621959, + 2621960, 2621961, 2621985, 2622016, 2622017, 2622018, 2622019, + 2622020, 2622021, 2622022, 2622023, 2622024, 2622025, 2622083, + 2622084, 2622085, 2622086, 2622087, 2623553, 2623554, 2623555, + 2623556, 2623557, 2623558, 2623559, 2623560, 2623586, 2623587, + 2623588, 2623589, 2623590, 2623591, 2623592, 2623593, 2623616, + 2623617, 2623618, 2623619, 2623620, 2623621, 2623622, 2623623, + 2623649, 2623650, 2623651, 2623652, 2623653, 2623654, 2623655, + 2623656, 2623657, 2623680, 2623681, 2623682, 2623683, 2623684, + 2623685, 2623686, 2623687, 2623713, 2623714, 2623715, 2623716, + 2623717, 2623718, 2623719, 2623720, 2623721, 2623722, 2623744, + 2623745, 2623746, 2623747, 2623748, 2623749, 2623750, 2623777, + 2623778, 2623779, 2623780, 2623781, 2623782, 2623783, 2623784, + 2623785, 2623786, 2623808, 2623809, 2623810, 2623811, 2623812, + 2623813, 2623841, 2623842, 2623843, 2623844, 2623845, 2623846, + 2623847, 2623848, 2623849, 2623850, 2623872, 2623873, 2623874, + 2623875, 2623876, 2623905, 2623906, 2623907, 2623908, 2623909, + 2623910, 2623911, 2623912, 2623913, 2623914, 2623936, 2623937, + 2623938, 2623939, 2623969, 2623970, 2623971, 2623972, 2623973, + 2623974, 2623975, 2623976, 2623977, 2623978, 2624000, 2624001, + 2624033, 2624034, 2624035, 2624036, 2624037, 2624038, 2624039, + 2624040, 2624041, 2624064, 2624097, 2624098, 2624099, 2624100, + 2624101, 2624102, 2624103, 2624104, 2624105, 2624163, 2624164, + 2624165, 2624166, 2624167, 2883586, 2883587, 2883588, 2883589, + 2883590, 2883591, 2883592, 2883593, 2883618, 2883619, 2883620, + 2883621, 2883622, 2883623, 2883624, 2883625, 2883650, 2883651, + 2883652, 2883653, 2883654, 2883655, 2883656, 2883657, 2883681, + 2883682, 2883683, 2883684, 2883685, 2883686, 2883687, 2883688, + 2883712, 2883713, 2883714, 2883715, 2883716, 2883717, 2883718, + 2883719, 2883720, 2883721, 2883722, 2883745, 2883746, 2883747, + 2883748, 2883749, 2883750, 2883751, 2883752, 2883776, 2883777, + 2883778, 2883779, 2883780, 2883781, 2883782, 2883783, 2883784, + 2883785, 2883786, 2883809, 2883810, 2883811, 2883812, 2883813, + 2883814, 2883815, 2883840, 2883841, 2883842, 2883843, 2883844, + 2883845, 2883846, 2883847, 2883848, 2883849, 2883850, 2883873, + 2883874, 2883875, 2883876, 2883877, 2883878, 2883904, 2883905, + 2883906, 2883907, 2883908, 2883909, 2883910, 2883911, 2883912, + 2883913, 2883914, 2883937, 2883938, 2883939, 2883940, 2883941, + 2883968, 2883969, 2883970, 2883971, 2883972, 2883973, 2883974, + 2883975, 2883976, 2883977, 2883978, 2884001, 2884002, 2884003, + 2884004, 2884032, 2884033, 2884034, 2884035, 2884036, 2884037, + 2884038, 2884039, 2884040, 2884041, 2884042, 2884065, 2884066, + 2884067, 2884096, 2884097, 2884098, 2884099, 2884100, 2884101, + 2884102, 2884103, 2884104, 2884105, 2884106, 2884129, 2884130, + 2884160, 2884161, 2884162, 2884163, 2884164, 2884165, 2884166, + 2884167, 2884168, 2884169, 2884226, 2884227, 2884228, 2884229, + 2884230, 2884231, 2884232, 2885697, 2885698, 2885699, 2885700, + 2885701, 2885702, 2885703, 2885704, 2885730, 2885731, 2885732, + 2885733, 2885734, 2885735, 2885736, 2885737, 2885760, 2885761, + 2885762, 2885763, 2885764, 2885765, 2885766, 2885767, 2885768, + 2885793, 2885794, 2885795, 2885796, 2885797, 2885798, 2885799, + 2885800, 2885801, 2885802, 2885824, 2885825, 2885826, 2885827, + 2885828, 2885829, 2885830, 2885831, 2885857, 2885858, 2885859, + 2885860, 2885861, 2885862, 2885863, 2885864, 2885865, 2885866, + 2885888, 2885889, 2885890, 2885891, 2885892, 2885893, 2885894, + 2885921, 2885922, 2885923, 2885924, 2885925, 2885926, 2885927, + 2885928, 2885929, 2885930, 2885952, 2885953, 2885954, 2885955, + 2885956, 2885957, 2885985, 2885986, 2885987, 2885988, 2885989, + 2885990, 2885991, 2885992, 2885993, 2885994, 2886016, 2886017, + 2886018, 2886019, 2886020, 2886049, 2886050, 2886051, 2886052, + 2886053, 2886054, 2886055, 2886056, 2886057, 2886058, 2886080, + 2886081, 2886082, 2886083, 2886113, 2886114, 2886115, 2886116, + 2886117, 2886118, 2886119, 2886120, 2886121, 2886122, 2886144, + 2886145, 2886146, 2886177, 2886178, 2886179, 2886180, 2886181, + 2886182, 2886183, 2886184, 2886185, 2886186, 2886208, 2886241, + 2886242, 2886243, 2886244, 2886245, 2886246, 2886247, 2886248, + 2886249, 2886306, 2886307, 2886308, 2886309, 2886310, 2886311, + 2886312, 3145730, 3145731, 3145732, 3145733, 3145734, 3145735, + 3145736, 3145737, 3145762, 3145763, 3145764, 3145765, 3145766, + 3145767, 3145768, 3145769, 3145794, 3145795, 3145796, 3145797, + 3145798, 3145799, 3145800, 3145801, 3145825, 3145826, 3145827, + 3145828, 3145829, 3145830, 3145831, 3145832, 3145856, 3145857, + 3145858, 3145859, 3145860, 3145861, 3145862, 3145863, 3145864, + 3145865, 3145889, 3145890, 3145891, 3145892, 3145893, 3145894, + 3145895, 3145920, 3145921, 3145922, 3145923, 3145924, 3145925, + 3145926, 3145927, 3145928, 3145929, 3145930, 3145953, 3145954, + 3145955, 3145956, 3145957, 3145958, 3145959, 3145984, 3145985, + 3145986, 3145987, 3145988, 3145989, 3145990, 3145991, 3145992, + 3145993, 3145994, 3146017, 3146018, 3146019, 3146020, 3146021, + 3146022, 3146048, 3146049, 3146050, 3146051, 3146052, 3146053, + 3146054, 3146055, 3146056, 3146057, 3146058, 3146081, 3146082, + 3146083, 3146084, 3146085, 3146112, 3146113, 3146114, 3146115, + 3146116, 3146117, 3146118, 3146119, 3146120, 3146121, 3146122, + 3146145, 3146146, 3146147, 3146148, 3146176, 3146177, 3146178, + 3146179, 3146180, 3146181, 3146182, 3146183, 3146184, 3146185, + 3146186, 3146209, 3146210, 3146211, 3146240, 3146241, 3146242, + 3146243, 3146244, 3146245, 3146246, 3146247, 3146248, 3146249, + 3146273, 3146304, 3146305, 3146306, 3146307, 3146308, 3146309, + 3146310, 3146311, 3146312, 3146313, 3146371, 3146372, 3146373, + 3146374, 3146375, 3147841, 3147842, 3147843, 3147844, 3147845, + 3147846, 3147847, 3147848, 3147874, 3147875, 3147876, 3147877, + 3147878, 3147879, 3147880, 3147881, 3147904, 3147905, 3147906, + 3147907, 3147908, 3147909, 3147910, 3147911, 3147937, 3147938, + 3147939, 3147940, 3147941, 3147942, 3147943, 3147944, 3147945, + 3147968, 3147969, 3147970, 3147971, 3147972, 3147973, 3147974, + 3147975, 3148001, 3148002, 3148003, 3148004, 3148005, 3148006, + 3148007, 3148008, 3148009, 3148010, 3148032, 3148033, 3148034, + 3148035, 3148036, 3148037, 3148038, 3148065, 3148066, 3148067, + 3148068, 3148069, 3148070, 3148071, 3148072, 3148073, 3148074, + 3148096, 3148097, 3148098, 3148099, 3148100, 3148101, 3148129, + 3148130, 3148131, 3148132, 3148133, 3148134, 3148135, 3148136, + 3148137, 3148138, 3148160, 3148161, 3148162, 3148163, 3148164, + 3148193, 3148194, 3148195, 3148196, 3148197, 3148198, 3148199, + 3148200, 3148201, 3148202, 3148224, 3148225, 3148226, 3148227, + 3148257, 3148258, 3148259, 3148260, 3148261, 3148262, 3148263, + 3148264, 3148265, 3148266, 3148288, 3148289, 3148321, 3148322, + 3148323, 3148324, 3148325, 3148326, 3148327, 3148328, 3148329, + 3148352, 3148385, 3148386, 3148387, 3148388, 3148389, 3148390, + 3148391, 3148392, 3148393, 3148451, 3148452, 3148453, 3148454, + 3148455, 3407874, 3407875, 3407876, 3407877, 3407878, 3407879, + 3407880, 3407881, 3407906, 3407907, 3407908, 3407909, 3407910, + 3407911, 3407912, 3407913, 3407938, 3407939, 3407940, 3407941, + 3407942, 3407943, 3407944, 3407945, 3407969, 3407970, 3407971, + 3407972, 3407973, 3407974, 3407975, 3407976, 3408000, 3408001, + 3408002, 3408003, 3408004, 3408005, 3408006, 3408007, 3408008, + 3408009, 3408010, 3408033, 3408034, 3408035, 3408036, 3408037, + 3408038, 3408039, 3408040, 3408064, 3408065, 3408066, 3408067, + 3408068, 3408069, 3408070, 3408071, 3408072, 3408073, 3408074, + 3408097, 3408098, 3408099, 3408100, 3408101, 3408102, 3408103, + 3408128, 3408129, 3408130, 3408131, 3408132, 3408133, 3408134, + 3408135, 3408136, 3408137, 3408138, 3408161, 3408162, 3408163, + 3408164, 3408165, 3408166, 3408192, 3408193, 3408194, 3408195, + 3408196, 3408197, 3408198, 3408199, 3408200, 3408201, 3408202, + 3408225, 3408226, 3408227, 3408228, 3408229, 3408256, 3408257, + 3408258, 3408259, 3408260, 3408261, 3408262, 3408263, 3408264, + 3408265, 3408266, 3408289, 3408290, 3408291, 3408292, 3408320, + 3408321, 3408322, 3408323, 3408324, 3408325, 3408326, 3408327, + 3408328, 3408329, 3408330, 3408353, 3408354, 3408355, 3408384, + 3408385, 3408386, 3408387, 3408388, 3408389, 3408390, 3408391, + 3408392, 3408393, 3408394, 3408417, 3408418, 3408448, 3408449, + 3408450, 3408451, 3408452, 3408453, 3408454, 3408455, 3408456, + 3408457, 3408514, 3408515, 3408516, 3408517, 3408518, 3408519, + 3408520, 3409985, 3409986, 3409987, 3409988, 3409989, 3409990, + 3409991, 3409992, 3410018, 3410019, 3410020, 3410021, 3410022, + 3410023, 3410024, 3410025, 3410048, 3410049, 3410050, 3410051, + 3410052, 3410053, 3410054, 3410055, 3410056, 3410081, 3410082, + 3410083, 3410084, 3410085, 3410086, 3410087, 3410088, 3410089, + 3410090, 3410112, 3410113, 3410114, 3410115, 3410116, 3410117, + 3410118, 3410119, 3410145, 3410146, 3410147, 3410148, 3410149, + 3410150, 3410151, 3410152, 3410153, 3410154, 3410176, 3410177, + 3410178, 3410179, 3410180, 3410181, 3410182, 3410209, 3410210, + 3410211, 3410212, 3410213, 3410214, 3410215, 3410216, 3410217, + 3410218, 3410240, 3410241, 3410242, 3410243, 3410244, 3410245, + 3410273, 3410274, 3410275, 3410276, 3410277, 3410278, 3410279, + 3410280, 3410281, 3410282, 3410304, 3410305, 3410306, 3410307, + 3410308, 3410337, 3410338, 3410339, 3410340, 3410341, 3410342, + 3410343, 3410344, 3410345, 3410346, 3410368, 3410369, 3410370, + 3410371, 3410401, 3410402, 3410403, 3410404, 3410405, 3410406, + 3410407, 3410408, 3410409, 3410410, 3410432, 3410433, 3410434, + 3410465, 3410466, 3410467, 3410468, 3410469, 3410470, 3410471, + 3410472, 3410473, 3410474, 3410496, 3410529, 3410530, 3410531, + 3410532, 3410533, 3410534, 3410535, 3410536, 3410537, 3410594, + 3410595, 3410596, 3410597, 3410598, 3410599, 3410600, 3670018, + 3670019, 3670020, 3670021, 3670022, 3670023, 3670024, 3670025, + 3670050, 3670051, 3670052, 3670053, 3670054, 3670055, 3670056, + 3670057, 3670082, 3670083, 3670084, 3670085, 3670086, 3670087, + 3670088, 3670089, 3670113, 3670114, 3670115, 3670116, 3670117, + 3670118, 3670119, 3670120, 3670144, 3670145, 3670146, 3670147, + 3670148, 3670149, 3670150, 3670151, 3670152, 3670153, 3670154, + 3670177, 3670178, 3670179, 3670180, 3670181, 3670182, 3670183, + 3670184, 3670208, 3670209, 3670210, 3670211, 3670212, 3670213, + 3670214, 3670215, 3670216, 3670217, 3670218, 3670241, 3670242, + 3670243, 3670244, 3670245, 3670246, 3670247, 3670272, 3670273, + 3670274, 3670275, 3670276, 3670277, 3670278, 3670279, 3670280, + 3670281, 3670282, 3670305, 3670306, 3670307, 3670308, 3670309, + 3670310, 3670336, 3670337, 3670338, 3670339, 3670340, 3670341, + 3670342, 3670343, 3670344, 3670345, 3670346, 3670369, 3670370, + 3670371, 3670372, 3670373, 3670400, 3670401, 3670402, 3670403, + 3670404, 3670405, 3670406, 3670407, 3670408, 3670409, 3670410, + 3670433, 3670434, 3670435, 3670436, 3670464, 3670465, 3670466, + 3670467, 3670468, 3670469, 3670470, 3670471, 3670472, 3670473, + 3670474, 3670497, 3670498, 3670499, 3670528, 3670529, 3670530, + 3670531, 3670532, 3670533, 3670534, 3670535, 3670536, 3670537, + 3670538, 3670561, 3670562, 3670592, 3670593, 3670594, 3670595, + 3670596, 3670597, 3670598, 3670599, 3670600, 3670601, 3670658, + 3670659, 3670660, 3670661, 3670662, 3670663, 3670664, 3672129, + 3672130, 3672131, 3672132, 3672133, 3672134, 3672135, 3672136, + 3672162, 3672163, 3672164, 3672165, 3672166, 3672167, 3672168, + 3672169, 3672192, 3672193, 3672194, 3672195, 3672196, 3672197, + 3672198, 3672199, 3672200, 3672225, 3672226, 3672227, 3672228, + 3672229, 3672230, 3672231, 3672232, 3672233, 3672234, 3672256, + 3672257, 3672258, 3672259, 3672260, 3672261, 3672262, 3672263, + 3672289, 3672290, 3672291, 3672292, 3672293, 3672294, 3672295, + 3672296, 3672297, 3672298, 3672320, 3672321, 3672322, 3672323, + 3672324, 3672325, 3672326, 3672353, 3672354, 3672355, 3672356, + 3672357, 3672358, 3672359, 3672360, 3672361, 3672362, 3672384, + 3672385, 3672386, 3672387, 3672388, 3672389, 3672417, 3672418, + 3672419, 3672420, 3672421, 3672422, 3672423, 3672424, 3672425, + 3672426, 3672448, 3672449, 3672450, 3672451, 3672452, 3672481, + 3672482, 3672483, 3672484, 3672485, 3672486, 3672487, 3672488, + 3672489, 3672490, 3672512, 3672513, 3672514, 3672515, 3672545, + 3672546, 3672547, 3672548, 3672549, 3672550, 3672551, 3672552, + 3672553, 3672554, 3672576, 3672577, 3672578, 3672609, 3672610, + 3672611, 3672612, 3672613, 3672614, 3672615, 3672616, 3672617, + 3672618, 3672640, 3672673, 3672674, 3672675, 3672676, 3672677, + 3672678, 3672679, 3672680, 3672681, 3672738, 3672739, 3672740, + 3672741, 3672742, 3672743, 3672744, 3932162, 3932163, 3932164, + 3932165, 3932166, 3932167, 3932168, 3932169, 3932194, 3932195, + 3932196, 3932197, 3932198, 3932199, 3932200, 3932201, 3932226, + 3932227, 3932228, 3932229, 3932230, 3932231, 3932232, 3932233, + 3932257, 3932258, 3932259, 3932260, 3932261, 3932262, 3932263, + 3932264, 3932288, 3932289, 3932290, 3932291, 3932292, 3932293, + 3932294, 3932295, 3932296, 3932297, 3932298, 3932321, 3932322, + 3932323, 3932324, 3932325, 3932326, 3932327, 3932328, 3932352, + 3932353, 3932354, 3932355, 3932356, 3932357, 3932358, 3932359, + 3932360, 3932361, 3932362, 3932385, 3932386, 3932387, 3932388, + 3932389, 3932390, 3932391, 3932416, 3932417, 3932418, 3932419, + 3932420, 3932421, 3932422, 3932423, 3932424, 3932425, 3932426, + 3932427, 3932449, 3932450, 3932451, 3932452, 3932453, 3932454, + 3932455, 3932480, 3932481, 3932482, 3932483, 3932484, 3932485, + 3932486, 3932487, 3932488, 3932489, 3932490, 3932513, 3932514, + 3932515, 3932516, 3932517, 3932544, 3932545, 3932546, 3932547, + 3932548, 3932549, 3932550, 3932551, 3932552, 3932553, 3932554, + 3932577, 3932578, 3932579, 3932580, 3932608, 3932609, 3932610, + 3932611, 3932612, 3932613, 3932614, 3932615, 3932616, 3932617, + 3932618, 3932619, 3932641, 3932642, 3932643, 3932644, 3932672, + 3932673, 3932674, 3932675, 3932676, 3932677, 3932678, 3932679, + 3932680, 3932681, 3932682, 3932705, 3932706, 3932736, 3932737, + 3932738, 3932739, 3932740, 3932741, 3932742, 3932743, 3932744, + 3932745, 3932802, 3932803, 3932804, 3932805, 3932806, 3932807, + 3932808, 3932868, 3932871, 3934273, 3934274, 3934275, 3934276, + 3934277, 3934278, 3934279, 3934280, 3934306, 3934307, 3934308, + 3934309, 3934310, 3934311, 3934312, 3934313, 3934336, 3934337, + 3934338, 3934339, 3934340, 3934341, 3934342, 3934343, 3934344, + 3934369, 3934370, 3934371, 3934372, 3934373, 3934374, 3934375, + 3934376, 3934377, 3934378, 3934400, 3934401, 3934402, 3934403, + 3934404, 3934405, 3934406, 3934407, 3934433, 3934434, 3934435, + 3934436, 3934437, 3934438, 3934439, 3934440, 3934441, 3934442, + 3934464, 3934465, 3934466, 3934467, 3934468, 3934469, 3934470, + 3934471, 3934497, 3934498, 3934499, 3934500, 3934501, 3934502, + 3934503, 3934504, 3934505, 3934506, 3934507, 3934528, 3934529, + 3934530, 3934531, 3934532, 3934533, 3934561, 3934562, 3934563, + 3934564, 3934565, 3934566, 3934567, 3934568, 3934569, 3934570, + 3934592, 3934593, 3934594, 3934595, 3934596, 3934625, 3934626, + 3934627, 3934628, 3934629, 3934630, 3934631, 3934632, 3934633, + 3934634, 3934656, 3934657, 3934658, 3934659, 3934660, 3934689, + 3934690, 3934691, 3934692, 3934693, 3934694, 3934695, 3934696, + 3934697, 3934698, 3934699, 3934720, 3934721, 3934722, 3934753, + 3934754, 3934755, 3934756, 3934757, 3934758, 3934759, 3934760, + 3934761, 3934762, 3934784, 3934817, 3934818, 3934819, 3934820, + 3934821, 3934822, 3934823, 3934824, 3934825, 3934882, 3934883, + 3934884, 3934885, 3934886, 3934887, 3934888, 3934948, 3934951, + 4194306, 4194307, 4194308, 4194309, 4194310, 4194311, 4194312, + 4194313, 4194338, 4194339, 4194340, 4194341, 4194342, 4194343, + 4194344, 4194345, 4194370, 4194371, 4194372, 4194373, 4194374, + 4194375, 4194376, 4194377, 4194401, 4194402, 4194403, 4194404, + 4194405, 4194406, 4194407, 4194408, 4194432, 4194433, 4194434, + 4194435, 4194436, 4194437, 4194438, 4194439, 4194440, 4194441, + 4194442, 4194465, 4194466, 4194467, 4194468, 4194469, 4194470, + 4194471, 4194472, 4194496, 4194497, 4194498, 4194499, 4194500, + 4194501, 4194502, 4194503, 4194504, 4194505, 4194506, 4194529, + 4194530, 4194531, 4194532, 4194533, 4194534, 4194535, 4194560, + 4194561, 4194562, 4194563, 4194564, 4194565, 4194566, 4194567, + 4194568, 4194569, 4194570, 4194593, 4194594, 4194595, 4194596, + 4194597, 4194598, 4194624, 4194625, 4194626, 4194627, 4194628, + 4194629, 4194630, 4194631, 4194632, 4194633, 4194634, 4194657, + 4194658, 4194659, 4194660, 4194661, 4194688, 4194689, 4194690, + 4194691, 4194692, 4194693, 4194694, 4194695, 4194696, 4194697, + 4194698, 4194721, 4194722, 4194723, 4194724, 4194752, 4194753, + 4194754, 4194755, 4194756, 4194757, 4194758, 4194759, 4194760, + 4194761, 4194762, 4194785, 4194786, 4194787, 4194816, 4194817, + 4194818, 4194819, 4194820, 4194821, 4194822, 4194823, 4194824, + 4194825, 4194826, 4194849, 4194850, 4194880, 4194881, 4194882, + 4194883, 4194884, 4194885, 4194886, 4194887, 4194888, 4194889, + 4194946, 4194947, 4194948, 4194949, 4194950, 4194951, 4194952, + 4196417, 4196418, 4196419, 4196420, 4196421, 4196422, 4196423, + 4196424, 4196450, 4196451, 4196452, 4196453, 4196454, 4196455, + 4196456, 4196457, 4196480, 4196481, 4196482, 4196483, 4196484, + 4196485, 4196486, 4196487, 4196488, 4196513, 4196514, 4196515, + 4196516, 4196517, 4196518, 4196519, 4196520, 4196521, 4196522, + 4196544, 4196545, 4196546, 4196547, 4196548, 4196549, 4196550, + 4196551, 4196577, 4196578, 4196579, 4196580, 4196581, 4196582, + 4196583, 4196584, 4196585, 4196586, 4196608, 4196609, 4196610, + 4196611, 4196612, 4196613, 4196614, 4196641, 4196642, 4196643, + 4196644, 4196645, 4196646, 4196647, 4196648, 4196649, 4196650, + 4196672, 4196673, 4196674, 4196675, 4196676, 4196677, 4196705, + 4196706, 4196707, 4196708, 4196709, 4196710, 4196711, 4196712, + 4196713, 4196714, 4196736, 4196737, 4196738, 4196739, 4196740, + 4196769, 4196770, 4196771, 4196772, 4196773, 4196774, 4196775, + 4196776, 4196777, 4196778, 4196800, 4196801, 4196802, 4196803, + 4196833, 4196834, 4196835, 4196836, 4196837, 4196838, 4196839, + 4196840, 4196841, 4196842, 4196864, 4196865, 4196866, 4196897, + 4196898, 4196899, 4196900, 4196901, 4196902, 4196903, 4196904, + 4196905, 4196906, 4196928, 4196961, 4196962, 4196963, 4196964, + 4196965, 4196966, 4196967, 4196968, 4196969, 4197026, 4197027, + 4197028, 4197029, 4197030, 4197031, 4197032, 4456450, 4456451, + 4456452, 4456453, 4456454, 4456455, 4456456, 4456457, 4456482, + 4456483, 4456484, 4456485, 4456486, 4456487, 4456488, 4456489, + 4456514, 4456515, 4456516, 4456517, 4456518, 4456519, 4456520, + 4456521, 4456545, 4456546, 4456547, 4456548, 4456549, 4456550, + 4456551, 4456552, 4456576, 4456577, 4456578, 4456579, 4456580, + 4456581, 4456582, 4456583, 4456584, 4456585, 4456586, 4456609, + 4456610, 4456611, 4456612, 4456613, 4456614, 4456615, 4456616, + 4456640, 4456641, 4456642, 4456643, 4456644, 4456645, 4456646, + 4456647, 4456648, 4456649, 4456650, 4456673, 4456674, 4456675, + 4456676, 4456677, 4456678, 4456679, 4456704, 4456705, 4456706, + 4456707, 4456708, 4456709, 4456710, 4456711, 4456712, 4456713, + 4456714, 4456715, 4456737, 4456738, 4456739, 4456740, 4456741, + 4456742, 4456743, 4456768, 4456769, 4456770, 4456771, 4456772, + 4456773, 4456774, 4456775, 4456776, 4456777, 4456778, 4456801, + 4456802, 4456803, 4456804, 4456805, 4456832, 4456833, 4456834, + 4456835, 4456836, 4456837, 4456838, 4456839, 4456840, 4456841, + 4456842, 4456865, 4456866, 4456867, 4456868, 4456896, 4456897, + 4456898, 4456899, 4456900, 4456901, 4456902, 4456903, 4456904, + 4456905, 4456906, 4456907, 4456929, 4456930, 4456931, 4456932, + 4456960, 4456961, 4456962, 4456963, 4456964, 4456965, 4456966, + 4456967, 4456968, 4456969, 4456970, 4456993, 4456994, 4457024, + 4457025, 4457026, 4457027, 4457028, 4457029, 4457030, 4457031, + 4457032, 4457033, 4457090, 4457091, 4457092, 4457093, 4457094, + 4457095, 4457096, 4457156, 4457159, 4458561, 4458562, 4458563, + 4458564, 4458565, 4458566, 4458567, 4458568, 4458594, 4458595, + 4458596, 4458597, 4458598, 4458599, 4458600, 4458601, 4458624, + 4458625, 4458626, 4458627, 4458628, 4458629, 4458630, 4458631, + 4458632, 4458657, 4458658, 4458659, 4458660, 4458661, 4458662, + 4458663, 4458664, 4458665, 4458666, 4458688, 4458689, 4458690, + 4458691, 4458692, 4458693, 4458694, 4458695, 4458721, 4458722, + 4458723, 4458724, 4458725, 4458726, 4458727, 4458728, 4458729, + 4458730, 4458752, 4458753, 4458754, 4458755, 4458756, 4458757, + 4458758, 4458759, 4458785, 4458786, 4458787, 4458788, 4458789, + 4458790, 4458791, 4458792, 4458793, 4458794, 4458795, 4458816, + 4458817, 4458818, 4458819, 4458820, 4458821, 4458849, 4458850, + 4458851, 4458852, 4458853, 4458854, 4458855, 4458856, 4458857, + 4458858, 4458880, 4458881, 4458882, 4458883, 4458884, 4458913, + 4458914, 4458915, 4458916, 4458917, 4458918, 4458919, 4458920, + 4458921, 4458922, 4458944, 4458945, 4458946, 4458947, 4458948, + 4458977, 4458978, 4458979, 4458980, 4458981, 4458982, 4458983, + 4458984, 4458985, 4458986, 4458987, 4459008, 4459009, 4459010, + 4459041, 4459042, 4459043, 4459044, 4459045, 4459046, 4459047, + 4459048, 4459049, 4459050, 4459072, 4459105, 4459106, 4459107, + 4459108, 4459109, 4459110, 4459111, 4459112, 4459113, 4459170, + 4459171, 4459172, 4459173, 4459174, 4459175, 4459176, 4459236, + 4459239, 4718594, 4718595, 4718596, 4718597, 4718598, 4718599, + 4718600, 4718601, 4718626, 4718627, 4718628, 4718629, 4718630, + 4718631, 4718632, 4718633, 4718658, 4718659, 4718660, 4718661, + 4718662, 4718663, 4718664, 4718665, 4718689, 4718690, 4718691, + 4718692, 4718693, 4718694, 4718695, 4718696, 4718720, 4718721, + 4718722, 4718723, 4718724, 4718725, 4718726, 4718727, 4718728, + 4718729, 4718730, 4718753, 4718754, 4718755, 4718756, 4718757, + 4718758, 4718759, 4718760, 4718784, 4718785, 4718786, 4718787, + 4718788, 4718789, 4718790, 4718791, 4718792, 4718793, 4718794, + 4718817, 4718818, 4718819, 4718820, 4718821, 4718822, 4718823, + 4718848, 4718849, 4718850, 4718851, 4718852, 4718853, 4718854, + 4718855, 4718856, 4718857, 4718858, 4718881, 4718882, 4718883, + 4718884, 4718885, 4718886, 4718912, 4718913, 4718914, 4718915, + 4718916, 4718917, 4718918, 4718919, 4718920, 4718921, 4718922, + 4718945, 4718946, 4718947, 4718948, 4718949, 4718976, 4718977, + 4718978, 4718979, 4718980, 4718981, 4718982, 4718983, 4718984, + 4718985, 4718986, 4719009, 4719010, 4719011, 4719012, 4719040, + 4719041, 4719042, 4719043, 4719044, 4719045, 4719046, 4719047, + 4719048, 4719049, 4719050, 4719073, 4719074, 4719075, 4719104, + 4719105, 4719106, 4719107, 4719108, 4719109, 4719110, 4719111, + 4719112, 4719113, 4719114, 4719137, 4719138, 4719168, 4719169, + 4719170, 4719171, 4719172, 4719173, 4719174, 4719175, 4719176, + 4719177, 4719234, 4719235, 4719236, 4719237, 4719238, 4719239, + 4719240, 4720705, 4720706, 4720707, 4720708, 4720709, 4720710, + 4720711, 4720712, 4720738, 4720739, 4720740, 4720741, 4720742, + 4720743, 4720744, 4720745, 4720768, 4720769, 4720770, 4720771, + 4720772, 4720773, 4720774, 4720775, 4720776, 4720801, 4720802, + 4720803, 4720804, 4720805, 4720806, 4720807, 4720808, 4720809, + 4720810, 4720832, 4720833, 4720834, 4720835, 4720836, 4720837, + 4720838, 4720839, 4720865, 4720866, 4720867, 4720868, 4720869, + 4720870, 4720871, 4720872, 4720873, 4720874, 4720896, 4720897, + 4720898, 4720899, 4720900, 4720901, 4720902, 4720929, 4720930, + 4720931, 4720932, 4720933, 4720934, 4720935, 4720936, 4720937, + 4720938, 4720960, 4720961, 4720962, 4720963, 4720964, 4720965, + 4720993, 4720994, 4720995, 4720996, 4720997, 4720998, 4720999, + 4721000, 4721001, 4721002, 4721024, 4721025, 4721026, 4721027, + 4721028, 4721057, 4721058, 4721059, 4721060, 4721061, 4721062, + 4721063, 4721064, 4721065, 4721066, 4721088, 4721089, 4721090, + 4721091, 4721121, 4721122, 4721123, 4721124, 4721125, 4721126, + 4721127, 4721128, 4721129, 4721130, 4721152, 4721153, 4721154, + 4721185, 4721186, 4721187, 4721188, 4721189, 4721190, 4721191, + 4721192, 4721193, 4721194, 4721216, 4721249, 4721250, 4721251, + 4721252, 4721253, 4721254, 4721255, 4721256, 4721257, 4721314, + 4721315, 4721316, 4721317, 4721318, 4721319, 4721320, 4980738, + 4980739, 4980740, 4980741, 4980742, 4980743, 4980744, 4980745, + 4980770, 4980771, 4980772, 4980773, 4980774, 4980775, 4980776, + 4980777, 4980802, 4980803, 4980804, 4980805, 4980806, 4980807, + 4980808, 4980809, 4980810, 4980833, 4980834, 4980835, 4980836, + 4980837, 4980838, 4980839, 4980840, 4980864, 4980865, 4980866, + 4980867, 4980868, 4980869, 4980870, 4980871, 4980872, 4980873, + 4980874, 4980897, 4980898, 4980899, 4980900, 4980901, 4980902, + 4980903, 4980904, 4980928, 4980929, 4980930, 4980931, 4980932, + 4980933, 4980934, 4980935, 4980936, 4980937, 4980938, 4980961, + 4980962, 4980963, 4980964, 4980965, 4980966, 4980967, 4980992, + 4980993, 4980994, 4980995, 4980996, 4980997, 4980998, 4980999, + 4981000, 4981001, 4981002, 4981003, 4981025, 4981026, 4981027, + 4981028, 4981029, 4981030, 4981031, 4981056, 4981057, 4981058, + 4981059, 4981060, 4981061, 4981062, 4981063, 4981064, 4981065, + 4981066, 4981089, 4981090, 4981091, 4981092, 4981093, 4981120, + 4981121, 4981122, 4981123, 4981124, 4981125, 4981126, 4981127, + 4981128, 4981129, 4981130, 4981153, 4981154, 4981155, 4981156, + 4981184, 4981185, 4981186, 4981187, 4981188, 4981189, 4981190, + 4981191, 4981192, 4981193, 4981194, 4981195, 4981217, 4981218, + 4981219, 4981220, 4981248, 4981249, 4981250, 4981251, 4981252, + 4981253, 4981254, 4981255, 4981256, 4981257, 4981258, 4981281, + 4981282, 4981312, 4981313, 4981314, 4981315, 4981316, 4981317, + 4981318, 4981319, 4981320, 4981321, 4981345, 4981378, 4981379, + 4981380, 4981381, 4981382, 4981383, 4981384, 4981385, 4981444, + 4981447, 4982849, 4982850, 4982851, 4982852, 4982853, 4982854, + 4982855, 4982856, 4982882, 4982883, 4982884, 4982885, 4982886, + 4982887, 4982888, 4982889, 4982890, 4982912, 4982913, 4982914, + 4982915, 4982916, 4982917, 4982918, 4982919, 4982920, 4982945, + 4982946, 4982947, 4982948, 4982949, 4982950, 4982951, 4982952, + 4982953, 4982954, 4982976, 4982977, 4982978, 4982979, 4982980, + 4982981, 4982982, 4982983, 4983009, 4983010, 4983011, 4983012, + 4983013, 4983014, 4983015, 4983016, 4983017, 4983018, 4983040, + 4983041, 4983042, 4983043, 4983044, 4983045, 4983046, 4983047, + 4983073, 4983074, 4983075, 4983076, 4983077, 4983078, 4983079, + 4983080, 4983081, 4983082, 4983083, 4983104, 4983105, 4983106, + 4983107, 4983108, 4983109, 4983137, 4983138, 4983139, 4983140, + 4983141, 4983142, 4983143, 4983144, 4983145, 4983146, 4983168, + 4983169, 4983170, 4983171, 4983172, 4983201, 4983202, 4983203, + 4983204, 4983205, 4983206, 4983207, 4983208, 4983209, 4983210, + 4983232, 4983233, 4983234, 4983235, 4983236, 4983265, 4983266, + 4983267, 4983268, 4983269, 4983270, 4983271, 4983272, 4983273, + 4983274, 4983275, 4983296, 4983297, 4983298, 4983329, 4983330, + 4983331, 4983332, 4983333, 4983334, 4983335, 4983336, 4983337, + 4983338, 4983360, 4983361, 4983393, 4983394, 4983395, 4983396, + 4983397, 4983398, 4983399, 4983400, 4983401, 4983458, 4983459, + 4983460, 4983461, 4983462, 4983463, 4983464, 4983465, 4983524, + 4983527, 5242882, 5242883, 5242884, 5242885, 5242886, 5242887, + 5242888, 5242889, 5242914, 5242915, 5242916, 5242917, 5242918, + 5242919, 5242920, 5242921, 5242946, 5242947, 5242948, 5242949, + 5242950, 5242951, 5242952, 5242953, 5242977, 5242978, 5242979, + 5242980, 5242981, 5242982, 5242983, 5242984, 5243008, 5243009, + 5243010, 5243011, 5243012, 5243013, 5243014, 5243015, 5243016, + 5243017, 5243018, 5243041, 5243042, 5243043, 5243044, 5243045, + 5243046, 5243047, 5243048, 5243072, 5243073, 5243074, 5243075, + 5243076, 5243077, 5243078, 5243079, 5243080, 5243081, 5243082, + 5243105, 5243106, 5243107, 5243108, 5243109, 5243110, 5243111, + 5243136, 5243137, 5243138, 5243139, 5243140, 5243141, 5243142, + 5243143, 5243144, 5243145, 5243146, 5243169, 5243170, 5243171, + 5243172, 5243173, 5243174, 5243200, 5243201, 5243202, 5243203, + 5243204, 5243205, 5243206, 5243207, 5243208, 5243209, 5243210, + 5243233, 5243234, 5243235, 5243236, 5243237, 5243264, 5243265, + 5243266, 5243267, 5243268, 5243269, 5243270, 5243271, 5243272, + 5243273, 5243274, 5243297, 5243298, 5243299, 5243300, 5243328, + 5243329, 5243330, 5243331, 5243332, 5243333, 5243334, 5243335, + 5243336, 5243337, 5243338, 5243361, 5243362, 5243363, 5243392, + 5243393, 5243394, 5243395, 5243396, 5243397, 5243398, 5243399, + 5243400, 5243401, 5243402, 5243425, 5243426, 5243456, 5243457, + 5243458, 5243459, 5243460, 5243461, 5243462, 5243463, 5243464, + 5243465, 5243522, 5243523, 5243524, 5243525, 5243526, 5243527, + 5243528, 5244993, 5244994, 5244995, 5244996, 5244997, 5244998, + 5244999, 5245000, 5245026, 5245027, 5245028, 5245029, 5245030, + 5245031, 5245032, 5245033, 5245056, 5245057, 5245058, 5245059, + 5245060, 5245061, 5245062, 5245063, 5245064, 5245089, 5245090, + 5245091, 5245092, 5245093, 5245094, 5245095, 5245096, 5245097, + 5245098, 5245120, 5245121, 5245122, 5245123, 5245124, 5245125, + 5245126, 5245127, 5245153, 5245154, 5245155, 5245156, 5245157, + 5245158, 5245159, 5245160, 5245161, 5245162, 5245184, 5245185, + 5245186, 5245187, 5245188, 5245189, 5245190, 5245217, 5245218, + 5245219, 5245220, 5245221, 5245222, 5245223, 5245224, 5245225, + 5245226, 5245248, 5245249, 5245250, 5245251, 5245252, 5245253, + 5245281, 5245282, 5245283, 5245284, 5245285, 5245286, 5245287, + 5245288, 5245289, 5245290, 5245312, 5245313, 5245314, 5245315, + 5245316, 5245345, 5245346, 5245347, 5245348, 5245349, 5245350, + 5245351, 5245352, 5245353, 5245354, 5245376, 5245377, 5245378, + 5245379, 5245409, 5245410, 5245411, 5245412, 5245413, 5245414, + 5245415, 5245416, 5245417, 5245418, 5245440, 5245441, 5245442, + 5245473, 5245474, 5245475, 5245476, 5245477, 5245478, 5245479, + 5245480, 5245481, 5245482, 5245504, 5245537, 5245538, 5245539, + 5245540, 5245541, 5245542, 5245543, 5245544, 5245545, 5245602, + 5245603, 5245604, 5245605, 5245606, 5245607, 5245608, 5505026, + 5505027, 5505028, 5505029, 5505030, 5505031, 5505032, 5505033, + 5505058, 5505059, 5505060, 5505061, 5505062, 5505063, 5505064, + 5505065, 5505090, 5505091, 5505092, 5505093, 5505094, 5505095, + 5505096, 5505097, 5505098, 5505121, 5505122, 5505123, 5505124, + 5505125, 5505126, 5505127, 5505128, 5505129, 5505152, 5505153, + 5505154, 5505155, 5505156, 5505157, 5505158, 5505159, 5505160, + 5505161, 5505162, 5505185, 5505186, 5505187, 5505188, 5505189, + 5505190, 5505191, 5505192, 5505216, 5505217, 5505218, 5505219, + 5505220, 5505221, 5505222, 5505223, 5505224, 5505225, 5505226, + 5505249, 5505250, 5505251, 5505252, 5505253, 5505254, 5505255, + 5505280, 5505281, 5505282, 5505283, 5505284, 5505285, 5505286, + 5505287, 5505288, 5505289, 5505290, 5505291, 5505313, 5505314, + 5505315, 5505316, 5505317, 5505318, 5505319, 5505344, 5505345, + 5505346, 5505347, 5505348, 5505349, 5505350, 5505351, 5505352, + 5505353, 5505354, 5505377, 5505378, 5505379, 5505380, 5505381, + 5505408, 5505409, 5505410, 5505411, 5505412, 5505413, 5505414, + 5505415, 5505416, 5505417, 5505418, 5505441, 5505442, 5505443, + 5505444, 5505472, 5505473, 5505474, 5505475, 5505476, 5505477, + 5505478, 5505479, 5505480, 5505481, 5505482, 5505483, 5505505, + 5505506, 5505507, 5505508, 5505536, 5505537, 5505538, 5505539, + 5505540, 5505541, 5505542, 5505543, 5505544, 5505545, 5505546, + 5505569, 5505570, 5505600, 5505601, 5505602, 5505603, 5505604, + 5505605, 5505606, 5505607, 5505608, 5505609, 5505610, 5505633, + 5505665, 5505666, 5505667, 5505668, 5505669, 5505670, 5505671, + 5505672, 5505673, 5505732, 5505735, 5507137, 5507138, 5507139, + 5507140, 5507141, 5507142, 5507143, 5507144, 5507145, 5507170, + 5507171, 5507172, 5507173, 5507174, 5507175, 5507176, 5507177, + 5507178, 5507200, 5507201, 5507202, 5507203, 5507204, 5507205, + 5507206, 5507207, 5507208, 5507233, 5507234, 5507235, 5507236, + 5507237, 5507238, 5507239, 5507240, 5507241, 5507242, 5507264, + 5507265, 5507266, 5507267, 5507268, 5507269, 5507270, 5507271, + 5507297, 5507298, 5507299, 5507300, 5507301, 5507302, 5507303, + 5507304, 5507305, 5507306, 5507328, 5507329, 5507330, 5507331, + 5507332, 5507333, 5507334, 5507335, 5507361, 5507362, 5507363, + 5507364, 5507365, 5507366, 5507367, 5507368, 5507369, 5507370, + 5507371, 5507392, 5507393, 5507394, 5507395, 5507396, 5507397, + 5507425, 5507426, 5507427, 5507428, 5507429, 5507430, 5507431, + 5507432, 5507433, 5507434, 5507456, 5507457, 5507458, 5507459, + 5507460, 5507489, 5507490, 5507491, 5507492, 5507493, 5507494, + 5507495, 5507496, 5507497, 5507498, 5507520, 5507521, 5507522, + 5507523, 5507524, 5507553, 5507554, 5507555, 5507556, 5507557, + 5507558, 5507559, 5507560, 5507561, 5507562, 5507563, 5507584, + 5507585, 5507586, 5507617, 5507618, 5507619, 5507620, 5507621, + 5507622, 5507623, 5507624, 5507625, 5507626, 5507648, 5507649, + 5507681, 5507682, 5507683, 5507684, 5507685, 5507686, 5507687, + 5507688, 5507689, 5507690, 5507745, 5507746, 5507747, 5507748, + 5507749, 5507750, 5507751, 5507752, 5507753, 5507812, 5507815, + 5767170, 5767171, 5767172, 5767173, 5767174, 5767175, 5767176, + 5767177, 5767202, 5767203, 5767204, 5767205, 5767206, 5767207, + 5767208, 5767209, 5767234, 5767235, 5767236, 5767237, 5767238, + 5767239, 5767240, 5767241, 5767265, 5767266, 5767267, 5767268, + 5767269, 5767270, 5767271, 5767272, 5767296, 5767297, 5767298, + 5767299, 5767300, 5767301, 5767302, 5767303, 5767304, 5767305, + 5767306, 5767329, 5767330, 5767331, 5767332, 5767333, 5767334, + 5767335, 5767336, 5767360, 5767361, 5767362, 5767363, 5767364, + 5767365, 5767366, 5767367, 5767368, 5767369, 5767370, 5767393, + 5767394, 5767395, 5767396, 5767397, 5767398, 5767399, 5767424, + 5767425, 5767426, 5767427, 5767428, 5767429, 5767430, 5767431, + 5767432, 5767433, 5767434, 5767457, 5767458, 5767459, 5767460, + 5767461, 5767462, 5767488, 5767489, 5767490, 5767491, 5767492, + 5767493, 5767494, 5767495, 5767496, 5767497, 5767498, 5767521, + 5767522, 5767523, 5767524, 5767525, 5767552, 5767553, 5767554, + 5767555, 5767556, 5767557, 5767558, 5767559, 5767560, 5767561, + 5767562, 5767585, 5767586, 5767587, 5767588, 5767616, 5767617, + 5767618, 5767619, 5767620, 5767621, 5767622, 5767623, 5767624, + 5767625, 5767626, 5767649, 5767650, 5767651, 5767680, 5767681, + 5767682, 5767683, 5767684, 5767685, 5767686, 5767687, 5767688, + 5767689, 5767690, 5767713, 5767714, 5767744, 5767745, 5767746, + 5767747, 5767748, 5767749, 5767750, 5767751, 5767752, 5767753, + 5767810, 5767811, 5767812, 5767813, 5767814, 5767815, 5767816, + 5769281, 5769282, 5769283, 5769284, 5769285, 5769286, 5769287, + 5769288, 5769314, 5769315, 5769316, 5769317, 5769318, 5769319, + 5769320, 5769321, 5769344, 5769345, 5769346, 5769347, 5769348, + 5769349, 5769350, 5769351, 5769352, 5769377, 5769378, 5769379, + 5769380, 5769381, 5769382, 5769383, 5769384, 5769385, 5769386, + 5769408, 5769409, 5769410, 5769411, 5769412, 5769413, 5769414, + 5769415, 5769441, 5769442, 5769443, 5769444, 5769445, 5769446, + 5769447, 5769448, 5769449, 5769450, 5769472, 5769473, 5769474, + 5769475, 5769476, 5769477, 5769478, 5769505, 5769506, 5769507, + 5769508, 5769509, 5769510, 5769511, 5769512, 5769513, 5769514, + 5769536, 5769537, 5769538, 5769539, 5769540, 5769541, 5769569, + 5769570, 5769571, 5769572, 5769573, 5769574, 5769575, 5769576, + 5769577, 5769578, 5769600, 5769601, 5769602, 5769603, 5769604, + 5769633, 5769634, 5769635, 5769636, 5769637, 5769638, 5769639, + 5769640, 5769641, 5769642, 5769664, 5769665, 5769666, 5769667, + 5769697, 5769698, 5769699, 5769700, 5769701, 5769702, 5769703, + 5769704, 5769705, 5769706, 5769728, 5769729, 5769730, 5769761, + 5769762, 5769763, 5769764, 5769765, 5769766, 5769767, 5769768, + 5769769, 5769770, 5769792, 5769825, 5769826, 5769827, 5769828, + 5769829, 5769830, 5769831, 5769832, 5769833, 5769890, 5769891, + 5769892, 5769893, 5769894, 5769895, 5769896, 6029314, 6029315, + 6029316, 6029317, 6029318, 6029319, 6029320, 6029321, 6029346, + 6029347, 6029348, 6029349, 6029350, 6029351, 6029352, 6029353, + 6029378, 6029379, 6029380, 6029381, 6029382, 6029383, 6029384, + 6029385, 6029386, 6029409, 6029410, 6029411, 6029412, 6029413, + 6029414, 6029415, 6029416, 6029417, 6029440, 6029441, 6029442, + 6029443, 6029444, 6029445, 6029446, 6029447, 6029448, 6029449, + 6029450, 6029473, 6029474, 6029475, 6029476, 6029477, 6029478, + 6029479, 6029480, 6029504, 6029505, 6029506, 6029507, 6029508, + 6029509, 6029510, 6029511, 6029512, 6029513, 6029514, 6029537, + 6029538, 6029539, 6029540, 6029541, 6029542, 6029543, 6029568, + 6029569, 6029570, 6029571, 6029572, 6029573, 6029574, 6029575, + 6029576, 6029577, 6029578, 6029579, 6029601, 6029602, 6029603, + 6029604, 6029605, 6029606, 6029607, 6029632, 6029633, 6029634, + 6029635, 6029636, 6029637, 6029638, 6029639, 6029640, 6029641, + 6029642, 6029665, 6029666, 6029667, 6029668, 6029669, 6029696, + 6029697, 6029698, 6029699, 6029700, 6029701, 6029702, 6029703, + 6029704, 6029705, 6029706, 6029729, 6029730, 6029731, 6029732, + 6029760, 6029761, 6029762, 6029763, 6029764, 6029765, 6029766, + 6029767, 6029768, 6029769, 6029770, 6029771, 6029793, 6029794, + 6029795, 6029796, 6029824, 6029825, 6029826, 6029827, 6029828, + 6029829, 6029830, 6029831, 6029832, 6029833, 6029834, 6029857, + 6029858, 6029888, 6029889, 6029890, 6029891, 6029892, 6029893, + 6029894, 6029895, 6029896, 6029897, 6029898, 6029921, 6029953, + 6029954, 6029955, 6029956, 6029957, 6029958, 6029959, 6029960, + 6029961, 6030020, 6030023, 6031425, 6031426, 6031427, 6031428, + 6031429, 6031430, 6031431, 6031432, 6031433, 6031458, 6031459, + 6031460, 6031461, 6031462, 6031463, 6031464, 6031465, 6031466, + 6031488, 6031489, 6031490, 6031491, 6031492, 6031493, 6031494, + 6031495, 6031496, 6031521, 6031522, 6031523, 6031524, 6031525, + 6031526, 6031527, 6031528, 6031529, 6031530, 6031552, 6031553, + 6031554, 6031555, 6031556, 6031557, 6031558, 6031559, 6031585, + 6031586, 6031587, 6031588, 6031589, 6031590, 6031591, 6031592, + 6031593, 6031594, 6031616, 6031617, 6031618, 6031619, 6031620, + 6031621, 6031622, 6031623, 6031649, 6031650, 6031651, 6031652, + 6031653, 6031654, 6031655, 6031656, 6031657, 6031658, 6031659, + 6031680, 6031681, 6031682, 6031683, 6031684, 6031685, 6031713, + 6031714, 6031715, 6031716, 6031717, 6031718, 6031719, 6031720, + 6031721, 6031722, 6031744, 6031745, 6031746, 6031747, 6031748, + 6031777, 6031778, 6031779, 6031780, 6031781, 6031782, 6031783, + 6031784, 6031785, 6031786, 6031808, 6031809, 6031810, 6031811, + 6031812, 6031841, 6031842, 6031843, 6031844, 6031845, 6031846, + 6031847, 6031848, 6031849, 6031850, 6031851, 6031872, 6031873, + 6031874, 6031905, 6031906, 6031907, 6031908, 6031909, 6031910, + 6031911, 6031912, 6031913, 6031914, 6031936, 6031937, 6031969, + 6031970, 6031971, 6031972, 6031973, 6031974, 6031975, 6031976, + 6031977, 6031978, 6032033, 6032034, 6032035, 6032036, 6032037, + 6032038, 6032039, 6032040, 6032041, 6032100, 6032103, 6291458, + 6291459, 6291460, 6291461, 6291462, 6291463, 6291464, 6291465, + 6291490, 6291491, 6291492, 6291493, 6291494, 6291495, 6291496, + 6291497, 6291522, 6291523, 6291524, 6291525, 6291526, 6291527, + 6291528, 6291529, 6291530, 6291553, 6291554, 6291555, 6291556, + 6291557, 6291558, 6291559, 6291560, 6291584, 6291585, 6291586, + 6291587, 6291588, 6291589, 6291590, 6291591, 6291592, 6291593, + 6291594, 6291617, 6291618, 6291619, 6291620, 6291621, 6291622, + 6291623, 6291624, 6291648, 6291649, 6291650, 6291651, 6291652, + 6291653, 6291654, 6291655, 6291656, 6291657, 6291658, 6291681, + 6291682, 6291683, 6291684, 6291685, 6291686, 6291687, 6291712, + 6291713, 6291714, 6291715, 6291716, 6291717, 6291718, 6291719, + 6291720, 6291721, 6291722, 6291723, 6291745, 6291746, 6291747, + 6291748, 6291749, 6291750, 6291751, 6291776, 6291777, 6291778, + 6291779, 6291780, 6291781, 6291782, 6291783, 6291784, 6291785, + 6291786, 6291809, 6291810, 6291811, 6291812, 6291813, 6291840, + 6291841, 6291842, 6291843, 6291844, 6291845, 6291846, 6291847, + 6291848, 6291849, 6291850, 6291873, 6291874, 6291875, 6291876, + 6291904, 6291905, 6291906, 6291907, 6291908, 6291909, 6291910, + 6291911, 6291912, 6291913, 6291914, 6291915, 6291937, 6291938, + 6291939, 6291940, 6291968, 6291969, 6291970, 6291971, 6291972, + 6291973, 6291974, 6291975, 6291976, 6291977, 6291978, 6292001, + 6292002, 6292032, 6292033, 6292034, 6292035, 6292036, 6292037, + 6292038, 6292039, 6292040, 6292041, 6292065, 6292098, 6292099, + 6292100, 6292101, 6292102, 6292103, 6292104, 6292105, 6292164, + 6292167, 6293569, 6293570, 6293571, 6293572, 6293573, 6293574, + 6293575, 6293576, 6293602, 6293603, 6293604, 6293605, 6293606, + 6293607, 6293608, 6293609, 6293610, 6293632, 6293633, 6293634, + 6293635, 6293636, 6293637, 6293638, 6293639, 6293640, 6293665, + 6293666, 6293667, 6293668, 6293669, 6293670, 6293671, 6293672, + 6293673, 6293674, 6293696, 6293697, 6293698, 6293699, 6293700, + 6293701, 6293702, 6293703, 6293729, 6293730, 6293731, 6293732, + 6293733, 6293734, 6293735, 6293736, 6293737, 6293738, 6293760, + 6293761, 6293762, 6293763, 6293764, 6293765, 6293766, 6293767, + 6293793, 6293794, 6293795, 6293796, 6293797, 6293798, 6293799, + 6293800, 6293801, 6293802, 6293803, 6293824, 6293825, 6293826, + 6293827, 6293828, 6293829, 6293857, 6293858, 6293859, 6293860, + 6293861, 6293862, 6293863, 6293864, 6293865, 6293866, 6293888, + 6293889, 6293890, 6293891, 6293892, 6293921, 6293922, 6293923, + 6293924, 6293925, 6293926, 6293927, 6293928, 6293929, 6293930, + 6293952, 6293953, 6293954, 6293955, 6293956, 6293985, 6293986, + 6293987, 6293988, 6293989, 6293990, 6293991, 6293992, 6293993, + 6293994, 6293995, 6294016, 6294017, 6294018, 6294049, 6294050, + 6294051, 6294052, 6294053, 6294054, 6294055, 6294056, 6294057, + 6294058, 6294080, 6294081, 6294113, 6294114, 6294115, 6294116, + 6294117, 6294118, 6294119, 6294120, 6294121, 6294178, 6294179, + 6294180, 6294181, 6294182, 6294183, 6294184, 6294185, 6294244, + 6294247, 6553602, 6553603, 6553604, 6553605, 6553606, 6553607, + 6553608, 6553609, 6553634, 6553635, 6553636, 6553637, 6553638, + 6553639, 6553640, 6553641, 6553666, 6553667, 6553668, 6553669, + 6553670, 6553671, 6553672, 6553673, 6553674, 6553697, 6553698, + 6553699, 6553700, 6553701, 6553702, 6553703, 6553704, 6553705, + 6553728, 6553729, 6553730, 6553731, 6553732, 6553733, 6553734, + 6553735, 6553736, 6553737, 6553738, 6553761, 6553762, 6553763, + 6553764, 6553765, 6553766, 6553767, 6553768, 6553792, 6553793, + 6553794, 6553795, 6553796, 6553797, 6553798, 6553799, 6553800, + 6553801, 6553802, 6553803, 6553825, 6553826, 6553827, 6553828, + 6553829, 6553830, 6553831, 6553832, 6553856, 6553857, 6553858, + 6553859, 6553860, 6553861, 6553862, 6553863, 6553864, 6553865, + 6553866, 6553867, 6553889, 6553890, 6553891, 6553892, 6553893, + 6553894, 6553895, 6553920, 6553921, 6553922, 6553923, 6553924, + 6553925, 6553926, 6553927, 6553928, 6553929, 6553930, 6553931, + 6553953, 6553954, 6553955, 6553956, 6553957, 6553958, 6553984, + 6553985, 6553986, 6553987, 6553988, 6553989, 6553990, 6553991, + 6553992, 6553993, 6553994, 6553995, 6554017, 6554018, 6554019, + 6554020, 6554021, 6554048, 6554049, 6554050, 6554051, 6554052, + 6554053, 6554054, 6554055, 6554056, 6554057, 6554058, 6554059, + 6554081, 6554082, 6554083, 6554084, 6554112, 6554113, 6554114, + 6554115, 6554116, 6554117, 6554118, 6554119, 6554120, 6554121, + 6554122, 6554123, 6554145, 6554146, 6554147, 6554176, 6554177, + 6554178, 6554179, 6554180, 6554181, 6554182, 6554183, 6554184, + 6554185, 6554186, 6554209, 6554241, 6554242, 6554243, 6554244, + 6554245, 6554246, 6554247, 6554248, 6554249, 6554307, 6554308, + 6554309, 6554310, 6554311, 6554312, 6555713, 6555714, 6555715, + 6555716, 6555717, 6555718, 6555719, 6555720, 6555721, 6555746, + 6555747, 6555748, 6555749, 6555750, 6555751, 6555752, 6555753, + 6555754, 6555776, 6555777, 6555778, 6555779, 6555780, 6555781, + 6555782, 6555783, 6555784, 6555809, 6555810, 6555811, 6555812, + 6555813, 6555814, 6555815, 6555816, 6555817, 6555818, 6555840, + 6555841, 6555842, 6555843, 6555844, 6555845, 6555846, 6555847, + 6555848, 6555873, 6555874, 6555875, 6555876, 6555877, 6555878, + 6555879, 6555880, 6555881, 6555882, 6555883, 6555904, 6555905, + 6555906, 6555907, 6555908, 6555909, 6555910, 6555911, 6555937, + 6555938, 6555939, 6555940, 6555941, 6555942, 6555943, 6555944, + 6555945, 6555946, 6555947, 6555968, 6555969, 6555970, 6555971, + 6555972, 6555973, 6555974, 6556001, 6556002, 6556003, 6556004, + 6556005, 6556006, 6556007, 6556008, 6556009, 6556010, 6556011, + 6556032, 6556033, 6556034, 6556035, 6556036, 6556037, 6556065, + 6556066, 6556067, 6556068, 6556069, 6556070, 6556071, 6556072, + 6556073, 6556074, 6556075, 6556096, 6556097, 6556098, 6556099, + 6556100, 6556129, 6556130, 6556131, 6556132, 6556133, 6556134, + 6556135, 6556136, 6556137, 6556138, 6556139, 6556160, 6556161, + 6556162, 6556163, 6556193, 6556194, 6556195, 6556196, 6556197, + 6556198, 6556199, 6556200, 6556201, 6556202, 6556203, 6556224, + 6556225, 6556257, 6556258, 6556259, 6556260, 6556261, 6556262, + 6556263, 6556264, 6556265, 6556266, 6556321, 6556322, 6556323, + 6556324, 6556325, 6556326, 6556327, 6556328, 6556329, 6556387, + 6556388, 6556389, 6556390, 6556391, 6556392, 6815746, 6815747, + 6815748, 6815749, 6815750, 6815751, 6815752, 6815753, 6815778, + 6815779, 6815780, 6815781, 6815782, 6815783, 6815784, 6815785, + 6815810, 6815811, 6815812, 6815813, 6815814, 6815815, 6815816, + 6815817, 6815818, 6815841, 6815842, 6815843, 6815844, 6815845, + 6815846, 6815847, 6815848, 6815849, 6815872, 6815873, 6815874, + 6815875, 6815876, 6815877, 6815878, 6815879, 6815880, 6815881, + 6815882, 6815905, 6815906, 6815907, 6815908, 6815909, 6815910, + 6815911, 6815912, 6815936, 6815937, 6815938, 6815939, 6815940, + 6815941, 6815942, 6815943, 6815944, 6815945, 6815946, 6815969, + 6815970, 6815971, 6815972, 6815973, 6815974, 6815975, 6816000, + 6816001, 6816002, 6816003, 6816004, 6816005, 6816006, 6816007, + 6816008, 6816009, 6816010, 6816011, 6816033, 6816034, 6816035, + 6816036, 6816037, 6816038, 6816039, 6816064, 6816065, 6816066, + 6816067, 6816068, 6816069, 6816070, 6816071, 6816072, 6816073, + 6816074, 6816075, 6816097, 6816098, 6816099, 6816100, 6816101, + 6816102, 6816128, 6816129, 6816130, 6816131, 6816132, 6816133, + 6816134, 6816135, 6816136, 6816137, 6816138, 6816139, 6816161, + 6816162, 6816163, 6816164, 6816165, 6816192, 6816193, 6816194, + 6816195, 6816196, 6816197, 6816198, 6816199, 6816200, 6816201, + 6816202, 6816203, 6816225, 6816226, 6816227, 6816228, 6816256, + 6816257, 6816258, 6816259, 6816260, 6816261, 6816262, 6816263, + 6816264, 6816265, 6816266, 6816289, 6816290, 6816320, 6816321, + 6816322, 6816323, 6816324, 6816325, 6816326, 6816327, 6816328, + 6816329, 6816330, 6816353, 6816385, 6816386, 6816387, 6816388, + 6816389, 6816390, 6816391, 6816392, 6816393, 6816452, 6816453, + 6816454, 6816455, 6817857, 6817858, 6817859, 6817860, 6817861, + 6817862, 6817863, 6817864, 6817865, 6817890, 6817891, 6817892, + 6817893, 6817894, 6817895, 6817896, 6817897, 6817898, 6817920, + 6817921, 6817922, 6817923, 6817924, 6817925, 6817926, 6817927, + 6817928, 6817953, 6817954, 6817955, 6817956, 6817957, 6817958, + 6817959, 6817960, 6817961, 6817962, 6817984, 6817985, 6817986, + 6817987, 6817988, 6817989, 6817990, 6817991, 6818017, 6818018, + 6818019, 6818020, 6818021, 6818022, 6818023, 6818024, 6818025, + 6818026, 6818048, 6818049, 6818050, 6818051, 6818052, 6818053, + 6818054, 6818055, 6818081, 6818082, 6818083, 6818084, 6818085, + 6818086, 6818087, 6818088, 6818089, 6818090, 6818091, 6818112, + 6818113, 6818114, 6818115, 6818116, 6818117, 6818118, 6818145, + 6818146, 6818147, 6818148, 6818149, 6818150, 6818151, 6818152, + 6818153, 6818154, 6818155, 6818176, 6818177, 6818178, 6818179, + 6818180, 6818181, 6818209, 6818210, 6818211, 6818212, 6818213, + 6818214, 6818215, 6818216, 6818217, 6818218, 6818219, 6818240, + 6818241, 6818242, 6818243, 6818244, 6818273, 6818274, 6818275, + 6818276, 6818277, 6818278, 6818279, 6818280, 6818281, 6818282, + 6818283, 6818304, 6818305, 6818306, 6818337, 6818338, 6818339, + 6818340, 6818341, 6818342, 6818343, 6818344, 6818345, 6818346, + 6818368, 6818369, 6818401, 6818402, 6818403, 6818404, 6818405, + 6818406, 6818407, 6818408, 6818409, 6818410, 6818465, 6818466, + 6818467, 6818468, 6818469, 6818470, 6818471, 6818472, 6818473, + 6818532, 6818533, 6818534, 6818535, 7077890, 7077891, 7077892, + 7077893, 7077894, 7077895, 7077896, 7077897, 7077922, 7077923, + 7077924, 7077925, 7077926, 7077927, 7077928, 7077929, 7077954, + 7077955, 7077956, 7077957, 7077958, 7077959, 7077960, 7077961, + 7077962, 7077985, 7077986, 7077987, 7077988, 7077989, 7077990, + 7077991, 7077992, 7077993, 7078016, 7078017, 7078018, 7078019, + 7078020, 7078021, 7078022, 7078023, 7078024, 7078025, 7078026, + 7078049, 7078050, 7078051, 7078052, 7078053, 7078054, 7078055, + 7078056, 7078080, 7078081, 7078082, 7078083, 7078084, 7078085, + 7078086, 7078087, 7078088, 7078089, 7078090, 7078091, 7078113, + 7078114, 7078115, 7078116, 7078117, 7078118, 7078119, 7078120, + 7078144, 7078145, 7078146, 7078147, 7078148, 7078149, 7078150, + 7078151, 7078152, 7078153, 7078154, 7078155, 7078177, 7078178, + 7078179, 7078180, 7078181, 7078182, 7078183, 7078208, 7078209, + 7078210, 7078211, 7078212, 7078213, 7078214, 7078215, 7078216, + 7078217, 7078218, 7078219, 7078241, 7078242, 7078243, 7078244, + 7078245, 7078246, 7078272, 7078273, 7078274, 7078275, 7078276, + 7078277, 7078278, 7078279, 7078280, 7078281, 7078282, 7078283, + 7078305, 7078306, 7078307, 7078308, 7078309, 7078336, 7078337, + 7078338, 7078339, 7078340, 7078341, 7078342, 7078343, 7078344, + 7078345, 7078346, 7078347, 7078369, 7078370, 7078371, 7078372, + 7078400, 7078401, 7078402, 7078403, 7078404, 7078405, 7078406, + 7078407, 7078408, 7078409, 7078410, 7078411, 7078433, 7078434, + 7078435, 7078464, 7078465, 7078466, 7078467, 7078468, 7078469, + 7078470, 7078471, 7078472, 7078473, 7078474, 7078497, 7078529, + 7078530, 7078531, 7078532, 7078533, 7078534, 7078535, 7078536, + 7078537, 7078595, 7078596, 7078597, 7078598, 7078599, 7078600, + 7080001, 7080002, 7080003, 7080004, 7080005, 7080006, 7080007, + 7080008, 7080009, 7080034, 7080035, 7080036, 7080037, 7080038, + 7080039, 7080040, 7080041, 7080042, 7080064, 7080065, 7080066, + 7080067, 7080068, 7080069, 7080070, 7080071, 7080072, 7080097, + 7080098, 7080099, 7080100, 7080101, 7080102, 7080103, 7080104, + 7080105, 7080106, 7080128, 7080129, 7080130, 7080131, 7080132, + 7080133, 7080134, 7080135, 7080136, 7080161, 7080162, 7080163, + 7080164, 7080165, 7080166, 7080167, 7080168, 7080169, 7080170, + 7080171, 7080192, 7080193, 7080194, 7080195, 7080196, 7080197, + 7080198, 7080199, 7080225, 7080226, 7080227, 7080228, 7080229, + 7080230, 7080231, 7080232, 7080233, 7080234, 7080235, 7080256, + 7080257, 7080258, 7080259, 7080260, 7080261, 7080262, 7080289, + 7080290, 7080291, 7080292, 7080293, 7080294, 7080295, 7080296, + 7080297, 7080298, 7080299, 7080320, 7080321, 7080322, 7080323, + 7080324, 7080325, 7080353, 7080354, 7080355, 7080356, 7080357, + 7080358, 7080359, 7080360, 7080361, 7080362, 7080363, 7080384, + 7080385, 7080386, 7080387, 7080388, 7080417, 7080418, 7080419, + 7080420, 7080421, 7080422, 7080423, 7080424, 7080425, 7080426, + 7080427, 7080448, 7080449, 7080450, 7080451, 7080481, 7080482, + 7080483, 7080484, 7080485, 7080486, 7080487, 7080488, 7080489, + 7080490, 7080491, 7080512, 7080513, 7080545, 7080546, 7080547, + 7080548, 7080549, 7080550, 7080551, 7080552, 7080553, 7080554, + 7080609, 7080610, 7080611, 7080612, 7080613, 7080614, 7080615, + 7080616, 7080617, 7080675, 7080676, 7080677, 7080678, 7080679, + 7080680, 7340034, 7340035, 7340036, 7340037, 7340038, 7340039, + 7340040, 7340041, 7340066, 7340067, 7340068, 7340069, 7340070, + 7340071, 7340072, 7340073, 7340098, 7340099, 7340100, 7340101, + 7340102, 7340103, 7340104, 7340105, 7340106, 7340129, 7340130, + 7340131, 7340132, 7340133, 7340134, 7340135, 7340136, 7340137, + 7340160, 7340161, 7340162, 7340163, 7340164, 7340165, 7340166, + 7340167, 7340168, 7340169, 7340170, 7340193, 7340194, 7340195, + 7340196, 7340197, 7340198, 7340199, 7340200, 7340224, 7340225, + 7340226, 7340227, 7340228, 7340229, 7340230, 7340231, 7340232, + 7340233, 7340234, 7340257, 7340258, 7340259, 7340260, 7340261, + 7340262, 7340263, 7340288, 7340289, 7340290, 7340291, 7340292, + 7340293, 7340294, 7340295, 7340296, 7340297, 7340298, 7340299, + 7340321, 7340322, 7340323, 7340324, 7340325, 7340326, 7340327, + 7340352, 7340353, 7340354, 7340355, 7340356, 7340357, 7340358, + 7340359, 7340360, 7340361, 7340362, 7340363, 7340385, 7340386, + 7340387, 7340388, 7340389, 7340390, 7340416, 7340417, 7340418, + 7340419, 7340420, 7340421, 7340422, 7340423, 7340424, 7340425, + 7340426, 7340427, 7340449, 7340450, 7340451, 7340452, 7340453, + 7340480, 7340481, 7340482, 7340483, 7340484, 7340485, 7340486, + 7340487, 7340488, 7340489, 7340490, 7340491, 7340513, 7340514, + 7340515, 7340516, 7340544, 7340545, 7340546, 7340547, 7340548, + 7340549, 7340550, 7340551, 7340552, 7340553, 7340554, 7340577, + 7340578, 7340608, 7340609, 7340610, 7340611, 7340612, 7340613, + 7340614, 7340615, 7340616, 7340617, 7340618, 7340641, 7340673, + 7340674, 7340675, 7340676, 7340677, 7340678, 7340679, 7340680, + 7340681, 7340740, 7340741, 7340742, 7340743, 7342145, 7342146, + 7342147, 7342148, 7342149, 7342150, 7342151, 7342152, 7342153, + 7342178, 7342179, 7342180, 7342181, 7342182, 7342183, 7342184, + 7342185, 7342186, 7342208, 7342209, 7342210, 7342211, 7342212, + 7342213, 7342214, 7342215, 7342216, 7342241, 7342242, 7342243, + 7342244, 7342245, 7342246, 7342247, 7342248, 7342249, 7342250, + 7342272, 7342273, 7342274, 7342275, 7342276, 7342277, 7342278, + 7342279, 7342305, 7342306, 7342307, 7342308, 7342309, 7342310, + 7342311, 7342312, 7342313, 7342314, 7342336, 7342337, 7342338, + 7342339, 7342340, 7342341, 7342342, 7342343, 7342369, 7342370, + 7342371, 7342372, 7342373, 7342374, 7342375, 7342376, 7342377, + 7342378, 7342379, 7342400, 7342401, 7342402, 7342403, 7342404, + 7342405, 7342406, 7342433, 7342434, 7342435, 7342436, 7342437, + 7342438, 7342439, 7342440, 7342441, 7342442, 7342443, 7342464, + 7342465, 7342466, 7342467, 7342468, 7342469, 7342497, 7342498, + 7342499, 7342500, 7342501, 7342502, 7342503, 7342504, 7342505, + 7342506, 7342507, 7342528, 7342529, 7342530, 7342531, 7342532, + 7342561, 7342562, 7342563, 7342564, 7342565, 7342566, 7342567, + 7342568, 7342569, 7342570, 7342571, 7342592, 7342593, 7342594, + 7342625, 7342626, 7342627, 7342628, 7342629, 7342630, 7342631, + 7342632, 7342633, 7342634, 7342656, 7342657, 7342689, 7342690, + 7342691, 7342692, 7342693, 7342694, 7342695, 7342696, 7342697, + 7342698, 7342753, 7342754, 7342755, 7342756, 7342757, 7342758, + 7342759, 7342760, 7342761, 7342820, 7342821, 7342822, 7342823 + + + 330, 0, 0, 1, 1, 1, 2, 572, 30, 200, 200, 201, + 201, 201, 202, 272, 360, 0, 0, 1, 1, 1, 2, 2, + 560, 200, 200, 201, 201, 201, 202, 412, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 72, 200, 200, 200, 201, 201, + 201, 202, 272, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 42, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 201, + 202, 312, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 112, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 142, 202, 202, 242, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 212, 72, 202, 272, + 172, 312, 2, 2, 2, 2, 2, 2, 2, 72, 172, 242, + 212, 152, 212, 142, 172, 260, 400, 400, 401, 401, 401, 402, + 112, 60, 200, 200, 201, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 572, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 372, 400, 400, 400, 401, 401, 401, 402, 42, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 342, 400, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 412, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 12, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 412, 401, 402, + 402, 542, 401, 401, 401, 401, 401, 401, 401, 202, 202, 442, + 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, 512, + 372, 472, 12, 402, 402, 402, 402, 402, 402, 402, 372, 472, + 542, 512, 452, 512, 442, 472, 330, 0, 0, 1, 1, 1, + 2, 30, 200, 200, 201, 201, 201, 202, 360, 0, 0, 1, + 1, 1, 2, 42, 560, 200, 200, 201, 201, 201, 202, 342, + 530, 460, 430, 0, 0, 0, 1, 1, 1, 112, 200, 200, + 200, 201, 201, 201, 312, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 200, 200, 201, 201, 201, 202, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 72, 201, 201, 201, 201, + 202, 272, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 72, 201, 201, 201, 202, 272, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 72, 201, 201, 202, 272, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 112, 202, 312, 202, 2, 1, + 1, 1, 1, 1, 2, 2, 142, 242, 242, 212, 2, 2, + 2, 2, 212, 142, 172, 172, 172, 260, 400, 400, 401, 401, + 401, 402, 42, 60, 200, 200, 201, 201, 201, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 12, 160, 130, 200, 200, 200, + 201, 201, 201, 412, 400, 400, 400, 401, 401, 401, 402, 400, + 400, 400, 200, 200, 201, 201, 201, 202, 400, 401, 401, 401, + 401, 402, 572, 400, 400, 400, 400, 201, 201, 201, 201, 202, + 372, 401, 401, 401, 401, 402, 572, 401, 400, 400, 401, 401, + 201, 201, 201, 202, 372, 401, 401, 401, 402, 572, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 372, 401, 402, 12, 401, + 401, 401, 401, 401, 401, 401, 202, 412, 402, 542, 402, 401, + 401, 401, 401, 401, 402, 402, 442, 542, 512, 402, 402, 402, + 402, 512, 442, 472, 472, 472, 330, 0, 0, 1, 1, 1, + 2, 572, 30, 200, 200, 201, 201, 201, 202, 272, 360, 0, + 0, 1, 1, 1, 2, 2, 560, 200, 200, 201, 201, 201, + 202, 412, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 72, 200, 200, 200, 201, 201, 201, 202, 272, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 1, 1, 1, 1, + 2, 112, 201, 201, 201, 201, 202, 312, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 142, 202, 202, 242, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 212, 72, 202, 272, 172, 312, 2, 2, 2, 2, + 2, 2, 2, 72, 172, 242, 212, 152, 212, 142, 172, 260, + 400, 400, 401, 401, 401, 402, 112, 60, 200, 200, 201, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 572, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 372, 400, 400, + 400, 401, 401, 401, 402, 42, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 342, 400, 401, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 201, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 552, 401, 400, 400, 401, 401, 201, 201, 201, 202, + 352, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 542, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 442, 402, 402, 572, 402, 401, 401, + 401, 401, 401, 402, 402, 512, 372, 472, 12, 402, 402, 402, + 402, 402, 402, 402, 372, 472, 542, 512, 452, 512, 442, 472, + 330, 0, 0, 1, 1, 1, 2, 30, 200, 200, 201, 201, + 201, 202, 360, 0, 0, 1, 1, 1, 2, 42, 560, 200, + 200, 201, 201, 201, 202, 342, 530, 460, 430, 0, 0, 0, + 1, 1, 1, 2, 200, 200, 200, 201, 201, 201, 202, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 72, 200, 200, + 201, 201, 201, 202, 272, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 52, 201, 201, 201, 201, 202, 252, 201, 1, + 0, 0, 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, + 202, 252, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 72, 202, 202, 272, 202, 2, 1, 1, 1, + 1, 1, 2, 2, 142, 242, 242, 2, 2, 2, 2, 2, + 2, 142, 172, 152, 152, 152, 172, 260, 400, 400, 401, 401, + 401, 402, 42, 60, 200, 200, 201, 201, 201, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, + 201, 201, 201, 202, 400, 400, 400, 401, 401, 401, 402, 572, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 372, 400, 401, + 401, 401, 401, 402, 552, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 352, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 552, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 352, 401, 402, + 402, 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, 372, + 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 442, 542, + 402, 402, 402, 402, 402, 402, 442, 472, 452, 452, 452, 472, + 330, 0, 0, 1, 1, 1, 2, 572, 30, 200, 200, 201, + 201, 201, 202, 272, 360, 0, 0, 1, 1, 1, 2, 2, + 560, 200, 200, 201, 201, 201, 202, 412, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 72, 200, 200, 200, 201, 201, + 201, 202, 272, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 42, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 201, + 202, 312, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 112, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 142, 202, 202, 242, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 212, 72, 202, 272, + 172, 312, 2, 2, 2, 2, 2, 2, 2, 72, 172, 242, + 212, 152, 212, 142, 172, 260, 400, 400, 401, 401, 401, 402, + 112, 60, 200, 200, 201, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 572, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 372, 400, 400, 400, 401, 401, 401, 402, 42, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 342, 400, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 412, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 12, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 412, 401, 402, + 402, 542, 401, 401, 401, 401, 401, 401, 401, 202, 202, 442, + 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, 512, + 372, 472, 12, 402, 402, 402, 402, 402, 402, 402, 372, 472, + 542, 512, 452, 512, 442, 472, 330, 0, 0, 1, 1, 1, + 2, 30, 200, 200, 201, 201, 201, 202, 360, 0, 0, 1, + 1, 1, 2, 42, 560, 200, 200, 201, 201, 201, 202, 342, + 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, 200, 200, + 200, 201, 201, 201, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 72, 200, 200, 201, 201, 201, 202, 272, 200, + 0, 0, 0, 0, 1, 1, 1, 1, 2, 52, 201, 201, + 201, 201, 202, 252, 201, 1, 0, 0, 1, 1, 1, 1, + 1, 2, 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 52, 201, 201, 202, 252, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 72, 202, 202, + 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, 142, 242, + 242, 2, 2, 2, 2, 2, 2, 142, 172, 152, 152, 152, + 172, 260, 400, 400, 401, 401, 401, 402, 42, 60, 200, 200, + 201, 201, 201, 202, 342, 230, 400, 400, 400, 401, 401, 401, + 402, 160, 130, 200, 200, 200, 201, 201, 201, 202, 400, 400, + 400, 401, 401, 401, 402, 572, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 372, 400, 401, 401, 401, 401, 402, 552, 400, + 400, 400, 400, 201, 201, 201, 201, 202, 352, 401, 401, 401, + 401, 402, 552, 401, 400, 400, 401, 401, 201, 201, 201, 202, + 352, 401, 401, 401, 402, 552, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 352, 401, 402, 402, 572, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 372, 402, 542, 402, 401, 401, 401, + 401, 401, 402, 402, 442, 542, 402, 402, 402, 402, 402, 402, + 442, 472, 452, 452, 452, 472, 330, 0, 0, 1, 1, 1, + 2, 572, 30, 200, 200, 201, 201, 201, 202, 272, 360, 0, + 0, 1, 1, 1, 2, 2, 560, 200, 200, 201, 201, 201, + 202, 412, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 72, 200, 200, 200, 201, 201, 201, 202, 272, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 1, 1, 1, 1, + 2, 112, 201, 201, 201, 201, 202, 312, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 142, 202, 202, 242, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 212, 72, 202, 272, 172, 312, 2, 2, 2, 2, + 2, 2, 2, 72, 172, 242, 212, 152, 212, 142, 172, 260, + 400, 400, 401, 401, 401, 402, 112, 60, 200, 200, 201, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 572, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 372, 400, 400, + 400, 401, 401, 401, 402, 42, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 342, 400, 401, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 201, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 552, 401, 400, 400, 401, 401, 201, 201, 201, 202, + 352, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 542, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 442, 402, 402, 572, 402, 401, 401, + 401, 401, 401, 402, 402, 512, 372, 472, 12, 402, 402, 402, + 402, 402, 402, 402, 372, 472, 542, 512, 452, 512, 442, 472, + 330, 0, 0, 1, 1, 1, 2, 30, 200, 200, 201, 201, + 201, 202, 360, 0, 0, 1, 1, 1, 2, 42, 560, 200, + 200, 201, 201, 201, 202, 342, 530, 460, 430, 0, 0, 0, + 1, 1, 1, 2, 200, 200, 200, 201, 201, 201, 202, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 52, 200, 200, + 201, 201, 201, 202, 252, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 52, 201, 201, 201, 201, 202, 252, 201, 1, + 0, 0, 1, 1, 1, 1, 1, 2, 52, 201, 201, 201, + 202, 252, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 52, 202, 202, 252, 202, 2, 1, 1, 1, + 1, 1, 2, 2, 142, 242, 242, 2, 2, 2, 2, 2, + 2, 142, 152, 152, 152, 152, 152, 260, 400, 400, 401, 401, + 401, 402, 42, 60, 200, 200, 201, 201, 201, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, + 201, 201, 201, 202, 400, 400, 400, 401, 401, 401, 402, 552, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 352, 400, 401, + 401, 401, 401, 402, 552, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 352, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 552, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 352, 401, 402, + 402, 552, 401, 401, 401, 401, 401, 401, 401, 202, 202, 352, + 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 442, 542, + 402, 402, 402, 402, 402, 402, 442, 452, 452, 452, 452, 452, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 1, 1, 1, 2, 2, + 560, 200, 200, 201, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 1, 1, 1, 1, 2, 2, 201, 201, 201, 201, + 202, 202, 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 152, 2, 212, 142, 260, 400, 400, 401, 401, 401, 402, + 402, 60, 200, 200, 201, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 401, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 201, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 552, 401, 400, 400, + 401, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 452, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 1, 1, 1, 2, 112, 560, 200, 200, 201, 201, 201, + 202, 312, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 200, 200, 200, 201, 201, 201, 202, 200, 0, 0, 0, 0, + 0, 1, 1, 1, 2, 52, 200, 200, 201, 201, 201, 202, + 252, 200, 0, 0, 0, 0, 1, 1, 1, 1, 2, 52, + 201, 201, 201, 201, 202, 252, 201, 1, 0, 0, 1, 1, + 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, 201, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 52, 201, 201, 202, + 252, 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 52, + 202, 202, 252, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 112, 312, 242, 212, 2, 2, 2, 2, 2, 2, 212, 142, + 152, 152, 152, 152, 152, 260, 400, 400, 401, 401, 401, 402, + 12, 60, 200, 200, 201, 201, 201, 202, 412, 230, 400, 400, + 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, 201, 201, + 201, 202, 400, 400, 400, 401, 401, 401, 402, 552, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 352, 400, 401, 401, 401, + 401, 402, 552, 400, 400, 400, 400, 201, 201, 201, 201, 202, + 352, 401, 401, 401, 401, 402, 552, 401, 400, 400, 401, 401, + 201, 201, 201, 202, 352, 401, 401, 401, 402, 552, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 352, 401, 402, 402, 552, + 401, 401, 401, 401, 401, 401, 401, 202, 202, 352, 402, 12, + 402, 401, 401, 401, 401, 401, 402, 402, 412, 542, 512, 402, + 402, 402, 402, 402, 402, 512, 442, 452, 452, 452, 452, 452, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 52, 201, 201, 201, 202, 252, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 152, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 552, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 352, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 452, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 112, 560, 200, 200, 200, 201, 201, + 202, 312, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 200, 200, 200, 201, 201, 201, 202, 200, 0, 0, 0, 0, + 0, 1, 1, 1, 2, 42, 200, 200, 201, 201, 201, 202, + 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, 2, 112, + 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, 0, 1, + 1, 1, 1, 2, 52, 201, 201, 201, 202, 252, 201, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, 201, 202, + 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 142, + 202, 202, 242, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 112, 312, 242, 212, 2, 2, 2, 2, 2, 2, 212, 142, + 242, 212, 152, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 12, 60, 200, 200, 200, 201, 201, 202, 412, 230, 400, 400, + 400, 401, 401, 401, 402, 160, 130, 200, 200, 200, 201, 201, + 201, 202, 400, 400, 400, 401, 401, 401, 402, 42, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 342, 400, 400, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 200, 201, 201, 201, 202, + 412, 401, 401, 401, 401, 402, 552, 400, 400, 400, 400, 401, + 201, 201, 201, 202, 352, 401, 401, 401, 402, 12, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 412, 401, 402, 402, 542, + 401, 401, 401, 401, 401, 401, 401, 202, 202, 442, 402, 12, + 402, 401, 401, 401, 401, 401, 402, 402, 412, 542, 512, 402, + 402, 402, 402, 402, 402, 512, 442, 542, 512, 452, 512, 442, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 212, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 512, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 2, 560, 200, 200, 200, 201, 201, + 202, 202, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 72, 200, 200, 200, 201, 201, 201, 202, 272, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 52, 200, 200, 201, 201, + 201, 202, 252, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, + 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 202, 312, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 52, 202, 202, 252, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 2, 72, 202, 272, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 172, 152, 212, 212, 212, 152, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 572, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 372, 400, 400, + 400, 401, 401, 401, 402, 552, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 352, 400, 400, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 200, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, 201, 202, + 412, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 552, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 352, 402, 402, 572, 402, 401, 401, + 401, 401, 401, 402, 402, 202, 372, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 442, 472, 452, 512, 512, 512, 452, 472, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, 201, + 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, 1, + 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, 2, 2, + 2, 142, 242, 2, 2, 212, 2, 2, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, 402, 572, + 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, 372, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, + 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, 401, 401, + 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, 572, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, 402, 402, + 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, 442, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, 402, 402, + 512, 402, 402, 442, 472, 472, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 2, 560, 200, 200, 200, 201, 201, + 202, 202, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 42, 200, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 112, 200, 200, 201, 201, + 201, 202, 312, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, + 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 202, 312, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 112, 202, 202, 312, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 212, 212, 212, 212, 212, 142, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 12, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 412, 400, 400, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 200, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, 201, 202, + 412, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 12, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 412, 402, 402, 542, 402, 401, 401, + 401, 401, 401, 402, 402, 202, 442, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 442, 542, 512, 512, 512, 512, 512, 442, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, 201, + 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, 1, + 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, 2, 2, + 2, 142, 242, 2, 2, 212, 2, 2, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, 402, 572, + 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, 372, 401, + 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, + 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, 401, 401, + 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, 572, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, 402, 402, + 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, 442, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, 402, 402, + 512, 402, 402, 442, 472, 472, 330, 0, 0, 1, 1, 1, + 2, 42, 30, 200, 200, 201, 201, 201, 202, 342, 360, 0, + 0, 0, 1, 1, 2, 2, 560, 200, 200, 200, 201, 201, + 202, 202, 530, 460, 430, 0, 0, 0, 1, 1, 1, 2, + 42, 200, 200, 200, 201, 201, 201, 202, 342, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 112, 200, 200, 201, 201, + 201, 202, 312, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 201, 201, 201, 202, 312, 201, 0, 0, 0, + 0, 1, 1, 1, 1, 2, 112, 201, 201, 201, 202, 312, + 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, 112, 201, + 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 112, 202, 202, 312, 202, 2, 1, 1, 1, 1, 1, + 2, 2, 2, 142, 202, 242, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 212, 212, 212, 212, 212, 142, 260, + 400, 400, 400, 401, 401, 402, 402, 60, 200, 200, 200, 201, + 201, 202, 202, 230, 400, 400, 400, 401, 401, 401, 402, 42, + 160, 130, 200, 200, 200, 201, 201, 201, 202, 342, 400, 400, + 400, 401, 401, 401, 402, 12, 400, 400, 400, 200, 200, 201, + 201, 201, 202, 412, 400, 400, 401, 401, 401, 402, 12, 400, + 400, 400, 400, 200, 201, 201, 201, 202, 412, 401, 401, 401, + 401, 402, 12, 400, 400, 400, 400, 401, 201, 201, 201, 202, + 412, 401, 401, 401, 402, 12, 401, 401, 401, 401, 401, 401, + 201, 201, 202, 412, 401, 402, 402, 12, 401, 401, 401, 401, + 401, 401, 401, 202, 202, 412, 402, 402, 542, 402, 401, 401, + 401, 401, 401, 402, 402, 202, 442, 542, 402, 402, 402, 402, + 402, 402, 402, 402, 442, 542, 512, 512, 512, 512, 512, 442, + 330, 0, 0, 1, 1, 1, 2, 12, 30, 200, 200, 201, + 201, 201, 202, 312, 360, 0, 0, 0, 1, 1, 2, 2, + 72, 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, + 201, 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, + 1, 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, + 0, 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, + 201, 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, + 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, + 202, 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, + 2, 2, 142, 202, 242, 212, 2, 2, 2, 2, 2, 2, + 2, 2, 112, 272, 242, 2, 2, 212, 2, 2, 142, 172, + 172, 172, 260, 400, 400, 400, 401, 401, 402, 402, 60, 200, + 200, 200, 201, 201, 202, 202, 372, 230, 400, 400, 400, 401, + 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, 201, 201, + 202, 342, 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, + 401, 402, 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 402, 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, + 202, 372, 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, + 402, 202, 442, 512, 572, 402, 402, 402, 402, 402, 402, 402, + 402, 412, 542, 402, 402, 512, 402, 402, 442, 472, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 212, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 512, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 12, 30, 200, 200, 201, 201, 201, 202, 312, 360, 0, + 0, 0, 1, 1, 2, 2, 42, 560, 200, 200, 200, 201, + 201, 202, 202, 372, 530, 460, 430, 0, 0, 0, 1, 1, + 1, 2, 112, 200, 200, 200, 201, 201, 201, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 201, 201, 201, 202, 202, 272, + 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, 112, 201, + 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 72, 202, 202, 202, 272, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 112, 202, 312, + 212, 2, 2, 2, 2, 2, 2, 2, 2, 112, 172, 242, + 272, 212, 2, 2, 212, 2, 2, 212, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 72, 60, 200, 200, 200, + 201, 201, 202, 202, 342, 230, 400, 400, 400, 401, 401, 401, + 402, 12, 160, 130, 200, 200, 200, 201, 201, 201, 202, 412, + 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, + 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, + 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, + 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, + 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, + 402, 402, 12, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 412, 512, 542, 402, 402, 402, 402, 402, 402, 402, 402, 412, + 472, 572, 512, 402, 402, 512, 402, 402, 512, 442, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 42, 30, 200, 200, 201, + 201, 201, 202, 342, 360, 0, 0, 0, 1, 1, 2, 2, + 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, 0, + 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, 201, + 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, 1, + 2, 112, 200, 200, 201, 201, 201, 202, 312, 200, 0, 0, + 0, 0, 0, 1, 1, 1, 2, 2, 200, 201, 201, 201, + 202, 202, 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 112, 201, 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 112, 202, 202, 312, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 142, 202, 242, + 242, 2, 2, 2, 2, 2, 2, 2, 2, 142, 242, 212, + 2, 212, 2, 212, 142, 260, 400, 400, 400, 401, 401, 402, + 402, 60, 200, 200, 200, 201, 201, 202, 202, 230, 400, 400, + 400, 401, 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, + 201, 201, 202, 342, 400, 400, 400, 401, 401, 401, 402, 12, + 400, 400, 400, 200, 200, 201, 201, 201, 202, 412, 400, 400, + 401, 401, 401, 402, 402, 400, 400, 400, 400, 200, 201, 201, + 201, 202, 202, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 12, 401, 401, 401, 401, 401, 401, 401, 202, 202, 412, + 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 512, 402, 512, 442, 330, 0, 0, 1, 1, 1, + 2, 12, 30, 200, 200, 201, 201, 201, 202, 312, 360, 0, + 0, 0, 1, 1, 2, 2, 42, 560, 200, 200, 200, 201, + 201, 202, 202, 372, 530, 460, 430, 0, 0, 0, 1, 1, + 1, 2, 112, 200, 200, 200, 201, 201, 201, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 201, 201, 201, 202, 202, 272, + 201, 0, 0, 0, 0, 1, 1, 1, 1, 2, 112, 201, + 201, 201, 202, 312, 201, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 201, 201, 202, 202, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 72, 202, 202, 202, 272, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 112, 202, 312, + 212, 2, 2, 2, 2, 2, 2, 2, 2, 112, 172, 242, + 272, 212, 2, 2, 212, 2, 2, 212, 142, 172, 172, 260, + 400, 400, 400, 401, 401, 402, 402, 72, 60, 200, 200, 200, + 201, 201, 202, 202, 342, 230, 400, 400, 400, 401, 401, 401, + 402, 12, 160, 130, 200, 200, 200, 201, 201, 201, 202, 412, + 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, 400, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, 401, 402, + 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, 202, 202, + 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, 400, 401, + 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, 401, 401, + 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, 402, 402, + 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, + 402, 402, 12, 402, 401, 401, 401, 401, 401, 402, 402, 202, + 412, 512, 542, 402, 402, 402, 402, 402, 402, 402, 402, 412, + 472, 572, 512, 402, 402, 512, 402, 402, 512, 442, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 12, 30, 200, 200, 201, + 201, 201, 202, 312, 360, 0, 0, 0, 1, 1, 2, 2, + 72, 560, 200, 200, 200, 201, 201, 202, 202, 530, 460, 430, + 0, 0, 0, 1, 1, 1, 2, 42, 200, 200, 200, 201, + 201, 201, 202, 342, 200, 0, 0, 0, 0, 0, 1, 1, + 1, 2, 2, 200, 200, 201, 201, 201, 202, 202, 200, 0, + 0, 0, 0, 0, 1, 1, 1, 2, 2, 72, 200, 201, + 201, 201, 202, 202, 272, 201, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 112, 201, 201, 201, 202, 312, 201, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 201, 201, 202, 202, + 201, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, + 202, 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, + 2, 2, 142, 202, 242, 212, 2, 2, 2, 2, 2, 2, + 2, 2, 112, 272, 242, 2, 2, 212, 2, 2, 142, 172, + 172, 172, 260, 400, 400, 400, 401, 401, 402, 402, 60, 200, + 200, 200, 201, 201, 202, 202, 372, 230, 400, 400, 400, 401, + 401, 401, 402, 42, 160, 130, 200, 200, 200, 201, 201, 201, + 202, 342, 400, 400, 400, 401, 401, 401, 402, 402, 400, 400, + 400, 200, 200, 201, 201, 201, 202, 202, 400, 400, 401, 401, + 401, 402, 402, 572, 400, 400, 400, 400, 200, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 401, 402, 12, 400, 400, 400, + 400, 401, 201, 201, 201, 202, 412, 401, 401, 401, 402, 402, + 401, 401, 401, 401, 401, 401, 201, 201, 202, 202, 401, 402, + 402, 402, 572, 401, 401, 401, 401, 401, 401, 401, 202, 202, + 202, 372, 402, 402, 542, 402, 401, 401, 401, 401, 401, 402, + 402, 202, 442, 512, 572, 402, 402, 402, 402, 402, 402, 402, + 402, 412, 542, 402, 402, 512, 402, 402, 442, 472, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 12, 30, 200, 200, 201, + 201, 201, 202, 312, 360, 0, 0, 1, 1, 1, 2, 2, + 42, 560, 200, 200, 201, 201, 201, 202, 202, 372, 530, 460, + 430, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 200, 201, 201, 201, 202, 202, + 272, 200, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, + 52, 201, 201, 201, 201, 202, 202, 252, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 2, 72, 201, 201, 201, 202, + 202, 272, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 72, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 52, 202, 202, 202, 252, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 72, 202, + 202, 272, 212, 2, 2, 2, 2, 2, 2, 2, 2, 112, + 172, 242, 272, 2, 2, 2, 2, 2, 2, 2, 142, 172, + 152, 172, 172, 152, 172, 260, 400, 400, 401, 401, 401, 402, + 402, 72, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 402, 160, 130, 200, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 400, 401, 401, 401, + 402, 402, 572, 400, 400, 400, 200, 200, 201, 201, 201, 202, + 202, 372, 400, 401, 401, 401, 401, 402, 402, 552, 400, 400, + 400, 400, 201, 201, 201, 201, 202, 202, 352, 401, 401, 401, + 401, 402, 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 402, 402, 572, 401, 401, 401, + 401, 401, 401, 201, 201, 202, 202, 372, 401, 402, 402, 402, + 552, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, + 202, 202, 372, 512, 542, 402, 402, 402, 402, 402, 402, 402, + 402, 412, 472, 572, 402, 402, 402, 402, 402, 402, 402, 442, + 472, 452, 472, 472, 452, 472, 330, 0, 0, 1, 1, 1, + 2, 12, 30, 200, 200, 201, 201, 201, 202, 312, 360, 0, + 0, 1, 1, 1, 2, 2, 42, 560, 200, 200, 201, 201, + 201, 202, 202, 372, 530, 460, 430, 0, 0, 0, 1, 1, + 1, 2, 112, 200, 200, 200, 201, 201, 201, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 2, 72, 201, 201, 201, 201, 202, 202, 272, + 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 72, + 201, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 72, 201, 201, 202, 202, 272, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, 202, + 202, 202, 272, 202, 2, 1, 1, 1, 1, 1, 2, 2, + 2, 112, 202, 312, 212, 2, 2, 2, 2, 2, 2, 2, + 2, 112, 172, 242, 272, 212, 2, 2, 2, 2, 2, 212, + 142, 172, 172, 172, 172, 260, 400, 400, 401, 401, 401, 402, + 402, 72, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 12, 160, 130, 200, 200, + 200, 201, 201, 201, 202, 412, 400, 400, 400, 401, 401, 401, + 402, 402, 400, 400, 400, 200, 200, 201, 201, 201, 202, 202, + 400, 401, 401, 401, 401, 402, 402, 572, 400, 400, 400, 400, + 201, 201, 201, 201, 202, 202, 372, 401, 401, 401, 401, 402, + 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, 202, 202, + 372, 401, 401, 401, 402, 402, 572, 401, 401, 401, 401, 401, + 401, 201, 201, 202, 202, 372, 401, 402, 402, 402, 572, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 372, 402, 402, + 12, 402, 401, 401, 401, 401, 401, 402, 402, 202, 412, 512, + 542, 402, 402, 402, 402, 402, 402, 402, 402, 412, 472, 572, + 512, 402, 402, 402, 402, 402, 512, 442, 472, 472, 472, 472, + 330, 0, 0, 1, 1, 1, 2, 2, 30, 200, 200, 201, + 201, 201, 202, 202, 360, 0, 0, 1, 1, 1, 2, 2, + 42, 560, 200, 200, 201, 201, 201, 202, 202, 342, 530, 460, + 430, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 72, 200, 200, 201, 201, 201, 202, 202, + 272, 200, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, + 52, 201, 201, 201, 201, 202, 202, 252, 201, 1, 0, 0, + 1, 1, 1, 1, 1, 2, 2, 72, 201, 201, 201, 202, + 202, 272, 201, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 72, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 52, 202, 202, 202, 252, 202, + 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 72, 202, + 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 142, 242, 242, 2, 2, 2, 2, 2, 2, 2, 142, 172, + 152, 172, 172, 152, 172, 260, 400, 400, 401, 401, 401, 402, + 402, 42, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 401, 402, 402, 160, 130, 200, 200, + 200, 201, 201, 201, 202, 202, 400, 400, 400, 401, 401, 401, + 402, 402, 572, 400, 400, 400, 200, 200, 201, 201, 201, 202, + 202, 372, 400, 401, 401, 401, 401, 402, 402, 552, 400, 400, + 400, 400, 201, 201, 201, 201, 202, 202, 352, 401, 401, 401, + 401, 402, 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, + 202, 202, 372, 401, 401, 401, 402, 402, 572, 401, 401, 401, + 401, 401, 401, 201, 201, 202, 202, 372, 401, 402, 402, 402, + 552, 401, 401, 401, 401, 401, 401, 401, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 401, 401, 401, 401, 401, 402, 402, + 202, 202, 372, 402, 542, 402, 402, 402, 402, 402, 402, 402, + 402, 402, 442, 542, 402, 402, 402, 402, 402, 402, 402, 442, + 472, 452, 472, 472, 452, 472, 330, 0, 0, 1, 1, 1, + 2, 2, 30, 200, 200, 201, 201, 201, 202, 202, 360, 0, + 0, 1, 1, 1, 2, 2, 42, 560, 200, 200, 201, 201, + 201, 202, 202, 342, 530, 460, 430, 0, 0, 0, 1, 1, + 2, 2, 112, 200, 200, 200, 201, 201, 202, 202, 312, 200, + 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 200, 200, + 201, 201, 201, 202, 202, 200, 0, 0, 0, 0, 1, 1, + 1, 1, 2, 2, 52, 201, 201, 201, 201, 202, 202, 252, + 201, 1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 72, + 201, 201, 201, 202, 202, 272, 201, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 72, 201, 202, 202, 202, 272, 201, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 52, 202, + 202, 202, 252, 202, 2, 2, 1, 1, 1, 2, 2, 2, + 2, 112, 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 142, 242, 242, 212, 2, 2, 2, 2, 2, 212, + 142, 152, 172, 172, 152, 260, 400, 400, 401, 401, 401, 402, + 402, 42, 60, 200, 200, 201, 201, 201, 202, 202, 342, 230, + 400, 400, 400, 401, 401, 402, 402, 12, 160, 130, 200, 200, + 200, 201, 201, 202, 202, 412, 400, 400, 400, 401, 401, 401, + 402, 402, 400, 400, 400, 200, 200, 201, 201, 201, 202, 202, + 400, 401, 401, 401, 401, 402, 402, 552, 400, 400, 400, 400, + 201, 201, 201, 201, 202, 202, 352, 401, 401, 401, 401, 402, + 402, 572, 401, 400, 400, 401, 401, 201, 201, 201, 202, 202, + 372, 401, 401, 402, 402, 402, 572, 401, 401, 401, 401, 401, + 401, 201, 202, 202, 202, 372, 401, 402, 402, 402, 552, 401, + 401, 401, 401, 401, 401, 401, 202, 202, 202, 352, 402, 402, + 12, 402, 402, 401, 401, 401, 402, 402, 402, 202, 412, 402, + 542, 402, 402, 402, 402, 402, 402, 402, 402, 402, 442, 542, + 512, 402, 402, 402, 402, 402, 512, 442, 452, 472, 472, 452 + + + 0, 306, 582, 888, 1176, 1482, 1770, 2076, 2364, 2670, + 2964, 3270, 3564, 3870, 4176, 4494, 4800, 5118, 5424, 5748, + 6054, 6384, 6690, 7020, 7344, 7698, 8040, 8394 + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalEE/v9a/hgcalEE.xml b/Geometry/HGCalCommonData/data/hgcalEE/v9a/hgcalEE.xml deleted file mode 100644 index 8d1c33dbf1098..0000000000000 --- a/Geometry/HGCalCommonData/data/hgcalEE/v9a/hgcalEE.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - hgcalwafer:HGCalEEWafer0Fine, hgcalwafer:HGCalEEWafer0Coarse1, - hgcalwafer:HGCalEEWafer0Coarse2, hgcalwafer:HGCalEEWafer1Fine, - hgcalwafer:HGCalEEWafer1Coarse1, hgcalwafer:HGCalEEWafer1Coarse2 - - materials:StainlessSteel, materials:Lead, materials:Copper, - hgcalMaterial:HGC_G10-FR4, materials:Air, materials:Silicon, - hgcalMaterial:WCu, materials:Copper, materials:Copper - - HGCalEEAbsorberCover, HGCalEEAbsorber1, HGCalEEAbsorber2, HGCalEEPCB, - HGCalEEAirGap, HGCalEESensitive, HGCalEEBasePlate, HGCalEEHeatShield, - HGCalEEThermalGap - - 0.3*mm, 2.1*mm, 0.1*mm, 1.6*mm, 1.5*mm, 0.3*mm, 1.4*mm, - 6.0*mm, 1.0*mm - - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 16 - - 24.4*mm, 24.4*mm, 24.4*mm, 24.4*mm, 24.4*mm, 24.4*mm, 24.4*mm, - 24.4*mm, 24.4*mm, 24.4*mm, 24.4*mm, 24.4*mm, 24.4*mm, 22.6*mm - - 0, 1, 2, 0, 3, 4, 3, 5, 6, 7, 6, 5, 3, 4, 3, 0, 2, 1, 0, - 0, 1, 2, 0, 3, 4, 3, 5, 6, 7, 6, 5, 3, 4, 3, 0, 2, 1, 0, - 0, 1, 2, 0, 3, 4, 3, 5, 6, 7, 6, 5, 3, 4, 3, 0, 2, 1, 0, - 0, 1, 2, 0, 3, 4, 3, 5, 6, 7, 6, 5, 3, 4, 3, 0, 2, 1, 0, - 0, 1, 2, 0, 3, 4, 3, 5, 6, 7, 6, 5, 3, 4, 3, 0, 2, 1, 0, - 0, 1, 2, 0, 3, 4, 3, 5, 6, 7, 6, 5, 3, 4, 3, 0, 2, 1, 0, - 0, 1, 2, 0, 3, 4, 3, 5, 6, 7, 6, 5, 3, 4, 3, 0, 2, 1, 0, - 0, 1, 2, 0, 3, 4, 3, 5, 6, 7, 6, 5, 3, 4, 3, 0, 2, 1, 0, - 0, 1, 2, 0, 3, 4, 3, 5, 6, 7, 6, 5, 3, 4, 3, 0, 2, 1, 0, - 0, 1, 2, 0, 3, 4, 3, 5, 6, 7, 6, 5, 3, 4, 3, 0, 2, 1, 0, - 0, 1, 2, 0, 3, 4, 3, 5, 6, 7, 6, 5, 3, 4, 3, 0, 2, 1, 0, - 0, 1, 2, 0, 3, 4, 3, 5, 6, 7, 6, 5, 3, 4, 3, 0, 2, 1, 0, - 0, 1, 2, 0, 3, 4, 3, 5, 6, 7, 6, 5, 3, 4, 3, 0, 2, 1, 0, - 0, 1, 2, 0, 3, 4, 3, 5, 6, 7, 6, 5, 3, 4, 3, 8 - - - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0 - - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - - - - - - [hgcal:rad100200P0], [hgcal:rad100200P1], [hgcal:rad100200P2], - [hgcal:rad100200P3], [hgcal:rad100200P4] - - [hgcal:rad200300P0], [hgcal:rad200300P1], [hgcal:rad200300P2], - [hgcal:rad200300P3], [hgcal:rad200300P4] - - - - - - - - - [hgcal:slope1], [hgcal:slope1], [hgcal:slope1], [hgcal:slope1], - [hgcal:slope1], [hgcal:slope1], [hgcal:slope1] - - [hgcal:zB1], [hgcal:zB2], [hgcal:zB3], [hgcal:zB4], - [hgcal:zB5], [hgcal:zB6], [hgcal:zB7] - - [hgcal:rB1], [hgcal:rB3], [hgcal:rB4], [hgcal:rB5], - [hgcal:rB6], [hgcal:rB7], [hgcal:rB7] - - [hgcal:slope2], [hgcal:slope3], 0, 0 - - [hgcal:zHGCal1], [hgcal:zHGCal2], [hgcal:zHGCal3], - [hgcal:zHGCal4] - - [hgcal:rMaxHGCal1], [hgcal:rMaxHGCal2], [hgcal:rMaxHGCal3], - [hgcal:rMaxHGCal4] - - - - - diff --git a/Geometry/HGCalCommonData/data/hgcalHEmix/v14/hgcal.xml b/Geometry/HGCalCommonData/data/hgcalHEmix/v14/hgcal.xml new file mode 100644 index 0000000000000..9943d15e5d56c --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalHEmix/v14/hgcal.xml @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalHEmix/v14/hgcalHEmix.xml b/Geometry/HGCalCommonData/data/hgcalHEmix/v14/hgcalHEmix.xml index 5a2074d9b3ae3..4d1e2187629b8 100644 --- a/Geometry/HGCalCommonData/data/hgcalHEmix/v14/hgcalHEmix.xml +++ b/Geometry/HGCalCommonData/data/hgcalHEmix/v14/hgcalHEmix.xml @@ -1,5 +1,5 @@ - + @@ -72,13 +72,6 @@ 0, 0, 0, 0, 1, 0, 0, 0, 0 - - [hgcal:rad100200P0], [hgcal:rad100200P1], [hgcal:rad100200P2], - [hgcal:rad100200P3], [hgcal:rad100200P4] - - [hgcal:rad200300P0], [hgcal:rad200300P1], [hgcal:rad200300P2], - [hgcal:rad200300P3], [hgcal:rad200300P4] - 2359299, 2359300, 2359301, 2359302, 2359303, 2359304, 2359305, 2359331, 2359332, 2359333, 2359334, 2359335, 2359336, 2359337, @@ -481,154 +474,244 @@ 5769474, 5769475, 5769505, 5769506, 5769507, 5769508, 5769509, 5769510, 5769511, 5769536, 5769537, 5769569, 5769570, 5769571, 5769572, 5769573, 5769574, 5769633, 5769634, 5769635, 5769636, - 5769637 + 5769637 - - 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, - 2, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, - 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 1, 2, 2, 2, 2, 0, 1, 1, 2, 2, - 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 0, 1, 1, 1, - 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, - 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, - 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, - 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, - 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, - 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, - 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, - 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, - 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, - 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, - 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, - 2, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, - 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, - 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, - 2, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 2, 2, - 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, - 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, - 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, - 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, - 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, - 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, - 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, - 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, - 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 1, - 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, - 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, - 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1, - 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, - 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1, - 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, - 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, - 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2 + + 1, 1, 1, 2, 2, 2, 42, 201, 201, 201, 202, 202, + 202, 342, 411, 1, 1, 2, 2, 2, 2, 11, 201, 201, + 202, 202, 202, 202, 540, 440, 1, 1, 1, 2, 2, 2, + 2, 72, 201, 201, 201, 202, 202, 202, 202, 272, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 52, 201, 201, 202, + 202, 202, 202, 252, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 52, 201, 202, 202, 202, 202, 252, 2, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 52, 202, 202, 202, 202, + 252, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 52, + 202, 202, 202, 252, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 242, 212, 2, 2, 2, 2, 212, + 142, 172, 172, 172, 340, 401, 401, 402, 402, 402, 402, 40, + 201, 201, 202, 202, 202, 202, 401, 401, 401, 402, 402, 402, + 42, 201, 201, 201, 202, 202, 202, 342, 240, 401, 401, 401, + 402, 402, 402, 12, 140, 201, 201, 201, 202, 202, 202, 412, + 401, 401, 401, 402, 402, 402, 402, 401, 211, 401, 201, 201, + 201, 202, 202, 202, 202, 401, 401, 402, 402, 402, 402, 572, + 401, 401, 401, 401, 201, 201, 202, 202, 202, 202, 372, 402, + 402, 402, 402, 402, 572, 401, 401, 401, 401, 401, 202, 202, + 202, 202, 202, 372, 402, 402, 402, 402, 572, 402, 402, 402, + 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 12, 402, + 402, 402, 402, 402, 402, 402, 202, 202, 412, 402, 542, 402, + 402, 402, 402, 402, 402, 402, 402, 202, 442, 542, 402, 402, + 402, 402, 402, 402, 402, 442, 472, 452, 452, 452, 452, 472, + 401, 401, 401, 402, 402, 402, 42, 201, 201, 201, 202, 202, + 202, 342, 341, 1, 1, 2, 2, 2, 2, 41, 201, 201, + 202, 202, 202, 202, 1, 1, 1, 2, 2, 2, 42, 201, + 201, 201, 202, 202, 202, 342, 541, 441, 1, 1, 1, 2, + 2, 2, 112, 201, 201, 201, 202, 202, 202, 312, 201, 1, + 511, 1, 1, 1, 1, 2, 2, 2, 2, 201, 201, 202, + 202, 202, 202, 201, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 72, 201, 202, 202, 202, 202, 272, 202, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 72, 202, 202, 202, + 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 72, 202, 202, 202, 272, 202, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 112, 202, 312, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, 2, + 2, 2, 2, 142, 172, 152, 152, 152, 152, 172, 311, 401, + 401, 402, 402, 402, 402, 111, 201, 201, 202, 202, 202, 202, + 241, 401, 401, 401, 402, 402, 402, 402, 572, 141, 201, 201, + 201, 202, 202, 202, 202, 372, 401, 401, 401, 402, 402, 402, + 402, 552, 401, 401, 401, 201, 201, 202, 202, 202, 202, 352, + 401, 401, 402, 402, 402, 402, 552, 401, 401, 401, 401, 201, + 202, 202, 202, 202, 352, 402, 402, 402, 402, 402, 552, 401, + 401, 401, 401, 402, 202, 202, 202, 202, 352, 402, 402, 402, + 402, 552, 402, 402, 402, 402, 402, 402, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 402, 202, + 202, 372, 402, 542, 402, 402, 402, 402, 402, 402, 402, 402, + 442, 542, 512, 402, 402, 402, 402, 512, 442, 472, 472, 472, + 1, 1, 2, 2, 2, 2, 42, 201, 201, 202, 202, 202, + 202, 342, 411, 1, 1, 2, 2, 2, 2, 11, 201, 201, + 202, 202, 202, 202, 541, 441, 1, 1, 1, 2, 2, 2, + 2, 72, 201, 201, 201, 202, 202, 202, 202, 272, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 52, 201, 201, 202, + 202, 202, 202, 252, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 52, 202, 202, 202, 202, 202, 252, 2, 2, 1, + 1, 2, 2, 2, 2, 2, 2, 52, 202, 202, 202, 202, + 252, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 52, + 202, 202, 202, 252, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 242, 212, 2, 2, 2, 2, 212, + 142, 172, 172, 172, 341, 401, 401, 402, 402, 402, 402, 41, + 201, 201, 202, 202, 202, 202, 401, 401, 402, 402, 402, 402, + 42, 201, 201, 202, 202, 202, 202, 342, 241, 401, 401, 401, + 402, 402, 402, 12, 141, 201, 201, 201, 202, 202, 202, 412, + 401, 401, 401, 402, 402, 402, 402, 401, 211, 401, 201, 201, + 201, 202, 202, 202, 202, 401, 402, 402, 402, 402, 402, 572, + 401, 401, 401, 401, 201, 202, 202, 202, 202, 202, 372, 402, + 402, 402, 402, 402, 572, 402, 401, 401, 401, 402, 202, 202, + 202, 202, 202, 372, 402, 402, 402, 402, 572, 402, 402, 402, + 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 12, 402, + 402, 402, 402, 402, 402, 402, 202, 202, 412, 402, 542, 402, + 402, 402, 402, 402, 402, 402, 402, 202, 442, 542, 402, 402, + 402, 402, 402, 402, 402, 442, 472, 452, 452, 452, 452, 472, + 401, 401, 402, 402, 402, 402, 42, 201, 201, 202, 202, 202, + 202, 342, 341, 1, 1, 2, 2, 2, 2, 41, 201, 201, + 202, 202, 202, 202, 1, 1, 2, 2, 2, 2, 42, 201, + 201, 202, 202, 202, 202, 342, 541, 441, 1, 1, 2, 2, + 2, 2, 112, 201, 201, 202, 202, 202, 202, 312, 201, 1, + 511, 1, 1, 1, 2, 2, 2, 2, 2, 201, 202, 202, + 202, 202, 202, 201, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 72, 202, 202, 202, 202, 202, 272, 202, 2, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 72, 202, 202, 202, + 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 72, 202, 202, 202, 272, 202, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 112, 202, 312, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, 2, + 2, 2, 2, 142, 172, 152, 152, 152, 152, 172, 311, 401, + 401, 402, 402, 402, 402, 111, 201, 201, 202, 202, 202, 202, + 241, 401, 401, 401, 402, 402, 402, 402, 572, 141, 201, 201, + 201, 202, 202, 202, 202, 372, 401, 401, 401, 402, 402, 402, + 402, 552, 401, 401, 401, 201, 201, 202, 202, 202, 202, 352, + 401, 402, 402, 402, 402, 402, 552, 401, 401, 401, 401, 202, + 202, 202, 202, 202, 352, 402, 402, 402, 402, 402, 552, 402, + 402, 402, 402, 402, 202, 202, 202, 202, 352, 402, 402, 402, + 402, 552, 402, 402, 402, 402, 402, 402, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 402, 202, + 202, 372, 402, 542, 402, 402, 402, 402, 402, 402, 402, 402, + 442, 542, 512, 402, 402, 402, 402, 512, 442, 472, 472, 472, + 341, 1, 2, 2, 2, 42, 41, 201, 202, 202, 202, 342, + 1, 2, 2, 2, 2, 201, 202, 202, 202, 202, 441, 1, + 2, 2, 2, 2, 72, 541, 201, 202, 202, 202, 202, 272, + 1, 511, 511, 1, 1, 2, 2, 2, 2, 52, 201, 202, + 202, 202, 202, 252, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 52, 202, 202, 202, 202, 252, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 52, 202, 202, 202, 252, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 2, 2, + 2, 2, 2, 2, 2, 2, 142, 242, 242, 212, 2, 2, + 2, 212, 142, 172, 172, 401, 401, 402, 402, 402, 201, 201, + 202, 202, 202, 311, 401, 402, 402, 402, 42, 111, 201, 202, + 202, 202, 342, 311, 401, 402, 402, 402, 12, 111, 201, 202, + 202, 202, 412, 401, 401, 402, 402, 402, 402, 241, 141, 201, + 201, 202, 202, 202, 202, 401, 402, 402, 402, 402, 572, 401, + 401, 401, 401, 201, 202, 202, 202, 202, 372, 402, 402, 402, + 402, 572, 402, 402, 402, 402, 402, 202, 202, 202, 202, 372, + 402, 402, 12, 402, 402, 402, 402, 402, 402, 202, 202, 412, + 402, 542, 402, 402, 402, 402, 402, 402, 402, 202, 442, 542, + 402, 402, 402, 402, 402, 402, 442, 472, 452, 452, 452, 472, + 341, 401, 402, 402, 402, 42, 41, 201, 202, 202, 202, 342, + 1, 2, 2, 2, 2, 201, 202, 202, 202, 202, 411, 1, + 2, 2, 2, 42, 11, 201, 202, 202, 202, 342, 411, 1, + 2, 2, 2, 112, 11, 201, 202, 202, 202, 312, 201, 541, + 441, 1, 1, 2, 2, 2, 2, 201, 202, 202, 202, 202, + 202, 1, 1, 1, 1, 2, 2, 2, 2, 2, 72, 202, + 202, 202, 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 72, 202, 202, 202, 272, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 112, 202, 312, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, 2, 2, + 2, 142, 172, 152, 152, 152, 172, 401, 402, 402, 402, 402, + 201, 202, 202, 202, 202, 241, 401, 402, 402, 402, 402, 572, + 141, 201, 202, 202, 202, 202, 372, 401, 401, 402, 402, 402, + 402, 552, 211, 211, 401, 201, 202, 202, 202, 202, 352, 402, + 402, 402, 402, 402, 552, 401, 401, 401, 402, 202, 202, 202, + 202, 352, 402, 402, 402, 402, 552, 402, 402, 402, 402, 402, + 202, 202, 202, 352, 402, 402, 402, 572, 402, 402, 402, 402, + 402, 402, 202, 202, 372, 402, 542, 402, 402, 402, 402, 402, + 402, 402, 442, 542, 512, 402, 402, 402, 512, 442, 472, 472, + 341, 1, 2, 2, 42, 41, 201, 202, 202, 342, 1, 2, + 2, 2, 201, 202, 202, 202, 441, 1, 2, 2, 2, 72, + 541, 201, 202, 202, 202, 272, 1, 511, 511, 1, 1, 2, + 2, 2, 72, 201, 202, 202, 202, 272, 2, 1, 1, 1, + 2, 2, 2, 2, 72, 202, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 2, 72, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 142, 242, 242, 212, 212, 212, 212, 142, + 401, 402, 402, 402, 201, 202, 202, 202, 311, 401, 402, 402, + 42, 111, 201, 202, 202, 342, 311, 401, 402, 402, 12, 111, + 201, 202, 202, 412, 401, 401, 402, 402, 12, 241, 141, 201, + 201, 202, 202, 412, 402, 402, 402, 12, 401, 401, 401, 401, + 202, 202, 202, 412, 402, 402, 12, 402, 402, 402, 402, 402, + 202, 202, 412, 402, 542, 402, 402, 402, 402, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 442, 472, 472, 472, 472, + 341, 401, 402, 402, 42, 41, 201, 202, 202, 342, 1, 2, + 2, 2, 201, 202, 202, 202, 411, 1, 2, 2, 42, 11, + 201, 202, 202, 342, 411, 1, 2, 2, 112, 11, 201, 202, + 202, 312, 201, 541, 441, 1, 1, 2, 2, 112, 201, 202, + 202, 312, 202, 1, 1, 1, 1, 2, 2, 2, 112, 202, + 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, 112, 202, + 312, 202, 2, 2, 2, 2, 2, 2, 2, 142, 242, 242, + 2, 2, 2, 2, 2, 142, 172, 172, 172, 172, 401, 402, + 402, 402, 201, 202, 202, 202, 241, 401, 402, 402, 402, 572, + 141, 201, 202, 202, 202, 372, 401, 401, 402, 402, 402, 572, + 211, 211, 401, 201, 202, 202, 202, 372, 402, 402, 402, 402, + 572, 401, 401, 401, 402, 202, 202, 202, 372, 402, 402, 402, + 572, 402, 402, 402, 402, 402, 202, 202, 372, 402, 542, 402, + 402, 402, 402, 402, 402, 442, 542, 512, 512, 512, 512, 442, + 341, 1, 2, 2, 42, 41, 201, 202, 202, 342, 1, 2, + 2, 2, 201, 202, 202, 202, 441, 1, 2, 2, 2, 72, + 541, 201, 202, 202, 202, 272, 1, 511, 511, 1, 1, 2, + 2, 2, 72, 201, 202, 202, 202, 272, 2, 2, 1, 2, + 2, 2, 2, 2, 72, 202, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 2, 72, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 142, 242, 242, 212, 212, 212, 212, 142, + 401, 402, 402, 402, 201, 202, 202, 202, 311, 402, 402, 402, + 42, 111, 202, 202, 202, 342, 311, 401, 402, 402, 12, 111, + 201, 202, 202, 412, 401, 402, 402, 402, 12, 241, 141, 201, + 202, 202, 202, 412, 402, 402, 402, 12, 401, 401, 401, 401, + 202, 202, 202, 412, 402, 402, 12, 402, 402, 402, 402, 402, + 202, 202, 412, 402, 542, 402, 402, 402, 402, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 442, 472, 472, 472, 472, + 341, 402, 402, 402, 42, 41, 202, 202, 202, 342, 1, 2, + 2, 2, 201, 202, 202, 202, 411, 2, 2, 2, 42, 11, + 202, 202, 202, 342, 411, 2, 2, 2, 112, 11, 202, 202, + 202, 312, 201, 541, 441, 1, 2, 2, 2, 112, 202, 202, + 202, 312, 202, 2, 1, 1, 2, 2, 2, 2, 112, 202, + 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, 112, 202, + 312, 202, 2, 2, 2, 2, 2, 2, 2, 142, 242, 242, + 2, 2, 2, 2, 2, 142, 172, 172, 172, 172, 401, 402, + 402, 402, 201, 202, 202, 202, 241, 401, 402, 402, 402, 572, + 141, 201, 202, 202, 202, 372, 401, 402, 402, 402, 402, 572, + 211, 211, 401, 202, 202, 202, 202, 372, 402, 402, 402, 402, + 572, 402, 402, 402, 402, 202, 202, 202, 372, 402, 402, 402, + 572, 402, 402, 402, 402, 402, 202, 202, 372, 402, 542, 402, + 402, 402, 402, 402, 402, 442, 542, 512, 512, 512, 512, 442, + 341, 2, 2, 42, 41, 202, 202, 342, 1, 2, 2, 201, + 202, 202, 441, 1, 2, 2, 72, 541, 201, 202, 202, 272, + 1, 511, 511, 1, 2, 2, 2, 72, 202, 202, 202, 272, + 2, 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 2, + 2, 2, 2, 2, 2, 142, 242, 242, 212, 212, 212, 142, + 401, 402, 402, 201, 202, 202, 311, 402, 402, 42, 111, 202, + 202, 342, 311, 402, 402, 12, 111, 202, 202, 412, 401, 402, + 402, 12, 241, 141, 201, 202, 202, 412, 402, 402, 12, 402, + 401, 401, 402, 202, 202, 412, 402, 542, 402, 402, 402, 402, + 402, 202, 442, 542, 402, 402, 402, 402, 442, 472, 472, 472, + 341, 402, 402, 42, 41, 202, 202, 342, 1, 2, 2, 201, + 202, 202, 411, 2, 2, 42, 11, 202, 202, 342, 411, 2, + 2, 112, 11, 202, 202, 312, 201, 541, 441, 1, 2, 2, + 112, 202, 202, 312, 202, 2, 1, 1, 2, 2, 2, 112, + 202, 312, 202, 2, 2, 2, 2, 2, 2, 142, 242, 242, + 2, 2, 2, 2, 142, 172, 172, 172, 401, 402, 402, 201, + 202, 202, 241, 401, 402, 402, 572, 141, 201, 202, 202, 372, + 401, 402, 402, 402, 572, 211, 211, 401, 202, 202, 202, 372, + 402, 402, 402, 572, 402, 402, 402, 402, 202, 202, 372, 402, + 542, 402, 402, 402, 402, 402, 442, 542, 512, 512, 512, 442, + 341, 2, 2, 42, 41, 202, 202, 342, 2, 2, 2, 202, + 202, 202, 441, 2, 2, 2, 72, 541, 202, 202, 202, 272, + 1, 511, 511, 1, 2, 2, 2, 72, 202, 202, 202, 272, + 2, 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 2, + 2, 2, 2, 2, 2, 142, 242, 242, 212, 212, 212, 142, + 401, 402, 402, 201, 202, 202, 311, 402, 402, 42, 111, 202, + 202, 342, 311, 402, 402, 12, 111, 202, 202, 412, 401, 402, + 402, 12, 241, 141, 201, 202, 202, 412, 402, 402, 12, 402, + 402, 402, 402, 202, 202, 412, 402, 542, 402, 402, 402, 402, + 402, 202, 442, 542, 402, 402, 402, 402, 442, 472, 472, 472, + 342, 402, 402, 42, 42, 202, 202, 342, 2, 2, 2, 202, + 202, 202, 411, 2, 2, 42, 11, 202, 202, 342, 411, 2, + 2, 112, 11, 202, 202, 312, 202, 542, 442, 2, 2, 2, + 112, 202, 202, 312, 202, 2, 2, 2, 2, 2, 2, 112, + 202, 312, 202, 2, 2, 2, 2, 2, 2, 142, 242, 242, + 2, 2, 2, 2, 142, 172, 172, 172, 402, 402, 402, 202, + 202, 202, 242, 402, 402, 402, 572, 142, 202, 202, 202, 372, + 402, 402, 402, 402, 572, 211, 211, 402, 202, 202, 202, 372, + 402, 402, 402, 572, 402, 402, 402, 402, 202, 202, 372, 402, + 542, 402, 402, 402, 402, 402, 442, 542, 512, 512, 512, 442 - - - diff --git a/Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcal.xml b/Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcal.xml new file mode 100644 index 0000000000000..0ff3521befcd0 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcal.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcalHEmix.xml b/Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcalHEmix.xml new file mode 100644 index 0000000000000..fba46e1ac708e --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcalHEmix.xml @@ -0,0 +1,942 @@ + + + + + + + + + + + + + + + + + + + + 0, 0, 0, 0 + + [hgcal:zHGCal0], [hgcal:zHGCal2], [hgcal:zHGCal7], + [hgcal:zHGCal8] + + [hgcal:rMinHGCal2], [hgcal:rMinHGCal4], + [hgcal:rMinHGCal6], [hgcal:rMinHGCal8] + + [hgcal:slope2], [hgcal:slope3], 0, 0 + + [hgcal:zHGCal0], [hgcal:zHGCal5], [hgcal:zHGCal10], + [hgcal:zHGCal11] + + [hgcal:rMaxHGCal0], [hgcal:rMaxHGCal5], [hgcal:rMaxHGCal10], + [hgcal:rMaxHGCal11] + + hgcalwafer:HGCalHEWafer0Fine, hgcalwafer:HGCalHEWafer0Coarse1, + hgcalwafer:HGCalHEWafer0Coarse2 + + hgcalwafer:HGCalHEWafer0Fineb0, hgcalwafer:HGCalHEWafer0Fineb1, + hgcalwafer:HGCalHEWafer0Fineb2, hgcalwafer:HGCalHEWafer0Fineb3, + hgcalwafer:HGCalHEWafer0Fineb4, hgcalwafer:HGCalHEWafer0Fineb5, + hgcalwafer:HGCalHEWafer0Coarse1b0, hgcalwafer:HGCalHEWafer0Coarse1b1, + hgcalwafer:HGCalHEWafer0Coarse1b2, hgcalwafer:HGCalHEWafer0Coarse1b3, + hgcalwafer:HGCalHEWafer0Coarse1b4, hgcalwafer:HGCalHEWafer0Coarse1b5, + hgcalwafer:HGCalHEWafer0Coarse2b0, hgcalwafer:HGCalHEWafer0Coarse2b1, + hgcalwafer:HGCalHEWafer0Coarse2b2, hgcalwafer:HGCalHEWafer0Coarse2b3, + hgcalwafer:HGCalHEWafer0Coarse2b4, hgcalwafer:HGCalHEWafer0Coarse2b5, + hgcalwafer:HGCalHEWafer0Fineg0, hgcalwafer:HGCalHEWafer0Fineg1, + hgcalwafer:HGCalHEWafer0Fineg2, hgcalwafer:HGCalHEWafer0Fineg3, + hgcalwafer:HGCalHEWafer0Fineg4, hgcalwafer:HGCalHEWafer0Fineg5, + hgcalwafer:HGCalHEWafer0Coarse1g0, hgcalwafer:HGCalHEWafer0Coarse1g1, + hgcalwafer:HGCalHEWafer0Coarse1g2, hgcalwafer:HGCalHEWafer0Coarse1g3, + hgcalwafer:HGCalHEWafer0Coarse1g4, hgcalwafer:HGCalHEWafer0Coarse1g5, + hgcalwafer:HGCalHEWafer0Coarse2g0, hgcalwafer:HGCalHEWafer0Coarse2g1, + hgcalwafer:HGCalHEWafer0Coarse2g2, hgcalwafer:HGCalHEWafer0Coarse2g3, + hgcalwafer:HGCalHEWafer0Coarse2g4, hgcalwafer:HGCalHEWafer0Coarse2g5, + hgcalwafer:HGCalHEWafer0Finegm0, hgcalwafer:HGCalHEWafer0Finegm1, + hgcalwafer:HGCalHEWafer0Finegm2, hgcalwafer:HGCalHEWafer0Finegm3, + hgcalwafer:HGCalHEWafer0Finegm4, hgcalwafer:HGCalHEWafer0Finegm5, + hgcalwafer:HGCalHEWafer0Coarse1gm0, hgcalwafer:HGCalHEWafer0Coarse1gm1, + hgcalwafer:HGCalHEWafer0Coarse1gm2, hgcalwafer:HGCalHEWafer0Coarse1gm3, + hgcalwafer:HGCalHEWafer0Coarse1gm4, hgcalwafer:HGCalHEWafer0Coarse1gm5, + hgcalwafer:HGCalHEWafer0Coarse2gm0, hgcalwafer:HGCalHEWafer0Coarse2gm1, + hgcalwafer:HGCalHEWafer0Coarse2gm2, hgcalwafer:HGCalHEWafer0Coarse2gm3, + hgcalwafer:HGCalHEWafer0Coarse2gm4, hgcalwafer:HGCalHEWafer0Coarse2gm5, + hgcalwafer:HGCalHEWafer0Finea0, hgcalwafer:HGCalHEWafer0Finea1, + hgcalwafer:HGCalHEWafer0Finea2, hgcalwafer:HGCalHEWafer0Finea3, + hgcalwafer:HGCalHEWafer0Finea4, hgcalwafer:HGCalHEWafer0Finea5, + hgcalwafer:HGCalHEWafer0Coarse1a0, hgcalwafer:HGCalHEWafer0Coarse1a1, + hgcalwafer:HGCalHEWafer0Coarse1a2, hgcalwafer:HGCalHEWafer0Coarse1a3, + hgcalwafer:HGCalHEWafer0Coarse1a4, hgcalwafer:HGCalHEWafer0Coarse1a5, + hgcalwafer:HGCalHEWafer0Coarse2a0, hgcalwafer:HGCalHEWafer0Coarse2a1, + hgcalwafer:HGCalHEWafer0Coarse2a2, hgcalwafer:HGCalHEWafer0Coarse2a3, + hgcalwafer:HGCalHEWafer0Coarse2a4, hgcalwafer:HGCalHEWafer0Coarse2a5, + hgcalwafer:HGCalHEWafer0Fined0, hgcalwafer:HGCalHEWafer0Fined1, + hgcalwafer:HGCalHEWafer0Fined2, hgcalwafer:HGCalHEWafer0Fined3, + hgcalwafer:HGCalHEWafer0Fined4, hgcalwafer:HGCalHEWafer0Fined5, + hgcalwafer:HGCalHEWafer0Coarse1d0, hgcalwafer:HGCalHEWafer0Coarse1d1, + hgcalwafer:HGCalHEWafer0Coarse1d2, hgcalwafer:HGCalHEWafer0Coarse1d3, + hgcalwafer:HGCalHEWafer0Coarse1d4, hgcalwafer:HGCalHEWafer0Coarse1d5, + hgcalwafer:HGCalHEWafer0Coarse2d0, hgcalwafer:HGCalHEWafer0Coarse2d1, + hgcalwafer:HGCalHEWafer0Coarse2d2, hgcalwafer:HGCalHEWafer0Coarse2d3, + hgcalwafer:HGCalHEWafer0Coarse2d4, hgcalwafer:HGCalHEWafer0Coarse2d5, + hgcalwafer:HGCalHEWafer0Finedm0, hgcalwafer:HGCalHEWafer0Finedm1, + hgcalwafer:HGCalHEWafer0Finedm2, hgcalwafer:HGCalHEWafer0Finedm3, + hgcalwafer:HGCalHEWafer0Finedm4, hgcalwafer:HGCalHEWafer0Finedm5, + hgcalwafer:HGCalHEWafer0Coarse1dm0, hgcalwafer:HGCalHEWafer0Coarse1dm1, + hgcalwafer:HGCalHEWafer0Coarse1dm2, hgcalwafer:HGCalHEWafer0Coarse1dm3, + hgcalwafer:HGCalHEWafer0Coarse1dm4, hgcalwafer:HGCalHEWafer0Coarse1dm5, + hgcalwafer:HGCalHEWafer0Coarse2dm0, hgcalwafer:HGCalHEWafer0Coarse2dm1, + hgcalwafer:HGCalHEWafer0Coarse2dm2, hgcalwafer:HGCalHEWafer0Coarse2dm3, + hgcalwafer:HGCalHEWafer0Coarse2dm4, hgcalwafer:HGCalHEWafer0Coarse2dm5, + hgcalwafer:HGCalHEWafer0Finec0, hgcalwafer:HGCalHEWafer0Finec1, + hgcalwafer:HGCalHEWafer0Finec2, hgcalwafer:HGCalHEWafer0Finec3, + hgcalwafer:HGCalHEWafer0Finec4, hgcalwafer:HGCalHEWafer0Finec5, + hgcalwafer:HGCalHEWafer0Coarse1c0, hgcalwafer:HGCalHEWafer0Coarse1c1, + hgcalwafer:HGCalHEWafer0Coarse1c2, hgcalwafer:HGCalHEWafer0Coarse1c3, + hgcalwafer:HGCalHEWafer0Coarse1c4, hgcalwafer:HGCalHEWafer0Coarse1c5, + hgcalwafer:HGCalHEWafer0Coarse2c0, hgcalwafer:HGCalHEWafer0Coarse2c1, + hgcalwafer:HGCalHEWafer0Coarse1c2, hgcalwafer:HGCalHEWafer0Coarse1c3, + hgcalwafer:HGCalHEWafer0Coarse2c4, hgcalwafer:HGCalHEWafer0Coarse2c5 + + materials:StainlessSteel, materials:StainlessSteel, materials:Air, + materials:Copper, materials:Air, materials:Copper + + HGCalHEAbsorber1, HGCalHEAbsorber2, HGCalHEAirGap1, HGCalHECopperCover, + HGCalHEMix, HGCalHECoolingPlate + + 35.0*mm, 66.0*mm, 3.7*mm, 1.1*mm, 8.6*mm, 6.1*mm + + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 + + 54.5*mm, 54.5*mm, 54.5*mm, 54.5*mm, 85.5*mm, 85.5*mm, + 85.5*mm, 85.5*mm, 85.5*mm, 85.5*mm, 85.5*mm, 85.5*mm, + 85.5*mm, 85.5*mm + + 0, 2, 3, 4, 5, 0, 2, 3, 4, 5, 0, 2, 3, 4, 5, + 0, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, + 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, + 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, + 1, 2, 3, 4, 5, 1, 2, 3, 4, 5 + + -1, 0, -1, 1, -2, -1, 0, -1, 1, -2, -1, 0, -1, 1, -2, + -1, 0, -1, 1, -2, -1, 0, -1, 1, -2, -1, 0, -1, 1, -2, + -1, 0, -1, 1, -2, -1, 0, -1, 1, -2, -1, 0, -1, 1, -2, + -1, 0, -1, 1, -2, -1, 0, -1, 1, -2, -1, 0, -1, 1, -2, + -1, 0, -1, 1, -2, -1, 0, -1, 1, -2 + + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 + + materials:Air, materials:Cables, materials:Air, + materials:H_Scintillator, materials:Epoxy, + hgcalMaterial:HGC_G10-FR4 + + HGCalAirGap1, HGCalCableConnector, HGCalAirGap2, + HGCalHEScintillatorSensitive, HGCalScintillatorEpoxy, + HGCalTileBoard + + 0.87*mm, 1.04*mm, 1.245*mm, [hgcal:ScintillatorThickness], 0.075*mm, + 1.49*mm + + 0, 1, 2, 3, 4, 5 + + 2359299, 2359300, 2359301, 2359302, 2359303, 2359304, 2359305, + 2359331, 2359332, 2359333, 2359334, 2359335, 2359336, 2359337, + 2359363, 2359364, 2359365, 2359366, 2359367, 2359368, 2359369, + 2359394, 2359395, 2359396, 2359397, 2359398, 2359399, 2359400, + 2359424, 2359426, 2359427, 2359428, 2359429, 2359430, 2359431, + 2359432, 2359433, 2359434, 2359457, 2359458, 2359459, 2359460, + 2359461, 2359462, 2359463, 2359464, 2359488, 2359489, 2359490, + 2359491, 2359492, 2359493, 2359494, 2359495, 2359496, 2359497, + 2359498, 2359521, 2359522, 2359523, 2359524, 2359525, 2359526, + 2359527, 2359552, 2359553, 2359554, 2359555, 2359556, 2359557, + 2359558, 2359559, 2359560, 2359561, 2359562, 2359585, 2359586, + 2359587, 2359588, 2359589, 2359590, 2359616, 2359617, 2359618, + 2359619, 2359620, 2359621, 2359622, 2359623, 2359624, 2359625, + 2359626, 2359649, 2359650, 2359651, 2359652, 2359653, 2359680, + 2359681, 2359682, 2359683, 2359684, 2359685, 2359686, 2359687, + 2359688, 2359689, 2359690, 2359713, 2359714, 2359715, 2359716, + 2359744, 2359745, 2359746, 2359747, 2359748, 2359749, 2359750, + 2359751, 2359752, 2359753, 2359754, 2359777, 2359778, 2359779, + 2359808, 2359809, 2359810, 2359811, 2359812, 2359813, 2359814, + 2359815, 2359816, 2359817, 2359841, 2359873, 2359874, 2359875, + 2359876, 2359877, 2359878, 2359879, 2359880, 2359940, 2359941, + 2359942, 2361410, 2361411, 2361412, 2361413, 2361414, 2361415, + 2361416, 2361443, 2361444, 2361445, 2361446, 2361447, 2361448, + 2361449, 2361474, 2361475, 2361476, 2361477, 2361478, 2361479, + 2361480, 2361508, 2361509, 2361510, 2361511, 2361512, 2361513, + 2361514, 2361536, 2361537, 2361538, 2361539, 2361540, 2361541, + 2361542, 2361543, 2361571, 2361572, 2361573, 2361574, 2361575, + 2361576, 2361577, 2361578, 2361600, 2361601, 2361602, 2361603, + 2361604, 2361605, 2361606, 2361633, 2361634, 2361635, 2361636, + 2361637, 2361638, 2361639, 2361640, 2361641, 2361642, 2361664, + 2361665, 2361666, 2361667, 2361668, 2361669, 2361670, 2361697, + 2361698, 2361699, 2361700, 2361701, 2361702, 2361703, 2361704, + 2361705, 2361706, 2361707, 2361728, 2361729, 2361730, 2361731, + 2361732, 2361733, 2361761, 2361762, 2361763, 2361764, 2361765, + 2361766, 2361767, 2361768, 2361769, 2361770, 2361771, 2361792, + 2361793, 2361794, 2361795, 2361796, 2361825, 2361826, 2361827, + 2361828, 2361829, 2361830, 2361831, 2361832, 2361833, 2361834, + 2361835, 2361856, 2361857, 2361858, 2361889, 2361890, 2361891, + 2361892, 2361893, 2361894, 2361895, 2361896, 2361897, 2361898, + 2361920, 2361921, 2361953, 2361954, 2361955, 2361956, 2361957, + 2361958, 2361959, 2361960, 2361961, 2361962, 2362017, 2362018, + 2362019, 2362020, 2362021, 2362022, 2362023, 2362024, 2362025, + 2362083, 2362084, 2362085, 2362086, 2362087, 2362088, 2621443, + 2621444, 2621445, 2621446, 2621447, 2621448, 2621449, 2621475, + 2621476, 2621477, 2621478, 2621479, 2621480, 2621481, 2621507, + 2621508, 2621509, 2621510, 2621511, 2621512, 2621513, 2621538, + 2621539, 2621540, 2621541, 2621542, 2621543, 2621544, 2621572, + 2621573, 2621574, 2621575, 2621576, 2621577, 2621578, 2621602, + 2621603, 2621604, 2621605, 2621606, 2621607, 2621608, 2621632, + 2621635, 2621636, 2621637, 2621638, 2621639, 2621640, 2621641, + 2621642, 2621665, 2621666, 2621667, 2621668, 2621669, 2621670, + 2621671, 2621696, 2621697, 2621698, 2621699, 2621700, 2621701, + 2621702, 2621703, 2621704, 2621705, 2621706, 2621729, 2621730, + 2621731, 2621732, 2621733, 2621734, 2621760, 2621761, 2621762, + 2621763, 2621764, 2621765, 2621766, 2621767, 2621768, 2621769, + 2621770, 2621771, 2621793, 2621794, 2621795, 2621796, 2621797, + 2621798, 2621824, 2621825, 2621826, 2621827, 2621828, 2621829, + 2621830, 2621831, 2621832, 2621833, 2621834, 2621835, 2621857, + 2621858, 2621859, 2621860, 2621861, 2621888, 2621889, 2621890, + 2621891, 2621892, 2621893, 2621894, 2621895, 2621896, 2621897, + 2621898, 2621899, 2621921, 2621922, 2621923, 2621924, 2621952, + 2621953, 2621954, 2621955, 2621956, 2621957, 2621958, 2621959, + 2621960, 2621961, 2621962, 2621985, 2621986, 2622016, 2622017, + 2622018, 2622019, 2622020, 2622021, 2622022, 2622023, 2622024, + 2622025, 2622026, 2622049, 2622081, 2622082, 2622083, 2622084, + 2622085, 2622086, 2622087, 2622088, 2622089, 2622147, 2622148, + 2622149, 2622150, 2622151, 2622152, 2623554, 2623555, 2623556, + 2623557, 2623558, 2623559, 2623560, 2623587, 2623588, 2623589, + 2623590, 2623591, 2623592, 2623593, 2623616, 2623617, 2623618, + 2623619, 2623620, 2623621, 2623622, 2623623, 2623624, 2623650, + 2623651, 2623652, 2623653, 2623654, 2623655, 2623656, 2623657, + 2623658, 2623680, 2623681, 2623682, 2623683, 2623684, 2623685, + 2623686, 2623687, 2623713, 2623714, 2623715, 2623716, 2623717, + 2623718, 2623719, 2623720, 2623721, 2623722, 2623744, 2623745, + 2623746, 2623747, 2623748, 2623749, 2623750, 2623777, 2623778, + 2623779, 2623780, 2623781, 2623782, 2623783, 2623784, 2623785, + 2623786, 2623808, 2623809, 2623810, 2623811, 2623812, 2623813, + 2623841, 2623842, 2623843, 2623844, 2623845, 2623846, 2623847, + 2623848, 2623849, 2623850, 2623872, 2623873, 2623874, 2623875, + 2623876, 2623905, 2623906, 2623907, 2623908, 2623909, 2623910, + 2623911, 2623912, 2623913, 2623914, 2623936, 2623937, 2623938, + 2623939, 2623969, 2623970, 2623971, 2623972, 2623973, 2623974, + 2623975, 2623976, 2623977, 2623978, 2624000, 2624001, 2624033, + 2624034, 2624035, 2624036, 2624037, 2624038, 2624039, 2624040, + 2624041, 2624097, 2624098, 2624099, 2624100, 2624101, 2624102, + 2624103, 2624104, 2624164, 2624165, 2624166, 2883587, 2883588, + 2883589, 2883590, 2883591, 2883592, 2883593, 2883619, 2883620, + 2883621, 2883622, 2883623, 2883624, 2883625, 2883651, 2883652, + 2883653, 2883654, 2883655, 2883656, 2883657, 2883682, 2883683, + 2883684, 2883685, 2883686, 2883687, 2883688, 2883712, 2883714, + 2883715, 2883716, 2883717, 2883718, 2883719, 2883720, 2883721, + 2883722, 2883745, 2883746, 2883747, 2883748, 2883749, 2883750, + 2883751, 2883752, 2883776, 2883777, 2883778, 2883779, 2883780, + 2883781, 2883782, 2883783, 2883784, 2883785, 2883786, 2883809, + 2883810, 2883811, 2883812, 2883813, 2883814, 2883815, 2883840, + 2883841, 2883842, 2883843, 2883844, 2883845, 2883846, 2883847, + 2883848, 2883849, 2883850, 2883873, 2883874, 2883875, 2883876, + 2883877, 2883878, 2883904, 2883905, 2883906, 2883907, 2883908, + 2883909, 2883910, 2883911, 2883912, 2883913, 2883914, 2883937, + 2883938, 2883939, 2883940, 2883941, 2883968, 2883969, 2883970, + 2883971, 2883972, 2883973, 2883974, 2883975, 2883976, 2883977, + 2883978, 2884001, 2884002, 2884003, 2884004, 2884032, 2884033, + 2884034, 2884035, 2884036, 2884037, 2884038, 2884039, 2884040, + 2884041, 2884042, 2884065, 2884066, 2884067, 2884096, 2884097, + 2884098, 2884099, 2884100, 2884101, 2884102, 2884103, 2884104, + 2884105, 2884129, 2884161, 2884162, 2884163, 2884164, 2884165, + 2884166, 2884167, 2884168, 2884228, 2884229, 2884230, 2885698, + 2885699, 2885700, 2885701, 2885702, 2885703, 2885704, 2885731, + 2885732, 2885733, 2885734, 2885735, 2885736, 2885737, 2885762, + 2885763, 2885764, 2885765, 2885766, 2885767, 2885768, 2885796, + 2885797, 2885798, 2885799, 2885800, 2885801, 2885802, 2885824, + 2885825, 2885826, 2885827, 2885828, 2885829, 2885830, 2885831, + 2885859, 2885860, 2885861, 2885862, 2885863, 2885864, 2885865, + 2885866, 2885888, 2885889, 2885890, 2885891, 2885892, 2885893, + 2885894, 2885921, 2885922, 2885923, 2885924, 2885925, 2885926, + 2885927, 2885928, 2885929, 2885930, 2885952, 2885953, 2885954, + 2885955, 2885956, 2885957, 2885958, 2885985, 2885986, 2885987, + 2885988, 2885989, 2885990, 2885991, 2885992, 2885993, 2885994, + 2885995, 2886016, 2886017, 2886018, 2886019, 2886020, 2886021, + 2886049, 2886050, 2886051, 2886052, 2886053, 2886054, 2886055, + 2886056, 2886057, 2886058, 2886059, 2886080, 2886081, 2886082, + 2886083, 2886084, 2886113, 2886114, 2886115, 2886116, 2886117, + 2886118, 2886119, 2886120, 2886121, 2886122, 2886123, 2886144, + 2886145, 2886146, 2886177, 2886178, 2886179, 2886180, 2886181, + 2886182, 2886183, 2886184, 2886185, 2886186, 2886208, 2886209, + 2886241, 2886242, 2886243, 2886244, 2886245, 2886246, 2886247, + 2886248, 2886249, 2886250, 2886305, 2886306, 2886307, 2886308, + 2886309, 2886310, 2886311, 2886312, 2886313, 2886371, 2886372, + 2886373, 2886374, 2886375, 2886376, 3145731, 3145732, 3145733, + 3145734, 3145735, 3145736, 3145737, 3145763, 3145764, 3145765, + 3145766, 3145767, 3145768, 3145769, 3145795, 3145796, 3145797, + 3145798, 3145799, 3145800, 3145801, 3145826, 3145827, 3145828, + 3145829, 3145830, 3145831, 3145832, 3145860, 3145861, 3145862, + 3145863, 3145864, 3145865, 3145866, 3145890, 3145891, 3145892, + 3145893, 3145894, 3145895, 3145896, 3145920, 3145923, 3145924, + 3145925, 3145926, 3145927, 3145928, 3145929, 3145930, 3145953, + 3145954, 3145955, 3145956, 3145957, 3145958, 3145959, 3145984, + 3145985, 3145986, 3145987, 3145988, 3145989, 3145990, 3145991, + 3145992, 3145993, 3145994, 3146017, 3146018, 3146019, 3146020, + 3146021, 3146022, 3146048, 3146049, 3146050, 3146051, 3146052, + 3146053, 3146054, 3146055, 3146056, 3146057, 3146058, 3146059, + 3146081, 3146082, 3146083, 3146084, 3146085, 3146086, 3146112, + 3146113, 3146114, 3146115, 3146116, 3146117, 3146118, 3146119, + 3146120, 3146121, 3146122, 3146123, 3146145, 3146146, 3146147, + 3146148, 3146149, 3146176, 3146177, 3146178, 3146179, 3146180, + 3146181, 3146182, 3146183, 3146184, 3146185, 3146186, 3146187, + 3146209, 3146210, 3146211, 3146212, 3146240, 3146241, 3146242, + 3146243, 3146244, 3146245, 3146246, 3146247, 3146248, 3146249, + 3146250, 3146273, 3146274, 3146304, 3146305, 3146306, 3146307, + 3146308, 3146309, 3146310, 3146311, 3146312, 3146313, 3146314, + 3146337, 3146369, 3146370, 3146371, 3146372, 3146373, 3146374, + 3146375, 3146376, 3146377, 3146435, 3146436, 3146437, 3146438, + 3146439, 3146440, 3147842, 3147843, 3147844, 3147845, 3147846, + 3147847, 3147848, 3147875, 3147876, 3147877, 3147878, 3147879, + 3147880, 3147881, 3147904, 3147905, 3147906, 3147907, 3147908, + 3147909, 3147910, 3147911, 3147912, 3147938, 3147939, 3147940, + 3147941, 3147942, 3147943, 3147944, 3147945, 3147946, 3147968, + 3147969, 3147970, 3147971, 3147972, 3147973, 3147974, 3147975, + 3148001, 3148002, 3148003, 3148004, 3148005, 3148006, 3148007, + 3148008, 3148009, 3148010, 3148032, 3148033, 3148034, 3148035, + 3148036, 3148037, 3148038, 3148065, 3148066, 3148067, 3148068, + 3148069, 3148070, 3148071, 3148072, 3148073, 3148074, 3148096, + 3148097, 3148098, 3148099, 3148100, 3148101, 3148129, 3148130, + 3148131, 3148132, 3148133, 3148134, 3148135, 3148136, 3148137, + 3148138, 3148160, 3148161, 3148162, 3148163, 3148164, 3148193, + 3148194, 3148195, 3148196, 3148197, 3148198, 3148199, 3148200, + 3148201, 3148202, 3148224, 3148225, 3148226, 3148227, 3148257, + 3148258, 3148259, 3148260, 3148261, 3148262, 3148263, 3148264, + 3148265, 3148266, 3148288, 3148289, 3148321, 3148322, 3148323, + 3148324, 3148325, 3148326, 3148327, 3148328, 3148329, 3148385, + 3148386, 3148387, 3148388, 3148389, 3148390, 3148391, 3148392, + 3148452, 3148453, 3148454, 3407875, 3407876, 3407877, 3407878, + 3407879, 3407880, 3407907, 3407908, 3407909, 3407910, 3407911, + 3407912, 3407940, 3407941, 3407942, 3407943, 3407944, 3407971, + 3407972, 3407973, 3407974, 3407975, 3408003, 3408004, 3408005, + 3408006, 3408007, 3408008, 3408009, 3408033, 3408034, 3408035, + 3408036, 3408037, 3408038, 3408039, 3408064, 3408065, 3408066, + 3408067, 3408068, 3408069, 3408070, 3408071, 3408072, 3408073, + 3408097, 3408098, 3408099, 3408100, 3408101, 3408102, 3408128, + 3408129, 3408130, 3408131, 3408132, 3408133, 3408134, 3408135, + 3408136, 3408137, 3408161, 3408162, 3408163, 3408164, 3408165, + 3408192, 3408193, 3408194, 3408195, 3408196, 3408197, 3408198, + 3408199, 3408200, 3408201, 3408225, 3408226, 3408227, 3408228, + 3408256, 3408257, 3408258, 3408259, 3408260, 3408261, 3408262, + 3408263, 3408264, 3408265, 3408289, 3408290, 3408291, 3408320, + 3408321, 3408322, 3408323, 3408324, 3408325, 3408326, 3408327, + 3408328, 3408353, 3408385, 3408386, 3408387, 3408388, 3408389, + 3408390, 3408391, 3408452, 3408453, 3409987, 3409988, 3409989, + 3409990, 3409991, 3410020, 3410021, 3410022, 3410023, 3410024, + 3410050, 3410051, 3410052, 3410053, 3410054, 3410055, 3410084, + 3410085, 3410086, 3410087, 3410088, 3410089, 3410113, 3410114, + 3410115, 3410116, 3410117, 3410118, 3410148, 3410149, 3410150, + 3410151, 3410152, 3410153, 3410176, 3410177, 3410178, 3410179, + 3410180, 3410181, 3410209, 3410211, 3410212, 3410213, 3410214, + 3410215, 3410216, 3410217, 3410240, 3410241, 3410242, 3410243, + 3410244, 3410245, 3410273, 3410274, 3410275, 3410276, 3410277, + 3410278, 3410279, 3410280, 3410281, 3410282, 3410304, 3410305, + 3410306, 3410307, 3410308, 3410337, 3410338, 3410339, 3410340, + 3410341, 3410342, 3410343, 3410344, 3410345, 3410346, 3410368, + 3410369, 3410370, 3410401, 3410402, 3410403, 3410404, 3410405, + 3410406, 3410407, 3410408, 3410409, 3410432, 3410433, 3410465, + 3410466, 3410467, 3410468, 3410469, 3410470, 3410471, 3410472, + 3410473, 3410529, 3410530, 3410531, 3410532, 3410533, 3410534, + 3410535, 3410536, 3410595, 3410596, 3410597, 3410598, 3410599, + 3670019, 3670020, 3670021, 3670022, 3670023, 3670024, 3670051, + 3670052, 3670053, 3670054, 3670055, 3670056, 3670084, 3670085, + 3670086, 3670087, 3670088, 3670115, 3670116, 3670117, 3670118, + 3670119, 3670148, 3670149, 3670150, 3670151, 3670152, 3670153, + 3670178, 3670179, 3670180, 3670181, 3670182, 3670183, 3670212, + 3670213, 3670214, 3670215, 3670216, 3670217, 3670241, 3670242, + 3670243, 3670244, 3670245, 3670246, 3670272, 3670273, 3670275, + 3670276, 3670277, 3670278, 3670279, 3670280, 3670281, 3670305, + 3670306, 3670307, 3670308, 3670309, 3670336, 3670337, 3670338, + 3670339, 3670340, 3670341, 3670342, 3670343, 3670344, 3670345, + 3670346, 3670369, 3670370, 3670371, 3670372, 3670373, 3670400, + 3670401, 3670402, 3670403, 3670404, 3670405, 3670406, 3670407, + 3670408, 3670409, 3670410, 3670433, 3670434, 3670435, 3670436, + 3670464, 3670465, 3670466, 3670467, 3670468, 3670469, 3670470, + 3670471, 3670472, 3670473, 3670497, 3670498, 3670528, 3670529, + 3670530, 3670531, 3670532, 3670533, 3670534, 3670535, 3670536, + 3670537, 3670561, 3670593, 3670594, 3670595, 3670596, 3670597, + 3670598, 3670599, 3670600, 3670659, 3670660, 3670661, 3670662, + 3670663, 3672131, 3672132, 3672133, 3672134, 3672135, 3672164, + 3672165, 3672166, 3672167, 3672168, 3672193, 3672194, 3672195, + 3672196, 3672197, 3672198, 3672199, 3672227, 3672228, 3672229, + 3672230, 3672231, 3672232, 3672233, 3672256, 3672257, 3672258, + 3672259, 3672260, 3672261, 3672262, 3672289, 3672290, 3672291, + 3672292, 3672293, 3672294, 3672295, 3672296, 3672297, 3672320, + 3672321, 3672322, 3672323, 3672324, 3672325, 3672353, 3672354, + 3672355, 3672356, 3672357, 3672358, 3672359, 3672360, 3672361, + 3672384, 3672385, 3672386, 3672387, 3672388, 3672417, 3672418, + 3672419, 3672420, 3672421, 3672422, 3672423, 3672424, 3672425, + 3672448, 3672449, 3672450, 3672451, 3672481, 3672482, 3672483, + 3672484, 3672485, 3672486, 3672487, 3672488, 3672489, 3672512, + 3672513, 3672545, 3672546, 3672547, 3672548, 3672549, 3672550, + 3672551, 3672552, 3672609, 3672610, 3672611, 3672612, 3672613, + 3672614, 3672615, 3672676, 3672677, 3932163, 3932164, 3932165, + 3932166, 3932167, 3932195, 3932196, 3932197, 3932198, 3932199, + 3932228, 3932229, 3932230, 3932231, 3932259, 3932260, 3932261, + 3932262, 3932291, 3932292, 3932293, 3932294, 3932295, 3932296, + 3932321, 3932322, 3932323, 3932324, 3932325, 3932326, 3932352, + 3932353, 3932354, 3932355, 3932356, 3932357, 3932358, 3932359, + 3932360, 3932385, 3932386, 3932387, 3932388, 3932389, 3932416, + 3932417, 3932418, 3932419, 3932420, 3932421, 3932422, 3932423, + 3932424, 3932449, 3932450, 3932451, 3932452, 3932480, 3932481, + 3932482, 3932483, 3932484, 3932485, 3932486, 3932487, 3932488, + 3932513, 3932514, 3932515, 3932544, 3932545, 3932546, 3932547, + 3932548, 3932549, 3932550, 3932551, 3932577, 3932609, 3932610, + 3932611, 3932612, 3932613, 3932614, 3934275, 3934276, 3934277, + 3934278, 3934308, 3934309, 3934310, 3934311, 3934338, 3934339, + 3934340, 3934341, 3934342, 3934372, 3934373, 3934374, 3934375, + 3934376, 3934401, 3934402, 3934403, 3934404, 3934405, 3934436, + 3934437, 3934438, 3934439, 3934440, 3934464, 3934465, 3934466, + 3934467, 3934468, 3934497, 3934499, 3934500, 3934501, 3934502, + 3934503, 3934504, 3934528, 3934529, 3934530, 3934531, 3934561, + 3934562, 3934563, 3934564, 3934565, 3934566, 3934567, 3934568, + 3934592, 3934593, 3934594, 3934625, 3934626, 3934627, 3934628, + 3934629, 3934630, 3934631, 3934632, 3934656, 3934657, 3934689, + 3934690, 3934691, 3934692, 3934693, 3934694, 3934695, 3934696, + 3934753, 3934754, 3934755, 3934756, 3934757, 3934758, 3934759, + 3934819, 3934820, 3934821, 3934822, 4194307, 4194308, 4194309, + 4194310, 4194311, 4194339, 4194340, 4194341, 4194342, 4194343, + 4194372, 4194373, 4194374, 4194375, 4194403, 4194404, 4194405, + 4194406, 4194436, 4194437, 4194438, 4194439, 4194440, 4194466, + 4194467, 4194468, 4194469, 4194470, 4194500, 4194501, 4194502, + 4194503, 4194504, 4194529, 4194530, 4194531, 4194532, 4194533, + 4194560, 4194561, 4194563, 4194564, 4194565, 4194566, 4194567, + 4194568, 4194593, 4194594, 4194595, 4194596, 4194624, 4194625, + 4194626, 4194627, 4194628, 4194629, 4194630, 4194631, 4194632, + 4194657, 4194658, 4194659, 4194688, 4194689, 4194690, 4194691, + 4194692, 4194693, 4194694, 4194695, 4194696, 4194721, 4194722, + 4194752, 4194753, 4194754, 4194755, 4194756, 4194757, 4194758, + 4194759, 4194760, 4194785, 4194817, 4194818, 4194819, 4194820, + 4194821, 4194822, 4194823, 4194883, 4194884, 4194885, 4194886, + 4196419, 4196420, 4196421, 4196422, 4196452, 4196453, 4196454, + 4196455, 4196481, 4196482, 4196483, 4196484, 4196485, 4196486, + 4196515, 4196516, 4196517, 4196518, 4196519, 4196520, 4196544, + 4196545, 4196546, 4196547, 4196548, 4196549, 4196577, 4196578, + 4196579, 4196580, 4196581, 4196582, 4196583, 4196584, 4196608, + 4196609, 4196610, 4196611, 4196612, 4196641, 4196642, 4196643, + 4196644, 4196645, 4196646, 4196647, 4196648, 4196672, 4196673, + 4196674, 4196675, 4196705, 4196706, 4196707, 4196708, 4196709, + 4196710, 4196711, 4196712, 4196736, 4196737, 4196769, 4196770, + 4196771, 4196772, 4196773, 4196774, 4196775, 4196833, 4196834, + 4196835, 4196836, 4196837, 4196838, 4456451, 4456452, 4456453, + 4456454, 4456455, 4456483, 4456484, 4456485, 4456486, 4456487, + 4456516, 4456517, 4456518, 4456519, 4456547, 4456548, 4456549, + 4456550, 4456579, 4456580, 4456581, 4456582, 4456583, 4456584, + 4456609, 4456610, 4456611, 4456612, 4456613, 4456614, 4456640, + 4456641, 4456642, 4456643, 4456644, 4456645, 4456646, 4456647, + 4456648, 4456673, 4456674, 4456675, 4456676, 4456677, 4456704, + 4456705, 4456706, 4456707, 4456708, 4456709, 4456710, 4456711, + 4456712, 4456737, 4456738, 4456739, 4456740, 4456768, 4456769, + 4456770, 4456771, 4456772, 4456773, 4456774, 4456775, 4456776, + 4456801, 4456802, 4456803, 4456832, 4456833, 4456834, 4456835, + 4456836, 4456837, 4456838, 4456839, 4456865, 4456897, 4456898, + 4456899, 4456900, 4456901, 4456902, 4458563, 4458564, 4458565, + 4458566, 4458596, 4458597, 4458598, 4458599, 4458626, 4458627, + 4458628, 4458629, 4458630, 4458660, 4458661, 4458662, 4458663, + 4458664, 4458689, 4458690, 4458691, 4458692, 4458693, 4458724, + 4458725, 4458726, 4458727, 4458728, 4458752, 4458753, 4458754, + 4458755, 4458756, 4458785, 4458787, 4458788, 4458789, 4458790, + 4458791, 4458792, 4458816, 4458817, 4458818, 4458819, 4458849, + 4458850, 4458851, 4458852, 4458853, 4458854, 4458855, 4458856, + 4458880, 4458881, 4458882, 4458913, 4458914, 4458915, 4458916, + 4458917, 4458918, 4458919, 4458920, 4458944, 4458945, 4458977, + 4458978, 4458979, 4458980, 4458981, 4458982, 4458983, 4458984, + 4459041, 4459042, 4459043, 4459044, 4459045, 4459046, 4459047, + 4459107, 4459108, 4459109, 4459110, 4718595, 4718596, 4718597, + 4718598, 4718599, 4718627, 4718628, 4718629, 4718630, 4718631, + 4718660, 4718661, 4718662, 4718663, 4718691, 4718692, 4718693, + 4718694, 4718724, 4718725, 4718726, 4718727, 4718728, 4718754, + 4718755, 4718756, 4718757, 4718758, 4718788, 4718789, 4718790, + 4718791, 4718792, 4718817, 4718818, 4718819, 4718820, 4718821, + 4718848, 4718849, 4718851, 4718852, 4718853, 4718854, 4718855, + 4718856, 4718881, 4718882, 4718883, 4718884, 4718912, 4718913, + 4718914, 4718915, 4718916, 4718917, 4718918, 4718919, 4718920, + 4718945, 4718946, 4718947, 4718976, 4718977, 4718978, 4718979, + 4718980, 4718981, 4718982, 4718983, 4718984, 4719009, 4719010, + 4719040, 4719041, 4719042, 4719043, 4719044, 4719045, 4719046, + 4719047, 4719048, 4719073, 4719105, 4719106, 4719107, 4719108, + 4719109, 4719110, 4719111, 4719171, 4719172, 4719173, 4719174, + 4720707, 4720708, 4720709, 4720710, 4720740, 4720741, 4720742, + 4720743, 4720769, 4720770, 4720771, 4720772, 4720773, 4720774, + 4720803, 4720804, 4720805, 4720806, 4720807, 4720808, 4720832, + 4720833, 4720834, 4720835, 4720836, 4720837, 4720865, 4720866, + 4720867, 4720868, 4720869, 4720870, 4720871, 4720872, 4720896, + 4720897, 4720898, 4720899, 4720900, 4720929, 4720930, 4720931, + 4720932, 4720933, 4720934, 4720935, 4720936, 4720960, 4720961, + 4720962, 4720963, 4720993, 4720994, 4720995, 4720996, 4720997, + 4720998, 4720999, 4721000, 4721024, 4721025, 4721057, 4721058, + 4721059, 4721060, 4721061, 4721062, 4721063, 4721121, 4721122, + 4721123, 4721124, 4721125, 4721126, 4980739, 4980740, 4980741, + 4980742, 4980771, 4980772, 4980773, 4980774, 4980804, 4980805, + 4980806, 4980835, 4980836, 4980837, 4980867, 4980868, 4980869, + 4980870, 4980871, 4980897, 4980898, 4980899, 4980900, 4980901, + 4980928, 4980929, 4980930, 4980931, 4980932, 4980933, 4980934, + 4980935, 4980961, 4980962, 4980963, 4980964, 4980992, 4980993, + 4980994, 4980995, 4980996, 4980997, 4980998, 4980999, 4981025, + 4981026, 4981027, 4981056, 4981057, 4981058, 4981059, 4981060, + 4981061, 4981062, 4981089, 4981121, 4981122, 4981123, 4981124, + 4981125, 4982851, 4982852, 4982853, 4982884, 4982885, 4982886, + 4982914, 4982915, 4982916, 4982917, 4982948, 4982949, 4982950, + 4982951, 4982977, 4982978, 4982979, 4982980, 4983012, 4983013, + 4983014, 4983015, 4983040, 4983041, 4983042, 4983043, 4983073, + 4983075, 4983076, 4983077, 4983078, 4983079, 4983104, 4983105, + 4983106, 4983137, 4983138, 4983139, 4983140, 4983141, 4983142, + 4983143, 4983168, 4983169, 4983201, 4983202, 4983203, 4983204, + 4983205, 4983206, 4983207, 4983265, 4983266, 4983267, 4983268, + 4983269, 4983270, 4983331, 4983332, 4983333, 5242883, 5242884, + 5242885, 5242886, 5242915, 5242916, 5242917, 5242918, 5242948, + 5242949, 5242950, 5242979, 5242980, 5242981, 5243012, 5243013, + 5243014, 5243015, 5243042, 5243043, 5243044, 5243045, 5243076, + 5243077, 5243078, 5243079, 5243105, 5243106, 5243107, 5243108, + 5243136, 5243137, 5243139, 5243140, 5243141, 5243142, 5243143, + 5243169, 5243170, 5243171, 5243200, 5243201, 5243202, 5243203, + 5243204, 5243205, 5243206, 5243207, 5243233, 5243234, 5243264, + 5243265, 5243266, 5243267, 5243268, 5243269, 5243270, 5243271, + 5243297, 5243329, 5243330, 5243331, 5243332, 5243333, 5243334, + 5243395, 5243396, 5243397, 5244995, 5244996, 5244997, 5245028, + 5245029, 5245030, 5245057, 5245058, 5245059, 5245060, 5245061, + 5245091, 5245092, 5245093, 5245094, 5245095, 5245120, 5245121, + 5245122, 5245123, 5245124, 5245153, 5245154, 5245155, 5245156, + 5245157, 5245158, 5245159, 5245184, 5245185, 5245186, 5245187, + 5245217, 5245218, 5245219, 5245220, 5245221, 5245222, 5245223, + 5245248, 5245249, 5245281, 5245282, 5245283, 5245284, 5245285, + 5245286, 5245345, 5245346, 5245347, 5245348, 5245349, 5505027, + 5505028, 5505029, 5505030, 5505059, 5505060, 5505061, 5505062, + 5505092, 5505093, 5505094, 5505123, 5505124, 5505125, 5505155, + 5505156, 5505157, 5505158, 5505159, 5505185, 5505186, 5505187, + 5505188, 5505189, 5505216, 5505217, 5505218, 5505219, 5505220, + 5505221, 5505222, 5505223, 5505249, 5505250, 5505251, 5505252, + 5505280, 5505281, 5505282, 5505283, 5505284, 5505285, 5505286, + 5505287, 5505313, 5505314, 5505315, 5505344, 5505345, 5505346, + 5505347, 5505348, 5505349, 5505350, 5505377, 5505409, 5505410, + 5505411, 5505412, 5505413, 5507139, 5507140, 5507141, 5507172, + 5507173, 5507174, 5507202, 5507203, 5507204, 5507205, 5507236, + 5507237, 5507238, 5507239, 5507265, 5507266, 5507267, 5507268, + 5507300, 5507301, 5507302, 5507303, 5507328, 5507329, 5507330, + 5507331, 5507361, 5507363, 5507364, 5507365, 5507366, 5507367, + 5507392, 5507393, 5507394, 5507425, 5507426, 5507427, 5507428, + 5507429, 5507430, 5507431, 5507456, 5507457, 5507489, 5507490, + 5507491, 5507492, 5507493, 5507494, 5507495, 5507553, 5507554, + 5507555, 5507556, 5507557, 5507558, 5507619, 5507620, 5507621, + 5767171, 5767172, 5767173, 5767174, 5767203, 5767204, 5767205, + 5767206, 5767236, 5767237, 5767238, 5767267, 5767268, 5767269, + 5767300, 5767301, 5767302, 5767303, 5767330, 5767331, 5767332, + 5767333, 5767364, 5767365, 5767366, 5767367, 5767393, 5767394, + 5767395, 5767396, 5767424, 5767425, 5767427, 5767428, 5767429, + 5767430, 5767431, 5767457, 5767458, 5767459, 5767488, 5767489, + 5767490, 5767491, 5767492, 5767493, 5767494, 5767495, 5767521, + 5767522, 5767552, 5767553, 5767554, 5767555, 5767556, 5767557, + 5767558, 5767559, 5767585, 5767617, 5767618, 5767619, 5767620, + 5767621, 5767622, 5767683, 5767684, 5767685, 5769283, 5769284, + 5769285, 5769316, 5769317, 5769318, 5769345, 5769346, 5769347, + 5769348, 5769349, 5769379, 5769380, 5769381, 5769382, 5769383, + 5769408, 5769409, 5769410, 5769411, 5769412, 5769441, 5769442, + 5769443, 5769444, 5769445, 5769446, 5769447, 5769472, 5769473, + 5769474, 5769475, 5769505, 5769506, 5769507, 5769508, 5769509, + 5769510, 5769511, 5769536, 5769537, 5769569, 5769570, 5769571, + 5769572, 5769573, 5769574, 5769633, 5769634, 5769635, 5769636, + 5769637 + + + 1, 1, 1, 2, 2, 2, 42, 201, 201, 201, 202, 202, + 202, 342, 411, 1, 1, 2, 2, 2, 2, 11, 201, 201, + 202, 202, 202, 202, 540, 440, 1, 1, 1, 2, 2, 2, + 2, 72, 201, 201, 201, 202, 202, 202, 202, 272, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 52, 201, 201, 202, + 202, 202, 202, 252, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 52, 201, 202, 202, 202, 202, 252, 2, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 52, 202, 202, 202, 202, + 252, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 52, + 202, 202, 202, 252, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 242, 212, 2, 2, 2, 2, 212, + 142, 172, 172, 172, 340, 401, 401, 402, 402, 402, 402, 40, + 201, 201, 202, 202, 202, 202, 401, 401, 401, 402, 402, 402, + 42, 201, 201, 201, 202, 202, 202, 342, 240, 401, 401, 401, + 402, 402, 402, 12, 140, 201, 201, 201, 202, 202, 202, 412, + 401, 401, 401, 402, 402, 402, 402, 401, 211, 401, 201, 201, + 201, 202, 202, 202, 202, 401, 401, 402, 402, 402, 402, 572, + 401, 401, 401, 401, 201, 201, 202, 202, 202, 202, 372, 402, + 402, 402, 402, 402, 572, 401, 401, 401, 401, 401, 202, 202, + 202, 202, 202, 372, 402, 402, 402, 402, 572, 402, 402, 402, + 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 12, 402, + 402, 402, 402, 402, 402, 402, 202, 202, 412, 402, 542, 402, + 402, 402, 402, 402, 402, 402, 402, 202, 442, 542, 402, 402, + 402, 402, 402, 402, 402, 442, 472, 452, 452, 452, 452, 472, + 401, 401, 401, 402, 402, 402, 42, 201, 201, 201, 202, 202, + 202, 342, 341, 1, 1, 2, 2, 2, 2, 41, 201, 201, + 202, 202, 202, 202, 1, 1, 1, 2, 2, 2, 42, 201, + 201, 201, 202, 202, 202, 342, 541, 441, 1, 1, 1, 2, + 2, 2, 112, 201, 201, 201, 202, 202, 202, 312, 201, 1, + 511, 1, 1, 1, 1, 2, 2, 2, 2, 201, 201, 202, + 202, 202, 202, 201, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 72, 201, 202, 202, 202, 202, 272, 202, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 72, 202, 202, 202, + 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 72, 202, 202, 202, 272, 202, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 112, 202, 312, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, 2, + 2, 2, 2, 142, 172, 152, 152, 152, 152, 172, 311, 401, + 401, 402, 402, 402, 402, 111, 201, 201, 202, 202, 202, 202, + 241, 401, 401, 401, 402, 402, 402, 402, 572, 141, 201, 201, + 201, 202, 202, 202, 202, 372, 401, 401, 401, 402, 402, 402, + 402, 552, 401, 401, 401, 201, 201, 202, 202, 202, 202, 352, + 401, 401, 402, 402, 402, 402, 552, 401, 401, 401, 401, 201, + 202, 202, 202, 202, 352, 402, 402, 402, 402, 402, 552, 401, + 401, 401, 401, 402, 202, 202, 202, 202, 352, 402, 402, 402, + 402, 552, 402, 402, 402, 402, 402, 402, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 402, 202, + 202, 372, 402, 542, 402, 402, 402, 402, 402, 402, 402, 402, + 442, 542, 512, 402, 402, 402, 402, 512, 442, 472, 472, 472, + 1, 1, 2, 2, 2, 2, 42, 201, 201, 202, 202, 202, + 202, 342, 411, 1, 1, 2, 2, 2, 2, 11, 201, 201, + 202, 202, 202, 202, 541, 441, 1, 1, 1, 2, 2, 2, + 2, 72, 201, 201, 201, 202, 202, 202, 202, 272, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 52, 201, 201, 202, + 202, 202, 202, 252, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 52, 202, 202, 202, 202, 202, 252, 2, 2, 1, + 1, 2, 2, 2, 2, 2, 2, 52, 202, 202, 202, 202, + 252, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 52, + 202, 202, 202, 252, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 242, 212, 2, 2, 2, 2, 212, + 142, 172, 172, 172, 341, 401, 401, 402, 402, 402, 402, 41, + 201, 201, 202, 202, 202, 202, 401, 401, 402, 402, 402, 402, + 42, 201, 201, 202, 202, 202, 202, 342, 241, 401, 401, 401, + 402, 402, 402, 12, 141, 201, 201, 201, 202, 202, 202, 412, + 401, 401, 401, 402, 402, 402, 402, 401, 211, 401, 201, 201, + 201, 202, 202, 202, 202, 401, 402, 402, 402, 402, 402, 572, + 401, 401, 401, 401, 201, 202, 202, 202, 202, 202, 372, 402, + 402, 402, 402, 402, 572, 402, 401, 401, 401, 402, 202, 202, + 202, 202, 202, 372, 402, 402, 402, 402, 572, 402, 402, 402, + 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 12, 402, + 402, 402, 402, 402, 402, 402, 202, 202, 412, 402, 542, 402, + 402, 402, 402, 402, 402, 402, 402, 202, 442, 542, 402, 402, + 402, 402, 402, 402, 402, 442, 472, 452, 452, 452, 452, 472, + 401, 401, 402, 402, 402, 402, 42, 201, 201, 202, 202, 202, + 202, 342, 341, 1, 1, 2, 2, 2, 2, 41, 201, 201, + 202, 202, 202, 202, 1, 1, 2, 2, 2, 2, 42, 201, + 201, 202, 202, 202, 202, 342, 541, 441, 1, 1, 2, 2, + 2, 2, 112, 201, 201, 202, 202, 202, 202, 312, 201, 1, + 511, 1, 1, 1, 2, 2, 2, 2, 2, 201, 202, 202, + 202, 202, 202, 201, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 72, 202, 202, 202, 202, 202, 272, 202, 2, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 72, 202, 202, 202, + 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 72, 202, 202, 202, 272, 202, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 112, 202, 312, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, 2, + 2, 2, 2, 142, 172, 152, 152, 152, 152, 172, 311, 401, + 401, 402, 402, 402, 402, 111, 201, 201, 202, 202, 202, 202, + 241, 401, 401, 401, 402, 402, 402, 402, 572, 141, 201, 201, + 201, 202, 202, 202, 202, 372, 401, 401, 401, 402, 402, 402, + 402, 552, 401, 401, 401, 201, 201, 202, 202, 202, 202, 352, + 401, 402, 402, 402, 402, 402, 552, 401, 401, 401, 401, 202, + 202, 202, 202, 202, 352, 402, 402, 402, 402, 402, 552, 402, + 402, 402, 402, 402, 202, 202, 202, 202, 352, 402, 402, 402, + 402, 552, 402, 402, 402, 402, 402, 402, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 402, 202, + 202, 372, 402, 542, 402, 402, 402, 402, 402, 402, 402, 402, + 442, 542, 512, 402, 402, 402, 402, 512, 442, 472, 472, 472, + 341, 1, 2, 2, 2, 42, 41, 201, 202, 202, 202, 342, + 1, 2, 2, 2, 2, 201, 202, 202, 202, 202, 441, 1, + 2, 2, 2, 2, 72, 541, 201, 202, 202, 202, 202, 272, + 1, 511, 511, 1, 1, 2, 2, 2, 2, 52, 201, 202, + 202, 202, 202, 252, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 52, 202, 202, 202, 202, 252, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 52, 202, 202, 202, 252, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 2, 2, + 2, 2, 2, 2, 2, 2, 142, 242, 242, 212, 2, 2, + 2, 212, 142, 172, 172, 401, 401, 402, 402, 402, 201, 201, + 202, 202, 202, 311, 401, 402, 402, 402, 42, 111, 201, 202, + 202, 202, 342, 311, 401, 402, 402, 402, 12, 111, 201, 202, + 202, 202, 412, 401, 401, 402, 402, 402, 402, 241, 141, 201, + 201, 202, 202, 202, 202, 401, 402, 402, 402, 402, 572, 401, + 401, 401, 401, 201, 202, 202, 202, 202, 372, 402, 402, 402, + 402, 572, 402, 402, 402, 402, 402, 202, 202, 202, 202, 372, + 402, 402, 12, 402, 402, 402, 402, 402, 402, 202, 202, 412, + 402, 542, 402, 402, 402, 402, 402, 402, 402, 202, 442, 542, + 402, 402, 402, 402, 402, 402, 442, 472, 452, 452, 452, 472, + 341, 401, 402, 402, 402, 42, 41, 201, 202, 202, 202, 342, + 1, 2, 2, 2, 2, 201, 202, 202, 202, 202, 411, 1, + 2, 2, 2, 42, 11, 201, 202, 202, 202, 342, 411, 1, + 2, 2, 2, 112, 11, 201, 202, 202, 202, 312, 201, 541, + 441, 1, 1, 2, 2, 2, 2, 201, 202, 202, 202, 202, + 202, 1, 1, 1, 1, 2, 2, 2, 2, 2, 72, 202, + 202, 202, 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 72, 202, 202, 202, 272, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 112, 202, 312, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, 2, 2, + 2, 142, 172, 152, 152, 152, 172, 401, 402, 402, 402, 402, + 201, 202, 202, 202, 202, 241, 401, 402, 402, 402, 402, 572, + 141, 201, 202, 202, 202, 202, 372, 401, 401, 402, 402, 402, + 402, 552, 211, 211, 401, 201, 202, 202, 202, 202, 352, 402, + 402, 402, 402, 402, 552, 401, 401, 401, 402, 202, 202, 202, + 202, 352, 402, 402, 402, 402, 552, 402, 402, 402, 402, 402, + 202, 202, 202, 352, 402, 402, 402, 572, 402, 402, 402, 402, + 402, 402, 202, 202, 372, 402, 542, 402, 402, 402, 402, 402, + 402, 402, 442, 542, 512, 402, 402, 402, 512, 442, 472, 472, + 341, 1, 2, 2, 42, 41, 201, 202, 202, 342, 1, 2, + 2, 2, 201, 202, 202, 202, 441, 1, 2, 2, 2, 72, + 541, 201, 202, 202, 202, 272, 1, 511, 511, 1, 1, 2, + 2, 2, 72, 201, 202, 202, 202, 272, 2, 1, 1, 1, + 2, 2, 2, 2, 72, 202, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 2, 72, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 142, 242, 242, 212, 212, 212, 212, 142, + 401, 402, 402, 402, 201, 202, 202, 202, 311, 401, 402, 402, + 42, 111, 201, 202, 202, 342, 311, 401, 402, 402, 12, 111, + 201, 202, 202, 412, 401, 401, 402, 402, 12, 241, 141, 201, + 201, 202, 202, 412, 402, 402, 402, 12, 401, 401, 401, 401, + 202, 202, 202, 412, 402, 402, 12, 402, 402, 402, 402, 402, + 202, 202, 412, 402, 542, 402, 402, 402, 402, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 442, 472, 472, 472, 472, + 341, 401, 402, 402, 42, 41, 201, 202, 202, 342, 1, 2, + 2, 2, 201, 202, 202, 202, 411, 1, 2, 2, 42, 11, + 201, 202, 202, 342, 411, 1, 2, 2, 112, 11, 201, 202, + 202, 312, 201, 541, 441, 1, 1, 2, 2, 112, 201, 202, + 202, 312, 202, 1, 1, 1, 1, 2, 2, 2, 112, 202, + 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, 112, 202, + 312, 202, 2, 2, 2, 2, 2, 2, 2, 142, 242, 242, + 2, 2, 2, 2, 2, 142, 172, 172, 172, 172, 401, 402, + 402, 402, 201, 202, 202, 202, 241, 401, 402, 402, 402, 572, + 141, 201, 202, 202, 202, 372, 401, 401, 402, 402, 402, 572, + 211, 211, 401, 201, 202, 202, 202, 372, 402, 402, 402, 402, + 572, 401, 401, 401, 402, 202, 202, 202, 372, 402, 402, 402, + 572, 402, 402, 402, 402, 402, 202, 202, 372, 402, 542, 402, + 402, 402, 402, 402, 402, 442, 542, 512, 512, 512, 512, 442, + 341, 1, 2, 2, 42, 41, 201, 202, 202, 342, 1, 2, + 2, 2, 201, 202, 202, 202, 441, 1, 2, 2, 2, 72, + 541, 201, 202, 202, 202, 272, 1, 511, 511, 1, 1, 2, + 2, 2, 72, 201, 202, 202, 202, 272, 2, 2, 1, 2, + 2, 2, 2, 2, 72, 202, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 2, 72, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 142, 242, 242, 212, 212, 212, 212, 142, + 401, 402, 402, 402, 201, 202, 202, 202, 311, 402, 402, 402, + 42, 111, 202, 202, 202, 342, 311, 401, 402, 402, 12, 111, + 201, 202, 202, 412, 401, 402, 402, 402, 12, 241, 141, 201, + 202, 202, 202, 412, 402, 402, 402, 12, 401, 401, 401, 401, + 202, 202, 202, 412, 402, 402, 12, 402, 402, 402, 402, 402, + 202, 202, 412, 402, 542, 402, 402, 402, 402, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 442, 472, 472, 472, 472, + 341, 402, 402, 402, 42, 41, 202, 202, 202, 342, 1, 2, + 2, 2, 201, 202, 202, 202, 411, 2, 2, 2, 42, 11, + 202, 202, 202, 342, 411, 2, 2, 2, 112, 11, 202, 202, + 202, 312, 201, 541, 441, 1, 2, 2, 2, 112, 202, 202, + 202, 312, 202, 2, 1, 1, 2, 2, 2, 2, 112, 202, + 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, 112, 202, + 312, 202, 2, 2, 2, 2, 2, 2, 2, 142, 242, 242, + 2, 2, 2, 2, 2, 142, 172, 172, 172, 172, 401, 402, + 402, 402, 201, 202, 202, 202, 241, 401, 402, 402, 402, 572, + 141, 201, 202, 202, 202, 372, 401, 402, 402, 402, 402, 572, + 211, 211, 401, 202, 202, 202, 202, 372, 402, 402, 402, 402, + 572, 402, 402, 402, 402, 202, 202, 202, 372, 402, 402, 402, + 572, 402, 402, 402, 402, 402, 202, 202, 372, 402, 542, 402, + 402, 402, 402, 402, 402, 442, 542, 512, 512, 512, 512, 442, + 341, 2, 2, 42, 41, 202, 202, 342, 1, 2, 2, 201, + 202, 202, 441, 1, 2, 2, 72, 541, 201, 202, 202, 272, + 1, 511, 511, 1, 2, 2, 2, 72, 202, 202, 202, 272, + 2, 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 2, + 2, 2, 2, 2, 2, 142, 242, 242, 212, 212, 212, 142, + 401, 402, 402, 201, 202, 202, 311, 402, 402, 42, 111, 202, + 202, 342, 311, 402, 402, 12, 111, 202, 202, 412, 401, 402, + 402, 12, 241, 141, 201, 202, 202, 412, 402, 402, 12, 402, + 401, 401, 402, 202, 202, 412, 402, 542, 402, 402, 402, 402, + 402, 202, 442, 542, 402, 402, 402, 402, 442, 472, 472, 472, + 341, 402, 402, 42, 41, 202, 202, 342, 1, 2, 2, 201, + 202, 202, 411, 2, 2, 42, 11, 202, 202, 342, 411, 2, + 2, 112, 11, 202, 202, 312, 201, 541, 441, 1, 2, 2, + 112, 202, 202, 312, 202, 2, 1, 1, 2, 2, 2, 112, + 202, 312, 202, 2, 2, 2, 2, 2, 2, 142, 242, 242, + 2, 2, 2, 2, 142, 172, 172, 172, 401, 402, 402, 201, + 202, 202, 241, 401, 402, 402, 572, 141, 201, 202, 202, 372, + 401, 402, 402, 402, 572, 211, 211, 401, 202, 202, 202, 372, + 402, 402, 402, 572, 402, 402, 402, 402, 202, 202, 372, 402, + 542, 402, 402, 402, 402, 402, 442, 542, 512, 512, 512, 442, + 341, 2, 2, 42, 41, 202, 202, 342, 2, 2, 2, 202, + 202, 202, 441, 2, 2, 2, 72, 541, 202, 202, 202, 272, + 1, 511, 511, 1, 2, 2, 2, 72, 202, 202, 202, 272, + 2, 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 2, + 2, 2, 2, 2, 2, 142, 242, 242, 212, 212, 212, 142, + 401, 402, 402, 201, 202, 202, 311, 402, 402, 42, 111, 202, + 202, 342, 311, 402, 402, 12, 111, 202, 202, 412, 401, 402, + 402, 12, 241, 141, 201, 202, 202, 412, 402, 402, 12, 402, + 402, 402, 402, 202, 202, 412, 402, 542, 402, 402, 402, 402, + 402, 202, 442, 542, 402, 402, 402, 402, 442, 472, 472, 472, + 342, 402, 402, 42, 42, 202, 202, 342, 2, 2, 2, 202, + 202, 202, 411, 2, 2, 42, 11, 202, 202, 342, 411, 2, + 2, 112, 11, 202, 202, 312, 202, 542, 442, 2, 2, 2, + 112, 202, 202, 312, 202, 2, 2, 2, 2, 2, 2, 112, + 202, 312, 202, 2, 2, 2, 2, 2, 2, 142, 242, 242, + 2, 2, 2, 2, 142, 172, 172, 172, 402, 402, 402, 202, + 202, 202, 242, 402, 402, 402, 572, 142, 202, 202, 202, 372, + 402, 402, 402, 402, 572, 211, 211, 402, 202, 202, 202, 372, + 402, 402, 402, 572, 402, 402, 402, 402, 202, 202, 372, 402, + 542, 402, 402, 402, 402, 402, 442, 542, 512, 512, 512, 442 + + + 0, 300, 600, 900, 1200, 1428, 1656, 1824, 1992, 2160, + 2328, 2448, 2568, 2688 + + + 1037.83*mm, 1060.98*mm, 1084.12*mm, 1108.3*mm, 1132.48*mm, 1157.73*mm, + 1182.99*mm, 1209.37*mm, 1235.75*mm, 1263.31*mm, 1290.87*mm, 1319.66*mm, + 1348.45*mm, 1378.52*mm, 1408.59*mm, 1440*mm, 1471.42*mm, 1504.23*mm, + 1537.05*mm, 1571.33*mm, 1605.6*mm, 1641.41*mm, 1677.22*mm, 1714.62*mm, + 1752.03*mm, 1791.1*mm, 1830.17*mm, 1870.99*mm, 1911.8*mm, 1954.44*mm, + 1997.08*mm, 2041.61*mm, 2086.15*mm, 2132.67*mm, 2179.2*mm, 2227.8*mm, + 2276.4*mm, 2327.16*mm, 2377.93*mm, 2430.96*mm, 2483.99*mm, 2539.39*mm + + + 1060.98*mm, 1084.12*mm, 1108.3*mm, 1132.48*mm, 1157.73*mm, 1182.99*mm, + 1209.37*mm, 1235.75*mm, 1263.31*mm, 1290.87*mm, 1319.66*mm, 1348.45*mm, + 1378.52*mm, 1408.59*mm, 1440*mm, 1471.42*mm, 1504.23*mm, 1537.05*mm, + 1571.33*mm, 1605.6*mm, 1641.41*mm, 1677.22*mm, 1714.62*mm, 1752.03*mm, + 1791.1*mm, 1830.17*mm, 1870.99*mm, 1911.8*mm, 1954.44*mm, 1997.08*mm, + 2041.61*mm, 2086.15*mm, 2132.67*mm, 2179.2*mm, 2227.8*mm, 2276.4*mm, + 2327.16*mm, 2377.93*mm, 2430.96*mm, 2483.99*mm, 2539.39*mm, 2594.79*mm + + + 9019026, 9019028, 9019030, 9019028, 9019026, 9019028, 9019030, + 9019028, 9019026, 9019028, 9019030, 9019028, 9019026, 9019028, + 9019030, 9019028, 9019026, 9019028, 9019030, 9019028, 9019026, + 9019028, 9019030, 9019028, 9019026, 9019028, 9019030, 9019028, + 9019026, 9019028, 9019030, 9019028, 9019026, 9019028, 9019030, + 9019028, 9019026, 9019028, 9019030, 9019028, 9019026, 9019028, + 9019030, 9019028, 9019026, 9019028, 9019030, 9019028, 9019026, + 10019028, 10019032, 10019028, 10019032, 10019028, 10019032, 10019028, + 10019032, 10019028, 10019032, 10019028, 10019032, 10019028, 10019032, + 10019028, 10019032, 10019028, 10019032, 10019028, 10019032, 10019028, + 10019032, 10019028, 10019032, 10019028, 11019030, 11019033, 11019030, + 11019033, 11019030, 11019033, 11019030, 11019033, 11019030, 11019033, + 11019030, 11019033, 11019030, 11019033, 11019030, 11019033, 11019030, + 11019033, 11019030, 11019033, 11019030, 11019033, 11019030, 11019033, + 11019030, 12019032, 12019034, 12019032, 12019034, 12019032, 12019034, + 12019032, 12019034, 12019032, 12019034, 12019032, 12019034, 12019032, + 12019034, 12019032, 12019034, 12019032, 12019034, 12019032, 12019034, + 12019032, 12019034, 12019032, 12019034, 12019032, 13014034, 13014037, + 13014034, 13014037, 13014034, 13014037, 13014034, 13014037, 13014034, + 13014037, 13014034, 13014037, 13014034, 13014037, 13014034, 13014037, + 13014034, 13014037, 13014034, 13014037, 13014034, 13014037, 13014034, + 13014037, 13014034, 14014036, 14014039, 14014036, 14014039, 14014036, + 14014039, 14014036, 14014039, 14014036, 14014039, 14014036, 14014039, + 14014036, 14014039, 14014036, 14014039, 14014036, 14014039, 14014036, + 14014039, 14014036, 14014039, 14014036, 14014039, 14014036, 15008038, + 15008041, 15007041, 15007038, 15007041, 15008041, 15008038, 15008041, + 15007041, 15007038, 15007041, 15008041, 15008038, 15008041, 15007041, + 15007038, 15007041, 15008041, 15008038, 15008041, 15007041, 15007038, + 15007041, 15008041, 15008038, 15008041, 15007041, 15007038, 15007041, + 15008041, 15008038, 15008041, 15007041, 15007038, 15007041, 15008041, + 15008038, 16008040, 16008042, 16007042, 16007040, 16007042, 16008042, + 16008040, 16008042, 16007042, 16007040, 16007042, 16008042, 16008040, + 16008042, 16007042, 16007040, 16007042, 16008042, 16008040, 16008042, + 16007042, 16007040, 16007042, 16008042, 16008040, 16008042, 16007042, + 16007040, 16007042, 16008042, 16008040, 16008042, 16007042, 16007040, + 16007042, 16008042, 16008040, 17008040, 17008042, 17007042, 17007040, + 17007042, 17008042, 17008040, 17008042, 17007042, 17007040, 17007042, + 17008042, 17008040, 17008042, 17007042, 17007040, 17007042, 17008042, + 17008040, 17008042, 17007042, 17007040, 17007042, 17008042, 17008040, + 17008042, 17007042, 17007040, 17007042, 17008042, 17008040, 17008042, + 17007042, 17007040, 17007042, 17008042, 17008040, 18008040, 18008042, + 18007042, 18007040, 18007042, 18008042, 18008040, 18008042, 18007042, + 18007040, 18007042, 18008042, 18008040, 18008042, 18007042, 18007040, + 18007042, 18008042, 18008040, 18008042, 18007042, 18007040, 18007042, + 18008042, 18008040, 18008042, 18007042, 18007040, 18007042, 18008042, + 18008040, 18008042, 18007042, 18007040, 18007042, 18008042, 18008040, + 19001040, 19001042, 19002042, 19001042, 19001040, 19001042, 19002042, + 19001042, 19001040, 19001042, 19002042, 19001042, 19001040, 19001042, + 19002042, 19001042, 19001040, 19001042, 19002042, 19001042, 19001040, + 19001042, 19002042, 19001042, 19001040, 19001042, 19002042, 19001042, + 19001040, 19001042, 19002042, 19001042, 19001040, 19001042, 19002042, + 19001042, 19001040, 19001042, 19002042, 19001042, 19001040, 19001042, + 19002042, 19001042, 19001040, 19001042, 19002042, 19001042, 19001040, + 20001040, 20001042, 20002042, 20001042, 20001040, 20001042, 20002042, + 20001042, 20001040, 20001042, 20002042, 20001042, 20001040, 20001042, + 20002042, 20001042, 20001040, 20001042, 20002042, 20001042, 20001040, + 20001042, 20002042, 20001042, 20001040, 20001042, 20002042, 20001042, + 20001040, 20001042, 20002042, 20001042, 20001040, 20001042, 20002042, + 20001042, 20001040, 20001042, 20002042, 20001042, 20001040, 20001042, + 20002042, 20001042, 20001040, 20001042, 20002042, 20001042, 20001040, + 21001040, 21001042, 21002042, 21001042, 21001040, 21001042, 21002042, + 21001042, 21001040, 21001042, 21002042, 21001042, 21001040, 21001042, + 21002042, 21001042, 21001040, 21001042, 21002042, 21001042, 21001040, + 21001042, 21002042, 21001042, 21001040, 21001042, 21002042, 21001042, + 21001040, 21001042, 21002042, 21001042, 21001040, 21001042, 21002042, + 21001042, 21001040, 21001042, 21002042, 21001042, 21001040, 21001042, + 21002042, 21001042, 21001040, 21001042, 21002042, 21001042, 21001040, + 22001040, 22002040, 22001040, 22002040, 22001040, 22002040, 22001040, + 22002040, 22001040, 22002040, 22001040, 22002040, 22001040, 22002040, + 22001040, 22002040, 22001040, 22002040, 22001040, 22002040, 22001040, + 22002040, 22001040, 22002040, 22001040 + + + 1001, 2002, 3022, 23023, 24025, 26026, 27046, 47047, 48049, + 50050, 51070, 71071, 72073, 74074, 75094, 95095, 96097, 98098, + 99118, 119119, 120121, 122122, 123142, 143143, 144145, 146146, 147166, + 167167, 168169, 170170, 171190, 191191, 192193, 194194, 195214, 215215, + 216217, 218218, 219238, 239239, 240241, 242242, 243262, 263263, 264265, + 266266, 267286, 287287, 288288, 1002, 3022, 23026, 27046, 47050, + 51070, 71074, 75094, 95098, 99118, 119122, 123142, 143146, 147166, + 167170, 171190, 191194, 195214, 215218, 219238, 239242, 243262, 263266, + 267286, 287288, 1002, 3022, 23026, 27046, 47050, 51070, 71074, + 75094, 95098, 99118, 119122, 123142, 143146, 147166, 167170, 171190, + 191194, 195214, 215218, 219238, 239242, 243262, 263266, 267286, 287288, + 1002, 3022, 23026, 27046, 47050, 51070, 71074, 75094, 95098, + 99118, 119122, 123142, 143146, 147166, 167170, 171190, 191194, 195214, + 215218, 219238, 239242, 243262, 263266, 267286, 287288, 1002, 3022, + 23026, 27046, 47050, 51070, 71074, 75094, 95098, 99118, 119122, + 123142, 143146, 147166, 167170, 171190, 191194, 195214, 215218, 219238, + 239242, 243262, 263266, 267286, 287288, 1002, 3022, 23026, 27046, + 47050, 51070, 71074, 75094, 95098, 99118, 119122, 123142, 143146, + 147166, 167170, 171190, 191194, 195214, 215218, 219238, 239242, 243262, + 263266, 267286, 287288, 1002, 3016, 17022, 23026, 27032, 33046, + 47050, 51064, 65070, 71074, 75080, 81094, 95098, 99112, 113118, + 119122, 123128, 129142, 143146, 147160, 161166, 167170, 171176, 177190, + 191194, 195208, 209214, 215218, 219224, 225238, 239242, 243256, 257262, + 263266, 267272, 273286, 287288, 1002, 3016, 17022, 23026, 27032, + 33046, 47050, 51064, 65070, 71074, 75080, 81094, 95098, 99112, + 113118, 119122, 123128, 129142, 143146, 147160, 161166, 167170, 171176, + 177190, 191194, 195208, 209214, 215218, 219224, 225238, 239242, 243256, + 257262, 263266, 267272, 273286, 287288, 1002, 3016, 17022, 23026, + 27032, 33046, 47050, 51064, 65070, 71074, 75080, 81094, 95098, + 99112, 113118, 119122, 123128, 129142, 143146, 147160, 161166, 167170, + 171176, 177190, 191194, 195208, 209214, 215218, 219224, 225238, 239242, + 243256, 257262, 263266, 267272, 273286, 287288, 1002, 3016, 17022, + 23026, 27032, 33046, 47050, 51064, 65070, 71074, 75080, 81094, + 95098, 99112, 113118, 119122, 123128, 129142, 143146, 147160, 161166, + 167170, 171176, 177190, 191194, 195208, 209214, 215218, 219224, 225238, + 239242, 243256, 257262, 263266, 267272, 273286, 287288, 1002, 3008, + 9016, 17022, 23026, 27032, 33040, 41046, 47050, 51056, 57064, + 65070, 71074, 75080, 81088, 89094, 95098, 99104, 105112, 113118, + 119122, 123128, 129136, 137142, 143146, 147152, 153160, 161166, 167170, + 171176, 177184, 185190, 191194, 195200, 201208, 209214, 215218, 219224, + 225232, 233238, 239242, 243248, 249256, 257262, 263266, 267272, 273280, + 281286, 287288, 1002, 3008, 9016, 17022, 23026, 27032, 33040, + 41046, 47050, 51056, 57064, 65070, 71074, 75080, 81088, 89094, + 95098, 99104, 105112, 113118, 119122, 123128, 129136, 137142, 143146, + 147152, 153160, 161166, 167170, 171176, 177184, 185190, 191194, 195200, + 201208, 209214, 215218, 219224, 225232, 233238, 239242, 243248, 249256, + 257262, 263266, 267272, 273280, 281286, 287288, 1002, 3008, 9016, + 17022, 23026, 27032, 33040, 41046, 47050, 51056, 57064, 65070, + 71074, 75080, 81088, 89094, 95098, 99104, 105112, 113118, 119122, + 123128, 129136, 137142, 143146, 147152, 153160, 161166, 167170, 171176, + 177184, 185190, 191194, 195200, 201208, 209214, 215218, 219224, 225232, + 233238, 239242, 243248, 249256, 257262, 263266, 267272, 273280, 281286, + 287288, 1008, 9016, 17032, 33040, 41056, 57064, 65080, 81088, + 89104, 105112, 113128, 129136, 137152, 153160, 161176, 177184, 185200, + 201208, 209224, 225232, 233248, 249256, 257272, 273280, 281288 + + + 0, 49, 74, 99, 124, 149, 174, 211, 248, 285, + 322, 371, 420, 469 + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcalHEmixTest.xml b/Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcalHEmixTest.xml new file mode 100644 index 0000000000000..cb10405bd1571 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcalHEmixTest.xml @@ -0,0 +1,932 @@ + + + + + + + + + + + + + + + + + + + + 0, 0, 0, 0 + + [hgcal:zHGCal0], [hgcal:zHGCal2], [hgcal:zHGCal7], + [hgcal:zHGCal8] + + [hgcal:rMinHGCal2], [hgcal:rMinHGCal4], + [hgcal:rMinHGCal6], [hgcal:rMinHGCal8] + + [hgcal:slope2], [hgcal:slope3], 0, 0 + + [hgcal:zHGCal0], [hgcal:zHGCal5], [hgcal:zHGCal10], + [hgcal:zHGCal11] + + [hgcal:rMaxHGCal0], [hgcal:rMaxHGCal5], [hgcal:rMaxHGCal10], + [hgcal:rMaxHGCal11] + + hgcalwafer:HGCalHEWafer0Fine, hgcalwafer:HGCalHEWafer0Coarse1, + hgcalwafer:HGCalHEWafer0Coarse2 + + hgcalwafer:HGCalHEWafer0Fineb0, hgcalwafer:HGCalHEWafer0Fineb1, + hgcalwafer:HGCalHEWafer0Fineb2, hgcalwafer:HGCalHEWafer0Fineb3, + hgcalwafer:HGCalHEWafer0Fineb4, hgcalwafer:HGCalHEWafer0Fineb5, + hgcalwafer:HGCalHEWafer0Coarse1b0, hgcalwafer:HGCalHEWafer0Coarse1b1, + hgcalwafer:HGCalHEWafer0Coarse1b2, hgcalwafer:HGCalHEWafer0Coarse1b3, + hgcalwafer:HGCalHEWafer0Coarse1b4, hgcalwafer:HGCalHEWafer0Coarse1b5, + hgcalwafer:HGCalHEWafer0Coarse2b0, hgcalwafer:HGCalHEWafer0Coarse2b1, + hgcalwafer:HGCalHEWafer0Coarse2b2, hgcalwafer:HGCalHEWafer0Coarse2b3, + hgcalwafer:HGCalHEWafer0Coarse2b4, hgcalwafer:HGCalHEWafer0Coarse2b5, + hgcalwafer:HGCalHEWafer0Fineg0, hgcalwafer:HGCalHEWafer0Fineg1, + hgcalwafer:HGCalHEWafer0Fineg2, hgcalwafer:HGCalHEWafer0Fineg3, + hgcalwafer:HGCalHEWafer0Fineg4, hgcalwafer:HGCalHEWafer0Fineg5, + hgcalwafer:HGCalHEWafer0Coarse1g0, hgcalwafer:HGCalHEWafer0Coarse1g1, + hgcalwafer:HGCalHEWafer0Coarse1g2, hgcalwafer:HGCalHEWafer0Coarse1g3, + hgcalwafer:HGCalHEWafer0Coarse1g4, hgcalwafer:HGCalHEWafer0Coarse1g5, + hgcalwafer:HGCalHEWafer0Coarse2g0, hgcalwafer:HGCalHEWafer0Coarse2g1, + hgcalwafer:HGCalHEWafer0Coarse2g2, hgcalwafer:HGCalHEWafer0Coarse2g3, + hgcalwafer:HGCalHEWafer0Coarse2g4, hgcalwafer:HGCalHEWafer0Coarse2g5, + hgcalwafer:HGCalHEWafer0Finegm0, hgcalwafer:HGCalHEWafer0Finegm1, + hgcalwafer:HGCalHEWafer0Finegm2, hgcalwafer:HGCalHEWafer0Finegm3, + hgcalwafer:HGCalHEWafer0Finegm4, hgcalwafer:HGCalHEWafer0Finegm5, + hgcalwafer:HGCalHEWafer0Coarse1gm0, hgcalwafer:HGCalHEWafer0Coarse1gm1, + hgcalwafer:HGCalHEWafer0Coarse1gm2, hgcalwafer:HGCalHEWafer0Coarse1gm3, + hgcalwafer:HGCalHEWafer0Coarse1gm4, hgcalwafer:HGCalHEWafer0Coarse1gm5, + hgcalwafer:HGCalHEWafer0Coarse2gm0, hgcalwafer:HGCalHEWafer0Coarse2gm1, + hgcalwafer:HGCalHEWafer0Coarse2gm2, hgcalwafer:HGCalHEWafer0Coarse2gm3, + hgcalwafer:HGCalHEWafer0Coarse2gm4, hgcalwafer:HGCalHEWafer0Coarse2gm5, + hgcalwafer:HGCalHEWafer0Finea0, hgcalwafer:HGCalHEWafer0Finea1, + hgcalwafer:HGCalHEWafer0Finea2, hgcalwafer:HGCalHEWafer0Finea3, + hgcalwafer:HGCalHEWafer0Finea4, hgcalwafer:HGCalHEWafer0Finea5, + hgcalwafer:HGCalHEWafer0Coarse1a0, hgcalwafer:HGCalHEWafer0Coarse1a1, + hgcalwafer:HGCalHEWafer0Coarse1a2, hgcalwafer:HGCalHEWafer0Coarse1a3, + hgcalwafer:HGCalHEWafer0Coarse1a4, hgcalwafer:HGCalHEWafer0Coarse1a5, + hgcalwafer:HGCalHEWafer0Coarse2a0, hgcalwafer:HGCalHEWafer0Coarse2a1, + hgcalwafer:HGCalHEWafer0Coarse2a2, hgcalwafer:HGCalHEWafer0Coarse2a3, + hgcalwafer:HGCalHEWafer0Coarse2a4, hgcalwafer:HGCalHEWafer0Coarse2a5, + hgcalwafer:HGCalHEWafer0Fined0, hgcalwafer:HGCalHEWafer0Fined1, + hgcalwafer:HGCalHEWafer0Fined2, hgcalwafer:HGCalHEWafer0Fined3, + hgcalwafer:HGCalHEWafer0Fined4, hgcalwafer:HGCalHEWafer0Fined5, + hgcalwafer:HGCalHEWafer0Coarse1d0, hgcalwafer:HGCalHEWafer0Coarse1d1, + hgcalwafer:HGCalHEWafer0Coarse1d2, hgcalwafer:HGCalHEWafer0Coarse1d3, + hgcalwafer:HGCalHEWafer0Coarse1d4, hgcalwafer:HGCalHEWafer0Coarse1d5, + hgcalwafer:HGCalHEWafer0Coarse2d0, hgcalwafer:HGCalHEWafer0Coarse2d1, + hgcalwafer:HGCalHEWafer0Coarse2d2, hgcalwafer:HGCalHEWafer0Coarse2d3, + hgcalwafer:HGCalHEWafer0Coarse2d4, hgcalwafer:HGCalHEWafer0Coarse2d5, + hgcalwafer:HGCalHEWafer0Finedm0, hgcalwafer:HGCalHEWafer0Finedm1, + hgcalwafer:HGCalHEWafer0Finedm2, hgcalwafer:HGCalHEWafer0Finedm3, + hgcalwafer:HGCalHEWafer0Finedm4, hgcalwafer:HGCalHEWafer0Finedm5, + hgcalwafer:HGCalHEWafer0Coarse1dm0, hgcalwafer:HGCalHEWafer0Coarse1dm1, + hgcalwafer:HGCalHEWafer0Coarse1dm2, hgcalwafer:HGCalHEWafer0Coarse1dm3, + hgcalwafer:HGCalHEWafer0Coarse1dm4, hgcalwafer:HGCalHEWafer0Coarse1dm5, + hgcalwafer:HGCalHEWafer0Coarse2dm0, hgcalwafer:HGCalHEWafer0Coarse2dm1, + hgcalwafer:HGCalHEWafer0Coarse2dm2, hgcalwafer:HGCalHEWafer0Coarse2dm3, + hgcalwafer:HGCalHEWafer0Coarse2dm4, hgcalwafer:HGCalHEWafer0Coarse2dm5, + hgcalwafer:HGCalHEWafer0Finec0, hgcalwafer:HGCalHEWafer0Finec1, + hgcalwafer:HGCalHEWafer0Finec2, hgcalwafer:HGCalHEWafer0Finec3, + hgcalwafer:HGCalHEWafer0Finec4, hgcalwafer:HGCalHEWafer0Finec5, + hgcalwafer:HGCalHEWafer0Coarse1c0, hgcalwafer:HGCalHEWafer0Coarse1c1, + hgcalwafer:HGCalHEWafer0Coarse1c2, hgcalwafer:HGCalHEWafer0Coarse1c3, + hgcalwafer:HGCalHEWafer0Coarse1c4, hgcalwafer:HGCalHEWafer0Coarse1c5, + hgcalwafer:HGCalHEWafer0Coarse2c0, hgcalwafer:HGCalHEWafer0Coarse2c1, + hgcalwafer:HGCalHEWafer0Coarse1c2, hgcalwafer:HGCalHEWafer0Coarse1c3, + hgcalwafer:HGCalHEWafer0Coarse2c4, hgcalwafer:HGCalHEWafer0Coarse2c5 + + materials:StainlessSteel, materials:StainlessSteel, materials:Air, + materials:Copper, materials:Air, materials:Copper + + HGCalHEAbsorber1, HGCalHEAbsorber2, HGCalHEAirGap1, HGCalHECopperCover, + HGCalHEMix, HGCalHECoolingPlate + + 35.0*mm, 66.0*mm, 3.7*mm, 1.1*mm, 8.6*mm, 6.1*mm + + 1 + + 8.6*mm + + 4 + + 1 + + 1 + + materials:Air, materials:Cables, materials:Air, + materials:H_Scintillator, materials:Epoxy, + hgcalMaterial:HGC_G10-FR4 + + HGCalAirGap1, HGCalCableConnector, HGCalAirGap2, + HGCalHEScintillatorSensitive, HGCalScintillatorEpoxy, + HGCalTileBoard + + 0.87*mm, 1.04*mm, 1.245*mm, [hgcal:ScintillatorThickness], 0.075*mm, + 1.49*mm + + 0, 1, 2, 3, 4, 5 + + 2359299, 2359300, 2359301, 2359302, 2359303, 2359304, 2359305, + 2359331, 2359332, 2359333, 2359334, 2359335, 2359336, 2359337, + 2359363, 2359364, 2359365, 2359366, 2359367, 2359368, 2359369, + 2359394, 2359395, 2359396, 2359397, 2359398, 2359399, 2359400, + 2359424, 2359426, 2359427, 2359428, 2359429, 2359430, 2359431, + 2359432, 2359433, 2359434, 2359457, 2359458, 2359459, 2359460, + 2359461, 2359462, 2359463, 2359464, 2359488, 2359489, 2359490, + 2359491, 2359492, 2359493, 2359494, 2359495, 2359496, 2359497, + 2359498, 2359521, 2359522, 2359523, 2359524, 2359525, 2359526, + 2359527, 2359552, 2359553, 2359554, 2359555, 2359556, 2359557, + 2359558, 2359559, 2359560, 2359561, 2359562, 2359585, 2359586, + 2359587, 2359588, 2359589, 2359590, 2359616, 2359617, 2359618, + 2359619, 2359620, 2359621, 2359622, 2359623, 2359624, 2359625, + 2359626, 2359649, 2359650, 2359651, 2359652, 2359653, 2359680, + 2359681, 2359682, 2359683, 2359684, 2359685, 2359686, 2359687, + 2359688, 2359689, 2359690, 2359713, 2359714, 2359715, 2359716, + 2359744, 2359745, 2359746, 2359747, 2359748, 2359749, 2359750, + 2359751, 2359752, 2359753, 2359754, 2359777, 2359778, 2359779, + 2359808, 2359809, 2359810, 2359811, 2359812, 2359813, 2359814, + 2359815, 2359816, 2359817, 2359841, 2359873, 2359874, 2359875, + 2359876, 2359877, 2359878, 2359879, 2359880, 2359940, 2359941, + 2359942, 2361410, 2361411, 2361412, 2361413, 2361414, 2361415, + 2361416, 2361443, 2361444, 2361445, 2361446, 2361447, 2361448, + 2361449, 2361474, 2361475, 2361476, 2361477, 2361478, 2361479, + 2361480, 2361508, 2361509, 2361510, 2361511, 2361512, 2361513, + 2361514, 2361536, 2361537, 2361538, 2361539, 2361540, 2361541, + 2361542, 2361543, 2361571, 2361572, 2361573, 2361574, 2361575, + 2361576, 2361577, 2361578, 2361600, 2361601, 2361602, 2361603, + 2361604, 2361605, 2361606, 2361633, 2361634, 2361635, 2361636, + 2361637, 2361638, 2361639, 2361640, 2361641, 2361642, 2361664, + 2361665, 2361666, 2361667, 2361668, 2361669, 2361670, 2361697, + 2361698, 2361699, 2361700, 2361701, 2361702, 2361703, 2361704, + 2361705, 2361706, 2361707, 2361728, 2361729, 2361730, 2361731, + 2361732, 2361733, 2361761, 2361762, 2361763, 2361764, 2361765, + 2361766, 2361767, 2361768, 2361769, 2361770, 2361771, 2361792, + 2361793, 2361794, 2361795, 2361796, 2361825, 2361826, 2361827, + 2361828, 2361829, 2361830, 2361831, 2361832, 2361833, 2361834, + 2361835, 2361856, 2361857, 2361858, 2361889, 2361890, 2361891, + 2361892, 2361893, 2361894, 2361895, 2361896, 2361897, 2361898, + 2361920, 2361921, 2361953, 2361954, 2361955, 2361956, 2361957, + 2361958, 2361959, 2361960, 2361961, 2361962, 2362017, 2362018, + 2362019, 2362020, 2362021, 2362022, 2362023, 2362024, 2362025, + 2362083, 2362084, 2362085, 2362086, 2362087, 2362088, 2621443, + 2621444, 2621445, 2621446, 2621447, 2621448, 2621449, 2621475, + 2621476, 2621477, 2621478, 2621479, 2621480, 2621481, 2621507, + 2621508, 2621509, 2621510, 2621511, 2621512, 2621513, 2621538, + 2621539, 2621540, 2621541, 2621542, 2621543, 2621544, 2621572, + 2621573, 2621574, 2621575, 2621576, 2621577, 2621578, 2621602, + 2621603, 2621604, 2621605, 2621606, 2621607, 2621608, 2621632, + 2621635, 2621636, 2621637, 2621638, 2621639, 2621640, 2621641, + 2621642, 2621665, 2621666, 2621667, 2621668, 2621669, 2621670, + 2621671, 2621696, 2621697, 2621698, 2621699, 2621700, 2621701, + 2621702, 2621703, 2621704, 2621705, 2621706, 2621729, 2621730, + 2621731, 2621732, 2621733, 2621734, 2621760, 2621761, 2621762, + 2621763, 2621764, 2621765, 2621766, 2621767, 2621768, 2621769, + 2621770, 2621771, 2621793, 2621794, 2621795, 2621796, 2621797, + 2621798, 2621824, 2621825, 2621826, 2621827, 2621828, 2621829, + 2621830, 2621831, 2621832, 2621833, 2621834, 2621835, 2621857, + 2621858, 2621859, 2621860, 2621861, 2621888, 2621889, 2621890, + 2621891, 2621892, 2621893, 2621894, 2621895, 2621896, 2621897, + 2621898, 2621899, 2621921, 2621922, 2621923, 2621924, 2621952, + 2621953, 2621954, 2621955, 2621956, 2621957, 2621958, 2621959, + 2621960, 2621961, 2621962, 2621985, 2621986, 2622016, 2622017, + 2622018, 2622019, 2622020, 2622021, 2622022, 2622023, 2622024, + 2622025, 2622026, 2622049, 2622081, 2622082, 2622083, 2622084, + 2622085, 2622086, 2622087, 2622088, 2622089, 2622147, 2622148, + 2622149, 2622150, 2622151, 2622152, 2623554, 2623555, 2623556, + 2623557, 2623558, 2623559, 2623560, 2623587, 2623588, 2623589, + 2623590, 2623591, 2623592, 2623593, 2623616, 2623617, 2623618, + 2623619, 2623620, 2623621, 2623622, 2623623, 2623624, 2623650, + 2623651, 2623652, 2623653, 2623654, 2623655, 2623656, 2623657, + 2623658, 2623680, 2623681, 2623682, 2623683, 2623684, 2623685, + 2623686, 2623687, 2623713, 2623714, 2623715, 2623716, 2623717, + 2623718, 2623719, 2623720, 2623721, 2623722, 2623744, 2623745, + 2623746, 2623747, 2623748, 2623749, 2623750, 2623777, 2623778, + 2623779, 2623780, 2623781, 2623782, 2623783, 2623784, 2623785, + 2623786, 2623808, 2623809, 2623810, 2623811, 2623812, 2623813, + 2623841, 2623842, 2623843, 2623844, 2623845, 2623846, 2623847, + 2623848, 2623849, 2623850, 2623872, 2623873, 2623874, 2623875, + 2623876, 2623905, 2623906, 2623907, 2623908, 2623909, 2623910, + 2623911, 2623912, 2623913, 2623914, 2623936, 2623937, 2623938, + 2623939, 2623969, 2623970, 2623971, 2623972, 2623973, 2623974, + 2623975, 2623976, 2623977, 2623978, 2624000, 2624001, 2624033, + 2624034, 2624035, 2624036, 2624037, 2624038, 2624039, 2624040, + 2624041, 2624097, 2624098, 2624099, 2624100, 2624101, 2624102, + 2624103, 2624104, 2624164, 2624165, 2624166, 2883587, 2883588, + 2883589, 2883590, 2883591, 2883592, 2883593, 2883619, 2883620, + 2883621, 2883622, 2883623, 2883624, 2883625, 2883651, 2883652, + 2883653, 2883654, 2883655, 2883656, 2883657, 2883682, 2883683, + 2883684, 2883685, 2883686, 2883687, 2883688, 2883712, 2883714, + 2883715, 2883716, 2883717, 2883718, 2883719, 2883720, 2883721, + 2883722, 2883745, 2883746, 2883747, 2883748, 2883749, 2883750, + 2883751, 2883752, 2883776, 2883777, 2883778, 2883779, 2883780, + 2883781, 2883782, 2883783, 2883784, 2883785, 2883786, 2883809, + 2883810, 2883811, 2883812, 2883813, 2883814, 2883815, 2883840, + 2883841, 2883842, 2883843, 2883844, 2883845, 2883846, 2883847, + 2883848, 2883849, 2883850, 2883873, 2883874, 2883875, 2883876, + 2883877, 2883878, 2883904, 2883905, 2883906, 2883907, 2883908, + 2883909, 2883910, 2883911, 2883912, 2883913, 2883914, 2883937, + 2883938, 2883939, 2883940, 2883941, 2883968, 2883969, 2883970, + 2883971, 2883972, 2883973, 2883974, 2883975, 2883976, 2883977, + 2883978, 2884001, 2884002, 2884003, 2884004, 2884032, 2884033, + 2884034, 2884035, 2884036, 2884037, 2884038, 2884039, 2884040, + 2884041, 2884042, 2884065, 2884066, 2884067, 2884096, 2884097, + 2884098, 2884099, 2884100, 2884101, 2884102, 2884103, 2884104, + 2884105, 2884129, 2884161, 2884162, 2884163, 2884164, 2884165, + 2884166, 2884167, 2884168, 2884228, 2884229, 2884230, 2885698, + 2885699, 2885700, 2885701, 2885702, 2885703, 2885704, 2885731, + 2885732, 2885733, 2885734, 2885735, 2885736, 2885737, 2885762, + 2885763, 2885764, 2885765, 2885766, 2885767, 2885768, 2885796, + 2885797, 2885798, 2885799, 2885800, 2885801, 2885802, 2885824, + 2885825, 2885826, 2885827, 2885828, 2885829, 2885830, 2885831, + 2885859, 2885860, 2885861, 2885862, 2885863, 2885864, 2885865, + 2885866, 2885888, 2885889, 2885890, 2885891, 2885892, 2885893, + 2885894, 2885921, 2885922, 2885923, 2885924, 2885925, 2885926, + 2885927, 2885928, 2885929, 2885930, 2885952, 2885953, 2885954, + 2885955, 2885956, 2885957, 2885958, 2885985, 2885986, 2885987, + 2885988, 2885989, 2885990, 2885991, 2885992, 2885993, 2885994, + 2885995, 2886016, 2886017, 2886018, 2886019, 2886020, 2886021, + 2886049, 2886050, 2886051, 2886052, 2886053, 2886054, 2886055, + 2886056, 2886057, 2886058, 2886059, 2886080, 2886081, 2886082, + 2886083, 2886084, 2886113, 2886114, 2886115, 2886116, 2886117, + 2886118, 2886119, 2886120, 2886121, 2886122, 2886123, 2886144, + 2886145, 2886146, 2886177, 2886178, 2886179, 2886180, 2886181, + 2886182, 2886183, 2886184, 2886185, 2886186, 2886208, 2886209, + 2886241, 2886242, 2886243, 2886244, 2886245, 2886246, 2886247, + 2886248, 2886249, 2886250, 2886305, 2886306, 2886307, 2886308, + 2886309, 2886310, 2886311, 2886312, 2886313, 2886371, 2886372, + 2886373, 2886374, 2886375, 2886376, 3145731, 3145732, 3145733, + 3145734, 3145735, 3145736, 3145737, 3145763, 3145764, 3145765, + 3145766, 3145767, 3145768, 3145769, 3145795, 3145796, 3145797, + 3145798, 3145799, 3145800, 3145801, 3145826, 3145827, 3145828, + 3145829, 3145830, 3145831, 3145832, 3145860, 3145861, 3145862, + 3145863, 3145864, 3145865, 3145866, 3145890, 3145891, 3145892, + 3145893, 3145894, 3145895, 3145896, 3145920, 3145923, 3145924, + 3145925, 3145926, 3145927, 3145928, 3145929, 3145930, 3145953, + 3145954, 3145955, 3145956, 3145957, 3145958, 3145959, 3145984, + 3145985, 3145986, 3145987, 3145988, 3145989, 3145990, 3145991, + 3145992, 3145993, 3145994, 3146017, 3146018, 3146019, 3146020, + 3146021, 3146022, 3146048, 3146049, 3146050, 3146051, 3146052, + 3146053, 3146054, 3146055, 3146056, 3146057, 3146058, 3146059, + 3146081, 3146082, 3146083, 3146084, 3146085, 3146086, 3146112, + 3146113, 3146114, 3146115, 3146116, 3146117, 3146118, 3146119, + 3146120, 3146121, 3146122, 3146123, 3146145, 3146146, 3146147, + 3146148, 3146149, 3146176, 3146177, 3146178, 3146179, 3146180, + 3146181, 3146182, 3146183, 3146184, 3146185, 3146186, 3146187, + 3146209, 3146210, 3146211, 3146212, 3146240, 3146241, 3146242, + 3146243, 3146244, 3146245, 3146246, 3146247, 3146248, 3146249, + 3146250, 3146273, 3146274, 3146304, 3146305, 3146306, 3146307, + 3146308, 3146309, 3146310, 3146311, 3146312, 3146313, 3146314, + 3146337, 3146369, 3146370, 3146371, 3146372, 3146373, 3146374, + 3146375, 3146376, 3146377, 3146435, 3146436, 3146437, 3146438, + 3146439, 3146440, 3147842, 3147843, 3147844, 3147845, 3147846, + 3147847, 3147848, 3147875, 3147876, 3147877, 3147878, 3147879, + 3147880, 3147881, 3147904, 3147905, 3147906, 3147907, 3147908, + 3147909, 3147910, 3147911, 3147912, 3147938, 3147939, 3147940, + 3147941, 3147942, 3147943, 3147944, 3147945, 3147946, 3147968, + 3147969, 3147970, 3147971, 3147972, 3147973, 3147974, 3147975, + 3148001, 3148002, 3148003, 3148004, 3148005, 3148006, 3148007, + 3148008, 3148009, 3148010, 3148032, 3148033, 3148034, 3148035, + 3148036, 3148037, 3148038, 3148065, 3148066, 3148067, 3148068, + 3148069, 3148070, 3148071, 3148072, 3148073, 3148074, 3148096, + 3148097, 3148098, 3148099, 3148100, 3148101, 3148129, 3148130, + 3148131, 3148132, 3148133, 3148134, 3148135, 3148136, 3148137, + 3148138, 3148160, 3148161, 3148162, 3148163, 3148164, 3148193, + 3148194, 3148195, 3148196, 3148197, 3148198, 3148199, 3148200, + 3148201, 3148202, 3148224, 3148225, 3148226, 3148227, 3148257, + 3148258, 3148259, 3148260, 3148261, 3148262, 3148263, 3148264, + 3148265, 3148266, 3148288, 3148289, 3148321, 3148322, 3148323, + 3148324, 3148325, 3148326, 3148327, 3148328, 3148329, 3148385, + 3148386, 3148387, 3148388, 3148389, 3148390, 3148391, 3148392, + 3148452, 3148453, 3148454, 3407875, 3407876, 3407877, 3407878, + 3407879, 3407880, 3407907, 3407908, 3407909, 3407910, 3407911, + 3407912, 3407940, 3407941, 3407942, 3407943, 3407944, 3407971, + 3407972, 3407973, 3407974, 3407975, 3408003, 3408004, 3408005, + 3408006, 3408007, 3408008, 3408009, 3408033, 3408034, 3408035, + 3408036, 3408037, 3408038, 3408039, 3408064, 3408065, 3408066, + 3408067, 3408068, 3408069, 3408070, 3408071, 3408072, 3408073, + 3408097, 3408098, 3408099, 3408100, 3408101, 3408102, 3408128, + 3408129, 3408130, 3408131, 3408132, 3408133, 3408134, 3408135, + 3408136, 3408137, 3408161, 3408162, 3408163, 3408164, 3408165, + 3408192, 3408193, 3408194, 3408195, 3408196, 3408197, 3408198, + 3408199, 3408200, 3408201, 3408225, 3408226, 3408227, 3408228, + 3408256, 3408257, 3408258, 3408259, 3408260, 3408261, 3408262, + 3408263, 3408264, 3408265, 3408289, 3408290, 3408291, 3408320, + 3408321, 3408322, 3408323, 3408324, 3408325, 3408326, 3408327, + 3408328, 3408353, 3408385, 3408386, 3408387, 3408388, 3408389, + 3408390, 3408391, 3408452, 3408453, 3409987, 3409988, 3409989, + 3409990, 3409991, 3410020, 3410021, 3410022, 3410023, 3410024, + 3410050, 3410051, 3410052, 3410053, 3410054, 3410055, 3410084, + 3410085, 3410086, 3410087, 3410088, 3410089, 3410113, 3410114, + 3410115, 3410116, 3410117, 3410118, 3410148, 3410149, 3410150, + 3410151, 3410152, 3410153, 3410176, 3410177, 3410178, 3410179, + 3410180, 3410181, 3410209, 3410211, 3410212, 3410213, 3410214, + 3410215, 3410216, 3410217, 3410240, 3410241, 3410242, 3410243, + 3410244, 3410245, 3410273, 3410274, 3410275, 3410276, 3410277, + 3410278, 3410279, 3410280, 3410281, 3410282, 3410304, 3410305, + 3410306, 3410307, 3410308, 3410337, 3410338, 3410339, 3410340, + 3410341, 3410342, 3410343, 3410344, 3410345, 3410346, 3410368, + 3410369, 3410370, 3410401, 3410402, 3410403, 3410404, 3410405, + 3410406, 3410407, 3410408, 3410409, 3410432, 3410433, 3410465, + 3410466, 3410467, 3410468, 3410469, 3410470, 3410471, 3410472, + 3410473, 3410529, 3410530, 3410531, 3410532, 3410533, 3410534, + 3410535, 3410536, 3410595, 3410596, 3410597, 3410598, 3410599, + 3670019, 3670020, 3670021, 3670022, 3670023, 3670024, 3670051, + 3670052, 3670053, 3670054, 3670055, 3670056, 3670084, 3670085, + 3670086, 3670087, 3670088, 3670115, 3670116, 3670117, 3670118, + 3670119, 3670148, 3670149, 3670150, 3670151, 3670152, 3670153, + 3670178, 3670179, 3670180, 3670181, 3670182, 3670183, 3670212, + 3670213, 3670214, 3670215, 3670216, 3670217, 3670241, 3670242, + 3670243, 3670244, 3670245, 3670246, 3670272, 3670273, 3670275, + 3670276, 3670277, 3670278, 3670279, 3670280, 3670281, 3670305, + 3670306, 3670307, 3670308, 3670309, 3670336, 3670337, 3670338, + 3670339, 3670340, 3670341, 3670342, 3670343, 3670344, 3670345, + 3670346, 3670369, 3670370, 3670371, 3670372, 3670373, 3670400, + 3670401, 3670402, 3670403, 3670404, 3670405, 3670406, 3670407, + 3670408, 3670409, 3670410, 3670433, 3670434, 3670435, 3670436, + 3670464, 3670465, 3670466, 3670467, 3670468, 3670469, 3670470, + 3670471, 3670472, 3670473, 3670497, 3670498, 3670528, 3670529, + 3670530, 3670531, 3670532, 3670533, 3670534, 3670535, 3670536, + 3670537, 3670561, 3670593, 3670594, 3670595, 3670596, 3670597, + 3670598, 3670599, 3670600, 3670659, 3670660, 3670661, 3670662, + 3670663, 3672131, 3672132, 3672133, 3672134, 3672135, 3672164, + 3672165, 3672166, 3672167, 3672168, 3672193, 3672194, 3672195, + 3672196, 3672197, 3672198, 3672199, 3672227, 3672228, 3672229, + 3672230, 3672231, 3672232, 3672233, 3672256, 3672257, 3672258, + 3672259, 3672260, 3672261, 3672262, 3672289, 3672290, 3672291, + 3672292, 3672293, 3672294, 3672295, 3672296, 3672297, 3672320, + 3672321, 3672322, 3672323, 3672324, 3672325, 3672353, 3672354, + 3672355, 3672356, 3672357, 3672358, 3672359, 3672360, 3672361, + 3672384, 3672385, 3672386, 3672387, 3672388, 3672417, 3672418, + 3672419, 3672420, 3672421, 3672422, 3672423, 3672424, 3672425, + 3672448, 3672449, 3672450, 3672451, 3672481, 3672482, 3672483, + 3672484, 3672485, 3672486, 3672487, 3672488, 3672489, 3672512, + 3672513, 3672545, 3672546, 3672547, 3672548, 3672549, 3672550, + 3672551, 3672552, 3672609, 3672610, 3672611, 3672612, 3672613, + 3672614, 3672615, 3672676, 3672677, 3932163, 3932164, 3932165, + 3932166, 3932167, 3932195, 3932196, 3932197, 3932198, 3932199, + 3932228, 3932229, 3932230, 3932231, 3932259, 3932260, 3932261, + 3932262, 3932291, 3932292, 3932293, 3932294, 3932295, 3932296, + 3932321, 3932322, 3932323, 3932324, 3932325, 3932326, 3932352, + 3932353, 3932354, 3932355, 3932356, 3932357, 3932358, 3932359, + 3932360, 3932385, 3932386, 3932387, 3932388, 3932389, 3932416, + 3932417, 3932418, 3932419, 3932420, 3932421, 3932422, 3932423, + 3932424, 3932449, 3932450, 3932451, 3932452, 3932480, 3932481, + 3932482, 3932483, 3932484, 3932485, 3932486, 3932487, 3932488, + 3932513, 3932514, 3932515, 3932544, 3932545, 3932546, 3932547, + 3932548, 3932549, 3932550, 3932551, 3932577, 3932609, 3932610, + 3932611, 3932612, 3932613, 3932614, 3934275, 3934276, 3934277, + 3934278, 3934308, 3934309, 3934310, 3934311, 3934338, 3934339, + 3934340, 3934341, 3934342, 3934372, 3934373, 3934374, 3934375, + 3934376, 3934401, 3934402, 3934403, 3934404, 3934405, 3934436, + 3934437, 3934438, 3934439, 3934440, 3934464, 3934465, 3934466, + 3934467, 3934468, 3934497, 3934499, 3934500, 3934501, 3934502, + 3934503, 3934504, 3934528, 3934529, 3934530, 3934531, 3934561, + 3934562, 3934563, 3934564, 3934565, 3934566, 3934567, 3934568, + 3934592, 3934593, 3934594, 3934625, 3934626, 3934627, 3934628, + 3934629, 3934630, 3934631, 3934632, 3934656, 3934657, 3934689, + 3934690, 3934691, 3934692, 3934693, 3934694, 3934695, 3934696, + 3934753, 3934754, 3934755, 3934756, 3934757, 3934758, 3934759, + 3934819, 3934820, 3934821, 3934822, 4194307, 4194308, 4194309, + 4194310, 4194311, 4194339, 4194340, 4194341, 4194342, 4194343, + 4194372, 4194373, 4194374, 4194375, 4194403, 4194404, 4194405, + 4194406, 4194436, 4194437, 4194438, 4194439, 4194440, 4194466, + 4194467, 4194468, 4194469, 4194470, 4194500, 4194501, 4194502, + 4194503, 4194504, 4194529, 4194530, 4194531, 4194532, 4194533, + 4194560, 4194561, 4194563, 4194564, 4194565, 4194566, 4194567, + 4194568, 4194593, 4194594, 4194595, 4194596, 4194624, 4194625, + 4194626, 4194627, 4194628, 4194629, 4194630, 4194631, 4194632, + 4194657, 4194658, 4194659, 4194688, 4194689, 4194690, 4194691, + 4194692, 4194693, 4194694, 4194695, 4194696, 4194721, 4194722, + 4194752, 4194753, 4194754, 4194755, 4194756, 4194757, 4194758, + 4194759, 4194760, 4194785, 4194817, 4194818, 4194819, 4194820, + 4194821, 4194822, 4194823, 4194883, 4194884, 4194885, 4194886, + 4196419, 4196420, 4196421, 4196422, 4196452, 4196453, 4196454, + 4196455, 4196481, 4196482, 4196483, 4196484, 4196485, 4196486, + 4196515, 4196516, 4196517, 4196518, 4196519, 4196520, 4196544, + 4196545, 4196546, 4196547, 4196548, 4196549, 4196577, 4196578, + 4196579, 4196580, 4196581, 4196582, 4196583, 4196584, 4196608, + 4196609, 4196610, 4196611, 4196612, 4196641, 4196642, 4196643, + 4196644, 4196645, 4196646, 4196647, 4196648, 4196672, 4196673, + 4196674, 4196675, 4196705, 4196706, 4196707, 4196708, 4196709, + 4196710, 4196711, 4196712, 4196736, 4196737, 4196769, 4196770, + 4196771, 4196772, 4196773, 4196774, 4196775, 4196833, 4196834, + 4196835, 4196836, 4196837, 4196838, 4456451, 4456452, 4456453, + 4456454, 4456455, 4456483, 4456484, 4456485, 4456486, 4456487, + 4456516, 4456517, 4456518, 4456519, 4456547, 4456548, 4456549, + 4456550, 4456579, 4456580, 4456581, 4456582, 4456583, 4456584, + 4456609, 4456610, 4456611, 4456612, 4456613, 4456614, 4456640, + 4456641, 4456642, 4456643, 4456644, 4456645, 4456646, 4456647, + 4456648, 4456673, 4456674, 4456675, 4456676, 4456677, 4456704, + 4456705, 4456706, 4456707, 4456708, 4456709, 4456710, 4456711, + 4456712, 4456737, 4456738, 4456739, 4456740, 4456768, 4456769, + 4456770, 4456771, 4456772, 4456773, 4456774, 4456775, 4456776, + 4456801, 4456802, 4456803, 4456832, 4456833, 4456834, 4456835, + 4456836, 4456837, 4456838, 4456839, 4456865, 4456897, 4456898, + 4456899, 4456900, 4456901, 4456902, 4458563, 4458564, 4458565, + 4458566, 4458596, 4458597, 4458598, 4458599, 4458626, 4458627, + 4458628, 4458629, 4458630, 4458660, 4458661, 4458662, 4458663, + 4458664, 4458689, 4458690, 4458691, 4458692, 4458693, 4458724, + 4458725, 4458726, 4458727, 4458728, 4458752, 4458753, 4458754, + 4458755, 4458756, 4458785, 4458787, 4458788, 4458789, 4458790, + 4458791, 4458792, 4458816, 4458817, 4458818, 4458819, 4458849, + 4458850, 4458851, 4458852, 4458853, 4458854, 4458855, 4458856, + 4458880, 4458881, 4458882, 4458913, 4458914, 4458915, 4458916, + 4458917, 4458918, 4458919, 4458920, 4458944, 4458945, 4458977, + 4458978, 4458979, 4458980, 4458981, 4458982, 4458983, 4458984, + 4459041, 4459042, 4459043, 4459044, 4459045, 4459046, 4459047, + 4459107, 4459108, 4459109, 4459110, 4718595, 4718596, 4718597, + 4718598, 4718599, 4718627, 4718628, 4718629, 4718630, 4718631, + 4718660, 4718661, 4718662, 4718663, 4718691, 4718692, 4718693, + 4718694, 4718724, 4718725, 4718726, 4718727, 4718728, 4718754, + 4718755, 4718756, 4718757, 4718758, 4718788, 4718789, 4718790, + 4718791, 4718792, 4718817, 4718818, 4718819, 4718820, 4718821, + 4718848, 4718849, 4718851, 4718852, 4718853, 4718854, 4718855, + 4718856, 4718881, 4718882, 4718883, 4718884, 4718912, 4718913, + 4718914, 4718915, 4718916, 4718917, 4718918, 4718919, 4718920, + 4718945, 4718946, 4718947, 4718976, 4718977, 4718978, 4718979, + 4718980, 4718981, 4718982, 4718983, 4718984, 4719009, 4719010, + 4719040, 4719041, 4719042, 4719043, 4719044, 4719045, 4719046, + 4719047, 4719048, 4719073, 4719105, 4719106, 4719107, 4719108, + 4719109, 4719110, 4719111, 4719171, 4719172, 4719173, 4719174, + 4720707, 4720708, 4720709, 4720710, 4720740, 4720741, 4720742, + 4720743, 4720769, 4720770, 4720771, 4720772, 4720773, 4720774, + 4720803, 4720804, 4720805, 4720806, 4720807, 4720808, 4720832, + 4720833, 4720834, 4720835, 4720836, 4720837, 4720865, 4720866, + 4720867, 4720868, 4720869, 4720870, 4720871, 4720872, 4720896, + 4720897, 4720898, 4720899, 4720900, 4720929, 4720930, 4720931, + 4720932, 4720933, 4720934, 4720935, 4720936, 4720960, 4720961, + 4720962, 4720963, 4720993, 4720994, 4720995, 4720996, 4720997, + 4720998, 4720999, 4721000, 4721024, 4721025, 4721057, 4721058, + 4721059, 4721060, 4721061, 4721062, 4721063, 4721121, 4721122, + 4721123, 4721124, 4721125, 4721126, 4980739, 4980740, 4980741, + 4980742, 4980771, 4980772, 4980773, 4980774, 4980804, 4980805, + 4980806, 4980835, 4980836, 4980837, 4980867, 4980868, 4980869, + 4980870, 4980871, 4980897, 4980898, 4980899, 4980900, 4980901, + 4980928, 4980929, 4980930, 4980931, 4980932, 4980933, 4980934, + 4980935, 4980961, 4980962, 4980963, 4980964, 4980992, 4980993, + 4980994, 4980995, 4980996, 4980997, 4980998, 4980999, 4981025, + 4981026, 4981027, 4981056, 4981057, 4981058, 4981059, 4981060, + 4981061, 4981062, 4981089, 4981121, 4981122, 4981123, 4981124, + 4981125, 4982851, 4982852, 4982853, 4982884, 4982885, 4982886, + 4982914, 4982915, 4982916, 4982917, 4982948, 4982949, 4982950, + 4982951, 4982977, 4982978, 4982979, 4982980, 4983012, 4983013, + 4983014, 4983015, 4983040, 4983041, 4983042, 4983043, 4983073, + 4983075, 4983076, 4983077, 4983078, 4983079, 4983104, 4983105, + 4983106, 4983137, 4983138, 4983139, 4983140, 4983141, 4983142, + 4983143, 4983168, 4983169, 4983201, 4983202, 4983203, 4983204, + 4983205, 4983206, 4983207, 4983265, 4983266, 4983267, 4983268, + 4983269, 4983270, 4983331, 4983332, 4983333, 5242883, 5242884, + 5242885, 5242886, 5242915, 5242916, 5242917, 5242918, 5242948, + 5242949, 5242950, 5242979, 5242980, 5242981, 5243012, 5243013, + 5243014, 5243015, 5243042, 5243043, 5243044, 5243045, 5243076, + 5243077, 5243078, 5243079, 5243105, 5243106, 5243107, 5243108, + 5243136, 5243137, 5243139, 5243140, 5243141, 5243142, 5243143, + 5243169, 5243170, 5243171, 5243200, 5243201, 5243202, 5243203, + 5243204, 5243205, 5243206, 5243207, 5243233, 5243234, 5243264, + 5243265, 5243266, 5243267, 5243268, 5243269, 5243270, 5243271, + 5243297, 5243329, 5243330, 5243331, 5243332, 5243333, 5243334, + 5243395, 5243396, 5243397, 5244995, 5244996, 5244997, 5245028, + 5245029, 5245030, 5245057, 5245058, 5245059, 5245060, 5245061, + 5245091, 5245092, 5245093, 5245094, 5245095, 5245120, 5245121, + 5245122, 5245123, 5245124, 5245153, 5245154, 5245155, 5245156, + 5245157, 5245158, 5245159, 5245184, 5245185, 5245186, 5245187, + 5245217, 5245218, 5245219, 5245220, 5245221, 5245222, 5245223, + 5245248, 5245249, 5245281, 5245282, 5245283, 5245284, 5245285, + 5245286, 5245345, 5245346, 5245347, 5245348, 5245349, 5505027, + 5505028, 5505029, 5505030, 5505059, 5505060, 5505061, 5505062, + 5505092, 5505093, 5505094, 5505123, 5505124, 5505125, 5505155, + 5505156, 5505157, 5505158, 5505159, 5505185, 5505186, 5505187, + 5505188, 5505189, 5505216, 5505217, 5505218, 5505219, 5505220, + 5505221, 5505222, 5505223, 5505249, 5505250, 5505251, 5505252, + 5505280, 5505281, 5505282, 5505283, 5505284, 5505285, 5505286, + 5505287, 5505313, 5505314, 5505315, 5505344, 5505345, 5505346, + 5505347, 5505348, 5505349, 5505350, 5505377, 5505409, 5505410, + 5505411, 5505412, 5505413, 5507139, 5507140, 5507141, 5507172, + 5507173, 5507174, 5507202, 5507203, 5507204, 5507205, 5507236, + 5507237, 5507238, 5507239, 5507265, 5507266, 5507267, 5507268, + 5507300, 5507301, 5507302, 5507303, 5507328, 5507329, 5507330, + 5507331, 5507361, 5507363, 5507364, 5507365, 5507366, 5507367, + 5507392, 5507393, 5507394, 5507425, 5507426, 5507427, 5507428, + 5507429, 5507430, 5507431, 5507456, 5507457, 5507489, 5507490, + 5507491, 5507492, 5507493, 5507494, 5507495, 5507553, 5507554, + 5507555, 5507556, 5507557, 5507558, 5507619, 5507620, 5507621, + 5767171, 5767172, 5767173, 5767174, 5767203, 5767204, 5767205, + 5767206, 5767236, 5767237, 5767238, 5767267, 5767268, 5767269, + 5767300, 5767301, 5767302, 5767303, 5767330, 5767331, 5767332, + 5767333, 5767364, 5767365, 5767366, 5767367, 5767393, 5767394, + 5767395, 5767396, 5767424, 5767425, 5767427, 5767428, 5767429, + 5767430, 5767431, 5767457, 5767458, 5767459, 5767488, 5767489, + 5767490, 5767491, 5767492, 5767493, 5767494, 5767495, 5767521, + 5767522, 5767552, 5767553, 5767554, 5767555, 5767556, 5767557, + 5767558, 5767559, 5767585, 5767617, 5767618, 5767619, 5767620, + 5767621, 5767622, 5767683, 5767684, 5767685, 5769283, 5769284, + 5769285, 5769316, 5769317, 5769318, 5769345, 5769346, 5769347, + 5769348, 5769349, 5769379, 5769380, 5769381, 5769382, 5769383, + 5769408, 5769409, 5769410, 5769411, 5769412, 5769441, 5769442, + 5769443, 5769444, 5769445, 5769446, 5769447, 5769472, 5769473, + 5769474, 5769475, 5769505, 5769506, 5769507, 5769508, 5769509, + 5769510, 5769511, 5769536, 5769537, 5769569, 5769570, 5769571, + 5769572, 5769573, 5769574, 5769633, 5769634, 5769635, 5769636, + 5769637 + + + 1, 1, 1, 2, 2, 2, 42, 201, 201, 201, 202, 202, + 202, 342, 411, 1, 1, 2, 2, 2, 2, 11, 201, 201, + 202, 202, 202, 202, 540, 440, 1, 1, 1, 2, 2, 2, + 2, 72, 201, 201, 201, 202, 202, 202, 202, 272, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 52, 201, 201, 202, + 202, 202, 202, 252, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 52, 201, 202, 202, 202, 202, 252, 2, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 52, 202, 202, 202, 202, + 252, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 52, + 202, 202, 202, 252, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 242, 212, 2, 2, 2, 2, 212, + 142, 172, 172, 172, 340, 401, 401, 402, 402, 402, 402, 40, + 201, 201, 202, 202, 202, 202, 401, 401, 401, 402, 402, 402, + 42, 201, 201, 201, 202, 202, 202, 342, 240, 401, 401, 401, + 402, 402, 402, 12, 140, 201, 201, 201, 202, 202, 202, 412, + 401, 401, 401, 402, 402, 402, 402, 401, 211, 401, 201, 201, + 201, 202, 202, 202, 202, 401, 401, 402, 402, 402, 402, 572, + 401, 401, 401, 401, 201, 201, 202, 202, 202, 202, 372, 402, + 402, 402, 402, 402, 572, 401, 401, 401, 401, 401, 202, 202, + 202, 202, 202, 372, 402, 402, 402, 402, 572, 402, 402, 402, + 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 12, 402, + 402, 402, 402, 402, 402, 402, 202, 202, 412, 402, 542, 402, + 402, 402, 402, 402, 402, 402, 402, 202, 442, 542, 402, 402, + 402, 402, 402, 402, 402, 442, 472, 452, 452, 452, 452, 472, + 401, 401, 401, 402, 402, 402, 42, 201, 201, 201, 202, 202, + 202, 342, 341, 1, 1, 2, 2, 2, 2, 41, 201, 201, + 202, 202, 202, 202, 1, 1, 1, 2, 2, 2, 42, 201, + 201, 201, 202, 202, 202, 342, 541, 441, 1, 1, 1, 2, + 2, 2, 112, 201, 201, 201, 202, 202, 202, 312, 201, 1, + 511, 1, 1, 1, 1, 2, 2, 2, 2, 201, 201, 202, + 202, 202, 202, 201, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 72, 201, 202, 202, 202, 202, 272, 202, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 72, 202, 202, 202, + 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 72, 202, 202, 202, 272, 202, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 112, 202, 312, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, 2, + 2, 2, 2, 142, 172, 152, 152, 152, 152, 172, 311, 401, + 401, 402, 402, 402, 402, 111, 201, 201, 202, 202, 202, 202, + 241, 401, 401, 401, 402, 402, 402, 402, 572, 141, 201, 201, + 201, 202, 202, 202, 202, 372, 401, 401, 401, 402, 402, 402, + 402, 552, 401, 401, 401, 201, 201, 202, 202, 202, 202, 352, + 401, 401, 402, 402, 402, 402, 552, 401, 401, 401, 401, 201, + 202, 202, 202, 202, 352, 402, 402, 402, 402, 402, 552, 401, + 401, 401, 401, 402, 202, 202, 202, 202, 352, 402, 402, 402, + 402, 552, 402, 402, 402, 402, 402, 402, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 402, 202, + 202, 372, 402, 542, 402, 402, 402, 402, 402, 402, 402, 402, + 442, 542, 512, 402, 402, 402, 402, 512, 442, 472, 472, 472, + 1, 1, 2, 2, 2, 2, 42, 201, 201, 202, 202, 202, + 202, 342, 411, 1, 1, 2, 2, 2, 2, 11, 201, 201, + 202, 202, 202, 202, 541, 441, 1, 1, 1, 2, 2, 2, + 2, 72, 201, 201, 201, 202, 202, 202, 202, 272, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 52, 201, 201, 202, + 202, 202, 202, 252, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 52, 202, 202, 202, 202, 202, 252, 2, 2, 1, + 1, 2, 2, 2, 2, 2, 2, 52, 202, 202, 202, 202, + 252, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 52, + 202, 202, 202, 252, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 72, 202, 202, 272, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 142, 242, 242, 212, 2, 2, 2, 2, 212, + 142, 172, 172, 172, 341, 401, 401, 402, 402, 402, 402, 41, + 201, 201, 202, 202, 202, 202, 401, 401, 402, 402, 402, 402, + 42, 201, 201, 202, 202, 202, 202, 342, 241, 401, 401, 401, + 402, 402, 402, 12, 141, 201, 201, 201, 202, 202, 202, 412, + 401, 401, 401, 402, 402, 402, 402, 401, 211, 401, 201, 201, + 201, 202, 202, 202, 202, 401, 402, 402, 402, 402, 402, 572, + 401, 401, 401, 401, 201, 202, 202, 202, 202, 202, 372, 402, + 402, 402, 402, 402, 572, 402, 401, 401, 401, 402, 202, 202, + 202, 202, 202, 372, 402, 402, 402, 402, 572, 402, 402, 402, + 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 12, 402, + 402, 402, 402, 402, 402, 402, 202, 202, 412, 402, 542, 402, + 402, 402, 402, 402, 402, 402, 402, 202, 442, 542, 402, 402, + 402, 402, 402, 402, 402, 442, 472, 452, 452, 452, 452, 472, + 401, 401, 402, 402, 402, 402, 42, 201, 201, 202, 202, 202, + 202, 342, 341, 1, 1, 2, 2, 2, 2, 41, 201, 201, + 202, 202, 202, 202, 1, 1, 2, 2, 2, 2, 42, 201, + 201, 202, 202, 202, 202, 342, 541, 441, 1, 1, 2, 2, + 2, 2, 112, 201, 201, 202, 202, 202, 202, 312, 201, 1, + 511, 1, 1, 1, 2, 2, 2, 2, 2, 201, 202, 202, + 202, 202, 202, 201, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 72, 202, 202, 202, 202, 202, 272, 202, 2, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 72, 202, 202, 202, + 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 72, 202, 202, 202, 272, 202, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 112, 202, 312, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, 2, + 2, 2, 2, 142, 172, 152, 152, 152, 152, 172, 311, 401, + 401, 402, 402, 402, 402, 111, 201, 201, 202, 202, 202, 202, + 241, 401, 401, 401, 402, 402, 402, 402, 572, 141, 201, 201, + 201, 202, 202, 202, 202, 372, 401, 401, 401, 402, 402, 402, + 402, 552, 401, 401, 401, 201, 201, 202, 202, 202, 202, 352, + 401, 402, 402, 402, 402, 402, 552, 401, 401, 401, 401, 202, + 202, 202, 202, 202, 352, 402, 402, 402, 402, 402, 552, 402, + 402, 402, 402, 402, 202, 202, 202, 202, 352, 402, 402, 402, + 402, 552, 402, 402, 402, 402, 402, 402, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 402, 202, + 202, 372, 402, 542, 402, 402, 402, 402, 402, 402, 402, 402, + 442, 542, 512, 402, 402, 402, 402, 512, 442, 472, 472, 472, + 341, 1, 2, 2, 2, 42, 41, 201, 202, 202, 202, 342, + 1, 2, 2, 2, 2, 201, 202, 202, 202, 202, 441, 1, + 2, 2, 2, 2, 72, 541, 201, 202, 202, 202, 202, 272, + 1, 511, 511, 1, 1, 2, 2, 2, 2, 52, 201, 202, + 202, 202, 202, 252, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 52, 202, 202, 202, 202, 252, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 52, 202, 202, 202, 252, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 2, 2, + 2, 2, 2, 2, 2, 2, 142, 242, 242, 212, 2, 2, + 2, 212, 142, 172, 172, 401, 401, 402, 402, 402, 201, 201, + 202, 202, 202, 311, 401, 402, 402, 402, 42, 111, 201, 202, + 202, 202, 342, 311, 401, 402, 402, 402, 12, 111, 201, 202, + 202, 202, 412, 401, 401, 402, 402, 402, 402, 241, 141, 201, + 201, 202, 202, 202, 202, 401, 402, 402, 402, 402, 572, 401, + 401, 401, 401, 201, 202, 202, 202, 202, 372, 402, 402, 402, + 402, 572, 402, 402, 402, 402, 402, 202, 202, 202, 202, 372, + 402, 402, 12, 402, 402, 402, 402, 402, 402, 202, 202, 412, + 402, 542, 402, 402, 402, 402, 402, 402, 402, 202, 442, 542, + 402, 402, 402, 402, 402, 402, 442, 472, 452, 452, 452, 472, + 341, 401, 402, 402, 402, 42, 41, 201, 202, 202, 202, 342, + 1, 2, 2, 2, 2, 201, 202, 202, 202, 202, 411, 1, + 2, 2, 2, 42, 11, 201, 202, 202, 202, 342, 411, 1, + 2, 2, 2, 112, 11, 201, 202, 202, 202, 312, 201, 541, + 441, 1, 1, 2, 2, 2, 2, 201, 202, 202, 202, 202, + 202, 1, 1, 1, 1, 2, 2, 2, 2, 2, 72, 202, + 202, 202, 202, 272, 202, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 72, 202, 202, 202, 272, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 112, 202, 312, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 142, 242, 242, 2, 2, 2, 2, 2, + 2, 142, 172, 152, 152, 152, 172, 401, 402, 402, 402, 402, + 201, 202, 202, 202, 202, 241, 401, 402, 402, 402, 402, 572, + 141, 201, 202, 202, 202, 202, 372, 401, 401, 402, 402, 402, + 402, 552, 211, 211, 401, 201, 202, 202, 202, 202, 352, 402, + 402, 402, 402, 402, 552, 401, 401, 401, 402, 202, 202, 202, + 202, 352, 402, 402, 402, 402, 552, 402, 402, 402, 402, 402, + 202, 202, 202, 352, 402, 402, 402, 572, 402, 402, 402, 402, + 402, 402, 202, 202, 372, 402, 542, 402, 402, 402, 402, 402, + 402, 402, 442, 542, 512, 402, 402, 402, 512, 442, 472, 472, + 341, 1, 2, 2, 42, 41, 201, 202, 202, 342, 1, 2, + 2, 2, 201, 202, 202, 202, 441, 1, 2, 2, 2, 72, + 541, 201, 202, 202, 202, 272, 1, 511, 511, 1, 1, 2, + 2, 2, 72, 201, 202, 202, 202, 272, 2, 1, 1, 1, + 2, 2, 2, 2, 72, 202, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 2, 72, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 142, 242, 242, 212, 212, 212, 212, 142, + 401, 402, 402, 402, 201, 202, 202, 202, 311, 401, 402, 402, + 42, 111, 201, 202, 202, 342, 311, 401, 402, 402, 12, 111, + 201, 202, 202, 412, 401, 401, 402, 402, 12, 241, 141, 201, + 201, 202, 202, 412, 402, 402, 402, 12, 401, 401, 401, 401, + 202, 202, 202, 412, 402, 402, 12, 402, 402, 402, 402, 402, + 202, 202, 412, 402, 542, 402, 402, 402, 402, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 442, 472, 472, 472, 472, + 341, 401, 402, 402, 42, 41, 201, 202, 202, 342, 1, 2, + 2, 2, 201, 202, 202, 202, 411, 1, 2, 2, 42, 11, + 201, 202, 202, 342, 411, 1, 2, 2, 112, 11, 201, 202, + 202, 312, 201, 541, 441, 1, 1, 2, 2, 112, 201, 202, + 202, 312, 202, 1, 1, 1, 1, 2, 2, 2, 112, 202, + 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, 112, 202, + 312, 202, 2, 2, 2, 2, 2, 2, 2, 142, 242, 242, + 2, 2, 2, 2, 2, 142, 172, 172, 172, 172, 401, 402, + 402, 402, 201, 202, 202, 202, 241, 401, 402, 402, 402, 572, + 141, 201, 202, 202, 202, 372, 401, 401, 402, 402, 402, 572, + 211, 211, 401, 201, 202, 202, 202, 372, 402, 402, 402, 402, + 572, 401, 401, 401, 402, 202, 202, 202, 372, 402, 402, 402, + 572, 402, 402, 402, 402, 402, 202, 202, 372, 402, 542, 402, + 402, 402, 402, 402, 402, 442, 542, 512, 512, 512, 512, 442, + 341, 1, 2, 2, 42, 41, 201, 202, 202, 342, 1, 2, + 2, 2, 201, 202, 202, 202, 441, 1, 2, 2, 2, 72, + 541, 201, 202, 202, 202, 272, 1, 511, 511, 1, 1, 2, + 2, 2, 72, 201, 202, 202, 202, 272, 2, 2, 1, 2, + 2, 2, 2, 2, 72, 202, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 2, 72, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 142, 242, 242, 212, 212, 212, 212, 142, + 401, 402, 402, 402, 201, 202, 202, 202, 311, 402, 402, 402, + 42, 111, 202, 202, 202, 342, 311, 401, 402, 402, 12, 111, + 201, 202, 202, 412, 401, 402, 402, 402, 12, 241, 141, 201, + 202, 202, 202, 412, 402, 402, 402, 12, 401, 401, 401, 401, + 202, 202, 202, 412, 402, 402, 12, 402, 402, 402, 402, 402, + 202, 202, 412, 402, 542, 402, 402, 402, 402, 402, 402, 202, + 442, 542, 402, 402, 402, 402, 402, 442, 472, 472, 472, 472, + 341, 402, 402, 402, 42, 41, 202, 202, 202, 342, 1, 2, + 2, 2, 201, 202, 202, 202, 411, 2, 2, 2, 42, 11, + 202, 202, 202, 342, 411, 2, 2, 2, 112, 11, 202, 202, + 202, 312, 201, 541, 441, 1, 2, 2, 2, 112, 202, 202, + 202, 312, 202, 2, 1, 1, 2, 2, 2, 2, 112, 202, + 202, 312, 202, 2, 2, 2, 2, 2, 2, 2, 112, 202, + 312, 202, 2, 2, 2, 2, 2, 2, 2, 142, 242, 242, + 2, 2, 2, 2, 2, 142, 172, 172, 172, 172, 401, 402, + 402, 402, 201, 202, 202, 202, 241, 401, 402, 402, 402, 572, + 141, 201, 202, 202, 202, 372, 401, 402, 402, 402, 402, 572, + 211, 211, 401, 202, 202, 202, 202, 372, 402, 402, 402, 402, + 572, 402, 402, 402, 402, 202, 202, 202, 372, 402, 402, 402, + 572, 402, 402, 402, 402, 402, 202, 202, 372, 402, 542, 402, + 402, 402, 402, 402, 402, 442, 542, 512, 512, 512, 512, 442, + 341, 2, 2, 42, 41, 202, 202, 342, 1, 2, 2, 201, + 202, 202, 441, 1, 2, 2, 72, 541, 201, 202, 202, 272, + 1, 511, 511, 1, 2, 2, 2, 72, 202, 202, 202, 272, + 2, 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 2, + 2, 2, 2, 2, 2, 142, 242, 242, 212, 212, 212, 142, + 401, 402, 402, 201, 202, 202, 311, 402, 402, 42, 111, 202, + 202, 342, 311, 402, 402, 12, 111, 202, 202, 412, 401, 402, + 402, 12, 241, 141, 201, 202, 202, 412, 402, 402, 12, 402, + 401, 401, 402, 202, 202, 412, 402, 542, 402, 402, 402, 402, + 402, 202, 442, 542, 402, 402, 402, 402, 442, 472, 472, 472, + 341, 402, 402, 42, 41, 202, 202, 342, 1, 2, 2, 201, + 202, 202, 411, 2, 2, 42, 11, 202, 202, 342, 411, 2, + 2, 112, 11, 202, 202, 312, 201, 541, 441, 1, 2, 2, + 112, 202, 202, 312, 202, 2, 1, 1, 2, 2, 2, 112, + 202, 312, 202, 2, 2, 2, 2, 2, 2, 142, 242, 242, + 2, 2, 2, 2, 142, 172, 172, 172, 401, 402, 402, 201, + 202, 202, 241, 401, 402, 402, 572, 141, 201, 202, 202, 372, + 401, 402, 402, 402, 572, 211, 211, 401, 202, 202, 202, 372, + 402, 402, 402, 572, 402, 402, 402, 402, 202, 202, 372, 402, + 542, 402, 402, 402, 402, 402, 442, 542, 512, 512, 512, 442, + 341, 2, 2, 42, 41, 202, 202, 342, 2, 2, 2, 202, + 202, 202, 441, 2, 2, 2, 72, 541, 202, 202, 202, 272, + 1, 511, 511, 1, 2, 2, 2, 72, 202, 202, 202, 272, + 2, 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 2, + 2, 2, 2, 2, 2, 142, 242, 242, 212, 212, 212, 142, + 401, 402, 402, 201, 202, 202, 311, 402, 402, 42, 111, 202, + 202, 342, 311, 402, 402, 12, 111, 202, 202, 412, 401, 402, + 402, 12, 241, 141, 201, 202, 202, 412, 402, 402, 12, 402, + 402, 402, 402, 202, 202, 412, 402, 542, 402, 402, 402, 402, + 402, 202, 442, 542, 402, 402, 402, 402, 442, 472, 472, 472, + 342, 402, 402, 42, 42, 202, 202, 342, 2, 2, 2, 202, + 202, 202, 411, 2, 2, 42, 11, 202, 202, 342, 411, 2, + 2, 112, 11, 202, 202, 312, 202, 542, 442, 2, 2, 2, + 112, 202, 202, 312, 202, 2, 2, 2, 2, 2, 2, 112, + 202, 312, 202, 2, 2, 2, 2, 2, 2, 142, 242, 242, + 2, 2, 2, 2, 142, 172, 172, 172, 402, 402, 402, 202, + 202, 202, 242, 402, 402, 402, 572, 142, 202, 202, 202, 372, + 402, 402, 402, 402, 572, 211, 211, 402, 202, 202, 202, 372, + 402, 402, 402, 572, 402, 402, 402, 402, 202, 202, 372, 402, + 542, 402, 402, 402, 402, 402, 442, 542, 512, 512, 512, 442 + + + 0, 300, 600, 900, 1200, 1428, 1656, 1824, 1992, 2160, + 2328, 2448, 2568, 2688 + + + 1037.83*mm, 1060.98*mm, 1084.12*mm, 1108.3*mm, 1132.48*mm, 1157.73*mm, + 1182.99*mm, 1209.37*mm, 1235.75*mm, 1263.31*mm, 1290.87*mm, 1319.66*mm, + 1348.45*mm, 1378.52*mm, 1408.59*mm, 1440*mm, 1471.42*mm, 1504.23*mm, + 1537.05*mm, 1571.33*mm, 1605.6*mm, 1641.41*mm, 1677.22*mm, 1714.62*mm, + 1752.03*mm, 1791.1*mm, 1830.17*mm, 1870.99*mm, 1911.8*mm, 1954.44*mm, + 1997.08*mm, 2041.61*mm, 2086.15*mm, 2132.67*mm, 2179.2*mm, 2227.8*mm, + 2276.4*mm, 2327.16*mm, 2377.93*mm, 2430.96*mm, 2483.99*mm, 2539.39*mm + + + 1060.98*mm, 1084.12*mm, 1108.3*mm, 1132.48*mm, 1157.73*mm, 1182.99*mm, + 1209.37*mm, 1235.75*mm, 1263.31*mm, 1290.87*mm, 1319.66*mm, 1348.45*mm, + 1378.52*mm, 1408.59*mm, 1440*mm, 1471.42*mm, 1504.23*mm, 1537.05*mm, + 1571.33*mm, 1605.6*mm, 1641.41*mm, 1677.22*mm, 1714.62*mm, 1752.03*mm, + 1791.1*mm, 1830.17*mm, 1870.99*mm, 1911.8*mm, 1954.44*mm, 1997.08*mm, + 2041.61*mm, 2086.15*mm, 2132.67*mm, 2179.2*mm, 2227.8*mm, 2276.4*mm, + 2327.16*mm, 2377.93*mm, 2430.96*mm, 2483.99*mm, 2539.39*mm, 2594.79*mm + + + 9019026, 9019028, 9019030, 9019028, 9019026, 9019028, 9019030, + 9019028, 9019026, 9019028, 9019030, 9019028, 9019026, 9019028, + 9019030, 9019028, 9019026, 9019028, 9019030, 9019028, 9019026, + 9019028, 9019030, 9019028, 9019026, 9019028, 9019030, 9019028, + 9019026, 9019028, 9019030, 9019028, 9019026, 9019028, 9019030, + 9019028, 9019026, 9019028, 9019030, 9019028, 9019026, 9019028, + 9019030, 9019028, 9019026, 9019028, 9019030, 9019028, 9019026, + 10019028, 10019032, 10019028, 10019032, 10019028, 10019032, 10019028, + 10019032, 10019028, 10019032, 10019028, 10019032, 10019028, 10019032, + 10019028, 10019032, 10019028, 10019032, 10019028, 10019032, 10019028, + 10019032, 10019028, 10019032, 10019028, 11019030, 11019033, 11019030, + 11019033, 11019030, 11019033, 11019030, 11019033, 11019030, 11019033, + 11019030, 11019033, 11019030, 11019033, 11019030, 11019033, 11019030, + 11019033, 11019030, 11019033, 11019030, 11019033, 11019030, 11019033, + 11019030, 12019032, 12019034, 12019032, 12019034, 12019032, 12019034, + 12019032, 12019034, 12019032, 12019034, 12019032, 12019034, 12019032, + 12019034, 12019032, 12019034, 12019032, 12019034, 12019032, 12019034, + 12019032, 12019034, 12019032, 12019034, 12019032, 13014034, 13014037, + 13014034, 13014037, 13014034, 13014037, 13014034, 13014037, 13014034, + 13014037, 13014034, 13014037, 13014034, 13014037, 13014034, 13014037, + 13014034, 13014037, 13014034, 13014037, 13014034, 13014037, 13014034, + 13014037, 13014034, 14014036, 14014039, 14014036, 14014039, 14014036, + 14014039, 14014036, 14014039, 14014036, 14014039, 14014036, 14014039, + 14014036, 14014039, 14014036, 14014039, 14014036, 14014039, 14014036, + 14014039, 14014036, 14014039, 14014036, 14014039, 14014036, 15008038, + 15008041, 15007041, 15007038, 15007041, 15008041, 15008038, 15008041, + 15007041, 15007038, 15007041, 15008041, 15008038, 15008041, 15007041, + 15007038, 15007041, 15008041, 15008038, 15008041, 15007041, 15007038, + 15007041, 15008041, 15008038, 15008041, 15007041, 15007038, 15007041, + 15008041, 15008038, 15008041, 15007041, 15007038, 15007041, 15008041, + 15008038, 16008040, 16008042, 16007042, 16007040, 16007042, 16008042, + 16008040, 16008042, 16007042, 16007040, 16007042, 16008042, 16008040, + 16008042, 16007042, 16007040, 16007042, 16008042, 16008040, 16008042, + 16007042, 16007040, 16007042, 16008042, 16008040, 16008042, 16007042, + 16007040, 16007042, 16008042, 16008040, 16008042, 16007042, 16007040, + 16007042, 16008042, 16008040, 17008040, 17008042, 17007042, 17007040, + 17007042, 17008042, 17008040, 17008042, 17007042, 17007040, 17007042, + 17008042, 17008040, 17008042, 17007042, 17007040, 17007042, 17008042, + 17008040, 17008042, 17007042, 17007040, 17007042, 17008042, 17008040, + 17008042, 17007042, 17007040, 17007042, 17008042, 17008040, 17008042, + 17007042, 17007040, 17007042, 17008042, 17008040, 18008040, 18008042, + 18007042, 18007040, 18007042, 18008042, 18008040, 18008042, 18007042, + 18007040, 18007042, 18008042, 18008040, 18008042, 18007042, 18007040, + 18007042, 18008042, 18008040, 18008042, 18007042, 18007040, 18007042, + 18008042, 18008040, 18008042, 18007042, 18007040, 18007042, 18008042, + 18008040, 18008042, 18007042, 18007040, 18007042, 18008042, 18008040, + 19001040, 19001042, 19002042, 19001042, 19001040, 19001042, 19002042, + 19001042, 19001040, 19001042, 19002042, 19001042, 19001040, 19001042, + 19002042, 19001042, 19001040, 19001042, 19002042, 19001042, 19001040, + 19001042, 19002042, 19001042, 19001040, 19001042, 19002042, 19001042, + 19001040, 19001042, 19002042, 19001042, 19001040, 19001042, 19002042, + 19001042, 19001040, 19001042, 19002042, 19001042, 19001040, 19001042, + 19002042, 19001042, 19001040, 19001042, 19002042, 19001042, 19001040, + 20001040, 20001042, 20002042, 20001042, 20001040, 20001042, 20002042, + 20001042, 20001040, 20001042, 20002042, 20001042, 20001040, 20001042, + 20002042, 20001042, 20001040, 20001042, 20002042, 20001042, 20001040, + 20001042, 20002042, 20001042, 20001040, 20001042, 20002042, 20001042, + 20001040, 20001042, 20002042, 20001042, 20001040, 20001042, 20002042, + 20001042, 20001040, 20001042, 20002042, 20001042, 20001040, 20001042, + 20002042, 20001042, 20001040, 20001042, 20002042, 20001042, 20001040, + 21001040, 21001042, 21002042, 21001042, 21001040, 21001042, 21002042, + 21001042, 21001040, 21001042, 21002042, 21001042, 21001040, 21001042, + 21002042, 21001042, 21001040, 21001042, 21002042, 21001042, 21001040, + 21001042, 21002042, 21001042, 21001040, 21001042, 21002042, 21001042, + 21001040, 21001042, 21002042, 21001042, 21001040, 21001042, 21002042, + 21001042, 21001040, 21001042, 21002042, 21001042, 21001040, 21001042, + 21002042, 21001042, 21001040, 21001042, 21002042, 21001042, 21001040, + 22001040, 22002040, 22001040, 22002040, 22001040, 22002040, 22001040, + 22002040, 22001040, 22002040, 22001040, 22002040, 22001040, 22002040, + 22001040, 22002040, 22001040, 22002040, 22001040, 22002040, 22001040, + 22002040, 22001040, 22002040, 22001040 + + + 1001, 2002, 3022, 23023, 24025, 26026, 27046, 47047, 48049, + 50050, 51070, 71071, 72073, 74074, 75094, 95095, 96097, 98098, + 99118, 119119, 120121, 122122, 123142, 143143, 144145, 146146, 147166, + 167167, 168169, 170170, 171190, 191191, 192193, 194194, 195214, 215215, + 216217, 218218, 219238, 239239, 240241, 242242, 243262, 263263, 264265, + 266266, 267286, 287287, 288288, 1002, 3022, 23026, 27046, 47050, + 51070, 71074, 75094, 95098, 99118, 119122, 123142, 143146, 147166, + 167170, 171190, 191194, 195214, 215218, 219238, 239242, 243262, 263266, + 267286, 287288, 1002, 3022, 23026, 27046, 47050, 51070, 71074, + 75094, 95098, 99118, 119122, 123142, 143146, 147166, 167170, 171190, + 191194, 195214, 215218, 219238, 239242, 243262, 263266, 267286, 287288, + 1002, 3022, 23026, 27046, 47050, 51070, 71074, 75094, 95098, + 99118, 119122, 123142, 143146, 147166, 167170, 171190, 191194, 195214, + 215218, 219238, 239242, 243262, 263266, 267286, 287288, 1002, 3022, + 23026, 27046, 47050, 51070, 71074, 75094, 95098, 99118, 119122, + 123142, 143146, 147166, 167170, 171190, 191194, 195214, 215218, 219238, + 239242, 243262, 263266, 267286, 287288, 1002, 3022, 23026, 27046, + 47050, 51070, 71074, 75094, 95098, 99118, 119122, 123142, 143146, + 147166, 167170, 171190, 191194, 195214, 215218, 219238, 239242, 243262, + 263266, 267286, 287288, 1002, 3016, 17022, 23026, 27032, 33046, + 47050, 51064, 65070, 71074, 75080, 81094, 95098, 99112, 113118, + 119122, 123128, 129142, 143146, 147160, 161166, 167170, 171176, 177190, + 191194, 195208, 209214, 215218, 219224, 225238, 239242, 243256, 257262, + 263266, 267272, 273286, 287288, 1002, 3016, 17022, 23026, 27032, + 33046, 47050, 51064, 65070, 71074, 75080, 81094, 95098, 99112, + 113118, 119122, 123128, 129142, 143146, 147160, 161166, 167170, 171176, + 177190, 191194, 195208, 209214, 215218, 219224, 225238, 239242, 243256, + 257262, 263266, 267272, 273286, 287288, 1002, 3016, 17022, 23026, + 27032, 33046, 47050, 51064, 65070, 71074, 75080, 81094, 95098, + 99112, 113118, 119122, 123128, 129142, 143146, 147160, 161166, 167170, + 171176, 177190, 191194, 195208, 209214, 215218, 219224, 225238, 239242, + 243256, 257262, 263266, 267272, 273286, 287288, 1002, 3016, 17022, + 23026, 27032, 33046, 47050, 51064, 65070, 71074, 75080, 81094, + 95098, 99112, 113118, 119122, 123128, 129142, 143146, 147160, 161166, + 167170, 171176, 177190, 191194, 195208, 209214, 215218, 219224, 225238, + 239242, 243256, 257262, 263266, 267272, 273286, 287288, 1002, 3008, + 9016, 17022, 23026, 27032, 33040, 41046, 47050, 51056, 57064, + 65070, 71074, 75080, 81088, 89094, 95098, 99104, 105112, 113118, + 119122, 123128, 129136, 137142, 143146, 147152, 153160, 161166, 167170, + 171176, 177184, 185190, 191194, 195200, 201208, 209214, 215218, 219224, + 225232, 233238, 239242, 243248, 249256, 257262, 263266, 267272, 273280, + 281286, 287288, 1002, 3008, 9016, 17022, 23026, 27032, 33040, + 41046, 47050, 51056, 57064, 65070, 71074, 75080, 81088, 89094, + 95098, 99104, 105112, 113118, 119122, 123128, 129136, 137142, 143146, + 147152, 153160, 161166, 167170, 171176, 177184, 185190, 191194, 195200, + 201208, 209214, 215218, 219224, 225232, 233238, 239242, 243248, 249256, + 257262, 263266, 267272, 273280, 281286, 287288, 1002, 3008, 9016, + 17022, 23026, 27032, 33040, 41046, 47050, 51056, 57064, 65070, + 71074, 75080, 81088, 89094, 95098, 99104, 105112, 113118, 119122, + 123128, 129136, 137142, 143146, 147152, 153160, 161166, 167170, 171176, + 177184, 185190, 191194, 195200, 201208, 209214, 215218, 219224, 225232, + 233238, 239242, 243248, 249256, 257262, 263266, 267272, 273280, 281286, + 287288, 1008, 9016, 17032, 33040, 41056, 57064, 65080, 81088, + 89104, 105112, 113128, 129136, 137152, 153160, 161176, 177184, 185200, + 201208, 209224, 225232, 233248, 249256, 257272, 273280, 281288 + + + 0, 49, 74, 99, 124, 149, 174, 211, 248, 285, + 322, 371, 420, 469 + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalHEmix/v9a/hgcalHEmix.xml b/Geometry/HGCalCommonData/data/hgcalHEmix/v9a/hgcalHEmix.xml deleted file mode 100644 index 1ce2d184c93ef..0000000000000 --- a/Geometry/HGCalCommonData/data/hgcalHEmix/v9a/hgcalHEmix.xml +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - hgcalwafer:HGCalHEWafer0Fine, hgcalwafer:HGCalHEWafer0Coarse1, - hgcalwafer:HGCalHEWafer0Coarse2, hgcalwafer:HGCalHEWafer1Fine, - hgcalwafer:HGCalHEWafer1Coarse1, hgcalwafer:HGCalHEWafer1Coarse2 - - materials:StainlessSteel, materials:StainlessSteel, materials:Air, - materials:Copper, materials:Air, materials:Copper - - HGCalHEAbsorber1, HGCalHEAbsorber2, HGCalHEAirGap1, HGCalHECopperCover, - HGCalHEMix, HGCalHEHeatShield - - 35.0*mm, 68.0*mm, 1.0*mm, 1.0*mm, 7.9*mm, 6.0*mm - - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 - - 50.9*mm, 50.9*mm, 50.9*mm, 50.9*mm, 83.9*mm, 83.9*mm, - 83.9*mm, 83.9*mm, 83.9*mm, 83.9*mm, 83.9*mm, 83.9*mm, - 83.9*mm, 83.9*mm, 83.9*mm, 83.9*mm - - [hgcal:radMixL0], [hgcal:radMixL1], [hgcal:radMixL2], - [hgcal:radMixL3], [hgcal:radMixL4], [hgcal:radMixL5], - [hgcal:radMixL6], [hgcal:radMixL7], [hgcal:radMixL8], - [hgcal:radMixL9], [hgcal:radMixL10], [hgcal:radMixL11], - [hgcal:radMixL12], [hgcal:radMixL13], [hgcal:radMixL14], - [hgcal:radMixL15] - - 0, 2, 3, 4, 5, 0, 2, 3, 4, 5, 0, 2, 3, 4, 5, - 0, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, - 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, - 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, - 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, - 1, 2, 3, 4, 5 - - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 1, 0 - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - - materials:Cables, materials:H_Scintillator, - hgcalMaterial:HGC_G10-FR4 - - HGCalCableConnector, HGCalHEScintillatorSensitive, HGCalTopPCB - - 3.3*mm, [hgcal:ScintillatorThickness], 1.6*mm - - 0, 1, 2 - - materials:Air, hgcalMaterial:HGC_G10-FR4, materials:Air, - materials:Silicon, hgcalMaterial:HGC_G10-FR4 - - HGCalAirGap1, HGCalBottomPCB, HGCalAirGap2, HGCalHESiliconSensitive, - HGCalBaseplate - - 1.9*mm, 1.6*mm, 1.5*mm, 0.3*mm, 1.0*mm - - 0, 1, 2, 1, 3, 4 - - 0, 0, 0, 0, 1, 0 - - - - - - [hgcal:rad100200P0], [hgcal:rad100200P1], [hgcal:rad100200P2], - [hgcal:rad100200P3], [hgcal:rad100200P4] - - [hgcal:rad200300P0], [hgcal:rad200300P1], [hgcal:rad200300P2], - [hgcal:rad200300P3], [hgcal:rad200300P4] - - - - - - - - - [hgcal:slope1], [hgcal:slope1], [hgcal:slope1], [hgcal:slope1], - [hgcal:slope1], [hgcal:slope1], [hgcal:slope1] - - [hgcal:zB1], [hgcal:zB2], [hgcal:zB3], [hgcal:zB4], - [hgcal:zB5], [hgcal:zB6], [hgcal:zB7] - - [hgcal:rB1], [hgcal:rB3], [hgcal:rB4], [hgcal:rB5], - [hgcal:rB6], [hgcal:rB7], [hgcal:rB7] - - [hgcal:slope2], [hgcal:slope3], 0, 0 - - [hgcal:zHGCal1], [hgcal:zHGCal2], [hgcal:zHGCal3], - [hgcal:zHGCal4] - - [hgcal:rMaxHGCal1], [hgcal:rMaxHGCal2], [hgcal:rMaxHGCal3], - [hgcal:rMaxHGCal4] - - - - - diff --git a/Geometry/HGCalCommonData/data/hgcalHEsil/v14/hgcalHEsil.xml b/Geometry/HGCalCommonData/data/hgcalHEsil/v14/hgcalHEsil.xml index 202c58423d053..520d8b658840f 100644 --- a/Geometry/HGCalCommonData/data/hgcalHEsil/v14/hgcalHEsil.xml +++ b/Geometry/HGCalCommonData/data/hgcalHEsil/v14/hgcalHEsil.xml @@ -1,5 +1,5 @@ - + @@ -50,13 +50,6 @@ - - [hgcal:rad100200P0], [hgcal:rad100200P1], [hgcal:rad100200P2], - [hgcal:rad100200P3], [hgcal:rad100200P4] - - [hgcal:rad200300P0], [hgcal:rad200300P1], [hgcal:rad200300P2], - [hgcal:rad200300P3], [hgcal:rad200300P4] - 262146, 262147, 262148, 262149, 262150, 262151, 262152, 262153, 262178, 262179, 262180, 262181, 262182, 262183, @@ -508,171 +501,273 @@ 2099879, 2099880, 2099881, 2099882, 2099883, 2099884, 2099937, 2099938, 2099939, 2099940, 2099941, 2099942, 2099943, 2099944, 2099945, 2099946, 2100002, 2100003, 2100004, 2100005, 2100007, - 2100008, 2100009, 2100010 + 2100008, 2100009, 2100010 - - 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, - 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, - 1, 1, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 1, 0, 0, 0, 1, 1, 1, - 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, - 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, - 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, - 2, 2, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, - 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 2, 2, - 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 1, - 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 1, - 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, - 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, - 1, 1, 1, 1, 2, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, - 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, - 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, - 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, - 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, - 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, - 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, - 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 1, 1, - 1, 2, 2, 2, 2, 2, 1, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, - 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, - 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 0, 0, 1, - 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, - 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 1, 1, 1, 2, - 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, - 2, 2, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 1, 1, 2, 2, 2, 2, 0, 0, 0, 1, 1, 2, 2, 2, 2, 0, 0, 0, - 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 1, - 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, - 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, - 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, - 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 0, - 0, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, - 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 0, - 1, 1, 1, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 1, 1, 2, - 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, - 1, 2, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 2, 1, 0, 0, 0, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, - 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, - 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 0, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 1, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 2, 0, 1, 1, 1, 2, - 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, - 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, - 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, - 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 + + 340, 0, 0, 1, 1, 1, 2, 2, 40, 200, 200, 201, + 201, 201, 202, 202, 440, 0, 0, 1, 1, 1, 2, 2, + 42, 540, 200, 200, 201, 201, 201, 202, 202, 342, 0, 510, + 0, 0, 0, 1, 1, 1, 2, 2, 2, 200, 200, 201, + 201, 201, 202, 202, 202, 0, 0, 0, 0, 0, 1, 1, + 1, 2, 2, 2, 72, 200, 201, 201, 201, 202, 202, 202, + 272, 1, 0, 0, 0, 1, 1, 1, 1, 2, 2, 212, + 72, 201, 201, 201, 202, 202, 212, 272, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 12, 201, 201, 202, 202, 412, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, + 201, 202, 202, 202, 272, 2, 2, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 72, 202, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 142, 202, 242, 272, 2, + 2, 2, 2, 2, 2, 2, 2, 72, 242, 212, 2, 172, + 2, 212, 142, 400, 400, 401, 401, 401, 402, 402, 72, 200, + 200, 201, 201, 201, 202, 202, 272, 310, 400, 400, 401, 401, + 402, 402, 402, 110, 200, 200, 201, 201, 202, 202, 202, 400, + 400, 400, 401, 401, 401, 402, 402, 42, 240, 140, 200, 200, + 200, 201, 201, 201, 202, 202, 342, 400, 400, 401, 401, 401, + 402, 402, 12, 400, 400, 400, 200, 200, 201, 201, 201, 202, + 202, 412, 401, 401, 401, 401, 402, 402, 402, 400, 400, 400, + 400, 201, 201, 201, 201, 202, 202, 202, 401, 401, 401, 402, + 402, 572, 401, 401, 401, 401, 401, 201, 201, 201, 202, 202, + 372, 401, 402, 402, 402, 402, 401, 401, 401, 401, 401, 401, + 201, 202, 202, 202, 202, 402, 402, 402, 12, 401, 401, 401, + 401, 401, 401, 401, 202, 202, 202, 412, 402, 402, 542, 402, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 442, 472, 402, + 402, 402, 402, 402, 402, 402, 402, 402, 472, 542, 402, 402, + 412, 12, 402, 402, 442, 472, 472, 472, 472, 340, 400, 400, + 401, 401, 402, 402, 402, 40, 200, 200, 201, 201, 202, 202, + 202, 400, 400, 401, 401, 401, 402, 402, 542, 0, 0, 1, + 1, 1, 2, 2, 442, 410, 400, 401, 401, 401, 402, 402, + 402, 72, 10, 0, 1, 1, 1, 2, 2, 2, 272, 0, + 540, 440, 400, 400, 400, 401, 401, 401, 402, 402, 42, 0, + 0, 1, 1, 1, 2, 2, 342, 0, 0, 0, 0, 400, + 401, 401, 401, 401, 402, 402, 402, 1, 1, 1, 1, 2, + 2, 2, 1, 0, 0, 0, 0, 401, 401, 401, 401, 402, + 402, 402, 72, 1, 1, 1, 2, 2, 2, 272, 1, 1, + 1, 1, 1, 1, 401, 401, 401, 402, 402, 52, 1, 1, + 2, 2, 252, 1, 1, 1, 1, 1, 1, 1, 401, 402, + 402, 402, 402, 2, 2, 2, 2, 2, 2, 1, 1, 1, + 1, 1, 2, 402, 402, 402, 402, 72, 2, 2, 2, 272, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 402, 402, 142, + 2, 242, 142, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 242, 72, 272, 242, 2, 2, 2, 2, 2, 2, 142, 172, + 152, 152, 172, 240, 400, 400, 401, 401, 401, 402, 402, 42, + 140, 200, 200, 201, 201, 201, 202, 202, 342, 200, 400, 400, + 401, 401, 401, 402, 402, 402, 210, 200, 200, 200, 201, 201, + 201, 202, 202, 202, 200, 400, 401, 401, 401, 402, 402, 402, + 572, 200, 200, 200, 200, 201, 201, 201, 202, 202, 202, 372, + 201, 401, 401, 401, 402, 402, 402, 552, 201, 200, 201, 201, + 201, 201, 201, 202, 202, 202, 352, 201, 401, 401, 402, 402, + 402, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, 201, + 402, 402, 402, 402, 552, 201, 201, 201, 201, 201, 201, 202, + 202, 202, 202, 352, 202, 402, 402, 402, 572, 202, 201, 201, + 201, 201, 202, 202, 202, 202, 202, 372, 202, 402, 542, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 442, 42, 202, 202, + 202, 202, 202, 202, 202, 202, 342, 472, 542, 202, 202, 452, + 202, 202, 442, 472, 472, 472, 340, 0, 1, 1, 1, 2, + 2, 2, 572, 40, 200, 201, 201, 201, 202, 202, 202, 372, + 440, 0, 0, 1, 1, 1, 2, 2, 2, 540, 200, 200, + 201, 201, 201, 202, 202, 202, 0, 510, 0, 0, 0, 1, + 1, 1, 2, 2, 2, 72, 200, 200, 201, 201, 201, 202, + 202, 202, 272, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 2, 2, 52, 201, 201, 201, 201, 202, 202, 202, 252, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 52, 201, + 201, 201, 202, 202, 202, 252, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 201, 201, 202, 202, 202, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 52, 202, 202, + 202, 202, 252, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 52, 202, 202, 202, 252, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 342, 2, + 2, 2, 2, 2, 2, 2, 2, 42, 172, 172, 242, 212, + 2, 2, 152, 2, 2, 212, 142, 172, 172, 400, 400, 401, + 401, 401, 402, 402, 142, 200, 200, 201, 201, 201, 202, 202, + 242, 310, 400, 401, 401, 401, 402, 402, 402, 42, 110, 200, + 201, 201, 201, 202, 202, 202, 342, 400, 400, 401, 401, 401, + 402, 402, 402, 12, 240, 140, 200, 200, 201, 201, 201, 202, + 202, 202, 412, 400, 401, 401, 401, 402, 402, 402, 402, 400, + 400, 400, 200, 201, 201, 201, 202, 202, 202, 202, 401, 401, + 401, 402, 402, 402, 402, 572, 401, 400, 400, 401, 201, 201, + 201, 202, 202, 202, 202, 372, 401, 401, 402, 402, 402, 552, + 401, 401, 401, 401, 401, 201, 201, 202, 202, 202, 352, 401, + 402, 402, 402, 402, 401, 401, 401, 401, 401, 401, 201, 202, + 202, 202, 202, 402, 402, 402, 402, 572, 402, 401, 401, 401, + 401, 401, 402, 202, 202, 202, 202, 372, 402, 402, 12, 402, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 412, 442, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 402, 542, 442, 572, + 402, 402, 402, 402, 402, 402, 402, 402, 372, 472, 452, 452, + 452, 452, 472, 340, 400, 401, 401, 401, 402, 402, 402, 72, + 40, 200, 201, 201, 201, 202, 202, 202, 272, 400, 400, 401, + 401, 402, 402, 402, 542, 0, 0, 1, 1, 2, 2, 2, + 442, 410, 400, 401, 401, 401, 402, 402, 402, 42, 10, 0, + 1, 1, 1, 2, 2, 2, 342, 0, 540, 440, 400, 400, + 401, 401, 401, 402, 402, 402, 402, 0, 1, 1, 1, 2, + 2, 2, 2, 0, 0, 0, 0, 400, 401, 401, 401, 402, + 402, 402, 402, 72, 1, 1, 1, 2, 2, 2, 2, 272, + 1, 1, 0, 0, 1, 401, 401, 401, 402, 402, 402, 402, + 72, 1, 1, 2, 2, 2, 2, 272, 1, 1, 1, 1, + 1, 1, 401, 401, 402, 402, 402, 52, 1, 2, 2, 2, + 252, 2, 1, 1, 1, 1, 1, 1, 402, 402, 402, 402, + 402, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, + 2, 402, 402, 402, 402, 72, 2, 2, 2, 272, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 402, 402, 402, 72, 2, + 2, 272, 142, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 242, 142, 242, 272, 2, 2, 2, 2, 2, 2, 2, 2, + 72, 172, 242, 212, 212, 142, 172, 240, 400, 400, 401, 401, + 402, 402, 402, 402, 140, 200, 200, 201, 201, 202, 202, 202, + 202, 200, 400, 400, 401, 401, 401, 402, 402, 402, 572, 210, + 200, 200, 200, 201, 201, 201, 202, 202, 202, 372, 200, 401, + 401, 401, 401, 402, 402, 402, 42, 200, 200, 200, 201, 201, + 201, 201, 202, 202, 202, 342, 201, 401, 401, 401, 402, 402, + 402, 12, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, + 412, 201, 401, 402, 402, 402, 402, 201, 201, 201, 201, 201, + 201, 202, 202, 202, 202, 202, 402, 402, 402, 402, 12, 201, + 201, 201, 201, 201, 202, 202, 202, 202, 202, 412, 202, 402, + 402, 402, 542, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 442, 202, 402, 402, 572, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 372, 42, 472, 202, 202, 202, 202, 202, + 202, 202, 202, 342, 472, 542, 202, 202, 202, 452, 202, 202, + 202, 442, 472, 472, 472, 472, 340, 0, 1, 1, 1, 2, + 2, 2, 572, 40, 200, 201, 201, 201, 202, 202, 202, 372, + 440, 0, 1, 1, 1, 2, 2, 2, 2, 540, 200, 201, + 201, 201, 202, 202, 202, 202, 0, 510, 0, 0, 1, 1, + 1, 2, 2, 2, 2, 72, 200, 201, 201, 201, 202, 202, + 202, 202, 272, 0, 0, 0, 0, 1, 1, 1, 2, 2, + 2, 2, 42, 201, 201, 201, 202, 202, 202, 202, 342, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 112, 201, + 201, 202, 202, 202, 202, 312, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 201, 202, 202, 202, 202, 2, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 112, 202, 202, + 202, 202, 312, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 142, 202, 202, 202, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 342, 2, + 2, 2, 2, 2, 2, 2, 2, 42, 172, 172, 242, 2, + 2, 2, 152, 2, 2, 2, 142, 172, 152, 152, 172, 400, + 400, 401, 401, 402, 402, 402, 142, 200, 200, 201, 201, 202, + 202, 202, 242, 310, 400, 401, 401, 401, 402, 402, 402, 42, + 110, 200, 201, 201, 201, 202, 202, 202, 342, 400, 400, 401, + 401, 401, 402, 402, 402, 402, 240, 140, 200, 200, 201, 201, + 201, 202, 202, 202, 202, 400, 401, 401, 401, 402, 402, 402, + 402, 572, 400, 400, 400, 200, 201, 201, 201, 202, 202, 202, + 202, 372, 401, 401, 401, 402, 402, 402, 402, 552, 401, 401, + 401, 401, 201, 201, 201, 202, 202, 202, 202, 352, 401, 401, + 402, 402, 402, 552, 401, 401, 401, 401, 401, 201, 201, 202, + 202, 202, 352, 402, 402, 402, 402, 402, 401, 401, 401, 401, + 401, 401, 202, 202, 202, 202, 202, 402, 402, 402, 402, 552, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 402, 402, + 202, 202, 202, 372, 442, 542, 402, 402, 402, 402, 402, 402, + 402, 402, 402, 542, 442, 572, 402, 402, 402, 402, 402, 402, + 402, 402, 372, 472, 542, 512, 512, 442, 472, 340, 400, 401, + 401, 402, 402, 402, 402, 142, 40, 200, 201, 201, 202, 202, + 202, 202, 242, 0, 1, 1, 1, 2, 2, 2, 12, 200, + 201, 201, 201, 202, 202, 202, 412, 410, 0, 1, 1, 2, + 2, 2, 2, 2, 10, 200, 201, 201, 202, 202, 202, 202, + 202, 200, 540, 440, 0, 0, 1, 1, 1, 2, 2, 2, + 2, 72, 200, 201, 201, 201, 202, 202, 202, 202, 272, 201, + 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 52, + 201, 201, 201, 202, 202, 202, 202, 252, 201, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 112, 201, 201, 202, + 202, 202, 202, 312, 201, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 242, 202, 202, 202, 202, 202, 142, 202, + 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 542, + 202, 202, 202, 202, 442, 202, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 112, 202, 202, 202, 312, 202, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 52, 202, + 202, 252, 212, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 212, 2, 72, 202, 272, 342, 2, 2, 2, 2, 2, 2, + 2, 2, 42, 242, 212, 2, 2, 152, 2, 2, 212, 142, + 172, 172, 240, 400, 401, 401, 401, 402, 402, 402, 402, 42, + 140, 200, 201, 201, 201, 202, 202, 202, 202, 342, 400, 400, + 401, 401, 401, 402, 402, 402, 402, 12, 210, 400, 200, 201, + 201, 201, 202, 202, 202, 202, 412, 401, 401, 401, 401, 402, + 402, 402, 402, 402, 400, 400, 401, 201, 201, 201, 202, 202, + 202, 202, 202, 401, 401, 401, 402, 402, 402, 402, 402, 572, + 401, 401, 401, 401, 201, 201, 202, 202, 202, 202, 202, 372, + 401, 402, 402, 402, 402, 402, 552, 401, 401, 401, 401, 401, + 202, 202, 202, 202, 202, 352, 402, 402, 402, 402, 402, 402, + 402, 401, 401, 401, 402, 402, 202, 202, 202, 202, 202, 402, + 402, 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 402, + 202, 202, 202, 202, 372, 402, 402, 402, 12, 402, 402, 402, + 402, 402, 402, 402, 402, 202, 202, 412, 12, 442, 542, 402, + 402, 402, 402, 402, 402, 402, 402, 412, 542, 442, 402, 402, + 402, 402, 402, 402, 402, 402, 402, 472, 452, 512, 342, 42, + 512, 452, 472, 340, 0, 1, 1, 2, 2, 2, 2, 2, + 572, 40, 200, 201, 201, 202, 202, 202, 202, 202, 372, 440, + 0, 1, 1, 1, 2, 2, 2, 2, 2, 540, 200, 201, + 201, 201, 202, 202, 202, 202, 202, 0, 510, 0, 0, 1, + 1, 1, 2, 2, 2, 2, 2, 72, 200, 201, 201, 201, + 202, 202, 202, 202, 202, 272, 1, 0, 0, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 42, 201, 201, 201, 202, 202, + 202, 202, 202, 342, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 112, 201, 201, 202, 202, 202, 202, 202, + 312, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 112, 172, 202, 202, 202, 202, 202, 312, 172, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 572, 202, 202, + 202, 202, 202, 372, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 112, 202, 202, 202, 202, 312, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 142, 202, + 202, 202, 242, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 72, 202, 202, 272, 342, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 42, 172, 172, 242, 212, 2, 2, + 112, 312, 2, 2, 212, 142, 172, 152, 152, 172, 400, 401, + 401, 401, 402, 402, 402, 402, 142, 200, 201, 201, 201, 202, + 202, 202, 202, 242, 310, 400, 401, 401, 402, 402, 402, 402, + 402, 42, 110, 200, 201, 201, 202, 202, 202, 202, 202, 342, + 400, 400, 401, 401, 402, 402, 402, 402, 402, 12, 240, 140, + 200, 200, 201, 201, 202, 202, 202, 202, 202, 412, 401, 401, + 401, 401, 402, 402, 402, 402, 402, 400, 400, 400, 201, 201, + 201, 201, 202, 202, 202, 202, 202, 401, 401, 402, 402, 402, + 402, 402, 402, 572, 401, 401, 401, 401, 201, 201, 202, 202, + 202, 202, 202, 202, 372, 401, 402, 402, 402, 402, 402, 512, + 552, 401, 401, 401, 401, 401, 201, 202, 202, 202, 202, 202, + 512, 352, 402, 402, 402, 402, 402, 112, 402, 401, 401, 401, + 401, 402, 202, 202, 202, 202, 202, 312, 402, 402, 402, 402, + 402, 552, 402, 402, 402, 402, 402, 402, 402, 202, 202, 202, + 202, 202, 352, 402, 402, 402, 402, 572, 402, 402, 402, 402, + 402, 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 12, + 402, 402, 402, 402, 402, 402, 402, 402, 402, 202, 202, 412, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, + 542, 442, 572, 402, 402, 402, 402, 512, 402, 402, 402, 402, + 372, 472, 542, 512, 372, 572, 512, 442, 472, 340, 400, 401, + 401, 402, 402, 402, 402, 402, 142, 40, 200, 201, 201, 202, + 202, 202, 202, 202, 242, 0, 1, 1, 1, 2, 2, 2, + 2, 12, 200, 201, 201, 201, 202, 202, 202, 202, 412, 410, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 10, 201, 201, + 201, 202, 202, 202, 202, 202, 202, 200, 540, 440, 0, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 72, 201, 201, 201, + 202, 202, 202, 202, 202, 202, 272, 201, 0, 0, 0, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 42, 201, 201, 202, + 202, 202, 202, 202, 202, 342, 201, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 112, 201, 202, 202, 202, + 202, 202, 202, 312, 201, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 2, 202, 202, 202, 202, 202, 202, + 202, 202, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 202, 202, 202, 202, 202, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 202, 202, 202, + 202, 202, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 112, 202, 202, 202, 312, 202, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 142, 202, 202, + 242, 212, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 212, 2, 72, 202, 272, 342, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 42, 172, 242, 2, 2, 42, 342, 2, 2, + 142, 172, 172, 172, 172, 172, 240, 400, 401, 401, 402, 402, + 402, 402, 402, 402, 572, 140, 200, 201, 201, 202, 202, 202, + 202, 202, 202, 372, 400, 400, 401, 401, 401, 402, 402, 402, + 402, 402, 42, 210, 400, 200, 201, 201, 201, 202, 202, 202, + 202, 202, 342, 401, 401, 401, 401, 402, 402, 402, 402, 402, + 402, 401, 401, 401, 201, 201, 201, 202, 202, 202, 202, 202, + 202, 401, 401, 402, 402, 402, 402, 402, 402, 402, 572, 401, + 401, 401, 401, 201, 202, 202, 202, 202, 202, 202, 202, 372, + 401, 402, 402, 402, 402, 402, 402, 442, 572, 401, 401, 401, + 401, 401, 202, 202, 202, 202, 202, 202, 542, 372, 402, 402, + 402, 402, 402, 402, 142, 402, 402, 402, 402, 402, 402, 202, + 202, 202, 202, 202, 242, 402, 402, 402, 402, 402, 402, 572, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 202, 202, 202, + 372, 402, 402, 402, 402, 402, 572, 402, 402, 402, 402, 402, + 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 402, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 402, 202, 202, 442, + 12, 442, 572, 402, 402, 402, 402, 402, 402, 402, 402, 402, + 412, 542, 372, 402, 402, 402, 402, 402, 402, 402, 402, 402, + 402, 472, 542, 512, 402, 402, 512, 442, 472 - - - diff --git a/Geometry/HGCalCommonData/data/hgcalHEsil/v15/hgcal.xml b/Geometry/HGCalCommonData/data/hgcalHEsil/v15/hgcal.xml new file mode 100644 index 0000000000000..38cc7ab1bd828 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalHEsil/v15/hgcal.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalHEsil/v15/hgcalHEsil.xml b/Geometry/HGCalCommonData/data/hgcalHEsil/v15/hgcalHEsil.xml new file mode 100644 index 0000000000000..7719bd48913c8 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalHEsil/v15/hgcalHEsil.xml @@ -0,0 +1,859 @@ + + + + + + + + + + + + + + + + + + + hgcalwafer:HGCalHEWafer0Fine, hgcalwafer:HGCalHEWafer0Coarse1, + hgcalwafer:HGCalHEWafer0Coarse2 + + hgcalwafer:HGCalHEWafer0Fineb0, hgcalwafer:HGCalHEWafer0Fineb1, + hgcalwafer:HGCalHEWafer0Fineb2, hgcalwafer:HGCalHEWafer0Fineb3, + hgcalwafer:HGCalHEWafer0Fineb4, hgcalwafer:HGCalHEWafer0Fineb5, + hgcalwafer:HGCalHEWafer0Coarse1b0, hgcalwafer:HGCalHEWafer0Coarse1b1, + hgcalwafer:HGCalHEWafer0Coarse1b2, hgcalwafer:HGCalHEWafer0Coarse1b3, + hgcalwafer:HGCalHEWafer0Coarse1b4, hgcalwafer:HGCalHEWafer0Coarse1b5, + hgcalwafer:HGCalHEWafer0Coarse2b0, hgcalwafer:HGCalHEWafer0Coarse2b1, + hgcalwafer:HGCalHEWafer0Coarse2b2, hgcalwafer:HGCalHEWafer0Coarse2b3, + hgcalwafer:HGCalHEWafer0Coarse2b4, hgcalwafer:HGCalHEWafer0Coarse2b5, + hgcalwafer:HGCalHEWafer0Fineg0, hgcalwafer:HGCalHEWafer0Fineg1, + hgcalwafer:HGCalHEWafer0Fineg2, hgcalwafer:HGCalHEWafer0Fineg3, + hgcalwafer:HGCalHEWafer0Fineg4, hgcalwafer:HGCalHEWafer0Fineg5, + hgcalwafer:HGCalHEWafer0Coarse1g0, hgcalwafer:HGCalHEWafer0Coarse1g1, + hgcalwafer:HGCalHEWafer0Coarse1g2, hgcalwafer:HGCalHEWafer0Coarse1g3, + hgcalwafer:HGCalHEWafer0Coarse1g4, hgcalwafer:HGCalHEWafer0Coarse1g5, + hgcalwafer:HGCalHEWafer0Coarse2g0, hgcalwafer:HGCalHEWafer0Coarse2g1, + hgcalwafer:HGCalHEWafer0Coarse2g2, hgcalwafer:HGCalHEWafer0Coarse2g3, + hgcalwafer:HGCalHEWafer0Coarse2g4, hgcalwafer:HGCalHEWafer0Coarse2g5, + hgcalwafer:HGCalHEWafer0Finegm0, hgcalwafer:HGCalHEWafer0Finegm1, + hgcalwafer:HGCalHEWafer0Finegm2, hgcalwafer:HGCalHEWafer0Finegm3, + hgcalwafer:HGCalHEWafer0Finegm4, hgcalwafer:HGCalHEWafer0Finegm5, + hgcalwafer:HGCalHEWafer0Coarse1gm0, hgcalwafer:HGCalHEWafer0Coarse1gm1, + hgcalwafer:HGCalHEWafer0Coarse1gm2, hgcalwafer:HGCalHEWafer0Coarse1gm3, + hgcalwafer:HGCalHEWafer0Coarse1gm4, hgcalwafer:HGCalHEWafer0Coarse1gm5, + hgcalwafer:HGCalHEWafer0Coarse2gm0, hgcalwafer:HGCalHEWafer0Coarse2gm1, + hgcalwafer:HGCalHEWafer0Coarse2gm2, hgcalwafer:HGCalHEWafer0Coarse2gm3, + hgcalwafer:HGCalHEWafer0Coarse2gm4, hgcalwafer:HGCalHEWafer0Coarse2gm5, + hgcalwafer:HGCalHEWafer0Finea0, hgcalwafer:HGCalHEWafer0Finea1, + hgcalwafer:HGCalHEWafer0Finea2, hgcalwafer:HGCalHEWafer0Finea3, + hgcalwafer:HGCalHEWafer0Finea4, hgcalwafer:HGCalHEWafer0Finea5, + hgcalwafer:HGCalHEWafer0Coarse1a0, hgcalwafer:HGCalHEWafer0Coarse1a1, + hgcalwafer:HGCalHEWafer0Coarse1a2, hgcalwafer:HGCalHEWafer0Coarse1a3, + hgcalwafer:HGCalHEWafer0Coarse1a4, hgcalwafer:HGCalHEWafer0Coarse1a5, + hgcalwafer:HGCalHEWafer0Coarse2a0, hgcalwafer:HGCalHEWafer0Coarse2a1, + hgcalwafer:HGCalHEWafer0Coarse2a2, hgcalwafer:HGCalHEWafer0Coarse2a3, + hgcalwafer:HGCalHEWafer0Coarse2a4, hgcalwafer:HGCalHEWafer0Coarse2a5, + hgcalwafer:HGCalHEWafer0Fined0, hgcalwafer:HGCalHEWafer0Fined1, + hgcalwafer:HGCalHEWafer0Fined2, hgcalwafer:HGCalHEWafer0Fined3, + hgcalwafer:HGCalHEWafer0Fined4, hgcalwafer:HGCalHEWafer0Fined5, + hgcalwafer:HGCalHEWafer0Coarse1d0, hgcalwafer:HGCalHEWafer0Coarse1d1, + hgcalwafer:HGCalHEWafer0Coarse1d2, hgcalwafer:HGCalHEWafer0Coarse1d3, + hgcalwafer:HGCalHEWafer0Coarse1d4, hgcalwafer:HGCalHEWafer0Coarse1d5, + hgcalwafer:HGCalHEWafer0Coarse2d0, hgcalwafer:HGCalHEWafer0Coarse2d1, + hgcalwafer:HGCalHEWafer0Coarse2d2, hgcalwafer:HGCalHEWafer0Coarse2d3, + hgcalwafer:HGCalHEWafer0Coarse2d4, hgcalwafer:HGCalHEWafer0Coarse2d5, + hgcalwafer:HGCalHEWafer0Finedm0, hgcalwafer:HGCalHEWafer0Finedm1, + hgcalwafer:HGCalHEWafer0Finedm2, hgcalwafer:HGCalHEWafer0Finedm3, + hgcalwafer:HGCalHEWafer0Finedm4, hgcalwafer:HGCalHEWafer0Finedm5, + hgcalwafer:HGCalHEWafer0Coarse1dm0, hgcalwafer:HGCalHEWafer0Coarse1dm1, + hgcalwafer:HGCalHEWafer0Coarse1dm2, hgcalwafer:HGCalHEWafer0Coarse1dm3, + hgcalwafer:HGCalHEWafer0Coarse1dm4, hgcalwafer:HGCalHEWafer0Coarse1dm5, + hgcalwafer:HGCalHEWafer0Coarse2dm0, hgcalwafer:HGCalHEWafer0Coarse2dm1, + hgcalwafer:HGCalHEWafer0Coarse2dm2, hgcalwafer:HGCalHEWafer0Coarse2dm3, + hgcalwafer:HGCalHEWafer0Coarse2dm4, hgcalwafer:HGCalHEWafer0Coarse2dm5, + hgcalwafer:HGCalHEWafer0Finec0, hgcalwafer:HGCalHEWafer0Finec1, + hgcalwafer:HGCalHEWafer0Finec2, hgcalwafer:HGCalHEWafer0Finec3, + hgcalwafer:HGCalHEWafer0Finec4, hgcalwafer:HGCalHEWafer0Finec5, + hgcalwafer:HGCalHEWafer0Coarse1c0, hgcalwafer:HGCalHEWafer0Coarse1c1, + hgcalwafer:HGCalHEWafer0Coarse1c2, hgcalwafer:HGCalHEWafer0Coarse1c3, + hgcalwafer:HGCalHEWafer0Coarse1c4, hgcalwafer:HGCalHEWafer0Coarse1c5, + hgcalwafer:HGCalHEWafer0Coarse2c0, hgcalwafer:HGCalHEWafer0Coarse2c1, + hgcalwafer:HGCalHEWafer0Coarse2c2, hgcalwafer:HGCalHEWafer0Coarse2c3, + hgcalwafer:HGCalHEWafer0Coarse2c4, hgcalwafer:HGCalHEWafer0Coarse2c5 + + materials:StainlessSteel, materials:StainlessSteel, materials:Air, + materials:Copper, materials:Copper, materials:Air + + HGCalHEAbsorber1, HGCalHEAbsorber2, HGCalHEAirGap1, HGCalHECopperCover, + HGCalHECoolingPlate, HGCalHESiliconModule + + 40.0*mm, 35.0*mm, 3.7*mm, 1.1*mm, 6.1*mm, 8.6*mm + + + 5, 5, 5, 5, 5, 5, 5, 5 + + 59.5*mm, 54.5*mm, 54.5*mm, 54.5*mm, 54.5*mm, 54.5*mm, 54.5*mm, + 54.5*mm + + 0, 2, 3, 5, 4, + 1, 2, 3, 5, 4, + 1, 2, 3, 5, 4, + 1, 2, 3, 5, 4, + 1, 2, 3, 5, 4, + 1, 2, 3, 5, 4, + 1, 2, 3, 5, 4, + 1, 2, 3, 5, 4 + + -1, 0, -2, 1, -2, + -1, 0, -2, 1, -2, + -1, 0, -2, 1, -2, + -1, 0, -2, 1, -2, + -1, 0, -2, 1, -2, + -1, 0, -2, 1, -2, + -1, 0, -2, 1, -2, + -1, 0, -2, 1, -2 + + 1, 2, 1, 2, 1, 2, 1, 2 + + 0, 0, 0, 0 + + [hgcal:zHGCal0], [hgcal:zHGCal2], [hgcal:zHGCal7], + [hgcal:zHGCal8] + + [hgcal:rMinHGCal2], [hgcal:rMinHGCal4], + [hgcal:rMinHGCal6], [hgcal:rMinHGCal8] + + [hgcal:slope2], [hgcal:slope3], 0, 0 + + [hgcal:zHGCal0], [hgcal:zHGCal5], [hgcal:zHGCal10], + [hgcal:zHGCal11] + + [hgcal:rMaxHGCal0], [hgcal:rMaxHGCal5], [hgcal:rMaxHGCal10], + [hgcal:rMaxHGCal11] + + 262146, 262147, 262148, 262149, 262150, 262151, 262152, + 262153, 262178, 262179, 262180, 262181, 262182, 262183, + 262184, 262185, 262210, 262211, 262212, 262213, 262214, + 262215, 262216, 262217, 262218, 262241, 262242, 262243, + 262244, 262245, 262246, 262247, 262248, 262249, 262272, + 262273, 262274, 262275, 262276, 262277, 262278, 262279, + 262280, 262281, 262282, 262305, 262306, 262307, 262308, + 262309, 262310, 262311, 262312, 262336, 262337, 262338, + 262339, 262340, 262341, 262342, 262343, 262344, 262345, + 262346, 262347, 262369, 262370, 262371, 262372, 262373, + 262374, 262375, 262376, 262400, 262401, 262402, 262403, + 262404, 262405, 262406, 262407, 262408, 262409, 262410, + 262411, 262433, 262434, 262435, 262436, 262437, 262438, + 262439, 262464, 262465, 262466, 262467, 262468, 262469, + 262470, 262471, 262472, 262473, 262474, 262497, 262498, + 262499, 262500, 262501, 262528, 262529, 262530, 262531, + 262532, 262533, 262534, 262535, 262536, 262537, 262538, + 262539, 262561, 262562, 262563, 262564, 262565, 262592, + 262593, 262594, 262595, 262596, 262597, 262598, 262599, + 262600, 262601, 262602, 262603, 262625, 262626, 262627, + 262628, 262656, 262657, 262658, 262659, 262660, 262661, + 262662, 262663, 262664, 262665, 262666, 262689, 262690, + 262720, 262721, 262722, 262723, 262724, 262725, 262726, + 262727, 262728, 262729, 262786, 262787, 262788, 262789, + 262790, 262791, 262792, 264258, 264259, 264260, 264261, + 264262, 264263, 264264, 264265, 264291, 264292, 264293, + 264294, 264295, 264296, 264297, 264298, 264321, 264322, + 264323, 264324, 264325, 264326, 264327, 264328, 264355, + 264356, 264357, 264358, 264359, 264360, 264361, 264362, + 264384, 264385, 264386, 264387, 264388, 264389, 264390, + 264391, 264392, 264417, 264418, 264419, 264420, 264421, + 264422, 264423, 264424, 264425, 264426, 264427, 264448, + 264449, 264450, 264451, 264452, 264453, 264454, 264455, + 264481, 264482, 264483, 264484, 264485, 264486, 264487, + 264488, 264489, 264490, 264491, 264512, 264513, 264514, + 264515, 264516, 264517, 264518, 264545, 264546, 264547, + 264548, 264549, 264550, 264551, 264552, 264553, 264554, + 264555, 264576, 264577, 264578, 264579, 264580, 264581, + 264609, 264610, 264611, 264612, 264613, 264614, 264615, + 264616, 264617, 264618, 264619, 264640, 264641, 264642, + 264643, 264644, 264673, 264674, 264675, 264676, 264677, + 264678, 264679, 264680, 264681, 264682, 264683, 264704, + 264705, 264706, 264707, 264737, 264738, 264739, 264740, + 264741, 264742, 264743, 264744, 264745, 264746, 264747, + 264768, 264769, 264770, 264801, 264802, 264803, 264804, + 264805, 264806, 264807, 264808, 264809, 264810, 264811, + 264832, 264865, 264866, 264867, 264868, 264869, 264870, + 264871, 264872, 264873, 264874, 264930, 264931, 264932, + 264933, 264934, 264935, 264936, 264937, 264996, 264997, + 264999, 265000, 524290, 524291, 524292, 524293, 524294, + 524295, 524296, 524297, 524322, 524323, 524324, 524325, + 524326, 524327, 524328, 524329, 524355, 524356, 524357, + 524358, 524359, 524360, 524361, 524362, 524386, 524387, + 524388, 524389, 524390, 524391, 524392, 524393, 524419, + 524420, 524421, 524422, 524423, 524424, 524425, 524426, + 524427, 524449, 524450, 524451, 524452, 524453, 524454, + 524455, 524456, 524457, 524480, 524481, 524482, 524483, + 524484, 524485, 524486, 524487, 524488, 524489, 524490, + 524491, 524513, 524514, 524515, 524516, 524517, 524518, + 524519, 524520, 524544, 524545, 524546, 524547, 524548, + 524549, 524550, 524551, 524552, 524553, 524554, 524555, + 524577, 524578, 524579, 524580, 524581, 524582, 524583, + 524608, 524609, 524610, 524611, 524612, 524613, 524614, + 524615, 524616, 524617, 524618, 524619, 524620, 524641, + 524642, 524643, 524644, 524645, 524646, 524647, 524672, + 524673, 524674, 524675, 524676, 524677, 524678, 524679, + 524680, 524681, 524682, 524683, 524705, 524706, 524707, + 524708, 524709, 524736, 524737, 524738, 524739, 524740, + 524741, 524742, 524743, 524744, 524745, 524746, 524747, + 524769, 524770, 524771, 524772, 524800, 524801, 524802, + 524803, 524804, 524805, 524806, 524807, 524808, 524809, + 524810, 524811, 524812, 524833, 524834, 524835, 524836, + 524864, 524865, 524866, 524867, 524868, 524869, 524870, + 524871, 524872, 524873, 524874, 524875, 524897, 524898, + 524928, 524929, 524930, 524931, 524932, 524933, 524934, + 524935, 524936, 524937, 524938, 524939, 524961, 524994, + 524995, 524996, 524997, 524998, 524999, 525000, 525001, + 525060, 525061, 525063, 525064, 526401, 526402, 526403, + 526404, 526405, 526406, 526407, 526408, 526409, 526434, + 526435, 526436, 526437, 526438, 526439, 526440, 526441, + 526442, 526464, 526465, 526466, 526467, 526468, 526469, + 526470, 526471, 526472, 526497, 526498, 526499, 526500, + 526501, 526502, 526503, 526504, 526505, 526506, 526528, + 526529, 526530, 526531, 526532, 526533, 526534, 526535, + 526536, 526561, 526562, 526563, 526564, 526565, 526566, + 526567, 526568, 526569, 526570, 526571, 526592, 526593, + 526594, 526595, 526596, 526597, 526598, 526599, 526625, + 526626, 526627, 526628, 526629, 526630, 526631, 526632, + 526633, 526634, 526635, 526656, 526657, 526658, 526659, + 526660, 526661, 526689, 526690, 526691, 526692, 526693, + 526694, 526695, 526696, 526697, 526698, 526720, 526721, + 526722, 526723, 526724, 526725, 526753, 526754, 526755, + 526756, 526757, 526758, 526759, 526760, 526761, 526762, + 526763, 526784, 526785, 526786, 526787, 526788, 526817, + 526818, 526819, 526820, 526821, 526822, 526823, 526824, + 526825, 526826, 526827, 526848, 526849, 526850, 526881, + 526882, 526883, 526884, 526885, 526886, 526887, 526888, + 526889, 526890, 526912, 526945, 526946, 526947, 526948, + 526949, 526950, 526951, 526952, 526953, 527009, 527010, + 527011, 527012, 527013, 527014, 527015, 527016, 527017, + 527076, 527079, 786434, 786435, 786436, 786437, 786438, + 786439, 786440, 786441, 786442, 786466, 786467, 786468, + 786469, 786470, 786471, 786472, 786473, 786474, 786498, + 786499, 786500, 786501, 786502, 786503, 786504, 786505, + 786506, 786529, 786530, 786531, 786532, 786533, 786534, + 786535, 786536, 786537, 786560, 786561, 786562, 786563, + 786564, 786565, 786566, 786567, 786568, 786569, 786570, + 786571, 786593, 786594, 786595, 786596, 786597, 786598, + 786599, 786600, 786601, 786624, 786625, 786626, 786627, + 786628, 786629, 786630, 786631, 786632, 786633, 786634, + 786635, 786657, 786658, 786659, 786660, 786661, 786662, + 786663, 786664, 786688, 786689, 786690, 786691, 786692, + 786693, 786694, 786695, 786696, 786697, 786698, 786699, + 786721, 786722, 786723, 786724, 786725, 786726, 786727, + 786752, 786753, 786754, 786755, 786756, 786757, 786758, + 786759, 786760, 786761, 786762, 786785, 786786, 786787, + 786788, 786789, 786816, 786817, 786818, 786819, 786820, + 786821, 786822, 786823, 786824, 786825, 786826, 786827, + 786849, 786850, 786851, 786852, 786853, 786880, 786881, + 786882, 786883, 786884, 786885, 786886, 786887, 786888, + 786889, 786890, 786891, 786913, 786914, 786915, 786916, + 786944, 786945, 786946, 786947, 786948, 786949, 786950, + 786951, 786952, 786953, 786954, 786955, 786977, 786978, + 786979, 787008, 787009, 787010, 787011, 787012, 787013, + 787014, 787015, 787016, 787017, 787018, 787041, 787073, + 787074, 787075, 787076, 787077, 787078, 787079, 787080, + 787081, 787140, 787143, 788546, 788547, 788548, 788549, + 788550, 788551, 788552, 788553, 788579, 788580, 788581, + 788582, 788583, 788584, 788585, 788586, 788609, 788610, + 788611, 788612, 788613, 788614, 788615, 788616, 788617, + 788643, 788644, 788645, 788646, 788647, 788648, 788649, + 788650, 788651, 788672, 788673, 788674, 788675, 788676, + 788677, 788678, 788679, 788680, 788705, 788706, 788707, + 788708, 788709, 788710, 788711, 788712, 788713, 788714, + 788715, 788736, 788737, 788738, 788739, 788740, 788741, + 788742, 788743, 788769, 788770, 788771, 788772, 788773, + 788774, 788775, 788776, 788777, 788778, 788779, 788800, + 788801, 788802, 788803, 788804, 788805, 788806, 788807, + 788833, 788834, 788835, 788836, 788837, 788838, 788839, + 788840, 788841, 788842, 788843, 788844, 788864, 788865, + 788866, 788867, 788868, 788869, 788897, 788898, 788899, + 788900, 788901, 788902, 788903, 788904, 788905, 788906, + 788907, 788928, 788929, 788930, 788931, 788932, 788961, + 788962, 788963, 788964, 788965, 788966, 788967, 788968, + 788969, 788970, 788971, 788992, 788993, 788994, 788995, + 788996, 789025, 789026, 789027, 789028, 789029, 789030, + 789031, 789032, 789033, 789034, 789035, 789036, 789056, + 789057, 789058, 789089, 789090, 789091, 789092, 789093, + 789094, 789095, 789096, 789097, 789098, 789099, 789120, + 789121, 789153, 789154, 789155, 789156, 789157, 789158, + 789159, 789160, 789161, 789162, 789163, 789217, 789218, + 789219, 789220, 789221, 789222, 789223, 789224, 789225, + 789226, 789283, 789284, 789285, 789287, 789288, 789289, + 1048578, 1048579, 1048580, 1048581, 1048582, 1048583, 1048584, + 1048585, 1048586, 1048610, 1048611, 1048612, 1048613, 1048614, + 1048615, 1048616, 1048617, 1048618, 1048643, 1048644, 1048645, + 1048646, 1048647, 1048648, 1048649, 1048650, 1048674, 1048675, + 1048676, 1048677, 1048678, 1048679, 1048680, 1048681, 1048707, + 1048708, 1048709, 1048710, 1048711, 1048712, 1048713, 1048714, + 1048715, 1048737, 1048738, 1048739, 1048740, 1048741, 1048742, + 1048743, 1048744, 1048745, 1048768, 1048769, 1048770, 1048771, + 1048772, 1048773, 1048774, 1048775, 1048776, 1048777, 1048778, + 1048779, 1048801, 1048802, 1048803, 1048804, 1048805, 1048806, + 1048807, 1048808, 1048832, 1048833, 1048834, 1048835, 1048836, + 1048837, 1048838, 1048839, 1048840, 1048841, 1048842, 1048843, + 1048844, 1048865, 1048866, 1048867, 1048868, 1048869, 1048870, + 1048871, 1048872, 1048896, 1048897, 1048898, 1048899, 1048900, + 1048901, 1048902, 1048903, 1048904, 1048905, 1048906, 1048907, + 1048908, 1048929, 1048930, 1048931, 1048932, 1048933, 1048934, + 1048935, 1048960, 1048961, 1048962, 1048963, 1048964, 1048965, + 1048966, 1048967, 1048968, 1048969, 1048970, 1048971, 1048993, + 1048994, 1048995, 1048996, 1048997, 1049024, 1049025, 1049026, + 1049027, 1049028, 1049029, 1049030, 1049031, 1049032, 1049033, + 1049034, 1049035, 1049057, 1049058, 1049059, 1049060, 1049088, + 1049089, 1049090, 1049091, 1049092, 1049093, 1049094, 1049095, + 1049096, 1049097, 1049098, 1049099, 1049100, 1049121, 1049122, + 1049123, 1049124, 1049152, 1049153, 1049154, 1049155, 1049156, + 1049157, 1049158, 1049159, 1049160, 1049161, 1049162, 1049163, + 1049164, 1049185, 1049186, 1049187, 1049216, 1049217, 1049218, + 1049219, 1049220, 1049221, 1049222, 1049223, 1049224, 1049225, + 1049226, 1049227, 1049249, 1049281, 1049282, 1049283, 1049284, + 1049285, 1049286, 1049287, 1049288, 1049289, 1049290, 1049347, + 1049348, 1049349, 1049351, 1049352, 1049353, 1050689, 1050690, + 1050691, 1050692, 1050693, 1050694, 1050695, 1050696, 1050697, + 1050722, 1050723, 1050724, 1050725, 1050726, 1050727, 1050728, + 1050729, 1050730, 1050752, 1050753, 1050754, 1050755, 1050756, + 1050757, 1050758, 1050759, 1050760, 1050761, 1050785, 1050786, + 1050787, 1050788, 1050789, 1050790, 1050791, 1050792, 1050793, + 1050794, 1050795, 1050816, 1050817, 1050818, 1050819, 1050820, + 1050821, 1050822, 1050823, 1050824, 1050849, 1050850, 1050851, + 1050852, 1050853, 1050854, 1050855, 1050856, 1050857, 1050858, + 1050859, 1050880, 1050881, 1050882, 1050883, 1050884, 1050885, + 1050886, 1050887, 1050913, 1050914, 1050915, 1050916, 1050917, + 1050918, 1050919, 1050920, 1050921, 1050922, 1050923, 1050944, + 1050945, 1050946, 1050947, 1050948, 1050949, 1050977, 1050978, + 1050979, 1050980, 1050981, 1050982, 1050983, 1050984, 1050985, + 1050986, 1051008, 1051009, 1051010, 1051011, 1051012, 1051013, + 1051041, 1051042, 1051043, 1051044, 1051045, 1051046, 1051047, + 1051048, 1051049, 1051050, 1051051, 1051072, 1051073, 1051074, + 1051075, 1051076, 1051105, 1051106, 1051107, 1051108, 1051109, + 1051110, 1051111, 1051112, 1051113, 1051114, 1051115, 1051136, + 1051137, 1051138, 1051139, 1051169, 1051170, 1051171, 1051172, + 1051173, 1051174, 1051175, 1051176, 1051177, 1051178, 1051179, + 1051200, 1051201, 1051233, 1051234, 1051235, 1051236, 1051237, + 1051238, 1051239, 1051240, 1051241, 1051242, 1051297, 1051298, + 1051299, 1051300, 1051301, 1051302, 1051303, 1051304, 1051305, + 1051363, 1051364, 1051367, 1051368, 1310722, 1310723, 1310724, + 1310725, 1310726, 1310727, 1310728, 1310729, 1310730, 1310754, + 1310755, 1310756, 1310757, 1310758, 1310759, 1310760, 1310761, + 1310762, 1310786, 1310787, 1310788, 1310789, 1310790, 1310791, + 1310792, 1310793, 1310794, 1310817, 1310818, 1310819, 1310820, + 1310821, 1310822, 1310823, 1310824, 1310825, 1310848, 1310849, + 1310850, 1310851, 1310852, 1310853, 1310854, 1310855, 1310856, + 1310857, 1310858, 1310859, 1310881, 1310882, 1310883, 1310884, + 1310885, 1310886, 1310887, 1310888, 1310889, 1310912, 1310913, + 1310914, 1310915, 1310916, 1310917, 1310918, 1310919, 1310920, + 1310921, 1310922, 1310923, 1310945, 1310946, 1310947, 1310948, + 1310949, 1310950, 1310951, 1310952, 1310976, 1310977, 1310978, + 1310979, 1310980, 1310981, 1310982, 1310983, 1310984, 1310985, + 1310986, 1310987, 1311009, 1311010, 1311011, 1311012, 1311013, + 1311014, 1311015, 1311040, 1311041, 1311042, 1311043, 1311044, + 1311045, 1311046, 1311047, 1311048, 1311049, 1311050, 1311073, + 1311074, 1311075, 1311076, 1311077, 1311104, 1311105, 1311106, + 1311107, 1311108, 1311109, 1311110, 1311111, 1311112, 1311113, + 1311114, 1311115, 1311137, 1311138, 1311139, 1311140, 1311141, + 1311168, 1311169, 1311170, 1311171, 1311172, 1311173, 1311174, + 1311175, 1311176, 1311177, 1311178, 1311179, 1311201, 1311202, + 1311203, 1311204, 1311232, 1311233, 1311234, 1311235, 1311236, + 1311237, 1311238, 1311239, 1311240, 1311241, 1311242, 1311243, + 1311265, 1311266, 1311267, 1311296, 1311297, 1311298, 1311299, + 1311300, 1311301, 1311302, 1311303, 1311304, 1311305, 1311306, + 1311329, 1311361, 1311362, 1311363, 1311364, 1311365, 1311366, + 1311367, 1311368, 1311369, 1311427, 1311428, 1311431, 1311432, + 1312834, 1312835, 1312836, 1312837, 1312838, 1312839, 1312840, + 1312841, 1312867, 1312868, 1312869, 1312870, 1312871, 1312872, + 1312873, 1312874, 1312897, 1312898, 1312899, 1312900, 1312901, + 1312902, 1312903, 1312904, 1312905, 1312931, 1312932, 1312933, + 1312934, 1312935, 1312936, 1312937, 1312938, 1312939, 1312960, + 1312961, 1312962, 1312963, 1312964, 1312965, 1312966, 1312967, + 1312968, 1312993, 1312994, 1312995, 1312996, 1312997, 1312998, + 1312999, 1313000, 1313001, 1313002, 1313003, 1313024, 1313025, + 1313026, 1313027, 1313028, 1313029, 1313030, 1313031, 1313032, + 1313057, 1313058, 1313059, 1313060, 1313061, 1313062, 1313063, + 1313064, 1313065, 1313066, 1313067, 1313068, 1313088, 1313089, + 1313090, 1313091, 1313092, 1313093, 1313094, 1313095, 1313121, + 1313122, 1313123, 1313124, 1313125, 1313126, 1313127, 1313128, + 1313129, 1313130, 1313131, 1313132, 1313152, 1313153, 1313154, + 1313155, 1313156, 1313157, 1313185, 1313186, 1313187, 1313188, + 1313189, 1313190, 1313191, 1313192, 1313193, 1313194, 1313195, + 1313216, 1313217, 1313218, 1313219, 1313220, 1313249, 1313250, + 1313251, 1313252, 1313253, 1313254, 1313255, 1313256, 1313257, + 1313258, 1313259, 1313280, 1313281, 1313282, 1313283, 1313284, + 1313313, 1313314, 1313315, 1313316, 1313317, 1313318, 1313319, + 1313320, 1313321, 1313322, 1313323, 1313324, 1313344, 1313345, + 1313346, 1313347, 1313377, 1313378, 1313379, 1313380, 1313381, + 1313382, 1313383, 1313384, 1313385, 1313386, 1313387, 1313388, + 1313408, 1313409, 1313441, 1313442, 1313443, 1313444, 1313445, + 1313446, 1313447, 1313448, 1313449, 1313450, 1313451, 1313505, + 1313506, 1313507, 1313508, 1313509, 1313510, 1313511, 1313512, + 1313513, 1313514, 1313571, 1313572, 1313573, 1313575, 1313576, + 1313577, 1572866, 1572867, 1572868, 1572869, 1572870, 1572871, + 1572872, 1572873, 1572874, 1572898, 1572899, 1572900, 1572901, + 1572902, 1572903, 1572904, 1572905, 1572906, 1572931, 1572932, + 1572933, 1572934, 1572935, 1572936, 1572937, 1572938, 1572962, + 1572963, 1572964, 1572965, 1572966, 1572967, 1572968, 1572969, + 1572995, 1572996, 1572997, 1572998, 1572999, 1573000, 1573001, + 1573002, 1573003, 1573025, 1573026, 1573027, 1573028, 1573029, + 1573030, 1573031, 1573032, 1573033, 1573056, 1573057, 1573058, + 1573059, 1573060, 1573061, 1573062, 1573063, 1573064, 1573065, + 1573066, 1573067, 1573068, 1573089, 1573090, 1573091, 1573092, + 1573093, 1573094, 1573095, 1573096, 1573097, 1573120, 1573121, + 1573122, 1573123, 1573124, 1573125, 1573126, 1573127, 1573128, + 1573129, 1573130, 1573131, 1573132, 1573153, 1573154, 1573155, + 1573156, 1573157, 1573158, 1573159, 1573160, 1573184, 1573185, + 1573186, 1573187, 1573188, 1573189, 1573190, 1573191, 1573192, + 1573193, 1573194, 1573195, 1573196, 1573217, 1573218, 1573219, + 1573220, 1573221, 1573222, 1573223, 1573248, 1573249, 1573250, + 1573251, 1573252, 1573253, 1573254, 1573255, 1573256, 1573257, + 1573258, 1573259, 1573260, 1573281, 1573282, 1573283, 1573284, + 1573285, 1573286, 1573312, 1573313, 1573314, 1573315, 1573316, + 1573317, 1573318, 1573319, 1573320, 1573321, 1573322, 1573323, + 1573324, 1573345, 1573346, 1573347, 1573348, 1573349, 1573376, + 1573377, 1573378, 1573379, 1573380, 1573381, 1573382, 1573383, + 1573384, 1573385, 1573386, 1573387, 1573388, 1573409, 1573410, + 1573411, 1573412, 1573440, 1573441, 1573442, 1573443, 1573444, + 1573445, 1573446, 1573447, 1573448, 1573449, 1573450, 1573451, + 1573452, 1573473, 1573474, 1573475, 1573504, 1573505, 1573506, + 1573507, 1573508, 1573509, 1573510, 1573511, 1573512, 1573513, + 1573514, 1573515, 1573516, 1573537, 1573538, 1573569, 1573570, + 1573571, 1573572, 1573573, 1573574, 1573575, 1573576, 1573577, + 1573578, 1573634, 1573635, 1573636, 1573637, 1573638, 1573639, + 1573640, 1573641, 1573642, 1573701, 1573704, 1574977, 1574978, + 1574979, 1574980, 1574981, 1574982, 1574983, 1574984, 1574985, + 1574986, 1575010, 1575011, 1575012, 1575013, 1575014, 1575015, + 1575016, 1575017, 1575018, 1575019, 1575040, 1575041, 1575042, + 1575043, 1575044, 1575045, 1575046, 1575047, 1575048, 1575049, + 1575073, 1575074, 1575075, 1575076, 1575077, 1575078, 1575079, + 1575080, 1575081, 1575082, 1575083, 1575104, 1575105, 1575106, + 1575107, 1575108, 1575109, 1575110, 1575111, 1575112, 1575137, + 1575138, 1575139, 1575140, 1575141, 1575142, 1575143, 1575144, + 1575145, 1575146, 1575147, 1575168, 1575169, 1575170, 1575171, + 1575172, 1575173, 1575174, 1575175, 1575176, 1575201, 1575202, + 1575203, 1575204, 1575205, 1575206, 1575207, 1575208, 1575209, + 1575210, 1575211, 1575212, 1575232, 1575233, 1575234, 1575235, + 1575236, 1575237, 1575238, 1575265, 1575266, 1575267, 1575268, + 1575269, 1575270, 1575271, 1575272, 1575273, 1575274, 1575275, + 1575296, 1575297, 1575298, 1575299, 1575300, 1575301, 1575329, + 1575330, 1575331, 1575332, 1575333, 1575334, 1575335, 1575336, + 1575337, 1575338, 1575339, 1575360, 1575361, 1575362, 1575363, + 1575364, 1575365, 1575393, 1575394, 1575395, 1575396, 1575397, + 1575398, 1575399, 1575400, 1575401, 1575402, 1575403, 1575404, + 1575424, 1575425, 1575426, 1575427, 1575457, 1575458, 1575459, + 1575460, 1575461, 1575462, 1575463, 1575464, 1575465, 1575466, + 1575467, 1575488, 1575489, 1575490, 1575521, 1575522, 1575523, + 1575524, 1575525, 1575526, 1575527, 1575528, 1575529, 1575530, + 1575531, 1575585, 1575586, 1575587, 1575588, 1575589, 1575590, + 1575591, 1575592, 1575593, 1575650, 1575651, 1575652, 1575653, + 1575654, 1575655, 1575656, 1575657, 1835010, 1835011, 1835012, + 1835013, 1835014, 1835015, 1835016, 1835017, 1835018, 1835019, + 1835042, 1835043, 1835044, 1835045, 1835046, 1835047, 1835048, + 1835049, 1835050, 1835051, 1835074, 1835075, 1835076, 1835077, + 1835078, 1835079, 1835080, 1835081, 1835082, 1835083, 1835105, + 1835106, 1835107, 1835108, 1835109, 1835110, 1835111, 1835112, + 1835113, 1835114, 1835136, 1835137, 1835138, 1835139, 1835140, + 1835141, 1835142, 1835143, 1835144, 1835145, 1835146, 1835147, + 1835148, 1835169, 1835170, 1835171, 1835172, 1835173, 1835174, + 1835175, 1835176, 1835177, 1835178, 1835200, 1835201, 1835202, + 1835203, 1835204, 1835205, 1835206, 1835207, 1835208, 1835209, + 1835210, 1835211, 1835212, 1835233, 1835234, 1835235, 1835236, + 1835237, 1835238, 1835239, 1835240, 1835241, 1835264, 1835265, + 1835266, 1835267, 1835268, 1835269, 1835270, 1835271, 1835272, + 1835273, 1835274, 1835275, 1835276, 1835297, 1835298, 1835299, + 1835300, 1835301, 1835302, 1835303, 1835304, 1835328, 1835329, + 1835330, 1835331, 1835332, 1835333, 1835334, 1835335, 1835336, + 1835337, 1835338, 1835339, 1835340, 1835361, 1835362, 1835363, + 1835364, 1835365, 1835366, 1835367, 1835392, 1835393, 1835394, + 1835395, 1835396, 1835397, 1835398, 1835399, 1835400, 1835401, + 1835402, 1835403, 1835404, 1835425, 1835426, 1835427, 1835428, + 1835429, 1835430, 1835456, 1835457, 1835458, 1835459, 1835460, + 1835461, 1835462, 1835463, 1835464, 1835465, 1835466, 1835467, + 1835468, 1835489, 1835490, 1835491, 1835492, 1835493, 1835520, + 1835521, 1835522, 1835523, 1835524, 1835525, 1835526, 1835527, + 1835528, 1835529, 1835530, 1835531, 1835532, 1835553, 1835554, + 1835555, 1835556, 1835584, 1835585, 1835586, 1835587, 1835588, + 1835589, 1835590, 1835591, 1835592, 1835593, 1835594, 1835595, + 1835596, 1835617, 1835618, 1835619, 1835648, 1835649, 1835650, + 1835651, 1835652, 1835653, 1835654, 1835655, 1835656, 1835657, + 1835658, 1835659, 1835681, 1835713, 1835714, 1835715, 1835716, + 1835717, 1835718, 1835719, 1835720, 1835721, 1835722, 1835780, + 1835781, 1835783, 1835784, 1837122, 1837123, 1837124, 1837125, + 1837126, 1837127, 1837128, 1837129, 1837130, 1837155, 1837156, + 1837157, 1837158, 1837159, 1837160, 1837161, 1837162, 1837163, + 1837185, 1837186, 1837187, 1837188, 1837189, 1837190, 1837191, + 1837192, 1837193, 1837194, 1837219, 1837220, 1837221, 1837222, + 1837223, 1837224, 1837225, 1837226, 1837227, 1837228, 1837248, + 1837249, 1837250, 1837251, 1837252, 1837253, 1837254, 1837255, + 1837256, 1837257, 1837281, 1837282, 1837283, 1837284, 1837285, + 1837286, 1837287, 1837288, 1837289, 1837290, 1837291, 1837292, + 1837312, 1837313, 1837314, 1837315, 1837316, 1837317, 1837318, + 1837319, 1837320, 1837345, 1837346, 1837347, 1837348, 1837349, + 1837350, 1837351, 1837352, 1837353, 1837354, 1837355, 1837356, + 1837376, 1837377, 1837378, 1837379, 1837380, 1837381, 1837382, + 1837383, 1837384, 1837409, 1837410, 1837411, 1837412, 1837413, + 1837414, 1837415, 1837416, 1837417, 1837418, 1837419, 1837420, + 1837421, 1837440, 1837441, 1837442, 1837443, 1837444, 1837445, + 1837446, 1837447, 1837473, 1837474, 1837475, 1837476, 1837477, + 1837478, 1837479, 1837480, 1837481, 1837482, 1837483, 1837484, + 1837485, 1837504, 1837505, 1837506, 1837507, 1837508, 1837509, + 1837537, 1837538, 1837539, 1837540, 1837541, 1837542, 1837543, + 1837544, 1837545, 1837546, 1837547, 1837548, 1837568, 1837569, + 1837570, 1837571, 1837572, 1837573, 1837601, 1837602, 1837603, + 1837604, 1837605, 1837606, 1837607, 1837608, 1837609, 1837610, + 1837611, 1837612, 1837613, 1837632, 1837633, 1837634, 1837635, + 1837636, 1837665, 1837666, 1837667, 1837668, 1837669, 1837670, + 1837671, 1837672, 1837673, 1837674, 1837675, 1837676, 1837677, + 1837696, 1837697, 1837698, 1837729, 1837730, 1837731, 1837732, + 1837733, 1837734, 1837735, 1837736, 1837737, 1837738, 1837739, + 1837740, 1837760, 1837761, 1837793, 1837794, 1837795, 1837796, + 1837797, 1837798, 1837799, 1837800, 1837801, 1837802, 1837803, + 1837804, 1837857, 1837858, 1837859, 1837860, 1837861, 1837862, + 1837863, 1837864, 1837865, 1837866, 1837867, 1837923, 1837924, + 1837925, 1837926, 1837927, 1837928, 1837929, 1837930, 2097154, + 2097155, 2097156, 2097157, 2097158, 2097159, 2097160, 2097161, + 2097162, 2097163, 2097186, 2097187, 2097188, 2097189, 2097190, + 2097191, 2097192, 2097193, 2097194, 2097195, 2097219, 2097220, + 2097221, 2097222, 2097223, 2097224, 2097225, 2097226, 2097227, + 2097250, 2097251, 2097252, 2097253, 2097254, 2097255, 2097256, + 2097257, 2097258, 2097283, 2097284, 2097285, 2097286, 2097287, + 2097288, 2097289, 2097290, 2097291, 2097292, 2097313, 2097314, + 2097315, 2097316, 2097317, 2097318, 2097319, 2097320, 2097321, + 2097322, 2097344, 2097345, 2097346, 2097347, 2097348, 2097349, + 2097350, 2097351, 2097352, 2097353, 2097354, 2097355, 2097356, + 2097357, 2097377, 2097378, 2097379, 2097380, 2097381, 2097382, + 2097383, 2097384, 2097385, 2097386, 2097408, 2097409, 2097410, + 2097411, 2097412, 2097413, 2097414, 2097415, 2097416, 2097417, + 2097418, 2097419, 2097420, 2097421, 2097441, 2097442, 2097443, + 2097444, 2097445, 2097446, 2097447, 2097448, 2097449, 2097472, + 2097473, 2097474, 2097475, 2097476, 2097477, 2097478, 2097479, + 2097480, 2097481, 2097482, 2097483, 2097484, 2097485, 2097505, + 2097506, 2097507, 2097508, 2097509, 2097510, 2097511, 2097512, + 2097536, 2097537, 2097538, 2097539, 2097540, 2097541, 2097542, + 2097543, 2097544, 2097545, 2097546, 2097547, 2097548, 2097549, + 2097569, 2097570, 2097571, 2097572, 2097573, 2097574, 2097575, + 2097600, 2097601, 2097602, 2097603, 2097604, 2097605, 2097606, + 2097607, 2097608, 2097609, 2097610, 2097611, 2097612, 2097633, + 2097634, 2097635, 2097636, 2097637, 2097664, 2097665, 2097666, + 2097667, 2097668, 2097669, 2097670, 2097671, 2097672, 2097673, + 2097674, 2097675, 2097676, 2097677, 2097697, 2097698, 2097699, + 2097700, 2097701, 2097728, 2097729, 2097730, 2097731, 2097732, + 2097733, 2097734, 2097735, 2097736, 2097737, 2097738, 2097739, + 2097740, 2097741, 2097761, 2097762, 2097763, 2097764, 2097792, + 2097793, 2097794, 2097795, 2097796, 2097797, 2097798, 2097799, + 2097800, 2097801, 2097802, 2097803, 2097804, 2097805, 2097825, + 2097826, 2097827, 2097856, 2097857, 2097858, 2097859, 2097860, + 2097861, 2097862, 2097863, 2097864, 2097865, 2097866, 2097867, + 2097868, 2097869, 2097889, 2097890, 2097921, 2097922, 2097923, + 2097924, 2097925, 2097926, 2097927, 2097928, 2097929, 2097930, + 2097931, 2097986, 2097987, 2097988, 2097989, 2097990, 2097991, + 2097992, 2097993, 2097994, 2097995, 2098053, 2098054, 2098056, + 2098057, 2099265, 2099266, 2099267, 2099268, 2099269, 2099270, + 2099271, 2099272, 2099273, 2099274, 2099275, 2099298, 2099299, + 2099300, 2099301, 2099302, 2099303, 2099304, 2099305, 2099306, + 2099307, 2099308, 2099328, 2099329, 2099330, 2099331, 2099332, + 2099333, 2099334, 2099335, 2099336, 2099337, 2099338, 2099361, + 2099362, 2099363, 2099364, 2099365, 2099366, 2099367, 2099368, + 2099369, 2099370, 2099371, 2099372, 2099392, 2099393, 2099394, + 2099395, 2099396, 2099397, 2099398, 2099399, 2099400, 2099401, + 2099425, 2099426, 2099427, 2099428, 2099429, 2099430, 2099431, + 2099432, 2099433, 2099434, 2099435, 2099436, 2099456, 2099457, + 2099458, 2099459, 2099460, 2099461, 2099462, 2099463, 2099464, + 2099465, 2099489, 2099490, 2099491, 2099492, 2099493, 2099494, + 2099495, 2099496, 2099497, 2099498, 2099499, 2099500, 2099501, + 2099520, 2099521, 2099522, 2099523, 2099524, 2099525, 2099526, + 2099527, 2099528, 2099553, 2099554, 2099555, 2099556, 2099557, + 2099558, 2099559, 2099560, 2099561, 2099562, 2099563, 2099564, + 2099565, 2099584, 2099585, 2099586, 2099587, 2099588, 2099589, + 2099590, 2099617, 2099618, 2099619, 2099620, 2099621, 2099622, + 2099623, 2099624, 2099625, 2099626, 2099627, 2099628, 2099648, + 2099649, 2099650, 2099651, 2099652, 2099653, 2099654, 2099681, + 2099682, 2099683, 2099684, 2099685, 2099686, 2099687, 2099688, + 2099689, 2099690, 2099691, 2099692, 2099693, 2099712, 2099713, + 2099714, 2099715, 2099716, 2099717, 2099745, 2099746, 2099747, + 2099748, 2099749, 2099750, 2099751, 2099752, 2099753, 2099754, + 2099755, 2099756, 2099757, 2099776, 2099777, 2099778, 2099779, + 2099809, 2099810, 2099811, 2099812, 2099813, 2099814, 2099815, + 2099816, 2099817, 2099818, 2099819, 2099820, 2099840, 2099841, + 2099842, 2099873, 2099874, 2099875, 2099876, 2099877, 2099878, + 2099879, 2099880, 2099881, 2099882, 2099883, 2099884, 2099937, + 2099938, 2099939, 2099940, 2099941, 2099942, 2099943, 2099944, + 2099945, 2099946, 2100002, 2100003, 2100004, 2100005, 2100007, + 2100008, 2100009, 2100010 + + + 340, 0, 0, 1, 1, 1, 2, 2, 40, 200, 200, 201, + 201, 201, 202, 202, 440, 0, 0, 1, 1, 1, 2, 2, + 42, 540, 200, 200, 201, 201, 201, 202, 202, 342, 0, 510, + 0, 0, 0, 1, 1, 1, 2, 2, 2, 200, 200, 201, + 201, 201, 202, 202, 202, 0, 0, 0, 0, 0, 1, 1, + 1, 2, 2, 2, 72, 200, 201, 201, 201, 202, 202, 202, + 272, 1, 0, 0, 0, 1, 1, 1, 1, 2, 2, 212, + 72, 201, 201, 201, 202, 202, 212, 272, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 12, 201, 201, 202, 202, 412, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 72, + 201, 202, 202, 202, 272, 2, 2, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 72, 202, 202, 202, 272, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 142, 202, 242, 272, 2, + 2, 2, 2, 2, 2, 2, 2, 72, 242, 212, 2, 172, + 2, 212, 142, 400, 400, 401, 401, 401, 402, 402, 72, 200, + 200, 201, 201, 201, 202, 202, 272, 310, 400, 400, 401, 401, + 402, 402, 402, 110, 200, 200, 201, 201, 202, 202, 202, 400, + 400, 400, 401, 401, 401, 402, 402, 42, 240, 140, 200, 200, + 200, 201, 201, 201, 202, 202, 342, 400, 400, 401, 401, 401, + 402, 402, 12, 400, 400, 400, 200, 200, 201, 201, 201, 202, + 202, 412, 401, 401, 401, 401, 402, 402, 402, 400, 400, 400, + 400, 201, 201, 201, 201, 202, 202, 202, 401, 401, 401, 402, + 402, 572, 401, 401, 401, 401, 401, 201, 201, 201, 202, 202, + 372, 401, 402, 402, 402, 402, 401, 401, 401, 401, 401, 401, + 201, 202, 202, 202, 202, 402, 402, 402, 12, 401, 401, 401, + 401, 401, 401, 401, 202, 202, 202, 412, 402, 402, 542, 402, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 442, 472, 402, + 402, 402, 402, 402, 402, 402, 402, 402, 472, 542, 402, 402, + 412, 12, 402, 402, 442, 472, 472, 472, 472, 340, 400, 400, + 401, 401, 402, 402, 402, 40, 200, 200, 201, 201, 202, 202, + 202, 400, 400, 401, 401, 401, 402, 402, 542, 0, 0, 1, + 1, 1, 2, 2, 442, 410, 400, 401, 401, 401, 402, 402, + 402, 72, 10, 0, 1, 1, 1, 2, 2, 2, 272, 0, + 540, 440, 400, 400, 400, 401, 401, 401, 402, 402, 42, 0, + 0, 1, 1, 1, 2, 2, 342, 0, 0, 0, 0, 400, + 401, 401, 401, 401, 402, 402, 402, 1, 1, 1, 1, 2, + 2, 2, 1, 0, 0, 0, 0, 401, 401, 401, 401, 402, + 402, 402, 72, 1, 1, 1, 2, 2, 2, 272, 1, 1, + 1, 1, 1, 1, 401, 401, 401, 402, 402, 52, 1, 1, + 2, 2, 252, 1, 1, 1, 1, 1, 1, 1, 401, 402, + 402, 402, 402, 2, 2, 2, 2, 2, 2, 1, 1, 1, + 1, 1, 2, 402, 402, 402, 402, 72, 2, 2, 2, 272, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 402, 402, 142, + 2, 242, 142, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 242, 72, 272, 242, 2, 2, 2, 2, 2, 2, 142, 172, + 152, 152, 172, 240, 400, 400, 401, 401, 401, 402, 402, 42, + 140, 200, 200, 201, 201, 201, 202, 202, 342, 200, 400, 400, + 401, 401, 401, 402, 402, 402, 210, 200, 200, 200, 201, 201, + 201, 202, 202, 202, 200, 400, 401, 401, 401, 402, 402, 402, + 572, 200, 200, 200, 200, 201, 201, 201, 202, 202, 202, 372, + 201, 401, 401, 401, 402, 402, 402, 552, 201, 200, 201, 201, + 201, 201, 201, 202, 202, 202, 352, 201, 401, 401, 402, 402, + 402, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, 201, + 402, 402, 402, 402, 552, 201, 201, 201, 201, 201, 201, 202, + 202, 202, 202, 352, 202, 402, 402, 402, 572, 202, 201, 201, + 201, 201, 202, 202, 202, 202, 202, 372, 202, 402, 542, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 442, 42, 202, 202, + 202, 202, 202, 202, 202, 202, 342, 472, 542, 202, 202, 452, + 202, 202, 442, 472, 472, 472, 340, 0, 1, 1, 1, 2, + 2, 2, 572, 40, 200, 201, 201, 201, 202, 202, 202, 372, + 440, 0, 0, 1, 1, 1, 2, 2, 2, 540, 200, 200, + 201, 201, 201, 202, 202, 202, 0, 510, 0, 0, 0, 1, + 1, 1, 2, 2, 2, 72, 200, 200, 201, 201, 201, 202, + 202, 202, 272, 0, 0, 0, 0, 1, 1, 1, 1, 2, + 2, 2, 52, 201, 201, 201, 201, 202, 202, 202, 252, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 52, 201, + 201, 201, 202, 202, 202, 252, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 201, 201, 202, 202, 202, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 52, 202, 202, + 202, 202, 252, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 52, 202, 202, 202, 252, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 342, 2, + 2, 2, 2, 2, 2, 2, 2, 42, 172, 172, 242, 212, + 2, 2, 152, 2, 2, 212, 142, 172, 172, 400, 400, 401, + 401, 401, 402, 402, 142, 200, 200, 201, 201, 201, 202, 202, + 242, 310, 400, 401, 401, 401, 402, 402, 402, 42, 110, 200, + 201, 201, 201, 202, 202, 202, 342, 400, 400, 401, 401, 401, + 402, 402, 402, 12, 240, 140, 200, 200, 201, 201, 201, 202, + 202, 202, 412, 400, 401, 401, 401, 402, 402, 402, 402, 400, + 400, 400, 200, 201, 201, 201, 202, 202, 202, 202, 401, 401, + 401, 402, 402, 402, 402, 572, 401, 400, 400, 401, 201, 201, + 201, 202, 202, 202, 202, 372, 401, 401, 402, 402, 402, 552, + 401, 401, 401, 401, 401, 201, 201, 202, 202, 202, 352, 401, + 402, 402, 402, 402, 401, 401, 401, 401, 401, 401, 201, 202, + 202, 202, 202, 402, 402, 402, 402, 572, 402, 401, 401, 401, + 401, 401, 402, 202, 202, 202, 202, 372, 402, 402, 12, 402, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 412, 442, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 402, 542, 442, 572, + 402, 402, 402, 402, 402, 402, 402, 402, 372, 472, 452, 452, + 452, 452, 472, 340, 400, 401, 401, 401, 402, 402, 402, 72, + 40, 200, 201, 201, 201, 202, 202, 202, 272, 400, 400, 401, + 401, 402, 402, 402, 542, 0, 0, 1, 1, 2, 2, 2, + 442, 410, 400, 401, 401, 401, 402, 402, 402, 42, 10, 0, + 1, 1, 1, 2, 2, 2, 342, 0, 540, 440, 400, 400, + 401, 401, 401, 402, 402, 402, 402, 0, 1, 1, 1, 2, + 2, 2, 2, 0, 0, 0, 0, 400, 401, 401, 401, 402, + 402, 402, 402, 72, 1, 1, 1, 2, 2, 2, 2, 272, + 1, 1, 0, 0, 1, 401, 401, 401, 402, 402, 402, 402, + 72, 1, 1, 2, 2, 2, 2, 272, 1, 1, 1, 1, + 1, 1, 401, 401, 402, 402, 402, 52, 1, 2, 2, 2, + 252, 2, 1, 1, 1, 1, 1, 1, 402, 402, 402, 402, + 402, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, + 2, 402, 402, 402, 402, 72, 2, 2, 2, 272, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 402, 402, 402, 72, 2, + 2, 272, 142, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 242, 142, 242, 272, 2, 2, 2, 2, 2, 2, 2, 2, + 72, 172, 242, 212, 212, 142, 172, 240, 400, 400, 401, 401, + 402, 402, 402, 402, 140, 200, 200, 201, 201, 202, 202, 202, + 202, 200, 400, 400, 401, 401, 401, 402, 402, 402, 572, 210, + 200, 200, 200, 201, 201, 201, 202, 202, 202, 372, 200, 401, + 401, 401, 401, 402, 402, 402, 42, 200, 200, 200, 201, 201, + 201, 201, 202, 202, 202, 342, 201, 401, 401, 401, 402, 402, + 402, 12, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, + 412, 201, 401, 402, 402, 402, 402, 201, 201, 201, 201, 201, + 201, 202, 202, 202, 202, 202, 402, 402, 402, 402, 12, 201, + 201, 201, 201, 201, 202, 202, 202, 202, 202, 412, 202, 402, + 402, 402, 542, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 442, 202, 402, 402, 572, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 372, 42, 472, 202, 202, 202, 202, 202, + 202, 202, 202, 342, 472, 542, 202, 202, 202, 452, 202, 202, + 202, 442, 472, 472, 472, 472, 340, 0, 1, 1, 1, 2, + 2, 2, 572, 40, 200, 201, 201, 201, 202, 202, 202, 372, + 440, 0, 1, 1, 1, 2, 2, 2, 2, 540, 200, 201, + 201, 201, 202, 202, 202, 202, 0, 510, 0, 0, 1, 1, + 1, 2, 2, 2, 2, 72, 200, 201, 201, 201, 202, 202, + 202, 202, 272, 0, 0, 0, 0, 1, 1, 1, 2, 2, + 2, 2, 42, 201, 201, 201, 202, 202, 202, 202, 342, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 112, 201, + 201, 202, 202, 202, 202, 312, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 201, 202, 202, 202, 202, 2, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 112, 202, 202, + 202, 202, 312, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 142, 202, 202, 202, 242, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 72, 202, 202, 272, 342, 2, + 2, 2, 2, 2, 2, 2, 2, 42, 172, 172, 242, 2, + 2, 2, 152, 2, 2, 2, 142, 172, 152, 152, 172, 400, + 400, 401, 401, 402, 402, 402, 142, 200, 200, 201, 201, 202, + 202, 202, 242, 310, 400, 401, 401, 401, 402, 402, 402, 42, + 110, 200, 201, 201, 201, 202, 202, 202, 342, 400, 400, 401, + 401, 401, 402, 402, 402, 402, 240, 140, 200, 200, 201, 201, + 201, 202, 202, 202, 202, 400, 401, 401, 401, 402, 402, 402, + 402, 572, 400, 400, 400, 200, 201, 201, 201, 202, 202, 202, + 202, 372, 401, 401, 401, 402, 402, 402, 402, 552, 401, 401, + 401, 401, 201, 201, 201, 202, 202, 202, 202, 352, 401, 401, + 402, 402, 402, 552, 401, 401, 401, 401, 401, 201, 201, 202, + 202, 202, 352, 402, 402, 402, 402, 402, 401, 401, 401, 401, + 401, 401, 202, 202, 202, 202, 202, 402, 402, 402, 402, 552, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 202, 202, 352, + 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 402, 402, + 202, 202, 202, 372, 442, 542, 402, 402, 402, 402, 402, 402, + 402, 402, 402, 542, 442, 572, 402, 402, 402, 402, 402, 402, + 402, 402, 372, 472, 542, 512, 512, 442, 472, 340, 400, 401, + 401, 402, 402, 402, 402, 142, 40, 200, 201, 201, 202, 202, + 202, 202, 242, 0, 1, 1, 1, 2, 2, 2, 12, 200, + 201, 201, 201, 202, 202, 202, 412, 410, 0, 1, 1, 2, + 2, 2, 2, 2, 10, 200, 201, 201, 202, 202, 202, 202, + 202, 200, 540, 440, 0, 0, 1, 1, 1, 2, 2, 2, + 2, 72, 200, 201, 201, 201, 202, 202, 202, 202, 272, 201, + 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 52, + 201, 201, 201, 202, 202, 202, 202, 252, 201, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 112, 201, 201, 202, + 202, 202, 202, 312, 201, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 242, 202, 202, 202, 202, 202, 142, 202, + 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 542, + 202, 202, 202, 202, 442, 202, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 112, 202, 202, 202, 312, 202, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 52, 202, + 202, 252, 212, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 212, 2, 72, 202, 272, 342, 2, 2, 2, 2, 2, 2, + 2, 2, 42, 242, 212, 2, 2, 152, 2, 2, 212, 142, + 172, 172, 240, 400, 401, 401, 401, 402, 402, 402, 402, 42, + 140, 200, 201, 201, 201, 202, 202, 202, 202, 342, 400, 400, + 401, 401, 401, 402, 402, 402, 402, 12, 210, 400, 200, 201, + 201, 201, 202, 202, 202, 202, 412, 401, 401, 401, 401, 402, + 402, 402, 402, 402, 400, 400, 401, 201, 201, 201, 202, 202, + 202, 202, 202, 401, 401, 401, 402, 402, 402, 402, 402, 572, + 401, 401, 401, 401, 201, 201, 202, 202, 202, 202, 202, 372, + 401, 402, 402, 402, 402, 402, 552, 401, 401, 401, 401, 401, + 202, 202, 202, 202, 202, 352, 402, 402, 402, 402, 402, 402, + 402, 401, 401, 401, 402, 402, 202, 202, 202, 202, 202, 402, + 402, 402, 402, 402, 572, 402, 402, 402, 402, 402, 402, 402, + 202, 202, 202, 202, 372, 402, 402, 402, 12, 402, 402, 402, + 402, 402, 402, 402, 402, 202, 202, 412, 12, 442, 542, 402, + 402, 402, 402, 402, 402, 402, 402, 412, 542, 442, 402, 402, + 402, 402, 402, 402, 402, 402, 402, 472, 452, 512, 342, 42, + 512, 452, 472, 340, 0, 1, 1, 2, 2, 2, 2, 2, + 572, 40, 200, 201, 201, 202, 202, 202, 202, 202, 372, 440, + 0, 1, 1, 1, 2, 2, 2, 2, 2, 540, 200, 201, + 201, 201, 202, 202, 202, 202, 202, 0, 510, 0, 0, 1, + 1, 1, 2, 2, 2, 2, 2, 72, 200, 201, 201, 201, + 202, 202, 202, 202, 202, 272, 1, 0, 0, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 42, 201, 201, 201, 202, 202, + 202, 202, 202, 342, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 112, 201, 201, 202, 202, 202, 202, 202, + 312, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 112, 172, 202, 202, 202, 202, 202, 312, 172, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 572, 202, 202, + 202, 202, 202, 372, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 112, 202, 202, 202, 202, 312, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 142, 202, + 202, 202, 242, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 72, 202, 202, 272, 342, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 42, 172, 172, 242, 212, 2, 2, + 112, 312, 2, 2, 212, 142, 172, 152, 152, 172, 400, 401, + 401, 401, 402, 402, 402, 402, 142, 200, 201, 201, 201, 202, + 202, 202, 202, 242, 310, 400, 401, 401, 402, 402, 402, 402, + 402, 42, 110, 200, 201, 201, 202, 202, 202, 202, 202, 342, + 400, 400, 401, 401, 402, 402, 402, 402, 402, 12, 240, 140, + 200, 200, 201, 201, 202, 202, 202, 202, 202, 412, 401, 401, + 401, 401, 402, 402, 402, 402, 402, 400, 400, 400, 201, 201, + 201, 201, 202, 202, 202, 202, 202, 401, 401, 402, 402, 402, + 402, 402, 402, 572, 401, 401, 401, 401, 201, 201, 202, 202, + 202, 202, 202, 202, 372, 401, 402, 402, 402, 402, 402, 512, + 552, 401, 401, 401, 401, 401, 201, 202, 202, 202, 202, 202, + 512, 352, 402, 402, 402, 402, 402, 112, 402, 401, 401, 401, + 401, 402, 202, 202, 202, 202, 202, 312, 402, 402, 402, 402, + 402, 552, 402, 402, 402, 402, 402, 402, 402, 202, 202, 202, + 202, 202, 352, 402, 402, 402, 402, 572, 402, 402, 402, 402, + 402, 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 12, + 402, 402, 402, 402, 402, 402, 402, 402, 402, 202, 202, 412, + 442, 542, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, + 542, 442, 572, 402, 402, 402, 402, 512, 402, 402, 402, 402, + 372, 472, 542, 512, 372, 572, 512, 442, 472, 340, 400, 401, + 401, 402, 402, 402, 402, 402, 142, 40, 200, 201, 201, 202, + 202, 202, 202, 202, 242, 0, 1, 1, 1, 2, 2, 2, + 2, 12, 200, 201, 201, 201, 202, 202, 202, 202, 412, 410, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 10, 201, 201, + 201, 202, 202, 202, 202, 202, 202, 200, 540, 440, 0, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 72, 201, 201, 201, + 202, 202, 202, 202, 202, 202, 272, 201, 0, 0, 0, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 42, 201, 201, 202, + 202, 202, 202, 202, 202, 342, 201, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 112, 201, 202, 202, 202, + 202, 202, 202, 312, 201, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 2, 202, 202, 202, 202, 202, 202, + 202, 202, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 202, 202, 202, 202, 202, 202, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 202, 202, 202, + 202, 202, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 112, 202, 202, 202, 312, 202, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 142, 202, 202, + 242, 212, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 212, 2, 72, 202, 272, 342, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 42, 172, 242, 2, 2, 42, 342, 2, 2, + 142, 172, 172, 172, 172, 172, 240, 400, 401, 401, 402, 402, + 402, 402, 402, 402, 572, 140, 200, 201, 201, 202, 202, 202, + 202, 202, 202, 372, 400, 400, 401, 401, 401, 402, 402, 402, + 402, 402, 42, 210, 400, 200, 201, 201, 201, 202, 202, 202, + 202, 202, 342, 401, 401, 401, 401, 402, 402, 402, 402, 402, + 402, 401, 401, 401, 201, 201, 201, 202, 202, 202, 202, 202, + 202, 401, 401, 402, 402, 402, 402, 402, 402, 402, 572, 401, + 401, 401, 401, 201, 202, 202, 202, 202, 202, 202, 202, 372, + 401, 402, 402, 402, 402, 402, 402, 442, 572, 401, 401, 401, + 401, 401, 202, 202, 202, 202, 202, 202, 542, 372, 402, 402, + 402, 402, 402, 402, 142, 402, 402, 402, 402, 402, 402, 202, + 202, 202, 202, 202, 242, 402, 402, 402, 402, 402, 402, 572, + 402, 402, 402, 402, 402, 402, 402, 202, 202, 202, 202, 202, + 372, 402, 402, 402, 402, 402, 572, 402, 402, 402, 402, 402, + 402, 402, 402, 202, 202, 202, 202, 372, 402, 402, 402, 542, + 402, 402, 402, 402, 402, 402, 402, 402, 402, 202, 202, 442, + 12, 442, 572, 402, 402, 402, 402, 402, 402, 402, 402, 402, + 412, 542, 372, 402, 402, 402, 402, 402, 402, 402, 402, 402, + 402, 472, 542, 512, 402, 402, 512, 442, 472 + + + 0, 345, 702, 1071, 1446, 1821, 2223, 2673 + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalHEsil/v9a/hgcalHEsil.xml b/Geometry/HGCalCommonData/data/hgcalHEsil/v9a/hgcalHEsil.xml deleted file mode 100644 index 26589f142e4f9..0000000000000 --- a/Geometry/HGCalCommonData/data/hgcalHEsil/v9a/hgcalHEsil.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - hgcalwafer:HGCalHEWafer0Fine, hgcalwafer:HGCalHEWafer0Coarse1, - hgcalwafer:HGCalHEWafer0Coarse2, hgcalwafer:HGCalHEWafer1Fine, - hgcalwafer:HGCalHEWafer1Coarse1, hgcalwafer:HGCalHEWafer1Coarse2 - - materials:StainlessSteel, materials:StainlessSteel, materials:Air, - materials:Copper, hgcalMaterial:HGC_G10-FR4, materials:Air, - materials:Silicon, hgcalMaterial:HGC_G10-FR4, materials:Copper - - HGCalHEAbsorber1, HGCalHEAbsorber2, HGCalHEAirGap1, HGCalHECopperCover, - HGCalHEPCB, HGCalHEAirGap2, HGCalHESiliconSensitive, HGCalHEBaseplate, - HGCalHEHeatShield - - 40.0*mm, 35.0*mm, 1.0*mm, 1.0*mm, 1.6*mm, 1.5*mm, 0.3*mm, 1.0*mm, - 6.0*mm - - 9, 9, 9, 9, 9, 9, 9, 9 - - 54.0*mm, 49.0*mm, 49.0*mm, 49.0*mm, 49.0*mm, 49.0*mm, 49.0*mm, - 49.0*mm - - 0, 2, 3, 4, 5, 4, 6, 7, 8, - 1, 2, 3, 4, 5, 4, 6, 7, 8, - 1, 2, 3, 4, 5, 4, 6, 7, 8, - 1, 2, 3, 4, 5, 4, 6, 7, 8, - 1, 2, 3, 4, 5, 4, 6, 7, 8, - 1, 2, 3, 4, 5, 4, 6, 7, 8, - 1, 2, 3, 4, 5, 4, 6, 7, 8, - 1, 2, 3, 4, 5, 4, 6, 7, 8 - - 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0 - - 0, 0, 0, 0, 0, 0, 0, 0 - - - - - - [hgcal:rad100200P0], [hgcal:rad100200P1], [hgcal:rad100200P2], - [hgcal:rad100200P3], [hgcal:rad100200P4] - - [hgcal:rad200300P0], [hgcal:rad200300P1], [hgcal:rad200300P2], - [hgcal:rad200300P3], [hgcal:rad200300P4] - - - - - - - - - [hgcal:slope1], [hgcal:slope1], [hgcal:slope1], [hgcal:slope1], - [hgcal:slope1], [hgcal:slope1], [hgcal:slope1] - - [hgcal:zB1], [hgcal:zB2], [hgcal:zB3], [hgcal:zB4], - [hgcal:zB5], [hgcal:zB6], [hgcal:zB7] - - [hgcal:rB1], [hgcal:rB3], [hgcal:rB4], [hgcal:rB5], - [hgcal:rB6], [hgcal:rB7], [hgcal:rB7] - - [hgcal:slope2], [hgcal:slope3], 0, 0 - - [hgcal:zHGCal1], [hgcal:zHGCal2], [hgcal:zHGCal3], - [hgcal:zHGCal4] - - [hgcal:rMaxHGCal1], [hgcal:rMaxHGCal2], [hgcal:rMaxHGCal3], - [hgcal:rMaxHGCal4] - - - - - diff --git a/Geometry/HGCalCommonData/data/hgcalcell/v15/hgcal.xml b/Geometry/HGCalCommonData/data/hgcalcell/v15/hgcal.xml new file mode 100644 index 0000000000000..0342c9cb775bd --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalcell/v15/hgcal.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalcell/v15/hgcalcell.xml b/Geometry/HGCalCommonData/data/hgcalcell/v15/hgcalcell.xml new file mode 100644 index 0000000000000..397d2e844cd1d --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalcell/v15/hgcalcell.xml @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + HGCalEECellTrunc01Fine, HGCalEECellTrunc02Fine, + HGCalEECellTrunc03Fine + + HGCalEESensitiveTrunc01Fine, HGCalEESensitiveTrunc02Fine, + HGCalEESensitiveTrunc03Fine + + HGCalEECellExten01Fine, HGCalEECellExten02Fine, + HGCalEECellExten03Fine + + HGCalEESensitiveExten01Fine, HGCalEESensitiveExten02Fine, + HGCalEESensitiveExten03Fine + + HGCalEECellCorner01Fine, HGCalEECellCorner02Fine, + HGCalEECellCorner03Fine, HGCalEECellCorner04Fine, + HGCalEECellCorner05Fine, HGCalEECellCorner06Fine + + HGCalEESensitiveCorner01Fine, HGCalEESensitiveCorner02Fine, + HGCalEESensitiveCorner03Fine, HGCalEESensitiveCorner04Fine, + HGCalEESensitiveCorner05Fine, HGCalEESensitiveCorner06Fine + + + + + + + + + + + + + HGCalEECellTrunc11Fine, HGCalEECellTrunc12Fine, + HGCalEECellTrunc13Fine + + HGCalEESensitiveTrunc11Fine, HGCalEESensitiveTrunc12Fine, + HGCalEESensitiveTrunc13Fine + + HGCalEECellExten11Fine, HGCalEECellExten12Fine, + HGCalEECellExten13Fine + + HGCalEESensitiveExten11Fine, HGCalEESensitiveExten12Fine, + HGCalEESensitiveExten13Fine + + HGCalEECellCorner11Fine, HGCalEECellCorner12Fine, + HGCalEECellCorner13Fine, HGCalEECellCorner14Fine, + HGCalEECellCorner15Fine, HGCalEECellCorner16Fine + + HGCalEESensitiveCorner11Fine, HGCalEESensitiveCorner12Fine, + HGCalEESensitiveCorner13Fine, HGCalEESensitiveCorner14Fine, + HGCalEESensitiveCorner15Fine, HGCalEESensitiveCorner16Fine + + + + + + + + + + + + + HGCalEECellTrunc01Coarse1, HGCalEECellTrunc02Coarse1, + HGCalEECellTrunc03Coarse1 + + HGCalEESensitiveTrunc01Coarse1, HGCalEESensitiveTrunc02Coarse1, + HGCalEESensitiveTrunc03Coarse1 + + HGCalEECellExten01Coarse1, HGCalEECellExten02Coarse1, + HGCalEECellExten03Coarse1 + + HGCalEESensitiveExten01Coarse1, HGCalEESensitiveExten02Coarse1, + HGCalEESensitiveExten03Coarse1 + + HGCalEECellCorner01Coarse1, HGCalEECellCorner02Coarse1, + HGCalEECellCorner03Coarse1, HGCalEECellCorner04Coarse1, + HGCalEECellCorner05Coarse1, HGCalEECellCorner06Coarse1 + + HGCalEESensitiveCorner01Coarse1, HGCalEESensitiveCorner02Coarse1, + HGCalEESensitiveCorner03Coarse1, HGCalEESensitiveCorner04Coarse1, + HGCalEESensitiveCorner05Coarse1, HGCalEESensitiveCorner06Coarse1 + + + + + + + + + + + + + HGCalEECellTrunc11Coarse1, HGCalEECellTrunc12Coarse1, + HGCalEECellTrunc13Coarse1 + + HGCalEESensitiveTrunc11Coarse1, HGCalEESensitiveTrunc12Coarse1, + HGCalEESensitiveTrunc13Coarse1 + + HGCalEECellExten11Coarse1, HGCalEECellExten12Coarse1, + HGCalEECellExten13Coarse1 + + HGCalEESensitiveExten11Coarse1, HGCalEESensitiveExten12Coarse1, + HGCalEESensitiveExten13Coarse1 + + HGCalEECellCorner11Coarse1, HGCalEECellCorner12Coarse1, + HGCalEECellCorner13Coarse1, HGCalEECellCorner14Coarse1, + HGCalEECellCorner15Coarse1, HGCalEECellCorner16Coarse1 + + HGCalEESensitiveCorner11Coarse1, HGCalEESensitiveCorner12Coarse1, + HGCalEESensitiveCorner13Coarse1, HGCalEESensitiveCorner14Coarse1, + HGCalEESensitiveCorner15Coarse1, HGCalEESensitiveCorner16Coarse1 + + + + + + + + + + + + + HGCalEECellTrunc01Coarse2, HGCalEECellTrunc02Coarse2, + HGCalEECellTrunc03Coarse2 + + HGCalEESensitiveTrunc01Coarse2, HGCalEESensitiveTrunc02Coarse2, + HGCalEESensitiveTrunc03Coarse2 + + HGCalEECellExten01Coarse2, HGCalEECellExten02Coarse2, + HGCalEECellExten03Coarse2 + + HGCalEESensitiveExten01Coarse2, HGCalEESensitiveExten02Coarse2, + HGCalEESensitiveExten03Coarse2 + + HGCalEECellCorner01Coarse2, HGCalEECellCorner02Coarse2, + HGCalEECellCorner03Coarse2, HGCalEECellCorner04Coarse2, + HGCalEECellCorner05Coarse2, HGCalEECellCorner06Coarse2 + + HGCalEESensitiveCorner01Coarse2, HGCalEESensitiveCorner02Coarse2, + HGCalEESensitiveCorner03Coarse2, HGCalEESensitiveCorner04Coarse2, + HGCalEESensitiveCorner05Coarse2, HGCalEESensitiveCorner06Coarse2 + + + + + + + + + + + + + HGCalEECellTrunc11Coarse2, HGCalEECellTrunc12Coarse2, + HGCalEECellTrunc13Coarse2 + + HGCalEESensitiveTrunc11Coarse2, HGCalEESensitiveTrunc12Coarse2, + HGCalEESensitiveTrunc13Coarse2 + + HGCalEECellExten11Coarse2, HGCalEECellExten12Coarse2, + HGCalEECellExten13Coarse2 + + HGCalEESensitiveExten11Coarse2, HGCalEESensitiveExten12Coarse2, + HGCalEESensitiveExten13Coarse2 + + HGCalEECellCorner11Coarse2, HGCalEECellCorner12Coarse2, + HGCalEECellCorner13Coarse2, HGCalEECellCorner14Coarse2, + HGCalEECellCorner15Coarse2, HGCalEECellCorner16Coarse2 + + HGCalEESensitiveCorner11Coarse2, HGCalEESensitiveCorner12Coarse2, + HGCalEESensitiveCorner13Coarse2, HGCalEESensitiveCorner14Coarse2, + HGCalEESensitiveCorner15Coarse2, HGCalEESensitiveCorner16Coarse2 + + + + + + + + + + + + + HGCalHECellTrunc01Fine, HGCalHECellTrunc02Fine, + HGCalHECellTrunc03Fine + + HGCalHESensitiveTrunc01Fine, HGCalHESensitiveTrunc02Fine, + HGCalHESensitiveTrunc03Fine + + HGCalHECellExten01Fine, HGCalHECellExten02Fine, + HGCalHECellExten03Fine + + HGCalHESensitiveExten01Fine, HGCalHESensitiveExten02Fine, + HGCalHESensitiveExten03Fine + + HGCalHECellCorner01Fine, HGCalHECellCorner02Fine, + HGCalHECellCorner03Fine, HGCalHECellCorner04Fine, + HGCalHECellCorner05Fine, HGCalHECellCorner06Fine + + HGCalHESensitiveCorner01Fine, HGCalHESensitiveCorner02Fine, + HGCalHESensitiveCorner03Fine, HGCalHESensitiveCorner04Fine, + HGCalHESensitiveCorner05Fine, HGCalHESensitiveCorner06Fine + + + + + + + + + + + + + HGCalHECellTrunc01Coarse1, HGCalHECellTrunc02Coarse1, + HGCalHECellTrunc03Coarse1 + + HGCalHESensitiveTrunc01Coarse1, HGCalHESensitiveTrunc02Coarse1, + HGCalHESensitiveTrunc03Coarse1 + + HGCalHECellExten01Coarse1, HGCalHECellExten02Coarse1, + HGCalHECellExten03Coarse1 + + HGCalHESensitiveExten01Coarse1, HGCalHESensitiveExten02Coarse1, + HGCalHESensitiveExten03Coarse1 + + HGCalHECellCorner01Coarse1, HGCalHECellCorner02Coarse1, + HGCalHECellCorner03Coarse1, HGCalHECellCorner04Coarse1, + HGCalHECellCorner05Coarse1, HGCalHECellCorner06Coarse1 + + HGCalHESensitiveCorner01Coarse1, HGCalHESensitiveCorner02Coarse1, + HGCalHESensitiveCorner03Coarse1, HGCalHESensitiveCorner04Coarse1, + HGCalHESensitiveCorner05Coarse1, HGCalHESensitiveCorner06Coarse1 + + + + + + + + + + + + + HGCalHECellTrunc01Coarse2, HGCalHECellTrunc02Coarse2, + HGCalHECellTrunc03Coarse2 + + HGCalHESensitiveTrunc01Coarse2, HGCalHESensitiveTrunc02Coarse2, + HGCalHESensitiveTrunc03Coarse2 + + HGCalHECellExten01Coarse2, HGCalHECellExten02Coarse2, + HGCalHECellExten03Coarse2 + + HGCalHESensitiveExten01Coarse2, HGCalHESensitiveExten02Coarse2, + HGCalHESensitiveExten03Coarse2 + + HGCalHECellCorner01Coarse2, HGCalHECellCorner02Coarse2, + HGCalHECellCorner03Coarse2, HGCalHECellCorner04Coarse2, + HGCalHECellCorner05Coarse2, HGCalHECellCorner06Coarse2 + + HGCalHESensitiveCorner01Coarse2, HGCalHESensitiveCorner02Coarse2, + HGCalHESensitiveCorner03Coarse2, HGCalHESensitiveCorner04Coarse2, + HGCalHESensitiveCorner05Coarse2, HGCalHESensitiveCorner06Coarse2 + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalcell/v9/hgcal.xml b/Geometry/HGCalCommonData/data/hgcalcell/v9/hgcal.xml index be2c92a31c5a4..ea675679bf6a1 100644 --- a/Geometry/HGCalCommonData/data/hgcalcell/v9/hgcal.xml +++ b/Geometry/HGCalCommonData/data/hgcalcell/v9/hgcal.xml @@ -1,5 +1,5 @@ - + @@ -11,73 +11,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalpos.xml b/Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalpos.xml new file mode 100644 index 0000000000000..54c4d9989a122 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalpos.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v1/cms.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v1/cms.xml new file mode 100644 index 0000000000000..e71032d50a00e --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v1/cms.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v15/hgcalwafer.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v15/hgcalwafer.xml new file mode 100644 index 0000000000000..c743f7aeba51d --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v15/hgcalwafer.xml @@ -0,0 +1,632 @@ + + + + + + + + + + + + + + + + + + + + + + + + + HGCalEEMotherBoard0Fine, HGCalEEConnector0Fine, HGCalEEPCB0Fine, + HGCalEEEpoxy0Fine, HGCalEEKapton0Fine, HGCalEESensitive0Fine, + HGCalEEBasePlate0Fine + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 4, 3, 6 + + + + hgcalcell:HGCalEECellFull0Fine, hgcalcell:HGCalEECellTrunc01Fine, + hgcalcell:HGCalEECellTrunc02Fine, hgcalcell:HGCalEECellTrunc03Fine, + hgcalcell:HGCalEECellExten01Fine, hgcalcell:HGCalEECellExten02Fine, + hgcalcell:HGCalEECellExten03Fine, hgcalcell:HGCalEECellCorner01Fine, + hgcalcell:HGCalEECellCorner02Fine,hgcalcell:HGCalEECellCorner03Fine, + hgcalcell:HGCalEECellCorner04Fine,hgcalcell:HGCalEECellCorner05Fine, + hgcalcell:HGCalEECellCorner06Fine + + + + + + + + + HGCalEEMotherBoard1Fine, HGCalEEConnector1Fine, HGCalEEPCB1Fine, + HGCalEEEpoxy1Fine, HGCalEEKapton1Fine, HGCalEESensitive1Fine, + HGCalEEBasePlate1Fine + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 6, 3, 4, 3, 4, 3, 5, 3, 2, 1, 0 + + + + hgcalcell:HGCalEECellFull1Fine, hgcalcell:HGCalEECellTrunc11Fine, + hgcalcell:HGCalEECellTrunc12Fine, hgcalcell:HGCalEECellTrunc13Fine, + hgcalcell:HGCalEECellExten11Fine, hgcalcell:HGCalEECellExten12Fine, + hgcalcell:HGCalEECellExten13Fine, hgcalcell:HGCalEECellCorner11Fine, + hgcalcell:HGCalEECellCorner12Fine,hgcalcell:HGCalEECellCorner13Fine, + hgcalcell:HGCalEECellCorner14Fine,hgcalcell:HGCalEECellCorner15Fine, + hgcalcell:HGCalEECellCorner16Fine + + + + + + + + + HGCalEEMotherBoard0Coarse1, HGCalEEConnector0Coarse1, HGCalEEPCB0Coarse1, + HGCalEEEpoxy0Coarse1, HGCalEEKapton0Coarse1, HGCalEESensitive0Coarse1, + HGCalEEBasePlate0Coarse1 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 4, 3, 6 + + + + hgcalcell:HGCalEECellFull0Coarse1, hgcalcell:HGCalEECellTrunc01Coarse1, + hgcalcell:HGCalEECellTrunc02Coarse1, hgcalcell:HGCalEECellTrunc03Coarse1, + hgcalcell:HGCalEECellExten01Coarse1, hgcalcell:HGCalEECellExten02Coarse1, + hgcalcell:HGCalEECellExten03Coarse1, hgcalcell:HGCalEECellCorner01Coarse1, + hgcalcell:HGCalEECellCorner02Coarse1,hgcalcell:HGCalEECellCorner03Coarse1, + hgcalcell:HGCalEECellCorner04Coarse1,hgcalcell:HGCalEECellCorner05Coarse1, + hgcalcell:HGCalEECellCorner06Coarse1 + + + + + + + + + HGCalEEMotherBoard1Coarse1, HGCalEEConnector1Coarse1, HGCalEEPCB1Coarse1, + HGCalEEEpoxy1Coarse1, HGCalEEKapton1Coarse1, HGCalEESensitive1Coarse1, + HGCalEEBasePlate1Coarse1 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 6, 3, 4, 3, 4, 3, 5, 3, 2, 1, 0 + + + + hgcalcell:HGCalEECellFull1Coarse1, hgcalcell:HGCalEECellTrunc11Coarse1, + hgcalcell:HGCalEECellTrunc12Coarse1, hgcalcell:HGCalEECellTrunc13Coarse1, + hgcalcell:HGCalEECellExten11Coarse1, hgcalcell:HGCalEECellExten12Coarse1, + hgcalcell:HGCalEECellExten13Coarse1, hgcalcell:HGCalEECellCorner11Coarse1, + hgcalcell:HGCalEECellCorner12Coarse1,hgcalcell:HGCalEECellCorner13Coarse1, + hgcalcell:HGCalEECellCorner14Coarse1,hgcalcell:HGCalEECellCorner15Coarse1, + hgcalcell:HGCalEECellCorner16Coarse1 + + + + + + + + + HGCalEEMotherBoard0Coarse2, HGCalEEConnector0Coarse2, HGCalEEPCB0Coarse2, + HGCalEEEpoxy0Coarse2, HGCalEEKapton0Coarse2, HGCalEESensitive0Coarse2, + HGCalEEBasePlate0Coarse2 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 4, 3, 6 + + + + hgcalcell:HGCalEECellFull0Coarse2, hgcalcell:HGCalEECellTrunc01Coarse2, + hgcalcell:HGCalEECellTrunc02Coarse2, hgcalcell:HGCalEECellTrunc03Coarse2, + hgcalcell:HGCalEECellExten01Coarse2, hgcalcell:HGCalEECellExten02Coarse2, + hgcalcell:HGCalEECellExten03Coarse2, hgcalcell:HGCalEECellCorner01Coarse2, + hgcalcell:HGCalEECellCorner02Coarse2,hgcalcell:HGCalEECellCorner03Coarse2, + hgcalcell:HGCalEECellCorner04Coarse2,hgcalcell:HGCalEECellCorner05Coarse2, + hgcalcell:HGCalEECellCorner06Coarse2 + + + + + + + + + HGCalEEMotherBoard1Coarse2, HGCalEEConnector1Coarse2, HGCalEEPCB1Coarse2, + HGCalEEEpoxy1Coarse2, HGCalEEKapton1Coarse2, HGCalEESensitive1Coarse2, + HGCalEEBasePlate1Coarse2 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 6, 3, 4, 3, 4, 3, 5, 3, 2, 1, 0 + + + + hgcalcell:HGCalEECellFull1Coarse2, hgcalcell:HGCalEECellTrunc11Coarse2, + hgcalcell:HGCalEECellTrunc12Coarse2, hgcalcell:HGCalEECellTrunc13Coarse2, + hgcalcell:HGCalEECellExten11Coarse2, hgcalcell:HGCalEECellExten12Coarse2, + hgcalcell:HGCalEECellExten13Coarse2, hgcalcell:HGCalEECellCorner11Coarse2, + hgcalcell:HGCalEECellCorner12Coarse2,hgcalcell:HGCalEECellCorner13Coarse2, + hgcalcell:HGCalEECellCorner14Coarse2,hgcalcell:HGCalEECellCorner15Coarse2, + hgcalcell:HGCalEECellCorner16Coarse2 + + + + + + + + + HGCalHEMotherBoard0Fine, HGCalHEConnector0Fine, HGCalHEPCB0Fine, + HGCalHEEpoxy0Fine, HGCalHEKapton0Fine, HGCalHESiliconSensitive0Fine, + HGCalHEBasePlate0Fine + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 1.85*mm, 3.25*mm, 1.76*mm, 0.075*mm, 0.105*mm, [WaferThickness], + 1.1*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 6 + + + + hgcalcell:HGCalHECellFull0Fine, hgcalcell:HGCalHECellTrunc01Fine, + hgcalcell:HGCalHECellTrunc02Fine, hgcalcell:HGCalHECellTrunc03Fine, + hgcalcell:HGCalHECellExten01Fine, hgcalcell:HGCalHECellExten02Fine, + hgcalcell:HGCalHECellExten03Fine, hgcalcell:HGCalHECellCorner01Fine, + hgcalcell:HGCalHECellCorner02Fine,hgcalcell:HGCalHECellCorner03Fine, + hgcalcell:HGCalHECellCorner04Fine,hgcalcell:HGCalHECellCorner05Fine, + hgcalcell:HGCalHECellCorner06Fine + + + + + + + + + HGCalHEMotherBoard0Coarse1, HGCalHEConnector0Coarse1, HGCalHEPCB0Coarse1, + HGCalHEEpoxy0Coarse1, HGCalHEKapton0Coarse1, HGCalHESiliconSensitive0Coarse1, + HGCalHEBasePlate0Coarse1 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 1.85*mm, 3.25*mm, 1.76*mm, 0.075*mm, 0.105*mm, [WaferThickness], + 1.1*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 6 + + + + hgcalcell:HGCalHECellFull0Coarse1, hgcalcell:HGCalHECellTrunc01Coarse1, + hgcalcell:HGCalHECellTrunc02Coarse1, hgcalcell:HGCalHECellTrunc03Coarse1, + hgcalcell:HGCalHECellExten01Coarse1, hgcalcell:HGCalHECellExten02Coarse1, + hgcalcell:HGCalHECellExten03Coarse1, hgcalcell:HGCalHECellCorner01Coarse1, + hgcalcell:HGCalHECellCorner02Coarse1,hgcalcell:HGCalHECellCorner03Coarse1, + hgcalcell:HGCalHECellCorner04Coarse1,hgcalcell:HGCalHECellCorner05Coarse1, + hgcalcell:HGCalHECellCorner06Coarse1 + + + + + + + + + HGCalHEMotherBoard0Coarse2, HGCalHEConnector0Coarse2, HGCalHEPCB0Coarse2, + HGCalHEEpoxy0Coarse2, HGCalHEKapton0Coarse2, HGCalHESiliconSensitive0Coarse2, + HGCalHEBasePlate0Coarse2 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 1.85*mm, 3.25*mm, 1.76*mm, 0.075*mm, 0.105*mm, [WaferThickness], + 1.1*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 6 + + + + hgcalcell:HGCalHECellFull0Coarse2, hgcalcell:HGCalHECellTrunc01Coarse2, + hgcalcell:HGCalHECellTrunc02Coarse2, hgcalcell:HGCalHECellTrunc03Coarse2, + hgcalcell:HGCalHECellExten01Coarse2, hgcalcell:HGCalHECellExten02Coarse2, + hgcalcell:HGCalHECellExten03Coarse2, hgcalcell:HGCalHECellCorner01Coarse2, + hgcalcell:HGCalHECellCorner02Coarse2,hgcalcell:HGCalHECellCorner03Coarse2, + hgcalcell:HGCalHECellCorner04Coarse2,hgcalcell:HGCalHECellCorner05Coarse2, + hgcalcell:HGCalHECellCorner06Coarse2 + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalEEMotherBoard0Fine, HGCalEEConnector0Fine, HGCalEEPCB0Fine, + HGCalEEEpoxy0Fine, HGCalEEKapton0Fine, HGCalEESensitive0Fine, + HGCalEEBasePlate0Fine + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 4, 3, 6 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalEEMotherBoard1Fine, HGCalEEConnector1Fine, HGCalEEPCB1Fine, + HGCalEEEpoxy1Fine, HGCalEEKapton1Fine, HGCalEESensitive1Fine, + HGCalEEBasePlate1Fine + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 6, 3, 4, 3, 4, 3, 5, 3, 2, 1, 0 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalEEMotherBoard0Coarse1, HGCalEEConnector0Coarse1, HGCalEEPCB0Coarse1, + HGCalEEEpoxy0Coarse1, HGCalEEKapton0Coarse1, HGCalEESensitive0Coarse1, + HGCalEEBasePlate0Coarse1 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 4, 3, 6 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalEEMotherBoard1Coarse1, HGCalEEConnector1Coarse1, HGCalEEPCB1Coarse1, + HGCalEEEpoxy1Coarse1, HGCalEEKapton1Coarse1, HGCalEESensitive1Coarse1, + HGCalEEBasePlate1Coarse1 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 6, 3, 4, 3, 4, 3, 5, 3, 2, 1, 0 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalEEMotherBoard0Coarse2, HGCalEEConnector0Coarse2, HGCalEEPCB0Coarse2, + HGCalEEEpoxy0Coarse2, HGCalEEKapton0Coarse2, HGCalEESensitive0Coarse2, + HGCalEEBasePlate0Coarse2 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 4, 3, 6 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalEEMotherBoard1Coarse2, HGCalEEConnector1Coarse2, HGCalEEPCB1Coarse2, + HGCalEEEpoxy1Coarse2, HGCalEEKapton1Coarse2, HGCalEESensitive1Coarse2, + HGCalEEBasePlate1Coarse2 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 6, 3, 4, 3, 4, 3, 5, 3, 2, 1, 0 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalHEMotherBoard0Fine, HGCalHEConnector0Fine, HGCalHEPCB0Fine, + HGCalHEEpoxy0Fine, HGCalHEKapton0Fine, HGCalHESiliconSensitive0Fine, + HGCalHEBasePlate0Fine + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 1.85*mm, 3.25*mm, 1.76*mm, 0.075*mm, 0.105*mm, [WaferThickness], + 1.1*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 6 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalHEMotherBoard0Coarse1, HGCalHEConnector0Coarse1, HGCalHEPCB0Coarse1, + HGCalHEEpoxy0Coarse1, HGCalHEKapton0Coarse1, HGCalHESiliconSensitive0Coarse1, + HGCalHEBasePlate0Coarse1 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 1.85*mm, 3.25*mm, 1.76*mm, 0.075*mm, 0.105*mm, [WaferThickness], + 1.1*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 6 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalHEMotherBoard0Coarse2, HGCalHEConnector0Coarse2, HGCalHEPCB0Coarse2, + HGCalHEEpoxy0Coarse2, HGCalHEKapton0Coarse2, HGCalHESiliconSensitive0Coarse2, + HGCalHEBasePlate0Coarse2 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 1.85*mm, 3.25*mm, 1.76*mm, 0.075*mm, 0.105*mm, [WaferThickness], + 1.1*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 6 + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v15f/hgcal.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v15f/hgcal.xml new file mode 100644 index 0000000000000..5df1ca3b5b0b3 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v15f/hgcal.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v15f/hgcalpos.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v15f/hgcalpos.xml new file mode 100644 index 0000000000000..d498aeba430a0 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v15f/hgcalpos.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v15f/hgcalwafer.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v15f/hgcalwafer.xml new file mode 100644 index 0000000000000..86b232b0694a7 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v15f/hgcalwafer.xml @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + + + + + + + HGCalEEMotherBoard0Fine, HGCalEEConnector0Fine, HGCalEEPCB0Fine, + HGCalEEEpoxy0Fine, HGCalEEKapton0Fine, HGCalEESensitive0Fine, + HGCalEEBasePlate0Fine + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 4, 3, 6 + + + + hgcalcell:HGCalEECellFull0Fine, hgcalcell:HGCalEECellTrunc01Fine, + hgcalcell:HGCalEECellTrunc02Fine, hgcalcell:HGCalEECellTrunc03Fine, + hgcalcell:HGCalEECellExten01Fine, hgcalcell:HGCalEECellExten02Fine, + hgcalcell:HGCalEECellExten03Fine, hgcalcell:HGCalEECellCorner01Fine, + hgcalcell:HGCalEECellCorner02Fine,hgcalcell:HGCalEECellCorner03Fine, + hgcalcell:HGCalEECellCorner04Fine,hgcalcell:HGCalEECellCorner05Fine, + hgcalcell:HGCalEECellCorner06Fine + + + + + + + + + HGCalEEMotherBoard1Fine, HGCalEEConnector1Fine, HGCalEEPCB1Fine, + HGCalEEEpoxy1Fine, HGCalEEKapton1Fine, HGCalEESensitive1Fine, + HGCalEEBasePlate1Fine + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 6, 3, 4, 3, 4, 3, 5, 3, 2, 1, 0 + + + + hgcalcell:HGCalEECellFull1Fine, hgcalcell:HGCalEECellTrunc11Fine, + hgcalcell:HGCalEECellTrunc12Fine, hgcalcell:HGCalEECellTrunc13Fine, + hgcalcell:HGCalEECellExten11Fine, hgcalcell:HGCalEECellExten12Fine, + hgcalcell:HGCalEECellExten13Fine, hgcalcell:HGCalEECellCorner11Fine, + hgcalcell:HGCalEECellCorner12Fine,hgcalcell:HGCalEECellCorner13Fine, + hgcalcell:HGCalEECellCorner14Fine,hgcalcell:HGCalEECellCorner15Fine, + hgcalcell:HGCalEECellCorner16Fine + + + + + + + + + HGCalEEMotherBoard0Coarse1, HGCalEEConnector0Coarse1, HGCalEEPCB0Coarse1, + HGCalEEEpoxy0Coarse1, HGCalEEKapton0Coarse1, HGCalEESensitive0Coarse1, + HGCalEEBasePlate0Coarse1 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 4, 3, 6 + + + + hgcalcell:HGCalEECellFull0Coarse1, hgcalcell:HGCalEECellTrunc01Coarse1, + hgcalcell:HGCalEECellTrunc02Coarse1, hgcalcell:HGCalEECellTrunc03Coarse1, + hgcalcell:HGCalEECellExten01Coarse1, hgcalcell:HGCalEECellExten02Coarse1, + hgcalcell:HGCalEECellExten03Coarse1, hgcalcell:HGCalEECellCorner01Coarse1, + hgcalcell:HGCalEECellCorner02Coarse1,hgcalcell:HGCalEECellCorner03Coarse1, + hgcalcell:HGCalEECellCorner04Coarse1,hgcalcell:HGCalEECellCorner05Coarse1, + hgcalcell:HGCalEECellCorner06Coarse1 + + + + + + + + + HGCalEEMotherBoard1Coarse1, HGCalEEConnector1Coarse1, HGCalEEPCB1Coarse1, + HGCalEEEpoxy1Coarse1, HGCalEEKapton1Coarse1, HGCalEESensitive1Coarse1, + HGCalEEBasePlate1Coarse1 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 6, 3, 4, 3, 4, 3, 5, 3, 2, 1, 0 + + + + hgcalcell:HGCalEECellFull1Coarse1, hgcalcell:HGCalEECellTrunc11Coarse1, + hgcalcell:HGCalEECellTrunc12Coarse1, hgcalcell:HGCalEECellTrunc13Coarse1, + hgcalcell:HGCalEECellExten11Coarse1, hgcalcell:HGCalEECellExten12Coarse1, + hgcalcell:HGCalEECellExten13Coarse1, hgcalcell:HGCalEECellCorner11Coarse1, + hgcalcell:HGCalEECellCorner12Coarse1,hgcalcell:HGCalEECellCorner13Coarse1, + hgcalcell:HGCalEECellCorner14Coarse1,hgcalcell:HGCalEECellCorner15Coarse1, + hgcalcell:HGCalEECellCorner16Coarse1 + + + + + + + + + HGCalEEMotherBoard0Coarse2, HGCalEEConnector0Coarse2, HGCalEEPCB0Coarse2, + HGCalEEEpoxy0Coarse2, HGCalEEKapton0Coarse2, HGCalEESensitive0Coarse2, + HGCalEEBasePlate0Coarse2 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 4, 3, 6 + + + + hgcalcell:HGCalEECellFull0Coarse2, hgcalcell:HGCalEECellTrunc01Coarse2, + hgcalcell:HGCalEECellTrunc02Coarse2, hgcalcell:HGCalEECellTrunc03Coarse2, + hgcalcell:HGCalEECellExten01Coarse2, hgcalcell:HGCalEECellExten02Coarse2, + hgcalcell:HGCalEECellExten03Coarse2, hgcalcell:HGCalEECellCorner01Coarse2, + hgcalcell:HGCalEECellCorner02Coarse2,hgcalcell:HGCalEECellCorner03Coarse2, + hgcalcell:HGCalEECellCorner04Coarse2,hgcalcell:HGCalEECellCorner05Coarse2, + hgcalcell:HGCalEECellCorner06Coarse2 + + + + + + + + + HGCalEEMotherBoard1Coarse2, HGCalEEConnector1Coarse2, HGCalEEPCB1Coarse2, + HGCalEEEpoxy1Coarse2, HGCalEEKapton1Coarse2, HGCalEESensitive1Coarse2, + HGCalEEBasePlate1Coarse2 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 6, 3, 4, 3, 4, 3, 5, 3, 2, 1, 0 + + + + hgcalcell:HGCalEECellFull1Coarse2, hgcalcell:HGCalEECellTrunc11Coarse2, + hgcalcell:HGCalEECellTrunc12Coarse2, hgcalcell:HGCalEECellTrunc13Coarse2, + hgcalcell:HGCalEECellExten11Coarse2, hgcalcell:HGCalEECellExten12Coarse2, + hgcalcell:HGCalEECellExten13Coarse2, hgcalcell:HGCalEECellCorner11Coarse2, + hgcalcell:HGCalEECellCorner12Coarse2,hgcalcell:HGCalEECellCorner13Coarse2, + hgcalcell:HGCalEECellCorner14Coarse2,hgcalcell:HGCalEECellCorner15Coarse2, + hgcalcell:HGCalEECellCorner16Coarse2 + + + + + + + + + HGCalHEMotherBoard0Fine, HGCalHEConnector0Fine, HGCalHEPCB0Fine, + HGCalHEEpoxy0Fine, HGCalHEKapton0Fine, HGCalHESensitive0Fine, + HGCalHEBasePlate0Fine + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 1.85*mm, 3.25*mm, 1.76*mm, 0.075*mm, 0.105*mm, [WaferThickness], + 1.1*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 6 + + + + hgcalcell:HGCalHECellFull0Fine, hgcalcell:HGCalHECellTrunc01Fine, + hgcalcell:HGCalHECellTrunc02Fine, hgcalcell:HGCalHECellTrunc03Fine, + hgcalcell:HGCalHECellExten01Fine, hgcalcell:HGCalHECellExten02Fine, + hgcalcell:HGCalHECellExten03Fine, hgcalcell:HGCalHECellCorner01Fine, + hgcalcell:HGCalHECellCorner02Fine,hgcalcell:HGCalHECellCorner03Fine, + hgcalcell:HGCalHECellCorner04Fine,hgcalcell:HGCalHECellCorner05Fine, + hgcalcell:HGCalHECellCorner06Fine + + + + + + + + + HGCalHEMotherBoard0Coarse1, HGCalHEConnector0Coarse1, HGCalHEPCB0Coarse1, + HGCalHEEpoxy0Coarse1, HGCalHEKapton0Coarse1, HGCalHESensitive0Coarse1, + HGCalHEBasePlate0Coarse1 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 1.85*mm, 3.25*mm, 1.76*mm, 0.075*mm, 0.105*mm, [WaferThickness], + 1.1*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 6 + + + + hgcalcell:HGCalHECellFull0Coarse1, hgcalcell:HGCalHECellTrunc01Coarse1, + hgcalcell:HGCalHECellTrunc02Coarse1, hgcalcell:HGCalHECellTrunc03Coarse1, + hgcalcell:HGCalHECellExten01Coarse1, hgcalcell:HGCalHECellExten02Coarse1, + hgcalcell:HGCalHECellExten03Coarse1, hgcalcell:HGCalHECellCorner01Coarse1, + hgcalcell:HGCalHECellCorner02Coarse1,hgcalcell:HGCalHECellCorner03Coarse1, + hgcalcell:HGCalHECellCorner04Coarse1,hgcalcell:HGCalHECellCorner05Coarse1, + hgcalcell:HGCalHECellCorner06Coarse1 + + + + + + + + + HGCalHEMotherBoard0Coarse2, HGCalHEConnector0Coarse2, HGCalHEPCB0Coarse2, + HGCalHEEpoxy0Coarse2, HGCalHEKapton0Coarse2, HGCalHESensitive0Coarse2, + HGCalHEBasePlate0Coarse2 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 1.85*mm, 3.25*mm, 1.76*mm, 0.075*mm, 0.105*mm, [WaferThickness], + 1.1*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 6 + + + + hgcalcell:HGCalHECellFull0Coarse2, hgcalcell:HGCalHECellTrunc01Coarse2, + hgcalcell:HGCalHECellTrunc02Coarse2, hgcalcell:HGCalHECellTrunc03Coarse2, + hgcalcell:HGCalHECellExten01Coarse2, hgcalcell:HGCalHECellExten02Coarse2, + hgcalcell:HGCalHECellExten03Coarse2, hgcalcell:HGCalHECellCorner01Coarse2, + hgcalcell:HGCalHECellCorner02Coarse2,hgcalcell:HGCalHECellCorner03Coarse2, + hgcalcell:HGCalHECellCorner04Coarse2,hgcalcell:HGCalHECellCorner05Coarse2, + hgcalcell:HGCalHECellCorner06Coarse2 + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcal.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcal.xml new file mode 100644 index 0000000000000..5df1ca3b5b0b3 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcal.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalpos.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalpos.xml new file mode 100644 index 0000000000000..3855fb075fcc5 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalpos.xml @@ -0,0 +1,1897 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalpostest.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalpostest.xml new file mode 100644 index 0000000000000..e7351143ee754 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalpostest.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalwafer.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalwafer.xml new file mode 100644 index 0000000000000..0a8f0f9efde9f --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalwafer.xml @@ -0,0 +1,342 @@ + + + + + + + + + + + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalEEMotherBoard0Fine, HGCalEEConnector0Fine, HGCalEEPCB0Fine, + HGCalEEEpoxy0Fine, HGCalEEKapton0Fine, HGCalEESensitive0Fine, + HGCalEEBasePlate0Fine + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 4, 3, 6 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalEEMotherBoard1Fine, HGCalEEConnector1Fine, HGCalEEPCB1Fine, + HGCalEEEpoxy1Fine, HGCalEEKapton1Fine, HGCalEESensitive1Fine, + HGCalEEBasePlate1Fine + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 6, 3, 4, 3, 4, 3, 5, 3, 2, 1, 0 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalEEMotherBoard0Coarse1, HGCalEEConnector0Coarse1, HGCalEEPCB0Coarse1, + HGCalEEEpoxy0Coarse1, HGCalEEKapton0Coarse1, HGCalEESensitive0Coarse1, + HGCalEEBasePlate0Coarse1 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 4, 3, 6 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalEEMotherBoard1Coarse1, HGCalEEConnector1Coarse1, HGCalEEPCB1Coarse1, + HGCalEEEpoxy1Coarse1, HGCalEEKapton1Coarse1, HGCalEESensitive1Coarse1, + HGCalEEBasePlate1Coarse1 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 6, 3, 4, 3, 4, 3, 5, 3, 2, 1, 0 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalEEMotherBoard0Coarse2, HGCalEEConnector0Coarse2, HGCalEEPCB0Coarse2, + HGCalEEEpoxy0Coarse2, HGCalEEKapton0Coarse2, HGCalEESensitive0Coarse2, + HGCalEEBasePlate0Coarse2 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 4, 3, 6 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalEEMotherBoard1Coarse2, HGCalEEConnector1Coarse2, HGCalEEPCB1Coarse2, + HGCalEEEpoxy1Coarse2, HGCalEEKapton1Coarse2, HGCalEESensitive1Coarse2, + HGCalEEBasePlate1Coarse2 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 6, 3, 4, 3, 4, 3, 5, 3, 2, 1, 0 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalHEMotherBoard0Fine, HGCalHEConnector0Fine, HGCalHEPCB0Fine, + HGCalHEEpoxy0Fine, HGCalHEKapton0Fine, HGCalHESensitive0Fine, + HGCalHEBasePlate0Fine + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 1.85*mm, 3.25*mm, 1.76*mm, 0.075*mm, 0.105*mm, [WaferThickness], + 1.1*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 6 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalHEMotherBoard0Coarse1, HGCalHEConnector0Coarse1, HGCalHEPCB0Coarse1, + HGCalHEEpoxy0Coarse1, HGCalHEKapton0Coarse1, HGCalHESensitive0Coarse1, + HGCalHEBasePlate0Coarse1 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 1.85*mm, 3.25*mm, 1.76*mm, 0.075*mm, 0.105*mm, [WaferThickness], + 1.1*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 6 + + + + + + + + + + + + + b0, b1, b2, b3, b4, b5, g0, g1, g2, g3, g4, g5, gm0, gm1, gm2, + gm3, gm4, gm5, a0, a1, a2, a3, a4, a5, d0, d1, d2, d3, d4, d5, + dm0, dm1, dm2, dm3, dm4, dm5, c0, c1, c2, c3, c4, c5 + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 + + 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, + 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 + + HGCalHEMotherBoard0Coarse2, HGCalHEConnector0Coarse2, HGCalHEPCB0Coarse2, + HGCalHEEpoxy0Coarse2, HGCalHEKapton0Coarse2, HGCalHESensitive0Coarse2, + HGCalHEBasePlate0Coarse2 + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 1.85*mm, 3.25*mm, 1.76*mm, 0.075*mm, 0.105*mm, [WaferThickness], + 1.1*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 6 + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalwafertest.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalwafertest.xml new file mode 100644 index 0000000000000..7c2ff9339d273 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalwafertest.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + b0 + + 1 + + 0 + + HGCalEEMotherBoard0Fine, HGCalEEConnector0Fine, HGCalEEPCB0Fine, + HGCalEEEpoxy0Fine, HGCalEEKapton0Fine, HGCalEESensitive0Fine, + HGCalEEBasePlate0Fine + + hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:WCu + + 1.85*mm, 3.25*mm, 1.76*mm, 0.0675*mm, 0.105*mm, [WaferThickness], + 1.45*mm + + 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 5, 3, 4, 3, 4, 3, 6 + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v7/hgcal.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v7/hgcal.xml index ce8d9bd9cfa87..4b684744fbde2 100644 --- a/Geometry/HGCalCommonData/data/hgcalwafer/v7/hgcal.xml +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v7/hgcal.xml @@ -1,33 +1,8 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v7/hgcalpos.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v7/hgcalpos.xml new file mode 100644 index 0000000000000..56426aa1e5b03 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v7/hgcalpos.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v8/hgcal.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v8/hgcal.xml index f9f9bea375fe7..f01a8355af573 100644 --- a/Geometry/HGCalCommonData/data/hgcalwafer/v8/hgcal.xml +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v8/hgcal.xml @@ -1,31 +1,7 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v8/hgcalpos.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v8/hgcalpos.xml new file mode 100644 index 0000000000000..64de0f5216ff4 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v8/hgcalpos.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcal.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcal.xml index f8c4da6381b58..1168dd89233df 100644 --- a/Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcal.xml +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcal.xml @@ -1,5 +1,5 @@ - + @@ -13,39 +13,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalpos.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalpos.xml new file mode 100644 index 0000000000000..7cc8cdc4cc0a1 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalpos.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h b/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h index 46bc31893307f..8a2560efe8cb7 100644 --- a/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h +++ b/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h @@ -19,6 +19,7 @@ #include "Geometry/HGCalCommonData/interface/HGCalGeometryMode.h" #include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h" #include "Geometry/HGCalCommonData/interface/HGCalParameters.h" +#include "Geometry/HGCalCommonData/interface/HGCalTileIndex.h" #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" #include @@ -107,9 +108,20 @@ class HGCalDDDConstants { std::pair rowColumnWafer(const int wafer) const; int sectors() const { return hgpar_->nSectors_; } std::pair simToReco(int cell, int layer, int mod, bool half) const; + int tileSiPM(int sipm) const { return ((sipm > 0) ? HGCalTypes::SiPMSmall : HGCalTypes::SiPMLarge); } bool tileTrapezoid() const { return ((mode_ == HGCalGeometryMode::Trapezoid) || (mode_ == HGCalGeometryMode::TrapezoidFile)); } + std::pair tileType(int layer, int ring, int phi) const { + int indx = HGCalTileIndex::tileIndex(layer, ring, phi); + int type(-1), sipm(-1); + auto itr = hgpar_->tileInfoMap_.find(indx); + if (itr != hgpar_->tileInfoMap_.end()) { + type = 1 + (itr->second).type; + sipm = ((itr->second).sipm == HGCalTypes::SiPMLarge) ? 0 : 1; + } + return std::make_pair(type, sipm); + } unsigned int volumes() const { return hgpar_->moduleLayR_.size(); } int waferFromCopy(int copy) const; void waferFromPosition(const double x, const double y, int& wafer, int& icell, int& celltyp) const; diff --git a/Geometry/HGCalCommonData/interface/HGCalGeomParameters.h b/Geometry/HGCalCommonData/interface/HGCalGeomParameters.h index 63d41e917da7e..3e9d06f4cf3e2 100644 --- a/Geometry/HGCalCommonData/interface/HGCalGeomParameters.h +++ b/Geometry/HGCalCommonData/interface/HGCalGeomParameters.h @@ -109,14 +109,11 @@ class HGCalGeomParameters { void loadSpecParsHexagon8(HGCalParameters& php); void loadSpecParsHexagon8(HGCalParameters& php, const std::vector& waferIndex, - const std::vector& waferTypes, - const std::vector& waferParts, - const std::vector& waferOrien); + const std::vector& waferProperties); void loadSpecParsTrapezoid(HGCalParameters& php); void loadSpecParsTrapezoid(HGCalParameters& php, - const std::vector& tileIndx, - const std::vector& tileType, - const std::vector& tileSiPM, + const std::vector& tileIndex, + const std::vector& tileProperty, const std::vector& tileHEX1, const std::vector& tileHEX2, const std::vector& tileHEX3, diff --git a/Geometry/HGCalCommonData/interface/HGCalGeomRotation.h b/Geometry/HGCalCommonData/interface/HGCalGeomRotation.h new file mode 100644 index 0000000000000..a4412924e515a --- /dev/null +++ b/Geometry/HGCalCommonData/interface/HGCalGeomRotation.h @@ -0,0 +1,30 @@ +#ifndef Geometry_HGCalCommonData_HGCalGeomRotation_h +#define Geometry_HGCalCommonData_HGCalGeomRotation_h + +class HGCalGeomRotation { +public: + enum class SectorType { Sector120Degrees, Sector60Degrees }; + enum class WaferCentring { WaferCentred, CornerCentredY, CornerCentredMercedes }; + + HGCalGeomRotation(SectorType sectorType) { sectorType_ = sectorType; }; + ~HGCalGeomRotation() {} + + void uvMappingFromSector0(WaferCentring waferCentring, int& moduleU, int& moduleV, unsigned sector) const; + unsigned uvMappingToSector0(WaferCentring waferCentring, int& moduleU, int& moduleV) const; + +private: + void uvMappingFrom120DegreeSector0(WaferCentring waferCentring, int& moduleU, int& moduleV, unsigned sector) const; + void uvMappingFrom60DegreeSector0(WaferCentring waferCentring, int& moduleU, int& moduleV, unsigned sector) const; + + unsigned uvMappingTo120DegreeSector0(WaferCentring waferCentring, int& moduleU, int& moduleV) const; + unsigned uvMappingTo60DegreeSector0(WaferCentring waferCentring, int& moduleU, int& moduleV) const; + + void RotateModule60DegreesAnticlockwise(int& moduleU, int& moduleV) const; + void RotateModule60DegreesClockwise(int& moduleU, int& moduleV) const; + void RotateModule120DegreesAnticlockwise(int& moduleU, int& moduleV, int offset) const; + void RotateModule120DegreesClockwise(int& moduleU, int& moduleV, int offset) const; + + SectorType sectorType_; +}; + +#endif diff --git a/Geometry/HGCalCommonData/interface/HGCalGeomTools.h b/Geometry/HGCalCommonData/interface/HGCalGeomTools.h index c42ffde8538c5..c6aa1dde5f765 100644 --- a/Geometry/HGCalCommonData/interface/HGCalGeomTools.h +++ b/Geometry/HGCalCommonData/interface/HGCalGeomTools.h @@ -10,10 +10,10 @@ class HGCalGeomTools { HGCalGeomTools(); ~HGCalGeomTools() {} - static const int k_allCorners = 6; - static const int k_fiveCorners = 5; - static const int k_fourCorners = 4; - static const int k_threeCorners = 3; + static constexpr int k_allCorners = 6; + static constexpr int k_fiveCorners = 5; + static constexpr int k_fourCorners = 4; + static constexpr int k_threeCorners = 3; static void radius(double zf, double zb, diff --git a/Geometry/HGCalCommonData/interface/HGCalParameters.h b/Geometry/HGCalCommonData/interface/HGCalParameters.h index a6a1b0afd0b7e..9685f326f0284 100644 --- a/Geometry/HGCalCommonData/interface/HGCalParameters.h +++ b/Geometry/HGCalCommonData/interface/HGCalParameters.h @@ -9,6 +9,7 @@ #include "CondFormats/Serialization/interface/Serializable.h" #include "DataFormats/GeometryVector/interface/GlobalPoint.h" #include "Geometry/HGCalCommonData/interface/HGCalGeometryMode.h" +#include "DD4hep/DD4hepUnits.h" class HGCalParameters { public: @@ -17,9 +18,14 @@ class HGCalParameters { waferInfo(int32_t t = 0, int32_t p = 0, int32_t o = 0) : type(t), part(p), orient(o){}; }; struct tileInfo { - int32_t type, sipm, hex1, hex2, hex3, hex4; + int32_t type, sipm, hex[4]; tileInfo(int32_t t = 0, int32_t s = 0, int32_t h1 = 0, int32_t h2 = 0, int32_t h3 = 0, int32_t h4 = 0) - : type(t), sipm(s), hex1(h1), hex2(h2), hex3(h3), hex4(h4){}; + : type(t), sipm(s) { + hex[0] = h1; + hex[1] = h2; + hex[2] = h3; + hex[3] = h4; + }; }; typedef std::vector > layer_map; typedef std::unordered_map wafer_map; @@ -31,10 +37,10 @@ class HGCalParameters { static constexpr double k_ScaleToDDD = 10.0; static constexpr double k_ScaleFromDDDToG4 = 1.0; static constexpr double k_ScaleToDDDFromG4 = 1.0; - static constexpr double k_ScaleFromDD4Hep = 1.0; - static constexpr double k_ScaleToDD4Hep = 1.0; - static constexpr double k_ScaleFromDD4HepToG4 = 10.0; - static constexpr double k_ScaleToDD4HepFromG4 = 0.1; + static constexpr double k_ScaleFromDD4Hep = (1.0 / dd4hep::cm); + static constexpr double k_ScaleToDD4Hep = dd4hep::cm; + static constexpr double k_ScaleFromDD4HepToG4 = (1.0 / dd4hep::mm); + static constexpr double k_ScaleToDD4HepFromG4 = dd4hep::mm; static constexpr uint32_t k_CornerSize = 6; static constexpr double tol = 1.0e-12; @@ -180,14 +186,14 @@ class HGCalParameters { COND_SERIALIZABLE; private: - const int kMaskZside = 0x1; - const int kMaskLayer = 0x7F; - const int kMaskSector = 0x3FF; - const int kMaskSubSec = 0x1; - const int kShiftZside = 19; - const int kShiftLayer = 12; - const int kShiftSector = 1; - const int kShiftSubSec = 0; + static constexpr int kMaskZside = 0x1; + static constexpr int kMaskLayer = 0x7F; + static constexpr int kMaskSector = 0x3FF; + static constexpr int kMaskSubSec = 0x1; + static constexpr int kShiftZside = 19; + static constexpr int kShiftLayer = 12; + static constexpr int kShiftSector = 1; + static constexpr int kShiftSubSec = 0; }; #endif diff --git a/Geometry/HGCalCommonData/interface/HGCalProperty.h b/Geometry/HGCalCommonData/interface/HGCalProperty.h new file mode 100644 index 0000000000000..b6a24153dd001 --- /dev/null +++ b/Geometry/HGCalCommonData/interface/HGCalProperty.h @@ -0,0 +1,51 @@ +#ifndef Geometry_HGCalCommonData_HGCalProperty_h +#define Geometry_HGCalCommonData_HGCalProperty_h + +#include +#include + +namespace HGCalProperty { + int32_t waferProperty(const int32_t thick, const int32_t partial, const int32_t orient); + int32_t waferThick(const int32_t property); + int32_t waferPartial(const int32_t property); + int32_t waferOrient(const int32_t property); + int32_t tileProperty(const int32_t type, const int32_t sipm); + int32_t tileType(const int32_t property); + int32_t tileSiPM(const int32_t property); + + constexpr int32_t kHGCalWaferUOffset = 0; + constexpr int32_t kHGCalWaferUMask = 0x1F; + constexpr int32_t kHGCalWaferUSignOffset = 5; + constexpr int32_t kHGCalWaferUSignMask = 0x1; + constexpr int32_t kHGCalWaferVOffset = 6; + constexpr int32_t kHGCalWaferVMask = 0x1F; + constexpr int32_t kHGCalWaferVSignOffset = 11; + constexpr int32_t kHGCalWaferVSignMask = 0x1; + constexpr int32_t kHGCalWaferCopyOffset = 0; + constexpr int32_t kHGCalWaferCopyMask = 0x7FFFF; + constexpr int32_t kHGCalLayerOldMask = 0x1000000; + + constexpr int32_t kHGCalLayerOffset = 18; + constexpr int32_t kHGCalLayerMask = 0x1F; + + constexpr int32_t kHGCalPhiOffset = 0; + constexpr int32_t kHGCalPhiMask = 0x1FF; + constexpr int32_t kHGCalRingOffset = 9; + constexpr int32_t kHGCalRingMask = 0x1FF; + + constexpr int32_t kHGCalFactor = 10; + constexpr int32_t kHGCalOffsetThick = 1; + constexpr int32_t kHGCalOffsetPartial = 10; + constexpr int32_t kHGCalOffsetOrient = 100; + constexpr int32_t kHGCalOffsetType = 1; + constexpr int32_t kHGCalOffsetSiPM = 10; + constexpr int32_t kHGCalTilePack = 1000; + + constexpr int32_t kHGCalTilePhis = 288; + constexpr int32_t kHGCalTilePhisBy2 = kHGCalTilePhis / 2; + constexpr int32_t kHGCalTilePhisBy3 = kHGCalTilePhis / 3; + constexpr int32_t kHGCalTilePhisBy12 = kHGCalTilePhis / 12; + +}; // namespace HGCalProperty + +#endif diff --git a/Geometry/HGCalCommonData/interface/HGCalTileIndex.h b/Geometry/HGCalCommonData/interface/HGCalTileIndex.h index 4201bd277590a..5c2cf6fe6edbe 100644 --- a/Geometry/HGCalCommonData/interface/HGCalTileIndex.h +++ b/Geometry/HGCalCommonData/interface/HGCalTileIndex.h @@ -3,23 +3,19 @@ #include #include +#include -class HGCalTileIndex { -public: - HGCalTileIndex() {} - ~HGCalTileIndex() {} - static int32_t tileIndex(int32_t layer, int32_t ring, int32_t phi); - static int32_t tileLayer(int32_t index); - static int32_t tileRing(int32_t index); - static int32_t tilePhi(int32_t index); - -private: - static constexpr int32_t kHGCalLayerOffset = 18; - static constexpr int32_t kHGCalLayerMask = 0x1F; - static constexpr int32_t kHGCalPhiOffset = 0; - static constexpr int32_t kHGCalPhiMask = 0x1FF; - static constexpr int32_t kHGCalRingOffset = 9; - static constexpr int32_t kHGCalRingMask = 0x1FF; -}; +namespace HGCalTileIndex { + int32_t tileIndex(int32_t layer, int32_t ring, int32_t phi); + int32_t tileLayer(int32_t index); + int32_t tileRing(int32_t index); + int32_t tilePhi(int32_t index); + int32_t tileProperty(int32_t, int32_t); + int32_t tileType(int32_t); + int32_t tileSiPM(int32_t); + int32_t tilePack(int32_t ly, int32_t k1, int32_t k2); + std::tuple tileUnpack(int32_t index); + bool tileExist(const int32_t* hex, int32_t zside, int32_t phi); +}; // namespace HGCalTileIndex #endif diff --git a/Geometry/HGCalCommonData/interface/HGCalWaferIndex.h b/Geometry/HGCalCommonData/interface/HGCalWaferIndex.h index 19253a8f94930..6cc45320b4682 100644 --- a/Geometry/HGCalCommonData/interface/HGCalWaferIndex.h +++ b/Geometry/HGCalCommonData/interface/HGCalWaferIndex.h @@ -4,16 +4,13 @@ #include #include -class HGCalWaferIndex { -public: - HGCalWaferIndex() {} - ~HGCalWaferIndex() {} - static int32_t waferIndex(int32_t layer, int32_t waferU, int32_t waferV, bool old = false); - static int32_t waferLayer(const int32_t index); - static int32_t waferU(const int32_t index); - static int32_t waferV(const int32_t index); - static int32_t waferCopy(const int32_t index); - static bool waferFormat(const int32_t index); -}; +namespace HGCalWaferIndex { + int32_t waferIndex(int32_t layer, int32_t waferU, int32_t waferV, bool old = false); + int32_t waferLayer(const int32_t index); + int32_t waferU(const int32_t index); + int32_t waferV(const int32_t index); + int32_t waferCopy(const int32_t index); + bool waferFormat(const int32_t index); +}; // namespace HGCalWaferIndex #endif diff --git a/Geometry/HGCalCommonData/interface/HGCalWaferMask.h b/Geometry/HGCalCommonData/interface/HGCalWaferMask.h index 72585bab56d77..694b0738ae1d1 100644 --- a/Geometry/HGCalCommonData/interface/HGCalWaferMask.h +++ b/Geometry/HGCalCommonData/interface/HGCalWaferMask.h @@ -31,8 +31,10 @@ class HGCalWaferMask { bool deug = false); static bool goodTypeMode( double xpos, double ypos, double delX, double delY, double rin, double rout, int part, int rotn, bool debug); + static std::vector > waferXY( + int part, int orient, int zside, double delX, double delY, double xpos, double ypos); - static const int k_OffsetRotation = 10; + static constexpr int k_OffsetRotation = 10; }; #endif diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalCell.cc b/Geometry/HGCalCommonData/plugins/DDHGCalCell.cc index 85853773f6b2c..9a26ae246f654 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalCell.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalCell.cc @@ -156,11 +156,11 @@ void DDHGCalCell::execute(DDCompactView& cpv) { << tran << " with " << rot; #endif - static const int ir0[] = {0, 1, 0}; - static const int ir1[] = {1, 2, 1}; - static const int ir2[] = {2, 3, 3}; - static const int ir3[] = {3, 4, 4}; - static const int ir4[] = {5, 5, 5}; + static constexpr int ir0[] = {0, 1, 0}; + static constexpr int ir1[] = {1, 2, 1}; + static constexpr int ir2[] = {2, 3, 3}; + static constexpr int ir3[] = {3, 4, 4}; + static constexpr int ir4[] = {5, 5, 5}; for (unsigned int i = 0; i < truncCN_.size(); ++i) { std::vector xw = {xx[ir0[i]], xx[ir1[i]], xx[ir2[i]], xx[ir3[i]], xx[ir4[i]]}; std::vector yw = {yy[ir0[i]], yy[ir1[i]], yy[ir2[i]], yy[ir3[i]], yy[ir4[i]]}; @@ -191,11 +191,11 @@ void DDHGCalCell::execute(DDCompactView& cpv) { #endif } - static const int ie0[] = {1, 5, 0}; - static const int ie1[] = {2, 6, 1}; - static const int ie2[] = {3, 7, 8}; - static const int ie3[] = {10, 3, 9}; - static const int ie4[] = {11, 4, 5}; + static constexpr int ie0[] = {1, 5, 0}; + static constexpr int ie1[] = {2, 6, 1}; + static constexpr int ie2[] = {3, 7, 8}; + static constexpr int ie3[] = {10, 3, 9}; + static constexpr int ie4[] = {11, 4, 5}; for (unsigned int i = 0; i < extenCN_.size(); ++i) { std::vector xw = {xx[ie0[i]], xx[ie1[i]], xx[ie2[i]], xx[ie3[i]], xx[ie4[i]]}; std::vector yw = {yy[ie0[i]], yy[ie1[i]], yy[ie2[i]], yy[ie3[i]], yy[ie4[i]]}; @@ -226,11 +226,11 @@ void DDHGCalCell::execute(DDCompactView& cpv) { #endif } - static const int ic0[] = {0, 1, 1, 1, 1, 0}; - static const int ic1[] = {1, 2, 2, 7, 3, 1}; - static const int ic2[] = {8, 3, 3, 3, 4, 3}; - static const int ic3[] = {3, 5, 10, 4, 5, 9}; - static const int ic4[] = {5, 11, 5, 5, 6, 5}; + static constexpr int ic0[] = {0, 1, 1, 1, 1, 0}; + static constexpr int ic1[] = {1, 2, 2, 7, 3, 1}; + static constexpr int ic2[] = {8, 3, 3, 3, 4, 3}; + static constexpr int ic3[] = {3, 5, 10, 4, 5, 9}; + static constexpr int ic4[] = {5, 11, 5, 5, 6, 5}; for (unsigned int i = 0; i < cornrCN_.size(); ++i) { std::vector xw = {xx[ic0[i]], xx[ic1[i]], xx[ic2[i]], xx[ic3[i]], xx[ic4[i]]}; std::vector yw = {yy[ic0[i]], yy[ic1[i]], yy[ic2[i]], yy[ic3[i]], yy[ic4[i]]}; diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalEEAlgo.cc b/Geometry/HGCalCommonData/plugins/DDHGCalEEAlgo.cc index 34cbd4ee16e41..d302c0813646b 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalEEAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalEEAlgo.cc @@ -3,7 +3,7 @@ // Description: Geometry factory class for HGCal (EE and HESil) /////////////////////////////////////////////////////////////////////////////// -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDAlgorithm.h" #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" @@ -27,7 +27,7 @@ #include //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; class DDHGCalEEAlgo : public DDAlgorithm { public: @@ -384,6 +384,8 @@ void DDHGCalEEAlgo::positionSensitive(const DDLogicalPart& glog, if (corner.first > 0) { int type = waferType_->getType(xpos, ypos, zpos); int copy = HGCalTypes::packTypeUV(type, u, v); + if (layertype > 1) + type += 3; #ifdef EDM_ML_DEBUG if (iu > ium) ium = iu; @@ -403,8 +405,6 @@ void DDHGCalEEAlgo::positionSensitive(const DDLogicalPart& glog, #endif DDTranslation tran(xpos, ypos, 0.0); DDRotation rotation; - if (layertype > 1) - type += 3; DDName name = DDName(DDSplit(wafers_[type]).first, DDSplit(wafers_[type]).second); cpv.position(name, glog.ddname(), copy, tran, rotation); #ifdef EDM_ML_DEBUG diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalEEFileAlgo.cc b/Geometry/HGCalCommonData/plugins/DDHGCalEEFileAlgo.cc index 05dd0b0541059..446d9c7d3cc5a 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalEEFileAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalEEFileAlgo.cc @@ -4,7 +4,7 @@ // information from the file /////////////////////////////////////////////////////////////////////////////// -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDAlgorithm.h" #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" @@ -18,6 +18,7 @@ #include "FWCore/PluginManager/interface/PluginFactory.h" #include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h" #include "Geometry/HGCalCommonData/interface/HGCalParameters.h" +#include "Geometry/HGCalCommonData/interface/HGCalProperty.h" #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" #include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" #include "Geometry/HGCalCommonData/interface/HGCalWaferType.h" @@ -29,7 +30,7 @@ #include //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; class DDHGCalEEFileAlgo : public DDAlgorithm { public: @@ -67,14 +68,8 @@ class DDHGCalEEFileAlgo : public DDAlgorithm { int absorbMode_; // Absorber mode int sensitiveMode_; // Sensitive mode double zMinBlock_; // Starting z-value of the block - std::vector rad100to200_; // Parameters for 120-200mum trans. - std::vector rad200to300_; // Parameters for 200-300mum trans. - double zMinRadPar_; // Minimum z for radius parametriz. std::vector waferIndex_; // Wafer index for the types - std::vector waferTypes_; // Wafer types - int choiceType_; // Type of parametrization to be used - int nCutRadPar_; // Cut off threshold for corners - double fracAreaMin_; // Minimum fractional conatined area + std::vector waferProperty_; // Wafer property double waferSize_; // Width of the wafer double waferSepar_; // Sensor separation int sectors_; // Sectors @@ -160,35 +155,28 @@ void DDHGCalEEFileAlgo::initialize(const DDNumericArguments& nArgs, << layerSense_[i]; #endif zMinBlock_ = nArgs["zMinBlock"]; - rad100to200_ = vArgs["rad100to200"]; - rad200to300_ = vArgs["rad200to300"]; - zMinRadPar_ = nArgs["zMinForRadPar"]; - choiceType_ = (int)(nArgs["choiceType"]); - nCutRadPar_ = (int)(nArgs["nCornerCut"]); - fracAreaMin_ = nArgs["fracAreaMin"]; waferSize_ = nArgs["waferSize"]; waferSepar_ = nArgs["SensorSeparation"]; sectors_ = (int)(nArgs["Sectors"]); alpha_ = (1._pi) / sectors_; cosAlpha_ = cos(alpha_); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "zStart " << zMinBlock_ << " radius for wafer type separation uses " - << rad100to200_.size() << " parameters; zmin " << zMinRadPar_ << " cutoff " - << choiceType_ << ":" << nCutRadPar_ << ":" << fracAreaMin_ << " wafer width " - << waferSize_ << " separations " << waferSepar_ << " sectors " << sectors_ << ":" - << convertRadToDeg(alpha_) << ":" << cosAlpha_; - for (unsigned int k = 0; k < rad100to200_.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] 100-200 " << rad100to200_[k] << " 200-300 " << rad200to300_[k]; + edm::LogVerbatim("HGCalGeom") << "zStart " << zMinBlock_ << " wafer width " << waferSize_ << " separations " + << waferSepar_ << " sectors " << sectors_ << ":" << convertRadToDeg(alpha_) << ":" + << cosAlpha_; #endif waferIndex_ = dbl_to_int(vArgs["WaferIndex"]); - waferTypes_ = dbl_to_int(vArgs["WaferTypes"]); + waferProperty_ = dbl_to_int(vArgs["WaferProperties"]); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "waferTypes with " << waferTypes_.size() << " entries"; - for (unsigned int k = 0; k < waferTypes_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "waferProperties with " << waferIndex_.size() << " entries"; + for (unsigned int k = 0; k < waferIndex_.size(); ++k) edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << waferIndex_[k] << " (" << HGCalWaferIndex::waferLayer(waferIndex_[k]) << ", " << HGCalWaferIndex::waferU(waferIndex_[k]) << ", " - << HGCalWaferIndex::waferV(waferIndex_[k]) << ") : " << waferTypes_[k]; + << HGCalWaferIndex::waferV(waferIndex_[k]) << ") : (" + << HGCalProperty::waferThick(waferProperty_[k]) << ":" + << HGCalProperty::waferPartial(waferProperty_[k]) << ":" + << HGCalProperty::waferOrient(waferProperty_[k]) << ")"; #endif slopeB_ = vArgs["SlopeBottom"]; zFrontB_ = vArgs["ZFrontBottom"]; @@ -262,38 +250,25 @@ void DDHGCalEEFileAlgo::constructLayers(const DDLogicalPart& module, DDCompactVi DDLogicalPart glog; if (layerSense_[ly] < 1) { std::vector pgonZ, pgonRin, pgonRout; - if (layerSense_[ly] == 0 || absorbMode_ == 0) { - double rmax = routF * cosAlpha_ - tol1_; - pgonZ.emplace_back(-hthick); - pgonZ.emplace_back(hthick); - pgonRin.emplace_back(rinB); - pgonRin.emplace_back(rinB); - pgonRout.emplace_back(rmax); - pgonRout.emplace_back(rmax); - } else { - HGCalGeomTools::radius(zz - hthick, - zz + hthick, - zFrontB_, - rMinFront_, - slopeB_, - zFrontT_, - rMaxFront_, - slopeT_, - -layerSense_[ly], - pgonZ, - pgonRin, - pgonRout); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: z " << (zz - hthick) << ":" << (zz + hthick) << " with " - << pgonZ.size() << " palnes"; - for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) - edm::LogVerbatim("HGCalGeom") - << "[" << isec << "] z " << pgonZ[isec] << " R " << pgonRin[isec] << ":" << pgonRout[isec]; -#endif - for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) { - pgonZ[isec] -= zz; + double rmax = routF * cosAlpha_ - tol1_; + HGCalGeomTools::radius(zz - hthick, + zz + hthick, + zFrontB_, + rMinFront_, + slopeB_, + zFrontT_, + rMaxFront_, + slopeT_, + -layerSense_[ly], + pgonZ, + pgonRin, + pgonRout); + for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) { + pgonZ[isec] -= zz; + if (layerSense_[ly] == 0 || absorbMode_ == 0) + pgonRout[isec] = rmax; + else pgonRout[isec] = pgonRout[isec] * cosAlpha_ - tol1_; - } } DDSolid solid = DDSolidFactory::polyhedra(DDName(name, nameSpace_), sectors_, -alpha_, 2._pi, pgonZ, pgonRin, pgonRout); @@ -302,7 +277,7 @@ void DDHGCalEEFileAlgo::constructLayers(const DDLogicalPart& module, DDCompactVi edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: " << solid.name() << " polyhedra of " << sectors_ << " sectors covering " << convertRadToDeg(-alpha_) << ":" << convertRadToDeg(-alpha_ + 2._pi) << " with " << pgonZ.size() - << " sections and filled with " << matName << ":" << &matter; + << " sections and filled with " << matName; for (unsigned int k = 0; k < pgonZ.size(); ++k) edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << pgonZ[k] << " R " << pgonRin[k] << ":" << pgonRout[k]; #endif @@ -383,11 +358,13 @@ void DDHGCalEEFileAlgo::positionSensitive( } #endif int indx = HGCalWaferIndex::waferIndex((layer + firstLayer_), u, v, false); - int type = HGCalWaferType::getType(indx, waferIndex_, waferTypes_); + int type = HGCalWaferType::getType(indx, waferIndex_, waferProperty_); if (corner.first > 0 && type >= 0) { int copy = HGCalTypes::packTypeUV(type, u, v); + if (layertype > 1) + type += 3; #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << " DDHGCalHEFileAlgo: " << wafers_[type] << " number " << copy << " type " + edm::LogVerbatim("HGCalGeom") << " DDHGCalEEFileAlgo: " << wafers_[type] << " number " << copy << " type " << type << " layer:u:v:indx " << (layer + firstLayer_) << ":" << u << ":" << v << ":" << indx; if (iu > ium) @@ -408,8 +385,6 @@ void DDHGCalEEFileAlgo::positionSensitive( #endif DDTranslation tran(xpos, ypos, 0.0); DDRotation rotation; - if (layertype > 1) - type += 3; DDName name = DDName(DDSplit(wafers_[type]).first, DDSplit(wafers_[type]).second); cpv.position(name, glog.ddname(), copy, tran, rotation); #ifdef EDM_ML_DEBUG diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalHEAlgo.cc b/Geometry/HGCalCommonData/plugins/DDHGCalHEAlgo.cc index 45d52d9fa50fe..2633ff06d4453 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalHEAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalHEAlgo.cc @@ -3,7 +3,7 @@ // Description: Geometry factory class for HGCal (Mix) /////////////////////////////////////////////////////////////////////////////// -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDAlgorithm.h" #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" @@ -27,7 +27,7 @@ #include //#define EDM_ML_DEBUG -using namespace cms_units::operators; +using namespace angle_units::operators; class DDHGCalHEAlgo : public DDAlgorithm { public: @@ -565,6 +565,8 @@ void DDHGCalHEAlgo::positionSensitive(const DDLogicalPart& glog, if (corner.first > 0) { int type = waferType_->getType(xpos, ypos, zpos); int copy = HGCalTypes::packTypeUV(type, u, v); + if (layertype > 1) + type += 3; #ifdef EDM_ML_DEBUG if (iu > ium) ium = iu; @@ -584,8 +586,6 @@ void DDHGCalHEAlgo::positionSensitive(const DDLogicalPart& glog, #endif DDTranslation tran(xpos, ypos, 0.0); DDRotation rotation; - if (layertype > 1) - type += 3; DDName name = DDName(DDSplit(wafers_[type]).first, DDSplit(wafers_[type]).second); cpv.position(name, glog.ddname(), copy, tran, rotation); #ifdef EDM_ML_DEBUG diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalHEFileAlgo.cc b/Geometry/HGCalCommonData/plugins/DDHGCalHEFileAlgo.cc index 1a358a25a2aeb..f7b135ec85879 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalHEFileAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalHEFileAlgo.cc @@ -3,7 +3,7 @@ // Description: Geometry factory class for HGCal (Mix) /////////////////////////////////////////////////////////////////////////////// -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDAlgorithm.h" #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" @@ -17,6 +17,7 @@ #include "FWCore/PluginManager/interface/PluginFactory.h" #include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h" #include "Geometry/HGCalCommonData/interface/HGCalParameters.h" +#include "Geometry/HGCalCommonData/interface/HGCalProperty.h" #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" #include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" #include "Geometry/HGCalCommonData/interface/HGCalWaferType.h" @@ -28,7 +29,7 @@ #include //#define EDM_ML_DEBUG -using namespace cms_units::operators; +using namespace angle_units::operators; class DDHGCalHEFileAlgo : public DDAlgorithm { public: @@ -88,26 +89,20 @@ class DDHGCalHEFileAlgo : public DDAlgorithm { std::vector layerSenseBot_; // Content of bottom layer (sensitive?) std::vector layerCenter_; // Centering of the wafers - double zMinBlock_; // Starting z-value of the block - std::vector rad100to200_; // Parameters for 120-200mum trans. - std::vector rad200to300_; // Parameters for 200-300mum trans. - double zMinRadPar_; // Minimum z for radius parametriz. - std::vector waferIndex_; // Wafer index for the types - std::vector waferTypes_; // Wafer types - int choiceType_; // Type of parametrization to be used - int nCutRadPar_; // Cut off threshold for corners - double fracAreaMin_; // Minimum fractional conatined area - double waferSize_; // Width of the wafer - double waferSepar_; // Sensor separation - int sectors_; // Sectors - std::vector slopeB_; // Slope at the lower R - std::vector zFrontB_; // Starting Z values for the slopes - std::vector rMinFront_; // Corresponding rMin's - std::vector slopeT_; // Slopes at the larger R - std::vector zFrontT_; // Starting Z values for the slopes - std::vector rMaxFront_; // Corresponding rMax's - std::string nameSpace_; // Namespace of this and ALL sub-parts - std::unordered_set copies_; // List of copy #'s + double zMinBlock_; // Starting z-value of the block + std::vector waferIndex_; // Wafer index for the types + std::vector waferProperty_; // Wafer property + double waferSize_; // Width of the wafer + double waferSepar_; // Sensor separation + int sectors_; // Sectors + std::vector slopeB_; // Slope at the lower R + std::vector zFrontB_; // Starting Z values for the slopes + std::vector rMinFront_; // Corresponding rMin's + std::vector slopeT_; // Slopes at the larger R + std::vector zFrontT_; // Starting Z values for the slopes + std::vector rMaxFront_; // Corresponding rMax's + std::string nameSpace_; // Namespace of this and ALL sub-parts + std::unordered_set copies_; // List of copy #'s double alpha_, cosAlpha_; }; @@ -214,36 +209,28 @@ void DDHGCalHEFileAlgo::initialize(const DDNumericArguments& nArgs, << " sensitive class " << layerSenseBot_[i]; #endif zMinBlock_ = nArgs["zMinBlock"]; - rad100to200_ = vArgs["rad100to200"]; - rad200to300_ = vArgs["rad200to300"]; - zMinRadPar_ = nArgs["zMinForRadPar"]; - choiceType_ = (int)(nArgs["choiceType"]); - nCutRadPar_ = (int)(nArgs["nCornerCut"]); - fracAreaMin_ = nArgs["fracAreaMin"]; waferSize_ = nArgs["waferSize"]; waferSepar_ = nArgs["SensorSeparation"]; sectors_ = (int)(nArgs["Sectors"]); alpha_ = (1._pi) / sectors_; cosAlpha_ = cos(alpha_); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: zStart " << zMinBlock_ - << " radius for wafer type separation uses " << rad100to200_.size() - << " parameters; zmin " << zMinRadPar_ << " cutoff " << choiceType_ << ":" - << nCutRadPar_ << ":" << fracAreaMin_ << " wafer width " << waferSize_ + edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: zStart " << zMinBlock_ << " wafer width " << waferSize_ << " separations " << waferSepar_ << " sectors " << sectors_ << ":" << convertRadToDeg(alpha_) << ":" << cosAlpha_; - for (unsigned int k = 0; k < rad100to200_.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] 100-200 " << rad100to200_[k] << " 200-300 " << rad200to300_[k]; #endif waferIndex_ = dbl_to_int(vArgs["WaferIndex"]); - waferTypes_ = dbl_to_int(vArgs["WaferTypes"]); + waferProperty_ = dbl_to_int(vArgs["WaferProperties"]); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "waferTypes with " << waferTypes_.size() << " entries"; - for (unsigned int k = 0; k < waferTypes_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "waferProperties with " << waferIndex_.size() << " entries"; + for (unsigned int k = 0; k < waferIndex_.size(); ++k) edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << waferIndex_[k] << " (" << HGCalWaferIndex::waferLayer(waferIndex_[k]) << ", " << HGCalWaferIndex::waferU(waferIndex_[k]) << ", " - << HGCalWaferIndex::waferV(waferIndex_[k]) << ") : " << waferTypes_[k]; + << HGCalWaferIndex::waferV(waferIndex_[k]) << ") : (" + << HGCalProperty::waferThick(waferProperty_[k]) << ":" + << HGCalProperty::waferPartial(waferProperty_[k]) << ":" + << HGCalProperty::waferOrient(waferProperty_[k]) << ")"; #endif slopeB_ = vArgs["SlopeBottom"]; zFrontB_ = vArgs["ZFrontBottom"]; @@ -317,32 +304,26 @@ void DDHGCalHEFileAlgo::constructLayers(const DDLogicalPart& module, DDCompactVi DDLogicalPart glog; if (layerSense_[ly] < 1) { std::vector pgonZ, pgonRin, pgonRout; - if (layerSense_[ly] == 0 || absorbMode_ == 0) { - double rmax = - (std::min(routF, HGCalGeomTools::radius(zz + hthick, zFrontT_, rMaxFront_, slopeT_)) * cosAlpha_) - tol1_; - pgonZ.emplace_back(-hthick); - pgonZ.emplace_back(hthick); - pgonRin.emplace_back(rinB); - pgonRin.emplace_back(rinB); - pgonRout.emplace_back(rmax); - pgonRout.emplace_back(rmax); - } else { - HGCalGeomTools::radius(zz - hthick, - zz + hthick, - zFrontB_, - rMinFront_, - slopeB_, - zFrontT_, - rMaxFront_, - slopeT_, - -layerSense_[ly], - pgonZ, - pgonRin, - pgonRout); - for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) { - pgonZ[isec] -= zz; + double rmax = + (std::min(routF, HGCalGeomTools::radius(zz + hthick, zFrontT_, rMaxFront_, slopeT_)) * cosAlpha_) - tol1_; + HGCalGeomTools::radius(zz - hthick, + zz + hthick, + zFrontB_, + rMinFront_, + slopeB_, + zFrontT_, + rMaxFront_, + slopeT_, + -layerSense_[ly], + pgonZ, + pgonRin, + pgonRout); + for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) { + pgonZ[isec] -= zz; + if (layerSense_[ly] == 0 || absorbMode_ == 0) + pgonRout[isec] = rmax; + else pgonRout[isec] = pgonRout[isec] * cosAlpha_ - tol1_; - } } DDSolid solid = DDSolidFactory::polyhedra(DDName(name, nameSpace_), sectors_, -alpha_, 2._pi, pgonZ, pgonRin, pgonRout); @@ -567,9 +548,11 @@ void DDHGCalHEFileAlgo::positionSensitive( ++ntot; #endif int indx = HGCalWaferIndex::waferIndex((layer + firstLayer_), u, v, false); - int type = HGCalWaferType::getType(indx, waferIndex_, waferTypes_); + int type = HGCalWaferType::getType(indx, waferIndex_, waferProperty_); if (corner.first > 0 && type >= 0) { int copy = HGCalTypes::packTypeUV(type, u, v); + if (layertype > 1) + type += 3; #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << " DDHGCalHEFileAlgo: " << wafers_[type] << " number " << copy << " type " << type << " layer:u:v:indx " << (layer + firstLayer_) << ":" << u << ":" << v @@ -592,8 +575,6 @@ void DDHGCalHEFileAlgo::positionSensitive( #endif DDTranslation tran(xpos, ypos, 0.0); DDRotation rotation; - if (layertype > 1) - type += 3; DDName name = DDName(DDSplit(wafers_[type]).first, DDSplit(wafers_[type]).second); cpv.position(name, glog.ddname(), copy, tran, rotation); #ifdef EDM_ML_DEBUG diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalMixLayer.cc b/Geometry/HGCalCommonData/plugins/DDHGCalMixLayer.cc new file mode 100644 index 0000000000000..fd58410723386 --- /dev/null +++ b/Geometry/HGCalCommonData/plugins/DDHGCalMixLayer.cc @@ -0,0 +1,566 @@ +/////////////////////////////////////////////////////////////////////////////// +// File: DDHGCalMixLayer.cc +// Description: Geometry factory class for HGCal (Mix) +/////////////////////////////////////////////////////////////////////////////// + +#include "DataFormats/Math/interface/angle_units.h" +#include "DetectorDescription/Core/interface/DDAlgorithm.h" +#include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" +#include "DetectorDescription/Core/interface/DDCurrentNamespace.h" +#include "DetectorDescription/Core/interface/DDLogicalPart.h" +#include "DetectorDescription/Core/interface/DDMaterial.h" +#include "DetectorDescription/Core/interface/DDSolid.h" +#include "DetectorDescription/Core/interface/DDSplit.h" +#include "DetectorDescription/Core/interface/DDTypes.h" +#include "DetectorDescription/Core/interface/DDutils.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/PluginManager/interface/PluginFactory.h" +#include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h" +#include "Geometry/HGCalCommonData/interface/HGCalParameters.h" +#include "Geometry/HGCalCommonData/interface/HGCalProperty.h" +#include "Geometry/HGCalCommonData/interface/HGCalTileIndex.h" +#include "Geometry/HGCalCommonData/interface/HGCalTypes.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferType.h" + +#include +#include +#include +#include +#include + +//#define EDM_ML_DEBUG +using namespace angle_units::operators; + +class DDHGCalMixLayer : public DDAlgorithm { +public: + DDHGCalMixLayer(); + + void initialize(const DDNumericArguments& nArgs, + const DDVectorArguments& vArgs, + const DDMapArguments& mArgs, + const DDStringArguments& sArgs, + const DDStringVectorArguments& vsArgs) override; + void execute(DDCompactView& cpv) override; + +protected: + void constructLayers(const DDLogicalPart&, DDCompactView& cpv); + void positionMix(const DDLogicalPart& glog, + const std::string& nameM, + int copyM, + double thick, + const DDMaterial& matter, + int layerType, + DDCompactView& cpv); + +private: + HGCalGeomTools geomTools_; + + static constexpr double tol1_ = 0.01; + static constexpr double tol2_ = 0.00001; + + int waferTypes_; // Number of wafer types + int facingTypes_; // Types of facings of modules toward IP + int partialTypes_; // Number of partial wafer types + int orientationTypes_; // Number of partial wafer orienations + int phiBinsScint_; // Maximum number of cells along phi + int firstLayer_; // Copy # of the first sensitive layer + int absorbMode_; // Absorber mode + int sensitiveMode_; // Sensitive mode + double zMinBlock_; // Starting z-value of the block + double waferSize_; // Width of the wafer + double waferSepar_; // Sensor separation + int sectors_; // Sectors + std::vector slopeB_; // Slope at the lower R + std::vector zFrontB_; // Starting Z values for the slopes + std::vector rMinFront_; // Corresponding rMin's + std::vector slopeT_; // Slopes at the larger R + std::vector zFrontT_; // Starting Z values for the slopes + std::vector rMaxFront_; // Corresponding rMax's + std::vector waferFull_; // Names of full wafer modules + std::vector waferPart_; // Names of partial wafer modules + std::vector materials_; // Materials + std::vector names_; // Names + std::vector thick_; // Thickness of the material + std::vector copyNumber_; // Initial copy numbers + std::vector layers_; // Number of layers in a section + std::vector layerThick_; // Thickness of each section + std::vector layerType_; // Type of the layer + std::vector layerSense_; // Content of a layer (sensitive?) + std::vector materialTop_; // Materials of top layers + std::vector namesTop_; // Names of top layers + std::vector layerThickTop_; // Thickness of the top sections + std::vector layerTypeTop_; // Type of the Top layer + std::vector copyNumberTop_; // Initial copy numbers (top section) + std::vector layerCenter_; // Centering of the wafers + std::vector waferIndex_; // Wafer index for the types + std::vector waferProperty_; // Wafer property + std::vector waferLayerStart_; // Start index of wafers in each layer + std::vector tileRMin_; // Minimum radius of each ring + std::vector tileRMax_; // Maximum radius of each ring + std::vector tileIndex_; // Index of tile (layer/start|end ring) + std::vector tilePhis_; // Tile phi range for each index + std::vector tileLayerStart_; // Start index of tiles in each layer + std::string nameSpace_; // Namespace of this and ALL sub-parts + std::unordered_set copies_; // List of copy #'s + double alpha_, cosAlpha_; +}; + +DDHGCalMixLayer::DDHGCalMixLayer() { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: Creating an instance"; +#endif +} + +void DDHGCalMixLayer::initialize(const DDNumericArguments& nArgs, + const DDVectorArguments& vArgs, + const DDMapArguments&, + const DDStringArguments& sArgs, + const DDStringVectorArguments& vsArgs) { + waferTypes_ = static_cast(nArgs["WaferTypes"]); + facingTypes_ = static_cast(nArgs["FacingTypes"]); + partialTypes_ = static_cast(nArgs["PartialTypes"]); + orientationTypes_ = static_cast(nArgs["OrientationTypes"]); + phiBinsScint_ = static_cast(nArgs["NPhiBinScint"]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer::Number of types of wafers: " << waferTypes_ + << " facings: " << facingTypes_ << " partials: " << partialTypes_ + << " Orientations: " << orientationTypes_ << "; number of cells along phi " + << phiBinsScint_; +#endif + firstLayer_ = (int)(nArgs["FirstLayer"]); + absorbMode_ = (int)(nArgs["AbsorberMode"]); + sensitiveMode_ = (int)(nArgs["SensitiveMode"]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer::First Layer " << firstLayer_ << " and " + << "Absober:Sensitive mode " << absorbMode_ << ":" << sensitiveMode_; +#endif + zMinBlock_ = nArgs["zMinBlock"]; + waferSize_ = nArgs["waferSize"]; + waferSepar_ = nArgs["SensorSeparation"]; + sectors_ = (int)(nArgs["Sectors"]); + alpha_ = (1._pi) / sectors_; + cosAlpha_ = cos(alpha_); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: zStart " << zMinBlock_ << " wafer width " << waferSize_ + << " separations " << waferSepar_ << " sectors " << sectors_ << ":" + << convertRadToDeg(alpha_) << ":" << cosAlpha_; +#endif + slopeB_ = vArgs["SlopeBottom"]; + zFrontB_ = vArgs["ZFrontBottom"]; + rMinFront_ = vArgs["RMinFront"]; + slopeT_ = vArgs["SlopeTop"]; + zFrontT_ = vArgs["ZFrontTop"]; + rMaxFront_ = vArgs["RMaxFront"]; +#ifdef EDM_ML_DEBUG + for (unsigned int i = 0; i < slopeB_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << zFrontB_[i] << " Rmin " << rMinFront_[i] + << " Slope " << slopeB_[i]; + for (unsigned int i = 0; i < slopeT_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << zFrontT_[i] << " Rmax " << rMaxFront_[i] + << " Slope " << slopeT_[i]; +#endif + waferFull_ = vsArgs["WaferNamesFull"]; + waferPart_ = vsArgs["WaferNamesPartial"]; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << waferFull_.size() << " full and " << waferPart_.size() + << " partial modules\nDDHGCalMixLayer:Full Modules:"; + unsigned int i1max = static_cast(waferFull_.size()); + for (unsigned int i1 = 0; i1 < i1max; i1 += 2) { + std::ostringstream st1; + unsigned int i2 = std::min((i1 + 2), i1max); + for (unsigned int i = i1; i < i2; ++i) + st1 << " [" << i << "] " << waferFull_[i]; + edm::LogVerbatim("HGCalGeom") << st1.str() << std::endl; + } + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: Partial Modules:"; + i1max = static_cast(waferPart_.size()); + for (unsigned int i1 = 0; i1 < i1max; i1 += 2) { + std::ostringstream st1; + unsigned int i2 = std::min((i1 + 2), i1max); + for (unsigned int i = i1; i < i2; ++i) + st1 << " [" << i << "] " << waferPart_[i]; + edm::LogVerbatim("HGCalGeom") << st1.str() << std::endl; + } +#endif + materials_ = vsArgs["MaterialNames"]; + names_ = vsArgs["VolumeNames"]; + thick_ = vArgs["Thickness"]; + copyNumber_.resize(materials_.size(), 1); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << materials_.size() << " types of volumes"; + for (unsigned int i = 0; i < names_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names_[i] << " of thickness " << thick_[i] + << " filled with " << materials_[i] << " first copy number " << copyNumber_[i]; +#endif + layers_ = dbl_to_int(vArgs["Layers"]); + layerThick_ = vArgs["LayerThick"]; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "There are " << layers_.size() << " blocks"; + for (unsigned int i = 0; i < layers_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << layerThick_[i] << " with " << layers_[i] + << " layers"; +#endif + layerType_ = dbl_to_int(vArgs["LayerType"]); + layerSense_ = dbl_to_int(vArgs["LayerSense"]); + layerCenter_ = dbl_to_int(vArgs["LayerCenter"]); +#ifdef EDM_ML_DEBUG + for (unsigned int i = 0; i < layerCenter_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "LayerCenter [" << i << "] " << layerCenter_[i]; +#endif + if (firstLayer_ > 0) { + for (unsigned int i = 0; i < layerType_.size(); ++i) { + if (layerSense_[i] > 0) { + int ii = layerType_[i]; + copyNumber_[ii] = firstLayer_; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "First copy number for layer type " << i << ":" << ii << " with " + << materials_[ii] << " changed to " << copyNumber_[ii]; +#endif + break; + } + } + } else { + firstLayer_ = 1; + } +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "There are " << layerType_.size() << " layers"; + for (unsigned int i = 0; i < layerType_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Layer [" << i << "] with material type " << layerType_[i] << " sensitive class " + << layerSense_[i]; +#endif + materialTop_ = vsArgs["TopMaterialNames"]; + namesTop_ = vsArgs["TopVolumeNames"]; + layerThickTop_ = vArgs["TopLayerThickness"]; + layerTypeTop_ = dbl_to_int(vArgs["TopLayerType"]); + copyNumberTop_.resize(materialTop_.size(), firstLayer_); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << materialTop_.size() << " types of volumes in the top part"; + for (unsigned int i = 0; i < materialTop_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << namesTop_[i] << " of thickness " << layerThickTop_[i] + << " filled with " << materialTop_[i] << " first copy number " << copyNumberTop_[i]; + edm::LogVerbatim("HGCalGeom") << "There are " << layerTypeTop_.size() << " layers in the top part"; + for (unsigned int i = 0; i < layerTypeTop_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Layer [" << i << "] with material type " << layerTypeTop_[i]; +#endif + waferIndex_ = dbl_to_int(vArgs["WaferIndex"]); + waferProperty_ = dbl_to_int(vArgs["WaferProperties"]); + waferLayerStart_ = dbl_to_int(vArgs["WaferLayerStart"]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "waferProperties with " << waferIndex_.size() << " entries in " + << waferLayerStart_.size() << " layers"; + for (unsigned int k = 0; k < waferLayerStart_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "LayerStart[" << k << "] " << waferLayerStart_[k]; + for (unsigned int k = 0; k < waferIndex_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << waferIndex_[k] << " (" + << HGCalWaferIndex::waferLayer(waferIndex_[k]) << ", " + << HGCalWaferIndex::waferU(waferIndex_[k]) << ", " + << HGCalWaferIndex::waferV(waferIndex_[k]) << ") : (" + << HGCalProperty::waferThick(waferProperty_[k]) << ":" + << HGCalProperty::waferPartial(waferProperty_[k]) << ":" + << HGCalProperty::waferOrient(waferProperty_[k]) << ")"; +#endif + tileRMin_ = vArgs["TileRMin"]; + tileRMax_ = vArgs["TileRMax"]; + tileIndex_ = dbl_to_int(vArgs["TileLayerRings"]); + tilePhis_ = dbl_to_int(vArgs["TilePhiRange"]); + tileLayerStart_ = dbl_to_int(vArgs["TileLayerStart"]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer:: with " << tileRMin_.size() << " rings"; + for (unsigned int k = 0; k < tileRMin_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "Ring[" << k << "] " << tileRMin_[k] << " : " << tileRMax_[k]; + edm::LogVerbatim("HGCalGeom") << "TileProperties with " << tileIndex_.size() << " entries in " + << tileLayerStart_.size() << " layers"; + for (unsigned int k = 0; k < tileLayerStart_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "LayerStart[" << k << "] " << tileLayerStart_[k]; + for (unsigned int k = 0; k < tileIndex_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << tileIndex_[k] << " (" + << "Layer " << std::get<0>(HGCalTileIndex::tileUnpack(tileIndex_[k])) << " Ring " + << std::get<1>(HGCalTileIndex::tileUnpack(tileIndex_[k])) << ":" + << std::get<2>(HGCalTileIndex::tileUnpack(tileIndex_[k])) << ") Phi " + << std::get<1>(HGCalTileIndex::tileUnpack(tilePhis_[k])) << ":" + << std::get<2>(HGCalTileIndex::tileUnpack(tilePhis_[k])); +#endif + nameSpace_ = DDCurrentNamespace::ns(); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: NameSpace " << nameSpace_; +#endif +} + +//////////////////////////////////////////////////////////////////// +// DDHGCalMixLayer methods... +//////////////////////////////////////////////////////////////////// + +void DDHGCalMixLayer::execute(DDCompactView& cpv) { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "==>> Constructing DDHGCalMixLayer..."; + copies_.clear(); +#endif + constructLayers(parent(), cpv); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << copies_.size() << " different wafer copy numbers"; + int k(0); + for (std::unordered_set::const_iterator itr = copies_.begin(); itr != copies_.end(); ++itr, ++k) { + edm::LogVerbatim("HGCalGeom") << "Copy [" << k << "] : " << (*itr); + } + copies_.clear(); + edm::LogVerbatim("HGCalGeom") << "<<== End of DDHGCalMixLayer construction..."; +#endif +} + +void DDHGCalMixLayer::constructLayers(const DDLogicalPart& module, DDCompactView& cpv) { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: \t\tInside Layers"; +#endif + double zi(zMinBlock_); + int laymin(0); + for (unsigned int i = 0; i < layers_.size(); i++) { + double zo = zi + layerThick_[i]; + double routF = HGCalGeomTools::radius(zi, zFrontT_, rMaxFront_, slopeT_); + int laymax = laymin + layers_[i]; + double zz = zi; + double thickTot(0); + for (int ly = laymin; ly < laymax; ++ly) { + int ii = layerType_[ly]; + int copy = copyNumber_[ii]; + double hthick = 0.5 * thick_[ii]; + double rinB = HGCalGeomTools::radius(zo, zFrontB_, rMinFront_, slopeB_); + zz += hthick; + thickTot += thick_[ii]; + + std::string name = names_[ii] + std::to_string(copy); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: Layer " << ly << ":" << ii << " Front " << zi << ", " << routF + << " Back " << zo << ", " << rinB << " superlayer thickness " << layerThick_[i]; +#endif + DDName matName(DDSplit(materials_[ii]).first, DDSplit(materials_[ii]).second); + DDMaterial matter(matName); + DDLogicalPart glog; + if (layerSense_[ly] < 1) { + std::vector pgonZ, pgonRin, pgonRout; + double rmax = + (std::min(routF, HGCalGeomTools::radius(zz + hthick, zFrontT_, rMaxFront_, slopeT_)) * cosAlpha_) - tol1_; + HGCalGeomTools::radius(zz - hthick, + zz + hthick, + zFrontB_, + rMinFront_, + slopeB_, + zFrontT_, + rMaxFront_, + slopeT_, + -layerSense_[ly], + pgonZ, + pgonRin, + pgonRout); + for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) { + pgonZ[isec] -= zz; + if (layerSense_[ly] == 0 || absorbMode_ == 0) + pgonRout[isec] = rmax; + else + pgonRout[isec] = pgonRout[isec] * cosAlpha_ - tol1_; + } + DDSolid solid = + DDSolidFactory::polyhedra(DDName(name, nameSpace_), sectors_, -alpha_, 2._pi, pgonZ, pgonRin, pgonRout); + glog = DDLogicalPart(solid.ddname(), matter, solid); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << solid.name() << " polyhedra of " << sectors_ + << " sectors covering " << convertRadToDeg(-alpha_) << ":" + << convertRadToDeg(-alpha_ + 2._pi) << " with " << pgonZ.size() << " sections"; + for (unsigned int k = 0; k < pgonZ.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << pgonZ[k] << " R " << pgonRin[k] << ":" << pgonRout[k]; +#endif + } else { + double rins = (sensitiveMode_ < 1) ? rinB : HGCalGeomTools::radius(zz + hthick, zFrontB_, rMinFront_, slopeB_); + double routs = + (sensitiveMode_ < 1) ? routF : HGCalGeomTools::radius(zz - hthick, zFrontT_, rMaxFront_, slopeT_); + DDSolid solid = DDSolidFactory::tubs(DDName(name, nameSpace_), hthick, rins, routs, 0.0, 2._pi); + glog = DDLogicalPart(solid.ddname(), matter, solid); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << solid.name() << " Tubs made of " << matName + << " of dimensions " << rinB << ":" << rins << ", " << routF << ":" << routs + << ", " << hthick << ", 0.0, 360.0 and positioned in: " << glog.name() + << " number " << copy; +#endif + positionMix(glog, name, copy, thick_[ii], matter, layerSense_[ly], cpv); + } + DDTranslation r1(0, 0, zz); + DDRotation rot; + cpv.position(glog, module, copy, r1, rot); + ++copyNumber_[ii]; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << glog.name() << " number " << copy << " positioned in " + << module.name() << " at " << r1 << " with no rotation"; +#endif + zz += hthick; + } // End of loop over layers in a block + zi = zo; + laymin = laymax; + // Make consistency check of all the partitions of the block + if (std::abs(thickTot - layerThick_[i]) >= tol2_) { + if (thickTot > layerThick_[i]) { + edm::LogError("HGCalGeom") << "Thickness of the partition " << layerThick_[i] << " is smaller than " << thickTot + << ": thickness of all its components **** ERROR ****"; + } else { + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << layerThick_[i] << " does not match with " + << thickTot << " of the components"; + } + } + } // End of loop over blocks +} + +void DDHGCalMixLayer::positionMix(const DDLogicalPart& glog, + const std::string& nameM, + int copyM, + double thick, + const DDMaterial& matter, + int layerType, + DDCompactView& cpv) { + DDRotation rot; + + // Make the top part first + for (unsigned int ly = 0; ly < layerTypeTop_.size(); ++ly) { + int ii = layerTypeTop_[ly]; + copyNumberTop_[ii] = copyM; + } + double hthick = 0.5 * thick; + double dphi = (2._pi) / phiBinsScint_; + double thickTot(0), zpos(-hthick); + for (unsigned int ly = 0; ly < layerTypeTop_.size(); ++ly) { + int ii = layerTypeTop_[ly]; + int copy = copyNumberTop_[ii]; + int layer = copy - firstLayer_; + double hthickl = 0.5 * layerThickTop_[ii]; + thickTot += layerThickTop_[ii]; + zpos += hthickl; + DDName matName(DDSplit(materialTop_[ii]).first, DDSplit(materialTop_[ii]).second); + DDMaterial matter1(matName); + unsigned int k = 0; + int firstTile = tileLayerStart_[layer]; + int lastTile = ((layer + 1 < static_cast(tileLayerStart_.size())) ? tileLayerStart_[layer + 1] + : static_cast(tileIndex_.size())); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: Layer " << ly << ":" << ii << " Copy " << copy << " Tiles " + << firstTile << ":" << lastTile; +#endif + for (int ti = firstTile; ti < lastTile; ++ti) { + double r1 = tileRMin_[std::get<1>(HGCalTileIndex::tileUnpack(tileIndex_[ti])) - 1]; + double r2 = tileRMax_[std::get<2>(HGCalTileIndex::tileUnpack(tileIndex_[ti])) - 1]; + int fimin = std::get<1>(HGCalTileIndex::tileUnpack(tilePhis_[ti])); + int fimax = std::get<2>(HGCalTileIndex::tileUnpack(tilePhis_[ti])); + double phi1 = dphi * (fimin - 1); + double phi2 = dphi * (fimax - fimin + 1); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: Layer " << copy << " iR " + << std::get<1>(HGCalTileIndex::tileUnpack(tileIndex_[ly])) << ":" + << std::get<2>(HGCalTileIndex::tileUnpack(tileIndex_[ly])) << " R " << r1 << ":" + << r2 << " Thick " << (2.0 * hthickl) << " phi " << fimin << ":" << fimax << ":" + << convertRadToDeg(phi1) << ":" << convertRadToDeg(phi2); + ; +#endif + std::string name = namesTop_[ii] + "L" + std::to_string(copy) + "F" + std::to_string(k); + ++k; + DDSolid solid = DDSolidFactory::tubs(DDName(name, nameSpace_), hthickl, r1, r2, phi1, phi2); + DDLogicalPart glog1 = DDLogicalPart(solid.ddname(), matter1, solid); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << glog1.name() << " Tubs made of " << matName + << " of dimensions " << r1 << ", " << r2 << ", " << hthickl << ", " + << convertRadToDeg(phi1) << ", " << convertRadToDeg(phi2); +#endif + DDTranslation tran(0, 0, zpos); + cpv.position(glog1, glog, copy, tran, rot); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: Position " << glog1.name() << " number " << copy << " in " + << glog.name() << " at " << tran << " with no rotation"; +#endif + } + ++copyNumberTop_[ii]; + zpos += hthickl; + } + if (std::abs(thickTot - thick) >= tol2_) { + if (thickTot > thick) { + edm::LogError("HGCalGeom") << "Thickness of the partition " << thick << " is smaller than " << thickTot + << ": thickness of all its components in the top part **** ERROR ****"; + } else { + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << thick << " does not match with " << thickTot + << " of the components in top part"; + } + } + + // Make the bottom part next + int layer = (copyM - firstLayer_); + static const double sqrt3 = std::sqrt(3.0); + int layercenter = layerCenter_[layer]; + int firstWafer = waferLayerStart_[layer]; + int lastWafer = ((layer + 1 < static_cast(waferLayerStart_.size())) ? waferLayerStart_[layer + 1] + : static_cast(waferLayerStart_.size())); + double r = 0.5 * (waferSize_ + waferSepar_); + double R = 2.0 * r / sqrt3; + double dy = 0.75 * R; + const auto& xyoff = geomTools_.shiftXY(layercenter, (waferSize_ + waferSepar_)); +#ifdef EDM_ML_DEBUG + int ium(0), ivm(0), kount(0); + std::vector ntype(3, 0); + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << glog.ddname() << " r " << r << " R " << R << " dy " << dy + << " Shift " << xyoff.first << ":" << xyoff.second << " WaferSize " + << (waferSize_ + waferSepar_) << " index " << firstWafer << ":" << (lastWafer - 1); +#endif + for (int k = firstWafer; k < lastWafer; ++k) { + int u = HGCalWaferIndex::waferU(waferIndex_[k]); + int v = HGCalWaferIndex::waferV(waferIndex_[k]); +#ifdef EDM_ML_DEBUG + int iu = std::abs(u); + int iv = std::abs(v); +#endif + int nr = 2 * v; + int nc = -2 * u + v; + double xpos = xyoff.first + nc * r; + double ypos = xyoff.second + nr * dy; + int type = HGCalProperty::waferThick(waferProperty_[k]); + int part = HGCalProperty::waferPartial(waferProperty_[k]); + int orien = HGCalProperty::waferOrient(waferProperty_[k]); + std::string wafer; + int i(999); + if (part == HGCalTypes::WaferFull) { + i = (layerType - 1) * waferTypes_ + type; + wafer = waferFull_[i]; + } else { + i = (part - 1) * waferTypes_ * facingTypes_ * orientationTypes_ + + (layerType - 1) * waferTypes_ * orientationTypes_ + type * orientationTypes_ + orien; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << " layertype:type:part:orien:ind " << layerType << ":" << type << ":" << part + << ":" << orien << ":" << i << ":" << waferPart_.size(); +#endif + wafer = waferPart_[i]; + } + int copy = HGCalTypes::packTypeUV(type, u, v); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << " DDHGCalMixLayer: Layer " << HGCalWaferIndex::waferLayer(waferIndex_[k]) + << " Wafer " << wafer << " number " << copy << " type :part:orien:ind " << type << ":" + << part << ":" << orien << ":" << i << " layer:u:v " << (layer + firstLayer_) << ":" + << u << ":" << v; + if (iu > ium) + ium = iu; + if (iv > ivm) + ivm = iv; + kount++; + if (copies_.count(copy) == 0) + copies_.insert(copy); +#endif + DDTranslation tran(xpos, ypos, 0.0); + DDName name = DDName(DDSplit(wafer).first, DDSplit(wafer).second); + cpv.position(name, glog.ddname(), copy, tran, rot); +#ifdef EDM_ML_DEBUG + ++ntype[type]; + edm::LogVerbatim("HGCalGeom") << " DDHGCalMixLayer: " << name << " number " << copy << " type " << layerType << ":" + << type << " positioned in " << glog.ddname() << " at " << tran + << " with no rotation"; +#endif + } +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: Maximum # of u " << ium << " # of v " << ivm << " and " << kount + << " wafers (" << ntype[0] << ":" << ntype[1] << ":" << ntype[2] << ") for " + << glog.ddname(); +#endif +} + +DEFINE_EDM_PLUGIN(DDAlgorithmFactory, DDHGCalMixLayer, "hgcal:DDHGCalMixLayer"); diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalModule.cc b/Geometry/HGCalCommonData/plugins/DDHGCalModule.cc index ee330e76e0eb2..bfc9ca76d44ac 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalModule.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalModule.cc @@ -10,7 +10,7 @@ #include #include -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDAlgorithm.h" #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" @@ -27,7 +27,7 @@ #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; class DDHGCalModule : public DDAlgorithm { public: @@ -85,7 +85,7 @@ void DDHGCalModule::initialize(const DDNumericArguments& nArgs, #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << wafer_.size() << " wafers"; for (unsigned int i = 0; i < wafer_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Wafer_[" << i << "] " << wafer_[i]; + edm::LogVerbatim("HGCalGeom") << "Wafer[" << i << "] " << wafer_[i]; #endif materials_ = vsArgs["MaterialNames"]; names_ = vsArgs["VolumeNames"]; @@ -189,7 +189,7 @@ void DDHGCalModule::constructLayers(const DDLogicalPart& module, DDCompactView& DDMaterial matter(matName); DDLogicalPart glog; if (layerSense_[ly] == 0) { - double alpha = geant_units::piRadians / sectors_; + double alpha = 1._pi / sectors_; double rmax = routF * cos(alpha) - tol; std::vector pgonZ, pgonRin, pgonRout; pgonZ.emplace_back(-0.5 * thick_[ii]); @@ -198,8 +198,8 @@ void DDHGCalModule::constructLayers(const DDLogicalPart& module, DDCompactView& pgonRin.emplace_back(rinB); pgonRout.emplace_back(rmax); pgonRout.emplace_back(rmax); - DDSolid solid = DDSolidFactory::polyhedra( - DDName(name, idNameSpace_), sectors_, -alpha, 2 * geant_units::piRadians, pgonZ, pgonRin, pgonRout); + DDSolid solid = + DDSolidFactory::polyhedra(DDName(name, idNameSpace_), sectors_, -alpha, 2._pi, pgonZ, pgonRin, pgonRout); glog = DDLogicalPart(solid.ddname(), matter, solid); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << solid.name() << " polyhedra of " << sectors_ @@ -209,8 +209,7 @@ void DDHGCalModule::constructLayers(const DDLogicalPart& module, DDCompactView& edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << pgonZ[k] << " R " << pgonRin[k] << ":" << pgonRout[k]; #endif } else { - DDSolid solid = DDSolidFactory::tubs( - DDName(name, idNameSpace_), 0.5 * thick_[ii], rinB, routF, 0.0, 2 * geant_units::piRadians); + DDSolid solid = DDSolidFactory::tubs(DDName(name, idNameSpace_), 0.5 * thick_[ii], rinB, routF, 0.0, 2._pi); glog = DDLogicalPart(solid.ddname(), matter, solid); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << solid.name() << " Tubs made of " << matName diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalModuleAlgo.cc b/Geometry/HGCalCommonData/plugins/DDHGCalModuleAlgo.cc index d6e2bcc7f3aad..78452eb796823 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalModuleAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalModuleAlgo.cc @@ -10,7 +10,7 @@ #include #include -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDAlgorithm.h" #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" @@ -27,7 +27,7 @@ #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; class DDHGCalModuleAlgo : public DDAlgorithm { public: @@ -86,7 +86,7 @@ void DDHGCalModuleAlgo::initialize(const DDNumericArguments& nArgs, #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: " << wafer_.size() << " wafers"; for (unsigned int i = 0; i < wafer_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Wafer_[" << i << "] " << wafer_[i]; + edm::LogVerbatim("HGCalGeom") << "Wafer[" << i << "] " << wafer_[i]; #endif materials_ = vsArgs["MaterialNames"]; names_ = vsArgs["VolumeNames"]; @@ -162,7 +162,7 @@ void DDHGCalModuleAlgo::execute(DDCompactView& cpv) { void DDHGCalModuleAlgo::constructLayers(const DDLogicalPart& module, DDCompactView& cpv) { #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo test: \t\tInside Layers"; + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: \t\tInside Layers"; #endif double zi(zMinBlock_); int laymin(0); @@ -182,7 +182,7 @@ void DDHGCalModuleAlgo::constructLayers(const DDLogicalPart& module, DDCompactVi std::string name = "HGCal" + names_[ii] + std::to_string(copy); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo test: Layer " << ly << ":" << ii << " Front " << zi << ", " + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: Layer " << ly << ":" << ii << " Front " << zi << ", " << routF << " Back " << zo << ", " << rinB << " superlayer thickness " << layerThick_[i]; #endif @@ -190,7 +190,7 @@ void DDHGCalModuleAlgo::constructLayers(const DDLogicalPart& module, DDCompactVi DDMaterial matter(matName); DDLogicalPart glog; if (layerSense_[ly] == 0) { - double alpha = geant_units::piRadians / sectors_; + double alpha = 1._pi / sectors_; double rmax = routF * cos(alpha) - tol; std::vector pgonZ, pgonRin, pgonRout; pgonZ.emplace_back(-0.5 * thick_[ii]); @@ -199,8 +199,8 @@ void DDHGCalModuleAlgo::constructLayers(const DDLogicalPart& module, DDCompactVi pgonRin.emplace_back(rinB); pgonRout.emplace_back(rmax); pgonRout.emplace_back(rmax); - DDSolid solid = DDSolidFactory::polyhedra( - DDName(name, idNameSpace_), sectors_, -alpha, 2 * geant_units::piRadians, pgonZ, pgonRin, pgonRout); + DDSolid solid = + DDSolidFactory::polyhedra(DDName(name, idNameSpace_), sectors_, -alpha, 2._pi, pgonZ, pgonRin, pgonRout); glog = DDLogicalPart(solid.ddname(), matter, solid); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: " << solid.name() << " polyhedra of " << sectors_ @@ -210,8 +210,7 @@ void DDHGCalModuleAlgo::constructLayers(const DDLogicalPart& module, DDCompactVi edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << pgonZ[k] << " R " << pgonRin[k] << ":" << pgonRout[k]; #endif } else { - DDSolid solid = DDSolidFactory::tubs( - DDName(name, idNameSpace_), 0.5 * thick_[ii], rinB, routF, 0.0, 2 * geant_units::piRadians); + DDSolid solid = DDSolidFactory::tubs(DDName(name, idNameSpace_), 0.5 * thick_[ii], rinB, routF, 0.0, 2._pi); glog = DDLogicalPart(solid.ddname(), matter, solid); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: " << solid.name() << " Tubs made of " << matName @@ -225,9 +224,8 @@ void DDHGCalModuleAlgo::constructLayers(const DDLogicalPart& module, DDCompactVi cpv.position(glog, module, copy, r1, rot); ++copyNumber_[ii]; #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo test: " << glog.name() << " number " << copy - << " positioned in " << module.name() << " at " << r1 << " with " << rot - << std::endl; + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: " << glog.name() << " number " << copy << " positioned in " + << module.name() << " at " << r1 << " with " << rot; #endif zz += (0.5 * thick_[ii]); } // End of loop over layers in a block @@ -259,7 +257,7 @@ double DDHGCalModuleAlgo::rMax(double z) { #endif } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "rMax : " << z << ":" << ik << ":" << r << std::endl; + edm::LogVerbatim("HGCalGeom") << "rMax : " << z << ":" << ik << ":" << r; #endif return r; } @@ -300,7 +298,7 @@ void DDHGCalModuleAlgo::positionSensitive(DDLogicalPart& glog, double rin, doubl copies_.insert(copy); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: " << name << " number " << copy << " positioned in " - << glog.ddname() << " at " << tran << " with " << rotation << std::endl; + << glog.ddname() << " at " << tran << " with " << rotation; #endif } } diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalNoTaperEndcap.cc b/Geometry/HGCalCommonData/plugins/DDHGCalNoTaperEndcap.cc index 98d7acc76e955..d2714686531d6 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalNoTaperEndcap.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalNoTaperEndcap.cc @@ -3,7 +3,7 @@ #include #include -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDAlgorithm.h" #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" @@ -16,7 +16,7 @@ #include "FWCore/PluginManager/interface/PluginFactory.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; class DDHGCalNoTaperEndcap : public DDAlgorithm { public: diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalSiliconModule.cc b/Geometry/HGCalCommonData/plugins/DDHGCalSiliconModule.cc new file mode 100644 index 0000000000000..b797155dcd5de --- /dev/null +++ b/Geometry/HGCalCommonData/plugins/DDHGCalSiliconModule.cc @@ -0,0 +1,436 @@ +/////////////////////////////////////////////////////////////////////////////// +// File: DDHGCalSiliconModule.cc +// Description: Geometry factory class for HGCal (EE and HESil) using +// information from the file +/////////////////////////////////////////////////////////////////////////////// + +#include "DataFormats/Math/interface/angle_units.h" +#include "DetectorDescription/Core/interface/DDAlgorithm.h" +#include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" +#include "DetectorDescription/Core/interface/DDCurrentNamespace.h" +#include "DetectorDescription/Core/interface/DDLogicalPart.h" +#include "DetectorDescription/Core/interface/DDMaterial.h" +#include "DetectorDescription/Core/interface/DDSolid.h" +#include "DetectorDescription/Core/interface/DDSplit.h" +#include "DetectorDescription/Core/interface/DDTypes.h" +#include "DetectorDescription/Core/interface/DDutils.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/PluginManager/interface/PluginFactory.h" +#include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h" +#include "Geometry/HGCalCommonData/interface/HGCalParameters.h" +#include "Geometry/HGCalCommonData/interface/HGCalProperty.h" +#include "Geometry/HGCalCommonData/interface/HGCalTypes.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferType.h" + +#include +#include +#include +#include +#include +#include + +//#define EDM_ML_DEBUG +using namespace angle_units::operators; + +class DDHGCalSiliconModule : public DDAlgorithm { +public: + DDHGCalSiliconModule(); + + void initialize(const DDNumericArguments& nArgs, + const DDVectorArguments& vArgs, + const DDMapArguments& mArgs, + const DDStringArguments& sArgs, + const DDStringVectorArguments& vsArgs) override; + void execute(DDCompactView& cpv) override; + +protected: + void constructLayers(const DDLogicalPart&, DDCompactView& cpv); + void positionSensitive(const DDLogicalPart& glog, int layertype, int layer, DDCompactView& cpv); + +private: + HGCalGeomTools geomTools_; + + static constexpr double tol1_ = 0.01; + static constexpr double tol2_ = 0.00001; + + int waferTypes_; // Number of wafer types + int facingTypes_; // Types of facings of modules toward IP + int partialTypes_; // Number of partial wafer types + int orientationTypes_; // Number of partial wafer orienations + int firstLayer_; // Copy # of the first sensitive layer + int absorbMode_; // Absorber mode + int sensitiveMode_; // Sensitive mode + double zMinBlock_; // Starting z-value of the block + double waferSize_; // Width of the wafer + double waferSepar_; // Sensor separation + int sectors_; // Sectors + std::vector waferFull_; // Names of full wafer modules + std::vector waferPart_; // Names of partial wafer modules + std::vector materials_; // names of materials + std::vector names_; // Names of volumes + std::vector thick_; // Thickness of the material + std::vector copyNumber_; // Initial copy numbers + std::vector layers_; // Number of layers in a section + std::vector layerThick_; // Thickness of each section + std::vector layerType_; // Type of the layer + std::vector layerSense_; // Content of a layer (sensitive?) + std::vector layerCenter_; // Centering of the wafers + std::vector slopeB_; // Slope at the lower R + std::vector zFrontB_; // Starting Z values for the slopes + std::vector rMinFront_; // Corresponding rMin's + std::vector slopeT_; // Slopes at the larger R + std::vector zFrontT_; // Starting Z values for the slopes + std::vector rMaxFront_; // Corresponding rMax's + std::vector waferIndex_; // Wafer index for the types + std::vector waferProperty_; // Wafer property + std::vector waferLayerStart_; // Index of wafers in each layer + std::string nameSpace_; // Namespace of this and ALL sub-parts + std::unordered_set copies_; // List of copy #'s + double alpha_, cosAlpha_; +}; + +DDHGCalSiliconModule::DDHGCalSiliconModule() { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: Creating an instance"; +#endif +} + +void DDHGCalSiliconModule::initialize(const DDNumericArguments& nArgs, + const DDVectorArguments& vArgs, + const DDMapArguments&, + const DDStringArguments& sArgs, + const DDStringVectorArguments& vsArgs) { + waferTypes_ = static_cast(nArgs["WaferTypes"]); + facingTypes_ = static_cast(nArgs["FacingTypes"]); + partialTypes_ = static_cast(nArgs["PartialTypes"]); + orientationTypes_ = static_cast(nArgs["OrientationTypes"]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "Number of types of wafers: " << waferTypes_ << " facings: " << facingTypes_ + << " partials: " << partialTypes_ << " Orientations: " << orientationTypes_; +#endif + firstLayer_ = static_cast(nArgs["FirstLayer"]); + absorbMode_ = static_cast(nArgs["AbsorberMode"]); + sensitiveMode_ = static_cast(nArgs["SensitiveMode"]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "First Layer " << firstLayer_ << " and " + << "Absober:Sensitive mode " << absorbMode_ << ":" << sensitiveMode_; +#endif + zMinBlock_ = nArgs["zMinBlock"]; + waferSize_ = nArgs["waferSize"]; + waferSepar_ = nArgs["SensorSeparation"]; + sectors_ = (int)(nArgs["Sectors"]); + alpha_ = (1._pi) / sectors_; + cosAlpha_ = cos(alpha_); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "zStart " << zMinBlock_ << " wafer width " << waferSize_ << " separations " + << waferSepar_ << " sectors " << sectors_ << ":" << convertRadToDeg(alpha_) << ":" + << cosAlpha_; +#endif + waferFull_ = vsArgs["WaferNamesFull"]; + waferPart_ = vsArgs["WaferNamesPartial"]; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: " << waferFull_.size() << " full and " << waferPart_.size() + << " partial modules\nDDHGCalSiliconModule:Full Modules:"; + unsigned int i1max = static_cast(waferFull_.size()); + for (unsigned int i1 = 0; i1 < i1max; i1 += 2) { + std::ostringstream st1; + unsigned int i2 = std::min((i1 + 2), i1max); + for (unsigned int i = i1; i < i2; ++i) + st1 << " [" << i << "] " << waferFull_[i]; + edm::LogVerbatim("HGCalGeom") << st1.str() << std::endl; + } + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: Partial Modules:"; + i1max = static_cast(waferPart_.size()); + for (unsigned int i1 = 0; i1 < i1max; i1 += 2) { + std::ostringstream st1; + unsigned int i2 = std::min((i1 + 2), i1max); + for (unsigned int i = i1; i < i2; ++i) + st1 << " [" << i << "] " << waferPart_[i]; + edm::LogVerbatim("HGCalGeom") << st1.str() << std::endl; + } +#endif + materials_ = vsArgs["MaterialNames"]; + names_ = vsArgs["VolumeNames"]; + thick_ = vArgs["Thickness"]; + copyNumber_.resize(materials_.size(), 1); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: " << materials_.size() << " types of volumes"; + for (unsigned int i = 0; i < names_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names_[i] << " of thickness " << thick_[i] + << " filled with " << materials_[i] << " first copy number " << copyNumber_[i]; +#endif + layers_ = dbl_to_int(vArgs["Layers"]); + layerThick_ = vArgs["LayerThick"]; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "There are " << layers_.size() << " blocks"; + for (unsigned int i = 0; i < layers_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << layerThick_[i] << " with " << layers_[i] + << " layers"; +#endif + layerType_ = dbl_to_int(vArgs["LayerType"]); + layerSense_ = dbl_to_int(vArgs["LayerSense"]); + layerCenter_ = dbl_to_int(vArgs["LayerCenter"]); +#ifdef EDM_ML_DEBUG + for (unsigned int i = 0; i < layerCenter_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "LayerCenter [" << i << "] " << layerCenter_[i]; +#endif + if (firstLayer_ > 0) { + for (unsigned int i = 0; i < layerType_.size(); ++i) { + if (layerSense_[i] > 0) { + int ii = layerType_[i]; + copyNumber_[ii] = (layerSense_[i] == 1) ? firstLayer_ : (firstLayer_ + 1); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "First copy number for layer type " << i << ":" << ii << " with " + << materials_[ii] << " changed to " << copyNumber_[ii]; +#endif + } + } + } else { + firstLayer_ = 1; + } +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "There are " << layerType_.size() << " layers"; + for (unsigned int i = 0; i < layerType_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Layer [" << i << "] with material type " << layerType_[i] << " sensitive class " + << layerSense_[i]; +#endif + slopeB_ = vArgs["SlopeBottom"]; + zFrontB_ = vArgs["ZFrontBottom"]; + rMinFront_ = vArgs["RMinFront"]; + slopeT_ = vArgs["SlopeTop"]; + zFrontT_ = vArgs["ZFrontTop"]; + rMaxFront_ = vArgs["RMaxFront"]; +#ifdef EDM_ML_DEBUG + for (unsigned int i = 0; i < slopeB_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Bottom Block [" << i << "] Zmin " << zFrontB_[i] << " Rmin " << rMinFront_[i] + << " Slope " << slopeB_[i]; + for (unsigned int i = 0; i < slopeT_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Top Block [" << i << "] Zmin " << zFrontT_[i] << " Rmax " << rMaxFront_[i] + << " Slope " << slopeT_[i]; +#endif + waferIndex_ = dbl_to_int(vArgs["WaferIndex"]); + waferProperty_ = dbl_to_int(vArgs["WaferProperties"]); + waferLayerStart_ = dbl_to_int(vArgs["WaferLayerStart"]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "waferProperties with " << waferIndex_.size() << " entries in " + << waferLayerStart_.size() << " layers"; + for (unsigned int k = 0; k < waferLayerStart_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "LayerStart[" << k << "] " << waferLayerStart_[k]; + for (unsigned int k = 0; k < waferIndex_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "Wafer[" << k << "] " << waferIndex_[k] << " (" + << HGCalWaferIndex::waferLayer(waferIndex_[k]) << ", " + << HGCalWaferIndex::waferU(waferIndex_[k]) << ", " + << HGCalWaferIndex::waferV(waferIndex_[k]) << ") : (" + << HGCalProperty::waferThick(waferProperty_[k]) << ":" + << HGCalProperty::waferPartial(waferProperty_[k]) << ":" + << HGCalProperty::waferOrient(waferProperty_[k]) << ")"; +#endif + nameSpace_ = DDCurrentNamespace::ns(); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: NameSpace " << nameSpace_; +#endif +} + +//////////////////////////////////////////////////////////////////// +// DDHGCalSiliconModule methods... +//////////////////////////////////////////////////////////////////// + +void DDHGCalSiliconModule::execute(DDCompactView& cpv) { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "==>> Constructing DDHGCalSiliconModule..."; + copies_.clear(); +#endif + constructLayers(parent(), cpv); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: " << copies_.size() << " different wafer copy numbers"; + int k(0); + for (std::unordered_set::const_iterator itr = copies_.begin(); itr != copies_.end(); ++itr, ++k) { + edm::LogVerbatim("HGCalGeom") << "Copy [" << k << "] : " << (*itr); + } + copies_.clear(); + edm::LogVerbatim("HGCalGeom") << "<<== End of DDHGCalSiliconModule construction..."; +#endif +} + +void DDHGCalSiliconModule::constructLayers(const DDLogicalPart& module, DDCompactView& cpv) { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: \t\tInside Layers"; +#endif + double zi(zMinBlock_); + int laymin(0); + for (unsigned int i = 0; i < layers_.size(); i++) { + double zo = zi + layerThick_[i]; + double routF = HGCalGeomTools::radius(zi, zFrontT_, rMaxFront_, slopeT_); + int laymax = laymin + layers_[i]; + double zz = zi; + double thickTot(0); + for (int ly = laymin; ly < laymax; ++ly) { + int ii = layerType_[ly]; + int copy = copyNumber_[ii]; + double hthick = 0.5 * thick_[ii]; + double rinB = HGCalGeomTools::radius(zo - tol1_, zFrontB_, rMinFront_, slopeB_); + zz += hthick; + thickTot += thick_[ii]; + + std::string name = names_[ii] + std::to_string(copy); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: Layer " << ly << ":" << ii << " Front " << zi << ", " + << routF << " Back " << zo << ", " << rinB << " superlayer thickness " + << layerThick_[i]; +#endif + DDName matName(DDSplit(materials_[ii]).first, DDSplit(materials_[ii]).second); + DDMaterial matter(matName); + DDLogicalPart glog; + if (layerSense_[ly] < 1) { + std::vector pgonZ, pgonRin, pgonRout; + double rmax = routF * cosAlpha_ - tol1_; + HGCalGeomTools::radius(zz - hthick, + zz + hthick, + zFrontB_, + rMinFront_, + slopeB_, + zFrontT_, + rMaxFront_, + slopeT_, + -layerSense_[ly], + pgonZ, + pgonRin, + pgonRout); + for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) { + pgonZ[isec] -= zz; + if (layerSense_[ly] == 0 || absorbMode_ == 0) + pgonRout[isec] = rmax; + else + pgonRout[isec] = pgonRout[isec] * cosAlpha_ - tol1_; + } + DDSolid solid = + DDSolidFactory::polyhedra(DDName(name, nameSpace_), sectors_, -alpha_, 2._pi, pgonZ, pgonRin, pgonRout); + glog = DDLogicalPart(solid.ddname(), matter, solid); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: " << solid.name() << " polyhedra of " << sectors_ + << " sectors covering " << convertRadToDeg(-alpha_) << ":" + << convertRadToDeg(-alpha_ + 2._pi) << " with " << pgonZ.size() + << " sections and filled with " << matName; + for (unsigned int k = 0; k < pgonZ.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << pgonZ[k] << " R " << pgonRin[k] << ":" << pgonRout[k]; +#endif + } else { + double rins = + (sensitiveMode_ < 1) ? rinB : HGCalGeomTools::radius(zz + hthick - tol1_, zFrontB_, rMinFront_, slopeB_); + double routs = + (sensitiveMode_ < 1) ? routF : HGCalGeomTools::radius(zz - hthick, zFrontT_, rMaxFront_, slopeT_); + DDSolid solid = DDSolidFactory::tubs(DDName(name, nameSpace_), hthick, rins, routs, 0.0, 2._pi); + glog = DDLogicalPart(solid.ddname(), matter, solid); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: " << solid.name() << " Tubs made of " << matName + << " of dimensions " << rinB << ":" << rins << ", " << routF << ":" << routs + << ", " << hthick << ", 0.0, 360.0 and position " << glog.name() << " number " + << copy << ":" << layerCenter_[copy - firstLayer_]; +#endif + positionSensitive(glog, layerSense_[ly], (copy - firstLayer_), cpv); + } + DDTranslation r1(0, 0, zz); + DDRotation rot; + cpv.position(glog, module, copy, r1, rot); + int inc = ((layerSense_[ly] > 0) && (facingTypes_ > 1)) ? 2 : 1; + copyNumber_[ii] = copy + inc; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: " << glog.name() << " number " << copy + << " positioned in " << module.name() << " at " << r1 << " with no rotation"; +#endif + zz += hthick; + } // End of loop over layers in a block + zi = zo; + laymin = laymax; + // Make consistency check of all the partitions of the block + if (std::abs(thickTot - layerThick_[i]) >= tol2_) { + if (thickTot > layerThick_[i]) { + edm::LogError("HGCalGeom") << "Thickness of the partition " << layerThick_[i] << " is smaller than " << thickTot + << ": thickness of all its components **** ERROR ****"; + } else { + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << layerThick_[i] << " does not match with " + << thickTot << " of the components"; + } + } + } // End of loop over blocks +} + +void DDHGCalSiliconModule::positionSensitive(const DDLogicalPart& glog, int layertype, int layer, DDCompactView& cpv) { + static const double sqrt3 = std::sqrt(3.0); + int layercenter = layerCenter_[layer]; + int firstWafer = waferLayerStart_[layer]; + int lastWafer = ((layer + 1 < static_cast(waferLayerStart_.size())) ? waferLayerStart_[layer + 1] + : static_cast(waferLayerStart_.size())); + double r = 0.5 * (waferSize_ + waferSepar_); + double R = 2.0 * r / sqrt3; + double dy = 0.75 * R; + const auto& xyoff = geomTools_.shiftXY(layercenter, (waferSize_ + waferSepar_)); +#ifdef EDM_ML_DEBUG + int ium(0), ivm(0), kount(0); + std::vector ntype(3, 0); + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: " << glog.ddname() << " r " << r << " R " << R << " dy " + << dy << " Shift " << xyoff.first << ":" << xyoff.second << " WaferSize " + << (waferSize_ + waferSepar_) << " index " << firstWafer << ":" << (lastWafer - 1); +#endif + for (int k = firstWafer; k < lastWafer; ++k) { + int u = HGCalWaferIndex::waferU(waferIndex_[k]); + int v = HGCalWaferIndex::waferV(waferIndex_[k]); +#ifdef EDM_ML_DEBUG + int iu = std::abs(u); + int iv = std::abs(v); +#endif + int nr = 2 * v; + int nc = -2 * u + v; + double xpos = xyoff.first + nc * r; + double ypos = xyoff.second + nr * dy; + int type = HGCalProperty::waferThick(waferProperty_[k]); + int part = HGCalProperty::waferPartial(waferProperty_[k]); + int orien = HGCalProperty::waferOrient(waferProperty_[k]); + std::string wafer; + int i(999); + if (part == HGCalTypes::WaferFull) { + i = (layertype - 1) * waferTypes_ + type; + wafer = waferFull_[i]; + } else { + i = (part - 1) * waferTypes_ * facingTypes_ * orientationTypes_ + + (layertype - 1) * waferTypes_ * orientationTypes_ + type * orientationTypes_ + orien; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << " layertype:type:part:orien:ind " << layertype << ":" << type << ":" << part + << ":" << orien << ":" << i << ":" << waferPart_.size(); +#endif + wafer = waferPart_[i]; + } + int copy = HGCalTypes::packTypeUV(type, u, v); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << " DDHGCalSiliconModule: Layer " << HGCalWaferIndex::waferLayer(waferIndex_[k]) + << " Wafer " << wafer << " number " << copy << " type:part:orien:ind " << type << ":" + << part << ":" << orien << ":" << i << " layer:u:v:indx " << (layer + firstLayer_) + << ":" << u << ":" << v; + if (iu > ium) + ium = iu; + if (iv > ivm) + ivm = iv; + kount++; + if (copies_.count(copy) == 0) + copies_.insert(copy); +#endif + DDTranslation tran(xpos, ypos, 0.0); + DDRotation rotation; + DDName name = DDName(DDSplit(wafer).first, DDSplit(wafer).second); + cpv.position(name, glog.ddname(), copy, tran, rotation); +#ifdef EDM_ML_DEBUG + ++ntype[type]; + edm::LogVerbatim("HGCalGeom") << " DDHGCalSiliconModule: " << name << " number " << copy << " type " << layertype + << ":" << type << " positioned in " << glog.ddname() << " at " << tran + << " with no rotation"; +#endif + } +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: Maximum # of u " << ium << " # of v " << ivm << " and " + << kount << " wafers (" << ntype[0] << ":" << ntype[1] << ":" << ntype[2] << ") for " + << glog.ddname(); +#endif +} + +DEFINE_EDM_PLUGIN(DDAlgorithmFactory, DDHGCalSiliconModule, "hgcal:DDHGCalSiliconModule"); diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalTBModule.cc b/Geometry/HGCalCommonData/plugins/DDHGCalTBModule.cc index 6f2c646d06139..44fad244db76f 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalTBModule.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalTBModule.cc @@ -5,7 +5,7 @@ #include #include -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDAlgorithm.h" #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" @@ -20,7 +20,7 @@ #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; class DDHGCalTBModule : public DDAlgorithm { public: @@ -207,8 +207,7 @@ void DDHGCalTBModule::constructLayers(const DDLogicalPart& module, DDCompactView << ":" << absorbH_ << ":" << 0.5 * thick_[ii]; #endif } else { - DDSolid solid = DDSolidFactory::tubs( - DDName(name, idNameSpace_), 0.5 * thick_[ii], rinB, routF, 0.0, 2 * geant_units::piRadians); + DDSolid solid = DDSolidFactory::tubs(DDName(name, idNameSpace_), 0.5 * thick_[ii], rinB, routF, 0.0, 2._pi); glog = DDLogicalPart(solid.ddname(), matter, solid); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModule: " << solid.name() << " Tubs made of " << matName diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalTBModuleX.cc b/Geometry/HGCalCommonData/plugins/DDHGCalTBModuleX.cc index a3df671431a32..c4f285a907b87 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalTBModuleX.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalTBModuleX.cc @@ -4,7 +4,7 @@ #include #include -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDAlgorithm.h" #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" @@ -19,7 +19,7 @@ #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; class DDHGCalTBModuleX : public DDAlgorithm { public: diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalWafer.cc b/Geometry/HGCalCommonData/plugins/DDHGCalWafer.cc index 9d8287088b653..198094deeeda8 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalWafer.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalWafer.cc @@ -4,7 +4,7 @@ #include #include -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDAlgorithm.h" #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" @@ -17,7 +17,7 @@ #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; class DDHGCalWafer : public DDAlgorithm { public: diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalWaferAlgo.cc b/Geometry/HGCalCommonData/plugins/DDHGCalWaferAlgo.cc index e984377f592a6..484a1484d9b09 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalWaferAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalWaferAlgo.cc @@ -9,7 +9,7 @@ #include #include -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDAlgorithm.h" #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" @@ -21,7 +21,7 @@ #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; class DDHGCalWaferAlgo : public DDAlgorithm { public: diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalWaferF.cc b/Geometry/HGCalCommonData/plugins/DDHGCalWaferF.cc new file mode 100644 index 0000000000000..512fff2791492 --- /dev/null +++ b/Geometry/HGCalCommonData/plugins/DDHGCalWaferF.cc @@ -0,0 +1,222 @@ +#include "DetectorDescription/Core/interface/DDAlgorithm.h" +#include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" +#include "DetectorDescription/Core/interface/DDCurrentNamespace.h" +#include "DetectorDescription/Core/interface/DDLogicalPart.h" +#include "DetectorDescription/Core/interface/DDMaterial.h" +#include "DetectorDescription/Core/interface/DDSolid.h" +#include "DetectorDescription/Core/interface/DDSplit.h" +#include "DetectorDescription/Core/interface/DDTypes.h" +#include "DetectorDescription/Core/interface/DDutils.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/PluginManager/interface/PluginFactory.h" +#include "Geometry/HGCalCommonData/interface/HGCalTypes.h" + +#include +#include +#include + +//#define EDM_ML_DEBUG + +class DDHGCalWaferF : public DDAlgorithm { +public: + // Constructor and Destructor + DDHGCalWaferF(); + ~DDHGCalWaferF() override; + + void initialize(const DDNumericArguments& nArgs, + const DDVectorArguments& vArgs, + const DDMapArguments& mArgs, + const DDStringArguments& sArgs, + const DDStringVectorArguments& vsArgs) override; + void execute(DDCompactView& cpv) override; + +private: + std::string material_; // Material name for module with gap + double thick_; // Module thickness + double waferSize_; // Wafer size + double waferSepar_; // Sensor separation + std::vector layerNames_; // Names of the layers + std::vector materials_; // Materials of the layers + std::vector layerThick_; // Thickness of layers + std::vector layerType_; // Layer types + std::vector copyNumber_; // Initial copy numbers + std::vector layers_; // Number of layers in a section + int nCells_; // Half number of cells along u-v axis + int cellType_; // Cell Type (0,1,2: Fine, Course 2/3) + std::vector cellNames_; // Name of the cells + std::string nameSpace_; // Namespace to be used +}; + +DDHGCalWaferF::DDHGCalWaferF() { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: Creating an instance"; +#endif +} + +DDHGCalWaferF::~DDHGCalWaferF() {} + +void DDHGCalWaferF::initialize(const DDNumericArguments& nArgs, + const DDVectorArguments& vArgs, + const DDMapArguments&, + const DDStringArguments& sArgs, + const DDStringVectorArguments& vsArgs) { + material_ = sArgs["ModuleMaterial"]; + thick_ = nArgs["ModuleThickness"]; + waferSize_ = nArgs["WaferSize"]; + waferSepar_ = nArgs["SensorSeparation"]; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: Module " << parent().name() << " made of " << material_ << " T " + << thick_ << " Wafer 2r " << waferSize_ << " Half Separation " << waferSepar_; +#endif + layerNames_ = vsArgs["LayerNames"]; + materials_ = vsArgs["LayerMaterials"]; + layerThick_ = vArgs["LayerThickness"]; + layerType_ = dbl_to_int(vArgs["LayerTypes"]); + copyNumber_.resize(materials_.size(), 1); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: " << layerNames_.size() << " types of volumes"; + for (unsigned int i = 0; i < layerNames_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << layerNames_[i] << " of thickness " << layerThick_[i] + << " filled with " << materials_[i] << " type " << layerType_[i]; +#endif + layers_ = dbl_to_int(vArgs["Layers"]); +#ifdef EDM_ML_DEBUG + std::ostringstream st1; + for (unsigned int i = 0; i < layers_.size(); ++i) + st1 << " [" << i << "] " << layers_[i]; + edm::LogVerbatim("HGCalGeom") << "There are " << layers_.size() << " blocks" << st1.str(); +#endif + nCells_ = (int)(nArgs["NCells"]); + cellType_ = (int)(nArgs["CellType"]); + cellNames_ = vsArgs["CellNames"]; + nameSpace_ = DDCurrentNamespace::ns(); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: Cells/Wafer " << nCells_ << " Cell Type " << cellType_ + << " NameSpace " << nameSpace_ << " # of cells " << cellNames_.size(); + for (unsigned int k = 0; k < cellNames_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: Cell[" << k << "] " << cellNames_[k]; +#endif +} + +void DDHGCalWaferF::execute(DDCompactView& cpv) { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "==>> Executing DDHGCalWaferF..."; +#endif + + static constexpr double tol = 0.00001; + static const double sqrt3 = std::sqrt(3.0); + double rM = 0.5 * (waferSize_ + waferSepar_); + double RM2 = rM / sqrt3; + double R = waferSize_ / (3.0 * nCells_); + double r = 0.5 * R * sqrt3; + double r2 = 0.5 * waferSize_; + double R2 = r2 / sqrt3; + + // First the mother + std::vector xM = {rM, 0, -rM, -rM, 0, rM}; + std::vector yM = {RM2, 2 * RM2, RM2, -RM2, -2 * RM2, -RM2}; + std::vector zw = {-0.5 * thick_, 0.5 * thick_}; + std::vector zx(2, 0), zy(2, 0), scale(2, 1.0); + DDName parentName = parent().name(); + DDSolid solid = DDSolidFactory::extrudedpolygon(parentName, xM, yM, zw, zx, zy, scale); + DDName matName(DDSplit(material_).first, DDSplit(material_).second); + DDMaterial matter(matName); + DDLogicalPart glogM = DDLogicalPart(solid.ddname(), matter, solid); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: " << solid.name() << " extruded polygon made of " << matName + << " z|x|y|s (0) " << zw[0] << ":" << zx[0] << ":" << zy[0] << ":" << scale[0] + << " z|x|y|s (1) " << zw[1] << ":" << zx[1] << ":" << zy[1] << ":" << scale[1] + << " and " << xM.size() << " edges"; + for (unsigned int k = 0; k < xM.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << xM[k] << ":" << yM[k]; +#endif + + // Then the types + std::vector xL = {r2, 0, -r2, -r2, 0, r2}; + std::vector yL = {R2, 2 * R2, R2, -R2, -2 * R2, -R2}; + std::vector glogs(materials_.size()); + double zi(-0.5 * thick_), thickTot(0.0); + for (unsigned int l = 0; l < layers_.size(); l++) { + unsigned int i = layers_[l]; + if (copyNumber_[i] == 1) { + zw[0] = -0.5 * layerThick_[i]; + zw[1] = 0.5 * layerThick_[i]; + solid = DDSolidFactory::extrudedpolygon(layerNames_[i], xL, yL, zw, zx, zy, scale); + DDName matN(DDSplit(materials_[i]).first, DDSplit(materials_[i]).second); + DDMaterial matter(matN); + glogs[i] = DDLogicalPart(solid.ddname(), matter, solid); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: " << solid.name() << " extruded polygon made of " << matN + << " z|x|y|s (0) " << zw[0] << ":" << zx[0] << ":" << zy[0] << ":" << scale[0] + << " z|x|y|s (1) " << zw[1] << ":" << zx[1] << ":" << zy[1] << ":" << scale[1] + << " and " << xL.size() << " edges"; + for (unsigned int k = 0; k < xL.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << xL[k] << ":" << yL[k]; +#endif + } + DDTranslation tran0(0, 0, (zi + 0.5 * layerThick_[i])); + DDRotation rot; + cpv.position(glogs[i], glogM, copyNumber_[i], tran0, rot); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: " << glogs[i].name() << " number " << copyNumber_[i] + << " positioned in " << glogM.name() << " at " << tran0 << " with " << rot; +#endif + ++copyNumber_[i]; + zi += layerThick_[i]; + thickTot += layerThick_[i]; + if (layerType_[i] > 0) { + for (int u = 0; u < 2 * nCells_; ++u) { + for (int v = 0; v < 2 * nCells_; ++v) { + if (((v - u) < nCells_) && (u - v) <= nCells_) { + int n2 = nCells_ / 2; + double yp = (u - 0.5 * v - n2) * 2 * r; + double xp = (1.5 * (v - nCells_) + 1.0) * R; + int cell(0); + if ((u == 0) && (v == 0)) + cell = 7; + else if ((u == 0) && (v == nCells_ - 1)) + cell = 8; + else if ((u == nCells_) && (v == 2 * nCells_ - 1)) + cell = 9; + else if ((u == 2 * nCells_ - 1) && (v == 2 * nCells_ - 1)) + cell = 10; + else if ((u == 2 * nCells_ - 1) && (v == nCells_ - 1)) + cell = 11; + else if ((u == nCells_) && (v == 0)) + cell = 12; + else if (u == 0) + cell = 1; + else if ((v - u) == (nCells_ - 1)) + cell = 4; + else if (v == (2 * nCells_ - 1)) + cell = 2; + else if (u == (2 * nCells_ - 1)) + cell = 5; + else if ((u - v) == nCells_) + cell = 3; + else if (v == 0) + cell = 6; + DDTranslation tran(xp, yp, 0); + int copy = HGCalTypes::packCellTypeUV(cellType_, u, v); + cpv.position(DDName(cellNames_[cell]), glogs[i], copy, tran, rot); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: " << cellNames_[cell] << " number " << copy + << " positioned in " << glogs[i].name() << " at " << tran << " with " << rot; +#endif + } + } + } + } + } + if (std::abs(thickTot - thick_) >= tol) { + if (thickTot > thick_) { + edm::LogError("HGCalGeom") << "Thickness of the partition " << thick_ << " is smaller than " << thickTot + << ": thickness of all its components **** ERROR ****"; + } else { + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << thick_ << " does not match with " << thickTot + << " of the components"; + } + } +} + +DEFINE_EDM_PLUGIN(DDAlgorithmFactory, DDHGCalWaferF, "hgcal:DDHGCalWaferF"); diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalWaferP.cc b/Geometry/HGCalCommonData/plugins/DDHGCalWaferP.cc new file mode 100644 index 0000000000000..9ecf0e67a30e7 --- /dev/null +++ b/Geometry/HGCalCommonData/plugins/DDHGCalWaferP.cc @@ -0,0 +1,233 @@ +#include "DetectorDescription/Core/interface/DDAlgorithm.h" +#include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" +#include "DetectorDescription/Core/interface/DDCurrentNamespace.h" +#include "DetectorDescription/Core/interface/DDLogicalPart.h" +#include "DetectorDescription/Core/interface/DDMaterial.h" +#include "DetectorDescription/Core/interface/DDSolid.h" +#include "DetectorDescription/Core/interface/DDSplit.h" +#include "DetectorDescription/Core/interface/DDTypes.h" +#include "DetectorDescription/Core/interface/DDutils.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/PluginManager/interface/PluginFactory.h" +#include "Geometry/HGCalCommonData/interface/HGCalTypes.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferMask.h" + +#include +#include +#include + +//#define EDM_ML_DEBUG + +class DDHGCalWaferP : public DDAlgorithm { +public: + // Constructor and Destructor + DDHGCalWaferP(); + ~DDHGCalWaferP() override; + + void initialize(const DDNumericArguments& nArgs, + const DDVectorArguments& vArgs, + const DDMapArguments& mArgs, + const DDStringArguments& sArgs, + const DDStringVectorArguments& vsArgs) override; + void execute(DDCompactView& cpv) override; + +private: + std::string material_; // Material name for module with gap + double thick_; // Module thickness + double waferSize_; // Wafer size + double waferSepar_; // Sensor separation + std::vector tags_; // Tags to be added to each name + std::vector partialTypes_; // Type of partial wafer + std::vector orientations_; // Orientations of the wafers + std::vector layerNames_; // Names of the layers + std::vector materials_; // Materials of the layers + std::vector layerThick_; // Thickness of layers + std::vector layerType_; // Layer types + std::vector layers_; // Number of layers in a section + std::string senseName_; // Name of the sensitive layer + double senseT_; // Thickness of sensitive layer + int senseType_; // Cell Type (0,1,2: Fine, Course 2/3) + int posSense_; // Position depleted layer + std::string nameSpace_; // Namespace to be used +}; + +DDHGCalWaferP::DDHGCalWaferP() { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: Creating an instance"; +#endif +} + +DDHGCalWaferP::~DDHGCalWaferP() {} + +void DDHGCalWaferP::initialize(const DDNumericArguments& nArgs, + const DDVectorArguments& vArgs, + const DDMapArguments&, + const DDStringArguments& sArgs, + const DDStringVectorArguments& vsArgs) { + material_ = sArgs["ModuleMaterial"]; + thick_ = nArgs["ModuleThickness"]; + waferSize_ = nArgs["WaferSize"]; + waferSepar_ = nArgs["SensorSeparation"]; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: Module " << parent().name() << " made of " << material_ << " T " + << thick_ << " Wafer 2r " << waferSize_ << " Half Separation " << waferSepar_; +#endif + tags_ = vsArgs["Tags"]; + partialTypes_ = dbl_to_int(vArgs["PartialTypes"]); + orientations_ = dbl_to_int(vArgs["Orientations"]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: " << tags_.size() << " variations of wafer types"; + for (unsigned int k = 0; k < tags_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "Type[" << k << "] " << tags_[k] << " Partial " << partialTypes_[k] + << " Orientation " << orientations_[k]; +#endif + layerNames_ = vsArgs["LayerNames"]; + materials_ = vsArgs["LayerMaterials"]; + layerThick_ = vArgs["LayerThickness"]; + layerType_ = dbl_to_int(vArgs["LayerTypes"]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: " << layerNames_.size() << " types of volumes"; + for (unsigned int i = 0; i < layerNames_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << layerNames_[i] << " of thickness " << layerThick_[i] + << " filled with " << materials_[i] << " type " << layerType_[i]; +#endif + layers_ = dbl_to_int(vArgs["Layers"]); +#ifdef EDM_ML_DEBUG + std::ostringstream st1; + for (unsigned int i = 0; i < layers_.size(); ++i) + st1 << " [" << i << "] " << layers_[i]; + edm::LogVerbatim("HGCalGeom") << "There are " << layers_.size() << " blocks" << st1.str(); +#endif + senseName_ = sArgs["SenseName"]; + senseT_ = nArgs["SenseThick"]; + senseType_ = static_cast(nArgs["SenseType"]); + posSense_ = static_cast(nArgs["PosSensitive"]); + nameSpace_ = DDCurrentNamespace::ns(); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: NameSpace " << nameSpace_ << " Sensitive Layer Name " << senseName_ + << " Thickness " << senseT_ << " Type " << senseType_ << " Position " << posSense_; +#endif +} + +void DDHGCalWaferP::execute(DDCompactView& cpv) { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "==>> Executing DDHGCalWaferP..."; +#endif + + static constexpr double tol = 0.00001; + static const double sqrt3 = std::sqrt(3.0); + double rM = 0.5 * (waferSize_ + waferSepar_); + double RM = 2.0 * rM / sqrt3; + double r = 0.5 * waferSize_; + double R = 2.0 * r / sqrt3; + std::string parentName = parent().name().name(); + + // Loop over all types + for (unsigned int k = 0; k < tags_.size(); ++k) { + // First the mother + std::string mother = parentName + tags_[k]; + std::vector > wxy = + HGCalWaferMask::waferXY(partialTypes_[k], orientations_[k], 1, rM, RM, 0.0, 0.0); + std::vector xM, yM; + for (unsigned int i = 0; i < (wxy.size() - 1); ++i) { + xM.emplace_back(wxy[i].first); + yM.emplace_back(wxy[i].second); + } + std::vector zw = {-0.5 * thick_, 0.5 * thick_}; + std::vector zx(2, 0), zy(2, 0), scale(2, 1.0); + DDSolid solid = DDSolidFactory::extrudedpolygon(mother, xM, yM, zw, zx, zy, scale); + DDName matName(DDSplit(material_).first, DDSplit(material_).second); + DDMaterial matter(matName); + DDLogicalPart glogM = DDLogicalPart(solid.ddname(), matter, solid); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: " << solid.name() << " extruded polygon made of " << matName + << " z|x|y|s (0) " << zw[0] << ":" << zx[0] << ":" << zy[0] << ":" << scale[0] + << " z|x|y|s (1) " << zw[1] << ":" << zx[1] << ":" << zy[1] << ":" << scale[1] + << " partial " << partialTypes_[k] << " orientation " << orientations_[k] << " and " + << xM.size() << " edges"; + for (unsigned int j = 0; j < xM.size(); ++j) + edm::LogVerbatim("HGCalGeom") << "[" << j << "] " << xM[j] << ":" << yM[j]; +#endif + + // Then the layers + wxy = HGCalWaferMask::waferXY(partialTypes_[k], orientations_[k], 1, r, R, 0.0, 0.0); + std::vector xL, yL; + for (unsigned int i = 0; i < (wxy.size() - 1); ++i) { + xL.emplace_back(wxy[i].first); + yL.emplace_back(wxy[i].second); + } + std::vector glogs(materials_.size()); + std::vector copyNumber(materials_.size(), 1); + double zi(-0.5 * thick_), thickTot(0.0); + for (unsigned int l = 0; l < layers_.size(); l++) { + unsigned int i = layers_[l]; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP:Layer " << l << ":" << i << " T " << layerThick_[i] << " Copy " + << copyNumber[i]; +#endif + DDRotation rot; + if (copyNumber[i] == 1) { + zw[0] = -0.5 * layerThick_[i]; + zw[1] = 0.5 * layerThick_[i]; + std::string lname = layerNames_[i] + tags_[k]; + solid = DDSolidFactory::extrudedpolygon(lname, xL, yL, zw, zx, zy, scale); + DDName matN(DDSplit(materials_[i]).first, DDSplit(materials_[i]).second); + DDMaterial matter(matN); + glogs[i] = DDLogicalPart(solid.ddname(), matter, solid); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: " << solid.name() << " extruded polygon made of " << matN + << " z|x|y|s (0) " << zw[0] << ":" << zx[0] << ":" << zy[0] << ":" << scale[0] + << " z|x|y|s (1) " << zw[1] << ":" << zx[1] << ":" << zy[1] << ":" << scale[1] + << " partial " << partialTypes_[k] << " orientation " << orientations_[k] + << " and " << xL.size() << " edges"; + for (unsigned int j = 0; j < xL.size(); ++j) + edm::LogVerbatim("HGCalGeom") << "[" << j << "] " << xL[j] << ":" << yL[j]; +#endif + if (layerType_[i] > 0) { + std::string sname = senseName_ + tags_[k]; + zw[0] = -0.5 * senseT_; + zw[1] = 0.5 * senseT_; + solid = DDSolidFactory::extrudedpolygon(sname, xL, yL, zw, zx, zy, scale); + DDLogicalPart glog = DDLogicalPart(solid.ddname(), matter, solid); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: " << solid.name() << " extruded polygon made of " << matN + << " z|x|y|s (0) " << zw[0] << ":" << zx[0] << ":" << zy[0] << ":" << scale[0] + << " z|x|y|s (1) " << zw[1] << ":" << zx[1] << ":" << zy[1] << ":" << scale[1] + << " partial " << partialTypes_[k] << " orientation " << orientations_[k] + << " and " << xL.size() << " edges"; + for (unsigned int j = 0; j < xL.size(); ++j) + edm::LogVerbatim("HGCalGeom") << "[" << j << "] " << xL[j] << ":" << yL[j]; +#endif + double zpos = (posSense_ == 0) ? -0.5 * (layerThick_[i] - senseT_) : 0.5 * (layerThick_[i] - senseT_); + DDTranslation tran(0, 0, zpos); + int copy = 10 + senseType_; + cpv.position(glog, glogs[i], copy, tran, rot); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: " << glog.name() << " number " << copy << " positioned in " + << glogs[i].name() << " at " << tran << " with no rotation"; +#endif + } + } + DDTranslation tran0(0, 0, (zi + 0.5 * layerThick_[i])); + cpv.position(glogs[i], glogM, copyNumber[i], tran0, rot); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: " << glogs[i].name() << " number " << copyNumber[i] + << " positioned in " << glogM.name() << " at " << tran0 << " with no rotation"; +#endif + ++copyNumber[i]; + zi += layerThick_[i]; + thickTot += layerThick_[i]; + } + if (std::abs(thickTot - thick_) >= tol) { + if (thickTot > thick_) { + edm::LogError("HGCalGeom") << "Thickness of the partition " << thick_ << " is smaller than " << thickTot + << ": thickness of all its components **** ERROR ****"; + } else { + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << thick_ << " does not match with " << thickTot + << " of the components"; + } + } + } +} + +DEFINE_EDM_PLUGIN(DDAlgorithmFactory, DDHGCalWaferP, "hgcal:DDHGCalWaferP"); diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDAHcalModuleAlgo.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDAHcalModuleAlgo.cc index 3208df17fc5a5..58e6292436e8d 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDAHcalModuleAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDAHcalModuleAlgo.cc @@ -4,21 +4,21 @@ * Created on: 27-August-2019 * Author: Sunanda Banerjee */ - -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DD4hep/DetFactoryHelper.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" #include "Geometry/HGCalCommonData/interface/AHCalParameters.h" //#define EDM_ML_DEBUG -using namespace cms_units::operators; +using namespace angle_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); cms::DDAlgoArguments args(ctxt, e); - static constexpr double tol = 0.00001; + static constexpr double tol = 0.00001 * dd4hep::mm; const auto& tile = args.value("TileName"); // Scintillator tile const auto& materials = args.value >("MaterialNames"); // Materials @@ -30,8 +30,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: Tile " << tile; edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << materials.size() << " types of volumes"; for (unsigned int i = 0; i < names.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names[i] << " of thickness " << thick[i] - << " filled with " << materials[i] << " first copy number " << copyNumber[i]; + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names[i] << " of thickness " + << cms::convert2mm(thick[i]) << " filled with " << materials[i] + << " first copy number " << copyNumber[i]; #endif const auto& layers = args.value >("Layers"); // Number of layers in a section const auto& layerThick = args.value >("LayerThick"); // Thickness of each section @@ -40,8 +41,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << layers.size() << " blocks"; for (unsigned int i = 0; i < layers.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << layerThick[i] << " with " << layers[i] - << " layers"; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << cms::convert2mm(layerThick[i]) << " with " + << layers[i] << " layers"; edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << layerType.size() << " layers"; for (unsigned int i = 0; i < layerType.size(); ++i) edm::LogVerbatim("HGCalGeom") << "Layer [" << i << "] with material type " << layerType[i] << " sensitive class " @@ -55,14 +56,16 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << widths.size() << " sizes for width " << "and height:"; for (unsigned int i = 0; i < widths.size(); ++i) - edm::LogVerbatim("HGCalGeom") << " [" << i << "] " << widths[i] << ":" << heights[i]; + edm::LogVerbatim("HGCalGeom") << " [" << i << "] " << cms::convert2mm(widths[i]) << ":" + << cms::convert2mm(heights[i]); edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << tileN.size() << " tile positioning parameters"; for (unsigned int i = 0; i < tileN.size(); ++i) - edm::LogVerbatim("HGCalGeom") << " [" << i << "] " << tileN[i] << ":" << tileStep[i]; + edm::LogVerbatim("HGCalGeom") << " [" << i << "] " << tileN[i] << ":" << cms::convert2mm(tileStep[i]); #endif const auto& zMinBlock = args.value("zMinBlock"); // Starting z-value of the block #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: zStart " << zMinBlock << " NameSpace " << ns.name(); + edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: zStart " << cms::convert2mm(zMinBlock) << " NameSpace " + << ns.name(); #endif // Mother module @@ -83,8 +86,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext std::string name = "HGCal" + names[ii] + std::to_string(copy); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo test: Layer " << ly << ":" << ii << " Front " << zi - << " Back " << zo << " superlayer thickness " << layerThick[i]; + edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo test: Layer " << ly << ":" << ii << " Front " + << cms::convert2mm(zi) << " Back " << cms::convert2mm(zo) + << " superlayer thickness " << cms::convert2mm(layerThick[i]); #endif dd4hep::Material matter = ns.material(materials[ii]); dd4hep::Volume glog; @@ -94,8 +98,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext glog = dd4hep::Volume(solid.name(), solid, matter); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << solid.name() << " Box made of " << materials[ii] - << " of dimensions " << 0.5 * widths[0] << ", " << 0.5 * heights[0] << ", " - << 0.5 * thick[ii]; + << " of dimensions " << cms::convert2mm(0.5 * widths[0]) << ", " + << cms::convert2mm(0.5 * heights[0]) << ", " << cms::convert2mm(0.5 * thick[ii]); #endif } else { dd4hep::Solid solid = dd4hep::Box(0.5 * widths[1], 0.5 * heights[1], 0.5 * thick[ii]); @@ -103,8 +107,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext glog = dd4hep::Volume(solid.name(), solid, matter); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << solid.name() << " Box made of " << materials[ii] - << " of dimensions " << 0.5 * widths[1] << ", " << 0.5 * heights[1] << ", " - << 0.5 * thick[ii]; + << " of dimensions " << cms::convert2mm(0.5 * widths[1]) << ", " + << cms::convert2mm(0.5 * heights[1]) << ", " << cms::convert2mm(0.5 * thick[ii]); #endif int ncol = tileN[0] / 2; int nrow = tileN[1] / 2; @@ -130,8 +134,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext glog.placeVolume(glog1, copy, dd4hep::Transform3D(rotation, tran)); #ifdef EDM_ML_DEBUG kount++; - edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << tile << " number " << copy << " positioned in " - << glog.name() << " at " << tran << " with " << rotation; + edm::LogVerbatim("HGCalGeom") + << "DDAHcalModuleAlgo: " << tile << " number " << copy << " positioned in " << glog.name() << " at (" + << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) << ",0) with no rotation"; #endif } } @@ -145,7 +150,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ++copyNumber[ii]; #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << glog.name() << " number " << copy << " positioned in " - << module.name() << " at " << r1 << " with no rotation"; + << module.name() << " at (0,0," << cms::convert2mm(zz) << ") with no rotation"; #endif zz += (0.5 * thick[ii]); } // End of loop over layers in a block @@ -153,11 +158,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext laymin = laymax; if (fabs(thickTot - layerThick[i]) > tol) { if (thickTot > layerThick[i]) { - edm::LogError("HGCalGeom") << "Thickness of the partition " << layerThick[i] << " is smaller than thickness " - << thickTot << " of all its components **** ERROR ****\n"; + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick[i]) + << " is smaller than thickness " << cms::convert2mm(thickTot) + << " of all its components **** ERROR ****\n"; } else { - edm::LogWarning("HGCalGeom") << "Thickness of the partition " << layerThick[i] << " does not match with " - << thickTot << " of the components\n"; + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick[i]) + << " does not match with " << cms::convert2mm(thickTot) << " of the components\n"; } } } // End of loop over blocks diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalCell.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalCell.cc index c1a5614677b84..2a94abac48d61 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalCell.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalCell.cc @@ -1,5 +1,6 @@ #include "DD4hep/DetFactoryHelper.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" @@ -49,9 +50,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext << cornrCN.size(); } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: Wafer r " << waferSize << " T " << waferT << " Cell T " << cellT - << " Cells/Wafer " << nCells << " Material " << material << "Sensitive Position " - << posSens << " Full Cell: " << fullCN << ":" << fullSensN; + edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: Wafer r " << cms::convert2mm(waferSize) << " T " + << cms::convert2mm(waferT) << " Cell T " << cms::convert2mm(cellT) << " Cells/Wafer " + << nCells << " Material " << material << "Sensitive Position " << posSens + << " Full Cell: " << fullCN << ":" << fullSensN; for (int k = 0; k < 3; ++k) edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: Truncated Cell[" << k << "] " << truncCN[k] << ":" << truncSensN[k]; for (int k = 0; k < 3; ++k) @@ -95,11 +97,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ns.addVolumeNS(glog1); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: " << solid.name() << " extruded polygon made of " << material - << " z|x|y|s (0) " << zw[0] << ":" << zx[0] << ":" << zy[0] << ":" << scale[0] - << " z|x|y|s (1) " << zw[1] << ":" << zx[1] << ":" << zy[1] << ":" << scale[1] - << " and " << xw.size() << " edges"; + << " z|x|y|s (0) " << cms::convert2mm(zw[0]) << ":" << cms::convert2mm(zx[0]) << ":" + << cms::convert2mm(zy[0]) << ":" << scale[0] << " z|x|y|s (1) " + << cms::convert2mm(zw[1]) << ":" << cms::convert2mm(zx[1]) << ":" + << cms::convert2mm(zy[1]) << ":" << scale[1] << " and " << xw.size() << " edges"; for (unsigned int k = 0; k < xw.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << xw[k] << ":" << yw[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << cms::convert2mm(xw[k]) << ":" << cms::convert2mm(yw[k]); #endif std::vector zc = {-0.5 * cellT, 0.5 * cellT}; solid = dd4hep::ExtrudedPolygon(xw, yw, zc, zx, zy, scale); @@ -108,18 +111,19 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ns.addVolumeNS(glog2); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: " << solid.name() << " extruded polygon made of " << material - << " z|x|y|s (0) " << zc[0] << ":" << zx[0] << ":" << zy[0] << ":" << scale[0] - << " z|x|y|s (1) " << zc[1] << ":" << zx[1] << ":" << zy[1] << ":" << scale[1] - << " and " << xw.size() << " edges"; + << " z|x|y|s (0) " << cms::convert2mm(zc[0]) << ":" << cms::convert2mm(zx[0]) << ":" + << cms::convert2mm(zy[0]) << ":" << scale[0] << " z|x|y|s (1) " + << cms::convert2mm(zc[1]) << ":" << cms::convert2mm(zx[1]) << ":" + << cms::convert2mm(zy[1]) << ":" << scale[1] << " and " << xw.size() << " edges"; for (unsigned int k = 0; k < xw.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << xw[k] << ":" << yw[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << cms::convert2mm(xw[k]) << ":" << cms::convert2mm(yw[k]); #endif dd4hep::Rotation3D rotation; glog1.placeVolume(glog2, 1, dd4hep::Transform3D(rotation, tran)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: " << glog2.name() << " number 1 position in " << glog1.name() << " at " - << tran << " with " << rotation; + edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: " << glog2.name() << " number 1 position in " << glog1.name() + << " at (0,0," << cms::convert2mm(zpos) << ") with no rotation"; #endif static const int ir0[] = {0, 1, 0}; @@ -137,11 +141,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ns.addVolumeNS(glog1); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: " << solid.name() << " extruded polygon made of " << material - << " z|x|y|s (0) " << zw[0] << ":" << zx[0] << ":" << zy[0] << ":" << scale[0] - << " z|x|y|s (1) " << zw[1] << ":" << zx[1] << ":" << zy[1] << ":" << scale[1] - << " and " << xw.size() << " edges"; + << " z|x|y|s (0) " << cms::convert2mm(zw[0]) << ":" << cms::convert2mm(zx[0]) << ":" + << cms::convert2mm(zy[0]) << ":" << scale[0] << " z|x|y|s (1) " + << cms::convert2mm(zw[1]) << ":" << cms::convert2mm(zx[1]) << ":" + << cms::convert2mm(zy[1]) << ":" << scale[1] << " and " << xw.size() << " edges"; for (unsigned int k = 0; k < xw.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << xw[k] << ":" << yw[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << cms::convert2mm(xw[k]) << ":" << cms::convert2mm(yw[k]); #endif solid = dd4hep::ExtrudedPolygon(xw, yw, zc, zx, zy, scale); @@ -150,16 +155,17 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ns.addVolumeNS(glog2); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: " << solid.name() << " extruded polygon made of " << material - << " z|x|y|s (0) " << zw[0] << ":" << zx[0] << ":" << zy[0] << ":" << scale[0] - << " z|x|y|s (1) " << zw[1] << ":" << zx[1] << ":" << zy[1] << ":" << scale[1] - << " and " << xw.size() << " edges"; + << " z|x|y|s (0) " << cms::convert2mm(zw[0]) << ":" << cms::convert2mm(zx[0]) << ":" + << cms::convert2mm(zy[0]) << ":" << scale[0] << " z|x|y|s (1) " + << cms::convert2mm(zw[1]) << ":" << cms::convert2mm(zx[1]) << ":" + << cms::convert2mm(zy[1]) << ":" << scale[1] << " and " << xw.size() << " edges"; for (unsigned int k = 0; k < xw.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << xw[k] << ":" << yw[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << cms::convert2mm(xw[k]) << ":" << cms::convert2mm(yw[k]); #endif glog1.placeVolume(glog2, 1, dd4hep::Transform3D(rotation, tran)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: " << glog2.name() << " number 1 position in " << glog1.name() - << " at " << tran << " with " << rotation; + << " at (0,0," << cms::convert2mm(zpos) << ") with no rotation"; #endif } @@ -177,11 +183,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ns.addVolumeNS(glog1); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: " << solid.name() << " extruded polygon made of " << material - << " z|x|y|s (0) " << zw[0] << ":" << zx[0] << ":" << zy[0] << ":" << scale[0] - << " z|x|y|s (1) " << zw[1] << ":" << zx[1] << ":" << zy[1] << ":" << scale[1] - << " and " << xw.size() << " edges"; + << " z|x|y|s (0) " << cms::convert2mm(zw[0]) << ":" << cms::convert2mm(zx[0]) << ":" + << cms::convert2mm(zy[0]) << ":" << scale[0] << " z|x|y|s (1) " + << cms::convert2mm(zw[1]) << ":" << cms::convert2mm(zx[1]) << ":" + << cms::convert2mm(zy[1]) << ":" << scale[1] << " and " << xw.size() << " edges"; for (unsigned int k = 0; k < xw.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << xw[k] << ":" << yw[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << cms::convert2mm(xw[k]) << ":" << cms::convert2mm(yw[k]); #endif solid = dd4hep::ExtrudedPolygon(xw, yw, zc, zx, zy, scale); ns.addSolidNS(ns.prepend(extenSensN[i]), solid); @@ -189,16 +196,17 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ns.addVolumeNS(glog2); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: " << solid.name() << " extruded polygon made of " << material - << " z|x|y|s (0) " << zw[0] << ":" << zx[0] << ":" << zy[0] << ":" << scale[0] - << " z|x|y|s (1) " << zw[1] << ":" << zx[1] << ":" << zy[1] << ":" << scale[1] - << " and " << xw.size() << " edges"; + << " z|x|y|s (0) " << cms::convert2mm(zw[0]) << ":" << cms::convert2mm(zx[0]) << ":" + << cms::convert2mm(zy[0]) << ":" << scale[0] << " z|x|y|s (1) " + << cms::convert2mm(zw[1]) << ":" << cms::convert2mm(zx[1]) << ":" + << cms::convert2mm(zy[1]) << ":" << scale[1] << " and " << xw.size() << " edges"; for (unsigned int k = 0; k < xw.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << xw[k] << ":" << yw[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << cms::convert2mm(xw[k]) << ":" << cms::convert2mm(yw[k]); #endif glog1.placeVolume(glog2, 1, dd4hep::Transform3D(rotation, tran)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: " << glog2.name() << " number 1 position in " << glog1.name() - << " at " << tran << " with " << rotation; + << " at (0,0," << cms::convert2mm(zpos) << " with no rotation"; #endif } @@ -216,11 +224,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ns.addVolumeNS(glog1); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: " << solid.name() << " extruded polygon made of " << material - << " z|x|y|s (0) " << zw[0] << ":" << zx[0] << ":" << zy[0] << ":" << scale[0] - << " z|x|y|s (1) " << zw[1] << ":" << zx[1] << ":" << zy[1] << ":" << scale[1] - << " and " << xw.size() << " edges"; + << " z|x|y|s (0) " << cms::convert2mm(zw[0]) << ":" << cms::convert2mm(zx[0]) << ":" + << cms::convert2mm(zy[0]) << ":" << scale[0] << " z|x|y|s (1) " + << cms::convert2mm(zw[1]) << ":" << cms::convert2mm(zx[1]) << ":" + << cms::convert2mm(zy[1]) << ":" << scale[1] << " and " << xw.size() << " edges"; for (unsigned int k = 0; k < xw.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << xw[k] << ":" << yw[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << cms::convert2mm(xw[k]) << ":" << cms::convert2mm(yw[k]); #endif solid = dd4hep::ExtrudedPolygon(xw, yw, zc, zx, zy, scale); ns.addSolidNS(ns.prepend(cornrSensN[i]), solid); @@ -228,16 +237,17 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ns.addVolumeNS(glog2); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: " << solid.name() << " extruded polygon made of " << material - << " z|x|y|s (0) " << zw[0] << ":" << zx[0] << ":" << zy[0] << ":" << scale[0] - << " z|x|y|s (1) " << zw[1] << ":" << zx[1] << ":" << zy[1] << ":" << scale[1] - << " and " << xw.size() << " edges"; + << " z|x|y|s (0) " << cms::convert2mm(zw[0]) << ":" << cms::convert2mm(zx[0]) << ":" + << cms::convert2mm(zy[0]) << ":" << scale[0] << " z|x|y|s (1) " + << cms::convert2mm(zw[1]) << ":" << cms::convert2mm(zx[1]) << ":" + << cms::convert2mm(zy[1]) << ":" << scale[1] << " and " << xw.size() << " edges"; for (unsigned int k = 0; k < xw.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << xw[k] << ":" << yw[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << cms::convert2mm(xw[k]) << ":" << cms::convert2mm(yw[k]); #endif glog1.placeVolume(glog2, 1, dd4hep::Transform3D(rotation, tran)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: " << glog2.name() << " number 1 position in " << glog1.name() - << " at " << tran << " with " << rotation; + << " at (0,0," << cms::convert2mm(zpos) << " with no rotation"; #endif } return cms::s_executed; diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalEEAlgo.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalEEAlgo.cc index 8e05355572400..1407bdc3431f1 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalEEAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalEEAlgo.cc @@ -14,8 +14,9 @@ #include #include "DD4hep/DetFactoryHelper.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h" #include "Geometry/HGCalCommonData/interface/HGCalParameters.h" @@ -23,7 +24,7 @@ #include "Geometry/HGCalCommonData/interface/HGCalWaferType.h" //#define EDM_ML_DEBUG -using namespace cms_units::operators; +using namespace angle_units::operators; struct HGCalEEAlgo { HGCalGeomTools geomTools_; @@ -83,8 +84,9 @@ struct HGCalEEAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalEEAlgo: " << materials_.size() << " types of volumes"; for (unsigned int i = 0; i < names_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names_[i] << " of thickness " << thick_[i] - << " filled with " << materials_[i] << " first copy number " << copyNumber_[i]; + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names_[i] << " of thickness " + << cms::convert2mm(thick_[i]) << " filled with " << materials_[i] + << " first copy number " << copyNumber_[i]; #endif layers_ = args.value>("Layers"); @@ -92,8 +94,8 @@ struct HGCalEEAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "There are " << layers_.size() << " blocks"; for (unsigned int i = 0; i < layers_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << layerThick_[i] << " with " << layers_[i] - << " layers"; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << cms::convert2mm(layerThick_[i]) + << " with " << layers_[i] << " layers"; #endif layerType_ = args.value>("LayerType"); @@ -145,11 +147,12 @@ struct HGCalEEAlgo { alpha_ = (1._pi) / sectors_; cosAlpha_ = cos(alpha_); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "zStart " << zMinBlock_ << " radius for wafer type separation uses " - << rad100to200_.size() << " parameters; zmin " << zMinRadPar_ << " cutoff " - << choiceType_ << ":" << nCutRadPar_ << ":" << fracAreaMin_ << " wafer width " - << waferSize_ << " separations " << waferSepar_ << " sectors " << sectors_ << ":" - << convertRadToDeg(alpha_) << ":" << cosAlpha_; + edm::LogVerbatim("HGCalGeom") << "zStart " << cms::convert2mm(zMinBlock_) + << " radius for wafer type separation uses " << rad100to200_.size() + << " parameters; zmin " << cms::convert2mm(zMinRadPar_) << " cutoff " << choiceType_ + << ":" << nCutRadPar_ << ":" << fracAreaMin_ << " wafer width " + << cms::convert2mm(waferSize_) << " separations " << cms::convert2mm(waferSepar_) + << " sectors " << sectors_ << ":" << convertRadToDeg(alpha_) << ":" << cosAlpha_; for (unsigned int k = 0; k < rad100to200_.size(); ++k) edm::LogVerbatim("HGCalGeom") << "[" << k << "] 100-200 " << rad100to200_[k] << " 200-300 " << rad200to300_[k]; #endif @@ -162,19 +165,24 @@ struct HGCalEEAlgo { rMaxFront_ = args.value>("RMaxFront"); #ifdef EDM_ML_DEBUG for (unsigned int i = 0; i < slopeB_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << zFrontB_[i] << " Rmin " << rMinFront_[i] - << " Slope " << slopeB_[i]; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << cms::convert2mm(zFrontB_[i]) << " Rmin " + << cms::convert2mm(rMinFront_[i]) << " Slope " << slopeB_[i]; for (unsigned int i = 0; i < slopeT_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << zFrontT_[i] << " Rmax " << rMaxFront_[i] - << " Slope " << slopeT_[i]; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << cms::convert2mm(zFrontT_[i]) << " Rmax " + << cms::convert2mm(rMaxFront_[i]) << " Slope " << slopeT_[i]; #endif #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalEEAlgo: NameSpace " << ns.name(); #endif - waferType_ = std::make_unique( - rad100to200_, rad200to300_, (waferSize_ + waferSepar_), zMinRadPar_, choiceType_, nCutRadPar_, fracAreaMin_); + waferType_ = std::make_unique(rad100to200_, + rad200to300_, + cms::convert2mm((waferSize_ + waferSepar_)), + cms::convert2mm(zMinRadPar_), + choiceType_, + nCutRadPar_, + fracAreaMin_); ConstructAlgo(ctxt, e); } @@ -198,8 +206,8 @@ struct HGCalEEAlgo { } void ConstructLayers(const dd4hep::Volume module, cms::DDParsingContext& ctxt, xml_h e) { - static constexpr double tol1 = 0.01; - static constexpr double tol2 = 0.00001; + static constexpr double tol1 = 0.01 * dd4hep::mm; + static constexpr double tol2 = 0.00001 * dd4hep::mm; cms::DDNamespace ns(ctxt, e, true); #ifdef EDM_ML_DEBUG @@ -224,8 +232,10 @@ struct HGCalEEAlgo { std::string name = ns.prepend(names_[ii]) + std::to_string(copy); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalEEAlgo: Layer " << ly << ":" << ii << " Front " << zi << ", " << routF - << " Back " << zo << ", " << rinB << " superlayer thickness " << layerThick_[i]; + edm::LogVerbatim("HGCalGeom") << "DDHGCalEEAlgo: Layer " << ly << ":" << ii << " Front " << cms::convert2mm(zi) + << ", " << cms::convert2mm(routF) << " Back " << cms::convert2mm(zo) << ", " + << cms::convert2mm(rinB) << " superlayer thickness " + << cms::convert2mm(layerThick_[i]); #endif std::string matName = materials_[ii]; @@ -255,11 +265,11 @@ struct HGCalEEAlgo { pgonRin, pgonRout); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalEEAlgo: z " << (zz - hthick) << ":" << (zz + hthick) << " with " - << pgonZ.size() << " palnes"; + edm::LogVerbatim("HGCalGeom") << "DDHGCalEEAlgo: z " << cms::convert2mm((zz - hthick)) << ":" + << cms::convert2mm((zz + hthick)) << " with " << pgonZ.size() << " palnes"; for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) - edm::LogVerbatim("HGCalGeom") - << "[" << isec << "] z " << pgonZ[isec] << " R " << pgonRin[isec] << ":" << pgonRout[isec]; + edm::LogVerbatim("HGCalGeom") << "[" << isec << "] z " << cms::convert2mm(pgonZ[isec]) << " R " + << cms::convert2mm(pgonRin[isec]) << ":" << cms::convert2mm(pgonRout[isec]); #endif for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) { pgonZ[isec] -= zz; @@ -267,8 +277,7 @@ struct HGCalEEAlgo { } } - dd4hep::Solid solid = - dd4hep::Polyhedra(sectors_, -alpha_, 2. * cms_units::piRadians, pgonZ, pgonRin, pgonRout); + dd4hep::Solid solid = dd4hep::Polyhedra(sectors_, -alpha_, 2._pi, pgonZ, pgonRin, pgonRout); ns.addSolidNS(ns.prepend(name), solid); glog = dd4hep::Volume(solid.name(), solid, matter); ns.addVolumeNS(glog); @@ -280,8 +289,8 @@ struct HGCalEEAlgo { << " sections and filled with " << matName; for (unsigned int k = 0; k < pgonZ.size(); ++k) - edm::LogVerbatim("HGCalGeom") - << "[" << k << "] z " << pgonZ[k] << " R " << pgonRin[k] << ":" << pgonRout[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << cms::convert2mm(pgonZ[k]) << " R " + << cms::convert2mm(pgonRin[k]) << ":" << cms::convert2mm(pgonRout[k]); #endif } else { double rins = @@ -295,9 +304,10 @@ struct HGCalEEAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: " << solid.name() << " Tubs made of " << matter.name() - << " of dimensions " << rinB << ":" << rins << ", " << routF << ":" << routs - << ", " << hthick << ", 0.0, 360.0 and position " << glog.name() << " number " - << copy << ":" << layerCenter_[copy - firstLayer_]; + << " of dimensions " << cms::convert2mm(rinB) << ":" << cms::convert2mm(rins) + << ", " << cms::convert2mm(routF) << ":" << cms::convert2mm(routs) << ", " + << cms::convert2mm(hthick) << ", 0.0, 360.0 and position " << glog.name() + << " number " << copy << ":" << layerCenter_[copy - firstLayer_]; #endif PositionSensitive( ctxt, e, glog, rins, routs, zz, layerSense_[ly], layerCenter_[copy - firstLayer_]); //, cpv); @@ -309,7 +319,7 @@ struct HGCalEEAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalEEAlgo: " << glog.name() << " number " << copy << " positioned in " - << module.name() << " at " << r1 << " with no rotation"; + << module.name() << " at (0,0," << cms::convert2mm(zz) << ") with no rotation"; #endif zz += hthick; } // End of loop over layers in a block @@ -317,11 +327,12 @@ struct HGCalEEAlgo { laymin = laymax; if (std::abs(thickTot - layerThick_[i]) >= tol2) { if (thickTot > layerThick_[i]) { - edm::LogError("HGCalGeom") << "Thickness of the partition " << layerThick_[i] << " is smaller than " - << thickTot << ": thickness of all its components **** ERROR ****"; + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick_[i]) + << " is smaller than " << cms::convert2mm(thickTot) + << ": thickness of all its components **** ERROR ****"; } else { - edm::LogWarning("HGCalGeom") << "Thickness of the partition " << layerThick_[i] << " does not match with " - << thickTot << " of the components"; + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick_[i]) + << " does not match with " << cms::convert2mm(thickTot) << " of the components"; } } @@ -346,9 +357,11 @@ struct HGCalEEAlgo { #ifdef EDM_ML_DEBUG int ium(0), ivm(0), iumAll(0), ivmAll(0), kount(0), ntot(0), nin(0); std::vector ntype(6, 0); - edm::LogVerbatim("HGCalGeom") << "DDHGCalEEAlgo: " << glog.name() << " rout " << rout << " N " << N - << " for maximum u, v; r " << r << " R " << R << " dy " << dy << " Shift " - << xyoff.first << ":" << xyoff.second << " WaferSize " << (waferSize_ + waferSepar_); + edm::LogVerbatim("HGCalGeom") << "DDHGCalEEAlgo: " << glog.name() << " rout " << cms::convert2mm(rout) << " N " << N + << " for maximum u, v; r " << cms::convert2mm(r) << " R " << cms::convert2mm(R) + << " dy " << cms::convert2mm(dy) << " Shift " << cms::convert2mm(xyoff.first) << ":" + << cms::convert2mm(xyoff.second) << " WaferSize " + << cms::convert2mm((waferSize_ + waferSepar_)); #endif for (int u = -N; u <= N; ++u) { @@ -363,13 +376,14 @@ struct HGCalEEAlgo { int iv = std::abs(v); ++ntot; if (((corner.first <= 0) && std::abs(u) < 5 && std::abs(v) < 5) || (std::abs(u) < 2 && std::abs(v) < 2)) { - edm::LogVerbatim("HGCalGeom") << "DDHGCalEEAlgo: " << glog.name() << " R " << rin << ":" << rout << "\n Z " - << zpos << " LayerType " << layertype << " u " << u << " v " << v << " with " - << corner.first << " corners"; + edm::LogVerbatim("HGCalGeom") << "DDHGCalEEAlgo: " << glog.name() << " R " << cms::convert2mm(rin) << ":" + << cms::convert2mm(rout) << "\n Z " << cms::convert2mm(zpos) << " LayerType " + << layertype << " u " << u << " v " << v << " with " << corner.first + << " corners"; } #endif if (corner.first > 0) { - int type = waferType_->getType(xpos, ypos, zpos); + int type = waferType_->getType(cms::convert2mm(xpos), cms::convert2mm(ypos), cms::convert2mm(zpos)); int copy = HGCalTypes::packTypeUV(type, u, v); #ifdef EDM_ML_DEBUG if (iu > ium) @@ -395,8 +409,9 @@ struct HGCalEEAlgo { glog.placeVolume(ns.volume(wafers_[type]), copy, tran); #ifdef EDM_ML_DEBUG ++ntype[type]; - edm::LogVerbatim("HGCalGeom") << " DDHGCalEEAlgo: " << wafers_[type] << " number " << copy - << " positioned in " << glog.name() << " at " << tran << " with no rotation"; + edm::LogVerbatim("HGCalGeom") + << " DDHGCalEEAlgo: " << wafers_[type] << " number " << copy << " positioned in " << glog.name() + << " at (" << cms::convert2mm(xpos) << ", " << cms::convert2mm(ypos) << ",0) with no rotation"; #endif } } @@ -407,8 +422,8 @@ struct HGCalEEAlgo { edm::LogVerbatim("HGCalGeom") << " DDHGCalEEAlgo: Maximum # of u " << ium << ":" << iumAll << " # of v " << ivm << ":" << ivmAll << " and " << nin << ":" << kount << ":" << ntot << " wafers (" << ntype[0] << ":" << ntype[1] << ":" << ntype[2] << ":" << ntype[3] << ":" - << ntype[4] << ":" << ntype[5] << ") for " << glog.name() << " R " << rin << ":" - << rout; + << ntype[4] << ":" << ntype[5] << ") for " << glog.name() << " R " + << cms::convert2mm(rin) << ":" << cms::convert2mm(rout); #endif } }; diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalEEFileAlgo.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalEEFileAlgo.cc index 1ffc2fdfda36c..85889d6090eb4 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalEEFileAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalEEFileAlgo.cc @@ -9,18 +9,20 @@ #include #include -#include "Geometry/HGCalCommonData/interface/HGCalParameters.h" #include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h" +#include "Geometry/HGCalCommonData/interface/HGCalParameters.h" +#include "Geometry/HGCalCommonData/interface/HGCalProperty.h" #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" #include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" #include "Geometry/HGCalCommonData/interface/HGCalWaferType.h" #include "DD4hep/DetFactoryHelper.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" //#define EDM_ML_DEBUG -using namespace cms_units::operators; +using namespace angle_units::operators; struct HGCalEEFileAlgo { HGCalEEFileAlgo() { throw cms::Exception("HGCalGeom") << "Wrong initialization to HGCalEEFileAlgo"; } @@ -31,8 +33,8 @@ struct HGCalEEFileAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: Creating an instance"; #endif - static constexpr double tol1 = 0.01; - static constexpr double tol2 = 0.00001; + static constexpr double tol1 = 0.01 * dd4hep::mm; + static constexpr double tol2 = 0.00001 * dd4hep::mm; dd4hep::Volume mother = ns.volume(args.parentName()); wafers_ = args.value>("WaferNames"); @@ -48,16 +50,17 @@ struct HGCalEEFileAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: " << materials_.size() << " types of volumes"; for (unsigned int i = 0; i < names_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names_[i] << " of thickness " << thick_[i] - << " filled with " << materials_[i] << " first copy number " << copyNumber_[i]; + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names_[i] << " of thickness " + << cms::convert2mm(thick_[i]) << " filled with " << materials_[i] + << " first copy number " << copyNumber_[i]; #endif layers_ = args.value>("Layers"); layerThick_ = args.value>("LayerThick"); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "There are " << layers_.size() << " blocks"; for (unsigned int i = 0; i < layers_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << layerThick_[i] << " with " << layers_[i] - << " layers"; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << cms::convert2mm(layerThick_[i]) + << " with " << layers_[i] << " layers"; #endif layerType_ = args.value>("LayerType"); layerSense_ = args.value>("LayerSense"); @@ -95,35 +98,28 @@ struct HGCalEEFileAlgo { << layerSense_[i]; #endif zMinBlock_ = args.value("zMinBlock"); - rad100to200_ = args.value>("rad100to200"); - rad200to300_ = args.value>("rad200to300"); - zMinRadPar_ = args.value("zMinForRadPar"); - choiceType_ = args.value("choiceType"); - nCutRadPar_ = args.value("nCornerCut"); - fracAreaMin_ = args.value("fracAreaMin"); waferSize_ = args.value("waferSize"); waferSepar_ = args.value("SensorSeparation"); sectors_ = args.value("Sectors"); alpha_ = (1._pi) / sectors_; cosAlpha_ = cos(alpha_); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "zStart " << zMinBlock_ << " radius for wafer type separation uses " - << rad100to200_.size() << " parameters; zmin " << zMinRadPar_ << " cutoff " - << choiceType_ << ":" << nCutRadPar_ << ":" << fracAreaMin_ << " wafer width " - << waferSize_ << " separations " << waferSepar_ << " sectors " << sectors_ << ":" - << convertRadToDeg(alpha_) << ":" << cosAlpha_; - for (unsigned int k = 0; k < rad100to200_.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] 100-200 " << rad100to200_[k] << " 200-300 " << rad200to300_[k]; + edm::LogVerbatim("HGCalGeom") << "zStart " << cms::convert2mm(zMinBlock_) << " wafer width " + << cms::convert2mm(waferSize_) << " separations " << cms::convert2mm(waferSepar_) + << " sectors " << sectors_ << ":" << convertRadToDeg(alpha_) << ":" << cosAlpha_; #endif waferIndex_ = args.value>("WaferIndex"); - waferTypes_ = args.value>("WaferTypes"); + waferProperty_ = args.value>("WaferProperties"); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "waferTypes with " << waferTypes_.size() << " entries"; - for (unsigned int k = 0; k < waferTypes_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "waferProperties with " << waferIndex_.size() << " entries"; + for (unsigned int k = 0; k < waferIndex_.size(); ++k) edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << waferIndex_[k] << " (" << HGCalWaferIndex::waferLayer(waferIndex_[k]) << ", " << HGCalWaferIndex::waferU(waferIndex_[k]) << ", " - << HGCalWaferIndex::waferV(waferIndex_[k]) << ") : " << waferTypes_[k]; + << HGCalWaferIndex::waferV(waferIndex_[k]) << ") : (" + << HGCalProperty::waferThick(waferProperty_[k]) << ":" + << HGCalProperty::waferPartial(waferProperty_[k]) << ":" + << HGCalProperty::waferOrient(waferProperty_[k]) << ")"; #endif slopeB_ = args.value>("SlopeBottom"); zFrontB_ = args.value>("ZFrontBottom"); @@ -133,11 +129,11 @@ struct HGCalEEFileAlgo { rMaxFront_ = args.value>("RMaxFront"); #ifdef EDM_ML_DEBUG for (unsigned int i = 0; i < slopeB_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << zFrontB_[i] << " Rmin " << rMinFront_[i] - << " Slope " << slopeB_[i]; + edm::LogVerbatim("HGCalGeom") << "Bottom Block [" << i << "] Zmin " << cms::convert2mm(zFrontB_[i]) << " Rmin " + << cms::convert2mm(rMinFront_[i]) << " Slope " << slopeB_[i]; for (unsigned int i = 0; i < slopeT_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << zFrontT_[i] << " Rmax " << rMaxFront_[i] - << " Slope " << slopeT_[i]; + edm::LogVerbatim("HGCalGeom") << "Top Block [" << i << "] Zmin " << cms::convert2mm(zFrontT_[i]) << " Rmax " + << cms::convert2mm(rMaxFront_[i]) << " Slope " << slopeT_[i]; edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: NameSpace " << ns.name(); #endif @@ -164,9 +160,10 @@ struct HGCalEEFileAlgo { std::string name = names_[ii] + std::to_string(copy); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: Layer " << ly << ":" << ii << " Front " << zi << ", " - << routF << " Back " << zo << ", " << rinB << " superlayer thickness " - << layerThick_[i]; + edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: Layer " << ly << ":" << ii << " Front " + << cms::convert2mm(zi) << ", " << cms::convert2mm(routF) << " Back " + << cms::convert2mm(zo) << ", " << cms::convert2mm(rinB) + << " superlayer thickness " << cms::convert2mm(layerThick_[i]); #endif dd4hep::Material matter = ns.material(materials_[ii]); @@ -174,38 +171,25 @@ struct HGCalEEFileAlgo { if (layerSense_[ly] < 1) { std::vector pgonZ, pgonRin, pgonRout; - if (layerSense_[ly] == 0 || absorbMode_ == 0) { - double rmax = routF * cosAlpha_ - tol1; - pgonZ.emplace_back(-hthick); - pgonZ.emplace_back(hthick); - pgonRin.emplace_back(rinB); - pgonRin.emplace_back(rinB); - pgonRout.emplace_back(rmax); - pgonRout.emplace_back(rmax); - } else { - HGCalGeomTools::radius(zz - hthick, - zz + hthick, - zFrontB_, - rMinFront_, - slopeB_, - zFrontT_, - rMaxFront_, - slopeT_, - -layerSense_[ly], - pgonZ, - pgonRin, - pgonRout); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: z " << (zz - hthick) << ":" << (zz + hthick) - << " with " << pgonZ.size() << " palnes"; - for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) - edm::LogVerbatim("HGCalGeom") - << "[" << isec << "] z " << pgonZ[isec] << " R " << pgonRin[isec] << ":" << pgonRout[isec]; -#endif - for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) { - pgonZ[isec] -= zz; + double rmax = routF * cosAlpha_ - tol1; + HGCalGeomTools::radius(zz - hthick, + zz + hthick, + zFrontB_, + rMinFront_, + slopeB_, + zFrontT_, + rMaxFront_, + slopeT_, + -layerSense_[ly], + pgonZ, + pgonRin, + pgonRout); + for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) { + pgonZ[isec] -= zz; + if (layerSense_[ly] == 0 || absorbMode_ == 0) + pgonRout[isec] = rmax; + else pgonRout[isec] = pgonRout[isec] * cosAlpha_ - tol1; - } } dd4hep::Solid solid = dd4hep::Polyhedra(sectors_, -alpha_, 2._pi, pgonZ, pgonRin, pgonRout); ns.addSolidNS(ns.prepend(name), solid); @@ -217,8 +201,8 @@ struct HGCalEEFileAlgo { << convertRadToDeg(-alpha_ + 2._pi) << " with " << pgonZ.size() << " sections and filled with " << matter.name(); for (unsigned int k = 0; k < pgonZ.size(); ++k) - edm::LogVerbatim("HGCalGeom") - << "[" << k << "] z " << pgonZ[k] << " R " << pgonRin[k] << ":" << pgonRout[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << cms::convert2mm(pgonZ[k]) << " R " + << cms::convert2mm(pgonRin[k]) << ":" << cms::convert2mm(pgonRout[k]); #endif } else { double rins = @@ -232,9 +216,10 @@ struct HGCalEEFileAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: " << solid.name() << " Tubs made of " << matter.name() - << " of dimensions " << rinB << ":" << rins << ", " << routF << ":" << routs - << ", " << hthick << ", 0.0, 360.0 and position " << glog.name() << " number " - << copy << ":" << layerCenter_[copy - firstLayer_]; + << " of dimensions " << cms::convert2mm(rinB) << ":" << cms::convert2mm(rins) + << ", " << cms::convert2mm(routF) << ":" << cms::convert2mm(routs) << ", " + << cms::convert2mm(hthick) << ", 0.0, 360.0 and position " << glog.name() + << " number " << copy << ":" << layerCenter_[copy - firstLayer_]; #endif positionSensitive(ctxt, e, glog, rins, routs, zz, layerSense_[ly], (copy - firstLayer_)); } @@ -244,7 +229,7 @@ struct HGCalEEFileAlgo { ++copyNumber_[ii]; #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: " << glog.name() << " number " << copy << " positioned in " - << mother.name() << " at " << r1 << " with no rotation"; + << mother.name() << " at (0,0," << cms::convert2mm(zz) << ") with no rotation"; #endif zz += hthick; } // End of loop over layers in a block @@ -253,11 +238,12 @@ struct HGCalEEFileAlgo { // Make consistency check of all the partitions of the block if (std::abs(thickTot - layerThick_[i]) >= tol2) { if (thickTot > layerThick_[i]) { - edm::LogError("HGCalGeom") << "Thickness of the partition " << layerThick_[i] << " is smaller than " - << thickTot << ": thickness of all its components **** ERROR ****"; + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick_[i]) + << " is smaller than " << cms::convert2mm(thickTot) + << ": thickness of all its components **** ERROR ****"; } else { - edm::LogWarning("HGCalGeom") << "Thickness of the partition " << layerThick_[i] << " does not match with " - << thickTot << " of the components"; + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick_[i]) + << " does not match with " << cms::convert2mm(thickTot) << " of the components"; } } } // End of loop over blocks @@ -292,10 +278,12 @@ struct HGCalEEFileAlgo { #ifdef EDM_ML_DEBUG int ium(0), ivm(0), iumAll(0), ivmAll(0), kount(0), ntot(0), nin(0); std::vector ntype(6, 0); - edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: " << glog.name() << " rin:rout " << rin << ":" << rout - << " zpos " << zpos << " N " << N << " for maximum u, v; r " << r << " R " << R - << " dy " << dy << " Shift " << xyoff.first << ":" << xyoff.second << " WaferSize " - << (waferSize_ + waferSepar_); + edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: " << glog.name() << " rin:rout " << cms::convert2mm(rin) << ":" + << cms::convert2mm(rout) << " zpos " << cms::convert2mm(zpos) << " N " << N + << " for maximum u, v; r " << cms::convert2mm(r) << " R " << cms::convert2mm(R) + << " dy " << cms::convert2mm(dy) << " Shift " << cms::convert2mm(xyoff.first) << ":" + << cms::convert2mm(xyoff.second) << " WaferSize " + << cms::convert2mm((waferSize_ + waferSepar_)); #endif for (int u = -N; u <= N; ++u) { for (int v = -N; v <= N; ++v) { @@ -311,17 +299,18 @@ struct HGCalEEFileAlgo { #ifdef EDM_ML_DEBUG ++ntot; if (((corner.first <= 0) && std::abs(u) < 5 && std::abs(v) < 5) || (std::abs(u) < 2 && std::abs(v) < 2)) { - edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: " << glog.name() << " R " << rin << ":" << rout - << "\n Z " << zpos << " LayerType " << layertype << " u " << u << " v " << v - << " with " << corner.first << " corners"; + edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: " << glog.name() << " R " << cms::convert2mm(rin) << ":" + << cms::convert2mm(rout) << "\n Z " << cms::convert2mm(zpos) << " LayerType " + << layertype << " u " << u << " v " << v << " with " << corner.first + << " corners"; } #endif int indx = HGCalWaferIndex::waferIndex((layer + firstLayer_), u, v, false); - int type = HGCalWaferType::getType(indx, waferIndex_, waferTypes_); + int type = HGCalWaferType::getType(indx, waferIndex_, waferProperty_); if (corner.first > 0 && type >= 0) { int copy = HGCalTypes::packTypeUV(type, u, v); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << " DDHGCalHEFileAlgo: " << wafers_[type] << " number " << copy << " type " + edm::LogVerbatim("HGCalGeom") << " DDHGCalEEFileAlgo: " << wafers_[type] << " number " << copy << " type " << type << " layer:u:v:indx " << (layer + firstLayer_) << ":" << u << ":" << v << ":" << indx; if (iu > ium) @@ -348,7 +337,8 @@ struct HGCalEEFileAlgo { ++ntype[type]; edm::LogVerbatim("HGCalGeom") << " DDHGCalEEFileAlgo: " << wafers_[type] << " number " << copy << " type " << layertype << ":" << type - << " positioned in " << glog.name() << " at " << tran << " with no rotation"; + << " positioned in " << glog.name() << " at (" << cms::convert2mm(xpos) << ", " << cms::convert2mm(ypos) + << ", 0) with no rotation"; #endif } } @@ -359,8 +349,8 @@ struct HGCalEEFileAlgo { edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: Maximum # of u " << ium << ":" << iumAll << " # of v " << ivm << ":" << ivmAll << " and " << nin << ":" << kount << ":" << ntot << " wafers (" << ntype[0] << ":" << ntype[1] << ":" << ntype[2] << ":" << ntype[3] << ":" - << ntype[4] << ":" << ntype[5] << ") for " << glog.name() << " R " << rin << ":" - << rout; + << ntype[4] << ":" << ntype[5] << ") for " << glog.name() << " R " + << cms::convert2mm(rin) << ":" << cms::convert2mm(rout); #endif } @@ -381,14 +371,8 @@ struct HGCalEEFileAlgo { int absorbMode_; // Absorber mode int sensitiveMode_; // Sensitive mode double zMinBlock_; // Starting z-value of the block - std::vector rad100to200_; // Parameters for 120-200mum trans. - std::vector rad200to300_; // Parameters for 200-300mum trans. - double zMinRadPar_; // Minimum z for radius parametriz. std::vector waferIndex_; // Wafer index for the types - std::vector waferTypes_; // Wafer types - int choiceType_; // Type of parametrization to be used - int nCutRadPar_; // Cut off threshold for corners - double fracAreaMin_; // Minimum fractional conatined area + std::vector waferProperty_; // Wafer property double waferSize_; // Width of the wafer double waferSepar_; // Sensor separation int sectors_; // Sectors diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalHEAlgo.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalHEAlgo.cc index 6e243f2df63ba..5f6affb3186f6 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalHEAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalHEAlgo.cc @@ -12,8 +12,9 @@ #include #include "DD4hep/DetFactoryHelper.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h" #include "Geometry/HGCalCommonData/interface/HGCalParameters.h" @@ -21,7 +22,7 @@ #include "Geometry/HGCalCommonData/interface/HGCalWaferType.h" //#define EDM_ML_DEBUG -using namespace cms_units::operators; +using namespace angle_units::operators; struct HGCalHEAlgo { HGCalHEAlgo() { throw cms::Exception("HGCalGeom") << "Wrong initialization to HGCalHEAlgo"; } @@ -47,8 +48,9 @@ struct HGCalHEAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << materials_.size() << " types of volumes"; for (unsigned int i = 0; i < volumeNames_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << volumeNames_[i] << " of thickness " << thickness_[i] - << " filled with " << materials_[i] << " first copy number " << copyNumber_[i]; + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << volumeNames_[i] << " of thickness " + << cms::convert2mm(thickness_[i]) << " filled with " << materials_[i] + << " first copy number " << copyNumber_[i]; #endif layerNumbers_ = args.value>("Layers"); layerThick_ = args.value>("LayerThick"); @@ -56,8 +58,9 @@ struct HGCalHEAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "There are " << layerNumbers_.size() << " blocks"; for (unsigned int i = 0; i < layerNumbers_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << layerThick_[i] << " Rmid " - << rMixLayer_[i] << " with " << layerNumbers_[i] << " layers"; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << cms::convert2mm(layerThick_[i]) + << " Rmid " << cms::convert2mm(rMixLayer_[i]) << " with " << layerNumbers_[i] + << " layers"; #endif layerType_ = args.value>("LayerType"); layerSense_ = args.value>("LayerSense"); @@ -100,9 +103,9 @@ struct HGCalHEAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << materialsTop_.size() << " types of volumes in the top part"; for (unsigned int i = 0; i < materialsTop_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << namesTop_[i] << " of thickness " << layerThickTop_[i] - << " filled with " << materialsTop_[i] << " first copy number " - << copyNumberTop_[i]; + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << namesTop_[i] << " of thickness " + << cms::convert2mm(layerThickTop_[i]) << " filled with " << materialsTop_[i] + << " first copy number " << copyNumberTop_[i]; edm::LogVerbatim("HGCalGeom") << "There are " << layerTypeTop_.size() << " layers in the top part"; for (unsigned int i = 0; i < layerTypeTop_.size(); ++i) edm::LogVerbatim("HGCalGeom") << "Layer [" << i << "] with material type " << layerTypeTop_[i]; @@ -117,9 +120,9 @@ struct HGCalHEAlgo { edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << materialsBot_.size() << " types of volumes in the bottom part"; for (unsigned int i = 0; i < materialsBot_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << namesBot_[i] << " of thickness " << layerThickBot_[i] - << " filled with " << materialsBot_[i] << " first copy number " - << copyNumberBot_[i]; + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << namesBot_[i] << " of thickness " + << cms::convert2mm(layerThickBot_[i]) << " filled with " << materialsBot_[i] + << " first copy number " << copyNumberBot_[i]; edm::LogVerbatim("HGCalGeom") << "There are " << layerTypeBot_.size() << " layers in the bottom part"; for (unsigned int i = 0; i < layerTypeBot_.size(); ++i) edm::LogVerbatim("HGCalGeom") << "Layer [" << i << "] with material type " << layerTypeBot_[i] @@ -138,11 +141,12 @@ struct HGCalHEAlgo { alpha_ = (1._pi) / sectors_; cosAlpha_ = cos(alpha_); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: zStart " << zMinBlock_ << " radius for wafer type separation uses " - << rad100to200_.size() << " parameters; zmin " << zMinRadPar_ << " cutoff " - << choiceType_ << ":" << nCutRadPar_ << ":" << fracAreaMin_ << " wafer width " - << waferSize_ << " separations " << waferSepar_ << " sectors " << sectors_ << ":" - << convertRadToDeg(alpha_) << ":" << cosAlpha_; + edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: zStart " << cms::convert2mm(zMinBlock_) + << " radius for wafer type separation uses " << rad100to200_.size() + << " parameters; zmin " << cms::convert2mm(zMinRadPar_) << " cutoff " << choiceType_ + << ":" << nCutRadPar_ << ":" << fracAreaMin_ << " wafer width " + << cms::convert2mm(waferSize_) << " separations " << cms::convert2mm(waferSepar_) + << " sectors " << sectors_ << ":" << convertRadToDeg(alpha_) << ":" << cosAlpha_; for (unsigned int k = 0; k < rad100to200_.size(); ++k) edm::LogVerbatim("HGCalGeom") << "[" << k << "] 100-200 " << rad100to200_[k] << " 200-300 " << rad200to300_[k]; #endif @@ -154,16 +158,21 @@ struct HGCalHEAlgo { rMaxFront_ = args.value>("RMaxFront"); #ifdef EDM_ML_DEBUG for (unsigned int i = 0; i < slopeB_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << zFrontB_[i] << " Rmin " << rMinFront_[i] - << " Slope " << slopeB_[i]; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << cms::convert2mm(zFrontB_[i]) << " Rmin " + << cms::convert2mm(rMinFront_[i]) << " Slope " << slopeB_[i]; for (unsigned int i = 0; i < slopeT_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << zFrontT_[i] << " Rmax " << rMaxFront_[i] - << " Slope " << slopeT_[i]; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << cms::convert2mm(zFrontT_[i]) << " Rmax " + << cms::convert2mm(rMaxFront_[i]) << " Slope " << slopeT_[i]; edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: NameSpace " << ns.name(); #endif - waferType_ = std::make_unique( - rad100to200_, rad200to300_, (waferSize_ + waferSepar_), zMinRadPar_, choiceType_, nCutRadPar_, fracAreaMin_); + waferType_ = std::make_unique(rad100to200_, + rad200to300_, + cms::convert2mm((waferSize_ + waferSepar_)), + cms::convert2mm(zMinRadPar_), + choiceType_, + nCutRadPar_, + fracAreaMin_); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "==>> Constructing DDHGCalHEAlgo..."; @@ -189,8 +198,10 @@ struct HGCalHEAlgo { std::string name = volumeNames_[ii] + std::to_string(copy); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: Layer " << ly << ":" << ii << " Front " << zi << ", " << routF - << " Back " << zo << ", " << rinB << " superlayer thickness " << layerThick_[i]; + edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: Layer " << ly << ":" << ii << " Front " << cms::convert2mm(zi) + << ", " << cms::convert2mm(routF) << " Back " << cms::convert2mm(zo) << ", " + << cms::convert2mm(rinB) << " superlayer thickness " + << cms::convert2mm(layerThick_[i]); #endif dd4hep::Material matter = ns.material(materials_[ii]); @@ -227,8 +238,7 @@ struct HGCalHEAlgo { } } - dd4hep::Solid solid = - dd4hep::Polyhedra(sectors_, -alpha_, 2. * cms_units::piRadians, pgonZ, pgonRin, pgonRout); + dd4hep::Solid solid = dd4hep::Polyhedra(sectors_, -alpha_, 2._pi, pgonZ, pgonRin, pgonRout); ns.addSolidNS(ns.prepend(name), solid); glog = dd4hep::Volume(solid.name(), solid, matter); ns.addVolumeNS(glog); @@ -237,23 +247,24 @@ struct HGCalHEAlgo { << " sectors covering " << convertRadToDeg(-alpha_) << ":" << convertRadToDeg(-alpha_ + 2._pi) << " with " << pgonZ.size() << " sections"; for (unsigned int k = 0; k < pgonZ.size(); ++k) - edm::LogVerbatim("HGCalGeom") - << "[" << k << "] z " << pgonZ[k] << " R " << pgonRin[k] << ":" << pgonRout[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << cms::convert2mm(pgonZ[k]) << " R " + << cms::convert2mm(pgonRin[k]) << ":" << cms::convert2mm(pgonRout[k]); #endif } else { double rins = (sensitiveMode_ < 1) ? rinB : HGCalGeomTools::radius(zz + hthick, zFrontB_, rMinFront_, slopeB_); double routs = (sensitiveMode_ < 1) ? routF : HGCalGeomTools::radius(zz - hthick, zFrontT_, rMaxFront_, slopeT_); - dd4hep::Solid solid = dd4hep::Tube(rins, routs, hthick, 0.0, 2. * cms_units::piRadians); + dd4hep::Solid solid = dd4hep::Tube(rins, routs, hthick, 0.0, 2._pi); ns.addSolidNS(ns.prepend(name), solid); glog = dd4hep::Volume(solid.name(), solid, matter); ns.addVolumeNS(glog); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << solid.name() << " Tubs made of " << matter.name() - << " of dimensions " << rinB << ":" << rins << ", " << routF << ":" << routs - << ", " << hthick << ", 0.0, 360.0 and positioned in: " << glog.name() + << " of dimensions " << cms::convert2mm(rinB) << ":" << cms::convert2mm(rins) + << ", " << cms::convert2mm(routF) << ":" << cms::convert2mm(routs) << ", " + << cms::convert2mm(hthick) << ", 0.0, 360.0 and positioned in: " << glog.name() << " number " << copy; #endif positionMix(ctxt, e, glog, name, copy, thickness_[ii], matter, rins, rMixLayer_[i], routs, zz); @@ -264,7 +275,7 @@ struct HGCalHEAlgo { ++copyNumber_[ii]; #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << glog.name() << " number " << copy << " positioned in " - << mother.name() << " at " << r1 << " with no rotation"; + << mother.name() << " at (0,0," << cms::convert2mm(zz) << ") with no rotation"; #endif zz += hthick; } // End of loop over layers in a block @@ -272,11 +283,12 @@ struct HGCalHEAlgo { laymin = laymax; if (std::abs(thickTot - layerThick_[i]) >= tol2_) { if (thickTot > layerThick_[i]) { - edm::LogError("HGCalGeom") << "Thickness of the partition " << layerThick_[i] << " is smaller than " - << thickTot << ": thickness of all its components **** ERROR ****"; + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick_[i]) + << " is smaller than " << cms::convert2mm(thickTot) + << ": thickness of all its components **** ERROR ****"; } else { - edm::LogWarning("HGCalGeom") << "Thickness of the partition " << layerThick_[i] << " does not match with " - << thickTot << " of the components"; + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick_[i]) + << " does not match with " << cms::convert2mm(thickTot) << " of the components"; } } } // End of loop over blocks @@ -318,19 +330,20 @@ struct HGCalHEAlgo { // Make the top part first std::string name = nameM + "Top"; - dd4hep::Solid solid = dd4hep::Tube(rmid, rout, hthick, 0.0, 2. * cms_units::piRadians); + dd4hep::Solid solid = dd4hep::Tube(rmid, rout, hthick, 0.0, 2._pi); ns.addSolidNS(ns.prepend(name), solid); glog1 = dd4hep::Volume(solid.name(), solid, matter); ns.addVolumeNS(glog1); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << solid.name() << " Tubs made of " << matter.name() - << " of dimensions " << rmid << ", " << rout << ", " << hthick << ", 0.0, 360.0"; + << " of dimensions " << cms::convert2mm(rmid) << ", " << cms::convert2mm(rout) << ", " + << cms::convert2mm(hthick) << ", 0.0, 360.0"; #endif glog.placeVolume(glog1, 1); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << glog1.name() << " number 1 positioned in " << glog.name() - << " at (0, 0, 0) with no rotation"; + << " at (0,0,0) with no rotation"; #endif double thickTot(0), zpos(-hthick); for (unsigned int ly = 0; ly < layerTypeTop_.size(); ++ly) { @@ -340,12 +353,12 @@ struct HGCalHEAlgo { thickTot += layerThickTop_[ii]; name = namesTop_[ii] + std::to_string(copy); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: Layer " << ly << ":" << ii << " R " << rmid << ":" << rout - << " Thick " << layerThickTop_[ii]; + edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: Layer " << ly << ":" << ii << " R " << cms::convert2mm(rmid) + << ":" << cms::convert2mm(rout) << " Thick " << cms::convert2mm(layerThickTop_[ii]); #endif dd4hep::Material matter1 = ns.material(materialsTop_[ii]); - solid = dd4hep::Tube(rmid, rout, hthickl, 0.0, 2. * cms_units::piRadians); + solid = dd4hep::Tube(rmid, rout, hthickl, 0.0, 2._pi); ns.addSolidNS(ns.prepend(name), solid); dd4hep::Volume glog2 = dd4hep::Volume(solid.name(), solid, matter1); ns.addVolumeNS(glog2); @@ -353,10 +366,11 @@ struct HGCalHEAlgo { #ifdef EDM_ML_DEBUG double eta1 = -log(tan(0.5 * atan(rmid / zz))); double eta2 = -log(tan(0.5 * atan(rout / zz))); - edm::LogVerbatim("HGCalGeom") << name << " z|rin|rout " << zz << ":" << rmid << ":" << rout << " eta " << eta1 - << ":" << eta2; + edm::LogVerbatim("HGCalGeom") << name << " z|rin|rout " << cms::convert2mm(zz) << ":" << cms::convert2mm(rmid) + << ":" << cms::convert2mm(rout) << " eta " << eta1 << ":" << eta2; edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << solid.name() << " Tubs made of " << matter1.name() - << " of dimensions " << rmid << ", " << rout << ", " << hthickl << ", 0.0, 360.0"; + << " of dimensions " << cms::convert2mm(rmid) << ", " << cms::convert2mm(rout) + << ", " << cms::convert2mm(hthickl) << ", 0.0, 360.0"; #endif zpos += hthickl; @@ -365,17 +379,19 @@ struct HGCalHEAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: Position " << glog2.name() << " number " << copy << " in " - << glog1.name() << " at " << r1 << " with no rotation"; + << glog1.name() << " at (0,0," << cms::convert2mm(zpos) << ") with no rotation"; #endif ++copyNumberTop_[ii]; zpos += hthickl; } if (std::abs(thickTot - thick) >= tol2_) { if (thickTot > thick) { - edm::LogError("HGCalGeom") << "Thickness of the partition " << thick << " is smaller than " << thickTot + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(thick) << " is smaller than " + << cms::convert2mm(thickTot) << ": thickness of all its components in the top part **** ERROR ****"; } else { - edm::LogWarning("HGCalGeom") << "Thickness of the partition " << thick << " does not match with " << thickTot + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(thick) + << " does not match with " << cms::convert2mm(thickTot) << " of the components in top part"; } } @@ -383,20 +399,21 @@ struct HGCalHEAlgo { // Make the bottom part next name = nameM + "Bottom"; - solid = dd4hep::Tube(rin, rmid, hthick, 0.0, 2. * cms_units::piRadians); + solid = dd4hep::Tube(rin, rmid, hthick, 0.0, 2._pi); ns.addSolidNS(ns.prepend(name), solid); glog1 = dd4hep::Volume(solid.name(), solid, matter); ns.addVolumeNS(glog1); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << solid.name() << " Tubs made of " << matter.name() - << " of dimensions " << rin << ", " << rmid << ", " << hthick << ", 0.0, 360.0"; + << " of dimensions " << cms::convert2mm(rin) << ", " << cms::convert2mm(rmid) << ", " + << cms::convert2mm(hthick) << ", 0.0, 360.0"; #endif glog.placeVolume(glog1, 1); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << glog1.name() << " number 1 positioned in " << glog.name() - << " at (0, 0, 0) with no rotation"; + << " at (0,0,0) with no rotation"; #endif thickTot = 0; zpos = -hthick; @@ -407,12 +424,12 @@ struct HGCalHEAlgo { thickTot += layerThickBot_[ii]; name = namesBot_[ii] + std::to_string(copy); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: Layer " << ly << ":" << ii << " R " << rin << ":" << rmid - << " Thick " << layerThickBot_[ii]; + edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: Layer " << ly << ":" << ii << " R " << cms::convert2mm(rin) + << ":" << cms::convert2mm(rmid) << " Thick " << cms::convert2mm(layerThickBot_[ii]); #endif dd4hep::Material matter1 = ns.material(materialsBot_[ii]); - solid = dd4hep::Tube(rin, rmid, hthickl, 0.0, 2. * cms_units::piRadians); + solid = dd4hep::Tube(rin, rmid, hthickl, 0.0, 2._pi); ns.addSolidNS(ns.prepend(name), solid); dd4hep::Volume glog2 = dd4hep::Volume(solid.name(), solid, matter1); ns.addVolumeNS(glog2); @@ -420,10 +437,11 @@ struct HGCalHEAlgo { #ifdef EDM_ML_DEBUG double eta1 = -log(tan(0.5 * atan(rin / zz))); double eta2 = -log(tan(0.5 * atan(rmid / zz))); - edm::LogVerbatim("HGCalGeom") << name << " z|rin|rout " << zz << ":" << rin << ":" << rmid << " eta " << eta1 - << ":" << eta2; + edm::LogVerbatim("HGCalGeom") << name << " z|rin|rout " << cms::convert2mm(zz) << ":" << cms::convert2mm(rin) + << ":" << cms::convert2mm(rmid) << " eta " << eta1 << ":" << eta2; edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << solid.name() << " Tubs made of " << matter1.name() - << " of dimensions " << rin << ", " << rmid << ", " << hthickl << ", 0.0, 360.0"; + << " of dimensions " << cms::convert2mm(rin) << ", " << cms::convert2mm(rmid) + << ", " << cms::convert2mm(hthickl) << ", 0.0, 360.0"; #endif zpos += hthickl; @@ -431,12 +449,12 @@ struct HGCalHEAlgo { glog1.placeVolume(glog2, copy, r1); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: Position " << glog2.name() << " number " << copy << " in " - << glog1.name() << " at " << r1 << " with no rotation"; + << glog1.name() << " at (0,0," << cms::convert2mm(zpos) << ") with no rotation"; #endif if (layerSenseBot_[ly] != 0) { #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: z " << (zz + zpos) << " Center " << copy << ":" - << (copy - firstLayer_) << ":" << layerCenter_[copy - firstLayer_]; + edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: z " << cms::convert2mm((zz + zpos)) << " Center " << copy + << ":" << (copy - firstLayer_) << ":" << layerCenter_[copy - firstLayer_]; #endif positionSensitive(ctxt, e, glog2, rin, rmid, zz + zpos, layerSenseBot_[ly], layerCenter_[copy - firstLayer_]); } @@ -445,10 +463,12 @@ struct HGCalHEAlgo { } if (std::abs(thickTot - thick) >= tol2_) { if (thickTot > thick) { - edm::LogError("HGCalGeom") << "Thickness of the partition " << thick << " is smaller than " << thickTot + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(thick) << " is smaller than " + << cms::convert2mm(thickTot) << ": thickness of all its components in the top part **** ERROR ****"; } else { - edm::LogWarning("HGCalGeom") << "Thickness of the partition " << thick << " does not match with " << thickTot + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(thick) + << " does not match with " << cms::convert2mm(thickTot) << " of the components in top part"; } } @@ -472,9 +492,10 @@ struct HGCalHEAlgo { #ifdef EDM_ML_DEBUG int ium(0), ivm(0), iumAll(0), ivmAll(0), kount(0), ntot(0), nin(0); std::vector ntype(6, 0); - edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << glog.name() << " rout " << rout << " N " << N - << " for maximum u, v Offset; Shift " << xyoff.first << ":" << xyoff.second - << " WaferSize " << (waferSize_ + waferSepar_); + edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << glog.name() << " rout " << cms::convert2mm(rout) << " N " << N + << " for maximum u, v Offset; Shift " << cms::convert2mm(xyoff.first) << ":" + << cms::convert2mm(xyoff.second) << " WaferSize " + << cms::convert2mm((waferSize_ + waferSepar_)); #endif for (int u = -N; u <= N; ++u) { for (int v = -N; v <= N; ++v) { @@ -489,7 +510,7 @@ struct HGCalHEAlgo { ++ntot; #endif if (corner.first > 0) { - int type = waferType_->getType(xpos, ypos, zpos); + int type = waferType_->getType((xpos / dd4hep::mm), (ypos / dd4hep::mm), (zpos / dd4hep::mm)); int copy = HGCalTypes::packTypeUV(type, u, v); #ifdef EDM_ML_DEBUG if (iu > ium) @@ -516,8 +537,9 @@ struct HGCalHEAlgo { #ifdef EDM_ML_DEBUG ++ntype[type]; - edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << glog.name() << " number " << copy << " positioned in " - << glog.name() << " at " << tran << " with no rotation"; + edm::LogVerbatim("HGCalGeom") + << "DDHGCalHEAlgo: " << glog.name() << " number " << copy << " positioned in " << glog.name() << " at (" + << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) << ",0) with no rotation"; #endif } } @@ -527,8 +549,8 @@ struct HGCalHEAlgo { edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: Maximum # of u " << ium << ":" << iumAll << " # of v " << ivm << ":" << ivmAll << " and " << nin << ":" << kount << ":" << ntot << " wafers (" << ntype[0] << ":" << ntype[1] << ":" << ntype[2] << ":" << ntype[3] << ":" - << ntype[4] << ":" << ntype[5] << ") for " << glog.name() << " R " << rin << ":" - << rout; + << ntype[4] << ":" << ntype[5] << ") for " << glog.name() << " R " + << cms::convert2mm(rin) << ":" << cms::convert2mm(rout); #endif } @@ -581,8 +603,8 @@ struct HGCalHEAlgo { std::unordered_set copies_; // List of copy #'s double alpha_, cosAlpha_; - static constexpr double tol1_ = 0.01; - static constexpr double tol2_ = 0.00001; + static constexpr double tol1_ = 0.01 * dd4hep::mm; + static constexpr double tol2_ = 0.00001 * dd4hep::mm; }; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalHEFileAlgo.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalHEFileAlgo.cc index fcf8539ff7a42..7391cb5c74fbb 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalHEFileAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalHEFileAlgo.cc @@ -9,18 +9,20 @@ #include #include -#include "Geometry/HGCalCommonData/interface/HGCalParameters.h" #include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h" +#include "Geometry/HGCalCommonData/interface/HGCalParameters.h" +#include "Geometry/HGCalCommonData/interface/HGCalProperty.h" #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" #include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" #include "Geometry/HGCalCommonData/interface/HGCalWaferType.h" #include "DD4hep/DetFactoryHelper.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" //#define EDM_ML_DEBUG -using namespace cms_units::operators; +using namespace angle_units::operators; struct HGCalHEFileAlgo { HGCalHEFileAlgo() { throw cms::Exception("HGCalGeom") << "Wrong initialization to HGCalHEFileAlgo"; } @@ -32,7 +34,7 @@ struct HGCalHEFileAlgo { edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: Creating an instance"; #endif - static constexpr double tol1 = 0.01; + static constexpr double tol1 = 0.01 * dd4hep::mm; dd4hep::Volume mother = ns.volume(args.parentName()); waferNames_ = args.value>("WaferNames"); @@ -48,8 +50,9 @@ struct HGCalHEFileAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << materials_.size() << " types of volumes"; for (unsigned int i = 0; i < volumeNames_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << volumeNames_[i] << " of thickness " << thickness_[i] - << " filled with " << materials_[i] << " first copy number " << copyNumber_[i]; + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << volumeNames_[i] << " of thickness " + << cms::convert2mm(thickness_[i]) << " filled with " << materials_[i] + << " first copy number " << copyNumber_[i]; #endif layerNumbers_ = args.value>("Layers"); layerThick_ = args.value>("LayerThick"); @@ -57,8 +60,9 @@ struct HGCalHEFileAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "There are " << layerNumbers_.size() << " blocks"; for (unsigned int i = 0; i < layerNumbers_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << layerThick_[i] << " Rmid " - << rMixLayer_[i] << " with " << layerNumbers_[i] << " layers"; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << cms::convert2mm(layerThick_[i]) + << " Rmid " << cms::convert2mm(rMixLayer_[i]) << " with " << layerNumbers_[i] + << " layers"; #endif layerType_ = args.value>("LayerType"); layerSense_ = args.value>("LayerSense"); @@ -104,9 +108,9 @@ struct HGCalHEFileAlgo { edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << materialsTop_.size() << " types of volumes in the top part"; for (unsigned int i = 0; i < materialsTop_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << namesTop_[i] << " of thickness " << layerThickTop_[i] - << " filled with " << materialsTop_[i] << " first copy number " - << copyNumberTop_[i]; + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << namesTop_[i] << " of thickness " + << cms::convert2mm(layerThickTop_[i]) << " filled with " << materialsTop_[i] + << " first copy number " << copyNumberTop_[i]; edm::LogVerbatim("HGCalGeom") << "There are " << layerTypeTop_.size() << " layers in the top part"; for (unsigned int i = 0; i < layerTypeTop_.size(); ++i) edm::LogVerbatim("HGCalGeom") << "Layer [" << i << "] with material type " << layerTypeTop_[i]; @@ -121,45 +125,37 @@ struct HGCalHEFileAlgo { edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << materialsBot_.size() << " types of volumes in the bottom part"; for (unsigned int i = 0; i < materialsBot_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << namesBot_[i] << " of thickness " << layerThickBot_[i] - << " filled with " << materialsBot_[i] << " first copy number " - << copyNumberBot_[i]; + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << namesBot_[i] << " of thickness " + << cms::convert2mm(layerThickBot_[i]) << " filled with " << materialsBot_[i] + << " first copy number " << copyNumberBot_[i]; edm::LogVerbatim("HGCalGeom") << "There are " << layerTypeBot_.size() << " layers in the bottom part"; for (unsigned int i = 0; i < layerTypeBot_.size(); ++i) edm::LogVerbatim("HGCalGeom") << "Layer [" << i << "] with material type " << layerTypeBot_[i] << " sensitive class " << layerSenseBot_[i]; #endif zMinBlock_ = args.value("zMinBlock"); - rad100to200_ = args.value>("rad100to200"); - rad200to300_ = args.value>("rad200to300"); - zMinRadPar_ = args.value("zMinForRadPar"); - choiceType_ = args.value("choiceType"); - nCutRadPar_ = args.value("nCornerCut"); - fracAreaMin_ = args.value("fracAreaMin"); waferSize_ = args.value("waferSize"); waferSepar_ = args.value("SensorSeparation"); sectors_ = args.value("Sectors"); alpha_ = (1._pi) / sectors_; cosAlpha_ = cos(alpha_); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: zStart " << zMinBlock_ - << " radius for wafer type separation uses " << rad100to200_.size() - << " parameters; zmin " << zMinRadPar_ << " cutoff " << choiceType_ << ":" - << nCutRadPar_ << ":" << fracAreaMin_ << " wafer width " << waferSize_ - << " separations " << waferSepar_ << " sectors " << sectors_ << ":" - << convertRadToDeg(alpha_) << ":" << cosAlpha_; - for (unsigned int k = 0; k < rad100to200_.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] 100-200 " << rad100to200_[k] << " 200-300 " << rad200to300_[k]; + edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: zStart " << cms::convert2mm(zMinBlock_) << " wafer width " + << cms::convert2mm(waferSize_) << " separations " << cms::convert2mm(waferSepar_) + << " sectors " << sectors_ << ":" << convertRadToDeg(alpha_) << ":" << cosAlpha_; #endif waferIndex_ = args.value>("WaferIndex"); - waferTypes_ = args.value>("WaferTypes"); + waferProperty_ = args.value>("WaferProperties"); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "waferTypes with " << waferTypes_.size() << " entries"; - for (unsigned int k = 0; k < waferTypes_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "waferProperties with " << waferIndex_.size() << " entries"; + for (unsigned int k = 0; k < waferIndex_.size(); ++k) edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << waferIndex_[k] << " (" << HGCalWaferIndex::waferLayer(waferIndex_[k]) << ", " << HGCalWaferIndex::waferU(waferIndex_[k]) << ", " - << HGCalWaferIndex::waferV(waferIndex_[k]) << ") : " << waferTypes_[k]; + << HGCalWaferIndex::waferV(waferIndex_[k]) << ") : (" + << HGCalProperty::waferThick(waferProperty_[k]) << ":" + << HGCalProperty::waferPartial(waferProperty_[k]) << ":" + << HGCalProperty::waferOrient(waferProperty_[k]) << ")"; #endif slopeB_ = args.value>("SlopeBottom"); zFrontB_ = args.value>("ZFrontBottom"); @@ -169,11 +165,11 @@ struct HGCalHEFileAlgo { rMaxFront_ = args.value>("RMaxFront"); #ifdef EDM_ML_DEBUG for (unsigned int i = 0; i < slopeB_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << zFrontB_[i] << " Rmin " << rMinFront_[i] - << " Slope " << slopeB_[i]; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << cms::convert2mm(zFrontB_[i]) << " Rmin " + << cms::convert2mm(rMinFront_[i]) << " Slope " << slopeB_[i]; for (unsigned int i = 0; i < slopeT_.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << zFrontT_[i] << " Rmax " << rMaxFront_[i] - << " Slope " << slopeT_[i]; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << cms::convert2mm(zFrontT_[i]) << " Rmax " + << cms::convert2mm(rMaxFront_[i]) << " Slope " << slopeT_[i]; edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: NameSpace " << ns.name(); edm::LogVerbatim("HGCalGeom") << "==>> Constructing DDHGCalHEFileAlgo..."; @@ -199,9 +195,10 @@ struct HGCalHEFileAlgo { std::string name = volumeNames_[ii] + std::to_string(copy); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: Layer " << ly << ":" << ii << " Front " << zi << ", " - << routF << " Back " << zo << ", " << rinB << " superlayer thickness " - << layerThick_[i]; + edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: Layer " << ly << ":" << ii << " Front " + << cms::convert2mm(zi) << ", " << cms::convert2mm(routF) << " Back " + << cms::convert2mm(zo) << ", " << cms::convert2mm(rinB) + << " superlayer thickness " << cms::convert2mm(layerThick_[i]); #endif dd4hep::Material matter = ns.material(materials_[ii]); @@ -209,33 +206,26 @@ struct HGCalHEFileAlgo { if (layerSense_[ly] < 1) { std::vector pgonZ, pgonRin, pgonRout; - if (layerSense_[ly] == 0 || absorbMode_ == 0) { - double rmax = - (std::min(routF, HGCalGeomTools::radius(zz + hthick, zFrontT_, rMaxFront_, slopeT_)) * cosAlpha_) - - tol1; - pgonZ.emplace_back(-hthick); - pgonZ.emplace_back(hthick); - pgonRin.emplace_back(rinB); - pgonRin.emplace_back(rinB); - pgonRout.emplace_back(rmax); - pgonRout.emplace_back(rmax); - } else { - HGCalGeomTools::radius(zz - hthick, - zz + hthick, - zFrontB_, - rMinFront_, - slopeB_, - zFrontT_, - rMaxFront_, - slopeT_, - -layerSense_[ly], - pgonZ, - pgonRin, - pgonRout); - for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) { - pgonZ[isec] -= zz; + double rmax = + (std::min(routF, HGCalGeomTools::radius(zz + hthick, zFrontT_, rMaxFront_, slopeT_)) * cosAlpha_) - tol1; + HGCalGeomTools::radius(zz - hthick, + zz + hthick, + zFrontB_, + rMinFront_, + slopeB_, + zFrontT_, + rMaxFront_, + slopeT_, + -layerSense_[ly], + pgonZ, + pgonRin, + pgonRout); + for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) { + pgonZ[isec] -= zz; + if (layerSense_[ly] == 0 || absorbMode_ == 0) + pgonRout[isec] = rmax; + else pgonRout[isec] = pgonRout[isec] * cosAlpha_ - tol1; - } } dd4hep::Solid solid = dd4hep::Polyhedra(sectors_, -alpha_, 2._pi, pgonZ, pgonRin, pgonRout); @@ -247,8 +237,8 @@ struct HGCalHEFileAlgo { << " sectors covering " << convertRadToDeg(-alpha_) << ":" << convertRadToDeg(-alpha_ + 2._pi) << " with " << pgonZ.size() << " sections"; for (unsigned int k = 0; k < pgonZ.size(); ++k) - edm::LogVerbatim("HGCalGeom") - << "[" << k << "] z " << pgonZ[k] << " R " << pgonRin[k] << ":" << pgonRout[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << cms::convert2mm(pgonZ[k]) << " R " + << cms::convert2mm(pgonRin[k]) << ":" << cms::convert2mm(pgonRout[k]); #endif } else { double rins = @@ -262,8 +252,9 @@ struct HGCalHEFileAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << solid.name() << " Tubs made of " << matter.name() - << " of dimensions " << rinB << ":" << rins << ", " << routF << ":" << routs - << ", " << hthick << ", 0.0, 360.0 and positioned in: " << glog.name() + << " of dimensions " << cms::convert2mm(rinB) << ":" << cms::convert2mm(rins) + << ", " << cms::convert2mm(routF) << ":" << cms::convert2mm(routs) << ", " + << cms::convert2mm(hthick) << ", 0.0, 360.0 and positioned in: " << glog.name() << " number " << copy; #endif positionMix(ctxt, e, glog, name, copy, thickness_[ii], matter, rins, rMixLayer_[i], routs, zz); @@ -274,7 +265,7 @@ struct HGCalHEFileAlgo { ++copyNumber_[ii]; #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << glog.name() << " number " << copy << " positioned in " - << mother.name() << " at " << r1 << " with no rotation"; + << mother.name() << " at (0,0," << cms::convert2mm(zz) << ") with no rotation"; #endif zz += hthick; } // End of loop over layers in a block @@ -282,11 +273,12 @@ struct HGCalHEFileAlgo { laymin = laymax; if (std::abs(thickTot - layerThick_[i]) > tol2_) { if (thickTot > layerThick_[i]) { - edm::LogError("HGCalGeom") << "Thickness of the partition " << layerThick_[i] << " is smaller than " - << thickTot << ": thickness of all its components **** ERROR ****"; + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick_[i]) + << " is smaller than " << cms::convert2mm(thickTot) + << ": thickness of all its components **** ERROR ****"; } else { - edm::LogWarning("HGCalGeom") << "Thickness of the partition " << layerThick_[i] << " does not match with " - << thickTot << " of the components"; + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick_[i]) + << " does not match with " << cms::convert2mm(thickTot) << " of the components"; } } } // End of loop over blocks @@ -334,13 +326,14 @@ struct HGCalHEFileAlgo { ns.addVolumeNS(glog1); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << solid.name() << " Tubs made of " << matter.name() - << " of dimensions " << rmid << ", " << rout << ", " << hthick << ", 0.0, 360.0"; + << " of dimensions " << cms::convert2mm(rmid) << ", " << cms::convert2mm(rout) << ", " + << cms::convert2mm(hthick) << ", 0.0, 360.0"; #endif glog.placeVolume(glog1, 1); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << glog1.name() << " number 1 positioned in " << glog.name() - << " at (0, 0, 0) with no rotation"; + << " at (0,0,0) with no rotation"; #endif double thickTot(0), zpos(-hthick); for (unsigned int ly = 0; ly < layerTypeTop_.size(); ++ly) { @@ -350,8 +343,8 @@ struct HGCalHEFileAlgo { thickTot += layerThickTop_[ii]; name = namesTop_[ii] + std::to_string(copy); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: Layer " << ly << ":" << ii << " R " << rmid << ":" << rout - << " Thick " << layerThickTop_[ii]; + edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: Layer " << ly << ":" << ii << " R " << cms::convert2mm(rmid) + << ":" << cms::convert2mm(rout) << " Thick " << cms::convert2mm(layerThickTop_[ii]); #endif dd4hep::Material matter1 = ns.material(materialsTop_[ii]); @@ -363,10 +356,11 @@ struct HGCalHEFileAlgo { #ifdef EDM_ML_DEBUG double eta1 = -log(tan(0.5 * atan(rmid / zz))); double eta2 = -log(tan(0.5 * atan(rout / zz))); - edm::LogVerbatim("HGCalGeom") << name << " z|rin|rout " << zz << ":" << rmid << ":" << rout << " eta " << eta1 - << ":" << eta2; + edm::LogVerbatim("HGCalGeom") << name << " z|rin|rout " << cms::convert2mm(zz) << ":" << cms::convert2mm(rmid) + << ":" << cms::convert2mm(rout) << " eta " << eta1 << ":" << eta2; edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << solid.name() << " Tubs made of " << matter1.name() - << " of dimensions " << rmid << ", " << rout << ", " << hthickl << ", 0.0, 360.0"; + << " of dimensions " << cms::convert2mm(rmid) << ", " << cms::convert2mm(rout) + << ", " << cms::convert2mm(hthickl) << ", 0.0, 360.0"; #endif zpos += hthickl; @@ -375,17 +369,19 @@ struct HGCalHEFileAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: Position " << glog2.name() << " number " << copy << " in " - << glog1.name() << " at " << r1 << " with no rotation"; + << glog1.name() << " at (0,0," << cms::convert2mm(zpos) << ") with no rotation"; #endif ++copyNumberTop_[ii]; zpos += hthickl; } if (std::abs(thickTot - thick) > tol2_) { if (thickTot > thick) { - edm::LogError("HGCalGeom") << "Thickness of the partition " << thick << " is smaller than " << thickTot + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(thick) << " is smaller than " + << cms::convert2mm(thickTot) << ": thickness of all its components in the top part **** ERROR ****"; } else { - edm::LogWarning("HGCalGeom") << "Thickness of the partition " << thick << " does not match with " << thickTot + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(thick) + << " does not match with " << cms::convert2mm(thickTot) << " of the components in top part"; } } @@ -400,13 +396,14 @@ struct HGCalHEFileAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << solid.name() << " Tubs made of " << matter.name() - << " of dimensions " << rin << ", " << rmid << ", " << hthick << ", 0.0, 360.0"; + << " of dimensions " << cms::convert2mm(rin) << ", " << cms::convert2mm(rmid) << ", " + << cms::convert2mm(hthick) << ", 0.0, 360.0"; #endif glog.placeVolume(glog1, 1); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << glog1.name() << " number 1 positioned in " << glog.name() - << " at (0, 0, 0) with no rotation"; + << " at (0,0,0) with no rotation"; #endif thickTot = 0; zpos = -hthick; @@ -417,8 +414,8 @@ struct HGCalHEFileAlgo { thickTot += layerThickBot_[ii]; name = namesBot_[ii] + std::to_string(copy); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: Layer " << ly << ":" << ii << " R " << rin << ":" << rmid - << " Thick " << layerThickBot_[ii]; + edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: Layer " << ly << ":" << ii << " R " << cms::convert2mm(rin) + << ":" << cms::convert2mm(rmid) << " Thick " << cms::convert2mm(layerThickBot_[ii]); #endif dd4hep::Material matter1 = ns.material(materialsBot_[ii]); @@ -430,10 +427,11 @@ struct HGCalHEFileAlgo { #ifdef EDM_ML_DEBUG double eta1 = -log(tan(0.5 * atan(rin / zz))); double eta2 = -log(tan(0.5 * atan(rmid / zz))); - edm::LogVerbatim("HGCalGeom") << name << " z|rin|rout " << zz << ":" << rin << ":" << rmid << " eta " << eta1 - << ":" << eta2; + edm::LogVerbatim("HGCalGeom") << name << " z|rin|rout " << cms::convert2mm(zz) << ":" << cms::convert2mm(rin) + << ":" << cms::convert2mm(rmid) << " eta " << eta1 << ":" << eta2; edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << solid.name() << " Tubs made of " << matter1.name() - << " of dimensions " << rin << ", " << rmid << ", " << hthickl << ", 0.0, 360.0"; + << " of dimensions " << cms::convert2mm(rin) << ", " << cms::convert2mm(rmid) + << ", " << cms::convert2mm(hthickl) << ", 0.0, 360.0"; #endif zpos += hthickl; @@ -441,12 +439,12 @@ struct HGCalHEFileAlgo { glog1.placeVolume(glog2, copy, r1); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: Position " << glog2.name() << " number " << copy << " in " - << glog1.name() << " at " << r1 << " with no rotation"; + << glog1.name() << " at (0,0," << cms::convert2mm(zpos) << ") with no rotation"; #endif if (layerSenseBot_[ly] != 0) { #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: z " << (zz + zpos) << " Center " << copy << ":" - << (copy - firstLayer_) << ":" << layerCenter_[copy - firstLayer_]; + edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: z " << cms::convert2mm((zz + zpos)) << " Center " << copy + << ":" << (copy - firstLayer_) << ":" << layerCenter_[copy - firstLayer_]; #endif positionSensitive(ctxt, e, glog2, rin, rmid, zz + zpos, layerSenseBot_[ly], (copy - firstLayer_)); } @@ -455,10 +453,12 @@ struct HGCalHEFileAlgo { } if (std::abs(thickTot - thick) > tol2_) { if (thickTot > thick) { - edm::LogError("HGCalGeom") << "Thickness of the partition " << thick << " is smaller than " << thickTot + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(thick) << " is smaller than " + << cms::convert2mm(thickTot) << ": thickness of all its components in the top part **** ERROR ****"; } else { - edm::LogWarning("HGCalGeom") << "Thickness of the partition " << thick << " does not match with " << thickTot + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(thick) + << " does not match with " << cms::convert2mm(thickTot) << " of the components in top part"; } } @@ -483,9 +483,10 @@ struct HGCalHEFileAlgo { #ifdef EDM_ML_DEBUG int ium(0), ivm(0), iumAll(0), ivmAll(0), kount(0), ntot(0), nin(0); std::vector ntype(6, 0); - edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << glog.name() << " rout " << rout << " N " << N - << " for maximum u, v Offset; Shift " << xyoff.first << ":" << xyoff.second - << " WaferSize " << (waferSize_ + waferSepar_); + edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << glog.name() << " rout " << cms::convert2mm(rout) << " N " + << N << " for maximum u, v Offset; Shift " << cms::convert2mm(xyoff.first) << ":" + << cms::convert2mm(xyoff.second) << " WaferSize " + << cms::convert2mm((waferSize_ + waferSepar_)); #endif for (int u = -N; u <= N; ++u) { for (int v = -N; v <= N; ++v) { @@ -502,7 +503,7 @@ struct HGCalHEFileAlgo { ++ntot; #endif int indx = HGCalWaferIndex::waferIndex((layer + firstLayer_), u, v, false); - int type = HGCalWaferType::getType(indx, waferIndex_, waferTypes_); + int type = HGCalWaferType::getType(indx, waferIndex_, waferProperty_); if (corner.first > 0 && type >= 0) { int copy = HGCalTypes::packTypeUV(type, u, v); #ifdef EDM_ML_DEBUG @@ -533,8 +534,9 @@ struct HGCalHEFileAlgo { #ifdef EDM_ML_DEBUG ++ntype[type]; - edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << glog.name() << " number " << copy - << " positioned in " << glog.name() << " at " << tran << " with no rotation"; + edm::LogVerbatim("HGCalGeom") + << "DDHGCalHEFileAlgo: " << glog.name() << " number " << copy << " positioned in " << glog.name() + << " at (" << cms::convert2mm(xpos) << ", " << cms::convert2mm(ypos) << ", 0) with no rotation"; #endif } } @@ -544,14 +546,14 @@ struct HGCalHEFileAlgo { edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: Maximum # of u " << ium << ":" << iumAll << " # of v " << ivm << ":" << ivmAll << " and " << nin << ":" << kount << ":" << ntot << " wafers (" << ntype[0] << ":" << ntype[1] << ":" << ntype[2] << ":" << ntype[3] << ":" - << ntype[4] << ":" << ntype[5] << ") for " << glog.name() << " R " << rin << ":" - << rout; + << ntype[4] << ":" << ntype[5] << ") for " << glog.name() << " R " + << cms::convert2mm(rin) << ":" << cms::convert2mm(rout); #endif } //Required data members to cache the values from XML file HGCalGeomTools geomTools_; - static constexpr double tol2_ = 0.00001; + static constexpr double tol2_ = 0.00001 * dd4hep::mm; std::vector waferNames_; // Wafer names std::vector materials_; // Materials @@ -579,25 +581,19 @@ struct HGCalHEFileAlgo { std::vector layerSenseBot_; // Content of bottom layer (sensitive?) std::vector layerCenter_; // Centering of the wafers - double zMinBlock_; // Starting z-value of the block - std::vector rad100to200_; // Parameters for 120-200mum trans. - std::vector rad200to300_; // Parameters for 200-300mum trans. - double zMinRadPar_; // Minimum z for radius parametriz. - int choiceType_; // Type of parametrization to be used - int nCutRadPar_; // Cut off threshold for corners - double fracAreaMin_; // Minimum fractional conatined area - double waferSize_; // Width of the wafer - double waferSepar_; // Sensor separation - int sectors_; // Sectors - std::vector waferIndex_; // Wafer index for the types - std::vector waferTypes_; // Wafer types - std::vector slopeB_; // Slope at the lower R - std::vector zFrontB_; // Starting Z values for the slopes - std::vector rMinFront_; // Corresponding rMin's - std::vector slopeT_; // Slopes at the larger R - std::vector zFrontT_; // Starting Z values for the slopes - std::vector rMaxFront_; // Corresponding rMax's - std::unordered_set copies_; // List of copy #'s + double zMinBlock_; // Starting z-value of the block + double waferSize_; // Width of the wafer + double waferSepar_; // Sensor separation + int sectors_; // Sectors + std::vector waferIndex_; // Wafer index for the types + std::vector waferProperty_; // Wafer property + std::vector slopeB_; // Slope at the lower R + std::vector zFrontB_; // Starting Z values for the slopes + std::vector rMinFront_; // Corresponding rMin's + std::vector slopeT_; // Slopes at the larger R + std::vector zFrontT_; // Starting Z values for the slopes + std::vector rMaxFront_; // Corresponding rMax's + std::unordered_set copies_; // List of copy #'s double alpha_, cosAlpha_; }; diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalMixLayer.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalMixLayer.cc new file mode 100644 index 0000000000000..d93a6b9dc5b86 --- /dev/null +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalMixLayer.cc @@ -0,0 +1,553 @@ +/////////////////////////////////////////////////////////////////////////////// +// File: DDHGCalMixLayer.cc +// Description: Geometry factory class for HGCal (Mix) adopted for DD4HEP +/////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include + +#include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h" +#include "Geometry/HGCalCommonData/interface/HGCalParameters.h" +#include "Geometry/HGCalCommonData/interface/HGCalProperty.h" +#include "Geometry/HGCalCommonData/interface/HGCalTileIndex.h" +#include "Geometry/HGCalCommonData/interface/HGCalTypes.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferType.h" +#include "DD4hep/DetFactoryHelper.h" +#include "DataFormats/Math/interface/angle_units.h" +#include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +//#define EDM_ML_DEBUG +using namespace angle_units::operators; + +struct HGCalMixLayer { + HGCalMixLayer() { throw cms::Exception("HGCalGeom") << "Wrong initialization to HGCalMixLayer"; } + HGCalMixLayer(cms::DDParsingContext& ctxt, xml_h e) { + cms::DDNamespace ns(ctxt, e, true); + cms::DDAlgoArguments args(ctxt, e); + +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: Creating an instance"; +#endif + + static constexpr double tol1 = 0.01 * dd4hep::mm; + dd4hep::Volume mother = ns.volume(args.parentName()); + + waferTypes_ = args.value("WaferTypes"); + facingTypes_ = args.value("FacingTypes"); + partialTypes_ = args.value("PartialTypes"); + orientationTypes_ = args.value("OrientationTypes"); + phiBinsScint_ = args.value("NPhiBinScint"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer::Number of types of wafers: " << waferTypes_ + << " facings: " << facingTypes_ << " partials: " << partialTypes_ + << " Orientations: " << orientationTypes_ << "; number of cells along phi " + << phiBinsScint_; +#endif + firstLayer_ = args.value("FirstLayer"); + absorbMode_ = args.value("AbsorberMode"); + sensitiveMode_ = args.value("SensitiveMode"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "First Layer " << firstLayer_ << " and " + << "Absober:Sensitive mode " << absorbMode_ << ":" << sensitiveMode_; +#endif + zMinBlock_ = args.value("zMinBlock"); + waferSize_ = args.value("waferSize"); + waferSepar_ = args.value("SensorSeparation"); + sectors_ = args.value("Sectors"); + alpha_ = (1._pi) / sectors_; + cosAlpha_ = cos(alpha_); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: zStart " << cms::convert2mm(zMinBlock_) << " wafer width " + << cms::convert2mm(waferSize_) << " separations " << cms::convert2mm(waferSepar_) + << " sectors " << sectors_ << ":" << convertRadToDeg(alpha_) << ":" << cosAlpha_; +#endif + + waferFull_ = args.value>("WaferNamesFull"); + waferPart_ = args.value>("WaferNamesPartial"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << waferFull_.size() << " full and " << waferPart_.size() + << " partial modules\nDDHGCalMixLayer:Full Modules:"; + unsigned int i1max = static_cast(waferFull_.size()); + for (unsigned int i1 = 0; i1 < i1max; i1 += 2) { + std::ostringstream st1; + unsigned int i2 = std::min((i1 + 2), i1max); + for (unsigned int i = i1; i < i2; ++i) + st1 << " [" << i << "] " << waferFull_[i]; + edm::LogVerbatim("HGCalGeom") << st1.str() << std::endl; + } + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: Partial Modules:"; + i1max = static_cast(waferPart_.size()); + for (unsigned int i1 = 0; i1 < i1max; i1 += 2) { + std::ostringstream st1; + unsigned int i2 = std::min((i1 + 2), i1max); + for (unsigned int i = i1; i < i2; ++i) + st1 << " [" << i << "] " << waferPart_[i]; + edm::LogVerbatim("HGCalGeom") << st1.str() << std::endl; + } +#endif + slopeB_ = args.value>("SlopeBottom"); + zFrontB_ = args.value>("ZFrontBottom"); + rMinFront_ = args.value>("RMinFront"); + slopeT_ = args.value>("SlopeTop"); + zFrontT_ = args.value>("ZFrontTop"); + rMaxFront_ = args.value>("RMaxFront"); +#ifdef EDM_ML_DEBUG + for (unsigned int i = 0; i < slopeB_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << cms::convert2mm(zFrontB_[i]) << " Rmin " + << cms::convert2mm(rMinFront_[i]) << " Slope " << slopeB_[i]; + for (unsigned int i = 0; i < slopeT_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << cms::convert2mm(zFrontT_[i]) << " Rmax " + << cms::convert2mm(rMaxFront_[i]) << " Slope " << slopeT_[i]; +#endif + + materials_ = args.value>("MaterialNames"); + names_ = args.value>("VolumeNames"); + thick_ = args.value>("Thickness"); + copyNumber_.resize(materials_.size(), 1); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << materials_.size() << " types of volumes"; + for (unsigned int i = 0; i < names_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names_[i] << " of thickness " + << cms::convert2mm(thick_[i]) << " filled with " << materials_[i] + << " first copy number " << copyNumber_[i]; +#endif + layers_ = args.value>("Layers"); + layerThick_ = args.value>("LayerThick"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "There are " << layers_.size() << " blocks"; + for (unsigned int i = 0; i < layers_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << cms::convert2mm(layerThick_[i]) + << " with " << layers_[i] << " layers"; +#endif + layerType_ = args.value>("LayerType"); + layerSense_ = args.value>("LayerSense"); + layerCenter_ = args.value>("LayerCenter"); +#ifdef EDM_ML_DEBUG + for (unsigned int i = 0; i < layerCenter_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "LayerCenter [" << i << "] " << layerCenter_[i]; +#endif + if (firstLayer_ > 0) { + for (unsigned int i = 0; i < layerType_.size(); ++i) { + if (layerSense_[i] > 0) { + int ii = layerType_[i]; + copyNumber_[ii] = firstLayer_; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "First copy number for layer type " << i << ":" << ii << " with " + << materials_[ii] << " changed to " << copyNumber_[ii]; +#endif + break; + } + } + } else { + firstLayer_ = 1; + } +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "There are " << layerType_.size() << " layers"; + for (unsigned int i = 0; i < layerType_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Layer [" << i << "] with material type " << layerType_[i] << " sensitive class " + << layerSense_[i]; +#endif + materialTop_ = args.value>("TopMaterialNames"); + namesTop_ = args.value>("TopVolumeNames"); + layerThickTop_ = args.value>("TopLayerThickness"); + layerTypeTop_ = args.value>("TopLayerType"); + copyNumberTop_.resize(materialTop_.size(), firstLayer_); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << materialTop_.size() << " types of volumes in the top part"; + for (unsigned int i = 0; i < materialTop_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << namesTop_[i] << " of thickness " + << cms::convert2mm(layerThickTop_[i]) << " filled with " << materialTop_[i] + << " first copy number " << copyNumberTop_[i]; + edm::LogVerbatim("HGCalGeom") << "There are " << layerTypeTop_.size() << " layers in the top part"; + for (unsigned int i = 0; i < layerTypeTop_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Layer [" << i << "] with material type " << layerTypeTop_[i]; +#endif + waferIndex_ = args.value>("WaferIndex"); + waferProperty_ = args.value>("WaferProperties"); + waferLayerStart_ = args.value>("WaferLayerStart"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "waferProperties with " << waferIndex_.size() << " entries in " + << waferLayerStart_.size() << " layers"; + for (unsigned int k = 0; k < waferLayerStart_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "LayerStart[" << k << "] " << waferLayerStart_[k]; + for (unsigned int k = 0; k < waferIndex_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << waferIndex_[k] << " (" + << HGCalWaferIndex::waferLayer(waferIndex_[k]) << ", " + << HGCalWaferIndex::waferU(waferIndex_[k]) << ", " + << HGCalWaferIndex::waferV(waferIndex_[k]) << ") : (" + << HGCalProperty::waferThick(waferProperty_[k]) << ":" + << HGCalProperty::waferPartial(waferProperty_[k]) << ":" + << HGCalProperty::waferOrient(waferProperty_[k]) << ")"; +#endif + tileRMin_ = args.value>("TileRMin"); + tileRMax_ = args.value>("TileRMax"); + tileIndex_ = args.value>("TileLayerRings"); + tilePhis_ = args.value>("TilePhiRange"); + tileLayerStart_ = args.value>("TileLayerStart"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer:: with " << tileRMin_.size() << " rings"; + for (unsigned int k = 0; k < tileRMin_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "Ring[" << k << "] " << cms::convert2mm(tileRMin_[k]) << " : " + << cms::convert2mm(tileRMax_[k]); + edm::LogVerbatim("HGCalGeom") << "TileProperties with " << tileIndex_.size() << " entries in " + << tileLayerStart_.size() << " layers"; + for (unsigned int k = 0; k < tileLayerStart_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "LayerStart[" << k << "] " << tileLayerStart_[k]; + for (unsigned int k = 0; k < tileIndex_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << tileIndex_[k] << " (" + << "Layer " << std::get<0>(HGCalTileIndex::tileUnpack(tileIndex_[k])) << " Ring " + << std::get<1>(HGCalTileIndex::tileUnpack(tileIndex_[k])) << ":" + << std::get<2>(HGCalTileIndex::tileUnpack(tileIndex_[k])) << ") Phi " + << std::get<1>(HGCalTileIndex::tileUnpack(tilePhis_[k])) << ":" + << std::get<2>(HGCalTileIndex::tileUnpack(tilePhis_[k])); +#endif + +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: NameSpace " << ns.name(); + + edm::LogVerbatim("HGCalGeom") << "==>> Constructing DDHGCalMixLayer..."; + copies_.clear(); +#endif + + double zi(zMinBlock_); + int laymin(0); + for (unsigned int i = 0; i < layers_.size(); i++) { + double zo = zi + layerThick_[i]; + double routF = HGCalGeomTools::radius(zi, zFrontT_, rMaxFront_, slopeT_); + int laymax = laymin + layers_[i]; + double zz = zi; + double thickTot(0); + for (int ly = laymin; ly < laymax; ++ly) { + int ii = layerType_[ly]; + int copy = copyNumber_[ii]; + double hthick = 0.5 * thick_[ii]; + double rinB = HGCalGeomTools::radius(zo, zFrontB_, rMinFront_, slopeB_); + zz += hthick; + thickTot += thick_[ii]; + + std::string name = names_[ii] + std::to_string(copy); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: Layer " << ly << ":" << ii << " Front " + << cms::convert2mm(zi) << ", " << cms::convert2mm(routF) << " Back " + << cms::convert2mm(zo) << ", " << cms::convert2mm(rinB) + << " superlayer thickness " << cms::convert2mm(layerThick_[i]); +#endif + + dd4hep::Material matter = ns.material(materials_[ii]); + dd4hep::Volume glog; + + if (layerSense_[ly] < 1) { + std::vector pgonZ, pgonRin, pgonRout; + double rmax = + (std::min(routF, HGCalGeomTools::radius(zz + hthick, zFrontT_, rMaxFront_, slopeT_)) * cosAlpha_) - tol1; + HGCalGeomTools::radius(zz - hthick, + zz + hthick, + zFrontB_, + rMinFront_, + slopeB_, + zFrontT_, + rMaxFront_, + slopeT_, + -layerSense_[ly], + pgonZ, + pgonRin, + pgonRout); + for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) { + pgonZ[isec] -= zz; + if (layerSense_[ly] == 0 || absorbMode_ == 0) + pgonRout[isec] = rmax; + else + pgonRout[isec] = pgonRout[isec] * cosAlpha_ - tol1; + } + + dd4hep::Solid solid = dd4hep::Polyhedra(sectors_, -alpha_, 2._pi, pgonZ, pgonRin, pgonRout); + ns.addSolidNS(ns.prepend(name), solid); + glog = dd4hep::Volume(solid.name(), solid, matter); + ns.addVolumeNS(glog); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << solid.name() << " polyhedra of " << sectors_ + << " sectors covering " << convertRadToDeg(-alpha_) << ":" + << convertRadToDeg(-alpha_ + 2._pi) << " with " << pgonZ.size() << " sections"; + for (unsigned int k = 0; k < pgonZ.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << cms::convert2mm(pgonZ[k]) << " R " + << cms::convert2mm(pgonRin[k]) << ":" << cms::convert2mm(pgonRout[k]); +#endif + } else { + double rins = + (sensitiveMode_ < 1) ? rinB : HGCalGeomTools::radius(zz + hthick, zFrontB_, rMinFront_, slopeB_); + double routs = + (sensitiveMode_ < 1) ? routF : HGCalGeomTools::radius(zz - hthick, zFrontT_, rMaxFront_, slopeT_); + dd4hep::Solid solid = dd4hep::Tube(rins, routs, hthick, 0.0, 2._pi); + ns.addSolidNS(ns.prepend(name), solid); + glog = dd4hep::Volume(solid.name(), solid, matter); + ns.addVolumeNS(glog); + +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << solid.name() << " Tubs made of " << matter.name() + << " of dimensions " << cms::convert2mm(rinB) << ":" << cms::convert2mm(rins) + << ", " << cms::convert2mm(routF) << ":" << cms::convert2mm(routs) << ", " + << cms::convert2mm(hthick) << ", 0.0, 360.0 and positioned in: " << glog.name() + << " number " << copy; +#endif + positionMix(ctxt, e, glog, name, copy, thick_[ii], matter, layerSense_[ly]); + } + + dd4hep::Position r1(0, 0, zz); + mother.placeVolume(glog, copy, r1); + ++copyNumber_[ii]; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << glog.name() << " number " << copy << " positioned in " + << mother.name() << " at (0,0," << cms::convert2mm(zz) << ") with no rotation"; +#endif + zz += hthick; + } // End of loop over layers in a block + zi = zo; + laymin = laymax; + if (std::abs(thickTot - layerThick_[i]) > tol2_) { + if (thickTot > layerThick_[i]) { + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick_[i]) + << " is smaller than " << cms::convert2mm(thickTot) + << ": thickness of all its components **** ERROR ****"; + } else { + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick_[i]) + << " does not match with " << cms::convert2mm(thickTot) << " of the components"; + } + } + } // End of loop over blocks + +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << copies_.size() << " different wafer copy numbers"; + int k(0); + for (std::unordered_set::const_iterator itr = copies_.begin(); itr != copies_.end(); ++itr, ++k) { + edm::LogVerbatim("HGCalGeom") << "Copy [" << k << "] : " << (*itr); + } + copies_.clear(); + edm::LogVerbatim("HGCalGeom") << "<<== End of DDHGCalMixLayer construction..."; +#endif + } + + void positionMix(cms::DDParsingContext& ctxt, + xml_h e, + const dd4hep::Volume& glog, + const std::string& nameM, + int copyM, + double thick, + const dd4hep::Material& matter, + int layerType) { + cms::DDNamespace ns(ctxt, e, true); + + // Make the top part first + for (unsigned int ly = 0; ly < layerTypeTop_.size(); ++ly) { + int ii = layerTypeTop_[ly]; + copyNumberTop_[ii] = copyM; + } + double hthick = 0.5 * thick; + double dphi = (2._pi) / phiBinsScint_; + double thickTot(0), zpos(-hthick); + for (unsigned int ly = 0; ly < layerTypeTop_.size(); ++ly) { + int ii = layerTypeTop_[ly]; + int copy = copyNumberTop_[ii]; + int layer = copy - firstLayer_; + double hthickl = 0.5 * layerThickTop_[ii]; + thickTot += layerThickTop_[ii]; + zpos += hthickl; + dd4hep::Material matter1 = ns.material(materialTop_[ii]); + unsigned int k = 0; + int firstTile = tileLayerStart_[layer]; + int lastTile = ((layer + 1 < static_cast(tileLayerStart_.size())) ? tileLayerStart_[layer + 1] + : static_cast(tileIndex_.size())); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: Layer " << ly << ":" << ii << " Copy " << copy << " Tiles " + << firstTile << ":" << lastTile; +#endif + for (int ti = firstTile; ti < lastTile; ++ti) { + double r1 = tileRMin_[std::get<1>(HGCalTileIndex::tileUnpack(tileIndex_[ti])) - 1]; + double r2 = tileRMax_[std::get<2>(HGCalTileIndex::tileUnpack(tileIndex_[ti])) - 1]; + int fimin = std::get<1>(HGCalTileIndex::tileUnpack(tilePhis_[ti])); + int fimax = std::get<2>(HGCalTileIndex::tileUnpack(tilePhis_[ti])); + double phi1 = dphi * (fimin - 1); + double phi2 = dphi * (fimax - fimin + 1); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: Layer " << copy << " iR " + << std::get<1>(HGCalTileIndex::tileUnpack(tileIndex_[ly])) << ":" + << std::get<2>(HGCalTileIndex::tileUnpack(tileIndex_[ly])) << " R " + << cms::convert2mm(r1) << ":" << cms::convert2mm(r2) << " Thick " + << cms::convert2mm((2.0 * hthickl)) << " phi " << fimin << ":" << fimax << ":" + << convertRadToDeg(phi1) << ":" << convertRadToDeg(phi2); +#endif + std::string name = namesTop_[ii] + "L" + std::to_string(copy) + "F" + std::to_string(k); + ++k; + dd4hep::Solid solid = dd4hep::Tube(r1, r2, hthickl, phi1, phi2); + ns.addSolidNS(ns.prepend(name), solid); + dd4hep::Volume glog1 = dd4hep::Volume(solid.name(), solid, matter1); + ns.addVolumeNS(glog1); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << glog1.name() << " Tubs made of " << materialTop_[ii] + << " of dimensions " << cms::convert2mm(r1) << ", " << cms::convert2mm(r2) << ", " + << cms::convert2mm(hthickl) << ", " << convertRadToDeg(phi1) << ", " + << convertRadToDeg(phi2); +#endif + dd4hep::Position tran(0, 0, zpos); + glog.placeVolume(glog1, copy, tran); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: Position " << glog1.name() << " number " << copy << " in " + << glog.name() << " at (0, 0, " << cms::convert2mm(zpos) << ") with no rotation"; +#endif + } + ++copyNumberTop_[ii]; + zpos += hthickl; + } + if (std::abs(thickTot - thick) > tol2_) { + if (thickTot > thick) { + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(thick) << " is smaller than " + << cms::convert2mm(thickTot) + << ": thickness of all its components in the top part **** ERROR ****"; + } else { + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(thick) + << " does not match with " << cms::convert2mm(thickTot) + << " of the components in top part"; + } + } + + // Make the bottom part next + int layer = (copyM - firstLayer_); + static const double sqrt3 = std::sqrt(3.0); + int layercenter = layerCenter_[layer]; + int firstWafer = waferLayerStart_[layer]; + int lastWafer = + ((layer + 1 < static_cast(waferLayerStart_.size())) ? waferLayerStart_[layer + 1] + : static_cast(waferLayerStart_.size())); + double r = 0.5 * (waferSize_ + waferSepar_); + double R = 2.0 * r / sqrt3; + double dy = 0.75 * R; + const auto& xyoff = geomTools_.shiftXY(layercenter, (waferSize_ + waferSepar_)); +#ifdef EDM_ML_DEBUG + int ium(0), ivm(0), kount(0); + std::vector ntype(3, 0); + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: " << glog.name() << " r " << cms::convert2mm(r) << " R " + << cms::convert2mm(R) << " dy " << cms::convert2mm(dy) << " Shift " + << cms::convert2mm(xyoff.first) << ":" << cms::convert2mm(xyoff.second) + << " WaferSize " << cms::convert2mm((waferSize_ + waferSepar_)) << " index " + << firstWafer << ":" << (lastWafer - 1); +#endif + for (int k = firstWafer; k < lastWafer; ++k) { + int u = HGCalWaferIndex::waferU(waferIndex_[k]); + int v = HGCalWaferIndex::waferV(waferIndex_[k]); +#ifdef EDM_ML_DEBUG + int iu = std::abs(u); + int iv = std::abs(v); +#endif + int nr = 2 * v; + int nc = -2 * u + v; + double xpos = xyoff.first + nc * r; + double ypos = xyoff.second + nr * dy; + int type = HGCalProperty::waferThick(waferProperty_[k]); + int part = HGCalProperty::waferPartial(waferProperty_[k]); + int orien = HGCalProperty::waferOrient(waferProperty_[k]); + std::string wafer; + int i(999); + if (part == HGCalTypes::WaferFull) { + i = (layerType - 1) * waferTypes_ + type; + wafer = waferFull_[i]; + } else { + i = (part - 1) * waferTypes_ * facingTypes_ * orientationTypes_ + + (layerType - 1) * waferTypes_ * orientationTypes_ + type * orientationTypes_ + orien; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << " layertype:type:part:orien:ind " << layerType << ":" << type << ":" << part + << ":" << orien << ":" << i << ":" << waferPart_.size(); +#endif + wafer = waferPart_[i]; + } + int copy = HGCalTypes::packTypeUV(type, u, v); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << " DDHGCalMixLayer: Layer " << HGCalWaferIndex::waferLayer(waferIndex_[k]) + << " Wafer " << wafer << " number " << copy << " type :part:orien:ind " << type + << ":" << part << ":" << orien << ":" << i << " layer:u:v " << (layer + firstLayer_) + << ":" << u << ":" << v; + if (iu > ium) + ium = iu; + if (iv > ivm) + ivm = iv; + kount++; + if (copies_.count(copy) == 0) + copies_.insert(copy); +#endif + dd4hep::Position tran(xpos, ypos, 0.0); + glog.placeVolume(ns.volume(wafer), copy, tran); +#ifdef EDM_ML_DEBUG + ++ntype[type]; + edm::LogVerbatim("HGCalGeom") << " DDHGCalMixLayer: " << wafer << " number " << copy << " type " << layerType + << ":" << type << " positioned in " << glog.name() << " at (" + << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) << ",0) with no rotation"; +#endif + } + +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalMixLayer: Maximum # of u " << ium << " # of v " << ivm << " and " << kount + << " wafers (" << ntype[0] << ":" << ntype[1] << ":" << ntype[2] << ") for " + << glog.name(); +#endif + } + + //Required data members to cache the values from XML file + HGCalGeomTools geomTools_; + static constexpr double tol2_ = 0.00001 * dd4hep::mm; + + int waferTypes_; // Number of wafer types + int facingTypes_; // Types of facings of modules toward IP + int partialTypes_; // Number of partial wafer types + int orientationTypes_; // Number of partial wafer orienations + int phiBinsScint_; // Maximum number of cells along phi + int firstLayer_; // Copy # of the first sensitive layer + int absorbMode_; // Absorber mode + int sensitiveMode_; // Sensitive mode + double zMinBlock_; // Starting z-value of the block + double waferSize_; // Width of the wafer + double waferSepar_; // Sensor separation + int sectors_; // Sectors + std::vector slopeB_; // Slope at the lower R + std::vector zFrontB_; // Starting Z values for the slopes + std::vector rMinFront_; // Corresponding rMin's + std::vector slopeT_; // Slopes at the larger R + std::vector zFrontT_; // Starting Z values for the slopes + std::vector rMaxFront_; // Corresponding rMax's + std::vector waferFull_; // Names of full wafer modules + std::vector waferPart_; // Names of partial wafer modules + std::vector materials_; // Materials + std::vector names_; // Names + std::vector thick_; // Thickness of the material + std::vector copyNumber_; // Initial copy numbers + std::vector layers_; // Number of layers in a section + std::vector layerThick_; // Thickness of each section + std::vector layerType_; // Type of the layer + std::vector layerSense_; // Content of a layer (sensitive?) + std::vector materialTop_; // Materials of top layers + std::vector namesTop_; // Names of top layers + std::vector layerThickTop_; // Thickness of the top sections + std::vector layerTypeTop_; // Type of the Top layer + std::vector copyNumberTop_; // Initial copy numbers (top section) + std::vector layerCenter_; // Centering of the wafers + std::vector waferIndex_; // Wafer index for the types + std::vector waferProperty_; // Wafer property + std::vector waferLayerStart_; // Start index of wafers in each layer + std::vector tileRMin_; // Minimum radius of each ring + std::vector tileRMax_; // Maximum radius of each ring + std::vector tileIndex_; // Index of tile (layer/start|end ring) + std::vector tilePhis_; // Tile phi range for each index + std::vector tileLayerStart_; // Start index of tiles in each layer + std::unordered_set copies_; // List of copy #'s + double alpha_, cosAlpha_; +}; + +static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { + HGCalMixLayer healgo(ctxt, e); + return cms::s_executed; +} + +DECLARE_DDCMS_DETELEMENT(DDCMS_hgcal_DDHGCalMixLayer, algorithm) diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalModule.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalModule.cc index 449baac840b4c..5afc077933f0e 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalModule.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalModule.cc @@ -5,9 +5,10 @@ * Author: Sunanda Banerjee */ -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DD4hep/DetFactoryHelper.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" #include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h" @@ -15,17 +16,16 @@ #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" //#define EDM_ML_DEBUG - #ifdef EDM_ML_DEBUG #include #endif -using namespace cms_units::operators; +using namespace angle_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); cms::DDAlgoArguments args(ctxt, e); - static constexpr double tol = 0.01; - static constexpr double tol2 = 0.00001; + static constexpr double tol = 0.01 * dd4hep::mm; + static constexpr double tol2 = 0.00001 * dd4hep::mm; const auto& wafer = args.value >("WaferName"); // Wafers auto materials = args.value >("MaterialNames"); // Materials @@ -43,8 +43,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext edm::LogVerbatim("HGCalGeom") << "Wafer[" << i << "] " << wafer[i]; edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << materials.size() << " types of volumes"; for (unsigned int i = 0; i < names.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names[i] << " of thickness " << thick[i] - << " filled with " << materials[i] << " first copy number " << copyNumber[i]; + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names[i] << " of thickness " + << cms::convert2mm(thick[i]) << " filled with " << materials[i] + << " first copy number " << copyNumber[i]; #endif const auto& layers = args.value >("Layers"); // Number of layers in a section const auto& layerThick = args.value >("LayerThick"); // Thickness of each section @@ -53,8 +54,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << layers.size() << " blocks"; for (unsigned int i = 0; i < layers.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << layerThick[i] << " with " << layers[i] - << " layers"; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << cms::convert2mm(layerThick[i]) << " with " + << layers[i] << " layers"; edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << layerType.size() << " layers"; for (unsigned int i = 0; i < layerType.size(); ++i) edm::LogVerbatim("HGCalGeom") << "Layer [" << i << "] with material type " << layerType[i] << " sensitive class " @@ -65,8 +66,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext double waferW = args.value("waferW"); // Width of the wafer int sectors = args.value("Sectors"); // Sectors #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: zStart " << zMinBlock << " rFineCoarse " << rMaxFine - << " wafer width " << waferW << " sectors " << sectors; + edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: zStart " << cms::convert2mm(zMinBlock) << " rFineCoarse " + << cms::convert2mm(rMaxFine) << " wafer width " << cms::convert2mm(waferW) + << " sectors " << sectors; #endif const auto& slopeB = args.value >("SlopeBottom"); // Slope at the lower R const auto& slopeT = args.value >("SlopeTop"); // Slopes at the larger R @@ -76,8 +78,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: Bottom slopes " << slopeB[0] << ":" << slopeB[1] << " and " << slopeT.size() << " slopes for top"; for (unsigned int i = 0; i < slopeT.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << zFront[i] << " Rmax " << rMaxFront[i] << " Slope " - << slopeT[i]; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << cms::convert2mm(zFront[i]) << " Rmax " + << cms::convert2mm(rMaxFront[i]) << " Slope " << slopeT[i]; #endif std::string idNameSpace = static_cast(ns.name()); // Namespace of this and ALL sub-parts const auto& idName = args.parentName(); // Name of the "parent" volume. @@ -106,13 +108,15 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext std::string name = "HGCal" + names[ii] + std::to_string(copy); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: Layer " << ly << ":" << ii << " Front " << zi << ", " << routF - << " Back " << zo << ", " << rinB << " superlayer thickness " << layerThick[i]; + edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: Layer " << ly << ":" << ii << " Front " << cms::convert2mm(zi) + << ", " << cms::convert2mm(routF) << " Back " << cms::convert2mm(zo) << ", " + << cms::convert2mm(rinB) << " superlayer thickness " + << cms::convert2mm(layerThick[i]); #endif dd4hep::Material matter = ns.material(materials[ii]); dd4hep::Volume glog; if (layerSense[ly] == 0) { - double alpha = cms_units::piRadians / sectors; + double alpha = 1._pi / sectors; double rmax = routF * cos(alpha) - tol; std::vector pgonZ, pgonRin, pgonRout; pgonZ.emplace_back(-0.5 * thick[ii]); @@ -121,7 +125,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext pgonRin.emplace_back(rinB); pgonRout.emplace_back(rmax); pgonRout.emplace_back(rmax); - dd4hep::Solid solid = dd4hep::Polyhedra(sectors, -alpha, 2 * cms_units::piRadians, pgonZ, pgonRin, pgonRout); + dd4hep::Solid solid = dd4hep::Polyhedra(sectors, -alpha, 2._pi, pgonZ, pgonRin, pgonRout); ns.addSolidNS(ns.prepend(name), solid); glog = dd4hep::Volume(solid.name(), solid, matter); #ifdef EDM_ML_DEBUG @@ -129,16 +133,17 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext << " sectors covering " << convertRadToDeg(-alpha) << ":" << (360.0 + convertRadToDeg(-alpha)) << " with " << pgonZ.size() << " sections"; for (unsigned int k = 0; k < pgonZ.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << pgonZ[k] << " R " << pgonRin[k] << ":" << pgonRout[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << cms::convert2mm(pgonZ[k]) << " R " + << cms::convert2mm(pgonRin[k]) << ":" << cms::convert2mm(pgonRout[k]); #endif } else { - dd4hep::Solid solid = dd4hep::Tube(0.5 * thick[ii], rinB, routF, 0.0, 2 * cms_units::piRadians); + dd4hep::Solid solid = dd4hep::Tube(0.5 * thick[ii], rinB, routF, 0.0, 2._pi); ns.addSolidNS(ns.prepend(name), solid); glog = dd4hep::Volume(solid.name(), solid, matter); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << solid.name() << " Tubs made of " << materials[ii] - << " of dimensions " << rinB << ", " << routF << ", " << 0.5 * thick[ii] - << ", 0.0, 360.0"; + << " of dimensions " << cms::convert2mm(rinB) << ", " << cms::convert2mm(routF) + << ", " << cms::convert2mm(0.5 * thick[ii]) << ", 0.0, 360.0"; edm::LogVerbatim("HGCalGeom") << "DDHGCalModule test position in: " << glog.name() << " number " << copy; #endif double dx = 0.5 * waferW; @@ -148,7 +153,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext int nrow = static_cast(routF / (waferW * tan(30._deg))) + 1; #ifdef EDM_ML_DEBUG int incm(0), inrm(0), kount(0), ntot(0), nin(0), nfine(0), ncoarse(0); - edm::LogVerbatim("HGCalGeom") << glog.name() << " rout " << routF << " Row " << nrow << " Column " << ncol; + edm::LogVerbatim("HGCalGeom") << glog.name() << " rout " << cms::convert2mm(routF) << " Row " << nrow + << " Column " << ncol; #endif for (int nr = -nrow; nr <= nrow; ++nr) { int inr = (nr >= 0) ? nr : -nr; @@ -185,7 +191,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ++ncoarse; edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << glog1.name() << " number " << copyL << " positioned in " << glog.name() - << " at " << tran << " with " << rotation; + << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) << ",0) with " << rotation; #endif } } @@ -195,7 +201,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: # of columns " << incm << " # of rows " << inrm << " and " << nin << ":" << kount << ":" << ntot << " wafers (" << nfine << ":" << ncoarse - << ") for " << glog.name() << " R " << rinB << ":" << routF; + << ") for " << glog.name() << " R " << cms::convert2mm(rinB) << ":" + << cms::convert2mm(routF); #endif } dd4hep::Position r1(0, 0, zz); @@ -204,7 +211,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ++copyNumber[ii]; #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << glog.name() << " number " << copy << " positioned in " - << module.name() << " at " << r1 << " with " << rot; + << module.name() << " at (0,0," << cms::convert2mm(zz) << ") with no rotation"; #endif zz += (0.5 * thick[ii]); } // End of loop over layers in a block @@ -212,11 +219,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext laymin = laymax; if (fabs(thickTot - layerThick[i]) > tol2) { if (thickTot > layerThick[i]) { - edm::LogError("HGCalGeom") << "Thickness of the partition " << layerThick[i] << " is smaller than thickness " - << thickTot << " of all its components **** ERROR ****\n"; + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick[i]) + << " is smaller than thickness " << cms::convert2mm(thickTot) + << " of all its components **** ERROR ****\n"; } else { - edm::LogWarning("HGCalGeom") << "Thickness of the partition " << layerThick[i] << " does not match with " - << thickTot << " of the components\n"; + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick[i]) + << " does not match with " << cms::convert2mm(thickTot) << " of the components\n"; } } } // End of loop over blocks diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalModuleAlgo.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalModuleAlgo.cc index b2980da6bf079..9a0df369937a5 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalModuleAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalModuleAlgo.cc @@ -5,9 +5,10 @@ * Author: Sunanda Banerjee */ -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DD4hep/DetFactoryHelper.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" #include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h" @@ -15,17 +16,16 @@ #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" //#define EDM_ML_DEBUG - #ifdef EDM_ML_DEBUG #include #endif -using namespace cms_units::operators; +using namespace angle_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); cms::DDAlgoArguments args(ctxt, e); - static constexpr double tol = 0.01; - static constexpr double tol2 = 0.00001; + static constexpr double tol = 0.01 * dd4hep::mm; + static constexpr double tol2 = 0.00001 * dd4hep::mm; const auto& wafer = args.value >("WaferName"); // Wafers auto materials = args.value >("MaterialNames"); // Materials @@ -38,24 +38,25 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext copyNumber.emplace_back(1); } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << wafer.size() << " wafers"; + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: " << wafer.size() << " wafers"; for (unsigned int i = 0; i < wafer.size(); ++i) edm::LogVerbatim("HGCalGeom") << "Wafer[" << i << "] " << wafer[i]; - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << materials.size() << " types of volumes"; + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: " << materials.size() << " types of volumes"; for (unsigned int i = 0; i < names.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names[i] << " of thickness " << thick[i] - << " filled with " << materials[i] << " first copy number " << copyNumber[i]; + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names[i] << " of thickness " + << cms::convert2mm(thick[i]) << " filled with " << materials[i] + << " first copy number " << copyNumber[i]; #endif const auto& layers = args.value >("Layers"); // Number of layers in a section const auto& layerThick = args.value >("LayerThick"); // Thickness of each section const auto& layerType = args.value >("LayerType"); // Type of the layer const auto& layerSense = args.value >("LayerSense"); // Content of a layer (sensitive?) #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << layers.size() << " blocks"; + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: " << layers.size() << " blocks"; for (unsigned int i = 0; i < layers.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << layerThick[i] << " with " << layers[i] - << " layers"; - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << layerType.size() << " layers"; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << cms::convert2mm(layerThick[i]) << " with " + << layers[i] << " layers"; + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: " << layerType.size() << " layers"; for (unsigned int i = 0; i < layerType.size(); ++i) edm::LogVerbatim("HGCalGeom") << "Layer [" << i << "] with material type " << layerType[i] << " sensitive class " << layerSense[i]; @@ -66,26 +67,26 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext double waferGap = args.value("waferGap"); // Gap between 2 wafers int sectors = args.value("Sectors"); // Sectors #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: zStart " << zMinBlock << " rFineCoarse " << rMaxFine - << " wafer width " << waferW << waferW << " gap among wafers " << waferGap - << " sectors " << sectors; + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: zStart " << cms::convert2mm(zMinBlock) << " rFineCoarse " + << cms::convert2mm(rMaxFine) << " wafer width " << cms::convert2mm(waferW) + << " gap among wafers " << cms::convert2mm(waferGap) << " sectors " << sectors; #endif const auto& slopeB = args.value >("SlopeBottom"); // Slope at the lower R const auto& slopeT = args.value >("SlopeTop"); // Slopes at the larger R const auto& zFront = args.value >("ZFront"); // Starting Z values for the slopes const auto& rMaxFront = args.value >("RMaxFront"); // Corresponding rMax's #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: Bottom slopes " << slopeB[0] << ":" << slopeB[1] << " and " + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: Bottom slopes " << slopeB[0] << ":" << slopeB[1] << " and " << slopeT.size() << " slopes for top"; for (unsigned int i = 0; i < slopeT.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << zFront[i] << " Rmax " << rMaxFront[i] << " Slope " - << slopeT[i]; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << cms::convert2mm(zFront[i]) << " Rmax " + << cms::convert2mm(rMaxFront[i]) << " Slope " << slopeT[i]; #endif std::string idNameSpace = static_cast(ns.name()); // Namespace of this and ALL sub-parts const auto& idName = args.parentName(); // Name of the "parent" volume. #ifdef EDM_ML_DEBUG std::unordered_set copies; // List of copy #'s - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: NameSpace " << idNameSpace << " Mother " << idName; + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: NameSpace " << idNameSpace << " Mother " << idName; #endif // Mother module @@ -108,13 +109,15 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext std::string name = "HGCal" + names[ii] + std::to_string(copy); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: Layer " << ly << ":" << ii << " Front " << zi << ", " << routF - << " Back " << zo << ", " << rinB << " superlayer thickness " << layerThick[i]; + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: Layer " << ly << ":" << ii << " Front " + << cms::convert2mm(zi) << ", " << cms::convert2mm(routF) << " Back " + << cms::convert2mm(zo) << ", " << cms::convert2mm(rinB) << " superlayer thickness " + << cms::convert2mm(layerThick[i]); #endif dd4hep::Material matter = ns.material(materials[ii]); dd4hep::Volume glog; if (layerSense[ly] == 0) { - double alpha = cms_units::piRadians / sectors; + double alpha = 1._pi / sectors; double rmax = routF * cos(alpha) - tol; std::vector pgonZ, pgonRin, pgonRout; pgonZ.emplace_back(-0.5 * thick[ii]); @@ -123,25 +126,26 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext pgonRin.emplace_back(rinB); pgonRout.emplace_back(rmax); pgonRout.emplace_back(rmax); - dd4hep::Solid solid = dd4hep::Polyhedra(sectors, -alpha, 2 * cms_units::piRadians, pgonZ, pgonRin, pgonRout); + dd4hep::Solid solid = dd4hep::Polyhedra(sectors, -alpha, 2._pi, pgonZ, pgonRin, pgonRout); ns.addSolidNS(ns.prepend(name), solid); glog = dd4hep::Volume(solid.name(), solid, matter); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << solid.name() << " polyhedra of " << sectors + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: " << solid.name() << " polyhedra of " << sectors << " sectors covering " << convertRadToDeg(-alpha) << ":" << (360.0 + convertRadToDeg(-alpha)) << " with " << pgonZ.size() << " sections"; for (unsigned int k = 0; k < pgonZ.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << pgonZ[k] << " R " << pgonRin[k] << ":" << pgonRout[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << cms::convert2mm(pgonZ[k]) << " R " + << cms::convert2mm(pgonRin[k]) << ":" << cms::convert2mm(pgonRout[k]); #endif } else { - dd4hep::Solid solid = dd4hep::Tube(0.5 * thick[ii], rinB, routF, 0.0, 2 * cms_units::piRadians); + dd4hep::Solid solid = dd4hep::Tube(0.5 * thick[ii], rinB, routF, 0.0, 2._pi); ns.addSolidNS(ns.prepend(name), solid); glog = dd4hep::Volume(solid.name(), solid, matter); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << solid.name() << " Tubs made of " << materials[ii] - << " of dimensions " << rinB << ", " << routF << ", " << 0.5 * thick[ii] - << ", 0.0, 360.0"; - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule test position in: " << glog.name() << " number " << copy; + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: " << solid.name() << " Tubs made of " << materials[ii] + << " of dimensions " << cms::convert2mm(rinB) << ", " << cms::convert2mm(routF) + << ", " << cms::convert2mm(0.5 * thick[ii]) << ", 0.0, 360.0"; + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo test position in: " << glog.name() << " number " << copy; #endif double ww = (waferW + waferGap); double dx = 0.5 * ww; @@ -151,7 +155,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext int nrow = static_cast(routF / (ww * tan(30._deg))) + 1; #ifdef EDM_ML_DEBUG int incm(0), inrm(0), kount(0), ntot(0), nin(0), nfine(0), ncoarse(0); - edm::LogVerbatim("HGCalGeom") << glog.name() << " rout " << routF << " Row " << nrow << " Column " << ncol; + edm::LogVerbatim("HGCalGeom") << glog.name() << " rout " << cms::convert2mm(routF) << " Row " << nrow + << " Column " << ncol; #endif for (int nr = -nrow; nr <= nrow; ++nr) { int inr = (nr >= 0) ? nr : -nr; @@ -186,9 +191,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ++nfine; else ++ncoarse; - edm::LogVerbatim("HGCalGeom") - << "DDHGCalModule: " << glog1.name() << " number " << copyL << " positioned in " << glog.name() - << " at " << tran << " with " << rotation; + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: " << glog1.name() << " number " << copyL + << " positioned in " << glog.name() << " at (" << cms::convert2mm(xpos) + << "," << cms::convert2mm(ypos) << ",0) with " << rotation; #endif } } @@ -196,9 +201,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext } } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: # of columns " << incm << " # of rows " << inrm << " and " + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: # of columns " << incm << " # of rows " << inrm << " and " << nin << ":" << kount << ":" << ntot << " wafers (" << nfine << ":" << ncoarse - << ") for " << glog.name() << " R " << rinB << ":" << routF; + << ") for " << glog.name() << " R " << cms::convert2mm(rinB) << ":" + << cms::convert2mm(routF); #endif } dd4hep::Position r1(0, 0, zz); @@ -206,8 +212,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext module.placeVolume(glog, copy, dd4hep::Transform3D(rot, r1)); ++copyNumber[ii]; #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << glog.name() << " number " << copy << " positioned in " - << module.name() << " at " << r1 << " with " << rot; + edm::LogVerbatim("HGCalGeom") << "DDHGCalModuleAlgo: " << glog.name() << " number " << copy << " positioned in " + << module.name() << " at (0,0," << cms::convert2mm(zz) << ") with " << rot; #endif zz += (0.5 * thick[ii]); } // End of loop over layers in a block @@ -215,11 +221,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext laymin = laymax; if (fabs(thickTot - layerThick[i]) > tol2) { if (thickTot > layerThick[i]) { - edm::LogError("HGCalGeom") << "Thickness of the partition " << layerThick[i] << " is smaller than thickness " - << thickTot << " of all its components **** ERROR ****\n"; + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick[i]) + << " is smaller than thickness " << cms::convert2mm(thickTot) + << " of all its components **** ERROR ****\n"; } else { - edm::LogWarning("HGCalGeom") << "Thickness of the partition " << layerThick[i] << " does not match with " - << thickTot << " of the components\n"; + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick[i]) + << " does not match with " << cms::convert2mm(thickTot) << " of the components\n"; } } } // End of loop over blocks @@ -229,7 +236,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext int k(0); for (std::unordered_set::const_iterator itr = copies.begin(); itr != copies.end(); ++itr, ++k) edm::LogVerbatim("HGCalGeom") << "Copy[" << k << "] : " << (*itr); - edm::LogVerbatim("HGCalGeom") << "<<== End of DDHGCalModule construction ..."; + edm::LogVerbatim("HGCalGeom") << "<<== End of DDHGCalModuleAlgo construction ..."; #endif return cms::s_executed; diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalNoTaperEndcap.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalNoTaperEndcap.cc index 57099c0259021..c073f4a9b59d2 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalNoTaperEndcap.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalNoTaperEndcap.cc @@ -1,11 +1,12 @@ -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DD4hep/DetFactoryHelper.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); @@ -21,8 +22,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext auto const& m_incrCopyNo = args.value("incrCopyNo"); // Increment copy Number auto const& m_childName = args.value("ChildName"); // Children name #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "Tilt Angle " << m_tiltAngle << " R " << m_rMin << ":" << m_rMax << " Offset " - << m_zoffset << ":" << m_xyoffset << " Copy " << m_startCopyNo << ":" << m_incrCopyNo + edm::LogVerbatim("HGCalGeom") << "Tilt Angle " << m_tiltAngle << " R " << cms::convert2mm(m_rMin) << ":" + << cms::convert2mm(m_rMax) << " Offset " << cms::convert2mm(m_zoffset) << ":" + << cms::convert2mm(m_xyoffset) << " Copy " << m_startCopyNo << ":" << m_incrCopyNo << " Child " << m_childName; edm::LogVerbatim("HGCalGeom") << "DDHGCalNoTaperEndcap: NameSpace " << ns.name() << "\tParent " << args.parentName(); @@ -72,8 +74,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext if (limit2 > m_rMin && limit1 < m_rMax) { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << m_childName << " copyNo = " << copyNo << " (" << column << "," << row - << "): offsetX,Y = " << offsetX << "," << offsetY << " limit=" << limit1 << ":" - << limit2 << " rMin, rMax = " << m_rMin << "," << m_rMax; + << "): offsetX,Y = " << cms::convert2mm(offsetX) << "," + << cms::convert2mm(offsetY) << " limit=" << cms::convert2mm(limit1) << ":" + << cms::convert2mm(limit2) << " rMin, rMax = " << cms::convert2mm(m_rMin) << "," + << cms::convert2mm(m_rMax); #endif dd4hep::Rotation3D rotation = (cms::makeRotation3D(theta, phiX, theta + yphi, phiY, -yphi, phiZ) * @@ -81,16 +85,20 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext dd4hep::Position tran(offsetX, offsetY, offsetZ); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "Module " << copyNo << ": location = " << tran << " Rotation " << rotation; + edm::LogVerbatim("HGCalGeom") << "Module " << copyNo << ": location = (" << cms::convert2mm(offsetX) << "," + << cms::convert2mm(offsetY) << "," << cms::convert2mm(offsetZ) << ") Rotation " + << rotation; #endif parent.placeVolume(ns.volume(name), copyNo, dd4hep::Transform3D(rotation, tran)); copyNo += m_incrCopyNo; } else { #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << " (" << column << "," << row << "): offsetX,Y = " << offsetX << "," - << offsetY << " is out of limit=" << limit1 << ":" << limit2 - << " rMin, rMax = " << m_rMin << "," << m_rMax; + edm::LogVerbatim("HGCalGeom") << " (" << column << "," << row << "): offsetX,Y = " << cms::convert2mm(offsetX) + << "," << cms::convert2mm(offsetY) + << " is out of limit=" << cms::convert2mm(limit1) << ":" + << cms::convert2mm(limit2) << " rMin, rMax = " << cms::convert2mm(m_rMin) << "," + << cms::convert2mm(m_rMax); #endif } yphi += yQuadrant * 2. * tiltAngle; diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalSiliconModule.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalSiliconModule.cc new file mode 100644 index 0000000000000..07d0176d63da4 --- /dev/null +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalSiliconModule.cc @@ -0,0 +1,416 @@ +/////////////////////////////////////////////////////////////////////////////// +// File: DDHGCalSiliconModule.cc +// Description: Geometry factory class for HGCal (EE and HESil) using +// information from the file for dd4hep +/////////////////////////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include + +#include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h" +#include "Geometry/HGCalCommonData/interface/HGCalParameters.h" +#include "Geometry/HGCalCommonData/interface/HGCalProperty.h" +#include "Geometry/HGCalCommonData/interface/HGCalTypes.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferType.h" +#include "DD4hep/DetFactoryHelper.h" +#include "DataFormats/Math/interface/angle_units.h" +#include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +//#define EDM_ML_DEBUG +using namespace angle_units::operators; + +struct HGCalSiliconModule { + HGCalSiliconModule() { throw cms::Exception("HGCalGeom") << "Wrong initialization to HGCalSiliconModule"; } + HGCalSiliconModule(cms::DDParsingContext& ctxt, xml_h e) { + cms::DDNamespace ns(ctxt, e, true); + cms::DDAlgoArguments args(ctxt, e); + +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: Creating an instance"; +#endif + static constexpr double tol1 = 0.01 * dd4hep::mm; + static constexpr double tol2 = 0.00001 * dd4hep::mm; + + dd4hep::Volume mother = ns.volume(args.parentName()); + waferTypes_ = args.value("WaferTypes"); + facingTypes_ = args.value("FacingTypes"); + partialTypes_ = args.value("PartialTypes"); + orientationTypes_ = args.value("OrientationTypes"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "Number of types of wafers: " << waferTypes_ << " facings: " << facingTypes_ + << " partials: " << partialTypes_ << " Orientations: " << orientationTypes_; +#endif + firstLayer_ = args.value("FirstLayer"); + absorbMode_ = args.value("AbsorberMode"); + sensitiveMode_ = args.value("SensitiveMode"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "First Layer " << firstLayer_ << " and " + << "Absober:Sensitive mode " << absorbMode_ << ":" << sensitiveMode_; +#endif + zMinBlock_ = args.value("zMinBlock"); + waferSize_ = args.value("waferSize"); + waferSepar_ = args.value("SensorSeparation"); + sectors_ = args.value("Sectors"); + alpha_ = (1._pi) / sectors_; + cosAlpha_ = cos(alpha_); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "zStart " << cms::convert2mm(zMinBlock_) << " wafer width " + << cms::convert2mm(waferSize_) << " separations " << cms::convert2mm(waferSepar_) + << " sectors " << sectors_ << ":" << convertRadToDeg(alpha_) << ":" << cosAlpha_; +#endif + waferFull_ = args.value>("WaferNamesFull"); + waferPart_ = args.value>("WaferNamesPartial"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: " << waferFull_.size() << " full and " << waferPart_.size() + << " partial modules\nDDHGCalSiliconModule:Full Modules:"; + unsigned int i1max = static_cast(waferFull_.size()); + for (unsigned int i1 = 0; i1 < i1max; i1 += 2) { + std::ostringstream st1; + unsigned int i2 = std::min((i1 + 2), i1max); + for (unsigned int i = i1; i < i2; ++i) + st1 << " [" << i << "] " << waferFull_[i]; + edm::LogVerbatim("HGCalGeom") << st1.str() << std::endl; + } + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: Partial Modules:"; + i1max = static_cast(waferPart_.size()); + for (unsigned int i1 = 0; i1 < i1max; i1 += 2) { + std::ostringstream st1; + unsigned int i2 = std::min((i1 + 2), i1max); + for (unsigned int i = i1; i < i2; ++i) + st1 << " [" << i << "] " << waferPart_[i]; + edm::LogVerbatim("HGCalGeom") << st1.str() << std::endl; + } +#endif + materials_ = args.value>("MaterialNames"); + names_ = args.value>("VolumeNames"); + thick_ = args.value>("Thickness"); + copyNumber_.resize(materials_.size(), 1); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: " << materials_.size() << " types of volumes"; + for (unsigned int i = 0; i < names_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names_[i] << " of thickness " + << cms::convert2mm(thick_[i]) << " filled with " << materials_[i] + << " first copy number " << copyNumber_[i]; +#endif + layers_ = args.value>("Layers"); + layerThick_ = args.value>("LayerThick"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "There are " << layers_.size() << " blocks"; + for (unsigned int i = 0; i < layers_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << cms::convert2mm(layerThick_[i]) + << " with " << layers_[i] << " layers"; +#endif + layerType_ = args.value>("LayerType"); + layerSense_ = args.value>("LayerSense"); + layerCenter_ = args.value>("LayerCenter"); +#ifdef EDM_ML_DEBUG + for (unsigned int i = 0; i < layerCenter_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "LayerCenter [" << i << "] " << layerCenter_[i]; +#endif + if (firstLayer_ > 0) { + for (unsigned int i = 0; i < layerType_.size(); ++i) { + if (layerSense_[i] > 0) { + int ii = layerType_[i]; + copyNumber_[ii] = (layerSense_[i] == 1) ? firstLayer_ : (firstLayer_ + 1); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "First copy number for layer type " << i << ":" << ii << " with " + << materials_[ii] << " changed to " << copyNumber_[ii]; +#endif + } + } + } else { + firstLayer_ = 1; + } +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "There are " << layerType_.size() << " layers"; + for (unsigned int i = 0; i < layerType_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Layer [" << i << "] with material type " << layerType_[i] << " sensitive class " + << layerSense_[i]; +#endif + slopeB_ = args.value>("SlopeBottom"); + zFrontB_ = args.value>("ZFrontBottom"); + rMinFront_ = args.value>("RMinFront"); + slopeT_ = args.value>("SlopeTop"); + zFrontT_ = args.value>("ZFrontTop"); + rMaxFront_ = args.value>("RMaxFront"); +#ifdef EDM_ML_DEBUG + for (unsigned int i = 0; i < slopeB_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Bottom Block [" << i << "] Zmin " << cms::convert2mm(zFrontB_[i]) << " Rmin " + << cms::convert2mm(rMinFront_[i]) << " Slope " << slopeB_[i]; + for (unsigned int i = 0; i < slopeT_.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Top Block [" << i << "] Zmin " << cms::convert2mm(zFrontT_[i]) << " Rmax " + << cms::convert2mm(rMaxFront_[i]) << " Slope " << slopeT_[i]; +#endif + waferIndex_ = args.value>("WaferIndex"); + waferProperty_ = args.value>("WaferProperties"); + waferLayerStart_ = args.value>("WaferLayerStart"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "waferProperties with " << waferIndex_.size() << " entries in " + << waferLayerStart_.size() << " layers"; + for (unsigned int k = 0; k < waferLayerStart_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "LayerStart[" << k << "] " << waferLayerStart_[k]; + for (unsigned int k = 0; k < waferIndex_.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "Wafer[" << k << "] " << waferIndex_[k] << " (" + << HGCalWaferIndex::waferLayer(waferIndex_[k]) << ", " + << HGCalWaferIndex::waferU(waferIndex_[k]) << ", " + << HGCalWaferIndex::waferV(waferIndex_[k]) << ") : (" + << HGCalProperty::waferThick(waferProperty_[k]) << ":" + << HGCalProperty::waferPartial(waferProperty_[k]) << ":" + << HGCalProperty::waferOrient(waferProperty_[k]) << ")"; + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: NameSpace " << ns.name(); +#endif + +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "==>> Constructing DDHGCalSiliconModule..."; + copies_.clear(); +#endif + + double zi(zMinBlock_); + int laymin(0); + for (unsigned int i = 0; i < layers_.size(); ++i) { + double zo = zi + layerThick_[i]; + double routF = HGCalGeomTools::radius(zi, zFrontT_, rMaxFront_, slopeT_); + int laymax = laymin + layers_[i]; + double zz = zi; + double thickTot(0); + for (int ly = laymin; ly < laymax; ++ly) { + int ii = layerType_[ly]; + int copy = copyNumber_[ii]; + double hthick = 0.5 * thick_[ii]; + double rinB = HGCalGeomTools::radius(zo - tol1, zFrontB_, rMinFront_, slopeB_); + zz += hthick; + thickTot += thick_[ii]; + + std::string name = names_[ii] + std::to_string(copy); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: Layer " << ly << ":" << ii << " Front " + << cms::convert2mm(zi) << ", " << cms::convert2mm(routF) << " Back " + << cms::convert2mm(zo) << ", " << cms::convert2mm(rinB) + << " superlayer thickness " << cms::convert2mm(layerThick_[i]); +#endif + + dd4hep::Material matter = ns.material(materials_[ii]); + dd4hep::Volume glog; + + if (layerSense_[ly] < 1) { + std::vector pgonZ, pgonRin, pgonRout; + double rmax = routF * cosAlpha_ - tol1; + HGCalGeomTools::radius(zz - hthick, + zz + hthick, + zFrontB_, + rMinFront_, + slopeB_, + zFrontT_, + rMaxFront_, + slopeT_, + -layerSense_[ly], + pgonZ, + pgonRin, + pgonRout); + for (unsigned int isec = 0; isec < pgonZ.size(); ++isec) { + pgonZ[isec] -= zz; + if (layerSense_[ly] == 0 || absorbMode_ == 0) + pgonRout[isec] = rmax; + else + pgonRout[isec] = pgonRout[isec] * cosAlpha_ - tol1; + } + dd4hep::Solid solid = dd4hep::Polyhedra(sectors_, -alpha_, 2._pi, pgonZ, pgonRin, pgonRout); + ns.addSolidNS(ns.prepend(name), solid); + glog = dd4hep::Volume(solid.name(), solid, matter); + ns.addVolumeNS(glog); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: " << solid.name() << " polyhedra of " << sectors_ + << " sectors covering " << convertRadToDeg(-alpha_) << ":" + << convertRadToDeg(-alpha_ + 2._pi) << " with " << pgonZ.size() + << " sections and filled with " << matter.name(); + for (unsigned int k = 0; k < pgonZ.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << cms::convert2mm(pgonZ[k]) << " R " + << cms::convert2mm(pgonRin[k]) << ":" << cms::convert2mm(pgonRout[k]); +#endif + } else { + double rins = + (sensitiveMode_ < 1) ? rinB : HGCalGeomTools::radius(zz + hthick - tol1, zFrontB_, rMinFront_, slopeB_); + double routs = + (sensitiveMode_ < 1) ? routF : HGCalGeomTools::radius(zz - hthick, zFrontT_, rMaxFront_, slopeT_); + dd4hep::Solid solid = dd4hep::Tube(rins, routs, hthick, 0.0, 2._pi); + ns.addSolidNS(ns.prepend(name), solid); + glog = dd4hep::Volume(solid.name(), solid, matter); + ns.addVolumeNS(glog); + +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: " << solid.name() << " Tubs made of " << matter.name() + << " of dimensions " << cms::convert2mm(rinB) << ":" << cms::convert2mm(rins) + << ", " << cms::convert2mm(routF) << ":" << cms::convert2mm(routs) << ", " + << cms::convert2mm(hthick) << ", 0.0, 360.0 and position " << glog.name() + << " number " << copy << ":" << layerCenter_[copy - firstLayer_]; +#endif + positionSensitive(ctxt, e, glog, layerSense_[ly], (copy - firstLayer_)); + } + + dd4hep::Position r1(0, 0, zz); + mother.placeVolume(glog, copy, r1); + int inc = ((layerSense_[ly] > 0) && (facingTypes_ > 1)) ? 2 : 1; + copyNumber_[ii] = copy + inc; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: " << glog.name() << " number " << copy + << " positioned in " << mother.name() << " at (0,0," << cms::convert2mm(zz) + << ") with no rotation"; +#endif + zz += hthick; + } // End of loop over layers in a block + zi = zo; + laymin = laymax; + // Make consistency check of all the partitions of the block + if (std::abs(thickTot - layerThick_[i]) >= tol2) { + if (thickTot > layerThick_[i]) { + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick_[i]) + << " is smaller than " << cms::convert2mm(thickTot) + << ": thickness of all its components **** ERROR ****"; + } else { + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick_[i]) + << " does not match with " << cms::convert2mm(thickTot) << " of the components"; + } + } + } // End of loop over blocks + +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: " << copies_.size() << " different wafer copy numbers"; + int k(0); + for (std::unordered_set::const_iterator itr = copies_.begin(); itr != copies_.end(); ++itr, ++k) { + edm::LogVerbatim("HGCalGeom") << "Copy [" << k << "] : " << (*itr); + } + copies_.clear(); + edm::LogVerbatim("HGCalGeom") << "<<== End of DDHGCalSiliconModule construction..."; +#endif + } + + void positionSensitive(cms::DDParsingContext& ctxt, xml_h e, const dd4hep::Volume& glog, int layertype, int layer) { + cms::DDNamespace ns(ctxt, e, true); + static const double sqrt3 = std::sqrt(3.0); + int layercenter = layerCenter_[layer]; + int firstWafer = waferLayerStart_[layer]; + int lastWafer = + ((layer + 1 < static_cast(waferLayerStart_.size())) ? waferLayerStart_[layer + 1] + : static_cast(waferLayerStart_.size())); + double r = 0.5 * (waferSize_ + waferSepar_); + double R = 2.0 * r / sqrt3; + double dy = 0.75 * R; + const auto& xyoff = geomTools_.shiftXY(layercenter, (waferSize_ + waferSepar_)); +#ifdef EDM_ML_DEBUG + int ium(0), ivm(0), kount(0); + std::vector ntype(3, 0); + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: " << glog.name() << " r " << cms::convert2mm(r) << " R " + << cms::convert2mm(R) << " dy " << cms::convert2mm(dy) << " Shift " + << cms::convert2mm(xyoff.first) << ":" << cms::convert2mm(xyoff.second) + << " WaferSize " << cms::convert2mm((waferSize_ + waferSepar_)) << " index " + << firstWafer << ":" << (lastWafer - 1); +#endif + for (int k = firstWafer; k < lastWafer; ++k) { + int u = HGCalWaferIndex::waferU(waferIndex_[k]); + int v = HGCalWaferIndex::waferV(waferIndex_[k]); +#ifdef EDM_ML_DEBUG + int iu = std::abs(u); + int iv = std::abs(v); +#endif + int nr = 2 * v; + int nc = -2 * u + v; + double xpos = xyoff.first + nc * r; + double ypos = xyoff.second + nr * dy; + int type = HGCalProperty::waferThick(waferProperty_[k]); + int part = HGCalProperty::waferPartial(waferProperty_[k]); + int orien = HGCalProperty::waferOrient(waferProperty_[k]); + std::string wafer; + int i(999); + if (part == HGCalTypes::WaferFull) { + i = (layertype - 1) * waferTypes_ + type; + wafer = waferFull_[i]; + } else { + i = (part - 1) * waferTypes_ * facingTypes_ * orientationTypes_ + + (layertype - 1) * waferTypes_ * orientationTypes_ + type * orientationTypes_ + orien; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << " layertype:type:part:orien:ind " << layertype << ":" << type << ":" << part + << ":" << orien << ":" << i << ":" << waferPart_.size(); +#endif + wafer = waferPart_[i]; + } + int copy = HGCalTypes::packTypeUV(type, u, v); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << " DDHGCalSiliconModule: Layer" << HGCalWaferIndex::waferLayer(waferIndex_[k]) + << " Wafer " << wafer << " number " << copy << " type:part:orien:ind " << type + << ":" << part << ":" << orien << ":" << i << " layer:u:v:indx " + << (layer + firstLayer_) << ":" << u << ":" << v; + if (iu > ium) + ium = iu; + if (iv > ivm) + ivm = iv; + kount++; + if (copies_.count(copy) == 0) + copies_.insert(copy); +#endif + dd4hep::Position tran(xpos, ypos, 0.0); + glog.placeVolume(ns.volume(wafer), copy, tran); +#ifdef EDM_ML_DEBUG + ++ntype[type]; + edm::LogVerbatim("HGCalGeom") << " DDHGCalSiliconModule: " << wafer << " number " << copy << " type " << layertype + << ":" << type << " positioned in " << glog.name() << " at (" + << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) << ",0) with no rotation"; +#endif + } + +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalSiliconModule: Maximum # of u " << ium << " # of v " << ivm << " and " + << kount << " wafers (" << ntype[0] << ":" << ntype[1] << ":" << ntype[2] << ") for " + << glog.name(); +#endif + } + + //Required data members to cache the values from XML file + HGCalGeomTools geomTools_; + + int waferTypes_; // Number of wafer types + int facingTypes_; // Types of facings of modules toward IP + int partialTypes_; // Number of partial wafer types + int orientationTypes_; // Number of partial wafer orienations + int firstLayer_; // Copy # of the first sensitive layer + int absorbMode_; // Absorber mode + int sensitiveMode_; // Sensitive mode + double zMinBlock_; // Starting z-value of the block + double waferSize_; // Width of the wafer + double waferSepar_; // Sensor separation + int sectors_; // Sectors + std::vector waferFull_; // Names of full wafer modules + std::vector waferPart_; // Names of partial wafer modules + std::vector materials_; // names of materials + std::vector names_; // Names of volumes + std::vector thick_; // Thickness of the material + std::vector copyNumber_; // Initial copy numbers + std::vector layers_; // Number of layers in a section + std::vector layerThick_; // Thickness of each section + std::vector layerType_; // Type of the layer + std::vector layerSense_; // Content of a layer (sensitive?) + std::vector layerCenter_; // Centering of the wafers + std::vector slopeB_; // Slope at the lower R + std::vector zFrontB_; // Starting Z values for the slopes + std::vector rMinFront_; // Corresponding rMin's + std::vector slopeT_; // Slopes at the larger R + std::vector zFrontT_; // Starting Z values for the slopes + std::vector rMaxFront_; // Corresponding rMax's + std::vector waferIndex_; // Wafer index for the types + std::vector waferProperty_; // Wafer property + std::vector waferLayerStart_; // Index of wafers in each layer + std::unordered_set copies_; // List of copy #'s + double alpha_, cosAlpha_; +}; + +static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { + HGCalSiliconModule eealgo(ctxt, e); + return cms::s_executed; +} + +DECLARE_DDCMS_DETELEMENT(DDCMS_hgcal_DDHGCalSiliconModule, algorithm) diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalTBModule.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalTBModule.cc index e01e8f1b2bcaf..463f4e51174bf 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalTBModule.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalTBModule.cc @@ -1,6 +1,7 @@ -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DD4hep/DetFactoryHelper.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" #include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h" @@ -8,16 +9,15 @@ #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" //#define EDM_ML_DEBUG - #ifdef EDM_ML_DEBUG #include #endif -using namespace cms_units::operators; +using namespace angle_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); cms::DDAlgoArguments args(ctxt, e); - static constexpr double tol2 = 0.00001; + static constexpr double tol2 = 0.00001 * dd4hep::mm; const auto& wafers = args.value >("WaferName"); // Wafers const auto& covers = args.value >("CoverName"); // Insensitive layers of hexagonal size @@ -43,16 +43,17 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModule: " << materials.size() << " types of volumes"; for (unsigned int i = 0; i < names.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names[i] << " of thickness " << thick[i] - << " filled with " << materials[i] << " first copy number " << copyNumber[i]; + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names[i] << " of thickness " + << cms::convert2mm(thick[i]) << " filled with " << materials[i] + << " first copy number " << copyNumber[i]; #endif const auto& layers = args.value >("Layers"); // Number of layers in a section const auto& layerThick = args.value >("LayerThick"); // Thickness of each section #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModule: " << layers.size() << " blocks"; for (unsigned int i = 0; i < layers.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << layerThick[i] << " with " << layers[i] - << " layers"; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << cms::convert2mm(layerThick[i]) << " with " + << layers[i] << " layers"; #endif const auto& layerType = args.value >("LayerType"); // Type of the layer const auto& layerSense = args.value >("LayerSense"); // Content of a layer (sensitive?) @@ -69,9 +70,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const auto& absorbW = args.value("absorberW"); // Width of the absorber const auto& absorbH = args.value("absorberH"); // Height of the absorber #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModule: zStart " << zMinBlock << " rFineCoarse " << rMaxFine - << " wafer width " << waferW << " gap among wafers " << waferGap << " absorber width " - << absorbW << " absorber height " << absorbH; + edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModule: zStart " << cms::convert2mm(zMinBlock) << " rFineCoarse " + << cms::convert2mm(rMaxFine) << " wafer width " << cms::convert2mm(waferW) + << " gap among wafers " << cms::convert2mm(waferGap) << " absorber width " + << cms::convert2mm(absorbW) << " absorber height " << cms::convert2mm(absorbH); #endif const auto& slopeB = args.value >("SlopeBottom"); // Slope at the lower R const auto& slopeT = args.value >("SlopeTop"); // Slopes at the larger R @@ -81,8 +83,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModule: Bottom slopes " << slopeB[0] << ":" << slopeB[1] << " and " << slopeT.size() << " slopes for top"; for (unsigned int i = 0; i < slopeT.size(); ++i) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << zFront[i] << " Rmax " << rMaxFront[i] << " Slope " - << slopeT[i]; + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << cms::convert2mm(zFront[i]) << " Rmax " + << cms::convert2mm(rMaxFront[i]) << " Slope " << slopeT[i]; #endif std::string idNameSpace = static_cast(ns.name()); // Namespace of this and ALL sub-parts const auto& idName = args.parentName(); // Name of the "parent" volume. @@ -118,8 +120,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext std::string name = "HGCal" + names[ii] + std::to_string(copy); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModule: Layer " << ly << ":" << ii << " Front " << zi << ", " << routF - << " Back " << zo << ", " << rinB << " superlayer thickness " << layerThick[i]; + edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModule: Layer " << ly << ":" << ii << " Front " << cms::convert2mm(zi) + << ", " << cms::convert2mm(routF) << " Back " << cms::convert2mm(zo) << ", " + << cms::convert2mm(rinB) << " superlayer thickness " + << cms::convert2mm(layerThick[i]); #endif dd4hep::Material matter = ns.material(materials[ii]); @@ -129,23 +133,25 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ns.addSolidNS(ns.prepend(name), solid); glog = dd4hep::Volume(solid.name(), solid, matter); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModule test: " << solid.name() << " box of dimension " << absorbW - << ":" << absorbH << ":" << 0.5 * thick[ii]; + edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModule test: " << solid.name() << " box of dimension " + << cms::convert2mm(absorbW) << ":" << cms::convert2mm(absorbH) << ":" + << cms::convert2mm(0.5 * thick[ii]); #endif } else { - dd4hep::Solid solid = dd4hep::Tube(rinB, routF, 0.5 * thick[ii], 0.0, 2 * cms_units::piRadians); + dd4hep::Solid solid = dd4hep::Tube(rinB, routF, 0.5 * thick[ii], 0.0, 2._pi); ns.addSolidNS(ns.prepend(name), solid); glog = dd4hep::Volume(solid.name(), solid, matter); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModule: " << solid.name() << " Tubs made of " << materials[ii] - << " of dimensions " << rinB << ", " << routF << ", " << 0.5 * thick[ii] - << ", 0.0, 360.0"; + << " of dimensions " << cms::convert2mm(rinB) << ", " << cms::convert2mm(routF) + << ", " << cms::convert2mm(0.5 * thick[ii]) << ", 0.0, 360.0"; #endif int ncol = static_cast(2.0 * routF / ww) + 1; int nrow = static_cast(routF / (ww * tan(30._deg))) + 1; #ifdef EDM_ML_DEBUG int incm(0), inrm(0), kount(0), ntot(0), nin(0), nfine(0), ncoarse(0); - edm::LogVerbatim("HGCalGeom") << glog.name() << " rout " << routF << " Row " << nrow << " Column " << ncol; + edm::LogVerbatim("HGCalGeom") << glog.name() << " rout " << cms::convert2mm(routF) << " Row " << nrow + << " Column " << ncol; #endif double xc[6], yc[6]; for (int nr = -nrow; nr <= nrow; ++nr) { @@ -203,8 +209,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext dd4hep::Position tran(xpos, ypos, 0.0); glog.placeVolume(glog1, copyL, tran); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << glog1.name() << " number " << copyL - << " positioned in " << glog.name() << " at " << tran; + edm::LogVerbatim("HGCalGeom") + << "DDHGCalModule: " << glog1.name() << " number " << copyL << " positioned in " << glog.name() + << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) << ",0)"; #endif } } @@ -213,7 +220,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: # of columns " << incm << " # of rows " << inrm << " and " << nin << ":" << kount << ":" << ntot << " wafers (" << nfine << ":" << ncoarse - << ") for " << glog.name() << " R " << rinB << ":" << routF; + << ") for " << glog.name() << " R " << cms::convert2mm(rinB) << ":" + << cms::convert2mm(routF); #endif } dd4hep::Position r1(0, 0, zz); @@ -221,7 +229,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ++copyNumber[ii]; #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModule test: " << glog.name() << " number " << copy - << " positioned in " << module.name() << " at " << r1; + << " positioned in " << module.name() << " at (0,0," << cms::convert2mm(zz) << ")"; #endif zz += (0.5 * thick[ii]); } // End of loop over layers in a block @@ -229,11 +237,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext laymin = laymax; if (fabs(thickTot - layerThick[i]) > tol2) { if (thickTot > layerThick[i]) { - edm::LogError("HGCalGeom") << "Thickness of the partition " << layerThick[i] << " is smaller than thickness " - << thickTot << " of all its components **** ERROR ****\n"; + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick[i]) + << " is smaller than thickness " << cms::convert2mm(thickTot) + << " of all its components **** ERROR ****\n"; } else { - edm::LogWarning("HGCalGeom") << "Thickness of the partition " << layerThick[i] << " does not match with " - << thickTot << " of the components\n"; + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(layerThick[i]) + << " does not match with " << cms::convert2mm(thickTot) << " of the components\n"; } } } // End of loop over blocks diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalTBModuleX.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalTBModuleX.cc index 972ff1fa32226..bb3032d35a587 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalTBModuleX.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalTBModuleX.cc @@ -7,16 +7,17 @@ #include -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DD4hep/DetFactoryHelper.h" #include "DetectorDescription/Core/interface/DDSplit.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; namespace DDHGCalGeom { void constructLayers(const cms::DDNamespace& ns, @@ -41,7 +42,7 @@ namespace DDHGCalGeom { double totalWidth, bool ignoreCenter, dd4hep::Volume& module) { - static constexpr double tolerance = 0.00001; + static constexpr double tolerance = 0.00001 * dd4hep::mm; static const double tan30deg = tan(30._deg); double zi(zFront), thickTot(0); for (int ly = firstLayer; ly <= lastLayer; ++ly) { @@ -54,8 +55,8 @@ namespace DDHGCalGeom { std::string name = "HGCal" + names[ii] + std::to_string(copy); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: " << name << " Layer " << ly << ":" << ii << " Z " - << convertCmToMm(zi) << ":" << convertCmToMm(zo) << " Thick " - << convertCmToMm(layerThick[ii]) << " Sense " << layerSense[ly]; + << cms::convert2mm(zi) << ":" << cms::convert2mm(zo) << " Thick " + << cms::convert2mm(layerThick[ii]) << " Sense " << layerSense[ly]; #endif dd4hep::Material matter = ns.material(materials[ii]); dd4hep::Volume glog; @@ -65,14 +66,14 @@ namespace DDHGCalGeom { glog = dd4hep::Volume(solid.name(), solid, matter); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: " << solid.name() << " box of dimension " - << convertCmToMm(absorbW) << ":" << convertCmToMm(absorbH) << ":" - << convertCmToMm(0.5 * layerThick[ii]); + << cms::convert2mm(absorbW) << ":" << cms::convert2mm(absorbH) << ":" + << cms::convert2mm(0.5 * layerThick[ii]); #endif dd4hep::Position r1(0, 0, zz); module.placeVolume(glog, copy, r1); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: " << glog.name() << " number " << copy << " positioned in " - << module.name() << " at " << r1 << " with no rotation"; + << module.name() << " at (0,0," << cms::convert2mm(zz) << ") with no rotation"; #endif } else if (layerSense[ly] > 0) { double dx = 0.5 * waferTot; @@ -83,8 +84,8 @@ namespace DDHGCalGeom { #ifdef EDM_ML_DEBUG int incm(0), inrm(0); edm::LogVerbatim("HGCalGeom") << module.name() << " Copy " << copy << " Type " << layerSense[ly] << " rout " - << convertCmToMm(rMax) << " Row " << nrow << " column " << ncol << " ncrMax " - << maxModule[ly] << " Z " << convertCmToMm(zz) << " Center " << ignoreCenter + << cms::convert2mm(rMax) << " Row " << nrow << " column " << ncol << " ncrMax " + << maxModule[ly] << " Z " << cms::convert2mm(zz) << " Center " << ignoreCenter << " name " << name << " matter " << matter.name(); int kount(0); #endif @@ -131,14 +132,14 @@ namespace DDHGCalGeom { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: " << glog1.name() << " number " << copy << " positioned in " - << module.name() << " at " << tran << " with no rotation"; + << module.name() << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) << "," + << cms::convert2mm(zz) << ") with no rotation"; #endif dd4hep::Volume glog2 = (rpos < rMaxFine) ? ns.volume(wafers[0]) : ns.volume(wafers[1]); glog1.placeVolume(glog2, copyx); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") - << "DDHGCalTBModuleX: " << glog2.name() << " number " << copyx << " positioned in " - << glog1.name() << " at (0, 0, 0) with no rotation"; + edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: " << glog2.name() << " number " << copyx + << " positioned in " << glog1.name() << " at (0,0,0) with no rotation"; #endif if (layerSense[ly] == 1) copies.insert(copy); @@ -149,7 +150,8 @@ namespace DDHGCalGeom { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: " << glog2.name() << " number " << copyx << " positioned in " - << module.name() << " at " << tran << " with no rotation"; + << module.name() << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) << "," + << cms::convert2mm(zz) << ") with no rotation"; #endif } #ifdef EDM_ML_DEBUG @@ -174,13 +176,15 @@ namespace DDHGCalGeom { if (fabs(thickTot - totalWidth) > tolerance) { if (thickTot > totalWidth) { - edm::LogError("HGCalGeom") << "Thickness of the partition " << totalWidth << " is smaller than " << thickTot + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(totalWidth) + << " is smaller than " << cms::convert2mm(thickTot) << ": total thickness of all its components in " << module.name() << " Layers " << firstLayer << ":" << lastLayer << ":" << ignoreCenter << "**** ERROR ****"; } else { - edm::LogWarning("HGCalGeom") << "Thickness of the partition " << totalWidth << " does not match with " - << thickTot << " of the components in " << module.name() << " Layers " - << firstLayer << ":" << lastLayer << ":" << ignoreCenter; + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(totalWidth) + << " does not match with " << cms::convert2mm(thickTot) << " of the components in " + << module.name() << " Layers " << firstLayer << ":" << lastLayer << ":" + << ignoreCenter; } } } @@ -216,7 +220,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: " << materials.size() << " types of volumes"; for (unsigned int i = 0; i < names.size(); ++i) edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names[i] << " of thickness " - << convertCmToMm(layerThick[i]) << " filled with " << materials[i] + << cms::convert2mm(layerThick[i]) << " filled with " << materials[i] << " first copy number " << copyNumber[i]; #endif const auto& blockThick = args.value >("BlockThick"); // Thickness of each section @@ -233,11 +237,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: " << blockThick.size() << " blocks with in/out " << inOut; for (unsigned int i = 0; i < blockThick.size(); ++i) { if (inOut > 1) - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << convertCmToMm(blockThick[i]) + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << cms::convert2mm(blockThick[i]) << " with inner layers " << layerFrontIn[i] << ":" << layerBackIn[i] << " and outer layers " << layerFrontOut[i] << ":" << layerBackOut[i]; else - edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << convertCmToMm(blockThick[i]) + edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << cms::convert2mm(blockThick[i]) << " with inner layers " << layerFrontIn[i] << ":" << layerBackIn[i]; } #endif @@ -261,11 +265,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext double waferTot = waferW + waferGap; std::string idName = DDSplit(args.parentName()).first; #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: zStart " << convertCmToMm(zMinBlock) << " rFineCoarse " - << convertCmToMm(rMaxFine) << " wafer width " << convertCmToMm(waferW) - << " gap among wafers " << convertCmToMm(waferGap) << " absorber width " - << convertCmToMm(absorbW) << " absorber height " << convertCmToMm(absorbH) << " rMax " - << convertCmToMm(rMax) << ":" << convertCmToMm(rMaxB); + edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: zStart " << cms::convert2mm(zMinBlock) << " rFineCoarse " + << cms::convert2mm(rMaxFine) << " wafer width " << cms::convert2mm(waferW) + << " gap among wafers " << cms::convert2mm(waferGap) << " absorber width " + << cms::convert2mm(absorbW) << " absorber height " << cms::convert2mm(absorbH) + << " rMax " << cms::convert2mm(rMax) << ":" << cms::convert2mm(rMaxB); edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: NameSpace " << ns.name() << " Parent Name " << idName; #endif std::unordered_set copies; // List of copy #'s @@ -277,9 +281,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext double zo = zi + blockThick[i]; std::string name = idName + "Block" + std::to_string(i); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: Block " << i << ":" << name << " z " << convertCmToMm(zi) << ":" - << convertCmToMm(zo) << " R " << convertCmToMm(rMaxB) << " T " - << convertCmToMm(blockThick[i]); + edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: Block " << i << ":" << name << " z " << cms::convert2mm(zi) + << ":" << cms::convert2mm(zo) << " R " << cms::convert2mm(rMaxB) << " T " + << cms::convert2mm(blockThick[i]); #endif dd4hep::Material matter = ns.material(genMat); dd4hep::Solid solid = dd4hep::Tube(0, rMaxB, 0.5 * blockThick[i], 0.0, 2._pi); @@ -290,10 +294,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext parent.placeVolume(glog, i, r1); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: " << glog.name() << " number " << i << " positioned in " - << args.parentName() << " at " << r1 << " with no rotation"; + << args.parentName() << " at (0,0," << cms::convert2mm(zz) << ") with no rotation"; edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: \t\tInside Block " << i << " Layers " << layerFrontIn[i] << ":" - << layerBackIn[i] << " zFront " << convertCmToMm(-0.5 * blockThick[i]) - << " thickness " << convertCmToMm(blockThick[i]) << " ignore Center 0"; + << layerBackIn[i] << " zFront " << -cms::convert2mm(0.5 * blockThick[i]) + << " thickness " << cms::convert2mm(blockThick[i]) << " ignore Center 0"; #endif DDHGCalGeom::constructLayers(ns, wafers, @@ -320,8 +324,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext if (inOut > 1) { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: \t\tInside Block " << i << " Layers " << layerFrontOut[i] - << ":" << layerBackOut[i] << " zFront " << convertCmToMm(-0.5 * blockThick[i]) - << " thickness " << convertCmToMm(blockThick[i]) << " ignore Center 1"; + << ":" << layerBackOut[i] << " zFront " << -cms::convert2mm(0.5 * blockThick[i]) + << " thickness " << cms::convert2mm(blockThick[i]) << " ignore Center 1"; #endif DDHGCalGeom::constructLayers(ns, wafers, @@ -349,8 +353,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext zi = zo; } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: All blocks are placed in " << convertCmToMm(zMinBlock) << ":" - << convertCmToMm(zi) << " with " << copies.size() << " different wafer copy numbers"; + edm::LogVerbatim("HGCalGeom") << "DDHGCalTBModuleX: All blocks are placed in " << cms::convert2mm(zMinBlock) << ":" + << cms::convert2mm(zi) << " with " << copies.size() << " different wafer copy numbers"; #endif return cms::s_executed; diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWafer.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWafer.cc index 7dcfad3476c4f..fb7051ca8ee0e 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWafer.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWafer.cc @@ -1,12 +1,12 @@ #include "DD4hep/DetFactoryHelper.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" //#define EDM_ML_DEBUG - -using namespace cms_units::operators; +using namespace angle_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); @@ -27,7 +27,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext edm::LogVerbatim("HGCalGeom") << childNames.size() << " children: " << childNames[0] << "; " << childNames[1] << " positioned in " << nCellsRow.size() << " rows and " << nColumns << " columns with lowest column at " << nBottomY << " in mother " << parentName - << " of size " << waferSize; + << " of size " << cms::convert2mm(waferSize); for (unsigned int k = 0; k < nCellsRow.size(); ++k) edm::LogVerbatim("HGCalGeom") << "[" << k << "] Ncells " << nCellsRow[k] << " Edge rotations " << angleEdges[2 * k] << ":" << angleEdges[2 * k + 1] << " Type of edge cells " << detectorType[2 * k] @@ -57,8 +57,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext dd4hep::Rotation3D rotation; if (irot != 0) { #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferAlgo: Creating " - << "rotation " + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferAlgo: Creating rotation " << "\t90, " << irot << ", 90, " << (irot + 90) << ", 0, 0"; #endif double phix = convertDegToRad(irot); @@ -74,7 +73,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ++kount; #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalWafer: " << name << " number " << copy << " positioned in " << parentName - << " at " << tran << " with " << rotation; + << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) << ",0) with " + << rotation; #endif } ny += incAlongY; diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWafer8.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWafer8.cc index 3a23e65f4ec78..4bbbe45c25821 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWafer8.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWafer8.cc @@ -7,6 +7,7 @@ #include "DD4hep/DetFactoryHelper.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" @@ -17,18 +18,19 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext cms::DDNamespace ns(ctxt, e, true); cms::DDAlgoArguments args(ctxt, e); std::string motherName = args.parentName(); - auto waferSize = args.value("WaferSize"); - auto waferT = args.value("WaferThick"); - auto waferSepar = args.value("SensorSeparation"); - auto nCells = args.value("NCells"); - auto cellType = args.value("CellType"); - auto material = args.value("Material"); - auto cellNames = args.value>("CellNames"); + const auto& waferSize = args.value("WaferSize"); + const auto& waferT = args.value("WaferThick"); + const auto& waferSepar = args.value("SensorSeparation"); + const auto& nCells = args.value("NCells"); + const auto& cellType = args.value("CellType"); + const auto& material = args.value("Material"); + const auto& cellNames = args.value>("CellNames"); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "DDHGCalWafer8: Wafer 2r " << waferSize << " T " << waferT << " Half Separation " - << waferSepar << " Cells/Wafer " << nCells << " Cell Type " << cellType << " Material " - << material << " Names " << motherName << " NameSpace " << ns.name() << " # of cells " + edm::LogVerbatim("HGCalGeom") << "DDHGCalWafer8: Wafer 2r " << cms::convert2mm(waferSize) << " T " + << cms::convert2mm(waferT) << " Half Separation " << cms::convert2mm(waferSepar) + << " Cells/Wafer " << nCells << " Cell Type " << cellType << " Material " << material + << " Names " << motherName << " NameSpace " << ns.name() << " # of cells " << cellNames.size(); for (unsigned int k = 0; k < cellNames.size(); ++k) edm::LogVerbatim("HGCalGeom") << "DDHGCalWafer8: Cell[" << k << "] " << cellNames[k]; @@ -54,11 +56,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ns.addVolumeNS(glog); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalWafer8: " << solid.name() << " extruded polygon made of " << material - << " z|x|y|s (0) " << zw[0] << ":" << zx[0] << ":" << zy[0] << ":" << scale[0] - << " z|x|y|s (1) " << zw[1] << ":" << zx[1] << ":" << zy[1] << ":" << scale[1] - << " and " << xM.size() << " edges"; + << " z|x|y|s (0) " << cms::convert2mm(zw[0]) << ":" << cms::convert2mm(zx[0]) << ":" + << cms::convert2mm(zy[0]) << ":" << scale[0] << " z|x|y|s (1) " + << cms::convert2mm(zw[1]) << ":" << cms::convert2mm(zx[1]) << ":" + << cms::convert2mm(zy[1]) << ":" << scale[1] << " and " << xM.size() << " edges"; for (unsigned int k = 0; k < xM.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << xM[k] << ":" << yM[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << cms::convert2mm(xM[k]) << ":" << cms::convert2mm(yM[k]); #endif dd4hep::Rotation3D rotation; @@ -104,7 +107,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext glog.placeVolume(ns.volume(cellNames[cell]), copy, dd4hep::Transform3D(rotation, tran)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalWafer8: " << cellNames[cell] << " number " << copy << " position in " - << glog.name() << " at " << tran << " with " << rotation; + << glog.name() << " at (" << cms::convert2mm(xp) << ", " << cms::convert2mm(yp) + << ",0) with no rotation"; #endif } } diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWaferAlgo.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWaferAlgo.cc index 0f3cb2dea5878..6bef5f8141e29 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWaferAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWaferAlgo.cc @@ -1,11 +1,12 @@ #include "DD4hep/DetFactoryHelper.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" //#define EDM_ML_DEBUG -using namespace cms_units::operators; +using namespace angle_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); @@ -23,8 +24,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext edm::LogVerbatim("HGCalGeom") << childNames.size() << " children: " << childNames[0] << "; " << childNames[1] << " positioned " << positionX.size() << " times with cell size " << cellSize; for (unsigned int k = 0; k < positionX.size(); ++k) - edm::LogVerbatim("HGCalGeom") << "[" << k << "] x " << positionX[k] << " y " << positionY[k] << " angle " - << angles[k] << " detector " << detectorType[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] x " << cms::convert2mm(positionX[k]) << " y " + << cms::convert2mm(positionY[k]) << " angle " << angles[k] << " detector " + << detectorType[k]; std::string idName = args.parentName(); // Name of the "parent" volume. edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferAlgo debug: Parent " << idName << " NameSpace " << ns.name(); @@ -53,7 +55,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext mother.placeVolume(ns.volume(name), copy, dd4hep::Transform3D(rotation, tran)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferAlgo: " << name << " number " << copy << " positioned in " << idName - << " at " << tran << " with " << rotation; + << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos) << ",0) with " + << rotation; #endif } diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWaferF.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWaferF.cc new file mode 100644 index 0000000000000..67eff7773090a --- /dev/null +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWaferF.cc @@ -0,0 +1,195 @@ +/* + * DDHGCalWaferF.cc + * + * Created on: 09-Jan-2021 + */ + +#include "DD4hep/DetFactoryHelper.h" +#include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "Geometry/HGCalCommonData/interface/HGCalTypes.h" + +#include +#include +#include + +//#define EDM_ML_DEBUG + +static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { + cms::DDNamespace ns(ctxt, e, true); + cms::DDAlgoArguments args(ctxt, e); + std::string motherName = args.parentName(); + const auto& material = args.value("ModuleMaterial"); + const auto& thick = args.value("ModuleThickness"); + const auto& waferSize = args.value("WaferSize"); + const auto& waferSepar = args.value("SensorSeparation"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: Module " << motherName << " made of " << material << " T " + << cms::convert2mm(thick) << " Wafer 2r " << cms::convert2mm(waferSize) + << " Half Separation " << cms::convert2mm(waferSepar); +#endif + const auto& layerNames = args.value>("LayerNames"); + const auto& materials = args.value>("LayerMaterials"); + const auto& layerThick = args.value>("LayerThickness"); + const auto& layerType = args.value>("LayerTypes"); + std::vector copyNumber(materials.size(), 1); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: " << layerNames.size() << " types of volumes"; + for (unsigned int i = 0; i < layerNames.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << layerNames[i] << " of thickness " + << cms::convert2mm(layerThick[i]) << " filled with " << materials[i] << " type " + << layerType[i]; +#endif + const auto& layers = args.value>("Layers"); +#ifdef EDM_ML_DEBUG + std::ostringstream st1; + for (unsigned int i = 0; i < layers.size(); ++i) + st1 << " [" << i << "] " << layers[i]; + edm::LogVerbatim("HGCalGeom") << "There are " << layers.size() << " blocks" << st1.str(); +#endif + const auto& nCells = args.value("NCells"); + const auto& cellType = args.value("CellType"); + const auto& cellNames = args.value>("CellNames"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: Cells/Wafer " << nCells << " Cell Type " << cellType << " NameSpace " + << ns.name() << " # of cells " << cellNames.size(); + for (unsigned int k = 0; k < cellNames.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: Cell[" << k << "] " << cellNames[k]; + int counter(0); +#endif + + static constexpr double tol = 0.00001 * dd4hep::mm; + static const double sqrt3 = std::sqrt(3.0); + double rM = 0.5 * (waferSize + waferSepar); + double RM2 = rM / sqrt3; + double R = waferSize / (3.0 * nCells); + double r = 0.5 * R * sqrt3; + double r2 = 0.5 * waferSize; + double R2 = r2 / sqrt3; + + // Mother Module + std::vector xM = {rM, 0, -rM, -rM, 0, rM}; + std::vector yM = {RM2, 2 * RM2, RM2, -RM2, -2 * RM2, -RM2}; + std::vector zw = {-0.5 * thick, 0.5 * thick}; + std::vector zx(2, 0), zy(2, 0), scale(2, 1.0); + + dd4hep::Material matter = ns.material(material); + dd4hep::Solid solid = dd4hep::ExtrudedPolygon(xM, yM, zw, zx, zy, scale); + ns.addSolidNS(ns.prepend(motherName), solid); + dd4hep::Volume glogM = dd4hep::Volume(solid.name(), solid, matter); + ns.addVolumeNS(glogM); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: " << solid.name() << " extruded polygon made of " << material + << " z|x|y|s (0) " << cms::convert2mm(zw[0]) << ":" << cms::convert2mm(zx[0]) << ":" + << cms::convert2mm(zy[0]) << ":" << scale[0] << " z|x|y|s (1) " + << cms::convert2mm(zw[1]) << ":" << cms::convert2mm(zx[1]) << ":" + << cms::convert2mm(zy[1]) << ":" << scale[1] << " and " << xM.size() << " edges"; + for (unsigned int k = 0; k < xM.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << cms::convert2mm(xM[k]) << ":" << cms::convert2mm(yM[k]); +#endif + + // Then the layers + dd4hep::Rotation3D rotation; + std::vector xL = {r2, 0, -r2, -r2, 0, r2}; + std::vector yL = {R2, 2 * R2, R2, -R2, -2 * R2, -R2}; + std::vector glogs(materials.size()); + double zi(-0.5 * thick), thickTot(0.0); + for (unsigned int l = 0; l < layers.size(); l++) { + unsigned int i = layers[l]; + if (copyNumber[i] == 1) { + zw[0] = -0.5 * layerThick[i]; + zw[1] = 0.5 * layerThick[i]; + solid = dd4hep::ExtrudedPolygon(xL, yL, zw, zx, zy, scale); + ns.addSolidNS(ns.prepend(layerNames[i]), solid); + matter = ns.material(materials[i]); + glogs[i] = dd4hep::Volume(solid.name(), solid, matter); + ns.addVolumeNS(glogs[i]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: " << solid.name() << " extruded polygon made of " << materials[i] + << " z|x|y|s (0) " << cms::convert2mm(zw[0]) << ":" << cms::convert2mm(zx[0]) << ":" + << cms::convert2mm(zy[0]) << ":" << scale[0] << " z|x|y|s (1) " + << cms::convert2mm(zw[1]) << ":" << cms::convert2mm(zx[1]) << ":" + << cms::convert2mm(zy[1]) << ":" << scale[1] << " and " << xM.size() << " edges"; + for (unsigned int k = 0; k < xL.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << cms::convert2mm(xL[k]) << ":" << cms::convert2mm(yL[k]); +#endif + } + dd4hep::Position tran0(0, 0, (zi + 0.5 * layerThick[i])); + glogM.placeVolume(glogs[i], copyNumber[i], tran0); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferF: " << glogs[i].name() << " number " << copyNumber[i] + << " positioned in " << glogM.name() << " at (0,0," + << cms::convert2mm(zi + 0.5 * layerThick[i]) << ") with no rotation"; +#endif + ++copyNumber[i]; + zi += layerThick[i]; + thickTot += layerThick[i]; + + if (layerType[i] > 0) { + for (int u = 0; u < 2 * nCells; ++u) { + for (int v = 0; v < 2 * nCells; ++v) { + if (((v - u) < nCells) && (u - v) <= nCells) { +#ifdef EDM_ML_DEBUG + counter++; +#endif + int n2 = nCells / 2; + double yp = (u - 0.5 * v - n2) * 2 * r; + double xp = (1.5 * (v - nCells) + 1.0) * R; + int cell(0); + if ((u == 0) && (v == 0)) + cell = 7; + else if ((u == 0) && (v == nCells - 1)) + cell = 8; + else if ((u == nCells) && (v == 2 * nCells - 1)) + cell = 9; + else if ((u == 2 * nCells - 1) && (v == 2 * nCells - 1)) + cell = 10; + else if ((u == 2 * nCells - 1) && (v == nCells - 1)) + cell = 11; + else if ((u == nCells) && (v == 0)) + cell = 12; + else if (u == 0) + cell = 1; + else if ((v - u) == (nCells - 1)) + cell = 4; + else if (v == (2 * nCells - 1)) + cell = 2; + else if (u == (2 * nCells - 1)) + cell = 5; + else if ((u - v) == nCells) + cell = 3; + else if (v == 0) + cell = 6; + dd4hep::Position tran(xp, yp, 0); + int copy = HGCalTypes::packCellTypeUV(cellType, u, v); + glogs[i].placeVolume(ns.volume(cellNames[cell]), copy, dd4hep::Transform3D(rotation, tran)); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") + << "DDHGCalWaferF: " << cellNames[cell] << " number " << copy << " positioned in " << glogs[i].name() + << " at (" << cms::convert2mm(xp) << "," << cms::convert2mm(yp) << ",0) with no rotation"; +#endif + } + } + } + } + } +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "\nDDHGCalWaferF::Counter : " << counter << "\n===============================\n"; +#endif + if (std::abs(thickTot - thick) >= tol) { + if (thickTot > thick) { + edm::LogError("HGCalGeom") << "Thickness of the partition " << thick << " is smaller than " << thickTot + << ": thickness of all its components **** ERROR ****"; + } else { + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << thick << " does not match with " << thickTot + << " of the components"; + } + } + + return cms::s_executed; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(DDCMS_hgcal_DDHGCalWaferF, algorithm) diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWaferP.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWaferP.cc new file mode 100644 index 0000000000000..aaa5994645947 --- /dev/null +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalWaferP.cc @@ -0,0 +1,195 @@ +/* + * DDHGCalWaferP.cc + * + * Created on: 09-Jan-2021 + */ + +#include "DD4hep/DetFactoryHelper.h" +#include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "Geometry/HGCalCommonData/interface/HGCalTypes.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferMask.h" + +#include +#include +#include + +//#define EDM_ML_DEBUG + +static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { + cms::DDNamespace ns(ctxt, e, true); + cms::DDAlgoArguments args(ctxt, e); + std::string parentName = args.parentName(); + const auto& material = args.value("ModuleMaterial"); + const auto& thick = args.value("ModuleThickness"); + const auto& waferSize = args.value("WaferSize"); + const auto& waferSepar = args.value("SensorSeparation"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: Module " << parentName << " made of " << material << " T " + << cms::convert2mm(thick) << " Wafer 2r " << cms::convert2mm(waferSize) + << " Half Separation " << cms::convert2mm(waferSepar); +#endif + const auto& tags = args.value>("Tags"); + const auto& partialTypes = args.value>("PartialTypes"); + const auto& orientations = args.value>("Orientations"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: " << tags.size() << " variations of wafer types"; + for (unsigned int k = 0; k < tags.size(); ++k) + edm::LogVerbatim("HGCalGeom") << "Type[" << k << "] " << tags[k] << " Partial " << partialTypes[k] + << " Orientation " << orientations[k]; +#endif + const auto& layerNames = args.value>("LayerNames"); + const auto& materials = args.value>("LayerMaterials"); + const auto& layerThick = args.value>("LayerThickness"); + const auto& layerType = args.value>("LayerTypes"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: " << layerNames.size() << " types of volumes"; + for (unsigned int i = 0; i < layerNames.size(); ++i) + edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << layerNames[i] << " of thickness " + << cms::convert2mm(layerThick[i]) << " filled with " << materials[i] << " type " + << layerType[i]; +#endif + const auto& layers = args.value>("Layers"); +#ifdef EDM_ML_DEBUG + std::ostringstream st1; + for (unsigned int i = 0; i < layers.size(); ++i) + st1 << " [" << i << "] " << layers[i]; + edm::LogVerbatim("HGCalGeom") << "There are " << layers.size() << " blocks" << st1.str(); +#endif + const auto& senseName = args.value("SenseName"); + const auto& senseT = args.value("SenseThick"); + const auto& senseType = args.value("SenseType"); + const auto& posSense = args.value("PosSensitive"); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: NameSpace " << ns.name() << " Sensitive Layer Name " << senseName + << " Thickness " << senseT << " Type " << senseType << " Position " << posSense; +#endif + + static constexpr double tol = 0.00001 * dd4hep::mm; + static const double sqrt3 = std::sqrt(3.0); + double rM = 0.5 * (waferSize + waferSepar); + double RM = 2.0 * rM / sqrt3; + double r = 0.5 * waferSize; + double R = 2.0 * r / sqrt3; + + // Loop over all types + for (unsigned int k = 0; k < tags.size(); ++k) { + // First the mother + std::string mother = parentName + tags[k]; + std::vector> wxy = + HGCalWaferMask::waferXY(partialTypes[k], orientations[k], 1, rM, RM, 0.0, 0.0); + std::vector xM, yM; + for (unsigned int i = 0; i < (wxy.size() - 1); ++i) { + xM.emplace_back(wxy[i].first); + yM.emplace_back(wxy[i].second); + } + std::vector zw = {-0.5 * thick, 0.5 * thick}; + std::vector zx(2, 0), zy(2, 0), scale(2, 1.0); + + dd4hep::Material matter = ns.material(material); + dd4hep::Solid solid = dd4hep::ExtrudedPolygon(xM, yM, zw, zx, zy, scale); + ns.addSolidNS(ns.prepend(mother), solid); + dd4hep::Volume glogM = dd4hep::Volume(solid.name(), solid, matter); + ns.addVolumeNS(glogM); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: " << solid.name() << " extruded polygon made of " << material + << " z|x|y|s (0) " << cms::convert2mm(zw[0]) << ":" << cms::convert2mm(zx[0]) << ":" + << cms::convert2mm(zy[0]) << ":" << scale[0] << " z|x|y|s (1) " + << cms::convert2mm(zw[1]) << ":" << cms::convert2mm(zx[1]) << ":" + << cms::convert2mm(zy[1]) << ":" << scale[1] << " partial " << partialTypes[k] + << " orientation " << orientations[k] << " and " << xM.size() << " edges"; + for (unsigned int j = 0; j < xM.size(); ++j) + edm::LogVerbatim("HGCalGeom") << "[" << j << "] " << cms::convert2mm(xM[j]) << ":" << cms::convert2mm(yM[j]); +#endif + + // Then the layers + dd4hep::Rotation3D rotation; + wxy = HGCalWaferMask::waferXY(partialTypes[k], orientations[k], 1, r, R, 0.0, 0.0); + std::vector xL, yL; + for (unsigned int i = 0; i < (wxy.size() - 1); ++i) { + xL.emplace_back(wxy[i].first); + yL.emplace_back(wxy[i].second); + } + std::vector glogs(materials.size()); + std::vector copyNumber(materials.size(), 1); + double zi(-0.5 * thick), thickTot(0.0); + for (unsigned int l = 0; l < layers.size(); l++) { + unsigned int i = layers[l]; + if (copyNumber[i] == 1) { + zw[0] = -0.5 * layerThick[i]; + zw[1] = 0.5 * layerThick[i]; + solid = dd4hep::ExtrudedPolygon(xL, yL, zw, zx, zy, scale); + std::string lname = layerNames[i] + tags[k]; + ns.addSolidNS(ns.prepend(lname), solid); + matter = ns.material(materials[i]); + glogs[i] = dd4hep::Volume(solid.name(), solid, matter); + ns.addVolumeNS(glogs[i]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: " << solid.name() << " extruded polygon made of " + << materials[i] << " z|x|y|s (0) " << cms::convert2mm(zw[0]) << ":" + << cms::convert2mm(zx[0]) << ":" << cms::convert2mm(zy[0]) << ":" << scale[0] + << " z|x|y|s (1) " << cms::convert2mm(zw[1]) << ": partial " << partialTypes[k] + << " orientation " << orientations[k] << cms::convert2mm(zx[1]) << ":" + << cms::convert2mm(zy[1]) << ":" << scale[1] << " and " << xM.size() << " edges"; + for (unsigned int j = 0; j < xL.size(); ++j) + edm::LogVerbatim("HGCalGeom") << "[" << j << "] " << cms::convert2mm(xL[j]) << ":" << cms::convert2mm(yL[j]); +#endif + } + if (layerType[i] > 0) { + std::string sname = senseName + tags[k]; + zw[0] = -0.5 * senseT; + zw[1] = 0.5 * senseT; + solid = dd4hep::ExtrudedPolygon(xL, yL, zw, zx, zy, scale); + ns.addSolidNS(ns.prepend(sname), solid); + dd4hep::Volume glog = dd4hep::Volume(solid.name(), solid, matter); + ns.addVolumeNS(glog); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: " << solid.name() << " extruded polygon made of " + << materials[i] << " z|x|y|s (0) " << cms::convert2mm(zw[0]) << ":" + << cms::convert2mm(zx[0]) << ":" << cms::convert2mm(zy[0]) << ":" << scale[0] + << " z|x|y|s (1) " << cms::convert2mm(zw[1]) << ":" << cms::convert2mm(zx[1]) + << ":" << cms::convert2mm(zy[1]) << ":" << scale[1] << " partial " + << partialTypes[k] << " orientation " << orientations[k] << " and " << xL.size() + << " edges"; + for (unsigned int j = 0; j < xL.size(); ++j) + edm::LogVerbatim("HGCalGeom") << "[" << j << "] " << cms::convert2mm(xL[j]) << ":" << cms::convert2mm(yL[j]); +#endif + double zpos = (posSense == 0) ? -0.5 * (layerThick[i] - senseT) : 0.5 * (layerThick[i] - senseT); + dd4hep::Position tran(0, 0, zpos); + int copy = 10 + senseType; + glogs[i].placeVolume(glog, copy, tran); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: " << glog.name() << " number " << copy << " positioned in " + << glogs[i].name() << " at (0, 0," << cms::convert2mm(zpos) + << ") with no rotation"; +#endif + } + dd4hep::Position tran0(0, 0, (zi + 0.5 * layerThick[i])); + glogM.placeVolume(glogs[i], copyNumber[i], tran0); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "DDHGCalWaferP: " << glogs[i].name() << " number " << copyNumber[i] + << " positioned in " << glogM.name() << " at (0,0," + << cms::convert2mm(zi + 0.5 * layerThick[i]) << " with no rotation"; +#endif + ++copyNumber[i]; + zi += layerThick[i]; + thickTot += layerThick[i]; + } + if (std::abs(thickTot - thick) >= tol) { + if (thickTot > thick) { + edm::LogError("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(thick) << " is smaller than " + << cms::convert2mm(thickTot) << ": thickness of all its components **** ERROR ****"; + } else { + edm::LogWarning("HGCalGeom") << "Thickness of the partition " << cms::convert2mm(thick) + << " does not match with " << cms::convert2mm(thickTot) << " of the components"; + } + } + } + + return cms::s_executed; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(DDCMS_hgcal_DDHGCalWaferP, algorithm) diff --git a/Geometry/HGCalCommonData/python/testGeometryV14_cff.py b/Geometry/HGCalCommonData/python/testGeometryV14_cff.py new file mode 100644 index 0000000000000..c2c9ffd3905c9 --- /dev/null +++ b/Geometry/HGCalCommonData/python/testGeometryV14_cff.py @@ -0,0 +1,46 @@ +import FWCore.ParameterSet.Config as cms + +from Geometry.HGCalCommonData.testHGCalV14XML_cfi import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import * +from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import * +from Geometry.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * + +# calo +from Geometry.CaloEventSetup.HGCalV9Topology_cfi import * +from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import * +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "TOWER", + "HGCalEESensitive", + "HGCalHESiliconSensitive", + "HGCalHEScintillatorSensitive" + ) +) +from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * +from Geometry.GEMGeometryBuilder.me0Geometry_cfi import * +from Geometry.RPCGeometryBuilder.rpcGeometry_cfi import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * diff --git a/Geometry/HGCalCommonData/python/testHGCalCellXML_cfi.py b/Geometry/HGCalCommonData/python/testHGCalCellXML_cfi.py index ed85078d316c5..ab9f0ced957e9 100644 --- a/Geometry/HGCalCommonData/python/testHGCalCellXML_cfi.py +++ b/Geometry/HGCalCommonData/python/testHGCalCellXML_cfi.py @@ -4,8 +4,9 @@ geomXMLFiles = cms.vstring('Geometry/CMSCommonData/data/materials.xml', 'Geometry/CMSCommonData/data/rotations.xml', 'Geometry/HGCalCommonData/test/cms.xml', - 'Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalcell.xml', - 'Geometry/HGCalCommonData/data/hgcalcell/v9/hgcal.xml'), + 'Geometry/HGCalCommonData/data/hgcalcell/v15/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v15/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalpos.xml'), rootNodeName = cms.string('cms:OCMS') ) diff --git a/Geometry/HGCalCommonData/python/testHGCalEEFileXML_cfi.py b/Geometry/HGCalCommonData/python/testHGCalEEFileXML_cfi.py new file mode 100644 index 0000000000000..286c3f89a5c30 --- /dev/null +++ b/Geometry/HGCalCommonData/python/testHGCalEEFileXML_cfi.py @@ -0,0 +1,22 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/caloBase/2026/v5/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v1/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcalEE/v14/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalEE/v14/hgcalEE.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/HGCalCommonData/python/testHGCalEEV15XML_cfi.py b/Geometry/HGCalCommonData/python/testHGCalEEV15XML_cfi.py new file mode 100644 index 0000000000000..9228887c2ca7c --- /dev/null +++ b/Geometry/HGCalCommonData/python/testHGCalEEV15XML_cfi.py @@ -0,0 +1,22 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/caloBase/2026/v5/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v2/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcalEE/v15/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v15/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v15/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcalEE/v15/hgcalEE.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/HGCalCommonData/python/testHGCalHEmixFileXML_cfi.py b/Geometry/HGCalCommonData/python/testHGCalHEmixFileXML_cfi.py new file mode 100644 index 0000000000000..31c7a373b65d9 --- /dev/null +++ b/Geometry/HGCalCommonData/python/testHGCalHEmixFileXML_cfi.py @@ -0,0 +1,22 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', + 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/caloBase/2026/v5/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v1/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcalHEmix/v14/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcalHEmix/v14/hgcalHEmix.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/HGCalCommonData/python/testHGCalHEmixV15XML_cfi.py b/Geometry/HGCalCommonData/python/testHGCalHEmixV15XML_cfi.py new file mode 100644 index 0000000000000..24a359628ae0d --- /dev/null +++ b/Geometry/HGCalCommonData/python/testHGCalHEmixV15XML_cfi.py @@ -0,0 +1,22 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', + 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/caloBase/2026/v5/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v1/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v15/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v15/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcalHEmix.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/HGCalCommonData/python/testHGCalHEsilV15XML_cfi.py b/Geometry/HGCalCommonData/python/testHGCalHEsilV15XML_cfi.py new file mode 100644 index 0000000000000..1891f3f6459a2 --- /dev/null +++ b/Geometry/HGCalCommonData/python/testHGCalHEsilV15XML_cfi.py @@ -0,0 +1,22 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/caloBase/2026/v5/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v2/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcalHEsil/v15/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v15/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v15/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcalHEsil/v15/hgcalHEsil.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/HGCalCommonData/python/testHGCalTBModuleXML_cfi.py b/Geometry/HGCalCommonData/python/testHGCalTBModuleXML_cfi.py index 3a8d1cf6c3406..0a8f83022a11b 100644 --- a/Geometry/HGCalCommonData/python/testHGCalTBModuleXML_cfi.py +++ b/Geometry/HGCalCommonData/python/testHGCalTBModuleXML_cfi.py @@ -5,8 +5,8 @@ 'Geometry/CMSCommonData/data/rotations.xml', 'Geometry/HGCalCommonData/data/TB170/cms.xml', 'Geometry/HGCalCommonData/data/TB170/hgcal.xml', - 'Geometry/HGCalCommonData/data/TB170/hgcalEE.xml', - 'Geometry/HGCalCommonData/data/hgcalwafer/v7/hgcalwafer.xml'), + 'Geometry/HGCalCommonData/data/hgcalwafer/v7/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/TB170/hgcalEE.xml'), rootNodeName = cms.string('cms:OCMS') ) diff --git a/Geometry/HGCalCommonData/python/testHGCalV15XML_cfi.py b/Geometry/HGCalCommonData/python/testHGCalV15XML_cfi.py new file mode 100644 index 0000000000000..86aef458491ae --- /dev/null +++ b/Geometry/HGCalCommonData/python/testHGCalV15XML_cfi.py @@ -0,0 +1,85 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2026/v3/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam/2026/v1/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml', + 'Geometry/CMSCommonData/data/caloBase/2026/v5/caloBase.xml', + 'Geometry/CMSCommonData/data/muonBase/2026/v5/muonBase.xml', + 'Geometry/EcalCommonData/data/eregalgo/2026/v2/eregalgo.xml', + 'Geometry/EcalCommonData/data/ectkcable/2026/v1/ectkcable.xml', + 'Geometry/EcalCommonData/data/ectkcablemat/2026/v1/ectkcablemat.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/hcalRecNumbering.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v1/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcal/v15/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v15/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v15/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcalEE/v15/hgcalEE.xml', + 'Geometry/HGCalCommonData/data/hgcalHEsil/v15/hgcalHEsil.xml', + 'Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcalHEmix.xml', + 'Geometry/HGCalCommonData/data/hgcalCons/v14/hgcalCons.xml', + 'Geometry/HGCalCommonData/data/hgcalConsData/v15/hgcalConsData.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2026/v4/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm/2026/v1/brm.xml', + 'Geometry/MuonCommonData/data/mbCommon/2021/v1/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2015/v2/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2015/v2/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2015/v2/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml', + 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml', + 'Geometry/MuonCommonData/data/muonYoke/2026/v1/muonYoke.xml', + 'Geometry/MuonCommonData/data/csc/2021/v2/csc.xml', + 'Geometry/MuonCommonData/data/mf/2026/v6/mf.xml', + 'Geometry/MuonCommonData/data/rpcf/2026/v3/rpcf.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', + 'Geometry/MuonCommonData/data/gem21/TDR_Dev/gem21.xml', + 'Geometry/MuonCommonData/data/mfshield/2026/v4/mfshield.xml', + 'Geometry/MuonCommonData/data/me0/TDR_Dev/v3/me0.xml', + 'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/v1/muonNumbering.xml', + 'Geometry/EcalSimData/data/PhaseII/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsens/NoHE/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HGCalSimData/data/hgcsensv9.xml', + 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/2026/v1/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/v7/GEMSpecsFilter.xml', + 'Geometry/GEMGeometryBuilder/data/v7/GEMSpecs.xml', + 'Geometry/HcalSimData/data/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/HGCalSimData/data/hgcProdCutsv9.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + 'Geometry/MuonSimData/data/PhaseII/muonProdCuts.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/HGCalCommonData/python/testHGCalWafer8XML_cfi.py b/Geometry/HGCalCommonData/python/testHGCalWafer8XML_cfi.py index 602eaf53f0e23..fe896fd23877c 100644 --- a/Geometry/HGCalCommonData/python/testHGCalWafer8XML_cfi.py +++ b/Geometry/HGCalCommonData/python/testHGCalWafer8XML_cfi.py @@ -5,6 +5,7 @@ 'Geometry/CMSCommonData/data/rotations.xml', 'Geometry/HGCalCommonData/test/cms.xml', 'Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalpos.xml', 'Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalwafer.xml', 'Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalcell.xml'), rootNodeName = cms.string('cms:OCMS') diff --git a/Geometry/HGCalCommonData/python/testHGCalWaferAlgoXML_cfi.py b/Geometry/HGCalCommonData/python/testHGCalWaferAlgoXML_cfi.py index a51644cee09a4..42f04fb74e8c6 100644 --- a/Geometry/HGCalCommonData/python/testHGCalWaferAlgoXML_cfi.py +++ b/Geometry/HGCalCommonData/python/testHGCalWaferAlgoXML_cfi.py @@ -5,6 +5,7 @@ 'Geometry/CMSCommonData/data/rotations.xml', 'Geometry/HGCalCommonData/test/cms.xml', 'Geometry/HGCalCommonData/data/hgcalwafer/v7/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v7/hgcalpos.xml', 'Geometry/HGCalCommonData/data/hgcalwafer/v7/hgcalwafer.xml'), rootNodeName = cms.string('cms:OCMS') ) diff --git a/Geometry/HGCalCommonData/python/testHGCalWaferFXML_cfi.py b/Geometry/HGCalCommonData/python/testHGCalWaferFXML_cfi.py new file mode 100644 index 0000000000000..4187b6bf9ea69 --- /dev/null +++ b/Geometry/HGCalCommonData/python/testHGCalWaferFXML_cfi.py @@ -0,0 +1,15 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring('Geometry/CMSCommonData/data/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v1/cms.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v1/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v15F/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v15/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v15F/hgcalpos.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v15F/hgcalwafer.xml'), + rootNodeName = cms.string('cms:OCMS') +) + + diff --git a/Geometry/HGCalCommonData/python/testHGCalWaferPXML_cfi.py b/Geometry/HGCalCommonData/python/testHGCalWaferPXML_cfi.py new file mode 100644 index 0000000000000..175ead253eb09 --- /dev/null +++ b/Geometry/HGCalCommonData/python/testHGCalWaferPXML_cfi.py @@ -0,0 +1,15 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring('Geometry/CMSCommonData/data/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v1/cms.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v1/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v15/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalpos.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalwafer.xml'), + rootNodeName = cms.string('cms:OCMS') +) + + diff --git a/Geometry/HGCalCommonData/python/testHGCalWaferXML_cfi.py b/Geometry/HGCalCommonData/python/testHGCalWaferXML_cfi.py index 2634f81b44166..16a6dfe1be020 100644 --- a/Geometry/HGCalCommonData/python/testHGCalWaferXML_cfi.py +++ b/Geometry/HGCalCommonData/python/testHGCalWaferXML_cfi.py @@ -5,6 +5,7 @@ 'Geometry/CMSCommonData/data/rotations.xml', 'Geometry/HGCalCommonData/test/cms.xml', 'Geometry/HGCalCommonData/data/hgcalwafer/v8/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v8/hgcalpos.xml', 'Geometry/HGCalCommonData/data/hgcalwafer/v8/hgcalwafer.xml'), rootNodeName = cms.string('cms:OCMS') ) diff --git a/Geometry/HGCalCommonData/src/FastTimeDDDConstants.cc b/Geometry/HGCalCommonData/src/FastTimeDDDConstants.cc index a5e4bbe070e2e..dae2b897aa78d 100644 --- a/Geometry/HGCalCommonData/src/FastTimeDDDConstants.cc +++ b/Geometry/HGCalCommonData/src/FastTimeDDDConstants.cc @@ -4,7 +4,7 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" -#define EDM_ML_DEBUG +//#define EDM_ML_DEBUG using namespace geant_units::operators; FastTimeDDDConstants::FastTimeDDDConstants(const FastTimeParameters* ft) : ftpar_(ft) { @@ -100,9 +100,9 @@ std::vector FastTimeDDDConstants::getCorners(int type, int izeta, i z = -z; dz = -dz; } - static const int signx[8] = {-1, -1, 1, 1, -1, -1, 1, 1}; - static const int signy[8] = {-1, 1, 1, -1, -1, 1, 1, -1}; - static const int signz[8] = {-1, -1, -1, -1, 1, 1, 1, 1}; + static constexpr int signx[8] = {-1, -1, 1, 1, -1, -1, 1, 1}; + static constexpr int signy[8] = {-1, 1, 1, -1, -1, 1, 1, -1}; + static constexpr int signz[8] = {-1, -1, -1, -1, 1, 1, 1, 1}; std::vector pts; for (unsigned int i = 0; i != 8; ++i) { GlobalPoint p(x + signx[i] * dx, y + signy[i] * dx, z + signz[i] * dz); diff --git a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc index aef1a0f98e213..383974b25985c 100644 --- a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc +++ b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc @@ -729,7 +729,8 @@ std::pair HGCalDDDConstants::locateCellTrap(int lay, int irad, int << hgpar_->iradMaxBH_[indx.first] << " Type " << type << " Z " << indx.first << ":" << z << " phi " << phi << " R " << r << ":" << range.first << ":" << range.second; #endif - r = std::max(range.first, std::min(r, range.second)); + if (mode_ != HGCalGeometryMode::TrapezoidFile) + r = std::max(range.first, std::min(r, range.second)); x = r * std::cos(phi); y = r * std::sin(phi); if (irad < 0) @@ -1458,7 +1459,7 @@ void HGCalDDDConstants::cellHex(double xloc, double yloc, int cellType, int& cel << ":" << Rc << " u0 " << u0 << ":" << cu0 << " v0 " << v0 << ":" << cv0; #endif bool found(false); - static const int shift[3] = {0, 1, -1}; + static constexpr int shift[3] = {0, 1, -1}; for (int i1 = 0; i1 < 3; ++i1) { cellU = cu0 + shift[i1]; for (int i2 = 0; i2 < 3; ++i2) { @@ -1613,28 +1614,30 @@ int32_t HGCalDDDConstants::waferIndex(int wafer, int index) const { } bool HGCalDDDConstants::waferInLayerTest(int wafer, int lay, bool full) const { - bool flag = (waferHexagon6()) ? true : false; - double xpos = hgpar_->waferPosX_[wafer] + hgpar_->xLayerHex_[lay]; - double ypos = hgpar_->waferPosY_[wafer] + hgpar_->yLayerHex_[lay]; - std::pair corner = HGCalGeomTools::waferCorner( - xpos, ypos, rmax_, hexside_, hgpar_->rMinLayHex_[lay], hgpar_->rMaxLayHex_[lay], flag); - bool in = (full ? (corner.first > 0) : (corner.first == (int)(HGCalParameters::k_CornerSize))); - if (in && fullAndPart_) { - int indx = waferIndex(wafer, lay); - in = (hgpar_->waferInfoMap_.find(indx) != hgpar_->waferInfoMap_.end()); + bool in = (waferHexagon6()) ? true : false; + if (!in) { + double xpos = hgpar_->waferPosX_[wafer] + hgpar_->xLayerHex_[lay]; + double ypos = hgpar_->waferPosY_[wafer] + hgpar_->yLayerHex_[lay]; + std::pair corner = HGCalGeomTools::waferCorner( + xpos, ypos, rmax_, hexside_, hgpar_->rMinLayHex_[lay], hgpar_->rMaxLayHex_[lay], in); + in = (full ? (corner.first > 0) : (corner.first == (int)(HGCalParameters::k_CornerSize))); + if (in && fullAndPart_) { + int indx = waferIndex(wafer, lay); + in = (hgpar_->waferInfoMap_.find(indx) != hgpar_->waferInfoMap_.end()); #ifdef EDM_ML_DEBUG - if (!in) - edm::LogVerbatim("HGCalGeom") << "WaferInLayerTest: Layer " << lay << " wafer " << wafer << " index " << indx - << "( " << HGCalWaferIndex::waferLayer(indx) << ", " - << HGCalWaferIndex::waferU(indx) << ", " << HGCalWaferIndex::waferV(indx) << ") in " - << in; + if (!in) + edm::LogVerbatim("HGCalGeom") << "WaferInLayerTest: Layer " << lay << " wafer " << wafer << " index " << indx + << "( " << HGCalWaferIndex::waferLayer(indx) << ", " + << HGCalWaferIndex::waferU(indx) << ", " << HGCalWaferIndex::waferV(indx) + << ") in " << in; #endif - } + } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "WaferInLayerTest: Layer " << lay << " wafer " << wafer << " R-limits " - << hgpar_->rMinLayHex_[lay] << ":" << hgpar_->rMaxLayHex_[lay] << " Corners " - << corner.first << ":" << corner.second << " In " << in; + edm::LogVerbatim("HGCalGeom") << "WaferInLayerTest: Layer " << lay << " wafer " << wafer << " R-limits " + << hgpar_->rMinLayHex_[lay] << ":" << hgpar_->rMaxLayHex_[lay] << " Corners " + << corner.first << ":" << corner.second << " In " << in; #endif + } return in; } diff --git a/Geometry/HGCalCommonData/src/HGCalGeomParameters.cc b/Geometry/HGCalCommonData/src/HGCalGeomParameters.cc index 5950a44182f10..d59abd7570240 100644 --- a/Geometry/HGCalCommonData/src/HGCalGeomParameters.cc +++ b/Geometry/HGCalCommonData/src/HGCalGeomParameters.cc @@ -12,6 +12,8 @@ #include "DetectorDescription/Core/interface/DDValue.h" #include "DetectorDescription/Core/interface/DDutils.h" #include "DetectorDescription/RegressionTest/interface/DDErrorDetection.h" +#include "Geometry/HGCalCommonData/interface/HGCalProperty.h" +#include "Geometry/HGCalCommonData/interface/HGCalTileIndex.h" #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" #include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" #include "Geometry/HGCalCommonData/interface/HGCalWaferMask.h" @@ -1011,20 +1013,16 @@ void HGCalGeomParameters::loadSpecParsHexagon8(const DDFilteredView& fv, HGCalPa // Read in parameters from Philip's file if (php.waferMaskMode_ > 1) { - std::vector waferIndex, waferTypes, waferParts, waferOrien; + std::vector waferIndex, waferProperties; if (php.waferMaskMode_ == siliconFileEE) { waferIndex = dbl_to_int(fv.vector("WaferIndexEE")); - waferTypes = dbl_to_int(fv.vector("WaferTypesEE")); - waferParts = dbl_to_int(fv.vector("WaferPartialEE")); - waferOrien = dbl_to_int(fv.vector("WaferOrientEE")); + waferProperties = dbl_to_int(fv.vector("WaferPropertiesEE")); } else if (php.waferMaskMode_ == siliconFileHE) { waferIndex = dbl_to_int(fv.vector("WaferIndexHE")); - waferTypes = dbl_to_int(fv.vector("WaferTypesHE")); - waferParts = dbl_to_int(fv.vector("WaferPartialHE")); - waferOrien = dbl_to_int(fv.vector("WaferOrientHE")); + waferProperties = dbl_to_int(fv.vector("WaferPropertiesHE")); } - loadSpecParsHexagon8(php, waferIndex, waferTypes, waferParts, waferOrien); + loadSpecParsHexagon8(php, waferIndex, waferProperties); } } @@ -1087,21 +1085,15 @@ void HGCalGeomParameters::loadSpecParsHexagon8(const cms::DDFilteredView& fv, // Read in parameters from Philip's file if (php.waferMaskMode_ > 1) { - std::vector waferIndex, waferTypes, waferParts, waferOrien; + std::vector waferIndex, waferProperties; if (php.waferMaskMode_ == siliconFileEE) { for (auto const& it : vmap) { if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "WaferIndexEE")) { for (const auto& i : it.second) waferIndex.emplace_back(std::round(i)); - } else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "WaferTypesEE")) { + } else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "WaferPropertiesEE")) { for (const auto& i : it.second) - waferTypes.emplace_back(std::round(i)); - } else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "WaferPartialEE")) { - for (const auto& i : it.second) - waferParts.emplace_back(std::round(i)); - } else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "WaferOrientEE")) { - for (const auto& i : it.second) - waferOrien.emplace_back(std::round(i)); + waferProperties.emplace_back(std::round(i)); } } } else if (php.waferMaskMode_ == siliconFileHE) { @@ -1109,20 +1101,14 @@ void HGCalGeomParameters::loadSpecParsHexagon8(const cms::DDFilteredView& fv, if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "WaferIndexHE")) { for (const auto& i : it.second) waferIndex.emplace_back(std::round(i)); - } else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "WaferTypesHE")) { - for (const auto& i : it.second) - waferTypes.emplace_back(std::round(i)); - } else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "WaferPartialHE")) { + } else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "WaferPropertiesHE")) { for (const auto& i : it.second) - waferParts.emplace_back(std::round(i)); - } else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "WaferOrientHE")) { - for (const auto& i : it.second) - waferOrien.emplace_back(std::round(i)); + waferProperties.emplace_back(std::round(i)); } } } - loadSpecParsHexagon8(php, waferIndex, waferTypes, waferParts, waferOrien); + loadSpecParsHexagon8(php, waferIndex, waferProperties); } } @@ -1162,21 +1148,20 @@ void HGCalGeomParameters::loadSpecParsHexagon8(HGCalParameters& php) { void HGCalGeomParameters::loadSpecParsHexagon8(HGCalParameters& php, const std::vector& waferIndex, - const std::vector& waferTypes, - const std::vector& waferParts, - const std::vector& waferOrien) { + const std::vector& waferProperties) { // Store parameters from Philip's file for (unsigned int k = 0; k < waferIndex.size(); ++k) { - php.waferInfoMap_[waferIndex[k]] = HGCalParameters::waferInfo( - waferTypes[k], waferParts[k], HGCalWaferMask::getRotation(php.waferZSide_, waferParts[k], waferOrien[k])); + int partial = HGCalProperty::waferPartial(waferProperties[k]); + int orient = HGCalWaferMask::getRotation(php.waferZSide_, partial, HGCalProperty::waferOrient(waferProperties[k])); + php.waferInfoMap_[waferIndex[k]] = + HGCalParameters::waferInfo(HGCalProperty::waferThick(waferProperties[k]), partial, orient); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "[" << k << ":" << waferIndex[k] << ":" << HGCalWaferIndex::waferLayer(waferIndex[k]) << ":" << HGCalWaferIndex::waferU(waferIndex[k]) << ":" - << HGCalWaferIndex::waferV(waferIndex[k]) << "] " - << " Type " << waferTypes[k] << " Partial type " << waferParts[k] << " Orientation " - << waferOrien[k] << ":" - << HGCalWaferMask::getRotation(php.waferZSide_, waferParts[k], waferOrien[k]); + << HGCalWaferIndex::waferV(waferIndex[k]) << "] Thickness type " + << HGCalProperty::waferThick(waferProperties[k]) << " Partial type " << partial + << " Orientation " << HGCalProperty::waferOrient(waferProperties[k]) << ":" << orient; #endif } } @@ -1219,13 +1204,12 @@ void HGCalGeomParameters::loadSpecParsTrapezoid(const DDFilteredView& fv, HGCalP // tile parameters from Katja's file if (php.waferMaskMode_ == scintillatorFile) { - std::vector tileIndx, tileType, tileSiPM; + std::vector tileIndx, tileProperty; std::vector tileHEX1, tileHEX2, tileHEX3, tileHEX4; std::vector tileRMin, tileRMax; std::vector tileRingMin, tileRingMax; tileIndx = dbl_to_int(fv.vector("TileIndex")); - tileType = dbl_to_int(fv.vector("TileType")); - tileSiPM = dbl_to_int(fv.vector("TileSiPM")); + tileProperty = dbl_to_int(fv.vector("TileProperty")); tileHEX1 = dbl_to_int(fv.vector("TileHEX1")); tileHEX2 = dbl_to_int(fv.vector("TileHEX2")); tileHEX3 = dbl_to_int(fv.vector("TileHEX3")); @@ -1239,8 +1223,7 @@ void HGCalGeomParameters::loadSpecParsTrapezoid(const DDFilteredView& fv, HGCalP loadSpecParsTrapezoid(php, tileIndx, - tileType, - tileSiPM, + tileProperty, tileHEX1, tileHEX2, tileHEX3, @@ -1300,7 +1283,7 @@ void HGCalGeomParameters::loadSpecParsTrapezoid(const cms::DDFilteredView& fv, // tile parameters from Katja's file if (php.waferMaskMode_ == scintillatorFile) { - std::vector tileIndx, tileType, tileSiPM; + std::vector tileIndx, tileProperty; std::vector tileHEX1, tileHEX2, tileHEX3, tileHEX4; std::vector tileRMin, tileRMax; std::vector tileRingMin, tileRingMax; @@ -1308,12 +1291,9 @@ void HGCalGeomParameters::loadSpecParsTrapezoid(const cms::DDFilteredView& fv, if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "TileIndex")) { for (const auto& i : it.second) tileIndx.emplace_back(std::round(i)); - } else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "TileType")) { - for (const auto& i : it.second) - tileType.emplace_back(std::round(i)); - } else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "TileSiPM")) { + } else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "TileProperty")) { for (const auto& i : it.second) - tileSiPM.emplace_back(std::round(i)); + tileProperty.emplace_back(std::round(i)); } else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "TileHEX1")) { for (const auto& i : it.second) tileHEX1.emplace_back(std::round(i)); @@ -1343,8 +1323,7 @@ void HGCalGeomParameters::loadSpecParsTrapezoid(const cms::DDFilteredView& fv, loadSpecParsTrapezoid(php, tileIndx, - tileType, - tileSiPM, + tileProperty, tileHEX1, tileHEX2, tileHEX3, @@ -1389,8 +1368,7 @@ void HGCalGeomParameters::loadSpecParsTrapezoid(HGCalParameters& php) { void HGCalGeomParameters::loadSpecParsTrapezoid(HGCalParameters& php, const std::vector& tileIndx, - const std::vector& tileType, - const std::vector& tileSiPM, + const std::vector& tileProperty, const std::vector& tileHEX1, const std::vector& tileHEX2, const std::vector& tileHEX3, @@ -1401,13 +1379,17 @@ void HGCalGeomParameters::loadSpecParsTrapezoid(HGCalParameters& php, const std::vector& tileRingMax) { // tile parameters from Katja's file for (unsigned int k = 0; k < tileIndx.size(); ++k) { - php.tileInfoMap_[tileIndx[k]] = - HGCalParameters::tileInfo(tileType[k], tileSiPM[k], tileHEX1[k], tileHEX2[k], tileHEX3[k], tileHEX4[k]); + php.tileInfoMap_[tileIndx[k]] = HGCalParameters::tileInfo(HGCalProperty::tileType(tileProperty[k]), + HGCalProperty::tileSiPM(tileProperty[k]), + tileHEX1[k], + tileHEX2[k], + tileHEX3[k], + tileHEX4[k]); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "Tile[" << k << ":" << tileIndx[k] << "] " - << " Type " << tileType[k] << " SiPM " << tileSiPM[k] << " HEX " << std::hex - << tileHEX1[k] << ":" << tileHEX2[k] << ":" << tileHEX3[k] << ":" << tileHEX4[k] - << std::dec; + << " Type " << HGCalProperty::tileType(tileProperty[k]) << " SiPM " + << HGCalProperty::tileSiPM(tileProperty[k]) << " HEX " << std::hex << tileHEX1[k] + << ":" << tileHEX2[k] << ":" << tileHEX3[k] << ":" << tileHEX4[k] << std::dec; #endif } @@ -1789,6 +1771,7 @@ void HGCalGeomParameters::loadCellTrapezoid(HGCalParameters& php) { edm::LogVerbatim("HGCalGeom") << "New [" << kk << "] new R = " << rv << " Eta = " << eta; #endif } + php.radiusLayer_[k].emplace_back(php.tileRingR_[php.tileRingR_.size() - 1].second); } // Minimum and maximum radius index for each layer for (unsigned int k = 0; k < php.zLayerHex_.size(); ++k) { diff --git a/Geometry/HGCalCommonData/src/HGCalGeomRotation.cc b/Geometry/HGCalCommonData/src/HGCalGeomRotation.cc new file mode 100644 index 0000000000000..c6d10e52f8f3f --- /dev/null +++ b/Geometry/HGCalCommonData/src/HGCalGeomRotation.cc @@ -0,0 +1,196 @@ +#include "Geometry/HGCalCommonData/interface/HGCalGeomRotation.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +void HGCalGeomRotation::uvMappingFromSector0(WaferCentring waferCentring, + int& moduleU, + int& moduleV, + unsigned sector) const { + if (sector == 0) { + return; + } + + if (sectorType_ == SectorType::Sector60Degrees) { + uvMappingFrom60DegreeSector0(waferCentring, moduleU, moduleV, sector); + } else if (sectorType_ == SectorType::Sector120Degrees) { + uvMappingFrom120DegreeSector0(waferCentring, moduleU, moduleV, sector); + } +} + +unsigned HGCalGeomRotation::uvMappingToSector0(WaferCentring waferCentring, int& moduleU, int& moduleV) const { + unsigned sector = 0; + + if (sectorType_ == SectorType::Sector60Degrees) { + sector = uvMappingTo60DegreeSector0(waferCentring, moduleU, moduleV); + } else if (sectorType_ == SectorType::Sector120Degrees) { + sector = uvMappingTo120DegreeSector0(waferCentring, moduleU, moduleV); + } + + return sector; +} + +void HGCalGeomRotation::uvMappingFrom60DegreeSector0(WaferCentring waferCentring, + int& moduleU, + int& moduleV, + unsigned sector) const { + if (waferCentring != WaferCentring::WaferCentred) { + edm::LogError("HGCalGeomRotation") + << "HGCalGeomRotation: 60 degree sector defintion selected, but not WaferCentred centring. This is " + "incompatible, switching to WaferCentred centring"; + waferCentring = WaferCentring::WaferCentred; + } + + if (sector > 5) { + throw cms::Exception("RotationException") << "HGCalGeomRotation: desired sector must be either 0, 1, 2, 3, 4, or 5"; + } + for (unsigned rot = 0; rot < sector; rot++) { + RotateModule60DegreesAnticlockwise(moduleU, moduleV); + } +} + +void HGCalGeomRotation::uvMappingFrom120DegreeSector0(WaferCentring waferCentring, + int& moduleU, + int& moduleV, + unsigned sector) const { + int offset; + + if (waferCentring == WaferCentring::WaferCentred) { + offset = 0; + } else if (waferCentring == WaferCentring::CornerCentredY) { + offset = -1; + } else if (waferCentring == WaferCentring::CornerCentredMercedes) { + offset = 1; + } else { + throw cms::Exception("RotationException") + << "HGCalGeomRotation: WaferCentring must be one of: WaferCentred, CornerCentredY or CornerCentredMercedes"; + } + + if (sector > 2) { + edm::LogError("RotationException") << "HGCalGeomRotation: desired sector must be either 0, 1 or 2"; + return; + } + for (unsigned rot = 0; rot < sector; rot++) { + RotateModule120DegreesAnticlockwise(moduleU, moduleV, offset); + } +} + +unsigned HGCalGeomRotation::uvMappingTo120DegreeSector0(WaferCentring waferCentring, int& moduleU, int& moduleV) const { + unsigned sector = 0; + int offset; + + if (waferCentring == WaferCentring::WaferCentred) { + if (moduleU > 0 && moduleV >= 0) + return sector; + + offset = 0; + if (moduleU >= moduleV && moduleV < 0) + sector = 2; + else + sector = 1; + + } else if (waferCentring == WaferCentring::CornerCentredY) { + if (moduleU >= 0 && moduleV >= 0) + return sector; + + offset = -1; + if (moduleU > moduleV && moduleV < 0) + sector = 2; + else + sector = 1; + + } else if (waferCentring == WaferCentring::CornerCentredMercedes) { + if (moduleU >= 1 && moduleV >= 1) + return sector; + + offset = 1; + if (moduleU >= moduleV && moduleV < 1) + sector = 2; + else + sector = 1; + } else { + throw cms::Exception("RotationException") + << "HGCalGeomRotation: WaferCentring must be one of: WaferCentred, CornerCentredY or CornerCentredMercedes"; + } + + for (unsigned rot = 0; rot < sector; rot++) { + RotateModule120DegreesClockwise(moduleU, moduleV, offset); + } + + return sector; +} + +unsigned HGCalGeomRotation::uvMappingTo60DegreeSector0(WaferCentring waferCentring, int& moduleU, int& moduleV) const { + unsigned sector = 0; + + if (waferCentring != WaferCentring::WaferCentred) { + edm::LogError("HGCalGeomRotation") + << "HGCalGeomRotation: 60 degree sector defintion selected, but not WaferCentred centring. This is " + "incompatible, switching to WaferCentred centring"; + waferCentring = WaferCentring::WaferCentred; + } + + if (moduleU > 0 && moduleV >= 0) { + if (moduleV <= moduleU) { + return sector; + } else { + sector = 1; + } + } + if (moduleU >= moduleV && moduleV < 0) { + if (moduleU >= 0) { + sector = 5; + } else { + sector = 4; + } + } else { + if (moduleV > 0) { + sector = 2; + } else { + sector = 3; + } + } + + for (unsigned rot = 0; rot < sector; rot++) { + RotateModule60DegreesClockwise(moduleU, moduleV); + } + + return sector; +} + +void HGCalGeomRotation::RotateModule60DegreesAnticlockwise(int& moduleU, int& moduleV) const { + int moduleURotated, moduleVRotated; + moduleURotated = moduleU - moduleV; + moduleVRotated = moduleU; + + moduleU = moduleURotated; + moduleV = moduleVRotated; +} + +void HGCalGeomRotation::RotateModule60DegreesClockwise(int& moduleU, int& moduleV) const { + int moduleURotated, moduleVRotated; + moduleURotated = moduleV; + moduleVRotated = moduleV - moduleU; + + moduleU = moduleURotated; + moduleV = moduleVRotated; +} + +void HGCalGeomRotation::RotateModule120DegreesAnticlockwise(int& moduleU, int& moduleV, int offset) const { + int moduleURotated, moduleVRotated; + + moduleURotated = -moduleV + offset; + moduleVRotated = moduleU - moduleV + offset; + + moduleU = moduleURotated; + moduleV = moduleVRotated; +} + +void HGCalGeomRotation::RotateModule120DegreesClockwise(int& moduleU, int& moduleV, int offset) const { + int moduleURotated, moduleVRotated; + + moduleURotated = moduleV - moduleU; + moduleVRotated = -moduleU + offset; + + moduleU = moduleURotated; + moduleV = moduleVRotated; +} diff --git a/Geometry/HGCalCommonData/src/HGCalGeomTools.cc b/Geometry/HGCalCommonData/src/HGCalGeomTools.cc index ab5069aaa7585..3695559df5394 100644 --- a/Geometry/HGCalCommonData/src/HGCalGeomTools.cc +++ b/Geometry/HGCalCommonData/src/HGCalGeomTools.cc @@ -37,13 +37,18 @@ void HGCalGeomTools::radius(double zf, if ((zb1 != zFront1.begin()) && (std::abs(*zb1 - zb) < tol_)) { --zb1; dz2 = -2 * tol_; + } else if (std::abs(*(zb1 + 1) - zb) < tol_) { + dz2 = -2 * tol_; } auto zb2 = std::lower_bound(zFront2.begin(), zFront2.end(), zb); if (zb2 != zFront2.begin()) --zb2; #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "HGCalGeomTools::radius:zf " << zf << " : " << *zf1 << " : " << *zf2 << " zb " << zb - << " : " << *zb1 << " : " << *zb2 << " Flag " << flag; + edm::LogVerbatim("HGCalGeom") << "HGCalGeomTools::radius:zf " << zf << " : " + << static_cast(zf1 - zFront1.begin()) << ":" << *zf1 << " : " + << static_cast(zf2 - zFront2.begin()) << ":" << *zf2 << " zb " << zb << ":" + << static_cast(zb1 - zFront1.begin()) << " : " << *zb1 << " : " + << static_cast(zb2 - zFront2.begin()) << ":" << *zb2 << " Flag " << flag; #endif if ((zf1 == zb1) && (zf2 == zb2)) { #ifdef EDM_ML_DEBUG diff --git a/Geometry/HGCalCommonData/src/HGCalProperty.cc b/Geometry/HGCalCommonData/src/HGCalProperty.cc new file mode 100644 index 0000000000000..de6a647d7a21d --- /dev/null +++ b/Geometry/HGCalCommonData/src/HGCalProperty.cc @@ -0,0 +1,32 @@ +#include "Geometry/HGCalCommonData/interface/HGCalProperty.h" + +int32_t HGCalProperty::waferProperty(const int32_t thick, const int32_t part, const int32_t orient) { + return (((thick % HGCalProperty::kHGCalFactor) * HGCalProperty::kHGCalOffsetThick) + + ((part % HGCalProperty::kHGCalFactor) * HGCalProperty::kHGCalOffsetPartial) + + ((orient % HGCalProperty::kHGCalFactor) * HGCalProperty::kHGCalOffsetOrient)); +} + +int32_t HGCalProperty::waferThick(const int32_t property) { + return ((property / HGCalProperty::kHGCalOffsetThick) % HGCalProperty::kHGCalFactor); +} + +int32_t HGCalProperty::waferPartial(const int32_t property) { + return ((property / HGCalProperty::kHGCalOffsetPartial) % HGCalProperty::kHGCalFactor); +} + +int32_t HGCalProperty::waferOrient(const int32_t property) { + return ((property / HGCalProperty::kHGCalOffsetOrient) % HGCalProperty::kHGCalFactor); +} + +int32_t HGCalProperty::tileProperty(const int32_t type, const int32_t sipm) { + return (((type % HGCalProperty::kHGCalFactor) * HGCalProperty::kHGCalOffsetType) + + ((sipm % HGCalProperty::kHGCalFactor) * HGCalProperty::kHGCalOffsetSiPM)); +} + +int32_t HGCalProperty::tileType(const int32_t property) { + return ((property / HGCalProperty::kHGCalOffsetType) % HGCalProperty::kHGCalFactor); +} + +int32_t HGCalProperty::tileSiPM(const int32_t property) { + return ((property / HGCalProperty::kHGCalOffsetSiPM) % HGCalProperty::kHGCalFactor); +} diff --git a/Geometry/HGCalCommonData/src/HGCalTileIndex.cc b/Geometry/HGCalCommonData/src/HGCalTileIndex.cc index a1374ac447036..e61a0899d5dec 100644 --- a/Geometry/HGCalCommonData/src/HGCalTileIndex.cc +++ b/Geometry/HGCalCommonData/src/HGCalTileIndex.cc @@ -1,14 +1,64 @@ +#include "Geometry/HGCalCommonData/interface/HGCalProperty.h" #include "Geometry/HGCalCommonData/interface/HGCalTileIndex.h" int32_t HGCalTileIndex::tileIndex(int32_t layer, int32_t ring, int32_t phi) { int32_t id(0); - id |= (((phi & kHGCalPhiMask) << kHGCalPhiOffset) | ((ring & kHGCalRingMask) << kHGCalRingOffset) | - ((layer & kHGCalLayerMask) << kHGCalLayerOffset)); + id |= (((phi & HGCalProperty::kHGCalPhiMask) << HGCalProperty::kHGCalPhiOffset) | + ((ring & HGCalProperty::kHGCalRingMask) << HGCalProperty::kHGCalRingOffset) | + ((layer & HGCalProperty::kHGCalLayerMask) << HGCalProperty::kHGCalLayerOffset)); return id; } -int32_t HGCalTileIndex::tileLayer(int32_t id) { return ((id >> kHGCalLayerOffset) & kHGCalLayerMask); } +int32_t HGCalTileIndex::tileLayer(int32_t id) { + return ((id >> HGCalProperty::kHGCalLayerOffset) & HGCalProperty::kHGCalLayerMask); +} + +int32_t HGCalTileIndex::tileRing(int32_t id) { + return ((id >> HGCalProperty::kHGCalRingOffset) & HGCalProperty::kHGCalRingMask); +} + +int32_t HGCalTileIndex::tilePhi(int32_t id) { + return ((id >> HGCalProperty::kHGCalPhiOffset) & HGCalProperty::kHGCalPhiMask); +} + +int32_t HGCalTileIndex::tileProperty(int32_t type, int32_t sipm) { + return (((type % HGCalProperty::kHGCalFactor) * HGCalProperty::kHGCalOffsetType) + + ((sipm % HGCalProperty::kHGCalFactor) * HGCalProperty::kHGCalOffsetSiPM)); +} -int32_t HGCalTileIndex::tileRing(int32_t id) { return ((id >> kHGCalRingOffset) & kHGCalRingMask); } +int32_t HGCalTileIndex::tileType(int32_t property) { + return ((property / HGCalProperty::kHGCalOffsetType) % HGCalProperty::kHGCalFactor); +} -int32_t HGCalTileIndex::tilePhi(int32_t id) { return ((id >> kHGCalPhiOffset) & kHGCalPhiMask); } +int32_t HGCalTileIndex::tileSiPM(int32_t property) { + return ((property / HGCalProperty::kHGCalOffsetSiPM) % HGCalProperty::kHGCalFactor); +} + +int32_t HGCalTileIndex::tilePack(int32_t ly, int32_t k1, int32_t k2) { + return ( + ((ly % HGCalProperty::kHGCalTilePack) * HGCalProperty::kHGCalTilePack + (k1 % HGCalProperty::kHGCalTilePack)) * + HGCalProperty::kHGCalTilePack + + (k2 % HGCalProperty::kHGCalTilePack)); +} + +std::tuple HGCalTileIndex::tileUnpack(int32_t index) { + int32_t ly = + (index / (HGCalProperty::kHGCalTilePack * HGCalProperty::kHGCalTilePack)) % HGCalProperty::kHGCalTilePack; + int32_t k1 = (index / HGCalProperty::kHGCalTilePack) % HGCalProperty::kHGCalTilePack; + int32_t k2 = (index % HGCalProperty::kHGCalTilePack); + return std::make_tuple(ly, k1, k2); +} + +bool HGCalTileIndex::tileExist(const int32_t* hex, int32_t zside, int32_t iphi) { + int32_t phi(iphi - 1); + if (zside > 0) { + phi += HGCalProperty::kHGCalTilePhisBy2; + if (phi >= HGCalProperty::kHGCalTilePhis) + phi -= HGCalProperty::kHGCalTilePhis; + } + int32_t jj = phi % HGCalProperty::kHGCalTilePhisBy3; + int32_t iw = jj / HGCalProperty::kHGCalTilePhisBy12; + int32_t ibit = HGCalProperty::kHGCalTilePhisBy12 - (jj % HGCalProperty::kHGCalTilePhisBy12) - 1; + bool ok = (hex[iw] & (1 << ibit)); + return ok; +} diff --git a/Geometry/HGCalCommonData/src/HGCalWaferIndex.cc b/Geometry/HGCalCommonData/src/HGCalWaferIndex.cc index 7ebaa80cf0e3b..c89efbd358f91 100644 --- a/Geometry/HGCalCommonData/src/HGCalWaferIndex.cc +++ b/Geometry/HGCalCommonData/src/HGCalWaferIndex.cc @@ -1,49 +1,41 @@ +#include "Geometry/HGCalCommonData/interface/HGCalProperty.h" #include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" -const int kHGCalWaferUOffset = 0; -const int kHGCalWaferUMask = 0x1F; -const int kHGCalWaferUSignOffset = 5; -const int kHGCalWaferUSignMask = 0x1; -const int kHGCalWaferVOffset = 6; -const int kHGCalWaferVMask = 0x1F; -const int kHGCalWaferVSignOffset = 11; -const int kHGCalWaferVSignMask = 0x1; -const int kHGCalLayerOffset = 18; -const int kHGCalLayerMask = 0x1F; -const int kHGCalWaferCopyOffset = 0; -const int kHGCalWaferCopyMask = 0x7FFFF; -const int kHGCalLayerOldMask = 0x1000000; - int32_t HGCalWaferIndex::waferIndex(int32_t layer, int32_t waferU, int32_t waferV, bool old) { int32_t id(0); if (old) { - id |= (((waferU & kHGCalWaferCopyMask) << kHGCalWaferCopyOffset) | - ((layer & kHGCalLayerMask) << kHGCalLayerOffset) | kHGCalLayerOldMask); + id |= (((waferU & HGCalProperty::kHGCalWaferCopyMask) << HGCalProperty::kHGCalWaferCopyOffset) | + ((layer & HGCalProperty::kHGCalLayerMask) << HGCalProperty::kHGCalLayerOffset) | + HGCalProperty::kHGCalLayerOldMask); } else { int waferUabs(std::abs(waferU)), waferVabs(std::abs(waferV)); int waferUsign = (waferU >= 0) ? 0 : 1; int waferVsign = (waferV >= 0) ? 0 : 1; - id |= (((waferUabs & kHGCalWaferUMask) << kHGCalWaferUOffset) | - ((waferUsign & kHGCalWaferUSignMask) << kHGCalWaferUSignOffset) | - ((waferVabs & kHGCalWaferVMask) << kHGCalWaferVOffset) | - ((waferVsign & kHGCalWaferVSignMask) << kHGCalWaferVSignOffset) | - ((layer & kHGCalLayerMask) << kHGCalLayerOffset)); + id |= (((waferUabs & HGCalProperty::kHGCalWaferUMask) << HGCalProperty::kHGCalWaferUOffset) | + ((waferUsign & HGCalProperty::kHGCalWaferUSignMask) << HGCalProperty::kHGCalWaferUSignOffset) | + ((waferVabs & HGCalProperty::kHGCalWaferVMask) << HGCalProperty::kHGCalWaferVOffset) | + ((waferVsign & HGCalProperty::kHGCalWaferVSignMask) << HGCalProperty::kHGCalWaferVSignOffset) | + ((layer & HGCalProperty::kHGCalLayerMask) << HGCalProperty::kHGCalLayerOffset)); } return id; } -int HGCalWaferIndex::waferLayer(const int32_t id) { return (id >> kHGCalLayerOffset) & kHGCalLayerMask; } +int32_t HGCalWaferIndex::waferLayer(const int32_t id) { + return (id >> HGCalProperty::kHGCalLayerOffset) & HGCalProperty::kHGCalLayerMask; +} -int HGCalWaferIndex::waferU(const int32_t id) { - int32_t iu = (id >> kHGCalWaferUOffset) & kHGCalWaferUMask; - return (((id >> kHGCalWaferUSignOffset) & kHGCalWaferUSignMask) ? -iu : iu); +int32_t HGCalWaferIndex::waferU(const int32_t id) { + int32_t iu = (id >> HGCalProperty::kHGCalWaferUOffset) & HGCalProperty::kHGCalWaferUMask; + return (((id >> HGCalProperty::kHGCalWaferUSignOffset) & HGCalProperty::kHGCalWaferUSignMask) ? -iu : iu); } -int HGCalWaferIndex::waferV(const int32_t id) { - int32_t iv = (id >> kHGCalWaferVOffset) & kHGCalWaferVMask; - return (((id >> kHGCalWaferVSignOffset) & kHGCalWaferVSignMask) ? -iv : iv); +int32_t HGCalWaferIndex::waferV(const int32_t id) { + int32_t iv = (id >> HGCalProperty::kHGCalWaferVOffset) & HGCalProperty::kHGCalWaferVMask; + return (((id >> HGCalProperty::kHGCalWaferVSignOffset) & HGCalProperty::kHGCalWaferVSignMask) ? -iv : iv); } -int HGCalWaferIndex::waferCopy(const int32_t id) { return (id >> kHGCalWaferCopyOffset) & kHGCalWaferCopyMask; } +int32_t HGCalWaferIndex::waferCopy(const int32_t id) { + return (id >> HGCalProperty::kHGCalWaferCopyOffset) & HGCalProperty::kHGCalWaferCopyMask; +} -bool HGCalWaferIndex::waferFormat(const int32_t id) { return ((id & kHGCalLayerOldMask) == 0); } +bool HGCalWaferIndex::waferFormat(const int32_t id) { return ((id & HGCalProperty::kHGCalLayerOldMask) == 0); } diff --git a/Geometry/HGCalCommonData/src/HGCalWaferMask.cc b/Geometry/HGCalCommonData/src/HGCalWaferMask.cc index 004eb1ecaa3e3..6d03a2b436af4 100644 --- a/Geometry/HGCalCommonData/src/HGCalWaferMask.cc +++ b/Geometry/HGCalCommonData/src/HGCalWaferMask.cc @@ -4,6 +4,8 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include +#include + //#define EDM_ML_DEBUG bool HGCalWaferMask::maskCell(int u, int v, int n, int ncor, int fcor, int corners) { @@ -340,29 +342,29 @@ int HGCalWaferMask::getRotation(int zside, int type, int rotn) { int newrotn(rotn); if ((zside < 0) && (type != HGCalTypes::WaferFull)) { if (type == HGCalTypes::WaferFive) { //WaferFive - static const int rot1[HGCalTypes::WaferCornerMax] = {HGCalTypes::WaferCorner4, - HGCalTypes::WaferCorner3, - HGCalTypes::WaferCorner2, - HGCalTypes::WaferCorner1, - HGCalTypes::WaferCorner0, - HGCalTypes::WaferCorner5}; + static constexpr int rot1[HGCalTypes::WaferCornerMax] = {HGCalTypes::WaferCorner4, + HGCalTypes::WaferCorner3, + HGCalTypes::WaferCorner2, + HGCalTypes::WaferCorner1, + HGCalTypes::WaferCorner0, + HGCalTypes::WaferCorner5}; newrotn = rot1[rotn]; } else if ((type == HGCalTypes::WaferThree) || (type == HGCalTypes::WaferSemi) || (type == HGCalTypes::WaferSemi2)) { //WaferThree/WaferSemi/WaferSemi2 - static const int rot2[HGCalTypes::WaferCornerMax] = {HGCalTypes::WaferCorner2, - HGCalTypes::WaferCorner1, - HGCalTypes::WaferCorner0, - HGCalTypes::WaferCorner5, - HGCalTypes::WaferCorner4, - HGCalTypes::WaferCorner3}; + static constexpr int rot2[HGCalTypes::WaferCornerMax] = {HGCalTypes::WaferCorner2, + HGCalTypes::WaferCorner1, + HGCalTypes::WaferCorner0, + HGCalTypes::WaferCorner5, + HGCalTypes::WaferCorner4, + HGCalTypes::WaferCorner3}; newrotn = rot2[rotn]; } else { //WaferHalf/WaferChopTwo/WaferChopTwoM - static const int rot3[HGCalTypes::WaferCornerMax] = {HGCalTypes::WaferCorner3, - HGCalTypes::WaferCorner2, - HGCalTypes::WaferCorner1, - HGCalTypes::WaferCorner0, - HGCalTypes::WaferCorner5, - HGCalTypes::WaferCorner4}; + static constexpr int rot3[HGCalTypes::WaferCornerMax] = {HGCalTypes::WaferCorner3, + HGCalTypes::WaferCorner2, + HGCalTypes::WaferCorner1, + HGCalTypes::WaferCorner0, + HGCalTypes::WaferCorner5, + HGCalTypes::WaferCorner4}; newrotn = rot3[rotn]; } } @@ -384,8 +386,8 @@ std::pair HGCalWaferMask::getTypeMode(const double& xpos, int ncor(0), iok(0); int type(HGCalTypes::WaferFull), rotn(HGCalTypes::WaferCorner0); - static const int corners = 6; - static const int base = 10; + static constexpr int corners = 6; + static constexpr int base = 10; double rin2 = rin * rin; double rout2 = rout * rout; double dx0[corners] = { @@ -412,9 +414,9 @@ std::pair HGCalWaferMask::getTypeMode(const double& xpos, edm::LogVerbatim("HGCalGeom") << "I/p " << xpos << ":" << ypos << ":" << delX << ":" << delY << ":" << rin << ":" << rout << ":" << wType << ":" << mode << " Corners " << ncor << " iok " << iok; - static const int ipat5[corners] = {101111, 110111, 111011, 111101, 111110, 11111}; - static const int ipat4[corners] = {100111, 110011, 111001, 111100, 11110, 1111}; - static const int ipat3[corners] = {100011, 110001, 111000, 11100, 1110, 111}; + static constexpr int ipat5[corners] = {101111, 110111, 111011, 111101, 111110, 11111}; + static constexpr int ipat4[corners] = {100111, 110011, 111001, 111100, 11110, 1111}; + static constexpr int ipat3[corners] = {100011, 110001, 111000, 11100, 1110, 111}; double dx1[corners] = {HGCalTypes::c50 * delX, HGCalTypes::c10 * delX, HGCalTypes::c50 * delX, @@ -543,10 +545,10 @@ bool HGCalWaferMask::goodTypeMode( return false; double rin2 = rin * rin; double rout2 = rout * rout; - static const int corners = HGCalTypes::WaferCornerMax; - static const int corner2 = 2 * HGCalTypes::WaferCornerMax; - static const int base = 10; - static const int base2 = 100; + static constexpr int corners = HGCalTypes::WaferCornerMax; + static constexpr int corner2 = 2 * HGCalTypes::WaferCornerMax; + static constexpr int base = 10; + static constexpr int base2 = 100; double dx0[corners] = { 0.0, HGCalTypes::c10 * delX, HGCalTypes::c10 * delX, 0.0, -HGCalTypes::c10 * delX, -HGCalTypes::c10 * delX}; double dy0[corners] = {-HGCalTypes::c10 * delY, @@ -591,7 +593,7 @@ bool HGCalWaferMask::goodTypeMode( int ncf(-1); switch (part) { case (HGCalTypes::WaferThree): { - static const int nc0[corners] = {450, 150, 201, 312, 423, 534}; + static constexpr int nc0[corners] = {450, 150, 201, 312, 423, 534}; int nc = nc0[rotn]; for (int k1 = 0; k1 < 3; ++k1) { int k = nc % base; @@ -608,8 +610,8 @@ bool HGCalWaferMask::goodTypeMode( break; } case (HGCalTypes::WaferSemi2): { - static const int nc10[corners] = {450, 150, 201, 312, 423, 534}; - static const int nc11[corners] = {700, 902, 1104, 106, 308, 510}; + static constexpr int nc10[corners] = {450, 150, 201, 312, 423, 534}; + static constexpr int nc11[corners] = {700, 902, 1104, 106, 308, 510}; int nc = nc10[rotn]; for (int k1 = 0; k1 < 3; ++k1) { int k = nc % base; @@ -639,8 +641,8 @@ bool HGCalWaferMask::goodTypeMode( break; } case (HGCalTypes::WaferSemi): { - static const int nc20[corners] = {450, 150, 201, 312, 423, 534}; - static const int nc21[corners] = {30, 14, 25, 30, 41, 52}; + static constexpr int nc20[corners] = {450, 150, 201, 312, 423, 534}; + static constexpr int nc21[corners] = {30, 14, 25, 30, 41, 52}; int nc = nc20[rotn]; for (int k1 = 0; k1 < 3; ++k1) { int k = nc % base; @@ -670,7 +672,7 @@ bool HGCalWaferMask::goodTypeMode( break; } case (HGCalTypes::WaferHalf): { - static const int nc3[corners] = {3450, 1450, 2501, 3012, 4123, 5234}; + static constexpr int nc3[corners] = {3450, 1450, 2501, 3012, 4123, 5234}; int nc = nc3[rotn]; for (int k1 = 0; k1 < 4; ++k1) { int k = nc % base; @@ -687,8 +689,8 @@ bool HGCalWaferMask::goodTypeMode( break; } case (HGCalTypes::WaferChopTwoM): { - static const int nc40[corners] = {3450, 1450, 2501, 3012, 4123, 5234}; - static const int nc41[corners] = {500, 702, 904, 1106, 108, 310}; + static constexpr int nc40[corners] = {3450, 1450, 2501, 3012, 4123, 5234}; + static constexpr int nc41[corners] = {500, 702, 904, 1106, 108, 310}; int nc = nc40[rotn]; for (int k1 = 0; k1 < 4; ++k1) { int k = nc % base; @@ -718,8 +720,8 @@ bool HGCalWaferMask::goodTypeMode( break; } case (HGCalTypes::WaferChopTwo): { - static const int nc50[corners] = {3450, 1450, 2501, 3012, 4123, 5234}; - static const int nc51[corners] = {20, 13, 24, 35, 40, 51}; + static constexpr int nc50[corners] = {3450, 1450, 2501, 3012, 4123, 5234}; + static constexpr int nc51[corners] = {20, 13, 24, 35, 40, 51}; int nc = nc50[rotn]; for (int k1 = 0; k1 < 4; ++k1) { int k = nc % base; @@ -749,7 +751,7 @@ bool HGCalWaferMask::goodTypeMode( break; } case (HGCalTypes::WaferFive): { - static const int nc6[corners] = {23450, 13450, 24501, 35012, 40123, 51234}; + static constexpr int nc6[corners] = {23450, 13450, 24501, 35012, 40123, 51234}; int nc = nc6[rotn]; for (int k1 = 0; k1 < 5; ++k1) { int k = nc % base; @@ -784,3 +786,127 @@ bool HGCalWaferMask::goodTypeMode( << rout << ":" << part << ":" << rotn << " Results " << ok << ":" << ncf; return ok; } + +std::vector > HGCalWaferMask::waferXY( + int part, int ori, int zside, double delX, double delY, double xpos, double ypos) { + std::vector > xy; + int orient = getRotation(-zside, part, ori); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "Part " << part << " zSide " << zside << " Orient " << ori << ":" << orient; +#endif + double dx[24] = {HGCalTypes::c00 * delX, HGCalTypes::c10 * delX, HGCalTypes::c10 * delX, HGCalTypes::c00 * delX, + -HGCalTypes::c10 * delX, -HGCalTypes::c10 * delX, HGCalTypes::c50 * delX, HGCalTypes::c10 * delX, + HGCalTypes::c50 * delX, -HGCalTypes::c50 * delX, -HGCalTypes::c10 * delX, -HGCalTypes::c50 * delX, + HGCalTypes::c22 * delX, HGCalTypes::c10 * delX, HGCalTypes::c77 * delX, -HGCalTypes::c22 * delX, + -HGCalTypes::c10 * delX, -HGCalTypes::c77 * delX, HGCalTypes::c22 * delX, -HGCalTypes::c77 * delX, + -HGCalTypes::c10 * delX, -HGCalTypes::c22 * delX, HGCalTypes::c77 * delX, HGCalTypes::c10 * delX}; + double dy[24] = {-HGCalTypes::c10 * delY, -HGCalTypes::c50 * delY, HGCalTypes::c50 * delY, HGCalTypes::c10 * delY, + HGCalTypes::c50 * delY, -HGCalTypes::c50 * delY, -HGCalTypes::c75 * delY, HGCalTypes::c00 * delY, + HGCalTypes::c75 * delY, HGCalTypes::c75 * delY, HGCalTypes::c00 * delY, -HGCalTypes::c75 * delY, + -HGCalTypes::c88 * delY, -HGCalTypes::c27 * delY, HGCalTypes::c61 * delY, HGCalTypes::c88 * delY, + HGCalTypes::c27 * delY, -HGCalTypes::c61 * delY, HGCalTypes::c88 * delY, HGCalTypes::c61 * delY, + -HGCalTypes::c27 * delY, -HGCalTypes::c88 * delY, -HGCalTypes::c61 * delY, HGCalTypes::c27 * delY}; + if (part == HGCalTypes::WaferFull) { + int np[7] = {0, 1, 2, 3, 4, 5, 0}; + for (int k = 0; k < 7; ++k) + xy.push_back(std::make_pair((xpos + dx[np[k]]), (ypos + dy[np[k]]))); + } else if (part == HGCalTypes::WaferFive) { + int np[6][6] = {{0, 2, 3, 4, 5, 0}, + {1, 3, 4, 5, 0, 1}, + {2, 4, 5, 0, 1, 2}, + {3, 5, 0, 1, 2, 3}, + {4, 0, 1, 2, 3, 4}, + {5, 1, 2, 3, 4, 5}}; + for (int k = 0; k < 6; ++k) { + xy.push_back(std::make_pair((xpos + dx[np[orient][k]]), (ypos + dy[np[orient][k]]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << k << ":" << np[orient][k] << ":" << dx[np[orient][k]] << ":" + << dy[np[orient][k]]; +#endif + } + } else if (part == HGCalTypes::WaferHalf) { + int np[6][5] = { + {0, 3, 4, 5, 0}, {1, 4, 5, 0, 1}, {2, 5, 0, 1, 2}, {3, 0, 1, 2, 3}, {4, 1, 2, 3, 4}, {5, 2, 3, 4, 5}}; + for (int k = 0; k < 5; ++k) { + xy.push_back(std::make_pair((xpos + dx[np[orient][k]]), (ypos + dy[np[orient][k]]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << k << ":" << np[orient][k] << ":" << dx[np[orient][k]] << ":" + << dy[np[orient][k]]; +#endif + } + } else if (part == HGCalTypes::WaferThree) { + int np[6][4] = {{0, 4, 5, 0}, {1, 5, 0, 1}, {2, 0, 1, 2}, {3, 1, 2, 3}, {4, 2, 3, 4}, {5, 3, 4, 5}}; + for (int k = 0; k < 4; ++k) { + xy.push_back(std::make_pair((xpos + dx[np[orient][k]]), (ypos + dy[np[orient][k]]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << k << ":" << np[orient][k] << ":" << dx[np[orient][k]] << ":" + << dy[np[orient][k]]; +#endif + } + } else if (part == HGCalTypes::WaferChopTwo) { + int np[6][7] = {{6, 8, 3, 4, 5, 0, 6}, + {7, 9, 4, 5, 0, 1, 7}, + {8, 10, 5, 0, 1, 2, 8}, + {9, 11, 0, 1, 2, 3, 9}, + {10, 6, 1, 2, 3, 4, 10}, + {11, 7, 2, 3, 4, 5, 11}}; + for (int k = 0; k < 7; ++k) { + xy.push_back(std::make_pair((xpos + dx[np[orient][k]]), (ypos + dy[np[orient][k]]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << k << ":" << np[orient][k] << ":" << dx[np[orient][k]] << ":" + << dy[np[orient][k]]; +#endif + } + } else if (part == HGCalTypes::WaferSemi) { + int np[6][6] = {{6, 9, 4, 5, 0, 6}, + {7, 10, 5, 0, 1, 7}, + {8, 11, 0, 1, 2, 8}, + {9, 6, 1, 2, 3, 9}, + {10, 7, 2, 3, 4, 10}, + {11, 8, 3, 4, 5, 11}}; + for (int k = 0; k < 6; ++k) { + xy.push_back(std::make_pair((xpos + dx[np[orient][k]]), (ypos + dy[np[orient][k]]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << k << ":" << np[orient][k] << ":" << dx[np[orient][k]] << ":" + << dy[np[orient][k]]; +#endif + } + } else if (part == HGCalTypes::WaferChopTwoM) { + int np[6][7] = {{12, 18, 3, 4, 5, 0, 12}, + {13, 19, 4, 5, 0, 1, 13}, + {14, 20, 5, 0, 1, 2, 14}, + {15, 21, 0, 1, 2, 3, 15}, + {16, 22, 1, 2, 3, 4, 16}, + {17, 23, 2, 3, 4, 5, 17}}; + for (int k = 0; k < 7; ++k) { + xy.push_back(std::make_pair((xpos + dx[np[orient][k]]), (ypos + dy[np[orient][k]]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << k << ":" << np[orient][k] << ":" << dx[np[orient][k]] << ":" + << dy[np[orient][k]]; +#endif + } + } else if (part == HGCalTypes::WaferSemi2) { + int np[6][6] = {{12, 19, 4, 5, 0, 12}, + {13, 20, 5, 0, 1, 13}, + {14, 21, 0, 1, 2, 14}, + {15, 22, 1, 2, 3, 15}, + {16, 23, 2, 3, 4, 16}, + {17, 18, 3, 4, 5, 17}}; + for (int k = 0; k < 6; ++k) { + xy.push_back(std::make_pair((xpos + dx[np[orient][k]]), (ypos + dy[np[orient][k]]))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << k << ":" << np[orient][k] << ":" << dx[np[orient][k]] << ":" + << dy[np[orient][k]]; +#endif + } + } +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "I/p: " << part << ":" << ori << ":" << zside << ":" << delX << ":" << delY << ":" + << xpos << ":" << ypos << " O/p having " << xy.size() << " points:"; + std::ostringstream st1; + for (unsigned int i = 0; i < xy.size(); ++i) + st1 << " [" << i << "] " << xy[i].first << ":" << xy[i].second; + edm::LogVerbatim("HGCalGeom") << st1.str(); +#endif + return xy; +} diff --git a/Geometry/HGCalCommonData/src/HGCalWaferType.cc b/Geometry/HGCalCommonData/src/HGCalWaferType.cc index bee84f4eea307..e411a045f9fcb 100644 --- a/Geometry/HGCalCommonData/src/HGCalWaferType.cc +++ b/Geometry/HGCalCommonData/src/HGCalWaferType.cc @@ -1,6 +1,7 @@ #include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Geometry/HGCalCommonData/interface/HGCalParameters.h" +#include "Geometry/HGCalCommonData/interface/HGCalProperty.h" #include "Geometry/HGCalCommonData/interface/HGCalWaferType.h" //#define EDM_ML_DEBUG @@ -103,9 +104,11 @@ int HGCalWaferType::getType(double xpos, double ypos, double zpos) { return type; } -int HGCalWaferType::getType(int index, const std::vector& indices, const std::vector& types) { +int HGCalWaferType::getType(int index, const std::vector& indices, const std::vector& properties) { auto itr = std::find(std::begin(indices), std::end(indices), index); - int type = (itr == std::end(indices)) ? -1 : types[static_cast(itr - std::begin(indices))]; + int type = (itr == std::end(indices)) + ? -1 + : HGCalProperty::waferThick(properties[static_cast(itr - std::begin(indices))]); return type; } diff --git a/Geometry/HGCalCommonData/test/HGCalConvert.cpp b/Geometry/HGCalCommonData/test/HGCalConvert.cpp index 2fa4715ec7e44..2a6d4be5d4c22 100644 --- a/Geometry/HGCalCommonData/test/HGCalConvert.cpp +++ b/Geometry/HGCalCommonData/test/HGCalConvert.cpp @@ -17,17 +17,24 @@ // of the outputs // // HGCalConvert 2 infile outfile debug -// infile (std::string) Input file from Katya (modified by Chris) +// infile (const char*) Input file from Katya (modified by Chris) // containing layer #. ring #, start and end // of ring radius, SiPM size, 4 hexadecimal // words specifying if the phi location in // 120-degree sector is filled, scintillator // type (c: cast, m: mould) -// outfile (std::string) Output file -// debug (int) Flag to switch on (1) or off (0) debug +// outfile1 (const char*) Output file for the part to be inserted in +// the global section +// outfile2 (const char*) Output file for the part to be inserted in +// the ddAlgorithm part +// debug (int) Two digit integer to set debug for each +// of the outputs // ////////////////////////////////////////////////////////////////////////////// +#include "Geometry/HGCalCommonData/interface/HGCalProperty.h" +#include "Geometry/HGCalCommonData/interface/HGCalTileIndex.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" #include #include #include @@ -37,21 +44,6 @@ #include #include -const int kHGCalWaferUOffset = 0; -const int kHGCalWaferUMask = 0x1F; -const int kHGCalWaferUSignOffset = 5; -const int kHGCalWaferUSignMask = 0x1; -const int kHGCalWaferVOffset = 6; -const int kHGCalWaferVMask = 0x1F; -const int kHGCalWaferVSignOffset = 11; -const int kHGCalWaferVSignMask = 0x1; -const int kHGCalLayerOffset = 18; -const int kHGCalLayerMask = 0x1F; -const int kHGCalPhiOffset = 0; -const int kHGCalPhiMask = 0x1FF; -const int kHGCalRingOffset = 9; -const int kHGCalRingMask = 0x1FF; - struct wafer { int thick, partial, orient; wafer(int t = 0, int p = 0, int o = 0) : thick(t), partial(p), orient(o){}; @@ -59,9 +51,19 @@ struct wafer { struct tile { double sipm; - int hex1, hex2, hex3, hex4, type; - tile(double s = 0, int h1 = 0, int h2 = 0, int h3 = 0, int h4 = 0, int t = 0) - : sipm(s), hex1(h1), hex2(h2), hex3(h3), hex4(h4), type(t){}; + int type, hex[4]; + tile(double s = 0, int h1 = 0, int h2 = 0, int h3 = 0, int h4 = 0, int t = 0) : sipm(s), type(t) { + hex[0] = h1; + hex[1] = h2; + hex[2] = h3; + hex[3] = h4; + }; +}; + +struct tileZone { + tileZone(int l0 = 0, int r0 = 0, int r1 = 0, int f0 = 0, int f1 = 0) + : layer(l0), rmin(r0), rmax(r1), phimin(f0), phimax(f1){}; + int layer, rmin, rmax, phimin, phimax; }; std::vector splitString(const std::string& fLine); @@ -78,31 +80,29 @@ class ConvertSilicon { private: void writeSilicon(const char*, const std::map&, const std::string&, const bool&, const bool&); - int waferIndex(const int&, const int&, const int&); - int waferLayer(const int&); - int waferU(const int&); - int waferV(const int&); const int layMax1_, layMax2_; }; class ConvertScintillator { public: - ConvertScintillator(int layMin = 36); - void convert(const char*, const char*, int debug = 0); + ConvertScintillator(int layMin = 28); + void convert(const char*, const char*, const char*, int debug = 0); private: - int tileIndex(const int&, const int&, const int&); - int tileLayer(const int&); - int tileRing(const int&); - int tilePhi(const int&); + void makeTitle(const char* outfile, + const std::map& module, + const std::map >& ringR, + int lmin, + int lmax, + bool debug); const int layMin_; }; int main(int argc, char* argv[]) { - if (argc < 4) { - std::cout << "Please give a minimum of 7/4 arguments \n" + if (argc < 5) { + std::cout << "Please give a minimum of 7/5 arguments \n" << "mode (1:silicon; 2:scintillator)\n" << "input file name\n" << "output file name\n" @@ -111,7 +111,8 @@ int main(int argc, char* argv[]) { << " third output file name\n" << " output mode (0: gobal; 1: local)\n" << " debug (three digis to set debug for each output)\n" - << "for scintillator 1 additional parameter after the first 3\n" + << "for scintillator 2 additional parameters after the first 3\n" + << " second output file name\n" << " debug flag\n" << std::endl; return 0; @@ -139,12 +140,17 @@ int main(int argc, char* argv[]) { const char* outfile3 = argv[5]; int modeGlobal = atoi(argv[6]); int debug = atoi(argv[7]); + std::cout << "Calls ConvertSilicon for i/p file " << infile << " o/p files " << outfile1 << ":" << outfile2 << ":" + << outfile3 << " Mode " << modeGlobal << " Debug " << debug << std::endl; c1.convert(infile, outfile1, outfile2, outfile3, modeGlobal, debug); } else { ConvertScintillator c1; - const char* outfile = argv[3]; + const char* outfile1 = argv[3]; + const char* outfile2 = argv[4]; int debug = atoi(argv[4]); - c1.convert(infile, outfile, debug); + std::cout << "Calls ConvertScintillator for i/p file " << infile << " o/p files " << outfile1 << ":" << outfile2 + << " Debug " << debug << std::endl; + c1.convert(infile, outfile1, outfile2, debug); } return 0; } @@ -186,6 +192,8 @@ void ConvertSilicon::convert( bool global = (modeGlobal < 1); while (fInput.getline(buffer, 1024)) { ++all; + if (debug % 10 > 1) + std::cout << "[" << all << "] " << buffer << std::endl; if (buffer[0] == '#') { ++comments; } else { @@ -203,13 +211,13 @@ void ConvertSilicon::convert( int orient = std::atoi(items[5].c_str()); wafer waf(thck, part, orient); if (layer <= layMax1_) { - int index = waferIndex(layer, waferU, waferV); + int index = HGCalWaferIndex::waferIndex(layer, waferU, waferV, false); module1[index] = waf; } else if ((layer <= layMax2_) || global) { - int index = waferIndex(layer - layMax1_, waferU, waferV); + int index = HGCalWaferIndex::waferIndex(layer - layMax1_, waferU, waferV, false); module2[index] = waf; } else { - int index = waferIndex(layer - layMax1_, waferU, waferV); + int index = HGCalWaferIndex::waferIndex(layer - layMax1_, waferU, waferV, false); module3[index] = waf; } } @@ -221,12 +229,12 @@ void ConvertSilicon::convert( << module3.size() << " are good and " << bad << " are bad\n" << std::endl; //Now write separately for EE, HEsil and HEmix - writeSilicon(outfile1, module1, "EE", global, (debug % 10 == 1)); + writeSilicon(outfile1, module1, "EE", global, (debug % 10 > 0)); // Next HEsil part - writeSilicon(outfile2, module2, "HE", global, ((debug / 10) % 10 == 1)); + writeSilicon(outfile2, module2, "HE", global, ((debug / 10) % 10 > 0)); // Finally HEmix part if (!global) - writeSilicon(outfile3, module3, "HE", global, ((debug / 100) % 10 == 1)); + writeSilicon(outfile3, module3, "HE", global, ((debug / 100) % 10 > 0)); } } @@ -236,10 +244,12 @@ void ConvertSilicon::writeSilicon(const char* outfile, const bool& mode, const bool& debug) { char apost('"'); - unsigned int k1(0), k2(0), k3(0), k4(0); + unsigned int k1(0), k2(0); std::map::const_iterator itr; std::string blank(" "); std::ofstream fOut(outfile); + std::vector layerStart; + int layer(-1); if (mode) { blank = " "; fOut << blank << ""; } for (itr = module.begin(); itr != module.end(); ++itr) { + std::string last = ((k1 + 1) == module.size()) ? " " : ","; if (k1 % 7 == 0) - fOut << "\n " << blank << std::setw(8) << itr->first << ","; + fOut << "\n " << blank << std::setw(8) << itr->first << last; else - fOut << std::setw(8) << itr->first << ","; + fOut << std::setw(8) << itr->first << last; + if (HGCalWaferIndex::waferLayer(itr->first) != layer) { + layerStart.emplace_back(k1); + layer = HGCalWaferIndex::waferLayer(itr->first); + } ++k1; if (debug) - std::cout << "Wafer " << waferLayer(itr->first) << ":" << waferU(itr->first) << ":" << waferV(itr->first) << " T " - << (itr->second).thick << " P " << (itr->second).partial << " O " << (itr->second).orient << std::endl; + std::cout << "Wafer " << HGCalWaferIndex::waferLayer(itr->first) << ":" << HGCalWaferIndex::waferU(itr->first) + << ":" << HGCalWaferIndex::waferV(itr->first) << " T " << (itr->second).thick << " P " + << (itr->second).partial << " O " << (itr->second).orient << std::endl; } fOut << "\n" << blank << "\n"; if (mode) - fOut << blank << ""; + fOut << blank << ""; else - fOut << blank << ""; for (itr = module.begin(); itr != module.end(); ++itr) { - if (k2 % 20 == 0) - fOut << "\n " << blank << std::setw(2) << (itr->second).thick << ","; + int property = HGCalProperty::waferProperty((itr->second).thick, (itr->second).partial, (itr->second).orient); + std::string last = ((k2 + 1) == module.size()) ? " " : ","; + if (k2 % 12 == 0) + fOut << "\n " << blank << std::setw(4) << property << last; else - fOut << std::setw(2) << (itr->second).thick << ","; + fOut << std::setw(4) << property << last; ++k2; } fOut << "\n" << blank << "\n"; if (mode) { - fOut << blank << ""; - for (itr = module.begin(); itr != module.end(); ++itr) { - if (k3 % 20 == 0) - fOut << "\n " << blank << std::setw(2) << (itr->second).partial << ","; - else - fOut << std::setw(2) << (itr->second).partial << ","; - ++k3; - } - fOut << "\n" << blank << "\n"; - fOut << blank << ""; - for (itr = module.begin(); itr != module.end(); ++itr) { - if (k4 % 20 == 0) - fOut << "\n " << blank << std::setw(2) << (itr->second).orient << ","; - else - fOut << std::setw(2) << (itr->second).orient << ","; - ++k4; - } - fOut << "\n" << blank << "\n"; + fOut << blank << ""; + } else { + fOut << blank << ""; } + for (unsigned k3 = 0; k3 < layerStart.size(); ++k3) { + std::string last = ((k3 + 1) == layerStart.size()) ? " " : ","; + if (k3 % 10 == 0) + fOut << "\n " << blank << std::setw(5) << layerStart[k3] << last; + else + fOut << std::setw(5) << layerStart[k3] << last; + } + fOut << "\n" << blank << "\n"; fOut.close(); } -int ConvertSilicon::waferIndex(const int& layer, const int& waferU, const int& waferV) { - int id(0); - int waferUabs(std::abs(waferU)), waferVabs(std::abs(waferV)); - int waferUsign = (waferU >= 0) ? 0 : 1; - int waferVsign = (waferV >= 0) ? 0 : 1; - id |= (((waferUabs & kHGCalWaferUMask) << kHGCalWaferUOffset) | - ((waferUsign & kHGCalWaferUSignMask) << kHGCalWaferUSignOffset) | - ((waferVabs & kHGCalWaferVMask) << kHGCalWaferVOffset) | - ((waferVsign & kHGCalWaferVSignMask) << kHGCalWaferVSignOffset) | - ((layer & kHGCalLayerMask) << kHGCalLayerOffset)); - return id; -} - -int ConvertSilicon::waferLayer(const int& id) { return (id >> kHGCalLayerOffset) & kHGCalLayerMask; } - -int ConvertSilicon::waferU(const int& id) { - int32_t iu = (id >> kHGCalWaferUOffset) & kHGCalWaferUMask; - return (((id >> kHGCalWaferUSignOffset) & kHGCalWaferUSignMask) ? -iu : iu); -} - -int ConvertSilicon::waferV(const int& id) { - int32_t iv = (id >> kHGCalWaferVOffset) & kHGCalWaferVMask; - return (((id >> kHGCalWaferVSignOffset) & kHGCalWaferVSignMask) ? -iv : iv); -} - ConvertScintillator::ConvertScintillator(int layMin) : layMin_(layMin) {} -void ConvertScintillator::convert(const char* infile, const char* outfile, int debug) { +void ConvertScintillator::convert(const char* infile, const char* outfile1, const char* outfile2, int debug) { std::ifstream fInput(infile); if (!fInput.good()) { std::cout << "Cannot open file " << infile << std::endl; @@ -338,6 +324,7 @@ void ConvertScintillator::convert(const char* infile, const char* outfile, int d std::map > ringR; std::map > layerRing; unsigned int all(0), comments(0), others(0), bad(0), good(0); + int lmin(99), lmax(0); while (fInput.getline(buffer, 1024)) { ++all; if (buffer[0] == '#') { @@ -356,8 +343,10 @@ void ConvertScintillator::convert(const char* infile, const char* outfile, int d int type = static_cast(std::find(types, types + 1, items[9]) - types); if (layer > layMin_) { tile tl(sipm, hex1, hex2, hex3, hex4, type); - int index = tileIndex(layer - layMin_, ring, 0); + int index = HGCalTileIndex::tileIndex(layer - layMin_, ring + 1, 0); module[index] = tl; + lmin = std::min((layer - layMin_), lmin); + lmax = std::max((layer - layMin_), lmax); ringR[ring] = std::pair(rstart, rend); if (layerRing.find(layer) == layerRing.end()) { layerRing[layer] = std::pair(ring, ring); @@ -376,28 +365,30 @@ void ConvertScintillator::convert(const char* infile, const char* outfile, int d << layerRing.size() << " are good and " << bad << " are bad\n" << std::endl; - //Now write the content - std::ofstream fOut(outfile); + //Now write the content in the first file + std::ofstream fOut(outfile1); char apost('"'); unsigned int l1(0), l2(0); std::map >::const_iterator it1; fOut << " "; for (it1 = ringR.begin(); it1 != ringR.end(); ++it1) { + std::string last = ((l1 + 1) == ringR.size()) ? " " : ","; if (l1 % 6 == 0) - fOut << "\n " << std::setw(8) << std::setprecision(6) << (it1->second).first << "*mm,"; + fOut << "\n " << std::setw(8) << std::setprecision(6) << (it1->second).first << "*mm" << last; else - fOut << std::setw(8) << std::setprecision(6) << (it1->second).first << "*mm,"; + fOut << std::setw(8) << std::setprecision(6) << (it1->second).first << "*mm" << last; ++l1; } fOut << "\n \n"; fOut << " "; for (it1 = ringR.begin(); it1 != ringR.end(); ++it1) { + std::string last = ((l2 + 1) == ringR.size()) ? " " : ","; if (l2 % 6 == 0) - fOut << "\n " << std::setw(8) << std::setprecision(6) << (it1->second).second << "*mm,"; + fOut << "\n " << std::setw(8) << std::setprecision(6) << (it1->second).second << "*mm" << last; else - fOut << std::setw(8) << std::setprecision(6) << (it1->second).second << "*mm,"; + fOut << std::setw(8) << std::setprecision(6) << (it1->second).second << "*mm" << last; ++l2; } fOut << "\n \n"; @@ -407,113 +398,253 @@ void ConvertScintillator::convert(const char* infile, const char* outfile, int d fOut << " "; for (it2 = layerRing.begin(); it2 != layerRing.end(); ++it2) { + std::string last = ((l3 + 1) == layerRing.size()) ? " " : ","; if (l3 % 14 == 0) - fOut << "\n " << std::setw(4) << (it2->second).first << ","; + fOut << "\n " << std::setw(4) << (it2->second).first << last; else - fOut << std::setw(4) << (it2->second).first << ","; + fOut << std::setw(4) << (it2->second).first << last; ++l3; } fOut << "\n \n"; fOut << " "; for (it2 = layerRing.begin(); it2 != layerRing.end(); ++it2) { + std::string last = ((l4 + 1) == layerRing.size()) ? " " : ","; if (l4 % 14 == 0) - fOut << "\n " << std::setw(4) << (it2->second).second << ","; + fOut << "\n " << std::setw(4) << (it2->second).second << last; else - fOut << std::setw(4) << (it2->second).second << ","; + fOut << std::setw(4) << (it2->second).second << last; ++l4; } fOut << "\n \n"; - unsigned int k1(0), k2(0), k3(0), k4(0), k5(0), k6(0), k7(0); + unsigned int k1(0), k2(0), k3(0), k4(0), k5(0), k6(0); std::map::const_iterator itr; fOut << " "; for (itr = module.begin(); itr != module.end(); ++itr) { + std::string last = ((k1 + 1) == module.size()) ? " " : ","; if (k1 % 7 == 0) - fOut << "\n " << std::setw(8) << itr->first << ","; + fOut << "\n " << std::setw(8) << itr->first << last; else - fOut << std::setw(8) << itr->first << ","; + fOut << std::setw(8) << itr->first << last; ++k1; - if (debug > 0) - std::cout << "Tile " << tileLayer(itr->first) << ":" << tileRing(itr->first) << " Type " << (itr->second).type - << " Area " << (itr->second).sipm << std::hex << " HEX " << (itr->second).hex1 << " " - << (itr->second).hex2 << " " << (itr->second).hex3 << " " << (itr->second).hex4 << std::dec << "\n"; + if ((debug % 10) > 0) + std::cout << "Tile " << HGCalTileIndex::tileLayer(itr->first) << ":" << HGCalTileIndex::tileRing(itr->first) + << " Type " << (itr->second).type << " Area " << (itr->second).sipm << std::hex << " HEX " + << (itr->second).hex[0] << " " << (itr->second).hex[1] << " " << (itr->second).hex[2] << " " + << (itr->second).hex[3] << std::dec << "\n"; } fOut << "\n \n"; - fOut << " "; for (itr = module.begin(); itr != module.end(); ++itr) { - if (k2 % 20 == 0) - fOut << "\n " << std::setw(2) << (itr->second).type << ","; + std::string last = ((k2 + 1) == module.size()) ? " " : ","; + int property = HGCalTileIndex::tileProperty((itr->second).type, (itr->second).sipm); + if (k2 % 15 == 0) + fOut << "\n " << std::setw(3) << property << last; else - fOut << std::setw(2) << (itr->second).type << ","; + fOut << std::setw(3) << property << last; ++k2; } fOut << "\n \n"; - fOut << " "; + fOut << " " << std::hex; for (itr = module.begin(); itr != module.end(); ++itr) { - if (k3 % 20 == 0) - fOut << "\n " << std::setw(2) << (itr->second).sipm << ","; + std::string last = ((k3 + 1) == module.size()) ? " " : ","; + if (k3 % 6 == 0) + fOut << "\n 0x" << (itr->second).hex[0] << last; else - fOut << std::setw(2) << (itr->second).sipm << ","; + fOut << " 0x" << (itr->second).hex[0] << last; ++k3; } - fOut << "\n \n"; - fOut << " \n" << std::dec; + fOut << " " << std::hex; for (itr = module.begin(); itr != module.end(); ++itr) { + std::string last = ((k4 + 1) == module.size()) ? " " : ","; if (k4 % 6 == 0) - fOut << "\n 0x" << (itr->second).hex1 << ","; + fOut << "\n 0x" << (itr->second).hex[1] << last; else - fOut << " 0x" << (itr->second).hex1 << ","; + fOut << " 0x" << (itr->second).hex[1] << last; ++k4; } fOut << "\n \n" << std::dec; - fOut << " " << std::hex; for (itr = module.begin(); itr != module.end(); ++itr) { + std::string last = ((k5 + 1) == module.size()) ? " " : ","; if (k5 % 6 == 0) - fOut << "\n 0x" << (itr->second).hex2 << ","; + fOut << "\n 0x" << (itr->second).hex[2] << last; else - fOut << " 0x" << (itr->second).hex2 << ","; + fOut << " 0x" << (itr->second).hex[2] << last; ++k5; } fOut << "\n \n" << std::dec; - fOut << " " << std::hex; for (itr = module.begin(); itr != module.end(); ++itr) { + std::string last = ((k6 + 1) == module.size()) ? " " : ","; if (k6 % 6 == 0) - fOut << "\n 0x" << (itr->second).hex3 << ","; + fOut << "\n 0x" << (itr->second).hex[3] << last; else - fOut << " 0x" << (itr->second).hex3 << ","; + fOut << " 0x" << (itr->second).hex[3] << last; ++k6; } fOut << "\n \n" << std::dec; - fOut << " " << std::hex; - for (itr = module.begin(); itr != module.end(); ++itr) { - if (k7 % 6 == 0) - fOut << std::setw(6) << "\n 0x" << (itr->second).hex4 << ","; - else - fOut << " 0x" << (itr->second).hex4 << ","; - ++k7; - } - fOut << "\n \n" << std::dec; fOut.close(); - } -} -int ConvertScintillator::tileIndex(const int& layer, const int& ring, const int& iphi) { - int id(0); - id |= (((iphi & kHGCalPhiMask) << kHGCalPhiOffset) | ((ring & kHGCalRingMask) << kHGCalRingOffset) | - ((layer & kHGCalLayerMask) << kHGCalLayerOffset)); - return id; + //Now write for the second file + makeTitle(outfile2, module, ringR, lmin, lmax, (((debug / 10) % 10) > 0)); + } } -int ConvertScintillator::tileLayer(const int& id) { return (id >> kHGCalLayerOffset) & kHGCalLayerMask; } - -int ConvertScintillator::tileRing(const int& id) { return (id >> kHGCalRingOffset) & kHGCalRingMask; } +void ConvertScintillator::makeTitle(const char* outfile, + const std::map& module, + const std::map >& ringR, + int lmin, + int lmax, + bool debug) { + const int zside = 1; + std::vector zones; + for (int layer = lmin; layer <= lmax; ++layer) { + tileZone tile0; + int kk, irmin, irmax; + for (int phi = 1; phi <= HGCalProperty::kHGCalTilePhis; ++phi) { + kk = irmin = irmax = 0; + for (std::map::const_iterator itr = module.begin(); itr != module.end(); ++itr) { + if ((HGCalTileIndex::tileLayer(itr->first) == layer) && + HGCalTileIndex::tileExist((itr->second).hex, zside, phi)) { + int ir = HGCalTileIndex::tileRing(itr->first); + if (kk == 0) { + irmin = irmax = ir; + } else { + irmax = ir; + } + ++kk; + } + } + if (debug) + std::cout << "L|F|R " << layer << ":" << phi << ":" << irmin << ":" << irmax << std::endl; + if (phi == 1) { + tile0.layer = layer; + tile0.rmin = irmin; + tile0.rmax = irmax; + tile0.phimin = phi; + tile0.phimax = phi; + } else if ((tile0.rmin != irmin) || (tile0.rmax != irmax)) { + zones.push_back(tile0); + tile0.layer = layer; + tile0.rmin = irmin; + tile0.rmax = irmax; + tile0.phimin = phi; + tile0.phimax = phi; + if (phi == HGCalProperty::kHGCalTilePhis) + zones.push_back(tile0); + } else { + tile0.phimax = phi; + if (phi == HGCalProperty::kHGCalTilePhis) + zones.push_back(tile0); + } + } + } -int ConvertScintillator::tilePhi(const int& id) { return (id >> kHGCalPhiOffset) & kHGCalPhiMask; } + int nmax = zones.size(); + if (nmax > 0) { + std::ofstream fout(outfile); + char apost('"'); + unsigned int l1(0), l2(0); + std::map >::const_iterator it1; + fout << " "; + for (it1 = ringR.begin(); it1 != ringR.end(); ++it1) { + std::string last = ((l1 + 1) == ringR.size()) ? " " : ","; + if (l1 % 6 == 0) + fout << "\n " << std::setw(8) << std::setprecision(6) << (it1->second).first << "*mm" << last; + else + fout << std::setw(8) << std::setprecision(6) << (it1->second).first << "*mm" << last; + ++l1; + } + fout << "\n \n"; + fout << " "; + for (it1 = ringR.begin(); it1 != ringR.end(); ++it1) { + std::string last = ((l2 + 1) == ringR.size()) ? " " : ","; + if (l2 % 6 == 0) + fout << "\n " << std::setw(8) << std::setprecision(6) << (it1->second).second << "*mm" << last; + else + fout << std::setw(8) << std::setprecision(6) << (it1->second).second << "*mm" << last; + ++l2; + } + fout << "\n \n"; + fout << " "; + if (debug) + std::cout << " "; + for (int k = 0; k < nmax; ++k) { + std::string last = ((k + 1) == nmax) ? " " : ","; + int lyr1r2 = HGCalTileIndex::tilePack(zones[k].layer, zones[k].rmin, zones[k].rmax); + if (k % 7 == 0) { + fout << "\n " << std::setw(9) << lyr1r2 << last; + if (debug) + std::cout << "\n " << std::setw(9) << lyr1r2 << last; + } else { + fout << std::setw(9) << lyr1r2 << last; + if (debug) + std::cout << std::setw(9) << lyr1r2 << last; + } + } + fout << "\n \n"; + if (debug) + std::cout << "\n \n"; + int layer = -1; + std::vector layerStart; + fout << " "; + if (debug) + std::cout << " "; + for (int k = 0; k < nmax; ++k) { + std::string last = ((k + 1) == nmax) ? " " : ","; + int f1f2 = HGCalTileIndex::tilePack(0, zones[k].phimin, zones[k].phimax); + if (k % 9 == 0) { + fout << "\n " << std::setw(7) << f1f2 << last; + if (debug) + std::cout << "\n " << std::setw(7) << f1f2 << last; + } else { + fout << std::setw(7) << f1f2 << last; + if (debug) + std::cout << std::setw(7) << f1f2 << last; + } + if (zones[k].layer != layer) { + layerStart.emplace_back(k); + layer = zones[k].layer; + } + } + fout << "\n \n"; + if (debug) + std::cout << "\n \n"; + fout << " "; + if (debug) + std::cout << " "; + for (unsigned int k = 0; k < layerStart.size(); ++k) { + std::string last = ((k + 1) == layerStart.size()) ? " " : ","; + if (k % 10 == 0) { + fout << "\n " << std::setw(5) << layerStart[k] << last; + if (debug) + std::cout << "\n " << std::setw(5) << layerStart[k] << last; + } else { + fout << std::setw(5) << layerStart[k] << last; + if (debug) + std::cout << std::setw(5) << layerStart[k] << last; + } + } + fout << "\n \n"; + if (debug) + std::cout << "\n \n"; + fout.close(); + } +} diff --git a/Geometry/HGCalCommonData/test/HGCalParameterTester.cc b/Geometry/HGCalCommonData/test/HGCalParameterTester.cc index a859d8fcc9f97..bf8233963577d 100644 --- a/Geometry/HGCalCommonData/test/HGCalParameterTester.cc +++ b/Geometry/HGCalCommonData/test/HGCalParameterTester.cc @@ -280,9 +280,9 @@ void HGCalParameterTester::analyze(const edm::Event& iEvent, const edm::EventSet for (; itr != phgp->tileInfoMap_.end(); ++itr, ++kk) std::cout << "[" << kk << "] " << itr->first << "[" << HGCalTileIndex::tileLayer(itr->first) << ", " << HGCalTileIndex::tileRing(itr->first) << ", " << HGCalTileIndex::tilePhi(itr->first) << "] (" - << (itr->second).type << ", " << (itr->second).sipm << std::hex << ", " << (itr->second).hex1 << ", " - << (itr->second).hex2 << ", " << (itr->second).hex3 << ", " << (itr->second).hex4 << ")" << std::dec - << std::endl; + << (itr->second).type << ", " << (itr->second).sipm << std::hex << ", " << (itr->second).hex[0] + << ", " << (itr->second).hex[1] << ", " << (itr->second).hex[2] << ", " << (itr->second).hex[3] << ")" + << std::dec << std::endl; } } diff --git a/Geometry/HGCalCommonData/test/python/dumpAHcalModuleDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpAHcalModuleDD4Hep_cfg.py index 0e8bda3317e58..2016cf6a095b1 100644 --- a/Geometry/HGCalCommonData/test/python/dumpAHcalModuleDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpAHcalModuleDD4Hep_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddahcalModuleAlgo-algorithm.xml'), diff --git a/Geometry/HGCalCommonData/test/python/dumpAHcalModuleDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpAHcalModuleDDD_cfg.py index 8baa5e476fe9e..bc75c314dc804 100644 --- a/Geometry/HGCalCommonData/test/python/dumpAHcalModuleDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpAHcalModuleDDD_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/dumpExtendedHGCalGeometryDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpExtendedHGCalGeometryDD4Hep_cfg.py index cf141e984931d..05094f8646864 100644 --- a/Geometry/HGCalCommonData/test/python/dumpExtendedHGCalGeometryDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpExtendedHGCalGeometryDD4Hep_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D46.xml'), diff --git a/Geometry/HGCalCommonData/test/python/dumpExtendedHGCalGeometryDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpExtendedHGCalGeometryDDD_cfg.py index 3aad9bd70f892..968ca1be50574 100644 --- a/Geometry/HGCalCommonData/test/python/dumpExtendedHGCalGeometryDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpExtendedHGCalGeometryDDD_cfg.py @@ -8,9 +8,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalCellDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalCellDD4Hep_cfg.py index 7edfc6f2314c0..dcf3a1f464dcb 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalCellDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalCellDD4Hep_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalcell-algorithm.xml'), diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalCellDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalCellDDD_cfg.py index f2633d6ea94cb..0924bd8f06ef2 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalCellDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalCellDDD_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalEEDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalEEDD4Hep_cfg.py index cb5a07628593b..5eb3d88d6e9bb 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalEEDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalEEDD4Hep_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalEE-algorithm.xml'), diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalEEDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalEEDDD_cfg.py index 698c10f8e826e..025517ddd6236 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalEEDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalEEDDD_cfg.py @@ -5,9 +5,10 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() + process.MessageLogger.TGeoMgrFromDdd=dict() process.source = cms.Source("EmptySource") @@ -16,7 +17,7 @@ ) process.add_(cms.ESProducer("TGeoMgrFromDdd", - verbose = cms.untracked.bool(False), + verbose = cms.untracked.bool(True), level = cms.untracked.int32(14) )) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalEEFileDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalEEFileDD4Hep_cfg.py new file mode 100644 index 0000000000000..8173beab93f31 --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalEEFileDD4Hep_cfg.py @@ -0,0 +1,25 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DDHGCalEETest") + +process.load('FWCore.MessageService.MessageLogger_cfi') +process.source = cms.Source("EmptySource") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) + ) + +process.MessageLogger.cerr.FwkReport.reportEvery = 5 +if hasattr(process,'MessageLogger'): + process.MessageLogger.HGCalGeom=dict() + +process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", + confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalEEFile-algorithm.xml'), + appendToDataLabel = cms.string('DDHGCalEE') + ) + +process.testDump = cms.EDAnalyzer("DDTestDumpFile", + outputFileName = cms.untracked.string('hgcalEEDD4Hep.root'), + DDDetector = cms.ESInputTag('','DDHGCalEE') + ) + +process.p = cms.Path(process.testDump) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalEEFileDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalEEFileDDD_cfg.py new file mode 100644 index 0000000000000..58228cc7564dd --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalEEFileDDD_cfg.py @@ -0,0 +1,26 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DUMP") +process.load("Geometry.HGCalCommonData.testHGCalEEFileXML_cfi") +process.load('FWCore.MessageService.MessageLogger_cfi') + +if 'MessageLogger' in process.__dict__: + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() + +process.source = cms.Source("EmptySource") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +process.add_(cms.ESProducer("TGeoMgrFromDdd", + verbose = cms.untracked.bool(False), + level = cms.untracked.int32(14) +)) + +process.dump = cms.EDAnalyzer("DumpSimGeometry", + outputFileName = cms.untracked.string('hgcalEEDDD.root')) + +process.p = cms.Path(process.dump) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalEEV15DD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalEEV15DD4Hep_cfg.py new file mode 100644 index 0000000000000..4237f46370ff0 --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalEEV15DD4Hep_cfg.py @@ -0,0 +1,25 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DDHGCalEETest") + +process.load('FWCore.MessageService.MessageLogger_cfi') +process.source = cms.Source("EmptySource") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) + ) + +process.MessageLogger.cerr.FwkReport.reportEvery = 5 +if hasattr(process,'MessageLogger'): + process.MessageLogger.HGCalGeom=dict() + +process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", + confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalEEV15-algorithm.xml'), + appendToDataLabel = cms.string('DDHGCalEE') + ) + +process.testDump = cms.EDAnalyzer("DDTestDumpFile", + outputFileName = cms.untracked.string('hgcalEEV15DD4Hep.root'), + DDDetector = cms.ESInputTag('','DDHGCalEE') + ) + +process.p = cms.Path(process.testDump) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalEEV15DDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalEEV15DDD_cfg.py new file mode 100644 index 0000000000000..1d7064b5e59f4 --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalEEV15DDD_cfg.py @@ -0,0 +1,26 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DUMP") +process.load("Geometry.HGCalCommonData.testHGCalEEV15XML_cfi") +process.load('FWCore.MessageService.MessageLogger_cfi') + +if 'MessageLogger' in process.__dict__: + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() + +process.source = cms.Source("EmptySource") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +process.add_(cms.ESProducer("TGeoMgrFromDdd", + verbose = cms.untracked.bool(False), + level = cms.untracked.int32(14) +)) + +process.dump = cms.EDAnalyzer("DumpSimGeometry", + outputFileName = cms.untracked.string('hgcalEEV15DDD.root')) + +process.p = cms.Path(process.dump) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalGeometryDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalGeometryDD4Hep_cfg.py index 4f4a818a9f5f9..cfa1262aa6dbe 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalGeometryDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalGeometryDD4Hep_cfg.py @@ -10,10 +10,10 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", - confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/testHGCalV10.xml'), + confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/testHGCalV14.xml'), appendToDataLabel = cms.string('DDHGCal') ) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalGeometryDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalGeometryDDD_cfg.py index 25d9e10a47382..17bd029a03f86 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalGeometryDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalGeometryDDD_cfg.py @@ -1,13 +1,13 @@ import FWCore.ParameterSet.Config as cms process = cms.Process("DUMP") -process.load("Geometry.HGCalCommonData.testHGCalV13XML_cfi") +process.load("Geometry.HGCalCommonData.testHGCalV14XML_cfi") process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixDD4Hep_cfg.py index 262a721c237c0..31eb60f0ce8f9 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixDD4Hep_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalHEmix-algorithm.xml'), diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixDDD_cfg.py index f987853217f4a..af494dfe2bb94 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixDDD_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixFileDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixFileDD4Hep_cfg.py new file mode 100644 index 0000000000000..420e921d7da6f --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixFileDD4Hep_cfg.py @@ -0,0 +1,25 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DDHGCalHEmixTest") + +process.load('FWCore.MessageService.MessageLogger_cfi') +process.source = cms.Source("EmptySource") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) + ) + +process.MessageLogger.cerr.FwkReport.reportEvery = 5 +if hasattr(process,'MessageLogger'): + process.MessageLogger.HGCalGeom=dict() + +process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", + confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalHEmixFile-algorithm.xml'), + appendToDataLabel = cms.string('DDHGCalHEmix') + ) + +process.testDump = cms.EDAnalyzer("DDTestDumpFile", + outputFileName = cms.untracked.string('hgcalHEmixDD4Hep.root'), + DDDetector = cms.ESInputTag('','DDHGCalHEmix') + ) + +process.p = cms.Path(process.testDump) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixFileDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixFileDDD_cfg.py new file mode 100644 index 0000000000000..febd99d11052a --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixFileDDD_cfg.py @@ -0,0 +1,26 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DUMP") +process.load("Geometry.HGCalCommonData.testHGCalHEmixFileXML_cfi") +process.load('FWCore.MessageService.MessageLogger_cfi') + +if 'MessageLogger' in process.__dict__: + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() + +process.source = cms.Source("EmptySource") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +process.add_(cms.ESProducer("TGeoMgrFromDdd", + verbose = cms.untracked.bool(False), + level = cms.untracked.int32(14) +)) + +process.dump = cms.EDAnalyzer("DumpSimGeometry", + outputFileName = cms.untracked.string('hgcalHEmixDDD.root')) + +process.p = cms.Path(process.dump) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixV15DD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixV15DD4Hep_cfg.py new file mode 100644 index 0000000000000..43d5852ddd11b --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixV15DD4Hep_cfg.py @@ -0,0 +1,25 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DDHGCalHEmixTest") + +process.load('FWCore.MessageService.MessageLogger_cfi') +process.source = cms.Source("EmptySource") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) + ) + +process.MessageLogger.cerr.FwkReport.reportEvery = 5 +if hasattr(process,'MessageLogger'): + process.MessageLogger.HGCalGeom=dict() + +process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", + confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalHEmixV15-algorithm.xml'), + appendToDataLabel = cms.string('DDHGCalHEmix') + ) + +process.testDump = cms.EDAnalyzer("DDTestDumpFile", + outputFileName = cms.untracked.string('hgcalHEmixV15DD4Hep.root'), + DDDetector = cms.ESInputTag('','DDHGCalHEmix') + ) + +process.p = cms.Path(process.testDump) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixV15DDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixV15DDD_cfg.py new file mode 100644 index 0000000000000..c08c7576b0e4d --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalHEmixV15DDD_cfg.py @@ -0,0 +1,26 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DUMP") +process.load("Geometry.HGCalCommonData.testHGCalHEmixV15XML_cfi") +process.load('FWCore.MessageService.MessageLogger_cfi') + +if 'MessageLogger' in process.__dict__: + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() + +process.source = cms.Source("EmptySource") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +process.add_(cms.ESProducer("TGeoMgrFromDdd", + verbose = cms.untracked.bool(False), + level = cms.untracked.int32(14) +)) + +process.dump = cms.EDAnalyzer("DumpSimGeometry", + outputFileName = cms.untracked.string('hgcalHEmixV15DDD.root')) + +process.p = cms.Path(process.dump) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalHEsilDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalHEsilDD4Hep_cfg.py index c4922b2ebc639..ce81051ff531d 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalHEsilDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalHEsilDD4Hep_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalHEsil-algorithm.xml'), diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalHEsilDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalHEsilDDD_cfg.py index 5bb7734211cd5..ad30b3c6b06e4 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalHEsilDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalHEsilDDD_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalHEsilV15DD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalHEsilV15DD4Hep_cfg.py new file mode 100644 index 0000000000000..b2cf432736377 --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalHEsilV15DD4Hep_cfg.py @@ -0,0 +1,25 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DDHGCalHEsilV15Test") + +process.load('FWCore.MessageService.MessageLogger_cfi') +process.source = cms.Source("EmptySource") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) + ) + +process.MessageLogger.cerr.FwkReport.reportEvery = 5 +if hasattr(process,'MessageLogger'): + process.MessageLogger.HGCalGeom=dict() + +process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", + confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalHEsilV15-algorithm.xml'), + appendToDataLabel = cms.string('DDHGCalHEsilV15') + ) + +process.testDump = cms.EDAnalyzer("DDTestDumpFile", + outputFileName = cms.untracked.string('hgcalHEsilV15DD4Hep.root'), + DDDetector = cms.ESInputTag('','DDHGCalHEsilV15') + ) + +process.p = cms.Path(process.testDump) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalHEsilV15DDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalHEsilV15DDD_cfg.py new file mode 100644 index 0000000000000..05a6f7e62fbc8 --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalHEsilV15DDD_cfg.py @@ -0,0 +1,27 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DUMP") +process.load("Geometry.HGCalCommonData.testHGCalHEsilV15XML_cfi") +process.load('FWCore.MessageService.MessageLogger_cfi') + +if 'MessageLogger' in process.__dict__: + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() + +process.source = cms.Source("EmptySource") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +process.add_(cms.ESProducer("TGeoMgrFromDdd", + verbose = cms.untracked.bool(False), + level = cms.untracked.int32(14) +)) + + +process.dump = cms.EDAnalyzer("DumpSimGeometry", + outputFileName = cms.untracked.string('hgcalHEsilV15DDD.root')) + +process.p = cms.Path(process.dump) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalModuleAlgoDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalModuleAlgoDD4Hep_cfg.py index 5f75d0de356a7..1d6cbc8f63fcd 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalModuleAlgoDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalModuleAlgoDD4Hep_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalModuleAlgo-algorithm.xml'), diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalModuleAlgoDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalModuleAlgoDDD_cfg.py index c7d1e436a7c1c..bf94e9b959d3a 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalModuleAlgoDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalModuleAlgoDDD_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalModuleDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalModuleDD4Hep_cfg.py index fe45950146f9c..1fe41c1510a75 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalModuleDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalModuleDD4Hep_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalModule-algorithm.xml'), diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalModuleDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalModuleDDD_cfg.py index a6e878e191576..8f5158b24dd60 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalModuleDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalModuleDDD_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalNoTaperEndcapDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalNoTaperEndcapDD4Hep_cfg.py index 4dff0f4debb44..2c10049b39846 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalNoTaperEndcapDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalNoTaperEndcapDD4Hep_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalNoTaperEndcap-algorithm.xml'), diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalNoTaperEndcapDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalNoTaperEndcapDDD_cfg.py index e481127763320..8d01626ee122c 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalNoTaperEndcapDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalNoTaperEndcapDDD_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalTBGeometryDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalTBGeometryDDD_cfg.py index 6bda868bd1fcf..8490117880046 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalTBGeometryDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalTBGeometryDDD_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleDD4Hep_cfg.py index 59457363495e4..e7e812a7bc18b 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleDD4Hep_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalTBModule-algorithm.xml'), diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleDDD_cfg.py index 13e7723ff2690..8f4c1eb5fe9db 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleDDD_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleXDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleXDD4Hep_cfg.py index 18ba8757fecfd..8a2dff75a44a5 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleXDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleXDD4Hep_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalTBModuleX-algorithm.xml'), diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleXDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleXDDD_cfg.py index e355d73065bec..92952d64899bd 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleXDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalTBModuleXDDD_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalV14_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalV14_cfg.py new file mode 100644 index 0000000000000..d387f9cf39f92 --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalV14_cfg.py @@ -0,0 +1,26 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DUMP") +process.load("Geometry.HGCalCommonData.testHGCalV14XML_cfi") +process.load('FWCore.MessageService.MessageLogger_cfi') + +if 'MessageLogger' in process.__dict__: + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() + +process.source = cms.Source("EmptySource") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +process.add_(cms.ESProducer("TGeoMgrFromDdd", + verbose = cms.untracked.bool(False), + level = cms.untracked.int32(14) +)) + +process.dump = cms.EDAnalyzer("DumpSimGeometry", + outputFileName = cms.untracked.string('hgcalV14DDD.root')) + +process.p = cms.Path(process.dump) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalV15_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalV15_cfg.py new file mode 100644 index 0000000000000..27b3c8e884362 --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalV15_cfg.py @@ -0,0 +1,26 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DUMP") +process.load("Geometry.HGCalCommonData.testHGCalV15XML_cfi") +process.load('FWCore.MessageService.MessageLogger_cfi') + +if 'MessageLogger' in process.__dict__: + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() + +process.source = cms.Source("EmptySource") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +process.add_(cms.ESProducer("TGeoMgrFromDdd", + verbose = cms.untracked.bool(False), + level = cms.untracked.int32(14) +)) + +process.dump = cms.EDAnalyzer("DumpSimGeometry", + outputFileName = cms.untracked.string('hgcalV15DDD.root')) + +process.p = cms.Path(process.dump) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalWafer8DD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalWafer8DD4Hep_cfg.py index d65db089f68f3..d97ce4b4c76a3 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalWafer8DD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalWafer8DD4Hep_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwafer8-algorithm.xml'), diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalWafer8DDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalWafer8DDD_cfg.py index 58567474add9e..944a6ae695516 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalWafer8DDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalWafer8DDD_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalWaferAlgoDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferAlgoDD4Hep_cfg.py index 10eb9a3d8241c..6936d22d10f21 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalWaferAlgoDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferAlgoDD4Hep_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalWaferAlgo-algorithm.xml'), diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalWaferAlgoDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferAlgoDDD_cfg.py index c2d04bcfc9b38..0bcd33bb3fa37 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalWaferAlgoDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferAlgoDDD_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalWaferDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferDD4Hep_cfg.py index 79a3a577a8438..951e493b3772c 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalWaferDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferDD4Hep_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwafer-algorithm.xml'), diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalWaferDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferDDD_cfg.py index 5ea889b0b9fc5..55943f37971ad 100644 --- a/Geometry/HGCalCommonData/test/python/dumpHGCalWaferDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferDDD_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalWaferFDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferFDD4Hep_cfg.py new file mode 100644 index 0000000000000..0109e530faa82 --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferFDD4Hep_cfg.py @@ -0,0 +1,25 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DDHGCalWaferFTest") + +process.load('FWCore.MessageService.MessageLogger_cfi') +process.source = cms.Source("EmptySource") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) + ) + +process.MessageLogger.cerr.FwkReport.reportEvery = 5 +if hasattr(process,'MessageLogger'): + process.MessageLogger.HGCalGeom=dict() + +process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", + confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwaferF-algorithm.xml'), + appendToDataLabel = cms.string('DDHGCalWaferF') + ) + +process.testDump = cms.EDAnalyzer("DDTestDumpFile", + outputFileName = cms.untracked.string('hgcalWaferFDD4Hep.root'), + DDDetector = cms.ESInputTag('','DDHGCalWaferF') + ) + +process.p = cms.Path(process.testDump) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalWaferFDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferFDDD_cfg.py new file mode 100644 index 0000000000000..5309bfb5ee42b --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferFDDD_cfg.py @@ -0,0 +1,26 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DUMP") +process.load("Geometry.HGCalCommonData.testHGCalWaferFXML_cfi") +process.load('FWCore.MessageService.MessageLogger_cfi') + +if 'MessageLogger' in process.__dict__: + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() + +process.source = cms.Source("EmptySource") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +process.add_(cms.ESProducer("TGeoMgrFromDdd", + verbose = cms.untracked.bool(False), + level = cms.untracked.int32(14) +)) + +process.dump = cms.EDAnalyzer("DumpSimGeometry", + outputFileName = cms.untracked.string('hgcalWaferFDDD.root')) + +process.p = cms.Path(process.dump) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalWaferPDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferPDD4Hep_cfg.py new file mode 100644 index 0000000000000..b2a2c0f5c6466 --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferPDD4Hep_cfg.py @@ -0,0 +1,25 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DDHGCalWaferPTest") + +process.load('FWCore.MessageService.MessageLogger_cfi') +process.source = cms.Source("EmptySource") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) + ) + +process.MessageLogger.cerr.FwkReport.reportEvery = 5 +if hasattr(process,'MessageLogger'): + process.MessageLogger.HGCalGeom=dict() + +process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", + confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalwaferP-algorithm.xml'), + appendToDataLabel = cms.string('DDHGCalWaferP') + ) + +process.testDump = cms.EDAnalyzer("DDTestDumpFile", + outputFileName = cms.untracked.string('hgcalWaferPDD4Hep.root'), + DDDetector = cms.ESInputTag('','DDHGCalWaferP') + ) + +process.p = cms.Path(process.testDump) diff --git a/Geometry/HGCalCommonData/test/python/dumpHGCalWaferPDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferPDDD_cfg.py new file mode 100644 index 0000000000000..42ba7830b9ab6 --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/dumpHGCalWaferPDDD_cfg.py @@ -0,0 +1,27 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("DUMP") +process.load("Geometry.HGCalCommonData.testHGCalWaferPXML_cfi") +process.load('FWCore.MessageService.MessageLogger_cfi') + +if 'MessageLogger' in process.__dict__: + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() + process.MessageLogger.TGeoMgrFromDdd=dict() + +process.source = cms.Source("EmptySource") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +process.add_(cms.ESProducer("TGeoMgrFromDdd", + verbose = cms.untracked.bool(False), + level = cms.untracked.int32(14) +)) + +process.dump = cms.EDAnalyzer("DumpSimGeometry", + outputFileName = cms.untracked.string('hgcalWaferPDDD.root')) + +process.p = cms.Path(process.dump) diff --git a/Geometry/HGCalCommonData/test/python/dumpTBGeometryDDD_cfg.py b/Geometry/HGCalCommonData/test/python/dumpTBGeometryDDD_cfg.py index 998122a85ad6a..f008052e16e1c 100644 --- a/Geometry/HGCalCommonData/test/python/dumpTBGeometryDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/dumpTBGeometryDDD_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/hgcalV11_cfg.py b/Geometry/HGCalCommonData/test/python/hgcalV11_cfg.py index 0b9d9eccbb55e..64158b2b23aca 100644 --- a/Geometry/HGCalCommonData/test/python/hgcalV11_cfg.py +++ b/Geometry/HGCalCommonData/test/python/hgcalV11_cfg.py @@ -23,8 +23,8 @@ process.GlobalTag.globaltag = autoCond['phase2_realistic'] if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') - process.MessageLogger.categories.append('HGCSim') + process.MessageLogger.HGCalGeom=dict() + process.MessageLogger.HGCSim=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalCommonData/test/python/runHGCalTestV14_cfg.py b/Geometry/HGCalCommonData/test/python/runHGCalTestV14_cfg.py new file mode 100644 index 0000000000000..fe7b7fb0e3cb0 --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/runHGCalTestV14_cfg.py @@ -0,0 +1,127 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Phase2C11M9_cff import Phase2C11M9 + +process = cms.Process('SIM',Phase2C11M9) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.Geometry.GeometryExtended2026D76Reco_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedHLLHC14TeV_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(100), + output = cms.optional.untracked.allowed(cms.int32,cms.PSet) +) + +# Input source +process.source = cms.Source("EmptySource") + +process.options = cms.untracked.PSet( + FailPath = cms.untracked.vstring(), + IgnoreCompletely = cms.untracked.vstring(), + Rethrow = cms.untracked.vstring(), + SkipEvent = cms.untracked.vstring(), + allowUnscheduled = cms.obsolete.untracked.bool, + canDeleteEarly = cms.untracked.vstring(), + deleteNonConsumedUnscheduledModules = cms.untracked.bool(True), + emptyRunLumiMode = cms.obsolete.untracked.string, + eventSetup = cms.untracked.PSet( + forceNumberOfConcurrentIOVs = cms.untracked.PSet( + allowAnyLabel_=cms.required.untracked.uint32 + ), + numberOfConcurrentIOVs = cms.untracked.uint32(1) + ), + fileMode = cms.untracked.string('FULLMERGE'), + forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False), + makeTriggerResults = cms.obsolete.untracked.bool, + numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(1), + numberOfConcurrentRuns = cms.untracked.uint32(1), + numberOfStreams = cms.untracked.uint32(0), + numberOfThreads = cms.untracked.uint32(1), + printDependencies = cms.untracked.bool(False), + sizeOfStackForThreadsInKB = cms.optional.untracked.uint32, + throwIfIllegalParameter = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(False) +) + +# Production Info +process.configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('single pi E 1000'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +# Output definition + +process.FEVTDEBUGoutput = cms.OutputModule("PoolOutputModule", + SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring('generation_step') + ), + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('GEN-SIM'), + filterName = cms.untracked.string('') + ), + fileName = cms.untracked.string('file:step1.root'), + outputCommands = process.FEVTDEBUGEventContent.outputCommands, + splitLevel = cms.untracked.int32(0) +) + +# Additional output definition + +# Other statements +process.genstepfilter.triggerConditions=cms.vstring("generation_step") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic_T21', '') + +process.generator = cms.EDProducer("FlatRandomEGunProducer", + PGunParameters = cms.PSet( + PartID = cms.vint32(211), + MinEta = cms.double(1.48), + MaxEta = cms.double(3.01), + MinPhi = cms.double(-3.14159265359), + MaxPhi = cms.double(3.14159265359), + MinE = cms.double(999.99), + MaxE = cms.double(1000.01) + ), + Verbosity = cms.untracked.int32(0), ## set to 1 (or greater) for printouts + psethack = cms.string('single pi E 1000'), + AddAntiParticle = cms.bool(True), + firstRun = cms.untracked.uint32(1) +) + +process.ProductionFilterSequence = cms.Sequence(process.generator) + +# Path and EndPath definitions +process.generation_step = cms.Path(process.pgen) +process.simulation_step = cms.Path(process.psim) +process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.FEVTDEBUGoutput_step = cms.EndPath(process.FEVTDEBUGoutput) + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step,process.genfiltersummary_step,process.simulation_step,process.endjob_step,process.FEVTDEBUGoutput_step) +from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask +associatePatAlgosToolsTask(process) +# filter all path with the production filter sequence +for path in process.paths: + getattr(process,path).insert(0, process.ProductionFilterSequence) + + + +# Customisation from command line + +# Add early deletion of temporary data products to reduce peak memory need +from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete +process = customiseEarlyDelete(process) +# End adding early deletion diff --git a/Geometry/HGCalCommonData/test/python/runTest_cfg.py b/Geometry/HGCalCommonData/test/python/runTest_cfg.py index 7e9e30d02bdec..4148e6df2984b 100644 --- a/Geometry/HGCalCommonData/test/python/runTest_cfg.py +++ b/Geometry/HGCalCommonData/test/python/runTest_cfg.py @@ -26,9 +26,9 @@ ) if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HGCalGeom') - process.MessageLogger.categories.append('SimG4CoreGeometry') - process.MessageLogger.categories.append('HGCSim') + process.MessageLogger.HGCalGeom=dict() + process.MessageLogger.SimG4CoreGeometry=dict() + process.MessageLogger.HGCSim=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/test/python/testHGCGeometry_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCGeometry_cfg.py index b86828e78f5f6..7da8e302d764c 100644 --- a/Geometry/HGCalCommonData/test/python/testHGCGeometry_cfg.py +++ b/Geometry/HGCalCommonData/test/python/testHGCGeometry_cfg.py @@ -17,7 +17,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalCommonData/test/python/testHGCalNumbering_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCalNumbering_cfg.py index 32a12e56dbc21..36c25ccb73c1b 100644 --- a/Geometry/HGCalCommonData/test/python/testHGCalNumbering_cfg.py +++ b/Geometry/HGCalCommonData/test/python/testHGCalNumbering_cfg.py @@ -13,7 +13,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalCommonData/test/python/testHGCalParametersDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCalParametersDD4Hep_cfg.py index c2feb0847dd66..026529d225852 100644 --- a/Geometry/HGCalCommonData/test/python/testHGCalParametersDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/testHGCalParametersDD4Hep_cfg.py @@ -6,7 +6,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/testHGCalV14.xml'), diff --git a/Geometry/HGCalCommonData/test/python/testHGCalParametersDDDV15_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCalParametersDDDV15_cfg.py new file mode 100644 index 0000000000000..2ed20eca1991a --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/testHGCalParametersDDDV15_cfg.py @@ -0,0 +1,53 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("HGCalParametersTest") +process.load("SimGeneral.HepPDTESSource.pdt_cfi") +#process.load("Geometry.CMSCommonData.cmsExtendedGeometry2026D71XML_cfi") +process.load("Geometry.HGCalCommonData.testHGCalV15XML_cfi") +process.load("Geometry.HGCalCommonData.hgcalParametersInitialization_cfi") +process.load('FWCore.MessageService.MessageLogger_cfi') + +if hasattr(process,'MessageLogger'): + process.MessageLogger.HGCalGeom=dict() + +process.load("IOMC.RandomEngine.IOMC_cff") +process.RandomNumberGeneratorService.generator.initialSeed = 456789 + +process.source = cms.Source("EmptySource") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +process.generator = cms.EDProducer("FlatRandomEGunProducer", + PGunParameters = cms.PSet( + PartID = cms.vint32(14), + MinEta = cms.double(-3.5), + MaxEta = cms.double(3.5), + MinPhi = cms.double(-3.14159265359), + MaxPhi = cms.double(3.14159265359), + MinE = cms.double(9.99), + MaxE = cms.double(10.01) + ), + AddAntiParticle = cms.bool(False), + Verbosity = cms.untracked.int32(0), + firstRun = cms.untracked.uint32(1) +) + +process.testEE = cms.EDAnalyzer("HGCalParameterTester", + Name = cms.untracked.string("HGCalEESensitive"), + Mode = cms.untracked.int32(1) +# Mode = cms.untracked.int32(0) +) + +process.testHESil = process.testEE.clone( + Name = cms.untracked.string("HGCalHESiliconSensitive") +) + +process.testHESci = process.testEE.clone( + Name = cms.untracked.string("HGCalHEScintillatorSensitive"), + Mode = cms.untracked.int32(2) +) + +process.p1 = cms.Path(process.generator*process.testEE*process.testHESil*process.testHESci) +#process.p1 = cms.Path(process.generator*process.testEE*process.testHESil) diff --git a/Geometry/HGCalCommonData/test/python/testHGCalParametersDDD_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCalParametersDDD_cfg.py index 8265cecd9a220..baaeab78dfa00 100644 --- a/Geometry/HGCalCommonData/test/python/testHGCalParametersDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/testHGCalParametersDDD_cfg.py @@ -9,7 +9,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalCommonData/test/python/testHGCalTBParametersDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCalTBParametersDD4Hep_cfg.py index bf634bc6dbae6..3cf9c4006f0a3 100644 --- a/Geometry/HGCalCommonData/test/python/testHGCalTBParametersDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/testHGCalTBParametersDD4Hep_cfg.py @@ -6,7 +6,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/cms-test-ddhgcalTB181V1-algorithm.xml'), diff --git a/Geometry/HGCalCommonData/test/python/testHGCalTBParametersDDD_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCalTBParametersDDD_cfg.py index 6be5913c36224..c5f702f21a7a3 100644 --- a/Geometry/HGCalCommonData/test/python/testHGCalTBParametersDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/testHGCalTBParametersDDD_cfg.py @@ -7,7 +7,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalCommonData/test/python/testHGCalValidHex_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCalValidHex_cfg.py index 6d30731f086d2..36eb3b57a3111 100644 --- a/Geometry/HGCalCommonData/test/python/testHGCalValidHex_cfg.py +++ b/Geometry/HGCalCommonData/test/python/testHGCalValidHex_cfg.py @@ -13,7 +13,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalCommonData/test/python/testHGCalWafer_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCalWafer_cfg.py index 7e0820c9800a7..6796bc41ae1cc 100644 --- a/Geometry/HGCalCommonData/test/python/testHGCalWafer_cfg.py +++ b/Geometry/HGCalCommonData/test/python/testHGCalWafer_cfg.py @@ -13,7 +13,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalGeometry/src/HGCalGeometry.cc b/Geometry/HGCalGeometry/src/HGCalGeometry.cc index 8ea61829d841e..fa62e3a4623e3 100644 --- a/Geometry/HGCalGeometry/src/HGCalGeometry.cc +++ b/Geometry/HGCalGeometry/src/HGCalGeometry.cc @@ -104,6 +104,13 @@ void HGCalGeometry::newCell( } else if (m_topology.tileTrapezoid()) { DetId idc = m_topology.encode(id); if (m_topology.valid(idc)) { + HGCScintillatorDetId hid(idc); + std::pair typm = m_topology.dddConstants().tileType(hid.layer(), hid.ring(), 0); + if (typm.first >= 0) { + hid.setType(typm.first); + hid.setSiPM(typm.second); + idc = static_cast(hid); + } m_validIds.emplace_back(idc); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "Valid Id [0] " << HGCScintillatorDetId(idc); diff --git a/Geometry/HGCalGeometry/src/HGCalGeometryLoader.cc b/Geometry/HGCalGeometry/src/HGCalGeometryLoader.cc index 4f51ea9fa51dc..6e8e0714fa62a 100644 --- a/Geometry/HGCalGeometry/src/HGCalGeometryLoader.cc +++ b/Geometry/HGCalGeometry/src/HGCalGeometryLoader.cc @@ -62,7 +62,7 @@ HGCalGeometry* HGCalGeometryLoader::build(const HGCalTopology& topology) { int type = topology.dddConstants().waferTypeT(wafer); if (type != 1) type = 0; - DetId detId = (DetId)(HGCalDetId(subdet, zside, layer, type, wafer, 0)); + DetId detId = static_cast(HGCalDetId(subdet, zside, layer, type, wafer, 0)); const auto& w = topology.dddConstants().waferPosition(wafer, true); double xx = (zside > 0) ? w.first : -w.first; CLHEP::Hep3Vector h3v(xx, w.second, mytr.h3v.z()); @@ -86,23 +86,29 @@ HGCalGeometry* HGCalGeometryLoader::build(const HGCalTopology& topology) { } } else if (topology.tileTrapezoid()) { int indx = topology.dddConstants().layerIndex(layer, true); - int irad = topology.dddConstants().getParameter()->iradMinBH_[indx]; + int ring = topology.dddConstants().getParameter()->iradMinBH_[indx]; int nphi = topology.dddConstants().getParameter()->scintCells(layer); int type = topology.dddConstants().getParameter()->scintType(layer); for (int md = topology.dddConstants().getParameter()->firstModule_[indx]; md <= topology.dddConstants().getParameter()->lastModule_[indx]; ++md) { for (int iphi = 1; iphi <= nphi; ++iphi) { - DetId detId = (DetId)(HGCScintillatorDetId(type, layer, zside * irad, iphi)); - const auto& w = topology.dddConstants().locateCellTrap(layer, irad, iphi, true); + HGCScintillatorDetId id(type, layer, zside * ring, iphi); + std::pair typm = topology.dddConstants().tileType(layer, ring, 0); + if (typm.first >= 0) { + id.setType(typm.first); + id.setSiPM(typm.second); + } + DetId detId = static_cast(id); + const auto& w = topology.dddConstants().locateCellTrap(layer, ring, iphi, true); double xx = (zside > 0) ? w.first : -w.first; CLHEP::Hep3Vector h3v(xx, w.second, mytr.h3v.z()); const HepGeom::Transform3D ht3d(mytr.hr, h3v); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "HGCalGeometryLoader::rad:phi:type " << irad * zside << ":" << iphi << ":" + edm::LogVerbatim("HGCalGeom") << "HGCalGeometryLoader::rad:phi:type " << ring * zside << ":" << iphi << ":" << type << " DetId " << HGCScintillatorDetId(detId) << " " << std::hex - << detId.rawId() << std::dec << " transf " << ht3d.getTranslation() << " and " - << ht3d.getRotation(); + << detId.rawId() << std::dec << " transf " << ht3d.getTranslation() << " R " + << ht3d.getTranslation().perp() << " and " << ht3d.getRotation(); #endif HGCalParameters::hgtrap vol = topology.dddConstants().getModule(md, false, true); params[FlatTrd::k_dZ] = vol.dz; @@ -119,7 +125,7 @@ HGCalGeometry* HGCalGeometryLoader::build(const HGCalTopology& topology) { ++kount; #endif } - ++irad; + ++ring; } } else { DetId::Detector det = topology.detector(); diff --git a/Geometry/HGCalGeometry/test/HGCalGeomLocatorTester.cc b/Geometry/HGCalGeometry/test/HGCalGeomLocatorTester.cc index 9ab5562e47004..9456c85776f54 100644 --- a/Geometry/HGCalGeometry/test/HGCalGeomLocatorTester.cc +++ b/Geometry/HGCalGeometry/test/HGCalGeomLocatorTester.cc @@ -84,28 +84,28 @@ void HGCalGeomLocaterTester::doTestSilicon(const HGCalGeometry* geom, DetId::Det void HGCalGeomLocaterTester::doTestScintillator(const HGCalGeometry* geom, DetId::Detector det) { const std::vector& ids = geom->getValidDetIds(); std::cout << "doTest:: " << ids.size() << " valid ids for " << geom->cellElement() << std::endl; - const double tol = 0.5; + const double tol = 0.01; const unsigned int step = 10; int all(0), good(0), bad(0); for (unsigned int k = 0; k < ids.size(); k += step) { ++all; HGCScintillatorDetId id(ids[k]); - if ((id.iradiusAbs() != 7) && (id.iradiusAbs() != 41)) { - std::cout << "ID[" << k << "] " << id; - GlobalPoint global = geom->getPosition(id); - auto tilexy = geom->topology().dddConstants().locateCell(id, false); - double dx = global.x() - tilexy.first; - double dy = global.y() - tilexy.second; - std::cout << " position (" << global.x() << ", " << global.y() << ", " << global.z() << ") tileXY (" - << tilexy.first << ", " << tilexy.second << ") Delta (" << dx << ", " << dy << ")"; - if ((std::abs(dx) > tol) || (std::abs(dy) > tol)) { - std::cout << "***** ERROR *****" << std::endl; - ++bad; - geom->topology().dddConstants().locateCell(id, true); - } else { - std::cout << std::endl; - ++good; - } + std::cout << "ID[" << k << "] " << id; + GlobalPoint global = geom->getPosition(id); + auto tilexy = geom->topology().dddConstants().locateCell(id, false); + double dx = global.x() - tilexy.first; + double dy = global.y() - tilexy.second; + std::cout << " position (" << global.x() << ", " << global.y() << ", " << global.z() << ") tileXY (" << tilexy.first + << ", " << tilexy.second << ") Delta (" << dx << ", " << dy << ")"; + if ((std::abs(dx) > tol) || (std::abs(dy) > tol)) { + double r1 = sqrt(global.x() * global.x() + global.y() * global.y()); + double r2 = sqrt(tilexy.first * tilexy.first + tilexy.second * tilexy.second); + std::cout << " R " << r1 << ":" << r2 << " ***** ERROR *****" << std::endl; + ++bad; + geom->topology().dddConstants().locateCell(id, true); + } else { + std::cout << std::endl; + ++good; } } std::cout << "\n\nStudied " << all << " (" << ids.size() << ") IDs of which " << good << " are good and " << bad diff --git a/Geometry/HGCalGeometry/test/HGCalGeometryDump.cc b/Geometry/HGCalGeometry/test/HGCalGeometryDump.cc index f2d8a52ff34fc..d5be4bb6c1fd0 100644 --- a/Geometry/HGCalGeometry/test/HGCalGeometryDump.cc +++ b/Geometry/HGCalGeometry/test/HGCalGeometryDump.cc @@ -1,6 +1,5 @@ #include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" diff --git a/Geometry/HGCalGeometry/test/HGCalTestRecHitTool.cc b/Geometry/HGCalGeometry/test/HGCalTestRecHitTool.cc index d2c682ffac380..db104d24f0427 100644 --- a/Geometry/HGCalGeometry/test/HGCalTestRecHitTool.cc +++ b/Geometry/HGCalGeometry/test/HGCalTestRecHitTool.cc @@ -8,7 +8,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" diff --git a/Geometry/HGCalGeometry/test/python/runCaloCellGeometryTest_cfg.py b/Geometry/HGCalGeometry/test/python/runCaloCellGeometryTest_cfg.py index a3ed3494a1904..3161b9598ccce 100644 --- a/Geometry/HGCalGeometry/test/python/runCaloCellGeometryTest_cfg.py +++ b/Geometry/HGCalGeometry/test/python/runCaloCellGeometryTest_cfg.py @@ -9,8 +9,8 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') - process.MessageLogger.categories.append('CaloGeometryBuilder') + process.MessageLogger.HGCalGeom=dict() + process.MessageLogger.CaloGeometryBuilder=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalGeometry/test/python/testHGCalCorner_cfg.py b/Geometry/HGCalGeometry/test/python/testHGCalCorner_cfg.py index 3f9d95bd6cef0..bd43aac3fdf3c 100644 --- a/Geometry/HGCalGeometry/test/python/testHGCalCorner_cfg.py +++ b/Geometry/HGCalGeometry/test/python/testHGCalCorner_cfg.py @@ -10,7 +10,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalGeometry/test/python/testHGCalGeomLocatorSc_cfg.py b/Geometry/HGCalGeometry/test/python/testHGCalGeomLocatorSc_cfg.py index 8b2f3b8584955..4d82686621309 100644 --- a/Geometry/HGCalGeometry/test/python/testHGCalGeomLocatorSc_cfg.py +++ b/Geometry/HGCalGeometry/test/python/testHGCalGeomLocatorSc_cfg.py @@ -8,7 +8,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom = dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalGeometry/test/python/testHGCalGeomLocator_cfg.py b/Geometry/HGCalGeometry/test/python/testHGCalGeomLocator_cfg.py index abd7df5f6485b..41a77fe09befa 100644 --- a/Geometry/HGCalGeometry/test/python/testHGCalGeomLocator_cfg.py +++ b/Geometry/HGCalGeometry/test/python/testHGCalGeomLocator_cfg.py @@ -8,7 +8,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalGeometry/test/python/testHGCalGeometryCheck_cfg.py b/Geometry/HGCalGeometry/test/python/testHGCalGeometryCheck_cfg.py index 517c20a699404..9adb13e4fa097 100644 --- a/Geometry/HGCalGeometry/test/python/testHGCalGeometryCheck_cfg.py +++ b/Geometry/HGCalGeometry/test/python/testHGCalGeometryCheck_cfg.py @@ -15,7 +15,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalGeometry/test/python/testHGCalGeometryMouseBite_cfg.py b/Geometry/HGCalGeometry/test/python/testHGCalGeometryMouseBite_cfg.py index aa1ce8766410e..10b2071fe3627 100644 --- a/Geometry/HGCalGeometry/test/python/testHGCalGeometryMouseBite_cfg.py +++ b/Geometry/HGCalGeometry/test/python/testHGCalGeometryMouseBite_cfg.py @@ -7,7 +7,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalGeometry/test/python/testHGCalGeometry_cfg.py b/Geometry/HGCalGeometry/test/python/testHGCalGeometry_cfg.py index 89e7f514949ad..48915bf522071 100644 --- a/Geometry/HGCalGeometry/test/python/testHGCalGeometry_cfg.py +++ b/Geometry/HGCalGeometry/test/python/testHGCalGeometry_cfg.py @@ -12,7 +12,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalGeometry/test/python/testHGCalNeighbor_cfg.py b/Geometry/HGCalGeometry/test/python/testHGCalNeighbor_cfg.py index 75d83e0257ea7..7701d4a73b9c9 100644 --- a/Geometry/HGCalGeometry/test/python/testHGCalNeighbor_cfg.py +++ b/Geometry/HGCalGeometry/test/python/testHGCalNeighbor_cfg.py @@ -14,7 +14,7 @@ process.GlobalTag.globaltag = autoCond['phase2_realistic'] if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalGeometry/test/python/testHGCalRecHitTool_cfg.py b/Geometry/HGCalGeometry/test/python/testHGCalRecHitTool_cfg.py index 0f1f13eb1f886..b348d5c2c8396 100644 --- a/Geometry/HGCalGeometry/test/python/testHGCalRecHitTool_cfg.py +++ b/Geometry/HGCalGeometry/test/python/testHGCalRecHitTool_cfg.py @@ -9,7 +9,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalGeometry/test/python/testHGCalSize_cfg.py b/Geometry/HGCalGeometry/test/python/testHGCalSize_cfg.py index 8e494b2b49700..d2e5e9b7ec27c 100644 --- a/Geometry/HGCalGeometry/test/python/testHGCalSize_cfg.py +++ b/Geometry/HGCalGeometry/test/python/testHGCalSize_cfg.py @@ -11,7 +11,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalGeometry/test/python/testHGCalWaferCell_cfg.py b/Geometry/HGCalGeometry/test/python/testHGCalWaferCell_cfg.py index ef7d2ff2f27ff..aeea966c49242 100644 --- a/Geometry/HGCalGeometry/test/python/testHGCalWaferCell_cfg.py +++ b/Geometry/HGCalGeometry/test/python/testHGCalWaferCell_cfg.py @@ -11,7 +11,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalGeometry/test/python/testHGCalWaferInFileCheck_cfg.py b/Geometry/HGCalGeometry/test/python/testHGCalWaferInFileCheck_cfg.py index 9021ddd7173c9..6f104252ba15a 100644 --- a/Geometry/HGCalGeometry/test/python/testHGCalWaferInFileCheck_cfg.py +++ b/Geometry/HGCalGeometry/test/python/testHGCalWaferInFileCheck_cfg.py @@ -11,7 +11,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalGeometry/test/python/testHGCalWaferInFileTest_cfg.py b/Geometry/HGCalGeometry/test/python/testHGCalWaferInFileTest_cfg.py index 26b00130c4cf5..8c5b473877500 100644 --- a/Geometry/HGCalGeometry/test/python/testHGCalWaferInFileTest_cfg.py +++ b/Geometry/HGCalGeometry/test/python/testHGCalWaferInFileTest_cfg.py @@ -11,7 +11,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalGeometry/test/python/testHGCalWaferTypeTester_cfg.py b/Geometry/HGCalGeometry/test/python/testHGCalWaferTypeTester_cfg.py index 894dd58bd6077..ef05f52f5a649 100644 --- a/Geometry/HGCalGeometry/test/python/testHGCalWaferTypeTester_cfg.py +++ b/Geometry/HGCalGeometry/test/python/testHGCalWaferTypeTester_cfg.py @@ -7,7 +7,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalGeometry/test/python/testHGCalWafer_cfg.py b/Geometry/HGCalGeometry/test/python/testHGCalWafer_cfg.py index 604351681143c..330688f3eb28e 100644 --- a/Geometry/HGCalGeometry/test/python/testHGCalWafer_cfg.py +++ b/Geometry/HGCalGeometry/test/python/testHGCalWafer_cfg.py @@ -6,7 +6,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HGCalSimData/data/hgcProdCuts.xml b/Geometry/HGCalSimData/data/hgcProdCuts.xml index 9118a1d545cd1..4f5557aa006d4 100644 --- a/Geometry/HGCalSimData/data/hgcProdCuts.xml +++ b/Geometry/HGCalSimData/data/hgcProdCuts.xml @@ -2,12 +2,12 @@ - + - + diff --git a/Geometry/HGCalSimData/data/hgcProdCutsv9.xml b/Geometry/HGCalSimData/data/hgcProdCutsv9.xml index 9b6f1ffebba58..728396104c33b 100644 --- a/Geometry/HGCalSimData/data/hgcProdCutsv9.xml +++ b/Geometry/HGCalSimData/data/hgcProdCutsv9.xml @@ -2,13 +2,13 @@ - + - + diff --git a/Geometry/HcalAlgo/plugins/DDHCalAngular.cc b/Geometry/HcalAlgo/plugins/DDHCalAngular.cc index 932d0049f0f1c..e84102abd7f20 100644 --- a/Geometry/HcalAlgo/plugins/DDHCalAngular.cc +++ b/Geometry/HcalAlgo/plugins/DDHCalAngular.cc @@ -11,7 +11,7 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/PluginManager/interface/PluginFactory.h" -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" #include "DetectorDescription/Core/interface/DDLogicalPart.h" #include "DetectorDescription/Core/interface/DDTypes.h" @@ -19,7 +19,7 @@ #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; class DDHCalAngular : public DDAlgorithm { public: diff --git a/Geometry/HcalAlgo/plugins/DDHCalBarrelAlgo.cc b/Geometry/HcalAlgo/plugins/DDHCalBarrelAlgo.cc index 05aebb332f76c..024e5cbddf4d5 100644 --- a/Geometry/HcalAlgo/plugins/DDHCalBarrelAlgo.cc +++ b/Geometry/HcalAlgo/plugins/DDHCalBarrelAlgo.cc @@ -12,7 +12,7 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/PluginManager/interface/PluginFactory.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDutils.h" #include "DetectorDescription/Core/interface/DDLogicalPart.h" #include "DetectorDescription/Core/interface/DDSolid.h" @@ -24,7 +24,7 @@ #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" //#define EDM_ML_DEBUG -using namespace cms_units::operators; +using namespace angle_units::operators; class DDHCalBarrelAlgo : public DDAlgorithm { public: diff --git a/Geometry/HcalAlgo/plugins/DDHCalEndcapAlgo.cc b/Geometry/HcalAlgo/plugins/DDHCalEndcapAlgo.cc index 51e9efacc6ea0..e74c0a40dffbe 100644 --- a/Geometry/HcalAlgo/plugins/DDHCalEndcapAlgo.cc +++ b/Geometry/HcalAlgo/plugins/DDHCalEndcapAlgo.cc @@ -12,7 +12,7 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/PluginManager/interface/PluginFactory.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDutils.h" #include "DetectorDescription/Core/interface/DDLogicalPart.h" #include "DetectorDescription/Core/interface/DDSolid.h" @@ -24,7 +24,7 @@ #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" //#define EDM_ML_DEBUG -using namespace cms_units::operators; +using namespace angle_units::operators; class DDHCalEndcapAlgo : public DDAlgorithm { public: diff --git a/Geometry/HcalAlgo/plugins/DDHCalEndcapModuleAlgo.cc b/Geometry/HcalAlgo/plugins/DDHCalEndcapModuleAlgo.cc index 5936517fdb08c..ee90065bd1b26 100644 --- a/Geometry/HcalAlgo/plugins/DDHCalEndcapModuleAlgo.cc +++ b/Geometry/HcalAlgo/plugins/DDHCalEndcapModuleAlgo.cc @@ -12,7 +12,7 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/PluginManager/interface/PluginFactory.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDutils.h" #include "DetectorDescription/Core/interface/DDLogicalPart.h" #include "DetectorDescription/Core/interface/DDSolid.h" @@ -24,7 +24,7 @@ #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" //#define EDM_ML_DEBUG -using namespace cms_units::operators; +using namespace angle_units::operators; class DDHCalEndcapModuleAlgo : public DDAlgorithm { public: diff --git a/Geometry/HcalAlgo/plugins/DDHCalFibreBundle.cc b/Geometry/HcalAlgo/plugins/DDHCalFibreBundle.cc index da7cf66725558..d459b46b4f1a9 100644 --- a/Geometry/HcalAlgo/plugins/DDHCalFibreBundle.cc +++ b/Geometry/HcalAlgo/plugins/DDHCalFibreBundle.cc @@ -11,7 +11,7 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/PluginManager/interface/PluginFactory.h" -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDutils.h" #include "DetectorDescription/Core/interface/DDLogicalPart.h" #include "DetectorDescription/Core/interface/DDSolid.h" @@ -23,7 +23,7 @@ #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; class DDHCalFibreBundle : public DDAlgorithm { public: diff --git a/Geometry/HcalAlgo/plugins/DDHCalTBCableAlgo.cc b/Geometry/HcalAlgo/plugins/DDHCalTBCableAlgo.cc index b70f63746469f..50f8a98f75749 100644 --- a/Geometry/HcalAlgo/plugins/DDHCalTBCableAlgo.cc +++ b/Geometry/HcalAlgo/plugins/DDHCalTBCableAlgo.cc @@ -10,7 +10,7 @@ #include #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDLogicalPart.h" #include "DetectorDescription/Core/interface/DDSolid.h" #include "DetectorDescription/Core/interface/DDMaterial.h" @@ -22,7 +22,7 @@ #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; class DDHCalTBCableAlgo : public DDAlgorithm { public: diff --git a/Geometry/HcalAlgo/plugins/DDHCalTBZposAlgo.cc b/Geometry/HcalAlgo/plugins/DDHCalTBZposAlgo.cc index 61bf581ec3592..3232fbc63d106 100644 --- a/Geometry/HcalAlgo/plugins/DDHCalTBZposAlgo.cc +++ b/Geometry/HcalAlgo/plugins/DDHCalTBZposAlgo.cc @@ -11,7 +11,7 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/PluginManager/interface/PluginFactory.h" -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDTypes.h" #include "DetectorDescription/Core/interface/DDAlgorithm.h" #include "DetectorDescription/Core/interface/DDLogicalPart.h" @@ -20,7 +20,7 @@ #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; class DDHCalTBZposAlgo : public DDAlgorithm { public: diff --git a/Geometry/HcalAlgo/plugins/DDHCalTestBeamAlgo.cc b/Geometry/HcalAlgo/plugins/DDHCalTestBeamAlgo.cc index 1d24d5f4308a1..831ac04efdc80 100644 --- a/Geometry/HcalAlgo/plugins/DDHCalTestBeamAlgo.cc +++ b/Geometry/HcalAlgo/plugins/DDHCalTestBeamAlgo.cc @@ -11,15 +11,15 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/PluginManager/interface/PluginFactory.h" -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDTypes.h" #include "DetectorDescription/Core/interface/DDAlgorithm.h" #include "DetectorDescription/Core/interface/DDLogicalPart.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" -//#define EDM_ML_DEBUG -using namespace geant_units::operators; +#define EDM_ML_DEBUG +using namespace angle_units::operators; class DDHCalTestBeamAlgo : public DDAlgorithm { public: diff --git a/Geometry/HcalAlgo/plugins/DDHCalXtalAlgo.cc b/Geometry/HcalAlgo/plugins/DDHCalXtalAlgo.cc index e217d133a89b1..f4591662c01f4 100644 --- a/Geometry/HcalAlgo/plugins/DDHCalXtalAlgo.cc +++ b/Geometry/HcalAlgo/plugins/DDHCalXtalAlgo.cc @@ -11,7 +11,7 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/PluginManager/interface/PluginFactory.h" -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDLogicalPart.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" #include "DetectorDescription/Core/interface/DDTypes.h" @@ -19,7 +19,7 @@ #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; class DDHCalXtalAlgo : public DDAlgorithm { public: diff --git a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalAngular.cc b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalAngular.cc index bb266496e8dea..06034c6d65a7f 100644 --- a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalAngular.cc +++ b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalAngular.cc @@ -1,10 +1,11 @@ -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DD4hep/DetFactoryHelper.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); @@ -29,8 +30,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext edm::LogVerbatim("HCalGeom") << "DDHCalAngular: Parameters for positioning::" << " n " << n << " Start, Range, Delta " << convertRadToDeg(startAngle) << " " << convertRadToDeg(rangeAngle) << " " << convertRadToDeg(dphi) << " Shift " - << convertCmToMm(shiftX) << ":" << convertCmToMm(shiftY) << "\n Parent " << mother.name() - << "\tChild " << child.name() << " NameSpace " << ns.name(); + << cms::convert2mm(shiftX) << ":" << cms::convert2mm(shiftY) << "\n Parent " + << mother.name() << "\tChild " << child.name() << " NameSpace " << ns.name(); #endif int copy = startCopyNo; double phix = startAngle; @@ -55,13 +56,13 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext mother.placeVolume(child, copy, dd4hep::Transform3D(rotation, tran)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalAngular:: " << child.name() << " number " << copy << " positioned in " - << mother.name() << " at (" << convertCmToMm(xpos) << ", " << convertCmToMm(ypos) - << ", " << convertCmToMm(zoffset) << ") with rotation matrix: " << rotation; + << mother.name() << " at (" << cms::convert2mm(xpos) << ", " << cms::convert2mm(ypos) + << ", " << cms::convert2mm(zoffset) << ") with rotation matrix: " << rotation; #endif copy += incrCopyNo; phix += dphi; } - return 1; + return cms::s_executed; } // first argument is the type from the xml file diff --git a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalBarrelAlgo.cc b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalBarrelAlgo.cc index 9afc136332798..a93d5dc6777f7 100644 --- a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalBarrelAlgo.cc +++ b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalBarrelAlgo.cc @@ -10,14 +10,15 @@ #include #include -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DetectorDescription/Core/interface/DDSplit.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "DD4hep/DetFactoryHelper.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; struct HcalBarrelAlgo { //General Volume @@ -168,12 +169,12 @@ struct HcalBarrelAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: General material " << genMaterial << "\tSectors " << nsectors << ", " << nsectortot << "\tHalves " << nhalf << "\tRotation matrix " << rotns << ":" - << rotHalf << "\n\t\t" << convertCmToMm(rinner) << "\t" << convertCmToMm(router) + << rotHalf << "\n\t\t" << cms::convert2mm(rinner) << "\t" << cms::convert2mm(router) << "\t" << rzones; for (int i = 0; i < rzones; i++) edm::LogVerbatim("HCalGeom") << "\tTheta[" << i << "] = " << theta[i] << "\trmax[" << i - << "] = " << convertCmToMm(rmax[i]) << "\tzoff[" << i - << "] = " << convertCmToMm(zoff[i]); + << "] = " << cms::convert2mm(rmax[i]) << "\tzoff[" << i + << "] = " << cms::convert2mm(zoff[i]); #endif /////////////////////////////////////////////////////////////// //Layers @@ -195,10 +196,10 @@ struct HcalBarrelAlgo { #ifdef EDM_ML_DEBUG for (int i = 0; i < nLayers; i++) edm::LogVerbatim("HCalGeom") << layerLabel[i] << "\t" << layerId[i] << "\t" << layerMat[i] << "\t" - << convertCmToMm(layerWidth[i]) << "\t" << convertCmToMm(layerD1[i]) << "\t" - << convertCmToMm(layerD2[i]) << "\t" << layerAlpha[i] << "\t" - << convertCmToMm(layerT1[i]) << "\t" << convertCmToMm(layerT2[i]) << "\t" - << layerAbsorb[i] << "\t" << convertCmToMm(layerGap[i]); + << cms::convert2mm(layerWidth[i]) << "\t" << cms::convert2mm(layerD1[i]) << "\t" + << cms::convert2mm(layerD2[i]) << "\t" << layerAlpha[i] << "\t" + << cms::convert2mm(layerT1[i]) << "\t" << cms::convert2mm(layerT2[i]) << "\t" + << layerAbsorb[i] << "\t" << cms::convert2mm(layerGap[i]); #endif /////////////////////////////////////////////////////////////// @@ -211,14 +212,14 @@ struct HcalBarrelAlgo { #ifdef EDM_ML_DEBUG for (int i = 0; i < nAbsorber; i++) edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: " << absorbName[i] << " Material " << absorbMat[i] << " d " - << convertCmToMm(absorbD[i]) << " t " << convertCmToMm(absorbT[i]); + << cms::convert2mm(absorbD[i]) << " t " << cms::convert2mm(absorbT[i]); #endif middleMat = args.value("MiddleMat"); middleD = args.value("MiddleD"); middleW = args.value("MiddleW"); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: Middle material " << middleMat << " d " << convertCmToMm(middleD) - << " w " << convertCmToMm(middleW); + edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: Middle material " << middleMat << " d " + << cms::convert2mm(middleD) << " w " << cms::convert2mm(middleW); #endif midName = args.value >("MidAbsName"); midMat = args.value >("MidAbsMat"); @@ -228,7 +229,7 @@ struct HcalBarrelAlgo { #ifdef EDM_ML_DEBUG for (int i = 0; i < nMidAbs; i++) edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: " << midName[i] << " Material " << midMat[i] << " W " - << convertCmToMm(midW[i]) << " T " << convertCmToMm(midT[i]); + << cms::convert2mm(midW[i]) << " T " << cms::convert2mm(midT[i]); #endif //Absorber layers in the side part @@ -238,7 +239,7 @@ struct HcalBarrelAlgo { #ifdef EDM_ML_DEBUG for (unsigned int i = 0; i < sideMat.size(); i++) edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: Side material " << sideMat[i] << " d " - << convertCmToMm(sideD[i]) << " t " << convertCmToMm(sideT[i]); + << cms::convert2mm(sideD[i]) << " t " << cms::convert2mm(sideT[i]); #endif sideAbsName = args.value >("SideAbsName"); sideAbsMat = args.value >("SideAbsMat"); @@ -247,7 +248,7 @@ struct HcalBarrelAlgo { #ifdef EDM_ML_DEBUG for (int i = 0; i < nSideAbs; i++) edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: " << sideAbsName[i] << " Material " << sideAbsMat[i] << " W " - << convertCmToMm(sideAbsW[i]); + << cms::convert2mm(sideAbsW[i]); #endif /////////////////////////////////////////////////////////////// @@ -274,11 +275,11 @@ struct HcalBarrelAlgo { detPosY = args.value >("DetPosY"); #ifdef EDM_ML_DEBUG for (int i = 0; i < nLayers; i++) - edm::LogVerbatim("HCalGeom") << i + 1 << "\t" << detType[i] << "\t" << convertCmToMm(detdP1[i]) << ", " - << convertCmToMm(detdP2[i]) << "\t" << convertCmToMm(detT11[i]) << ", " - << convertCmToMm(detT12[i]) << "\t" << convertCmToMm(detTsc[i]) << "\t" - << convertCmToMm(detT21[i]) << ", " << convertCmToMm(detT22[i]) << "\t" - << convertCmToMm(detWidth1[i]) << "\t" << convertCmToMm(detWidth2[i]) << "\t" + edm::LogVerbatim("HCalGeom") << i + 1 << "\t" << detType[i] << "\t" << cms::convert2mm(detdP1[i]) << ", " + << cms::convert2mm(detdP2[i]) << "\t" << cms::convert2mm(detT11[i]) << ", " + << cms::convert2mm(detT12[i]) << "\t" << cms::convert2mm(detTsc[i]) << "\t" + << cms::convert2mm(detT21[i]) << ", " << cms::convert2mm(detT22[i]) << "\t" + << cms::convert2mm(detWidth1[i]) << "\t" << cms::convert2mm(detWidth2[i]) << "\t" << detPosY[i]; #endif @@ -358,8 +359,9 @@ struct HcalBarrelAlgo { << convertRadToDeg(-alpha + dphi) << " and with " << nsec << " sections "; for (unsigned int i = 0; i < pgonZ.size(); i++) edm::LogVerbatim("HCalGeom") << "\t" - << "\tZ = " << convertCmToMm(pgonZ[i]) << "\tRmin = " << convertCmToMm(pgonRmin[i]) - << "\tRmax = " << convertCmToMm(pgonRmax[i]); + << "\tZ = " << cms::convert2mm(pgonZ[i]) + << "\tRmin = " << cms::convert2mm(pgonRmin[i]) + << "\tRmax = " << cms::convert2mm(pgonRmax[i]); #endif } else { solid = dd4hep::Polyhedra(ns.prepend(idName), nsectortot, -alpha, dphi, pgonZHalf, pgonRminHalf, pgonRmaxHalf); @@ -368,10 +370,9 @@ struct HcalBarrelAlgo { << " with " << nsectortot << " sectors from " << convertRadToDeg(-alpha) << " to " << convertRadToDeg(-alpha + dphi) << " and with " << nsec << " sections "; for (unsigned int i = 0; i < pgonZHalf.size(); i++) - edm::LogVerbatim("HCalGeom") << "\t" - << "\tZ = " << convertCmToMm(pgonZHalf[i]) - << "\tRmin = " << convertCmToMm(pgonRminHalf[i]) - << "\tRmax = " << convertCmToMm(pgonRmaxHalf[i]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZHalf[i]) + << "\tRmin = " << cms::convert2mm(pgonRminHalf[i]) + << "\tRmax = " << cms::convert2mm(pgonRmaxHalf[i]); #endif } @@ -392,10 +393,9 @@ struct HcalBarrelAlgo { << " with " << nsectortot << " sectors from " << convertRadToDeg(-alpha) << " to " << convertRadToDeg(-alpha + dphi) << " and with " << nf << " sections "; for (unsigned int i = 0; i < pgonZHalf.size(); i++) - edm::LogVerbatim("HCalGeom") << "\t" - << "\tZ = " << convertCmToMm(pgonZHalf[i]) - << "\tRmin = " << convertCmToMm(pgonRminHalf[i]) - << "\tRmax = " << convertCmToMm(pgonRmaxHalf[i]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZHalf[i]) + << "\tRmin = " << cms::convert2mm(pgonRminHalf[i]) + << "\tRmax = " << cms::convert2mm(pgonRmaxHalf[i]); #endif dd4hep::Volume genlogich(solid.name(), solid, matter); genlogic.placeVolume(genlogich, 1); @@ -421,9 +421,9 @@ struct HcalBarrelAlgo { << " with 1 sector from " << convertRadToDeg(-alpha) << " to " << convertRadToDeg(alpha) << " and with " << nf << " sections"; for (unsigned int i = 0; i < pgonZHalf.size(); i++) - edm::LogVerbatim("HCalGeom") << "\t\tZ = " << convertCmToMm(pgonZHalf[i]) - << "\tRmin = " << convertCmToMm(pgonRminHalf[i]) - << "\tRmax = " << convertCmToMm(pgonRmaxHalf[i]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZHalf[i]) + << "\tRmin = " << cms::convert2mm(pgonRminHalf[i]) + << "\tRmax = " << cms::convert2mm(pgonRmaxHalf[i]); #endif for (int ii = 0; ii < nsectortot; ii++) { @@ -524,8 +524,8 @@ struct HcalBarrelAlgo { alpha1 = atan(width / rmid); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "\tAlpha_1 modified from " << convertRadToDeg(alpha) << " to " - << convertRadToDeg(alpha1) << " Rmid " << convertCmToMm(rmid) << " Reduced width " - << convertCmToMm(width); + << convertRadToDeg(alpha1) << " Rmid " << cms::convert2mm(rmid) + << " Reduced width " << cms::convert2mm(width); #endif } solid = dd4hep::Polyhedra(ns.prepend(name), 1, -alpha1, 2 * alpha1, pgonZ, pgonRmin, pgonRmax); @@ -535,8 +535,8 @@ struct HcalBarrelAlgo { << matter.name() << " with 1 sector from " << convertRadToDeg(-alpha1) << " to " << convertRadToDeg(alpha1) << " and with " << nsec << " sections"; for (unsigned int k = 0; k < pgonZ.size(); k++) - edm::LogVerbatim("HCalGeom") << "\t\t" << convertCmToMm(pgonZ[k]) << "\t" << convertCmToMm(pgonRmin[k]) << "\t" - << convertCmToMm(pgonRmax[k]); + edm::LogVerbatim("HCalGeom") << "\t\t" << cms::convert2mm(pgonZ[k]) << "\t" << cms::convert2mm(pgonRmin[k]) + << "\t" << cms::convert2mm(pgonRmax[k]); #endif seclogic.placeVolume(glog, layerId[i]); @@ -607,8 +607,8 @@ struct HcalBarrelAlgo { solid = dd4hep::Box(ns.prepend(name + "1"), dx, dy, dz); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: " << solid.name() << " Box made of " << matter.name() - << " of dimensions " << convertCmToMm(dx) << ", " << convertCmToMm(dy) << ", " - << convertCmToMm(dz); + << " of dimensions " << cms::convert2mm(dx) << ", " << cms::convert2mm(dy) << ", " + << cms::convert2mm(dz); #endif glog = dd4hep::Volume(solid.name(), solid, matter); @@ -620,12 +620,12 @@ struct HcalBarrelAlgo { mother.placeVolume(glog, idOffset + 1, r11); mother.placeVolume(glog, idOffset + 2, dd4hep::Transform3D(rot, r12)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: " << glog.name() << " Number " << idOffset + 1 - << " positioned in " << mother.name() << " at (" << convertCmToMm(x) << "," - << convertCmToMm(y) << "," << convertCmToMm(dz) << ") with no rotation\n" - << "DDHCalBarrelAlgo: " << glog.name() << " Number " << idOffset + 2 - << " positioned in " << mother.name() << " at (" << convertCmToMm(x) << "," - << -convertCmToMm(y) << "," << convertCmToMm(dz) << ") with " << rot; + edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: " << glog.name() << " Number " << (idOffset + 1) + << " positioned in " << mother.name() << " at (" << cms::convert2mm(x) << "," + << cms::convert2mm(y) << "," << cms::convert2mm(dz) << ") with no rotation\n" + << "DDHCalBarrelAlgo: " << glog.name() << " Number " << (idOffset + 2) + << " positioned in " << mother.name() << " at (" << cms::convert2mm(x) << "," + << -cms::convert2mm(y) << "," << cms::convert2mm(dz) << ") with " << rot; #endif //Constructin the plastics and scintillators inside constructInsideDetectors(glog, nam0 + "1", id, dx, dy, dz, 1, ns); @@ -648,8 +648,8 @@ struct HcalBarrelAlgo { solid = dd4hep::Box(ns.prepend(name + "2"), dx, dy, dz); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: " << solid.name() << " Box made of " << matter.name() - << " of dimensions " << convertCmToMm(dx) << ", " << convertCmToMm(dy) << ", " - << convertCmToMm(dz); + << " of dimensions " << cms::convert2mm(dx) << ", " << cms::convert2mm(dy) << ", " + << cms::convert2mm(dz); #endif glog = dd4hep::Volume(solid.name(), solid, matter); @@ -661,12 +661,13 @@ struct HcalBarrelAlgo { mother.placeVolume(glog, idOffset + 3, r21); mother.placeVolume(glog, idOffset + 4, dd4hep::Transform3D(rot, r22)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: " << glog.name() << " Number " << idOffset + 3 - << " positioned in " << mother.name() << " at (" << convertCmToMm(x) << "," - << convertCmToMm(dy) << "," << convertCmToMm(dz) + edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: " << glog.name() << " Number " << (idOffset + 3) + << " positioned in " << mother.name() << " at (" << cms::convert2mm(x) << "," + << cms::convert2mm(dy) << "," << cms::convert2mm(dz) << ") with no rotation\nDDHCalBarrelAlgo: " << glog.name() << " Number " - << idOffset + 4 << " positioned in " << mother.name() << " at (" << convertCmToMm(x) - << "," << -convertCmToMm(dy) << "," << convertCmToMm(dz) << ") with " << rot; + << (idOffset + 4) << " positioned in " << mother.name() << " at (" + << cms::convert2mm(x) << "," << -cms::convert2mm(dy) << "," << cms::convert2mm(dz) + << ") with " << rot; #endif //Constructin the plastics and scintillators inside constructInsideDetectors(glog, nam0 + "2", id, dx, dy, dz, 2, ns); @@ -704,9 +705,9 @@ struct HcalBarrelAlgo { << " with 1 sector from " << convertRadToDeg(-alpha) << " to " << convertRadToDeg(alpha) << " and with " << pgonZ.size() << " sections"; for (unsigned int ii = 0; ii < pgonZ.size(); ii++) - edm::LogVerbatim("HCalGeom") << "\t\tZ = " << convertCmToMm(pgonZ[ii]) - << "\tRmin = " << convertCmToMm(pgonRmin[ii]) - << "\tRmax = " << convertCmToMm(pgonRmax[ii]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZ[ii]) + << "\tRmin = " << cms::convert2mm(pgonRmin[ii]) + << "\tRmax = " << cms::convert2mm(pgonRmax[ii]); #endif laylog.placeVolume(glog, 1); @@ -729,9 +730,9 @@ struct HcalBarrelAlgo { << " with 1 sector from " << convertRadToDeg(-alpha1) << " to " << convertRadToDeg(alpha1) << " and with " << pgonZ.size() << " sections"; for (unsigned int ii = 0; ii < pgonZ.size(); ii++) - edm::LogVerbatim("HCalGeom") << "\t\tZ = " << convertCmToMm(pgonZ[ii]) - << "\tRmin = " << convertCmToMm(pgonRmin[ii]) - << "\tRmax = " << convertCmToMm(pgonRmax[ii]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZ[ii]) + << "\tRmin = " << cms::convert2mm(pgonRmin[ii]) + << "\tRmax = " << cms::convert2mm(pgonRmax[ii]); #endif mother.placeVolume(log, 1); @@ -780,9 +781,9 @@ struct HcalBarrelAlgo { << " with 1 sector from " << convertRadToDeg(-alpha) << " to " << convertRadToDeg(alpha) << " and with " << pgonZ.size() << " sections"; for (unsigned int ii = 0; ii < pgonZ.size(); ii++) - edm::LogVerbatim("HCalGeom") << "\t\tZ = " << convertCmToMm(pgonZ[ii]) - << "\tRmin = " << convertCmToMm(pgonRmin[ii]) - << "\tRmax = " << convertCmToMm(pgonRmax[ii]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZ[ii]) + << "\tRmin = " << cms::convert2mm(pgonRmin[ii]) + << "\tRmax = " << cms::convert2mm(pgonRmax[ii]); #endif laylog.placeVolume(log, 1); @@ -805,9 +806,9 @@ struct HcalBarrelAlgo { << matter1.name() << " with 1 sector from " << convertRadToDeg(-alpha1) << " to " << convertRadToDeg(alpha1) << " and with " << pgonZ.size() << " sections"; for (unsigned int ii = 0; ii < pgonZ.size(); ii++) - edm::LogVerbatim("HCalGeom") << "\t\tZ = " << convertCmToMm(pgonZ[ii]) - << "\tRmin = " << convertCmToMm(pgonRmin[ii]) - << "\tRmax = " << convertCmToMm(pgonRmax[ii]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZ[ii]) + << "\tRmin = " << cms::convert2mm(pgonRmin[ii]) + << "\tRmax = " << cms::convert2mm(pgonRmax[ii]); #endif mother.placeVolume(log, 1); @@ -837,9 +838,9 @@ struct HcalBarrelAlgo { << " with 1 sector from " << convertRadToDeg(-alpha1) << " to " << convertRadToDeg(alpha1) << " and with " << pgonZ.size() << " sections"; for (unsigned int ii = 0; ii < pgonZ.size(); ii++) - edm::LogVerbatim("HCalGeom") << "\t\tZ = " << convertCmToMm(pgonZ[ii]) - << "\tRmin = " << convertCmToMm(pgonRmin[ii]) - << "\tRmax = " << convertCmToMm(pgonRmax[ii]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZ[ii]) + << "\tRmin = " << cms::convert2mm(pgonRmin[ii]) + << "\tRmax = " << cms::convert2mm(pgonRmax[ii]); #endif mother.placeVolume(glog, 1); @@ -868,9 +869,9 @@ struct HcalBarrelAlgo { << matter2.name() << " with 1 sector from " << convertRadToDeg(-alpha1) << " to " << convertRadToDeg(alpha1) << " and with " << pgonZ.size() << " sections"; for (unsigned int ii = 0; ii < pgonZ.size(); ii++) - edm::LogVerbatim("HCalGeom") << "\t\tZ = " << convertCmToMm(pgonZ[ii]) - << "\tRmin = " << convertCmToMm(pgonRmin[ii]) - << "\tRmax = " << convertCmToMm(pgonRmax[ii]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZ[ii]) + << "\tRmin = " << cms::convert2mm(pgonRmin[ii]) + << "\tRmax = " << cms::convert2mm(pgonRmax[ii]); #endif mother.placeVolume(log, i); @@ -926,22 +927,23 @@ struct HcalBarrelAlgo { glog = dd4hep::Volume(solid.name(), solid, plmatter); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: " << solid.name() << " Box made of " << plmatter.name() - << " of dimensions " << convertCmToMm(dx1) << ", " << convertCmToMm(wid) << ", " - << convertCmToMm(dz); + << " of dimensions " << cms::convert2mm(dx1) << ", " << cms::convert2mm(wid) << ", " + << cms::convert2mm(dz); #endif double x = shiftX + dx1 - dx; detector.placeVolume(glog, 1, dd4hep::Position(x, y, 0)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: " << glog.name() << " Number 1 positioned in " << detector.name() - << " at (" << convertCmToMm(x) << "," << convertCmToMm(y) << ",0) with no rotation"; + << " at (" << cms::convert2mm(x) << "," << cms::convert2mm(y) + << ",0) with no rotation"; #endif solid = dd4hep::Box(ns.prepend(scname), 0.5 * detTsc[id], wid, dz); glog = dd4hep::Volume(solid.name(), solid, scmatter); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: " << solid.name() << " Box made of " << scmatter.name() - << " of dimensions " << convertCmToMm(0.5 * detTsc[id]) << ", " << convertCmToMm(wid) - << ", " << convertCmToMm(dz); + << " of dimensions " << cms::convert2mm(0.5 * detTsc[id]) << ", " + << cms::convert2mm(wid) << ", " << cms::convert2mm(dz); #endif x += dx1 + 0.5 * detTsc[id]; @@ -949,22 +951,23 @@ struct HcalBarrelAlgo { detector.placeVolume(glog, copyNo, dd4hep::Position(x, y, 0)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: " << glog.name() << " Number " << copyNo << " positioned in " - << detector.name() << " at (" << convertCmToMm(x) << "," << convertCmToMm(y) + << detector.name() << " at (" << cms::convert2mm(x) << "," << cms::convert2mm(y) << ",0) with no rotation"; #endif solid = dd4hep::Box(ns.prepend(plname + "2"), dx2, wid, dz); glog = dd4hep::Volume(solid.name(), solid, plmatter); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: " << solid.name() << " Box made of " << plmatter.name() - << " of dimensions " << convertCmToMm(dx2) << ", " << convertCmToMm(wid) << ", " - << convertCmToMm(dz); + << " of dimensions " << cms::convert2mm(dx2) << ", " << cms::convert2mm(wid) << ", " + << cms::convert2mm(dz); #endif x += 0.5 * detTsc[id] + dx2; detector.placeVolume(glog, 1, dd4hep::Position(x, y, 0)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalBarrelAlgo: " << glog.name() << " Number 1 positioned in " << detector.name() - << " at (" << convertCmToMm(x) << "," << convertCmToMm(y) << ",0) with no rotation"; + << " at (" << cms::convert2mm(x) << "," << cms::convert2mm(y) + << ",0) with no rotation"; #endif } diff --git a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalEndcapAlgo.cc b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalEndcapAlgo.cc index 407d20b53488a..547b7ec02462f 100644 --- a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalEndcapAlgo.cc +++ b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalEndcapAlgo.cc @@ -9,15 +9,16 @@ #include #include -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DD4hep/DetFactoryHelper.h" #include "DetectorDescription/Core/interface/DDSplit.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; struct HCalEndcapAlgo { std::string genMaterial; //General material @@ -122,16 +123,16 @@ struct HCalEndcapAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: General material " << genMaterial << "\tSectors " << nsectors << ", " << nsectortot << "\tEndcaps " << nEndcap << "\tRotation matrix for half " - << rotHalf << "\n\tzFront " << convertCmToMm(zFront) << " zEnd " << convertCmToMm(zEnd) - << " ziNose " << convertCmToMm(ziNose) << " ziL0Nose " << convertCmToMm(ziL0Nose) - << " ziBody " << convertCmToMm(ziBody) << " ziL0Body " << convertCmToMm(ziL0Body) - << " z0Beam " << convertCmToMm(z0Beam) << " ziDip " << convertCmToMm(ziDip) - << " dzStep " << convertCmToMm(dzStep) << " Gap " << convertCmToMm(gap) << " z1 " - << convertCmToMm(z1) << "\n\tr1 " << convertCmToMm(r1) << " rout " - << convertCmToMm(rout) << " HeboxDepth " << convertCmToMm(heboxDepth) << " drEnd " - << convertCmToMm(drEnd) << "\tetamin " << etamin << " Bottom angle " << angBot - << " Gap angle " << angGap << " Z-Shift " << convertCmToMm(zShift) << " " - << convertCmToMm(zShiftHac2); + << rotHalf << "\n\tzFront " << cms::convert2mm(zFront) << " zEnd " + << cms::convert2mm(zEnd) << " ziNose " << cms::convert2mm(ziNose) << " ziL0Nose " + << cms::convert2mm(ziL0Nose) << " ziBody " << cms::convert2mm(ziBody) << " ziL0Body " + << cms::convert2mm(ziL0Body) << " z0Beam " << cms::convert2mm(z0Beam) << " ziDip " + << cms::convert2mm(ziDip) << " dzStep " << cms::convert2mm(dzStep) << " Gap " + << cms::convert2mm(gap) << " z1 " << cms::convert2mm(z1) << "\n\tr1 " + << cms::convert2mm(r1) << " rout " << cms::convert2mm(rout) << " HeboxDepth " + << cms::convert2mm(heboxDepth) << " drEnd " << cms::convert2mm(drEnd) << "\tetamin " + << etamin << " Bottom angle " << angBot << " Gap angle " << angGap << " Z-Shift " + << cms::convert2mm(zShift) << " " << cms::convert2mm(zShiftHac2); #endif //Derived quantities @@ -145,9 +146,9 @@ struct HCalEndcapAlgo { dzShift = (z1Beam - z0Beam) - gap / sin(angGap); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: angTop " << convertRadToDeg(angTop) << "\tSlope " << slope - << "\tDzShift " << convertCmToMm(dzShift) << "\n\tz1Beam " << convertCmToMm(z1Beam) - << "\tziKink" << convertCmToMm(ziKink) << "\triKink " << convertCmToMm(riKink) - << "\triDip " << convertCmToMm(riDip) << "\n\troDip " << convertCmToMm(roDip) + << "\tDzShift " << cms::convert2mm(dzShift) << "\n\tz1Beam " << cms::convert2mm(z1Beam) + << "\tziKink" << cms::convert2mm(ziKink) << "\triKink " << cms::convert2mm(riKink) + << "\triDip " << cms::convert2mm(riDip) << "\n\troDip " << cms::convert2mm(roDip) << "\tRotation " << rotation; #endif @@ -178,8 +179,8 @@ struct HCalEndcapAlgo { #ifdef EDM_ML_DEBUG for (int i = 0; i < modules; i++) { edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << modName[i] << " type " << modType[i] << " Sections " - << sectionModule[i] << " thickness of absorber/air " << convertCmToMm(thick[i]) - << " trim " << convertCmToMm(trimLeft[i]) << ", " << convertCmToMm(trimRight[i]) + << sectionModule[i] << " thickness of absorber/air " << cms::convert2mm(thick[i]) + << " trim " << cms::convert2mm(trimLeft[i]) << ", " << cms::convert2mm(trimRight[i]) << " equip module " << eModule[i] << " with " << layerN[i] << " layers"; if (i == 0) { for (int j = 0; j < layerN[i]; j++) { @@ -229,7 +230,7 @@ struct HCalEndcapAlgo { << rotmat << "\n\tNumber of layers " << layers; for (int i = 0; i < layers; i++) { edm::LogVerbatim("HCalGeom") << "\t" << layerName[i] << "\tType " << layerType[i] << "\tThickness " - << convertCmToMm(layerT[i]) << "\tScint.Thick " << convertCmToMm(scintT[i]); + << cms::convert2mm(layerT[i]) << "\tScint.Thick " << cms::convert2mm(scintT[i]); } #endif @@ -298,10 +299,10 @@ struct HCalEndcapAlgo { } #ifdef EDM_ML_DEBUG for (int i = 0; i < module; i++) - edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: Module " << i << "\tZ/Rin/Rout " << convertCmToMm(zminBlock[i]) - << ", " << convertCmToMm(zmaxBlock[i]) << "/ " << convertCmToMm(rinBlock1[i]) << ", " - << convertCmToMm(rinBlock2[i]) << "/ " << convertCmToMm(routBlock1[i]) << ", " - << convertCmToMm(routBlock2[i]); + edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: Module " << i << "\tZ/Rin/Rout " + << cms::convert2mm(zminBlock[i]) << ", " << cms::convert2mm(zmaxBlock[i]) << "/ " + << cms::convert2mm(rinBlock1[i]) << ", " << cms::convert2mm(rinBlock2[i]) << "/ " + << cms::convert2mm(routBlock1[i]) << ", " << cms::convert2mm(routBlock2[i]); #endif idName = args.value("MotherName"); @@ -314,8 +315,8 @@ struct HCalEndcapAlgo { tolPos = args.value("TolPos"); tolAbs = args.value("TolAbs"); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: Tolerances - Positioning " << convertCmToMm(tolPos) - << " Absorber " << convertCmToMm(tolAbs); + edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: Tolerances - Positioning " << cms::convert2mm(tolPos) + << " Absorber " << cms::convert2mm(tolAbs); edm::LogVerbatim("HCalGeom") << "==>> Constructing DDHCalEndcapAlgo..."; #endif @@ -389,8 +390,9 @@ struct HCalEndcapAlgo { << " with " << nsectortot << " sectors from " << convertRadToDeg(-alpha) << " to " << convertRadToDeg(-alpha + dphi) << " and with " << pgonZ.size() << " sections"; for (unsigned int i = 0; i < pgonZ.size(); i++) - edm::LogVerbatim("HCalGeom") << "\t\tZ = " << convertCmToMm(pgonZ[i]) << "\tRmin = " << convertCmToMm(pgonRmin[i]) - << "\tRmax = " << convertCmToMm(pgonRmax[i]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZ[i]) + << "\tRmin = " << cms::convert2mm(pgonRmin[i]) + << "\tRmax = " << cms::convert2mm(pgonRmax[i]); #endif dd4hep::Material matter = ns.material(genMaterial); dd4hep::Volume genlogic(solid.name(), solid, matter); @@ -398,7 +400,7 @@ struct HCalEndcapAlgo { parent.placeVolume(genlogic, 1, dd4hep::Transform3D(rot, r0)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << genlogic.name() << " number 1 positioned in " - << parent.name() << " at (0, 0, " << convertCmToMm(zShift) + << parent.name() << " at (0, 0, " << cms::convert2mm(zShift) << ") with rotation: " << rot; #endif @@ -407,7 +409,7 @@ struct HCalEndcapAlgo { parent.placeVolume(genlogic, 2, dd4hep::Transform3D(rot, r0)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << genlogic.name() << " number 2 " - << "positioned in " << parent.name() << " at (0, 0, " << convertCmToMm(zShift) + << "positioned in " << parent.name() << " at (0, 0, " << cms::convert2mm(zShift) << ") with rotation: " << rot; #endif } @@ -426,9 +428,9 @@ struct HCalEndcapAlgo { << " with " << nsectortot << " sectors from " << convertRadToDeg(-alpha) << " to " << convertRadToDeg(-alpha + dphi) << " and with " << pgonZMod.size() << " sections "; for (unsigned int i = 0; i < pgonZMod.size(); i++) - edm::LogVerbatim("HCalGeom") << "\t\tZ = " << convertCmToMm(pgonZMod[i]) - << "\tRmin = " << convertCmToMm(pgonRminMod[i]) - << "\tRmax = " << convertCmToMm(pgonRmaxMod[i]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZMod[i]) + << "\tRmin = " << cms::convert2mm(pgonRminMod[i]) + << "\tRmax = " << cms::convert2mm(pgonRmaxMod[i]); #endif dd4hep::Volume genlogich(solid.name(), solid, matter); @@ -436,7 +438,7 @@ struct HCalEndcapAlgo { genlogic.placeVolume(genlogich, 1, dd4hep::Position(0, 0, -dzShift)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << genlogich.name() << " number 1 positioned in " - << genlogic.name() << " at (0,0," << -convertCmToMm(dzShift) << ") with no rotation"; + << genlogic.name() << " at (0,0," << -cms::convert2mm(dzShift) << ") with no rotation"; #endif //Construct sector (from -alpha to +alpha) @@ -447,9 +449,9 @@ struct HCalEndcapAlgo { << " with 1 sector from " << convertRadToDeg(-alpha) << " to " << convertRadToDeg(alpha) << " and with " << pgonZMod.size() << " sections"; for (unsigned int i = 0; i < pgonZMod.size(); i++) - edm::LogVerbatim("HCalGeom") << "\t\tZ = " << convertCmToMm(pgonZMod[i]) - << "\tRmin = " << convertCmToMm(pgonRminMod[i]) - << "\tRmax = " << convertCmToMm(pgonRmaxMod[i]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZMod[i]) + << "\tRmin = " << cms::convert2mm(pgonRminMod[i]) + << "\tRmax = " << cms::convert2mm(pgonRmaxMod[i]); #endif dd4hep::Volume seclogic(solid.name(), solid, matter); @@ -465,7 +467,7 @@ struct HCalEndcapAlgo { } genlogich.placeVolume(seclogic, ii + 1, rot0); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << seclogic.name() << " number " << ii + 1 + edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << seclogic.name() << " number " << (ii + 1) << " positioned in " << genlogich.name() << " at (0, 0, 0) with rotation: " << rot0; #endif } @@ -488,9 +490,9 @@ struct HCalEndcapAlgo { << nsectortot << " sectors from " << convertRadToDeg(-alpha) << " to " << convertRadToDeg(-alpha + dphi) << " and with " << pgonZBack.size() << " sections"; for (unsigned int i = 0; i < pgonZBack.size(); i++) - edm::LogVerbatim("HCalGeom") << "\t\tZ = " << convertCmToMm(pgonZBack[i]) - << "\tRmin = " << convertCmToMm(pgonRminBack[i]) - << "\tRmax = " << convertCmToMm(pgonRmaxBack[i]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZBack[i]) + << "\tRmin = " << cms::convert2mm(pgonRminBack[i]) + << "\tRmax = " << cms::convert2mm(pgonRmaxBack[i]); #endif dd4hep::Material absMatter = ns.material(absMat); @@ -552,17 +554,17 @@ struct HCalEndcapAlgo { << " with 1 sector from " << convertRadToDeg(-alpha) << " to " << convertRadToDeg(alpha) << " and with " << nsec << " sections"; for (unsigned int k = 0; k < pgonZ.size(); k++) - edm::LogVerbatim("HCalGeom") << "\t\tZ = " << convertCmToMm(pgonZ[k]) - << "\tRmin = " << convertCmToMm(pgonRmin[k]) - << "\tRmax = " << convertCmToMm(pgonRmax[k]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZ[k]) + << "\tRmin = " << cms::convert2mm(pgonRmin[k]) + << "\tRmax = " << cms::convert2mm(pgonRmax[k]); #endif dd4hep::Volume glog(solid.name(), solid, matter); sector.placeVolume(glog, i + 1); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << glog.name() << " number " << i + 1 << " positioned in " - << sector.name() << " at (0,0,0) with no rotation"; + edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << glog.name() << " number " << (i + 1) + << " positioned in " << sector.name() << " at (0,0,0) with no rotation"; #endif if (modType[i] == 0) @@ -597,10 +599,11 @@ struct HCalEndcapAlgo { solid = dd4hep::Trap(ns.prepend(name), 0.5 * layerT[layer], 0, 0, yh, bl, tl, alp, yh, bl, tl, alp); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << solid.name() << " Trap made of " << plastMat - << " of dimensions " << convertCmToMm(0.5 * layerT[layer]) << ", 0, 0, " - << convertCmToMm(yh) << ", " << convertCmToMm(bl) << ", " << convertCmToMm(tl) - << ", " << convertRadToDeg(alp) << ", " << convertCmToMm(yh) << ", " - << convertCmToMm(bl) << ", " << convertCmToMm(tl) << ", " << convertRadToDeg(alp); + << " of dimensions " << cms::convert2mm(0.5 * layerT[layer]) << ", 0, 0, " + << cms::convert2mm(yh) << ", " << cms::convert2mm(bl) << ", " << cms::convert2mm(tl) + << ", " << convertRadToDeg(alp) << ", " << cms::convert2mm(yh) << ", " + << cms::convert2mm(bl) << ", " << cms::convert2mm(tl) << ", " + << convertRadToDeg(alp); #endif glog = dd4hep::Volume(solid.name(), solid, matplastic); @@ -610,8 +613,9 @@ struct HCalEndcapAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << glog.name() << " number " << (idOffset + layer + 1) - << " positioned in " << module.name() << " at (" << convertCmToMm(xpos) << ", " - << convertCmToMm(ypos) << ", " << convertCmToMm(zpos) << " with rotation: " << rot; + << " positioned in " << module.name() << " at (" << cms::convert2mm(xpos) << ", " + << cms::convert2mm(ypos) << ", " << cms::convert2mm(zpos) + << " with rotation: " << rot; #endif //Now construct the layer of scintillator inside this @@ -637,9 +641,10 @@ struct HCalEndcapAlgo { } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: Module " << mod << " Front " << convertCmToMm(zi) << ", " - << convertCmToMm(rinF) << ", " << convertCmToMm(routF) << " Back " << convertCmToMm(zo) - << ", " << convertCmToMm(rinB) << ", " << convertCmToMm(routB); + edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: Module " << mod << " Front " << cms::convert2mm(zi) << ", " + << cms::convert2mm(rinF) << ", " << cms::convert2mm(routF) << " Back " + << cms::convert2mm(zo) << ", " << cms::convert2mm(rinB) << ", " + << cms::convert2mm(routB); #endif double yh1, bl1, tl1, yh2, bl2, tl2, theta, phi, alp; @@ -648,9 +653,10 @@ struct HCalEndcapAlgo { double fact = tolAbs; #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: Trim " << convertCmToMm(fact) << " Param " << convertCmToMm(yh1) - << ", " << convertCmToMm(bl1) << ", " << convertCmToMm(tl1) << ", " - << convertCmToMm(yh2) << ", " << convertCmToMm(bl2) << ", " << convertCmToMm(tl2); + edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: Trim " << cms::convert2mm(fact) << " Param " + << cms::convert2mm(yh1) << ", " << cms::convert2mm(bl1) << ", " << cms::convert2mm(tl1) + << ", " << cms::convert2mm(yh2) << ", " << cms::convert2mm(bl2) << ", " + << cms::convert2mm(tl2); #endif bl1 -= fact; @@ -662,11 +668,12 @@ struct HCalEndcapAlgo { solid = dd4hep::Trap(ns.prepend(name), 0.5 * thick[mod], theta, phi, yh1, bl1, tl1, alp, yh2, bl2, tl2, alp); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << solid.name() << " Trap made of " << absMat - << " of dimensions " << convertCmToMm(0.5 * thick[mod]) << ", " - << convertRadToDeg(theta) << ", " << convertRadToDeg(phi) << ", " << convertCmToMm(yh1) - << ", " << convertCmToMm(bl1) << ", " << convertCmToMm(tl1) << ", " - << convertRadToDeg(alp) << ", " << convertCmToMm(yh2) << ", " << convertCmToMm(bl2) - << ", " << convertCmToMm(tl2) << ", " << convertRadToDeg(alp); + << " of dimensions " << cms::convert2mm(0.5 * thick[mod]) << ", " + << convertRadToDeg(theta) << ", " << convertRadToDeg(phi) << ", " + << cms::convert2mm(yh1) << ", " << cms::convert2mm(bl1) << ", " << cms::convert2mm(tl1) + << ", " << convertRadToDeg(alp) << ", " << cms::convert2mm(yh2) << ", " + << cms::convert2mm(bl2) << ", " << cms::convert2mm(tl2) << ", " + << convertRadToDeg(alp); #endif glog = dd4hep::Volume(solid.name(), solid, matabsorbr); @@ -676,8 +683,8 @@ struct HCalEndcapAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << glog.name() << " number 1 positioned in " << module.name() - << " at (" << convertCmToMm(xpos) << ", " << convertCmToMm(ypos) << ", " - << convertCmToMm(zpos) << ") with rotation: " << rot; + << " at (" << cms::convert2mm(xpos) << ", " << cms::convert2mm(ypos) << ", " + << cms::convert2mm(zpos) << ") with rotation: " << rot; #endif } @@ -721,9 +728,9 @@ struct HCalEndcapAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: Layer " << i << " Phi " << iphi << " Front " - << convertCmToMm(ziAir) << ", " << convertCmToMm(rinF) << ", " - << convertCmToMm(routF) << " Back " << convertCmToMm(zo) << ", " - << convertCmToMm(rinB) << ", " << convertCmToMm(routB); + << cms::convert2mm(ziAir) << ", " << cms::convert2mm(rinF) << ", " + << cms::convert2mm(routF) << " Back " << cms::convert2mm(zo) << ", " + << cms::convert2mm(rinB) << ", " << cms::convert2mm(routB); #endif double yh1, bl1, tl1, yh2, bl2, tl2, theta, phi, alp; @@ -735,12 +742,12 @@ struct HCalEndcapAlgo { solid = dd4hep::Trap(ns.prepend(name), 0.5 * thick[mod], theta, phi, yh1, bl1, tl1, alp, yh2, bl2, tl2, alp); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << solid.name() << " Trap made of " << matter.name() - << " of dimensions " << convertCmToMm(0.5 * thick[mod]) << ", " + << " of dimensions " << cms::convert2mm(0.5 * thick[mod]) << ", " << convertRadToDeg(theta) << ", " << convertRadToDeg(phi) << ", " - << convertCmToMm(yh1) << ", " << convertCmToMm(bl1) << ", " << convertCmToMm(tl1) - << ", " << convertRadToDeg(alp) << ", " << convertCmToMm(yh2) << ", " - << convertCmToMm(bl2) << ", " << convertCmToMm(tl2) << ", " - << convertRadToDeg(alp); + << cms::convert2mm(yh1) << ", " << cms::convert2mm(bl1) << ", " + << cms::convert2mm(tl1) << ", " << convertRadToDeg(alp) << ", " + << cms::convert2mm(yh2) << ", " << cms::convert2mm(bl2) << ", " + << cms::convert2mm(tl2) << ", " << convertRadToDeg(alp); #endif glog = dd4hep::Volume(solid.name(), solid, matter); @@ -749,8 +756,8 @@ struct HCalEndcapAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << glog.name() << " number " << (layer + 1) - << " positioned in " << module.name() << " at (" << convertCmToMm(xpos) << ", " - << convertCmToMm(ypos) << ", " << convertCmToMm(zpos) + << " positioned in " << module.name() << " at (" << cms::convert2mm(xpos) << ", " + << cms::convert2mm(ypos) << ", " << cms::convert2mm(zpos) << ") with rotation: " << rot; #endif @@ -762,10 +769,11 @@ struct HCalEndcapAlgo { solid = dd4hep::Trap(ns.prepend(name), 0.5 * layerT[layer], 0, 0, yh, bl, tl, alp, yh, bl, tl, alp); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << solid.name() << " Trap made of " << plastMat - << " of dimensions " << convertCmToMm(0.5 * layerT[layer]) << ", 0, 0, " - << convertCmToMm(yh) << ", " << convertCmToMm(bl) << ", " << convertCmToMm(tl) - << ", " << convertRadToDeg(alp) << ", " << convertCmToMm(yh) << ", " - << convertCmToMm(bl) << ", " << convertCmToMm(tl) << ", " << convertRadToDeg(alp); + << " of dimensions " << cms::convert2mm(0.5 * layerT[layer]) << ", 0, 0, " + << cms::convert2mm(yh) << ", " << cms::convert2mm(bl) << ", " + << cms::convert2mm(tl) << ", " << convertRadToDeg(alp) << ", " + << cms::convert2mm(yh) << ", " << cms::convert2mm(bl) << ", " + << cms::convert2mm(tl) << ", " << convertRadToDeg(alp); #endif plog = dd4hep::Volume(solid.name(), solid, matplastic); @@ -774,7 +782,7 @@ struct HCalEndcapAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << plog.name() << " number " << (idOffset + layer + 1) - << " positioned in " << glog.name() << " at (0, " << convertCmToMm(ypos) + << " positioned in " << glog.name() << " at (0, " << cms::convert2mm(ypos) << ", 0) with no rotation"; #endif @@ -803,10 +811,10 @@ struct HCalEndcapAlgo { dd4hep::Solid solid = dd4hep::Trap(ns.prepend(name), 0.5 * dz, 0, 0, yh, bl, tl, alp, yh, bl, tl, alp); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapAlgo: " << solid.name() << " Trap made of " << scintMat - << " of dimensions " << convertCmToMm(0.5 * dz) << ", 0, 0, " << convertCmToMm(yh) - << ", " << convertCmToMm(bl) << ", " << convertCmToMm(tl) << ", " - << convertRadToDeg(alp) << ", " << convertCmToMm(yh) << ", " << convertCmToMm(bl) - << ", " << convertCmToMm(tl) << ", " << convertRadToDeg(alp); + << " of dimensions " << cms::convert2mm(0.5 * dz) << ", 0, 0, " << cms::convert2mm(yh) + << ", " << cms::convert2mm(bl) << ", " << cms::convert2mm(tl) << ", " + << convertRadToDeg(alp) << ", " << cms::convert2mm(yh) << ", " << cms::convert2mm(bl) + << ", " << cms::convert2mm(tl) << ", " << convertRadToDeg(alp); #endif dd4hep::Volume glog(solid.name(), solid, matter); @@ -900,9 +908,10 @@ struct HCalEndcapAlgo { } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "Output Dimensions " << convertCmToMm(yh) << " " << convertCmToMm(bl) << " " - << convertCmToMm(tl) << " " << convertRadToDeg(alp) << " Position " - << convertCmToMm(xpos) << " " << convertCmToMm(ypos) << " " << convertCmToMm(zpos); + edm::LogVerbatim("HCalGeom") << "Output Dimensions " << cms::convert2mm(yh) << " " << cms::convert2mm(bl) << " " + << cms::convert2mm(tl) << " " << convertRadToDeg(alp) << " Position " + << cms::convert2mm(xpos) << " " << cms::convert2mm(ypos) << " " + << cms::convert2mm(zpos); #endif } @@ -930,10 +939,10 @@ struct HCalEndcapAlgo { double alpha = (1._pi) / nsectors; #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "Input " << iphi << " Front " << convertCmToMm(rinF) << " " << convertCmToMm(routF) - << " " << convertCmToMm(zi) << " Back " << convertCmToMm(rinB) << " " - << convertCmToMm(routB) << " " << convertCmToMm(zo) << " Alpha " - << convertRadToDeg(alpha); + edm::LogVerbatim("HCalGeom") << "Input " << iphi << " Front " << cms::convert2mm(rinF) << " " + << cms::convert2mm(routF) << " " << cms::convert2mm(zi) << " Back " + << cms::convert2mm(rinB) << " " << cms::convert2mm(routB) << " " << cms::convert2mm(zo) + << " Alpha " << convertRadToDeg(alpha); #endif yh1 = 0.5 * (routF - rinB); @@ -960,11 +969,12 @@ struct HCalEndcapAlgo { phi = atan2(dy, dx); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "Output Dimensions " << convertCmToMm(yh1) << " " << convertCmToMm(bl1) << " " - << convertCmToMm(tl1) << " " << convertCmToMm(yh2) << " " << convertCmToMm(bl2) << " " - << convertCmToMm(tl2) << " " << convertRadToDeg(alp) << " " << convertRadToDeg(theta) - << " " << convertRadToDeg(phi) << " Position " << convertCmToMm(xpos) << " " - << convertCmToMm(ypos) << " " << convertCmToMm(zpos); + edm::LogVerbatim("HCalGeom") << "Output Dimensions " << cms::convert2mm(yh1) << " " << cms::convert2mm(bl1) << " " + << cms::convert2mm(tl1) << " " << cms::convert2mm(yh2) << " " << cms::convert2mm(bl2) + << " " << cms::convert2mm(tl2) << " " << convertRadToDeg(alp) << " " + << convertRadToDeg(theta) << " " << convertRadToDeg(phi) << " Position " + << cms::convert2mm(xpos) << " " << cms::convert2mm(ypos) << " " + << cms::convert2mm(zpos); #endif } @@ -979,7 +989,7 @@ struct HCalEndcapAlgo { static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { HCalEndcapAlgo hcalendcapalgo(ctxt, e); - return 1; + return cms::s_executed; } // first argument is the type from the xml file diff --git a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalEndcapModuleAlgo.cc b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalEndcapModuleAlgo.cc index e48cf32fc9dc0..104141ebea954 100644 --- a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalEndcapModuleAlgo.cc +++ b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalEndcapModuleAlgo.cc @@ -9,14 +9,15 @@ #include #include -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DD4hep/DetFactoryHelper.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; struct HCalEndcapModuleAlgo { std::string genMaterial; //General material @@ -106,11 +107,11 @@ struct HCalEndcapModuleAlgo { layerThick = args.value("LayerThick"); scintThick = args.value("ScintThick"); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: Zmin " << convertCmToMm(zMinBlock) << "\tZmax " - << convertCmToMm(zMaxBlock) << "\tZ1Beam " << convertCmToMm(z1Beam) << "\tZiDip " - << convertCmToMm(ziDip) << "\tDzStep " << convertCmToMm(dzStep) << "\tModuleThick " - << convertCmToMm(moduleThick) << "\tLayerThick " << convertCmToMm(layerThick) - << "\tScintThick " << convertCmToMm(scintThick); + edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: Zmin " << cms::convert2mm(zMinBlock) << "\tZmax " + << cms::convert2mm(zMaxBlock) << "\tZ1Beam " << cms::convert2mm(z1Beam) << "\tZiDip " + << cms::convert2mm(ziDip) << "\tDzStep " << cms::convert2mm(dzStep) << "\tModuleThick " + << cms::convert2mm(moduleThick) << "\tLayerThick " << cms::convert2mm(layerThick) + << "\tScintThick " << cms::convert2mm(scintThick); #endif rMaxFront = args.value("RMaxFront"); rMaxBack = args.value("RMaxBack"); @@ -118,9 +119,9 @@ struct HCalEndcapModuleAlgo { trimRight = args.value("TrimRight"); tolAbs = args.value("TolAbs"); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: RMaxFront " << convertCmToMm(rMaxFront) << "\tRmaxBack " - << convertCmToMm(rMaxBack) << "\tTrims " << convertCmToMm(trimLeft) << ":" - << convertCmToMm(trimRight) << "\tTolAbs " << convertCmToMm(tolAbs); + edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: RMaxFront " << cms::convert2mm(rMaxFront) << "\tRmaxBack " + << cms::convert2mm(rMaxBack) << "\tTrims " << cms::convert2mm(trimLeft) << ":" + << cms::convert2mm(trimRight) << "\tTolAbs " << cms::convert2mm(tolAbs); #endif slopeBot = args.value("SlopeBottom"); slopeTop = args.value("SlopeTop"); @@ -207,11 +208,11 @@ struct HCalEndcapModuleAlgo { parm.alp); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: " << solid.name() << " Trap made of " << plasticMat - << " of dimensions " << convertCmToMm(0.5 * layerThick) << ", 0, 0, " - << convertCmToMm(parm.yh1) << ", " << convertCmToMm(parm.bl1) << ", " - << convertCmToMm(parm.tl1) << ", " << convertRadToDeg(parm.alp) << ", " - << convertCmToMm(parm.yh2) << ", " << convertCmToMm(parm.bl2) << ", " - << convertCmToMm(parm.tl2) << ", " << convertRadToDeg(parm.alp); + << " of dimensions " << cms::convert2mm(0.5 * layerThick) << ", 0, 0, " + << cms::convert2mm(parm.yh1) << ", " << cms::convert2mm(parm.bl1) << ", " + << cms::convert2mm(parm.tl1) << ", " << convertRadToDeg(parm.alp) << ", " + << cms::convert2mm(parm.yh2) << ", " << cms::convert2mm(parm.bl2) << ", " + << cms::convert2mm(parm.tl2) << ", " << convertRadToDeg(parm.alp); #endif glog = dd4hep::Volume(solid.name(), solid, matplastic); @@ -219,8 +220,8 @@ struct HCalEndcapModuleAlgo { module.placeVolume(glog, idOffset + layer + 1, dd4hep::Transform3D(rot, r1)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: " << glog.name() << " number " << (idOffset + layer + 1) - << " positioned in " << module.name() << " at (" << convertCmToMm(parm.xpos) << ", " - << convertCmToMm(parm.ypos) << ", " << convertCmToMm(parm.zpos) + << " positioned in " << module.name() << " at (" << cms::convert2mm(parm.xpos) + << ", " << cms::convert2mm(parm.ypos) << ", " << cms::convert2mm(parm.zpos) << ") with rotation: " << rot; #endif //Now construct the layer of scintillator inside this @@ -250,16 +251,17 @@ struct HCalEndcapModuleAlgo { routB = (zo - z1Beam) * slopeTop; } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: Front " << convertCmToMm(zi) << ", " << convertCmToMm(rinF) - << ", " << convertCmToMm(routF) << " Back " << convertCmToMm(zo) << ", " - << convertCmToMm(rinB) << ", " << convertCmToMm(routB); + edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: Front " << cms::convert2mm(zi) << ", " + << cms::convert2mm(rinF) << ", " << cms::convert2mm(routF) << " Back " + << cms::convert2mm(zo) << ", " << cms::convert2mm(rinB) << ", " + << cms::convert2mm(routB); #endif HCalEndcapModuleAlgo::HcalEndcapPar parm = parameterLayer(0, rinF, routF, rinB, routB, zi, zo); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: Trim " << convertCmToMm(tolAbs) << " Param " - << convertCmToMm(parm.yh1) << ", " << convertCmToMm(parm.bl1) << ", " - << convertCmToMm(parm.tl1) << ", " << convertCmToMm(parm.yh2) << ", " - << convertCmToMm(parm.bl2) << ", " << convertCmToMm(parm.tl2); + edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: Trim " << cms::convert2mm(tolAbs) << " Param " + << cms::convert2mm(parm.yh1) << ", " << cms::convert2mm(parm.bl1) << ", " + << cms::convert2mm(parm.tl1) << ", " << cms::convert2mm(parm.yh2) << ", " + << cms::convert2mm(parm.bl2) << ", " << cms::convert2mm(parm.tl2); #endif parm.bl1 -= tolAbs; parm.tl1 -= tolAbs; @@ -281,12 +283,12 @@ struct HCalEndcapModuleAlgo { parm.alp); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: " << solid.name() << " Trap made of " << matabsorbr.name() - << " of dimensions " << convertCmToMm(0.5 * moduleThick) << ", " + << " of dimensions " << cms::convert2mm(0.5 * moduleThick) << ", " << convertRadToDeg(parm.theta) << ", " << convertRadToDeg(parm.phi) << ", " - << convertCmToMm(parm.yh1) << ", " << convertCmToMm(parm.bl1) << ", " - << convertCmToMm(parm.tl1) << ", " << convertRadToDeg(parm.alp) << ", " - << convertCmToMm(parm.yh2) << ", " << convertCmToMm(parm.bl2) << ", " - << convertCmToMm(parm.tl2) << ", " << convertRadToDeg(parm.alp); + << cms::convert2mm(parm.yh1) << ", " << cms::convert2mm(parm.bl1) << ", " + << cms::convert2mm(parm.tl1) << ", " << convertRadToDeg(parm.alp) << ", " + << cms::convert2mm(parm.yh2) << ", " << cms::convert2mm(parm.bl2) << ", " + << cms::convert2mm(parm.tl2) << ", " << convertRadToDeg(parm.alp); #endif glog = dd4hep::Volume(solid.name(), solid, matabsorbr); @@ -294,8 +296,8 @@ struct HCalEndcapModuleAlgo { module.placeVolume(glog, idOffset + layer + 1, dd4hep::Transform3D(rot, r2)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: " << glog.name() << " number 1 positioned in " - << module.name() << " at (" << convertCmToMm(parm.xpos) << ", " - << convertCmToMm(parm.ypos) << ", " << convertCmToMm(parm.zpos) + << module.name() << " at (" << cms::convert2mm(parm.xpos) << ", " + << cms::convert2mm(parm.ypos) << ", " << cms::convert2mm(parm.zpos) << ") with rotation: " << rot; #endif } @@ -335,9 +337,9 @@ struct HCalEndcapModuleAlgo { double routB = getRout(zo); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: Layer " << i << " Phi " << iphi << " Front " - << convertCmToMm(ziAir) << ", " << convertCmToMm(rinF) << ", " - << convertCmToMm(routF) << " Back " << convertCmToMm(zo) << ", " - << convertCmToMm(rinB) << ", " << convertCmToMm(routB); + << cms::convert2mm(ziAir) << ", " << cms::convert2mm(rinF) << ", " + << cms::convert2mm(routF) << " Back " << cms::convert2mm(zo) << ", " + << cms::convert2mm(rinB) << ", " << cms::convert2mm(routB); #endif HCalEndcapModuleAlgo::HcalEndcapPar parm = parameterLayer(iphi, rinF, routF, rinB, routB, ziAir, zo); @@ -356,21 +358,21 @@ struct HCalEndcapModuleAlgo { parm.alp); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: " << solid.name() << " Trap made of " << matter.name() - << " of dimensions " << convertCmToMm(0.5 * moduleThick) << ", " + << " of dimensions " << cms::convert2mm(0.5 * moduleThick) << ", " << convertRadToDeg(parm.theta) << ", " << convertRadToDeg(parm.phi) << ", " - << convertCmToMm(parm.yh1) << ", " << convertCmToMm(parm.bl1) << ", " - << convertCmToMm(parm.tl1) << ", " << convertRadToDeg(parm.alp) << ", " - << convertCmToMm(parm.yh2) << ", " << convertCmToMm(parm.bl2) << ", " - << convertCmToMm(parm.tl2) << ", " << convertRadToDeg(parm.alp); + << cms::convert2mm(parm.yh1) << ", " << cms::convert2mm(parm.bl1) << ", " + << cms::convert2mm(parm.tl1) << ", " << convertRadToDeg(parm.alp) << ", " + << cms::convert2mm(parm.yh2) << ", " << cms::convert2mm(parm.bl2) << ", " + << cms::convert2mm(parm.tl2) << ", " << convertRadToDeg(parm.alp); #endif glog = dd4hep::Volume(solid.name(), solid, matter); dd4hep::Position r1(parm.xpos, parm.ypos, parm.zpos); module.placeVolume(glog, layer + 1, dd4hep::Transform3D(rot, r1)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: " << glog.name() << " number " << layer + 1 - << " positioned in " << module.name() << " at (" << convertCmToMm(parm.xpos) - << ", " << convertCmToMm(parm.ypos) << ", " << convertCmToMm(parm.zpos) + edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: " << glog.name() << " number " << (layer + 1) + << " positioned in " << module.name() << " at (" << cms::convert2mm(parm.xpos) + << ", " << cms::convert2mm(parm.ypos) << ", " << cms::convert2mm(parm.zpos) << ") with rotation: " << rot; #endif //Now the plastic with scintillators @@ -392,11 +394,11 @@ struct HCalEndcapModuleAlgo { parm.alp); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: " << solid.name() << " Trap made of " - << matplastic.name() << " of dimensions " << convertCmToMm(0.5 * layerThick) - << ", 0, 0, " << convertCmToMm(parm.yh1) << ", " << convertCmToMm(parm.bl1) << ", " - << convertCmToMm(parm.tl1) << ", " << convertRadToDeg(parm.alp) << ", " - << convertCmToMm(parm.yh1) << ", " << convertCmToMm(parm.bl1) << ", " - << convertCmToMm(parm.tl1) << ", " << convertRadToDeg(parm.alp); + << matplastic.name() << " of dimensions " << cms::convert2mm(0.5 * layerThick) + << ", 0, 0, " << cms::convert2mm(parm.yh1) << ", " << cms::convert2mm(parm.bl1) + << ", " << cms::convert2mm(parm.tl1) << ", " << convertRadToDeg(parm.alp) << ", " + << cms::convert2mm(parm.yh1) << ", " << cms::convert2mm(parm.bl1) << ", " + << cms::convert2mm(parm.tl1) << ", " << convertRadToDeg(parm.alp); #endif plog = dd4hep::Volume(solid.name(), solid, matplastic); @@ -406,7 +408,7 @@ struct HCalEndcapModuleAlgo { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: " << plog.name() << " number " << (idOffset + layer + 1) << " positioned in " << glog.name() << " at (0, " - << convertCmToMm(ypos) << ", 0) with no rotation"; + << cms::convert2mm(ypos) << ", 0) with no rotation"; #endif //Constructin the scintillators inside int copyNo = layer * 10 + layerType; @@ -446,9 +448,10 @@ struct HCalEndcapModuleAlgo { rout = (zi - z1Beam) * slopeTop; } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "ModNumber " << modNumber << " " << convertCmToMm(zi) << " " << convertCmToMm(zo) - << " " << slopeTopF << " " << slopeTop << " " << slopeBot << " " << convertCmToMm(rin) - << " " << convertCmToMm(rout) << " " << convertCmToMm(getTrim(iphi)); + edm::LogVerbatim("HCalGeom") << "ModNumber " << modNumber << " " << cms::convert2mm(zi) << " " + << cms::convert2mm(zo) << " " << slopeTopF << " " << slopeTop << " " << slopeBot << " " + << cms::convert2mm(rin) << " " << cms::convert2mm(rout) << " " + << cms::convert2mm(getTrim(iphi)); #endif double yh = 0.5 * (rout - rin); double bl = 0.5 * rin * tan(alpha); @@ -466,10 +469,10 @@ struct HCalEndcapModuleAlgo { parm.alp = -parm.alp; } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "Output Dimensions " << convertCmToMm(parm.yh1) << " " << convertCmToMm(parm.bl1) - << " " << convertCmToMm(parm.tl1) << " " << convertRadToDeg(parm.alp) << " Position " - << convertCmToMm(parm.xpos) << " " << convertCmToMm(parm.ypos) << " " - << convertCmToMm(parm.zpos); + edm::LogVerbatim("HCalGeom") << "Output Dimensions " << cms::convert2mm(parm.yh1) << " " + << cms::convert2mm(parm.bl1) << " " << cms::convert2mm(parm.tl1) << " " + << convertRadToDeg(parm.alp) << " Position " << cms::convert2mm(parm.xpos) << " " + << cms::convert2mm(parm.ypos) << " " << cms::convert2mm(parm.zpos); #endif return parm; } @@ -481,10 +484,10 @@ struct HCalEndcapModuleAlgo { //position of the trapezoid for a standrd layer double alpha = (1._pi) / sectors; #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "Input " << iphi << " Front " << convertCmToMm(rinF) << " " << convertCmToMm(routF) - << " " << convertCmToMm(zi) << " Back " << convertCmToMm(rinB) << " " - << convertCmToMm(routB) << " " << convertCmToMm(zo) << " Alpha " - << convertRadToDeg(alpha); + edm::LogVerbatim("HCalGeom") << "Input " << iphi << " Front " << cms::convert2mm(rinF) << " " + << cms::convert2mm(routF) << " " << cms::convert2mm(zi) << " Back " + << cms::convert2mm(rinB) << " " << cms::convert2mm(routB) << " " << cms::convert2mm(zo) + << " Alpha " << convertRadToDeg(alpha); #endif parm.yh1 = 0.5 * (routF - rinB); parm.bl1 = 0.5 * rinB * tan(alpha); @@ -506,8 +509,8 @@ struct HCalEndcapModuleAlgo { } double r = sqrt(dx * dx + dy * dy); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "dx|dy|r " << convertCmToMm(dx) << ":" << convertCmToMm(dy) << ":" - << convertCmToMm(r); + edm::LogVerbatim("HCalGeom") << "dx|dy|r " << cms::convert2mm(dx) << ":" << cms::convert2mm(dy) << ":" + << cms::convert2mm(r); #endif if (r > 1.0e-8) { parm.theta = atan(r / (zo - zi)); @@ -516,12 +519,13 @@ struct HCalEndcapModuleAlgo { parm.theta = parm.phi = 0; } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "Output Dimensions " << convertCmToMm(parm.yh1) << " " << convertCmToMm(parm.bl1) - << " " << convertCmToMm(parm.tl1) << " " << convertCmToMm(parm.yh2) << " " - << convertCmToMm(parm.bl2) << " " << convertCmToMm(parm.tl2) << " " - << convertRadToDeg(parm.alp) << " " << convertRadToDeg(parm.theta) << " " - << convertRadToDeg(parm.phi) << " Position " << convertCmToMm(parm.xpos) << " " - << convertCmToMm(parm.ypos) << " " << convertCmToMm(parm.zpos); + edm::LogVerbatim("HCalGeom") << "Output Dimensions " << cms::convert2mm(parm.yh1) << " " + << cms::convert2mm(parm.bl1) << " " << cms::convert2mm(parm.tl1) << " " + << cms::convert2mm(parm.yh2) << " " << cms::convert2mm(parm.bl2) << " " + << cms::convert2mm(parm.tl2) << " " << convertRadToDeg(parm.alp) << " " + << convertRadToDeg(parm.theta) << " " << convertRadToDeg(parm.phi) << " Position " + << cms::convert2mm(parm.xpos) << " " << cms::convert2mm(parm.ypos) << " " + << cms::convert2mm(parm.zpos); #endif return parm; } @@ -539,11 +543,11 @@ struct HCalEndcapModuleAlgo { ns.prepend(name), 0.5 * dz, 0, 0, parm.yh1, parm.bl1, parm.tl1, parm.alp, parm.yh1, parm.bl1, parm.tl1, parm.alp); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalEndcapModuleAlgo: " << solid.name() << " Trap made of " << scintMat - << " of dimensions " << convertCmToMm(0.5 * dz) << ", 0, 0, " - << convertCmToMm(parm.yh1) << ", " << convertCmToMm(parm.bl1) << ", " - << convertCmToMm(parm.tl1) << ", " << convertRadToDeg(parm.alp) << ", " - << convertCmToMm(parm.yh1) << ", " << convertCmToMm(parm.bl1) << ", " - << convertCmToMm(parm.tl1) << ", " << convertRadToDeg(parm.alp); + << " of dimensions " << cms::convert2mm(0.5 * dz) << ", 0, 0, " + << cms::convert2mm(parm.yh1) << ", " << cms::convert2mm(parm.bl1) << ", " + << cms::convert2mm(parm.tl1) << ", " << convertRadToDeg(parm.alp) << ", " + << cms::convert2mm(parm.yh1) << ", " << cms::convert2mm(parm.bl1) << ", " + << cms::convert2mm(parm.tl1) << ", " << convertRadToDeg(parm.alp); #endif dd4hep::Volume glog(solid.name(), solid, matter); @@ -584,7 +588,7 @@ struct HCalEndcapModuleAlgo { static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { HCalEndcapModuleAlgo hcalendcapalgo(ctxt, e); - return 1; + return cms::s_executed; } // first argument is the type from the xml file diff --git a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalFibreBundle.cc b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalFibreBundle.cc index c1a70b62f8d33..adcf957454aa0 100644 --- a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalFibreBundle.cc +++ b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalFibreBundle.cc @@ -1,11 +1,11 @@ -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DD4hep/DetFactoryHelper.h" //#define EDM_ML_DEBUG - -using namespace geant_units::operators; +using namespace angle_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); @@ -25,12 +25,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext edm::LogVerbatim("HCalGeom") << "DDHCalFibreBundle: Parent " << args.parentName() << " with " << bundle.size() << " children with prefix " << childPrefix << ", material " << material << " with " << numberPhi << " bundles along phi; width of" - << " mother " << deltaZ << " along Z, " << convertRadToDeg(deltaPhi) + << " mother " << cms::convert2mm(deltaZ) << " along Z, " << convertRadToDeg(deltaPhi) << " along phi and with " << rStart.size() << " different bundle types"; for (unsigned int i = 0; i < areaSection.size(); ++i) - edm::LogVerbatim("HCalGeom") << "DDHCalFibreBundle: Child[" << i << "] Area " << convertCm2ToMm2(areaSection[i]) - << " R at Start " << convertCmToMm(rStart[i]) << " R at End " - << convertCmToMm(rEnd[i]); + edm::LogVerbatim("HCalGeom") << "DDHCalFibreBundle: Child[" << i << "] Area " + << cms::convert2mm(areaSection[i] / dd4hep::mm) << " R at Start " + << cms::convert2mm(rStart[i]) << " R at End " << cms::convert2mm(rEnd[i]); edm::LogVerbatim("HCalGeom") << "DDHCalFibreBundle: NameSpace " << ns.name() << " Tilt Angle " << convertRadToDeg(tilt) << " Bundle type at different positions"; for (unsigned int i = 0; i < bundle.size(); ++i) { @@ -67,9 +67,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext dd4hep::Solid solid = dd4hep::ConeSegment( name, 0.5 * deltaZ, rStart[i] - dStart, rStart[i] + dStart, r0 - dEnd, r0 + dEnd, -0.5 * dPhi, 0.5 * dPhi); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalFibreBundle: Creating a new solid " << name << " a cons with dZ " << deltaZ - << " rStart " << rStart[i] - dStart << ":" << rStart[i] + dStart << " rEnd " - << r0 - dEnd << ":" << r0 + dEnd << " Phi " << convertRadToDeg(-0.5 * dPhi) << ":" + edm::LogVerbatim("HCalGeom") << "DDHCalFibreBundle: Creating a new solid " << name << " a cons with dZ " + << cms::convert2mm(deltaZ) << " rStart " << cms::convert2mm(rStart[i] - dStart) << ":" + << cms::convert2mm(rStart[i] + dStart) << " rEnd " << cms::convert2mm(r0 - dEnd) << ":" + << cms::convert2mm(r0 + dEnd) << " Phi " << convertRadToDeg(-0.5 * dPhi) << ":" << convertRadToDeg(0.5 * dPhi); #endif dd4hep::Volume log(name, solid, matter); @@ -93,7 +94,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext #endif } } - return 1; + return cms::s_executed; } // first argument is the type from the xml file diff --git a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalForwardAlgo.cc b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalForwardAlgo.cc index 4f3feadc55e97..fd6daa8d85fcb 100644 --- a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalForwardAlgo.cc +++ b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalForwardAlgo.cc @@ -1,11 +1,12 @@ -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDSplit.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DD4hep/DetFactoryHelper.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); @@ -23,10 +24,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext std::vector type = args.value >("Type"); //First child #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalForwardAlgo: Cell material " << cellMat << "\tCell Size " - << convertCmToMm(cellDx) << ", " << convertCmToMm(cellDy) << ", " - << convertCmToMm(cellDz) << "\tStarting Y " << convertCmToMm(startY) << "\tChildren " - << childName[0] << ", " << childName[1] << "\n " - << " Cell positioning done for " << number.size() << " times"; + << cms::convert2mm(cellDx) << ", " << cms::convert2mm(cellDy) << ", " + << cms::convert2mm(cellDz) << "\tStarting Y " << cms::convert2mm(startY) << "\tChildren " + << childName[0] << ", " << childName[1] + << "\n Cell positioning done for " << number.size() << " times"; for (unsigned int i = 0; i < number.size(); ++i) edm::LogVerbatim("HCalGeom") << "\t" << i << " Number of children " << size[i] << " occurence " << number[i] << " first child index " << type[i]; @@ -47,15 +48,16 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext dd4hep::Solid solid = dd4hep::Box(ns.prepend(name), dx, cellDy, cellDz); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalForwardAlgo: " << solid.name() << " Box made of " << cellMat << " of Size " - << convertCmToMm(dx) << ", " << convertCmToMm(cellDy) << ", " - << convertCmToMm(cellDz); + << cms::convert2mm(dx) << ", " << cms::convert2mm(cellDy) << ", " + << cms::convert2mm(cellDz); #endif dd4hep::Volume glog(solid.name(), solid, matter); parent.placeVolume(glog, box, dd4hep::Position(0.0, ypos, 0.0)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalForwardAlgo: " << solid.name() << " number " << box << " positioned in " - << parent.name() << " at (0.0, " << convertCmToMm(ypos) << ", 0.0) with no rotation"; + << parent.name() << " at (0.0, " << cms::convert2mm(ypos) + << ", 0.0) with no rotation"; #endif double xpos = -dx + cellDx; @@ -64,8 +66,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext for (int k = 0; k < size[i]; ++k) { glog.placeVolume(ns.volume(childName[indx]), k + 1, dd4hep::Position(xpos, 0.0, 0.0)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalForwardAlgo: " << childName[indx] << " number " << k + 1 - << " positioned in " << glog.name() << " at (" << convertCmToMm(xpos) + edm::LogVerbatim("HCalGeom") << "DDHCalForwardAlgo: " << childName[indx] << " number " << (k + 1) + << " positioned in " << glog.name() << " at (" << cms::convert2mm(xpos) << ", 0,0, 0.0) with no rotation"; #endif xpos += 2 * cellDx; @@ -75,7 +77,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "<<== End of DDHCalForwardAlgo construction"; #endif - return 1; + return cms::s_executed; } // first argument is the type from the xml file diff --git a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalLinearXY.cc b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalLinearXY.cc index a81346e56495e..2c11427d16628 100644 --- a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalLinearXY.cc +++ b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalLinearXY.cc @@ -1,10 +1,9 @@ -#include "DataFormats/Math/interface/GeantUnits.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DD4hep/DetFactoryHelper.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); @@ -27,9 +26,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ++k; } edm::LogVerbatim("HCalGeom") << "DDHCalLinearXY: Number along X/Y " << numberX << "/" << numberY - << "\tDelta along X/Y " << convertCmToMm(deltaX) << "/" << convertCmToMm(deltaY) - << "\tCentre (" << convertCmToMm(centre[0]) << ", " << convertCmToMm(centre[1]) << "," - << convertCmToMm(centre[2]); + << "\tDelta along X/Y " << cms::convert2mm(deltaX) << "/" << cms::convert2mm(deltaY) + << "\tCentre (" << cms::convert2mm(centre[0]) << ", " << cms::convert2mm(centre[1]) + << "," << cms::convert2mm(centre[2]); #endif double xoff = centre[0] - (numberX - 1) * 0.5 * deltaX; double yoff = centre[1] - (numberY - 1) * 0.5 * deltaY; @@ -44,8 +43,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext parent.placeVolume(ns.volume(child), copy, tran); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalLinearXY: " << child << " number " << copy << " positioned in " - << parent.name() << " at (" << convertCmToMm(xoff + i * deltaX) << ", " - << convertCmToMm(yoff + j * deltaY) << ", " << convertCmToMm(centre[2]) + << parent.name() << " at (" << cms::convert2mm((xoff + i * deltaX)) << ", " + << cms::convert2mm((yoff + j * deltaY)) << ", " << cms::convert2mm(centre[2]) << ") with no rotation"; #endif } else { @@ -55,7 +54,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext } } } - return 1; + return cms::s_executed; } // first argument is the type from the xml file diff --git a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalTBCableAlgo.cc b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalTBCableAlgo.cc index 29b7d09efcfb9..c7664fbe99e00 100644 --- a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalTBCableAlgo.cc +++ b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalTBCableAlgo.cc @@ -1,11 +1,11 @@ -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DD4hep/DetFactoryHelper.h" //#define EDM_ML_DEBUG - -using namespace geant_units::operators; +using namespace angle_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); @@ -51,14 +51,14 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext std::string idName = args.value("MotherName"); //Name of the "parent" volume. #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalTBCableAlgo: General material " << genMat << "\tSectors " << nsectors << ", " - << nsectortot << "\tHalves " << nhalf << "\tRin " << convertCmToMm(rin); + << nsectortot << "\tHalves " << nhalf << "\tRin " << cms::convert2mm(rin); for (unsigned int i = 0; i < theta.size(); i++) edm::LogVerbatim("HCalGeom") << "\t" << i << " Theta " << convertRadToDeg(theta[i]) << " rmax " - << convertCmToMm(rmax[i]) << " zoff " << convertCmToMm(zoff[i]); - edm::LogVerbatim("HCalGeom") << "\tCable mockup made of " << absMat << "\tThick " << convertCmToMm(thick) - << "\tLength and width " << convertCmToMm(length1) << ", " << convertCmToMm(width1) - << " and " << convertCmToMm(length2) << ", " << convertCmToMm(width2) << " Gap " - << convertCmToMm(gap2); + << cms::convert2mm(rmax[i]) << " zoff " << cms::convert2mm(zoff[i]); + edm::LogVerbatim("HCalGeom") << "\tCable mockup made of " << absMat << "\tThick " << cms::convert2mm(thick) + << "\tLength and width " << cms::convert2mm(length1) << ", " << cms::convert2mm(width1) + << " and " << cms::convert2mm(length2) << ", " << cms::convert2mm(width2) << " Gap " + << cms::convert2mm(gap2); edm::LogVerbatim("HCalGeom") << "DDHCalTBCableAlgo: Parent " << args.parentName() << " idName " << idName << " NameSpace " << ns.name() << " for solids"; #endif @@ -83,8 +83,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext << nsectortot << " sectors from " << convertRadToDeg(-alpha) << " to " << convertRadToDeg(-alpha + dphi) << " and with " << pgonZ.size() << " sections"; for (unsigned int i = 0; i < pgonZ.size(); i++) - edm::LogVerbatim("HCalGeom") << "\t\tZ = " << convertCmToMm(pgonZ[i]) << "\tRmin = " << convertCmToMm(pgonRmin[i]) - << "\tRmax = " << convertCmToMm(pgonRmax[i]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZ[i]) + << "\tRmin = " << cms::convert2mm(pgonRmin[i]) + << "\tRmax = " << cms::convert2mm(pgonRmax[i]); #endif dd4hep::Volume parent = ns.volume(args.parentName()); @@ -112,8 +113,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext << " with 1 sector from " << convertRadToDeg(-alpha) << " to " << convertRadToDeg(alpha) << " and with " << pgonZ.size() << " sections"; for (unsigned int i = 0; i < pgonZ.size(); i++) - edm::LogVerbatim("HCalGeom") << "\t\tZ = " << convertCmToMm(pgonZ[i]) << "\tRmin = " << convertCmToMm(pgonRmin[i]) - << "\tRmax = " << convertCmToMm(pgonRmax[i]); + edm::LogVerbatim("HCalGeom") << "\t\tZ = " << cms::convert2mm(pgonZ[i]) + << "\tRmin = " << cms::convert2mm(pgonRmin[i]) + << "\tRmax = " << cms::convert2mm(pgonRmax[i]); #endif for (int ii = 0; ii < nsectortot; ++ii) { @@ -146,9 +148,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext dd4hep::Volume glog(solid.name(), solid, matter); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalTBCableAlgo: " << solid.name() << " Trap made of " << genMat - << " of dimensions " << convertCmToMm(dz) << ", 0, 0, " << convertCmToMm(dy) << ", " - << convertCmToMm(dx1) << ", " << convertCmToMm(dx1) << ", 0, " << convertCmToMm(dy) - << ", " << convertCmToMm(dx2) << ", " << convertCmToMm(dx2) << ", 0"; + << " of dimensions " << cms::convert2mm(dz) << ", 0, 0, " << cms::convert2mm(dy) << ", " + << cms::convert2mm(dx1) << ", " << cms::convert2mm(dx1) << ", 0, " << cms::convert2mm(dy) + << ", " << cms::convert2mm(dx2) << ", " << cms::convert2mm(dx2) << ", 0"; #endif rot = cms::makeRotation3D(90._deg, 270._deg, (180._deg - theta[2]), 0, (90._deg - theta[2]), 0); @@ -161,8 +163,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext seclogic.placeVolume(glog, 1, dd4hep::Transform3D(rot, r1)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalTBCableAlgo: " << glog.name() << " number 1 positioned in " << seclogic.name() - << " at (" << convertCmToMm(0.5 * (rinl + routl)) << ", 0, " - << convertCmToMm(0.5 * (pgonZ[1] + pgonZ[2])) << " with rotation: " << rot; + << " at (" << cms::convert2mm(0.5 * (rinl + routl)) << ", 0, " + << cms::convert2mm(0.5 * (pgonZ[1] + pgonZ[2])) << " with rotation: " << rot; #endif //Now the cable of type 1 name = idName + "Cable1"; @@ -173,8 +175,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext dd4hep::Volume cablog1(solid.name(), solid, absmatter); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalTBCableAlgo: " << solid.name() << " Box made of " << absMat << " of dimension " - << convertCmToMm(0.5 * width1) << ", " << convertCmToMm(0.5 * thick) << ", " - << convertCmToMm(0.5 * length1); + << cms::convert2mm(0.5 * width1) << ", " << cms::convert2mm(0.5 * thick) << ", " + << cms::convert2mm(0.5 * length1); #endif dd4hep::Rotation3D rot2 = cms::makeRotation3D((90._deg + phi), 0.0, 90._deg, 90._deg, phi, 0.0); @@ -186,7 +188,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext glog.placeVolume(cablog1, 1, dd4hep::Transform3D(rot2, r2)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalTBCableAlgo: " << cablog1.name() << " number 1 positioned in " << glog.name() - << " at (" << convertCmToMm(xmid - 0.5 * width1 * cos(phi)) + << " at (" << cms::convert2mm(xmid - 0.5 * width1 * cos(phi)) << ", 0, 0) with rotation: " << rot2; #endif dd4hep::Rotation3D rot3 = cms::makeRotation3D((90._deg - phi), 0, 90._deg, 90._deg, -phi, 0); @@ -198,7 +200,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext glog.placeVolume(cablog1, 2, dd4hep::Transform3D(rot3, r3)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalTBCableAlgo: " << cablog1.name() << " number 2 positioned in " << glog.name() - << " at (" << convertCmToMm(xmid - 0.5 * width1 * cos(phi)) + << " at (" << cms::convert2mm(xmid - 0.5 * width1 * cos(phi)) << ", 0, 0) with rotation: " << rot3; #endif //Now the cable of type 2 @@ -207,24 +209,24 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext dd4hep::Volume cablog2(solid.name(), solid, absmatter); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalTBCableAlgo: " << solid.name() << " Box made of " << absMat << " of dimension " - << convertCmToMm(0.5 * width2) << ", " << convertCmToMm(0.5 * thick) << ", " - << convertCmToMm(0.5 * length2); + << cms::convert2mm(0.5 * width2) << ", " << cms::convert2mm(0.5 * thick) << ", " + << cms::convert2mm(0.5 * length2); #endif glog.placeVolume(cablog2, 1, dd4hep::Position(0.5 * (width2 + gap2), 0, 0)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalTBCableAlgo: " << cablog2.name() << " number 1 positioned in " << glog.name() - << " at (" << convertCmToMm(0.5 * (width2 + gap2)) << ", 0, 0) with no rotation"; + << " at (" << cms::convert2mm(0.5 * (width2 + gap2)) << ", 0, 0) with no rotation"; #endif glog.placeVolume(cablog2, 2, dd4hep::Position(-0.5 * (width2 + gap2), 0, 0)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalTBCableAlgo: " << cablog2.name() << " number 2 positioned in " << glog.name() - << " at " << convertCmToMm(-0.5 * (width2 + gap2)) << ", 0, 0) with no rotation"; + << " at " << cms::convert2mm(-0.5 * (width2 + gap2)) << ", 0, 0) with no rotation"; edm::LogVerbatim("HCalGeom") << "<<== End of DDHCalTBCableAlgo construction"; #endif - return 1; + return cms::s_executed; } // first argument is the type from the xml file diff --git a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalTBZposAlgo.cc b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalTBZposAlgo.cc index 7cf68f17a867f..c4f15b446c123 100644 --- a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalTBZposAlgo.cc +++ b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalTBZposAlgo.cc @@ -1,10 +1,11 @@ #include "DD4hep/DetFactoryHelper.h" -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); @@ -23,13 +24,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext if (strchr(childName.c_str(), NAMESPACE_SEP) == nullptr) childName = idNameSpace + childName; #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalTBZposAlgo: Parameters for position" - << "ing--" - << " Eta " << eta << "\tTheta " << convertRadToDeg(theta) << "\tShifts " - << convertCmToMm(shiftX) << ", " << convertCmToMm(shiftY) << " along x, y " - << "axes; \tZoffest " << convertCmToMm(zoffset) << "\tRadial Distance " - << convertCmToMm(dist) << "\tTilt angle " << convertRadToDeg(tilt) << "\tcopyNumber " - << copyNumber; + edm::LogVerbatim("HCalGeom") << "DDHCalTBZposAlgo: Parameters for positioning-- Eta " << eta << "\tTheta " + << convertRadToDeg(theta) << "\tShifts " << cms::convert2mm(shiftX) << ", " + << cms::convert2mm(shiftY) << " along x, y axes; \tZoffest " << cms::convert2mm(zoffset) + << "\tRadial Distance " << cms::convert2mm(dist) << "\tTilt angle " + << convertRadToDeg(tilt) << "\tcopyNumber " << copyNumber; edm::LogVerbatim("HCalGeom") << "DDHCalTBZposAlgo: Parent " << args.parentName() << "\tChild " << childName << " NameSpace " << idNameSpace; #endif @@ -54,11 +53,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext mother.placeVolume(child, copyNumber, dd4hep::Transform3D(rot, tran)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalTBZposAlgo: " << child.name() << " number " << copyNumber << " positioned in " - << mother.name() << " at (" << convertCmToMm(x) << ", " << convertCmToMm(y) << ", " - << convertCmToMm(z) << ") with " << rot; + << mother.name() << " at (" << cms::convert2mm(x) << ", " << cms::convert2mm(y) << ", " + << cms::convert2mm(z) << ") with " << rot; #endif - return 1; + return cms::s_executed; } // first argument is the type from the xml file diff --git a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalTestBeamAlgo.cc b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalTestBeamAlgo.cc index de63d970585db..c63d6c60b41da 100644 --- a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalTestBeamAlgo.cc +++ b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalTestBeamAlgo.cc @@ -1,10 +1,11 @@ #include "DD4hep/DetFactoryHelper.h" -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); @@ -20,12 +21,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext std::string childName = args.value("ChildName"); //Children name double dz = args.value("Dz"); //Half length along z of the volume to be placed #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalTestBeamAlgo: Parameters for position" - << "ing--" - << " Eta " << eta << "\tPhi " << convertRadToDeg(phi) << "\tTheta " - << convertRadToDeg(theta) << "\tDistance " << convertCmToMm(distance) << "/" - << convertCmToMm(distanceZ) << "/" << convertCmToMm(dist) << "\tDz " << convertCmToMm(dz) - << "\tcopyNumber " << copyNumber; + edm::LogVerbatim("HCalGeom") << "DDHCalTestBeamAlgo: Parameters for positioning-- Eta " << eta << "\tPhi " + << convertRadToDeg(phi) << "\tTheta " << convertRadToDeg(theta) << "\tDistance " + << cms::convert2mm(distance) << "/" << cms::convert2mm(distanceZ) << "/" + << cms::convert2mm(dist) << "\tDz " << cms::convert2mm(dz) << "\tcopyNumber " + << copyNumber; edm::LogVerbatim("HCalGeom") << "DDHCalTestBeamAlgo:Parent " << args.parentName() << "\tChild " << childName << " NameSpace " << ns.name(); #endif @@ -63,19 +63,19 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext parent.placeVolume(child, copyNumber, dd4hep::Transform3D(rotation, tran)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalTestBeamAlgo: " << child.name() << " number " << copyNumber - << " positioned in " << parent.name() << " at (" << convertCmToMm(xpos) << ", " - << convertCmToMm(ypos) << ", " << convertCmToMm(zpos) << ") with rotation: " << rotation; + << " positioned in " << parent.name() << " at (" << cms::convert2mm(xpos) << ", " + << cms::convert2mm(ypos) << ", " << cms::convert2mm(zpos) + << ") with rotation: " << rotation; #endif xpos = (dist - dz) * sin(theta) * cos(phi); ypos = (dist - dz) * sin(theta) * sin(phi); zpos = (dist - dz) * cos(theta); - edm::LogInfo("HCalGeom") << "DDHCalTestBeamAlgo: Suggested Beam position " - << "(" << convertCmToMm(xpos) << ", " << convertCmToMm(ypos) << ", " << convertCmToMm(zpos) - << ") and (dist, eta, phi) = (" << convertCmToMm(dist - dz) << ", " << eta << ", " << phi - << ")"; + edm::LogInfo("HCalGeom") << "DDHCalTestBeamAlgo: Suggested Beam position (" << cms::convert2mm(xpos) << ", " + << cms::convert2mm(ypos) << ", " << cms::convert2mm(zpos) << ") and (dist, eta, phi) = (" + << cms::convert2mm(dist - dz) << ", " << eta << ", " << phi << ")"; - return 1; + return cms::s_executed; } // first argument is the type from the xml file diff --git a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalXtalAlgo.cc b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalXtalAlgo.cc index 808feeb1b9b2a..1cf6112c4dcf3 100644 --- a/Geometry/HcalAlgo/plugins/dd4hep/DDHCalXtalAlgo.cc +++ b/Geometry/HcalAlgo/plugins/dd4hep/DDHCalXtalAlgo.cc @@ -1,10 +1,11 @@ #include "DD4hep/DetFactoryHelper.h" -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" //#define EDM_ML_DEBUG -using namespace geant_units::operators; +using namespace angle_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); @@ -20,10 +21,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext std::vector names = args.value >("Names"); //Names for rotation matrices std::string idName = args.value("ChildName"); //Children name #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HCalGeom") << "DDHCalXtalAlgo::Parameters for positioning:" - << " Axis " << iaxis << "\tRadius " << convertCmToMm(radius) << "\tOffset " << offset - << "\tDx " << convertCmToMm(dx) << "\tDz " << convertCmToMm(dz) << "\tAngWidth " - << convertRadToDeg(angwidth) << "\tNumbers " << names.size(); + edm::LogVerbatim("HCalGeom") << "DDHCalXtalAlgo::Parameters for positioning: Axis " << iaxis << "\tRadius " + << cms::convert2mm(radius) << "\tOffset " << offset << "\tDx " << cms::convert2mm(dx) + << "\tDz " << cms::convert2mm(dz) << "\tAngWidth " << convertRadToDeg(angwidth) + << "\tNumbers " << names.size(); for (unsigned int i = 0; i < names.size(); i++) edm::LogVerbatim("HCalGeom") << "\tnames[" << i << "] = " << names[i]; edm::LogVerbatim("HCalGeom") << "DDHCalXtalAlgo: Parent " << args.parentName() << "\tChild " << idName @@ -70,11 +71,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext parent.placeVolume(glog, i + 1, dd4hep::Transform3D(rotation, tran)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HCalGeom") << "DDHCalXtalAlgo: " << glog.name() << " number " << i + 1 << " positioned in " - << parent.name() << " at " << tran << " with " << rotation; + << parent.name() << " at (" << cms::convert2mm(pos[0]) << "," + << cms::convert2mm(pos[1]) << "," << cms::convert2mm(pos[2]) << " with " << rotation; #endif } - return 1; + return cms::s_executed; } // first argument is the type from the xml file diff --git a/Geometry/HcalAlgo/test/python/dumpForwardShield_cfg.py b/Geometry/HcalAlgo/test/python/dumpForwardShield_cfg.py index 4dc2c338b028a..897a69f1dfd5f 100644 --- a/Geometry/HcalAlgo/test/python/dumpForwardShield_cfg.py +++ b/Geometry/HcalAlgo/test/python/dumpForwardShield_cfg.py @@ -6,9 +6,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HcalAlgo/test/python/dumpHBGeom_cfg.py b/Geometry/HcalAlgo/test/python/dumpHBGeom_cfg.py index 27219c4b802c0..b9e2a8f1bc6e4 100644 --- a/Geometry/HcalAlgo/test/python/dumpHBGeom_cfg.py +++ b/Geometry/HcalAlgo/test/python/dumpHBGeom_cfg.py @@ -6,9 +6,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HcalAlgo/test/python/dumpHEPhase0Geom_cfg.py b/Geometry/HcalAlgo/test/python/dumpHEPhase0Geom_cfg.py index a0907dfdd90ee..20d7eefad9cc8 100644 --- a/Geometry/HcalAlgo/test/python/dumpHEPhase0Geom_cfg.py +++ b/Geometry/HcalAlgo/test/python/dumpHEPhase0Geom_cfg.py @@ -6,9 +6,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HcalAlgo/test/python/dumpHEPhase1Geom_cfg.py b/Geometry/HcalAlgo/test/python/dumpHEPhase1Geom_cfg.py index 60f0b1b030cdb..819757845f850 100644 --- a/Geometry/HcalAlgo/test/python/dumpHEPhase1Geom_cfg.py +++ b/Geometry/HcalAlgo/test/python/dumpHEPhase1Geom_cfg.py @@ -6,9 +6,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HcalAlgo/test/python/dumpHFGeom_cfg.py b/Geometry/HcalAlgo/test/python/dumpHFGeom_cfg.py index 98a441900f19e..71c483de8839a 100644 --- a/Geometry/HcalAlgo/test/python/dumpHFGeom_cfg.py +++ b/Geometry/HcalAlgo/test/python/dumpHFGeom_cfg.py @@ -6,9 +6,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HcalAlgo/test/python/dumpHOGeom_cfg.py b/Geometry/HcalAlgo/test/python/dumpHOGeom_cfg.py index 82471ad5a8954..c60a91376ad11 100644 --- a/Geometry/HcalAlgo/test/python/dumpHOGeom_cfg.py +++ b/Geometry/HcalAlgo/test/python/dumpHOGeom_cfg.py @@ -6,9 +6,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HcalAlgo/test/python/dumpHcalXtal_cfg.py b/Geometry/HcalAlgo/test/python/dumpHcalXtal_cfg.py index 97a9eb28cc689..4c81a427ac82c 100644 --- a/Geometry/HcalAlgo/test/python/dumpHcalXtal_cfg.py +++ b/Geometry/HcalAlgo/test/python/dumpHcalXtal_cfg.py @@ -6,9 +6,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HcalAlgo/test/python/dumpTBCable_cfg.py b/Geometry/HcalAlgo/test/python/dumpTBCable_cfg.py index ed5e5db35dd3e..8ab99f0c6324b 100644 --- a/Geometry/HcalAlgo/test/python/dumpTBCable_cfg.py +++ b/Geometry/HcalAlgo/test/python/dumpTBCable_cfg.py @@ -6,9 +6,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HcalAlgo/test/python/dumpTBHOGeom_cfg.py b/Geometry/HcalAlgo/test/python/dumpTBHOGeom_cfg.py index c39c55660571f..0aa77c9839d1d 100644 --- a/Geometry/HcalAlgo/test/python/dumpTBHOGeom_cfg.py +++ b/Geometry/HcalAlgo/test/python/dumpTBHOGeom_cfg.py @@ -6,9 +6,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HcalAlgo/test/python/dumpTestBeam_cfg.py b/Geometry/HcalAlgo/test/python/dumpTestBeam_cfg.py index 400cf1b3bdcb8..5c15dbd53bb20 100644 --- a/Geometry/HcalAlgo/test/python/dumpTestBeam_cfg.py +++ b/Geometry/HcalAlgo/test/python/dumpTestBeam_cfg.py @@ -6,9 +6,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HcalAlgo/test/python/testForwardShield_cfg.py b/Geometry/HcalAlgo/test/python/testForwardShield_cfg.py index 9a1361c5551c4..231d442ea62fc 100644 --- a/Geometry/HcalAlgo/test/python/testForwardShield_cfg.py +++ b/Geometry/HcalAlgo/test/python/testForwardShield_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.HCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HcalAlgo/data/cms-test-ddhcalForwardShield-algorithm.xml'), diff --git a/Geometry/HcalAlgo/test/python/testHBGeom_cfg.py b/Geometry/HcalAlgo/test/python/testHBGeom_cfg.py index 86aee05bbf1fe..6a09066f84c36 100644 --- a/Geometry/HcalAlgo/test/python/testHBGeom_cfg.py +++ b/Geometry/HcalAlgo/test/python/testHBGeom_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.HCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HcalAlgo/data/cms-test-ddhcalHB-algorithm.xml'), diff --git a/Geometry/HcalAlgo/test/python/testHEPhase0Geom_cfg.py b/Geometry/HcalAlgo/test/python/testHEPhase0Geom_cfg.py index 0dd6f6b64b57e..68b40b225ebf3 100644 --- a/Geometry/HcalAlgo/test/python/testHEPhase0Geom_cfg.py +++ b/Geometry/HcalAlgo/test/python/testHEPhase0Geom_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.HCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HcalAlgo/data/cms-test-ddhcalHEPhase0-algorithm.xml'), diff --git a/Geometry/HcalAlgo/test/python/testHEPhase1Geom_cfg.py b/Geometry/HcalAlgo/test/python/testHEPhase1Geom_cfg.py index 5f4cf1297aaf3..ebbaad4abbd78 100644 --- a/Geometry/HcalAlgo/test/python/testHEPhase1Geom_cfg.py +++ b/Geometry/HcalAlgo/test/python/testHEPhase1Geom_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.HCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HcalAlgo/data/cms-test-ddhcalHEPhase1-algorithm.xml'), diff --git a/Geometry/HcalAlgo/test/python/testHFGeom_cfg.py b/Geometry/HcalAlgo/test/python/testHFGeom_cfg.py index 9b60434c0fd10..0caeb30a25558 100644 --- a/Geometry/HcalAlgo/test/python/testHFGeom_cfg.py +++ b/Geometry/HcalAlgo/test/python/testHFGeom_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.HCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HcalAlgo/data/cms-test-ddhcalHF-algorithm.xml'), diff --git a/Geometry/HcalAlgo/test/python/testHOGeom_cfg.py b/Geometry/HcalAlgo/test/python/testHOGeom_cfg.py index 046efe736ff89..747827472af31 100644 --- a/Geometry/HcalAlgo/test/python/testHOGeom_cfg.py +++ b/Geometry/HcalAlgo/test/python/testHOGeom_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.HCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HcalAlgo/data/cms-test-ddhcalHO-algorithm.xml'), diff --git a/Geometry/HcalAlgo/test/python/testHcalXtal_cfg.py b/Geometry/HcalAlgo/test/python/testHcalXtal_cfg.py index ca38d607eab8b..8520a7952e95c 100644 --- a/Geometry/HcalAlgo/test/python/testHcalXtal_cfg.py +++ b/Geometry/HcalAlgo/test/python/testHcalXtal_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.HCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HcalAlgo/data/cms-test-ddhcalXtal-algorithm.xml'), diff --git a/Geometry/HcalAlgo/test/python/testTBCable_cfg.py b/Geometry/HcalAlgo/test/python/testTBCable_cfg.py index e9ce79ddd6d20..d21ccd084cca5 100644 --- a/Geometry/HcalAlgo/test/python/testTBCable_cfg.py +++ b/Geometry/HcalAlgo/test/python/testTBCable_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.HCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HcalAlgo/data/cms-test-ddhcalTBCable-algorithm.xml'), diff --git a/Geometry/HcalAlgo/test/python/testTBHOGeom_cfg.py b/Geometry/HcalAlgo/test/python/testTBHOGeom_cfg.py index db1d5fdb0938a..8545dcdb12499 100644 --- a/Geometry/HcalAlgo/test/python/testTBHOGeom_cfg.py +++ b/Geometry/HcalAlgo/test/python/testTBHOGeom_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.HCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HcalAlgo/data/cms-test-ddhcalTBZpos-algorithm.xml'), diff --git a/Geometry/HcalAlgo/test/python/testTestBeam_cfg.py b/Geometry/HcalAlgo/test/python/testTestBeam_cfg.py index 4ef6318f4fd82..4e5d6124eb476 100644 --- a/Geometry/HcalAlgo/test/python/testTestBeam_cfg.py +++ b/Geometry/HcalAlgo/test/python/testTestBeam_cfg.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.HCalGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/HcalAlgo/data/cms-test-ddhcalTestBeam-algorithm.xml'), diff --git a/Geometry/HcalCommonData/data/hcalRecNumbering/hfshower/v1/hcalRecNumbering.xml b/Geometry/HcalCommonData/data/hcalRecNumbering/hfshower/v1/hcalRecNumbering.xml new file mode 100644 index 0000000000000..a6f280ac3cbe1 --- /dev/null +++ b/Geometry/HcalCommonData/data/hcalRecNumbering/hfshower/v1/hcalRecNumbering.xml @@ -0,0 +1,44 @@ + + + + + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4 + + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4 + + + 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 + + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + + + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 + + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 + + + 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 + + + + + + + + + + + + diff --git a/Geometry/HcalCommonData/data/hcalSimNumbering/2021/v1/hcalSimNumbering.xml b/Geometry/HcalCommonData/data/hcalSimNumbering/2021/v1/hcalSimNumbering.xml new file mode 100644 index 0000000000000..be13829f88ba7 --- /dev/null +++ b/Geometry/HcalCommonData/data/hcalSimNumbering/2021/v1/hcalSimNumbering.xml @@ -0,0 +1,101 @@ + + + + + + 0.0*deg, 0.0*deg, 0.0*deg, 10.0*deg, 10.0*deg + + + 0.000, 0.087, 0.174, 0.261, 0.348, 0.435, 0.522, 0.609, 0.696, + 0.783, 0.870, 0.957, 1.044, 1.131, 1.218, 1.305, 1.392, 1.479, + 1.566, 1.653, 1.740, 1.830, 1.930, 2.043, 2.172, 2.322, 2.500, + 2.650, 2.868, 3.000 + + + 12.50*cm, 16.90*cm, 20.10*cm, 24.00*cm, 28.60*cm, 34.00*cm, + 40.60*cm, 48.30*cm, 57.60*cm, 68.60*cm, 81.80*cm, 97.50*cm, + 116.20*cm, 130.00*cm + + + 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, + 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, + 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 10.0*deg, + 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, + 10.0*deg, 10.0*deg + + + 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, + 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, 20.0*deg, + 20.0*deg + + + 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4 + + + 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 + + + 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 + + + 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5 + + + 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6 + + + 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7 + + + 1, 16, 29, 1 + + + 16, 29, 41, 15 + + + 4, 7, 4, 4 + + + 1.392, 3.000, 5.500, 1.305 + + + 22.0*cm, 165.0*cm, 30.0*cm, 0.0*cm, 1115.0*cm, 0.375*cm, + 1137.0*cm + + + 15, 29, 4, 10, 5, 2, 4, 18, 19, 11, 12, 13, 14, 3, 4, 3, 1, 0 + + + 0.5, 1.2 + + + 117.0, 117.0, 117.0, 217.0 + + + 0, 0, 0, 0 + + + 178.0, 178.0, 178.0, 178.0, 178.0, 178.0, 178.0 + + + 0, 0, 0, 0, 0, 0, 0 + + + 2.840, 2.090, 2.840, 2.090 + + + 0, 0, 0, 0 + + + + + + + + + + + + + + diff --git a/Geometry/HcalCommonData/data/hcalSimNumbering/hfshower/v1/hcalSimNumbering.xml b/Geometry/HcalCommonData/data/hcalSimNumbering/hfshower/v1/hcalSimNumbering.xml new file mode 100644 index 0000000000000..41f2623f0b6fa --- /dev/null +++ b/Geometry/HcalCommonData/data/hcalSimNumbering/hfshower/v1/hcalSimNumbering.xml @@ -0,0 +1,101 @@ + + + + + + 0.0*deg, 0.0*deg, 0.0*deg, 10.0*deg, 10.0*deg + + + 0.000, 0.087, 0.174, 0.261, 0.348, 0.435, 0.522, 0.609, 0.696, + 0.783, 0.870, 0.957, 1.044, 1.131, 1.218, 1.305, 1.392, 1.479, + 1.566, 1.653, 1.740, 1.830, 1.930, 2.043, 2.172, 2.322, 2.500, + 2.650, 2.868, 3.000 + + + 12.50*cm, 16.90*cm, 20.10*cm, 24.00*cm, 28.60*cm, 34.00*cm, + 40.60*cm, 48.30*cm, 57.60*cm, 68.60*cm, 81.80*cm, 97.50*cm, + 116.20*cm, 130.00*cm + + + 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, + 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, + 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 5.0*deg, 10.0*deg, + 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, + 10.0*deg, 10.0*deg + + + 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, + 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, 10.0*deg, 20.0*deg, + 20.0*deg + + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4 + + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4 + + + 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 + + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + + + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 + + + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 + + + 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 + + + 1, 16, 29, 1 + + + 16, 29, 41, 15 + + + 2, 3, 2, 4 + + + 1.392, 3.000, 5.500, 1.305 + + + 22.0*cm, 165.0*cm, 30.0*cm, 0.0*cm, 1115.0*cm, 0.375*cm, + 1137.0*cm + + + 15, 29, 4, 10, 5, 2, 4, 18, 19, 11, 12, 13, 14 + + + 0.5, 0.5 + + + 117.0, 117.0, 117.0, 217.0 + + + 0, 0, 0, 0 + + + 178.0, 178.0, 178.0, 0.000 + + + 0, 0, 0, 0 + + + 2.840, 2.090, 0.000, 0.000 + + + 0, 0, 0, 0 + + + + + + + + + + + diff --git a/Geometry/HcalCommonData/data/hcalforwardshower/v2/hcalforwardshower.xml b/Geometry/HcalCommonData/data/hcalforwardshower/v2/hcalforwardshower.xml new file mode 100644 index 0000000000000..46bdf32e54983 --- /dev/null +++ b/Geometry/HcalCommonData/data/hcalforwardshower/v2/hcalforwardshower.xml @@ -0,0 +1,311 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hcalforwardshower:HFWedge + + + + + + 0., 0., 182.5*cm + + + + + + hcalforwardshower:HFBox + + + + + + 0., 0., 0. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml b/Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml new file mode 100644 index 0000000000000..d896d6558ba31 --- /dev/null +++ b/Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml @@ -0,0 +1,1363 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HcalCommonData/data/hcalsens/2021/v1/hcalsenspmf.xml b/Geometry/HcalCommonData/data/hcalsens/2021/v1/hcalsenspmf.xml new file mode 100644 index 0000000000000..bb43b294e47a2 --- /dev/null +++ b/Geometry/HcalCommonData/data/hcalsens/2021/v1/hcalsenspmf.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HcalCommonData/interface/HcalGeomParameters.h b/Geometry/HcalCommonData/interface/HcalGeomParameters.h index d9c323e8259cd..912486a1ea59f 100644 --- a/Geometry/HcalCommonData/interface/HcalGeomParameters.h +++ b/Geometry/HcalCommonData/interface/HcalGeomParameters.h @@ -20,6 +20,7 @@ #include "DetectorDescription/DDCMS/interface/DDCompactView.h" #include "Geometry/HcalCommonData/interface/HcalCellType.h" #include "DataFormats/HcalDetId/interface/HcalSubdetector.h" +#include "DD4hep/DD4hepUnits.h" class HcalParameters; @@ -29,10 +30,10 @@ class HcalGeomParameters { static constexpr double k_ScaleToDDD = 10.0; static constexpr double k_ScaleFromDDDToG4 = 1.0; static constexpr double k_ScaleToDDDFromG4 = 1.0; - static constexpr double k_ScaleFromDD4Hep = 1.0; - static constexpr double k_ScaleToDD4Hep = 1.0; - static constexpr double k_ScaleFromDD4HepToG4 = 10.0; - static constexpr double k_ScaleToDD4HepFromG4 = 0.1; + static constexpr double k_ScaleFromDD4Hep = (1.0 / dd4hep::cm); + static constexpr double k_ScaleToDD4Hep = dd4hep::cm; + static constexpr double k_ScaleFromDD4HepToG4 = (1.0 / dd4hep::mm); + static constexpr double k_ScaleToDD4HepFromG4 = dd4hep::mm; HcalGeomParameters() = default; diff --git a/Geometry/HcalCommonData/interface/HcalSimParametersFromDD.h b/Geometry/HcalCommonData/interface/HcalSimParametersFromDD.h index f848b5288922c..abcc2efa1844b 100644 --- a/Geometry/HcalCommonData/interface/HcalSimParametersFromDD.h +++ b/Geometry/HcalCommonData/interface/HcalSimParametersFromDD.h @@ -26,6 +26,9 @@ class HcalSimParametersFromDD { std::vector getNames(DDFilteredView& fv); std::vector getNames(cms::DDFilteredView& fv); std::vector getDDDArray(const std::string& str, const DDsvalues_type& sv, int& nmin); + + static constexpr double k_ScaleFromDD4Hep = (1.0 / dd4hep::mm); + static constexpr double k_ScaleFromDD4HepInv = dd4hep::mm; }; #endif diff --git a/Geometry/HcalCommonData/python/testPhase1GeometryXML_cfi.py b/Geometry/HcalCommonData/python/testPhase1GeometryXML_cfi.py index 1ecd2bcd1769d..d139fe59037fc 100644 --- a/Geometry/HcalCommonData/python/testPhase1GeometryXML_cfi.py +++ b/Geometry/HcalCommonData/python/testPhase1GeometryXML_cfi.py @@ -1,59 +1,60 @@ import FWCore.ParameterSet.Config as cms -## 2015 + new phase 1 pixel detector +# This config is for 2021Geometry XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", geomXMLFiles = cms.vstring( - 'Geometry/CMSCommonData/data/materials.xml', + 'Geometry/CMSCommonData/data/materials/2021/v2/materials.xml', + 'Geometry/TrackerCommonData/data/trackermaterial/2021/v1/trackermaterial.xml', 'Geometry/CMSCommonData/data/rotations.xml', - 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', - 'Geometry/CMSCommonData/data/cms/2019/v2/cms.xml', + 'Geometry/CMSCommonData/data/extend/v3/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2021/v3/cms.xml', 'Geometry/CMSCommonData/data/cmsMother.xml', 'Geometry/CMSCommonData/data/eta3/etaMax.xml', 'Geometry/CMSCommonData/data/cmsTracker.xml', 'Geometry/CMSCommonData/data/caloBase/2017/v1/caloBase.xml', 'Geometry/CMSCommonData/data/cmsCalo.xml', - 'Geometry/CMSCommonData/data/muonBase/2017/v1/muonBase.xml', + 'Geometry/CMSCommonData/data/muonBase/2018/v1/muonBase.xml', 'Geometry/CMSCommonData/data/cmsMuon.xml', 'Geometry/CMSCommonData/data/mgnt.xml', - 'Geometry/CMSCommonData/data/beampipe/2026/v1/beampipe.xml', - 'Geometry/CMSCommonData/data/cmsBeam/2026/v1/cmsBeam.xml', + 'Geometry/CMSCommonData/data/beampipe/2021/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam/2021/v1/cmsBeam.xml', 'Geometry/CMSCommonData/data/muonMB.xml', 'Geometry/CMSCommonData/data/muonMagnet.xml', - 'Geometry/CMSCommonData/data/cavern/2017/v2/cavern.xml', - 'Geometry/CMSCommonData/data/cavernData/2017/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml', 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml', 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/pixfwdMaterials/2021/v2/pixfwdMaterials.xml', 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdCylinder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwd.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdDisks.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdSupportRingParameters.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDiskZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDiskZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDiskZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDiskZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeInnerZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeInnerZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeOuterZplus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixfwdbladeOuterZminus.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarmaterial.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarladder.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer0.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer1.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer2.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer3.xml', - 'Geometry/TrackerCommonData/data/PhaseI/pixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdSupportRingParameters.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdInnerDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdOuterDiskZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeInnerZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZplus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdbladeOuterZminus.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/v2/pixbar.xml', 'Geometry/TrackerCommonData/data/Run2/trackerpatchpannel.xml', 'Geometry/TrackerCommonData/data/Run2/trackerpixelnose.xml', - 'Geometry/TrackerCommonData/data/tibtidcommonmaterial.xml', - 'Geometry/TrackerCommonData/data/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/tibtidcommonmaterial/2021/v1/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/tibmaterial/2021/v1/tibmaterial.xml', 'Geometry/TrackerCommonData/data/tibmodpar.xml', 'Geometry/TrackerCommonData/data/tibmodule0.xml', 'Geometry/TrackerCommonData/data/tibmodule0a.xml', @@ -86,7 +87,7 @@ 'Geometry/TrackerCommonData/data/tiblayer2.xml', 'Geometry/TrackerCommonData/data/tiblayer3.xml', 'Geometry/TrackerCommonData/data/tib.xml', - 'Geometry/TrackerCommonData/data/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/tidmaterial/2021/v1/tidmaterial.xml', 'Geometry/TrackerCommonData/data/tidmodpar.xml', 'Geometry/TrackerCommonData/data/tidmodule0.xml', 'Geometry/TrackerCommonData/data/tidmodule0r.xml', @@ -109,7 +110,7 @@ 'Geometry/TrackerCommonData/data/tibtidservices.xml', 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', - 'Geometry/TrackerCommonData/data/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/tobmaterial/2021/v1/tobmaterial.xml', 'Geometry/TrackerCommonData/data/tobmodpar.xml', 'Geometry/TrackerCommonData/data/tobmodule0.xml', 'Geometry/TrackerCommonData/data/tobmodule2.xml', @@ -136,8 +137,8 @@ 'Geometry/TrackerCommonData/data/tobrod5l.xml', 'Geometry/TrackerCommonData/data/tobrod5h.xml', 'Geometry/TrackerCommonData/data/tobrod5.xml', - 'Geometry/TrackerCommonData/data/v2/tob.xml', - 'Geometry/TrackerCommonData/data/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', + 'Geometry/TrackerCommonData/data/tecmaterial/2021/v1/tecmaterial.xml', 'Geometry/TrackerCommonData/data/tecmodpar.xml', 'Geometry/TrackerCommonData/data/tecmodule0.xml', 'Geometry/TrackerCommonData/data/tecmodule0r.xml', @@ -186,7 +187,7 @@ 'Geometry/TrackerCommonData/data/tecpetal6b.xml', 'Geometry/TrackerCommonData/data/tecpetal8f.xml', 'Geometry/TrackerCommonData/data/tecpetal8b.xml', - 'Geometry/TrackerCommonData/data/tecwheel.xml', + 'Geometry/TrackerCommonData/data/tecwheel/2021/v1/tecwheel.xml', 'Geometry/TrackerCommonData/data/tecwheela.xml', 'Geometry/TrackerCommonData/data/tecwheelb.xml', 'Geometry/TrackerCommonData/data/tecwheelc.xml', @@ -195,7 +196,6 @@ 'Geometry/TrackerCommonData/data/tecservices.xml', 'Geometry/TrackerCommonData/data/tecbackplate.xml', 'Geometry/TrackerCommonData/data/tec.xml', - 'Geometry/TrackerCommonData/data/Run2/trackermaterial.xml', 'Geometry/TrackerCommonData/data/Run2/tracker.xml', 'Geometry/TrackerCommonData/data/trackerpixbar.xml', 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', @@ -206,15 +206,21 @@ 'Geometry/TrackerCommonData/data/trackertec.xml', 'Geometry/TrackerCommonData/data/v2/trackerbulkhead.xml', 'Geometry/TrackerCommonData/data/trackerother.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', + 'Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/eecon.xml', + 'Geometry/EcalCommonData/data/escon.xml', 'Geometry/EcalCommonData/data/eregalgo/2017/v1/eregalgo.xml', 'Geometry/EcalCommonData/data/ebalgo.xml', - 'Geometry/EcalCommonData/data/ebcon.xml', 'Geometry/EcalCommonData/data/ebrot.xml', - 'Geometry/EcalCommonData/data/eecon.xml', - 'Geometry/EcalCommonData/data/eefixed.xml', + 'Geometry/EcalCommonData/data/eefixed/2021/v1/eefixed.xml', 'Geometry/EcalCommonData/data/eehier.xml', 'Geometry/EcalCommonData/data/eealgo.xml', - 'Geometry/EcalCommonData/data/escon.xml', 'Geometry/EcalCommonData/data/esalgo.xml', 'Geometry/EcalCommonData/data/eeF.xml', 'Geometry/EcalCommonData/data/eeB.xml', @@ -224,62 +230,155 @@ 'Geometry/HcalCommonData/data/hcalcablealgo.xml', 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', 'Geometry/HcalCommonData/data/hcalendcap/PhaseI/hcalendcapalgo.xml', - 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', - 'Geometry/HcalCommonData/data/hcalSimNumbering/2019/hcalSimNumbering.xml', - 'Geometry/HcalCommonData/data/hcalRecNumbering/2019/hcalRecNumbering.xml', - 'Geometry/MuonCommonData/data/mbCommon/2017/v2/mbCommon.xml', - 'Geometry/MuonCommonData/data/mb1/2015/v1/mb1.xml', - 'Geometry/MuonCommonData/data/mb2/2015/v1/mb2.xml', - 'Geometry/MuonCommonData/data/mb3/2015/v1/mb3.xml', - 'Geometry/MuonCommonData/data/mb4/2015/v1/mb4.xml', - 'Geometry/MuonCommonData/data/muonYoke/2021/v2/muonYoke.xml', - 'Geometry/MuonCommonData/data/mf/2017/v2/mf.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/2021/v1/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/2021/hcalRecNumbering.xml', + 'Geometry/MuonCommonData/data/mbCommon/2021/v2/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2021/v1/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2021/v1/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2021/v1/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml', + 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml', + 'Geometry/MuonCommonData/data/muonYoke/2021/v5/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2021/v2/mf.xml', 'Geometry/MuonCommonData/data/rpcf/2015/v1/rpcf.xml', 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', - 'Geometry/MuonCommonData/data/csc/2015/v1/csc.xml', - 'Geometry/MuonCommonData/data/mfshield/2017/v1/mfshield.xml', - 'Geometry/ForwardCommonData/data/forwardshield/2017/v1/forwardshield.xml', + 'Geometry/MuonCommonData/data/csc/2021/v3/csc.xml', + 'Geometry/MuonCommonData/data/mfshield/2017/v2/mfshield.xml', + )+ + cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/2021/v3/muonNumbering.xml', + 'Geometry/ForwardCommonData/data/forward/2021/v1/forward.xml', + 'Geometry/ForwardCommonData/data/totemt2/2021/v1/totemt2.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2021/v1/forwardshield.xml', 'Geometry/ForwardCommonData/data/brmrotations.xml', - 'Geometry/ForwardCommonData/data/PostLS2/brm.xml', - 'Geometry/ForwardCommonData/data/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/brm/2021/v1/brm.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials/2021/v1/zdcmaterials.xml', 'Geometry/ForwardCommonData/data/lumimaterials.xml', 'Geometry/ForwardCommonData/data/zdcrotations.xml', 'Geometry/ForwardCommonData/data/lumirotations.xml', - 'Geometry/ForwardCommonData/data/zdc.xml', - 'Geometry/ForwardCommonData/data/zdclumi.xml', - 'Geometry/ForwardCommonData/data/cmszdc.xml')+cms.vstring( - 'Geometry/MuonCommonData/data/muonNumbering/2017/v1/muonNumbering.xml', - 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', - 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', - 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', + 'Geometry/ForwardCommonData/data/zdc/2021/v1/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi/2021/v2/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml', + 'Geometry/ForwardCommonData/data/Run2/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/VeryForwardData/data/RP_Box.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_000.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_001.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_002.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_003.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_004.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_005.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_020.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_021.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_022.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_023.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_024.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_025.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_100.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_101.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_102.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_103.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_104.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_105.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_120.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_121.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_122.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_123.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_124.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_125.xml', + 'Geometry/VeryForwardData/data/RP_Hybrid/v1/RP_Hybrid.xml', + 'Geometry/VeryForwardData/data/RP_Materials/v2/RP_Materials.xml', + 'Geometry/VeryForwardData/data/RP_Transformations.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_000.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_001.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_002.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_004.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_005.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_020.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_021.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_022.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_024.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_025.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_100.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_101.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_102.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_104.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_105.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_120.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_121.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_122.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_124.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_125.xml', + 'Geometry/VeryForwardData/data/RP_Device.xml', + 'Geometry/VeryForwardData/data/RP_Vertical_Device.xml', + 'Geometry/VeryForwardData/data/RP_Horizontal_Device.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Right_Station/v1/CTPPS_220_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Left_Station/v1/CTPPS_220_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Right_Station/v1/CTPPS_210_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Left_Station/v1/CTPPS_210_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_Stations_Assembly.xml', + 'Geometry/VeryForwardData/data/CTPPS_Cuts_Per_Region.xml', + 'Geometry/VeryForwardData/data/RP_Sensitive_Dets.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Materials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Transformations.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Parameters.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Station_Parameters.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Horizontal_Pot.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern1_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern2_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern2_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment5.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Detector_Assembly.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Sensitive_Dets_TimingHits.xml', + 'Geometry/VeryForwardData/data/ppstrackerMaterials/v2/ppstrackerMaterials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module/v3/CTPPS_Pixel_Module.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module_2x2/v3/CTPPS_Pixel_Module_2x2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_003.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_023.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_103.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_123.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Sens.xml', + 'Geometry/VeryForwardData/data/CTPPS_2018/RP_Dist_Beam_Cent.xml', 'Geometry/EcalSimData/data/ecalsens.xml', - 'Geometry/HcalCommonData/data/hcalsenspmf.xml', + 'Geometry/HcalCommonData/data/hcalsens/2021/v1/hcalsenspmf.xml', 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2021/v1/CaloUtil.xml', 'Geometry/MuonSimData/data/v2/muonSens.xml', - 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', 'Geometry/RPCGeometryBuilder/data/RPCSpecs.xml', 'Geometry/GEMGeometryBuilder/data/GEMSpecsFilter17.xml', 'Geometry/GEMGeometryBuilder/data/v4/GEMSpecs.xml', 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/totemsensT2/2021/totemsensT2.xml', 'Geometry/ForwardSimData/data/zdcsens.xml', - 'Geometry/HcalSimData/data/HcalProdCuts.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2021/v2/HcalProdCuts.xml', 'Geometry/EcalSimData/data/EcalProdCuts.xml', 'Geometry/EcalSimData/data/ESProdCuts.xml', - 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', - 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', - 'Geometry/MuonSimData/data/2019/muonProdCuts.xml', - 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/MuonSimData/data/muonProdCuts/2021/v1/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml', 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', - 'Geometry/CMSCommonData/data/FieldParameters.xml'), + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), rootNodeName = cms.string('cms:OCMS') ) - - diff --git a/Geometry/HcalCommonData/python/testPhase2GeometryXML_cfi.py b/Geometry/HcalCommonData/python/testPhase2GeometryXML_cfi.py index 98a1a00d5aea2..4a2cee92e3932 100644 --- a/Geometry/HcalCommonData/python/testPhase2GeometryXML_cfi.py +++ b/Geometry/HcalCommonData/python/testPhase2GeometryXML_cfi.py @@ -5,40 +5,41 @@ XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", geomXMLFiles = cms.vstring( - 'Geometry/CMSCommonData/data/materials.xml', + 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', 'Geometry/CMSCommonData/data/rotations.xml', 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', - 'Geometry/CMSCommonData/data/cms/2026/v2/cms.xml', - 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml', 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', 'Geometry/CMSCommonData/data/cmsTracker.xml', - 'Geometry/CMSCommonData/data/caloBase/2026/v2/caloBase.xml', + 'Geometry/CMSCommonData/data/caloBase/2026/v5/caloBase.xml', 'Geometry/CMSCommonData/data/cmsCalo.xml', - 'Geometry/CMSCommonData/data/muonBase/2026/v2/muonBase.xml', + 'Geometry/CMSCommonData/data/muonBase/2026/v5/muonBase.xml', 'Geometry/CMSCommonData/data/cmsMuon.xml', 'Geometry/CMSCommonData/data/mgnt.xml', - 'Geometry/CMSCommonData/data/beampipe/2026/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/beampipe/2026/v3/beampipe.xml', 'Geometry/CMSCommonData/data/cmsBeam/2026/v1/cmsBeam.xml', 'Geometry/CMSCommonData/data/muonMB.xml', 'Geometry/CMSCommonData/data/muonMagnet.xml', - 'Geometry/CMSCommonData/data/cavern/2017/v2/cavern.xml', - 'Geometry/CMSCommonData/data/cavernData/2017/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml', 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml', 'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml', 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', - 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613/pixfwd.xml', - 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/pixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/pixbar.xml', 'Geometry/TrackerCommonData/data/trackermaterial.xml', - 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/otst.xml', - 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613/tracker.xml', - 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613/pixel.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker800_2020_07/tracker.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker615/pixel.xml', 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml', 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml', 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerStructureTopology.xml', 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613/pixelStructureTopology.xml', 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/trackersens.xml', 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/pixelsens.xml', - 'Geometry/TrackerRecoData/data/PhaseII/TiltedTracker613/trackerRecoMaterial.xml', + 'Geometry/TrackerRecoData/data/PhaseII/OuterTracker616_2020_04/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII.xml', 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/trackerProdCuts.xml', 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/pixelProdCuts.xml', 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', @@ -52,36 +53,38 @@ 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', - 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml', 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/hcalRecNumbering.xml', 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', 'Geometry/HGCalCommonData/data/hgcalMaterial/v1/hgcalMaterial.xml', - 'Geometry/HGCalCommonData/data/hgcal/v10/hgcal.xml', - 'Geometry/HGCalCommonData/data/hgcalEE/v10/hgcalEE.xml', - 'Geometry/HGCalCommonData/data/hgcalHEsil/v10/hgcalHEsil.xml', - 'Geometry/HGCalCommonData/data/hgcalHEmix/v10/hgcalHEmix.xml', - 'Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcal/v14/hgcal.xml', 'Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalcell.xml', - 'Geometry/HGCalCommonData/data/hgcalCons/v10/hgcalCons.xml', - 'Geometry/MuonCommonData/data/mbCommon/2017/v2/mbCommon.xml', - 'Geometry/MuonCommonData/data/mb1/2015/v1/mb1.xml', - 'Geometry/MuonCommonData/data/mb2/2015/v1/mb2.xml', - 'Geometry/MuonCommonData/data/mb3/2015/v1/mb3.xml', - 'Geometry/MuonCommonData/data/mb4/2015/v1/mb4.xml', - 'Geometry/MuonCommonData/data/muonYoke/2021/v2/muonYoke.xml', - 'Geometry/MuonCommonData/data/mf/2026/v2/mf.xml', - 'Geometry/MuonCommonData/data/rpcf/2026/v1/rpcf.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcalEE/v14/hgcalEE.xml', + 'Geometry/HGCalCommonData/data/hgcalHEsil/v14/hgcalHEsil.xml', + 'Geometry/HGCalCommonData/data/hgcalHEmix/v14/hgcalHEmix.xml', + 'Geometry/HGCalCommonData/data/hgcalCons/v14/hgcalCons.xml', + 'Geometry/HGCalCommonData/data/hgcalConsData/v13/hgcalConsData.xml', + 'Geometry/MuonCommonData/data/mbCommon/2021/v1/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2015/v2/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2015/v2/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2015/v2/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml', + 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml', + 'Geometry/MuonCommonData/data/muonYoke/2026/v1/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2026/v7/mf.xml', + 'Geometry/MuonCommonData/data/csc/2021/v2/csc.xml', + 'Geometry/MuonCommonData/data/rpcf/2026/v3/rpcf.xml', 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', - 'Geometry/MuonCommonData/data/gem21/TDR_Dev/gem21.xml', - 'Geometry/MuonCommonData/data/csc/2015/v1/csc.xml', - 'Geometry/MuonCommonData/data/mfshield/2026/v1/mfshield.xml', - 'Geometry/MuonCommonData/data/me0/TDR_Dev/me0.xml', - 'Geometry/ForwardCommonData/data/forwardshield/2017/v1/forwardshield.xml', + 'Geometry/MuonCommonData/data/gem21/TDR_Eta16/gem21.xml', + 'Geometry/MuonCommonData/data/mfshield/2026/v5/mfshield.xml', + 'Geometry/MuonCommonData/data/ge0/TDR_Dev/v3/ge0.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2026/v4/forwardshield.xml', 'Geometry/ForwardCommonData/data/brmrotations.xml', - 'Geometry/ForwardCommonData/data/PostLS2/brm.xml', + 'Geometry/ForwardCommonData/data/brm/2026/v1/brm.xml', 'Geometry/ForwardCommonData/data/zdcmaterials.xml', 'Geometry/ForwardCommonData/data/lumimaterials.xml', 'Geometry/ForwardCommonData/data/zdcrotations.xml', @@ -89,38 +92,38 @@ 'Geometry/ForwardCommonData/data/zdc.xml', 'Geometry/ForwardCommonData/data/zdclumi.xml', 'Geometry/ForwardCommonData/data/cmszdc.xml', - 'Geometry/MTDCommonData/data/btl.xml', - 'Geometry/MTDCommonData/data/etl/v2/etl.xml', - 'Geometry/MTDCommonData/data/CrystalBarPhiFlat/v2/mtd.xml', - 'Geometry/MTDCommonData/data/CrystalBarPhiFlat/mtdStructureTopology.xml', - 'Geometry/MTDCommonData/data/CrystalBarPhiFlat/mtdParameters.xml', + 'Geometry/MTDCommonData/data/mtdMaterial/v2/mtdMaterial.xml', + 'Geometry/MTDCommonData/data/btl/v1/btl.xml', + 'Geometry/MTDCommonData/data/etl/v5/etl.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v3/mtdStructureTopology.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v2/mtdParameters.xml', )+ cms.vstring( - 'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/muonNumbering.xml', + 'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/v3/muonNumbering.xml', 'Geometry/EcalSimData/data/PhaseII/ecalsens.xml', 'Geometry/HcalCommonData/data/hcalsens/NoHE/hcalsenspmf.xml', 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', - 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', + 'Geometry/MuonSimData/data/PhaseII/v2/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', 'Geometry/RPCGeometryBuilder/data/2026/v1/RPCSpecs.xml', - 'Geometry/GEMGeometryBuilder/data/v7/GEMSpecsFilter.xml', - 'Geometry/GEMGeometryBuilder/data/v7/GEMSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecsFilter.xml', + 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecs.xml', 'Geometry/ForwardCommonData/data/brmsens.xml', 'Geometry/ForwardSimData/data/zdcsens.xml', - 'Geometry/MTDSimData/data/CrystalBarPhiFlat/mtdsens.xml', - 'Geometry/HcalSimData/data/HcalProdCuts.xml', + 'Geometry/MTDSimData/data/v2/mtdsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2021/v1/HcalProdCuts.xml', 'Geometry/EcalSimData/data/EcalProdCuts.xml', 'Geometry/HGCalSimData/data/hgcProdCutsv9.xml', 'Geometry/MuonSimData/data/PhaseII/muonProdCuts.xml', 'Geometry/ForwardSimData/data/zdcProdCuts.xml', 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', - 'Geometry/MTDSimData/data/CrystalBarPhiFlat/mtdProdCuts.xml', + 'Geometry/MTDSimData/data/v2/mtdProdCuts.xml', 'Geometry/CMSCommonData/data/FieldParameters.xml', ), rootNodeName = cms.string('cms:OCMS') diff --git a/Geometry/HcalCommonData/src/CaloSimParametersFromDD.cc b/Geometry/HcalCommonData/src/CaloSimParametersFromDD.cc index 291ade59c4acd..46dc7625df60a 100644 --- a/Geometry/HcalCommonData/src/CaloSimParametersFromDD.cc +++ b/Geometry/HcalCommonData/src/CaloSimParametersFromDD.cc @@ -5,8 +5,6 @@ #include "DetectorDescription/Core/interface/DDValue.h" #include "DetectorDescription/Core/interface/DDutils.h" #include "DetectorDescription/DDCMS/interface/DDFilteredView.h" -#include -#include //#define EDM_ML_DEBUG @@ -32,6 +30,7 @@ bool CaloSimParametersFromDD::build(const DDCompactView* cpv, CaloSimulationPara DDFilteredView fv(*cpv, filter); fv.firstChild(); DDsvalues_type sv(fv.mergedSpecifics()); + edm::LogVerbatim("HCalGeom") << "Filtered view " << &fv << " after filter with " << sv.size() << " contents"; php.caloNames_ = getNames("Calorimeter", sv, false); php.levels_ = getNumbers("Levels", sv, false); @@ -98,7 +97,7 @@ std::vector CaloSimParametersFromDD::getNames(const std::string& st int nval = fvec.size(); if ((nval < 1) && (!ignore)) { edm::LogError("HCalGeom") << "CaloSimParametersFromDD: # of " << str << " bins " << nval << " < 1 ==> illegal "; - throw cms::Exception("Unknown", "CaloSimParametersFromDD") << "nval < 2 for array " << str << "\n"; + throw cms::Exception("Unknown", "CaloSimParametersFromDD") << "nval < 1 for array " << str << "\n"; } return fvec; diff --git a/Geometry/HcalCommonData/src/HcalSimParametersFromDD.cc b/Geometry/HcalCommonData/src/HcalSimParametersFromDD.cc index 36acce2b0f774..de142cd9f33b3 100644 --- a/Geometry/HcalCommonData/src/HcalSimParametersFromDD.cc +++ b/Geometry/HcalCommonData/src/HcalSimParametersFromDD.cc @@ -117,18 +117,19 @@ bool HcalSimParametersFromDD::build(const cms::DDCompactView& cpv, HcalSimulatio php.hfLevels_ = fv.get >("hf", "Levels"); // Attenuation length - static const double cminv2mminv = 0.1; php.attenuationLength_ = fv.get >("hf", "attl"); - std::for_each(php.attenuationLength_.begin(), php.attenuationLength_.end(), [](double& n) { n *= cminv2mminv; }); + std::for_each( + php.attenuationLength_.begin(), php.attenuationLength_.end(), [](double& n) { n *= k_ScaleFromDD4HepInv; }); // Limits on Lambda php.lambdaLimits_ = fv.get >("hf", "lambLim"); // Fibre Lengths php.longFiberLength_ = fv.get >("hf", "LongFL"); - std::for_each(php.longFiberLength_.begin(), php.longFiberLength_.end(), [](double& n) { n = convertCmToMm(n); }); + std::for_each(php.longFiberLength_.begin(), php.longFiberLength_.end(), [](double& n) { n *= k_ScaleFromDD4Hep; }); php.shortFiberLength_ = fv.get >("hf", "ShortFL"); - std::for_each(php.shortFiberLength_.begin(), php.shortFiberLength_.end(), [](double& n) { n = convertCmToMm(n); }); + std::for_each( + php.shortFiberLength_.begin(), php.shortFiberLength_.end(), [](double& n) { n *= k_ScaleFromDD4Hep; }); //Parameters for the PMT std::vector neta = fv.get >("hfpmt", "indexPMTR"); diff --git a/Geometry/HcalCommonData/test/HcalRecNumberingTester.cc b/Geometry/HcalCommonData/test/HcalRecNumberingTester.cc index 4ce43128a36d2..a22b83173dd86 100644 --- a/Geometry/HcalCommonData/test/HcalRecNumberingTester.cc +++ b/Geometry/HcalCommonData/test/HcalRecNumberingTester.cc @@ -26,7 +26,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -54,155 +53,150 @@ HcalRecNumberingTester::~HcalRecNumberingTester() {} // ------------ method called to produce the data ------------ void HcalRecNumberingTester::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - if (auto pHSNDC = iSetup.getHandle(token_)) { - edm::LogVerbatim("HcalGeom") << "about to de-reference the edm::ESHandle pHSNDC"; - const HcalDDDRecConstants& hdc(*pHSNDC); - for (int i = 0; i < 4; ++i) - edm::LogVerbatim("HcalGeom") << "MaxDepth[" << i << "] = " << hdc.getMaxDepth(i); - edm::LogVerbatim("HcalGeom") << "about to getPhiOff and getPhiBin for 0..2"; - int neta = hdc.getNEta(); - edm::LogVerbatim("HcalGeom") << neta << " eta bins with phi off set for " - << "barrel = " << hdc.getPhiOff(0) << ", endcap = " << hdc.getPhiOff(1); - for (int i = 0; i < neta; ++i) { - std::pair etas = hdc.getEtaLimit(i); - double fbin = hdc.getPhiBin(i); - std::vector depths = hdc.getDepth(i, false); - edm::LogVerbatim("HcalGeom") << "EtaBin[" << i << "]: EtaLimit = (" << etas.first << ":" << etas.second - << ") phiBin = " << fbin << " and " << depths.size() << " depths"; - for (unsigned int k = 0; k < depths.size(); ++k) { - edm::LogVerbatim("HcalGeom") << "[" << k << "] " << depths[k]; - } + const HcalDDDRecConstants& hdc = iSetup.getData(token_); + for (int i = 0; i < 4; ++i) + edm::LogVerbatim("HcalGeom") << "MaxDepth[" << i << "] = " << hdc.getMaxDepth(i); + edm::LogVerbatim("HcalGeom") << "about to getPhiOff and getPhiBin for 0..2"; + int neta = hdc.getNEta(); + edm::LogVerbatim("HcalGeom") << neta << " eta bins with phi off set for " + << "barrel = " << hdc.getPhiOff(0) << ", endcap = " << hdc.getPhiOff(1); + for (int i = 0; i < neta; ++i) { + std::pair etas = hdc.getEtaLimit(i); + double fbin = hdc.getPhiBin(i); + std::vector depths = hdc.getDepth(i, false); + edm::LogVerbatim("HcalGeom") << "EtaBin[" << i << "]: EtaLimit = (" << etas.first << ":" << etas.second + << ") phiBin = " << fbin << " and " << depths.size() << " depths"; + for (unsigned int k = 0; k < depths.size(); ++k) { + edm::LogVerbatim("HcalGeom") << "[" << k << "] " << depths[k]; } - for (int type = 0; type < 2; ++type) { - std::pair etar = hdc.getEtaRange(type); - edm::LogVerbatim("HcalGeom") << "Detector type: " << type << " with eta ranges " << etar.first << ":" - << etar.second; - for (int eta = etar.first; eta <= etar.second; ++eta) { - std::vector> phis = hdc.getPhis(type + 1, eta); - for (auto& phi : phis) { - edm::LogVerbatim("HcalGeom") << "Type:Eta:phi " << type << ":" << eta << ":" << phi.first - << " Depth range (+z) " << hdc.getMinDepth(type, eta, phi.first, 1) << ":" - << hdc.getMaxDepth(type, eta, phi.first, 1) << " (-z) " - << hdc.getMinDepth(type, eta, phi.first, -1) << ":" - << hdc.getMaxDepth(type, eta, phi.first, -1); - } + } + for (int type = 0; type < 2; ++type) { + std::pair etar = hdc.getEtaRange(type); + edm::LogVerbatim("HcalGeom") << "Detector type: " << type << " with eta ranges " << etar.first << ":" + << etar.second; + for (int eta = etar.first; eta <= etar.second; ++eta) { + std::vector> phis = hdc.getPhis(type + 1, eta); + for (auto& phi : phis) { + edm::LogVerbatim("HcalGeom") << "Type:Eta:phi " << type << ":" << eta << ":" << phi.first + << " Depth range (+z) " << hdc.getMinDepth(type, eta, phi.first, 1) << ":" + << hdc.getMaxDepth(type, eta, phi.first, 1) << " (-z) " + << hdc.getMinDepth(type, eta, phi.first, -1) << ":" + << hdc.getMaxDepth(type, eta, phi.first, -1); } } - std::vector hbar = hdc.getEtaBins(0); - std::vector hcap = hdc.getEtaBins(1); - edm::LogVerbatim("HcalGeom") << "Topology Mode " << hdc.getTopoMode() << " HB with " << hbar.size() - << " eta sectors and HE with " << hcap.size() << " eta sectors"; - std::vector hbcell = hdc.HcalCellTypes(HcalBarrel); - edm::LogVerbatim("HcalGeom") << "HB with " << hbcell.size() << " cells"; - unsigned int i1(0), i2(0), i3(0), i4(0); - for (const auto& cell : hbcell) { - edm::LogVerbatim("HcalGeom") << "HB[" << i1 << "] det " << cell.detType() << " zside " << cell.zside() << ":" - << cell.halfSize() << " RO " << cell.actualReadoutDirection() << " eta " - << cell.etaBin() << ":" << cell.etaMin() << ":" << cell.etaMax() << " phi " - << cell.nPhiBins() << ":" << cell.nPhiModule() << ":" << cell.phiOffset() << ":" - << cell.phiBinWidth() << ":" << cell.unitPhi() << " depth " << cell.depthSegment() - << ":" << cell.depth() << ":" << cell.depthMin() << ":" << cell.depthMax() << ":" - << cell.depthType(); - ++i1; - std::vector> phis = cell.phis(); - edm::LogVerbatim("HcalGeom") << "Phis (" << phis.size() << ") :"; - for (const auto& phi : phis) - edm::LogVerbatim("HcalGeom") << " [" << phi.first << ", " << phi.second << "]"; - } - std::vector hecell = hdc.HcalCellTypes(HcalEndcap); - edm::LogVerbatim("HcalGeom") << "HE with " << hecell.size() << " cells"; - for (const auto& cell : hecell) { - edm::LogVerbatim("HcalGeom") << "HE[" << i2 << "] det " << cell.detType() << " zside " << cell.zside() << ":" - << cell.halfSize() << " RO " << cell.actualReadoutDirection() << " eta " - << cell.etaBin() << ":" << cell.etaMin() << ":" << cell.etaMax() << " phi " - << cell.nPhiBins() << ":" << cell.nPhiModule() << ":" << cell.phiOffset() << ":" - << cell.phiBinWidth() << ":" << cell.unitPhi() << " depth " << cell.depthSegment() - << ":" << cell.depth() << ":" << cell.depthMin() << ":" << cell.depthMax() << ":" - << cell.depthType(); - ++i2; - std::vector> phis = cell.phis(); - edm::LogVerbatim("HcalGeom") << "Phis (" << phis.size() << ") :"; - for (const auto& phi : phis) - edm::LogVerbatim("HcalGeom") << " [" << phi.first << ", " << phi.second << "]"; - } - std::vector hfcell = hdc.HcalCellTypes(HcalForward); - edm::LogVerbatim("HcalGeom") << "HF with " << hfcell.size() << " cells"; - for (const auto& cell : hfcell) { - edm::LogVerbatim("HcalGeom") << "HF[" << i3 << "] det " << cell.detType() << " zside " << cell.zside() << ":" - << cell.halfSize() << " RO " << cell.actualReadoutDirection() << " eta " - << cell.etaBin() << ":" << cell.etaMin() << ":" << cell.etaMax() << " phi " - << cell.nPhiBins() << ":" << cell.nPhiModule() << ":" << cell.phiOffset() << ":" - << cell.phiBinWidth() << ":" << cell.unitPhi() << " depth " << cell.depthSegment() - << ":" << cell.depth() << ":" << cell.depthMin() << ":" << cell.depthMax() << ":" - << cell.depthType(); - ++i3; - } - std::vector hocell = hdc.HcalCellTypes(HcalOuter); - edm::LogVerbatim("HcalGeom") << "HO with " << hocell.size() << " cells"; - for (const auto& cell : hocell) { - edm::LogVerbatim("HcalGeom") << "HO[" << i4 << "] det " << cell.detType() << " zside " << cell.zside() << ":" - << cell.halfSize() << " RO " << cell.actualReadoutDirection() << " eta " - << cell.etaBin() << ":" << cell.etaMin() << ":" << cell.etaMax() << " phi " - << cell.nPhiBins() << ":" << cell.nPhiModule() << ":" << cell.phiOffset() << ":" - << cell.phiBinWidth() << ":" << cell.unitPhi() << " depth " << cell.depthSegment() - << ":" << cell.depth() << ":" << cell.depthMin() << ":" << cell.depthMax() << ":" - << cell.depthType(); - ++i4; - } - for (int type = 0; type <= 1; ++type) { - std::vector act = hdc.getThickActive(type); - edm::LogVerbatim("HcalGeom") << "Hcal type " << type << " has " << act.size() << " eta/depth segments"; - for (const auto& active : act) { - edm::LogVerbatim("HcalGeom") << "zside " << active.zside << " ieta " << active.ieta << " depth " << active.depth - << " type " << active.stype << " eta " << active.eta << " active thickness " - << active.thick; - } + } + std::vector hbar = hdc.getEtaBins(0); + std::vector hcap = hdc.getEtaBins(1); + edm::LogVerbatim("HcalGeom") << "Topology Mode " << hdc.getTopoMode() << " HB with " << hbar.size() + << " eta sectors and HE with " << hcap.size() << " eta sectors"; + std::vector hbcell = hdc.HcalCellTypes(HcalBarrel); + edm::LogVerbatim("HcalGeom") << "HB with " << hbcell.size() << " cells"; + unsigned int i1(0), i2(0), i3(0), i4(0); + for (const auto& cell : hbcell) { + edm::LogVerbatim("HcalGeom") << "HB[" << i1 << "] det " << cell.detType() << " zside " << cell.zside() << ":" + << cell.halfSize() << " RO " << cell.actualReadoutDirection() << " eta " + << cell.etaBin() << ":" << cell.etaMin() << ":" << cell.etaMax() << " phi " + << cell.nPhiBins() << ":" << cell.nPhiModule() << ":" << cell.phiOffset() << ":" + << cell.phiBinWidth() << ":" << cell.unitPhi() << " depth " << cell.depthSegment() + << ":" << cell.depth() << ":" << cell.depthMin() << ":" << cell.depthMax() << ":" + << cell.depthType(); + ++i1; + std::vector> phis = cell.phis(); + edm::LogVerbatim("HcalGeom") << "Phis (" << phis.size() << ") :"; + for (const auto& phi : phis) + edm::LogVerbatim("HcalGeom") << " [" << phi.first << ", " << phi.second << "]"; + } + std::vector hecell = hdc.HcalCellTypes(HcalEndcap); + edm::LogVerbatim("HcalGeom") << "HE with " << hecell.size() << " cells"; + for (const auto& cell : hecell) { + edm::LogVerbatim("HcalGeom") << "HE[" << i2 << "] det " << cell.detType() << " zside " << cell.zside() << ":" + << cell.halfSize() << " RO " << cell.actualReadoutDirection() << " eta " + << cell.etaBin() << ":" << cell.etaMin() << ":" << cell.etaMax() << " phi " + << cell.nPhiBins() << ":" << cell.nPhiModule() << ":" << cell.phiOffset() << ":" + << cell.phiBinWidth() << ":" << cell.unitPhi() << " depth " << cell.depthSegment() + << ":" << cell.depth() << ":" << cell.depthMin() << ":" << cell.depthMax() << ":" + << cell.depthType(); + ++i2; + std::vector> phis = cell.phis(); + edm::LogVerbatim("HcalGeom") << "Phis (" << phis.size() << ") :"; + for (const auto& phi : phis) + edm::LogVerbatim("HcalGeom") << " [" << phi.first << ", " << phi.second << "]"; + } + std::vector hfcell = hdc.HcalCellTypes(HcalForward); + edm::LogVerbatim("HcalGeom") << "HF with " << hfcell.size() << " cells"; + for (const auto& cell : hfcell) { + edm::LogVerbatim("HcalGeom") << "HF[" << i3 << "] det " << cell.detType() << " zside " << cell.zside() << ":" + << cell.halfSize() << " RO " << cell.actualReadoutDirection() << " eta " + << cell.etaBin() << ":" << cell.etaMin() << ":" << cell.etaMax() << " phi " + << cell.nPhiBins() << ":" << cell.nPhiModule() << ":" << cell.phiOffset() << ":" + << cell.phiBinWidth() << ":" << cell.unitPhi() << " depth " << cell.depthSegment() + << ":" << cell.depth() << ":" << cell.depthMin() << ":" << cell.depthMax() << ":" + << cell.depthType(); + ++i3; + } + std::vector hocell = hdc.HcalCellTypes(HcalOuter); + edm::LogVerbatim("HcalGeom") << "HO with " << hocell.size() << " cells"; + for (const auto& cell : hocell) { + edm::LogVerbatim("HcalGeom") << "HO[" << i4 << "] det " << cell.detType() << " zside " << cell.zside() << ":" + << cell.halfSize() << " RO " << cell.actualReadoutDirection() << " eta " + << cell.etaBin() << ":" << cell.etaMin() << ":" << cell.etaMax() << " phi " + << cell.nPhiBins() << ":" << cell.nPhiModule() << ":" << cell.phiOffset() << ":" + << cell.phiBinWidth() << ":" << cell.unitPhi() << " depth " << cell.depthSegment() + << ":" << cell.depth() << ":" << cell.depthMin() << ":" << cell.depthMax() << ":" + << cell.depthType(); + ++i4; + } + for (int type = 0; type <= 1; ++type) { + std::vector act = hdc.getThickActive(type); + edm::LogVerbatim("HcalGeom") << "Hcal type " << type << " has " << act.size() << " eta/depth segments"; + for (const auto& active : act) { + edm::LogVerbatim("HcalGeom") << "zside " << active.zside << " ieta " << active.ieta << " depth " << active.depth + << " type " << active.stype << " eta " << active.eta << " active thickness " + << active.thick; } + } - // Test merging - std::vector phiSp; - HcalSubdetector subdet = HcalSubdetector(hdc.dddConstants()->ldMap()->validDet(phiSp)); - if (subdet == HcalBarrel || subdet == HcalEndcap) { - int type = (int)(subdet - 1); - std::pair etas = hdc.getEtaRange(type); - for (int eta = etas.first; eta <= etas.second; ++eta) { - for (int k : phiSp) { - int zside = (k > 0) ? 1 : -1; - int iphi = (k > 0) ? k : -k; + // Test merging + std::vector phiSp; + HcalSubdetector subdet = HcalSubdetector(hdc.dddConstants()->ldMap()->validDet(phiSp)); + if (subdet == HcalBarrel || subdet == HcalEndcap) { + int type = (int)(subdet - 1); + std::pair etas = hdc.getEtaRange(type); + for (int eta = etas.first; eta <= etas.second; ++eta) { + for (int k : phiSp) { + int zside = (k > 0) ? 1 : -1; + int iphi = (k > 0) ? k : -k; #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HcalGeom") << "Look for Subdet " << subdet << " Zside " << zside << " Eta " << eta - << " Phi " << iphi << " depths " << hdc.getMinDepth(type, eta, iphi, zside) - << ":" << hdc.getMaxDepth(type, eta, iphi, zside); + edm::LogVerbatim("HcalGeom") << "Look for Subdet " << subdet << " Zside " << zside << " Eta " << eta << " Phi " + << iphi << " depths " << hdc.getMinDepth(type, eta, iphi, zside) << ":" + << hdc.getMaxDepth(type, eta, iphi, zside); #endif - std::vector ids; - for (int depth = hdc.getMinDepth(type, eta, iphi, zside); depth <= hdc.getMaxDepth(type, eta, iphi, zside); - ++depth) { - HcalDetId id(subdet, zside * eta, iphi, depth); - HcalDetId hid = hdc.mergedDepthDetId(id); - hdc.unmergeDepthDetId(hid, ids); - edm::LogVerbatim("HcalGeom") << "Input ID " << id << " Merged ID " << hid << " containing " << ids.size() - << " IDS:"; - for (auto id : ids) - edm::LogVerbatim("HcalGeom") << " " << id; - } + std::vector ids; + for (int depth = hdc.getMinDepth(type, eta, iphi, zside); depth <= hdc.getMaxDepth(type, eta, iphi, zside); + ++depth) { + HcalDetId id(subdet, zside * eta, iphi, depth); + HcalDetId hid = hdc.mergedDepthDetId(id); + hdc.unmergeDepthDetId(hid, ids); + edm::LogVerbatim("HcalGeom") << "Input ID " << id << " Merged ID " << hid << " containing " << ids.size() + << " IDS:"; + for (auto id : ids) + edm::LogVerbatim("HcalGeom") << " " << id; } } } - // R,Z of cells - for (const auto& cell : hbcell) { - int ieta = cell.etaBin() * cell.zside(); - double rz = hdc.getRZ(HcalBarrel, ieta, cell.phis()[0].first, cell.depthSegment()); - edm::LogVerbatim("HcalGeom") << "HB (eta=" << ieta << ", phi=" << cell.phis()[0].first - << ", depth=" << cell.depthSegment() << ") r/z = " << rz; - } - for (const auto& cell : hecell) { - int ieta = cell.etaBin() * cell.zside(); - double rz = hdc.getRZ(HcalEndcap, ieta, cell.phis()[0].first, cell.depthSegment()); - edm::LogVerbatim("HcalGeom") << "HE (eta=" << ieta << ", phi=" << cell.phis()[0].first - << ", depth=" << cell.depthSegment() << ") r/z = " << rz; - } - } else { - edm::LogVerbatim("HcalGeom") << "No record found with HcalDDDRecConstants"; + } + // R,Z of cells + for (const auto& cell : hbcell) { + int ieta = cell.etaBin() * cell.zside(); + double rz = hdc.getRZ(HcalBarrel, ieta, cell.phis()[0].first, cell.depthSegment()); + edm::LogVerbatim("HcalGeom") << "HB (eta=" << ieta << ", phi=" << cell.phis()[0].first + << ", depth=" << cell.depthSegment() << ") r/z = " << rz; + } + for (const auto& cell : hecell) { + int ieta = cell.etaBin() * cell.zside(); + double rz = hdc.getRZ(HcalEndcap, ieta, cell.phis()[0].first, cell.depthSegment()); + edm::LogVerbatim("HcalGeom") << "HE (eta=" << ieta << ", phi=" << cell.phis()[0].first + << ", depth=" << cell.depthSegment() << ") r/z = " << rz; } } diff --git a/Geometry/HcalCommonData/test/HcalScintillatorTester.cc b/Geometry/HcalCommonData/test/HcalScintillatorTester.cc index c238cab016a19..ed57230592bd1 100644 --- a/Geometry/HcalCommonData/test/HcalScintillatorTester.cc +++ b/Geometry/HcalCommonData/test/HcalScintillatorTester.cc @@ -25,7 +25,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -54,132 +53,127 @@ HcalScintillatorTester::~HcalScintillatorTester() {} // ------------ method called to produce the data ------------ void HcalScintillatorTester::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - if (auto pHSNDC = iSetup.getHandle(token_)) { - edm::LogVerbatim("HCalGeom") << "about to de-reference the edm::ESHandle pHSNDC"; - const HcalDDDSimConstants hdc(*pHSNDC); + const HcalDDDSimConstants hdc = iSetup.getData(token_); - // Layers for HB - edm::LogVerbatim("HCalGeom") << "\n\nPrint out the parameters for HB" - << "\n===============================\n"; - for (int zs = 0; zs <= 1; ++zs) { - int zside = 2 * zs - 1; - const auto etab = hdc.getiEtaRange(0); - for (int eta = etab.first; eta <= etab.second; ++eta) { - double etaL = hdc.parameter()->etaTable.at(eta - 1); - double thetaL = 2. * atan(exp(-etaL)); - double etaH = hdc.parameter()->etaTable.at(eta); - double thetaH = 2. * atan(exp(-etaH)); - for (int depth = hdc.getMinDepth(1, eta, 1, zside, false); depth <= hdc.getMaxDepth(1, eta, 1, zside, false); - ++depth) { - int layL = hdc.getLayerFront(1, eta, 1, zside, depth); - int layH = hdc.getLayerBack(1, eta, 1, zside, depth); - edm::LogVerbatim("HCalGeom") << "\nHB: zSide " << zside << " iEta " << eta << " Depth " << depth << " Layers " - << layL << ":" << layH; - for (int lay = (layL - 1); lay < layH; ++lay) { - std::vector area(2, 0), length(2, 0), width(2, 0); - int kk(0); - for (unsigned int k = 0; k < hdc.parameter()->layHB.size(); ++k) { - if (lay == hdc.parameter()->layHB[k]) { - double zmin = hdc.parameter()->rhoxHB[k] * std::cos(thetaL) / std::sin(thetaL); - double zmax = hdc.parameter()->rhoxHB[k] * std::cos(thetaH) / std::sin(thetaH); - double dz = (std::min(zmax, hdc.parameter()->dxHB[lay]) - zmin); - if (dz > 0) { - width[kk] = hdc.parameter()->dyHB[k]; - length[kk] = dz; - area[kk] = dz * width[kk]; - ++kk; - } + // Layers for HB + edm::LogVerbatim("HCalGeom") << "\n\nPrint out the parameters for HB" + << "\n===============================\n"; + for (int zs = 0; zs <= 1; ++zs) { + int zside = 2 * zs - 1; + const auto etab = hdc.getiEtaRange(0); + for (int eta = etab.first; eta <= etab.second; ++eta) { + double etaL = hdc.parameter()->etaTable.at(eta - 1); + double thetaL = 2. * atan(exp(-etaL)); + double etaH = hdc.parameter()->etaTable.at(eta); + double thetaH = 2. * atan(exp(-etaH)); + for (int depth = hdc.getMinDepth(1, eta, 1, zside, false); depth <= hdc.getMaxDepth(1, eta, 1, zside, false); + ++depth) { + int layL = hdc.getLayerFront(1, eta, 1, zside, depth); + int layH = hdc.getLayerBack(1, eta, 1, zside, depth); + edm::LogVerbatim("HCalGeom") << "\nHB: zSide " << zside << " iEta " << eta << " Depth " << depth << " Layers " + << layL << ":" << layH; + for (int lay = (layL - 1); lay < layH; ++lay) { + std::vector area(2, 0), length(2, 0), width(2, 0); + int kk(0); + for (unsigned int k = 0; k < hdc.parameter()->layHB.size(); ++k) { + if (lay == hdc.parameter()->layHB[k]) { + double zmin = hdc.parameter()->rhoxHB[k] * std::cos(thetaL) / std::sin(thetaL); + double zmax = hdc.parameter()->rhoxHB[k] * std::cos(thetaH) / std::sin(thetaH); + double dz = (std::min(zmax, hdc.parameter()->dxHB[lay]) - zmin); + if (dz > 0) { + width[kk] = hdc.parameter()->dyHB[k]; + length[kk] = dz; + area[kk] = dz * width[kk]; + ++kk; } } - if (kk > 1) { - edm::LogVerbatim("HCalGeom") - << "Layer " << (lay + 1) << " Length " << length[0] << ":" << length[1] << " width " << width[0] - << ":" << width[1] << " Area " << area[0] << ":" << area[1]; - } else if (kk > 0) { - edm::LogVerbatim("HCalGeom") - << "Layer " << (lay + 1) << " Length " << length[0] << " width " << width[0] << " Area " << area[0]; - } + } + if (kk > 1) { + edm::LogVerbatim("HCalGeom") << "Layer " << (lay + 1) << " Length " << length[0] << ":" << length[1] + << " width " << width[0] << ":" << width[1] << " Area " << area[0] << ":" + << area[1]; + } else if (kk > 0) { + edm::LogVerbatim("HCalGeom") << "Layer " << (lay + 1) << " Length " << length[0] << " width " << width[0] + << " Area " << area[0]; } } } } + } - //Layers for HE - edm::LogVerbatim("HCalGeom") << "\n\nPrint out the parameters for HE" - << "\n===============================\n"; - for (int zs = 0; zs <= 1; ++zs) { - int zside = 2 * zs - 1; - const auto etae = hdc.getiEtaRange(1); - for (int eta = etae.first; eta <= etae.second; ++eta) { - double etaL = hdc.parameter()->etaTable.at(eta - 1); - double thetaL = 2. * atan(exp(-etaL)); - double etaH = hdc.parameter()->etaTable.at(eta); - double thetaH = 2. * atan(exp(-etaH)); - double phib = hdc.parameter()->phibin[eta - 1]; - int nphi = (phib > 6._deg) ? 1 : 2; - for (int depth = hdc.getMinDepth(2, eta, 1, zside, false); depth <= hdc.getMaxDepth(2, eta, 1, zside, false); - ++depth) { - int layL = hdc.getLayerFront(2, eta, 1, zside, depth); - int layH = hdc.getLayerBack(2, eta, 1, zside, depth); - edm::LogVerbatim("HCalGeom") << "\nHE: zSide " << zside << " iEta " << eta << " Depth " << depth << " Layers " - << layL << ":" << layH; - for (int lay = (layL - 1); lay < layH; ++lay) { - std::vector area(4, 0), delr(4, 0), dely(4, 0); - int kk(0); - for (unsigned int k = 0; k < hdc.parameter()->layHE.size(); ++k) { - if (lay == hdc.parameter()->layHE[k]) { - double rmin = hdc.parameter()->zxHE[k] * std::tan(thetaH); - double rmax = hdc.parameter()->zxHE[k] * std::tan(thetaL); - if ((lay != 0 || eta == 18) && - (lay != 1 || (eta == 18 && (hdc.parameter()->rhoxHE[k] - hdc.parameter()->dyHE[k] > 1000)) || - (eta != 18 && (hdc.parameter()->rhoxHE[k] - hdc.parameter()->dyHE[k] < 1000))) && - ((rmin + 30) < (hdc.parameter()->rhoxHE[k] + hdc.parameter()->dyHE[k])) && - (rmax > (hdc.parameter()->rhoxHE[k] - hdc.parameter()->dyHE[k]))) { - rmin = std::max(rmin, (hdc.parameter()->rhoxHE[k] - hdc.parameter()->dyHE[k])); - rmax = std::min(rmax, (hdc.parameter()->rhoxHE[k] + hdc.parameter()->dyHE[k])); - double dr = rmax - rmin; - if (dr > 0) { - double dx1 = rmin * std::tan(phib); - double dx2 = rmax * std::tan(phib); - if (nphi == 1) { - double dy = 0.5 * (dx1 + dx2 - 4. * hdc.parameter()->dx1HE[k]); - delr[kk] = dr; - dely[kk] = dy; - area[kk] = dr * dy; - ++kk; - } else { - double dy1 = 0.5 * (dx1 + dx2 - 2. * hdc.parameter()->dx1HE[k]); - delr[kk] = dr; - dely[kk] = dy1; - area[kk] = dr * dy1; - double dy2 = 0.5 * ((rmax + rmin) * tan(10._deg) - 4 * hdc.parameter()->dx1HE[k]) - dy1; - delr[kk + 2] = dr; - dely[kk + 2] = dy2; - area[kk + 2] = dr * dy2; - ++kk; - } + //Layers for HE + edm::LogVerbatim("HCalGeom") << "\n\nPrint out the parameters for HE" + << "\n===============================\n"; + for (int zs = 0; zs <= 1; ++zs) { + int zside = 2 * zs - 1; + const auto etae = hdc.getiEtaRange(1); + for (int eta = etae.first; eta <= etae.second; ++eta) { + double etaL = hdc.parameter()->etaTable.at(eta - 1); + double thetaL = 2. * atan(exp(-etaL)); + double etaH = hdc.parameter()->etaTable.at(eta); + double thetaH = 2. * atan(exp(-etaH)); + double phib = hdc.parameter()->phibin[eta - 1]; + int nphi = (phib > 6._deg) ? 1 : 2; + for (int depth = hdc.getMinDepth(2, eta, 1, zside, false); depth <= hdc.getMaxDepth(2, eta, 1, zside, false); + ++depth) { + int layL = hdc.getLayerFront(2, eta, 1, zside, depth); + int layH = hdc.getLayerBack(2, eta, 1, zside, depth); + edm::LogVerbatim("HCalGeom") << "\nHE: zSide " << zside << " iEta " << eta << " Depth " << depth << " Layers " + << layL << ":" << layH; + for (int lay = (layL - 1); lay < layH; ++lay) { + std::vector area(4, 0), delr(4, 0), dely(4, 0); + int kk(0); + for (unsigned int k = 0; k < hdc.parameter()->layHE.size(); ++k) { + if (lay == hdc.parameter()->layHE[k]) { + double rmin = hdc.parameter()->zxHE[k] * std::tan(thetaH); + double rmax = hdc.parameter()->zxHE[k] * std::tan(thetaL); + if ((lay != 0 || eta == 18) && + (lay != 1 || (eta == 18 && (hdc.parameter()->rhoxHE[k] - hdc.parameter()->dyHE[k] > 1000)) || + (eta != 18 && (hdc.parameter()->rhoxHE[k] - hdc.parameter()->dyHE[k] < 1000))) && + ((rmin + 30) < (hdc.parameter()->rhoxHE[k] + hdc.parameter()->dyHE[k])) && + (rmax > (hdc.parameter()->rhoxHE[k] - hdc.parameter()->dyHE[k]))) { + rmin = std::max(rmin, (hdc.parameter()->rhoxHE[k] - hdc.parameter()->dyHE[k])); + rmax = std::min(rmax, (hdc.parameter()->rhoxHE[k] + hdc.parameter()->dyHE[k])); + double dr = rmax - rmin; + if (dr > 0) { + double dx1 = rmin * std::tan(phib); + double dx2 = rmax * std::tan(phib); + if (nphi == 1) { + double dy = 0.5 * (dx1 + dx2 - 4. * hdc.parameter()->dx1HE[k]); + delr[kk] = dr; + dely[kk] = dy; + area[kk] = dr * dy; + ++kk; + } else { + double dy1 = 0.5 * (dx1 + dx2 - 2. * hdc.parameter()->dx1HE[k]); + delr[kk] = dr; + dely[kk] = dy1; + area[kk] = dr * dy1; + double dy2 = 0.5 * ((rmax + rmin) * tan(10._deg) - 4 * hdc.parameter()->dx1HE[k]) - dy1; + delr[kk + 2] = dr; + dely[kk + 2] = dy2; + area[kk + 2] = dr * dy2; + ++kk; } } } } - if (area[0] > 0 && area[1] > 0) { - if (nphi == 1) { - edm::LogVerbatim("HCalGeom") - << "Layer " << (lay + 1) << " Length " << delr[0] << ":" << delr[1] << " width " << dely[0] << ":" - << dely[1] << " Area " << area[0] << ":" << area[1]; - } else { - edm::LogVerbatim("HCalGeom") - << "Layer " << (lay + 1) << " Length " << delr[0] << ":" << delr[1] << ":" << delr[2] << ":" - << delr[3] << " width " << dely[0] << ":" << dely[1] << ":" << dely[2] << ":" << dely[3] << " Area " - << area[0] << ":" << area[1] << ":" << area[2] << ":" << area[3]; - } + } + if (area[0] > 0 && area[1] > 0) { + if (nphi == 1) { + edm::LogVerbatim("HCalGeom") + << "Layer " << (lay + 1) << " Length " << delr[0] << ":" << delr[1] << " width " << dely[0] << ":" + << dely[1] << " Area " << area[0] << ":" << area[1]; + } else { + edm::LogVerbatim("HCalGeom") + << "Layer " << (lay + 1) << " Length " << delr[0] << ":" << delr[1] << ":" << delr[2] << ":" + << delr[3] << " width " << dely[0] << ":" << dely[1] << ":" << dely[2] << ":" << dely[3] << " Area " + << area[0] << ":" << area[1] << ":" << area[2] << ":" << area[3]; } } } } } - } else { - edm::LogVerbatim("HCalGeom") << "No record found with HcalDDDSimConstants"; } } diff --git a/Geometry/HcalCommonData/test/HcalSimNumberingTester.cc b/Geometry/HcalCommonData/test/HcalSimNumberingTester.cc index ad910fc227e88..f548fa6ee4f3e 100644 --- a/Geometry/HcalCommonData/test/HcalSimNumberingTester.cc +++ b/Geometry/HcalCommonData/test/HcalSimNumberingTester.cc @@ -26,7 +26,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -52,22 +51,18 @@ HcalSimNumberingTester::~HcalSimNumberingTester() {} // ------------ method called to produce the data ------------ void HcalSimNumberingTester::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - if (auto pHSNDC = iSetup.getHandle(token_)) { - edm::LogVerbatim("HcalGeom") << "about to de-reference the edm::ESHandle pHSNDC"; - const HcalDDDSimConstants hdc(*pHSNDC); - edm::LogVerbatim("HcalGeom") << "about to getConst for 0..1"; - for (int i = 0; i <= 1; ++i) { - std::vector > gcons = hdc.getConstHBHE(i); - edm::LogVerbatim("HcalGeom") << "Geometry Constants for [" << i << "] with " << gcons.size() << " elements"; - for (unsigned int k = 0; k < gcons.size(); ++k) - edm::LogVerbatim("HcalGeom") << "Element[" << k << "] = " << gcons[k].first << " : " << gcons[k].second; - } - for (int i = 0; i < 4; ++i) - edm::LogVerbatim("HcalGeom") << "MaxDepth[" << i << "] = " << hdc.getMaxDepth(i); - hdc.printTiles(); - } else { - edm::LogVerbatim("HcalGeom") << "No record found with HcalDDDSimConstants"; + const HcalDDDSimConstants hdc = iSetup.getData(token_); + + edm::LogVerbatim("HcalGeom") << "about to getConst for 0..1"; + for (int i = 0; i <= 1; ++i) { + std::vector > gcons = hdc.getConstHBHE(i); + edm::LogVerbatim("HcalGeom") << "Geometry Constants for [" << i << "] with " << gcons.size() << " elements"; + for (unsigned int k = 0; k < gcons.size(); ++k) + edm::LogVerbatim("HcalGeom") << "Element[" << k << "] = " << gcons[k].first << " : " << gcons[k].second; } + for (int i = 0; i < 4; ++i) + edm::LogVerbatim("HcalGeom") << "MaxDepth[" << i << "] = " << hdc.getMaxDepth(i); + hdc.printTiles(); } //define this as a plug-in diff --git a/Geometry/HcalCommonData/test/python/runCaloPararemetrsAnalyzer_cfg.py b/Geometry/HcalCommonData/test/python/runCaloPararemetrsAnalyzer_cfg.py deleted file mode 100644 index 79220b8cb459f..0000000000000 --- a/Geometry/HcalCommonData/test/python/runCaloPararemetrsAnalyzer_cfg.py +++ /dev/null @@ -1,23 +0,0 @@ -import FWCore.ParameterSet.Config as cms -process = cms.Process("HcalParametersTest") - -process.load('Geometry.HcalCommonData.testPhase2GeometryFineXML_cfi') -process.load('Geometry.HcalCommonData.hcalParameters_cfi') -process.load('Geometry.HcalCommonData.hcalSimulationParameters_cfi') -process.load('Geometry.HcalCommonData.caloSimulationParameters_cff') -process.load('FWCore.MessageService.MessageLogger_cfi') - -process.source = cms.Source("EmptySource") -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(1) - ) - -if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - -process.hpa = cms.EDAnalyzer("CaloSimParametersAnalyzer") - -process.Timing = cms.Service("Timing") -process.SimpleMemoryCheck = cms.Service("SimpleMemoryCheck") - -process.p1 = cms.Path(process.hpa) diff --git a/Geometry/HcalCommonData/test/python/runCaloPararemetrsDDD_cfg.py b/Geometry/HcalCommonData/test/python/runCaloPararemetrsDDD_cfg.py new file mode 100644 index 0000000000000..562664c1d94bc --- /dev/null +++ b/Geometry/HcalCommonData/test/python/runCaloPararemetrsDDD_cfg.py @@ -0,0 +1,19 @@ +import FWCore.ParameterSet.Config as cms +from Configuration.Eras.Era_Run3_cff import Run3 + +process = cms.Process("HcalParametersTest",Run3) + +process.load("Configuration.Geometry.GeometryExtended2021Reco_cff") +process.load('FWCore.MessageService.MessageLogger_cfi') + +process.source = cms.Source("EmptySource") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) + ) + +if hasattr(process,'MessageLogger'): + process.MessageLogger.HCalGeom=dict() + +process.hpa = cms.EDAnalyzer("CaloSimParametersAnalyzer") + +process.p1 = cms.Path(process.hpa) diff --git a/Geometry/HcalCommonData/test/python/runCaloPararemetrsTester_cfg.py b/Geometry/HcalCommonData/test/python/runCaloPararemetrsTester_cfg.py index 7e90fb98be9fd..a4a5943f6cf54 100644 --- a/Geometry/HcalCommonData/test/python/runCaloPararemetrsTester_cfg.py +++ b/Geometry/HcalCommonData/test/python/runCaloPararemetrsTester_cfg.py @@ -1,34 +1,20 @@ import FWCore.ParameterSet.Config as cms -process = cms.Process("HcalParametersTest") +from Configuration.Eras.Era_Run3_dd4hep_cff import Run3_dd4hep -process.load('Geometry.HcalCommonData.hcalParameters_cfi') -process.load('Geometry.HcalCommonData.hcalSimulationParameters_cfi') -process.load('Geometry.HcalCommonData.caloSimulationParameters_cff') +process = cms.Process("HcalParametersTest",Run3_dd4hep) + +process.load("Configuration.Geometry.GeometryDD4hepExtended2021Reco_cff") process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - process.MessageLogger.categories.append('Geometry') - -process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", - confGeomXMLFiles = cms.FileInPath('Geometry/HcalAlgo/data/cms-test-ddhcalHF-algorithm.xml'), - appendToDataLabel = cms.string('') - ) - -process.DDCompactViewESProducer = cms.ESProducer("DDCompactViewESProducer", - appendToDataLabel = cms.string('') -) + process.MessageLogger.HCalGeom=dict() process.source = cms.Source("EmptySource") process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) ) -process.caloSimulationParameters.fromDD4Hep = cms.bool(True) process.hpa = cms.EDAnalyzer("CaloSimParametersAnalyzer") -process.Timing = cms.Service("Timing") -process.SimpleMemoryCheck = cms.Service("SimpleMemoryCheck") - process.p1 = cms.Path(process.hpa) diff --git a/Geometry/HcalCommonData/test/python/runHcalParametersFromDD4HepAnalyzer_cfg.py b/Geometry/HcalCommonData/test/python/runHcalParametersFromDD4HepAnalyzer_cfg.py index daaa578426dc0..640a29b75a600 100644 --- a/Geometry/HcalCommonData/test/python/runHcalParametersFromDD4HepAnalyzer_cfg.py +++ b/Geometry/HcalCommonData/test/python/runHcalParametersFromDD4HepAnalyzer_cfg.py @@ -1,31 +1,21 @@ import FWCore.ParameterSet.Config as cms -process = cms.Process("HcalParametersTest") +from Configuration.Eras.Era_Run3_dd4hep_cff import Run3_dd4hep -process.load('Geometry.HcalCommonData.hcalParameters_cff') -process.load('Geometry.HcalCommonData.hcalSimulationParameters_cff') +process = cms.Process("HcalParametersTest",Run3_dd4hep) + +process.load("Configuration.Geometry.GeometryDD4hepExtended2021Reco_cff") process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - process.MessageLogger.categories.append('Geometry') + process.MessageLogger.HCalGeom=dict() + process.MessageLogger.Geometry=dict() process.source = cms.Source("EmptySource") process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) ) -process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", - confGeomXMLFiles = cms.FileInPath('Geometry/HcalAlgo/data/cms-test-Phase2GeometryFine-algorithm.xml'), - appendToDataLabel = cms.string('') - ) - -process.DDCompactViewESProducer = cms.ESProducer("DDCompactViewESProducer", - appendToDataLabel = cms.string('') -) - process.hpa = cms.EDAnalyzer("HcalParametersAnalyzer") -process.hcalParameters.fromDD4Hep = cms.bool(True) -process.hcalSimulationParameters.fromDD4Hep = cms.bool(True) process.Timing = cms.Service("Timing") process.SimpleMemoryCheck = cms.Service("SimpleMemoryCheck") diff --git a/Geometry/HcalCommonData/test/python/runHcalParametersFromDDDAnalyzer_cfg.py b/Geometry/HcalCommonData/test/python/runHcalParametersFromDDDAnalyzer_cfg.py index 937e737eb957a..73a8c45cbb0d7 100644 --- a/Geometry/HcalCommonData/test/python/runHcalParametersFromDDDAnalyzer_cfg.py +++ b/Geometry/HcalCommonData/test/python/runHcalParametersFromDDDAnalyzer_cfg.py @@ -1,9 +1,9 @@ import FWCore.ParameterSet.Config as cms -process = cms.Process("HcalParametersTest") +from Configuration.Eras.Era_Run3_cff import Run3 -process.load('Geometry.HcalCommonData.testPhase2GeometryFineXML_cfi') -process.load('Geometry.HcalCommonData.hcalParameters_cff') -process.load('Geometry.HcalCommonData.hcalSimulationParameters_cff') +process = cms.Process("HcalParametersTest",Run3) + +process.load("Configuration.Geometry.GeometryExtended2021Reco_cff") process.load('FWCore.MessageService.MessageLogger_cfi') process.source = cms.Source("EmptySource") @@ -12,7 +12,7 @@ ) if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.HCalGeom=dict() process.hpa = cms.EDAnalyzer("HcalParametersAnalyzer") diff --git a/Geometry/HcalCommonData/test/python/runHcalRecNumberingDD4hepTester_cfg.py b/Geometry/HcalCommonData/test/python/runHcalRecNumberingDD4hepTester_cfg.py index ef3e8aeefd621..6f61bce6c6058 100644 --- a/Geometry/HcalCommonData/test/python/runHcalRecNumberingDD4hepTester_cfg.py +++ b/Geometry/HcalCommonData/test/python/runHcalRecNumberingDD4hepTester_cfg.py @@ -7,7 +7,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HcalGeom') + process.MessageLogger.HcalGeom=dict() process.source = cms.Source("EmptySource") process.maxEvents = cms.untracked.PSet( diff --git a/Geometry/HcalCommonData/test/python/runHcalRecNumberingDDDTester_cfg.py b/Geometry/HcalCommonData/test/python/runHcalRecNumberingDDDTester_cfg.py index 523a01cde95a8..50e1918167556 100644 --- a/Geometry/HcalCommonData/test/python/runHcalRecNumberingDDDTester_cfg.py +++ b/Geometry/HcalCommonData/test/python/runHcalRecNumberingDDDTester_cfg.py @@ -8,7 +8,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HcalGeom') + process.MessageLogger.HcalGeom=dict() process.source = cms.Source("EmptySource") process.maxEvents = cms.untracked.PSet( diff --git a/Geometry/HcalCommonData/test/python/runHcalScintillatorTester_cfg.py b/Geometry/HcalCommonData/test/python/runHcalScintillatorTester_cfg.py index 25b157db6b323..5c7023a579fc9 100644 --- a/Geometry/HcalCommonData/test/python/runHcalScintillatorTester_cfg.py +++ b/Geometry/HcalCommonData/test/python/runHcalScintillatorTester_cfg.py @@ -10,7 +10,7 @@ ) if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') + process.MessageLogger.HCalGeom=dict() process.hpa = cms.EDAnalyzer("HcalScintillatorTester") diff --git a/Geometry/HcalCommonData/test/python/runHcalSimNumberingDD4hepTester_cfg.py b/Geometry/HcalCommonData/test/python/runHcalSimNumberingDD4hepTester_cfg.py index be44e24b4bbb3..7f312193e4870 100644 --- a/Geometry/HcalCommonData/test/python/runHcalSimNumberingDD4hepTester_cfg.py +++ b/Geometry/HcalCommonData/test/python/runHcalSimNumberingDD4hepTester_cfg.py @@ -7,7 +7,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HcalGeom') + process.MessageLogger.HcalGeom=dict() process.source = cms.Source("EmptySource") process.maxEvents = cms.untracked.PSet( diff --git a/Geometry/HcalCommonData/test/python/runHcalSimNumberingDDDTester_cfg.py b/Geometry/HcalCommonData/test/python/runHcalSimNumberingDDDTester_cfg.py index 175507d3653a3..46d6b140809ad 100644 --- a/Geometry/HcalCommonData/test/python/runHcalSimNumberingDDDTester_cfg.py +++ b/Geometry/HcalCommonData/test/python/runHcalSimNumberingDDDTester_cfg.py @@ -10,7 +10,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HcalGeom') + process.MessageLogger.HcalGeom=dict() process.source = cms.Source("EmptySource") process.maxEvents = cms.untracked.PSet( diff --git a/Geometry/HcalCommonData/test/python/runHcalSimParametersAnalyzer_cfg.py b/Geometry/HcalCommonData/test/python/runHcalSimParametersAnalyzer_cfg.py deleted file mode 100644 index a41491b09e1f4..0000000000000 --- a/Geometry/HcalCommonData/test/python/runHcalSimParametersAnalyzer_cfg.py +++ /dev/null @@ -1,23 +0,0 @@ -import FWCore.ParameterSet.Config as cms -process = cms.Process("HcalParametersTest") - -process.load('Geometry.HcalCommonData.testPhase2GeometryFineXML_cfi') -process.load('Geometry.HcalCommonData.hcalParameters_cfi') -process.load('Geometry.HcalCommonData.hcalSimulationParameters_cff') -process.load('Geometry.HcalCommonData.caloSimulationParameters_cff') -process.load('FWCore.MessageService.MessageLogger_cfi') - -process.source = cms.Source("EmptySource") -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(1) - ) - -if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - -process.hpa = cms.EDAnalyzer("HcalSimParametersAnalyzer") - -process.Timing = cms.Service("Timing") -process.SimpleMemoryCheck = cms.Service("SimpleMemoryCheck") - -process.p1 = cms.Path(process.hpa) diff --git a/Geometry/HcalCommonData/test/python/runHcalSimParametersDD4Hep_cfg.py b/Geometry/HcalCommonData/test/python/runHcalSimParametersDD4Hep_cfg.py new file mode 100644 index 0000000000000..5b409bb60c651 --- /dev/null +++ b/Geometry/HcalCommonData/test/python/runHcalSimParametersDD4Hep_cfg.py @@ -0,0 +1,20 @@ +import FWCore.ParameterSet.Config as cms +from Configuration.Eras.Era_Run3_dd4hep_cff import Run3_dd4hep + +process = cms.Process("HcalParametersTest",Run3_dd4hep) + +process.load("Configuration.Geometry.GeometryDD4hepExtended2021Reco_cff") +process.load('FWCore.MessageService.MessageLogger_cfi') + +process.MessageLogger.cerr.FwkReport.reportEvery = 5 +if hasattr(process,'MessageLogger'): + process.MessageLogger.HCalGeom=dict() + +process.source = cms.Source("EmptySource") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) + ) + +process.hpa = cms.EDAnalyzer("HcalSimParametersAnalyzer") + +process.p1 = cms.Path(process.hpa) diff --git a/Geometry/HcalCommonData/test/python/runHcalSimParametersDDD_cfg.py b/Geometry/HcalCommonData/test/python/runHcalSimParametersDDD_cfg.py new file mode 100644 index 0000000000000..f3145cd048116 --- /dev/null +++ b/Geometry/HcalCommonData/test/python/runHcalSimParametersDDD_cfg.py @@ -0,0 +1,19 @@ +import FWCore.ParameterSet.Config as cms +from Configuration.Eras.Era_Run3_cff import Run3 + +process = cms.Process("HcalParametersTest",Run3) + +process.load("Configuration.Geometry.GeometryExtended2021Reco_cff") +process.load('FWCore.MessageService.MessageLogger_cfi') + +process.source = cms.Source("EmptySource") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) + ) + +if hasattr(process,'MessageLogger'): + process.MessageLogger.HCalGeom=dict() + +process.hpa = cms.EDAnalyzer("HcalSimParametersAnalyzer") + +process.p1 = cms.Path(process.hpa) diff --git a/Geometry/HcalCommonData/test/python/runHcalSimParametersTester_cfg.py b/Geometry/HcalCommonData/test/python/runHcalSimParametersTester_cfg.py deleted file mode 100644 index 6ece1f92e939d..0000000000000 --- a/Geometry/HcalCommonData/test/python/runHcalSimParametersTester_cfg.py +++ /dev/null @@ -1,35 +0,0 @@ -import FWCore.ParameterSet.Config as cms -process = cms.Process("HcalParametersTest") - -process.load('Geometry.HcalCommonData.hcalParameters_cfi') -process.load('Geometry.HcalCommonData.hcalSimulationParameters_cff') -process.load('Geometry.HcalCommonData.caloSimulationParameters_cff') -process.load('FWCore.MessageService.MessageLogger_cfi') - -process.MessageLogger.cerr.FwkReport.reportEvery = 5 -if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - process.MessageLogger.categories.append('Geometry') - -process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", - confGeomXMLFiles = cms.FileInPath('Geometry/HcalAlgo/data/cms-test-ddhcalPhase2-algorithm.xml'), - appendToDataLabel = cms.string('') - ) - -process.DDCompactViewESProducer = cms.ESProducer("DDCompactViewESProducer", - appendToDataLabel = cms.string('') -) - -process.source = cms.Source("EmptySource") -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(1) - ) -process.caloSimulationParameters.fromDD4Hep = cms.bool(True) -process.hcalSimulationParameters.fromDD4Hep = cms.bool(True) - -process.hpa = cms.EDAnalyzer("HcalSimParametersAnalyzer") - -process.Timing = cms.Service("Timing") -process.SimpleMemoryCheck = cms.Service("SimpleMemoryCheck") - -process.p1 = cms.Path(process.hpa) diff --git a/Geometry/HcalCommonData/test/python/testPhase1_cfg.py b/Geometry/HcalCommonData/test/python/testPhase1_cfg.py new file mode 100644 index 0000000000000..326554963a7f7 --- /dev/null +++ b/Geometry/HcalCommonData/test/python/testPhase1_cfg.py @@ -0,0 +1,184 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Run3_cff import Run3 + +process = cms.Process('SIM',Run3) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedRun3RoundOptics25ns13TeVLowSigmaZ_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +process.load('Geometry.HcalCommonData.testPhase1GeometryXML_cfi') +process.load('Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff') +process.load('Geometry.EcalCommonData.ecalSimulationParameters_cff') +process.load('Geometry.HcalCommonData.hcalDDDSimConstants_cff') +process.load('Geometry.MuonNumbering.muonGeometryConstants_cff') +process.load('Geometry.MuonNumbering.muonOffsetESProducer_cff') + +if hasattr(process,'MessageLogger'): + process.MessageLogger.EcalGeom=dict() +# process.MessageLogger.Geometry=dict() +# process.MessageLogger.TrackerGeometryBuilder=dict() +# process.MessageLogger.TrackerSimInfoNumbering=dict() + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(10), + output = cms.optional.untracked.allowed(cms.int32,cms.PSet) +) + +# Input source +process.source = cms.Source("EmptySource") + +process.options = cms.untracked.PSet( + FailPath = cms.untracked.vstring(), + IgnoreCompletely = cms.untracked.vstring(), + Rethrow = cms.untracked.vstring(), + SkipEvent = cms.untracked.vstring(), + allowUnscheduled = cms.obsolete.untracked.bool, + canDeleteEarly = cms.untracked.vstring(), + emptyRunLumiMode = cms.obsolete.untracked.string, + eventSetup = cms.untracked.PSet( + forceNumberOfConcurrentIOVs = cms.untracked.PSet( + + ), + numberOfConcurrentIOVs = cms.untracked.uint32(1) + ), + fileMode = cms.untracked.string('FULLMERGE'), + forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False), + makeTriggerResults = cms.obsolete.untracked.bool, + numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(1), + numberOfConcurrentRuns = cms.untracked.uint32(1), + numberOfStreams = cms.untracked.uint32(0), + numberOfThreads = cms.untracked.uint32(1), + printDependencies = cms.untracked.bool(False), + sizeOfStackForThreadsInKB = cms.optional.untracked.uint32, + throwIfIllegalParameter = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(False) +) + +# Production Info +process.configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('ZMM_14TeV_TuneCP5_cfi nevts:10'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +# Output definition + +process.FEVTDEBUGoutput = cms.OutputModule("PoolOutputModule", + SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring('generation_step') + ), + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('GEN-SIM'), + filterName = cms.untracked.string('') + ), + fileName = cms.untracked.string('file:step1_ZMM_Phase1.root'), + outputCommands = process.FEVTDEBUGEventContent.outputCommands, + splitLevel = cms.untracked.int32(0) +) + +# Additional output definition + +# Other statements +process.genstepfilter.triggerConditions=cms.vstring("generation_step") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') + +process.generator = cms.EDFilter("Pythia8GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(14000.0), + PythiaParameters = cms.PSet( + pythia8CommonSettings = cms.vstring( + 'Tune:preferLHAPDF = 2', + 'Main:timesAllowErrors = 10000', + 'Check:epTolErr = 0.01', + 'Beams:setProductionScalesFromLHEF = off', + 'SLHA:minMassSM = 1000.', + 'ParticleDecays:limitTau0 = on', + 'ParticleDecays:tau0Max = 10', + 'ParticleDecays:allowPhotonRadiation = on', + ), + pythia8CP5Settings = cms.vstring( + 'Tune:pp 14', + 'Tune:ee 7', + 'MultipartonInteractions:ecmPow=0.03344', + 'MultipartonInteractions:bProfile=2', + 'MultipartonInteractions:pT0Ref=1.41', + 'MultipartonInteractions:coreRadius=0.7634', + 'MultipartonInteractions:coreFraction=0.63', + 'ColourReconnection:range=5.176', + 'SigmaTotal:zeroAXB=off', + 'SpaceShower:alphaSorder=2', + 'SpaceShower:alphaSvalue=0.118', + 'SigmaProcess:alphaSvalue=0.118', + 'SigmaProcess:alphaSorder=2', + 'MultipartonInteractions:alphaSvalue=0.118', + 'MultipartonInteractions:alphaSorder=2', + 'TimeShower:alphaSorder=2', + 'TimeShower:alphaSvalue=0.118', + 'SigmaTotal:mode = 0', + 'SigmaTotal:sigmaEl = 21.89', + 'SigmaTotal:sigmaTot = 100.309', + 'PDF:pSet=LHAPDF6:NNPDF31_nnlo_as_0118', + ), + processParameters = cms.vstring( + 'WeakSingleBoson:ffbar2gmZ = on', + '23:onMode = off', + '23:onIfAny = 13', + 'PhaseSpace:mHatMin = 75.', + ), + parameterSets = cms.vstring('pythia8CommonSettings', + 'pythia8CP5Settings', + 'processParameters', + ) + ) +) + +process.mumugenfilter = cms.EDFilter("MCParticlePairFilter", + MaxEta = cms.untracked.vdouble(4.0, 4.0), + MinEta = cms.untracked.vdouble(-4.0, -4.0), + MinPt = cms.untracked.vdouble(2.5, 2.5), + ParticleCharge = cms.untracked.int32(-1), + ParticleID1 = cms.untracked.vint32(13), + ParticleID2 = cms.untracked.vint32(13), + Status = cms.untracked.vint32(1, 1) +) + + +process.ProductionFilterSequence = cms.Sequence(process.generator+process.mumugenfilter) + +# Path and EndPath definitions +process.generation_step = cms.Path(process.pgen) +process.simulation_step = cms.Path(process.psim) +process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.FEVTDEBUGoutput_step = cms.EndPath(process.FEVTDEBUGoutput) + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step,process.genfiltersummary_step,process.simulation_step,process.endjob_step,process.FEVTDEBUGoutput_step) +from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask +associatePatAlgosToolsTask(process) +# filter all path with the production filter sequence +for path in process.paths: + getattr(process,path).insert(0, process.ProductionFilterSequence) + + +# Customisation from command line + +# Add early deletion of temporary data products to reduce peak memory need +from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete +process = customiseEarlyDelete(process) +# End adding early deletion diff --git a/Geometry/HcalCommonData/test/python/testPhase2_cfg.py b/Geometry/HcalCommonData/test/python/testPhase2_cfg.py new file mode 100644 index 0000000000000..8203d82379c67 --- /dev/null +++ b/Geometry/HcalCommonData/test/python/testPhase2_cfg.py @@ -0,0 +1,187 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Phase2C11M9_cff import Phase2C11M9 + +process = cms.Process('SIM',Phase2C11M9) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedRun3RoundOptics25ns13TeVLowSigmaZ_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +process.load('Geometry.HcalCommonData.testPhase2GeometryXML_cfi') +process.load('Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff') +process.load('Geometry.EcalCommonData.ecalSimulationParameters_cff') +process.load('Geometry.HcalCommonData.hcalDDDSimConstants_cff') +process.load('Geometry.MuonNumbering.muonGeometryConstants_cff') +process.load('Geometry.MuonNumbering.muonOffsetESProducer_cff') +process.load('Geometry.HGCalCommonData.hgcalParametersInitialization_cfi') +process.load('Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi') +process.load('Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff') + +if hasattr(process,'MessageLogger'): + process.MessageLogger.EcalGeom=dict() +# process.MessageLogger.Geometry=dict() +# process.MessageLogger.TrackerGeometryBuilder=dict() +# process.MessageLogger.TrackerSimInfoNumbering=dict() + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(10), + output = cms.optional.untracked.allowed(cms.int32,cms.PSet) +) + +# Input source +process.source = cms.Source("EmptySource") + +process.options = cms.untracked.PSet( + FailPath = cms.untracked.vstring(), + IgnoreCompletely = cms.untracked.vstring(), + Rethrow = cms.untracked.vstring(), + SkipEvent = cms.untracked.vstring(), + allowUnscheduled = cms.obsolete.untracked.bool, + canDeleteEarly = cms.untracked.vstring(), + emptyRunLumiMode = cms.obsolete.untracked.string, + eventSetup = cms.untracked.PSet( + forceNumberOfConcurrentIOVs = cms.untracked.PSet( + + ), + numberOfConcurrentIOVs = cms.untracked.uint32(1) + ), + fileMode = cms.untracked.string('FULLMERGE'), + forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False), + makeTriggerResults = cms.obsolete.untracked.bool, + numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(1), + numberOfConcurrentRuns = cms.untracked.uint32(1), + numberOfStreams = cms.untracked.uint32(0), + numberOfThreads = cms.untracked.uint32(1), + printDependencies = cms.untracked.bool(False), + sizeOfStackForThreadsInKB = cms.optional.untracked.uint32, + throwIfIllegalParameter = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(False) +) + +# Production Info +process.configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('ZMM_14TeV_TuneCP5_cfi nevts:10'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +# Output definition + +process.FEVTDEBUGoutput = cms.OutputModule("PoolOutputModule", + SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring('generation_step') + ), + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('GEN-SIM'), + filterName = cms.untracked.string('') + ), + fileName = cms.untracked.string('file:step1_ZMM_phase2.root'), + outputCommands = process.FEVTDEBUGEventContent.outputCommands, + splitLevel = cms.untracked.int32(0) +) + +# Additional output definition + +# Other statements +process.genstepfilter.triggerConditions=cms.vstring("generation_step") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic_T21', '') + +process.generator = cms.EDFilter("Pythia8GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(14000.0), + PythiaParameters = cms.PSet( + pythia8CommonSettings = cms.vstring( + 'Tune:preferLHAPDF = 2', + 'Main:timesAllowErrors = 10000', + 'Check:epTolErr = 0.01', + 'Beams:setProductionScalesFromLHEF = off', + 'SLHA:minMassSM = 1000.', + 'ParticleDecays:limitTau0 = on', + 'ParticleDecays:tau0Max = 10', + 'ParticleDecays:allowPhotonRadiation = on', + ), + pythia8CP5Settings = cms.vstring( + 'Tune:pp 14', + 'Tune:ee 7', + 'MultipartonInteractions:ecmPow=0.03344', + 'MultipartonInteractions:bProfile=2', + 'MultipartonInteractions:pT0Ref=1.41', + 'MultipartonInteractions:coreRadius=0.7634', + 'MultipartonInteractions:coreFraction=0.63', + 'ColourReconnection:range=5.176', + 'SigmaTotal:zeroAXB=off', + 'SpaceShower:alphaSorder=2', + 'SpaceShower:alphaSvalue=0.118', + 'SigmaProcess:alphaSvalue=0.118', + 'SigmaProcess:alphaSorder=2', + 'MultipartonInteractions:alphaSvalue=0.118', + 'MultipartonInteractions:alphaSorder=2', + 'TimeShower:alphaSorder=2', + 'TimeShower:alphaSvalue=0.118', + 'SigmaTotal:mode = 0', + 'SigmaTotal:sigmaEl = 21.89', + 'SigmaTotal:sigmaTot = 100.309', + 'PDF:pSet=LHAPDF6:NNPDF31_nnlo_as_0118', + ), + processParameters = cms.vstring( + 'WeakSingleBoson:ffbar2gmZ = on', + '23:onMode = off', + '23:onIfAny = 13', + 'PhaseSpace:mHatMin = 75.', + ), + parameterSets = cms.vstring('pythia8CommonSettings', + 'pythia8CP5Settings', + 'processParameters', + ) + ) +) + +process.mumugenfilter = cms.EDFilter("MCParticlePairFilter", + MaxEta = cms.untracked.vdouble(4.0, 4.0), + MinEta = cms.untracked.vdouble(-4.0, -4.0), + MinPt = cms.untracked.vdouble(2.5, 2.5), + ParticleCharge = cms.untracked.int32(-1), + ParticleID1 = cms.untracked.vint32(13), + ParticleID2 = cms.untracked.vint32(13), + Status = cms.untracked.vint32(1, 1) +) + + +process.ProductionFilterSequence = cms.Sequence(process.generator+process.mumugenfilter) + +# Path and EndPath definitions +process.generation_step = cms.Path(process.pgen) +process.simulation_step = cms.Path(process.psim) +process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.FEVTDEBUGoutput_step = cms.EndPath(process.FEVTDEBUGoutput) + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step,process.genfiltersummary_step,process.simulation_step,process.endjob_step,process.FEVTDEBUGoutput_step) +from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask +associatePatAlgosToolsTask(process) +# filter all path with the production filter sequence +for path in process.paths: + getattr(process,path).insert(0, process.ProductionFilterSequence) + + +# Customisation from command line + +# Add early deletion of temporary data products to reduce peak memory need +from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete +process = customiseEarlyDelete(process) +# End adding early deletion diff --git a/Geometry/HcalSimData/data/CaloUtil/2021/v1/CaloUtil.xml b/Geometry/HcalSimData/data/CaloUtil/2021/v1/CaloUtil.xml new file mode 100644 index 0000000000000..bc2855fe1a5aa --- /dev/null +++ b/Geometry/HcalSimData/data/CaloUtil/2021/v1/CaloUtil.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HcalSimData/data/CaloUtil/2026/v1c/CaloUtil.xml b/Geometry/HcalSimData/data/CaloUtil/2026/v1c/CaloUtil.xml new file mode 100644 index 0000000000000..8bb4b53ed34a8 --- /dev/null +++ b/Geometry/HcalSimData/data/CaloUtil/2026/v1c/CaloUtil.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml b/Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml new file mode 100644 index 0000000000000..eb1b8648c41db --- /dev/null +++ b/Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HcalSimData/data/CaloUtil/2026/v3/CaloUtil.xml b/Geometry/HcalSimData/data/CaloUtil/2026/v3/CaloUtil.xml index 1a8a4c6bddcf2..cf835fd562d29 100644 --- a/Geometry/HcalSimData/data/CaloUtil/2026/v3/CaloUtil.xml +++ b/Geometry/HcalSimData/data/CaloUtil/2026/v3/CaloUtil.xml @@ -73,7 +73,7 @@ - + diff --git a/Geometry/HcalSimData/data/CaloUtil/2026/v3c/CaloUtil.xml b/Geometry/HcalSimData/data/CaloUtil/2026/v3c/CaloUtil.xml new file mode 100644 index 0000000000000..7778aa0996783 --- /dev/null +++ b/Geometry/HcalSimData/data/CaloUtil/2026/v3c/CaloUtil.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HcalSimData/data/CaloUtil/2026/v4/CaloUtil.xml b/Geometry/HcalSimData/data/CaloUtil/2026/v4/CaloUtil.xml index 6a69473f13bcd..9b82a53202ff3 100644 --- a/Geometry/HcalSimData/data/CaloUtil/2026/v4/CaloUtil.xml +++ b/Geometry/HcalSimData/data/CaloUtil/2026/v4/CaloUtil.xml @@ -73,7 +73,7 @@ - + diff --git a/Geometry/HcalSimData/data/CaloUtil/2026/v4c/CaloUtil.xml b/Geometry/HcalSimData/data/CaloUtil/2026/v4c/CaloUtil.xml new file mode 100644 index 0000000000000..a9ab94bd0c650 --- /dev/null +++ b/Geometry/HcalSimData/data/CaloUtil/2026/v4c/CaloUtil.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HcalSimData/data/CaloUtil/2026/v5/CaloUtil.xml b/Geometry/HcalSimData/data/CaloUtil/2026/v5/CaloUtil.xml new file mode 100644 index 0000000000000..72b5c8d5ee2a2 --- /dev/null +++ b/Geometry/HcalSimData/data/CaloUtil/2026/v5/CaloUtil.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HcalSimData/data/CaloUtil/2026/v5c/CaloUtil.xml b/Geometry/HcalSimData/data/CaloUtil/2026/v5c/CaloUtil.xml new file mode 100644 index 0000000000000..6a12be426fd00 --- /dev/null +++ b/Geometry/HcalSimData/data/CaloUtil/2026/v5c/CaloUtil.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HcalSimData/data/HcalProdCuts/2021/v2/HcalProdCuts.xml b/Geometry/HcalSimData/data/HcalProdCuts/2021/v2/HcalProdCuts.xml new file mode 100644 index 0000000000000..4a69e0bbb0062 --- /dev/null +++ b/Geometry/HcalSimData/data/HcalProdCuts/2021/v2/HcalProdCuts.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Geometry/HcalTestBeamData/test/python/run2004_cfg.py b/Geometry/HcalTestBeamData/test/python/run2004_cfg.py index 9c41ddea372fa..0be13d2683fde 100644 --- a/Geometry/HcalTestBeamData/test/python/run2004_cfg.py +++ b/Geometry/HcalTestBeamData/test/python/run2004_cfg.py @@ -28,14 +28,14 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - process.MessageLogger.categories.append('EcalGeom') - process.MessageLogger.categories.append('HcalSim') - process.MessageLogger.categories.append('HcalTBSim') - process.MessageLogger.categories.append('EcalSim') - process.MessageLogger.categories.append('CaloSim') - process.MessageLogger.categories.append('SimHCalData') - process.MessageLogger.categories.append('VertexGenerator') + process.MessageLogger.HCalGeom=dict() + process.MessageLogger.EcalGeom=dict() + process.MessageLogger.HcalSim=dict() + process.MessageLogger.HcalTBSim=dict() + process.MessageLogger.EcalSim=dict() + process.MessageLogger.CaloSim=dict() + process.MessageLogger.SimHCalData=dict() + process.MessageLogger.VertexGenerator=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HcalTestBeamData/test/python/testHcalTBParameterDD4Hep_cfg.py b/Geometry/HcalTestBeamData/test/python/testHcalTBParameterDD4Hep_cfg.py index a27b03735753f..33a783806968e 100644 --- a/Geometry/HcalTestBeamData/test/python/testHcalTBParameterDD4Hep_cfg.py +++ b/Geometry/HcalTestBeamData/test/python/testHcalTBParameterDD4Hep_cfg.py @@ -25,12 +25,12 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - process.MessageLogger.categories.append('EcalGeom') - process.MessageLogger.categories.append('HcalSim') - process.MessageLogger.categories.append('HcalTBSim') - process.MessageLogger.categories.append('EcalSim') - process.MessageLogger.categories.append('CaloSim') + process.MessageLogger.HCalGeom=dict() + process.MessageLogger.EcalGeom=dict() + process.MessageLogger.HcalSim=dict() + process.MessageLogger.HcalTBSim=dict() + process.MessageLogger.EcalSim=dict() + process.MessageLogger.CaloSim=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/HcalTestBeamData/test/python/testHcalTBParameterDDD_cfg.py b/Geometry/HcalTestBeamData/test/python/testHcalTBParameterDDD_cfg.py index b8951a3f27c16..09c975f08d121 100644 --- a/Geometry/HcalTestBeamData/test/python/testHcalTBParameterDDD_cfg.py +++ b/Geometry/HcalTestBeamData/test/python/testHcalTBParameterDDD_cfg.py @@ -17,12 +17,12 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - process.MessageLogger.categories.append('EcalGeom') - process.MessageLogger.categories.append('HcalSim') - process.MessageLogger.categories.append('HcalTBSim') - process.MessageLogger.categories.append('EcalSim') - process.MessageLogger.categories.append('CaloSim') + process.MessageLogger.HCalGeom=dict() + process.MessageLogger.EcalGeom=dict() + process.MessageLogger.HcalSim=dict() + process.MessageLogger.HcalTBSim=dict() + process.MessageLogger.EcalSim=dict() + process.MessageLogger.CaloSim=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/MTDCommonData/data/CrystalBar/mtd.xml b/Geometry/MTDCommonData/data/CrystalBar/mtd.xml deleted file mode 100644 index f1c9431471126..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalBar/mtd.xml +++ /dev/null @@ -1,5859 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - diff --git a/Geometry/MTDCommonData/data/CrystalBar/mtdParameters.xml b/Geometry/MTDCommonData/data/CrystalBar/mtdParameters.xml deleted file mode 100644 index 5b76233e8fd93..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalBar/mtdParameters.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - 4, 4, 4, 24 - - - 22, 24, 16, 10, 0x1, 0x3, 0x3F, 0x3F, 1, 16, 4, 1 - - - 22, 24, 16, 7, 0x1, 0x3, 0x3F, 0xFF, 24, 4, 2, 8 - - - - diff --git a/Geometry/MTDCommonData/data/CrystalBar/mtdStructureTopology.xml b/Geometry/MTDCommonData/data/CrystalBar/mtdStructureTopology.xml deleted file mode 100644 index 0ddde03dda7de..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalBar/mtdStructureTopology.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/Geometry/MTDCommonData/data/CrystalBarPhiFlat/mtd.xml b/Geometry/MTDCommonData/data/CrystalBarPhiFlat/mtd.xml deleted file mode 100644 index 516726c307eb9..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalBarPhiFlat/mtd.xml +++ /dev/null @@ -1,5125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - diff --git a/Geometry/MTDCommonData/data/CrystalBarPhiFlat/v2/mtd.xml b/Geometry/MTDCommonData/data/CrystalBarPhiFlat/v2/mtd.xml deleted file mode 100644 index da8ec408fd60b..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalBarPhiFlat/v2/mtd.xml +++ /dev/null @@ -1,5135 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - diff --git a/Geometry/MTDCommonData/data/CrystalBarPhiFlat/v3/mtd.xml b/Geometry/MTDCommonData/data/CrystalBarPhiFlat/v3/mtd.xml index f2eeba6e42936..8eb791c234552 100644 --- a/Geometry/MTDCommonData/data/CrystalBarPhiFlat/v3/mtd.xml +++ b/Geometry/MTDCommonData/data/CrystalBarPhiFlat/v3/mtd.xml @@ -4841,8 +4841,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,2.85 + +0*mm,0*mm,2.85*mm @@ -4855,8 +4855,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,-2.85 + +0*mm,0*mm,-2.85*mm @@ -4869,8 +4869,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,2.85 + +0*mm,0*mm,2.85*mm @@ -4883,8 +4883,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,-2.85 + +0*mm,0*mm,-2.85*mm @@ -4897,8 +4897,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,2.85 + +0*mm,0*mm,2.85*mm @@ -4911,8 +4911,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,-2.85 + +0*mm,0*mm,-2.85*mm @@ -4925,8 +4925,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,2.85 + +0*mm,0*mm,2.85*mm @@ -4939,8 +4939,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,-2.85 + +0*mm,0*mm,-2.85*mm @@ -4953,8 +4953,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,2.85 + +0*mm,0*mm,2.85*mm @@ -4967,8 +4967,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,-2.85 + +0*mm,0*mm,-2.85*mm @@ -4981,8 +4981,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,2.85 + +0*mm,0*mm,2.85*mm @@ -4995,8 +4995,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,-2.85 + +0*mm,0*mm,-2.85*mm @@ -5009,8 +5009,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,2.85 + +0*mm,0*mm,2.85*mm @@ -5023,8 +5023,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,-2.85 + +0*mm,0*mm,-2.85*mm @@ -5037,8 +5037,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,2.85 + +0*mm,0*mm,2.85*mm @@ -5051,8 +5051,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,-2.85 + +0*mm,0*mm,-2.85*mm @@ -5065,8 +5065,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,2.85 + +0*mm,0*mm,2.85*mm @@ -5079,8 +5079,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,-2.85 + +0*mm,0*mm,-2.85*mm @@ -5093,8 +5093,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,2.85 + +0*mm,0*mm,2.85*mm @@ -5107,8 +5107,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,-2.85 + +0*mm,0*mm,-2.85*mm @@ -5121,8 +5121,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,2.85 + +0*mm,0*mm,2.85*mm @@ -5135,8 +5135,8 @@ note: see MTD_D38ETLV2_V0001_2019_03_14.cfg for full config files - -0,0,-2.85 + +0*mm,0*mm,-2.85*mm diff --git a/Geometry/MTDCommonData/data/CrystalBarPhiFlatOldTh/mtd.xml b/Geometry/MTDCommonData/data/CrystalBarPhiFlatOldTh/mtd.xml deleted file mode 100644 index fadb5deb8704d..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalBarPhiFlatOldTh/mtd.xml +++ /dev/null @@ -1,5125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - diff --git a/Geometry/MTDCommonData/data/CrystalBarPhiFlatOldTh/mtdParameters.xml b/Geometry/MTDCommonData/data/CrystalBarPhiFlatOldTh/mtdParameters.xml deleted file mode 100644 index 1b433a94bc794..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalBarPhiFlatOldTh/mtdParameters.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - 4, 4, 4, 24 - - - 22, 24, 16, 10, 0x1, 0x3, 0x3F, 0x3F, 1, 16, 3, 1 - - - 22, 24, 16, 7, 0x1, 0x3, 0x3F, 0xFF, 24, 4, 2, 8 - - - - diff --git a/Geometry/MTDCommonData/data/CrystalBarPhiFlatOldTh/mtdStructureTopology.xml b/Geometry/MTDCommonData/data/CrystalBarPhiFlatOldTh/mtdStructureTopology.xml deleted file mode 100644 index ad7fd5bf9191a..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalBarPhiFlatOldTh/mtdStructureTopology.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/Geometry/MTDCommonData/data/CrystalBarZ/mtd.xml b/Geometry/MTDCommonData/data/CrystalBarZ/mtd.xml deleted file mode 100644 index 014d52ebc6e71..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalBarZ/mtd.xml +++ /dev/null @@ -1,5859 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - diff --git a/Geometry/MTDCommonData/data/CrystalBarZflat/mtd.xml b/Geometry/MTDCommonData/data/CrystalBarZflat/mtd.xml deleted file mode 100644 index 391b75e3559b5..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalBarZflat/mtd.xml +++ /dev/null @@ -1,5689 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - diff --git a/Geometry/MTDCommonData/data/CrystalBarZflat/mtdParameters.xml b/Geometry/MTDCommonData/data/CrystalBarZflat/mtdParameters.xml deleted file mode 100644 index 6ab58fe75b58c..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalBarZflat/mtdParameters.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - 4, 4, 4, 24 - - - 22, 24, 16, 10, 0x1, 0x3, 0x3F, 0x3F, 16, 1, 4, 1 - - - 22, 24, 16, 7, 0x1, 0x3, 0x3F, 0xFF, 24, 4, 2, 8 - - - - diff --git a/Geometry/MTDCommonData/data/CrystalBarZflat/mtdStructureTopology.xml b/Geometry/MTDCommonData/data/CrystalBarZflat/mtdStructureTopology.xml deleted file mode 100644 index a4f1aadc9708a..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalBarZflat/mtdStructureTopology.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/Geometry/MTDCommonData/data/CrystalBarZflatNOhole/mtd.xml b/Geometry/MTDCommonData/data/CrystalBarZflatNOhole/mtd.xml deleted file mode 100644 index 7dc1467ef872d..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalBarZflatNOhole/mtd.xml +++ /dev/null @@ -1,5689 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - diff --git a/Geometry/MTDCommonData/data/CrystalBarZflatNOhole/mtdParameters.xml b/Geometry/MTDCommonData/data/CrystalBarZflatNOhole/mtdParameters.xml deleted file mode 100644 index 6ab58fe75b58c..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalBarZflatNOhole/mtdParameters.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - 4, 4, 4, 24 - - - 22, 24, 16, 10, 0x1, 0x3, 0x3F, 0x3F, 16, 1, 4, 1 - - - 22, 24, 16, 7, 0x1, 0x3, 0x3F, 0xFF, 24, 4, 2, 8 - - - - diff --git a/Geometry/MTDCommonData/data/CrystalBarZflatNOhole/mtdStructureTopology.xml b/Geometry/MTDCommonData/data/CrystalBarZflatNOhole/mtdStructureTopology.xml deleted file mode 100644 index a4f1aadc9708a..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalBarZflatNOhole/mtdStructureTopology.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/Geometry/MTDCommonData/data/CrystalTile/mtd.xml b/Geometry/MTDCommonData/data/CrystalTile/mtd.xml deleted file mode 100644 index 986104986160b..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalTile/mtd.xml +++ /dev/null @@ -1,5898 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - - - - - - - - -0,0,2.85 - - - - - - - - - - - - - -0,0,-2.85 - - - - - - diff --git a/Geometry/MTDCommonData/data/CrystalTile/mtdParameters.xml b/Geometry/MTDCommonData/data/CrystalTile/mtdParameters.xml deleted file mode 100644 index 1fffef5798551..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalTile/mtdParameters.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - 4, 4, 4, 24 - - - 22, 24, 16, 10, 0x1, 0x3, 0x3F, 0x3F, 4, 4, 4, 1 - - - 22, 24, 16, 7, 0x1, 0x3, 0x3F, 0xFF, 24, 4, 2, 8 - - - - diff --git a/Geometry/MTDCommonData/data/CrystalTile/mtdStructureTopology.xml b/Geometry/MTDCommonData/data/CrystalTile/mtdStructureTopology.xml deleted file mode 100644 index d9b79e83ebea4..0000000000000 --- a/Geometry/MTDCommonData/data/CrystalTile/mtdStructureTopology.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/Geometry/MTDCommonData/data/dd4hep/cms-mtdD50-geometry.xml b/Geometry/MTDCommonData/data/dd4hep/cms-mtdD50-geometry.xml deleted file mode 100644 index 38b98b486b41f..0000000000000 --- a/Geometry/MTDCommonData/data/dd4hep/cms-mtdD50-geometry.xml +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/MTDCommonData/data/dd4hep/cms-mtdD72-geometry.xml b/Geometry/MTDCommonData/data/dd4hep/cms-mtdD72-geometry.xml deleted file mode 100644 index a1f0e314bce3d..0000000000000 --- a/Geometry/MTDCommonData/data/dd4hep/cms-mtdD72-geometry.xml +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/MTDCommonData/data/dd4hep/cms-mtdD73-geometry.xml b/Geometry/MTDCommonData/data/dd4hep/cms-mtdD73-geometry.xml deleted file mode 100644 index f583d073690a9..0000000000000 --- a/Geometry/MTDCommonData/data/dd4hep/cms-mtdD73-geometry.xml +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/MTDCommonData/data/dd4hep/cms-mtdD76-geometry.xml b/Geometry/MTDCommonData/data/dd4hep/cms-mtdD76-geometry.xml new file mode 100644 index 0000000000000..2a773eb82dcaa --- /dev/null +++ b/Geometry/MTDCommonData/data/dd4hep/cms-mtdD76-geometry.xml @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/MTDCommonData/data/etl.xml b/Geometry/MTDCommonData/data/etl.xml deleted file mode 100644 index bd923adda0417..0000000000000 --- a/Geometry/MTDCommonData/data/etl.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/MTDCommonData/data/etl/v1/etl.xml b/Geometry/MTDCommonData/data/etl/v1/etl.xml deleted file mode 100644 index bd923adda0417..0000000000000 --- a/Geometry/MTDCommonData/data/etl/v1/etl.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/MTDCommonData/data/etl/v4/etl.xml b/Geometry/MTDCommonData/data/etl/v4/etl.xml index c724fba5c8eb7..59647e8754e24 100644 --- a/Geometry/MTDCommonData/data/etl/v4/etl.xml +++ b/Geometry/MTDCommonData/data/etl/v4/etl.xml @@ -1,11 +1,11 @@ - + - + - - + + @@ -36,7 +36,7 @@ - + diff --git a/Geometry/MTDCommonData/data/etl/v5/etl.xml b/Geometry/MTDCommonData/data/etl/v5/etl.xml index 717e3bcd1d51c..20289c645572d 100644 --- a/Geometry/MTDCommonData/data/etl/v5/etl.xml +++ b/Geometry/MTDCommonData/data/etl/v5/etl.xml @@ -1,71 +1,94 @@ - + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - - - + + + + - - - - - - - - + + + + + + + + @@ -88,15 +111,15 @@ - [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], - [y_offset]+5*([SensorModule_Y]+[DeltaY]), [y_offset]+6*([SensorModule_Y]+[DeltaY]), [y_offset]+7*([SensorModule_Y]+[DeltaY]), [y_offset]+8*([SensorModule_Y]+[DeltaY]), [y_offset]+8*([SensorModule_Y]+[DeltaY]), [y_offset]+7*([SensorModule_Y]+[DeltaY]), [y_offset]+6*([SensorModule_Y]+[DeltaY]), [y_offset]+2*([SensorModule_Y]+[DeltaY]), - [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset] + [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], + [x_offset]+5*([SensorModule_X]+[DeltaX]), [x_offset]+6*([SensorModule_X]+[DeltaX]), [x_offset]+7*([SensorModule_X]+[DeltaX]), [x_offset]+8*([SensorModule_X]+[DeltaX]), [x_offset]+8*([SensorModule_X]+[DeltaX]), [x_offset]+7*([SensorModule_X]+[DeltaX]), [x_offset]+6*([SensorModule_X]+[DeltaX]), [x_offset]+2*([SensorModule_X]+[DeltaX]), + [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset] - [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], - [y_offset]+2*([SensorModule_Y]+[DeltaY]), [y_offset]+6*([SensorModule_Y]+[DeltaY]), [y_offset]+7*([SensorModule_Y]+[DeltaY]), [y_offset]+8*([SensorModule_Y]+[DeltaY]), [y_offset]+8*([SensorModule_Y]+[DeltaY]), [y_offset]+7*([SensorModule_Y]+[DeltaY]), [y_offset]+6*([SensorModule_Y]+[DeltaY]), [y_offset]+5*([SensorModule_Y]+[DeltaY]), - [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset] + [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], + [x_offset]+2*([SensorModule_X]+[DeltaX]), [x_offset]+6*([SensorModule_X]+[DeltaX]), [x_offset]+7*([SensorModule_X]+[DeltaX]), [x_offset]+8*([SensorModule_X]+[DeltaX]), [x_offset]+8*([SensorModule_X]+[DeltaX]), [x_offset]+7*([SensorModule_X]+[DeltaX]), [x_offset]+6*([SensorModule_X]+[DeltaX]), [x_offset]+5*([SensorModule_X]+[DeltaX]), + [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset] @@ -110,13 +133,13 @@ - [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset]+3*([SensorModule_Y]+[DeltaY]), - [y_offset]+6*([SensorModule_Y]+[DeltaY]), [y_offset]+7*([SensorModule_Y]+[DeltaY]), 0.8+[y_offset]+7*([SensorModule_Y]+[DeltaY]), [y_offset]+8*([SensorModule_Y]+[DeltaY]), [y_offset]+7*([SensorModule_Y]+[DeltaY]), [y_offset]+6*([SensorModule_Y]+[DeltaY]), [y_offset]+4*([SensorModule_Y]+[DeltaY]), [y_offset],[y_offset], [y_offset], [y_offset], [y_offset], [y_offset], - [y_offset], [y_offset], [y_offset], [y_offset] + [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset]+3*([SensorModule_X]+[DeltaX]), + [x_offset]+6*([SensorModule_X]+[DeltaX]), [x_offset]+7*([SensorModule_X]+[DeltaX]), [x_offset]+7*([SensorModule_X]+[DeltaX]), [x_offset]+8*([SensorModule_X]+[DeltaX]), [x_offset]+7*([SensorModule_X]+[DeltaX]), [x_offset]+6*([SensorModule_X]+[DeltaX]), [x_offset]+4*([SensorModule_X]+[DeltaX]), [x_offset],[x_offset], [x_offset], [x_offset], [x_offset], [x_offset], + [x_offset], [x_offset], [x_offset], [x_offset] - [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset]+4*([SensorModule_Y]+[DeltaY]), [y_offset]+6*([SensorModule_Y]+[DeltaY]), 0.8+[y_offset]+7*([SensorModule_Y]+[DeltaY]), [y_offset]+8*([SensorModule_Y]+[DeltaY]), [y_offset]+7*([SensorModule_Y]+[DeltaY]), [y_offset]+7*([SensorModule_Y]+[DeltaY]), [y_offset]+6*([SensorModule_Y]+[DeltaY]), [y_offset]+3*([SensorModule_Y]+[DeltaY]), [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset], [y_offset] + [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset]+4*([SensorModule_X]+[DeltaX]), [x_offset]+6*([SensorModule_X]+[DeltaX]), [x_offset]+7*([SensorModule_X]+[DeltaX]), [x_offset]+8*([SensorModule_X]+[DeltaX]), [x_offset]+7*([SensorModule_X]+[DeltaX]), [x_offset]+7*([SensorModule_X]+[DeltaX]), [x_offset]+6*([SensorModule_X]+[DeltaX]), [x_offset]+3*([SensorModule_X]+[DeltaX]), [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset], [x_offset] @@ -224,240 +247,243 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + @@ -467,1449 +493,1449 @@ - - - - - - - - - ([x_start_front])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-[DeltaX_ServiceModule])*mm, (1+[ServiceHybrid_Y7]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-2*[DeltaX_ServiceModule])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-2*[DeltaX_ServiceModule]-[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-3*[DeltaX_ServiceModule]-[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-3*[DeltaX_ServiceModule]-[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-4*[DeltaX_ServiceModule]-[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-4*[DeltaX_ServiceModule]-2*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-5*[DeltaX_ServiceModule]-2*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-5*[DeltaX_ServiceModule]-2*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-5*[DeltaX_ServiceModule]-2*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-6*[DeltaX_ServiceModule]-2*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-6*[DeltaX_ServiceModule]-3*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-7*[DeltaX_ServiceModule]-3*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-8*[DeltaX_ServiceModule]-3*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-8*[DeltaX_ServiceModule]-4*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-9*[DeltaX_ServiceModule]-4*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-9*[DeltaX_ServiceModule]-4*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-10*[DeltaX_ServiceModule]-4*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-10*[DeltaX_ServiceModule]-5*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-11*[DeltaX_ServiceModule]-5*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-11*[DeltaX_ServiceModule]-5*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-11*[DeltaX_ServiceModule]-5*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6]+[ServiceHybrid_Y6]+[DeltaY]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-12*[DeltaX_ServiceModule]-5*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-12*[DeltaX_ServiceModule]-6*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-13*[DeltaX_ServiceModule]-6*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-13*[DeltaX_ServiceModule]-6*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-13*[DeltaX_ServiceModule]-6*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-14*[DeltaX_ServiceModule]-6*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-14*[DeltaX_ServiceModule]-7*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-15*[DeltaX_ServiceModule]-7*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-16*[DeltaX_ServiceModule]-7*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-16*[DeltaX_ServiceModule]-8*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-17*[DeltaX_ServiceModule]-8*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-17*[DeltaX_ServiceModule]-8*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2+2*[ServiceHybrid_Y6]+2*[DeltaY]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-18*[DeltaX_ServiceModule]-8*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-18*[DeltaX_ServiceModule]-9*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-19*[DeltaX_ServiceModule]-9*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-19*[DeltaX_ServiceModule]-9*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-19*[DeltaX_ServiceModule]-9*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service6]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-20*[DeltaX_ServiceModule]-9*[SensorModule_X])*mm, ([y_offset]+2*[SensorModule_Y]+2*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-20*[DeltaX_ServiceModule]-10*[SensorModule_X])*mm, ([y_offset]+5*[SensorModule_Y]+5*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-21*[DeltaX_ServiceModule]-10*[SensorModule_X])*mm, ([y_offset]+6*[SensorModule_Y]+6*[DeltaY])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-21*[DeltaX_ServiceModule]-10*[SensorModule_X])*mm, ([y_offset]+6*[SensorModule_Y]+6*[DeltaY]+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-22*[DeltaX_ServiceModule]-10*[SensorModule_X])*mm, ([y_offset]+6*[SensorModule_Y]+6*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-22*[DeltaX_ServiceModule]-11*[SensorModule_X])*mm, ([y_offset]+6*[SensorModule_Y]+6*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-23*[DeltaX_ServiceModule]-11*[SensorModule_X])*mm, (5.78+[y_offset]+7*[SensorModule_Y]+7*[DeltaY])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-23*[DeltaX_ServiceModule]-11*[SensorModule_X])*mm, (5.78+[y_offset]+7*[SensorModule_Y]+6*[DeltaY]+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-24*[DeltaX_ServiceModule]-11*[SensorModule_X])*mm, ([y_offset]+7*[SensorModule_Y]+7*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-24*[DeltaX_ServiceModule]-12*[SensorModule_X])*mm, ([y_offset]+7*[SensorModule_Y]+7*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-25*[DeltaX_ServiceModule]-12*[SensorModule_X])*mm, (5.7+[y_offset]+8*[SensorModule_Y]+8*[DeltaY])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-25*[DeltaX_ServiceModule]-12*[SensorModule_X])*mm, (5.7+[y_offset]+8*[SensorModule_Y]+8*[DeltaY]+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-26*[DeltaX_ServiceModule]-12*[SensorModule_X])*mm, ([y_offset]+8*[SensorModule_Y]+8*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-26*[DeltaX_ServiceModule]-13*[SensorModule_X])*mm, ([y_offset]+8*[SensorModule_Y]+8*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-27*[DeltaX_ServiceModule]-13*[SensorModule_X])*mm, ([y_offset]+9*[SensorModule_Y]+9*[DeltaY])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-27*[DeltaX_ServiceModule]-13*[SensorModule_X])*mm, ([y_offset]+9*[SensorModule_Y]+9*[DeltaY]+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-27*[DeltaX_ServiceModule]-13*[SensorModule_X])*mm, ([y_offset]+9*[SensorModule_Y]+9*[DeltaY]+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service6]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-28*[DeltaX_ServiceModule]-13*[SensorModule_X])*mm, ([y_offset]+8*[SensorModule_Y]+8*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-28*[DeltaX_ServiceModule]-14*[SensorModule_X])*mm, ([y_offset]+8*[SensorModule_Y]+8*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-29*[DeltaX_ServiceModule]-14*[SensorModule_X])*mm, (5.7+[y_offset]+8*[SensorModule_Y]+8*[DeltaY])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-29*[DeltaX_ServiceModule]-14*[SensorModule_X])*mm, (5.7+[y_offset]+8*[SensorModule_Y]+8*[DeltaY]+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-30*[DeltaX_ServiceModule]-14*[SensorModule_X])*mm, ([y_offset]+7*[SensorModule_Y]+7*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-30*[DeltaX_ServiceModule]-15*[SensorModule_X])*mm, ([y_offset]+7*[SensorModule_Y]+7*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-31*[DeltaX_ServiceModule]-15*[SensorModule_X])*mm, (5.78+[y_offset]+7*[SensorModule_Y]+7*[DeltaY])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-31*[DeltaX_ServiceModule]-15*[SensorModule_X])*mm, (5.78+[y_offset]+7*[SensorModule_Y]+6*[DeltaY]+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-32*[DeltaX_ServiceModule]-15*[SensorModule_X])*mm, ([y_offset]+6*[SensorModule_Y]+6*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-32*[DeltaX_ServiceModule]-16*[SensorModule_X])*mm, ([y_offset]+6*[SensorModule_Y]+6*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-33*[DeltaX_ServiceModule]-16*[SensorModule_X])*mm, ([y_offset]+6*[SensorModule_Y]+6*[DeltaY])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-33*[DeltaX_ServiceModule]-16*[SensorModule_X])*mm, ([y_offset]+6*[SensorModule_Y]+6*[DeltaY]+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-34*[DeltaX_ServiceModule]-16*[SensorModule_X])*mm, ([y_offset]+5*[SensorModule_Y]+5*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-34*[DeltaX_ServiceModule]-17*[SensorModule_X])*mm, ([y_offset]+2*[SensorModule_Y]+2*[DeltaY])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-35*[DeltaX_ServiceModule]-17*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-35*[DeltaX_ServiceModule]-17*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-35*[DeltaX_ServiceModule]-17*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service6]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-36*[DeltaX_ServiceModule]-17*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-36*[DeltaX_ServiceModule]-18*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-37*[DeltaX_ServiceModule]-18*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-37*[DeltaX_ServiceModule]-18*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2+2*[ServiceHybrid_Y6]+2*[DeltaY]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-38*[DeltaX_ServiceModule]-18*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-38*[DeltaX_ServiceModule]-19*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-39*[DeltaX_ServiceModule]-19*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-40*[DeltaX_ServiceModule]-19*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-40*[DeltaX_ServiceModule]-20*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-41*[DeltaX_ServiceModule]-20*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-41*[DeltaX_ServiceModule]-20*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-41*[DeltaX_ServiceModule]-20*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-42*[DeltaX_ServiceModule]-20*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-42*[DeltaX_ServiceModule]-21*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-43*[DeltaX_ServiceModule]-21*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-43*[DeltaX_ServiceModule]-21*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-43*[DeltaX_ServiceModule]-21*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6]+[ServiceHybrid_Y6]+[DeltaY]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-44*[DeltaX_ServiceModule]-21*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-44*[DeltaX_ServiceModule]-22*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-45*[DeltaX_ServiceModule]-22*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-45*[DeltaX_ServiceModule]-22*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-46*[DeltaX_ServiceModule]-22*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-46*[DeltaX_ServiceModule]-23*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-47*[DeltaX_ServiceModule]-23*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-48*[DeltaX_ServiceModule]-23*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-48*[DeltaX_ServiceModule]-24*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-49*[DeltaX_ServiceModule]-24*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-49*[DeltaX_ServiceModule]-24*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-49*[DeltaX_ServiceModule]-24*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-50*[DeltaX_ServiceModule]-24*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-50*[DeltaX_ServiceModule]-25*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-51*[DeltaX_ServiceModule]-25*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-51*[DeltaX_ServiceModule]-25*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-52*[DeltaX_ServiceModule]-25*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-52*[DeltaX_ServiceModule]-26*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - - - - - - - - - - ([x_start_front]-53*[DeltaX_ServiceModule]-26*[SensorModule_X])*mm, (1+[ServiceHybrid_Y7]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_front]-54*[DeltaX_ServiceModule]-26*[SensorModule_X])*mm, ([y_offset])*mm, 4.02*mm - - - - + + + + + + + + + ([x_offset]), ([y_start_front]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X7]/2), ([y_start_front]+[DeltaY_ServiceModule]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+2*[DeltaY_ServiceModule]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+2*[DeltaY_ServiceModule]+[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid] +[ServiceHybrid_X6]/2), ([y_start_front]+3*[DeltaY_ServiceModule]+[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid] +[ServiceHybrid_X6]/2+[DeltaX_Service6_Service7]), ([y_start_front]+3*[DeltaY_ServiceModule]+[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+4*[DeltaY_ServiceModule]+[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+4*[DeltaY_ServiceModule]+2*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid] +[ServiceHybrid_X3]/2), ([y_start_front]+5*[DeltaY_ServiceModule]+2*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid] +[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_front]+5*[DeltaY_ServiceModule]+2*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_front]+5*[DeltaY_ServiceModule]+2*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+6*[DeltaY_ServiceModule]+2*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+6*[DeltaY_ServiceModule]+3*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+7*[DeltaY_ServiceModule]+3*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+8*[DeltaY_ServiceModule]+3*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+8*[DeltaY_ServiceModule]+4*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+9*[DeltaY_ServiceModule]+4*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2+[DeltaX_Service6_Service7]), ([y_start_front]+9*[DeltaY_ServiceModule]+4*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+10*[DeltaY_ServiceModule]+4*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+10*[DeltaY_ServiceModule]+5*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_front]+11*[DeltaY_ServiceModule]+5*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_front]+11*[DeltaY_ServiceModule]+5*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_front]+11*[DeltaY_ServiceModule]+5*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+12*[DeltaY_ServiceModule]+5*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+12*[DeltaY_ServiceModule]+6*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_front]+13*[DeltaY_ServiceModule]+6*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_front]+13*[DeltaY_ServiceModule]+6*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_front]+13*[DeltaY_ServiceModule]+6*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+14*[DeltaY_ServiceModule]+6*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+14*[DeltaY_ServiceModule]+7*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+15*[DeltaY_ServiceModule]+7*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+16*[DeltaY_ServiceModule]+7*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+16*[DeltaY_ServiceModule]+8*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+17*[DeltaY_ServiceModule]+8*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2+2*[ServiceHybrid_X6]+2*[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_front]+17*[DeltaY_ServiceModule]+8*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+18*[DeltaY_ServiceModule]+8*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+18*[DeltaY_ServiceModule]+9*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_front]+19*[DeltaY_ServiceModule]+9*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_front]+19*[DeltaY_ServiceModule]+9*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_front]+19*[DeltaY_ServiceModule]+9*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+2*[SensorModule_X]+2*[DeltaX]), ([y_start_front]+20*[DeltaY_ServiceModule]+9*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]+5*[SensorModule_X]+5*[DeltaX]), ([y_start_front]+20*[DeltaY_ServiceModule]+10*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]+6*[SensorModule_X]+6*[DeltaX]), ([y_start_front]+21*[DeltaY_ServiceModule]+10*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+6*[SensorModule_X]+6*[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_front]+21*[DeltaY_ServiceModule]+10*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+6*[SensorModule_X]+6*[DeltaX]), ([y_start_front]+22*[DeltaY_ServiceModule]+10*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]+6*[SensorModule_X]+6*[DeltaX]), ([y_start_front]+22*[DeltaY_ServiceModule]+11*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ( [x_offset]+7*[SensorModule_X]+7*[DeltaX]), ([y_start_front]+23*[DeltaY_ServiceModule]+11*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ( [x_offset]+7*[SensorModule_X]+6*[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_front]+23*[DeltaY_ServiceModule]+11*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+7*[SensorModule_X]+7*[DeltaX]), ([y_start_front]+24*[DeltaY_ServiceModule]+11*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]+7*[SensorModule_X]+7*[DeltaX]), ([y_start_front]+24*[DeltaY_ServiceModule]+12*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ( [x_offset]+8*[SensorModule_X]+8*[DeltaX]), ([y_start_front]+25*[DeltaY_ServiceModule]+12*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ( [x_offset]+8*[SensorModule_X]+8*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_front]+25*[DeltaY_ServiceModule]+12*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+8*[SensorModule_X]+8*[DeltaX]), ([y_start_front]+26*[DeltaY_ServiceModule]+12*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]+8*[SensorModule_X]+8*[DeltaX]), ([y_start_front]+26*[DeltaY_ServiceModule]+13*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]+9*[SensorModule_X]+9*[DeltaX]), ([y_start_front]+27*[DeltaY_ServiceModule]+13*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+9*[SensorModule_X]+9*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_front]+27*[DeltaY_ServiceModule]+13*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+9*[SensorModule_X]+9*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_front]+27*[DeltaY_ServiceModule]+13*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+8*[SensorModule_X]+8*[DeltaX]), ([y_start_front]+28*[DeltaY_ServiceModule]+13*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]+8*[SensorModule_X]+8*[DeltaX]), ([y_start_front]+28*[DeltaY_ServiceModule]+14*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ( [x_offset]+8*[SensorModule_X]+8*[DeltaX]), ([y_start_front]+29*[DeltaY_ServiceModule]+14*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ( [x_offset]+8*[SensorModule_X]+8*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_front]+29*[DeltaY_ServiceModule]+14*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+7*[SensorModule_X]+7*[DeltaX]), ([y_start_front]+30*[DeltaY_ServiceModule]+14*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]+7*[SensorModule_X]+7*[DeltaX]), ([y_start_front]+30*[DeltaY_ServiceModule]+15*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ( [x_offset]+7*[SensorModule_X]+7*[DeltaX]), ([y_start_front]+31*[DeltaY_ServiceModule]+15*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ( [x_offset]+7*[SensorModule_X]+6*[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_front]+31*[DeltaY_ServiceModule]+15*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+6*[SensorModule_X]+6*[DeltaX]), ([y_start_front]+32*[DeltaY_ServiceModule]+15*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]+6*[SensorModule_X]+6*[DeltaX]), ([y_start_front]+32*[DeltaY_ServiceModule]+16*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]+6*[SensorModule_X]+6*[DeltaX]), ([y_start_front]+33*[DeltaY_ServiceModule]+16*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+6*[SensorModule_X]+6*[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_front]+33*[DeltaY_ServiceModule]+16*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+5*[SensorModule_X]+5*[DeltaX]), ([y_start_front]+34*[DeltaY_ServiceModule]+16*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]+2*[SensorModule_X]+2*[DeltaX]), ([y_start_front]+34*[DeltaY_ServiceModule]+17*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_front]+35*[DeltaY_ServiceModule]+17*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_front]+35*[DeltaY_ServiceModule]+17*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_front]+35*[DeltaY_ServiceModule]+17*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+36*[DeltaY_ServiceModule]+17*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+36*[DeltaY_ServiceModule]+18*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+37*[DeltaY_ServiceModule]+18*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2+2*[ServiceHybrid_X6]+2*[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_front]+37*[DeltaY_ServiceModule]+18*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+38*[DeltaY_ServiceModule]+18*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+38*[DeltaY_ServiceModule]+19*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+39*[DeltaY_ServiceModule]+19*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+40*[DeltaY_ServiceModule]+19*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+40*[DeltaY_ServiceModule]+20*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_front]+41*[DeltaY_ServiceModule]+20*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_front]+41*[DeltaY_ServiceModule]+20*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_front]+41*[DeltaY_ServiceModule]+20*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+42*[DeltaY_ServiceModule]+20*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+42*[DeltaY_ServiceModule]+21*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_front]+43*[DeltaY_ServiceModule]+21*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_front]+43*[DeltaY_ServiceModule]+21*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_front]+43*[DeltaY_ServiceModule]+21*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+44*[DeltaY_ServiceModule]+21*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+44*[DeltaY_ServiceModule]+22*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+45*[DeltaY_ServiceModule]+22*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2+[DeltaX_Service6_Service7]), ([y_start_front]+45*[DeltaY_ServiceModule]+22*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+46*[DeltaY_ServiceModule]+22*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+46*[DeltaY_ServiceModule]+23*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+47*[DeltaY_ServiceModule]+23*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+48*[DeltaY_ServiceModule]+23*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+48*[DeltaY_ServiceModule]+24*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_front]+49*[DeltaY_ServiceModule]+24*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_front]+49*[DeltaY_ServiceModule]+24*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_front]+49*[DeltaY_ServiceModule]+24*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+50*[DeltaY_ServiceModule]+24*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+50*[DeltaY_ServiceModule]+25*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+51*[DeltaY_ServiceModule]+25*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2+[DeltaX_Service6_Service7]), ([y_start_front]+51*[DeltaY_ServiceModule]+25*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+52*[DeltaY_ServiceModule]+25*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+52*[DeltaY_ServiceModule]+26*[SensorModule_Y]), ([Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X7]/2), ([y_start_front]+53*[DeltaY_ServiceModule]+26*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+54*[DeltaY_ServiceModule]+26*[SensorModule_Y]), ([Zpos1]) + + + + @@ -1917,1437 +1943,1438 @@ + - - - - - - - - ([x_start_back])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+[DeltaX_ServiceModule])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+[DeltaX_ServiceModule]+[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+2*[DeltaX_ServiceModule]+[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+2*[DeltaX_ServiceModule]+[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+3*[DeltaX_ServiceModule]+[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+3*[DeltaX_ServiceModule]+2*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+4*[DeltaX_ServiceModule]+2*[SensorModule_X])*mm, (1+[ServiceHybrid_Y7]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+5*[DeltaX_ServiceModule]+2*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+5*[DeltaX_ServiceModule]+3*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+6*[DeltaX_ServiceModule]+3*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+6*[DeltaX_ServiceModule]+3*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+7*[DeltaX_ServiceModule]+3*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+7*[DeltaX_ServiceModule]+4*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+8*[DeltaX_ServiceModule]+4*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+8*[DeltaX_ServiceModule]+4*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2+[ServiceHybrid_Y6]+[DeltaY]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+9*[DeltaX_ServiceModule]+4*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+9*[DeltaX_ServiceModule]+5*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+10*[DeltaX_ServiceModule]+5*[SensorModule_X])*mm, (1+[ServiceHybrid_Y7]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+11*[DeltaX_ServiceModule]+5*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+11*[DeltaX_ServiceModule]+6*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+12*[DeltaX_ServiceModule]+6*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+12*[DeltaX_ServiceModule]+6*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+12*[DeltaX_ServiceModule]+6*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6]+[ServiceHybrid_Y6]+[DeltaY]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+13*[DeltaX_ServiceModule]+6*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+13*[DeltaX_ServiceModule]+7*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+14*[DeltaX_ServiceModule]+7*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+14*[DeltaX_ServiceModule]+7*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+14*[DeltaX_ServiceModule]+7*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+15*[DeltaX_ServiceModule]+7*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+15*[DeltaX_ServiceModule]+8*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+16*[DeltaX_ServiceModule]+8*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+16*[DeltaX_ServiceModule]+8*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+17*[DeltaX_ServiceModule]+8*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+17*[DeltaX_ServiceModule]+9*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+18*[DeltaX_ServiceModule]+9*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+18*[DeltaX_ServiceModule]+9*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+18*[DeltaX_ServiceModule]+9*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service6]+[ServiceHybrid_Y6]+[DeltaY]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+19*[DeltaX_ServiceModule]+9*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+19*[DeltaX_ServiceModule]+10*[SensorModule_X])*mm, ([y_offset]+3*[SensorModule_Y]+3*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+20*[DeltaX_ServiceModule]+10*[SensorModule_X])*mm, ([y_offset]+4*[SensorModule_Y]+4*[DeltaY])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+20*[DeltaX_ServiceModule]+10*[SensorModule_X])*mm, ([y_offset]+4*[SensorModule_Y]+4*[DeltaY]+2*[ServiceHybrid_Y3]+2*[DeltaY]+[DeltaY_Service3_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+21*[DeltaX_ServiceModule]+10*[SensorModule_X])*mm, (1+[y_offset]+4*[SensorModule_Y]+4*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+21*[DeltaX_ServiceModule]+11*[SensorModule_X])*mm, ([y_offset]+6*[SensorModule_Y]+6*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+22*[DeltaX_ServiceModule]+11*[SensorModule_X])*mm, ([y_offset]+7*[SensorModule_Y]+7*[DeltaY])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+22*[DeltaX_ServiceModule]+11*[SensorModule_X])*mm, ([y_offset]+7*[SensorModule_Y]+7*[DeltaY]+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+23*[DeltaX_ServiceModule]+11*[SensorModule_X])*mm, (1+[y_offset]+6*[SensorModule_Y]+6*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+23*[DeltaX_ServiceModule]+12*[SensorModule_X])*mm, (0.8+[SensorModule_Y]/2+7*[SensorModule_Y]+7*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+24*[DeltaX_ServiceModule]+12*[SensorModule_X])*mm, ([y_offset]+8*[SensorModule_Y]+8*[DeltaY])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+24*[DeltaX_ServiceModule]+12*[SensorModule_X])*mm, ([y_offset]+8*[SensorModule_Y]+8*[DeltaY]+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+25*[DeltaX_ServiceModule]+12*[SensorModule_X])*mm, (0.8+[y_offset]+7*[SensorModule_Y]+7*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+25*[DeltaX_ServiceModule]+13*[SensorModule_X])*mm, (0.8+[y_offset]+7*[SensorModule_Y]+7*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+26*[DeltaX_ServiceModule]+13*[SensorModule_X])*mm, (5+[y_offset]+8*[SensorModule_Y]+8*[DeltaY])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+26*[DeltaX_ServiceModule]+13*[SensorModule_X])*mm, (5+[y_offset]+8*[SensorModule_Y]+8*[DeltaY]+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+27*[DeltaX_ServiceModule]+13*[SensorModule_X])*mm, ([y_offset]+8*[SensorModule_Y]+8*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+27*[DeltaX_ServiceModule]+14*[SensorModule_X])*mm, ([y_offset]+8*[SensorModule_Y]+8*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+28*[DeltaX_ServiceModule]+14*[SensorModule_X])*mm, (5+[y_offset]+8*[SensorModule_Y]+8*[DeltaY])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+28*[DeltaX_ServiceModule]+14*[SensorModule_X])*mm, (5+[y_offset]+8*[SensorModule_Y]+8*[DeltaY]+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+29*[DeltaX_ServiceModule]+14*[SensorModule_X])*mm, (0.8+[y_offset]+7*[SensorModule_Y]+7*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+29*[DeltaX_ServiceModule]+15*[SensorModule_X])*mm, (0.8+[y_offset]+7*[SensorModule_Y]+7*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+30*[DeltaX_ServiceModule]+15*[SensorModule_X])*mm, ([y_offset]+8*[SensorModule_Y]+8*[DeltaY])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+30*[DeltaX_ServiceModule]+15*[SensorModule_X])*mm, ([y_offset]+8*[SensorModule_Y]+8*[DeltaY]+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+31*[DeltaX_ServiceModule]+15*[SensorModule_X])*mm, (0.8+[SensorModule_Y]/2+7*[SensorModule_Y]+7*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+31*[DeltaX_ServiceModule]+16*[SensorModule_X])*mm, (1+[y_offset]+6*[SensorModule_Y]+6*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+32*[DeltaX_ServiceModule]+16*[SensorModule_X])*mm, ([y_offset]+7*[SensorModule_Y]+7*[DeltaY])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+32*[DeltaX_ServiceModule]+16*[SensorModule_X])*mm, ([y_offset]+7*[SensorModule_Y]+7*[DeltaY]+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+33*[DeltaX_ServiceModule]+16*[SensorModule_X])*mm, ([y_offset]+6*[SensorModule_Y]+6*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+33*[DeltaX_ServiceModule]+17*[SensorModule_X])*mm, (1+[y_offset]+4*[SensorModule_Y]+4*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+34*[DeltaX_ServiceModule]+17*[SensorModule_X])*mm, ([y_offset]+4*[SensorModule_Y]+4*[DeltaY])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+34*[DeltaX_ServiceModule]+17*[SensorModule_X])*mm, ([y_offset]+4*[SensorModule_Y]+4*[DeltaY]+2*[ServiceHybrid_Y3]+2*[DeltaY]+[DeltaY_Service3_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+35*[DeltaX_ServiceModule]+17*[SensorModule_X])*mm, ([y_offset]+3*[SensorModule_Y]+3*[DeltaY])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+35*[DeltaX_ServiceModule]+18*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+36*[DeltaX_ServiceModule]+18*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+36*[DeltaX_ServiceModule]+18*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+36*[DeltaX_ServiceModule]+18*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service6]+[ServiceHybrid_Y6]+[DeltaY]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+37*[DeltaX_ServiceModule]+18*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+37*[DeltaX_ServiceModule]+19*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+38*[DeltaX_ServiceModule]+19*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+38*[DeltaX_ServiceModule]+19*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[ServiceHybrid_Y3]+[DeltaY]+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+39*[DeltaX_ServiceModule]+19*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+39*[DeltaX_ServiceModule]+20*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+40*[DeltaX_ServiceModule]+20*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+40*[DeltaX_ServiceModule]+20*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+40*[DeltaX_ServiceModule]+20*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+41*[DeltaX_ServiceModule]+20*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+41*[DeltaX_ServiceModule]+21*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+42*[DeltaX_ServiceModule]+21*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+42*[DeltaX_ServiceModule]+21*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+42*[DeltaX_ServiceModule]+21*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service6]+[ServiceHybrid_Y6]+[DeltaY]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+43*[DeltaX_ServiceModule]+21*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+43*[DeltaX_ServiceModule]+22*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+44*[DeltaX_ServiceModule]+22*[SensorModule_X])*mm, (1+[ServiceHybrid_Y7]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+45*[DeltaX_ServiceModule]+22*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+45*[DeltaX_ServiceModule]+23*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+46*[DeltaX_ServiceModule]+23*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+46*[DeltaX_ServiceModule]+23*[SensorModule_X])*mm, (1+[ServiceHybrid_Y6]/2+[ServiceHybrid_Y6]+[DeltaY]+[DeltaY_Service6_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+47*[DeltaX_ServiceModule]+23*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+47*[DeltaX_ServiceModule]+24*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+48*[DeltaX_ServiceModule]+24*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+48*[DeltaX_ServiceModule]+24*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+49*[DeltaX_ServiceModule]+24*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+49*[DeltaX_ServiceModule]+25*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+50*[DeltaX_ServiceModule]+25*[SensorModule_X])*mm, (1+[ServiceHybrid_Y7]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+51*[DeltaX_ServiceModule]+25*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+51*[DeltaX_ServiceModule]+26*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+52*[DeltaX_ServiceModule]+26*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+52*[DeltaX_ServiceModule]+26*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2+[DeltaY_Service3_Service7])*mm, 0.*mm - - - - - - - - - - - - - ([x_start_back]+53*[DeltaX_ServiceModule]+26*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+53*[DeltaX_ServiceModule]+27*[SensorModule_X])*mm, ([y_offset])*mm, -4.02*mm - - - - - - - - - - - - - ([x_start_back]+54*[DeltaX_ServiceModule]+27*[SensorModule_X])*mm, (1+[ServiceHybrid_Y3]/2)*mm, 0.*mm - - - - - + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-[DeltaY_ServiceModule]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-[DeltaY_ServiceModule]-[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-2*[DeltaY_ServiceModule]-[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service7]), ([y_start_back]-2*[DeltaY_ServiceModule]-[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-3*[DeltaY_ServiceModule]-[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-3*[DeltaY_ServiceModule]-2*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X7]/2), ([y_start_back]-4*[DeltaY_ServiceModule]-2*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-5*[DeltaY_ServiceModule]-2*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-5*[DeltaY_ServiceModule]-3*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-6*[DeltaY_ServiceModule]-3*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service7]), ([y_start_back]-6*[DeltaY_ServiceModule]-3*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-7*[DeltaY_ServiceModule]-3*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-7*[DeltaY_ServiceModule]-4*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_back]-8*[DeltaY_ServiceModule]-4*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_back]-8*[DeltaY_ServiceModule]-4*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-9*[DeltaY_ServiceModule]-4*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-9*[DeltaY_ServiceModule]-5*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X7]/2), ([y_start_back]-10*[DeltaY_ServiceModule]-5*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-11*[DeltaY_ServiceModule]-5*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-11*[DeltaY_ServiceModule]-6*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-12*[DeltaY_ServiceModule]-6*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_back]-12*[DeltaY_ServiceModule]-6*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_back]-12*[DeltaY_ServiceModule]-6*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-13*[DeltaY_ServiceModule]-6*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-13*[DeltaY_ServiceModule]-7*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-14*[DeltaY_ServiceModule]-7*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_back]-14*[DeltaY_ServiceModule]-7*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_back]-14*[DeltaY_ServiceModule]-7*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-15*[DeltaY_ServiceModule]-7*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-15*[DeltaY_ServiceModule]-8*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-16*[DeltaY_ServiceModule]-8*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_back]-16*[DeltaY_ServiceModule]-8*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-17*[DeltaY_ServiceModule]-8*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-17*[DeltaY_ServiceModule]-9*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-18*[DeltaY_ServiceModule]-9*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_back]-18*[DeltaY_ServiceModule]-9*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_back]-18*[DeltaY_ServiceModule]-9*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-19*[DeltaY_ServiceModule]-9*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]+3*[SensorModule_X]+3*[DeltaX]), ([y_start_back]-19*[DeltaY_ServiceModule]-10*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]+4*[SensorModule_X]+4*[DeltaX]), ([y_start_back]-20*[DeltaY_ServiceModule]-10*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+4*[SensorModule_X]+4*[DeltaX]+2*[ServiceHybrid_X3]+2*[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-20*[DeltaY_ServiceModule]-10*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ( [x_offset]+4*[SensorModule_X]+4*[DeltaX]), ([y_start_back]-21*[DeltaY_ServiceModule]-10*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]+6*[SensorModule_X]+6*[DeltaX]), ([y_start_back]-21*[DeltaY_ServiceModule]-11*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]+7*[SensorModule_X]+7*[DeltaX]), ([y_start_back]-22*[DeltaY_ServiceModule]-11*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+7*[SensorModule_X]+7*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-22*[DeltaY_ServiceModule]-11*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ( [x_offset]+6*[SensorModule_X]+6*[DeltaX]), ([y_start_back]-23*[DeltaY_ServiceModule]-11*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([SensorModule_X]/2+7*[SensorModule_X]+7*[DeltaX]), ([y_start_back]-23*[DeltaY_ServiceModule]-12*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]+8*[SensorModule_X]+8*[DeltaX]), ([y_start_back]-24*[DeltaY_ServiceModule]-12*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+8*[SensorModule_X]+8*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-24*[DeltaY_ServiceModule]-12*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+7*[SensorModule_X]+7*[DeltaX]), ([y_start_back]-25*[DeltaY_ServiceModule]-12*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]+7*[SensorModule_X]+7*[DeltaX]), ([y_start_back]-25*[DeltaY_ServiceModule]-13*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ( [x_offset]+8*[SensorModule_X]+8*[DeltaX]), ([y_start_back]-26*[DeltaY_ServiceModule]-13*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ( [x_offset]+8*[SensorModule_X]+8*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-26*[DeltaY_ServiceModule]-13*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+8*[SensorModule_X]+8*[DeltaX]), ([y_start_back]-27*[DeltaY_ServiceModule]-13*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]+8*[SensorModule_X]+8*[DeltaX]), ([y_start_back]-27*[DeltaY_ServiceModule]-14*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ( [x_offset]+8*[SensorModule_X]+8*[DeltaX]), ([y_start_back]-28*[DeltaY_ServiceModule]-14*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ( [x_offset]+8*[SensorModule_X]+8*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-28*[DeltaY_ServiceModule]-14*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+7*[SensorModule_X]+7*[DeltaX]), ([y_start_back]-29*[DeltaY_ServiceModule]-14*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]+7*[SensorModule_X]+7*[DeltaX]), ([y_start_back]-29*[DeltaY_ServiceModule]-15*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]+8*[SensorModule_X]+8*[DeltaX]), ([y_start_back]-30*[DeltaY_ServiceModule]-15*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+8*[SensorModule_X]+8*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-30*[DeltaY_ServiceModule]-15*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([SensorModule_X]/2+7*[SensorModule_X]+7*[DeltaX]), ([y_start_back]-31*[DeltaY_ServiceModule]-15*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ( [x_offset]+6*[SensorModule_X]+6*[DeltaX]), ([y_start_back]-31*[DeltaY_ServiceModule]-16*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]+7*[SensorModule_X]+7*[DeltaX]), ([y_start_back]-32*[DeltaY_ServiceModule]-16*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+7*[SensorModule_X]+7*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-32*[DeltaY_ServiceModule]-16*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+6*[SensorModule_X]+6*[DeltaX]), ([y_start_back]-33*[DeltaY_ServiceModule]-16*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ( [x_offset]+4*[SensorModule_X]+4*[DeltaX]), ([y_start_back]-33*[DeltaY_ServiceModule]-17*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]+4*[SensorModule_X]+4*[DeltaX]), ([y_start_back]-34*[DeltaY_ServiceModule]-17*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+4*[SensorModule_X]+4*[DeltaX]+2*[ServiceHybrid_X3]+2*[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-34*[DeltaY_ServiceModule]-17*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]+3*[SensorModule_X]+3*[DeltaX]), ([y_start_back]-35*[DeltaY_ServiceModule]-17*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-35*[DeltaY_ServiceModule]-18*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-36*[DeltaY_ServiceModule]-18*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_back]-36*[DeltaY_ServiceModule]-18*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_back]-36*[DeltaY_ServiceModule]-18*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-37*[DeltaY_ServiceModule]-18*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-37*[DeltaY_ServiceModule]-19*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-38*[DeltaY_ServiceModule]-19*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_back]-38*[DeltaY_ServiceModule]-19*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-39*[DeltaY_ServiceModule]-19*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-39*[DeltaY_ServiceModule]-20*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-40*[DeltaY_ServiceModule]-20*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_back]-40*[DeltaY_ServiceModule]-20*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_back]-40*[DeltaY_ServiceModule]-20*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-41*[DeltaY_ServiceModule]-20*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-41*[DeltaY_ServiceModule]-21*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-42*[DeltaY_ServiceModule]-21*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_back]-42*[DeltaY_ServiceModule]-21*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_back]-42*[DeltaY_ServiceModule]-21*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-43*[DeltaY_ServiceModule]-21*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-43*[DeltaY_ServiceModule]-22*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X7]/2), ([y_start_back]-44*[DeltaY_ServiceModule]-22*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-45*[DeltaY_ServiceModule]-22*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-45*[DeltaY_ServiceModule]-23*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_back]-46*[DeltaY_ServiceModule]-23*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_back]-46*[DeltaY_ServiceModule]-23*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-47*[DeltaY_ServiceModule]-23*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-47*[DeltaY_ServiceModule]-24*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-48*[DeltaY_ServiceModule]-24*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service7]), ([y_start_back]-48*[DeltaY_ServiceModule]-24*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-49*[DeltaY_ServiceModule]-24*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-49*[DeltaY_ServiceModule]-25*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X7]/2), ([y_start_back]-50*[DeltaY_ServiceModule]-25*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-51*[DeltaY_ServiceModule]-25*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-51*[DeltaY_ServiceModule]-26*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-52*[DeltaY_ServiceModule]-26*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service7]), ([y_start_back]-52*[DeltaY_ServiceModule]-26*[SensorModule_Y]), ([Zpos2]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-53*[DeltaY_ServiceModule]-26*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-53*[DeltaY_ServiceModule]-27*[SensorModule_Y]), (-1*[Zpos1]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-54*[DeltaY_ServiceModule]-27*[SensorModule_Y]), ([Zpos2]) + + + + + diff --git a/Geometry/MTDCommonData/test/BuildFile.xml b/Geometry/MTDCommonData/test/BuildFile.xml index 78886370208dd..54e23853ebc13 100644 --- a/Geometry/MTDCommonData/test/BuildFile.xml +++ b/Geometry/MTDCommonData/test/BuildFile.xml @@ -20,6 +20,7 @@ + diff --git a/Geometry/MTDCommonData/test/DD4hep_TestMTDIdealGeometry.cc b/Geometry/MTDCommonData/test/DD4hep_TestMTDIdealGeometry.cc index 1bfadf41a72bf..277a1ebd3aff2 100644 --- a/Geometry/MTDCommonData/test/DD4hep_TestMTDIdealGeometry.cc +++ b/Geometry/MTDCommonData/test/DD4hep_TestMTDIdealGeometry.cc @@ -29,8 +29,9 @@ #include "DataFormats/ForwardDetId/interface/BTLDetId.h" #include "DataFormats/ForwardDetId/interface/ETLDetId.h" -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DataFormats/Math/interface/Rounding.h" +#include //#define EDM_ML_DEBUG @@ -63,7 +64,6 @@ class DD4hep_TestMTDIdealGeometry : public edm::one::EDAnalyzer<> { using DD3Vector = ROOT::Math::DisplacementVector3D>; using angle_units::operators::convertRadToDeg; using cms_rounding::roundIfNear0; -using geant_units::operators::convertCmToMm; DD4hep_TestMTDIdealGeometry::DD4hep_TestMTDIdealGeometry(const edm::ParameterSet& iConfig) : tag_(iConfig.getParameter("DDDetector")), @@ -259,13 +259,13 @@ void DD4hep_TestMTDIdealGeometry::analyze(const edm::Event& iEvent, const edm::E } dd4hep::Box mySens(fv.solid()); spos << "Solid shape name: " << DDSolidShapesName::name(fv.legacyShape(fv.shape())) << "\n"; - spos << "Box dimensions: " << fround(convertCmToMm(mySens.x())) << " " << fround(convertCmToMm(mySens.y())) - << " " << fround(convertCmToMm(mySens.z())) << "\n"; + spos << "Box dimensions: " << fround(mySens.x() / dd4hep::mm) << " " << fround(mySens.y() / dd4hep::mm) << " " + << fround(mySens.z() / dd4hep::mm) << "\n"; DD3Vector x, y, z; fv.rotation().GetComponents(x, y, z); - spos << "Translation vector components: " << fround(convertCmToMm(fv.translation().x())) << " " - << fround(convertCmToMm(fv.translation().y())) << " " << fround(convertCmToMm(fv.translation().z())) << " " + spos << "Translation vector components: " << fround(fv.translation().x() / dd4hep::mm) << " " + << fround(fv.translation().y() / dd4hep::mm) << " " << fround(fv.translation().z() / dd4hep::mm) << " " << "\n"; spos << "Rotation matrix components: " << fround(x.X()) << " " << fround(x.Y()) << " " << fround(x.Z()) << " " << fround(y.X()) << " " << fround(y.Y()) << " " << fround(y.Z()) << " " << fround(z.X()) << " " @@ -280,23 +280,23 @@ void DD4hep_TestMTDIdealGeometry::analyze(const edm::Event& iEvent, const edm::E std::sqrt(std::pow(zeroGlobal.X() - cn1Global.X(), 2) + std::pow(zeroGlobal.Y() - cn1Global.Y(), 2) + std::pow(zeroGlobal.Z() - cn1Global.Z(), 2)); - spos << "Center global = " << fround(convertCmToMm(zeroGlobal.X())) << fround(convertCmToMm(zeroGlobal.Y())) - << fround(convertCmToMm(zeroGlobal.Z())) << " r = " << fround(convertCmToMm(zeroGlobal.Rho())) + spos << "Center global = " << fround(zeroGlobal.X() / dd4hep::mm) << fround(zeroGlobal.Y() / dd4hep::mm) + << fround(zeroGlobal.Z() / dd4hep::mm) << " r = " << fround(zeroGlobal.Rho() / dd4hep::mm) << " phi = " << fround(convertRadToDeg(zeroGlobal.Phi())) << "\n"; - spos << "Corner 1 local = " << fround(convertCmToMm(cn1Local.X())) << fround(convertCmToMm(cn1Local.Y())) - << fround(convertCmToMm(cn1Local.Z())) << " DeltaR = " << fround(convertCmToMm(distLocal)) << "\n"; + spos << "Corner 1 local = " << fround(cn1Local.X() / dd4hep::mm) << fround(cn1Local.Y() / dd4hep::mm) + << fround(cn1Local.Z() / dd4hep::mm) << " DeltaR = " << fround(distLocal / dd4hep::mm) << "\n"; - spos << "Corner 1 global = " << fround(convertCmToMm(cn1Global.X())) << fround(convertCmToMm(cn1Global.Y())) - << fround(convertCmToMm(cn1Global.Z())) << " DeltaR = " << fround(convertCmToMm(distGlobal)) << "\n"; + spos << "Corner 1 global = " << fround(cn1Global.X() / dd4hep::mm) << fround(cn1Global.Y() / dd4hep::mm) + << fround(cn1Global.Z() / dd4hep::mm) << " DeltaR = " << fround(distGlobal / dd4hep::mm) << "\n"; spos << "\n"; - if (std::fabs(convertCmToMm(distGlobal - distLocal)) > 1.e-6) { + if (std::fabs(distGlobal - distLocal) / dd4hep::mm > 1.e-6) { spos << "DIFFERENCE IN DISTANCE \n"; } - sunitt << fround(convertCmToMm(zeroGlobal.X())) << fround(convertCmToMm(zeroGlobal.Y())) - << fround(convertCmToMm(zeroGlobal.Z())) << fround(convertCmToMm(cn1Global.X())) - << fround(convertCmToMm(cn1Global.Y())) << fround(convertCmToMm(cn1Global.Z())); + sunitt << fround(zeroGlobal.X() / dd4hep::mm) << fround(zeroGlobal.Y() / dd4hep::mm) + << fround(zeroGlobal.Z() / dd4hep::mm) << fround(cn1Global.X() / dd4hep::mm) + << fround(cn1Global.Y() / dd4hep::mm) << fround(cn1Global.Z() / dd4hep::mm); edm::LogInfo("DD4hep_TestMTDPosition") << spos.str(); edm::LogVerbatim("MTDUnitTest") << sunitt.str(); diff --git a/Geometry/MTDCommonData/test/testMTDGeometry.py b/Geometry/MTDCommonData/test/testMTDGeometry.py index ff44b22c90700..2bb8d5588f96d 100644 --- a/Geometry/MTDCommonData/test/testMTDGeometry.py +++ b/Geometry/MTDCommonData/test/testMTDGeometry.py @@ -45,24 +45,24 @@ ) process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", - confGeomXMLFiles = cms.FileInPath('Geometry/MTDCommonData/data/dd4hep/cms-mtdD50-geometry.xml'), - appendToDataLabel = cms.string('MTD') + confGeomXMLFiles = cms.FileInPath('Geometry/MTDCommonData/data/dd4hep/cms-mtdD76-geometry.xml'), + appendToDataLabel = cms.string('') ) process.DDSpecParRegistryESProducer = cms.ESProducer("DDSpecParRegistryESProducer", - appendToDataLabel = cms.string('MTD') + appendToDataLabel = cms.string('') ) process.DDVectorRegistryESProducer = cms.ESProducer("DDVectorRegistryESProducer", - appendToDataLabel = cms.string('MTD') + appendToDataLabel = cms.string('') ) process.test = cms.EDAnalyzer("DDCMSDetector", - DDDetector = cms.ESInputTag('','MTD') + DDDetector = cms.ESInputTag('','') ) process.dump = cms.EDAnalyzer("DDTestDumpFile", - DDDetector = cms.ESInputTag('','MTD') + DDDetector = cms.ESInputTag('','') ) process.p = cms.Path(process.test+process.dump) diff --git a/Geometry/MTDCommonData/test/testMTDinDD4hep.py b/Geometry/MTDCommonData/test/testMTDinDD4hep.py index 085f915e35e64..3569a04c314a0 100644 --- a/Geometry/MTDCommonData/test/testMTDinDD4hep.py +++ b/Geometry/MTDCommonData/test/testMTDinDD4hep.py @@ -62,22 +62,22 @@ ) process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", - confGeomXMLFiles = cms.FileInPath('Geometry/MTDCommonData/data/dd4hep/cms-mtdD50-geometry.xml'), - appendToDataLabel = cms.string('MTD') + confGeomXMLFiles = cms.FileInPath('Geometry/MTDCommonData/data/dd4hep/cms-mtdD76-geometry.xml'), + appendToDataLabel = cms.string('') ) process.DDSpecParRegistryESProducer = cms.ESProducer("DDSpecParRegistryESProducer", - appendToDataLabel = cms.string('MTD') + appendToDataLabel = cms.string('') ) process.testBTL = cms.EDAnalyzer("DD4hep_TestMTDIdealGeometry", - DDDetector = cms.ESInputTag('','MTD'), + DDDetector = cms.ESInputTag('',''), ddTopNodeName = cms.untracked.string('BarrelTimingLayer'), theLayout = cms.untracked.uint32(4) ) process.testETL = cms.EDAnalyzer("DD4hep_TestMTDIdealGeometry", - DDDetector = cms.ESInputTag('','MTD'), + DDDetector = cms.ESInputTag('',''), ddTopNodeName = cms.untracked.string('EndcapTimingLayer'), theLayout = cms.untracked.uint32(4) ) diff --git a/Geometry/MTDCommonData/test/testMTDinDDD.py b/Geometry/MTDCommonData/test/testMTDinDDD.py index a22671f81f892..5b1441cec285a 100644 --- a/Geometry/MTDCommonData/test/testMTDinDDD.py +++ b/Geometry/MTDCommonData/test/testMTDinDDD.py @@ -61,7 +61,7 @@ ) ) -process.load('Configuration.Geometry.GeometryExtended2026D50_cff') +process.load('Configuration.Geometry.GeometryExtended2026D76_cff') process.testBTL = cms.EDAnalyzer("TestMTDIdealGeometry", label = cms.untracked.string(''), diff --git a/Geometry/MTDGeometryBuilder/test/MTDDigiGeometryAnalyzer.cc b/Geometry/MTDGeometryBuilder/test/MTDDigiGeometryAnalyzer.cc index 3c0e8068c9262..37323aed2a876 100644 --- a/Geometry/MTDGeometryBuilder/test/MTDDigiGeometryAnalyzer.cc +++ b/Geometry/MTDGeometryBuilder/test/MTDDigiGeometryAnalyzer.cc @@ -13,9 +13,10 @@ #include "Geometry/CommonTopologies/interface/PixelTopology.h" #include "Geometry/MTDGeometryBuilder/interface/MTDGeomDetType.h" #include "Geometry/MTDGeometryBuilder/interface/RectangularMTDTopology.h" -#include "Geometry/Records/interface/MTDTopologyRcd.h" -#include "Geometry/MTDNumberingBuilder/interface/MTDTopology.h" +#include "DataFormats/ForwardDetId/interface/MTDDetId.h" +#include "DataFormats/ForwardDetId/interface/BTLDetId.h" +#include "DataFormats/ForwardDetId/interface/ETLDetId.h" #include "Geometry/MTDGeometryBuilder/interface/MTDGeomDetUnit.h" #include "DataFormats/GeometrySurface/interface/MediumProperties.h" #include "DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h" @@ -47,9 +48,6 @@ using cms_rounding::roundIfNear0, cms_rounding::roundVecIfNear0; // ------------ method called to produce the data ------------ void MTDDigiGeometryAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - edm::ESHandle mtdTopo; - iSetup.get().get(mtdTopo); - // // get the MTDGeometry // @@ -67,10 +65,22 @@ void MTDDigiGeometryAnalyzer::analyze(const edm::Event& iEvent, const edm::Event for (auto const& it : pDD->detUnits()) { if (dynamic_cast((it)) != nullptr) { const BoundPlane& p = (dynamic_cast((it)))->specificSurface(); + const MTDDetId mtdId(it->geographicalId()); + std::stringstream moduleLabel; + if (mtdId.mtdSubDetector() == 1) { + moduleLabel << " BTL side " << mtdId.mtdSide() << " Rod " << mtdId.mtdRR() << " mod " + << (static_cast(mtdId)).module(); + } else if (mtdId.mtdSubDetector() == 2) { + const ETLDetId etlId(it->geographicalId()); + moduleLabel << " ETL side " << mtdId.mtdSide() << " Disc/Side/Sector " << etlId.nDisc() << " " + << etlId.discSide() << " " << etlId.sector(); + } else { + edm::LogWarning("MTDDigiGeometryanalyzer") << (it->geographicalId()).rawId() << " unknown MTD subdetector!"; + } edm::LogVerbatim("MTDDigiGeometryAnalyzer") << "---------------------------------------------------------- \n" - << mtdTopo->print(it->geographicalId()) << " RadLeng Pixel " << p.mediumProperties().radLen() << " Xi Pixel " - << p.mediumProperties().xi(); + << it->geographicalId().rawId() << moduleLabel.str() << " RadLeng Pixel " << p.mediumProperties().radLen() + << " Xi Pixel " << p.mediumProperties().xi(); const GeomDetUnit theDet = *(dynamic_cast(it)); analyseRectangle(theDet); diff --git a/Geometry/MTDGeometryBuilder/test/dd4hep_mtd_cfg.py b/Geometry/MTDGeometryBuilder/test/dd4hep_mtd_cfg.py index baf8ddbadcd3c..3c421e639d1dc 100644 --- a/Geometry/MTDGeometryBuilder/test/dd4hep_mtd_cfg.py +++ b/Geometry/MTDGeometryBuilder/test/dd4hep_mtd_cfg.py @@ -60,7 +60,7 @@ ) process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", - confGeomXMLFiles = cms.FileInPath('Geometry/MTDCommonData/data/dd4hep/cms-mtdD50-geometry.xml'), + confGeomXMLFiles = cms.FileInPath('Geometry/MTDCommonData/data/dd4hep/cms-mtdD76-geometry.xml'), appendToDataLabel = cms.string('') ) diff --git a/Geometry/MTDGeometryBuilder/test/mtd_cfg.py b/Geometry/MTDGeometryBuilder/test/mtd_cfg.py index de40678baa751..3124914954e9d 100644 --- a/Geometry/MTDGeometryBuilder/test/mtd_cfg.py +++ b/Geometry/MTDGeometryBuilder/test/mtd_cfg.py @@ -58,7 +58,7 @@ ) ) -process.load("Configuration.Geometry.GeometryExtended2026D50_cff") +process.load("Configuration.Geometry.GeometryExtended2026D76_cff") process.load("Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff") diff --git a/Geometry/MTDNumberingBuilder/src/GeometricTimingDet.cc b/Geometry/MTDNumberingBuilder/src/GeometricTimingDet.cc index 176c240fba052..7860830b4130e 100644 --- a/Geometry/MTDNumberingBuilder/src/GeometricTimingDet.cc +++ b/Geometry/MTDNumberingBuilder/src/GeometricTimingDet.cc @@ -4,8 +4,8 @@ #include "DetectorDescription/DDCMS/interface/DDFilteredView.h" #include "CondFormats/GeometryObjects/interface/PGeometricTimingDet.h" -#include "CLHEP/Units/GlobalSystemOfUnits.h" #include "DataFormats/Math/interface/GeantUnits.h" +#include #include #include @@ -90,10 +90,8 @@ GeometricTimingDet::GeometricTimingDet(DDFilteredView* fv, GeometricTimingEnumTy ddd_ = nav_type(nt.begin(), nt.end()); } -using namespace geant_units::operators; - GeometricTimingDet::GeometricTimingDet(cms::DDFilteredView* fv, GeometricTimingEnumType type) - : trans_(fv->translation()), + : trans_(fv->translation() / dd4hep::mm), rot_(fv->rotation()), shape_(fv->shape()), ddname_(fv->name()), @@ -107,14 +105,10 @@ GeometricTimingDet::GeometricTimingDet(cms::DDFilteredView* fv, GeometricTimingE pixROCy_(fv->get("PixelROC_Y")), stereo_(fv->get("TrackerStereoDetectors") == strue), siliconAPVNum_(fv->get("SiliconAPVNumber")) { - // - // Translate DD4hep lenghts from cm to mm - // - trans_.SetCoordinates(convertCmToMm(trans_.X()), convertCmToMm(trans_.Y()), convertCmToMm(trans_.Z())); phi_ = trans_.Phi(); rho_ = trans_.Rho(); for (size_t pit = 0; pit < params_.size(); pit++) { - params_[pit] = convertCmToMm(params_[pit]); + params_[pit] = params_[pit] / dd4hep::mm; } // // Not navPos(), as not properly working for DD4hep and not used @@ -235,7 +229,9 @@ void GeometricTimingDet::deleteComponents() { } GeometricTimingDet::Position GeometricTimingDet::positionBounds() const { - Position pos(float(trans_.x() / cm), float(trans_.y() / cm), float(trans_.z() / cm)); + Position pos(geant_units::operators::convertMmToCm(trans_.x()), + geant_units::operators::convertMmToCm(trans_.y()), + geant_units::operators::convertMmToCm(trans_.z())); return pos; } diff --git a/Geometry/MTDNumberingBuilder/test/dd4hep_mtd_cfg.py b/Geometry/MTDNumberingBuilder/test/dd4hep_mtd_cfg.py index 67031ea695762..b518eab748b7a 100644 --- a/Geometry/MTDNumberingBuilder/test/dd4hep_mtd_cfg.py +++ b/Geometry/MTDNumberingBuilder/test/dd4hep_mtd_cfg.py @@ -60,7 +60,7 @@ ) process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", - confGeomXMLFiles = cms.FileInPath('Geometry/MTDCommonData/data/dd4hep/cms-mtdD50-geometry.xml'), + confGeomXMLFiles = cms.FileInPath('Geometry/MTDCommonData/data/dd4hep/cms-mtdD76-geometry.xml'), appendToDataLabel = cms.string('') ) diff --git a/Geometry/MTDNumberingBuilder/test/mtd_cfg.py b/Geometry/MTDNumberingBuilder/test/mtd_cfg.py index d50ea4b9e1748..822dbb2de30dd 100644 --- a/Geometry/MTDNumberingBuilder/test/mtd_cfg.py +++ b/Geometry/MTDNumberingBuilder/test/mtd_cfg.py @@ -61,7 +61,7 @@ ) ) -process.load("Configuration.Geometry.GeometryExtended2026D50_cff") +process.load("Configuration.Geometry.GeometryExtended2026D76_cff") process.load("Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff") diff --git a/Geometry/MTDSimData/data/CrystalBar/mtdProdCuts.xml b/Geometry/MTDSimData/data/CrystalBar/mtdProdCuts.xml deleted file mode 100644 index 1a897f79a0a02..0000000000000 --- a/Geometry/MTDSimData/data/CrystalBar/mtdProdCuts.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/MTDSimData/data/CrystalBar/mtdsens.xml b/Geometry/MTDSimData/data/CrystalBar/mtdsens.xml deleted file mode 100644 index c1f82abfd78f4..0000000000000 --- a/Geometry/MTDSimData/data/CrystalBar/mtdsens.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/MTDSimData/data/CrystalBarZflat/mtdProdCuts.xml b/Geometry/MTDSimData/data/CrystalBarZflat/mtdProdCuts.xml deleted file mode 100644 index 339aecba47569..0000000000000 --- a/Geometry/MTDSimData/data/CrystalBarZflat/mtdProdCuts.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/MTDSimData/data/CrystalBarZflat/mtdsens.xml b/Geometry/MTDSimData/data/CrystalBarZflat/mtdsens.xml deleted file mode 100644 index 5adfeba91099e..0000000000000 --- a/Geometry/MTDSimData/data/CrystalBarZflat/mtdsens.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/MTDSimData/data/CrystalTile/mtdProdCuts.xml b/Geometry/MTDSimData/data/CrystalTile/mtdProdCuts.xml deleted file mode 100644 index 897dd07eb8f4d..0000000000000 --- a/Geometry/MTDSimData/data/CrystalTile/mtdProdCuts.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/MTDSimData/data/CrystalTile/mtdsens.xml b/Geometry/MTDSimData/data/CrystalTile/mtdsens.xml deleted file mode 100644 index c466f7f45e155..0000000000000 --- a/Geometry/MTDSimData/data/CrystalTile/mtdsens.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Geometry/MuonCommonData/plugins/DDGEMAngular.cc b/Geometry/MuonCommonData/plugins/DDGEMAngular.cc index 283992c221278..fb880184aa1b3 100644 --- a/Geometry/MuonCommonData/plugins/DDGEMAngular.cc +++ b/Geometry/MuonCommonData/plugins/DDGEMAngular.cc @@ -13,13 +13,15 @@ #include "FWCore/PluginManager/interface/PluginFactory.h" #include "DetectorDescription/Core/interface/DDLogicalPart.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" #include "DetectorDescription/Core/interface/DDTypes.h" #include "DetectorDescription/Core/interface/DDAlgorithm.h" //#define EDM_ML_DEBUG +using namespace angle_units::operators; + class DDGEMAngular : public DDAlgorithm { public: //Constructor and Destructor @@ -49,8 +51,6 @@ class DDGEMAngular : public DDAlgorithm { std::string childName; //Children name }; -using namespace geant_units::operators; - DDGEMAngular::DDGEMAngular() { #ifdef EDM_ML_DEBUG edm::LogVerbatim("MuonGeom") << "DDGEMAngular: Creating an instance"; diff --git a/Geometry/MuonCommonData/plugins/DDMuonAngular.cc b/Geometry/MuonCommonData/plugins/DDMuonAngular.cc index 59606e5b4339b..372deecc09075 100644 --- a/Geometry/MuonCommonData/plugins/DDMuonAngular.cc +++ b/Geometry/MuonCommonData/plugins/DDMuonAngular.cc @@ -13,11 +13,15 @@ #include "FWCore/PluginManager/interface/PluginFactory.h" #include "DetectorDescription/Core/interface/DDLogicalPart.h" #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" -#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/Core/interface/DDTypes.h" #include "DetectorDescription/Core/interface/DDAlgorithm.h" #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" +using namespace angle_units::operators; + +//#define EDM_ML_DEBUG + class DDMuonAngular : public DDAlgorithm { public: //Constructor and Destructor @@ -45,10 +49,6 @@ class DDMuonAngular : public DDAlgorithm { std::string childName; //Children name }; -using namespace geant_units::operators; - -//#define EDM_ML_DEBUG - DDMuonAngular::DDMuonAngular() { #ifdef EDM_ML_DEBUG edm::LogVerbatim("MuonGeom") << "DDMuonAngular: Creating an instance"; diff --git a/Geometry/MuonCommonData/plugins/dd4hep/DDGEMAngular.cc b/Geometry/MuonCommonData/plugins/dd4hep/DDGEMAngular.cc index bd0f142e908c2..57b784d932465 100644 --- a/Geometry/MuonCommonData/plugins/dd4hep/DDGEMAngular.cc +++ b/Geometry/MuonCommonData/plugins/dd4hep/DDGEMAngular.cc @@ -1,9 +1,10 @@ #include "DD4hep/DetFactoryHelper.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -using namespace cms_units::operators; +using namespace angle_units::operators; //#define EDM_ML_DEBUG @@ -23,8 +24,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext #ifdef EDM_ML_DEBUG edm::LogVerbatim("MuonGeom") << "DDGEMAngular: Parameters for positioning-- " << n << " copies in steps of " << convertRadToDeg(stepAngle) << " from " << convertRadToDeg(startAngle) - << " (inversion flag " << invert << ") \trPos " << rPos << " Zoffest " << zoffset - << "\tStart and inremental " + << " (inversion flag " << invert << ") \trPos " << cms::convert2mm(rPos) << " Zoffest " + << cms::convert2mm(zoffset) << "\tStart and inremental " << "copy nos " << startCopyNo << ", " << incrCopyNo; #endif std::string childName = args.value("ChildName"); @@ -58,12 +59,14 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext parent.placeVolume(child, copyNo, dd4hep::Transform3D(rotation, tran)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("MuonGeom") << "DDGEMAngular: " << child.name() << " number " << copyNo << " positioned in " - << parentName << " at " << tran << " with " << rotation; + << parentName << " at (" << cms::convert2mm(rPos * cos(phiz)) << "," + << cms::convert2mm(rPos * sin(phiz)) << "," << cms::convert2mm(zoffset) << ") with " + << rotation; #endif phi += stepAngle; copyNo += incrCopyNo; } - return 1; + return cms::s_executed; } // first argument is the type from the xml file diff --git a/Geometry/MuonCommonData/plugins/dd4hep/DDMuonAngular.cc b/Geometry/MuonCommonData/plugins/dd4hep/DDMuonAngular.cc index bce404d155062..4692e76862f4c 100644 --- a/Geometry/MuonCommonData/plugins/dd4hep/DDMuonAngular.cc +++ b/Geometry/MuonCommonData/plugins/dd4hep/DDMuonAngular.cc @@ -1,9 +1,12 @@ #include "DD4hep/DetFactoryHelper.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -using namespace cms_units::operators; +//#define EDM_ML_DEBUG + +using namespace angle_units::operators; static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& context, xml_h element) { cms::DDNamespace ns(context, element, true); @@ -21,12 +24,13 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext childName = ns.prepend(childName); dd4hep::Volume child = ns.volume(childName); - edm::LogVerbatim("MuonGeom") << "debug: Parameters for positioning:: n " << n << " Start, Step " +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("MuonGeom") << "DDMuonAngular: Parameters for positioning:: n " << n << " Start, Step " << convertRadToDeg(startAngle) << ", " << convertRadToDeg(stepAngle) << ", zoffset " - << zoffset << ", RotNameSpace " << rotns; - edm::LogVerbatim("MuonGeom") << "debug: Parent " << mother.name() << "\tChild " << child.name() << " NameSpace " - << ns.name(); - + << cms::convert2mm(zoffset) << ", RotNameSpace " << rotns; + edm::LogVerbatim("MuonGeom") << "DDMuonAngular: Parent " << mother.name() << "\tChild " << child.name() + << " NameSpace " << ns.name(); +#endif double phi = startAngle; int copyNo = startCopyNo; @@ -42,12 +46,15 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext } dd4hep::Position tran(0., 0., zoffset); mother.placeVolume(child, copyNo, dd4hep::Transform3D(rotation, tran)); - edm::LogVerbatim("MuonGeom") << "test " << child.name() << " number " << copyNo << " positioned in " - << mother.name() << " at " << tran << " with " << rotstr << ": " << rotation; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("MuonGeom") << "DDMuonAngular:" << child.name() << " number " << copyNo << " positioned in " + << mother.name() << " at (0,0," << cms::convert2mm(zoffset) << ") with " << rotstr + << ": " << rotation; +#endif phi += stepAngle; copyNo += incrCopyNo; } - return 1; + return cms::s_executed; } // first argument is the type from the xml file diff --git a/Geometry/MuonCommonData/test/python/dumpGE0_cfg.py b/Geometry/MuonCommonData/test/python/dumpGE0_cfg.py index 35be20676425a..0b8b7fe01ea71 100644 --- a/Geometry/MuonCommonData/test/python/dumpGE0_cfg.py +++ b/Geometry/MuonCommonData/test/python/dumpGE0_cfg.py @@ -6,9 +6,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('MuonGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.MuonGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/MuonCommonData/test/python/dumpGEM_cfg.py b/Geometry/MuonCommonData/test/python/dumpGEM_cfg.py index 52b4918491501..19de3652560c9 100644 --- a/Geometry/MuonCommonData/test/python/dumpGEM_cfg.py +++ b/Geometry/MuonCommonData/test/python/dumpGEM_cfg.py @@ -6,9 +6,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('MuonGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.MuonGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/MuonCommonData/test/python/runME_cfg.py b/Geometry/MuonCommonData/test/python/runME_cfg.py index d142ac3c71110..1103cbf2a9a21 100644 --- a/Geometry/MuonCommonData/test/python/runME_cfg.py +++ b/Geometry/MuonCommonData/test/python/runME_cfg.py @@ -23,9 +23,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('MuonGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.MuonGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Geometry/MuonCommonData/test/python/testDDGEMAngularAlgorithm.py b/Geometry/MuonCommonData/test/python/testDDGEMAngularAlgorithm.py index fc18c77ddef98..877d75375d103 100644 --- a/Geometry/MuonCommonData/test/python/testDDGEMAngularAlgorithm.py +++ b/Geometry/MuonCommonData/test/python/testDDGEMAngularAlgorithm.py @@ -10,7 +10,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('MuonGeom') + process.MessageLogger.MuonGeom=dict() process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", confGeomXMLFiles = cms.FileInPath('Geometry/MuonCommonData/data/cms-test-ddgemangular-algorithm.xml'), diff --git a/Geometry/MuonNumbering/test/testMuonOffsetDD4Hep_cfg.py b/Geometry/MuonNumbering/test/testMuonOffsetDD4Hep_cfg.py index c89c802dc4c26..8b99ca169be08 100644 --- a/Geometry/MuonNumbering/test/testMuonOffsetDD4Hep_cfg.py +++ b/Geometry/MuonNumbering/test/testMuonOffsetDD4Hep_cfg.py @@ -14,7 +14,7 @@ ) if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('MuonGeom') + process.MessageLogger.MuonGeom=dict() process.hpa = cms.EDAnalyzer("MuonOffsetAnalyzer") process.Timing = cms.Service("Timing") diff --git a/Geometry/MuonNumbering/test/testMuonOffsetDDD_cfg.py b/Geometry/MuonNumbering/test/testMuonOffsetDDD_cfg.py index 160d3cec9612f..ef0f5aa627006 100644 --- a/Geometry/MuonNumbering/test/testMuonOffsetDDD_cfg.py +++ b/Geometry/MuonNumbering/test/testMuonOffsetDDD_cfg.py @@ -14,7 +14,7 @@ ) if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('MuonGeom') + process.MessageLogger.MuonGeom=dict() process.hpa = cms.EDAnalyzer("MuonOffsetAnalyzer") process.Timing = cms.Service("Timing") diff --git a/Geometry/RPCGeometryBuilder/plugins/RPCGeometryESModule.cc b/Geometry/RPCGeometryBuilder/plugins/RPCGeometryESModule.cc index fcb3d92622e21..0147155a16dbb 100644 --- a/Geometry/RPCGeometryBuilder/plugins/RPCGeometryESModule.cc +++ b/Geometry/RPCGeometryBuilder/plugins/RPCGeometryESModule.cc @@ -74,16 +74,19 @@ void RPCGeometryESModule::fillDescriptions(edm::ConfigurationDescriptions& descr std::unique_ptr RPCGeometryESModule::produce(const MuonGeometryRecord& record) { if (fromDDD_) { + edm::LogVerbatim("RPCGeoemtryESModule") << "(0) RPCGeometryESModule - DDD "; edm::ESTransientHandle cpv = record.getTransientHandle(idealGeomToken_); auto const& mdc = record.get(dddConstantsToken_); RPCGeometryBuilder builder; return std::unique_ptr(builder.build(&(*cpv), mdc)); } else if (fromDD4hep_) { + edm::LogVerbatim("RPCGeoemtryESModule") << "(0) RPCGeometryESModule - DD4HEP "; edm::ESTransientHandle cpv = record.getTransientHandle(idealDD4hepGeomToken_); auto const& mdc = record.get(dddConstantsToken_); RPCGeometryBuilder builder; return std::unique_ptr(builder.build(&(*cpv), mdc)); } else { + edm::LogVerbatim("RPCGeoemtryESModule") << "(0) RPCGeometryESModule - DB "; auto const& rigrpc = record.get(recoIdealToken_); RPCGeometryBuilderFromCondDB builder; return std::unique_ptr(builder.build(rigrpc)); diff --git a/Geometry/RPCGeometryBuilder/src/RPCGeometryBuilder.cc b/Geometry/RPCGeometryBuilder/src/RPCGeometryBuilder.cc index b5e9711fd683c..f6c8917db84a2 100644 --- a/Geometry/RPCGeometryBuilder/src/RPCGeometryBuilder.cc +++ b/Geometry/RPCGeometryBuilder/src/RPCGeometryBuilder.cc @@ -28,6 +28,7 @@ #include "DetectorDescription/DDCMS/interface/DDSpecParRegistry.h" #include "DataFormats/Math/interface/CMSUnits.h" #include "DataFormats/Math/interface/GeantUnits.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" using namespace cms_units::operators; @@ -91,11 +92,19 @@ std::unique_ptr RPCGeometryBuilder::buildGeometry(DDFilteredView& f std::vector dpar = fview.logicalPart().solid().parameters(); std::string name = fview.logicalPart().name().name(); + + edm::LogVerbatim("RPCGeometryBuilder") + << "(1) " + << "detid: " << detid << " name: " << name << " number of Strips: " << nStrips; + DDTranslation tran = fview.translation(); DDRotationMatrix rota = fview.rotation(); Surface::PositionType pos(geant_units::operators::convertMmToCm(tran.x()), geant_units::operators::convertMmToCm(tran.y()), geant_units::operators::convertMmToCm(tran.z())); + edm::LogVerbatim("RPCGeometryBuilder") << "(2), tran.x() " << geant_units::operators::convertMmToCm(tran.x()) + << " tran.y(): " << geant_units::operators::convertMmToCm(tran.y()) + << " tran.z(): " << geant_units::operators::convertMmToCm(tran.z()); DD3Vector x, y, z; rota.GetComponents(x, y, z); @@ -116,11 +125,15 @@ std::unique_ptr RPCGeometryBuilder::buildGeometry(DDFilteredView& f const float width = geant_units::operators::convertMmToCm(dpar[0]); const float length = geant_units::operators::convertMmToCm(dpar[1]); const float thickness = geant_units::operators::convertMmToCm(dpar[2]); + + // Barrel + edm::LogVerbatim("RPCGeometryBuilder") + << "(3) dpar.size() == 3, width: " << width << " length: " << length << " thickness: " << thickness; + bounds = new RectangularPlaneBounds(width, length, thickness); const std::vector pars = {width, length, float(numbOfStrips.doubles()[0])}; rollspecs = new RPCRollSpecs(GeomDetEnumerators::RPCBarrel, name, pars); - LogDebug("RPCGeometryBuilder") << "Barrel " << name << " par " << width << " " << length << " " << thickness; } else { const float be = geant_units::operators::convertMmToCm(dpar[4]); @@ -134,8 +147,9 @@ std::unique_ptr RPCGeometryBuilder::buildGeometry(DDFilteredView& f float(geant_units::operators::convertMmToCm(dpar[8])), float(geant_units::operators::convertMmToCm(dpar[0])), float(numbOfStrips.doubles()[0])}; - LogDebug("RPCGeometryBuilder") << "Forward " << name << " par " << dpar[4] << " " << dpar[8] << " " << dpar[3] - << " " << dpar[0]; + //Forward + edm::LogVerbatim("RPCGeometryBuilder") + << "(4), else, dpar[4]: " << be << " dpar[8]: " << te << " dpar[0]: " << ap << " ti: " << ti; rollspecs = new RPCRollSpecs(GeomDetEnumerators::RPCEndcap, name, pars); @@ -252,13 +266,18 @@ std::unique_ptr RPCGeometryBuilder::buildGeometry(cms::DDFilteredVi std::string_view name = fview.name(); + edm::LogVerbatim("RPCGeometryBuilder") + << "(1), detid: " << rawidCh << " name: " << std::string(name) << " number of Strips: " << nStrips; + const Double_t* tran = fview.trans(); DDRotationMatrix rota; fview.rot(rota); - Surface::PositionType pos(tran[0], tran[1], tran[2]); - + Surface::PositionType pos(tran[0] / dd4hep::cm, tran[1] / dd4hep::cm, tran[2] / dd4hep::cm); + edm::LogVerbatim("RPCGeometryBuilder") + << "(2), tran.x(): " << tran[0] / dd4hep::cm << " tran.y(): " << tran[1] / dd4hep::cm + << " tran.z(): " << tran[2] / dd4hep::cm; DD3Vector x, y, z; rota.GetComponents(x, y, z); Surface::RotationType rot(float(x.X()), @@ -275,10 +294,12 @@ std::unique_ptr RPCGeometryBuilder::buildGeometry(cms::DDFilteredVi Bounds* bounds = nullptr; if (dd4hep::isA(fview.solid())) { - const float width = dpar[0]; - const float length = dpar[1]; - const float thickness = dpar[2]; - + const float width = dpar[0] / dd4hep::cm; + const float length = dpar[1] / dd4hep::cm; + const float thickness = dpar[2] / dd4hep::cm; + edm::LogVerbatim("RPCGeometryBuilder") + << "(3), dd4hep::Box, width: " << dpar[0] / dd4hep::cm << " length: " << dpar[1] / dd4hep::cm + << " thickness: " << dpar[2] / dd4hep::cm; bounds = new RectangularPlaneBounds(width, length, thickness); const std::vector pars = {width, length, float(nStrips)}; @@ -286,14 +307,18 @@ std::unique_ptr RPCGeometryBuilder::buildGeometry(cms::DDFilteredVi rollspecs = new RPCRollSpecs(GeomDetEnumerators::RPCBarrel, std::string(name), pars); } else { - const float be = dpar[0]; - const float te = dpar[1]; - const float ap = dpar[3]; - const float ti = 0.4; + const float be = dpar[0] / dd4hep::cm; + const float te = dpar[1] / dd4hep::cm; + const float ap = dpar[3] / dd4hep::cm; + const float ti = 0.4 / dd4hep::cm; bounds = new TrapezoidalPlaneBounds(be, te, ap, ti); - const std::vector pars = {float(dpar[0]), float(dpar[1]), float(dpar[3]), float(nStrips)}; - + const std::vector pars = { + float(dpar[0] / dd4hep::cm), float(dpar[1] / dd4hep::cm), float(dpar[3] / dd4hep::cm), float(nStrips)}; + edm::LogVerbatim("RPCGeometryBuilder") + << "(4), else, dpar[0] (i.e. dpar[4] for DD): " << dpar[0] / dd4hep::cm + << " dpar[1] (i.e. dpar[8] for DD): " << dpar[1] / dd4hep::cm + << " dpar[3] (i.e. dpar[0] for DD): " << dpar[3] / dd4hep::cm << " ti: " << ti / dd4hep::cm; rollspecs = new RPCRollSpecs(GeomDetEnumerators::RPCEndcap, std::string(name), pars); Basic3DVector newX(1., 0., 0.); diff --git a/Geometry/RPCGeometryBuilder/src/RPCGeometryParsFromDD.cc b/Geometry/RPCGeometryBuilder/src/RPCGeometryParsFromDD.cc index ffbfcd66aa9f2..78a42924f5961 100644 --- a/Geometry/RPCGeometryBuilder/src/RPCGeometryParsFromDD.cc +++ b/Geometry/RPCGeometryBuilder/src/RPCGeometryParsFromDD.cc @@ -1,31 +1,34 @@ -/** Implementation of the RPC Geometry Builder from DDD +/* Implementation of the RPCGeometryParsFromDD Class + * Build the RPCGeometry from the DDD and DD4Hep description + * + * DD4hep part added to the original old file (DD version) made by M. Maggi (INFN Bari) + * Author: Sergio Lo Meo (sergio.lo.meo@cern.ch) + * Created: Mon, 09 Nov 2020 * - * \author Port of: MuDDDRPCBuilder (ORCA) - * \author M. Maggi - INFN Bari */ #include "Geometry/RPCGeometryBuilder/src/RPCGeometryParsFromDD.h" #include "DataFormats/MuonDetId/interface/RPCDetId.h" - #include #include #include #include - #include "Geometry/MuonNumbering/interface/MuonGeometryNumbering.h" #include "Geometry/MuonNumbering/interface/MuonBaseNumber.h" #include "Geometry/MuonNumbering/interface/RPCNumberingScheme.h" - #include "DataFormats/GeometryVector/interface/Basic3DVector.h" - #include "CLHEP/Units/GlobalSystemOfUnits.h" - #include #include +#include +#include +#include "DetectorDescription/DDCMS/interface/DDSpecParRegistry.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" RPCGeometryParsFromDD::RPCGeometryParsFromDD() {} RPCGeometryParsFromDD::~RPCGeometryParsFromDD() {} +// DD void RPCGeometryParsFromDD::build(const DDCompactView* cview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rgeo) { @@ -39,6 +42,20 @@ void RPCGeometryParsFromDD::build(const DDCompactView* cview, this->buildGeometry(fview, muonConstants, rgeo); } +// DD4Hep + +void RPCGeometryParsFromDD::build(const cms::DDCompactView* cview, + const MuonGeometryConstants& muonConstants, + RecoIdealGeometry& rgeo) { + const std::string attribute = "ReadOutName"; + const std::string value = "MuonRPCHits"; + const cms::DDFilter filter(attribute, value); + cms::DDFilteredView fview(*cview, filter); + this->buildGeometry(fview, muonConstants, rgeo); +} + +// DD + void RPCGeometryParsFromDD::buildGeometry(DDFilteredView& fview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rgeo) { @@ -50,6 +67,7 @@ void RPCGeometryParsFromDD::buildGeometry(DDFilteredView& fview, // Get the The Rpc det Id RPCNumberingScheme rpcnum(muonConstants); const int detid = rpcnum.baseNumberToUnitNumber(mbn); + RPCDetId rpcid(detid); DDValue numbOfStrips("nStrips"); @@ -67,6 +85,11 @@ void RPCGeometryParsFromDD::buildGeometry(DDFilteredView& fview, const std::vector dpar = fview.logicalPart().solid().parameters(); const std::string name = fview.logicalPart().name().name(); + + edm::LogVerbatim("RPCGeometryParsFromDD") + << " (1) " + << "detid: " << detid << " name: " << name << " number of Strips: " << nStrips; + const std::vector strpars = {name}; const DDTranslation& tran = fview.translation(); @@ -78,15 +101,84 @@ void RPCGeometryParsFromDD::buildGeometry(DDFilteredView& fview, const double width = dpar[0]; const double length = dpar[1]; const double thickness = dpar[2]; + edm::LogVerbatim("RPCGeometryParsFromDD") + << " (2) dpar.size() == 3, width: " << width << " length: " << length << " thickness: " << thickness; pars = {width, length, thickness, numbOfStrips.doubles()[0]}; } else { - pars = { - dpar[4] /*b/2*/, dpar[8] /*B/2*/, dpar[0] /*h/2*/, 0.4, numbOfStrips.doubles()[0] /*h/2*/ - }; + const double dpar4 = dpar[4]; + const double dpar8 = dpar[8]; + const double dpar0 = dpar[0]; + pars = {dpar4, dpar8, dpar0, 0.4, numbOfStrips.doubles()[0]}; + edm::LogVerbatim("RPCGeometryParsFromDD") + << " (3), else, dpar[4]: " << dpar4 << " dpar[8]: " << dpar8 << " dpar[0]: " << dpar0; } const std::vector vtra = {tran.x(), tran.y(), tran.z()}; + + edm::LogVerbatim("RPCGeometryParsFromDD") + << " (4), tran.x() " << tran.x() << " tran.y(): " << tran.y() << " tran.z(): " << tran.z(); + const std::vector vrot = {x.X(), x.Y(), x.Z(), y.X(), y.Y(), y.Z(), z.X(), z.Y(), z.Z()}; + edm::LogVerbatim("RPCGeometryParsFromDD") + << " (5), x.X(), x.Y(), x.Z(), y.X(), y.Y(), y.Z(), z.X(), z.Y(), z.Z() " << x.X() << ", " << x.Y() << ", " + << x.Z() << ", " << y.X() << ", " << y.Y() << ", " << y.Z() << ", " << z.X() << ", " << z.Y() << ", " << z.Z(); rgeo.insert(rpcid.rawId(), vtra, vrot, pars, strpars); } } + +// DD4Hep + +void RPCGeometryParsFromDD::buildGeometry(cms::DDFilteredView& fview, + const MuonGeometryConstants& muonConstants, + RecoIdealGeometry& rgeo) { + while (fview.firstChild()) { + MuonGeometryNumbering mdddnum(muonConstants); + RPCNumberingScheme rpcnum(muonConstants); + int rawidCh = rpcnum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fview.history())); + RPCDetId rpcid = RPCDetId(rawidCh); + + auto nStrips = fview.get("nStrips"); + + std::vector dpar = fview.parameters(); + + std::string_view name = fview.name(); + + edm::LogVerbatim("RPCGeometryParsFromDD") + << " (1), detid: " << rawidCh << " name: " << std::string(name) << " number of Strips: " << nStrips; + + const std::vector strpars = {std::string(name)}; + + std::vector tran(3); + tran[0] = static_cast(fview.translation().X()) / dd4hep::mm; + tran[1] = static_cast(fview.translation().Y()) / dd4hep::mm; + tran[2] = static_cast(fview.translation().Z()) / dd4hep::mm; + + DDRotationMatrix rota; + fview.rot(rota); + DD3Vector x, y, z; + rota.GetComponents(x, y, z); + const std::vector rot = {x.X(), x.Y(), x.Z(), y.X(), y.Y(), y.Z(), z.X(), z.Y(), z.Z()}; + + if (dd4hep::isA(fview.solid())) { + const std::vector pars = { + dpar[0] / dd4hep::mm, dpar[1] / dd4hep::mm, dpar[2] / dd4hep::mm, double(nStrips)}; + edm::LogVerbatim("RPCGeometryParsFromDD") + << " (2), dd4hep::Box, width: " << dpar[0] / dd4hep::mm << " length: " << dpar[1] / dd4hep::mm + << " thickness: " << dpar[2] / dd4hep::mm; + rgeo.insert(rpcid, tran, rot, pars, strpars); + } else { + const double ti = 0.4; + const std::vector pars = { + dpar[0] / dd4hep::mm, dpar[1] / dd4hep::mm, dpar[3] / dd4hep::mm, ti, double(nStrips)}; + edm::LogVerbatim("RPCGeometryParsFromDD") << " (3), else, dpar[0] (i.e. dpar[4] for DD): " << dpar[0] / dd4hep::mm + << " dpar[1] (i.e. dpar[8] for DD): " << dpar[1] / dd4hep::mm + << " dpar[3] (i.e. dpar[0] for DD): " << dpar[3] / dd4hep::mm; + rgeo.insert(rpcid, tran, rot, pars, strpars); + } + edm::LogVerbatim("RPCGeometryParsFromDD") + << " (4), tran.x(): " << tran[0] << " tran.y(): " << tran[1] << " tran.z(): " << tran[2]; + edm::LogVerbatim("RPCGeometryParsFromDD") + << " (5), x.X(), x.Y(), x.Z(), y.X(), y.Y(), y.Z(), z.X(), z.Y(), z.Z(): " << x.X() << ", " << x.Y() << ", " + << x.Z() << ", " << y.X() << ", " << y.Y() << ", " << y.Z() << ", " << z.X() << ", " << z.Y() << ", " << z.Z(); + } +} diff --git a/Geometry/RPCGeometryBuilder/src/RPCGeometryParsFromDD.h b/Geometry/RPCGeometryBuilder/src/RPCGeometryParsFromDD.h index f75408e0e44d3..11f395cd53e0f 100644 --- a/Geometry/RPCGeometryBuilder/src/RPCGeometryParsFromDD.h +++ b/Geometry/RPCGeometryBuilder/src/RPCGeometryParsFromDD.h @@ -1,11 +1,12 @@ #ifndef RPCGeometry_RPCGeometryParsFromDD_H #define RPCGeometry_RPCGeometryParsFromDD_H -/** \class RPCGeometryParsFromDD - * Build the RPCGeometry ftom the DDD description - * - * \author Port of: MuDDDRPCBuilder, MuonRPCGeometryBuilder (ORCA) - * \author M. Maggi - INFN Bari +/* \class RPCGeometryParsFromDD + * Build the RPCGeometry from the DDD and DD4Hep description + * + * DD4hep part added to the original old file (DD version) made by M. Maggi (INFN Bari) + * Author: Sergio Lo Meo (sergio.lo.meo@cern.ch) + * Created: Mon, 09 Nov 2020 * */ @@ -15,6 +16,10 @@ class DDCompactView; class DDFilteredView; +namespace cms { // DD4Hep + class DDFilteredView; + class DDCompactView; +} // namespace cms class RPCDetId; class RPCRoll; class MuonGeometryConstants; @@ -25,10 +30,16 @@ class RPCGeometryParsFromDD { ~RPCGeometryParsFromDD(); + // DD void build(const DDCompactView* cview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rgeo); + // DD4Hep + void build(const cms::DDCompactView* cview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rgeo); private: + // DD void buildGeometry(DDFilteredView& fview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rgeo); + // DD4Hep + void buildGeometry(cms::DDFilteredView& fview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rgeo); }; #endif diff --git a/Geometry/RPCGeometryBuilder/test/python/dumpRPCGeometryDD4hep_cfg.py b/Geometry/RPCGeometryBuilder/test/python/dumpRPCGeometryDD4hep_cfg.py index 9974017813213..28a1eb4e33a86 100644 --- a/Geometry/RPCGeometryBuilder/test/python/dumpRPCGeometryDD4hep_cfg.py +++ b/Geometry/RPCGeometryBuilder/test/python/dumpRPCGeometryDD4hep_cfg.py @@ -10,9 +10,9 @@ process.load("Geometry.RPCGeometryBuilder.rpcGeometryDump_cfi") if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('Geometry') - process.MessageLogger.categories.append('RPCNumberingScheme') - process.MessageLogger.categories.append('RPCGeometry') + process.MessageLogger.Geometry=dict() + process.MessageLogger.RPCNumberingScheme=dict() + process.MessageLogger.RPCGeometry=dict() process.source = cms.Source('EmptySource') diff --git a/Geometry/RPCGeometryBuilder/test/python/dumpRPCGeometryDDD_cfg.py b/Geometry/RPCGeometryBuilder/test/python/dumpRPCGeometryDDD_cfg.py index d65a622045453..9a0c5e69a3f00 100644 --- a/Geometry/RPCGeometryBuilder/test/python/dumpRPCGeometryDDD_cfg.py +++ b/Geometry/RPCGeometryBuilder/test/python/dumpRPCGeometryDDD_cfg.py @@ -10,9 +10,9 @@ process.load("Geometry.RPCGeometryBuilder.rpcGeometryDump_cfi") if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('Geometry') - process.MessageLogger.categories.append('RPCNumberingScheme') - process.MessageLogger.categories.append('RPCGeometry') + process.MessageLogger.Geometry=dict() + process.MessageLogger.RPCNumberingScheme=dict() + process.MessageLogger.RPCGeometry=dict() process.source = cms.Source('EmptySource') diff --git a/Geometry/RPCGeometryBuilder/test/python/validateRPCGeometryDD4hep_cfg.py b/Geometry/RPCGeometryBuilder/test/python/validateRPCGeometryDD4hep_cfg.py index 6346620e9c39c..c89854d97e56d 100644 --- a/Geometry/RPCGeometryBuilder/test/python/validateRPCGeometryDD4hep_cfg.py +++ b/Geometry/RPCGeometryBuilder/test/python/validateRPCGeometryDD4hep_cfg.py @@ -14,6 +14,13 @@ process.load("Geometry.MuonNumbering.muonGeometryConstants_cff") process.load("Geometry.RPCGeometryBuilder.rpcGeometry_cfi") +process.MessageLogger = cms.Service("MessageLogger", + destinations = cms.untracked.vstring('myLog'), + myLog = cms.untracked.PSet( + threshold = cms.untracked.string('INFO'), + ) + ) + process.valid = cms.EDAnalyzer("RPCGeometryValidate", infileName = cms.untracked.string('cmsRecoGeom-2021.root'), outfileName = cms.untracked.string('validateRPCGeometry.root'), diff --git a/Geometry/RPCGeometryBuilder/test/python/validateRPCGeometryDDD_cfg.py b/Geometry/RPCGeometryBuilder/test/python/validateRPCGeometryDDD_cfg.py index 7f20a587b6b55..ae5821b7794b1 100644 --- a/Geometry/RPCGeometryBuilder/test/python/validateRPCGeometryDDD_cfg.py +++ b/Geometry/RPCGeometryBuilder/test/python/validateRPCGeometryDDD_cfg.py @@ -14,6 +14,13 @@ process.load("Geometry.MuonNumbering.muonGeometryConstants_cff") process.load("Geometry.RPCGeometryBuilder.rpcGeometry_cfi") +process.MessageLogger = cms.Service("MessageLogger", + destinations = cms.untracked.vstring('myLog'), + myLog = cms.untracked.PSet( + threshold = cms.untracked.string('INFO'), + ) + ) + process.valid = cms.EDAnalyzer("RPCGeometryValidate", infileName = cms.untracked.string('cmsRecoGeom-2021.root'), outfileName = cms.untracked.string('validateRPCGeometry.root'), diff --git a/Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml b/Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml index 04a031a7ef02e..2045be4e3b85a 100644 --- a/Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml +++ b/Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml @@ -1,5 +1,5 @@ - + @@ -271,7 +271,7 @@ - + @@ -288,7 +288,7 @@ - + @@ -301,123 +301,123 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/Geometry/TrackerCommonData/data/PhaseII/InnerTracker621_50x50_2020_07/pixelStructureTopology.xml b/Geometry/TrackerCommonData/data/PhaseII/InnerTracker621_50x50_2020_07/pixelStructureTopology.xml index 17d555e81af8f..75addcf6b0108 100644 --- a/Geometry/TrackerCommonData/data/PhaseII/InnerTracker621_50x50_2020_07/pixelStructureTopology.xml +++ b/Geometry/TrackerCommonData/data/PhaseII/InnerTracker621_50x50_2020_07/pixelStructureTopology.xml @@ -112,578 +112,578 @@ note: see OT800_IT621_2020_07_16.cfg for full config files - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + diff --git a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker/trackerStructureTopology.xml b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker/trackerStructureTopology.xml index 27a261d2ab4a5..d8a906c2800fb 100644 --- a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker/trackerStructureTopology.xml +++ b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker/trackerStructureTopology.xml @@ -1007,2642 +1007,2642 @@ note: see Baseline_tilted_2016_04_12.cfg for full config files - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + diff --git a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker4025/pixelStructureTopology.xml b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker4025/pixelStructureTopology.xml index 6b5c13c245c2c..54e52c521c2d0 100644 --- a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker4025/pixelStructureTopology.xml +++ b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker4025/pixelStructureTopology.xml @@ -112,578 +112,578 @@ note: see OT613_200_IT4025_2017_03_28.cfg for full config files - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + diff --git a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker4025/trackerStructureTopology.xml b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker4025/trackerStructureTopology.xml index 1674c7659bb14..248f50836c0cf 100644 --- a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker4025/trackerStructureTopology.xml +++ b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker4025/trackerStructureTopology.xml @@ -674,2498 +674,2498 @@ note: see OT613_200_IT4025_2017_03_28.cfg for full config files - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + diff --git a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/pixelStructureTopology.xml b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/pixelStructureTopology.xml index b62427fb3b4c7..0f43afd66ea9a 100644 --- a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/pixelStructureTopology.xml +++ b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/pixelStructureTopology.xml @@ -112,578 +112,578 @@ note: see OT614_200_IT404_2017_12_12.cfg for full config files - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + diff --git a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerStructureTopology.xml b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerStructureTopology.xml index 6d9c75be55b55..f10617ddcdd5e 100644 --- a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerStructureTopology.xml +++ b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerStructureTopology.xml @@ -674,2498 +674,2498 @@ note: see OT614_200_IT404_2017_12_12.cfg for full config files - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + diff --git a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker405/pixelStructureTopology.xml b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker405/pixelStructureTopology.xml index a3d61f35ed944..306fa4bf7601c 100755 --- a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker405/pixelStructureTopology.xml +++ b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker405/pixelStructureTopology.xml @@ -112,578 +112,578 @@ note: see OT613_200_IT405_2018_06_26.cfg for full config files - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + diff --git a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613/pixelStructureTopology.xml b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613/pixelStructureTopology.xml index 83dd9cc12713d..c1425041a1e81 100644 --- a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613/pixelStructureTopology.xml +++ b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613/pixelStructureTopology.xml @@ -112,578 +112,578 @@ note: see OT616_200_IT613_2019_02_20.cfg for full config files - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + diff --git a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker700/pixelStructureTopology.xml b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker700/pixelStructureTopology.xml index 1273bb7e9c85d..7ec8ca458f08a 100644 --- a/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker700/pixelStructureTopology.xml +++ b/Geometry/TrackerCommonData/data/PhaseII/TiltedTracker700/pixelStructureTopology.xml @@ -112,578 +112,578 @@ note: see OT616_IT700_2019_12_16.cfg for full config files - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + diff --git a/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixel.xml b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixel.xml new file mode 100644 index 0000000000000..923575be7ae65 --- /dev/null +++ b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixel.xml @@ -0,0 +1,13754 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + 0*mm, 0*mm, 0*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 2.75*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4*mm + + + + + + diff --git a/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelStructureTopology.xml b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelStructureTopology.xml new file mode 100644 index 0000000000000..f2d9f9e6e2fb4 --- /dev/null +++ b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelStructureTopology.xml @@ -0,0 +1,692 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixfwd.xml b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixfwd.xml new file mode 100644 index 0000000000000..8c9567cb72233 --- /dev/null +++ b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixfwd.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/tracker.xml b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/tracker.xml new file mode 100644 index 0000000000000..7d49e11a4f578 --- /dev/null +++ b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/tracker.xml @@ -0,0 +1,33353 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0*mm, 0*mm, -4.8981*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.8981*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.8981*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.8981*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.8981*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.8981*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.8981*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.8981*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.8981*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.8981*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.8981*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.8981*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.95877*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.64218*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.64218*mm + + + + + + + + + + + + + + + + + + + + + + + + + + + 0*mm, 0*mm, -3.75278*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 3.75278*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -3.75278*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 3.75278*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -3.75278*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 3.75278*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 3.75278*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -3.75278*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 3.75278*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -3.75278*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 3.75278*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -3.75278*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.5*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 5.60117*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -5.60117*mm + + + + + + + + + + + + + + + + + + + + + + + + + + + 0*mm, 0*mm, -4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.04705*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 4.76701*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -4.76701*mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 8.595*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -8.595*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 8.595*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -8.595*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.55*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 8.595*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -8.595*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 8.595*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -8.595*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, 7.495*mm + + + + + + + + + + + + + + 0*mm, 0*mm, -7.495*mm + + + + + + diff --git a/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerStructureTopology.xml b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerStructureTopology.xml new file mode 100644 index 0000000000000..669c37134a622 --- /dev/null +++ b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerStructureTopology.xml @@ -0,0 +1,3174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/TrackerCommonData/data/tob/v1/tob.xml b/Geometry/TrackerCommonData/data/tob/v1/tob.xml new file mode 100644 index 0000000000000..36f485109eb3f --- /dev/null +++ b/Geometry/TrackerCommonData/data/tob/v1/tob.xml @@ -0,0 +1,1410 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -[PottingZ1],-[PottingZ2],-[PottingZ3], [PottingZ3], [PottingZ2], [PottingZ1] + + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[PottingZ1],-[PottingZ2],-[PottingZ3], [PottingZ3], [PottingZ2], [PottingZ1] + + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[ConnectZ21],-[ConnectZ22],-[ConnectZ23], [ConnectZ23], + [ConnectZ22], [ConnectZ21] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + -[ConnectZ21],-[ConnectZ22],-[ConnectZ23], [ConnectZ23], + [ConnectZ22], [ConnectZ21] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[ConnectZ21]-[Connect23ZOffset],-[ConnectZ22]+[Connect23ZOffset],-[ConnectZ23]-[Connect23ZOffset], [ConnectZ23]+[Connect23ZOffset], + [ConnectZ22]-[Connect23ZOffset], [ConnectZ21]+[Connect23ZOffset] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + + -[ConnectZ21],-[ConnectZ22],-[ConnectZ23], [ConnectZ23], + [ConnectZ22], [ConnectZ21] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + -[ConnectZ21],-[ConnectZ22],-[ConnectZ23], [ConnectZ23], + [ConnectZ22], [ConnectZ21] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[ConnectZ21]-[Connect56ZOffset],-[ConnectZ22]+[Connect56ZOffset],-[ConnectZ23]-[Connect56ZOffset], [ConnectZ23]+[Connect56ZOffset], + [ConnectZ22]-[Connect56ZOffset], [ConnectZ21]+[Connect56ZOffset] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [NomexInPhi1], [NomexInPhi3], [NomexInPhi4], [NomexInPhi6], [NomexInPhi8] + + + [zero], [zero], [zero], [zero], [zero] + + + + + + + + + [NomexInPhi2], [NomexInPhi7] + + + [zero], [zero] + + + + + + + + + [NomexInPhi5] + + + [zero] + + + + + + + + + [AlignPhi1], [AlignPhi2], [AlignPhi3], [AlignPhi4], + [AlignPhi5], [AlignPhi6], [AlignPhi7], [AlignPhi8] + + + [zero], [zero], [zero], [zero], [zero], [zero], [zero], [zero] + + + + + + + + + [NomexInPhi1], [NomexInPhi3], [NomexInPhi4], [NomexInPhi6], [NomexInPhi8] + + + [zero], [zero], [zero], [zero], [zero] + + + + + + + + + [NomexInPhi2], [NomexInPhi7] + + + [zero], [zero] + + + + + + + + + [NomexInPhi5] + + + [zero] + + + + + + + + + [AlignPhi1], [AlignPhi2], [AlignPhi3], [AlignPhi4], + [AlignPhi5], [AlignPhi6], [AlignPhi7], [AlignPhi8] + + + [zero], [zero], [zero], [zero], [zero], [zero], [zero], [zero] + + + + + + + + + [NomexInPhi1], [NomexInPhi3], [NomexInPhi4], [NomexInPhi6], [NomexInPhi8] + + + [zero], [zero], [zero], [zero], [zero] + + + + + + + + + [NomexInPhi2], [NomexInPhi7] + + + [zero], [zero] + + + + + + + + + [NomexInPhi5] + + + [zero] + + + + + + + + + [Layer0LowR], [Layer1LowR], [Layer2LowR], + [Layer3LowR], [Layer4LowR], [Layer5LowR] + + + [Layer0HighR], [Layer1HighR], [Layer2HighR], + [Layer3HighR], [Layer4HighR], [Layer5HighR] + + + tobmaterial:TOB_rad_services1, tobmaterial:TOB_rad_services2, + tobmaterial:TOB_rad_services3, tobmaterial:TOB_rad_services4, + tobmaterial:TOB_rad_services5, tobmaterial:TOB_rad_services6 + + + + + tobmaterial:TOB_rib1, tobmaterial:TOB_rib2, tobmaterial:TOB_rib3, + tobmaterial:TOB_rib4, tobmaterial:TOB_rib5, tobmaterial:TOB_rib6 + + + + + + + + + + [Layer0CoolRa], [Layer1CoolRa], [Layer2CoolRa], + [Layer3CoolRa], [Layer4CoolRa], [Layer5CoolRa] + + + [Layer0CoolRr], [Layer1CoolRr], [Layer2CoolRr], + [Layer3CoolRr], [Layer4CoolRr], [Layer5CoolRr] + + + + + 1, 2, 3, 4, 5, 6 + + + + + + 1 , 2 , 3 , 4 , 5 , 6 , + 7 , 8 , 9 , 10 , 11 , 12 , + 13 , 14 , 15 , 16 , 17 , 18 + + + + + + + -10*deg , 10*deg , 30*deg , 50*deg , 70*deg , 90*deg , + 110*deg , 130*deg , 150*deg , 170*deg , 190*deg , 210*deg , + 230*deg , 250*deg , 270*deg , 290*deg , 310*deg , 330*deg + + + materials:Air , tobmaterial:TOB_ax_services_A2 , + tobmaterial:TOB_ax_services_A3 , tobmaterial:TOB_ax_services_A4 , + tobmaterial:TOB_ax_services_A5 , materials:Air , + tobmaterial:TOB_ax_services_A7 , tobmaterial:TOB_ax_services_A8 , + tobmaterial:TOB_ax_services_A9 , materials:Air , + tobmaterial:TOB_ax_services_A11 , tobmaterial:TOB_ax_services_A12 , + tobmaterial:TOB_ax_services_A13 , tobmaterial:TOB_ax_services_A14 , + materials:Air , tobmaterial:TOB_ax_services_A16 , + tobmaterial:TOB_ax_services_A17 , tobmaterial:TOB_ax_services_A18 + + + materials:Air , tobmaterial:TOB_ax_services_B2 , + tobmaterial:TOB_ax_services_B3 , tobmaterial:TOB_ax_services_B4 , + tobmaterial:TOB_ax_services_B5 , tobmaterial:TOB_ax_services_B6 , + tobmaterial:TOB_ax_services_B7 , tobmaterial:TOB_ax_services_B8 , + tobmaterial:TOB_ax_services_B9 , materials:Air , + tobmaterial:TOB_ax_services_B11 , tobmaterial:TOB_ax_services_B12 , + tobmaterial:TOB_ax_services_B13 , tobmaterial:TOB_ax_services_B14 , + tobmaterial:TOB_ax_services_B15 , tobmaterial:TOB_ax_services_B16 , + tobmaterial:TOB_ax_services_B17 , tobmaterial:TOB_ax_services_B18 + + + materials:Air , tobmaterial:TOB_ax_services_C2 , + tobmaterial:TOB_ax_services_C3 , tobmaterial:TOB_ax_services_C4 , + materials:Air , tobmaterial:TOB_ax_services_C6 , + tobmaterial:TOB_ax_services_C7 , tobmaterial:TOB_ax_services_C8 , + tobmaterial:TOB_ax_services_C9 , materials:Air , + tobmaterial:TOB_ax_services_C11 , tobmaterial:TOB_ax_services_C12 , + tobmaterial:TOB_ax_services_C13 , materials:Air , + tobmaterial:TOB_ax_services_C15 , tobmaterial:TOB_ax_services_C16 , + tobmaterial:TOB_ax_services_C17 , tobmaterial:TOB_ax_services_C18 + + + + + + + + + + + [DOHM_R1_phi1] , [DOHM_R1_phi2] , [DOHM_R1_phi3] , [DOHM_R1_phi4] , [DOHM_R1_phi5] , + [DOHM_R1_phi6] , [DOHM_R1_phi7] , [DOHM_R1_phi8] , [DOHM_R1_phi9] , [DOHM_R1_phi10] , + [DOHM_R1_phi11] , [DOHM_R1_phi12] , [DOHM_R1_phi13] , [DOHM_R1_phi14] , [DOHM_R1_phi15] + + + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] + + + + + + + + + + + [DOHM_R2_phi1] , [DOHM_R2_phi2] , [DOHM_R2_phi3] , [DOHM_R2_phi4] , [DOHM_R2_phi5] , + [DOHM_R2_phi6] , [DOHM_R2_phi7] , [DOHM_R2_phi8] , [DOHM_R2_phi9] , [DOHM_R2_phi10] , + [DOHM_R2_phi11] , [DOHM_R2_phi12] , [DOHM_R2_phi13] , [DOHM_R2_phi14] , [DOHM_R2_phi15] + + + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] + + + + + + + + + + + [DOHM_R3_phi1] , [DOHM_R3_phi2] , [DOHM_R3_phi3] , [DOHM_R3_phi4] , [DOHM_R3_phi5] , + [DOHM_R3_phi6] , [DOHM_R3_phi7] , [DOHM_R3_phi8] , [DOHM_R3_phi9] , [DOHM_R3_phi10] , + [DOHM_R3_phi11] , [DOHM_R3_phi12] , [DOHM_R3_phi13] , [DOHM_R3_phi14] , [DOHM_R3_phi15] , + [DOHM_R3_phi16] + + + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] + + + diff --git a/Geometry/TrackerCommonData/data/tob/v3/tob.xml b/Geometry/TrackerCommonData/data/tob/v3/tob.xml new file mode 100644 index 0000000000000..a42614dae1ada --- /dev/null +++ b/Geometry/TrackerCommonData/data/tob/v3/tob.xml @@ -0,0 +1,1417 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -[PottingZ1]-2*[ConnectL23],-[PottingZ2]+2*[ConnectL23], + -[PottingZ3]-2*[ConnectL23], [PottingZ3]+2*[ConnectL23], + [PottingZ2]-2*[ConnectL23], [PottingZ1]+2*[ConnectL23] + + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[PottingZ1]-2*[ConnectL56],-[PottingZ2]+2*[ConnectL56], + -[PottingZ3]-2*[ConnectL56], [PottingZ3]+2*[ConnectL56], + [PottingZ2]-2*[ConnectL56], [PottingZ1]+2*[ConnectL56] + + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[ConnectZ21],-[ConnectZ22],-[ConnectZ23], [ConnectZ23], + [ConnectZ22], [ConnectZ21] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + -[ConnectZ21],-[ConnectZ22],-[ConnectZ23], [ConnectZ23], + [ConnectZ22], [ConnectZ21] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[ConnectZ21]-[Connect23ZOffset]-2*[ConnectL23],-[ConnectZ22]+[Connect23ZOffset]+2*[ConnectL23], + -[ConnectZ23]-[Connect23ZOffset]-2*[ConnectL23], [ConnectZ23]+[Connect23ZOffset]+2*[ConnectL23], + [ConnectZ22]-[Connect23ZOffset]-2*[ConnectL23], [ConnectZ21]+[Connect23ZOffset]+2*[ConnectL23] + + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + + -[ConnectZ21],-[ConnectZ22],-[ConnectZ23], [ConnectZ23], + [ConnectZ22], [ConnectZ21] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + -[ConnectZ21],-[ConnectZ22],-[ConnectZ23], [ConnectZ23], + [ConnectZ22], [ConnectZ21] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[ConnectZ21]-[Connect56ZOffset]-2*[ConnectL56],-[ConnectZ22]+[Connect56ZOffset]+2*[ConnectL56], + -[ConnectZ23]-[Connect56ZOffset]-2*[ConnectL56], [ConnectZ23]+[Connect56ZOffset]+2*[ConnectL56], + [ConnectZ22]-[Connect56ZOffset]-2*[ConnectL56], [ConnectZ21]+[Connect56ZOffset]+2*[ConnectL56] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + + + + 0, 0, 0 + + + + + + + + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL + + + + + + + + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] + + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [NomexInPhi1], [NomexInPhi3], [NomexInPhi4], [NomexInPhi6], [NomexInPhi8] + + + [zero], [zero], [zero], [zero], [zero] + + + + + + + + + [NomexInPhi2], [NomexInPhi7] + + + [zero], [zero] + + + + + + + + + [NomexInPhi5] + + + [zero] + + + + + + + + + [AlignPhi1], [AlignPhi2], [AlignPhi3], [AlignPhi4], + [AlignPhi5], [AlignPhi6], [AlignPhi7], [AlignPhi8] + + + [zero], [zero], [zero], [zero], [zero], [zero], [zero], [zero] + + + + + + + + + [NomexInPhi1], [NomexInPhi3], [NomexInPhi4], [NomexInPhi6], [NomexInPhi8] + + + [zero], [zero], [zero], [zero], [zero] + + + + + + + + + [NomexInPhi2], [NomexInPhi7] + + + [zero], [zero] + + + + + + + + + [NomexInPhi5] + + + [zero] + + + + + + + + + [AlignPhi1], [AlignPhi2], [AlignPhi3], [AlignPhi4], + [AlignPhi5], [AlignPhi6], [AlignPhi7], [AlignPhi8] + + + [zero], [zero], [zero], [zero], [zero], [zero], [zero], [zero] + + + + + + + + + [NomexInPhi1], [NomexInPhi3], [NomexInPhi4], [NomexInPhi6], [NomexInPhi8] + + + [zero], [zero], [zero], [zero], [zero] + + + + + + + + + [NomexInPhi2], [NomexInPhi7] + + + [zero], [zero] + + + + + + + + + [NomexInPhi5] + + + [zero] + + + + + + + + + [Layer0LowR], [Layer1LowR], [Layer2LowR], + [Layer3LowR], [Layer4LowR], [Layer5LowR] + + + [Layer0HighR], [Layer1HighR], [Layer2HighR], + [Layer3HighR], [Layer4HighR], [Layer5HighR] + + + tobmaterial:TOB_rad_services1, tobmaterial:TOB_rad_services2, + tobmaterial:TOB_rad_services3, tobmaterial:TOB_rad_services4, + tobmaterial:TOB_rad_services5, tobmaterial:TOB_rad_services6 + + + + + tobmaterial:TOB_rib1, tobmaterial:TOB_rib2, tobmaterial:TOB_rib3, + tobmaterial:TOB_rib4, tobmaterial:TOB_rib5, tobmaterial:TOB_rib6 + + + + + + + + + + [Layer0CoolRa], [Layer1CoolRa], [Layer2CoolRa], + [Layer3CoolRa], [Layer4CoolRa], [Layer5CoolRa] + + + [Layer0CoolRr], [Layer1CoolRr], [Layer2CoolRr], + [Layer3CoolRr], [Layer4CoolRr], [Layer5CoolRr] + + + + + 1, 2, 3, 4, 5, 6 + + + + + + 1 , 2 , 3 , 4 , 5 , 6 , + 7 , 8 , 9 , 10 , 11 , 12 , + 13 , 14 , 15 , 16 , 17 , 18 + + + + + + + -10*deg , 10*deg , 30*deg , 50*deg , 70*deg , 90*deg , + 110*deg , 130*deg , 150*deg , 170*deg , 190*deg , 210*deg , + 230*deg , 250*deg , 270*deg , 290*deg , 310*deg , 330*deg + + + materials:Air , tobmaterial:TOB_ax_services_A2 , + tobmaterial:TOB_ax_services_A3 , tobmaterial:TOB_ax_services_A4 , + tobmaterial:TOB_ax_services_A5 , materials:Air , + tobmaterial:TOB_ax_services_A7 , tobmaterial:TOB_ax_services_A8 , + tobmaterial:TOB_ax_services_A9 , materials:Air , + tobmaterial:TOB_ax_services_A11 , tobmaterial:TOB_ax_services_A12 , + tobmaterial:TOB_ax_services_A13 , tobmaterial:TOB_ax_services_A14 , + materials:Air , tobmaterial:TOB_ax_services_A16 , + tobmaterial:TOB_ax_services_A17 , tobmaterial:TOB_ax_services_A18 + + + materials:Air , tobmaterial:TOB_ax_services_B2 , + tobmaterial:TOB_ax_services_B3 , tobmaterial:TOB_ax_services_B4 , + tobmaterial:TOB_ax_services_B5 , tobmaterial:TOB_ax_services_B6 , + tobmaterial:TOB_ax_services_B7 , tobmaterial:TOB_ax_services_B8 , + tobmaterial:TOB_ax_services_B9 , materials:Air , + tobmaterial:TOB_ax_services_B11 , tobmaterial:TOB_ax_services_B12 , + tobmaterial:TOB_ax_services_B13 , tobmaterial:TOB_ax_services_B14 , + tobmaterial:TOB_ax_services_B15 , tobmaterial:TOB_ax_services_B16 , + tobmaterial:TOB_ax_services_B17 , tobmaterial:TOB_ax_services_B18 + + + materials:Air , tobmaterial:TOB_ax_services_C2 , + tobmaterial:TOB_ax_services_C3 , tobmaterial:TOB_ax_services_C4 , + materials:Air , tobmaterial:TOB_ax_services_C6 , + tobmaterial:TOB_ax_services_C7 , tobmaterial:TOB_ax_services_C8 , + tobmaterial:TOB_ax_services_C9 , materials:Air , + tobmaterial:TOB_ax_services_C11 , tobmaterial:TOB_ax_services_C12 , + tobmaterial:TOB_ax_services_C13 , materials:Air , + tobmaterial:TOB_ax_services_C15 , tobmaterial:TOB_ax_services_C16 , + tobmaterial:TOB_ax_services_C17 , tobmaterial:TOB_ax_services_C18 + + + + + + + + + + + [DOHM_R1_phi1] , [DOHM_R1_phi2] , [DOHM_R1_phi3] , [DOHM_R1_phi4] , [DOHM_R1_phi5] , + [DOHM_R1_phi6] , [DOHM_R1_phi7] , [DOHM_R1_phi8] , [DOHM_R1_phi9] , [DOHM_R1_phi10] , + [DOHM_R1_phi11] , [DOHM_R1_phi12] , [DOHM_R1_phi13] , [DOHM_R1_phi14] , [DOHM_R1_phi15] + + + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] + + + + + + + + + + + [DOHM_R2_phi1] , [DOHM_R2_phi2] , [DOHM_R2_phi3] , [DOHM_R2_phi4] , [DOHM_R2_phi5] , + [DOHM_R2_phi6] , [DOHM_R2_phi7] , [DOHM_R2_phi8] , [DOHM_R2_phi9] , [DOHM_R2_phi10] , + [DOHM_R2_phi11] , [DOHM_R2_phi12] , [DOHM_R2_phi13] , [DOHM_R2_phi14] , [DOHM_R2_phi15] + + + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] + + + + + + + + + + + [DOHM_R3_phi1] , [DOHM_R3_phi2] , [DOHM_R3_phi3] , [DOHM_R3_phi4] , [DOHM_R3_phi5] , + [DOHM_R3_phi6] , [DOHM_R3_phi7] , [DOHM_R3_phi8] , [DOHM_R3_phi9] , [DOHM_R3_phi10] , + [DOHM_R3_phi11] , [DOHM_R3_phi12] , [DOHM_R3_phi13] , [DOHM_R3_phi14] , [DOHM_R3_phi15] , + [DOHM_R3_phi16] + + + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] + + + diff --git a/Geometry/TrackerCommonData/plugins/dd4hep/DDPixBarLayerUpgradeAlgo.cc b/Geometry/TrackerCommonData/plugins/dd4hep/DDPixBarLayerUpgradeAlgo.cc index d9defe1687447..d8dc3312562c9 100644 --- a/Geometry/TrackerCommonData/plugins/dd4hep/DDPixBarLayerUpgradeAlgo.cc +++ b/Geometry/TrackerCommonData/plugins/dd4hep/DDPixBarLayerUpgradeAlgo.cc @@ -22,7 +22,7 @@ static long algorithm(dd4hep::Detector&, cms::DDParsingContext& ctxt, xml_h e) { std::string coolMat = args.value("CoolMaterial"); std::string tubeMat = args.value("CoolTubeMaterial"); std::string coolMatHalf = args.value("CoolMaterialHalf"); - std::string tubeMatHalf = args.value("CoolTubeMaterial"); + std::string tubeMatHalf = args.value("CoolTubeMaterialHalf"); double phiFineTune = args.value("PitchFineTune"); double rOuterFineTune = args.value("OuterOffsetFineTune"); double rInnerFineTune = args.value("InnerOffsetFineTune"); diff --git a/Geometry/TrackerCommonData/plugins/dd4hep/DDTECModuleAlgo.cc b/Geometry/TrackerCommonData/plugins/dd4hep/DDTECModuleAlgo.cc index fd30748af1b04..2623aae568e80 100644 --- a/Geometry/TrackerCommonData/plugins/dd4hep/DDTECModuleAlgo.cc +++ b/Geometry/TrackerCommonData/plugins/dd4hep/DDTECModuleAlgo.cc @@ -1,12 +1,13 @@ #include "DD4hep/DetFactoryHelper.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" using namespace std; using namespace dd4hep; using namespace cms; -using namespace cms_units::operators; +using namespace angle_units::operators; static long algorithm(Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) { cms::DDNamespace ns(ctxt, e, true); @@ -216,7 +217,7 @@ static long algorithm(Detector& /* description */, cms::DDParsingContext& ctxt, xpos = -0.5 * topFrameBotWidth + bl2 * cos(detTilt) + dz * sin(fabs(thet) + detTilt) / cos(fabs(thet)); xpos = -xpos; zpos = topFrameEndZ - topFrame2LHeight - 0.5 * sin(detTilt) * (topFrameBotWidth - topFrame2Width) - - dz * cos(detTilt + fabs(thet)) / cos(fabs(thet)) + bl2 * sin(detTilt) - 0.1_mm; + dz * cos(detTilt + fabs(thet)) / cos(fabs(thet)) + bl2 * sin(detTilt) - 0.1 * dd4hep::mm; } //position mother.placeVolume( @@ -252,7 +253,7 @@ static long algorithm(Detector& /* description */, cms::DDParsingContext& ctxt, xpos = 0.5 * topFrameBotWidth - bl2 * cos(detTilt) - dz * sin(fabs(detTilt - fabs(thet))) / cos(fabs(thet)); xpos = -xpos; zpos = topFrameEndZ - topFrame2RHeight + 0.5 * sin(detTilt) * (topFrameBotWidth - topFrame2Width) - - dz * cos(detTilt - fabs(thet)) / cos(fabs(thet)) - bl2 * sin(detTilt) - 0.1_mm; + dz * cos(detTilt - fabs(thet)) / cos(fabs(thet)) - bl2 * sin(detTilt) - 0.1 * dd4hep::mm; } //position it mother.placeVolume( diff --git a/Geometry/TrackerCommonData/plugins/dd4hep/DDTIBLayerAlgo.cc b/Geometry/TrackerCommonData/plugins/dd4hep/DDTIBLayerAlgo.cc index c181199d645e6..2aa79f129ec9e 100644 --- a/Geometry/TrackerCommonData/plugins/dd4hep/DDTIBLayerAlgo.cc +++ b/Geometry/TrackerCommonData/plugins/dd4hep/DDTIBLayerAlgo.cc @@ -1,12 +1,13 @@ #include "DD4hep/DetFactoryHelper.h" -#include "DataFormats/Math/interface/CMSUnits.h" +#include +#include "DataFormats/Math/interface/angle_units.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" using namespace std; using namespace dd4hep; using namespace cms; -using namespace cms_units::operators; +using namespace angle_units::operators; static long algorithm(Detector& /* description */, cms::DDParsingContext& context, xml_h element) { using VecDouble = vector; @@ -249,12 +250,12 @@ static long algorithm(Detector& /* description */, cms::DDParsingContext& contex name = idName + "Rib" + std::to_string(i); double width = 2. * ribW[i] / (rin + rout); double dz = 0.5 * layerL - 2. * fillerDz; - double _rmi = std::min(rin + 0.5_mm, rout - 0.5_mm); - double _rma = std::max(rin + 0.5_mm, rout - 0.5_mm); + double _rmi = std::min(rin + 0.5 * dd4hep::mm, rout - 0.5 * dd4hep::mm); + double _rma = std::max(rin + 0.5 * dd4hep::mm, rout - 0.5 * dd4hep::mm); solid = ns.addSolidNS(name, Tube(_rmi, _rma, dz, -0.5 * width, width)); LogDebug("TIBGeom") << solid.name() << " Tubs made of " << ribMat << " from " << -0.5 * convertRadToDeg(width) - << " to " << 0.5 * convertRadToDeg(width) << " with Rin " << rin + 0.5_mm << " Rout " - << rout - 0.5_mm << " ZHalf " << dz; + << " to " << 0.5 * convertRadToDeg(width) << " with Rin " << rin + 0.5 * dd4hep::mm << " Rout " + << rout - 0.5 * dd4hep::mm << " ZHalf " << dz; Volume cylinderRib = ns.addVolumeNS(Volume(name, solid, matrib)); double phix = ribPhi[i]; double theta = 90_deg; @@ -361,9 +362,12 @@ static long algorithm(Detector& /* description */, cms::DDParsingContext& contex int dohmCarrierReplica = 0; int placeDohm = 0; + Volume dohmCarrier; + switch (j) { case 0: name = idName + "DOHMCarrierFW"; + dohmCarrier = ns.addVolumeNS(Volume(name, solid, ns.material(dohmCarrierMaterial))); dohmList = dohmListFW; tran = Position(0., 0., dohmCarrierZ); rotstr = idName + "FwUp"; @@ -373,6 +377,7 @@ static long algorithm(Detector& /* description */, cms::DDParsingContext& contex break; case 1: name = idName + "DOHMCarrierFW"; + dohmCarrier = ns.volume(name); // Re-use internally stored DOHMCarrierFW Volume dohmList = dohmListFW; tran = Position(0., 0., dohmCarrierZ); rotstr = idName + "FwDown"; @@ -382,6 +387,7 @@ static long algorithm(Detector& /* description */, cms::DDParsingContext& contex break; case 2: name = idName + "DOHMCarrierBW"; + dohmCarrier = ns.addVolumeNS(Volume(name, solid, ns.material(dohmCarrierMaterial))); dohmList = dohmListBW; tran = Position(0., 0., -dohmCarrierZ); rotstr = idName + "BwUp"; @@ -391,6 +397,7 @@ static long algorithm(Detector& /* description */, cms::DDParsingContext& contex break; case 3: name = idName + "DOHMCarrierBW"; + dohmCarrier = ns.volume(name); // Re-use internally stored DOHMCarrierBW Volume dohmList = dohmListBW; tran = Position(0., 0., -dohmCarrierZ); rotstr = idName + "BwDown"; @@ -400,7 +407,6 @@ static long algorithm(Detector& /* description */, cms::DDParsingContext& contex break; } - Volume dohmCarrier = ns.addVolumeNS(Volume(name, solid, ns.material(dohmCarrierMaterial))); int primReplica = 0; int auxReplica = 0; diff --git a/Geometry/TrackerCommonData/python/cmsExtendedGeometry2017XML_cfi.py b/Geometry/TrackerCommonData/python/cmsExtendedGeometry2017XML_cfi.py index 4a9ac3a637dbb..8f5e5055a91ce 100644 --- a/Geometry/TrackerCommonData/python/cmsExtendedGeometry2017XML_cfi.py +++ b/Geometry/TrackerCommonData/python/cmsExtendedGeometry2017XML_cfi.py @@ -133,7 +133,7 @@ 'Geometry/TrackerCommonData/data/tobrod5l.xml', 'Geometry/TrackerCommonData/data/tobrod5h.xml', 'Geometry/TrackerCommonData/data/tobrod5.xml', - 'Geometry/TrackerCommonData/data/v2/tob.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', 'Geometry/TrackerCommonData/data/tecmaterial/2017/v1/tecmaterial.xml', 'Geometry/TrackerCommonData/data/tecmodpar.xml', 'Geometry/TrackerCommonData/data/tecmodule0.xml', diff --git a/Geometry/TrackerCommonData/python/cmsExtendedGeometry2021FlatMinus05PercentXML_cfi.py b/Geometry/TrackerCommonData/python/cmsExtendedGeometry2021FlatMinus05PercentXML_cfi.py index 991a757be8b22..71d73315b8f9a 100644 --- a/Geometry/TrackerCommonData/python/cmsExtendedGeometry2021FlatMinus05PercentXML_cfi.py +++ b/Geometry/TrackerCommonData/python/cmsExtendedGeometry2021FlatMinus05PercentXML_cfi.py @@ -136,7 +136,7 @@ 'Geometry/TrackerCommonData/data/tobrod5l.xml', 'Geometry/TrackerCommonData/data/tobrod5h.xml', 'Geometry/TrackerCommonData/data/tobrod5.xml', - 'Geometry/TrackerCommonData/data/v2/tob.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', 'Geometry/TrackerCommonData/data/tecmodpar.xml', 'Geometry/TrackerCommonData/data/tecmodule0.xml', 'Geometry/TrackerCommonData/data/tecmodule0r.xml', diff --git a/Geometry/TrackerCommonData/python/cmsExtendedGeometry2021XML_cfi.py b/Geometry/TrackerCommonData/python/cmsExtendedGeometry2021XML_cfi.py index 9203e182baa06..4571d9f669537 100644 --- a/Geometry/TrackerCommonData/python/cmsExtendedGeometry2021XML_cfi.py +++ b/Geometry/TrackerCommonData/python/cmsExtendedGeometry2021XML_cfi.py @@ -135,7 +135,7 @@ 'Geometry/TrackerCommonData/data/tobrod5l.xml', 'Geometry/TrackerCommonData/data/tobrod5h.xml', 'Geometry/TrackerCommonData/data/tobrod5.xml', - 'Geometry/TrackerCommonData/data/v2/tob.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', 'Geometry/TrackerCommonData/data/tecmaterial/2021/v1/tecmaterial.xml', 'Geometry/TrackerCommonData/data/tecmodpar.xml', 'Geometry/TrackerCommonData/data/tecmodule0.xml', diff --git a/Geometry/TrackerCommonData/python/cmsExtendedGeometry2021ZeroMaterialXML_cfi.py b/Geometry/TrackerCommonData/python/cmsExtendedGeometry2021ZeroMaterialXML_cfi.py index d30d0711cbc08..1f662c3016125 100644 --- a/Geometry/TrackerCommonData/python/cmsExtendedGeometry2021ZeroMaterialXML_cfi.py +++ b/Geometry/TrackerCommonData/python/cmsExtendedGeometry2021ZeroMaterialXML_cfi.py @@ -134,7 +134,7 @@ 'Geometry/TrackerCommonData/data/tobrod5l.xml', 'Geometry/TrackerCommonData/data/tobrod5h.xml', 'Geometry/TrackerCommonData/data/tobrod5.xml', - 'Geometry/TrackerCommonData/data/v2/tob.xml', + 'Geometry/TrackerCommonData/data/tob/v3/tob.xml', 'Geometry/TrackerCommonData/data/zeroMaterial/2021/v1/tecmaterial.xml', 'Geometry/TrackerCommonData/data/tecmodpar.xml', 'Geometry/TrackerCommonData/data/tecmodule0.xml', diff --git a/Geometry/TrackerCommonData/test/python/dumpTracker_cfg.py b/Geometry/TrackerCommonData/test/python/dumpTracker_cfg.py index 46f1657ed1c93..3933ab7116935 100644 --- a/Geometry/TrackerCommonData/test/python/dumpTracker_cfg.py +++ b/Geometry/TrackerCommonData/test/python/dumpTracker_cfg.py @@ -6,11 +6,11 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('PixelGeom') - process.MessageLogger.categories.append('TIBGeom') - process.MessageLogger.categories.append('TIDGeom') - process.MessageLogger.categories.append('TOBGeom') - process.MessageLogger.categories.append('TECGeom') + process.MessageLogger.PixelGeom=dict() + process.MessageLogger.TIBGeom=dict() + process.MessageLogger.TIDGeom=dict() + process.MessageLogger.TOBGeom=dict() + process.MessageLogger.TECGeom=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/TrackerCommonData/test/python/run17.py b/Geometry/TrackerCommonData/test/python/run17.py index fbd933d78a1d1..d8a499a289188 100644 --- a/Geometry/TrackerCommonData/test/python/run17.py +++ b/Geometry/TrackerCommonData/test/python/run17.py @@ -91,7 +91,7 @@ PythiaParameters = cms.PSet( parameterSets = cms.vstring( 'pythia8CommonSettings', - 'pythia8CUEP8M1Settings', + 'pythia8CP5Settings', 'processParameters' ), processParameters = cms.vstring( @@ -99,33 +99,47 @@ 'Top:qqbar2ttbar = on ', '6:m0 = 175 ' ), - pythia8CUEP8M1Settings = cms.vstring( + pythia8CP5Settings = cms.vstring( 'Tune:pp 14', 'Tune:ee 7', - 'MultipartonInteractions:pT0Ref=2.4024', - 'MultipartonInteractions:ecmPow=0.25208', - 'MultipartonInteractions:expPow=1.6' + 'MultipartonInteractions:ecmPow=0.03344', + 'MultipartonInteractions:bProfile=2', + 'MultipartonInteractions:pT0Ref=1.41', + 'MultipartonInteractions:coreRadius=0.7634', + 'MultipartonInteractions:coreFraction=0.63', + 'ColourReconnection:range=5.176', + 'SigmaTotal:zeroAXB=off', + 'SpaceShower:alphaSorder=2', + 'SpaceShower:alphaSvalue=0.118', + 'SigmaProcess:alphaSvalue=0.118', + 'SigmaProcess:alphaSorder=2', + 'MultipartonInteractions:alphaSvalue=0.118', + 'MultipartonInteractions:alphaSorder=2', + 'TimeShower:alphaSorder=2', + 'TimeShower:alphaSvalue=0.118', + 'SigmaTotal:mode = 0', + 'SigmaTotal:sigmaEl = 21.89', + 'SigmaTotal:sigmaTot = 100.309', + 'PDF:pSet=LHAPDF6:NNPDF31_nnlo_as_0118' ), pythia8CommonSettings = cms.vstring( 'Tune:preferLHAPDF = 2', 'Main:timesAllowErrors = 10000', 'Check:epTolErr = 0.01', 'Beams:setProductionScalesFromLHEF = off', - 'SLHA:keepSM = on', 'SLHA:minMassSM = 1000.', 'ParticleDecays:limitTau0 = on', 'ParticleDecays:tau0Max = 10', 'ParticleDecays:allowPhotonRadiation = on' ) ), - comEnergy = cms.double(13000.0), + comEnergy = cms.double(14000.0), filterEfficiency = cms.untracked.double(1.0), maxEventsToPrint = cms.untracked.int32(0), pythiaHepMCVerbosity = cms.untracked.bool(False), pythiaPylistVerbosity = cms.untracked.int32(0) ) - process.ProductionFilterSequence = cms.Sequence(process.generator) # Path and EndPath definitions diff --git a/Geometry/TrackerCommonData/test/python/run21.py b/Geometry/TrackerCommonData/test/python/run21.py index 0517feac87a3a..bccc0d41bfd62 100644 --- a/Geometry/TrackerCommonData/test/python/run21.py +++ b/Geometry/TrackerCommonData/test/python/run21.py @@ -127,7 +127,6 @@ 'Main:timesAllowErrors = 10000', 'Check:epTolErr = 0.01', 'Beams:setProductionScalesFromLHEF = off', - 'SLHA:keepSM = on', 'SLHA:minMassSM = 1000.', 'ParticleDecays:limitTau0 = on', 'ParticleDecays:tau0Max = 10', @@ -141,7 +140,6 @@ pythiaPylistVerbosity = cms.untracked.int32(0) ) - process.ProductionFilterSequence = cms.Sequence(process.generator) # Path and EndPath definitions diff --git a/Geometry/TrackerCommonData/test/python/run21Zero.py b/Geometry/TrackerCommonData/test/python/run21Zero.py index 08ef335dedd45..a710db18a258a 100644 --- a/Geometry/TrackerCommonData/test/python/run21Zero.py +++ b/Geometry/TrackerCommonData/test/python/run21Zero.py @@ -29,7 +29,7 @@ ) if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('SimG4CoreGeometry') + process.MessageLogger.SimG4CoreGeometry=dict() # Input source process.source = cms.Source("EmptySource") @@ -130,7 +130,6 @@ 'Main:timesAllowErrors = 10000', 'Check:epTolErr = 0.01', 'Beams:setProductionScalesFromLHEF = off', - 'SLHA:keepSM = on', 'SLHA:minMassSM = 1000.', 'ParticleDecays:limitTau0 = on', 'ParticleDecays:tau0Max = 10', @@ -144,7 +143,6 @@ pythiaPylistVerbosity = cms.untracked.int32(0) ) - process.ProductionFilterSequence = cms.Sequence(process.generator) # Path and EndPath definitions diff --git a/Geometry/TrackerCommonData/test/python/run_cfg.py b/Geometry/TrackerCommonData/test/python/run_cfg.py index f90f045629ead..c2de4a88ca1a0 100644 --- a/Geometry/TrackerCommonData/test/python/run_cfg.py +++ b/Geometry/TrackerCommonData/test/python/run_cfg.py @@ -4,25 +4,22 @@ process.load("Geometry.TrackerCommonData.testGeometryXML_cfi") process.MessageLogger = cms.Service("MessageLogger", - cerr = cms.untracked.PSet( - enable = cms.untracked.bool(False) - ), + destinations = cms.untracked.vstring('debug'), + categories = cms.untracked.vstring('TrackerGeom', 'TECGeom'), debugModules = cms.untracked.vstring('*'), - files = cms.untracked.PSet( - debug = cms.untracked.PSet( - DEBUG = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - INFO = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - TECGeom = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ), - TrackerGeom = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ), - threshold = cms.untracked.string('DEBUG') + debug = cms.untracked.PSet( + threshold = cms.untracked.string('DEBUG'), + INFO = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + DEBUG = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + TrackerGeom = cms.untracked.PSet( + limit = cms.untracked.int32(-1) + ), + TECGeom = cms.untracked.PSet( + limit = cms.untracked.int32(-1) ) ) ) diff --git a/Geometry/TrackerGeometryBuilder/interface/phase1PixelTopology.h b/Geometry/TrackerGeometryBuilder/interface/phase1PixelTopology.h index cefdbe4b3296a..c2b5bc9d95f83 100644 --- a/Geometry/TrackerGeometryBuilder/interface/phase1PixelTopology.h +++ b/Geometry/TrackerGeometryBuilder/interface/phase1PixelTopology.h @@ -2,6 +2,7 @@ #define Geometry_TrackerGeometryBuilder_phase1PixelTopology_h #include +#include namespace phase1PixelTopology { @@ -20,6 +21,96 @@ namespace phase1PixelTopology { constexpr uint32_t numPixsInModule = uint32_t(numRowsInModule) * uint32_t(numColsInModule); + constexpr uint32_t numberOfModules = 1856; + constexpr uint32_t numberOfLayers = 10; + constexpr uint32_t layerStart[numberOfLayers + 1] = {0, + 96, + 320, + 672, // barrel + 1184, + 1296, + 1408, // positive endcap + 1520, + 1632, + 1744, // negative endcap + numberOfModules}; + constexpr char const* layerName[numberOfLayers] = { + "BL1", + "BL2", + "BL3", + "BL4", // barrel + "E+1", + "E+2", + "E+3", // positive endcap + "E-1", + "E-2", + "E-3" // negative endcap + }; + + constexpr uint32_t numberOfModulesInBarrel = 1184; + constexpr uint32_t numberOfLaddersInBarrel = numberOfModulesInBarrel / 8; + + template + constexpr auto map_to_array_helper(Function f, std::index_sequence) + -> std::array::type, sizeof...(Indices)> { + return {{f(Indices)...}}; + } + + template + constexpr auto map_to_array(Function f) -> std::array::type, N> { + return map_to_array_helper(f, std::make_index_sequence{}); + } + + constexpr uint32_t findMaxModuleStride() { + bool go = true; + int n = 2; + while (go) { + for (uint8_t i = 1; i < std::size(layerStart); ++i) { + if (layerStart[i] % n != 0) { + go = false; + break; + } + } + if (!go) + break; + n *= 2; + } + return n / 2; + } + + constexpr uint32_t maxModuleStride = findMaxModuleStride(); + + constexpr uint8_t findLayer(uint32_t detId) { + for (uint8_t i = 0; i < std::size(layerStart); ++i) + if (detId < layerStart[i + 1]) + return i; + return std::size(layerStart); + } + + constexpr uint8_t findLayerFromCompact(uint32_t detId) { + detId *= maxModuleStride; + for (uint8_t i = 0; i < std::size(layerStart); ++i) + if (detId < layerStart[i + 1]) + return i; + return std::size(layerStart); + } + + constexpr uint32_t layerIndexSize = numberOfModules / maxModuleStride; + constexpr std::array layer = map_to_array(findLayerFromCompact); + + constexpr bool validateLayerIndex() { + bool res = true; + for (auto i = 0U; i < numberOfModules; ++i) { + auto j = i / maxModuleStride; + res &= (layer[j] < 10); + res &= (i >= layerStart[layer[j]]); + res &= (i < layerStart[layer[j] + 1]); + } + return res; + } + + static_assert(validateLayerIndex(), "layer from detIndex algo is buggy"); + // this is for the ROC n<512 (upgrade 1024) constexpr inline uint16_t divu52(uint16_t n) { n = n >> 2; @@ -31,9 +122,11 @@ namespace phase1PixelTopology { } constexpr inline bool isEdgeX(uint16_t px) { return (px == 0) | (px == lastRowInModule); } + constexpr inline bool isEdgeY(uint16_t py) { return (py == 0) | (py == lastColInModule); } constexpr inline uint16_t toRocX(uint16_t px) { return (px < numRowsInRoc) ? px : px - numRowsInRoc; } + constexpr inline uint16_t toRocY(uint16_t py) { auto roc = divu52(py); return py - 52 * roc; @@ -64,6 +157,18 @@ namespace phase1PixelTopology { return py + shift; } + //FIXME move it elsewhere? + struct AverageGeometry { + static constexpr auto numberOfLaddersInBarrel = phase1PixelTopology::numberOfLaddersInBarrel; + float ladderZ[numberOfLaddersInBarrel]; + float ladderX[numberOfLaddersInBarrel]; + float ladderY[numberOfLaddersInBarrel]; + float ladderR[numberOfLaddersInBarrel]; + float ladderMinZ[numberOfLaddersInBarrel]; + float ladderMaxZ[numberOfLaddersInBarrel]; + float endCapZ[2]; // just for pos and neg Layer1 + }; + } // namespace phase1PixelTopology #endif // Geometry_TrackerGeometryBuilder_phase1PixelTopology_h diff --git a/Geometry/TrackerGeometryBuilder/src/TrackerGeomBuilderFromGeometricDet.cc b/Geometry/TrackerGeometryBuilder/src/TrackerGeomBuilderFromGeometricDet.cc index 55dd2b5f9458e..f995eeb14ad41 100644 --- a/Geometry/TrackerGeometryBuilder/src/TrackerGeomBuilderFromGeometricDet.cc +++ b/Geometry/TrackerGeometryBuilder/src/TrackerGeomBuilderFromGeometricDet.cc @@ -165,19 +165,18 @@ void TrackerGeomBuilderFromGeometricDet::buildPixel( tracker->setOffsetDU(GeomDetEnumerators::subDetGeom[det]); - for (auto i : gdv) { + for (auto const& i : gdv) { std::string const& detName = i->name(); if (thePixelDetTypeMap.find(detName) == thePixelDetTypeMap.end()) { std::unique_ptr bounds(i->bounds()); - - PixelTopology* t = PixelTopologyBuilder().build(&*bounds, + PixelTopology* t = PixelTopologyBuilder().build(bounds.get(), upgradeGeometry, - i->pixROCRows(), - i->pixROCCols(), + (int)i->pixROCRows(), + (int)i->pixROCCols(), BIG_PIX_PER_ROC_X, BIG_PIX_PER_ROC_Y, - i->pixROCx(), - i->pixROCy()); + (int)i->pixROCx(), + (int)i->pixROCy()); thePixelDetTypeMap[detName] = new PixelGeomDetType(t, detName, det); tracker->addType(thePixelDetTypeMap[detName]); @@ -203,11 +202,11 @@ void TrackerGeomBuilderFromGeometricDet::buildSilicon(std::vectorsetOffsetDU(GeomDetEnumerators::subDetGeom[det]); - for (auto i : gdv) { + for (auto const& i : gdv) { std::string const& detName = i->name(); if (theStripDetTypeMap.find(detName) == theStripDetTypeMap.end()) { std::unique_ptr bounds(i->bounds()); - StripTopology* t = StripTopologyBuilder().build(&*bounds, i->siliconAPVNum(), part); + StripTopology* t = StripTopologyBuilder().build(bounds.get(), i->siliconAPVNum(), part); theStripDetTypeMap[detName] = new StripGeomDetType(t, detName, det, i->stereo()); tracker->addType(theStripDetTypeMap[detName]); } diff --git a/Geometry/TrackerGeometryBuilder/test/phase1PixelTopology_t.cpp b/Geometry/TrackerGeometryBuilder/test/phase1PixelTopology_t.cpp index 9a00efbff9a9a..8dfae57b685b4 100644 --- a/Geometry/TrackerGeometryBuilder/test/phase1PixelTopology_t.cpp +++ b/Geometry/TrackerGeometryBuilder/test/phase1PixelTopology_t.cpp @@ -142,5 +142,19 @@ int main() { assert(std::get<1>(ori) == bp); } + for (auto i = 0U; i < phase1PixelTopology::numberOfLayers; ++i) { + std::cout << "layer " << i << ", \"" << phase1PixelTopology::layerName[i] << "\", [" + << phase1PixelTopology::layerStart[i] << ", " << phase1PixelTopology::layerStart[i + 1] << ")" + << std::endl; + } + + for (auto i = 0U; i < phase1PixelTopology::numberOfModules; ++i) { + int layer = phase1PixelTopology::layer[i / phase1PixelTopology::maxModuleStride]; + //std::cout << "module " << i << ": " << "layer " << layer << ", \"" << phase1PixelTopology::layerName[layer] << "\", [" << phase1PixelTopology::layerStart[layer] << ", " << phase1PixelTopology::layerStart[layer+1] << ")" << std::endl; + assert(layer < 10); + assert(i >= phase1PixelTopology::layerStart[layer]); + assert(i < phase1PixelTopology::layerStart[layer + 1]); + } + return 0; } diff --git a/Geometry/TrackerGeometryBuilder/test/python/testTrackerModuleInfoDDD_cfg.py b/Geometry/TrackerGeometryBuilder/test/python/testTrackerModuleInfoDDD_cfg.py index 320c6fa075d70..343f1f18b639a 100644 --- a/Geometry/TrackerGeometryBuilder/test/python/testTrackerModuleInfoDDD_cfg.py +++ b/Geometry/TrackerGeometryBuilder/test/python/testTrackerModuleInfoDDD_cfg.py @@ -28,9 +28,6 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.debugModules.append('*') -process.MessageLogger.categories.append('TrackerGeometryBuilder') -process.MessageLogger.categories.append('TrackerNumberingBuilder') -process.MessageLogger.categories.append('ModuleInfo') process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/Geometry/TrackerGeometryBuilder/test/python/testTrackerParametersFromDD4hep_cfg.py b/Geometry/TrackerGeometryBuilder/test/python/testTrackerParametersFromDD4hep_cfg.py index 7dfcf98b79102..4c64d95a91356 100644 --- a/Geometry/TrackerGeometryBuilder/test/python/testTrackerParametersFromDD4hep_cfg.py +++ b/Geometry/TrackerGeometryBuilder/test/python/testTrackerParametersFromDD4hep_cfg.py @@ -4,10 +4,6 @@ process = cms.Process("TrackerParametersTest", Run3_dd4hep) process.load('Configuration.Geometry.GeometryDD4hepExtended2021Reco_cff') -if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('TrackerParametersAnalyzer') - process.MessageLogger.destinations.append('cout') - process.MessageLogger = cms.Service("MessageLogger", cerr = cms.untracked.PSet( enable = cms.untracked.bool(False) diff --git a/Geometry/TrackerGeometryBuilder/test/python/trackerModuleInfoLocalDB_cfg.py b/Geometry/TrackerGeometryBuilder/test/python/trackerModuleInfoLocalDB_cfg.py index 03bf8d9e00c04..5dcb11ccc43cc 100644 --- a/Geometry/TrackerGeometryBuilder/test/python/trackerModuleInfoLocalDB_cfg.py +++ b/Geometry/TrackerGeometryBuilder/test/python/trackerModuleInfoLocalDB_cfg.py @@ -14,10 +14,6 @@ input = cms.untracked.int32(1) ) -process.TrackerGeometricDetESModule = cms.ESProducer( "TrackerGeometricDetESModule", - fromDDD = cms.bool( False ) - ) - process.CondDB.timetype = cms.untracked.string('runnumber') process.CondDB.connect = cms.string('sqlite_file:myfile.db') process.PoolDBESSourceGeometry = cms.ESSource("PoolDBESSource", diff --git a/Geometry/TrackerNumberingBuilder/interface/GeometricDet.h b/Geometry/TrackerNumberingBuilder/interface/GeometricDet.h index 108489bd721c5..3ab96a5251a03 100644 --- a/Geometry/TrackerNumberingBuilder/interface/GeometricDet.h +++ b/Geometry/TrackerNumberingBuilder/interface/GeometricDet.h @@ -171,28 +171,28 @@ class GeometricDet { GeometricEnumType type_; nav_type ddd_; - DetId geographicalID_; + DetId geographicalID_ = 0; Translation trans_; // in mm - double rho_; // in mm - double phi_; + double rho_ = 0.; // in mm + double phi_ = 0.; RotationMatrix rot_; cms::DDSolidShape shape_; std::vector params_; // in mm - double radLength_; - double xi_; - double pixROCRows_; - double pixROCCols_; - double pixROCx_; - double pixROCy_; - bool stereo_; - bool isLowerSensor_; - bool isUpperSensor_; - double siliconAPVNum_; - - bool isFromDD4hep_; + double radLength_ = 0.; + double xi_ = 0.; + double pixROCRows_ = 0.; + double pixROCCols_ = 0.; + double pixROCx_ = 0.; + double pixROCy_ = 0.; + bool stereo_ = false; + bool isLowerSensor_ = false; + bool isUpperSensor_ = false; + double siliconAPVNum_ = 0.; + + bool isFromDD4hep_ = false; ConstGeometricDetContainer container_; }; diff --git a/Geometry/TrackerNumberingBuilder/plugins/DDDCmsTrackerContruction.cc b/Geometry/TrackerNumberingBuilder/plugins/DDDCmsTrackerContruction.cc index e2ea18288813c..a8ab8fb685c90 100644 --- a/Geometry/TrackerNumberingBuilder/plugins/DDDCmsTrackerContruction.cc +++ b/Geometry/TrackerNumberingBuilder/plugins/DDDCmsTrackerContruction.cc @@ -39,14 +39,14 @@ std::unique_ptr DDDCmsTrackerContruction::construct(const DDCompac CmsTrackerBuilder theCmsTrackerBuilder; theCmsTrackerBuilder.build(fv, tracker.get(), attribute); - if (DEBUG) { - printAllTrackerGeometricDetsBeforeDetIDBuilding(tracker.get()); - } - edm::LogVerbatim("DDDCmsTrackerContruction") << "Assign DetIds"; CmsTrackerDetIdBuilder theCmsTrackerDetIdBuilder(detidShifts); theCmsTrackerDetIdBuilder.buildId(*tracker); + if (DEBUG) { + printAllTrackerGeometricDets(tracker.get()); + } + fv.parent(); // // set the Tracker @@ -63,6 +63,7 @@ std::unique_ptr DDDCmsTrackerContruction::construct(const cms::DDC std::vector const& detidShifts) { std::string attribute("TkDDDStructure"); cms::DDFilteredView fv(cpv, cms::DDFilter(attribute)); + fv.firstChild(); CmsTrackerStringToEnum theCmsTrackerStringToEnum; if (theCmsTrackerStringToEnum.type(ExtractStringFromDDD::getString("TkDDDStructure", &fv)) != @@ -82,14 +83,14 @@ std::unique_ptr DDDCmsTrackerContruction::construct(const cms::DDC CmsTrackerBuilder theCmsTrackerBuilder; theCmsTrackerBuilder.build(fv, tracker.get(), attribute); - if (DEBUG) { - printAllTrackerGeometricDetsBeforeDetIDBuilding(tracker.get()); - } - edm::LogVerbatim("DDDCmsTrackerContruction") << "Assign DetIds"; CmsTrackerDetIdBuilder theCmsTrackerDetIdBuilder(detidShifts); theCmsTrackerDetIdBuilder.buildId(*tracker); + if (DEBUG) { + printAllTrackerGeometricDets(tracker.get()); + } + return tracker; } @@ -99,7 +100,7 @@ std::unique_ptr DDDCmsTrackerContruction::construct(const cms::DDC * and all GeometricDets are sorted according to their geometric position. * This allows a convenient debugging, as the DetIds will be later assigned according to this information. */ -void DDDCmsTrackerContruction::printAllTrackerGeometricDetsBeforeDetIDBuilding(const GeometricDet* tracker) { +void DDDCmsTrackerContruction::printAllTrackerGeometricDets(const GeometricDet* tracker) { std::ofstream outputFile("All_Tracker_GeometricDets_before_DetId_building.log", std::ios::out); // Tree navigation: queue for BFS (we want to see same hierarchy level together). diff --git a/Geometry/TrackerNumberingBuilder/plugins/DDDCmsTrackerContruction.h b/Geometry/TrackerNumberingBuilder/plugins/DDDCmsTrackerContruction.h index a19138ef6f21c..9cdac9212f47d 100644 --- a/Geometry/TrackerNumberingBuilder/plugins/DDDCmsTrackerContruction.h +++ b/Geometry/TrackerNumberingBuilder/plugins/DDDCmsTrackerContruction.h @@ -22,7 +22,7 @@ namespace cms { namespace DDDCmsTrackerContruction { std::unique_ptr construct(DDCompactView const& cpv, std::vector const& detidShifts); std::unique_ptr construct(cms::DDCompactView const& cpv, std::vector const& detidShifts); - void printAllTrackerGeometricDetsBeforeDetIDBuilding(const GeometricDet* tracker); + void printAllTrackerGeometricDets(const GeometricDet* tracker); }; // namespace DDDCmsTrackerContruction #endif diff --git a/Geometry/TrackerNumberingBuilder/src/GeometricDet.cc b/Geometry/TrackerNumberingBuilder/src/GeometricDet.cc index 5146d235eae72..5d6fd88573eb8 100644 --- a/Geometry/TrackerNumberingBuilder/src/GeometricDet.cc +++ b/Geometry/TrackerNumberingBuilder/src/GeometricDet.cc @@ -1,3 +1,5 @@ +#include + #include "DataFormats/Math/interface/GeantUnits.h" #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h" #include "Geometry/TrackerNumberingBuilder/interface/TrackerShapeToBounds.h" @@ -76,20 +78,24 @@ GeometricDet::GeometricDet(DDFilteredView* fv, GeometricEnumType type) rot_(fv->rotation()), shape_(cms::dd::name_from_value(cms::LegacySolidShapeMap, fv->shape())), params_(fv->parameters()), - radLength_(getDouble("TrackerRadLength", *fv)), - xi_(getDouble("TrackerXi", *fv)), - pixROCRows_(getDouble("PixelROCRows", *fv)), - pixROCCols_(getDouble("PixelROCCols", *fv)), - pixROCx_(getDouble("PixelROC_X", *fv)), - pixROCy_(getDouble("PixelROC_Y", *fv)), - stereo_(getString("TrackerStereoDetectors", *fv) == strue), - isLowerSensor_(getString("TrackerLowerDetectors", *fv) == strue), - isUpperSensor_(getString("TrackerUpperDetectors", *fv) == strue), - siliconAPVNum_(getDouble("SiliconAPVNumber", *fv)), isFromDD4hep_(false) { // workaround instead of this at initialization const DDFilteredView::nav_type& nt = fv->navPos(); ddd_ = nav_type(nt.begin(), nt.end()); + + // Only look for sensor-related info on sensor volumes! + if (type_ == DetUnit) { + radLength_ = getDouble("TrackerRadLength", *fv); + xi_ = getDouble("TrackerXi", *fv); + pixROCRows_ = getDouble("PixelROCRows", *fv); + pixROCCols_ = getDouble("PixelROCCols", *fv); + pixROCx_ = getDouble("PixelROC_X", *fv); + pixROCy_ = getDouble("PixelROC_Y", *fv); + stereo_ = (getString("TrackerStereoDetectors", *fv) == strue); + isLowerSensor_ = (getString("TrackerLowerDetectors", *fv) == strue); + isUpperSensor_ = (getString("TrackerUpperDetectors", *fv) == strue); + siliconAPVNum_ = getDouble("SiliconAPVNumber", *fv); + } } /* @@ -99,23 +105,35 @@ GeometricDet::GeometricDet(cms::DDFilteredView* fv, GeometricEnumType type) : ddname_(dd4hep::dd::noNamespace(fv->name())), type_(type), ddd_(fv->navPos()), // To remove after DetExtra is removed (not used) - trans_(geant_units::operators::convertCmToMm(fv->translation())), + trans_((fv->translation()) / dd4hep::mm), rho_(trans_.Rho()), phi_(trans_.Phi()), rot_(fv->rotation()), shape_(fv->shape()), params_(computeLegacyShapeParameters(shape_, fv->solid())), - radLength_(fv->get("TrackerRadLength")), - xi_(fv->get("TrackerXi")), - pixROCRows_(fv->get("PixelROCRows")), - pixROCCols_(fv->get("PixelROCCols")), - pixROCx_(fv->get("PixelROC_X")), - pixROCy_(fv->get("PixelROC_Y")), - stereo_(fv->get("TrackerStereoDetectors") == strue), - isLowerSensor_(fv->get("TrackerLowerDetectors") == strue), - isUpperSensor_(fv->get("TrackerUpperDetectors") == strue), - siliconAPVNum_(fv->get("SiliconAPVNumber")), - isFromDD4hep_(true) {} + isFromDD4hep_(true) { + // Only look for sensor-related info on sensor volumes! + if (type_ == DetUnit) { + // IT sensors only (NB: hence could add a branch here, but not a critical part on perf) + pixROCRows_ = fv->get("PixelROCRows"); + pixROCCols_ = fv->get("PixelROCCols"); + pixROCx_ = fv->get("PixelROC_X"); + pixROCy_ = fv->get("PixelROC_Y"); + + // Phase 1 OT sensors only (NB: hence could add a branch here, but not a critical part on perf) + stereo_ = (fv->get("TrackerStereoDetectors") == strue); + siliconAPVNum_ = fv->get("SiliconAPVNumber"); + + // Phase 2 OT sensors only (NB: hence could add a branch here, but not a critical part on perf) + isLowerSensor_ = (fv->get("TrackerLowerDetectors") == strue); + isUpperSensor_ = (fv->get("TrackerUpperDetectors") == strue); + + // All sensors: IT or OT, Phase 1 or Phase 2 (NB: critical part on perf) + fv->findSpecPar("TrackerRadLength", "TrackerXi"); + radLength_ = fv->getNextValue("TrackerRadLength"); + xi_ = fv->getNextValue("TrackerXi"); + } +} /* Constructor from persistent version (DB). @@ -276,24 +294,22 @@ std::vector GeometricDet::computeLegacyShapeParameters(const cms::DDSoli // Box if (mySolidShape == cms::DDSolidShape::ddbox) { const dd4hep::Box& myBox = dd4hep::Box(mySolid); - myOldDDShapeParameters = {geant_units::operators::convertCmToMm(myBox.x()), - geant_units::operators::convertCmToMm(myBox.y()), - geant_units::operators::convertCmToMm(myBox.z())}; + myOldDDShapeParameters = {(myBox.x()) / dd4hep::mm, (myBox.y()) / dd4hep::mm, (myBox.z()) / dd4hep::mm}; } // Trapezoid else if (mySolidShape == cms::DDSolidShape::ddtrap) { const dd4hep::Trap& myTrap = dd4hep::Trap(mySolid); - myOldDDShapeParameters = {geant_units::operators::convertCmToMm(myTrap->GetDZ()), + myOldDDShapeParameters = {(myTrap->GetDZ()) / dd4hep::mm, static_cast(angle_units::operators::convertDegToRad(myTrap->GetTheta())), static_cast(angle_units::operators::convertDegToRad(myTrap->GetPhi())), - geant_units::operators::convertCmToMm(myTrap->GetH1()), - geant_units::operators::convertCmToMm(myTrap->GetBl1()), - geant_units::operators::convertCmToMm(myTrap->GetTl1()), + (myTrap->GetH1()) / dd4hep::mm, + (myTrap->GetBl1()) / dd4hep::mm, + (myTrap->GetTl1()) / dd4hep::mm, static_cast(angle_units::operators::convertDegToRad(myTrap->GetAlpha1())), - geant_units::operators::convertCmToMm(myTrap->GetH2()), - geant_units::operators::convertCmToMm(myTrap->GetBl2()), - geant_units::operators::convertCmToMm(myTrap->GetTl2()), + (myTrap->GetH2()) / dd4hep::mm, + (myTrap->GetBl2()) / dd4hep::mm, + (myTrap->GetTl2()) / dd4hep::mm, static_cast(angle_units::operators::convertDegToRad(myTrap->GetAlpha2()))}; } @@ -301,9 +317,9 @@ std::vector GeometricDet::computeLegacyShapeParameters(const cms::DDSoli else if (mySolidShape == cms::DDSolidShape::ddtubs) { const dd4hep::Tube& myTube = dd4hep::Tube(mySolid); myOldDDShapeParameters = { - geant_units::operators::convertCmToMm(myTube->GetDz()), - geant_units::operators::convertCmToMm(myTube->GetRmin()), - geant_units::operators::convertCmToMm(myTube->GetRmax()), + (myTube->GetDz()) / dd4hep::mm, + (myTube->GetRmin()) / dd4hep::mm, + (myTube->GetRmax()) / dd4hep::mm, static_cast(fmod(angle_units::operators::convertDegToRad(myTube->GetPhi1()), 2. * M_PI) - 2. * M_PI), static_cast(angle_units::operators::convertDegToRad(myTube->GetPhi2() - myTube->GetPhi1()))}; } diff --git a/Geometry/TrackerNumberingBuilder/test/trackerModuleNumberingDD4hep_cfg.py b/Geometry/TrackerNumberingBuilder/test/trackerModuleNumberingDD4hep_cfg.py index b6a45a2c17997..0b3a47a563640 100644 --- a/Geometry/TrackerNumberingBuilder/test/trackerModuleNumberingDD4hep_cfg.py +++ b/Geometry/TrackerNumberingBuilder/test/trackerModuleNumberingDD4hep_cfg.py @@ -8,7 +8,7 @@ process.load('Configuration.Geometry.GeometryDD4hepExtended2021Reco_cff') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('TrackerGeometryBuilder') + process.MessageLogger.TrackerGeometryBuilder=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml b/Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml new file mode 100644 index 0000000000000..a8c9c55f9c735 --- /dev/null +++ b/Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml @@ -0,0 +1,1408 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerRecoMaterial.xml b/Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerRecoMaterial.xml new file mode 100644 index 0000000000000..f463834920851 --- /dev/null +++ b/Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerRecoMaterial.xml @@ -0,0 +1,535 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelProdCuts.xml b/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelProdCuts.xml new file mode 100644 index 0000000000000..9a53b624d951d --- /dev/null +++ b/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelProdCuts.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelsens.xml b/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelsens.xml new file mode 100644 index 0000000000000..8c8cbb8b95815 --- /dev/null +++ b/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelsens.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerProdCuts.xml b/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerProdCuts.xml new file mode 100644 index 0000000000000..e3f77b0d3fb4b --- /dev/null +++ b/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerProdCuts.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml b/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml new file mode 100644 index 0000000000000..4ebfa1ec3cd38 --- /dev/null +++ b/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml @@ -0,0 +1,336 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/VeryForwardData/data/2021/v1/CTPPS_Timing_Stations_Assembly.xml b/Geometry/VeryForwardData/data/2021/v1/CTPPS_Timing_Stations_Assembly.xml new file mode 100644 index 0000000000000..8b9afff8c16ec --- /dev/null +++ b/Geometry/VeryForwardData/data/2021/v1/CTPPS_Timing_Stations_Assembly.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/VeryForwardData/data/2021/v1/RP_220_Left_Station.xml b/Geometry/VeryForwardData/data/2021/v1/RP_220_Left_Station.xml new file mode 100644 index 0000000000000..6e4d55b3e4424 --- /dev/null +++ b/Geometry/VeryForwardData/data/2021/v1/RP_220_Left_Station.xml @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/VeryForwardData/data/2021/v1/RP_220_Right_Station.xml b/Geometry/VeryForwardData/data/2021/v1/RP_220_Right_Station.xml new file mode 100644 index 0000000000000..cf25ab7531be4 --- /dev/null +++ b/Geometry/VeryForwardData/data/2021/v1/RP_220_Right_Station.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/VeryForwardData/data/2021/v1/RP_Dist_Beam_Cent.xml b/Geometry/VeryForwardData/data/2021/v1/RP_Dist_Beam_Cent.xml new file mode 100644 index 0000000000000..a1bad13c32038 --- /dev/null +++ b/Geometry/VeryForwardData/data/2021/v1/RP_Dist_Beam_Cent.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Left_Station/v1/CTPPS_210_Left_Station.xml b/Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Left_Station/v1/CTPPS_210_Left_Station.xml new file mode 100644 index 0000000000000..38fe95608ba27 --- /dev/null +++ b/Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Left_Station/v1/CTPPS_210_Left_Station.xml @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Right_Station/v1/CTPPS_210_Right_Station.xml b/Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Right_Station/v1/CTPPS_210_Right_Station.xml new file mode 100644 index 0000000000000..c3cfc5ad7740f --- /dev/null +++ b/Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_210_Right_Station/v1/CTPPS_210_Right_Station.xml @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Left_Station/v1/CTPPS_220_Left_Station.xml b/Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Left_Station/v1/CTPPS_220_Left_Station.xml new file mode 100644 index 0000000000000..ac2a6cb87a7a8 --- /dev/null +++ b/Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Left_Station/v1/CTPPS_220_Left_Station.xml @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Right_Station/v1/CTPPS_220_Right_Station.xml b/Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Right_Station/v1/CTPPS_220_Right_Station.xml new file mode 100644 index 0000000000000..25916dfdb7ebd --- /dev/null +++ b/Geometry/VeryForwardData/data/CTPPS_2018/CTPPS_220_Right_Station/v1/CTPPS_220_Right_Station.xml @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/VeryForwardData/data/CTPPS_Pixel_Module/v3/CTPPS_Pixel_Module.xml b/Geometry/VeryForwardData/data/CTPPS_Pixel_Module/v3/CTPPS_Pixel_Module.xml new file mode 100644 index 0000000000000..b55e55d36f4f5 --- /dev/null +++ b/Geometry/VeryForwardData/data/CTPPS_Pixel_Module/v3/CTPPS_Pixel_Module.xml @@ -0,0 +1,387 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/VeryForwardData/data/CTPPS_Pixel_Module_2x2/v3/CTPPS_Pixel_Module_2x2.xml b/Geometry/VeryForwardData/data/CTPPS_Pixel_Module_2x2/v3/CTPPS_Pixel_Module_2x2.xml new file mode 100644 index 0000000000000..eb92d1eb52694 --- /dev/null +++ b/Geometry/VeryForwardData/data/CTPPS_Pixel_Module_2x2/v3/CTPPS_Pixel_Module_2x2.xml @@ -0,0 +1,371 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/VeryForwardData/data/RP_Hybrid/v1/RP_Hybrid.xml b/Geometry/VeryForwardData/data/RP_Hybrid/v1/RP_Hybrid.xml new file mode 100644 index 0000000000000..342b7daed0c25 --- /dev/null +++ b/Geometry/VeryForwardData/data/RP_Hybrid/v1/RP_Hybrid.xml @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/VeryForwardData/data/RP_Materials/v1/RP_Materials.xml b/Geometry/VeryForwardData/data/RP_Materials/v1/RP_Materials.xml new file mode 100644 index 0000000000000..1f5e375a288dc --- /dev/null +++ b/Geometry/VeryForwardData/data/RP_Materials/v1/RP_Materials.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/VeryForwardData/data/RP_Materials/v2/RP_Materials.xml b/Geometry/VeryForwardData/data/RP_Materials/v2/RP_Materials.xml new file mode 100644 index 0000000000000..aacd934ead2cb --- /dev/null +++ b/Geometry/VeryForwardData/data/RP_Materials/v2/RP_Materials.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/VeryForwardData/data/ppstrackerMaterials/v2/ppstrackerMaterials.xml b/Geometry/VeryForwardData/data/ppstrackerMaterials/v2/ppstrackerMaterials.xml new file mode 100644 index 0000000000000..b4d356e537848 --- /dev/null +++ b/Geometry/VeryForwardData/data/ppstrackerMaterials/v2/ppstrackerMaterials.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Geometry/VeryForwardGeometry/BuildFile.xml b/Geometry/VeryForwardGeometry/BuildFile.xml index 2ee98ae471ac9..83388240c8ef8 100644 --- a/Geometry/VeryForwardGeometry/BuildFile.xml +++ b/Geometry/VeryForwardGeometry/BuildFile.xml @@ -1,6 +1,5 @@ - diff --git a/Geometry/VeryForwardGeometry/data/dd4hep/v1/geometryRPFromDD_2021.xml b/Geometry/VeryForwardGeometry/data/dd4hep/v1/geometryRPFromDD_2021.xml new file mode 100644 index 0000000000000..dcdab247050a4 --- /dev/null +++ b/Geometry/VeryForwardGeometry/data/dd4hep/v1/geometryRPFromDD_2021.xml @@ -0,0 +1,135 @@ + + + + + + + # common and strip files + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # diamond files + + + + + + + + + + + + + + + + + + + + + + + + + + + + # UFSD files + + + + + + + # Totem Timing files + + + + + + + # pixel files + + + + + + + + + + # RP distance + + + + diff --git a/Geometry/VeryForwardGeometry/interface/CTPPSPixelSimTopology.h b/Geometry/VeryForwardGeometry/interface/CTPPSPixelSimTopology.h deleted file mode 100644 index 9ff807847b232..0000000000000 --- a/Geometry/VeryForwardGeometry/interface/CTPPSPixelSimTopology.h +++ /dev/null @@ -1,225 +0,0 @@ -#ifndef Geometry_VeryForwardGeometry_CTPPSPixelSimTopology_h -#define Geometry_VeryForwardGeometry_CTPPSPixelSimTopology_h - -#include -#include "Geometry/VeryForwardGeometry/interface/CTPPSPixelTopology.h" - -class CTPPSPixelSimTopology : public CTPPSPixelTopology { -public: - /* simX and simY are the coordinates as in the simulation: - _________ - | | - | | y - |_________| - - x - */ - class PixelInfo { - public: - PixelInfo(double lower_simX_border, - double higher_simX_border, - double lower_simY_border, - double higher_simY_border, - double eff_factor, - unsigned short pixel_row_no, - unsigned short pixel_col_no) - : lower_simX_border_(lower_simX_border), - higher_simX_border_(higher_simX_border), - lower_simY_border_(lower_simY_border), - higher_simY_border_(higher_simY_border), - eff_factor_(eff_factor), - pixel_row_no_(pixel_row_no), - pixel_col_no_(pixel_col_no), - pixel_index_(pixel_col_no * CTPPSPixelTopology::no_of_pixels_simX_ + pixel_row_no) {} - - inline double higherSimXBorder() const { return higher_simX_border_; } - inline double lowerSimXBorder() const { return lower_simX_border_; } - inline double higherSimYBorder() const { return higher_simY_border_; } - inline double lowerSimYBorder() const { return lower_simY_border_; } - inline double effFactor() const { return eff_factor_; } - inline unsigned short pixelRowNo() const { return pixel_row_no_; } - inline unsigned short pixelColNo() const { return pixel_col_no_; } - inline unsigned short pixelIndex() const { return pixel_index_; } - - private: - double lower_simX_border_; - double higher_simX_border_; - double lower_simY_border_; - double higher_simY_border_; - double eff_factor_; - unsigned short pixel_row_no_; - unsigned short pixel_col_no_; - unsigned short pixel_index_; - }; - -public: - CTPPSPixelSimTopology(); - ~CTPPSPixelSimTopology() {} - - PixelInfo getPixelsInvolved(double x, double y, double sigma, double& hit_pos_x, double& hit_pos_y) const; - - inline void pixelRange(unsigned int arow, - unsigned int acol, - double& lower_x, - double& higher_x, - double& lower_y, - double& higher_y) const { - // x and y in the system of Geant4 SIMULATION - arow = (2 * ROCSizeInX - 1) - arow; - if (arow > (2 * ROCSizeInX - 1) || acol > (3 * ROCSizeInY - 1)) - throw cms::Exception("CTPPSPixelSimTopology") << "rows or columns exceeding limits"; - - // rows (x segmentation) - if (arow == 0) { - lower_x = dead_edge_width_ - phys_active_edge_dist_; // 50 um - higher_x = dead_edge_width_ + pitch_simX_; // 300 um - } else if (arow <= (ROCSizeInX - 2)) { - lower_x = dead_edge_width_ + arow * pitch_simX_; - higher_x = dead_edge_width_ + (arow + 1) * pitch_simX_; - } else if (arow == (ROCSizeInX - 1)) { - lower_x = dead_edge_width_ + arow * pitch_simX_; - higher_x = dead_edge_width_ + (arow + 2) * pitch_simX_; - } else if (arow == ROCSizeInX) { - lower_x = dead_edge_width_ + (arow + 1) * pitch_simX_; - higher_x = dead_edge_width_ + (arow + 3) * pitch_simX_; - } else if (arow <= (2 * ROCSizeInX - 2)) { - lower_x = dead_edge_width_ + (arow + 2) * pitch_simX_; - higher_x = dead_edge_width_ + (arow + 3) * pitch_simX_; - } else if (arow == (2 * ROCSizeInX - 1)) { - lower_x = dead_edge_width_ + (arow + 2) * pitch_simX_; - higher_x = dead_edge_width_ + (arow + 3) * pitch_simX_ + phys_active_edge_dist_; - } - - // columns (y segmentation) - if (acol == 0) { - lower_y = dead_edge_width_ - phys_active_edge_dist_; // 50 um - higher_y = dead_edge_width_ + pitch_simY_; // 350 um - } else if (acol <= (ROCSizeInY - 2)) { - lower_y = dead_edge_width_ + acol * pitch_simY_; - higher_y = dead_edge_width_ + (acol + 1) * pitch_simY_; - } else if (acol == (ROCSizeInY - 1)) { - lower_y = dead_edge_width_ + acol * pitch_simY_; - higher_y = dead_edge_width_ + (acol + 2) * pitch_simY_; - } else if (acol == ROCSizeInY) { - lower_y = dead_edge_width_ + (acol + 1) * pitch_simY_; - higher_y = dead_edge_width_ + (acol + 3) * pitch_simY_; - } else if (acol <= (2 * ROCSizeInY - 2)) { - lower_y = dead_edge_width_ + (acol + 2) * pitch_simY_; - higher_y = dead_edge_width_ + (acol + 3) * pitch_simY_; - } else if (acol == (2 * ROCSizeInY - 1)) { - lower_y = dead_edge_width_ + (acol + 2) * pitch_simY_; - higher_y = dead_edge_width_ + (acol + 4) * pitch_simY_; - } else if (acol == (2 * ROCSizeInY)) { - lower_y = dead_edge_width_ + (acol + 3) * pitch_simY_; - higher_y = dead_edge_width_ + (acol + 5) * pitch_simY_; - } else if (acol <= (3 * ROCSizeInY - 2)) { - lower_y = dead_edge_width_ + (acol + 4) * pitch_simY_; - higher_y = dead_edge_width_ + (acol + 5) * pitch_simY_; - } else if (acol == (3 * ROCSizeInY - 1)) { - lower_y = dead_edge_width_ + (acol + 4) * pitch_simY_; - higher_y = dead_edge_width_ + (acol + 5) * pitch_simY_ + phys_active_edge_dist_; - } - - lower_x = lower_x - simX_width_ / 2.; - lower_y = lower_y - simY_width_ / 2.; - higher_x = higher_x - simX_width_ / 2.; - higher_y = higher_y - simY_width_ / 2.; - } - -private: - double active_edge_x_; - double active_edge_y_; - - inline double activeEdgeFactor(double x, double y) const { - const double inv_sigma = 1. / active_edge_sigma_; // precaching - const double topEdgeFactor = std::erf(-distanceFromTopActiveEdge(x, y) * inv_sigma) * 0.5 + 0.5; - const double bottomEdgeFactor = std::erf(-distanceFromBottomActiveEdge(x, y) * inv_sigma) * 0.5 + 0.5; - const double rightEdgeFactor = std::erf(-distanceFromRightActiveEdge(x, y) * inv_sigma) * 0.5 + 0.5; - const double leftEdgeFactor = std::erf(-distanceFromLeftActiveEdge(x, y) * inv_sigma) * 0.5 + 0.5; - - const double aEF = topEdgeFactor * bottomEdgeFactor * rightEdgeFactor * leftEdgeFactor; - - if (aEF > 1.) - throw cms::Exception("CTPPSPixelSimTopology") << " active edge factor > 1"; - - return aEF; - } - - inline double distanceFromTopActiveEdge(double x, double y) const { return (y - active_edge_y_); } - inline double distanceFromBottomActiveEdge(double x, double y) const { return (-y - active_edge_y_); } - inline double distanceFromRightActiveEdge(double x, double y) const { return (x - active_edge_x_); } - inline double distanceFromLeftActiveEdge(double x, double y) const { return (-x - active_edge_x_); } - - inline unsigned int row(double x) const { - // x in the G4 simulation system - x = x + simX_width_ / 2.; - - // now x in the system centered in the bottom left corner of the sensor (sensor view, rocs behind) - if (x < 0. || x > simX_width_) - throw cms::Exception("CTPPSPixelSimTopology") << "out of reference frame"; - - // rows (x segmentation) - unsigned int arow; - if (x <= (dead_edge_width_ + pitch_simX_)) - arow = 0; - else if (x <= (dead_edge_width_ + (ROCSizeInX - 1) * pitch_simX_)) - arow = int((x - dead_edge_width_ - pitch_simX_) / pitch_simX_) + 1; - else if (x <= (dead_edge_width_ + (ROCSizeInX + 1) * pitch_simX_)) - arow = (ROCSizeInX - 1); - else if (x <= (dead_edge_width_ + (ROCSizeInX + 3) * pitch_simX_)) - arow = ROCSizeInX; - else if (x <= (dead_edge_width_ + (2 * ROCSizeInX + 2) * pitch_simX_)) - arow = int((x - dead_edge_width_ - pitch_simX_) / pitch_simX_) - 1; - else - arow = (2 * ROCSizeInX - 1); - - arow = (2 * ROCSizeInX - 1) - arow; - if (arow > (2 * ROCSizeInX - 1)) - throw cms::Exception("CTPPSPixelSimTopology") << "row number exceeding limit"; - - return arow; - } - - inline unsigned int col(double y) const { - // y in the G4 simulation system - unsigned int column; - - // columns (y segmentation) - // now y in the system centered in the bottom left corner of the sensor (sensor view, rocs behind) - y = y + simY_width_ / 2.; - if (y < 0. || y > simY_width_) - throw cms::Exception("CTPPSPixelSimTopology") << " out of reference frame"; - - if (y <= (dead_edge_width_ + pitch_simY_)) - column = 0; - else if (y <= (dead_edge_width_ + (ROCSizeInY - 1) * pitch_simY_)) - column = int((y - dead_edge_width_ - pitch_simY_) / pitch_simY_) + 1; - else if (y <= (dead_edge_width_ + (ROCSizeInY + 1) * pitch_simY_)) - column = ROCSizeInY - 1; - else if (y <= (dead_edge_width_ + (ROCSizeInY + 3) * pitch_simY_)) - column = ROCSizeInY; - else if (y <= (dead_edge_width_ + (2 * ROCSizeInY + 1) * pitch_simY_)) - column = int((y - dead_edge_width_ - pitch_simY_) / pitch_simY_) - 1; - else if (y <= (dead_edge_width_ + (2 * ROCSizeInY + 3) * pitch_simY_)) - column = 2 * ROCSizeInY - 1; - else if (y <= (dead_edge_width_ + (2 * ROCSizeInY + 5) * pitch_simY_)) - column = 2 * ROCSizeInY; - else if (y <= (dead_edge_width_ + (3 * ROCSizeInY + 3) * pitch_simY_)) - column = int((y - dead_edge_width_ - pitch_simY_) / pitch_simY_) - 3; - else - column = (3 * ROCSizeInY - 1); - - return column; - } - - inline void rowCol2Index(unsigned int arow, unsigned int acol, unsigned int& index) const { - index = acol * no_of_pixels_simX_ + arow; - } - - inline void index2RowCol(unsigned int& arow, unsigned int& acol, unsigned int index) const { - acol = index / no_of_pixels_simX_; - arow = index % no_of_pixels_simX_; - } -}; - -#endif diff --git a/Geometry/VeryForwardGeometry/interface/CTPPSPixelTopology.h b/Geometry/VeryForwardGeometry/interface/CTPPSPixelTopology.h deleted file mode 100644 index de017c8916949..0000000000000 --- a/Geometry/VeryForwardGeometry/interface/CTPPSPixelTopology.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef Geometry_VeryForwardGeometry_CTPPSPixelTopology_h -#define Geometry_VeryForwardGeometry_CTPPSPixelTopology_h - -#include "CondFormats/PPSObjects/interface/CTPPSPixelIndices.h" - -/** - *\brief Geometrical and topological information on RPix silicon detector. - * Uses coordinate a frame with origin in the center of the wafer. - **/ -class CTPPSPixelTopology { -public: - CTPPSPixelTopology() = default; - ~CTPPSPixelTopology() = default; - - static constexpr double pitch_simY_ = 150E-3; - static constexpr double pitch_simX_ = 100E-3; - static constexpr double thickness_ = 0.23; - static constexpr unsigned short no_of_pixels_simX_ = 160; - static constexpr unsigned short no_of_pixels_simY_ = 156; - static constexpr unsigned short no_of_pixels_ = 160 * 156; - static constexpr double simX_width_ = 16.6; - static constexpr double simY_width_ = 24.4; - static constexpr double dead_edge_width_ = 200E-3; - static constexpr double active_edge_sigma_ = 0.02; - static constexpr double phys_active_edge_dist_ = 0.150; - - inline double detPitchSimX() const { return pitch_simX_; } - inline double detPitchSimY() const { return pitch_simY_; } - inline double detThickness() const { return thickness_; } - inline unsigned short detPixelSimXNo() const { return no_of_pixels_simX_; } - inline unsigned short detPixelSimYNo() const { return no_of_pixels_simY_; } - inline unsigned short detPixelNo() const { return no_of_pixels_; } - inline double detXWidth() const { return simX_width_; } - inline double detYWidth() const { return simY_width_; } - inline double detDeadEdgeWidth() const { return dead_edge_width_; } - inline double activeEdgeSigma() const { return active_edge_sigma_; } - inline double physActiveEdgeDist() const { return phys_active_edge_dist_; } - - static bool isPixelHit(float xLocalCoordinate, float yLocalCoordinate, bool is3x2 = true) { - // check hit fiducial boundaries - double xModuleSize = 2 * ((no_of_pixels_simX_ / 2. + 1) * pitch_simX_ + dead_edge_width_); - if (xLocalCoordinate < -xModuleSize / 2. || xLocalCoordinate > xModuleSize / 2.) - return false; - - double yModuleSize = (no_of_pixels_simY_ + 4.) * pitch_simY_ + 2. * dead_edge_width_; - double y2x2top = no_of_pixels_simY_ / 6. * pitch_simY_ + dead_edge_width_; - if (is3x2 && (yLocalCoordinate < -yModuleSize / 2. || yLocalCoordinate > yModuleSize / 2.)) - return false; - - if (!is3x2 && (yLocalCoordinate < -yModuleSize / 2. || yLocalCoordinate > y2x2top)) - return false; - - return true; - } - - CTPPSPixelIndices indices_; -}; - -#endif diff --git a/Geometry/VeryForwardGeometry/python/commons_cff.py b/Geometry/VeryForwardGeometry/python/commons_cff.py new file mode 100644 index 0000000000000..d4ae12c3e3886 --- /dev/null +++ b/Geometry/VeryForwardGeometry/python/commons_cff.py @@ -0,0 +1,17 @@ +import FWCore.ParameterSet.Config as cms +from importlib import import_module +from copy import copy + +def cloneGeometry(mod_path): + # start by importing the actual module to be cloned + _geom = import_module(mod_path) + # clone all geometry DDL files + totemGeomXMLFiles = copy(_geom.totemGeomXMLFiles) + ctppsDiamondGeomXMLFiles = copy(_geom.ctppsDiamondGeomXMLFiles) + ctppsUFSDGeomXMLFiles = copy(_geom.ctppsUFSDGeomXMLFiles) + ctppsPixelGeomXMLFiles = copy(_geom.ctppsPixelGeomXMLFiles) + # clone the ESSource and ESModule to be returned + XMLIdealGeometryESSource_CTPPS = _geom.XMLIdealGeometryESSource_CTPPS.clone() + ctppsGeometryESModule = _geom.ctppsGeometryESModule.clone() + + return (XMLIdealGeometryESSource_CTPPS, ctppsGeometryESModule) diff --git a/Geometry/VeryForwardGeometry/python/dd4hep/geometryPPS_CMSxz_fromDD_2016_cfi.py b/Geometry/VeryForwardGeometry/python/dd4hep/geometryPPS_CMSxz_fromDD_2016_cfi.py index 5c178c0372f14..c30b091f9ee01 100644 --- a/Geometry/VeryForwardGeometry/python/dd4hep/geometryPPS_CMSxz_fromDD_2016_cfi.py +++ b/Geometry/VeryForwardGeometry/python/dd4hep/geometryPPS_CMSxz_fromDD_2016_cfi.py @@ -11,6 +11,7 @@ ctppsGeometryESModule = cms.ESProducer("CTPPSGeometryESModule", fromDD4hep = cms.untracked.bool(True), + isRun2 = cms.bool(True), verbosity = cms.untracked.uint32(1), compactViewTag = cms.string('XMLIdealGeometryESSource_CTPPS') ) diff --git a/Geometry/VeryForwardGeometry/python/dd4hep/geometryPPS_CMSxz_fromDD_2017_cfi.py b/Geometry/VeryForwardGeometry/python/dd4hep/geometryPPS_CMSxz_fromDD_2017_cfi.py index 0012898c432bd..bd384b8f3fc2a 100644 --- a/Geometry/VeryForwardGeometry/python/dd4hep/geometryPPS_CMSxz_fromDD_2017_cfi.py +++ b/Geometry/VeryForwardGeometry/python/dd4hep/geometryPPS_CMSxz_fromDD_2017_cfi.py @@ -11,6 +11,7 @@ ctppsGeometryESModule = cms.ESProducer("CTPPSGeometryESModule", fromDD4hep = cms.untracked.bool(True), + isRun2 = cms.bool(True), verbosity = cms.untracked.uint32(1), compactViewTag = cms.string('XMLIdealGeometryESSource_CTPPS') ) diff --git a/Geometry/VeryForwardGeometry/python/dd4hep/geometryPPS_CMSxz_fromDD_2018_cfi.py b/Geometry/VeryForwardGeometry/python/dd4hep/geometryPPS_CMSxz_fromDD_2018_cfi.py index f3fffae290864..0bae498d08288 100644 --- a/Geometry/VeryForwardGeometry/python/dd4hep/geometryPPS_CMSxz_fromDD_2018_cfi.py +++ b/Geometry/VeryForwardGeometry/python/dd4hep/geometryPPS_CMSxz_fromDD_2018_cfi.py @@ -11,6 +11,7 @@ ctppsGeometryESModule = cms.ESProducer("CTPPSGeometryESModule", fromDD4hep = cms.untracked.bool(True), + isRun2 = cms.bool(True), verbosity = cms.untracked.uint32(1), compactViewTag = cms.string('XMLIdealGeometryESSource_CTPPS') ) diff --git a/Geometry/VeryForwardGeometry/python/dd4hep/geometryRPFromDB_cfi.py b/Geometry/VeryForwardGeometry/python/dd4hep/geometryRPFromDB_cfi.py index c787064a7e914..47180aefc1ff3 100644 --- a/Geometry/VeryForwardGeometry/python/dd4hep/geometryRPFromDB_cfi.py +++ b/Geometry/VeryForwardGeometry/python/dd4hep/geometryRPFromDB_cfi.py @@ -10,11 +10,12 @@ DDCompactViewESProducer = cms.ESProducer("DDCompactViewESProducer", appendToDataLabel = cms.string('XMLIdealGeometryESSource_CTPPS') -) +) ctppsGeometryESModule = cms.ESProducer("CTPPSGeometryESModule", fromDD4hep = cms.untracked.bool(True), + isRun2 = cms.bool(False), verbosity = cms.untracked.uint32(1), compactViewTag = cms.string('XMLIdealGeometryESSource_CTPPS') ) diff --git a/Geometry/VeryForwardGeometry/python/dd4hep/geometryRPFromDD_2017_cfi.py b/Geometry/VeryForwardGeometry/python/dd4hep/geometryRPFromDD_2017_cfi.py index cfcf10a1ddac3..44d9d32cb06c7 100644 --- a/Geometry/VeryForwardGeometry/python/dd4hep/geometryRPFromDD_2017_cfi.py +++ b/Geometry/VeryForwardGeometry/python/dd4hep/geometryRPFromDD_2017_cfi.py @@ -11,6 +11,7 @@ ctppsGeometryESModule = cms.ESProducer("CTPPSGeometryESModule", fromDD4hep = cms.untracked.bool(True), + isRun2 = cms.bool(True), verbosity = cms.untracked.uint32(1), compactViewTag = cms.string('XMLIdealGeometryESSource_CTPPS') ) diff --git a/Geometry/VeryForwardGeometry/python/dd4hep/geometryRPFromDD_2018_cfi.py b/Geometry/VeryForwardGeometry/python/dd4hep/geometryRPFromDD_2018_cfi.py index caee6c207680f..a9488cc5ba5f4 100644 --- a/Geometry/VeryForwardGeometry/python/dd4hep/geometryRPFromDD_2018_cfi.py +++ b/Geometry/VeryForwardGeometry/python/dd4hep/geometryRPFromDD_2018_cfi.py @@ -11,6 +11,7 @@ ctppsGeometryESModule = cms.ESProducer("CTPPSGeometryESModule", fromDD4hep = cms.untracked.bool(True), + isRun2 = cms.bool(True), verbosity = cms.untracked.uint32(1), compactViewTag = cms.string('XMLIdealGeometryESSource_CTPPS') ) diff --git a/Geometry/VeryForwardGeometry/python/dd4hep/geometryRPFromDD_2021_cfi.py b/Geometry/VeryForwardGeometry/python/dd4hep/geometryRPFromDD_2021_cfi.py new file mode 100644 index 0000000000000..b9618ec260b14 --- /dev/null +++ b/Geometry/VeryForwardGeometry/python/dd4hep/geometryRPFromDD_2021_cfi.py @@ -0,0 +1,18 @@ +import FWCore.ParameterSet.Config as cms + +DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", + confGeomXMLFiles = cms.FileInPath('Geometry/VeryForwardGeometry/data/dd4hep/v1/geometryRPFromDD_2021.xml'), + appendToDataLabel = cms.string('XMLIdealGeometryESSource_CTPPS') +) + +DDCompactViewESProducer = cms.ESProducer("DDCompactViewESProducer", + appendToDataLabel = cms.string('XMLIdealGeometryESSource_CTPPS') +) + +ctppsGeometryESModule = cms.ESProducer("CTPPSGeometryESModule", + fromDD4hep = cms.untracked.bool(True), + isRun2 = cms.bool(False), + verbosity = cms.untracked.uint32(1), + compactViewTag = cms.string('XMLIdealGeometryESSource_CTPPS') +) + diff --git a/Geometry/VeryForwardGeometry/python/geometryPPS_CMSxz_fromDD_2016_cfi.py b/Geometry/VeryForwardGeometry/python/geometryPPS_CMSxz_fromDD_2016_cfi.py index cad035090b01f..2191aad40930e 100644 --- a/Geometry/VeryForwardGeometry/python/geometryPPS_CMSxz_fromDD_2016_cfi.py +++ b/Geometry/VeryForwardGeometry/python/geometryPPS_CMSxz_fromDD_2016_cfi.py @@ -3,19 +3,19 @@ # common and strip files totemGeomXMLFiles = cms.vstring( 'Geometry/CMSCommonData/data/materials.xml', - 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/rotations.xml', 'Geometry/CMSCommonData/data/cmsextent/2018/v1/cmsextent.xml', - 'Geometry/CMSCommonData/data/cms/2017/v1/cms.xml', - 'Geometry/CMSCommonData/data/beampipe/2017/v1/beampipe.xml', - 'Geometry/CMSCommonData/data/cmsBeam.xml', - 'Geometry/CMSCommonData/data/cmsMother.xml', - 'Geometry/CMSCommonData/data/mgnt.xml', - 'Geometry/ForwardCommonData/data/forward.xml', - 'Geometry/ForwardCommonData/data/totemRotations.xml', - 'Geometry/ForwardCommonData/data/totemMaterials.xml', - 'Geometry/ForwardCommonData/data/totemt1.xml', - 'Geometry/ForwardCommonData/data/totemt2.xml', - 'Geometry/ForwardCommonData/data/ionpump.xml', + 'Geometry/CMSCommonData/data/cms/2017/v1/cms.xml', + 'Geometry/CMSCommonData/data/beampipe/2017/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/ForwardCommonData/data/forward.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/ForwardCommonData/data/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemt1.xml', + 'Geometry/ForwardCommonData/data/totemt2.xml', + 'Geometry/ForwardCommonData/data/ionpump.xml', 'Geometry/VeryForwardData/data/RP_Box.xml', 'Geometry/VeryForwardData/data/RP_Box/RP_Box_000.xml', 'Geometry/VeryForwardData/data/RP_Box/RP_Box_001.xml', @@ -79,7 +79,7 @@ 'Geometry/VeryForwardData/data/CTPPS_Stations_Assembly.xml', 'Geometry/VeryForwardData/data/CTPPS_Cuts_Per_Region.xml', 'Geometry/VeryForwardData/data/RP_Sensitive_Dets.xml' -) +) # diamond files ctppsDiamondGeomXMLFiles = cms.vstring( @@ -112,7 +112,7 @@ ctppsUFSDGeomXMLFiles = cms.vstring( 'Geometry/VeryForwardData/data/CTPPS_UFSD_Segments/CTPPS_UFSD_Pattern1.xml', 'Geometry/VeryForwardData/data/CTPPS_UFSD_Segments/CTPPS_UFSD_Pattern2_SegmentA.xml', - 'Geometry/VeryForwardData/data/CTPPS_UFSD_Segments/CTPPS_UFSD_Pattern2_SegmentB.xml', + 'Geometry/VeryForwardData/data/CTPPS_UFSD_Segments/CTPPS_UFSD_Pattern2_SegmentB.xml', 'Geometry/VeryForwardData/data/CTPPS_UFSD_Planes/CTPPS_UFSD_Plane4.xml', 'Geometry/VeryForwardData/data/CTPPS_UFSD_Parameters.xml' ) @@ -136,6 +136,7 @@ ctppsGeometryESModule = cms.ESProducer("CTPPSGeometryESModule", verbosity = cms.untracked.uint32(1), + isRun2 = cms.bool(True), compactViewTag = cms.string('XMLIdealGeometryESSource_CTPPS') ) diff --git a/Geometry/VeryForwardGeometry/python/geometryPPS_CMSxz_fromDD_2017_cfi.py b/Geometry/VeryForwardGeometry/python/geometryPPS_CMSxz_fromDD_2017_cfi.py index 7e8059401f622..7f7a5309a0a28 100644 --- a/Geometry/VeryForwardGeometry/python/geometryPPS_CMSxz_fromDD_2017_cfi.py +++ b/Geometry/VeryForwardGeometry/python/geometryPPS_CMSxz_fromDD_2017_cfi.py @@ -3,19 +3,19 @@ # common and strip files totemGeomXMLFiles = cms.vstring( 'Geometry/CMSCommonData/data/materials.xml', - 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/rotations.xml', 'Geometry/CMSCommonData/data/cmsextent/2018/v1/cmsextent.xml', - 'Geometry/CMSCommonData/data/cms/2017/v1/cms.xml', - 'Geometry/CMSCommonData/data/beampipe/2017/v1/beampipe.xml', - 'Geometry/CMSCommonData/data/cmsBeam.xml', - 'Geometry/CMSCommonData/data/cmsMother.xml', - 'Geometry/CMSCommonData/data/mgnt.xml', - 'Geometry/ForwardCommonData/data/forward.xml', - 'Geometry/ForwardCommonData/data/totemRotations.xml', - 'Geometry/ForwardCommonData/data/totemMaterials.xml', - 'Geometry/ForwardCommonData/data/totemt1.xml', - 'Geometry/ForwardCommonData/data/totemt2.xml', - 'Geometry/ForwardCommonData/data/ionpump.xml', + 'Geometry/CMSCommonData/data/cms/2017/v1/cms.xml', + 'Geometry/CMSCommonData/data/beampipe/2017/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/ForwardCommonData/data/forward.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/ForwardCommonData/data/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemt1.xml', + 'Geometry/ForwardCommonData/data/totemt2.xml', + 'Geometry/ForwardCommonData/data/ionpump.xml', 'Geometry/VeryForwardData/data/RP_Box.xml', 'Geometry/VeryForwardData/data/RP_Box/RP_Box_000.xml', 'Geometry/VeryForwardData/data/RP_Box/RP_Box_001.xml', @@ -77,7 +77,7 @@ 'Geometry/VeryForwardData/data/CTPPS_Stations_Assembly.xml', 'Geometry/VeryForwardData/data/CTPPS_Cuts_Per_Region.xml', 'Geometry/VeryForwardData/data/RP_Sensitive_Dets.xml' -) +) # diamond files ctppsDiamondGeomXMLFiles = cms.vstring( @@ -109,7 +109,7 @@ ctppsUFSDGeomXMLFiles = cms.vstring( 'Geometry/VeryForwardData/data/CTPPS_UFSD_Segments/CTPPS_UFSD_Pattern1.xml', 'Geometry/VeryForwardData/data/CTPPS_UFSD_Segments/CTPPS_UFSD_Pattern2_SegmentA.xml', - 'Geometry/VeryForwardData/data/CTPPS_UFSD_Segments/CTPPS_UFSD_Pattern2_SegmentB.xml', + 'Geometry/VeryForwardData/data/CTPPS_UFSD_Segments/CTPPS_UFSD_Pattern2_SegmentB.xml', 'Geometry/VeryForwardData/data/CTPPS_UFSD_Planes/CTPPS_UFSD_Plane4.xml', 'Geometry/VeryForwardData/data/CTPPS_UFSD_Parameters.xml', 'Geometry/VeryForwardData/data/CTPPS_UFSD_Sensitive_Dets_TimingHits.xml' @@ -136,6 +136,7 @@ ctppsGeometryESModule = cms.ESProducer("CTPPSGeometryESModule", verbosity = cms.untracked.uint32(1), + isRun2 = cms.bool(True), compactViewTag = cms.string('XMLIdealGeometryESSource_CTPPS') ) diff --git a/Geometry/VeryForwardGeometry/python/geometryPPS_CMSxz_fromDD_2018_cfi.py b/Geometry/VeryForwardGeometry/python/geometryPPS_CMSxz_fromDD_2018_cfi.py index c1be84c4a9839..340305d0347d4 100644 --- a/Geometry/VeryForwardGeometry/python/geometryPPS_CMSxz_fromDD_2018_cfi.py +++ b/Geometry/VeryForwardGeometry/python/geometryPPS_CMSxz_fromDD_2018_cfi.py @@ -3,19 +3,19 @@ # common and strip files totemGeomXMLFiles = cms.vstring( 'Geometry/CMSCommonData/data/materials.xml', - 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/rotations.xml', 'Geometry/CMSCommonData/data/cmsextent/2018/v1/cmsextent.xml', - 'Geometry/CMSCommonData/data/cms/2017/v1/cms.xml', - 'Geometry/CMSCommonData/data/beampipe/2017/v1/beampipe.xml', - 'Geometry/CMSCommonData/data/cmsBeam.xml', - 'Geometry/CMSCommonData/data/cmsMother.xml', - 'Geometry/CMSCommonData/data/mgnt.xml', - 'Geometry/ForwardCommonData/data/forward.xml', - 'Geometry/ForwardCommonData/data/totemRotations.xml', - 'Geometry/ForwardCommonData/data/totemMaterials.xml', - 'Geometry/ForwardCommonData/data/totemt1.xml', - 'Geometry/ForwardCommonData/data/totemt2.xml', - 'Geometry/ForwardCommonData/data/ionpump.xml', + 'Geometry/CMSCommonData/data/cms/2017/v1/cms.xml', + 'Geometry/CMSCommonData/data/beampipe/2017/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/ForwardCommonData/data/forward.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/ForwardCommonData/data/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemt1.xml', + 'Geometry/ForwardCommonData/data/totemt2.xml', + 'Geometry/ForwardCommonData/data/ionpump.xml', 'Geometry/VeryForwardData/data/RP_Box.xml', 'Geometry/VeryForwardData/data/RP_Box/RP_Box_000.xml', 'Geometry/VeryForwardData/data/RP_Box/RP_Box_001.xml', @@ -75,7 +75,7 @@ 'Geometry/VeryForwardData/data/CTPPS_Stations_Assembly.xml', 'Geometry/VeryForwardData/data/CTPPS_Cuts_Per_Region.xml', 'Geometry/VeryForwardData/data/RP_Sensitive_Dets.xml' -) +) # diamond files ctppsDiamondGeomXMLFiles = cms.vstring( @@ -108,7 +108,7 @@ ctppsUFSDGeomXMLFiles = cms.vstring( 'Geometry/VeryForwardData/data/CTPPS_UFSD_Segments/CTPPS_UFSD_Pattern1.xml', 'Geometry/VeryForwardData/data/CTPPS_UFSD_Segments/CTPPS_UFSD_Pattern2_SegmentA.xml', - 'Geometry/VeryForwardData/data/CTPPS_UFSD_Segments/CTPPS_UFSD_Pattern2_SegmentB.xml', + 'Geometry/VeryForwardData/data/CTPPS_UFSD_Segments/CTPPS_UFSD_Pattern2_SegmentB.xml', 'Geometry/VeryForwardData/data/CTPPS_UFSD_Planes/CTPPS_UFSD_Plane4.xml', 'Geometry/VeryForwardData/data/CTPPS_UFSD_Parameters.xml', 'Geometry/VeryForwardData/data/CTPPS_UFSD_Sensitive_Dets_TimingHits.xml' @@ -137,6 +137,7 @@ ctppsGeometryESModule = cms.ESProducer("CTPPSGeometryESModule", verbosity = cms.untracked.uint32(1), + isRun2 = cms.bool(True), compactViewTag = cms.string('XMLIdealGeometryESSource_CTPPS') ) diff --git a/Geometry/VeryForwardGeometry/python/geometryRPFromDB_cfi.py b/Geometry/VeryForwardGeometry/python/geometryRPFromDB_cfi.py index bfdf3d2a349bc..22f148a00625d 100644 --- a/Geometry/VeryForwardGeometry/python/geometryRPFromDB_cfi.py +++ b/Geometry/VeryForwardGeometry/python/geometryRPFromDB_cfi.py @@ -1,12 +1,19 @@ import FWCore.ParameterSet.Config as cms XMLIdealGeometryESSource_CTPPS = cms.ESProducer("XMLIdealGeometryESProducer", - rootDDName = cms.string('cms:CMSE'), - label = cms.string('CTPPS'), - appendToDataLabel = cms.string('XMLIdealGeometryESSource_CTPPS') - ) + rootDDName = cms.string('cms:CMSE'), + label = cms.string('CTPPS'), + appendToDataLabel = cms.string('XMLIdealGeometryESSource_CTPPS') +) ctppsGeometryESModule = cms.ESProducer("CTPPSGeometryESModule", verbosity = cms.untracked.uint32(1), + isRun2 = cms.bool(False), compactViewTag = cms.string('XMLIdealGeometryESSource_CTPPS') ) + +from Configuration.Eras.Modifier_ctpps_2016_cff import ctpps_2016 +from Configuration.Eras.Modifier_ctpps_2017_cff import ctpps_2017 +from Configuration.Eras.Modifier_ctpps_2018_cff import ctpps_2018 + +(ctpps_2016 | ctpps_2017 | ctpps_2018).toModify(ctppsGeometryESModule, isRun2=True) diff --git a/Geometry/VeryForwardGeometry/python/geometryRPFromDD_2017_cfi.py b/Geometry/VeryForwardGeometry/python/geometryRPFromDD_2017_cfi.py index 8449588967ed3..052adda8a3060 100644 --- a/Geometry/VeryForwardGeometry/python/geometryRPFromDD_2017_cfi.py +++ b/Geometry/VeryForwardGeometry/python/geometryRPFromDD_2017_cfi.py @@ -140,5 +140,6 @@ ctppsGeometryESModule = cms.ESProducer("CTPPSGeometryESModule", verbosity = cms.untracked.uint32(1), + isRun2 = cms.bool(True), compactViewTag = cms.string('XMLIdealGeometryESSource_CTPPS') ) diff --git a/Geometry/VeryForwardGeometry/python/geometryRPFromDD_2018_cfi.py b/Geometry/VeryForwardGeometry/python/geometryRPFromDD_2018_cfi.py index 0946d1a71b8e0..952964b387e35 100644 --- a/Geometry/VeryForwardGeometry/python/geometryRPFromDD_2018_cfi.py +++ b/Geometry/VeryForwardGeometry/python/geometryRPFromDD_2018_cfi.py @@ -145,6 +145,7 @@ XMLIdealGeometryESSource_CTPPS.geomXMLFiles.append("Geometry/VeryForwardData/data/2016_ctpps_15sigma_margin0/RP_Dist_Beam_Cent.xml") ctppsGeometryESModule = cms.ESProducer("CTPPSGeometryESModule", - verbosity = cms.untracked.uint32(1), - compactViewTag = cms.string('XMLIdealGeometryESSource_CTPPS') - ) + verbosity = cms.untracked.uint32(1), + isRun2 = cms.bool(True), + compactViewTag = cms.string('XMLIdealGeometryESSource_CTPPS') +) diff --git a/Geometry/VeryForwardGeometry/python/geometryRPFromDD_2021_cfi.py b/Geometry/VeryForwardGeometry/python/geometryRPFromDD_2021_cfi.py new file mode 100644 index 0000000000000..4da8f83a9dd92 --- /dev/null +++ b/Geometry/VeryForwardGeometry/python/geometryRPFromDD_2021_cfi.py @@ -0,0 +1,151 @@ +import FWCore.ParameterSet.Config as cms + +# common and strip files +totemGeomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/cmsextent.xml', + 'Geometry/CMSCommonData/data/cms/2017/v1/cms.xml', + 'Geometry/CMSCommonData/data/beampipe/2017/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/ForwardCommonData/data/forward.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/ForwardCommonData/data/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemt1.xml', + 'Geometry/ForwardCommonData/data/totemt2.xml', + 'Geometry/ForwardCommonData/data/ionpump.xml', + 'Geometry/VeryForwardData/data/RP_Box.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_000.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_001.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_002.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_003.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_004.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_005.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_020.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_021.xml', + #'Geometry/VeryForwardData/data/RP_Box/RP_Box_022.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_023.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_024.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_025.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_100.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_101.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_102.xml', + 'Geometry/VeryForwardData/data/RP_Box/2018/RP_Box_103.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_104.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_105.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_120.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_121.xml', + #'Geometry/VeryForwardData/data/RP_Box/RP_Box_122.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_123.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_124.xml', + 'Geometry/VeryForwardData/data/RP_Box/RP_Box_125.xml', + 'Geometry/VeryForwardData/data/RP_Hybrid.xml', + 'Geometry/VeryForwardData/data/RP_Materials.xml', + 'Geometry/VeryForwardData/data/RP_Transformations.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_000.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_001.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_002.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_004.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_005.xml', + #'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_022.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_024.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_025.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_100.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_101.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_102.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_104.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_105.xml', + #'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_122.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_124.xml', + 'Geometry/VeryForwardData/data/RP_Detectors_Assembly/RP_Detectors_Assembly_125.xml', + 'Geometry/VeryForwardData/data/RP_Device.xml', + 'Geometry/VeryForwardData/data/RP_Vertical_Device.xml', + 'Geometry/VeryForwardData/data/RP_Horizontal_Device.xml', + 'Geometry/VeryForwardData/data/2021/v1/RP_220_Right_Station.xml', + 'Geometry/VeryForwardData/data/2021/v1/RP_220_Left_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/RP_147_Right_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/RP_147_Left_Station.xml', + 'Geometry/VeryForwardData/data/RP_Stations_Assembly.xml', + 'Geometry/VeryForwardData/data/RP_Sensitive_Dets.xml', + 'Geometry/VeryForwardData/data/RP_Cuts_Per_Region.xml', + 'Geometry/VeryForwardData/data/RP_Param_Beam_Region.xml' + ) + +# diamond files +ctppsDiamondGeomXMLFiles = cms.vstring( + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Materials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Transformations.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_X_Distance.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Parameters.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Station_Parameters.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Horizontal_Pot.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Positive_Station.xml', + 'Geometry/VeryForwardData/data/CTPPS_Timing_Negative_Station.xml', + 'Geometry/VeryForwardData/data/2021/v1/CTPPS_Timing_Stations_Assembly.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern1_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern2_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern2_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern3_Segment4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_Segments/CTPPS_Diamond_Pattern4_Segment5.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane1.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane3.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Planes/CTPPS_Diamond_Plane4.xml', + 'Geometry/VeryForwardData/data/CTPPS_Diamond_2018/CTPPS_Diamond_Detector_Assembly.xml' + ) + +# UFSD files +ctppsUFSDGeomXMLFiles = cms.vstring( + # UFSDetectors + 'Geometry/VeryForwardData/data/CTPPS_UFSD_Segments/CTPPS_UFSD_Pattern1.xml', + 'Geometry/VeryForwardData/data/CTPPS_UFSD_Segments/CTPPS_UFSD_Pattern2_SegmentA.xml', + 'Geometry/VeryForwardData/data/CTPPS_UFSD_Segments/CTPPS_UFSD_Pattern2_SegmentB.xml', + 'Geometry/VeryForwardData/data/CTPPS_UFSD_Planes/CTPPS_UFSD_Plane4.xml', + 'Geometry/VeryForwardData/data/CTPPS_UFSD_Parameters.xml', + ) + +# Totem Timing files +totemTimingGeomXMLFiles = cms.vstring( + # UFSDetectors + 'Geometry/VeryForwardData/data/TotemTiming/TotemTiming_Dist_Beam_Cent.xml', + 'Geometry/VeryForwardData/data/TotemTiming/TotemTiming_DetectorAssembly.xml', + 'Geometry/VeryForwardData/data/TotemTiming/TotemTiming_Parameters.xml', + 'Geometry/VeryForwardData/data/TotemTiming/TotemTiming_Plane.xml', + 'Geometry/VeryForwardData/data/TotemTiming/TotemTiming_Station.xml', + ) + +# pixel files +ctppsPixelGeomXMLFiles = cms.vstring( + 'Geometry/VeryForwardData/data/ppstrackerMaterials.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Module_2x2.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_023.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_123.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_003.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_2018/CTPPS_Pixel_Assembly_Box_Real_103.xml', + 'Geometry/VeryForwardData/data/CTPPS_Pixel_Sens.xml' + ) + +XMLIdealGeometryESSource_CTPPS = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = totemGeomXMLFiles + ctppsDiamondGeomXMLFiles + ctppsUFSDGeomXMLFiles + totemTimingGeomXMLFiles + ctppsPixelGeomXMLFiles, + rootNodeName = cms.string('cms:CMSE') + ) + +# position of RPs +XMLIdealGeometryESSource_CTPPS.geomXMLFiles.append("Geometry/VeryForwardData/data/2021/v1/RP_Dist_Beam_Cent.xml") + +ctppsGeometryESModule = cms.ESProducer("CTPPSGeometryESModule", + verbosity = cms.untracked.uint32(1), + isRun2 = cms.bool(False), + compactViewTag = cms.string('XMLIdealGeometryESSource_CTPPS') +) diff --git a/Geometry/VeryForwardGeometry/src/CTPPSPixelSimTopology.cc b/Geometry/VeryForwardGeometry/src/CTPPSPixelSimTopology.cc deleted file mode 100644 index e671d4ef6d0ee..0000000000000 --- a/Geometry/VeryForwardGeometry/src/CTPPSPixelSimTopology.cc +++ /dev/null @@ -1,31 +0,0 @@ -#include "Geometry/VeryForwardGeometry/interface/CTPPSPixelSimTopology.h" - -CTPPSPixelSimTopology::CTPPSPixelSimTopology() { - active_edge_x_ = simX_width_ * 0.5 - phys_active_edge_dist_; - active_edge_y_ = simY_width_ * 0.5 - phys_active_edge_dist_; -} - -CTPPSPixelSimTopology::PixelInfo CTPPSPixelSimTopology::getPixelsInvolved( - double x, double y, double sigma, double& hit_pos_x, double& hit_pos_y) const { - //hit position wrt the bottom left corner of the sensor (-8.3, -12.2) in sensor view, rocs behind - hit_pos_x = x + simX_width_ / 2.; - hit_pos_y = y + simY_width_ / 2.; - if (!(hit_pos_x * hit_pos_y > 0)) - throw cms::Exception("CTPPSPixelSimTopology") << "out of reference frame"; - - double hit_factor = activeEdgeFactor(x, y); - - unsigned int interested_row = row(x); - unsigned int interested_col = col(y); - double low_pixel_range_x, high_pixel_range_x, low_pixel_range_y, high_pixel_range_y; - pixelRange( - interested_row, interested_col, low_pixel_range_x, high_pixel_range_x, low_pixel_range_y, high_pixel_range_y); - - return CTPPSPixelSimTopology::PixelInfo(low_pixel_range_x, - high_pixel_range_x, - low_pixel_range_y, - high_pixel_range_y, - hit_factor, - interested_row, - interested_col); -} diff --git a/Geometry/VeryForwardGeometryBuilder/BuildFile.xml b/Geometry/VeryForwardGeometryBuilder/BuildFile.xml index 5e46ec765fa63..0d070ca811080 100644 --- a/Geometry/VeryForwardGeometryBuilder/BuildFile.xml +++ b/Geometry/VeryForwardGeometryBuilder/BuildFile.xml @@ -1,7 +1,6 @@ - diff --git a/Geometry/VeryForwardGeometryBuilder/interface/CTPPSGeometryESCommon.h b/Geometry/VeryForwardGeometryBuilder/interface/CTPPSGeometryESCommon.h new file mode 100644 index 0000000000000..93a6c421cf370 --- /dev/null +++ b/Geometry/VeryForwardGeometryBuilder/interface/CTPPSGeometryESCommon.h @@ -0,0 +1,6 @@ +#include "Geometry/VeryForwardGeometryBuilder/interface/DetGeomDesc.h" +#include "CondFormats/PPSObjects/interface/CTPPSRPAlignmentCorrectionsData.h" + +namespace CTPPSGeometryESCommon { + std::unique_ptr applyAlignments(const DetGeomDesc&, const CTPPSRPAlignmentCorrectionsData*); +}; \ No newline at end of file diff --git a/Geometry/VeryForwardGeometryBuilder/interface/DetGeomDesc.h b/Geometry/VeryForwardGeometryBuilder/interface/DetGeomDesc.h index 258d1974ba885..c1297d33c46ae 100644 --- a/Geometry/VeryForwardGeometryBuilder/interface/DetGeomDesc.h +++ b/Geometry/VeryForwardGeometryBuilder/interface/DetGeomDesc.h @@ -1,7 +1,7 @@ /**************************************************************************** * * Authors: -* Jan Kašpar (jan.kaspar@gmail.com) +* Jan Kašpar (jan.kaspar@gmail.com) * CMSSW developpers (based on class GeometricDet) * * Rewritten + Moved out common functionalities to DetGeomDesc(Builder) by Gabrielle Hugo. @@ -28,7 +28,7 @@ class CTPPSRPAlignmentCorrectionData; * * Class resembling GeometricDet class. Slight changes were made to suit needs of the TOTEM RP description. * Each instance is a tree node, with geometrical information from DDD (shift, rotation, material, ...), ID and list of children nodes. - * + * * The translation and rotation parameters are defined by local-to-global * coordinate transform. That is, if r_l is a point in local coordinate system and x_g in global, * then the transform reads: @@ -37,7 +37,7 @@ class CTPPSRPAlignmentCorrectionData; \endverbatim * * July 2020: Migrated to DD4hep - * To avoid any regression with values from XMLs / Geant4, all lengths are converted from cm (DD4hep) to mm. + * To avoid any regression with values from XMLs / Geant4, all lengths are converted from DD4hep unit to mm. * **/ @@ -54,9 +54,11 @@ class DetGeomDesc { using Translation = ROOT::Math::DisplacementVector3D>; // Constructor from old DD DDFilteredView - DetGeomDesc(const DDFilteredView& fv); + /// \param[in] isRun2 Switch between legacy run 2-like geometry and 2021+ scenarii + DetGeomDesc(const DDFilteredView& fv, const bool isRun2); // Constructor from DD4Hep DDFilteredView - DetGeomDesc(const cms::DDFilteredView& fv); + /// \param[in] isRun2 Switch between legacy run 2-like geometry and 2021+ scenarii + DetGeomDesc(const cms::DDFilteredView& fv, const bool isRun2); virtual ~DetGeomDesc(); @@ -75,10 +77,11 @@ class DetGeomDesc { const RotationMatrix& rotation() const { return m_rot; } // shape info - // params() is left for general access to solid shape parameters, but should be used - // only with great care, for two reasons: 1. order of parameters may possibly change from - // a version to another of DD4hep; 2. length parameters unit is cm while PPS uses mm. - const std::vector& params() const { return m_params; } // default unit: mm from oldDD, cm from DD4hep + // params() is left for general access to solid shape parameters (any shape, not only box!). + // Though, it should be used only with great care, for two reasons: + // 1. Order of shape parameters may possibly change from a version of DD4hep to another. + // 2. Among all parameters, those representing a length are expressed in mm (for old DD) or the DD4hep-configured unit (for DD4hep), while PPS uses mm. + const std::vector& params() const { return m_params; } // default unit: mm for oldDD, DD4hep unit for DD4hep bool isABox() const { return m_isABox; } const DiamondDimensions& getDiamondDimensions() const { if (!isABox()) { @@ -105,6 +108,8 @@ class DetGeomDesc { void print() const; + void invertZSign() { m_trans.SetZ(-m_trans.z()); } + private: void deleteComponents(); // deletes just the first daughters void deepDeleteComponents(); // traverses the tree and deletes all nodes. @@ -115,8 +120,14 @@ class DetGeomDesc { DiamondDimensions computeDiamondDimensions(const bool isABox, const bool isDD4hep, const std::vector& params) const; - DetId computeDetID(const std::string& name, const std::vector& copyNos, unsigned int copyNum) const; - DetId computeDetIDFromDD4hep(const std::string& name, const std::vector& copyNos, unsigned int copyNum) const; + DetId computeDetID(const std::string& name, + const std::vector& copyNos, + const unsigned int copyNum, + const bool isRun2) const; + DetId computeDetIDFromDD4hep(const std::string& name, + const std::vector& copyNos, + const unsigned int copyNum, + const bool isRun2) const; std::string computeSensorType(std::string_view name); std::string m_name; // with no namespace @@ -124,7 +135,7 @@ class DetGeomDesc { bool m_isDD4hep; Translation m_trans; // in mm RotationMatrix m_rot; - std::vector m_params; // default unit: mm from oldDD, cm from DD4hep + std::vector m_params; // default unit: mm from oldDD, DD4hep unit for DD4hep bool m_isABox; DiamondDimensions m_diamondBoxParams; // in mm std::string m_sensorType; diff --git a/Geometry/VeryForwardGeometryBuilder/interface/DetGeomDescBuilder.h b/Geometry/VeryForwardGeometryBuilder/interface/DetGeomDescBuilder.h index ab367d19df08e..722d9cdcee1b5 100644 --- a/Geometry/VeryForwardGeometryBuilder/interface/DetGeomDescBuilder.h +++ b/Geometry/VeryForwardGeometryBuilder/interface/DetGeomDescBuilder.h @@ -9,9 +9,10 @@ * Generic function to build geo (tree of DetGeomDesc) from compact view. */ namespace detgeomdescbuilder { - std::unique_ptr buildDetGeomDescFromCompactView(const DDCompactView& myCompactView); - void buildDetGeomDescDescendants(DDFilteredView& fv, DetGeomDesc* geoInfoParent); - std::unique_ptr buildDetGeomDescFromCompactView(const cms::DDCompactView& myCompactView); + std::unique_ptr buildDetGeomDescFromCompactView(const DDCompactView& myCompactView, const bool isRun2); + void buildDetGeomDescDescendants(DDFilteredView& fv, DetGeomDesc* geoInfoParent, const bool isRun2); + std::unique_ptr buildDetGeomDescFromCompactView(const cms::DDCompactView& myCompactView, + const bool isRun2); } // namespace detgeomdescbuilder #endif diff --git a/Geometry/VeryForwardGeometryBuilder/plugins/CTPPSGeometryESModule.cc b/Geometry/VeryForwardGeometryBuilder/plugins/CTPPSGeometryESModule.cc index e9fa40bffd16b..cad97b1e4e445 100644 --- a/Geometry/VeryForwardGeometryBuilder/plugins/CTPPSGeometryESModule.cc +++ b/Geometry/VeryForwardGeometryBuilder/plugins/CTPPSGeometryESModule.cc @@ -30,6 +30,8 @@ #include "Geometry/VeryForwardGeometryBuilder/interface/DetGeomDesc.h" #include "Geometry/VeryForwardGeometryBuilder/interface/CTPPSGeometry.h" +#include "Geometry/VeryForwardGeometryBuilder/interface/CTPPSGeometryESCommon.h" + #include /** @@ -76,9 +78,8 @@ class CTPPSGeometryESModule : public edm::ESProducer { GDTokens const&, const char* name); - static std::unique_ptr applyAlignments(const DetGeomDesc&, const CTPPSRPAlignmentCorrectionsData*); - const unsigned int verbosity_; + const bool isRun2_; edm::ESGetToken ddToken_; edm::ESGetToken dd4hepToken_; @@ -93,6 +94,7 @@ class CTPPSGeometryESModule : public edm::ESProducer { CTPPSGeometryESModule::CTPPSGeometryESModule(const edm::ParameterSet& iConfig) : verbosity_(iConfig.getUntrackedParameter("verbosity")), + isRun2_(iConfig.getParameter("isRun2")), fromDD4hep_(iConfig.getUntrackedParameter("fromDD4hep", false)), gdRealTokens_{setWhatProduced(this, &CTPPSGeometryESModule::produceRealGD)}, gdMisTokens_{setWhatProduced(this, &CTPPSGeometryESModule::produceMisalignedGD)}, @@ -113,78 +115,19 @@ CTPPSGeometryESModule::CTPPSGeometryESModule(const edm::ParameterSet& iConfig) void CTPPSGeometryESModule::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; desc.addUntracked("verbosity", 1); + desc.add("isRun2", false)->setComment("Switch to legacy (2017-18) definition of diamond geometry"); desc.add("compactViewTag", std::string()); desc.addUntracked("fromDD4hep", false); descriptions.add("CTPPSGeometryESModule", desc); } -//---------------------------------------------------------------------------------------------------- -/* - * Apply alignments by doing a BFS on idealGD tree. - */ -std::unique_ptr CTPPSGeometryESModule::applyAlignments(const DetGeomDesc& idealDetRoot, - const CTPPSRPAlignmentCorrectionsData* alignments) { - std::deque bufferIdealGeo; - bufferIdealGeo.emplace_back(&idealDetRoot); - - std::deque bufferAlignedGeo; - DetGeomDesc* alignedDetRoot = new DetGeomDesc(idealDetRoot, DetGeomDesc::cmWithoutChildren); - bufferAlignedGeo.emplace_back(alignedDetRoot); - - while (!bufferIdealGeo.empty()) { - const DetGeomDesc* idealDet = bufferIdealGeo.front(); - DetGeomDesc* alignedDet = bufferAlignedGeo.front(); - bufferIdealGeo.pop_front(); - bufferAlignedGeo.pop_front(); - - const std::string name = alignedDet->name(); - - // Is it sensor? If yes, apply full sensor alignments - if (name == DDD_TOTEM_RP_SENSOR_NAME || name == DDD_CTPPS_DIAMONDS_SEGMENT_NAME || - name == DDD_CTPPS_UFSD_SEGMENT_NAME || name == DDD_CTPPS_PIXELS_SENSOR_NAME || - name == DDD_CTPPS_PIXELS_SENSOR_NAME_2x2 || std::regex_match(name, std::regex(DDD_TOTEM_TIMING_SENSOR_TMPL))) { - unsigned int plId = alignedDet->geographicalID(); - - if (alignments) { - const auto& ac = alignments->getFullSensorCorrection(plId); - alignedDet->applyAlignment(ac); - } - } - - // Is it RP box? If yes, apply RP alignments - if (name == DDD_TOTEM_RP_RP_NAME || name == DDD_CTPPS_DIAMONDS_RP_NAME || name == DDD_CTPPS_PIXELS_RP_NAME || - name == DDD_TOTEM_TIMING_RP_NAME) { - unsigned int rpId = alignedDet->geographicalID(); - - if (alignments) { - const auto& ac = alignments->getRPCorrection(rpId); - alignedDet->applyAlignment(ac); - } - } - - // create and add children - const auto& idealDetChildren = idealDet->components(); - for (unsigned int i = 0; i < idealDetChildren.size(); i++) { - const DetGeomDesc* idealDetChild = idealDetChildren[i]; - bufferIdealGeo.emplace_back(idealDetChild); - - // create new node with the same information as in idealDetChild and add it as a child of alignedDet - DetGeomDesc* alignedDetChild = new DetGeomDesc(*idealDetChild, DetGeomDesc::cmWithoutChildren); - alignedDet->addComponent(alignedDetChild); - - bufferAlignedGeo.emplace_back(alignedDetChild); - } - } - return std::unique_ptr(alignedDetRoot); -} - std::unique_ptr CTPPSGeometryESModule::produceIdealGD(const IdealGeometryRecord& iRecord) { if (!fromDD4hep_) { // Get the DDCompactView from EventSetup auto const& myCompactView = iRecord.get(ddToken_); // Build geo from compact view. - return detgeomdescbuilder::buildDetGeomDescFromCompactView(myCompactView); + return detgeomdescbuilder::buildDetGeomDescFromCompactView(myCompactView, isRun2_); } else { @@ -192,7 +135,7 @@ std::unique_ptr CTPPSGeometryESModule::produceIdealGD(const IdealGe auto const& myCompactView = iRecord.get(dd4hepToken_); // Build geo from compact view. - return detgeomdescbuilder::buildDetGeomDescFromCompactView(myCompactView); + return detgeomdescbuilder::buildDetGeomDescFromCompactView(myCompactView, isRun2_); } } @@ -222,7 +165,7 @@ std::unique_ptr CTPPSGeometryESModule::produceGD(IdealGeometryRecor } } - return applyAlignments(idealGD, alignments); + return CTPPSGeometryESCommon::applyAlignments(idealGD, alignments); } std::unique_ptr CTPPSGeometryESModule::produceRealGD(const VeryForwardRealGeometryRecord& iRecord) { diff --git a/Geometry/VeryForwardGeometryBuilder/src/CTPPSGeometryESCommon.cc b/Geometry/VeryForwardGeometryBuilder/src/CTPPSGeometryESCommon.cc new file mode 100644 index 0000000000000..32cc076d5e70d --- /dev/null +++ b/Geometry/VeryForwardGeometryBuilder/src/CTPPSGeometryESCommon.cc @@ -0,0 +1,63 @@ +#include "Geometry/VeryForwardGeometryBuilder/interface/CTPPSGeometryESCommon.h" +#include "Geometry/VeryForwardGeometryBuilder/interface/CTPPSDDDNames.h" + +namespace CTPPSGeometryESCommon { + + std::unique_ptr applyAlignments(const DetGeomDesc& idealDetRoot, + const CTPPSRPAlignmentCorrectionsData* alignments) { + std::deque bufferIdealGeo; + bufferIdealGeo.emplace_back(&idealDetRoot); + + std::deque bufferAlignedGeo; + DetGeomDesc* alignedDetRoot = new DetGeomDesc(idealDetRoot, DetGeomDesc::cmWithoutChildren); + bufferAlignedGeo.emplace_back(alignedDetRoot); + + while (!bufferIdealGeo.empty()) { + const DetGeomDesc* idealDet = bufferIdealGeo.front(); + DetGeomDesc* alignedDet = bufferAlignedGeo.front(); + bufferIdealGeo.pop_front(); + bufferAlignedGeo.pop_front(); + + const std::string name = alignedDet->name(); + + // Is it sensor? If yes, apply full sensor alignments + if (name == DDD_TOTEM_RP_SENSOR_NAME || name == DDD_CTPPS_DIAMONDS_SEGMENT_NAME || + name == DDD_CTPPS_UFSD_SEGMENT_NAME || name == DDD_CTPPS_PIXELS_SENSOR_NAME || + name == DDD_CTPPS_PIXELS_SENSOR_NAME_2x2 || + std::regex_match(name, std::regex(DDD_TOTEM_TIMING_SENSOR_TMPL))) { + unsigned int plId = alignedDet->geographicalID(); + + if (alignments) { + const auto& ac = alignments->getFullSensorCorrection(plId); + alignedDet->applyAlignment(ac); + } + } + + // Is it RP box? If yes, apply RP alignments + if (name == DDD_TOTEM_RP_RP_NAME || name == DDD_CTPPS_DIAMONDS_RP_NAME || name == DDD_CTPPS_PIXELS_RP_NAME || + name == DDD_TOTEM_TIMING_RP_NAME) { + unsigned int rpId = alignedDet->geographicalID(); + + if (alignments) { + const auto& ac = alignments->getRPCorrection(rpId); + alignedDet->applyAlignment(ac); + } + } + + // create and add children + const auto& idealDetChildren = idealDet->components(); + for (unsigned int i = 0; i < idealDetChildren.size(); i++) { + const DetGeomDesc* idealDetChild = idealDetChildren[i]; + bufferIdealGeo.emplace_back(idealDetChild); + + // create new node with the same information as in idealDetChild and add it as a child of alignedDet + DetGeomDesc* alignedDetChild = new DetGeomDesc(*idealDetChild, DetGeomDesc::cmWithoutChildren); + alignedDet->addComponent(alignedDetChild); + + bufferAlignedGeo.emplace_back(alignedDetChild); + } + } + return std::unique_ptr(alignedDetRoot); + } + +} // namespace CTPPSGeometryESCommon \ No newline at end of file diff --git a/Geometry/VeryForwardGeometryBuilder/src/DetGeomDesc.cc b/Geometry/VeryForwardGeometryBuilder/src/DetGeomDesc.cc index 3bf5dcc50aa92..20124c782965f 100644 --- a/Geometry/VeryForwardGeometryBuilder/src/DetGeomDesc.cc +++ b/Geometry/VeryForwardGeometryBuilder/src/DetGeomDesc.cc @@ -1,8 +1,8 @@ /**************************************************************************** * * This is a part of the TOTEM offline software. -* Authors: -* Jan Kašpar (jan.kaspar@gmail.com) +* Authors: +* Jan Kašpar (jan.kaspar@gmail.com) * CMSSW developers (based on GeometricDet class) * ****************************************************************************/ @@ -20,13 +20,13 @@ #include "DataFormats/CTPPSDetId/interface/TotemTimingDetId.h" #include "DataFormats/CTPPSDetId/interface/CTPPSPixelDetId.h" #include "DataFormats/CTPPSDetId/interface/CTPPSDiamondDetId.h" -#include "DataFormats/Math/interface/GeantUnits.h" +#include #include "FWCore/MessageLogger/interface/MessageLogger.h" /* * Constructor from old DD DDFilteredView, also using the SpecPars to access 2x2 wafers info. */ -DetGeomDesc::DetGeomDesc(const DDFilteredView& fv) +DetGeomDesc::DetGeomDesc(const DDFilteredView& fv, const bool isRun2) : m_name(computeNameWithNoNamespace(fv.name())), m_copy(fv.copyno()), m_isDD4hep(false), @@ -36,25 +36,25 @@ DetGeomDesc::DetGeomDesc(const DDFilteredView& fv) m_isABox(fv.shape() == DDSolidShape::ddbox), m_diamondBoxParams(computeDiamondDimensions(m_isABox, m_isDD4hep, m_params)), // mm (legacy) m_sensorType(computeSensorType(fv.logicalPart().name().fullname())), - m_geographicalID(computeDetID(m_name, fv.copyNumbers(), fv.copyno())), + m_geographicalID(computeDetID(m_name, fv.copyNumbers(), fv.copyno(), isRun2)), m_z(fv.translation().z()) // mm (legacy) {} /* * Constructor from DD4Hep DDFilteredView, also using the SpecPars to access 2x2 wafers info. */ -DetGeomDesc::DetGeomDesc(const cms::DDFilteredView& fv) +DetGeomDesc::DetGeomDesc(const cms::DDFilteredView& fv, const bool isRun2) : m_name(computeNameWithNoNamespace(fv.name())), m_copy(fv.copyNum()), m_isDD4hep(true), - m_trans(geant_units::operators::convertCmToMm(fv.translation())), // converted from cm (DD4hep) to mm + m_trans(fv.translation() / dd4hep::mm), // converted from DD4hep unit to mm m_rot(fv.rotation()), - m_params(computeParameters(fv)), // default unit from DD4hep (cm) + m_params(computeParameters(fv)), // default unit from DD4hep m_isABox(dd4hep::isA(fv.solid())), - m_diamondBoxParams(computeDiamondDimensions(m_isABox, m_isDD4hep, m_params)), // converted from cm (DD4hep) to mm + m_diamondBoxParams(computeDiamondDimensions(m_isABox, m_isDD4hep, m_params)), // converted from DD4hep unit to mm m_sensorType(computeSensorType(fv.name())), - m_geographicalID(computeDetIDFromDD4hep(m_name, fv.copyNos(), fv.copyNum())), - m_z(geant_units::operators::convertCmToMm(fv.translation().z())) // converted from cm (DD4hep) to mm + m_geographicalID(computeDetIDFromDD4hep(m_name, fv.copyNos(), fv.copyNum(), isRun2)), + m_z(fv.translation().z() / dd4hep::mm) // converted from DD4hep unit to mm {} DetGeomDesc::DetGeomDesc(const DetGeomDesc& ref, CopyMode cm) { @@ -139,8 +139,8 @@ std::vector DetGeomDesc::computeParameters(const cms::DDFilteredView& fv /* * Compute diamond dimensions. * The diamond sensors are represented by the Box shape parameters. - * oldDD: params are already in mm. - * DD4hep: convert params from cm (DD4hep) to mm (legacy expected by PPS reco software). + * oldDD: params are already in mm. + * DD4hep: convert params from DD4hep unit to mm (mm is legacy expected by PPS reco software). */ DiamondDimensions DetGeomDesc::computeDiamondDimensions(const bool isABox, const bool isDD4hep, @@ -148,13 +148,11 @@ DiamondDimensions DetGeomDesc::computeDiamondDimensions(const bool isABox, DiamondDimensions boxShapeParameters{}; if (isABox) { if (!isDD4hep) { - // mm (legacy) + // mm (old DD) boxShapeParameters = {params.at(0), params.at(1), params.at(2)}; } else { - // convert cm (DD4hep) to mm (legacy expected by PPS reco software) - boxShapeParameters = {geant_units::operators::convertCmToMm(params.at(0)), - geant_units::operators::convertCmToMm(params.at(1)), - geant_units::operators::convertCmToMm(params.at(2))}; + // convert from DD4hep unit to mm (mm is legacy expected by PPS reco software) + boxShapeParameters = {params.at(0) / dd4hep::mm, params.at(1) / dd4hep::mm, params.at(2) / dd4hep::mm}; } } return boxShapeParameters; @@ -164,14 +162,17 @@ DiamondDimensions DetGeomDesc::computeDiamondDimensions(const bool isABox, * old DD DetId computation. * Relies on name and volumes copy numbers. */ -DetId DetGeomDesc::computeDetID(const std::string& name, const std::vector& copyNos, unsigned int copyNum) const { +DetId DetGeomDesc::computeDetID(const std::string& name, + const std::vector& copyNos, + const unsigned int copyNum, + const bool isRun2) const { DetId geoID; // strip sensors if (name == DDD_TOTEM_RP_SENSOR_NAME) { - // check size of copy numbers array + // check size of copy numbers vector if (copyNos.size() < 3) - throw cms::Exception("DDDTotemRPContruction") + throw cms::Exception("DDDTotemRPConstruction") << "size of copyNumbers for strip sensor is " << copyNos.size() << ". It must be >= 3."; // extract information @@ -203,9 +204,9 @@ DetId DetGeomDesc::computeDetID(const std::string& name, const std::vector& } else if (std::regex_match(name, std::regex(DDD_TOTEM_TIMING_SENSOR_TMPL))) { - // check size of copy numbers array + // check size of copy numbers vector if (copyNos.size() < 4) - throw cms::Exception("DDDTotemRPContruction") + throw cms::Exception("DDDTotemRPConstruction") << "size of copyNumbers for TOTEM timing sensor is " << copyNos.size() << ". It must be >= 4."; const unsigned int decRPId = copyNos[copyNos.size() - 4]; @@ -221,9 +222,9 @@ DetId DetGeomDesc::computeDetID(const std::string& name, const std::vector& // pixel sensors else if (name == DDD_CTPPS_PIXELS_SENSOR_NAME || name == DDD_CTPPS_PIXELS_SENSOR_NAME_2x2) { - // check size of copy numbers array + // check size of copy numbers vector if (copyNos.size() < 4) - throw cms::Exception("DDDTotemRPContruction") + throw cms::Exception("DDDTotemRPConstruction") << "size of copyNumbers for pixel sensor is " << copyNos.size() << ". It must be >= 4."; // extract information @@ -237,27 +238,45 @@ DetId DetGeomDesc::computeDetID(const std::string& name, const std::vector& // diamond/UFSD sensors else if (name == DDD_CTPPS_DIAMONDS_SEGMENT_NAME || name == DDD_CTPPS_UFSD_SEGMENT_NAME) { + // check size of copy numbers vector + if (copyNos.size() < 2) + throw cms::Exception("DDDTotemRPConstruction") + << "size of copyNumbers for diamond segments is " << copyNos.size() << ". It must be >= 2."; + const unsigned int decRPId = copyNos[1]; + unsigned int arm, station, rp; + if (isRun2) { + arm = decRPId - 1; + station = 1; + rp = 6; + } else { + arm = (decRPId % 1000) / 100; + station = (decRPId % 100) / 10; + rp = decRPId % 10; + } const unsigned int id = copyNos[copyNos.size() - 1]; - const unsigned int arm = copyNos[1] - 1; - const unsigned int station = 1; - const unsigned int rp = 6; - const unsigned int plane = (id / 100); + const unsigned int plane = id / 100; const unsigned int channel = id % 100; - geoID = CTPPSDiamondDetId(arm, station, rp, plane, channel); } // diamond/UFSD RPs else if (name == DDD_CTPPS_DIAMONDS_RP_NAME) { - // check size of copy numbers array + // check size of copy numbers vector if (copyNos.size() < 2) - throw cms::Exception("DDDTotemRPContruction") + throw cms::Exception("DDDTotemRPConstruction") << "size of copyNumbers for diamond RP is " << copyNos.size() << ". It must be >= 2."; - const unsigned int arm = copyNos[1] - 1; - const unsigned int station = 1; - const unsigned int rp = 6; - + const unsigned int decRPId = copyNos[1]; + unsigned int arm, station, rp; + if (isRun2) { + arm = decRPId - 1; + station = 1; + rp = 6; + } else { + arm = (decRPId % 1000) / 100; + station = (decRPId % 100) / 10; + rp = decRPId % 10; + } geoID = CTPPSDiamondDetId(arm, station, rp); } @@ -269,10 +288,11 @@ DetId DetGeomDesc::computeDetID(const std::string& name, const std::vector& */ DetId DetGeomDesc::computeDetIDFromDD4hep(const std::string& name, const std::vector& copyNos, - unsigned int copyNum) const { + const unsigned int copyNum, + const bool isRun2) const { std::vector copyNosOldDD = {copyNos.rbegin() + 1, copyNos.rend()}; - return computeDetID(name, copyNosOldDD, copyNum); + return computeDetID(name, copyNosOldDD, copyNum, isRun2); } /* diff --git a/Geometry/VeryForwardGeometryBuilder/src/DetGeomDescBuilder.cc b/Geometry/VeryForwardGeometryBuilder/src/DetGeomDescBuilder.cc index c48e5371b0050..5e1725410c267 100644 --- a/Geometry/VeryForwardGeometryBuilder/src/DetGeomDescBuilder.cc +++ b/Geometry/VeryForwardGeometryBuilder/src/DetGeomDescBuilder.cc @@ -1,21 +1,23 @@ #include "Geometry/VeryForwardGeometryBuilder/interface/DetGeomDescBuilder.h" +#include "DataFormats/CTPPSDetId/interface/CTPPSDetId.h" #include "DetectorDescription/DDCMS/interface/DDDetector.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" /* * Generic function to build geo (tree of DetGeomDesc) from old DD compact view. */ -std::unique_ptr detgeomdescbuilder::buildDetGeomDescFromCompactView(const DDCompactView& myCompactView) { +std::unique_ptr detgeomdescbuilder::buildDetGeomDescFromCompactView(const DDCompactView& myCompactView, + const bool isRun2) { // Create DDFilteredView (no filter!!) DDPassAllFilter filter; DDFilteredView fv(myCompactView, filter); // Geo info: root node. - auto geoInfoRoot = std::make_unique(fv); + auto geoInfoRoot = std::make_unique(fv, isRun2); // Construct the tree of children geo info (DetGeomDesc). - detgeomdescbuilder::buildDetGeomDescDescendants(fv, geoInfoRoot.get()); + detgeomdescbuilder::buildDetGeomDescDescendants(fv, geoInfoRoot.get(), isRun2); edm::LogInfo("PPSGeometryESProducer") << "Successfully built geometry."; @@ -26,18 +28,25 @@ std::unique_ptr detgeomdescbuilder::buildDetGeomDescFromCompactView * Depth-first search recursion. * Construct the tree of children geo info (DetGeomDesc) (old DD). */ -void detgeomdescbuilder::buildDetGeomDescDescendants(DDFilteredView& fv, DetGeomDesc* geoInfo) { +void detgeomdescbuilder::buildDetGeomDescDescendants(DDFilteredView& fv, DetGeomDesc* geoInfo, const bool isRun2) { // Leaf if (!fv.firstChild()) return; do { - // Create node, and add it to the geoInfoParent's list. - DetGeomDesc* child = new DetGeomDesc(fv); + // Create node + DetGeomDesc* child = new DetGeomDesc(fv, isRun2); + + // legacy Run2 z sign fix for diamond detectors + const auto& detId = child->geographicalID(); + if (isRun2 && detId.subdetId() == CTPPSDetId::sdTimingDiamond) + child->invertZSign(); + + // add the to the geoInfoParent's list. geoInfo->addComponent(child); // Recursion - buildDetGeomDescDescendants(fv, child); + buildDetGeomDescDescendants(fv, child, isRun2); } while (fv.nextSibling()); fv.parent(); @@ -47,7 +56,7 @@ void detgeomdescbuilder::buildDetGeomDescDescendants(DDFilteredView& fv, DetGeom * Generic function to build geo (tree of DetGeomDesc) from DD4hep compact view. */ std::unique_ptr detgeomdescbuilder::buildDetGeomDescFromCompactView( - const cms::DDCompactView& myCompactView) { + const cms::DDCompactView& myCompactView, const bool isRun2) { // create DDFilteredView (no filter!!) const cms::DDDetector* mySystem = myCompactView.detector(); const dd4hep::Volume& worldVolume = mySystem->worldVolume(); @@ -57,12 +66,19 @@ std::unique_ptr detgeomdescbuilder::buildDetGeomDescFromCompactView } // Geo info: root node. - auto geoInfoRoot = std::make_unique(fv); + auto geoInfoRoot = std::make_unique(fv, isRun2); // Construct the tree of children geo info (DetGeomDesc). do { - // Create node, and add it to the geoInfoRoot's list. - DetGeomDesc* child = new DetGeomDesc(fv); + // Create node + DetGeomDesc* child = new DetGeomDesc(fv, isRun2); + + // legacy Run2 z sign fix for diamond detectors + const auto& detId = child->geographicalID(); + if (isRun2 && detId.subdetId() == CTPPSDetId::sdTimingDiamond) + child->invertZSign(); + + // add the node to the geoInfoRoot's list. geoInfoRoot->addComponent(child); } while (fv.next(0)); diff --git a/HLTrigger/Configuration/python/CustomConfigs.py b/HLTrigger/Configuration/python/CustomConfigs.py index b5316af4cc934..dc6aee187b6d2 100644 --- a/HLTrigger/Configuration/python/CustomConfigs.py +++ b/HLTrigger/Configuration/python/CustomConfigs.py @@ -22,10 +22,10 @@ def Base(process): process.options.numberOfStreams = cms.untracked.uint32( 0 ) process.options.sizeOfStackForThreadsInKB = cms.untracked.uint32( 10*1024 ) - process.MessageLogger.categories.append('TriggerSummaryProducerAOD') - process.MessageLogger.categories.append('L1GtTrigReport') - process.MessageLogger.categories.append('L1TGlobalSummary') - process.MessageLogger.categories.append('HLTrigReport') + process.MessageLogger.TriggerSummaryProducerAOD=cms.untracked.PSet() + process.MessageLogger.L1GtTrigReport=cms.untracked.PSet() + process.MessageLogger.L1TGlobalSummary=cms.untracked.PSet() + process.MessageLogger.HLTrigReport=cms.untracked.PSet() # No longer override - instead use GT config as provided via cmsDriver ## override the GlobalTag, connection string and pfnPrefix diff --git a/HLTrigger/Configuration/python/HLT_FULL_cff.py b/HLTrigger/Configuration/python/HLT_FULL_cff.py index c89b711a97a1f..c3d01d39f37cc 100644 --- a/HLTrigger/Configuration/python/HLT_FULL_cff.py +++ b/HLTrigger/Configuration/python/HLT_FULL_cff.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --cff --data /dev/CMSSW_11_2_0/HLT --type FULL +# hltGetConfiguration --cff --data /dev/CMSSW_11_3_0/HLT --type FULL -# /dev/CMSSW_11_2_0/HLT/V35 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/HLT/V17 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/HLT/V35') + tableName = cms.string('/dev/CMSSW_11_3_0/HLT/V17') ) fragment.transferSystem = cms.PSet( @@ -3762,7 +3762,8 @@ 'ScoutingCaloMuon' ), ScoutingPF = cms.vstring( 'ScoutingPFCommissioning', 'ScoutingPFHT', - 'ScoutingPFMuon' ) + 'ScoutingPFMuon', + 'ScoutingPFRun3' ) ) fragment.datasets = cms.PSet( AlCaLumiPixelCountsExpress = cms.vstring( 'AlCa_LumiPixelsCounts_Random_v1' ), @@ -6037,6 +6038,7 @@ 'DST_L1HTT_BTagScouting_v15', 'DST_L1HTT_CaloBTagScouting_v14', 'DST_L1HTT_CaloScouting_PFScouting_v15', + 'DST_Run3_PFScoutingPixelTracking_v16', 'DST_ZeroBias_BTagScouting_v15', 'DST_ZeroBias_CaloScouting_PFScouting_v14', 'HLT_Ele115_CaloIdVT_GsfTrkIdT_v14', @@ -6056,6 +6058,7 @@ ScoutingPFHT = cms.vstring( 'DST_HT410_BTagScouting_v16', 'DST_HT410_PFScouting_v16' ), ScoutingPFMuon = cms.vstring( 'DST_DoubleMu3_noVtx_Mass10_PFScouting_v3' ), + ScoutingPFRun3 = cms.vstring( 'DST_Run3_PFScoutingPixelTracking_v16' ), SingleMuHighPt = cms.vstring( 'HLT_HIL2Mu15ForPPRef_v6', 'HLT_HIL2Mu20ForPPRef_v6', 'HLT_HIL2Mu5_NHitQ10ForPPRef_v6', @@ -8390,7 +8393,7 @@ ts4Thresh = cms.double( 0.0 ), meanTime = cms.double( 0.0 ), nnlsThresh = cms.double( 1.0E-11 ), - nMaxItersMin = cms.int32( 500 ), + nMaxItersMin = cms.int32( 50 ), timeSigmaSiPM = cms.double( 2.5 ), applyTimeSlew = cms.bool( True ), timeSlewParsType = cms.int32( 3 ), @@ -13605,7 +13608,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -13721,6 +13725,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -18988,14 +18993,6 @@ thrOverE2EB1 = cms.vdouble( 0.0 ), thrOverE2EB2 = cms.vdouble( 0.0 ) ) -fragment.hltRegionalTowerForEgamma = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - EMin = cms.double( 0.8 ), - EtMin = cms.double( 0.5 ), - L1IsoCand = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForAll" ) -) fragment.hltEgammaHcalPFClusterIso = cms.EDProducer( "EgammaHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.2, 0.25 ), useHF = cms.bool( False ), @@ -32361,7 +32358,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 20.0, 20.0, 20.0, 20.0, 20.0, 20.0 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -32477,6 +32475,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -32861,10 +32860,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAllCaloForMuons" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -32874,7 +32873,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -32899,15 +32898,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauLooseRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -32953,10 +32953,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -32966,7 +32966,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -32991,15 +32991,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 50.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauLooseAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -33656,10 +33657,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAllCaloForMuons" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -33669,7 +33670,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -33694,15 +33695,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauLooseRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -33748,10 +33750,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -33761,7 +33763,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -33786,15 +33788,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 50.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauLooseAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -33947,10 +33950,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -33960,7 +33963,276 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), + applyRelativeSumPtCut = cms.bool( False ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), WeightECALIsolation = cms.double( 0.33333 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 0.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 0.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) +) +fragment.hltHpsPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 2.0 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( False ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.05 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.5 ), + applyRelativeSumPtCut = cms.bool( True ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), + WeightECALIsolation = cms.double( 1.0 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 1.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 60.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) +) +fragment.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", + Prediscriminants = cms.PSet( + BooleanOperator = cms.string( "or" ), + discr1 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminator" ) + ), + discr2 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauMediumRelativeChargedIsolationDiscriminator" ) + ) + ), + FailValue = cms.double( 0.0 ), + PassValue = cms.double( 1.0 ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ) +) +fragment.hltHpsSelectedPFTausTrackFindingMediumChargedIsolation = cms.EDFilter( "PFTauSelector", + discriminators = cms.VPSet( + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackFindingDiscriminator" ), + selectionCut = cms.double( 0.5 ) + ), + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator" ), + selectionCut = cms.double( 0.5 ) + ) + ), + discriminatorContainers = cms.VPSet( + ), + cut = cms.string( "pt > 0" ), + src = cms.InputTag( "hltHpsPFTauProducer" ) +) +fragment.hltHpsPFTau30TrackMediumChargedIso = cms.EDFilter( "HLT1PFTau", + saveTags = cms.bool( True ), + MinPt = cms.double( 30.0 ), + MinN = cms.int32( 1 ), + MaxEta = cms.double( 2.5 ), + MinEta = cms.double( -1.0 ), + MinMass = cms.double( -1.0 ), + inputTag = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), + MinE = cms.double( -1.0 ), + triggerType = cms.int32( 84 ), + MaxMass = cms.double( -1.0 ) +) +fragment.hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch = cms.EDProducer( "L1THLTTauMatching", + JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), + EtMin = cms.double( 0.0 ), + L1TauTrigger = cms.InputTag( "hltL1sBigORLooseIsoEGXXerIsoTauYYerdRMin0p3" ) +) +fragment.hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched = cms.EDFilter( "HLT1PFTau", + saveTags = cms.bool( True ), + MinPt = cms.double( 30.0 ), + MinN = cms.int32( 1 ), + MaxEta = cms.double( 2.1 ), + MinEta = cms.double( -1.0 ), + MinMass = cms.double( -1.0 ), + inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch" ), + MinE = cms.double( -1.0 ), + triggerType = cms.int32( 84 ), + MaxMass = cms.double( -1.0 ) +) +fragment.hltHpsOverlapFilterIsoEle24WPTightGsfMediumIsoPFTau30 = cms.EDFilter( "HLT2PhotonPFTau", + saveTags = cms.bool( True ), + MinMinv = cms.double( 0.0 ), + originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackFindingMediumChargedIsolation' ), + MinDelR = cms.double( 0.3 ), + MinPt = cms.double( 1.0 ), + MinN = cms.int32( 1 ), + originTag1 = cms.VInputTag( 'hltEgammaCandidates' ), + triggerType1 = cms.int32( 81 ), + triggerType2 = cms.int32( 84 ), + MaxMinv = cms.double( -1.0 ), + MinDeta = cms.double( 0.0 ), + MaxDelR = cms.double( 99999.0 ), + inputTag1 = cms.InputTag( "hltEle24erWPTightGsfTrackIsoFilterForTau" ), + inputTag2 = cms.InputTag( "hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched" ), + MaxDphi = cms.double( -1.0 ), + MaxDeta = cms.double( -1.0 ), + MaxPt = cms.double( -1.0 ), + MinDphi = cms.double( 0.0 ) +) +fragment.hltPreEle24eta2p1WPTightGsfTightChargedIsoPFTauHPS30eta2p1CrossL1 = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +fragment.hltHpsPFTauTightAbsoluteChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 3.2 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( True ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "NotUsed" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.03 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -33985,282 +34257,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) -) -fragment.hltHpsPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 2.0 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), - rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.05 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), - applyRelativeSumPtCut = cms.bool( True ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) -) -fragment.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", - Prediscriminants = cms.PSet( - BooleanOperator = cms.string( "or" ), - discr1 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminator" ) - ), - discr2 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauMediumRelativeChargedIsolationDiscriminator" ) - ) - ), - FailValue = cms.double( 0.0 ), - PassValue = cms.double( 1.0 ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ) -) -fragment.hltHpsSelectedPFTausTrackFindingMediumChargedIsolation = cms.EDFilter( "PFTauSelector", - discriminators = cms.VPSet( - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackFindingDiscriminator" ), - selectionCut = cms.double( 0.5 ) - ), - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator" ), - selectionCut = cms.double( 0.5 ) - ) - ), - discriminatorContainers = cms.VPSet( - ), - cut = cms.string( "pt > 0" ), - src = cms.InputTag( "hltHpsPFTauProducer" ) -) -fragment.hltHpsPFTau30TrackMediumChargedIso = cms.EDFilter( "HLT1PFTau", - saveTags = cms.bool( True ), - MinPt = cms.double( 30.0 ), - MinN = cms.int32( 1 ), - MaxEta = cms.double( 2.5 ), - MinEta = cms.double( -1.0 ), - MinMass = cms.double( -1.0 ), - inputTag = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), - MinE = cms.double( -1.0 ), - triggerType = cms.int32( 84 ), - MaxMass = cms.double( -1.0 ) -) -fragment.hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch = cms.EDProducer( "L1THLTTauMatching", - JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), - EtMin = cms.double( 0.0 ), - L1TauTrigger = cms.InputTag( "hltL1sBigORLooseIsoEGXXerIsoTauYYerdRMin0p3" ) -) -fragment.hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched = cms.EDFilter( "HLT1PFTau", - saveTags = cms.bool( True ), - MinPt = cms.double( 30.0 ), - MinN = cms.int32( 1 ), - MaxEta = cms.double( 2.1 ), - MinEta = cms.double( -1.0 ), - MinMass = cms.double( -1.0 ), - inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch" ), - MinE = cms.double( -1.0 ), - triggerType = cms.int32( 84 ), - MaxMass = cms.double( -1.0 ) -) -fragment.hltHpsOverlapFilterIsoEle24WPTightGsfMediumIsoPFTau30 = cms.EDFilter( "HLT2PhotonPFTau", - saveTags = cms.bool( True ), - MinMinv = cms.double( 0.0 ), - originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackFindingMediumChargedIsolation' ), - MinDelR = cms.double( 0.3 ), - MinPt = cms.double( 1.0 ), - MinN = cms.int32( 1 ), - originTag1 = cms.VInputTag( 'hltEgammaCandidates' ), - triggerType1 = cms.int32( 81 ), - triggerType2 = cms.int32( 84 ), - MaxMinv = cms.double( -1.0 ), - MinDeta = cms.double( 0.0 ), - MaxDelR = cms.double( 99999.0 ), - inputTag1 = cms.InputTag( "hltEle24erWPTightGsfTrackIsoFilterForTau" ), - inputTag2 = cms.InputTag( "hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched" ), - MaxDphi = cms.double( -1.0 ), - MaxDeta = cms.double( -1.0 ), - MaxPt = cms.double( -1.0 ), - MinDphi = cms.double( 0.0 ) -) -fragment.hltPreEle24eta2p1WPTightGsfTightChargedIsoPFTauHPS30eta2p1CrossL1 = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltHpsPFTauTightAbsoluteChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 3.2 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), - rhoProducer = cms.InputTag( "NotUsed" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.03 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), WeightECALIsolation = cms.double( 0.33333 ), - applyRelativeSumPtCut = cms.bool( False ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauTightRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -34306,10 +34312,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -34319,7 +34325,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -34344,15 +34350,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 70.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -34481,10 +34488,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -34494,7 +34501,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( True ), @@ -34519,15 +34526,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsSelectedPFTausTrackFindingLooseChargedIsolationTightOOSCPhotons = cms.EDFilter( "PFTauSelector", discriminators = cms.VPSet( @@ -35461,14 +35469,6 @@ useEt = cms.bool( True ), rhoScale = cms.double( 1.0 ) ) -fragment.hltRegionalTowerForMuonsReg = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( "hltIterL3MuonCandidates" ), - EMin = cms.double( 0.0 ), - EtMin = cms.double( 0.0 ), - L1IsoCand = cms.InputTag( "hltIterL3MuonCandidates" ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForHCAL" ) -) fragment.hltMuonHcalRegPFClusterIsoForMuons = cms.EDProducer( "MuonHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.227, 0.372 ), useHF = cms.bool( False ), @@ -38175,7 +38175,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 20.0, 20.0, 20.0, 20.0, 20.0, 20.0 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -38291,6 +38292,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -38696,10 +38698,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -38709,7 +38711,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 0.33333 ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -38734,15 +38736,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 0.33333 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauMediumRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -38788,10 +38791,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -38801,7 +38804,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -38826,15 +38829,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauMediumAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -38951,10 +38955,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -38964,7 +38968,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( True ), @@ -38989,15 +38993,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauMediumChargedIsolationAndTightOOSCPhotonsDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -39114,10 +39119,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -39127,7 +39132,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 0.33333 ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -39152,15 +39157,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 0.33333 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -39206,10 +39212,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -39219,7 +39225,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -39244,15 +39250,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 70.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -39975,10 +39982,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -39988,7 +39995,264 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), + applyRelativeSumPtCut = cms.bool( False ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), WeightECALIsolation = cms.double( 0.33333 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 0.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 0.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) +) +fragment.hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 2.0 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( False ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.04 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.5 ), + applyRelativeSumPtCut = cms.bool( True ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), + WeightECALIsolation = cms.double( 1.0 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 1.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 70.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) +) +fragment.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", + Prediscriminants = cms.PSet( + BooleanOperator = cms.string( "or" ), + discr1 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauTightAbsoluteChargedIsolationDiscriminatorReg" ) + ), + discr2 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg" ) + ) + ), + FailValue = cms.double( 0.0 ), + PassValue = cms.double( 1.0 ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ) +) +fragment.hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg = cms.EDFilter( "PFTauSelector", + discriminators = cms.VPSet( + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackPt1DiscriminatorReg" ), + selectionCut = cms.double( 0.5 ) + ), + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg" ), + selectionCut = cms.double( 0.5 ) + ) + ), + discriminatorContainers = cms.VPSet( + ), + cut = cms.string( "pt > 0" ), + src = cms.InputTag( "hltHpsPFTauProducerReg" ) +) +fragment.hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg = cms.EDProducer( "L1THLTTauMatching", + JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg" ), + EtMin = cms.double( 0.0 ), + L1TauTrigger = cms.InputTag( "hltL1sBigOrMuXXerIsoTauYYer" ) +) +fragment.hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg = cms.EDFilter( "HLT1PFTau", + saveTags = cms.bool( True ), + MinPt = cms.double( 35.0 ), + MinN = cms.int32( 1 ), + MaxEta = cms.double( 2.1 ), + MinEta = cms.double( -1.0 ), + MinMass = cms.double( -1.0 ), + inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg" ), + MinE = cms.double( -1.0 ), + triggerType = cms.int32( 84 ), + MaxMass = cms.double( -1.0 ) +) +fragment.hltHpsOverlapFilterIsoMu24TightChargedIsoPFTau35MonitoringReg = cms.EDFilter( "HLT2MuonPFTau", + saveTags = cms.bool( True ), + MinMinv = cms.double( 0.0 ), + originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg' ), + MinDelR = cms.double( 0.3 ), + MinPt = cms.double( 1.0 ), + MinN = cms.int32( 1 ), + originTag1 = cms.VInputTag( 'hltIterL3MuonCandidates' ), + triggerType1 = cms.int32( 83 ), + triggerType2 = cms.int32( 84 ), + MaxMinv = cms.double( -1.0 ), + MinDeta = cms.double( 1.0 ), + MaxDelR = cms.double( 99999.0 ), + inputTag1 = cms.InputTag( "hltL3crIsoL1sBigOrMuXXerIsoTauYYerL1f0L2f10QL3f24QL3trkIsoFiltered0p07" ), + inputTag2 = cms.InputTag( "hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg" ), + MaxDphi = cms.double( -1.0 ), + MaxDeta = cms.double( -1.0 ), + MaxPt = cms.double( -1.0 ), + MinDphi = cms.double( 0.0 ) +) +fragment.hltPreIsoMu24eta2p1MediumChargedIsoPFTauHPS35Trk1TightIDeta2p1RegCrossL1 = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +fragment.hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 3.7 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( True ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "NotUsed" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.03 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -40013,270 +40277,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) -) -fragment.hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 2.0 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), - rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.04 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), - applyRelativeSumPtCut = cms.bool( True ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 70.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) -) -fragment.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", - Prediscriminants = cms.PSet( - BooleanOperator = cms.string( "or" ), - discr1 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauTightAbsoluteChargedIsolationDiscriminatorReg" ) - ), - discr2 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg" ) - ) - ), - FailValue = cms.double( 0.0 ), - PassValue = cms.double( 1.0 ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ) -) -fragment.hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg = cms.EDFilter( "PFTauSelector", - discriminators = cms.VPSet( - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackPt1DiscriminatorReg" ), - selectionCut = cms.double( 0.5 ) - ), - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg" ), - selectionCut = cms.double( 0.5 ) - ) - ), - discriminatorContainers = cms.VPSet( - ), - cut = cms.string( "pt > 0" ), - src = cms.InputTag( "hltHpsPFTauProducerReg" ) -) -fragment.hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg = cms.EDProducer( "L1THLTTauMatching", - JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg" ), - EtMin = cms.double( 0.0 ), - L1TauTrigger = cms.InputTag( "hltL1sBigOrMuXXerIsoTauYYer" ) -) -fragment.hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg = cms.EDFilter( "HLT1PFTau", - saveTags = cms.bool( True ), - MinPt = cms.double( 35.0 ), - MinN = cms.int32( 1 ), - MaxEta = cms.double( 2.1 ), - MinEta = cms.double( -1.0 ), - MinMass = cms.double( -1.0 ), - inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg" ), - MinE = cms.double( -1.0 ), - triggerType = cms.int32( 84 ), - MaxMass = cms.double( -1.0 ) -) -fragment.hltHpsOverlapFilterIsoMu24TightChargedIsoPFTau35MonitoringReg = cms.EDFilter( "HLT2MuonPFTau", - saveTags = cms.bool( True ), - MinMinv = cms.double( 0.0 ), - originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg' ), - MinDelR = cms.double( 0.3 ), - MinPt = cms.double( 1.0 ), - MinN = cms.int32( 1 ), - originTag1 = cms.VInputTag( 'hltIterL3MuonCandidates' ), - triggerType1 = cms.int32( 83 ), - triggerType2 = cms.int32( 84 ), - MaxMinv = cms.double( -1.0 ), - MinDeta = cms.double( 1.0 ), - MaxDelR = cms.double( 99999.0 ), - inputTag1 = cms.InputTag( "hltL3crIsoL1sBigOrMuXXerIsoTauYYerL1f0L2f10QL3f24QL3trkIsoFiltered0p07" ), - inputTag2 = cms.InputTag( "hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg" ), - MaxDphi = cms.double( -1.0 ), - MaxDeta = cms.double( -1.0 ), - MaxPt = cms.double( -1.0 ), - MinDphi = cms.double( 0.0 ) -) -fragment.hltPreIsoMu24eta2p1MediumChargedIsoPFTauHPS35Trk1TightIDeta2p1RegCrossL1 = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 3.7 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), - rhoProducer = cms.InputTag( "NotUsed" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.03 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), WeightECALIsolation = cms.double( 0.33333 ), - applyRelativeSumPtCut = cms.bool( False ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauMediumRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -40322,10 +40332,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -40335,7 +40345,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -40360,15 +40370,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -40430,10 +40441,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -40443,7 +40454,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( True ), @@ -40468,15 +40479,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauMediumChargedIsolationAndTightOOSCPhotonsDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -61999,10 +62011,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAllCaloForMuons" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -62012,7 +62024,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -62037,15 +62049,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -62091,10 +62104,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -62104,7 +62117,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -62129,15 +62142,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -78881,7 +78895,7 @@ l1LowerThrIgnoreIsolation = cms.double( 100.0 ), productLabels = cms.vstring( 'EcalRegionalRecHitsEB', 'EcalRegionalRecHitsEE' ), - l1TagIsolated = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ) + l1TagIsolated = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) ) fragment.hltRecHitInRegionForMuonsESNoVtx = cms.EDProducer( "MuonHLTRechitInRegionsProducer", l1LowerThr = cms.double( 0.0 ), @@ -79155,14 +79169,6 @@ rhoScale = cms.double( 1.0 ), recoCandidateProducer = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ) ) -fragment.hltRegionalTowerForMuonsNoVtx = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - EMin = cms.double( 0.0 ), - EtMin = cms.double( 0.0 ), - L1IsoCand = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForAll" ) -) fragment.hltMuonHcalPFClusterIsoForMuonsNoVtx = cms.EDProducer( "MuonHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.11, 0.163 ), useHF = cms.bool( False ), @@ -79668,26 +79674,3584 @@ ), ignoreVertices = cms.bool( False ) ) -fragment.hltIter1L3MuonTrackCutClassifierMergedNoVtx = cms.EDProducer( "ClassifierMerger", - inputClassifiers = cms.vstring( 'hltIter1L3MuonTrackCutClassifierPromptNoVtx', - 'hltIter1L3MuonTrackCutClassifierDetachedNoVtx' ) +fragment.hltIter1L3MuonTrackCutClassifierMergedNoVtx = cms.EDProducer( "ClassifierMerger", + inputClassifiers = cms.vstring( 'hltIter1L3MuonTrackCutClassifierPromptNoVtx', + 'hltIter1L3MuonTrackCutClassifierDetachedNoVtx' ) +) +fragment.hltIter1L3MuonTrackSelectionHighPurityNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedNoVtx','MVAValues' ) +) +fragment.hltIter1L3MuonMergedNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityNoVtx','hltIter1L3MuonTrackSelectionHighPurityNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityNoVtx','hltIter1L3MuonTrackSelectionHighPurityNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +fragment.hltIter2L3MuonClustersRefRemovalNoVtx = cms.EDProducer( "TrackClusterRemover", + trackClassifier = cms.InputTag( '','QualityMasks' ), + minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), + maxChi2 = cms.double( 16.0 ), + trajectories = cms.InputTag( "hltIter1L3MuonTrackSelectionHighPurityNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "hltIter1L3MuonClustersRefRemovalNoVtx" ), + stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), + overrideTrkQuals = cms.InputTag( "" ), + pixelClusters = cms.InputTag( "hltSiPixelClusters" ), + TrackQuality = cms.string( "highPurity" ) +) +fragment.hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), + OnDemand = cms.bool( False ), + src = cms.InputTag( "hltSiStripClusters" ) +) +fragment.hltIter2L3MuonPixelLayerTripletsNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3', + 'BPix2+BPix3+BPix4', + 'BPix1+BPix3+BPix4', + 'BPix1+BPix2+BPix4', + 'BPix2+BPix3+FPix1_pos', + 'BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos', + 'BPix1+BPix2+FPix1_neg', + 'BPix2+FPix1_pos+FPix2_pos', + 'BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos', + 'BPix1+FPix1_neg+FPix2_neg', + 'FPix1_pos+FPix2_pos+FPix3_pos', + 'FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +fragment.hltIter2L3MuonPixelTrackingRegionsNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", + RegionPSet = cms.PSet( + vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + zErrorVetex = cms.double( 0.05 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + zErrorBeamSpot = cms.double( 24.2 ), + maxNVertices = cms.int32( 1 ), + maxNRegions = cms.int32( 10 ), + nSigmaZVertex = cms.double( 3.0 ), + nSigmaZBeamSpot = cms.double( 4.0 ), + ptMin = cms.double( 0.8 ), + mode = cms.string( "VerticesFixed" ), + input = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + searchOpt = cms.bool( False ), + whereToUseMeasurementTracker = cms.string( "ForSiStrips" ), + originRadius = cms.double( 0.025 ), + measurementTrackerName = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + precise = cms.bool( True ), + deltaEta = cms.double( 0.3 ), + deltaPhi = cms.double( 0.3 ) + ) +) +fragment.hltIter2L3MuonPixelHitDoubletsNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIter2L3MuonPixelTrackingRegionsNoVtx" ), + layerPairs = cms.vuint32( 0, 1 ), + clusterCheck = cms.InputTag( "hltIter2L3MuonPixelClusterCheck" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIter2L3MuonPixelLayerTripletsNoVtx" ) +) +fragment.hltIter2L3MuonPixelHitTripletsNoVtx = cms.EDProducer( "CAHitTripletEDProducer", + CAThetaCut = cms.double( 0.004 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + maxChi2 = cms.PSet( + value2 = cms.double( 6.0 ), + value1 = cms.double( 100.0 ), + pt1 = cms.double( 0.8 ), + enabled = cms.bool( True ), + pt2 = cms.double( 8.0 ) + ), + doublets = cms.InputTag( "hltIter2L3MuonPixelHitDoubletsNoVtx" ), + CAHardPtCut = cms.double( 0.3 ), + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.1 ), + useBendingCorrection = cms.bool( True ), + extraHitRPhitolerance = cms.double( 0.032 ) +) +fragment.hltIter2L3MuonPixelSeedsNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsEDProducer", + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + forceKinematicWithRegionDirection = cms.bool( False ), + magneticField = cms.string( "ParabolicMf" ), + SeedMomentumForBOFF = cms.double( 5.0 ), + OriginTransverseErrorMultiplier = cms.double( 1.0 ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MinOneOverPtError = cms.double( 1.0 ), + seedingHitSets = cms.InputTag( "hltIter2L3MuonPixelHitTripletsNoVtx" ), + propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) +) +fragment.hltIter2L3MuonCkfTrackCandidatesNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter2L3MuonPixelSeedsNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter2GroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "" ) +) +fragment.hltIter2L3MuonCtfWithMaterialTracksNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter2L3MuonCkfTrackCandidatesNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIterX" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +fragment.hltIter2L3MuonTrackCutClassifierNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 0 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 15.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 0.003 ), + dr_par2 = cms.vdouble( 3.40282346639E38, 0.3, 0.3 ), + dr_par1 = cms.vdouble( 3.40282346639E38, 0.4, 0.4 ), + dr_exp = cms.vint32( 4, 4, 4 ), + d0err_par = cms.vdouble( 0.001, 0.001, 0.001 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 3.40282346639E38, 0.4, 0.4 ), + dz_par2 = cms.vdouble( 3.40282346639E38, 0.35, 0.35 ), + dz_exp = cms.vint32( 4, 4, 4 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 16.0 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 3 ) + ), + ignoreVertices = cms.bool( False ) +) +fragment.hltIter2L3MuonTrackSelectionHighPurityNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierNoVtx','MVAValues' ) +) +fragment.hltIter2L3MuonMergedNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIter1L3MuonMergedNoVtx','hltIter2L3MuonTrackSelectionHighPurityNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIter1L3MuonMergedNoVtx','hltIter2L3MuonTrackSelectionHighPurityNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +fragment.hltMuonTkRelIsolationCut0p09MapNoVtx = cms.EDProducer( "L3MuonCombinedRelativeIsolationProducer", + printDebug = cms.bool( False ), + CutsPSet = cms.PSet( + applyCutsORmaxNTracks = cms.bool( False ), + maxNTracks = cms.int32( -1 ), + Thresholds = cms.vdouble( 0.09 ), + EtaBounds = cms.vdouble( 2.411 ), + ComponentName = cms.string( "SimpleCuts" ), + ConeSizes = cms.vdouble( 0.3 ) + ), + TrkExtractorPSet = cms.PSet( + Diff_z = cms.double( 0.2 ), + inputTrackCollection = cms.InputTag( "hltIter2L3MuonMergedNoVtx" ), + Chi2Ndof_Max = cms.double( 1.0E64 ), + BeamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), + DR_Veto = cms.double( 0.01 ), + Pt_Min = cms.double( -1.0 ), + VetoLeadingTrack = cms.bool( True ), + DR_Max = cms.double( 0.3 ), + DepositLabel = cms.untracked.string( "PXLS" ), + PtVeto_Min = cms.double( 2.0 ), + NHits_Min = cms.uint32( 0 ), + PropagateTracksToRadius = cms.bool( True ), + ReferenceRadius = cms.double( 6.0 ), + Chi2Prob_Min = cms.double( -1.0 ), + Diff_r = cms.double( 0.1 ), + BeamlineOption = cms.string( "BeamSpotFromEvent" ), + ComponentName = cms.string( "PixelTrackExtractor" ), + DR_VetoPt = cms.double( 0.025 ) + ), + OutputMuIsoDeposits = cms.bool( True ), + TrackPt_Min = cms.double( -1.0 ), + CaloDepositsLabel = cms.InputTag( "notUsed" ), + CaloExtractorPSet = cms.PSet( + DR_Veto_H = cms.double( 0.1 ), + Vertex_Constraint_Z = cms.bool( False ), + DR_Veto_E = cms.double( 0.07 ), + Weight_H = cms.double( 1.0 ), + CaloTowerCollectionLabel = cms.InputTag( "hltTowerMakerForAll" ), + DR_Max = cms.double( 0.3 ), + DepositLabel = cms.untracked.string( "EcalPlusHcal" ), + Vertex_Constraint_XY = cms.bool( False ), + Threshold_H = cms.double( 0.5 ), + Threshold_E = cms.double( 0.2 ), + ComponentName = cms.string( "CaloExtractor" ), + Weight_E = cms.double( 1.0 ) + ), + inputMuonCollection = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + UseRhoCorrectedCaloDeposits = cms.bool( False ), + UseCaloIso = cms.bool( False ) +) +fragment.hltPreDSTDoubleMu3noVtxCaloScouting = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +fragment.hltDimuon3L1Filtered0 = cms.EDFilter( "HLTMuonL1TFilter", + saveTags = cms.bool( True ), + PreviousCandTag = cms.InputTag( "hltL1sDoubleMuIorTripleMuIorQuadMu" ), + MinPt = cms.double( 0.0 ), + MinN = cms.int32( 2 ), + MaxEta = cms.double( 2.5 ), + CentralBxOnly = cms.bool( True ), + SelectQualities = cms.vint32( ), + CandTag = cms.InputTag( 'hltGtStage2Digis','Muon' ) +) +fragment.hltDimuon3L2PreFiltered0 = cms.EDFilter( "HLTMuonL2FromL1TPreFilter", + saveTags = cms.bool( True ), + MaxDr = cms.double( 9999.0 ), + CutOnChambers = cms.bool( False ), + PreviousCandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), + MinPt = cms.double( 0.0 ), + MinN = cms.int32( 0 ), + SeedMapTag = cms.InputTag( "hltL2Muons" ), + MaxEta = cms.double( 2.5 ), + MinNhits = cms.vint32( 0 ), + MinDxySig = cms.double( -1.0 ), + MinDr = cms.double( -1.0 ), + AbsEtaBins = cms.vdouble( 0.0 ), + MaxDz = cms.double( 9999.0 ), + MatchToPreviousCand = cms.bool( True ), + CandTag = cms.InputTag( "hltL2MuonCandidatesNoVtx" ), + BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), + MinNchambers = cms.vint32( 0 ), + NSigmaPt = cms.double( 0.0 ), + MinNstations = cms.vint32( 0 ) +) +fragment.hltDoubleMu3L3FilteredNoVtx = cms.EDFilter( "HLTMuonDimuonL3Filter", + saveTags = cms.bool( True ), + ChargeOpt = cms.int32( 0 ), + MaxPtMin = cms.vdouble( 1.0E125 ), + FastAccept = cms.bool( False ), + MatchToPreviousCand = cms.bool( True ), + MaxDr = cms.double( 9999.0 ), + L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), + inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), + InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), + PreviousCandIsL2 = cms.bool( True ), + PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), + MaxPtBalance = cms.double( 999999.0 ), + MaxPtPair = cms.vdouble( 1.0E125 ), + MaxAcop = cms.double( 999.0 ), + MinPtMin = cms.vdouble( 3.0 ), + MaxInvMass = cms.vdouble( 9999.0 ), + MinPtMax = cms.vdouble( 0.0 ), + BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), + MinN = cms.int32( 1 ), + MaxDz = cms.double( 9999.0 ), + MinPtPair = cms.vdouble( 0.0 ), + CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + MinAcop = cms.double( -999.0 ), + MaxDCAMuMu = cms.double( 999999.0 ), + MinNhits = cms.int32( 0 ), + NSigmaPt = cms.double( 0.0 ), + MinPtBalance = cms.double( -1.0 ), + MaxEta = cms.double( 2.5 ), + L1MatchingdR = cms.double( 0.3 ), + MaxRapidityPair = cms.double( 999999.0 ), + CutCowboys = cms.bool( False ), + MinInvMass = cms.vdouble( 0.0 ) +) +fragment.hltDisplacedmumuVtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", + Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtx" ), + MinPt = cms.double( 0.0 ), + ChargeOpt = cms.int32( 0 ), + MaxEta = cms.double( 2.5 ), + MaxInvMass = cms.double( 99999.0 ), + MinPtPair = cms.double( 0.0 ), + matchToPrevious = cms.bool( True ), + MinInvMass = cms.double( 0.0 ) +) +fragment.hltPreDSTDoubleMu1noVtxCaloScouting = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +fragment.hltDoubleMu1L3FilteredNoVtx = cms.EDFilter( "HLTMuonDimuonL3Filter", + saveTags = cms.bool( True ), + ChargeOpt = cms.int32( 0 ), + MaxPtMin = cms.vdouble( 1.0E125 ), + FastAccept = cms.bool( False ), + MatchToPreviousCand = cms.bool( True ), + MaxDr = cms.double( 9999.0 ), + L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), + inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), + InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), + PreviousCandIsL2 = cms.bool( True ), + PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), + MaxPtBalance = cms.double( 999999.0 ), + MaxPtPair = cms.vdouble( 1.0E125 ), + MaxAcop = cms.double( 999.0 ), + MinPtMin = cms.vdouble( 1.0 ), + MaxInvMass = cms.vdouble( 9999.0 ), + MinPtMax = cms.vdouble( 0.0 ), + BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), + MinN = cms.int32( 1 ), + MaxDz = cms.double( 9999.0 ), + MinPtPair = cms.vdouble( 0.0 ), + CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + MinAcop = cms.double( -999.0 ), + MaxDCAMuMu = cms.double( 999999.0 ), + MinNhits = cms.int32( 0 ), + NSigmaPt = cms.double( 0.0 ), + MinPtBalance = cms.double( -1.0 ), + MaxEta = cms.double( 2.5 ), + L1MatchingdR = cms.double( 0.3 ), + MaxRapidityPair = cms.double( 999999.0 ), + CutCowboys = cms.bool( False ), + MinInvMass = cms.vdouble( 0.0 ) +) +fragment.hltDisplacedmumu1VtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", + Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + PreviousCandTag = cms.InputTag( "hltDoubleMu1L3FilteredNoVtx" ), + MinPt = cms.double( 0.0 ), + ChargeOpt = cms.int32( 0 ), + MaxEta = cms.double( 2.5 ), + MaxInvMass = cms.double( 99999.0 ), + MinPtPair = cms.double( 0.0 ), + matchToPrevious = cms.bool( True ), + MinInvMass = cms.double( 0.0 ) +) +fragment.hltPreDSTDoubleMu3noVtxMass10PFScouting = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +fragment.hltDoubleMu3L3FilteredNoVtxMass10 = cms.EDFilter( "HLTMuonDimuonL3Filter", + saveTags = cms.bool( True ), + ChargeOpt = cms.int32( 0 ), + MaxPtMin = cms.vdouble( 1.0E125 ), + FastAccept = cms.bool( False ), + MatchToPreviousCand = cms.bool( True ), + MaxDr = cms.double( 9999.0 ), + L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), + inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), + InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), + PreviousCandIsL2 = cms.bool( True ), + PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), + MaxPtBalance = cms.double( 999999.0 ), + MaxPtPair = cms.vdouble( 1.0E125 ), + MaxAcop = cms.double( 999.0 ), + MinPtMin = cms.vdouble( 3.0 ), + MaxInvMass = cms.vdouble( 9999.0 ), + MinPtMax = cms.vdouble( 0.0 ), + BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), + MinN = cms.int32( 1 ), + MaxDz = cms.double( 9999.0 ), + MinPtPair = cms.vdouble( 0.0 ), + CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + MinAcop = cms.double( -999.0 ), + MaxDCAMuMu = cms.double( 999999.0 ), + MinNhits = cms.int32( 0 ), + NSigmaPt = cms.double( 0.0 ), + MinPtBalance = cms.double( -1.0 ), + MaxEta = cms.double( 2.5 ), + L1MatchingdR = cms.double( 0.3 ), + MaxRapidityPair = cms.double( 999999.0 ), + CutCowboys = cms.bool( False ), + MinInvMass = cms.vdouble( 10.0 ) +) +fragment.hltDisplacedmumuMass10VtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", + Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtxMass10" ), + MinPt = cms.double( 0.0 ), + ChargeOpt = cms.int32( 0 ), + MaxEta = cms.double( 2.5 ), + MaxInvMass = cms.double( 99999.0 ), + MinPtPair = cms.double( 0.0 ), + matchToPrevious = cms.bool( True ), + MinInvMass = cms.double( 0.0 ) +) +fragment.hltL1sDSTRun3PFScoutingPixelTracking = cms.EDFilter( "HLTL1TSeed", + L1SeedsLogicalExpression = cms.string( "L1GlobalDecision" ), + L1EGammaInputTag = cms.InputTag( 'hltGtStage2Digis','EGamma' ), + L1JetInputTag = cms.InputTag( 'hltGtStage2Digis','Jet' ), + saveTags = cms.bool( True ), + L1ObjectMapInputTag = cms.InputTag( "hltGtStage2ObjectMap" ), + L1EtSumInputTag = cms.InputTag( 'hltGtStage2Digis','EtSum' ), + L1TauInputTag = cms.InputTag( 'hltGtStage2Digis','Tau' ), + L1MuonInputTag = cms.InputTag( 'hltGtStage2Digis','Muon' ), + L1GlobalInputTag = cms.InputTag( "hltGtStage2Digis" ) +) +fragment.hltPreDSTRun3PFScoutingPixelTracking = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +fragment.hltPixelTracksZetaClean = cms.EDProducer( "TrackWithVertexSelector", + normalizedChi2 = cms.double( 999999.0 ), + numberOfValidHits = cms.uint32( 0 ), + zetaVtx = cms.double( 0.3 ), + etaMin = cms.double( 0.0 ), + rhoVtx = cms.double( 0.2 ), + ptErrorCut = cms.double( 5.0 ), + dzMax = cms.double( 999.0 ), + etaMax = cms.double( 5.0 ), + quality = cms.string( "any" ), + copyTrajectories = cms.untracked.bool( False ), + nSigmaDtVertex = cms.double( 0.0 ), + timesTag = cms.InputTag( "" ), + ptMin = cms.double( 0.3 ), + ptMax = cms.double( 500.0 ), + d0Max = cms.double( 999.0 ), + copyExtras = cms.untracked.bool( False ), + nVertices = cms.uint32( 2 ), + vertexTag = cms.InputTag( "hltPixelVertices" ), + src = cms.InputTag( "hltPixelTracks" ), + vtxFallback = cms.bool( True ), + numberOfLostHits = cms.uint32( 999 ), + numberOfValidPixelHits = cms.uint32( 3 ), + timeResosTag = cms.InputTag( "" ), + useVtx = cms.bool( True ) +) +fragment.hltPixelOnlyPFMuonMerging = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIterL3MuonTracks','hltPixelTracksZetaClean' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIterL3MuonTracks','hltPixelTracksZetaClean' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +fragment.hltPixelOnlyMuonLinks = cms.EDProducer( "MuonLinksProducerForHLT", + pMin = cms.double( 2.5 ), + InclusiveTrackerTrackCollection = cms.InputTag( "hltPixelOnlyPFMuonMerging" ), + shareHitFraction = cms.double( 0.8 ), + LinkCollection = cms.InputTag( "hltL3MuonsIterL3Links" ), + ptMin = cms.double( 2.5 ) +) +fragment.hltPixelOnlyMuons = cms.EDProducer( "MuonIdProducer", + TrackExtractorPSet = cms.PSet( + Diff_z = cms.double( 0.2 ), + inputTrackCollection = cms.InputTag( "hltPixelOnlyPFMuonMerging" ), + Chi2Ndof_Max = cms.double( 1.0E64 ), + BeamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), + DR_Veto = cms.double( 0.01 ), + Pt_Min = cms.double( -1.0 ), + DR_Max = cms.double( 1.0 ), + DepositLabel = cms.untracked.string( "" ), + NHits_Min = cms.uint32( 0 ), + Chi2Prob_Min = cms.double( -1.0 ), + Diff_r = cms.double( 0.1 ), + BeamlineOption = cms.string( "BeamSpotFromEvent" ), + ComponentName = cms.string( "TrackExtractor" ) + ), + maxAbsEta = cms.double( 3.0 ), + fillGlobalTrackRefits = cms.bool( False ), + arbitrationCleanerOptions = cms.PSet( + OverlapDTheta = cms.double( 0.02 ), + Overlap = cms.bool( True ), + Clustering = cms.bool( True ), + ME1a = cms.bool( True ), + ClusterDTheta = cms.double( 0.02 ), + ClusterDPhi = cms.double( 0.6 ), + OverlapDPhi = cms.double( 0.0786 ) + ), + globalTrackQualityInputTag = cms.InputTag( "glbTrackQual" ), + fillShowerDigis = cms.bool( False ), + addExtraSoftMuons = cms.bool( False ), + debugWithTruthMatching = cms.bool( False ), + CaloExtractorPSet = cms.PSet( + DR_Veto_H = cms.double( 0.1 ), + CenterConeOnCalIntersection = cms.bool( False ), + NoiseTow_EE = cms.double( 0.15 ), + Noise_EB = cms.double( 0.025 ), + Noise_HE = cms.double( 0.2 ), + DR_Veto_E = cms.double( 0.07 ), + NoiseTow_EB = cms.double( 0.04 ), + Noise_EE = cms.double( 0.1 ), + UseRecHitsFlag = cms.bool( False ), + DR_Max = cms.double( 1.0 ), + DepositLabel = cms.untracked.string( "Cal" ), + Noise_HO = cms.double( 0.2 ), + DR_Veto_HO = cms.double( 0.1 ), + Threshold_H = cms.double( 0.5 ), + PrintTimeReport = cms.untracked.bool( False ), + Threshold_E = cms.double( 0.2 ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "CaloExtractorByAssociator" ), + Threshold_HO = cms.double( 0.5 ), + DepositInstanceLabels = cms.vstring( 'ecal', + 'hcal', + 'ho' ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 1.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + CaloTowerCollectionLabel = cms.InputTag( "hltTowerMakerForAll" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "hltHbhereco" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 1.0 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + dRHcal = cms.double( 1.0 ), + dRHcalPreselection = cms.double( 1.0 ), + HORecHitCollectionLabel = cms.InputTag( "hltHoreco" ) + ), + Noise_HB = cms.double( 0.2 ) + ), + runArbitrationCleaner = cms.bool( False ), + fillEnergy = cms.bool( True ), + TrackerKinkFinderParameters = cms.PSet( + usePosition = cms.bool( False ), + diagonalOnly = cms.bool( False ) + ), + TimingFillerParameters = cms.PSet( + DTTimingParameters = cms.PSet( + HitError = cms.double( 6.0 ), + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) + ), + debug = cms.bool( False ), + DoWireCorr = cms.bool( False ), + RequireBothProjections = cms.bool( False ), + DTTimeOffset = cms.double( 2.7 ), + PruneCut = cms.double( 10000.0 ), + DTsegments = cms.InputTag( "hltDt4DSegments" ), + UseSegmentT0 = cms.bool( False ), + HitsMin = cms.int32( 5 ), + DropTheta = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ) + ), + UseCSC = cms.bool( True ), + CSCTimingParameters = cms.PSet( + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) + ), + debug = cms.bool( False ), + CSCWireTimeOffset = cms.double( 0.0 ), + CSCStripError = cms.double( 7.0 ), + CSCTimeOffset = cms.double( 0.0 ), + CSCWireError = cms.double( 8.6 ), + PruneCut = cms.double( 100.0 ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + UseStripTime = cms.bool( True ), + CSCStripTimeOffset = cms.double( 0.0 ), + UseWireTime = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ) + ), + ErrorDT = cms.double( 6.0 ), + EcalEnergyCut = cms.double( 0.4 ), + UseECAL = cms.bool( True ), + ErrorEB = cms.double( 2.085 ), + UseDT = cms.bool( True ), + ErrorEE = cms.double( 6.95 ), + ErrorCSC = cms.double( 7.4 ) + ), + inputCollectionTypes = cms.vstring( 'inner tracks', + 'links', + 'outer tracks' ), + arbitrateTrackerMuons = cms.bool( False ), + minCaloCompatibility = cms.double( 0.6 ), + ecalDepositName = cms.string( "ecal" ), + minP = cms.double( 10.0 ), + fillIsolation = cms.bool( True ), + jetDepositName = cms.string( "jets" ), + hoDepositName = cms.string( "ho" ), + writeIsoDeposits = cms.bool( False ), + maxAbsPullX = cms.double( 4.0 ), + maxAbsPullY = cms.double( 9999.0 ), + minPt = cms.double( 10.0 ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( True ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( True ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 9999.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + CaloTowerCollectionLabel = cms.InputTag( "hltTowerMakerForAll" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( True ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( True ), + HBHERecHitCollectionLabel = cms.InputTag( "hltHbhereco" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.05 ), + useCalo = cms.bool( False ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + dRHcal = cms.double( 9999.0 ), + dRHcalPreselection = cms.double( 0.2 ), + HORecHitCollectionLabel = cms.InputTag( "hltHoreco" ) + ), + storeCrossedHcalRecHits = cms.bool( False ), + JetExtractorPSet = cms.PSet( + JetCollectionLabel = cms.InputTag( "hltAK4CaloJetsPFEt5" ), + DR_Veto = cms.double( 0.1 ), + DR_Max = cms.double( 1.0 ), + ExcludeMuonVeto = cms.bool( True ), + PrintTimeReport = cms.untracked.bool( False ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "JetExtractor" ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 0.5 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + CaloTowerCollectionLabel = cms.InputTag( "hltTowerMakerForAll" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "hltHbhereco" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.5 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + dRHcal = cms.double( 0.5 ), + dRHcalPreselection = cms.double( 0.5 ), + HORecHitCollectionLabel = cms.InputTag( "hltHoreco" ) + ), + Threshold = cms.double( 5.0 ) + ), + fillGlobalTrackQuality = cms.bool( False ), + minPCaloMuon = cms.double( 1.0E9 ), + maxAbsDy = cms.double( 9999.0 ), + fillCaloCompatibility = cms.bool( True ), + fillMatching = cms.bool( True ), + MuonCaloCompatibility = cms.PSet( + delta_eta = cms.double( 0.02 ), + delta_phi = cms.double( 0.02 ), + allSiPMHO = cms.bool( False ), + MuonTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_muons_lowPt_3_1_norm.root" ), + PionTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_pions_lowPt_3_1_norm.root" ) + ), + fillTrackerKink = cms.bool( False ), + ShowerDigiFillerParameters = cms.PSet( + cscDigiCollectionLabel = cms.InputTag( 'muonCSCDigis','MuonCSCStripDigi' ), + dtDigiCollectionLabel = cms.InputTag( "muonDTDigis" ), + digiMaxDistanceX = cms.double( 25.0 ) + ), + hcalDepositName = cms.string( "hcal" ), + sigmaThresholdToFillCandidateP4WithGlobalFit = cms.double( 2.0 ), + inputCollectionLabels = cms.VInputTag( 'hltPixelOnlyPFMuonMerging','hltPixelOnlyMuonLinks','hltL2Muons' ), + trackDepositName = cms.string( "tracker" ), + maxAbsDx = cms.double( 3.0 ), + ptThresholdToFillCandidateP4WithGlobalFit = cms.double( 200.0 ), + minNumberOfMatches = cms.int32( 1 ) +) +fragment.hltLightPixelOnlyPFTracks = cms.EDProducer( "LightPFTrackProducer", + TrackQuality = cms.string( "none" ), + UseQuality = cms.bool( False ), + TkColList = cms.VInputTag( 'hltPixelOnlyPFMuonMerging' ) +) +fragment.hltPixelOnlyParticleFlowBlock = cms.EDProducer( "PFBlockProducer", + debug = cms.untracked.bool( False ), + linkDefinitions = cms.VPSet( + cms.PSet( linkType = cms.string( "TRACK:ECAL" ), + useKDTree = cms.bool( True ), + linkerName = cms.string( "TrackAndECALLinker" ) + ), + cms.PSet( linkType = cms.string( "TRACK:HCAL" ), + useKDTree = cms.bool( True ), + linkerName = cms.string( "TrackAndHCALLinker" ), + trajectoryLayerEntrance = cms.string( "HCALEntrance" ), + trajectoryLayerExit = cms.string( "HCALExit" ), + nMaxHcalLinksPerTrack = cms.int32( 1 ) + ), + cms.PSet( linkType = cms.string( "ECAL:HCAL" ), + useKDTree = cms.bool( False ), + linkerName = cms.string( "ECALAndHCALLinker" ), + minAbsEtaEcal = cms.double( 2.5 ) + ), + cms.PSet( linkType = cms.string( "HFEM:HFHAD" ), + useKDTree = cms.bool( False ), + linkerName = cms.string( "HFEMAndHFHADLinker" ) + ) + ), + elementImporters = cms.VPSet( + cms.PSet( muonSrc = cms.InputTag( "hltPixelOnlyMuons" ), + source = cms.InputTag( "hltLightPixelOnlyPFTracks" ), + NHitCuts_byTrackAlgo = cms.vuint32( 3, 3, 3, 3, 3, 3 ), + useIterativeTracking = cms.bool( False ), + importerName = cms.string( "GeneralTracksImporter" ), + DPtOverPtCuts_byTrackAlgo = cms.vdouble( 5.0, 5.0, 5.0, 5.0, 5.0, 5.0 ), + muonMaxDPtOPt = cms.double( 1.0 ), + trackQuality = cms.string( "any" ), + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) + ), + cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), + importerName = cms.string( "ECALClusterImporter" ), + BCtoPFCMap = cms.InputTag( "" ) + ), + cms.PSet( source = cms.InputTag( "hltParticleFlowClusterHCAL" ), + importerName = cms.string( "GenericClusterImporter" ) + ), + cms.PSet( source = cms.InputTag( "hltParticleFlowClusterHF" ), + importerName = cms.string( "GenericClusterImporter" ) + ) + ), + verbose = cms.untracked.bool( False ) +) +fragment.hltPixelOnlyParticleFlow = cms.EDProducer( "PFProducer", + goodPixelTrackDeadHcal_maxLost3Hit = cms.int32( 0 ), + PFMuonAlgoParameters = cms.PSet( ), + calibHF_use = cms.bool( False ), + verbose = cms.untracked.bool( False ), + pf_nsigma_ECAL = cms.double( 0.0 ), + usePFConversions = cms.bool( False ), + GedPhotonValueMap = cms.InputTag( 'tmpGedPhotons','valMapPFEgammaCandToPhoton' ), + useCalibrationsFromDB = cms.bool( True ), + resolHF_square = cms.vdouble( 7.834401, 0.012996, 0.0 ), + goodPixelTrackDeadHcal_ptErrRel = cms.double( 1.0 ), + goodTrackDeadHcal_validFr = cms.double( 0.5 ), + postMuonCleaning = cms.bool( True ), + calibrationsLabel = cms.string( "HLT" ), + muon_HO = cms.vdouble( 0.9, 0.9 ), + postHFCleaning = cms.bool( False ), + factors_45 = cms.vdouble( 10.0, 100.0 ), + cleanedHF = cms.VInputTag( 'hltParticleFlowRecHitHF:Cleaned','hltParticleFlowClusterHF:Cleaned' ), + iCfgCandConnector = cms.PSet( + nuclCalibFactors = cms.vdouble( 0.8, 0.15, 0.5, 0.5, 0.05 ), + bCorrect = cms.bool( False ), + bCalibPrimary = cms.bool( False ) + ), + rejectTracks_Bad = cms.bool( False ), + vertexCollection = cms.InputTag( "hltPixelVertices" ), + egammaElectrons = cms.InputTag( "" ), + calibHF_a_EMonly = cms.vdouble( 0.96945, 0.96701, 0.76309, 0.82268, 0.87583, 0.89718, 0.98674, 1.4681, 1.458, 1.458 ), + dptRel_DispVtx = cms.double( 10.0 ), + muons = cms.InputTag( "hltPixelOnlyMuons" ), + calibHF_b_HADonly = cms.vdouble( 1.27541, 0.85361, 0.86333, 0.89091, 0.94348, 0.94348, 0.9437, 1.0034, 1.0444, 1.0444 ), + pf_nsigma_HCAL = cms.double( 1.0 ), + muon_ECAL = cms.vdouble( 0.5, 0.5 ), + goodPixelTrackDeadHcal_maxPt = cms.double( 50.0 ), + blocks = cms.InputTag( "hltPixelOnlyParticleFlowBlock" ), + goodTrackDeadHcal_ptErrRel = cms.double( 0.2 ), + useEGammaFilters = cms.bool( False ), + pf_nsigma_HFHAD = cms.double( 1.0 ), + useEGammaElectrons = cms.bool( False ), + useHO = cms.bool( False ), + nsigma_TRACK = cms.double( 1.0 ), + PFEGammaFiltersParameters = cms.PSet( + electron_protectionsForJetMET = cms.PSet( + maxE = cms.double( 50.0 ), + maxTrackPOverEele = cms.double( 1.0 ), + maxEcalEOverP_2 = cms.double( 0.2 ), + maxHcalEOverEcalE = cms.double( 0.1 ), + maxEcalEOverP_1 = cms.double( 0.5 ), + maxHcalEOverP = cms.double( 1.0 ), + maxEcalEOverPRes = cms.double( 0.2 ), + maxHcalE = cms.double( 10.0 ), + maxEeleOverPout = cms.double( 0.2 ), + maxNtracks = cms.double( 3.0 ), + maxEleHcalEOverEcalE = cms.double( 0.1 ), + maxDPhiIN = cms.double( 0.1 ), + maxEeleOverPoutRes = cms.double( 0.5 ) + ), + electron_maxElePtForOnlyMVAPresel = cms.double( 50.0 ), + photon_SigmaiEtaiEta_endcap = cms.double( 0.034 ), + electron_iso_combIso_endcap = cms.double( 10.0 ), + photon_protectionsForBadHcal = cms.PSet( + solidConeTrkIsoSlope = cms.double( 0.3 ), + enableProtections = cms.bool( False ), + solidConeTrkIsoOffset = cms.double( 10.0 ) + ), + electron_missinghits = cms.uint32( 1 ), + photon_MinEt = cms.double( 10.0 ), + electron_iso_pt = cms.double( 10.0 ), + electron_ecalDrivenHademPreselCut = cms.double( 0.15 ), + electron_iso_mva_endcap = cms.double( -0.1075 ), + electron_iso_combIso_barrel = cms.double( 10.0 ), + photon_protectionsForJetMET = cms.PSet( + sumPtTrackIsoSlope = cms.double( 0.001 ), + sumPtTrackIso = cms.double( 4.0 ) + ), + electron_protectionsForBadHcal = cms.PSet( + dEta = cms.vdouble( 0.0064, 0.01264 ), + dPhi = cms.vdouble( 0.0547, 0.0394 ), + enableProtections = cms.bool( False ), + eInvPInv = cms.vdouble( 0.184, 0.0721 ), + full5x5_sigmaIetaIeta = cms.vdouble( 0.0106, 0.0387 ) + ), + electron_noniso_mvaCut = cms.double( -0.1 ), + electron_iso_mva_barrel = cms.double( -0.1875 ), + photon_SigmaiEtaiEta_barrel = cms.double( 0.0125 ), + photon_combIso = cms.double( 10.0 ), + photon_HoE = cms.double( 0.05 ) + ), + goodPixelTrackDeadHcal_minEta = cms.double( 2.3 ), + useVerticesForNeutral = cms.bool( True ), + goodTrackDeadHcal_chi2n = cms.double( 5.0 ), + goodTrackDeadHcal_dxy = cms.double( 0.5 ), + goodPixelTrackDeadHcal_dz = cms.double( 0.05 ), + PFEGammaCandidates = cms.InputTag( "particleFlowEGamma" ), + pf_nsigma_HFEM = cms.double( 1.0 ), + usePFDecays = cms.bool( False ), + calibHF_b_EMHAD = cms.vdouble( 1.27541, 0.85361, 0.86333, 0.89091, 0.94348, 0.94348, 0.9437, 1.0034, 1.0444, 1.0444 ), + rejectTracks_Step45 = cms.bool( False ), + goodPixelTrackDeadHcal_maxLost4Hit = cms.int32( 1 ), + calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), + goodTrackDeadHcal_layers = cms.uint32( 4 ), + goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), + usePFNuclearInteractions = cms.bool( False ), + GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), + goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), + calibHF_a_EMHAD = cms.vdouble( 1.42215, 1.00496, 0.68961, 0.81656, 0.98504, 0.98504, 1.00802, 1.0593, 1.4576, 1.4576 ), + muon_HCAL = cms.vdouble( 3.0, 3.0 ), + pt_Error = cms.double( 1.0 ), + debug = cms.untracked.bool( False ), + useProtectionsForJetMET = cms.bool( True ), + PFHFCleaningParameters = cms.PSet( + minSignificance = cms.double( 2.5 ), + maxSignificance = cms.double( 2.5 ), + minDeltaMet = cms.double( 0.4 ), + maxDeltaPhiPt = cms.double( 7.0 ), + minHFCleaningPt = cms.double( 5.0 ), + minSignificanceReduction = cms.double( 1.4 ) + ) +) +fragment.hltAK4PixelOnlyPFJets = cms.EDProducer( "FastjetJetProducer", + Active_Area_Repeats = cms.int32( 5 ), + useMassDropTagger = cms.bool( False ), + doAreaFastjet = cms.bool( False ), + muMin = cms.double( -1.0 ), + Ghost_EtaMax = cms.double( 6.0 ), + maxBadHcalCells = cms.uint32( 9999999 ), + maxRecoveredHcalCells = cms.uint32( 9999999 ), + applyWeight = cms.bool( False ), + doAreaDiskApprox = cms.bool( True ), + subtractorName = cms.string( "" ), + dRMax = cms.double( -1.0 ), + useExplicitGhosts = cms.bool( False ), + puWidth = cms.double( 0.0 ), + maxRecoveredEcalCells = cms.uint32( 9999999 ), + R0 = cms.double( -1.0 ), + jetType = cms.string( "PFJet" ), + muCut = cms.double( -1.0 ), + subjetPtMin = cms.double( -1.0 ), + csRParam = cms.double( -1.0 ), + MinVtxNdof = cms.int32( 0 ), + minSeed = cms.uint32( 0 ), + voronoiRfact = cms.double( -9.0 ), + doRhoFastjet = cms.bool( False ), + jetAlgorithm = cms.string( "AntiKt" ), + writeCompound = cms.bool( False ), + muMax = cms.double( -1.0 ), + nSigmaPU = cms.double( 1.0 ), + GhostArea = cms.double( 0.01 ), + Rho_EtaMax = cms.double( 4.4 ), + restrictInputs = cms.bool( False ), + nExclude = cms.uint32( 0 ), + yMin = cms.double( -1.0 ), + srcWeights = cms.InputTag( "" ), + maxBadEcalCells = cms.uint32( 9999999 ), + jetCollInstanceName = cms.string( "" ), + useFiltering = cms.bool( False ), + maxInputs = cms.uint32( 1 ), + rFiltFactor = cms.double( -1.0 ), + useDeterministicSeed = cms.bool( True ), + doPVCorrection = cms.bool( False ), + rFilt = cms.double( -1.0 ), + yMax = cms.double( -1.0 ), + zcut = cms.double( -1.0 ), + useTrimming = cms.bool( False ), + puCenters = cms.vdouble( ), + MaxVtxZ = cms.double( 15.0 ), + rParam = cms.double( 0.4 ), + csRho_EtaMax = cms.double( -1.0 ), + UseOnlyVertexTracks = cms.bool( False ), + dRMin = cms.double( -1.0 ), + gridSpacing = cms.double( -1.0 ), + minimumTowersFraction = cms.double( 0.0 ), + doFastJetNonUniform = cms.bool( False ), + usePruning = cms.bool( False ), + maxDepth = cms.int32( -1 ), + yCut = cms.double( -1.0 ), + useSoftDrop = cms.bool( False ), + DzTrVtxMax = cms.double( 0.0 ), + UseOnlyOnePV = cms.bool( False ), + maxProblematicHcalCells = cms.uint32( 9999999 ), + correctShape = cms.bool( False ), + rcut_factor = cms.double( -1.0 ), + src = cms.InputTag( "hltPixelOnlyParticleFlow" ), + gridMaxRapidity = cms.double( -1.0 ), + sumRecHits = cms.bool( False ), + jetPtMin = cms.double( 0.0 ), + puPtMin = cms.double( 10.0 ), + useDynamicFiltering = cms.bool( False ), + verbosity = cms.int32( 0 ), + inputEtMin = cms.double( 0.0 ), + useConstituentSubtraction = cms.bool( False ), + beta = cms.double( -1.0 ), + trimPtFracMin = cms.double( -1.0 ), + radiusPU = cms.double( 0.4 ), + nFilt = cms.int32( -1 ), + useKtPruning = cms.bool( False ), + DxyTrVtxMax = cms.double( 0.0 ), + maxProblematicEcalCells = cms.uint32( 9999999 ), + srcPVs = cms.InputTag( "hltPixelVertices" ), + useCMSBoostedTauSeedingAlgorithm = cms.bool( False ), + doPUOffsetCorr = cms.bool( False ), + writeJetsWithConst = cms.bool( False ), + inputEMin = cms.double( 0.0 ) +) +fragment.hltAK4PixelOnlyPFJetsLooseID = cms.EDProducer( "HLTPFJetIDProducer", + CEF = cms.double( 0.99 ), + NHF = cms.double( 0.99 ), + minPt = cms.double( 20.0 ), + CHF = cms.double( 0.0 ), + jetsInput = cms.InputTag( "hltAK4PixelOnlyPFJets" ), + NEF = cms.double( 0.99 ), + NTOT = cms.int32( 1 ), + NCH = cms.int32( 0 ), + maxEta = cms.double( 1.0E99 ), + maxCF = cms.double( 99.0 ) +) +fragment.hltAK4PixelOnlyPFJetsTightID = cms.EDProducer( "HLTPFJetIDProducer", + CEF = cms.double( 0.99 ), + NHF = cms.double( 0.9 ), + minPt = cms.double( 20.0 ), + CHF = cms.double( 0.0 ), + jetsInput = cms.InputTag( "hltAK4PixelOnlyPFJets" ), + NEF = cms.double( 0.99 ), + NTOT = cms.int32( 1 ), + NCH = cms.int32( 0 ), + maxEta = cms.double( 1.0E99 ), + maxCF = cms.double( 99.0 ) +) +fragment.hltFixedGridRhoFastjetPixelOnlyAll = cms.EDProducer( "FixedGridRhoProducerFastjet", + gridSpacing = cms.double( 0.55 ), + pfCandidatesTag = cms.InputTag( "hltPixelOnlyParticleFlow" ), + maxRapidity = cms.double( 5.0 ) +) +fragment.hltAK4PixelOnlyPFFastJetCorrector = cms.EDProducer( "L1FastjetCorrectorProducer", + srcRho = cms.InputTag( "hltFixedGridRhoFastjetPixelOnlyAll" ), + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L1FastJet" ) +) +fragment.hltAK4PixelOnlyPFRelativeCorrector = cms.EDProducer( "LXXXCorrectorProducer", + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L2Relative" ) +) +fragment.hltAK4PixelOnlyPFAbsoluteCorrector = cms.EDProducer( "LXXXCorrectorProducer", + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L3Absolute" ) +) +fragment.hltAK4PixelOnlyPFResidualCorrector = cms.EDProducer( "LXXXCorrectorProducer", + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L2L3Residual" ) +) +fragment.hltAK4PixelOnlyPFCorrector = cms.EDProducer( "ChainedJetCorrectorProducer", + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFFastJetCorrector','hltAK4PixelOnlyPFRelativeCorrector','hltAK4PixelOnlyPFAbsoluteCorrector','hltAK4PixelOnlyPFResidualCorrector' ) +) +fragment.hltAK4PixelOnlyPFJetsCorrected = cms.EDProducer( "CorrectedPFJetProducer", + src = cms.InputTag( "hltAK4PixelOnlyPFJets" ), + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFCorrector' ) +) +fragment.hltAK4PixelOnlyPFJetsLooseIDCorrected = cms.EDProducer( "CorrectedPFJetProducer", + src = cms.InputTag( "hltAK4PixelOnlyPFJetsLooseID" ), + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFCorrector' ) +) +fragment.hltAK4PixelOnlyPFJetsTightIDCorrected = cms.EDProducer( "CorrectedPFJetProducer", + src = cms.InputTag( "hltAK4PixelOnlyPFJetsTightID" ), + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFCorrector' ) +) +fragment.hltPixelOnlyPFMETProducer = cms.EDProducer( "PFMETProducer", + src = cms.InputTag( "hltPixelOnlyParticleFlow" ), + parameters = cms.PSet( ), + applyWeight = cms.bool( False ), + calculateSignificance = cms.bool( False ), + alias = cms.string( "hltPFMet" ), + srcWeights = cms.InputTag( "" ), + globalThreshold = cms.double( 0.0 ) +) +fragment.hltL2MuonCandidatesScoutingNoVtx = cms.EDProducer( "L2MuonCandidateProducer", + InputObjects = cms.InputTag( "hltL2Muons" ) +) +fragment.hltIterL3OISeedsFromL2MuonsScoutingNoVtx = cms.EDProducer( "TSGForOIFromL2", + hitsToTry = cms.int32( 1 ), + tsosDiff2 = cms.double( 0.02 ), + adjustErrorsDynamicallyForHitless = cms.bool( True ), + SF6 = cms.double( 2.0 ), + SF4 = cms.double( 7.0 ), + SF5 = cms.double( 10.0 ), + propagatorName = cms.string( "PropagatorWithMaterialParabolicMf" ), + SF3 = cms.double( 5.0 ), + SF1 = cms.double( 3.0 ), + minEtaForTEC = cms.double( 0.7 ), + fixedErrorRescaleFactorForHits = cms.double( 1.0 ), + maxSeeds = cms.uint32( 20 ), + maxEtaForTOB = cms.double( 1.8 ), + pT3 = cms.double( 70.0 ), + pT2 = cms.double( 30.0 ), + pT1 = cms.double( 13.0 ), + layersToTry = cms.int32( 2 ), + fixedErrorRescaleFactorForHitless = cms.double( 2.0 ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + SF2 = cms.double( 4.0 ), + numL2ValidHitsCutAllEta = cms.uint32( 20 ), + adjustErrorsDynamicallyForHits = cms.bool( False ), + eta4 = cms.double( 1.2 ), + src = cms.InputTag( "hltL2Muons" ), + eta6 = cms.double( 1.4 ), + eta7 = cms.double( 2.1 ), + eta1 = cms.double( 0.2 ), + eta2 = cms.double( 0.3 ), + eta3 = cms.double( 1.0 ), + UseHitLessSeeds = cms.bool( True ), + estimator = cms.string( "hltESPChi2MeasurementEstimator100" ), + numL2ValidHitsCutAllEndcap = cms.uint32( 30 ), + debug = cms.untracked.bool( False ), + maxHitSeeds = cms.uint32( 1 ), + eta5 = cms.double( 1.6 ), + tsosDiff1 = cms.double( 0.2 ), + maxHitlessSeeds = cms.uint32( 5 ) +) +fragment.hltIterL3OITrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIterL3OISeedsFromL2MuonsScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 5000 ), + SimpleMagneticField = cms.string( "" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterial" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialOpposite" ) + ), + TrajectoryCleaner = cms.string( "muonSeededTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( True ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 500000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTPSetMuonCkfTrajectoryBuilder" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "CkfTrajectoryBuilder" ) +) +fragment.hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIterL3OITrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + Fitter = cms.string( "hltESPKFFittingSmootherWithOutliersRejectionAndRK" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "hltESPMeasurementTracker" ), + AlgorithmName = cms.string( "iter10" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( False ), + Propagator = cms.string( "PropagatorWithMaterial" ) +) +fragment.hltIterL3OIMuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "Notused" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 0 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 0.3, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 4, 3, 2 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 0.35, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 3.40282346639E38, 3.40282346639E38, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 10.0, 1.0, 0.4 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 5, 5 ) + ), + ignoreVertices = cms.bool( True ) +) +fragment.hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIterL3OIMuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIterL3OIMuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +fragment.hltL3MuonsIterL3OIScoutingNoVtx = cms.EDProducer( "L3MuonProducer", + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + UseMuonNavigation = cms.untracked.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPSmartPropagatorAny', + 'SteppingHelixPropagatorAny', + 'hltESPSmartPropagator', + 'hltESPSteppingHelixPropagatorOpposite' ) + ), + L3TrajBuilderParameters = cms.PSet( + PtCut = cms.double( 1.0 ), + TrackerPropagator = cms.string( "SteppingHelixPropagatorAny" ), + GlobalMuonTrackMatcher = cms.PSet( + Chi2Cut_3 = cms.double( 200.0 ), + DeltaDCut_2 = cms.double( 10.0 ), + Eta_threshold = cms.double( 1.2 ), + Quality_2 = cms.double( 15.0 ), + DeltaDCut_1 = cms.double( 40.0 ), + Quality_3 = cms.double( 7.0 ), + DeltaDCut_3 = cms.double( 15.0 ), + Quality_1 = cms.double( 20.0 ), + Pt_threshold1 = cms.double( 0.0 ), + DeltaRCut_2 = cms.double( 0.2 ), + DeltaRCut_1 = cms.double( 0.1 ), + Pt_threshold2 = cms.double( 9.99999999E8 ), + Chi2Cut_1 = cms.double( 50.0 ), + Chi2Cut_2 = cms.double( 50.0 ), + DeltaRCut_3 = cms.double( 1.0 ), + LocChi2Cut = cms.double( 0.001 ), + Propagator = cms.string( "hltESPSmartPropagator" ), + MinPt = cms.double( 1.0 ), + MinP = cms.double( 2.5 ) + ), + ScaleTECxFactor = cms.double( -1.0 ), + tkTrajUseVertex = cms.bool( False ), + MuonTrackingRegionBuilder = cms.PSet( + Rescale_Dz = cms.double( 4.0 ), + Pt_fixed = cms.bool( False ), + Eta_fixed = cms.bool( True ), + Eta_min = cms.double( 0.1 ), + DeltaZ = cms.double( 24.2 ), + maxRegions = cms.int32( 2 ), + EtaR_UpperLimit_Par1 = cms.double( 0.25 ), + UseVertex = cms.bool( False ), + Z_fixed = cms.bool( False ), + PhiR_UpperLimit_Par1 = cms.double( 0.6 ), + PhiR_UpperLimit_Par2 = cms.double( 0.2 ), + Rescale_phi = cms.double( 3.0 ), + DeltaEta = cms.double( 0.2 ), + precise = cms.bool( True ), + OnDemand = cms.int32( -1 ), + EtaR_UpperLimit_Par2 = cms.double( 0.15 ), + MeasurementTrackerName = cms.InputTag( "hltESPMeasurementTracker" ), + vertexCollection = cms.InputTag( "pixelVertices" ), + Pt_min = cms.double( 3.0 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + Phi_fixed = cms.bool( True ), + DeltaR = cms.double( 0.025 ), + input = cms.InputTag( "hltL2Muons" ), + DeltaPhi = cms.double( 0.15 ), + Phi_min = cms.double( 0.1 ), + Rescale_eta = cms.double( 3.0 ) + ), + TrackTransformer = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + RefitDirection = cms.string( "insideOut" ), + RefitRPCHits = cms.bool( True ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + tkTrajBeamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + RefitRPCHits = cms.bool( True ), + tkTrajVertex = cms.InputTag( "Notused" ), + GlbRefitterParameters = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + DTRecSegmentLabel = cms.InputTag( "hltDt4DSegments" ), + RefitFlag = cms.bool( True ), + SkipStation = cms.int32( -1 ), + Chi2CutRPC = cms.double( 1.0 ), + PropDirForCosmics = cms.bool( False ), + CSCRecSegmentLabel = cms.InputTag( "hltCscSegments" ), + HitThreshold = cms.int32( 1 ), + DYTthrs = cms.vint32( 30, 15 ), + TrackerSkipSystem = cms.int32( -1 ), + RefitDirection = cms.string( "insideOut" ), + Chi2CutCSC = cms.double( 150.0 ), + Chi2CutDT = cms.double( 10.0 ), + RefitRPCHits = cms.bool( True ), + TrackerSkipSection = cms.int32( -1 ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonHitsOption = cms.int32( 1 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ) + ), + PCut = cms.double( 2.5 ), + tkTrajMaxDXYBeamSpot = cms.double( 9999.0 ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + tkTrajMaxChi2 = cms.double( 9999.0 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + ScaleTECyFactor = cms.double( -1.0 ), + tkTrajLabel = cms.InputTag( "hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx" ) + ), + TrackLoaderParameters = cms.PSet( + MuonSeededTracksInstance = cms.untracked.string( "L2Seeded" ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + DoSmoothing = cms.bool( True ), + SmoothTkTrack = cms.untracked.bool( False ), + VertexConstraint = cms.bool( False ), + MuonUpdatorAtVertexParameters = cms.PSet( + MaxChi2 = cms.double( 1000000.0 ), + BeamSpotPositionErrors = cms.vdouble( 0.1, 0.1, 5.3 ), + Propagator = cms.string( "hltESPSteppingHelixPropagatorOpposite" ) + ), + PutTkTrackIntoEvent = cms.untracked.bool( False ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + MuonCollectionLabel = cms.InputTag( "hltL2Muons" ) +) +fragment.hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx = cms.EDProducer( "L3TrackLinksCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx' ) +) +fragment.hltIterL3OIL3MuonsScoutingNoVtx = cms.EDProducer( "L3TrackCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx' ) +) +fragment.hltIterL3OIL3MuonCandidatesScoutingNoVtx = cms.EDProducer( "L3MuonCandidateProducer", + InputLinksObjects = cms.InputTag( "hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx" ), + InputObjects = cms.InputTag( "hltIterL3OIL3MuonsScoutingNoVtx" ), + MuonPtOption = cms.string( "Tracker" ) +) +fragment.hltL2SelectorForL3IOScoutingNoVtx = cms.EDProducer( "HLTMuonL2SelectorForL3IO", + MaxNormalizedChi2 = cms.double( 20.0 ), + MinNmuonHits = cms.int32( 1 ), + MinNhits = cms.int32( 1 ), + applyL3Filters = cms.bool( False ), + MaxPtDifference = cms.double( 0.3 ), + l3OISrc = cms.InputTag( "hltIterL3OIL3MuonCandidatesScoutingNoVtx" ), + InputLinks = cms.InputTag( "hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx" ), + l2Src = cms.InputTag( "hltL2Muons" ) +) +fragment.hltIterL3MuonPixelTracksFilterScoutingNoVtx = cms.EDProducer( "PixelTrackFilterByKinematicsProducer", + nSigmaTipMaxTolerance = cms.double( 0.0 ), + chi2 = cms.double( 1000.0 ), + nSigmaInvPtTolerance = cms.double( 0.0 ), + ptMin = cms.double( 0.1 ), + tipMax = cms.double( 1.0 ) +) +fragment.hltIterL3MuonPixelTracksFitterScoutingNoVtx = cms.EDProducer( "PixelFitterByHelixProjectionsProducer", + scaleErrorsForBPix1 = cms.bool( False ), + scaleFactor = cms.double( 0.65 ) +) +fragment.hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx = cms.EDProducer( "MuonTrackingRegionEDProducer", + precise = cms.bool( True ), + Eta_fixed = cms.bool( True ), + Eta_min = cms.double( 0.0 ), + Z_fixed = cms.bool( True ), + MeasurementTrackerName = cms.InputTag( "" ), + maxRegions = cms.int32( 5 ), + Pt_min = cms.double( 2.0 ), + Rescale_Dz = cms.double( 4.0 ), + PhiR_UpperLimit_Par1 = cms.double( 0.6 ), + PhiR_UpperLimit_Par2 = cms.double( 0.2 ), + vertexCollection = cms.InputTag( "notUsed" ), + Phi_fixed = cms.bool( True ), + input = cms.InputTag( "hltL2SelectorForL3IOScoutingNoVtx" ), + DeltaR = cms.double( 0.025 ), + OnDemand = cms.int32( -1 ), + DeltaZ = cms.double( 24.2 ), + Rescale_phi = cms.double( 3.0 ), + Rescale_eta = cms.double( 3.0 ), + DeltaEta = cms.double( 0.2 ), + Phi_min = cms.double( 0.0 ), + DeltaPhi = cms.double( 0.15 ), + UseVertex = cms.bool( False ), + EtaR_UpperLimit_Par1 = cms.double( 0.25 ), + EtaR_UpperLimit_Par2 = cms.double( 0.15 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + Pt_fixed = cms.bool( True ) +) +fragment.hltIterL3MuonPixelLayerQuadrupletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3+BPix4', + 'BPix1+BPix2+BPix3+FPix1_pos', + 'BPix1+BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos+FPix2_pos', + 'BPix1+BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos+FPix3_pos', + 'BPix1+FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +fragment.hltIterL3MuonPixelTracksHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIterL3MuonPixelLayerQuadrupletsScoutingNoVtx" ) +) +fragment.hltIterL3MuonPixelTracksHitQuadrupletsScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltIterL3MuonPixelTracksHitDoubletsScoutingNoVtx" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 50.0 ), + value1 = cms.double( 200.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.005 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.2 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +fragment.hltIterL3MuonPixelTracksScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", + Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), + passLabel = cms.string( "" ), + Fitter = cms.InputTag( "hltIterL3MuonPixelTracksFitterScoutingNoVtx" ), + Filter = cms.InputTag( "hltIterL3MuonPixelTracksFilterScoutingNoVtx" ), + SeedingHitSets = cms.InputTag( "hltIterL3MuonPixelTracksHitQuadrupletsScoutingNoVtx" ) +) +fragment.hltIterL3MuonPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexProducer", + WtAverage = cms.bool( True ), + Method2 = cms.bool( True ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + Verbosity = cms.int32( 0 ), + UseError = cms.bool( True ), + TrackCollection = cms.InputTag( "hltIterL3MuonPixelTracksScoutingNoVtx" ), + PtMin = cms.double( 1.0 ), + NTrkMin = cms.int32( 2 ), + ZOffset = cms.double( 5.0 ), + Finder = cms.string( "DivisiveVertexFinder" ), + ZSeparation = cms.double( 0.05 ) +) +fragment.hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexCollectionTrimmer", + src = cms.InputTag( "hltIterL3MuonPixelVerticesScoutingNoVtx" ), + fractionSumPt2 = cms.double( 0.3 ), + minSumPt2 = cms.double( 0.0 ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + maxVtx = cms.uint32( 100 ) +) +fragment.hltIter0IterL3MuonPixelSeedsFromPixelTracksScoutingNoVtx = cms.EDProducer( "SeedGeneratorFromProtoTracksEDProducer", + includeFourthHit = cms.bool( False ), + useEventsWithNoVertex = cms.bool( True ), + originHalfLength = cms.double( 0.3 ), + useProtoTrackKinematics = cms.bool( False ), + usePV = cms.bool( False ), + SeedCreatorPSet = cms.PSet( refToPSet_ = cms.string( "HLTSeedFromProtoTracks" ) ), + InputVertexCollection = cms.InputTag( "hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx" ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + InputCollection = cms.InputTag( "hltIterL3MuonPixelTracksScoutingNoVtx" ), + originRadius = cms.double( 0.1 ) +) +fragment.hltIter0IterL3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter0IterL3MuonPixelSeedsFromPixelTracksScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( True ), + RedundantSeedCleaner = cms.string( "none" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( True ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter0IterL3MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "GroupedCkfTrajectoryBuilder" ) +) +fragment.hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter0IterL3MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter0" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +fragment.hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 3, 4 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 0.3, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 3, 4 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 0.35, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 3.40282346639E38, 3.40282346639E38, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 4 ) + ), + ignoreVertices = cms.bool( False ) +) +fragment.hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +fragment.hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", + trackClassifier = cms.InputTag( '','QualityMasks' ), + minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), + maxChi2 = cms.double( 16.0 ), + trajectories = cms.InputTag( "hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "" ), + stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), + overrideTrkQuals = cms.InputTag( "" ), + pixelClusters = cms.InputTag( "hltSiPixelClusters" ), + TrackQuality = cms.string( "highPurity" ) +) +fragment.hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx" ), + OnDemand = cms.bool( False ), + src = cms.InputTag( "hltSiStripClusters" ) +) +fragment.hltIter2IterL3MuonPixelLayerTripletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3', + 'BPix2+BPix3+BPix4', + 'BPix1+BPix3+BPix4', + 'BPix1+BPix2+BPix4', + 'BPix2+BPix3+FPix1_pos', + 'BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos', + 'BPix1+BPix2+FPix1_neg', + 'BPix2+FPix1_pos+FPix2_pos', + 'BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos', + 'BPix1+FPix1_neg+FPix2_neg', + 'FPix1_pos+FPix2_pos+FPix3_pos', + 'FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +fragment.hltIter2IterL3MuonPixelClusterCheckScoutingNoVtx = cms.EDProducer( "ClusterCheckerEDProducer", + cut = cms.string( "" ), + silentClusterCheck = cms.untracked.bool( False ), + MaxNumberOfCosmicClusters = cms.uint32( 50000 ), + PixelClusterCollectionLabel = cms.InputTag( "hltSiPixelClusters" ), + doClusterCheck = cms.bool( False ), + MaxNumberOfPixelClusters = cms.uint32( 10000 ), + ClusterCollectionLabel = cms.InputTag( "hltSiStripClusters" ) +) +fragment.hltIter2IterL3MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1 ), + clusterCheck = cms.InputTag( "hltIter2IterL3MuonPixelClusterCheckScoutingNoVtx" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIter2IterL3MuonPixelLayerTripletsScoutingNoVtx" ) +) +fragment.hltIter2IterL3MuonPixelHitTripletsScoutingNoVtx = cms.EDProducer( "CAHitTripletEDProducer", + CAThetaCut = cms.double( 0.015 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + maxChi2 = cms.PSet( + value2 = cms.double( 6.0 ), + value1 = cms.double( 100.0 ), + pt1 = cms.double( 0.8 ), + enabled = cms.bool( True ), + pt2 = cms.double( 8.0 ) + ), + doublets = cms.InputTag( "hltIter2IterL3MuonPixelHitDoubletsScoutingNoVtx" ), + CAHardPtCut = cms.double( 0.3 ), + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.1 ), + useBendingCorrection = cms.bool( True ), + extraHitRPhitolerance = cms.double( 0.032 ) +) +fragment.hltIter2IterL3MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer", + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + forceKinematicWithRegionDirection = cms.bool( False ), + magneticField = cms.string( "ParabolicMf" ), + SeedMomentumForBOFF = cms.double( 5.0 ), + OriginTransverseErrorMultiplier = cms.double( 1.0 ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MinOneOverPtError = cms.double( 1.0 ), + seedingHitSets = cms.InputTag( "hltIter2IterL3MuonPixelHitTripletsScoutingNoVtx" ), + propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) +) +fragment.hltIter2IterL3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter2IterL3MuonPixelSeedsScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter2IterL3MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "" ) +) +fragment.hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter2IterL3MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter2" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +fragment.hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 0 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 3.40282346639E38, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 3.40282346639E38, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 3 ) + ), + ignoreVertices = cms.bool( False ) +) +fragment.hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +fragment.hltIter2IterL3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +fragment.hltL3MuonsIterL3IOScoutingNoVtx = cms.EDProducer( "L3MuonProducer", + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + UseMuonNavigation = cms.untracked.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPSmartPropagatorAny', + 'SteppingHelixPropagatorAny', + 'hltESPSmartPropagator', + 'hltESPSteppingHelixPropagatorOpposite' ) + ), + L3TrajBuilderParameters = cms.PSet( + PtCut = cms.double( 1.0 ), + TrackerPropagator = cms.string( "SteppingHelixPropagatorAny" ), + GlobalMuonTrackMatcher = cms.PSet( + Chi2Cut_3 = cms.double( 200.0 ), + DeltaDCut_2 = cms.double( 10.0 ), + Eta_threshold = cms.double( 1.2 ), + Quality_2 = cms.double( 15.0 ), + DeltaDCut_1 = cms.double( 40.0 ), + Quality_3 = cms.double( 7.0 ), + DeltaDCut_3 = cms.double( 15.0 ), + Quality_1 = cms.double( 20.0 ), + Pt_threshold1 = cms.double( 0.0 ), + DeltaRCut_2 = cms.double( 0.2 ), + DeltaRCut_1 = cms.double( 0.1 ), + Pt_threshold2 = cms.double( 9.99999999E8 ), + Chi2Cut_1 = cms.double( 50.0 ), + Chi2Cut_2 = cms.double( 50.0 ), + DeltaRCut_3 = cms.double( 1.0 ), + LocChi2Cut = cms.double( 0.001 ), + Propagator = cms.string( "hltESPSmartPropagator" ), + MinPt = cms.double( 1.0 ), + MinP = cms.double( 2.5 ) + ), + ScaleTECxFactor = cms.double( -1.0 ), + tkTrajUseVertex = cms.bool( False ), + MuonTrackingRegionBuilder = cms.PSet( + Rescale_Dz = cms.double( 4.0 ), + Pt_fixed = cms.bool( True ), + Eta_fixed = cms.bool( True ), + Eta_min = cms.double( 0.1 ), + DeltaZ = cms.double( 24.2 ), + maxRegions = cms.int32( 2 ), + EtaR_UpperLimit_Par1 = cms.double( 0.25 ), + UseVertex = cms.bool( False ), + Z_fixed = cms.bool( True ), + PhiR_UpperLimit_Par1 = cms.double( 0.6 ), + PhiR_UpperLimit_Par2 = cms.double( 0.2 ), + Rescale_phi = cms.double( 3.0 ), + DeltaEta = cms.double( 0.04 ), + precise = cms.bool( True ), + OnDemand = cms.int32( -1 ), + EtaR_UpperLimit_Par2 = cms.double( 0.15 ), + MeasurementTrackerName = cms.InputTag( "hltESPMeasurementTracker" ), + vertexCollection = cms.InputTag( "pixelVertices" ), + Pt_min = cms.double( 3.0 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + Phi_fixed = cms.bool( True ), + DeltaR = cms.double( 0.025 ), + input = cms.InputTag( "hltL2SelectorForL3IOScoutingNoVtx" ), + DeltaPhi = cms.double( 0.15 ), + Phi_min = cms.double( 0.1 ), + Rescale_eta = cms.double( 3.0 ) + ), + TrackTransformer = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + RefitDirection = cms.string( "insideOut" ), + RefitRPCHits = cms.bool( True ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + tkTrajBeamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + RefitRPCHits = cms.bool( True ), + tkTrajVertex = cms.InputTag( "hltIterL3MuonPixelVerticesScoutingNoVtx" ), + GlbRefitterParameters = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + DTRecSegmentLabel = cms.InputTag( "hltDt4DSegments" ), + RefitFlag = cms.bool( True ), + SkipStation = cms.int32( -1 ), + Chi2CutRPC = cms.double( 1.0 ), + PropDirForCosmics = cms.bool( False ), + CSCRecSegmentLabel = cms.InputTag( "hltCscSegments" ), + HitThreshold = cms.int32( 1 ), + DYTthrs = cms.vint32( 30, 15 ), + TrackerSkipSystem = cms.int32( -1 ), + RefitDirection = cms.string( "insideOut" ), + Chi2CutCSC = cms.double( 150.0 ), + Chi2CutDT = cms.double( 10.0 ), + RefitRPCHits = cms.bool( True ), + TrackerSkipSection = cms.int32( -1 ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonHitsOption = cms.int32( 1 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ) + ), + PCut = cms.double( 2.5 ), + tkTrajMaxDXYBeamSpot = cms.double( 9999.0 ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + matchToSeeds = cms.bool( True ), + tkTrajMaxChi2 = cms.double( 9999.0 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + ScaleTECyFactor = cms.double( -1.0 ), + tkTrajLabel = cms.InputTag( "hltIter2IterL3MuonMergedScoutingNoVtx" ) + ), + TrackLoaderParameters = cms.PSet( + MuonSeededTracksInstance = cms.untracked.string( "L2Seeded" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + DoSmoothing = cms.bool( False ), + SmoothTkTrack = cms.untracked.bool( False ), + VertexConstraint = cms.bool( False ), + MuonUpdatorAtVertexParameters = cms.PSet( + MaxChi2 = cms.double( 1000000.0 ), + BeamSpotPositionErrors = cms.vdouble( 0.1, 0.1, 5.3 ), + Propagator = cms.string( "hltESPSteppingHelixPropagatorOpposite" ) + ), + PutTkTrackIntoEvent = cms.untracked.bool( False ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + MuonCollectionLabel = cms.InputTag( "hltL2Muons" ) +) +fragment.hltIterL3MuonsFromL2LinksCombinationScoutingNoVtx = cms.EDProducer( "L3TrackLinksCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx','hltL3MuonsIterL3IOScoutingNoVtx' ) +) +fragment.hltIterL3MuonsFromL2ScoutingNoVtx = cms.EDProducer( "L3TrackCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx','hltL3MuonsIterL3IOScoutingNoVtx' ) +) +fragment.hltIterL3MuonL1MuonNoL2SelectorScoutingNoVtx = cms.EDProducer( "HLTL1MuonNoL2Selector", + SeedMapTag = cms.InputTag( "hltL2Muons" ), + L1MinPt = cms.double( -1.0 ), + CentralBxOnly = cms.bool( True ), + InputObjects = cms.InputTag( 'hltGtStage2Digis','Muon' ), + L2CandTag = cms.InputTag( "hltL2MuonCandidatesScoutingNoVtx" ), + L1MaxEta = cms.double( 5.0 ), + L1MinQuality = cms.uint32( 7 ) +) +fragment.hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", + RegionPSet = cms.PSet( + vertexCollection = cms.InputTag( "notUsed" ), + zErrorVetex = cms.double( 0.2 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + zErrorBeamSpot = cms.double( 24.2 ), + maxNVertices = cms.int32( 1 ), + maxNRegions = cms.int32( 2 ), + nSigmaZVertex = cms.double( 3.0 ), + nSigmaZBeamSpot = cms.double( 4.0 ), + ptMin = cms.double( 10.0 ), + mode = cms.string( "BeamSpotSigma" ), + input = cms.InputTag( "hltIterL3MuonL1MuonNoL2SelectorScoutingNoVtx" ), + searchOpt = cms.bool( False ), + whereToUseMeasurementTracker = cms.string( "Never" ), + originRadius = cms.double( 0.2 ), + measurementTrackerName = cms.InputTag( "" ), + precise = cms.bool( True ), + deltaEta = cms.double( 0.35 ), + deltaPhi = cms.double( 0.2 ) + ) +) +fragment.hltIterL3FromL1MuonPixelLayerQuadrupletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3+BPix4', + 'BPix1+BPix2+BPix3+FPix1_pos', + 'BPix1+BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos+FPix2_pos', + 'BPix1+BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos+FPix3_pos', + 'BPix1+FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +fragment.hltIterL3FromL1MuonPixelTracksHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIterL3FromL1MuonPixelLayerQuadrupletsScoutingNoVtx" ) +) +fragment.hltIterL3FromL1MuonPixelTracksHitQuadrupletsScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltIterL3FromL1MuonPixelTracksHitDoubletsScoutingNoVtx" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 50.0 ), + value1 = cms.double( 200.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.005 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.2 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +fragment.hltIterL3FromL1MuonPixelTracksScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", + Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), + passLabel = cms.string( "" ), + Fitter = cms.InputTag( "hltIterL3MuonPixelTracksFitterScoutingNoVtx" ), + Filter = cms.InputTag( "hltIterL3MuonPixelTracksFilterScoutingNoVtx" ), + SeedingHitSets = cms.InputTag( "hltIterL3FromL1MuonPixelTracksHitQuadrupletsScoutingNoVtx" ) +) +fragment.hltIterL3FromL1MuonPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexProducer", + WtAverage = cms.bool( True ), + Method2 = cms.bool( True ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + Verbosity = cms.int32( 0 ), + UseError = cms.bool( True ), + TrackCollection = cms.InputTag( "hltIterL3MuonPixelTracksScoutingNoVtx" ), + PtMin = cms.double( 1.0 ), + NTrkMin = cms.int32( 2 ), + ZOffset = cms.double( 5.0 ), + Finder = cms.string( "DivisiveVertexFinder" ), + ZSeparation = cms.double( 0.05 ) +) +fragment.hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexCollectionTrimmer", + src = cms.InputTag( "hltIterL3FromL1MuonPixelVerticesScoutingNoVtx" ), + fractionSumPt2 = cms.double( 0.3 ), + minSumPt2 = cms.double( 0.0 ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + maxVtx = cms.uint32( 100 ) +) +fragment.hltIter0IterL3FromL1MuonPixelSeedsFromPixelTracksScoutingNoVtx = cms.EDProducer( "SeedGeneratorFromProtoTracksEDProducer", + includeFourthHit = cms.bool( False ), + useEventsWithNoVertex = cms.bool( True ), + originHalfLength = cms.double( 0.3 ), + useProtoTrackKinematics = cms.bool( False ), + usePV = cms.bool( False ), + SeedCreatorPSet = cms.PSet( refToPSet_ = cms.string( "HLTSeedFromProtoTracks" ) ), + InputVertexCollection = cms.InputTag( "hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx" ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + InputCollection = cms.InputTag( "hltIterL3FromL1MuonPixelTracksScoutingNoVtx" ), + originRadius = cms.double( 0.1 ) +) +fragment.hltIter0IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter0IterL3FromL1MuonPixelSeedsFromPixelTracksScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( True ), + RedundantSeedCleaner = cms.string( "none" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( True ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter0IterL3FromL1MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "GroupedCkfTrajectoryBuilder" ) +) +fragment.hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter0IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter0" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +fragment.hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 3, 4 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 0.3, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 3, 4 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 0.35, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 3.40282346639E38, 3.40282346639E38, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 4 ) + ), + ignoreVertices = cms.bool( False ) +) +fragment.hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +fragment.hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", + trackClassifier = cms.InputTag( '','QualityMasks' ), + minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), + maxChi2 = cms.double( 16.0 ), + trajectories = cms.InputTag( "hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "" ), + stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), + overrideTrkQuals = cms.InputTag( "" ), + pixelClusters = cms.InputTag( "hltSiPixelClusters" ), + TrackQuality = cms.string( "highPurity" ) +) +fragment.hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx" ), + OnDemand = cms.bool( False ), + src = cms.InputTag( "hltSiStripClusters" ) +) +fragment.hltIter2IterL3FromL1MuonPixelLayerTripletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3', + 'BPix2+BPix3+BPix4', + 'BPix1+BPix3+BPix4', + 'BPix1+BPix2+BPix4', + 'BPix2+BPix3+FPix1_pos', + 'BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos', + 'BPix1+BPix2+FPix1_neg', + 'BPix2+FPix1_pos+FPix2_pos', + 'BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos', + 'BPix1+FPix1_neg+FPix2_neg', + 'FPix1_pos+FPix2_pos+FPix3_pos', + 'FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +fragment.hltIter2IterL3FromL1MuonPixelClusterCheckScoutingNoVtx = cms.EDProducer( "ClusterCheckerEDProducer", + cut = cms.string( "" ), + silentClusterCheck = cms.untracked.bool( False ), + MaxNumberOfCosmicClusters = cms.uint32( 50000 ), + PixelClusterCollectionLabel = cms.InputTag( "hltSiPixelClusters" ), + doClusterCheck = cms.bool( False ), + MaxNumberOfPixelClusters = cms.uint32( 10000 ), + ClusterCollectionLabel = cms.InputTag( "hltSiStripClusters" ) +) +fragment.hltIter2IterL3FromL1MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1 ), + clusterCheck = cms.InputTag( "hltIter2IterL3FromL1MuonPixelClusterCheckScoutingNoVtx" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIter2IterL3FromL1MuonPixelLayerTripletsScoutingNoVtx" ) +) +fragment.hltIter2IterL3FromL1MuonPixelHitTripletsScoutingNoVtx = cms.EDProducer( "CAHitTripletEDProducer", + CAThetaCut = cms.double( 0.015 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + maxChi2 = cms.PSet( + value2 = cms.double( 6.0 ), + value1 = cms.double( 100.0 ), + pt1 = cms.double( 0.8 ), + enabled = cms.bool( True ), + pt2 = cms.double( 8.0 ) + ), + doublets = cms.InputTag( "hltIter2IterL3FromL1MuonPixelHitDoubletsScoutingNoVtx" ), + CAHardPtCut = cms.double( 0.3 ), + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.1 ), + useBendingCorrection = cms.bool( True ), + extraHitRPhitolerance = cms.double( 0.032 ) +) +fragment.hltIter2IterL3FromL1MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer", + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + forceKinematicWithRegionDirection = cms.bool( False ), + magneticField = cms.string( "ParabolicMf" ), + SeedMomentumForBOFF = cms.double( 5.0 ), + OriginTransverseErrorMultiplier = cms.double( 1.0 ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MinOneOverPtError = cms.double( 1.0 ), + seedingHitSets = cms.InputTag( "hltIter2IterL3FromL1MuonPixelHitTripletsScoutingNoVtx" ), + propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) +) +fragment.hltIter2IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter2IterL3FromL1MuonPixelSeedsScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter2IterL3FromL1MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "" ) +) +fragment.hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter2IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter2" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +fragment.hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 0 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 3.40282346639E38, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 3.40282346639E38, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 3 ) + ), + ignoreVertices = cms.bool( False ) +) +fragment.hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +fragment.hltIter2IterL3FromL1MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +fragment.hltIterL3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonMergedScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonMergedScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +fragment.hltIterL3MuonAndMuonFromL1MergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIterL3MuonMergedScoutingNoVtx','hltIter2IterL3FromL1MuonMergedScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIterL3MuonMergedScoutingNoVtx','hltIter2IterL3FromL1MuonMergedScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +fragment.hltL3MuonsIterL3LinksScoutingNoVtx = cms.EDProducer( "MuonLinksProducerForHLT", + pMin = cms.double( 2.5 ), + InclusiveTrackerTrackCollection = cms.InputTag( "hltIter2IterL3FromL1MuonMergedScoutingNoVtx" ), + shareHitFraction = cms.double( 0.19 ), + LinkCollection = cms.InputTag( "hltIterL3MuonsFromL2LinksCombinationScoutingNoVtx" ), + ptMin = cms.double( 2.5 ) +) +fragment.hltIterL3MuonsScoutingNoVtx = cms.EDProducer( "MuonIdProducer", + TrackExtractorPSet = cms.PSet( + Diff_z = cms.double( 0.2 ), + inputTrackCollection = cms.InputTag( "hltIter2IterL3FromL1MuonMergedScoutingNoVtx" ), + Chi2Ndof_Max = cms.double( 1.0E64 ), + BeamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), + DR_Veto = cms.double( 0.01 ), + Pt_Min = cms.double( -1.0 ), + DR_Max = cms.double( 1.0 ), + NHits_Min = cms.uint32( 0 ), + Chi2Prob_Min = cms.double( -1.0 ), + Diff_r = cms.double( 0.1 ), + BeamlineOption = cms.string( "BeamSpotFromEvent" ), + ComponentName = cms.string( "TrackExtractor" ) + ), + maxAbsEta = cms.double( 3.0 ), + fillGlobalTrackRefits = cms.bool( False ), + arbitrationCleanerOptions = cms.PSet( + OverlapDTheta = cms.double( 0.02 ), + Overlap = cms.bool( True ), + Clustering = cms.bool( True ), + ME1a = cms.bool( True ), + ClusterDTheta = cms.double( 0.02 ), + ClusterDPhi = cms.double( 0.6 ), + OverlapDPhi = cms.double( 0.0786 ) + ), + globalTrackQualityInputTag = cms.InputTag( "glbTrackQual" ), + fillShowerDigis = cms.bool( False ), + addExtraSoftMuons = cms.bool( False ), + debugWithTruthMatching = cms.bool( False ), + CaloExtractorPSet = cms.PSet( + DR_Veto_H = cms.double( 0.1 ), + CenterConeOnCalIntersection = cms.bool( False ), + NoiseTow_EE = cms.double( 0.15 ), + Noise_EB = cms.double( 0.025 ), + Noise_HE = cms.double( 0.2 ), + DR_Veto_E = cms.double( 0.07 ), + NoiseTow_EB = cms.double( 0.04 ), + Noise_EE = cms.double( 0.1 ), + UseRecHitsFlag = cms.bool( False ), + DR_Max = cms.double( 1.0 ), + DepositLabel = cms.untracked.string( "Cal" ), + Noise_HO = cms.double( 0.2 ), + DR_Veto_HO = cms.double( 0.1 ), + Threshold_H = cms.double( 0.5 ), + PrintTimeReport = cms.untracked.bool( False ), + Threshold_E = cms.double( 0.2 ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "CaloExtractorByAssociator" ), + Threshold_HO = cms.double( 0.5 ), + DepositInstanceLabels = cms.vstring( 'ecal', + 'hcal', + 'ho' ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 1.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( "Notused" ), + CaloTowerCollectionLabel = cms.InputTag( "Notused" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "Notused" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 1.0 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( "Notused" ), + dRHcal = cms.double( 1.0 ), + dRHcalPreselection = cms.double( 1.0 ), + HORecHitCollectionLabel = cms.InputTag( "Notused" ) + ), + Noise_HB = cms.double( 0.2 ) + ), + runArbitrationCleaner = cms.bool( False ), + fillEnergy = cms.bool( False ), + TrackerKinkFinderParameters = cms.PSet( + usePosition = cms.bool( False ), + diagonalOnly = cms.bool( False ) + ), + TimingFillerParameters = cms.PSet( + DTTimingParameters = cms.PSet( + HitError = cms.double( 6.0 ), + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) + ), + debug = cms.bool( False ), + DoWireCorr = cms.bool( False ), + RequireBothProjections = cms.bool( False ), + DTTimeOffset = cms.double( 2.7 ), + PruneCut = cms.double( 10000.0 ), + DTsegments = cms.InputTag( "hltDt4DSegments" ), + UseSegmentT0 = cms.bool( False ), + HitsMin = cms.int32( 5 ), + DropTheta = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ) + ), + UseCSC = cms.bool( True ), + CSCTimingParameters = cms.PSet( + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) + ), + debug = cms.bool( False ), + CSCWireTimeOffset = cms.double( 0.0 ), + CSCStripError = cms.double( 7.0 ), + CSCTimeOffset = cms.double( 0.0 ), + CSCWireError = cms.double( 8.6 ), + PruneCut = cms.double( 100.0 ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + UseStripTime = cms.bool( True ), + CSCStripTimeOffset = cms.double( 0.0 ), + UseWireTime = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ) + ), + ErrorDT = cms.double( 6.0 ), + EcalEnergyCut = cms.double( 0.4 ), + UseECAL = cms.bool( True ), + ErrorEB = cms.double( 2.085 ), + UseDT = cms.bool( True ), + ErrorEE = cms.double( 6.95 ), + ErrorCSC = cms.double( 7.4 ) + ), + inputCollectionTypes = cms.vstring( 'inner tracks', + 'links' ), + arbitrateTrackerMuons = cms.bool( True ), + minCaloCompatibility = cms.double( 0.6 ), + ecalDepositName = cms.string( "ecal" ), + minP = cms.double( 0.0 ), + fillIsolation = cms.bool( False ), + jetDepositName = cms.string( "jets" ), + hoDepositName = cms.string( "ho" ), + writeIsoDeposits = cms.bool( False ), + maxAbsPullX = cms.double( 4.0 ), + maxAbsPullY = cms.double( 9999.0 ), + minPt = cms.double( 8.0 ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( True ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 9999.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( "Notused" ), + CaloTowerCollectionLabel = cms.InputTag( "Notused" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "Notused" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.05 ), + useCalo = cms.bool( False ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( "Notused" ), + dRHcal = cms.double( 9999.0 ), + dRHcalPreselection = cms.double( 0.2 ), + HORecHitCollectionLabel = cms.InputTag( "Notused" ) + ), + storeCrossedHcalRecHits = cms.bool( False ), + JetExtractorPSet = cms.PSet( + JetCollectionLabel = cms.InputTag( "Notused" ), + DR_Veto = cms.double( 0.1 ), + DR_Max = cms.double( 1.0 ), + ExcludeMuonVeto = cms.bool( True ), + PrintTimeReport = cms.untracked.bool( False ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "JetExtractor" ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 0.5 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( "Notused" ), + CaloTowerCollectionLabel = cms.InputTag( "Notused" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "Notused" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.5 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( "Notused" ), + dRHcal = cms.double( 0.5 ), + dRHcalPreselection = cms.double( 0.5 ), + HORecHitCollectionLabel = cms.InputTag( "Notused" ) + ), + Threshold = cms.double( 5.0 ) + ), + fillGlobalTrackQuality = cms.bool( False ), + minPCaloMuon = cms.double( 1.0E9 ), + maxAbsDy = cms.double( 9999.0 ), + fillCaloCompatibility = cms.bool( False ), + fillMatching = cms.bool( True ), + MuonCaloCompatibility = cms.PSet( + delta_eta = cms.double( 0.02 ), + delta_phi = cms.double( 0.02 ), + allSiPMHO = cms.bool( False ), + MuonTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_muons_lowPt_3_1_norm.root" ), + PionTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_pions_lowPt_3_1_norm.root" ) + ), + fillTrackerKink = cms.bool( False ), + ShowerDigiFillerParameters = cms.PSet( + cscDigiCollectionLabel = cms.InputTag( 'muonCSCDigis','MuonCSCStripDigi' ), + dtDigiCollectionLabel = cms.InputTag( "muonDTDigis" ), + digiMaxDistanceX = cms.double( 25.0 ) + ), + hcalDepositName = cms.string( "hcal" ), + sigmaThresholdToFillCandidateP4WithGlobalFit = cms.double( 2.0 ), + inputCollectionLabels = cms.VInputTag( 'hltIter2IterL3FromL1MuonMergedScoutingNoVtx','hltL3MuonsIterL3LinksScoutingNoVtx' ), + trackDepositName = cms.string( "tracker" ), + maxAbsDx = cms.double( 3.0 ), + ptThresholdToFillCandidateP4WithGlobalFit = cms.double( 200.0 ), + minNumberOfMatches = cms.int32( 1 ) +) +fragment.hltIterL3MuonCandidatesScoutingNoVtx = cms.EDProducer( "L3MuonCandidateProducerFromMuons", + InputObjects = cms.InputTag( "hltIterL3MuonsScoutingNoVtx" ) +) +fragment.hltDisplacedmumuVtxNoMatchingProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", + Src = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), + PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtx" ), + MinPt = cms.double( 0.0 ), + ChargeOpt = cms.int32( 0 ), + MaxEta = cms.double( 2.5 ), + MaxInvMass = cms.double( 99999.0 ), + MinPtPair = cms.double( 0.0 ), + matchToPrevious = cms.bool( False ), + MinInvMass = cms.double( 0.0 ) +) +fragment.hltRecHitInRegionForMuonsESScoutingNoVtx = cms.EDProducer( "MuonHLTRechitInRegionsProducer", + l1LowerThr = cms.double( 0.0 ), + doIsolated = cms.bool( True ), + useUncalib = cms.bool( False ), + regionEtaMargin = cms.double( 0.4 ), + ecalhitLabels = cms.VInputTag( 'hltEcalPreshowerRecHit:EcalRecHitsES' ), + regionPhiMargin = cms.double( 0.4 ), + l1TagNonIsolated = cms.InputTag( "NotUsed" ), + l1UpperThr = cms.double( 999.0 ), + l1LowerThrIgnoreIsolation = cms.double( 100.0 ), + productLabels = cms.vstring( 'EcalRegionalRecHitsES' ), + l1TagIsolated = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) +) +fragment.hltParticleFlowRecHitECALForMuonsMFScoutingNoVtx = cms.EDProducer( "PFRecHitProducer", + producers = cms.VPSet( + cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsMFnoVtx','EcalRegionalRecHitsEB' ), + srFlags = cms.InputTag( "" ), + name = cms.string( "PFEBRecHitCreator" ), + qualityTests = cms.VPSet( + cms.PSet( name = cms.string( "PFRecHitQTestDBThreshold" ), + applySelectionsToAllCrystals = cms.bool( True ) + ), + cms.PSet( topologicalCleaning = cms.bool( True ), + skipTTRecoveredHits = cms.bool( True ), + cleaningThreshold = cms.double( 2.0 ), + name = cms.string( "PFRecHitQTestECAL" ), + timingCleaning = cms.bool( True ) + ) + ) + ), + cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsMFnoVtx','EcalRegionalRecHitsEE' ), + srFlags = cms.InputTag( "" ), + name = cms.string( "PFEERecHitCreator" ), + qualityTests = cms.VPSet( + cms.PSet( name = cms.string( "PFRecHitQTestDBThreshold" ), + applySelectionsToAllCrystals = cms.bool( True ) + ), + cms.PSet( topologicalCleaning = cms.bool( True ), + skipTTRecoveredHits = cms.bool( True ), + cleaningThreshold = cms.double( 2.0 ), + name = cms.string( "PFRecHitQTestECAL" ), + timingCleaning = cms.bool( True ) + ) + ) + ) + ), + navigator = cms.PSet( + barrel = cms.PSet( ), + endcap = cms.PSet( ), + name = cms.string( "PFRecHitECALNavigator" ) + ) +) +fragment.hltParticleFlowRecHitPSForMuonsScoutingNoVtx = cms.EDProducer( "PFRecHitProducer", + producers = cms.VPSet( + cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsESScoutingNoVtx','EcalRegionalRecHitsES' ), + name = cms.string( "PFPSRecHitCreator" ), + qualityTests = cms.VPSet( + cms.PSet( threshold = cms.double( 7.0E-6 ), + name = cms.string( "PFRecHitQTestThreshold" ) + ) + ) + ) + ), + navigator = cms.PSet( name = cms.string( "PFRecHitPreshowerNavigator" ) ) +) +fragment.hltParticleFlowClusterECALUncorrectedForMuonsMFScoutingNoVtx = cms.EDProducer( "PFClusterProducer", + pfClusterBuilder = cms.PSet( + minFracTot = cms.double( 1.0E-20 ), + stoppingTolerance = cms.double( 1.0E-8 ), + positionCalc = cms.PSet( + minAllowedNormalization = cms.double( 1.0E-9 ), + posCalcNCrystals = cms.int32( 9 ), + algoName = cms.string( "Basic2DGenericPFlowPositionCalc" ), + logWeightDenominator = cms.double( 0.08 ), + minFractionInCalc = cms.double( 1.0E-9 ), + timeResolutionCalcBarrel = cms.PSet( + corrTermLowE = cms.double( 0.0510871 ), + threshLowE = cms.double( 0.5 ), + noiseTerm = cms.double( 1.10889 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 1.31883 ), + threshHighE = cms.double( 5.0 ), + constantTerm = cms.double( 0.428192 ) + ), + timeResolutionCalcEndcap = cms.PSet( + corrTermLowE = cms.double( 0.0 ), + threshLowE = cms.double( 1.0 ), + noiseTerm = cms.double( 5.72489999999 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 6.92683000001 ), + threshHighE = cms.double( 10.0 ), + constantTerm = cms.double( 0.0 ) + ) + ), + maxIterations = cms.uint32( 50 ), + positionCalcForConvergence = cms.PSet( + minAllowedNormalization = cms.double( 0.0 ), + T0_ES = cms.double( 1.2 ), + algoName = cms.string( "ECAL2DPositionCalcWithDepthCorr" ), + T0_EE = cms.double( 3.1 ), + T0_EB = cms.double( 7.4 ), + X0 = cms.double( 0.89 ), + minFractionInCalc = cms.double( 0.0 ), + W0 = cms.double( 4.2 ) + ), + allCellsPositionCalc = cms.PSet( + minAllowedNormalization = cms.double( 1.0E-9 ), + posCalcNCrystals = cms.int32( -1 ), + algoName = cms.string( "Basic2DGenericPFlowPositionCalc" ), + logWeightDenominator = cms.double( 0.08 ), + minFractionInCalc = cms.double( 1.0E-9 ), + timeResolutionCalcBarrel = cms.PSet( + corrTermLowE = cms.double( 0.0510871 ), + threshLowE = cms.double( 0.5 ), + noiseTerm = cms.double( 1.10889 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 1.31883 ), + threshHighE = cms.double( 5.0 ), + constantTerm = cms.double( 0.428192 ) + ), + timeResolutionCalcEndcap = cms.PSet( + corrTermLowE = cms.double( 0.0 ), + threshLowE = cms.double( 1.0 ), + noiseTerm = cms.double( 5.72489999999 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 6.92683000001 ), + threshHighE = cms.double( 10.0 ), + constantTerm = cms.double( 0.0 ) + ) + ), + algoName = cms.string( "Basic2DGenericPFlowClusterizer" ), + recHitEnergyNorms = cms.VPSet( + cms.PSet( recHitEnergyNorm = cms.double( 0.08 ), + detector = cms.string( "ECAL_BARREL" ) + ), + cms.PSet( recHitEnergyNorm = cms.double( 0.3 ), + detector = cms.string( "ECAL_ENDCAP" ) + ) + ), + showerSigma = cms.double( 1.5 ), + minFractionToKeep = cms.double( 1.0E-7 ), + excludeOtherSeeds = cms.bool( True ) + ), + positionReCalc = cms.PSet( + minAllowedNormalization = cms.double( 0.0 ), + T0_ES = cms.double( 1.2 ), + algoName = cms.string( "ECAL2DPositionCalcWithDepthCorr" ), + T0_EE = cms.double( 3.1 ), + T0_EB = cms.double( 7.4 ), + X0 = cms.double( 0.89 ), + minFractionInCalc = cms.double( 0.0 ), + W0 = cms.double( 4.2 ) + ), + initialClusteringStep = cms.PSet( + thresholdsByDetector = cms.VPSet( + cms.PSet( gatheringThreshold = cms.double( 0.08 ), + gatheringThresholdPt = cms.double( 0.0 ), + detector = cms.string( "ECAL_BARREL" ) + ), + cms.PSet( gatheringThreshold = cms.double( 0.3 ), + gatheringThresholdPt = cms.double( 0.0 ), + detector = cms.string( "ECAL_ENDCAP" ) + ) + ), + algoName = cms.string( "Basic2DGenericTopoClusterizer" ), + useCornerCells = cms.bool( True ) + ), + seedCleaners = cms.VPSet( + ), + energyCorrector = cms.PSet( ), + recHitCleaners = cms.VPSet( + ), + seedFinder = cms.PSet( + thresholdsByDetector = cms.VPSet( + cms.PSet( seedingThresholdPt = cms.double( 0.15 ), + seedingThreshold = cms.double( 0.6 ), + detector = cms.string( "ECAL_ENDCAP" ) + ), + cms.PSet( seedingThresholdPt = cms.double( 0.0 ), + seedingThreshold = cms.double( 0.23 ), + detector = cms.string( "ECAL_BARREL" ) + ) + ), + algoName = cms.string( "LocalMaximumSeedFinder" ), + nNeighbours = cms.int32( 8 ) + ), + recHitsSource = cms.InputTag( "hltParticleFlowRecHitECALForMuonsMFScoutingNoVtx" ) +) +fragment.hltParticleFlowClusterPSForMuonsScoutingNoVtx = cms.EDProducer( "PFClusterProducer", + pfClusterBuilder = cms.PSet( + minFracTot = cms.double( 1.0E-20 ), + stoppingTolerance = cms.double( 1.0E-8 ), + positionCalc = cms.PSet( + minAllowedNormalization = cms.double( 1.0E-9 ), + posCalcNCrystals = cms.int32( -1 ), + algoName = cms.string( "Basic2DGenericPFlowPositionCalc" ), + logWeightDenominator = cms.double( 6.0E-5 ), + minFractionInCalc = cms.double( 1.0E-9 ) + ), + maxIterations = cms.uint32( 50 ), + algoName = cms.string( "Basic2DGenericPFlowClusterizer" ), + recHitEnergyNorms = cms.VPSet( + cms.PSet( recHitEnergyNorm = cms.double( 6.0E-5 ), + detector = cms.string( "PS1" ) + ), + cms.PSet( recHitEnergyNorm = cms.double( 6.0E-5 ), + detector = cms.string( "PS2" ) + ) + ), + showerSigma = cms.double( 0.3 ), + minFractionToKeep = cms.double( 1.0E-7 ), + excludeOtherSeeds = cms.bool( True ) + ), + positionReCalc = cms.PSet( ), + initialClusteringStep = cms.PSet( + thresholdsByDetector = cms.VPSet( + cms.PSet( gatheringThreshold = cms.double( 6.0E-5 ), + gatheringThresholdPt = cms.double( 0.0 ), + detector = cms.string( "PS1" ) + ), + cms.PSet( gatheringThreshold = cms.double( 6.0E-5 ), + gatheringThresholdPt = cms.double( 0.0 ), + detector = cms.string( "PS2" ) + ) + ), + algoName = cms.string( "Basic2DGenericTopoClusterizer" ), + useCornerCells = cms.bool( False ) + ), + seedCleaners = cms.VPSet( + ), + energyCorrector = cms.PSet( ), + recHitCleaners = cms.VPSet( + ), + seedFinder = cms.PSet( + thresholdsByDetector = cms.VPSet( + cms.PSet( seedingThresholdPt = cms.double( 0.0 ), + seedingThreshold = cms.double( 1.2E-4 ), + detector = cms.string( "PS1" ) + ), + cms.PSet( seedingThresholdPt = cms.double( 0.0 ), + seedingThreshold = cms.double( 1.2E-4 ), + detector = cms.string( "PS2" ) + ) + ), + algoName = cms.string( "LocalMaximumSeedFinder" ), + nNeighbours = cms.int32( 4 ) + ), + recHitsSource = cms.InputTag( "hltParticleFlowRecHitPSForMuonsScoutingNoVtx" ) +) +fragment.hltParticleFlowClusterECALForMuonsMFScoutingNoVtx = cms.EDProducer( "CorrectedECALPFClusterProducer", + inputPS = cms.InputTag( "hltParticleFlowClusterPSForMuonsScoutingNoVtx" ), + minimumPSEnergy = cms.double( 0.0 ), + energyCorrector = cms.PSet( applyCrackCorrections = cms.bool( False ) ), + inputECAL = cms.InputTag( "hltParticleFlowClusterECALUncorrectedForMuonsMFScoutingNoVtx" ) +) +fragment.hltMuonEcalMFPFClusterIsoForMuonsScoutingNoVtx = cms.EDProducer( "MuonHLTEcalPFClusterIsolationProducer", + effectiveAreas = cms.vdouble( 0.35, 0.193 ), + doRhoCorrection = cms.bool( True ), + etaStripBarrel = cms.double( 0.0 ), + energyEndcap = cms.double( 0.0 ), + rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetECALMFForMuons" ), + pfClusterProducer = cms.InputTag( "hltParticleFlowClusterECALForMuonsMFScoutingNoVtx" ), + etaStripEndcap = cms.double( 0.0 ), + drVetoBarrel = cms.double( 0.05 ), + drMax = cms.double( 0.3 ), + energyBarrel = cms.double( 0.0 ), + absEtaLowEdges = cms.vdouble( 0.0, 1.479 ), + drVetoEndcap = cms.double( 0.05 ), + rhoMax = cms.double( 9.9999999E7 ), + rhoScale = cms.double( 1.0 ), + recoCandidateProducer = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) +) +fragment.hltMuonHcalPFClusterIsoForMuonsScoutingNoVtx = cms.EDProducer( "MuonHLTHcalPFClusterIsolationProducer", + effectiveAreas = cms.vdouble( 0.11, 0.163 ), + useHF = cms.bool( False ), + useEt = cms.bool( True ), + etaStripBarrel = cms.double( 0.0 ), + pfClusterProducerHFHAD = cms.InputTag( "" ), + energyEndcap = cms.double( 0.0 ), + rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAllCalo" ), + etaStripEndcap = cms.double( 0.0 ), + drVetoBarrel = cms.double( 0.1 ), + pfClusterProducerHCAL = cms.InputTag( "hltParticleFlowClusterHCAL" ), + drMax = cms.double( 0.3 ), + doRhoCorrection = cms.bool( True ), + energyBarrel = cms.double( 0.0 ), + absEtaLowEdges = cms.vdouble( 0.0, 1.479 ), + drVetoEndcap = cms.double( 0.1 ), + rhoMax = cms.double( 9.9999999E7 ), + pfClusterProducerHFEM = cms.InputTag( "" ), + rhoScale = cms.double( 1.0 ), + recoCandidateProducer = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) +) +fragment.hltL3MuonVertexScoutingNoVtx = cms.EDProducer( "VertexFromTrackProducer", + verbose = cms.untracked.bool( False ), + useTriggerFilterElectrons = cms.bool( False ), + beamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), + isRecoCandidate = cms.bool( True ), + trackLabel = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), + useTriggerFilterMuons = cms.bool( False ), + useBeamSpot = cms.bool( True ), + vertexLabel = cms.InputTag( "notUsed" ), + triggerFilterElectronsSrc = cms.InputTag( "notUsed" ), + triggerFilterMuonsSrc = cms.InputTag( "notUsed" ), + useVertex = cms.bool( False ) +) +fragment.hltPixelTracksTrackingRegionsL3MuonScoutingNoVtx = cms.EDProducer( "GlobalTrackingRegionWithVerticesEDProducer", + RegionPSet = cms.PSet( + useFixedError = cms.bool( True ), + nSigmaZ = cms.double( 4.0 ), + VertexCollection = cms.InputTag( "hltL3MuonVertexScoutingNoVtx" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + useFoundVertices = cms.bool( True ), + fixedError = cms.double( 0.5 ), + sigmaZVertex = cms.double( 4.0 ), + useFakeVertices = cms.bool( True ), + ptMin = cms.double( 0.9 ), + originRadius = cms.double( 0.2 ), + precise = cms.bool( True ), + useMultipleScattering = cms.bool( False ) + ) +) +fragment.hltPixelTracksHitDoubletsL3MuonScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsL3MuonScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltPixelLayerQuadruplets" ) +) +fragment.hltPixelTracksHitQuadrupletsL3MuonScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltPixelTracksHitDoubletsL3MuonScoutingNoVtx" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 50.0 ), + value1 = cms.double( 200.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.002 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.2 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +fragment.hltPixelTracksL3MuonScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", + Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), + passLabel = cms.string( "" ), + Fitter = cms.InputTag( "hltPixelTracksL3MuonFitter" ), + Filter = cms.InputTag( "hltPixelTracksL3MuonFilter" ), + SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsL3MuonScoutingNoVtx" ) +) +fragment.hltPixelVerticesL3MuonScoutingNoVtx = cms.EDProducer( "PixelVertexProducer", + WtAverage = cms.bool( True ), + Method2 = cms.bool( True ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparer" ) ), + Verbosity = cms.int32( 0 ), + UseError = cms.bool( True ), + TrackCollection = cms.InputTag( "hltPixelTracksL3MuonScoutingNoVtx" ), + PtMin = cms.double( 1.0 ), + NTrkMin = cms.int32( 2 ), + ZOffset = cms.double( 5.0 ), + Finder = cms.string( "DivisiveVertexFinder" ), + ZSeparation = cms.double( 0.05 ) +) +fragment.hltPixelTracksTrackingRegionsForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", + RegionPSet = cms.PSet( + vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), + zErrorVetex = cms.double( 0.2 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + zErrorBeamSpot = cms.double( 24.2 ), + maxNVertices = cms.int32( 1 ), + maxNRegions = cms.int32( 10 ), + nSigmaZVertex = cms.double( 3.0 ), + nSigmaZBeamSpot = cms.double( 4.0 ), + ptMin = cms.double( 0.9 ), + mode = cms.string( "VerticesFixed" ), + input = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), + searchOpt = cms.bool( False ), + whereToUseMeasurementTracker = cms.string( "Never" ), + originRadius = cms.double( 0.1 ), + measurementTrackerName = cms.InputTag( "" ), + precise = cms.bool( True ), + deltaEta = cms.double( 0.3 ), + deltaPhi = cms.double( 0.3 ) + ) +) +fragment.hltPixelTracksHitDoubletsForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsForSeedsL3MuonScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltPixelLayerQuadruplets" ) +) +fragment.hltPixelTracksHitQuadrupletsForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltPixelTracksHitDoubletsForSeedsL3MuonScoutingNoVtx" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 50.0 ), + value1 = cms.double( 200.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.002 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.2 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +fragment.hltPixelTracksForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", + Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), + passLabel = cms.string( "" ), + Fitter = cms.InputTag( "hltPixelTracksForSeedsL3MuonFitter" ), + Filter = cms.InputTag( "hltPixelTracksForSeedsL3MuonFilter" ), + SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsForSeedsL3MuonScoutingNoVtx" ) +) +fragment.hltIter0L3MuonPixelSeedsFromPixelTracksScoutingNoVtx = cms.EDProducer( "SeedGeneratorFromProtoTracksEDProducer", + includeFourthHit = cms.bool( False ), + useEventsWithNoVertex = cms.bool( True ), + originHalfLength = cms.double( 0.2 ), + useProtoTrackKinematics = cms.bool( False ), + usePV = cms.bool( False ), + SeedCreatorPSet = cms.PSet( refToPSet_ = cms.string( "HLTSeedFromProtoTracks" ) ), + InputVertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + InputCollection = cms.InputTag( "hltPixelTracksForSeedsL3MuonScoutingNoVtx" ), + originRadius = cms.double( 0.1 ) +) +fragment.hltIter0L3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter0L3MuonPixelSeedsFromPixelTracksScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter0GroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "" ) +) +fragment.hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter0L3MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIterX" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +fragment.hltIter0L3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 3, 4 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 15.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 0.003 ), + dr_par2 = cms.vdouble( 0.3, 0.3, 0.3 ), + dr_par1 = cms.vdouble( 0.4, 0.4, 0.4 ), + dr_exp = cms.vint32( 4, 4, 4 ), + d0err_par = cms.vdouble( 0.001, 0.001, 0.001 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 3, 4 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 0.4, 0.4, 0.4 ), + dz_par2 = cms.vdouble( 0.35, 0.35, 0.35 ), + dz_exp = cms.vint32( 4, 4, 4 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 16.0 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 4 ) + ), + ignoreVertices = cms.bool( False ) +) +fragment.hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter0L3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter0L3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +fragment.hltIter1L3MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", + trackClassifier = cms.InputTag( '','QualityMasks' ), + minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), + maxChi2 = cms.double( 9.0 ), + trajectories = cms.InputTag( "hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "" ), + stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), + overrideTrkQuals = cms.InputTag( "" ), + pixelClusters = cms.InputTag( "hltSiPixelClusters" ), + TrackQuality = cms.string( "highPurity" ) +) +fragment.hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), + OnDemand = cms.bool( False ), + src = cms.InputTag( "hltSiStripClusters" ) +) +fragment.hltIter1L3MuonPixelLayerQuadrupletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3+BPix4', + 'BPix1+BPix2+BPix3+FPix1_pos', + 'BPix1+BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos+FPix2_pos', + 'BPix1+BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos+FPix3_pos', + 'BPix1+FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +fragment.hltIter1L3MuonPixelTrackingRegionsScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", + RegionPSet = cms.PSet( + vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), + zErrorVetex = cms.double( 0.1 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + zErrorBeamSpot = cms.double( 24.2 ), + maxNVertices = cms.int32( 1 ), + maxNRegions = cms.int32( 10 ), + nSigmaZVertex = cms.double( 3.0 ), + nSigmaZBeamSpot = cms.double( 4.0 ), + ptMin = cms.double( 0.3 ), + mode = cms.string( "VerticesFixed" ), + input = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), + searchOpt = cms.bool( False ), + whereToUseMeasurementTracker = cms.string( "ForSiStrips" ), + originRadius = cms.double( 0.05 ), + measurementTrackerName = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + precise = cms.bool( True ), + deltaEta = cms.double( 0.3 ), + deltaPhi = cms.double( 0.3 ) + ) +) +fragment.hltIter1L3MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIter1L3MuonPixelTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "hltIter1L3MuonPixelClusterCheck" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIter1L3MuonPixelLayerQuadrupletsScoutingNoVtx" ) +) +fragment.hltIter1L3MuonPixelHitQuadrupletsScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltIter1L3MuonPixelHitDoubletsScoutingNoVtx" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 150.0 ), + value1 = cms.double( 2000.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.004 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "none" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.3 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +fragment.hltIter1L3MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer", + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + forceKinematicWithRegionDirection = cms.bool( False ), + magneticField = cms.string( "ParabolicMf" ), + SeedMomentumForBOFF = cms.double( 5.0 ), + OriginTransverseErrorMultiplier = cms.double( 1.0 ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MinOneOverPtError = cms.double( 1.0 ), + seedingHitSets = cms.InputTag( "hltIter1L3MuonPixelHitQuadrupletsScoutingNoVtx" ), + propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) +) +fragment.hltIter1L3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter1L3MuonPixelSeedsScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter1GroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "" ) +) +fragment.hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter1L3MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIterX" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +fragment.hltIter1L3MuonTrackCutClassifierPromptScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 2 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 15.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 0.003 ), + dr_par2 = cms.vdouble( 3.40282346639E38, 1.0, 0.85 ), + dr_par1 = cms.vdouble( 3.40282346639E38, 1.0, 0.9 ), + dr_exp = cms.vint32( 3, 3, 3 ), + d0err_par = cms.vdouble( 0.001, 0.001, 0.001 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 3.40282346639E38, 1.0, 0.9 ), + dz_par2 = cms.vdouble( 3.40282346639E38, 1.0, 0.8 ), + dz_exp = cms.vint32( 3, 3, 3 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 3.40282346639E38, 1.0, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 16.0 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 3.40282346639E38, 1.0, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 3 ) + ), + ignoreVertices = cms.bool( False ) +) +fragment.hltIter1L3MuonTrackCutClassifierDetachedScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 1 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 15.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 0.003 ), + dr_par2 = cms.vdouble( 1.0, 1.0, 1.0 ), + dr_par1 = cms.vdouble( 1.0, 1.0, 1.0 ), + dr_exp = cms.vint32( 4, 4, 4 ), + d0err_par = cms.vdouble( 0.001, 0.001, 0.001 ) + ), + maxLostLayers = cms.vint32( 99, 3, 3 ), + min3DLayers = cms.vint32( 1, 2, 3 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 1.0, 1.0, 1.0 ), + dz_par2 = cms.vdouble( 1.0, 1.0, 1.0 ), + dz_exp = cms.vint32( 4, 4, 4 ) + ), + minNVtxTrk = cms.int32( 2 ), + maxDz = cms.vdouble( 3.40282346639E38, 1.0, 3.40282346639E38 ), + minNdof = cms.vdouble( -1.0, -1.0, -1.0 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 16.0 ), + maxChi2n = cms.vdouble( 1.0, 0.7, 0.4 ), + maxDr = cms.vdouble( 3.40282346639E38, 1.0, 3.40282346639E38 ), + minLayers = cms.vint32( 5, 5, 5 ) + ), + ignoreVertices = cms.bool( False ) +) +fragment.hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx = cms.EDProducer( "ClassifierMerger", + inputClassifiers = cms.vstring( 'hltIter1L3MuonTrackCutClassifierPromptScoutingNoVtx', + 'hltIter1L3MuonTrackCutClassifierDetachedScoutingNoVtx' ) ) -fragment.hltIter1L3MuonTrackSelectionHighPurityNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", +fragment.hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", minQuality = cms.string( "highPurity" ), copyExtras = cms.untracked.bool( True ), copyTrajectories = cms.untracked.bool( False ), - originalSource = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksNoVtx" ), - originalQualVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedNoVtx','QualityMasks' ), - originalMVAVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedNoVtx','MVAValues' ) + originalSource = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx','MVAValues' ) ) -fragment.hltIter1L3MuonMergedNoVtx = cms.EDProducer( "TrackListMerger", +fragment.hltIter1L3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", ShareFrac = cms.double( 0.19 ), writeOnlyTrkQuals = cms.bool( False ), MinPT = cms.double( 0.05 ), allowFirstHitShare = cms.bool( True ), copyExtras = cms.untracked.bool( True ), Epsilon = cms.double( -0.001 ), - selectedTrackQuals = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityNoVtx','hltIter1L3MuonTrackSelectionHighPurityNoVtx' ), + selectedTrackQuals = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx' ), indivShareFrac = cms.vdouble( 1.0, 1.0 ), MaxNormalizedChisq = cms.double( 1000.0 ), copyMVA = cms.bool( False ), @@ -79700,27 +83264,27 @@ ), MinFound = cms.int32( 3 ), hasSelector = cms.vint32( 0, 0 ), - TrackProducers = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityNoVtx','hltIter1L3MuonTrackSelectionHighPurityNoVtx' ), + TrackProducers = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx' ), trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), newQuality = cms.string( "confirmed" ) ) -fragment.hltIter2L3MuonClustersRefRemovalNoVtx = cms.EDProducer( "TrackClusterRemover", +fragment.hltIter2L3MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", trackClassifier = cms.InputTag( '','QualityMasks' ), minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), maxChi2 = cms.double( 16.0 ), - trajectories = cms.InputTag( "hltIter1L3MuonTrackSelectionHighPurityNoVtx" ), - oldClusterRemovalInfo = cms.InputTag( "hltIter1L3MuonClustersRefRemovalNoVtx" ), + trajectories = cms.InputTag( "hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), overrideTrkQuals = cms.InputTag( "" ), pixelClusters = cms.InputTag( "hltSiPixelClusters" ), TrackQuality = cms.string( "highPurity" ) ) -fragment.hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", - clustersToSkip = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), +fragment.hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter2L3MuonClustersRefRemovalScoutingNoVtx" ), OnDemand = cms.bool( False ), src = cms.InputTag( "hltSiStripClusters" ) ) -fragment.hltIter2L3MuonPixelLayerTripletsNoVtx = cms.EDProducer( "SeedingLayersEDProducer", +fragment.hltIter2L3MuonPixelLayerTripletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", layerList = cms.vstring( 'BPix1+BPix2+BPix3', 'BPix2+BPix3+BPix4', 'BPix1+BPix3+BPix4', @@ -79741,7 +83305,7 @@ FPix = cms.PSet( hitErrorRPhi = cms.double( 0.0051 ), TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), - skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), + skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalScoutingNoVtx" ), useErrorsFromParam = cms.bool( True ), hitErrorRZ = cms.double( 0.0036 ), HitProducer = cms.string( "hltSiPixelRecHits" ) @@ -79753,16 +83317,16 @@ BPix = cms.PSet( hitErrorRPhi = cms.double( 0.0027 ), TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), - skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), + skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalScoutingNoVtx" ), useErrorsFromParam = cms.bool( True ), hitErrorRZ = cms.double( 0.006 ), HitProducer = cms.string( "hltSiPixelRecHits" ) ), TIB = cms.PSet( ) ) -fragment.hltIter2L3MuonPixelTrackingRegionsNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", +fragment.hltIter2L3MuonPixelTrackingRegionsScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", RegionPSet = cms.PSet( - vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), zErrorVetex = cms.double( 0.05 ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), zErrorBeamSpot = cms.double( 24.2 ), @@ -79772,18 +83336,18 @@ nSigmaZBeamSpot = cms.double( 4.0 ), ptMin = cms.double( 0.8 ), mode = cms.string( "VerticesFixed" ), - input = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + input = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), searchOpt = cms.bool( False ), whereToUseMeasurementTracker = cms.string( "ForSiStrips" ), originRadius = cms.double( 0.025 ), - measurementTrackerName = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + measurementTrackerName = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), precise = cms.bool( True ), deltaEta = cms.double( 0.3 ), deltaPhi = cms.double( 0.3 ) ) ) -fragment.hltIter2L3MuonPixelHitDoubletsNoVtx = cms.EDProducer( "HitPairEDProducer", - trackingRegions = cms.InputTag( "hltIter2L3MuonPixelTrackingRegionsNoVtx" ), +fragment.hltIter2L3MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIter2L3MuonPixelTrackingRegionsScoutingNoVtx" ), layerPairs = cms.vuint32( 0, 1 ), clusterCheck = cms.InputTag( "hltIter2L3MuonPixelClusterCheck" ), produceSeedingHitSets = cms.bool( False ), @@ -79791,9 +83355,9 @@ trackingRegionsSeedingLayers = cms.InputTag( "" ), maxElementTotal = cms.uint32( 50000000 ), maxElement = cms.uint32( 0 ), - seedingLayers = cms.InputTag( "hltIter2L3MuonPixelLayerTripletsNoVtx" ) + seedingLayers = cms.InputTag( "hltIter2L3MuonPixelLayerTripletsScoutingNoVtx" ) ) -fragment.hltIter2L3MuonPixelHitTripletsNoVtx = cms.EDProducer( "CAHitTripletEDProducer", +fragment.hltIter2L3MuonPixelHitTripletsScoutingNoVtx = cms.EDProducer( "CAHitTripletEDProducer", CAThetaCut = cms.double( 0.004 ), CAPhiCut_byTriplets = cms.VPSet( cms.PSet( seedingLayers = cms.string( "" ), @@ -79807,7 +83371,7 @@ enabled = cms.bool( True ), pt2 = cms.double( 8.0 ) ), - doublets = cms.InputTag( "hltIter2L3MuonPixelHitDoubletsNoVtx" ), + doublets = cms.InputTag( "hltIter2L3MuonPixelHitDoubletsScoutingNoVtx" ), CAHardPtCut = cms.double( 0.3 ), SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), CAThetaCut_byTriplets = cms.VPSet( @@ -79819,7 +83383,7 @@ useBendingCorrection = cms.bool( True ), extraHitRPhitolerance = cms.double( 0.032 ) ) -fragment.hltIter2L3MuonPixelSeedsNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsEDProducer", +fragment.hltIter2L3MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsEDProducer", SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), forceKinematicWithRegionDirection = cms.bool( False ), magneticField = cms.string( "ParabolicMf" ), @@ -79827,11 +83391,11 @@ OriginTransverseErrorMultiplier = cms.double( 1.0 ), TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), MinOneOverPtError = cms.double( 1.0 ), - seedingHitSets = cms.InputTag( "hltIter2L3MuonPixelHitTripletsNoVtx" ), + seedingHitSets = cms.InputTag( "hltIter2L3MuonPixelHitTripletsScoutingNoVtx" ), propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) ) -fragment.hltIter2L3MuonCkfTrackCandidatesNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", - src = cms.InputTag( "hltIter2L3MuonPixelSeedsNoVtx" ), +fragment.hltIter2L3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter2L3MuonPixelSeedsScoutingNoVtx" ), maxSeedsBeforeCleaning = cms.uint32( 1000 ), SimpleMagneticField = cms.string( "ParabolicMf" ), TransientInitialStateEstimatorParameters = cms.PSet( @@ -79840,7 +83404,7 @@ propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) ), TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), - MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), cleanTrajectoryAfterInOut = cms.bool( False ), useHitsSplitting = cms.bool( False ), RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), @@ -79851,12 +83415,12 @@ NavigationSchool = cms.string( "SimpleNavigationSchool" ), TrajectoryBuilder = cms.string( "" ) ) -fragment.hltIter2L3MuonCtfWithMaterialTracksNoVtx = cms.EDProducer( "TrackProducer", - src = cms.InputTag( "hltIter2L3MuonCkfTrackCandidatesNoVtx" ), +fragment.hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter2L3MuonCkfTrackCandidatesScoutingNoVtx" ), SimpleMagneticField = cms.string( "ParabolicMf" ), clusterRemovalInfo = cms.InputTag( "" ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), - MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), Fitter = cms.string( "hltESPFittingSmootherIT" ), useHitsSplitting = cms.bool( False ), MeasurementTracker = cms.string( "" ), @@ -79869,10 +83433,10 @@ useSimpleMF = cms.bool( True ), Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) ) -fragment.hltIter2L3MuonTrackCutClassifierNoVtx = cms.EDProducer( "TrackCutClassifier", - src = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksNoVtx" ), +fragment.hltIter2L3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx" ), beamspot = cms.InputTag( "hltOnlineBeamSpot" ), - vertices = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), mva = cms.PSet( minPixelHits = cms.vint32( 0, 0, 0 ), @@ -79901,22 +83465,22 @@ ), ignoreVertices = cms.bool( False ) ) -fragment.hltIter2L3MuonTrackSelectionHighPurityNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", +fragment.hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", minQuality = cms.string( "highPurity" ), copyExtras = cms.untracked.bool( True ), copyTrajectories = cms.untracked.bool( False ), - originalSource = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksNoVtx" ), - originalQualVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierNoVtx','QualityMasks' ), - originalMVAVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierNoVtx','MVAValues' ) + originalSource = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) ) -fragment.hltIter2L3MuonMergedNoVtx = cms.EDProducer( "TrackListMerger", +fragment.hltIter2L3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", ShareFrac = cms.double( 0.19 ), writeOnlyTrkQuals = cms.bool( False ), MinPT = cms.double( 0.05 ), allowFirstHitShare = cms.bool( True ), copyExtras = cms.untracked.bool( True ), Epsilon = cms.double( -0.001 ), - selectedTrackQuals = cms.VInputTag( 'hltIter1L3MuonMergedNoVtx','hltIter2L3MuonTrackSelectionHighPurityNoVtx' ), + selectedTrackQuals = cms.VInputTag( 'hltIter1L3MuonMergedScoutingNoVtx','hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx' ), indivShareFrac = cms.vdouble( 1.0, 1.0 ), MaxNormalizedChisq = cms.double( 1000.0 ), copyMVA = cms.bool( False ), @@ -79929,11 +83493,11 @@ ), MinFound = cms.int32( 3 ), hasSelector = cms.vint32( 0, 0 ), - TrackProducers = cms.VInputTag( 'hltIter1L3MuonMergedNoVtx','hltIter2L3MuonTrackSelectionHighPurityNoVtx' ), + TrackProducers = cms.VInputTag( 'hltIter1L3MuonMergedScoutingNoVtx','hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx' ), trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), newQuality = cms.string( "confirmed" ) ) -fragment.hltMuonTkRelIsolationCut0p09MapNoVtx = cms.EDProducer( "L3MuonCombinedRelativeIsolationProducer", +fragment.hltMuonTkRelIsolationCut0p09MapScoutingNoVtx = cms.EDProducer( "L3MuonCombinedRelativeIsolationProducer", printDebug = cms.bool( False ), CutsPSet = cms.PSet( applyCutsORmaxNTracks = cms.bool( False ), @@ -79945,7 +83509,7 @@ ), TrkExtractorPSet = cms.PSet( Diff_z = cms.double( 0.2 ), - inputTrackCollection = cms.InputTag( "hltIter2L3MuonMergedNoVtx" ), + inputTrackCollection = cms.InputTag( "hltIter2L3MuonMergedScoutingNoVtx" ), Chi2Ndof_Max = cms.double( 1.0E64 ), BeamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), DR_Veto = cms.double( 0.01 ), @@ -79980,188 +83544,10 @@ ComponentName = cms.string( "CaloExtractor" ), Weight_E = cms.double( 1.0 ) ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + inputMuonCollection = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), UseRhoCorrectedCaloDeposits = cms.bool( False ), UseCaloIso = cms.bool( False ) ) -fragment.hltPreDSTDoubleMu3noVtxCaloScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltDimuon3L1Filtered0 = cms.EDFilter( "HLTMuonL1TFilter", - saveTags = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltL1sDoubleMuIorTripleMuIorQuadMu" ), - MinPt = cms.double( 0.0 ), - MinN = cms.int32( 2 ), - MaxEta = cms.double( 2.5 ), - CentralBxOnly = cms.bool( True ), - SelectQualities = cms.vint32( ), - CandTag = cms.InputTag( 'hltGtStage2Digis','Muon' ) -) -fragment.hltDimuon3L2PreFiltered0 = cms.EDFilter( "HLTMuonL2FromL1TPreFilter", - saveTags = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - CutOnChambers = cms.bool( False ), - PreviousCandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - MinPt = cms.double( 0.0 ), - MinN = cms.int32( 0 ), - SeedMapTag = cms.InputTag( "hltL2Muons" ), - MaxEta = cms.double( 2.5 ), - MinNhits = cms.vint32( 0 ), - MinDxySig = cms.double( -1.0 ), - MinDr = cms.double( -1.0 ), - AbsEtaBins = cms.vdouble( 0.0 ), - MaxDz = cms.double( 9999.0 ), - MatchToPreviousCand = cms.bool( True ), - CandTag = cms.InputTag( "hltL2MuonCandidatesNoVtx" ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinNchambers = cms.vint32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinNstations = cms.vint32( 0 ) -) -fragment.hltDoubleMu3L3FilteredNoVtx = cms.EDFilter( "HLTMuonDimuonL3Filter", - saveTags = cms.bool( True ), - ChargeOpt = cms.int32( 0 ), - MaxPtMin = cms.vdouble( 1.0E125 ), - FastAccept = cms.bool( False ), - MatchToPreviousCand = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), - InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), - PreviousCandIsL2 = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), - MaxPtBalance = cms.double( 999999.0 ), - MaxPtPair = cms.vdouble( 1.0E125 ), - MaxAcop = cms.double( 999.0 ), - MinPtMin = cms.vdouble( 3.0 ), - MaxInvMass = cms.vdouble( 9999.0 ), - MinPtMax = cms.vdouble( 0.0 ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinN = cms.int32( 1 ), - MaxDz = cms.double( 9999.0 ), - MinPtPair = cms.vdouble( 0.0 ), - CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - MinAcop = cms.double( -999.0 ), - MaxDCAMuMu = cms.double( 999999.0 ), - MinNhits = cms.int32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinPtBalance = cms.double( -1.0 ), - MaxEta = cms.double( 2.5 ), - L1MatchingdR = cms.double( 0.3 ), - MaxRapidityPair = cms.double( 999999.0 ), - CutCowboys = cms.bool( False ), - MinInvMass = cms.vdouble( 0.0 ) -) -fragment.hltDisplacedmumuVtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", - Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtx" ), - MinPt = cms.double( 0.0 ), - ChargeOpt = cms.int32( 0 ), - MaxEta = cms.double( 2.5 ), - MaxInvMass = cms.double( 99999.0 ), - MinPtPair = cms.double( 0.0 ), - matchToPrevious = cms.bool( True ), - MinInvMass = cms.double( 0.0 ) -) -fragment.hltPreDSTDoubleMu1noVtxCaloScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltDoubleMu1L3FilteredNoVtx = cms.EDFilter( "HLTMuonDimuonL3Filter", - saveTags = cms.bool( True ), - ChargeOpt = cms.int32( 0 ), - MaxPtMin = cms.vdouble( 1.0E125 ), - FastAccept = cms.bool( False ), - MatchToPreviousCand = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), - InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), - PreviousCandIsL2 = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), - MaxPtBalance = cms.double( 999999.0 ), - MaxPtPair = cms.vdouble( 1.0E125 ), - MaxAcop = cms.double( 999.0 ), - MinPtMin = cms.vdouble( 1.0 ), - MaxInvMass = cms.vdouble( 9999.0 ), - MinPtMax = cms.vdouble( 0.0 ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinN = cms.int32( 1 ), - MaxDz = cms.double( 9999.0 ), - MinPtPair = cms.vdouble( 0.0 ), - CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - MinAcop = cms.double( -999.0 ), - MaxDCAMuMu = cms.double( 999999.0 ), - MinNhits = cms.int32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinPtBalance = cms.double( -1.0 ), - MaxEta = cms.double( 2.5 ), - L1MatchingdR = cms.double( 0.3 ), - MaxRapidityPair = cms.double( 999999.0 ), - CutCowboys = cms.bool( False ), - MinInvMass = cms.vdouble( 0.0 ) -) -fragment.hltDisplacedmumu1VtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", - Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - PreviousCandTag = cms.InputTag( "hltDoubleMu1L3FilteredNoVtx" ), - MinPt = cms.double( 0.0 ), - ChargeOpt = cms.int32( 0 ), - MaxEta = cms.double( 2.5 ), - MaxInvMass = cms.double( 99999.0 ), - MinPtPair = cms.double( 0.0 ), - matchToPrevious = cms.bool( True ), - MinInvMass = cms.double( 0.0 ) -) -fragment.hltPreDSTDoubleMu3noVtxMass10PFScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltDoubleMu3L3FilteredNoVtxMass10 = cms.EDFilter( "HLTMuonDimuonL3Filter", - saveTags = cms.bool( True ), - ChargeOpt = cms.int32( 0 ), - MaxPtMin = cms.vdouble( 1.0E125 ), - FastAccept = cms.bool( False ), - MatchToPreviousCand = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), - InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), - PreviousCandIsL2 = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), - MaxPtBalance = cms.double( 999999.0 ), - MaxPtPair = cms.vdouble( 1.0E125 ), - MaxAcop = cms.double( 999.0 ), - MinPtMin = cms.vdouble( 3.0 ), - MaxInvMass = cms.vdouble( 9999.0 ), - MinPtMax = cms.vdouble( 0.0 ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinN = cms.int32( 1 ), - MaxDz = cms.double( 9999.0 ), - MinPtPair = cms.vdouble( 0.0 ), - CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - MinAcop = cms.double( -999.0 ), - MaxDCAMuMu = cms.double( 999999.0 ), - MinNhits = cms.int32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinPtBalance = cms.double( -1.0 ), - MaxEta = cms.double( 2.5 ), - L1MatchingdR = cms.double( 0.3 ), - MaxRapidityPair = cms.double( 999999.0 ), - CutCowboys = cms.bool( False ), - MinInvMass = cms.vdouble( 10.0 ) -) -fragment.hltDisplacedmumuMass10VtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", - Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtxMass10" ), - MinPt = cms.double( 0.0 ), - ChargeOpt = cms.int32( 0 ), - MaxEta = cms.double( 2.5 ), - MaxInvMass = cms.double( 99999.0 ), - MinPtPair = cms.double( 0.0 ), - matchToPrevious = cms.bool( True ), - MinInvMass = cms.double( 0.0 ) -) fragment.hltPreAK4CaloJet30 = cms.EDFilter( "HLTPrescaler", L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), offset = cms.uint32( 0 ) @@ -88529,14 +91915,6 @@ useEt = cms.bool( True ), rhoScale = cms.double( 1.0 ) ) -fragment.hltRegionalTowerForTkMuonsM2Reg = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( "hltHighPtTkMuonCands" ), - EMin = cms.double( 0.0 ), - EtMin = cms.double( 0.0 ), - L1IsoCand = cms.InputTag( "hltHighPtTkMuonCands" ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForHCAL" ) -) fragment.hltHighPtTkMuonHcalM2RegPFClusterIsoForMuons = cms.EDProducer( "MuonHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.227, 0.372 ), useHF = cms.bool( False ), @@ -90893,10 +94271,10 @@ minTauPtForNoIso = cms.double( 500.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -90906,7 +94284,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -90931,15 +94309,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauMediumHighPtRelaxedIsoRelativeIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -90984,10 +94363,10 @@ minTauPtForNoIso = cms.double( 500.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -90997,7 +94376,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -91022,15 +94401,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 200.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauMediumHighPtRelaxedIsoAbsOrRelIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -102376,7 +105756,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -102492,6 +105873,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -122039,52 +125421,65 @@ fedList = cms.vuint32( 1404 ) ) fragment.hltScoutingPFPacker = cms.EDProducer( "HLTScoutingPFProducer", - pfJetCollection = cms.InputTag( "hltAK4PFJets" ), + pfJetCollection = cms.InputTag( "hltAK4PixelOnlyPFJets" ), doCandidates = cms.bool( True ), - pfCandidateEtaCut = cms.double( 5.0 ), + pfCandidateEtaCut = cms.double( 3.0 ), pfJetTagCollection = cms.InputTag( 'hltCombinedSecondaryVertexBJetTagsPF','','@currentProcess' ), doMet = cms.bool( True ), - metCollection = cms.InputTag( 'hltPFMETProducer','','@currentProcess' ), + metCollection = cms.InputTag( 'hltPixelOnlyPFMETProducer','','@currentProcess' ), pfJetEtaCut = cms.double( 3.0 ), vertexCollection = cms.InputTag( 'hltPixelVertices','','@currentProcess' ), pfJetPtCut = cms.double( 20.0 ), mantissaPrecision = cms.int32( 23 ), - rho = cms.InputTag( 'hltFixedGridRhoFastjetAll','','@currentProcess' ), + rho = cms.InputTag( 'hltFixedGridRhoFastjetPixelOnlyAll','','@currentProcess' ), doJetTags = cms.bool( True ), - pfCandidateCollection = cms.InputTag( 'hltParticleFlow','','@currentProcess' ), + pfCandidateCollection = cms.InputTag( 'hltPixelOnlyParticleFlow','','@currentProcess' ), pfCandidatePtCut = cms.double( 0.6 ) ) fragment.hltScoutingMuonPacker = cms.EDProducer( "HLTScoutingMuonProducer", minVtxProbCut = cms.double( 0.001 ), - HcalPFClusterIsoMap = cms.InputTag( 'hltMuonHcalPFClusterIsoForMuons','','@currentProcess' ), - EcalPFClusterIsoMap = cms.InputTag( 'hltMuonEcalPFClusterIsoForMuons','','@currentProcess' ), - ChargedCandidates = cms.InputTag( 'hltL3MuonCandidates','','@currentProcess' ), - muonPtCut = cms.double( 3.0 ), - InputLinks = cms.InputTag( 'hltL3MuonsIterL3LinksNoVtx','','@currentProcess' ), - displacedvertexCollection = cms.InputTag( 'hltDisplacedmumuVtxProducerDoubleMu3NoVtx','','@currentProcess' ), - Tracks = cms.InputTag( "hltL3Muons" ), + HcalPFClusterIsoMap = cms.InputTag( 'hltMuonHcalPFClusterIsoForMuonsScoutingNoVtx','','@currentProcess' ), + EcalPFClusterIsoMap = cms.InputTag( 'hltMuonEcalMFPFClusterIsoForMuonsScoutingNoVtx','','@currentProcess' ), + ChargedCandidates = cms.InputTag( 'hltIterL3MuonCandidatesScoutingNoVtx','','@currentProcess' ), + InputMuons = cms.InputTag( "hltIterL3MuonsScoutingNoVtx" ), + TrackIsoMap = cms.InputTag( 'hltMuonTkRelIsolationCut0p09MapScoutingNoVtx','combinedRelativeIsoDeposits','@currentProcess' ), + displacedvertexCollection = cms.InputTag( 'hltDisplacedmumuVtxNoMatchingProducer','','@currentProcess' ), + Tracks = cms.InputTag( "hltIterL3MuonAndMuonFromL1MergedScoutingNoVtx" ), muonEtaCut = cms.double( 2.4 ), - TrackIsoMap = cms.InputTag( 'hltMuonTkRelIsolationCut0p09Map','combinedRelativeIsoDeposits','@currentProcess' ) + muonPtCut = cms.double( 0.0 ), + InputLinks = cms.InputTag( 'hltL3MuonsIterL3LinksScoutingNoVtx','','@currentProcess' ) ) fragment.hltScoutingEgammaPacker = cms.EDProducer( "HLTScoutingEgammaProducer", egammaEtaCut = cms.double( 2.5 ), HcalPFClusterIsoMap = cms.InputTag( 'hltEgammaHcalPFClusterIso','','@currentProcess' ), EgammaCandidates = cms.InputTag( 'hltEgammaCandidates','','@currentProcess' ), - egammaPtCut = cms.double( 4.0 ), + egammaPtCut = cms.double( 2.0 ), EcalPFClusterIsoMap = cms.InputTag( 'hltEgammaEcalPFClusterIso','','@currentProcess' ), - SigmaIEtaIEtaMap = cms.InputTag( 'hltEgammaClusterShape','sigmaIEtaIEta5x5','@currentProcess' ), + saveRecHitTiming = cms.bool( False ), + rechitMatrixSize = cms.int32( 15 ), MissingHitsMap = cms.InputTag( 'hltEgammaGsfTrackVars','MissingHits','@currentProcess' ), + OneOEMinusOneOPMap = cms.InputTag( 'hltEgammaGsfTrackVars','OneOESuperMinusOneOP','@currentProcess' ), HoverEMap = cms.InputTag( 'hltEgammaHoverE','','@currentProcess' ), EgammaGsfTracks = cms.InputTag( 'hltEgammaGsfTracks','','@currentProcess' ), - OneOEMinusOneOPMap = cms.InputTag( 'hltEgammaGsfTrackVars','OneOESuperMinusOneOP','@currentProcess' ), + mantissaPrecision = cms.int32( 10 ), + r9Map = cms.InputTag( 'hltEgammaR9ID','r95x5' ), + SigmaIEtaIEtaMap = cms.InputTag( 'hltEgammaClusterShape','sigmaIEtaIEta5x5','@currentProcess' ), DetaMap = cms.InputTag( 'hltEgammaGsfTrackVars','DetaSeed','@currentProcess' ), egammaHoverECut = cms.double( 1.0 ), - EleGsfTrackIsoMap = cms.InputTag( 'hltEgammaEleGsfTrackIso','','@currentProcess' ), - DphiMap = cms.InputTag( 'hltEgammaGsfTrackVars','Dphi','@currentProcess' ) + ecalRechitEB = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + ecalRechitEE = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + DphiMap = cms.InputTag( 'hltEgammaGsfTrackVars','Dphi','@currentProcess' ), + EleGsfTrackIsoMap = cms.InputTag( 'hltEgammaEleGsfTrackIso','','@currentProcess' ) ) fragment.hltScoutingPrimaryVertexPacker = cms.EDProducer( "HLTScoutingPrimaryVertexProducer", vertexCollection = cms.InputTag( 'hltPixelVertices','','@currentProcess' ) ) +fragment.hltScoutingTrackPacker = cms.EDProducer( "HLTScoutingTrackProducer", + vtxMinDist = cms.double( 0.01 ), + OtherTracks = cms.InputTag( "hltPixelOnlyPFMuonMerging" ), + vertexCollection = cms.InputTag( "hltPixelVertices" ), + mantissaPrecision = cms.int32( 10 ) +) fragment.hltPreScoutingCaloMuonOutput = cms.EDFilter( "HLTPrescaler", L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), offset = cms.uint32( 0 ) @@ -122107,19 +125502,17 @@ HcalPFClusterIsoMap = cms.InputTag( "" ), EcalPFClusterIsoMap = cms.InputTag( "" ), ChargedCandidates = cms.InputTag( 'hltIterL3MuonCandidatesNoVtx','','@currentProcess' ), - muonPtCut = cms.double( 3.0 ), - InputLinks = cms.InputTag( 'hltL3MuonsIterL3LinksNoVtx','','@currentProcess' ), + InputMuons = cms.InputTag( "hltIterL3MuonsNoVtx" ), + TrackIsoMap = cms.InputTag( 'hltMuonTkRelIsolationCut0p09MapNoVtx','combinedRelativeIsoDeposits','@currentProcess' ), displacedvertexCollection = cms.InputTag( 'hltDisplacedmumuVtxProducer','','@currentProcess' ), Tracks = cms.InputTag( 'hltIterL3MuonAndMuonFromL1MergedNoVtx','','@currentProcess' ), muonEtaCut = cms.double( 2.4 ), - TrackIsoMap = cms.InputTag( 'hltMuonTkRelIsolationCut0p09MapNoVtx','combinedRelativeIsoDeposits','@currentProcess' ) + muonPtCut = cms.double( 3.0 ), + InputLinks = cms.InputTag( 'hltL3MuonsIterL3LinksNoVtx','','@currentProcess' ) ) fragment.hltScoutingPrimaryVertexPackerCaloMuon = cms.EDProducer( "HLTScoutingPrimaryVertexProducer", vertexCollection = cms.InputTag( 'hltPixelVerticesL3MuonNoVtx','','@currentProcess' ) ) -fragment.hltScoutingTrackPacker = cms.EDProducer( "HLTScoutingTrackProducer", - OtherTracks = cms.InputTag( "hltPixelTracksL3MuonNoVtx" ) -) fragment.HLTL1UnpackerSequence = cms.Sequence( fragment.hltGtStage2Digis + fragment.hltGtStage2ObjectMap ) fragment.HLTBeamSpot = cms.Sequence( fragment.hltScalersRawToDigi + fragment.hltOnlineBeamSpot ) @@ -122219,12 +125612,12 @@ fragment.HLTEle33CaloIdLMWSequence = cms.Sequence( fragment.HLTEle33CaloIdLSequence + fragment.hltEle33CaloIdLMWPMS2Filter ) fragment.HLTDoubleEle33CaloIdLUnseededSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltDiEG33EtUnseededFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG33HEUnseededFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltDiEG33CaloIdLClusterShapeUnseededFilter + fragment.HLTElePixelMatchUnseededSequence + fragment.hltDiEle33CaloIdLPixelMatchUnseededFilter ) fragment.HLTDoubleEle33CaloIdLMWSequence = cms.Sequence( fragment.HLTDoubleEle33CaloIdLUnseededSequence + fragment.hltDiEle33CaloIdLMWPMS2UnseededFilter ) -fragment.HLTPFHcalClusteringForEgamma = cms.Sequence( fragment.hltRegionalTowerForEgamma + fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL ) +fragment.HLTPFHcalClustering = cms.Sequence( fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL ) fragment.HLTAK4CaloJetsPrePFRecoSequence = cms.Sequence( fragment.HLTDoCaloSequencePF + fragment.hltAK4CaloJetsPF ) fragment.HLTPreAK4PFJetsRecoSequence = cms.Sequence( fragment.HLTAK4CaloJetsPrePFRecoSequence + fragment.hltAK4CaloJetsPFEt5 ) fragment.HLTTrackReconstructionForPFNoMu = cms.Sequence( fragment.HLTDoLocalPixelSequence + fragment.HLTRecopixelvertexingSequence + fragment.HLTDoLocalStripSequence + fragment.HLTIterativeTrackingIter02 ) fragment.HLTTrackReconstructionForIsoElectronIter02 = cms.Sequence( fragment.HLTPreAK4PFJetsRecoSequence + fragment.HLTTrackReconstructionForPFNoMu ) -fragment.HLTDoubleEle24erWPTightGsfForTauSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltDoubleEGL1EGerFilter + fragment.hltDoubleEG24L1EGEtFilter + fragment.hltEgammaClusterShape + fragment.hltDoubleEle24erWPTightClusterShapeFilterForTau + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltDoubleEle24erWPTightHEFilterForTau + fragment.hltEgammaEcalPFClusterIso + fragment.hltDoubleEle24erWPTightEcalIsoFilterForTau + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltDoubleEle24erWPTightHcalIsoFilterForTau + fragment.HLTElePixelMatchSequence + fragment.hltDoubleEle24erWPTightPixelMatchFilterForTau + fragment.hltDoubleEle24erWPTightPMS2FilterForTau + fragment.HLTGsfElectronSequence + fragment.hltDoubleEle24erWPTightGsfOneOEMinusOneOPFilterForTau + fragment.hltDoubleEle24erWPTightGsfMissingHitsFilterForTau + fragment.hltDoubleEle24erWPTightGsfDetaFilterForTau + fragment.hltDoubleEle24erWPTightGsfDphiFilterForTau + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltDoubleEle24erWPTightGsfTrackIsoFilterForTau ) +fragment.HLTDoubleEle24erWPTightGsfForTauSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltDoubleEGL1EGerFilter + fragment.hltDoubleEG24L1EGEtFilter + fragment.hltEgammaClusterShape + fragment.hltDoubleEle24erWPTightClusterShapeFilterForTau + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltDoubleEle24erWPTightHEFilterForTau + fragment.hltEgammaEcalPFClusterIso + fragment.hltDoubleEle24erWPTightEcalIsoFilterForTau + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltDoubleEle24erWPTightHcalIsoFilterForTau + fragment.HLTElePixelMatchSequence + fragment.hltDoubleEle24erWPTightPixelMatchFilterForTau + fragment.hltDoubleEle24erWPTightPMS2FilterForTau + fragment.HLTGsfElectronSequence + fragment.hltDoubleEle24erWPTightGsfOneOEMinusOneOPFilterForTau + fragment.hltDoubleEle24erWPTightGsfMissingHitsFilterForTau + fragment.hltDoubleEle24erWPTightGsfDetaFilterForTau + fragment.hltDoubleEle24erWPTightGsfDphiFilterForTau + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltDoubleEle24erWPTightGsfTrackIsoFilterForTau ) fragment.HLTDoubleEle8CaloIdMGsfTrackIdMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaCandidatesWrapper + fragment.hltEG8EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG8HEFilter + fragment.hltEgammaClusterShape + fragment.hltEG8CaloIdMClusterShapeFilter + fragment.HLTElePixelMatchSequence + fragment.hltDoubleEle8CaloIdMPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltDoubleEle8CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + fragment.hltDoubleEle8CaloIdMGsfTrackIdMDetaFilter + fragment.hltDoubleEle8CaloIdMGsfTrackIdMDphiFilter ) fragment.HLTAK4PFJetsReconstructionSequence = cms.Sequence( fragment.HLTL2muonrecoSequence + fragment.HLTL3muonrecoSequence + fragment.HLTTrackReconstructionForPF + fragment.HLTParticleFlowSequence + fragment.hltAK4PFJets + fragment.hltAK4PFJetsLooseID + fragment.hltAK4PFJetsTightID ) fragment.HLTAK4PFCorrectorProducersSequence = cms.Sequence( fragment.hltAK4PFFastJetCorrector + fragment.hltAK4PFRelativeCorrector + fragment.hltAK4PFAbsoluteCorrector + fragment.hltAK4PFResidualCorrector + fragment.hltAK4PFCorrector ) @@ -122274,22 +125667,22 @@ fragment.HLTDoublePho33CaloIdLUnseededSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltDiEG33EtUnseededFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG33HEUnseededFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltDiEG33CaloIdLClusterShapeUnseededFilter ) fragment.HLTDoublePho70Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGNonIsoOrWithJetAndTauFilter + fragment.hltEG70EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG70HEFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltDiEG70EtUnseededFilter + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG70HEUnseededFilter ) fragment.HLTDoublePho85Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGNonIsoOrWithJetAndTauFilter + fragment.hltEG85EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG85HEFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltDiEG85EtUnseededFilter + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG85HEUnseededFilter ) -fragment.HLTEle20WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG20L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle20WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle20WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle20WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle20WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle20WPTightPixelMatchFilter + fragment.hltEle20WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle20WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle20WPTightGsfMissingHitsFilter + fragment.hltEle20WPTightGsfDetaFilter + fragment.hltEle20WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle20WPTightGsfTrackIsoFilter ) -fragment.HLTEle15WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG15L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle15WPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15WPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15WPLoose1EcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15WPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle15WPLoose1PixelMatchFilter + fragment.hltEle15WPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle15WPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle15WPLoose1GsfDetaFilter + fragment.hltEle15WPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15WPLoose1GsfTrackIsoFilter ) -fragment.HLTEle17WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG17L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle17WPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle17WPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle17WPLoose1EcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle17WPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle17WPLoose1PixelMatchFilter + fragment.hltEle17WPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle17WPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle17WPLoose1GsfDetaFilter + fragment.hltEle17WPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle17WPLoose1GsfTrackIsoFilter ) -fragment.HLTEle20WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG20L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle20WPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle20WPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle20WPLoose1EcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle20WPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle20WPLoose1PixelMatchFilter + fragment.hltEle20WPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle20WPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle20WPLoose1GsfDetaFilter + fragment.hltEle20WPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle20WPLoose1GsfTrackIsoFilter ) -fragment.HLTEle20Eta2p1WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrEtaRFilter + fragment.hltEG20L1SingleEGLowETOrEtaREtFilter + fragment.hltEgammaClusterShape + fragment.hltEle20erWPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle20erWPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle20erWPLoose1EcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle20erWPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle20erWPLoose1PixelMatchFilter + fragment.hltEle20erWPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle20erWPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle20erWPLoose1GsfDetaFilter + fragment.hltEle20erWPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle20erWPLoose1GsfTrackIsoFilter ) -fragment.HLTDiEle27L1DoubleEGWPTightCaloOnlySequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG27L1SingleAndDoubleEGEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle27L1DoubleEGWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle27L1DoubleEGWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle27L1DoubleEGWPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle27L1DoubleEGWPTightHcalIsoFilter + fragment.hltDiEG27L1SingleAndDoubleEGEtFilter + fragment.hltDiEle27L1DoubleEGWPTightClusterShapeFilter + fragment.hltDiEle27L1DoubleEGWPTightHEFilter + fragment.hltDiEle27L1DoubleEGWPTightEcalIsoFilter + fragment.hltDiEle27L1DoubleEGWPTightHcalIsoFilter ) -fragment.HLTEle27WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG27L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle27WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle27WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle27WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle27WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle27WPTightPixelMatchFilter + fragment.hltEle27WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle27WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle27WPTightGsfMissingHitsFilter + fragment.hltEle27WPTightGsfDetaFilter + fragment.hltEle27WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle27WPTightGsfTrackIsoFilter ) -fragment.HLTEle28WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG28L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle28WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle28WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle28WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle28WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle28WPTightPixelMatchFilter + fragment.hltEle28WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle28WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle28WPTightGsfMissingHitsFilter + fragment.hltEle28WPTightGsfDetaFilter + fragment.hltEle28WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle28WPTightGsfTrackIsoFilter ) -fragment.HLTEle30WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG30L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle30WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle30WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle30WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle30WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle30WPTightPixelMatchFilter + fragment.hltEle30WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle30WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle30WPTightGsfMissingHitsFilter + fragment.hltEle30WPTightGsfDetaFilter + fragment.hltEle30WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle30WPTightGsfTrackIsoFilter ) -fragment.HLTEle32WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG32L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle32WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle32WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle32WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle32WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle32WPTightPixelMatchFilter + fragment.hltEle32WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle32WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle32WPTightGsfMissingHitsFilter + fragment.hltEle32WPTightGsfDetaFilter + fragment.hltEle32WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle32WPTightGsfTrackIsoFilter ) -fragment.HLTEle35WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG35L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle35noerWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle35noerWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle35noerWPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle35noerWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle35noerWPTightPixelMatchFilter + fragment.hltEle35noerWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle35noerWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle35noerWPTightGsfMissingHitsFilter + fragment.hltEle35noerWPTightGsfDetaFilter + fragment.hltEle35noerWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle35noerWPTightGsfTrackIsoFilter ) -fragment.HLTSingleEleGsfL1EGMTSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltSingleEle35WPTightGsfL1EGMTL1MatchFilter + fragment.hltSingleEle35WPTightGsfL1EGMTEtFilter + fragment.hltEgammaClusterShape + fragment.hltSingleEle35WPTightGsfL1EGMTClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltSingleEle35WPTightGsfL1EGMTHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltSingleEle35WPTightGsfL1EGMTEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltSingleEle35WPTightGsfL1EGMTHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltSingleEle35WPTightGsfL1EGMTPixelMatchFilter + fragment.hltSingleEle35WPTightGsfL1EGMTPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltSingleEle35WPTightGsfL1EGMTOneOEMinusOneOPFilter + fragment.hltSingleEle35WPTightGsfL1EGMTChi2Filter + fragment.hltSingleEle35WPTightGsfL1EGMTMissingHitsFilter + fragment.hltSingleEle35WPTightGsfL1EGMTDetaFilter + fragment.hltSingleEle35WPTightGsfL1EGMTDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltSingleEle35WPTightGsfL1EGMTTrackIsoFilter ) -fragment.HLTEle38WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG38L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle38noerWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle38noerWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle38noerWPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle38noerWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle38noerWPTightPixelMatchFilter + fragment.hltEle38noerWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle38noerWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle38noerWPTightGsfMissingHitsFilter + fragment.hltEle38noerWPTightGsfDetaFilter + fragment.hltEle38noerWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle38noerWPTightGsfTrackIsoFilter ) -fragment.HLTEle40WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG40L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle40noerWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle40noerWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle40noerWPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle40noerWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle40noerWPTightPixelMatchFilter + fragment.hltEle40noerWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle40noerWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle40noerWPTightGsfMissingHitsFilter + fragment.hltEle40noerWPTightGsfDetaFilter + fragment.hltEle40noerWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle40noerWPTightGsfTrackIsoFilter ) -fragment.HLTEle32L1DoubleEGWPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG32L1SingleAndDoubleEGEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle32L1DoubleEGWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle32L1DoubleEGWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle32L1DoubleEGWPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle32L1DoubleEGWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle32L1DoubleEGWPTightPixelMatchFilter + fragment.hltEle32L1DoubleEGWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle32L1DoubleEGWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle32L1DoubleEGWPTightGsfMissingHitsFilter + fragment.hltEle32L1DoubleEGWPTightGsfDetaFilter + fragment.hltEle32L1DoubleEGWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle32L1DoubleEGWPTightGsfTrackIsoFilter ) -fragment.HLTEle24erWPTightGsfForTauSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1EGerAndTauFilter + fragment.hltEG24L1EGandTauEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle24erWPTightClusterShapeFilterForTau + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle24erWPTightHEFilterForTau + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle24erWPTightEcalIsoFilterForTau + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle24erWPTightHcalIsoFilterForTau + fragment.HLTElePixelMatchSequence + fragment.hltEle24erWPTightPixelMatchFilterForTau + fragment.hltEle24erWPTightPMS2FilterForTau + fragment.HLTGsfElectronSequence + fragment.hltEle24erWPTightGsfOneOEMinusOneOPFilterForTau + fragment.hltEle24erWPTightGsfMissingHitsFilterForTau + fragment.hltEle24erWPTightGsfDetaFilterForTau + fragment.hltEle24erWPTightGsfDphiFilterForTau + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle24erWPTightGsfTrackIsoFilterForTau ) +fragment.HLTEle20WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG20L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle20WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle20WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle20WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle20WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle20WPTightPixelMatchFilter + fragment.hltEle20WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle20WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle20WPTightGsfMissingHitsFilter + fragment.hltEle20WPTightGsfDetaFilter + fragment.hltEle20WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle20WPTightGsfTrackIsoFilter ) +fragment.HLTEle15WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG15L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle15WPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15WPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15WPLoose1EcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15WPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle15WPLoose1PixelMatchFilter + fragment.hltEle15WPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle15WPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle15WPLoose1GsfDetaFilter + fragment.hltEle15WPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15WPLoose1GsfTrackIsoFilter ) +fragment.HLTEle17WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG17L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle17WPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle17WPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle17WPLoose1EcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle17WPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle17WPLoose1PixelMatchFilter + fragment.hltEle17WPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle17WPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle17WPLoose1GsfDetaFilter + fragment.hltEle17WPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle17WPLoose1GsfTrackIsoFilter ) +fragment.HLTEle20WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG20L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle20WPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle20WPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle20WPLoose1EcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle20WPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle20WPLoose1PixelMatchFilter + fragment.hltEle20WPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle20WPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle20WPLoose1GsfDetaFilter + fragment.hltEle20WPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle20WPLoose1GsfTrackIsoFilter ) +fragment.HLTEle20Eta2p1WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrEtaRFilter + fragment.hltEG20L1SingleEGLowETOrEtaREtFilter + fragment.hltEgammaClusterShape + fragment.hltEle20erWPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle20erWPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle20erWPLoose1EcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle20erWPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle20erWPLoose1PixelMatchFilter + fragment.hltEle20erWPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle20erWPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle20erWPLoose1GsfDetaFilter + fragment.hltEle20erWPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle20erWPLoose1GsfTrackIsoFilter ) +fragment.HLTDiEle27L1DoubleEGWPTightCaloOnlySequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG27L1SingleAndDoubleEGEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle27L1DoubleEGWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle27L1DoubleEGWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle27L1DoubleEGWPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle27L1DoubleEGWPTightHcalIsoFilter + fragment.hltDiEG27L1SingleAndDoubleEGEtFilter + fragment.hltDiEle27L1DoubleEGWPTightClusterShapeFilter + fragment.hltDiEle27L1DoubleEGWPTightHEFilter + fragment.hltDiEle27L1DoubleEGWPTightEcalIsoFilter + fragment.hltDiEle27L1DoubleEGWPTightHcalIsoFilter ) +fragment.HLTEle27WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG27L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle27WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle27WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle27WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle27WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle27WPTightPixelMatchFilter + fragment.hltEle27WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle27WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle27WPTightGsfMissingHitsFilter + fragment.hltEle27WPTightGsfDetaFilter + fragment.hltEle27WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle27WPTightGsfTrackIsoFilter ) +fragment.HLTEle28WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG28L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle28WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle28WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle28WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle28WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle28WPTightPixelMatchFilter + fragment.hltEle28WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle28WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle28WPTightGsfMissingHitsFilter + fragment.hltEle28WPTightGsfDetaFilter + fragment.hltEle28WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle28WPTightGsfTrackIsoFilter ) +fragment.HLTEle30WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG30L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle30WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle30WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle30WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle30WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle30WPTightPixelMatchFilter + fragment.hltEle30WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle30WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle30WPTightGsfMissingHitsFilter + fragment.hltEle30WPTightGsfDetaFilter + fragment.hltEle30WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle30WPTightGsfTrackIsoFilter ) +fragment.HLTEle32WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG32L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle32WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle32WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle32WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle32WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle32WPTightPixelMatchFilter + fragment.hltEle32WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle32WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle32WPTightGsfMissingHitsFilter + fragment.hltEle32WPTightGsfDetaFilter + fragment.hltEle32WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle32WPTightGsfTrackIsoFilter ) +fragment.HLTEle35WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG35L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle35noerWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle35noerWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle35noerWPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle35noerWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle35noerWPTightPixelMatchFilter + fragment.hltEle35noerWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle35noerWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle35noerWPTightGsfMissingHitsFilter + fragment.hltEle35noerWPTightGsfDetaFilter + fragment.hltEle35noerWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle35noerWPTightGsfTrackIsoFilter ) +fragment.HLTSingleEleGsfL1EGMTSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltSingleEle35WPTightGsfL1EGMTL1MatchFilter + fragment.hltSingleEle35WPTightGsfL1EGMTEtFilter + fragment.hltEgammaClusterShape + fragment.hltSingleEle35WPTightGsfL1EGMTClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltSingleEle35WPTightGsfL1EGMTHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltSingleEle35WPTightGsfL1EGMTEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltSingleEle35WPTightGsfL1EGMTHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltSingleEle35WPTightGsfL1EGMTPixelMatchFilter + fragment.hltSingleEle35WPTightGsfL1EGMTPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltSingleEle35WPTightGsfL1EGMTOneOEMinusOneOPFilter + fragment.hltSingleEle35WPTightGsfL1EGMTChi2Filter + fragment.hltSingleEle35WPTightGsfL1EGMTMissingHitsFilter + fragment.hltSingleEle35WPTightGsfL1EGMTDetaFilter + fragment.hltSingleEle35WPTightGsfL1EGMTDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltSingleEle35WPTightGsfL1EGMTTrackIsoFilter ) +fragment.HLTEle38WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG38L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle38noerWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle38noerWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle38noerWPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle38noerWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle38noerWPTightPixelMatchFilter + fragment.hltEle38noerWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle38noerWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle38noerWPTightGsfMissingHitsFilter + fragment.hltEle38noerWPTightGsfDetaFilter + fragment.hltEle38noerWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle38noerWPTightGsfTrackIsoFilter ) +fragment.HLTEle40WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG40L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle40noerWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle40noerWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle40noerWPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle40noerWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle40noerWPTightPixelMatchFilter + fragment.hltEle40noerWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle40noerWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle40noerWPTightGsfMissingHitsFilter + fragment.hltEle40noerWPTightGsfDetaFilter + fragment.hltEle40noerWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle40noerWPTightGsfTrackIsoFilter ) +fragment.HLTEle32L1DoubleEGWPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG32L1SingleAndDoubleEGEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle32L1DoubleEGWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle32L1DoubleEGWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle32L1DoubleEGWPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle32L1DoubleEGWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle32L1DoubleEGWPTightPixelMatchFilter + fragment.hltEle32L1DoubleEGWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle32L1DoubleEGWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle32L1DoubleEGWPTightGsfMissingHitsFilter + fragment.hltEle32L1DoubleEGWPTightGsfDetaFilter + fragment.hltEle32L1DoubleEGWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle32L1DoubleEGWPTightGsfTrackIsoFilter ) +fragment.HLTEle24erWPTightGsfForTauSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1EGerAndTauFilter + fragment.hltEG24L1EGandTauEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle24erWPTightClusterShapeFilterForTau + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle24erWPTightHEFilterForTau + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle24erWPTightEcalIsoFilterForTau + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle24erWPTightHcalIsoFilterForTau + fragment.HLTElePixelMatchSequence + fragment.hltEle24erWPTightPixelMatchFilterForTau + fragment.hltEle24erWPTightPMS2FilterForTau + fragment.HLTGsfElectronSequence + fragment.hltEle24erWPTightGsfOneOEMinusOneOPFilterForTau + fragment.hltEle24erWPTightGsfMissingHitsFilterForTau + fragment.hltEle24erWPTightGsfDetaFilterForTau + fragment.hltEle24erWPTightGsfDphiFilterForTau + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle24erWPTightGsfTrackIsoFilterForTau ) fragment.HLTRecoJetSequenceAK4UncorrectedPF = cms.Sequence( fragment.HLTDoCaloSequencePF + fragment.hltAK4CaloJetsPF ) fragment.HLTRecoJetSequenceAK4PrePF = cms.Sequence( fragment.HLTRecoJetSequenceAK4UncorrectedPF + fragment.hltAK4CaloJetsPFEt5 ) fragment.HLTParticleFlowSequenceForTaus = cms.Sequence( fragment.HLTPreshowerSequence + fragment.hltParticleFlowRecHitECALUnseeded + fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowRecHitHF + fragment.hltParticleFlowRecHitPSUnseeded + fragment.hltParticleFlowClusterECALUncorrectedUnseeded + fragment.hltParticleFlowClusterPSUnseeded + fragment.hltParticleFlowClusterECALUnseeded + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL + fragment.hltParticleFlowClusterHF + fragment.hltLightPFTracks + fragment.hltParticleFlowBlockForTaus + fragment.hltParticleFlowForTaus ) @@ -122316,8 +125709,7 @@ fragment.HLTDoFullUnpackingEgammaEcalMFSequence = cms.Sequence( fragment.hltEcalDigis + fragment.hltEcalPreshowerDigis + fragment.hltEcalUncalibRecHit + fragment.hltEcalDetIdToBeRecovered + fragment.hltEcalRecHit + fragment.hltEcalPreshowerRecHit ) fragment.HLTPFClusteringEcalMFForMuons = cms.Sequence( fragment.hltRecHitInRegionForMuonsMF + fragment.hltRecHitInRegionForMuonsES + fragment.hltParticleFlowRecHitECALForMuonsMF + fragment.hltParticleFlowRecHitPSForMuons + fragment.hltParticleFlowClusterECALUncorrectedForMuonsMF + fragment.hltParticleFlowClusterPSForMuons + fragment.hltParticleFlowClusterECALForMuonsMF ) fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalMFSequence + fragment.HLTDoLocalHcalSequence + fragment.hltTowerMakerForECALMF + fragment.hltTowerMakerForHCAL + fragment.hltFixedGridRhoFastjetECALMFForMuons + fragment.hltFixedGridRhoFastjetHCAL + fragment.HLTPFClusteringEcalMFForMuons + fragment.hltMuonEcalMFPFClusterIsoForMuons ) -fragment.HLTPFHcalRegClusteringForMuons = cms.Sequence( fragment.hltRegionalTowerForMuonsReg + fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL ) -fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons = cms.Sequence( fragment.HLTPFHcalRegClusteringForMuons + fragment.hltMuonHcalRegPFClusterIsoForMuons ) +fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons = cms.Sequence( fragment.HLTPFHcalClustering + fragment.hltMuonHcalRegPFClusterIsoForMuons ) fragment.HLTTrackReconstructionForIsoL3MuonIter02 = cms.Sequence( fragment.HLTPixelTrackingL3Muon + fragment.HLTDoLocalStripSequence + fragment.HLTIterativeTrackingL3MuonIter02 ) fragment.HLTMu20Eta2p1Tau24Eta2p1IsolationSequence = cms.Sequence( fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons + fragment.hltL3fBigORMu18erTauXXer2p1L1f0L2f10QL3Filtered20QL3pfecalIsoRhoFilteredEB0p14EE0p10 + fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons + fragment.hltL3fBigORMu18erTauXXer2p1L1f0L2f10QL3Filtered20QL3pfhcalIsoRhoFilteredHB0p16HE0p20 + fragment.HLTTrackReconstructionForIsoL3MuonIter02 + fragment.hltMuonTkRelIsolationCut0p07Map ) fragment.HLTLooseChargedIsoAntiMuonPFTau27Sequence = cms.Sequence( fragment.HLTLooseChargedIsoPFTauSequence + fragment.hltPFTau27 + fragment.hltSelectedPFTausTrackFinding + fragment.hltPFTau27Track + fragment.hltSelectedPFTausTrackFindingLooseChargedIsolation + fragment.hltPFTau27TrackLooseChargedIso + fragment.hltPFTauAgainstMuonDiscriminator + fragment.hltSelectedPFTausTrackFindingLooseChargedIsolationAgainstMuon + fragment.hltPFTau27TrackLooseChargedIsoAgainstMuon ) @@ -122420,7 +125812,7 @@ fragment.HLTMu8DiEle12CaloIdLTrackIdLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegL1MatchFilter + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegHEFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegOneOEMinusOneOPFilter + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegDetaFilter + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegDphiFilter ) fragment.HLTSingleEle8CaloIdMGsfTrackIdMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaCandidatesWrapper + fragment.hltMu8Ele8EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu8Ele8HEFilter + fragment.hltEgammaClusterShape + fragment.hltMu8Ele8CaloIdMClusterShapeFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu8Ele8CaloIdMPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu8Ele8CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + fragment.hltMu8Ele8CaloIdMGsfTrackIdMDetaFilter + fragment.hltMu8Ele8CaloIdMGsfTrackIdMDphiFilter ) fragment.HLTMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegSequence = cms.Sequence( fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0 + fragment.HLTL2muonrecoSequence + cms.ignore(fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL2Filtered5) + fragment.HLTL3muonrecoSequence + cms.ignore(fragment.hltL1fForIterL3Mu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0) + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3Filtered8 + fragment.HLTL3muontrkisovvlSequence + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3IsoFiltered8 ) -fragment.HLTMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) +fragment.HLTMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) fragment.HLTBtagDeepCSVSequencePF = cms.Sequence( fragment.hltVerticesPF + fragment.hltVerticesPFSelector + fragment.hltVerticesPFFilter + fragment.hltPFJetForBtagSelector + fragment.hltPFJetForBtag + fragment.hltDeepBLifetimeTagInfosPF + fragment.hltDeepInclusiveVertexFinderPF + fragment.hltDeepInclusiveSecondaryVerticesPF + fragment.hltDeepTrackVertexArbitratorPF + fragment.hltDeepInclusiveMergedVerticesPF + fragment.hltDeepSecondaryVertexTagInfosPF + fragment.hltDeepCombinedSecondaryVertexBJetTagsInfos + fragment.hltDeepCombinedSecondaryVertexBJetTagsPF ) fragment.HLTBTagMuDiJet20L1FastJetSequenceL25 = cms.Sequence( fragment.HLTL2muonrecoSequence + fragment.hltBSoftMuonGetJetsFromDiJet20L1FastJet + fragment.hltSelector4JetsDiJet20L1FastJet + fragment.hltBSoftMuonDiJet20L1FastJetL25Jets + fragment.hltBSoftMuonDiJet20L1FastJetL25TagInfos + fragment.hltBSoftMuonDiJet20L1FastJetL25BJetTagsByDR ) fragment.HLTBTagMuDiJet20L1FastJetMu5SelSequenceL3 = cms.Sequence( fragment.HLTL3muonrecoNocandSequence + fragment.hltBSoftMuonMu5L3 + fragment.hltBSoftMuonDiJet20L1FastJetMu5SelL3TagInfos + fragment.hltBSoftMuonDiJet20L1FastJetMu5SelL3BJetTagsByDR ) @@ -122449,14 +125841,14 @@ fragment.HLTBTagMuAK8DiJet170L1FastJetMu5SelSequenceL3noalgo = cms.Sequence( fragment.HLTL3muonrecoNocandSequence + fragment.hltBSoftMuonMu5L3noalgo + fragment.hltBSoftMuonAK8DiJet170L1FastJetMu5SelL3TagInfosnoalgo + fragment.hltBSoftMuonAK8DiJet170L1FastJetMu5SelL3BJetTagsByDRnoalgo ) fragment.HLTBTagMuAK8Jet170L1FastJetDoubleMu5SelSequenceL3noalgo = cms.Sequence( fragment.HLTL3muonrecoSequence + fragment.hltL3fL1sDoubleMu5Filtered + fragment.hltBSoftMuonDoubleMu5L3noalgo + fragment.hltBSoftMuonAK8Jet170L1FastJetDoubleMu5SelL3TagInfosnoalgo + fragment.hltBSoftMuonAK8Jet170L1FastJetDoubleMu5SelL3BJetTagsByDRnoalgo ) fragment.HLTBTagMuJet300L1AK8FastJetMu5SelSequenceL3noalgo = cms.Sequence( fragment.HLTL3muonrecoNocandSequence + fragment.hltBSoftMuonMu5L3noalgo + fragment.hltBSoftMuonJet300L1AK8FastJetMu5SelL3TagInfosnoalgo + fragment.hltBSoftMuonJet300L1AK8FastJetMu5SelL3BJetTagsByDRnoalgo ) -fragment.HLTEle15Ele8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1LowETSingleAndDoubleEGOrPairFilter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg2Filter + fragment.hltEgammaClusterShape + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg2Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + fragment.HLTElePixelMatchSequence + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg2Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg2Filter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) -fragment.HLTEle23Ele12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrPairFilter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg2Filter + fragment.hltEgammaClusterShape + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg2Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + fragment.HLTElePixelMatchSequence + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg2Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg2Filter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) +fragment.HLTEle15Ele8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1LowETSingleAndDoubleEGOrPairFilter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg2Filter + fragment.hltEgammaClusterShape + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg2Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + fragment.HLTElePixelMatchSequence + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg2Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg2Filter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) +fragment.HLTEle23Ele12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrPairFilter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg2Filter + fragment.hltEgammaClusterShape + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg2Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + fragment.HLTElePixelMatchSequence + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg2Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg2Filter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) fragment.HLTMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegSequence = cms.Sequence( fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL1Filtered0 + fragment.HLTL2muonrecoSequence + cms.ignore(fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL2Filtered10) + fragment.HLTL3muonrecoSequence + cms.ignore(fragment.hltL1fForIterL3Mu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL1Filtered0) + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL3Filtered23 + fragment.HLTL3muontrkisovvlSequence + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL3IsoFiltered23 ) -fragment.HLTMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDetaFilter + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) +fragment.HLTMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDetaFilter + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) fragment.HLTMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLMuonlegSequence = cms.Sequence( fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLMuonlegL1Filtered0 + fragment.HLTL2muonrecoSequence + cms.ignore(fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLMuonlegL2Filtered10) + fragment.HLTL3muonrecoSequence + cms.ignore(fragment.hltL1fForIterL3Mu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLMuonlegL1Filtered0) + fragment.hltL3fL1sMu23EG10Filtered23 + fragment.HLTL3muontrkisovvlSequence + fragment.hltMuon23Ele8RelTrkIsoFiltered0p4MuonLeg ) -fragment.HLTMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5OpenFilter + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegDetaFilter + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) +fragment.HLTMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5OpenFilter + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegDetaFilter + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) fragment.HLTMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegSequence = cms.Sequence( fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0 + fragment.HLTL2muonrecoSequence + cms.ignore(fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL2Filtered5) + fragment.HLTL3muonrecoSequence + cms.ignore(fragment.hltL1fForIterL3Mu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0) + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3Filtered12 + fragment.HLTL3muontrkisovvlSequence + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3IsoFiltered12 ) -fragment.HLTMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) +fragment.HLTMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) fragment.HLTMu12DoubleUnSeededPho20Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltEG20EtUnseededFilter + fragment.HLTDoLocalHcalSequence + fragment.hltTowerMakerForAll + fragment.hltEgammaHoverEUnseeded + fragment.hltMu12DiEG20HEUnseededFilter ) fragment.HLTPho20CaloIdLV2TripleSeededSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1TripleEGOrDoubleEGOrSingleEG + fragment.hltEG20EtL1TripleEGFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG20HEL1TripleEGFilter + fragment.hltEgammaClusterShape + fragment.hltEG20CaloIdLV2ClusterShapeL1TripleEGFilter ) fragment.HLTTriplePho20CaloIdLV2UnseededSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltEG20EtUnseededFilter + fragment.HLTDoLocalHcalSequence + fragment.hltEgammaHoverEUnseeded + fragment.hltEG20HEUnseededFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltTriEG20CaloIdLV2ClusterShapeUnseededFilter ) @@ -122479,22 +125871,22 @@ fragment.HLTPhoton175Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + fragment.hltEG175EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG175HEFilter ) fragment.HLTPhoton200Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + fragment.hltEG200EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG200HEFilter ) fragment.HLTTrackReconstructionForIsoForPhotons = cms.Sequence( fragment.HLTPreAK4PFJetsRecoSequence + fragment.HLTTrackReconstructionForPFNoMu ) -fragment.HLTPhoton100EBTightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG100EBTightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG100EBTightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG100EBTightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG100EBTightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG100EBTightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG100EBTightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG100EBTightIDTightIsoTrackIsoFilter ) -fragment.HLTPhoton110EBTightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG110EBTightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG110EBTightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG110EBTightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG110EBTightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG110EBTightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG110EBTightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG110EBTightIDTightIsoTrackIsoFilter ) -fragment.HLTPhoton120EBTightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG120EBTightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG120EBTightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG120EBTightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG120EBTightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG120EBTightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG120EBTightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG120EBTightIDTightIsoTrackIsoFilter ) +fragment.HLTPhoton100EBTightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG100EBTightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG100EBTightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG100EBTightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG100EBTightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG100EBTightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG100EBTightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG100EBTightIDTightIsoTrackIsoFilter ) +fragment.HLTPhoton110EBTightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG110EBTightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG110EBTightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG110EBTightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG110EBTightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG110EBTightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG110EBTightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG110EBTightIDTightIsoTrackIsoFilter ) +fragment.HLTPhoton120EBTightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG120EBTightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG120EBTightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG120EBTightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG120EBTightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG120EBTightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG120EBTightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG120EBTightIDTightIsoTrackIsoFilter ) fragment.HLTPhoton100EBHE10Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG100EBHE10EtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG100EBHE10HEFilter ) fragment.HLTPhoton100EEHE10Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG100EEHE10EtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG100EEHE10HEFilter ) -fragment.HLTPhoton100EETightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG100EETightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG100EETightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG100EETightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG100EETightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG100EETightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG100EETightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG100EETightIDTightIsoTrackIsoFilter ) -fragment.HLTPhoton50R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG50R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG50R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG50R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG50R9Id90HE10IsoMTrackIsoFilter ) -fragment.HLTPhoton75R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG75R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG75R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG75R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG75R9Id90HE10IsoMTrackIsoFilter ) -fragment.HLTPhoton75R9Id90HE10IsoMEBOnlySequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG75R9Id90HE10IsoMEBOnlyEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG75R9Id90HE10IsoMEBOnlyHEFilter + fragment.hltEgammaR9ID + fragment.hltEG75R9Id90HE10IsoMEBOnlyR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMEBOnlyEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMEBOnlyHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG75R9Id90HE10IsoMEBOnlyTrackIsoFilter ) -fragment.HLTPhoton90R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG90R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG90R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG90R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG90R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG90R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG90R9Id90HE10IsoMTrackIsoFilter ) -fragment.HLTPhoton120R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG120R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG120R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG120R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG120R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG120R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG120R9Id90HE10IsoMTrackIsoFilter ) -fragment.HLTPhoton165R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG165R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG165R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG165R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG165R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG165R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG165R9Id90HE10IsoMTrackIsoFilter ) +fragment.HLTPhoton100EETightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG100EETightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG100EETightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG100EETightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG100EETightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG100EETightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG100EETightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG100EETightIDTightIsoTrackIsoFilter ) +fragment.HLTPhoton50R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG50R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG50R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG50R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG50R9Id90HE10IsoMTrackIsoFilter ) +fragment.HLTPhoton75R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG75R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG75R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG75R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG75R9Id90HE10IsoMTrackIsoFilter ) +fragment.HLTPhoton75R9Id90HE10IsoMEBOnlySequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG75R9Id90HE10IsoMEBOnlyEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG75R9Id90HE10IsoMEBOnlyHEFilter + fragment.hltEgammaR9ID + fragment.hltEG75R9Id90HE10IsoMEBOnlyR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMEBOnlyEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMEBOnlyHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG75R9Id90HE10IsoMEBOnlyTrackIsoFilter ) +fragment.HLTPhoton90R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG90R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG90R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG90R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG90R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG90R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG90R9Id90HE10IsoMTrackIsoFilter ) +fragment.HLTPhoton120R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG120R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG120R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG120R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG120R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG120R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG120R9Id90HE10IsoMTrackIsoFilter ) +fragment.HLTPhoton165R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG165R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG165R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG165R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG165R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG165R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG165R9Id90HE10IsoMTrackIsoFilter ) fragment.HLTDiphoton30L22R9Id85b90eORIso60CaloId15b35eANDHE12R9Id50b80eSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG30L1SingleAndDoubleEGOrEtFilter + fragment.hltEgammaR9ID + fragment.hltEG30LR9Id50b80eR9IdFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG30LHE12R9Id50b80eHEFilter + cms.ignore(fragment.hltEG30LR9Id85b90eHE12R9Id50b80eR9IdLastFilter) + fragment.hltEgammaClusterShape + cms.ignore(fragment.hltEG30LCaloId15b35eHE12R9Id50b80eClusterShapeFilter) + fragment.hltEgammaEcalPFClusterIso + cms.ignore(fragment.hltEG30LIso60CaloId15b35eHE12R9Id50b80eEcalIsoLastFilter) + fragment.hltEG30LRId85ORIso60CaloId15b35eANDHE12R9Id50b80eLegCombLastFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltDiEG22EtEta2p55UnseededFilter + fragment.hltEgammaR9IDUnseeded + fragment.hltDiEG22R9Id50b80eR9IdUnseededFilter + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG22HE12R9Id50b80eHEUnseededFilter + cms.ignore(fragment.hltEG22R9Id85b90eHE12R9Id50b80eR9UnseededLastFilter) + fragment.hltEgammaClusterShapeUnseeded + cms.ignore(fragment.hltEG22CaloId15b35eHE12R9Id50b80eClusterShapeUnseededFilter) + fragment.hltEgammaEcalPFClusterIsoUnseeded + cms.ignore(fragment.hltEG22Iso60CaloId15b35eHE12R9Id50b80eEcalIsoUnseededFilter) + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIsoUnseeded + cms.ignore(fragment.hltEG22Iso60CaloId15b35eHE12R9Id50b80eTrackIsoUnseededLastFilter) ) fragment.HLTDiphoton30PV18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55NewPixelMatchSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG30L1SingleAndDoubleEGOrEtFilter + fragment.hltEgammaR9ID + fragment.hltEG30PVR9Id50b80eR9IdFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG30PVHE10R9Id50b80eHEFilter + fragment.hltEG30PVR9Idb85e90HE10R9Id50b80eR9IdLastFilter + fragment.hltEgammaClusterShape + fragment.hltEG30PVCaloId15b35eHE10R9Id50b80eClusterShapeFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG30PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoFilter + fragment.hltEG30PVRId85ANDIso60CaloId15b35eANDHE10R9Id50b80eLegCombNewPixelMatchLastFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltDiEG18EtUnseededFilter + fragment.hltEgammaR9IDUnseeded + fragment.hltDiEG18PVR9Id50b80eR9IdUnseededFilter + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG18PVHE10R9Id50b80eHEUnseededFilter + fragment.HLTElePixelMatchUnseededSequence + fragment.hltDiEG18PVNewPixelMatchPMS2Filter + fragment.hltEG18PVR9Idb85e90HE10R9Id50b80eR9NewPixelMatchUnseededLastFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltEG18PVCaloId15b35eHE10R9Id50b80eClusterShapeNewPixelMatchUnseededFilter + fragment.hltEgammaEcalPFClusterIsoUnseeded + fragment.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoNewPixelMatchUnseededFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIsoUnseeded + fragment.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eTrackIsoUnseededNewPixelMatchLastFilter + fragment.hltDiEG18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55CombMassNewPixelMatchLastFilter ) fragment.HLTDiphoton30PV18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55NoPixelVetoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG30L1SingleAndDoubleEGOrEtFilter + fragment.hltEgammaR9ID + fragment.hltEG30PVR9Id50b80eR9IdFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG30PVHE10R9Id50b80eHEFilter + fragment.hltEG30PVR9Idb85e90HE10R9Id50b80eR9IdLastFilter + fragment.hltEgammaClusterShape + fragment.hltEG30PVCaloId15b35eHE10R9Id50b80eClusterShapeFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG30PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoFilter + fragment.hltEG30PVRId85ANDIso60CaloId15b35eANDHE10R9Id50b80eLegCombNoPixelVetoLastFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltDiEG18EtUnseededFilter + fragment.hltEgammaR9IDUnseeded + fragment.hltDiEG18PVR9Id50b80eR9IdUnseededFilter + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG18PVHE10R9Id50b80eHEUnseededFilter + fragment.hltEG18PVR9Idb85e90HE10R9Id50b80eR9NoPixelVetoUnseededLastFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltEG18PVCaloId15b35eHE10R9Id50b80eClusterShapeNoPixelVetoUnseededFilter + fragment.hltEgammaEcalPFClusterIsoUnseeded + fragment.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoNoPixelVetoUnseededFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIsoUnseeded + fragment.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eTrackIsoUnseededNoPixelVetoLastFilter + fragment.hltDiEG18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55CombMassNoPixelVetoLastFilter ) -fragment.HLTPhoton35R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1EGAndTauFilter + fragment.hltEG35R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG35R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG35R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG35R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG35R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG35R9Id90HE10IsoMTrackIsoFilter ) +fragment.HLTPhoton35R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1EGAndTauFilter + fragment.hltEG35R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG35R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG35R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG35R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG35R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG35R9Id90HE10IsoMTrackIsoFilter ) fragment.HLTMediumChargedIsoPFTauSequence = cms.Sequence( fragment.hltPFTauMediumAbsoluteChargedIsolationDiscriminator + fragment.hltPFTauMediumRelativeChargedIsolationDiscriminator + fragment.hltPFTauMediumAbsOrRelChargedIsolationDiscriminator ) fragment.HLTMediumChargedIsoPFTau35Sequence = cms.Sequence( fragment.HLTMediumChargedIsoPFTauSequence + fragment.hltPFTau35 + fragment.hltSelectedPFTausTrackFinding + fragment.hltPFTau35Track + fragment.hltPFTau2Prongs + fragment.hltSelectedPFTausTrackFindingMediumChargedIsolation + fragment.hltPFTau35TrackMediumChargedIso ) fragment.HLTIterativeTrackingTau3muNoL1MassIteration0 = cms.Sequence( fragment.hltPixelTracksForSeedsTau3muNoL1MassFilter + fragment.hltPixelTracksForSeedsTau3muNoL1MassFitter + fragment.hltPixelTracksTrackingRegionsForSeedsTau3muNoL1Mass + fragment.hltPixelLayerQuadruplets + fragment.hltPixelTracksHitDoubletsForSeedsTau3muNoL1Mass + fragment.hltPixelTracksHitQuadrupletsForSeedsTau3muNoL1Mass + fragment.hltPixelTracksForSeedsTau3muNoL1Mass + fragment.hltIter0DisplacedTau3muNoL1MassPixelSeedsFromPixelTracks + fragment.hltIter0DisplacedTau3muNoL1MassCkfTrackCandidates + fragment.hltIter0DisplacedTau3muNoL1MassCtfWithMaterialTracks + fragment.hltIter0DisplacedTau3muNoL1MassTrackCutClassifier + fragment.hltIter0DisplacedTau3muNoL1MassTrackSelectionHighPurity ) @@ -122515,13 +125907,13 @@ fragment.HLT2PromptTrackRequirementIter0DisplacedJetsMidPt = cms.Sequence( fragment.hltL3DisplacedDijetFullTracksJetTracksAssociatorAtVertexMidPt + fragment.hltL3DisplacedDijet100FullTracksTrackIPProducerMidPt + fragment.hltL3DisplacedDijetFullTracksJetTagProducerFromIPMidPt + fragment.hltTwoPromptHLTL3DisplacedDijetFullTracksHLTCaloJetTagFilterMidPt ) fragment.HLT2PromptTrackRequirementIter12DisplacedJetsMidPt = cms.Sequence( fragment.hltL4DisplacedDijetFullTracksJetPromptTracksAssociatorAtVertexMidPt + fragment.hltL4PromptDisplacedDijetFullTracksTrackIPProducerMidPt + fragment.hltL4PromptDisplacedDijetFullTracksJetTagProducerFromIPMidPt + fragment.hltL4PromptDisplacedDijetFullTracksHLTCaloJetTagFilterMidPt ) fragment.HLTDisplacedTrackRequirementDisplacedJetsMidPt = cms.Sequence( fragment.hltL4DisplacedDijetFullTracksJetTracksAssociatorAtVertexMidPt + fragment.hltL4TaggedDisplacedDijetFullTracksTrackIPProducerMidPt + fragment.hltL4DisplacedDijetFullTracksJetTagProducerFromIPMidPt + fragment.hltL4DisplacedDijetFullTracksHLTCaloJetTagFilterMidPt ) -fragment.HLTEle30erJetC34WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1IsoEG30erJetC34drMin0p3Filter + fragment.hltEG30L1IsoEGerJetC34drMin0p3EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle30erJetC34WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle30erJetC34WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle30erJetC34WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle30erJetC34WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle30erJetC34WPTightPixelMatchFilter + fragment.hltEle30erJetC34WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle30erJetC34WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle30erJetC34WPTightGsfMissingHitsFilter + fragment.hltEle30erJetC34WPTightGsfDetaFilter + fragment.hltEle30erJetC34WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle30erJetC34WPTightGsfTrackIsoFilter ) -fragment.HLTEle28erHTT100WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1IsoEG28erHTT100Filter + fragment.hltEG28L1IsoEG28erHTT100EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle28erHTT100WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle28erHTT100WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle28erHTT100WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle28erHTT100WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle28erHTT100WPTightPixelMatchFilter + fragment.hltEle28erHTT100WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle28erHTT100WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle28erHTT100WPTightGsfMissingHitsFilter + fragment.hltEle28erHTT100WPTightGsfDetaFilter + fragment.hltEle28erHTT100WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle28erHTT100WPTightGsfTrackIsoFilter ) +fragment.HLTEle30erJetC34WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1IsoEG30erJetC34drMin0p3Filter + fragment.hltEG30L1IsoEGerJetC34drMin0p3EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle30erJetC34WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle30erJetC34WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle30erJetC34WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle30erJetC34WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle30erJetC34WPTightPixelMatchFilter + fragment.hltEle30erJetC34WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle30erJetC34WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle30erJetC34WPTightGsfMissingHitsFilter + fragment.hltEle30erJetC34WPTightGsfDetaFilter + fragment.hltEle30erJetC34WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle30erJetC34WPTightGsfTrackIsoFilter ) +fragment.HLTEle28erHTT100WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1IsoEG28erHTT100Filter + fragment.hltEG28L1IsoEG28erHTT100EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle28erHTT100WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle28erHTT100WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle28erHTT100WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle28erHTT100WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle28erHTT100WPTightPixelMatchFilter + fragment.hltEle28erHTT100WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle28erHTT100WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle28erHTT100WPTightGsfMissingHitsFilter + fragment.hltEle28erHTT100WPTightGsfDetaFilter + fragment.hltEle28erHTT100WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle28erHTT100WPTightGsfTrackIsoFilter ) fragment.HLTPFHcalClusteringForEgammaUnseeded = cms.Sequence( fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowRecHitHF + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL + fragment.hltParticleFlowClusterHFForEgammaUnseeded ) -fragment.HLTEle28HighEtaSC20Mass55Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEle28HighEtaSC20EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle28HighEtaSC20ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle28HighEtaSC20HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle28HighEtaSC20EcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle28HighEtaSC20HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle28HighEtaSC20PixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle28HighEtaSC20OneOEMinusOneOPFilter + fragment.hltEle28HighEtaSC20DetaFilter + fragment.hltEle28HighEtaSC20DphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle28HighEtaSC20TrackIsoFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltDiEG20EtUnseededFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltEle28HighEtaSC20ClusterShapeUnseededFilter + fragment.hltEgammaEcalPFClusterIsoUnseeded + fragment.hltEle28HighEtaSC20EcalIsoFilterUnseeded + fragment.hltEgammaHoverEUnseeded + fragment.hltEle28HighEtaSC20HEFilterUnseeded + fragment.HLTPFHcalClusteringForEgammaUnseeded + fragment.hltEgammaHcalPFClusterIsoUnseeded + fragment.hltEle28HighEtaSC20HcalIsoFilterUnseeded + fragment.hltHighEtaSC20Selector + fragment.hltHighEtaSC20SelectorFilter + fragment.hltEle28HighEtaSC20Mass55Filter ) +fragment.HLTEle28HighEtaSC20Mass55Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEle28HighEtaSC20EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle28HighEtaSC20ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle28HighEtaSC20HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle28HighEtaSC20EcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle28HighEtaSC20HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle28HighEtaSC20PixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle28HighEtaSC20OneOEMinusOneOPFilter + fragment.hltEle28HighEtaSC20DetaFilter + fragment.hltEle28HighEtaSC20DphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle28HighEtaSC20TrackIsoFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltDiEG20EtUnseededFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltEle28HighEtaSC20ClusterShapeUnseededFilter + fragment.hltEgammaEcalPFClusterIsoUnseeded + fragment.hltEle28HighEtaSC20EcalIsoFilterUnseeded + fragment.hltEgammaHoverEUnseeded + fragment.hltEle28HighEtaSC20HEFilterUnseeded + fragment.HLTPFHcalClusteringForEgammaUnseeded + fragment.hltEgammaHcalPFClusterIsoUnseeded + fragment.hltEle28HighEtaSC20HcalIsoFilterUnseeded + fragment.hltHighEtaSC20Selector + fragment.hltHighEtaSC20SelectorFilter + fragment.hltEle28HighEtaSC20Mass55Filter ) fragment.HLTPhoton23Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGDoubleMu4OSEG12ORDoubleMu5OSEG12Filter + fragment.hltEG23EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG23HEFilter ) -fragment.HLTEle15VVVLGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5OpenFilter + fragment.hltEG15EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle15VVVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15VVVLHEFilter + fragment.hltEgammaEcalPFClusterIsoR02 + fragment.hltEle15VVVLEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoR02 + fragment.hltEle15VVVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle15VVVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle15VVVLGsfOneOEMinusOneOPFilter + fragment.hltEle15VVVLGsfChi2Filter + fragment.hltEle15VVVLGsfMissingHitsFilter + fragment.hltEle15VVVLGsfDetaFilter + fragment.hltEle15VVVLGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15VVVLGsfTrackIsoFilter ) -fragment.HLTEle50VVVLGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5OpenFilter + fragment.hltEG50IsoVVVLEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle50VVVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle50VVVLHEFilter + fragment.hltEgammaEcalPFClusterIsoR02 + fragment.hltEle50VVVLEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoR02 + fragment.hltEle50VVVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle50VVVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle50VVVLGsfOneOEMinusOneOPFilter + fragment.hltEle50VVVLGsfChi2Filter + fragment.hltEle50VVVLGsfMissingHitsFilter + fragment.hltEle50VVVLGsfDetaFilter + fragment.hltEle50VVVLGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle50VVVLGsfTrackIsoFilter ) +fragment.HLTEle15VVVLGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5OpenFilter + fragment.hltEG15EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle15VVVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15VVVLHEFilter + fragment.hltEgammaEcalPFClusterIsoR02 + fragment.hltEle15VVVLEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoR02 + fragment.hltEle15VVVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle15VVVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle15VVVLGsfOneOEMinusOneOPFilter + fragment.hltEle15VVVLGsfChi2Filter + fragment.hltEle15VVVLGsfMissingHitsFilter + fragment.hltEle15VVVLGsfDetaFilter + fragment.hltEle15VVVLGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15VVVLGsfTrackIsoFilter ) +fragment.HLTEle50VVVLGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5OpenFilter + fragment.hltEG50IsoVVVLEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle50VVVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle50VVVLHEFilter + fragment.hltEgammaEcalPFClusterIsoR02 + fragment.hltEle50VVVLEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoR02 + fragment.hltEle50VVVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle50VVVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle50VVVLGsfOneOEMinusOneOPFilter + fragment.hltEle50VVVLGsfChi2Filter + fragment.hltEle50VVVLGsfMissingHitsFilter + fragment.hltEle50VVVLGsfDetaFilter + fragment.hltEle50VVVLGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle50VVVLGsfTrackIsoFilter ) fragment.HLTMuVVVLCombinedIsolationR02Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTDoLocalHcalSequence + fragment.hltTowerMakerForAll + fragment.hltFixedGridRhoFastjetAllCaloForMuons + fragment.hltL3CaloMuonCorrectedVVVLIsolations + fragment.HLTTrackReconstructionForIsoL3MuonIter02 + fragment.hltL3MuonCombRelIsolationVVVL ) fragment.HLTDiMu4Ele9CaloIdLTrackIdLMuonlegSequence = cms.Sequence( fragment.hltDiMu4Ele9CaloIdLTrackIdLMuonlegL1Filtered0 + fragment.HLTL2muonrecoSequence + cms.ignore(fragment.hltDiMu4Ele9CaloIdLTrackIdLMuonlegL2Filtered4) + fragment.HLTL3muonrecoSequence + cms.ignore(fragment.hltL1fForIterL3DiMu4Ele9CaloIdLTrackIdLMuonlegL1Filtered0) + fragment.hltL3fL1DoubleMu4EG9f0Filtered4 ) fragment.HLTDiMu4Ele9CaloIdLTrackIdLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegL1MatchFilter + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegHEFilter + fragment.HLTElePixelMatchSequence + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegOneOEMinusOneOPFilter + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegDetaFilter + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegDphiFilter ) @@ -122546,10 +125938,10 @@ fragment.HLTL3muonrecoNocandSequenceNoVtx = cms.Sequence( fragment.HLTIterL3muonTkCandidateSequenceNoVtx + fragment.hltIterL3MuonMergedNoVtx + fragment.hltIterL3MuonAndMuonFromL1MergedNoVtx + fragment.hltL3MuonsIterL3LinksNoVtx + fragment.hltIterL3MuonsNoVtx ) fragment.HLTL3muonrecoSequenceNoVtx = cms.Sequence( fragment.HLTL3muonrecoNocandSequenceNoVtx + fragment.hltIterL3MuonCandidatesNoVtx ) fragment.HLTTrackerMuonSequenceNoVtx = cms.Sequence( fragment.HLTDoLocalPixelSequence + fragment.HLTRecoPixelTracksSequence + fragment.HLTDoLocalStripSequence + fragment.hltMuTrackSeeds + fragment.hltMuCkfTrackCandidates + fragment.hltMuCtfTracks + fragment.HLTL3muonrecoNocandSequenceNoVtx + fragment.hltDiMuonMergingNoVtx + fragment.hltDiMuonLinksNoVtx + fragment.hltGlbTrkMuonsNoVtx + fragment.hltGlbTrkMuonCandsNoVtx ) -fragment.HLTEle8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle8CaloIdLTrackIdLIsoVLL1MatchFilter + fragment.hltEle8CaloIdLTrackIdLIsoVLEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle8CaloIdLTrackIdLIsoVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle8CaloIdLTrackIdLIsoVLHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle8CaloIdLTrackIdLIsoVLEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle8CaloIdLTrackIdLIsoVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle8CaloIdLTrackIdLIsoVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle8CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + fragment.hltEle8CaloIdLTrackIdLIsoVLDetaFilter + fragment.hltEle8CaloIdLTrackIdLIsoVLDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle8CaloIdLTrackIdLIsoVLTrackIsoFilter ) -fragment.HLTEle12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle12CaloIdLTrackIdLIsoVLL1MatchFilter + fragment.hltEle12CaloIdLTrackIdLIsoVLEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle12CaloIdLTrackIdLIsoVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle12CaloIdLTrackIdLIsoVLHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle12CaloIdLTrackIdLIsoVLEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle12CaloIdLTrackIdLIsoVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle12CaloIdLTrackIdLIsoVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle12CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + fragment.hltEle12CaloIdLTrackIdLIsoVLDetaFilter + fragment.hltEle12CaloIdLTrackIdLIsoVLDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle12CaloIdLTrackIdLIsoVLTrackIsoFilter ) -fragment.HLTEle15CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30L1MatchFilter + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30DetaFilter + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30DphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) -fragment.HLTEle23CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30L1MatchFilter + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30DetaFilter + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30DphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) +fragment.HLTEle8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle8CaloIdLTrackIdLIsoVLL1MatchFilter + fragment.hltEle8CaloIdLTrackIdLIsoVLEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle8CaloIdLTrackIdLIsoVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle8CaloIdLTrackIdLIsoVLHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle8CaloIdLTrackIdLIsoVLEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle8CaloIdLTrackIdLIsoVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle8CaloIdLTrackIdLIsoVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle8CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + fragment.hltEle8CaloIdLTrackIdLIsoVLDetaFilter + fragment.hltEle8CaloIdLTrackIdLIsoVLDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle8CaloIdLTrackIdLIsoVLTrackIsoFilter ) +fragment.HLTEle12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle12CaloIdLTrackIdLIsoVLL1MatchFilter + fragment.hltEle12CaloIdLTrackIdLIsoVLEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle12CaloIdLTrackIdLIsoVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle12CaloIdLTrackIdLIsoVLHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle12CaloIdLTrackIdLIsoVLEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle12CaloIdLTrackIdLIsoVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle12CaloIdLTrackIdLIsoVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle12CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + fragment.hltEle12CaloIdLTrackIdLIsoVLDetaFilter + fragment.hltEle12CaloIdLTrackIdLIsoVLDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle12CaloIdLTrackIdLIsoVLTrackIsoFilter ) +fragment.HLTEle15CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30L1MatchFilter + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30DetaFilter + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30DphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) +fragment.HLTEle23CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30L1MatchFilter + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30DetaFilter + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30DphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) fragment.HLTEle8CaloIdMGsfTrkIdMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaCandidatesWrapper + fragment.hltEle8EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle8HEFilter + fragment.hltEgammaClusterShape + fragment.hltEle8CaloIdMClusterShapeFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle8CaloIdMPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle8CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + fragment.hltEle8CaloIdMGsfTrackIdMDetaFilter + fragment.hltEle8CaloIdMGsfTrackIdMDphiFilter ) fragment.HLTEle17CaloIdMGsfTrkIdMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaCandidatesWrapper + fragment.hltEle17EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle17HEFilter + fragment.hltEgammaClusterShape + fragment.hltEle17CaloIdMClusterShapeFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle17CaloIdMPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle17CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + fragment.hltEle17CaloIdMGsfTrackIdMDetaFilter + fragment.hltEle17CaloIdMGsfTrackIdMDphiFilter ) fragment.HLTEle23CaloIdMGsfTrkIdMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaCandidatesWrapper + fragment.hltEle23EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle23HEFilter + fragment.hltEgammaClusterShape + fragment.hltEle23CaloIdMClusterShapeFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle23CaloIdMPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle23CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + fragment.hltEle23CaloIdMGsfTrackIdMDetaFilter + fragment.hltEle23CaloIdMGsfTrackIdMDphiFilter ) @@ -122561,8 +125953,8 @@ fragment.HLTEle250CaloIdVTGsfTrkIdTGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + fragment.hltEG250EtFilter + fragment.hltEgammaClusterShape + fragment.hltEG250CaloIdVTClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG250CaloIdVTHEFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle250CaloIdVTPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle250CaloIdVTGsfTrkIdTGsfDetaFilter + fragment.hltEle250CaloIdVTGsfTrkIdTGsfDphiFilter ) fragment.HLTEle300CaloIdVTGsfTrkIdTGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + fragment.hltEG300EtFilter + fragment.hltEgammaClusterShape + fragment.hltEG300CaloIdVTClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG300CaloIdVTHEFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle300CaloIdVTPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle300CaloIdVTGsfTrkIdTGsfDetaFilter + fragment.hltEle300CaloIdVTGsfTrkIdTGsfDphiFilter ) fragment.HLTPFHT350MinPFJet15Sequence = cms.Sequence( fragment.HLTAK4CaloJetsSequence + fragment.hltHtMhtJet10 + fragment.hltHT175Jet10 + fragment.HLTAK4PFJetsSequence + fragment.hltPFHTJet15 + fragment.hltPFHT350Jet15 ) -fragment.HLTPhoton60R9Id90CaloIdLIsoLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + fragment.hltEG60EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG60HEFilter + fragment.hltEgammaR9ID + fragment.hltEG60R9Id90CaloIdLIsoLR9IdFilter + fragment.hltEgammaClusterShape + fragment.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter ) -fragment.HLTPhoton60R9Id90CaloIdLIsoLDisplacedIdLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + fragment.hltEG60EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG60HEFilter + fragment.hltEgammaR9ID + fragment.hltEG60R9Id90CaloIdLIsoLR9IdFilter + fragment.hltEgammaClusterShape + fragment.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter + fragment.hltEG60R9Id90CaloIdLIsoLDisplacedIdFilter ) +fragment.HLTPhoton60R9Id90CaloIdLIsoLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + fragment.hltEG60EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG60HEFilter + fragment.hltEgammaR9ID + fragment.hltEG60R9Id90CaloIdLIsoLR9IdFilter + fragment.hltEgammaClusterShape + fragment.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter ) +fragment.HLTPhoton60R9Id90CaloIdLIsoLDisplacedIdLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + fragment.hltEG60EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG60HEFilter + fragment.hltEgammaR9ID + fragment.hltEG60R9Id90CaloIdLIsoLR9IdFilter + fragment.hltEgammaClusterShape + fragment.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter + fragment.hltEG60R9Id90CaloIdLIsoLDisplacedIdFilter ) fragment.HLTSC3018EIso15HE30eMass70Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGWithJetAndTauFilter + fragment.hltEG30L1SingleAndDoubleEGWithTauWithJetEtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHToverET + fragment.hltEG30HE30HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG30EIso15HE30EcalIsoLastFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltDiEG18EtEta2p55UnseededFilter + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG18HE30eHEUnseededFilter + fragment.hltEgammaEcalPFClusterIsoUnseeded + fragment.hltEG18EIso15HE30EcalIsoUnseededFilter + fragment.hltDiEG18EIso15ANDHE30Mass70CombMassLastFilter ) fragment.HLTBeginSequenceL1Fat = cms.Sequence( fragment.hltTriggerType + fragment.hltL1EventNumberL1Fat + fragment.HLTL1UnpackerSequence + fragment.HLTBeamSpot ) fragment.HLTBeginSequenceRandom = cms.Sequence( fragment.hltRandomEventsFilter + fragment.hltGtStage2Digis ) @@ -122570,12 +125962,11 @@ fragment.HLTNoPUSequence = cms.Sequence( fragment.HLTDoLocalPixelSequenceRegForBTag + fragment.HLTFastRecopixelvertexingSequence + fragment.hltPixelTracksForNoPUFilter + fragment.hltSelectorJets20L1FastJetForNoPU + fragment.hltPixelTracksForNoPUFitter + fragment.hltPixelTracksTrackingRegionsForNoPU + fragment.hltPixelTracksHitDoubletsForNoPU + fragment.hltPixelTracksHitQuadrupletsForNoPU + fragment.hltPixelTracksForNoPU + fragment.hltCaloJetFromPV ) fragment.HLTCaloBTagScoutingSequence = cms.Sequence( fragment.HLTAK4CaloJetsSequence + fragment.HLTNoPUSequence + fragment.HLTBtagDeepCSVSequenceL3 ) fragment.HLTMuIsolationSequence = cms.Sequence( fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons + fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons + fragment.HLTTrackReconstructionForIsoL3MuonIter02 + fragment.hltMuonTkRelIsolationCut0p07Map ) -fragment.HLTPFScoutingSequence = cms.Sequence( fragment.HLTAK4PFJetsSequence + fragment.hltPFMETProducer + fragment.HLTMuIsolationSequence + fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEgammaEcalPFClusterIso + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.HLTElePixelMatchSequence + fragment.HLTGsfElectronSequence + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso ) +fragment.HLTPFScoutingSequence = cms.Sequence( fragment.HLTAK4PFJetsSequence + fragment.hltPFMETProducer + fragment.HLTMuIsolationSequence + fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEgammaEcalPFClusterIso + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.HLTElePixelMatchSequence + fragment.HLTGsfElectronSequence + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso ) fragment.HLTBTagScoutingSequence = cms.Sequence( fragment.HLTAK4PFJetsSequence + fragment.HLTBtagDeepCSVSequencePF ) fragment.HLTPFClusteringEcalMFForMuonsNoVtx = cms.Sequence( fragment.hltRecHitInRegionForMuonsMFnoVtx + fragment.hltRecHitInRegionForMuonsESNoVtx + fragment.hltParticleFlowRecHitECALForMuonsMFNoVtx + fragment.hltParticleFlowRecHitPSForMuonsNoVtx + fragment.hltParticleFlowClusterECALUncorrectedForMuonsMFNoVtx + fragment.hltParticleFlowClusterPSForMuonsNoVtx + fragment.hltParticleFlowClusterECALForMuonsMFNoVtx ) fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsNoVtx = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalMFSequence + fragment.HLTDoLocalHcalSequence + fragment.hltTowerMakerForECALMF + fragment.hltTowerMakerForHCAL + fragment.hltFixedGridRhoFastjetECALMFForMuons + fragment.hltFixedGridRhoFastjetHCAL + fragment.HLTPFClusteringEcalMFForMuonsNoVtx + fragment.hltMuonEcalMFPFClusterIsoForMuonsNoVtx ) -fragment.HLTPFHcalClusteringForMuonsNoVtx = cms.Sequence( fragment.hltRegionalTowerForMuonsNoVtx + fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL ) -fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsNoVtx = cms.Sequence( fragment.HLTPFHcalClusteringForMuonsNoVtx + fragment.hltMuonHcalPFClusterIsoForMuonsNoVtx ) +fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsNoVtx = cms.Sequence( fragment.HLTPFHcalClustering + fragment.hltMuonHcalPFClusterIsoForMuonsNoVtx ) fragment.HLTPixelTrackingL3MuonNoVtx = cms.Sequence( fragment.hltL3MuonVertexNoVtx + fragment.HLTDoLocalPixelSequence + fragment.hltPixelLayerQuadruplets + fragment.hltPixelTracksL3MuonFilter + fragment.hltPixelTracksL3MuonFitter + fragment.hltPixelTracksTrackingRegionsL3MuonNoVtx + fragment.hltPixelTracksHitDoubletsL3MuonNoVtx + fragment.hltPixelTracksHitQuadrupletsL3MuonNoVtx + fragment.hltPixelTracksL3MuonNoVtx + fragment.hltPixelVerticesL3MuonNoVtx ) fragment.HLTIterativeTrackingL3MuonIteration0NoVtx = cms.Sequence( fragment.hltPixelTracksForSeedsL3MuonFilter + fragment.hltPixelTracksForSeedsL3MuonFitter + fragment.hltPixelTracksTrackingRegionsForSeedsL3MuonNoVtx + fragment.hltPixelTracksHitDoubletsForSeedsL3MuonNoVtx + fragment.hltPixelTracksHitQuadrupletsForSeedsL3MuonNoVtx + fragment.hltPixelTracksForSeedsL3MuonNoVtx + fragment.hltIter0L3MuonPixelSeedsFromPixelTracksNoVtx + fragment.hltIter0L3MuonCkfTrackCandidatesNoVtx + fragment.hltIter0L3MuonCtfWithMaterialTracksNoVtx + fragment.hltIter0L3MuonTrackCutClassifierNoVtx + fragment.hltIter0L3MuonTrackSelectionHighPurityNoVtx ) fragment.HLTIterativeTrackingL3MuonIteration1NoVtx = cms.Sequence( fragment.hltIter1L3MuonClustersRefRemovalNoVtx + fragment.hltIter1L3MuonMaskedMeasurementTrackerEventNoVtx + fragment.hltIter1L3MuonPixelLayerQuadrupletsNoVtx + fragment.hltIter1L3MuonPixelTrackingRegionsNoVtx + fragment.hltIter1L3MuonPixelClusterCheck + fragment.hltIter1L3MuonPixelHitDoubletsNoVtx + fragment.hltIter1L3MuonPixelHitQuadrupletsNoVtx + fragment.hltIter1L3MuonPixelSeedsNoVtx + fragment.hltIter1L3MuonCkfTrackCandidatesNoVtx + fragment.hltIter1L3MuonCtfWithMaterialTracksNoVtx + fragment.hltIter1L3MuonTrackCutClassifierPromptNoVtx + fragment.hltIter1L3MuonTrackCutClassifierDetachedNoVtx + fragment.hltIter1L3MuonTrackCutClassifierMergedNoVtx + fragment.hltIter1L3MuonTrackSelectionHighPurityNoVtx ) @@ -122583,7 +125974,42 @@ fragment.HLTIterativeTrackingL3MuonIter02NoVtx = cms.Sequence( fragment.HLTIterativeTrackingL3MuonIteration0NoVtx + fragment.HLTIterativeTrackingL3MuonIteration1NoVtx + fragment.hltIter1L3MuonMergedNoVtx + fragment.HLTIterativeTrackingL3MuonIteration2NoVtx + fragment.hltIter2L3MuonMergedNoVtx ) fragment.HLTTrackReconstructionForIsoL3MuonIter02NoVtx = cms.Sequence( fragment.HLTPixelTrackingL3MuonNoVtx + fragment.HLTDoLocalStripSequence + fragment.HLTIterativeTrackingL3MuonIter02NoVtx ) fragment.HLTMuIsolationSequenceNoVtx = cms.Sequence( fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsNoVtx + fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsNoVtx + fragment.HLTTrackReconstructionForIsoL3MuonIter02NoVtx + fragment.hltMuonTkRelIsolationCut0p09MapNoVtx ) -fragment.HLTPFScoutingSequenceNoVtx = cms.Sequence( fragment.HLTAK4PFJetsSequence + fragment.hltPFMETProducer + fragment.HLTMuIsolationSequenceNoVtx + fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEgammaEcalPFClusterIso + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.HLTElePixelMatchSequence + fragment.HLTGsfElectronSequence + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso ) +fragment.HLTPFScoutingSequenceNoVtx = cms.Sequence( fragment.HLTAK4PFJetsSequence + fragment.hltPFMETProducer + fragment.HLTMuIsolationSequenceNoVtx + fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEgammaEcalPFClusterIso + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.HLTElePixelMatchSequence + fragment.HLTGsfElectronSequence + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso ) +fragment.HLTTrackReconstructionForPixelOnlyPF = cms.Sequence( fragment.HLTDoLocalPixelSequence + fragment.HLTRecopixelvertexingSequence + fragment.hltPixelTracksZetaClean + fragment.hltPixelOnlyPFMuonMerging + fragment.hltPixelOnlyMuonLinks + fragment.hltPixelOnlyMuons ) +fragment.HLTPixelOnlyParticleFlowSequence = cms.Sequence( fragment.HLTPreshowerSequence + fragment.hltParticleFlowRecHitECALUnseeded + fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowRecHitHF + fragment.hltParticleFlowRecHitPSUnseeded + fragment.hltParticleFlowClusterECALUncorrectedUnseeded + fragment.hltParticleFlowClusterPSUnseeded + fragment.hltParticleFlowClusterECALUnseeded + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL + fragment.hltParticleFlowClusterHF + fragment.hltLightPixelOnlyPFTracks + fragment.hltPixelOnlyParticleFlowBlock + fragment.hltPixelOnlyParticleFlow ) +fragment.HLTAK4PixelOnlyPFJetsReconstructionSequence = cms.Sequence( fragment.HLTL2muonrecoSequence + fragment.HLTL3muonrecoSequence + fragment.HLTTrackReconstructionForPixelOnlyPF + fragment.HLTPixelOnlyParticleFlowSequence + fragment.hltAK4PixelOnlyPFJets + fragment.hltAK4PixelOnlyPFJetsLooseID + fragment.hltAK4PixelOnlyPFJetsTightID ) +fragment.HLTAK4PixelOnlyPFCorrectorProducersSequence = cms.Sequence( fragment.hltAK4PixelOnlyPFFastJetCorrector + fragment.hltAK4PixelOnlyPFRelativeCorrector + fragment.hltAK4PixelOnlyPFAbsoluteCorrector + fragment.hltAK4PixelOnlyPFResidualCorrector + fragment.hltAK4PixelOnlyPFCorrector ) +fragment.HLTAK4PixelOnlyPFJetsCorrectionSequence = cms.Sequence( fragment.hltFixedGridRhoFastjetPixelOnlyAll + fragment.HLTAK4PixelOnlyPFCorrectorProducersSequence + fragment.hltAK4PixelOnlyPFJetsCorrected + fragment.hltAK4PixelOnlyPFJetsLooseIDCorrected + fragment.hltAK4PixelOnlyPFJetsTightIDCorrected ) +fragment.HLTAK4PixelOnlyPFJetsSequence = cms.Sequence( fragment.HLTPreAK4PFJetsRecoSequence + fragment.HLTAK4PixelOnlyPFJetsReconstructionSequence + fragment.HLTAK4PixelOnlyPFJetsCorrectionSequence ) +fragment.HLTPixelOnlyPFScoutingSequence = cms.Sequence( fragment.HLTAK4PixelOnlyPFJetsSequence + fragment.hltPixelOnlyPFMETProducer + fragment.HLTMuIsolationSequence + fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEgammaEcalPFClusterIso + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.HLTElePixelMatchSequence + fragment.HLTGsfElectronSequence + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso ) +fragment.HLTL2muonrecoSequenceScoutingNoVtx = cms.Sequence( fragment.HLTL2muonrecoNocandSequence + fragment.hltL2MuonCandidatesScoutingNoVtx ) +fragment.HLTIterL3OImuonTkCandidateSequenceScoutingNoVtx = cms.Sequence( fragment.hltIterL3OISeedsFromL2MuonsScoutingNoVtx + fragment.hltIterL3OITrackCandidatesScoutingNoVtx + fragment.hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx + fragment.hltIterL3OIMuonTrackCutClassifierScoutingNoVtx + fragment.hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx + fragment.hltL3MuonsIterL3OIScoutingNoVtx ) +fragment.HLTIterL3MuonRecoPixelTracksSequenceScoutingNoVtx = cms.Sequence( fragment.hltIterL3MuonPixelTracksFilterScoutingNoVtx + fragment.hltIterL3MuonPixelTracksFitterScoutingNoVtx + fragment.hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx + fragment.hltIterL3MuonPixelLayerQuadrupletsScoutingNoVtx + fragment.hltIterL3MuonPixelTracksHitDoubletsScoutingNoVtx + fragment.hltIterL3MuonPixelTracksHitQuadrupletsScoutingNoVtx + fragment.hltIterL3MuonPixelTracksScoutingNoVtx ) +fragment.HLTIterL3MuonRecopixelvertexingSequenceScoutingNoVtx = cms.Sequence( fragment.HLTIterL3MuonRecoPixelTracksSequenceScoutingNoVtx + fragment.hltIterL3MuonPixelVerticesScoutingNoVtx + fragment.hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx ) +fragment.HLTIterativeTrackingIteration0ForIterL3MuonScoutingNoVtx = cms.Sequence( fragment.hltIter0IterL3MuonPixelSeedsFromPixelTracksScoutingNoVtx + fragment.hltIter0IterL3MuonCkfTrackCandidatesScoutingNoVtx + fragment.hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx + fragment.hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx + fragment.hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx ) +fragment.HLTIterativeTrackingIteration2ForIterL3MuonScoutingNoVtx = cms.Sequence( fragment.hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx + fragment.hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx + fragment.hltIter2IterL3MuonPixelLayerTripletsScoutingNoVtx + fragment.hltIter2IterL3MuonPixelClusterCheckScoutingNoVtx + fragment.hltIter2IterL3MuonPixelHitDoubletsScoutingNoVtx + fragment.hltIter2IterL3MuonPixelHitTripletsScoutingNoVtx + fragment.hltIter2IterL3MuonPixelSeedsScoutingNoVtx + fragment.hltIter2IterL3MuonCkfTrackCandidatesScoutingNoVtx + fragment.hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx + fragment.hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx + fragment.hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx ) +fragment.HLTIterativeTrackingIter02ForIterL3MuonScoutingNoVtx = cms.Sequence( fragment.HLTIterativeTrackingIteration0ForIterL3MuonScoutingNoVtx + fragment.HLTIterativeTrackingIteration2ForIterL3MuonScoutingNoVtx + fragment.hltIter2IterL3MuonMergedScoutingNoVtx ) +fragment.HLTIterL3IOmuonTkCandidateSequenceScoutingNoVtx = cms.Sequence( fragment.HLTIterL3MuonRecopixelvertexingSequenceScoutingNoVtx + fragment.HLTIterativeTrackingIter02ForIterL3MuonScoutingNoVtx + fragment.hltL3MuonsIterL3IOScoutingNoVtx ) +fragment.HLTIterL3OIAndIOFromL2muonTkCandidateSequenceScoutingNoVtx = cms.Sequence( fragment.HLTIterL3OImuonTkCandidateSequenceScoutingNoVtx + fragment.hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx + fragment.hltIterL3OIL3MuonsScoutingNoVtx + fragment.hltIterL3OIL3MuonCandidatesScoutingNoVtx + fragment.hltL2SelectorForL3IOScoutingNoVtx + fragment.HLTIterL3IOmuonTkCandidateSequenceScoutingNoVtx + fragment.hltIterL3MuonsFromL2LinksCombinationScoutingNoVtx + fragment.hltIterL3MuonsFromL2ScoutingNoVtx ) +fragment.HLTRecoPixelTracksSequenceForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( fragment.hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx + fragment.hltIterL3FromL1MuonPixelLayerQuadrupletsScoutingNoVtx + fragment.hltIterL3FromL1MuonPixelTracksHitDoubletsScoutingNoVtx + fragment.hltIterL3FromL1MuonPixelTracksHitQuadrupletsScoutingNoVtx + fragment.hltIterL3FromL1MuonPixelTracksScoutingNoVtx ) +fragment.HLTRecopixelvertexingSequenceForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( fragment.HLTRecoPixelTracksSequenceForIterL3FromL1MuonScoutingNoVtx + fragment.hltIterL3FromL1MuonPixelVerticesScoutingNoVtx + fragment.hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx ) +fragment.HLTIterativeTrackingIteration0ForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( fragment.hltIter0IterL3FromL1MuonPixelSeedsFromPixelTracksScoutingNoVtx + fragment.hltIter0IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx + fragment.hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx + fragment.hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx + fragment.hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx ) +fragment.HLTIterativeTrackingIteration2ForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( fragment.hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonPixelLayerTripletsScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonPixelClusterCheckScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonPixelHitDoubletsScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonPixelHitTripletsScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonPixelSeedsScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx ) +fragment.HLTIterativeTrackingIter02ForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( fragment.HLTIterativeTrackingIteration0ForIterL3FromL1MuonScoutingNoVtx + fragment.HLTIterativeTrackingIteration2ForIterL3FromL1MuonScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonMergedScoutingNoVtx ) +fragment.HLTIterL3IOmuonFromL1TkCandidateSequenceScoutingNoVtx = cms.Sequence( fragment.HLTRecopixelvertexingSequenceForIterL3FromL1MuonScoutingNoVtx + fragment.HLTIterativeTrackingIter02ForIterL3FromL1MuonScoutingNoVtx ) +fragment.HLTIterL3muonTkCandidateSequenceScoutingNoVtx = cms.Sequence( fragment.HLTDoLocalPixelSequence + fragment.HLTDoLocalStripSequence + fragment.HLTIterL3OIAndIOFromL2muonTkCandidateSequenceScoutingNoVtx + fragment.hltIterL3MuonL1MuonNoL2SelectorScoutingNoVtx + fragment.HLTIterL3IOmuonFromL1TkCandidateSequenceScoutingNoVtx ) +fragment.HLTL3muonrecoNocandSequenceScoutingNoVtx = cms.Sequence( fragment.HLTIterL3muonTkCandidateSequenceScoutingNoVtx + fragment.hltIterL3MuonMergedScoutingNoVtx + fragment.hltIterL3MuonAndMuonFromL1MergedScoutingNoVtx + fragment.hltL3MuonsIterL3LinksScoutingNoVtx + fragment.hltIterL3MuonsScoutingNoVtx ) +fragment.HLTL3muonrecoSequenceScoutingNoVtx = cms.Sequence( fragment.HLTL3muonrecoNocandSequenceScoutingNoVtx + fragment.hltIterL3MuonCandidatesScoutingNoVtx ) +fragment.HLTPFClusteringEcalMFForMuonsScoutingNoVtx = cms.Sequence( fragment.hltRecHitInRegionForMuonsMFnoVtx + fragment.hltRecHitInRegionForMuonsESScoutingNoVtx + fragment.hltParticleFlowRecHitECALForMuonsMFScoutingNoVtx + fragment.hltParticleFlowRecHitPSForMuonsScoutingNoVtx + fragment.hltParticleFlowClusterECALUncorrectedForMuonsMFScoutingNoVtx + fragment.hltParticleFlowClusterPSForMuonsScoutingNoVtx + fragment.hltParticleFlowClusterECALForMuonsMFScoutingNoVtx ) +fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalMFSequence + fragment.HLTDoLocalHcalSequence + fragment.hltTowerMakerForECALMF + fragment.hltTowerMakerForHCAL + fragment.hltFixedGridRhoFastjetECALMFForMuons + fragment.hltFixedGridRhoFastjetHCAL + fragment.HLTPFClusteringEcalMFForMuonsScoutingNoVtx + fragment.hltMuonEcalMFPFClusterIsoForMuonsScoutingNoVtx ) +fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx = cms.Sequence( fragment.HLTPFHcalClustering + fragment.hltMuonHcalPFClusterIsoForMuonsScoutingNoVtx ) +fragment.HLTPixelTrackingL3MuonScoutingNoVtx = cms.Sequence( fragment.hltL3MuonVertexScoutingNoVtx + fragment.HLTDoLocalPixelSequence + fragment.hltPixelLayerQuadruplets + fragment.hltPixelTracksL3MuonFilter + fragment.hltPixelTracksL3MuonFitter + fragment.hltPixelTracksTrackingRegionsL3MuonScoutingNoVtx + fragment.hltPixelTracksHitDoubletsL3MuonScoutingNoVtx + fragment.hltPixelTracksHitQuadrupletsL3MuonScoutingNoVtx + fragment.hltPixelTracksL3MuonScoutingNoVtx + fragment.hltPixelVerticesL3MuonScoutingNoVtx ) +fragment.HLTIterativeTrackingL3MuonIteration0ScoutingNoVtx = cms.Sequence( fragment.hltPixelTracksForSeedsL3MuonFilter + fragment.hltPixelTracksForSeedsL3MuonFitter + fragment.hltPixelTracksTrackingRegionsForSeedsL3MuonScoutingNoVtx + fragment.hltPixelTracksHitDoubletsForSeedsL3MuonScoutingNoVtx + fragment.hltPixelTracksHitQuadrupletsForSeedsL3MuonScoutingNoVtx + fragment.hltPixelTracksForSeedsL3MuonScoutingNoVtx + fragment.hltIter0L3MuonPixelSeedsFromPixelTracksScoutingNoVtx + fragment.hltIter0L3MuonCkfTrackCandidatesScoutingNoVtx + fragment.hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx + fragment.hltIter0L3MuonTrackCutClassifierScoutingNoVtx + fragment.hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx ) +fragment.HLTIterativeTrackingL3MuonIteration1ScoutingNoVtx = cms.Sequence( fragment.hltIter1L3MuonClustersRefRemovalScoutingNoVtx + fragment.hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx + fragment.hltIter1L3MuonPixelLayerQuadrupletsScoutingNoVtx + fragment.hltIter1L3MuonPixelTrackingRegionsScoutingNoVtx + fragment.hltIter1L3MuonPixelClusterCheck + fragment.hltIter1L3MuonPixelHitDoubletsScoutingNoVtx + fragment.hltIter1L3MuonPixelHitQuadrupletsScoutingNoVtx + fragment.hltIter1L3MuonPixelSeedsScoutingNoVtx + fragment.hltIter1L3MuonCkfTrackCandidatesScoutingNoVtx + fragment.hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx + fragment.hltIter1L3MuonTrackCutClassifierPromptScoutingNoVtx + fragment.hltIter1L3MuonTrackCutClassifierDetachedScoutingNoVtx + fragment.hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx + fragment.hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx ) +fragment.HLTIterativeTrackingL3MuonIteration2ScoutingNoVtx = cms.Sequence( fragment.hltIter2L3MuonClustersRefRemovalScoutingNoVtx + fragment.hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx + fragment.hltIter2L3MuonPixelLayerTripletsScoutingNoVtx + fragment.hltIter2L3MuonPixelTrackingRegionsScoutingNoVtx + fragment.hltIter2L3MuonPixelClusterCheck + fragment.hltIter2L3MuonPixelHitDoubletsScoutingNoVtx + fragment.hltIter2L3MuonPixelHitTripletsScoutingNoVtx + fragment.hltIter2L3MuonPixelSeedsScoutingNoVtx + fragment.hltIter2L3MuonCkfTrackCandidatesScoutingNoVtx + fragment.hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx + fragment.hltIter2L3MuonTrackCutClassifierScoutingNoVtx + fragment.hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx ) +fragment.HLTIterativeTrackingL3MuonIter02ScoutingNoVtx = cms.Sequence( fragment.HLTIterativeTrackingL3MuonIteration0ScoutingNoVtx + fragment.HLTIterativeTrackingL3MuonIteration1ScoutingNoVtx + fragment.hltIter1L3MuonMergedScoutingNoVtx + fragment.HLTIterativeTrackingL3MuonIteration2ScoutingNoVtx + fragment.hltIter2L3MuonMergedScoutingNoVtx ) +fragment.HLTTrackReconstructionForIsoL3MuonIter02ScoutingNoVtx = cms.Sequence( fragment.HLTPixelTrackingL3MuonScoutingNoVtx + fragment.HLTDoLocalStripSequence + fragment.HLTIterativeTrackingL3MuonIter02ScoutingNoVtx ) +fragment.HLTMuIsolationSequenceScoutingNoVtx = cms.Sequence( fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx + fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx + fragment.HLTTrackReconstructionForIsoL3MuonIter02ScoutingNoVtx + fragment.hltMuonTkRelIsolationCut0p09MapScoutingNoVtx ) fragment.HLTRecopixelvertexingForHighMultSequence = cms.Sequence( fragment.hltPixelTracksForHighMultFilter + fragment.hltPixelTracksForHighMultFitter + fragment.hltPixelTracksTrackingRegionsForHighMult + fragment.hltPixelLayerQuadruplets + fragment.hltPixelTracksHitDoubletsForHighMult + fragment.hltPixelTracksHitQuadrupletsForHighMult + fragment.hltPixelTracksForHighMult + fragment.hltPixelVerticesForHighMult ) fragment.HLTDoHIEcalClusWithCleaningSequence = cms.Sequence( fragment.hltIslandBasicClustersHI + fragment.hltHiIslandSuperClustersHI + fragment.hltHiCorrectedIslandBarrelSuperClustersHI + fragment.hltHiCorrectedIslandEndcapSuperClustersHI + fragment.hltCleanedHiCorrectedIslandBarrelSuperClustersHI + fragment.hltRecoHIEcalWithCleaningCandidate ) fragment.HLTPhoton20SequenceLooseHOverE = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG10Filter + fragment.hltEG20EtFilterLooseHoverE + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG20HEFilterLooseHoverE ) @@ -122620,14 +126046,13 @@ fragment.HLTEle5CaloIdLMWSequence = cms.Sequence( fragment.HLTEle5CaloIdLSequence + fragment.hltEle5CaloIdLMWPMS2Filter ) fragment.HLTDoubleEle5CaloIdLUnseededSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltDiEG5EtUnseededFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG5HEUnseededFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltDiEG5CaloIdLClusterShapeUnseededFilter + fragment.HLTElePixelMatchUnseededSequence + fragment.hltDiEle5CaloIdLPixelMatchUnseededFilter ) fragment.HLTDoubleEle5CaloIdLMWSequence = cms.Sequence( fragment.HLTDoubleEle5CaloIdLUnseededSequence + fragment.hltDiEle5CaloIdLMWPMS2UnseededFilter ) -fragment.HLTEle5WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5Filter + fragment.hltEG5L1SingleEG5EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle5WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle5WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle5WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle5WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle5WPTightPixelMatchFilter + fragment.hltEle5WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle5WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle5WPTightGsfMissingHitsFilter + fragment.hltEle5WPTightGsfDetaFilter + fragment.hltEle5WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle5WPTightGsfTrackIsoFilter ) -fragment.HLTEle15Ele10CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg2Filter + fragment.hltEgammaClusterShape + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg2Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + fragment.HLTElePixelMatchSequence + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg2Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg2Filter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) +fragment.HLTEle5WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5Filter + fragment.hltEG5L1SingleEG5EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle5WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle5WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle5WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle5WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle5WPTightPixelMatchFilter + fragment.hltEle5WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle5WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle5WPTightGsfMissingHitsFilter + fragment.hltEle5WPTightGsfDetaFilter + fragment.hltEle5WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle5WPTightGsfTrackIsoFilter ) +fragment.HLTEle15Ele10CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg2Filter + fragment.hltEgammaClusterShape + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg2Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + fragment.HLTElePixelMatchSequence + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg2Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg2Filter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) fragment.HLTMuIsolationSequenceForMC = cms.Sequence( fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons + fragment.hltL3fL1sMu5L1L2L3pfecalIsoRhoFilteredEB0p14EE0p10 + fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons + fragment.hltL3fL1sMu5L1L2L3pfhcalIsoRhoFilteredHB0p16HE0p20 + fragment.HLTTrackReconstructionForIsoL3MuonIter02 + fragment.hltMuonTkRelIsolationCut0p07Map ) fragment.HLTHighPt15TrackerMuonSequence = cms.Sequence( fragment.HLTDoLocalPixelSequence + fragment.HLTDoLocalStripSequence + fragment.hltL1MuonsPt15 + fragment.HLTIterativeTrackingHighPtTkMu + fragment.hltHighPtTkMu15TkFilt + fragment.hltHighPtTkMuons + fragment.hltHighPtTkMuonCands ) fragment.HLTPFClusteringEcalMFForTkMuons = cms.Sequence( fragment.hltRecHitInRegionForTkMuonsMF + fragment.hltRecHitInRegionForTkMuonsES + fragment.hltParticleFlowRecHitECALForTkMuonsMF + fragment.hltParticleFlowRecHitPSForTkMuons + fragment.hltParticleFlowClusterECALUncorrectedForTkMuonsMF + fragment.hltParticleFlowClusterPSForTkMuons + fragment.hltParticleFlowClusterECALForTkMuonsMF ) fragment.HLTHighPtTkMuEcalPFisorecoSequenceNoBoolsForMuons = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalMFSequence + fragment.HLTDoLocalHcalSequence + fragment.hltTowerMakerForECALMF + fragment.hltTowerMakerForHCAL + fragment.hltFixedGridRhoFastjetECALMFForMuons + fragment.hltFixedGridRhoFastjetHCAL + fragment.HLTPFClusteringEcalMFForTkMuons + fragment.hltHighPtTkMuonEcalMFPFClusterIsoForMuons ) -fragment.HLTPFHcalM2RegClusteringForTkMuons = cms.Sequence( fragment.hltRegionalTowerForTkMuonsM2Reg + fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL ) -fragment.HLTHighPtTkMuHcalM2PFisorecoSequenceNoBoolsForMuons = cms.Sequence( fragment.HLTPFHcalM2RegClusteringForTkMuons + fragment.hltHighPtTkMuonHcalM2RegPFClusterIsoForMuons ) +fragment.HLTHighPtTkMuHcalM2PFisorecoSequenceNoBoolsForMuons = cms.Sequence( fragment.HLTPFHcalClustering + fragment.hltHighPtTkMuonHcalM2RegPFClusterIsoForMuons ) fragment.HLTPixelTrackingHighPtTkMuIso = cms.Sequence( fragment.hltHighPtTkMuVertex + fragment.HLTDoLocalPixelSequence + fragment.hltPixelLayerTriplets + fragment.hltPixelTracksHighPtTkMuIsoFilter + fragment.hltPixelTracksHighPtTkMuIsoFitter + fragment.hltPixelTracksTrackingRegionsHighPtTkMuIso + fragment.hltPixelTracksHitDoubletsHighPtTkMuIso + fragment.hltPixelTracksHitTripletsHighPtTkMuIso + fragment.hltPixelTracksHighPtTkMuIso + fragment.hltPixelVerticesHighPtTkMuIso ) fragment.HLTIterativeTrackingHighPtTkMuIsoIteration0 = cms.Sequence( fragment.hltIter0HighPtTkMuIsoPixelTracksForSeedsFilter + fragment.hltIter0HighPtTkMuIsoPixelTracksForSeedsFitter + fragment.hltIter0HighPtTkMuIsoPixelTracksTrackingRegionsForSeeds + fragment.hltIter0HighPtTkMuIsoPixelTracksHitDoubletsForSeeds + fragment.hltIter0HighPtTkMuIsoPixelTracksHitTripletsForSeeds + fragment.hltIter0HighPtTkMuIsoPixelTracksForSeeds + fragment.hltIter0HighPtTkMuIsoPixelSeedsFromPixelTracks + fragment.hltIter0HighPtTkMuIsoCkfTrackCandidates + fragment.hltIter0HighPtTkMuIsoCtfWithMaterialTracks + fragment.hltIter0HighPtTkMuIsoTrackSelectionHighPurity ) fragment.HLTIterativeTrackingHighPtTkMuIsoIteration1 = cms.Sequence( fragment.hltIter1HighPtTkMuIsoClustersRefRemoval + fragment.hltIter1HighPtTkMuIsoMaskedMeasurementTrackerEvent + fragment.hltIter1HighPtTkMuIsoPixelLayerTriplets + fragment.hltIter1HighPtTkMuIsoPixelTrackingRegions + fragment.hltIter1HighPtTkMuIsoPixelClusterCheck + fragment.hltIter1HighPtTkMuIsoPixelHitDoublets + fragment.hltIter1HighPtTkMuIsoPixelHitTriplets + fragment.hltIter1HighPtTkMuIsoPixelSeeds + fragment.hltIter1HighPtTkMuIsoCkfTrackCandidates + fragment.hltIter1HighPtTkMuIsoCtfWithMaterialTracks + fragment.hltIter1HighPtTkMuIsoTrackSelectionHighPurityLoose + fragment.hltIter1HighPtTkMuIsoTrackSelectionHighPurityTight + fragment.hltIter1HighPtTkMuIsoTrackSelectionHighPurity ) @@ -122656,7 +126081,7 @@ fragment.HLTHPSDoubleLooseChargedIsoAntiMuonPFTau20Sequence = cms.Sequence( fragment.HLTHPSLooseChargedIsoPFTauSequence + fragment.hltHpsDoublePFTau20 + fragment.hltHpsSelectedPFTausTrackFinding + fragment.hltHpsDoublePFTau20Track + fragment.hltHpsSelectedPFTausTrackFindingLooseChargedIsolation + fragment.hltHpsDoublePFTau20TrackLooseChargedIso + fragment.hltHpsPFTauAgainstMuonDiscriminator + fragment.hltHpsSelectedPFTausTrackFindingLooseChargedIsolationAgainstMuon + fragment.hltHpsDoublePFTau20TrackLooseChargedIsoAgainstMuon ) fragment.HLTHPSDoubleMediumChargedIsoAntiMuonPFTau20Sequence = cms.Sequence( fragment.HLTHPSMediumChargedIsoPFTauSequence + fragment.hltHpsDoublePFTau20 + fragment.hltHpsSelectedPFTausTrackFinding + fragment.hltHpsDoublePFTau20Track + fragment.hltHpsSelectedPFTausTrackFindingMediumChargedIsolation + fragment.hltHpsDoublePFTau20TrackMediumChargedIso + fragment.hltHpsPFTauAgainstMuonDiscriminator + fragment.hltHpsSelectedPFTausTrackFindingMediumChargedIsolationAgainstMuon + fragment.hltHpsDoublePFTau20TrackMediumChargedIsoAgainstMuon ) fragment.HLTHPSDoubleTightChargedIsoAntiMuonPFTau20Sequence = cms.Sequence( fragment.HLTHPSTightChargedIsoPFTauSequence + fragment.hltHpsDoublePFTau20 + fragment.hltHpsSelectedPFTausTrackFinding + fragment.hltHpsDoublePFTau20Track + fragment.hltHpsSelectedPFTausTrackFindingTightChargedIsolation + fragment.hltHpsDoublePFTau20TrackTightChargedIso + fragment.hltHpsPFTauAgainstMuonDiscriminator + fragment.hltHpsSelectedPFTausTrackFindingTightChargedIsolationAgainstMuon + fragment.hltHpsDoublePFTau20TrackTightChargedIsoAgainstMuon ) -fragment.HLTPhoton50R9Id90HE10IsoMEBOnlySequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG50R9Id90HE10IsoMEBOnlyEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG50R9Id90HE10IsoMEBOnlyHEFilter + fragment.hltEgammaR9ID + fragment.hltEG50R9Id90HE10IsoMEBOnlyR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMEBOnlyEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMEBOnlyHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG50R9Id90HE10IsoMEBOnlyTrackIsoFilter ) +fragment.HLTPhoton50R9Id90HE10IsoMEBOnlySequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG50R9Id90HE10IsoMEBOnlyEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG50R9Id90HE10IsoMEBOnlyHEFilter + fragment.hltEgammaR9ID + fragment.hltEG50R9Id90HE10IsoMEBOnlyR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMEBOnlyEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMEBOnlyHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG50R9Id90HE10IsoMEBOnlyTrackIsoFilter ) fragment.HLTIterativeTrackingDoubleJpsiIteration0 = cms.Sequence( fragment.hltPixelTracksForSeedsJpsiFilter + fragment.hltPixelTracksForSeedsJpsiFitter + fragment.hltPixelTracksTrackingRegionsForSeedsJpsiDoubleTrk + fragment.hltPixelLayerQuadruplets + fragment.hltPixelTracksHitDoubletsForSeedsJpsiDoubleTrk + fragment.hltPixelTracksHitQuadrupletsForSeedsJpsiDoubleTrk + fragment.hltPixelTracksForSeedsJpsiDoubleTrk + fragment.hltIter0DisplacedJpsiPixelSeedsFromPixelTracksDoubleTrk + fragment.hltIter0DisplacedJpsiCkfTrackCandidatesDoubleTrk + fragment.hltIter0DisplacedJpsiCtfWithMaterialTracksDoubleTrk + fragment.hltIter0DisplacedJpsiTrackCutClassifierDoubleTrk + fragment.hltIter0DisplacedJpsiTrackSelectionHighPurityDoubleTrk ) fragment.HLTIterativeTrackingDoubleJpsiIteration1 = cms.Sequence( fragment.hltIter1DisplacedJpsiClustersRefRemovalDoubleTrk + fragment.hltIter1DisplacedJpsiMaskedMeasurementTrackerEventDoubleTrk + fragment.hltIter1DisplacedJpsiPixelLayerQuadrupletsDoubleTrk + fragment.hltIter1DisplacedJpsiPixelTrackingRegionsDoubleTrk + fragment.hltIter1DisplacedJpsiPixelClusterCheck + fragment.hltIter1DisplacedJpsiPixelHitDoubletsDoubleTrk + fragment.hltIter1DisplacedJpsiPixelHitQuadrupletsDoubleTrk + fragment.hltIter1DisplacedJpsiPixelSeedsDoubleTrk + fragment.hltIter1DisplacedJpsiCkfTrackCandidatesDoubleTrk + fragment.hltIter1DisplacedJpsiCtfWithMaterialTracksDoubleTrk + fragment.hltIter1DisplacedJpsiTrackCutClassifierPromptDoubleTrk + fragment.hltIter1DisplacedJpsiTrackCutClassifierDetachedDoubleTrk + fragment.hltIter1DisplacedJpsiTrackCutClassifierMergedDoubleTrk + fragment.hltIter1DisplacedJpsiTrackSelectionHighPurityDoubleTrk ) fragment.HLTIterativeTrackingDoubleJpsiIteration2 = cms.Sequence( fragment.hltIter2DisplacedJpsiClustersRefRemovalDoubleTrk + fragment.hltIter2DisplacedJpsiMaskedMeasurementTrackerEventDoubleTrk + fragment.hltIter2DisplacedJpsiPixelLayerTripletsDoubleTrk + fragment.hltIter2DisplacedJpsiPixelTrackingRegionsDoubleTrk + fragment.hltIter2DisplacedJpsiPixelClusterCheck + fragment.hltIter2DisplacedJpsiPixelHitDoubletsDoubleTrk + fragment.hltIter2DisplacedJpsiPixelHitTripletsDoubleTrk + fragment.hltIter2DisplacedJpsiPixelSeedsDoubleTrk + fragment.hltIter2DisplacedJpsiCkfTrackCandidatesDoubleTrk + fragment.hltIter2DisplacedJpsiCtfWithMaterialTracksDoubleTrk + fragment.hltIter2DisplacedJpsiTrackCutClassifierDoubleTrk + fragment.hltIter2DisplacedJpsiTrackSelectionHighPurityDoubleTrk ) @@ -122757,16 +126182,16 @@ fragment.HLTIterativeTrackingForElectronsIteration2 = cms.Sequence( fragment.hltIter2ElectronsClustersRefRemoval + fragment.hltIter2ElectronsMaskedMeasurementTrackerEvent + fragment.hltIter2ElectronsPixelLayerTriplets + fragment.hltIter2ElectronsPixelTrackingRegions + fragment.hltIter2ElectronsPixelHitDoublets + fragment.hltIter2ElectronsPixelHitTriplets + fragment.hltIter2ElectronsPixelSeeds + fragment.hltIter2ElectronsCkfTrackCandidates + fragment.hltIter2ElectronsCtfWithMaterialTracks + fragment.hltIter2ElectronsTrackSelectionHighPurity ) fragment.HLTIterativeTrackingDoubletRecoveryForElectrons = cms.Sequence( fragment.hltDoubletRecoveryForElectronsClustersRefRemoval + fragment.hltDoubletRecoveryForElectronsMaskedMeasurementTrackerEvent + fragment.hltDoubletRecoveryForElectronsPixelLayersAndRegions + fragment.hltDoubletRecoveryForElectronsPFlowPixelHitDoublets + fragment.hltDoubletRecoveryForElectronsPFlowPixelSeeds + fragment.hltDoubletRecoveryForElectronsPFlowCkfTrackCandidates + fragment.hltDoubletRecoveryForElectronsPFlowCtfWithMaterialTracks + fragment.hltDoubletRecoveryForElectronsPFlowTrackSelectionHighPurity ) fragment.HLTIterativeTrackingForElectrons = cms.Sequence( fragment.HLTIterativeTrackingForElectronsIteration0 + fragment.HLTIterativeTrackingForElectronsIteration1 + fragment.hltIter1ForElectronsMerged + fragment.HLTIterativeTrackingForElectronsIteration2 + fragment.hltIter2ForElectronsMerged + fragment.HLTIterativeTrackingDoubletRecoveryForElectrons + fragment.hltMergedForElectrons ) -fragment.HLTEle10GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG10EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle10ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle10HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle10EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle10HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle10PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle10GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle10GsfDetaPPOnAAFilter + fragment.hltEle10GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle10GsfTrackIsoPPOnAAFilter ) +fragment.HLTEle10GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG10EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle10ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle10HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle10EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle10HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle10PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle10GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle10GsfDetaPPOnAAFilter + fragment.hltEle10GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle10GsfTrackIsoPPOnAAFilter ) fragment.HLTDoHIStripZeroSuppressionRepacker = cms.Sequence( fragment.hltSiStripDigiToZSRaw + fragment.rawDataRepacker + fragment.rawDataReducedFormat ) -fragment.HLTEle15GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG15EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle15ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle15HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle15EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle15HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle15PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle15GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle15GsfDetaPPOnAAFilter + fragment.hltEle15GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle15GsfTrackIsoPPOnAAFilter ) -fragment.HLTEle20GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG20EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle20ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle20HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle20EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle20HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle20PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle20GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle20GsfDetaPPOnAAFilter + fragment.hltEle20GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle20GsfTrackIsoPPOnAAFilter ) -fragment.HLTEle30GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG30EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle30ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle30HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle30EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle30HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle30PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle30GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle30GsfDetaPPOnAAFilter + fragment.hltEle30GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle30GsfTrackIsoPPOnAAFilter ) -fragment.HLTEle40GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG40EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle40ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle40HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle40EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle40HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle40PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle40GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle40GsfDetaPPOnAAFilter + fragment.hltEle40GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle40GsfTrackIsoPPOnAAFilter ) -fragment.HLTEle50GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG50EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle50ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle50HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle50EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle50HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle50PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle50GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle50GsfDetaPPOnAAFilter + fragment.hltEle50GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle50GsfTrackIsoPPOnAAFilter ) -fragment.HLTEle15Ele10GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG15EtPPOnAAFilter + fragment.hltDoubleEG10EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltDoubleEle10ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltDoubleEle10HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.HLTGsfElectronPPOnAASequence + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) -fragment.HLTDoubleEle10GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltDoubleEG10EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltDoubleEle10ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltDoubleEle10HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.HLTGsfElectronPPOnAASequence + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) -fragment.HLTDoubleEle15GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltDoubleEG15EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltDoubleEle15ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltDoubleEle15HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltDoubleEle15EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltDoubleEle15HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.HLTGsfElectronPPOnAASequence + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltDoubleEle15GsfTrackIsoPPOnAAFilter ) +fragment.HLTEle15GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG15EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle15ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle15HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle15EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle15HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle15PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle15GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle15GsfDetaPPOnAAFilter + fragment.hltEle15GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle15GsfTrackIsoPPOnAAFilter ) +fragment.HLTEle20GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG20EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle20ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle20HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle20EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle20HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle20PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle20GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle20GsfDetaPPOnAAFilter + fragment.hltEle20GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle20GsfTrackIsoPPOnAAFilter ) +fragment.HLTEle30GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG30EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle30ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle30HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle30EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle30HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle30PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle30GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle30GsfDetaPPOnAAFilter + fragment.hltEle30GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle30GsfTrackIsoPPOnAAFilter ) +fragment.HLTEle40GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG40EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle40ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle40HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle40EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle40HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle40PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle40GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle40GsfDetaPPOnAAFilter + fragment.hltEle40GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle40GsfTrackIsoPPOnAAFilter ) +fragment.HLTEle50GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG50EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle50ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle50HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle50EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle50HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle50PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle50GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle50GsfDetaPPOnAAFilter + fragment.hltEle50GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle50GsfTrackIsoPPOnAAFilter ) +fragment.HLTEle15Ele10GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG15EtPPOnAAFilter + fragment.hltDoubleEG10EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltDoubleEle10ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltDoubleEle10HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.HLTGsfElectronPPOnAASequence + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) +fragment.HLTDoubleEle10GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltDoubleEG10EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltDoubleEle10ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltDoubleEle10HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.HLTGsfElectronPPOnAASequence + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) +fragment.HLTDoubleEle15GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltDoubleEG15EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltDoubleEle15ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltDoubleEle15HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltDoubleEle15EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltDoubleEle15HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.HLTGsfElectronPPOnAASequence + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltDoubleEle15GsfTrackIsoPPOnAAFilter ) fragment.HLTEndSequenceWithZeroSuppressionRepacker = cms.Sequence( fragment.HLTDoHIStripZeroSuppressionRepacker + fragment.HLTEndSequence ) fragment.HLTFullIterativeTrackingIteration0PreSplittingPPOnAAForDmeson = cms.Sequence( fragment.hltFullIter0PixelQuadrupletsPreSplittingPPOnAAForDmeson + fragment.hltFullIter0PixelTrackingRegionsPreSplittingPPOnAAForDmeson + fragment.hltFullIter0PixelClusterCheckPreSplittingPPOnAAForDmeson + fragment.hltFullIter0PixelHitDoubletsPreSplittingPPOnAAForDmeson + fragment.hltFullIter0PixelHitQuadrupletsPreSplittingPPOnAAForDmeson + fragment.hltFullIter0PixelSeedsPreSplittingPPOnAAForDmeson + fragment.hltFullIter0CkfTrackCandidatesPreSplittingPPOnAAForDmeson + fragment.hltFullIter0CtfWithMaterialTracksPreSplittingPPOnAAForDmeson + fragment.hltFullIter0PrimaryVerticesPreSplittingPPOnAAForDmeson ) fragment.HLTDoLocalPixelSequenceAfterSplittingPPOnAAForDmeson = cms.Sequence( fragment.hltSiPixelClustersAfterSplittingPPOnAAForDmeson + fragment.hltSiPixelClustersCacheAfterSplittingPPOnAAForDmeson + fragment.hltSiPixelRecHitsAfterSplittingPPOnAAForDmeson ) @@ -122826,7 +126251,7 @@ fragment.HLTBtagCSVv2SequenceL3ForHIBJet100 = cms.Sequence( fragment.HLTTrackReconstructionForBTagForHI + fragment.hltFullOnlinePrimaryVerticesPPOnAAForBTag + fragment.hltFastPixelBLifetimeL3AssociatorHIBJet100 + fragment.hltImpactParameterTagInfosHIBJet100 + fragment.hltInclusiveVertexFinderPPOnAA + fragment.hltInclusiveSecondaryVerticesPPOnAA + fragment.hltTrackVertexArbitratorPPOnAA + fragment.hltInclusiveMergedVerticesPPOnAA + fragment.hltInclusiveSecondaryVertexFinderTagInfosHIBJet100 + fragment.hltCombinedSecondaryVertexV2BJetTagsCaloBJet100 ) fragment.HLTHISinglePixelTrack = cms.Sequence( fragment.HLTHIDoLocalPixelSequence + fragment.HLTHIRecoPixelTracksSequenceForTrackTrigger + fragment.hltHIPixelCandsForTrackTrigger + fragment.hltHIPixelFilter1 ) fragment.HLTHISinglePixelTrackNpix = cms.Sequence( fragment.HLTHIDoLocalPixelSequence + ~fragment.hltHIPixelCountFilterNpix + fragment.HLTHIRecoPixelTracksSequenceForTrackTrigger + fragment.hltHIPixelCandsForTrackTrigger + fragment.hltHIPixelFilter1 ) -fragment.HLTPFScoutingPackingSequence = cms.Sequence( fragment.hltScoutingPFPacker + fragment.hltScoutingMuonPacker + fragment.hltScoutingEgammaPacker ) +fragment.HLTPixelOnlyPFScoutingPackingSequence = cms.Sequence( fragment.hltScoutingPFPacker + fragment.hltScoutingMuonPacker + fragment.hltScoutingEgammaPacker ) fragment.HLTriggerFirstPath = cms.Path( fragment.hltGetConditions + fragment.hltGetRaw + fragment.hltPSetMap + fragment.hltBoolFalse ) fragment.HLT_AK8PFJet360_TrimMass30_v18 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sSingleJet180 + fragment.hltPreAK8PFJet360TrimMass30 + fragment.HLTAK8CaloJetsSequence + fragment.hltAK8SingleCaloJet260 + fragment.HLTAK8PFJetsSequence + fragment.hltAK8PFJetsCorrectedMatchedToCaloJets260 + fragment.hltAK8SinglePFJet360 + fragment.hltAK8TrimModJets + fragment.hltAK8SinglePFJetTrimModMass30 + fragment.HLTEndSequence ) @@ -123402,6 +126827,7 @@ fragment.DST_DoubleMu3_noVtx_CaloScouting_v6 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sDoubleMuIorTripleMuIorQuadMu + fragment.hltPreDSTDoubleMu3noVtxCaloScouting + fragment.hltDimuon3L1Filtered0 + fragment.HLTL2muonrecoSequenceNoVtx + fragment.hltDimuon3L2PreFiltered0 + fragment.HLTL3muonrecoSequenceNoVtx + fragment.hltDoubleMu3L3FilteredNoVtx + fragment.HLTCaloScoutingSequence + fragment.HLTMuIsolationSequenceNoVtx + fragment.hltDisplacedmumuVtxProducer + fragment.HLTEndSequence ) fragment.DST_DoubleMu1_noVtx_CaloScouting_v2 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sDoubleMuIorTripleMuIorQuadMu + fragment.hltPreDSTDoubleMu1noVtxCaloScouting + fragment.hltDimuon3L1Filtered0 + fragment.HLTL2muonrecoSequenceNoVtx + fragment.hltDimuon3L2PreFiltered0 + fragment.HLTL3muonrecoSequenceNoVtx + fragment.hltDoubleMu1L3FilteredNoVtx + fragment.HLTCaloScoutingSequence + fragment.HLTMuIsolationSequenceNoVtx + fragment.hltDisplacedmumu1VtxProducer + fragment.HLTEndSequence ) fragment.DST_DoubleMu3_noVtx_Mass10_PFScouting_v3 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sDoubleMuIorTripleMuIorQuadMu + fragment.hltPreDSTDoubleMu3noVtxMass10PFScouting + fragment.hltDimuon3L1Filtered0 + fragment.HLTL2muonrecoSequenceNoVtx + fragment.hltDimuon3L2PreFiltered0 + fragment.HLTL3muonrecoSequenceNoVtx + fragment.hltDoubleMu3L3FilteredNoVtxMass10 + fragment.HLTCaloScoutingSequence + fragment.HLTPFScoutingSequenceNoVtx + fragment.hltDisplacedmumuMass10VtxProducer + fragment.HLTEndSequence ) +fragment.DST_Run3_PFScoutingPixelTracking_v16 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sDSTRun3PFScoutingPixelTracking + fragment.hltPreDSTRun3PFScoutingPixelTracking + fragment.HLTAK4CaloJetsSequence + fragment.HLTPixelOnlyPFScoutingSequence + fragment.hltEgammaR9ID + fragment.HLTL2muonrecoSequenceScoutingNoVtx + fragment.HLTL3muonrecoSequenceScoutingNoVtx + fragment.hltDisplacedmumuVtxNoMatchingProducer + fragment.HLTMuIsolationSequenceScoutingNoVtx + fragment.HLTEndSequence ) fragment.HLT_AK4CaloJet30_v11 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sZeroBias + fragment.hltPreAK4CaloJet30 + fragment.HLTAK4CaloJetsSequence + fragment.hltSingleAK4CaloJet30 + fragment.HLTEndSequence ) fragment.HLT_AK4CaloJet40_v10 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sZeroBias + fragment.hltPreAK4CaloJet40 + fragment.HLTAK4CaloJetsSequence + fragment.hltSingleAK4CaloJet40 + fragment.HLTEndSequence ) fragment.HLT_AK4CaloJet50_v10 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sZeroBias + fragment.hltPreAK4CaloJet50 + fragment.HLTAK4CaloJetsSequence + fragment.hltSingleAK4CaloJet50 + fragment.HLTEndSequence ) @@ -124355,14 +127781,14 @@ fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part19_v1 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sL1MinimumBiasHF1AND + fragment.hltPreHIMinimumBiasSinglePixelTrackNpixGatedpart19 + fragment.HLTHISinglePixelTrackNpix + fragment.HLTDoHIStripZeroSuppression + fragment.HLTEndSequence ) fragment.HLTriggerFinalPath = cms.Path( fragment.hltGtStage2Digis + fragment.hltScalersRawToDigi + fragment.hltFEDSelector + fragment.hltTriggerSummaryAOD + fragment.hltTriggerSummaryRAW + fragment.hltBoolFalse ) fragment.HLTAnalyzerEndpath = cms.EndPath( fragment.hltGtStage2Digis + fragment.hltPreHLTAnalyzerEndpath + fragment.hltL1TGlobalSummary + fragment.hltTrigReport ) -fragment.ScoutingPFOutput = cms.Path( fragment.hltGtStage2Digis + fragment.hltPreScoutingPFOutput + fragment.hltFEDSelectorL1 + fragment.HLTPFScoutingPackingSequence + fragment.hltScoutingPrimaryVertexPacker ) +fragment.ScoutingPFOutput = cms.Path( fragment.hltGtStage2Digis + fragment.hltPreScoutingPFOutput + fragment.hltFEDSelectorL1 + fragment.HLTPixelOnlyPFScoutingPackingSequence + fragment.hltScoutingPrimaryVertexPacker + fragment.hltScoutingTrackPacker ) fragment.ScoutingCaloMuonOutput = cms.Path( fragment.hltGtStage2Digis + fragment.hltPreScoutingCaloMuonOutput + fragment.hltFEDSelectorL1 + fragment.hltScoutingCaloPacker + fragment.hltScoutingMuonPackerCalo + fragment.hltScoutingPrimaryVertexPacker + fragment.hltScoutingPrimaryVertexPackerCaloMuon + fragment.hltScoutingTrackPacker ) -fragment.HLTSchedule = cms.Schedule( *(fragment.HLTriggerFirstPath, fragment.HLT_AK8PFJet360_TrimMass30_v18, fragment.HLT_AK8PFJet380_TrimMass30_v11, fragment.HLT_AK8PFJet400_TrimMass30_v12, fragment.HLT_AK8PFJet420_TrimMass30_v11, fragment.HLT_AK8PFHT750_TrimMass50_v12, fragment.HLT_AK8PFHT800_TrimMass50_v12, fragment.HLT_AK8PFHT850_TrimMass50_v11, fragment.HLT_AK8PFHT900_TrimMass50_v11, fragment.HLT_CaloJet10_NoJetID_v3, fragment.HLT_CaloJet20_NoJetID_v3, fragment.HLT_CaloJet50_NoJetID_v3, fragment.HLT_CaloJet500_NoJetID_v12, fragment.HLT_CaloJet550_NoJetID_v7, fragment.HLT_DoubleMu5_Upsilon_DoubleEle3_CaloIdL_TrackIdL_v4, fragment.HLT_DoubleMu3_DoubleEle7p5_CaloIdL_TrackIdL_Upsilon_v4, fragment.HLT_Trimuon5_3p5_2_Upsilon_Muon_v5, fragment.HLT_TrimuonOpen_5_3p5_2_Upsilon_Muon_v3, fragment.HLT_DoubleEle25_CaloIdL_MW_v4, fragment.HLT_DoubleEle27_CaloIdL_MW_v4, fragment.HLT_DoubleEle33_CaloIdL_MW_v17, fragment.HLT_DoubleEle24_eta2p1_WPTight_Gsf_v7, fragment.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_DZ_PFHT350_v20, fragment.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_PFHT350_v20, fragment.HLT_Ele27_Ele37_CaloIdL_MW_v4, fragment.HLT_Mu27_Ele37_CaloIdL_MW_v5, fragment.HLT_Mu37_Ele27_CaloIdL_MW_v5, fragment.HLT_Mu37_TkMu27_v5, fragment.HLT_DoubleMu4_3_Bs_v14, fragment.HLT_DoubleMu4_3_Jpsi_v2, fragment.HLT_DoubleMu4_JpsiTrk_Displaced_v15, fragment.HLT_DoubleMu4_LowMassNonResonantTrk_Displaced_v15, fragment.HLT_DoubleMu3_Trk_Tau3mu_v12, fragment.HLT_DoubleMu3_TkMu_DsTau3Mu_v4, fragment.HLT_DoubleMu4_PsiPrimeTrk_Displaced_v15, fragment.HLT_DoubleMu4_Mass3p8_DZ_PFHT350_v8, fragment.HLT_Mu3_PFJet40_v16, fragment.HLT_Mu7p5_L2Mu2_Jpsi_v10, fragment.HLT_Mu7p5_L2Mu2_Upsilon_v10, fragment.HLT_Mu7p5_Track2_Jpsi_v11, fragment.HLT_Mu7p5_Track3p5_Jpsi_v11, fragment.HLT_Mu7p5_Track7_Jpsi_v11, fragment.HLT_Mu7p5_Track2_Upsilon_v11, fragment.HLT_Mu7p5_Track3p5_Upsilon_v11, fragment.HLT_Mu7p5_Track7_Upsilon_v11, fragment.HLT_Mu3_L1SingleMu5orSingleMu7_v1, fragment.HLT_DoublePhoton33_CaloIdL_v6, fragment.HLT_DoublePhoton70_v6, fragment.HLT_DoublePhoton85_v14, fragment.HLT_Ele20_WPTight_Gsf_v6, fragment.HLT_Ele15_WPLoose_Gsf_v3, fragment.HLT_Ele17_WPLoose_Gsf_v3, fragment.HLT_Ele20_WPLoose_Gsf_v6, fragment.HLT_Ele20_eta2p1_WPLoose_Gsf_v6, fragment.HLT_DiEle27_WPTightCaloOnly_L1DoubleEG_v4, fragment.HLT_Ele27_WPTight_Gsf_v16, fragment.HLT_Ele28_WPTight_Gsf_v1, fragment.HLT_Ele30_WPTight_Gsf_v1, fragment.HLT_Ele32_WPTight_Gsf_v15, fragment.HLT_Ele35_WPTight_Gsf_v9, fragment.HLT_Ele35_WPTight_Gsf_L1EGMT_v5, fragment.HLT_Ele38_WPTight_Gsf_v9, fragment.HLT_Ele40_WPTight_Gsf_v9, fragment.HLT_Ele32_WPTight_Gsf_L1DoubleEG_v9, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTau30_eta2p1_CrossL1_v13, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, fragment.HLT_HT450_Beamspot_v11, fragment.HLT_HT300_Beamspot_v11, fragment.HLT_HT60_Beamspot_v1, fragment.HLT_ZeroBias_Beamspot_v4, fragment.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTau27_eta2p1_CrossL1_v12, fragment.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_CrossL1_v4, fragment.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v4, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS30_Trk1_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu27_LooseChargedIsoPFTau20_Trk1_eta2p1_SingleL1_v5, fragment.HLT_IsoMu27_LooseChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, fragment.HLT_IsoMu27_MediumChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, fragment.HLT_IsoMu27_TightChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, fragment.HLT_IsoMu20_v15, fragment.HLT_IsoMu24_v13, fragment.HLT_IsoMu24_eta2p1_v15, fragment.HLT_IsoMu27_v16, fragment.HLT_IsoMu30_v4, fragment.HLT_UncorrectedJetE30_NoBPTX_v6, fragment.HLT_UncorrectedJetE30_NoBPTX3BX_v6, fragment.HLT_UncorrectedJetE60_NoBPTX3BX_v6, fragment.HLT_UncorrectedJetE70_NoBPTX3BX_v6, fragment.HLT_L1SingleMu18_v3, fragment.HLT_L1SingleMu25_v2, fragment.HLT_L1SingleMuOpen_v2, fragment.HLT_L1SingleMuOpen_DT_v2, fragment.HLT_L1SingleMuCosmics_v1, fragment.HLT_L1SingleMu3_v1, fragment.HLT_L1SingleMu5_v1, fragment.HLT_L1SingleMu7_v1, fragment.HLT_L1DoubleMu0_v1, fragment.HLT_L1SingleEG10_v2, fragment.HLT_L1SingleEG15_v2, fragment.HLT_L1SingleEG18_v1, fragment.HLT_L1SingleJet16_v1, fragment.HLT_L1SingleJet20_v1, fragment.HLT_L1SingleJet35_v1, fragment.HLT_L1SingleJet8erHE_v1, fragment.HLT_L1SingleJet10erHE_v1, fragment.HLT_L1SingleJet12erHE_v1, fragment.HLT_L1SingleJet200_v1, fragment.HLT_L1DoubleJetC50_v2, fragment.HLT_L1EXT_HCAL_LaserMon1_v1, fragment.HLT_L1EXT_HCAL_LaserMon4_v1, fragment.HLT_DQMPixels_SingleMuOpen_v1, fragment.HLT_L2DoubleMu23_NoVertex_v2, fragment.HLT_L2Mu10_v7, fragment.HLT_L2Mu10_NoVertex_NoBPTX3BX_v5, fragment.HLT_L2Mu10_NoVertex_NoBPTX_v6, fragment.HLT_L2Mu45_NoVertex_3Sta_NoBPTX3BX_v4, fragment.HLT_L2Mu40_NoVertex_3Sta_NoBPTX3BX_v5, fragment.HLT_L2Mu50_v2, fragment.HLT_L2Mu23NoVtx_2Cha_v1, fragment.HLT_L2Mu23NoVtx_2Cha_CosmicSeed_v1, fragment.HLT_DoubleL2Mu30NoVtx_2Cha_CosmicSeed_Eta2p4_v2, fragment.HLT_DoubleL2Mu30NoVtx_2Cha_Eta2p4_v2, fragment.HLT_DoubleL2Mu50_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_Eta2p4_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_Eta2p4_v2, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_v14, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_v3, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v15, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_v3, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8_v5, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass8_v3, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8_v5, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass3p8_v3, fragment.HLT_Mu25_TkMu0_Onia_v8, fragment.HLT_Mu30_TkMu0_Psi_v1, fragment.HLT_Mu30_TkMu0_Upsilon_v1, fragment.HLT_Mu20_TkMu0_Phi_v8, fragment.HLT_Mu25_TkMu0_Phi_v8, fragment.HLT_Mu12_v3, fragment.HLT_Mu15_v3, fragment.HLT_Mu20_v12, fragment.HLT_Mu27_v13, fragment.HLT_Mu50_v13, fragment.HLT_Mu55_v3, fragment.HLT_OldMu100_v3, fragment.HLT_TkMu100_v2, fragment.HLT_DiPFJet15_NoCaloMatched_v16, fragment.HLT_DiPFJet25_NoCaloMatched_v16, fragment.HLT_DiPFJet15_FBEta3_NoCaloMatched_v17, fragment.HLT_DiPFJet25_FBEta3_NoCaloMatched_v17, fragment.HLT_DiPFJetAve40_v14, fragment.HLT_DiPFJetAve60_v14, fragment.HLT_DiPFJetAve80_v13, fragment.HLT_DiPFJetAve140_v13, fragment.HLT_DiPFJetAve200_v13, fragment.HLT_DiPFJetAve260_v14, fragment.HLT_DiPFJetAve320_v14, fragment.HLT_DiPFJetAve400_v14, fragment.HLT_DiPFJetAve500_v14, fragment.HLT_DiPFJetAve15_HFJEC_v17, fragment.HLT_DiPFJetAve25_HFJEC_v17, fragment.HLT_DiPFJetAve35_HFJEC_v17, fragment.HLT_DiPFJetAve60_HFJEC_v15, fragment.HLT_DiPFJetAve80_HFJEC_v16, fragment.HLT_DiPFJetAve100_HFJEC_v16, fragment.HLT_DiPFJetAve160_HFJEC_v16, fragment.HLT_DiPFJetAve220_HFJEC_v16, fragment.HLT_DiPFJetAve300_HFJEC_v16, fragment.HLT_AK8PFJet15_v3, fragment.HLT_AK8PFJet25_v3, fragment.HLT_AK8PFJet40_v16, fragment.HLT_AK8PFJet60_v15, fragment.HLT_AK8PFJet80_v15, fragment.HLT_AK8PFJet140_v15, fragment.HLT_AK8PFJet200_v15, fragment.HLT_AK8PFJet260_v16, fragment.HLT_AK8PFJet320_v16, fragment.HLT_AK8PFJet400_v16, fragment.HLT_AK8PFJet450_v16, fragment.HLT_AK8PFJet500_v16, fragment.HLT_AK8PFJet550_v11, fragment.HLT_PFJet15_v3, fragment.HLT_PFJet25_v3, fragment.HLT_PFJet40_v21, fragment.HLT_PFJet60_v21, fragment.HLT_PFJet80_v20, fragment.HLT_PFJet140_v19, fragment.HLT_PFJet200_v19, fragment.HLT_PFJet260_v20, fragment.HLT_PFJet320_v20, fragment.HLT_PFJet400_v20, fragment.HLT_PFJet450_v21, fragment.HLT_PFJet500_v21, fragment.HLT_PFJet550_v11, fragment.HLT_PFJetFwd15_v3, fragment.HLT_PFJetFwd25_v3, fragment.HLT_PFJetFwd40_v19, fragment.HLT_PFJetFwd60_v19, fragment.HLT_PFJetFwd80_v18, fragment.HLT_PFJetFwd140_v18, fragment.HLT_PFJetFwd200_v18, fragment.HLT_PFJetFwd260_v19, fragment.HLT_PFJetFwd320_v19, fragment.HLT_PFJetFwd400_v19, fragment.HLT_PFJetFwd450_v19, fragment.HLT_PFJetFwd500_v19, fragment.HLT_AK8PFJetFwd15_v3, fragment.HLT_AK8PFJetFwd25_v3, fragment.HLT_AK8PFJetFwd40_v15, fragment.HLT_AK8PFJetFwd60_v14, fragment.HLT_AK8PFJetFwd80_v14, fragment.HLT_AK8PFJetFwd140_v14, fragment.HLT_AK8PFJetFwd200_v14, fragment.HLT_AK8PFJetFwd260_v15, fragment.HLT_AK8PFJetFwd320_v15, fragment.HLT_AK8PFJetFwd400_v15, fragment.HLT_AK8PFJetFwd450_v15, fragment.HLT_AK8PFJetFwd500_v15, fragment.HLT_PFHT180_v17, fragment.HLT_PFHT250_v17, fragment.HLT_PFHT370_v17, fragment.HLT_PFHT430_v17, fragment.HLT_PFHT510_v17, fragment.HLT_PFHT590_v17, fragment.HLT_PFHT680_v17, fragment.HLT_PFHT780_v17, fragment.HLT_PFHT890_v17, fragment.HLT_PFHT1050_v18, fragment.HLT_PFHT500_PFMET100_PFMHT100_IDTight_v12, fragment.HLT_PFHT500_PFMET110_PFMHT110_IDTight_v12, fragment.HLT_PFHT700_PFMET85_PFMHT85_IDTight_v12, fragment.HLT_PFHT700_PFMET95_PFMHT95_IDTight_v12, fragment.HLT_PFHT800_PFMET75_PFMHT75_IDTight_v12, fragment.HLT_PFHT800_PFMET85_PFMHT85_IDTight_v12, fragment.HLT_PFMET110_PFMHT110_IDTight_v20, fragment.HLT_PFMET120_PFMHT120_IDTight_v20, fragment.HLT_PFMET130_PFMHT130_IDTight_v20, fragment.HLT_PFMET140_PFMHT140_IDTight_v20, fragment.HLT_PFMET100_PFMHT100_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET110_PFMHT110_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET120_PFMHT120_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET130_PFMHT130_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET140_PFMHT140_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET120_PFMHT120_IDTight_PFHT60_v9, fragment.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_PFHT60_v9, fragment.HLT_PFMETTypeOne120_PFMHT120_IDTight_PFHT60_v9, fragment.HLT_PFMETTypeOne110_PFMHT110_IDTight_v12, fragment.HLT_PFMETTypeOne120_PFMHT120_IDTight_v12, fragment.HLT_PFMETTypeOne130_PFMHT130_IDTight_v12, fragment.HLT_PFMETTypeOne140_PFMHT140_IDTight_v11, fragment.HLT_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, fragment.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, fragment.HLT_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, fragment.HLT_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, fragment.HLT_MonoCentralPFJet80_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, fragment.HLT_MonoCentralPFJet80_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, fragment.HLT_MonoCentralPFJet80_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, fragment.HLT_MonoCentralPFJet80_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, fragment.HLT_L1ETMHadSeeds_v2, fragment.HLT_CaloMHT90_v4, fragment.HLT_CaloMET80_NotCleaned_v4, fragment.HLT_CaloMET90_NotCleaned_v4, fragment.HLT_CaloMET100_NotCleaned_v4, fragment.HLT_CaloMET110_NotCleaned_v4, fragment.HLT_CaloMET250_NotCleaned_v4, fragment.HLT_CaloMET300_NotCleaned_v4, fragment.HLT_CaloMET350_NotCleaned_v4, fragment.HLT_PFMET200_NotCleaned_v9, fragment.HLT_PFMET250_NotCleaned_v9, fragment.HLT_PFMET300_NotCleaned_v9, fragment.HLT_PFMET200_BeamHaloCleaned_v9, fragment.HLT_PFMETTypeOne200_BeamHaloCleaned_v9, fragment.HLT_MET105_IsoTrk50_v9, fragment.HLT_MET120_IsoTrk50_v9, fragment.HLT_SingleJet30_Mu12_SinglePFJet40_v11, fragment.HLT_Mu12_DoublePFJets40_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets100_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets200_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets350_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets40MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets54MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets62MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets40_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets100_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets200_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets350_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets116MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets128MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_Photon300_NoHE_v12, fragment.HLT_Mu8_TrkIsoVVL_v12, fragment.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_DZ_v18, fragment.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_v18, fragment.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_DZ_v19, fragment.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_v19, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v13, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_PFBtagDeepCSV_1p5_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_CaloBtagDeepCSV_1p5_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v11, fragment.HLT_Mu17_TrkIsoVVL_v13, fragment.HLT_Mu19_TrkIsoVVL_v4, fragment.HLT_BTagMu_AK4DiJet20_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet40_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet70_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet110_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet170_Mu5_v12, fragment.HLT_BTagMu_AK4Jet300_Mu5_v12, fragment.HLT_BTagMu_AK8DiJet170_Mu5_v9, fragment.HLT_BTagMu_AK8Jet170_DoubleMu5_v2, fragment.HLT_BTagMu_AK8Jet300_Mu5_v12, fragment.HLT_BTagMu_AK4DiJet20_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet40_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet70_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet110_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet170_Mu5_noalgo_v12, fragment.HLT_BTagMu_AK4Jet300_Mu5_noalgo_v12, fragment.HLT_BTagMu_AK8DiJet170_Mu5_noalgo_v9, fragment.HLT_BTagMu_AK8Jet170_DoubleMu5_noalgo_v2, fragment.HLT_BTagMu_AK8Jet300_Mu5_noalgo_v12, fragment.HLT_Ele15_Ele8_CaloIdL_TrackIdL_IsoVL_v3, fragment.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v19, fragment.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_v19, fragment.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v15, fragment.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_v7, fragment.HLT_Mu23_TrkIsoVVL_Ele8_CaloIdL_TrackIdL_IsoVL_DZ_v10, fragment.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v7, fragment.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v15, fragment.HLT_Mu12_DoublePhoton20_v5, fragment.HLT_TriplePhoton_20_20_20_CaloIdLV2_v3, fragment.HLT_TriplePhoton_20_20_20_CaloIdLV2_R9IdVL_v3, fragment.HLT_TriplePhoton_30_30_10_CaloIdLV2_v4, fragment.HLT_TriplePhoton_30_30_10_CaloIdLV2_R9IdVL_v4, fragment.HLT_TriplePhoton_35_35_5_CaloIdLV2_R9IdVL_v4, fragment.HLT_Photon20_v2, fragment.HLT_Photon22_v2, fragment.HLT_Photon25_v4, fragment.HLT_Photon33_v5, fragment.HLT_Photon50_v13, fragment.HLT_Photon75_v13, fragment.HLT_Photon90_v13, fragment.HLT_Photon120_v13, fragment.HLT_Photon150_v6, fragment.HLT_Photon175_v14, fragment.HLT_Photon200_v13, fragment.HLT_Photon100EB_TightID_TightIso_v2, fragment.HLT_Photon110EB_TightID_TightIso_v2, fragment.HLT_Photon120EB_TightID_TightIso_v2, fragment.HLT_Photon100EBHE10_v2, fragment.HLT_Photon100EEHE10_v2, fragment.HLT_Photon100EE_TightID_TightIso_v2, fragment.HLT_Photon50_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon75_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ300_PFJetsMJJ400DEta3_v5, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ400_PFJetsMJJ600DEta3_v5, fragment.HLT_Photon90_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon120_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon165_R9Id90_HE10_IsoM_v15, fragment.HLT_Photon90_CaloIdL_PFHT700_v16, fragment.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass90_v13, fragment.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass95_v13, fragment.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_PixelVeto_Mass55_v15, fragment.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_NoPixelVeto_Mass55_v13, fragment.HLT_Photon35_TwoProngs35_v1, fragment.HLT_IsoMu24_TwoProngs35_v1, fragment.HLT_Dimuon0_Jpsi_L1_NoOS_v7, fragment.HLT_Dimuon0_Jpsi_NoVertexing_NoOS_v7, fragment.HLT_Dimuon0_Jpsi_v8, fragment.HLT_Dimuon0_Jpsi_NoVertexing_v8, fragment.HLT_Dimuon0_Jpsi_L1_4R_0er1p5R_v7, fragment.HLT_Dimuon0_Jpsi_NoVertexing_L1_4R_0er1p5R_v7, fragment.HLT_Dimuon0_Jpsi3p5_Muon2_v5, fragment.HLT_Dimuon0_Upsilon_L1_4p5_v9, fragment.HLT_Dimuon0_Upsilon_L1_5_v9, fragment.HLT_Dimuon0_Upsilon_L1_4p5NoOS_v8, fragment.HLT_Dimuon0_Upsilon_L1_4p5er2p0_v9, fragment.HLT_Dimuon0_Upsilon_L1_4p5er2p0M_v7, fragment.HLT_Dimuon0_Upsilon_NoVertexing_v7, fragment.HLT_Dimuon0_Upsilon_L1_5M_v8, fragment.HLT_Dimuon0_LowMass_L1_0er1p5R_v7, fragment.HLT_Dimuon0_LowMass_L1_0er1p5_v8, fragment.HLT_Dimuon0_LowMass_v8, fragment.HLT_Dimuon0_LowMass_L1_4_v8, fragment.HLT_Dimuon0_LowMass_L1_4R_v7, fragment.HLT_Dimuon0_LowMass_L1_TM530_v6, fragment.HLT_Trimuon2_Upsilon5_Muon_NoL1Mass_v6, fragment.HLT_Dimuon0_Upsilon_Muon_L1_TM0_v6, fragment.HLT_Dimuon0_Upsilon_Muon_NoL1Mass_v6, fragment.HLT_TripleMu_5_3_3_Mass3p8_DZ_v8, fragment.HLT_TripleMu_10_5_5_DZ_v10, fragment.HLT_TripleMu_12_10_5_v10, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_v4, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_Charge1_v4, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_v4, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_Charge1_v4, fragment.HLT_DoubleMu3_DZ_PFMET50_PFMHT60_v10, fragment.HLT_DoubleMu3_DZ_PFMET70_PFMHT70_v10, fragment.HLT_DoubleMu3_DZ_PFMET90_PFMHT90_v10, fragment.HLT_DoubleMu3_Trk_Tau3mu_NoL1Mass_v6, fragment.HLT_DoubleMu4_Jpsi_Displaced_v7, fragment.HLT_DoubleMu4_Jpsi_NoVertexing_v7, fragment.HLT_DoubleMu4_JpsiTrkTrk_Displaced_v7, fragment.HLT_DoubleMu43NoFiltersNoVtx_v4, fragment.HLT_DoubleMu48NoFiltersNoVtx_v4, fragment.HLT_Mu43NoFiltersNoVtx_Photon43_CaloIdL_v5, fragment.HLT_Mu48NoFiltersNoVtx_Photon48_CaloIdL_v5, fragment.HLT_Mu38NoFiltersNoVtxDisplaced_Photon38_CaloIdL_v1, fragment.HLT_Mu43NoFiltersNoVtxDisplaced_Photon43_CaloIdL_v1, fragment.HLT_DoubleMu33NoFiltersNoVtxDisplaced_v1, fragment.HLT_DoubleMu40NoFiltersNoVtxDisplaced_v1, fragment.HLT_DoubleMu20_7_Mass0to30_L1_DM4_v7, fragment.HLT_DoubleMu20_7_Mass0to30_L1_DM4EG_v8, fragment.HLT_HT425_v9, fragment.HLT_HT430_DisplacedDijet40_DisplacedTrack_v13, fragment.HLT_HT500_DisplacedDijet40_DisplacedTrack_v13, fragment.HLT_HT430_DisplacedDijet60_DisplacedTrack_v13, fragment.HLT_HT400_DisplacedDijet40_DisplacedTrack_v13, fragment.HLT_HT650_DisplacedDijet60_Inclusive_v13, fragment.HLT_HT550_DisplacedDijet60_Inclusive_v13, fragment.HLT_DiJet110_35_Mjj650_PFMET110_v9, fragment.HLT_DiJet110_35_Mjj650_PFMET120_v9, fragment.HLT_DiJet110_35_Mjj650_PFMET130_v9, fragment.HLT_TripleJet110_35_35_Mjj650_PFMET110_v9, fragment.HLT_TripleJet110_35_35_Mjj650_PFMET120_v9, fragment.HLT_TripleJet110_35_35_Mjj650_PFMET130_v9, fragment.HLT_Ele30_eta2p1_WPTight_Gsf_CentralPFJet35_EleCleaned_v13, fragment.HLT_Ele28_eta2p1_WPTight_Gsf_HT150_v13, fragment.HLT_Ele28_HighEta_SC20_Mass55_v13, fragment.HLT_DoubleMu20_7_Mass0to30_Photon23_v8, fragment.HLT_Ele15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, fragment.HLT_Ele15_IsoVVVL_PFHT450_PFMET50_v16, fragment.HLT_Ele15_IsoVVVL_PFHT450_v16, fragment.HLT_Ele50_IsoVVVL_PFHT450_v16, fragment.HLT_Ele15_IsoVVVL_PFHT600_v20, fragment.HLT_Mu4_TrkIsoVVL_DiPFJet90_40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v15, fragment.HLT_Mu8_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v16, fragment.HLT_Mu10_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT350_PFMETNoMu60_v15, fragment.HLT_Mu15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, fragment.HLT_Mu15_IsoVVVL_PFHT450_PFMET50_v15, fragment.HLT_Mu15_IsoVVVL_PFHT450_v15, fragment.HLT_Mu50_IsoVVVL_PFHT450_v15, fragment.HLT_Mu15_IsoVVVL_PFHT600_v19, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET70_PFMHT70_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET80_PFMHT80_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET90_PFMHT90_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET100_PFMHT100_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu70_PFMHTNoMu70_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu80_PFMHTNoMu80_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu90_PFMHTNoMu90_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu100_PFMHTNoMu100_IDTight_v2, fragment.HLT_Dimuon10_PsiPrime_Barrel_Seagulls_v7, fragment.HLT_Dimuon20_Jpsi_Barrel_Seagulls_v7, fragment.HLT_Dimuon12_Upsilon_y1p4_v2, fragment.HLT_Dimuon14_Phi_Barrel_Seagulls_v7, fragment.HLT_Dimuon18_PsiPrime_v14, fragment.HLT_Dimuon25_Jpsi_v14, fragment.HLT_Dimuon18_PsiPrime_noCorrL1_v6, fragment.HLT_Dimuon24_Upsilon_noCorrL1_v6, fragment.HLT_Dimuon24_Phi_noCorrL1_v6, fragment.HLT_Dimuon25_Jpsi_noCorrL1_v6, fragment.HLT_DiMu4_Ele9_CaloIdL_TrackIdL_DZ_Mass3p8_v17, fragment.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_DZ_v17, fragment.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_v17, fragment.HLT_DoubleIsoMu20_eta2p1_v7, fragment.HLT_TrkMu12_DoubleTrkMu5NoFiltersNoVtx_v6, fragment.HLT_TrkMu16_DoubleTrkMu6NoFiltersNoVtx_v12, fragment.HLT_TrkMu17_DoubleTrkMu8NoFiltersNoVtx_v13, fragment.HLT_Mu8_v12, fragment.HLT_Mu17_v13, fragment.HLT_Mu19_v4, fragment.HLT_Mu17_Photon30_IsoCaloId_v6, fragment.HLT_Ele8_CaloIdL_TrackIdL_IsoVL_PFJet30_v16, fragment.HLT_Ele12_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, fragment.HLT_Ele15_CaloIdL_TrackIdL_IsoVL_PFJet30_v3, fragment.HLT_Ele23_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, fragment.HLT_Ele8_CaloIdM_TrackIdM_PFJet30_v18, fragment.HLT_Ele17_CaloIdM_TrackIdM_PFJet30_v16, fragment.HLT_Ele23_CaloIdM_TrackIdM_PFJet30_v18, fragment.HLT_Ele50_CaloIdVT_GsfTrkIdT_PFJet165_v18, fragment.HLT_Ele115_CaloIdVT_GsfTrkIdT_v14, fragment.HLT_Ele135_CaloIdVT_GsfTrkIdT_v7, fragment.HLT_Ele145_CaloIdVT_GsfTrkIdT_v8, fragment.HLT_Ele200_CaloIdVT_GsfTrkIdT_v8, fragment.HLT_Ele250_CaloIdVT_GsfTrkIdT_v13, fragment.HLT_Ele300_CaloIdVT_GsfTrkIdT_v13, fragment.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_TriplePFBTagDeepCSV_4p5_v3, fragment.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_v9, fragment.HLT_PFHT400_SixPFJet32_DoublePFBTagDeepCSV_2p94_v8, fragment.HLT_PFHT400_SixPFJet32_v8, fragment.HLT_PFHT450_SixPFJet36_PFBTagDeepCSV_1p59_v7, fragment.HLT_PFHT450_SixPFJet36_v7, fragment.HLT_PFHT400_FivePFJet_100_100_60_30_30_v8, fragment.HLT_PFHT400_FivePFJet_100_100_60_30_30_DoublePFBTagDeepCSV_4p5_v8, fragment.HLT_PFHT400_FivePFJet_120_120_60_30_30_DoublePFBTagDeepCSV_4p5_v8, fragment.HLT_PFHT350_v19, fragment.HLT_PFHT350MinPFJet15_v9, fragment.HLT_Photon60_R9Id90_CaloIdL_IsoL_v5, fragment.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_v5, fragment.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_PFHT350MinPFJet15_v11, fragment.HLT_ECALHT800_v10, fragment.HLT_DiSC30_18_EIso_AND_HE_Mass70_v13, fragment.HLT_L1FatEvents_v2, fragment.HLT_Physics_v7, fragment.HLT_Physics_part0_v7, fragment.HLT_Physics_part1_v7, fragment.HLT_Physics_part2_v7, fragment.HLT_Physics_part3_v7, fragment.HLT_Physics_part4_v7, fragment.HLT_Physics_part5_v7, fragment.HLT_Physics_part6_v7, fragment.HLT_Physics_part7_v7, fragment.DST_Physics_v7, fragment.HLT_Random_v3, fragment.HLT_Random_TOTEM_part0_v1, fragment.HLT_Random_TOTEM_part1_v1, fragment.HLT_Random_TOTEM_part2_v1, fragment.HLT_Random_TOTEM_part3_v1, fragment.HLT_ZeroBias_v6, fragment.HLT_ZeroBias_TOTEM_part0_v1, fragment.HLT_ZeroBias_TOTEM_part1_v1, fragment.HLT_ZeroBias_TOTEM_part2_v1, fragment.HLT_ZeroBias_TOTEM_part3_v1, fragment.HLT_ZeroBias_Alignment_v1, fragment.HLT_ZeroBias_part0_v6, fragment.HLT_ZeroBias_part1_v6, fragment.HLT_ZeroBias_part2_v6, fragment.HLT_ZeroBias_part3_v6, fragment.HLT_ZeroBias_part4_v6, fragment.HLT_ZeroBias_part5_v6, fragment.HLT_ZeroBias_part6_v6, fragment.HLT_ZeroBias_part7_v6, fragment.DST_ZeroBias_v2, fragment.DST_HT250_CaloScouting_v10, fragment.DST_HT250_CaloBTagScouting_v10, fragment.DST_HT410_PFScouting_v16, fragment.DST_HT410_BTagScouting_v16, fragment.DST_ZeroBias_BTagScouting_v15, fragment.DST_ZeroBias_CaloScouting_PFScouting_v14, fragment.DST_CaloJet40_BTagScouting_v15, fragment.DST_CaloJet40_CaloScouting_PFScouting_v15, fragment.DST_CaloJet40_CaloBTagScouting_v14, fragment.DST_L1HTT_BTagScouting_v15, fragment.DST_L1HTT_CaloScouting_PFScouting_v15, fragment.DST_L1HTT_CaloBTagScouting_v14, fragment.DST_L1DoubleMu_BTagScouting_v16, fragment.DST_L1DoubleMu_CaloScouting_PFScouting_v15, fragment.DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6, fragment.DST_DoubleMu3_noVtx_CaloScouting_v6, fragment.DST_DoubleMu1_noVtx_CaloScouting_v2, fragment.DST_DoubleMu3_noVtx_Mass10_PFScouting_v3, fragment.HLT_AK4CaloJet30_v11, fragment.HLT_AK4CaloJet40_v10, fragment.HLT_AK4CaloJet50_v10, fragment.HLT_AK4CaloJet80_v10, fragment.HLT_AK4CaloJet100_v10, fragment.HLT_AK4CaloJet120_v9, fragment.HLT_AK4PFJet30_v19, fragment.HLT_AK4PFJet50_v19, fragment.HLT_AK4PFJet80_v19, fragment.HLT_AK4PFJet100_v19, fragment.HLT_AK4PFJet120_v18, fragment.HLT_PixelTracks_Multiplicity60ForPPRef_v5, fragment.HLT_PixelTracks_Multiplicity85ForPPRef_v5, fragment.HLT_PixelTracks_Multiplicity110ForPPRef_v5, fragment.HLT_PixelTracks_Multiplicity135ForPPRef_v5, fragment.HLT_PixelTracks_Multiplicity160ForPPRef_v5, fragment.HLT_AK4CaloJet40_Eta5p1ForPPRef_v9, fragment.HLT_AK4CaloJet60_Eta5p1ForPPRef_v9, fragment.HLT_AK4CaloJet80_Eta5p1ForPPRef_v9, fragment.HLT_AK4CaloJet100_Eta5p1ForPPRef_v9, fragment.HLT_AK4CaloJet110_Eta5p1ForPPRef_v9, fragment.HLT_AK4CaloJet120_Eta5p1ForPPRef_v9, fragment.HLT_AK4CaloJet150ForPPRef_v9, fragment.HLT_AK4PFJet40_Eta5p1ForPPRef_v16, fragment.HLT_AK4PFJet60_Eta5p1ForPPRef_v16, fragment.HLT_AK4PFJet80_Eta5p1ForPPRef_v16, fragment.HLT_AK4PFJet100_Eta5p1ForPPRef_v16, fragment.HLT_AK4PFJet110_Eta5p1ForPPRef_v16, fragment.HLT_AK4PFJet120_Eta5p1ForPPRef_v16, fragment.HLT_AK4CaloJet80_Jet35_Eta1p1ForPPRef_v9, fragment.HLT_AK4CaloJet80_Jet35_Eta0p7ForPPRef_v9, fragment.HLT_AK4CaloJet100_Jet35_Eta1p1ForPPRef_v9, fragment.HLT_AK4CaloJet100_Jet35_Eta0p7ForPPRef_v9, fragment.HLT_AK4CaloJet80_45_45_Eta2p1ForPPRef_v9, fragment.HLT_SinglePhoton10_Eta3p1ForPPRef_v8, fragment.HLT_SinglePhoton15_Eta3p1ForPPRef_v9, fragment.HLT_SinglePhoton20_Eta3p1ForPPRef_v9, fragment.HLT_SinglePhoton30_Eta3p1ForPPRef_v9, fragment.HLT_SinglePhoton40_Eta3p1ForPPRef_v8, fragment.HLT_SinglePhoton50_Eta3p1ForPPRef_v8, fragment.HLT_SinglePhoton60_Eta3p1ForPPRef_v8, fragment.HLT_Photon20_HoverELoose_v10, fragment.HLT_Photon30_HoverELoose_v10, fragment.HLT_Photon40_HoverELoose_v10, fragment.HLT_Photon50_HoverELoose_v10, fragment.HLT_Photon60_HoverELoose_v10, fragment.HLT_HIL2Mu3Eta2p5_AK4CaloJet40Eta2p1ForPPRef_v11, fragment.HLT_HIL2Mu3Eta2p5_AK4CaloJet60Eta2p1ForPPRef_v11, fragment.HLT_HIL2Mu3Eta2p5_AK4CaloJet80Eta2p1ForPPRef_v11, fragment.HLT_HIL2Mu3Eta2p5_AK4CaloJet100Eta2p1ForPPRef_v11, fragment.HLT_HIL1DoubleMu0ForPPRef_v4, fragment.HLT_HIL1DoubleMu10ForPPRef_v4, fragment.HLT_HIL2DoubleMu0_NHitQForPPRef_v5, fragment.HLT_HIL3DoubleMu0_OS_m2p5to4p5ForPPRef_v6, fragment.HLT_HIL3DoubleMu0_OS_m7to14ForPPRef_v6, fragment.HLT_HIL2Mu3_NHitQ10ForPPRef_v6, fragment.HLT_HIL3Mu3_NHitQ15ForPPRef_v6, fragment.HLT_HIL2Mu5_NHitQ10ForPPRef_v6, fragment.HLT_HIL3Mu5_NHitQ15ForPPRef_v6, fragment.HLT_HIL2Mu7_NHitQ10ForPPRef_v6, fragment.HLT_HIL3Mu7_NHitQ15ForPPRef_v6, fragment.HLT_HIL2Mu15ForPPRef_v6, fragment.HLT_HIL3Mu15ForPPRef_v6, fragment.HLT_HIL2Mu20ForPPRef_v6, fragment.HLT_HIL3Mu20ForPPRef_v6, fragment.HLT_FullTrack18ForPPRef_v11, fragment.HLT_FullTrack24ForPPRef_v11, fragment.HLT_FullTrack34ForPPRef_v11, fragment.HLT_FullTrack45ForPPRef_v11, fragment.HLT_FullTrack53ForPPRef_v11, fragment.HLT_HIL1CastorMediumJetForPPRef_v4, fragment.HLT_HIL1UnpairedBunchBptxMinusForPPRef_v2, fragment.HLT_HIL1UnpairedBunchBptxPlusForPPRef_v2, fragment.HLT_HIL1NotBptxORForPPRef_v2, fragment.HLT_HIHT80_Beamspot_ppRef5TeV_v3, fragment.HLT_HIZeroBias_part0_v6, fragment.HLT_HIZeroBias_part1_v6, fragment.HLT_HIZeroBias_part2_v6, fragment.HLT_HIZeroBias_part3_v6, fragment.HLT_HIZeroBias_part4_v6, fragment.HLT_HIZeroBias_part5_v6, fragment.HLT_HIZeroBias_part6_v6, fragment.HLT_HIZeroBias_part7_v6, fragment.HLT_HIZeroBias_part8_v6, fragment.HLT_HIZeroBias_part9_v6, fragment.HLT_HIZeroBias_part10_v6, fragment.HLT_HIZeroBias_part11_v6, fragment.AlCa_HIEcalPi0EBonly_v1, fragment.AlCa_HIEcalPi0EEonly_v1, fragment.AlCa_HIEcalEtaEBonly_v1, fragment.AlCa_HIEcalEtaEEonly_v1, fragment.HLT_DmesonPPTrackingGlobal_Dpt8ForPPRef_v11, fragment.HLT_DmesonPPTrackingGlobal_Dpt15ForPPRef_v11, fragment.HLT_DmesonPPTrackingGlobal_Dpt20ForPPRef_v11, fragment.HLT_DmesonPPTrackingGlobal_Dpt30ForPPRef_v11, fragment.HLT_DmesonPPTrackingGlobal_Dpt40ForPPRef_v11, fragment.HLT_DmesonPPTrackingGlobal_Dpt50ForPPRef_v11, fragment.HLT_DmesonPPTrackingGlobal_Dpt60ForPPRef_v11, fragment.HLT_AK4PFBJetBCSV60_Eta2p1ForPPRef_v16, fragment.HLT_AK4PFBJetBCSV80_Eta2p1ForPPRef_v16, fragment.HLT_AK4PFDJet60_Eta2p1ForPPRef_v16, fragment.HLT_AK4PFDJet80_Eta2p1ForPPRef_v16, fragment.HLT_AK4PFBJetBSSV60_Eta2p1ForPPRef_v16, fragment.HLT_AK4PFBJetBSSV80_Eta2p1ForPPRef_v16, fragment.HLT_EcalCalibration_v4, fragment.HLT_HcalCalibration_v5, fragment.AlCa_EcalPhiSym_v9, fragment.HLT_L1UnpairedBunchBptxMinus_v2, fragment.HLT_L1UnpairedBunchBptxPlus_v2, fragment.HLT_L1NotBptxOR_v3, fragment.HLT_L1BptxXOR_v1, fragment.HLT_L1TOTEM1_MinBias_v4, fragment.HLT_L1TOTEM2_ZeroBias_v4, fragment.HLT_L1MinimumBiasHF_OR_v3, fragment.HLT_L1MinimumBiasHF_OR_part0_v1, fragment.HLT_L1MinimumBiasHF_OR_part1_v1, fragment.HLT_L1MinimumBiasHF_OR_part2_v1, fragment.HLT_L1MinimumBiasHF_OR_part3_v1, fragment.HLT_L1MinimumBiasHF_OR_part4_v1, fragment.HLT_L1MinimumBiasHF_OR_part5_v1, fragment.HLT_L1MinimumBiasHF_OR_part6_v1, fragment.HLT_L1MinimumBiasHF_OR_part7_v1, fragment.HLT_L1MinimumBiasHF_OR_part8_v1, fragment.HLT_L1MinimumBiasHF_OR_part9_v1, fragment.HLT_L1MinimumBiasHF0OR_v4, fragment.HLT_L1MinimumBiasHF1OR_v4, fragment.HLT_L1MinimumBiasHF2OR_v4, fragment.HLT_L1MinimumBiasHF2ORNoBptxGating_v5, fragment.HLT_L1MinimumBiasHF1AND_v4, fragment.HLT_L1MinimumBiasHF2AND_v4, fragment.HLT_L1_CDC_SingleMu_3_er1p2_TOP120_DPHI2p618_3p142_v2, fragment.HLT_CDC_L2cosmic_10_er1p0_v1, fragment.HLT_CDC_L2cosmic_5p5_er1p0_v1, fragment.HLT_HcalNZS_v13, fragment.HLT_HcalPhiSym_v15, fragment.HLT_HcalIsolatedbunch_v5, fragment.HLT_IsoTrackHB_v4, fragment.HLT_IsoTrackHE_v4, fragment.HLT_ZeroBias_FirstCollisionAfterAbortGap_v5, fragment.HLT_ZeroBias_IsolatedBunches_v5, fragment.HLT_ZeroBias_FirstCollisionInTrain_v4, fragment.HLT_ZeroBias_LastCollisionInTrain_v3, fragment.HLT_ZeroBias_FirstBXAfterTrain_v3, fragment.AlCa_RPCMuonNormalisation_v13, fragment.AlCa_HIRPCMuonNormalisation_v1, fragment.AlCa_LumiPixelsCounts_Random_v1, fragment.AlCa_LumiPixelsCounts_ZeroBias_v1, fragment.MC_ReducedIterativeTracking_v12, fragment.MC_PFMET_v17, fragment.MC_AK4PFJets_v17, fragment.MC_PFBTagDeepCSV_v10, fragment.MC_PFHT_v16, fragment.MC_PFMHT_v16, fragment.MC_CaloMET_v8, fragment.MC_CaloMET_JetIdCleaned_v9, fragment.MC_AK4CaloJets_v9, fragment.MC_AK4CaloJetsFromPV_v8, fragment.MC_CaloBTagDeepCSV_v8, fragment.MC_CaloHT_v8, fragment.MC_CaloMHT_v8, fragment.MC_AK8PFJets_v17, fragment.MC_AK8TrimPFJets_v17, fragment.MC_AK8PFHT_v16, fragment.MC_AK8CaloHT_v8, fragment.MC_Diphoton10_10_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass10_v13, fragment.MC_DoubleEle5_CaloIdL_MW_v15, fragment.MC_Ele5_WPTight_Gsf_v8, fragment.MC_Ele15_Ele10_CaloIdL_TrackIdL_IsoVL_DZ_v15, fragment.MC_IsoMu_v15, fragment.MC_IsoTkMu15_v12, fragment.MC_DoubleMu_TrkIsoVVL_DZ_v11, fragment.MC_DoubleGlbTrkMu_TrkIsoVVL_DZ_v12, fragment.MC_DoubleMuNoFiltersNoVtx_v7, fragment.AlCa_EcalPi0EBonly_v13, fragment.AlCa_EcalPi0EEonly_v13, fragment.AlCa_EcalEtaEBonly_v13, fragment.AlCa_EcalEtaEEonly_v13, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET90_v12, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET100_v12, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET110_v8, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET120_v8, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET130_v8, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET140_v3, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, fragment.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_1pr_v11, fragment.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_v12, fragment.HLT_MediumChargedIsoPFTau200HighPtRelaxedIso_Trk50_eta2p1_v12, fragment.HLT_MediumChargedIsoPFTau220HighPtRelaxedIso_Trk50_eta2p1_v12, fragment.HLT_Ele16_Ele12_Ele8_CaloIdL_TrackIdL_v9, fragment.HLT_Rsq0p35_v15, fragment.HLT_Rsq0p40_v15, fragment.HLT_RsqMR300_Rsq0p09_MR200_v15, fragment.HLT_RsqMR320_Rsq0p09_MR200_v15, fragment.HLT_RsqMR300_Rsq0p09_MR200_4jet_v15, fragment.HLT_RsqMR320_Rsq0p09_MR200_4jet_v15, fragment.HLT_L1_DoubleJet30_Mass_Min400_Mu10_v1, fragment.HLT_IsoMu27_MET90_v3, fragment.HLT_DoubleMediumChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, fragment.HLT_DoubleMediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, fragment.HLT_DoubleTightChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, fragment.HLT_DoubleTightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, fragment.HLT_DoubleMediumChargedIsoPFTauHPS30_L1MaxMass_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4, fragment.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_VBF_DoubleLooseChargedIsoPFTau20_Trk1_eta2p1_v3, fragment.HLT_VBF_DoubleLooseChargedIsoPFTauHPS20_Trk1_eta2p1_v1, fragment.HLT_VBF_DoubleMediumChargedIsoPFTauHPS20_Trk1_eta2p1_v1, fragment.HLT_VBF_DoubleTightChargedIsoPFTauHPS20_Trk1_eta2p1_v1, fragment.HLT_Photon50_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_PFMET50_v5, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_v5, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ600DEta3_v5, fragment.HLT_PFMET100_PFMHT100_IDTight_PFHT60_v9, fragment.HLT_PFMETNoMu100_PFMHTNoMu100_IDTight_PFHT60_v9, fragment.HLT_PFMETTypeOne100_PFMHT100_IDTight_PFHT60_v9, fragment.HLT_Mu18_Mu9_SameSign_v4, fragment.HLT_Mu18_Mu9_SameSign_DZ_v4, fragment.HLT_Mu18_Mu9_v4, fragment.HLT_Mu18_Mu9_DZ_v4, fragment.HLT_Mu20_Mu10_SameSign_v4, fragment.HLT_Mu20_Mu10_SameSign_DZ_v4, fragment.HLT_Mu20_Mu10_v4, fragment.HLT_Mu20_Mu10_DZ_v4, fragment.HLT_Mu23_Mu12_SameSign_v4, fragment.HLT_Mu23_Mu12_SameSign_DZ_v4, fragment.HLT_Mu23_Mu12_v4, fragment.HLT_Mu23_Mu12_DZ_v4, fragment.HLT_DoubleMu2_Jpsi_DoubleTrk1_Phi1p05_v6, fragment.HLT_DoubleMu2_Jpsi_DoubleTkMu0_Phi_v5, fragment.HLT_DoubleMu3_DCA_PFMET50_PFMHT60_v10, fragment.HLT_TripleMu_5_3_3_Mass3p8_DCA_v3, fragment.HLT_QuadPFJet98_83_71_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_QuadPFJet103_88_75_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_QuadPFJet111_90_80_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_QuadPFJet98_83_71_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet103_88_75_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet105_88_76_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet111_90_80_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet98_83_71_15_v5, fragment.HLT_QuadPFJet103_88_75_15_v5, fragment.HLT_QuadPFJet105_88_76_15_v5, fragment.HLT_QuadPFJet111_90_80_15_v5, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p17_v2, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p1_v2, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_p02_v3, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np2_v2, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np4_v2, fragment.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_Mass55_v2, fragment.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_v2, fragment.HLT_Mu12_IP6_ToCSCS_v1, fragment.HLT_Mu12_IP6_part0_v2, fragment.HLT_Mu12_IP6_part1_v2, fragment.HLT_Mu12_IP6_part2_v2, fragment.HLT_Mu12_IP6_part3_v2, fragment.HLT_Mu12_IP6_part4_v2, fragment.HLT_Mu9_IP5_ToCSCS_v1, fragment.HLT_Mu9_IP5_part0_v2, fragment.HLT_Mu9_IP5_part1_v2, fragment.HLT_Mu9_IP5_part2_v2, fragment.HLT_Mu9_IP5_part3_v2, fragment.HLT_Mu9_IP5_part4_v2, fragment.HLT_Mu7_IP4_ToCSCS_v1, fragment.HLT_Mu7_IP4_part0_v2, fragment.HLT_Mu7_IP4_part1_v2, fragment.HLT_Mu7_IP4_part2_v2, fragment.HLT_Mu7_IP4_part3_v2, fragment.HLT_Mu7_IP4_part4_v2, fragment.HLT_Mu9_IP4_ToCSCS_v1, fragment.HLT_Mu9_IP4_part0_v2, fragment.HLT_Mu9_IP4_part1_v2, fragment.HLT_Mu9_IP4_part2_v2, fragment.HLT_Mu9_IP4_part3_v2, fragment.HLT_Mu9_IP4_part4_v2, fragment.HLT_Mu8_IP5_ToCSCS_v1, fragment.HLT_Mu8_IP5_part0_v2, fragment.HLT_Mu8_IP5_part1_v2, fragment.HLT_Mu8_IP5_part2_v2, fragment.HLT_Mu8_IP5_part3_v2, fragment.HLT_Mu8_IP5_part4_v2, fragment.HLT_Mu8_IP6_ToCSCS_v1, fragment.HLT_Mu8_IP6_part0_v2, fragment.HLT_Mu8_IP6_part1_v2, fragment.HLT_Mu8_IP6_part2_v2, fragment.HLT_Mu8_IP6_part3_v2, fragment.HLT_Mu8_IP6_part4_v2, fragment.HLT_Mu9_IP6_ToCSCS_v1, fragment.HLT_Mu9_IP6_part0_v3, fragment.HLT_Mu9_IP6_part1_v3, fragment.HLT_Mu9_IP6_part2_v3, fragment.HLT_Mu9_IP6_part3_v3, fragment.HLT_Mu9_IP6_part4_v3, fragment.HLT_Mu8_IP3_ToCSCS_v1, fragment.HLT_Mu8_IP3_part0_v3, fragment.HLT_Mu8_IP3_part1_v3, fragment.HLT_Mu8_IP3_part2_v3, fragment.HLT_Mu8_IP3_part3_v3, fragment.HLT_Mu8_IP3_part4_v3, fragment.HLT_Mu9_IP0_part0_v2, fragment.HLT_Mu9_IP3_part0_v2, fragment.HLT_QuadPFJet105_88_76_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_TrkMu6NoFiltersNoVtx_v1, fragment.HLT_TrkMu16NoFiltersNoVtx_v1, fragment.HLT_DoubleTrkMu_16_6_NoFiltersNoVtx_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part0_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part1_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part2_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part3_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part0_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part1_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part2_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part3_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part0_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part1_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part2_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part3_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part0_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part1_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part2_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part3_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part0_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part1_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part2_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part3_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part0_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part1_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part2_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part3_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part0_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part1_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part2_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part3_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part0_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part1_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part2_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part3_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part0_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part1_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part2_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part3_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part0_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part1_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part2_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part3_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part0_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part1_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part2_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part3_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part0_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part1_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part2_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part3_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part0_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part1_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part2_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part3_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part0_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part1_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part2_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part3_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part0_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part1_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part2_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part3_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part0_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part1_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part2_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part3_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part0_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part1_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part2_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part3_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part0_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part1_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part2_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part3_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part0_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part1_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part2_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part3_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part0_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part1_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part2_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part3_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part0_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part1_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part2_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part3_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part0_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part1_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part2_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part3_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part0_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part1_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part2_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part3_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part0_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part1_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part2_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part3_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part0_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part1_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part2_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part3_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part0_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part1_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part2_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part3_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part0_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part1_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part2_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part3_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part0_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part1_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part2_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part3_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part0_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part1_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part2_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part3_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part0_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part1_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part2_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part3_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part0_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part1_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part2_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part3_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part0_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part1_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part2_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part3_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part0_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part1_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part2_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part3_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part0_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part1_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part2_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part3_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part0_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part1_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part2_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part3_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part0_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part1_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part2_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part3_v1, fragment.HLT_L1TOTEM_3_v1, fragment.HLT_L1RomanPot_part0_v1, fragment.HLT_L1RomanPot_part1_v1, fragment.HLT_L1RomanPot_part2_v1, fragment.HLT_L1RomanPot_part3_v1, fragment.HLT_L1DoubleMu_v1, fragment.HLT_L1SingleMu_v1, fragment.HLT_L1DoubleJet_v1, fragment.HLT_L1DoubleJetANDTotem_v1, fragment.HLT_L1DoubleJet_gap_v1, fragment.HLT_L1HFveto_v1, fragment.HLT_HIPhysics_v1, fragment.HLT_HIPhysicsForZS_v1, fragment.HLT_HIRandom_v1, fragment.AlCa_EcalPhiSymForHI_v1, fragment.HLT_HIHcalNZS_v1, fragment.HLT_HIHcalPhiSym_v1, fragment.AlCa_RPCMuonNormalisationForHI_v1, fragment.AlCa_EcalPi0EBonlyForHI_v1, fragment.AlCa_EcalPi0EEonlyForHI_v1, fragment.AlCa_EcalEtaEBonlyForHI_v1, fragment.AlCa_EcalEtaEEonlyForHI_v1, fragment.HLT_HICentralityVeto_v1, fragment.HLT_HICentralityVeto_Beamspot_v1, fragment.HLT_HICentrality30100_FirstCollisionAfterAbortGap_v1, fragment.HLT_HICentralityTag20100_v1, fragment.HLT_HICentralityTag30100_v1, fragment.HLT_HICentralityTag50100_v1, fragment.HLT_HIZeroBias_v1, fragment.HLT_HIZeroBias_FirstCollisionAfterAbortGap_v1, fragment.HLT_HIMinimumBias_part0_v1, fragment.HLT_HIMinimumBias_part1_v1, fragment.HLT_HIMinimumBias_part2_v1, fragment.HLT_HIMinimumBias_part3_v1, fragment.HLT_HIMinimumBias_part4_v1, fragment.HLT_HIMinimumBias_part5_v1, fragment.HLT_HIMinimumBias_part6_v1, fragment.HLT_HIMinimumBias_part7_v1, fragment.HLT_HIMinimumBias_part8_v1, fragment.HLT_HIMinimumBias_part9_v1, fragment.HLT_HIMinimumBias_part10_v1, fragment.HLT_HIMinimumBias_part11_v1, fragment.HLT_HIMinimumBias_part12_v1, fragment.HLT_HIMinimumBias_part13_v1, fragment.HLT_HIMinimumBias_part14_v1, fragment.HLT_HIMinimumBias_part15_v1, fragment.HLT_HIMinimumBias_part16_v1, fragment.HLT_HIMinimumBias_part17_v1, fragment.HLT_HIMinimumBias_part18_v1, fragment.HLT_HIMinimumBias_part19_v1, fragment.HLT_HIMinimumBiasRF_part0_v1, fragment.HLT_HIMinimumBiasRF_part1_v1, fragment.HLT_HIMinimumBiasRF_part2_v1, fragment.HLT_HIMinimumBiasRF_part3_v1, fragment.HLT_HIMinimumBiasRF_part4_v1, fragment.HLT_HIMinimumBiasRF_part5_v1, fragment.HLT_HIMinimumBiasRF_part6_v1, fragment.HLT_HIMinimumBiasRF_part7_v1, fragment.HLT_HIMinimumBiasRF_part8_v1, fragment.HLT_HIMinimumBiasRF_part9_v1, fragment.HLT_HIMinimumBiasRF_part10_v1, fragment.HLT_HIMinimumBiasRF_part11_v1, fragment.HLT_HIMinimumBiasRF_part12_v1, fragment.HLT_HIMinimumBiasRF_part13_v1, fragment.HLT_HIMinimumBiasRF_part14_v1, fragment.HLT_HIMinimumBiasRF_part15_v1, fragment.HLT_HIMinimumBiasRF_part16_v1, fragment.HLT_HIMinimumBiasRF_part17_v1, fragment.HLT_HIMinimumBiasRF_part18_v1, fragment.HLT_HIMinimumBiasRF_part19_v1, fragment.HLT_HIMinimumBiasRF_part20_v1, fragment.HLT_HIMinimumBiasRF_part21_v1, fragment.HLT_HIMinimumBiasRF_part22_v1, fragment.HLT_HIMinimumBiasRF_part23_v1, fragment.HLT_HIPuAK4CaloJet40Eta5p1_v1, fragment.HLT_HIPuAK4CaloJet60Eta5p1_v1, fragment.HLT_HIPuAK4CaloJet80Eta5p1_v1, fragment.HLT_HIPuAK4CaloJet100Eta5p1_v1, fragment.HLT_HIPuAK4CaloJet120Eta5p1_v1, fragment.HLT_HIPuAK4CaloJet40Eta5p1_Centrality_30_100_v1, fragment.HLT_HIPuAK4CaloJet40Eta5p1_Centrality_50_100_v1, fragment.HLT_HIPuAK4CaloJet60Eta5p1_Centrality_30_100_v1, fragment.HLT_HIPuAK4CaloJet60Eta5p1_Centrality_50_100_v1, fragment.HLT_HIPuAK4CaloJet80Eta5p1_Centrality_30_100_v1, fragment.HLT_HIPuAK4CaloJet80Eta5p1_Centrality_50_100_v1, fragment.HLT_HIPuAK4CaloJet100Eta5p1_Centrality_30_100_v1, fragment.HLT_HIPuAK4CaloJet100Eta5p1_Centrality_50_100_v1, fragment.HLT_HIPuAK4CaloJet80_35_Eta1p1_v1, fragment.HLT_HIPuAK4CaloJet100_35_Eta1p1_v1, fragment.HLT_HIPuAK4CaloJet80_35_Eta0p7_v1, fragment.HLT_HIPuAK4CaloJet100_35_Eta0p7_v1, fragment.HLT_HIPuAK4CaloJet80_45_45_Eta2p1_v1, fragment.HLT_HIPuAK4CaloJet40Fwd_v1, fragment.HLT_HIPuAK4CaloJet60Fwd_v1, fragment.HLT_HIPuAK4CaloJet80Fwd_v1, fragment.HLT_HIPuAK4CaloJet100Fwd_v1, fragment.HLT_HIPuAK4CaloJet120Fwd_v1, fragment.HLT_HIIslandPhoton10_Eta2p4_v1, fragment.HLT_HIIslandPhoton10_Eta1p5_v1, fragment.HLT_HIIslandPhoton20_Eta2p4_v1, fragment.HLT_HIIslandPhoton20_Eta1p5_v1, fragment.HLT_HIIslandPhoton30_Eta2p4_v1, fragment.HLT_HIIslandPhoton30_Eta1p5_v1, fragment.HLT_HIIslandPhoton40_Eta2p4_v1, fragment.HLT_HIIslandPhoton40_Eta1p5_v1, fragment.HLT_HIIslandPhoton50_Eta2p4_v1, fragment.HLT_HIIslandPhoton50_Eta1p5_v1, fragment.HLT_HIIslandPhoton60_Eta2p4_v1, fragment.HLT_HIIslandPhoton60_Eta1p5_v1, fragment.HLT_HIGEDPhoton10_v1, fragment.HLT_HIGEDPhoton20_v1, fragment.HLT_HIGEDPhoton30_v1, fragment.HLT_HIGEDPhoton40_v1, fragment.HLT_HIGEDPhoton50_v1, fragment.HLT_HIGEDPhoton60_v1, fragment.HLT_HIGEDPhoton10_EB_v1, fragment.HLT_HIGEDPhoton20_EB_v1, fragment.HLT_HIGEDPhoton30_EB_v1, fragment.HLT_HIGEDPhoton40_EB_v1, fragment.HLT_HIGEDPhoton50_EB_v1, fragment.HLT_HIGEDPhoton60_EB_v1, fragment.HLT_HIGEDPhoton10_HECut_v1, fragment.HLT_HIGEDPhoton20_HECut_v1, fragment.HLT_HIGEDPhoton30_HECut_v1, fragment.HLT_HIGEDPhoton40_HECut_v1, fragment.HLT_HIGEDPhoton50_HECut_v1, fragment.HLT_HIGEDPhoton60_HECut_v1, fragment.HLT_HIGEDPhoton10_EB_HECut_v1, fragment.HLT_HIGEDPhoton20_EB_HECut_v1, fragment.HLT_HIGEDPhoton30_EB_HECut_v1, fragment.HLT_HIGEDPhoton40_EB_HECut_v1, fragment.HLT_HIGEDPhoton50_EB_HECut_v1, fragment.HLT_HIGEDPhoton60_EB_HECut_v1, fragment.HLT_HIEle10Gsf_v1, fragment.HLT_HIEle15Gsf_v1, fragment.HLT_HIEle20Gsf_v1, fragment.HLT_HIEle30Gsf_v1, fragment.HLT_HIEle40Gsf_v1, fragment.HLT_HIEle50Gsf_v1, fragment.HLT_HIEle15Ele10Gsf_v1, fragment.HLT_HIEle15Ele10GsfMass50_v1, fragment.HLT_HIDoubleEle10Gsf_v1, fragment.HLT_HIDoubleEle10GsfMass50_v1, fragment.HLT_HIDoubleEle15Gsf_v1, fragment.HLT_HIDoubleEle15GsfMass50_v1, fragment.HLT_HIL1Mu3Eta2p5_Ele10Gsf_v1, fragment.HLT_HIL1Mu3Eta2p5_Ele15Gsf_v1, fragment.HLT_HIL1Mu3Eta2p5_Ele20Gsf_v1, fragment.HLT_HIL1Mu5Eta2p5_Ele10Gsf_v1, fragment.HLT_HIL1Mu5Eta2p5_Ele15Gsf_v1, fragment.HLT_HIL1Mu5Eta2p5_Ele20Gsf_v1, fragment.HLT_HIL1Mu7Eta2p5_Ele10Gsf_v1, fragment.HLT_HIL1Mu7Eta2p5_Ele15Gsf_v1, fragment.HLT_HIL1Mu7Eta2p5_Ele20Gsf_v1, fragment.HLT_HIEle10Gsf_PuAK4CaloJet40Eta2p1_v1, fragment.HLT_HIEle10Gsf_PuAK4CaloJet60Eta2p1_v1, fragment.HLT_HIEle10Gsf_PuAK4CaloJet80Eta2p1_v1, fragment.HLT_HIEle10Gsf_PuAK4CaloJet100Eta2p1_v1, fragment.HLT_HIEle15Gsf_PuAK4CaloJet40Eta2p1_v1, fragment.HLT_HIEle15Gsf_PuAK4CaloJet60Eta2p1_v1, fragment.HLT_HIEle15Gsf_PuAK4CaloJet80Eta2p1_v1, fragment.HLT_HIEle15Gsf_PuAK4CaloJet100Eta2p1_v1, fragment.HLT_HIEle20Gsf_PuAK4CaloJet40Eta2p1_v1, fragment.HLT_HIEle20Gsf_PuAK4CaloJet60Eta2p1_v1, fragment.HLT_HIEle20Gsf_PuAK4CaloJet80Eta2p1_v1, fragment.HLT_HIEle20Gsf_PuAK4CaloJet100Eta2p1_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt15_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt20_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt30_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt40_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt50_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt60_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt15_NoIter10_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt20_NoIter10_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt30_NoIter10_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt40_NoIter10_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt50_NoIter10_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt60_NoIter10_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt20_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt30_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt40_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt50_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt60_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt20_NoIter10_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt30_NoIter10_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt40_NoIter10_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt50_NoIter10_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt60_NoIter10_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt20_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt30_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt40_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt50_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt60_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt20_NoIter10_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt30_NoIter10_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt40_NoIter10_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt50_NoIter10_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt60_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt18_v1, fragment.HLT_HIFullTracks2018_HighPt24_v1, fragment.HLT_HIFullTracks2018_HighPt34_v1, fragment.HLT_HIFullTracks2018_HighPt45_v1, fragment.HLT_HIFullTracks2018_HighPt56_v1, fragment.HLT_HIFullTracks2018_HighPt60_v1, fragment.HLT_HIFullTracks2018_HighPt18_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt24_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt34_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt45_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt56_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt60_NoIter10_v1, fragment.HLT_HIL1DoubleMuOpen_v1, fragment.HLT_HIL1DoubleMuOpen_Centrality_30_100_v1, fragment.HLT_HIL1DoubleMuOpen_Centrality_40_100_v1, fragment.HLT_HIL1DoubleMuOpen_Centrality_50_100_v1, fragment.HLT_HIL1DoubleMuOpen_er1p6_v1, fragment.HLT_HIL1DoubleMuOpen_OS_er1p6_v1, fragment.HLT_HIL1DoubleMuOpen_OS_Centrality_30_100_v1, fragment.HLT_HIL1DoubleMuOpen_OS_Centrality_40_100_v1, fragment.HLT_HIL1DoubleMu0_v1, fragment.HLT_HIL1DoubleMu10_v1, fragment.HLT_HIL2_L1DoubleMu10_v1, fragment.HLT_HIL3_L1DoubleMu10_v1, fragment.HLT_HIL2DoubleMuOpen_v1, fragment.HLT_HIL3DoubleMuOpen_v1, fragment.HLT_HIL3DoubleMuOpen_M60120_v1, fragment.HLT_HIL3DoubleMuOpen_JpsiPsi_v1, fragment.HLT_HIL3DoubleMuOpen_Upsi_v1, fragment.HLT_HIL3Mu0_L2Mu0_v1, fragment.HLT_HIL3Mu2p5NHitQ10_L2Mu2_v1, fragment.HLT_HIL1MuOpen_Centrality_70_100_v1, fragment.HLT_HIL1MuOpen_Centrality_80_100_v1, fragment.HLT_HIL2Mu3_NHitQ15_v1, fragment.HLT_HIL2Mu5_NHitQ15_v1, fragment.HLT_HIL2Mu7_NHitQ15_v1, fragment.HLT_HIL2Mu3_NHitQ15_tagging_v1, fragment.HLT_HIL2Mu5_NHitQ15_tagging_v1, fragment.HLT_HIL2Mu7_NHitQ15_tagging_v1, fragment.HLT_HIL3Mu2p5_L1DoubleMu0_v1, fragment.HLT_HIL3Mu3_L1DoubleMuOpen_OS_v1, fragment.HLT_HIL3Mu3NHitQ10_L1DoubleMuOpen_v1, fragment.HLT_HIL3Mu3_L1TripleMuOpen_v1, fragment.HLT_HIL3Mu12_v1, fragment.HLT_HIL3Mu15_v1, fragment.HLT_HIL3Mu20_v1, fragment.HLT_HIL3Mu3_NHitQ10_v1, fragment.HLT_HIL3Mu5_NHitQ10_v1, fragment.HLT_HIL3Mu7_NHitQ10_v1, fragment.HLT_HIL3Mu3_NHitQ10_tagging_v1, fragment.HLT_HIL3Mu5_NHitQ10_tagging_v1, fragment.HLT_HIL3Mu7_NHitQ10_tagging_v1, fragment.HLT_HIL3Mu0NHitQ10_L2Mu0_MAXdR3p5_M1to5_v1, fragment.HLT_HIL3Mu2p5NHitQ10_L2Mu2_M7toinf_v1, fragment.HLT_HIL1_ETT8_ETTAsym50_MinimumBiasHF1_OR_BptxAND_v1, fragment.HLT_HIL1_ETT10_ETTAsym50_MinimumBiasHF1_OR_BptxAND_v1, fragment.HLT_HIL1_ETT60_ETTAsym65_MinimumBiasHF2_OR_PixelTracks10_v1, fragment.HLT_HIL1_ETT65_ETTAsym80_MinimumBiasHF2_OR_PixelTracks10_v1, fragment.HLT_HIFullTracks_Multiplicity020_HF1AND_v1, fragment.HLT_HIFullTracks_Multiplicity2040_HF1AND_v1, fragment.HLT_HIFullTracks_Multiplicity4060_v1, fragment.HLT_HIFullTracks_Multiplicity6080_v1, fragment.HLT_HIFullTracks_Multiplicity80100_v1, fragment.HLT_HIFullTracks_Multiplicity020_v1, fragment.HLT_HIFullTracks_Multiplicity020_HF1OR_v1, fragment.HLT_HIFullTracks_Multiplicity020_HF2OR_v1, fragment.HLT_HIFullTracks_Multiplicity2040_v1, fragment.HLT_HIFullTracks_Multiplicity2040_HF1OR_v1, fragment.HLT_HIFullTracks_Multiplicity2040_HF2OR_v1, fragment.HLT_HIFullTracks_Multiplicity335_HF1OR_v1, fragment.HLT_HIUPC_Mu8_Mu13_v1, fragment.HLT_HIUPC_Mu8_Mu13_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMuOpen_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleMuOpen_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMuOpen_NotMBHF2OR_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMuOpen_NotMBHF2AND_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMuOpen_NotMBHF2AND_v1, fragment.HLT_HIUPC_DoubleMuOpen_NotMBHF2OR_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleMuOpen_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleMuOpen_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleMu0_NotMBHF2OR_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMu0_NotMBHF2AND_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMu0_NotMBHF2AND_v1, fragment.HLT_HIUPC_DoubleMu0_NotMBHF2OR_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleMu0_NotMBHF2AND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleMu0_NotMBHF2AND_v1, fragment.HLT_HIUPC_DoubleMu0_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleMu0_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleMu3_NotMBHF2OR_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMu3_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleMu0_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleMu0_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMu3_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2AND_SinglePixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2AND_v1, fragment.HLT_HIUPC_NotMBHF2OR_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_NotMBHF2AND_SinglePixelTrack_v1, fragment.HLT_HIUPC_NotMBHF2AND_v1, fragment.HLT_HIUPC_NotMBHF2OR_BptxAND_SinglePixelTrack_v1, fragment.HLT_HIUPC_ZeroBias_SinglePixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2OR_SinglePixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2OR_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2AND_SinglePixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2AND_v1, fragment.HLT_HIUPC_DoubleEG5_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2OR_SinglePixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2AND_SinglePixelTrack_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2AND_v1, fragment.HLT_HIUPC_SingleEG5_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2AND_SinglePixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2AND_v1, fragment.HLT_HIUPC_SingleEG3_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2OR_SinglePixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2OR_SinglePixelTrack_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2OR_v1, fragment.HLT_HIUPC_ETT5_Asym50_NotMBHF2OR_v1, fragment.HLT_HIUPC_ETT5_Asym50_NotMBHF2OR_SinglePixelTrack_v1, fragment.HLT_HIUPC_ZeroBias_MaxPixelCluster_v1, fragment.HLT_HIUPC_SingleEG3_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG5_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_BptxAND_MaxPixelTrack_v1, fragment.HLT_HICsAK4PFJet60Eta1p5_v1, fragment.HLT_HICsAK4PFJet80Eta1p5_v1, fragment.HLT_HICsAK4PFJet100Eta1p5_v1, fragment.HLT_HICsAK4PFJet100Eta1p5_Beamspot_v1, fragment.HLT_HICsAK4PFJet120Eta1p5_v1, fragment.HLT_HICsAK4PFJet60Eta1p5_Centrality_30_100_v1, fragment.HLT_HICsAK4PFJet60Eta1p5_Centrality_50_100_v1, fragment.HLT_HICsAK4PFJet80Eta1p5_Centrality_30_100_v1, fragment.HLT_HICsAK4PFJet80Eta1p5_Centrality_50_100_v1, fragment.HLT_HICsAK4PFJet100Eta1p5_Centrality_30_100_v1, fragment.HLT_HICsAK4PFJet100Eta1p5_Centrality_50_100_v1, fragment.HLT_HIL3Mu3_EG10HECut_v1, fragment.HLT_HIL3Mu3_EG15HECut_v1, fragment.HLT_HIL3Mu3_EG20HECut_v1, fragment.HLT_HIL3Mu3_EG30HECut_v1, fragment.HLT_HIL3Mu5_EG10HECut_v1, fragment.HLT_HIL3Mu5_EG15HECut_v1, fragment.HLT_HIL3Mu5_EG20HECut_v1, fragment.HLT_HIL3Mu5_EG30HECut_v1, fragment.HLT_HIL3Mu7_EG10HECut_v1, fragment.HLT_HIL3Mu7_EG15HECut_v1, fragment.HLT_HIL3Mu7_EG20HECut_v1, fragment.HLT_HIL3Mu7_EG30HECut_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet40Eta2p1_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet60Eta2p1_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet80Eta2p1_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet100Eta2p1_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet40Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet60Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet80Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet100Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet40Eta2p1_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet60Eta2p1_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet80Eta2p1_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet100Eta2p1_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet40Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet60Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet80Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet100Eta2p1_FilterDr_v1, fragment.HLT_HICastor_MediumJet_NotMBHF2AND_v1, fragment.HLT_HICastor_MediumJet_NotMBHF2OR_v1, fragment.HLT_HICastor_MediumJet_MBHF1OR_BptxAND_v1, fragment.HLT_HICastor_MediumJet_SingleMu0_MBHF1OR_BptxAND_v1, fragment.HLT_HICastor_MediumJet_SingleEG5_MBHF1OR_BptxAND_v1, fragment.HLT_HICastor_MediumJet_BptxAND_v1, fragment.HLT_HICastor_MediumJet_v1, fragment.HLT_HICastor_HighJet_v1, fragment.HLT_HICastor_HighJet_BptxAND_v1, fragment.HLT_HICastor_HighJet_MBHF1OR_BptxAND_v1, fragment.HLT_HICastor_HighJet_NotMBHF2OR_v1, fragment.HLT_HICastor_HighJet_NotMBHF2AND_v1, fragment.HLT_HICastor_HighJet_MBHF1AND_BptxAND_v1, fragment.HLT_HICastor_HighJet_MBHF2AND_BptxAND_v1, fragment.HLT_HICastor_Muon_v1, fragment.HLT_HICastor_Muon_BptxAND_v1, fragment.HLT_HIIslandPhoton10_Eta2p4_Cent30_100_v1, fragment.HLT_HIIslandPhoton20_Eta2p4_Cent30_100_v1, fragment.HLT_HIIslandPhoton30_Eta2p4_Cent30_100_v1, fragment.HLT_HIIslandPhoton40_Eta2p4_Cent30_100_v1, fragment.HLT_HIIslandPhoton10_Eta2p4_Cent50_100_v1, fragment.HLT_HIIslandPhoton20_Eta2p4_Cent50_100_v1, fragment.HLT_HIIslandPhoton30_Eta2p4_Cent50_100_v1, fragment.HLT_HIIslandPhoton40_Eta2p4_Cent50_100_v1, fragment.HLT_HIGEDPhoton10_Cent30_100_v1, fragment.HLT_HIGEDPhoton20_Cent30_100_v1, fragment.HLT_HIGEDPhoton30_Cent30_100_v1, fragment.HLT_HIGEDPhoton40_Cent30_100_v1, fragment.HLT_HIGEDPhoton10_Cent50_100_v1, fragment.HLT_HIGEDPhoton20_Cent50_100_v1, fragment.HLT_HIGEDPhoton30_Cent50_100_v1, fragment.HLT_HIGEDPhoton40_Cent50_100_v1, fragment.HLT_HIPuAK4CaloJet60Eta2p4_DeepCSV0p4_v1, fragment.HLT_HIPuAK4CaloJet80Eta2p4_DeepCSV0p4_v1, fragment.HLT_HIPuAK4CaloJet100Eta2p4_DeepCSV0p4_v1, fragment.HLT_HIPuAK4CaloJet60Eta2p4_CSVv2WP0p75_v1, fragment.HLT_HIPuAK4CaloJet80Eta2p4_CSVv2WP0p75_v1, fragment.HLT_HIPuAK4CaloJet100Eta2p4_CSVv2WP0p75_v1, fragment.HLT_HIL1NotBptxOR_v1, fragment.HLT_HIL1UnpairedBunchBptxMinus_v1, fragment.HLT_HIL1UnpairedBunchBptxPlus_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part0_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part1_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part2_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part3_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part4_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part5_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part6_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part7_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part8_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part9_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part10_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part11_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part12_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part13_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part14_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part15_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part16_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part17_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part18_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part19_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part0_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part1_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part2_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part3_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part4_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part5_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part6_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part7_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part8_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part9_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part10_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part11_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part12_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part13_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part14_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part15_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part16_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part17_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part18_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part19_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part20_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part21_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part22_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part23_v1, fragment.HLT_HIL1_ZDC_AND_OR_MinimumBiasHF1_AND_BptxAND_v1, fragment.HLT_HIL1_ZDC_AND_OR_MinimumBiasHF2_AND_BptxAND_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part0_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part1_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part2_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part3_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part4_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part5_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part6_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part7_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part8_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part9_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part10_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part11_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part12_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part13_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part14_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part15_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part16_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part17_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part18_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part19_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part0_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part1_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part2_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part3_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part4_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part5_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part6_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part7_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part8_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part9_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part10_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part11_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part12_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part13_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part14_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part15_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part16_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part17_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part18_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part19_v1, fragment.HLTriggerFinalPath, fragment.HLTAnalyzerEndpath, fragment.ScoutingPFOutput, fragment.ScoutingCaloMuonOutput )) +fragment.HLTSchedule = cms.Schedule( *(fragment.HLTriggerFirstPath, fragment.HLT_AK8PFJet360_TrimMass30_v18, fragment.HLT_AK8PFJet380_TrimMass30_v11, fragment.HLT_AK8PFJet400_TrimMass30_v12, fragment.HLT_AK8PFJet420_TrimMass30_v11, fragment.HLT_AK8PFHT750_TrimMass50_v12, fragment.HLT_AK8PFHT800_TrimMass50_v12, fragment.HLT_AK8PFHT850_TrimMass50_v11, fragment.HLT_AK8PFHT900_TrimMass50_v11, fragment.HLT_CaloJet10_NoJetID_v3, fragment.HLT_CaloJet20_NoJetID_v3, fragment.HLT_CaloJet50_NoJetID_v3, fragment.HLT_CaloJet500_NoJetID_v12, fragment.HLT_CaloJet550_NoJetID_v7, fragment.HLT_DoubleMu5_Upsilon_DoubleEle3_CaloIdL_TrackIdL_v4, fragment.HLT_DoubleMu3_DoubleEle7p5_CaloIdL_TrackIdL_Upsilon_v4, fragment.HLT_Trimuon5_3p5_2_Upsilon_Muon_v5, fragment.HLT_TrimuonOpen_5_3p5_2_Upsilon_Muon_v3, fragment.HLT_DoubleEle25_CaloIdL_MW_v4, fragment.HLT_DoubleEle27_CaloIdL_MW_v4, fragment.HLT_DoubleEle33_CaloIdL_MW_v17, fragment.HLT_DoubleEle24_eta2p1_WPTight_Gsf_v7, fragment.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_DZ_PFHT350_v20, fragment.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_PFHT350_v20, fragment.HLT_Ele27_Ele37_CaloIdL_MW_v4, fragment.HLT_Mu27_Ele37_CaloIdL_MW_v5, fragment.HLT_Mu37_Ele27_CaloIdL_MW_v5, fragment.HLT_Mu37_TkMu27_v5, fragment.HLT_DoubleMu4_3_Bs_v14, fragment.HLT_DoubleMu4_3_Jpsi_v2, fragment.HLT_DoubleMu4_JpsiTrk_Displaced_v15, fragment.HLT_DoubleMu4_LowMassNonResonantTrk_Displaced_v15, fragment.HLT_DoubleMu3_Trk_Tau3mu_v12, fragment.HLT_DoubleMu3_TkMu_DsTau3Mu_v4, fragment.HLT_DoubleMu4_PsiPrimeTrk_Displaced_v15, fragment.HLT_DoubleMu4_Mass3p8_DZ_PFHT350_v8, fragment.HLT_Mu3_PFJet40_v16, fragment.HLT_Mu7p5_L2Mu2_Jpsi_v10, fragment.HLT_Mu7p5_L2Mu2_Upsilon_v10, fragment.HLT_Mu7p5_Track2_Jpsi_v11, fragment.HLT_Mu7p5_Track3p5_Jpsi_v11, fragment.HLT_Mu7p5_Track7_Jpsi_v11, fragment.HLT_Mu7p5_Track2_Upsilon_v11, fragment.HLT_Mu7p5_Track3p5_Upsilon_v11, fragment.HLT_Mu7p5_Track7_Upsilon_v11, fragment.HLT_Mu3_L1SingleMu5orSingleMu7_v1, fragment.HLT_DoublePhoton33_CaloIdL_v6, fragment.HLT_DoublePhoton70_v6, fragment.HLT_DoublePhoton85_v14, fragment.HLT_Ele20_WPTight_Gsf_v6, fragment.HLT_Ele15_WPLoose_Gsf_v3, fragment.HLT_Ele17_WPLoose_Gsf_v3, fragment.HLT_Ele20_WPLoose_Gsf_v6, fragment.HLT_Ele20_eta2p1_WPLoose_Gsf_v6, fragment.HLT_DiEle27_WPTightCaloOnly_L1DoubleEG_v4, fragment.HLT_Ele27_WPTight_Gsf_v16, fragment.HLT_Ele28_WPTight_Gsf_v1, fragment.HLT_Ele30_WPTight_Gsf_v1, fragment.HLT_Ele32_WPTight_Gsf_v15, fragment.HLT_Ele35_WPTight_Gsf_v9, fragment.HLT_Ele35_WPTight_Gsf_L1EGMT_v5, fragment.HLT_Ele38_WPTight_Gsf_v9, fragment.HLT_Ele40_WPTight_Gsf_v9, fragment.HLT_Ele32_WPTight_Gsf_L1DoubleEG_v9, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTau30_eta2p1_CrossL1_v13, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, fragment.HLT_HT450_Beamspot_v11, fragment.HLT_HT300_Beamspot_v11, fragment.HLT_HT60_Beamspot_v1, fragment.HLT_ZeroBias_Beamspot_v4, fragment.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTau27_eta2p1_CrossL1_v12, fragment.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_CrossL1_v4, fragment.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v4, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS30_Trk1_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu27_LooseChargedIsoPFTau20_Trk1_eta2p1_SingleL1_v5, fragment.HLT_IsoMu27_LooseChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, fragment.HLT_IsoMu27_MediumChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, fragment.HLT_IsoMu27_TightChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, fragment.HLT_IsoMu20_v15, fragment.HLT_IsoMu24_v13, fragment.HLT_IsoMu24_eta2p1_v15, fragment.HLT_IsoMu27_v16, fragment.HLT_IsoMu30_v4, fragment.HLT_UncorrectedJetE30_NoBPTX_v6, fragment.HLT_UncorrectedJetE30_NoBPTX3BX_v6, fragment.HLT_UncorrectedJetE60_NoBPTX3BX_v6, fragment.HLT_UncorrectedJetE70_NoBPTX3BX_v6, fragment.HLT_L1SingleMu18_v3, fragment.HLT_L1SingleMu25_v2, fragment.HLT_L1SingleMuOpen_v2, fragment.HLT_L1SingleMuOpen_DT_v2, fragment.HLT_L1SingleMuCosmics_v1, fragment.HLT_L1SingleMu3_v1, fragment.HLT_L1SingleMu5_v1, fragment.HLT_L1SingleMu7_v1, fragment.HLT_L1DoubleMu0_v1, fragment.HLT_L1SingleEG10_v2, fragment.HLT_L1SingleEG15_v2, fragment.HLT_L1SingleEG18_v1, fragment.HLT_L1SingleJet16_v1, fragment.HLT_L1SingleJet20_v1, fragment.HLT_L1SingleJet35_v1, fragment.HLT_L1SingleJet8erHE_v1, fragment.HLT_L1SingleJet10erHE_v1, fragment.HLT_L1SingleJet12erHE_v1, fragment.HLT_L1SingleJet200_v1, fragment.HLT_L1DoubleJetC50_v2, fragment.HLT_L1EXT_HCAL_LaserMon1_v1, fragment.HLT_L1EXT_HCAL_LaserMon4_v1, fragment.HLT_DQMPixels_SingleMuOpen_v1, fragment.HLT_L2DoubleMu23_NoVertex_v2, fragment.HLT_L2Mu10_v7, fragment.HLT_L2Mu10_NoVertex_NoBPTX3BX_v5, fragment.HLT_L2Mu10_NoVertex_NoBPTX_v6, fragment.HLT_L2Mu45_NoVertex_3Sta_NoBPTX3BX_v4, fragment.HLT_L2Mu40_NoVertex_3Sta_NoBPTX3BX_v5, fragment.HLT_L2Mu50_v2, fragment.HLT_L2Mu23NoVtx_2Cha_v1, fragment.HLT_L2Mu23NoVtx_2Cha_CosmicSeed_v1, fragment.HLT_DoubleL2Mu30NoVtx_2Cha_CosmicSeed_Eta2p4_v2, fragment.HLT_DoubleL2Mu30NoVtx_2Cha_Eta2p4_v2, fragment.HLT_DoubleL2Mu50_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_Eta2p4_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_Eta2p4_v2, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_v14, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_v3, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v15, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_v3, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8_v5, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass8_v3, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8_v5, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass3p8_v3, fragment.HLT_Mu25_TkMu0_Onia_v8, fragment.HLT_Mu30_TkMu0_Psi_v1, fragment.HLT_Mu30_TkMu0_Upsilon_v1, fragment.HLT_Mu20_TkMu0_Phi_v8, fragment.HLT_Mu25_TkMu0_Phi_v8, fragment.HLT_Mu12_v3, fragment.HLT_Mu15_v3, fragment.HLT_Mu20_v12, fragment.HLT_Mu27_v13, fragment.HLT_Mu50_v13, fragment.HLT_Mu55_v3, fragment.HLT_OldMu100_v3, fragment.HLT_TkMu100_v2, fragment.HLT_DiPFJet15_NoCaloMatched_v16, fragment.HLT_DiPFJet25_NoCaloMatched_v16, fragment.HLT_DiPFJet15_FBEta3_NoCaloMatched_v17, fragment.HLT_DiPFJet25_FBEta3_NoCaloMatched_v17, fragment.HLT_DiPFJetAve40_v14, fragment.HLT_DiPFJetAve60_v14, fragment.HLT_DiPFJetAve80_v13, fragment.HLT_DiPFJetAve140_v13, fragment.HLT_DiPFJetAve200_v13, fragment.HLT_DiPFJetAve260_v14, fragment.HLT_DiPFJetAve320_v14, fragment.HLT_DiPFJetAve400_v14, fragment.HLT_DiPFJetAve500_v14, fragment.HLT_DiPFJetAve15_HFJEC_v17, fragment.HLT_DiPFJetAve25_HFJEC_v17, fragment.HLT_DiPFJetAve35_HFJEC_v17, fragment.HLT_DiPFJetAve60_HFJEC_v15, fragment.HLT_DiPFJetAve80_HFJEC_v16, fragment.HLT_DiPFJetAve100_HFJEC_v16, fragment.HLT_DiPFJetAve160_HFJEC_v16, fragment.HLT_DiPFJetAve220_HFJEC_v16, fragment.HLT_DiPFJetAve300_HFJEC_v16, fragment.HLT_AK8PFJet15_v3, fragment.HLT_AK8PFJet25_v3, fragment.HLT_AK8PFJet40_v16, fragment.HLT_AK8PFJet60_v15, fragment.HLT_AK8PFJet80_v15, fragment.HLT_AK8PFJet140_v15, fragment.HLT_AK8PFJet200_v15, fragment.HLT_AK8PFJet260_v16, fragment.HLT_AK8PFJet320_v16, fragment.HLT_AK8PFJet400_v16, fragment.HLT_AK8PFJet450_v16, fragment.HLT_AK8PFJet500_v16, fragment.HLT_AK8PFJet550_v11, fragment.HLT_PFJet15_v3, fragment.HLT_PFJet25_v3, fragment.HLT_PFJet40_v21, fragment.HLT_PFJet60_v21, fragment.HLT_PFJet80_v20, fragment.HLT_PFJet140_v19, fragment.HLT_PFJet200_v19, fragment.HLT_PFJet260_v20, fragment.HLT_PFJet320_v20, fragment.HLT_PFJet400_v20, fragment.HLT_PFJet450_v21, fragment.HLT_PFJet500_v21, fragment.HLT_PFJet550_v11, fragment.HLT_PFJetFwd15_v3, fragment.HLT_PFJetFwd25_v3, fragment.HLT_PFJetFwd40_v19, fragment.HLT_PFJetFwd60_v19, fragment.HLT_PFJetFwd80_v18, fragment.HLT_PFJetFwd140_v18, fragment.HLT_PFJetFwd200_v18, fragment.HLT_PFJetFwd260_v19, fragment.HLT_PFJetFwd320_v19, fragment.HLT_PFJetFwd400_v19, fragment.HLT_PFJetFwd450_v19, fragment.HLT_PFJetFwd500_v19, fragment.HLT_AK8PFJetFwd15_v3, fragment.HLT_AK8PFJetFwd25_v3, fragment.HLT_AK8PFJetFwd40_v15, fragment.HLT_AK8PFJetFwd60_v14, fragment.HLT_AK8PFJetFwd80_v14, fragment.HLT_AK8PFJetFwd140_v14, fragment.HLT_AK8PFJetFwd200_v14, fragment.HLT_AK8PFJetFwd260_v15, fragment.HLT_AK8PFJetFwd320_v15, fragment.HLT_AK8PFJetFwd400_v15, fragment.HLT_AK8PFJetFwd450_v15, fragment.HLT_AK8PFJetFwd500_v15, fragment.HLT_PFHT180_v17, fragment.HLT_PFHT250_v17, fragment.HLT_PFHT370_v17, fragment.HLT_PFHT430_v17, fragment.HLT_PFHT510_v17, fragment.HLT_PFHT590_v17, fragment.HLT_PFHT680_v17, fragment.HLT_PFHT780_v17, fragment.HLT_PFHT890_v17, fragment.HLT_PFHT1050_v18, fragment.HLT_PFHT500_PFMET100_PFMHT100_IDTight_v12, fragment.HLT_PFHT500_PFMET110_PFMHT110_IDTight_v12, fragment.HLT_PFHT700_PFMET85_PFMHT85_IDTight_v12, fragment.HLT_PFHT700_PFMET95_PFMHT95_IDTight_v12, fragment.HLT_PFHT800_PFMET75_PFMHT75_IDTight_v12, fragment.HLT_PFHT800_PFMET85_PFMHT85_IDTight_v12, fragment.HLT_PFMET110_PFMHT110_IDTight_v20, fragment.HLT_PFMET120_PFMHT120_IDTight_v20, fragment.HLT_PFMET130_PFMHT130_IDTight_v20, fragment.HLT_PFMET140_PFMHT140_IDTight_v20, fragment.HLT_PFMET100_PFMHT100_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET110_PFMHT110_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET120_PFMHT120_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET130_PFMHT130_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET140_PFMHT140_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET120_PFMHT120_IDTight_PFHT60_v9, fragment.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_PFHT60_v9, fragment.HLT_PFMETTypeOne120_PFMHT120_IDTight_PFHT60_v9, fragment.HLT_PFMETTypeOne110_PFMHT110_IDTight_v12, fragment.HLT_PFMETTypeOne120_PFMHT120_IDTight_v12, fragment.HLT_PFMETTypeOne130_PFMHT130_IDTight_v12, fragment.HLT_PFMETTypeOne140_PFMHT140_IDTight_v11, fragment.HLT_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, fragment.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, fragment.HLT_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, fragment.HLT_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, fragment.HLT_MonoCentralPFJet80_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, fragment.HLT_MonoCentralPFJet80_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, fragment.HLT_MonoCentralPFJet80_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, fragment.HLT_MonoCentralPFJet80_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, fragment.HLT_L1ETMHadSeeds_v2, fragment.HLT_CaloMHT90_v4, fragment.HLT_CaloMET80_NotCleaned_v4, fragment.HLT_CaloMET90_NotCleaned_v4, fragment.HLT_CaloMET100_NotCleaned_v4, fragment.HLT_CaloMET110_NotCleaned_v4, fragment.HLT_CaloMET250_NotCleaned_v4, fragment.HLT_CaloMET300_NotCleaned_v4, fragment.HLT_CaloMET350_NotCleaned_v4, fragment.HLT_PFMET200_NotCleaned_v9, fragment.HLT_PFMET250_NotCleaned_v9, fragment.HLT_PFMET300_NotCleaned_v9, fragment.HLT_PFMET200_BeamHaloCleaned_v9, fragment.HLT_PFMETTypeOne200_BeamHaloCleaned_v9, fragment.HLT_MET105_IsoTrk50_v9, fragment.HLT_MET120_IsoTrk50_v9, fragment.HLT_SingleJet30_Mu12_SinglePFJet40_v11, fragment.HLT_Mu12_DoublePFJets40_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets100_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets200_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets350_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets40MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets54MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets62MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets40_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets100_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets200_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets350_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets116MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets128MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_Photon300_NoHE_v12, fragment.HLT_Mu8_TrkIsoVVL_v12, fragment.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_DZ_v18, fragment.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_v18, fragment.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_DZ_v19, fragment.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_v19, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v13, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_PFBtagDeepCSV_1p5_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_CaloBtagDeepCSV_1p5_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v11, fragment.HLT_Mu17_TrkIsoVVL_v13, fragment.HLT_Mu19_TrkIsoVVL_v4, fragment.HLT_BTagMu_AK4DiJet20_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet40_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet70_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet110_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet170_Mu5_v12, fragment.HLT_BTagMu_AK4Jet300_Mu5_v12, fragment.HLT_BTagMu_AK8DiJet170_Mu5_v9, fragment.HLT_BTagMu_AK8Jet170_DoubleMu5_v2, fragment.HLT_BTagMu_AK8Jet300_Mu5_v12, fragment.HLT_BTagMu_AK4DiJet20_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet40_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet70_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet110_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet170_Mu5_noalgo_v12, fragment.HLT_BTagMu_AK4Jet300_Mu5_noalgo_v12, fragment.HLT_BTagMu_AK8DiJet170_Mu5_noalgo_v9, fragment.HLT_BTagMu_AK8Jet170_DoubleMu5_noalgo_v2, fragment.HLT_BTagMu_AK8Jet300_Mu5_noalgo_v12, fragment.HLT_Ele15_Ele8_CaloIdL_TrackIdL_IsoVL_v3, fragment.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v19, fragment.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_v19, fragment.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v15, fragment.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_v7, fragment.HLT_Mu23_TrkIsoVVL_Ele8_CaloIdL_TrackIdL_IsoVL_DZ_v10, fragment.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v7, fragment.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v15, fragment.HLT_Mu12_DoublePhoton20_v5, fragment.HLT_TriplePhoton_20_20_20_CaloIdLV2_v3, fragment.HLT_TriplePhoton_20_20_20_CaloIdLV2_R9IdVL_v3, fragment.HLT_TriplePhoton_30_30_10_CaloIdLV2_v4, fragment.HLT_TriplePhoton_30_30_10_CaloIdLV2_R9IdVL_v4, fragment.HLT_TriplePhoton_35_35_5_CaloIdLV2_R9IdVL_v4, fragment.HLT_Photon20_v2, fragment.HLT_Photon22_v2, fragment.HLT_Photon25_v4, fragment.HLT_Photon33_v5, fragment.HLT_Photon50_v13, fragment.HLT_Photon75_v13, fragment.HLT_Photon90_v13, fragment.HLT_Photon120_v13, fragment.HLT_Photon150_v6, fragment.HLT_Photon175_v14, fragment.HLT_Photon200_v13, fragment.HLT_Photon100EB_TightID_TightIso_v2, fragment.HLT_Photon110EB_TightID_TightIso_v2, fragment.HLT_Photon120EB_TightID_TightIso_v2, fragment.HLT_Photon100EBHE10_v2, fragment.HLT_Photon100EEHE10_v2, fragment.HLT_Photon100EE_TightID_TightIso_v2, fragment.HLT_Photon50_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon75_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ300_PFJetsMJJ400DEta3_v5, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ400_PFJetsMJJ600DEta3_v5, fragment.HLT_Photon90_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon120_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon165_R9Id90_HE10_IsoM_v15, fragment.HLT_Photon90_CaloIdL_PFHT700_v16, fragment.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass90_v13, fragment.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass95_v13, fragment.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_PixelVeto_Mass55_v15, fragment.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_NoPixelVeto_Mass55_v13, fragment.HLT_Photon35_TwoProngs35_v1, fragment.HLT_IsoMu24_TwoProngs35_v1, fragment.HLT_Dimuon0_Jpsi_L1_NoOS_v7, fragment.HLT_Dimuon0_Jpsi_NoVertexing_NoOS_v7, fragment.HLT_Dimuon0_Jpsi_v8, fragment.HLT_Dimuon0_Jpsi_NoVertexing_v8, fragment.HLT_Dimuon0_Jpsi_L1_4R_0er1p5R_v7, fragment.HLT_Dimuon0_Jpsi_NoVertexing_L1_4R_0er1p5R_v7, fragment.HLT_Dimuon0_Jpsi3p5_Muon2_v5, fragment.HLT_Dimuon0_Upsilon_L1_4p5_v9, fragment.HLT_Dimuon0_Upsilon_L1_5_v9, fragment.HLT_Dimuon0_Upsilon_L1_4p5NoOS_v8, fragment.HLT_Dimuon0_Upsilon_L1_4p5er2p0_v9, fragment.HLT_Dimuon0_Upsilon_L1_4p5er2p0M_v7, fragment.HLT_Dimuon0_Upsilon_NoVertexing_v7, fragment.HLT_Dimuon0_Upsilon_L1_5M_v8, fragment.HLT_Dimuon0_LowMass_L1_0er1p5R_v7, fragment.HLT_Dimuon0_LowMass_L1_0er1p5_v8, fragment.HLT_Dimuon0_LowMass_v8, fragment.HLT_Dimuon0_LowMass_L1_4_v8, fragment.HLT_Dimuon0_LowMass_L1_4R_v7, fragment.HLT_Dimuon0_LowMass_L1_TM530_v6, fragment.HLT_Trimuon2_Upsilon5_Muon_NoL1Mass_v6, fragment.HLT_Dimuon0_Upsilon_Muon_L1_TM0_v6, fragment.HLT_Dimuon0_Upsilon_Muon_NoL1Mass_v6, fragment.HLT_TripleMu_5_3_3_Mass3p8_DZ_v8, fragment.HLT_TripleMu_10_5_5_DZ_v10, fragment.HLT_TripleMu_12_10_5_v10, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_v4, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_Charge1_v4, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_v4, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_Charge1_v4, fragment.HLT_DoubleMu3_DZ_PFMET50_PFMHT60_v10, fragment.HLT_DoubleMu3_DZ_PFMET70_PFMHT70_v10, fragment.HLT_DoubleMu3_DZ_PFMET90_PFMHT90_v10, fragment.HLT_DoubleMu3_Trk_Tau3mu_NoL1Mass_v6, fragment.HLT_DoubleMu4_Jpsi_Displaced_v7, fragment.HLT_DoubleMu4_Jpsi_NoVertexing_v7, fragment.HLT_DoubleMu4_JpsiTrkTrk_Displaced_v7, fragment.HLT_DoubleMu43NoFiltersNoVtx_v4, fragment.HLT_DoubleMu48NoFiltersNoVtx_v4, fragment.HLT_Mu43NoFiltersNoVtx_Photon43_CaloIdL_v5, fragment.HLT_Mu48NoFiltersNoVtx_Photon48_CaloIdL_v5, fragment.HLT_Mu38NoFiltersNoVtxDisplaced_Photon38_CaloIdL_v1, fragment.HLT_Mu43NoFiltersNoVtxDisplaced_Photon43_CaloIdL_v1, fragment.HLT_DoubleMu33NoFiltersNoVtxDisplaced_v1, fragment.HLT_DoubleMu40NoFiltersNoVtxDisplaced_v1, fragment.HLT_DoubleMu20_7_Mass0to30_L1_DM4_v7, fragment.HLT_DoubleMu20_7_Mass0to30_L1_DM4EG_v8, fragment.HLT_HT425_v9, fragment.HLT_HT430_DisplacedDijet40_DisplacedTrack_v13, fragment.HLT_HT500_DisplacedDijet40_DisplacedTrack_v13, fragment.HLT_HT430_DisplacedDijet60_DisplacedTrack_v13, fragment.HLT_HT400_DisplacedDijet40_DisplacedTrack_v13, fragment.HLT_HT650_DisplacedDijet60_Inclusive_v13, fragment.HLT_HT550_DisplacedDijet60_Inclusive_v13, fragment.HLT_DiJet110_35_Mjj650_PFMET110_v9, fragment.HLT_DiJet110_35_Mjj650_PFMET120_v9, fragment.HLT_DiJet110_35_Mjj650_PFMET130_v9, fragment.HLT_TripleJet110_35_35_Mjj650_PFMET110_v9, fragment.HLT_TripleJet110_35_35_Mjj650_PFMET120_v9, fragment.HLT_TripleJet110_35_35_Mjj650_PFMET130_v9, fragment.HLT_Ele30_eta2p1_WPTight_Gsf_CentralPFJet35_EleCleaned_v13, fragment.HLT_Ele28_eta2p1_WPTight_Gsf_HT150_v13, fragment.HLT_Ele28_HighEta_SC20_Mass55_v13, fragment.HLT_DoubleMu20_7_Mass0to30_Photon23_v8, fragment.HLT_Ele15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, fragment.HLT_Ele15_IsoVVVL_PFHT450_PFMET50_v16, fragment.HLT_Ele15_IsoVVVL_PFHT450_v16, fragment.HLT_Ele50_IsoVVVL_PFHT450_v16, fragment.HLT_Ele15_IsoVVVL_PFHT600_v20, fragment.HLT_Mu4_TrkIsoVVL_DiPFJet90_40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v15, fragment.HLT_Mu8_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v16, fragment.HLT_Mu10_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT350_PFMETNoMu60_v15, fragment.HLT_Mu15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, fragment.HLT_Mu15_IsoVVVL_PFHT450_PFMET50_v15, fragment.HLT_Mu15_IsoVVVL_PFHT450_v15, fragment.HLT_Mu50_IsoVVVL_PFHT450_v15, fragment.HLT_Mu15_IsoVVVL_PFHT600_v19, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET70_PFMHT70_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET80_PFMHT80_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET90_PFMHT90_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET100_PFMHT100_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu70_PFMHTNoMu70_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu80_PFMHTNoMu80_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu90_PFMHTNoMu90_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu100_PFMHTNoMu100_IDTight_v2, fragment.HLT_Dimuon10_PsiPrime_Barrel_Seagulls_v7, fragment.HLT_Dimuon20_Jpsi_Barrel_Seagulls_v7, fragment.HLT_Dimuon12_Upsilon_y1p4_v2, fragment.HLT_Dimuon14_Phi_Barrel_Seagulls_v7, fragment.HLT_Dimuon18_PsiPrime_v14, fragment.HLT_Dimuon25_Jpsi_v14, fragment.HLT_Dimuon18_PsiPrime_noCorrL1_v6, fragment.HLT_Dimuon24_Upsilon_noCorrL1_v6, fragment.HLT_Dimuon24_Phi_noCorrL1_v6, fragment.HLT_Dimuon25_Jpsi_noCorrL1_v6, fragment.HLT_DiMu4_Ele9_CaloIdL_TrackIdL_DZ_Mass3p8_v17, fragment.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_DZ_v17, fragment.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_v17, fragment.HLT_DoubleIsoMu20_eta2p1_v7, fragment.HLT_TrkMu12_DoubleTrkMu5NoFiltersNoVtx_v6, fragment.HLT_TrkMu16_DoubleTrkMu6NoFiltersNoVtx_v12, fragment.HLT_TrkMu17_DoubleTrkMu8NoFiltersNoVtx_v13, fragment.HLT_Mu8_v12, fragment.HLT_Mu17_v13, fragment.HLT_Mu19_v4, fragment.HLT_Mu17_Photon30_IsoCaloId_v6, fragment.HLT_Ele8_CaloIdL_TrackIdL_IsoVL_PFJet30_v16, fragment.HLT_Ele12_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, fragment.HLT_Ele15_CaloIdL_TrackIdL_IsoVL_PFJet30_v3, fragment.HLT_Ele23_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, fragment.HLT_Ele8_CaloIdM_TrackIdM_PFJet30_v18, fragment.HLT_Ele17_CaloIdM_TrackIdM_PFJet30_v16, fragment.HLT_Ele23_CaloIdM_TrackIdM_PFJet30_v18, fragment.HLT_Ele50_CaloIdVT_GsfTrkIdT_PFJet165_v18, fragment.HLT_Ele115_CaloIdVT_GsfTrkIdT_v14, fragment.HLT_Ele135_CaloIdVT_GsfTrkIdT_v7, fragment.HLT_Ele145_CaloIdVT_GsfTrkIdT_v8, fragment.HLT_Ele200_CaloIdVT_GsfTrkIdT_v8, fragment.HLT_Ele250_CaloIdVT_GsfTrkIdT_v13, fragment.HLT_Ele300_CaloIdVT_GsfTrkIdT_v13, fragment.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_TriplePFBTagDeepCSV_4p5_v3, fragment.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_v9, fragment.HLT_PFHT400_SixPFJet32_DoublePFBTagDeepCSV_2p94_v8, fragment.HLT_PFHT400_SixPFJet32_v8, fragment.HLT_PFHT450_SixPFJet36_PFBTagDeepCSV_1p59_v7, fragment.HLT_PFHT450_SixPFJet36_v7, fragment.HLT_PFHT400_FivePFJet_100_100_60_30_30_v8, fragment.HLT_PFHT400_FivePFJet_100_100_60_30_30_DoublePFBTagDeepCSV_4p5_v8, fragment.HLT_PFHT400_FivePFJet_120_120_60_30_30_DoublePFBTagDeepCSV_4p5_v8, fragment.HLT_PFHT350_v19, fragment.HLT_PFHT350MinPFJet15_v9, fragment.HLT_Photon60_R9Id90_CaloIdL_IsoL_v5, fragment.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_v5, fragment.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_PFHT350MinPFJet15_v11, fragment.HLT_ECALHT800_v10, fragment.HLT_DiSC30_18_EIso_AND_HE_Mass70_v13, fragment.HLT_L1FatEvents_v2, fragment.HLT_Physics_v7, fragment.HLT_Physics_part0_v7, fragment.HLT_Physics_part1_v7, fragment.HLT_Physics_part2_v7, fragment.HLT_Physics_part3_v7, fragment.HLT_Physics_part4_v7, fragment.HLT_Physics_part5_v7, fragment.HLT_Physics_part6_v7, fragment.HLT_Physics_part7_v7, fragment.DST_Physics_v7, fragment.HLT_Random_v3, fragment.HLT_Random_TOTEM_part0_v1, fragment.HLT_Random_TOTEM_part1_v1, fragment.HLT_Random_TOTEM_part2_v1, fragment.HLT_Random_TOTEM_part3_v1, fragment.HLT_ZeroBias_v6, fragment.HLT_ZeroBias_TOTEM_part0_v1, fragment.HLT_ZeroBias_TOTEM_part1_v1, fragment.HLT_ZeroBias_TOTEM_part2_v1, fragment.HLT_ZeroBias_TOTEM_part3_v1, fragment.HLT_ZeroBias_Alignment_v1, fragment.HLT_ZeroBias_part0_v6, fragment.HLT_ZeroBias_part1_v6, fragment.HLT_ZeroBias_part2_v6, fragment.HLT_ZeroBias_part3_v6, fragment.HLT_ZeroBias_part4_v6, fragment.HLT_ZeroBias_part5_v6, fragment.HLT_ZeroBias_part6_v6, fragment.HLT_ZeroBias_part7_v6, fragment.DST_ZeroBias_v2, fragment.DST_HT250_CaloScouting_v10, fragment.DST_HT250_CaloBTagScouting_v10, fragment.DST_HT410_PFScouting_v16, fragment.DST_HT410_BTagScouting_v16, fragment.DST_ZeroBias_BTagScouting_v15, fragment.DST_ZeroBias_CaloScouting_PFScouting_v14, fragment.DST_CaloJet40_BTagScouting_v15, fragment.DST_CaloJet40_CaloScouting_PFScouting_v15, fragment.DST_CaloJet40_CaloBTagScouting_v14, fragment.DST_L1HTT_BTagScouting_v15, fragment.DST_L1HTT_CaloScouting_PFScouting_v15, fragment.DST_L1HTT_CaloBTagScouting_v14, fragment.DST_L1DoubleMu_BTagScouting_v16, fragment.DST_L1DoubleMu_CaloScouting_PFScouting_v15, fragment.DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6, fragment.DST_DoubleMu3_noVtx_CaloScouting_v6, fragment.DST_DoubleMu1_noVtx_CaloScouting_v2, fragment.DST_DoubleMu3_noVtx_Mass10_PFScouting_v3, fragment.DST_Run3_PFScoutingPixelTracking_v16, fragment.HLT_AK4CaloJet30_v11, fragment.HLT_AK4CaloJet40_v10, fragment.HLT_AK4CaloJet50_v10, fragment.HLT_AK4CaloJet80_v10, fragment.HLT_AK4CaloJet100_v10, fragment.HLT_AK4CaloJet120_v9, fragment.HLT_AK4PFJet30_v19, fragment.HLT_AK4PFJet50_v19, fragment.HLT_AK4PFJet80_v19, fragment.HLT_AK4PFJet100_v19, fragment.HLT_AK4PFJet120_v18, fragment.HLT_PixelTracks_Multiplicity60ForPPRef_v5, fragment.HLT_PixelTracks_Multiplicity85ForPPRef_v5, fragment.HLT_PixelTracks_Multiplicity110ForPPRef_v5, fragment.HLT_PixelTracks_Multiplicity135ForPPRef_v5, fragment.HLT_PixelTracks_Multiplicity160ForPPRef_v5, fragment.HLT_AK4CaloJet40_Eta5p1ForPPRef_v9, fragment.HLT_AK4CaloJet60_Eta5p1ForPPRef_v9, fragment.HLT_AK4CaloJet80_Eta5p1ForPPRef_v9, fragment.HLT_AK4CaloJet100_Eta5p1ForPPRef_v9, fragment.HLT_AK4CaloJet110_Eta5p1ForPPRef_v9, fragment.HLT_AK4CaloJet120_Eta5p1ForPPRef_v9, fragment.HLT_AK4CaloJet150ForPPRef_v9, fragment.HLT_AK4PFJet40_Eta5p1ForPPRef_v16, fragment.HLT_AK4PFJet60_Eta5p1ForPPRef_v16, fragment.HLT_AK4PFJet80_Eta5p1ForPPRef_v16, fragment.HLT_AK4PFJet100_Eta5p1ForPPRef_v16, fragment.HLT_AK4PFJet110_Eta5p1ForPPRef_v16, fragment.HLT_AK4PFJet120_Eta5p1ForPPRef_v16, fragment.HLT_AK4CaloJet80_Jet35_Eta1p1ForPPRef_v9, fragment.HLT_AK4CaloJet80_Jet35_Eta0p7ForPPRef_v9, fragment.HLT_AK4CaloJet100_Jet35_Eta1p1ForPPRef_v9, fragment.HLT_AK4CaloJet100_Jet35_Eta0p7ForPPRef_v9, fragment.HLT_AK4CaloJet80_45_45_Eta2p1ForPPRef_v9, fragment.HLT_SinglePhoton10_Eta3p1ForPPRef_v8, fragment.HLT_SinglePhoton15_Eta3p1ForPPRef_v9, fragment.HLT_SinglePhoton20_Eta3p1ForPPRef_v9, fragment.HLT_SinglePhoton30_Eta3p1ForPPRef_v9, fragment.HLT_SinglePhoton40_Eta3p1ForPPRef_v8, fragment.HLT_SinglePhoton50_Eta3p1ForPPRef_v8, fragment.HLT_SinglePhoton60_Eta3p1ForPPRef_v8, fragment.HLT_Photon20_HoverELoose_v10, fragment.HLT_Photon30_HoverELoose_v10, fragment.HLT_Photon40_HoverELoose_v10, fragment.HLT_Photon50_HoverELoose_v10, fragment.HLT_Photon60_HoverELoose_v10, fragment.HLT_HIL2Mu3Eta2p5_AK4CaloJet40Eta2p1ForPPRef_v11, fragment.HLT_HIL2Mu3Eta2p5_AK4CaloJet60Eta2p1ForPPRef_v11, fragment.HLT_HIL2Mu3Eta2p5_AK4CaloJet80Eta2p1ForPPRef_v11, fragment.HLT_HIL2Mu3Eta2p5_AK4CaloJet100Eta2p1ForPPRef_v11, fragment.HLT_HIL1DoubleMu0ForPPRef_v4, fragment.HLT_HIL1DoubleMu10ForPPRef_v4, fragment.HLT_HIL2DoubleMu0_NHitQForPPRef_v5, fragment.HLT_HIL3DoubleMu0_OS_m2p5to4p5ForPPRef_v6, fragment.HLT_HIL3DoubleMu0_OS_m7to14ForPPRef_v6, fragment.HLT_HIL2Mu3_NHitQ10ForPPRef_v6, fragment.HLT_HIL3Mu3_NHitQ15ForPPRef_v6, fragment.HLT_HIL2Mu5_NHitQ10ForPPRef_v6, fragment.HLT_HIL3Mu5_NHitQ15ForPPRef_v6, fragment.HLT_HIL2Mu7_NHitQ10ForPPRef_v6, fragment.HLT_HIL3Mu7_NHitQ15ForPPRef_v6, fragment.HLT_HIL2Mu15ForPPRef_v6, fragment.HLT_HIL3Mu15ForPPRef_v6, fragment.HLT_HIL2Mu20ForPPRef_v6, fragment.HLT_HIL3Mu20ForPPRef_v6, fragment.HLT_FullTrack18ForPPRef_v11, fragment.HLT_FullTrack24ForPPRef_v11, fragment.HLT_FullTrack34ForPPRef_v11, fragment.HLT_FullTrack45ForPPRef_v11, fragment.HLT_FullTrack53ForPPRef_v11, fragment.HLT_HIL1CastorMediumJetForPPRef_v4, fragment.HLT_HIL1UnpairedBunchBptxMinusForPPRef_v2, fragment.HLT_HIL1UnpairedBunchBptxPlusForPPRef_v2, fragment.HLT_HIL1NotBptxORForPPRef_v2, fragment.HLT_HIHT80_Beamspot_ppRef5TeV_v3, fragment.HLT_HIZeroBias_part0_v6, fragment.HLT_HIZeroBias_part1_v6, fragment.HLT_HIZeroBias_part2_v6, fragment.HLT_HIZeroBias_part3_v6, fragment.HLT_HIZeroBias_part4_v6, fragment.HLT_HIZeroBias_part5_v6, fragment.HLT_HIZeroBias_part6_v6, fragment.HLT_HIZeroBias_part7_v6, fragment.HLT_HIZeroBias_part8_v6, fragment.HLT_HIZeroBias_part9_v6, fragment.HLT_HIZeroBias_part10_v6, fragment.HLT_HIZeroBias_part11_v6, fragment.AlCa_HIEcalPi0EBonly_v1, fragment.AlCa_HIEcalPi0EEonly_v1, fragment.AlCa_HIEcalEtaEBonly_v1, fragment.AlCa_HIEcalEtaEEonly_v1, fragment.HLT_DmesonPPTrackingGlobal_Dpt8ForPPRef_v11, fragment.HLT_DmesonPPTrackingGlobal_Dpt15ForPPRef_v11, fragment.HLT_DmesonPPTrackingGlobal_Dpt20ForPPRef_v11, fragment.HLT_DmesonPPTrackingGlobal_Dpt30ForPPRef_v11, fragment.HLT_DmesonPPTrackingGlobal_Dpt40ForPPRef_v11, fragment.HLT_DmesonPPTrackingGlobal_Dpt50ForPPRef_v11, fragment.HLT_DmesonPPTrackingGlobal_Dpt60ForPPRef_v11, fragment.HLT_AK4PFBJetBCSV60_Eta2p1ForPPRef_v16, fragment.HLT_AK4PFBJetBCSV80_Eta2p1ForPPRef_v16, fragment.HLT_AK4PFDJet60_Eta2p1ForPPRef_v16, fragment.HLT_AK4PFDJet80_Eta2p1ForPPRef_v16, fragment.HLT_AK4PFBJetBSSV60_Eta2p1ForPPRef_v16, fragment.HLT_AK4PFBJetBSSV80_Eta2p1ForPPRef_v16, fragment.HLT_EcalCalibration_v4, fragment.HLT_HcalCalibration_v5, fragment.AlCa_EcalPhiSym_v9, fragment.HLT_L1UnpairedBunchBptxMinus_v2, fragment.HLT_L1UnpairedBunchBptxPlus_v2, fragment.HLT_L1NotBptxOR_v3, fragment.HLT_L1BptxXOR_v1, fragment.HLT_L1TOTEM1_MinBias_v4, fragment.HLT_L1TOTEM2_ZeroBias_v4, fragment.HLT_L1MinimumBiasHF_OR_v3, fragment.HLT_L1MinimumBiasHF_OR_part0_v1, fragment.HLT_L1MinimumBiasHF_OR_part1_v1, fragment.HLT_L1MinimumBiasHF_OR_part2_v1, fragment.HLT_L1MinimumBiasHF_OR_part3_v1, fragment.HLT_L1MinimumBiasHF_OR_part4_v1, fragment.HLT_L1MinimumBiasHF_OR_part5_v1, fragment.HLT_L1MinimumBiasHF_OR_part6_v1, fragment.HLT_L1MinimumBiasHF_OR_part7_v1, fragment.HLT_L1MinimumBiasHF_OR_part8_v1, fragment.HLT_L1MinimumBiasHF_OR_part9_v1, fragment.HLT_L1MinimumBiasHF0OR_v4, fragment.HLT_L1MinimumBiasHF1OR_v4, fragment.HLT_L1MinimumBiasHF2OR_v4, fragment.HLT_L1MinimumBiasHF2ORNoBptxGating_v5, fragment.HLT_L1MinimumBiasHF1AND_v4, fragment.HLT_L1MinimumBiasHF2AND_v4, fragment.HLT_L1_CDC_SingleMu_3_er1p2_TOP120_DPHI2p618_3p142_v2, fragment.HLT_CDC_L2cosmic_10_er1p0_v1, fragment.HLT_CDC_L2cosmic_5p5_er1p0_v1, fragment.HLT_HcalNZS_v13, fragment.HLT_HcalPhiSym_v15, fragment.HLT_HcalIsolatedbunch_v5, fragment.HLT_IsoTrackHB_v4, fragment.HLT_IsoTrackHE_v4, fragment.HLT_ZeroBias_FirstCollisionAfterAbortGap_v5, fragment.HLT_ZeroBias_IsolatedBunches_v5, fragment.HLT_ZeroBias_FirstCollisionInTrain_v4, fragment.HLT_ZeroBias_LastCollisionInTrain_v3, fragment.HLT_ZeroBias_FirstBXAfterTrain_v3, fragment.AlCa_RPCMuonNormalisation_v13, fragment.AlCa_HIRPCMuonNormalisation_v1, fragment.AlCa_LumiPixelsCounts_Random_v1, fragment.AlCa_LumiPixelsCounts_ZeroBias_v1, fragment.MC_ReducedIterativeTracking_v12, fragment.MC_PFMET_v17, fragment.MC_AK4PFJets_v17, fragment.MC_PFBTagDeepCSV_v10, fragment.MC_PFHT_v16, fragment.MC_PFMHT_v16, fragment.MC_CaloMET_v8, fragment.MC_CaloMET_JetIdCleaned_v9, fragment.MC_AK4CaloJets_v9, fragment.MC_AK4CaloJetsFromPV_v8, fragment.MC_CaloBTagDeepCSV_v8, fragment.MC_CaloHT_v8, fragment.MC_CaloMHT_v8, fragment.MC_AK8PFJets_v17, fragment.MC_AK8TrimPFJets_v17, fragment.MC_AK8PFHT_v16, fragment.MC_AK8CaloHT_v8, fragment.MC_Diphoton10_10_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass10_v13, fragment.MC_DoubleEle5_CaloIdL_MW_v15, fragment.MC_Ele5_WPTight_Gsf_v8, fragment.MC_Ele15_Ele10_CaloIdL_TrackIdL_IsoVL_DZ_v15, fragment.MC_IsoMu_v15, fragment.MC_IsoTkMu15_v12, fragment.MC_DoubleMu_TrkIsoVVL_DZ_v11, fragment.MC_DoubleGlbTrkMu_TrkIsoVVL_DZ_v12, fragment.MC_DoubleMuNoFiltersNoVtx_v7, fragment.AlCa_EcalPi0EBonly_v13, fragment.AlCa_EcalPi0EEonly_v13, fragment.AlCa_EcalEtaEBonly_v13, fragment.AlCa_EcalEtaEEonly_v13, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET90_v12, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET100_v12, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET110_v8, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET120_v8, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET130_v8, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET140_v3, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, fragment.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_1pr_v11, fragment.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_v12, fragment.HLT_MediumChargedIsoPFTau200HighPtRelaxedIso_Trk50_eta2p1_v12, fragment.HLT_MediumChargedIsoPFTau220HighPtRelaxedIso_Trk50_eta2p1_v12, fragment.HLT_Ele16_Ele12_Ele8_CaloIdL_TrackIdL_v9, fragment.HLT_Rsq0p35_v15, fragment.HLT_Rsq0p40_v15, fragment.HLT_RsqMR300_Rsq0p09_MR200_v15, fragment.HLT_RsqMR320_Rsq0p09_MR200_v15, fragment.HLT_RsqMR300_Rsq0p09_MR200_4jet_v15, fragment.HLT_RsqMR320_Rsq0p09_MR200_4jet_v15, fragment.HLT_L1_DoubleJet30_Mass_Min400_Mu10_v1, fragment.HLT_IsoMu27_MET90_v3, fragment.HLT_DoubleMediumChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, fragment.HLT_DoubleMediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, fragment.HLT_DoubleTightChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, fragment.HLT_DoubleTightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, fragment.HLT_DoubleMediumChargedIsoPFTauHPS30_L1MaxMass_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4, fragment.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_VBF_DoubleLooseChargedIsoPFTau20_Trk1_eta2p1_v3, fragment.HLT_VBF_DoubleLooseChargedIsoPFTauHPS20_Trk1_eta2p1_v1, fragment.HLT_VBF_DoubleMediumChargedIsoPFTauHPS20_Trk1_eta2p1_v1, fragment.HLT_VBF_DoubleTightChargedIsoPFTauHPS20_Trk1_eta2p1_v1, fragment.HLT_Photon50_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_PFMET50_v5, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_v5, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ600DEta3_v5, fragment.HLT_PFMET100_PFMHT100_IDTight_PFHT60_v9, fragment.HLT_PFMETNoMu100_PFMHTNoMu100_IDTight_PFHT60_v9, fragment.HLT_PFMETTypeOne100_PFMHT100_IDTight_PFHT60_v9, fragment.HLT_Mu18_Mu9_SameSign_v4, fragment.HLT_Mu18_Mu9_SameSign_DZ_v4, fragment.HLT_Mu18_Mu9_v4, fragment.HLT_Mu18_Mu9_DZ_v4, fragment.HLT_Mu20_Mu10_SameSign_v4, fragment.HLT_Mu20_Mu10_SameSign_DZ_v4, fragment.HLT_Mu20_Mu10_v4, fragment.HLT_Mu20_Mu10_DZ_v4, fragment.HLT_Mu23_Mu12_SameSign_v4, fragment.HLT_Mu23_Mu12_SameSign_DZ_v4, fragment.HLT_Mu23_Mu12_v4, fragment.HLT_Mu23_Mu12_DZ_v4, fragment.HLT_DoubleMu2_Jpsi_DoubleTrk1_Phi1p05_v6, fragment.HLT_DoubleMu2_Jpsi_DoubleTkMu0_Phi_v5, fragment.HLT_DoubleMu3_DCA_PFMET50_PFMHT60_v10, fragment.HLT_TripleMu_5_3_3_Mass3p8_DCA_v3, fragment.HLT_QuadPFJet98_83_71_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_QuadPFJet103_88_75_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_QuadPFJet111_90_80_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_QuadPFJet98_83_71_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet103_88_75_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet105_88_76_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet111_90_80_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet98_83_71_15_v5, fragment.HLT_QuadPFJet103_88_75_15_v5, fragment.HLT_QuadPFJet105_88_76_15_v5, fragment.HLT_QuadPFJet111_90_80_15_v5, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p17_v2, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p1_v2, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_p02_v3, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np2_v2, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np4_v2, fragment.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_Mass55_v2, fragment.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_v2, fragment.HLT_Mu12_IP6_ToCSCS_v1, fragment.HLT_Mu12_IP6_part0_v2, fragment.HLT_Mu12_IP6_part1_v2, fragment.HLT_Mu12_IP6_part2_v2, fragment.HLT_Mu12_IP6_part3_v2, fragment.HLT_Mu12_IP6_part4_v2, fragment.HLT_Mu9_IP5_ToCSCS_v1, fragment.HLT_Mu9_IP5_part0_v2, fragment.HLT_Mu9_IP5_part1_v2, fragment.HLT_Mu9_IP5_part2_v2, fragment.HLT_Mu9_IP5_part3_v2, fragment.HLT_Mu9_IP5_part4_v2, fragment.HLT_Mu7_IP4_ToCSCS_v1, fragment.HLT_Mu7_IP4_part0_v2, fragment.HLT_Mu7_IP4_part1_v2, fragment.HLT_Mu7_IP4_part2_v2, fragment.HLT_Mu7_IP4_part3_v2, fragment.HLT_Mu7_IP4_part4_v2, fragment.HLT_Mu9_IP4_ToCSCS_v1, fragment.HLT_Mu9_IP4_part0_v2, fragment.HLT_Mu9_IP4_part1_v2, fragment.HLT_Mu9_IP4_part2_v2, fragment.HLT_Mu9_IP4_part3_v2, fragment.HLT_Mu9_IP4_part4_v2, fragment.HLT_Mu8_IP5_ToCSCS_v1, fragment.HLT_Mu8_IP5_part0_v2, fragment.HLT_Mu8_IP5_part1_v2, fragment.HLT_Mu8_IP5_part2_v2, fragment.HLT_Mu8_IP5_part3_v2, fragment.HLT_Mu8_IP5_part4_v2, fragment.HLT_Mu8_IP6_ToCSCS_v1, fragment.HLT_Mu8_IP6_part0_v2, fragment.HLT_Mu8_IP6_part1_v2, fragment.HLT_Mu8_IP6_part2_v2, fragment.HLT_Mu8_IP6_part3_v2, fragment.HLT_Mu8_IP6_part4_v2, fragment.HLT_Mu9_IP6_ToCSCS_v1, fragment.HLT_Mu9_IP6_part0_v3, fragment.HLT_Mu9_IP6_part1_v3, fragment.HLT_Mu9_IP6_part2_v3, fragment.HLT_Mu9_IP6_part3_v3, fragment.HLT_Mu9_IP6_part4_v3, fragment.HLT_Mu8_IP3_ToCSCS_v1, fragment.HLT_Mu8_IP3_part0_v3, fragment.HLT_Mu8_IP3_part1_v3, fragment.HLT_Mu8_IP3_part2_v3, fragment.HLT_Mu8_IP3_part3_v3, fragment.HLT_Mu8_IP3_part4_v3, fragment.HLT_Mu9_IP0_part0_v2, fragment.HLT_Mu9_IP3_part0_v2, fragment.HLT_QuadPFJet105_88_76_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_TrkMu6NoFiltersNoVtx_v1, fragment.HLT_TrkMu16NoFiltersNoVtx_v1, fragment.HLT_DoubleTrkMu_16_6_NoFiltersNoVtx_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part0_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part1_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part2_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part3_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part0_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part1_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part2_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part3_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part0_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part1_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part2_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part3_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part0_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part1_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part2_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part3_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part0_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part1_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part2_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part3_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part0_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part1_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part2_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part3_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part0_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part1_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part2_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part3_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part0_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part1_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part2_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part3_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part0_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part1_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part2_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part3_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part0_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part1_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part2_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part3_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part0_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part1_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part2_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part3_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part0_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part1_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part2_v1, fragment.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part3_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part0_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part1_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part2_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part3_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part0_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part1_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part2_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part3_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part0_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part1_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part2_v1, fragment.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part3_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part0_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part1_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part2_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part3_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part0_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part1_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part2_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part3_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part0_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part1_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part2_v1, fragment.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part3_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part0_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part1_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part2_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part3_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part0_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part1_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part2_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part3_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part0_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part1_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part2_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part3_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part0_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part1_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part2_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part3_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part0_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part1_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part2_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part3_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part0_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part1_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part2_v1, fragment.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part3_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part0_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part1_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part2_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part3_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part0_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part1_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part2_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part3_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part0_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part1_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part2_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part3_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part0_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part1_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part2_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part3_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part0_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part1_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part2_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part3_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part0_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part1_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part2_v1, fragment.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part3_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part0_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part1_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part2_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part3_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part0_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part1_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part2_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part3_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part0_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part1_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part2_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part3_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part0_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part1_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part2_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part3_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part0_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part1_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part2_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part3_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part0_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part1_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part2_v1, fragment.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part3_v1, fragment.HLT_L1TOTEM_3_v1, fragment.HLT_L1RomanPot_part0_v1, fragment.HLT_L1RomanPot_part1_v1, fragment.HLT_L1RomanPot_part2_v1, fragment.HLT_L1RomanPot_part3_v1, fragment.HLT_L1DoubleMu_v1, fragment.HLT_L1SingleMu_v1, fragment.HLT_L1DoubleJet_v1, fragment.HLT_L1DoubleJetANDTotem_v1, fragment.HLT_L1DoubleJet_gap_v1, fragment.HLT_L1HFveto_v1, fragment.HLT_HIPhysics_v1, fragment.HLT_HIPhysicsForZS_v1, fragment.HLT_HIRandom_v1, fragment.AlCa_EcalPhiSymForHI_v1, fragment.HLT_HIHcalNZS_v1, fragment.HLT_HIHcalPhiSym_v1, fragment.AlCa_RPCMuonNormalisationForHI_v1, fragment.AlCa_EcalPi0EBonlyForHI_v1, fragment.AlCa_EcalPi0EEonlyForHI_v1, fragment.AlCa_EcalEtaEBonlyForHI_v1, fragment.AlCa_EcalEtaEEonlyForHI_v1, fragment.HLT_HICentralityVeto_v1, fragment.HLT_HICentralityVeto_Beamspot_v1, fragment.HLT_HICentrality30100_FirstCollisionAfterAbortGap_v1, fragment.HLT_HICentralityTag20100_v1, fragment.HLT_HICentralityTag30100_v1, fragment.HLT_HICentralityTag50100_v1, fragment.HLT_HIZeroBias_v1, fragment.HLT_HIZeroBias_FirstCollisionAfterAbortGap_v1, fragment.HLT_HIMinimumBias_part0_v1, fragment.HLT_HIMinimumBias_part1_v1, fragment.HLT_HIMinimumBias_part2_v1, fragment.HLT_HIMinimumBias_part3_v1, fragment.HLT_HIMinimumBias_part4_v1, fragment.HLT_HIMinimumBias_part5_v1, fragment.HLT_HIMinimumBias_part6_v1, fragment.HLT_HIMinimumBias_part7_v1, fragment.HLT_HIMinimumBias_part8_v1, fragment.HLT_HIMinimumBias_part9_v1, fragment.HLT_HIMinimumBias_part10_v1, fragment.HLT_HIMinimumBias_part11_v1, fragment.HLT_HIMinimumBias_part12_v1, fragment.HLT_HIMinimumBias_part13_v1, fragment.HLT_HIMinimumBias_part14_v1, fragment.HLT_HIMinimumBias_part15_v1, fragment.HLT_HIMinimumBias_part16_v1, fragment.HLT_HIMinimumBias_part17_v1, fragment.HLT_HIMinimumBias_part18_v1, fragment.HLT_HIMinimumBias_part19_v1, fragment.HLT_HIMinimumBiasRF_part0_v1, fragment.HLT_HIMinimumBiasRF_part1_v1, fragment.HLT_HIMinimumBiasRF_part2_v1, fragment.HLT_HIMinimumBiasRF_part3_v1, fragment.HLT_HIMinimumBiasRF_part4_v1, fragment.HLT_HIMinimumBiasRF_part5_v1, fragment.HLT_HIMinimumBiasRF_part6_v1, fragment.HLT_HIMinimumBiasRF_part7_v1, fragment.HLT_HIMinimumBiasRF_part8_v1, fragment.HLT_HIMinimumBiasRF_part9_v1, fragment.HLT_HIMinimumBiasRF_part10_v1, fragment.HLT_HIMinimumBiasRF_part11_v1, fragment.HLT_HIMinimumBiasRF_part12_v1, fragment.HLT_HIMinimumBiasRF_part13_v1, fragment.HLT_HIMinimumBiasRF_part14_v1, fragment.HLT_HIMinimumBiasRF_part15_v1, fragment.HLT_HIMinimumBiasRF_part16_v1, fragment.HLT_HIMinimumBiasRF_part17_v1, fragment.HLT_HIMinimumBiasRF_part18_v1, fragment.HLT_HIMinimumBiasRF_part19_v1, fragment.HLT_HIMinimumBiasRF_part20_v1, fragment.HLT_HIMinimumBiasRF_part21_v1, fragment.HLT_HIMinimumBiasRF_part22_v1, fragment.HLT_HIMinimumBiasRF_part23_v1, fragment.HLT_HIPuAK4CaloJet40Eta5p1_v1, fragment.HLT_HIPuAK4CaloJet60Eta5p1_v1, fragment.HLT_HIPuAK4CaloJet80Eta5p1_v1, fragment.HLT_HIPuAK4CaloJet100Eta5p1_v1, fragment.HLT_HIPuAK4CaloJet120Eta5p1_v1, fragment.HLT_HIPuAK4CaloJet40Eta5p1_Centrality_30_100_v1, fragment.HLT_HIPuAK4CaloJet40Eta5p1_Centrality_50_100_v1, fragment.HLT_HIPuAK4CaloJet60Eta5p1_Centrality_30_100_v1, fragment.HLT_HIPuAK4CaloJet60Eta5p1_Centrality_50_100_v1, fragment.HLT_HIPuAK4CaloJet80Eta5p1_Centrality_30_100_v1, fragment.HLT_HIPuAK4CaloJet80Eta5p1_Centrality_50_100_v1, fragment.HLT_HIPuAK4CaloJet100Eta5p1_Centrality_30_100_v1, fragment.HLT_HIPuAK4CaloJet100Eta5p1_Centrality_50_100_v1, fragment.HLT_HIPuAK4CaloJet80_35_Eta1p1_v1, fragment.HLT_HIPuAK4CaloJet100_35_Eta1p1_v1, fragment.HLT_HIPuAK4CaloJet80_35_Eta0p7_v1, fragment.HLT_HIPuAK4CaloJet100_35_Eta0p7_v1, fragment.HLT_HIPuAK4CaloJet80_45_45_Eta2p1_v1, fragment.HLT_HIPuAK4CaloJet40Fwd_v1, fragment.HLT_HIPuAK4CaloJet60Fwd_v1, fragment.HLT_HIPuAK4CaloJet80Fwd_v1, fragment.HLT_HIPuAK4CaloJet100Fwd_v1, fragment.HLT_HIPuAK4CaloJet120Fwd_v1, fragment.HLT_HIIslandPhoton10_Eta2p4_v1, fragment.HLT_HIIslandPhoton10_Eta1p5_v1, fragment.HLT_HIIslandPhoton20_Eta2p4_v1, fragment.HLT_HIIslandPhoton20_Eta1p5_v1, fragment.HLT_HIIslandPhoton30_Eta2p4_v1, fragment.HLT_HIIslandPhoton30_Eta1p5_v1, fragment.HLT_HIIslandPhoton40_Eta2p4_v1, fragment.HLT_HIIslandPhoton40_Eta1p5_v1, fragment.HLT_HIIslandPhoton50_Eta2p4_v1, fragment.HLT_HIIslandPhoton50_Eta1p5_v1, fragment.HLT_HIIslandPhoton60_Eta2p4_v1, fragment.HLT_HIIslandPhoton60_Eta1p5_v1, fragment.HLT_HIGEDPhoton10_v1, fragment.HLT_HIGEDPhoton20_v1, fragment.HLT_HIGEDPhoton30_v1, fragment.HLT_HIGEDPhoton40_v1, fragment.HLT_HIGEDPhoton50_v1, fragment.HLT_HIGEDPhoton60_v1, fragment.HLT_HIGEDPhoton10_EB_v1, fragment.HLT_HIGEDPhoton20_EB_v1, fragment.HLT_HIGEDPhoton30_EB_v1, fragment.HLT_HIGEDPhoton40_EB_v1, fragment.HLT_HIGEDPhoton50_EB_v1, fragment.HLT_HIGEDPhoton60_EB_v1, fragment.HLT_HIGEDPhoton10_HECut_v1, fragment.HLT_HIGEDPhoton20_HECut_v1, fragment.HLT_HIGEDPhoton30_HECut_v1, fragment.HLT_HIGEDPhoton40_HECut_v1, fragment.HLT_HIGEDPhoton50_HECut_v1, fragment.HLT_HIGEDPhoton60_HECut_v1, fragment.HLT_HIGEDPhoton10_EB_HECut_v1, fragment.HLT_HIGEDPhoton20_EB_HECut_v1, fragment.HLT_HIGEDPhoton30_EB_HECut_v1, fragment.HLT_HIGEDPhoton40_EB_HECut_v1, fragment.HLT_HIGEDPhoton50_EB_HECut_v1, fragment.HLT_HIGEDPhoton60_EB_HECut_v1, fragment.HLT_HIEle10Gsf_v1, fragment.HLT_HIEle15Gsf_v1, fragment.HLT_HIEle20Gsf_v1, fragment.HLT_HIEle30Gsf_v1, fragment.HLT_HIEle40Gsf_v1, fragment.HLT_HIEle50Gsf_v1, fragment.HLT_HIEle15Ele10Gsf_v1, fragment.HLT_HIEle15Ele10GsfMass50_v1, fragment.HLT_HIDoubleEle10Gsf_v1, fragment.HLT_HIDoubleEle10GsfMass50_v1, fragment.HLT_HIDoubleEle15Gsf_v1, fragment.HLT_HIDoubleEle15GsfMass50_v1, fragment.HLT_HIL1Mu3Eta2p5_Ele10Gsf_v1, fragment.HLT_HIL1Mu3Eta2p5_Ele15Gsf_v1, fragment.HLT_HIL1Mu3Eta2p5_Ele20Gsf_v1, fragment.HLT_HIL1Mu5Eta2p5_Ele10Gsf_v1, fragment.HLT_HIL1Mu5Eta2p5_Ele15Gsf_v1, fragment.HLT_HIL1Mu5Eta2p5_Ele20Gsf_v1, fragment.HLT_HIL1Mu7Eta2p5_Ele10Gsf_v1, fragment.HLT_HIL1Mu7Eta2p5_Ele15Gsf_v1, fragment.HLT_HIL1Mu7Eta2p5_Ele20Gsf_v1, fragment.HLT_HIEle10Gsf_PuAK4CaloJet40Eta2p1_v1, fragment.HLT_HIEle10Gsf_PuAK4CaloJet60Eta2p1_v1, fragment.HLT_HIEle10Gsf_PuAK4CaloJet80Eta2p1_v1, fragment.HLT_HIEle10Gsf_PuAK4CaloJet100Eta2p1_v1, fragment.HLT_HIEle15Gsf_PuAK4CaloJet40Eta2p1_v1, fragment.HLT_HIEle15Gsf_PuAK4CaloJet60Eta2p1_v1, fragment.HLT_HIEle15Gsf_PuAK4CaloJet80Eta2p1_v1, fragment.HLT_HIEle15Gsf_PuAK4CaloJet100Eta2p1_v1, fragment.HLT_HIEle20Gsf_PuAK4CaloJet40Eta2p1_v1, fragment.HLT_HIEle20Gsf_PuAK4CaloJet60Eta2p1_v1, fragment.HLT_HIEle20Gsf_PuAK4CaloJet80Eta2p1_v1, fragment.HLT_HIEle20Gsf_PuAK4CaloJet100Eta2p1_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt15_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt20_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt30_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt40_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt50_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt60_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt15_NoIter10_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt20_NoIter10_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt30_NoIter10_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt40_NoIter10_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt50_NoIter10_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt60_NoIter10_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt20_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt30_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt40_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt50_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt60_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt20_NoIter10_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt30_NoIter10_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt40_NoIter10_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt50_NoIter10_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt60_NoIter10_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt20_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt30_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt40_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt50_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt60_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt20_NoIter10_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt30_NoIter10_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt40_NoIter10_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt50_NoIter10_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt60_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt18_v1, fragment.HLT_HIFullTracks2018_HighPt24_v1, fragment.HLT_HIFullTracks2018_HighPt34_v1, fragment.HLT_HIFullTracks2018_HighPt45_v1, fragment.HLT_HIFullTracks2018_HighPt56_v1, fragment.HLT_HIFullTracks2018_HighPt60_v1, fragment.HLT_HIFullTracks2018_HighPt18_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt24_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt34_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt45_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt56_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt60_NoIter10_v1, fragment.HLT_HIL1DoubleMuOpen_v1, fragment.HLT_HIL1DoubleMuOpen_Centrality_30_100_v1, fragment.HLT_HIL1DoubleMuOpen_Centrality_40_100_v1, fragment.HLT_HIL1DoubleMuOpen_Centrality_50_100_v1, fragment.HLT_HIL1DoubleMuOpen_er1p6_v1, fragment.HLT_HIL1DoubleMuOpen_OS_er1p6_v1, fragment.HLT_HIL1DoubleMuOpen_OS_Centrality_30_100_v1, fragment.HLT_HIL1DoubleMuOpen_OS_Centrality_40_100_v1, fragment.HLT_HIL1DoubleMu0_v1, fragment.HLT_HIL1DoubleMu10_v1, fragment.HLT_HIL2_L1DoubleMu10_v1, fragment.HLT_HIL3_L1DoubleMu10_v1, fragment.HLT_HIL2DoubleMuOpen_v1, fragment.HLT_HIL3DoubleMuOpen_v1, fragment.HLT_HIL3DoubleMuOpen_M60120_v1, fragment.HLT_HIL3DoubleMuOpen_JpsiPsi_v1, fragment.HLT_HIL3DoubleMuOpen_Upsi_v1, fragment.HLT_HIL3Mu0_L2Mu0_v1, fragment.HLT_HIL3Mu2p5NHitQ10_L2Mu2_v1, fragment.HLT_HIL1MuOpen_Centrality_70_100_v1, fragment.HLT_HIL1MuOpen_Centrality_80_100_v1, fragment.HLT_HIL2Mu3_NHitQ15_v1, fragment.HLT_HIL2Mu5_NHitQ15_v1, fragment.HLT_HIL2Mu7_NHitQ15_v1, fragment.HLT_HIL2Mu3_NHitQ15_tagging_v1, fragment.HLT_HIL2Mu5_NHitQ15_tagging_v1, fragment.HLT_HIL2Mu7_NHitQ15_tagging_v1, fragment.HLT_HIL3Mu2p5_L1DoubleMu0_v1, fragment.HLT_HIL3Mu3_L1DoubleMuOpen_OS_v1, fragment.HLT_HIL3Mu3NHitQ10_L1DoubleMuOpen_v1, fragment.HLT_HIL3Mu3_L1TripleMuOpen_v1, fragment.HLT_HIL3Mu12_v1, fragment.HLT_HIL3Mu15_v1, fragment.HLT_HIL3Mu20_v1, fragment.HLT_HIL3Mu3_NHitQ10_v1, fragment.HLT_HIL3Mu5_NHitQ10_v1, fragment.HLT_HIL3Mu7_NHitQ10_v1, fragment.HLT_HIL3Mu3_NHitQ10_tagging_v1, fragment.HLT_HIL3Mu5_NHitQ10_tagging_v1, fragment.HLT_HIL3Mu7_NHitQ10_tagging_v1, fragment.HLT_HIL3Mu0NHitQ10_L2Mu0_MAXdR3p5_M1to5_v1, fragment.HLT_HIL3Mu2p5NHitQ10_L2Mu2_M7toinf_v1, fragment.HLT_HIL1_ETT8_ETTAsym50_MinimumBiasHF1_OR_BptxAND_v1, fragment.HLT_HIL1_ETT10_ETTAsym50_MinimumBiasHF1_OR_BptxAND_v1, fragment.HLT_HIL1_ETT60_ETTAsym65_MinimumBiasHF2_OR_PixelTracks10_v1, fragment.HLT_HIL1_ETT65_ETTAsym80_MinimumBiasHF2_OR_PixelTracks10_v1, fragment.HLT_HIFullTracks_Multiplicity020_HF1AND_v1, fragment.HLT_HIFullTracks_Multiplicity2040_HF1AND_v1, fragment.HLT_HIFullTracks_Multiplicity4060_v1, fragment.HLT_HIFullTracks_Multiplicity6080_v1, fragment.HLT_HIFullTracks_Multiplicity80100_v1, fragment.HLT_HIFullTracks_Multiplicity020_v1, fragment.HLT_HIFullTracks_Multiplicity020_HF1OR_v1, fragment.HLT_HIFullTracks_Multiplicity020_HF2OR_v1, fragment.HLT_HIFullTracks_Multiplicity2040_v1, fragment.HLT_HIFullTracks_Multiplicity2040_HF1OR_v1, fragment.HLT_HIFullTracks_Multiplicity2040_HF2OR_v1, fragment.HLT_HIFullTracks_Multiplicity335_HF1OR_v1, fragment.HLT_HIUPC_Mu8_Mu13_v1, fragment.HLT_HIUPC_Mu8_Mu13_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMuOpen_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleMuOpen_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMuOpen_NotMBHF2OR_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMuOpen_NotMBHF2AND_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMuOpen_NotMBHF2AND_v1, fragment.HLT_HIUPC_DoubleMuOpen_NotMBHF2OR_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleMuOpen_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleMuOpen_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleMu0_NotMBHF2OR_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMu0_NotMBHF2AND_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMu0_NotMBHF2AND_v1, fragment.HLT_HIUPC_DoubleMu0_NotMBHF2OR_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleMu0_NotMBHF2AND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleMu0_NotMBHF2AND_v1, fragment.HLT_HIUPC_DoubleMu0_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleMu0_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleMu3_NotMBHF2OR_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMu3_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleMu0_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleMu0_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMu3_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2AND_SinglePixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2AND_v1, fragment.HLT_HIUPC_NotMBHF2OR_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_NotMBHF2AND_SinglePixelTrack_v1, fragment.HLT_HIUPC_NotMBHF2AND_v1, fragment.HLT_HIUPC_NotMBHF2OR_BptxAND_SinglePixelTrack_v1, fragment.HLT_HIUPC_ZeroBias_SinglePixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2OR_SinglePixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2OR_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2AND_SinglePixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2AND_v1, fragment.HLT_HIUPC_DoubleEG5_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2OR_SinglePixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2AND_SinglePixelTrack_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2AND_v1, fragment.HLT_HIUPC_SingleEG5_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2AND_SinglePixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2AND_v1, fragment.HLT_HIUPC_SingleEG3_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2OR_SinglePixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2OR_SinglePixelTrack_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2OR_v1, fragment.HLT_HIUPC_ETT5_Asym50_NotMBHF2OR_v1, fragment.HLT_HIUPC_ETT5_Asym50_NotMBHF2OR_SinglePixelTrack_v1, fragment.HLT_HIUPC_ZeroBias_MaxPixelCluster_v1, fragment.HLT_HIUPC_SingleEG3_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG5_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_BptxAND_MaxPixelTrack_v1, fragment.HLT_HICsAK4PFJet60Eta1p5_v1, fragment.HLT_HICsAK4PFJet80Eta1p5_v1, fragment.HLT_HICsAK4PFJet100Eta1p5_v1, fragment.HLT_HICsAK4PFJet100Eta1p5_Beamspot_v1, fragment.HLT_HICsAK4PFJet120Eta1p5_v1, fragment.HLT_HICsAK4PFJet60Eta1p5_Centrality_30_100_v1, fragment.HLT_HICsAK4PFJet60Eta1p5_Centrality_50_100_v1, fragment.HLT_HICsAK4PFJet80Eta1p5_Centrality_30_100_v1, fragment.HLT_HICsAK4PFJet80Eta1p5_Centrality_50_100_v1, fragment.HLT_HICsAK4PFJet100Eta1p5_Centrality_30_100_v1, fragment.HLT_HICsAK4PFJet100Eta1p5_Centrality_50_100_v1, fragment.HLT_HIL3Mu3_EG10HECut_v1, fragment.HLT_HIL3Mu3_EG15HECut_v1, fragment.HLT_HIL3Mu3_EG20HECut_v1, fragment.HLT_HIL3Mu3_EG30HECut_v1, fragment.HLT_HIL3Mu5_EG10HECut_v1, fragment.HLT_HIL3Mu5_EG15HECut_v1, fragment.HLT_HIL3Mu5_EG20HECut_v1, fragment.HLT_HIL3Mu5_EG30HECut_v1, fragment.HLT_HIL3Mu7_EG10HECut_v1, fragment.HLT_HIL3Mu7_EG15HECut_v1, fragment.HLT_HIL3Mu7_EG20HECut_v1, fragment.HLT_HIL3Mu7_EG30HECut_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet40Eta2p1_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet60Eta2p1_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet80Eta2p1_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet100Eta2p1_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet40Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet60Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet80Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet100Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet40Eta2p1_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet60Eta2p1_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet80Eta2p1_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet100Eta2p1_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet40Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet60Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet80Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet100Eta2p1_FilterDr_v1, fragment.HLT_HICastor_MediumJet_NotMBHF2AND_v1, fragment.HLT_HICastor_MediumJet_NotMBHF2OR_v1, fragment.HLT_HICastor_MediumJet_MBHF1OR_BptxAND_v1, fragment.HLT_HICastor_MediumJet_SingleMu0_MBHF1OR_BptxAND_v1, fragment.HLT_HICastor_MediumJet_SingleEG5_MBHF1OR_BptxAND_v1, fragment.HLT_HICastor_MediumJet_BptxAND_v1, fragment.HLT_HICastor_MediumJet_v1, fragment.HLT_HICastor_HighJet_v1, fragment.HLT_HICastor_HighJet_BptxAND_v1, fragment.HLT_HICastor_HighJet_MBHF1OR_BptxAND_v1, fragment.HLT_HICastor_HighJet_NotMBHF2OR_v1, fragment.HLT_HICastor_HighJet_NotMBHF2AND_v1, fragment.HLT_HICastor_HighJet_MBHF1AND_BptxAND_v1, fragment.HLT_HICastor_HighJet_MBHF2AND_BptxAND_v1, fragment.HLT_HICastor_Muon_v1, fragment.HLT_HICastor_Muon_BptxAND_v1, fragment.HLT_HIIslandPhoton10_Eta2p4_Cent30_100_v1, fragment.HLT_HIIslandPhoton20_Eta2p4_Cent30_100_v1, fragment.HLT_HIIslandPhoton30_Eta2p4_Cent30_100_v1, fragment.HLT_HIIslandPhoton40_Eta2p4_Cent30_100_v1, fragment.HLT_HIIslandPhoton10_Eta2p4_Cent50_100_v1, fragment.HLT_HIIslandPhoton20_Eta2p4_Cent50_100_v1, fragment.HLT_HIIslandPhoton30_Eta2p4_Cent50_100_v1, fragment.HLT_HIIslandPhoton40_Eta2p4_Cent50_100_v1, fragment.HLT_HIGEDPhoton10_Cent30_100_v1, fragment.HLT_HIGEDPhoton20_Cent30_100_v1, fragment.HLT_HIGEDPhoton30_Cent30_100_v1, fragment.HLT_HIGEDPhoton40_Cent30_100_v1, fragment.HLT_HIGEDPhoton10_Cent50_100_v1, fragment.HLT_HIGEDPhoton20_Cent50_100_v1, fragment.HLT_HIGEDPhoton30_Cent50_100_v1, fragment.HLT_HIGEDPhoton40_Cent50_100_v1, fragment.HLT_HIPuAK4CaloJet60Eta2p4_DeepCSV0p4_v1, fragment.HLT_HIPuAK4CaloJet80Eta2p4_DeepCSV0p4_v1, fragment.HLT_HIPuAK4CaloJet100Eta2p4_DeepCSV0p4_v1, fragment.HLT_HIPuAK4CaloJet60Eta2p4_CSVv2WP0p75_v1, fragment.HLT_HIPuAK4CaloJet80Eta2p4_CSVv2WP0p75_v1, fragment.HLT_HIPuAK4CaloJet100Eta2p4_CSVv2WP0p75_v1, fragment.HLT_HIL1NotBptxOR_v1, fragment.HLT_HIL1UnpairedBunchBptxMinus_v1, fragment.HLT_HIL1UnpairedBunchBptxPlus_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part0_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part1_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part2_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part3_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part4_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part5_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part6_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part7_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part8_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part9_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part10_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part11_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part12_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part13_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part14_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part15_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part16_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part17_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part18_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_part19_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part0_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part1_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part2_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part3_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part4_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part5_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part6_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part7_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part8_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part9_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part10_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part11_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part12_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part13_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part14_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part15_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part16_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part17_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part18_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part19_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part20_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part21_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part22_v1, fragment.HLT_HIMinimumBiasRF_SinglePixelTrack_part23_v1, fragment.HLT_HIL1_ZDC_AND_OR_MinimumBiasHF1_AND_BptxAND_v1, fragment.HLT_HIL1_ZDC_AND_OR_MinimumBiasHF2_AND_BptxAND_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part0_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part1_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part2_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part3_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part4_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part5_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part6_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part7_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part8_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part9_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part10_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part11_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part12_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part13_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part14_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part15_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part16_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part17_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part18_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part19_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part0_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part1_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part2_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part3_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part4_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part5_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part6_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part7_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part8_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part9_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part10_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part11_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part12_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part13_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part14_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part15_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part16_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part17_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part18_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part19_v1, fragment.HLTriggerFinalPath, fragment.HLTAnalyzerEndpath, fragment.ScoutingPFOutput, fragment.ScoutingCaloMuonOutput )) -# dummyfy hltGetConditions in cff's +# dummify hltGetConditions in cff's if 'hltGetConditions' in fragment.__dict__ and 'HLTriggerFirstPath' in fragment.__dict__ : fragment.hltDummyConditions = cms.EDFilter( "HLTBool", result = cms.bool( True ) diff --git a/HLTrigger/Configuration/python/HLT_Fake1_cff.py b/HLTrigger/Configuration/python/HLT_Fake1_cff.py index bcfbf623b8ebc..ed7a57e8c005a 100644 --- a/HLTrigger/Configuration/python/HLT_Fake1_cff.py +++ b/HLTrigger/Configuration/python/HLT_Fake1_cff.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --cff --data /dev/CMSSW_11_2_0/Fake1 --type Fake1 +# hltGetConfiguration --cff --data /dev/CMSSW_11_3_0/Fake1 --type Fake1 -# /dev/CMSSW_11_2_0/Fake1/V7 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/Fake1/V7 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/Fake1/V7') + tableName = cms.string('/dev/CMSSW_11_3_0/Fake1/V7') ) fragment.streams = cms.PSet( A = cms.vstring( 'InitialPD' ) ) @@ -203,7 +203,7 @@ fragment.HLTSchedule = cms.Schedule( *(fragment.HLTriggerFirstPath, fragment.HLT_Physics_v1, fragment.HLT_Random_v1, fragment.HLT_ZeroBias_v1, fragment.HLTriggerFinalPath, fragment.HLTAnalyzerEndpath )) -# dummyfy hltGetConditions in cff's +# dummify hltGetConditions in cff's if 'hltGetConditions' in fragment.__dict__ and 'HLTriggerFirstPath' in fragment.__dict__ : fragment.hltDummyConditions = cms.EDFilter( "HLTBool", result = cms.bool( True ) diff --git a/HLTrigger/Configuration/python/HLT_Fake2_cff.py b/HLTrigger/Configuration/python/HLT_Fake2_cff.py index 05f5297c47fcf..5c745d9949eb3 100644 --- a/HLTrigger/Configuration/python/HLT_Fake2_cff.py +++ b/HLTrigger/Configuration/python/HLT_Fake2_cff.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --cff --data /dev/CMSSW_11_2_0/Fake2 --type Fake2 +# hltGetConfiguration --cff --data /dev/CMSSW_11_3_0/Fake2 --type Fake2 -# /dev/CMSSW_11_2_0/Fake2/V7 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/Fake2/V7 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/Fake2/V7') + tableName = cms.string('/dev/CMSSW_11_3_0/Fake2/V7') ) fragment.streams = cms.PSet( A = cms.vstring( 'InitialPD' ) ) @@ -212,7 +212,7 @@ fragment.HLTSchedule = cms.Schedule( *(fragment.HLTriggerFirstPath, fragment.HLT_Physics_v1, fragment.HLT_Random_v1, fragment.HLT_ZeroBias_v1, fragment.HLTriggerFinalPath, fragment.HLTAnalyzerEndpath )) -# dummyfy hltGetConditions in cff's +# dummify hltGetConditions in cff's if 'hltGetConditions' in fragment.__dict__ and 'HLTriggerFirstPath' in fragment.__dict__ : fragment.hltDummyConditions = cms.EDFilter( "HLTBool", result = cms.bool( True ) diff --git a/HLTrigger/Configuration/python/HLT_Fake_cff.py b/HLTrigger/Configuration/python/HLT_Fake_cff.py index 5da4922242341..ba60888e8d69e 100644 --- a/HLTrigger/Configuration/python/HLT_Fake_cff.py +++ b/HLTrigger/Configuration/python/HLT_Fake_cff.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --cff --data /dev/CMSSW_11_2_0/Fake --type Fake +# hltGetConfiguration --cff --data /dev/CMSSW_11_3_0/Fake --type Fake -# /dev/CMSSW_11_2_0/Fake/V7 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/Fake/V7 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/Fake/V7') + tableName = cms.string('/dev/CMSSW_11_3_0/Fake/V7') ) fragment.streams = cms.PSet( A = cms.vstring( 'InitialPD' ) ) @@ -186,7 +186,7 @@ fragment.HLTSchedule = cms.Schedule( *(fragment.HLTriggerFirstPath, fragment.HLT_Physics_v1, fragment.HLT_Random_v1, fragment.HLT_ZeroBias_v1, fragment.HLTriggerFinalPath, fragment.HLTAnalyzerEndpath )) -# dummyfy hltGetConditions in cff's +# dummify hltGetConditions in cff's if 'hltGetConditions' in fragment.__dict__ and 'HLTriggerFirstPath' in fragment.__dict__ : fragment.hltDummyConditions = cms.EDFilter( "HLTBool", result = cms.bool( True ) diff --git a/HLTrigger/Configuration/python/HLT_GRun_cff.py b/HLTrigger/Configuration/python/HLT_GRun_cff.py index 19be66c8c1ad1..5ac11390a35ea 100644 --- a/HLTrigger/Configuration/python/HLT_GRun_cff.py +++ b/HLTrigger/Configuration/python/HLT_GRun_cff.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --cff --data /dev/CMSSW_11_2_0/GRun --type GRun +# hltGetConfiguration --cff --data /dev/CMSSW_11_3_0/GRun --type GRun -# /dev/CMSSW_11_2_0/GRun/V12 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/GRun/V12 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/GRun/V12') + tableName = cms.string('/dev/CMSSW_11_3_0/GRun/V12') ) fragment.transferSystem = cms.PSet( @@ -3637,12 +3637,7 @@ PhysicsZeroBias4 = cms.vstring( 'EphemeralZeroBias7', 'EphemeralZeroBias8' ), RPCMON = cms.vstring( 'RPCMonitor' ), - ScoutingCaloMuon = cms.vstring( 'ScoutingCaloCommissioning', - 'ScoutingCaloHT', - 'ScoutingCaloMuon' ), - ScoutingPF = cms.vstring( 'ScoutingPFCommissioning', - 'ScoutingPFHT', - 'ScoutingPFMuon' ) + ScoutingPF = cms.vstring( 'ScoutingPFRun3' ) ) fragment.datasets = cms.PSet( AlCaLumiPixelCountsExpress = cms.vstring( 'AlCa_LumiPixelsCounts_Random_v1' ), @@ -4863,49 +4858,14 @@ 'HLT_Mu9_IP5_ToCSCS_v1', 'HLT_Mu9_IP6_ToCSCS_v1' ), RPCMonitor = cms.vstring( 'AlCa_RPCMuonNormalisation_v13' ), - ScoutingCaloCommissioning = cms.vstring( 'DST_CaloJet40_CaloBTagScouting_v14', - 'DST_L1HTT_CaloBTagScouting_v14', - 'DST_ZeroBias_CaloScouting_PFScouting_v14' ), - ScoutingCaloHT = cms.vstring( 'DST_HT250_CaloBTagScouting_v10', - 'DST_HT250_CaloScouting_v10' ), - ScoutingCaloMuon = cms.vstring( 'DST_DoubleMu1_noVtx_CaloScouting_v2', - 'DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6', - 'DST_DoubleMu3_noVtx_CaloScouting_v6' ), - ScoutingMonitor = cms.vstring( 'DST_CaloJet40_BTagScouting_v15', - 'DST_CaloJet40_CaloBTagScouting_v14', - 'DST_CaloJet40_CaloScouting_PFScouting_v15', - 'DST_DoubleMu1_noVtx_CaloScouting_v2', - 'DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6', - 'DST_DoubleMu3_noVtx_CaloScouting_v6', - 'DST_DoubleMu3_noVtx_Mass10_PFScouting_v3', - 'DST_HT250_CaloBTagScouting_v10', - 'DST_HT250_CaloScouting_v10', - 'DST_HT410_BTagScouting_v16', - 'DST_HT410_PFScouting_v16', - 'DST_L1DoubleMu_BTagScouting_v16', - 'DST_L1DoubleMu_CaloScouting_PFScouting_v15', - 'DST_L1HTT_BTagScouting_v15', - 'DST_L1HTT_CaloBTagScouting_v14', - 'DST_L1HTT_CaloScouting_PFScouting_v15', - 'DST_ZeroBias_BTagScouting_v15', - 'DST_ZeroBias_CaloScouting_PFScouting_v14', + ScoutingMonitor = cms.vstring( 'DST_Run3_PFScoutingPixelTracking_v16', 'HLT_Ele115_CaloIdVT_GsfTrkIdT_v14', 'HLT_Ele35_WPTight_Gsf_v9', 'HLT_IsoMu27_v16', 'HLT_Mu50_v13', 'HLT_PFHT1050_v18', 'HLT_Photon200_v13' ), - ScoutingPFCommissioning = cms.vstring( 'DST_CaloJet40_BTagScouting_v15', - 'DST_CaloJet40_CaloScouting_PFScouting_v15', - 'DST_L1DoubleMu_BTagScouting_v16', - 'DST_L1DoubleMu_CaloScouting_PFScouting_v15', - 'DST_L1HTT_BTagScouting_v15', - 'DST_L1HTT_CaloScouting_PFScouting_v15', - 'DST_ZeroBias_BTagScouting_v15', - 'DST_ZeroBias_CaloScouting_PFScouting_v14' ), - ScoutingPFHT = cms.vstring( 'DST_HT410_BTagScouting_v16', - 'DST_HT410_PFScouting_v16' ), - ScoutingPFMuon = cms.vstring( 'DST_DoubleMu3_noVtx_Mass10_PFScouting_v3' ), + ScoutingPFRun3 = cms.vstring( 'DST_Run3_PFScoutingPixelTracking_v16' ), SingleMuon = cms.vstring( 'HLT_IsoMu20_eta2p1_LooseChargedIsoPFTau27_eta2p1_CrossL1_v12', 'HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_CrossL1_v4', 'HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1', @@ -7073,7 +7033,7 @@ ts4Thresh = cms.double( 0.0 ), meanTime = cms.double( 0.0 ), nnlsThresh = cms.double( 1.0E-11 ), - nMaxItersMin = cms.int32( 500 ), + nMaxItersMin = cms.int32( 50 ), timeSigmaSiPM = cms.double( 2.5 ), applyTimeSlew = cms.bool( True ), timeSlewParsType = cms.int32( 3 ), @@ -12288,7 +12248,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -12404,6 +12365,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -17623,14 +17585,6 @@ thrOverE2EB1 = cms.vdouble( 0.0 ), thrOverE2EB2 = cms.vdouble( 0.0 ) ) -fragment.hltRegionalTowerForEgamma = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - EMin = cms.double( 0.8 ), - EtMin = cms.double( 0.5 ), - L1IsoCand = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForAll" ) -) fragment.hltEgammaHcalPFClusterIso = cms.EDProducer( "EgammaHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.2, 0.25 ), useHF = cms.bool( False ), @@ -30996,7 +30950,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 20.0, 20.0, 20.0, 20.0, 20.0, 20.0 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -31112,6 +31067,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -31496,10 +31452,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAllCaloForMuons" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -31509,7 +31465,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -31534,15 +31490,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauLooseRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -31588,10 +31545,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -31601,7 +31558,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -31626,15 +31583,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 50.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauLooseAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -32291,10 +32249,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAllCaloForMuons" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -32304,7 +32262,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -32329,15 +32287,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauLooseRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -32383,10 +32342,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -32396,7 +32355,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -32421,15 +32380,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 50.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauLooseAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -32582,10 +32542,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -32595,7 +32555,276 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), + applyRelativeSumPtCut = cms.bool( False ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), WeightECALIsolation = cms.double( 0.33333 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 0.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 0.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) +) +fragment.hltHpsPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 2.0 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( False ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.05 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.5 ), + applyRelativeSumPtCut = cms.bool( True ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), + WeightECALIsolation = cms.double( 1.0 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 1.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 60.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) +) +fragment.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", + Prediscriminants = cms.PSet( + BooleanOperator = cms.string( "or" ), + discr1 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminator" ) + ), + discr2 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauMediumRelativeChargedIsolationDiscriminator" ) + ) + ), + FailValue = cms.double( 0.0 ), + PassValue = cms.double( 1.0 ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ) +) +fragment.hltHpsSelectedPFTausTrackFindingMediumChargedIsolation = cms.EDFilter( "PFTauSelector", + discriminators = cms.VPSet( + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackFindingDiscriminator" ), + selectionCut = cms.double( 0.5 ) + ), + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator" ), + selectionCut = cms.double( 0.5 ) + ) + ), + discriminatorContainers = cms.VPSet( + ), + cut = cms.string( "pt > 0" ), + src = cms.InputTag( "hltHpsPFTauProducer" ) +) +fragment.hltHpsPFTau30TrackMediumChargedIso = cms.EDFilter( "HLT1PFTau", + saveTags = cms.bool( True ), + MinPt = cms.double( 30.0 ), + MinN = cms.int32( 1 ), + MaxEta = cms.double( 2.5 ), + MinEta = cms.double( -1.0 ), + MinMass = cms.double( -1.0 ), + inputTag = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), + MinE = cms.double( -1.0 ), + triggerType = cms.int32( 84 ), + MaxMass = cms.double( -1.0 ) +) +fragment.hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch = cms.EDProducer( "L1THLTTauMatching", + JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), + EtMin = cms.double( 0.0 ), + L1TauTrigger = cms.InputTag( "hltL1sBigORLooseIsoEGXXerIsoTauYYerdRMin0p3" ) +) +fragment.hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched = cms.EDFilter( "HLT1PFTau", + saveTags = cms.bool( True ), + MinPt = cms.double( 30.0 ), + MinN = cms.int32( 1 ), + MaxEta = cms.double( 2.1 ), + MinEta = cms.double( -1.0 ), + MinMass = cms.double( -1.0 ), + inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch" ), + MinE = cms.double( -1.0 ), + triggerType = cms.int32( 84 ), + MaxMass = cms.double( -1.0 ) +) +fragment.hltHpsOverlapFilterIsoEle24WPTightGsfMediumIsoPFTau30 = cms.EDFilter( "HLT2PhotonPFTau", + saveTags = cms.bool( True ), + MinMinv = cms.double( 0.0 ), + originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackFindingMediumChargedIsolation' ), + MinDelR = cms.double( 0.3 ), + MinPt = cms.double( 1.0 ), + MinN = cms.int32( 1 ), + originTag1 = cms.VInputTag( 'hltEgammaCandidates' ), + triggerType1 = cms.int32( 81 ), + triggerType2 = cms.int32( 84 ), + MaxMinv = cms.double( -1.0 ), + MinDeta = cms.double( 0.0 ), + MaxDelR = cms.double( 99999.0 ), + inputTag1 = cms.InputTag( "hltEle24erWPTightGsfTrackIsoFilterForTau" ), + inputTag2 = cms.InputTag( "hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched" ), + MaxDphi = cms.double( -1.0 ), + MaxDeta = cms.double( -1.0 ), + MaxPt = cms.double( -1.0 ), + MinDphi = cms.double( 0.0 ) +) +fragment.hltPreEle24eta2p1WPTightGsfTightChargedIsoPFTauHPS30eta2p1CrossL1 = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +fragment.hltHpsPFTauTightAbsoluteChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 3.2 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( True ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "NotUsed" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.03 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -32620,282 +32849,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) -) -fragment.hltHpsPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 2.0 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), - rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.05 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), - applyRelativeSumPtCut = cms.bool( True ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) -) -fragment.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", - Prediscriminants = cms.PSet( - BooleanOperator = cms.string( "or" ), - discr1 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminator" ) - ), - discr2 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauMediumRelativeChargedIsolationDiscriminator" ) - ) - ), - FailValue = cms.double( 0.0 ), - PassValue = cms.double( 1.0 ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ) -) -fragment.hltHpsSelectedPFTausTrackFindingMediumChargedIsolation = cms.EDFilter( "PFTauSelector", - discriminators = cms.VPSet( - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackFindingDiscriminator" ), - selectionCut = cms.double( 0.5 ) - ), - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator" ), - selectionCut = cms.double( 0.5 ) - ) - ), - discriminatorContainers = cms.VPSet( - ), - cut = cms.string( "pt > 0" ), - src = cms.InputTag( "hltHpsPFTauProducer" ) -) -fragment.hltHpsPFTau30TrackMediumChargedIso = cms.EDFilter( "HLT1PFTau", - saveTags = cms.bool( True ), - MinPt = cms.double( 30.0 ), - MinN = cms.int32( 1 ), - MaxEta = cms.double( 2.5 ), - MinEta = cms.double( -1.0 ), - MinMass = cms.double( -1.0 ), - inputTag = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), - MinE = cms.double( -1.0 ), - triggerType = cms.int32( 84 ), - MaxMass = cms.double( -1.0 ) -) -fragment.hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch = cms.EDProducer( "L1THLTTauMatching", - JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), - EtMin = cms.double( 0.0 ), - L1TauTrigger = cms.InputTag( "hltL1sBigORLooseIsoEGXXerIsoTauYYerdRMin0p3" ) -) -fragment.hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched = cms.EDFilter( "HLT1PFTau", - saveTags = cms.bool( True ), - MinPt = cms.double( 30.0 ), - MinN = cms.int32( 1 ), - MaxEta = cms.double( 2.1 ), - MinEta = cms.double( -1.0 ), - MinMass = cms.double( -1.0 ), - inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch" ), - MinE = cms.double( -1.0 ), - triggerType = cms.int32( 84 ), - MaxMass = cms.double( -1.0 ) -) -fragment.hltHpsOverlapFilterIsoEle24WPTightGsfMediumIsoPFTau30 = cms.EDFilter( "HLT2PhotonPFTau", - saveTags = cms.bool( True ), - MinMinv = cms.double( 0.0 ), - originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackFindingMediumChargedIsolation' ), - MinDelR = cms.double( 0.3 ), - MinPt = cms.double( 1.0 ), - MinN = cms.int32( 1 ), - originTag1 = cms.VInputTag( 'hltEgammaCandidates' ), - triggerType1 = cms.int32( 81 ), - triggerType2 = cms.int32( 84 ), - MaxMinv = cms.double( -1.0 ), - MinDeta = cms.double( 0.0 ), - MaxDelR = cms.double( 99999.0 ), - inputTag1 = cms.InputTag( "hltEle24erWPTightGsfTrackIsoFilterForTau" ), - inputTag2 = cms.InputTag( "hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched" ), - MaxDphi = cms.double( -1.0 ), - MaxDeta = cms.double( -1.0 ), - MaxPt = cms.double( -1.0 ), - MinDphi = cms.double( 0.0 ) -) -fragment.hltPreEle24eta2p1WPTightGsfTightChargedIsoPFTauHPS30eta2p1CrossL1 = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltHpsPFTauTightAbsoluteChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 3.2 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), - rhoProducer = cms.InputTag( "NotUsed" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.03 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), WeightECALIsolation = cms.double( 0.33333 ), - applyRelativeSumPtCut = cms.bool( False ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauTightRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -32941,10 +32904,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -32954,7 +32917,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -32979,15 +32942,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 70.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -33116,10 +33080,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -33129,7 +33093,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( True ), @@ -33154,15 +33118,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsSelectedPFTausTrackFindingLooseChargedIsolationTightOOSCPhotons = cms.EDFilter( "PFTauSelector", discriminators = cms.VPSet( @@ -34072,14 +34037,6 @@ useEt = cms.bool( True ), rhoScale = cms.double( 1.0 ) ) -fragment.hltRegionalTowerForMuonsReg = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( "hltIterL3MuonCandidates" ), - EMin = cms.double( 0.0 ), - EtMin = cms.double( 0.0 ), - L1IsoCand = cms.InputTag( "hltIterL3MuonCandidates" ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForHCAL" ) -) fragment.hltMuonHcalRegPFClusterIsoForMuons = cms.EDProducer( "MuonHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.227, 0.372 ), useHF = cms.bool( False ), @@ -36786,7 +36743,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 20.0, 20.0, 20.0, 20.0, 20.0, 20.0 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -36902,6 +36860,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -37307,10 +37266,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -37320,7 +37279,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 0.33333 ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -37345,15 +37304,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 0.33333 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauMediumRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -37399,10 +37359,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -37412,7 +37372,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -37437,15 +37397,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauMediumAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -37562,10 +37523,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -37575,7 +37536,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( True ), @@ -37600,15 +37561,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauMediumChargedIsolationAndTightOOSCPhotonsDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -37725,10 +37687,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -37738,7 +37700,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 0.33333 ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -37763,15 +37725,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 0.33333 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -37817,10 +37780,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -37830,7 +37793,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -37855,15 +37818,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 70.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -38586,10 +38550,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -38599,7 +38563,264 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), + applyRelativeSumPtCut = cms.bool( False ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), WeightECALIsolation = cms.double( 0.33333 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 0.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 0.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) +) +fragment.hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 2.0 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( False ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.04 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.5 ), + applyRelativeSumPtCut = cms.bool( True ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), + WeightECALIsolation = cms.double( 1.0 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 1.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 70.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) +) +fragment.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", + Prediscriminants = cms.PSet( + BooleanOperator = cms.string( "or" ), + discr1 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauTightAbsoluteChargedIsolationDiscriminatorReg" ) + ), + discr2 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg" ) + ) + ), + FailValue = cms.double( 0.0 ), + PassValue = cms.double( 1.0 ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ) +) +fragment.hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg = cms.EDFilter( "PFTauSelector", + discriminators = cms.VPSet( + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackPt1DiscriminatorReg" ), + selectionCut = cms.double( 0.5 ) + ), + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg" ), + selectionCut = cms.double( 0.5 ) + ) + ), + discriminatorContainers = cms.VPSet( + ), + cut = cms.string( "pt > 0" ), + src = cms.InputTag( "hltHpsPFTauProducerReg" ) +) +fragment.hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg = cms.EDProducer( "L1THLTTauMatching", + JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg" ), + EtMin = cms.double( 0.0 ), + L1TauTrigger = cms.InputTag( "hltL1sBigOrMuXXerIsoTauYYer" ) +) +fragment.hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg = cms.EDFilter( "HLT1PFTau", + saveTags = cms.bool( True ), + MinPt = cms.double( 35.0 ), + MinN = cms.int32( 1 ), + MaxEta = cms.double( 2.1 ), + MinEta = cms.double( -1.0 ), + MinMass = cms.double( -1.0 ), + inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg" ), + MinE = cms.double( -1.0 ), + triggerType = cms.int32( 84 ), + MaxMass = cms.double( -1.0 ) +) +fragment.hltHpsOverlapFilterIsoMu24TightChargedIsoPFTau35MonitoringReg = cms.EDFilter( "HLT2MuonPFTau", + saveTags = cms.bool( True ), + MinMinv = cms.double( 0.0 ), + originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg' ), + MinDelR = cms.double( 0.3 ), + MinPt = cms.double( 1.0 ), + MinN = cms.int32( 1 ), + originTag1 = cms.VInputTag( 'hltIterL3MuonCandidates' ), + triggerType1 = cms.int32( 83 ), + triggerType2 = cms.int32( 84 ), + MaxMinv = cms.double( -1.0 ), + MinDeta = cms.double( 1.0 ), + MaxDelR = cms.double( 99999.0 ), + inputTag1 = cms.InputTag( "hltL3crIsoL1sBigOrMuXXerIsoTauYYerL1f0L2f10QL3f24QL3trkIsoFiltered0p07" ), + inputTag2 = cms.InputTag( "hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg" ), + MaxDphi = cms.double( -1.0 ), + MaxDeta = cms.double( -1.0 ), + MaxPt = cms.double( -1.0 ), + MinDphi = cms.double( 0.0 ) +) +fragment.hltPreIsoMu24eta2p1MediumChargedIsoPFTauHPS35Trk1TightIDeta2p1RegCrossL1 = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +fragment.hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 3.7 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( True ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "NotUsed" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.03 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -38624,270 +38845,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) -) -fragment.hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 2.0 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), - rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.04 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), - applyRelativeSumPtCut = cms.bool( True ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 70.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) -) -fragment.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", - Prediscriminants = cms.PSet( - BooleanOperator = cms.string( "or" ), - discr1 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauTightAbsoluteChargedIsolationDiscriminatorReg" ) - ), - discr2 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg" ) - ) - ), - FailValue = cms.double( 0.0 ), - PassValue = cms.double( 1.0 ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ) -) -fragment.hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg = cms.EDFilter( "PFTauSelector", - discriminators = cms.VPSet( - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackPt1DiscriminatorReg" ), - selectionCut = cms.double( 0.5 ) - ), - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg" ), - selectionCut = cms.double( 0.5 ) - ) - ), - discriminatorContainers = cms.VPSet( - ), - cut = cms.string( "pt > 0" ), - src = cms.InputTag( "hltHpsPFTauProducerReg" ) -) -fragment.hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg = cms.EDProducer( "L1THLTTauMatching", - JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg" ), - EtMin = cms.double( 0.0 ), - L1TauTrigger = cms.InputTag( "hltL1sBigOrMuXXerIsoTauYYer" ) -) -fragment.hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg = cms.EDFilter( "HLT1PFTau", - saveTags = cms.bool( True ), - MinPt = cms.double( 35.0 ), - MinN = cms.int32( 1 ), - MaxEta = cms.double( 2.1 ), - MinEta = cms.double( -1.0 ), - MinMass = cms.double( -1.0 ), - inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg" ), - MinE = cms.double( -1.0 ), - triggerType = cms.int32( 84 ), - MaxMass = cms.double( -1.0 ) -) -fragment.hltHpsOverlapFilterIsoMu24TightChargedIsoPFTau35MonitoringReg = cms.EDFilter( "HLT2MuonPFTau", - saveTags = cms.bool( True ), - MinMinv = cms.double( 0.0 ), - originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg' ), - MinDelR = cms.double( 0.3 ), - MinPt = cms.double( 1.0 ), - MinN = cms.int32( 1 ), - originTag1 = cms.VInputTag( 'hltIterL3MuonCandidates' ), - triggerType1 = cms.int32( 83 ), - triggerType2 = cms.int32( 84 ), - MaxMinv = cms.double( -1.0 ), - MinDeta = cms.double( 1.0 ), - MaxDelR = cms.double( 99999.0 ), - inputTag1 = cms.InputTag( "hltL3crIsoL1sBigOrMuXXerIsoTauYYerL1f0L2f10QL3f24QL3trkIsoFiltered0p07" ), - inputTag2 = cms.InputTag( "hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg" ), - MaxDphi = cms.double( -1.0 ), - MaxDeta = cms.double( -1.0 ), - MaxPt = cms.double( -1.0 ), - MinDphi = cms.double( 0.0 ) -) -fragment.hltPreIsoMu24eta2p1MediumChargedIsoPFTauHPS35Trk1TightIDeta2p1RegCrossL1 = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 3.7 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), - rhoProducer = cms.InputTag( "NotUsed" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.03 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), WeightECALIsolation = cms.double( 0.33333 ), - applyRelativeSumPtCut = cms.bool( False ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauMediumRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -38933,10 +38900,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -38946,7 +38913,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -38971,15 +38938,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -39041,10 +39009,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -39054,7 +39022,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( True ), @@ -39079,15 +39047,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauMediumChargedIsolationAndTightOOSCPhotonsDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -59816,10 +59785,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAllCaloForMuons" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -59829,7 +59798,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -59854,15 +59823,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -59908,10 +59878,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -59921,7 +59891,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -59946,15 +59916,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -76391,8 +76362,8 @@ L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), offset = cms.uint32( 0 ) ) -fragment.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 = cms.EDFilter( "HLTL1TSeed", - L1SeedsLogicalExpression = cms.string( "L1_HTT200er OR L1_HTT255er OR L1_HTT280er OR L1_HTT320er OR L1_HTT360er OR L1_ETT2000 OR L1_HTT400er OR L1_HTT450er OR L1_SingleJet180 OR L1_SingleJet200 OR L1_DoubleJet30er2p5_Mass_Min300_dEta_Max1p5 OR L1_DoubleJet30er2p5_Mass_Min330_dEta_Max1p5 OR L1_DoubleJet30er2p5_Mass_Min360_dEta_Max1p5" ), +fragment.hltL1sDSTRun3PFScoutingPixelTracking = cms.EDFilter( "HLTL1TSeed", + L1SeedsLogicalExpression = cms.string( "L1GlobalDecision" ), L1EGammaInputTag = cms.InputTag( 'hltGtStage2Digis','EGamma' ), L1JetInputTag = cms.InputTag( 'hltGtStage2Digis','Jet' ), saveTags = cms.bool( True ), @@ -76402,383 +76373,2466 @@ L1MuonInputTag = cms.InputTag( 'hltGtStage2Digis','Muon' ), L1GlobalInputTag = cms.InputTag( "hltGtStage2Digis" ) ) -fragment.hltPreDSTHT250CaloScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltHT250 = cms.EDFilter( "HLTHtMhtFilter", - saveTags = cms.bool( True ), - mhtLabels = cms.VInputTag( 'hltHtMht' ), - meffSlope = cms.vdouble( 1.0 ), - minHt = cms.vdouble( 250.0 ), - minMht = cms.vdouble( 0.0 ), - htLabels = cms.VInputTag( 'hltHtMht' ), - minMeff = cms.vdouble( 0.0 ) -) -fragment.hltPreDSTHT250CaloBTagScouting = cms.EDFilter( "HLTPrescaler", +fragment.hltPreDSTRun3PFScoutingPixelTracking = cms.EDFilter( "HLTPrescaler", L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), offset = cms.uint32( 0 ) ) -fragment.hltPixelTracksForNoPUFilter = cms.EDProducer( "PixelTrackFilterByKinematicsProducer", - nSigmaTipMaxTolerance = cms.double( 0.0 ), - chi2 = cms.double( 1000.0 ), - nSigmaInvPtTolerance = cms.double( 0.0 ), - ptMin = cms.double( 0.0 ), - tipMax = cms.double( 999.0 ) -) -fragment.hltSelectorJets20L1FastJetForNoPU = cms.EDFilter( "EtMinCaloJetSelector", - filter = cms.bool( False ), - src = cms.InputTag( "hltAK4CaloJetsCorrectedIDPassed" ), - etMin = cms.double( 20.0 ) -) -fragment.hltPixelTracksForNoPUFitter = cms.EDProducer( "PixelFitterByHelixProjectionsProducer", - scaleErrorsForBPix1 = cms.bool( False ), - scaleFactor = cms.double( 0.65 ) -) -fragment.hltPixelTracksTrackingRegionsForNoPU = cms.EDProducer( "TauRegionalPixelSeedTrackingRegionEDProducer", - RegionPSet = cms.PSet( - JetSrc = cms.InputTag( "hltSelectorJets20L1FastJetForNoPU" ), - vertexSrc = cms.InputTag( "hltFastPVPixelVertices" ), - ptMin = cms.double( 0.5 ), - howToUseMeasurementTracker = cms.string( "Never" ), - deltaEtaRegion = cms.double( 0.5 ), - originHalfLength = cms.double( 0.5 ), - searchOpt = cms.bool( False ), - originRadius = cms.double( 0.1 ), - measurementTrackerName = cms.InputTag( "MeasurementTrackerEvent" ), - deltaPhiRegion = cms.double( 0.5 ) - ) -) -fragment.hltPixelTracksHitDoubletsForNoPU = cms.EDProducer( "HitPairEDProducer", - trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsForNoPU" ), - layerPairs = cms.vuint32( 0, 1, 2 ), - clusterCheck = cms.InputTag( "" ), - produceSeedingHitSets = cms.bool( False ), - produceIntermediateHitDoublets = cms.bool( True ), - trackingRegionsSeedingLayers = cms.InputTag( "" ), - maxElementTotal = cms.uint32( 50000000 ), - maxElement = cms.uint32( 0 ), - seedingLayers = cms.InputTag( "hltPixelLayerQuadrupletsRegForBTag" ) -) -fragment.hltPixelTracksHitQuadrupletsForNoPU = cms.EDProducer( "CAHitQuadrupletEDProducer", - CAHardPtCut = cms.double( 0.0 ), - CAPhiCut_byTriplets = cms.VPSet( - cms.PSet( seedingLayers = cms.string( "" ), - cut = cms.double( -1.0 ) - ) - ), - extraHitRPhitolerance = cms.double( 0.032 ), - doublets = cms.InputTag( "hltPixelTracksHitDoubletsForNoPU" ), - fitFastCircle = cms.bool( True ), - maxChi2 = cms.PSet( - value2 = cms.double( 50.0 ), - value1 = cms.double( 200.0 ), - pt1 = cms.double( 0.7 ), - enabled = cms.bool( True ), - pt2 = cms.double( 2.0 ) - ), - CAThetaCut = cms.double( 0.002 ), - SeedComparitorPSet = cms.PSet( - clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), - ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), - clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersRegForBTagCache" ) - ), - CAThetaCut_byTriplets = cms.VPSet( - cms.PSet( seedingLayers = cms.string( "" ), - cut = cms.double( -1.0 ) +fragment.hltPixelTracksZetaClean = cms.EDProducer( "TrackWithVertexSelector", + normalizedChi2 = cms.double( 999999.0 ), + numberOfValidHits = cms.uint32( 0 ), + zetaVtx = cms.double( 0.3 ), + etaMin = cms.double( 0.0 ), + rhoVtx = cms.double( 0.2 ), + ptErrorCut = cms.double( 5.0 ), + dzMax = cms.double( 999.0 ), + etaMax = cms.double( 5.0 ), + quality = cms.string( "any" ), + copyTrajectories = cms.untracked.bool( False ), + nSigmaDtVertex = cms.double( 0.0 ), + timesTag = cms.InputTag( "" ), + ptMin = cms.double( 0.3 ), + ptMax = cms.double( 500.0 ), + d0Max = cms.double( 999.0 ), + copyExtras = cms.untracked.bool( False ), + nVertices = cms.uint32( 2 ), + vertexTag = cms.InputTag( "hltPixelVertices" ), + src = cms.InputTag( "hltPixelTracks" ), + vtxFallback = cms.bool( True ), + numberOfLostHits = cms.uint32( 999 ), + numberOfValidPixelHits = cms.uint32( 3 ), + timeResosTag = cms.InputTag( "" ), + useVtx = cms.bool( True ) +) +fragment.hltPixelOnlyPFMuonMerging = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIterL3MuonTracks','hltPixelTracksZetaClean' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) ) ), - CAPhiCut = cms.double( 0.2 ), - useBendingCorrection = cms.bool( True ), - fitFastCircleChi2Cut = cms.bool( True ) -) -fragment.hltPixelTracksForNoPU = cms.EDProducer( "PixelTrackProducer", - Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), - passLabel = cms.string( "" ), - Fitter = cms.InputTag( "hltPixelTracksForNoPUFitter" ), - Filter = cms.InputTag( "hltPixelTracksForNoPUFilter" ), - SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsForNoPU" ) -) -fragment.hltCaloJetFromPV = cms.EDProducer( "PixelJetPuId", - MinEtaForwardJets = cms.double( 2.4 ), - MinTrackPt = cms.double( 0.6 ), - primaryVertex = cms.InputTag( "hltFastPVPixelVertices" ), - MinEtForwardJets = cms.double( 40.0 ), - MinGoodJetTrackPtRatio = cms.double( 0.045 ), - MaxTrackDistanceToJet = cms.double( 0.04 ), - UseForwardJetsAsNoPU = cms.bool( True ), - MinGoodJetTrackPt = cms.double( 1.8 ), - tracks = cms.InputTag( "hltPixelTracksForNoPU" ), - MaxTrackChi2 = cms.double( 20.0 ), - jets = cms.InputTag( "hltSelectorJets20L1FastJetForNoPU" ) -) -fragment.hltPreDSTHT410PFScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltHT410 = cms.EDFilter( "HLTHtMhtFilter", - saveTags = cms.bool( True ), - mhtLabels = cms.VInputTag( 'hltHtMht' ), - meffSlope = cms.vdouble( 1.0 ), - minHt = cms.vdouble( 410.0 ), - minMht = cms.vdouble( 0.0 ), - htLabels = cms.VInputTag( 'hltHtMht' ), - minMeff = cms.vdouble( 0.0 ) -) -fragment.hltPreDSTHT410BTagScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltPreDSTZeroBiasBTagScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltPreDSTZeroBiasCaloScoutingPFScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltPreDSTCaloJet40BTagScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltPreDSTCaloJet40CaloScoutingPFScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltPreDSTCaloJet40CaloBTagScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltPreDSTL1HTTBTagScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltPreDSTL1HTTCaloScoutingPFScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltPreDSTL1HTTCaloBTagScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltL1sDoubleMuIorTripleMuIorQuadMu = cms.EDFilter( "HLTL1TSeed", - L1SeedsLogicalExpression = cms.string( "L1_DoubleMu4p5er2p0_SQ_OS_Mass_Min7 OR L1_DoubleMu_12_5 OR L1_DoubleMu_15_7 OR L1_TripleMu_5_3_3 OR L1_TripleMu_5_5_3 OR L1_QuadMu0 OR L1_DoubleMu0er1p5_SQ_OS_dR_Max1p4 OR L1_DoubleMu4p5er2p0_SQ_OS_Mass7to18 OR L1_DoubleMu4_SQ_OS_dR_Max1p2 OR L1_SingleMu22 OR L1_DoubleMu0er1p4_SQ_OS_dR_Max1p4 OR L1_DoubleMu4p5_SQ_OS_dR_Max1p2 OR L1_DoubleMu4p5_SQ_OS OR L1_DoubleMu0er1p5_SQ_dR_Max1p4 OR L1_DoubleMu0er2p0_SQ_dR_Max1p4 OR L1_DoubleMu0_SQ" ), - L1EGammaInputTag = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - L1JetInputTag = cms.InputTag( 'hltGtStage2Digis','Jet' ), - saveTags = cms.bool( True ), - L1ObjectMapInputTag = cms.InputTag( "hltGtStage2ObjectMap" ), - L1EtSumInputTag = cms.InputTag( 'hltGtStage2Digis','EtSum' ), - L1TauInputTag = cms.InputTag( 'hltGtStage2Digis','Tau' ), - L1MuonInputTag = cms.InputTag( 'hltGtStage2Digis','Muon' ), - L1GlobalInputTag = cms.InputTag( "hltGtStage2Digis" ) -) -fragment.hltPreDSTL1DoubleMuBTagScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltPreDSTL1DoubleMuCaloScoutingPFScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltL1sHTT200to500IorSingleJet180to200 = cms.EDFilter( "HLTL1TSeed", - L1SeedsLogicalExpression = cms.string( "L1_HTT200er OR L1_HTT255er OR L1_HTT280er OR L1_HTT320er OR L1_HTT360er OR L1_ETT2000 OR L1_HTT400er OR L1_HTT450er OR L1_SingleJet180 OR L1_SingleJet200" ), - L1EGammaInputTag = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - L1JetInputTag = cms.InputTag( 'hltGtStage2Digis','Jet' ), - saveTags = cms.bool( True ), - L1ObjectMapInputTag = cms.InputTag( "hltGtStage2ObjectMap" ), - L1EtSumInputTag = cms.InputTag( 'hltGtStage2Digis','EtSum' ), - L1TauInputTag = cms.InputTag( 'hltGtStage2Digis','Tau' ), - L1MuonInputTag = cms.InputTag( 'hltGtStage2Digis','Muon' ), - L1GlobalInputTag = cms.InputTag( "hltGtStage2Digis" ) -) -fragment.hltPreDSTDoubleMu3noVtxCaloScoutingMonitoring = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltRecHitInRegionForMuonsMFnoVtx = cms.EDProducer( "MuonHLTRechitInRegionsProducer", - l1LowerThr = cms.double( 0.0 ), - doIsolated = cms.bool( True ), - useUncalib = cms.bool( False ), - regionEtaMargin = cms.double( 0.4 ), - ecalhitLabels = cms.VInputTag( 'hltEcalRecHit:EcalRecHitsEB','hltEcalRecHit:EcalRecHitsEE' ), - regionPhiMargin = cms.double( 0.4 ), - l1TagNonIsolated = cms.InputTag( "NotUsed" ), - l1UpperThr = cms.double( 999.0 ), - l1LowerThrIgnoreIsolation = cms.double( 100.0 ), - productLabels = cms.vstring( 'EcalRegionalRecHitsEB', - 'EcalRegionalRecHitsEE' ), - l1TagIsolated = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ) + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIterL3MuonTracks','hltPixelTracksZetaClean' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) ) -fragment.hltRecHitInRegionForMuonsESNoVtx = cms.EDProducer( "MuonHLTRechitInRegionsProducer", - l1LowerThr = cms.double( 0.0 ), - doIsolated = cms.bool( True ), - useUncalib = cms.bool( False ), - regionEtaMargin = cms.double( 0.4 ), - ecalhitLabels = cms.VInputTag( 'hltEcalPreshowerRecHit:EcalRecHitsES' ), - regionPhiMargin = cms.double( 0.4 ), - l1TagNonIsolated = cms.InputTag( "NotUsed" ), - l1UpperThr = cms.double( 999.0 ), - l1LowerThrIgnoreIsolation = cms.double( 100.0 ), - productLabels = cms.vstring( 'EcalRegionalRecHitsES' ), - l1TagIsolated = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ) +fragment.hltPixelOnlyMuonLinks = cms.EDProducer( "MuonLinksProducerForHLT", + pMin = cms.double( 2.5 ), + InclusiveTrackerTrackCollection = cms.InputTag( "hltPixelOnlyPFMuonMerging" ), + shareHitFraction = cms.double( 0.8 ), + LinkCollection = cms.InputTag( "hltL3MuonsIterL3Links" ), + ptMin = cms.double( 2.5 ) ) -fragment.hltParticleFlowRecHitECALForMuonsMFNoVtx = cms.EDProducer( "PFRecHitProducer", - producers = cms.VPSet( - cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsMFnoVtx','EcalRegionalRecHitsEB' ), - srFlags = cms.InputTag( "" ), - name = cms.string( "PFEBRecHitCreator" ), - qualityTests = cms.VPSet( - cms.PSet( name = cms.string( "PFRecHitQTestDBThreshold" ), - applySelectionsToAllCrystals = cms.bool( True ) - ), - cms.PSet( topologicalCleaning = cms.bool( True ), - skipTTRecoveredHits = cms.bool( True ), - cleaningThreshold = cms.double( 2.0 ), - name = cms.string( "PFRecHitQTestECAL" ), - timingCleaning = cms.bool( True ) - ) - ) - ), - cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsMFnoVtx','EcalRegionalRecHitsEE' ), - srFlags = cms.InputTag( "" ), - name = cms.string( "PFEERecHitCreator" ), - qualityTests = cms.VPSet( - cms.PSet( name = cms.string( "PFRecHitQTestDBThreshold" ), - applySelectionsToAllCrystals = cms.bool( True ) - ), - cms.PSet( topologicalCleaning = cms.bool( True ), - skipTTRecoveredHits = cms.bool( True ), - cleaningThreshold = cms.double( 2.0 ), - name = cms.string( "PFRecHitQTestECAL" ), - timingCleaning = cms.bool( True ) - ) - ) - ) +fragment.hltPixelOnlyMuons = cms.EDProducer( "MuonIdProducer", + TrackExtractorPSet = cms.PSet( + Diff_z = cms.double( 0.2 ), + inputTrackCollection = cms.InputTag( "hltPixelOnlyPFMuonMerging" ), + Chi2Ndof_Max = cms.double( 1.0E64 ), + BeamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), + DR_Veto = cms.double( 0.01 ), + Pt_Min = cms.double( -1.0 ), + DR_Max = cms.double( 1.0 ), + DepositLabel = cms.untracked.string( "" ), + NHits_Min = cms.uint32( 0 ), + Chi2Prob_Min = cms.double( -1.0 ), + Diff_r = cms.double( 0.1 ), + BeamlineOption = cms.string( "BeamSpotFromEvent" ), + ComponentName = cms.string( "TrackExtractor" ) ), - navigator = cms.PSet( - barrel = cms.PSet( ), - endcap = cms.PSet( ), - name = cms.string( "PFRecHitECALNavigator" ) - ) -) -fragment.hltParticleFlowRecHitPSForMuonsNoVtx = cms.EDProducer( "PFRecHitProducer", - producers = cms.VPSet( - cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsESNoVtx','EcalRegionalRecHitsES' ), - name = cms.string( "PFPSRecHitCreator" ), - qualityTests = cms.VPSet( - cms.PSet( threshold = cms.double( 7.0E-6 ), - name = cms.string( "PFRecHitQTestThreshold" ) - ) - ) - ) + maxAbsEta = cms.double( 3.0 ), + fillGlobalTrackRefits = cms.bool( False ), + arbitrationCleanerOptions = cms.PSet( + OverlapDTheta = cms.double( 0.02 ), + Overlap = cms.bool( True ), + Clustering = cms.bool( True ), + ME1a = cms.bool( True ), + ClusterDTheta = cms.double( 0.02 ), + ClusterDPhi = cms.double( 0.6 ), + OverlapDPhi = cms.double( 0.0786 ) ), - navigator = cms.PSet( name = cms.string( "PFRecHitPreshowerNavigator" ) ) -) -fragment.hltParticleFlowClusterECALUncorrectedForMuonsMFNoVtx = cms.EDProducer( "PFClusterProducer", - pfClusterBuilder = cms.PSet( - minFracTot = cms.double( 1.0E-20 ), - stoppingTolerance = cms.double( 1.0E-8 ), - positionCalc = cms.PSet( - minAllowedNormalization = cms.double( 1.0E-9 ), - posCalcNCrystals = cms.int32( 9 ), - algoName = cms.string( "Basic2DGenericPFlowPositionCalc" ), - logWeightDenominator = cms.double( 0.08 ), - minFractionInCalc = cms.double( 1.0E-9 ), - timeResolutionCalcBarrel = cms.PSet( - corrTermLowE = cms.double( 0.0510871 ), - threshLowE = cms.double( 0.5 ), - noiseTerm = cms.double( 1.10889 ), - constantTermLowE = cms.double( 0.0 ), - noiseTermLowE = cms.double( 1.31883 ), - threshHighE = cms.double( 5.0 ), - constantTerm = cms.double( 0.428192 ) - ), - timeResolutionCalcEndcap = cms.PSet( - corrTermLowE = cms.double( 0.0 ), - threshLowE = cms.double( 1.0 ), - noiseTerm = cms.double( 5.72489999999 ), - constantTermLowE = cms.double( 0.0 ), - noiseTermLowE = cms.double( 6.92683000001 ), - threshHighE = cms.double( 10.0 ), - constantTerm = cms.double( 0.0 ) - ) - ), - maxIterations = cms.uint32( 50 ), - positionCalcForConvergence = cms.PSet( - minAllowedNormalization = cms.double( 0.0 ), - T0_ES = cms.double( 1.2 ), - algoName = cms.string( "ECAL2DPositionCalcWithDepthCorr" ), - T0_EE = cms.double( 3.1 ), - T0_EB = cms.double( 7.4 ), - X0 = cms.double( 0.89 ), - minFractionInCalc = cms.double( 0.0 ), - W0 = cms.double( 4.2 ) + globalTrackQualityInputTag = cms.InputTag( "glbTrackQual" ), + fillShowerDigis = cms.bool( False ), + addExtraSoftMuons = cms.bool( False ), + debugWithTruthMatching = cms.bool( False ), + CaloExtractorPSet = cms.PSet( + DR_Veto_H = cms.double( 0.1 ), + CenterConeOnCalIntersection = cms.bool( False ), + NoiseTow_EE = cms.double( 0.15 ), + Noise_EB = cms.double( 0.025 ), + Noise_HE = cms.double( 0.2 ), + DR_Veto_E = cms.double( 0.07 ), + NoiseTow_EB = cms.double( 0.04 ), + Noise_EE = cms.double( 0.1 ), + UseRecHitsFlag = cms.bool( False ), + DR_Max = cms.double( 1.0 ), + DepositLabel = cms.untracked.string( "Cal" ), + Noise_HO = cms.double( 0.2 ), + DR_Veto_HO = cms.double( 0.1 ), + Threshold_H = cms.double( 0.5 ), + PrintTimeReport = cms.untracked.bool( False ), + Threshold_E = cms.double( 0.2 ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "CaloExtractorByAssociator" ), + Threshold_HO = cms.double( 0.5 ), + DepositInstanceLabels = cms.vstring( 'ecal', + 'hcal', + 'ho' ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) ), - allCellsPositionCalc = cms.PSet( - minAllowedNormalization = cms.double( 1.0E-9 ), - posCalcNCrystals = cms.int32( -1 ), - algoName = cms.string( "Basic2DGenericPFlowPositionCalc" ), - logWeightDenominator = cms.double( 0.08 ), - minFractionInCalc = cms.double( 1.0E-9 ), - timeResolutionCalcBarrel = cms.PSet( - corrTermLowE = cms.double( 0.0510871 ), - threshLowE = cms.double( 0.5 ), - noiseTerm = cms.double( 1.10889 ), - constantTermLowE = cms.double( 0.0 ), - noiseTermLowE = cms.double( 1.31883 ), - threshHighE = cms.double( 5.0 ), - constantTerm = cms.double( 0.428192 ) - ), - timeResolutionCalcEndcap = cms.PSet( - corrTermLowE = cms.double( 0.0 ), - threshLowE = cms.double( 1.0 ), - noiseTerm = cms.double( 5.72489999999 ), - constantTermLowE = cms.double( 0.0 ), - noiseTermLowE = cms.double( 6.92683000001 ), - threshHighE = cms.double( 10.0 ), - constantTerm = cms.double( 0.0 ) - ) + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 1.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + CaloTowerCollectionLabel = cms.InputTag( "hltTowerMakerForAll" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "hltHbhereco" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 1.0 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + dRHcal = cms.double( 1.0 ), + dRHcalPreselection = cms.double( 1.0 ), + HORecHitCollectionLabel = cms.InputTag( "hltHoreco" ) ), - algoName = cms.string( "Basic2DGenericPFlowClusterizer" ), - recHitEnergyNorms = cms.VPSet( - cms.PSet( recHitEnergyNorm = cms.double( 0.08 ), - detector = cms.string( "ECAL_BARREL" ) + Noise_HB = cms.double( 0.2 ) + ), + runArbitrationCleaner = cms.bool( False ), + fillEnergy = cms.bool( True ), + TrackerKinkFinderParameters = cms.PSet( + usePosition = cms.bool( False ), + diagonalOnly = cms.bool( False ) + ), + TimingFillerParameters = cms.PSet( + DTTimingParameters = cms.PSet( + HitError = cms.double( 6.0 ), + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) ), - cms.PSet( recHitEnergyNorm = cms.double( 0.3 ), - detector = cms.string( "ECAL_ENDCAP" ) + debug = cms.bool( False ), + DoWireCorr = cms.bool( False ), + RequireBothProjections = cms.bool( False ), + DTTimeOffset = cms.double( 2.7 ), + PruneCut = cms.double( 10000.0 ), + DTsegments = cms.InputTag( "hltDt4DSegments" ), + UseSegmentT0 = cms.bool( False ), + HitsMin = cms.int32( 5 ), + DropTheta = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) ) ), - showerSigma = cms.double( 1.5 ), - minFractionToKeep = cms.double( 1.0E-7 ), - excludeOtherSeeds = cms.bool( True ) - ), - positionReCalc = cms.PSet( - minAllowedNormalization = cms.double( 0.0 ), - T0_ES = cms.double( 1.2 ), - algoName = cms.string( "ECAL2DPositionCalcWithDepthCorr" ), - T0_EE = cms.double( 3.1 ), - T0_EB = cms.double( 7.4 ), - X0 = cms.double( 0.89 ), - minFractionInCalc = cms.double( 0.0 ), - W0 = cms.double( 4.2 ) - ), - initialClusteringStep = cms.PSet( - thresholdsByDetector = cms.VPSet( - cms.PSet( gatheringThreshold = cms.double( 0.08 ), - gatheringThresholdPt = cms.double( 0.0 ), - detector = cms.string( "ECAL_BARREL" ) + UseCSC = cms.bool( True ), + CSCTimingParameters = cms.PSet( + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) ), - cms.PSet( gatheringThreshold = cms.double( 0.3 ), - gatheringThresholdPt = cms.double( 0.0 ), - detector = cms.string( "ECAL_ENDCAP" ) + debug = cms.bool( False ), + CSCWireTimeOffset = cms.double( 0.0 ), + CSCStripError = cms.double( 7.0 ), + CSCTimeOffset = cms.double( 0.0 ), + CSCWireError = cms.double( 8.6 ), + PruneCut = cms.double( 100.0 ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + UseStripTime = cms.bool( True ), + CSCStripTimeOffset = cms.double( 0.0 ), + UseWireTime = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) ) ), - algoName = cms.string( "Basic2DGenericTopoClusterizer" ), - useCornerCells = cms.bool( True ) - ), - seedCleaners = cms.VPSet( + ErrorDT = cms.double( 6.0 ), + EcalEnergyCut = cms.double( 0.4 ), + UseECAL = cms.bool( True ), + ErrorEB = cms.double( 2.085 ), + UseDT = cms.bool( True ), + ErrorEE = cms.double( 6.95 ), + ErrorCSC = cms.double( 7.4 ) ), - energyCorrector = cms.PSet( ), + inputCollectionTypes = cms.vstring( 'inner tracks', + 'links', + 'outer tracks' ), + arbitrateTrackerMuons = cms.bool( False ), + minCaloCompatibility = cms.double( 0.6 ), + ecalDepositName = cms.string( "ecal" ), + minP = cms.double( 10.0 ), + fillIsolation = cms.bool( True ), + jetDepositName = cms.string( "jets" ), + hoDepositName = cms.string( "ho" ), + writeIsoDeposits = cms.bool( False ), + maxAbsPullX = cms.double( 4.0 ), + maxAbsPullY = cms.double( 9999.0 ), + minPt = cms.double( 10.0 ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( True ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( True ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 9999.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + CaloTowerCollectionLabel = cms.InputTag( "hltTowerMakerForAll" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( True ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( True ), + HBHERecHitCollectionLabel = cms.InputTag( "hltHbhereco" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.05 ), + useCalo = cms.bool( False ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + dRHcal = cms.double( 9999.0 ), + dRHcalPreselection = cms.double( 0.2 ), + HORecHitCollectionLabel = cms.InputTag( "hltHoreco" ) + ), + storeCrossedHcalRecHits = cms.bool( False ), + JetExtractorPSet = cms.PSet( + JetCollectionLabel = cms.InputTag( "hltAK4CaloJetsPFEt5" ), + DR_Veto = cms.double( 0.1 ), + DR_Max = cms.double( 1.0 ), + ExcludeMuonVeto = cms.bool( True ), + PrintTimeReport = cms.untracked.bool( False ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "JetExtractor" ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 0.5 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + CaloTowerCollectionLabel = cms.InputTag( "hltTowerMakerForAll" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "hltHbhereco" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.5 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + dRHcal = cms.double( 0.5 ), + dRHcalPreselection = cms.double( 0.5 ), + HORecHitCollectionLabel = cms.InputTag( "hltHoreco" ) + ), + Threshold = cms.double( 5.0 ) + ), + fillGlobalTrackQuality = cms.bool( False ), + minPCaloMuon = cms.double( 1.0E9 ), + maxAbsDy = cms.double( 9999.0 ), + fillCaloCompatibility = cms.bool( True ), + fillMatching = cms.bool( True ), + MuonCaloCompatibility = cms.PSet( + delta_eta = cms.double( 0.02 ), + delta_phi = cms.double( 0.02 ), + allSiPMHO = cms.bool( False ), + MuonTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_muons_lowPt_3_1_norm.root" ), + PionTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_pions_lowPt_3_1_norm.root" ) + ), + fillTrackerKink = cms.bool( False ), + ShowerDigiFillerParameters = cms.PSet( + cscDigiCollectionLabel = cms.InputTag( 'muonCSCDigis','MuonCSCStripDigi' ), + dtDigiCollectionLabel = cms.InputTag( "muonDTDigis" ), + digiMaxDistanceX = cms.double( 25.0 ) + ), + hcalDepositName = cms.string( "hcal" ), + sigmaThresholdToFillCandidateP4WithGlobalFit = cms.double( 2.0 ), + inputCollectionLabels = cms.VInputTag( 'hltPixelOnlyPFMuonMerging','hltPixelOnlyMuonLinks','hltL2Muons' ), + trackDepositName = cms.string( "tracker" ), + maxAbsDx = cms.double( 3.0 ), + ptThresholdToFillCandidateP4WithGlobalFit = cms.double( 200.0 ), + minNumberOfMatches = cms.int32( 1 ) +) +fragment.hltLightPixelOnlyPFTracks = cms.EDProducer( "LightPFTrackProducer", + TrackQuality = cms.string( "none" ), + UseQuality = cms.bool( False ), + TkColList = cms.VInputTag( 'hltPixelOnlyPFMuonMerging' ) +) +fragment.hltPixelOnlyParticleFlowBlock = cms.EDProducer( "PFBlockProducer", + debug = cms.untracked.bool( False ), + linkDefinitions = cms.VPSet( + cms.PSet( linkType = cms.string( "TRACK:ECAL" ), + useKDTree = cms.bool( True ), + linkerName = cms.string( "TrackAndECALLinker" ) + ), + cms.PSet( linkType = cms.string( "TRACK:HCAL" ), + useKDTree = cms.bool( True ), + linkerName = cms.string( "TrackAndHCALLinker" ), + trajectoryLayerEntrance = cms.string( "HCALEntrance" ), + trajectoryLayerExit = cms.string( "HCALExit" ), + nMaxHcalLinksPerTrack = cms.int32( 1 ) + ), + cms.PSet( linkType = cms.string( "ECAL:HCAL" ), + useKDTree = cms.bool( False ), + linkerName = cms.string( "ECALAndHCALLinker" ), + minAbsEtaEcal = cms.double( 2.5 ) + ), + cms.PSet( linkType = cms.string( "HFEM:HFHAD" ), + useKDTree = cms.bool( False ), + linkerName = cms.string( "HFEMAndHFHADLinker" ) + ) + ), + elementImporters = cms.VPSet( + cms.PSet( muonSrc = cms.InputTag( "hltPixelOnlyMuons" ), + source = cms.InputTag( "hltLightPixelOnlyPFTracks" ), + NHitCuts_byTrackAlgo = cms.vuint32( 3, 3, 3, 3, 3, 3 ), + useIterativeTracking = cms.bool( False ), + importerName = cms.string( "GeneralTracksImporter" ), + DPtOverPtCuts_byTrackAlgo = cms.vdouble( 5.0, 5.0, 5.0, 5.0, 5.0, 5.0 ), + muonMaxDPtOPt = cms.double( 1.0 ), + trackQuality = cms.string( "any" ), + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) + ), + cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), + importerName = cms.string( "ECALClusterImporter" ), + BCtoPFCMap = cms.InputTag( "" ) + ), + cms.PSet( source = cms.InputTag( "hltParticleFlowClusterHCAL" ), + importerName = cms.string( "GenericClusterImporter" ) + ), + cms.PSet( source = cms.InputTag( "hltParticleFlowClusterHF" ), + importerName = cms.string( "GenericClusterImporter" ) + ) + ), + verbose = cms.untracked.bool( False ) +) +fragment.hltPixelOnlyParticleFlow = cms.EDProducer( "PFProducer", + goodPixelTrackDeadHcal_maxLost3Hit = cms.int32( 0 ), + PFMuonAlgoParameters = cms.PSet( ), + calibHF_use = cms.bool( False ), + verbose = cms.untracked.bool( False ), + pf_nsigma_ECAL = cms.double( 0.0 ), + usePFConversions = cms.bool( False ), + GedPhotonValueMap = cms.InputTag( 'tmpGedPhotons','valMapPFEgammaCandToPhoton' ), + useCalibrationsFromDB = cms.bool( True ), + resolHF_square = cms.vdouble( 7.834401, 0.012996, 0.0 ), + goodPixelTrackDeadHcal_ptErrRel = cms.double( 1.0 ), + goodTrackDeadHcal_validFr = cms.double( 0.5 ), + postMuonCleaning = cms.bool( True ), + calibrationsLabel = cms.string( "HLT" ), + muon_HO = cms.vdouble( 0.9, 0.9 ), + postHFCleaning = cms.bool( False ), + factors_45 = cms.vdouble( 10.0, 100.0 ), + cleanedHF = cms.VInputTag( 'hltParticleFlowRecHitHF:Cleaned','hltParticleFlowClusterHF:Cleaned' ), + iCfgCandConnector = cms.PSet( + nuclCalibFactors = cms.vdouble( 0.8, 0.15, 0.5, 0.5, 0.05 ), + bCorrect = cms.bool( False ), + bCalibPrimary = cms.bool( False ) + ), + rejectTracks_Bad = cms.bool( False ), + vertexCollection = cms.InputTag( "hltPixelVertices" ), + egammaElectrons = cms.InputTag( "" ), + calibHF_a_EMonly = cms.vdouble( 0.96945, 0.96701, 0.76309, 0.82268, 0.87583, 0.89718, 0.98674, 1.4681, 1.458, 1.458 ), + dptRel_DispVtx = cms.double( 10.0 ), + muons = cms.InputTag( "hltPixelOnlyMuons" ), + calibHF_b_HADonly = cms.vdouble( 1.27541, 0.85361, 0.86333, 0.89091, 0.94348, 0.94348, 0.9437, 1.0034, 1.0444, 1.0444 ), + pf_nsigma_HCAL = cms.double( 1.0 ), + muon_ECAL = cms.vdouble( 0.5, 0.5 ), + goodPixelTrackDeadHcal_maxPt = cms.double( 50.0 ), + blocks = cms.InputTag( "hltPixelOnlyParticleFlowBlock" ), + goodTrackDeadHcal_ptErrRel = cms.double( 0.2 ), + useEGammaFilters = cms.bool( False ), + pf_nsigma_HFHAD = cms.double( 1.0 ), + useEGammaElectrons = cms.bool( False ), + useHO = cms.bool( False ), + nsigma_TRACK = cms.double( 1.0 ), + PFEGammaFiltersParameters = cms.PSet( + electron_protectionsForJetMET = cms.PSet( + maxE = cms.double( 50.0 ), + maxTrackPOverEele = cms.double( 1.0 ), + maxEcalEOverP_2 = cms.double( 0.2 ), + maxHcalEOverEcalE = cms.double( 0.1 ), + maxEcalEOverP_1 = cms.double( 0.5 ), + maxHcalEOverP = cms.double( 1.0 ), + maxEcalEOverPRes = cms.double( 0.2 ), + maxHcalE = cms.double( 10.0 ), + maxEeleOverPout = cms.double( 0.2 ), + maxNtracks = cms.double( 3.0 ), + maxEleHcalEOverEcalE = cms.double( 0.1 ), + maxDPhiIN = cms.double( 0.1 ), + maxEeleOverPoutRes = cms.double( 0.5 ) + ), + electron_maxElePtForOnlyMVAPresel = cms.double( 50.0 ), + photon_SigmaiEtaiEta_endcap = cms.double( 0.034 ), + electron_iso_combIso_endcap = cms.double( 10.0 ), + photon_protectionsForBadHcal = cms.PSet( + solidConeTrkIsoSlope = cms.double( 0.3 ), + enableProtections = cms.bool( False ), + solidConeTrkIsoOffset = cms.double( 10.0 ) + ), + electron_missinghits = cms.uint32( 1 ), + photon_MinEt = cms.double( 10.0 ), + electron_iso_pt = cms.double( 10.0 ), + electron_ecalDrivenHademPreselCut = cms.double( 0.15 ), + electron_iso_mva_endcap = cms.double( -0.1075 ), + electron_iso_combIso_barrel = cms.double( 10.0 ), + photon_protectionsForJetMET = cms.PSet( + sumPtTrackIsoSlope = cms.double( 0.001 ), + sumPtTrackIso = cms.double( 4.0 ) + ), + electron_protectionsForBadHcal = cms.PSet( + dEta = cms.vdouble( 0.0064, 0.01264 ), + dPhi = cms.vdouble( 0.0547, 0.0394 ), + enableProtections = cms.bool( False ), + eInvPInv = cms.vdouble( 0.184, 0.0721 ), + full5x5_sigmaIetaIeta = cms.vdouble( 0.0106, 0.0387 ) + ), + electron_noniso_mvaCut = cms.double( -0.1 ), + electron_iso_mva_barrel = cms.double( -0.1875 ), + photon_SigmaiEtaiEta_barrel = cms.double( 0.0125 ), + photon_combIso = cms.double( 10.0 ), + photon_HoE = cms.double( 0.05 ) + ), + goodPixelTrackDeadHcal_minEta = cms.double( 2.3 ), + useVerticesForNeutral = cms.bool( True ), + goodTrackDeadHcal_chi2n = cms.double( 5.0 ), + goodTrackDeadHcal_dxy = cms.double( 0.5 ), + goodPixelTrackDeadHcal_dz = cms.double( 0.05 ), + PFEGammaCandidates = cms.InputTag( "particleFlowEGamma" ), + pf_nsigma_HFEM = cms.double( 1.0 ), + usePFDecays = cms.bool( False ), + calibHF_b_EMHAD = cms.vdouble( 1.27541, 0.85361, 0.86333, 0.89091, 0.94348, 0.94348, 0.9437, 1.0034, 1.0444, 1.0444 ), + rejectTracks_Step45 = cms.bool( False ), + goodPixelTrackDeadHcal_maxLost4Hit = cms.int32( 1 ), + calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), + goodTrackDeadHcal_layers = cms.uint32( 4 ), + goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), + usePFNuclearInteractions = cms.bool( False ), + GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), + goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), + calibHF_a_EMHAD = cms.vdouble( 1.42215, 1.00496, 0.68961, 0.81656, 0.98504, 0.98504, 1.00802, 1.0593, 1.4576, 1.4576 ), + muon_HCAL = cms.vdouble( 3.0, 3.0 ), + pt_Error = cms.double( 1.0 ), + debug = cms.untracked.bool( False ), + useProtectionsForJetMET = cms.bool( True ), + PFHFCleaningParameters = cms.PSet( + minSignificance = cms.double( 2.5 ), + maxSignificance = cms.double( 2.5 ), + minDeltaMet = cms.double( 0.4 ), + maxDeltaPhiPt = cms.double( 7.0 ), + minHFCleaningPt = cms.double( 5.0 ), + minSignificanceReduction = cms.double( 1.4 ) + ) +) +fragment.hltAK4PixelOnlyPFJets = cms.EDProducer( "FastjetJetProducer", + Active_Area_Repeats = cms.int32( 5 ), + useMassDropTagger = cms.bool( False ), + doAreaFastjet = cms.bool( False ), + muMin = cms.double( -1.0 ), + Ghost_EtaMax = cms.double( 6.0 ), + maxBadHcalCells = cms.uint32( 9999999 ), + maxRecoveredHcalCells = cms.uint32( 9999999 ), + applyWeight = cms.bool( False ), + doAreaDiskApprox = cms.bool( True ), + subtractorName = cms.string( "" ), + dRMax = cms.double( -1.0 ), + useExplicitGhosts = cms.bool( False ), + puWidth = cms.double( 0.0 ), + maxRecoveredEcalCells = cms.uint32( 9999999 ), + R0 = cms.double( -1.0 ), + jetType = cms.string( "PFJet" ), + muCut = cms.double( -1.0 ), + subjetPtMin = cms.double( -1.0 ), + csRParam = cms.double( -1.0 ), + MinVtxNdof = cms.int32( 0 ), + minSeed = cms.uint32( 0 ), + voronoiRfact = cms.double( -9.0 ), + doRhoFastjet = cms.bool( False ), + jetAlgorithm = cms.string( "AntiKt" ), + writeCompound = cms.bool( False ), + muMax = cms.double( -1.0 ), + nSigmaPU = cms.double( 1.0 ), + GhostArea = cms.double( 0.01 ), + Rho_EtaMax = cms.double( 4.4 ), + restrictInputs = cms.bool( False ), + nExclude = cms.uint32( 0 ), + yMin = cms.double( -1.0 ), + srcWeights = cms.InputTag( "" ), + maxBadEcalCells = cms.uint32( 9999999 ), + jetCollInstanceName = cms.string( "" ), + useFiltering = cms.bool( False ), + maxInputs = cms.uint32( 1 ), + rFiltFactor = cms.double( -1.0 ), + useDeterministicSeed = cms.bool( True ), + doPVCorrection = cms.bool( False ), + rFilt = cms.double( -1.0 ), + yMax = cms.double( -1.0 ), + zcut = cms.double( -1.0 ), + useTrimming = cms.bool( False ), + puCenters = cms.vdouble( ), + MaxVtxZ = cms.double( 15.0 ), + rParam = cms.double( 0.4 ), + csRho_EtaMax = cms.double( -1.0 ), + UseOnlyVertexTracks = cms.bool( False ), + dRMin = cms.double( -1.0 ), + gridSpacing = cms.double( -1.0 ), + minimumTowersFraction = cms.double( 0.0 ), + doFastJetNonUniform = cms.bool( False ), + usePruning = cms.bool( False ), + maxDepth = cms.int32( -1 ), + yCut = cms.double( -1.0 ), + useSoftDrop = cms.bool( False ), + DzTrVtxMax = cms.double( 0.0 ), + UseOnlyOnePV = cms.bool( False ), + maxProblematicHcalCells = cms.uint32( 9999999 ), + correctShape = cms.bool( False ), + rcut_factor = cms.double( -1.0 ), + src = cms.InputTag( "hltPixelOnlyParticleFlow" ), + gridMaxRapidity = cms.double( -1.0 ), + sumRecHits = cms.bool( False ), + jetPtMin = cms.double( 0.0 ), + puPtMin = cms.double( 10.0 ), + useDynamicFiltering = cms.bool( False ), + verbosity = cms.int32( 0 ), + inputEtMin = cms.double( 0.0 ), + useConstituentSubtraction = cms.bool( False ), + beta = cms.double( -1.0 ), + trimPtFracMin = cms.double( -1.0 ), + radiusPU = cms.double( 0.4 ), + nFilt = cms.int32( -1 ), + useKtPruning = cms.bool( False ), + DxyTrVtxMax = cms.double( 0.0 ), + maxProblematicEcalCells = cms.uint32( 9999999 ), + srcPVs = cms.InputTag( "hltPixelVertices" ), + useCMSBoostedTauSeedingAlgorithm = cms.bool( False ), + doPUOffsetCorr = cms.bool( False ), + writeJetsWithConst = cms.bool( False ), + inputEMin = cms.double( 0.0 ) +) +fragment.hltAK4PixelOnlyPFJetsLooseID = cms.EDProducer( "HLTPFJetIDProducer", + CEF = cms.double( 0.99 ), + NHF = cms.double( 0.99 ), + minPt = cms.double( 20.0 ), + CHF = cms.double( 0.0 ), + jetsInput = cms.InputTag( "hltAK4PixelOnlyPFJets" ), + NEF = cms.double( 0.99 ), + NTOT = cms.int32( 1 ), + NCH = cms.int32( 0 ), + maxEta = cms.double( 1.0E99 ), + maxCF = cms.double( 99.0 ) +) +fragment.hltAK4PixelOnlyPFJetsTightID = cms.EDProducer( "HLTPFJetIDProducer", + CEF = cms.double( 0.99 ), + NHF = cms.double( 0.9 ), + minPt = cms.double( 20.0 ), + CHF = cms.double( 0.0 ), + jetsInput = cms.InputTag( "hltAK4PixelOnlyPFJets" ), + NEF = cms.double( 0.99 ), + NTOT = cms.int32( 1 ), + NCH = cms.int32( 0 ), + maxEta = cms.double( 1.0E99 ), + maxCF = cms.double( 99.0 ) +) +fragment.hltFixedGridRhoFastjetPixelOnlyAll = cms.EDProducer( "FixedGridRhoProducerFastjet", + gridSpacing = cms.double( 0.55 ), + pfCandidatesTag = cms.InputTag( "hltPixelOnlyParticleFlow" ), + maxRapidity = cms.double( 5.0 ) +) +fragment.hltAK4PixelOnlyPFFastJetCorrector = cms.EDProducer( "L1FastjetCorrectorProducer", + srcRho = cms.InputTag( "hltFixedGridRhoFastjetPixelOnlyAll" ), + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L1FastJet" ) +) +fragment.hltAK4PixelOnlyPFRelativeCorrector = cms.EDProducer( "LXXXCorrectorProducer", + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L2Relative" ) +) +fragment.hltAK4PixelOnlyPFAbsoluteCorrector = cms.EDProducer( "LXXXCorrectorProducer", + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L3Absolute" ) +) +fragment.hltAK4PixelOnlyPFResidualCorrector = cms.EDProducer( "LXXXCorrectorProducer", + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L2L3Residual" ) +) +fragment.hltAK4PixelOnlyPFCorrector = cms.EDProducer( "ChainedJetCorrectorProducer", + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFFastJetCorrector','hltAK4PixelOnlyPFRelativeCorrector','hltAK4PixelOnlyPFAbsoluteCorrector','hltAK4PixelOnlyPFResidualCorrector' ) +) +fragment.hltAK4PixelOnlyPFJetsCorrected = cms.EDProducer( "CorrectedPFJetProducer", + src = cms.InputTag( "hltAK4PixelOnlyPFJets" ), + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFCorrector' ) +) +fragment.hltAK4PixelOnlyPFJetsLooseIDCorrected = cms.EDProducer( "CorrectedPFJetProducer", + src = cms.InputTag( "hltAK4PixelOnlyPFJetsLooseID" ), + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFCorrector' ) +) +fragment.hltAK4PixelOnlyPFJetsTightIDCorrected = cms.EDProducer( "CorrectedPFJetProducer", + src = cms.InputTag( "hltAK4PixelOnlyPFJetsTightID" ), + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFCorrector' ) +) +fragment.hltPixelOnlyPFMETProducer = cms.EDProducer( "PFMETProducer", + src = cms.InputTag( "hltPixelOnlyParticleFlow" ), + parameters = cms.PSet( ), + applyWeight = cms.bool( False ), + calculateSignificance = cms.bool( False ), + alias = cms.string( "hltPFMet" ), + srcWeights = cms.InputTag( "" ), + globalThreshold = cms.double( 0.0 ) +) +fragment.hltL2MuonCandidatesScoutingNoVtx = cms.EDProducer( "L2MuonCandidateProducer", + InputObjects = cms.InputTag( "hltL2Muons" ) +) +fragment.hltIterL3OISeedsFromL2MuonsScoutingNoVtx = cms.EDProducer( "TSGForOIFromL2", + hitsToTry = cms.int32( 1 ), + tsosDiff2 = cms.double( 0.02 ), + adjustErrorsDynamicallyForHitless = cms.bool( True ), + SF6 = cms.double( 2.0 ), + SF4 = cms.double( 7.0 ), + SF5 = cms.double( 10.0 ), + propagatorName = cms.string( "PropagatorWithMaterialParabolicMf" ), + SF3 = cms.double( 5.0 ), + SF1 = cms.double( 3.0 ), + minEtaForTEC = cms.double( 0.7 ), + fixedErrorRescaleFactorForHits = cms.double( 1.0 ), + maxSeeds = cms.uint32( 20 ), + maxEtaForTOB = cms.double( 1.8 ), + pT3 = cms.double( 70.0 ), + pT2 = cms.double( 30.0 ), + pT1 = cms.double( 13.0 ), + layersToTry = cms.int32( 2 ), + fixedErrorRescaleFactorForHitless = cms.double( 2.0 ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + SF2 = cms.double( 4.0 ), + numL2ValidHitsCutAllEta = cms.uint32( 20 ), + adjustErrorsDynamicallyForHits = cms.bool( False ), + eta4 = cms.double( 1.2 ), + src = cms.InputTag( "hltL2Muons" ), + eta6 = cms.double( 1.4 ), + eta7 = cms.double( 2.1 ), + eta1 = cms.double( 0.2 ), + eta2 = cms.double( 0.3 ), + eta3 = cms.double( 1.0 ), + UseHitLessSeeds = cms.bool( True ), + estimator = cms.string( "hltESPChi2MeasurementEstimator100" ), + numL2ValidHitsCutAllEndcap = cms.uint32( 30 ), + debug = cms.untracked.bool( False ), + maxHitSeeds = cms.uint32( 1 ), + eta5 = cms.double( 1.6 ), + tsosDiff1 = cms.double( 0.2 ), + maxHitlessSeeds = cms.uint32( 5 ) +) +fragment.hltIterL3OITrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIterL3OISeedsFromL2MuonsScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 5000 ), + SimpleMagneticField = cms.string( "" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterial" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialOpposite" ) + ), + TrajectoryCleaner = cms.string( "muonSeededTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( True ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 500000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTPSetMuonCkfTrajectoryBuilder" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "CkfTrajectoryBuilder" ) +) +fragment.hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIterL3OITrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + Fitter = cms.string( "hltESPKFFittingSmootherWithOutliersRejectionAndRK" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "hltESPMeasurementTracker" ), + AlgorithmName = cms.string( "iter10" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( False ), + Propagator = cms.string( "PropagatorWithMaterial" ) +) +fragment.hltIterL3OIMuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "Notused" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 0 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 0.3, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 4, 3, 2 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 0.35, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 3.40282346639E38, 3.40282346639E38, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 10.0, 1.0, 0.4 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 5, 5 ) + ), + ignoreVertices = cms.bool( True ) +) +fragment.hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIterL3OIMuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIterL3OIMuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +fragment.hltL3MuonsIterL3OIScoutingNoVtx = cms.EDProducer( "L3MuonProducer", + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + UseMuonNavigation = cms.untracked.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPSmartPropagatorAny', + 'SteppingHelixPropagatorAny', + 'hltESPSmartPropagator', + 'hltESPSteppingHelixPropagatorOpposite' ) + ), + L3TrajBuilderParameters = cms.PSet( + PtCut = cms.double( 1.0 ), + TrackerPropagator = cms.string( "SteppingHelixPropagatorAny" ), + GlobalMuonTrackMatcher = cms.PSet( + Chi2Cut_3 = cms.double( 200.0 ), + DeltaDCut_2 = cms.double( 10.0 ), + Eta_threshold = cms.double( 1.2 ), + Quality_2 = cms.double( 15.0 ), + DeltaDCut_1 = cms.double( 40.0 ), + Quality_3 = cms.double( 7.0 ), + DeltaDCut_3 = cms.double( 15.0 ), + Quality_1 = cms.double( 20.0 ), + Pt_threshold1 = cms.double( 0.0 ), + DeltaRCut_2 = cms.double( 0.2 ), + DeltaRCut_1 = cms.double( 0.1 ), + Pt_threshold2 = cms.double( 9.99999999E8 ), + Chi2Cut_1 = cms.double( 50.0 ), + Chi2Cut_2 = cms.double( 50.0 ), + DeltaRCut_3 = cms.double( 1.0 ), + LocChi2Cut = cms.double( 0.001 ), + Propagator = cms.string( "hltESPSmartPropagator" ), + MinPt = cms.double( 1.0 ), + MinP = cms.double( 2.5 ) + ), + ScaleTECxFactor = cms.double( -1.0 ), + tkTrajUseVertex = cms.bool( False ), + MuonTrackingRegionBuilder = cms.PSet( + Rescale_Dz = cms.double( 4.0 ), + Pt_fixed = cms.bool( False ), + Eta_fixed = cms.bool( True ), + Eta_min = cms.double( 0.1 ), + DeltaZ = cms.double( 24.2 ), + maxRegions = cms.int32( 2 ), + EtaR_UpperLimit_Par1 = cms.double( 0.25 ), + UseVertex = cms.bool( False ), + Z_fixed = cms.bool( False ), + PhiR_UpperLimit_Par1 = cms.double( 0.6 ), + PhiR_UpperLimit_Par2 = cms.double( 0.2 ), + Rescale_phi = cms.double( 3.0 ), + DeltaEta = cms.double( 0.2 ), + precise = cms.bool( True ), + OnDemand = cms.int32( -1 ), + EtaR_UpperLimit_Par2 = cms.double( 0.15 ), + MeasurementTrackerName = cms.InputTag( "hltESPMeasurementTracker" ), + vertexCollection = cms.InputTag( "pixelVertices" ), + Pt_min = cms.double( 3.0 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + Phi_fixed = cms.bool( True ), + DeltaR = cms.double( 0.025 ), + input = cms.InputTag( "hltL2Muons" ), + DeltaPhi = cms.double( 0.15 ), + Phi_min = cms.double( 0.1 ), + Rescale_eta = cms.double( 3.0 ) + ), + TrackTransformer = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + RefitDirection = cms.string( "insideOut" ), + RefitRPCHits = cms.bool( True ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + tkTrajBeamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + RefitRPCHits = cms.bool( True ), + tkTrajVertex = cms.InputTag( "Notused" ), + GlbRefitterParameters = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + DTRecSegmentLabel = cms.InputTag( "hltDt4DSegments" ), + RefitFlag = cms.bool( True ), + SkipStation = cms.int32( -1 ), + Chi2CutRPC = cms.double( 1.0 ), + PropDirForCosmics = cms.bool( False ), + CSCRecSegmentLabel = cms.InputTag( "hltCscSegments" ), + HitThreshold = cms.int32( 1 ), + DYTthrs = cms.vint32( 30, 15 ), + TrackerSkipSystem = cms.int32( -1 ), + RefitDirection = cms.string( "insideOut" ), + Chi2CutCSC = cms.double( 150.0 ), + Chi2CutDT = cms.double( 10.0 ), + RefitRPCHits = cms.bool( True ), + TrackerSkipSection = cms.int32( -1 ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonHitsOption = cms.int32( 1 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ) + ), + PCut = cms.double( 2.5 ), + tkTrajMaxDXYBeamSpot = cms.double( 9999.0 ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + tkTrajMaxChi2 = cms.double( 9999.0 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + ScaleTECyFactor = cms.double( -1.0 ), + tkTrajLabel = cms.InputTag( "hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx" ) + ), + TrackLoaderParameters = cms.PSet( + MuonSeededTracksInstance = cms.untracked.string( "L2Seeded" ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + DoSmoothing = cms.bool( True ), + SmoothTkTrack = cms.untracked.bool( False ), + VertexConstraint = cms.bool( False ), + MuonUpdatorAtVertexParameters = cms.PSet( + MaxChi2 = cms.double( 1000000.0 ), + BeamSpotPositionErrors = cms.vdouble( 0.1, 0.1, 5.3 ), + Propagator = cms.string( "hltESPSteppingHelixPropagatorOpposite" ) + ), + PutTkTrackIntoEvent = cms.untracked.bool( False ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + MuonCollectionLabel = cms.InputTag( "hltL2Muons" ) +) +fragment.hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx = cms.EDProducer( "L3TrackLinksCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx' ) +) +fragment.hltIterL3OIL3MuonsScoutingNoVtx = cms.EDProducer( "L3TrackCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx' ) +) +fragment.hltIterL3OIL3MuonCandidatesScoutingNoVtx = cms.EDProducer( "L3MuonCandidateProducer", + InputLinksObjects = cms.InputTag( "hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx" ), + InputObjects = cms.InputTag( "hltIterL3OIL3MuonsScoutingNoVtx" ), + MuonPtOption = cms.string( "Tracker" ) +) +fragment.hltL2SelectorForL3IOScoutingNoVtx = cms.EDProducer( "HLTMuonL2SelectorForL3IO", + MaxNormalizedChi2 = cms.double( 20.0 ), + MinNmuonHits = cms.int32( 1 ), + MinNhits = cms.int32( 1 ), + applyL3Filters = cms.bool( False ), + MaxPtDifference = cms.double( 0.3 ), + l3OISrc = cms.InputTag( "hltIterL3OIL3MuonCandidatesScoutingNoVtx" ), + InputLinks = cms.InputTag( "hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx" ), + l2Src = cms.InputTag( "hltL2Muons" ) +) +fragment.hltIterL3MuonPixelTracksFilterScoutingNoVtx = cms.EDProducer( "PixelTrackFilterByKinematicsProducer", + nSigmaTipMaxTolerance = cms.double( 0.0 ), + chi2 = cms.double( 1000.0 ), + nSigmaInvPtTolerance = cms.double( 0.0 ), + ptMin = cms.double( 0.1 ), + tipMax = cms.double( 1.0 ) +) +fragment.hltIterL3MuonPixelTracksFitterScoutingNoVtx = cms.EDProducer( "PixelFitterByHelixProjectionsProducer", + scaleErrorsForBPix1 = cms.bool( False ), + scaleFactor = cms.double( 0.65 ) +) +fragment.hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx = cms.EDProducer( "MuonTrackingRegionEDProducer", + precise = cms.bool( True ), + Eta_fixed = cms.bool( True ), + Eta_min = cms.double( 0.0 ), + Z_fixed = cms.bool( True ), + MeasurementTrackerName = cms.InputTag( "" ), + maxRegions = cms.int32( 5 ), + Pt_min = cms.double( 2.0 ), + Rescale_Dz = cms.double( 4.0 ), + PhiR_UpperLimit_Par1 = cms.double( 0.6 ), + PhiR_UpperLimit_Par2 = cms.double( 0.2 ), + vertexCollection = cms.InputTag( "notUsed" ), + Phi_fixed = cms.bool( True ), + input = cms.InputTag( "hltL2SelectorForL3IOScoutingNoVtx" ), + DeltaR = cms.double( 0.025 ), + OnDemand = cms.int32( -1 ), + DeltaZ = cms.double( 24.2 ), + Rescale_phi = cms.double( 3.0 ), + Rescale_eta = cms.double( 3.0 ), + DeltaEta = cms.double( 0.2 ), + Phi_min = cms.double( 0.0 ), + DeltaPhi = cms.double( 0.15 ), + UseVertex = cms.bool( False ), + EtaR_UpperLimit_Par1 = cms.double( 0.25 ), + EtaR_UpperLimit_Par2 = cms.double( 0.15 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + Pt_fixed = cms.bool( True ) +) +fragment.hltIterL3MuonPixelLayerQuadrupletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3+BPix4', + 'BPix1+BPix2+BPix3+FPix1_pos', + 'BPix1+BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos+FPix2_pos', + 'BPix1+BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos+FPix3_pos', + 'BPix1+FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +fragment.hltIterL3MuonPixelTracksHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIterL3MuonPixelLayerQuadrupletsScoutingNoVtx" ) +) +fragment.hltIterL3MuonPixelTracksHitQuadrupletsScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltIterL3MuonPixelTracksHitDoubletsScoutingNoVtx" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 50.0 ), + value1 = cms.double( 200.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.005 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.2 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +fragment.hltIterL3MuonPixelTracksScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", + Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), + passLabel = cms.string( "" ), + Fitter = cms.InputTag( "hltIterL3MuonPixelTracksFitterScoutingNoVtx" ), + Filter = cms.InputTag( "hltIterL3MuonPixelTracksFilterScoutingNoVtx" ), + SeedingHitSets = cms.InputTag( "hltIterL3MuonPixelTracksHitQuadrupletsScoutingNoVtx" ) +) +fragment.hltIterL3MuonPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexProducer", + WtAverage = cms.bool( True ), + Method2 = cms.bool( True ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + Verbosity = cms.int32( 0 ), + UseError = cms.bool( True ), + TrackCollection = cms.InputTag( "hltIterL3MuonPixelTracksScoutingNoVtx" ), + PtMin = cms.double( 1.0 ), + NTrkMin = cms.int32( 2 ), + ZOffset = cms.double( 5.0 ), + Finder = cms.string( "DivisiveVertexFinder" ), + ZSeparation = cms.double( 0.05 ) +) +fragment.hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexCollectionTrimmer", + src = cms.InputTag( "hltIterL3MuonPixelVerticesScoutingNoVtx" ), + fractionSumPt2 = cms.double( 0.3 ), + minSumPt2 = cms.double( 0.0 ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + maxVtx = cms.uint32( 100 ) +) +fragment.hltIter0IterL3MuonPixelSeedsFromPixelTracksScoutingNoVtx = cms.EDProducer( "SeedGeneratorFromProtoTracksEDProducer", + includeFourthHit = cms.bool( False ), + useEventsWithNoVertex = cms.bool( True ), + originHalfLength = cms.double( 0.3 ), + useProtoTrackKinematics = cms.bool( False ), + usePV = cms.bool( False ), + SeedCreatorPSet = cms.PSet( refToPSet_ = cms.string( "HLTSeedFromProtoTracks" ) ), + InputVertexCollection = cms.InputTag( "hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx" ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + InputCollection = cms.InputTag( "hltIterL3MuonPixelTracksScoutingNoVtx" ), + originRadius = cms.double( 0.1 ) +) +fragment.hltIter0IterL3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter0IterL3MuonPixelSeedsFromPixelTracksScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( True ), + RedundantSeedCleaner = cms.string( "none" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( True ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter0IterL3MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "GroupedCkfTrajectoryBuilder" ) +) +fragment.hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter0IterL3MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter0" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +fragment.hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 3, 4 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 0.3, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 3, 4 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 0.35, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 3.40282346639E38, 3.40282346639E38, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 4 ) + ), + ignoreVertices = cms.bool( False ) +) +fragment.hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +fragment.hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", + trackClassifier = cms.InputTag( '','QualityMasks' ), + minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), + maxChi2 = cms.double( 16.0 ), + trajectories = cms.InputTag( "hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "" ), + stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), + overrideTrkQuals = cms.InputTag( "" ), + pixelClusters = cms.InputTag( "hltSiPixelClusters" ), + TrackQuality = cms.string( "highPurity" ) +) +fragment.hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx" ), + OnDemand = cms.bool( False ), + src = cms.InputTag( "hltSiStripClusters" ) +) +fragment.hltIter2IterL3MuonPixelLayerTripletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3', + 'BPix2+BPix3+BPix4', + 'BPix1+BPix3+BPix4', + 'BPix1+BPix2+BPix4', + 'BPix2+BPix3+FPix1_pos', + 'BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos', + 'BPix1+BPix2+FPix1_neg', + 'BPix2+FPix1_pos+FPix2_pos', + 'BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos', + 'BPix1+FPix1_neg+FPix2_neg', + 'FPix1_pos+FPix2_pos+FPix3_pos', + 'FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +fragment.hltIter2IterL3MuonPixelClusterCheckScoutingNoVtx = cms.EDProducer( "ClusterCheckerEDProducer", + cut = cms.string( "" ), + silentClusterCheck = cms.untracked.bool( False ), + MaxNumberOfCosmicClusters = cms.uint32( 50000 ), + PixelClusterCollectionLabel = cms.InputTag( "hltSiPixelClusters" ), + doClusterCheck = cms.bool( False ), + MaxNumberOfPixelClusters = cms.uint32( 10000 ), + ClusterCollectionLabel = cms.InputTag( "hltSiStripClusters" ) +) +fragment.hltIter2IterL3MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1 ), + clusterCheck = cms.InputTag( "hltIter2IterL3MuonPixelClusterCheckScoutingNoVtx" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIter2IterL3MuonPixelLayerTripletsScoutingNoVtx" ) +) +fragment.hltIter2IterL3MuonPixelHitTripletsScoutingNoVtx = cms.EDProducer( "CAHitTripletEDProducer", + CAThetaCut = cms.double( 0.015 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + maxChi2 = cms.PSet( + value2 = cms.double( 6.0 ), + value1 = cms.double( 100.0 ), + pt1 = cms.double( 0.8 ), + enabled = cms.bool( True ), + pt2 = cms.double( 8.0 ) + ), + doublets = cms.InputTag( "hltIter2IterL3MuonPixelHitDoubletsScoutingNoVtx" ), + CAHardPtCut = cms.double( 0.3 ), + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.1 ), + useBendingCorrection = cms.bool( True ), + extraHitRPhitolerance = cms.double( 0.032 ) +) +fragment.hltIter2IterL3MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer", + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + forceKinematicWithRegionDirection = cms.bool( False ), + magneticField = cms.string( "ParabolicMf" ), + SeedMomentumForBOFF = cms.double( 5.0 ), + OriginTransverseErrorMultiplier = cms.double( 1.0 ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MinOneOverPtError = cms.double( 1.0 ), + seedingHitSets = cms.InputTag( "hltIter2IterL3MuonPixelHitTripletsScoutingNoVtx" ), + propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) +) +fragment.hltIter2IterL3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter2IterL3MuonPixelSeedsScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter2IterL3MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "" ) +) +fragment.hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter2IterL3MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter2" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +fragment.hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 0 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 3.40282346639E38, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 3.40282346639E38, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 3 ) + ), + ignoreVertices = cms.bool( False ) +) +fragment.hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +fragment.hltIter2IterL3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +fragment.hltL3MuonsIterL3IOScoutingNoVtx = cms.EDProducer( "L3MuonProducer", + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + UseMuonNavigation = cms.untracked.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPSmartPropagatorAny', + 'SteppingHelixPropagatorAny', + 'hltESPSmartPropagator', + 'hltESPSteppingHelixPropagatorOpposite' ) + ), + L3TrajBuilderParameters = cms.PSet( + PtCut = cms.double( 1.0 ), + TrackerPropagator = cms.string( "SteppingHelixPropagatorAny" ), + GlobalMuonTrackMatcher = cms.PSet( + Chi2Cut_3 = cms.double( 200.0 ), + DeltaDCut_2 = cms.double( 10.0 ), + Eta_threshold = cms.double( 1.2 ), + Quality_2 = cms.double( 15.0 ), + DeltaDCut_1 = cms.double( 40.0 ), + Quality_3 = cms.double( 7.0 ), + DeltaDCut_3 = cms.double( 15.0 ), + Quality_1 = cms.double( 20.0 ), + Pt_threshold1 = cms.double( 0.0 ), + DeltaRCut_2 = cms.double( 0.2 ), + DeltaRCut_1 = cms.double( 0.1 ), + Pt_threshold2 = cms.double( 9.99999999E8 ), + Chi2Cut_1 = cms.double( 50.0 ), + Chi2Cut_2 = cms.double( 50.0 ), + DeltaRCut_3 = cms.double( 1.0 ), + LocChi2Cut = cms.double( 0.001 ), + Propagator = cms.string( "hltESPSmartPropagator" ), + MinPt = cms.double( 1.0 ), + MinP = cms.double( 2.5 ) + ), + ScaleTECxFactor = cms.double( -1.0 ), + tkTrajUseVertex = cms.bool( False ), + MuonTrackingRegionBuilder = cms.PSet( + Rescale_Dz = cms.double( 4.0 ), + Pt_fixed = cms.bool( True ), + Eta_fixed = cms.bool( True ), + Eta_min = cms.double( 0.1 ), + DeltaZ = cms.double( 24.2 ), + maxRegions = cms.int32( 2 ), + EtaR_UpperLimit_Par1 = cms.double( 0.25 ), + UseVertex = cms.bool( False ), + Z_fixed = cms.bool( True ), + PhiR_UpperLimit_Par1 = cms.double( 0.6 ), + PhiR_UpperLimit_Par2 = cms.double( 0.2 ), + Rescale_phi = cms.double( 3.0 ), + DeltaEta = cms.double( 0.04 ), + precise = cms.bool( True ), + OnDemand = cms.int32( -1 ), + EtaR_UpperLimit_Par2 = cms.double( 0.15 ), + MeasurementTrackerName = cms.InputTag( "hltESPMeasurementTracker" ), + vertexCollection = cms.InputTag( "pixelVertices" ), + Pt_min = cms.double( 3.0 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + Phi_fixed = cms.bool( True ), + DeltaR = cms.double( 0.025 ), + input = cms.InputTag( "hltL2SelectorForL3IOScoutingNoVtx" ), + DeltaPhi = cms.double( 0.15 ), + Phi_min = cms.double( 0.1 ), + Rescale_eta = cms.double( 3.0 ) + ), + TrackTransformer = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + RefitDirection = cms.string( "insideOut" ), + RefitRPCHits = cms.bool( True ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + tkTrajBeamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + RefitRPCHits = cms.bool( True ), + tkTrajVertex = cms.InputTag( "hltIterL3MuonPixelVerticesScoutingNoVtx" ), + GlbRefitterParameters = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + DTRecSegmentLabel = cms.InputTag( "hltDt4DSegments" ), + RefitFlag = cms.bool( True ), + SkipStation = cms.int32( -1 ), + Chi2CutRPC = cms.double( 1.0 ), + PropDirForCosmics = cms.bool( False ), + CSCRecSegmentLabel = cms.InputTag( "hltCscSegments" ), + HitThreshold = cms.int32( 1 ), + DYTthrs = cms.vint32( 30, 15 ), + TrackerSkipSystem = cms.int32( -1 ), + RefitDirection = cms.string( "insideOut" ), + Chi2CutCSC = cms.double( 150.0 ), + Chi2CutDT = cms.double( 10.0 ), + RefitRPCHits = cms.bool( True ), + TrackerSkipSection = cms.int32( -1 ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonHitsOption = cms.int32( 1 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ) + ), + PCut = cms.double( 2.5 ), + tkTrajMaxDXYBeamSpot = cms.double( 9999.0 ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + matchToSeeds = cms.bool( True ), + tkTrajMaxChi2 = cms.double( 9999.0 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + ScaleTECyFactor = cms.double( -1.0 ), + tkTrajLabel = cms.InputTag( "hltIter2IterL3MuonMergedScoutingNoVtx" ) + ), + TrackLoaderParameters = cms.PSet( + MuonSeededTracksInstance = cms.untracked.string( "L2Seeded" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + DoSmoothing = cms.bool( False ), + SmoothTkTrack = cms.untracked.bool( False ), + VertexConstraint = cms.bool( False ), + MuonUpdatorAtVertexParameters = cms.PSet( + MaxChi2 = cms.double( 1000000.0 ), + BeamSpotPositionErrors = cms.vdouble( 0.1, 0.1, 5.3 ), + Propagator = cms.string( "hltESPSteppingHelixPropagatorOpposite" ) + ), + PutTkTrackIntoEvent = cms.untracked.bool( False ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + MuonCollectionLabel = cms.InputTag( "hltL2Muons" ) +) +fragment.hltIterL3MuonsFromL2LinksCombinationScoutingNoVtx = cms.EDProducer( "L3TrackLinksCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx','hltL3MuonsIterL3IOScoutingNoVtx' ) +) +fragment.hltIterL3MuonsFromL2ScoutingNoVtx = cms.EDProducer( "L3TrackCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx','hltL3MuonsIterL3IOScoutingNoVtx' ) +) +fragment.hltIterL3MuonL1MuonNoL2SelectorScoutingNoVtx = cms.EDProducer( "HLTL1MuonNoL2Selector", + SeedMapTag = cms.InputTag( "hltL2Muons" ), + L1MinPt = cms.double( -1.0 ), + CentralBxOnly = cms.bool( True ), + InputObjects = cms.InputTag( 'hltGtStage2Digis','Muon' ), + L2CandTag = cms.InputTag( "hltL2MuonCandidatesScoutingNoVtx" ), + L1MaxEta = cms.double( 5.0 ), + L1MinQuality = cms.uint32( 7 ) +) +fragment.hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", + RegionPSet = cms.PSet( + vertexCollection = cms.InputTag( "notUsed" ), + zErrorVetex = cms.double( 0.2 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + zErrorBeamSpot = cms.double( 24.2 ), + maxNVertices = cms.int32( 1 ), + maxNRegions = cms.int32( 2 ), + nSigmaZVertex = cms.double( 3.0 ), + nSigmaZBeamSpot = cms.double( 4.0 ), + ptMin = cms.double( 10.0 ), + mode = cms.string( "BeamSpotSigma" ), + input = cms.InputTag( "hltIterL3MuonL1MuonNoL2SelectorScoutingNoVtx" ), + searchOpt = cms.bool( False ), + whereToUseMeasurementTracker = cms.string( "Never" ), + originRadius = cms.double( 0.2 ), + measurementTrackerName = cms.InputTag( "" ), + precise = cms.bool( True ), + deltaEta = cms.double( 0.35 ), + deltaPhi = cms.double( 0.2 ) + ) +) +fragment.hltIterL3FromL1MuonPixelLayerQuadrupletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3+BPix4', + 'BPix1+BPix2+BPix3+FPix1_pos', + 'BPix1+BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos+FPix2_pos', + 'BPix1+BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos+FPix3_pos', + 'BPix1+FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +fragment.hltIterL3FromL1MuonPixelTracksHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIterL3FromL1MuonPixelLayerQuadrupletsScoutingNoVtx" ) +) +fragment.hltIterL3FromL1MuonPixelTracksHitQuadrupletsScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltIterL3FromL1MuonPixelTracksHitDoubletsScoutingNoVtx" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 50.0 ), + value1 = cms.double( 200.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.005 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.2 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +fragment.hltIterL3FromL1MuonPixelTracksScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", + Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), + passLabel = cms.string( "" ), + Fitter = cms.InputTag( "hltIterL3MuonPixelTracksFitterScoutingNoVtx" ), + Filter = cms.InputTag( "hltIterL3MuonPixelTracksFilterScoutingNoVtx" ), + SeedingHitSets = cms.InputTag( "hltIterL3FromL1MuonPixelTracksHitQuadrupletsScoutingNoVtx" ) +) +fragment.hltIterL3FromL1MuonPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexProducer", + WtAverage = cms.bool( True ), + Method2 = cms.bool( True ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + Verbosity = cms.int32( 0 ), + UseError = cms.bool( True ), + TrackCollection = cms.InputTag( "hltIterL3MuonPixelTracksScoutingNoVtx" ), + PtMin = cms.double( 1.0 ), + NTrkMin = cms.int32( 2 ), + ZOffset = cms.double( 5.0 ), + Finder = cms.string( "DivisiveVertexFinder" ), + ZSeparation = cms.double( 0.05 ) +) +fragment.hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexCollectionTrimmer", + src = cms.InputTag( "hltIterL3FromL1MuonPixelVerticesScoutingNoVtx" ), + fractionSumPt2 = cms.double( 0.3 ), + minSumPt2 = cms.double( 0.0 ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + maxVtx = cms.uint32( 100 ) +) +fragment.hltIter0IterL3FromL1MuonPixelSeedsFromPixelTracksScoutingNoVtx = cms.EDProducer( "SeedGeneratorFromProtoTracksEDProducer", + includeFourthHit = cms.bool( False ), + useEventsWithNoVertex = cms.bool( True ), + originHalfLength = cms.double( 0.3 ), + useProtoTrackKinematics = cms.bool( False ), + usePV = cms.bool( False ), + SeedCreatorPSet = cms.PSet( refToPSet_ = cms.string( "HLTSeedFromProtoTracks" ) ), + InputVertexCollection = cms.InputTag( "hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx" ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + InputCollection = cms.InputTag( "hltIterL3FromL1MuonPixelTracksScoutingNoVtx" ), + originRadius = cms.double( 0.1 ) +) +fragment.hltIter0IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter0IterL3FromL1MuonPixelSeedsFromPixelTracksScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( True ), + RedundantSeedCleaner = cms.string( "none" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( True ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter0IterL3FromL1MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "GroupedCkfTrajectoryBuilder" ) +) +fragment.hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter0IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter0" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +fragment.hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 3, 4 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 0.3, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 3, 4 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 0.35, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 3.40282346639E38, 3.40282346639E38, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 4 ) + ), + ignoreVertices = cms.bool( False ) +) +fragment.hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +fragment.hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", + trackClassifier = cms.InputTag( '','QualityMasks' ), + minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), + maxChi2 = cms.double( 16.0 ), + trajectories = cms.InputTag( "hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "" ), + stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), + overrideTrkQuals = cms.InputTag( "" ), + pixelClusters = cms.InputTag( "hltSiPixelClusters" ), + TrackQuality = cms.string( "highPurity" ) +) +fragment.hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx" ), + OnDemand = cms.bool( False ), + src = cms.InputTag( "hltSiStripClusters" ) +) +fragment.hltIter2IterL3FromL1MuonPixelLayerTripletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3', + 'BPix2+BPix3+BPix4', + 'BPix1+BPix3+BPix4', + 'BPix1+BPix2+BPix4', + 'BPix2+BPix3+FPix1_pos', + 'BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos', + 'BPix1+BPix2+FPix1_neg', + 'BPix2+FPix1_pos+FPix2_pos', + 'BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos', + 'BPix1+FPix1_neg+FPix2_neg', + 'FPix1_pos+FPix2_pos+FPix3_pos', + 'FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +fragment.hltIter2IterL3FromL1MuonPixelClusterCheckScoutingNoVtx = cms.EDProducer( "ClusterCheckerEDProducer", + cut = cms.string( "" ), + silentClusterCheck = cms.untracked.bool( False ), + MaxNumberOfCosmicClusters = cms.uint32( 50000 ), + PixelClusterCollectionLabel = cms.InputTag( "hltSiPixelClusters" ), + doClusterCheck = cms.bool( False ), + MaxNumberOfPixelClusters = cms.uint32( 10000 ), + ClusterCollectionLabel = cms.InputTag( "hltSiStripClusters" ) +) +fragment.hltIter2IterL3FromL1MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1 ), + clusterCheck = cms.InputTag( "hltIter2IterL3FromL1MuonPixelClusterCheckScoutingNoVtx" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIter2IterL3FromL1MuonPixelLayerTripletsScoutingNoVtx" ) +) +fragment.hltIter2IterL3FromL1MuonPixelHitTripletsScoutingNoVtx = cms.EDProducer( "CAHitTripletEDProducer", + CAThetaCut = cms.double( 0.015 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + maxChi2 = cms.PSet( + value2 = cms.double( 6.0 ), + value1 = cms.double( 100.0 ), + pt1 = cms.double( 0.8 ), + enabled = cms.bool( True ), + pt2 = cms.double( 8.0 ) + ), + doublets = cms.InputTag( "hltIter2IterL3FromL1MuonPixelHitDoubletsScoutingNoVtx" ), + CAHardPtCut = cms.double( 0.3 ), + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.1 ), + useBendingCorrection = cms.bool( True ), + extraHitRPhitolerance = cms.double( 0.032 ) +) +fragment.hltIter2IterL3FromL1MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer", + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + forceKinematicWithRegionDirection = cms.bool( False ), + magneticField = cms.string( "ParabolicMf" ), + SeedMomentumForBOFF = cms.double( 5.0 ), + OriginTransverseErrorMultiplier = cms.double( 1.0 ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MinOneOverPtError = cms.double( 1.0 ), + seedingHitSets = cms.InputTag( "hltIter2IterL3FromL1MuonPixelHitTripletsScoutingNoVtx" ), + propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) +) +fragment.hltIter2IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter2IterL3FromL1MuonPixelSeedsScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter2IterL3FromL1MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "" ) +) +fragment.hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter2IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter2" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +fragment.hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 0 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 3.40282346639E38, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 3.40282346639E38, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 3 ) + ), + ignoreVertices = cms.bool( False ) +) +fragment.hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +fragment.hltIter2IterL3FromL1MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +fragment.hltIterL3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonMergedScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonMergedScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +fragment.hltIterL3MuonAndMuonFromL1MergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIterL3MuonMergedScoutingNoVtx','hltIter2IterL3FromL1MuonMergedScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIterL3MuonMergedScoutingNoVtx','hltIter2IterL3FromL1MuonMergedScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +fragment.hltL3MuonsIterL3LinksScoutingNoVtx = cms.EDProducer( "MuonLinksProducerForHLT", + pMin = cms.double( 2.5 ), + InclusiveTrackerTrackCollection = cms.InputTag( "hltIter2IterL3FromL1MuonMergedScoutingNoVtx" ), + shareHitFraction = cms.double( 0.19 ), + LinkCollection = cms.InputTag( "hltIterL3MuonsFromL2LinksCombinationScoutingNoVtx" ), + ptMin = cms.double( 2.5 ) +) +fragment.hltIterL3MuonsScoutingNoVtx = cms.EDProducer( "MuonIdProducer", + TrackExtractorPSet = cms.PSet( + Diff_z = cms.double( 0.2 ), + inputTrackCollection = cms.InputTag( "hltIter2IterL3FromL1MuonMergedScoutingNoVtx" ), + Chi2Ndof_Max = cms.double( 1.0E64 ), + BeamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), + DR_Veto = cms.double( 0.01 ), + Pt_Min = cms.double( -1.0 ), + DR_Max = cms.double( 1.0 ), + NHits_Min = cms.uint32( 0 ), + Chi2Prob_Min = cms.double( -1.0 ), + Diff_r = cms.double( 0.1 ), + BeamlineOption = cms.string( "BeamSpotFromEvent" ), + ComponentName = cms.string( "TrackExtractor" ) + ), + maxAbsEta = cms.double( 3.0 ), + fillGlobalTrackRefits = cms.bool( False ), + arbitrationCleanerOptions = cms.PSet( + OverlapDTheta = cms.double( 0.02 ), + Overlap = cms.bool( True ), + Clustering = cms.bool( True ), + ME1a = cms.bool( True ), + ClusterDTheta = cms.double( 0.02 ), + ClusterDPhi = cms.double( 0.6 ), + OverlapDPhi = cms.double( 0.0786 ) + ), + globalTrackQualityInputTag = cms.InputTag( "glbTrackQual" ), + fillShowerDigis = cms.bool( False ), + addExtraSoftMuons = cms.bool( False ), + debugWithTruthMatching = cms.bool( False ), + CaloExtractorPSet = cms.PSet( + DR_Veto_H = cms.double( 0.1 ), + CenterConeOnCalIntersection = cms.bool( False ), + NoiseTow_EE = cms.double( 0.15 ), + Noise_EB = cms.double( 0.025 ), + Noise_HE = cms.double( 0.2 ), + DR_Veto_E = cms.double( 0.07 ), + NoiseTow_EB = cms.double( 0.04 ), + Noise_EE = cms.double( 0.1 ), + UseRecHitsFlag = cms.bool( False ), + DR_Max = cms.double( 1.0 ), + DepositLabel = cms.untracked.string( "Cal" ), + Noise_HO = cms.double( 0.2 ), + DR_Veto_HO = cms.double( 0.1 ), + Threshold_H = cms.double( 0.5 ), + PrintTimeReport = cms.untracked.bool( False ), + Threshold_E = cms.double( 0.2 ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "CaloExtractorByAssociator" ), + Threshold_HO = cms.double( 0.5 ), + DepositInstanceLabels = cms.vstring( 'ecal', + 'hcal', + 'ho' ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 1.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( "Notused" ), + CaloTowerCollectionLabel = cms.InputTag( "Notused" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "Notused" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 1.0 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( "Notused" ), + dRHcal = cms.double( 1.0 ), + dRHcalPreselection = cms.double( 1.0 ), + HORecHitCollectionLabel = cms.InputTag( "Notused" ) + ), + Noise_HB = cms.double( 0.2 ) + ), + runArbitrationCleaner = cms.bool( False ), + fillEnergy = cms.bool( False ), + TrackerKinkFinderParameters = cms.PSet( + usePosition = cms.bool( False ), + diagonalOnly = cms.bool( False ) + ), + TimingFillerParameters = cms.PSet( + DTTimingParameters = cms.PSet( + HitError = cms.double( 6.0 ), + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) + ), + debug = cms.bool( False ), + DoWireCorr = cms.bool( False ), + RequireBothProjections = cms.bool( False ), + DTTimeOffset = cms.double( 2.7 ), + PruneCut = cms.double( 10000.0 ), + DTsegments = cms.InputTag( "hltDt4DSegments" ), + UseSegmentT0 = cms.bool( False ), + HitsMin = cms.int32( 5 ), + DropTheta = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ) + ), + UseCSC = cms.bool( True ), + CSCTimingParameters = cms.PSet( + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) + ), + debug = cms.bool( False ), + CSCWireTimeOffset = cms.double( 0.0 ), + CSCStripError = cms.double( 7.0 ), + CSCTimeOffset = cms.double( 0.0 ), + CSCWireError = cms.double( 8.6 ), + PruneCut = cms.double( 100.0 ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + UseStripTime = cms.bool( True ), + CSCStripTimeOffset = cms.double( 0.0 ), + UseWireTime = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ) + ), + ErrorDT = cms.double( 6.0 ), + EcalEnergyCut = cms.double( 0.4 ), + UseECAL = cms.bool( True ), + ErrorEB = cms.double( 2.085 ), + UseDT = cms.bool( True ), + ErrorEE = cms.double( 6.95 ), + ErrorCSC = cms.double( 7.4 ) + ), + inputCollectionTypes = cms.vstring( 'inner tracks', + 'links' ), + arbitrateTrackerMuons = cms.bool( True ), + minCaloCompatibility = cms.double( 0.6 ), + ecalDepositName = cms.string( "ecal" ), + minP = cms.double( 0.0 ), + fillIsolation = cms.bool( False ), + jetDepositName = cms.string( "jets" ), + hoDepositName = cms.string( "ho" ), + writeIsoDeposits = cms.bool( False ), + maxAbsPullX = cms.double( 4.0 ), + maxAbsPullY = cms.double( 9999.0 ), + minPt = cms.double( 8.0 ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( True ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 9999.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( "Notused" ), + CaloTowerCollectionLabel = cms.InputTag( "Notused" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "Notused" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.05 ), + useCalo = cms.bool( False ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( "Notused" ), + dRHcal = cms.double( 9999.0 ), + dRHcalPreselection = cms.double( 0.2 ), + HORecHitCollectionLabel = cms.InputTag( "Notused" ) + ), + storeCrossedHcalRecHits = cms.bool( False ), + JetExtractorPSet = cms.PSet( + JetCollectionLabel = cms.InputTag( "Notused" ), + DR_Veto = cms.double( 0.1 ), + DR_Max = cms.double( 1.0 ), + ExcludeMuonVeto = cms.bool( True ), + PrintTimeReport = cms.untracked.bool( False ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "JetExtractor" ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 0.5 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( "Notused" ), + CaloTowerCollectionLabel = cms.InputTag( "Notused" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "Notused" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.5 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( "Notused" ), + dRHcal = cms.double( 0.5 ), + dRHcalPreselection = cms.double( 0.5 ), + HORecHitCollectionLabel = cms.InputTag( "Notused" ) + ), + Threshold = cms.double( 5.0 ) + ), + fillGlobalTrackQuality = cms.bool( False ), + minPCaloMuon = cms.double( 1.0E9 ), + maxAbsDy = cms.double( 9999.0 ), + fillCaloCompatibility = cms.bool( False ), + fillMatching = cms.bool( True ), + MuonCaloCompatibility = cms.PSet( + delta_eta = cms.double( 0.02 ), + delta_phi = cms.double( 0.02 ), + allSiPMHO = cms.bool( False ), + MuonTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_muons_lowPt_3_1_norm.root" ), + PionTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_pions_lowPt_3_1_norm.root" ) + ), + fillTrackerKink = cms.bool( False ), + ShowerDigiFillerParameters = cms.PSet( + cscDigiCollectionLabel = cms.InputTag( 'muonCSCDigis','MuonCSCStripDigi' ), + dtDigiCollectionLabel = cms.InputTag( "muonDTDigis" ), + digiMaxDistanceX = cms.double( 25.0 ) + ), + hcalDepositName = cms.string( "hcal" ), + sigmaThresholdToFillCandidateP4WithGlobalFit = cms.double( 2.0 ), + inputCollectionLabels = cms.VInputTag( 'hltIter2IterL3FromL1MuonMergedScoutingNoVtx','hltL3MuonsIterL3LinksScoutingNoVtx' ), + trackDepositName = cms.string( "tracker" ), + maxAbsDx = cms.double( 3.0 ), + ptThresholdToFillCandidateP4WithGlobalFit = cms.double( 200.0 ), + minNumberOfMatches = cms.int32( 1 ) +) +fragment.hltIterL3MuonCandidatesScoutingNoVtx = cms.EDProducer( "L3MuonCandidateProducerFromMuons", + InputObjects = cms.InputTag( "hltIterL3MuonsScoutingNoVtx" ) +) +fragment.hltDisplacedmumuVtxNoMatchingProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", + Src = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), + PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtx" ), + MinPt = cms.double( 0.0 ), + ChargeOpt = cms.int32( 0 ), + MaxEta = cms.double( 2.5 ), + MaxInvMass = cms.double( 99999.0 ), + MinPtPair = cms.double( 0.0 ), + matchToPrevious = cms.bool( False ), + MinInvMass = cms.double( 0.0 ) +) +fragment.hltRecHitInRegionForMuonsMFnoVtx = cms.EDProducer( "MuonHLTRechitInRegionsProducer", + l1LowerThr = cms.double( 0.0 ), + doIsolated = cms.bool( True ), + useUncalib = cms.bool( False ), + regionEtaMargin = cms.double( 0.4 ), + ecalhitLabels = cms.VInputTag( 'hltEcalRecHit:EcalRecHitsEB','hltEcalRecHit:EcalRecHitsEE' ), + regionPhiMargin = cms.double( 0.4 ), + l1TagNonIsolated = cms.InputTag( "NotUsed" ), + l1UpperThr = cms.double( 999.0 ), + l1LowerThrIgnoreIsolation = cms.double( 100.0 ), + productLabels = cms.vstring( 'EcalRegionalRecHitsEB', + 'EcalRegionalRecHitsEE' ), + l1TagIsolated = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) +) +fragment.hltRecHitInRegionForMuonsESScoutingNoVtx = cms.EDProducer( "MuonHLTRechitInRegionsProducer", + l1LowerThr = cms.double( 0.0 ), + doIsolated = cms.bool( True ), + useUncalib = cms.bool( False ), + regionEtaMargin = cms.double( 0.4 ), + ecalhitLabels = cms.VInputTag( 'hltEcalPreshowerRecHit:EcalRecHitsES' ), + regionPhiMargin = cms.double( 0.4 ), + l1TagNonIsolated = cms.InputTag( "NotUsed" ), + l1UpperThr = cms.double( 999.0 ), + l1LowerThrIgnoreIsolation = cms.double( 100.0 ), + productLabels = cms.vstring( 'EcalRegionalRecHitsES' ), + l1TagIsolated = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) +) +fragment.hltParticleFlowRecHitECALForMuonsMFScoutingNoVtx = cms.EDProducer( "PFRecHitProducer", + producers = cms.VPSet( + cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsMFnoVtx','EcalRegionalRecHitsEB' ), + srFlags = cms.InputTag( "" ), + name = cms.string( "PFEBRecHitCreator" ), + qualityTests = cms.VPSet( + cms.PSet( name = cms.string( "PFRecHitQTestDBThreshold" ), + applySelectionsToAllCrystals = cms.bool( True ) + ), + cms.PSet( topologicalCleaning = cms.bool( True ), + skipTTRecoveredHits = cms.bool( True ), + cleaningThreshold = cms.double( 2.0 ), + name = cms.string( "PFRecHitQTestECAL" ), + timingCleaning = cms.bool( True ) + ) + ) + ), + cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsMFnoVtx','EcalRegionalRecHitsEE' ), + srFlags = cms.InputTag( "" ), + name = cms.string( "PFEERecHitCreator" ), + qualityTests = cms.VPSet( + cms.PSet( name = cms.string( "PFRecHitQTestDBThreshold" ), + applySelectionsToAllCrystals = cms.bool( True ) + ), + cms.PSet( topologicalCleaning = cms.bool( True ), + skipTTRecoveredHits = cms.bool( True ), + cleaningThreshold = cms.double( 2.0 ), + name = cms.string( "PFRecHitQTestECAL" ), + timingCleaning = cms.bool( True ) + ) + ) + ) + ), + navigator = cms.PSet( + barrel = cms.PSet( ), + endcap = cms.PSet( ), + name = cms.string( "PFRecHitECALNavigator" ) + ) +) +fragment.hltParticleFlowRecHitPSForMuonsScoutingNoVtx = cms.EDProducer( "PFRecHitProducer", + producers = cms.VPSet( + cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsESScoutingNoVtx','EcalRegionalRecHitsES' ), + name = cms.string( "PFPSRecHitCreator" ), + qualityTests = cms.VPSet( + cms.PSet( threshold = cms.double( 7.0E-6 ), + name = cms.string( "PFRecHitQTestThreshold" ) + ) + ) + ) + ), + navigator = cms.PSet( name = cms.string( "PFRecHitPreshowerNavigator" ) ) +) +fragment.hltParticleFlowClusterECALUncorrectedForMuonsMFScoutingNoVtx = cms.EDProducer( "PFClusterProducer", + pfClusterBuilder = cms.PSet( + minFracTot = cms.double( 1.0E-20 ), + stoppingTolerance = cms.double( 1.0E-8 ), + positionCalc = cms.PSet( + minAllowedNormalization = cms.double( 1.0E-9 ), + posCalcNCrystals = cms.int32( 9 ), + algoName = cms.string( "Basic2DGenericPFlowPositionCalc" ), + logWeightDenominator = cms.double( 0.08 ), + minFractionInCalc = cms.double( 1.0E-9 ), + timeResolutionCalcBarrel = cms.PSet( + corrTermLowE = cms.double( 0.0510871 ), + threshLowE = cms.double( 0.5 ), + noiseTerm = cms.double( 1.10889 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 1.31883 ), + threshHighE = cms.double( 5.0 ), + constantTerm = cms.double( 0.428192 ) + ), + timeResolutionCalcEndcap = cms.PSet( + corrTermLowE = cms.double( 0.0 ), + threshLowE = cms.double( 1.0 ), + noiseTerm = cms.double( 5.72489999999 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 6.92683000001 ), + threshHighE = cms.double( 10.0 ), + constantTerm = cms.double( 0.0 ) + ) + ), + maxIterations = cms.uint32( 50 ), + positionCalcForConvergence = cms.PSet( + minAllowedNormalization = cms.double( 0.0 ), + T0_ES = cms.double( 1.2 ), + algoName = cms.string( "ECAL2DPositionCalcWithDepthCorr" ), + T0_EE = cms.double( 3.1 ), + T0_EB = cms.double( 7.4 ), + X0 = cms.double( 0.89 ), + minFractionInCalc = cms.double( 0.0 ), + W0 = cms.double( 4.2 ) + ), + allCellsPositionCalc = cms.PSet( + minAllowedNormalization = cms.double( 1.0E-9 ), + posCalcNCrystals = cms.int32( -1 ), + algoName = cms.string( "Basic2DGenericPFlowPositionCalc" ), + logWeightDenominator = cms.double( 0.08 ), + minFractionInCalc = cms.double( 1.0E-9 ), + timeResolutionCalcBarrel = cms.PSet( + corrTermLowE = cms.double( 0.0510871 ), + threshLowE = cms.double( 0.5 ), + noiseTerm = cms.double( 1.10889 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 1.31883 ), + threshHighE = cms.double( 5.0 ), + constantTerm = cms.double( 0.428192 ) + ), + timeResolutionCalcEndcap = cms.PSet( + corrTermLowE = cms.double( 0.0 ), + threshLowE = cms.double( 1.0 ), + noiseTerm = cms.double( 5.72489999999 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 6.92683000001 ), + threshHighE = cms.double( 10.0 ), + constantTerm = cms.double( 0.0 ) + ) + ), + algoName = cms.string( "Basic2DGenericPFlowClusterizer" ), + recHitEnergyNorms = cms.VPSet( + cms.PSet( recHitEnergyNorm = cms.double( 0.08 ), + detector = cms.string( "ECAL_BARREL" ) + ), + cms.PSet( recHitEnergyNorm = cms.double( 0.3 ), + detector = cms.string( "ECAL_ENDCAP" ) + ) + ), + showerSigma = cms.double( 1.5 ), + minFractionToKeep = cms.double( 1.0E-7 ), + excludeOtherSeeds = cms.bool( True ) + ), + positionReCalc = cms.PSet( + minAllowedNormalization = cms.double( 0.0 ), + T0_ES = cms.double( 1.2 ), + algoName = cms.string( "ECAL2DPositionCalcWithDepthCorr" ), + T0_EE = cms.double( 3.1 ), + T0_EB = cms.double( 7.4 ), + X0 = cms.double( 0.89 ), + minFractionInCalc = cms.double( 0.0 ), + W0 = cms.double( 4.2 ) + ), + initialClusteringStep = cms.PSet( + thresholdsByDetector = cms.VPSet( + cms.PSet( gatheringThreshold = cms.double( 0.08 ), + gatheringThresholdPt = cms.double( 0.0 ), + detector = cms.string( "ECAL_BARREL" ) + ), + cms.PSet( gatheringThreshold = cms.double( 0.3 ), + gatheringThresholdPt = cms.double( 0.0 ), + detector = cms.string( "ECAL_ENDCAP" ) + ) + ), + algoName = cms.string( "Basic2DGenericTopoClusterizer" ), + useCornerCells = cms.bool( True ) + ), + seedCleaners = cms.VPSet( + ), + energyCorrector = cms.PSet( ), recHitCleaners = cms.VPSet( ), seedFinder = cms.PSet( @@ -76795,9 +78849,9 @@ algoName = cms.string( "LocalMaximumSeedFinder" ), nNeighbours = cms.int32( 8 ) ), - recHitsSource = cms.InputTag( "hltParticleFlowRecHitECALForMuonsMFNoVtx" ) + recHitsSource = cms.InputTag( "hltParticleFlowRecHitECALForMuonsMFScoutingNoVtx" ) ) -fragment.hltParticleFlowClusterPSForMuonsNoVtx = cms.EDProducer( "PFClusterProducer", +fragment.hltParticleFlowClusterPSForMuonsScoutingNoVtx = cms.EDProducer( "PFClusterProducer", pfClusterBuilder = cms.PSet( minFracTot = cms.double( 1.0E-20 ), stoppingTolerance = cms.double( 1.0E-8 ), @@ -76856,21 +78910,21 @@ algoName = cms.string( "LocalMaximumSeedFinder" ), nNeighbours = cms.int32( 4 ) ), - recHitsSource = cms.InputTag( "hltParticleFlowRecHitPSForMuonsNoVtx" ) + recHitsSource = cms.InputTag( "hltParticleFlowRecHitPSForMuonsScoutingNoVtx" ) ) -fragment.hltParticleFlowClusterECALForMuonsMFNoVtx = cms.EDProducer( "CorrectedECALPFClusterProducer", - inputPS = cms.InputTag( "hltParticleFlowClusterPSForMuonsNoVtx" ), +fragment.hltParticleFlowClusterECALForMuonsMFScoutingNoVtx = cms.EDProducer( "CorrectedECALPFClusterProducer", + inputPS = cms.InputTag( "hltParticleFlowClusterPSForMuonsScoutingNoVtx" ), minimumPSEnergy = cms.double( 0.0 ), energyCorrector = cms.PSet( applyCrackCorrections = cms.bool( False ) ), - inputECAL = cms.InputTag( "hltParticleFlowClusterECALUncorrectedForMuonsMFNoVtx" ) + inputECAL = cms.InputTag( "hltParticleFlowClusterECALUncorrectedForMuonsMFScoutingNoVtx" ) ) -fragment.hltMuonEcalMFPFClusterIsoForMuonsNoVtx = cms.EDProducer( "MuonHLTEcalPFClusterIsolationProducer", +fragment.hltMuonEcalMFPFClusterIsoForMuonsScoutingNoVtx = cms.EDProducer( "MuonHLTEcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.35, 0.193 ), doRhoCorrection = cms.bool( True ), etaStripBarrel = cms.double( 0.0 ), energyEndcap = cms.double( 0.0 ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetECALMFForMuons" ), - pfClusterProducer = cms.InputTag( "hltParticleFlowClusterECALForMuonsMFNoVtx" ), + pfClusterProducer = cms.InputTag( "hltParticleFlowClusterECALForMuonsMFScoutingNoVtx" ), etaStripEndcap = cms.double( 0.0 ), drVetoBarrel = cms.double( 0.05 ), drMax = cms.double( 0.3 ), @@ -76879,17 +78933,9 @@ drVetoEndcap = cms.double( 0.05 ), rhoMax = cms.double( 9.9999999E7 ), rhoScale = cms.double( 1.0 ), - recoCandidateProducer = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ) -) -fragment.hltRegionalTowerForMuonsNoVtx = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - EMin = cms.double( 0.0 ), - EtMin = cms.double( 0.0 ), - L1IsoCand = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForAll" ) + recoCandidateProducer = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) ) -fragment.hltMuonHcalPFClusterIsoForMuonsNoVtx = cms.EDProducer( "MuonHLTHcalPFClusterIsolationProducer", +fragment.hltMuonHcalPFClusterIsoForMuonsScoutingNoVtx = cms.EDProducer( "MuonHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.11, 0.163 ), useHF = cms.bool( False ), useEt = cms.bool( True ), @@ -76908,14 +78954,14 @@ rhoMax = cms.double( 9.9999999E7 ), pfClusterProducerHFEM = cms.InputTag( "" ), rhoScale = cms.double( 1.0 ), - recoCandidateProducer = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ) + recoCandidateProducer = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) ) -fragment.hltL3MuonVertexNoVtx = cms.EDProducer( "VertexFromTrackProducer", +fragment.hltL3MuonVertexScoutingNoVtx = cms.EDProducer( "VertexFromTrackProducer", verbose = cms.untracked.bool( False ), useTriggerFilterElectrons = cms.bool( False ), beamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), isRecoCandidate = cms.bool( True ), - trackLabel = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + trackLabel = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), useTriggerFilterMuons = cms.bool( False ), useBeamSpot = cms.bool( True ), vertexLabel = cms.InputTag( "notUsed" ), @@ -76923,11 +78969,11 @@ triggerFilterMuonsSrc = cms.InputTag( "notUsed" ), useVertex = cms.bool( False ) ) -fragment.hltPixelTracksTrackingRegionsL3MuonNoVtx = cms.EDProducer( "GlobalTrackingRegionWithVerticesEDProducer", +fragment.hltPixelTracksTrackingRegionsL3MuonScoutingNoVtx = cms.EDProducer( "GlobalTrackingRegionWithVerticesEDProducer", RegionPSet = cms.PSet( useFixedError = cms.bool( True ), nSigmaZ = cms.double( 4.0 ), - VertexCollection = cms.InputTag( "hltL3MuonVertexNoVtx" ), + VertexCollection = cms.InputTag( "hltL3MuonVertexScoutingNoVtx" ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), useFoundVertices = cms.bool( True ), fixedError = cms.double( 0.5 ), @@ -76939,8 +78985,8 @@ useMultipleScattering = cms.bool( False ) ) ) -fragment.hltPixelTracksHitDoubletsL3MuonNoVtx = cms.EDProducer( "HitPairEDProducer", - trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsL3MuonNoVtx" ), +fragment.hltPixelTracksHitDoubletsL3MuonScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsL3MuonScoutingNoVtx" ), layerPairs = cms.vuint32( 0, 1, 2 ), clusterCheck = cms.InputTag( "" ), produceSeedingHitSets = cms.bool( False ), @@ -76950,7 +78996,7 @@ maxElement = cms.uint32( 0 ), seedingLayers = cms.InputTag( "hltPixelLayerQuadruplets" ) ) -fragment.hltPixelTracksHitQuadrupletsL3MuonNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", +fragment.hltPixelTracksHitQuadrupletsL3MuonScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", CAHardPtCut = cms.double( 0.0 ), CAPhiCut_byTriplets = cms.VPSet( cms.PSet( seedingLayers = cms.string( "" ), @@ -76958,7 +79004,7 @@ ) ), extraHitRPhitolerance = cms.double( 0.032 ), - doublets = cms.InputTag( "hltPixelTracksHitDoubletsL3MuonNoVtx" ), + doublets = cms.InputTag( "hltPixelTracksHitDoubletsL3MuonScoutingNoVtx" ), fitFastCircle = cms.bool( True ), maxChi2 = cms.PSet( value2 = cms.double( 50.0 ), @@ -76982,30 +79028,30 @@ useBendingCorrection = cms.bool( True ), fitFastCircleChi2Cut = cms.bool( True ) ) -fragment.hltPixelTracksL3MuonNoVtx = cms.EDProducer( "PixelTrackProducer", +fragment.hltPixelTracksL3MuonScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), passLabel = cms.string( "" ), Fitter = cms.InputTag( "hltPixelTracksL3MuonFitter" ), Filter = cms.InputTag( "hltPixelTracksL3MuonFilter" ), - SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsL3MuonNoVtx" ) + SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsL3MuonScoutingNoVtx" ) ) -fragment.hltPixelVerticesL3MuonNoVtx = cms.EDProducer( "PixelVertexProducer", +fragment.hltPixelVerticesL3MuonScoutingNoVtx = cms.EDProducer( "PixelVertexProducer", WtAverage = cms.bool( True ), Method2 = cms.bool( True ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparer" ) ), Verbosity = cms.int32( 0 ), UseError = cms.bool( True ), - TrackCollection = cms.InputTag( "hltPixelTracksL3MuonNoVtx" ), + TrackCollection = cms.InputTag( "hltPixelTracksL3MuonScoutingNoVtx" ), PtMin = cms.double( 1.0 ), NTrkMin = cms.int32( 2 ), ZOffset = cms.double( 5.0 ), Finder = cms.string( "DivisiveVertexFinder" ), ZSeparation = cms.double( 0.05 ) ) -fragment.hltPixelTracksTrackingRegionsForSeedsL3MuonNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", +fragment.hltPixelTracksTrackingRegionsForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", RegionPSet = cms.PSet( - vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), zErrorVetex = cms.double( 0.2 ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), zErrorBeamSpot = cms.double( 24.2 ), @@ -77015,7 +79061,7 @@ nSigmaZBeamSpot = cms.double( 4.0 ), ptMin = cms.double( 0.9 ), mode = cms.string( "VerticesFixed" ), - input = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + input = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), searchOpt = cms.bool( False ), whereToUseMeasurementTracker = cms.string( "Never" ), originRadius = cms.double( 0.1 ), @@ -77025,8 +79071,8 @@ deltaPhi = cms.double( 0.3 ) ) ) -fragment.hltPixelTracksHitDoubletsForSeedsL3MuonNoVtx = cms.EDProducer( "HitPairEDProducer", - trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsForSeedsL3MuonNoVtx" ), +fragment.hltPixelTracksHitDoubletsForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsForSeedsL3MuonScoutingNoVtx" ), layerPairs = cms.vuint32( 0, 1, 2 ), clusterCheck = cms.InputTag( "" ), produceSeedingHitSets = cms.bool( False ), @@ -77036,7 +79082,7 @@ maxElement = cms.uint32( 0 ), seedingLayers = cms.InputTag( "hltPixelLayerQuadruplets" ) ) -fragment.hltPixelTracksHitQuadrupletsForSeedsL3MuonNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", +fragment.hltPixelTracksHitQuadrupletsForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", CAHardPtCut = cms.double( 0.0 ), CAPhiCut_byTriplets = cms.VPSet( cms.PSet( seedingLayers = cms.string( "" ), @@ -77044,7 +79090,7 @@ ) ), extraHitRPhitolerance = cms.double( 0.032 ), - doublets = cms.InputTag( "hltPixelTracksHitDoubletsForSeedsL3MuonNoVtx" ), + doublets = cms.InputTag( "hltPixelTracksHitDoubletsForSeedsL3MuonScoutingNoVtx" ), fitFastCircle = cms.bool( True ), maxChi2 = cms.PSet( value2 = cms.double( 50.0 ), @@ -77068,27 +79114,27 @@ useBendingCorrection = cms.bool( True ), fitFastCircleChi2Cut = cms.bool( True ) ) -fragment.hltPixelTracksForSeedsL3MuonNoVtx = cms.EDProducer( "PixelTrackProducer", +fragment.hltPixelTracksForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), passLabel = cms.string( "" ), Fitter = cms.InputTag( "hltPixelTracksForSeedsL3MuonFitter" ), Filter = cms.InputTag( "hltPixelTracksForSeedsL3MuonFilter" ), - SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsForSeedsL3MuonNoVtx" ) + SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsForSeedsL3MuonScoutingNoVtx" ) ) -fragment.hltIter0L3MuonPixelSeedsFromPixelTracksNoVtx = cms.EDProducer( "SeedGeneratorFromProtoTracksEDProducer", +fragment.hltIter0L3MuonPixelSeedsFromPixelTracksScoutingNoVtx = cms.EDProducer( "SeedGeneratorFromProtoTracksEDProducer", includeFourthHit = cms.bool( False ), useEventsWithNoVertex = cms.bool( True ), originHalfLength = cms.double( 0.2 ), useProtoTrackKinematics = cms.bool( False ), usePV = cms.bool( False ), SeedCreatorPSet = cms.PSet( refToPSet_ = cms.string( "HLTSeedFromProtoTracks" ) ), - InputVertexCollection = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + InputVertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), - InputCollection = cms.InputTag( "hltPixelTracksForSeedsL3MuonNoVtx" ), + InputCollection = cms.InputTag( "hltPixelTracksForSeedsL3MuonScoutingNoVtx" ), originRadius = cms.double( 0.1 ) ) -fragment.hltIter0L3MuonCkfTrackCandidatesNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", - src = cms.InputTag( "hltIter0L3MuonPixelSeedsFromPixelTracksNoVtx" ), +fragment.hltIter0L3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter0L3MuonPixelSeedsFromPixelTracksScoutingNoVtx" ), maxSeedsBeforeCleaning = cms.uint32( 1000 ), SimpleMagneticField = cms.string( "ParabolicMf" ), TransientInitialStateEstimatorParameters = cms.PSet( @@ -77108,8 +79154,8 @@ NavigationSchool = cms.string( "SimpleNavigationSchool" ), TrajectoryBuilder = cms.string( "" ) ) -fragment.hltIter0L3MuonCtfWithMaterialTracksNoVtx = cms.EDProducer( "TrackProducer", - src = cms.InputTag( "hltIter0L3MuonCkfTrackCandidatesNoVtx" ), +fragment.hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter0L3MuonCkfTrackCandidatesScoutingNoVtx" ), SimpleMagneticField = cms.string( "ParabolicMf" ), clusterRemovalInfo = cms.InputTag( "" ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), @@ -77126,10 +79172,10 @@ useSimpleMF = cms.bool( True ), Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) ) -fragment.hltIter0L3MuonTrackCutClassifierNoVtx = cms.EDProducer( "TrackCutClassifier", - src = cms.InputTag( "hltIter0L3MuonCtfWithMaterialTracksNoVtx" ), +fragment.hltIter0L3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx" ), beamspot = cms.InputTag( "hltOnlineBeamSpot" ), - vertices = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), mva = cms.PSet( minPixelHits = cms.vint32( 0, 3, 4 ), @@ -77158,31 +79204,31 @@ ), ignoreVertices = cms.bool( False ) ) -fragment.hltIter0L3MuonTrackSelectionHighPurityNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", +fragment.hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", minQuality = cms.string( "highPurity" ), copyExtras = cms.untracked.bool( True ), copyTrajectories = cms.untracked.bool( False ), - originalSource = cms.InputTag( "hltIter0L3MuonCtfWithMaterialTracksNoVtx" ), - originalQualVals = cms.InputTag( 'hltIter0L3MuonTrackCutClassifierNoVtx','QualityMasks' ), - originalMVAVals = cms.InputTag( 'hltIter0L3MuonTrackCutClassifierNoVtx','MVAValues' ) + originalSource = cms.InputTag( "hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter0L3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter0L3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) ) -fragment.hltIter1L3MuonClustersRefRemovalNoVtx = cms.EDProducer( "TrackClusterRemover", +fragment.hltIter1L3MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", trackClassifier = cms.InputTag( '','QualityMasks' ), minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), maxChi2 = cms.double( 9.0 ), - trajectories = cms.InputTag( "hltIter0L3MuonTrackSelectionHighPurityNoVtx" ), + trajectories = cms.InputTag( "hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx" ), oldClusterRemovalInfo = cms.InputTag( "" ), stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), overrideTrkQuals = cms.InputTag( "" ), pixelClusters = cms.InputTag( "hltSiPixelClusters" ), TrackQuality = cms.string( "highPurity" ) ) -fragment.hltIter1L3MuonMaskedMeasurementTrackerEventNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", - clustersToSkip = cms.InputTag( "hltIter1L3MuonClustersRefRemovalNoVtx" ), +fragment.hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), OnDemand = cms.bool( False ), src = cms.InputTag( "hltSiStripClusters" ) ) -fragment.hltIter1L3MuonPixelLayerQuadrupletsNoVtx = cms.EDProducer( "SeedingLayersEDProducer", +fragment.hltIter1L3MuonPixelLayerQuadrupletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", layerList = cms.vstring( 'BPix1+BPix2+BPix3+BPix4', 'BPix1+BPix2+BPix3+FPix1_pos', 'BPix1+BPix2+BPix3+FPix1_neg', @@ -77196,7 +79242,7 @@ FPix = cms.PSet( hitErrorRPhi = cms.double( 0.0051 ), TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), - skipClusters = cms.InputTag( "hltIter1L3MuonClustersRefRemovalNoVtx" ), + skipClusters = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), useErrorsFromParam = cms.bool( True ), hitErrorRZ = cms.double( 0.0036 ), HitProducer = cms.string( "hltSiPixelRecHits" ) @@ -77208,16 +79254,16 @@ BPix = cms.PSet( hitErrorRPhi = cms.double( 0.0027 ), TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), - skipClusters = cms.InputTag( "hltIter1L3MuonClustersRefRemovalNoVtx" ), + skipClusters = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), useErrorsFromParam = cms.bool( True ), hitErrorRZ = cms.double( 0.006 ), HitProducer = cms.string( "hltSiPixelRecHits" ) ), TIB = cms.PSet( ) ) -fragment.hltIter1L3MuonPixelTrackingRegionsNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", +fragment.hltIter1L3MuonPixelTrackingRegionsScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", RegionPSet = cms.PSet( - vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), zErrorVetex = cms.double( 0.1 ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), zErrorBeamSpot = cms.double( 24.2 ), @@ -77227,18 +79273,18 @@ nSigmaZBeamSpot = cms.double( 4.0 ), ptMin = cms.double( 0.3 ), mode = cms.string( "VerticesFixed" ), - input = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + input = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), searchOpt = cms.bool( False ), whereToUseMeasurementTracker = cms.string( "ForSiStrips" ), originRadius = cms.double( 0.05 ), - measurementTrackerName = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventNoVtx" ), + measurementTrackerName = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), precise = cms.bool( True ), deltaEta = cms.double( 0.3 ), deltaPhi = cms.double( 0.3 ) ) ) -fragment.hltIter1L3MuonPixelHitDoubletsNoVtx = cms.EDProducer( "HitPairEDProducer", - trackingRegions = cms.InputTag( "hltIter1L3MuonPixelTrackingRegionsNoVtx" ), +fragment.hltIter1L3MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIter1L3MuonPixelTrackingRegionsScoutingNoVtx" ), layerPairs = cms.vuint32( 0, 1, 2 ), clusterCheck = cms.InputTag( "hltIter1L3MuonPixelClusterCheck" ), produceSeedingHitSets = cms.bool( False ), @@ -77246,9 +79292,9 @@ trackingRegionsSeedingLayers = cms.InputTag( "" ), maxElementTotal = cms.uint32( 50000000 ), maxElement = cms.uint32( 0 ), - seedingLayers = cms.InputTag( "hltIter1L3MuonPixelLayerQuadrupletsNoVtx" ) + seedingLayers = cms.InputTag( "hltIter1L3MuonPixelLayerQuadrupletsScoutingNoVtx" ) ) -fragment.hltIter1L3MuonPixelHitQuadrupletsNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", +fragment.hltIter1L3MuonPixelHitQuadrupletsScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", CAHardPtCut = cms.double( 0.0 ), CAPhiCut_byTriplets = cms.VPSet( cms.PSet( seedingLayers = cms.string( "" ), @@ -77256,7 +79302,7 @@ ) ), extraHitRPhitolerance = cms.double( 0.032 ), - doublets = cms.InputTag( "hltIter1L3MuonPixelHitDoubletsNoVtx" ), + doublets = cms.InputTag( "hltIter1L3MuonPixelHitDoubletsScoutingNoVtx" ), fitFastCircle = cms.bool( True ), maxChi2 = cms.PSet( value2 = cms.double( 150.0 ), @@ -77280,7 +79326,7 @@ useBendingCorrection = cms.bool( True ), fitFastCircleChi2Cut = cms.bool( True ) ) -fragment.hltIter1L3MuonPixelSeedsNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer", +fragment.hltIter1L3MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer", SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), forceKinematicWithRegionDirection = cms.bool( False ), magneticField = cms.string( "ParabolicMf" ), @@ -77288,11 +79334,11 @@ OriginTransverseErrorMultiplier = cms.double( 1.0 ), TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), MinOneOverPtError = cms.double( 1.0 ), - seedingHitSets = cms.InputTag( "hltIter1L3MuonPixelHitQuadrupletsNoVtx" ), + seedingHitSets = cms.InputTag( "hltIter1L3MuonPixelHitQuadrupletsScoutingNoVtx" ), propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) ) -fragment.hltIter1L3MuonCkfTrackCandidatesNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", - src = cms.InputTag( "hltIter1L3MuonPixelSeedsNoVtx" ), +fragment.hltIter1L3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter1L3MuonPixelSeedsScoutingNoVtx" ), maxSeedsBeforeCleaning = cms.uint32( 1000 ), SimpleMagneticField = cms.string( "ParabolicMf" ), TransientInitialStateEstimatorParameters = cms.PSet( @@ -77301,7 +79347,7 @@ propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) ), TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), - MeasurementTrackerEvent = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventNoVtx" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), cleanTrajectoryAfterInOut = cms.bool( False ), useHitsSplitting = cms.bool( False ), RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), @@ -77312,12 +79358,12 @@ NavigationSchool = cms.string( "SimpleNavigationSchool" ), TrajectoryBuilder = cms.string( "" ) ) -fragment.hltIter1L3MuonCtfWithMaterialTracksNoVtx = cms.EDProducer( "TrackProducer", - src = cms.InputTag( "hltIter1L3MuonCkfTrackCandidatesNoVtx" ), +fragment.hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter1L3MuonCkfTrackCandidatesScoutingNoVtx" ), SimpleMagneticField = cms.string( "ParabolicMf" ), clusterRemovalInfo = cms.InputTag( "" ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), - MeasurementTrackerEvent = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventNoVtx" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), Fitter = cms.string( "hltESPFittingSmootherIT" ), useHitsSplitting = cms.bool( False ), MeasurementTracker = cms.string( "" ), @@ -77330,10 +79376,10 @@ useSimpleMF = cms.bool( True ), Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) ) -fragment.hltIter1L3MuonTrackCutClassifierPromptNoVtx = cms.EDProducer( "TrackCutClassifier", - src = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksNoVtx" ), +fragment.hltIter1L3MuonTrackCutClassifierPromptScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx" ), beamspot = cms.InputTag( "hltOnlineBeamSpot" ), - vertices = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), mva = cms.PSet( minPixelHits = cms.vint32( 0, 0, 2 ), @@ -77362,10 +79408,10 @@ ), ignoreVertices = cms.bool( False ) ) -fragment.hltIter1L3MuonTrackCutClassifierDetachedNoVtx = cms.EDProducer( "TrackCutClassifier", - src = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksNoVtx" ), +fragment.hltIter1L3MuonTrackCutClassifierDetachedScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx" ), beamspot = cms.InputTag( "hltOnlineBeamSpot" ), - vertices = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), mva = cms.PSet( minPixelHits = cms.vint32( 0, 0, 1 ), @@ -77394,26 +79440,26 @@ ), ignoreVertices = cms.bool( False ) ) -fragment.hltIter1L3MuonTrackCutClassifierMergedNoVtx = cms.EDProducer( "ClassifierMerger", - inputClassifiers = cms.vstring( 'hltIter1L3MuonTrackCutClassifierPromptNoVtx', - 'hltIter1L3MuonTrackCutClassifierDetachedNoVtx' ) +fragment.hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx = cms.EDProducer( "ClassifierMerger", + inputClassifiers = cms.vstring( 'hltIter1L3MuonTrackCutClassifierPromptScoutingNoVtx', + 'hltIter1L3MuonTrackCutClassifierDetachedScoutingNoVtx' ) ) -fragment.hltIter1L3MuonTrackSelectionHighPurityNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", +fragment.hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", minQuality = cms.string( "highPurity" ), copyExtras = cms.untracked.bool( True ), copyTrajectories = cms.untracked.bool( False ), - originalSource = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksNoVtx" ), - originalQualVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedNoVtx','QualityMasks' ), - originalMVAVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedNoVtx','MVAValues' ) + originalSource = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx','MVAValues' ) ) -fragment.hltIter1L3MuonMergedNoVtx = cms.EDProducer( "TrackListMerger", +fragment.hltIter1L3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", ShareFrac = cms.double( 0.19 ), writeOnlyTrkQuals = cms.bool( False ), MinPT = cms.double( 0.05 ), allowFirstHitShare = cms.bool( True ), copyExtras = cms.untracked.bool( True ), Epsilon = cms.double( -0.001 ), - selectedTrackQuals = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityNoVtx','hltIter1L3MuonTrackSelectionHighPurityNoVtx' ), + selectedTrackQuals = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx' ), indivShareFrac = cms.vdouble( 1.0, 1.0 ), MaxNormalizedChisq = cms.double( 1000.0 ), copyMVA = cms.bool( False ), @@ -77426,27 +79472,27 @@ ), MinFound = cms.int32( 3 ), hasSelector = cms.vint32( 0, 0 ), - TrackProducers = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityNoVtx','hltIter1L3MuonTrackSelectionHighPurityNoVtx' ), + TrackProducers = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx' ), trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), newQuality = cms.string( "confirmed" ) ) -fragment.hltIter2L3MuonClustersRefRemovalNoVtx = cms.EDProducer( "TrackClusterRemover", +fragment.hltIter2L3MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", trackClassifier = cms.InputTag( '','QualityMasks' ), minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), maxChi2 = cms.double( 16.0 ), - trajectories = cms.InputTag( "hltIter1L3MuonTrackSelectionHighPurityNoVtx" ), - oldClusterRemovalInfo = cms.InputTag( "hltIter1L3MuonClustersRefRemovalNoVtx" ), + trajectories = cms.InputTag( "hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), overrideTrkQuals = cms.InputTag( "" ), pixelClusters = cms.InputTag( "hltSiPixelClusters" ), TrackQuality = cms.string( "highPurity" ) ) -fragment.hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", - clustersToSkip = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), +fragment.hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter2L3MuonClustersRefRemovalScoutingNoVtx" ), OnDemand = cms.bool( False ), src = cms.InputTag( "hltSiStripClusters" ) ) -fragment.hltIter2L3MuonPixelLayerTripletsNoVtx = cms.EDProducer( "SeedingLayersEDProducer", +fragment.hltIter2L3MuonPixelLayerTripletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", layerList = cms.vstring( 'BPix1+BPix2+BPix3', 'BPix2+BPix3+BPix4', 'BPix1+BPix3+BPix4', @@ -77467,7 +79513,7 @@ FPix = cms.PSet( hitErrorRPhi = cms.double( 0.0051 ), TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), - skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), + skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalScoutingNoVtx" ), useErrorsFromParam = cms.bool( True ), hitErrorRZ = cms.double( 0.0036 ), HitProducer = cms.string( "hltSiPixelRecHits" ) @@ -77479,16 +79525,16 @@ BPix = cms.PSet( hitErrorRPhi = cms.double( 0.0027 ), TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), - skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), + skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalScoutingNoVtx" ), useErrorsFromParam = cms.bool( True ), hitErrorRZ = cms.double( 0.006 ), HitProducer = cms.string( "hltSiPixelRecHits" ) ), TIB = cms.PSet( ) ) -fragment.hltIter2L3MuonPixelTrackingRegionsNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", +fragment.hltIter2L3MuonPixelTrackingRegionsScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", RegionPSet = cms.PSet( - vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), zErrorVetex = cms.double( 0.05 ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), zErrorBeamSpot = cms.double( 24.2 ), @@ -77498,18 +79544,18 @@ nSigmaZBeamSpot = cms.double( 4.0 ), ptMin = cms.double( 0.8 ), mode = cms.string( "VerticesFixed" ), - input = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + input = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), searchOpt = cms.bool( False ), whereToUseMeasurementTracker = cms.string( "ForSiStrips" ), originRadius = cms.double( 0.025 ), - measurementTrackerName = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + measurementTrackerName = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), precise = cms.bool( True ), deltaEta = cms.double( 0.3 ), deltaPhi = cms.double( 0.3 ) ) ) -fragment.hltIter2L3MuonPixelHitDoubletsNoVtx = cms.EDProducer( "HitPairEDProducer", - trackingRegions = cms.InputTag( "hltIter2L3MuonPixelTrackingRegionsNoVtx" ), +fragment.hltIter2L3MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIter2L3MuonPixelTrackingRegionsScoutingNoVtx" ), layerPairs = cms.vuint32( 0, 1 ), clusterCheck = cms.InputTag( "hltIter2L3MuonPixelClusterCheck" ), produceSeedingHitSets = cms.bool( False ), @@ -77517,9 +79563,9 @@ trackingRegionsSeedingLayers = cms.InputTag( "" ), maxElementTotal = cms.uint32( 50000000 ), maxElement = cms.uint32( 0 ), - seedingLayers = cms.InputTag( "hltIter2L3MuonPixelLayerTripletsNoVtx" ) + seedingLayers = cms.InputTag( "hltIter2L3MuonPixelLayerTripletsScoutingNoVtx" ) ) -fragment.hltIter2L3MuonPixelHitTripletsNoVtx = cms.EDProducer( "CAHitTripletEDProducer", +fragment.hltIter2L3MuonPixelHitTripletsScoutingNoVtx = cms.EDProducer( "CAHitTripletEDProducer", CAThetaCut = cms.double( 0.004 ), CAPhiCut_byTriplets = cms.VPSet( cms.PSet( seedingLayers = cms.string( "" ), @@ -77533,7 +79579,7 @@ enabled = cms.bool( True ), pt2 = cms.double( 8.0 ) ), - doublets = cms.InputTag( "hltIter2L3MuonPixelHitDoubletsNoVtx" ), + doublets = cms.InputTag( "hltIter2L3MuonPixelHitDoubletsScoutingNoVtx" ), CAHardPtCut = cms.double( 0.3 ), SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), CAThetaCut_byTriplets = cms.VPSet( @@ -77545,7 +79591,7 @@ useBendingCorrection = cms.bool( True ), extraHitRPhitolerance = cms.double( 0.032 ) ) -fragment.hltIter2L3MuonPixelSeedsNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsEDProducer", +fragment.hltIter2L3MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsEDProducer", SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), forceKinematicWithRegionDirection = cms.bool( False ), magneticField = cms.string( "ParabolicMf" ), @@ -77553,11 +79599,11 @@ OriginTransverseErrorMultiplier = cms.double( 1.0 ), TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), MinOneOverPtError = cms.double( 1.0 ), - seedingHitSets = cms.InputTag( "hltIter2L3MuonPixelHitTripletsNoVtx" ), + seedingHitSets = cms.InputTag( "hltIter2L3MuonPixelHitTripletsScoutingNoVtx" ), propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) ) -fragment.hltIter2L3MuonCkfTrackCandidatesNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", - src = cms.InputTag( "hltIter2L3MuonPixelSeedsNoVtx" ), +fragment.hltIter2L3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter2L3MuonPixelSeedsScoutingNoVtx" ), maxSeedsBeforeCleaning = cms.uint32( 1000 ), SimpleMagneticField = cms.string( "ParabolicMf" ), TransientInitialStateEstimatorParameters = cms.PSet( @@ -77566,7 +79612,7 @@ propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) ), TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), - MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), cleanTrajectoryAfterInOut = cms.bool( False ), useHitsSplitting = cms.bool( False ), RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), @@ -77577,12 +79623,12 @@ NavigationSchool = cms.string( "SimpleNavigationSchool" ), TrajectoryBuilder = cms.string( "" ) ) -fragment.hltIter2L3MuonCtfWithMaterialTracksNoVtx = cms.EDProducer( "TrackProducer", - src = cms.InputTag( "hltIter2L3MuonCkfTrackCandidatesNoVtx" ), +fragment.hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter2L3MuonCkfTrackCandidatesScoutingNoVtx" ), SimpleMagneticField = cms.string( "ParabolicMf" ), clusterRemovalInfo = cms.InputTag( "" ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), - MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), Fitter = cms.string( "hltESPFittingSmootherIT" ), useHitsSplitting = cms.bool( False ), MeasurementTracker = cms.string( "" ), @@ -77595,10 +79641,10 @@ useSimpleMF = cms.bool( True ), Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) ) -fragment.hltIter2L3MuonTrackCutClassifierNoVtx = cms.EDProducer( "TrackCutClassifier", - src = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksNoVtx" ), +fragment.hltIter2L3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx" ), beamspot = cms.InputTag( "hltOnlineBeamSpot" ), - vertices = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), mva = cms.PSet( minPixelHits = cms.vint32( 0, 0, 0 ), @@ -77627,22 +79673,22 @@ ), ignoreVertices = cms.bool( False ) ) -fragment.hltIter2L3MuonTrackSelectionHighPurityNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", +fragment.hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", minQuality = cms.string( "highPurity" ), copyExtras = cms.untracked.bool( True ), copyTrajectories = cms.untracked.bool( False ), - originalSource = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksNoVtx" ), - originalQualVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierNoVtx','QualityMasks' ), - originalMVAVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierNoVtx','MVAValues' ) + originalSource = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) ) -fragment.hltIter2L3MuonMergedNoVtx = cms.EDProducer( "TrackListMerger", +fragment.hltIter2L3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", ShareFrac = cms.double( 0.19 ), writeOnlyTrkQuals = cms.bool( False ), MinPT = cms.double( 0.05 ), allowFirstHitShare = cms.bool( True ), copyExtras = cms.untracked.bool( True ), Epsilon = cms.double( -0.001 ), - selectedTrackQuals = cms.VInputTag( 'hltIter1L3MuonMergedNoVtx','hltIter2L3MuonTrackSelectionHighPurityNoVtx' ), + selectedTrackQuals = cms.VInputTag( 'hltIter1L3MuonMergedScoutingNoVtx','hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx' ), indivShareFrac = cms.vdouble( 1.0, 1.0 ), MaxNormalizedChisq = cms.double( 1000.0 ), copyMVA = cms.bool( False ), @@ -77655,11 +79701,11 @@ ), MinFound = cms.int32( 3 ), hasSelector = cms.vint32( 0, 0 ), - TrackProducers = cms.VInputTag( 'hltIter1L3MuonMergedNoVtx','hltIter2L3MuonTrackSelectionHighPurityNoVtx' ), + TrackProducers = cms.VInputTag( 'hltIter1L3MuonMergedScoutingNoVtx','hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx' ), trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), newQuality = cms.string( "confirmed" ) ) -fragment.hltMuonTkRelIsolationCut0p09MapNoVtx = cms.EDProducer( "L3MuonCombinedRelativeIsolationProducer", +fragment.hltMuonTkRelIsolationCut0p09MapScoutingNoVtx = cms.EDProducer( "L3MuonCombinedRelativeIsolationProducer", printDebug = cms.bool( False ), CutsPSet = cms.PSet( applyCutsORmaxNTracks = cms.bool( False ), @@ -77671,7 +79717,7 @@ ), TrkExtractorPSet = cms.PSet( Diff_z = cms.double( 0.2 ), - inputTrackCollection = cms.InputTag( "hltIter2L3MuonMergedNoVtx" ), + inputTrackCollection = cms.InputTag( "hltIter2L3MuonMergedScoutingNoVtx" ), Chi2Ndof_Max = cms.double( 1.0E64 ), BeamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), DR_Veto = cms.double( 0.01 ), @@ -77706,188 +79752,10 @@ ComponentName = cms.string( "CaloExtractor" ), Weight_E = cms.double( 1.0 ) ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + inputMuonCollection = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), UseRhoCorrectedCaloDeposits = cms.bool( False ), UseCaloIso = cms.bool( False ) ) -fragment.hltPreDSTDoubleMu3noVtxCaloScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltDimuon3L1Filtered0 = cms.EDFilter( "HLTMuonL1TFilter", - saveTags = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltL1sDoubleMuIorTripleMuIorQuadMu" ), - MinPt = cms.double( 0.0 ), - MinN = cms.int32( 2 ), - MaxEta = cms.double( 2.5 ), - CentralBxOnly = cms.bool( True ), - SelectQualities = cms.vint32( ), - CandTag = cms.InputTag( 'hltGtStage2Digis','Muon' ) -) -fragment.hltDimuon3L2PreFiltered0 = cms.EDFilter( "HLTMuonL2FromL1TPreFilter", - saveTags = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - CutOnChambers = cms.bool( False ), - PreviousCandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - MinPt = cms.double( 0.0 ), - MinN = cms.int32( 0 ), - SeedMapTag = cms.InputTag( "hltL2Muons" ), - MaxEta = cms.double( 2.5 ), - MinNhits = cms.vint32( 0 ), - MinDxySig = cms.double( -1.0 ), - MinDr = cms.double( -1.0 ), - AbsEtaBins = cms.vdouble( 0.0 ), - MaxDz = cms.double( 9999.0 ), - MatchToPreviousCand = cms.bool( True ), - CandTag = cms.InputTag( "hltL2MuonCandidatesNoVtx" ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinNchambers = cms.vint32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinNstations = cms.vint32( 0 ) -) -fragment.hltDoubleMu3L3FilteredNoVtx = cms.EDFilter( "HLTMuonDimuonL3Filter", - saveTags = cms.bool( True ), - ChargeOpt = cms.int32( 0 ), - MaxPtMin = cms.vdouble( 1.0E125 ), - FastAccept = cms.bool( False ), - MatchToPreviousCand = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), - InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), - PreviousCandIsL2 = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), - MaxPtBalance = cms.double( 999999.0 ), - MaxPtPair = cms.vdouble( 1.0E125 ), - MaxAcop = cms.double( 999.0 ), - MinPtMin = cms.vdouble( 3.0 ), - MaxInvMass = cms.vdouble( 9999.0 ), - MinPtMax = cms.vdouble( 0.0 ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinN = cms.int32( 1 ), - MaxDz = cms.double( 9999.0 ), - MinPtPair = cms.vdouble( 0.0 ), - CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - MinAcop = cms.double( -999.0 ), - MaxDCAMuMu = cms.double( 999999.0 ), - MinNhits = cms.int32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinPtBalance = cms.double( -1.0 ), - MaxEta = cms.double( 2.5 ), - L1MatchingdR = cms.double( 0.3 ), - MaxRapidityPair = cms.double( 999999.0 ), - CutCowboys = cms.bool( False ), - MinInvMass = cms.vdouble( 0.0 ) -) -fragment.hltDisplacedmumuVtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", - Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtx" ), - MinPt = cms.double( 0.0 ), - ChargeOpt = cms.int32( 0 ), - MaxEta = cms.double( 2.5 ), - MaxInvMass = cms.double( 99999.0 ), - MinPtPair = cms.double( 0.0 ), - matchToPrevious = cms.bool( True ), - MinInvMass = cms.double( 0.0 ) -) -fragment.hltPreDSTDoubleMu1noVtxCaloScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltDoubleMu1L3FilteredNoVtx = cms.EDFilter( "HLTMuonDimuonL3Filter", - saveTags = cms.bool( True ), - ChargeOpt = cms.int32( 0 ), - MaxPtMin = cms.vdouble( 1.0E125 ), - FastAccept = cms.bool( False ), - MatchToPreviousCand = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), - InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), - PreviousCandIsL2 = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), - MaxPtBalance = cms.double( 999999.0 ), - MaxPtPair = cms.vdouble( 1.0E125 ), - MaxAcop = cms.double( 999.0 ), - MinPtMin = cms.vdouble( 1.0 ), - MaxInvMass = cms.vdouble( 9999.0 ), - MinPtMax = cms.vdouble( 0.0 ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinN = cms.int32( 1 ), - MaxDz = cms.double( 9999.0 ), - MinPtPair = cms.vdouble( 0.0 ), - CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - MinAcop = cms.double( -999.0 ), - MaxDCAMuMu = cms.double( 999999.0 ), - MinNhits = cms.int32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinPtBalance = cms.double( -1.0 ), - MaxEta = cms.double( 2.5 ), - L1MatchingdR = cms.double( 0.3 ), - MaxRapidityPair = cms.double( 999999.0 ), - CutCowboys = cms.bool( False ), - MinInvMass = cms.vdouble( 0.0 ) -) -fragment.hltDisplacedmumu1VtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", - Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - PreviousCandTag = cms.InputTag( "hltDoubleMu1L3FilteredNoVtx" ), - MinPt = cms.double( 0.0 ), - ChargeOpt = cms.int32( 0 ), - MaxEta = cms.double( 2.5 ), - MaxInvMass = cms.double( 99999.0 ), - MinPtPair = cms.double( 0.0 ), - matchToPrevious = cms.bool( True ), - MinInvMass = cms.double( 0.0 ) -) -fragment.hltPreDSTDoubleMu3noVtxMass10PFScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltDoubleMu3L3FilteredNoVtxMass10 = cms.EDFilter( "HLTMuonDimuonL3Filter", - saveTags = cms.bool( True ), - ChargeOpt = cms.int32( 0 ), - MaxPtMin = cms.vdouble( 1.0E125 ), - FastAccept = cms.bool( False ), - MatchToPreviousCand = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), - InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), - PreviousCandIsL2 = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), - MaxPtBalance = cms.double( 999999.0 ), - MaxPtPair = cms.vdouble( 1.0E125 ), - MaxAcop = cms.double( 999.0 ), - MinPtMin = cms.vdouble( 3.0 ), - MaxInvMass = cms.vdouble( 9999.0 ), - MinPtMax = cms.vdouble( 0.0 ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinN = cms.int32( 1 ), - MaxDz = cms.double( 9999.0 ), - MinPtPair = cms.vdouble( 0.0 ), - CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - MinAcop = cms.double( -999.0 ), - MaxDCAMuMu = cms.double( 999999.0 ), - MinNhits = cms.int32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinPtBalance = cms.double( -1.0 ), - MaxEta = cms.double( 2.5 ), - L1MatchingdR = cms.double( 0.3 ), - MaxRapidityPair = cms.double( 999999.0 ), - CutCowboys = cms.bool( False ), - MinInvMass = cms.vdouble( 10.0 ) -) -fragment.hltDisplacedmumuMass10VtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", - Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtxMass10" ), - MinPt = cms.double( 0.0 ), - ChargeOpt = cms.int32( 0 ), - MaxEta = cms.double( 2.5 ), - MaxInvMass = cms.double( 99999.0 ), - MinPtPair = cms.double( 0.0 ), - matchToPrevious = cms.bool( True ), - MinInvMass = cms.double( 0.0 ) -) fragment.hltPreAK4CaloJet30 = cms.EDFilter( "HLTPrescaler", L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), offset = cms.uint32( 0 ) @@ -78976,6 +80844,99 @@ L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), offset = cms.uint32( 0 ) ) +fragment.hltPixelTracksForNoPUFilter = cms.EDProducer( "PixelTrackFilterByKinematicsProducer", + nSigmaTipMaxTolerance = cms.double( 0.0 ), + chi2 = cms.double( 1000.0 ), + nSigmaInvPtTolerance = cms.double( 0.0 ), + ptMin = cms.double( 0.0 ), + tipMax = cms.double( 999.0 ) +) +fragment.hltSelectorJets20L1FastJetForNoPU = cms.EDFilter( "EtMinCaloJetSelector", + filter = cms.bool( False ), + src = cms.InputTag( "hltAK4CaloJetsCorrectedIDPassed" ), + etMin = cms.double( 20.0 ) +) +fragment.hltPixelTracksForNoPUFitter = cms.EDProducer( "PixelFitterByHelixProjectionsProducer", + scaleErrorsForBPix1 = cms.bool( False ), + scaleFactor = cms.double( 0.65 ) +) +fragment.hltPixelTracksTrackingRegionsForNoPU = cms.EDProducer( "TauRegionalPixelSeedTrackingRegionEDProducer", + RegionPSet = cms.PSet( + JetSrc = cms.InputTag( "hltSelectorJets20L1FastJetForNoPU" ), + vertexSrc = cms.InputTag( "hltFastPVPixelVertices" ), + ptMin = cms.double( 0.5 ), + howToUseMeasurementTracker = cms.string( "Never" ), + deltaEtaRegion = cms.double( 0.5 ), + originHalfLength = cms.double( 0.5 ), + searchOpt = cms.bool( False ), + originRadius = cms.double( 0.1 ), + measurementTrackerName = cms.InputTag( "MeasurementTrackerEvent" ), + deltaPhiRegion = cms.double( 0.5 ) + ) +) +fragment.hltPixelTracksHitDoubletsForNoPU = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsForNoPU" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltPixelLayerQuadrupletsRegForBTag" ) +) +fragment.hltPixelTracksHitQuadrupletsForNoPU = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltPixelTracksHitDoubletsForNoPU" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 50.0 ), + value1 = cms.double( 200.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.002 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersRegForBTagCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.2 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +fragment.hltPixelTracksForNoPU = cms.EDProducer( "PixelTrackProducer", + Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), + passLabel = cms.string( "" ), + Fitter = cms.InputTag( "hltPixelTracksForNoPUFitter" ), + Filter = cms.InputTag( "hltPixelTracksForNoPUFilter" ), + SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsForNoPU" ) +) +fragment.hltCaloJetFromPV = cms.EDProducer( "PixelJetPuId", + MinEtaForwardJets = cms.double( 2.4 ), + MinTrackPt = cms.double( 0.6 ), + primaryVertex = cms.InputTag( "hltFastPVPixelVertices" ), + MinEtForwardJets = cms.double( 40.0 ), + MinGoodJetTrackPtRatio = cms.double( 0.045 ), + MaxTrackDistanceToJet = cms.double( 0.04 ), + UseForwardJetsAsNoPU = cms.bool( True ), + MinGoodJetTrackPt = cms.double( 1.8 ), + tracks = cms.InputTag( "hltPixelTracksForNoPU" ), + MaxTrackChi2 = cms.double( 20.0 ), + jets = cms.InputTag( "hltSelectorJets20L1FastJetForNoPU" ) +) fragment.hltCaloJetFromPVCollection20Filter = cms.EDFilter( "HLT1CaloJet", saveTags = cms.bool( True ), MinPt = cms.double( 20.0 ), @@ -81576,10 +83537,10 @@ minTauPtForNoIso = cms.double( 500.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -81589,7 +83550,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -81614,15 +83575,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauMediumHighPtRelaxedIsoRelativeIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -81667,10 +83629,10 @@ minTauPtForNoIso = cms.double( 500.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -81680,7 +83642,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -81705,15 +83667,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 200.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltPFTauMediumHighPtRelaxedIsoAbsOrRelIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -87718,86 +89681,64 @@ fedList = cms.vuint32( 1404 ) ) fragment.hltScoutingPFPacker = cms.EDProducer( "HLTScoutingPFProducer", - pfJetCollection = cms.InputTag( "hltAK4PFJets" ), + pfJetCollection = cms.InputTag( "hltAK4PixelOnlyPFJets" ), doCandidates = cms.bool( True ), - pfCandidateEtaCut = cms.double( 5.0 ), + pfCandidateEtaCut = cms.double( 3.0 ), pfJetTagCollection = cms.InputTag( 'hltCombinedSecondaryVertexBJetTagsPF','','@currentProcess' ), doMet = cms.bool( True ), - metCollection = cms.InputTag( 'hltPFMETProducer','','@currentProcess' ), + metCollection = cms.InputTag( 'hltPixelOnlyPFMETProducer','','@currentProcess' ), pfJetEtaCut = cms.double( 3.0 ), vertexCollection = cms.InputTag( 'hltPixelVertices','','@currentProcess' ), pfJetPtCut = cms.double( 20.0 ), mantissaPrecision = cms.int32( 23 ), - rho = cms.InputTag( 'hltFixedGridRhoFastjetAll','','@currentProcess' ), + rho = cms.InputTag( 'hltFixedGridRhoFastjetPixelOnlyAll','','@currentProcess' ), doJetTags = cms.bool( True ), - pfCandidateCollection = cms.InputTag( 'hltParticleFlow','','@currentProcess' ), + pfCandidateCollection = cms.InputTag( 'hltPixelOnlyParticleFlow','','@currentProcess' ), pfCandidatePtCut = cms.double( 0.6 ) ) fragment.hltScoutingMuonPacker = cms.EDProducer( "HLTScoutingMuonProducer", minVtxProbCut = cms.double( 0.001 ), - HcalPFClusterIsoMap = cms.InputTag( 'hltMuonHcalPFClusterIsoForMuons','','@currentProcess' ), - EcalPFClusterIsoMap = cms.InputTag( 'hltMuonEcalPFClusterIsoForMuons','','@currentProcess' ), - ChargedCandidates = cms.InputTag( 'hltL3MuonCandidates','','@currentProcess' ), - muonPtCut = cms.double( 3.0 ), - InputLinks = cms.InputTag( 'hltL3MuonsIterL3LinksNoVtx','','@currentProcess' ), - displacedvertexCollection = cms.InputTag( 'hltDisplacedmumuVtxProducerDoubleMu3NoVtx','','@currentProcess' ), - Tracks = cms.InputTag( "hltL3Muons" ), + HcalPFClusterIsoMap = cms.InputTag( 'hltMuonHcalPFClusterIsoForMuonsScoutingNoVtx','','@currentProcess' ), + EcalPFClusterIsoMap = cms.InputTag( 'hltMuonEcalMFPFClusterIsoForMuonsScoutingNoVtx','','@currentProcess' ), + ChargedCandidates = cms.InputTag( 'hltIterL3MuonCandidatesScoutingNoVtx','','@currentProcess' ), + InputMuons = cms.InputTag( "hltIterL3MuonsScoutingNoVtx" ), + TrackIsoMap = cms.InputTag( 'hltMuonTkRelIsolationCut0p09MapScoutingNoVtx','combinedRelativeIsoDeposits','@currentProcess' ), + displacedvertexCollection = cms.InputTag( 'hltDisplacedmumuVtxNoMatchingProducer','','@currentProcess' ), + Tracks = cms.InputTag( "hltIterL3MuonAndMuonFromL1MergedScoutingNoVtx" ), muonEtaCut = cms.double( 2.4 ), - TrackIsoMap = cms.InputTag( 'hltMuonTkRelIsolationCut0p09Map','combinedRelativeIsoDeposits','@currentProcess' ) + muonPtCut = cms.double( 0.0 ), + InputLinks = cms.InputTag( 'hltL3MuonsIterL3LinksScoutingNoVtx','','@currentProcess' ) ) fragment.hltScoutingEgammaPacker = cms.EDProducer( "HLTScoutingEgammaProducer", egammaEtaCut = cms.double( 2.5 ), HcalPFClusterIsoMap = cms.InputTag( 'hltEgammaHcalPFClusterIso','','@currentProcess' ), EgammaCandidates = cms.InputTag( 'hltEgammaCandidates','','@currentProcess' ), - egammaPtCut = cms.double( 4.0 ), + egammaPtCut = cms.double( 2.0 ), EcalPFClusterIsoMap = cms.InputTag( 'hltEgammaEcalPFClusterIso','','@currentProcess' ), - SigmaIEtaIEtaMap = cms.InputTag( 'hltEgammaClusterShape','sigmaIEtaIEta5x5','@currentProcess' ), + saveRecHitTiming = cms.bool( False ), + rechitMatrixSize = cms.int32( 15 ), MissingHitsMap = cms.InputTag( 'hltEgammaGsfTrackVars','MissingHits','@currentProcess' ), + OneOEMinusOneOPMap = cms.InputTag( 'hltEgammaGsfTrackVars','OneOESuperMinusOneOP','@currentProcess' ), HoverEMap = cms.InputTag( 'hltEgammaHoverE','','@currentProcess' ), EgammaGsfTracks = cms.InputTag( 'hltEgammaGsfTracks','','@currentProcess' ), - OneOEMinusOneOPMap = cms.InputTag( 'hltEgammaGsfTrackVars','OneOESuperMinusOneOP','@currentProcess' ), + mantissaPrecision = cms.int32( 10 ), + r9Map = cms.InputTag( 'hltEgammaR9ID','r95x5' ), + SigmaIEtaIEtaMap = cms.InputTag( 'hltEgammaClusterShape','sigmaIEtaIEta5x5','@currentProcess' ), DetaMap = cms.InputTag( 'hltEgammaGsfTrackVars','DetaSeed','@currentProcess' ), egammaHoverECut = cms.double( 1.0 ), - EleGsfTrackIsoMap = cms.InputTag( 'hltEgammaEleGsfTrackIso','','@currentProcess' ), - DphiMap = cms.InputTag( 'hltEgammaGsfTrackVars','Dphi','@currentProcess' ) + ecalRechitEB = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + ecalRechitEE = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + DphiMap = cms.InputTag( 'hltEgammaGsfTrackVars','Dphi','@currentProcess' ), + EleGsfTrackIsoMap = cms.InputTag( 'hltEgammaEleGsfTrackIso','','@currentProcess' ) ) fragment.hltScoutingPrimaryVertexPacker = cms.EDProducer( "HLTScoutingPrimaryVertexProducer", vertexCollection = cms.InputTag( 'hltPixelVertices','','@currentProcess' ) ) -fragment.hltPreScoutingCaloMuonOutput = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -fragment.hltScoutingCaloPacker = cms.EDProducer( "HLTScoutingCaloProducer", - metCollection = cms.InputTag( 'hltMet','','@currentProcess' ), - doMet = cms.bool( True ), - doJetBTags = cms.bool( True ), - caloJetPtCut = cms.double( 20.0 ), - vertexCollection = cms.InputTag( 'hltPixelVertices','','@currentProcess' ), - doJetIDTags = cms.bool( True ), - caloJetCollection = cms.InputTag( 'hltAK4CaloJetsIDPassed','','@currentProcess' ), - rho = cms.InputTag( 'hltFixedGridRhoFastjetAllCalo','','@currentProcess' ), - caloJetIDTagCollection = cms.InputTag( 'hltCaloJetFromPV','','@currentProcess' ), - caloJetBTagCollection = cms.InputTag( 'hltCombinedSecondaryVertexBJetTagsCalo','','@currentProcess' ), - caloJetEtaCut = cms.double( 3.0 ) -) -fragment.hltScoutingMuonPackerCalo = cms.EDProducer( "HLTScoutingMuonProducer", - minVtxProbCut = cms.double( 0.001 ), - HcalPFClusterIsoMap = cms.InputTag( "" ), - EcalPFClusterIsoMap = cms.InputTag( "" ), - ChargedCandidates = cms.InputTag( 'hltIterL3MuonCandidatesNoVtx','','@currentProcess' ), - muonPtCut = cms.double( 3.0 ), - InputLinks = cms.InputTag( 'hltL3MuonsIterL3LinksNoVtx','','@currentProcess' ), - displacedvertexCollection = cms.InputTag( 'hltDisplacedmumuVtxProducer','','@currentProcess' ), - Tracks = cms.InputTag( 'hltIterL3MuonAndMuonFromL1MergedNoVtx','','@currentProcess' ), - muonEtaCut = cms.double( 2.4 ), - TrackIsoMap = cms.InputTag( 'hltMuonTkRelIsolationCut0p09MapNoVtx','combinedRelativeIsoDeposits','@currentProcess' ) -) -fragment.hltScoutingPrimaryVertexPackerCaloMuon = cms.EDProducer( "HLTScoutingPrimaryVertexProducer", - vertexCollection = cms.InputTag( 'hltPixelVerticesL3MuonNoVtx','','@currentProcess' ) -) fragment.hltScoutingTrackPacker = cms.EDProducer( "HLTScoutingTrackProducer", - OtherTracks = cms.InputTag( "hltPixelTracksL3MuonNoVtx" ) + vtxMinDist = cms.double( 0.01 ), + OtherTracks = cms.InputTag( "hltPixelOnlyPFMuonMerging" ), + vertexCollection = cms.InputTag( "hltPixelVertices" ), + mantissaPrecision = cms.int32( 10 ) ) fragment.HLTL1UnpackerSequence = cms.Sequence( fragment.hltGtStage2Digis + fragment.hltGtStage2ObjectMap ) @@ -87898,12 +89839,12 @@ fragment.HLTEle33CaloIdLMWSequence = cms.Sequence( fragment.HLTEle33CaloIdLSequence + fragment.hltEle33CaloIdLMWPMS2Filter ) fragment.HLTDoubleEle33CaloIdLUnseededSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltDiEG33EtUnseededFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG33HEUnseededFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltDiEG33CaloIdLClusterShapeUnseededFilter + fragment.HLTElePixelMatchUnseededSequence + fragment.hltDiEle33CaloIdLPixelMatchUnseededFilter ) fragment.HLTDoubleEle33CaloIdLMWSequence = cms.Sequence( fragment.HLTDoubleEle33CaloIdLUnseededSequence + fragment.hltDiEle33CaloIdLMWPMS2UnseededFilter ) -fragment.HLTPFHcalClusteringForEgamma = cms.Sequence( fragment.hltRegionalTowerForEgamma + fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL ) +fragment.HLTPFHcalClustering = cms.Sequence( fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL ) fragment.HLTAK4CaloJetsPrePFRecoSequence = cms.Sequence( fragment.HLTDoCaloSequencePF + fragment.hltAK4CaloJetsPF ) fragment.HLTPreAK4PFJetsRecoSequence = cms.Sequence( fragment.HLTAK4CaloJetsPrePFRecoSequence + fragment.hltAK4CaloJetsPFEt5 ) fragment.HLTTrackReconstructionForPFNoMu = cms.Sequence( fragment.HLTDoLocalPixelSequence + fragment.HLTRecopixelvertexingSequence + fragment.HLTDoLocalStripSequence + fragment.HLTIterativeTrackingIter02 ) fragment.HLTTrackReconstructionForIsoElectronIter02 = cms.Sequence( fragment.HLTPreAK4PFJetsRecoSequence + fragment.HLTTrackReconstructionForPFNoMu ) -fragment.HLTDoubleEle24erWPTightGsfForTauSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltDoubleEGL1EGerFilter + fragment.hltDoubleEG24L1EGEtFilter + fragment.hltEgammaClusterShape + fragment.hltDoubleEle24erWPTightClusterShapeFilterForTau + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltDoubleEle24erWPTightHEFilterForTau + fragment.hltEgammaEcalPFClusterIso + fragment.hltDoubleEle24erWPTightEcalIsoFilterForTau + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltDoubleEle24erWPTightHcalIsoFilterForTau + fragment.HLTElePixelMatchSequence + fragment.hltDoubleEle24erWPTightPixelMatchFilterForTau + fragment.hltDoubleEle24erWPTightPMS2FilterForTau + fragment.HLTGsfElectronSequence + fragment.hltDoubleEle24erWPTightGsfOneOEMinusOneOPFilterForTau + fragment.hltDoubleEle24erWPTightGsfMissingHitsFilterForTau + fragment.hltDoubleEle24erWPTightGsfDetaFilterForTau + fragment.hltDoubleEle24erWPTightGsfDphiFilterForTau + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltDoubleEle24erWPTightGsfTrackIsoFilterForTau ) +fragment.HLTDoubleEle24erWPTightGsfForTauSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltDoubleEGL1EGerFilter + fragment.hltDoubleEG24L1EGEtFilter + fragment.hltEgammaClusterShape + fragment.hltDoubleEle24erWPTightClusterShapeFilterForTau + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltDoubleEle24erWPTightHEFilterForTau + fragment.hltEgammaEcalPFClusterIso + fragment.hltDoubleEle24erWPTightEcalIsoFilterForTau + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltDoubleEle24erWPTightHcalIsoFilterForTau + fragment.HLTElePixelMatchSequence + fragment.hltDoubleEle24erWPTightPixelMatchFilterForTau + fragment.hltDoubleEle24erWPTightPMS2FilterForTau + fragment.HLTGsfElectronSequence + fragment.hltDoubleEle24erWPTightGsfOneOEMinusOneOPFilterForTau + fragment.hltDoubleEle24erWPTightGsfMissingHitsFilterForTau + fragment.hltDoubleEle24erWPTightGsfDetaFilterForTau + fragment.hltDoubleEle24erWPTightGsfDphiFilterForTau + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltDoubleEle24erWPTightGsfTrackIsoFilterForTau ) fragment.HLTDoubleEle8CaloIdMGsfTrackIdMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaCandidatesWrapper + fragment.hltEG8EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG8HEFilter + fragment.hltEgammaClusterShape + fragment.hltEG8CaloIdMClusterShapeFilter + fragment.HLTElePixelMatchSequence + fragment.hltDoubleEle8CaloIdMPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltDoubleEle8CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + fragment.hltDoubleEle8CaloIdMGsfTrackIdMDetaFilter + fragment.hltDoubleEle8CaloIdMGsfTrackIdMDphiFilter ) fragment.HLTAK4PFJetsReconstructionSequence = cms.Sequence( fragment.HLTL2muonrecoSequence + fragment.HLTL3muonrecoSequence + fragment.HLTTrackReconstructionForPF + fragment.HLTParticleFlowSequence + fragment.hltAK4PFJets + fragment.hltAK4PFJetsLooseID + fragment.hltAK4PFJetsTightID ) fragment.HLTAK4PFCorrectorProducersSequence = cms.Sequence( fragment.hltAK4PFFastJetCorrector + fragment.hltAK4PFRelativeCorrector + fragment.hltAK4PFAbsoluteCorrector + fragment.hltAK4PFResidualCorrector + fragment.hltAK4PFCorrector ) @@ -87953,22 +89894,22 @@ fragment.HLTDoublePho33CaloIdLUnseededSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltDiEG33EtUnseededFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG33HEUnseededFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltDiEG33CaloIdLClusterShapeUnseededFilter ) fragment.HLTDoublePho70Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGNonIsoOrWithJetAndTauFilter + fragment.hltEG70EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG70HEFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltDiEG70EtUnseededFilter + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG70HEUnseededFilter ) fragment.HLTDoublePho85Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGNonIsoOrWithJetAndTauFilter + fragment.hltEG85EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG85HEFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltDiEG85EtUnseededFilter + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG85HEUnseededFilter ) -fragment.HLTEle20WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG20L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle20WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle20WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle20WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle20WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle20WPTightPixelMatchFilter + fragment.hltEle20WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle20WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle20WPTightGsfMissingHitsFilter + fragment.hltEle20WPTightGsfDetaFilter + fragment.hltEle20WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle20WPTightGsfTrackIsoFilter ) -fragment.HLTEle15WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG15L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle15WPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15WPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15WPLoose1EcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15WPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle15WPLoose1PixelMatchFilter + fragment.hltEle15WPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle15WPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle15WPLoose1GsfDetaFilter + fragment.hltEle15WPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15WPLoose1GsfTrackIsoFilter ) -fragment.HLTEle17WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG17L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle17WPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle17WPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle17WPLoose1EcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle17WPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle17WPLoose1PixelMatchFilter + fragment.hltEle17WPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle17WPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle17WPLoose1GsfDetaFilter + fragment.hltEle17WPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle17WPLoose1GsfTrackIsoFilter ) -fragment.HLTEle20WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG20L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle20WPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle20WPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle20WPLoose1EcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle20WPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle20WPLoose1PixelMatchFilter + fragment.hltEle20WPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle20WPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle20WPLoose1GsfDetaFilter + fragment.hltEle20WPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle20WPLoose1GsfTrackIsoFilter ) -fragment.HLTEle20Eta2p1WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrEtaRFilter + fragment.hltEG20L1SingleEGLowETOrEtaREtFilter + fragment.hltEgammaClusterShape + fragment.hltEle20erWPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle20erWPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle20erWPLoose1EcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle20erWPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle20erWPLoose1PixelMatchFilter + fragment.hltEle20erWPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle20erWPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle20erWPLoose1GsfDetaFilter + fragment.hltEle20erWPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle20erWPLoose1GsfTrackIsoFilter ) -fragment.HLTDiEle27L1DoubleEGWPTightCaloOnlySequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG27L1SingleAndDoubleEGEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle27L1DoubleEGWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle27L1DoubleEGWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle27L1DoubleEGWPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle27L1DoubleEGWPTightHcalIsoFilter + fragment.hltDiEG27L1SingleAndDoubleEGEtFilter + fragment.hltDiEle27L1DoubleEGWPTightClusterShapeFilter + fragment.hltDiEle27L1DoubleEGWPTightHEFilter + fragment.hltDiEle27L1DoubleEGWPTightEcalIsoFilter + fragment.hltDiEle27L1DoubleEGWPTightHcalIsoFilter ) -fragment.HLTEle27WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG27L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle27WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle27WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle27WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle27WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle27WPTightPixelMatchFilter + fragment.hltEle27WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle27WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle27WPTightGsfMissingHitsFilter + fragment.hltEle27WPTightGsfDetaFilter + fragment.hltEle27WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle27WPTightGsfTrackIsoFilter ) -fragment.HLTEle28WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG28L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle28WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle28WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle28WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle28WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle28WPTightPixelMatchFilter + fragment.hltEle28WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle28WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle28WPTightGsfMissingHitsFilter + fragment.hltEle28WPTightGsfDetaFilter + fragment.hltEle28WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle28WPTightGsfTrackIsoFilter ) -fragment.HLTEle30WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG30L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle30WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle30WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle30WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle30WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle30WPTightPixelMatchFilter + fragment.hltEle30WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle30WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle30WPTightGsfMissingHitsFilter + fragment.hltEle30WPTightGsfDetaFilter + fragment.hltEle30WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle30WPTightGsfTrackIsoFilter ) -fragment.HLTEle32WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG32L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle32WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle32WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle32WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle32WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle32WPTightPixelMatchFilter + fragment.hltEle32WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle32WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle32WPTightGsfMissingHitsFilter + fragment.hltEle32WPTightGsfDetaFilter + fragment.hltEle32WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle32WPTightGsfTrackIsoFilter ) -fragment.HLTEle35WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG35L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle35noerWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle35noerWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle35noerWPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle35noerWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle35noerWPTightPixelMatchFilter + fragment.hltEle35noerWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle35noerWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle35noerWPTightGsfMissingHitsFilter + fragment.hltEle35noerWPTightGsfDetaFilter + fragment.hltEle35noerWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle35noerWPTightGsfTrackIsoFilter ) -fragment.HLTSingleEleGsfL1EGMTSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltSingleEle35WPTightGsfL1EGMTL1MatchFilter + fragment.hltSingleEle35WPTightGsfL1EGMTEtFilter + fragment.hltEgammaClusterShape + fragment.hltSingleEle35WPTightGsfL1EGMTClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltSingleEle35WPTightGsfL1EGMTHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltSingleEle35WPTightGsfL1EGMTEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltSingleEle35WPTightGsfL1EGMTHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltSingleEle35WPTightGsfL1EGMTPixelMatchFilter + fragment.hltSingleEle35WPTightGsfL1EGMTPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltSingleEle35WPTightGsfL1EGMTOneOEMinusOneOPFilter + fragment.hltSingleEle35WPTightGsfL1EGMTChi2Filter + fragment.hltSingleEle35WPTightGsfL1EGMTMissingHitsFilter + fragment.hltSingleEle35WPTightGsfL1EGMTDetaFilter + fragment.hltSingleEle35WPTightGsfL1EGMTDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltSingleEle35WPTightGsfL1EGMTTrackIsoFilter ) -fragment.HLTEle38WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG38L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle38noerWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle38noerWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle38noerWPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle38noerWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle38noerWPTightPixelMatchFilter + fragment.hltEle38noerWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle38noerWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle38noerWPTightGsfMissingHitsFilter + fragment.hltEle38noerWPTightGsfDetaFilter + fragment.hltEle38noerWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle38noerWPTightGsfTrackIsoFilter ) -fragment.HLTEle40WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG40L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle40noerWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle40noerWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle40noerWPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle40noerWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle40noerWPTightPixelMatchFilter + fragment.hltEle40noerWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle40noerWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle40noerWPTightGsfMissingHitsFilter + fragment.hltEle40noerWPTightGsfDetaFilter + fragment.hltEle40noerWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle40noerWPTightGsfTrackIsoFilter ) -fragment.HLTEle32L1DoubleEGWPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG32L1SingleAndDoubleEGEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle32L1DoubleEGWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle32L1DoubleEGWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle32L1DoubleEGWPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle32L1DoubleEGWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle32L1DoubleEGWPTightPixelMatchFilter + fragment.hltEle32L1DoubleEGWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle32L1DoubleEGWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle32L1DoubleEGWPTightGsfMissingHitsFilter + fragment.hltEle32L1DoubleEGWPTightGsfDetaFilter + fragment.hltEle32L1DoubleEGWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle32L1DoubleEGWPTightGsfTrackIsoFilter ) -fragment.HLTEle24erWPTightGsfForTauSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1EGerAndTauFilter + fragment.hltEG24L1EGandTauEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle24erWPTightClusterShapeFilterForTau + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle24erWPTightHEFilterForTau + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle24erWPTightEcalIsoFilterForTau + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle24erWPTightHcalIsoFilterForTau + fragment.HLTElePixelMatchSequence + fragment.hltEle24erWPTightPixelMatchFilterForTau + fragment.hltEle24erWPTightPMS2FilterForTau + fragment.HLTGsfElectronSequence + fragment.hltEle24erWPTightGsfOneOEMinusOneOPFilterForTau + fragment.hltEle24erWPTightGsfMissingHitsFilterForTau + fragment.hltEle24erWPTightGsfDetaFilterForTau + fragment.hltEle24erWPTightGsfDphiFilterForTau + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle24erWPTightGsfTrackIsoFilterForTau ) +fragment.HLTEle20WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG20L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle20WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle20WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle20WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle20WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle20WPTightPixelMatchFilter + fragment.hltEle20WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle20WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle20WPTightGsfMissingHitsFilter + fragment.hltEle20WPTightGsfDetaFilter + fragment.hltEle20WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle20WPTightGsfTrackIsoFilter ) +fragment.HLTEle15WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG15L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle15WPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15WPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15WPLoose1EcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15WPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle15WPLoose1PixelMatchFilter + fragment.hltEle15WPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle15WPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle15WPLoose1GsfDetaFilter + fragment.hltEle15WPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15WPLoose1GsfTrackIsoFilter ) +fragment.HLTEle17WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG17L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle17WPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle17WPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle17WPLoose1EcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle17WPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle17WPLoose1PixelMatchFilter + fragment.hltEle17WPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle17WPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle17WPLoose1GsfDetaFilter + fragment.hltEle17WPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle17WPLoose1GsfTrackIsoFilter ) +fragment.HLTEle20WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrFilter + fragment.hltEG20L1SingleEGLowETOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle20WPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle20WPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle20WPLoose1EcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle20WPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle20WPLoose1PixelMatchFilter + fragment.hltEle20WPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle20WPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle20WPLoose1GsfDetaFilter + fragment.hltEle20WPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle20WPLoose1GsfTrackIsoFilter ) +fragment.HLTEle20Eta2p1WPLooseGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGLowETOrEtaRFilter + fragment.hltEG20L1SingleEGLowETOrEtaREtFilter + fragment.hltEgammaClusterShape + fragment.hltEle20erWPLoose1ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle20erWPLoose1HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle20erWPLoose1EcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle20erWPLoose1HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle20erWPLoose1PixelMatchFilter + fragment.hltEle20erWPLoose1PMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle20erWPLoose1GsfOneOEMinusOneOPFilter + fragment.hltEle20erWPLoose1GsfDetaFilter + fragment.hltEle20erWPLoose1GsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle20erWPLoose1GsfTrackIsoFilter ) +fragment.HLTDiEle27L1DoubleEGWPTightCaloOnlySequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG27L1SingleAndDoubleEGEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle27L1DoubleEGWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle27L1DoubleEGWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle27L1DoubleEGWPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle27L1DoubleEGWPTightHcalIsoFilter + fragment.hltDiEG27L1SingleAndDoubleEGEtFilter + fragment.hltDiEle27L1DoubleEGWPTightClusterShapeFilter + fragment.hltDiEle27L1DoubleEGWPTightHEFilter + fragment.hltDiEle27L1DoubleEGWPTightEcalIsoFilter + fragment.hltDiEle27L1DoubleEGWPTightHcalIsoFilter ) +fragment.HLTEle27WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG27L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle27WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle27WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle27WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle27WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle27WPTightPixelMatchFilter + fragment.hltEle27WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle27WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle27WPTightGsfMissingHitsFilter + fragment.hltEle27WPTightGsfDetaFilter + fragment.hltEle27WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle27WPTightGsfTrackIsoFilter ) +fragment.HLTEle28WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG28L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle28WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle28WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle28WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle28WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle28WPTightPixelMatchFilter + fragment.hltEle28WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle28WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle28WPTightGsfMissingHitsFilter + fragment.hltEle28WPTightGsfDetaFilter + fragment.hltEle28WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle28WPTightGsfTrackIsoFilter ) +fragment.HLTEle30WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG30L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle30WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle30WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle30WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle30WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle30WPTightPixelMatchFilter + fragment.hltEle30WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle30WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle30WPTightGsfMissingHitsFilter + fragment.hltEle30WPTightGsfDetaFilter + fragment.hltEle30WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle30WPTightGsfTrackIsoFilter ) +fragment.HLTEle32WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG32L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle32WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle32WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle32WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle32WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle32WPTightPixelMatchFilter + fragment.hltEle32WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle32WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle32WPTightGsfMissingHitsFilter + fragment.hltEle32WPTightGsfDetaFilter + fragment.hltEle32WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle32WPTightGsfTrackIsoFilter ) +fragment.HLTEle35WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG35L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle35noerWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle35noerWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle35noerWPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle35noerWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle35noerWPTightPixelMatchFilter + fragment.hltEle35noerWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle35noerWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle35noerWPTightGsfMissingHitsFilter + fragment.hltEle35noerWPTightGsfDetaFilter + fragment.hltEle35noerWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle35noerWPTightGsfTrackIsoFilter ) +fragment.HLTSingleEleGsfL1EGMTSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltSingleEle35WPTightGsfL1EGMTL1MatchFilter + fragment.hltSingleEle35WPTightGsfL1EGMTEtFilter + fragment.hltEgammaClusterShape + fragment.hltSingleEle35WPTightGsfL1EGMTClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltSingleEle35WPTightGsfL1EGMTHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltSingleEle35WPTightGsfL1EGMTEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltSingleEle35WPTightGsfL1EGMTHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltSingleEle35WPTightGsfL1EGMTPixelMatchFilter + fragment.hltSingleEle35WPTightGsfL1EGMTPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltSingleEle35WPTightGsfL1EGMTOneOEMinusOneOPFilter + fragment.hltSingleEle35WPTightGsfL1EGMTChi2Filter + fragment.hltSingleEle35WPTightGsfL1EGMTMissingHitsFilter + fragment.hltSingleEle35WPTightGsfL1EGMTDetaFilter + fragment.hltSingleEle35WPTightGsfL1EGMTDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltSingleEle35WPTightGsfL1EGMTTrackIsoFilter ) +fragment.HLTEle38WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG38L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle38noerWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle38noerWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle38noerWPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle38noerWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle38noerWPTightPixelMatchFilter + fragment.hltEle38noerWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle38noerWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle38noerWPTightGsfMissingHitsFilter + fragment.hltEle38noerWPTightGsfDetaFilter + fragment.hltEle38noerWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle38noerWPTightGsfTrackIsoFilter ) +fragment.HLTEle40WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEG40L1SingleEGOrEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle40noerWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle40noerWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle40noerWPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle40noerWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle40noerWPTightPixelMatchFilter + fragment.hltEle40noerWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle40noerWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle40noerWPTightGsfMissingHitsFilter + fragment.hltEle40noerWPTightGsfDetaFilter + fragment.hltEle40noerWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle40noerWPTightGsfTrackIsoFilter ) +fragment.HLTEle32L1DoubleEGWPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG32L1SingleAndDoubleEGEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle32L1DoubleEGWPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle32L1DoubleEGWPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle32L1DoubleEGWPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle32L1DoubleEGWPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle32L1DoubleEGWPTightPixelMatchFilter + fragment.hltEle32L1DoubleEGWPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle32L1DoubleEGWPTightGsfOneOEMinusOneOPFilter + fragment.hltEle32L1DoubleEGWPTightGsfMissingHitsFilter + fragment.hltEle32L1DoubleEGWPTightGsfDetaFilter + fragment.hltEle32L1DoubleEGWPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle32L1DoubleEGWPTightGsfTrackIsoFilter ) +fragment.HLTEle24erWPTightGsfForTauSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1EGerAndTauFilter + fragment.hltEG24L1EGandTauEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle24erWPTightClusterShapeFilterForTau + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle24erWPTightHEFilterForTau + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle24erWPTightEcalIsoFilterForTau + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle24erWPTightHcalIsoFilterForTau + fragment.HLTElePixelMatchSequence + fragment.hltEle24erWPTightPixelMatchFilterForTau + fragment.hltEle24erWPTightPMS2FilterForTau + fragment.HLTGsfElectronSequence + fragment.hltEle24erWPTightGsfOneOEMinusOneOPFilterForTau + fragment.hltEle24erWPTightGsfMissingHitsFilterForTau + fragment.hltEle24erWPTightGsfDetaFilterForTau + fragment.hltEle24erWPTightGsfDphiFilterForTau + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle24erWPTightGsfTrackIsoFilterForTau ) fragment.HLTRecoJetSequenceAK4UncorrectedPF = cms.Sequence( fragment.HLTDoCaloSequencePF + fragment.hltAK4CaloJetsPF ) fragment.HLTRecoJetSequenceAK4PrePF = cms.Sequence( fragment.HLTRecoJetSequenceAK4UncorrectedPF + fragment.hltAK4CaloJetsPFEt5 ) fragment.HLTParticleFlowSequenceForTaus = cms.Sequence( fragment.HLTPreshowerSequence + fragment.hltParticleFlowRecHitECALUnseeded + fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowRecHitHF + fragment.hltParticleFlowRecHitPSUnseeded + fragment.hltParticleFlowClusterECALUncorrectedUnseeded + fragment.hltParticleFlowClusterPSUnseeded + fragment.hltParticleFlowClusterECALUnseeded + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL + fragment.hltParticleFlowClusterHF + fragment.hltLightPFTracks + fragment.hltParticleFlowBlockForTaus + fragment.hltParticleFlowForTaus ) @@ -87995,8 +89936,7 @@ fragment.HLTDoFullUnpackingEgammaEcalMFSequence = cms.Sequence( fragment.hltEcalDigis + fragment.hltEcalPreshowerDigis + fragment.hltEcalUncalibRecHit + fragment.hltEcalDetIdToBeRecovered + fragment.hltEcalRecHit + fragment.hltEcalPreshowerRecHit ) fragment.HLTPFClusteringEcalMFForMuons = cms.Sequence( fragment.hltRecHitInRegionForMuonsMF + fragment.hltRecHitInRegionForMuonsES + fragment.hltParticleFlowRecHitECALForMuonsMF + fragment.hltParticleFlowRecHitPSForMuons + fragment.hltParticleFlowClusterECALUncorrectedForMuonsMF + fragment.hltParticleFlowClusterPSForMuons + fragment.hltParticleFlowClusterECALForMuonsMF ) fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalMFSequence + fragment.HLTDoLocalHcalSequence + fragment.hltTowerMakerForECALMF + fragment.hltTowerMakerForHCAL + fragment.hltFixedGridRhoFastjetECALMFForMuons + fragment.hltFixedGridRhoFastjetHCAL + fragment.HLTPFClusteringEcalMFForMuons + fragment.hltMuonEcalMFPFClusterIsoForMuons ) -fragment.HLTPFHcalRegClusteringForMuons = cms.Sequence( fragment.hltRegionalTowerForMuonsReg + fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL ) -fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons = cms.Sequence( fragment.HLTPFHcalRegClusteringForMuons + fragment.hltMuonHcalRegPFClusterIsoForMuons ) +fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons = cms.Sequence( fragment.HLTPFHcalClustering + fragment.hltMuonHcalRegPFClusterIsoForMuons ) fragment.HLTTrackReconstructionForIsoL3MuonIter02 = cms.Sequence( fragment.HLTPixelTrackingL3Muon + fragment.HLTDoLocalStripSequence + fragment.HLTIterativeTrackingL3MuonIter02 ) fragment.HLTMu20Eta2p1Tau24Eta2p1IsolationSequence = cms.Sequence( fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons + fragment.hltL3fBigORMu18erTauXXer2p1L1f0L2f10QL3Filtered20QL3pfecalIsoRhoFilteredEB0p14EE0p10 + fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons + fragment.hltL3fBigORMu18erTauXXer2p1L1f0L2f10QL3Filtered20QL3pfhcalIsoRhoFilteredHB0p16HE0p20 + fragment.HLTTrackReconstructionForIsoL3MuonIter02 + fragment.hltMuonTkRelIsolationCut0p07Map ) fragment.HLTLooseChargedIsoAntiMuonPFTau27Sequence = cms.Sequence( fragment.HLTLooseChargedIsoPFTauSequence + fragment.hltPFTau27 + fragment.hltSelectedPFTausTrackFinding + fragment.hltPFTau27Track + fragment.hltSelectedPFTausTrackFindingLooseChargedIsolation + fragment.hltPFTau27TrackLooseChargedIso + fragment.hltPFTauAgainstMuonDiscriminator + fragment.hltSelectedPFTausTrackFindingLooseChargedIsolationAgainstMuon + fragment.hltPFTau27TrackLooseChargedIsoAgainstMuon ) @@ -88099,7 +90039,7 @@ fragment.HLTMu8DiEle12CaloIdLTrackIdLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegL1MatchFilter + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegHEFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegOneOEMinusOneOPFilter + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegDetaFilter + fragment.hltMu8DiEle12CaloIdLTrackIdLElectronlegDphiFilter ) fragment.HLTSingleEle8CaloIdMGsfTrackIdMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaCandidatesWrapper + fragment.hltMu8Ele8EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu8Ele8HEFilter + fragment.hltEgammaClusterShape + fragment.hltMu8Ele8CaloIdMClusterShapeFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu8Ele8CaloIdMPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu8Ele8CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + fragment.hltMu8Ele8CaloIdMGsfTrackIdMDetaFilter + fragment.hltMu8Ele8CaloIdMGsfTrackIdMDphiFilter ) fragment.HLTMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegSequence = cms.Sequence( fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0 + fragment.HLTL2muonrecoSequence + cms.ignore(fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL2Filtered5) + fragment.HLTL3muonrecoSequence + cms.ignore(fragment.hltL1fForIterL3Mu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0) + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3Filtered8 + fragment.HLTL3muontrkisovvlSequence + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3IsoFiltered8 ) -fragment.HLTMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) +fragment.HLTMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) fragment.HLTBtagDeepCSVSequencePF = cms.Sequence( fragment.hltVerticesPF + fragment.hltVerticesPFSelector + fragment.hltVerticesPFFilter + fragment.hltPFJetForBtagSelector + fragment.hltPFJetForBtag + fragment.hltDeepBLifetimeTagInfosPF + fragment.hltDeepInclusiveVertexFinderPF + fragment.hltDeepInclusiveSecondaryVerticesPF + fragment.hltDeepTrackVertexArbitratorPF + fragment.hltDeepInclusiveMergedVerticesPF + fragment.hltDeepSecondaryVertexTagInfosPF + fragment.hltDeepCombinedSecondaryVertexBJetTagsInfos + fragment.hltDeepCombinedSecondaryVertexBJetTagsPF ) fragment.HLTBTagMuDiJet20L1FastJetSequenceL25 = cms.Sequence( fragment.HLTL2muonrecoSequence + fragment.hltBSoftMuonGetJetsFromDiJet20L1FastJet + fragment.hltSelector4JetsDiJet20L1FastJet + fragment.hltBSoftMuonDiJet20L1FastJetL25Jets + fragment.hltBSoftMuonDiJet20L1FastJetL25TagInfos + fragment.hltBSoftMuonDiJet20L1FastJetL25BJetTagsByDR ) fragment.HLTBTagMuDiJet20L1FastJetMu5SelSequenceL3 = cms.Sequence( fragment.HLTL3muonrecoNocandSequence + fragment.hltBSoftMuonMu5L3 + fragment.hltBSoftMuonDiJet20L1FastJetMu5SelL3TagInfos + fragment.hltBSoftMuonDiJet20L1FastJetMu5SelL3BJetTagsByDR ) @@ -88128,12 +90068,12 @@ fragment.HLTBTagMuAK8DiJet170L1FastJetMu5SelSequenceL3noalgo = cms.Sequence( fragment.HLTL3muonrecoNocandSequence + fragment.hltBSoftMuonMu5L3noalgo + fragment.hltBSoftMuonAK8DiJet170L1FastJetMu5SelL3TagInfosnoalgo + fragment.hltBSoftMuonAK8DiJet170L1FastJetMu5SelL3BJetTagsByDRnoalgo ) fragment.HLTBTagMuAK8Jet170L1FastJetDoubleMu5SelSequenceL3noalgo = cms.Sequence( fragment.HLTL3muonrecoSequence + fragment.hltL3fL1sDoubleMu5Filtered + fragment.hltBSoftMuonDoubleMu5L3noalgo + fragment.hltBSoftMuonAK8Jet170L1FastJetDoubleMu5SelL3TagInfosnoalgo + fragment.hltBSoftMuonAK8Jet170L1FastJetDoubleMu5SelL3BJetTagsByDRnoalgo ) fragment.HLTBTagMuJet300L1AK8FastJetMu5SelSequenceL3noalgo = cms.Sequence( fragment.HLTL3muonrecoNocandSequence + fragment.hltBSoftMuonMu5L3noalgo + fragment.hltBSoftMuonJet300L1AK8FastJetMu5SelL3TagInfosnoalgo + fragment.hltBSoftMuonJet300L1AK8FastJetMu5SelL3BJetTagsByDRnoalgo ) -fragment.HLTEle15Ele8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1LowETSingleAndDoubleEGOrPairFilter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg2Filter + fragment.hltEgammaClusterShape + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg2Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + fragment.HLTElePixelMatchSequence + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg2Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg2Filter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) -fragment.HLTEle23Ele12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrPairFilter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg2Filter + fragment.hltEgammaClusterShape + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg2Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + fragment.HLTElePixelMatchSequence + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg2Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg2Filter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) +fragment.HLTEle15Ele8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1LowETSingleAndDoubleEGOrPairFilter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg2Filter + fragment.hltEgammaClusterShape + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg2Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + fragment.HLTElePixelMatchSequence + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg2Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg2Filter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + fragment.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) +fragment.HLTEle23Ele12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrPairFilter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg2Filter + fragment.hltEgammaClusterShape + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg2Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + fragment.HLTElePixelMatchSequence + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg2Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg2Filter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + fragment.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) fragment.HLTMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegSequence = cms.Sequence( fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL1Filtered0 + fragment.HLTL2muonrecoSequence + cms.ignore(fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL2Filtered10) + fragment.HLTL3muonrecoSequence + cms.ignore(fragment.hltL1fForIterL3Mu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL1Filtered0) + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL3Filtered23 + fragment.HLTL3muontrkisovvlSequence + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL3IsoFiltered23 ) -fragment.HLTMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDetaFilter + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) +fragment.HLTMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDetaFilter + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) fragment.HLTMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegSequence = cms.Sequence( fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0 + fragment.HLTL2muonrecoSequence + cms.ignore(fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL2Filtered5) + fragment.HLTL3muonrecoSequence + cms.ignore(fragment.hltL1fForIterL3Mu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0) + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3Filtered12 + fragment.HLTL3muontrkisovvlSequence + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3IsoFiltered12 ) -fragment.HLTMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) +fragment.HLTMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) fragment.HLTMu12DoubleUnSeededPho20Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltEG20EtUnseededFilter + fragment.HLTDoLocalHcalSequence + fragment.hltTowerMakerForAll + fragment.hltEgammaHoverEUnseeded + fragment.hltMu12DiEG20HEUnseededFilter ) fragment.HLTPho20CaloIdLV2TripleSeededSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1TripleEGOrDoubleEGOrSingleEG + fragment.hltEG20EtL1TripleEGFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG20HEL1TripleEGFilter + fragment.hltEgammaClusterShape + fragment.hltEG20CaloIdLV2ClusterShapeL1TripleEGFilter ) fragment.HLTTriplePho20CaloIdLV2UnseededSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltEG20EtUnseededFilter + fragment.HLTDoLocalHcalSequence + fragment.hltEgammaHoverEUnseeded + fragment.hltEG20HEUnseededFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltTriEG20CaloIdLV2ClusterShapeUnseededFilter ) @@ -88154,22 +90094,22 @@ fragment.HLTPhoton175Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + fragment.hltEG175EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG175HEFilter ) fragment.HLTPhoton200Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + fragment.hltEG200EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG200HEFilter ) fragment.HLTTrackReconstructionForIsoForPhotons = cms.Sequence( fragment.HLTPreAK4PFJetsRecoSequence + fragment.HLTTrackReconstructionForPFNoMu ) -fragment.HLTPhoton100EBTightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG100EBTightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG100EBTightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG100EBTightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG100EBTightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG100EBTightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG100EBTightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG100EBTightIDTightIsoTrackIsoFilter ) -fragment.HLTPhoton110EBTightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG110EBTightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG110EBTightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG110EBTightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG110EBTightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG110EBTightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG110EBTightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG110EBTightIDTightIsoTrackIsoFilter ) -fragment.HLTPhoton120EBTightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG120EBTightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG120EBTightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG120EBTightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG120EBTightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG120EBTightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG120EBTightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG120EBTightIDTightIsoTrackIsoFilter ) +fragment.HLTPhoton100EBTightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG100EBTightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG100EBTightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG100EBTightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG100EBTightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG100EBTightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG100EBTightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG100EBTightIDTightIsoTrackIsoFilter ) +fragment.HLTPhoton110EBTightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG110EBTightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG110EBTightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG110EBTightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG110EBTightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG110EBTightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG110EBTightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG110EBTightIDTightIsoTrackIsoFilter ) +fragment.HLTPhoton120EBTightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG120EBTightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG120EBTightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG120EBTightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG120EBTightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG120EBTightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG120EBTightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG120EBTightIDTightIsoTrackIsoFilter ) fragment.HLTPhoton100EBHE10Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG100EBHE10EtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG100EBHE10HEFilter ) fragment.HLTPhoton100EEHE10Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG100EEHE10EtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG100EEHE10HEFilter ) -fragment.HLTPhoton100EETightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG100EETightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG100EETightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG100EETightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG100EETightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG100EETightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG100EETightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG100EETightIDTightIsoTrackIsoFilter ) -fragment.HLTPhoton50R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG50R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG50R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG50R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG50R9Id90HE10IsoMTrackIsoFilter ) -fragment.HLTPhoton75R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG75R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG75R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG75R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG75R9Id90HE10IsoMTrackIsoFilter ) -fragment.HLTPhoton75R9Id90HE10IsoMEBOnlySequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG75R9Id90HE10IsoMEBOnlyEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG75R9Id90HE10IsoMEBOnlyHEFilter + fragment.hltEgammaR9ID + fragment.hltEG75R9Id90HE10IsoMEBOnlyR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMEBOnlyEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMEBOnlyHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG75R9Id90HE10IsoMEBOnlyTrackIsoFilter ) -fragment.HLTPhoton90R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG90R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG90R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG90R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG90R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG90R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG90R9Id90HE10IsoMTrackIsoFilter ) -fragment.HLTPhoton120R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG120R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG120R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG120R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG120R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG120R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG120R9Id90HE10IsoMTrackIsoFilter ) -fragment.HLTPhoton165R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG165R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG165R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG165R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG165R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG165R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG165R9Id90HE10IsoMTrackIsoFilter ) +fragment.HLTPhoton100EETightIDTightIsoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG100EETightIDTightIsoEtFilter + fragment.hltEgammaClusterShape + fragment.hltEG100EETightIDTightIsoClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG100EETightIDTightIsoHEFilter + fragment.hltEgammaR9ID + fragment.hltEG100EETightIDTightIsoR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG100EETightIDTightIsotEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG100EETightIDTightIsoHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG100EETightIDTightIsoTrackIsoFilter ) +fragment.HLTPhoton50R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG50R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG50R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG50R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG50R9Id90HE10IsoMTrackIsoFilter ) +fragment.HLTPhoton75R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG75R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG75R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG75R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG75R9Id90HE10IsoMTrackIsoFilter ) +fragment.HLTPhoton75R9Id90HE10IsoMEBOnlySequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG75R9Id90HE10IsoMEBOnlyEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG75R9Id90HE10IsoMEBOnlyHEFilter + fragment.hltEgammaR9ID + fragment.hltEG75R9Id90HE10IsoMEBOnlyR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMEBOnlyEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG75R9Id90HE10IsoMEBOnlyHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG75R9Id90HE10IsoMEBOnlyTrackIsoFilter ) +fragment.HLTPhoton90R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG90R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG90R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG90R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG90R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG90R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG90R9Id90HE10IsoMTrackIsoFilter ) +fragment.HLTPhoton120R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG120R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG120R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG120R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG120R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG120R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG120R9Id90HE10IsoMTrackIsoFilter ) +fragment.HLTPhoton165R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG165R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG165R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG165R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG165R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG165R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG165R9Id90HE10IsoMTrackIsoFilter ) fragment.HLTDiphoton30L22R9Id85b90eORIso60CaloId15b35eANDHE12R9Id50b80eSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG30L1SingleAndDoubleEGOrEtFilter + fragment.hltEgammaR9ID + fragment.hltEG30LR9Id50b80eR9IdFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG30LHE12R9Id50b80eHEFilter + cms.ignore(fragment.hltEG30LR9Id85b90eHE12R9Id50b80eR9IdLastFilter) + fragment.hltEgammaClusterShape + cms.ignore(fragment.hltEG30LCaloId15b35eHE12R9Id50b80eClusterShapeFilter) + fragment.hltEgammaEcalPFClusterIso + cms.ignore(fragment.hltEG30LIso60CaloId15b35eHE12R9Id50b80eEcalIsoLastFilter) + fragment.hltEG30LRId85ORIso60CaloId15b35eANDHE12R9Id50b80eLegCombLastFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltDiEG22EtEta2p55UnseededFilter + fragment.hltEgammaR9IDUnseeded + fragment.hltDiEG22R9Id50b80eR9IdUnseededFilter + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG22HE12R9Id50b80eHEUnseededFilter + cms.ignore(fragment.hltEG22R9Id85b90eHE12R9Id50b80eR9UnseededLastFilter) + fragment.hltEgammaClusterShapeUnseeded + cms.ignore(fragment.hltEG22CaloId15b35eHE12R9Id50b80eClusterShapeUnseededFilter) + fragment.hltEgammaEcalPFClusterIsoUnseeded + cms.ignore(fragment.hltEG22Iso60CaloId15b35eHE12R9Id50b80eEcalIsoUnseededFilter) + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIsoUnseeded + cms.ignore(fragment.hltEG22Iso60CaloId15b35eHE12R9Id50b80eTrackIsoUnseededLastFilter) ) fragment.HLTDiphoton30PV18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55NewPixelMatchSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG30L1SingleAndDoubleEGOrEtFilter + fragment.hltEgammaR9ID + fragment.hltEG30PVR9Id50b80eR9IdFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG30PVHE10R9Id50b80eHEFilter + fragment.hltEG30PVR9Idb85e90HE10R9Id50b80eR9IdLastFilter + fragment.hltEgammaClusterShape + fragment.hltEG30PVCaloId15b35eHE10R9Id50b80eClusterShapeFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG30PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoFilter + fragment.hltEG30PVRId85ANDIso60CaloId15b35eANDHE10R9Id50b80eLegCombNewPixelMatchLastFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltDiEG18EtUnseededFilter + fragment.hltEgammaR9IDUnseeded + fragment.hltDiEG18PVR9Id50b80eR9IdUnseededFilter + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG18PVHE10R9Id50b80eHEUnseededFilter + fragment.HLTElePixelMatchUnseededSequence + fragment.hltDiEG18PVNewPixelMatchPMS2Filter + fragment.hltEG18PVR9Idb85e90HE10R9Id50b80eR9NewPixelMatchUnseededLastFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltEG18PVCaloId15b35eHE10R9Id50b80eClusterShapeNewPixelMatchUnseededFilter + fragment.hltEgammaEcalPFClusterIsoUnseeded + fragment.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoNewPixelMatchUnseededFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIsoUnseeded + fragment.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eTrackIsoUnseededNewPixelMatchLastFilter + fragment.hltDiEG18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55CombMassNewPixelMatchLastFilter ) fragment.HLTDiphoton30PV18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55NoPixelVetoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG30L1SingleAndDoubleEGOrEtFilter + fragment.hltEgammaR9ID + fragment.hltEG30PVR9Id50b80eR9IdFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG30PVHE10R9Id50b80eHEFilter + fragment.hltEG30PVR9Idb85e90HE10R9Id50b80eR9IdLastFilter + fragment.hltEgammaClusterShape + fragment.hltEG30PVCaloId15b35eHE10R9Id50b80eClusterShapeFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG30PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoFilter + fragment.hltEG30PVRId85ANDIso60CaloId15b35eANDHE10R9Id50b80eLegCombNoPixelVetoLastFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltDiEG18EtUnseededFilter + fragment.hltEgammaR9IDUnseeded + fragment.hltDiEG18PVR9Id50b80eR9IdUnseededFilter + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG18PVHE10R9Id50b80eHEUnseededFilter + fragment.hltEG18PVR9Idb85e90HE10R9Id50b80eR9NoPixelVetoUnseededLastFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltEG18PVCaloId15b35eHE10R9Id50b80eClusterShapeNoPixelVetoUnseededFilter + fragment.hltEgammaEcalPFClusterIsoUnseeded + fragment.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoNoPixelVetoUnseededFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIsoUnseeded + fragment.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eTrackIsoUnseededNoPixelVetoLastFilter + fragment.hltDiEG18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55CombMassNoPixelVetoLastFilter ) -fragment.HLTPhoton35R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1EGAndTauFilter + fragment.hltEG35R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG35R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG35R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG35R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG35R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG35R9Id90HE10IsoMTrackIsoFilter ) +fragment.HLTPhoton35R9Id90HE10IsoMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1EGAndTauFilter + fragment.hltEG35R9Id90HE10IsoMEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG35R9Id90HE10IsoMHEFilter + fragment.hltEgammaR9ID + fragment.hltEG35R9Id90HE10IsoMR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG35R9Id90HE10IsoMEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG35R9Id90HE10IsoMHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG35R9Id90HE10IsoMTrackIsoFilter ) fragment.HLTMediumChargedIsoPFTauSequence = cms.Sequence( fragment.hltPFTauMediumAbsoluteChargedIsolationDiscriminator + fragment.hltPFTauMediumRelativeChargedIsolationDiscriminator + fragment.hltPFTauMediumAbsOrRelChargedIsolationDiscriminator ) fragment.HLTMediumChargedIsoPFTau35Sequence = cms.Sequence( fragment.HLTMediumChargedIsoPFTauSequence + fragment.hltPFTau35 + fragment.hltSelectedPFTausTrackFinding + fragment.hltPFTau35Track + fragment.hltPFTau2Prongs + fragment.hltSelectedPFTausTrackFindingMediumChargedIsolation + fragment.hltPFTau35TrackMediumChargedIso ) fragment.HLTIterativeTrackingTau3muNoL1MassIteration0 = cms.Sequence( fragment.hltPixelTracksForSeedsTau3muNoL1MassFilter + fragment.hltPixelTracksForSeedsTau3muNoL1MassFitter + fragment.hltPixelTracksTrackingRegionsForSeedsTau3muNoL1Mass + fragment.hltPixelLayerQuadruplets + fragment.hltPixelTracksHitDoubletsForSeedsTau3muNoL1Mass + fragment.hltPixelTracksHitQuadrupletsForSeedsTau3muNoL1Mass + fragment.hltPixelTracksForSeedsTau3muNoL1Mass + fragment.hltIter0DisplacedTau3muNoL1MassPixelSeedsFromPixelTracks + fragment.hltIter0DisplacedTau3muNoL1MassCkfTrackCandidates + fragment.hltIter0DisplacedTau3muNoL1MassCtfWithMaterialTracks + fragment.hltIter0DisplacedTau3muNoL1MassTrackCutClassifier + fragment.hltIter0DisplacedTau3muNoL1MassTrackSelectionHighPurity ) @@ -88190,13 +90130,13 @@ fragment.HLT2PromptTrackRequirementIter0DisplacedJetsMidPt = cms.Sequence( fragment.hltL3DisplacedDijetFullTracksJetTracksAssociatorAtVertexMidPt + fragment.hltL3DisplacedDijet100FullTracksTrackIPProducerMidPt + fragment.hltL3DisplacedDijetFullTracksJetTagProducerFromIPMidPt + fragment.hltTwoPromptHLTL3DisplacedDijetFullTracksHLTCaloJetTagFilterMidPt ) fragment.HLT2PromptTrackRequirementIter12DisplacedJetsMidPt = cms.Sequence( fragment.hltL4DisplacedDijetFullTracksJetPromptTracksAssociatorAtVertexMidPt + fragment.hltL4PromptDisplacedDijetFullTracksTrackIPProducerMidPt + fragment.hltL4PromptDisplacedDijetFullTracksJetTagProducerFromIPMidPt + fragment.hltL4PromptDisplacedDijetFullTracksHLTCaloJetTagFilterMidPt ) fragment.HLTDisplacedTrackRequirementDisplacedJetsMidPt = cms.Sequence( fragment.hltL4DisplacedDijetFullTracksJetTracksAssociatorAtVertexMidPt + fragment.hltL4TaggedDisplacedDijetFullTracksTrackIPProducerMidPt + fragment.hltL4DisplacedDijetFullTracksJetTagProducerFromIPMidPt + fragment.hltL4DisplacedDijetFullTracksHLTCaloJetTagFilterMidPt ) -fragment.HLTEle30erJetC34WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1IsoEG30erJetC34drMin0p3Filter + fragment.hltEG30L1IsoEGerJetC34drMin0p3EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle30erJetC34WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle30erJetC34WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle30erJetC34WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle30erJetC34WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle30erJetC34WPTightPixelMatchFilter + fragment.hltEle30erJetC34WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle30erJetC34WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle30erJetC34WPTightGsfMissingHitsFilter + fragment.hltEle30erJetC34WPTightGsfDetaFilter + fragment.hltEle30erJetC34WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle30erJetC34WPTightGsfTrackIsoFilter ) -fragment.HLTEle28erHTT100WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1IsoEG28erHTT100Filter + fragment.hltEG28L1IsoEG28erHTT100EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle28erHTT100WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle28erHTT100WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle28erHTT100WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle28erHTT100WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle28erHTT100WPTightPixelMatchFilter + fragment.hltEle28erHTT100WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle28erHTT100WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle28erHTT100WPTightGsfMissingHitsFilter + fragment.hltEle28erHTT100WPTightGsfDetaFilter + fragment.hltEle28erHTT100WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle28erHTT100WPTightGsfTrackIsoFilter ) +fragment.HLTEle30erJetC34WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1IsoEG30erJetC34drMin0p3Filter + fragment.hltEG30L1IsoEGerJetC34drMin0p3EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle30erJetC34WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle30erJetC34WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle30erJetC34WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle30erJetC34WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle30erJetC34WPTightPixelMatchFilter + fragment.hltEle30erJetC34WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle30erJetC34WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle30erJetC34WPTightGsfMissingHitsFilter + fragment.hltEle30erJetC34WPTightGsfDetaFilter + fragment.hltEle30erJetC34WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle30erJetC34WPTightGsfTrackIsoFilter ) +fragment.HLTEle28erHTT100WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1IsoEG28erHTT100Filter + fragment.hltEG28L1IsoEG28erHTT100EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle28erHTT100WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle28erHTT100WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle28erHTT100WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle28erHTT100WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle28erHTT100WPTightPixelMatchFilter + fragment.hltEle28erHTT100WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle28erHTT100WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle28erHTT100WPTightGsfMissingHitsFilter + fragment.hltEle28erHTT100WPTightGsfDetaFilter + fragment.hltEle28erHTT100WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle28erHTT100WPTightGsfTrackIsoFilter ) fragment.HLTPFHcalClusteringForEgammaUnseeded = cms.Sequence( fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowRecHitHF + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL + fragment.hltParticleFlowClusterHFForEgammaUnseeded ) -fragment.HLTEle28HighEtaSC20Mass55Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEle28HighEtaSC20EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle28HighEtaSC20ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle28HighEtaSC20HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle28HighEtaSC20EcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle28HighEtaSC20HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle28HighEtaSC20PixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle28HighEtaSC20OneOEMinusOneOPFilter + fragment.hltEle28HighEtaSC20DetaFilter + fragment.hltEle28HighEtaSC20DphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle28HighEtaSC20TrackIsoFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltDiEG20EtUnseededFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltEle28HighEtaSC20ClusterShapeUnseededFilter + fragment.hltEgammaEcalPFClusterIsoUnseeded + fragment.hltEle28HighEtaSC20EcalIsoFilterUnseeded + fragment.hltEgammaHoverEUnseeded + fragment.hltEle28HighEtaSC20HEFilterUnseeded + fragment.HLTPFHcalClusteringForEgammaUnseeded + fragment.hltEgammaHcalPFClusterIsoUnseeded + fragment.hltEle28HighEtaSC20HcalIsoFilterUnseeded + fragment.hltHighEtaSC20Selector + fragment.hltHighEtaSC20SelectorFilter + fragment.hltEle28HighEtaSC20Mass55Filter ) +fragment.HLTEle28HighEtaSC20Mass55Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGOrFilter + fragment.hltEle28HighEtaSC20EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle28HighEtaSC20ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle28HighEtaSC20HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle28HighEtaSC20EcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle28HighEtaSC20HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle28HighEtaSC20PixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle28HighEtaSC20OneOEMinusOneOPFilter + fragment.hltEle28HighEtaSC20DetaFilter + fragment.hltEle28HighEtaSC20DphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle28HighEtaSC20TrackIsoFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltDiEG20EtUnseededFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltEle28HighEtaSC20ClusterShapeUnseededFilter + fragment.hltEgammaEcalPFClusterIsoUnseeded + fragment.hltEle28HighEtaSC20EcalIsoFilterUnseeded + fragment.hltEgammaHoverEUnseeded + fragment.hltEle28HighEtaSC20HEFilterUnseeded + fragment.HLTPFHcalClusteringForEgammaUnseeded + fragment.hltEgammaHcalPFClusterIsoUnseeded + fragment.hltEle28HighEtaSC20HcalIsoFilterUnseeded + fragment.hltHighEtaSC20Selector + fragment.hltHighEtaSC20SelectorFilter + fragment.hltEle28HighEtaSC20Mass55Filter ) fragment.HLTPhoton23Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGDoubleMu4OSEG12ORDoubleMu5OSEG12Filter + fragment.hltEG23EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG23HEFilter ) -fragment.HLTEle15VVVLGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5OpenFilter + fragment.hltEG15EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle15VVVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15VVVLHEFilter + fragment.hltEgammaEcalPFClusterIsoR02 + fragment.hltEle15VVVLEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoR02 + fragment.hltEle15VVVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle15VVVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle15VVVLGsfOneOEMinusOneOPFilter + fragment.hltEle15VVVLGsfChi2Filter + fragment.hltEle15VVVLGsfMissingHitsFilter + fragment.hltEle15VVVLGsfDetaFilter + fragment.hltEle15VVVLGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15VVVLGsfTrackIsoFilter ) -fragment.HLTEle50VVVLGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5OpenFilter + fragment.hltEG50IsoVVVLEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle50VVVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle50VVVLHEFilter + fragment.hltEgammaEcalPFClusterIsoR02 + fragment.hltEle50VVVLEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoR02 + fragment.hltEle50VVVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle50VVVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle50VVVLGsfOneOEMinusOneOPFilter + fragment.hltEle50VVVLGsfChi2Filter + fragment.hltEle50VVVLGsfMissingHitsFilter + fragment.hltEle50VVVLGsfDetaFilter + fragment.hltEle50VVVLGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle50VVVLGsfTrackIsoFilter ) +fragment.HLTEle15VVVLGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5OpenFilter + fragment.hltEG15EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle15VVVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15VVVLHEFilter + fragment.hltEgammaEcalPFClusterIsoR02 + fragment.hltEle15VVVLEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoR02 + fragment.hltEle15VVVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle15VVVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle15VVVLGsfOneOEMinusOneOPFilter + fragment.hltEle15VVVLGsfChi2Filter + fragment.hltEle15VVVLGsfMissingHitsFilter + fragment.hltEle15VVVLGsfDetaFilter + fragment.hltEle15VVVLGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15VVVLGsfTrackIsoFilter ) +fragment.HLTEle50VVVLGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5OpenFilter + fragment.hltEG50IsoVVVLEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle50VVVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle50VVVLHEFilter + fragment.hltEgammaEcalPFClusterIsoR02 + fragment.hltEle50VVVLEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoR02 + fragment.hltEle50VVVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle50VVVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle50VVVLGsfOneOEMinusOneOPFilter + fragment.hltEle50VVVLGsfChi2Filter + fragment.hltEle50VVVLGsfMissingHitsFilter + fragment.hltEle50VVVLGsfDetaFilter + fragment.hltEle50VVVLGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle50VVVLGsfTrackIsoFilter ) fragment.HLTMuVVVLCombinedIsolationR02Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTDoLocalHcalSequence + fragment.hltTowerMakerForAll + fragment.hltFixedGridRhoFastjetAllCaloForMuons + fragment.hltL3CaloMuonCorrectedVVVLIsolations + fragment.HLTTrackReconstructionForIsoL3MuonIter02 + fragment.hltL3MuonCombRelIsolationVVVL ) fragment.HLTDiMu4Ele9CaloIdLTrackIdLMuonlegSequence = cms.Sequence( fragment.hltDiMu4Ele9CaloIdLTrackIdLMuonlegL1Filtered0 + fragment.HLTL2muonrecoSequence + cms.ignore(fragment.hltDiMu4Ele9CaloIdLTrackIdLMuonlegL2Filtered4) + fragment.HLTL3muonrecoSequence + cms.ignore(fragment.hltL1fForIterL3DiMu4Ele9CaloIdLTrackIdLMuonlegL1Filtered0) + fragment.hltL3fL1DoubleMu4EG9f0Filtered4 ) fragment.HLTDiMu4Ele9CaloIdLTrackIdLElectronlegSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegL1MatchFilter + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegEtFilter + fragment.hltEgammaClusterShape + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegHEFilter + fragment.HLTElePixelMatchSequence + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegOneOEMinusOneOPFilter + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegDetaFilter + fragment.hltDiMu4Ele9CaloIdLTrackIdLElectronlegDphiFilter ) @@ -88221,10 +90161,10 @@ fragment.HLTL3muonrecoNocandSequenceNoVtx = cms.Sequence( fragment.HLTIterL3muonTkCandidateSequenceNoVtx + fragment.hltIterL3MuonMergedNoVtx + fragment.hltIterL3MuonAndMuonFromL1MergedNoVtx + fragment.hltL3MuonsIterL3LinksNoVtx + fragment.hltIterL3MuonsNoVtx ) fragment.HLTL3muonrecoSequenceNoVtx = cms.Sequence( fragment.HLTL3muonrecoNocandSequenceNoVtx + fragment.hltIterL3MuonCandidatesNoVtx ) fragment.HLTTrackerMuonSequenceNoVtx = cms.Sequence( fragment.HLTDoLocalPixelSequence + fragment.HLTRecoPixelTracksSequence + fragment.HLTDoLocalStripSequence + fragment.hltMuTrackSeeds + fragment.hltMuCkfTrackCandidates + fragment.hltMuCtfTracks + fragment.HLTL3muonrecoNocandSequenceNoVtx + fragment.hltDiMuonMergingNoVtx + fragment.hltDiMuonLinksNoVtx + fragment.hltGlbTrkMuonsNoVtx + fragment.hltGlbTrkMuonCandsNoVtx ) -fragment.HLTEle8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle8CaloIdLTrackIdLIsoVLL1MatchFilter + fragment.hltEle8CaloIdLTrackIdLIsoVLEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle8CaloIdLTrackIdLIsoVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle8CaloIdLTrackIdLIsoVLHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle8CaloIdLTrackIdLIsoVLEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle8CaloIdLTrackIdLIsoVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle8CaloIdLTrackIdLIsoVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle8CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + fragment.hltEle8CaloIdLTrackIdLIsoVLDetaFilter + fragment.hltEle8CaloIdLTrackIdLIsoVLDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle8CaloIdLTrackIdLIsoVLTrackIsoFilter ) -fragment.HLTEle12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle12CaloIdLTrackIdLIsoVLL1MatchFilter + fragment.hltEle12CaloIdLTrackIdLIsoVLEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle12CaloIdLTrackIdLIsoVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle12CaloIdLTrackIdLIsoVLHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle12CaloIdLTrackIdLIsoVLEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle12CaloIdLTrackIdLIsoVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle12CaloIdLTrackIdLIsoVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle12CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + fragment.hltEle12CaloIdLTrackIdLIsoVLDetaFilter + fragment.hltEle12CaloIdLTrackIdLIsoVLDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle12CaloIdLTrackIdLIsoVLTrackIsoFilter ) -fragment.HLTEle15CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30L1MatchFilter + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30DetaFilter + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30DphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) -fragment.HLTEle23CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30L1MatchFilter + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30DetaFilter + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30DphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) +fragment.HLTEle8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle8CaloIdLTrackIdLIsoVLL1MatchFilter + fragment.hltEle8CaloIdLTrackIdLIsoVLEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle8CaloIdLTrackIdLIsoVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle8CaloIdLTrackIdLIsoVLHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle8CaloIdLTrackIdLIsoVLEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle8CaloIdLTrackIdLIsoVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle8CaloIdLTrackIdLIsoVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle8CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + fragment.hltEle8CaloIdLTrackIdLIsoVLDetaFilter + fragment.hltEle8CaloIdLTrackIdLIsoVLDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle8CaloIdLTrackIdLIsoVLTrackIsoFilter ) +fragment.HLTEle12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle12CaloIdLTrackIdLIsoVLL1MatchFilter + fragment.hltEle12CaloIdLTrackIdLIsoVLEtFilter + fragment.hltEgammaClusterShape + fragment.hltEle12CaloIdLTrackIdLIsoVLClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle12CaloIdLTrackIdLIsoVLHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle12CaloIdLTrackIdLIsoVLEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle12CaloIdLTrackIdLIsoVLHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle12CaloIdLTrackIdLIsoVLPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle12CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + fragment.hltEle12CaloIdLTrackIdLIsoVLDetaFilter + fragment.hltEle12CaloIdLTrackIdLIsoVLDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle12CaloIdLTrackIdLIsoVLTrackIsoFilter ) +fragment.HLTEle15CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30L1MatchFilter + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30DetaFilter + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30DphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) +fragment.HLTEle23CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30L1MatchFilter + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30DetaFilter + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30DphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle23CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) fragment.HLTEle8CaloIdMGsfTrkIdMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaCandidatesWrapper + fragment.hltEle8EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle8HEFilter + fragment.hltEgammaClusterShape + fragment.hltEle8CaloIdMClusterShapeFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle8CaloIdMPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle8CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + fragment.hltEle8CaloIdMGsfTrackIdMDetaFilter + fragment.hltEle8CaloIdMGsfTrackIdMDphiFilter ) fragment.HLTEle17CaloIdMGsfTrkIdMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaCandidatesWrapper + fragment.hltEle17EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle17HEFilter + fragment.hltEgammaClusterShape + fragment.hltEle17CaloIdMClusterShapeFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle17CaloIdMPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle17CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + fragment.hltEle17CaloIdMGsfTrackIdMDetaFilter + fragment.hltEle17CaloIdMGsfTrackIdMDphiFilter ) fragment.HLTEle23CaloIdMGsfTrkIdMSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaCandidatesWrapper + fragment.hltEle23EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle23HEFilter + fragment.hltEgammaClusterShape + fragment.hltEle23CaloIdMClusterShapeFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle23CaloIdMPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle23CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + fragment.hltEle23CaloIdMGsfTrackIdMDetaFilter + fragment.hltEle23CaloIdMGsfTrackIdMDphiFilter ) @@ -88236,41 +90176,60 @@ fragment.HLTEle250CaloIdVTGsfTrkIdTGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + fragment.hltEG250EtFilter + fragment.hltEgammaClusterShape + fragment.hltEG250CaloIdVTClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG250CaloIdVTHEFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle250CaloIdVTPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle250CaloIdVTGsfTrkIdTGsfDetaFilter + fragment.hltEle250CaloIdVTGsfTrkIdTGsfDphiFilter ) fragment.HLTEle300CaloIdVTGsfTrkIdTGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + fragment.hltEG300EtFilter + fragment.hltEgammaClusterShape + fragment.hltEG300CaloIdVTClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG300CaloIdVTHEFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle300CaloIdVTPixelMatchFilter + fragment.HLTGsfElectronSequence + fragment.hltEle300CaloIdVTGsfTrkIdTGsfDetaFilter + fragment.hltEle300CaloIdVTGsfTrkIdTGsfDphiFilter ) fragment.HLTPFHT350MinPFJet15Sequence = cms.Sequence( fragment.HLTAK4CaloJetsSequence + fragment.hltHtMhtJet10 + fragment.hltHT175Jet10 + fragment.HLTAK4PFJetsSequence + fragment.hltPFHTJet15 + fragment.hltPFHT350Jet15 ) -fragment.HLTPhoton60R9Id90CaloIdLIsoLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + fragment.hltEG60EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG60HEFilter + fragment.hltEgammaR9ID + fragment.hltEG60R9Id90CaloIdLIsoLR9IdFilter + fragment.hltEgammaClusterShape + fragment.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter ) -fragment.HLTPhoton60R9Id90CaloIdLIsoLDisplacedIdLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + fragment.hltEG60EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG60HEFilter + fragment.hltEgammaR9ID + fragment.hltEG60R9Id90CaloIdLIsoLR9IdFilter + fragment.hltEgammaClusterShape + fragment.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter + fragment.hltEG60R9Id90CaloIdLIsoLDisplacedIdFilter ) +fragment.HLTPhoton60R9Id90CaloIdLIsoLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + fragment.hltEG60EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG60HEFilter + fragment.hltEgammaR9ID + fragment.hltEG60R9Id90CaloIdLIsoLR9IdFilter + fragment.hltEgammaClusterShape + fragment.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter ) +fragment.HLTPhoton60R9Id90CaloIdLIsoLDisplacedIdLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + fragment.hltEG60EtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG60HEFilter + fragment.hltEgammaR9ID + fragment.hltEG60R9Id90CaloIdLIsoLR9IdFilter + fragment.hltEgammaClusterShape + fragment.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter + fragment.hltEG60R9Id90CaloIdLIsoLDisplacedIdFilter ) fragment.HLTSC3018EIso15HE30eMass70Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGWithJetAndTauFilter + fragment.hltEG30L1SingleAndDoubleEGWithTauWithJetEtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHToverET + fragment.hltEG30HE30HEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG30EIso15HE30EcalIsoLastFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltDiEG18EtEta2p55UnseededFilter + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG18HE30eHEUnseededFilter + fragment.hltEgammaEcalPFClusterIsoUnseeded + fragment.hltEG18EIso15HE30EcalIsoUnseededFilter + fragment.hltDiEG18EIso15ANDHE30Mass70CombMassLastFilter ) fragment.HLTBeginSequenceL1Fat = cms.Sequence( fragment.hltTriggerType + fragment.hltL1EventNumberL1Fat + fragment.HLTL1UnpackerSequence + fragment.HLTBeamSpot ) fragment.HLTBeginSequenceRandom = cms.Sequence( fragment.hltRandomEventsFilter + fragment.hltGtStage2Digis ) -fragment.HLTCaloScoutingSequence = cms.Sequence( fragment.HLTAK4CaloJetsSequence + fragment.HLTRecoMETSequence ) -fragment.HLTNoPUSequence = cms.Sequence( fragment.HLTDoLocalPixelSequenceRegForBTag + fragment.HLTFastRecopixelvertexingSequence + fragment.hltPixelTracksForNoPUFilter + fragment.hltSelectorJets20L1FastJetForNoPU + fragment.hltPixelTracksForNoPUFitter + fragment.hltPixelTracksTrackingRegionsForNoPU + fragment.hltPixelTracksHitDoubletsForNoPU + fragment.hltPixelTracksHitQuadrupletsForNoPU + fragment.hltPixelTracksForNoPU + fragment.hltCaloJetFromPV ) -fragment.HLTCaloBTagScoutingSequence = cms.Sequence( fragment.HLTAK4CaloJetsSequence + fragment.HLTNoPUSequence + fragment.HLTBtagDeepCSVSequenceL3 ) +fragment.HLTTrackReconstructionForPixelOnlyPF = cms.Sequence( fragment.HLTDoLocalPixelSequence + fragment.HLTRecopixelvertexingSequence + fragment.hltPixelTracksZetaClean + fragment.hltPixelOnlyPFMuonMerging + fragment.hltPixelOnlyMuonLinks + fragment.hltPixelOnlyMuons ) +fragment.HLTPixelOnlyParticleFlowSequence = cms.Sequence( fragment.HLTPreshowerSequence + fragment.hltParticleFlowRecHitECALUnseeded + fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowRecHitHF + fragment.hltParticleFlowRecHitPSUnseeded + fragment.hltParticleFlowClusterECALUncorrectedUnseeded + fragment.hltParticleFlowClusterPSUnseeded + fragment.hltParticleFlowClusterECALUnseeded + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL + fragment.hltParticleFlowClusterHF + fragment.hltLightPixelOnlyPFTracks + fragment.hltPixelOnlyParticleFlowBlock + fragment.hltPixelOnlyParticleFlow ) +fragment.HLTAK4PixelOnlyPFJetsReconstructionSequence = cms.Sequence( fragment.HLTL2muonrecoSequence + fragment.HLTL3muonrecoSequence + fragment.HLTTrackReconstructionForPixelOnlyPF + fragment.HLTPixelOnlyParticleFlowSequence + fragment.hltAK4PixelOnlyPFJets + fragment.hltAK4PixelOnlyPFJetsLooseID + fragment.hltAK4PixelOnlyPFJetsTightID ) +fragment.HLTAK4PixelOnlyPFCorrectorProducersSequence = cms.Sequence( fragment.hltAK4PixelOnlyPFFastJetCorrector + fragment.hltAK4PixelOnlyPFRelativeCorrector + fragment.hltAK4PixelOnlyPFAbsoluteCorrector + fragment.hltAK4PixelOnlyPFResidualCorrector + fragment.hltAK4PixelOnlyPFCorrector ) +fragment.HLTAK4PixelOnlyPFJetsCorrectionSequence = cms.Sequence( fragment.hltFixedGridRhoFastjetPixelOnlyAll + fragment.HLTAK4PixelOnlyPFCorrectorProducersSequence + fragment.hltAK4PixelOnlyPFJetsCorrected + fragment.hltAK4PixelOnlyPFJetsLooseIDCorrected + fragment.hltAK4PixelOnlyPFJetsTightIDCorrected ) +fragment.HLTAK4PixelOnlyPFJetsSequence = cms.Sequence( fragment.HLTPreAK4PFJetsRecoSequence + fragment.HLTAK4PixelOnlyPFJetsReconstructionSequence + fragment.HLTAK4PixelOnlyPFJetsCorrectionSequence ) fragment.HLTMuIsolationSequence = cms.Sequence( fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons + fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons + fragment.HLTTrackReconstructionForIsoL3MuonIter02 + fragment.hltMuonTkRelIsolationCut0p07Map ) -fragment.HLTPFScoutingSequence = cms.Sequence( fragment.HLTAK4PFJetsSequence + fragment.hltPFMETProducer + fragment.HLTMuIsolationSequence + fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEgammaEcalPFClusterIso + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.HLTElePixelMatchSequence + fragment.HLTGsfElectronSequence + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso ) -fragment.HLTBTagScoutingSequence = cms.Sequence( fragment.HLTAK4PFJetsSequence + fragment.HLTBtagDeepCSVSequencePF ) -fragment.HLTPFClusteringEcalMFForMuonsNoVtx = cms.Sequence( fragment.hltRecHitInRegionForMuonsMFnoVtx + fragment.hltRecHitInRegionForMuonsESNoVtx + fragment.hltParticleFlowRecHitECALForMuonsMFNoVtx + fragment.hltParticleFlowRecHitPSForMuonsNoVtx + fragment.hltParticleFlowClusterECALUncorrectedForMuonsMFNoVtx + fragment.hltParticleFlowClusterPSForMuonsNoVtx + fragment.hltParticleFlowClusterECALForMuonsMFNoVtx ) -fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsNoVtx = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalMFSequence + fragment.HLTDoLocalHcalSequence + fragment.hltTowerMakerForECALMF + fragment.hltTowerMakerForHCAL + fragment.hltFixedGridRhoFastjetECALMFForMuons + fragment.hltFixedGridRhoFastjetHCAL + fragment.HLTPFClusteringEcalMFForMuonsNoVtx + fragment.hltMuonEcalMFPFClusterIsoForMuonsNoVtx ) -fragment.HLTPFHcalClusteringForMuonsNoVtx = cms.Sequence( fragment.hltRegionalTowerForMuonsNoVtx + fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL ) -fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsNoVtx = cms.Sequence( fragment.HLTPFHcalClusteringForMuonsNoVtx + fragment.hltMuonHcalPFClusterIsoForMuonsNoVtx ) -fragment.HLTPixelTrackingL3MuonNoVtx = cms.Sequence( fragment.hltL3MuonVertexNoVtx + fragment.HLTDoLocalPixelSequence + fragment.hltPixelLayerQuadruplets + fragment.hltPixelTracksL3MuonFilter + fragment.hltPixelTracksL3MuonFitter + fragment.hltPixelTracksTrackingRegionsL3MuonNoVtx + fragment.hltPixelTracksHitDoubletsL3MuonNoVtx + fragment.hltPixelTracksHitQuadrupletsL3MuonNoVtx + fragment.hltPixelTracksL3MuonNoVtx + fragment.hltPixelVerticesL3MuonNoVtx ) -fragment.HLTIterativeTrackingL3MuonIteration0NoVtx = cms.Sequence( fragment.hltPixelTracksForSeedsL3MuonFilter + fragment.hltPixelTracksForSeedsL3MuonFitter + fragment.hltPixelTracksTrackingRegionsForSeedsL3MuonNoVtx + fragment.hltPixelTracksHitDoubletsForSeedsL3MuonNoVtx + fragment.hltPixelTracksHitQuadrupletsForSeedsL3MuonNoVtx + fragment.hltPixelTracksForSeedsL3MuonNoVtx + fragment.hltIter0L3MuonPixelSeedsFromPixelTracksNoVtx + fragment.hltIter0L3MuonCkfTrackCandidatesNoVtx + fragment.hltIter0L3MuonCtfWithMaterialTracksNoVtx + fragment.hltIter0L3MuonTrackCutClassifierNoVtx + fragment.hltIter0L3MuonTrackSelectionHighPurityNoVtx ) -fragment.HLTIterativeTrackingL3MuonIteration1NoVtx = cms.Sequence( fragment.hltIter1L3MuonClustersRefRemovalNoVtx + fragment.hltIter1L3MuonMaskedMeasurementTrackerEventNoVtx + fragment.hltIter1L3MuonPixelLayerQuadrupletsNoVtx + fragment.hltIter1L3MuonPixelTrackingRegionsNoVtx + fragment.hltIter1L3MuonPixelClusterCheck + fragment.hltIter1L3MuonPixelHitDoubletsNoVtx + fragment.hltIter1L3MuonPixelHitQuadrupletsNoVtx + fragment.hltIter1L3MuonPixelSeedsNoVtx + fragment.hltIter1L3MuonCkfTrackCandidatesNoVtx + fragment.hltIter1L3MuonCtfWithMaterialTracksNoVtx + fragment.hltIter1L3MuonTrackCutClassifierPromptNoVtx + fragment.hltIter1L3MuonTrackCutClassifierDetachedNoVtx + fragment.hltIter1L3MuonTrackCutClassifierMergedNoVtx + fragment.hltIter1L3MuonTrackSelectionHighPurityNoVtx ) -fragment.HLTIterativeTrackingL3MuonIteration2NoVtx = cms.Sequence( fragment.hltIter2L3MuonClustersRefRemovalNoVtx + fragment.hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx + fragment.hltIter2L3MuonPixelLayerTripletsNoVtx + fragment.hltIter2L3MuonPixelTrackingRegionsNoVtx + fragment.hltIter2L3MuonPixelClusterCheck + fragment.hltIter2L3MuonPixelHitDoubletsNoVtx + fragment.hltIter2L3MuonPixelHitTripletsNoVtx + fragment.hltIter2L3MuonPixelSeedsNoVtx + fragment.hltIter2L3MuonCkfTrackCandidatesNoVtx + fragment.hltIter2L3MuonCtfWithMaterialTracksNoVtx + fragment.hltIter2L3MuonTrackCutClassifierNoVtx + fragment.hltIter2L3MuonTrackSelectionHighPurityNoVtx ) -fragment.HLTIterativeTrackingL3MuonIter02NoVtx = cms.Sequence( fragment.HLTIterativeTrackingL3MuonIteration0NoVtx + fragment.HLTIterativeTrackingL3MuonIteration1NoVtx + fragment.hltIter1L3MuonMergedNoVtx + fragment.HLTIterativeTrackingL3MuonIteration2NoVtx + fragment.hltIter2L3MuonMergedNoVtx ) -fragment.HLTTrackReconstructionForIsoL3MuonIter02NoVtx = cms.Sequence( fragment.HLTPixelTrackingL3MuonNoVtx + fragment.HLTDoLocalStripSequence + fragment.HLTIterativeTrackingL3MuonIter02NoVtx ) -fragment.HLTMuIsolationSequenceNoVtx = cms.Sequence( fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsNoVtx + fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsNoVtx + fragment.HLTTrackReconstructionForIsoL3MuonIter02NoVtx + fragment.hltMuonTkRelIsolationCut0p09MapNoVtx ) -fragment.HLTPFScoutingSequenceNoVtx = cms.Sequence( fragment.HLTAK4PFJetsSequence + fragment.hltPFMETProducer + fragment.HLTMuIsolationSequenceNoVtx + fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEgammaEcalPFClusterIso + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.HLTElePixelMatchSequence + fragment.HLTGsfElectronSequence + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso ) +fragment.HLTPixelOnlyPFScoutingSequence = cms.Sequence( fragment.HLTAK4PixelOnlyPFJetsSequence + fragment.hltPixelOnlyPFMETProducer + fragment.HLTMuIsolationSequence + fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEgammaEcalPFClusterIso + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.HLTElePixelMatchSequence + fragment.HLTGsfElectronSequence + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso ) +fragment.HLTL2muonrecoSequenceScoutingNoVtx = cms.Sequence( fragment.HLTL2muonrecoNocandSequence + fragment.hltL2MuonCandidatesScoutingNoVtx ) +fragment.HLTIterL3OImuonTkCandidateSequenceScoutingNoVtx = cms.Sequence( fragment.hltIterL3OISeedsFromL2MuonsScoutingNoVtx + fragment.hltIterL3OITrackCandidatesScoutingNoVtx + fragment.hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx + fragment.hltIterL3OIMuonTrackCutClassifierScoutingNoVtx + fragment.hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx + fragment.hltL3MuonsIterL3OIScoutingNoVtx ) +fragment.HLTIterL3MuonRecoPixelTracksSequenceScoutingNoVtx = cms.Sequence( fragment.hltIterL3MuonPixelTracksFilterScoutingNoVtx + fragment.hltIterL3MuonPixelTracksFitterScoutingNoVtx + fragment.hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx + fragment.hltIterL3MuonPixelLayerQuadrupletsScoutingNoVtx + fragment.hltIterL3MuonPixelTracksHitDoubletsScoutingNoVtx + fragment.hltIterL3MuonPixelTracksHitQuadrupletsScoutingNoVtx + fragment.hltIterL3MuonPixelTracksScoutingNoVtx ) +fragment.HLTIterL3MuonRecopixelvertexingSequenceScoutingNoVtx = cms.Sequence( fragment.HLTIterL3MuonRecoPixelTracksSequenceScoutingNoVtx + fragment.hltIterL3MuonPixelVerticesScoutingNoVtx + fragment.hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx ) +fragment.HLTIterativeTrackingIteration0ForIterL3MuonScoutingNoVtx = cms.Sequence( fragment.hltIter0IterL3MuonPixelSeedsFromPixelTracksScoutingNoVtx + fragment.hltIter0IterL3MuonCkfTrackCandidatesScoutingNoVtx + fragment.hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx + fragment.hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx + fragment.hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx ) +fragment.HLTIterativeTrackingIteration2ForIterL3MuonScoutingNoVtx = cms.Sequence( fragment.hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx + fragment.hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx + fragment.hltIter2IterL3MuonPixelLayerTripletsScoutingNoVtx + fragment.hltIter2IterL3MuonPixelClusterCheckScoutingNoVtx + fragment.hltIter2IterL3MuonPixelHitDoubletsScoutingNoVtx + fragment.hltIter2IterL3MuonPixelHitTripletsScoutingNoVtx + fragment.hltIter2IterL3MuonPixelSeedsScoutingNoVtx + fragment.hltIter2IterL3MuonCkfTrackCandidatesScoutingNoVtx + fragment.hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx + fragment.hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx + fragment.hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx ) +fragment.HLTIterativeTrackingIter02ForIterL3MuonScoutingNoVtx = cms.Sequence( fragment.HLTIterativeTrackingIteration0ForIterL3MuonScoutingNoVtx + fragment.HLTIterativeTrackingIteration2ForIterL3MuonScoutingNoVtx + fragment.hltIter2IterL3MuonMergedScoutingNoVtx ) +fragment.HLTIterL3IOmuonTkCandidateSequenceScoutingNoVtx = cms.Sequence( fragment.HLTIterL3MuonRecopixelvertexingSequenceScoutingNoVtx + fragment.HLTIterativeTrackingIter02ForIterL3MuonScoutingNoVtx + fragment.hltL3MuonsIterL3IOScoutingNoVtx ) +fragment.HLTIterL3OIAndIOFromL2muonTkCandidateSequenceScoutingNoVtx = cms.Sequence( fragment.HLTIterL3OImuonTkCandidateSequenceScoutingNoVtx + fragment.hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx + fragment.hltIterL3OIL3MuonsScoutingNoVtx + fragment.hltIterL3OIL3MuonCandidatesScoutingNoVtx + fragment.hltL2SelectorForL3IOScoutingNoVtx + fragment.HLTIterL3IOmuonTkCandidateSequenceScoutingNoVtx + fragment.hltIterL3MuonsFromL2LinksCombinationScoutingNoVtx + fragment.hltIterL3MuonsFromL2ScoutingNoVtx ) +fragment.HLTRecoPixelTracksSequenceForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( fragment.hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx + fragment.hltIterL3FromL1MuonPixelLayerQuadrupletsScoutingNoVtx + fragment.hltIterL3FromL1MuonPixelTracksHitDoubletsScoutingNoVtx + fragment.hltIterL3FromL1MuonPixelTracksHitQuadrupletsScoutingNoVtx + fragment.hltIterL3FromL1MuonPixelTracksScoutingNoVtx ) +fragment.HLTRecopixelvertexingSequenceForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( fragment.HLTRecoPixelTracksSequenceForIterL3FromL1MuonScoutingNoVtx + fragment.hltIterL3FromL1MuonPixelVerticesScoutingNoVtx + fragment.hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx ) +fragment.HLTIterativeTrackingIteration0ForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( fragment.hltIter0IterL3FromL1MuonPixelSeedsFromPixelTracksScoutingNoVtx + fragment.hltIter0IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx + fragment.hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx + fragment.hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx + fragment.hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx ) +fragment.HLTIterativeTrackingIteration2ForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( fragment.hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonPixelLayerTripletsScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonPixelClusterCheckScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonPixelHitDoubletsScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonPixelHitTripletsScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonPixelSeedsScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx ) +fragment.HLTIterativeTrackingIter02ForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( fragment.HLTIterativeTrackingIteration0ForIterL3FromL1MuonScoutingNoVtx + fragment.HLTIterativeTrackingIteration2ForIterL3FromL1MuonScoutingNoVtx + fragment.hltIter2IterL3FromL1MuonMergedScoutingNoVtx ) +fragment.HLTIterL3IOmuonFromL1TkCandidateSequenceScoutingNoVtx = cms.Sequence( fragment.HLTRecopixelvertexingSequenceForIterL3FromL1MuonScoutingNoVtx + fragment.HLTIterativeTrackingIter02ForIterL3FromL1MuonScoutingNoVtx ) +fragment.HLTIterL3muonTkCandidateSequenceScoutingNoVtx = cms.Sequence( fragment.HLTDoLocalPixelSequence + fragment.HLTDoLocalStripSequence + fragment.HLTIterL3OIAndIOFromL2muonTkCandidateSequenceScoutingNoVtx + fragment.hltIterL3MuonL1MuonNoL2SelectorScoutingNoVtx + fragment.HLTIterL3IOmuonFromL1TkCandidateSequenceScoutingNoVtx ) +fragment.HLTL3muonrecoNocandSequenceScoutingNoVtx = cms.Sequence( fragment.HLTIterL3muonTkCandidateSequenceScoutingNoVtx + fragment.hltIterL3MuonMergedScoutingNoVtx + fragment.hltIterL3MuonAndMuonFromL1MergedScoutingNoVtx + fragment.hltL3MuonsIterL3LinksScoutingNoVtx + fragment.hltIterL3MuonsScoutingNoVtx ) +fragment.HLTL3muonrecoSequenceScoutingNoVtx = cms.Sequence( fragment.HLTL3muonrecoNocandSequenceScoutingNoVtx + fragment.hltIterL3MuonCandidatesScoutingNoVtx ) +fragment.HLTPFClusteringEcalMFForMuonsScoutingNoVtx = cms.Sequence( fragment.hltRecHitInRegionForMuonsMFnoVtx + fragment.hltRecHitInRegionForMuonsESScoutingNoVtx + fragment.hltParticleFlowRecHitECALForMuonsMFScoutingNoVtx + fragment.hltParticleFlowRecHitPSForMuonsScoutingNoVtx + fragment.hltParticleFlowClusterECALUncorrectedForMuonsMFScoutingNoVtx + fragment.hltParticleFlowClusterPSForMuonsScoutingNoVtx + fragment.hltParticleFlowClusterECALForMuonsMFScoutingNoVtx ) +fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalMFSequence + fragment.HLTDoLocalHcalSequence + fragment.hltTowerMakerForECALMF + fragment.hltTowerMakerForHCAL + fragment.hltFixedGridRhoFastjetECALMFForMuons + fragment.hltFixedGridRhoFastjetHCAL + fragment.HLTPFClusteringEcalMFForMuonsScoutingNoVtx + fragment.hltMuonEcalMFPFClusterIsoForMuonsScoutingNoVtx ) +fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx = cms.Sequence( fragment.HLTPFHcalClustering + fragment.hltMuonHcalPFClusterIsoForMuonsScoutingNoVtx ) +fragment.HLTPixelTrackingL3MuonScoutingNoVtx = cms.Sequence( fragment.hltL3MuonVertexScoutingNoVtx + fragment.HLTDoLocalPixelSequence + fragment.hltPixelLayerQuadruplets + fragment.hltPixelTracksL3MuonFilter + fragment.hltPixelTracksL3MuonFitter + fragment.hltPixelTracksTrackingRegionsL3MuonScoutingNoVtx + fragment.hltPixelTracksHitDoubletsL3MuonScoutingNoVtx + fragment.hltPixelTracksHitQuadrupletsL3MuonScoutingNoVtx + fragment.hltPixelTracksL3MuonScoutingNoVtx + fragment.hltPixelVerticesL3MuonScoutingNoVtx ) +fragment.HLTIterativeTrackingL3MuonIteration0ScoutingNoVtx = cms.Sequence( fragment.hltPixelTracksForSeedsL3MuonFilter + fragment.hltPixelTracksForSeedsL3MuonFitter + fragment.hltPixelTracksTrackingRegionsForSeedsL3MuonScoutingNoVtx + fragment.hltPixelTracksHitDoubletsForSeedsL3MuonScoutingNoVtx + fragment.hltPixelTracksHitQuadrupletsForSeedsL3MuonScoutingNoVtx + fragment.hltPixelTracksForSeedsL3MuonScoutingNoVtx + fragment.hltIter0L3MuonPixelSeedsFromPixelTracksScoutingNoVtx + fragment.hltIter0L3MuonCkfTrackCandidatesScoutingNoVtx + fragment.hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx + fragment.hltIter0L3MuonTrackCutClassifierScoutingNoVtx + fragment.hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx ) +fragment.HLTIterativeTrackingL3MuonIteration1ScoutingNoVtx = cms.Sequence( fragment.hltIter1L3MuonClustersRefRemovalScoutingNoVtx + fragment.hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx + fragment.hltIter1L3MuonPixelLayerQuadrupletsScoutingNoVtx + fragment.hltIter1L3MuonPixelTrackingRegionsScoutingNoVtx + fragment.hltIter1L3MuonPixelClusterCheck + fragment.hltIter1L3MuonPixelHitDoubletsScoutingNoVtx + fragment.hltIter1L3MuonPixelHitQuadrupletsScoutingNoVtx + fragment.hltIter1L3MuonPixelSeedsScoutingNoVtx + fragment.hltIter1L3MuonCkfTrackCandidatesScoutingNoVtx + fragment.hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx + fragment.hltIter1L3MuonTrackCutClassifierPromptScoutingNoVtx + fragment.hltIter1L3MuonTrackCutClassifierDetachedScoutingNoVtx + fragment.hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx + fragment.hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx ) +fragment.HLTIterativeTrackingL3MuonIteration2ScoutingNoVtx = cms.Sequence( fragment.hltIter2L3MuonClustersRefRemovalScoutingNoVtx + fragment.hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx + fragment.hltIter2L3MuonPixelLayerTripletsScoutingNoVtx + fragment.hltIter2L3MuonPixelTrackingRegionsScoutingNoVtx + fragment.hltIter2L3MuonPixelClusterCheck + fragment.hltIter2L3MuonPixelHitDoubletsScoutingNoVtx + fragment.hltIter2L3MuonPixelHitTripletsScoutingNoVtx + fragment.hltIter2L3MuonPixelSeedsScoutingNoVtx + fragment.hltIter2L3MuonCkfTrackCandidatesScoutingNoVtx + fragment.hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx + fragment.hltIter2L3MuonTrackCutClassifierScoutingNoVtx + fragment.hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx ) +fragment.HLTIterativeTrackingL3MuonIter02ScoutingNoVtx = cms.Sequence( fragment.HLTIterativeTrackingL3MuonIteration0ScoutingNoVtx + fragment.HLTIterativeTrackingL3MuonIteration1ScoutingNoVtx + fragment.hltIter1L3MuonMergedScoutingNoVtx + fragment.HLTIterativeTrackingL3MuonIteration2ScoutingNoVtx + fragment.hltIter2L3MuonMergedScoutingNoVtx ) +fragment.HLTTrackReconstructionForIsoL3MuonIter02ScoutingNoVtx = cms.Sequence( fragment.HLTPixelTrackingL3MuonScoutingNoVtx + fragment.HLTDoLocalStripSequence + fragment.HLTIterativeTrackingL3MuonIter02ScoutingNoVtx ) +fragment.HLTMuIsolationSequenceScoutingNoVtx = cms.Sequence( fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx + fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx + fragment.HLTTrackReconstructionForIsoL3MuonIter02ScoutingNoVtx + fragment.hltMuonTkRelIsolationCut0p09MapScoutingNoVtx ) fragment.HLTDoHIEcalClusWithCleaningSequence = cms.Sequence( fragment.hltIslandBasicClustersHI + fragment.hltHiIslandSuperClustersHI + fragment.hltHiCorrectedIslandBarrelSuperClustersHI + fragment.hltHiCorrectedIslandEndcapSuperClustersHI + fragment.hltCleanedHiCorrectedIslandBarrelSuperClustersHI + fragment.hltRecoHIEcalWithCleaningCandidate ) fragment.HLTPhoton20SequenceLooseHOverE = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG10Filter + fragment.hltEG20EtFilterLooseHoverE + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG20HEFilterLooseHoverE ) fragment.HLTPhoton30SequenceLooseHOverE = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG10Filter + fragment.hltEG30EtFilterLooseHoverE + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG30HEFilterLooseHoverE ) fragment.HLTBeginSequenceCalibration = cms.Sequence( fragment.hltCalibrationEventsFilter + fragment.hltGtStage2Digis ) fragment.HLTBeginSequenceNZS = cms.Sequence( fragment.hltTriggerType + fragment.hltL1EventNumberNZS + fragment.HLTL1UnpackerSequence + fragment.HLTBeamSpot ) +fragment.HLTNoPUSequence = cms.Sequence( fragment.HLTDoLocalPixelSequenceRegForBTag + fragment.HLTFastRecopixelvertexingSequence + fragment.hltPixelTracksForNoPUFilter + fragment.hltSelectorJets20L1FastJetForNoPU + fragment.hltPixelTracksForNoPUFitter + fragment.hltPixelTracksTrackingRegionsForNoPU + fragment.hltPixelTracksHitDoubletsForNoPU + fragment.hltPixelTracksHitQuadrupletsForNoPU + fragment.hltPixelTracksForNoPU + fragment.hltCaloJetFromPV ) fragment.HLTDiphoton1010R9Id85b90eORIso60CaloId15b35eANDHE10R9Id50b80eMass10Sequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5Filter + fragment.hltEG10EtL1SingleEG5EtFilter + fragment.hltEgammaR9ID + fragment.hltEG10R9Id50b80eR9IdFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHToverET + fragment.hltEG10HE10R9Id50b80eHEFilter + cms.ignore(fragment.hltEG10R9Id85b90eHE10R9Id50b80eR9IdLastFilter) + fragment.hltEgammaClusterShape + cms.ignore(fragment.hltEG10CaloId15b35eHE10R9Id50b80eClusterShapeFilter) + fragment.hltEgammaEcalPFClusterIso + cms.ignore(fragment.hltEG10Iso60CaloId15b35eHE10R9Id50b80eEcalIsoLastFilter) + fragment.hltEG10RId85b90eORIso60CaloId15b35eANDHE10R9Id50b80eLegCombLastFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltDiEG10EtEta2p55UnseededFilter + fragment.hltEgammaR9IDUnseeded + fragment.hltDiEG10R9Id50b80eR9IdUnseededFilter + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG10HE10R9Id50b80eHEUnseededFilter + cms.ignore(fragment.hltDiEG10R9Id85b90eHE10R9Id50b80eR9UnseededLastFilter) + fragment.hltEgammaClusterShapeUnseeded + cms.ignore(fragment.hltDiEG10CaloId15b35eHE10R9Id50b80eClusterShapeUnseededFilter) + fragment.hltEgammaEcalPFClusterIsoUnseeded + cms.ignore(fragment.hltDiEG10Iso60LCaloId15b35eHE10R9Id50b80eEcalIsoUnseededFilter) + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIsoUnseeded + cms.ignore(fragment.hltDiEG10Iso60LCaloId15b35eHE10R9Id50b80eTrackIsoUnseededLastFilter) + fragment.hltDiEG10R9Id85b90eORIso60CaloId15b35eANDHE10R9Id50b80eMass10CombMassLastFilter ) fragment.HLTEle5CaloIdLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5WithJetAndTauFilter + fragment.hltEG5L1SingleEG5WithJetAndTauEtFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG5HEFilter + fragment.hltEgammaClusterShape + fragment.hltEG5CaloIdLClusterShapeFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle5CaloIdLPixelMatchFilter ) fragment.HLTEle5CaloIdLMWSequence = cms.Sequence( fragment.HLTEle5CaloIdLSequence + fragment.hltEle5CaloIdLMWPMS2Filter ) fragment.HLTDoubleEle5CaloIdLUnseededSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltEgammaCandidatesWrapperUnseeded + fragment.hltDiEG5EtUnseededFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG5HEUnseededFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltDiEG5CaloIdLClusterShapeUnseededFilter + fragment.HLTElePixelMatchUnseededSequence + fragment.hltDiEle5CaloIdLPixelMatchUnseededFilter ) fragment.HLTDoubleEle5CaloIdLMWSequence = cms.Sequence( fragment.HLTDoubleEle5CaloIdLUnseededSequence + fragment.hltDiEle5CaloIdLMWPMS2UnseededFilter ) -fragment.HLTEle5WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5Filter + fragment.hltEG5L1SingleEG5EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle5WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle5WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle5WPTightEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle5WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle5WPTightPixelMatchFilter + fragment.hltEle5WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle5WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle5WPTightGsfMissingHitsFilter + fragment.hltEle5WPTightGsfDetaFilter + fragment.hltEle5WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle5WPTightGsfTrackIsoFilter ) -fragment.HLTEle15Ele10CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg2Filter + fragment.hltEgammaClusterShape + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg2Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + fragment.HLTElePixelMatchSequence + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg2Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg2Filter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) +fragment.HLTEle5WPTightGsfSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5Filter + fragment.hltEG5L1SingleEG5EtFilter + fragment.hltEgammaClusterShape + fragment.hltEle5WPTightClusterShapeFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle5WPTightHEFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle5WPTightEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle5WPTightHcalIsoFilter + fragment.HLTElePixelMatchSequence + fragment.hltEle5WPTightPixelMatchFilter + fragment.hltEle5WPTightPMS2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle5WPTightGsfOneOEMinusOneOPFilter + fragment.hltEle5WPTightGsfMissingHitsFilter + fragment.hltEle5WPTightGsfDetaFilter + fragment.hltEle5WPTightGsfDphiFilter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle5WPTightGsfTrackIsoFilter ) +fragment.HLTEle15Ele10CaloIdLTrackIdLIsoVLSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG5Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg2Filter + fragment.hltEgammaClusterShape + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg2Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + fragment.HLTElePixelMatchSequence + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + fragment.HLTGsfElectronSequence + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg2Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg2Filter + fragment.HLTTrackReconstructionForIsoElectronIter02 + fragment.hltEgammaEleGsfTrackIso + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + fragment.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) fragment.HLTMuIsolationSequenceForMC = cms.Sequence( fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons + fragment.hltL3fL1sMu5L1L2L3pfecalIsoRhoFilteredEB0p14EE0p10 + fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons + fragment.hltL3fL1sMu5L1L2L3pfhcalIsoRhoFilteredHB0p16HE0p20 + fragment.HLTTrackReconstructionForIsoL3MuonIter02 + fragment.hltMuonTkRelIsolationCut0p07Map ) fragment.HLTMu24Eta2p1IsoTau40Eta2p1IsolationSequence = cms.Sequence( fragment.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons + fragment.hltL3fL1sMu22erIsoTau40erL1f0L2f10QL3Filtered24QL3pfecalIsoRhoFilteredEB0p14EE0p10 + fragment.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons + fragment.hltL3fL1sMu22IsoTau40erL1f0L2f10QL3Filtered24QL3pfhcalIsoRhoFilteredHB0p16HE0p20 + fragment.HLTTrackReconstructionForIsoL3MuonIter02 + fragment.hltMuonTkRelIsolationCut0p07Map ) fragment.HLTMediumChargedIsoPFTau50Trk30OnePrSequence = cms.Sequence( fragment.HLTMediumChargedIsoPFTauSequence + fragment.hltPFTau50 + fragment.hltSelectedPFTausTrackFinding + fragment.hltPFTau50Track + fragment.hltPFTauTrackPt30Discriminator + fragment.hltPFTau1Prong + fragment.hltSelectedPFTausTrackPt30MediumAbsOrRelIsolation1Prong + fragment.hltPFTau50TrackPt30MediumAbsOrRelIso1Prong ) @@ -88286,7 +90245,7 @@ fragment.HLTHPSDoubleLooseChargedIsoAntiMuonPFTau20Sequence = cms.Sequence( fragment.HLTHPSLooseChargedIsoPFTauSequence + fragment.hltHpsDoublePFTau20 + fragment.hltHpsSelectedPFTausTrackFinding + fragment.hltHpsDoublePFTau20Track + fragment.hltHpsSelectedPFTausTrackFindingLooseChargedIsolation + fragment.hltHpsDoublePFTau20TrackLooseChargedIso + fragment.hltHpsPFTauAgainstMuonDiscriminator + fragment.hltHpsSelectedPFTausTrackFindingLooseChargedIsolationAgainstMuon + fragment.hltHpsDoublePFTau20TrackLooseChargedIsoAgainstMuon ) fragment.HLTHPSDoubleMediumChargedIsoAntiMuonPFTau20Sequence = cms.Sequence( fragment.HLTHPSMediumChargedIsoPFTauSequence + fragment.hltHpsDoublePFTau20 + fragment.hltHpsSelectedPFTausTrackFinding + fragment.hltHpsDoublePFTau20Track + fragment.hltHpsSelectedPFTausTrackFindingMediumChargedIsolation + fragment.hltHpsDoublePFTau20TrackMediumChargedIso + fragment.hltHpsPFTauAgainstMuonDiscriminator + fragment.hltHpsSelectedPFTausTrackFindingMediumChargedIsolationAgainstMuon + fragment.hltHpsDoublePFTau20TrackMediumChargedIsoAgainstMuon ) fragment.HLTHPSDoubleTightChargedIsoAntiMuonPFTau20Sequence = cms.Sequence( fragment.HLTHPSTightChargedIsoPFTauSequence + fragment.hltHpsDoublePFTau20 + fragment.hltHpsSelectedPFTausTrackFinding + fragment.hltHpsDoublePFTau20Track + fragment.hltHpsSelectedPFTausTrackFindingTightChargedIsolation + fragment.hltHpsDoublePFTau20TrackTightChargedIso + fragment.hltHpsPFTauAgainstMuonDiscriminator + fragment.hltHpsSelectedPFTausTrackFindingTightChargedIsolationAgainstMuon + fragment.hltHpsDoublePFTau20TrackTightChargedIsoAgainstMuon ) -fragment.HLTPhoton50R9Id90HE10IsoMEBOnlySequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG50R9Id90HE10IsoMEBOnlyEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG50R9Id90HE10IsoMEBOnlyHEFilter + fragment.hltEgammaR9ID + fragment.hltEG50R9Id90HE10IsoMEBOnlyR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMEBOnlyEcalIsoFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMEBOnlyHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG50R9Id90HE10IsoMEBOnlyTrackIsoFilter ) +fragment.HLTPhoton50R9Id90HE10IsoMEBOnlySequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleEG40Filter + fragment.hltEG50R9Id90HE10IsoMEBOnlyEtFilter + fragment.hltEgammaClusterShape + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG50R9Id90HE10IsoMEBOnlyHEFilter + fragment.hltEgammaR9ID + fragment.hltEG50R9Id90HE10IsoMEBOnlyR9Filter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMEBOnlyEcalIsoFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIso + fragment.hltEG50R9Id90HE10IsoMEBOnlyHcalIsoFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIso + fragment.hltEG50R9Id90HE10IsoMEBOnlyTrackIsoFilter ) fragment.HLTIterativeTrackingDoubleJpsiIteration0 = cms.Sequence( fragment.hltPixelTracksForSeedsJpsiFilter + fragment.hltPixelTracksForSeedsJpsiFitter + fragment.hltPixelTracksTrackingRegionsForSeedsJpsiDoubleTrk + fragment.hltPixelLayerQuadruplets + fragment.hltPixelTracksHitDoubletsForSeedsJpsiDoubleTrk + fragment.hltPixelTracksHitQuadrupletsForSeedsJpsiDoubleTrk + fragment.hltPixelTracksForSeedsJpsiDoubleTrk + fragment.hltIter0DisplacedJpsiPixelSeedsFromPixelTracksDoubleTrk + fragment.hltIter0DisplacedJpsiCkfTrackCandidatesDoubleTrk + fragment.hltIter0DisplacedJpsiCtfWithMaterialTracksDoubleTrk + fragment.hltIter0DisplacedJpsiTrackCutClassifierDoubleTrk + fragment.hltIter0DisplacedJpsiTrackSelectionHighPurityDoubleTrk ) fragment.HLTIterativeTrackingDoubleJpsiIteration1 = cms.Sequence( fragment.hltIter1DisplacedJpsiClustersRefRemovalDoubleTrk + fragment.hltIter1DisplacedJpsiMaskedMeasurementTrackerEventDoubleTrk + fragment.hltIter1DisplacedJpsiPixelLayerQuadrupletsDoubleTrk + fragment.hltIter1DisplacedJpsiPixelTrackingRegionsDoubleTrk + fragment.hltIter1DisplacedJpsiPixelClusterCheck + fragment.hltIter1DisplacedJpsiPixelHitDoubletsDoubleTrk + fragment.hltIter1DisplacedJpsiPixelHitQuadrupletsDoubleTrk + fragment.hltIter1DisplacedJpsiPixelSeedsDoubleTrk + fragment.hltIter1DisplacedJpsiCkfTrackCandidatesDoubleTrk + fragment.hltIter1DisplacedJpsiCtfWithMaterialTracksDoubleTrk + fragment.hltIter1DisplacedJpsiTrackCutClassifierPromptDoubleTrk + fragment.hltIter1DisplacedJpsiTrackCutClassifierDetachedDoubleTrk + fragment.hltIter1DisplacedJpsiTrackCutClassifierMergedDoubleTrk + fragment.hltIter1DisplacedJpsiTrackSelectionHighPurityDoubleTrk ) fragment.HLTIterativeTrackingDoubleJpsiIteration2 = cms.Sequence( fragment.hltIter2DisplacedJpsiClustersRefRemovalDoubleTrk + fragment.hltIter2DisplacedJpsiMaskedMeasurementTrackerEventDoubleTrk + fragment.hltIter2DisplacedJpsiPixelLayerTripletsDoubleTrk + fragment.hltIter2DisplacedJpsiPixelTrackingRegionsDoubleTrk + fragment.hltIter2DisplacedJpsiPixelClusterCheck + fragment.hltIter2DisplacedJpsiPixelHitDoubletsDoubleTrk + fragment.hltIter2DisplacedJpsiPixelHitTripletsDoubleTrk + fragment.hltIter2DisplacedJpsiPixelSeedsDoubleTrk + fragment.hltIter2DisplacedJpsiCkfTrackCandidatesDoubleTrk + fragment.hltIter2DisplacedJpsiCtfWithMaterialTracksDoubleTrk + fragment.hltIter2DisplacedJpsiTrackCutClassifierDoubleTrk + fragment.hltIter2DisplacedJpsiTrackSelectionHighPurityDoubleTrk ) @@ -88300,7 +90259,7 @@ fragment.HLTDiphoton3018R9Idb50e90ANDIso60CaloId15b35eANDHE12b10eMass55NoPixelVetoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG30L1SingleAndDoubleEGOrEtFilter + fragment.hltEgammaR9ID + fragment.hltEG30R9Id50b80eR9IdFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG30HE12b10eR9Id50b80eHEFilter + fragment.hltEG30R9Id50b90eHE12b10eR9Id50b80eR9IdFilter + fragment.hltEgammaClusterShape + fragment.hltEG30CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eClusterShapeFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG30Iso60CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eEcalIsoFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltDiEG18EtUnseededFilter + fragment.hltEgammaR9IDUnseeded + fragment.hltDiEG18R9Id50b80eR9IdUnseededFilter + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG18HE12b10eR9Id50b80eHEUnseededFilter + fragment.hltEG18R9Id50b90eHE12b10eR9Id50b80eR9IdUnseededFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltEG18CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eClusterShapeUnseededFilter + fragment.hltEgammaEcalPFClusterIsoUnseeded + fragment.hltEG18Iso60CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eEcalIsoUnseededFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIsoUnseeded + fragment.hltEG18TrackIso60Iso60CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eTrackIsoUnseededFilter + fragment.hltEG18TrackIso60Iso60CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eMass55CombMassLastFilter ) fragment.HLTDiphoton3018R9Idb50e90ANDIso60CaloId15b35eANDHE12b10eNoPixelVetoSequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgamma + fragment.hltEgammaCandidates + fragment.hltEGL1SingleAndDoubleEGOrFilter + fragment.hltEG30L1SingleAndDoubleEGOrEtFilter + fragment.hltEgammaR9ID + fragment.hltEG30R9Id50b80eR9IdFilter + fragment.HLTDoLocalHcalSequence + fragment.HLTFastJetForEgamma + fragment.hltEgammaHoverE + fragment.hltEG30HE12b10eR9Id50b80eHEFilter + fragment.hltEG30R9Id50b90eHE12b10eR9Id50b80eR9IdFilter + fragment.hltEgammaClusterShape + fragment.hltEG30CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eClusterShapeFilter + fragment.hltEgammaEcalPFClusterIso + fragment.hltEG30Iso60CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eEcalIsoFilter + fragment.HLTPFClusteringForEgammaUnseeded + fragment.hltEgammaCandidatesUnseeded + fragment.hltDiEG18EtUnseededFilter + fragment.hltEgammaR9IDUnseeded + fragment.hltDiEG18R9Id50b80eR9IdUnseededFilter + fragment.hltEgammaHoverEUnseeded + fragment.hltDiEG18HE12b10eR9Id50b80eHEUnseededFilter + fragment.hltEG18R9Id50b90eHE12b10eR9Id50b80eR9IdUnseededFilter + fragment.hltEgammaClusterShapeUnseeded + fragment.hltEG18CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eClusterShapeUnseededFilter + fragment.hltEgammaEcalPFClusterIsoUnseeded + fragment.hltEG18Iso60CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eEcalIsoUnseededFilter + fragment.HLTTrackReconstructionForIsoForPhotons + fragment.hltEgammaHollowTrackIsoUnseeded + fragment.hltEG18TrackIso60Iso60CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eTrackIsoUnseededFilter ) fragment.HLTBeginSequenceParking = cms.Sequence( fragment.hltTriggerType + fragment.hltEnableParking + fragment.HLTL1UnpackerSequence + fragment.HLTBeamSpot ) -fragment.HLTPFScoutingPackingSequence = cms.Sequence( fragment.hltScoutingPFPacker + fragment.hltScoutingMuonPacker + fragment.hltScoutingEgammaPacker ) +fragment.HLTPixelOnlyPFScoutingPackingSequence = cms.Sequence( fragment.hltScoutingPFPacker + fragment.hltScoutingMuonPacker + fragment.hltScoutingEgammaPacker ) fragment.HLTriggerFirstPath = cms.Path( fragment.hltGetConditions + fragment.hltGetRaw + fragment.hltPSetMap + fragment.hltBoolFalse ) fragment.HLT_AK8PFJet360_TrimMass30_v18 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sSingleJet180 + fragment.hltPreAK8PFJet360TrimMass30 + fragment.HLTAK8CaloJetsSequence + fragment.hltAK8SingleCaloJet260 + fragment.HLTAK8PFJetsSequence + fragment.hltAK8PFJetsCorrectedMatchedToCaloJets260 + fragment.hltAK8SinglePFJet360 + fragment.hltAK8TrimModJets + fragment.hltAK8SinglePFJetTrimModMass30 + fragment.HLTEndSequence ) @@ -88820,24 +90779,7 @@ fragment.HLT_ZeroBias_part6_v6 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sZeroBias + fragment.hltPreZeroBiaspart6 + fragment.HLTEndSequence ) fragment.HLT_ZeroBias_part7_v6 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sZeroBias + fragment.hltPreZeroBiaspart7 + fragment.HLTEndSequence ) fragment.DST_ZeroBias_v2 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sZeroBias + fragment.hltPreDSTZeroBias + fragment.HLTEndSequence ) -fragment.DST_HT250_CaloScouting_v10 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 + fragment.hltPreDSTHT250CaloScouting + fragment.HLTAK4CaloJetsSequence + fragment.hltHtMht + fragment.hltHT250 + fragment.HLTCaloScoutingSequence + fragment.HLTEndSequence ) -fragment.DST_HT250_CaloBTagScouting_v10 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 + fragment.hltPreDSTHT250CaloBTagScouting + fragment.HLTAK4CaloJetsSequence + fragment.hltHtMht + fragment.hltHT250 + fragment.HLTCaloScoutingSequence + fragment.HLTCaloBTagScoutingSequence + fragment.HLTEndSequence ) -fragment.DST_HT410_PFScouting_v16 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 + fragment.hltPreDSTHT410PFScouting + fragment.HLTAK4CaloJetsSequence + fragment.hltHtMht + fragment.hltHT410 + fragment.HLTPFScoutingSequence + fragment.HLTEndSequence ) -fragment.DST_HT410_BTagScouting_v16 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 + fragment.hltPreDSTHT410BTagScouting + fragment.HLTAK4CaloJetsSequence + fragment.hltHtMht + fragment.hltHT410 + fragment.HLTPFScoutingSequence + fragment.HLTBTagScoutingSequence + fragment.HLTEndSequence ) -fragment.DST_ZeroBias_BTagScouting_v15 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sZeroBias + fragment.hltPreDSTZeroBiasBTagScouting + fragment.HLTPFScoutingSequence + fragment.HLTBTagScoutingSequence + fragment.HLTEndSequence ) -fragment.DST_ZeroBias_CaloScouting_PFScouting_v14 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sZeroBias + fragment.hltPreDSTZeroBiasCaloScoutingPFScouting + fragment.HLTCaloScoutingSequence + fragment.HLTPFScoutingSequence + fragment.HLTEndSequence ) -fragment.DST_CaloJet40_BTagScouting_v15 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sZeroBias + fragment.hltPreDSTCaloJet40BTagScouting + fragment.HLTAK4CaloJetsSequence + fragment.hltSingleAK4CaloJet40 + fragment.HLTPFScoutingSequence + fragment.HLTBTagScoutingSequence + fragment.HLTEndSequence ) -fragment.DST_CaloJet40_CaloScouting_PFScouting_v15 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sZeroBias + fragment.hltPreDSTCaloJet40CaloScoutingPFScouting + fragment.HLTAK4CaloJetsSequence + fragment.hltSingleAK4CaloJet40 + fragment.HLTCaloScoutingSequence + fragment.HLTPFScoutingSequence + fragment.HLTEndSequence ) -fragment.DST_CaloJet40_CaloBTagScouting_v14 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sZeroBias + fragment.hltPreDSTCaloJet40CaloBTagScouting + fragment.HLTAK4CaloJetsSequence + fragment.hltSingleAK4CaloJet40 + fragment.HLTCaloScoutingSequence + fragment.HLTCaloBTagScoutingSequence + fragment.HLTPFScoutingSequence + fragment.HLTEndSequence ) -fragment.DST_L1HTT_BTagScouting_v15 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 + fragment.hltPreDSTL1HTTBTagScouting + fragment.HLTPFScoutingSequence + fragment.HLTBTagScoutingSequence + fragment.HLTEndSequence ) -fragment.DST_L1HTT_CaloScouting_PFScouting_v15 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 + fragment.hltPreDSTL1HTTCaloScoutingPFScouting + fragment.HLTCaloScoutingSequence + fragment.HLTPFScoutingSequence + fragment.HLTEndSequence ) -fragment.DST_L1HTT_CaloBTagScouting_v14 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 + fragment.hltPreDSTL1HTTCaloBTagScouting + fragment.HLTCaloScoutingSequence + fragment.HLTCaloBTagScoutingSequence + fragment.HLTPFScoutingSequence + fragment.HLTEndSequence ) -fragment.DST_L1DoubleMu_BTagScouting_v16 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sDoubleMuIorTripleMuIorQuadMu + fragment.hltPreDSTL1DoubleMuBTagScouting + fragment.HLTPFScoutingSequence + fragment.HLTBTagScoutingSequence + fragment.HLTEndSequence ) -fragment.DST_L1DoubleMu_CaloScouting_PFScouting_v15 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sDoubleMuIorTripleMuIorQuadMu + fragment.hltPreDSTL1DoubleMuCaloScoutingPFScouting + fragment.HLTCaloScoutingSequence + fragment.HLTPFScoutingSequence + fragment.HLTEndSequence ) -fragment.DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sHTT200to500IorSingleJet180to200 + fragment.hltPreDSTDoubleMu3noVtxCaloScoutingMonitoring + fragment.HLTL2muonrecoSequenceNoVtx + fragment.HLTL3muonrecoSequenceNoVtx + fragment.HLTAK4CaloJetsSequence + fragment.hltHtMht + fragment.hltHT250 + fragment.HLTCaloScoutingSequence + fragment.HLTMuIsolationSequenceNoVtx + fragment.HLTEndSequence ) -fragment.DST_DoubleMu3_noVtx_CaloScouting_v6 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sDoubleMuIorTripleMuIorQuadMu + fragment.hltPreDSTDoubleMu3noVtxCaloScouting + fragment.hltDimuon3L1Filtered0 + fragment.HLTL2muonrecoSequenceNoVtx + fragment.hltDimuon3L2PreFiltered0 + fragment.HLTL3muonrecoSequenceNoVtx + fragment.hltDoubleMu3L3FilteredNoVtx + fragment.HLTCaloScoutingSequence + fragment.HLTMuIsolationSequenceNoVtx + fragment.hltDisplacedmumuVtxProducer + fragment.HLTEndSequence ) -fragment.DST_DoubleMu1_noVtx_CaloScouting_v2 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sDoubleMuIorTripleMuIorQuadMu + fragment.hltPreDSTDoubleMu1noVtxCaloScouting + fragment.hltDimuon3L1Filtered0 + fragment.HLTL2muonrecoSequenceNoVtx + fragment.hltDimuon3L2PreFiltered0 + fragment.HLTL3muonrecoSequenceNoVtx + fragment.hltDoubleMu1L3FilteredNoVtx + fragment.HLTCaloScoutingSequence + fragment.HLTMuIsolationSequenceNoVtx + fragment.hltDisplacedmumu1VtxProducer + fragment.HLTEndSequence ) -fragment.DST_DoubleMu3_noVtx_Mass10_PFScouting_v3 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sDoubleMuIorTripleMuIorQuadMu + fragment.hltPreDSTDoubleMu3noVtxMass10PFScouting + fragment.hltDimuon3L1Filtered0 + fragment.HLTL2muonrecoSequenceNoVtx + fragment.hltDimuon3L2PreFiltered0 + fragment.HLTL3muonrecoSequenceNoVtx + fragment.hltDoubleMu3L3FilteredNoVtxMass10 + fragment.HLTCaloScoutingSequence + fragment.HLTPFScoutingSequenceNoVtx + fragment.hltDisplacedmumuMass10VtxProducer + fragment.HLTEndSequence ) +fragment.DST_Run3_PFScoutingPixelTracking_v16 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sDSTRun3PFScoutingPixelTracking + fragment.hltPreDSTRun3PFScoutingPixelTracking + fragment.HLTAK4CaloJetsSequence + fragment.HLTPixelOnlyPFScoutingSequence + fragment.hltEgammaR9ID + fragment.HLTL2muonrecoSequenceScoutingNoVtx + fragment.HLTL3muonrecoSequenceScoutingNoVtx + fragment.hltDisplacedmumuVtxNoMatchingProducer + fragment.HLTMuIsolationSequenceScoutingNoVtx + fragment.HLTEndSequence ) fragment.HLT_AK4CaloJet30_v11 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sZeroBias + fragment.hltPreAK4CaloJet30 + fragment.HLTAK4CaloJetsSequence + fragment.hltSingleAK4CaloJet30 + fragment.HLTEndSequence ) fragment.HLT_AK4CaloJet40_v10 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sZeroBias + fragment.hltPreAK4CaloJet40 + fragment.HLTAK4CaloJetsSequence + fragment.hltSingleAK4CaloJet40 + fragment.HLTEndSequence ) fragment.HLT_AK4CaloJet50_v10 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sZeroBias + fragment.hltPreAK4CaloJet50 + fragment.HLTAK4CaloJetsSequence + fragment.hltSingleAK4CaloJet50 + fragment.HLTEndSequence ) @@ -89037,14 +90979,13 @@ fragment.HLT_DoubleTrkMu_16_6_NoFiltersNoVtx_v1 = cms.Path( fragment.HLTBeginSequence + fragment.hltL1sDoubleMu0SQ + fragment.hltPreDoubleTrkMu166NoFiltersNoVtx + fragment.hltL1fL1sDoubleMu0SQL1Filtered0 + fragment.HLTL2muonrecoSequenceNoVtx + cms.ignore(fragment.hltL2pfL1sDoubleMu0SQL1f0L2PreFiltered0NoVtx) + cms.ignore(fragment.hltL2fL1sDoubleMu0SQL1f0L2Filtered10OneMuNoVtx) + fragment.HLTL3muonrecoSequenceNoVtx + fragment.hltL3pfL1sDoubleMu0SQL1f0L2pf0OneMuL3PreFiltered6NoVtx + fragment.hltL3fL1sDoubleMu0SQL1f0L2f10OneMuL3Filtered16NoVtx + fragment.HLTTrackerMuonSequenceNoVtx + fragment.hltDoubleTrkMuFiltered6NoVtx + fragment.hltSingleTrkMuFiltered16NoVtx + fragment.HLTEndSequence ) fragment.HLTriggerFinalPath = cms.Path( fragment.hltGtStage2Digis + fragment.hltScalersRawToDigi + fragment.hltFEDSelector + fragment.hltTriggerSummaryAOD + fragment.hltTriggerSummaryRAW + fragment.hltBoolFalse ) fragment.HLTAnalyzerEndpath = cms.EndPath( fragment.hltGtStage2Digis + fragment.hltPreHLTAnalyzerEndpath + fragment.hltL1TGlobalSummary + fragment.hltTrigReport ) -fragment.ScoutingPFOutput = cms.Path( fragment.hltGtStage2Digis + fragment.hltPreScoutingPFOutput + fragment.hltFEDSelectorL1 + fragment.HLTPFScoutingPackingSequence + fragment.hltScoutingPrimaryVertexPacker ) -fragment.ScoutingCaloMuonOutput = cms.Path( fragment.hltGtStage2Digis + fragment.hltPreScoutingCaloMuonOutput + fragment.hltFEDSelectorL1 + fragment.hltScoutingCaloPacker + fragment.hltScoutingMuonPackerCalo + fragment.hltScoutingPrimaryVertexPacker + fragment.hltScoutingPrimaryVertexPackerCaloMuon + fragment.hltScoutingTrackPacker ) +fragment.ScoutingPFOutput = cms.Path( fragment.hltGtStage2Digis + fragment.hltPreScoutingPFOutput + fragment.hltFEDSelectorL1 + fragment.HLTPixelOnlyPFScoutingPackingSequence + fragment.hltScoutingPrimaryVertexPacker + fragment.hltScoutingTrackPacker ) -fragment.HLTSchedule = cms.Schedule( *(fragment.HLTriggerFirstPath, fragment.HLT_AK8PFJet360_TrimMass30_v18, fragment.HLT_AK8PFJet380_TrimMass30_v11, fragment.HLT_AK8PFJet400_TrimMass30_v12, fragment.HLT_AK8PFJet420_TrimMass30_v11, fragment.HLT_AK8PFHT750_TrimMass50_v12, fragment.HLT_AK8PFHT800_TrimMass50_v12, fragment.HLT_AK8PFHT850_TrimMass50_v11, fragment.HLT_AK8PFHT900_TrimMass50_v11, fragment.HLT_CaloJet500_NoJetID_v12, fragment.HLT_CaloJet550_NoJetID_v7, fragment.HLT_DoubleMu5_Upsilon_DoubleEle3_CaloIdL_TrackIdL_v4, fragment.HLT_DoubleMu3_DoubleEle7p5_CaloIdL_TrackIdL_Upsilon_v4, fragment.HLT_Trimuon5_3p5_2_Upsilon_Muon_v5, fragment.HLT_TrimuonOpen_5_3p5_2_Upsilon_Muon_v3, fragment.HLT_DoubleEle25_CaloIdL_MW_v4, fragment.HLT_DoubleEle27_CaloIdL_MW_v4, fragment.HLT_DoubleEle33_CaloIdL_MW_v17, fragment.HLT_DoubleEle24_eta2p1_WPTight_Gsf_v7, fragment.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_DZ_PFHT350_v20, fragment.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_PFHT350_v20, fragment.HLT_Ele27_Ele37_CaloIdL_MW_v4, fragment.HLT_Mu27_Ele37_CaloIdL_MW_v5, fragment.HLT_Mu37_Ele27_CaloIdL_MW_v5, fragment.HLT_Mu37_TkMu27_v5, fragment.HLT_DoubleMu4_3_Bs_v14, fragment.HLT_DoubleMu4_3_Jpsi_v2, fragment.HLT_DoubleMu4_JpsiTrk_Displaced_v15, fragment.HLT_DoubleMu4_LowMassNonResonantTrk_Displaced_v15, fragment.HLT_DoubleMu3_Trk_Tau3mu_v12, fragment.HLT_DoubleMu3_TkMu_DsTau3Mu_v4, fragment.HLT_DoubleMu4_PsiPrimeTrk_Displaced_v15, fragment.HLT_DoubleMu4_Mass3p8_DZ_PFHT350_v8, fragment.HLT_Mu3_PFJet40_v16, fragment.HLT_Mu7p5_L2Mu2_Jpsi_v10, fragment.HLT_Mu7p5_L2Mu2_Upsilon_v10, fragment.HLT_Mu7p5_Track2_Jpsi_v11, fragment.HLT_Mu7p5_Track3p5_Jpsi_v11, fragment.HLT_Mu7p5_Track7_Jpsi_v11, fragment.HLT_Mu7p5_Track2_Upsilon_v11, fragment.HLT_Mu7p5_Track3p5_Upsilon_v11, fragment.HLT_Mu7p5_Track7_Upsilon_v11, fragment.HLT_Mu3_L1SingleMu5orSingleMu7_v1, fragment.HLT_DoublePhoton33_CaloIdL_v6, fragment.HLT_DoublePhoton70_v6, fragment.HLT_DoublePhoton85_v14, fragment.HLT_Ele20_WPTight_Gsf_v6, fragment.HLT_Ele15_WPLoose_Gsf_v3, fragment.HLT_Ele17_WPLoose_Gsf_v3, fragment.HLT_Ele20_WPLoose_Gsf_v6, fragment.HLT_Ele20_eta2p1_WPLoose_Gsf_v6, fragment.HLT_DiEle27_WPTightCaloOnly_L1DoubleEG_v4, fragment.HLT_Ele27_WPTight_Gsf_v16, fragment.HLT_Ele28_WPTight_Gsf_v1, fragment.HLT_Ele30_WPTight_Gsf_v1, fragment.HLT_Ele32_WPTight_Gsf_v15, fragment.HLT_Ele35_WPTight_Gsf_v9, fragment.HLT_Ele35_WPTight_Gsf_L1EGMT_v5, fragment.HLT_Ele38_WPTight_Gsf_v9, fragment.HLT_Ele40_WPTight_Gsf_v9, fragment.HLT_Ele32_WPTight_Gsf_L1DoubleEG_v9, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTau30_eta2p1_CrossL1_v13, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, fragment.HLT_HT450_Beamspot_v11, fragment.HLT_HT300_Beamspot_v11, fragment.HLT_ZeroBias_Beamspot_v4, fragment.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTau27_eta2p1_CrossL1_v12, fragment.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_CrossL1_v4, fragment.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v4, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS30_Trk1_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu27_LooseChargedIsoPFTau20_Trk1_eta2p1_SingleL1_v5, fragment.HLT_IsoMu27_LooseChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, fragment.HLT_IsoMu27_MediumChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, fragment.HLT_IsoMu27_TightChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, fragment.HLT_IsoMu20_v15, fragment.HLT_IsoMu24_v13, fragment.HLT_IsoMu24_eta2p1_v15, fragment.HLT_IsoMu27_v16, fragment.HLT_IsoMu30_v4, fragment.HLT_UncorrectedJetE30_NoBPTX_v6, fragment.HLT_UncorrectedJetE30_NoBPTX3BX_v6, fragment.HLT_UncorrectedJetE60_NoBPTX3BX_v6, fragment.HLT_UncorrectedJetE70_NoBPTX3BX_v6, fragment.HLT_L1SingleMu18_v3, fragment.HLT_L1SingleMu25_v2, fragment.HLT_L1SingleMuCosmics_v1, fragment.HLT_L2Mu10_v7, fragment.HLT_L2Mu10_NoVertex_NoBPTX3BX_v5, fragment.HLT_L2Mu10_NoVertex_NoBPTX_v6, fragment.HLT_L2Mu45_NoVertex_3Sta_NoBPTX3BX_v4, fragment.HLT_L2Mu40_NoVertex_3Sta_NoBPTX3BX_v5, fragment.HLT_L2Mu50_v2, fragment.HLT_L2Mu23NoVtx_2Cha_v1, fragment.HLT_L2Mu23NoVtx_2Cha_CosmicSeed_v1, fragment.HLT_DoubleL2Mu30NoVtx_2Cha_CosmicSeed_Eta2p4_v2, fragment.HLT_DoubleL2Mu30NoVtx_2Cha_Eta2p4_v2, fragment.HLT_DoubleL2Mu50_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_Eta2p4_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_Eta2p4_v2, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_v14, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_v3, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v15, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_v3, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8_v5, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass8_v3, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8_v5, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass3p8_v3, fragment.HLT_Mu25_TkMu0_Onia_v8, fragment.HLT_Mu30_TkMu0_Psi_v1, fragment.HLT_Mu30_TkMu0_Upsilon_v1, fragment.HLT_Mu20_TkMu0_Phi_v8, fragment.HLT_Mu25_TkMu0_Phi_v8, fragment.HLT_Mu12_v3, fragment.HLT_Mu15_v3, fragment.HLT_Mu20_v12, fragment.HLT_Mu27_v13, fragment.HLT_Mu50_v13, fragment.HLT_Mu55_v3, fragment.HLT_OldMu100_v3, fragment.HLT_TkMu100_v2, fragment.HLT_DiPFJet15_NoCaloMatched_v16, fragment.HLT_DiPFJet25_NoCaloMatched_v16, fragment.HLT_DiPFJet15_FBEta3_NoCaloMatched_v17, fragment.HLT_DiPFJet25_FBEta3_NoCaloMatched_v17, fragment.HLT_DiPFJetAve40_v14, fragment.HLT_DiPFJetAve60_v14, fragment.HLT_DiPFJetAve80_v13, fragment.HLT_DiPFJetAve140_v13, fragment.HLT_DiPFJetAve200_v13, fragment.HLT_DiPFJetAve260_v14, fragment.HLT_DiPFJetAve320_v14, fragment.HLT_DiPFJetAve400_v14, fragment.HLT_DiPFJetAve500_v14, fragment.HLT_DiPFJetAve15_HFJEC_v17, fragment.HLT_DiPFJetAve25_HFJEC_v17, fragment.HLT_DiPFJetAve35_HFJEC_v17, fragment.HLT_DiPFJetAve60_HFJEC_v15, fragment.HLT_DiPFJetAve80_HFJEC_v16, fragment.HLT_DiPFJetAve100_HFJEC_v16, fragment.HLT_DiPFJetAve160_HFJEC_v16, fragment.HLT_DiPFJetAve220_HFJEC_v16, fragment.HLT_DiPFJetAve300_HFJEC_v16, fragment.HLT_AK8PFJet15_v3, fragment.HLT_AK8PFJet25_v3, fragment.HLT_AK8PFJet40_v16, fragment.HLT_AK8PFJet60_v15, fragment.HLT_AK8PFJet80_v15, fragment.HLT_AK8PFJet140_v15, fragment.HLT_AK8PFJet200_v15, fragment.HLT_AK8PFJet260_v16, fragment.HLT_AK8PFJet320_v16, fragment.HLT_AK8PFJet400_v16, fragment.HLT_AK8PFJet450_v16, fragment.HLT_AK8PFJet500_v16, fragment.HLT_AK8PFJet550_v11, fragment.HLT_PFJet15_v3, fragment.HLT_PFJet25_v3, fragment.HLT_PFJet40_v21, fragment.HLT_PFJet60_v21, fragment.HLT_PFJet80_v20, fragment.HLT_PFJet140_v19, fragment.HLT_PFJet200_v19, fragment.HLT_PFJet260_v20, fragment.HLT_PFJet320_v20, fragment.HLT_PFJet400_v20, fragment.HLT_PFJet450_v21, fragment.HLT_PFJet500_v21, fragment.HLT_PFJet550_v11, fragment.HLT_PFJetFwd15_v3, fragment.HLT_PFJetFwd25_v3, fragment.HLT_PFJetFwd40_v19, fragment.HLT_PFJetFwd60_v19, fragment.HLT_PFJetFwd80_v18, fragment.HLT_PFJetFwd140_v18, fragment.HLT_PFJetFwd200_v18, fragment.HLT_PFJetFwd260_v19, fragment.HLT_PFJetFwd320_v19, fragment.HLT_PFJetFwd400_v19, fragment.HLT_PFJetFwd450_v19, fragment.HLT_PFJetFwd500_v19, fragment.HLT_AK8PFJetFwd15_v3, fragment.HLT_AK8PFJetFwd25_v3, fragment.HLT_AK8PFJetFwd40_v15, fragment.HLT_AK8PFJetFwd60_v14, fragment.HLT_AK8PFJetFwd80_v14, fragment.HLT_AK8PFJetFwd140_v14, fragment.HLT_AK8PFJetFwd200_v14, fragment.HLT_AK8PFJetFwd260_v15, fragment.HLT_AK8PFJetFwd320_v15, fragment.HLT_AK8PFJetFwd400_v15, fragment.HLT_AK8PFJetFwd450_v15, fragment.HLT_AK8PFJetFwd500_v15, fragment.HLT_PFHT180_v17, fragment.HLT_PFHT250_v17, fragment.HLT_PFHT370_v17, fragment.HLT_PFHT430_v17, fragment.HLT_PFHT510_v17, fragment.HLT_PFHT590_v17, fragment.HLT_PFHT680_v17, fragment.HLT_PFHT780_v17, fragment.HLT_PFHT890_v17, fragment.HLT_PFHT1050_v18, fragment.HLT_PFHT500_PFMET100_PFMHT100_IDTight_v12, fragment.HLT_PFHT500_PFMET110_PFMHT110_IDTight_v12, fragment.HLT_PFHT700_PFMET85_PFMHT85_IDTight_v12, fragment.HLT_PFHT700_PFMET95_PFMHT95_IDTight_v12, fragment.HLT_PFHT800_PFMET75_PFMHT75_IDTight_v12, fragment.HLT_PFHT800_PFMET85_PFMHT85_IDTight_v12, fragment.HLT_PFMET110_PFMHT110_IDTight_v20, fragment.HLT_PFMET120_PFMHT120_IDTight_v20, fragment.HLT_PFMET130_PFMHT130_IDTight_v20, fragment.HLT_PFMET140_PFMHT140_IDTight_v20, fragment.HLT_PFMET100_PFMHT100_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET110_PFMHT110_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET120_PFMHT120_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET130_PFMHT130_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET140_PFMHT140_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET120_PFMHT120_IDTight_PFHT60_v9, fragment.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_PFHT60_v9, fragment.HLT_PFMETTypeOne120_PFMHT120_IDTight_PFHT60_v9, fragment.HLT_PFMETTypeOne110_PFMHT110_IDTight_v12, fragment.HLT_PFMETTypeOne120_PFMHT120_IDTight_v12, fragment.HLT_PFMETTypeOne130_PFMHT130_IDTight_v12, fragment.HLT_PFMETTypeOne140_PFMHT140_IDTight_v11, fragment.HLT_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, fragment.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, fragment.HLT_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, fragment.HLT_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, fragment.HLT_MonoCentralPFJet80_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, fragment.HLT_MonoCentralPFJet80_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, fragment.HLT_MonoCentralPFJet80_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, fragment.HLT_MonoCentralPFJet80_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, fragment.HLT_L1ETMHadSeeds_v2, fragment.HLT_CaloMHT90_v4, fragment.HLT_CaloMET80_NotCleaned_v4, fragment.HLT_CaloMET90_NotCleaned_v4, fragment.HLT_CaloMET100_NotCleaned_v4, fragment.HLT_CaloMET110_NotCleaned_v4, fragment.HLT_CaloMET250_NotCleaned_v4, fragment.HLT_CaloMET300_NotCleaned_v4, fragment.HLT_CaloMET350_NotCleaned_v4, fragment.HLT_PFMET200_NotCleaned_v9, fragment.HLT_PFMET250_NotCleaned_v9, fragment.HLT_PFMET300_NotCleaned_v9, fragment.HLT_PFMET200_BeamHaloCleaned_v9, fragment.HLT_PFMETTypeOne200_BeamHaloCleaned_v9, fragment.HLT_MET105_IsoTrk50_v9, fragment.HLT_MET120_IsoTrk50_v9, fragment.HLT_SingleJet30_Mu12_SinglePFJet40_v11, fragment.HLT_Mu12_DoublePFJets40_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets100_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets200_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets350_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets40MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets54MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets62MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets40_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets100_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets200_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets350_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets116MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets128MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_Photon300_NoHE_v12, fragment.HLT_Mu8_TrkIsoVVL_v12, fragment.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_DZ_v18, fragment.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_v18, fragment.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_DZ_v19, fragment.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_v19, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v13, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_PFBtagDeepCSV_1p5_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_CaloBtagDeepCSV_1p5_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v11, fragment.HLT_Mu17_TrkIsoVVL_v13, fragment.HLT_Mu19_TrkIsoVVL_v4, fragment.HLT_BTagMu_AK4DiJet20_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet40_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet70_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet110_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet170_Mu5_v12, fragment.HLT_BTagMu_AK4Jet300_Mu5_v12, fragment.HLT_BTagMu_AK8DiJet170_Mu5_v9, fragment.HLT_BTagMu_AK8Jet170_DoubleMu5_v2, fragment.HLT_BTagMu_AK8Jet300_Mu5_v12, fragment.HLT_BTagMu_AK4DiJet20_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet40_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet70_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet110_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet170_Mu5_noalgo_v12, fragment.HLT_BTagMu_AK4Jet300_Mu5_noalgo_v12, fragment.HLT_BTagMu_AK8DiJet170_Mu5_noalgo_v9, fragment.HLT_BTagMu_AK8Jet170_DoubleMu5_noalgo_v2, fragment.HLT_BTagMu_AK8Jet300_Mu5_noalgo_v12, fragment.HLT_Ele15_Ele8_CaloIdL_TrackIdL_IsoVL_v3, fragment.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v19, fragment.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_v19, fragment.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v15, fragment.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_v7, fragment.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v7, fragment.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v15, fragment.HLT_Mu12_DoublePhoton20_v5, fragment.HLT_TriplePhoton_20_20_20_CaloIdLV2_v3, fragment.HLT_TriplePhoton_20_20_20_CaloIdLV2_R9IdVL_v3, fragment.HLT_TriplePhoton_30_30_10_CaloIdLV2_v4, fragment.HLT_TriplePhoton_30_30_10_CaloIdLV2_R9IdVL_v4, fragment.HLT_TriplePhoton_35_35_5_CaloIdLV2_R9IdVL_v4, fragment.HLT_Photon20_v2, fragment.HLT_Photon33_v5, fragment.HLT_Photon50_v13, fragment.HLT_Photon75_v13, fragment.HLT_Photon90_v13, fragment.HLT_Photon120_v13, fragment.HLT_Photon150_v6, fragment.HLT_Photon175_v14, fragment.HLT_Photon200_v13, fragment.HLT_Photon100EB_TightID_TightIso_v2, fragment.HLT_Photon110EB_TightID_TightIso_v2, fragment.HLT_Photon120EB_TightID_TightIso_v2, fragment.HLT_Photon100EBHE10_v2, fragment.HLT_Photon100EEHE10_v2, fragment.HLT_Photon100EE_TightID_TightIso_v2, fragment.HLT_Photon50_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon75_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ300_PFJetsMJJ400DEta3_v5, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ400_PFJetsMJJ600DEta3_v5, fragment.HLT_Photon90_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon120_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon165_R9Id90_HE10_IsoM_v15, fragment.HLT_Photon90_CaloIdL_PFHT700_v16, fragment.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass90_v13, fragment.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass95_v13, fragment.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_PixelVeto_Mass55_v15, fragment.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_NoPixelVeto_Mass55_v13, fragment.HLT_Photon35_TwoProngs35_v1, fragment.HLT_IsoMu24_TwoProngs35_v1, fragment.HLT_Dimuon0_Jpsi_L1_NoOS_v7, fragment.HLT_Dimuon0_Jpsi_NoVertexing_NoOS_v7, fragment.HLT_Dimuon0_Jpsi_v8, fragment.HLT_Dimuon0_Jpsi_NoVertexing_v8, fragment.HLT_Dimuon0_Jpsi_L1_4R_0er1p5R_v7, fragment.HLT_Dimuon0_Jpsi_NoVertexing_L1_4R_0er1p5R_v7, fragment.HLT_Dimuon0_Jpsi3p5_Muon2_v5, fragment.HLT_Dimuon0_Upsilon_L1_4p5_v9, fragment.HLT_Dimuon0_Upsilon_L1_5_v9, fragment.HLT_Dimuon0_Upsilon_L1_4p5NoOS_v8, fragment.HLT_Dimuon0_Upsilon_L1_4p5er2p0_v9, fragment.HLT_Dimuon0_Upsilon_L1_4p5er2p0M_v7, fragment.HLT_Dimuon0_Upsilon_NoVertexing_v7, fragment.HLT_Dimuon0_Upsilon_L1_5M_v8, fragment.HLT_Dimuon0_LowMass_L1_0er1p5R_v7, fragment.HLT_Dimuon0_LowMass_L1_0er1p5_v8, fragment.HLT_Dimuon0_LowMass_v8, fragment.HLT_Dimuon0_LowMass_L1_4_v8, fragment.HLT_Dimuon0_LowMass_L1_4R_v7, fragment.HLT_Dimuon0_LowMass_L1_TM530_v6, fragment.HLT_Dimuon0_Upsilon_Muon_L1_TM0_v6, fragment.HLT_Dimuon0_Upsilon_Muon_NoL1Mass_v6, fragment.HLT_TripleMu_5_3_3_Mass3p8_DZ_v8, fragment.HLT_TripleMu_10_5_5_DZ_v10, fragment.HLT_TripleMu_12_10_5_v10, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_v4, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_Charge1_v4, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_v4, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_Charge1_v4, fragment.HLT_DoubleMu3_DZ_PFMET50_PFMHT60_v10, fragment.HLT_DoubleMu3_DZ_PFMET70_PFMHT70_v10, fragment.HLT_DoubleMu3_DZ_PFMET90_PFMHT90_v10, fragment.HLT_DoubleMu3_Trk_Tau3mu_NoL1Mass_v6, fragment.HLT_DoubleMu4_Jpsi_Displaced_v7, fragment.HLT_DoubleMu4_Jpsi_NoVertexing_v7, fragment.HLT_DoubleMu4_JpsiTrkTrk_Displaced_v7, fragment.HLT_DoubleMu43NoFiltersNoVtx_v4, fragment.HLT_DoubleMu48NoFiltersNoVtx_v4, fragment.HLT_Mu43NoFiltersNoVtx_Photon43_CaloIdL_v5, fragment.HLT_Mu48NoFiltersNoVtx_Photon48_CaloIdL_v5, fragment.HLT_Mu38NoFiltersNoVtxDisplaced_Photon38_CaloIdL_v1, fragment.HLT_Mu43NoFiltersNoVtxDisplaced_Photon43_CaloIdL_v1, fragment.HLT_DoubleMu33NoFiltersNoVtxDisplaced_v1, fragment.HLT_DoubleMu40NoFiltersNoVtxDisplaced_v1, fragment.HLT_DoubleMu20_7_Mass0to30_L1_DM4_v7, fragment.HLT_DoubleMu20_7_Mass0to30_L1_DM4EG_v8, fragment.HLT_HT425_v9, fragment.HLT_HT430_DisplacedDijet40_DisplacedTrack_v13, fragment.HLT_HT500_DisplacedDijet40_DisplacedTrack_v13, fragment.HLT_HT430_DisplacedDijet60_DisplacedTrack_v13, fragment.HLT_HT400_DisplacedDijet40_DisplacedTrack_v13, fragment.HLT_HT650_DisplacedDijet60_Inclusive_v13, fragment.HLT_HT550_DisplacedDijet60_Inclusive_v13, fragment.HLT_DiJet110_35_Mjj650_PFMET110_v9, fragment.HLT_DiJet110_35_Mjj650_PFMET120_v9, fragment.HLT_DiJet110_35_Mjj650_PFMET130_v9, fragment.HLT_TripleJet110_35_35_Mjj650_PFMET110_v9, fragment.HLT_TripleJet110_35_35_Mjj650_PFMET120_v9, fragment.HLT_TripleJet110_35_35_Mjj650_PFMET130_v9, fragment.HLT_Ele30_eta2p1_WPTight_Gsf_CentralPFJet35_EleCleaned_v13, fragment.HLT_Ele28_eta2p1_WPTight_Gsf_HT150_v13, fragment.HLT_Ele28_HighEta_SC20_Mass55_v13, fragment.HLT_DoubleMu20_7_Mass0to30_Photon23_v8, fragment.HLT_Ele15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, fragment.HLT_Ele15_IsoVVVL_PFHT450_PFMET50_v16, fragment.HLT_Ele15_IsoVVVL_PFHT450_v16, fragment.HLT_Ele50_IsoVVVL_PFHT450_v16, fragment.HLT_Ele15_IsoVVVL_PFHT600_v20, fragment.HLT_Mu4_TrkIsoVVL_DiPFJet90_40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v15, fragment.HLT_Mu8_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v16, fragment.HLT_Mu10_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT350_PFMETNoMu60_v15, fragment.HLT_Mu15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, fragment.HLT_Mu15_IsoVVVL_PFHT450_PFMET50_v15, fragment.HLT_Mu15_IsoVVVL_PFHT450_v15, fragment.HLT_Mu50_IsoVVVL_PFHT450_v15, fragment.HLT_Mu15_IsoVVVL_PFHT600_v19, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET70_PFMHT70_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET80_PFMHT80_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET90_PFMHT90_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET100_PFMHT100_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu70_PFMHTNoMu70_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu80_PFMHTNoMu80_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu90_PFMHTNoMu90_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu100_PFMHTNoMu100_IDTight_v2, fragment.HLT_Dimuon10_PsiPrime_Barrel_Seagulls_v7, fragment.HLT_Dimuon20_Jpsi_Barrel_Seagulls_v7, fragment.HLT_Dimuon12_Upsilon_y1p4_v2, fragment.HLT_Dimuon14_Phi_Barrel_Seagulls_v7, fragment.HLT_Dimuon18_PsiPrime_v14, fragment.HLT_Dimuon25_Jpsi_v14, fragment.HLT_Dimuon18_PsiPrime_noCorrL1_v6, fragment.HLT_Dimuon24_Upsilon_noCorrL1_v6, fragment.HLT_Dimuon24_Phi_noCorrL1_v6, fragment.HLT_Dimuon25_Jpsi_noCorrL1_v6, fragment.HLT_DiMu4_Ele9_CaloIdL_TrackIdL_DZ_Mass3p8_v17, fragment.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_DZ_v17, fragment.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_v17, fragment.HLT_DoubleIsoMu20_eta2p1_v7, fragment.HLT_TrkMu12_DoubleTrkMu5NoFiltersNoVtx_v6, fragment.HLT_TrkMu16_DoubleTrkMu6NoFiltersNoVtx_v12, fragment.HLT_TrkMu17_DoubleTrkMu8NoFiltersNoVtx_v13, fragment.HLT_Mu8_v12, fragment.HLT_Mu17_v13, fragment.HLT_Mu19_v4, fragment.HLT_Mu17_Photon30_IsoCaloId_v6, fragment.HLT_Ele8_CaloIdL_TrackIdL_IsoVL_PFJet30_v16, fragment.HLT_Ele12_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, fragment.HLT_Ele15_CaloIdL_TrackIdL_IsoVL_PFJet30_v3, fragment.HLT_Ele23_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, fragment.HLT_Ele8_CaloIdM_TrackIdM_PFJet30_v18, fragment.HLT_Ele17_CaloIdM_TrackIdM_PFJet30_v16, fragment.HLT_Ele23_CaloIdM_TrackIdM_PFJet30_v18, fragment.HLT_Ele50_CaloIdVT_GsfTrkIdT_PFJet165_v18, fragment.HLT_Ele115_CaloIdVT_GsfTrkIdT_v14, fragment.HLT_Ele135_CaloIdVT_GsfTrkIdT_v7, fragment.HLT_Ele145_CaloIdVT_GsfTrkIdT_v8, fragment.HLT_Ele200_CaloIdVT_GsfTrkIdT_v8, fragment.HLT_Ele250_CaloIdVT_GsfTrkIdT_v13, fragment.HLT_Ele300_CaloIdVT_GsfTrkIdT_v13, fragment.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_TriplePFBTagDeepCSV_4p5_v3, fragment.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_v9, fragment.HLT_PFHT400_SixPFJet32_DoublePFBTagDeepCSV_2p94_v8, fragment.HLT_PFHT400_SixPFJet32_v8, fragment.HLT_PFHT450_SixPFJet36_PFBTagDeepCSV_1p59_v7, fragment.HLT_PFHT450_SixPFJet36_v7, fragment.HLT_PFHT400_FivePFJet_100_100_60_30_30_v8, fragment.HLT_PFHT400_FivePFJet_100_100_60_30_30_DoublePFBTagDeepCSV_4p5_v8, fragment.HLT_PFHT400_FivePFJet_120_120_60_30_30_DoublePFBTagDeepCSV_4p5_v8, fragment.HLT_PFHT350_v19, fragment.HLT_PFHT350MinPFJet15_v9, fragment.HLT_Photon60_R9Id90_CaloIdL_IsoL_v5, fragment.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_v5, fragment.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_PFHT350MinPFJet15_v11, fragment.HLT_ECALHT800_v10, fragment.HLT_DiSC30_18_EIso_AND_HE_Mass70_v13, fragment.HLT_Physics_v7, fragment.HLT_Physics_part0_v7, fragment.HLT_Physics_part1_v7, fragment.HLT_Physics_part2_v7, fragment.HLT_Physics_part3_v7, fragment.HLT_Physics_part4_v7, fragment.HLT_Physics_part5_v7, fragment.HLT_Physics_part6_v7, fragment.HLT_Physics_part7_v7, fragment.DST_Physics_v7, fragment.HLT_Random_v3, fragment.HLT_ZeroBias_v6, fragment.HLT_ZeroBias_Alignment_v1, fragment.HLT_ZeroBias_part0_v6, fragment.HLT_ZeroBias_part1_v6, fragment.HLT_ZeroBias_part2_v6, fragment.HLT_ZeroBias_part3_v6, fragment.HLT_ZeroBias_part4_v6, fragment.HLT_ZeroBias_part5_v6, fragment.HLT_ZeroBias_part6_v6, fragment.HLT_ZeroBias_part7_v6, fragment.DST_ZeroBias_v2, fragment.DST_HT250_CaloScouting_v10, fragment.DST_HT250_CaloBTagScouting_v10, fragment.DST_HT410_PFScouting_v16, fragment.DST_HT410_BTagScouting_v16, fragment.DST_ZeroBias_BTagScouting_v15, fragment.DST_ZeroBias_CaloScouting_PFScouting_v14, fragment.DST_CaloJet40_BTagScouting_v15, fragment.DST_CaloJet40_CaloScouting_PFScouting_v15, fragment.DST_CaloJet40_CaloBTagScouting_v14, fragment.DST_L1HTT_BTagScouting_v15, fragment.DST_L1HTT_CaloScouting_PFScouting_v15, fragment.DST_L1HTT_CaloBTagScouting_v14, fragment.DST_L1DoubleMu_BTagScouting_v16, fragment.DST_L1DoubleMu_CaloScouting_PFScouting_v15, fragment.DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6, fragment.DST_DoubleMu3_noVtx_CaloScouting_v6, fragment.DST_DoubleMu1_noVtx_CaloScouting_v2, fragment.DST_DoubleMu3_noVtx_Mass10_PFScouting_v3, fragment.HLT_AK4CaloJet30_v11, fragment.HLT_AK4CaloJet40_v10, fragment.HLT_AK4CaloJet50_v10, fragment.HLT_AK4CaloJet80_v10, fragment.HLT_AK4CaloJet100_v10, fragment.HLT_AK4CaloJet120_v9, fragment.HLT_AK4PFJet30_v19, fragment.HLT_AK4PFJet50_v19, fragment.HLT_AK4PFJet80_v19, fragment.HLT_AK4PFJet100_v19, fragment.HLT_AK4PFJet120_v18, fragment.HLT_SinglePhoton10_Eta3p1ForPPRef_v8, fragment.HLT_SinglePhoton20_Eta3p1ForPPRef_v9, fragment.HLT_SinglePhoton30_Eta3p1ForPPRef_v9, fragment.HLT_Photon20_HoverELoose_v10, fragment.HLT_Photon30_HoverELoose_v10, fragment.HLT_EcalCalibration_v4, fragment.HLT_HcalCalibration_v5, fragment.AlCa_EcalPhiSym_v9, fragment.HLT_L1UnpairedBunchBptxMinus_v2, fragment.HLT_L1UnpairedBunchBptxPlus_v2, fragment.HLT_L1NotBptxOR_v3, fragment.HLT_L1_CDC_SingleMu_3_er1p2_TOP120_DPHI2p618_3p142_v2, fragment.HLT_CDC_L2cosmic_10_er1p0_v1, fragment.HLT_CDC_L2cosmic_5p5_er1p0_v1, fragment.HLT_HcalNZS_v13, fragment.HLT_HcalPhiSym_v15, fragment.HLT_HcalIsolatedbunch_v5, fragment.HLT_IsoTrackHB_v4, fragment.HLT_IsoTrackHE_v4, fragment.HLT_ZeroBias_FirstCollisionAfterAbortGap_v5, fragment.HLT_ZeroBias_IsolatedBunches_v5, fragment.HLT_ZeroBias_FirstCollisionInTrain_v4, fragment.HLT_ZeroBias_LastCollisionInTrain_v3, fragment.HLT_ZeroBias_FirstBXAfterTrain_v3, fragment.AlCa_RPCMuonNormalisation_v13, fragment.AlCa_LumiPixelsCounts_Random_v1, fragment.AlCa_LumiPixelsCounts_ZeroBias_v1, fragment.MC_ReducedIterativeTracking_v12, fragment.MC_PFMET_v17, fragment.MC_AK4PFJets_v17, fragment.MC_PFBTagDeepCSV_v10, fragment.MC_PFHT_v16, fragment.MC_PFMHT_v16, fragment.MC_CaloMET_v8, fragment.MC_CaloMET_JetIdCleaned_v9, fragment.MC_AK4CaloJets_v9, fragment.MC_AK4CaloJetsFromPV_v8, fragment.MC_CaloBTagDeepCSV_v8, fragment.MC_CaloHT_v8, fragment.MC_CaloMHT_v8, fragment.MC_AK8PFJets_v17, fragment.MC_AK8TrimPFJets_v17, fragment.MC_AK8PFHT_v16, fragment.MC_AK8CaloHT_v8, fragment.MC_Diphoton10_10_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass10_v13, fragment.MC_DoubleEle5_CaloIdL_MW_v15, fragment.MC_Ele5_WPTight_Gsf_v8, fragment.MC_Ele15_Ele10_CaloIdL_TrackIdL_IsoVL_DZ_v15, fragment.MC_IsoMu_v15, fragment.MC_DoubleMu_TrkIsoVVL_DZ_v11, fragment.MC_DoubleMuNoFiltersNoVtx_v7, fragment.AlCa_EcalPi0EBonly_v13, fragment.AlCa_EcalPi0EEonly_v13, fragment.AlCa_EcalEtaEBonly_v13, fragment.AlCa_EcalEtaEEonly_v13, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET90_v12, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET100_v12, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET110_v8, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET120_v8, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET130_v8, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET140_v3, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, fragment.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_1pr_v11, fragment.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_v12, fragment.HLT_MediumChargedIsoPFTau200HighPtRelaxedIso_Trk50_eta2p1_v12, fragment.HLT_MediumChargedIsoPFTau220HighPtRelaxedIso_Trk50_eta2p1_v12, fragment.HLT_Ele16_Ele12_Ele8_CaloIdL_TrackIdL_v9, fragment.HLT_Rsq0p35_v15, fragment.HLT_Rsq0p40_v15, fragment.HLT_RsqMR300_Rsq0p09_MR200_v15, fragment.HLT_RsqMR320_Rsq0p09_MR200_v15, fragment.HLT_RsqMR300_Rsq0p09_MR200_4jet_v15, fragment.HLT_RsqMR320_Rsq0p09_MR200_4jet_v15, fragment.HLT_IsoMu27_MET90_v3, fragment.HLT_DoubleMediumChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, fragment.HLT_DoubleMediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, fragment.HLT_DoubleTightChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, fragment.HLT_DoubleTightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, fragment.HLT_DoubleMediumChargedIsoPFTauHPS30_L1MaxMass_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4, fragment.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_VBF_DoubleLooseChargedIsoPFTau20_Trk1_eta2p1_v3, fragment.HLT_VBF_DoubleLooseChargedIsoPFTauHPS20_Trk1_eta2p1_v1, fragment.HLT_VBF_DoubleMediumChargedIsoPFTauHPS20_Trk1_eta2p1_v1, fragment.HLT_VBF_DoubleTightChargedIsoPFTauHPS20_Trk1_eta2p1_v1, fragment.HLT_Photon50_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_PFMET50_v5, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_v5, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ600DEta3_v5, fragment.HLT_PFMET100_PFMHT100_IDTight_PFHT60_v9, fragment.HLT_PFMETNoMu100_PFMHTNoMu100_IDTight_PFHT60_v9, fragment.HLT_PFMETTypeOne100_PFMHT100_IDTight_PFHT60_v9, fragment.HLT_Mu18_Mu9_SameSign_v4, fragment.HLT_Mu18_Mu9_SameSign_DZ_v4, fragment.HLT_Mu18_Mu9_v4, fragment.HLT_Mu18_Mu9_DZ_v4, fragment.HLT_Mu20_Mu10_SameSign_v4, fragment.HLT_Mu20_Mu10_SameSign_DZ_v4, fragment.HLT_Mu20_Mu10_v4, fragment.HLT_Mu20_Mu10_DZ_v4, fragment.HLT_Mu23_Mu12_SameSign_v4, fragment.HLT_Mu23_Mu12_SameSign_DZ_v4, fragment.HLT_Mu23_Mu12_v4, fragment.HLT_Mu23_Mu12_DZ_v4, fragment.HLT_DoubleMu2_Jpsi_DoubleTrk1_Phi1p05_v6, fragment.HLT_DoubleMu2_Jpsi_DoubleTkMu0_Phi_v5, fragment.HLT_DoubleMu3_DCA_PFMET50_PFMHT60_v10, fragment.HLT_TripleMu_5_3_3_Mass3p8_DCA_v3, fragment.HLT_QuadPFJet98_83_71_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_QuadPFJet103_88_75_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_QuadPFJet111_90_80_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_QuadPFJet98_83_71_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet103_88_75_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet105_88_76_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet111_90_80_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet98_83_71_15_v5, fragment.HLT_QuadPFJet103_88_75_15_v5, fragment.HLT_QuadPFJet105_88_76_15_v5, fragment.HLT_QuadPFJet111_90_80_15_v5, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p17_v2, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p1_v2, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_p02_v3, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np2_v2, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np4_v2, fragment.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_Mass55_v2, fragment.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_v2, fragment.HLT_Mu12_IP6_ToCSCS_v1, fragment.HLT_Mu12_IP6_part0_v2, fragment.HLT_Mu12_IP6_part1_v2, fragment.HLT_Mu12_IP6_part2_v2, fragment.HLT_Mu12_IP6_part3_v2, fragment.HLT_Mu12_IP6_part4_v2, fragment.HLT_Mu9_IP5_ToCSCS_v1, fragment.HLT_Mu9_IP5_part0_v2, fragment.HLT_Mu9_IP5_part1_v2, fragment.HLT_Mu9_IP5_part2_v2, fragment.HLT_Mu9_IP5_part3_v2, fragment.HLT_Mu9_IP5_part4_v2, fragment.HLT_Mu7_IP4_ToCSCS_v1, fragment.HLT_Mu7_IP4_part0_v2, fragment.HLT_Mu7_IP4_part1_v2, fragment.HLT_Mu7_IP4_part2_v2, fragment.HLT_Mu7_IP4_part3_v2, fragment.HLT_Mu7_IP4_part4_v2, fragment.HLT_Mu9_IP4_ToCSCS_v1, fragment.HLT_Mu9_IP4_part0_v2, fragment.HLT_Mu9_IP4_part1_v2, fragment.HLT_Mu9_IP4_part2_v2, fragment.HLT_Mu9_IP4_part3_v2, fragment.HLT_Mu9_IP4_part4_v2, fragment.HLT_Mu8_IP5_ToCSCS_v1, fragment.HLT_Mu8_IP5_part0_v2, fragment.HLT_Mu8_IP5_part1_v2, fragment.HLT_Mu8_IP5_part2_v2, fragment.HLT_Mu8_IP5_part3_v2, fragment.HLT_Mu8_IP5_part4_v2, fragment.HLT_Mu8_IP6_ToCSCS_v1, fragment.HLT_Mu8_IP6_part0_v2, fragment.HLT_Mu8_IP6_part1_v2, fragment.HLT_Mu8_IP6_part2_v2, fragment.HLT_Mu8_IP6_part3_v2, fragment.HLT_Mu8_IP6_part4_v2, fragment.HLT_Mu9_IP6_ToCSCS_v1, fragment.HLT_Mu9_IP6_part0_v3, fragment.HLT_Mu9_IP6_part1_v3, fragment.HLT_Mu9_IP6_part2_v3, fragment.HLT_Mu9_IP6_part3_v3, fragment.HLT_Mu9_IP6_part4_v3, fragment.HLT_Mu8_IP3_ToCSCS_v1, fragment.HLT_Mu8_IP3_part0_v3, fragment.HLT_Mu8_IP3_part1_v3, fragment.HLT_Mu8_IP3_part2_v3, fragment.HLT_Mu8_IP3_part3_v3, fragment.HLT_Mu8_IP3_part4_v3, fragment.HLT_Mu9_IP0_part0_v2, fragment.HLT_Mu9_IP3_part0_v2, fragment.HLT_QuadPFJet105_88_76_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_TrkMu6NoFiltersNoVtx_v1, fragment.HLT_TrkMu16NoFiltersNoVtx_v1, fragment.HLT_DoubleTrkMu_16_6_NoFiltersNoVtx_v1, fragment.HLTriggerFinalPath, fragment.HLTAnalyzerEndpath, fragment.ScoutingPFOutput, fragment.ScoutingCaloMuonOutput )) +fragment.HLTSchedule = cms.Schedule( *(fragment.HLTriggerFirstPath, fragment.HLT_AK8PFJet360_TrimMass30_v18, fragment.HLT_AK8PFJet380_TrimMass30_v11, fragment.HLT_AK8PFJet400_TrimMass30_v12, fragment.HLT_AK8PFJet420_TrimMass30_v11, fragment.HLT_AK8PFHT750_TrimMass50_v12, fragment.HLT_AK8PFHT800_TrimMass50_v12, fragment.HLT_AK8PFHT850_TrimMass50_v11, fragment.HLT_AK8PFHT900_TrimMass50_v11, fragment.HLT_CaloJet500_NoJetID_v12, fragment.HLT_CaloJet550_NoJetID_v7, fragment.HLT_DoubleMu5_Upsilon_DoubleEle3_CaloIdL_TrackIdL_v4, fragment.HLT_DoubleMu3_DoubleEle7p5_CaloIdL_TrackIdL_Upsilon_v4, fragment.HLT_Trimuon5_3p5_2_Upsilon_Muon_v5, fragment.HLT_TrimuonOpen_5_3p5_2_Upsilon_Muon_v3, fragment.HLT_DoubleEle25_CaloIdL_MW_v4, fragment.HLT_DoubleEle27_CaloIdL_MW_v4, fragment.HLT_DoubleEle33_CaloIdL_MW_v17, fragment.HLT_DoubleEle24_eta2p1_WPTight_Gsf_v7, fragment.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_DZ_PFHT350_v20, fragment.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_PFHT350_v20, fragment.HLT_Ele27_Ele37_CaloIdL_MW_v4, fragment.HLT_Mu27_Ele37_CaloIdL_MW_v5, fragment.HLT_Mu37_Ele27_CaloIdL_MW_v5, fragment.HLT_Mu37_TkMu27_v5, fragment.HLT_DoubleMu4_3_Bs_v14, fragment.HLT_DoubleMu4_3_Jpsi_v2, fragment.HLT_DoubleMu4_JpsiTrk_Displaced_v15, fragment.HLT_DoubleMu4_LowMassNonResonantTrk_Displaced_v15, fragment.HLT_DoubleMu3_Trk_Tau3mu_v12, fragment.HLT_DoubleMu3_TkMu_DsTau3Mu_v4, fragment.HLT_DoubleMu4_PsiPrimeTrk_Displaced_v15, fragment.HLT_DoubleMu4_Mass3p8_DZ_PFHT350_v8, fragment.HLT_Mu3_PFJet40_v16, fragment.HLT_Mu7p5_L2Mu2_Jpsi_v10, fragment.HLT_Mu7p5_L2Mu2_Upsilon_v10, fragment.HLT_Mu7p5_Track2_Jpsi_v11, fragment.HLT_Mu7p5_Track3p5_Jpsi_v11, fragment.HLT_Mu7p5_Track7_Jpsi_v11, fragment.HLT_Mu7p5_Track2_Upsilon_v11, fragment.HLT_Mu7p5_Track3p5_Upsilon_v11, fragment.HLT_Mu7p5_Track7_Upsilon_v11, fragment.HLT_Mu3_L1SingleMu5orSingleMu7_v1, fragment.HLT_DoublePhoton33_CaloIdL_v6, fragment.HLT_DoublePhoton70_v6, fragment.HLT_DoublePhoton85_v14, fragment.HLT_Ele20_WPTight_Gsf_v6, fragment.HLT_Ele15_WPLoose_Gsf_v3, fragment.HLT_Ele17_WPLoose_Gsf_v3, fragment.HLT_Ele20_WPLoose_Gsf_v6, fragment.HLT_Ele20_eta2p1_WPLoose_Gsf_v6, fragment.HLT_DiEle27_WPTightCaloOnly_L1DoubleEG_v4, fragment.HLT_Ele27_WPTight_Gsf_v16, fragment.HLT_Ele28_WPTight_Gsf_v1, fragment.HLT_Ele30_WPTight_Gsf_v1, fragment.HLT_Ele32_WPTight_Gsf_v15, fragment.HLT_Ele35_WPTight_Gsf_v9, fragment.HLT_Ele35_WPTight_Gsf_L1EGMT_v5, fragment.HLT_Ele38_WPTight_Gsf_v9, fragment.HLT_Ele40_WPTight_Gsf_v9, fragment.HLT_Ele32_WPTight_Gsf_L1DoubleEG_v9, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTau30_eta2p1_CrossL1_v13, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, fragment.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, fragment.HLT_HT450_Beamspot_v11, fragment.HLT_HT300_Beamspot_v11, fragment.HLT_ZeroBias_Beamspot_v4, fragment.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTau27_eta2p1_CrossL1_v12, fragment.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_CrossL1_v4, fragment.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, fragment.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v4, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS30_Trk1_eta2p1_Reg_CrossL1_v1, fragment.HLT_IsoMu27_LooseChargedIsoPFTau20_Trk1_eta2p1_SingleL1_v5, fragment.HLT_IsoMu27_LooseChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, fragment.HLT_IsoMu27_MediumChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, fragment.HLT_IsoMu27_TightChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, fragment.HLT_IsoMu20_v15, fragment.HLT_IsoMu24_v13, fragment.HLT_IsoMu24_eta2p1_v15, fragment.HLT_IsoMu27_v16, fragment.HLT_IsoMu30_v4, fragment.HLT_UncorrectedJetE30_NoBPTX_v6, fragment.HLT_UncorrectedJetE30_NoBPTX3BX_v6, fragment.HLT_UncorrectedJetE60_NoBPTX3BX_v6, fragment.HLT_UncorrectedJetE70_NoBPTX3BX_v6, fragment.HLT_L1SingleMu18_v3, fragment.HLT_L1SingleMu25_v2, fragment.HLT_L1SingleMuCosmics_v1, fragment.HLT_L2Mu10_v7, fragment.HLT_L2Mu10_NoVertex_NoBPTX3BX_v5, fragment.HLT_L2Mu10_NoVertex_NoBPTX_v6, fragment.HLT_L2Mu45_NoVertex_3Sta_NoBPTX3BX_v4, fragment.HLT_L2Mu40_NoVertex_3Sta_NoBPTX3BX_v5, fragment.HLT_L2Mu50_v2, fragment.HLT_L2Mu23NoVtx_2Cha_v1, fragment.HLT_L2Mu23NoVtx_2Cha_CosmicSeed_v1, fragment.HLT_DoubleL2Mu30NoVtx_2Cha_CosmicSeed_Eta2p4_v2, fragment.HLT_DoubleL2Mu30NoVtx_2Cha_Eta2p4_v2, fragment.HLT_DoubleL2Mu50_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_Eta2p4_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_v2, fragment.HLT_DoubleL2Mu23NoVtx_2Cha_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_NoL2Matched_v2, fragment.HLT_DoubleL2Mu25NoVtx_2Cha_Eta2p4_v2, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_v14, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_v3, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v15, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_v3, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8_v5, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass8_v3, fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8_v5, fragment.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass3p8_v3, fragment.HLT_Mu25_TkMu0_Onia_v8, fragment.HLT_Mu30_TkMu0_Psi_v1, fragment.HLT_Mu30_TkMu0_Upsilon_v1, fragment.HLT_Mu20_TkMu0_Phi_v8, fragment.HLT_Mu25_TkMu0_Phi_v8, fragment.HLT_Mu12_v3, fragment.HLT_Mu15_v3, fragment.HLT_Mu20_v12, fragment.HLT_Mu27_v13, fragment.HLT_Mu50_v13, fragment.HLT_Mu55_v3, fragment.HLT_OldMu100_v3, fragment.HLT_TkMu100_v2, fragment.HLT_DiPFJet15_NoCaloMatched_v16, fragment.HLT_DiPFJet25_NoCaloMatched_v16, fragment.HLT_DiPFJet15_FBEta3_NoCaloMatched_v17, fragment.HLT_DiPFJet25_FBEta3_NoCaloMatched_v17, fragment.HLT_DiPFJetAve40_v14, fragment.HLT_DiPFJetAve60_v14, fragment.HLT_DiPFJetAve80_v13, fragment.HLT_DiPFJetAve140_v13, fragment.HLT_DiPFJetAve200_v13, fragment.HLT_DiPFJetAve260_v14, fragment.HLT_DiPFJetAve320_v14, fragment.HLT_DiPFJetAve400_v14, fragment.HLT_DiPFJetAve500_v14, fragment.HLT_DiPFJetAve15_HFJEC_v17, fragment.HLT_DiPFJetAve25_HFJEC_v17, fragment.HLT_DiPFJetAve35_HFJEC_v17, fragment.HLT_DiPFJetAve60_HFJEC_v15, fragment.HLT_DiPFJetAve80_HFJEC_v16, fragment.HLT_DiPFJetAve100_HFJEC_v16, fragment.HLT_DiPFJetAve160_HFJEC_v16, fragment.HLT_DiPFJetAve220_HFJEC_v16, fragment.HLT_DiPFJetAve300_HFJEC_v16, fragment.HLT_AK8PFJet15_v3, fragment.HLT_AK8PFJet25_v3, fragment.HLT_AK8PFJet40_v16, fragment.HLT_AK8PFJet60_v15, fragment.HLT_AK8PFJet80_v15, fragment.HLT_AK8PFJet140_v15, fragment.HLT_AK8PFJet200_v15, fragment.HLT_AK8PFJet260_v16, fragment.HLT_AK8PFJet320_v16, fragment.HLT_AK8PFJet400_v16, fragment.HLT_AK8PFJet450_v16, fragment.HLT_AK8PFJet500_v16, fragment.HLT_AK8PFJet550_v11, fragment.HLT_PFJet15_v3, fragment.HLT_PFJet25_v3, fragment.HLT_PFJet40_v21, fragment.HLT_PFJet60_v21, fragment.HLT_PFJet80_v20, fragment.HLT_PFJet140_v19, fragment.HLT_PFJet200_v19, fragment.HLT_PFJet260_v20, fragment.HLT_PFJet320_v20, fragment.HLT_PFJet400_v20, fragment.HLT_PFJet450_v21, fragment.HLT_PFJet500_v21, fragment.HLT_PFJet550_v11, fragment.HLT_PFJetFwd15_v3, fragment.HLT_PFJetFwd25_v3, fragment.HLT_PFJetFwd40_v19, fragment.HLT_PFJetFwd60_v19, fragment.HLT_PFJetFwd80_v18, fragment.HLT_PFJetFwd140_v18, fragment.HLT_PFJetFwd200_v18, fragment.HLT_PFJetFwd260_v19, fragment.HLT_PFJetFwd320_v19, fragment.HLT_PFJetFwd400_v19, fragment.HLT_PFJetFwd450_v19, fragment.HLT_PFJetFwd500_v19, fragment.HLT_AK8PFJetFwd15_v3, fragment.HLT_AK8PFJetFwd25_v3, fragment.HLT_AK8PFJetFwd40_v15, fragment.HLT_AK8PFJetFwd60_v14, fragment.HLT_AK8PFJetFwd80_v14, fragment.HLT_AK8PFJetFwd140_v14, fragment.HLT_AK8PFJetFwd200_v14, fragment.HLT_AK8PFJetFwd260_v15, fragment.HLT_AK8PFJetFwd320_v15, fragment.HLT_AK8PFJetFwd400_v15, fragment.HLT_AK8PFJetFwd450_v15, fragment.HLT_AK8PFJetFwd500_v15, fragment.HLT_PFHT180_v17, fragment.HLT_PFHT250_v17, fragment.HLT_PFHT370_v17, fragment.HLT_PFHT430_v17, fragment.HLT_PFHT510_v17, fragment.HLT_PFHT590_v17, fragment.HLT_PFHT680_v17, fragment.HLT_PFHT780_v17, fragment.HLT_PFHT890_v17, fragment.HLT_PFHT1050_v18, fragment.HLT_PFHT500_PFMET100_PFMHT100_IDTight_v12, fragment.HLT_PFHT500_PFMET110_PFMHT110_IDTight_v12, fragment.HLT_PFHT700_PFMET85_PFMHT85_IDTight_v12, fragment.HLT_PFHT700_PFMET95_PFMHT95_IDTight_v12, fragment.HLT_PFHT800_PFMET75_PFMHT75_IDTight_v12, fragment.HLT_PFHT800_PFMET85_PFMHT85_IDTight_v12, fragment.HLT_PFMET110_PFMHT110_IDTight_v20, fragment.HLT_PFMET120_PFMHT120_IDTight_v20, fragment.HLT_PFMET130_PFMHT130_IDTight_v20, fragment.HLT_PFMET140_PFMHT140_IDTight_v20, fragment.HLT_PFMET100_PFMHT100_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET110_PFMHT110_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET120_PFMHT120_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET130_PFMHT130_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET140_PFMHT140_IDTight_CaloBTagDeepCSV_3p1_v8, fragment.HLT_PFMET120_PFMHT120_IDTight_PFHT60_v9, fragment.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_PFHT60_v9, fragment.HLT_PFMETTypeOne120_PFMHT120_IDTight_PFHT60_v9, fragment.HLT_PFMETTypeOne110_PFMHT110_IDTight_v12, fragment.HLT_PFMETTypeOne120_PFMHT120_IDTight_v12, fragment.HLT_PFMETTypeOne130_PFMHT130_IDTight_v12, fragment.HLT_PFMETTypeOne140_PFMHT140_IDTight_v11, fragment.HLT_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, fragment.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, fragment.HLT_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, fragment.HLT_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, fragment.HLT_MonoCentralPFJet80_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, fragment.HLT_MonoCentralPFJet80_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, fragment.HLT_MonoCentralPFJet80_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, fragment.HLT_MonoCentralPFJet80_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, fragment.HLT_L1ETMHadSeeds_v2, fragment.HLT_CaloMHT90_v4, fragment.HLT_CaloMET80_NotCleaned_v4, fragment.HLT_CaloMET90_NotCleaned_v4, fragment.HLT_CaloMET100_NotCleaned_v4, fragment.HLT_CaloMET110_NotCleaned_v4, fragment.HLT_CaloMET250_NotCleaned_v4, fragment.HLT_CaloMET300_NotCleaned_v4, fragment.HLT_CaloMET350_NotCleaned_v4, fragment.HLT_PFMET200_NotCleaned_v9, fragment.HLT_PFMET250_NotCleaned_v9, fragment.HLT_PFMET300_NotCleaned_v9, fragment.HLT_PFMET200_BeamHaloCleaned_v9, fragment.HLT_PFMETTypeOne200_BeamHaloCleaned_v9, fragment.HLT_MET105_IsoTrk50_v9, fragment.HLT_MET120_IsoTrk50_v9, fragment.HLT_SingleJet30_Mu12_SinglePFJet40_v11, fragment.HLT_Mu12_DoublePFJets40_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets100_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets200_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets350_CaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets40MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets54MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_Mu12_DoublePFJets62MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets40_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets100_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets200_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets350_CaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets116MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_DoublePFJets128MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, fragment.HLT_Photon300_NoHE_v12, fragment.HLT_Mu8_TrkIsoVVL_v12, fragment.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_DZ_v18, fragment.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_v18, fragment.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_DZ_v19, fragment.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_v19, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v13, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_PFBtagDeepCSV_1p5_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_CaloBtagDeepCSV_1p5_v1, fragment.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v11, fragment.HLT_Mu17_TrkIsoVVL_v13, fragment.HLT_Mu19_TrkIsoVVL_v4, fragment.HLT_BTagMu_AK4DiJet20_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet40_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet70_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet110_Mu5_v13, fragment.HLT_BTagMu_AK4DiJet170_Mu5_v12, fragment.HLT_BTagMu_AK4Jet300_Mu5_v12, fragment.HLT_BTagMu_AK8DiJet170_Mu5_v9, fragment.HLT_BTagMu_AK8Jet170_DoubleMu5_v2, fragment.HLT_BTagMu_AK8Jet300_Mu5_v12, fragment.HLT_BTagMu_AK4DiJet20_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet40_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet70_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet110_Mu5_noalgo_v13, fragment.HLT_BTagMu_AK4DiJet170_Mu5_noalgo_v12, fragment.HLT_BTagMu_AK4Jet300_Mu5_noalgo_v12, fragment.HLT_BTagMu_AK8DiJet170_Mu5_noalgo_v9, fragment.HLT_BTagMu_AK8Jet170_DoubleMu5_noalgo_v2, fragment.HLT_BTagMu_AK8Jet300_Mu5_noalgo_v12, fragment.HLT_Ele15_Ele8_CaloIdL_TrackIdL_IsoVL_v3, fragment.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v19, fragment.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_v19, fragment.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v15, fragment.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_v7, fragment.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v7, fragment.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v15, fragment.HLT_Mu12_DoublePhoton20_v5, fragment.HLT_TriplePhoton_20_20_20_CaloIdLV2_v3, fragment.HLT_TriplePhoton_20_20_20_CaloIdLV2_R9IdVL_v3, fragment.HLT_TriplePhoton_30_30_10_CaloIdLV2_v4, fragment.HLT_TriplePhoton_30_30_10_CaloIdLV2_R9IdVL_v4, fragment.HLT_TriplePhoton_35_35_5_CaloIdLV2_R9IdVL_v4, fragment.HLT_Photon20_v2, fragment.HLT_Photon33_v5, fragment.HLT_Photon50_v13, fragment.HLT_Photon75_v13, fragment.HLT_Photon90_v13, fragment.HLT_Photon120_v13, fragment.HLT_Photon150_v6, fragment.HLT_Photon175_v14, fragment.HLT_Photon200_v13, fragment.HLT_Photon100EB_TightID_TightIso_v2, fragment.HLT_Photon110EB_TightID_TightIso_v2, fragment.HLT_Photon120EB_TightID_TightIso_v2, fragment.HLT_Photon100EBHE10_v2, fragment.HLT_Photon100EEHE10_v2, fragment.HLT_Photon100EE_TightID_TightIso_v2, fragment.HLT_Photon50_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon75_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ300_PFJetsMJJ400DEta3_v5, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ400_PFJetsMJJ600DEta3_v5, fragment.HLT_Photon90_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon120_R9Id90_HE10_IsoM_v14, fragment.HLT_Photon165_R9Id90_HE10_IsoM_v15, fragment.HLT_Photon90_CaloIdL_PFHT700_v16, fragment.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass90_v13, fragment.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass95_v13, fragment.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_PixelVeto_Mass55_v15, fragment.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_NoPixelVeto_Mass55_v13, fragment.HLT_Photon35_TwoProngs35_v1, fragment.HLT_IsoMu24_TwoProngs35_v1, fragment.HLT_Dimuon0_Jpsi_L1_NoOS_v7, fragment.HLT_Dimuon0_Jpsi_NoVertexing_NoOS_v7, fragment.HLT_Dimuon0_Jpsi_v8, fragment.HLT_Dimuon0_Jpsi_NoVertexing_v8, fragment.HLT_Dimuon0_Jpsi_L1_4R_0er1p5R_v7, fragment.HLT_Dimuon0_Jpsi_NoVertexing_L1_4R_0er1p5R_v7, fragment.HLT_Dimuon0_Jpsi3p5_Muon2_v5, fragment.HLT_Dimuon0_Upsilon_L1_4p5_v9, fragment.HLT_Dimuon0_Upsilon_L1_5_v9, fragment.HLT_Dimuon0_Upsilon_L1_4p5NoOS_v8, fragment.HLT_Dimuon0_Upsilon_L1_4p5er2p0_v9, fragment.HLT_Dimuon0_Upsilon_L1_4p5er2p0M_v7, fragment.HLT_Dimuon0_Upsilon_NoVertexing_v7, fragment.HLT_Dimuon0_Upsilon_L1_5M_v8, fragment.HLT_Dimuon0_LowMass_L1_0er1p5R_v7, fragment.HLT_Dimuon0_LowMass_L1_0er1p5_v8, fragment.HLT_Dimuon0_LowMass_v8, fragment.HLT_Dimuon0_LowMass_L1_4_v8, fragment.HLT_Dimuon0_LowMass_L1_4R_v7, fragment.HLT_Dimuon0_LowMass_L1_TM530_v6, fragment.HLT_Dimuon0_Upsilon_Muon_L1_TM0_v6, fragment.HLT_Dimuon0_Upsilon_Muon_NoL1Mass_v6, fragment.HLT_TripleMu_5_3_3_Mass3p8_DZ_v8, fragment.HLT_TripleMu_10_5_5_DZ_v10, fragment.HLT_TripleMu_12_10_5_v10, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_v4, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_Charge1_v4, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_v4, fragment.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_Charge1_v4, fragment.HLT_DoubleMu3_DZ_PFMET50_PFMHT60_v10, fragment.HLT_DoubleMu3_DZ_PFMET70_PFMHT70_v10, fragment.HLT_DoubleMu3_DZ_PFMET90_PFMHT90_v10, fragment.HLT_DoubleMu3_Trk_Tau3mu_NoL1Mass_v6, fragment.HLT_DoubleMu4_Jpsi_Displaced_v7, fragment.HLT_DoubleMu4_Jpsi_NoVertexing_v7, fragment.HLT_DoubleMu4_JpsiTrkTrk_Displaced_v7, fragment.HLT_DoubleMu43NoFiltersNoVtx_v4, fragment.HLT_DoubleMu48NoFiltersNoVtx_v4, fragment.HLT_Mu43NoFiltersNoVtx_Photon43_CaloIdL_v5, fragment.HLT_Mu48NoFiltersNoVtx_Photon48_CaloIdL_v5, fragment.HLT_Mu38NoFiltersNoVtxDisplaced_Photon38_CaloIdL_v1, fragment.HLT_Mu43NoFiltersNoVtxDisplaced_Photon43_CaloIdL_v1, fragment.HLT_DoubleMu33NoFiltersNoVtxDisplaced_v1, fragment.HLT_DoubleMu40NoFiltersNoVtxDisplaced_v1, fragment.HLT_DoubleMu20_7_Mass0to30_L1_DM4_v7, fragment.HLT_DoubleMu20_7_Mass0to30_L1_DM4EG_v8, fragment.HLT_HT425_v9, fragment.HLT_HT430_DisplacedDijet40_DisplacedTrack_v13, fragment.HLT_HT500_DisplacedDijet40_DisplacedTrack_v13, fragment.HLT_HT430_DisplacedDijet60_DisplacedTrack_v13, fragment.HLT_HT400_DisplacedDijet40_DisplacedTrack_v13, fragment.HLT_HT650_DisplacedDijet60_Inclusive_v13, fragment.HLT_HT550_DisplacedDijet60_Inclusive_v13, fragment.HLT_DiJet110_35_Mjj650_PFMET110_v9, fragment.HLT_DiJet110_35_Mjj650_PFMET120_v9, fragment.HLT_DiJet110_35_Mjj650_PFMET130_v9, fragment.HLT_TripleJet110_35_35_Mjj650_PFMET110_v9, fragment.HLT_TripleJet110_35_35_Mjj650_PFMET120_v9, fragment.HLT_TripleJet110_35_35_Mjj650_PFMET130_v9, fragment.HLT_Ele30_eta2p1_WPTight_Gsf_CentralPFJet35_EleCleaned_v13, fragment.HLT_Ele28_eta2p1_WPTight_Gsf_HT150_v13, fragment.HLT_Ele28_HighEta_SC20_Mass55_v13, fragment.HLT_DoubleMu20_7_Mass0to30_Photon23_v8, fragment.HLT_Ele15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, fragment.HLT_Ele15_IsoVVVL_PFHT450_PFMET50_v16, fragment.HLT_Ele15_IsoVVVL_PFHT450_v16, fragment.HLT_Ele50_IsoVVVL_PFHT450_v16, fragment.HLT_Ele15_IsoVVVL_PFHT600_v20, fragment.HLT_Mu4_TrkIsoVVL_DiPFJet90_40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v15, fragment.HLT_Mu8_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v16, fragment.HLT_Mu10_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT350_PFMETNoMu60_v15, fragment.HLT_Mu15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, fragment.HLT_Mu15_IsoVVVL_PFHT450_PFMET50_v15, fragment.HLT_Mu15_IsoVVVL_PFHT450_v15, fragment.HLT_Mu50_IsoVVVL_PFHT450_v15, fragment.HLT_Mu15_IsoVVVL_PFHT600_v19, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET70_PFMHT70_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET80_PFMHT80_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET90_PFMHT90_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMET100_PFMHT100_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu70_PFMHTNoMu70_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu80_PFMHTNoMu80_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu90_PFMHTNoMu90_IDTight_v2, fragment.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu100_PFMHTNoMu100_IDTight_v2, fragment.HLT_Dimuon10_PsiPrime_Barrel_Seagulls_v7, fragment.HLT_Dimuon20_Jpsi_Barrel_Seagulls_v7, fragment.HLT_Dimuon12_Upsilon_y1p4_v2, fragment.HLT_Dimuon14_Phi_Barrel_Seagulls_v7, fragment.HLT_Dimuon18_PsiPrime_v14, fragment.HLT_Dimuon25_Jpsi_v14, fragment.HLT_Dimuon18_PsiPrime_noCorrL1_v6, fragment.HLT_Dimuon24_Upsilon_noCorrL1_v6, fragment.HLT_Dimuon24_Phi_noCorrL1_v6, fragment.HLT_Dimuon25_Jpsi_noCorrL1_v6, fragment.HLT_DiMu4_Ele9_CaloIdL_TrackIdL_DZ_Mass3p8_v17, fragment.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_DZ_v17, fragment.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_v17, fragment.HLT_DoubleIsoMu20_eta2p1_v7, fragment.HLT_TrkMu12_DoubleTrkMu5NoFiltersNoVtx_v6, fragment.HLT_TrkMu16_DoubleTrkMu6NoFiltersNoVtx_v12, fragment.HLT_TrkMu17_DoubleTrkMu8NoFiltersNoVtx_v13, fragment.HLT_Mu8_v12, fragment.HLT_Mu17_v13, fragment.HLT_Mu19_v4, fragment.HLT_Mu17_Photon30_IsoCaloId_v6, fragment.HLT_Ele8_CaloIdL_TrackIdL_IsoVL_PFJet30_v16, fragment.HLT_Ele12_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, fragment.HLT_Ele15_CaloIdL_TrackIdL_IsoVL_PFJet30_v3, fragment.HLT_Ele23_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, fragment.HLT_Ele8_CaloIdM_TrackIdM_PFJet30_v18, fragment.HLT_Ele17_CaloIdM_TrackIdM_PFJet30_v16, fragment.HLT_Ele23_CaloIdM_TrackIdM_PFJet30_v18, fragment.HLT_Ele50_CaloIdVT_GsfTrkIdT_PFJet165_v18, fragment.HLT_Ele115_CaloIdVT_GsfTrkIdT_v14, fragment.HLT_Ele135_CaloIdVT_GsfTrkIdT_v7, fragment.HLT_Ele145_CaloIdVT_GsfTrkIdT_v8, fragment.HLT_Ele200_CaloIdVT_GsfTrkIdT_v8, fragment.HLT_Ele250_CaloIdVT_GsfTrkIdT_v13, fragment.HLT_Ele300_CaloIdVT_GsfTrkIdT_v13, fragment.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_TriplePFBTagDeepCSV_4p5_v3, fragment.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_v9, fragment.HLT_PFHT400_SixPFJet32_DoublePFBTagDeepCSV_2p94_v8, fragment.HLT_PFHT400_SixPFJet32_v8, fragment.HLT_PFHT450_SixPFJet36_PFBTagDeepCSV_1p59_v7, fragment.HLT_PFHT450_SixPFJet36_v7, fragment.HLT_PFHT400_FivePFJet_100_100_60_30_30_v8, fragment.HLT_PFHT400_FivePFJet_100_100_60_30_30_DoublePFBTagDeepCSV_4p5_v8, fragment.HLT_PFHT400_FivePFJet_120_120_60_30_30_DoublePFBTagDeepCSV_4p5_v8, fragment.HLT_PFHT350_v19, fragment.HLT_PFHT350MinPFJet15_v9, fragment.HLT_Photon60_R9Id90_CaloIdL_IsoL_v5, fragment.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_v5, fragment.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_PFHT350MinPFJet15_v11, fragment.HLT_ECALHT800_v10, fragment.HLT_DiSC30_18_EIso_AND_HE_Mass70_v13, fragment.HLT_Physics_v7, fragment.HLT_Physics_part0_v7, fragment.HLT_Physics_part1_v7, fragment.HLT_Physics_part2_v7, fragment.HLT_Physics_part3_v7, fragment.HLT_Physics_part4_v7, fragment.HLT_Physics_part5_v7, fragment.HLT_Physics_part6_v7, fragment.HLT_Physics_part7_v7, fragment.DST_Physics_v7, fragment.HLT_Random_v3, fragment.HLT_ZeroBias_v6, fragment.HLT_ZeroBias_Alignment_v1, fragment.HLT_ZeroBias_part0_v6, fragment.HLT_ZeroBias_part1_v6, fragment.HLT_ZeroBias_part2_v6, fragment.HLT_ZeroBias_part3_v6, fragment.HLT_ZeroBias_part4_v6, fragment.HLT_ZeroBias_part5_v6, fragment.HLT_ZeroBias_part6_v6, fragment.HLT_ZeroBias_part7_v6, fragment.DST_ZeroBias_v2, fragment.DST_Run3_PFScoutingPixelTracking_v16, fragment.HLT_AK4CaloJet30_v11, fragment.HLT_AK4CaloJet40_v10, fragment.HLT_AK4CaloJet50_v10, fragment.HLT_AK4CaloJet80_v10, fragment.HLT_AK4CaloJet100_v10, fragment.HLT_AK4CaloJet120_v9, fragment.HLT_AK4PFJet30_v19, fragment.HLT_AK4PFJet50_v19, fragment.HLT_AK4PFJet80_v19, fragment.HLT_AK4PFJet100_v19, fragment.HLT_AK4PFJet120_v18, fragment.HLT_SinglePhoton10_Eta3p1ForPPRef_v8, fragment.HLT_SinglePhoton20_Eta3p1ForPPRef_v9, fragment.HLT_SinglePhoton30_Eta3p1ForPPRef_v9, fragment.HLT_Photon20_HoverELoose_v10, fragment.HLT_Photon30_HoverELoose_v10, fragment.HLT_EcalCalibration_v4, fragment.HLT_HcalCalibration_v5, fragment.AlCa_EcalPhiSym_v9, fragment.HLT_L1UnpairedBunchBptxMinus_v2, fragment.HLT_L1UnpairedBunchBptxPlus_v2, fragment.HLT_L1NotBptxOR_v3, fragment.HLT_L1_CDC_SingleMu_3_er1p2_TOP120_DPHI2p618_3p142_v2, fragment.HLT_CDC_L2cosmic_10_er1p0_v1, fragment.HLT_CDC_L2cosmic_5p5_er1p0_v1, fragment.HLT_HcalNZS_v13, fragment.HLT_HcalPhiSym_v15, fragment.HLT_HcalIsolatedbunch_v5, fragment.HLT_IsoTrackHB_v4, fragment.HLT_IsoTrackHE_v4, fragment.HLT_ZeroBias_FirstCollisionAfterAbortGap_v5, fragment.HLT_ZeroBias_IsolatedBunches_v5, fragment.HLT_ZeroBias_FirstCollisionInTrain_v4, fragment.HLT_ZeroBias_LastCollisionInTrain_v3, fragment.HLT_ZeroBias_FirstBXAfterTrain_v3, fragment.AlCa_RPCMuonNormalisation_v13, fragment.AlCa_LumiPixelsCounts_Random_v1, fragment.AlCa_LumiPixelsCounts_ZeroBias_v1, fragment.MC_ReducedIterativeTracking_v12, fragment.MC_PFMET_v17, fragment.MC_AK4PFJets_v17, fragment.MC_PFBTagDeepCSV_v10, fragment.MC_PFHT_v16, fragment.MC_PFMHT_v16, fragment.MC_CaloMET_v8, fragment.MC_CaloMET_JetIdCleaned_v9, fragment.MC_AK4CaloJets_v9, fragment.MC_AK4CaloJetsFromPV_v8, fragment.MC_CaloBTagDeepCSV_v8, fragment.MC_CaloHT_v8, fragment.MC_CaloMHT_v8, fragment.MC_AK8PFJets_v17, fragment.MC_AK8TrimPFJets_v17, fragment.MC_AK8PFHT_v16, fragment.MC_AK8CaloHT_v8, fragment.MC_Diphoton10_10_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass10_v13, fragment.MC_DoubleEle5_CaloIdL_MW_v15, fragment.MC_Ele5_WPTight_Gsf_v8, fragment.MC_Ele15_Ele10_CaloIdL_TrackIdL_IsoVL_DZ_v15, fragment.MC_IsoMu_v15, fragment.MC_DoubleMu_TrkIsoVVL_DZ_v11, fragment.MC_DoubleMuNoFiltersNoVtx_v7, fragment.AlCa_EcalPi0EBonly_v13, fragment.AlCa_EcalPi0EEonly_v13, fragment.AlCa_EcalEtaEBonly_v13, fragment.AlCa_EcalEtaEEonly_v13, fragment.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET90_v12, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET100_v12, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET110_v8, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET120_v8, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET130_v8, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET140_v3, fragment.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, fragment.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_1pr_v11, fragment.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_v12, fragment.HLT_MediumChargedIsoPFTau200HighPtRelaxedIso_Trk50_eta2p1_v12, fragment.HLT_MediumChargedIsoPFTau220HighPtRelaxedIso_Trk50_eta2p1_v12, fragment.HLT_Ele16_Ele12_Ele8_CaloIdL_TrackIdL_v9, fragment.HLT_Rsq0p35_v15, fragment.HLT_Rsq0p40_v15, fragment.HLT_RsqMR300_Rsq0p09_MR200_v15, fragment.HLT_RsqMR320_Rsq0p09_MR200_v15, fragment.HLT_RsqMR300_Rsq0p09_MR200_4jet_v15, fragment.HLT_RsqMR320_Rsq0p09_MR200_4jet_v15, fragment.HLT_IsoMu27_MET90_v3, fragment.HLT_DoubleMediumChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, fragment.HLT_DoubleMediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, fragment.HLT_DoubleTightChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, fragment.HLT_DoubleTightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, fragment.HLT_DoubleMediumChargedIsoPFTauHPS30_L1MaxMass_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4, fragment.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, fragment.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, fragment.HLT_VBF_DoubleLooseChargedIsoPFTau20_Trk1_eta2p1_v3, fragment.HLT_VBF_DoubleLooseChargedIsoPFTauHPS20_Trk1_eta2p1_v1, fragment.HLT_VBF_DoubleMediumChargedIsoPFTauHPS20_Trk1_eta2p1_v1, fragment.HLT_VBF_DoubleTightChargedIsoPFTauHPS20_Trk1_eta2p1_v1, fragment.HLT_Photon50_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_PFMET50_v5, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_v5, fragment.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ600DEta3_v5, fragment.HLT_PFMET100_PFMHT100_IDTight_PFHT60_v9, fragment.HLT_PFMETNoMu100_PFMHTNoMu100_IDTight_PFHT60_v9, fragment.HLT_PFMETTypeOne100_PFMHT100_IDTight_PFHT60_v9, fragment.HLT_Mu18_Mu9_SameSign_v4, fragment.HLT_Mu18_Mu9_SameSign_DZ_v4, fragment.HLT_Mu18_Mu9_v4, fragment.HLT_Mu18_Mu9_DZ_v4, fragment.HLT_Mu20_Mu10_SameSign_v4, fragment.HLT_Mu20_Mu10_SameSign_DZ_v4, fragment.HLT_Mu20_Mu10_v4, fragment.HLT_Mu20_Mu10_DZ_v4, fragment.HLT_Mu23_Mu12_SameSign_v4, fragment.HLT_Mu23_Mu12_SameSign_DZ_v4, fragment.HLT_Mu23_Mu12_v4, fragment.HLT_Mu23_Mu12_DZ_v4, fragment.HLT_DoubleMu2_Jpsi_DoubleTrk1_Phi1p05_v6, fragment.HLT_DoubleMu2_Jpsi_DoubleTkMu0_Phi_v5, fragment.HLT_DoubleMu3_DCA_PFMET50_PFMHT60_v10, fragment.HLT_TripleMu_5_3_3_Mass3p8_DCA_v3, fragment.HLT_QuadPFJet98_83_71_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_QuadPFJet103_88_75_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_QuadPFJet111_90_80_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_QuadPFJet98_83_71_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet103_88_75_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet105_88_76_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet111_90_80_15_PFBTagDeepCSV_1p3_VBF2_v8, fragment.HLT_QuadPFJet98_83_71_15_v5, fragment.HLT_QuadPFJet103_88_75_15_v5, fragment.HLT_QuadPFJet105_88_76_15_v5, fragment.HLT_QuadPFJet111_90_80_15_v5, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p17_v2, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p1_v2, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_p02_v3, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np2_v2, fragment.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np4_v2, fragment.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_Mass55_v2, fragment.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_v2, fragment.HLT_Mu12_IP6_ToCSCS_v1, fragment.HLT_Mu12_IP6_part0_v2, fragment.HLT_Mu12_IP6_part1_v2, fragment.HLT_Mu12_IP6_part2_v2, fragment.HLT_Mu12_IP6_part3_v2, fragment.HLT_Mu12_IP6_part4_v2, fragment.HLT_Mu9_IP5_ToCSCS_v1, fragment.HLT_Mu9_IP5_part0_v2, fragment.HLT_Mu9_IP5_part1_v2, fragment.HLT_Mu9_IP5_part2_v2, fragment.HLT_Mu9_IP5_part3_v2, fragment.HLT_Mu9_IP5_part4_v2, fragment.HLT_Mu7_IP4_ToCSCS_v1, fragment.HLT_Mu7_IP4_part0_v2, fragment.HLT_Mu7_IP4_part1_v2, fragment.HLT_Mu7_IP4_part2_v2, fragment.HLT_Mu7_IP4_part3_v2, fragment.HLT_Mu7_IP4_part4_v2, fragment.HLT_Mu9_IP4_ToCSCS_v1, fragment.HLT_Mu9_IP4_part0_v2, fragment.HLT_Mu9_IP4_part1_v2, fragment.HLT_Mu9_IP4_part2_v2, fragment.HLT_Mu9_IP4_part3_v2, fragment.HLT_Mu9_IP4_part4_v2, fragment.HLT_Mu8_IP5_ToCSCS_v1, fragment.HLT_Mu8_IP5_part0_v2, fragment.HLT_Mu8_IP5_part1_v2, fragment.HLT_Mu8_IP5_part2_v2, fragment.HLT_Mu8_IP5_part3_v2, fragment.HLT_Mu8_IP5_part4_v2, fragment.HLT_Mu8_IP6_ToCSCS_v1, fragment.HLT_Mu8_IP6_part0_v2, fragment.HLT_Mu8_IP6_part1_v2, fragment.HLT_Mu8_IP6_part2_v2, fragment.HLT_Mu8_IP6_part3_v2, fragment.HLT_Mu8_IP6_part4_v2, fragment.HLT_Mu9_IP6_ToCSCS_v1, fragment.HLT_Mu9_IP6_part0_v3, fragment.HLT_Mu9_IP6_part1_v3, fragment.HLT_Mu9_IP6_part2_v3, fragment.HLT_Mu9_IP6_part3_v3, fragment.HLT_Mu9_IP6_part4_v3, fragment.HLT_Mu8_IP3_ToCSCS_v1, fragment.HLT_Mu8_IP3_part0_v3, fragment.HLT_Mu8_IP3_part1_v3, fragment.HLT_Mu8_IP3_part2_v3, fragment.HLT_Mu8_IP3_part3_v3, fragment.HLT_Mu8_IP3_part4_v3, fragment.HLT_Mu9_IP0_part0_v2, fragment.HLT_Mu9_IP3_part0_v2, fragment.HLT_QuadPFJet105_88_76_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, fragment.HLT_TrkMu6NoFiltersNoVtx_v1, fragment.HLT_TrkMu16NoFiltersNoVtx_v1, fragment.HLT_DoubleTrkMu_16_6_NoFiltersNoVtx_v1, fragment.HLTriggerFinalPath, fragment.HLTAnalyzerEndpath, fragment.ScoutingPFOutput )) -# dummyfy hltGetConditions in cff's +# dummify hltGetConditions in cff's if 'hltGetConditions' in fragment.__dict__ and 'HLTriggerFirstPath' in fragment.__dict__ : fragment.hltDummyConditions = cms.EDFilter( "HLTBool", result = cms.bool( True ) diff --git a/HLTrigger/Configuration/python/HLT_HIon_cff.py b/HLTrigger/Configuration/python/HLT_HIon_cff.py index 15475d813049a..d2cfe6c3ec86a 100644 --- a/HLTrigger/Configuration/python/HLT_HIon_cff.py +++ b/HLTrigger/Configuration/python/HLT_HIon_cff.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --cff --data /dev/CMSSW_11_2_0/HIon --type HIon +# hltGetConfiguration --cff --data /dev/CMSSW_11_3_0/HIon --type HIon -# /dev/CMSSW_11_2_0/HIon/V12 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/HIon/V12 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/HIon/V12') + tableName = cms.string('/dev/CMSSW_11_3_0/HIon/V12') ) fragment.transferSystem = cms.PSet( @@ -7166,7 +7166,7 @@ ts4Thresh = cms.double( 0.0 ), meanTime = cms.double( 0.0 ), nnlsThresh = cms.double( 1.0E-11 ), - nMaxItersMin = cms.int32( 500 ), + nMaxItersMin = cms.int32( 50 ), timeSigmaSiPM = cms.double( 2.5 ), applyTimeSlew = cms.bool( True ), timeSlewParsType = cms.int32( 3 ), @@ -12245,7 +12245,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -12361,6 +12362,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -14787,14 +14789,6 @@ useEt = cms.bool( True ), rhoScale = cms.double( 1.0 ) ) -fragment.hltRegionalTowerForEgamma = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - EMin = cms.double( 0.8 ), - EtMin = cms.double( 0.5 ), - L1IsoCand = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForAll" ) -) fragment.hltEgammaHcalPFClusterIsoPPOnAA = cms.EDProducer( "EgammaHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.2, 0.25 ), useHF = cms.bool( False ), @@ -31954,7 +31948,7 @@ fragment.HLTHIGEDPhoton40EBHECutPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG40EtEBPPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEG40HoverEEBPPOnAAFilter ) fragment.HLTHIGEDPhoton50EBHECutPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG50EtEBPPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEG50HoverEEBPPOnAAFilter ) fragment.HLTHIGEDPhoton60EBHECutPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG60EtEBPPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEG60HoverEEBPPOnAAFilter ) -fragment.HLTPFHcalClusteringForEgamma = cms.Sequence( fragment.hltRegionalTowerForEgamma + fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL ) +fragment.HLTPFHcalClustering = cms.Sequence( fragment.hltParticleFlowRecHitHBHE + fragment.hltParticleFlowClusterHBHE + fragment.hltParticleFlowClusterHCAL ) fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence = cms.Sequence( fragment.hltSiStripExcludedFEDListProducer + fragment.HLTDoSiStripZeroSuppression + fragment.hltHITrackingSiStripRawToClustersFacilityZeroSuppression + fragment.hltSiStripClustersPPOnAAZeroSuppression ) fragment.HLTRecoPixelTracksPPOnAASequence = cms.Sequence( fragment.hltPixelTracksFilter + fragment.hltPixelTracksFitter + fragment.hltPixelTracksTrackingRegionsPPOnAA + fragment.hltPixelLayerQuadrupletsPPOnAA + fragment.hltPixelTracksHitDoubletsPPOnAA + fragment.hltPixelTracksHitQuadrupletsPPOnAA + fragment.hltPixelTracksPPOnAA ) fragment.HLTPixelVertexingPPOnAASequence = cms.Sequence( fragment.HLTRecoPixelTracksPPOnAASequence + fragment.hltPixelVerticesPPOnAA + fragment.hltTrimmedPixelVerticesPPOnAA ) @@ -31965,16 +31959,16 @@ fragment.HLTIterativeTrackingForElectronsIteration2 = cms.Sequence( fragment.hltIter2ElectronsClustersRefRemoval + fragment.hltIter2ElectronsMaskedMeasurementTrackerEvent + fragment.hltIter2ElectronsPixelLayerTriplets + fragment.hltIter2ElectronsPixelTrackingRegions + fragment.hltIter2ElectronsPixelHitDoublets + fragment.hltIter2ElectronsPixelHitTriplets + fragment.hltIter2ElectronsPixelSeeds + fragment.hltIter2ElectronsCkfTrackCandidates + fragment.hltIter2ElectronsCtfWithMaterialTracks + fragment.hltIter2ElectronsTrackSelectionHighPurity ) fragment.HLTIterativeTrackingDoubletRecoveryForElectrons = cms.Sequence( fragment.hltDoubletRecoveryForElectronsClustersRefRemoval + fragment.hltDoubletRecoveryForElectronsMaskedMeasurementTrackerEvent + fragment.hltDoubletRecoveryForElectronsPixelLayersAndRegions + fragment.hltDoubletRecoveryForElectronsPFlowPixelHitDoublets + fragment.hltDoubletRecoveryForElectronsPFlowPixelSeeds + fragment.hltDoubletRecoveryForElectronsPFlowCkfTrackCandidates + fragment.hltDoubletRecoveryForElectronsPFlowCtfWithMaterialTracks + fragment.hltDoubletRecoveryForElectronsPFlowTrackSelectionHighPurity ) fragment.HLTIterativeTrackingForElectrons = cms.Sequence( fragment.HLTIterativeTrackingForElectronsIteration0 + fragment.HLTIterativeTrackingForElectronsIteration1 + fragment.hltIter1ForElectronsMerged + fragment.HLTIterativeTrackingForElectronsIteration2 + fragment.hltIter2ForElectronsMerged + fragment.HLTIterativeTrackingDoubletRecoveryForElectrons + fragment.hltMergedForElectrons ) -fragment.HLTEle10GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG10EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle10ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle10HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle10EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle10HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle10PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle10GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle10GsfDetaPPOnAAFilter + fragment.hltEle10GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle10GsfTrackIsoPPOnAAFilter ) +fragment.HLTEle10GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG10EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle10ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle10HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle10EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle10HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle10PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle10GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle10GsfDetaPPOnAAFilter + fragment.hltEle10GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle10GsfTrackIsoPPOnAAFilter ) fragment.HLTDoHIStripZeroSuppressionRepacker = cms.Sequence( fragment.hltSiStripDigiToZSRaw + fragment.rawDataRepacker + fragment.rawDataReducedFormat ) -fragment.HLTEle15GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG15EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle15ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle15HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle15EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle15HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle15PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle15GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle15GsfDetaPPOnAAFilter + fragment.hltEle15GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle15GsfTrackIsoPPOnAAFilter ) -fragment.HLTEle20GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG20EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle20ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle20HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle20EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle20HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle20PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle20GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle20GsfDetaPPOnAAFilter + fragment.hltEle20GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle20GsfTrackIsoPPOnAAFilter ) -fragment.HLTEle30GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG30EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle30ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle30HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle30EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle30HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle30PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle30GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle30GsfDetaPPOnAAFilter + fragment.hltEle30GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle30GsfTrackIsoPPOnAAFilter ) -fragment.HLTEle40GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG40EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle40ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle40HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle40EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle40HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle40PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle40GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle40GsfDetaPPOnAAFilter + fragment.hltEle40GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle40GsfTrackIsoPPOnAAFilter ) -fragment.HLTEle50GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG50EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle50ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle50HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle50EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle50HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle50PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle50GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle50GsfDetaPPOnAAFilter + fragment.hltEle50GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle50GsfTrackIsoPPOnAAFilter ) -fragment.HLTEle15Ele10GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG15EtPPOnAAFilter + fragment.hltDoubleEG10EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltDoubleEle10ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltDoubleEle10HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.HLTGsfElectronPPOnAASequence + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) -fragment.HLTDoubleEle10GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltDoubleEG10EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltDoubleEle10ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltDoubleEle10HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.HLTGsfElectronPPOnAASequence + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) -fragment.HLTDoubleEle15GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltDoubleEG15EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltDoubleEle15ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltDoubleEle15HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltDoubleEle15EcalIsoPPOnAAFilter + fragment.HLTPFHcalClusteringForEgamma + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltDoubleEle15HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.HLTGsfElectronPPOnAASequence + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltDoubleEle15GsfTrackIsoPPOnAAFilter ) +fragment.HLTEle15GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG15EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle15ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle15HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle15EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle15HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle15PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle15GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle15GsfDetaPPOnAAFilter + fragment.hltEle15GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle15GsfTrackIsoPPOnAAFilter ) +fragment.HLTEle20GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG20EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle20ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle20HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle20EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle20HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle20PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle20GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle20GsfDetaPPOnAAFilter + fragment.hltEle20GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle20GsfTrackIsoPPOnAAFilter ) +fragment.HLTEle30GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG30EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle30ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle30HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle30EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle30HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle30PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle30GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle30GsfDetaPPOnAAFilter + fragment.hltEle30GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle30GsfTrackIsoPPOnAAFilter ) +fragment.HLTEle40GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG40EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle40ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle40HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle40EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle40HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle40PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle40GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle40GsfDetaPPOnAAFilter + fragment.hltEle40GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle40GsfTrackIsoPPOnAAFilter ) +fragment.HLTEle50GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG50EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltEle50ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltEle50HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltEle50EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltEle50HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.hltEle50PixelMatchPPOnAAFilter + fragment.HLTGsfElectronPPOnAASequence + fragment.hltEle50GsfOneOEMinusOneOPPPOnAAFilter + fragment.hltEle50GsfDetaPPOnAAFilter + fragment.hltEle50GsfDphiPPOnAAFilter + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltEle50GsfTrackIsoPPOnAAFilter ) +fragment.HLTEle15Ele10GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltEG15EtPPOnAAFilter + fragment.hltDoubleEG10EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltDoubleEle10ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltDoubleEle10HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.HLTGsfElectronPPOnAASequence + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) +fragment.HLTDoubleEle10GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltDoubleEG10EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltDoubleEle10ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltDoubleEle10HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltDoubleEle10HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.HLTGsfElectronPPOnAASequence + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) +fragment.HLTDoubleEle15GsfPPOnAASequence = cms.Sequence( fragment.HLTDoFullUnpackingEgammaEcalSequence + fragment.HLTPFClusteringForEgammaPPOnAA + fragment.hltEgammaCandidatesPPOnAA + fragment.hltEgammaCandidatesWrapperPPOnAA + fragment.hltDoubleEG15EtPPOnAAFilter + fragment.hltEgammaClusterShapePPOnAA + fragment.hltDoubleEle15ClusterShapePPOnAAFilter + fragment.HLTDoLocalHcalWithTowerSequence + fragment.hltEgammaHoverEPPOnAA + fragment.hltDoubleEle15HoverEPPOnAAFilter + fragment.hltEgammaEcalPFClusterIsoPPOnAA + fragment.hltDoubleEle15EcalIsoPPOnAAFilter + fragment.HLTPFHcalClustering + fragment.hltEgammaHcalPFClusterIsoPPOnAA + fragment.hltDoubleEle15HcalIsoPPOnAAFilter + fragment.HLTDoLocalPixelSequencePPOnAA + fragment.HLTDoLocalStripPPOnAAZeroSuppressionSequence + fragment.HLTPixelVertexingPPOnAASequence + fragment.HLTElectronPixelMatchingPPOnAASequence + fragment.HLTGsfElectronPPOnAASequence + fragment.HLTIterativeTrackingForElectrons + fragment.hltEgammaEleGsfTrackIsoPPOnAA + fragment.hltDoubleEle15GsfTrackIsoPPOnAAFilter ) fragment.HLTEndSequenceWithZeroSuppressionRepacker = cms.Sequence( fragment.HLTDoHIStripZeroSuppressionRepacker + fragment.HLTEndSequence ) fragment.HLTFullIterativeTrackingIteration0PreSplittingPPOnAAForDmeson = cms.Sequence( fragment.hltFullIter0PixelQuadrupletsPreSplittingPPOnAAForDmeson + fragment.hltFullIter0PixelTrackingRegionsPreSplittingPPOnAAForDmeson + fragment.hltFullIter0PixelClusterCheckPreSplittingPPOnAAForDmeson + fragment.hltFullIter0PixelHitDoubletsPreSplittingPPOnAAForDmeson + fragment.hltFullIter0PixelHitQuadrupletsPreSplittingPPOnAAForDmeson + fragment.hltFullIter0PixelSeedsPreSplittingPPOnAAForDmeson + fragment.hltFullIter0CkfTrackCandidatesPreSplittingPPOnAAForDmeson + fragment.hltFullIter0CtfWithMaterialTracksPreSplittingPPOnAAForDmeson + fragment.hltFullIter0PrimaryVerticesPreSplittingPPOnAAForDmeson ) fragment.HLTDoLocalPixelSequenceAfterSplittingPPOnAAForDmeson = cms.Sequence( fragment.hltSiPixelClustersAfterSplittingPPOnAAForDmeson + fragment.hltSiPixelClustersCacheAfterSplittingPPOnAAForDmeson + fragment.hltSiPixelRecHitsAfterSplittingPPOnAAForDmeson ) @@ -32468,7 +32462,7 @@ fragment.HLTSchedule = cms.Schedule( *(fragment.HLTriggerFirstPath, fragment.DST_Physics_v7, fragment.HLT_EcalCalibration_v4, fragment.HLT_HcalCalibration_v5, fragment.HLT_HIPhysics_v1, fragment.HLT_HIPhysicsForZS_v1, fragment.HLT_HIRandom_v1, fragment.AlCa_EcalPhiSymForHI_v1, fragment.HLT_HIHcalNZS_v1, fragment.HLT_HIHcalPhiSym_v1, fragment.AlCa_RPCMuonNormalisationForHI_v1, fragment.AlCa_EcalPi0EBonlyForHI_v1, fragment.AlCa_EcalPi0EEonlyForHI_v1, fragment.AlCa_EcalEtaEBonlyForHI_v1, fragment.AlCa_EcalEtaEEonlyForHI_v1, fragment.HLT_HICentralityVeto_v1, fragment.HLT_HICentralityVeto_Beamspot_v1, fragment.HLT_HICentrality30100_FirstCollisionAfterAbortGap_v1, fragment.HLT_HICentralityTag20100_v1, fragment.HLT_HICentralityTag30100_v1, fragment.HLT_HICentralityTag50100_v1, fragment.HLT_HIZeroBias_v1, fragment.HLT_HIZeroBias_FirstCollisionAfterAbortGap_v1, fragment.HLT_HIMinimumBiasRF_part0_v1, fragment.HLT_HIMinimumBiasRF_part1_v1, fragment.HLT_HIMinimumBiasRF_part2_v1, fragment.HLT_HIMinimumBiasRF_part3_v1, fragment.HLT_HIMinimumBiasRF_part4_v1, fragment.HLT_HIMinimumBiasRF_part5_v1, fragment.HLT_HIMinimumBiasRF_part6_v1, fragment.HLT_HIMinimumBiasRF_part7_v1, fragment.HLT_HIMinimumBiasRF_part8_v1, fragment.HLT_HIMinimumBiasRF_part9_v1, fragment.HLT_HIMinimumBiasRF_part10_v1, fragment.HLT_HIMinimumBiasRF_part11_v1, fragment.HLT_HIMinimumBiasRF_part12_v1, fragment.HLT_HIMinimumBiasRF_part13_v1, fragment.HLT_HIMinimumBiasRF_part14_v1, fragment.HLT_HIMinimumBiasRF_part15_v1, fragment.HLT_HIMinimumBiasRF_part16_v1, fragment.HLT_HIMinimumBiasRF_part17_v1, fragment.HLT_HIMinimumBiasRF_part18_v1, fragment.HLT_HIMinimumBiasRF_part19_v1, fragment.HLT_HIMinimumBiasRF_part20_v1, fragment.HLT_HIMinimumBiasRF_part21_v1, fragment.HLT_HIMinimumBiasRF_part22_v1, fragment.HLT_HIMinimumBiasRF_part23_v1, fragment.HLT_HIPuAK4CaloJet40Eta5p1_v1, fragment.HLT_HIPuAK4CaloJet60Eta5p1_v1, fragment.HLT_HIPuAK4CaloJet80Eta5p1_v1, fragment.HLT_HIPuAK4CaloJet100Eta5p1_v1, fragment.HLT_HIPuAK4CaloJet120Eta5p1_v1, fragment.HLT_HIPuAK4CaloJet40Eta5p1_Centrality_30_100_v1, fragment.HLT_HIPuAK4CaloJet40Eta5p1_Centrality_50_100_v1, fragment.HLT_HIPuAK4CaloJet60Eta5p1_Centrality_30_100_v1, fragment.HLT_HIPuAK4CaloJet60Eta5p1_Centrality_50_100_v1, fragment.HLT_HIPuAK4CaloJet80Eta5p1_Centrality_30_100_v1, fragment.HLT_HIPuAK4CaloJet80Eta5p1_Centrality_50_100_v1, fragment.HLT_HIPuAK4CaloJet100Eta5p1_Centrality_30_100_v1, fragment.HLT_HIPuAK4CaloJet100Eta5p1_Centrality_50_100_v1, fragment.HLT_HIPuAK4CaloJet80_35_Eta1p1_v1, fragment.HLT_HIPuAK4CaloJet100_35_Eta1p1_v1, fragment.HLT_HIPuAK4CaloJet80_35_Eta0p7_v1, fragment.HLT_HIPuAK4CaloJet100_35_Eta0p7_v1, fragment.HLT_HIPuAK4CaloJet80_45_45_Eta2p1_v1, fragment.HLT_HIPuAK4CaloJet40Fwd_v1, fragment.HLT_HIPuAK4CaloJet60Fwd_v1, fragment.HLT_HIPuAK4CaloJet80Fwd_v1, fragment.HLT_HIPuAK4CaloJet100Fwd_v1, fragment.HLT_HIPuAK4CaloJet120Fwd_v1, fragment.HLT_HIIslandPhoton10_Eta2p4_v1, fragment.HLT_HIIslandPhoton10_Eta1p5_v1, fragment.HLT_HIIslandPhoton20_Eta2p4_v1, fragment.HLT_HIIslandPhoton20_Eta1p5_v1, fragment.HLT_HIIslandPhoton30_Eta2p4_v1, fragment.HLT_HIIslandPhoton30_Eta1p5_v1, fragment.HLT_HIIslandPhoton40_Eta2p4_v1, fragment.HLT_HIIslandPhoton40_Eta1p5_v1, fragment.HLT_HIIslandPhoton50_Eta2p4_v1, fragment.HLT_HIIslandPhoton50_Eta1p5_v1, fragment.HLT_HIIslandPhoton60_Eta2p4_v1, fragment.HLT_HIIslandPhoton60_Eta1p5_v1, fragment.HLT_HIGEDPhoton10_v1, fragment.HLT_HIGEDPhoton20_v1, fragment.HLT_HIGEDPhoton30_v1, fragment.HLT_HIGEDPhoton40_v1, fragment.HLT_HIGEDPhoton50_v1, fragment.HLT_HIGEDPhoton60_v1, fragment.HLT_HIGEDPhoton10_EB_v1, fragment.HLT_HIGEDPhoton20_EB_v1, fragment.HLT_HIGEDPhoton30_EB_v1, fragment.HLT_HIGEDPhoton40_EB_v1, fragment.HLT_HIGEDPhoton50_EB_v1, fragment.HLT_HIGEDPhoton60_EB_v1, fragment.HLT_HIGEDPhoton10_HECut_v1, fragment.HLT_HIGEDPhoton20_HECut_v1, fragment.HLT_HIGEDPhoton30_HECut_v1, fragment.HLT_HIGEDPhoton40_HECut_v1, fragment.HLT_HIGEDPhoton50_HECut_v1, fragment.HLT_HIGEDPhoton60_HECut_v1, fragment.HLT_HIGEDPhoton10_EB_HECut_v1, fragment.HLT_HIGEDPhoton20_EB_HECut_v1, fragment.HLT_HIGEDPhoton30_EB_HECut_v1, fragment.HLT_HIGEDPhoton40_EB_HECut_v1, fragment.HLT_HIGEDPhoton50_EB_HECut_v1, fragment.HLT_HIGEDPhoton60_EB_HECut_v1, fragment.HLT_HIEle10Gsf_v1, fragment.HLT_HIEle15Gsf_v1, fragment.HLT_HIEle20Gsf_v1, fragment.HLT_HIEle30Gsf_v1, fragment.HLT_HIEle40Gsf_v1, fragment.HLT_HIEle50Gsf_v1, fragment.HLT_HIEle15Ele10Gsf_v1, fragment.HLT_HIEle15Ele10GsfMass50_v1, fragment.HLT_HIDoubleEle10Gsf_v1, fragment.HLT_HIDoubleEle10GsfMass50_v1, fragment.HLT_HIDoubleEle15Gsf_v1, fragment.HLT_HIDoubleEle15GsfMass50_v1, fragment.HLT_HIL1Mu3Eta2p5_Ele10Gsf_v1, fragment.HLT_HIL1Mu3Eta2p5_Ele15Gsf_v1, fragment.HLT_HIL1Mu3Eta2p5_Ele20Gsf_v1, fragment.HLT_HIL1Mu5Eta2p5_Ele10Gsf_v1, fragment.HLT_HIL1Mu5Eta2p5_Ele15Gsf_v1, fragment.HLT_HIL1Mu5Eta2p5_Ele20Gsf_v1, fragment.HLT_HIL1Mu7Eta2p5_Ele10Gsf_v1, fragment.HLT_HIL1Mu7Eta2p5_Ele15Gsf_v1, fragment.HLT_HIL1Mu7Eta2p5_Ele20Gsf_v1, fragment.HLT_HIEle10Gsf_PuAK4CaloJet40Eta2p1_v1, fragment.HLT_HIEle10Gsf_PuAK4CaloJet60Eta2p1_v1, fragment.HLT_HIEle10Gsf_PuAK4CaloJet80Eta2p1_v1, fragment.HLT_HIEle10Gsf_PuAK4CaloJet100Eta2p1_v1, fragment.HLT_HIEle15Gsf_PuAK4CaloJet40Eta2p1_v1, fragment.HLT_HIEle15Gsf_PuAK4CaloJet60Eta2p1_v1, fragment.HLT_HIEle15Gsf_PuAK4CaloJet80Eta2p1_v1, fragment.HLT_HIEle15Gsf_PuAK4CaloJet100Eta2p1_v1, fragment.HLT_HIEle20Gsf_PuAK4CaloJet40Eta2p1_v1, fragment.HLT_HIEle20Gsf_PuAK4CaloJet60Eta2p1_v1, fragment.HLT_HIEle20Gsf_PuAK4CaloJet80Eta2p1_v1, fragment.HLT_HIEle20Gsf_PuAK4CaloJet100Eta2p1_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt15_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt20_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt30_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt40_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt50_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt60_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt15_NoIter10_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt20_NoIter10_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt30_NoIter10_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt40_NoIter10_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt50_NoIter10_v1, fragment.HLT_HIDmesonPPTrackingGlobal_Dpt60_NoIter10_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt20_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt30_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt40_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt50_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt60_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt20_NoIter10_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt30_NoIter10_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt40_NoIter10_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt50_NoIter10_v1, fragment.HLT_HIDsPPTrackingGlobal_Dpt60_NoIter10_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt20_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt30_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt40_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt50_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt60_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt20_NoIter10_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt30_NoIter10_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt40_NoIter10_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt50_NoIter10_v1, fragment.HLT_HILcPPTrackingGlobal_Dpt60_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt18_v1, fragment.HLT_HIFullTracks2018_HighPt24_v1, fragment.HLT_HIFullTracks2018_HighPt34_v1, fragment.HLT_HIFullTracks2018_HighPt45_v1, fragment.HLT_HIFullTracks2018_HighPt56_v1, fragment.HLT_HIFullTracks2018_HighPt60_v1, fragment.HLT_HIFullTracks2018_HighPt18_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt24_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt34_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt45_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt56_NoIter10_v1, fragment.HLT_HIFullTracks2018_HighPt60_NoIter10_v1, fragment.HLT_HIL1DoubleMuOpen_v1, fragment.HLT_HIL1DoubleMuOpen_Centrality_30_100_v1, fragment.HLT_HIL1DoubleMuOpen_Centrality_40_100_v1, fragment.HLT_HIL1DoubleMuOpen_Centrality_50_100_v1, fragment.HLT_HIL1DoubleMuOpen_er1p6_v1, fragment.HLT_HIL1DoubleMuOpen_OS_er1p6_v1, fragment.HLT_HIL1DoubleMuOpen_OS_Centrality_30_100_v1, fragment.HLT_HIL1DoubleMuOpen_OS_Centrality_40_100_v1, fragment.HLT_HIL1DoubleMu0_v1, fragment.HLT_HIL1DoubleMu10_v1, fragment.HLT_HIL2_L1DoubleMu10_v1, fragment.HLT_HIL3_L1DoubleMu10_v1, fragment.HLT_HIL2DoubleMuOpen_v1, fragment.HLT_HIL3DoubleMuOpen_v1, fragment.HLT_HIL3DoubleMuOpen_M60120_v1, fragment.HLT_HIL3DoubleMuOpen_JpsiPsi_v1, fragment.HLT_HIL3DoubleMuOpen_Upsi_v1, fragment.HLT_HIL3Mu0_L2Mu0_v1, fragment.HLT_HIL3Mu2p5NHitQ10_L2Mu2_v1, fragment.HLT_HIL1MuOpen_Centrality_70_100_v1, fragment.HLT_HIL1MuOpen_Centrality_80_100_v1, fragment.HLT_HIL2Mu3_NHitQ15_v1, fragment.HLT_HIL2Mu5_NHitQ15_v1, fragment.HLT_HIL2Mu7_NHitQ15_v1, fragment.HLT_HIL2Mu3_NHitQ15_tagging_v1, fragment.HLT_HIL2Mu5_NHitQ15_tagging_v1, fragment.HLT_HIL2Mu7_NHitQ15_tagging_v1, fragment.HLT_HIL3Mu2p5_L1DoubleMu0_v1, fragment.HLT_HIL3Mu3_L1DoubleMuOpen_OS_v1, fragment.HLT_HIL3Mu3NHitQ10_L1DoubleMuOpen_v1, fragment.HLT_HIL3Mu3_L1TripleMuOpen_v1, fragment.HLT_HIL3Mu12_v1, fragment.HLT_HIL3Mu15_v1, fragment.HLT_HIL3Mu20_v1, fragment.HLT_HIL3Mu3_NHitQ10_v1, fragment.HLT_HIL3Mu5_NHitQ10_v1, fragment.HLT_HIL3Mu7_NHitQ10_v1, fragment.HLT_HIL3Mu3_NHitQ10_tagging_v1, fragment.HLT_HIL3Mu5_NHitQ10_tagging_v1, fragment.HLT_HIL3Mu7_NHitQ10_tagging_v1, fragment.HLT_HIL3Mu0NHitQ10_L2Mu0_MAXdR3p5_M1to5_v1, fragment.HLT_HIL3Mu2p5NHitQ10_L2Mu2_M7toinf_v1, fragment.HLT_HIL1_ETT8_ETTAsym50_MinimumBiasHF1_OR_BptxAND_v1, fragment.HLT_HIL1_ETT10_ETTAsym50_MinimumBiasHF1_OR_BptxAND_v1, fragment.HLT_HIL1_ETT60_ETTAsym65_MinimumBiasHF2_OR_PixelTracks10_v1, fragment.HLT_HIL1_ETT65_ETTAsym80_MinimumBiasHF2_OR_PixelTracks10_v1, fragment.HLT_HIFullTracks_Multiplicity020_HF1AND_v1, fragment.HLT_HIFullTracks_Multiplicity2040_HF1AND_v1, fragment.HLT_HIFullTracks_Multiplicity4060_v1, fragment.HLT_HIFullTracks_Multiplicity6080_v1, fragment.HLT_HIFullTracks_Multiplicity80100_v1, fragment.HLT_HIFullTracks_Multiplicity020_v1, fragment.HLT_HIFullTracks_Multiplicity020_HF1OR_v1, fragment.HLT_HIFullTracks_Multiplicity020_HF2OR_v1, fragment.HLT_HIFullTracks_Multiplicity2040_v1, fragment.HLT_HIFullTracks_Multiplicity2040_HF1OR_v1, fragment.HLT_HIFullTracks_Multiplicity2040_HF2OR_v1, fragment.HLT_HIFullTracks_Multiplicity335_HF1OR_v1, fragment.HLT_HIUPC_Mu8_Mu13_v1, fragment.HLT_HIUPC_Mu8_Mu13_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMuOpen_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleMuOpen_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMuOpen_NotMBHF2OR_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMuOpen_NotMBHF2AND_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMuOpen_NotMBHF2AND_v1, fragment.HLT_HIUPC_DoubleMuOpen_NotMBHF2OR_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleMuOpen_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleMuOpen_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleMu0_NotMBHF2OR_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMu0_NotMBHF2AND_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMu0_NotMBHF2AND_v1, fragment.HLT_HIUPC_DoubleMu0_NotMBHF2OR_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleMu0_NotMBHF2AND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleMu0_NotMBHF2AND_v1, fragment.HLT_HIUPC_DoubleMu0_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleMu0_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleMu3_NotMBHF2OR_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMu3_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleMu0_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleMu0_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleMu3_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2AND_SinglePixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2AND_v1, fragment.HLT_HIUPC_NotMBHF2OR_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_NotMBHF2AND_SinglePixelTrack_v1, fragment.HLT_HIUPC_NotMBHF2AND_v1, fragment.HLT_HIUPC_NotMBHF2OR_BptxAND_SinglePixelTrack_v1, fragment.HLT_HIUPC_ZeroBias_SinglePixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2OR_SinglePixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_NotMBHF2OR_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2AND_SinglePixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2AND_v1, fragment.HLT_HIUPC_DoubleEG5_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2OR_SinglePixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2AND_SinglePixelTrack_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2AND_v1, fragment.HLT_HIUPC_SingleEG5_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2AND_SinglePixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2AND_v1, fragment.HLT_HIUPC_SingleEG3_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2OR_SinglePixelTrack_v1, fragment.HLT_HIUPC_SingleEG3_NotMBHF2OR_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2OR_SinglePixelTrack_v1, fragment.HLT_HIUPC_SingleEG5_NotMBHF2OR_v1, fragment.HLT_HIUPC_ETT5_Asym50_NotMBHF2OR_v1, fragment.HLT_HIUPC_ETT5_Asym50_NotMBHF2OR_SinglePixelTrack_v1, fragment.HLT_HIUPC_ZeroBias_MaxPixelCluster_v1, fragment.HLT_HIUPC_SingleEG3_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_SingleEG5_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG2_BptxAND_MaxPixelTrack_v1, fragment.HLT_HIUPC_DoubleEG5_BptxAND_MaxPixelTrack_v1, fragment.HLT_HICsAK4PFJet60Eta1p5_v1, fragment.HLT_HICsAK4PFJet80Eta1p5_v1, fragment.HLT_HICsAK4PFJet100Eta1p5_v1, fragment.HLT_HICsAK4PFJet100Eta1p5_Beamspot_v1, fragment.HLT_HICsAK4PFJet120Eta1p5_v1, fragment.HLT_HICsAK4PFJet60Eta1p5_Centrality_30_100_v1, fragment.HLT_HICsAK4PFJet60Eta1p5_Centrality_50_100_v1, fragment.HLT_HICsAK4PFJet80Eta1p5_Centrality_30_100_v1, fragment.HLT_HICsAK4PFJet80Eta1p5_Centrality_50_100_v1, fragment.HLT_HICsAK4PFJet100Eta1p5_Centrality_30_100_v1, fragment.HLT_HICsAK4PFJet100Eta1p5_Centrality_50_100_v1, fragment.HLT_HIL3Mu3_EG10HECut_v1, fragment.HLT_HIL3Mu3_EG15HECut_v1, fragment.HLT_HIL3Mu3_EG20HECut_v1, fragment.HLT_HIL3Mu3_EG30HECut_v1, fragment.HLT_HIL3Mu5_EG10HECut_v1, fragment.HLT_HIL3Mu5_EG15HECut_v1, fragment.HLT_HIL3Mu5_EG20HECut_v1, fragment.HLT_HIL3Mu5_EG30HECut_v1, fragment.HLT_HIL3Mu7_EG10HECut_v1, fragment.HLT_HIL3Mu7_EG15HECut_v1, fragment.HLT_HIL3Mu7_EG20HECut_v1, fragment.HLT_HIL3Mu7_EG30HECut_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet40Eta2p1_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet60Eta2p1_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet80Eta2p1_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet100Eta2p1_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet40Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet60Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet80Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet100Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet40Eta2p1_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet60Eta2p1_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet80Eta2p1_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet100Eta2p1_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet40Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet60Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet80Eta2p1_FilterDr_v1, fragment.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet100Eta2p1_FilterDr_v1, fragment.HLT_HICastor_MediumJet_NotMBHF2AND_v1, fragment.HLT_HICastor_MediumJet_NotMBHF2OR_v1, fragment.HLT_HICastor_MediumJet_MBHF1OR_BptxAND_v1, fragment.HLT_HICastor_MediumJet_SingleMu0_MBHF1OR_BptxAND_v1, fragment.HLT_HICastor_MediumJet_SingleEG5_MBHF1OR_BptxAND_v1, fragment.HLT_HICastor_MediumJet_BptxAND_v1, fragment.HLT_HICastor_MediumJet_v1, fragment.HLT_HICastor_HighJet_v1, fragment.HLT_HICastor_HighJet_BptxAND_v1, fragment.HLT_HICastor_HighJet_MBHF1OR_BptxAND_v1, fragment.HLT_HICastor_HighJet_NotMBHF2OR_v1, fragment.HLT_HICastor_HighJet_NotMBHF2AND_v1, fragment.HLT_HICastor_HighJet_MBHF1AND_BptxAND_v1, fragment.HLT_HICastor_HighJet_MBHF2AND_BptxAND_v1, fragment.HLT_HICastor_Muon_v1, fragment.HLT_HICastor_Muon_BptxAND_v1, fragment.HLT_HIIslandPhoton10_Eta2p4_Cent30_100_v1, fragment.HLT_HIIslandPhoton20_Eta2p4_Cent30_100_v1, fragment.HLT_HIIslandPhoton30_Eta2p4_Cent30_100_v1, fragment.HLT_HIIslandPhoton40_Eta2p4_Cent30_100_v1, fragment.HLT_HIIslandPhoton10_Eta2p4_Cent50_100_v1, fragment.HLT_HIIslandPhoton20_Eta2p4_Cent50_100_v1, fragment.HLT_HIIslandPhoton30_Eta2p4_Cent50_100_v1, fragment.HLT_HIIslandPhoton40_Eta2p4_Cent50_100_v1, fragment.HLT_HIGEDPhoton10_Cent30_100_v1, fragment.HLT_HIGEDPhoton20_Cent30_100_v1, fragment.HLT_HIGEDPhoton30_Cent30_100_v1, fragment.HLT_HIGEDPhoton40_Cent30_100_v1, fragment.HLT_HIGEDPhoton10_Cent50_100_v1, fragment.HLT_HIGEDPhoton20_Cent50_100_v1, fragment.HLT_HIGEDPhoton30_Cent50_100_v1, fragment.HLT_HIGEDPhoton40_Cent50_100_v1, fragment.HLT_HIPuAK4CaloJet60Eta2p4_DeepCSV0p4_v1, fragment.HLT_HIPuAK4CaloJet80Eta2p4_DeepCSV0p4_v1, fragment.HLT_HIPuAK4CaloJet100Eta2p4_DeepCSV0p4_v1, fragment.HLT_HIPuAK4CaloJet60Eta2p4_CSVv2WP0p75_v1, fragment.HLT_HIPuAK4CaloJet80Eta2p4_CSVv2WP0p75_v1, fragment.HLT_HIPuAK4CaloJet100Eta2p4_CSVv2WP0p75_v1, fragment.HLT_HIL1NotBptxOR_v1, fragment.HLT_HIL1UnpairedBunchBptxMinus_v1, fragment.HLT_HIL1UnpairedBunchBptxPlus_v1, fragment.HLT_HIL1_ZDC_AND_OR_MinimumBiasHF1_AND_BptxAND_v1, fragment.HLT_HIL1_ZDC_AND_OR_MinimumBiasHF2_AND_BptxAND_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part0_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part1_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part2_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part3_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part4_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part5_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part6_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part7_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part8_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part9_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part10_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part11_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part12_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part13_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part14_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part15_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part16_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part17_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part18_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part19_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part0_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part1_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part2_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part3_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part4_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part5_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part6_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part7_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part8_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part9_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part10_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part11_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part12_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part13_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part14_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part15_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part16_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part17_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part18_v1, fragment.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part19_v1, fragment.HLTriggerFinalPath, fragment.HLTAnalyzerEndpath )) -# dummyfy hltGetConditions in cff's +# dummify hltGetConditions in cff's if 'hltGetConditions' in fragment.__dict__ and 'HLTriggerFirstPath' in fragment.__dict__ : fragment.hltDummyConditions = cms.EDFilter( "HLTBool", result = cms.bool( True ) diff --git a/HLTrigger/Configuration/python/HLT_PIon_cff.py b/HLTrigger/Configuration/python/HLT_PIon_cff.py index caaa7297ecd46..b6d1159e5084b 100644 --- a/HLTrigger/Configuration/python/HLT_PIon_cff.py +++ b/HLTrigger/Configuration/python/HLT_PIon_cff.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --cff --data /dev/CMSSW_11_2_0/PIon --type PIon +# hltGetConfiguration --cff --data /dev/CMSSW_11_3_0/PIon --type PIon -# /dev/CMSSW_11_2_0/PIon/V12 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/PIon/V12 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/PIon/V12') + tableName = cms.string('/dev/CMSSW_11_3_0/PIon/V12') ) fragment.transferSystem = cms.PSet( @@ -5483,7 +5483,7 @@ fragment.HLTSchedule = cms.Schedule( *(fragment.HLTriggerFirstPath, fragment.HLT_Physics_v7, fragment.HLT_Random_v3, fragment.HLT_ZeroBias_v6, fragment.HLTriggerFinalPath, fragment.HLTAnalyzerEndpath )) -# dummyfy hltGetConditions in cff's +# dummify hltGetConditions in cff's if 'hltGetConditions' in fragment.__dict__ and 'HLTriggerFirstPath' in fragment.__dict__ : fragment.hltDummyConditions = cms.EDFilter( "HLTBool", result = cms.bool( True ) diff --git a/HLTrigger/Configuration/python/HLT_PRef_cff.py b/HLTrigger/Configuration/python/HLT_PRef_cff.py index c24604fe8cc62..a6febfeed96e1 100644 --- a/HLTrigger/Configuration/python/HLT_PRef_cff.py +++ b/HLTrigger/Configuration/python/HLT_PRef_cff.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --cff --data /dev/CMSSW_11_2_0/PRef --type PRef +# hltGetConfiguration --cff --data /dev/CMSSW_11_3_0/PRef --type PRef -# /dev/CMSSW_11_2_0/PRef/V12 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/PRef/V12 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/PRef/V12') + tableName = cms.string('/dev/CMSSW_11_3_0/PRef/V12') ) fragment.transferSystem = cms.PSet( @@ -5746,7 +5746,7 @@ ts4Thresh = cms.double( 0.0 ), meanTime = cms.double( 0.0 ), nnlsThresh = cms.double( 1.0E-11 ), - nMaxItersMin = cms.int32( 500 ), + nMaxItersMin = cms.int32( 50 ), timeSigmaSiPM = cms.double( 2.5 ), applyTimeSlew = cms.bool( True ), timeSlewParsType = cms.int32( 3 ), @@ -10979,7 +10979,7 @@ fragment.HLTSchedule = cms.Schedule( *(fragment.HLTriggerFirstPath, fragment.HLT_ZeroBias_Beamspot_v4, fragment.HLT_Physics_v7, fragment.DST_Physics_v7, fragment.HLT_Random_v3, fragment.HLT_ZeroBias_v6, fragment.HLT_HIL1UnpairedBunchBptxMinusForPPRef_v2, fragment.HLT_HIL1UnpairedBunchBptxPlusForPPRef_v2, fragment.HLT_HIL1NotBptxORForPPRef_v2, fragment.HLT_HIHT80_Beamspot_ppRef5TeV_v3, fragment.HLT_HIZeroBias_part0_v6, fragment.HLT_HIZeroBias_part1_v6, fragment.HLT_HIZeroBias_part2_v6, fragment.HLT_HIZeroBias_part3_v6, fragment.HLT_HIZeroBias_part4_v6, fragment.HLT_HIZeroBias_part5_v6, fragment.HLT_HIZeroBias_part6_v6, fragment.HLT_HIZeroBias_part7_v6, fragment.HLT_HIZeroBias_part8_v6, fragment.HLT_HIZeroBias_part9_v6, fragment.HLT_HIZeroBias_part10_v6, fragment.HLT_HIZeroBias_part11_v6, fragment.AlCa_HIEcalPi0EBonly_v1, fragment.AlCa_HIEcalPi0EEonly_v1, fragment.AlCa_HIEcalEtaEBonly_v1, fragment.AlCa_HIEcalEtaEEonly_v1, fragment.HLT_EcalCalibration_v4, fragment.HLT_HcalCalibration_v5, fragment.AlCa_EcalPhiSym_v9, fragment.HLT_ZeroBias_FirstCollisionAfterAbortGap_v5, fragment.AlCa_HIRPCMuonNormalisation_v1, fragment.AlCa_LumiPixelsCounts_Random_v1, fragment.AlCa_LumiPixelsCounts_ZeroBias_v1, fragment.HLTriggerFinalPath, fragment.HLTAnalyzerEndpath )) -# dummyfy hltGetConditions in cff's +# dummify hltGetConditions in cff's if 'hltGetConditions' in fragment.__dict__ and 'HLTriggerFirstPath' in fragment.__dict__ : fragment.hltDummyConditions = cms.EDFilter( "HLTBool", result = cms.bool( True ) diff --git a/HLTrigger/Configuration/python/HLTrigger_Datasets_GRun_cff.py b/HLTrigger/Configuration/python/HLTrigger_Datasets_GRun_cff.py index 4e4d0b6d87fa4..d52f1a3bd4322 100644 --- a/HLTrigger/Configuration/python/HLTrigger_Datasets_GRun_cff.py +++ b/HLTrigger/Configuration/python/HLTrigger_Datasets_GRun_cff.py @@ -1,4 +1,4 @@ -# /dev/CMSSW_11_2_0/GRun +# /dev/CMSSW_11_3_0/GRun import FWCore.ParameterSet.Config as cms @@ -983,24 +983,7 @@ streamPhysicsScoutingMonitor_datasetScoutingMonitor_selector.l1tResults = cms.InputTag('') streamPhysicsScoutingMonitor_datasetScoutingMonitor_selector.throw = cms.bool(False) streamPhysicsScoutingMonitor_datasetScoutingMonitor_selector.triggerConditions = cms.vstring( - 'DST_CaloJet40_BTagScouting_v15', - 'DST_CaloJet40_CaloBTagScouting_v14', - 'DST_CaloJet40_CaloScouting_PFScouting_v15', - 'DST_DoubleMu1_noVtx_CaloScouting_v2', - 'DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6', - 'DST_DoubleMu3_noVtx_CaloScouting_v6', - 'DST_DoubleMu3_noVtx_Mass10_PFScouting_v3', - 'DST_HT250_CaloBTagScouting_v10', - 'DST_HT250_CaloScouting_v10', - 'DST_HT410_BTagScouting_v16', - 'DST_HT410_PFScouting_v16', - 'DST_L1DoubleMu_BTagScouting_v16', - 'DST_L1DoubleMu_CaloScouting_PFScouting_v15', - 'DST_L1HTT_BTagScouting_v15', - 'DST_L1HTT_CaloBTagScouting_v14', - 'DST_L1HTT_CaloScouting_PFScouting_v15', - 'DST_ZeroBias_BTagScouting_v15', - 'DST_ZeroBias_CaloScouting_PFScouting_v14', + 'DST_Run3_PFScoutingPixelTracking_v16', 'HLT_Ele115_CaloIdVT_GsfTrkIdT_v14', 'HLT_Ele35_WPTight_Gsf_v9', 'HLT_IsoMu27_v16', diff --git a/HLTrigger/Configuration/python/HLTrigger_Datasets_HIon_cff.py b/HLTrigger/Configuration/python/HLTrigger_Datasets_HIon_cff.py index d2ae549891923..e1ffefa4d799d 100644 --- a/HLTrigger/Configuration/python/HLTrigger_Datasets_HIon_cff.py +++ b/HLTrigger/Configuration/python/HLTrigger_Datasets_HIon_cff.py @@ -1,4 +1,4 @@ -# /dev/CMSSW_11_2_0/HIon +# /dev/CMSSW_11_3_0/HIon import FWCore.ParameterSet.Config as cms diff --git a/HLTrigger/Configuration/python/HLTrigger_Datasets_PIon_cff.py b/HLTrigger/Configuration/python/HLTrigger_Datasets_PIon_cff.py index b60c5db4ec3d8..85f8785107bfe 100644 --- a/HLTrigger/Configuration/python/HLTrigger_Datasets_PIon_cff.py +++ b/HLTrigger/Configuration/python/HLTrigger_Datasets_PIon_cff.py @@ -1,4 +1,4 @@ -# /dev/CMSSW_11_2_0/PIon +# /dev/CMSSW_11_3_0/PIon import FWCore.ParameterSet.Config as cms diff --git a/HLTrigger/Configuration/python/HLTrigger_Datasets_PRef_cff.py b/HLTrigger/Configuration/python/HLTrigger_Datasets_PRef_cff.py index 5d14d68f7d6a9..8c499ed574c5d 100644 --- a/HLTrigger/Configuration/python/HLTrigger_Datasets_PRef_cff.py +++ b/HLTrigger/Configuration/python/HLTrigger_Datasets_PRef_cff.py @@ -1,4 +1,4 @@ -# /dev/CMSSW_11_2_0/PRef +# /dev/CMSSW_11_3_0/PRef import FWCore.ParameterSet.Config as cms diff --git a/HLTrigger/Configuration/python/Tools/confdb.py b/HLTrigger/Configuration/python/Tools/confdb.py index 6bd0b20127ae3..434a15b7da00a 100644 --- a/HLTrigger/Configuration/python/Tools/confdb.py +++ b/HLTrigger/Configuration/python/Tools/confdb.py @@ -86,7 +86,9 @@ def getRawConfigurationFromDB(self): args = ['--runNumber', self.config.menu.run] else: args = ['--configName', self.config.menu.name ] - args.append('--noedsources') + if not self.config.hilton: + # keep the original Source when running on Hilton + args.append('--noedsources') for key, vals in six.iteritems(self.options): if vals: args.extend(('--'+key, ','.join(vals))) @@ -181,6 +183,9 @@ def specificCustomize(self): from HLTrigger.Configuration.customizeHLTforALL import customizeHLTforAll fragment = customizeHLTforAll(fragment,"%s") """ % (self.config.type) + elif self.config.hilton: + # do not apply the STORM-specific customisation + pass else: if self.config.type=="Fake": prefix = "run1" @@ -232,6 +237,7 @@ def specificCustomize(self): self.data += "from "+customiseValues[0]+" import "+customiseValues[1]+"\n" self.data += "process = "+customiseValues[1]+"(process)\n" + # customize the configuration according to the options def customize(self): @@ -268,7 +274,7 @@ def customize(self): if self.config.fragment: self.data += """ -# dummyfy hltGetConditions in cff's +# dummify hltGetConditions in cff's if 'hltGetConditions' in %(dict)s and 'HLTriggerFirstPath' in %(dict)s : %(process)s.hltDummyConditions = cms.EDFilter( "HLTBool", result = cms.bool( True ) @@ -326,7 +332,6 @@ def addGlobalOptions(self): wantSummary = cms.untracked.bool( True ), numberOfThreads = cms.untracked.uint32( 4 ), numberOfStreams = cms.untracked.uint32( 0 ), - sizeOfStackForThreadsInKB = cms.untracked.uint32( 10*1024 ) ) """ @@ -460,12 +465,13 @@ def runL1Emulator(self): self.data += text def overrideOutput(self): - # override the "online" ShmStreamConsumer output modules with "offline" PoolOutputModule's - self.data = re.sub( - r'\b(process\.)?hltOutput(\w+) *= *cms\.OutputModule\( *"ShmStreamConsumer" *,', - r'%(process)s.hltOutput\2 = cms.OutputModule( "PoolOutputModule",\n fileName = cms.untracked.string( "output\2.root" ),\n fastCloning = cms.untracked.bool( False ),\n dataset = cms.untracked.PSet(\n filterName = cms.untracked.string( "" ),\n dataTier = cms.untracked.string( "RAW" )\n ),', - self.data - ) + # if not runnign on Hilton, override the "online" ShmStreamConsumer output modules with "offline" PoolOutputModule's + if not self.config.hilton: + self.data = re.sub( + r'\b(process\.)?hltOutput(\w+) *= *cms\.OutputModule\( *"ShmStreamConsumer" *,', + r'%(process)s.hltOutput\2 = cms.OutputModule( "PoolOutputModule",\n fileName = cms.untracked.string( "output\2.root" ),\n fastCloning = cms.untracked.bool( False ),\n dataset = cms.untracked.PSet(\n filterName = cms.untracked.string( "" ),\n dataTier = cms.untracked.string( "RAW" )\n ),', + self.data + ) if not self.config.fragment and self.config.output == 'minimal': # add a single output to keep the TriggerResults and TriggerEvent @@ -541,11 +547,12 @@ def updateMessageLogger(self): # request summary informations from the MessageLogger self.data += """ if 'MessageLogger' in %(dict)s: - %(process)s.MessageLogger.categories.append('TriggerSummaryProducerAOD') - %(process)s.MessageLogger.categories.append('L1GtTrigReport') - %(process)s.MessageLogger.categories.append('L1TGlobalSummary') - %(process)s.MessageLogger.categories.append('HLTrigReport') - %(process)s.MessageLogger.categories.append('FastReport') + %(process)s.MessageLogger.TriggerSummaryProducerAOD = cms.untracked.PSet() + %(process)s.MessageLogger.L1GtTrigReport = cms.untracked.PSet() + %(process)s.MessageLogger.L1TGlobalSummary = cms.untracked.PSet() + %(process)s.MessageLogger.HLTrigReport = cms.untracked.PSet() + %(process)s.MessageLogger.FastReport = cms.untracked.PSet() + %(process)s.MessageLogger.ThroughputService = cms.untracked.PSet() """ @@ -852,6 +859,10 @@ def expand_filenames(self, input): return files def build_source(self): + if self.config.hilton: + # use the DAQ source + return + if self.config.input: # if a dataset or a list of input files was given, use it self.source = self.expand_filenames(self.config.input) diff --git a/HLTrigger/Configuration/python/common.py b/HLTrigger/Configuration/python/common.py index 6d0e1dbc0bcb7..cfc8916fa76ca 100644 --- a/HLTrigger/Configuration/python/common.py +++ b/HLTrigger/Configuration/python/common.py @@ -1,11 +1,15 @@ import itertools - -import FWCore.ParameterSet.Config as cms import six +import FWCore.ParameterSet.Config as cms def producers_by_type(process, *types): "Find all EDProducers in the Process that are instances of the given C++ type." - return (module for module in process._Process__producers.values() if module._TypedParameterizable__type in types) + switches = (module for module in (getattr(switchproducer, case) \ + for switchproducer in six.itervalues(process._Process__switchproducers) \ + for case in switchproducer.parameterNames_()) \ + if isinstance(module, cms.EDProducer)) + return (module for module in itertools.chain(six.itervalues(process._Process__producers), switches) \ + if module._TypedParameterizable__type in types) def filters_by_type(process, *types): "Find all EDFilters in the Process that are instances of the given C++ type." @@ -21,7 +25,11 @@ def esproducers_by_type(process, *types): def modules_by_type(process, *types): "Find all modiles or other components in the Process that are instances of the given C++ type." - return (module for module in process.__dict__.values() if hasattr(module, '_TypedParameterizable__type') and module._TypedParameterizable__type in types) + switches = (module for module in (getattr(switchproducer, case) \ + for switchproducer in six.itervalues(process._Process__switchproducers) \ + for case in switchproducer.parameterNames_())) + return (module for module in itertools.chain(six.itervalues(process.__dict__), switches) \ + if hasattr(module, '_TypedParameterizable__type') and module._TypedParameterizable__type in types) def insert_modules_before(process, target, *modules): diff --git a/HLTrigger/Configuration/python/customizeHLTforCMSSW.py b/HLTrigger/Configuration/python/customizeHLTforCMSSW.py index f7ab7e23d72e6..d98499e338af7 100644 --- a/HLTrigger/Configuration/python/customizeHLTforCMSSW.py +++ b/HLTrigger/Configuration/python/customizeHLTforCMSSW.py @@ -17,127 +17,52 @@ # pset.minGoodStripCharge = cms.PSet(refToPSet_ = cms.string('HLTSiStripClusterChargeCutNone')) # return process -from RecoParticleFlow.PFClusterProducer.particleFlowClusterHCAL_cfi import _thresholdsHB -from RecoParticleFlow.PFClusterProducer.particleFlowClusterHBHE_cfi import _seedingThresholdsHB, _thresholdsHB -from RecoParticleFlow.PFClusterProducer.particleFlowRecHitHBHE_cfi import _thresholdsHB as _thresholdsHBRec -from RecoParticleFlow.PFClusterProducer.particleFlowClusterHCAL_cfi import _thresholdsHEphase1 as _thresholdsHEphase1HCAL -from RecoParticleFlow.PFClusterProducer.particleFlowClusterHBHE_cfi import _seedingThresholdsHEphase1, _thresholdsHEphase1 -from RecoParticleFlow.PFClusterProducer.particleFlowRecHitHBHE_cfi import _thresholdsHEphase1 as _thresholdsHEphase1Rec +def customiseHCALFor2018Input(process): + """Customise the HLT to run on Run 2 data/MC using the old readout for the HCAL barel""" + for producer in producers_by_type(process, "HBHEPhase1Reconstructor"): + # switch on the QI8 processing for 2018 HCAL barrel + producer.processQIE8 = True -logWeightDenominatorHCAL2018 = cms.VPSet( - cms.PSet( - depths = cms.vint32(1, 2, 3, 4), - detector = cms.string('HCAL_BARREL1'), - logWeightDenominator = _thresholdsHB - ), - cms.PSet( - depths = cms.vint32( - 1, 2, 3, 4, 5, 6, 7 + # adapt CaloTowers threshold for 2018 HCAL barrel with only one depth + for producer in producers_by_type(process, "CaloTowersCreator"): + producer.HBThreshold1 = 0.7 + producer.HBThreshold2 = 0.7 + producer.HBThreshold = 0.7 + + # adapt Particle Flow threshold for 2018 HCAL barrel with only one depth + from RecoParticleFlow.PFClusterProducer.particleFlowClusterHBHE_cfi import _thresholdsHB, _thresholdsHEphase1, _seedingThresholdsHB + + logWeightDenominatorHCAL2018 = cms.VPSet( + cms.PSet( + depths = cms.vint32(1, 2, 3, 4), + detector = cms.string('HCAL_BARREL1'), + logWeightDenominator = _thresholdsHB ), - detector = cms.string('HCAL_ENDCAP'), - logWeightDenominator = _thresholdsHEphase1HCAL + cms.PSet( + depths = cms.vint32(1, 2, 3, 4, 5, 6, 7), + detector = cms.string('HCAL_ENDCAP'), + logWeightDenominator = _thresholdsHEphase1 + ) ) -) - - -def synchronizeHCALHLTofflineRun3on2018data(process): - # this function bring back the Run3 menu to a Run2-2018 like meny, for testing in data 2018 - - #---------------------------------------------------------------------------------------------------------- - # adapt threshold for HB - in 2018 only one depth - - for producer in producers_by_type(process, "PFClusterProducer"): - if producer.seedFinder.thresholdsByDetector[0].detector.value() == 'HCAL_BARREL1': - producer.seedFinder.thresholdsByDetector[0].seedingThreshold = _seedingThresholdsHB - producer.initialClusteringStep.thresholdsByDetector[0].gatheringThreshold = _thresholdsHB - producer.pfClusterBuilder.recHitEnergyNorms[0].recHitEnergyNorm = _thresholdsHB - - producer.pfClusterBuilder.positionCalc.logWeightDenominatorByDetector = logWeightDenominatorHCAL2018 - producer.pfClusterBuilder.allCellsPositionCalc.logWeightDenominatorByDetector = logWeightDenominatorHCAL2018 - - for producer in producers_by_type(process, "PFMultiDepthClusterProducer"): - producer.pfClusterBuilder.allCellsPositionCalc.logWeightDenominatorByDetector = logWeightDenominatorHCAL2018 for producer in producers_by_type(process, "PFRecHitProducer"): if producer.producers[0].name.value() == 'PFHBHERecHitCreator': - producer.producers[0].qualityTests[0].cuts[0].threshold = _thresholdsHBRec - - for producer in producers_by_type(process, "CaloTowersCreator"): - producer.HBThreshold1 = cms.double(0.7) - producer.HBThreshold2 = cms.double(0.7) - producer.HBThreshold = cms.double(0.7) - - #-------------------------------------------------------- - # switch on the QI8 processing as in HB-Run2 (in Run3 we have only QIE11) - for producer in producers_by_type(process, "HBHEPhase1Reconstructor"): - producer.processQIE8 = cms.bool( True ) - producer.setNoiseFlagsQIE8 = cms.bool( True ) - producer.setPulseShapeFlagsQIE8 = cms.bool( True ) - - #---------------------------------------------------------- - # Use 1+8p fit (PR29617) and apply HB- correction (PR26177) - for producer in producers_by_type(process, "HBHEPhase1Reconstructor"): - producer.algorithm.applyLegacyHBMCorrection = cms.bool( True ) - producer.algorithm.chiSqSwitch = cms.double(15.0) - - return process - -def synchronizeHCALHLTofflineRun2(process): - # this function bring forward the sw changes of Run3 to 2018 data starting from a Run2-2018 like menu - - #----------------------------------------------------------------------------------------------------------- - # A) remove collapser from sequence - process.hltHbhereco = process.hltHbhePhase1Reco.clone() - process.HLTDoLocalHcalSequence = cms.Sequence( process.hltHcalDigis + process.hltHbhereco + process.hltHfprereco + process.hltHfreco + process.hltHoreco ) - process.HLTStoppedHSCPLocalHcalReco = cms.Sequence( process.hltHcalDigis + process.hltHbhereco ) - process.HLTDoLocalHcalWithTowerSequence = cms.Sequence( process.hltHcalDigis + process.hltHbhereco + process.hltHfprereco + process.hltHfreco + process.hltHoreco + process.hltTowerMakerForAll ) - - - #---------------------------------------------------------------------------------------------------------- - # B) adapt threshold following removal of the collapser - # note this is done only for HE + producer.producers[0].qualityTests[0].cuts[0].threshold = _thresholdsHB for producer in producers_by_type(process, "PFClusterProducer"): - if producer.seedFinder.thresholdsByDetector[1].detector.value() == 'HCAL_ENDCAP': - producer.seedFinder.thresholdsByDetector[1].seedingThreshold = _seedingThresholdsHEphase1 - producer.initialClusteringStep.thresholdsByDetector[1].gatheringThreshold = _thresholdsHEphase1 - producer.pfClusterBuilder.recHitEnergyNorms[1].recHitEnergyNorm = _thresholdsHEphase1 - - del producer.pfClusterBuilder.positionCalc.logWeightDenominator + if producer.seedFinder.thresholdsByDetector[0].detector.value() == 'HCAL_BARREL1': + producer.seedFinder.thresholdsByDetector[0].seedingThreshold = _seedingThresholdsHB + producer.initialClusteringStep.thresholdsByDetector[0].gatheringThreshold = _thresholdsHB + producer.pfClusterBuilder.recHitEnergyNorms[0].recHitEnergyNorm = _thresholdsHB producer.pfClusterBuilder.positionCalc.logWeightDenominatorByDetector = logWeightDenominatorHCAL2018 - del producer.pfClusterBuilder.allCellsPositionCalc.logWeightDenominator producer.pfClusterBuilder.allCellsPositionCalc.logWeightDenominatorByDetector = logWeightDenominatorHCAL2018 for producer in producers_by_type(process, "PFMultiDepthClusterProducer"): - del producer.pfClusterBuilder.allCellsPositionCalc.logWeightDenominator producer.pfClusterBuilder.allCellsPositionCalc.logWeightDenominatorByDetector = logWeightDenominatorHCAL2018 - for producer in producers_by_type(process, "PFRecHitProducer"): - if producer.producers[0].name.value() == 'PFHBHERecHitCreator': - producer.producers[0].qualityTests[0].cuts[1].threshold = _thresholdsHEphase1Rec - - for producer in producers_by_type(process, "CaloTowersCreator"): - producer.HcalPhase = cms.int32(1) - producer.HESThreshold1 = cms.double(0.1) - producer.HESThreshold = cms.double(0.2) - producer.HEDThreshold1 = cms.double(0.1) - producer.HEDThreshold = cms.double(0.2) - - #-------------------------------------------------------- - # C) add arrival time following PR 26270 (emulate what we will do in Run3 at HLT) - # (unused HLT quantity, set to false to save CPU) - for producer in producers_by_type(process, "HBHEPhase1Reconstructor"): - producer.algorithm.calculateArrivalTime = cms.bool(False) - - #-------------------------------------------------------- - # D) 3->8 pulse fit for PR 25469 (emulate what we will do in Run3 at HLT) - for producer in producers_by_type(process, "HBHEPhase1Reconstructor"): - producer.use8ts = cms.bool(True) - producer.algorithm.dynamicPed = cms.bool(False) - producer.algorithm.activeBXs = cms.vint32(-3, -2, -1, 0, 1, 2, 3, 4) - + # done return process @@ -200,25 +125,27 @@ def customisePixelGainForRun2Input(process): def customiseFor2018Input(process): """Customise the HLT to run on Run 2 data/MC""" process = customisePixelGainForRun2Input(process) - process = synchronizeHCALHLTofflineRun3on2018data(process) + process = customiseHCALFor2018Input(process) -def customiseFor32066(process): - """Add the ESSource and ESProducer for the mustache SC and the dynamic dphi parameters records""" + return process - # create the EcalMustacheSCParameters record - process.load('RecoEcal.EgammaCoreTools.EcalMustacheSCParametersESProducer_cff') - # create the EcalSCDynamicDPhiParameters record - process.load('RecoEcal.EgammaCoreTools.EcalSCDynamicDPhiParametersESProducer_cff') +def customiseFor33104(process): + """Customise the HLT menu to remove the unused use_vdt parameters""" + for producer in producers_by_type(process, "PrimaryVertexProducer"): + if hasattr(producer, "TkClusParameters"): + pset = getattr(producer, "TkClusParameters") + if hasattr(pset, "TkDAClusParameters"): + if hasattr(getattr(pset, "TkDAClusParameters"),"use_vdt"): + del producer.TkClusParameters.TkDAClusParameters.use_vdt return process - # CMSSW version specific customizations def customizeHLTforCMSSW(process, menuType="GRun"): # add call to action function in proper order: newest last! # process = customiseFor12718(process) - process = customiseFor32066(process) + process = customiseFor33104(process) return process diff --git a/HLTrigger/Configuration/tables/GRun.txt b/HLTrigger/Configuration/tables/GRun.txt index c77dcf443c66a..ba3b5b246a05a 100644 --- a/HLTrigger/Configuration/tables/GRun.txt +++ b/HLTrigger/Configuration/tables/GRun.txt @@ -38,8 +38,6 @@ HLT_PFJet60_v* # CMSHLT-1233 HLT_PFJet80_v* # CMSHLT-1233 HLT_BTagMu_AK8DiJet170_Mu5_v* # CMSHLT-1234 HLT_BTagMu_AK8Jet300_Mu5_v* # CMSHLT-1234 -DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v* # CMSHLT-1243, CMSHLT-1587 -DST_DoubleMu3_noVtx_CaloScouting_v* # CMSHLT-1243, CMSHLT-1587, CMSHLT-1589 HLT_TrkMu12_DoubleTrkMu5NoFiltersNoVtx_v* # CMSHLT-1244 HLT_TrkMu16_DoubleTrkMu6NoFiltersNoVtx_v* # CMSHLT-1244 HLT_TrkMu17_DoubleTrkMu8NoFiltersNoVtx_v* # CMSHLT-1244 @@ -293,20 +291,7 @@ HLT_RsqMR300_Rsq0p09_MR200_4jet_v* # CMSHLT-1323 HLT_RsqMR300_Rsq0p09_MR200_v* # CMSHLT-1323 HLT_RsqMR320_Rsq0p09_MR200_4jet_v* # CMSHLT-1323 HLT_RsqMR320_Rsq0p09_MR200_v* # CMSHLT-1323 -DST_CaloJet40_BTagScouting_v* # CMSHLT-1324 -DST_CaloJet40_CaloBTagScouting_v* # CMSHLT-1324 -DST_CaloJet40_CaloScouting_PFScouting_v* # CMSHLT-1324 -DST_HT250_CaloBTagScouting_v* # CMSHLT-1324, CMSHLT-1574 -DST_HT250_CaloScouting_v* # CMSHLT-1324, CMSHLT-1574 -DST_HT410_BTagScouting_v* # CMSHLT-1324, CMSHLT-1574 -DST_HT410_PFScouting_v* # CMSHLT-1324, CMSHLT-1574 -DST_L1DoubleMu_BTagScouting_v* # CMSHLT-1324 -DST_L1DoubleMu_CaloScouting_PFScouting_v* # CMSHLT-1324 -DST_L1HTT_BTagScouting_v* # CMSHLT-1324, CMSHLT-1574 -DST_L1HTT_CaloBTagScouting_v* # CMSHLT-1324, CMSHLT-1574 -DST_L1HTT_CaloScouting_PFScouting_v* # CMSHLT-1324, CMSHLT-1574 -DST_ZeroBias_BTagScouting_v* # CMSHLT-1324 -DST_ZeroBias_CaloScouting_PFScouting_v* # CMSHLT-1324 +DST_Run3_PFScoutingPixelTracking_v* # CMSHLT-2120 HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v* # CMSHLT-1326, CMSHLT-1713, CMSHLT-1742 HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_1pr_v* # CMSHLT-1326 HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_v* # CMSHLT-1326 @@ -504,8 +489,6 @@ HLT_PFJetFwd15_v* # CMSHLT-1662 HLT_PFJetFwd25_v* # CMSHLT-1662 HLT_AK8PFJetFwd15_v* # CMSHLT-1662 HLT_AK8PFJetFwd25_v* # CMSHLT-1662 -DST_DoubleMu1_noVtx_CaloScouting_v* # CMSHLT-1725 -DST_DoubleMu3_noVtx_Mass10_PFScouting_v* # CMSHLT-1729 HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ300_PFJetsMJJ400DEta3_v* # CMSHLT-1750 HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ400_PFJetsMJJ600DEta3_v* # CMSHLT-1750 HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET140_v* # CMSHLT-1742 @@ -730,7 +713,6 @@ PhysicsMuonsOutput ParkingHLTPhysicsOutput ParkingZeroBiasOutput PhysicsScoutingMonitorOutput # CMSHLT-487, CMSHLT-548, CMSHLT-599, CMSHLT-603 -ScoutingCaloMuonOutput # CMSHLT-1243 ScoutingPFOutput # CMSHLT-548 DQMOutput DQMEventDisplayOutput diff --git a/HLTrigger/Configuration/tables/makeSubTables b/HLTrigger/Configuration/tables/makeSubTables index 738f174788296..76c0d795e1471 100755 --- a/HLTrigger/Configuration/tables/makeSubTables +++ b/HLTrigger/Configuration/tables/makeSubTables @@ -3,8 +3,8 @@ # generate HLT tables from master table in ConfDB # -MASTER="/dev/CMSSW_11_2_0/HLT" # no version, take the latest one -TARGET="/dev/CMSSW_11_2_0/TABLE" # directory where to store the sub-tables +MASTER="/dev/CMSSW_11_3_0/HLT" # no version, take the latest one +TARGET="/dev/CMSSW_11_3_0/TABLE" # directory where to store the sub-tables TABLES="GRun HIon PIon PRef" # which sub-tables to create source subtables.sh diff --git a/HLTrigger/Configuration/tables/subtables.sh b/HLTrigger/Configuration/tables/subtables.sh index e27e8fed02222..fc60835b3ffec 100755 --- a/HLTrigger/Configuration/tables/subtables.sh +++ b/HLTrigger/Configuration/tables/subtables.sh @@ -55,7 +55,7 @@ function makeCreateConfig() { workDir="$baseDir" # try to read the .jar files from AFS, or download them - if checkJars "$baseDir" $jars; then + if checkJars "$baseDir" $JARS; then # read the .jar fles from AFS workDir="$baseDir" else @@ -75,7 +75,7 @@ function makeCreateConfig() { fi # download to a temporay file and use an atomic move (in case an other istance is downloading the same file local TMPJAR=$(mktemp -p "$workDir" .${JAR}.XXXXXXXXXX) - curl -s "$baseUrl/$JAR" -o "$TMPJAR" + curl -s -L "$baseUrl/$JAR" -o "$TMPJAR" mv -n "$TMPJAR" "$workDir/$JAR" rm -f "$TMPJAR" done diff --git a/HLTrigger/Configuration/test/OnLine_HLT_FULL.py b/HLTrigger/Configuration/test/OnLine_HLT_FULL.py index 3323c797181ab..0f4955e907421 100644 --- a/HLTrigger/Configuration/test/OnLine_HLT_FULL.py +++ b/HLTrigger/Configuration/test/OnLine_HLT_FULL.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --full --data /dev/CMSSW_11_2_0/HLT --type FULL --unprescale --process HLTFULL --globaltag auto:run3_hlt_FULL --input file:RelVal_Raw_FULL_DATA.root +# hltGetConfiguration --full --data /dev/CMSSW_11_3_0/HLT --type FULL --unprescale --process HLTFULL --globaltag auto:run3_hlt_FULL --input file:RelVal_Raw_FULL_DATA.root -# /dev/CMSSW_11_2_0/HLT/V35 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/HLT/V17 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTFULL" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/HLT/V35') + tableName = cms.string('/dev/CMSSW_11_3_0/HLT/V17') ) process.transferSystem = cms.PSet( @@ -3762,7 +3762,8 @@ 'ScoutingCaloMuon' ), ScoutingPF = cms.vstring( 'ScoutingPFCommissioning', 'ScoutingPFHT', - 'ScoutingPFMuon' ) + 'ScoutingPFMuon', + 'ScoutingPFRun3' ) ) process.datasets = cms.PSet( AlCaLumiPixelCountsExpress = cms.vstring( 'AlCa_LumiPixelsCounts_Random_v1' ), @@ -6037,6 +6038,7 @@ 'DST_L1HTT_BTagScouting_v15', 'DST_L1HTT_CaloBTagScouting_v14', 'DST_L1HTT_CaloScouting_PFScouting_v15', + 'DST_Run3_PFScoutingPixelTracking_v16', 'DST_ZeroBias_BTagScouting_v15', 'DST_ZeroBias_CaloScouting_PFScouting_v14', 'HLT_Ele115_CaloIdVT_GsfTrkIdT_v14', @@ -6056,6 +6058,7 @@ ScoutingPFHT = cms.vstring( 'DST_HT410_BTagScouting_v16', 'DST_HT410_PFScouting_v16' ), ScoutingPFMuon = cms.vstring( 'DST_DoubleMu3_noVtx_Mass10_PFScouting_v3' ), + ScoutingPFRun3 = cms.vstring( 'DST_Run3_PFScoutingPixelTracking_v16' ), SingleMuHighPt = cms.vstring( 'HLT_HIL2Mu15ForPPRef_v6', 'HLT_HIL2Mu20ForPPRef_v6', 'HLT_HIL2Mu5_NHitQ10ForPPRef_v6', @@ -8242,15 +8245,8 @@ ) process.MessageLogger = cms.Service( "MessageLogger", suppressInfo = cms.untracked.vstring( ), - statistics = cms.untracked.vstring( 'cerr' ), - suppressFwkInfo = cms.untracked.vstring( ), - cout = cms.untracked.PSet( placeholder = cms.untracked.bool( True ) ), - cerr_stats = cms.untracked.PSet( - threshold = cms.untracked.string( "WARNING" ), - output = cms.untracked.string( "cerr" ), - optionalPSet = cms.untracked.bool( True ) - ), suppressDebug = cms.untracked.vstring( ), + suppressFwkInfo = cms.untracked.vstring( ), cerr = cms.untracked.PSet( INFO = cms.untracked.PSet( limit = cms.untracked.int32( 0 ) ), noTimeStamps = cms.untracked.bool( False ), @@ -8266,10 +8262,6 @@ limit = cms.untracked.int32( 10000000 ) ), threshold = cms.untracked.string( "INFO" ), - suppressInfo = cms.untracked.vstring( ), - suppressWarning = cms.untracked.vstring( ), - suppressDebug = cms.untracked.vstring( ), - suppressError = cms.untracked.vstring( ) ), suppressWarning = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltCtf3HitL1SeededWithMaterialTracks', @@ -8292,17 +8284,6 @@ 'hltBLifetimeRegionalCtfWithMaterialTracksbbPhiL1FastJetFastPV', 'hltCtfActivityWithMaterialTracks' ), debugModules = cms.untracked.vstring( ), - categories = cms.untracked.vstring( 'FwkJob', - 'FwkReport', - 'FwkSummary', - 'Root_NoDictionary' ), - destinations = cms.untracked.vstring( 'warnings', - 'errors', - 'infos', - 'debugs', - 'cout', - 'cerr' ), - threshold = cms.untracked.string( "INFO" ), suppressError = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltL3MuonCandidates', 'hltL3TkTracksFromL2OIState', @@ -8666,7 +8647,7 @@ ts4Thresh = cms.double( 0.0 ), meanTime = cms.double( 0.0 ), nnlsThresh = cms.double( 1.0E-11 ), - nMaxItersMin = cms.int32( 500 ), + nMaxItersMin = cms.int32( 50 ), timeSigmaSiPM = cms.double( 2.5 ), applyTimeSlew = cms.bool( True ), timeSlewParsType = cms.int32( 3 ), @@ -13881,7 +13862,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -13997,6 +13979,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -19264,14 +19247,6 @@ thrOverE2EB1 = cms.vdouble( 0.0 ), thrOverE2EB2 = cms.vdouble( 0.0 ) ) -process.hltRegionalTowerForEgamma = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - EMin = cms.double( 0.8 ), - EtMin = cms.double( 0.5 ), - L1IsoCand = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForAll" ) -) process.hltEgammaHcalPFClusterIso = cms.EDProducer( "EgammaHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.2, 0.25 ), useHF = cms.bool( False ), @@ -32637,7 +32612,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 20.0, 20.0, 20.0, 20.0, 20.0, 20.0 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -32753,6 +32729,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -33137,10 +33114,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAllCaloForMuons" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -33150,7 +33127,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -33175,15 +33152,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauLooseRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -33229,10 +33207,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -33242,7 +33220,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -33267,15 +33245,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 50.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauLooseAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -33932,10 +33911,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAllCaloForMuons" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -33945,7 +33924,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -33970,15 +33949,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauLooseRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -34024,10 +34004,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -34037,7 +34017,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -34062,15 +34042,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 50.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauLooseAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -34223,10 +34204,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -34236,7 +34217,276 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), + applyRelativeSumPtCut = cms.bool( False ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), WeightECALIsolation = cms.double( 0.33333 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 0.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 0.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) +) +process.hltHpsPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 2.0 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( False ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.05 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.5 ), + applyRelativeSumPtCut = cms.bool( True ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), + WeightECALIsolation = cms.double( 1.0 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 1.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 60.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) +) +process.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", + Prediscriminants = cms.PSet( + BooleanOperator = cms.string( "or" ), + discr1 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminator" ) + ), + discr2 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauMediumRelativeChargedIsolationDiscriminator" ) + ) + ), + FailValue = cms.double( 0.0 ), + PassValue = cms.double( 1.0 ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ) +) +process.hltHpsSelectedPFTausTrackFindingMediumChargedIsolation = cms.EDFilter( "PFTauSelector", + discriminators = cms.VPSet( + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackFindingDiscriminator" ), + selectionCut = cms.double( 0.5 ) + ), + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator" ), + selectionCut = cms.double( 0.5 ) + ) + ), + discriminatorContainers = cms.VPSet( + ), + cut = cms.string( "pt > 0" ), + src = cms.InputTag( "hltHpsPFTauProducer" ) +) +process.hltHpsPFTau30TrackMediumChargedIso = cms.EDFilter( "HLT1PFTau", + saveTags = cms.bool( True ), + MinPt = cms.double( 30.0 ), + MinN = cms.int32( 1 ), + MaxEta = cms.double( 2.5 ), + MinEta = cms.double( -1.0 ), + MinMass = cms.double( -1.0 ), + inputTag = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), + MinE = cms.double( -1.0 ), + triggerType = cms.int32( 84 ), + MaxMass = cms.double( -1.0 ) +) +process.hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch = cms.EDProducer( "L1THLTTauMatching", + JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), + EtMin = cms.double( 0.0 ), + L1TauTrigger = cms.InputTag( "hltL1sBigORLooseIsoEGXXerIsoTauYYerdRMin0p3" ) +) +process.hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched = cms.EDFilter( "HLT1PFTau", + saveTags = cms.bool( True ), + MinPt = cms.double( 30.0 ), + MinN = cms.int32( 1 ), + MaxEta = cms.double( 2.1 ), + MinEta = cms.double( -1.0 ), + MinMass = cms.double( -1.0 ), + inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch" ), + MinE = cms.double( -1.0 ), + triggerType = cms.int32( 84 ), + MaxMass = cms.double( -1.0 ) +) +process.hltHpsOverlapFilterIsoEle24WPTightGsfMediumIsoPFTau30 = cms.EDFilter( "HLT2PhotonPFTau", + saveTags = cms.bool( True ), + MinMinv = cms.double( 0.0 ), + originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackFindingMediumChargedIsolation' ), + MinDelR = cms.double( 0.3 ), + MinPt = cms.double( 1.0 ), + MinN = cms.int32( 1 ), + originTag1 = cms.VInputTag( 'hltEgammaCandidates' ), + triggerType1 = cms.int32( 81 ), + triggerType2 = cms.int32( 84 ), + MaxMinv = cms.double( -1.0 ), + MinDeta = cms.double( 0.0 ), + MaxDelR = cms.double( 99999.0 ), + inputTag1 = cms.InputTag( "hltEle24erWPTightGsfTrackIsoFilterForTau" ), + inputTag2 = cms.InputTag( "hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched" ), + MaxDphi = cms.double( -1.0 ), + MaxDeta = cms.double( -1.0 ), + MaxPt = cms.double( -1.0 ), + MinDphi = cms.double( 0.0 ) +) +process.hltPreEle24eta2p1WPTightGsfTightChargedIsoPFTauHPS30eta2p1CrossL1 = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +process.hltHpsPFTauTightAbsoluteChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 3.2 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( True ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "NotUsed" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.03 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -34261,282 +34511,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) -) -process.hltHpsPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 2.0 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), - rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.05 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), - applyRelativeSumPtCut = cms.bool( True ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) -) -process.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", - Prediscriminants = cms.PSet( - BooleanOperator = cms.string( "or" ), - discr1 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminator" ) - ), - discr2 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauMediumRelativeChargedIsolationDiscriminator" ) - ) - ), - FailValue = cms.double( 0.0 ), - PassValue = cms.double( 1.0 ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ) -) -process.hltHpsSelectedPFTausTrackFindingMediumChargedIsolation = cms.EDFilter( "PFTauSelector", - discriminators = cms.VPSet( - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackFindingDiscriminator" ), - selectionCut = cms.double( 0.5 ) - ), - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator" ), - selectionCut = cms.double( 0.5 ) - ) - ), - discriminatorContainers = cms.VPSet( - ), - cut = cms.string( "pt > 0" ), - src = cms.InputTag( "hltHpsPFTauProducer" ) -) -process.hltHpsPFTau30TrackMediumChargedIso = cms.EDFilter( "HLT1PFTau", - saveTags = cms.bool( True ), - MinPt = cms.double( 30.0 ), - MinN = cms.int32( 1 ), - MaxEta = cms.double( 2.5 ), - MinEta = cms.double( -1.0 ), - MinMass = cms.double( -1.0 ), - inputTag = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), - MinE = cms.double( -1.0 ), - triggerType = cms.int32( 84 ), - MaxMass = cms.double( -1.0 ) -) -process.hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch = cms.EDProducer( "L1THLTTauMatching", - JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), - EtMin = cms.double( 0.0 ), - L1TauTrigger = cms.InputTag( "hltL1sBigORLooseIsoEGXXerIsoTauYYerdRMin0p3" ) -) -process.hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched = cms.EDFilter( "HLT1PFTau", - saveTags = cms.bool( True ), - MinPt = cms.double( 30.0 ), - MinN = cms.int32( 1 ), - MaxEta = cms.double( 2.1 ), - MinEta = cms.double( -1.0 ), - MinMass = cms.double( -1.0 ), - inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch" ), - MinE = cms.double( -1.0 ), - triggerType = cms.int32( 84 ), - MaxMass = cms.double( -1.0 ) -) -process.hltHpsOverlapFilterIsoEle24WPTightGsfMediumIsoPFTau30 = cms.EDFilter( "HLT2PhotonPFTau", - saveTags = cms.bool( True ), - MinMinv = cms.double( 0.0 ), - originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackFindingMediumChargedIsolation' ), - MinDelR = cms.double( 0.3 ), - MinPt = cms.double( 1.0 ), - MinN = cms.int32( 1 ), - originTag1 = cms.VInputTag( 'hltEgammaCandidates' ), - triggerType1 = cms.int32( 81 ), - triggerType2 = cms.int32( 84 ), - MaxMinv = cms.double( -1.0 ), - MinDeta = cms.double( 0.0 ), - MaxDelR = cms.double( 99999.0 ), - inputTag1 = cms.InputTag( "hltEle24erWPTightGsfTrackIsoFilterForTau" ), - inputTag2 = cms.InputTag( "hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched" ), - MaxDphi = cms.double( -1.0 ), - MaxDeta = cms.double( -1.0 ), - MaxPt = cms.double( -1.0 ), - MinDphi = cms.double( 0.0 ) -) -process.hltPreEle24eta2p1WPTightGsfTightChargedIsoPFTauHPS30eta2p1CrossL1 = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltHpsPFTauTightAbsoluteChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 3.2 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), - rhoProducer = cms.InputTag( "NotUsed" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.03 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), WeightECALIsolation = cms.double( 0.33333 ), - applyRelativeSumPtCut = cms.bool( False ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauTightRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -34582,10 +34566,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -34595,7 +34579,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -34620,15 +34604,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 70.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -34757,10 +34742,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -34770,7 +34755,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( True ), @@ -34795,15 +34780,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltHpsSelectedPFTausTrackFindingLooseChargedIsolationTightOOSCPhotons = cms.EDFilter( "PFTauSelector", discriminators = cms.VPSet( @@ -35737,14 +35723,6 @@ useEt = cms.bool( True ), rhoScale = cms.double( 1.0 ) ) -process.hltRegionalTowerForMuonsReg = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( "hltIterL3MuonCandidates" ), - EMin = cms.double( 0.0 ), - EtMin = cms.double( 0.0 ), - L1IsoCand = cms.InputTag( "hltIterL3MuonCandidates" ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForHCAL" ) -) process.hltMuonHcalRegPFClusterIsoForMuons = cms.EDProducer( "MuonHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.227, 0.372 ), useHF = cms.bool( False ), @@ -38451,7 +38429,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 20.0, 20.0, 20.0, 20.0, 20.0, 20.0 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -38567,6 +38546,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -38972,10 +38952,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -38985,7 +38965,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 0.33333 ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -39010,15 +38990,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 0.33333 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauMediumRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -39064,10 +39045,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -39077,7 +39058,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -39102,15 +39083,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauMediumAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -39227,10 +39209,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -39240,7 +39222,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( True ), @@ -39265,15 +39247,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauMediumChargedIsolationAndTightOOSCPhotonsDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -39390,10 +39373,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -39403,7 +39386,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 0.33333 ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -39428,15 +39411,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 0.33333 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -39482,10 +39466,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -39495,7 +39479,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -39520,15 +39504,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 70.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -40251,10 +40236,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -40264,7 +40249,264 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), + applyRelativeSumPtCut = cms.bool( False ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), WeightECALIsolation = cms.double( 0.33333 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 0.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 0.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) +) +process.hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 2.0 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( False ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.04 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.5 ), + applyRelativeSumPtCut = cms.bool( True ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), + WeightECALIsolation = cms.double( 1.0 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 1.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 70.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) +) +process.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", + Prediscriminants = cms.PSet( + BooleanOperator = cms.string( "or" ), + discr1 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauTightAbsoluteChargedIsolationDiscriminatorReg" ) + ), + discr2 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg" ) + ) + ), + FailValue = cms.double( 0.0 ), + PassValue = cms.double( 1.0 ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ) +) +process.hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg = cms.EDFilter( "PFTauSelector", + discriminators = cms.VPSet( + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackPt1DiscriminatorReg" ), + selectionCut = cms.double( 0.5 ) + ), + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg" ), + selectionCut = cms.double( 0.5 ) + ) + ), + discriminatorContainers = cms.VPSet( + ), + cut = cms.string( "pt > 0" ), + src = cms.InputTag( "hltHpsPFTauProducerReg" ) +) +process.hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg = cms.EDProducer( "L1THLTTauMatching", + JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg" ), + EtMin = cms.double( 0.0 ), + L1TauTrigger = cms.InputTag( "hltL1sBigOrMuXXerIsoTauYYer" ) +) +process.hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg = cms.EDFilter( "HLT1PFTau", + saveTags = cms.bool( True ), + MinPt = cms.double( 35.0 ), + MinN = cms.int32( 1 ), + MaxEta = cms.double( 2.1 ), + MinEta = cms.double( -1.0 ), + MinMass = cms.double( -1.0 ), + inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg" ), + MinE = cms.double( -1.0 ), + triggerType = cms.int32( 84 ), + MaxMass = cms.double( -1.0 ) +) +process.hltHpsOverlapFilterIsoMu24TightChargedIsoPFTau35MonitoringReg = cms.EDFilter( "HLT2MuonPFTau", + saveTags = cms.bool( True ), + MinMinv = cms.double( 0.0 ), + originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg' ), + MinDelR = cms.double( 0.3 ), + MinPt = cms.double( 1.0 ), + MinN = cms.int32( 1 ), + originTag1 = cms.VInputTag( 'hltIterL3MuonCandidates' ), + triggerType1 = cms.int32( 83 ), + triggerType2 = cms.int32( 84 ), + MaxMinv = cms.double( -1.0 ), + MinDeta = cms.double( 1.0 ), + MaxDelR = cms.double( 99999.0 ), + inputTag1 = cms.InputTag( "hltL3crIsoL1sBigOrMuXXerIsoTauYYerL1f0L2f10QL3f24QL3trkIsoFiltered0p07" ), + inputTag2 = cms.InputTag( "hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg" ), + MaxDphi = cms.double( -1.0 ), + MaxDeta = cms.double( -1.0 ), + MaxPt = cms.double( -1.0 ), + MinDphi = cms.double( 0.0 ) +) +process.hltPreIsoMu24eta2p1MediumChargedIsoPFTauHPS35Trk1TightIDeta2p1RegCrossL1 = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +process.hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 3.7 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( True ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "NotUsed" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.03 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -40289,270 +40531,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) -) -process.hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 2.0 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), - rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.04 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), - applyRelativeSumPtCut = cms.bool( True ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 70.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) -) -process.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", - Prediscriminants = cms.PSet( - BooleanOperator = cms.string( "or" ), - discr1 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauTightAbsoluteChargedIsolationDiscriminatorReg" ) - ), - discr2 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg" ) - ) - ), - FailValue = cms.double( 0.0 ), - PassValue = cms.double( 1.0 ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ) -) -process.hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg = cms.EDFilter( "PFTauSelector", - discriminators = cms.VPSet( - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackPt1DiscriminatorReg" ), - selectionCut = cms.double( 0.5 ) - ), - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg" ), - selectionCut = cms.double( 0.5 ) - ) - ), - discriminatorContainers = cms.VPSet( - ), - cut = cms.string( "pt > 0" ), - src = cms.InputTag( "hltHpsPFTauProducerReg" ) -) -process.hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg = cms.EDProducer( "L1THLTTauMatching", - JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg" ), - EtMin = cms.double( 0.0 ), - L1TauTrigger = cms.InputTag( "hltL1sBigOrMuXXerIsoTauYYer" ) -) -process.hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg = cms.EDFilter( "HLT1PFTau", - saveTags = cms.bool( True ), - MinPt = cms.double( 35.0 ), - MinN = cms.int32( 1 ), - MaxEta = cms.double( 2.1 ), - MinEta = cms.double( -1.0 ), - MinMass = cms.double( -1.0 ), - inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg" ), - MinE = cms.double( -1.0 ), - triggerType = cms.int32( 84 ), - MaxMass = cms.double( -1.0 ) -) -process.hltHpsOverlapFilterIsoMu24TightChargedIsoPFTau35MonitoringReg = cms.EDFilter( "HLT2MuonPFTau", - saveTags = cms.bool( True ), - MinMinv = cms.double( 0.0 ), - originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg' ), - MinDelR = cms.double( 0.3 ), - MinPt = cms.double( 1.0 ), - MinN = cms.int32( 1 ), - originTag1 = cms.VInputTag( 'hltIterL3MuonCandidates' ), - triggerType1 = cms.int32( 83 ), - triggerType2 = cms.int32( 84 ), - MaxMinv = cms.double( -1.0 ), - MinDeta = cms.double( 1.0 ), - MaxDelR = cms.double( 99999.0 ), - inputTag1 = cms.InputTag( "hltL3crIsoL1sBigOrMuXXerIsoTauYYerL1f0L2f10QL3f24QL3trkIsoFiltered0p07" ), - inputTag2 = cms.InputTag( "hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg" ), - MaxDphi = cms.double( -1.0 ), - MaxDeta = cms.double( -1.0 ), - MaxPt = cms.double( -1.0 ), - MinDphi = cms.double( 0.0 ) -) -process.hltPreIsoMu24eta2p1MediumChargedIsoPFTauHPS35Trk1TightIDeta2p1RegCrossL1 = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 3.7 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), - rhoProducer = cms.InputTag( "NotUsed" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.03 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), WeightECALIsolation = cms.double( 0.33333 ), - applyRelativeSumPtCut = cms.bool( False ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauMediumRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -40598,10 +40586,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -40611,7 +40599,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -40636,15 +40624,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -40706,10 +40695,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -40719,7 +40708,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( True ), @@ -40744,15 +40733,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauMediumChargedIsolationAndTightOOSCPhotonsDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -62275,10 +62265,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAllCaloForMuons" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -62288,7 +62278,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -62313,15 +62303,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -62367,10 +62358,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -62380,7 +62371,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -62405,15 +62396,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -79157,7 +79149,7 @@ l1LowerThrIgnoreIsolation = cms.double( 100.0 ), productLabels = cms.vstring( 'EcalRegionalRecHitsEB', 'EcalRegionalRecHitsEE' ), - l1TagIsolated = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ) + l1TagIsolated = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) ) process.hltRecHitInRegionForMuonsESNoVtx = cms.EDProducer( "MuonHLTRechitInRegionsProducer", l1LowerThr = cms.double( 0.0 ), @@ -79431,14 +79423,6 @@ rhoScale = cms.double( 1.0 ), recoCandidateProducer = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ) ) -process.hltRegionalTowerForMuonsNoVtx = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - EMin = cms.double( 0.0 ), - EtMin = cms.double( 0.0 ), - L1IsoCand = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForAll" ) -) process.hltMuonHcalPFClusterIsoForMuonsNoVtx = cms.EDProducer( "MuonHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.11, 0.163 ), useHF = cms.bool( False ), @@ -79944,26 +79928,3584 @@ ), ignoreVertices = cms.bool( False ) ) -process.hltIter1L3MuonTrackCutClassifierMergedNoVtx = cms.EDProducer( "ClassifierMerger", - inputClassifiers = cms.vstring( 'hltIter1L3MuonTrackCutClassifierPromptNoVtx', - 'hltIter1L3MuonTrackCutClassifierDetachedNoVtx' ) +process.hltIter1L3MuonTrackCutClassifierMergedNoVtx = cms.EDProducer( "ClassifierMerger", + inputClassifiers = cms.vstring( 'hltIter1L3MuonTrackCutClassifierPromptNoVtx', + 'hltIter1L3MuonTrackCutClassifierDetachedNoVtx' ) +) +process.hltIter1L3MuonTrackSelectionHighPurityNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedNoVtx','MVAValues' ) +) +process.hltIter1L3MuonMergedNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityNoVtx','hltIter1L3MuonTrackSelectionHighPurityNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityNoVtx','hltIter1L3MuonTrackSelectionHighPurityNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +process.hltIter2L3MuonClustersRefRemovalNoVtx = cms.EDProducer( "TrackClusterRemover", + trackClassifier = cms.InputTag( '','QualityMasks' ), + minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), + maxChi2 = cms.double( 16.0 ), + trajectories = cms.InputTag( "hltIter1L3MuonTrackSelectionHighPurityNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "hltIter1L3MuonClustersRefRemovalNoVtx" ), + stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), + overrideTrkQuals = cms.InputTag( "" ), + pixelClusters = cms.InputTag( "hltSiPixelClusters" ), + TrackQuality = cms.string( "highPurity" ) +) +process.hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), + OnDemand = cms.bool( False ), + src = cms.InputTag( "hltSiStripClusters" ) +) +process.hltIter2L3MuonPixelLayerTripletsNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3', + 'BPix2+BPix3+BPix4', + 'BPix1+BPix3+BPix4', + 'BPix1+BPix2+BPix4', + 'BPix2+BPix3+FPix1_pos', + 'BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos', + 'BPix1+BPix2+FPix1_neg', + 'BPix2+FPix1_pos+FPix2_pos', + 'BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos', + 'BPix1+FPix1_neg+FPix2_neg', + 'FPix1_pos+FPix2_pos+FPix3_pos', + 'FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +process.hltIter2L3MuonPixelTrackingRegionsNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", + RegionPSet = cms.PSet( + vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + zErrorVetex = cms.double( 0.05 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + zErrorBeamSpot = cms.double( 24.2 ), + maxNVertices = cms.int32( 1 ), + maxNRegions = cms.int32( 10 ), + nSigmaZVertex = cms.double( 3.0 ), + nSigmaZBeamSpot = cms.double( 4.0 ), + ptMin = cms.double( 0.8 ), + mode = cms.string( "VerticesFixed" ), + input = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + searchOpt = cms.bool( False ), + whereToUseMeasurementTracker = cms.string( "ForSiStrips" ), + originRadius = cms.double( 0.025 ), + measurementTrackerName = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + precise = cms.bool( True ), + deltaEta = cms.double( 0.3 ), + deltaPhi = cms.double( 0.3 ) + ) +) +process.hltIter2L3MuonPixelHitDoubletsNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIter2L3MuonPixelTrackingRegionsNoVtx" ), + layerPairs = cms.vuint32( 0, 1 ), + clusterCheck = cms.InputTag( "hltIter2L3MuonPixelClusterCheck" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIter2L3MuonPixelLayerTripletsNoVtx" ) +) +process.hltIter2L3MuonPixelHitTripletsNoVtx = cms.EDProducer( "CAHitTripletEDProducer", + CAThetaCut = cms.double( 0.004 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + maxChi2 = cms.PSet( + value2 = cms.double( 6.0 ), + value1 = cms.double( 100.0 ), + pt1 = cms.double( 0.8 ), + enabled = cms.bool( True ), + pt2 = cms.double( 8.0 ) + ), + doublets = cms.InputTag( "hltIter2L3MuonPixelHitDoubletsNoVtx" ), + CAHardPtCut = cms.double( 0.3 ), + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.1 ), + useBendingCorrection = cms.bool( True ), + extraHitRPhitolerance = cms.double( 0.032 ) +) +process.hltIter2L3MuonPixelSeedsNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsEDProducer", + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + forceKinematicWithRegionDirection = cms.bool( False ), + magneticField = cms.string( "ParabolicMf" ), + SeedMomentumForBOFF = cms.double( 5.0 ), + OriginTransverseErrorMultiplier = cms.double( 1.0 ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MinOneOverPtError = cms.double( 1.0 ), + seedingHitSets = cms.InputTag( "hltIter2L3MuonPixelHitTripletsNoVtx" ), + propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) +) +process.hltIter2L3MuonCkfTrackCandidatesNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter2L3MuonPixelSeedsNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter2GroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "" ) +) +process.hltIter2L3MuonCtfWithMaterialTracksNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter2L3MuonCkfTrackCandidatesNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIterX" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +process.hltIter2L3MuonTrackCutClassifierNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 0 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 15.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 0.003 ), + dr_par2 = cms.vdouble( 3.40282346639E38, 0.3, 0.3 ), + dr_par1 = cms.vdouble( 3.40282346639E38, 0.4, 0.4 ), + dr_exp = cms.vint32( 4, 4, 4 ), + d0err_par = cms.vdouble( 0.001, 0.001, 0.001 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 3.40282346639E38, 0.4, 0.4 ), + dz_par2 = cms.vdouble( 3.40282346639E38, 0.35, 0.35 ), + dz_exp = cms.vint32( 4, 4, 4 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 16.0 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 3 ) + ), + ignoreVertices = cms.bool( False ) +) +process.hltIter2L3MuonTrackSelectionHighPurityNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierNoVtx','MVAValues' ) +) +process.hltIter2L3MuonMergedNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIter1L3MuonMergedNoVtx','hltIter2L3MuonTrackSelectionHighPurityNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIter1L3MuonMergedNoVtx','hltIter2L3MuonTrackSelectionHighPurityNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +process.hltMuonTkRelIsolationCut0p09MapNoVtx = cms.EDProducer( "L3MuonCombinedRelativeIsolationProducer", + printDebug = cms.bool( False ), + CutsPSet = cms.PSet( + applyCutsORmaxNTracks = cms.bool( False ), + maxNTracks = cms.int32( -1 ), + Thresholds = cms.vdouble( 0.09 ), + EtaBounds = cms.vdouble( 2.411 ), + ComponentName = cms.string( "SimpleCuts" ), + ConeSizes = cms.vdouble( 0.3 ) + ), + TrkExtractorPSet = cms.PSet( + Diff_z = cms.double( 0.2 ), + inputTrackCollection = cms.InputTag( "hltIter2L3MuonMergedNoVtx" ), + Chi2Ndof_Max = cms.double( 1.0E64 ), + BeamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), + DR_Veto = cms.double( 0.01 ), + Pt_Min = cms.double( -1.0 ), + VetoLeadingTrack = cms.bool( True ), + DR_Max = cms.double( 0.3 ), + DepositLabel = cms.untracked.string( "PXLS" ), + PtVeto_Min = cms.double( 2.0 ), + NHits_Min = cms.uint32( 0 ), + PropagateTracksToRadius = cms.bool( True ), + ReferenceRadius = cms.double( 6.0 ), + Chi2Prob_Min = cms.double( -1.0 ), + Diff_r = cms.double( 0.1 ), + BeamlineOption = cms.string( "BeamSpotFromEvent" ), + ComponentName = cms.string( "PixelTrackExtractor" ), + DR_VetoPt = cms.double( 0.025 ) + ), + OutputMuIsoDeposits = cms.bool( True ), + TrackPt_Min = cms.double( -1.0 ), + CaloDepositsLabel = cms.InputTag( "notUsed" ), + CaloExtractorPSet = cms.PSet( + DR_Veto_H = cms.double( 0.1 ), + Vertex_Constraint_Z = cms.bool( False ), + DR_Veto_E = cms.double( 0.07 ), + Weight_H = cms.double( 1.0 ), + CaloTowerCollectionLabel = cms.InputTag( "hltTowerMakerForAll" ), + DR_Max = cms.double( 0.3 ), + DepositLabel = cms.untracked.string( "EcalPlusHcal" ), + Vertex_Constraint_XY = cms.bool( False ), + Threshold_H = cms.double( 0.5 ), + Threshold_E = cms.double( 0.2 ), + ComponentName = cms.string( "CaloExtractor" ), + Weight_E = cms.double( 1.0 ) + ), + inputMuonCollection = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + UseRhoCorrectedCaloDeposits = cms.bool( False ), + UseCaloIso = cms.bool( False ) +) +process.hltPreDSTDoubleMu3noVtxCaloScouting = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +process.hltDimuon3L1Filtered0 = cms.EDFilter( "HLTMuonL1TFilter", + saveTags = cms.bool( True ), + PreviousCandTag = cms.InputTag( "hltL1sDoubleMuIorTripleMuIorQuadMu" ), + MinPt = cms.double( 0.0 ), + MinN = cms.int32( 2 ), + MaxEta = cms.double( 2.5 ), + CentralBxOnly = cms.bool( True ), + SelectQualities = cms.vint32( ), + CandTag = cms.InputTag( 'hltGtStage2Digis','Muon' ) +) +process.hltDimuon3L2PreFiltered0 = cms.EDFilter( "HLTMuonL2FromL1TPreFilter", + saveTags = cms.bool( True ), + MaxDr = cms.double( 9999.0 ), + CutOnChambers = cms.bool( False ), + PreviousCandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), + MinPt = cms.double( 0.0 ), + MinN = cms.int32( 0 ), + SeedMapTag = cms.InputTag( "hltL2Muons" ), + MaxEta = cms.double( 2.5 ), + MinNhits = cms.vint32( 0 ), + MinDxySig = cms.double( -1.0 ), + MinDr = cms.double( -1.0 ), + AbsEtaBins = cms.vdouble( 0.0 ), + MaxDz = cms.double( 9999.0 ), + MatchToPreviousCand = cms.bool( True ), + CandTag = cms.InputTag( "hltL2MuonCandidatesNoVtx" ), + BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), + MinNchambers = cms.vint32( 0 ), + NSigmaPt = cms.double( 0.0 ), + MinNstations = cms.vint32( 0 ) +) +process.hltDoubleMu3L3FilteredNoVtx = cms.EDFilter( "HLTMuonDimuonL3Filter", + saveTags = cms.bool( True ), + ChargeOpt = cms.int32( 0 ), + MaxPtMin = cms.vdouble( 1.0E125 ), + FastAccept = cms.bool( False ), + MatchToPreviousCand = cms.bool( True ), + MaxDr = cms.double( 9999.0 ), + L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), + inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), + InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), + PreviousCandIsL2 = cms.bool( True ), + PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), + MaxPtBalance = cms.double( 999999.0 ), + MaxPtPair = cms.vdouble( 1.0E125 ), + MaxAcop = cms.double( 999.0 ), + MinPtMin = cms.vdouble( 3.0 ), + MaxInvMass = cms.vdouble( 9999.0 ), + MinPtMax = cms.vdouble( 0.0 ), + BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), + MinN = cms.int32( 1 ), + MaxDz = cms.double( 9999.0 ), + MinPtPair = cms.vdouble( 0.0 ), + CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + MinAcop = cms.double( -999.0 ), + MaxDCAMuMu = cms.double( 999999.0 ), + MinNhits = cms.int32( 0 ), + NSigmaPt = cms.double( 0.0 ), + MinPtBalance = cms.double( -1.0 ), + MaxEta = cms.double( 2.5 ), + L1MatchingdR = cms.double( 0.3 ), + MaxRapidityPair = cms.double( 999999.0 ), + CutCowboys = cms.bool( False ), + MinInvMass = cms.vdouble( 0.0 ) +) +process.hltDisplacedmumuVtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", + Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtx" ), + MinPt = cms.double( 0.0 ), + ChargeOpt = cms.int32( 0 ), + MaxEta = cms.double( 2.5 ), + MaxInvMass = cms.double( 99999.0 ), + MinPtPair = cms.double( 0.0 ), + matchToPrevious = cms.bool( True ), + MinInvMass = cms.double( 0.0 ) +) +process.hltPreDSTDoubleMu1noVtxCaloScouting = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +process.hltDoubleMu1L3FilteredNoVtx = cms.EDFilter( "HLTMuonDimuonL3Filter", + saveTags = cms.bool( True ), + ChargeOpt = cms.int32( 0 ), + MaxPtMin = cms.vdouble( 1.0E125 ), + FastAccept = cms.bool( False ), + MatchToPreviousCand = cms.bool( True ), + MaxDr = cms.double( 9999.0 ), + L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), + inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), + InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), + PreviousCandIsL2 = cms.bool( True ), + PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), + MaxPtBalance = cms.double( 999999.0 ), + MaxPtPair = cms.vdouble( 1.0E125 ), + MaxAcop = cms.double( 999.0 ), + MinPtMin = cms.vdouble( 1.0 ), + MaxInvMass = cms.vdouble( 9999.0 ), + MinPtMax = cms.vdouble( 0.0 ), + BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), + MinN = cms.int32( 1 ), + MaxDz = cms.double( 9999.0 ), + MinPtPair = cms.vdouble( 0.0 ), + CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + MinAcop = cms.double( -999.0 ), + MaxDCAMuMu = cms.double( 999999.0 ), + MinNhits = cms.int32( 0 ), + NSigmaPt = cms.double( 0.0 ), + MinPtBalance = cms.double( -1.0 ), + MaxEta = cms.double( 2.5 ), + L1MatchingdR = cms.double( 0.3 ), + MaxRapidityPair = cms.double( 999999.0 ), + CutCowboys = cms.bool( False ), + MinInvMass = cms.vdouble( 0.0 ) +) +process.hltDisplacedmumu1VtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", + Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + PreviousCandTag = cms.InputTag( "hltDoubleMu1L3FilteredNoVtx" ), + MinPt = cms.double( 0.0 ), + ChargeOpt = cms.int32( 0 ), + MaxEta = cms.double( 2.5 ), + MaxInvMass = cms.double( 99999.0 ), + MinPtPair = cms.double( 0.0 ), + matchToPrevious = cms.bool( True ), + MinInvMass = cms.double( 0.0 ) +) +process.hltPreDSTDoubleMu3noVtxMass10PFScouting = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +process.hltDoubleMu3L3FilteredNoVtxMass10 = cms.EDFilter( "HLTMuonDimuonL3Filter", + saveTags = cms.bool( True ), + ChargeOpt = cms.int32( 0 ), + MaxPtMin = cms.vdouble( 1.0E125 ), + FastAccept = cms.bool( False ), + MatchToPreviousCand = cms.bool( True ), + MaxDr = cms.double( 9999.0 ), + L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), + inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), + InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), + PreviousCandIsL2 = cms.bool( True ), + PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), + MaxPtBalance = cms.double( 999999.0 ), + MaxPtPair = cms.vdouble( 1.0E125 ), + MaxAcop = cms.double( 999.0 ), + MinPtMin = cms.vdouble( 3.0 ), + MaxInvMass = cms.vdouble( 9999.0 ), + MinPtMax = cms.vdouble( 0.0 ), + BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), + MinN = cms.int32( 1 ), + MaxDz = cms.double( 9999.0 ), + MinPtPair = cms.vdouble( 0.0 ), + CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + MinAcop = cms.double( -999.0 ), + MaxDCAMuMu = cms.double( 999999.0 ), + MinNhits = cms.int32( 0 ), + NSigmaPt = cms.double( 0.0 ), + MinPtBalance = cms.double( -1.0 ), + MaxEta = cms.double( 2.5 ), + L1MatchingdR = cms.double( 0.3 ), + MaxRapidityPair = cms.double( 999999.0 ), + CutCowboys = cms.bool( False ), + MinInvMass = cms.vdouble( 10.0 ) +) +process.hltDisplacedmumuMass10VtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", + Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtxMass10" ), + MinPt = cms.double( 0.0 ), + ChargeOpt = cms.int32( 0 ), + MaxEta = cms.double( 2.5 ), + MaxInvMass = cms.double( 99999.0 ), + MinPtPair = cms.double( 0.0 ), + matchToPrevious = cms.bool( True ), + MinInvMass = cms.double( 0.0 ) +) +process.hltL1sDSTRun3PFScoutingPixelTracking = cms.EDFilter( "HLTL1TSeed", + L1SeedsLogicalExpression = cms.string( "L1GlobalDecision" ), + L1EGammaInputTag = cms.InputTag( 'hltGtStage2Digis','EGamma' ), + L1JetInputTag = cms.InputTag( 'hltGtStage2Digis','Jet' ), + saveTags = cms.bool( True ), + L1ObjectMapInputTag = cms.InputTag( "hltGtStage2ObjectMap" ), + L1EtSumInputTag = cms.InputTag( 'hltGtStage2Digis','EtSum' ), + L1TauInputTag = cms.InputTag( 'hltGtStage2Digis','Tau' ), + L1MuonInputTag = cms.InputTag( 'hltGtStage2Digis','Muon' ), + L1GlobalInputTag = cms.InputTag( "hltGtStage2Digis" ) +) +process.hltPreDSTRun3PFScoutingPixelTracking = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +process.hltPixelTracksZetaClean = cms.EDProducer( "TrackWithVertexSelector", + normalizedChi2 = cms.double( 999999.0 ), + numberOfValidHits = cms.uint32( 0 ), + zetaVtx = cms.double( 0.3 ), + etaMin = cms.double( 0.0 ), + rhoVtx = cms.double( 0.2 ), + ptErrorCut = cms.double( 5.0 ), + dzMax = cms.double( 999.0 ), + etaMax = cms.double( 5.0 ), + quality = cms.string( "any" ), + copyTrajectories = cms.untracked.bool( False ), + nSigmaDtVertex = cms.double( 0.0 ), + timesTag = cms.InputTag( "" ), + ptMin = cms.double( 0.3 ), + ptMax = cms.double( 500.0 ), + d0Max = cms.double( 999.0 ), + copyExtras = cms.untracked.bool( False ), + nVertices = cms.uint32( 2 ), + vertexTag = cms.InputTag( "hltPixelVertices" ), + src = cms.InputTag( "hltPixelTracks" ), + vtxFallback = cms.bool( True ), + numberOfLostHits = cms.uint32( 999 ), + numberOfValidPixelHits = cms.uint32( 3 ), + timeResosTag = cms.InputTag( "" ), + useVtx = cms.bool( True ) +) +process.hltPixelOnlyPFMuonMerging = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIterL3MuonTracks','hltPixelTracksZetaClean' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIterL3MuonTracks','hltPixelTracksZetaClean' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +process.hltPixelOnlyMuonLinks = cms.EDProducer( "MuonLinksProducerForHLT", + pMin = cms.double( 2.5 ), + InclusiveTrackerTrackCollection = cms.InputTag( "hltPixelOnlyPFMuonMerging" ), + shareHitFraction = cms.double( 0.8 ), + LinkCollection = cms.InputTag( "hltL3MuonsIterL3Links" ), + ptMin = cms.double( 2.5 ) +) +process.hltPixelOnlyMuons = cms.EDProducer( "MuonIdProducer", + TrackExtractorPSet = cms.PSet( + Diff_z = cms.double( 0.2 ), + inputTrackCollection = cms.InputTag( "hltPixelOnlyPFMuonMerging" ), + Chi2Ndof_Max = cms.double( 1.0E64 ), + BeamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), + DR_Veto = cms.double( 0.01 ), + Pt_Min = cms.double( -1.0 ), + DR_Max = cms.double( 1.0 ), + DepositLabel = cms.untracked.string( "" ), + NHits_Min = cms.uint32( 0 ), + Chi2Prob_Min = cms.double( -1.0 ), + Diff_r = cms.double( 0.1 ), + BeamlineOption = cms.string( "BeamSpotFromEvent" ), + ComponentName = cms.string( "TrackExtractor" ) + ), + maxAbsEta = cms.double( 3.0 ), + fillGlobalTrackRefits = cms.bool( False ), + arbitrationCleanerOptions = cms.PSet( + OverlapDTheta = cms.double( 0.02 ), + Overlap = cms.bool( True ), + Clustering = cms.bool( True ), + ME1a = cms.bool( True ), + ClusterDTheta = cms.double( 0.02 ), + ClusterDPhi = cms.double( 0.6 ), + OverlapDPhi = cms.double( 0.0786 ) + ), + globalTrackQualityInputTag = cms.InputTag( "glbTrackQual" ), + fillShowerDigis = cms.bool( False ), + addExtraSoftMuons = cms.bool( False ), + debugWithTruthMatching = cms.bool( False ), + CaloExtractorPSet = cms.PSet( + DR_Veto_H = cms.double( 0.1 ), + CenterConeOnCalIntersection = cms.bool( False ), + NoiseTow_EE = cms.double( 0.15 ), + Noise_EB = cms.double( 0.025 ), + Noise_HE = cms.double( 0.2 ), + DR_Veto_E = cms.double( 0.07 ), + NoiseTow_EB = cms.double( 0.04 ), + Noise_EE = cms.double( 0.1 ), + UseRecHitsFlag = cms.bool( False ), + DR_Max = cms.double( 1.0 ), + DepositLabel = cms.untracked.string( "Cal" ), + Noise_HO = cms.double( 0.2 ), + DR_Veto_HO = cms.double( 0.1 ), + Threshold_H = cms.double( 0.5 ), + PrintTimeReport = cms.untracked.bool( False ), + Threshold_E = cms.double( 0.2 ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "CaloExtractorByAssociator" ), + Threshold_HO = cms.double( 0.5 ), + DepositInstanceLabels = cms.vstring( 'ecal', + 'hcal', + 'ho' ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 1.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + CaloTowerCollectionLabel = cms.InputTag( "hltTowerMakerForAll" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "hltHbhereco" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 1.0 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + dRHcal = cms.double( 1.0 ), + dRHcalPreselection = cms.double( 1.0 ), + HORecHitCollectionLabel = cms.InputTag( "hltHoreco" ) + ), + Noise_HB = cms.double( 0.2 ) + ), + runArbitrationCleaner = cms.bool( False ), + fillEnergy = cms.bool( True ), + TrackerKinkFinderParameters = cms.PSet( + usePosition = cms.bool( False ), + diagonalOnly = cms.bool( False ) + ), + TimingFillerParameters = cms.PSet( + DTTimingParameters = cms.PSet( + HitError = cms.double( 6.0 ), + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) + ), + debug = cms.bool( False ), + DoWireCorr = cms.bool( False ), + RequireBothProjections = cms.bool( False ), + DTTimeOffset = cms.double( 2.7 ), + PruneCut = cms.double( 10000.0 ), + DTsegments = cms.InputTag( "hltDt4DSegments" ), + UseSegmentT0 = cms.bool( False ), + HitsMin = cms.int32( 5 ), + DropTheta = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ) + ), + UseCSC = cms.bool( True ), + CSCTimingParameters = cms.PSet( + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) + ), + debug = cms.bool( False ), + CSCWireTimeOffset = cms.double( 0.0 ), + CSCStripError = cms.double( 7.0 ), + CSCTimeOffset = cms.double( 0.0 ), + CSCWireError = cms.double( 8.6 ), + PruneCut = cms.double( 100.0 ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + UseStripTime = cms.bool( True ), + CSCStripTimeOffset = cms.double( 0.0 ), + UseWireTime = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ) + ), + ErrorDT = cms.double( 6.0 ), + EcalEnergyCut = cms.double( 0.4 ), + UseECAL = cms.bool( True ), + ErrorEB = cms.double( 2.085 ), + UseDT = cms.bool( True ), + ErrorEE = cms.double( 6.95 ), + ErrorCSC = cms.double( 7.4 ) + ), + inputCollectionTypes = cms.vstring( 'inner tracks', + 'links', + 'outer tracks' ), + arbitrateTrackerMuons = cms.bool( False ), + minCaloCompatibility = cms.double( 0.6 ), + ecalDepositName = cms.string( "ecal" ), + minP = cms.double( 10.0 ), + fillIsolation = cms.bool( True ), + jetDepositName = cms.string( "jets" ), + hoDepositName = cms.string( "ho" ), + writeIsoDeposits = cms.bool( False ), + maxAbsPullX = cms.double( 4.0 ), + maxAbsPullY = cms.double( 9999.0 ), + minPt = cms.double( 10.0 ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( True ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( True ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 9999.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + CaloTowerCollectionLabel = cms.InputTag( "hltTowerMakerForAll" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( True ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( True ), + HBHERecHitCollectionLabel = cms.InputTag( "hltHbhereco" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.05 ), + useCalo = cms.bool( False ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + dRHcal = cms.double( 9999.0 ), + dRHcalPreselection = cms.double( 0.2 ), + HORecHitCollectionLabel = cms.InputTag( "hltHoreco" ) + ), + storeCrossedHcalRecHits = cms.bool( False ), + JetExtractorPSet = cms.PSet( + JetCollectionLabel = cms.InputTag( "hltAK4CaloJetsPFEt5" ), + DR_Veto = cms.double( 0.1 ), + DR_Max = cms.double( 1.0 ), + ExcludeMuonVeto = cms.bool( True ), + PrintTimeReport = cms.untracked.bool( False ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "JetExtractor" ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 0.5 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + CaloTowerCollectionLabel = cms.InputTag( "hltTowerMakerForAll" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "hltHbhereco" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.5 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + dRHcal = cms.double( 0.5 ), + dRHcalPreselection = cms.double( 0.5 ), + HORecHitCollectionLabel = cms.InputTag( "hltHoreco" ) + ), + Threshold = cms.double( 5.0 ) + ), + fillGlobalTrackQuality = cms.bool( False ), + minPCaloMuon = cms.double( 1.0E9 ), + maxAbsDy = cms.double( 9999.0 ), + fillCaloCompatibility = cms.bool( True ), + fillMatching = cms.bool( True ), + MuonCaloCompatibility = cms.PSet( + delta_eta = cms.double( 0.02 ), + delta_phi = cms.double( 0.02 ), + allSiPMHO = cms.bool( False ), + MuonTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_muons_lowPt_3_1_norm.root" ), + PionTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_pions_lowPt_3_1_norm.root" ) + ), + fillTrackerKink = cms.bool( False ), + ShowerDigiFillerParameters = cms.PSet( + cscDigiCollectionLabel = cms.InputTag( 'muonCSCDigis','MuonCSCStripDigi' ), + dtDigiCollectionLabel = cms.InputTag( "muonDTDigis" ), + digiMaxDistanceX = cms.double( 25.0 ) + ), + hcalDepositName = cms.string( "hcal" ), + sigmaThresholdToFillCandidateP4WithGlobalFit = cms.double( 2.0 ), + inputCollectionLabels = cms.VInputTag( 'hltPixelOnlyPFMuonMerging','hltPixelOnlyMuonLinks','hltL2Muons' ), + trackDepositName = cms.string( "tracker" ), + maxAbsDx = cms.double( 3.0 ), + ptThresholdToFillCandidateP4WithGlobalFit = cms.double( 200.0 ), + minNumberOfMatches = cms.int32( 1 ) +) +process.hltLightPixelOnlyPFTracks = cms.EDProducer( "LightPFTrackProducer", + TrackQuality = cms.string( "none" ), + UseQuality = cms.bool( False ), + TkColList = cms.VInputTag( 'hltPixelOnlyPFMuonMerging' ) +) +process.hltPixelOnlyParticleFlowBlock = cms.EDProducer( "PFBlockProducer", + debug = cms.untracked.bool( False ), + linkDefinitions = cms.VPSet( + cms.PSet( linkType = cms.string( "TRACK:ECAL" ), + useKDTree = cms.bool( True ), + linkerName = cms.string( "TrackAndECALLinker" ) + ), + cms.PSet( linkType = cms.string( "TRACK:HCAL" ), + useKDTree = cms.bool( True ), + linkerName = cms.string( "TrackAndHCALLinker" ), + trajectoryLayerEntrance = cms.string( "HCALEntrance" ), + trajectoryLayerExit = cms.string( "HCALExit" ), + nMaxHcalLinksPerTrack = cms.int32( 1 ) + ), + cms.PSet( linkType = cms.string( "ECAL:HCAL" ), + useKDTree = cms.bool( False ), + linkerName = cms.string( "ECALAndHCALLinker" ), + minAbsEtaEcal = cms.double( 2.5 ) + ), + cms.PSet( linkType = cms.string( "HFEM:HFHAD" ), + useKDTree = cms.bool( False ), + linkerName = cms.string( "HFEMAndHFHADLinker" ) + ) + ), + elementImporters = cms.VPSet( + cms.PSet( muonSrc = cms.InputTag( "hltPixelOnlyMuons" ), + source = cms.InputTag( "hltLightPixelOnlyPFTracks" ), + NHitCuts_byTrackAlgo = cms.vuint32( 3, 3, 3, 3, 3, 3 ), + useIterativeTracking = cms.bool( False ), + importerName = cms.string( "GeneralTracksImporter" ), + DPtOverPtCuts_byTrackAlgo = cms.vdouble( 5.0, 5.0, 5.0, 5.0, 5.0, 5.0 ), + muonMaxDPtOPt = cms.double( 1.0 ), + trackQuality = cms.string( "any" ), + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) + ), + cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), + importerName = cms.string( "ECALClusterImporter" ), + BCtoPFCMap = cms.InputTag( "" ) + ), + cms.PSet( source = cms.InputTag( "hltParticleFlowClusterHCAL" ), + importerName = cms.string( "GenericClusterImporter" ) + ), + cms.PSet( source = cms.InputTag( "hltParticleFlowClusterHF" ), + importerName = cms.string( "GenericClusterImporter" ) + ) + ), + verbose = cms.untracked.bool( False ) +) +process.hltPixelOnlyParticleFlow = cms.EDProducer( "PFProducer", + goodPixelTrackDeadHcal_maxLost3Hit = cms.int32( 0 ), + PFMuonAlgoParameters = cms.PSet( ), + calibHF_use = cms.bool( False ), + verbose = cms.untracked.bool( False ), + pf_nsigma_ECAL = cms.double( 0.0 ), + usePFConversions = cms.bool( False ), + GedPhotonValueMap = cms.InputTag( 'tmpGedPhotons','valMapPFEgammaCandToPhoton' ), + useCalibrationsFromDB = cms.bool( True ), + resolHF_square = cms.vdouble( 7.834401, 0.012996, 0.0 ), + goodPixelTrackDeadHcal_ptErrRel = cms.double( 1.0 ), + goodTrackDeadHcal_validFr = cms.double( 0.5 ), + postMuonCleaning = cms.bool( True ), + calibrationsLabel = cms.string( "HLT" ), + muon_HO = cms.vdouble( 0.9, 0.9 ), + postHFCleaning = cms.bool( False ), + factors_45 = cms.vdouble( 10.0, 100.0 ), + cleanedHF = cms.VInputTag( 'hltParticleFlowRecHitHF:Cleaned','hltParticleFlowClusterHF:Cleaned' ), + iCfgCandConnector = cms.PSet( + nuclCalibFactors = cms.vdouble( 0.8, 0.15, 0.5, 0.5, 0.05 ), + bCorrect = cms.bool( False ), + bCalibPrimary = cms.bool( False ) + ), + rejectTracks_Bad = cms.bool( False ), + vertexCollection = cms.InputTag( "hltPixelVertices" ), + egammaElectrons = cms.InputTag( "" ), + calibHF_a_EMonly = cms.vdouble( 0.96945, 0.96701, 0.76309, 0.82268, 0.87583, 0.89718, 0.98674, 1.4681, 1.458, 1.458 ), + dptRel_DispVtx = cms.double( 10.0 ), + muons = cms.InputTag( "hltPixelOnlyMuons" ), + calibHF_b_HADonly = cms.vdouble( 1.27541, 0.85361, 0.86333, 0.89091, 0.94348, 0.94348, 0.9437, 1.0034, 1.0444, 1.0444 ), + pf_nsigma_HCAL = cms.double( 1.0 ), + muon_ECAL = cms.vdouble( 0.5, 0.5 ), + goodPixelTrackDeadHcal_maxPt = cms.double( 50.0 ), + blocks = cms.InputTag( "hltPixelOnlyParticleFlowBlock" ), + goodTrackDeadHcal_ptErrRel = cms.double( 0.2 ), + useEGammaFilters = cms.bool( False ), + pf_nsigma_HFHAD = cms.double( 1.0 ), + useEGammaElectrons = cms.bool( False ), + useHO = cms.bool( False ), + nsigma_TRACK = cms.double( 1.0 ), + PFEGammaFiltersParameters = cms.PSet( + electron_protectionsForJetMET = cms.PSet( + maxE = cms.double( 50.0 ), + maxTrackPOverEele = cms.double( 1.0 ), + maxEcalEOverP_2 = cms.double( 0.2 ), + maxHcalEOverEcalE = cms.double( 0.1 ), + maxEcalEOverP_1 = cms.double( 0.5 ), + maxHcalEOverP = cms.double( 1.0 ), + maxEcalEOverPRes = cms.double( 0.2 ), + maxHcalE = cms.double( 10.0 ), + maxEeleOverPout = cms.double( 0.2 ), + maxNtracks = cms.double( 3.0 ), + maxEleHcalEOverEcalE = cms.double( 0.1 ), + maxDPhiIN = cms.double( 0.1 ), + maxEeleOverPoutRes = cms.double( 0.5 ) + ), + electron_maxElePtForOnlyMVAPresel = cms.double( 50.0 ), + photon_SigmaiEtaiEta_endcap = cms.double( 0.034 ), + electron_iso_combIso_endcap = cms.double( 10.0 ), + photon_protectionsForBadHcal = cms.PSet( + solidConeTrkIsoSlope = cms.double( 0.3 ), + enableProtections = cms.bool( False ), + solidConeTrkIsoOffset = cms.double( 10.0 ) + ), + electron_missinghits = cms.uint32( 1 ), + photon_MinEt = cms.double( 10.0 ), + electron_iso_pt = cms.double( 10.0 ), + electron_ecalDrivenHademPreselCut = cms.double( 0.15 ), + electron_iso_mva_endcap = cms.double( -0.1075 ), + electron_iso_combIso_barrel = cms.double( 10.0 ), + photon_protectionsForJetMET = cms.PSet( + sumPtTrackIsoSlope = cms.double( 0.001 ), + sumPtTrackIso = cms.double( 4.0 ) + ), + electron_protectionsForBadHcal = cms.PSet( + dEta = cms.vdouble( 0.0064, 0.01264 ), + dPhi = cms.vdouble( 0.0547, 0.0394 ), + enableProtections = cms.bool( False ), + eInvPInv = cms.vdouble( 0.184, 0.0721 ), + full5x5_sigmaIetaIeta = cms.vdouble( 0.0106, 0.0387 ) + ), + electron_noniso_mvaCut = cms.double( -0.1 ), + electron_iso_mva_barrel = cms.double( -0.1875 ), + photon_SigmaiEtaiEta_barrel = cms.double( 0.0125 ), + photon_combIso = cms.double( 10.0 ), + photon_HoE = cms.double( 0.05 ) + ), + goodPixelTrackDeadHcal_minEta = cms.double( 2.3 ), + useVerticesForNeutral = cms.bool( True ), + goodTrackDeadHcal_chi2n = cms.double( 5.0 ), + goodTrackDeadHcal_dxy = cms.double( 0.5 ), + goodPixelTrackDeadHcal_dz = cms.double( 0.05 ), + PFEGammaCandidates = cms.InputTag( "particleFlowEGamma" ), + pf_nsigma_HFEM = cms.double( 1.0 ), + usePFDecays = cms.bool( False ), + calibHF_b_EMHAD = cms.vdouble( 1.27541, 0.85361, 0.86333, 0.89091, 0.94348, 0.94348, 0.9437, 1.0034, 1.0444, 1.0444 ), + rejectTracks_Step45 = cms.bool( False ), + goodPixelTrackDeadHcal_maxLost4Hit = cms.int32( 1 ), + calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), + goodTrackDeadHcal_layers = cms.uint32( 4 ), + goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), + usePFNuclearInteractions = cms.bool( False ), + GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), + goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), + calibHF_a_EMHAD = cms.vdouble( 1.42215, 1.00496, 0.68961, 0.81656, 0.98504, 0.98504, 1.00802, 1.0593, 1.4576, 1.4576 ), + muon_HCAL = cms.vdouble( 3.0, 3.0 ), + pt_Error = cms.double( 1.0 ), + debug = cms.untracked.bool( False ), + useProtectionsForJetMET = cms.bool( True ), + PFHFCleaningParameters = cms.PSet( + minSignificance = cms.double( 2.5 ), + maxSignificance = cms.double( 2.5 ), + minDeltaMet = cms.double( 0.4 ), + maxDeltaPhiPt = cms.double( 7.0 ), + minHFCleaningPt = cms.double( 5.0 ), + minSignificanceReduction = cms.double( 1.4 ) + ) +) +process.hltAK4PixelOnlyPFJets = cms.EDProducer( "FastjetJetProducer", + Active_Area_Repeats = cms.int32( 5 ), + useMassDropTagger = cms.bool( False ), + doAreaFastjet = cms.bool( False ), + muMin = cms.double( -1.0 ), + Ghost_EtaMax = cms.double( 6.0 ), + maxBadHcalCells = cms.uint32( 9999999 ), + maxRecoveredHcalCells = cms.uint32( 9999999 ), + applyWeight = cms.bool( False ), + doAreaDiskApprox = cms.bool( True ), + subtractorName = cms.string( "" ), + dRMax = cms.double( -1.0 ), + useExplicitGhosts = cms.bool( False ), + puWidth = cms.double( 0.0 ), + maxRecoveredEcalCells = cms.uint32( 9999999 ), + R0 = cms.double( -1.0 ), + jetType = cms.string( "PFJet" ), + muCut = cms.double( -1.0 ), + subjetPtMin = cms.double( -1.0 ), + csRParam = cms.double( -1.0 ), + MinVtxNdof = cms.int32( 0 ), + minSeed = cms.uint32( 0 ), + voronoiRfact = cms.double( -9.0 ), + doRhoFastjet = cms.bool( False ), + jetAlgorithm = cms.string( "AntiKt" ), + writeCompound = cms.bool( False ), + muMax = cms.double( -1.0 ), + nSigmaPU = cms.double( 1.0 ), + GhostArea = cms.double( 0.01 ), + Rho_EtaMax = cms.double( 4.4 ), + restrictInputs = cms.bool( False ), + nExclude = cms.uint32( 0 ), + yMin = cms.double( -1.0 ), + srcWeights = cms.InputTag( "" ), + maxBadEcalCells = cms.uint32( 9999999 ), + jetCollInstanceName = cms.string( "" ), + useFiltering = cms.bool( False ), + maxInputs = cms.uint32( 1 ), + rFiltFactor = cms.double( -1.0 ), + useDeterministicSeed = cms.bool( True ), + doPVCorrection = cms.bool( False ), + rFilt = cms.double( -1.0 ), + yMax = cms.double( -1.0 ), + zcut = cms.double( -1.0 ), + useTrimming = cms.bool( False ), + puCenters = cms.vdouble( ), + MaxVtxZ = cms.double( 15.0 ), + rParam = cms.double( 0.4 ), + csRho_EtaMax = cms.double( -1.0 ), + UseOnlyVertexTracks = cms.bool( False ), + dRMin = cms.double( -1.0 ), + gridSpacing = cms.double( -1.0 ), + minimumTowersFraction = cms.double( 0.0 ), + doFastJetNonUniform = cms.bool( False ), + usePruning = cms.bool( False ), + maxDepth = cms.int32( -1 ), + yCut = cms.double( -1.0 ), + useSoftDrop = cms.bool( False ), + DzTrVtxMax = cms.double( 0.0 ), + UseOnlyOnePV = cms.bool( False ), + maxProblematicHcalCells = cms.uint32( 9999999 ), + correctShape = cms.bool( False ), + rcut_factor = cms.double( -1.0 ), + src = cms.InputTag( "hltPixelOnlyParticleFlow" ), + gridMaxRapidity = cms.double( -1.0 ), + sumRecHits = cms.bool( False ), + jetPtMin = cms.double( 0.0 ), + puPtMin = cms.double( 10.0 ), + useDynamicFiltering = cms.bool( False ), + verbosity = cms.int32( 0 ), + inputEtMin = cms.double( 0.0 ), + useConstituentSubtraction = cms.bool( False ), + beta = cms.double( -1.0 ), + trimPtFracMin = cms.double( -1.0 ), + radiusPU = cms.double( 0.4 ), + nFilt = cms.int32( -1 ), + useKtPruning = cms.bool( False ), + DxyTrVtxMax = cms.double( 0.0 ), + maxProblematicEcalCells = cms.uint32( 9999999 ), + srcPVs = cms.InputTag( "hltPixelVertices" ), + useCMSBoostedTauSeedingAlgorithm = cms.bool( False ), + doPUOffsetCorr = cms.bool( False ), + writeJetsWithConst = cms.bool( False ), + inputEMin = cms.double( 0.0 ) +) +process.hltAK4PixelOnlyPFJetsLooseID = cms.EDProducer( "HLTPFJetIDProducer", + CEF = cms.double( 0.99 ), + NHF = cms.double( 0.99 ), + minPt = cms.double( 20.0 ), + CHF = cms.double( 0.0 ), + jetsInput = cms.InputTag( "hltAK4PixelOnlyPFJets" ), + NEF = cms.double( 0.99 ), + NTOT = cms.int32( 1 ), + NCH = cms.int32( 0 ), + maxEta = cms.double( 1.0E99 ), + maxCF = cms.double( 99.0 ) +) +process.hltAK4PixelOnlyPFJetsTightID = cms.EDProducer( "HLTPFJetIDProducer", + CEF = cms.double( 0.99 ), + NHF = cms.double( 0.9 ), + minPt = cms.double( 20.0 ), + CHF = cms.double( 0.0 ), + jetsInput = cms.InputTag( "hltAK4PixelOnlyPFJets" ), + NEF = cms.double( 0.99 ), + NTOT = cms.int32( 1 ), + NCH = cms.int32( 0 ), + maxEta = cms.double( 1.0E99 ), + maxCF = cms.double( 99.0 ) +) +process.hltFixedGridRhoFastjetPixelOnlyAll = cms.EDProducer( "FixedGridRhoProducerFastjet", + gridSpacing = cms.double( 0.55 ), + pfCandidatesTag = cms.InputTag( "hltPixelOnlyParticleFlow" ), + maxRapidity = cms.double( 5.0 ) +) +process.hltAK4PixelOnlyPFFastJetCorrector = cms.EDProducer( "L1FastjetCorrectorProducer", + srcRho = cms.InputTag( "hltFixedGridRhoFastjetPixelOnlyAll" ), + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L1FastJet" ) +) +process.hltAK4PixelOnlyPFRelativeCorrector = cms.EDProducer( "LXXXCorrectorProducer", + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L2Relative" ) +) +process.hltAK4PixelOnlyPFAbsoluteCorrector = cms.EDProducer( "LXXXCorrectorProducer", + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L3Absolute" ) +) +process.hltAK4PixelOnlyPFResidualCorrector = cms.EDProducer( "LXXXCorrectorProducer", + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L2L3Residual" ) +) +process.hltAK4PixelOnlyPFCorrector = cms.EDProducer( "ChainedJetCorrectorProducer", + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFFastJetCorrector','hltAK4PixelOnlyPFRelativeCorrector','hltAK4PixelOnlyPFAbsoluteCorrector','hltAK4PixelOnlyPFResidualCorrector' ) +) +process.hltAK4PixelOnlyPFJetsCorrected = cms.EDProducer( "CorrectedPFJetProducer", + src = cms.InputTag( "hltAK4PixelOnlyPFJets" ), + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFCorrector' ) +) +process.hltAK4PixelOnlyPFJetsLooseIDCorrected = cms.EDProducer( "CorrectedPFJetProducer", + src = cms.InputTag( "hltAK4PixelOnlyPFJetsLooseID" ), + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFCorrector' ) +) +process.hltAK4PixelOnlyPFJetsTightIDCorrected = cms.EDProducer( "CorrectedPFJetProducer", + src = cms.InputTag( "hltAK4PixelOnlyPFJetsTightID" ), + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFCorrector' ) +) +process.hltPixelOnlyPFMETProducer = cms.EDProducer( "PFMETProducer", + src = cms.InputTag( "hltPixelOnlyParticleFlow" ), + parameters = cms.PSet( ), + applyWeight = cms.bool( False ), + calculateSignificance = cms.bool( False ), + alias = cms.string( "hltPFMet" ), + srcWeights = cms.InputTag( "" ), + globalThreshold = cms.double( 0.0 ) +) +process.hltL2MuonCandidatesScoutingNoVtx = cms.EDProducer( "L2MuonCandidateProducer", + InputObjects = cms.InputTag( "hltL2Muons" ) +) +process.hltIterL3OISeedsFromL2MuonsScoutingNoVtx = cms.EDProducer( "TSGForOIFromL2", + hitsToTry = cms.int32( 1 ), + tsosDiff2 = cms.double( 0.02 ), + adjustErrorsDynamicallyForHitless = cms.bool( True ), + SF6 = cms.double( 2.0 ), + SF4 = cms.double( 7.0 ), + SF5 = cms.double( 10.0 ), + propagatorName = cms.string( "PropagatorWithMaterialParabolicMf" ), + SF3 = cms.double( 5.0 ), + SF1 = cms.double( 3.0 ), + minEtaForTEC = cms.double( 0.7 ), + fixedErrorRescaleFactorForHits = cms.double( 1.0 ), + maxSeeds = cms.uint32( 20 ), + maxEtaForTOB = cms.double( 1.8 ), + pT3 = cms.double( 70.0 ), + pT2 = cms.double( 30.0 ), + pT1 = cms.double( 13.0 ), + layersToTry = cms.int32( 2 ), + fixedErrorRescaleFactorForHitless = cms.double( 2.0 ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + SF2 = cms.double( 4.0 ), + numL2ValidHitsCutAllEta = cms.uint32( 20 ), + adjustErrorsDynamicallyForHits = cms.bool( False ), + eta4 = cms.double( 1.2 ), + src = cms.InputTag( "hltL2Muons" ), + eta6 = cms.double( 1.4 ), + eta7 = cms.double( 2.1 ), + eta1 = cms.double( 0.2 ), + eta2 = cms.double( 0.3 ), + eta3 = cms.double( 1.0 ), + UseHitLessSeeds = cms.bool( True ), + estimator = cms.string( "hltESPChi2MeasurementEstimator100" ), + numL2ValidHitsCutAllEndcap = cms.uint32( 30 ), + debug = cms.untracked.bool( False ), + maxHitSeeds = cms.uint32( 1 ), + eta5 = cms.double( 1.6 ), + tsosDiff1 = cms.double( 0.2 ), + maxHitlessSeeds = cms.uint32( 5 ) +) +process.hltIterL3OITrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIterL3OISeedsFromL2MuonsScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 5000 ), + SimpleMagneticField = cms.string( "" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterial" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialOpposite" ) + ), + TrajectoryCleaner = cms.string( "muonSeededTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( True ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 500000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTPSetMuonCkfTrajectoryBuilder" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "CkfTrajectoryBuilder" ) +) +process.hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIterL3OITrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + Fitter = cms.string( "hltESPKFFittingSmootherWithOutliersRejectionAndRK" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "hltESPMeasurementTracker" ), + AlgorithmName = cms.string( "iter10" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( False ), + Propagator = cms.string( "PropagatorWithMaterial" ) +) +process.hltIterL3OIMuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "Notused" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 0 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 0.3, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 4, 3, 2 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 0.35, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 3.40282346639E38, 3.40282346639E38, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 10.0, 1.0, 0.4 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 5, 5 ) + ), + ignoreVertices = cms.bool( True ) +) +process.hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIterL3OIMuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIterL3OIMuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +process.hltL3MuonsIterL3OIScoutingNoVtx = cms.EDProducer( "L3MuonProducer", + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + UseMuonNavigation = cms.untracked.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPSmartPropagatorAny', + 'SteppingHelixPropagatorAny', + 'hltESPSmartPropagator', + 'hltESPSteppingHelixPropagatorOpposite' ) + ), + L3TrajBuilderParameters = cms.PSet( + PtCut = cms.double( 1.0 ), + TrackerPropagator = cms.string( "SteppingHelixPropagatorAny" ), + GlobalMuonTrackMatcher = cms.PSet( + Chi2Cut_3 = cms.double( 200.0 ), + DeltaDCut_2 = cms.double( 10.0 ), + Eta_threshold = cms.double( 1.2 ), + Quality_2 = cms.double( 15.0 ), + DeltaDCut_1 = cms.double( 40.0 ), + Quality_3 = cms.double( 7.0 ), + DeltaDCut_3 = cms.double( 15.0 ), + Quality_1 = cms.double( 20.0 ), + Pt_threshold1 = cms.double( 0.0 ), + DeltaRCut_2 = cms.double( 0.2 ), + DeltaRCut_1 = cms.double( 0.1 ), + Pt_threshold2 = cms.double( 9.99999999E8 ), + Chi2Cut_1 = cms.double( 50.0 ), + Chi2Cut_2 = cms.double( 50.0 ), + DeltaRCut_3 = cms.double( 1.0 ), + LocChi2Cut = cms.double( 0.001 ), + Propagator = cms.string( "hltESPSmartPropagator" ), + MinPt = cms.double( 1.0 ), + MinP = cms.double( 2.5 ) + ), + ScaleTECxFactor = cms.double( -1.0 ), + tkTrajUseVertex = cms.bool( False ), + MuonTrackingRegionBuilder = cms.PSet( + Rescale_Dz = cms.double( 4.0 ), + Pt_fixed = cms.bool( False ), + Eta_fixed = cms.bool( True ), + Eta_min = cms.double( 0.1 ), + DeltaZ = cms.double( 24.2 ), + maxRegions = cms.int32( 2 ), + EtaR_UpperLimit_Par1 = cms.double( 0.25 ), + UseVertex = cms.bool( False ), + Z_fixed = cms.bool( False ), + PhiR_UpperLimit_Par1 = cms.double( 0.6 ), + PhiR_UpperLimit_Par2 = cms.double( 0.2 ), + Rescale_phi = cms.double( 3.0 ), + DeltaEta = cms.double( 0.2 ), + precise = cms.bool( True ), + OnDemand = cms.int32( -1 ), + EtaR_UpperLimit_Par2 = cms.double( 0.15 ), + MeasurementTrackerName = cms.InputTag( "hltESPMeasurementTracker" ), + vertexCollection = cms.InputTag( "pixelVertices" ), + Pt_min = cms.double( 3.0 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + Phi_fixed = cms.bool( True ), + DeltaR = cms.double( 0.025 ), + input = cms.InputTag( "hltL2Muons" ), + DeltaPhi = cms.double( 0.15 ), + Phi_min = cms.double( 0.1 ), + Rescale_eta = cms.double( 3.0 ) + ), + TrackTransformer = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + RefitDirection = cms.string( "insideOut" ), + RefitRPCHits = cms.bool( True ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + tkTrajBeamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + RefitRPCHits = cms.bool( True ), + tkTrajVertex = cms.InputTag( "Notused" ), + GlbRefitterParameters = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + DTRecSegmentLabel = cms.InputTag( "hltDt4DSegments" ), + RefitFlag = cms.bool( True ), + SkipStation = cms.int32( -1 ), + Chi2CutRPC = cms.double( 1.0 ), + PropDirForCosmics = cms.bool( False ), + CSCRecSegmentLabel = cms.InputTag( "hltCscSegments" ), + HitThreshold = cms.int32( 1 ), + DYTthrs = cms.vint32( 30, 15 ), + TrackerSkipSystem = cms.int32( -1 ), + RefitDirection = cms.string( "insideOut" ), + Chi2CutCSC = cms.double( 150.0 ), + Chi2CutDT = cms.double( 10.0 ), + RefitRPCHits = cms.bool( True ), + TrackerSkipSection = cms.int32( -1 ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonHitsOption = cms.int32( 1 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ) + ), + PCut = cms.double( 2.5 ), + tkTrajMaxDXYBeamSpot = cms.double( 9999.0 ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + tkTrajMaxChi2 = cms.double( 9999.0 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + ScaleTECyFactor = cms.double( -1.0 ), + tkTrajLabel = cms.InputTag( "hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx" ) + ), + TrackLoaderParameters = cms.PSet( + MuonSeededTracksInstance = cms.untracked.string( "L2Seeded" ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + DoSmoothing = cms.bool( True ), + SmoothTkTrack = cms.untracked.bool( False ), + VertexConstraint = cms.bool( False ), + MuonUpdatorAtVertexParameters = cms.PSet( + MaxChi2 = cms.double( 1000000.0 ), + BeamSpotPositionErrors = cms.vdouble( 0.1, 0.1, 5.3 ), + Propagator = cms.string( "hltESPSteppingHelixPropagatorOpposite" ) + ), + PutTkTrackIntoEvent = cms.untracked.bool( False ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + MuonCollectionLabel = cms.InputTag( "hltL2Muons" ) +) +process.hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx = cms.EDProducer( "L3TrackLinksCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx' ) +) +process.hltIterL3OIL3MuonsScoutingNoVtx = cms.EDProducer( "L3TrackCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx' ) +) +process.hltIterL3OIL3MuonCandidatesScoutingNoVtx = cms.EDProducer( "L3MuonCandidateProducer", + InputLinksObjects = cms.InputTag( "hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx" ), + InputObjects = cms.InputTag( "hltIterL3OIL3MuonsScoutingNoVtx" ), + MuonPtOption = cms.string( "Tracker" ) +) +process.hltL2SelectorForL3IOScoutingNoVtx = cms.EDProducer( "HLTMuonL2SelectorForL3IO", + MaxNormalizedChi2 = cms.double( 20.0 ), + MinNmuonHits = cms.int32( 1 ), + MinNhits = cms.int32( 1 ), + applyL3Filters = cms.bool( False ), + MaxPtDifference = cms.double( 0.3 ), + l3OISrc = cms.InputTag( "hltIterL3OIL3MuonCandidatesScoutingNoVtx" ), + InputLinks = cms.InputTag( "hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx" ), + l2Src = cms.InputTag( "hltL2Muons" ) +) +process.hltIterL3MuonPixelTracksFilterScoutingNoVtx = cms.EDProducer( "PixelTrackFilterByKinematicsProducer", + nSigmaTipMaxTolerance = cms.double( 0.0 ), + chi2 = cms.double( 1000.0 ), + nSigmaInvPtTolerance = cms.double( 0.0 ), + ptMin = cms.double( 0.1 ), + tipMax = cms.double( 1.0 ) +) +process.hltIterL3MuonPixelTracksFitterScoutingNoVtx = cms.EDProducer( "PixelFitterByHelixProjectionsProducer", + scaleErrorsForBPix1 = cms.bool( False ), + scaleFactor = cms.double( 0.65 ) +) +process.hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx = cms.EDProducer( "MuonTrackingRegionEDProducer", + precise = cms.bool( True ), + Eta_fixed = cms.bool( True ), + Eta_min = cms.double( 0.0 ), + Z_fixed = cms.bool( True ), + MeasurementTrackerName = cms.InputTag( "" ), + maxRegions = cms.int32( 5 ), + Pt_min = cms.double( 2.0 ), + Rescale_Dz = cms.double( 4.0 ), + PhiR_UpperLimit_Par1 = cms.double( 0.6 ), + PhiR_UpperLimit_Par2 = cms.double( 0.2 ), + vertexCollection = cms.InputTag( "notUsed" ), + Phi_fixed = cms.bool( True ), + input = cms.InputTag( "hltL2SelectorForL3IOScoutingNoVtx" ), + DeltaR = cms.double( 0.025 ), + OnDemand = cms.int32( -1 ), + DeltaZ = cms.double( 24.2 ), + Rescale_phi = cms.double( 3.0 ), + Rescale_eta = cms.double( 3.0 ), + DeltaEta = cms.double( 0.2 ), + Phi_min = cms.double( 0.0 ), + DeltaPhi = cms.double( 0.15 ), + UseVertex = cms.bool( False ), + EtaR_UpperLimit_Par1 = cms.double( 0.25 ), + EtaR_UpperLimit_Par2 = cms.double( 0.15 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + Pt_fixed = cms.bool( True ) +) +process.hltIterL3MuonPixelLayerQuadrupletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3+BPix4', + 'BPix1+BPix2+BPix3+FPix1_pos', + 'BPix1+BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos+FPix2_pos', + 'BPix1+BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos+FPix3_pos', + 'BPix1+FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +process.hltIterL3MuonPixelTracksHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIterL3MuonPixelLayerQuadrupletsScoutingNoVtx" ) +) +process.hltIterL3MuonPixelTracksHitQuadrupletsScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltIterL3MuonPixelTracksHitDoubletsScoutingNoVtx" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 50.0 ), + value1 = cms.double( 200.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.005 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.2 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +process.hltIterL3MuonPixelTracksScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", + Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), + passLabel = cms.string( "" ), + Fitter = cms.InputTag( "hltIterL3MuonPixelTracksFitterScoutingNoVtx" ), + Filter = cms.InputTag( "hltIterL3MuonPixelTracksFilterScoutingNoVtx" ), + SeedingHitSets = cms.InputTag( "hltIterL3MuonPixelTracksHitQuadrupletsScoutingNoVtx" ) +) +process.hltIterL3MuonPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexProducer", + WtAverage = cms.bool( True ), + Method2 = cms.bool( True ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + Verbosity = cms.int32( 0 ), + UseError = cms.bool( True ), + TrackCollection = cms.InputTag( "hltIterL3MuonPixelTracksScoutingNoVtx" ), + PtMin = cms.double( 1.0 ), + NTrkMin = cms.int32( 2 ), + ZOffset = cms.double( 5.0 ), + Finder = cms.string( "DivisiveVertexFinder" ), + ZSeparation = cms.double( 0.05 ) +) +process.hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexCollectionTrimmer", + src = cms.InputTag( "hltIterL3MuonPixelVerticesScoutingNoVtx" ), + fractionSumPt2 = cms.double( 0.3 ), + minSumPt2 = cms.double( 0.0 ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + maxVtx = cms.uint32( 100 ) +) +process.hltIter0IterL3MuonPixelSeedsFromPixelTracksScoutingNoVtx = cms.EDProducer( "SeedGeneratorFromProtoTracksEDProducer", + includeFourthHit = cms.bool( False ), + useEventsWithNoVertex = cms.bool( True ), + originHalfLength = cms.double( 0.3 ), + useProtoTrackKinematics = cms.bool( False ), + usePV = cms.bool( False ), + SeedCreatorPSet = cms.PSet( refToPSet_ = cms.string( "HLTSeedFromProtoTracks" ) ), + InputVertexCollection = cms.InputTag( "hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx" ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + InputCollection = cms.InputTag( "hltIterL3MuonPixelTracksScoutingNoVtx" ), + originRadius = cms.double( 0.1 ) +) +process.hltIter0IterL3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter0IterL3MuonPixelSeedsFromPixelTracksScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( True ), + RedundantSeedCleaner = cms.string( "none" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( True ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter0IterL3MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "GroupedCkfTrajectoryBuilder" ) +) +process.hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter0IterL3MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter0" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +process.hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 3, 4 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 0.3, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 3, 4 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 0.35, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 3.40282346639E38, 3.40282346639E38, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 4 ) + ), + ignoreVertices = cms.bool( False ) +) +process.hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +process.hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", + trackClassifier = cms.InputTag( '','QualityMasks' ), + minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), + maxChi2 = cms.double( 16.0 ), + trajectories = cms.InputTag( "hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "" ), + stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), + overrideTrkQuals = cms.InputTag( "" ), + pixelClusters = cms.InputTag( "hltSiPixelClusters" ), + TrackQuality = cms.string( "highPurity" ) +) +process.hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx" ), + OnDemand = cms.bool( False ), + src = cms.InputTag( "hltSiStripClusters" ) +) +process.hltIter2IterL3MuonPixelLayerTripletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3', + 'BPix2+BPix3+BPix4', + 'BPix1+BPix3+BPix4', + 'BPix1+BPix2+BPix4', + 'BPix2+BPix3+FPix1_pos', + 'BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos', + 'BPix1+BPix2+FPix1_neg', + 'BPix2+FPix1_pos+FPix2_pos', + 'BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos', + 'BPix1+FPix1_neg+FPix2_neg', + 'FPix1_pos+FPix2_pos+FPix3_pos', + 'FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +process.hltIter2IterL3MuonPixelClusterCheckScoutingNoVtx = cms.EDProducer( "ClusterCheckerEDProducer", + cut = cms.string( "" ), + silentClusterCheck = cms.untracked.bool( False ), + MaxNumberOfCosmicClusters = cms.uint32( 50000 ), + PixelClusterCollectionLabel = cms.InputTag( "hltSiPixelClusters" ), + doClusterCheck = cms.bool( False ), + MaxNumberOfPixelClusters = cms.uint32( 10000 ), + ClusterCollectionLabel = cms.InputTag( "hltSiStripClusters" ) +) +process.hltIter2IterL3MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1 ), + clusterCheck = cms.InputTag( "hltIter2IterL3MuonPixelClusterCheckScoutingNoVtx" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIter2IterL3MuonPixelLayerTripletsScoutingNoVtx" ) +) +process.hltIter2IterL3MuonPixelHitTripletsScoutingNoVtx = cms.EDProducer( "CAHitTripletEDProducer", + CAThetaCut = cms.double( 0.015 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + maxChi2 = cms.PSet( + value2 = cms.double( 6.0 ), + value1 = cms.double( 100.0 ), + pt1 = cms.double( 0.8 ), + enabled = cms.bool( True ), + pt2 = cms.double( 8.0 ) + ), + doublets = cms.InputTag( "hltIter2IterL3MuonPixelHitDoubletsScoutingNoVtx" ), + CAHardPtCut = cms.double( 0.3 ), + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.1 ), + useBendingCorrection = cms.bool( True ), + extraHitRPhitolerance = cms.double( 0.032 ) +) +process.hltIter2IterL3MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer", + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + forceKinematicWithRegionDirection = cms.bool( False ), + magneticField = cms.string( "ParabolicMf" ), + SeedMomentumForBOFF = cms.double( 5.0 ), + OriginTransverseErrorMultiplier = cms.double( 1.0 ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MinOneOverPtError = cms.double( 1.0 ), + seedingHitSets = cms.InputTag( "hltIter2IterL3MuonPixelHitTripletsScoutingNoVtx" ), + propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) +) +process.hltIter2IterL3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter2IterL3MuonPixelSeedsScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter2IterL3MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "" ) +) +process.hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter2IterL3MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter2" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +process.hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 0 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 3.40282346639E38, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 3.40282346639E38, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 3 ) + ), + ignoreVertices = cms.bool( False ) +) +process.hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +process.hltIter2IterL3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +process.hltL3MuonsIterL3IOScoutingNoVtx = cms.EDProducer( "L3MuonProducer", + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + UseMuonNavigation = cms.untracked.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPSmartPropagatorAny', + 'SteppingHelixPropagatorAny', + 'hltESPSmartPropagator', + 'hltESPSteppingHelixPropagatorOpposite' ) + ), + L3TrajBuilderParameters = cms.PSet( + PtCut = cms.double( 1.0 ), + TrackerPropagator = cms.string( "SteppingHelixPropagatorAny" ), + GlobalMuonTrackMatcher = cms.PSet( + Chi2Cut_3 = cms.double( 200.0 ), + DeltaDCut_2 = cms.double( 10.0 ), + Eta_threshold = cms.double( 1.2 ), + Quality_2 = cms.double( 15.0 ), + DeltaDCut_1 = cms.double( 40.0 ), + Quality_3 = cms.double( 7.0 ), + DeltaDCut_3 = cms.double( 15.0 ), + Quality_1 = cms.double( 20.0 ), + Pt_threshold1 = cms.double( 0.0 ), + DeltaRCut_2 = cms.double( 0.2 ), + DeltaRCut_1 = cms.double( 0.1 ), + Pt_threshold2 = cms.double( 9.99999999E8 ), + Chi2Cut_1 = cms.double( 50.0 ), + Chi2Cut_2 = cms.double( 50.0 ), + DeltaRCut_3 = cms.double( 1.0 ), + LocChi2Cut = cms.double( 0.001 ), + Propagator = cms.string( "hltESPSmartPropagator" ), + MinPt = cms.double( 1.0 ), + MinP = cms.double( 2.5 ) + ), + ScaleTECxFactor = cms.double( -1.0 ), + tkTrajUseVertex = cms.bool( False ), + MuonTrackingRegionBuilder = cms.PSet( + Rescale_Dz = cms.double( 4.0 ), + Pt_fixed = cms.bool( True ), + Eta_fixed = cms.bool( True ), + Eta_min = cms.double( 0.1 ), + DeltaZ = cms.double( 24.2 ), + maxRegions = cms.int32( 2 ), + EtaR_UpperLimit_Par1 = cms.double( 0.25 ), + UseVertex = cms.bool( False ), + Z_fixed = cms.bool( True ), + PhiR_UpperLimit_Par1 = cms.double( 0.6 ), + PhiR_UpperLimit_Par2 = cms.double( 0.2 ), + Rescale_phi = cms.double( 3.0 ), + DeltaEta = cms.double( 0.04 ), + precise = cms.bool( True ), + OnDemand = cms.int32( -1 ), + EtaR_UpperLimit_Par2 = cms.double( 0.15 ), + MeasurementTrackerName = cms.InputTag( "hltESPMeasurementTracker" ), + vertexCollection = cms.InputTag( "pixelVertices" ), + Pt_min = cms.double( 3.0 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + Phi_fixed = cms.bool( True ), + DeltaR = cms.double( 0.025 ), + input = cms.InputTag( "hltL2SelectorForL3IOScoutingNoVtx" ), + DeltaPhi = cms.double( 0.15 ), + Phi_min = cms.double( 0.1 ), + Rescale_eta = cms.double( 3.0 ) + ), + TrackTransformer = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + RefitDirection = cms.string( "insideOut" ), + RefitRPCHits = cms.bool( True ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + tkTrajBeamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + RefitRPCHits = cms.bool( True ), + tkTrajVertex = cms.InputTag( "hltIterL3MuonPixelVerticesScoutingNoVtx" ), + GlbRefitterParameters = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + DTRecSegmentLabel = cms.InputTag( "hltDt4DSegments" ), + RefitFlag = cms.bool( True ), + SkipStation = cms.int32( -1 ), + Chi2CutRPC = cms.double( 1.0 ), + PropDirForCosmics = cms.bool( False ), + CSCRecSegmentLabel = cms.InputTag( "hltCscSegments" ), + HitThreshold = cms.int32( 1 ), + DYTthrs = cms.vint32( 30, 15 ), + TrackerSkipSystem = cms.int32( -1 ), + RefitDirection = cms.string( "insideOut" ), + Chi2CutCSC = cms.double( 150.0 ), + Chi2CutDT = cms.double( 10.0 ), + RefitRPCHits = cms.bool( True ), + TrackerSkipSection = cms.int32( -1 ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonHitsOption = cms.int32( 1 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ) + ), + PCut = cms.double( 2.5 ), + tkTrajMaxDXYBeamSpot = cms.double( 9999.0 ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + matchToSeeds = cms.bool( True ), + tkTrajMaxChi2 = cms.double( 9999.0 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + ScaleTECyFactor = cms.double( -1.0 ), + tkTrajLabel = cms.InputTag( "hltIter2IterL3MuonMergedScoutingNoVtx" ) + ), + TrackLoaderParameters = cms.PSet( + MuonSeededTracksInstance = cms.untracked.string( "L2Seeded" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + DoSmoothing = cms.bool( False ), + SmoothTkTrack = cms.untracked.bool( False ), + VertexConstraint = cms.bool( False ), + MuonUpdatorAtVertexParameters = cms.PSet( + MaxChi2 = cms.double( 1000000.0 ), + BeamSpotPositionErrors = cms.vdouble( 0.1, 0.1, 5.3 ), + Propagator = cms.string( "hltESPSteppingHelixPropagatorOpposite" ) + ), + PutTkTrackIntoEvent = cms.untracked.bool( False ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + MuonCollectionLabel = cms.InputTag( "hltL2Muons" ) +) +process.hltIterL3MuonsFromL2LinksCombinationScoutingNoVtx = cms.EDProducer( "L3TrackLinksCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx','hltL3MuonsIterL3IOScoutingNoVtx' ) +) +process.hltIterL3MuonsFromL2ScoutingNoVtx = cms.EDProducer( "L3TrackCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx','hltL3MuonsIterL3IOScoutingNoVtx' ) +) +process.hltIterL3MuonL1MuonNoL2SelectorScoutingNoVtx = cms.EDProducer( "HLTL1MuonNoL2Selector", + SeedMapTag = cms.InputTag( "hltL2Muons" ), + L1MinPt = cms.double( -1.0 ), + CentralBxOnly = cms.bool( True ), + InputObjects = cms.InputTag( 'hltGtStage2Digis','Muon' ), + L2CandTag = cms.InputTag( "hltL2MuonCandidatesScoutingNoVtx" ), + L1MaxEta = cms.double( 5.0 ), + L1MinQuality = cms.uint32( 7 ) +) +process.hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", + RegionPSet = cms.PSet( + vertexCollection = cms.InputTag( "notUsed" ), + zErrorVetex = cms.double( 0.2 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + zErrorBeamSpot = cms.double( 24.2 ), + maxNVertices = cms.int32( 1 ), + maxNRegions = cms.int32( 2 ), + nSigmaZVertex = cms.double( 3.0 ), + nSigmaZBeamSpot = cms.double( 4.0 ), + ptMin = cms.double( 10.0 ), + mode = cms.string( "BeamSpotSigma" ), + input = cms.InputTag( "hltIterL3MuonL1MuonNoL2SelectorScoutingNoVtx" ), + searchOpt = cms.bool( False ), + whereToUseMeasurementTracker = cms.string( "Never" ), + originRadius = cms.double( 0.2 ), + measurementTrackerName = cms.InputTag( "" ), + precise = cms.bool( True ), + deltaEta = cms.double( 0.35 ), + deltaPhi = cms.double( 0.2 ) + ) +) +process.hltIterL3FromL1MuonPixelLayerQuadrupletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3+BPix4', + 'BPix1+BPix2+BPix3+FPix1_pos', + 'BPix1+BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos+FPix2_pos', + 'BPix1+BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos+FPix3_pos', + 'BPix1+FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +process.hltIterL3FromL1MuonPixelTracksHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIterL3FromL1MuonPixelLayerQuadrupletsScoutingNoVtx" ) +) +process.hltIterL3FromL1MuonPixelTracksHitQuadrupletsScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltIterL3FromL1MuonPixelTracksHitDoubletsScoutingNoVtx" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 50.0 ), + value1 = cms.double( 200.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.005 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.2 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +process.hltIterL3FromL1MuonPixelTracksScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", + Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), + passLabel = cms.string( "" ), + Fitter = cms.InputTag( "hltIterL3MuonPixelTracksFitterScoutingNoVtx" ), + Filter = cms.InputTag( "hltIterL3MuonPixelTracksFilterScoutingNoVtx" ), + SeedingHitSets = cms.InputTag( "hltIterL3FromL1MuonPixelTracksHitQuadrupletsScoutingNoVtx" ) +) +process.hltIterL3FromL1MuonPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexProducer", + WtAverage = cms.bool( True ), + Method2 = cms.bool( True ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + Verbosity = cms.int32( 0 ), + UseError = cms.bool( True ), + TrackCollection = cms.InputTag( "hltIterL3MuonPixelTracksScoutingNoVtx" ), + PtMin = cms.double( 1.0 ), + NTrkMin = cms.int32( 2 ), + ZOffset = cms.double( 5.0 ), + Finder = cms.string( "DivisiveVertexFinder" ), + ZSeparation = cms.double( 0.05 ) +) +process.hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexCollectionTrimmer", + src = cms.InputTag( "hltIterL3FromL1MuonPixelVerticesScoutingNoVtx" ), + fractionSumPt2 = cms.double( 0.3 ), + minSumPt2 = cms.double( 0.0 ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + maxVtx = cms.uint32( 100 ) +) +process.hltIter0IterL3FromL1MuonPixelSeedsFromPixelTracksScoutingNoVtx = cms.EDProducer( "SeedGeneratorFromProtoTracksEDProducer", + includeFourthHit = cms.bool( False ), + useEventsWithNoVertex = cms.bool( True ), + originHalfLength = cms.double( 0.3 ), + useProtoTrackKinematics = cms.bool( False ), + usePV = cms.bool( False ), + SeedCreatorPSet = cms.PSet( refToPSet_ = cms.string( "HLTSeedFromProtoTracks" ) ), + InputVertexCollection = cms.InputTag( "hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx" ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + InputCollection = cms.InputTag( "hltIterL3FromL1MuonPixelTracksScoutingNoVtx" ), + originRadius = cms.double( 0.1 ) +) +process.hltIter0IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter0IterL3FromL1MuonPixelSeedsFromPixelTracksScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( True ), + RedundantSeedCleaner = cms.string( "none" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( True ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter0IterL3FromL1MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "GroupedCkfTrajectoryBuilder" ) +) +process.hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter0IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter0" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +process.hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 3, 4 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 0.3, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 3, 4 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 0.35, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 3.40282346639E38, 3.40282346639E38, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 4 ) + ), + ignoreVertices = cms.bool( False ) +) +process.hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +process.hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", + trackClassifier = cms.InputTag( '','QualityMasks' ), + minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), + maxChi2 = cms.double( 16.0 ), + trajectories = cms.InputTag( "hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "" ), + stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), + overrideTrkQuals = cms.InputTag( "" ), + pixelClusters = cms.InputTag( "hltSiPixelClusters" ), + TrackQuality = cms.string( "highPurity" ) +) +process.hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx" ), + OnDemand = cms.bool( False ), + src = cms.InputTag( "hltSiStripClusters" ) +) +process.hltIter2IterL3FromL1MuonPixelLayerTripletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3', + 'BPix2+BPix3+BPix4', + 'BPix1+BPix3+BPix4', + 'BPix1+BPix2+BPix4', + 'BPix2+BPix3+FPix1_pos', + 'BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos', + 'BPix1+BPix2+FPix1_neg', + 'BPix2+FPix1_pos+FPix2_pos', + 'BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos', + 'BPix1+FPix1_neg+FPix2_neg', + 'FPix1_pos+FPix2_pos+FPix3_pos', + 'FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +process.hltIter2IterL3FromL1MuonPixelClusterCheckScoutingNoVtx = cms.EDProducer( "ClusterCheckerEDProducer", + cut = cms.string( "" ), + silentClusterCheck = cms.untracked.bool( False ), + MaxNumberOfCosmicClusters = cms.uint32( 50000 ), + PixelClusterCollectionLabel = cms.InputTag( "hltSiPixelClusters" ), + doClusterCheck = cms.bool( False ), + MaxNumberOfPixelClusters = cms.uint32( 10000 ), + ClusterCollectionLabel = cms.InputTag( "hltSiStripClusters" ) +) +process.hltIter2IterL3FromL1MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1 ), + clusterCheck = cms.InputTag( "hltIter2IterL3FromL1MuonPixelClusterCheckScoutingNoVtx" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIter2IterL3FromL1MuonPixelLayerTripletsScoutingNoVtx" ) +) +process.hltIter2IterL3FromL1MuonPixelHitTripletsScoutingNoVtx = cms.EDProducer( "CAHitTripletEDProducer", + CAThetaCut = cms.double( 0.015 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + maxChi2 = cms.PSet( + value2 = cms.double( 6.0 ), + value1 = cms.double( 100.0 ), + pt1 = cms.double( 0.8 ), + enabled = cms.bool( True ), + pt2 = cms.double( 8.0 ) + ), + doublets = cms.InputTag( "hltIter2IterL3FromL1MuonPixelHitDoubletsScoutingNoVtx" ), + CAHardPtCut = cms.double( 0.3 ), + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.1 ), + useBendingCorrection = cms.bool( True ), + extraHitRPhitolerance = cms.double( 0.032 ) +) +process.hltIter2IterL3FromL1MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer", + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + forceKinematicWithRegionDirection = cms.bool( False ), + magneticField = cms.string( "ParabolicMf" ), + SeedMomentumForBOFF = cms.double( 5.0 ), + OriginTransverseErrorMultiplier = cms.double( 1.0 ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MinOneOverPtError = cms.double( 1.0 ), + seedingHitSets = cms.InputTag( "hltIter2IterL3FromL1MuonPixelHitTripletsScoutingNoVtx" ), + propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) +) +process.hltIter2IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter2IterL3FromL1MuonPixelSeedsScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter2IterL3FromL1MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "" ) +) +process.hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter2IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter2" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +process.hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 0 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 3.40282346639E38, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 3.40282346639E38, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 3 ) + ), + ignoreVertices = cms.bool( False ) +) +process.hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +process.hltIter2IterL3FromL1MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +process.hltIterL3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonMergedScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonMergedScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +process.hltIterL3MuonAndMuonFromL1MergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIterL3MuonMergedScoutingNoVtx','hltIter2IterL3FromL1MuonMergedScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIterL3MuonMergedScoutingNoVtx','hltIter2IterL3FromL1MuonMergedScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +process.hltL3MuonsIterL3LinksScoutingNoVtx = cms.EDProducer( "MuonLinksProducerForHLT", + pMin = cms.double( 2.5 ), + InclusiveTrackerTrackCollection = cms.InputTag( "hltIter2IterL3FromL1MuonMergedScoutingNoVtx" ), + shareHitFraction = cms.double( 0.19 ), + LinkCollection = cms.InputTag( "hltIterL3MuonsFromL2LinksCombinationScoutingNoVtx" ), + ptMin = cms.double( 2.5 ) +) +process.hltIterL3MuonsScoutingNoVtx = cms.EDProducer( "MuonIdProducer", + TrackExtractorPSet = cms.PSet( + Diff_z = cms.double( 0.2 ), + inputTrackCollection = cms.InputTag( "hltIter2IterL3FromL1MuonMergedScoutingNoVtx" ), + Chi2Ndof_Max = cms.double( 1.0E64 ), + BeamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), + DR_Veto = cms.double( 0.01 ), + Pt_Min = cms.double( -1.0 ), + DR_Max = cms.double( 1.0 ), + NHits_Min = cms.uint32( 0 ), + Chi2Prob_Min = cms.double( -1.0 ), + Diff_r = cms.double( 0.1 ), + BeamlineOption = cms.string( "BeamSpotFromEvent" ), + ComponentName = cms.string( "TrackExtractor" ) + ), + maxAbsEta = cms.double( 3.0 ), + fillGlobalTrackRefits = cms.bool( False ), + arbitrationCleanerOptions = cms.PSet( + OverlapDTheta = cms.double( 0.02 ), + Overlap = cms.bool( True ), + Clustering = cms.bool( True ), + ME1a = cms.bool( True ), + ClusterDTheta = cms.double( 0.02 ), + ClusterDPhi = cms.double( 0.6 ), + OverlapDPhi = cms.double( 0.0786 ) + ), + globalTrackQualityInputTag = cms.InputTag( "glbTrackQual" ), + fillShowerDigis = cms.bool( False ), + addExtraSoftMuons = cms.bool( False ), + debugWithTruthMatching = cms.bool( False ), + CaloExtractorPSet = cms.PSet( + DR_Veto_H = cms.double( 0.1 ), + CenterConeOnCalIntersection = cms.bool( False ), + NoiseTow_EE = cms.double( 0.15 ), + Noise_EB = cms.double( 0.025 ), + Noise_HE = cms.double( 0.2 ), + DR_Veto_E = cms.double( 0.07 ), + NoiseTow_EB = cms.double( 0.04 ), + Noise_EE = cms.double( 0.1 ), + UseRecHitsFlag = cms.bool( False ), + DR_Max = cms.double( 1.0 ), + DepositLabel = cms.untracked.string( "Cal" ), + Noise_HO = cms.double( 0.2 ), + DR_Veto_HO = cms.double( 0.1 ), + Threshold_H = cms.double( 0.5 ), + PrintTimeReport = cms.untracked.bool( False ), + Threshold_E = cms.double( 0.2 ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "CaloExtractorByAssociator" ), + Threshold_HO = cms.double( 0.5 ), + DepositInstanceLabels = cms.vstring( 'ecal', + 'hcal', + 'ho' ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 1.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( "Notused" ), + CaloTowerCollectionLabel = cms.InputTag( "Notused" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "Notused" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 1.0 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( "Notused" ), + dRHcal = cms.double( 1.0 ), + dRHcalPreselection = cms.double( 1.0 ), + HORecHitCollectionLabel = cms.InputTag( "Notused" ) + ), + Noise_HB = cms.double( 0.2 ) + ), + runArbitrationCleaner = cms.bool( False ), + fillEnergy = cms.bool( False ), + TrackerKinkFinderParameters = cms.PSet( + usePosition = cms.bool( False ), + diagonalOnly = cms.bool( False ) + ), + TimingFillerParameters = cms.PSet( + DTTimingParameters = cms.PSet( + HitError = cms.double( 6.0 ), + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) + ), + debug = cms.bool( False ), + DoWireCorr = cms.bool( False ), + RequireBothProjections = cms.bool( False ), + DTTimeOffset = cms.double( 2.7 ), + PruneCut = cms.double( 10000.0 ), + DTsegments = cms.InputTag( "hltDt4DSegments" ), + UseSegmentT0 = cms.bool( False ), + HitsMin = cms.int32( 5 ), + DropTheta = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ) + ), + UseCSC = cms.bool( True ), + CSCTimingParameters = cms.PSet( + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) + ), + debug = cms.bool( False ), + CSCWireTimeOffset = cms.double( 0.0 ), + CSCStripError = cms.double( 7.0 ), + CSCTimeOffset = cms.double( 0.0 ), + CSCWireError = cms.double( 8.6 ), + PruneCut = cms.double( 100.0 ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + UseStripTime = cms.bool( True ), + CSCStripTimeOffset = cms.double( 0.0 ), + UseWireTime = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ) + ), + ErrorDT = cms.double( 6.0 ), + EcalEnergyCut = cms.double( 0.4 ), + UseECAL = cms.bool( True ), + ErrorEB = cms.double( 2.085 ), + UseDT = cms.bool( True ), + ErrorEE = cms.double( 6.95 ), + ErrorCSC = cms.double( 7.4 ) + ), + inputCollectionTypes = cms.vstring( 'inner tracks', + 'links' ), + arbitrateTrackerMuons = cms.bool( True ), + minCaloCompatibility = cms.double( 0.6 ), + ecalDepositName = cms.string( "ecal" ), + minP = cms.double( 0.0 ), + fillIsolation = cms.bool( False ), + jetDepositName = cms.string( "jets" ), + hoDepositName = cms.string( "ho" ), + writeIsoDeposits = cms.bool( False ), + maxAbsPullX = cms.double( 4.0 ), + maxAbsPullY = cms.double( 9999.0 ), + minPt = cms.double( 8.0 ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( True ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 9999.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( "Notused" ), + CaloTowerCollectionLabel = cms.InputTag( "Notused" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "Notused" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.05 ), + useCalo = cms.bool( False ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( "Notused" ), + dRHcal = cms.double( 9999.0 ), + dRHcalPreselection = cms.double( 0.2 ), + HORecHitCollectionLabel = cms.InputTag( "Notused" ) + ), + storeCrossedHcalRecHits = cms.bool( False ), + JetExtractorPSet = cms.PSet( + JetCollectionLabel = cms.InputTag( "Notused" ), + DR_Veto = cms.double( 0.1 ), + DR_Max = cms.double( 1.0 ), + ExcludeMuonVeto = cms.bool( True ), + PrintTimeReport = cms.untracked.bool( False ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "JetExtractor" ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 0.5 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( "Notused" ), + CaloTowerCollectionLabel = cms.InputTag( "Notused" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "Notused" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.5 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( "Notused" ), + dRHcal = cms.double( 0.5 ), + dRHcalPreselection = cms.double( 0.5 ), + HORecHitCollectionLabel = cms.InputTag( "Notused" ) + ), + Threshold = cms.double( 5.0 ) + ), + fillGlobalTrackQuality = cms.bool( False ), + minPCaloMuon = cms.double( 1.0E9 ), + maxAbsDy = cms.double( 9999.0 ), + fillCaloCompatibility = cms.bool( False ), + fillMatching = cms.bool( True ), + MuonCaloCompatibility = cms.PSet( + delta_eta = cms.double( 0.02 ), + delta_phi = cms.double( 0.02 ), + allSiPMHO = cms.bool( False ), + MuonTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_muons_lowPt_3_1_norm.root" ), + PionTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_pions_lowPt_3_1_norm.root" ) + ), + fillTrackerKink = cms.bool( False ), + ShowerDigiFillerParameters = cms.PSet( + cscDigiCollectionLabel = cms.InputTag( 'muonCSCDigis','MuonCSCStripDigi' ), + dtDigiCollectionLabel = cms.InputTag( "muonDTDigis" ), + digiMaxDistanceX = cms.double( 25.0 ) + ), + hcalDepositName = cms.string( "hcal" ), + sigmaThresholdToFillCandidateP4WithGlobalFit = cms.double( 2.0 ), + inputCollectionLabels = cms.VInputTag( 'hltIter2IterL3FromL1MuonMergedScoutingNoVtx','hltL3MuonsIterL3LinksScoutingNoVtx' ), + trackDepositName = cms.string( "tracker" ), + maxAbsDx = cms.double( 3.0 ), + ptThresholdToFillCandidateP4WithGlobalFit = cms.double( 200.0 ), + minNumberOfMatches = cms.int32( 1 ) +) +process.hltIterL3MuonCandidatesScoutingNoVtx = cms.EDProducer( "L3MuonCandidateProducerFromMuons", + InputObjects = cms.InputTag( "hltIterL3MuonsScoutingNoVtx" ) +) +process.hltDisplacedmumuVtxNoMatchingProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", + Src = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), + PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtx" ), + MinPt = cms.double( 0.0 ), + ChargeOpt = cms.int32( 0 ), + MaxEta = cms.double( 2.5 ), + MaxInvMass = cms.double( 99999.0 ), + MinPtPair = cms.double( 0.0 ), + matchToPrevious = cms.bool( False ), + MinInvMass = cms.double( 0.0 ) +) +process.hltRecHitInRegionForMuonsESScoutingNoVtx = cms.EDProducer( "MuonHLTRechitInRegionsProducer", + l1LowerThr = cms.double( 0.0 ), + doIsolated = cms.bool( True ), + useUncalib = cms.bool( False ), + regionEtaMargin = cms.double( 0.4 ), + ecalhitLabels = cms.VInputTag( 'hltEcalPreshowerRecHit:EcalRecHitsES' ), + regionPhiMargin = cms.double( 0.4 ), + l1TagNonIsolated = cms.InputTag( "NotUsed" ), + l1UpperThr = cms.double( 999.0 ), + l1LowerThrIgnoreIsolation = cms.double( 100.0 ), + productLabels = cms.vstring( 'EcalRegionalRecHitsES' ), + l1TagIsolated = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) +) +process.hltParticleFlowRecHitECALForMuonsMFScoutingNoVtx = cms.EDProducer( "PFRecHitProducer", + producers = cms.VPSet( + cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsMFnoVtx','EcalRegionalRecHitsEB' ), + srFlags = cms.InputTag( "" ), + name = cms.string( "PFEBRecHitCreator" ), + qualityTests = cms.VPSet( + cms.PSet( name = cms.string( "PFRecHitQTestDBThreshold" ), + applySelectionsToAllCrystals = cms.bool( True ) + ), + cms.PSet( topologicalCleaning = cms.bool( True ), + skipTTRecoveredHits = cms.bool( True ), + cleaningThreshold = cms.double( 2.0 ), + name = cms.string( "PFRecHitQTestECAL" ), + timingCleaning = cms.bool( True ) + ) + ) + ), + cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsMFnoVtx','EcalRegionalRecHitsEE' ), + srFlags = cms.InputTag( "" ), + name = cms.string( "PFEERecHitCreator" ), + qualityTests = cms.VPSet( + cms.PSet( name = cms.string( "PFRecHitQTestDBThreshold" ), + applySelectionsToAllCrystals = cms.bool( True ) + ), + cms.PSet( topologicalCleaning = cms.bool( True ), + skipTTRecoveredHits = cms.bool( True ), + cleaningThreshold = cms.double( 2.0 ), + name = cms.string( "PFRecHitQTestECAL" ), + timingCleaning = cms.bool( True ) + ) + ) + ) + ), + navigator = cms.PSet( + barrel = cms.PSet( ), + endcap = cms.PSet( ), + name = cms.string( "PFRecHitECALNavigator" ) + ) +) +process.hltParticleFlowRecHitPSForMuonsScoutingNoVtx = cms.EDProducer( "PFRecHitProducer", + producers = cms.VPSet( + cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsESScoutingNoVtx','EcalRegionalRecHitsES' ), + name = cms.string( "PFPSRecHitCreator" ), + qualityTests = cms.VPSet( + cms.PSet( threshold = cms.double( 7.0E-6 ), + name = cms.string( "PFRecHitQTestThreshold" ) + ) + ) + ) + ), + navigator = cms.PSet( name = cms.string( "PFRecHitPreshowerNavigator" ) ) +) +process.hltParticleFlowClusterECALUncorrectedForMuonsMFScoutingNoVtx = cms.EDProducer( "PFClusterProducer", + pfClusterBuilder = cms.PSet( + minFracTot = cms.double( 1.0E-20 ), + stoppingTolerance = cms.double( 1.0E-8 ), + positionCalc = cms.PSet( + minAllowedNormalization = cms.double( 1.0E-9 ), + posCalcNCrystals = cms.int32( 9 ), + algoName = cms.string( "Basic2DGenericPFlowPositionCalc" ), + logWeightDenominator = cms.double( 0.08 ), + minFractionInCalc = cms.double( 1.0E-9 ), + timeResolutionCalcBarrel = cms.PSet( + corrTermLowE = cms.double( 0.0510871 ), + threshLowE = cms.double( 0.5 ), + noiseTerm = cms.double( 1.10889 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 1.31883 ), + threshHighE = cms.double( 5.0 ), + constantTerm = cms.double( 0.428192 ) + ), + timeResolutionCalcEndcap = cms.PSet( + corrTermLowE = cms.double( 0.0 ), + threshLowE = cms.double( 1.0 ), + noiseTerm = cms.double( 5.72489999999 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 6.92683000001 ), + threshHighE = cms.double( 10.0 ), + constantTerm = cms.double( 0.0 ) + ) + ), + maxIterations = cms.uint32( 50 ), + positionCalcForConvergence = cms.PSet( + minAllowedNormalization = cms.double( 0.0 ), + T0_ES = cms.double( 1.2 ), + algoName = cms.string( "ECAL2DPositionCalcWithDepthCorr" ), + T0_EE = cms.double( 3.1 ), + T0_EB = cms.double( 7.4 ), + X0 = cms.double( 0.89 ), + minFractionInCalc = cms.double( 0.0 ), + W0 = cms.double( 4.2 ) + ), + allCellsPositionCalc = cms.PSet( + minAllowedNormalization = cms.double( 1.0E-9 ), + posCalcNCrystals = cms.int32( -1 ), + algoName = cms.string( "Basic2DGenericPFlowPositionCalc" ), + logWeightDenominator = cms.double( 0.08 ), + minFractionInCalc = cms.double( 1.0E-9 ), + timeResolutionCalcBarrel = cms.PSet( + corrTermLowE = cms.double( 0.0510871 ), + threshLowE = cms.double( 0.5 ), + noiseTerm = cms.double( 1.10889 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 1.31883 ), + threshHighE = cms.double( 5.0 ), + constantTerm = cms.double( 0.428192 ) + ), + timeResolutionCalcEndcap = cms.PSet( + corrTermLowE = cms.double( 0.0 ), + threshLowE = cms.double( 1.0 ), + noiseTerm = cms.double( 5.72489999999 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 6.92683000001 ), + threshHighE = cms.double( 10.0 ), + constantTerm = cms.double( 0.0 ) + ) + ), + algoName = cms.string( "Basic2DGenericPFlowClusterizer" ), + recHitEnergyNorms = cms.VPSet( + cms.PSet( recHitEnergyNorm = cms.double( 0.08 ), + detector = cms.string( "ECAL_BARREL" ) + ), + cms.PSet( recHitEnergyNorm = cms.double( 0.3 ), + detector = cms.string( "ECAL_ENDCAP" ) + ) + ), + showerSigma = cms.double( 1.5 ), + minFractionToKeep = cms.double( 1.0E-7 ), + excludeOtherSeeds = cms.bool( True ) + ), + positionReCalc = cms.PSet( + minAllowedNormalization = cms.double( 0.0 ), + T0_ES = cms.double( 1.2 ), + algoName = cms.string( "ECAL2DPositionCalcWithDepthCorr" ), + T0_EE = cms.double( 3.1 ), + T0_EB = cms.double( 7.4 ), + X0 = cms.double( 0.89 ), + minFractionInCalc = cms.double( 0.0 ), + W0 = cms.double( 4.2 ) + ), + initialClusteringStep = cms.PSet( + thresholdsByDetector = cms.VPSet( + cms.PSet( gatheringThreshold = cms.double( 0.08 ), + gatheringThresholdPt = cms.double( 0.0 ), + detector = cms.string( "ECAL_BARREL" ) + ), + cms.PSet( gatheringThreshold = cms.double( 0.3 ), + gatheringThresholdPt = cms.double( 0.0 ), + detector = cms.string( "ECAL_ENDCAP" ) + ) + ), + algoName = cms.string( "Basic2DGenericTopoClusterizer" ), + useCornerCells = cms.bool( True ) + ), + seedCleaners = cms.VPSet( + ), + energyCorrector = cms.PSet( ), + recHitCleaners = cms.VPSet( + ), + seedFinder = cms.PSet( + thresholdsByDetector = cms.VPSet( + cms.PSet( seedingThresholdPt = cms.double( 0.15 ), + seedingThreshold = cms.double( 0.6 ), + detector = cms.string( "ECAL_ENDCAP" ) + ), + cms.PSet( seedingThresholdPt = cms.double( 0.0 ), + seedingThreshold = cms.double( 0.23 ), + detector = cms.string( "ECAL_BARREL" ) + ) + ), + algoName = cms.string( "LocalMaximumSeedFinder" ), + nNeighbours = cms.int32( 8 ) + ), + recHitsSource = cms.InputTag( "hltParticleFlowRecHitECALForMuonsMFScoutingNoVtx" ) +) +process.hltParticleFlowClusterPSForMuonsScoutingNoVtx = cms.EDProducer( "PFClusterProducer", + pfClusterBuilder = cms.PSet( + minFracTot = cms.double( 1.0E-20 ), + stoppingTolerance = cms.double( 1.0E-8 ), + positionCalc = cms.PSet( + minAllowedNormalization = cms.double( 1.0E-9 ), + posCalcNCrystals = cms.int32( -1 ), + algoName = cms.string( "Basic2DGenericPFlowPositionCalc" ), + logWeightDenominator = cms.double( 6.0E-5 ), + minFractionInCalc = cms.double( 1.0E-9 ) + ), + maxIterations = cms.uint32( 50 ), + algoName = cms.string( "Basic2DGenericPFlowClusterizer" ), + recHitEnergyNorms = cms.VPSet( + cms.PSet( recHitEnergyNorm = cms.double( 6.0E-5 ), + detector = cms.string( "PS1" ) + ), + cms.PSet( recHitEnergyNorm = cms.double( 6.0E-5 ), + detector = cms.string( "PS2" ) + ) + ), + showerSigma = cms.double( 0.3 ), + minFractionToKeep = cms.double( 1.0E-7 ), + excludeOtherSeeds = cms.bool( True ) + ), + positionReCalc = cms.PSet( ), + initialClusteringStep = cms.PSet( + thresholdsByDetector = cms.VPSet( + cms.PSet( gatheringThreshold = cms.double( 6.0E-5 ), + gatheringThresholdPt = cms.double( 0.0 ), + detector = cms.string( "PS1" ) + ), + cms.PSet( gatheringThreshold = cms.double( 6.0E-5 ), + gatheringThresholdPt = cms.double( 0.0 ), + detector = cms.string( "PS2" ) + ) + ), + algoName = cms.string( "Basic2DGenericTopoClusterizer" ), + useCornerCells = cms.bool( False ) + ), + seedCleaners = cms.VPSet( + ), + energyCorrector = cms.PSet( ), + recHitCleaners = cms.VPSet( + ), + seedFinder = cms.PSet( + thresholdsByDetector = cms.VPSet( + cms.PSet( seedingThresholdPt = cms.double( 0.0 ), + seedingThreshold = cms.double( 1.2E-4 ), + detector = cms.string( "PS1" ) + ), + cms.PSet( seedingThresholdPt = cms.double( 0.0 ), + seedingThreshold = cms.double( 1.2E-4 ), + detector = cms.string( "PS2" ) + ) + ), + algoName = cms.string( "LocalMaximumSeedFinder" ), + nNeighbours = cms.int32( 4 ) + ), + recHitsSource = cms.InputTag( "hltParticleFlowRecHitPSForMuonsScoutingNoVtx" ) +) +process.hltParticleFlowClusterECALForMuonsMFScoutingNoVtx = cms.EDProducer( "CorrectedECALPFClusterProducer", + inputPS = cms.InputTag( "hltParticleFlowClusterPSForMuonsScoutingNoVtx" ), + minimumPSEnergy = cms.double( 0.0 ), + energyCorrector = cms.PSet( applyCrackCorrections = cms.bool( False ) ), + inputECAL = cms.InputTag( "hltParticleFlowClusterECALUncorrectedForMuonsMFScoutingNoVtx" ) +) +process.hltMuonEcalMFPFClusterIsoForMuonsScoutingNoVtx = cms.EDProducer( "MuonHLTEcalPFClusterIsolationProducer", + effectiveAreas = cms.vdouble( 0.35, 0.193 ), + doRhoCorrection = cms.bool( True ), + etaStripBarrel = cms.double( 0.0 ), + energyEndcap = cms.double( 0.0 ), + rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetECALMFForMuons" ), + pfClusterProducer = cms.InputTag( "hltParticleFlowClusterECALForMuonsMFScoutingNoVtx" ), + etaStripEndcap = cms.double( 0.0 ), + drVetoBarrel = cms.double( 0.05 ), + drMax = cms.double( 0.3 ), + energyBarrel = cms.double( 0.0 ), + absEtaLowEdges = cms.vdouble( 0.0, 1.479 ), + drVetoEndcap = cms.double( 0.05 ), + rhoMax = cms.double( 9.9999999E7 ), + rhoScale = cms.double( 1.0 ), + recoCandidateProducer = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) +) +process.hltMuonHcalPFClusterIsoForMuonsScoutingNoVtx = cms.EDProducer( "MuonHLTHcalPFClusterIsolationProducer", + effectiveAreas = cms.vdouble( 0.11, 0.163 ), + useHF = cms.bool( False ), + useEt = cms.bool( True ), + etaStripBarrel = cms.double( 0.0 ), + pfClusterProducerHFHAD = cms.InputTag( "" ), + energyEndcap = cms.double( 0.0 ), + rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAllCalo" ), + etaStripEndcap = cms.double( 0.0 ), + drVetoBarrel = cms.double( 0.1 ), + pfClusterProducerHCAL = cms.InputTag( "hltParticleFlowClusterHCAL" ), + drMax = cms.double( 0.3 ), + doRhoCorrection = cms.bool( True ), + energyBarrel = cms.double( 0.0 ), + absEtaLowEdges = cms.vdouble( 0.0, 1.479 ), + drVetoEndcap = cms.double( 0.1 ), + rhoMax = cms.double( 9.9999999E7 ), + pfClusterProducerHFEM = cms.InputTag( "" ), + rhoScale = cms.double( 1.0 ), + recoCandidateProducer = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) +) +process.hltL3MuonVertexScoutingNoVtx = cms.EDProducer( "VertexFromTrackProducer", + verbose = cms.untracked.bool( False ), + useTriggerFilterElectrons = cms.bool( False ), + beamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), + isRecoCandidate = cms.bool( True ), + trackLabel = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), + useTriggerFilterMuons = cms.bool( False ), + useBeamSpot = cms.bool( True ), + vertexLabel = cms.InputTag( "notUsed" ), + triggerFilterElectronsSrc = cms.InputTag( "notUsed" ), + triggerFilterMuonsSrc = cms.InputTag( "notUsed" ), + useVertex = cms.bool( False ) +) +process.hltPixelTracksTrackingRegionsL3MuonScoutingNoVtx = cms.EDProducer( "GlobalTrackingRegionWithVerticesEDProducer", + RegionPSet = cms.PSet( + useFixedError = cms.bool( True ), + nSigmaZ = cms.double( 4.0 ), + VertexCollection = cms.InputTag( "hltL3MuonVertexScoutingNoVtx" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + useFoundVertices = cms.bool( True ), + fixedError = cms.double( 0.5 ), + sigmaZVertex = cms.double( 4.0 ), + useFakeVertices = cms.bool( True ), + ptMin = cms.double( 0.9 ), + originRadius = cms.double( 0.2 ), + precise = cms.bool( True ), + useMultipleScattering = cms.bool( False ) + ) +) +process.hltPixelTracksHitDoubletsL3MuonScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsL3MuonScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltPixelLayerQuadruplets" ) +) +process.hltPixelTracksHitQuadrupletsL3MuonScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltPixelTracksHitDoubletsL3MuonScoutingNoVtx" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 50.0 ), + value1 = cms.double( 200.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.002 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.2 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +process.hltPixelTracksL3MuonScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", + Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), + passLabel = cms.string( "" ), + Fitter = cms.InputTag( "hltPixelTracksL3MuonFitter" ), + Filter = cms.InputTag( "hltPixelTracksL3MuonFilter" ), + SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsL3MuonScoutingNoVtx" ) +) +process.hltPixelVerticesL3MuonScoutingNoVtx = cms.EDProducer( "PixelVertexProducer", + WtAverage = cms.bool( True ), + Method2 = cms.bool( True ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparer" ) ), + Verbosity = cms.int32( 0 ), + UseError = cms.bool( True ), + TrackCollection = cms.InputTag( "hltPixelTracksL3MuonScoutingNoVtx" ), + PtMin = cms.double( 1.0 ), + NTrkMin = cms.int32( 2 ), + ZOffset = cms.double( 5.0 ), + Finder = cms.string( "DivisiveVertexFinder" ), + ZSeparation = cms.double( 0.05 ) +) +process.hltPixelTracksTrackingRegionsForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", + RegionPSet = cms.PSet( + vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), + zErrorVetex = cms.double( 0.2 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + zErrorBeamSpot = cms.double( 24.2 ), + maxNVertices = cms.int32( 1 ), + maxNRegions = cms.int32( 10 ), + nSigmaZVertex = cms.double( 3.0 ), + nSigmaZBeamSpot = cms.double( 4.0 ), + ptMin = cms.double( 0.9 ), + mode = cms.string( "VerticesFixed" ), + input = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), + searchOpt = cms.bool( False ), + whereToUseMeasurementTracker = cms.string( "Never" ), + originRadius = cms.double( 0.1 ), + measurementTrackerName = cms.InputTag( "" ), + precise = cms.bool( True ), + deltaEta = cms.double( 0.3 ), + deltaPhi = cms.double( 0.3 ) + ) +) +process.hltPixelTracksHitDoubletsForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsForSeedsL3MuonScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltPixelLayerQuadruplets" ) +) +process.hltPixelTracksHitQuadrupletsForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltPixelTracksHitDoubletsForSeedsL3MuonScoutingNoVtx" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 50.0 ), + value1 = cms.double( 200.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.002 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.2 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +process.hltPixelTracksForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", + Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), + passLabel = cms.string( "" ), + Fitter = cms.InputTag( "hltPixelTracksForSeedsL3MuonFitter" ), + Filter = cms.InputTag( "hltPixelTracksForSeedsL3MuonFilter" ), + SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsForSeedsL3MuonScoutingNoVtx" ) +) +process.hltIter0L3MuonPixelSeedsFromPixelTracksScoutingNoVtx = cms.EDProducer( "SeedGeneratorFromProtoTracksEDProducer", + includeFourthHit = cms.bool( False ), + useEventsWithNoVertex = cms.bool( True ), + originHalfLength = cms.double( 0.2 ), + useProtoTrackKinematics = cms.bool( False ), + usePV = cms.bool( False ), + SeedCreatorPSet = cms.PSet( refToPSet_ = cms.string( "HLTSeedFromProtoTracks" ) ), + InputVertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + InputCollection = cms.InputTag( "hltPixelTracksForSeedsL3MuonScoutingNoVtx" ), + originRadius = cms.double( 0.1 ) +) +process.hltIter0L3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter0L3MuonPixelSeedsFromPixelTracksScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter0GroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "" ) +) +process.hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter0L3MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIterX" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +process.hltIter0L3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 3, 4 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 15.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 0.003 ), + dr_par2 = cms.vdouble( 0.3, 0.3, 0.3 ), + dr_par1 = cms.vdouble( 0.4, 0.4, 0.4 ), + dr_exp = cms.vint32( 4, 4, 4 ), + d0err_par = cms.vdouble( 0.001, 0.001, 0.001 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 3, 4 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 0.4, 0.4, 0.4 ), + dz_par2 = cms.vdouble( 0.35, 0.35, 0.35 ), + dz_exp = cms.vint32( 4, 4, 4 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 16.0 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 4 ) + ), + ignoreVertices = cms.bool( False ) +) +process.hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter0L3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter0L3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +process.hltIter1L3MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", + trackClassifier = cms.InputTag( '','QualityMasks' ), + minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), + maxChi2 = cms.double( 9.0 ), + trajectories = cms.InputTag( "hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "" ), + stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), + overrideTrkQuals = cms.InputTag( "" ), + pixelClusters = cms.InputTag( "hltSiPixelClusters" ), + TrackQuality = cms.string( "highPurity" ) +) +process.hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), + OnDemand = cms.bool( False ), + src = cms.InputTag( "hltSiStripClusters" ) +) +process.hltIter1L3MuonPixelLayerQuadrupletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3+BPix4', + 'BPix1+BPix2+BPix3+FPix1_pos', + 'BPix1+BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos+FPix2_pos', + 'BPix1+BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos+FPix3_pos', + 'BPix1+FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +process.hltIter1L3MuonPixelTrackingRegionsScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", + RegionPSet = cms.PSet( + vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), + zErrorVetex = cms.double( 0.1 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + zErrorBeamSpot = cms.double( 24.2 ), + maxNVertices = cms.int32( 1 ), + maxNRegions = cms.int32( 10 ), + nSigmaZVertex = cms.double( 3.0 ), + nSigmaZBeamSpot = cms.double( 4.0 ), + ptMin = cms.double( 0.3 ), + mode = cms.string( "VerticesFixed" ), + input = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), + searchOpt = cms.bool( False ), + whereToUseMeasurementTracker = cms.string( "ForSiStrips" ), + originRadius = cms.double( 0.05 ), + measurementTrackerName = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + precise = cms.bool( True ), + deltaEta = cms.double( 0.3 ), + deltaPhi = cms.double( 0.3 ) + ) +) +process.hltIter1L3MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIter1L3MuonPixelTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "hltIter1L3MuonPixelClusterCheck" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIter1L3MuonPixelLayerQuadrupletsScoutingNoVtx" ) +) +process.hltIter1L3MuonPixelHitQuadrupletsScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltIter1L3MuonPixelHitDoubletsScoutingNoVtx" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 150.0 ), + value1 = cms.double( 2000.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.004 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "none" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.3 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +process.hltIter1L3MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer", + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + forceKinematicWithRegionDirection = cms.bool( False ), + magneticField = cms.string( "ParabolicMf" ), + SeedMomentumForBOFF = cms.double( 5.0 ), + OriginTransverseErrorMultiplier = cms.double( 1.0 ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MinOneOverPtError = cms.double( 1.0 ), + seedingHitSets = cms.InputTag( "hltIter1L3MuonPixelHitQuadrupletsScoutingNoVtx" ), + propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) +) +process.hltIter1L3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter1L3MuonPixelSeedsScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter1GroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "" ) +) +process.hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter1L3MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIterX" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +process.hltIter1L3MuonTrackCutClassifierPromptScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 2 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 15.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 0.003 ), + dr_par2 = cms.vdouble( 3.40282346639E38, 1.0, 0.85 ), + dr_par1 = cms.vdouble( 3.40282346639E38, 1.0, 0.9 ), + dr_exp = cms.vint32( 3, 3, 3 ), + d0err_par = cms.vdouble( 0.001, 0.001, 0.001 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 3.40282346639E38, 1.0, 0.9 ), + dz_par2 = cms.vdouble( 3.40282346639E38, 1.0, 0.8 ), + dz_exp = cms.vint32( 3, 3, 3 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 3.40282346639E38, 1.0, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 16.0 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 3.40282346639E38, 1.0, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 3 ) + ), + ignoreVertices = cms.bool( False ) +) +process.hltIter1L3MuonTrackCutClassifierDetachedScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 1 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 15.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 0.003 ), + dr_par2 = cms.vdouble( 1.0, 1.0, 1.0 ), + dr_par1 = cms.vdouble( 1.0, 1.0, 1.0 ), + dr_exp = cms.vint32( 4, 4, 4 ), + d0err_par = cms.vdouble( 0.001, 0.001, 0.001 ) + ), + maxLostLayers = cms.vint32( 99, 3, 3 ), + min3DLayers = cms.vint32( 1, 2, 3 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 1.0, 1.0, 1.0 ), + dz_par2 = cms.vdouble( 1.0, 1.0, 1.0 ), + dz_exp = cms.vint32( 4, 4, 4 ) + ), + minNVtxTrk = cms.int32( 2 ), + maxDz = cms.vdouble( 3.40282346639E38, 1.0, 3.40282346639E38 ), + minNdof = cms.vdouble( -1.0, -1.0, -1.0 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 16.0 ), + maxChi2n = cms.vdouble( 1.0, 0.7, 0.4 ), + maxDr = cms.vdouble( 3.40282346639E38, 1.0, 3.40282346639E38 ), + minLayers = cms.vint32( 5, 5, 5 ) + ), + ignoreVertices = cms.bool( False ) +) +process.hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx = cms.EDProducer( "ClassifierMerger", + inputClassifiers = cms.vstring( 'hltIter1L3MuonTrackCutClassifierPromptScoutingNoVtx', + 'hltIter1L3MuonTrackCutClassifierDetachedScoutingNoVtx' ) ) -process.hltIter1L3MuonTrackSelectionHighPurityNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", +process.hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", minQuality = cms.string( "highPurity" ), copyExtras = cms.untracked.bool( True ), copyTrajectories = cms.untracked.bool( False ), - originalSource = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksNoVtx" ), - originalQualVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedNoVtx','QualityMasks' ), - originalMVAVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedNoVtx','MVAValues' ) + originalSource = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx','MVAValues' ) ) -process.hltIter1L3MuonMergedNoVtx = cms.EDProducer( "TrackListMerger", +process.hltIter1L3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", ShareFrac = cms.double( 0.19 ), writeOnlyTrkQuals = cms.bool( False ), MinPT = cms.double( 0.05 ), allowFirstHitShare = cms.bool( True ), copyExtras = cms.untracked.bool( True ), Epsilon = cms.double( -0.001 ), - selectedTrackQuals = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityNoVtx','hltIter1L3MuonTrackSelectionHighPurityNoVtx' ), + selectedTrackQuals = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx' ), indivShareFrac = cms.vdouble( 1.0, 1.0 ), MaxNormalizedChisq = cms.double( 1000.0 ), copyMVA = cms.bool( False ), @@ -79976,27 +83518,27 @@ ), MinFound = cms.int32( 3 ), hasSelector = cms.vint32( 0, 0 ), - TrackProducers = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityNoVtx','hltIter1L3MuonTrackSelectionHighPurityNoVtx' ), + TrackProducers = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx' ), trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), newQuality = cms.string( "confirmed" ) ) -process.hltIter2L3MuonClustersRefRemovalNoVtx = cms.EDProducer( "TrackClusterRemover", +process.hltIter2L3MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", trackClassifier = cms.InputTag( '','QualityMasks' ), minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), maxChi2 = cms.double( 16.0 ), - trajectories = cms.InputTag( "hltIter1L3MuonTrackSelectionHighPurityNoVtx" ), - oldClusterRemovalInfo = cms.InputTag( "hltIter1L3MuonClustersRefRemovalNoVtx" ), + trajectories = cms.InputTag( "hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), overrideTrkQuals = cms.InputTag( "" ), pixelClusters = cms.InputTag( "hltSiPixelClusters" ), TrackQuality = cms.string( "highPurity" ) ) -process.hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", - clustersToSkip = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), +process.hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter2L3MuonClustersRefRemovalScoutingNoVtx" ), OnDemand = cms.bool( False ), src = cms.InputTag( "hltSiStripClusters" ) ) -process.hltIter2L3MuonPixelLayerTripletsNoVtx = cms.EDProducer( "SeedingLayersEDProducer", +process.hltIter2L3MuonPixelLayerTripletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", layerList = cms.vstring( 'BPix1+BPix2+BPix3', 'BPix2+BPix3+BPix4', 'BPix1+BPix3+BPix4', @@ -80017,7 +83559,7 @@ FPix = cms.PSet( hitErrorRPhi = cms.double( 0.0051 ), TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), - skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), + skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalScoutingNoVtx" ), useErrorsFromParam = cms.bool( True ), hitErrorRZ = cms.double( 0.0036 ), HitProducer = cms.string( "hltSiPixelRecHits" ) @@ -80029,16 +83571,16 @@ BPix = cms.PSet( hitErrorRPhi = cms.double( 0.0027 ), TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), - skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), + skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalScoutingNoVtx" ), useErrorsFromParam = cms.bool( True ), hitErrorRZ = cms.double( 0.006 ), HitProducer = cms.string( "hltSiPixelRecHits" ) ), TIB = cms.PSet( ) ) -process.hltIter2L3MuonPixelTrackingRegionsNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", +process.hltIter2L3MuonPixelTrackingRegionsScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", RegionPSet = cms.PSet( - vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), zErrorVetex = cms.double( 0.05 ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), zErrorBeamSpot = cms.double( 24.2 ), @@ -80048,18 +83590,18 @@ nSigmaZBeamSpot = cms.double( 4.0 ), ptMin = cms.double( 0.8 ), mode = cms.string( "VerticesFixed" ), - input = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + input = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), searchOpt = cms.bool( False ), whereToUseMeasurementTracker = cms.string( "ForSiStrips" ), originRadius = cms.double( 0.025 ), - measurementTrackerName = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + measurementTrackerName = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), precise = cms.bool( True ), deltaEta = cms.double( 0.3 ), deltaPhi = cms.double( 0.3 ) ) ) -process.hltIter2L3MuonPixelHitDoubletsNoVtx = cms.EDProducer( "HitPairEDProducer", - trackingRegions = cms.InputTag( "hltIter2L3MuonPixelTrackingRegionsNoVtx" ), +process.hltIter2L3MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIter2L3MuonPixelTrackingRegionsScoutingNoVtx" ), layerPairs = cms.vuint32( 0, 1 ), clusterCheck = cms.InputTag( "hltIter2L3MuonPixelClusterCheck" ), produceSeedingHitSets = cms.bool( False ), @@ -80067,9 +83609,9 @@ trackingRegionsSeedingLayers = cms.InputTag( "" ), maxElementTotal = cms.uint32( 50000000 ), maxElement = cms.uint32( 0 ), - seedingLayers = cms.InputTag( "hltIter2L3MuonPixelLayerTripletsNoVtx" ) + seedingLayers = cms.InputTag( "hltIter2L3MuonPixelLayerTripletsScoutingNoVtx" ) ) -process.hltIter2L3MuonPixelHitTripletsNoVtx = cms.EDProducer( "CAHitTripletEDProducer", +process.hltIter2L3MuonPixelHitTripletsScoutingNoVtx = cms.EDProducer( "CAHitTripletEDProducer", CAThetaCut = cms.double( 0.004 ), CAPhiCut_byTriplets = cms.VPSet( cms.PSet( seedingLayers = cms.string( "" ), @@ -80083,7 +83625,7 @@ enabled = cms.bool( True ), pt2 = cms.double( 8.0 ) ), - doublets = cms.InputTag( "hltIter2L3MuonPixelHitDoubletsNoVtx" ), + doublets = cms.InputTag( "hltIter2L3MuonPixelHitDoubletsScoutingNoVtx" ), CAHardPtCut = cms.double( 0.3 ), SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), CAThetaCut_byTriplets = cms.VPSet( @@ -80095,7 +83637,7 @@ useBendingCorrection = cms.bool( True ), extraHitRPhitolerance = cms.double( 0.032 ) ) -process.hltIter2L3MuonPixelSeedsNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsEDProducer", +process.hltIter2L3MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsEDProducer", SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), forceKinematicWithRegionDirection = cms.bool( False ), magneticField = cms.string( "ParabolicMf" ), @@ -80103,11 +83645,11 @@ OriginTransverseErrorMultiplier = cms.double( 1.0 ), TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), MinOneOverPtError = cms.double( 1.0 ), - seedingHitSets = cms.InputTag( "hltIter2L3MuonPixelHitTripletsNoVtx" ), + seedingHitSets = cms.InputTag( "hltIter2L3MuonPixelHitTripletsScoutingNoVtx" ), propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) ) -process.hltIter2L3MuonCkfTrackCandidatesNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", - src = cms.InputTag( "hltIter2L3MuonPixelSeedsNoVtx" ), +process.hltIter2L3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter2L3MuonPixelSeedsScoutingNoVtx" ), maxSeedsBeforeCleaning = cms.uint32( 1000 ), SimpleMagneticField = cms.string( "ParabolicMf" ), TransientInitialStateEstimatorParameters = cms.PSet( @@ -80116,7 +83658,7 @@ propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) ), TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), - MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), cleanTrajectoryAfterInOut = cms.bool( False ), useHitsSplitting = cms.bool( False ), RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), @@ -80127,12 +83669,12 @@ NavigationSchool = cms.string( "SimpleNavigationSchool" ), TrajectoryBuilder = cms.string( "" ) ) -process.hltIter2L3MuonCtfWithMaterialTracksNoVtx = cms.EDProducer( "TrackProducer", - src = cms.InputTag( "hltIter2L3MuonCkfTrackCandidatesNoVtx" ), +process.hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter2L3MuonCkfTrackCandidatesScoutingNoVtx" ), SimpleMagneticField = cms.string( "ParabolicMf" ), clusterRemovalInfo = cms.InputTag( "" ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), - MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), Fitter = cms.string( "hltESPFittingSmootherIT" ), useHitsSplitting = cms.bool( False ), MeasurementTracker = cms.string( "" ), @@ -80145,10 +83687,10 @@ useSimpleMF = cms.bool( True ), Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) ) -process.hltIter2L3MuonTrackCutClassifierNoVtx = cms.EDProducer( "TrackCutClassifier", - src = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksNoVtx" ), +process.hltIter2L3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx" ), beamspot = cms.InputTag( "hltOnlineBeamSpot" ), - vertices = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), mva = cms.PSet( minPixelHits = cms.vint32( 0, 0, 0 ), @@ -80177,22 +83719,22 @@ ), ignoreVertices = cms.bool( False ) ) -process.hltIter2L3MuonTrackSelectionHighPurityNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", +process.hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", minQuality = cms.string( "highPurity" ), copyExtras = cms.untracked.bool( True ), copyTrajectories = cms.untracked.bool( False ), - originalSource = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksNoVtx" ), - originalQualVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierNoVtx','QualityMasks' ), - originalMVAVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierNoVtx','MVAValues' ) + originalSource = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) ) -process.hltIter2L3MuonMergedNoVtx = cms.EDProducer( "TrackListMerger", +process.hltIter2L3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", ShareFrac = cms.double( 0.19 ), writeOnlyTrkQuals = cms.bool( False ), MinPT = cms.double( 0.05 ), allowFirstHitShare = cms.bool( True ), copyExtras = cms.untracked.bool( True ), Epsilon = cms.double( -0.001 ), - selectedTrackQuals = cms.VInputTag( 'hltIter1L3MuonMergedNoVtx','hltIter2L3MuonTrackSelectionHighPurityNoVtx' ), + selectedTrackQuals = cms.VInputTag( 'hltIter1L3MuonMergedScoutingNoVtx','hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx' ), indivShareFrac = cms.vdouble( 1.0, 1.0 ), MaxNormalizedChisq = cms.double( 1000.0 ), copyMVA = cms.bool( False ), @@ -80205,11 +83747,11 @@ ), MinFound = cms.int32( 3 ), hasSelector = cms.vint32( 0, 0 ), - TrackProducers = cms.VInputTag( 'hltIter1L3MuonMergedNoVtx','hltIter2L3MuonTrackSelectionHighPurityNoVtx' ), + TrackProducers = cms.VInputTag( 'hltIter1L3MuonMergedScoutingNoVtx','hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx' ), trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), newQuality = cms.string( "confirmed" ) ) -process.hltMuonTkRelIsolationCut0p09MapNoVtx = cms.EDProducer( "L3MuonCombinedRelativeIsolationProducer", +process.hltMuonTkRelIsolationCut0p09MapScoutingNoVtx = cms.EDProducer( "L3MuonCombinedRelativeIsolationProducer", printDebug = cms.bool( False ), CutsPSet = cms.PSet( applyCutsORmaxNTracks = cms.bool( False ), @@ -80221,7 +83763,7 @@ ), TrkExtractorPSet = cms.PSet( Diff_z = cms.double( 0.2 ), - inputTrackCollection = cms.InputTag( "hltIter2L3MuonMergedNoVtx" ), + inputTrackCollection = cms.InputTag( "hltIter2L3MuonMergedScoutingNoVtx" ), Chi2Ndof_Max = cms.double( 1.0E64 ), BeamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), DR_Veto = cms.double( 0.01 ), @@ -80256,188 +83798,10 @@ ComponentName = cms.string( "CaloExtractor" ), Weight_E = cms.double( 1.0 ) ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + inputMuonCollection = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), UseRhoCorrectedCaloDeposits = cms.bool( False ), UseCaloIso = cms.bool( False ) ) -process.hltPreDSTDoubleMu3noVtxCaloScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltDimuon3L1Filtered0 = cms.EDFilter( "HLTMuonL1TFilter", - saveTags = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltL1sDoubleMuIorTripleMuIorQuadMu" ), - MinPt = cms.double( 0.0 ), - MinN = cms.int32( 2 ), - MaxEta = cms.double( 2.5 ), - CentralBxOnly = cms.bool( True ), - SelectQualities = cms.vint32( ), - CandTag = cms.InputTag( 'hltGtStage2Digis','Muon' ) -) -process.hltDimuon3L2PreFiltered0 = cms.EDFilter( "HLTMuonL2FromL1TPreFilter", - saveTags = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - CutOnChambers = cms.bool( False ), - PreviousCandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - MinPt = cms.double( 0.0 ), - MinN = cms.int32( 0 ), - SeedMapTag = cms.InputTag( "hltL2Muons" ), - MaxEta = cms.double( 2.5 ), - MinNhits = cms.vint32( 0 ), - MinDxySig = cms.double( -1.0 ), - MinDr = cms.double( -1.0 ), - AbsEtaBins = cms.vdouble( 0.0 ), - MaxDz = cms.double( 9999.0 ), - MatchToPreviousCand = cms.bool( True ), - CandTag = cms.InputTag( "hltL2MuonCandidatesNoVtx" ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinNchambers = cms.vint32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinNstations = cms.vint32( 0 ) -) -process.hltDoubleMu3L3FilteredNoVtx = cms.EDFilter( "HLTMuonDimuonL3Filter", - saveTags = cms.bool( True ), - ChargeOpt = cms.int32( 0 ), - MaxPtMin = cms.vdouble( 1.0E125 ), - FastAccept = cms.bool( False ), - MatchToPreviousCand = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), - InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), - PreviousCandIsL2 = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), - MaxPtBalance = cms.double( 999999.0 ), - MaxPtPair = cms.vdouble( 1.0E125 ), - MaxAcop = cms.double( 999.0 ), - MinPtMin = cms.vdouble( 3.0 ), - MaxInvMass = cms.vdouble( 9999.0 ), - MinPtMax = cms.vdouble( 0.0 ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinN = cms.int32( 1 ), - MaxDz = cms.double( 9999.0 ), - MinPtPair = cms.vdouble( 0.0 ), - CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - MinAcop = cms.double( -999.0 ), - MaxDCAMuMu = cms.double( 999999.0 ), - MinNhits = cms.int32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinPtBalance = cms.double( -1.0 ), - MaxEta = cms.double( 2.5 ), - L1MatchingdR = cms.double( 0.3 ), - MaxRapidityPair = cms.double( 999999.0 ), - CutCowboys = cms.bool( False ), - MinInvMass = cms.vdouble( 0.0 ) -) -process.hltDisplacedmumuVtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", - Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtx" ), - MinPt = cms.double( 0.0 ), - ChargeOpt = cms.int32( 0 ), - MaxEta = cms.double( 2.5 ), - MaxInvMass = cms.double( 99999.0 ), - MinPtPair = cms.double( 0.0 ), - matchToPrevious = cms.bool( True ), - MinInvMass = cms.double( 0.0 ) -) -process.hltPreDSTDoubleMu1noVtxCaloScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltDoubleMu1L3FilteredNoVtx = cms.EDFilter( "HLTMuonDimuonL3Filter", - saveTags = cms.bool( True ), - ChargeOpt = cms.int32( 0 ), - MaxPtMin = cms.vdouble( 1.0E125 ), - FastAccept = cms.bool( False ), - MatchToPreviousCand = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), - InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), - PreviousCandIsL2 = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), - MaxPtBalance = cms.double( 999999.0 ), - MaxPtPair = cms.vdouble( 1.0E125 ), - MaxAcop = cms.double( 999.0 ), - MinPtMin = cms.vdouble( 1.0 ), - MaxInvMass = cms.vdouble( 9999.0 ), - MinPtMax = cms.vdouble( 0.0 ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinN = cms.int32( 1 ), - MaxDz = cms.double( 9999.0 ), - MinPtPair = cms.vdouble( 0.0 ), - CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - MinAcop = cms.double( -999.0 ), - MaxDCAMuMu = cms.double( 999999.0 ), - MinNhits = cms.int32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinPtBalance = cms.double( -1.0 ), - MaxEta = cms.double( 2.5 ), - L1MatchingdR = cms.double( 0.3 ), - MaxRapidityPair = cms.double( 999999.0 ), - CutCowboys = cms.bool( False ), - MinInvMass = cms.vdouble( 0.0 ) -) -process.hltDisplacedmumu1VtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", - Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - PreviousCandTag = cms.InputTag( "hltDoubleMu1L3FilteredNoVtx" ), - MinPt = cms.double( 0.0 ), - ChargeOpt = cms.int32( 0 ), - MaxEta = cms.double( 2.5 ), - MaxInvMass = cms.double( 99999.0 ), - MinPtPair = cms.double( 0.0 ), - matchToPrevious = cms.bool( True ), - MinInvMass = cms.double( 0.0 ) -) -process.hltPreDSTDoubleMu3noVtxMass10PFScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltDoubleMu3L3FilteredNoVtxMass10 = cms.EDFilter( "HLTMuonDimuonL3Filter", - saveTags = cms.bool( True ), - ChargeOpt = cms.int32( 0 ), - MaxPtMin = cms.vdouble( 1.0E125 ), - FastAccept = cms.bool( False ), - MatchToPreviousCand = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), - InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), - PreviousCandIsL2 = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), - MaxPtBalance = cms.double( 999999.0 ), - MaxPtPair = cms.vdouble( 1.0E125 ), - MaxAcop = cms.double( 999.0 ), - MinPtMin = cms.vdouble( 3.0 ), - MaxInvMass = cms.vdouble( 9999.0 ), - MinPtMax = cms.vdouble( 0.0 ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinN = cms.int32( 1 ), - MaxDz = cms.double( 9999.0 ), - MinPtPair = cms.vdouble( 0.0 ), - CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - MinAcop = cms.double( -999.0 ), - MaxDCAMuMu = cms.double( 999999.0 ), - MinNhits = cms.int32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinPtBalance = cms.double( -1.0 ), - MaxEta = cms.double( 2.5 ), - L1MatchingdR = cms.double( 0.3 ), - MaxRapidityPair = cms.double( 999999.0 ), - CutCowboys = cms.bool( False ), - MinInvMass = cms.vdouble( 10.0 ) -) -process.hltDisplacedmumuMass10VtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", - Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtxMass10" ), - MinPt = cms.double( 0.0 ), - ChargeOpt = cms.int32( 0 ), - MaxEta = cms.double( 2.5 ), - MaxInvMass = cms.double( 99999.0 ), - MinPtPair = cms.double( 0.0 ), - matchToPrevious = cms.bool( True ), - MinInvMass = cms.double( 0.0 ) -) process.hltPreAK4CaloJet30 = cms.EDFilter( "HLTPrescaler", L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), offset = cms.uint32( 0 ) @@ -88805,14 +92169,6 @@ useEt = cms.bool( True ), rhoScale = cms.double( 1.0 ) ) -process.hltRegionalTowerForTkMuonsM2Reg = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( "hltHighPtTkMuonCands" ), - EMin = cms.double( 0.0 ), - EtMin = cms.double( 0.0 ), - L1IsoCand = cms.InputTag( "hltHighPtTkMuonCands" ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForHCAL" ) -) process.hltHighPtTkMuonHcalM2RegPFClusterIsoForMuons = cms.EDProducer( "MuonHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.227, 0.372 ), useHF = cms.bool( False ), @@ -91169,10 +94525,10 @@ minTauPtForNoIso = cms.double( 500.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -91182,7 +94538,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -91207,15 +94563,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauMediumHighPtRelaxedIsoRelativeIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -91260,10 +94617,10 @@ minTauPtForNoIso = cms.double( 500.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -91273,7 +94630,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -91298,15 +94655,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 200.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauMediumHighPtRelaxedIsoAbsOrRelIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -102652,7 +106010,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -102768,6 +106127,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -123785,52 +127145,65 @@ fedList = cms.vuint32( 1404 ) ) process.hltScoutingPFPacker = cms.EDProducer( "HLTScoutingPFProducer", - pfJetCollection = cms.InputTag( "hltAK4PFJets" ), + pfJetCollection = cms.InputTag( "hltAK4PixelOnlyPFJets" ), doCandidates = cms.bool( True ), - pfCandidateEtaCut = cms.double( 5.0 ), + pfCandidateEtaCut = cms.double( 3.0 ), pfJetTagCollection = cms.InputTag( 'hltCombinedSecondaryVertexBJetTagsPF','','@currentProcess' ), doMet = cms.bool( True ), - metCollection = cms.InputTag( 'hltPFMETProducer','','@currentProcess' ), + metCollection = cms.InputTag( 'hltPixelOnlyPFMETProducer','','@currentProcess' ), pfJetEtaCut = cms.double( 3.0 ), vertexCollection = cms.InputTag( 'hltPixelVertices','','@currentProcess' ), pfJetPtCut = cms.double( 20.0 ), mantissaPrecision = cms.int32( 23 ), - rho = cms.InputTag( 'hltFixedGridRhoFastjetAll','','@currentProcess' ), + rho = cms.InputTag( 'hltFixedGridRhoFastjetPixelOnlyAll','','@currentProcess' ), doJetTags = cms.bool( True ), - pfCandidateCollection = cms.InputTag( 'hltParticleFlow','','@currentProcess' ), + pfCandidateCollection = cms.InputTag( 'hltPixelOnlyParticleFlow','','@currentProcess' ), pfCandidatePtCut = cms.double( 0.6 ) ) process.hltScoutingMuonPacker = cms.EDProducer( "HLTScoutingMuonProducer", minVtxProbCut = cms.double( 0.001 ), - HcalPFClusterIsoMap = cms.InputTag( 'hltMuonHcalPFClusterIsoForMuons','','@currentProcess' ), - EcalPFClusterIsoMap = cms.InputTag( 'hltMuonEcalPFClusterIsoForMuons','','@currentProcess' ), - ChargedCandidates = cms.InputTag( 'hltL3MuonCandidates','','@currentProcess' ), - muonPtCut = cms.double( 3.0 ), - InputLinks = cms.InputTag( 'hltL3MuonsIterL3LinksNoVtx','','@currentProcess' ), - displacedvertexCollection = cms.InputTag( 'hltDisplacedmumuVtxProducerDoubleMu3NoVtx','','@currentProcess' ), - Tracks = cms.InputTag( "hltL3Muons" ), + HcalPFClusterIsoMap = cms.InputTag( 'hltMuonHcalPFClusterIsoForMuonsScoutingNoVtx','','@currentProcess' ), + EcalPFClusterIsoMap = cms.InputTag( 'hltMuonEcalMFPFClusterIsoForMuonsScoutingNoVtx','','@currentProcess' ), + ChargedCandidates = cms.InputTag( 'hltIterL3MuonCandidatesScoutingNoVtx','','@currentProcess' ), + InputMuons = cms.InputTag( "hltIterL3MuonsScoutingNoVtx" ), + TrackIsoMap = cms.InputTag( 'hltMuonTkRelIsolationCut0p09MapScoutingNoVtx','combinedRelativeIsoDeposits','@currentProcess' ), + displacedvertexCollection = cms.InputTag( 'hltDisplacedmumuVtxNoMatchingProducer','','@currentProcess' ), + Tracks = cms.InputTag( "hltIterL3MuonAndMuonFromL1MergedScoutingNoVtx" ), muonEtaCut = cms.double( 2.4 ), - TrackIsoMap = cms.InputTag( 'hltMuonTkRelIsolationCut0p09Map','combinedRelativeIsoDeposits','@currentProcess' ) + muonPtCut = cms.double( 0.0 ), + InputLinks = cms.InputTag( 'hltL3MuonsIterL3LinksScoutingNoVtx','','@currentProcess' ) ) process.hltScoutingEgammaPacker = cms.EDProducer( "HLTScoutingEgammaProducer", egammaEtaCut = cms.double( 2.5 ), HcalPFClusterIsoMap = cms.InputTag( 'hltEgammaHcalPFClusterIso','','@currentProcess' ), EgammaCandidates = cms.InputTag( 'hltEgammaCandidates','','@currentProcess' ), - egammaPtCut = cms.double( 4.0 ), + egammaPtCut = cms.double( 2.0 ), EcalPFClusterIsoMap = cms.InputTag( 'hltEgammaEcalPFClusterIso','','@currentProcess' ), - SigmaIEtaIEtaMap = cms.InputTag( 'hltEgammaClusterShape','sigmaIEtaIEta5x5','@currentProcess' ), + saveRecHitTiming = cms.bool( False ), + rechitMatrixSize = cms.int32( 15 ), MissingHitsMap = cms.InputTag( 'hltEgammaGsfTrackVars','MissingHits','@currentProcess' ), + OneOEMinusOneOPMap = cms.InputTag( 'hltEgammaGsfTrackVars','OneOESuperMinusOneOP','@currentProcess' ), HoverEMap = cms.InputTag( 'hltEgammaHoverE','','@currentProcess' ), EgammaGsfTracks = cms.InputTag( 'hltEgammaGsfTracks','','@currentProcess' ), - OneOEMinusOneOPMap = cms.InputTag( 'hltEgammaGsfTrackVars','OneOESuperMinusOneOP','@currentProcess' ), + mantissaPrecision = cms.int32( 10 ), + r9Map = cms.InputTag( 'hltEgammaR9ID','r95x5' ), + SigmaIEtaIEtaMap = cms.InputTag( 'hltEgammaClusterShape','sigmaIEtaIEta5x5','@currentProcess' ), DetaMap = cms.InputTag( 'hltEgammaGsfTrackVars','DetaSeed','@currentProcess' ), egammaHoverECut = cms.double( 1.0 ), - EleGsfTrackIsoMap = cms.InputTag( 'hltEgammaEleGsfTrackIso','','@currentProcess' ), - DphiMap = cms.InputTag( 'hltEgammaGsfTrackVars','Dphi','@currentProcess' ) + ecalRechitEB = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + ecalRechitEE = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + DphiMap = cms.InputTag( 'hltEgammaGsfTrackVars','Dphi','@currentProcess' ), + EleGsfTrackIsoMap = cms.InputTag( 'hltEgammaEleGsfTrackIso','','@currentProcess' ) ) process.hltScoutingPrimaryVertexPacker = cms.EDProducer( "HLTScoutingPrimaryVertexProducer", vertexCollection = cms.InputTag( 'hltPixelVertices','','@currentProcess' ) ) +process.hltScoutingTrackPacker = cms.EDProducer( "HLTScoutingTrackProducer", + vtxMinDist = cms.double( 0.01 ), + OtherTracks = cms.InputTag( "hltPixelOnlyPFMuonMerging" ), + vertexCollection = cms.InputTag( "hltPixelVertices" ), + mantissaPrecision = cms.int32( 10 ) +) process.hltPreScoutingCaloMuonOutput = cms.EDFilter( "HLTPrescaler", L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), offset = cms.uint32( 0 ) @@ -123853,19 +127226,17 @@ HcalPFClusterIsoMap = cms.InputTag( "" ), EcalPFClusterIsoMap = cms.InputTag( "" ), ChargedCandidates = cms.InputTag( 'hltIterL3MuonCandidatesNoVtx','','@currentProcess' ), - muonPtCut = cms.double( 3.0 ), - InputLinks = cms.InputTag( 'hltL3MuonsIterL3LinksNoVtx','','@currentProcess' ), + InputMuons = cms.InputTag( "hltIterL3MuonsNoVtx" ), + TrackIsoMap = cms.InputTag( 'hltMuonTkRelIsolationCut0p09MapNoVtx','combinedRelativeIsoDeposits','@currentProcess' ), displacedvertexCollection = cms.InputTag( 'hltDisplacedmumuVtxProducer','','@currentProcess' ), Tracks = cms.InputTag( 'hltIterL3MuonAndMuonFromL1MergedNoVtx','','@currentProcess' ), muonEtaCut = cms.double( 2.4 ), - TrackIsoMap = cms.InputTag( 'hltMuonTkRelIsolationCut0p09MapNoVtx','combinedRelativeIsoDeposits','@currentProcess' ) + muonPtCut = cms.double( 3.0 ), + InputLinks = cms.InputTag( 'hltL3MuonsIterL3LinksNoVtx','','@currentProcess' ) ) process.hltScoutingPrimaryVertexPackerCaloMuon = cms.EDProducer( "HLTScoutingPrimaryVertexProducer", vertexCollection = cms.InputTag( 'hltPixelVerticesL3MuonNoVtx','','@currentProcess' ) ) -process.hltScoutingTrackPacker = cms.EDProducer( "HLTScoutingTrackProducer", - OtherTracks = cms.InputTag( "hltPixelTracksL3MuonNoVtx" ) -) process.hltPrePhysicsScoutingMonitorOutput = cms.EDFilter( "HLTPrescaler", L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), offset = cms.uint32( 0 ) @@ -123897,7 +127268,8 @@ 'DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6 / 2000', 'DST_DoubleMu3_noVtx_CaloScouting_v6 / 500', 'DST_DoubleMu1_noVtx_CaloScouting_v2 / 500', - 'DST_DoubleMu3_noVtx_Mass10_PFScouting_v3 / 600' ), + 'DST_DoubleMu3_noVtx_Mass10_PFScouting_v3 / 600', + 'DST_Run3_PFScoutingPixelTracking_v16 / 10' ), throw = cms.bool( True ) ) process.hltPrePhysicsHLTPhysics1Output = cms.EDFilter( "HLTPrescaler", @@ -126561,6 +129933,7 @@ 'DST_L1DoubleMu_CaloScouting_PFScouting_v15', 'DST_L1HTT_BTagScouting_v15', 'DST_L1HTT_CaloScouting_PFScouting_v15', + 'DST_Run3_PFScoutingPixelTracking_v16', 'DST_ZeroBias_BTagScouting_v15', 'DST_ZeroBias_CaloScouting_PFScouting_v14' ) ), outputCommands = cms.untracked.vstring( 'drop *', @@ -126569,6 +129942,7 @@ 'keep *_hltScoutingMuonPacker_*_*', 'keep *_hltScoutingPFPacker_*_*', 'keep *_hltScoutingPrimaryVertexPacker_*_*', + 'keep *_hltScoutingTrackPacker_*_*', 'keep edmTriggerResults_*_*_*' ) ) process.hltOutputScoutingCaloMuon = cms.OutputModule( "PoolOutputModule", @@ -126618,6 +129992,7 @@ 'DST_L1HTT_BTagScouting_v15', 'DST_L1HTT_CaloBTagScouting_v14', 'DST_L1HTT_CaloScouting_PFScouting_v15', + 'DST_Run3_PFScoutingPixelTracking_v16', 'DST_ZeroBias_BTagScouting_v15', 'DST_ZeroBias_CaloScouting_PFScouting_v14', 'HLT_Ele115_CaloIdVT_GsfTrkIdT_v14', @@ -128923,12 +132298,12 @@ process.HLTEle33CaloIdLMWSequence = cms.Sequence( process.HLTEle33CaloIdLSequence + process.hltEle33CaloIdLMWPMS2Filter ) process.HLTDoubleEle33CaloIdLUnseededSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltDiEG33EtUnseededFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverEUnseeded + process.hltDiEG33HEUnseededFilter + process.hltEgammaClusterShapeUnseeded + process.hltDiEG33CaloIdLClusterShapeUnseededFilter + process.HLTElePixelMatchUnseededSequence + process.hltDiEle33CaloIdLPixelMatchUnseededFilter ) process.HLTDoubleEle33CaloIdLMWSequence = cms.Sequence( process.HLTDoubleEle33CaloIdLUnseededSequence + process.hltDiEle33CaloIdLMWPMS2UnseededFilter ) -process.HLTPFHcalClusteringForEgamma = cms.Sequence( process.hltRegionalTowerForEgamma + process.hltParticleFlowRecHitHBHE + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL ) +process.HLTPFHcalClustering = cms.Sequence( process.hltParticleFlowRecHitHBHE + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL ) process.HLTAK4CaloJetsPrePFRecoSequence = cms.Sequence( process.HLTDoCaloSequencePF + process.hltAK4CaloJetsPF ) process.HLTPreAK4PFJetsRecoSequence = cms.Sequence( process.HLTAK4CaloJetsPrePFRecoSequence + process.hltAK4CaloJetsPFEt5 ) process.HLTTrackReconstructionForPFNoMu = cms.Sequence( process.HLTDoLocalPixelSequence + process.HLTRecopixelvertexingSequence + process.HLTDoLocalStripSequence + process.HLTIterativeTrackingIter02 ) process.HLTTrackReconstructionForIsoElectronIter02 = cms.Sequence( process.HLTPreAK4PFJetsRecoSequence + process.HLTTrackReconstructionForPFNoMu ) -process.HLTDoubleEle24erWPTightGsfForTauSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltDoubleEGL1EGerFilter + process.hltDoubleEG24L1EGEtFilter + process.hltEgammaClusterShape + process.hltDoubleEle24erWPTightClusterShapeFilterForTau + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltDoubleEle24erWPTightHEFilterForTau + process.hltEgammaEcalPFClusterIso + process.hltDoubleEle24erWPTightEcalIsoFilterForTau + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltDoubleEle24erWPTightHcalIsoFilterForTau + process.HLTElePixelMatchSequence + process.hltDoubleEle24erWPTightPixelMatchFilterForTau + process.hltDoubleEle24erWPTightPMS2FilterForTau + process.HLTGsfElectronSequence + process.hltDoubleEle24erWPTightGsfOneOEMinusOneOPFilterForTau + process.hltDoubleEle24erWPTightGsfMissingHitsFilterForTau + process.hltDoubleEle24erWPTightGsfDetaFilterForTau + process.hltDoubleEle24erWPTightGsfDphiFilterForTau + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltDoubleEle24erWPTightGsfTrackIsoFilterForTau ) +process.HLTDoubleEle24erWPTightGsfForTauSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltDoubleEGL1EGerFilter + process.hltDoubleEG24L1EGEtFilter + process.hltEgammaClusterShape + process.hltDoubleEle24erWPTightClusterShapeFilterForTau + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltDoubleEle24erWPTightHEFilterForTau + process.hltEgammaEcalPFClusterIso + process.hltDoubleEle24erWPTightEcalIsoFilterForTau + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltDoubleEle24erWPTightHcalIsoFilterForTau + process.HLTElePixelMatchSequence + process.hltDoubleEle24erWPTightPixelMatchFilterForTau + process.hltDoubleEle24erWPTightPMS2FilterForTau + process.HLTGsfElectronSequence + process.hltDoubleEle24erWPTightGsfOneOEMinusOneOPFilterForTau + process.hltDoubleEle24erWPTightGsfMissingHitsFilterForTau + process.hltDoubleEle24erWPTightGsfDetaFilterForTau + process.hltDoubleEle24erWPTightGsfDphiFilterForTau + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltDoubleEle24erWPTightGsfTrackIsoFilterForTau ) process.HLTDoubleEle8CaloIdMGsfTrackIdMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaCandidatesWrapper + process.hltEG8EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG8HEFilter + process.hltEgammaClusterShape + process.hltEG8CaloIdMClusterShapeFilter + process.HLTElePixelMatchSequence + process.hltDoubleEle8CaloIdMPixelMatchFilter + process.HLTGsfElectronSequence + process.hltDoubleEle8CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + process.hltDoubleEle8CaloIdMGsfTrackIdMDetaFilter + process.hltDoubleEle8CaloIdMGsfTrackIdMDphiFilter ) process.HLTAK4PFJetsReconstructionSequence = cms.Sequence( process.HLTL2muonrecoSequence + process.HLTL3muonrecoSequence + process.HLTTrackReconstructionForPF + process.HLTParticleFlowSequence + process.hltAK4PFJets + process.hltAK4PFJetsLooseID + process.hltAK4PFJetsTightID ) process.HLTAK4PFCorrectorProducersSequence = cms.Sequence( process.hltAK4PFFastJetCorrector + process.hltAK4PFRelativeCorrector + process.hltAK4PFAbsoluteCorrector + process.hltAK4PFResidualCorrector + process.hltAK4PFCorrector ) @@ -128978,22 +132353,22 @@ process.HLTDoublePho33CaloIdLUnseededSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltDiEG33EtUnseededFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverEUnseeded + process.hltDiEG33HEUnseededFilter + process.hltEgammaClusterShapeUnseeded + process.hltDiEG33CaloIdLClusterShapeUnseededFilter ) process.HLTDoublePho70Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGNonIsoOrWithJetAndTauFilter + process.hltEG70EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG70HEFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltDiEG70EtUnseededFilter + process.hltEgammaHoverEUnseeded + process.hltDiEG70HEUnseededFilter ) process.HLTDoublePho85Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGNonIsoOrWithJetAndTauFilter + process.hltEG85EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG85HEFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltDiEG85EtUnseededFilter + process.hltEgammaHoverEUnseeded + process.hltDiEG85HEUnseededFilter ) -process.HLTEle20WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG20L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle20WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle20WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle20WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle20WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle20WPTightPixelMatchFilter + process.hltEle20WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle20WPTightGsfOneOEMinusOneOPFilter + process.hltEle20WPTightGsfMissingHitsFilter + process.hltEle20WPTightGsfDetaFilter + process.hltEle20WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle20WPTightGsfTrackIsoFilter ) -process.HLTEle15WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG15L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle15WPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15WPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle15WPLoose1EcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle15WPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle15WPLoose1PixelMatchFilter + process.hltEle15WPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle15WPLoose1GsfOneOEMinusOneOPFilter + process.hltEle15WPLoose1GsfDetaFilter + process.hltEle15WPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15WPLoose1GsfTrackIsoFilter ) -process.HLTEle17WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG17L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle17WPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle17WPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle17WPLoose1EcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle17WPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle17WPLoose1PixelMatchFilter + process.hltEle17WPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle17WPLoose1GsfOneOEMinusOneOPFilter + process.hltEle17WPLoose1GsfDetaFilter + process.hltEle17WPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle17WPLoose1GsfTrackIsoFilter ) -process.HLTEle20WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG20L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle20WPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle20WPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle20WPLoose1EcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle20WPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle20WPLoose1PixelMatchFilter + process.hltEle20WPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle20WPLoose1GsfOneOEMinusOneOPFilter + process.hltEle20WPLoose1GsfDetaFilter + process.hltEle20WPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle20WPLoose1GsfTrackIsoFilter ) -process.HLTEle20Eta2p1WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrEtaRFilter + process.hltEG20L1SingleEGLowETOrEtaREtFilter + process.hltEgammaClusterShape + process.hltEle20erWPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle20erWPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle20erWPLoose1EcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle20erWPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle20erWPLoose1PixelMatchFilter + process.hltEle20erWPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle20erWPLoose1GsfOneOEMinusOneOPFilter + process.hltEle20erWPLoose1GsfDetaFilter + process.hltEle20erWPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle20erWPLoose1GsfTrackIsoFilter ) -process.HLTDiEle27L1DoubleEGWPTightCaloOnlySequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG27L1SingleAndDoubleEGEtFilter + process.hltEgammaClusterShape + process.hltEle27L1DoubleEGWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle27L1DoubleEGWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle27L1DoubleEGWPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle27L1DoubleEGWPTightHcalIsoFilter + process.hltDiEG27L1SingleAndDoubleEGEtFilter + process.hltDiEle27L1DoubleEGWPTightClusterShapeFilter + process.hltDiEle27L1DoubleEGWPTightHEFilter + process.hltDiEle27L1DoubleEGWPTightEcalIsoFilter + process.hltDiEle27L1DoubleEGWPTightHcalIsoFilter ) -process.HLTEle27WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG27L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle27WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle27WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle27WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle27WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle27WPTightPixelMatchFilter + process.hltEle27WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle27WPTightGsfOneOEMinusOneOPFilter + process.hltEle27WPTightGsfMissingHitsFilter + process.hltEle27WPTightGsfDetaFilter + process.hltEle27WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle27WPTightGsfTrackIsoFilter ) -process.HLTEle28WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG28L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle28WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle28WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle28WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle28WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle28WPTightPixelMatchFilter + process.hltEle28WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle28WPTightGsfOneOEMinusOneOPFilter + process.hltEle28WPTightGsfMissingHitsFilter + process.hltEle28WPTightGsfDetaFilter + process.hltEle28WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle28WPTightGsfTrackIsoFilter ) -process.HLTEle30WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG30L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle30WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle30WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle30WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle30WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle30WPTightPixelMatchFilter + process.hltEle30WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle30WPTightGsfOneOEMinusOneOPFilter + process.hltEle30WPTightGsfMissingHitsFilter + process.hltEle30WPTightGsfDetaFilter + process.hltEle30WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle30WPTightGsfTrackIsoFilter ) -process.HLTEle32WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG32L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle32WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle32WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle32WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle32WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle32WPTightPixelMatchFilter + process.hltEle32WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle32WPTightGsfOneOEMinusOneOPFilter + process.hltEle32WPTightGsfMissingHitsFilter + process.hltEle32WPTightGsfDetaFilter + process.hltEle32WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle32WPTightGsfTrackIsoFilter ) -process.HLTEle35WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG35L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle35noerWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle35noerWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle35noerWPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle35noerWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle35noerWPTightPixelMatchFilter + process.hltEle35noerWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle35noerWPTightGsfOneOEMinusOneOPFilter + process.hltEle35noerWPTightGsfMissingHitsFilter + process.hltEle35noerWPTightGsfDetaFilter + process.hltEle35noerWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle35noerWPTightGsfTrackIsoFilter ) -process.HLTSingleEleGsfL1EGMTSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltSingleEle35WPTightGsfL1EGMTL1MatchFilter + process.hltSingleEle35WPTightGsfL1EGMTEtFilter + process.hltEgammaClusterShape + process.hltSingleEle35WPTightGsfL1EGMTClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltSingleEle35WPTightGsfL1EGMTHEFilter + process.hltEgammaEcalPFClusterIso + process.hltSingleEle35WPTightGsfL1EGMTEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltSingleEle35WPTightGsfL1EGMTHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltSingleEle35WPTightGsfL1EGMTPixelMatchFilter + process.hltSingleEle35WPTightGsfL1EGMTPMS2Filter + process.HLTGsfElectronSequence + process.hltSingleEle35WPTightGsfL1EGMTOneOEMinusOneOPFilter + process.hltSingleEle35WPTightGsfL1EGMTChi2Filter + process.hltSingleEle35WPTightGsfL1EGMTMissingHitsFilter + process.hltSingleEle35WPTightGsfL1EGMTDetaFilter + process.hltSingleEle35WPTightGsfL1EGMTDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltSingleEle35WPTightGsfL1EGMTTrackIsoFilter ) -process.HLTEle38WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG38L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle38noerWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle38noerWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle38noerWPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle38noerWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle38noerWPTightPixelMatchFilter + process.hltEle38noerWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle38noerWPTightGsfOneOEMinusOneOPFilter + process.hltEle38noerWPTightGsfMissingHitsFilter + process.hltEle38noerWPTightGsfDetaFilter + process.hltEle38noerWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle38noerWPTightGsfTrackIsoFilter ) -process.HLTEle40WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG40L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle40noerWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle40noerWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle40noerWPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle40noerWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle40noerWPTightPixelMatchFilter + process.hltEle40noerWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle40noerWPTightGsfOneOEMinusOneOPFilter + process.hltEle40noerWPTightGsfMissingHitsFilter + process.hltEle40noerWPTightGsfDetaFilter + process.hltEle40noerWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle40noerWPTightGsfTrackIsoFilter ) -process.HLTEle32L1DoubleEGWPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG32L1SingleAndDoubleEGEtFilter + process.hltEgammaClusterShape + process.hltEle32L1DoubleEGWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle32L1DoubleEGWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle32L1DoubleEGWPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle32L1DoubleEGWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle32L1DoubleEGWPTightPixelMatchFilter + process.hltEle32L1DoubleEGWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle32L1DoubleEGWPTightGsfOneOEMinusOneOPFilter + process.hltEle32L1DoubleEGWPTightGsfMissingHitsFilter + process.hltEle32L1DoubleEGWPTightGsfDetaFilter + process.hltEle32L1DoubleEGWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle32L1DoubleEGWPTightGsfTrackIsoFilter ) -process.HLTEle24erWPTightGsfForTauSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1EGerAndTauFilter + process.hltEG24L1EGandTauEtFilter + process.hltEgammaClusterShape + process.hltEle24erWPTightClusterShapeFilterForTau + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle24erWPTightHEFilterForTau + process.hltEgammaEcalPFClusterIso + process.hltEle24erWPTightEcalIsoFilterForTau + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle24erWPTightHcalIsoFilterForTau + process.HLTElePixelMatchSequence + process.hltEle24erWPTightPixelMatchFilterForTau + process.hltEle24erWPTightPMS2FilterForTau + process.HLTGsfElectronSequence + process.hltEle24erWPTightGsfOneOEMinusOneOPFilterForTau + process.hltEle24erWPTightGsfMissingHitsFilterForTau + process.hltEle24erWPTightGsfDetaFilterForTau + process.hltEle24erWPTightGsfDphiFilterForTau + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle24erWPTightGsfTrackIsoFilterForTau ) +process.HLTEle20WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG20L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle20WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle20WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle20WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle20WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle20WPTightPixelMatchFilter + process.hltEle20WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle20WPTightGsfOneOEMinusOneOPFilter + process.hltEle20WPTightGsfMissingHitsFilter + process.hltEle20WPTightGsfDetaFilter + process.hltEle20WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle20WPTightGsfTrackIsoFilter ) +process.HLTEle15WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG15L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle15WPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15WPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle15WPLoose1EcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle15WPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle15WPLoose1PixelMatchFilter + process.hltEle15WPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle15WPLoose1GsfOneOEMinusOneOPFilter + process.hltEle15WPLoose1GsfDetaFilter + process.hltEle15WPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15WPLoose1GsfTrackIsoFilter ) +process.HLTEle17WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG17L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle17WPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle17WPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle17WPLoose1EcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle17WPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle17WPLoose1PixelMatchFilter + process.hltEle17WPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle17WPLoose1GsfOneOEMinusOneOPFilter + process.hltEle17WPLoose1GsfDetaFilter + process.hltEle17WPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle17WPLoose1GsfTrackIsoFilter ) +process.HLTEle20WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG20L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle20WPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle20WPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle20WPLoose1EcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle20WPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle20WPLoose1PixelMatchFilter + process.hltEle20WPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle20WPLoose1GsfOneOEMinusOneOPFilter + process.hltEle20WPLoose1GsfDetaFilter + process.hltEle20WPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle20WPLoose1GsfTrackIsoFilter ) +process.HLTEle20Eta2p1WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrEtaRFilter + process.hltEG20L1SingleEGLowETOrEtaREtFilter + process.hltEgammaClusterShape + process.hltEle20erWPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle20erWPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle20erWPLoose1EcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle20erWPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle20erWPLoose1PixelMatchFilter + process.hltEle20erWPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle20erWPLoose1GsfOneOEMinusOneOPFilter + process.hltEle20erWPLoose1GsfDetaFilter + process.hltEle20erWPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle20erWPLoose1GsfTrackIsoFilter ) +process.HLTDiEle27L1DoubleEGWPTightCaloOnlySequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG27L1SingleAndDoubleEGEtFilter + process.hltEgammaClusterShape + process.hltEle27L1DoubleEGWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle27L1DoubleEGWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle27L1DoubleEGWPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle27L1DoubleEGWPTightHcalIsoFilter + process.hltDiEG27L1SingleAndDoubleEGEtFilter + process.hltDiEle27L1DoubleEGWPTightClusterShapeFilter + process.hltDiEle27L1DoubleEGWPTightHEFilter + process.hltDiEle27L1DoubleEGWPTightEcalIsoFilter + process.hltDiEle27L1DoubleEGWPTightHcalIsoFilter ) +process.HLTEle27WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG27L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle27WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle27WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle27WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle27WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle27WPTightPixelMatchFilter + process.hltEle27WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle27WPTightGsfOneOEMinusOneOPFilter + process.hltEle27WPTightGsfMissingHitsFilter + process.hltEle27WPTightGsfDetaFilter + process.hltEle27WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle27WPTightGsfTrackIsoFilter ) +process.HLTEle28WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG28L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle28WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle28WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle28WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle28WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle28WPTightPixelMatchFilter + process.hltEle28WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle28WPTightGsfOneOEMinusOneOPFilter + process.hltEle28WPTightGsfMissingHitsFilter + process.hltEle28WPTightGsfDetaFilter + process.hltEle28WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle28WPTightGsfTrackIsoFilter ) +process.HLTEle30WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG30L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle30WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle30WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle30WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle30WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle30WPTightPixelMatchFilter + process.hltEle30WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle30WPTightGsfOneOEMinusOneOPFilter + process.hltEle30WPTightGsfMissingHitsFilter + process.hltEle30WPTightGsfDetaFilter + process.hltEle30WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle30WPTightGsfTrackIsoFilter ) +process.HLTEle32WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG32L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle32WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle32WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle32WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle32WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle32WPTightPixelMatchFilter + process.hltEle32WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle32WPTightGsfOneOEMinusOneOPFilter + process.hltEle32WPTightGsfMissingHitsFilter + process.hltEle32WPTightGsfDetaFilter + process.hltEle32WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle32WPTightGsfTrackIsoFilter ) +process.HLTEle35WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG35L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle35noerWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle35noerWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle35noerWPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle35noerWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle35noerWPTightPixelMatchFilter + process.hltEle35noerWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle35noerWPTightGsfOneOEMinusOneOPFilter + process.hltEle35noerWPTightGsfMissingHitsFilter + process.hltEle35noerWPTightGsfDetaFilter + process.hltEle35noerWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle35noerWPTightGsfTrackIsoFilter ) +process.HLTSingleEleGsfL1EGMTSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltSingleEle35WPTightGsfL1EGMTL1MatchFilter + process.hltSingleEle35WPTightGsfL1EGMTEtFilter + process.hltEgammaClusterShape + process.hltSingleEle35WPTightGsfL1EGMTClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltSingleEle35WPTightGsfL1EGMTHEFilter + process.hltEgammaEcalPFClusterIso + process.hltSingleEle35WPTightGsfL1EGMTEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltSingleEle35WPTightGsfL1EGMTHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltSingleEle35WPTightGsfL1EGMTPixelMatchFilter + process.hltSingleEle35WPTightGsfL1EGMTPMS2Filter + process.HLTGsfElectronSequence + process.hltSingleEle35WPTightGsfL1EGMTOneOEMinusOneOPFilter + process.hltSingleEle35WPTightGsfL1EGMTChi2Filter + process.hltSingleEle35WPTightGsfL1EGMTMissingHitsFilter + process.hltSingleEle35WPTightGsfL1EGMTDetaFilter + process.hltSingleEle35WPTightGsfL1EGMTDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltSingleEle35WPTightGsfL1EGMTTrackIsoFilter ) +process.HLTEle38WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG38L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle38noerWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle38noerWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle38noerWPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle38noerWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle38noerWPTightPixelMatchFilter + process.hltEle38noerWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle38noerWPTightGsfOneOEMinusOneOPFilter + process.hltEle38noerWPTightGsfMissingHitsFilter + process.hltEle38noerWPTightGsfDetaFilter + process.hltEle38noerWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle38noerWPTightGsfTrackIsoFilter ) +process.HLTEle40WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG40L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle40noerWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle40noerWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle40noerWPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle40noerWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle40noerWPTightPixelMatchFilter + process.hltEle40noerWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle40noerWPTightGsfOneOEMinusOneOPFilter + process.hltEle40noerWPTightGsfMissingHitsFilter + process.hltEle40noerWPTightGsfDetaFilter + process.hltEle40noerWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle40noerWPTightGsfTrackIsoFilter ) +process.HLTEle32L1DoubleEGWPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG32L1SingleAndDoubleEGEtFilter + process.hltEgammaClusterShape + process.hltEle32L1DoubleEGWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle32L1DoubleEGWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle32L1DoubleEGWPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle32L1DoubleEGWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle32L1DoubleEGWPTightPixelMatchFilter + process.hltEle32L1DoubleEGWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle32L1DoubleEGWPTightGsfOneOEMinusOneOPFilter + process.hltEle32L1DoubleEGWPTightGsfMissingHitsFilter + process.hltEle32L1DoubleEGWPTightGsfDetaFilter + process.hltEle32L1DoubleEGWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle32L1DoubleEGWPTightGsfTrackIsoFilter ) +process.HLTEle24erWPTightGsfForTauSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1EGerAndTauFilter + process.hltEG24L1EGandTauEtFilter + process.hltEgammaClusterShape + process.hltEle24erWPTightClusterShapeFilterForTau + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle24erWPTightHEFilterForTau + process.hltEgammaEcalPFClusterIso + process.hltEle24erWPTightEcalIsoFilterForTau + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle24erWPTightHcalIsoFilterForTau + process.HLTElePixelMatchSequence + process.hltEle24erWPTightPixelMatchFilterForTau + process.hltEle24erWPTightPMS2FilterForTau + process.HLTGsfElectronSequence + process.hltEle24erWPTightGsfOneOEMinusOneOPFilterForTau + process.hltEle24erWPTightGsfMissingHitsFilterForTau + process.hltEle24erWPTightGsfDetaFilterForTau + process.hltEle24erWPTightGsfDphiFilterForTau + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle24erWPTightGsfTrackIsoFilterForTau ) process.HLTRecoJetSequenceAK4UncorrectedPF = cms.Sequence( process.HLTDoCaloSequencePF + process.hltAK4CaloJetsPF ) process.HLTRecoJetSequenceAK4PrePF = cms.Sequence( process.HLTRecoJetSequenceAK4UncorrectedPF + process.hltAK4CaloJetsPFEt5 ) process.HLTParticleFlowSequenceForTaus = cms.Sequence( process.HLTPreshowerSequence + process.hltParticleFlowRecHitECALUnseeded + process.hltParticleFlowRecHitHBHE + process.hltParticleFlowRecHitHF + process.hltParticleFlowRecHitPSUnseeded + process.hltParticleFlowClusterECALUncorrectedUnseeded + process.hltParticleFlowClusterPSUnseeded + process.hltParticleFlowClusterECALUnseeded + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL + process.hltParticleFlowClusterHF + process.hltLightPFTracks + process.hltParticleFlowBlockForTaus + process.hltParticleFlowForTaus ) @@ -129020,8 +132395,7 @@ process.HLTDoFullUnpackingEgammaEcalMFSequence = cms.Sequence( process.hltEcalDigis + process.hltEcalPreshowerDigis + process.hltEcalUncalibRecHit + process.hltEcalDetIdToBeRecovered + process.hltEcalRecHit + process.hltEcalPreshowerRecHit ) process.HLTPFClusteringEcalMFForMuons = cms.Sequence( process.hltRecHitInRegionForMuonsMF + process.hltRecHitInRegionForMuonsES + process.hltParticleFlowRecHitECALForMuonsMF + process.hltParticleFlowRecHitPSForMuons + process.hltParticleFlowClusterECALUncorrectedForMuonsMF + process.hltParticleFlowClusterPSForMuons + process.hltParticleFlowClusterECALForMuonsMF ) process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalMFSequence + process.HLTDoLocalHcalSequence + process.hltTowerMakerForECALMF + process.hltTowerMakerForHCAL + process.hltFixedGridRhoFastjetECALMFForMuons + process.hltFixedGridRhoFastjetHCAL + process.HLTPFClusteringEcalMFForMuons + process.hltMuonEcalMFPFClusterIsoForMuons ) -process.HLTPFHcalRegClusteringForMuons = cms.Sequence( process.hltRegionalTowerForMuonsReg + process.hltParticleFlowRecHitHBHE + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL ) -process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons = cms.Sequence( process.HLTPFHcalRegClusteringForMuons + process.hltMuonHcalRegPFClusterIsoForMuons ) +process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons = cms.Sequence( process.HLTPFHcalClustering + process.hltMuonHcalRegPFClusterIsoForMuons ) process.HLTTrackReconstructionForIsoL3MuonIter02 = cms.Sequence( process.HLTPixelTrackingL3Muon + process.HLTDoLocalStripSequence + process.HLTIterativeTrackingL3MuonIter02 ) process.HLTMu20Eta2p1Tau24Eta2p1IsolationSequence = cms.Sequence( process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons + process.hltL3fBigORMu18erTauXXer2p1L1f0L2f10QL3Filtered20QL3pfecalIsoRhoFilteredEB0p14EE0p10 + process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons + process.hltL3fBigORMu18erTauXXer2p1L1f0L2f10QL3Filtered20QL3pfhcalIsoRhoFilteredHB0p16HE0p20 + process.HLTTrackReconstructionForIsoL3MuonIter02 + process.hltMuonTkRelIsolationCut0p07Map ) process.HLTLooseChargedIsoAntiMuonPFTau27Sequence = cms.Sequence( process.HLTLooseChargedIsoPFTauSequence + process.hltPFTau27 + process.hltSelectedPFTausTrackFinding + process.hltPFTau27Track + process.hltSelectedPFTausTrackFindingLooseChargedIsolation + process.hltPFTau27TrackLooseChargedIso + process.hltPFTauAgainstMuonDiscriminator + process.hltSelectedPFTausTrackFindingLooseChargedIsolationAgainstMuon + process.hltPFTau27TrackLooseChargedIsoAgainstMuon ) @@ -129124,7 +132498,7 @@ process.HLTMu8DiEle12CaloIdLTrackIdLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegL1MatchFilter + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegHEFilter + process.HLTElePixelMatchSequence + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegOneOEMinusOneOPFilter + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegDetaFilter + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegDphiFilter ) process.HLTSingleEle8CaloIdMGsfTrackIdMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaCandidatesWrapper + process.hltMu8Ele8EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu8Ele8HEFilter + process.hltEgammaClusterShape + process.hltMu8Ele8CaloIdMClusterShapeFilter + process.HLTElePixelMatchSequence + process.hltMu8Ele8CaloIdMPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu8Ele8CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + process.hltMu8Ele8CaloIdMGsfTrackIdMDetaFilter + process.hltMu8Ele8CaloIdMGsfTrackIdMDphiFilter ) process.HLTMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegSequence = cms.Sequence( process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0 + process.HLTL2muonrecoSequence + cms.ignore(process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL2Filtered5) + process.HLTL3muonrecoSequence + cms.ignore(process.hltL1fForIterL3Mu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0) + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3Filtered8 + process.HLTL3muontrkisovvlSequence + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3IsoFiltered8 ) -process.HLTMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + process.hltEgammaEcalPFClusterIso + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) +process.HLTMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + process.hltEgammaEcalPFClusterIso + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) process.HLTBtagDeepCSVSequencePF = cms.Sequence( process.hltVerticesPF + process.hltVerticesPFSelector + process.hltVerticesPFFilter + process.hltPFJetForBtagSelector + process.hltPFJetForBtag + process.hltDeepBLifetimeTagInfosPF + process.hltDeepInclusiveVertexFinderPF + process.hltDeepInclusiveSecondaryVerticesPF + process.hltDeepTrackVertexArbitratorPF + process.hltDeepInclusiveMergedVerticesPF + process.hltDeepSecondaryVertexTagInfosPF + process.hltDeepCombinedSecondaryVertexBJetTagsInfos + process.hltDeepCombinedSecondaryVertexBJetTagsPF ) process.HLTBTagMuDiJet20L1FastJetSequenceL25 = cms.Sequence( process.HLTL2muonrecoSequence + process.hltBSoftMuonGetJetsFromDiJet20L1FastJet + process.hltSelector4JetsDiJet20L1FastJet + process.hltBSoftMuonDiJet20L1FastJetL25Jets + process.hltBSoftMuonDiJet20L1FastJetL25TagInfos + process.hltBSoftMuonDiJet20L1FastJetL25BJetTagsByDR ) process.HLTBTagMuDiJet20L1FastJetMu5SelSequenceL3 = cms.Sequence( process.HLTL3muonrecoNocandSequence + process.hltBSoftMuonMu5L3 + process.hltBSoftMuonDiJet20L1FastJetMu5SelL3TagInfos + process.hltBSoftMuonDiJet20L1FastJetMu5SelL3BJetTagsByDR ) @@ -129153,14 +132527,14 @@ process.HLTBTagMuAK8DiJet170L1FastJetMu5SelSequenceL3noalgo = cms.Sequence( process.HLTL3muonrecoNocandSequence + process.hltBSoftMuonMu5L3noalgo + process.hltBSoftMuonAK8DiJet170L1FastJetMu5SelL3TagInfosnoalgo + process.hltBSoftMuonAK8DiJet170L1FastJetMu5SelL3BJetTagsByDRnoalgo ) process.HLTBTagMuAK8Jet170L1FastJetDoubleMu5SelSequenceL3noalgo = cms.Sequence( process.HLTL3muonrecoSequence + process.hltL3fL1sDoubleMu5Filtered + process.hltBSoftMuonDoubleMu5L3noalgo + process.hltBSoftMuonAK8Jet170L1FastJetDoubleMu5SelL3TagInfosnoalgo + process.hltBSoftMuonAK8Jet170L1FastJetDoubleMu5SelL3BJetTagsByDRnoalgo ) process.HLTBTagMuJet300L1AK8FastJetMu5SelSequenceL3noalgo = cms.Sequence( process.HLTL3muonrecoNocandSequence + process.hltBSoftMuonMu5L3noalgo + process.hltBSoftMuonJet300L1AK8FastJetMu5SelL3TagInfosnoalgo + process.hltBSoftMuonJet300L1AK8FastJetMu5SelL3BJetTagsByDRnoalgo ) -process.HLTEle15Ele8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1LowETSingleAndDoubleEGOrPairFilter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg2Filter + process.hltEgammaClusterShape + process.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg2Filter + process.hltEgammaEcalPFClusterIso + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + process.HLTElePixelMatchSequence + process.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + process.HLTGsfElectronSequence + process.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg2Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg2Filter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) -process.HLTEle23Ele12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrPairFilter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg2Filter + process.hltEgammaClusterShape + process.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg2Filter + process.hltEgammaEcalPFClusterIso + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + process.HLTElePixelMatchSequence + process.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + process.HLTGsfElectronSequence + process.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg2Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg2Filter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) +process.HLTEle15Ele8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1LowETSingleAndDoubleEGOrPairFilter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg2Filter + process.hltEgammaClusterShape + process.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg2Filter + process.hltEgammaEcalPFClusterIso + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + process.HLTElePixelMatchSequence + process.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + process.HLTGsfElectronSequence + process.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg2Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg2Filter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) +process.HLTEle23Ele12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrPairFilter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg2Filter + process.hltEgammaClusterShape + process.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg2Filter + process.hltEgammaEcalPFClusterIso + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + process.HLTElePixelMatchSequence + process.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + process.HLTGsfElectronSequence + process.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg2Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg2Filter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) process.HLTMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegSequence = cms.Sequence( process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL1Filtered0 + process.HLTL2muonrecoSequence + cms.ignore(process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL2Filtered10) + process.HLTL3muonrecoSequence + cms.ignore(process.hltL1fForIterL3Mu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL1Filtered0) + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL3Filtered23 + process.HLTL3muontrkisovvlSequence + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL3IsoFiltered23 ) -process.HLTMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHEFilter + process.hltEgammaEcalPFClusterIso + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDetaFilter + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) +process.HLTMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHEFilter + process.hltEgammaEcalPFClusterIso + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDetaFilter + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) process.HLTMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLMuonlegSequence = cms.Sequence( process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLMuonlegL1Filtered0 + process.HLTL2muonrecoSequence + cms.ignore(process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLMuonlegL2Filtered10) + process.HLTL3muonrecoSequence + cms.ignore(process.hltL1fForIterL3Mu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLMuonlegL1Filtered0) + process.hltL3fL1sMu23EG10Filtered23 + process.HLTL3muontrkisovvlSequence + process.hltMuon23Ele8RelTrkIsoFiltered0p4MuonLeg ) -process.HLTMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5OpenFilter + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegHEFilter + process.hltEgammaEcalPFClusterIso + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegDetaFilter + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) +process.HLTMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5OpenFilter + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegHEFilter + process.hltEgammaEcalPFClusterIso + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegDetaFilter + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltMu23TrkIsoVVLEle8CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) process.HLTMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegSequence = cms.Sequence( process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0 + process.HLTL2muonrecoSequence + cms.ignore(process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL2Filtered5) + process.HLTL3muonrecoSequence + cms.ignore(process.hltL1fForIterL3Mu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0) + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3Filtered12 + process.HLTL3muontrkisovvlSequence + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3IsoFiltered12 ) -process.HLTMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + process.hltEgammaEcalPFClusterIso + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) +process.HLTMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + process.hltEgammaEcalPFClusterIso + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) process.HLTMu12DoubleUnSeededPho20Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltEG20EtUnseededFilter + process.HLTDoLocalHcalSequence + process.hltTowerMakerForAll + process.hltEgammaHoverEUnseeded + process.hltMu12DiEG20HEUnseededFilter ) process.HLTPho20CaloIdLV2TripleSeededSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1TripleEGOrDoubleEGOrSingleEG + process.hltEG20EtL1TripleEGFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG20HEL1TripleEGFilter + process.hltEgammaClusterShape + process.hltEG20CaloIdLV2ClusterShapeL1TripleEGFilter ) process.HLTTriplePho20CaloIdLV2UnseededSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltEG20EtUnseededFilter + process.HLTDoLocalHcalSequence + process.hltEgammaHoverEUnseeded + process.hltEG20HEUnseededFilter + process.hltEgammaClusterShapeUnseeded + process.hltTriEG20CaloIdLV2ClusterShapeUnseededFilter ) @@ -129183,22 +132557,22 @@ process.HLTPhoton175Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + process.hltEG175EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG175HEFilter ) process.HLTPhoton200Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + process.hltEG200EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG200HEFilter ) process.HLTTrackReconstructionForIsoForPhotons = cms.Sequence( process.HLTPreAK4PFJetsRecoSequence + process.HLTTrackReconstructionForPFNoMu ) -process.HLTPhoton100EBTightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG100EBTightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG100EBTightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG100EBTightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG100EBTightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG100EBTightIDTightIsotEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG100EBTightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG100EBTightIDTightIsoTrackIsoFilter ) -process.HLTPhoton110EBTightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG110EBTightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG110EBTightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG110EBTightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG110EBTightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG110EBTightIDTightIsotEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG110EBTightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG110EBTightIDTightIsoTrackIsoFilter ) -process.HLTPhoton120EBTightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG120EBTightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG120EBTightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG120EBTightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG120EBTightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG120EBTightIDTightIsotEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG120EBTightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG120EBTightIDTightIsoTrackIsoFilter ) +process.HLTPhoton100EBTightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG100EBTightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG100EBTightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG100EBTightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG100EBTightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG100EBTightIDTightIsotEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG100EBTightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG100EBTightIDTightIsoTrackIsoFilter ) +process.HLTPhoton110EBTightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG110EBTightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG110EBTightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG110EBTightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG110EBTightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG110EBTightIDTightIsotEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG110EBTightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG110EBTightIDTightIsoTrackIsoFilter ) +process.HLTPhoton120EBTightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG120EBTightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG120EBTightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG120EBTightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG120EBTightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG120EBTightIDTightIsotEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG120EBTightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG120EBTightIDTightIsoTrackIsoFilter ) process.HLTPhoton100EBHE10Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG100EBHE10EtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG100EBHE10HEFilter ) process.HLTPhoton100EEHE10Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG100EEHE10EtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG100EEHE10HEFilter ) -process.HLTPhoton100EETightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG100EETightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG100EETightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG100EETightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG100EETightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG100EETightIDTightIsotEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG100EETightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG100EETightIDTightIsoTrackIsoFilter ) -process.HLTPhoton50R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG50R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG50R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG50R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG50R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG50R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG50R9Id90HE10IsoMTrackIsoFilter ) -process.HLTPhoton75R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG75R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG75R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG75R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG75R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG75R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG75R9Id90HE10IsoMTrackIsoFilter ) -process.HLTPhoton75R9Id90HE10IsoMEBOnlySequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG75R9Id90HE10IsoMEBOnlyEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG75R9Id90HE10IsoMEBOnlyHEFilter + process.hltEgammaR9ID + process.hltEG75R9Id90HE10IsoMEBOnlyR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG75R9Id90HE10IsoMEBOnlyEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG75R9Id90HE10IsoMEBOnlyHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG75R9Id90HE10IsoMEBOnlyTrackIsoFilter ) -process.HLTPhoton90R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG90R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG90R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG90R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG90R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG90R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG90R9Id90HE10IsoMTrackIsoFilter ) -process.HLTPhoton120R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG120R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG120R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG120R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG120R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG120R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG120R9Id90HE10IsoMTrackIsoFilter ) -process.HLTPhoton165R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG165R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG165R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG165R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG165R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG165R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG165R9Id90HE10IsoMTrackIsoFilter ) +process.HLTPhoton100EETightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG100EETightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG100EETightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG100EETightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG100EETightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG100EETightIDTightIsotEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG100EETightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG100EETightIDTightIsoTrackIsoFilter ) +process.HLTPhoton50R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG50R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG50R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG50R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG50R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG50R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG50R9Id90HE10IsoMTrackIsoFilter ) +process.HLTPhoton75R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG75R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG75R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG75R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG75R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG75R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG75R9Id90HE10IsoMTrackIsoFilter ) +process.HLTPhoton75R9Id90HE10IsoMEBOnlySequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG75R9Id90HE10IsoMEBOnlyEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG75R9Id90HE10IsoMEBOnlyHEFilter + process.hltEgammaR9ID + process.hltEG75R9Id90HE10IsoMEBOnlyR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG75R9Id90HE10IsoMEBOnlyEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG75R9Id90HE10IsoMEBOnlyHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG75R9Id90HE10IsoMEBOnlyTrackIsoFilter ) +process.HLTPhoton90R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG90R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG90R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG90R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG90R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG90R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG90R9Id90HE10IsoMTrackIsoFilter ) +process.HLTPhoton120R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG120R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG120R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG120R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG120R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG120R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG120R9Id90HE10IsoMTrackIsoFilter ) +process.HLTPhoton165R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG165R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG165R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG165R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG165R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG165R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG165R9Id90HE10IsoMTrackIsoFilter ) process.HLTDiphoton30L22R9Id85b90eORIso60CaloId15b35eANDHE12R9Id50b80eSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG30L1SingleAndDoubleEGOrEtFilter + process.hltEgammaR9ID + process.hltEG30LR9Id50b80eR9IdFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG30LHE12R9Id50b80eHEFilter + cms.ignore(process.hltEG30LR9Id85b90eHE12R9Id50b80eR9IdLastFilter) + process.hltEgammaClusterShape + cms.ignore(process.hltEG30LCaloId15b35eHE12R9Id50b80eClusterShapeFilter) + process.hltEgammaEcalPFClusterIso + cms.ignore(process.hltEG30LIso60CaloId15b35eHE12R9Id50b80eEcalIsoLastFilter) + process.hltEG30LRId85ORIso60CaloId15b35eANDHE12R9Id50b80eLegCombLastFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltDiEG22EtEta2p55UnseededFilter + process.hltEgammaR9IDUnseeded + process.hltDiEG22R9Id50b80eR9IdUnseededFilter + process.hltEgammaHoverEUnseeded + process.hltDiEG22HE12R9Id50b80eHEUnseededFilter + cms.ignore(process.hltEG22R9Id85b90eHE12R9Id50b80eR9UnseededLastFilter) + process.hltEgammaClusterShapeUnseeded + cms.ignore(process.hltEG22CaloId15b35eHE12R9Id50b80eClusterShapeUnseededFilter) + process.hltEgammaEcalPFClusterIsoUnseeded + cms.ignore(process.hltEG22Iso60CaloId15b35eHE12R9Id50b80eEcalIsoUnseededFilter) + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIsoUnseeded + cms.ignore(process.hltEG22Iso60CaloId15b35eHE12R9Id50b80eTrackIsoUnseededLastFilter) ) process.HLTDiphoton30PV18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55NewPixelMatchSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG30L1SingleAndDoubleEGOrEtFilter + process.hltEgammaR9ID + process.hltEG30PVR9Id50b80eR9IdFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG30PVHE10R9Id50b80eHEFilter + process.hltEG30PVR9Idb85e90HE10R9Id50b80eR9IdLastFilter + process.hltEgammaClusterShape + process.hltEG30PVCaloId15b35eHE10R9Id50b80eClusterShapeFilter + process.hltEgammaEcalPFClusterIso + process.hltEG30PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoFilter + process.hltEG30PVRId85ANDIso60CaloId15b35eANDHE10R9Id50b80eLegCombNewPixelMatchLastFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltDiEG18EtUnseededFilter + process.hltEgammaR9IDUnseeded + process.hltDiEG18PVR9Id50b80eR9IdUnseededFilter + process.hltEgammaHoverEUnseeded + process.hltDiEG18PVHE10R9Id50b80eHEUnseededFilter + process.HLTElePixelMatchUnseededSequence + process.hltDiEG18PVNewPixelMatchPMS2Filter + process.hltEG18PVR9Idb85e90HE10R9Id50b80eR9NewPixelMatchUnseededLastFilter + process.hltEgammaClusterShapeUnseeded + process.hltEG18PVCaloId15b35eHE10R9Id50b80eClusterShapeNewPixelMatchUnseededFilter + process.hltEgammaEcalPFClusterIsoUnseeded + process.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoNewPixelMatchUnseededFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIsoUnseeded + process.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eTrackIsoUnseededNewPixelMatchLastFilter + process.hltDiEG18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55CombMassNewPixelMatchLastFilter ) process.HLTDiphoton30PV18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55NoPixelVetoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG30L1SingleAndDoubleEGOrEtFilter + process.hltEgammaR9ID + process.hltEG30PVR9Id50b80eR9IdFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG30PVHE10R9Id50b80eHEFilter + process.hltEG30PVR9Idb85e90HE10R9Id50b80eR9IdLastFilter + process.hltEgammaClusterShape + process.hltEG30PVCaloId15b35eHE10R9Id50b80eClusterShapeFilter + process.hltEgammaEcalPFClusterIso + process.hltEG30PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoFilter + process.hltEG30PVRId85ANDIso60CaloId15b35eANDHE10R9Id50b80eLegCombNoPixelVetoLastFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltDiEG18EtUnseededFilter + process.hltEgammaR9IDUnseeded + process.hltDiEG18PVR9Id50b80eR9IdUnseededFilter + process.hltEgammaHoverEUnseeded + process.hltDiEG18PVHE10R9Id50b80eHEUnseededFilter + process.hltEG18PVR9Idb85e90HE10R9Id50b80eR9NoPixelVetoUnseededLastFilter + process.hltEgammaClusterShapeUnseeded + process.hltEG18PVCaloId15b35eHE10R9Id50b80eClusterShapeNoPixelVetoUnseededFilter + process.hltEgammaEcalPFClusterIsoUnseeded + process.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoNoPixelVetoUnseededFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIsoUnseeded + process.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eTrackIsoUnseededNoPixelVetoLastFilter + process.hltDiEG18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55CombMassNoPixelVetoLastFilter ) -process.HLTPhoton35R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1EGAndTauFilter + process.hltEG35R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG35R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG35R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG35R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG35R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG35R9Id90HE10IsoMTrackIsoFilter ) +process.HLTPhoton35R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1EGAndTauFilter + process.hltEG35R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG35R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG35R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG35R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG35R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG35R9Id90HE10IsoMTrackIsoFilter ) process.HLTMediumChargedIsoPFTauSequence = cms.Sequence( process.hltPFTauMediumAbsoluteChargedIsolationDiscriminator + process.hltPFTauMediumRelativeChargedIsolationDiscriminator + process.hltPFTauMediumAbsOrRelChargedIsolationDiscriminator ) process.HLTMediumChargedIsoPFTau35Sequence = cms.Sequence( process.HLTMediumChargedIsoPFTauSequence + process.hltPFTau35 + process.hltSelectedPFTausTrackFinding + process.hltPFTau35Track + process.hltPFTau2Prongs + process.hltSelectedPFTausTrackFindingMediumChargedIsolation + process.hltPFTau35TrackMediumChargedIso ) process.HLTIterativeTrackingTau3muNoL1MassIteration0 = cms.Sequence( process.hltPixelTracksForSeedsTau3muNoL1MassFilter + process.hltPixelTracksForSeedsTau3muNoL1MassFitter + process.hltPixelTracksTrackingRegionsForSeedsTau3muNoL1Mass + process.hltPixelLayerQuadruplets + process.hltPixelTracksHitDoubletsForSeedsTau3muNoL1Mass + process.hltPixelTracksHitQuadrupletsForSeedsTau3muNoL1Mass + process.hltPixelTracksForSeedsTau3muNoL1Mass + process.hltIter0DisplacedTau3muNoL1MassPixelSeedsFromPixelTracks + process.hltIter0DisplacedTau3muNoL1MassCkfTrackCandidates + process.hltIter0DisplacedTau3muNoL1MassCtfWithMaterialTracks + process.hltIter0DisplacedTau3muNoL1MassTrackCutClassifier + process.hltIter0DisplacedTau3muNoL1MassTrackSelectionHighPurity ) @@ -129219,13 +132593,13 @@ process.HLT2PromptTrackRequirementIter0DisplacedJetsMidPt = cms.Sequence( process.hltL3DisplacedDijetFullTracksJetTracksAssociatorAtVertexMidPt + process.hltL3DisplacedDijet100FullTracksTrackIPProducerMidPt + process.hltL3DisplacedDijetFullTracksJetTagProducerFromIPMidPt + process.hltTwoPromptHLTL3DisplacedDijetFullTracksHLTCaloJetTagFilterMidPt ) process.HLT2PromptTrackRequirementIter12DisplacedJetsMidPt = cms.Sequence( process.hltL4DisplacedDijetFullTracksJetPromptTracksAssociatorAtVertexMidPt + process.hltL4PromptDisplacedDijetFullTracksTrackIPProducerMidPt + process.hltL4PromptDisplacedDijetFullTracksJetTagProducerFromIPMidPt + process.hltL4PromptDisplacedDijetFullTracksHLTCaloJetTagFilterMidPt ) process.HLTDisplacedTrackRequirementDisplacedJetsMidPt = cms.Sequence( process.hltL4DisplacedDijetFullTracksJetTracksAssociatorAtVertexMidPt + process.hltL4TaggedDisplacedDijetFullTracksTrackIPProducerMidPt + process.hltL4DisplacedDijetFullTracksJetTagProducerFromIPMidPt + process.hltL4DisplacedDijetFullTracksHLTCaloJetTagFilterMidPt ) -process.HLTEle30erJetC34WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1IsoEG30erJetC34drMin0p3Filter + process.hltEG30L1IsoEGerJetC34drMin0p3EtFilter + process.hltEgammaClusterShape + process.hltEle30erJetC34WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle30erJetC34WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle30erJetC34WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle30erJetC34WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle30erJetC34WPTightPixelMatchFilter + process.hltEle30erJetC34WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle30erJetC34WPTightGsfOneOEMinusOneOPFilter + process.hltEle30erJetC34WPTightGsfMissingHitsFilter + process.hltEle30erJetC34WPTightGsfDetaFilter + process.hltEle30erJetC34WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle30erJetC34WPTightGsfTrackIsoFilter ) -process.HLTEle28erHTT100WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1IsoEG28erHTT100Filter + process.hltEG28L1IsoEG28erHTT100EtFilter + process.hltEgammaClusterShape + process.hltEle28erHTT100WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle28erHTT100WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle28erHTT100WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle28erHTT100WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle28erHTT100WPTightPixelMatchFilter + process.hltEle28erHTT100WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle28erHTT100WPTightGsfOneOEMinusOneOPFilter + process.hltEle28erHTT100WPTightGsfMissingHitsFilter + process.hltEle28erHTT100WPTightGsfDetaFilter + process.hltEle28erHTT100WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle28erHTT100WPTightGsfTrackIsoFilter ) +process.HLTEle30erJetC34WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1IsoEG30erJetC34drMin0p3Filter + process.hltEG30L1IsoEGerJetC34drMin0p3EtFilter + process.hltEgammaClusterShape + process.hltEle30erJetC34WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle30erJetC34WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle30erJetC34WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle30erJetC34WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle30erJetC34WPTightPixelMatchFilter + process.hltEle30erJetC34WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle30erJetC34WPTightGsfOneOEMinusOneOPFilter + process.hltEle30erJetC34WPTightGsfMissingHitsFilter + process.hltEle30erJetC34WPTightGsfDetaFilter + process.hltEle30erJetC34WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle30erJetC34WPTightGsfTrackIsoFilter ) +process.HLTEle28erHTT100WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1IsoEG28erHTT100Filter + process.hltEG28L1IsoEG28erHTT100EtFilter + process.hltEgammaClusterShape + process.hltEle28erHTT100WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle28erHTT100WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle28erHTT100WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle28erHTT100WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle28erHTT100WPTightPixelMatchFilter + process.hltEle28erHTT100WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle28erHTT100WPTightGsfOneOEMinusOneOPFilter + process.hltEle28erHTT100WPTightGsfMissingHitsFilter + process.hltEle28erHTT100WPTightGsfDetaFilter + process.hltEle28erHTT100WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle28erHTT100WPTightGsfTrackIsoFilter ) process.HLTPFHcalClusteringForEgammaUnseeded = cms.Sequence( process.hltParticleFlowRecHitHBHE + process.hltParticleFlowRecHitHF + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL + process.hltParticleFlowClusterHFForEgammaUnseeded ) -process.HLTEle28HighEtaSC20Mass55Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEle28HighEtaSC20EtFilter + process.hltEgammaClusterShape + process.hltEle28HighEtaSC20ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle28HighEtaSC20HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle28HighEtaSC20EcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle28HighEtaSC20HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle28HighEtaSC20PixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle28HighEtaSC20OneOEMinusOneOPFilter + process.hltEle28HighEtaSC20DetaFilter + process.hltEle28HighEtaSC20DphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle28HighEtaSC20TrackIsoFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltDiEG20EtUnseededFilter + process.hltEgammaClusterShapeUnseeded + process.hltEle28HighEtaSC20ClusterShapeUnseededFilter + process.hltEgammaEcalPFClusterIsoUnseeded + process.hltEle28HighEtaSC20EcalIsoFilterUnseeded + process.hltEgammaHoverEUnseeded + process.hltEle28HighEtaSC20HEFilterUnseeded + process.HLTPFHcalClusteringForEgammaUnseeded + process.hltEgammaHcalPFClusterIsoUnseeded + process.hltEle28HighEtaSC20HcalIsoFilterUnseeded + process.hltHighEtaSC20Selector + process.hltHighEtaSC20SelectorFilter + process.hltEle28HighEtaSC20Mass55Filter ) +process.HLTEle28HighEtaSC20Mass55Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEle28HighEtaSC20EtFilter + process.hltEgammaClusterShape + process.hltEle28HighEtaSC20ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle28HighEtaSC20HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle28HighEtaSC20EcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle28HighEtaSC20HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle28HighEtaSC20PixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle28HighEtaSC20OneOEMinusOneOPFilter + process.hltEle28HighEtaSC20DetaFilter + process.hltEle28HighEtaSC20DphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle28HighEtaSC20TrackIsoFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltDiEG20EtUnseededFilter + process.hltEgammaClusterShapeUnseeded + process.hltEle28HighEtaSC20ClusterShapeUnseededFilter + process.hltEgammaEcalPFClusterIsoUnseeded + process.hltEle28HighEtaSC20EcalIsoFilterUnseeded + process.hltEgammaHoverEUnseeded + process.hltEle28HighEtaSC20HEFilterUnseeded + process.HLTPFHcalClusteringForEgammaUnseeded + process.hltEgammaHcalPFClusterIsoUnseeded + process.hltEle28HighEtaSC20HcalIsoFilterUnseeded + process.hltHighEtaSC20Selector + process.hltHighEtaSC20SelectorFilter + process.hltEle28HighEtaSC20Mass55Filter ) process.HLTPhoton23Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGDoubleMu4OSEG12ORDoubleMu5OSEG12Filter + process.hltEG23EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG23HEFilter ) -process.HLTEle15VVVLGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5OpenFilter + process.hltEG15EtFilter + process.hltEgammaClusterShape + process.hltEle15VVVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15VVVLHEFilter + process.hltEgammaEcalPFClusterIsoR02 + process.hltEle15VVVLEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoR02 + process.hltEle15VVVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle15VVVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle15VVVLGsfOneOEMinusOneOPFilter + process.hltEle15VVVLGsfChi2Filter + process.hltEle15VVVLGsfMissingHitsFilter + process.hltEle15VVVLGsfDetaFilter + process.hltEle15VVVLGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15VVVLGsfTrackIsoFilter ) -process.HLTEle50VVVLGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5OpenFilter + process.hltEG50IsoVVVLEtFilter + process.hltEgammaClusterShape + process.hltEle50VVVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle50VVVLHEFilter + process.hltEgammaEcalPFClusterIsoR02 + process.hltEle50VVVLEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoR02 + process.hltEle50VVVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle50VVVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle50VVVLGsfOneOEMinusOneOPFilter + process.hltEle50VVVLGsfChi2Filter + process.hltEle50VVVLGsfMissingHitsFilter + process.hltEle50VVVLGsfDetaFilter + process.hltEle50VVVLGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle50VVVLGsfTrackIsoFilter ) +process.HLTEle15VVVLGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5OpenFilter + process.hltEG15EtFilter + process.hltEgammaClusterShape + process.hltEle15VVVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15VVVLHEFilter + process.hltEgammaEcalPFClusterIsoR02 + process.hltEle15VVVLEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoR02 + process.hltEle15VVVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle15VVVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle15VVVLGsfOneOEMinusOneOPFilter + process.hltEle15VVVLGsfChi2Filter + process.hltEle15VVVLGsfMissingHitsFilter + process.hltEle15VVVLGsfDetaFilter + process.hltEle15VVVLGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15VVVLGsfTrackIsoFilter ) +process.HLTEle50VVVLGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5OpenFilter + process.hltEG50IsoVVVLEtFilter + process.hltEgammaClusterShape + process.hltEle50VVVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle50VVVLHEFilter + process.hltEgammaEcalPFClusterIsoR02 + process.hltEle50VVVLEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoR02 + process.hltEle50VVVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle50VVVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle50VVVLGsfOneOEMinusOneOPFilter + process.hltEle50VVVLGsfChi2Filter + process.hltEle50VVVLGsfMissingHitsFilter + process.hltEle50VVVLGsfDetaFilter + process.hltEle50VVVLGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle50VVVLGsfTrackIsoFilter ) process.HLTMuVVVLCombinedIsolationR02Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTDoLocalHcalSequence + process.hltTowerMakerForAll + process.hltFixedGridRhoFastjetAllCaloForMuons + process.hltL3CaloMuonCorrectedVVVLIsolations + process.HLTTrackReconstructionForIsoL3MuonIter02 + process.hltL3MuonCombRelIsolationVVVL ) process.HLTDiMu4Ele9CaloIdLTrackIdLMuonlegSequence = cms.Sequence( process.hltDiMu4Ele9CaloIdLTrackIdLMuonlegL1Filtered0 + process.HLTL2muonrecoSequence + cms.ignore(process.hltDiMu4Ele9CaloIdLTrackIdLMuonlegL2Filtered4) + process.HLTL3muonrecoSequence + cms.ignore(process.hltL1fForIterL3DiMu4Ele9CaloIdLTrackIdLMuonlegL1Filtered0) + process.hltL3fL1DoubleMu4EG9f0Filtered4 ) process.HLTDiMu4Ele9CaloIdLTrackIdLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegL1MatchFilter + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegHEFilter + process.HLTElePixelMatchSequence + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegOneOEMinusOneOPFilter + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegDetaFilter + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegDphiFilter ) @@ -129250,10 +132624,10 @@ process.HLTL3muonrecoNocandSequenceNoVtx = cms.Sequence( process.HLTIterL3muonTkCandidateSequenceNoVtx + process.hltIterL3MuonMergedNoVtx + process.hltIterL3MuonAndMuonFromL1MergedNoVtx + process.hltL3MuonsIterL3LinksNoVtx + process.hltIterL3MuonsNoVtx ) process.HLTL3muonrecoSequenceNoVtx = cms.Sequence( process.HLTL3muonrecoNocandSequenceNoVtx + process.hltIterL3MuonCandidatesNoVtx ) process.HLTTrackerMuonSequenceNoVtx = cms.Sequence( process.HLTDoLocalPixelSequence + process.HLTRecoPixelTracksSequence + process.HLTDoLocalStripSequence + process.hltMuTrackSeeds + process.hltMuCkfTrackCandidates + process.hltMuCtfTracks + process.HLTL3muonrecoNocandSequenceNoVtx + process.hltDiMuonMergingNoVtx + process.hltDiMuonLinksNoVtx + process.hltGlbTrkMuonsNoVtx + process.hltGlbTrkMuonCandsNoVtx ) -process.HLTEle8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle8CaloIdLTrackIdLIsoVLL1MatchFilter + process.hltEle8CaloIdLTrackIdLIsoVLEtFilter + process.hltEgammaClusterShape + process.hltEle8CaloIdLTrackIdLIsoVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle8CaloIdLTrackIdLIsoVLHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle8CaloIdLTrackIdLIsoVLEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle8CaloIdLTrackIdLIsoVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle8CaloIdLTrackIdLIsoVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle8CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + process.hltEle8CaloIdLTrackIdLIsoVLDetaFilter + process.hltEle8CaloIdLTrackIdLIsoVLDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle8CaloIdLTrackIdLIsoVLTrackIsoFilter ) -process.HLTEle12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle12CaloIdLTrackIdLIsoVLL1MatchFilter + process.hltEle12CaloIdLTrackIdLIsoVLEtFilter + process.hltEgammaClusterShape + process.hltEle12CaloIdLTrackIdLIsoVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle12CaloIdLTrackIdLIsoVLHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle12CaloIdLTrackIdLIsoVLEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle12CaloIdLTrackIdLIsoVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle12CaloIdLTrackIdLIsoVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle12CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + process.hltEle12CaloIdLTrackIdLIsoVLDetaFilter + process.hltEle12CaloIdLTrackIdLIsoVLDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle12CaloIdLTrackIdLIsoVLTrackIsoFilter ) -process.HLTEle15CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle15CaloIdLTrackIdLIsoVLJet30L1MatchFilter + process.hltEle15CaloIdLTrackIdLIsoVLJet30EtFilter + process.hltEgammaClusterShape + process.hltEle15CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15CaloIdLTrackIdLIsoVLJet30HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle15CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle15CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle15CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle15CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + process.hltEle15CaloIdLTrackIdLIsoVLJet30DetaFilter + process.hltEle15CaloIdLTrackIdLIsoVLJet30DphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) -process.HLTEle23CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle23CaloIdLTrackIdLIsoVLJet30L1MatchFilter + process.hltEle23CaloIdLTrackIdLIsoVLJet30EtFilter + process.hltEgammaClusterShape + process.hltEle23CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle23CaloIdLTrackIdLIsoVLJet30HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle23CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle23CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle23CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle23CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + process.hltEle23CaloIdLTrackIdLIsoVLJet30DetaFilter + process.hltEle23CaloIdLTrackIdLIsoVLJet30DphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle23CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) +process.HLTEle8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle8CaloIdLTrackIdLIsoVLL1MatchFilter + process.hltEle8CaloIdLTrackIdLIsoVLEtFilter + process.hltEgammaClusterShape + process.hltEle8CaloIdLTrackIdLIsoVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle8CaloIdLTrackIdLIsoVLHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle8CaloIdLTrackIdLIsoVLEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle8CaloIdLTrackIdLIsoVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle8CaloIdLTrackIdLIsoVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle8CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + process.hltEle8CaloIdLTrackIdLIsoVLDetaFilter + process.hltEle8CaloIdLTrackIdLIsoVLDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle8CaloIdLTrackIdLIsoVLTrackIsoFilter ) +process.HLTEle12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle12CaloIdLTrackIdLIsoVLL1MatchFilter + process.hltEle12CaloIdLTrackIdLIsoVLEtFilter + process.hltEgammaClusterShape + process.hltEle12CaloIdLTrackIdLIsoVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle12CaloIdLTrackIdLIsoVLHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle12CaloIdLTrackIdLIsoVLEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle12CaloIdLTrackIdLIsoVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle12CaloIdLTrackIdLIsoVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle12CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + process.hltEle12CaloIdLTrackIdLIsoVLDetaFilter + process.hltEle12CaloIdLTrackIdLIsoVLDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle12CaloIdLTrackIdLIsoVLTrackIsoFilter ) +process.HLTEle15CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle15CaloIdLTrackIdLIsoVLJet30L1MatchFilter + process.hltEle15CaloIdLTrackIdLIsoVLJet30EtFilter + process.hltEgammaClusterShape + process.hltEle15CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15CaloIdLTrackIdLIsoVLJet30HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle15CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle15CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle15CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle15CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + process.hltEle15CaloIdLTrackIdLIsoVLJet30DetaFilter + process.hltEle15CaloIdLTrackIdLIsoVLJet30DphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) +process.HLTEle23CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle23CaloIdLTrackIdLIsoVLJet30L1MatchFilter + process.hltEle23CaloIdLTrackIdLIsoVLJet30EtFilter + process.hltEgammaClusterShape + process.hltEle23CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle23CaloIdLTrackIdLIsoVLJet30HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle23CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle23CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle23CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle23CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + process.hltEle23CaloIdLTrackIdLIsoVLJet30DetaFilter + process.hltEle23CaloIdLTrackIdLIsoVLJet30DphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle23CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) process.HLTEle8CaloIdMGsfTrkIdMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaCandidatesWrapper + process.hltEle8EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle8HEFilter + process.hltEgammaClusterShape + process.hltEle8CaloIdMClusterShapeFilter + process.HLTElePixelMatchSequence + process.hltEle8CaloIdMPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle8CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + process.hltEle8CaloIdMGsfTrackIdMDetaFilter + process.hltEle8CaloIdMGsfTrackIdMDphiFilter ) process.HLTEle17CaloIdMGsfTrkIdMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaCandidatesWrapper + process.hltEle17EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle17HEFilter + process.hltEgammaClusterShape + process.hltEle17CaloIdMClusterShapeFilter + process.HLTElePixelMatchSequence + process.hltEle17CaloIdMPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle17CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + process.hltEle17CaloIdMGsfTrackIdMDetaFilter + process.hltEle17CaloIdMGsfTrackIdMDphiFilter ) process.HLTEle23CaloIdMGsfTrkIdMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaCandidatesWrapper + process.hltEle23EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle23HEFilter + process.hltEgammaClusterShape + process.hltEle23CaloIdMClusterShapeFilter + process.HLTElePixelMatchSequence + process.hltEle23CaloIdMPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle23CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + process.hltEle23CaloIdMGsfTrackIdMDetaFilter + process.hltEle23CaloIdMGsfTrackIdMDphiFilter ) @@ -129265,8 +132639,8 @@ process.HLTEle250CaloIdVTGsfTrkIdTGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + process.hltEG250EtFilter + process.hltEgammaClusterShape + process.hltEG250CaloIdVTClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG250CaloIdVTHEFilter + process.HLTElePixelMatchSequence + process.hltEle250CaloIdVTPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle250CaloIdVTGsfTrkIdTGsfDetaFilter + process.hltEle250CaloIdVTGsfTrkIdTGsfDphiFilter ) process.HLTEle300CaloIdVTGsfTrkIdTGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + process.hltEG300EtFilter + process.hltEgammaClusterShape + process.hltEG300CaloIdVTClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG300CaloIdVTHEFilter + process.HLTElePixelMatchSequence + process.hltEle300CaloIdVTPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle300CaloIdVTGsfTrkIdTGsfDetaFilter + process.hltEle300CaloIdVTGsfTrkIdTGsfDphiFilter ) process.HLTPFHT350MinPFJet15Sequence = cms.Sequence( process.HLTAK4CaloJetsSequence + process.hltHtMhtJet10 + process.hltHT175Jet10 + process.HLTAK4PFJetsSequence + process.hltPFHTJet15 + process.hltPFHT350Jet15 ) -process.HLTPhoton60R9Id90CaloIdLIsoLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + process.hltEG60EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG60HEFilter + process.hltEgammaR9ID + process.hltEG60R9Id90CaloIdLIsoLR9IdFilter + process.hltEgammaClusterShape + process.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + process.hltEgammaEcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter ) -process.HLTPhoton60R9Id90CaloIdLIsoLDisplacedIdLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + process.hltEG60EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG60HEFilter + process.hltEgammaR9ID + process.hltEG60R9Id90CaloIdLIsoLR9IdFilter + process.hltEgammaClusterShape + process.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + process.hltEgammaEcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter + process.hltEG60R9Id90CaloIdLIsoLDisplacedIdFilter ) +process.HLTPhoton60R9Id90CaloIdLIsoLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + process.hltEG60EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG60HEFilter + process.hltEgammaR9ID + process.hltEG60R9Id90CaloIdLIsoLR9IdFilter + process.hltEgammaClusterShape + process.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + process.hltEgammaEcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter ) +process.HLTPhoton60R9Id90CaloIdLIsoLDisplacedIdLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + process.hltEG60EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG60HEFilter + process.hltEgammaR9ID + process.hltEG60R9Id90CaloIdLIsoLR9IdFilter + process.hltEgammaClusterShape + process.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + process.hltEgammaEcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter + process.hltEG60R9Id90CaloIdLIsoLDisplacedIdFilter ) process.HLTSC3018EIso15HE30eMass70Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGWithJetAndTauFilter + process.hltEG30L1SingleAndDoubleEGWithTauWithJetEtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHToverET + process.hltEG30HE30HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEG30EIso15HE30EcalIsoLastFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltDiEG18EtEta2p55UnseededFilter + process.hltEgammaHoverEUnseeded + process.hltDiEG18HE30eHEUnseededFilter + process.hltEgammaEcalPFClusterIsoUnseeded + process.hltEG18EIso15HE30EcalIsoUnseededFilter + process.hltDiEG18EIso15ANDHE30Mass70CombMassLastFilter ) process.HLTBeginSequenceL1Fat = cms.Sequence( process.hltTriggerType + process.hltL1EventNumberL1Fat + process.HLTL1UnpackerSequence + process.HLTBeamSpot ) process.HLTBeginSequenceRandom = cms.Sequence( process.hltRandomEventsFilter + process.hltGtStage2Digis ) @@ -129274,12 +132648,11 @@ process.HLTNoPUSequence = cms.Sequence( process.HLTDoLocalPixelSequenceRegForBTag + process.HLTFastRecopixelvertexingSequence + process.hltPixelTracksForNoPUFilter + process.hltSelectorJets20L1FastJetForNoPU + process.hltPixelTracksForNoPUFitter + process.hltPixelTracksTrackingRegionsForNoPU + process.hltPixelTracksHitDoubletsForNoPU + process.hltPixelTracksHitQuadrupletsForNoPU + process.hltPixelTracksForNoPU + process.hltCaloJetFromPV ) process.HLTCaloBTagScoutingSequence = cms.Sequence( process.HLTAK4CaloJetsSequence + process.HLTNoPUSequence + process.HLTBtagDeepCSVSequenceL3 ) process.HLTMuIsolationSequence = cms.Sequence( process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons + process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons + process.HLTTrackReconstructionForIsoL3MuonIter02 + process.hltMuonTkRelIsolationCut0p07Map ) -process.HLTPFScoutingSequence = cms.Sequence( process.HLTAK4PFJetsSequence + process.hltPFMETProducer + process.HLTMuIsolationSequence + process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEgammaEcalPFClusterIso + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.HLTElePixelMatchSequence + process.HLTGsfElectronSequence + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso ) +process.HLTPFScoutingSequence = cms.Sequence( process.HLTAK4PFJetsSequence + process.hltPFMETProducer + process.HLTMuIsolationSequence + process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEgammaEcalPFClusterIso + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.HLTElePixelMatchSequence + process.HLTGsfElectronSequence + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso ) process.HLTBTagScoutingSequence = cms.Sequence( process.HLTAK4PFJetsSequence + process.HLTBtagDeepCSVSequencePF ) process.HLTPFClusteringEcalMFForMuonsNoVtx = cms.Sequence( process.hltRecHitInRegionForMuonsMFnoVtx + process.hltRecHitInRegionForMuonsESNoVtx + process.hltParticleFlowRecHitECALForMuonsMFNoVtx + process.hltParticleFlowRecHitPSForMuonsNoVtx + process.hltParticleFlowClusterECALUncorrectedForMuonsMFNoVtx + process.hltParticleFlowClusterPSForMuonsNoVtx + process.hltParticleFlowClusterECALForMuonsMFNoVtx ) process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsNoVtx = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalMFSequence + process.HLTDoLocalHcalSequence + process.hltTowerMakerForECALMF + process.hltTowerMakerForHCAL + process.hltFixedGridRhoFastjetECALMFForMuons + process.hltFixedGridRhoFastjetHCAL + process.HLTPFClusteringEcalMFForMuonsNoVtx + process.hltMuonEcalMFPFClusterIsoForMuonsNoVtx ) -process.HLTPFHcalClusteringForMuonsNoVtx = cms.Sequence( process.hltRegionalTowerForMuonsNoVtx + process.hltParticleFlowRecHitHBHE + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL ) -process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsNoVtx = cms.Sequence( process.HLTPFHcalClusteringForMuonsNoVtx + process.hltMuonHcalPFClusterIsoForMuonsNoVtx ) +process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsNoVtx = cms.Sequence( process.HLTPFHcalClustering + process.hltMuonHcalPFClusterIsoForMuonsNoVtx ) process.HLTPixelTrackingL3MuonNoVtx = cms.Sequence( process.hltL3MuonVertexNoVtx + process.HLTDoLocalPixelSequence + process.hltPixelLayerQuadruplets + process.hltPixelTracksL3MuonFilter + process.hltPixelTracksL3MuonFitter + process.hltPixelTracksTrackingRegionsL3MuonNoVtx + process.hltPixelTracksHitDoubletsL3MuonNoVtx + process.hltPixelTracksHitQuadrupletsL3MuonNoVtx + process.hltPixelTracksL3MuonNoVtx + process.hltPixelVerticesL3MuonNoVtx ) process.HLTIterativeTrackingL3MuonIteration0NoVtx = cms.Sequence( process.hltPixelTracksForSeedsL3MuonFilter + process.hltPixelTracksForSeedsL3MuonFitter + process.hltPixelTracksTrackingRegionsForSeedsL3MuonNoVtx + process.hltPixelTracksHitDoubletsForSeedsL3MuonNoVtx + process.hltPixelTracksHitQuadrupletsForSeedsL3MuonNoVtx + process.hltPixelTracksForSeedsL3MuonNoVtx + process.hltIter0L3MuonPixelSeedsFromPixelTracksNoVtx + process.hltIter0L3MuonCkfTrackCandidatesNoVtx + process.hltIter0L3MuonCtfWithMaterialTracksNoVtx + process.hltIter0L3MuonTrackCutClassifierNoVtx + process.hltIter0L3MuonTrackSelectionHighPurityNoVtx ) process.HLTIterativeTrackingL3MuonIteration1NoVtx = cms.Sequence( process.hltIter1L3MuonClustersRefRemovalNoVtx + process.hltIter1L3MuonMaskedMeasurementTrackerEventNoVtx + process.hltIter1L3MuonPixelLayerQuadrupletsNoVtx + process.hltIter1L3MuonPixelTrackingRegionsNoVtx + process.hltIter1L3MuonPixelClusterCheck + process.hltIter1L3MuonPixelHitDoubletsNoVtx + process.hltIter1L3MuonPixelHitQuadrupletsNoVtx + process.hltIter1L3MuonPixelSeedsNoVtx + process.hltIter1L3MuonCkfTrackCandidatesNoVtx + process.hltIter1L3MuonCtfWithMaterialTracksNoVtx + process.hltIter1L3MuonTrackCutClassifierPromptNoVtx + process.hltIter1L3MuonTrackCutClassifierDetachedNoVtx + process.hltIter1L3MuonTrackCutClassifierMergedNoVtx + process.hltIter1L3MuonTrackSelectionHighPurityNoVtx ) @@ -129287,7 +132660,42 @@ process.HLTIterativeTrackingL3MuonIter02NoVtx = cms.Sequence( process.HLTIterativeTrackingL3MuonIteration0NoVtx + process.HLTIterativeTrackingL3MuonIteration1NoVtx + process.hltIter1L3MuonMergedNoVtx + process.HLTIterativeTrackingL3MuonIteration2NoVtx + process.hltIter2L3MuonMergedNoVtx ) process.HLTTrackReconstructionForIsoL3MuonIter02NoVtx = cms.Sequence( process.HLTPixelTrackingL3MuonNoVtx + process.HLTDoLocalStripSequence + process.HLTIterativeTrackingL3MuonIter02NoVtx ) process.HLTMuIsolationSequenceNoVtx = cms.Sequence( process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsNoVtx + process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsNoVtx + process.HLTTrackReconstructionForIsoL3MuonIter02NoVtx + process.hltMuonTkRelIsolationCut0p09MapNoVtx ) -process.HLTPFScoutingSequenceNoVtx = cms.Sequence( process.HLTAK4PFJetsSequence + process.hltPFMETProducer + process.HLTMuIsolationSequenceNoVtx + process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEgammaEcalPFClusterIso + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.HLTElePixelMatchSequence + process.HLTGsfElectronSequence + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso ) +process.HLTPFScoutingSequenceNoVtx = cms.Sequence( process.HLTAK4PFJetsSequence + process.hltPFMETProducer + process.HLTMuIsolationSequenceNoVtx + process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEgammaEcalPFClusterIso + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.HLTElePixelMatchSequence + process.HLTGsfElectronSequence + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso ) +process.HLTTrackReconstructionForPixelOnlyPF = cms.Sequence( process.HLTDoLocalPixelSequence + process.HLTRecopixelvertexingSequence + process.hltPixelTracksZetaClean + process.hltPixelOnlyPFMuonMerging + process.hltPixelOnlyMuonLinks + process.hltPixelOnlyMuons ) +process.HLTPixelOnlyParticleFlowSequence = cms.Sequence( process.HLTPreshowerSequence + process.hltParticleFlowRecHitECALUnseeded + process.hltParticleFlowRecHitHBHE + process.hltParticleFlowRecHitHF + process.hltParticleFlowRecHitPSUnseeded + process.hltParticleFlowClusterECALUncorrectedUnseeded + process.hltParticleFlowClusterPSUnseeded + process.hltParticleFlowClusterECALUnseeded + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL + process.hltParticleFlowClusterHF + process.hltLightPixelOnlyPFTracks + process.hltPixelOnlyParticleFlowBlock + process.hltPixelOnlyParticleFlow ) +process.HLTAK4PixelOnlyPFJetsReconstructionSequence = cms.Sequence( process.HLTL2muonrecoSequence + process.HLTL3muonrecoSequence + process.HLTTrackReconstructionForPixelOnlyPF + process.HLTPixelOnlyParticleFlowSequence + process.hltAK4PixelOnlyPFJets + process.hltAK4PixelOnlyPFJetsLooseID + process.hltAK4PixelOnlyPFJetsTightID ) +process.HLTAK4PixelOnlyPFCorrectorProducersSequence = cms.Sequence( process.hltAK4PixelOnlyPFFastJetCorrector + process.hltAK4PixelOnlyPFRelativeCorrector + process.hltAK4PixelOnlyPFAbsoluteCorrector + process.hltAK4PixelOnlyPFResidualCorrector + process.hltAK4PixelOnlyPFCorrector ) +process.HLTAK4PixelOnlyPFJetsCorrectionSequence = cms.Sequence( process.hltFixedGridRhoFastjetPixelOnlyAll + process.HLTAK4PixelOnlyPFCorrectorProducersSequence + process.hltAK4PixelOnlyPFJetsCorrected + process.hltAK4PixelOnlyPFJetsLooseIDCorrected + process.hltAK4PixelOnlyPFJetsTightIDCorrected ) +process.HLTAK4PixelOnlyPFJetsSequence = cms.Sequence( process.HLTPreAK4PFJetsRecoSequence + process.HLTAK4PixelOnlyPFJetsReconstructionSequence + process.HLTAK4PixelOnlyPFJetsCorrectionSequence ) +process.HLTPixelOnlyPFScoutingSequence = cms.Sequence( process.HLTAK4PixelOnlyPFJetsSequence + process.hltPixelOnlyPFMETProducer + process.HLTMuIsolationSequence + process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEgammaEcalPFClusterIso + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.HLTElePixelMatchSequence + process.HLTGsfElectronSequence + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso ) +process.HLTL2muonrecoSequenceScoutingNoVtx = cms.Sequence( process.HLTL2muonrecoNocandSequence + process.hltL2MuonCandidatesScoutingNoVtx ) +process.HLTIterL3OImuonTkCandidateSequenceScoutingNoVtx = cms.Sequence( process.hltIterL3OISeedsFromL2MuonsScoutingNoVtx + process.hltIterL3OITrackCandidatesScoutingNoVtx + process.hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx + process.hltIterL3OIMuonTrackCutClassifierScoutingNoVtx + process.hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx + process.hltL3MuonsIterL3OIScoutingNoVtx ) +process.HLTIterL3MuonRecoPixelTracksSequenceScoutingNoVtx = cms.Sequence( process.hltIterL3MuonPixelTracksFilterScoutingNoVtx + process.hltIterL3MuonPixelTracksFitterScoutingNoVtx + process.hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx + process.hltIterL3MuonPixelLayerQuadrupletsScoutingNoVtx + process.hltIterL3MuonPixelTracksHitDoubletsScoutingNoVtx + process.hltIterL3MuonPixelTracksHitQuadrupletsScoutingNoVtx + process.hltIterL3MuonPixelTracksScoutingNoVtx ) +process.HLTIterL3MuonRecopixelvertexingSequenceScoutingNoVtx = cms.Sequence( process.HLTIterL3MuonRecoPixelTracksSequenceScoutingNoVtx + process.hltIterL3MuonPixelVerticesScoutingNoVtx + process.hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx ) +process.HLTIterativeTrackingIteration0ForIterL3MuonScoutingNoVtx = cms.Sequence( process.hltIter0IterL3MuonPixelSeedsFromPixelTracksScoutingNoVtx + process.hltIter0IterL3MuonCkfTrackCandidatesScoutingNoVtx + process.hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx + process.hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx + process.hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx ) +process.HLTIterativeTrackingIteration2ForIterL3MuonScoutingNoVtx = cms.Sequence( process.hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx + process.hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx + process.hltIter2IterL3MuonPixelLayerTripletsScoutingNoVtx + process.hltIter2IterL3MuonPixelClusterCheckScoutingNoVtx + process.hltIter2IterL3MuonPixelHitDoubletsScoutingNoVtx + process.hltIter2IterL3MuonPixelHitTripletsScoutingNoVtx + process.hltIter2IterL3MuonPixelSeedsScoutingNoVtx + process.hltIter2IterL3MuonCkfTrackCandidatesScoutingNoVtx + process.hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx + process.hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx + process.hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx ) +process.HLTIterativeTrackingIter02ForIterL3MuonScoutingNoVtx = cms.Sequence( process.HLTIterativeTrackingIteration0ForIterL3MuonScoutingNoVtx + process.HLTIterativeTrackingIteration2ForIterL3MuonScoutingNoVtx + process.hltIter2IterL3MuonMergedScoutingNoVtx ) +process.HLTIterL3IOmuonTkCandidateSequenceScoutingNoVtx = cms.Sequence( process.HLTIterL3MuonRecopixelvertexingSequenceScoutingNoVtx + process.HLTIterativeTrackingIter02ForIterL3MuonScoutingNoVtx + process.hltL3MuonsIterL3IOScoutingNoVtx ) +process.HLTIterL3OIAndIOFromL2muonTkCandidateSequenceScoutingNoVtx = cms.Sequence( process.HLTIterL3OImuonTkCandidateSequenceScoutingNoVtx + process.hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx + process.hltIterL3OIL3MuonsScoutingNoVtx + process.hltIterL3OIL3MuonCandidatesScoutingNoVtx + process.hltL2SelectorForL3IOScoutingNoVtx + process.HLTIterL3IOmuonTkCandidateSequenceScoutingNoVtx + process.hltIterL3MuonsFromL2LinksCombinationScoutingNoVtx + process.hltIterL3MuonsFromL2ScoutingNoVtx ) +process.HLTRecoPixelTracksSequenceForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( process.hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx + process.hltIterL3FromL1MuonPixelLayerQuadrupletsScoutingNoVtx + process.hltIterL3FromL1MuonPixelTracksHitDoubletsScoutingNoVtx + process.hltIterL3FromL1MuonPixelTracksHitQuadrupletsScoutingNoVtx + process.hltIterL3FromL1MuonPixelTracksScoutingNoVtx ) +process.HLTRecopixelvertexingSequenceForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( process.HLTRecoPixelTracksSequenceForIterL3FromL1MuonScoutingNoVtx + process.hltIterL3FromL1MuonPixelVerticesScoutingNoVtx + process.hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx ) +process.HLTIterativeTrackingIteration0ForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( process.hltIter0IterL3FromL1MuonPixelSeedsFromPixelTracksScoutingNoVtx + process.hltIter0IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx + process.hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx + process.hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx + process.hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx ) +process.HLTIterativeTrackingIteration2ForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( process.hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx + process.hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx + process.hltIter2IterL3FromL1MuonPixelLayerTripletsScoutingNoVtx + process.hltIter2IterL3FromL1MuonPixelClusterCheckScoutingNoVtx + process.hltIter2IterL3FromL1MuonPixelHitDoubletsScoutingNoVtx + process.hltIter2IterL3FromL1MuonPixelHitTripletsScoutingNoVtx + process.hltIter2IterL3FromL1MuonPixelSeedsScoutingNoVtx + process.hltIter2IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx + process.hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx + process.hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx + process.hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx ) +process.HLTIterativeTrackingIter02ForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( process.HLTIterativeTrackingIteration0ForIterL3FromL1MuonScoutingNoVtx + process.HLTIterativeTrackingIteration2ForIterL3FromL1MuonScoutingNoVtx + process.hltIter2IterL3FromL1MuonMergedScoutingNoVtx ) +process.HLTIterL3IOmuonFromL1TkCandidateSequenceScoutingNoVtx = cms.Sequence( process.HLTRecopixelvertexingSequenceForIterL3FromL1MuonScoutingNoVtx + process.HLTIterativeTrackingIter02ForIterL3FromL1MuonScoutingNoVtx ) +process.HLTIterL3muonTkCandidateSequenceScoutingNoVtx = cms.Sequence( process.HLTDoLocalPixelSequence + process.HLTDoLocalStripSequence + process.HLTIterL3OIAndIOFromL2muonTkCandidateSequenceScoutingNoVtx + process.hltIterL3MuonL1MuonNoL2SelectorScoutingNoVtx + process.HLTIterL3IOmuonFromL1TkCandidateSequenceScoutingNoVtx ) +process.HLTL3muonrecoNocandSequenceScoutingNoVtx = cms.Sequence( process.HLTIterL3muonTkCandidateSequenceScoutingNoVtx + process.hltIterL3MuonMergedScoutingNoVtx + process.hltIterL3MuonAndMuonFromL1MergedScoutingNoVtx + process.hltL3MuonsIterL3LinksScoutingNoVtx + process.hltIterL3MuonsScoutingNoVtx ) +process.HLTL3muonrecoSequenceScoutingNoVtx = cms.Sequence( process.HLTL3muonrecoNocandSequenceScoutingNoVtx + process.hltIterL3MuonCandidatesScoutingNoVtx ) +process.HLTPFClusteringEcalMFForMuonsScoutingNoVtx = cms.Sequence( process.hltRecHitInRegionForMuonsMFnoVtx + process.hltRecHitInRegionForMuonsESScoutingNoVtx + process.hltParticleFlowRecHitECALForMuonsMFScoutingNoVtx + process.hltParticleFlowRecHitPSForMuonsScoutingNoVtx + process.hltParticleFlowClusterECALUncorrectedForMuonsMFScoutingNoVtx + process.hltParticleFlowClusterPSForMuonsScoutingNoVtx + process.hltParticleFlowClusterECALForMuonsMFScoutingNoVtx ) +process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalMFSequence + process.HLTDoLocalHcalSequence + process.hltTowerMakerForECALMF + process.hltTowerMakerForHCAL + process.hltFixedGridRhoFastjetECALMFForMuons + process.hltFixedGridRhoFastjetHCAL + process.HLTPFClusteringEcalMFForMuonsScoutingNoVtx + process.hltMuonEcalMFPFClusterIsoForMuonsScoutingNoVtx ) +process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx = cms.Sequence( process.HLTPFHcalClustering + process.hltMuonHcalPFClusterIsoForMuonsScoutingNoVtx ) +process.HLTPixelTrackingL3MuonScoutingNoVtx = cms.Sequence( process.hltL3MuonVertexScoutingNoVtx + process.HLTDoLocalPixelSequence + process.hltPixelLayerQuadruplets + process.hltPixelTracksL3MuonFilter + process.hltPixelTracksL3MuonFitter + process.hltPixelTracksTrackingRegionsL3MuonScoutingNoVtx + process.hltPixelTracksHitDoubletsL3MuonScoutingNoVtx + process.hltPixelTracksHitQuadrupletsL3MuonScoutingNoVtx + process.hltPixelTracksL3MuonScoutingNoVtx + process.hltPixelVerticesL3MuonScoutingNoVtx ) +process.HLTIterativeTrackingL3MuonIteration0ScoutingNoVtx = cms.Sequence( process.hltPixelTracksForSeedsL3MuonFilter + process.hltPixelTracksForSeedsL3MuonFitter + process.hltPixelTracksTrackingRegionsForSeedsL3MuonScoutingNoVtx + process.hltPixelTracksHitDoubletsForSeedsL3MuonScoutingNoVtx + process.hltPixelTracksHitQuadrupletsForSeedsL3MuonScoutingNoVtx + process.hltPixelTracksForSeedsL3MuonScoutingNoVtx + process.hltIter0L3MuonPixelSeedsFromPixelTracksScoutingNoVtx + process.hltIter0L3MuonCkfTrackCandidatesScoutingNoVtx + process.hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx + process.hltIter0L3MuonTrackCutClassifierScoutingNoVtx + process.hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx ) +process.HLTIterativeTrackingL3MuonIteration1ScoutingNoVtx = cms.Sequence( process.hltIter1L3MuonClustersRefRemovalScoutingNoVtx + process.hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx + process.hltIter1L3MuonPixelLayerQuadrupletsScoutingNoVtx + process.hltIter1L3MuonPixelTrackingRegionsScoutingNoVtx + process.hltIter1L3MuonPixelClusterCheck + process.hltIter1L3MuonPixelHitDoubletsScoutingNoVtx + process.hltIter1L3MuonPixelHitQuadrupletsScoutingNoVtx + process.hltIter1L3MuonPixelSeedsScoutingNoVtx + process.hltIter1L3MuonCkfTrackCandidatesScoutingNoVtx + process.hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx + process.hltIter1L3MuonTrackCutClassifierPromptScoutingNoVtx + process.hltIter1L3MuonTrackCutClassifierDetachedScoutingNoVtx + process.hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx + process.hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx ) +process.HLTIterativeTrackingL3MuonIteration2ScoutingNoVtx = cms.Sequence( process.hltIter2L3MuonClustersRefRemovalScoutingNoVtx + process.hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx + process.hltIter2L3MuonPixelLayerTripletsScoutingNoVtx + process.hltIter2L3MuonPixelTrackingRegionsScoutingNoVtx + process.hltIter2L3MuonPixelClusterCheck + process.hltIter2L3MuonPixelHitDoubletsScoutingNoVtx + process.hltIter2L3MuonPixelHitTripletsScoutingNoVtx + process.hltIter2L3MuonPixelSeedsScoutingNoVtx + process.hltIter2L3MuonCkfTrackCandidatesScoutingNoVtx + process.hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx + process.hltIter2L3MuonTrackCutClassifierScoutingNoVtx + process.hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx ) +process.HLTIterativeTrackingL3MuonIter02ScoutingNoVtx = cms.Sequence( process.HLTIterativeTrackingL3MuonIteration0ScoutingNoVtx + process.HLTIterativeTrackingL3MuonIteration1ScoutingNoVtx + process.hltIter1L3MuonMergedScoutingNoVtx + process.HLTIterativeTrackingL3MuonIteration2ScoutingNoVtx + process.hltIter2L3MuonMergedScoutingNoVtx ) +process.HLTTrackReconstructionForIsoL3MuonIter02ScoutingNoVtx = cms.Sequence( process.HLTPixelTrackingL3MuonScoutingNoVtx + process.HLTDoLocalStripSequence + process.HLTIterativeTrackingL3MuonIter02ScoutingNoVtx ) +process.HLTMuIsolationSequenceScoutingNoVtx = cms.Sequence( process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx + process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx + process.HLTTrackReconstructionForIsoL3MuonIter02ScoutingNoVtx + process.hltMuonTkRelIsolationCut0p09MapScoutingNoVtx ) process.HLTRecopixelvertexingForHighMultSequence = cms.Sequence( process.hltPixelTracksForHighMultFilter + process.hltPixelTracksForHighMultFitter + process.hltPixelTracksTrackingRegionsForHighMult + process.hltPixelLayerQuadruplets + process.hltPixelTracksHitDoubletsForHighMult + process.hltPixelTracksHitQuadrupletsForHighMult + process.hltPixelTracksForHighMult + process.hltPixelVerticesForHighMult ) process.HLTDoHIEcalClusWithCleaningSequence = cms.Sequence( process.hltIslandBasicClustersHI + process.hltHiIslandSuperClustersHI + process.hltHiCorrectedIslandBarrelSuperClustersHI + process.hltHiCorrectedIslandEndcapSuperClustersHI + process.hltCleanedHiCorrectedIslandBarrelSuperClustersHI + process.hltRecoHIEcalWithCleaningCandidate ) process.HLTPhoton20SequenceLooseHOverE = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG10Filter + process.hltEG20EtFilterLooseHoverE + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG20HEFilterLooseHoverE ) @@ -129324,14 +132732,13 @@ process.HLTEle5CaloIdLMWSequence = cms.Sequence( process.HLTEle5CaloIdLSequence + process.hltEle5CaloIdLMWPMS2Filter ) process.HLTDoubleEle5CaloIdLUnseededSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltDiEG5EtUnseededFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverEUnseeded + process.hltDiEG5HEUnseededFilter + process.hltEgammaClusterShapeUnseeded + process.hltDiEG5CaloIdLClusterShapeUnseededFilter + process.HLTElePixelMatchUnseededSequence + process.hltDiEle5CaloIdLPixelMatchUnseededFilter ) process.HLTDoubleEle5CaloIdLMWSequence = cms.Sequence( process.HLTDoubleEle5CaloIdLUnseededSequence + process.hltDiEle5CaloIdLMWPMS2UnseededFilter ) -process.HLTEle5WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5Filter + process.hltEG5L1SingleEG5EtFilter + process.hltEgammaClusterShape + process.hltEle5WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle5WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle5WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle5WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle5WPTightPixelMatchFilter + process.hltEle5WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle5WPTightGsfOneOEMinusOneOPFilter + process.hltEle5WPTightGsfMissingHitsFilter + process.hltEle5WPTightGsfDetaFilter + process.hltEle5WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle5WPTightGsfTrackIsoFilter ) -process.HLTEle15Ele10CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg2Filter + process.hltEgammaClusterShape + process.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg2Filter + process.hltEgammaEcalPFClusterIso + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + process.HLTElePixelMatchSequence + process.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + process.HLTGsfElectronSequence + process.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg2Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg2Filter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) +process.HLTEle5WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5Filter + process.hltEG5L1SingleEG5EtFilter + process.hltEgammaClusterShape + process.hltEle5WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle5WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle5WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle5WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle5WPTightPixelMatchFilter + process.hltEle5WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle5WPTightGsfOneOEMinusOneOPFilter + process.hltEle5WPTightGsfMissingHitsFilter + process.hltEle5WPTightGsfDetaFilter + process.hltEle5WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle5WPTightGsfTrackIsoFilter ) +process.HLTEle15Ele10CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg2Filter + process.hltEgammaClusterShape + process.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg2Filter + process.hltEgammaEcalPFClusterIso + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + process.HLTElePixelMatchSequence + process.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + process.HLTGsfElectronSequence + process.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg2Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg2Filter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) process.HLTMuIsolationSequenceForMC = cms.Sequence( process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons + process.hltL3fL1sMu5L1L2L3pfecalIsoRhoFilteredEB0p14EE0p10 + process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons + process.hltL3fL1sMu5L1L2L3pfhcalIsoRhoFilteredHB0p16HE0p20 + process.HLTTrackReconstructionForIsoL3MuonIter02 + process.hltMuonTkRelIsolationCut0p07Map ) process.HLTHighPt15TrackerMuonSequence = cms.Sequence( process.HLTDoLocalPixelSequence + process.HLTDoLocalStripSequence + process.hltL1MuonsPt15 + process.HLTIterativeTrackingHighPtTkMu + process.hltHighPtTkMu15TkFilt + process.hltHighPtTkMuons + process.hltHighPtTkMuonCands ) process.HLTPFClusteringEcalMFForTkMuons = cms.Sequence( process.hltRecHitInRegionForTkMuonsMF + process.hltRecHitInRegionForTkMuonsES + process.hltParticleFlowRecHitECALForTkMuonsMF + process.hltParticleFlowRecHitPSForTkMuons + process.hltParticleFlowClusterECALUncorrectedForTkMuonsMF + process.hltParticleFlowClusterPSForTkMuons + process.hltParticleFlowClusterECALForTkMuonsMF ) process.HLTHighPtTkMuEcalPFisorecoSequenceNoBoolsForMuons = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalMFSequence + process.HLTDoLocalHcalSequence + process.hltTowerMakerForECALMF + process.hltTowerMakerForHCAL + process.hltFixedGridRhoFastjetECALMFForMuons + process.hltFixedGridRhoFastjetHCAL + process.HLTPFClusteringEcalMFForTkMuons + process.hltHighPtTkMuonEcalMFPFClusterIsoForMuons ) -process.HLTPFHcalM2RegClusteringForTkMuons = cms.Sequence( process.hltRegionalTowerForTkMuonsM2Reg + process.hltParticleFlowRecHitHBHE + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL ) -process.HLTHighPtTkMuHcalM2PFisorecoSequenceNoBoolsForMuons = cms.Sequence( process.HLTPFHcalM2RegClusteringForTkMuons + process.hltHighPtTkMuonHcalM2RegPFClusterIsoForMuons ) +process.HLTHighPtTkMuHcalM2PFisorecoSequenceNoBoolsForMuons = cms.Sequence( process.HLTPFHcalClustering + process.hltHighPtTkMuonHcalM2RegPFClusterIsoForMuons ) process.HLTPixelTrackingHighPtTkMuIso = cms.Sequence( process.hltHighPtTkMuVertex + process.HLTDoLocalPixelSequence + process.hltPixelLayerTriplets + process.hltPixelTracksHighPtTkMuIsoFilter + process.hltPixelTracksHighPtTkMuIsoFitter + process.hltPixelTracksTrackingRegionsHighPtTkMuIso + process.hltPixelTracksHitDoubletsHighPtTkMuIso + process.hltPixelTracksHitTripletsHighPtTkMuIso + process.hltPixelTracksHighPtTkMuIso + process.hltPixelVerticesHighPtTkMuIso ) process.HLTIterativeTrackingHighPtTkMuIsoIteration0 = cms.Sequence( process.hltIter0HighPtTkMuIsoPixelTracksForSeedsFilter + process.hltIter0HighPtTkMuIsoPixelTracksForSeedsFitter + process.hltIter0HighPtTkMuIsoPixelTracksTrackingRegionsForSeeds + process.hltIter0HighPtTkMuIsoPixelTracksHitDoubletsForSeeds + process.hltIter0HighPtTkMuIsoPixelTracksHitTripletsForSeeds + process.hltIter0HighPtTkMuIsoPixelTracksForSeeds + process.hltIter0HighPtTkMuIsoPixelSeedsFromPixelTracks + process.hltIter0HighPtTkMuIsoCkfTrackCandidates + process.hltIter0HighPtTkMuIsoCtfWithMaterialTracks + process.hltIter0HighPtTkMuIsoTrackSelectionHighPurity ) process.HLTIterativeTrackingHighPtTkMuIsoIteration1 = cms.Sequence( process.hltIter1HighPtTkMuIsoClustersRefRemoval + process.hltIter1HighPtTkMuIsoMaskedMeasurementTrackerEvent + process.hltIter1HighPtTkMuIsoPixelLayerTriplets + process.hltIter1HighPtTkMuIsoPixelTrackingRegions + process.hltIter1HighPtTkMuIsoPixelClusterCheck + process.hltIter1HighPtTkMuIsoPixelHitDoublets + process.hltIter1HighPtTkMuIsoPixelHitTriplets + process.hltIter1HighPtTkMuIsoPixelSeeds + process.hltIter1HighPtTkMuIsoCkfTrackCandidates + process.hltIter1HighPtTkMuIsoCtfWithMaterialTracks + process.hltIter1HighPtTkMuIsoTrackSelectionHighPurityLoose + process.hltIter1HighPtTkMuIsoTrackSelectionHighPurityTight + process.hltIter1HighPtTkMuIsoTrackSelectionHighPurity ) @@ -129360,7 +132767,7 @@ process.HLTHPSDoubleLooseChargedIsoAntiMuonPFTau20Sequence = cms.Sequence( process.HLTHPSLooseChargedIsoPFTauSequence + process.hltHpsDoublePFTau20 + process.hltHpsSelectedPFTausTrackFinding + process.hltHpsDoublePFTau20Track + process.hltHpsSelectedPFTausTrackFindingLooseChargedIsolation + process.hltHpsDoublePFTau20TrackLooseChargedIso + process.hltHpsPFTauAgainstMuonDiscriminator + process.hltHpsSelectedPFTausTrackFindingLooseChargedIsolationAgainstMuon + process.hltHpsDoublePFTau20TrackLooseChargedIsoAgainstMuon ) process.HLTHPSDoubleMediumChargedIsoAntiMuonPFTau20Sequence = cms.Sequence( process.HLTHPSMediumChargedIsoPFTauSequence + process.hltHpsDoublePFTau20 + process.hltHpsSelectedPFTausTrackFinding + process.hltHpsDoublePFTau20Track + process.hltHpsSelectedPFTausTrackFindingMediumChargedIsolation + process.hltHpsDoublePFTau20TrackMediumChargedIso + process.hltHpsPFTauAgainstMuonDiscriminator + process.hltHpsSelectedPFTausTrackFindingMediumChargedIsolationAgainstMuon + process.hltHpsDoublePFTau20TrackMediumChargedIsoAgainstMuon ) process.HLTHPSDoubleTightChargedIsoAntiMuonPFTau20Sequence = cms.Sequence( process.HLTHPSTightChargedIsoPFTauSequence + process.hltHpsDoublePFTau20 + process.hltHpsSelectedPFTausTrackFinding + process.hltHpsDoublePFTau20Track + process.hltHpsSelectedPFTausTrackFindingTightChargedIsolation + process.hltHpsDoublePFTau20TrackTightChargedIso + process.hltHpsPFTauAgainstMuonDiscriminator + process.hltHpsSelectedPFTausTrackFindingTightChargedIsolationAgainstMuon + process.hltHpsDoublePFTau20TrackTightChargedIsoAgainstMuon ) -process.HLTPhoton50R9Id90HE10IsoMEBOnlySequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG50R9Id90HE10IsoMEBOnlyEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG50R9Id90HE10IsoMEBOnlyHEFilter + process.hltEgammaR9ID + process.hltEG50R9Id90HE10IsoMEBOnlyR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG50R9Id90HE10IsoMEBOnlyEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG50R9Id90HE10IsoMEBOnlyHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG50R9Id90HE10IsoMEBOnlyTrackIsoFilter ) +process.HLTPhoton50R9Id90HE10IsoMEBOnlySequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG50R9Id90HE10IsoMEBOnlyEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG50R9Id90HE10IsoMEBOnlyHEFilter + process.hltEgammaR9ID + process.hltEG50R9Id90HE10IsoMEBOnlyR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG50R9Id90HE10IsoMEBOnlyEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG50R9Id90HE10IsoMEBOnlyHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG50R9Id90HE10IsoMEBOnlyTrackIsoFilter ) process.HLTIterativeTrackingDoubleJpsiIteration0 = cms.Sequence( process.hltPixelTracksForSeedsJpsiFilter + process.hltPixelTracksForSeedsJpsiFitter + process.hltPixelTracksTrackingRegionsForSeedsJpsiDoubleTrk + process.hltPixelLayerQuadruplets + process.hltPixelTracksHitDoubletsForSeedsJpsiDoubleTrk + process.hltPixelTracksHitQuadrupletsForSeedsJpsiDoubleTrk + process.hltPixelTracksForSeedsJpsiDoubleTrk + process.hltIter0DisplacedJpsiPixelSeedsFromPixelTracksDoubleTrk + process.hltIter0DisplacedJpsiCkfTrackCandidatesDoubleTrk + process.hltIter0DisplacedJpsiCtfWithMaterialTracksDoubleTrk + process.hltIter0DisplacedJpsiTrackCutClassifierDoubleTrk + process.hltIter0DisplacedJpsiTrackSelectionHighPurityDoubleTrk ) process.HLTIterativeTrackingDoubleJpsiIteration1 = cms.Sequence( process.hltIter1DisplacedJpsiClustersRefRemovalDoubleTrk + process.hltIter1DisplacedJpsiMaskedMeasurementTrackerEventDoubleTrk + process.hltIter1DisplacedJpsiPixelLayerQuadrupletsDoubleTrk + process.hltIter1DisplacedJpsiPixelTrackingRegionsDoubleTrk + process.hltIter1DisplacedJpsiPixelClusterCheck + process.hltIter1DisplacedJpsiPixelHitDoubletsDoubleTrk + process.hltIter1DisplacedJpsiPixelHitQuadrupletsDoubleTrk + process.hltIter1DisplacedJpsiPixelSeedsDoubleTrk + process.hltIter1DisplacedJpsiCkfTrackCandidatesDoubleTrk + process.hltIter1DisplacedJpsiCtfWithMaterialTracksDoubleTrk + process.hltIter1DisplacedJpsiTrackCutClassifierPromptDoubleTrk + process.hltIter1DisplacedJpsiTrackCutClassifierDetachedDoubleTrk + process.hltIter1DisplacedJpsiTrackCutClassifierMergedDoubleTrk + process.hltIter1DisplacedJpsiTrackSelectionHighPurityDoubleTrk ) process.HLTIterativeTrackingDoubleJpsiIteration2 = cms.Sequence( process.hltIter2DisplacedJpsiClustersRefRemovalDoubleTrk + process.hltIter2DisplacedJpsiMaskedMeasurementTrackerEventDoubleTrk + process.hltIter2DisplacedJpsiPixelLayerTripletsDoubleTrk + process.hltIter2DisplacedJpsiPixelTrackingRegionsDoubleTrk + process.hltIter2DisplacedJpsiPixelClusterCheck + process.hltIter2DisplacedJpsiPixelHitDoubletsDoubleTrk + process.hltIter2DisplacedJpsiPixelHitTripletsDoubleTrk + process.hltIter2DisplacedJpsiPixelSeedsDoubleTrk + process.hltIter2DisplacedJpsiCkfTrackCandidatesDoubleTrk + process.hltIter2DisplacedJpsiCtfWithMaterialTracksDoubleTrk + process.hltIter2DisplacedJpsiTrackCutClassifierDoubleTrk + process.hltIter2DisplacedJpsiTrackSelectionHighPurityDoubleTrk ) @@ -129461,16 +132868,16 @@ process.HLTIterativeTrackingForElectronsIteration2 = cms.Sequence( process.hltIter2ElectronsClustersRefRemoval + process.hltIter2ElectronsMaskedMeasurementTrackerEvent + process.hltIter2ElectronsPixelLayerTriplets + process.hltIter2ElectronsPixelTrackingRegions + process.hltIter2ElectronsPixelHitDoublets + process.hltIter2ElectronsPixelHitTriplets + process.hltIter2ElectronsPixelSeeds + process.hltIter2ElectronsCkfTrackCandidates + process.hltIter2ElectronsCtfWithMaterialTracks + process.hltIter2ElectronsTrackSelectionHighPurity ) process.HLTIterativeTrackingDoubletRecoveryForElectrons = cms.Sequence( process.hltDoubletRecoveryForElectronsClustersRefRemoval + process.hltDoubletRecoveryForElectronsMaskedMeasurementTrackerEvent + process.hltDoubletRecoveryForElectronsPixelLayersAndRegions + process.hltDoubletRecoveryForElectronsPFlowPixelHitDoublets + process.hltDoubletRecoveryForElectronsPFlowPixelSeeds + process.hltDoubletRecoveryForElectronsPFlowCkfTrackCandidates + process.hltDoubletRecoveryForElectronsPFlowCtfWithMaterialTracks + process.hltDoubletRecoveryForElectronsPFlowTrackSelectionHighPurity ) process.HLTIterativeTrackingForElectrons = cms.Sequence( process.HLTIterativeTrackingForElectronsIteration0 + process.HLTIterativeTrackingForElectronsIteration1 + process.hltIter1ForElectronsMerged + process.HLTIterativeTrackingForElectronsIteration2 + process.hltIter2ForElectronsMerged + process.HLTIterativeTrackingDoubletRecoveryForElectrons + process.hltMergedForElectrons ) -process.HLTEle10GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG10EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle10ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle10HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle10EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle10HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle10PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle10GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle10GsfDetaPPOnAAFilter + process.hltEle10GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle10GsfTrackIsoPPOnAAFilter ) +process.HLTEle10GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG10EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle10ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle10HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle10EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle10HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle10PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle10GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle10GsfDetaPPOnAAFilter + process.hltEle10GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle10GsfTrackIsoPPOnAAFilter ) process.HLTDoHIStripZeroSuppressionRepacker = cms.Sequence( process.hltSiStripDigiToZSRaw + process.rawDataRepacker + process.rawDataReducedFormat ) -process.HLTEle15GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG15EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle15ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle15HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle15EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle15HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle15PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle15GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle15GsfDetaPPOnAAFilter + process.hltEle15GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle15GsfTrackIsoPPOnAAFilter ) -process.HLTEle20GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG20EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle20ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle20HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle20EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle20HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle20PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle20GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle20GsfDetaPPOnAAFilter + process.hltEle20GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle20GsfTrackIsoPPOnAAFilter ) -process.HLTEle30GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG30EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle30ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle30HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle30EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle30HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle30PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle30GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle30GsfDetaPPOnAAFilter + process.hltEle30GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle30GsfTrackIsoPPOnAAFilter ) -process.HLTEle40GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG40EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle40ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle40HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle40EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle40HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle40PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle40GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle40GsfDetaPPOnAAFilter + process.hltEle40GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle40GsfTrackIsoPPOnAAFilter ) -process.HLTEle50GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG50EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle50ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle50HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle50EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle50HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle50PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle50GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle50GsfDetaPPOnAAFilter + process.hltEle50GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle50GsfTrackIsoPPOnAAFilter ) -process.HLTEle15Ele10GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG15EtPPOnAAFilter + process.hltDoubleEG10EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltDoubleEle10ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltDoubleEle10HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltDoubleEle10EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltDoubleEle10HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.HLTGsfElectronPPOnAASequence + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) -process.HLTDoubleEle10GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltDoubleEG10EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltDoubleEle10ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltDoubleEle10HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltDoubleEle10EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltDoubleEle10HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.HLTGsfElectronPPOnAASequence + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) -process.HLTDoubleEle15GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltDoubleEG15EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltDoubleEle15ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltDoubleEle15HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltDoubleEle15EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltDoubleEle15HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.HLTGsfElectronPPOnAASequence + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltDoubleEle15GsfTrackIsoPPOnAAFilter ) +process.HLTEle15GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG15EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle15ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle15HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle15EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle15HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle15PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle15GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle15GsfDetaPPOnAAFilter + process.hltEle15GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle15GsfTrackIsoPPOnAAFilter ) +process.HLTEle20GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG20EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle20ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle20HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle20EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle20HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle20PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle20GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle20GsfDetaPPOnAAFilter + process.hltEle20GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle20GsfTrackIsoPPOnAAFilter ) +process.HLTEle30GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG30EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle30ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle30HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle30EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle30HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle30PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle30GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle30GsfDetaPPOnAAFilter + process.hltEle30GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle30GsfTrackIsoPPOnAAFilter ) +process.HLTEle40GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG40EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle40ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle40HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle40EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle40HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle40PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle40GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle40GsfDetaPPOnAAFilter + process.hltEle40GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle40GsfTrackIsoPPOnAAFilter ) +process.HLTEle50GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG50EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle50ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle50HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle50EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle50HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle50PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle50GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle50GsfDetaPPOnAAFilter + process.hltEle50GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle50GsfTrackIsoPPOnAAFilter ) +process.HLTEle15Ele10GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG15EtPPOnAAFilter + process.hltDoubleEG10EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltDoubleEle10ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltDoubleEle10HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltDoubleEle10EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltDoubleEle10HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.HLTGsfElectronPPOnAASequence + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) +process.HLTDoubleEle10GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltDoubleEG10EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltDoubleEle10ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltDoubleEle10HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltDoubleEle10EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltDoubleEle10HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.HLTGsfElectronPPOnAASequence + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) +process.HLTDoubleEle15GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltDoubleEG15EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltDoubleEle15ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltDoubleEle15HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltDoubleEle15EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltDoubleEle15HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.HLTGsfElectronPPOnAASequence + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltDoubleEle15GsfTrackIsoPPOnAAFilter ) process.HLTEndSequenceWithZeroSuppressionRepacker = cms.Sequence( process.HLTDoHIStripZeroSuppressionRepacker + process.HLTEndSequence ) process.HLTFullIterativeTrackingIteration0PreSplittingPPOnAAForDmeson = cms.Sequence( process.hltFullIter0PixelQuadrupletsPreSplittingPPOnAAForDmeson + process.hltFullIter0PixelTrackingRegionsPreSplittingPPOnAAForDmeson + process.hltFullIter0PixelClusterCheckPreSplittingPPOnAAForDmeson + process.hltFullIter0PixelHitDoubletsPreSplittingPPOnAAForDmeson + process.hltFullIter0PixelHitQuadrupletsPreSplittingPPOnAAForDmeson + process.hltFullIter0PixelSeedsPreSplittingPPOnAAForDmeson + process.hltFullIter0CkfTrackCandidatesPreSplittingPPOnAAForDmeson + process.hltFullIter0CtfWithMaterialTracksPreSplittingPPOnAAForDmeson + process.hltFullIter0PrimaryVerticesPreSplittingPPOnAAForDmeson ) process.HLTDoLocalPixelSequenceAfterSplittingPPOnAAForDmeson = cms.Sequence( process.hltSiPixelClustersAfterSplittingPPOnAAForDmeson + process.hltSiPixelClustersCacheAfterSplittingPPOnAAForDmeson + process.hltSiPixelRecHitsAfterSplittingPPOnAAForDmeson ) @@ -129530,6 +132937,7 @@ process.HLTBtagCSVv2SequenceL3ForHIBJet100 = cms.Sequence( process.HLTTrackReconstructionForBTagForHI + process.hltFullOnlinePrimaryVerticesPPOnAAForBTag + process.hltFastPixelBLifetimeL3AssociatorHIBJet100 + process.hltImpactParameterTagInfosHIBJet100 + process.hltInclusiveVertexFinderPPOnAA + process.hltInclusiveSecondaryVerticesPPOnAA + process.hltTrackVertexArbitratorPPOnAA + process.hltInclusiveMergedVerticesPPOnAA + process.hltInclusiveSecondaryVertexFinderTagInfosHIBJet100 + process.hltCombinedSecondaryVertexV2BJetTagsCaloBJet100 ) process.HLTHISinglePixelTrack = cms.Sequence( process.HLTHIDoLocalPixelSequence + process.HLTHIRecoPixelTracksSequenceForTrackTrigger + process.hltHIPixelCandsForTrackTrigger + process.hltHIPixelFilter1 ) process.HLTHISinglePixelTrackNpix = cms.Sequence( process.HLTHIDoLocalPixelSequence + ~process.hltHIPixelCountFilterNpix + process.HLTHIRecoPixelTracksSequenceForTrackTrigger + process.hltHIPixelCandsForTrackTrigger + process.hltHIPixelFilter1 ) +process.HLTPixelOnlyPFScoutingPackingSequence = cms.Sequence( process.hltScoutingPFPacker + process.hltScoutingMuonPacker + process.hltScoutingEgammaPacker ) process.HLTPFScoutingPackingSequence = cms.Sequence( process.hltScoutingPFPacker + process.hltScoutingMuonPacker + process.hltScoutingEgammaPacker ) process.HLTriggerFirstPath = cms.Path( process.hltGetConditions + process.hltGetRaw + process.hltPSetMap + process.hltBoolFalse ) @@ -130106,6 +133514,7 @@ process.DST_DoubleMu3_noVtx_CaloScouting_v6 = cms.Path( process.HLTBeginSequence + process.hltL1sDoubleMuIorTripleMuIorQuadMu + process.hltPreDSTDoubleMu3noVtxCaloScouting + process.hltDimuon3L1Filtered0 + process.HLTL2muonrecoSequenceNoVtx + process.hltDimuon3L2PreFiltered0 + process.HLTL3muonrecoSequenceNoVtx + process.hltDoubleMu3L3FilteredNoVtx + process.HLTCaloScoutingSequence + process.HLTMuIsolationSequenceNoVtx + process.hltDisplacedmumuVtxProducer + process.HLTEndSequence ) process.DST_DoubleMu1_noVtx_CaloScouting_v2 = cms.Path( process.HLTBeginSequence + process.hltL1sDoubleMuIorTripleMuIorQuadMu + process.hltPreDSTDoubleMu1noVtxCaloScouting + process.hltDimuon3L1Filtered0 + process.HLTL2muonrecoSequenceNoVtx + process.hltDimuon3L2PreFiltered0 + process.HLTL3muonrecoSequenceNoVtx + process.hltDoubleMu1L3FilteredNoVtx + process.HLTCaloScoutingSequence + process.HLTMuIsolationSequenceNoVtx + process.hltDisplacedmumu1VtxProducer + process.HLTEndSequence ) process.DST_DoubleMu3_noVtx_Mass10_PFScouting_v3 = cms.Path( process.HLTBeginSequence + process.hltL1sDoubleMuIorTripleMuIorQuadMu + process.hltPreDSTDoubleMu3noVtxMass10PFScouting + process.hltDimuon3L1Filtered0 + process.HLTL2muonrecoSequenceNoVtx + process.hltDimuon3L2PreFiltered0 + process.HLTL3muonrecoSequenceNoVtx + process.hltDoubleMu3L3FilteredNoVtxMass10 + process.HLTCaloScoutingSequence + process.HLTPFScoutingSequenceNoVtx + process.hltDisplacedmumuMass10VtxProducer + process.HLTEndSequence ) +process.DST_Run3_PFScoutingPixelTracking_v16 = cms.Path( process.HLTBeginSequence + process.hltL1sDSTRun3PFScoutingPixelTracking + process.hltPreDSTRun3PFScoutingPixelTracking + process.HLTAK4CaloJetsSequence + process.HLTPixelOnlyPFScoutingSequence + process.hltEgammaR9ID + process.HLTL2muonrecoSequenceScoutingNoVtx + process.HLTL3muonrecoSequenceScoutingNoVtx + process.hltDisplacedmumuVtxNoMatchingProducer + process.HLTMuIsolationSequenceScoutingNoVtx + process.HLTEndSequence ) process.HLT_AK4CaloJet30_v11 = cms.Path( process.HLTBeginSequence + process.hltL1sZeroBias + process.hltPreAK4CaloJet30 + process.HLTAK4CaloJetsSequence + process.hltSingleAK4CaloJet30 + process.HLTEndSequence ) process.HLT_AK4CaloJet40_v10 = cms.Path( process.HLTBeginSequence + process.hltL1sZeroBias + process.hltPreAK4CaloJet40 + process.HLTAK4CaloJetsSequence + process.hltSingleAK4CaloJet40 + process.HLTEndSequence ) process.HLT_AK4CaloJet50_v10 = cms.Path( process.HLTBeginSequence + process.hltL1sZeroBias + process.hltPreAK4CaloJet50 + process.HLTAK4CaloJetsSequence + process.hltSingleAK4CaloJet50 + process.HLTEndSequence ) @@ -131098,7 +134507,7 @@ process.ExpressCosmicsOutput = cms.EndPath( process.hltGtStage2Digis + process.hltPreExpressCosmicsOutput + process.hltPreExpressCosmicsOutputSmart + process.hltOutputExpressCosmics ) process.ExpressAlignmentOutput = cms.EndPath( process.hltGtStage2Digis + process.hltPreExpressAlignmentOutput + process.hltPreExpressAlignmentOutputSmart + process.hltOutputExpressAlignment ) process.NanoDSTOutput = cms.EndPath( process.hltGtStage2Digis + process.hltPreNanoDSTOutput + process.hltOutputNanoDST ) -process.ScoutingPFOutput = cms.EndPath( process.hltGtStage2Digis + process.hltPreScoutingPFOutput + process.hltFEDSelectorL1 + process.HLTPFScoutingPackingSequence + process.hltScoutingPrimaryVertexPacker + process.hltOutputScoutingPF ) +process.ScoutingPFOutput = cms.EndPath( process.hltGtStage2Digis + process.hltPreScoutingPFOutput + process.hltFEDSelectorL1 + process.HLTPixelOnlyPFScoutingPackingSequence + process.hltScoutingPrimaryVertexPacker + process.hltScoutingTrackPacker + process.hltOutputScoutingPF ) process.ScoutingCaloMuonOutput = cms.EndPath( process.hltGtStage2Digis + process.hltPreScoutingCaloMuonOutput + process.hltFEDSelectorL1 + process.hltScoutingCaloPacker + process.hltScoutingMuonPackerCalo + process.hltScoutingPrimaryVertexPacker + process.hltScoutingPrimaryVertexPackerCaloMuon + process.hltScoutingTrackPacker + process.hltOutputScoutingCaloMuon ) process.PhysicsScoutingMonitorOutput = cms.EndPath( process.hltGtStage2Digis + process.hltPrePhysicsScoutingMonitorOutput + process.hltPrePhysicsScoutingMonitorOutputSmart + process.hltScoutingCaloPacker + process.hltScoutingMuonPackerCalo + process.HLTPFScoutingPackingSequence + process.hltScoutingPrimaryVertexPacker + process.hltScoutingPrimaryVertexPackerCaloMuon + process.hltOutputPhysicsScoutingMonitor ) process.PhysicsHLTPhysics1Output = cms.EndPath( process.hltGtStage2Digis + process.hltPrePhysicsHLTPhysics1Output + process.hltOutputPhysicsHLTPhysics1 ) @@ -131199,7 +134608,7 @@ process.PhysicsHIMinimumBias19Output = cms.EndPath( process.hltGtStage2Digis + process.hltPrePhysicsHIMinimumBias19Output + process.hltOutputPhysicsHIMinimumBias19 ) -process.HLTSchedule = cms.Schedule( *(process.HLTriggerFirstPath, process.HLT_AK8PFJet360_TrimMass30_v18, process.HLT_AK8PFJet380_TrimMass30_v11, process.HLT_AK8PFJet400_TrimMass30_v12, process.HLT_AK8PFJet420_TrimMass30_v11, process.HLT_AK8PFHT750_TrimMass50_v12, process.HLT_AK8PFHT800_TrimMass50_v12, process.HLT_AK8PFHT850_TrimMass50_v11, process.HLT_AK8PFHT900_TrimMass50_v11, process.HLT_CaloJet10_NoJetID_v3, process.HLT_CaloJet20_NoJetID_v3, process.HLT_CaloJet50_NoJetID_v3, process.HLT_CaloJet500_NoJetID_v12, process.HLT_CaloJet550_NoJetID_v7, process.HLT_DoubleMu5_Upsilon_DoubleEle3_CaloIdL_TrackIdL_v4, process.HLT_DoubleMu3_DoubleEle7p5_CaloIdL_TrackIdL_Upsilon_v4, process.HLT_Trimuon5_3p5_2_Upsilon_Muon_v5, process.HLT_TrimuonOpen_5_3p5_2_Upsilon_Muon_v3, process.HLT_DoubleEle25_CaloIdL_MW_v4, process.HLT_DoubleEle27_CaloIdL_MW_v4, process.HLT_DoubleEle33_CaloIdL_MW_v17, process.HLT_DoubleEle24_eta2p1_WPTight_Gsf_v7, process.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_DZ_PFHT350_v20, process.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_PFHT350_v20, process.HLT_Ele27_Ele37_CaloIdL_MW_v4, process.HLT_Mu27_Ele37_CaloIdL_MW_v5, process.HLT_Mu37_Ele27_CaloIdL_MW_v5, process.HLT_Mu37_TkMu27_v5, process.HLT_DoubleMu4_3_Bs_v14, process.HLT_DoubleMu4_3_Jpsi_v2, process.HLT_DoubleMu4_JpsiTrk_Displaced_v15, process.HLT_DoubleMu4_LowMassNonResonantTrk_Displaced_v15, process.HLT_DoubleMu3_Trk_Tau3mu_v12, process.HLT_DoubleMu3_TkMu_DsTau3Mu_v4, process.HLT_DoubleMu4_PsiPrimeTrk_Displaced_v15, process.HLT_DoubleMu4_Mass3p8_DZ_PFHT350_v8, process.HLT_Mu3_PFJet40_v16, process.HLT_Mu7p5_L2Mu2_Jpsi_v10, process.HLT_Mu7p5_L2Mu2_Upsilon_v10, process.HLT_Mu7p5_Track2_Jpsi_v11, process.HLT_Mu7p5_Track3p5_Jpsi_v11, process.HLT_Mu7p5_Track7_Jpsi_v11, process.HLT_Mu7p5_Track2_Upsilon_v11, process.HLT_Mu7p5_Track3p5_Upsilon_v11, process.HLT_Mu7p5_Track7_Upsilon_v11, process.HLT_Mu3_L1SingleMu5orSingleMu7_v1, process.HLT_DoublePhoton33_CaloIdL_v6, process.HLT_DoublePhoton70_v6, process.HLT_DoublePhoton85_v14, process.HLT_Ele20_WPTight_Gsf_v6, process.HLT_Ele15_WPLoose_Gsf_v3, process.HLT_Ele17_WPLoose_Gsf_v3, process.HLT_Ele20_WPLoose_Gsf_v6, process.HLT_Ele20_eta2p1_WPLoose_Gsf_v6, process.HLT_DiEle27_WPTightCaloOnly_L1DoubleEG_v4, process.HLT_Ele27_WPTight_Gsf_v16, process.HLT_Ele28_WPTight_Gsf_v1, process.HLT_Ele30_WPTight_Gsf_v1, process.HLT_Ele32_WPTight_Gsf_v15, process.HLT_Ele35_WPTight_Gsf_v9, process.HLT_Ele35_WPTight_Gsf_L1EGMT_v5, process.HLT_Ele38_WPTight_Gsf_v9, process.HLT_Ele40_WPTight_Gsf_v9, process.HLT_Ele32_WPTight_Gsf_L1DoubleEG_v9, process.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTau30_eta2p1_CrossL1_v13, process.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, process.HLT_HT450_Beamspot_v11, process.HLT_HT300_Beamspot_v11, process.HLT_HT60_Beamspot_v1, process.HLT_ZeroBias_Beamspot_v4, process.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTau27_eta2p1_CrossL1_v12, process.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_CrossL1_v4, process.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, process.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, process.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, process.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, process.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v4, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS30_Trk1_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu27_LooseChargedIsoPFTau20_Trk1_eta2p1_SingleL1_v5, process.HLT_IsoMu27_LooseChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, process.HLT_IsoMu27_MediumChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, process.HLT_IsoMu27_TightChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, process.HLT_IsoMu20_v15, process.HLT_IsoMu24_v13, process.HLT_IsoMu24_eta2p1_v15, process.HLT_IsoMu27_v16, process.HLT_IsoMu30_v4, process.HLT_UncorrectedJetE30_NoBPTX_v6, process.HLT_UncorrectedJetE30_NoBPTX3BX_v6, process.HLT_UncorrectedJetE60_NoBPTX3BX_v6, process.HLT_UncorrectedJetE70_NoBPTX3BX_v6, process.HLT_L1SingleMu18_v3, process.HLT_L1SingleMu25_v2, process.HLT_L1SingleMuOpen_v2, process.HLT_L1SingleMuOpen_DT_v2, process.HLT_L1SingleMuCosmics_v1, process.HLT_L1SingleMu3_v1, process.HLT_L1SingleMu5_v1, process.HLT_L1SingleMu7_v1, process.HLT_L1DoubleMu0_v1, process.HLT_L1SingleEG10_v2, process.HLT_L1SingleEG15_v2, process.HLT_L1SingleEG18_v1, process.HLT_L1SingleJet16_v1, process.HLT_L1SingleJet20_v1, process.HLT_L1SingleJet35_v1, process.HLT_L1SingleJet8erHE_v1, process.HLT_L1SingleJet10erHE_v1, process.HLT_L1SingleJet12erHE_v1, process.HLT_L1SingleJet200_v1, process.HLT_L1DoubleJetC50_v2, process.HLT_L1EXT_HCAL_LaserMon1_v1, process.HLT_L1EXT_HCAL_LaserMon4_v1, process.HLT_DQMPixels_SingleMuOpen_v1, process.HLT_L2DoubleMu23_NoVertex_v2, process.HLT_L2Mu10_v7, process.HLT_L2Mu10_NoVertex_NoBPTX3BX_v5, process.HLT_L2Mu10_NoVertex_NoBPTX_v6, process.HLT_L2Mu45_NoVertex_3Sta_NoBPTX3BX_v4, process.HLT_L2Mu40_NoVertex_3Sta_NoBPTX3BX_v5, process.HLT_L2Mu50_v2, process.HLT_L2Mu23NoVtx_2Cha_v1, process.HLT_L2Mu23NoVtx_2Cha_CosmicSeed_v1, process.HLT_DoubleL2Mu30NoVtx_2Cha_CosmicSeed_Eta2p4_v2, process.HLT_DoubleL2Mu30NoVtx_2Cha_Eta2p4_v2, process.HLT_DoubleL2Mu50_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_Eta2p4_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_Eta2p4_v2, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_v14, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_v3, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v15, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_v3, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8_v5, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass8_v3, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8_v5, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass3p8_v3, process.HLT_Mu25_TkMu0_Onia_v8, process.HLT_Mu30_TkMu0_Psi_v1, process.HLT_Mu30_TkMu0_Upsilon_v1, process.HLT_Mu20_TkMu0_Phi_v8, process.HLT_Mu25_TkMu0_Phi_v8, process.HLT_Mu12_v3, process.HLT_Mu15_v3, process.HLT_Mu20_v12, process.HLT_Mu27_v13, process.HLT_Mu50_v13, process.HLT_Mu55_v3, process.HLT_OldMu100_v3, process.HLT_TkMu100_v2, process.HLT_DiPFJet15_NoCaloMatched_v16, process.HLT_DiPFJet25_NoCaloMatched_v16, process.HLT_DiPFJet15_FBEta3_NoCaloMatched_v17, process.HLT_DiPFJet25_FBEta3_NoCaloMatched_v17, process.HLT_DiPFJetAve40_v14, process.HLT_DiPFJetAve60_v14, process.HLT_DiPFJetAve80_v13, process.HLT_DiPFJetAve140_v13, process.HLT_DiPFJetAve200_v13, process.HLT_DiPFJetAve260_v14, process.HLT_DiPFJetAve320_v14, process.HLT_DiPFJetAve400_v14, process.HLT_DiPFJetAve500_v14, process.HLT_DiPFJetAve15_HFJEC_v17, process.HLT_DiPFJetAve25_HFJEC_v17, process.HLT_DiPFJetAve35_HFJEC_v17, process.HLT_DiPFJetAve60_HFJEC_v15, process.HLT_DiPFJetAve80_HFJEC_v16, process.HLT_DiPFJetAve100_HFJEC_v16, process.HLT_DiPFJetAve160_HFJEC_v16, process.HLT_DiPFJetAve220_HFJEC_v16, process.HLT_DiPFJetAve300_HFJEC_v16, process.HLT_AK8PFJet15_v3, process.HLT_AK8PFJet25_v3, process.HLT_AK8PFJet40_v16, process.HLT_AK8PFJet60_v15, process.HLT_AK8PFJet80_v15, process.HLT_AK8PFJet140_v15, process.HLT_AK8PFJet200_v15, process.HLT_AK8PFJet260_v16, process.HLT_AK8PFJet320_v16, process.HLT_AK8PFJet400_v16, process.HLT_AK8PFJet450_v16, process.HLT_AK8PFJet500_v16, process.HLT_AK8PFJet550_v11, process.HLT_PFJet15_v3, process.HLT_PFJet25_v3, process.HLT_PFJet40_v21, process.HLT_PFJet60_v21, process.HLT_PFJet80_v20, process.HLT_PFJet140_v19, process.HLT_PFJet200_v19, process.HLT_PFJet260_v20, process.HLT_PFJet320_v20, process.HLT_PFJet400_v20, process.HLT_PFJet450_v21, process.HLT_PFJet500_v21, process.HLT_PFJet550_v11, process.HLT_PFJetFwd15_v3, process.HLT_PFJetFwd25_v3, process.HLT_PFJetFwd40_v19, process.HLT_PFJetFwd60_v19, process.HLT_PFJetFwd80_v18, process.HLT_PFJetFwd140_v18, process.HLT_PFJetFwd200_v18, process.HLT_PFJetFwd260_v19, process.HLT_PFJetFwd320_v19, process.HLT_PFJetFwd400_v19, process.HLT_PFJetFwd450_v19, process.HLT_PFJetFwd500_v19, process.HLT_AK8PFJetFwd15_v3, process.HLT_AK8PFJetFwd25_v3, process.HLT_AK8PFJetFwd40_v15, process.HLT_AK8PFJetFwd60_v14, process.HLT_AK8PFJetFwd80_v14, process.HLT_AK8PFJetFwd140_v14, process.HLT_AK8PFJetFwd200_v14, process.HLT_AK8PFJetFwd260_v15, process.HLT_AK8PFJetFwd320_v15, process.HLT_AK8PFJetFwd400_v15, process.HLT_AK8PFJetFwd450_v15, process.HLT_AK8PFJetFwd500_v15, process.HLT_PFHT180_v17, process.HLT_PFHT250_v17, process.HLT_PFHT370_v17, process.HLT_PFHT430_v17, process.HLT_PFHT510_v17, process.HLT_PFHT590_v17, process.HLT_PFHT680_v17, process.HLT_PFHT780_v17, process.HLT_PFHT890_v17, process.HLT_PFHT1050_v18, process.HLT_PFHT500_PFMET100_PFMHT100_IDTight_v12, process.HLT_PFHT500_PFMET110_PFMHT110_IDTight_v12, process.HLT_PFHT700_PFMET85_PFMHT85_IDTight_v12, process.HLT_PFHT700_PFMET95_PFMHT95_IDTight_v12, process.HLT_PFHT800_PFMET75_PFMHT75_IDTight_v12, process.HLT_PFHT800_PFMET85_PFMHT85_IDTight_v12, process.HLT_PFMET110_PFMHT110_IDTight_v20, process.HLT_PFMET120_PFMHT120_IDTight_v20, process.HLT_PFMET130_PFMHT130_IDTight_v20, process.HLT_PFMET140_PFMHT140_IDTight_v20, process.HLT_PFMET100_PFMHT100_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET110_PFMHT110_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET120_PFMHT120_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET130_PFMHT130_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET140_PFMHT140_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET120_PFMHT120_IDTight_PFHT60_v9, process.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_PFHT60_v9, process.HLT_PFMETTypeOne120_PFMHT120_IDTight_PFHT60_v9, process.HLT_PFMETTypeOne110_PFMHT110_IDTight_v12, process.HLT_PFMETTypeOne120_PFMHT120_IDTight_v12, process.HLT_PFMETTypeOne130_PFMHT130_IDTight_v12, process.HLT_PFMETTypeOne140_PFMHT140_IDTight_v11, process.HLT_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, process.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, process.HLT_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, process.HLT_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, process.HLT_MonoCentralPFJet80_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, process.HLT_MonoCentralPFJet80_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, process.HLT_MonoCentralPFJet80_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, process.HLT_MonoCentralPFJet80_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, process.HLT_L1ETMHadSeeds_v2, process.HLT_CaloMHT90_v4, process.HLT_CaloMET80_NotCleaned_v4, process.HLT_CaloMET90_NotCleaned_v4, process.HLT_CaloMET100_NotCleaned_v4, process.HLT_CaloMET110_NotCleaned_v4, process.HLT_CaloMET250_NotCleaned_v4, process.HLT_CaloMET300_NotCleaned_v4, process.HLT_CaloMET350_NotCleaned_v4, process.HLT_PFMET200_NotCleaned_v9, process.HLT_PFMET250_NotCleaned_v9, process.HLT_PFMET300_NotCleaned_v9, process.HLT_PFMET200_BeamHaloCleaned_v9, process.HLT_PFMETTypeOne200_BeamHaloCleaned_v9, process.HLT_MET105_IsoTrk50_v9, process.HLT_MET120_IsoTrk50_v9, process.HLT_SingleJet30_Mu12_SinglePFJet40_v11, process.HLT_Mu12_DoublePFJets40_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets100_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets200_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets350_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets40MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets54MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets62MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets40_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets100_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets200_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets350_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets116MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets128MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_Photon300_NoHE_v12, process.HLT_Mu8_TrkIsoVVL_v12, process.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_DZ_v18, process.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_v18, process.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_DZ_v19, process.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_v19, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v13, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_PFBtagDeepCSV_1p5_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_CaloBtagDeepCSV_1p5_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v11, process.HLT_Mu17_TrkIsoVVL_v13, process.HLT_Mu19_TrkIsoVVL_v4, process.HLT_BTagMu_AK4DiJet20_Mu5_v13, process.HLT_BTagMu_AK4DiJet40_Mu5_v13, process.HLT_BTagMu_AK4DiJet70_Mu5_v13, process.HLT_BTagMu_AK4DiJet110_Mu5_v13, process.HLT_BTagMu_AK4DiJet170_Mu5_v12, process.HLT_BTagMu_AK4Jet300_Mu5_v12, process.HLT_BTagMu_AK8DiJet170_Mu5_v9, process.HLT_BTagMu_AK8Jet170_DoubleMu5_v2, process.HLT_BTagMu_AK8Jet300_Mu5_v12, process.HLT_BTagMu_AK4DiJet20_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet40_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet70_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet110_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet170_Mu5_noalgo_v12, process.HLT_BTagMu_AK4Jet300_Mu5_noalgo_v12, process.HLT_BTagMu_AK8DiJet170_Mu5_noalgo_v9, process.HLT_BTagMu_AK8Jet170_DoubleMu5_noalgo_v2, process.HLT_BTagMu_AK8Jet300_Mu5_noalgo_v12, process.HLT_Ele15_Ele8_CaloIdL_TrackIdL_IsoVL_v3, process.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v19, process.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_v19, process.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v15, process.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_v7, process.HLT_Mu23_TrkIsoVVL_Ele8_CaloIdL_TrackIdL_IsoVL_DZ_v10, process.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v7, process.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v15, process.HLT_Mu12_DoublePhoton20_v5, process.HLT_TriplePhoton_20_20_20_CaloIdLV2_v3, process.HLT_TriplePhoton_20_20_20_CaloIdLV2_R9IdVL_v3, process.HLT_TriplePhoton_30_30_10_CaloIdLV2_v4, process.HLT_TriplePhoton_30_30_10_CaloIdLV2_R9IdVL_v4, process.HLT_TriplePhoton_35_35_5_CaloIdLV2_R9IdVL_v4, process.HLT_Photon20_v2, process.HLT_Photon22_v2, process.HLT_Photon25_v4, process.HLT_Photon33_v5, process.HLT_Photon50_v13, process.HLT_Photon75_v13, process.HLT_Photon90_v13, process.HLT_Photon120_v13, process.HLT_Photon150_v6, process.HLT_Photon175_v14, process.HLT_Photon200_v13, process.HLT_Photon100EB_TightID_TightIso_v2, process.HLT_Photon110EB_TightID_TightIso_v2, process.HLT_Photon120EB_TightID_TightIso_v2, process.HLT_Photon100EBHE10_v2, process.HLT_Photon100EEHE10_v2, process.HLT_Photon100EE_TightID_TightIso_v2, process.HLT_Photon50_R9Id90_HE10_IsoM_v14, process.HLT_Photon75_R9Id90_HE10_IsoM_v14, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ300_PFJetsMJJ400DEta3_v5, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ400_PFJetsMJJ600DEta3_v5, process.HLT_Photon90_R9Id90_HE10_IsoM_v14, process.HLT_Photon120_R9Id90_HE10_IsoM_v14, process.HLT_Photon165_R9Id90_HE10_IsoM_v15, process.HLT_Photon90_CaloIdL_PFHT700_v16, process.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass90_v13, process.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass95_v13, process.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_PixelVeto_Mass55_v15, process.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_NoPixelVeto_Mass55_v13, process.HLT_Photon35_TwoProngs35_v1, process.HLT_IsoMu24_TwoProngs35_v1, process.HLT_Dimuon0_Jpsi_L1_NoOS_v7, process.HLT_Dimuon0_Jpsi_NoVertexing_NoOS_v7, process.HLT_Dimuon0_Jpsi_v8, process.HLT_Dimuon0_Jpsi_NoVertexing_v8, process.HLT_Dimuon0_Jpsi_L1_4R_0er1p5R_v7, process.HLT_Dimuon0_Jpsi_NoVertexing_L1_4R_0er1p5R_v7, process.HLT_Dimuon0_Jpsi3p5_Muon2_v5, process.HLT_Dimuon0_Upsilon_L1_4p5_v9, process.HLT_Dimuon0_Upsilon_L1_5_v9, process.HLT_Dimuon0_Upsilon_L1_4p5NoOS_v8, process.HLT_Dimuon0_Upsilon_L1_4p5er2p0_v9, process.HLT_Dimuon0_Upsilon_L1_4p5er2p0M_v7, process.HLT_Dimuon0_Upsilon_NoVertexing_v7, process.HLT_Dimuon0_Upsilon_L1_5M_v8, process.HLT_Dimuon0_LowMass_L1_0er1p5R_v7, process.HLT_Dimuon0_LowMass_L1_0er1p5_v8, process.HLT_Dimuon0_LowMass_v8, process.HLT_Dimuon0_LowMass_L1_4_v8, process.HLT_Dimuon0_LowMass_L1_4R_v7, process.HLT_Dimuon0_LowMass_L1_TM530_v6, process.HLT_Trimuon2_Upsilon5_Muon_NoL1Mass_v6, process.HLT_Dimuon0_Upsilon_Muon_L1_TM0_v6, process.HLT_Dimuon0_Upsilon_Muon_NoL1Mass_v6, process.HLT_TripleMu_5_3_3_Mass3p8_DZ_v8, process.HLT_TripleMu_10_5_5_DZ_v10, process.HLT_TripleMu_12_10_5_v10, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_v4, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_Charge1_v4, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_v4, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_Charge1_v4, process.HLT_DoubleMu3_DZ_PFMET50_PFMHT60_v10, process.HLT_DoubleMu3_DZ_PFMET70_PFMHT70_v10, process.HLT_DoubleMu3_DZ_PFMET90_PFMHT90_v10, process.HLT_DoubleMu3_Trk_Tau3mu_NoL1Mass_v6, process.HLT_DoubleMu4_Jpsi_Displaced_v7, process.HLT_DoubleMu4_Jpsi_NoVertexing_v7, process.HLT_DoubleMu4_JpsiTrkTrk_Displaced_v7, process.HLT_DoubleMu43NoFiltersNoVtx_v4, process.HLT_DoubleMu48NoFiltersNoVtx_v4, process.HLT_Mu43NoFiltersNoVtx_Photon43_CaloIdL_v5, process.HLT_Mu48NoFiltersNoVtx_Photon48_CaloIdL_v5, process.HLT_Mu38NoFiltersNoVtxDisplaced_Photon38_CaloIdL_v1, process.HLT_Mu43NoFiltersNoVtxDisplaced_Photon43_CaloIdL_v1, process.HLT_DoubleMu33NoFiltersNoVtxDisplaced_v1, process.HLT_DoubleMu40NoFiltersNoVtxDisplaced_v1, process.HLT_DoubleMu20_7_Mass0to30_L1_DM4_v7, process.HLT_DoubleMu20_7_Mass0to30_L1_DM4EG_v8, process.HLT_HT425_v9, process.HLT_HT430_DisplacedDijet40_DisplacedTrack_v13, process.HLT_HT500_DisplacedDijet40_DisplacedTrack_v13, process.HLT_HT430_DisplacedDijet60_DisplacedTrack_v13, process.HLT_HT400_DisplacedDijet40_DisplacedTrack_v13, process.HLT_HT650_DisplacedDijet60_Inclusive_v13, process.HLT_HT550_DisplacedDijet60_Inclusive_v13, process.HLT_DiJet110_35_Mjj650_PFMET110_v9, process.HLT_DiJet110_35_Mjj650_PFMET120_v9, process.HLT_DiJet110_35_Mjj650_PFMET130_v9, process.HLT_TripleJet110_35_35_Mjj650_PFMET110_v9, process.HLT_TripleJet110_35_35_Mjj650_PFMET120_v9, process.HLT_TripleJet110_35_35_Mjj650_PFMET130_v9, process.HLT_Ele30_eta2p1_WPTight_Gsf_CentralPFJet35_EleCleaned_v13, process.HLT_Ele28_eta2p1_WPTight_Gsf_HT150_v13, process.HLT_Ele28_HighEta_SC20_Mass55_v13, process.HLT_DoubleMu20_7_Mass0to30_Photon23_v8, process.HLT_Ele15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, process.HLT_Ele15_IsoVVVL_PFHT450_PFMET50_v16, process.HLT_Ele15_IsoVVVL_PFHT450_v16, process.HLT_Ele50_IsoVVVL_PFHT450_v16, process.HLT_Ele15_IsoVVVL_PFHT600_v20, process.HLT_Mu4_TrkIsoVVL_DiPFJet90_40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v15, process.HLT_Mu8_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v16, process.HLT_Mu10_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT350_PFMETNoMu60_v15, process.HLT_Mu15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, process.HLT_Mu15_IsoVVVL_PFHT450_PFMET50_v15, process.HLT_Mu15_IsoVVVL_PFHT450_v15, process.HLT_Mu50_IsoVVVL_PFHT450_v15, process.HLT_Mu15_IsoVVVL_PFHT600_v19, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET70_PFMHT70_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET80_PFMHT80_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET90_PFMHT90_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET100_PFMHT100_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu70_PFMHTNoMu70_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu80_PFMHTNoMu80_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu90_PFMHTNoMu90_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu100_PFMHTNoMu100_IDTight_v2, process.HLT_Dimuon10_PsiPrime_Barrel_Seagulls_v7, process.HLT_Dimuon20_Jpsi_Barrel_Seagulls_v7, process.HLT_Dimuon12_Upsilon_y1p4_v2, process.HLT_Dimuon14_Phi_Barrel_Seagulls_v7, process.HLT_Dimuon18_PsiPrime_v14, process.HLT_Dimuon25_Jpsi_v14, process.HLT_Dimuon18_PsiPrime_noCorrL1_v6, process.HLT_Dimuon24_Upsilon_noCorrL1_v6, process.HLT_Dimuon24_Phi_noCorrL1_v6, process.HLT_Dimuon25_Jpsi_noCorrL1_v6, process.HLT_DiMu4_Ele9_CaloIdL_TrackIdL_DZ_Mass3p8_v17, process.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_DZ_v17, process.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_v17, process.HLT_DoubleIsoMu20_eta2p1_v7, process.HLT_TrkMu12_DoubleTrkMu5NoFiltersNoVtx_v6, process.HLT_TrkMu16_DoubleTrkMu6NoFiltersNoVtx_v12, process.HLT_TrkMu17_DoubleTrkMu8NoFiltersNoVtx_v13, process.HLT_Mu8_v12, process.HLT_Mu17_v13, process.HLT_Mu19_v4, process.HLT_Mu17_Photon30_IsoCaloId_v6, process.HLT_Ele8_CaloIdL_TrackIdL_IsoVL_PFJet30_v16, process.HLT_Ele12_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, process.HLT_Ele15_CaloIdL_TrackIdL_IsoVL_PFJet30_v3, process.HLT_Ele23_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, process.HLT_Ele8_CaloIdM_TrackIdM_PFJet30_v18, process.HLT_Ele17_CaloIdM_TrackIdM_PFJet30_v16, process.HLT_Ele23_CaloIdM_TrackIdM_PFJet30_v18, process.HLT_Ele50_CaloIdVT_GsfTrkIdT_PFJet165_v18, process.HLT_Ele115_CaloIdVT_GsfTrkIdT_v14, process.HLT_Ele135_CaloIdVT_GsfTrkIdT_v7, process.HLT_Ele145_CaloIdVT_GsfTrkIdT_v8, process.HLT_Ele200_CaloIdVT_GsfTrkIdT_v8, process.HLT_Ele250_CaloIdVT_GsfTrkIdT_v13, process.HLT_Ele300_CaloIdVT_GsfTrkIdT_v13, process.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_TriplePFBTagDeepCSV_4p5_v3, process.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_v9, process.HLT_PFHT400_SixPFJet32_DoublePFBTagDeepCSV_2p94_v8, process.HLT_PFHT400_SixPFJet32_v8, process.HLT_PFHT450_SixPFJet36_PFBTagDeepCSV_1p59_v7, process.HLT_PFHT450_SixPFJet36_v7, process.HLT_PFHT400_FivePFJet_100_100_60_30_30_v8, process.HLT_PFHT400_FivePFJet_100_100_60_30_30_DoublePFBTagDeepCSV_4p5_v8, process.HLT_PFHT400_FivePFJet_120_120_60_30_30_DoublePFBTagDeepCSV_4p5_v8, process.HLT_PFHT350_v19, process.HLT_PFHT350MinPFJet15_v9, process.HLT_Photon60_R9Id90_CaloIdL_IsoL_v5, process.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_v5, process.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_PFHT350MinPFJet15_v11, process.HLT_ECALHT800_v10, process.HLT_DiSC30_18_EIso_AND_HE_Mass70_v13, process.HLT_L1FatEvents_v2, process.HLT_Physics_v7, process.HLT_Physics_part0_v7, process.HLT_Physics_part1_v7, process.HLT_Physics_part2_v7, process.HLT_Physics_part3_v7, process.HLT_Physics_part4_v7, process.HLT_Physics_part5_v7, process.HLT_Physics_part6_v7, process.HLT_Physics_part7_v7, process.DST_Physics_v7, process.HLT_Random_v3, process.HLT_Random_TOTEM_part0_v1, process.HLT_Random_TOTEM_part1_v1, process.HLT_Random_TOTEM_part2_v1, process.HLT_Random_TOTEM_part3_v1, process.HLT_ZeroBias_v6, process.HLT_ZeroBias_TOTEM_part0_v1, process.HLT_ZeroBias_TOTEM_part1_v1, process.HLT_ZeroBias_TOTEM_part2_v1, process.HLT_ZeroBias_TOTEM_part3_v1, process.HLT_ZeroBias_Alignment_v1, process.HLT_ZeroBias_part0_v6, process.HLT_ZeroBias_part1_v6, process.HLT_ZeroBias_part2_v6, process.HLT_ZeroBias_part3_v6, process.HLT_ZeroBias_part4_v6, process.HLT_ZeroBias_part5_v6, process.HLT_ZeroBias_part6_v6, process.HLT_ZeroBias_part7_v6, process.DST_ZeroBias_v2, process.DST_HT250_CaloScouting_v10, process.DST_HT250_CaloBTagScouting_v10, process.DST_HT410_PFScouting_v16, process.DST_HT410_BTagScouting_v16, process.DST_ZeroBias_BTagScouting_v15, process.DST_ZeroBias_CaloScouting_PFScouting_v14, process.DST_CaloJet40_BTagScouting_v15, process.DST_CaloJet40_CaloScouting_PFScouting_v15, process.DST_CaloJet40_CaloBTagScouting_v14, process.DST_L1HTT_BTagScouting_v15, process.DST_L1HTT_CaloScouting_PFScouting_v15, process.DST_L1HTT_CaloBTagScouting_v14, process.DST_L1DoubleMu_BTagScouting_v16, process.DST_L1DoubleMu_CaloScouting_PFScouting_v15, process.DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6, process.DST_DoubleMu3_noVtx_CaloScouting_v6, process.DST_DoubleMu1_noVtx_CaloScouting_v2, process.DST_DoubleMu3_noVtx_Mass10_PFScouting_v3, process.HLT_AK4CaloJet30_v11, process.HLT_AK4CaloJet40_v10, process.HLT_AK4CaloJet50_v10, process.HLT_AK4CaloJet80_v10, process.HLT_AK4CaloJet100_v10, process.HLT_AK4CaloJet120_v9, process.HLT_AK4PFJet30_v19, process.HLT_AK4PFJet50_v19, process.HLT_AK4PFJet80_v19, process.HLT_AK4PFJet100_v19, process.HLT_AK4PFJet120_v18, process.HLT_PixelTracks_Multiplicity60ForPPRef_v5, process.HLT_PixelTracks_Multiplicity85ForPPRef_v5, process.HLT_PixelTracks_Multiplicity110ForPPRef_v5, process.HLT_PixelTracks_Multiplicity135ForPPRef_v5, process.HLT_PixelTracks_Multiplicity160ForPPRef_v5, process.HLT_AK4CaloJet40_Eta5p1ForPPRef_v9, process.HLT_AK4CaloJet60_Eta5p1ForPPRef_v9, process.HLT_AK4CaloJet80_Eta5p1ForPPRef_v9, process.HLT_AK4CaloJet100_Eta5p1ForPPRef_v9, process.HLT_AK4CaloJet110_Eta5p1ForPPRef_v9, process.HLT_AK4CaloJet120_Eta5p1ForPPRef_v9, process.HLT_AK4CaloJet150ForPPRef_v9, process.HLT_AK4PFJet40_Eta5p1ForPPRef_v16, process.HLT_AK4PFJet60_Eta5p1ForPPRef_v16, process.HLT_AK4PFJet80_Eta5p1ForPPRef_v16, process.HLT_AK4PFJet100_Eta5p1ForPPRef_v16, process.HLT_AK4PFJet110_Eta5p1ForPPRef_v16, process.HLT_AK4PFJet120_Eta5p1ForPPRef_v16, process.HLT_AK4CaloJet80_Jet35_Eta1p1ForPPRef_v9, process.HLT_AK4CaloJet80_Jet35_Eta0p7ForPPRef_v9, process.HLT_AK4CaloJet100_Jet35_Eta1p1ForPPRef_v9, process.HLT_AK4CaloJet100_Jet35_Eta0p7ForPPRef_v9, process.HLT_AK4CaloJet80_45_45_Eta2p1ForPPRef_v9, process.HLT_SinglePhoton10_Eta3p1ForPPRef_v8, process.HLT_SinglePhoton15_Eta3p1ForPPRef_v9, process.HLT_SinglePhoton20_Eta3p1ForPPRef_v9, process.HLT_SinglePhoton30_Eta3p1ForPPRef_v9, process.HLT_SinglePhoton40_Eta3p1ForPPRef_v8, process.HLT_SinglePhoton50_Eta3p1ForPPRef_v8, process.HLT_SinglePhoton60_Eta3p1ForPPRef_v8, process.HLT_Photon20_HoverELoose_v10, process.HLT_Photon30_HoverELoose_v10, process.HLT_Photon40_HoverELoose_v10, process.HLT_Photon50_HoverELoose_v10, process.HLT_Photon60_HoverELoose_v10, process.HLT_HIL2Mu3Eta2p5_AK4CaloJet40Eta2p1ForPPRef_v11, process.HLT_HIL2Mu3Eta2p5_AK4CaloJet60Eta2p1ForPPRef_v11, process.HLT_HIL2Mu3Eta2p5_AK4CaloJet80Eta2p1ForPPRef_v11, process.HLT_HIL2Mu3Eta2p5_AK4CaloJet100Eta2p1ForPPRef_v11, process.HLT_HIL1DoubleMu0ForPPRef_v4, process.HLT_HIL1DoubleMu10ForPPRef_v4, process.HLT_HIL2DoubleMu0_NHitQForPPRef_v5, process.HLT_HIL3DoubleMu0_OS_m2p5to4p5ForPPRef_v6, process.HLT_HIL3DoubleMu0_OS_m7to14ForPPRef_v6, process.HLT_HIL2Mu3_NHitQ10ForPPRef_v6, process.HLT_HIL3Mu3_NHitQ15ForPPRef_v6, process.HLT_HIL2Mu5_NHitQ10ForPPRef_v6, process.HLT_HIL3Mu5_NHitQ15ForPPRef_v6, process.HLT_HIL2Mu7_NHitQ10ForPPRef_v6, process.HLT_HIL3Mu7_NHitQ15ForPPRef_v6, process.HLT_HIL2Mu15ForPPRef_v6, process.HLT_HIL3Mu15ForPPRef_v6, process.HLT_HIL2Mu20ForPPRef_v6, process.HLT_HIL3Mu20ForPPRef_v6, process.HLT_FullTrack18ForPPRef_v11, process.HLT_FullTrack24ForPPRef_v11, process.HLT_FullTrack34ForPPRef_v11, process.HLT_FullTrack45ForPPRef_v11, process.HLT_FullTrack53ForPPRef_v11, process.HLT_HIL1CastorMediumJetForPPRef_v4, process.HLT_HIL1UnpairedBunchBptxMinusForPPRef_v2, process.HLT_HIL1UnpairedBunchBptxPlusForPPRef_v2, process.HLT_HIL1NotBptxORForPPRef_v2, process.HLT_HIHT80_Beamspot_ppRef5TeV_v3, process.HLT_HIZeroBias_part0_v6, process.HLT_HIZeroBias_part1_v6, process.HLT_HIZeroBias_part2_v6, process.HLT_HIZeroBias_part3_v6, process.HLT_HIZeroBias_part4_v6, process.HLT_HIZeroBias_part5_v6, process.HLT_HIZeroBias_part6_v6, process.HLT_HIZeroBias_part7_v6, process.HLT_HIZeroBias_part8_v6, process.HLT_HIZeroBias_part9_v6, process.HLT_HIZeroBias_part10_v6, process.HLT_HIZeroBias_part11_v6, process.AlCa_HIEcalPi0EBonly_v1, process.AlCa_HIEcalPi0EEonly_v1, process.AlCa_HIEcalEtaEBonly_v1, process.AlCa_HIEcalEtaEEonly_v1, process.HLT_DmesonPPTrackingGlobal_Dpt8ForPPRef_v11, process.HLT_DmesonPPTrackingGlobal_Dpt15ForPPRef_v11, process.HLT_DmesonPPTrackingGlobal_Dpt20ForPPRef_v11, process.HLT_DmesonPPTrackingGlobal_Dpt30ForPPRef_v11, process.HLT_DmesonPPTrackingGlobal_Dpt40ForPPRef_v11, process.HLT_DmesonPPTrackingGlobal_Dpt50ForPPRef_v11, process.HLT_DmesonPPTrackingGlobal_Dpt60ForPPRef_v11, process.HLT_AK4PFBJetBCSV60_Eta2p1ForPPRef_v16, process.HLT_AK4PFBJetBCSV80_Eta2p1ForPPRef_v16, process.HLT_AK4PFDJet60_Eta2p1ForPPRef_v16, process.HLT_AK4PFDJet80_Eta2p1ForPPRef_v16, process.HLT_AK4PFBJetBSSV60_Eta2p1ForPPRef_v16, process.HLT_AK4PFBJetBSSV80_Eta2p1ForPPRef_v16, process.HLT_EcalCalibration_v4, process.HLT_HcalCalibration_v5, process.AlCa_EcalPhiSym_v9, process.HLT_L1UnpairedBunchBptxMinus_v2, process.HLT_L1UnpairedBunchBptxPlus_v2, process.HLT_L1NotBptxOR_v3, process.HLT_L1BptxXOR_v1, process.HLT_L1TOTEM1_MinBias_v4, process.HLT_L1TOTEM2_ZeroBias_v4, process.HLT_L1MinimumBiasHF_OR_v3, process.HLT_L1MinimumBiasHF_OR_part0_v1, process.HLT_L1MinimumBiasHF_OR_part1_v1, process.HLT_L1MinimumBiasHF_OR_part2_v1, process.HLT_L1MinimumBiasHF_OR_part3_v1, process.HLT_L1MinimumBiasHF_OR_part4_v1, process.HLT_L1MinimumBiasHF_OR_part5_v1, process.HLT_L1MinimumBiasHF_OR_part6_v1, process.HLT_L1MinimumBiasHF_OR_part7_v1, process.HLT_L1MinimumBiasHF_OR_part8_v1, process.HLT_L1MinimumBiasHF_OR_part9_v1, process.HLT_L1MinimumBiasHF0OR_v4, process.HLT_L1MinimumBiasHF1OR_v4, process.HLT_L1MinimumBiasHF2OR_v4, process.HLT_L1MinimumBiasHF2ORNoBptxGating_v5, process.HLT_L1MinimumBiasHF1AND_v4, process.HLT_L1MinimumBiasHF2AND_v4, process.HLT_L1_CDC_SingleMu_3_er1p2_TOP120_DPHI2p618_3p142_v2, process.HLT_CDC_L2cosmic_10_er1p0_v1, process.HLT_CDC_L2cosmic_5p5_er1p0_v1, process.HLT_HcalNZS_v13, process.HLT_HcalPhiSym_v15, process.HLT_HcalIsolatedbunch_v5, process.HLT_IsoTrackHB_v4, process.HLT_IsoTrackHE_v4, process.HLT_ZeroBias_FirstCollisionAfterAbortGap_v5, process.HLT_ZeroBias_IsolatedBunches_v5, process.HLT_ZeroBias_FirstCollisionInTrain_v4, process.HLT_ZeroBias_LastCollisionInTrain_v3, process.HLT_ZeroBias_FirstBXAfterTrain_v3, process.AlCa_RPCMuonNormalisation_v13, process.AlCa_HIRPCMuonNormalisation_v1, process.AlCa_LumiPixelsCounts_Random_v1, process.AlCa_LumiPixelsCounts_ZeroBias_v1, process.MC_ReducedIterativeTracking_v12, process.MC_PFMET_v17, process.MC_AK4PFJets_v17, process.MC_PFBTagDeepCSV_v10, process.MC_PFHT_v16, process.MC_PFMHT_v16, process.MC_CaloMET_v8, process.MC_CaloMET_JetIdCleaned_v9, process.MC_AK4CaloJets_v9, process.MC_AK4CaloJetsFromPV_v8, process.MC_CaloBTagDeepCSV_v8, process.MC_CaloHT_v8, process.MC_CaloMHT_v8, process.MC_AK8PFJets_v17, process.MC_AK8TrimPFJets_v17, process.MC_AK8PFHT_v16, process.MC_AK8CaloHT_v8, process.MC_Diphoton10_10_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass10_v13, process.MC_DoubleEle5_CaloIdL_MW_v15, process.MC_Ele5_WPTight_Gsf_v8, process.MC_Ele15_Ele10_CaloIdL_TrackIdL_IsoVL_DZ_v15, process.MC_IsoMu_v15, process.MC_IsoTkMu15_v12, process.MC_DoubleMu_TrkIsoVVL_DZ_v11, process.MC_DoubleGlbTrkMu_TrkIsoVVL_DZ_v12, process.MC_DoubleMuNoFiltersNoVtx_v7, process.AlCa_EcalPi0EBonly_v13, process.AlCa_EcalPi0EEonly_v13, process.AlCa_EcalEtaEBonly_v13, process.AlCa_EcalEtaEEonly_v13, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET90_v12, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET100_v12, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET110_v8, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET120_v8, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET130_v8, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET140_v3, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, process.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_1pr_v11, process.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_v12, process.HLT_MediumChargedIsoPFTau200HighPtRelaxedIso_Trk50_eta2p1_v12, process.HLT_MediumChargedIsoPFTau220HighPtRelaxedIso_Trk50_eta2p1_v12, process.HLT_Ele16_Ele12_Ele8_CaloIdL_TrackIdL_v9, process.HLT_Rsq0p35_v15, process.HLT_Rsq0p40_v15, process.HLT_RsqMR300_Rsq0p09_MR200_v15, process.HLT_RsqMR320_Rsq0p09_MR200_v15, process.HLT_RsqMR300_Rsq0p09_MR200_4jet_v15, process.HLT_RsqMR320_Rsq0p09_MR200_4jet_v15, process.HLT_L1_DoubleJet30_Mass_Min400_Mu10_v1, process.HLT_IsoMu27_MET90_v3, process.HLT_DoubleMediumChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, process.HLT_DoubleMediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, process.HLT_DoubleTightChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, process.HLT_DoubleTightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, process.HLT_DoubleMediumChargedIsoPFTauHPS30_L1MaxMass_Trk1_eta2p1_Reg_v1, process.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4, process.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, process.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, process.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, process.HLT_VBF_DoubleLooseChargedIsoPFTau20_Trk1_eta2p1_v3, process.HLT_VBF_DoubleLooseChargedIsoPFTauHPS20_Trk1_eta2p1_v1, process.HLT_VBF_DoubleMediumChargedIsoPFTauHPS20_Trk1_eta2p1_v1, process.HLT_VBF_DoubleTightChargedIsoPFTauHPS20_Trk1_eta2p1_v1, process.HLT_Photon50_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_PFMET50_v5, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_v5, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ600DEta3_v5, process.HLT_PFMET100_PFMHT100_IDTight_PFHT60_v9, process.HLT_PFMETNoMu100_PFMHTNoMu100_IDTight_PFHT60_v9, process.HLT_PFMETTypeOne100_PFMHT100_IDTight_PFHT60_v9, process.HLT_Mu18_Mu9_SameSign_v4, process.HLT_Mu18_Mu9_SameSign_DZ_v4, process.HLT_Mu18_Mu9_v4, process.HLT_Mu18_Mu9_DZ_v4, process.HLT_Mu20_Mu10_SameSign_v4, process.HLT_Mu20_Mu10_SameSign_DZ_v4, process.HLT_Mu20_Mu10_v4, process.HLT_Mu20_Mu10_DZ_v4, process.HLT_Mu23_Mu12_SameSign_v4, process.HLT_Mu23_Mu12_SameSign_DZ_v4, process.HLT_Mu23_Mu12_v4, process.HLT_Mu23_Mu12_DZ_v4, process.HLT_DoubleMu2_Jpsi_DoubleTrk1_Phi1p05_v6, process.HLT_DoubleMu2_Jpsi_DoubleTkMu0_Phi_v5, process.HLT_DoubleMu3_DCA_PFMET50_PFMHT60_v10, process.HLT_TripleMu_5_3_3_Mass3p8_DCA_v3, process.HLT_QuadPFJet98_83_71_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_QuadPFJet103_88_75_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_QuadPFJet111_90_80_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_QuadPFJet98_83_71_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet103_88_75_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet105_88_76_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet111_90_80_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet98_83_71_15_v5, process.HLT_QuadPFJet103_88_75_15_v5, process.HLT_QuadPFJet105_88_76_15_v5, process.HLT_QuadPFJet111_90_80_15_v5, process.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p17_v2, process.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p1_v2, process.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_p02_v3, process.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np2_v2, process.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np4_v2, process.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_Mass55_v2, process.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_v2, process.HLT_Mu12_IP6_ToCSCS_v1, process.HLT_Mu12_IP6_part0_v2, process.HLT_Mu12_IP6_part1_v2, process.HLT_Mu12_IP6_part2_v2, process.HLT_Mu12_IP6_part3_v2, process.HLT_Mu12_IP6_part4_v2, process.HLT_Mu9_IP5_ToCSCS_v1, process.HLT_Mu9_IP5_part0_v2, process.HLT_Mu9_IP5_part1_v2, process.HLT_Mu9_IP5_part2_v2, process.HLT_Mu9_IP5_part3_v2, process.HLT_Mu9_IP5_part4_v2, process.HLT_Mu7_IP4_ToCSCS_v1, process.HLT_Mu7_IP4_part0_v2, process.HLT_Mu7_IP4_part1_v2, process.HLT_Mu7_IP4_part2_v2, process.HLT_Mu7_IP4_part3_v2, process.HLT_Mu7_IP4_part4_v2, process.HLT_Mu9_IP4_ToCSCS_v1, process.HLT_Mu9_IP4_part0_v2, process.HLT_Mu9_IP4_part1_v2, process.HLT_Mu9_IP4_part2_v2, process.HLT_Mu9_IP4_part3_v2, process.HLT_Mu9_IP4_part4_v2, process.HLT_Mu8_IP5_ToCSCS_v1, process.HLT_Mu8_IP5_part0_v2, process.HLT_Mu8_IP5_part1_v2, process.HLT_Mu8_IP5_part2_v2, process.HLT_Mu8_IP5_part3_v2, process.HLT_Mu8_IP5_part4_v2, process.HLT_Mu8_IP6_ToCSCS_v1, process.HLT_Mu8_IP6_part0_v2, process.HLT_Mu8_IP6_part1_v2, process.HLT_Mu8_IP6_part2_v2, process.HLT_Mu8_IP6_part3_v2, process.HLT_Mu8_IP6_part4_v2, process.HLT_Mu9_IP6_ToCSCS_v1, process.HLT_Mu9_IP6_part0_v3, process.HLT_Mu9_IP6_part1_v3, process.HLT_Mu9_IP6_part2_v3, process.HLT_Mu9_IP6_part3_v3, process.HLT_Mu9_IP6_part4_v3, process.HLT_Mu8_IP3_ToCSCS_v1, process.HLT_Mu8_IP3_part0_v3, process.HLT_Mu8_IP3_part1_v3, process.HLT_Mu8_IP3_part2_v3, process.HLT_Mu8_IP3_part3_v3, process.HLT_Mu8_IP3_part4_v3, process.HLT_Mu9_IP0_part0_v2, process.HLT_Mu9_IP3_part0_v2, process.HLT_QuadPFJet105_88_76_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_TrkMu6NoFiltersNoVtx_v1, process.HLT_TrkMu16NoFiltersNoVtx_v1, process.HLT_DoubleTrkMu_16_6_NoFiltersNoVtx_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part0_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part1_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part2_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part3_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part0_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part1_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part2_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part3_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part0_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part1_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part2_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part3_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part0_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part1_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part2_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part3_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part0_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part1_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part2_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part3_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part0_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part1_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part2_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part3_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part0_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part1_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part2_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part3_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part0_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part1_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part2_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part3_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part0_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part1_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part2_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part3_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part0_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part1_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part2_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part3_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part0_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part1_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part2_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part3_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part0_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part1_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part2_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part3_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part0_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part1_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part2_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part3_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part0_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part1_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part2_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part3_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part0_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part1_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part2_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part3_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part0_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part1_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part2_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part3_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part0_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part1_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part2_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part3_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part0_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part1_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part2_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part3_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part0_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part1_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part2_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part3_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part0_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part1_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part2_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part3_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part0_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part1_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part2_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part3_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part0_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part1_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part2_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part3_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part0_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part1_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part2_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part3_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part0_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part1_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part2_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part3_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part0_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part1_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part2_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part3_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part0_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part1_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part2_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part3_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part0_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part1_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part2_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part3_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part0_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part1_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part2_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part3_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part0_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part1_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part2_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part3_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part0_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part1_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part2_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part3_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part0_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part1_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part2_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part3_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part0_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part1_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part2_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part3_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part0_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part1_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part2_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part3_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part0_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part1_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part2_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part3_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part0_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part1_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part2_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part3_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part0_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part1_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part2_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part3_v1, process.HLT_L1TOTEM_3_v1, process.HLT_L1RomanPot_part0_v1, process.HLT_L1RomanPot_part1_v1, process.HLT_L1RomanPot_part2_v1, process.HLT_L1RomanPot_part3_v1, process.HLT_L1DoubleMu_v1, process.HLT_L1SingleMu_v1, process.HLT_L1DoubleJet_v1, process.HLT_L1DoubleJetANDTotem_v1, process.HLT_L1DoubleJet_gap_v1, process.HLT_L1HFveto_v1, process.HLT_HIPhysics_v1, process.HLT_HIPhysicsForZS_v1, process.HLT_HIRandom_v1, process.AlCa_EcalPhiSymForHI_v1, process.HLT_HIHcalNZS_v1, process.HLT_HIHcalPhiSym_v1, process.AlCa_RPCMuonNormalisationForHI_v1, process.AlCa_EcalPi0EBonlyForHI_v1, process.AlCa_EcalPi0EEonlyForHI_v1, process.AlCa_EcalEtaEBonlyForHI_v1, process.AlCa_EcalEtaEEonlyForHI_v1, process.HLT_HICentralityVeto_v1, process.HLT_HICentralityVeto_Beamspot_v1, process.HLT_HICentrality30100_FirstCollisionAfterAbortGap_v1, process.HLT_HICentralityTag20100_v1, process.HLT_HICentralityTag30100_v1, process.HLT_HICentralityTag50100_v1, process.HLT_HIZeroBias_v1, process.HLT_HIZeroBias_FirstCollisionAfterAbortGap_v1, process.HLT_HIMinimumBias_part0_v1, process.HLT_HIMinimumBias_part1_v1, process.HLT_HIMinimumBias_part2_v1, process.HLT_HIMinimumBias_part3_v1, process.HLT_HIMinimumBias_part4_v1, process.HLT_HIMinimumBias_part5_v1, process.HLT_HIMinimumBias_part6_v1, process.HLT_HIMinimumBias_part7_v1, process.HLT_HIMinimumBias_part8_v1, process.HLT_HIMinimumBias_part9_v1, process.HLT_HIMinimumBias_part10_v1, process.HLT_HIMinimumBias_part11_v1, process.HLT_HIMinimumBias_part12_v1, process.HLT_HIMinimumBias_part13_v1, process.HLT_HIMinimumBias_part14_v1, process.HLT_HIMinimumBias_part15_v1, process.HLT_HIMinimumBias_part16_v1, process.HLT_HIMinimumBias_part17_v1, process.HLT_HIMinimumBias_part18_v1, process.HLT_HIMinimumBias_part19_v1, process.HLT_HIMinimumBiasRF_part0_v1, process.HLT_HIMinimumBiasRF_part1_v1, process.HLT_HIMinimumBiasRF_part2_v1, process.HLT_HIMinimumBiasRF_part3_v1, process.HLT_HIMinimumBiasRF_part4_v1, process.HLT_HIMinimumBiasRF_part5_v1, process.HLT_HIMinimumBiasRF_part6_v1, process.HLT_HIMinimumBiasRF_part7_v1, process.HLT_HIMinimumBiasRF_part8_v1, process.HLT_HIMinimumBiasRF_part9_v1, process.HLT_HIMinimumBiasRF_part10_v1, process.HLT_HIMinimumBiasRF_part11_v1, process.HLT_HIMinimumBiasRF_part12_v1, process.HLT_HIMinimumBiasRF_part13_v1, process.HLT_HIMinimumBiasRF_part14_v1, process.HLT_HIMinimumBiasRF_part15_v1, process.HLT_HIMinimumBiasRF_part16_v1, process.HLT_HIMinimumBiasRF_part17_v1, process.HLT_HIMinimumBiasRF_part18_v1, process.HLT_HIMinimumBiasRF_part19_v1, process.HLT_HIMinimumBiasRF_part20_v1, process.HLT_HIMinimumBiasRF_part21_v1, process.HLT_HIMinimumBiasRF_part22_v1, process.HLT_HIMinimumBiasRF_part23_v1, process.HLT_HIPuAK4CaloJet40Eta5p1_v1, process.HLT_HIPuAK4CaloJet60Eta5p1_v1, process.HLT_HIPuAK4CaloJet80Eta5p1_v1, process.HLT_HIPuAK4CaloJet100Eta5p1_v1, process.HLT_HIPuAK4CaloJet120Eta5p1_v1, process.HLT_HIPuAK4CaloJet40Eta5p1_Centrality_30_100_v1, process.HLT_HIPuAK4CaloJet40Eta5p1_Centrality_50_100_v1, process.HLT_HIPuAK4CaloJet60Eta5p1_Centrality_30_100_v1, process.HLT_HIPuAK4CaloJet60Eta5p1_Centrality_50_100_v1, process.HLT_HIPuAK4CaloJet80Eta5p1_Centrality_30_100_v1, process.HLT_HIPuAK4CaloJet80Eta5p1_Centrality_50_100_v1, process.HLT_HIPuAK4CaloJet100Eta5p1_Centrality_30_100_v1, process.HLT_HIPuAK4CaloJet100Eta5p1_Centrality_50_100_v1, process.HLT_HIPuAK4CaloJet80_35_Eta1p1_v1, process.HLT_HIPuAK4CaloJet100_35_Eta1p1_v1, process.HLT_HIPuAK4CaloJet80_35_Eta0p7_v1, process.HLT_HIPuAK4CaloJet100_35_Eta0p7_v1, process.HLT_HIPuAK4CaloJet80_45_45_Eta2p1_v1, process.HLT_HIPuAK4CaloJet40Fwd_v1, process.HLT_HIPuAK4CaloJet60Fwd_v1, process.HLT_HIPuAK4CaloJet80Fwd_v1, process.HLT_HIPuAK4CaloJet100Fwd_v1, process.HLT_HIPuAK4CaloJet120Fwd_v1, process.HLT_HIIslandPhoton10_Eta2p4_v1, process.HLT_HIIslandPhoton10_Eta1p5_v1, process.HLT_HIIslandPhoton20_Eta2p4_v1, process.HLT_HIIslandPhoton20_Eta1p5_v1, process.HLT_HIIslandPhoton30_Eta2p4_v1, process.HLT_HIIslandPhoton30_Eta1p5_v1, process.HLT_HIIslandPhoton40_Eta2p4_v1, process.HLT_HIIslandPhoton40_Eta1p5_v1, process.HLT_HIIslandPhoton50_Eta2p4_v1, process.HLT_HIIslandPhoton50_Eta1p5_v1, process.HLT_HIIslandPhoton60_Eta2p4_v1, process.HLT_HIIslandPhoton60_Eta1p5_v1, process.HLT_HIGEDPhoton10_v1, process.HLT_HIGEDPhoton20_v1, process.HLT_HIGEDPhoton30_v1, process.HLT_HIGEDPhoton40_v1, process.HLT_HIGEDPhoton50_v1, process.HLT_HIGEDPhoton60_v1, process.HLT_HIGEDPhoton10_EB_v1, process.HLT_HIGEDPhoton20_EB_v1, process.HLT_HIGEDPhoton30_EB_v1, process.HLT_HIGEDPhoton40_EB_v1, process.HLT_HIGEDPhoton50_EB_v1, process.HLT_HIGEDPhoton60_EB_v1, process.HLT_HIGEDPhoton10_HECut_v1, process.HLT_HIGEDPhoton20_HECut_v1, process.HLT_HIGEDPhoton30_HECut_v1, process.HLT_HIGEDPhoton40_HECut_v1, process.HLT_HIGEDPhoton50_HECut_v1, process.HLT_HIGEDPhoton60_HECut_v1, process.HLT_HIGEDPhoton10_EB_HECut_v1, process.HLT_HIGEDPhoton20_EB_HECut_v1, process.HLT_HIGEDPhoton30_EB_HECut_v1, process.HLT_HIGEDPhoton40_EB_HECut_v1, process.HLT_HIGEDPhoton50_EB_HECut_v1, process.HLT_HIGEDPhoton60_EB_HECut_v1, process.HLT_HIEle10Gsf_v1, process.HLT_HIEle15Gsf_v1, process.HLT_HIEle20Gsf_v1, process.HLT_HIEle30Gsf_v1, process.HLT_HIEle40Gsf_v1, process.HLT_HIEle50Gsf_v1, process.HLT_HIEle15Ele10Gsf_v1, process.HLT_HIEle15Ele10GsfMass50_v1, process.HLT_HIDoubleEle10Gsf_v1, process.HLT_HIDoubleEle10GsfMass50_v1, process.HLT_HIDoubleEle15Gsf_v1, process.HLT_HIDoubleEle15GsfMass50_v1, process.HLT_HIL1Mu3Eta2p5_Ele10Gsf_v1, process.HLT_HIL1Mu3Eta2p5_Ele15Gsf_v1, process.HLT_HIL1Mu3Eta2p5_Ele20Gsf_v1, process.HLT_HIL1Mu5Eta2p5_Ele10Gsf_v1, process.HLT_HIL1Mu5Eta2p5_Ele15Gsf_v1, process.HLT_HIL1Mu5Eta2p5_Ele20Gsf_v1, process.HLT_HIL1Mu7Eta2p5_Ele10Gsf_v1, process.HLT_HIL1Mu7Eta2p5_Ele15Gsf_v1, process.HLT_HIL1Mu7Eta2p5_Ele20Gsf_v1, process.HLT_HIEle10Gsf_PuAK4CaloJet40Eta2p1_v1, process.HLT_HIEle10Gsf_PuAK4CaloJet60Eta2p1_v1, process.HLT_HIEle10Gsf_PuAK4CaloJet80Eta2p1_v1, process.HLT_HIEle10Gsf_PuAK4CaloJet100Eta2p1_v1, process.HLT_HIEle15Gsf_PuAK4CaloJet40Eta2p1_v1, process.HLT_HIEle15Gsf_PuAK4CaloJet60Eta2p1_v1, process.HLT_HIEle15Gsf_PuAK4CaloJet80Eta2p1_v1, process.HLT_HIEle15Gsf_PuAK4CaloJet100Eta2p1_v1, process.HLT_HIEle20Gsf_PuAK4CaloJet40Eta2p1_v1, process.HLT_HIEle20Gsf_PuAK4CaloJet60Eta2p1_v1, process.HLT_HIEle20Gsf_PuAK4CaloJet80Eta2p1_v1, process.HLT_HIEle20Gsf_PuAK4CaloJet100Eta2p1_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt15_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt20_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt30_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt40_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt50_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt60_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt15_NoIter10_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt20_NoIter10_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt30_NoIter10_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt40_NoIter10_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt50_NoIter10_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt60_NoIter10_v1, process.HLT_HIDsPPTrackingGlobal_Dpt20_v1, process.HLT_HIDsPPTrackingGlobal_Dpt30_v1, process.HLT_HIDsPPTrackingGlobal_Dpt40_v1, process.HLT_HIDsPPTrackingGlobal_Dpt50_v1, process.HLT_HIDsPPTrackingGlobal_Dpt60_v1, process.HLT_HIDsPPTrackingGlobal_Dpt20_NoIter10_v1, process.HLT_HIDsPPTrackingGlobal_Dpt30_NoIter10_v1, process.HLT_HIDsPPTrackingGlobal_Dpt40_NoIter10_v1, process.HLT_HIDsPPTrackingGlobal_Dpt50_NoIter10_v1, process.HLT_HIDsPPTrackingGlobal_Dpt60_NoIter10_v1, process.HLT_HILcPPTrackingGlobal_Dpt20_v1, process.HLT_HILcPPTrackingGlobal_Dpt30_v1, process.HLT_HILcPPTrackingGlobal_Dpt40_v1, process.HLT_HILcPPTrackingGlobal_Dpt50_v1, process.HLT_HILcPPTrackingGlobal_Dpt60_v1, process.HLT_HILcPPTrackingGlobal_Dpt20_NoIter10_v1, process.HLT_HILcPPTrackingGlobal_Dpt30_NoIter10_v1, process.HLT_HILcPPTrackingGlobal_Dpt40_NoIter10_v1, process.HLT_HILcPPTrackingGlobal_Dpt50_NoIter10_v1, process.HLT_HILcPPTrackingGlobal_Dpt60_NoIter10_v1, process.HLT_HIFullTracks2018_HighPt18_v1, process.HLT_HIFullTracks2018_HighPt24_v1, process.HLT_HIFullTracks2018_HighPt34_v1, process.HLT_HIFullTracks2018_HighPt45_v1, process.HLT_HIFullTracks2018_HighPt56_v1, process.HLT_HIFullTracks2018_HighPt60_v1, process.HLT_HIFullTracks2018_HighPt18_NoIter10_v1, process.HLT_HIFullTracks2018_HighPt24_NoIter10_v1, process.HLT_HIFullTracks2018_HighPt34_NoIter10_v1, process.HLT_HIFullTracks2018_HighPt45_NoIter10_v1, process.HLT_HIFullTracks2018_HighPt56_NoIter10_v1, process.HLT_HIFullTracks2018_HighPt60_NoIter10_v1, process.HLT_HIL1DoubleMuOpen_v1, process.HLT_HIL1DoubleMuOpen_Centrality_30_100_v1, process.HLT_HIL1DoubleMuOpen_Centrality_40_100_v1, process.HLT_HIL1DoubleMuOpen_Centrality_50_100_v1, process.HLT_HIL1DoubleMuOpen_er1p6_v1, process.HLT_HIL1DoubleMuOpen_OS_er1p6_v1, process.HLT_HIL1DoubleMuOpen_OS_Centrality_30_100_v1, process.HLT_HIL1DoubleMuOpen_OS_Centrality_40_100_v1, process.HLT_HIL1DoubleMu0_v1, process.HLT_HIL1DoubleMu10_v1, process.HLT_HIL2_L1DoubleMu10_v1, process.HLT_HIL3_L1DoubleMu10_v1, process.HLT_HIL2DoubleMuOpen_v1, process.HLT_HIL3DoubleMuOpen_v1, process.HLT_HIL3DoubleMuOpen_M60120_v1, process.HLT_HIL3DoubleMuOpen_JpsiPsi_v1, process.HLT_HIL3DoubleMuOpen_Upsi_v1, process.HLT_HIL3Mu0_L2Mu0_v1, process.HLT_HIL3Mu2p5NHitQ10_L2Mu2_v1, process.HLT_HIL1MuOpen_Centrality_70_100_v1, process.HLT_HIL1MuOpen_Centrality_80_100_v1, process.HLT_HIL2Mu3_NHitQ15_v1, process.HLT_HIL2Mu5_NHitQ15_v1, process.HLT_HIL2Mu7_NHitQ15_v1, process.HLT_HIL2Mu3_NHitQ15_tagging_v1, process.HLT_HIL2Mu5_NHitQ15_tagging_v1, process.HLT_HIL2Mu7_NHitQ15_tagging_v1, process.HLT_HIL3Mu2p5_L1DoubleMu0_v1, process.HLT_HIL3Mu3_L1DoubleMuOpen_OS_v1, process.HLT_HIL3Mu3NHitQ10_L1DoubleMuOpen_v1, process.HLT_HIL3Mu3_L1TripleMuOpen_v1, process.HLT_HIL3Mu12_v1, process.HLT_HIL3Mu15_v1, process.HLT_HIL3Mu20_v1, process.HLT_HIL3Mu3_NHitQ10_v1, process.HLT_HIL3Mu5_NHitQ10_v1, process.HLT_HIL3Mu7_NHitQ10_v1, process.HLT_HIL3Mu3_NHitQ10_tagging_v1, process.HLT_HIL3Mu5_NHitQ10_tagging_v1, process.HLT_HIL3Mu7_NHitQ10_tagging_v1, process.HLT_HIL3Mu0NHitQ10_L2Mu0_MAXdR3p5_M1to5_v1, process.HLT_HIL3Mu2p5NHitQ10_L2Mu2_M7toinf_v1, process.HLT_HIL1_ETT8_ETTAsym50_MinimumBiasHF1_OR_BptxAND_v1, process.HLT_HIL1_ETT10_ETTAsym50_MinimumBiasHF1_OR_BptxAND_v1, process.HLT_HIL1_ETT60_ETTAsym65_MinimumBiasHF2_OR_PixelTracks10_v1, process.HLT_HIL1_ETT65_ETTAsym80_MinimumBiasHF2_OR_PixelTracks10_v1, process.HLT_HIFullTracks_Multiplicity020_HF1AND_v1, process.HLT_HIFullTracks_Multiplicity2040_HF1AND_v1, process.HLT_HIFullTracks_Multiplicity4060_v1, process.HLT_HIFullTracks_Multiplicity6080_v1, process.HLT_HIFullTracks_Multiplicity80100_v1, process.HLT_HIFullTracks_Multiplicity020_v1, process.HLT_HIFullTracks_Multiplicity020_HF1OR_v1, process.HLT_HIFullTracks_Multiplicity020_HF2OR_v1, process.HLT_HIFullTracks_Multiplicity2040_v1, process.HLT_HIFullTracks_Multiplicity2040_HF1OR_v1, process.HLT_HIFullTracks_Multiplicity2040_HF2OR_v1, process.HLT_HIFullTracks_Multiplicity335_HF1OR_v1, process.HLT_HIUPC_Mu8_Mu13_v1, process.HLT_HIUPC_Mu8_Mu13_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMuOpen_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleMuOpen_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMuOpen_NotMBHF2OR_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMuOpen_NotMBHF2AND_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMuOpen_NotMBHF2AND_v1, process.HLT_HIUPC_DoubleMuOpen_NotMBHF2OR_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleMuOpen_NotMBHF2OR_v1, process.HLT_HIUPC_SingleMuOpen_NotMBHF2OR_v1, process.HLT_HIUPC_SingleMu0_NotMBHF2OR_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMu0_NotMBHF2AND_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMu0_NotMBHF2AND_v1, process.HLT_HIUPC_DoubleMu0_NotMBHF2OR_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleMu0_NotMBHF2AND_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleMu0_NotMBHF2AND_v1, process.HLT_HIUPC_DoubleMu0_NotMBHF2OR_v1, process.HLT_HIUPC_SingleMu0_NotMBHF2OR_v1, process.HLT_HIUPC_SingleMu3_NotMBHF2OR_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMu3_NotMBHF2OR_v1, process.HLT_HIUPC_SingleMu0_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleMu0_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMu3_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG2_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG2_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG2_NotMBHF2AND_SinglePixelTrack_v1, process.HLT_HIUPC_DoubleEG2_NotMBHF2AND_v1, process.HLT_HIUPC_NotMBHF2OR_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_NotMBHF2AND_SinglePixelTrack_v1, process.HLT_HIUPC_NotMBHF2AND_v1, process.HLT_HIUPC_NotMBHF2OR_BptxAND_SinglePixelTrack_v1, process.HLT_HIUPC_ZeroBias_SinglePixelTrack_v1, process.HLT_HIUPC_DoubleEG2_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG2_NotMBHF2OR_SinglePixelTrack_v1, process.HLT_HIUPC_DoubleEG2_NotMBHF2OR_v1, process.HLT_HIUPC_DoubleEG5_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG5_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG5_NotMBHF2AND_SinglePixelTrack_v1, process.HLT_HIUPC_DoubleEG5_NotMBHF2AND_v1, process.HLT_HIUPC_DoubleEG5_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG5_NotMBHF2OR_SinglePixelTrack_v1, process.HLT_HIUPC_DoubleEG5_NotMBHF2OR_v1, process.HLT_HIUPC_SingleEG5_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_SingleEG5_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_SingleEG5_NotMBHF2AND_SinglePixelTrack_v1, process.HLT_HIUPC_SingleEG5_NotMBHF2AND_v1, process.HLT_HIUPC_SingleEG5_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_SingleEG3_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_SingleEG3_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_SingleEG3_NotMBHF2AND_SinglePixelTrack_v1, process.HLT_HIUPC_SingleEG3_NotMBHF2AND_v1, process.HLT_HIUPC_SingleEG3_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_SingleEG3_NotMBHF2OR_SinglePixelTrack_v1, process.HLT_HIUPC_SingleEG3_NotMBHF2OR_v1, process.HLT_HIUPC_SingleEG5_NotMBHF2OR_SinglePixelTrack_v1, process.HLT_HIUPC_SingleEG5_NotMBHF2OR_v1, process.HLT_HIUPC_ETT5_Asym50_NotMBHF2OR_v1, process.HLT_HIUPC_ETT5_Asym50_NotMBHF2OR_SinglePixelTrack_v1, process.HLT_HIUPC_ZeroBias_MaxPixelCluster_v1, process.HLT_HIUPC_SingleEG3_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_SingleEG5_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG2_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG5_BptxAND_MaxPixelTrack_v1, process.HLT_HICsAK4PFJet60Eta1p5_v1, process.HLT_HICsAK4PFJet80Eta1p5_v1, process.HLT_HICsAK4PFJet100Eta1p5_v1, process.HLT_HICsAK4PFJet100Eta1p5_Beamspot_v1, process.HLT_HICsAK4PFJet120Eta1p5_v1, process.HLT_HICsAK4PFJet60Eta1p5_Centrality_30_100_v1, process.HLT_HICsAK4PFJet60Eta1p5_Centrality_50_100_v1, process.HLT_HICsAK4PFJet80Eta1p5_Centrality_30_100_v1, process.HLT_HICsAK4PFJet80Eta1p5_Centrality_50_100_v1, process.HLT_HICsAK4PFJet100Eta1p5_Centrality_30_100_v1, process.HLT_HICsAK4PFJet100Eta1p5_Centrality_50_100_v1, process.HLT_HIL3Mu3_EG10HECut_v1, process.HLT_HIL3Mu3_EG15HECut_v1, process.HLT_HIL3Mu3_EG20HECut_v1, process.HLT_HIL3Mu3_EG30HECut_v1, process.HLT_HIL3Mu5_EG10HECut_v1, process.HLT_HIL3Mu5_EG15HECut_v1, process.HLT_HIL3Mu5_EG20HECut_v1, process.HLT_HIL3Mu5_EG30HECut_v1, process.HLT_HIL3Mu7_EG10HECut_v1, process.HLT_HIL3Mu7_EG15HECut_v1, process.HLT_HIL3Mu7_EG20HECut_v1, process.HLT_HIL3Mu7_EG30HECut_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet40Eta2p1_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet60Eta2p1_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet80Eta2p1_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet100Eta2p1_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet40Eta2p1_FilterDr_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet60Eta2p1_FilterDr_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet80Eta2p1_FilterDr_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet100Eta2p1_FilterDr_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet40Eta2p1_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet60Eta2p1_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet80Eta2p1_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet100Eta2p1_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet40Eta2p1_FilterDr_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet60Eta2p1_FilterDr_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet80Eta2p1_FilterDr_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet100Eta2p1_FilterDr_v1, process.HLT_HICastor_MediumJet_NotMBHF2AND_v1, process.HLT_HICastor_MediumJet_NotMBHF2OR_v1, process.HLT_HICastor_MediumJet_MBHF1OR_BptxAND_v1, process.HLT_HICastor_MediumJet_SingleMu0_MBHF1OR_BptxAND_v1, process.HLT_HICastor_MediumJet_SingleEG5_MBHF1OR_BptxAND_v1, process.HLT_HICastor_MediumJet_BptxAND_v1, process.HLT_HICastor_MediumJet_v1, process.HLT_HICastor_HighJet_v1, process.HLT_HICastor_HighJet_BptxAND_v1, process.HLT_HICastor_HighJet_MBHF1OR_BptxAND_v1, process.HLT_HICastor_HighJet_NotMBHF2OR_v1, process.HLT_HICastor_HighJet_NotMBHF2AND_v1, process.HLT_HICastor_HighJet_MBHF1AND_BptxAND_v1, process.HLT_HICastor_HighJet_MBHF2AND_BptxAND_v1, process.HLT_HICastor_Muon_v1, process.HLT_HICastor_Muon_BptxAND_v1, process.HLT_HIIslandPhoton10_Eta2p4_Cent30_100_v1, process.HLT_HIIslandPhoton20_Eta2p4_Cent30_100_v1, process.HLT_HIIslandPhoton30_Eta2p4_Cent30_100_v1, process.HLT_HIIslandPhoton40_Eta2p4_Cent30_100_v1, process.HLT_HIIslandPhoton10_Eta2p4_Cent50_100_v1, process.HLT_HIIslandPhoton20_Eta2p4_Cent50_100_v1, process.HLT_HIIslandPhoton30_Eta2p4_Cent50_100_v1, process.HLT_HIIslandPhoton40_Eta2p4_Cent50_100_v1, process.HLT_HIGEDPhoton10_Cent30_100_v1, process.HLT_HIGEDPhoton20_Cent30_100_v1, process.HLT_HIGEDPhoton30_Cent30_100_v1, process.HLT_HIGEDPhoton40_Cent30_100_v1, process.HLT_HIGEDPhoton10_Cent50_100_v1, process.HLT_HIGEDPhoton20_Cent50_100_v1, process.HLT_HIGEDPhoton30_Cent50_100_v1, process.HLT_HIGEDPhoton40_Cent50_100_v1, process.HLT_HIPuAK4CaloJet60Eta2p4_DeepCSV0p4_v1, process.HLT_HIPuAK4CaloJet80Eta2p4_DeepCSV0p4_v1, process.HLT_HIPuAK4CaloJet100Eta2p4_DeepCSV0p4_v1, process.HLT_HIPuAK4CaloJet60Eta2p4_CSVv2WP0p75_v1, process.HLT_HIPuAK4CaloJet80Eta2p4_CSVv2WP0p75_v1, process.HLT_HIPuAK4CaloJet100Eta2p4_CSVv2WP0p75_v1, process.HLT_HIL1NotBptxOR_v1, process.HLT_HIL1UnpairedBunchBptxMinus_v1, process.HLT_HIL1UnpairedBunchBptxPlus_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part0_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part1_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part2_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part3_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part4_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part5_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part6_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part7_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part8_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part9_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part10_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part11_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part12_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part13_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part14_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part15_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part16_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part17_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part18_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part19_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part0_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part1_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part2_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part3_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part4_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part5_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part6_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part7_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part8_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part9_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part10_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part11_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part12_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part13_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part14_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part15_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part16_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part17_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part18_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part19_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part20_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part21_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part22_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part23_v1, process.HLT_HIL1_ZDC_AND_OR_MinimumBiasHF1_AND_BptxAND_v1, process.HLT_HIL1_ZDC_AND_OR_MinimumBiasHF2_AND_BptxAND_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part0_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part1_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part2_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part3_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part4_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part5_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part6_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part7_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part8_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part9_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part10_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part11_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part12_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part13_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part14_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part15_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part16_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part17_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part18_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part19_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part0_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part1_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part2_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part3_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part4_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part5_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part6_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part7_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part8_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part9_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part10_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part11_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part12_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part13_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part14_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part15_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part16_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part17_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part18_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part19_v1, process.HLTriggerFinalPath, process.HLTAnalyzerEndpath, process.RatesMonitoring, process.DQMHistograms, process.ParkingHLTPhysicsOutput, process.ParkingZeroBiasOutput, process.PhysicsCommissioningOutput, process.PhysicsEGammaOutput, process.PhysicsEndOfFillOutput, process.PhysicsHadronsTausOutput, process.PhysicsMuonsOutput, process.PhysicsTracksOutput, process.PhysicsForwardOutput, process.ParkingBPH1Output, process.ParkingBPH2Output, process.ParkingBPH3Output, process.ParkingBPH4Output, process.ParkingBPH5Output, process.DQMOutput, process.DQMOnlineBeamspotOutput, process.DQMCalibrationOutput, process.DQMEventDisplayOutput, process.HLTMonitorOutput, process.RPCMONOutput, process.CalibrationOutput, process.EcalCalibrationOutput, process.ALCAPHISYMOutput, process.ALCALumiPixelCountsExpressOutput, process.ALCALumiPixelCountsPromptOutput, process.ALCAP0Output, process.ExpressOutput, process.ExpressCosmicsOutput, process.ExpressAlignmentOutput, process.NanoDSTOutput, process.ScoutingPFOutput, process.ScoutingCaloMuonOutput, process.PhysicsScoutingMonitorOutput, process.PhysicsHLTPhysics1Output, process.PhysicsHLTPhysics2Output, process.PhysicsHLTPhysics3Output, process.PhysicsHLTPhysics4Output, process.PhysicsZeroBias1Output, process.PhysicsZeroBias2Output, process.PhysicsZeroBias3Output, process.PhysicsZeroBias4Output, process.PhysicsHIZeroBias1Output, process.PhysicsHIZeroBias2Output, process.PhysicsHIZeroBias3Output, process.PhysicsHIZeroBias4Output, process.PhysicsHIZeroBias5Output, process.PhysicsHIZeroBias6Output, process.PhysicsTOTEM1part0Output, process.PhysicsTOTEM1part1Output, process.PhysicsTOTEM1part2Output, process.PhysicsTOTEM1part3Output, process.PhysicsTOTEM2part0Output, process.PhysicsTOTEM2part1Output, process.PhysicsTOTEM2part2Output, process.PhysicsTOTEM2part3Output, process.PhysicsTOTEM3Output, process.PhysicsTOTEM4part0Output, process.PhysicsTOTEM4part1Output, process.PhysicsTOTEM4part2Output, process.PhysicsTOTEM4part3Output, process.PhysicsRandomTOTEM1Output, process.PhysicsRandomTOTEM2Output, process.PhysicsRandomTOTEM3Output, process.PhysicsRandomTOTEM4Output, process.PhysicsZeroBiasTOTEM1Output, process.PhysicsZeroBiasTOTEM2Output, process.PhysicsZeroBiasTOTEM3Output, process.PhysicsZeroBiasTOTEM4Output, process.PhysicsMinimumBias0Output, process.PhysicsMinimumBias1Output, process.PhysicsMinimumBias2Output, process.PhysicsMinimumBias3Output, process.PhysicsMinimumBias4Output, process.PhysicsMinimumBias5Output, process.PhysicsMinimumBias6Output, process.PhysicsMinimumBias7Output, process.PhysicsMinimumBias8Output, process.PhysicsMinimumBias9Output, process.PhysicsEGammaCommissioningOutput, process.PhysicsHICommissioningOutput, process.PhysicsHIDoubleMuonOutput, process.PhysicsHISingleMuonOutput, process.PhysicsHIHardProbesOutput, process.PhysicsHIMinimumBiasReducedFormat0Output, process.PhysicsHIMinimumBiasReducedFormat1Output, process.PhysicsHIMinimumBiasReducedFormat2Output, process.PhysicsHIMinimumBiasReducedFormat3Output, process.PhysicsHIMinimumBiasReducedFormat4Output, process.PhysicsHIMinimumBiasReducedFormat5Output, process.PhysicsHIMinimumBiasReducedFormat6Output, process.PhysicsHIMinimumBiasReducedFormat7Output, process.PhysicsHIMinimumBiasReducedFormat8Output, process.PhysicsHIMinimumBiasReducedFormat9Output, process.PhysicsHIMinimumBiasReducedFormat10Output, process.PhysicsHIMinimumBiasReducedFormat11Output, process.PhysicsHITrackerNZSOutput, process.PhysicsHIForwardOutput, process.HIHLTMonitorOutput, process.HIDQMOutput, process.HIDQMEventDisplayOutput, process.HIDQMOnlineBeamspotOutput, process.HIExpressOutput, process.HIExpressAlignmentOutput, process.PhysicsHIHardProbesLowerOutput, process.PhysicsHIHardProbesPeripheralOutput, process.PhysicsHIHeavyFlavorOutput, process.PhysicsHIHighMultiplicityOutput, process.PhysicsHILowMultiplicityOutput, process.PhysicsHILowMultiplicityReducedFormatOutput, process.PhysicsHIMinimumBias0Output, process.PhysicsHIMinimumBias1Output, process.PhysicsHIMinimumBias2Output, process.PhysicsHIMinimumBias3Output, process.PhysicsHIMinimumBias4Output, process.PhysicsHIMinimumBias5Output, process.PhysicsHIMinimumBias6Output, process.PhysicsHIMinimumBias7Output, process.PhysicsHIMinimumBias8Output, process.PhysicsHIMinimumBias9Output, process.PhysicsHIMinimumBias10Output, process.PhysicsHIMinimumBias11Output, process.PhysicsHIMinimumBias12Output, process.PhysicsHIMinimumBias13Output, process.PhysicsHIMinimumBias14Output, process.PhysicsHIMinimumBias15Output, process.PhysicsHIMinimumBias16Output, process.PhysicsHIMinimumBias17Output, process.PhysicsHIMinimumBias18Output, process.PhysicsHIMinimumBias19Output )) +process.HLTSchedule = cms.Schedule( *(process.HLTriggerFirstPath, process.HLT_AK8PFJet360_TrimMass30_v18, process.HLT_AK8PFJet380_TrimMass30_v11, process.HLT_AK8PFJet400_TrimMass30_v12, process.HLT_AK8PFJet420_TrimMass30_v11, process.HLT_AK8PFHT750_TrimMass50_v12, process.HLT_AK8PFHT800_TrimMass50_v12, process.HLT_AK8PFHT850_TrimMass50_v11, process.HLT_AK8PFHT900_TrimMass50_v11, process.HLT_CaloJet10_NoJetID_v3, process.HLT_CaloJet20_NoJetID_v3, process.HLT_CaloJet50_NoJetID_v3, process.HLT_CaloJet500_NoJetID_v12, process.HLT_CaloJet550_NoJetID_v7, process.HLT_DoubleMu5_Upsilon_DoubleEle3_CaloIdL_TrackIdL_v4, process.HLT_DoubleMu3_DoubleEle7p5_CaloIdL_TrackIdL_Upsilon_v4, process.HLT_Trimuon5_3p5_2_Upsilon_Muon_v5, process.HLT_TrimuonOpen_5_3p5_2_Upsilon_Muon_v3, process.HLT_DoubleEle25_CaloIdL_MW_v4, process.HLT_DoubleEle27_CaloIdL_MW_v4, process.HLT_DoubleEle33_CaloIdL_MW_v17, process.HLT_DoubleEle24_eta2p1_WPTight_Gsf_v7, process.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_DZ_PFHT350_v20, process.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_PFHT350_v20, process.HLT_Ele27_Ele37_CaloIdL_MW_v4, process.HLT_Mu27_Ele37_CaloIdL_MW_v5, process.HLT_Mu37_Ele27_CaloIdL_MW_v5, process.HLT_Mu37_TkMu27_v5, process.HLT_DoubleMu4_3_Bs_v14, process.HLT_DoubleMu4_3_Jpsi_v2, process.HLT_DoubleMu4_JpsiTrk_Displaced_v15, process.HLT_DoubleMu4_LowMassNonResonantTrk_Displaced_v15, process.HLT_DoubleMu3_Trk_Tau3mu_v12, process.HLT_DoubleMu3_TkMu_DsTau3Mu_v4, process.HLT_DoubleMu4_PsiPrimeTrk_Displaced_v15, process.HLT_DoubleMu4_Mass3p8_DZ_PFHT350_v8, process.HLT_Mu3_PFJet40_v16, process.HLT_Mu7p5_L2Mu2_Jpsi_v10, process.HLT_Mu7p5_L2Mu2_Upsilon_v10, process.HLT_Mu7p5_Track2_Jpsi_v11, process.HLT_Mu7p5_Track3p5_Jpsi_v11, process.HLT_Mu7p5_Track7_Jpsi_v11, process.HLT_Mu7p5_Track2_Upsilon_v11, process.HLT_Mu7p5_Track3p5_Upsilon_v11, process.HLT_Mu7p5_Track7_Upsilon_v11, process.HLT_Mu3_L1SingleMu5orSingleMu7_v1, process.HLT_DoublePhoton33_CaloIdL_v6, process.HLT_DoublePhoton70_v6, process.HLT_DoublePhoton85_v14, process.HLT_Ele20_WPTight_Gsf_v6, process.HLT_Ele15_WPLoose_Gsf_v3, process.HLT_Ele17_WPLoose_Gsf_v3, process.HLT_Ele20_WPLoose_Gsf_v6, process.HLT_Ele20_eta2p1_WPLoose_Gsf_v6, process.HLT_DiEle27_WPTightCaloOnly_L1DoubleEG_v4, process.HLT_Ele27_WPTight_Gsf_v16, process.HLT_Ele28_WPTight_Gsf_v1, process.HLT_Ele30_WPTight_Gsf_v1, process.HLT_Ele32_WPTight_Gsf_v15, process.HLT_Ele35_WPTight_Gsf_v9, process.HLT_Ele35_WPTight_Gsf_L1EGMT_v5, process.HLT_Ele38_WPTight_Gsf_v9, process.HLT_Ele40_WPTight_Gsf_v9, process.HLT_Ele32_WPTight_Gsf_L1DoubleEG_v9, process.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTau30_eta2p1_CrossL1_v13, process.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, process.HLT_HT450_Beamspot_v11, process.HLT_HT300_Beamspot_v11, process.HLT_HT60_Beamspot_v1, process.HLT_ZeroBias_Beamspot_v4, process.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTau27_eta2p1_CrossL1_v12, process.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_CrossL1_v4, process.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, process.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, process.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, process.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, process.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v4, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS30_Trk1_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu27_LooseChargedIsoPFTau20_Trk1_eta2p1_SingleL1_v5, process.HLT_IsoMu27_LooseChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, process.HLT_IsoMu27_MediumChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, process.HLT_IsoMu27_TightChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, process.HLT_IsoMu20_v15, process.HLT_IsoMu24_v13, process.HLT_IsoMu24_eta2p1_v15, process.HLT_IsoMu27_v16, process.HLT_IsoMu30_v4, process.HLT_UncorrectedJetE30_NoBPTX_v6, process.HLT_UncorrectedJetE30_NoBPTX3BX_v6, process.HLT_UncorrectedJetE60_NoBPTX3BX_v6, process.HLT_UncorrectedJetE70_NoBPTX3BX_v6, process.HLT_L1SingleMu18_v3, process.HLT_L1SingleMu25_v2, process.HLT_L1SingleMuOpen_v2, process.HLT_L1SingleMuOpen_DT_v2, process.HLT_L1SingleMuCosmics_v1, process.HLT_L1SingleMu3_v1, process.HLT_L1SingleMu5_v1, process.HLT_L1SingleMu7_v1, process.HLT_L1DoubleMu0_v1, process.HLT_L1SingleEG10_v2, process.HLT_L1SingleEG15_v2, process.HLT_L1SingleEG18_v1, process.HLT_L1SingleJet16_v1, process.HLT_L1SingleJet20_v1, process.HLT_L1SingleJet35_v1, process.HLT_L1SingleJet8erHE_v1, process.HLT_L1SingleJet10erHE_v1, process.HLT_L1SingleJet12erHE_v1, process.HLT_L1SingleJet200_v1, process.HLT_L1DoubleJetC50_v2, process.HLT_L1EXT_HCAL_LaserMon1_v1, process.HLT_L1EXT_HCAL_LaserMon4_v1, process.HLT_DQMPixels_SingleMuOpen_v1, process.HLT_L2DoubleMu23_NoVertex_v2, process.HLT_L2Mu10_v7, process.HLT_L2Mu10_NoVertex_NoBPTX3BX_v5, process.HLT_L2Mu10_NoVertex_NoBPTX_v6, process.HLT_L2Mu45_NoVertex_3Sta_NoBPTX3BX_v4, process.HLT_L2Mu40_NoVertex_3Sta_NoBPTX3BX_v5, process.HLT_L2Mu50_v2, process.HLT_L2Mu23NoVtx_2Cha_v1, process.HLT_L2Mu23NoVtx_2Cha_CosmicSeed_v1, process.HLT_DoubleL2Mu30NoVtx_2Cha_CosmicSeed_Eta2p4_v2, process.HLT_DoubleL2Mu30NoVtx_2Cha_Eta2p4_v2, process.HLT_DoubleL2Mu50_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_Eta2p4_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_Eta2p4_v2, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_v14, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_v3, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v15, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_v3, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8_v5, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass8_v3, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8_v5, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass3p8_v3, process.HLT_Mu25_TkMu0_Onia_v8, process.HLT_Mu30_TkMu0_Psi_v1, process.HLT_Mu30_TkMu0_Upsilon_v1, process.HLT_Mu20_TkMu0_Phi_v8, process.HLT_Mu25_TkMu0_Phi_v8, process.HLT_Mu12_v3, process.HLT_Mu15_v3, process.HLT_Mu20_v12, process.HLT_Mu27_v13, process.HLT_Mu50_v13, process.HLT_Mu55_v3, process.HLT_OldMu100_v3, process.HLT_TkMu100_v2, process.HLT_DiPFJet15_NoCaloMatched_v16, process.HLT_DiPFJet25_NoCaloMatched_v16, process.HLT_DiPFJet15_FBEta3_NoCaloMatched_v17, process.HLT_DiPFJet25_FBEta3_NoCaloMatched_v17, process.HLT_DiPFJetAve40_v14, process.HLT_DiPFJetAve60_v14, process.HLT_DiPFJetAve80_v13, process.HLT_DiPFJetAve140_v13, process.HLT_DiPFJetAve200_v13, process.HLT_DiPFJetAve260_v14, process.HLT_DiPFJetAve320_v14, process.HLT_DiPFJetAve400_v14, process.HLT_DiPFJetAve500_v14, process.HLT_DiPFJetAve15_HFJEC_v17, process.HLT_DiPFJetAve25_HFJEC_v17, process.HLT_DiPFJetAve35_HFJEC_v17, process.HLT_DiPFJetAve60_HFJEC_v15, process.HLT_DiPFJetAve80_HFJEC_v16, process.HLT_DiPFJetAve100_HFJEC_v16, process.HLT_DiPFJetAve160_HFJEC_v16, process.HLT_DiPFJetAve220_HFJEC_v16, process.HLT_DiPFJetAve300_HFJEC_v16, process.HLT_AK8PFJet15_v3, process.HLT_AK8PFJet25_v3, process.HLT_AK8PFJet40_v16, process.HLT_AK8PFJet60_v15, process.HLT_AK8PFJet80_v15, process.HLT_AK8PFJet140_v15, process.HLT_AK8PFJet200_v15, process.HLT_AK8PFJet260_v16, process.HLT_AK8PFJet320_v16, process.HLT_AK8PFJet400_v16, process.HLT_AK8PFJet450_v16, process.HLT_AK8PFJet500_v16, process.HLT_AK8PFJet550_v11, process.HLT_PFJet15_v3, process.HLT_PFJet25_v3, process.HLT_PFJet40_v21, process.HLT_PFJet60_v21, process.HLT_PFJet80_v20, process.HLT_PFJet140_v19, process.HLT_PFJet200_v19, process.HLT_PFJet260_v20, process.HLT_PFJet320_v20, process.HLT_PFJet400_v20, process.HLT_PFJet450_v21, process.HLT_PFJet500_v21, process.HLT_PFJet550_v11, process.HLT_PFJetFwd15_v3, process.HLT_PFJetFwd25_v3, process.HLT_PFJetFwd40_v19, process.HLT_PFJetFwd60_v19, process.HLT_PFJetFwd80_v18, process.HLT_PFJetFwd140_v18, process.HLT_PFJetFwd200_v18, process.HLT_PFJetFwd260_v19, process.HLT_PFJetFwd320_v19, process.HLT_PFJetFwd400_v19, process.HLT_PFJetFwd450_v19, process.HLT_PFJetFwd500_v19, process.HLT_AK8PFJetFwd15_v3, process.HLT_AK8PFJetFwd25_v3, process.HLT_AK8PFJetFwd40_v15, process.HLT_AK8PFJetFwd60_v14, process.HLT_AK8PFJetFwd80_v14, process.HLT_AK8PFJetFwd140_v14, process.HLT_AK8PFJetFwd200_v14, process.HLT_AK8PFJetFwd260_v15, process.HLT_AK8PFJetFwd320_v15, process.HLT_AK8PFJetFwd400_v15, process.HLT_AK8PFJetFwd450_v15, process.HLT_AK8PFJetFwd500_v15, process.HLT_PFHT180_v17, process.HLT_PFHT250_v17, process.HLT_PFHT370_v17, process.HLT_PFHT430_v17, process.HLT_PFHT510_v17, process.HLT_PFHT590_v17, process.HLT_PFHT680_v17, process.HLT_PFHT780_v17, process.HLT_PFHT890_v17, process.HLT_PFHT1050_v18, process.HLT_PFHT500_PFMET100_PFMHT100_IDTight_v12, process.HLT_PFHT500_PFMET110_PFMHT110_IDTight_v12, process.HLT_PFHT700_PFMET85_PFMHT85_IDTight_v12, process.HLT_PFHT700_PFMET95_PFMHT95_IDTight_v12, process.HLT_PFHT800_PFMET75_PFMHT75_IDTight_v12, process.HLT_PFHT800_PFMET85_PFMHT85_IDTight_v12, process.HLT_PFMET110_PFMHT110_IDTight_v20, process.HLT_PFMET120_PFMHT120_IDTight_v20, process.HLT_PFMET130_PFMHT130_IDTight_v20, process.HLT_PFMET140_PFMHT140_IDTight_v20, process.HLT_PFMET100_PFMHT100_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET110_PFMHT110_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET120_PFMHT120_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET130_PFMHT130_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET140_PFMHT140_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET120_PFMHT120_IDTight_PFHT60_v9, process.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_PFHT60_v9, process.HLT_PFMETTypeOne120_PFMHT120_IDTight_PFHT60_v9, process.HLT_PFMETTypeOne110_PFMHT110_IDTight_v12, process.HLT_PFMETTypeOne120_PFMHT120_IDTight_v12, process.HLT_PFMETTypeOne130_PFMHT130_IDTight_v12, process.HLT_PFMETTypeOne140_PFMHT140_IDTight_v11, process.HLT_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, process.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, process.HLT_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, process.HLT_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, process.HLT_MonoCentralPFJet80_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, process.HLT_MonoCentralPFJet80_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, process.HLT_MonoCentralPFJet80_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, process.HLT_MonoCentralPFJet80_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, process.HLT_L1ETMHadSeeds_v2, process.HLT_CaloMHT90_v4, process.HLT_CaloMET80_NotCleaned_v4, process.HLT_CaloMET90_NotCleaned_v4, process.HLT_CaloMET100_NotCleaned_v4, process.HLT_CaloMET110_NotCleaned_v4, process.HLT_CaloMET250_NotCleaned_v4, process.HLT_CaloMET300_NotCleaned_v4, process.HLT_CaloMET350_NotCleaned_v4, process.HLT_PFMET200_NotCleaned_v9, process.HLT_PFMET250_NotCleaned_v9, process.HLT_PFMET300_NotCleaned_v9, process.HLT_PFMET200_BeamHaloCleaned_v9, process.HLT_PFMETTypeOne200_BeamHaloCleaned_v9, process.HLT_MET105_IsoTrk50_v9, process.HLT_MET120_IsoTrk50_v9, process.HLT_SingleJet30_Mu12_SinglePFJet40_v11, process.HLT_Mu12_DoublePFJets40_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets100_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets200_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets350_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets40MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets54MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets62MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets40_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets100_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets200_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets350_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets116MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets128MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_Photon300_NoHE_v12, process.HLT_Mu8_TrkIsoVVL_v12, process.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_DZ_v18, process.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_v18, process.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_DZ_v19, process.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_v19, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v13, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_PFBtagDeepCSV_1p5_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_CaloBtagDeepCSV_1p5_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v11, process.HLT_Mu17_TrkIsoVVL_v13, process.HLT_Mu19_TrkIsoVVL_v4, process.HLT_BTagMu_AK4DiJet20_Mu5_v13, process.HLT_BTagMu_AK4DiJet40_Mu5_v13, process.HLT_BTagMu_AK4DiJet70_Mu5_v13, process.HLT_BTagMu_AK4DiJet110_Mu5_v13, process.HLT_BTagMu_AK4DiJet170_Mu5_v12, process.HLT_BTagMu_AK4Jet300_Mu5_v12, process.HLT_BTagMu_AK8DiJet170_Mu5_v9, process.HLT_BTagMu_AK8Jet170_DoubleMu5_v2, process.HLT_BTagMu_AK8Jet300_Mu5_v12, process.HLT_BTagMu_AK4DiJet20_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet40_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet70_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet110_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet170_Mu5_noalgo_v12, process.HLT_BTagMu_AK4Jet300_Mu5_noalgo_v12, process.HLT_BTagMu_AK8DiJet170_Mu5_noalgo_v9, process.HLT_BTagMu_AK8Jet170_DoubleMu5_noalgo_v2, process.HLT_BTagMu_AK8Jet300_Mu5_noalgo_v12, process.HLT_Ele15_Ele8_CaloIdL_TrackIdL_IsoVL_v3, process.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v19, process.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_v19, process.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v15, process.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_v7, process.HLT_Mu23_TrkIsoVVL_Ele8_CaloIdL_TrackIdL_IsoVL_DZ_v10, process.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v7, process.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v15, process.HLT_Mu12_DoublePhoton20_v5, process.HLT_TriplePhoton_20_20_20_CaloIdLV2_v3, process.HLT_TriplePhoton_20_20_20_CaloIdLV2_R9IdVL_v3, process.HLT_TriplePhoton_30_30_10_CaloIdLV2_v4, process.HLT_TriplePhoton_30_30_10_CaloIdLV2_R9IdVL_v4, process.HLT_TriplePhoton_35_35_5_CaloIdLV2_R9IdVL_v4, process.HLT_Photon20_v2, process.HLT_Photon22_v2, process.HLT_Photon25_v4, process.HLT_Photon33_v5, process.HLT_Photon50_v13, process.HLT_Photon75_v13, process.HLT_Photon90_v13, process.HLT_Photon120_v13, process.HLT_Photon150_v6, process.HLT_Photon175_v14, process.HLT_Photon200_v13, process.HLT_Photon100EB_TightID_TightIso_v2, process.HLT_Photon110EB_TightID_TightIso_v2, process.HLT_Photon120EB_TightID_TightIso_v2, process.HLT_Photon100EBHE10_v2, process.HLT_Photon100EEHE10_v2, process.HLT_Photon100EE_TightID_TightIso_v2, process.HLT_Photon50_R9Id90_HE10_IsoM_v14, process.HLT_Photon75_R9Id90_HE10_IsoM_v14, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ300_PFJetsMJJ400DEta3_v5, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ400_PFJetsMJJ600DEta3_v5, process.HLT_Photon90_R9Id90_HE10_IsoM_v14, process.HLT_Photon120_R9Id90_HE10_IsoM_v14, process.HLT_Photon165_R9Id90_HE10_IsoM_v15, process.HLT_Photon90_CaloIdL_PFHT700_v16, process.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass90_v13, process.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass95_v13, process.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_PixelVeto_Mass55_v15, process.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_NoPixelVeto_Mass55_v13, process.HLT_Photon35_TwoProngs35_v1, process.HLT_IsoMu24_TwoProngs35_v1, process.HLT_Dimuon0_Jpsi_L1_NoOS_v7, process.HLT_Dimuon0_Jpsi_NoVertexing_NoOS_v7, process.HLT_Dimuon0_Jpsi_v8, process.HLT_Dimuon0_Jpsi_NoVertexing_v8, process.HLT_Dimuon0_Jpsi_L1_4R_0er1p5R_v7, process.HLT_Dimuon0_Jpsi_NoVertexing_L1_4R_0er1p5R_v7, process.HLT_Dimuon0_Jpsi3p5_Muon2_v5, process.HLT_Dimuon0_Upsilon_L1_4p5_v9, process.HLT_Dimuon0_Upsilon_L1_5_v9, process.HLT_Dimuon0_Upsilon_L1_4p5NoOS_v8, process.HLT_Dimuon0_Upsilon_L1_4p5er2p0_v9, process.HLT_Dimuon0_Upsilon_L1_4p5er2p0M_v7, process.HLT_Dimuon0_Upsilon_NoVertexing_v7, process.HLT_Dimuon0_Upsilon_L1_5M_v8, process.HLT_Dimuon0_LowMass_L1_0er1p5R_v7, process.HLT_Dimuon0_LowMass_L1_0er1p5_v8, process.HLT_Dimuon0_LowMass_v8, process.HLT_Dimuon0_LowMass_L1_4_v8, process.HLT_Dimuon0_LowMass_L1_4R_v7, process.HLT_Dimuon0_LowMass_L1_TM530_v6, process.HLT_Trimuon2_Upsilon5_Muon_NoL1Mass_v6, process.HLT_Dimuon0_Upsilon_Muon_L1_TM0_v6, process.HLT_Dimuon0_Upsilon_Muon_NoL1Mass_v6, process.HLT_TripleMu_5_3_3_Mass3p8_DZ_v8, process.HLT_TripleMu_10_5_5_DZ_v10, process.HLT_TripleMu_12_10_5_v10, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_v4, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_Charge1_v4, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_v4, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_Charge1_v4, process.HLT_DoubleMu3_DZ_PFMET50_PFMHT60_v10, process.HLT_DoubleMu3_DZ_PFMET70_PFMHT70_v10, process.HLT_DoubleMu3_DZ_PFMET90_PFMHT90_v10, process.HLT_DoubleMu3_Trk_Tau3mu_NoL1Mass_v6, process.HLT_DoubleMu4_Jpsi_Displaced_v7, process.HLT_DoubleMu4_Jpsi_NoVertexing_v7, process.HLT_DoubleMu4_JpsiTrkTrk_Displaced_v7, process.HLT_DoubleMu43NoFiltersNoVtx_v4, process.HLT_DoubleMu48NoFiltersNoVtx_v4, process.HLT_Mu43NoFiltersNoVtx_Photon43_CaloIdL_v5, process.HLT_Mu48NoFiltersNoVtx_Photon48_CaloIdL_v5, process.HLT_Mu38NoFiltersNoVtxDisplaced_Photon38_CaloIdL_v1, process.HLT_Mu43NoFiltersNoVtxDisplaced_Photon43_CaloIdL_v1, process.HLT_DoubleMu33NoFiltersNoVtxDisplaced_v1, process.HLT_DoubleMu40NoFiltersNoVtxDisplaced_v1, process.HLT_DoubleMu20_7_Mass0to30_L1_DM4_v7, process.HLT_DoubleMu20_7_Mass0to30_L1_DM4EG_v8, process.HLT_HT425_v9, process.HLT_HT430_DisplacedDijet40_DisplacedTrack_v13, process.HLT_HT500_DisplacedDijet40_DisplacedTrack_v13, process.HLT_HT430_DisplacedDijet60_DisplacedTrack_v13, process.HLT_HT400_DisplacedDijet40_DisplacedTrack_v13, process.HLT_HT650_DisplacedDijet60_Inclusive_v13, process.HLT_HT550_DisplacedDijet60_Inclusive_v13, process.HLT_DiJet110_35_Mjj650_PFMET110_v9, process.HLT_DiJet110_35_Mjj650_PFMET120_v9, process.HLT_DiJet110_35_Mjj650_PFMET130_v9, process.HLT_TripleJet110_35_35_Mjj650_PFMET110_v9, process.HLT_TripleJet110_35_35_Mjj650_PFMET120_v9, process.HLT_TripleJet110_35_35_Mjj650_PFMET130_v9, process.HLT_Ele30_eta2p1_WPTight_Gsf_CentralPFJet35_EleCleaned_v13, process.HLT_Ele28_eta2p1_WPTight_Gsf_HT150_v13, process.HLT_Ele28_HighEta_SC20_Mass55_v13, process.HLT_DoubleMu20_7_Mass0to30_Photon23_v8, process.HLT_Ele15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, process.HLT_Ele15_IsoVVVL_PFHT450_PFMET50_v16, process.HLT_Ele15_IsoVVVL_PFHT450_v16, process.HLT_Ele50_IsoVVVL_PFHT450_v16, process.HLT_Ele15_IsoVVVL_PFHT600_v20, process.HLT_Mu4_TrkIsoVVL_DiPFJet90_40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v15, process.HLT_Mu8_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v16, process.HLT_Mu10_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT350_PFMETNoMu60_v15, process.HLT_Mu15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, process.HLT_Mu15_IsoVVVL_PFHT450_PFMET50_v15, process.HLT_Mu15_IsoVVVL_PFHT450_v15, process.HLT_Mu50_IsoVVVL_PFHT450_v15, process.HLT_Mu15_IsoVVVL_PFHT600_v19, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET70_PFMHT70_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET80_PFMHT80_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET90_PFMHT90_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET100_PFMHT100_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu70_PFMHTNoMu70_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu80_PFMHTNoMu80_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu90_PFMHTNoMu90_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu100_PFMHTNoMu100_IDTight_v2, process.HLT_Dimuon10_PsiPrime_Barrel_Seagulls_v7, process.HLT_Dimuon20_Jpsi_Barrel_Seagulls_v7, process.HLT_Dimuon12_Upsilon_y1p4_v2, process.HLT_Dimuon14_Phi_Barrel_Seagulls_v7, process.HLT_Dimuon18_PsiPrime_v14, process.HLT_Dimuon25_Jpsi_v14, process.HLT_Dimuon18_PsiPrime_noCorrL1_v6, process.HLT_Dimuon24_Upsilon_noCorrL1_v6, process.HLT_Dimuon24_Phi_noCorrL1_v6, process.HLT_Dimuon25_Jpsi_noCorrL1_v6, process.HLT_DiMu4_Ele9_CaloIdL_TrackIdL_DZ_Mass3p8_v17, process.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_DZ_v17, process.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_v17, process.HLT_DoubleIsoMu20_eta2p1_v7, process.HLT_TrkMu12_DoubleTrkMu5NoFiltersNoVtx_v6, process.HLT_TrkMu16_DoubleTrkMu6NoFiltersNoVtx_v12, process.HLT_TrkMu17_DoubleTrkMu8NoFiltersNoVtx_v13, process.HLT_Mu8_v12, process.HLT_Mu17_v13, process.HLT_Mu19_v4, process.HLT_Mu17_Photon30_IsoCaloId_v6, process.HLT_Ele8_CaloIdL_TrackIdL_IsoVL_PFJet30_v16, process.HLT_Ele12_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, process.HLT_Ele15_CaloIdL_TrackIdL_IsoVL_PFJet30_v3, process.HLT_Ele23_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, process.HLT_Ele8_CaloIdM_TrackIdM_PFJet30_v18, process.HLT_Ele17_CaloIdM_TrackIdM_PFJet30_v16, process.HLT_Ele23_CaloIdM_TrackIdM_PFJet30_v18, process.HLT_Ele50_CaloIdVT_GsfTrkIdT_PFJet165_v18, process.HLT_Ele115_CaloIdVT_GsfTrkIdT_v14, process.HLT_Ele135_CaloIdVT_GsfTrkIdT_v7, process.HLT_Ele145_CaloIdVT_GsfTrkIdT_v8, process.HLT_Ele200_CaloIdVT_GsfTrkIdT_v8, process.HLT_Ele250_CaloIdVT_GsfTrkIdT_v13, process.HLT_Ele300_CaloIdVT_GsfTrkIdT_v13, process.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_TriplePFBTagDeepCSV_4p5_v3, process.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_v9, process.HLT_PFHT400_SixPFJet32_DoublePFBTagDeepCSV_2p94_v8, process.HLT_PFHT400_SixPFJet32_v8, process.HLT_PFHT450_SixPFJet36_PFBTagDeepCSV_1p59_v7, process.HLT_PFHT450_SixPFJet36_v7, process.HLT_PFHT400_FivePFJet_100_100_60_30_30_v8, process.HLT_PFHT400_FivePFJet_100_100_60_30_30_DoublePFBTagDeepCSV_4p5_v8, process.HLT_PFHT400_FivePFJet_120_120_60_30_30_DoublePFBTagDeepCSV_4p5_v8, process.HLT_PFHT350_v19, process.HLT_PFHT350MinPFJet15_v9, process.HLT_Photon60_R9Id90_CaloIdL_IsoL_v5, process.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_v5, process.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_PFHT350MinPFJet15_v11, process.HLT_ECALHT800_v10, process.HLT_DiSC30_18_EIso_AND_HE_Mass70_v13, process.HLT_L1FatEvents_v2, process.HLT_Physics_v7, process.HLT_Physics_part0_v7, process.HLT_Physics_part1_v7, process.HLT_Physics_part2_v7, process.HLT_Physics_part3_v7, process.HLT_Physics_part4_v7, process.HLT_Physics_part5_v7, process.HLT_Physics_part6_v7, process.HLT_Physics_part7_v7, process.DST_Physics_v7, process.HLT_Random_v3, process.HLT_Random_TOTEM_part0_v1, process.HLT_Random_TOTEM_part1_v1, process.HLT_Random_TOTEM_part2_v1, process.HLT_Random_TOTEM_part3_v1, process.HLT_ZeroBias_v6, process.HLT_ZeroBias_TOTEM_part0_v1, process.HLT_ZeroBias_TOTEM_part1_v1, process.HLT_ZeroBias_TOTEM_part2_v1, process.HLT_ZeroBias_TOTEM_part3_v1, process.HLT_ZeroBias_Alignment_v1, process.HLT_ZeroBias_part0_v6, process.HLT_ZeroBias_part1_v6, process.HLT_ZeroBias_part2_v6, process.HLT_ZeroBias_part3_v6, process.HLT_ZeroBias_part4_v6, process.HLT_ZeroBias_part5_v6, process.HLT_ZeroBias_part6_v6, process.HLT_ZeroBias_part7_v6, process.DST_ZeroBias_v2, process.DST_HT250_CaloScouting_v10, process.DST_HT250_CaloBTagScouting_v10, process.DST_HT410_PFScouting_v16, process.DST_HT410_BTagScouting_v16, process.DST_ZeroBias_BTagScouting_v15, process.DST_ZeroBias_CaloScouting_PFScouting_v14, process.DST_CaloJet40_BTagScouting_v15, process.DST_CaloJet40_CaloScouting_PFScouting_v15, process.DST_CaloJet40_CaloBTagScouting_v14, process.DST_L1HTT_BTagScouting_v15, process.DST_L1HTT_CaloScouting_PFScouting_v15, process.DST_L1HTT_CaloBTagScouting_v14, process.DST_L1DoubleMu_BTagScouting_v16, process.DST_L1DoubleMu_CaloScouting_PFScouting_v15, process.DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6, process.DST_DoubleMu3_noVtx_CaloScouting_v6, process.DST_DoubleMu1_noVtx_CaloScouting_v2, process.DST_DoubleMu3_noVtx_Mass10_PFScouting_v3, process.DST_Run3_PFScoutingPixelTracking_v16, process.HLT_AK4CaloJet30_v11, process.HLT_AK4CaloJet40_v10, process.HLT_AK4CaloJet50_v10, process.HLT_AK4CaloJet80_v10, process.HLT_AK4CaloJet100_v10, process.HLT_AK4CaloJet120_v9, process.HLT_AK4PFJet30_v19, process.HLT_AK4PFJet50_v19, process.HLT_AK4PFJet80_v19, process.HLT_AK4PFJet100_v19, process.HLT_AK4PFJet120_v18, process.HLT_PixelTracks_Multiplicity60ForPPRef_v5, process.HLT_PixelTracks_Multiplicity85ForPPRef_v5, process.HLT_PixelTracks_Multiplicity110ForPPRef_v5, process.HLT_PixelTracks_Multiplicity135ForPPRef_v5, process.HLT_PixelTracks_Multiplicity160ForPPRef_v5, process.HLT_AK4CaloJet40_Eta5p1ForPPRef_v9, process.HLT_AK4CaloJet60_Eta5p1ForPPRef_v9, process.HLT_AK4CaloJet80_Eta5p1ForPPRef_v9, process.HLT_AK4CaloJet100_Eta5p1ForPPRef_v9, process.HLT_AK4CaloJet110_Eta5p1ForPPRef_v9, process.HLT_AK4CaloJet120_Eta5p1ForPPRef_v9, process.HLT_AK4CaloJet150ForPPRef_v9, process.HLT_AK4PFJet40_Eta5p1ForPPRef_v16, process.HLT_AK4PFJet60_Eta5p1ForPPRef_v16, process.HLT_AK4PFJet80_Eta5p1ForPPRef_v16, process.HLT_AK4PFJet100_Eta5p1ForPPRef_v16, process.HLT_AK4PFJet110_Eta5p1ForPPRef_v16, process.HLT_AK4PFJet120_Eta5p1ForPPRef_v16, process.HLT_AK4CaloJet80_Jet35_Eta1p1ForPPRef_v9, process.HLT_AK4CaloJet80_Jet35_Eta0p7ForPPRef_v9, process.HLT_AK4CaloJet100_Jet35_Eta1p1ForPPRef_v9, process.HLT_AK4CaloJet100_Jet35_Eta0p7ForPPRef_v9, process.HLT_AK4CaloJet80_45_45_Eta2p1ForPPRef_v9, process.HLT_SinglePhoton10_Eta3p1ForPPRef_v8, process.HLT_SinglePhoton15_Eta3p1ForPPRef_v9, process.HLT_SinglePhoton20_Eta3p1ForPPRef_v9, process.HLT_SinglePhoton30_Eta3p1ForPPRef_v9, process.HLT_SinglePhoton40_Eta3p1ForPPRef_v8, process.HLT_SinglePhoton50_Eta3p1ForPPRef_v8, process.HLT_SinglePhoton60_Eta3p1ForPPRef_v8, process.HLT_Photon20_HoverELoose_v10, process.HLT_Photon30_HoverELoose_v10, process.HLT_Photon40_HoverELoose_v10, process.HLT_Photon50_HoverELoose_v10, process.HLT_Photon60_HoverELoose_v10, process.HLT_HIL2Mu3Eta2p5_AK4CaloJet40Eta2p1ForPPRef_v11, process.HLT_HIL2Mu3Eta2p5_AK4CaloJet60Eta2p1ForPPRef_v11, process.HLT_HIL2Mu3Eta2p5_AK4CaloJet80Eta2p1ForPPRef_v11, process.HLT_HIL2Mu3Eta2p5_AK4CaloJet100Eta2p1ForPPRef_v11, process.HLT_HIL1DoubleMu0ForPPRef_v4, process.HLT_HIL1DoubleMu10ForPPRef_v4, process.HLT_HIL2DoubleMu0_NHitQForPPRef_v5, process.HLT_HIL3DoubleMu0_OS_m2p5to4p5ForPPRef_v6, process.HLT_HIL3DoubleMu0_OS_m7to14ForPPRef_v6, process.HLT_HIL2Mu3_NHitQ10ForPPRef_v6, process.HLT_HIL3Mu3_NHitQ15ForPPRef_v6, process.HLT_HIL2Mu5_NHitQ10ForPPRef_v6, process.HLT_HIL3Mu5_NHitQ15ForPPRef_v6, process.HLT_HIL2Mu7_NHitQ10ForPPRef_v6, process.HLT_HIL3Mu7_NHitQ15ForPPRef_v6, process.HLT_HIL2Mu15ForPPRef_v6, process.HLT_HIL3Mu15ForPPRef_v6, process.HLT_HIL2Mu20ForPPRef_v6, process.HLT_HIL3Mu20ForPPRef_v6, process.HLT_FullTrack18ForPPRef_v11, process.HLT_FullTrack24ForPPRef_v11, process.HLT_FullTrack34ForPPRef_v11, process.HLT_FullTrack45ForPPRef_v11, process.HLT_FullTrack53ForPPRef_v11, process.HLT_HIL1CastorMediumJetForPPRef_v4, process.HLT_HIL1UnpairedBunchBptxMinusForPPRef_v2, process.HLT_HIL1UnpairedBunchBptxPlusForPPRef_v2, process.HLT_HIL1NotBptxORForPPRef_v2, process.HLT_HIHT80_Beamspot_ppRef5TeV_v3, process.HLT_HIZeroBias_part0_v6, process.HLT_HIZeroBias_part1_v6, process.HLT_HIZeroBias_part2_v6, process.HLT_HIZeroBias_part3_v6, process.HLT_HIZeroBias_part4_v6, process.HLT_HIZeroBias_part5_v6, process.HLT_HIZeroBias_part6_v6, process.HLT_HIZeroBias_part7_v6, process.HLT_HIZeroBias_part8_v6, process.HLT_HIZeroBias_part9_v6, process.HLT_HIZeroBias_part10_v6, process.HLT_HIZeroBias_part11_v6, process.AlCa_HIEcalPi0EBonly_v1, process.AlCa_HIEcalPi0EEonly_v1, process.AlCa_HIEcalEtaEBonly_v1, process.AlCa_HIEcalEtaEEonly_v1, process.HLT_DmesonPPTrackingGlobal_Dpt8ForPPRef_v11, process.HLT_DmesonPPTrackingGlobal_Dpt15ForPPRef_v11, process.HLT_DmesonPPTrackingGlobal_Dpt20ForPPRef_v11, process.HLT_DmesonPPTrackingGlobal_Dpt30ForPPRef_v11, process.HLT_DmesonPPTrackingGlobal_Dpt40ForPPRef_v11, process.HLT_DmesonPPTrackingGlobal_Dpt50ForPPRef_v11, process.HLT_DmesonPPTrackingGlobal_Dpt60ForPPRef_v11, process.HLT_AK4PFBJetBCSV60_Eta2p1ForPPRef_v16, process.HLT_AK4PFBJetBCSV80_Eta2p1ForPPRef_v16, process.HLT_AK4PFDJet60_Eta2p1ForPPRef_v16, process.HLT_AK4PFDJet80_Eta2p1ForPPRef_v16, process.HLT_AK4PFBJetBSSV60_Eta2p1ForPPRef_v16, process.HLT_AK4PFBJetBSSV80_Eta2p1ForPPRef_v16, process.HLT_EcalCalibration_v4, process.HLT_HcalCalibration_v5, process.AlCa_EcalPhiSym_v9, process.HLT_L1UnpairedBunchBptxMinus_v2, process.HLT_L1UnpairedBunchBptxPlus_v2, process.HLT_L1NotBptxOR_v3, process.HLT_L1BptxXOR_v1, process.HLT_L1TOTEM1_MinBias_v4, process.HLT_L1TOTEM2_ZeroBias_v4, process.HLT_L1MinimumBiasHF_OR_v3, process.HLT_L1MinimumBiasHF_OR_part0_v1, process.HLT_L1MinimumBiasHF_OR_part1_v1, process.HLT_L1MinimumBiasHF_OR_part2_v1, process.HLT_L1MinimumBiasHF_OR_part3_v1, process.HLT_L1MinimumBiasHF_OR_part4_v1, process.HLT_L1MinimumBiasHF_OR_part5_v1, process.HLT_L1MinimumBiasHF_OR_part6_v1, process.HLT_L1MinimumBiasHF_OR_part7_v1, process.HLT_L1MinimumBiasHF_OR_part8_v1, process.HLT_L1MinimumBiasHF_OR_part9_v1, process.HLT_L1MinimumBiasHF0OR_v4, process.HLT_L1MinimumBiasHF1OR_v4, process.HLT_L1MinimumBiasHF2OR_v4, process.HLT_L1MinimumBiasHF2ORNoBptxGating_v5, process.HLT_L1MinimumBiasHF1AND_v4, process.HLT_L1MinimumBiasHF2AND_v4, process.HLT_L1_CDC_SingleMu_3_er1p2_TOP120_DPHI2p618_3p142_v2, process.HLT_CDC_L2cosmic_10_er1p0_v1, process.HLT_CDC_L2cosmic_5p5_er1p0_v1, process.HLT_HcalNZS_v13, process.HLT_HcalPhiSym_v15, process.HLT_HcalIsolatedbunch_v5, process.HLT_IsoTrackHB_v4, process.HLT_IsoTrackHE_v4, process.HLT_ZeroBias_FirstCollisionAfterAbortGap_v5, process.HLT_ZeroBias_IsolatedBunches_v5, process.HLT_ZeroBias_FirstCollisionInTrain_v4, process.HLT_ZeroBias_LastCollisionInTrain_v3, process.HLT_ZeroBias_FirstBXAfterTrain_v3, process.AlCa_RPCMuonNormalisation_v13, process.AlCa_HIRPCMuonNormalisation_v1, process.AlCa_LumiPixelsCounts_Random_v1, process.AlCa_LumiPixelsCounts_ZeroBias_v1, process.MC_ReducedIterativeTracking_v12, process.MC_PFMET_v17, process.MC_AK4PFJets_v17, process.MC_PFBTagDeepCSV_v10, process.MC_PFHT_v16, process.MC_PFMHT_v16, process.MC_CaloMET_v8, process.MC_CaloMET_JetIdCleaned_v9, process.MC_AK4CaloJets_v9, process.MC_AK4CaloJetsFromPV_v8, process.MC_CaloBTagDeepCSV_v8, process.MC_CaloHT_v8, process.MC_CaloMHT_v8, process.MC_AK8PFJets_v17, process.MC_AK8TrimPFJets_v17, process.MC_AK8PFHT_v16, process.MC_AK8CaloHT_v8, process.MC_Diphoton10_10_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass10_v13, process.MC_DoubleEle5_CaloIdL_MW_v15, process.MC_Ele5_WPTight_Gsf_v8, process.MC_Ele15_Ele10_CaloIdL_TrackIdL_IsoVL_DZ_v15, process.MC_IsoMu_v15, process.MC_IsoTkMu15_v12, process.MC_DoubleMu_TrkIsoVVL_DZ_v11, process.MC_DoubleGlbTrkMu_TrkIsoVVL_DZ_v12, process.MC_DoubleMuNoFiltersNoVtx_v7, process.AlCa_EcalPi0EBonly_v13, process.AlCa_EcalPi0EEonly_v13, process.AlCa_EcalEtaEBonly_v13, process.AlCa_EcalEtaEEonly_v13, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET90_v12, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET100_v12, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET110_v8, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET120_v8, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET130_v8, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET140_v3, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, process.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_1pr_v11, process.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_v12, process.HLT_MediumChargedIsoPFTau200HighPtRelaxedIso_Trk50_eta2p1_v12, process.HLT_MediumChargedIsoPFTau220HighPtRelaxedIso_Trk50_eta2p1_v12, process.HLT_Ele16_Ele12_Ele8_CaloIdL_TrackIdL_v9, process.HLT_Rsq0p35_v15, process.HLT_Rsq0p40_v15, process.HLT_RsqMR300_Rsq0p09_MR200_v15, process.HLT_RsqMR320_Rsq0p09_MR200_v15, process.HLT_RsqMR300_Rsq0p09_MR200_4jet_v15, process.HLT_RsqMR320_Rsq0p09_MR200_4jet_v15, process.HLT_L1_DoubleJet30_Mass_Min400_Mu10_v1, process.HLT_IsoMu27_MET90_v3, process.HLT_DoubleMediumChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, process.HLT_DoubleMediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, process.HLT_DoubleTightChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, process.HLT_DoubleTightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, process.HLT_DoubleMediumChargedIsoPFTauHPS30_L1MaxMass_Trk1_eta2p1_Reg_v1, process.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4, process.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, process.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, process.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, process.HLT_VBF_DoubleLooseChargedIsoPFTau20_Trk1_eta2p1_v3, process.HLT_VBF_DoubleLooseChargedIsoPFTauHPS20_Trk1_eta2p1_v1, process.HLT_VBF_DoubleMediumChargedIsoPFTauHPS20_Trk1_eta2p1_v1, process.HLT_VBF_DoubleTightChargedIsoPFTauHPS20_Trk1_eta2p1_v1, process.HLT_Photon50_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_PFMET50_v5, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_v5, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ600DEta3_v5, process.HLT_PFMET100_PFMHT100_IDTight_PFHT60_v9, process.HLT_PFMETNoMu100_PFMHTNoMu100_IDTight_PFHT60_v9, process.HLT_PFMETTypeOne100_PFMHT100_IDTight_PFHT60_v9, process.HLT_Mu18_Mu9_SameSign_v4, process.HLT_Mu18_Mu9_SameSign_DZ_v4, process.HLT_Mu18_Mu9_v4, process.HLT_Mu18_Mu9_DZ_v4, process.HLT_Mu20_Mu10_SameSign_v4, process.HLT_Mu20_Mu10_SameSign_DZ_v4, process.HLT_Mu20_Mu10_v4, process.HLT_Mu20_Mu10_DZ_v4, process.HLT_Mu23_Mu12_SameSign_v4, process.HLT_Mu23_Mu12_SameSign_DZ_v4, process.HLT_Mu23_Mu12_v4, process.HLT_Mu23_Mu12_DZ_v4, process.HLT_DoubleMu2_Jpsi_DoubleTrk1_Phi1p05_v6, process.HLT_DoubleMu2_Jpsi_DoubleTkMu0_Phi_v5, process.HLT_DoubleMu3_DCA_PFMET50_PFMHT60_v10, process.HLT_TripleMu_5_3_3_Mass3p8_DCA_v3, process.HLT_QuadPFJet98_83_71_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_QuadPFJet103_88_75_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_QuadPFJet111_90_80_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_QuadPFJet98_83_71_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet103_88_75_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet105_88_76_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet111_90_80_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet98_83_71_15_v5, process.HLT_QuadPFJet103_88_75_15_v5, process.HLT_QuadPFJet105_88_76_15_v5, process.HLT_QuadPFJet111_90_80_15_v5, process.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p17_v2, process.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p1_v2, process.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_p02_v3, process.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np2_v2, process.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np4_v2, process.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_Mass55_v2, process.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_v2, process.HLT_Mu12_IP6_ToCSCS_v1, process.HLT_Mu12_IP6_part0_v2, process.HLT_Mu12_IP6_part1_v2, process.HLT_Mu12_IP6_part2_v2, process.HLT_Mu12_IP6_part3_v2, process.HLT_Mu12_IP6_part4_v2, process.HLT_Mu9_IP5_ToCSCS_v1, process.HLT_Mu9_IP5_part0_v2, process.HLT_Mu9_IP5_part1_v2, process.HLT_Mu9_IP5_part2_v2, process.HLT_Mu9_IP5_part3_v2, process.HLT_Mu9_IP5_part4_v2, process.HLT_Mu7_IP4_ToCSCS_v1, process.HLT_Mu7_IP4_part0_v2, process.HLT_Mu7_IP4_part1_v2, process.HLT_Mu7_IP4_part2_v2, process.HLT_Mu7_IP4_part3_v2, process.HLT_Mu7_IP4_part4_v2, process.HLT_Mu9_IP4_ToCSCS_v1, process.HLT_Mu9_IP4_part0_v2, process.HLT_Mu9_IP4_part1_v2, process.HLT_Mu9_IP4_part2_v2, process.HLT_Mu9_IP4_part3_v2, process.HLT_Mu9_IP4_part4_v2, process.HLT_Mu8_IP5_ToCSCS_v1, process.HLT_Mu8_IP5_part0_v2, process.HLT_Mu8_IP5_part1_v2, process.HLT_Mu8_IP5_part2_v2, process.HLT_Mu8_IP5_part3_v2, process.HLT_Mu8_IP5_part4_v2, process.HLT_Mu8_IP6_ToCSCS_v1, process.HLT_Mu8_IP6_part0_v2, process.HLT_Mu8_IP6_part1_v2, process.HLT_Mu8_IP6_part2_v2, process.HLT_Mu8_IP6_part3_v2, process.HLT_Mu8_IP6_part4_v2, process.HLT_Mu9_IP6_ToCSCS_v1, process.HLT_Mu9_IP6_part0_v3, process.HLT_Mu9_IP6_part1_v3, process.HLT_Mu9_IP6_part2_v3, process.HLT_Mu9_IP6_part3_v3, process.HLT_Mu9_IP6_part4_v3, process.HLT_Mu8_IP3_ToCSCS_v1, process.HLT_Mu8_IP3_part0_v3, process.HLT_Mu8_IP3_part1_v3, process.HLT_Mu8_IP3_part2_v3, process.HLT_Mu8_IP3_part3_v3, process.HLT_Mu8_IP3_part4_v3, process.HLT_Mu9_IP0_part0_v2, process.HLT_Mu9_IP3_part0_v2, process.HLT_QuadPFJet105_88_76_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_TrkMu6NoFiltersNoVtx_v1, process.HLT_TrkMu16NoFiltersNoVtx_v1, process.HLT_DoubleTrkMu_16_6_NoFiltersNoVtx_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part0_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part1_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part2_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult1_part3_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part0_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part1_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part2_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult2_part3_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part0_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part1_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part2_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_Mult3_part3_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part0_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part1_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part2_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult1_part3_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part0_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part1_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part2_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult2_part3_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part0_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part1_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part2_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_Mult3_part3_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part0_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part1_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part2_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult1_part3_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part0_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part1_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part2_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult2_part3_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part0_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part1_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part2_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_Mult3_part3_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part0_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part1_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part2_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult1_part3_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part0_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part1_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part2_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult2_part3_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part0_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part1_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part2_v1, process.HLT_TOTEM_1_AND_PixelTrackCounting_BPixOnly_Mult3_part3_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part0_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part1_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part2_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult1_part3_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part0_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part1_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part2_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult2_part3_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part0_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part1_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part2_v1, process.HLT_TOTEM_2_AND_PixelTrackCounting_BPixOnly_Mult3_part3_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part0_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part1_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part2_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult1_part3_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part0_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part1_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part2_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult2_part3_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part0_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part1_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part2_v1, process.HLT_TOTEM_4_AND_PixelTrackCounting_BPixOnly_Mult3_part3_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part0_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part1_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part2_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay3_part3_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part0_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part1_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part2_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu5NLay4_part3_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part0_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part1_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part2_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay3_part3_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part0_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part1_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part2_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu6NLay4_part3_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part0_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part1_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part2_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay3_part3_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part0_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part1_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part2_v1, process.HLT_TOTEM_1_AND_PixelClusterCounting_BPixNClu7NLay4_part3_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part0_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part1_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part2_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay3_part3_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part0_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part1_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part2_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu5NLay4_part3_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part0_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part1_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part2_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay3_part3_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part0_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part1_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part2_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu6NLay4_part3_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part0_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part1_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part2_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay3_part3_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part0_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part1_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part2_v1, process.HLT_TOTEM_2_AND_PixelClusterCounting_BPixNClu7NLay4_part3_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part0_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part1_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part2_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay3_part3_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part0_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part1_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part2_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu5NLay4_part3_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part0_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part1_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part2_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay3_part3_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part0_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part1_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part2_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu6NLay4_part3_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part0_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part1_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part2_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay3_part3_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part0_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part1_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part2_v1, process.HLT_TOTEM_4_AND_PixelClusterCounting_BPixNClu7NLay4_part3_v1, process.HLT_L1TOTEM_3_v1, process.HLT_L1RomanPot_part0_v1, process.HLT_L1RomanPot_part1_v1, process.HLT_L1RomanPot_part2_v1, process.HLT_L1RomanPot_part3_v1, process.HLT_L1DoubleMu_v1, process.HLT_L1SingleMu_v1, process.HLT_L1DoubleJet_v1, process.HLT_L1DoubleJetANDTotem_v1, process.HLT_L1DoubleJet_gap_v1, process.HLT_L1HFveto_v1, process.HLT_HIPhysics_v1, process.HLT_HIPhysicsForZS_v1, process.HLT_HIRandom_v1, process.AlCa_EcalPhiSymForHI_v1, process.HLT_HIHcalNZS_v1, process.HLT_HIHcalPhiSym_v1, process.AlCa_RPCMuonNormalisationForHI_v1, process.AlCa_EcalPi0EBonlyForHI_v1, process.AlCa_EcalPi0EEonlyForHI_v1, process.AlCa_EcalEtaEBonlyForHI_v1, process.AlCa_EcalEtaEEonlyForHI_v1, process.HLT_HICentralityVeto_v1, process.HLT_HICentralityVeto_Beamspot_v1, process.HLT_HICentrality30100_FirstCollisionAfterAbortGap_v1, process.HLT_HICentralityTag20100_v1, process.HLT_HICentralityTag30100_v1, process.HLT_HICentralityTag50100_v1, process.HLT_HIZeroBias_v1, process.HLT_HIZeroBias_FirstCollisionAfterAbortGap_v1, process.HLT_HIMinimumBias_part0_v1, process.HLT_HIMinimumBias_part1_v1, process.HLT_HIMinimumBias_part2_v1, process.HLT_HIMinimumBias_part3_v1, process.HLT_HIMinimumBias_part4_v1, process.HLT_HIMinimumBias_part5_v1, process.HLT_HIMinimumBias_part6_v1, process.HLT_HIMinimumBias_part7_v1, process.HLT_HIMinimumBias_part8_v1, process.HLT_HIMinimumBias_part9_v1, process.HLT_HIMinimumBias_part10_v1, process.HLT_HIMinimumBias_part11_v1, process.HLT_HIMinimumBias_part12_v1, process.HLT_HIMinimumBias_part13_v1, process.HLT_HIMinimumBias_part14_v1, process.HLT_HIMinimumBias_part15_v1, process.HLT_HIMinimumBias_part16_v1, process.HLT_HIMinimumBias_part17_v1, process.HLT_HIMinimumBias_part18_v1, process.HLT_HIMinimumBias_part19_v1, process.HLT_HIMinimumBiasRF_part0_v1, process.HLT_HIMinimumBiasRF_part1_v1, process.HLT_HIMinimumBiasRF_part2_v1, process.HLT_HIMinimumBiasRF_part3_v1, process.HLT_HIMinimumBiasRF_part4_v1, process.HLT_HIMinimumBiasRF_part5_v1, process.HLT_HIMinimumBiasRF_part6_v1, process.HLT_HIMinimumBiasRF_part7_v1, process.HLT_HIMinimumBiasRF_part8_v1, process.HLT_HIMinimumBiasRF_part9_v1, process.HLT_HIMinimumBiasRF_part10_v1, process.HLT_HIMinimumBiasRF_part11_v1, process.HLT_HIMinimumBiasRF_part12_v1, process.HLT_HIMinimumBiasRF_part13_v1, process.HLT_HIMinimumBiasRF_part14_v1, process.HLT_HIMinimumBiasRF_part15_v1, process.HLT_HIMinimumBiasRF_part16_v1, process.HLT_HIMinimumBiasRF_part17_v1, process.HLT_HIMinimumBiasRF_part18_v1, process.HLT_HIMinimumBiasRF_part19_v1, process.HLT_HIMinimumBiasRF_part20_v1, process.HLT_HIMinimumBiasRF_part21_v1, process.HLT_HIMinimumBiasRF_part22_v1, process.HLT_HIMinimumBiasRF_part23_v1, process.HLT_HIPuAK4CaloJet40Eta5p1_v1, process.HLT_HIPuAK4CaloJet60Eta5p1_v1, process.HLT_HIPuAK4CaloJet80Eta5p1_v1, process.HLT_HIPuAK4CaloJet100Eta5p1_v1, process.HLT_HIPuAK4CaloJet120Eta5p1_v1, process.HLT_HIPuAK4CaloJet40Eta5p1_Centrality_30_100_v1, process.HLT_HIPuAK4CaloJet40Eta5p1_Centrality_50_100_v1, process.HLT_HIPuAK4CaloJet60Eta5p1_Centrality_30_100_v1, process.HLT_HIPuAK4CaloJet60Eta5p1_Centrality_50_100_v1, process.HLT_HIPuAK4CaloJet80Eta5p1_Centrality_30_100_v1, process.HLT_HIPuAK4CaloJet80Eta5p1_Centrality_50_100_v1, process.HLT_HIPuAK4CaloJet100Eta5p1_Centrality_30_100_v1, process.HLT_HIPuAK4CaloJet100Eta5p1_Centrality_50_100_v1, process.HLT_HIPuAK4CaloJet80_35_Eta1p1_v1, process.HLT_HIPuAK4CaloJet100_35_Eta1p1_v1, process.HLT_HIPuAK4CaloJet80_35_Eta0p7_v1, process.HLT_HIPuAK4CaloJet100_35_Eta0p7_v1, process.HLT_HIPuAK4CaloJet80_45_45_Eta2p1_v1, process.HLT_HIPuAK4CaloJet40Fwd_v1, process.HLT_HIPuAK4CaloJet60Fwd_v1, process.HLT_HIPuAK4CaloJet80Fwd_v1, process.HLT_HIPuAK4CaloJet100Fwd_v1, process.HLT_HIPuAK4CaloJet120Fwd_v1, process.HLT_HIIslandPhoton10_Eta2p4_v1, process.HLT_HIIslandPhoton10_Eta1p5_v1, process.HLT_HIIslandPhoton20_Eta2p4_v1, process.HLT_HIIslandPhoton20_Eta1p5_v1, process.HLT_HIIslandPhoton30_Eta2p4_v1, process.HLT_HIIslandPhoton30_Eta1p5_v1, process.HLT_HIIslandPhoton40_Eta2p4_v1, process.HLT_HIIslandPhoton40_Eta1p5_v1, process.HLT_HIIslandPhoton50_Eta2p4_v1, process.HLT_HIIslandPhoton50_Eta1p5_v1, process.HLT_HIIslandPhoton60_Eta2p4_v1, process.HLT_HIIslandPhoton60_Eta1p5_v1, process.HLT_HIGEDPhoton10_v1, process.HLT_HIGEDPhoton20_v1, process.HLT_HIGEDPhoton30_v1, process.HLT_HIGEDPhoton40_v1, process.HLT_HIGEDPhoton50_v1, process.HLT_HIGEDPhoton60_v1, process.HLT_HIGEDPhoton10_EB_v1, process.HLT_HIGEDPhoton20_EB_v1, process.HLT_HIGEDPhoton30_EB_v1, process.HLT_HIGEDPhoton40_EB_v1, process.HLT_HIGEDPhoton50_EB_v1, process.HLT_HIGEDPhoton60_EB_v1, process.HLT_HIGEDPhoton10_HECut_v1, process.HLT_HIGEDPhoton20_HECut_v1, process.HLT_HIGEDPhoton30_HECut_v1, process.HLT_HIGEDPhoton40_HECut_v1, process.HLT_HIGEDPhoton50_HECut_v1, process.HLT_HIGEDPhoton60_HECut_v1, process.HLT_HIGEDPhoton10_EB_HECut_v1, process.HLT_HIGEDPhoton20_EB_HECut_v1, process.HLT_HIGEDPhoton30_EB_HECut_v1, process.HLT_HIGEDPhoton40_EB_HECut_v1, process.HLT_HIGEDPhoton50_EB_HECut_v1, process.HLT_HIGEDPhoton60_EB_HECut_v1, process.HLT_HIEle10Gsf_v1, process.HLT_HIEle15Gsf_v1, process.HLT_HIEle20Gsf_v1, process.HLT_HIEle30Gsf_v1, process.HLT_HIEle40Gsf_v1, process.HLT_HIEle50Gsf_v1, process.HLT_HIEle15Ele10Gsf_v1, process.HLT_HIEle15Ele10GsfMass50_v1, process.HLT_HIDoubleEle10Gsf_v1, process.HLT_HIDoubleEle10GsfMass50_v1, process.HLT_HIDoubleEle15Gsf_v1, process.HLT_HIDoubleEle15GsfMass50_v1, process.HLT_HIL1Mu3Eta2p5_Ele10Gsf_v1, process.HLT_HIL1Mu3Eta2p5_Ele15Gsf_v1, process.HLT_HIL1Mu3Eta2p5_Ele20Gsf_v1, process.HLT_HIL1Mu5Eta2p5_Ele10Gsf_v1, process.HLT_HIL1Mu5Eta2p5_Ele15Gsf_v1, process.HLT_HIL1Mu5Eta2p5_Ele20Gsf_v1, process.HLT_HIL1Mu7Eta2p5_Ele10Gsf_v1, process.HLT_HIL1Mu7Eta2p5_Ele15Gsf_v1, process.HLT_HIL1Mu7Eta2p5_Ele20Gsf_v1, process.HLT_HIEle10Gsf_PuAK4CaloJet40Eta2p1_v1, process.HLT_HIEle10Gsf_PuAK4CaloJet60Eta2p1_v1, process.HLT_HIEle10Gsf_PuAK4CaloJet80Eta2p1_v1, process.HLT_HIEle10Gsf_PuAK4CaloJet100Eta2p1_v1, process.HLT_HIEle15Gsf_PuAK4CaloJet40Eta2p1_v1, process.HLT_HIEle15Gsf_PuAK4CaloJet60Eta2p1_v1, process.HLT_HIEle15Gsf_PuAK4CaloJet80Eta2p1_v1, process.HLT_HIEle15Gsf_PuAK4CaloJet100Eta2p1_v1, process.HLT_HIEle20Gsf_PuAK4CaloJet40Eta2p1_v1, process.HLT_HIEle20Gsf_PuAK4CaloJet60Eta2p1_v1, process.HLT_HIEle20Gsf_PuAK4CaloJet80Eta2p1_v1, process.HLT_HIEle20Gsf_PuAK4CaloJet100Eta2p1_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt15_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt20_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt30_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt40_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt50_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt60_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt15_NoIter10_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt20_NoIter10_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt30_NoIter10_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt40_NoIter10_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt50_NoIter10_v1, process.HLT_HIDmesonPPTrackingGlobal_Dpt60_NoIter10_v1, process.HLT_HIDsPPTrackingGlobal_Dpt20_v1, process.HLT_HIDsPPTrackingGlobal_Dpt30_v1, process.HLT_HIDsPPTrackingGlobal_Dpt40_v1, process.HLT_HIDsPPTrackingGlobal_Dpt50_v1, process.HLT_HIDsPPTrackingGlobal_Dpt60_v1, process.HLT_HIDsPPTrackingGlobal_Dpt20_NoIter10_v1, process.HLT_HIDsPPTrackingGlobal_Dpt30_NoIter10_v1, process.HLT_HIDsPPTrackingGlobal_Dpt40_NoIter10_v1, process.HLT_HIDsPPTrackingGlobal_Dpt50_NoIter10_v1, process.HLT_HIDsPPTrackingGlobal_Dpt60_NoIter10_v1, process.HLT_HILcPPTrackingGlobal_Dpt20_v1, process.HLT_HILcPPTrackingGlobal_Dpt30_v1, process.HLT_HILcPPTrackingGlobal_Dpt40_v1, process.HLT_HILcPPTrackingGlobal_Dpt50_v1, process.HLT_HILcPPTrackingGlobal_Dpt60_v1, process.HLT_HILcPPTrackingGlobal_Dpt20_NoIter10_v1, process.HLT_HILcPPTrackingGlobal_Dpt30_NoIter10_v1, process.HLT_HILcPPTrackingGlobal_Dpt40_NoIter10_v1, process.HLT_HILcPPTrackingGlobal_Dpt50_NoIter10_v1, process.HLT_HILcPPTrackingGlobal_Dpt60_NoIter10_v1, process.HLT_HIFullTracks2018_HighPt18_v1, process.HLT_HIFullTracks2018_HighPt24_v1, process.HLT_HIFullTracks2018_HighPt34_v1, process.HLT_HIFullTracks2018_HighPt45_v1, process.HLT_HIFullTracks2018_HighPt56_v1, process.HLT_HIFullTracks2018_HighPt60_v1, process.HLT_HIFullTracks2018_HighPt18_NoIter10_v1, process.HLT_HIFullTracks2018_HighPt24_NoIter10_v1, process.HLT_HIFullTracks2018_HighPt34_NoIter10_v1, process.HLT_HIFullTracks2018_HighPt45_NoIter10_v1, process.HLT_HIFullTracks2018_HighPt56_NoIter10_v1, process.HLT_HIFullTracks2018_HighPt60_NoIter10_v1, process.HLT_HIL1DoubleMuOpen_v1, process.HLT_HIL1DoubleMuOpen_Centrality_30_100_v1, process.HLT_HIL1DoubleMuOpen_Centrality_40_100_v1, process.HLT_HIL1DoubleMuOpen_Centrality_50_100_v1, process.HLT_HIL1DoubleMuOpen_er1p6_v1, process.HLT_HIL1DoubleMuOpen_OS_er1p6_v1, process.HLT_HIL1DoubleMuOpen_OS_Centrality_30_100_v1, process.HLT_HIL1DoubleMuOpen_OS_Centrality_40_100_v1, process.HLT_HIL1DoubleMu0_v1, process.HLT_HIL1DoubleMu10_v1, process.HLT_HIL2_L1DoubleMu10_v1, process.HLT_HIL3_L1DoubleMu10_v1, process.HLT_HIL2DoubleMuOpen_v1, process.HLT_HIL3DoubleMuOpen_v1, process.HLT_HIL3DoubleMuOpen_M60120_v1, process.HLT_HIL3DoubleMuOpen_JpsiPsi_v1, process.HLT_HIL3DoubleMuOpen_Upsi_v1, process.HLT_HIL3Mu0_L2Mu0_v1, process.HLT_HIL3Mu2p5NHitQ10_L2Mu2_v1, process.HLT_HIL1MuOpen_Centrality_70_100_v1, process.HLT_HIL1MuOpen_Centrality_80_100_v1, process.HLT_HIL2Mu3_NHitQ15_v1, process.HLT_HIL2Mu5_NHitQ15_v1, process.HLT_HIL2Mu7_NHitQ15_v1, process.HLT_HIL2Mu3_NHitQ15_tagging_v1, process.HLT_HIL2Mu5_NHitQ15_tagging_v1, process.HLT_HIL2Mu7_NHitQ15_tagging_v1, process.HLT_HIL3Mu2p5_L1DoubleMu0_v1, process.HLT_HIL3Mu3_L1DoubleMuOpen_OS_v1, process.HLT_HIL3Mu3NHitQ10_L1DoubleMuOpen_v1, process.HLT_HIL3Mu3_L1TripleMuOpen_v1, process.HLT_HIL3Mu12_v1, process.HLT_HIL3Mu15_v1, process.HLT_HIL3Mu20_v1, process.HLT_HIL3Mu3_NHitQ10_v1, process.HLT_HIL3Mu5_NHitQ10_v1, process.HLT_HIL3Mu7_NHitQ10_v1, process.HLT_HIL3Mu3_NHitQ10_tagging_v1, process.HLT_HIL3Mu5_NHitQ10_tagging_v1, process.HLT_HIL3Mu7_NHitQ10_tagging_v1, process.HLT_HIL3Mu0NHitQ10_L2Mu0_MAXdR3p5_M1to5_v1, process.HLT_HIL3Mu2p5NHitQ10_L2Mu2_M7toinf_v1, process.HLT_HIL1_ETT8_ETTAsym50_MinimumBiasHF1_OR_BptxAND_v1, process.HLT_HIL1_ETT10_ETTAsym50_MinimumBiasHF1_OR_BptxAND_v1, process.HLT_HIL1_ETT60_ETTAsym65_MinimumBiasHF2_OR_PixelTracks10_v1, process.HLT_HIL1_ETT65_ETTAsym80_MinimumBiasHF2_OR_PixelTracks10_v1, process.HLT_HIFullTracks_Multiplicity020_HF1AND_v1, process.HLT_HIFullTracks_Multiplicity2040_HF1AND_v1, process.HLT_HIFullTracks_Multiplicity4060_v1, process.HLT_HIFullTracks_Multiplicity6080_v1, process.HLT_HIFullTracks_Multiplicity80100_v1, process.HLT_HIFullTracks_Multiplicity020_v1, process.HLT_HIFullTracks_Multiplicity020_HF1OR_v1, process.HLT_HIFullTracks_Multiplicity020_HF2OR_v1, process.HLT_HIFullTracks_Multiplicity2040_v1, process.HLT_HIFullTracks_Multiplicity2040_HF1OR_v1, process.HLT_HIFullTracks_Multiplicity2040_HF2OR_v1, process.HLT_HIFullTracks_Multiplicity335_HF1OR_v1, process.HLT_HIUPC_Mu8_Mu13_v1, process.HLT_HIUPC_Mu8_Mu13_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMuOpen_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleMuOpen_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMuOpen_NotMBHF2OR_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMuOpen_NotMBHF2AND_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMuOpen_NotMBHF2AND_v1, process.HLT_HIUPC_DoubleMuOpen_NotMBHF2OR_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleMuOpen_NotMBHF2OR_v1, process.HLT_HIUPC_SingleMuOpen_NotMBHF2OR_v1, process.HLT_HIUPC_SingleMu0_NotMBHF2OR_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMu0_NotMBHF2AND_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMu0_NotMBHF2AND_v1, process.HLT_HIUPC_DoubleMu0_NotMBHF2OR_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleMu0_NotMBHF2AND_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleMu0_NotMBHF2AND_v1, process.HLT_HIUPC_DoubleMu0_NotMBHF2OR_v1, process.HLT_HIUPC_SingleMu0_NotMBHF2OR_v1, process.HLT_HIUPC_SingleMu3_NotMBHF2OR_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMu3_NotMBHF2OR_v1, process.HLT_HIUPC_SingleMu0_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleMu0_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_SingleMu3_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG2_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG2_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG2_NotMBHF2AND_SinglePixelTrack_v1, process.HLT_HIUPC_DoubleEG2_NotMBHF2AND_v1, process.HLT_HIUPC_NotMBHF2OR_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_NotMBHF2AND_SinglePixelTrack_v1, process.HLT_HIUPC_NotMBHF2AND_v1, process.HLT_HIUPC_NotMBHF2OR_BptxAND_SinglePixelTrack_v1, process.HLT_HIUPC_ZeroBias_SinglePixelTrack_v1, process.HLT_HIUPC_DoubleEG2_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG2_NotMBHF2OR_SinglePixelTrack_v1, process.HLT_HIUPC_DoubleEG2_NotMBHF2OR_v1, process.HLT_HIUPC_DoubleEG5_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG5_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG5_NotMBHF2AND_SinglePixelTrack_v1, process.HLT_HIUPC_DoubleEG5_NotMBHF2AND_v1, process.HLT_HIUPC_DoubleEG5_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG5_NotMBHF2OR_SinglePixelTrack_v1, process.HLT_HIUPC_DoubleEG5_NotMBHF2OR_v1, process.HLT_HIUPC_SingleEG5_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_SingleEG5_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_SingleEG5_NotMBHF2AND_SinglePixelTrack_v1, process.HLT_HIUPC_SingleEG5_NotMBHF2AND_v1, process.HLT_HIUPC_SingleEG5_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_SingleEG3_NotMBHF2OR_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_SingleEG3_NotMBHF2AND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_SingleEG3_NotMBHF2AND_SinglePixelTrack_v1, process.HLT_HIUPC_SingleEG3_NotMBHF2AND_v1, process.HLT_HIUPC_SingleEG3_BptxAND_SinglePixelTrack_MaxPixelTrack_v1, process.HLT_HIUPC_SingleEG3_NotMBHF2OR_SinglePixelTrack_v1, process.HLT_HIUPC_SingleEG3_NotMBHF2OR_v1, process.HLT_HIUPC_SingleEG5_NotMBHF2OR_SinglePixelTrack_v1, process.HLT_HIUPC_SingleEG5_NotMBHF2OR_v1, process.HLT_HIUPC_ETT5_Asym50_NotMBHF2OR_v1, process.HLT_HIUPC_ETT5_Asym50_NotMBHF2OR_SinglePixelTrack_v1, process.HLT_HIUPC_ZeroBias_MaxPixelCluster_v1, process.HLT_HIUPC_SingleEG3_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_SingleEG5_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG2_BptxAND_MaxPixelTrack_v1, process.HLT_HIUPC_DoubleEG5_BptxAND_MaxPixelTrack_v1, process.HLT_HICsAK4PFJet60Eta1p5_v1, process.HLT_HICsAK4PFJet80Eta1p5_v1, process.HLT_HICsAK4PFJet100Eta1p5_v1, process.HLT_HICsAK4PFJet100Eta1p5_Beamspot_v1, process.HLT_HICsAK4PFJet120Eta1p5_v1, process.HLT_HICsAK4PFJet60Eta1p5_Centrality_30_100_v1, process.HLT_HICsAK4PFJet60Eta1p5_Centrality_50_100_v1, process.HLT_HICsAK4PFJet80Eta1p5_Centrality_30_100_v1, process.HLT_HICsAK4PFJet80Eta1p5_Centrality_50_100_v1, process.HLT_HICsAK4PFJet100Eta1p5_Centrality_30_100_v1, process.HLT_HICsAK4PFJet100Eta1p5_Centrality_50_100_v1, process.HLT_HIL3Mu3_EG10HECut_v1, process.HLT_HIL3Mu3_EG15HECut_v1, process.HLT_HIL3Mu3_EG20HECut_v1, process.HLT_HIL3Mu3_EG30HECut_v1, process.HLT_HIL3Mu5_EG10HECut_v1, process.HLT_HIL3Mu5_EG15HECut_v1, process.HLT_HIL3Mu5_EG20HECut_v1, process.HLT_HIL3Mu5_EG30HECut_v1, process.HLT_HIL3Mu7_EG10HECut_v1, process.HLT_HIL3Mu7_EG15HECut_v1, process.HLT_HIL3Mu7_EG20HECut_v1, process.HLT_HIL3Mu7_EG30HECut_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet40Eta2p1_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet60Eta2p1_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet80Eta2p1_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet100Eta2p1_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet40Eta2p1_FilterDr_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet60Eta2p1_FilterDr_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet80Eta2p1_FilterDr_v1, process.HLT_HIL3Mu3Eta2p5_PuAK4CaloJet100Eta2p1_FilterDr_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet40Eta2p1_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet60Eta2p1_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet80Eta2p1_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet100Eta2p1_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet40Eta2p1_FilterDr_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet60Eta2p1_FilterDr_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet80Eta2p1_FilterDr_v1, process.HLT_HIL3Mu5Eta2p5_PuAK4CaloJet100Eta2p1_FilterDr_v1, process.HLT_HICastor_MediumJet_NotMBHF2AND_v1, process.HLT_HICastor_MediumJet_NotMBHF2OR_v1, process.HLT_HICastor_MediumJet_MBHF1OR_BptxAND_v1, process.HLT_HICastor_MediumJet_SingleMu0_MBHF1OR_BptxAND_v1, process.HLT_HICastor_MediumJet_SingleEG5_MBHF1OR_BptxAND_v1, process.HLT_HICastor_MediumJet_BptxAND_v1, process.HLT_HICastor_MediumJet_v1, process.HLT_HICastor_HighJet_v1, process.HLT_HICastor_HighJet_BptxAND_v1, process.HLT_HICastor_HighJet_MBHF1OR_BptxAND_v1, process.HLT_HICastor_HighJet_NotMBHF2OR_v1, process.HLT_HICastor_HighJet_NotMBHF2AND_v1, process.HLT_HICastor_HighJet_MBHF1AND_BptxAND_v1, process.HLT_HICastor_HighJet_MBHF2AND_BptxAND_v1, process.HLT_HICastor_Muon_v1, process.HLT_HICastor_Muon_BptxAND_v1, process.HLT_HIIslandPhoton10_Eta2p4_Cent30_100_v1, process.HLT_HIIslandPhoton20_Eta2p4_Cent30_100_v1, process.HLT_HIIslandPhoton30_Eta2p4_Cent30_100_v1, process.HLT_HIIslandPhoton40_Eta2p4_Cent30_100_v1, process.HLT_HIIslandPhoton10_Eta2p4_Cent50_100_v1, process.HLT_HIIslandPhoton20_Eta2p4_Cent50_100_v1, process.HLT_HIIslandPhoton30_Eta2p4_Cent50_100_v1, process.HLT_HIIslandPhoton40_Eta2p4_Cent50_100_v1, process.HLT_HIGEDPhoton10_Cent30_100_v1, process.HLT_HIGEDPhoton20_Cent30_100_v1, process.HLT_HIGEDPhoton30_Cent30_100_v1, process.HLT_HIGEDPhoton40_Cent30_100_v1, process.HLT_HIGEDPhoton10_Cent50_100_v1, process.HLT_HIGEDPhoton20_Cent50_100_v1, process.HLT_HIGEDPhoton30_Cent50_100_v1, process.HLT_HIGEDPhoton40_Cent50_100_v1, process.HLT_HIPuAK4CaloJet60Eta2p4_DeepCSV0p4_v1, process.HLT_HIPuAK4CaloJet80Eta2p4_DeepCSV0p4_v1, process.HLT_HIPuAK4CaloJet100Eta2p4_DeepCSV0p4_v1, process.HLT_HIPuAK4CaloJet60Eta2p4_CSVv2WP0p75_v1, process.HLT_HIPuAK4CaloJet80Eta2p4_CSVv2WP0p75_v1, process.HLT_HIPuAK4CaloJet100Eta2p4_CSVv2WP0p75_v1, process.HLT_HIL1NotBptxOR_v1, process.HLT_HIL1UnpairedBunchBptxMinus_v1, process.HLT_HIL1UnpairedBunchBptxPlus_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part0_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part1_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part2_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part3_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part4_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part5_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part6_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part7_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part8_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part9_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part10_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part11_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part12_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part13_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part14_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part15_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part16_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part17_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part18_v1, process.HLT_HIMinimumBias_SinglePixelTrack_part19_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part0_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part1_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part2_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part3_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part4_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part5_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part6_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part7_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part8_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part9_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part10_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part11_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part12_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part13_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part14_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part15_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part16_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part17_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part18_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part19_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part20_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part21_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part22_v1, process.HLT_HIMinimumBiasRF_SinglePixelTrack_part23_v1, process.HLT_HIL1_ZDC_AND_OR_MinimumBiasHF1_AND_BptxAND_v1, process.HLT_HIL1_ZDC_AND_OR_MinimumBiasHF2_AND_BptxAND_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part0_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part1_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part2_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part3_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part4_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part5_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part6_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part7_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part8_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part9_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part10_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part11_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part12_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part13_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part14_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part15_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part16_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part17_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part18_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixBypass_part19_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part0_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part1_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part2_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part3_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part4_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part5_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part6_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part7_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part8_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part9_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part10_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part11_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part12_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part13_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part14_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part15_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part16_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part17_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part18_v1, process.HLT_HIMinimumBias_SinglePixelTrack_NpixGated_part19_v1, process.HLTriggerFinalPath, process.HLTAnalyzerEndpath, process.RatesMonitoring, process.DQMHistograms, process.ParkingHLTPhysicsOutput, process.ParkingZeroBiasOutput, process.PhysicsCommissioningOutput, process.PhysicsEGammaOutput, process.PhysicsEndOfFillOutput, process.PhysicsHadronsTausOutput, process.PhysicsMuonsOutput, process.PhysicsTracksOutput, process.PhysicsForwardOutput, process.ParkingBPH1Output, process.ParkingBPH2Output, process.ParkingBPH3Output, process.ParkingBPH4Output, process.ParkingBPH5Output, process.DQMOutput, process.DQMOnlineBeamspotOutput, process.DQMCalibrationOutput, process.DQMEventDisplayOutput, process.HLTMonitorOutput, process.RPCMONOutput, process.CalibrationOutput, process.EcalCalibrationOutput, process.ALCAPHISYMOutput, process.ALCALumiPixelCountsExpressOutput, process.ALCALumiPixelCountsPromptOutput, process.ALCAP0Output, process.ExpressOutput, process.ExpressCosmicsOutput, process.ExpressAlignmentOutput, process.NanoDSTOutput, process.ScoutingPFOutput, process.ScoutingCaloMuonOutput, process.PhysicsScoutingMonitorOutput, process.PhysicsHLTPhysics1Output, process.PhysicsHLTPhysics2Output, process.PhysicsHLTPhysics3Output, process.PhysicsHLTPhysics4Output, process.PhysicsZeroBias1Output, process.PhysicsZeroBias2Output, process.PhysicsZeroBias3Output, process.PhysicsZeroBias4Output, process.PhysicsHIZeroBias1Output, process.PhysicsHIZeroBias2Output, process.PhysicsHIZeroBias3Output, process.PhysicsHIZeroBias4Output, process.PhysicsHIZeroBias5Output, process.PhysicsHIZeroBias6Output, process.PhysicsTOTEM1part0Output, process.PhysicsTOTEM1part1Output, process.PhysicsTOTEM1part2Output, process.PhysicsTOTEM1part3Output, process.PhysicsTOTEM2part0Output, process.PhysicsTOTEM2part1Output, process.PhysicsTOTEM2part2Output, process.PhysicsTOTEM2part3Output, process.PhysicsTOTEM3Output, process.PhysicsTOTEM4part0Output, process.PhysicsTOTEM4part1Output, process.PhysicsTOTEM4part2Output, process.PhysicsTOTEM4part3Output, process.PhysicsRandomTOTEM1Output, process.PhysicsRandomTOTEM2Output, process.PhysicsRandomTOTEM3Output, process.PhysicsRandomTOTEM4Output, process.PhysicsZeroBiasTOTEM1Output, process.PhysicsZeroBiasTOTEM2Output, process.PhysicsZeroBiasTOTEM3Output, process.PhysicsZeroBiasTOTEM4Output, process.PhysicsMinimumBias0Output, process.PhysicsMinimumBias1Output, process.PhysicsMinimumBias2Output, process.PhysicsMinimumBias3Output, process.PhysicsMinimumBias4Output, process.PhysicsMinimumBias5Output, process.PhysicsMinimumBias6Output, process.PhysicsMinimumBias7Output, process.PhysicsMinimumBias8Output, process.PhysicsMinimumBias9Output, process.PhysicsEGammaCommissioningOutput, process.PhysicsHICommissioningOutput, process.PhysicsHIDoubleMuonOutput, process.PhysicsHISingleMuonOutput, process.PhysicsHIHardProbesOutput, process.PhysicsHIMinimumBiasReducedFormat0Output, process.PhysicsHIMinimumBiasReducedFormat1Output, process.PhysicsHIMinimumBiasReducedFormat2Output, process.PhysicsHIMinimumBiasReducedFormat3Output, process.PhysicsHIMinimumBiasReducedFormat4Output, process.PhysicsHIMinimumBiasReducedFormat5Output, process.PhysicsHIMinimumBiasReducedFormat6Output, process.PhysicsHIMinimumBiasReducedFormat7Output, process.PhysicsHIMinimumBiasReducedFormat8Output, process.PhysicsHIMinimumBiasReducedFormat9Output, process.PhysicsHIMinimumBiasReducedFormat10Output, process.PhysicsHIMinimumBiasReducedFormat11Output, process.PhysicsHITrackerNZSOutput, process.PhysicsHIForwardOutput, process.HIHLTMonitorOutput, process.HIDQMOutput, process.HIDQMEventDisplayOutput, process.HIDQMOnlineBeamspotOutput, process.HIExpressOutput, process.HIExpressAlignmentOutput, process.PhysicsHIHardProbesLowerOutput, process.PhysicsHIHardProbesPeripheralOutput, process.PhysicsHIHeavyFlavorOutput, process.PhysicsHIHighMultiplicityOutput, process.PhysicsHILowMultiplicityOutput, process.PhysicsHILowMultiplicityReducedFormatOutput, process.PhysicsHIMinimumBias0Output, process.PhysicsHIMinimumBias1Output, process.PhysicsHIMinimumBias2Output, process.PhysicsHIMinimumBias3Output, process.PhysicsHIMinimumBias4Output, process.PhysicsHIMinimumBias5Output, process.PhysicsHIMinimumBias6Output, process.PhysicsHIMinimumBias7Output, process.PhysicsHIMinimumBias8Output, process.PhysicsHIMinimumBias9Output, process.PhysicsHIMinimumBias10Output, process.PhysicsHIMinimumBias11Output, process.PhysicsHIMinimumBias12Output, process.PhysicsHIMinimumBias13Output, process.PhysicsHIMinimumBias14Output, process.PhysicsHIMinimumBias15Output, process.PhysicsHIMinimumBias16Output, process.PhysicsHIMinimumBias17Output, process.PhysicsHIMinimumBias18Output, process.PhysicsHIMinimumBias19Output )) process.source = cms.Source( "PoolSource", @@ -131221,7 +134630,6 @@ wantSummary = cms.untracked.bool( True ), numberOfThreads = cms.untracked.uint32( 4 ), numberOfStreams = cms.untracked.uint32( 0 ), - sizeOfStackForThreadsInKB = cms.untracked.uint32( 10*1024 ) ) # override the GlobalTag, connection string and pfnPrefix @@ -131230,11 +134638,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run3_hlt_FULL') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('TriggerSummaryProducerAOD') - process.MessageLogger.categories.append('L1GtTrigReport') - process.MessageLogger.categories.append('L1TGlobalSummary') - process.MessageLogger.categories.append('HLTrigReport') - process.MessageLogger.categories.append('FastReport') + process.MessageLogger.TriggerSummaryProducerAOD = cms.untracked.PSet() + process.MessageLogger.L1GtTrigReport = cms.untracked.PSet() + process.MessageLogger.L1TGlobalSummary = cms.untracked.PSet() + process.MessageLogger.HLTrigReport = cms.untracked.PSet() + process.MessageLogger.FastReport = cms.untracked.PSet() + process.MessageLogger.ThroughputService = cms.untracked.PSet() # add specific customizations _customInfo = {} diff --git a/HLTrigger/Configuration/test/OnLine_HLT_Fake.py b/HLTrigger/Configuration/test/OnLine_HLT_Fake.py index d6522b705e355..d8d9c3bfc2bc2 100644 --- a/HLTrigger/Configuration/test/OnLine_HLT_Fake.py +++ b/HLTrigger/Configuration/test/OnLine_HLT_Fake.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --full --data /dev/CMSSW_11_2_0/Fake --type Fake --unprescale --process HLTFake --globaltag auto:run1_hlt_Fake --input file:RelVal_Raw_Fake_DATA.root +# hltGetConfiguration --full --data /dev/CMSSW_11_3_0/Fake --type Fake --unprescale --process HLTFake --globaltag auto:run1_hlt_Fake --input file:RelVal_Raw_Fake_DATA.root -# /dev/CMSSW_11_2_0/Fake/V7 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/Fake/V7 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTFake" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/Fake/V7') + tableName = cms.string('/dev/CMSSW_11_3_0/Fake/V7') ) process.streams = cms.PSet( A = cms.vstring( 'InitialPD' ) ) @@ -83,15 +83,8 @@ ) process.MessageLogger = cms.Service( "MessageLogger", suppressInfo = cms.untracked.vstring( ), - statistics = cms.untracked.vstring( 'cerr' ), - suppressFwkInfo = cms.untracked.vstring( ), - cout = cms.untracked.PSet( placeholder = cms.untracked.bool( True ) ), - cerr_stats = cms.untracked.PSet( - threshold = cms.untracked.string( "WARNING" ), - output = cms.untracked.string( "cerr" ), - optionalPSet = cms.untracked.bool( True ) - ), suppressDebug = cms.untracked.vstring( ), + suppressFwkInfo = cms.untracked.vstring( ), cerr = cms.untracked.PSet( INFO = cms.untracked.PSet( limit = cms.untracked.int32( 0 ) ), noTimeStamps = cms.untracked.bool( False ), @@ -107,10 +100,6 @@ limit = cms.untracked.int32( 10000000 ) ), threshold = cms.untracked.string( "INFO" ), - suppressInfo = cms.untracked.vstring( ), - suppressWarning = cms.untracked.vstring( ), - suppressDebug = cms.untracked.vstring( ), - suppressError = cms.untracked.vstring( ) ), suppressWarning = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltCtf3HitL1SeededWithMaterialTracks', @@ -133,17 +122,6 @@ 'hltBLifetimeRegionalCtfWithMaterialTracksbbPhiL1FastJetFastPV', 'hltCtfActivityWithMaterialTracks' ), debugModules = cms.untracked.vstring( ), - categories = cms.untracked.vstring( 'FwkJob', - 'FwkReport', - 'FwkSummary', - 'Root_NoDictionary' ), - destinations = cms.untracked.vstring( 'warnings', - 'errors', - 'infos', - 'debugs', - 'cout', - 'cerr' ), - threshold = cms.untracked.string( "INFO" ), suppressError = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltL3MuonCandidates', 'hltL3TkTracksFromL2OIState', @@ -365,7 +343,6 @@ wantSummary = cms.untracked.bool( True ), numberOfThreads = cms.untracked.uint32( 4 ), numberOfStreams = cms.untracked.uint32( 0 ), - sizeOfStackForThreadsInKB = cms.untracked.uint32( 10*1024 ) ) # override the GlobalTag, connection string and pfnPrefix @@ -374,11 +351,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run1_hlt_Fake') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('TriggerSummaryProducerAOD') - process.MessageLogger.categories.append('L1GtTrigReport') - process.MessageLogger.categories.append('L1TGlobalSummary') - process.MessageLogger.categories.append('HLTrigReport') - process.MessageLogger.categories.append('FastReport') + process.MessageLogger.TriggerSummaryProducerAOD = cms.untracked.PSet() + process.MessageLogger.L1GtTrigReport = cms.untracked.PSet() + process.MessageLogger.L1TGlobalSummary = cms.untracked.PSet() + process.MessageLogger.HLTrigReport = cms.untracked.PSet() + process.MessageLogger.FastReport = cms.untracked.PSet() + process.MessageLogger.ThroughputService = cms.untracked.PSet() # add specific customizations _customInfo = {} diff --git a/HLTrigger/Configuration/test/OnLine_HLT_Fake1.py b/HLTrigger/Configuration/test/OnLine_HLT_Fake1.py index d859b9bee82d4..fbd3600df3c04 100644 --- a/HLTrigger/Configuration/test/OnLine_HLT_Fake1.py +++ b/HLTrigger/Configuration/test/OnLine_HLT_Fake1.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --full --data /dev/CMSSW_11_2_0/Fake1 --type Fake1 --unprescale --process HLTFake1 --globaltag auto:run2_hlt_Fake1 --input file:RelVal_Raw_Fake1_DATA.root +# hltGetConfiguration --full --data /dev/CMSSW_11_3_0/Fake1 --type Fake1 --unprescale --process HLTFake1 --globaltag auto:run2_hlt_Fake1 --input file:RelVal_Raw_Fake1_DATA.root -# /dev/CMSSW_11_2_0/Fake1/V7 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/Fake1/V7 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTFake1" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/Fake1/V7') + tableName = cms.string('/dev/CMSSW_11_3_0/Fake1/V7') ) process.streams = cms.PSet( A = cms.vstring( 'InitialPD' ) ) @@ -83,15 +83,8 @@ ) process.MessageLogger = cms.Service( "MessageLogger", suppressInfo = cms.untracked.vstring( ), - statistics = cms.untracked.vstring( 'cerr' ), - suppressFwkInfo = cms.untracked.vstring( ), - cout = cms.untracked.PSet( placeholder = cms.untracked.bool( True ) ), - cerr_stats = cms.untracked.PSet( - threshold = cms.untracked.string( "WARNING" ), - output = cms.untracked.string( "cerr" ), - optionalPSet = cms.untracked.bool( True ) - ), suppressDebug = cms.untracked.vstring( ), + suppressFwkInfo = cms.untracked.vstring( ), cerr = cms.untracked.PSet( INFO = cms.untracked.PSet( limit = cms.untracked.int32( 0 ) ), noTimeStamps = cms.untracked.bool( False ), @@ -107,10 +100,6 @@ limit = cms.untracked.int32( 10000000 ) ), threshold = cms.untracked.string( "INFO" ), - suppressInfo = cms.untracked.vstring( ), - suppressWarning = cms.untracked.vstring( ), - suppressDebug = cms.untracked.vstring( ), - suppressError = cms.untracked.vstring( ) ), suppressWarning = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltCtf3HitL1SeededWithMaterialTracks', @@ -133,17 +122,6 @@ 'hltBLifetimeRegionalCtfWithMaterialTracksbbPhiL1FastJetFastPV', 'hltCtfActivityWithMaterialTracks' ), debugModules = cms.untracked.vstring( ), - categories = cms.untracked.vstring( 'FwkJob', - 'FwkReport', - 'FwkSummary', - 'Root_NoDictionary' ), - destinations = cms.untracked.vstring( 'warnings', - 'errors', - 'infos', - 'debugs', - 'cout', - 'cerr' ), - threshold = cms.untracked.string( "INFO" ), suppressError = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltL3MuonCandidates', 'hltL3TkTracksFromL2OIState', @@ -382,7 +360,6 @@ wantSummary = cms.untracked.bool( True ), numberOfThreads = cms.untracked.uint32( 4 ), numberOfStreams = cms.untracked.uint32( 0 ), - sizeOfStackForThreadsInKB = cms.untracked.uint32( 10*1024 ) ) # override the GlobalTag, connection string and pfnPrefix @@ -391,11 +368,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run2_hlt_Fake1') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('TriggerSummaryProducerAOD') - process.MessageLogger.categories.append('L1GtTrigReport') - process.MessageLogger.categories.append('L1TGlobalSummary') - process.MessageLogger.categories.append('HLTrigReport') - process.MessageLogger.categories.append('FastReport') + process.MessageLogger.TriggerSummaryProducerAOD = cms.untracked.PSet() + process.MessageLogger.L1GtTrigReport = cms.untracked.PSet() + process.MessageLogger.L1TGlobalSummary = cms.untracked.PSet() + process.MessageLogger.HLTrigReport = cms.untracked.PSet() + process.MessageLogger.FastReport = cms.untracked.PSet() + process.MessageLogger.ThroughputService = cms.untracked.PSet() # add specific customizations _customInfo = {} diff --git a/HLTrigger/Configuration/test/OnLine_HLT_Fake2.py b/HLTrigger/Configuration/test/OnLine_HLT_Fake2.py index 8fc501268857a..fa78fd865453f 100644 --- a/HLTrigger/Configuration/test/OnLine_HLT_Fake2.py +++ b/HLTrigger/Configuration/test/OnLine_HLT_Fake2.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --full --data /dev/CMSSW_11_2_0/Fake2 --type Fake2 --unprescale --process HLTFake2 --globaltag auto:run2_hlt_Fake2 --input file:RelVal_Raw_Fake2_DATA.root +# hltGetConfiguration --full --data /dev/CMSSW_11_3_0/Fake2 --type Fake2 --unprescale --process HLTFake2 --globaltag auto:run2_hlt_Fake2 --input file:RelVal_Raw_Fake2_DATA.root -# /dev/CMSSW_11_2_0/Fake2/V7 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/Fake2/V7 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTFake2" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/Fake2/V7') + tableName = cms.string('/dev/CMSSW_11_3_0/Fake2/V7') ) process.streams = cms.PSet( A = cms.vstring( 'InitialPD' ) ) @@ -117,15 +117,8 @@ ) process.MessageLogger = cms.Service( "MessageLogger", suppressInfo = cms.untracked.vstring( ), - statistics = cms.untracked.vstring( 'cerr' ), - suppressFwkInfo = cms.untracked.vstring( ), - cout = cms.untracked.PSet( placeholder = cms.untracked.bool( True ) ), - cerr_stats = cms.untracked.PSet( - threshold = cms.untracked.string( "WARNING" ), - output = cms.untracked.string( "cerr" ), - optionalPSet = cms.untracked.bool( True ) - ), suppressDebug = cms.untracked.vstring( ), + suppressFwkInfo = cms.untracked.vstring( ), cerr = cms.untracked.PSet( INFO = cms.untracked.PSet( limit = cms.untracked.int32( 0 ) ), noTimeStamps = cms.untracked.bool( False ), @@ -141,10 +134,6 @@ limit = cms.untracked.int32( 10000000 ) ), threshold = cms.untracked.string( "INFO" ), - suppressInfo = cms.untracked.vstring( ), - suppressWarning = cms.untracked.vstring( ), - suppressDebug = cms.untracked.vstring( ), - suppressError = cms.untracked.vstring( ) ), suppressWarning = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltCtf3HitL1SeededWithMaterialTracks', @@ -167,17 +156,6 @@ 'hltBLifetimeRegionalCtfWithMaterialTracksbbPhiL1FastJetFastPV', 'hltCtfActivityWithMaterialTracks' ), debugModules = cms.untracked.vstring( ), - categories = cms.untracked.vstring( 'FwkJob', - 'FwkReport', - 'FwkSummary', - 'Root_NoDictionary' ), - destinations = cms.untracked.vstring( 'warnings', - 'errors', - 'infos', - 'debugs', - 'cout', - 'cerr' ), - threshold = cms.untracked.string( "INFO" ), suppressError = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltL3MuonCandidates', 'hltL3TkTracksFromL2OIState', @@ -390,7 +368,6 @@ wantSummary = cms.untracked.bool( True ), numberOfThreads = cms.untracked.uint32( 4 ), numberOfStreams = cms.untracked.uint32( 0 ), - sizeOfStackForThreadsInKB = cms.untracked.uint32( 10*1024 ) ) # override the GlobalTag, connection string and pfnPrefix @@ -399,11 +376,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run2_hlt_Fake2') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('TriggerSummaryProducerAOD') - process.MessageLogger.categories.append('L1GtTrigReport') - process.MessageLogger.categories.append('L1TGlobalSummary') - process.MessageLogger.categories.append('HLTrigReport') - process.MessageLogger.categories.append('FastReport') + process.MessageLogger.TriggerSummaryProducerAOD = cms.untracked.PSet() + process.MessageLogger.L1GtTrigReport = cms.untracked.PSet() + process.MessageLogger.L1TGlobalSummary = cms.untracked.PSet() + process.MessageLogger.HLTrigReport = cms.untracked.PSet() + process.MessageLogger.FastReport = cms.untracked.PSet() + process.MessageLogger.ThroughputService = cms.untracked.PSet() # add specific customizations _customInfo = {} diff --git a/HLTrigger/Configuration/test/OnLine_HLT_GRun.py b/HLTrigger/Configuration/test/OnLine_HLT_GRun.py index b4f18b1d21fe9..2f7f156b371f4 100644 --- a/HLTrigger/Configuration/test/OnLine_HLT_GRun.py +++ b/HLTrigger/Configuration/test/OnLine_HLT_GRun.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --full --data /dev/CMSSW_11_2_0/GRun --type GRun --unprescale --process HLTGRun --globaltag auto:run3_hlt_GRun --input file:RelVal_Raw_GRun_DATA.root +# hltGetConfiguration --full --data /dev/CMSSW_11_3_0/GRun --type GRun --unprescale --process HLTGRun --globaltag auto:run3_hlt_GRun --input file:RelVal_Raw_GRun_DATA.root -# /dev/CMSSW_11_2_0/GRun/V12 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/GRun/V12 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTGRun" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/GRun/V12') + tableName = cms.string('/dev/CMSSW_11_3_0/GRun/V12') ) process.transferSystem = cms.PSet( @@ -3637,12 +3637,7 @@ PhysicsZeroBias4 = cms.vstring( 'EphemeralZeroBias7', 'EphemeralZeroBias8' ), RPCMON = cms.vstring( 'RPCMonitor' ), - ScoutingCaloMuon = cms.vstring( 'ScoutingCaloCommissioning', - 'ScoutingCaloHT', - 'ScoutingCaloMuon' ), - ScoutingPF = cms.vstring( 'ScoutingPFCommissioning', - 'ScoutingPFHT', - 'ScoutingPFMuon' ) + ScoutingPF = cms.vstring( 'ScoutingPFRun3' ) ) process.datasets = cms.PSet( AlCaLumiPixelCountsExpress = cms.vstring( 'AlCa_LumiPixelsCounts_Random_v1' ), @@ -4863,49 +4858,14 @@ 'HLT_Mu9_IP5_ToCSCS_v1', 'HLT_Mu9_IP6_ToCSCS_v1' ), RPCMonitor = cms.vstring( 'AlCa_RPCMuonNormalisation_v13' ), - ScoutingCaloCommissioning = cms.vstring( 'DST_CaloJet40_CaloBTagScouting_v14', - 'DST_L1HTT_CaloBTagScouting_v14', - 'DST_ZeroBias_CaloScouting_PFScouting_v14' ), - ScoutingCaloHT = cms.vstring( 'DST_HT250_CaloBTagScouting_v10', - 'DST_HT250_CaloScouting_v10' ), - ScoutingCaloMuon = cms.vstring( 'DST_DoubleMu1_noVtx_CaloScouting_v2', - 'DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6', - 'DST_DoubleMu3_noVtx_CaloScouting_v6' ), - ScoutingMonitor = cms.vstring( 'DST_CaloJet40_BTagScouting_v15', - 'DST_CaloJet40_CaloBTagScouting_v14', - 'DST_CaloJet40_CaloScouting_PFScouting_v15', - 'DST_DoubleMu1_noVtx_CaloScouting_v2', - 'DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6', - 'DST_DoubleMu3_noVtx_CaloScouting_v6', - 'DST_DoubleMu3_noVtx_Mass10_PFScouting_v3', - 'DST_HT250_CaloBTagScouting_v10', - 'DST_HT250_CaloScouting_v10', - 'DST_HT410_BTagScouting_v16', - 'DST_HT410_PFScouting_v16', - 'DST_L1DoubleMu_BTagScouting_v16', - 'DST_L1DoubleMu_CaloScouting_PFScouting_v15', - 'DST_L1HTT_BTagScouting_v15', - 'DST_L1HTT_CaloBTagScouting_v14', - 'DST_L1HTT_CaloScouting_PFScouting_v15', - 'DST_ZeroBias_BTagScouting_v15', - 'DST_ZeroBias_CaloScouting_PFScouting_v14', + ScoutingMonitor = cms.vstring( 'DST_Run3_PFScoutingPixelTracking_v16', 'HLT_Ele115_CaloIdVT_GsfTrkIdT_v14', 'HLT_Ele35_WPTight_Gsf_v9', 'HLT_IsoMu27_v16', 'HLT_Mu50_v13', 'HLT_PFHT1050_v18', 'HLT_Photon200_v13' ), - ScoutingPFCommissioning = cms.vstring( 'DST_CaloJet40_BTagScouting_v15', - 'DST_CaloJet40_CaloScouting_PFScouting_v15', - 'DST_L1DoubleMu_BTagScouting_v16', - 'DST_L1DoubleMu_CaloScouting_PFScouting_v15', - 'DST_L1HTT_BTagScouting_v15', - 'DST_L1HTT_CaloScouting_PFScouting_v15', - 'DST_ZeroBias_BTagScouting_v15', - 'DST_ZeroBias_CaloScouting_PFScouting_v14' ), - ScoutingPFHT = cms.vstring( 'DST_HT410_BTagScouting_v16', - 'DST_HT410_PFScouting_v16' ), - ScoutingPFMuon = cms.vstring( 'DST_DoubleMu3_noVtx_Mass10_PFScouting_v3' ), + ScoutingPFRun3 = cms.vstring( 'DST_Run3_PFScoutingPixelTracking_v16' ), SingleMuon = cms.vstring( 'HLT_IsoMu20_eta2p1_LooseChargedIsoPFTau27_eta2p1_CrossL1_v12', 'HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_CrossL1_v4', 'HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1', @@ -6925,15 +6885,8 @@ ) process.MessageLogger = cms.Service( "MessageLogger", suppressInfo = cms.untracked.vstring( ), - statistics = cms.untracked.vstring( 'cerr' ), - suppressFwkInfo = cms.untracked.vstring( ), - cout = cms.untracked.PSet( placeholder = cms.untracked.bool( True ) ), - cerr_stats = cms.untracked.PSet( - threshold = cms.untracked.string( "WARNING" ), - output = cms.untracked.string( "cerr" ), - optionalPSet = cms.untracked.bool( True ) - ), suppressDebug = cms.untracked.vstring( ), + suppressFwkInfo = cms.untracked.vstring( ), cerr = cms.untracked.PSet( INFO = cms.untracked.PSet( limit = cms.untracked.int32( 0 ) ), noTimeStamps = cms.untracked.bool( False ), @@ -6949,10 +6902,6 @@ limit = cms.untracked.int32( 10000000 ) ), threshold = cms.untracked.string( "INFO" ), - suppressInfo = cms.untracked.vstring( ), - suppressWarning = cms.untracked.vstring( ), - suppressDebug = cms.untracked.vstring( ), - suppressError = cms.untracked.vstring( ) ), suppressWarning = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltCtf3HitL1SeededWithMaterialTracks', @@ -6975,17 +6924,6 @@ 'hltBLifetimeRegionalCtfWithMaterialTracksbbPhiL1FastJetFastPV', 'hltCtfActivityWithMaterialTracks' ), debugModules = cms.untracked.vstring( ), - categories = cms.untracked.vstring( 'FwkJob', - 'FwkReport', - 'FwkSummary', - 'Root_NoDictionary' ), - destinations = cms.untracked.vstring( 'warnings', - 'errors', - 'infos', - 'debugs', - 'cout', - 'cerr' ), - threshold = cms.untracked.string( "INFO" ), suppressError = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltL3MuonCandidates', 'hltL3TkTracksFromL2OIState', @@ -7349,7 +7287,7 @@ ts4Thresh = cms.double( 0.0 ), meanTime = cms.double( 0.0 ), nnlsThresh = cms.double( 1.0E-11 ), - nMaxItersMin = cms.int32( 500 ), + nMaxItersMin = cms.int32( 50 ), timeSigmaSiPM = cms.double( 2.5 ), applyTimeSlew = cms.bool( True ), timeSlewParsType = cms.int32( 3 ), @@ -12564,7 +12502,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -12680,6 +12619,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -17899,14 +17839,6 @@ thrOverE2EB1 = cms.vdouble( 0.0 ), thrOverE2EB2 = cms.vdouble( 0.0 ) ) -process.hltRegionalTowerForEgamma = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - EMin = cms.double( 0.8 ), - EtMin = cms.double( 0.5 ), - L1IsoCand = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForAll" ) -) process.hltEgammaHcalPFClusterIso = cms.EDProducer( "EgammaHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.2, 0.25 ), useHF = cms.bool( False ), @@ -31272,7 +31204,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 20.0, 20.0, 20.0, 20.0, 20.0, 20.0 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -31388,6 +31321,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -31772,10 +31706,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAllCaloForMuons" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -31785,7 +31719,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -31810,15 +31744,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauLooseRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -31864,10 +31799,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -31877,7 +31812,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -31902,15 +31837,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 50.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauLooseAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -32567,10 +32503,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAllCaloForMuons" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -32580,7 +32516,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -32605,15 +32541,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauLooseRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -32659,10 +32596,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -32672,7 +32609,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -32697,15 +32634,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 50.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauLooseAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -32858,10 +32796,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -32871,7 +32809,276 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), + applyRelativeSumPtCut = cms.bool( False ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), WeightECALIsolation = cms.double( 0.33333 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 0.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 0.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) +) +process.hltHpsPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 2.0 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( False ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.05 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.5 ), + applyRelativeSumPtCut = cms.bool( True ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), + WeightECALIsolation = cms.double( 1.0 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 1.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 60.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) +) +process.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", + Prediscriminants = cms.PSet( + BooleanOperator = cms.string( "or" ), + discr1 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminator" ) + ), + discr2 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauMediumRelativeChargedIsolationDiscriminator" ) + ) + ), + FailValue = cms.double( 0.0 ), + PassValue = cms.double( 1.0 ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ) +) +process.hltHpsSelectedPFTausTrackFindingMediumChargedIsolation = cms.EDFilter( "PFTauSelector", + discriminators = cms.VPSet( + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackFindingDiscriminator" ), + selectionCut = cms.double( 0.5 ) + ), + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator" ), + selectionCut = cms.double( 0.5 ) + ) + ), + discriminatorContainers = cms.VPSet( + ), + cut = cms.string( "pt > 0" ), + src = cms.InputTag( "hltHpsPFTauProducer" ) +) +process.hltHpsPFTau30TrackMediumChargedIso = cms.EDFilter( "HLT1PFTau", + saveTags = cms.bool( True ), + MinPt = cms.double( 30.0 ), + MinN = cms.int32( 1 ), + MaxEta = cms.double( 2.5 ), + MinEta = cms.double( -1.0 ), + MinMass = cms.double( -1.0 ), + inputTag = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), + MinE = cms.double( -1.0 ), + triggerType = cms.int32( 84 ), + MaxMass = cms.double( -1.0 ) +) +process.hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch = cms.EDProducer( "L1THLTTauMatching", + JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), + EtMin = cms.double( 0.0 ), + L1TauTrigger = cms.InputTag( "hltL1sBigORLooseIsoEGXXerIsoTauYYerdRMin0p3" ) +) +process.hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched = cms.EDFilter( "HLT1PFTau", + saveTags = cms.bool( True ), + MinPt = cms.double( 30.0 ), + MinN = cms.int32( 1 ), + MaxEta = cms.double( 2.1 ), + MinEta = cms.double( -1.0 ), + MinMass = cms.double( -1.0 ), + inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch" ), + MinE = cms.double( -1.0 ), + triggerType = cms.int32( 84 ), + MaxMass = cms.double( -1.0 ) +) +process.hltHpsOverlapFilterIsoEle24WPTightGsfMediumIsoPFTau30 = cms.EDFilter( "HLT2PhotonPFTau", + saveTags = cms.bool( True ), + MinMinv = cms.double( 0.0 ), + originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackFindingMediumChargedIsolation' ), + MinDelR = cms.double( 0.3 ), + MinPt = cms.double( 1.0 ), + MinN = cms.int32( 1 ), + originTag1 = cms.VInputTag( 'hltEgammaCandidates' ), + triggerType1 = cms.int32( 81 ), + triggerType2 = cms.int32( 84 ), + MaxMinv = cms.double( -1.0 ), + MinDeta = cms.double( 0.0 ), + MaxDelR = cms.double( 99999.0 ), + inputTag1 = cms.InputTag( "hltEle24erWPTightGsfTrackIsoFilterForTau" ), + inputTag2 = cms.InputTag( "hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched" ), + MaxDphi = cms.double( -1.0 ), + MaxDeta = cms.double( -1.0 ), + MaxPt = cms.double( -1.0 ), + MinDphi = cms.double( 0.0 ) +) +process.hltPreEle24eta2p1WPTightGsfTightChargedIsoPFTauHPS30eta2p1CrossL1 = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +process.hltHpsPFTauTightAbsoluteChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 3.2 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( True ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "NotUsed" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.03 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -32896,282 +33103,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) -) -process.hltHpsPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 2.0 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), - rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.05 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), - applyRelativeSumPtCut = cms.bool( True ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) -) -process.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", - Prediscriminants = cms.PSet( - BooleanOperator = cms.string( "or" ), - discr1 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminator" ) - ), - discr2 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauMediumRelativeChargedIsolationDiscriminator" ) - ) - ), - FailValue = cms.double( 0.0 ), - PassValue = cms.double( 1.0 ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ) -) -process.hltHpsSelectedPFTausTrackFindingMediumChargedIsolation = cms.EDFilter( "PFTauSelector", - discriminators = cms.VPSet( - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackFindingDiscriminator" ), - selectionCut = cms.double( 0.5 ) - ), - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator" ), - selectionCut = cms.double( 0.5 ) - ) - ), - discriminatorContainers = cms.VPSet( - ), - cut = cms.string( "pt > 0" ), - src = cms.InputTag( "hltHpsPFTauProducer" ) -) -process.hltHpsPFTau30TrackMediumChargedIso = cms.EDFilter( "HLT1PFTau", - saveTags = cms.bool( True ), - MinPt = cms.double( 30.0 ), - MinN = cms.int32( 1 ), - MaxEta = cms.double( 2.5 ), - MinEta = cms.double( -1.0 ), - MinMass = cms.double( -1.0 ), - inputTag = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), - MinE = cms.double( -1.0 ), - triggerType = cms.int32( 84 ), - MaxMass = cms.double( -1.0 ) -) -process.hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch = cms.EDProducer( "L1THLTTauMatching", - JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackFindingMediumChargedIsolation" ), - EtMin = cms.double( 0.0 ), - L1TauTrigger = cms.InputTag( "hltL1sBigORLooseIsoEGXXerIsoTauYYerdRMin0p3" ) -) -process.hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched = cms.EDFilter( "HLT1PFTau", - saveTags = cms.bool( True ), - MinPt = cms.double( 30.0 ), - MinN = cms.int32( 1 ), - MaxEta = cms.double( 2.1 ), - MinEta = cms.double( -1.0 ), - MinMass = cms.double( -1.0 ), - inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackMediumChargedIsolationMatch" ), - MinE = cms.double( -1.0 ), - triggerType = cms.int32( 84 ), - MaxMass = cms.double( -1.0 ) -) -process.hltHpsOverlapFilterIsoEle24WPTightGsfMediumIsoPFTau30 = cms.EDFilter( "HLT2PhotonPFTau", - saveTags = cms.bool( True ), - MinMinv = cms.double( 0.0 ), - originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackFindingMediumChargedIsolation' ), - MinDelR = cms.double( 0.3 ), - MinPt = cms.double( 1.0 ), - MinN = cms.int32( 1 ), - originTag1 = cms.VInputTag( 'hltEgammaCandidates' ), - triggerType1 = cms.int32( 81 ), - triggerType2 = cms.int32( 84 ), - MaxMinv = cms.double( -1.0 ), - MinDeta = cms.double( 0.0 ), - MaxDelR = cms.double( 99999.0 ), - inputTag1 = cms.InputTag( "hltEle24erWPTightGsfTrackIsoFilterForTau" ), - inputTag2 = cms.InputTag( "hltHpsSelectedPFTau30MediumChargedIsolationL1HLTMatched" ), - MaxDphi = cms.double( -1.0 ), - MaxDeta = cms.double( -1.0 ), - MaxPt = cms.double( -1.0 ), - MinDphi = cms.double( 0.0 ) -) -process.hltPreEle24eta2p1WPTightGsfTightChargedIsoPFTauHPS30eta2p1CrossL1 = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltHpsPFTauTightAbsoluteChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducer" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 3.2 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), - rhoProducer = cms.InputTag( "NotUsed" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.03 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), WeightECALIsolation = cms.double( 0.33333 ), - applyRelativeSumPtCut = cms.bool( False ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauTightRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -33217,10 +33158,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -33230,7 +33171,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -33255,15 +33196,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 70.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -33392,10 +33334,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -33405,7 +33347,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( True ), @@ -33430,15 +33372,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltHpsSelectedPFTausTrackFindingLooseChargedIsolationTightOOSCPhotons = cms.EDFilter( "PFTauSelector", discriminators = cms.VPSet( @@ -34348,14 +34291,6 @@ useEt = cms.bool( True ), rhoScale = cms.double( 1.0 ) ) -process.hltRegionalTowerForMuonsReg = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( "hltIterL3MuonCandidates" ), - EMin = cms.double( 0.0 ), - EtMin = cms.double( 0.0 ), - L1IsoCand = cms.InputTag( "hltIterL3MuonCandidates" ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForHCAL" ) -) process.hltMuonHcalRegPFClusterIsoForMuons = cms.EDProducer( "MuonHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.227, 0.372 ), useHF = cms.bool( False ), @@ -37062,7 +36997,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 20.0, 20.0, 20.0, 20.0, 20.0, 20.0 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -37178,6 +37114,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -37583,10 +37520,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -37596,7 +37533,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 0.33333 ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -37621,15 +37558,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 0.33333 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauMediumRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -37675,10 +37613,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -37688,7 +37626,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -37713,15 +37651,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauMediumAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -37838,10 +37777,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -37851,7 +37790,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( True ), @@ -37876,15 +37815,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauMediumChargedIsolationAndTightOOSCPhotonsDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -38001,10 +37941,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -38014,7 +37954,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 0.33333 ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -38039,15 +37979,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 0.33333 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -38093,10 +38034,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -38106,7 +38047,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -38131,15 +38072,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 70.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -38862,10 +38804,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "NotUsed" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -38875,7 +38817,264 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), + applyRelativeSumPtCut = cms.bool( False ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), WeightECALIsolation = cms.double( 0.33333 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 0.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 0.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) +) +process.hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 2.0 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( False ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.04 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.5 ), + applyRelativeSumPtCut = cms.bool( True ), + storeRawPUsumPt = cms.bool( False ), + applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), + maximumOccupancy = cms.uint32( 0 ), + deltaBetaPUTrackPtCutOverride = cms.bool( True ), + ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), + maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), + footprintCorrections = cms.VPSet( + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 0" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) + ), + cms.PSet( offset = cms.string( "2.7" ), + selection = cms.string( "decayMode() = 5" ) + ), + cms.PSet( offset = cms.string( "0.0" ), + selection = cms.string( "decayMode() = 6" ) + ), + cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), + selection = cms.string( "decayMode() = 10" ) + ) + ), + WeightECALIsolation = cms.double( 1.0 ), + deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), + ApplyDiscriminationByECALIsolation = cms.bool( False ), + isoConeSizeForDeltaBeta = cms.double( 0.3 ), + storeRawSumPt = cms.bool( False ), + rhoUEOffsetCorrection = cms.double( 1.0 ), + storeRawFootprintCorrection = cms.bool( False ), + relativeSumPtOffset = cms.double( 70.0 ), + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) +) +process.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", + Prediscriminants = cms.PSet( + BooleanOperator = cms.string( "or" ), + discr1 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauTightAbsoluteChargedIsolationDiscriminatorReg" ) + ), + discr2 = cms.PSet( + cut = cms.double( 0.5 ), + Producer = cms.InputTag( "hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg" ) + ) + ), + FailValue = cms.double( 0.0 ), + PassValue = cms.double( 1.0 ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ) +) +process.hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg = cms.EDFilter( "PFTauSelector", + discriminators = cms.VPSet( + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackPt1DiscriminatorReg" ), + selectionCut = cms.double( 0.5 ) + ), + cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg" ), + selectionCut = cms.double( 0.5 ) + ) + ), + discriminatorContainers = cms.VPSet( + ), + cut = cms.string( "pt > 0" ), + src = cms.InputTag( "hltHpsPFTauProducerReg" ) +) +process.hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg = cms.EDProducer( "L1THLTTauMatching", + JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg" ), + EtMin = cms.double( 0.0 ), + L1TauTrigger = cms.InputTag( "hltL1sBigOrMuXXerIsoTauYYer" ) +) +process.hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg = cms.EDFilter( "HLT1PFTau", + saveTags = cms.bool( True ), + MinPt = cms.double( 35.0 ), + MinN = cms.int32( 1 ), + MaxEta = cms.double( 2.1 ), + MinEta = cms.double( -1.0 ), + MinMass = cms.double( -1.0 ), + inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg" ), + MinE = cms.double( -1.0 ), + triggerType = cms.int32( 84 ), + MaxMass = cms.double( -1.0 ) +) +process.hltHpsOverlapFilterIsoMu24TightChargedIsoPFTau35MonitoringReg = cms.EDFilter( "HLT2MuonPFTau", + saveTags = cms.bool( True ), + MinMinv = cms.double( 0.0 ), + originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg' ), + MinDelR = cms.double( 0.3 ), + MinPt = cms.double( 1.0 ), + MinN = cms.int32( 1 ), + originTag1 = cms.VInputTag( 'hltIterL3MuonCandidates' ), + triggerType1 = cms.int32( 83 ), + triggerType2 = cms.int32( 84 ), + MaxMinv = cms.double( -1.0 ), + MinDeta = cms.double( 1.0 ), + MaxDelR = cms.double( 99999.0 ), + inputTag1 = cms.InputTag( "hltL3crIsoL1sBigOrMuXXerIsoTauYYerL1f0L2f10QL3f24QL3trkIsoFiltered0p07" ), + inputTag2 = cms.InputTag( "hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg" ), + MaxDphi = cms.double( -1.0 ), + MaxDeta = cms.double( -1.0 ), + MaxPt = cms.double( -1.0 ), + MinDphi = cms.double( 0.0 ) +) +process.hltPreIsoMu24eta2p1MediumChargedIsoPFTauHPS35Trk1TightIDeta2p1RegCrossL1 = cms.EDFilter( "HLTPrescaler", + L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), + offset = cms.uint32( 0 ) +) +process.hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", + applyRhoCorrection = cms.bool( False ), + PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), + storeRawOccupancy = cms.bool( False ), + maximumSumPtCut = cms.double( 3.7 ), + qualityCuts = cms.PSet( + vertexTrackFiltering = cms.bool( False ), + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + recoverLeadingTrk = cms.bool( False ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + pvFindingAlgo = cms.string( "closestInDeltaZ" ) + ), + minTauPtForNoIso = cms.double( -99.0 ), + vertexSrc = cms.InputTag( "NotUsed" ), + applySumPtCut = cms.bool( True ), + customOuterCone = cms.double( -1.0 ), + ApplyDiscriminationByTrackerIsolation = cms.bool( True ), + storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), + enableHGCalWorkaround = cms.bool( False ), + rhoProducer = cms.InputTag( "NotUsed" ), + maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), + deltaBetaFactor = cms.string( "0.38" ), + applyFootprintCorrection = cms.bool( False ), + UseAllPFCandsForWeights = cms.bool( False ), + relativeSumPtCut = cms.double( 0.03 ), + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), + applyOccupancyCut = cms.bool( False ), + applyDeltaBetaCorrection = cms.bool( False ), + rhoConeSize = cms.double( 0.357 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -38900,270 +39099,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) -) -process.hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 2.0 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), - rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.04 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), - applyRelativeSumPtCut = cms.bool( True ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), - deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), - ApplyDiscriminationByECALIsolation = cms.bool( False ), - isoConeSizeForDeltaBeta = cms.double( 0.3 ), - storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), - storeRawFootprintCorrection = cms.bool( False ), - relativeSumPtOffset = cms.double( 70.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) -) -process.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", - Prediscriminants = cms.PSet( - BooleanOperator = cms.string( "or" ), - discr1 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauTightAbsoluteChargedIsolationDiscriminatorReg" ) - ), - discr2 = cms.PSet( - cut = cms.double( 0.5 ), - Producer = cms.InputTag( "hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg" ) - ) - ), - FailValue = cms.double( 0.0 ), - PassValue = cms.double( 1.0 ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ) -) -process.hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg = cms.EDFilter( "PFTauSelector", - discriminators = cms.VPSet( - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTrackPt1DiscriminatorReg" ), - selectionCut = cms.double( 0.5 ) - ), - cms.PSet( discriminator = cms.InputTag( "hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg" ), - selectionCut = cms.double( 0.5 ) - ) - ), - discriminatorContainers = cms.VPSet( - ), - cut = cms.string( "pt > 0" ), - src = cms.InputTag( "hltHpsPFTauProducerReg" ) -) -process.hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg = cms.EDProducer( "L1THLTTauMatching", - JetSrc = cms.InputTag( "hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg" ), - EtMin = cms.double( 0.0 ), - L1TauTrigger = cms.InputTag( "hltL1sBigOrMuXXerIsoTauYYer" ) -) -process.hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg = cms.EDFilter( "HLT1PFTau", - saveTags = cms.bool( True ), - MinPt = cms.double( 35.0 ), - MinN = cms.int32( 1 ), - MaxEta = cms.double( 2.1 ), - MinEta = cms.double( -1.0 ), - MinMass = cms.double( -1.0 ), - inputTag = cms.InputTag( "hltHpsL1JetsHLTPFTauTrackPt1TightChargedIsolationMatchReg" ), - MinE = cms.double( -1.0 ), - triggerType = cms.int32( 84 ), - MaxMass = cms.double( -1.0 ) -) -process.hltHpsOverlapFilterIsoMu24TightChargedIsoPFTau35MonitoringReg = cms.EDFilter( "HLT2MuonPFTau", - saveTags = cms.bool( True ), - MinMinv = cms.double( 0.0 ), - originTag2 = cms.VInputTag( 'hltHpsSelectedPFTausTrackPt1TightChargedIsolationReg' ), - MinDelR = cms.double( 0.3 ), - MinPt = cms.double( 1.0 ), - MinN = cms.int32( 1 ), - originTag1 = cms.VInputTag( 'hltIterL3MuonCandidates' ), - triggerType1 = cms.int32( 83 ), - triggerType2 = cms.int32( 84 ), - MaxMinv = cms.double( -1.0 ), - MinDeta = cms.double( 1.0 ), - MaxDelR = cms.double( 99999.0 ), - inputTag1 = cms.InputTag( "hltL3crIsoL1sBigOrMuXXerIsoTauYYerL1f0L2f10QL3f24QL3trkIsoFiltered0p07" ), - inputTag2 = cms.InputTag( "hltHpsSelectedPFTau35TrackPt1TightChargedIsolationL1HLTMatchedReg" ), - MaxDphi = cms.double( -1.0 ), - MaxDeta = cms.double( -1.0 ), - MaxPt = cms.double( -1.0 ), - MinDphi = cms.double( 0.0 ) -) -process.hltPreIsoMu24eta2p1MediumChargedIsoPFTauHPS35Trk1TightIDeta2p1RegCrossL1 = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltHpsPFTauMediumAbsoluteChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", - applyRhoCorrection = cms.bool( False ), - PFTauProducer = cms.InputTag( "hltHpsPFTauProducerReg" ), - storeRawOccupancy = cms.bool( False ), - maximumSumPtCut = cms.double( 3.7 ), - qualityCuts = cms.PSet( - vertexTrackFiltering = cms.bool( False ), - isolationQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.5 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 100.0 ), - maxTransverseImpactParameter = cms.double( 0.1 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), - recoverLeadingTrk = cms.bool( False ), - signalQualityCuts = cms.PSet( - maxDeltaZ = cms.double( 0.2 ), - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ), - minNeutralHadronEt = cms.double( 1.0 ) - ), - vxAssocQualityCuts = cms.PSet( - minTrackPt = cms.double( 0.0 ), - minGammaEt = cms.double( 0.5 ), - minTrackHits = cms.uint32( 3 ), - minTrackPixelHits = cms.uint32( 0 ), - maxTrackChi2 = cms.double( 1000.0 ), - maxTransverseImpactParameter = cms.double( 0.2 ), - useTracksInsteadOfPFHadrons = cms.bool( False ) - ), - pvFindingAlgo = cms.string( "closestInDeltaZ" ) - ), - minTauPtForNoIso = cms.double( -99.0 ), - vertexSrc = cms.InputTag( "NotUsed" ), - applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.357 ), - ApplyDiscriminationByTrackerIsolation = cms.bool( True ), - storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 0.0 ), - rhoProducer = cms.InputTag( "NotUsed" ), - maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), - deltaBetaFactor = cms.string( "0.38" ), - applyFootprintCorrection = cms.bool( False ), - UseAllPFCandsForWeights = cms.bool( False ), - relativeSumPtCut = cms.double( 0.03 ), - Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), - applyOccupancyCut = cms.bool( False ), - applyDeltaBetaCorrection = cms.bool( False ), WeightECALIsolation = cms.double( 0.33333 ), - applyRelativeSumPtCut = cms.bool( False ), - storeRawPUsumPt = cms.bool( False ), - applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), - maximumOccupancy = cms.uint32( 0 ), - deltaBetaPUTrackPtCutOverride = cms.bool( True ), - ApplyDiscriminationByWeightedECALIsolation = cms.bool( False ), - maxAbsPhotonSumPt_outsideSignalCone = cms.double( 1.0E9 ), - footprintCorrections = cms.VPSet( - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 0" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 1 || decayMode() = 2" ) - ), - cms.PSet( offset = cms.string( "2.7" ), - selection = cms.string( "decayMode() = 5" ) - ), - cms.PSet( offset = cms.string( "0.0" ), - selection = cms.string( "decayMode() = 6" ) - ), - cms.PSet( offset = cms.string( "max(2.0, 0.22*pt() - 2.0)" ), - selection = cms.string( "decayMode() = 10" ) - ) - ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 0.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauMediumRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -39209,10 +39154,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -39222,7 +39167,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -39247,15 +39192,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -39317,10 +39263,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -39330,7 +39276,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( True ), @@ -39355,15 +39301,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowReg" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauMediumChargedIsolationAndTightOOSCPhotonsDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -60092,10 +60039,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAllCaloForMuons" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -60105,7 +60052,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -60130,15 +60077,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -60184,10 +60132,10 @@ minTauPtForNoIso = cms.double( -99.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -60197,7 +60145,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -60222,15 +60170,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 60.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -76667,8 +76616,8 @@ L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), offset = cms.uint32( 0 ) ) -process.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 = cms.EDFilter( "HLTL1TSeed", - L1SeedsLogicalExpression = cms.string( "L1_HTT200er OR L1_HTT255er OR L1_HTT280er OR L1_HTT320er OR L1_HTT360er OR L1_ETT2000 OR L1_HTT400er OR L1_HTT450er OR L1_SingleJet180 OR L1_SingleJet200 OR L1_DoubleJet30er2p5_Mass_Min300_dEta_Max1p5 OR L1_DoubleJet30er2p5_Mass_Min330_dEta_Max1p5 OR L1_DoubleJet30er2p5_Mass_Min360_dEta_Max1p5" ), +process.hltL1sDSTRun3PFScoutingPixelTracking = cms.EDFilter( "HLTL1TSeed", + L1SeedsLogicalExpression = cms.string( "L1GlobalDecision" ), L1EGammaInputTag = cms.InputTag( 'hltGtStage2Digis','EGamma' ), L1JetInputTag = cms.InputTag( 'hltGtStage2Digis','Jet' ), saveTags = cms.bool( True ), @@ -76678,383 +76627,2466 @@ L1MuonInputTag = cms.InputTag( 'hltGtStage2Digis','Muon' ), L1GlobalInputTag = cms.InputTag( "hltGtStage2Digis" ) ) -process.hltPreDSTHT250CaloScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltHT250 = cms.EDFilter( "HLTHtMhtFilter", - saveTags = cms.bool( True ), - mhtLabels = cms.VInputTag( 'hltHtMht' ), - meffSlope = cms.vdouble( 1.0 ), - minHt = cms.vdouble( 250.0 ), - minMht = cms.vdouble( 0.0 ), - htLabels = cms.VInputTag( 'hltHtMht' ), - minMeff = cms.vdouble( 0.0 ) -) -process.hltPreDSTHT250CaloBTagScouting = cms.EDFilter( "HLTPrescaler", +process.hltPreDSTRun3PFScoutingPixelTracking = cms.EDFilter( "HLTPrescaler", L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), offset = cms.uint32( 0 ) ) -process.hltPixelTracksForNoPUFilter = cms.EDProducer( "PixelTrackFilterByKinematicsProducer", - nSigmaTipMaxTolerance = cms.double( 0.0 ), - chi2 = cms.double( 1000.0 ), - nSigmaInvPtTolerance = cms.double( 0.0 ), - ptMin = cms.double( 0.0 ), - tipMax = cms.double( 999.0 ) -) -process.hltSelectorJets20L1FastJetForNoPU = cms.EDFilter( "EtMinCaloJetSelector", - filter = cms.bool( False ), - src = cms.InputTag( "hltAK4CaloJetsCorrectedIDPassed" ), - etMin = cms.double( 20.0 ) -) -process.hltPixelTracksForNoPUFitter = cms.EDProducer( "PixelFitterByHelixProjectionsProducer", - scaleErrorsForBPix1 = cms.bool( False ), - scaleFactor = cms.double( 0.65 ) -) -process.hltPixelTracksTrackingRegionsForNoPU = cms.EDProducer( "TauRegionalPixelSeedTrackingRegionEDProducer", - RegionPSet = cms.PSet( - JetSrc = cms.InputTag( "hltSelectorJets20L1FastJetForNoPU" ), - vertexSrc = cms.InputTag( "hltFastPVPixelVertices" ), - ptMin = cms.double( 0.5 ), - howToUseMeasurementTracker = cms.string( "Never" ), - deltaEtaRegion = cms.double( 0.5 ), - originHalfLength = cms.double( 0.5 ), - searchOpt = cms.bool( False ), - originRadius = cms.double( 0.1 ), - measurementTrackerName = cms.InputTag( "MeasurementTrackerEvent" ), - deltaPhiRegion = cms.double( 0.5 ) - ) -) -process.hltPixelTracksHitDoubletsForNoPU = cms.EDProducer( "HitPairEDProducer", - trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsForNoPU" ), - layerPairs = cms.vuint32( 0, 1, 2 ), - clusterCheck = cms.InputTag( "" ), - produceSeedingHitSets = cms.bool( False ), - produceIntermediateHitDoublets = cms.bool( True ), - trackingRegionsSeedingLayers = cms.InputTag( "" ), - maxElementTotal = cms.uint32( 50000000 ), - maxElement = cms.uint32( 0 ), - seedingLayers = cms.InputTag( "hltPixelLayerQuadrupletsRegForBTag" ) -) -process.hltPixelTracksHitQuadrupletsForNoPU = cms.EDProducer( "CAHitQuadrupletEDProducer", - CAHardPtCut = cms.double( 0.0 ), - CAPhiCut_byTriplets = cms.VPSet( - cms.PSet( seedingLayers = cms.string( "" ), - cut = cms.double( -1.0 ) - ) - ), - extraHitRPhitolerance = cms.double( 0.032 ), - doublets = cms.InputTag( "hltPixelTracksHitDoubletsForNoPU" ), - fitFastCircle = cms.bool( True ), - maxChi2 = cms.PSet( - value2 = cms.double( 50.0 ), - value1 = cms.double( 200.0 ), - pt1 = cms.double( 0.7 ), - enabled = cms.bool( True ), - pt2 = cms.double( 2.0 ) - ), - CAThetaCut = cms.double( 0.002 ), - SeedComparitorPSet = cms.PSet( - clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), - ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), - clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersRegForBTagCache" ) - ), - CAThetaCut_byTriplets = cms.VPSet( - cms.PSet( seedingLayers = cms.string( "" ), - cut = cms.double( -1.0 ) +process.hltPixelTracksZetaClean = cms.EDProducer( "TrackWithVertexSelector", + normalizedChi2 = cms.double( 999999.0 ), + numberOfValidHits = cms.uint32( 0 ), + zetaVtx = cms.double( 0.3 ), + etaMin = cms.double( 0.0 ), + rhoVtx = cms.double( 0.2 ), + ptErrorCut = cms.double( 5.0 ), + dzMax = cms.double( 999.0 ), + etaMax = cms.double( 5.0 ), + quality = cms.string( "any" ), + copyTrajectories = cms.untracked.bool( False ), + nSigmaDtVertex = cms.double( 0.0 ), + timesTag = cms.InputTag( "" ), + ptMin = cms.double( 0.3 ), + ptMax = cms.double( 500.0 ), + d0Max = cms.double( 999.0 ), + copyExtras = cms.untracked.bool( False ), + nVertices = cms.uint32( 2 ), + vertexTag = cms.InputTag( "hltPixelVertices" ), + src = cms.InputTag( "hltPixelTracks" ), + vtxFallback = cms.bool( True ), + numberOfLostHits = cms.uint32( 999 ), + numberOfValidPixelHits = cms.uint32( 3 ), + timeResosTag = cms.InputTag( "" ), + useVtx = cms.bool( True ) +) +process.hltPixelOnlyPFMuonMerging = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIterL3MuonTracks','hltPixelTracksZetaClean' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) ) ), - CAPhiCut = cms.double( 0.2 ), - useBendingCorrection = cms.bool( True ), - fitFastCircleChi2Cut = cms.bool( True ) -) -process.hltPixelTracksForNoPU = cms.EDProducer( "PixelTrackProducer", - Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), - passLabel = cms.string( "" ), - Fitter = cms.InputTag( "hltPixelTracksForNoPUFitter" ), - Filter = cms.InputTag( "hltPixelTracksForNoPUFilter" ), - SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsForNoPU" ) -) -process.hltCaloJetFromPV = cms.EDProducer( "PixelJetPuId", - MinEtaForwardJets = cms.double( 2.4 ), - MinTrackPt = cms.double( 0.6 ), - primaryVertex = cms.InputTag( "hltFastPVPixelVertices" ), - MinEtForwardJets = cms.double( 40.0 ), - MinGoodJetTrackPtRatio = cms.double( 0.045 ), - MaxTrackDistanceToJet = cms.double( 0.04 ), - UseForwardJetsAsNoPU = cms.bool( True ), - MinGoodJetTrackPt = cms.double( 1.8 ), - tracks = cms.InputTag( "hltPixelTracksForNoPU" ), - MaxTrackChi2 = cms.double( 20.0 ), - jets = cms.InputTag( "hltSelectorJets20L1FastJetForNoPU" ) -) -process.hltPreDSTHT410PFScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltHT410 = cms.EDFilter( "HLTHtMhtFilter", - saveTags = cms.bool( True ), - mhtLabels = cms.VInputTag( 'hltHtMht' ), - meffSlope = cms.vdouble( 1.0 ), - minHt = cms.vdouble( 410.0 ), - minMht = cms.vdouble( 0.0 ), - htLabels = cms.VInputTag( 'hltHtMht' ), - minMeff = cms.vdouble( 0.0 ) -) -process.hltPreDSTHT410BTagScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltPreDSTZeroBiasBTagScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltPreDSTZeroBiasCaloScoutingPFScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltPreDSTCaloJet40BTagScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltPreDSTCaloJet40CaloScoutingPFScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltPreDSTCaloJet40CaloBTagScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltPreDSTL1HTTBTagScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltPreDSTL1HTTCaloScoutingPFScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltPreDSTL1HTTCaloBTagScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltL1sDoubleMuIorTripleMuIorQuadMu = cms.EDFilter( "HLTL1TSeed", - L1SeedsLogicalExpression = cms.string( "L1_DoubleMu4p5er2p0_SQ_OS_Mass_Min7 OR L1_DoubleMu_12_5 OR L1_DoubleMu_15_7 OR L1_TripleMu_5_3_3 OR L1_TripleMu_5_5_3 OR L1_QuadMu0 OR L1_DoubleMu0er1p5_SQ_OS_dR_Max1p4 OR L1_DoubleMu4p5er2p0_SQ_OS_Mass7to18 OR L1_DoubleMu4_SQ_OS_dR_Max1p2 OR L1_SingleMu22 OR L1_DoubleMu0er1p4_SQ_OS_dR_Max1p4 OR L1_DoubleMu4p5_SQ_OS_dR_Max1p2 OR L1_DoubleMu4p5_SQ_OS OR L1_DoubleMu0er1p5_SQ_dR_Max1p4 OR L1_DoubleMu0er2p0_SQ_dR_Max1p4 OR L1_DoubleMu0_SQ" ), - L1EGammaInputTag = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - L1JetInputTag = cms.InputTag( 'hltGtStage2Digis','Jet' ), - saveTags = cms.bool( True ), - L1ObjectMapInputTag = cms.InputTag( "hltGtStage2ObjectMap" ), - L1EtSumInputTag = cms.InputTag( 'hltGtStage2Digis','EtSum' ), - L1TauInputTag = cms.InputTag( 'hltGtStage2Digis','Tau' ), - L1MuonInputTag = cms.InputTag( 'hltGtStage2Digis','Muon' ), - L1GlobalInputTag = cms.InputTag( "hltGtStage2Digis" ) -) -process.hltPreDSTL1DoubleMuBTagScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltPreDSTL1DoubleMuCaloScoutingPFScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltL1sHTT200to500IorSingleJet180to200 = cms.EDFilter( "HLTL1TSeed", - L1SeedsLogicalExpression = cms.string( "L1_HTT200er OR L1_HTT255er OR L1_HTT280er OR L1_HTT320er OR L1_HTT360er OR L1_ETT2000 OR L1_HTT400er OR L1_HTT450er OR L1_SingleJet180 OR L1_SingleJet200" ), - L1EGammaInputTag = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - L1JetInputTag = cms.InputTag( 'hltGtStage2Digis','Jet' ), - saveTags = cms.bool( True ), - L1ObjectMapInputTag = cms.InputTag( "hltGtStage2ObjectMap" ), - L1EtSumInputTag = cms.InputTag( 'hltGtStage2Digis','EtSum' ), - L1TauInputTag = cms.InputTag( 'hltGtStage2Digis','Tau' ), - L1MuonInputTag = cms.InputTag( 'hltGtStage2Digis','Muon' ), - L1GlobalInputTag = cms.InputTag( "hltGtStage2Digis" ) -) -process.hltPreDSTDoubleMu3noVtxCaloScoutingMonitoring = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltRecHitInRegionForMuonsMFnoVtx = cms.EDProducer( "MuonHLTRechitInRegionsProducer", - l1LowerThr = cms.double( 0.0 ), - doIsolated = cms.bool( True ), - useUncalib = cms.bool( False ), - regionEtaMargin = cms.double( 0.4 ), - ecalhitLabels = cms.VInputTag( 'hltEcalRecHit:EcalRecHitsEB','hltEcalRecHit:EcalRecHitsEE' ), - regionPhiMargin = cms.double( 0.4 ), - l1TagNonIsolated = cms.InputTag( "NotUsed" ), - l1UpperThr = cms.double( 999.0 ), - l1LowerThrIgnoreIsolation = cms.double( 100.0 ), - productLabels = cms.vstring( 'EcalRegionalRecHitsEB', - 'EcalRegionalRecHitsEE' ), - l1TagIsolated = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ) + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIterL3MuonTracks','hltPixelTracksZetaClean' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) ) -process.hltRecHitInRegionForMuonsESNoVtx = cms.EDProducer( "MuonHLTRechitInRegionsProducer", - l1LowerThr = cms.double( 0.0 ), - doIsolated = cms.bool( True ), - useUncalib = cms.bool( False ), - regionEtaMargin = cms.double( 0.4 ), - ecalhitLabels = cms.VInputTag( 'hltEcalPreshowerRecHit:EcalRecHitsES' ), - regionPhiMargin = cms.double( 0.4 ), - l1TagNonIsolated = cms.InputTag( "NotUsed" ), - l1UpperThr = cms.double( 999.0 ), - l1LowerThrIgnoreIsolation = cms.double( 100.0 ), - productLabels = cms.vstring( 'EcalRegionalRecHitsES' ), - l1TagIsolated = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ) +process.hltPixelOnlyMuonLinks = cms.EDProducer( "MuonLinksProducerForHLT", + pMin = cms.double( 2.5 ), + InclusiveTrackerTrackCollection = cms.InputTag( "hltPixelOnlyPFMuonMerging" ), + shareHitFraction = cms.double( 0.8 ), + LinkCollection = cms.InputTag( "hltL3MuonsIterL3Links" ), + ptMin = cms.double( 2.5 ) ) -process.hltParticleFlowRecHitECALForMuonsMFNoVtx = cms.EDProducer( "PFRecHitProducer", - producers = cms.VPSet( - cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsMFnoVtx','EcalRegionalRecHitsEB' ), - srFlags = cms.InputTag( "" ), - name = cms.string( "PFEBRecHitCreator" ), - qualityTests = cms.VPSet( - cms.PSet( name = cms.string( "PFRecHitQTestDBThreshold" ), - applySelectionsToAllCrystals = cms.bool( True ) - ), - cms.PSet( topologicalCleaning = cms.bool( True ), - skipTTRecoveredHits = cms.bool( True ), - cleaningThreshold = cms.double( 2.0 ), - name = cms.string( "PFRecHitQTestECAL" ), - timingCleaning = cms.bool( True ) - ) - ) - ), - cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsMFnoVtx','EcalRegionalRecHitsEE' ), - srFlags = cms.InputTag( "" ), - name = cms.string( "PFEERecHitCreator" ), - qualityTests = cms.VPSet( - cms.PSet( name = cms.string( "PFRecHitQTestDBThreshold" ), - applySelectionsToAllCrystals = cms.bool( True ) - ), - cms.PSet( topologicalCleaning = cms.bool( True ), - skipTTRecoveredHits = cms.bool( True ), - cleaningThreshold = cms.double( 2.0 ), - name = cms.string( "PFRecHitQTestECAL" ), - timingCleaning = cms.bool( True ) - ) - ) - ) +process.hltPixelOnlyMuons = cms.EDProducer( "MuonIdProducer", + TrackExtractorPSet = cms.PSet( + Diff_z = cms.double( 0.2 ), + inputTrackCollection = cms.InputTag( "hltPixelOnlyPFMuonMerging" ), + Chi2Ndof_Max = cms.double( 1.0E64 ), + BeamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), + DR_Veto = cms.double( 0.01 ), + Pt_Min = cms.double( -1.0 ), + DR_Max = cms.double( 1.0 ), + DepositLabel = cms.untracked.string( "" ), + NHits_Min = cms.uint32( 0 ), + Chi2Prob_Min = cms.double( -1.0 ), + Diff_r = cms.double( 0.1 ), + BeamlineOption = cms.string( "BeamSpotFromEvent" ), + ComponentName = cms.string( "TrackExtractor" ) ), - navigator = cms.PSet( - barrel = cms.PSet( ), - endcap = cms.PSet( ), - name = cms.string( "PFRecHitECALNavigator" ) - ) -) -process.hltParticleFlowRecHitPSForMuonsNoVtx = cms.EDProducer( "PFRecHitProducer", - producers = cms.VPSet( - cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsESNoVtx','EcalRegionalRecHitsES' ), - name = cms.string( "PFPSRecHitCreator" ), - qualityTests = cms.VPSet( - cms.PSet( threshold = cms.double( 7.0E-6 ), - name = cms.string( "PFRecHitQTestThreshold" ) - ) - ) - ) + maxAbsEta = cms.double( 3.0 ), + fillGlobalTrackRefits = cms.bool( False ), + arbitrationCleanerOptions = cms.PSet( + OverlapDTheta = cms.double( 0.02 ), + Overlap = cms.bool( True ), + Clustering = cms.bool( True ), + ME1a = cms.bool( True ), + ClusterDTheta = cms.double( 0.02 ), + ClusterDPhi = cms.double( 0.6 ), + OverlapDPhi = cms.double( 0.0786 ) ), - navigator = cms.PSet( name = cms.string( "PFRecHitPreshowerNavigator" ) ) -) -process.hltParticleFlowClusterECALUncorrectedForMuonsMFNoVtx = cms.EDProducer( "PFClusterProducer", - pfClusterBuilder = cms.PSet( - minFracTot = cms.double( 1.0E-20 ), - stoppingTolerance = cms.double( 1.0E-8 ), - positionCalc = cms.PSet( - minAllowedNormalization = cms.double( 1.0E-9 ), - posCalcNCrystals = cms.int32( 9 ), - algoName = cms.string( "Basic2DGenericPFlowPositionCalc" ), - logWeightDenominator = cms.double( 0.08 ), - minFractionInCalc = cms.double( 1.0E-9 ), - timeResolutionCalcBarrel = cms.PSet( - corrTermLowE = cms.double( 0.0510871 ), - threshLowE = cms.double( 0.5 ), - noiseTerm = cms.double( 1.10889 ), - constantTermLowE = cms.double( 0.0 ), - noiseTermLowE = cms.double( 1.31883 ), - threshHighE = cms.double( 5.0 ), - constantTerm = cms.double( 0.428192 ) - ), - timeResolutionCalcEndcap = cms.PSet( - corrTermLowE = cms.double( 0.0 ), - threshLowE = cms.double( 1.0 ), - noiseTerm = cms.double( 5.72489999999 ), - constantTermLowE = cms.double( 0.0 ), - noiseTermLowE = cms.double( 6.92683000001 ), - threshHighE = cms.double( 10.0 ), - constantTerm = cms.double( 0.0 ) - ) - ), - maxIterations = cms.uint32( 50 ), - positionCalcForConvergence = cms.PSet( - minAllowedNormalization = cms.double( 0.0 ), - T0_ES = cms.double( 1.2 ), - algoName = cms.string( "ECAL2DPositionCalcWithDepthCorr" ), - T0_EE = cms.double( 3.1 ), - T0_EB = cms.double( 7.4 ), - X0 = cms.double( 0.89 ), - minFractionInCalc = cms.double( 0.0 ), - W0 = cms.double( 4.2 ) + globalTrackQualityInputTag = cms.InputTag( "glbTrackQual" ), + fillShowerDigis = cms.bool( False ), + addExtraSoftMuons = cms.bool( False ), + debugWithTruthMatching = cms.bool( False ), + CaloExtractorPSet = cms.PSet( + DR_Veto_H = cms.double( 0.1 ), + CenterConeOnCalIntersection = cms.bool( False ), + NoiseTow_EE = cms.double( 0.15 ), + Noise_EB = cms.double( 0.025 ), + Noise_HE = cms.double( 0.2 ), + DR_Veto_E = cms.double( 0.07 ), + NoiseTow_EB = cms.double( 0.04 ), + Noise_EE = cms.double( 0.1 ), + UseRecHitsFlag = cms.bool( False ), + DR_Max = cms.double( 1.0 ), + DepositLabel = cms.untracked.string( "Cal" ), + Noise_HO = cms.double( 0.2 ), + DR_Veto_HO = cms.double( 0.1 ), + Threshold_H = cms.double( 0.5 ), + PrintTimeReport = cms.untracked.bool( False ), + Threshold_E = cms.double( 0.2 ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "CaloExtractorByAssociator" ), + Threshold_HO = cms.double( 0.5 ), + DepositInstanceLabels = cms.vstring( 'ecal', + 'hcal', + 'ho' ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) ), - allCellsPositionCalc = cms.PSet( - minAllowedNormalization = cms.double( 1.0E-9 ), - posCalcNCrystals = cms.int32( -1 ), - algoName = cms.string( "Basic2DGenericPFlowPositionCalc" ), - logWeightDenominator = cms.double( 0.08 ), - minFractionInCalc = cms.double( 1.0E-9 ), - timeResolutionCalcBarrel = cms.PSet( - corrTermLowE = cms.double( 0.0510871 ), - threshLowE = cms.double( 0.5 ), - noiseTerm = cms.double( 1.10889 ), - constantTermLowE = cms.double( 0.0 ), - noiseTermLowE = cms.double( 1.31883 ), - threshHighE = cms.double( 5.0 ), - constantTerm = cms.double( 0.428192 ) - ), - timeResolutionCalcEndcap = cms.PSet( - corrTermLowE = cms.double( 0.0 ), - threshLowE = cms.double( 1.0 ), - noiseTerm = cms.double( 5.72489999999 ), - constantTermLowE = cms.double( 0.0 ), - noiseTermLowE = cms.double( 6.92683000001 ), - threshHighE = cms.double( 10.0 ), - constantTerm = cms.double( 0.0 ) - ) + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 1.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + CaloTowerCollectionLabel = cms.InputTag( "hltTowerMakerForAll" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "hltHbhereco" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 1.0 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + dRHcal = cms.double( 1.0 ), + dRHcalPreselection = cms.double( 1.0 ), + HORecHitCollectionLabel = cms.InputTag( "hltHoreco" ) ), - algoName = cms.string( "Basic2DGenericPFlowClusterizer" ), - recHitEnergyNorms = cms.VPSet( - cms.PSet( recHitEnergyNorm = cms.double( 0.08 ), - detector = cms.string( "ECAL_BARREL" ) + Noise_HB = cms.double( 0.2 ) + ), + runArbitrationCleaner = cms.bool( False ), + fillEnergy = cms.bool( True ), + TrackerKinkFinderParameters = cms.PSet( + usePosition = cms.bool( False ), + diagonalOnly = cms.bool( False ) + ), + TimingFillerParameters = cms.PSet( + DTTimingParameters = cms.PSet( + HitError = cms.double( 6.0 ), + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) ), - cms.PSet( recHitEnergyNorm = cms.double( 0.3 ), - detector = cms.string( "ECAL_ENDCAP" ) + debug = cms.bool( False ), + DoWireCorr = cms.bool( False ), + RequireBothProjections = cms.bool( False ), + DTTimeOffset = cms.double( 2.7 ), + PruneCut = cms.double( 10000.0 ), + DTsegments = cms.InputTag( "hltDt4DSegments" ), + UseSegmentT0 = cms.bool( False ), + HitsMin = cms.int32( 5 ), + DropTheta = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) ) ), - showerSigma = cms.double( 1.5 ), - minFractionToKeep = cms.double( 1.0E-7 ), - excludeOtherSeeds = cms.bool( True ) - ), - positionReCalc = cms.PSet( - minAllowedNormalization = cms.double( 0.0 ), - T0_ES = cms.double( 1.2 ), - algoName = cms.string( "ECAL2DPositionCalcWithDepthCorr" ), - T0_EE = cms.double( 3.1 ), - T0_EB = cms.double( 7.4 ), - X0 = cms.double( 0.89 ), - minFractionInCalc = cms.double( 0.0 ), - W0 = cms.double( 4.2 ) - ), - initialClusteringStep = cms.PSet( - thresholdsByDetector = cms.VPSet( - cms.PSet( gatheringThreshold = cms.double( 0.08 ), - gatheringThresholdPt = cms.double( 0.0 ), - detector = cms.string( "ECAL_BARREL" ) + UseCSC = cms.bool( True ), + CSCTimingParameters = cms.PSet( + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) ), - cms.PSet( gatheringThreshold = cms.double( 0.3 ), - gatheringThresholdPt = cms.double( 0.0 ), - detector = cms.string( "ECAL_ENDCAP" ) + debug = cms.bool( False ), + CSCWireTimeOffset = cms.double( 0.0 ), + CSCStripError = cms.double( 7.0 ), + CSCTimeOffset = cms.double( 0.0 ), + CSCWireError = cms.double( 8.6 ), + PruneCut = cms.double( 100.0 ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + UseStripTime = cms.bool( True ), + CSCStripTimeOffset = cms.double( 0.0 ), + UseWireTime = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) ) ), - algoName = cms.string( "Basic2DGenericTopoClusterizer" ), - useCornerCells = cms.bool( True ) - ), - seedCleaners = cms.VPSet( + ErrorDT = cms.double( 6.0 ), + EcalEnergyCut = cms.double( 0.4 ), + UseECAL = cms.bool( True ), + ErrorEB = cms.double( 2.085 ), + UseDT = cms.bool( True ), + ErrorEE = cms.double( 6.95 ), + ErrorCSC = cms.double( 7.4 ) ), - energyCorrector = cms.PSet( ), + inputCollectionTypes = cms.vstring( 'inner tracks', + 'links', + 'outer tracks' ), + arbitrateTrackerMuons = cms.bool( False ), + minCaloCompatibility = cms.double( 0.6 ), + ecalDepositName = cms.string( "ecal" ), + minP = cms.double( 10.0 ), + fillIsolation = cms.bool( True ), + jetDepositName = cms.string( "jets" ), + hoDepositName = cms.string( "ho" ), + writeIsoDeposits = cms.bool( False ), + maxAbsPullX = cms.double( 4.0 ), + maxAbsPullY = cms.double( 9999.0 ), + minPt = cms.double( 10.0 ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( True ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( True ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 9999.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + CaloTowerCollectionLabel = cms.InputTag( "hltTowerMakerForAll" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( True ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( True ), + HBHERecHitCollectionLabel = cms.InputTag( "hltHbhereco" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.05 ), + useCalo = cms.bool( False ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + dRHcal = cms.double( 9999.0 ), + dRHcalPreselection = cms.double( 0.2 ), + HORecHitCollectionLabel = cms.InputTag( "hltHoreco" ) + ), + storeCrossedHcalRecHits = cms.bool( False ), + JetExtractorPSet = cms.PSet( + JetCollectionLabel = cms.InputTag( "hltAK4CaloJetsPFEt5" ), + DR_Veto = cms.double( 0.1 ), + DR_Max = cms.double( 1.0 ), + ExcludeMuonVeto = cms.bool( True ), + PrintTimeReport = cms.untracked.bool( False ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "JetExtractor" ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 0.5 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + CaloTowerCollectionLabel = cms.InputTag( "hltTowerMakerForAll" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "hltHbhereco" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.5 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + dRHcal = cms.double( 0.5 ), + dRHcalPreselection = cms.double( 0.5 ), + HORecHitCollectionLabel = cms.InputTag( "hltHoreco" ) + ), + Threshold = cms.double( 5.0 ) + ), + fillGlobalTrackQuality = cms.bool( False ), + minPCaloMuon = cms.double( 1.0E9 ), + maxAbsDy = cms.double( 9999.0 ), + fillCaloCompatibility = cms.bool( True ), + fillMatching = cms.bool( True ), + MuonCaloCompatibility = cms.PSet( + delta_eta = cms.double( 0.02 ), + delta_phi = cms.double( 0.02 ), + allSiPMHO = cms.bool( False ), + MuonTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_muons_lowPt_3_1_norm.root" ), + PionTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_pions_lowPt_3_1_norm.root" ) + ), + fillTrackerKink = cms.bool( False ), + ShowerDigiFillerParameters = cms.PSet( + cscDigiCollectionLabel = cms.InputTag( 'muonCSCDigis','MuonCSCStripDigi' ), + dtDigiCollectionLabel = cms.InputTag( "muonDTDigis" ), + digiMaxDistanceX = cms.double( 25.0 ) + ), + hcalDepositName = cms.string( "hcal" ), + sigmaThresholdToFillCandidateP4WithGlobalFit = cms.double( 2.0 ), + inputCollectionLabels = cms.VInputTag( 'hltPixelOnlyPFMuonMerging','hltPixelOnlyMuonLinks','hltL2Muons' ), + trackDepositName = cms.string( "tracker" ), + maxAbsDx = cms.double( 3.0 ), + ptThresholdToFillCandidateP4WithGlobalFit = cms.double( 200.0 ), + minNumberOfMatches = cms.int32( 1 ) +) +process.hltLightPixelOnlyPFTracks = cms.EDProducer( "LightPFTrackProducer", + TrackQuality = cms.string( "none" ), + UseQuality = cms.bool( False ), + TkColList = cms.VInputTag( 'hltPixelOnlyPFMuonMerging' ) +) +process.hltPixelOnlyParticleFlowBlock = cms.EDProducer( "PFBlockProducer", + debug = cms.untracked.bool( False ), + linkDefinitions = cms.VPSet( + cms.PSet( linkType = cms.string( "TRACK:ECAL" ), + useKDTree = cms.bool( True ), + linkerName = cms.string( "TrackAndECALLinker" ) + ), + cms.PSet( linkType = cms.string( "TRACK:HCAL" ), + useKDTree = cms.bool( True ), + linkerName = cms.string( "TrackAndHCALLinker" ), + trajectoryLayerEntrance = cms.string( "HCALEntrance" ), + trajectoryLayerExit = cms.string( "HCALExit" ), + nMaxHcalLinksPerTrack = cms.int32( 1 ) + ), + cms.PSet( linkType = cms.string( "ECAL:HCAL" ), + useKDTree = cms.bool( False ), + linkerName = cms.string( "ECALAndHCALLinker" ), + minAbsEtaEcal = cms.double( 2.5 ) + ), + cms.PSet( linkType = cms.string( "HFEM:HFHAD" ), + useKDTree = cms.bool( False ), + linkerName = cms.string( "HFEMAndHFHADLinker" ) + ) + ), + elementImporters = cms.VPSet( + cms.PSet( muonSrc = cms.InputTag( "hltPixelOnlyMuons" ), + source = cms.InputTag( "hltLightPixelOnlyPFTracks" ), + NHitCuts_byTrackAlgo = cms.vuint32( 3, 3, 3, 3, 3, 3 ), + useIterativeTracking = cms.bool( False ), + importerName = cms.string( "GeneralTracksImporter" ), + DPtOverPtCuts_byTrackAlgo = cms.vdouble( 5.0, 5.0, 5.0, 5.0, 5.0, 5.0 ), + muonMaxDPtOPt = cms.double( 1.0 ), + trackQuality = cms.string( "any" ), + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) + ), + cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), + importerName = cms.string( "ECALClusterImporter" ), + BCtoPFCMap = cms.InputTag( "" ) + ), + cms.PSet( source = cms.InputTag( "hltParticleFlowClusterHCAL" ), + importerName = cms.string( "GenericClusterImporter" ) + ), + cms.PSet( source = cms.InputTag( "hltParticleFlowClusterHF" ), + importerName = cms.string( "GenericClusterImporter" ) + ) + ), + verbose = cms.untracked.bool( False ) +) +process.hltPixelOnlyParticleFlow = cms.EDProducer( "PFProducer", + goodPixelTrackDeadHcal_maxLost3Hit = cms.int32( 0 ), + PFMuonAlgoParameters = cms.PSet( ), + calibHF_use = cms.bool( False ), + verbose = cms.untracked.bool( False ), + pf_nsigma_ECAL = cms.double( 0.0 ), + usePFConversions = cms.bool( False ), + GedPhotonValueMap = cms.InputTag( 'tmpGedPhotons','valMapPFEgammaCandToPhoton' ), + useCalibrationsFromDB = cms.bool( True ), + resolHF_square = cms.vdouble( 7.834401, 0.012996, 0.0 ), + goodPixelTrackDeadHcal_ptErrRel = cms.double( 1.0 ), + goodTrackDeadHcal_validFr = cms.double( 0.5 ), + postMuonCleaning = cms.bool( True ), + calibrationsLabel = cms.string( "HLT" ), + muon_HO = cms.vdouble( 0.9, 0.9 ), + postHFCleaning = cms.bool( False ), + factors_45 = cms.vdouble( 10.0, 100.0 ), + cleanedHF = cms.VInputTag( 'hltParticleFlowRecHitHF:Cleaned','hltParticleFlowClusterHF:Cleaned' ), + iCfgCandConnector = cms.PSet( + nuclCalibFactors = cms.vdouble( 0.8, 0.15, 0.5, 0.5, 0.05 ), + bCorrect = cms.bool( False ), + bCalibPrimary = cms.bool( False ) + ), + rejectTracks_Bad = cms.bool( False ), + vertexCollection = cms.InputTag( "hltPixelVertices" ), + egammaElectrons = cms.InputTag( "" ), + calibHF_a_EMonly = cms.vdouble( 0.96945, 0.96701, 0.76309, 0.82268, 0.87583, 0.89718, 0.98674, 1.4681, 1.458, 1.458 ), + dptRel_DispVtx = cms.double( 10.0 ), + muons = cms.InputTag( "hltPixelOnlyMuons" ), + calibHF_b_HADonly = cms.vdouble( 1.27541, 0.85361, 0.86333, 0.89091, 0.94348, 0.94348, 0.9437, 1.0034, 1.0444, 1.0444 ), + pf_nsigma_HCAL = cms.double( 1.0 ), + muon_ECAL = cms.vdouble( 0.5, 0.5 ), + goodPixelTrackDeadHcal_maxPt = cms.double( 50.0 ), + blocks = cms.InputTag( "hltPixelOnlyParticleFlowBlock" ), + goodTrackDeadHcal_ptErrRel = cms.double( 0.2 ), + useEGammaFilters = cms.bool( False ), + pf_nsigma_HFHAD = cms.double( 1.0 ), + useEGammaElectrons = cms.bool( False ), + useHO = cms.bool( False ), + nsigma_TRACK = cms.double( 1.0 ), + PFEGammaFiltersParameters = cms.PSet( + electron_protectionsForJetMET = cms.PSet( + maxE = cms.double( 50.0 ), + maxTrackPOverEele = cms.double( 1.0 ), + maxEcalEOverP_2 = cms.double( 0.2 ), + maxHcalEOverEcalE = cms.double( 0.1 ), + maxEcalEOverP_1 = cms.double( 0.5 ), + maxHcalEOverP = cms.double( 1.0 ), + maxEcalEOverPRes = cms.double( 0.2 ), + maxHcalE = cms.double( 10.0 ), + maxEeleOverPout = cms.double( 0.2 ), + maxNtracks = cms.double( 3.0 ), + maxEleHcalEOverEcalE = cms.double( 0.1 ), + maxDPhiIN = cms.double( 0.1 ), + maxEeleOverPoutRes = cms.double( 0.5 ) + ), + electron_maxElePtForOnlyMVAPresel = cms.double( 50.0 ), + photon_SigmaiEtaiEta_endcap = cms.double( 0.034 ), + electron_iso_combIso_endcap = cms.double( 10.0 ), + photon_protectionsForBadHcal = cms.PSet( + solidConeTrkIsoSlope = cms.double( 0.3 ), + enableProtections = cms.bool( False ), + solidConeTrkIsoOffset = cms.double( 10.0 ) + ), + electron_missinghits = cms.uint32( 1 ), + photon_MinEt = cms.double( 10.0 ), + electron_iso_pt = cms.double( 10.0 ), + electron_ecalDrivenHademPreselCut = cms.double( 0.15 ), + electron_iso_mva_endcap = cms.double( -0.1075 ), + electron_iso_combIso_barrel = cms.double( 10.0 ), + photon_protectionsForJetMET = cms.PSet( + sumPtTrackIsoSlope = cms.double( 0.001 ), + sumPtTrackIso = cms.double( 4.0 ) + ), + electron_protectionsForBadHcal = cms.PSet( + dEta = cms.vdouble( 0.0064, 0.01264 ), + dPhi = cms.vdouble( 0.0547, 0.0394 ), + enableProtections = cms.bool( False ), + eInvPInv = cms.vdouble( 0.184, 0.0721 ), + full5x5_sigmaIetaIeta = cms.vdouble( 0.0106, 0.0387 ) + ), + electron_noniso_mvaCut = cms.double( -0.1 ), + electron_iso_mva_barrel = cms.double( -0.1875 ), + photon_SigmaiEtaiEta_barrel = cms.double( 0.0125 ), + photon_combIso = cms.double( 10.0 ), + photon_HoE = cms.double( 0.05 ) + ), + goodPixelTrackDeadHcal_minEta = cms.double( 2.3 ), + useVerticesForNeutral = cms.bool( True ), + goodTrackDeadHcal_chi2n = cms.double( 5.0 ), + goodTrackDeadHcal_dxy = cms.double( 0.5 ), + goodPixelTrackDeadHcal_dz = cms.double( 0.05 ), + PFEGammaCandidates = cms.InputTag( "particleFlowEGamma" ), + pf_nsigma_HFEM = cms.double( 1.0 ), + usePFDecays = cms.bool( False ), + calibHF_b_EMHAD = cms.vdouble( 1.27541, 0.85361, 0.86333, 0.89091, 0.94348, 0.94348, 0.9437, 1.0034, 1.0444, 1.0444 ), + rejectTracks_Step45 = cms.bool( False ), + goodPixelTrackDeadHcal_maxLost4Hit = cms.int32( 1 ), + calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), + goodTrackDeadHcal_layers = cms.uint32( 4 ), + goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), + usePFNuclearInteractions = cms.bool( False ), + GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), + goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), + calibHF_a_EMHAD = cms.vdouble( 1.42215, 1.00496, 0.68961, 0.81656, 0.98504, 0.98504, 1.00802, 1.0593, 1.4576, 1.4576 ), + muon_HCAL = cms.vdouble( 3.0, 3.0 ), + pt_Error = cms.double( 1.0 ), + debug = cms.untracked.bool( False ), + useProtectionsForJetMET = cms.bool( True ), + PFHFCleaningParameters = cms.PSet( + minSignificance = cms.double( 2.5 ), + maxSignificance = cms.double( 2.5 ), + minDeltaMet = cms.double( 0.4 ), + maxDeltaPhiPt = cms.double( 7.0 ), + minHFCleaningPt = cms.double( 5.0 ), + minSignificanceReduction = cms.double( 1.4 ) + ) +) +process.hltAK4PixelOnlyPFJets = cms.EDProducer( "FastjetJetProducer", + Active_Area_Repeats = cms.int32( 5 ), + useMassDropTagger = cms.bool( False ), + doAreaFastjet = cms.bool( False ), + muMin = cms.double( -1.0 ), + Ghost_EtaMax = cms.double( 6.0 ), + maxBadHcalCells = cms.uint32( 9999999 ), + maxRecoveredHcalCells = cms.uint32( 9999999 ), + applyWeight = cms.bool( False ), + doAreaDiskApprox = cms.bool( True ), + subtractorName = cms.string( "" ), + dRMax = cms.double( -1.0 ), + useExplicitGhosts = cms.bool( False ), + puWidth = cms.double( 0.0 ), + maxRecoveredEcalCells = cms.uint32( 9999999 ), + R0 = cms.double( -1.0 ), + jetType = cms.string( "PFJet" ), + muCut = cms.double( -1.0 ), + subjetPtMin = cms.double( -1.0 ), + csRParam = cms.double( -1.0 ), + MinVtxNdof = cms.int32( 0 ), + minSeed = cms.uint32( 0 ), + voronoiRfact = cms.double( -9.0 ), + doRhoFastjet = cms.bool( False ), + jetAlgorithm = cms.string( "AntiKt" ), + writeCompound = cms.bool( False ), + muMax = cms.double( -1.0 ), + nSigmaPU = cms.double( 1.0 ), + GhostArea = cms.double( 0.01 ), + Rho_EtaMax = cms.double( 4.4 ), + restrictInputs = cms.bool( False ), + nExclude = cms.uint32( 0 ), + yMin = cms.double( -1.0 ), + srcWeights = cms.InputTag( "" ), + maxBadEcalCells = cms.uint32( 9999999 ), + jetCollInstanceName = cms.string( "" ), + useFiltering = cms.bool( False ), + maxInputs = cms.uint32( 1 ), + rFiltFactor = cms.double( -1.0 ), + useDeterministicSeed = cms.bool( True ), + doPVCorrection = cms.bool( False ), + rFilt = cms.double( -1.0 ), + yMax = cms.double( -1.0 ), + zcut = cms.double( -1.0 ), + useTrimming = cms.bool( False ), + puCenters = cms.vdouble( ), + MaxVtxZ = cms.double( 15.0 ), + rParam = cms.double( 0.4 ), + csRho_EtaMax = cms.double( -1.0 ), + UseOnlyVertexTracks = cms.bool( False ), + dRMin = cms.double( -1.0 ), + gridSpacing = cms.double( -1.0 ), + minimumTowersFraction = cms.double( 0.0 ), + doFastJetNonUniform = cms.bool( False ), + usePruning = cms.bool( False ), + maxDepth = cms.int32( -1 ), + yCut = cms.double( -1.0 ), + useSoftDrop = cms.bool( False ), + DzTrVtxMax = cms.double( 0.0 ), + UseOnlyOnePV = cms.bool( False ), + maxProblematicHcalCells = cms.uint32( 9999999 ), + correctShape = cms.bool( False ), + rcut_factor = cms.double( -1.0 ), + src = cms.InputTag( "hltPixelOnlyParticleFlow" ), + gridMaxRapidity = cms.double( -1.0 ), + sumRecHits = cms.bool( False ), + jetPtMin = cms.double( 0.0 ), + puPtMin = cms.double( 10.0 ), + useDynamicFiltering = cms.bool( False ), + verbosity = cms.int32( 0 ), + inputEtMin = cms.double( 0.0 ), + useConstituentSubtraction = cms.bool( False ), + beta = cms.double( -1.0 ), + trimPtFracMin = cms.double( -1.0 ), + radiusPU = cms.double( 0.4 ), + nFilt = cms.int32( -1 ), + useKtPruning = cms.bool( False ), + DxyTrVtxMax = cms.double( 0.0 ), + maxProblematicEcalCells = cms.uint32( 9999999 ), + srcPVs = cms.InputTag( "hltPixelVertices" ), + useCMSBoostedTauSeedingAlgorithm = cms.bool( False ), + doPUOffsetCorr = cms.bool( False ), + writeJetsWithConst = cms.bool( False ), + inputEMin = cms.double( 0.0 ) +) +process.hltAK4PixelOnlyPFJetsLooseID = cms.EDProducer( "HLTPFJetIDProducer", + CEF = cms.double( 0.99 ), + NHF = cms.double( 0.99 ), + minPt = cms.double( 20.0 ), + CHF = cms.double( 0.0 ), + jetsInput = cms.InputTag( "hltAK4PixelOnlyPFJets" ), + NEF = cms.double( 0.99 ), + NTOT = cms.int32( 1 ), + NCH = cms.int32( 0 ), + maxEta = cms.double( 1.0E99 ), + maxCF = cms.double( 99.0 ) +) +process.hltAK4PixelOnlyPFJetsTightID = cms.EDProducer( "HLTPFJetIDProducer", + CEF = cms.double( 0.99 ), + NHF = cms.double( 0.9 ), + minPt = cms.double( 20.0 ), + CHF = cms.double( 0.0 ), + jetsInput = cms.InputTag( "hltAK4PixelOnlyPFJets" ), + NEF = cms.double( 0.99 ), + NTOT = cms.int32( 1 ), + NCH = cms.int32( 0 ), + maxEta = cms.double( 1.0E99 ), + maxCF = cms.double( 99.0 ) +) +process.hltFixedGridRhoFastjetPixelOnlyAll = cms.EDProducer( "FixedGridRhoProducerFastjet", + gridSpacing = cms.double( 0.55 ), + pfCandidatesTag = cms.InputTag( "hltPixelOnlyParticleFlow" ), + maxRapidity = cms.double( 5.0 ) +) +process.hltAK4PixelOnlyPFFastJetCorrector = cms.EDProducer( "L1FastjetCorrectorProducer", + srcRho = cms.InputTag( "hltFixedGridRhoFastjetPixelOnlyAll" ), + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L1FastJet" ) +) +process.hltAK4PixelOnlyPFRelativeCorrector = cms.EDProducer( "LXXXCorrectorProducer", + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L2Relative" ) +) +process.hltAK4PixelOnlyPFAbsoluteCorrector = cms.EDProducer( "LXXXCorrectorProducer", + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L3Absolute" ) +) +process.hltAK4PixelOnlyPFResidualCorrector = cms.EDProducer( "LXXXCorrectorProducer", + algorithm = cms.string( "AK4PFHLT" ), + level = cms.string( "L2L3Residual" ) +) +process.hltAK4PixelOnlyPFCorrector = cms.EDProducer( "ChainedJetCorrectorProducer", + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFFastJetCorrector','hltAK4PixelOnlyPFRelativeCorrector','hltAK4PixelOnlyPFAbsoluteCorrector','hltAK4PixelOnlyPFResidualCorrector' ) +) +process.hltAK4PixelOnlyPFJetsCorrected = cms.EDProducer( "CorrectedPFJetProducer", + src = cms.InputTag( "hltAK4PixelOnlyPFJets" ), + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFCorrector' ) +) +process.hltAK4PixelOnlyPFJetsLooseIDCorrected = cms.EDProducer( "CorrectedPFJetProducer", + src = cms.InputTag( "hltAK4PixelOnlyPFJetsLooseID" ), + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFCorrector' ) +) +process.hltAK4PixelOnlyPFJetsTightIDCorrected = cms.EDProducer( "CorrectedPFJetProducer", + src = cms.InputTag( "hltAK4PixelOnlyPFJetsTightID" ), + correctors = cms.VInputTag( 'hltAK4PixelOnlyPFCorrector' ) +) +process.hltPixelOnlyPFMETProducer = cms.EDProducer( "PFMETProducer", + src = cms.InputTag( "hltPixelOnlyParticleFlow" ), + parameters = cms.PSet( ), + applyWeight = cms.bool( False ), + calculateSignificance = cms.bool( False ), + alias = cms.string( "hltPFMet" ), + srcWeights = cms.InputTag( "" ), + globalThreshold = cms.double( 0.0 ) +) +process.hltL2MuonCandidatesScoutingNoVtx = cms.EDProducer( "L2MuonCandidateProducer", + InputObjects = cms.InputTag( "hltL2Muons" ) +) +process.hltIterL3OISeedsFromL2MuonsScoutingNoVtx = cms.EDProducer( "TSGForOIFromL2", + hitsToTry = cms.int32( 1 ), + tsosDiff2 = cms.double( 0.02 ), + adjustErrorsDynamicallyForHitless = cms.bool( True ), + SF6 = cms.double( 2.0 ), + SF4 = cms.double( 7.0 ), + SF5 = cms.double( 10.0 ), + propagatorName = cms.string( "PropagatorWithMaterialParabolicMf" ), + SF3 = cms.double( 5.0 ), + SF1 = cms.double( 3.0 ), + minEtaForTEC = cms.double( 0.7 ), + fixedErrorRescaleFactorForHits = cms.double( 1.0 ), + maxSeeds = cms.uint32( 20 ), + maxEtaForTOB = cms.double( 1.8 ), + pT3 = cms.double( 70.0 ), + pT2 = cms.double( 30.0 ), + pT1 = cms.double( 13.0 ), + layersToTry = cms.int32( 2 ), + fixedErrorRescaleFactorForHitless = cms.double( 2.0 ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + SF2 = cms.double( 4.0 ), + numL2ValidHitsCutAllEta = cms.uint32( 20 ), + adjustErrorsDynamicallyForHits = cms.bool( False ), + eta4 = cms.double( 1.2 ), + src = cms.InputTag( "hltL2Muons" ), + eta6 = cms.double( 1.4 ), + eta7 = cms.double( 2.1 ), + eta1 = cms.double( 0.2 ), + eta2 = cms.double( 0.3 ), + eta3 = cms.double( 1.0 ), + UseHitLessSeeds = cms.bool( True ), + estimator = cms.string( "hltESPChi2MeasurementEstimator100" ), + numL2ValidHitsCutAllEndcap = cms.uint32( 30 ), + debug = cms.untracked.bool( False ), + maxHitSeeds = cms.uint32( 1 ), + eta5 = cms.double( 1.6 ), + tsosDiff1 = cms.double( 0.2 ), + maxHitlessSeeds = cms.uint32( 5 ) +) +process.hltIterL3OITrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIterL3OISeedsFromL2MuonsScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 5000 ), + SimpleMagneticField = cms.string( "" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterial" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialOpposite" ) + ), + TrajectoryCleaner = cms.string( "muonSeededTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( True ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 500000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTPSetMuonCkfTrajectoryBuilder" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "CkfTrajectoryBuilder" ) +) +process.hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIterL3OITrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + Fitter = cms.string( "hltESPKFFittingSmootherWithOutliersRejectionAndRK" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "hltESPMeasurementTracker" ), + AlgorithmName = cms.string( "iter10" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( False ), + Propagator = cms.string( "PropagatorWithMaterial" ) +) +process.hltIterL3OIMuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "Notused" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 0 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 0.3, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 4, 3, 2 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 0.35, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 3.40282346639E38, 3.40282346639E38, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 10.0, 1.0, 0.4 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 5, 5 ) + ), + ignoreVertices = cms.bool( True ) +) +process.hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIterL3OIMuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIterL3OIMuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +process.hltL3MuonsIterL3OIScoutingNoVtx = cms.EDProducer( "L3MuonProducer", + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + UseMuonNavigation = cms.untracked.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPSmartPropagatorAny', + 'SteppingHelixPropagatorAny', + 'hltESPSmartPropagator', + 'hltESPSteppingHelixPropagatorOpposite' ) + ), + L3TrajBuilderParameters = cms.PSet( + PtCut = cms.double( 1.0 ), + TrackerPropagator = cms.string( "SteppingHelixPropagatorAny" ), + GlobalMuonTrackMatcher = cms.PSet( + Chi2Cut_3 = cms.double( 200.0 ), + DeltaDCut_2 = cms.double( 10.0 ), + Eta_threshold = cms.double( 1.2 ), + Quality_2 = cms.double( 15.0 ), + DeltaDCut_1 = cms.double( 40.0 ), + Quality_3 = cms.double( 7.0 ), + DeltaDCut_3 = cms.double( 15.0 ), + Quality_1 = cms.double( 20.0 ), + Pt_threshold1 = cms.double( 0.0 ), + DeltaRCut_2 = cms.double( 0.2 ), + DeltaRCut_1 = cms.double( 0.1 ), + Pt_threshold2 = cms.double( 9.99999999E8 ), + Chi2Cut_1 = cms.double( 50.0 ), + Chi2Cut_2 = cms.double( 50.0 ), + DeltaRCut_3 = cms.double( 1.0 ), + LocChi2Cut = cms.double( 0.001 ), + Propagator = cms.string( "hltESPSmartPropagator" ), + MinPt = cms.double( 1.0 ), + MinP = cms.double( 2.5 ) + ), + ScaleTECxFactor = cms.double( -1.0 ), + tkTrajUseVertex = cms.bool( False ), + MuonTrackingRegionBuilder = cms.PSet( + Rescale_Dz = cms.double( 4.0 ), + Pt_fixed = cms.bool( False ), + Eta_fixed = cms.bool( True ), + Eta_min = cms.double( 0.1 ), + DeltaZ = cms.double( 24.2 ), + maxRegions = cms.int32( 2 ), + EtaR_UpperLimit_Par1 = cms.double( 0.25 ), + UseVertex = cms.bool( False ), + Z_fixed = cms.bool( False ), + PhiR_UpperLimit_Par1 = cms.double( 0.6 ), + PhiR_UpperLimit_Par2 = cms.double( 0.2 ), + Rescale_phi = cms.double( 3.0 ), + DeltaEta = cms.double( 0.2 ), + precise = cms.bool( True ), + OnDemand = cms.int32( -1 ), + EtaR_UpperLimit_Par2 = cms.double( 0.15 ), + MeasurementTrackerName = cms.InputTag( "hltESPMeasurementTracker" ), + vertexCollection = cms.InputTag( "pixelVertices" ), + Pt_min = cms.double( 3.0 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + Phi_fixed = cms.bool( True ), + DeltaR = cms.double( 0.025 ), + input = cms.InputTag( "hltL2Muons" ), + DeltaPhi = cms.double( 0.15 ), + Phi_min = cms.double( 0.1 ), + Rescale_eta = cms.double( 3.0 ) + ), + TrackTransformer = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + RefitDirection = cms.string( "insideOut" ), + RefitRPCHits = cms.bool( True ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + tkTrajBeamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + RefitRPCHits = cms.bool( True ), + tkTrajVertex = cms.InputTag( "Notused" ), + GlbRefitterParameters = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + DTRecSegmentLabel = cms.InputTag( "hltDt4DSegments" ), + RefitFlag = cms.bool( True ), + SkipStation = cms.int32( -1 ), + Chi2CutRPC = cms.double( 1.0 ), + PropDirForCosmics = cms.bool( False ), + CSCRecSegmentLabel = cms.InputTag( "hltCscSegments" ), + HitThreshold = cms.int32( 1 ), + DYTthrs = cms.vint32( 30, 15 ), + TrackerSkipSystem = cms.int32( -1 ), + RefitDirection = cms.string( "insideOut" ), + Chi2CutCSC = cms.double( 150.0 ), + Chi2CutDT = cms.double( 10.0 ), + RefitRPCHits = cms.bool( True ), + TrackerSkipSection = cms.int32( -1 ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonHitsOption = cms.int32( 1 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ) + ), + PCut = cms.double( 2.5 ), + tkTrajMaxDXYBeamSpot = cms.double( 9999.0 ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + tkTrajMaxChi2 = cms.double( 9999.0 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + ScaleTECyFactor = cms.double( -1.0 ), + tkTrajLabel = cms.InputTag( "hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx" ) + ), + TrackLoaderParameters = cms.PSet( + MuonSeededTracksInstance = cms.untracked.string( "L2Seeded" ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + DoSmoothing = cms.bool( True ), + SmoothTkTrack = cms.untracked.bool( False ), + VertexConstraint = cms.bool( False ), + MuonUpdatorAtVertexParameters = cms.PSet( + MaxChi2 = cms.double( 1000000.0 ), + BeamSpotPositionErrors = cms.vdouble( 0.1, 0.1, 5.3 ), + Propagator = cms.string( "hltESPSteppingHelixPropagatorOpposite" ) + ), + PutTkTrackIntoEvent = cms.untracked.bool( False ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + MuonCollectionLabel = cms.InputTag( "hltL2Muons" ) +) +process.hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx = cms.EDProducer( "L3TrackLinksCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx' ) +) +process.hltIterL3OIL3MuonsScoutingNoVtx = cms.EDProducer( "L3TrackCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx' ) +) +process.hltIterL3OIL3MuonCandidatesScoutingNoVtx = cms.EDProducer( "L3MuonCandidateProducer", + InputLinksObjects = cms.InputTag( "hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx" ), + InputObjects = cms.InputTag( "hltIterL3OIL3MuonsScoutingNoVtx" ), + MuonPtOption = cms.string( "Tracker" ) +) +process.hltL2SelectorForL3IOScoutingNoVtx = cms.EDProducer( "HLTMuonL2SelectorForL3IO", + MaxNormalizedChi2 = cms.double( 20.0 ), + MinNmuonHits = cms.int32( 1 ), + MinNhits = cms.int32( 1 ), + applyL3Filters = cms.bool( False ), + MaxPtDifference = cms.double( 0.3 ), + l3OISrc = cms.InputTag( "hltIterL3OIL3MuonCandidatesScoutingNoVtx" ), + InputLinks = cms.InputTag( "hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx" ), + l2Src = cms.InputTag( "hltL2Muons" ) +) +process.hltIterL3MuonPixelTracksFilterScoutingNoVtx = cms.EDProducer( "PixelTrackFilterByKinematicsProducer", + nSigmaTipMaxTolerance = cms.double( 0.0 ), + chi2 = cms.double( 1000.0 ), + nSigmaInvPtTolerance = cms.double( 0.0 ), + ptMin = cms.double( 0.1 ), + tipMax = cms.double( 1.0 ) +) +process.hltIterL3MuonPixelTracksFitterScoutingNoVtx = cms.EDProducer( "PixelFitterByHelixProjectionsProducer", + scaleErrorsForBPix1 = cms.bool( False ), + scaleFactor = cms.double( 0.65 ) +) +process.hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx = cms.EDProducer( "MuonTrackingRegionEDProducer", + precise = cms.bool( True ), + Eta_fixed = cms.bool( True ), + Eta_min = cms.double( 0.0 ), + Z_fixed = cms.bool( True ), + MeasurementTrackerName = cms.InputTag( "" ), + maxRegions = cms.int32( 5 ), + Pt_min = cms.double( 2.0 ), + Rescale_Dz = cms.double( 4.0 ), + PhiR_UpperLimit_Par1 = cms.double( 0.6 ), + PhiR_UpperLimit_Par2 = cms.double( 0.2 ), + vertexCollection = cms.InputTag( "notUsed" ), + Phi_fixed = cms.bool( True ), + input = cms.InputTag( "hltL2SelectorForL3IOScoutingNoVtx" ), + DeltaR = cms.double( 0.025 ), + OnDemand = cms.int32( -1 ), + DeltaZ = cms.double( 24.2 ), + Rescale_phi = cms.double( 3.0 ), + Rescale_eta = cms.double( 3.0 ), + DeltaEta = cms.double( 0.2 ), + Phi_min = cms.double( 0.0 ), + DeltaPhi = cms.double( 0.15 ), + UseVertex = cms.bool( False ), + EtaR_UpperLimit_Par1 = cms.double( 0.25 ), + EtaR_UpperLimit_Par2 = cms.double( 0.15 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + Pt_fixed = cms.bool( True ) +) +process.hltIterL3MuonPixelLayerQuadrupletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3+BPix4', + 'BPix1+BPix2+BPix3+FPix1_pos', + 'BPix1+BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos+FPix2_pos', + 'BPix1+BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos+FPix3_pos', + 'BPix1+FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +process.hltIterL3MuonPixelTracksHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIterL3MuonPixelLayerQuadrupletsScoutingNoVtx" ) +) +process.hltIterL3MuonPixelTracksHitQuadrupletsScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltIterL3MuonPixelTracksHitDoubletsScoutingNoVtx" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 50.0 ), + value1 = cms.double( 200.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.005 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.2 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +process.hltIterL3MuonPixelTracksScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", + Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), + passLabel = cms.string( "" ), + Fitter = cms.InputTag( "hltIterL3MuonPixelTracksFitterScoutingNoVtx" ), + Filter = cms.InputTag( "hltIterL3MuonPixelTracksFilterScoutingNoVtx" ), + SeedingHitSets = cms.InputTag( "hltIterL3MuonPixelTracksHitQuadrupletsScoutingNoVtx" ) +) +process.hltIterL3MuonPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexProducer", + WtAverage = cms.bool( True ), + Method2 = cms.bool( True ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + Verbosity = cms.int32( 0 ), + UseError = cms.bool( True ), + TrackCollection = cms.InputTag( "hltIterL3MuonPixelTracksScoutingNoVtx" ), + PtMin = cms.double( 1.0 ), + NTrkMin = cms.int32( 2 ), + ZOffset = cms.double( 5.0 ), + Finder = cms.string( "DivisiveVertexFinder" ), + ZSeparation = cms.double( 0.05 ) +) +process.hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexCollectionTrimmer", + src = cms.InputTag( "hltIterL3MuonPixelVerticesScoutingNoVtx" ), + fractionSumPt2 = cms.double( 0.3 ), + minSumPt2 = cms.double( 0.0 ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + maxVtx = cms.uint32( 100 ) +) +process.hltIter0IterL3MuonPixelSeedsFromPixelTracksScoutingNoVtx = cms.EDProducer( "SeedGeneratorFromProtoTracksEDProducer", + includeFourthHit = cms.bool( False ), + useEventsWithNoVertex = cms.bool( True ), + originHalfLength = cms.double( 0.3 ), + useProtoTrackKinematics = cms.bool( False ), + usePV = cms.bool( False ), + SeedCreatorPSet = cms.PSet( refToPSet_ = cms.string( "HLTSeedFromProtoTracks" ) ), + InputVertexCollection = cms.InputTag( "hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx" ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + InputCollection = cms.InputTag( "hltIterL3MuonPixelTracksScoutingNoVtx" ), + originRadius = cms.double( 0.1 ) +) +process.hltIter0IterL3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter0IterL3MuonPixelSeedsFromPixelTracksScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( True ), + RedundantSeedCleaner = cms.string( "none" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( True ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter0IterL3MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "GroupedCkfTrajectoryBuilder" ) +) +process.hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter0IterL3MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter0" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +process.hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 3, 4 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 0.3, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 3, 4 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 0.35, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 3.40282346639E38, 3.40282346639E38, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 4 ) + ), + ignoreVertices = cms.bool( False ) +) +process.hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +process.hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", + trackClassifier = cms.InputTag( '','QualityMasks' ), + minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), + maxChi2 = cms.double( 16.0 ), + trajectories = cms.InputTag( "hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "" ), + stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), + overrideTrkQuals = cms.InputTag( "" ), + pixelClusters = cms.InputTag( "hltSiPixelClusters" ), + TrackQuality = cms.string( "highPurity" ) +) +process.hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx" ), + OnDemand = cms.bool( False ), + src = cms.InputTag( "hltSiStripClusters" ) +) +process.hltIter2IterL3MuonPixelLayerTripletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3', + 'BPix2+BPix3+BPix4', + 'BPix1+BPix3+BPix4', + 'BPix1+BPix2+BPix4', + 'BPix2+BPix3+FPix1_pos', + 'BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos', + 'BPix1+BPix2+FPix1_neg', + 'BPix2+FPix1_pos+FPix2_pos', + 'BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos', + 'BPix1+FPix1_neg+FPix2_neg', + 'FPix1_pos+FPix2_pos+FPix3_pos', + 'FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +process.hltIter2IterL3MuonPixelClusterCheckScoutingNoVtx = cms.EDProducer( "ClusterCheckerEDProducer", + cut = cms.string( "" ), + silentClusterCheck = cms.untracked.bool( False ), + MaxNumberOfCosmicClusters = cms.uint32( 50000 ), + PixelClusterCollectionLabel = cms.InputTag( "hltSiPixelClusters" ), + doClusterCheck = cms.bool( False ), + MaxNumberOfPixelClusters = cms.uint32( 10000 ), + ClusterCollectionLabel = cms.InputTag( "hltSiStripClusters" ) +) +process.hltIter2IterL3MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1 ), + clusterCheck = cms.InputTag( "hltIter2IterL3MuonPixelClusterCheckScoutingNoVtx" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIter2IterL3MuonPixelLayerTripletsScoutingNoVtx" ) +) +process.hltIter2IterL3MuonPixelHitTripletsScoutingNoVtx = cms.EDProducer( "CAHitTripletEDProducer", + CAThetaCut = cms.double( 0.015 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + maxChi2 = cms.PSet( + value2 = cms.double( 6.0 ), + value1 = cms.double( 100.0 ), + pt1 = cms.double( 0.8 ), + enabled = cms.bool( True ), + pt2 = cms.double( 8.0 ) + ), + doublets = cms.InputTag( "hltIter2IterL3MuonPixelHitDoubletsScoutingNoVtx" ), + CAHardPtCut = cms.double( 0.3 ), + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.1 ), + useBendingCorrection = cms.bool( True ), + extraHitRPhitolerance = cms.double( 0.032 ) +) +process.hltIter2IterL3MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer", + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + forceKinematicWithRegionDirection = cms.bool( False ), + magneticField = cms.string( "ParabolicMf" ), + SeedMomentumForBOFF = cms.double( 5.0 ), + OriginTransverseErrorMultiplier = cms.double( 1.0 ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MinOneOverPtError = cms.double( 1.0 ), + seedingHitSets = cms.InputTag( "hltIter2IterL3MuonPixelHitTripletsScoutingNoVtx" ), + propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) +) +process.hltIter2IterL3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter2IterL3MuonPixelSeedsScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter2IterL3MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "" ) +) +process.hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter2IterL3MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter2" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +process.hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 0 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 3.40282346639E38, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 3.40282346639E38, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 3 ) + ), + ignoreVertices = cms.bool( False ) +) +process.hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +process.hltIter2IterL3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +process.hltL3MuonsIterL3IOScoutingNoVtx = cms.EDProducer( "L3MuonProducer", + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + UseMuonNavigation = cms.untracked.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPSmartPropagatorAny', + 'SteppingHelixPropagatorAny', + 'hltESPSmartPropagator', + 'hltESPSteppingHelixPropagatorOpposite' ) + ), + L3TrajBuilderParameters = cms.PSet( + PtCut = cms.double( 1.0 ), + TrackerPropagator = cms.string( "SteppingHelixPropagatorAny" ), + GlobalMuonTrackMatcher = cms.PSet( + Chi2Cut_3 = cms.double( 200.0 ), + DeltaDCut_2 = cms.double( 10.0 ), + Eta_threshold = cms.double( 1.2 ), + Quality_2 = cms.double( 15.0 ), + DeltaDCut_1 = cms.double( 40.0 ), + Quality_3 = cms.double( 7.0 ), + DeltaDCut_3 = cms.double( 15.0 ), + Quality_1 = cms.double( 20.0 ), + Pt_threshold1 = cms.double( 0.0 ), + DeltaRCut_2 = cms.double( 0.2 ), + DeltaRCut_1 = cms.double( 0.1 ), + Pt_threshold2 = cms.double( 9.99999999E8 ), + Chi2Cut_1 = cms.double( 50.0 ), + Chi2Cut_2 = cms.double( 50.0 ), + DeltaRCut_3 = cms.double( 1.0 ), + LocChi2Cut = cms.double( 0.001 ), + Propagator = cms.string( "hltESPSmartPropagator" ), + MinPt = cms.double( 1.0 ), + MinP = cms.double( 2.5 ) + ), + ScaleTECxFactor = cms.double( -1.0 ), + tkTrajUseVertex = cms.bool( False ), + MuonTrackingRegionBuilder = cms.PSet( + Rescale_Dz = cms.double( 4.0 ), + Pt_fixed = cms.bool( True ), + Eta_fixed = cms.bool( True ), + Eta_min = cms.double( 0.1 ), + DeltaZ = cms.double( 24.2 ), + maxRegions = cms.int32( 2 ), + EtaR_UpperLimit_Par1 = cms.double( 0.25 ), + UseVertex = cms.bool( False ), + Z_fixed = cms.bool( True ), + PhiR_UpperLimit_Par1 = cms.double( 0.6 ), + PhiR_UpperLimit_Par2 = cms.double( 0.2 ), + Rescale_phi = cms.double( 3.0 ), + DeltaEta = cms.double( 0.04 ), + precise = cms.bool( True ), + OnDemand = cms.int32( -1 ), + EtaR_UpperLimit_Par2 = cms.double( 0.15 ), + MeasurementTrackerName = cms.InputTag( "hltESPMeasurementTracker" ), + vertexCollection = cms.InputTag( "pixelVertices" ), + Pt_min = cms.double( 3.0 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + Phi_fixed = cms.bool( True ), + DeltaR = cms.double( 0.025 ), + input = cms.InputTag( "hltL2SelectorForL3IOScoutingNoVtx" ), + DeltaPhi = cms.double( 0.15 ), + Phi_min = cms.double( 0.1 ), + Rescale_eta = cms.double( 3.0 ) + ), + TrackTransformer = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + RefitDirection = cms.string( "insideOut" ), + RefitRPCHits = cms.bool( True ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + tkTrajBeamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + RefitRPCHits = cms.bool( True ), + tkTrajVertex = cms.InputTag( "hltIterL3MuonPixelVerticesScoutingNoVtx" ), + GlbRefitterParameters = cms.PSet( + Fitter = cms.string( "hltESPL3MuKFTrajectoryFitter" ), + DTRecSegmentLabel = cms.InputTag( "hltDt4DSegments" ), + RefitFlag = cms.bool( True ), + SkipStation = cms.int32( -1 ), + Chi2CutRPC = cms.double( 1.0 ), + PropDirForCosmics = cms.bool( False ), + CSCRecSegmentLabel = cms.InputTag( "hltCscSegments" ), + HitThreshold = cms.int32( 1 ), + DYTthrs = cms.vint32( 30, 15 ), + TrackerSkipSystem = cms.int32( -1 ), + RefitDirection = cms.string( "insideOut" ), + Chi2CutCSC = cms.double( 150.0 ), + Chi2CutDT = cms.double( 10.0 ), + RefitRPCHits = cms.bool( True ), + TrackerSkipSection = cms.int32( -1 ), + Propagator = cms.string( "hltESPSmartPropagatorAny" ), + DoPredictionsOnly = cms.bool( False ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MuonHitsOption = cms.int32( 1 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ) + ), + PCut = cms.double( 2.5 ), + tkTrajMaxDXYBeamSpot = cms.double( 9999.0 ), + TrackerRecHitBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + matchToSeeds = cms.bool( True ), + tkTrajMaxChi2 = cms.double( 9999.0 ), + MuonRecHitBuilder = cms.string( "hltESPMuonTransientTrackingRecHitBuilder" ), + ScaleTECyFactor = cms.double( -1.0 ), + tkTrajLabel = cms.InputTag( "hltIter2IterL3MuonMergedScoutingNoVtx" ) + ), + TrackLoaderParameters = cms.PSet( + MuonSeededTracksInstance = cms.untracked.string( "L2Seeded" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + DoSmoothing = cms.bool( False ), + SmoothTkTrack = cms.untracked.bool( False ), + VertexConstraint = cms.bool( False ), + MuonUpdatorAtVertexParameters = cms.PSet( + MaxChi2 = cms.double( 1000000.0 ), + BeamSpotPositionErrors = cms.vdouble( 0.1, 0.1, 5.3 ), + Propagator = cms.string( "hltESPSteppingHelixPropagatorOpposite" ) + ), + PutTkTrackIntoEvent = cms.untracked.bool( False ), + Smoother = cms.string( "hltESPKFTrajectorySmootherForMuonTrackLoader" ) + ), + MuonCollectionLabel = cms.InputTag( "hltL2Muons" ) +) +process.hltIterL3MuonsFromL2LinksCombinationScoutingNoVtx = cms.EDProducer( "L3TrackLinksCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx','hltL3MuonsIterL3IOScoutingNoVtx' ) +) +process.hltIterL3MuonsFromL2ScoutingNoVtx = cms.EDProducer( "L3TrackCombiner", + labels = cms.VInputTag( 'hltL3MuonsIterL3OIScoutingNoVtx','hltL3MuonsIterL3IOScoutingNoVtx' ) +) +process.hltIterL3MuonL1MuonNoL2SelectorScoutingNoVtx = cms.EDProducer( "HLTL1MuonNoL2Selector", + SeedMapTag = cms.InputTag( "hltL2Muons" ), + L1MinPt = cms.double( -1.0 ), + CentralBxOnly = cms.bool( True ), + InputObjects = cms.InputTag( 'hltGtStage2Digis','Muon' ), + L2CandTag = cms.InputTag( "hltL2MuonCandidatesScoutingNoVtx" ), + L1MaxEta = cms.double( 5.0 ), + L1MinQuality = cms.uint32( 7 ) +) +process.hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", + RegionPSet = cms.PSet( + vertexCollection = cms.InputTag( "notUsed" ), + zErrorVetex = cms.double( 0.2 ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + zErrorBeamSpot = cms.double( 24.2 ), + maxNVertices = cms.int32( 1 ), + maxNRegions = cms.int32( 2 ), + nSigmaZVertex = cms.double( 3.0 ), + nSigmaZBeamSpot = cms.double( 4.0 ), + ptMin = cms.double( 10.0 ), + mode = cms.string( "BeamSpotSigma" ), + input = cms.InputTag( "hltIterL3MuonL1MuonNoL2SelectorScoutingNoVtx" ), + searchOpt = cms.bool( False ), + whereToUseMeasurementTracker = cms.string( "Never" ), + originRadius = cms.double( 0.2 ), + measurementTrackerName = cms.InputTag( "" ), + precise = cms.bool( True ), + deltaEta = cms.double( 0.35 ), + deltaPhi = cms.double( 0.2 ) + ) +) +process.hltIterL3FromL1MuonPixelLayerQuadrupletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3+BPix4', + 'BPix1+BPix2+BPix3+FPix1_pos', + 'BPix1+BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos+FPix2_pos', + 'BPix1+BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos+FPix3_pos', + 'BPix1+FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +process.hltIterL3FromL1MuonPixelTracksHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIterL3FromL1MuonPixelLayerQuadrupletsScoutingNoVtx" ) +) +process.hltIterL3FromL1MuonPixelTracksHitQuadrupletsScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltIterL3FromL1MuonPixelTracksHitDoubletsScoutingNoVtx" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 50.0 ), + value1 = cms.double( 200.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.005 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.2 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +process.hltIterL3FromL1MuonPixelTracksScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", + Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), + passLabel = cms.string( "" ), + Fitter = cms.InputTag( "hltIterL3MuonPixelTracksFitterScoutingNoVtx" ), + Filter = cms.InputTag( "hltIterL3MuonPixelTracksFilterScoutingNoVtx" ), + SeedingHitSets = cms.InputTag( "hltIterL3FromL1MuonPixelTracksHitQuadrupletsScoutingNoVtx" ) +) +process.hltIterL3FromL1MuonPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexProducer", + WtAverage = cms.bool( True ), + Method2 = cms.bool( True ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + Verbosity = cms.int32( 0 ), + UseError = cms.bool( True ), + TrackCollection = cms.InputTag( "hltIterL3MuonPixelTracksScoutingNoVtx" ), + PtMin = cms.double( 1.0 ), + NTrkMin = cms.int32( 2 ), + ZOffset = cms.double( 5.0 ), + Finder = cms.string( "DivisiveVertexFinder" ), + ZSeparation = cms.double( 0.05 ) +) +process.hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx = cms.EDProducer( "PixelVertexCollectionTrimmer", + src = cms.InputTag( "hltIterL3FromL1MuonPixelVerticesScoutingNoVtx" ), + fractionSumPt2 = cms.double( 0.3 ), + minSumPt2 = cms.double( 0.0 ), + PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparerForIT" ) ), + maxVtx = cms.uint32( 100 ) +) +process.hltIter0IterL3FromL1MuonPixelSeedsFromPixelTracksScoutingNoVtx = cms.EDProducer( "SeedGeneratorFromProtoTracksEDProducer", + includeFourthHit = cms.bool( False ), + useEventsWithNoVertex = cms.bool( True ), + originHalfLength = cms.double( 0.3 ), + useProtoTrackKinematics = cms.bool( False ), + usePV = cms.bool( False ), + SeedCreatorPSet = cms.PSet( refToPSet_ = cms.string( "HLTSeedFromProtoTracks" ) ), + InputVertexCollection = cms.InputTag( "hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx" ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + InputCollection = cms.InputTag( "hltIterL3FromL1MuonPixelTracksScoutingNoVtx" ), + originRadius = cms.double( 0.1 ) +) +process.hltIter0IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter0IterL3FromL1MuonPixelSeedsFromPixelTracksScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( True ), + RedundantSeedCleaner = cms.string( "none" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( True ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter0IterL3FromL1MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "GroupedCkfTrajectoryBuilder" ) +) +process.hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter0IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltSiStripClusters" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter0" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +process.hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 3, 4 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 0.3, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 3, 4 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 0.4, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 0.35, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 3.40282346639E38, 3.40282346639E38, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 4 ) + ), + ignoreVertices = cms.bool( False ) +) +process.hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +process.hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", + trackClassifier = cms.InputTag( '','QualityMasks' ), + minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), + maxChi2 = cms.double( 16.0 ), + trajectories = cms.InputTag( "hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "" ), + stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), + overrideTrkQuals = cms.InputTag( "" ), + pixelClusters = cms.InputTag( "hltSiPixelClusters" ), + TrackQuality = cms.string( "highPurity" ) +) +process.hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx" ), + OnDemand = cms.bool( False ), + src = cms.InputTag( "hltSiStripClusters" ) +) +process.hltIter2IterL3FromL1MuonPixelLayerTripletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", + layerList = cms.vstring( 'BPix1+BPix2+BPix3', + 'BPix2+BPix3+BPix4', + 'BPix1+BPix3+BPix4', + 'BPix1+BPix2+BPix4', + 'BPix2+BPix3+FPix1_pos', + 'BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos', + 'BPix1+BPix2+FPix1_neg', + 'BPix2+FPix1_pos+FPix2_pos', + 'BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos', + 'BPix1+FPix1_neg+FPix2_neg', + 'FPix1_pos+FPix2_pos+FPix3_pos', + 'FPix1_neg+FPix2_neg+FPix3_neg' ), + MTOB = cms.PSet( ), + TEC = cms.PSet( ), + MTID = cms.PSet( ), + FPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0051 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.0036 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + MTEC = cms.PSet( ), + MTIB = cms.PSet( ), + TID = cms.PSet( ), + TOB = cms.PSet( ), + BPix = cms.PSet( + hitErrorRPhi = cms.double( 0.0027 ), + TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), + skipClusters = cms.InputTag( "hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx" ), + useErrorsFromParam = cms.bool( True ), + hitErrorRZ = cms.double( 0.006 ), + HitProducer = cms.string( "hltSiPixelRecHits" ) + ), + TIB = cms.PSet( ) +) +process.hltIter2IterL3FromL1MuonPixelClusterCheckScoutingNoVtx = cms.EDProducer( "ClusterCheckerEDProducer", + cut = cms.string( "" ), + silentClusterCheck = cms.untracked.bool( False ), + MaxNumberOfCosmicClusters = cms.uint32( 50000 ), + PixelClusterCollectionLabel = cms.InputTag( "hltSiPixelClusters" ), + doClusterCheck = cms.bool( False ), + MaxNumberOfPixelClusters = cms.uint32( 10000 ), + ClusterCollectionLabel = cms.InputTag( "hltSiStripClusters" ) +) +process.hltIter2IterL3FromL1MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx" ), + layerPairs = cms.vuint32( 0, 1 ), + clusterCheck = cms.InputTag( "hltIter2IterL3FromL1MuonPixelClusterCheckScoutingNoVtx" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltIter2IterL3FromL1MuonPixelLayerTripletsScoutingNoVtx" ) +) +process.hltIter2IterL3FromL1MuonPixelHitTripletsScoutingNoVtx = cms.EDProducer( "CAHitTripletEDProducer", + CAThetaCut = cms.double( 0.015 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + maxChi2 = cms.PSet( + value2 = cms.double( 6.0 ), + value1 = cms.double( 100.0 ), + pt1 = cms.double( 0.8 ), + enabled = cms.bool( True ), + pt2 = cms.double( 8.0 ) + ), + doublets = cms.InputTag( "hltIter2IterL3FromL1MuonPixelHitDoubletsScoutingNoVtx" ), + CAHardPtCut = cms.double( 0.3 ), + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.1 ), + useBendingCorrection = cms.bool( True ), + extraHitRPhitolerance = cms.double( 0.032 ) +) +process.hltIter2IterL3FromL1MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer", + SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), + forceKinematicWithRegionDirection = cms.bool( False ), + magneticField = cms.string( "ParabolicMf" ), + SeedMomentumForBOFF = cms.double( 5.0 ), + OriginTransverseErrorMultiplier = cms.double( 1.0 ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + MinOneOverPtError = cms.double( 1.0 ), + seedingHitSets = cms.InputTag( "hltIter2IterL3FromL1MuonPixelHitTripletsScoutingNoVtx" ), + propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) +) +process.hltIter2IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter2IterL3FromL1MuonPixelSeedsScoutingNoVtx" ), + maxSeedsBeforeCleaning = cms.uint32( 1000 ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + TransientInitialStateEstimatorParameters = cms.PSet( + propagatorAlongTISE = cms.string( "PropagatorWithMaterialParabolicMf" ), + numberMeasurementsForFit = cms.int32( 4 ), + propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) + ), + TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + cleanTrajectoryAfterInOut = cms.bool( False ), + useHitsSplitting = cms.bool( False ), + RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), + reverseTrajectories = cms.bool( False ), + doSeedingRegionRebuilding = cms.bool( False ), + maxNSeeds = cms.uint32( 100000 ), + TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter2IterL3FromL1MuonPSetGroupedCkfTrajectoryBuilderIT" ) ), + NavigationSchool = cms.string( "SimpleNavigationSchool" ), + TrajectoryBuilder = cms.string( "" ) +) +process.hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter2IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx" ), + SimpleMagneticField = cms.string( "ParabolicMf" ), + clusterRemovalInfo = cms.InputTag( "" ), + beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), + Fitter = cms.string( "hltESPFittingSmootherIT" ), + useHitsSplitting = cms.bool( False ), + MeasurementTracker = cms.string( "" ), + AlgorithmName = cms.string( "hltIter2" ), + alias = cms.untracked.string( "ctfWithMaterialTracks" ), + NavigationSchool = cms.string( "" ), + TrajectoryInEvent = cms.bool( False ), + TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), + GeometricInnerState = cms.bool( True ), + useSimpleMF = cms.bool( True ), + Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) +) +process.hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + beamspot = cms.InputTag( "hltOnlineBeamSpot" ), + vertices = cms.InputTag( "hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx" ), + qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), + mva = cms.PSet( + minPixelHits = cms.vint32( 0, 0, 0 ), + maxDzWrtBS = cms.vdouble( 3.40282346639E38, 24.0, 100.0 ), + dr_par = cms.PSet( + d0err = cms.vdouble( 0.003, 0.003, 3.40282346639E38 ), + dr_par2 = cms.vdouble( 3.40282346639E38, 0.3, 3.40282346639E38 ), + dr_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dr_exp = cms.vint32( 4, 4, 2147483647 ), + d0err_par = cms.vdouble( 0.001, 0.001, 3.40282346639E38 ) + ), + maxLostLayers = cms.vint32( 1, 1, 1 ), + min3DLayers = cms.vint32( 0, 0, 0 ), + dz_par = cms.PSet( + dz_par1 = cms.vdouble( 3.40282346639E38, 0.4, 3.40282346639E38 ), + dz_par2 = cms.vdouble( 3.40282346639E38, 0.35, 3.40282346639E38 ), + dz_exp = cms.vint32( 4, 4, 2147483647 ) + ), + minNVtxTrk = cms.int32( 3 ), + maxDz = cms.vdouble( 0.5, 0.2, 3.40282346639E38 ), + minNdof = cms.vdouble( 1.0E-5, 1.0E-5, 1.0E-5 ), + maxChi2 = cms.vdouble( 9999.0, 25.0, 3.40282346639E38 ), + maxChi2n = cms.vdouble( 1.2, 1.0, 0.7 ), + maxDr = cms.vdouble( 0.5, 0.03, 3.40282346639E38 ), + minLayers = cms.vint32( 3, 3, 3 ) + ), + ignoreVertices = cms.bool( False ) +) +process.hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", + minQuality = cms.string( "highPurity" ), + copyExtras = cms.untracked.bool( True ), + copyTrajectories = cms.untracked.bool( False ), + originalSource = cms.InputTag( "hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) +) +process.hltIter2IterL3FromL1MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +process.hltIterL3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonMergedScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx','hltIter2IterL3MuonMergedScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +process.hltIterL3MuonAndMuonFromL1MergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", + ShareFrac = cms.double( 0.19 ), + writeOnlyTrkQuals = cms.bool( False ), + MinPT = cms.double( 0.05 ), + allowFirstHitShare = cms.bool( True ), + copyExtras = cms.untracked.bool( True ), + Epsilon = cms.double( -0.001 ), + selectedTrackQuals = cms.VInputTag( 'hltIterL3MuonMergedScoutingNoVtx','hltIter2IterL3FromL1MuonMergedScoutingNoVtx' ), + indivShareFrac = cms.vdouble( 1.0, 1.0 ), + MaxNormalizedChisq = cms.double( 1000.0 ), + copyMVA = cms.bool( False ), + FoundHitBonus = cms.double( 5.0 ), + LostHitPenalty = cms.double( 20.0 ), + setsToMerge = cms.VPSet( + cms.PSet( pQual = cms.bool( False ), + tLists = cms.vint32( 0, 1 ) + ) + ), + MinFound = cms.int32( 3 ), + hasSelector = cms.vint32( 0, 0 ), + TrackProducers = cms.VInputTag( 'hltIterL3MuonMergedScoutingNoVtx','hltIter2IterL3FromL1MuonMergedScoutingNoVtx' ), + trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), + newQuality = cms.string( "confirmed" ) +) +process.hltL3MuonsIterL3LinksScoutingNoVtx = cms.EDProducer( "MuonLinksProducerForHLT", + pMin = cms.double( 2.5 ), + InclusiveTrackerTrackCollection = cms.InputTag( "hltIter2IterL3FromL1MuonMergedScoutingNoVtx" ), + shareHitFraction = cms.double( 0.19 ), + LinkCollection = cms.InputTag( "hltIterL3MuonsFromL2LinksCombinationScoutingNoVtx" ), + ptMin = cms.double( 2.5 ) +) +process.hltIterL3MuonsScoutingNoVtx = cms.EDProducer( "MuonIdProducer", + TrackExtractorPSet = cms.PSet( + Diff_z = cms.double( 0.2 ), + inputTrackCollection = cms.InputTag( "hltIter2IterL3FromL1MuonMergedScoutingNoVtx" ), + Chi2Ndof_Max = cms.double( 1.0E64 ), + BeamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), + DR_Veto = cms.double( 0.01 ), + Pt_Min = cms.double( -1.0 ), + DR_Max = cms.double( 1.0 ), + NHits_Min = cms.uint32( 0 ), + Chi2Prob_Min = cms.double( -1.0 ), + Diff_r = cms.double( 0.1 ), + BeamlineOption = cms.string( "BeamSpotFromEvent" ), + ComponentName = cms.string( "TrackExtractor" ) + ), + maxAbsEta = cms.double( 3.0 ), + fillGlobalTrackRefits = cms.bool( False ), + arbitrationCleanerOptions = cms.PSet( + OverlapDTheta = cms.double( 0.02 ), + Overlap = cms.bool( True ), + Clustering = cms.bool( True ), + ME1a = cms.bool( True ), + ClusterDTheta = cms.double( 0.02 ), + ClusterDPhi = cms.double( 0.6 ), + OverlapDPhi = cms.double( 0.0786 ) + ), + globalTrackQualityInputTag = cms.InputTag( "glbTrackQual" ), + fillShowerDigis = cms.bool( False ), + addExtraSoftMuons = cms.bool( False ), + debugWithTruthMatching = cms.bool( False ), + CaloExtractorPSet = cms.PSet( + DR_Veto_H = cms.double( 0.1 ), + CenterConeOnCalIntersection = cms.bool( False ), + NoiseTow_EE = cms.double( 0.15 ), + Noise_EB = cms.double( 0.025 ), + Noise_HE = cms.double( 0.2 ), + DR_Veto_E = cms.double( 0.07 ), + NoiseTow_EB = cms.double( 0.04 ), + Noise_EE = cms.double( 0.1 ), + UseRecHitsFlag = cms.bool( False ), + DR_Max = cms.double( 1.0 ), + DepositLabel = cms.untracked.string( "Cal" ), + Noise_HO = cms.double( 0.2 ), + DR_Veto_HO = cms.double( 0.1 ), + Threshold_H = cms.double( 0.5 ), + PrintTimeReport = cms.untracked.bool( False ), + Threshold_E = cms.double( 0.2 ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "CaloExtractorByAssociator" ), + Threshold_HO = cms.double( 0.5 ), + DepositInstanceLabels = cms.vstring( 'ecal', + 'hcal', + 'ho' ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 1.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( "Notused" ), + CaloTowerCollectionLabel = cms.InputTag( "Notused" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "Notused" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 1.0 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( "Notused" ), + dRHcal = cms.double( 1.0 ), + dRHcalPreselection = cms.double( 1.0 ), + HORecHitCollectionLabel = cms.InputTag( "Notused" ) + ), + Noise_HB = cms.double( 0.2 ) + ), + runArbitrationCleaner = cms.bool( False ), + fillEnergy = cms.bool( False ), + TrackerKinkFinderParameters = cms.PSet( + usePosition = cms.bool( False ), + diagonalOnly = cms.bool( False ) + ), + TimingFillerParameters = cms.PSet( + DTTimingParameters = cms.PSet( + HitError = cms.double( 6.0 ), + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) + ), + debug = cms.bool( False ), + DoWireCorr = cms.bool( False ), + RequireBothProjections = cms.bool( False ), + DTTimeOffset = cms.double( 2.7 ), + PruneCut = cms.double( 10000.0 ), + DTsegments = cms.InputTag( "hltDt4DSegments" ), + UseSegmentT0 = cms.bool( False ), + HitsMin = cms.int32( 5 ), + DropTheta = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ) + ), + UseCSC = cms.bool( True ), + CSCTimingParameters = cms.PSet( + MatchParameters = cms.PSet( + TightMatchDT = cms.bool( False ), + DTradius = cms.double( 0.01 ), + TightMatchCSC = cms.bool( True ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + DTsegments = cms.InputTag( "hltDt4DSegments" ) + ), + debug = cms.bool( False ), + CSCWireTimeOffset = cms.double( 0.0 ), + CSCStripError = cms.double( 7.0 ), + CSCTimeOffset = cms.double( 0.0 ), + CSCWireError = cms.double( 8.6 ), + PruneCut = cms.double( 100.0 ), + CSCsegments = cms.InputTag( "hltCscSegments" ), + UseStripTime = cms.bool( True ), + CSCStripTimeOffset = cms.double( 0.0 ), + UseWireTime = cms.bool( True ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( True ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ) + ), + ErrorDT = cms.double( 6.0 ), + EcalEnergyCut = cms.double( 0.4 ), + UseECAL = cms.bool( True ), + ErrorEB = cms.double( 2.085 ), + UseDT = cms.bool( True ), + ErrorEE = cms.double( 6.95 ), + ErrorCSC = cms.double( 7.4 ) + ), + inputCollectionTypes = cms.vstring( 'inner tracks', + 'links' ), + arbitrateTrackerMuons = cms.bool( True ), + minCaloCompatibility = cms.double( 0.6 ), + ecalDepositName = cms.string( "ecal" ), + minP = cms.double( 0.0 ), + fillIsolation = cms.bool( False ), + jetDepositName = cms.string( "jets" ), + hoDepositName = cms.string( "ho" ), + writeIsoDeposits = cms.bool( False ), + maxAbsPullX = cms.double( 4.0 ), + maxAbsPullY = cms.double( 9999.0 ), + minPt = cms.double( 8.0 ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( True ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 9999.0 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( "Notused" ), + CaloTowerCollectionLabel = cms.InputTag( "Notused" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "Notused" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.05 ), + useCalo = cms.bool( False ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( "Notused" ), + dRHcal = cms.double( 9999.0 ), + dRHcalPreselection = cms.double( 0.2 ), + HORecHitCollectionLabel = cms.InputTag( "Notused" ) + ), + storeCrossedHcalRecHits = cms.bool( False ), + JetExtractorPSet = cms.PSet( + JetCollectionLabel = cms.InputTag( "Notused" ), + DR_Veto = cms.double( 0.1 ), + DR_Max = cms.double( 1.0 ), + ExcludeMuonVeto = cms.bool( True ), + PrintTimeReport = cms.untracked.bool( False ), + PropagatorName = cms.string( "hltESPFastSteppingHelixPropagatorAny" ), + ComponentName = cms.string( "JetExtractor" ), + ServiceParameters = cms.PSet( + RPCLayers = cms.bool( False ), + UseMuonNavigation = cms.untracked.bool( False ), + Propagators = cms.untracked.vstring( 'hltESPFastSteppingHelixPropagatorAny' ) + ), + TrackAssociatorParameters = cms.PSet( + useMuon = cms.bool( False ), + truthMatch = cms.bool( False ), + usePreshower = cms.bool( False ), + dRPreshowerPreselection = cms.double( 0.2 ), + muonMaxDistanceSigmaY = cms.double( 0.0 ), + useEcal = cms.bool( False ), + muonMaxDistanceSigmaX = cms.double( 0.0 ), + dRMuon = cms.double( 9999.0 ), + dREcal = cms.double( 0.5 ), + CSCSegmentCollectionLabel = cms.InputTag( "hltCscSegments" ), + DTRecSegment4DCollectionLabel = cms.InputTag( "hltDt4DSegments" ), + EBRecHitCollectionLabel = cms.InputTag( "Notused" ), + CaloTowerCollectionLabel = cms.InputTag( "Notused" ), + propagateAllDirections = cms.bool( True ), + muonMaxDistanceY = cms.double( 5.0 ), + useHO = cms.bool( False ), + muonMaxDistanceX = cms.double( 5.0 ), + trajectoryUncertaintyTolerance = cms.double( -1.0 ), + useHcal = cms.bool( False ), + HBHERecHitCollectionLabel = cms.InputTag( "Notused" ), + accountForTrajectoryChangeCalo = cms.bool( False ), + dREcalPreselection = cms.double( 0.5 ), + useCalo = cms.bool( True ), + dRMuonPreselection = cms.double( 0.2 ), + EERecHitCollectionLabel = cms.InputTag( "Notused" ), + dRHcal = cms.double( 0.5 ), + dRHcalPreselection = cms.double( 0.5 ), + HORecHitCollectionLabel = cms.InputTag( "Notused" ) + ), + Threshold = cms.double( 5.0 ) + ), + fillGlobalTrackQuality = cms.bool( False ), + minPCaloMuon = cms.double( 1.0E9 ), + maxAbsDy = cms.double( 9999.0 ), + fillCaloCompatibility = cms.bool( False ), + fillMatching = cms.bool( True ), + MuonCaloCompatibility = cms.PSet( + delta_eta = cms.double( 0.02 ), + delta_phi = cms.double( 0.02 ), + allSiPMHO = cms.bool( False ), + MuonTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_muons_lowPt_3_1_norm.root" ), + PionTemplateFileName = cms.FileInPath( "RecoMuon/MuonIdentification/data/MuID_templates_pions_lowPt_3_1_norm.root" ) + ), + fillTrackerKink = cms.bool( False ), + ShowerDigiFillerParameters = cms.PSet( + cscDigiCollectionLabel = cms.InputTag( 'muonCSCDigis','MuonCSCStripDigi' ), + dtDigiCollectionLabel = cms.InputTag( "muonDTDigis" ), + digiMaxDistanceX = cms.double( 25.0 ) + ), + hcalDepositName = cms.string( "hcal" ), + sigmaThresholdToFillCandidateP4WithGlobalFit = cms.double( 2.0 ), + inputCollectionLabels = cms.VInputTag( 'hltIter2IterL3FromL1MuonMergedScoutingNoVtx','hltL3MuonsIterL3LinksScoutingNoVtx' ), + trackDepositName = cms.string( "tracker" ), + maxAbsDx = cms.double( 3.0 ), + ptThresholdToFillCandidateP4WithGlobalFit = cms.double( 200.0 ), + minNumberOfMatches = cms.int32( 1 ) +) +process.hltIterL3MuonCandidatesScoutingNoVtx = cms.EDProducer( "L3MuonCandidateProducerFromMuons", + InputObjects = cms.InputTag( "hltIterL3MuonsScoutingNoVtx" ) +) +process.hltDisplacedmumuVtxNoMatchingProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", + Src = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), + PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtx" ), + MinPt = cms.double( 0.0 ), + ChargeOpt = cms.int32( 0 ), + MaxEta = cms.double( 2.5 ), + MaxInvMass = cms.double( 99999.0 ), + MinPtPair = cms.double( 0.0 ), + matchToPrevious = cms.bool( False ), + MinInvMass = cms.double( 0.0 ) +) +process.hltRecHitInRegionForMuonsMFnoVtx = cms.EDProducer( "MuonHLTRechitInRegionsProducer", + l1LowerThr = cms.double( 0.0 ), + doIsolated = cms.bool( True ), + useUncalib = cms.bool( False ), + regionEtaMargin = cms.double( 0.4 ), + ecalhitLabels = cms.VInputTag( 'hltEcalRecHit:EcalRecHitsEB','hltEcalRecHit:EcalRecHitsEE' ), + regionPhiMargin = cms.double( 0.4 ), + l1TagNonIsolated = cms.InputTag( "NotUsed" ), + l1UpperThr = cms.double( 999.0 ), + l1LowerThrIgnoreIsolation = cms.double( 100.0 ), + productLabels = cms.vstring( 'EcalRegionalRecHitsEB', + 'EcalRegionalRecHitsEE' ), + l1TagIsolated = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) +) +process.hltRecHitInRegionForMuonsESScoutingNoVtx = cms.EDProducer( "MuonHLTRechitInRegionsProducer", + l1LowerThr = cms.double( 0.0 ), + doIsolated = cms.bool( True ), + useUncalib = cms.bool( False ), + regionEtaMargin = cms.double( 0.4 ), + ecalhitLabels = cms.VInputTag( 'hltEcalPreshowerRecHit:EcalRecHitsES' ), + regionPhiMargin = cms.double( 0.4 ), + l1TagNonIsolated = cms.InputTag( "NotUsed" ), + l1UpperThr = cms.double( 999.0 ), + l1LowerThrIgnoreIsolation = cms.double( 100.0 ), + productLabels = cms.vstring( 'EcalRegionalRecHitsES' ), + l1TagIsolated = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) +) +process.hltParticleFlowRecHitECALForMuonsMFScoutingNoVtx = cms.EDProducer( "PFRecHitProducer", + producers = cms.VPSet( + cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsMFnoVtx','EcalRegionalRecHitsEB' ), + srFlags = cms.InputTag( "" ), + name = cms.string( "PFEBRecHitCreator" ), + qualityTests = cms.VPSet( + cms.PSet( name = cms.string( "PFRecHitQTestDBThreshold" ), + applySelectionsToAllCrystals = cms.bool( True ) + ), + cms.PSet( topologicalCleaning = cms.bool( True ), + skipTTRecoveredHits = cms.bool( True ), + cleaningThreshold = cms.double( 2.0 ), + name = cms.string( "PFRecHitQTestECAL" ), + timingCleaning = cms.bool( True ) + ) + ) + ), + cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsMFnoVtx','EcalRegionalRecHitsEE' ), + srFlags = cms.InputTag( "" ), + name = cms.string( "PFEERecHitCreator" ), + qualityTests = cms.VPSet( + cms.PSet( name = cms.string( "PFRecHitQTestDBThreshold" ), + applySelectionsToAllCrystals = cms.bool( True ) + ), + cms.PSet( topologicalCleaning = cms.bool( True ), + skipTTRecoveredHits = cms.bool( True ), + cleaningThreshold = cms.double( 2.0 ), + name = cms.string( "PFRecHitQTestECAL" ), + timingCleaning = cms.bool( True ) + ) + ) + ) + ), + navigator = cms.PSet( + barrel = cms.PSet( ), + endcap = cms.PSet( ), + name = cms.string( "PFRecHitECALNavigator" ) + ) +) +process.hltParticleFlowRecHitPSForMuonsScoutingNoVtx = cms.EDProducer( "PFRecHitProducer", + producers = cms.VPSet( + cms.PSet( src = cms.InputTag( 'hltRecHitInRegionForMuonsESScoutingNoVtx','EcalRegionalRecHitsES' ), + name = cms.string( "PFPSRecHitCreator" ), + qualityTests = cms.VPSet( + cms.PSet( threshold = cms.double( 7.0E-6 ), + name = cms.string( "PFRecHitQTestThreshold" ) + ) + ) + ) + ), + navigator = cms.PSet( name = cms.string( "PFRecHitPreshowerNavigator" ) ) +) +process.hltParticleFlowClusterECALUncorrectedForMuonsMFScoutingNoVtx = cms.EDProducer( "PFClusterProducer", + pfClusterBuilder = cms.PSet( + minFracTot = cms.double( 1.0E-20 ), + stoppingTolerance = cms.double( 1.0E-8 ), + positionCalc = cms.PSet( + minAllowedNormalization = cms.double( 1.0E-9 ), + posCalcNCrystals = cms.int32( 9 ), + algoName = cms.string( "Basic2DGenericPFlowPositionCalc" ), + logWeightDenominator = cms.double( 0.08 ), + minFractionInCalc = cms.double( 1.0E-9 ), + timeResolutionCalcBarrel = cms.PSet( + corrTermLowE = cms.double( 0.0510871 ), + threshLowE = cms.double( 0.5 ), + noiseTerm = cms.double( 1.10889 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 1.31883 ), + threshHighE = cms.double( 5.0 ), + constantTerm = cms.double( 0.428192 ) + ), + timeResolutionCalcEndcap = cms.PSet( + corrTermLowE = cms.double( 0.0 ), + threshLowE = cms.double( 1.0 ), + noiseTerm = cms.double( 5.72489999999 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 6.92683000001 ), + threshHighE = cms.double( 10.0 ), + constantTerm = cms.double( 0.0 ) + ) + ), + maxIterations = cms.uint32( 50 ), + positionCalcForConvergence = cms.PSet( + minAllowedNormalization = cms.double( 0.0 ), + T0_ES = cms.double( 1.2 ), + algoName = cms.string( "ECAL2DPositionCalcWithDepthCorr" ), + T0_EE = cms.double( 3.1 ), + T0_EB = cms.double( 7.4 ), + X0 = cms.double( 0.89 ), + minFractionInCalc = cms.double( 0.0 ), + W0 = cms.double( 4.2 ) + ), + allCellsPositionCalc = cms.PSet( + minAllowedNormalization = cms.double( 1.0E-9 ), + posCalcNCrystals = cms.int32( -1 ), + algoName = cms.string( "Basic2DGenericPFlowPositionCalc" ), + logWeightDenominator = cms.double( 0.08 ), + minFractionInCalc = cms.double( 1.0E-9 ), + timeResolutionCalcBarrel = cms.PSet( + corrTermLowE = cms.double( 0.0510871 ), + threshLowE = cms.double( 0.5 ), + noiseTerm = cms.double( 1.10889 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 1.31883 ), + threshHighE = cms.double( 5.0 ), + constantTerm = cms.double( 0.428192 ) + ), + timeResolutionCalcEndcap = cms.PSet( + corrTermLowE = cms.double( 0.0 ), + threshLowE = cms.double( 1.0 ), + noiseTerm = cms.double( 5.72489999999 ), + constantTermLowE = cms.double( 0.0 ), + noiseTermLowE = cms.double( 6.92683000001 ), + threshHighE = cms.double( 10.0 ), + constantTerm = cms.double( 0.0 ) + ) + ), + algoName = cms.string( "Basic2DGenericPFlowClusterizer" ), + recHitEnergyNorms = cms.VPSet( + cms.PSet( recHitEnergyNorm = cms.double( 0.08 ), + detector = cms.string( "ECAL_BARREL" ) + ), + cms.PSet( recHitEnergyNorm = cms.double( 0.3 ), + detector = cms.string( "ECAL_ENDCAP" ) + ) + ), + showerSigma = cms.double( 1.5 ), + minFractionToKeep = cms.double( 1.0E-7 ), + excludeOtherSeeds = cms.bool( True ) + ), + positionReCalc = cms.PSet( + minAllowedNormalization = cms.double( 0.0 ), + T0_ES = cms.double( 1.2 ), + algoName = cms.string( "ECAL2DPositionCalcWithDepthCorr" ), + T0_EE = cms.double( 3.1 ), + T0_EB = cms.double( 7.4 ), + X0 = cms.double( 0.89 ), + minFractionInCalc = cms.double( 0.0 ), + W0 = cms.double( 4.2 ) + ), + initialClusteringStep = cms.PSet( + thresholdsByDetector = cms.VPSet( + cms.PSet( gatheringThreshold = cms.double( 0.08 ), + gatheringThresholdPt = cms.double( 0.0 ), + detector = cms.string( "ECAL_BARREL" ) + ), + cms.PSet( gatheringThreshold = cms.double( 0.3 ), + gatheringThresholdPt = cms.double( 0.0 ), + detector = cms.string( "ECAL_ENDCAP" ) + ) + ), + algoName = cms.string( "Basic2DGenericTopoClusterizer" ), + useCornerCells = cms.bool( True ) + ), + seedCleaners = cms.VPSet( + ), + energyCorrector = cms.PSet( ), recHitCleaners = cms.VPSet( ), seedFinder = cms.PSet( @@ -77071,9 +79103,9 @@ algoName = cms.string( "LocalMaximumSeedFinder" ), nNeighbours = cms.int32( 8 ) ), - recHitsSource = cms.InputTag( "hltParticleFlowRecHitECALForMuonsMFNoVtx" ) + recHitsSource = cms.InputTag( "hltParticleFlowRecHitECALForMuonsMFScoutingNoVtx" ) ) -process.hltParticleFlowClusterPSForMuonsNoVtx = cms.EDProducer( "PFClusterProducer", +process.hltParticleFlowClusterPSForMuonsScoutingNoVtx = cms.EDProducer( "PFClusterProducer", pfClusterBuilder = cms.PSet( minFracTot = cms.double( 1.0E-20 ), stoppingTolerance = cms.double( 1.0E-8 ), @@ -77132,21 +79164,21 @@ algoName = cms.string( "LocalMaximumSeedFinder" ), nNeighbours = cms.int32( 4 ) ), - recHitsSource = cms.InputTag( "hltParticleFlowRecHitPSForMuonsNoVtx" ) + recHitsSource = cms.InputTag( "hltParticleFlowRecHitPSForMuonsScoutingNoVtx" ) ) -process.hltParticleFlowClusterECALForMuonsMFNoVtx = cms.EDProducer( "CorrectedECALPFClusterProducer", - inputPS = cms.InputTag( "hltParticleFlowClusterPSForMuonsNoVtx" ), +process.hltParticleFlowClusterECALForMuonsMFScoutingNoVtx = cms.EDProducer( "CorrectedECALPFClusterProducer", + inputPS = cms.InputTag( "hltParticleFlowClusterPSForMuonsScoutingNoVtx" ), minimumPSEnergy = cms.double( 0.0 ), energyCorrector = cms.PSet( applyCrackCorrections = cms.bool( False ) ), - inputECAL = cms.InputTag( "hltParticleFlowClusterECALUncorrectedForMuonsMFNoVtx" ) + inputECAL = cms.InputTag( "hltParticleFlowClusterECALUncorrectedForMuonsMFScoutingNoVtx" ) ) -process.hltMuonEcalMFPFClusterIsoForMuonsNoVtx = cms.EDProducer( "MuonHLTEcalPFClusterIsolationProducer", +process.hltMuonEcalMFPFClusterIsoForMuonsScoutingNoVtx = cms.EDProducer( "MuonHLTEcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.35, 0.193 ), doRhoCorrection = cms.bool( True ), etaStripBarrel = cms.double( 0.0 ), energyEndcap = cms.double( 0.0 ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetECALMFForMuons" ), - pfClusterProducer = cms.InputTag( "hltParticleFlowClusterECALForMuonsMFNoVtx" ), + pfClusterProducer = cms.InputTag( "hltParticleFlowClusterECALForMuonsMFScoutingNoVtx" ), etaStripEndcap = cms.double( 0.0 ), drVetoBarrel = cms.double( 0.05 ), drMax = cms.double( 0.3 ), @@ -77155,17 +79187,9 @@ drVetoEndcap = cms.double( 0.05 ), rhoMax = cms.double( 9.9999999E7 ), rhoScale = cms.double( 1.0 ), - recoCandidateProducer = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ) -) -process.hltRegionalTowerForMuonsNoVtx = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - EMin = cms.double( 0.0 ), - EtMin = cms.double( 0.0 ), - L1IsoCand = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForAll" ) + recoCandidateProducer = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) ) -process.hltMuonHcalPFClusterIsoForMuonsNoVtx = cms.EDProducer( "MuonHLTHcalPFClusterIsolationProducer", +process.hltMuonHcalPFClusterIsoForMuonsScoutingNoVtx = cms.EDProducer( "MuonHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.11, 0.163 ), useHF = cms.bool( False ), useEt = cms.bool( True ), @@ -77184,14 +79208,14 @@ rhoMax = cms.double( 9.9999999E7 ), pfClusterProducerHFEM = cms.InputTag( "" ), rhoScale = cms.double( 1.0 ), - recoCandidateProducer = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ) + recoCandidateProducer = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ) ) -process.hltL3MuonVertexNoVtx = cms.EDProducer( "VertexFromTrackProducer", +process.hltL3MuonVertexScoutingNoVtx = cms.EDProducer( "VertexFromTrackProducer", verbose = cms.untracked.bool( False ), useTriggerFilterElectrons = cms.bool( False ), beamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), isRecoCandidate = cms.bool( True ), - trackLabel = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + trackLabel = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), useTriggerFilterMuons = cms.bool( False ), useBeamSpot = cms.bool( True ), vertexLabel = cms.InputTag( "notUsed" ), @@ -77199,11 +79223,11 @@ triggerFilterMuonsSrc = cms.InputTag( "notUsed" ), useVertex = cms.bool( False ) ) -process.hltPixelTracksTrackingRegionsL3MuonNoVtx = cms.EDProducer( "GlobalTrackingRegionWithVerticesEDProducer", +process.hltPixelTracksTrackingRegionsL3MuonScoutingNoVtx = cms.EDProducer( "GlobalTrackingRegionWithVerticesEDProducer", RegionPSet = cms.PSet( useFixedError = cms.bool( True ), nSigmaZ = cms.double( 4.0 ), - VertexCollection = cms.InputTag( "hltL3MuonVertexNoVtx" ), + VertexCollection = cms.InputTag( "hltL3MuonVertexScoutingNoVtx" ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), useFoundVertices = cms.bool( True ), fixedError = cms.double( 0.5 ), @@ -77215,8 +79239,8 @@ useMultipleScattering = cms.bool( False ) ) ) -process.hltPixelTracksHitDoubletsL3MuonNoVtx = cms.EDProducer( "HitPairEDProducer", - trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsL3MuonNoVtx" ), +process.hltPixelTracksHitDoubletsL3MuonScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsL3MuonScoutingNoVtx" ), layerPairs = cms.vuint32( 0, 1, 2 ), clusterCheck = cms.InputTag( "" ), produceSeedingHitSets = cms.bool( False ), @@ -77226,7 +79250,7 @@ maxElement = cms.uint32( 0 ), seedingLayers = cms.InputTag( "hltPixelLayerQuadruplets" ) ) -process.hltPixelTracksHitQuadrupletsL3MuonNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", +process.hltPixelTracksHitQuadrupletsL3MuonScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", CAHardPtCut = cms.double( 0.0 ), CAPhiCut_byTriplets = cms.VPSet( cms.PSet( seedingLayers = cms.string( "" ), @@ -77234,7 +79258,7 @@ ) ), extraHitRPhitolerance = cms.double( 0.032 ), - doublets = cms.InputTag( "hltPixelTracksHitDoubletsL3MuonNoVtx" ), + doublets = cms.InputTag( "hltPixelTracksHitDoubletsL3MuonScoutingNoVtx" ), fitFastCircle = cms.bool( True ), maxChi2 = cms.PSet( value2 = cms.double( 50.0 ), @@ -77258,30 +79282,30 @@ useBendingCorrection = cms.bool( True ), fitFastCircleChi2Cut = cms.bool( True ) ) -process.hltPixelTracksL3MuonNoVtx = cms.EDProducer( "PixelTrackProducer", +process.hltPixelTracksL3MuonScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), passLabel = cms.string( "" ), Fitter = cms.InputTag( "hltPixelTracksL3MuonFitter" ), Filter = cms.InputTag( "hltPixelTracksL3MuonFilter" ), - SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsL3MuonNoVtx" ) + SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsL3MuonScoutingNoVtx" ) ) -process.hltPixelVerticesL3MuonNoVtx = cms.EDProducer( "PixelVertexProducer", +process.hltPixelVerticesL3MuonScoutingNoVtx = cms.EDProducer( "PixelVertexProducer", WtAverage = cms.bool( True ), Method2 = cms.bool( True ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), PVcomparer = cms.PSet( refToPSet_ = cms.string( "HLTPSetPvClusterComparer" ) ), Verbosity = cms.int32( 0 ), UseError = cms.bool( True ), - TrackCollection = cms.InputTag( "hltPixelTracksL3MuonNoVtx" ), + TrackCollection = cms.InputTag( "hltPixelTracksL3MuonScoutingNoVtx" ), PtMin = cms.double( 1.0 ), NTrkMin = cms.int32( 2 ), ZOffset = cms.double( 5.0 ), Finder = cms.string( "DivisiveVertexFinder" ), ZSeparation = cms.double( 0.05 ) ) -process.hltPixelTracksTrackingRegionsForSeedsL3MuonNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", +process.hltPixelTracksTrackingRegionsForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", RegionPSet = cms.PSet( - vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), zErrorVetex = cms.double( 0.2 ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), zErrorBeamSpot = cms.double( 24.2 ), @@ -77291,7 +79315,7 @@ nSigmaZBeamSpot = cms.double( 4.0 ), ptMin = cms.double( 0.9 ), mode = cms.string( "VerticesFixed" ), - input = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + input = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), searchOpt = cms.bool( False ), whereToUseMeasurementTracker = cms.string( "Never" ), originRadius = cms.double( 0.1 ), @@ -77301,8 +79325,8 @@ deltaPhi = cms.double( 0.3 ) ) ) -process.hltPixelTracksHitDoubletsForSeedsL3MuonNoVtx = cms.EDProducer( "HitPairEDProducer", - trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsForSeedsL3MuonNoVtx" ), +process.hltPixelTracksHitDoubletsForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsForSeedsL3MuonScoutingNoVtx" ), layerPairs = cms.vuint32( 0, 1, 2 ), clusterCheck = cms.InputTag( "" ), produceSeedingHitSets = cms.bool( False ), @@ -77312,7 +79336,7 @@ maxElement = cms.uint32( 0 ), seedingLayers = cms.InputTag( "hltPixelLayerQuadruplets" ) ) -process.hltPixelTracksHitQuadrupletsForSeedsL3MuonNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", +process.hltPixelTracksHitQuadrupletsForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", CAHardPtCut = cms.double( 0.0 ), CAPhiCut_byTriplets = cms.VPSet( cms.PSet( seedingLayers = cms.string( "" ), @@ -77320,7 +79344,7 @@ ) ), extraHitRPhitolerance = cms.double( 0.032 ), - doublets = cms.InputTag( "hltPixelTracksHitDoubletsForSeedsL3MuonNoVtx" ), + doublets = cms.InputTag( "hltPixelTracksHitDoubletsForSeedsL3MuonScoutingNoVtx" ), fitFastCircle = cms.bool( True ), maxChi2 = cms.PSet( value2 = cms.double( 50.0 ), @@ -77344,27 +79368,27 @@ useBendingCorrection = cms.bool( True ), fitFastCircleChi2Cut = cms.bool( True ) ) -process.hltPixelTracksForSeedsL3MuonNoVtx = cms.EDProducer( "PixelTrackProducer", +process.hltPixelTracksForSeedsL3MuonScoutingNoVtx = cms.EDProducer( "PixelTrackProducer", Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), passLabel = cms.string( "" ), Fitter = cms.InputTag( "hltPixelTracksForSeedsL3MuonFitter" ), Filter = cms.InputTag( "hltPixelTracksForSeedsL3MuonFilter" ), - SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsForSeedsL3MuonNoVtx" ) + SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsForSeedsL3MuonScoutingNoVtx" ) ) -process.hltIter0L3MuonPixelSeedsFromPixelTracksNoVtx = cms.EDProducer( "SeedGeneratorFromProtoTracksEDProducer", +process.hltIter0L3MuonPixelSeedsFromPixelTracksScoutingNoVtx = cms.EDProducer( "SeedGeneratorFromProtoTracksEDProducer", includeFourthHit = cms.bool( False ), useEventsWithNoVertex = cms.bool( True ), originHalfLength = cms.double( 0.2 ), useProtoTrackKinematics = cms.bool( False ), usePV = cms.bool( False ), SeedCreatorPSet = cms.PSet( refToPSet_ = cms.string( "HLTSeedFromProtoTracks" ) ), - InputVertexCollection = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + InputVertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), - InputCollection = cms.InputTag( "hltPixelTracksForSeedsL3MuonNoVtx" ), + InputCollection = cms.InputTag( "hltPixelTracksForSeedsL3MuonScoutingNoVtx" ), originRadius = cms.double( 0.1 ) ) -process.hltIter0L3MuonCkfTrackCandidatesNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", - src = cms.InputTag( "hltIter0L3MuonPixelSeedsFromPixelTracksNoVtx" ), +process.hltIter0L3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter0L3MuonPixelSeedsFromPixelTracksScoutingNoVtx" ), maxSeedsBeforeCleaning = cms.uint32( 1000 ), SimpleMagneticField = cms.string( "ParabolicMf" ), TransientInitialStateEstimatorParameters = cms.PSet( @@ -77384,8 +79408,8 @@ NavigationSchool = cms.string( "SimpleNavigationSchool" ), TrajectoryBuilder = cms.string( "" ) ) -process.hltIter0L3MuonCtfWithMaterialTracksNoVtx = cms.EDProducer( "TrackProducer", - src = cms.InputTag( "hltIter0L3MuonCkfTrackCandidatesNoVtx" ), +process.hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter0L3MuonCkfTrackCandidatesScoutingNoVtx" ), SimpleMagneticField = cms.string( "ParabolicMf" ), clusterRemovalInfo = cms.InputTag( "" ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), @@ -77402,10 +79426,10 @@ useSimpleMF = cms.bool( True ), Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) ) -process.hltIter0L3MuonTrackCutClassifierNoVtx = cms.EDProducer( "TrackCutClassifier", - src = cms.InputTag( "hltIter0L3MuonCtfWithMaterialTracksNoVtx" ), +process.hltIter0L3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx" ), beamspot = cms.InputTag( "hltOnlineBeamSpot" ), - vertices = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), mva = cms.PSet( minPixelHits = cms.vint32( 0, 3, 4 ), @@ -77434,31 +79458,31 @@ ), ignoreVertices = cms.bool( False ) ) -process.hltIter0L3MuonTrackSelectionHighPurityNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", +process.hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", minQuality = cms.string( "highPurity" ), copyExtras = cms.untracked.bool( True ), copyTrajectories = cms.untracked.bool( False ), - originalSource = cms.InputTag( "hltIter0L3MuonCtfWithMaterialTracksNoVtx" ), - originalQualVals = cms.InputTag( 'hltIter0L3MuonTrackCutClassifierNoVtx','QualityMasks' ), - originalMVAVals = cms.InputTag( 'hltIter0L3MuonTrackCutClassifierNoVtx','MVAValues' ) + originalSource = cms.InputTag( "hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter0L3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter0L3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) ) -process.hltIter1L3MuonClustersRefRemovalNoVtx = cms.EDProducer( "TrackClusterRemover", +process.hltIter1L3MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", trackClassifier = cms.InputTag( '','QualityMasks' ), minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), maxChi2 = cms.double( 9.0 ), - trajectories = cms.InputTag( "hltIter0L3MuonTrackSelectionHighPurityNoVtx" ), + trajectories = cms.InputTag( "hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx" ), oldClusterRemovalInfo = cms.InputTag( "" ), stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), overrideTrkQuals = cms.InputTag( "" ), pixelClusters = cms.InputTag( "hltSiPixelClusters" ), TrackQuality = cms.string( "highPurity" ) ) -process.hltIter1L3MuonMaskedMeasurementTrackerEventNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", - clustersToSkip = cms.InputTag( "hltIter1L3MuonClustersRefRemovalNoVtx" ), +process.hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), OnDemand = cms.bool( False ), src = cms.InputTag( "hltSiStripClusters" ) ) -process.hltIter1L3MuonPixelLayerQuadrupletsNoVtx = cms.EDProducer( "SeedingLayersEDProducer", +process.hltIter1L3MuonPixelLayerQuadrupletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", layerList = cms.vstring( 'BPix1+BPix2+BPix3+BPix4', 'BPix1+BPix2+BPix3+FPix1_pos', 'BPix1+BPix2+BPix3+FPix1_neg', @@ -77472,7 +79496,7 @@ FPix = cms.PSet( hitErrorRPhi = cms.double( 0.0051 ), TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), - skipClusters = cms.InputTag( "hltIter1L3MuonClustersRefRemovalNoVtx" ), + skipClusters = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), useErrorsFromParam = cms.bool( True ), hitErrorRZ = cms.double( 0.0036 ), HitProducer = cms.string( "hltSiPixelRecHits" ) @@ -77484,16 +79508,16 @@ BPix = cms.PSet( hitErrorRPhi = cms.double( 0.0027 ), TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), - skipClusters = cms.InputTag( "hltIter1L3MuonClustersRefRemovalNoVtx" ), + skipClusters = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), useErrorsFromParam = cms.bool( True ), hitErrorRZ = cms.double( 0.006 ), HitProducer = cms.string( "hltSiPixelRecHits" ) ), TIB = cms.PSet( ) ) -process.hltIter1L3MuonPixelTrackingRegionsNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", +process.hltIter1L3MuonPixelTrackingRegionsScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", RegionPSet = cms.PSet( - vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), zErrorVetex = cms.double( 0.1 ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), zErrorBeamSpot = cms.double( 24.2 ), @@ -77503,18 +79527,18 @@ nSigmaZBeamSpot = cms.double( 4.0 ), ptMin = cms.double( 0.3 ), mode = cms.string( "VerticesFixed" ), - input = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + input = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), searchOpt = cms.bool( False ), whereToUseMeasurementTracker = cms.string( "ForSiStrips" ), originRadius = cms.double( 0.05 ), - measurementTrackerName = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventNoVtx" ), + measurementTrackerName = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), precise = cms.bool( True ), deltaEta = cms.double( 0.3 ), deltaPhi = cms.double( 0.3 ) ) ) -process.hltIter1L3MuonPixelHitDoubletsNoVtx = cms.EDProducer( "HitPairEDProducer", - trackingRegions = cms.InputTag( "hltIter1L3MuonPixelTrackingRegionsNoVtx" ), +process.hltIter1L3MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIter1L3MuonPixelTrackingRegionsScoutingNoVtx" ), layerPairs = cms.vuint32( 0, 1, 2 ), clusterCheck = cms.InputTag( "hltIter1L3MuonPixelClusterCheck" ), produceSeedingHitSets = cms.bool( False ), @@ -77522,9 +79546,9 @@ trackingRegionsSeedingLayers = cms.InputTag( "" ), maxElementTotal = cms.uint32( 50000000 ), maxElement = cms.uint32( 0 ), - seedingLayers = cms.InputTag( "hltIter1L3MuonPixelLayerQuadrupletsNoVtx" ) + seedingLayers = cms.InputTag( "hltIter1L3MuonPixelLayerQuadrupletsScoutingNoVtx" ) ) -process.hltIter1L3MuonPixelHitQuadrupletsNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", +process.hltIter1L3MuonPixelHitQuadrupletsScoutingNoVtx = cms.EDProducer( "CAHitQuadrupletEDProducer", CAHardPtCut = cms.double( 0.0 ), CAPhiCut_byTriplets = cms.VPSet( cms.PSet( seedingLayers = cms.string( "" ), @@ -77532,7 +79556,7 @@ ) ), extraHitRPhitolerance = cms.double( 0.032 ), - doublets = cms.InputTag( "hltIter1L3MuonPixelHitDoubletsNoVtx" ), + doublets = cms.InputTag( "hltIter1L3MuonPixelHitDoubletsScoutingNoVtx" ), fitFastCircle = cms.bool( True ), maxChi2 = cms.PSet( value2 = cms.double( 150.0 ), @@ -77556,7 +79580,7 @@ useBendingCorrection = cms.bool( True ), fitFastCircleChi2Cut = cms.bool( True ) ) -process.hltIter1L3MuonPixelSeedsNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer", +process.hltIter1L3MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer", SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), forceKinematicWithRegionDirection = cms.bool( False ), magneticField = cms.string( "ParabolicMf" ), @@ -77564,11 +79588,11 @@ OriginTransverseErrorMultiplier = cms.double( 1.0 ), TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), MinOneOverPtError = cms.double( 1.0 ), - seedingHitSets = cms.InputTag( "hltIter1L3MuonPixelHitQuadrupletsNoVtx" ), + seedingHitSets = cms.InputTag( "hltIter1L3MuonPixelHitQuadrupletsScoutingNoVtx" ), propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) ) -process.hltIter1L3MuonCkfTrackCandidatesNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", - src = cms.InputTag( "hltIter1L3MuonPixelSeedsNoVtx" ), +process.hltIter1L3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter1L3MuonPixelSeedsScoutingNoVtx" ), maxSeedsBeforeCleaning = cms.uint32( 1000 ), SimpleMagneticField = cms.string( "ParabolicMf" ), TransientInitialStateEstimatorParameters = cms.PSet( @@ -77577,7 +79601,7 @@ propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) ), TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), - MeasurementTrackerEvent = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventNoVtx" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), cleanTrajectoryAfterInOut = cms.bool( False ), useHitsSplitting = cms.bool( False ), RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), @@ -77588,12 +79612,12 @@ NavigationSchool = cms.string( "SimpleNavigationSchool" ), TrajectoryBuilder = cms.string( "" ) ) -process.hltIter1L3MuonCtfWithMaterialTracksNoVtx = cms.EDProducer( "TrackProducer", - src = cms.InputTag( "hltIter1L3MuonCkfTrackCandidatesNoVtx" ), +process.hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter1L3MuonCkfTrackCandidatesScoutingNoVtx" ), SimpleMagneticField = cms.string( "ParabolicMf" ), clusterRemovalInfo = cms.InputTag( "" ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), - MeasurementTrackerEvent = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventNoVtx" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), Fitter = cms.string( "hltESPFittingSmootherIT" ), useHitsSplitting = cms.bool( False ), MeasurementTracker = cms.string( "" ), @@ -77606,10 +79630,10 @@ useSimpleMF = cms.bool( True ), Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) ) -process.hltIter1L3MuonTrackCutClassifierPromptNoVtx = cms.EDProducer( "TrackCutClassifier", - src = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksNoVtx" ), +process.hltIter1L3MuonTrackCutClassifierPromptScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx" ), beamspot = cms.InputTag( "hltOnlineBeamSpot" ), - vertices = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), mva = cms.PSet( minPixelHits = cms.vint32( 0, 0, 2 ), @@ -77638,10 +79662,10 @@ ), ignoreVertices = cms.bool( False ) ) -process.hltIter1L3MuonTrackCutClassifierDetachedNoVtx = cms.EDProducer( "TrackCutClassifier", - src = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksNoVtx" ), +process.hltIter1L3MuonTrackCutClassifierDetachedScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx" ), beamspot = cms.InputTag( "hltOnlineBeamSpot" ), - vertices = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), mva = cms.PSet( minPixelHits = cms.vint32( 0, 0, 1 ), @@ -77670,26 +79694,26 @@ ), ignoreVertices = cms.bool( False ) ) -process.hltIter1L3MuonTrackCutClassifierMergedNoVtx = cms.EDProducer( "ClassifierMerger", - inputClassifiers = cms.vstring( 'hltIter1L3MuonTrackCutClassifierPromptNoVtx', - 'hltIter1L3MuonTrackCutClassifierDetachedNoVtx' ) +process.hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx = cms.EDProducer( "ClassifierMerger", + inputClassifiers = cms.vstring( 'hltIter1L3MuonTrackCutClassifierPromptScoutingNoVtx', + 'hltIter1L3MuonTrackCutClassifierDetachedScoutingNoVtx' ) ) -process.hltIter1L3MuonTrackSelectionHighPurityNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", +process.hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", minQuality = cms.string( "highPurity" ), copyExtras = cms.untracked.bool( True ), copyTrajectories = cms.untracked.bool( False ), - originalSource = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksNoVtx" ), - originalQualVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedNoVtx','QualityMasks' ), - originalMVAVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedNoVtx','MVAValues' ) + originalSource = cms.InputTag( "hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx','MVAValues' ) ) -process.hltIter1L3MuonMergedNoVtx = cms.EDProducer( "TrackListMerger", +process.hltIter1L3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", ShareFrac = cms.double( 0.19 ), writeOnlyTrkQuals = cms.bool( False ), MinPT = cms.double( 0.05 ), allowFirstHitShare = cms.bool( True ), copyExtras = cms.untracked.bool( True ), Epsilon = cms.double( -0.001 ), - selectedTrackQuals = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityNoVtx','hltIter1L3MuonTrackSelectionHighPurityNoVtx' ), + selectedTrackQuals = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx' ), indivShareFrac = cms.vdouble( 1.0, 1.0 ), MaxNormalizedChisq = cms.double( 1000.0 ), copyMVA = cms.bool( False ), @@ -77702,27 +79726,27 @@ ), MinFound = cms.int32( 3 ), hasSelector = cms.vint32( 0, 0 ), - TrackProducers = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityNoVtx','hltIter1L3MuonTrackSelectionHighPurityNoVtx' ), + TrackProducers = cms.VInputTag( 'hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx','hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx' ), trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), newQuality = cms.string( "confirmed" ) ) -process.hltIter2L3MuonClustersRefRemovalNoVtx = cms.EDProducer( "TrackClusterRemover", +process.hltIter2L3MuonClustersRefRemovalScoutingNoVtx = cms.EDProducer( "TrackClusterRemover", trackClassifier = cms.InputTag( '','QualityMasks' ), minNumberOfLayersWithMeasBeforeFiltering = cms.int32( 0 ), maxChi2 = cms.double( 16.0 ), - trajectories = cms.InputTag( "hltIter1L3MuonTrackSelectionHighPurityNoVtx" ), - oldClusterRemovalInfo = cms.InputTag( "hltIter1L3MuonClustersRefRemovalNoVtx" ), + trajectories = cms.InputTag( "hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx" ), + oldClusterRemovalInfo = cms.InputTag( "hltIter1L3MuonClustersRefRemovalScoutingNoVtx" ), stripClusters = cms.InputTag( "hltSiStripRawToClustersFacility" ), overrideTrkQuals = cms.InputTag( "" ), pixelClusters = cms.InputTag( "hltSiPixelClusters" ), TrackQuality = cms.string( "highPurity" ) ) -process.hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", - clustersToSkip = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), +process.hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx = cms.EDProducer( "MaskedMeasurementTrackerEventProducer", + clustersToSkip = cms.InputTag( "hltIter2L3MuonClustersRefRemovalScoutingNoVtx" ), OnDemand = cms.bool( False ), src = cms.InputTag( "hltSiStripClusters" ) ) -process.hltIter2L3MuonPixelLayerTripletsNoVtx = cms.EDProducer( "SeedingLayersEDProducer", +process.hltIter2L3MuonPixelLayerTripletsScoutingNoVtx = cms.EDProducer( "SeedingLayersEDProducer", layerList = cms.vstring( 'BPix1+BPix2+BPix3', 'BPix2+BPix3+BPix4', 'BPix1+BPix3+BPix4', @@ -77743,7 +79767,7 @@ FPix = cms.PSet( hitErrorRPhi = cms.double( 0.0051 ), TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), - skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), + skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalScoutingNoVtx" ), useErrorsFromParam = cms.bool( True ), hitErrorRZ = cms.double( 0.0036 ), HitProducer = cms.string( "hltSiPixelRecHits" ) @@ -77755,16 +79779,16 @@ BPix = cms.PSet( hitErrorRPhi = cms.double( 0.0027 ), TTRHBuilder = cms.string( "hltESPTTRHBuilderPixelOnly" ), - skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalNoVtx" ), + skipClusters = cms.InputTag( "hltIter2L3MuonClustersRefRemovalScoutingNoVtx" ), useErrorsFromParam = cms.bool( True ), hitErrorRZ = cms.double( 0.006 ), HitProducer = cms.string( "hltSiPixelRecHits" ) ), TIB = cms.PSet( ) ) -process.hltIter2L3MuonPixelTrackingRegionsNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", +process.hltIter2L3MuonPixelTrackingRegionsScoutingNoVtx = cms.EDProducer( "CandidateSeededTrackingRegionsEDProducer", RegionPSet = cms.PSet( - vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertexCollection = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), zErrorVetex = cms.double( 0.05 ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), zErrorBeamSpot = cms.double( 24.2 ), @@ -77774,18 +79798,18 @@ nSigmaZBeamSpot = cms.double( 4.0 ), ptMin = cms.double( 0.8 ), mode = cms.string( "VerticesFixed" ), - input = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + input = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), searchOpt = cms.bool( False ), whereToUseMeasurementTracker = cms.string( "ForSiStrips" ), originRadius = cms.double( 0.025 ), - measurementTrackerName = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + measurementTrackerName = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), precise = cms.bool( True ), deltaEta = cms.double( 0.3 ), deltaPhi = cms.double( 0.3 ) ) ) -process.hltIter2L3MuonPixelHitDoubletsNoVtx = cms.EDProducer( "HitPairEDProducer", - trackingRegions = cms.InputTag( "hltIter2L3MuonPixelTrackingRegionsNoVtx" ), +process.hltIter2L3MuonPixelHitDoubletsScoutingNoVtx = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltIter2L3MuonPixelTrackingRegionsScoutingNoVtx" ), layerPairs = cms.vuint32( 0, 1 ), clusterCheck = cms.InputTag( "hltIter2L3MuonPixelClusterCheck" ), produceSeedingHitSets = cms.bool( False ), @@ -77793,9 +79817,9 @@ trackingRegionsSeedingLayers = cms.InputTag( "" ), maxElementTotal = cms.uint32( 50000000 ), maxElement = cms.uint32( 0 ), - seedingLayers = cms.InputTag( "hltIter2L3MuonPixelLayerTripletsNoVtx" ) + seedingLayers = cms.InputTag( "hltIter2L3MuonPixelLayerTripletsScoutingNoVtx" ) ) -process.hltIter2L3MuonPixelHitTripletsNoVtx = cms.EDProducer( "CAHitTripletEDProducer", +process.hltIter2L3MuonPixelHitTripletsScoutingNoVtx = cms.EDProducer( "CAHitTripletEDProducer", CAThetaCut = cms.double( 0.004 ), CAPhiCut_byTriplets = cms.VPSet( cms.PSet( seedingLayers = cms.string( "" ), @@ -77809,7 +79833,7 @@ enabled = cms.bool( True ), pt2 = cms.double( 8.0 ) ), - doublets = cms.InputTag( "hltIter2L3MuonPixelHitDoubletsNoVtx" ), + doublets = cms.InputTag( "hltIter2L3MuonPixelHitDoubletsScoutingNoVtx" ), CAHardPtCut = cms.double( 0.3 ), SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), CAThetaCut_byTriplets = cms.VPSet( @@ -77821,7 +79845,7 @@ useBendingCorrection = cms.bool( True ), extraHitRPhitolerance = cms.double( 0.032 ) ) -process.hltIter2L3MuonPixelSeedsNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsEDProducer", +process.hltIter2L3MuonPixelSeedsScoutingNoVtx = cms.EDProducer( "SeedCreatorFromRegionConsecutiveHitsEDProducer", SeedComparitorPSet = cms.PSet( ComponentName = cms.string( "none" ) ), forceKinematicWithRegionDirection = cms.bool( False ), magneticField = cms.string( "ParabolicMf" ), @@ -77829,11 +79853,11 @@ OriginTransverseErrorMultiplier = cms.double( 1.0 ), TTRHBuilder = cms.string( "hltESPTTRHBWithTrackAngle" ), MinOneOverPtError = cms.double( 1.0 ), - seedingHitSets = cms.InputTag( "hltIter2L3MuonPixelHitTripletsNoVtx" ), + seedingHitSets = cms.InputTag( "hltIter2L3MuonPixelHitTripletsScoutingNoVtx" ), propagator = cms.string( "PropagatorWithMaterialParabolicMf" ) ) -process.hltIter2L3MuonCkfTrackCandidatesNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", - src = cms.InputTag( "hltIter2L3MuonPixelSeedsNoVtx" ), +process.hltIter2L3MuonCkfTrackCandidatesScoutingNoVtx = cms.EDProducer( "CkfTrackCandidateMaker", + src = cms.InputTag( "hltIter2L3MuonPixelSeedsScoutingNoVtx" ), maxSeedsBeforeCleaning = cms.uint32( 1000 ), SimpleMagneticField = cms.string( "ParabolicMf" ), TransientInitialStateEstimatorParameters = cms.PSet( @@ -77842,7 +79866,7 @@ propagatorOppositeTISE = cms.string( "PropagatorWithMaterialParabolicMfOpposite" ) ), TrajectoryCleaner = cms.string( "hltESPTrajectoryCleanerBySharedHits" ), - MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), cleanTrajectoryAfterInOut = cms.bool( False ), useHitsSplitting = cms.bool( False ), RedundantSeedCleaner = cms.string( "CachingSeedCleanerBySharedInput" ), @@ -77853,12 +79877,12 @@ NavigationSchool = cms.string( "SimpleNavigationSchool" ), TrajectoryBuilder = cms.string( "" ) ) -process.hltIter2L3MuonCtfWithMaterialTracksNoVtx = cms.EDProducer( "TrackProducer", - src = cms.InputTag( "hltIter2L3MuonCkfTrackCandidatesNoVtx" ), +process.hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx = cms.EDProducer( "TrackProducer", + src = cms.InputTag( "hltIter2L3MuonCkfTrackCandidatesScoutingNoVtx" ), SimpleMagneticField = cms.string( "ParabolicMf" ), clusterRemovalInfo = cms.InputTag( "" ), beamSpot = cms.InputTag( "hltOnlineBeamSpot" ), - MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx" ), + MeasurementTrackerEvent = cms.InputTag( "hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx" ), Fitter = cms.string( "hltESPFittingSmootherIT" ), useHitsSplitting = cms.bool( False ), MeasurementTracker = cms.string( "" ), @@ -77871,10 +79895,10 @@ useSimpleMF = cms.bool( True ), Propagator = cms.string( "hltESPRungeKuttaTrackerPropagator" ) ) -process.hltIter2L3MuonTrackCutClassifierNoVtx = cms.EDProducer( "TrackCutClassifier", - src = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksNoVtx" ), +process.hltIter2L3MuonTrackCutClassifierScoutingNoVtx = cms.EDProducer( "TrackCutClassifier", + src = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx" ), beamspot = cms.InputTag( "hltOnlineBeamSpot" ), - vertices = cms.InputTag( "hltPixelVerticesL3MuonNoVtx" ), + vertices = cms.InputTag( "hltPixelVerticesL3MuonScoutingNoVtx" ), qualityCuts = cms.vdouble( -0.7, 0.1, 0.7 ), mva = cms.PSet( minPixelHits = cms.vint32( 0, 0, 0 ), @@ -77903,22 +79927,22 @@ ), ignoreVertices = cms.bool( False ) ) -process.hltIter2L3MuonTrackSelectionHighPurityNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", +process.hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx = cms.EDProducer( "TrackCollectionFilterCloner", minQuality = cms.string( "highPurity" ), copyExtras = cms.untracked.bool( True ), copyTrajectories = cms.untracked.bool( False ), - originalSource = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksNoVtx" ), - originalQualVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierNoVtx','QualityMasks' ), - originalMVAVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierNoVtx','MVAValues' ) + originalSource = cms.InputTag( "hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx" ), + originalQualVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierScoutingNoVtx','QualityMasks' ), + originalMVAVals = cms.InputTag( 'hltIter2L3MuonTrackCutClassifierScoutingNoVtx','MVAValues' ) ) -process.hltIter2L3MuonMergedNoVtx = cms.EDProducer( "TrackListMerger", +process.hltIter2L3MuonMergedScoutingNoVtx = cms.EDProducer( "TrackListMerger", ShareFrac = cms.double( 0.19 ), writeOnlyTrkQuals = cms.bool( False ), MinPT = cms.double( 0.05 ), allowFirstHitShare = cms.bool( True ), copyExtras = cms.untracked.bool( True ), Epsilon = cms.double( -0.001 ), - selectedTrackQuals = cms.VInputTag( 'hltIter1L3MuonMergedNoVtx','hltIter2L3MuonTrackSelectionHighPurityNoVtx' ), + selectedTrackQuals = cms.VInputTag( 'hltIter1L3MuonMergedScoutingNoVtx','hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx' ), indivShareFrac = cms.vdouble( 1.0, 1.0 ), MaxNormalizedChisq = cms.double( 1000.0 ), copyMVA = cms.bool( False ), @@ -77931,11 +79955,11 @@ ), MinFound = cms.int32( 3 ), hasSelector = cms.vint32( 0, 0 ), - TrackProducers = cms.VInputTag( 'hltIter1L3MuonMergedNoVtx','hltIter2L3MuonTrackSelectionHighPurityNoVtx' ), + TrackProducers = cms.VInputTag( 'hltIter1L3MuonMergedScoutingNoVtx','hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx' ), trackAlgoPriorityOrder = cms.string( "hltESPTrackAlgoPriorityOrder" ), newQuality = cms.string( "confirmed" ) ) -process.hltMuonTkRelIsolationCut0p09MapNoVtx = cms.EDProducer( "L3MuonCombinedRelativeIsolationProducer", +process.hltMuonTkRelIsolationCut0p09MapScoutingNoVtx = cms.EDProducer( "L3MuonCombinedRelativeIsolationProducer", printDebug = cms.bool( False ), CutsPSet = cms.PSet( applyCutsORmaxNTracks = cms.bool( False ), @@ -77947,7 +79971,7 @@ ), TrkExtractorPSet = cms.PSet( Diff_z = cms.double( 0.2 ), - inputTrackCollection = cms.InputTag( "hltIter2L3MuonMergedNoVtx" ), + inputTrackCollection = cms.InputTag( "hltIter2L3MuonMergedScoutingNoVtx" ), Chi2Ndof_Max = cms.double( 1.0E64 ), BeamSpotLabel = cms.InputTag( "hltOnlineBeamSpot" ), DR_Veto = cms.double( 0.01 ), @@ -77982,188 +80006,10 @@ ComponentName = cms.string( "CaloExtractor" ), Weight_E = cms.double( 1.0 ) ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), + inputMuonCollection = cms.InputTag( "hltIterL3MuonCandidatesScoutingNoVtx" ), UseRhoCorrectedCaloDeposits = cms.bool( False ), UseCaloIso = cms.bool( False ) ) -process.hltPreDSTDoubleMu3noVtxCaloScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltDimuon3L1Filtered0 = cms.EDFilter( "HLTMuonL1TFilter", - saveTags = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltL1sDoubleMuIorTripleMuIorQuadMu" ), - MinPt = cms.double( 0.0 ), - MinN = cms.int32( 2 ), - MaxEta = cms.double( 2.5 ), - CentralBxOnly = cms.bool( True ), - SelectQualities = cms.vint32( ), - CandTag = cms.InputTag( 'hltGtStage2Digis','Muon' ) -) -process.hltDimuon3L2PreFiltered0 = cms.EDFilter( "HLTMuonL2FromL1TPreFilter", - saveTags = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - CutOnChambers = cms.bool( False ), - PreviousCandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - MinPt = cms.double( 0.0 ), - MinN = cms.int32( 0 ), - SeedMapTag = cms.InputTag( "hltL2Muons" ), - MaxEta = cms.double( 2.5 ), - MinNhits = cms.vint32( 0 ), - MinDxySig = cms.double( -1.0 ), - MinDr = cms.double( -1.0 ), - AbsEtaBins = cms.vdouble( 0.0 ), - MaxDz = cms.double( 9999.0 ), - MatchToPreviousCand = cms.bool( True ), - CandTag = cms.InputTag( "hltL2MuonCandidatesNoVtx" ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinNchambers = cms.vint32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinNstations = cms.vint32( 0 ) -) -process.hltDoubleMu3L3FilteredNoVtx = cms.EDFilter( "HLTMuonDimuonL3Filter", - saveTags = cms.bool( True ), - ChargeOpt = cms.int32( 0 ), - MaxPtMin = cms.vdouble( 1.0E125 ), - FastAccept = cms.bool( False ), - MatchToPreviousCand = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), - InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), - PreviousCandIsL2 = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), - MaxPtBalance = cms.double( 999999.0 ), - MaxPtPair = cms.vdouble( 1.0E125 ), - MaxAcop = cms.double( 999.0 ), - MinPtMin = cms.vdouble( 3.0 ), - MaxInvMass = cms.vdouble( 9999.0 ), - MinPtMax = cms.vdouble( 0.0 ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinN = cms.int32( 1 ), - MaxDz = cms.double( 9999.0 ), - MinPtPair = cms.vdouble( 0.0 ), - CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - MinAcop = cms.double( -999.0 ), - MaxDCAMuMu = cms.double( 999999.0 ), - MinNhits = cms.int32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinPtBalance = cms.double( -1.0 ), - MaxEta = cms.double( 2.5 ), - L1MatchingdR = cms.double( 0.3 ), - MaxRapidityPair = cms.double( 999999.0 ), - CutCowboys = cms.bool( False ), - MinInvMass = cms.vdouble( 0.0 ) -) -process.hltDisplacedmumuVtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", - Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtx" ), - MinPt = cms.double( 0.0 ), - ChargeOpt = cms.int32( 0 ), - MaxEta = cms.double( 2.5 ), - MaxInvMass = cms.double( 99999.0 ), - MinPtPair = cms.double( 0.0 ), - matchToPrevious = cms.bool( True ), - MinInvMass = cms.double( 0.0 ) -) -process.hltPreDSTDoubleMu1noVtxCaloScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltDoubleMu1L3FilteredNoVtx = cms.EDFilter( "HLTMuonDimuonL3Filter", - saveTags = cms.bool( True ), - ChargeOpt = cms.int32( 0 ), - MaxPtMin = cms.vdouble( 1.0E125 ), - FastAccept = cms.bool( False ), - MatchToPreviousCand = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), - InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), - PreviousCandIsL2 = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), - MaxPtBalance = cms.double( 999999.0 ), - MaxPtPair = cms.vdouble( 1.0E125 ), - MaxAcop = cms.double( 999.0 ), - MinPtMin = cms.vdouble( 1.0 ), - MaxInvMass = cms.vdouble( 9999.0 ), - MinPtMax = cms.vdouble( 0.0 ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinN = cms.int32( 1 ), - MaxDz = cms.double( 9999.0 ), - MinPtPair = cms.vdouble( 0.0 ), - CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - MinAcop = cms.double( -999.0 ), - MaxDCAMuMu = cms.double( 999999.0 ), - MinNhits = cms.int32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinPtBalance = cms.double( -1.0 ), - MaxEta = cms.double( 2.5 ), - L1MatchingdR = cms.double( 0.3 ), - MaxRapidityPair = cms.double( 999999.0 ), - CutCowboys = cms.bool( False ), - MinInvMass = cms.vdouble( 0.0 ) -) -process.hltDisplacedmumu1VtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", - Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - PreviousCandTag = cms.InputTag( "hltDoubleMu1L3FilteredNoVtx" ), - MinPt = cms.double( 0.0 ), - ChargeOpt = cms.int32( 0 ), - MaxEta = cms.double( 2.5 ), - MaxInvMass = cms.double( 99999.0 ), - MinPtPair = cms.double( 0.0 ), - matchToPrevious = cms.bool( True ), - MinInvMass = cms.double( 0.0 ) -) -process.hltPreDSTDoubleMu3noVtxMass10PFScouting = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltDoubleMu3L3FilteredNoVtxMass10 = cms.EDFilter( "HLTMuonDimuonL3Filter", - saveTags = cms.bool( True ), - ChargeOpt = cms.int32( 0 ), - MaxPtMin = cms.vdouble( 1.0E125 ), - FastAccept = cms.bool( False ), - MatchToPreviousCand = cms.bool( True ), - MaxDr = cms.double( 9999.0 ), - L1CandTag = cms.InputTag( "hltDimuon3L1Filtered0" ), - inputMuonCollection = cms.InputTag( "hltIterL3MuonsNoVtx" ), - InputLinks = cms.InputTag( "hltL3MuonsIterL3LinksNoVtx" ), - PreviousCandIsL2 = cms.bool( True ), - PreviousCandTag = cms.InputTag( "hltDimuon3L2PreFiltered0" ), - MaxPtBalance = cms.double( 999999.0 ), - MaxPtPair = cms.vdouble( 1.0E125 ), - MaxAcop = cms.double( 999.0 ), - MinPtMin = cms.vdouble( 3.0 ), - MaxInvMass = cms.vdouble( 9999.0 ), - MinPtMax = cms.vdouble( 0.0 ), - BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ), - MinN = cms.int32( 1 ), - MaxDz = cms.double( 9999.0 ), - MinPtPair = cms.vdouble( 0.0 ), - CandTag = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - MinAcop = cms.double( -999.0 ), - MaxDCAMuMu = cms.double( 999999.0 ), - MinNhits = cms.int32( 0 ), - NSigmaPt = cms.double( 0.0 ), - MinPtBalance = cms.double( -1.0 ), - MaxEta = cms.double( 2.5 ), - L1MatchingdR = cms.double( 0.3 ), - MaxRapidityPair = cms.double( 999999.0 ), - CutCowboys = cms.bool( False ), - MinInvMass = cms.vdouble( 10.0 ) -) -process.hltDisplacedmumuMass10VtxProducer = cms.EDProducer( "HLTDisplacedmumuVtxProducer", - Src = cms.InputTag( "hltIterL3MuonCandidatesNoVtx" ), - PreviousCandTag = cms.InputTag( "hltDoubleMu3L3FilteredNoVtxMass10" ), - MinPt = cms.double( 0.0 ), - ChargeOpt = cms.int32( 0 ), - MaxEta = cms.double( 2.5 ), - MaxInvMass = cms.double( 99999.0 ), - MinPtPair = cms.double( 0.0 ), - matchToPrevious = cms.bool( True ), - MinInvMass = cms.double( 0.0 ) -) process.hltPreAK4CaloJet30 = cms.EDFilter( "HLTPrescaler", L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), offset = cms.uint32( 0 ) @@ -79252,6 +81098,99 @@ L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), offset = cms.uint32( 0 ) ) +process.hltPixelTracksForNoPUFilter = cms.EDProducer( "PixelTrackFilterByKinematicsProducer", + nSigmaTipMaxTolerance = cms.double( 0.0 ), + chi2 = cms.double( 1000.0 ), + nSigmaInvPtTolerance = cms.double( 0.0 ), + ptMin = cms.double( 0.0 ), + tipMax = cms.double( 999.0 ) +) +process.hltSelectorJets20L1FastJetForNoPU = cms.EDFilter( "EtMinCaloJetSelector", + filter = cms.bool( False ), + src = cms.InputTag( "hltAK4CaloJetsCorrectedIDPassed" ), + etMin = cms.double( 20.0 ) +) +process.hltPixelTracksForNoPUFitter = cms.EDProducer( "PixelFitterByHelixProjectionsProducer", + scaleErrorsForBPix1 = cms.bool( False ), + scaleFactor = cms.double( 0.65 ) +) +process.hltPixelTracksTrackingRegionsForNoPU = cms.EDProducer( "TauRegionalPixelSeedTrackingRegionEDProducer", + RegionPSet = cms.PSet( + JetSrc = cms.InputTag( "hltSelectorJets20L1FastJetForNoPU" ), + vertexSrc = cms.InputTag( "hltFastPVPixelVertices" ), + ptMin = cms.double( 0.5 ), + howToUseMeasurementTracker = cms.string( "Never" ), + deltaEtaRegion = cms.double( 0.5 ), + originHalfLength = cms.double( 0.5 ), + searchOpt = cms.bool( False ), + originRadius = cms.double( 0.1 ), + measurementTrackerName = cms.InputTag( "MeasurementTrackerEvent" ), + deltaPhiRegion = cms.double( 0.5 ) + ) +) +process.hltPixelTracksHitDoubletsForNoPU = cms.EDProducer( "HitPairEDProducer", + trackingRegions = cms.InputTag( "hltPixelTracksTrackingRegionsForNoPU" ), + layerPairs = cms.vuint32( 0, 1, 2 ), + clusterCheck = cms.InputTag( "" ), + produceSeedingHitSets = cms.bool( False ), + produceIntermediateHitDoublets = cms.bool( True ), + trackingRegionsSeedingLayers = cms.InputTag( "" ), + maxElementTotal = cms.uint32( 50000000 ), + maxElement = cms.uint32( 0 ), + seedingLayers = cms.InputTag( "hltPixelLayerQuadrupletsRegForBTag" ) +) +process.hltPixelTracksHitQuadrupletsForNoPU = cms.EDProducer( "CAHitQuadrupletEDProducer", + CAHardPtCut = cms.double( 0.0 ), + CAPhiCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + extraHitRPhitolerance = cms.double( 0.032 ), + doublets = cms.InputTag( "hltPixelTracksHitDoubletsForNoPU" ), + fitFastCircle = cms.bool( True ), + maxChi2 = cms.PSet( + value2 = cms.double( 50.0 ), + value1 = cms.double( 200.0 ), + pt1 = cms.double( 0.7 ), + enabled = cms.bool( True ), + pt2 = cms.double( 2.0 ) + ), + CAThetaCut = cms.double( 0.002 ), + SeedComparitorPSet = cms.PSet( + clusterShapeHitFilter = cms.string( "ClusterShapeHitFilter" ), + ComponentName = cms.string( "LowPtClusterShapeSeedComparitor" ), + clusterShapeCacheSrc = cms.InputTag( "hltSiPixelClustersRegForBTagCache" ) + ), + CAThetaCut_byTriplets = cms.VPSet( + cms.PSet( seedingLayers = cms.string( "" ), + cut = cms.double( -1.0 ) + ) + ), + CAPhiCut = cms.double( 0.2 ), + useBendingCorrection = cms.bool( True ), + fitFastCircleChi2Cut = cms.bool( True ) +) +process.hltPixelTracksForNoPU = cms.EDProducer( "PixelTrackProducer", + Cleaner = cms.string( "hltPixelTracksCleanerBySharedHits" ), + passLabel = cms.string( "" ), + Fitter = cms.InputTag( "hltPixelTracksForNoPUFitter" ), + Filter = cms.InputTag( "hltPixelTracksForNoPUFilter" ), + SeedingHitSets = cms.InputTag( "hltPixelTracksHitQuadrupletsForNoPU" ) +) +process.hltCaloJetFromPV = cms.EDProducer( "PixelJetPuId", + MinEtaForwardJets = cms.double( 2.4 ), + MinTrackPt = cms.double( 0.6 ), + primaryVertex = cms.InputTag( "hltFastPVPixelVertices" ), + MinEtForwardJets = cms.double( 40.0 ), + MinGoodJetTrackPtRatio = cms.double( 0.045 ), + MaxTrackDistanceToJet = cms.double( 0.04 ), + UseForwardJetsAsNoPU = cms.bool( True ), + MinGoodJetTrackPt = cms.double( 1.8 ), + tracks = cms.InputTag( "hltPixelTracksForNoPU" ), + MaxTrackChi2 = cms.double( 20.0 ), + jets = cms.InputTag( "hltSelectorJets20L1FastJetForNoPU" ) +) process.hltCaloJetFromPVCollection20Filter = cms.EDFilter( "HLT1CaloJet", saveTags = cms.bool( True ), MinPt = cms.double( 20.0 ), @@ -81852,10 +83791,10 @@ minTauPtForNoIso = cms.double( 500.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( True ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -81865,7 +83804,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( False ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -81890,15 +83829,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 0.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauMediumHighPtRelaxedIsoRelativeIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -81943,10 +83883,10 @@ minTauPtForNoIso = cms.double( 500.0 ), vertexSrc = cms.InputTag( "NotUsed" ), applySumPtCut = cms.bool( False ), - rhoConeSize = cms.double( 0.5 ), + customOuterCone = cms.double( -1.0 ), ApplyDiscriminationByTrackerIsolation = cms.bool( True ), storeRawPhotonSumPt_outsideSignalCone = cms.bool( False ), - rhoUEOffsetCorrection = cms.double( 1.0 ), + enableHGCalWorkaround = cms.bool( False ), rhoProducer = cms.InputTag( "hltFixedGridRhoFastjetAll" ), maxRelPhotonSumPt_outsideSignalCone = cms.double( 0.1 ), deltaBetaFactor = cms.string( "0.38" ), @@ -81956,7 +83896,7 @@ Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), applyOccupancyCut = cms.bool( False ), applyDeltaBetaCorrection = cms.bool( False ), - WeightECALIsolation = cms.double( 1.0 ), + rhoConeSize = cms.double( 0.5 ), applyRelativeSumPtCut = cms.bool( True ), storeRawPUsumPt = cms.bool( False ), applyPhotonPtSumOutsideSignalConeCut = cms.bool( False ), @@ -81981,15 +83921,16 @@ selection = cms.string( "decayMode() = 10" ) ) ), + WeightECALIsolation = cms.double( 1.0 ), deltaBetaPUTrackPtCutOverride_val = cms.double( 0.5 ), ApplyDiscriminationByECALIsolation = cms.bool( False ), isoConeSizeForDeltaBeta = cms.double( 0.3 ), storeRawSumPt = cms.bool( False ), - verbosity = cms.int32( 0 ), + rhoUEOffsetCorrection = cms.double( 1.0 ), storeRawFootprintCorrection = cms.bool( False ), relativeSumPtOffset = cms.double( 200.0 ), - customOuterCone = cms.double( -1.0 ), - particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltPFTauMediumHighPtRelaxedIsoAbsOrRelIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -88743,56 +90684,82 @@ fedList = cms.vuint32( 1404 ) ) process.hltScoutingPFPacker = cms.EDProducer( "HLTScoutingPFProducer", - pfJetCollection = cms.InputTag( "hltAK4PFJets" ), + pfJetCollection = cms.InputTag( "hltAK4PixelOnlyPFJets" ), doCandidates = cms.bool( True ), - pfCandidateEtaCut = cms.double( 5.0 ), + pfCandidateEtaCut = cms.double( 3.0 ), pfJetTagCollection = cms.InputTag( 'hltCombinedSecondaryVertexBJetTagsPF','','@currentProcess' ), doMet = cms.bool( True ), - metCollection = cms.InputTag( 'hltPFMETProducer','','@currentProcess' ), + metCollection = cms.InputTag( 'hltPixelOnlyPFMETProducer','','@currentProcess' ), pfJetEtaCut = cms.double( 3.0 ), vertexCollection = cms.InputTag( 'hltPixelVertices','','@currentProcess' ), pfJetPtCut = cms.double( 20.0 ), mantissaPrecision = cms.int32( 23 ), - rho = cms.InputTag( 'hltFixedGridRhoFastjetAll','','@currentProcess' ), + rho = cms.InputTag( 'hltFixedGridRhoFastjetPixelOnlyAll','','@currentProcess' ), doJetTags = cms.bool( True ), - pfCandidateCollection = cms.InputTag( 'hltParticleFlow','','@currentProcess' ), + pfCandidateCollection = cms.InputTag( 'hltPixelOnlyParticleFlow','','@currentProcess' ), pfCandidatePtCut = cms.double( 0.6 ) ) process.hltScoutingMuonPacker = cms.EDProducer( "HLTScoutingMuonProducer", minVtxProbCut = cms.double( 0.001 ), - HcalPFClusterIsoMap = cms.InputTag( 'hltMuonHcalPFClusterIsoForMuons','','@currentProcess' ), - EcalPFClusterIsoMap = cms.InputTag( 'hltMuonEcalPFClusterIsoForMuons','','@currentProcess' ), - ChargedCandidates = cms.InputTag( 'hltL3MuonCandidates','','@currentProcess' ), - muonPtCut = cms.double( 3.0 ), - InputLinks = cms.InputTag( 'hltL3MuonsIterL3LinksNoVtx','','@currentProcess' ), - displacedvertexCollection = cms.InputTag( 'hltDisplacedmumuVtxProducerDoubleMu3NoVtx','','@currentProcess' ), - Tracks = cms.InputTag( "hltL3Muons" ), + HcalPFClusterIsoMap = cms.InputTag( 'hltMuonHcalPFClusterIsoForMuonsScoutingNoVtx','','@currentProcess' ), + EcalPFClusterIsoMap = cms.InputTag( 'hltMuonEcalMFPFClusterIsoForMuonsScoutingNoVtx','','@currentProcess' ), + ChargedCandidates = cms.InputTag( 'hltIterL3MuonCandidatesScoutingNoVtx','','@currentProcess' ), + InputMuons = cms.InputTag( "hltIterL3MuonsScoutingNoVtx" ), + TrackIsoMap = cms.InputTag( 'hltMuonTkRelIsolationCut0p09MapScoutingNoVtx','combinedRelativeIsoDeposits','@currentProcess' ), + displacedvertexCollection = cms.InputTag( 'hltDisplacedmumuVtxNoMatchingProducer','','@currentProcess' ), + Tracks = cms.InputTag( "hltIterL3MuonAndMuonFromL1MergedScoutingNoVtx" ), muonEtaCut = cms.double( 2.4 ), - TrackIsoMap = cms.InputTag( 'hltMuonTkRelIsolationCut0p09Map','combinedRelativeIsoDeposits','@currentProcess' ) + muonPtCut = cms.double( 0.0 ), + InputLinks = cms.InputTag( 'hltL3MuonsIterL3LinksScoutingNoVtx','','@currentProcess' ) ) process.hltScoutingEgammaPacker = cms.EDProducer( "HLTScoutingEgammaProducer", egammaEtaCut = cms.double( 2.5 ), HcalPFClusterIsoMap = cms.InputTag( 'hltEgammaHcalPFClusterIso','','@currentProcess' ), EgammaCandidates = cms.InputTag( 'hltEgammaCandidates','','@currentProcess' ), - egammaPtCut = cms.double( 4.0 ), + egammaPtCut = cms.double( 2.0 ), EcalPFClusterIsoMap = cms.InputTag( 'hltEgammaEcalPFClusterIso','','@currentProcess' ), - SigmaIEtaIEtaMap = cms.InputTag( 'hltEgammaClusterShape','sigmaIEtaIEta5x5','@currentProcess' ), + saveRecHitTiming = cms.bool( False ), + rechitMatrixSize = cms.int32( 15 ), MissingHitsMap = cms.InputTag( 'hltEgammaGsfTrackVars','MissingHits','@currentProcess' ), + OneOEMinusOneOPMap = cms.InputTag( 'hltEgammaGsfTrackVars','OneOESuperMinusOneOP','@currentProcess' ), HoverEMap = cms.InputTag( 'hltEgammaHoverE','','@currentProcess' ), EgammaGsfTracks = cms.InputTag( 'hltEgammaGsfTracks','','@currentProcess' ), - OneOEMinusOneOPMap = cms.InputTag( 'hltEgammaGsfTrackVars','OneOESuperMinusOneOP','@currentProcess' ), + mantissaPrecision = cms.int32( 10 ), + r9Map = cms.InputTag( 'hltEgammaR9ID','r95x5' ), + SigmaIEtaIEtaMap = cms.InputTag( 'hltEgammaClusterShape','sigmaIEtaIEta5x5','@currentProcess' ), DetaMap = cms.InputTag( 'hltEgammaGsfTrackVars','DetaSeed','@currentProcess' ), egammaHoverECut = cms.double( 1.0 ), - EleGsfTrackIsoMap = cms.InputTag( 'hltEgammaEleGsfTrackIso','','@currentProcess' ), - DphiMap = cms.InputTag( 'hltEgammaGsfTrackVars','Dphi','@currentProcess' ) + ecalRechitEB = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEB' ), + ecalRechitEE = cms.InputTag( 'hltEcalRecHit','EcalRecHitsEE' ), + DphiMap = cms.InputTag( 'hltEgammaGsfTrackVars','Dphi','@currentProcess' ), + EleGsfTrackIsoMap = cms.InputTag( 'hltEgammaEleGsfTrackIso','','@currentProcess' ) ) process.hltScoutingPrimaryVertexPacker = cms.EDProducer( "HLTScoutingPrimaryVertexProducer", vertexCollection = cms.InputTag( 'hltPixelVertices','','@currentProcess' ) ) -process.hltPreScoutingCaloMuonOutput = cms.EDFilter( "HLTPrescaler", +process.hltScoutingTrackPacker = cms.EDProducer( "HLTScoutingTrackProducer", + vtxMinDist = cms.double( 0.01 ), + OtherTracks = cms.InputTag( "hltPixelOnlyPFMuonMerging" ), + vertexCollection = cms.InputTag( "hltPixelVertices" ), + mantissaPrecision = cms.int32( 10 ) +) +process.hltPrePhysicsScoutingMonitorOutput = cms.EDFilter( "HLTPrescaler", L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), offset = cms.uint32( 0 ) ) +process.hltPrePhysicsScoutingMonitorOutputSmart = cms.EDFilter( "TriggerResultsFilter", + l1tIgnoreMaskAndPrescale = cms.bool( False ), + l1tResults = cms.InputTag( "" ), + hltResults = cms.InputTag( 'TriggerResults','','@currentProcess' ), + triggerConditions = cms.vstring( 'HLT_Ele35_WPTight_Gsf_v9 / 200', + 'HLT_IsoMu27_v16 / 150', + 'HLT_Mu50_v13 / 50', + 'HLT_PFHT1050_v18 / 10', + 'HLT_Photon200_v13 / 10', + 'HLT_Ele115_CaloIdVT_GsfTrkIdT_v14 / 12', + 'DST_Run3_PFScoutingPixelTracking_v16 / 10' ), + throw = cms.bool( True ) +) process.hltScoutingCaloPacker = cms.EDProducer( "HLTScoutingCaloProducer", metCollection = cms.InputTag( 'hltMet','','@currentProcess' ), doMet = cms.bool( True ), @@ -88811,53 +90778,17 @@ HcalPFClusterIsoMap = cms.InputTag( "" ), EcalPFClusterIsoMap = cms.InputTag( "" ), ChargedCandidates = cms.InputTag( 'hltIterL3MuonCandidatesNoVtx','','@currentProcess' ), - muonPtCut = cms.double( 3.0 ), - InputLinks = cms.InputTag( 'hltL3MuonsIterL3LinksNoVtx','','@currentProcess' ), + InputMuons = cms.InputTag( "hltIterL3MuonsNoVtx" ), + TrackIsoMap = cms.InputTag( 'hltMuonTkRelIsolationCut0p09MapNoVtx','combinedRelativeIsoDeposits','@currentProcess' ), displacedvertexCollection = cms.InputTag( 'hltDisplacedmumuVtxProducer','','@currentProcess' ), Tracks = cms.InputTag( 'hltIterL3MuonAndMuonFromL1MergedNoVtx','','@currentProcess' ), muonEtaCut = cms.double( 2.4 ), - TrackIsoMap = cms.InputTag( 'hltMuonTkRelIsolationCut0p09MapNoVtx','combinedRelativeIsoDeposits','@currentProcess' ) + muonPtCut = cms.double( 3.0 ), + InputLinks = cms.InputTag( 'hltL3MuonsIterL3LinksNoVtx','','@currentProcess' ) ) process.hltScoutingPrimaryVertexPackerCaloMuon = cms.EDProducer( "HLTScoutingPrimaryVertexProducer", vertexCollection = cms.InputTag( 'hltPixelVerticesL3MuonNoVtx','','@currentProcess' ) ) -process.hltScoutingTrackPacker = cms.EDProducer( "HLTScoutingTrackProducer", - OtherTracks = cms.InputTag( "hltPixelTracksL3MuonNoVtx" ) -) -process.hltPrePhysicsScoutingMonitorOutput = cms.EDFilter( "HLTPrescaler", - L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), - offset = cms.uint32( 0 ) -) -process.hltPrePhysicsScoutingMonitorOutputSmart = cms.EDFilter( "TriggerResultsFilter", - l1tIgnoreMaskAndPrescale = cms.bool( False ), - l1tResults = cms.InputTag( "" ), - hltResults = cms.InputTag( 'TriggerResults','','@currentProcess' ), - triggerConditions = cms.vstring( 'HLT_Ele35_WPTight_Gsf_v9 / 200', - 'HLT_IsoMu27_v16 / 150', - 'HLT_Mu50_v13 / 50', - 'HLT_PFHT1050_v18 / 10', - 'HLT_Photon200_v13 / 10', - 'HLT_Ele115_CaloIdVT_GsfTrkIdT_v14 / 12', - 'DST_HT250_CaloScouting_v10 / 2000', - 'DST_HT250_CaloBTagScouting_v10 / 2000', - 'DST_HT410_PFScouting_v16 / 150', - 'DST_HT410_BTagScouting_v16 / 150', - 'DST_ZeroBias_BTagScouting_v15 / 10', - 'DST_ZeroBias_CaloScouting_PFScouting_v14 / 10', - 'DST_CaloJet40_BTagScouting_v15 / 10', - 'DST_CaloJet40_CaloScouting_PFScouting_v15 / 10', - 'DST_CaloJet40_CaloBTagScouting_v14 / 10', - 'DST_L1HTT_BTagScouting_v15 / 10', - 'DST_L1HTT_CaloScouting_PFScouting_v15 / 10', - 'DST_L1HTT_CaloBTagScouting_v14 / 10', - 'DST_L1DoubleMu_BTagScouting_v16 / 10', - 'DST_L1DoubleMu_CaloScouting_PFScouting_v15 / 10', - 'DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6 / 2000', - 'DST_DoubleMu3_noVtx_CaloScouting_v6 / 500', - 'DST_DoubleMu1_noVtx_CaloScouting_v2 / 500', - 'DST_DoubleMu3_noVtx_Mass10_PFScouting_v3 / 600' ), - throw = cms.bool( True ) -) process.hltPrePhysicsHLTPhysics1Output = cms.EDFilter( "HLTPrescaler", L1GtReadoutRecordTag = cms.InputTag( "hltGtStage2Digis" ), offset = cms.uint32( 0 ) @@ -90593,46 +92524,13 @@ filterName = cms.untracked.string( "" ), dataTier = cms.untracked.string( "RAW" ) ), - SelectEvents = cms.untracked.PSet( SelectEvents = cms.vstring( 'DST_CaloJet40_BTagScouting_v15', - 'DST_CaloJet40_CaloScouting_PFScouting_v15', - 'DST_DoubleMu3_noVtx_Mass10_PFScouting_v3', - 'DST_HT410_BTagScouting_v16', - 'DST_HT410_PFScouting_v16', - 'DST_L1DoubleMu_BTagScouting_v16', - 'DST_L1DoubleMu_CaloScouting_PFScouting_v15', - 'DST_L1HTT_BTagScouting_v15', - 'DST_L1HTT_CaloScouting_PFScouting_v15', - 'DST_ZeroBias_BTagScouting_v15', - 'DST_ZeroBias_CaloScouting_PFScouting_v14' ) ), + SelectEvents = cms.untracked.PSet( SelectEvents = cms.vstring( 'DST_Run3_PFScoutingPixelTracking_v16' ) ), outputCommands = cms.untracked.vstring( 'drop *', 'keep *_hltFEDSelectorL1_*_*', 'keep *_hltScoutingEgammaPacker_*_*', 'keep *_hltScoutingMuonPacker_*_*', 'keep *_hltScoutingPFPacker_*_*', 'keep *_hltScoutingPrimaryVertexPacker_*_*', - 'keep edmTriggerResults_*_*_*' ) -) -process.hltOutputScoutingCaloMuon = cms.OutputModule( "PoolOutputModule", - fileName = cms.untracked.string( "outputScoutingCaloMuon.root" ), - fastCloning = cms.untracked.bool( False ), - dataset = cms.untracked.PSet( - filterName = cms.untracked.string( "" ), - dataTier = cms.untracked.string( "RAW" ) - ), - SelectEvents = cms.untracked.PSet( SelectEvents = cms.vstring( 'DST_CaloJet40_CaloBTagScouting_v14', - 'DST_DoubleMu1_noVtx_CaloScouting_v2', - 'DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6', - 'DST_DoubleMu3_noVtx_CaloScouting_v6', - 'DST_HT250_CaloBTagScouting_v10', - 'DST_HT250_CaloScouting_v10', - 'DST_L1HTT_CaloBTagScouting_v14', - 'DST_ZeroBias_CaloScouting_PFScouting_v14' ) ), - outputCommands = cms.untracked.vstring( 'drop *', - 'keep *_hltFEDSelectorL1_*_*', - 'keep *_hltScoutingCaloPacker_*_*', - 'keep *_hltScoutingMuonPackerCalo_*_*', - 'keep *_hltScoutingPrimaryVertexPackerCaloMuon_*_*', - 'keep *_hltScoutingPrimaryVertexPacker_*_*', 'keep *_hltScoutingTrackPacker_*_*', 'keep edmTriggerResults_*_*_*' ) ) @@ -90643,24 +92541,7 @@ filterName = cms.untracked.string( "" ), dataTier = cms.untracked.string( "RAW" ) ), - SelectEvents = cms.untracked.PSet( SelectEvents = cms.vstring( 'DST_CaloJet40_BTagScouting_v15', - 'DST_CaloJet40_CaloBTagScouting_v14', - 'DST_CaloJet40_CaloScouting_PFScouting_v15', - 'DST_DoubleMu1_noVtx_CaloScouting_v2', - 'DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6', - 'DST_DoubleMu3_noVtx_CaloScouting_v6', - 'DST_DoubleMu3_noVtx_Mass10_PFScouting_v3', - 'DST_HT250_CaloBTagScouting_v10', - 'DST_HT250_CaloScouting_v10', - 'DST_HT410_BTagScouting_v16', - 'DST_HT410_PFScouting_v16', - 'DST_L1DoubleMu_BTagScouting_v16', - 'DST_L1DoubleMu_CaloScouting_PFScouting_v15', - 'DST_L1HTT_BTagScouting_v15', - 'DST_L1HTT_CaloBTagScouting_v14', - 'DST_L1HTT_CaloScouting_PFScouting_v15', - 'DST_ZeroBias_BTagScouting_v15', - 'DST_ZeroBias_CaloScouting_PFScouting_v14', + SelectEvents = cms.untracked.PSet( SelectEvents = cms.vstring( 'DST_Run3_PFScoutingPixelTracking_v16', 'HLT_Ele115_CaloIdVT_GsfTrkIdT_v14', 'HLT_Ele35_WPTight_Gsf_v9', 'HLT_IsoMu27_v16', @@ -90908,12 +92789,12 @@ process.HLTEle33CaloIdLMWSequence = cms.Sequence( process.HLTEle33CaloIdLSequence + process.hltEle33CaloIdLMWPMS2Filter ) process.HLTDoubleEle33CaloIdLUnseededSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltDiEG33EtUnseededFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverEUnseeded + process.hltDiEG33HEUnseededFilter + process.hltEgammaClusterShapeUnseeded + process.hltDiEG33CaloIdLClusterShapeUnseededFilter + process.HLTElePixelMatchUnseededSequence + process.hltDiEle33CaloIdLPixelMatchUnseededFilter ) process.HLTDoubleEle33CaloIdLMWSequence = cms.Sequence( process.HLTDoubleEle33CaloIdLUnseededSequence + process.hltDiEle33CaloIdLMWPMS2UnseededFilter ) -process.HLTPFHcalClusteringForEgamma = cms.Sequence( process.hltRegionalTowerForEgamma + process.hltParticleFlowRecHitHBHE + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL ) +process.HLTPFHcalClustering = cms.Sequence( process.hltParticleFlowRecHitHBHE + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL ) process.HLTAK4CaloJetsPrePFRecoSequence = cms.Sequence( process.HLTDoCaloSequencePF + process.hltAK4CaloJetsPF ) process.HLTPreAK4PFJetsRecoSequence = cms.Sequence( process.HLTAK4CaloJetsPrePFRecoSequence + process.hltAK4CaloJetsPFEt5 ) process.HLTTrackReconstructionForPFNoMu = cms.Sequence( process.HLTDoLocalPixelSequence + process.HLTRecopixelvertexingSequence + process.HLTDoLocalStripSequence + process.HLTIterativeTrackingIter02 ) process.HLTTrackReconstructionForIsoElectronIter02 = cms.Sequence( process.HLTPreAK4PFJetsRecoSequence + process.HLTTrackReconstructionForPFNoMu ) -process.HLTDoubleEle24erWPTightGsfForTauSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltDoubleEGL1EGerFilter + process.hltDoubleEG24L1EGEtFilter + process.hltEgammaClusterShape + process.hltDoubleEle24erWPTightClusterShapeFilterForTau + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltDoubleEle24erWPTightHEFilterForTau + process.hltEgammaEcalPFClusterIso + process.hltDoubleEle24erWPTightEcalIsoFilterForTau + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltDoubleEle24erWPTightHcalIsoFilterForTau + process.HLTElePixelMatchSequence + process.hltDoubleEle24erWPTightPixelMatchFilterForTau + process.hltDoubleEle24erWPTightPMS2FilterForTau + process.HLTGsfElectronSequence + process.hltDoubleEle24erWPTightGsfOneOEMinusOneOPFilterForTau + process.hltDoubleEle24erWPTightGsfMissingHitsFilterForTau + process.hltDoubleEle24erWPTightGsfDetaFilterForTau + process.hltDoubleEle24erWPTightGsfDphiFilterForTau + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltDoubleEle24erWPTightGsfTrackIsoFilterForTau ) +process.HLTDoubleEle24erWPTightGsfForTauSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltDoubleEGL1EGerFilter + process.hltDoubleEG24L1EGEtFilter + process.hltEgammaClusterShape + process.hltDoubleEle24erWPTightClusterShapeFilterForTau + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltDoubleEle24erWPTightHEFilterForTau + process.hltEgammaEcalPFClusterIso + process.hltDoubleEle24erWPTightEcalIsoFilterForTau + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltDoubleEle24erWPTightHcalIsoFilterForTau + process.HLTElePixelMatchSequence + process.hltDoubleEle24erWPTightPixelMatchFilterForTau + process.hltDoubleEle24erWPTightPMS2FilterForTau + process.HLTGsfElectronSequence + process.hltDoubleEle24erWPTightGsfOneOEMinusOneOPFilterForTau + process.hltDoubleEle24erWPTightGsfMissingHitsFilterForTau + process.hltDoubleEle24erWPTightGsfDetaFilterForTau + process.hltDoubleEle24erWPTightGsfDphiFilterForTau + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltDoubleEle24erWPTightGsfTrackIsoFilterForTau ) process.HLTDoubleEle8CaloIdMGsfTrackIdMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaCandidatesWrapper + process.hltEG8EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG8HEFilter + process.hltEgammaClusterShape + process.hltEG8CaloIdMClusterShapeFilter + process.HLTElePixelMatchSequence + process.hltDoubleEle8CaloIdMPixelMatchFilter + process.HLTGsfElectronSequence + process.hltDoubleEle8CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + process.hltDoubleEle8CaloIdMGsfTrackIdMDetaFilter + process.hltDoubleEle8CaloIdMGsfTrackIdMDphiFilter ) process.HLTAK4PFJetsReconstructionSequence = cms.Sequence( process.HLTL2muonrecoSequence + process.HLTL3muonrecoSequence + process.HLTTrackReconstructionForPF + process.HLTParticleFlowSequence + process.hltAK4PFJets + process.hltAK4PFJetsLooseID + process.hltAK4PFJetsTightID ) process.HLTAK4PFCorrectorProducersSequence = cms.Sequence( process.hltAK4PFFastJetCorrector + process.hltAK4PFRelativeCorrector + process.hltAK4PFAbsoluteCorrector + process.hltAK4PFResidualCorrector + process.hltAK4PFCorrector ) @@ -90963,22 +92844,22 @@ process.HLTDoublePho33CaloIdLUnseededSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltDiEG33EtUnseededFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverEUnseeded + process.hltDiEG33HEUnseededFilter + process.hltEgammaClusterShapeUnseeded + process.hltDiEG33CaloIdLClusterShapeUnseededFilter ) process.HLTDoublePho70Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGNonIsoOrWithJetAndTauFilter + process.hltEG70EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG70HEFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltDiEG70EtUnseededFilter + process.hltEgammaHoverEUnseeded + process.hltDiEG70HEUnseededFilter ) process.HLTDoublePho85Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGNonIsoOrWithJetAndTauFilter + process.hltEG85EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG85HEFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltDiEG85EtUnseededFilter + process.hltEgammaHoverEUnseeded + process.hltDiEG85HEUnseededFilter ) -process.HLTEle20WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG20L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle20WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle20WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle20WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle20WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle20WPTightPixelMatchFilter + process.hltEle20WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle20WPTightGsfOneOEMinusOneOPFilter + process.hltEle20WPTightGsfMissingHitsFilter + process.hltEle20WPTightGsfDetaFilter + process.hltEle20WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle20WPTightGsfTrackIsoFilter ) -process.HLTEle15WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG15L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle15WPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15WPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle15WPLoose1EcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle15WPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle15WPLoose1PixelMatchFilter + process.hltEle15WPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle15WPLoose1GsfOneOEMinusOneOPFilter + process.hltEle15WPLoose1GsfDetaFilter + process.hltEle15WPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15WPLoose1GsfTrackIsoFilter ) -process.HLTEle17WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG17L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle17WPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle17WPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle17WPLoose1EcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle17WPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle17WPLoose1PixelMatchFilter + process.hltEle17WPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle17WPLoose1GsfOneOEMinusOneOPFilter + process.hltEle17WPLoose1GsfDetaFilter + process.hltEle17WPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle17WPLoose1GsfTrackIsoFilter ) -process.HLTEle20WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG20L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle20WPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle20WPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle20WPLoose1EcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle20WPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle20WPLoose1PixelMatchFilter + process.hltEle20WPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle20WPLoose1GsfOneOEMinusOneOPFilter + process.hltEle20WPLoose1GsfDetaFilter + process.hltEle20WPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle20WPLoose1GsfTrackIsoFilter ) -process.HLTEle20Eta2p1WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrEtaRFilter + process.hltEG20L1SingleEGLowETOrEtaREtFilter + process.hltEgammaClusterShape + process.hltEle20erWPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle20erWPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle20erWPLoose1EcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle20erWPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle20erWPLoose1PixelMatchFilter + process.hltEle20erWPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle20erWPLoose1GsfOneOEMinusOneOPFilter + process.hltEle20erWPLoose1GsfDetaFilter + process.hltEle20erWPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle20erWPLoose1GsfTrackIsoFilter ) -process.HLTDiEle27L1DoubleEGWPTightCaloOnlySequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG27L1SingleAndDoubleEGEtFilter + process.hltEgammaClusterShape + process.hltEle27L1DoubleEGWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle27L1DoubleEGWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle27L1DoubleEGWPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle27L1DoubleEGWPTightHcalIsoFilter + process.hltDiEG27L1SingleAndDoubleEGEtFilter + process.hltDiEle27L1DoubleEGWPTightClusterShapeFilter + process.hltDiEle27L1DoubleEGWPTightHEFilter + process.hltDiEle27L1DoubleEGWPTightEcalIsoFilter + process.hltDiEle27L1DoubleEGWPTightHcalIsoFilter ) -process.HLTEle27WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG27L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle27WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle27WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle27WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle27WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle27WPTightPixelMatchFilter + process.hltEle27WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle27WPTightGsfOneOEMinusOneOPFilter + process.hltEle27WPTightGsfMissingHitsFilter + process.hltEle27WPTightGsfDetaFilter + process.hltEle27WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle27WPTightGsfTrackIsoFilter ) -process.HLTEle28WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG28L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle28WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle28WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle28WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle28WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle28WPTightPixelMatchFilter + process.hltEle28WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle28WPTightGsfOneOEMinusOneOPFilter + process.hltEle28WPTightGsfMissingHitsFilter + process.hltEle28WPTightGsfDetaFilter + process.hltEle28WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle28WPTightGsfTrackIsoFilter ) -process.HLTEle30WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG30L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle30WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle30WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle30WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle30WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle30WPTightPixelMatchFilter + process.hltEle30WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle30WPTightGsfOneOEMinusOneOPFilter + process.hltEle30WPTightGsfMissingHitsFilter + process.hltEle30WPTightGsfDetaFilter + process.hltEle30WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle30WPTightGsfTrackIsoFilter ) -process.HLTEle32WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG32L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle32WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle32WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle32WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle32WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle32WPTightPixelMatchFilter + process.hltEle32WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle32WPTightGsfOneOEMinusOneOPFilter + process.hltEle32WPTightGsfMissingHitsFilter + process.hltEle32WPTightGsfDetaFilter + process.hltEle32WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle32WPTightGsfTrackIsoFilter ) -process.HLTEle35WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG35L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle35noerWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle35noerWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle35noerWPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle35noerWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle35noerWPTightPixelMatchFilter + process.hltEle35noerWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle35noerWPTightGsfOneOEMinusOneOPFilter + process.hltEle35noerWPTightGsfMissingHitsFilter + process.hltEle35noerWPTightGsfDetaFilter + process.hltEle35noerWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle35noerWPTightGsfTrackIsoFilter ) -process.HLTSingleEleGsfL1EGMTSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltSingleEle35WPTightGsfL1EGMTL1MatchFilter + process.hltSingleEle35WPTightGsfL1EGMTEtFilter + process.hltEgammaClusterShape + process.hltSingleEle35WPTightGsfL1EGMTClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltSingleEle35WPTightGsfL1EGMTHEFilter + process.hltEgammaEcalPFClusterIso + process.hltSingleEle35WPTightGsfL1EGMTEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltSingleEle35WPTightGsfL1EGMTHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltSingleEle35WPTightGsfL1EGMTPixelMatchFilter + process.hltSingleEle35WPTightGsfL1EGMTPMS2Filter + process.HLTGsfElectronSequence + process.hltSingleEle35WPTightGsfL1EGMTOneOEMinusOneOPFilter + process.hltSingleEle35WPTightGsfL1EGMTChi2Filter + process.hltSingleEle35WPTightGsfL1EGMTMissingHitsFilter + process.hltSingleEle35WPTightGsfL1EGMTDetaFilter + process.hltSingleEle35WPTightGsfL1EGMTDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltSingleEle35WPTightGsfL1EGMTTrackIsoFilter ) -process.HLTEle38WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG38L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle38noerWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle38noerWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle38noerWPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle38noerWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle38noerWPTightPixelMatchFilter + process.hltEle38noerWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle38noerWPTightGsfOneOEMinusOneOPFilter + process.hltEle38noerWPTightGsfMissingHitsFilter + process.hltEle38noerWPTightGsfDetaFilter + process.hltEle38noerWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle38noerWPTightGsfTrackIsoFilter ) -process.HLTEle40WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG40L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle40noerWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle40noerWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle40noerWPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle40noerWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle40noerWPTightPixelMatchFilter + process.hltEle40noerWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle40noerWPTightGsfOneOEMinusOneOPFilter + process.hltEle40noerWPTightGsfMissingHitsFilter + process.hltEle40noerWPTightGsfDetaFilter + process.hltEle40noerWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle40noerWPTightGsfTrackIsoFilter ) -process.HLTEle32L1DoubleEGWPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG32L1SingleAndDoubleEGEtFilter + process.hltEgammaClusterShape + process.hltEle32L1DoubleEGWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle32L1DoubleEGWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle32L1DoubleEGWPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle32L1DoubleEGWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle32L1DoubleEGWPTightPixelMatchFilter + process.hltEle32L1DoubleEGWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle32L1DoubleEGWPTightGsfOneOEMinusOneOPFilter + process.hltEle32L1DoubleEGWPTightGsfMissingHitsFilter + process.hltEle32L1DoubleEGWPTightGsfDetaFilter + process.hltEle32L1DoubleEGWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle32L1DoubleEGWPTightGsfTrackIsoFilter ) -process.HLTEle24erWPTightGsfForTauSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1EGerAndTauFilter + process.hltEG24L1EGandTauEtFilter + process.hltEgammaClusterShape + process.hltEle24erWPTightClusterShapeFilterForTau + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle24erWPTightHEFilterForTau + process.hltEgammaEcalPFClusterIso + process.hltEle24erWPTightEcalIsoFilterForTau + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle24erWPTightHcalIsoFilterForTau + process.HLTElePixelMatchSequence + process.hltEle24erWPTightPixelMatchFilterForTau + process.hltEle24erWPTightPMS2FilterForTau + process.HLTGsfElectronSequence + process.hltEle24erWPTightGsfOneOEMinusOneOPFilterForTau + process.hltEle24erWPTightGsfMissingHitsFilterForTau + process.hltEle24erWPTightGsfDetaFilterForTau + process.hltEle24erWPTightGsfDphiFilterForTau + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle24erWPTightGsfTrackIsoFilterForTau ) +process.HLTEle20WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG20L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle20WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle20WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle20WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle20WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle20WPTightPixelMatchFilter + process.hltEle20WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle20WPTightGsfOneOEMinusOneOPFilter + process.hltEle20WPTightGsfMissingHitsFilter + process.hltEle20WPTightGsfDetaFilter + process.hltEle20WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle20WPTightGsfTrackIsoFilter ) +process.HLTEle15WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG15L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle15WPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15WPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle15WPLoose1EcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle15WPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle15WPLoose1PixelMatchFilter + process.hltEle15WPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle15WPLoose1GsfOneOEMinusOneOPFilter + process.hltEle15WPLoose1GsfDetaFilter + process.hltEle15WPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15WPLoose1GsfTrackIsoFilter ) +process.HLTEle17WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG17L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle17WPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle17WPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle17WPLoose1EcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle17WPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle17WPLoose1PixelMatchFilter + process.hltEle17WPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle17WPLoose1GsfOneOEMinusOneOPFilter + process.hltEle17WPLoose1GsfDetaFilter + process.hltEle17WPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle17WPLoose1GsfTrackIsoFilter ) +process.HLTEle20WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrFilter + process.hltEG20L1SingleEGLowETOrEtFilter + process.hltEgammaClusterShape + process.hltEle20WPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle20WPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle20WPLoose1EcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle20WPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle20WPLoose1PixelMatchFilter + process.hltEle20WPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle20WPLoose1GsfOneOEMinusOneOPFilter + process.hltEle20WPLoose1GsfDetaFilter + process.hltEle20WPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle20WPLoose1GsfTrackIsoFilter ) +process.HLTEle20Eta2p1WPLooseGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGLowETOrEtaRFilter + process.hltEG20L1SingleEGLowETOrEtaREtFilter + process.hltEgammaClusterShape + process.hltEle20erWPLoose1ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle20erWPLoose1HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle20erWPLoose1EcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle20erWPLoose1HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle20erWPLoose1PixelMatchFilter + process.hltEle20erWPLoose1PMS2Filter + process.HLTGsfElectronSequence + process.hltEle20erWPLoose1GsfOneOEMinusOneOPFilter + process.hltEle20erWPLoose1GsfDetaFilter + process.hltEle20erWPLoose1GsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle20erWPLoose1GsfTrackIsoFilter ) +process.HLTDiEle27L1DoubleEGWPTightCaloOnlySequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG27L1SingleAndDoubleEGEtFilter + process.hltEgammaClusterShape + process.hltEle27L1DoubleEGWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle27L1DoubleEGWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle27L1DoubleEGWPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle27L1DoubleEGWPTightHcalIsoFilter + process.hltDiEG27L1SingleAndDoubleEGEtFilter + process.hltDiEle27L1DoubleEGWPTightClusterShapeFilter + process.hltDiEle27L1DoubleEGWPTightHEFilter + process.hltDiEle27L1DoubleEGWPTightEcalIsoFilter + process.hltDiEle27L1DoubleEGWPTightHcalIsoFilter ) +process.HLTEle27WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG27L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle27WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle27WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle27WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle27WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle27WPTightPixelMatchFilter + process.hltEle27WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle27WPTightGsfOneOEMinusOneOPFilter + process.hltEle27WPTightGsfMissingHitsFilter + process.hltEle27WPTightGsfDetaFilter + process.hltEle27WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle27WPTightGsfTrackIsoFilter ) +process.HLTEle28WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG28L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle28WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle28WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle28WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle28WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle28WPTightPixelMatchFilter + process.hltEle28WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle28WPTightGsfOneOEMinusOneOPFilter + process.hltEle28WPTightGsfMissingHitsFilter + process.hltEle28WPTightGsfDetaFilter + process.hltEle28WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle28WPTightGsfTrackIsoFilter ) +process.HLTEle30WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG30L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle30WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle30WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle30WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle30WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle30WPTightPixelMatchFilter + process.hltEle30WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle30WPTightGsfOneOEMinusOneOPFilter + process.hltEle30WPTightGsfMissingHitsFilter + process.hltEle30WPTightGsfDetaFilter + process.hltEle30WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle30WPTightGsfTrackIsoFilter ) +process.HLTEle32WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG32L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle32WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle32WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle32WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle32WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle32WPTightPixelMatchFilter + process.hltEle32WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle32WPTightGsfOneOEMinusOneOPFilter + process.hltEle32WPTightGsfMissingHitsFilter + process.hltEle32WPTightGsfDetaFilter + process.hltEle32WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle32WPTightGsfTrackIsoFilter ) +process.HLTEle35WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG35L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle35noerWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle35noerWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle35noerWPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle35noerWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle35noerWPTightPixelMatchFilter + process.hltEle35noerWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle35noerWPTightGsfOneOEMinusOneOPFilter + process.hltEle35noerWPTightGsfMissingHitsFilter + process.hltEle35noerWPTightGsfDetaFilter + process.hltEle35noerWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle35noerWPTightGsfTrackIsoFilter ) +process.HLTSingleEleGsfL1EGMTSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltSingleEle35WPTightGsfL1EGMTL1MatchFilter + process.hltSingleEle35WPTightGsfL1EGMTEtFilter + process.hltEgammaClusterShape + process.hltSingleEle35WPTightGsfL1EGMTClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltSingleEle35WPTightGsfL1EGMTHEFilter + process.hltEgammaEcalPFClusterIso + process.hltSingleEle35WPTightGsfL1EGMTEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltSingleEle35WPTightGsfL1EGMTHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltSingleEle35WPTightGsfL1EGMTPixelMatchFilter + process.hltSingleEle35WPTightGsfL1EGMTPMS2Filter + process.HLTGsfElectronSequence + process.hltSingleEle35WPTightGsfL1EGMTOneOEMinusOneOPFilter + process.hltSingleEle35WPTightGsfL1EGMTChi2Filter + process.hltSingleEle35WPTightGsfL1EGMTMissingHitsFilter + process.hltSingleEle35WPTightGsfL1EGMTDetaFilter + process.hltSingleEle35WPTightGsfL1EGMTDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltSingleEle35WPTightGsfL1EGMTTrackIsoFilter ) +process.HLTEle38WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG38L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle38noerWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle38noerWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle38noerWPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle38noerWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle38noerWPTightPixelMatchFilter + process.hltEle38noerWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle38noerWPTightGsfOneOEMinusOneOPFilter + process.hltEle38noerWPTightGsfMissingHitsFilter + process.hltEle38noerWPTightGsfDetaFilter + process.hltEle38noerWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle38noerWPTightGsfTrackIsoFilter ) +process.HLTEle40WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEG40L1SingleEGOrEtFilter + process.hltEgammaClusterShape + process.hltEle40noerWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle40noerWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle40noerWPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle40noerWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle40noerWPTightPixelMatchFilter + process.hltEle40noerWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle40noerWPTightGsfOneOEMinusOneOPFilter + process.hltEle40noerWPTightGsfMissingHitsFilter + process.hltEle40noerWPTightGsfDetaFilter + process.hltEle40noerWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle40noerWPTightGsfTrackIsoFilter ) +process.HLTEle32L1DoubleEGWPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG32L1SingleAndDoubleEGEtFilter + process.hltEgammaClusterShape + process.hltEle32L1DoubleEGWPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle32L1DoubleEGWPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle32L1DoubleEGWPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle32L1DoubleEGWPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle32L1DoubleEGWPTightPixelMatchFilter + process.hltEle32L1DoubleEGWPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle32L1DoubleEGWPTightGsfOneOEMinusOneOPFilter + process.hltEle32L1DoubleEGWPTightGsfMissingHitsFilter + process.hltEle32L1DoubleEGWPTightGsfDetaFilter + process.hltEle32L1DoubleEGWPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle32L1DoubleEGWPTightGsfTrackIsoFilter ) +process.HLTEle24erWPTightGsfForTauSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1EGerAndTauFilter + process.hltEG24L1EGandTauEtFilter + process.hltEgammaClusterShape + process.hltEle24erWPTightClusterShapeFilterForTau + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle24erWPTightHEFilterForTau + process.hltEgammaEcalPFClusterIso + process.hltEle24erWPTightEcalIsoFilterForTau + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle24erWPTightHcalIsoFilterForTau + process.HLTElePixelMatchSequence + process.hltEle24erWPTightPixelMatchFilterForTau + process.hltEle24erWPTightPMS2FilterForTau + process.HLTGsfElectronSequence + process.hltEle24erWPTightGsfOneOEMinusOneOPFilterForTau + process.hltEle24erWPTightGsfMissingHitsFilterForTau + process.hltEle24erWPTightGsfDetaFilterForTau + process.hltEle24erWPTightGsfDphiFilterForTau + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle24erWPTightGsfTrackIsoFilterForTau ) process.HLTRecoJetSequenceAK4UncorrectedPF = cms.Sequence( process.HLTDoCaloSequencePF + process.hltAK4CaloJetsPF ) process.HLTRecoJetSequenceAK4PrePF = cms.Sequence( process.HLTRecoJetSequenceAK4UncorrectedPF + process.hltAK4CaloJetsPFEt5 ) process.HLTParticleFlowSequenceForTaus = cms.Sequence( process.HLTPreshowerSequence + process.hltParticleFlowRecHitECALUnseeded + process.hltParticleFlowRecHitHBHE + process.hltParticleFlowRecHitHF + process.hltParticleFlowRecHitPSUnseeded + process.hltParticleFlowClusterECALUncorrectedUnseeded + process.hltParticleFlowClusterPSUnseeded + process.hltParticleFlowClusterECALUnseeded + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL + process.hltParticleFlowClusterHF + process.hltLightPFTracks + process.hltParticleFlowBlockForTaus + process.hltParticleFlowForTaus ) @@ -91005,8 +92886,7 @@ process.HLTDoFullUnpackingEgammaEcalMFSequence = cms.Sequence( process.hltEcalDigis + process.hltEcalPreshowerDigis + process.hltEcalUncalibRecHit + process.hltEcalDetIdToBeRecovered + process.hltEcalRecHit + process.hltEcalPreshowerRecHit ) process.HLTPFClusteringEcalMFForMuons = cms.Sequence( process.hltRecHitInRegionForMuonsMF + process.hltRecHitInRegionForMuonsES + process.hltParticleFlowRecHitECALForMuonsMF + process.hltParticleFlowRecHitPSForMuons + process.hltParticleFlowClusterECALUncorrectedForMuonsMF + process.hltParticleFlowClusterPSForMuons + process.hltParticleFlowClusterECALForMuonsMF ) process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalMFSequence + process.HLTDoLocalHcalSequence + process.hltTowerMakerForECALMF + process.hltTowerMakerForHCAL + process.hltFixedGridRhoFastjetECALMFForMuons + process.hltFixedGridRhoFastjetHCAL + process.HLTPFClusteringEcalMFForMuons + process.hltMuonEcalMFPFClusterIsoForMuons ) -process.HLTPFHcalRegClusteringForMuons = cms.Sequence( process.hltRegionalTowerForMuonsReg + process.hltParticleFlowRecHitHBHE + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL ) -process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons = cms.Sequence( process.HLTPFHcalRegClusteringForMuons + process.hltMuonHcalRegPFClusterIsoForMuons ) +process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons = cms.Sequence( process.HLTPFHcalClustering + process.hltMuonHcalRegPFClusterIsoForMuons ) process.HLTTrackReconstructionForIsoL3MuonIter02 = cms.Sequence( process.HLTPixelTrackingL3Muon + process.HLTDoLocalStripSequence + process.HLTIterativeTrackingL3MuonIter02 ) process.HLTMu20Eta2p1Tau24Eta2p1IsolationSequence = cms.Sequence( process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons + process.hltL3fBigORMu18erTauXXer2p1L1f0L2f10QL3Filtered20QL3pfecalIsoRhoFilteredEB0p14EE0p10 + process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons + process.hltL3fBigORMu18erTauXXer2p1L1f0L2f10QL3Filtered20QL3pfhcalIsoRhoFilteredHB0p16HE0p20 + process.HLTTrackReconstructionForIsoL3MuonIter02 + process.hltMuonTkRelIsolationCut0p07Map ) process.HLTLooseChargedIsoAntiMuonPFTau27Sequence = cms.Sequence( process.HLTLooseChargedIsoPFTauSequence + process.hltPFTau27 + process.hltSelectedPFTausTrackFinding + process.hltPFTau27Track + process.hltSelectedPFTausTrackFindingLooseChargedIsolation + process.hltPFTau27TrackLooseChargedIso + process.hltPFTauAgainstMuonDiscriminator + process.hltSelectedPFTausTrackFindingLooseChargedIsolationAgainstMuon + process.hltPFTau27TrackLooseChargedIsoAgainstMuon ) @@ -91109,7 +92989,7 @@ process.HLTMu8DiEle12CaloIdLTrackIdLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegL1MatchFilter + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegHEFilter + process.HLTElePixelMatchSequence + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegOneOEMinusOneOPFilter + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegDetaFilter + process.hltMu8DiEle12CaloIdLTrackIdLElectronlegDphiFilter ) process.HLTSingleEle8CaloIdMGsfTrackIdMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaCandidatesWrapper + process.hltMu8Ele8EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu8Ele8HEFilter + process.hltEgammaClusterShape + process.hltMu8Ele8CaloIdMClusterShapeFilter + process.HLTElePixelMatchSequence + process.hltMu8Ele8CaloIdMPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu8Ele8CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + process.hltMu8Ele8CaloIdMGsfTrackIdMDetaFilter + process.hltMu8Ele8CaloIdMGsfTrackIdMDphiFilter ) process.HLTMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegSequence = cms.Sequence( process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0 + process.HLTL2muonrecoSequence + cms.ignore(process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL2Filtered5) + process.HLTL3muonrecoSequence + cms.ignore(process.hltL1fForIterL3Mu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0) + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3Filtered8 + process.HLTL3muontrkisovvlSequence + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3IsoFiltered8 ) -process.HLTMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + process.hltEgammaEcalPFClusterIso + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) +process.HLTMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + process.hltEgammaEcalPFClusterIso + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltMu8TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) process.HLTBtagDeepCSVSequencePF = cms.Sequence( process.hltVerticesPF + process.hltVerticesPFSelector + process.hltVerticesPFFilter + process.hltPFJetForBtagSelector + process.hltPFJetForBtag + process.hltDeepBLifetimeTagInfosPF + process.hltDeepInclusiveVertexFinderPF + process.hltDeepInclusiveSecondaryVerticesPF + process.hltDeepTrackVertexArbitratorPF + process.hltDeepInclusiveMergedVerticesPF + process.hltDeepSecondaryVertexTagInfosPF + process.hltDeepCombinedSecondaryVertexBJetTagsInfos + process.hltDeepCombinedSecondaryVertexBJetTagsPF ) process.HLTBTagMuDiJet20L1FastJetSequenceL25 = cms.Sequence( process.HLTL2muonrecoSequence + process.hltBSoftMuonGetJetsFromDiJet20L1FastJet + process.hltSelector4JetsDiJet20L1FastJet + process.hltBSoftMuonDiJet20L1FastJetL25Jets + process.hltBSoftMuonDiJet20L1FastJetL25TagInfos + process.hltBSoftMuonDiJet20L1FastJetL25BJetTagsByDR ) process.HLTBTagMuDiJet20L1FastJetMu5SelSequenceL3 = cms.Sequence( process.HLTL3muonrecoNocandSequence + process.hltBSoftMuonMu5L3 + process.hltBSoftMuonDiJet20L1FastJetMu5SelL3TagInfos + process.hltBSoftMuonDiJet20L1FastJetMu5SelL3BJetTagsByDR ) @@ -91138,12 +93018,12 @@ process.HLTBTagMuAK8DiJet170L1FastJetMu5SelSequenceL3noalgo = cms.Sequence( process.HLTL3muonrecoNocandSequence + process.hltBSoftMuonMu5L3noalgo + process.hltBSoftMuonAK8DiJet170L1FastJetMu5SelL3TagInfosnoalgo + process.hltBSoftMuonAK8DiJet170L1FastJetMu5SelL3BJetTagsByDRnoalgo ) process.HLTBTagMuAK8Jet170L1FastJetDoubleMu5SelSequenceL3noalgo = cms.Sequence( process.HLTL3muonrecoSequence + process.hltL3fL1sDoubleMu5Filtered + process.hltBSoftMuonDoubleMu5L3noalgo + process.hltBSoftMuonAK8Jet170L1FastJetDoubleMu5SelL3TagInfosnoalgo + process.hltBSoftMuonAK8Jet170L1FastJetDoubleMu5SelL3BJetTagsByDRnoalgo ) process.HLTBTagMuJet300L1AK8FastJetMu5SelSequenceL3noalgo = cms.Sequence( process.HLTL3muonrecoNocandSequence + process.hltBSoftMuonMu5L3noalgo + process.hltBSoftMuonJet300L1AK8FastJetMu5SelL3TagInfosnoalgo + process.hltBSoftMuonJet300L1AK8FastJetMu5SelL3BJetTagsByDRnoalgo ) -process.HLTEle15Ele8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1LowETSingleAndDoubleEGOrPairFilter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg2Filter + process.hltEgammaClusterShape + process.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg2Filter + process.hltEgammaEcalPFClusterIso + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + process.HLTElePixelMatchSequence + process.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + process.HLTGsfElectronSequence + process.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg2Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg2Filter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) -process.HLTEle23Ele12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrPairFilter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg2Filter + process.hltEgammaClusterShape + process.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg2Filter + process.hltEgammaEcalPFClusterIso + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + process.HLTElePixelMatchSequence + process.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + process.HLTGsfElectronSequence + process.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg2Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg2Filter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) +process.HLTEle15Ele8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1LowETSingleAndDoubleEGOrPairFilter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEtLeg2Filter + process.hltEgammaClusterShape + process.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHELeg2Filter + process.hltEgammaEcalPFClusterIso + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + process.HLTElePixelMatchSequence + process.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + process.HLTGsfElectronSequence + process.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDetaLeg2Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLDphiLeg2Filter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + process.hltEle15Ele8CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) +process.HLTEle23Ele12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrPairFilter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEtLeg2Filter + process.hltEgammaClusterShape + process.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHELeg2Filter + process.hltEgammaEcalPFClusterIso + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + process.HLTElePixelMatchSequence + process.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + process.HLTGsfElectronSequence + process.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDetaLeg2Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLDphiLeg2Filter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + process.hltEle23Ele12CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) process.HLTMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegSequence = cms.Sequence( process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL1Filtered0 + process.HLTL2muonrecoSequence + cms.ignore(process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL2Filtered10) + process.HLTL3muonrecoSequence + cms.ignore(process.hltL1fForIterL3Mu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL1Filtered0) + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL3Filtered23 + process.HLTL3muontrkisovvlSequence + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLMuonlegL3IsoFiltered23 ) -process.HLTMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHEFilter + process.hltEgammaEcalPFClusterIso + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDetaFilter + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) +process.HLTMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHEFilter + process.hltEgammaEcalPFClusterIso + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDetaFilter + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltMu23TrkIsoVVLEle12CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) process.HLTMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegSequence = cms.Sequence( process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0 + process.HLTL2muonrecoSequence + cms.ignore(process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL2Filtered5) + process.HLTL3muonrecoSequence + cms.ignore(process.hltL1fForIterL3Mu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL1Filtered0) + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3Filtered12 + process.HLTL3muontrkisovvlSequence + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLMuonlegL3IsoFiltered12 ) -process.HLTMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + process.hltEgammaEcalPFClusterIso + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) +process.HLTMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegL1MatchFilter + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHEFilter + process.hltEgammaEcalPFClusterIso + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegOneOEMinusOneOPFilter + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDetaFilter + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltMu12TrkIsoVVLEle23CaloIdLTrackIdLIsoVLElectronlegTrackIsoFilter ) process.HLTMu12DoubleUnSeededPho20Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltEG20EtUnseededFilter + process.HLTDoLocalHcalSequence + process.hltTowerMakerForAll + process.hltEgammaHoverEUnseeded + process.hltMu12DiEG20HEUnseededFilter ) process.HLTPho20CaloIdLV2TripleSeededSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1TripleEGOrDoubleEGOrSingleEG + process.hltEG20EtL1TripleEGFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG20HEL1TripleEGFilter + process.hltEgammaClusterShape + process.hltEG20CaloIdLV2ClusterShapeL1TripleEGFilter ) process.HLTTriplePho20CaloIdLV2UnseededSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltEG20EtUnseededFilter + process.HLTDoLocalHcalSequence + process.hltEgammaHoverEUnseeded + process.hltEG20HEUnseededFilter + process.hltEgammaClusterShapeUnseeded + process.hltTriEG20CaloIdLV2ClusterShapeUnseededFilter ) @@ -91164,22 +93044,22 @@ process.HLTPhoton175Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + process.hltEG175EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG175HEFilter ) process.HLTPhoton200Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + process.hltEG200EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG200HEFilter ) process.HLTTrackReconstructionForIsoForPhotons = cms.Sequence( process.HLTPreAK4PFJetsRecoSequence + process.HLTTrackReconstructionForPFNoMu ) -process.HLTPhoton100EBTightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG100EBTightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG100EBTightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG100EBTightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG100EBTightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG100EBTightIDTightIsotEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG100EBTightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG100EBTightIDTightIsoTrackIsoFilter ) -process.HLTPhoton110EBTightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG110EBTightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG110EBTightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG110EBTightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG110EBTightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG110EBTightIDTightIsotEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG110EBTightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG110EBTightIDTightIsoTrackIsoFilter ) -process.HLTPhoton120EBTightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG120EBTightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG120EBTightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG120EBTightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG120EBTightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG120EBTightIDTightIsotEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG120EBTightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG120EBTightIDTightIsoTrackIsoFilter ) +process.HLTPhoton100EBTightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG100EBTightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG100EBTightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG100EBTightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG100EBTightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG100EBTightIDTightIsotEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG100EBTightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG100EBTightIDTightIsoTrackIsoFilter ) +process.HLTPhoton110EBTightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG110EBTightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG110EBTightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG110EBTightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG110EBTightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG110EBTightIDTightIsotEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG110EBTightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG110EBTightIDTightIsoTrackIsoFilter ) +process.HLTPhoton120EBTightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG120EBTightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG120EBTightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG120EBTightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG120EBTightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG120EBTightIDTightIsotEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG120EBTightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG120EBTightIDTightIsoTrackIsoFilter ) process.HLTPhoton100EBHE10Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG100EBHE10EtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG100EBHE10HEFilter ) process.HLTPhoton100EEHE10Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG100EEHE10EtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG100EEHE10HEFilter ) -process.HLTPhoton100EETightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG100EETightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG100EETightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG100EETightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG100EETightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG100EETightIDTightIsotEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG100EETightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG100EETightIDTightIsoTrackIsoFilter ) -process.HLTPhoton50R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG50R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG50R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG50R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG50R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG50R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG50R9Id90HE10IsoMTrackIsoFilter ) -process.HLTPhoton75R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG75R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG75R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG75R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG75R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG75R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG75R9Id90HE10IsoMTrackIsoFilter ) -process.HLTPhoton75R9Id90HE10IsoMEBOnlySequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG75R9Id90HE10IsoMEBOnlyEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG75R9Id90HE10IsoMEBOnlyHEFilter + process.hltEgammaR9ID + process.hltEG75R9Id90HE10IsoMEBOnlyR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG75R9Id90HE10IsoMEBOnlyEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG75R9Id90HE10IsoMEBOnlyHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG75R9Id90HE10IsoMEBOnlyTrackIsoFilter ) -process.HLTPhoton90R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG90R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG90R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG90R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG90R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG90R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG90R9Id90HE10IsoMTrackIsoFilter ) -process.HLTPhoton120R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG120R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG120R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG120R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG120R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG120R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG120R9Id90HE10IsoMTrackIsoFilter ) -process.HLTPhoton165R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG165R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG165R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG165R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG165R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG165R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG165R9Id90HE10IsoMTrackIsoFilter ) +process.HLTPhoton100EETightIDTightIsoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG100EETightIDTightIsoEtFilter + process.hltEgammaClusterShape + process.hltEG100EETightIDTightIsoClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG100EETightIDTightIsoHEFilter + process.hltEgammaR9ID + process.hltEG100EETightIDTightIsoR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG100EETightIDTightIsotEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG100EETightIDTightIsoHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG100EETightIDTightIsoTrackIsoFilter ) +process.HLTPhoton50R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG50R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG50R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG50R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG50R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG50R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG50R9Id90HE10IsoMTrackIsoFilter ) +process.HLTPhoton75R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG75R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG75R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG75R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG75R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG75R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG75R9Id90HE10IsoMTrackIsoFilter ) +process.HLTPhoton75R9Id90HE10IsoMEBOnlySequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG75R9Id90HE10IsoMEBOnlyEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG75R9Id90HE10IsoMEBOnlyHEFilter + process.hltEgammaR9ID + process.hltEG75R9Id90HE10IsoMEBOnlyR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG75R9Id90HE10IsoMEBOnlyEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG75R9Id90HE10IsoMEBOnlyHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG75R9Id90HE10IsoMEBOnlyTrackIsoFilter ) +process.HLTPhoton90R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG90R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG90R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG90R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG90R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG90R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG90R9Id90HE10IsoMTrackIsoFilter ) +process.HLTPhoton120R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG120R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG120R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG120R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG120R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG120R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG120R9Id90HE10IsoMTrackIsoFilter ) +process.HLTPhoton165R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG165R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG165R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG165R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG165R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG165R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG165R9Id90HE10IsoMTrackIsoFilter ) process.HLTDiphoton30L22R9Id85b90eORIso60CaloId15b35eANDHE12R9Id50b80eSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG30L1SingleAndDoubleEGOrEtFilter + process.hltEgammaR9ID + process.hltEG30LR9Id50b80eR9IdFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG30LHE12R9Id50b80eHEFilter + cms.ignore(process.hltEG30LR9Id85b90eHE12R9Id50b80eR9IdLastFilter) + process.hltEgammaClusterShape + cms.ignore(process.hltEG30LCaloId15b35eHE12R9Id50b80eClusterShapeFilter) + process.hltEgammaEcalPFClusterIso + cms.ignore(process.hltEG30LIso60CaloId15b35eHE12R9Id50b80eEcalIsoLastFilter) + process.hltEG30LRId85ORIso60CaloId15b35eANDHE12R9Id50b80eLegCombLastFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltDiEG22EtEta2p55UnseededFilter + process.hltEgammaR9IDUnseeded + process.hltDiEG22R9Id50b80eR9IdUnseededFilter + process.hltEgammaHoverEUnseeded + process.hltDiEG22HE12R9Id50b80eHEUnseededFilter + cms.ignore(process.hltEG22R9Id85b90eHE12R9Id50b80eR9UnseededLastFilter) + process.hltEgammaClusterShapeUnseeded + cms.ignore(process.hltEG22CaloId15b35eHE12R9Id50b80eClusterShapeUnseededFilter) + process.hltEgammaEcalPFClusterIsoUnseeded + cms.ignore(process.hltEG22Iso60CaloId15b35eHE12R9Id50b80eEcalIsoUnseededFilter) + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIsoUnseeded + cms.ignore(process.hltEG22Iso60CaloId15b35eHE12R9Id50b80eTrackIsoUnseededLastFilter) ) process.HLTDiphoton30PV18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55NewPixelMatchSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG30L1SingleAndDoubleEGOrEtFilter + process.hltEgammaR9ID + process.hltEG30PVR9Id50b80eR9IdFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG30PVHE10R9Id50b80eHEFilter + process.hltEG30PVR9Idb85e90HE10R9Id50b80eR9IdLastFilter + process.hltEgammaClusterShape + process.hltEG30PVCaloId15b35eHE10R9Id50b80eClusterShapeFilter + process.hltEgammaEcalPFClusterIso + process.hltEG30PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoFilter + process.hltEG30PVRId85ANDIso60CaloId15b35eANDHE10R9Id50b80eLegCombNewPixelMatchLastFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltDiEG18EtUnseededFilter + process.hltEgammaR9IDUnseeded + process.hltDiEG18PVR9Id50b80eR9IdUnseededFilter + process.hltEgammaHoverEUnseeded + process.hltDiEG18PVHE10R9Id50b80eHEUnseededFilter + process.HLTElePixelMatchUnseededSequence + process.hltDiEG18PVNewPixelMatchPMS2Filter + process.hltEG18PVR9Idb85e90HE10R9Id50b80eR9NewPixelMatchUnseededLastFilter + process.hltEgammaClusterShapeUnseeded + process.hltEG18PVCaloId15b35eHE10R9Id50b80eClusterShapeNewPixelMatchUnseededFilter + process.hltEgammaEcalPFClusterIsoUnseeded + process.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoNewPixelMatchUnseededFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIsoUnseeded + process.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eTrackIsoUnseededNewPixelMatchLastFilter + process.hltDiEG18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55CombMassNewPixelMatchLastFilter ) process.HLTDiphoton30PV18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55NoPixelVetoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG30L1SingleAndDoubleEGOrEtFilter + process.hltEgammaR9ID + process.hltEG30PVR9Id50b80eR9IdFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG30PVHE10R9Id50b80eHEFilter + process.hltEG30PVR9Idb85e90HE10R9Id50b80eR9IdLastFilter + process.hltEgammaClusterShape + process.hltEG30PVCaloId15b35eHE10R9Id50b80eClusterShapeFilter + process.hltEgammaEcalPFClusterIso + process.hltEG30PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoFilter + process.hltEG30PVRId85ANDIso60CaloId15b35eANDHE10R9Id50b80eLegCombNoPixelVetoLastFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltDiEG18EtUnseededFilter + process.hltEgammaR9IDUnseeded + process.hltDiEG18PVR9Id50b80eR9IdUnseededFilter + process.hltEgammaHoverEUnseeded + process.hltDiEG18PVHE10R9Id50b80eHEUnseededFilter + process.hltEG18PVR9Idb85e90HE10R9Id50b80eR9NoPixelVetoUnseededLastFilter + process.hltEgammaClusterShapeUnseeded + process.hltEG18PVCaloId15b35eHE10R9Id50b80eClusterShapeNoPixelVetoUnseededFilter + process.hltEgammaEcalPFClusterIsoUnseeded + process.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eEcalIsoNoPixelVetoUnseededFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIsoUnseeded + process.hltEG18PVIso60CaloId15b35eHE10R9Id50b80eTrackIsoUnseededNoPixelVetoLastFilter + process.hltDiEG18PVR9Idb85e90ANDIso60CaloId15b35eANDHE10R9Id50b80eMass55CombMassNoPixelVetoLastFilter ) -process.HLTPhoton35R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1EGAndTauFilter + process.hltEG35R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG35R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG35R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG35R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG35R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG35R9Id90HE10IsoMTrackIsoFilter ) +process.HLTPhoton35R9Id90HE10IsoMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1EGAndTauFilter + process.hltEG35R9Id90HE10IsoMEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG35R9Id90HE10IsoMHEFilter + process.hltEgammaR9ID + process.hltEG35R9Id90HE10IsoMR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG35R9Id90HE10IsoMEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG35R9Id90HE10IsoMHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG35R9Id90HE10IsoMTrackIsoFilter ) process.HLTMediumChargedIsoPFTauSequence = cms.Sequence( process.hltPFTauMediumAbsoluteChargedIsolationDiscriminator + process.hltPFTauMediumRelativeChargedIsolationDiscriminator + process.hltPFTauMediumAbsOrRelChargedIsolationDiscriminator ) process.HLTMediumChargedIsoPFTau35Sequence = cms.Sequence( process.HLTMediumChargedIsoPFTauSequence + process.hltPFTau35 + process.hltSelectedPFTausTrackFinding + process.hltPFTau35Track + process.hltPFTau2Prongs + process.hltSelectedPFTausTrackFindingMediumChargedIsolation + process.hltPFTau35TrackMediumChargedIso ) process.HLTIterativeTrackingTau3muNoL1MassIteration0 = cms.Sequence( process.hltPixelTracksForSeedsTau3muNoL1MassFilter + process.hltPixelTracksForSeedsTau3muNoL1MassFitter + process.hltPixelTracksTrackingRegionsForSeedsTau3muNoL1Mass + process.hltPixelLayerQuadruplets + process.hltPixelTracksHitDoubletsForSeedsTau3muNoL1Mass + process.hltPixelTracksHitQuadrupletsForSeedsTau3muNoL1Mass + process.hltPixelTracksForSeedsTau3muNoL1Mass + process.hltIter0DisplacedTau3muNoL1MassPixelSeedsFromPixelTracks + process.hltIter0DisplacedTau3muNoL1MassCkfTrackCandidates + process.hltIter0DisplacedTau3muNoL1MassCtfWithMaterialTracks + process.hltIter0DisplacedTau3muNoL1MassTrackCutClassifier + process.hltIter0DisplacedTau3muNoL1MassTrackSelectionHighPurity ) @@ -91200,13 +93080,13 @@ process.HLT2PromptTrackRequirementIter0DisplacedJetsMidPt = cms.Sequence( process.hltL3DisplacedDijetFullTracksJetTracksAssociatorAtVertexMidPt + process.hltL3DisplacedDijet100FullTracksTrackIPProducerMidPt + process.hltL3DisplacedDijetFullTracksJetTagProducerFromIPMidPt + process.hltTwoPromptHLTL3DisplacedDijetFullTracksHLTCaloJetTagFilterMidPt ) process.HLT2PromptTrackRequirementIter12DisplacedJetsMidPt = cms.Sequence( process.hltL4DisplacedDijetFullTracksJetPromptTracksAssociatorAtVertexMidPt + process.hltL4PromptDisplacedDijetFullTracksTrackIPProducerMidPt + process.hltL4PromptDisplacedDijetFullTracksJetTagProducerFromIPMidPt + process.hltL4PromptDisplacedDijetFullTracksHLTCaloJetTagFilterMidPt ) process.HLTDisplacedTrackRequirementDisplacedJetsMidPt = cms.Sequence( process.hltL4DisplacedDijetFullTracksJetTracksAssociatorAtVertexMidPt + process.hltL4TaggedDisplacedDijetFullTracksTrackIPProducerMidPt + process.hltL4DisplacedDijetFullTracksJetTagProducerFromIPMidPt + process.hltL4DisplacedDijetFullTracksHLTCaloJetTagFilterMidPt ) -process.HLTEle30erJetC34WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1IsoEG30erJetC34drMin0p3Filter + process.hltEG30L1IsoEGerJetC34drMin0p3EtFilter + process.hltEgammaClusterShape + process.hltEle30erJetC34WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle30erJetC34WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle30erJetC34WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle30erJetC34WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle30erJetC34WPTightPixelMatchFilter + process.hltEle30erJetC34WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle30erJetC34WPTightGsfOneOEMinusOneOPFilter + process.hltEle30erJetC34WPTightGsfMissingHitsFilter + process.hltEle30erJetC34WPTightGsfDetaFilter + process.hltEle30erJetC34WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle30erJetC34WPTightGsfTrackIsoFilter ) -process.HLTEle28erHTT100WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1IsoEG28erHTT100Filter + process.hltEG28L1IsoEG28erHTT100EtFilter + process.hltEgammaClusterShape + process.hltEle28erHTT100WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle28erHTT100WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle28erHTT100WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle28erHTT100WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle28erHTT100WPTightPixelMatchFilter + process.hltEle28erHTT100WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle28erHTT100WPTightGsfOneOEMinusOneOPFilter + process.hltEle28erHTT100WPTightGsfMissingHitsFilter + process.hltEle28erHTT100WPTightGsfDetaFilter + process.hltEle28erHTT100WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle28erHTT100WPTightGsfTrackIsoFilter ) +process.HLTEle30erJetC34WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1IsoEG30erJetC34drMin0p3Filter + process.hltEG30L1IsoEGerJetC34drMin0p3EtFilter + process.hltEgammaClusterShape + process.hltEle30erJetC34WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle30erJetC34WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle30erJetC34WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle30erJetC34WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle30erJetC34WPTightPixelMatchFilter + process.hltEle30erJetC34WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle30erJetC34WPTightGsfOneOEMinusOneOPFilter + process.hltEle30erJetC34WPTightGsfMissingHitsFilter + process.hltEle30erJetC34WPTightGsfDetaFilter + process.hltEle30erJetC34WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle30erJetC34WPTightGsfTrackIsoFilter ) +process.HLTEle28erHTT100WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1IsoEG28erHTT100Filter + process.hltEG28L1IsoEG28erHTT100EtFilter + process.hltEgammaClusterShape + process.hltEle28erHTT100WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle28erHTT100WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle28erHTT100WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle28erHTT100WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle28erHTT100WPTightPixelMatchFilter + process.hltEle28erHTT100WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle28erHTT100WPTightGsfOneOEMinusOneOPFilter + process.hltEle28erHTT100WPTightGsfMissingHitsFilter + process.hltEle28erHTT100WPTightGsfDetaFilter + process.hltEle28erHTT100WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle28erHTT100WPTightGsfTrackIsoFilter ) process.HLTPFHcalClusteringForEgammaUnseeded = cms.Sequence( process.hltParticleFlowRecHitHBHE + process.hltParticleFlowRecHitHF + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL + process.hltParticleFlowClusterHFForEgammaUnseeded ) -process.HLTEle28HighEtaSC20Mass55Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEle28HighEtaSC20EtFilter + process.hltEgammaClusterShape + process.hltEle28HighEtaSC20ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle28HighEtaSC20HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle28HighEtaSC20EcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle28HighEtaSC20HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle28HighEtaSC20PixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle28HighEtaSC20OneOEMinusOneOPFilter + process.hltEle28HighEtaSC20DetaFilter + process.hltEle28HighEtaSC20DphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle28HighEtaSC20TrackIsoFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltDiEG20EtUnseededFilter + process.hltEgammaClusterShapeUnseeded + process.hltEle28HighEtaSC20ClusterShapeUnseededFilter + process.hltEgammaEcalPFClusterIsoUnseeded + process.hltEle28HighEtaSC20EcalIsoFilterUnseeded + process.hltEgammaHoverEUnseeded + process.hltEle28HighEtaSC20HEFilterUnseeded + process.HLTPFHcalClusteringForEgammaUnseeded + process.hltEgammaHcalPFClusterIsoUnseeded + process.hltEle28HighEtaSC20HcalIsoFilterUnseeded + process.hltHighEtaSC20Selector + process.hltHighEtaSC20SelectorFilter + process.hltEle28HighEtaSC20Mass55Filter ) +process.HLTEle28HighEtaSC20Mass55Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGOrFilter + process.hltEle28HighEtaSC20EtFilter + process.hltEgammaClusterShape + process.hltEle28HighEtaSC20ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle28HighEtaSC20HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle28HighEtaSC20EcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle28HighEtaSC20HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle28HighEtaSC20PixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle28HighEtaSC20OneOEMinusOneOPFilter + process.hltEle28HighEtaSC20DetaFilter + process.hltEle28HighEtaSC20DphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle28HighEtaSC20TrackIsoFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltDiEG20EtUnseededFilter + process.hltEgammaClusterShapeUnseeded + process.hltEle28HighEtaSC20ClusterShapeUnseededFilter + process.hltEgammaEcalPFClusterIsoUnseeded + process.hltEle28HighEtaSC20EcalIsoFilterUnseeded + process.hltEgammaHoverEUnseeded + process.hltEle28HighEtaSC20HEFilterUnseeded + process.HLTPFHcalClusteringForEgammaUnseeded + process.hltEgammaHcalPFClusterIsoUnseeded + process.hltEle28HighEtaSC20HcalIsoFilterUnseeded + process.hltHighEtaSC20Selector + process.hltHighEtaSC20SelectorFilter + process.hltEle28HighEtaSC20Mass55Filter ) process.HLTPhoton23Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGDoubleMu4OSEG12ORDoubleMu5OSEG12Filter + process.hltEG23EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG23HEFilter ) -process.HLTEle15VVVLGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5OpenFilter + process.hltEG15EtFilter + process.hltEgammaClusterShape + process.hltEle15VVVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15VVVLHEFilter + process.hltEgammaEcalPFClusterIsoR02 + process.hltEle15VVVLEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoR02 + process.hltEle15VVVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle15VVVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle15VVVLGsfOneOEMinusOneOPFilter + process.hltEle15VVVLGsfChi2Filter + process.hltEle15VVVLGsfMissingHitsFilter + process.hltEle15VVVLGsfDetaFilter + process.hltEle15VVVLGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15VVVLGsfTrackIsoFilter ) -process.HLTEle50VVVLGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5OpenFilter + process.hltEG50IsoVVVLEtFilter + process.hltEgammaClusterShape + process.hltEle50VVVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle50VVVLHEFilter + process.hltEgammaEcalPFClusterIsoR02 + process.hltEle50VVVLEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoR02 + process.hltEle50VVVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle50VVVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle50VVVLGsfOneOEMinusOneOPFilter + process.hltEle50VVVLGsfChi2Filter + process.hltEle50VVVLGsfMissingHitsFilter + process.hltEle50VVVLGsfDetaFilter + process.hltEle50VVVLGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle50VVVLGsfTrackIsoFilter ) +process.HLTEle15VVVLGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5OpenFilter + process.hltEG15EtFilter + process.hltEgammaClusterShape + process.hltEle15VVVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15VVVLHEFilter + process.hltEgammaEcalPFClusterIsoR02 + process.hltEle15VVVLEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoR02 + process.hltEle15VVVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle15VVVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle15VVVLGsfOneOEMinusOneOPFilter + process.hltEle15VVVLGsfChi2Filter + process.hltEle15VVVLGsfMissingHitsFilter + process.hltEle15VVVLGsfDetaFilter + process.hltEle15VVVLGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15VVVLGsfTrackIsoFilter ) +process.HLTEle50VVVLGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5OpenFilter + process.hltEG50IsoVVVLEtFilter + process.hltEgammaClusterShape + process.hltEle50VVVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle50VVVLHEFilter + process.hltEgammaEcalPFClusterIsoR02 + process.hltEle50VVVLEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoR02 + process.hltEle50VVVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle50VVVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle50VVVLGsfOneOEMinusOneOPFilter + process.hltEle50VVVLGsfChi2Filter + process.hltEle50VVVLGsfMissingHitsFilter + process.hltEle50VVVLGsfDetaFilter + process.hltEle50VVVLGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle50VVVLGsfTrackIsoFilter ) process.HLTMuVVVLCombinedIsolationR02Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTDoLocalHcalSequence + process.hltTowerMakerForAll + process.hltFixedGridRhoFastjetAllCaloForMuons + process.hltL3CaloMuonCorrectedVVVLIsolations + process.HLTTrackReconstructionForIsoL3MuonIter02 + process.hltL3MuonCombRelIsolationVVVL ) process.HLTDiMu4Ele9CaloIdLTrackIdLMuonlegSequence = cms.Sequence( process.hltDiMu4Ele9CaloIdLTrackIdLMuonlegL1Filtered0 + process.HLTL2muonrecoSequence + cms.ignore(process.hltDiMu4Ele9CaloIdLTrackIdLMuonlegL2Filtered4) + process.HLTL3muonrecoSequence + cms.ignore(process.hltL1fForIterL3DiMu4Ele9CaloIdLTrackIdLMuonlegL1Filtered0) + process.hltL3fL1DoubleMu4EG9f0Filtered4 ) process.HLTDiMu4Ele9CaloIdLTrackIdLElectronlegSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegL1MatchFilter + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegEtFilter + process.hltEgammaClusterShape + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegHEFilter + process.HLTElePixelMatchSequence + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegPixelMatchFilter + process.HLTGsfElectronSequence + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegOneOEMinusOneOPFilter + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegDetaFilter + process.hltDiMu4Ele9CaloIdLTrackIdLElectronlegDphiFilter ) @@ -91231,10 +93111,10 @@ process.HLTL3muonrecoNocandSequenceNoVtx = cms.Sequence( process.HLTIterL3muonTkCandidateSequenceNoVtx + process.hltIterL3MuonMergedNoVtx + process.hltIterL3MuonAndMuonFromL1MergedNoVtx + process.hltL3MuonsIterL3LinksNoVtx + process.hltIterL3MuonsNoVtx ) process.HLTL3muonrecoSequenceNoVtx = cms.Sequence( process.HLTL3muonrecoNocandSequenceNoVtx + process.hltIterL3MuonCandidatesNoVtx ) process.HLTTrackerMuonSequenceNoVtx = cms.Sequence( process.HLTDoLocalPixelSequence + process.HLTRecoPixelTracksSequence + process.HLTDoLocalStripSequence + process.hltMuTrackSeeds + process.hltMuCkfTrackCandidates + process.hltMuCtfTracks + process.HLTL3muonrecoNocandSequenceNoVtx + process.hltDiMuonMergingNoVtx + process.hltDiMuonLinksNoVtx + process.hltGlbTrkMuonsNoVtx + process.hltGlbTrkMuonCandsNoVtx ) -process.HLTEle8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle8CaloIdLTrackIdLIsoVLL1MatchFilter + process.hltEle8CaloIdLTrackIdLIsoVLEtFilter + process.hltEgammaClusterShape + process.hltEle8CaloIdLTrackIdLIsoVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle8CaloIdLTrackIdLIsoVLHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle8CaloIdLTrackIdLIsoVLEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle8CaloIdLTrackIdLIsoVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle8CaloIdLTrackIdLIsoVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle8CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + process.hltEle8CaloIdLTrackIdLIsoVLDetaFilter + process.hltEle8CaloIdLTrackIdLIsoVLDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle8CaloIdLTrackIdLIsoVLTrackIsoFilter ) -process.HLTEle12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle12CaloIdLTrackIdLIsoVLL1MatchFilter + process.hltEle12CaloIdLTrackIdLIsoVLEtFilter + process.hltEgammaClusterShape + process.hltEle12CaloIdLTrackIdLIsoVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle12CaloIdLTrackIdLIsoVLHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle12CaloIdLTrackIdLIsoVLEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle12CaloIdLTrackIdLIsoVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle12CaloIdLTrackIdLIsoVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle12CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + process.hltEle12CaloIdLTrackIdLIsoVLDetaFilter + process.hltEle12CaloIdLTrackIdLIsoVLDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle12CaloIdLTrackIdLIsoVLTrackIsoFilter ) -process.HLTEle15CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle15CaloIdLTrackIdLIsoVLJet30L1MatchFilter + process.hltEle15CaloIdLTrackIdLIsoVLJet30EtFilter + process.hltEgammaClusterShape + process.hltEle15CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15CaloIdLTrackIdLIsoVLJet30HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle15CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle15CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle15CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle15CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + process.hltEle15CaloIdLTrackIdLIsoVLJet30DetaFilter + process.hltEle15CaloIdLTrackIdLIsoVLJet30DphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) -process.HLTEle23CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle23CaloIdLTrackIdLIsoVLJet30L1MatchFilter + process.hltEle23CaloIdLTrackIdLIsoVLJet30EtFilter + process.hltEgammaClusterShape + process.hltEle23CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle23CaloIdLTrackIdLIsoVLJet30HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle23CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle23CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle23CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle23CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + process.hltEle23CaloIdLTrackIdLIsoVLJet30DetaFilter + process.hltEle23CaloIdLTrackIdLIsoVLJet30DphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle23CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) +process.HLTEle8CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle8CaloIdLTrackIdLIsoVLL1MatchFilter + process.hltEle8CaloIdLTrackIdLIsoVLEtFilter + process.hltEgammaClusterShape + process.hltEle8CaloIdLTrackIdLIsoVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle8CaloIdLTrackIdLIsoVLHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle8CaloIdLTrackIdLIsoVLEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle8CaloIdLTrackIdLIsoVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle8CaloIdLTrackIdLIsoVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle8CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + process.hltEle8CaloIdLTrackIdLIsoVLDetaFilter + process.hltEle8CaloIdLTrackIdLIsoVLDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle8CaloIdLTrackIdLIsoVLTrackIsoFilter ) +process.HLTEle12CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle12CaloIdLTrackIdLIsoVLL1MatchFilter + process.hltEle12CaloIdLTrackIdLIsoVLEtFilter + process.hltEgammaClusterShape + process.hltEle12CaloIdLTrackIdLIsoVLClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle12CaloIdLTrackIdLIsoVLHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle12CaloIdLTrackIdLIsoVLEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle12CaloIdLTrackIdLIsoVLHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle12CaloIdLTrackIdLIsoVLPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle12CaloIdLTrackIdLIsoVLOneOEMinusOneOPFilter + process.hltEle12CaloIdLTrackIdLIsoVLDetaFilter + process.hltEle12CaloIdLTrackIdLIsoVLDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle12CaloIdLTrackIdLIsoVLTrackIsoFilter ) +process.HLTEle15CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle15CaloIdLTrackIdLIsoVLJet30L1MatchFilter + process.hltEle15CaloIdLTrackIdLIsoVLJet30EtFilter + process.hltEgammaClusterShape + process.hltEle15CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15CaloIdLTrackIdLIsoVLJet30HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle15CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle15CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle15CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle15CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + process.hltEle15CaloIdLTrackIdLIsoVLJet30DetaFilter + process.hltEle15CaloIdLTrackIdLIsoVLJet30DphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) +process.HLTEle23CaloIdLTrackIdLIsoVLJet30Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEle23CaloIdLTrackIdLIsoVLJet30L1MatchFilter + process.hltEle23CaloIdLTrackIdLIsoVLJet30EtFilter + process.hltEgammaClusterShape + process.hltEle23CaloIdLTrackIdLIsoVLJet30ClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle23CaloIdLTrackIdLIsoVLJet30HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle23CaloIdLTrackIdLIsoVLJet30EcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle23CaloIdLTrackIdLIsoVLJet30HcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle23CaloIdLTrackIdLIsoVLJet30PixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle23CaloIdLTrackIdLIsoVLJet30OneOEMinusOneOPFilter + process.hltEle23CaloIdLTrackIdLIsoVLJet30DetaFilter + process.hltEle23CaloIdLTrackIdLIsoVLJet30DphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle23CaloIdLTrackIdLIsoVLJet30TrackIsoFilter ) process.HLTEle8CaloIdMGsfTrkIdMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaCandidatesWrapper + process.hltEle8EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle8HEFilter + process.hltEgammaClusterShape + process.hltEle8CaloIdMClusterShapeFilter + process.HLTElePixelMatchSequence + process.hltEle8CaloIdMPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle8CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + process.hltEle8CaloIdMGsfTrackIdMDetaFilter + process.hltEle8CaloIdMGsfTrackIdMDphiFilter ) process.HLTEle17CaloIdMGsfTrkIdMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaCandidatesWrapper + process.hltEle17EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle17HEFilter + process.hltEgammaClusterShape + process.hltEle17CaloIdMClusterShapeFilter + process.HLTElePixelMatchSequence + process.hltEle17CaloIdMPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle17CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + process.hltEle17CaloIdMGsfTrackIdMDetaFilter + process.hltEle17CaloIdMGsfTrackIdMDphiFilter ) process.HLTEle23CaloIdMGsfTrkIdMSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaCandidatesWrapper + process.hltEle23EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle23HEFilter + process.hltEgammaClusterShape + process.hltEle23CaloIdMClusterShapeFilter + process.HLTElePixelMatchSequence + process.hltEle23CaloIdMPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle23CaloIdMGsfTrackIdMOneOEMinusOneOPFilter + process.hltEle23CaloIdMGsfTrackIdMDetaFilter + process.hltEle23CaloIdMGsfTrackIdMDphiFilter ) @@ -91246,41 +93126,60 @@ process.HLTEle250CaloIdVTGsfTrkIdTGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + process.hltEG250EtFilter + process.hltEgammaClusterShape + process.hltEG250CaloIdVTClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG250CaloIdVTHEFilter + process.HLTElePixelMatchSequence + process.hltEle250CaloIdVTPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle250CaloIdVTGsfTrkIdTGsfDetaFilter + process.hltEle250CaloIdVTGsfTrkIdTGsfDphiFilter ) process.HLTEle300CaloIdVTGsfTrkIdTGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauFilter + process.hltEG300EtFilter + process.hltEgammaClusterShape + process.hltEG300CaloIdVTClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG300CaloIdVTHEFilter + process.HLTElePixelMatchSequence + process.hltEle300CaloIdVTPixelMatchFilter + process.HLTGsfElectronSequence + process.hltEle300CaloIdVTGsfTrkIdTGsfDetaFilter + process.hltEle300CaloIdVTGsfTrkIdTGsfDphiFilter ) process.HLTPFHT350MinPFJet15Sequence = cms.Sequence( process.HLTAK4CaloJetsSequence + process.hltHtMhtJet10 + process.hltHT175Jet10 + process.HLTAK4PFJetsSequence + process.hltPFHTJet15 + process.hltPFHT350Jet15 ) -process.HLTPhoton60R9Id90CaloIdLIsoLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + process.hltEG60EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG60HEFilter + process.hltEgammaR9ID + process.hltEG60R9Id90CaloIdLIsoLR9IdFilter + process.hltEgammaClusterShape + process.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + process.hltEgammaEcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter ) -process.HLTPhoton60R9Id90CaloIdLIsoLDisplacedIdLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + process.hltEG60EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG60HEFilter + process.hltEgammaR9ID + process.hltEG60R9Id90CaloIdLIsoLR9IdFilter + process.hltEgammaClusterShape + process.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + process.hltEgammaEcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter + process.hltEG60R9Id90CaloIdLIsoLDisplacedIdFilter ) +process.HLTPhoton60R9Id90CaloIdLIsoLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + process.hltEG60EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG60HEFilter + process.hltEgammaR9ID + process.hltEG60R9Id90CaloIdLIsoLR9IdFilter + process.hltEgammaClusterShape + process.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + process.hltEgammaEcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter ) +process.HLTPhoton60R9Id90CaloIdLIsoLDisplacedIdLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEGNonIsoOrWithJetAndTauNoPSFilter + process.hltEG60EtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG60HEFilter + process.hltEgammaR9ID + process.hltEG60R9Id90CaloIdLIsoLR9IdFilter + process.hltEgammaClusterShape + process.hltEG60R9Id90CaloIdLIsoLClusterShapeFilter + process.hltEgammaEcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLEcalPFClusterIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG60R9Id90CaloIdLIsoLHcalPFClusterIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG60R9Id90CaloIdLIsoLHollowTrackIsoFilter + process.hltEG60R9Id90CaloIdLIsoLDisplacedIdFilter ) process.HLTSC3018EIso15HE30eMass70Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGWithJetAndTauFilter + process.hltEG30L1SingleAndDoubleEGWithTauWithJetEtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHToverET + process.hltEG30HE30HEFilter + process.hltEgammaEcalPFClusterIso + process.hltEG30EIso15HE30EcalIsoLastFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltDiEG18EtEta2p55UnseededFilter + process.hltEgammaHoverEUnseeded + process.hltDiEG18HE30eHEUnseededFilter + process.hltEgammaEcalPFClusterIsoUnseeded + process.hltEG18EIso15HE30EcalIsoUnseededFilter + process.hltDiEG18EIso15ANDHE30Mass70CombMassLastFilter ) process.HLTBeginSequenceL1Fat = cms.Sequence( process.hltTriggerType + process.hltL1EventNumberL1Fat + process.HLTL1UnpackerSequence + process.HLTBeamSpot ) process.HLTBeginSequenceRandom = cms.Sequence( process.hltRandomEventsFilter + process.hltGtStage2Digis ) -process.HLTCaloScoutingSequence = cms.Sequence( process.HLTAK4CaloJetsSequence + process.HLTRecoMETSequence ) -process.HLTNoPUSequence = cms.Sequence( process.HLTDoLocalPixelSequenceRegForBTag + process.HLTFastRecopixelvertexingSequence + process.hltPixelTracksForNoPUFilter + process.hltSelectorJets20L1FastJetForNoPU + process.hltPixelTracksForNoPUFitter + process.hltPixelTracksTrackingRegionsForNoPU + process.hltPixelTracksHitDoubletsForNoPU + process.hltPixelTracksHitQuadrupletsForNoPU + process.hltPixelTracksForNoPU + process.hltCaloJetFromPV ) -process.HLTCaloBTagScoutingSequence = cms.Sequence( process.HLTAK4CaloJetsSequence + process.HLTNoPUSequence + process.HLTBtagDeepCSVSequenceL3 ) +process.HLTTrackReconstructionForPixelOnlyPF = cms.Sequence( process.HLTDoLocalPixelSequence + process.HLTRecopixelvertexingSequence + process.hltPixelTracksZetaClean + process.hltPixelOnlyPFMuonMerging + process.hltPixelOnlyMuonLinks + process.hltPixelOnlyMuons ) +process.HLTPixelOnlyParticleFlowSequence = cms.Sequence( process.HLTPreshowerSequence + process.hltParticleFlowRecHitECALUnseeded + process.hltParticleFlowRecHitHBHE + process.hltParticleFlowRecHitHF + process.hltParticleFlowRecHitPSUnseeded + process.hltParticleFlowClusterECALUncorrectedUnseeded + process.hltParticleFlowClusterPSUnseeded + process.hltParticleFlowClusterECALUnseeded + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL + process.hltParticleFlowClusterHF + process.hltLightPixelOnlyPFTracks + process.hltPixelOnlyParticleFlowBlock + process.hltPixelOnlyParticleFlow ) +process.HLTAK4PixelOnlyPFJetsReconstructionSequence = cms.Sequence( process.HLTL2muonrecoSequence + process.HLTL3muonrecoSequence + process.HLTTrackReconstructionForPixelOnlyPF + process.HLTPixelOnlyParticleFlowSequence + process.hltAK4PixelOnlyPFJets + process.hltAK4PixelOnlyPFJetsLooseID + process.hltAK4PixelOnlyPFJetsTightID ) +process.HLTAK4PixelOnlyPFCorrectorProducersSequence = cms.Sequence( process.hltAK4PixelOnlyPFFastJetCorrector + process.hltAK4PixelOnlyPFRelativeCorrector + process.hltAK4PixelOnlyPFAbsoluteCorrector + process.hltAK4PixelOnlyPFResidualCorrector + process.hltAK4PixelOnlyPFCorrector ) +process.HLTAK4PixelOnlyPFJetsCorrectionSequence = cms.Sequence( process.hltFixedGridRhoFastjetPixelOnlyAll + process.HLTAK4PixelOnlyPFCorrectorProducersSequence + process.hltAK4PixelOnlyPFJetsCorrected + process.hltAK4PixelOnlyPFJetsLooseIDCorrected + process.hltAK4PixelOnlyPFJetsTightIDCorrected ) +process.HLTAK4PixelOnlyPFJetsSequence = cms.Sequence( process.HLTPreAK4PFJetsRecoSequence + process.HLTAK4PixelOnlyPFJetsReconstructionSequence + process.HLTAK4PixelOnlyPFJetsCorrectionSequence ) process.HLTMuIsolationSequence = cms.Sequence( process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons + process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons + process.HLTTrackReconstructionForIsoL3MuonIter02 + process.hltMuonTkRelIsolationCut0p07Map ) -process.HLTPFScoutingSequence = cms.Sequence( process.HLTAK4PFJetsSequence + process.hltPFMETProducer + process.HLTMuIsolationSequence + process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEgammaEcalPFClusterIso + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.HLTElePixelMatchSequence + process.HLTGsfElectronSequence + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso ) -process.HLTBTagScoutingSequence = cms.Sequence( process.HLTAK4PFJetsSequence + process.HLTBtagDeepCSVSequencePF ) -process.HLTPFClusteringEcalMFForMuonsNoVtx = cms.Sequence( process.hltRecHitInRegionForMuonsMFnoVtx + process.hltRecHitInRegionForMuonsESNoVtx + process.hltParticleFlowRecHitECALForMuonsMFNoVtx + process.hltParticleFlowRecHitPSForMuonsNoVtx + process.hltParticleFlowClusterECALUncorrectedForMuonsMFNoVtx + process.hltParticleFlowClusterPSForMuonsNoVtx + process.hltParticleFlowClusterECALForMuonsMFNoVtx ) -process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsNoVtx = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalMFSequence + process.HLTDoLocalHcalSequence + process.hltTowerMakerForECALMF + process.hltTowerMakerForHCAL + process.hltFixedGridRhoFastjetECALMFForMuons + process.hltFixedGridRhoFastjetHCAL + process.HLTPFClusteringEcalMFForMuonsNoVtx + process.hltMuonEcalMFPFClusterIsoForMuonsNoVtx ) -process.HLTPFHcalClusteringForMuonsNoVtx = cms.Sequence( process.hltRegionalTowerForMuonsNoVtx + process.hltParticleFlowRecHitHBHE + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL ) -process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsNoVtx = cms.Sequence( process.HLTPFHcalClusteringForMuonsNoVtx + process.hltMuonHcalPFClusterIsoForMuonsNoVtx ) -process.HLTPixelTrackingL3MuonNoVtx = cms.Sequence( process.hltL3MuonVertexNoVtx + process.HLTDoLocalPixelSequence + process.hltPixelLayerQuadruplets + process.hltPixelTracksL3MuonFilter + process.hltPixelTracksL3MuonFitter + process.hltPixelTracksTrackingRegionsL3MuonNoVtx + process.hltPixelTracksHitDoubletsL3MuonNoVtx + process.hltPixelTracksHitQuadrupletsL3MuonNoVtx + process.hltPixelTracksL3MuonNoVtx + process.hltPixelVerticesL3MuonNoVtx ) -process.HLTIterativeTrackingL3MuonIteration0NoVtx = cms.Sequence( process.hltPixelTracksForSeedsL3MuonFilter + process.hltPixelTracksForSeedsL3MuonFitter + process.hltPixelTracksTrackingRegionsForSeedsL3MuonNoVtx + process.hltPixelTracksHitDoubletsForSeedsL3MuonNoVtx + process.hltPixelTracksHitQuadrupletsForSeedsL3MuonNoVtx + process.hltPixelTracksForSeedsL3MuonNoVtx + process.hltIter0L3MuonPixelSeedsFromPixelTracksNoVtx + process.hltIter0L3MuonCkfTrackCandidatesNoVtx + process.hltIter0L3MuonCtfWithMaterialTracksNoVtx + process.hltIter0L3MuonTrackCutClassifierNoVtx + process.hltIter0L3MuonTrackSelectionHighPurityNoVtx ) -process.HLTIterativeTrackingL3MuonIteration1NoVtx = cms.Sequence( process.hltIter1L3MuonClustersRefRemovalNoVtx + process.hltIter1L3MuonMaskedMeasurementTrackerEventNoVtx + process.hltIter1L3MuonPixelLayerQuadrupletsNoVtx + process.hltIter1L3MuonPixelTrackingRegionsNoVtx + process.hltIter1L3MuonPixelClusterCheck + process.hltIter1L3MuonPixelHitDoubletsNoVtx + process.hltIter1L3MuonPixelHitQuadrupletsNoVtx + process.hltIter1L3MuonPixelSeedsNoVtx + process.hltIter1L3MuonCkfTrackCandidatesNoVtx + process.hltIter1L3MuonCtfWithMaterialTracksNoVtx + process.hltIter1L3MuonTrackCutClassifierPromptNoVtx + process.hltIter1L3MuonTrackCutClassifierDetachedNoVtx + process.hltIter1L3MuonTrackCutClassifierMergedNoVtx + process.hltIter1L3MuonTrackSelectionHighPurityNoVtx ) -process.HLTIterativeTrackingL3MuonIteration2NoVtx = cms.Sequence( process.hltIter2L3MuonClustersRefRemovalNoVtx + process.hltIter2L3MuonMaskedMeasurementTrackerEventNoVtx + process.hltIter2L3MuonPixelLayerTripletsNoVtx + process.hltIter2L3MuonPixelTrackingRegionsNoVtx + process.hltIter2L3MuonPixelClusterCheck + process.hltIter2L3MuonPixelHitDoubletsNoVtx + process.hltIter2L3MuonPixelHitTripletsNoVtx + process.hltIter2L3MuonPixelSeedsNoVtx + process.hltIter2L3MuonCkfTrackCandidatesNoVtx + process.hltIter2L3MuonCtfWithMaterialTracksNoVtx + process.hltIter2L3MuonTrackCutClassifierNoVtx + process.hltIter2L3MuonTrackSelectionHighPurityNoVtx ) -process.HLTIterativeTrackingL3MuonIter02NoVtx = cms.Sequence( process.HLTIterativeTrackingL3MuonIteration0NoVtx + process.HLTIterativeTrackingL3MuonIteration1NoVtx + process.hltIter1L3MuonMergedNoVtx + process.HLTIterativeTrackingL3MuonIteration2NoVtx + process.hltIter2L3MuonMergedNoVtx ) -process.HLTTrackReconstructionForIsoL3MuonIter02NoVtx = cms.Sequence( process.HLTPixelTrackingL3MuonNoVtx + process.HLTDoLocalStripSequence + process.HLTIterativeTrackingL3MuonIter02NoVtx ) -process.HLTMuIsolationSequenceNoVtx = cms.Sequence( process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsNoVtx + process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsNoVtx + process.HLTTrackReconstructionForIsoL3MuonIter02NoVtx + process.hltMuonTkRelIsolationCut0p09MapNoVtx ) -process.HLTPFScoutingSequenceNoVtx = cms.Sequence( process.HLTAK4PFJetsSequence + process.hltPFMETProducer + process.HLTMuIsolationSequenceNoVtx + process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEgammaEcalPFClusterIso + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.HLTElePixelMatchSequence + process.HLTGsfElectronSequence + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso ) +process.HLTPixelOnlyPFScoutingSequence = cms.Sequence( process.HLTAK4PixelOnlyPFJetsSequence + process.hltPixelOnlyPFMETProducer + process.HLTMuIsolationSequence + process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEgammaEcalPFClusterIso + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.HLTElePixelMatchSequence + process.HLTGsfElectronSequence + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso ) +process.HLTL2muonrecoSequenceScoutingNoVtx = cms.Sequence( process.HLTL2muonrecoNocandSequence + process.hltL2MuonCandidatesScoutingNoVtx ) +process.HLTIterL3OImuonTkCandidateSequenceScoutingNoVtx = cms.Sequence( process.hltIterL3OISeedsFromL2MuonsScoutingNoVtx + process.hltIterL3OITrackCandidatesScoutingNoVtx + process.hltIterL3OIMuCtfWithMaterialTracksScoutingNoVtx + process.hltIterL3OIMuonTrackCutClassifierScoutingNoVtx + process.hltIterL3OIMuonTrackSelectionHighPurityScoutingNoVtx + process.hltL3MuonsIterL3OIScoutingNoVtx ) +process.HLTIterL3MuonRecoPixelTracksSequenceScoutingNoVtx = cms.Sequence( process.hltIterL3MuonPixelTracksFilterScoutingNoVtx + process.hltIterL3MuonPixelTracksFitterScoutingNoVtx + process.hltIterL3MuonPixelTracksTrackingRegionsScoutingNoVtx + process.hltIterL3MuonPixelLayerQuadrupletsScoutingNoVtx + process.hltIterL3MuonPixelTracksHitDoubletsScoutingNoVtx + process.hltIterL3MuonPixelTracksHitQuadrupletsScoutingNoVtx + process.hltIterL3MuonPixelTracksScoutingNoVtx ) +process.HLTIterL3MuonRecopixelvertexingSequenceScoutingNoVtx = cms.Sequence( process.HLTIterL3MuonRecoPixelTracksSequenceScoutingNoVtx + process.hltIterL3MuonPixelVerticesScoutingNoVtx + process.hltIterL3MuonTrimmedPixelVerticesScoutingNoVtx ) +process.HLTIterativeTrackingIteration0ForIterL3MuonScoutingNoVtx = cms.Sequence( process.hltIter0IterL3MuonPixelSeedsFromPixelTracksScoutingNoVtx + process.hltIter0IterL3MuonCkfTrackCandidatesScoutingNoVtx + process.hltIter0IterL3MuonCtfWithMaterialTracksScoutingNoVtx + process.hltIter0IterL3MuonTrackCutClassifierScoutingNoVtx + process.hltIter0IterL3MuonTrackSelectionHighPurityScoutingNoVtx ) +process.HLTIterativeTrackingIteration2ForIterL3MuonScoutingNoVtx = cms.Sequence( process.hltIter2IterL3MuonClustersRefRemovalScoutingNoVtx + process.hltIter2IterL3MuonMaskedMeasurementTrackerEventScoutingNoVtx + process.hltIter2IterL3MuonPixelLayerTripletsScoutingNoVtx + process.hltIter2IterL3MuonPixelClusterCheckScoutingNoVtx + process.hltIter2IterL3MuonPixelHitDoubletsScoutingNoVtx + process.hltIter2IterL3MuonPixelHitTripletsScoutingNoVtx + process.hltIter2IterL3MuonPixelSeedsScoutingNoVtx + process.hltIter2IterL3MuonCkfTrackCandidatesScoutingNoVtx + process.hltIter2IterL3MuonCtfWithMaterialTracksScoutingNoVtx + process.hltIter2IterL3MuonTrackCutClassifierScoutingNoVtx + process.hltIter2IterL3MuonTrackSelectionHighPurityScoutingNoVtx ) +process.HLTIterativeTrackingIter02ForIterL3MuonScoutingNoVtx = cms.Sequence( process.HLTIterativeTrackingIteration0ForIterL3MuonScoutingNoVtx + process.HLTIterativeTrackingIteration2ForIterL3MuonScoutingNoVtx + process.hltIter2IterL3MuonMergedScoutingNoVtx ) +process.HLTIterL3IOmuonTkCandidateSequenceScoutingNoVtx = cms.Sequence( process.HLTIterL3MuonRecopixelvertexingSequenceScoutingNoVtx + process.HLTIterativeTrackingIter02ForIterL3MuonScoutingNoVtx + process.hltL3MuonsIterL3IOScoutingNoVtx ) +process.HLTIterL3OIAndIOFromL2muonTkCandidateSequenceScoutingNoVtx = cms.Sequence( process.HLTIterL3OImuonTkCandidateSequenceScoutingNoVtx + process.hltIterL3OIL3MuonsLinksCombinationScoutingNoVtx + process.hltIterL3OIL3MuonsScoutingNoVtx + process.hltIterL3OIL3MuonCandidatesScoutingNoVtx + process.hltL2SelectorForL3IOScoutingNoVtx + process.HLTIterL3IOmuonTkCandidateSequenceScoutingNoVtx + process.hltIterL3MuonsFromL2LinksCombinationScoutingNoVtx + process.hltIterL3MuonsFromL2ScoutingNoVtx ) +process.HLTRecoPixelTracksSequenceForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( process.hltIterL3FromL1MuonPixelTracksTrackingRegionsScoutingNoVtx + process.hltIterL3FromL1MuonPixelLayerQuadrupletsScoutingNoVtx + process.hltIterL3FromL1MuonPixelTracksHitDoubletsScoutingNoVtx + process.hltIterL3FromL1MuonPixelTracksHitQuadrupletsScoutingNoVtx + process.hltIterL3FromL1MuonPixelTracksScoutingNoVtx ) +process.HLTRecopixelvertexingSequenceForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( process.HLTRecoPixelTracksSequenceForIterL3FromL1MuonScoutingNoVtx + process.hltIterL3FromL1MuonPixelVerticesScoutingNoVtx + process.hltIterL3FromL1MuonTrimmedPixelVerticesScoutingNoVtx ) +process.HLTIterativeTrackingIteration0ForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( process.hltIter0IterL3FromL1MuonPixelSeedsFromPixelTracksScoutingNoVtx + process.hltIter0IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx + process.hltIter0IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx + process.hltIter0IterL3FromL1MuonTrackCutClassifierScoutingNoVtx + process.hltIter0IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx ) +process.HLTIterativeTrackingIteration2ForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( process.hltIter2IterL3FromL1MuonClustersRefRemovalScoutingNoVtx + process.hltIter2IterL3FromL1MuonMaskedMeasurementTrackerEventScoutingNoVtx + process.hltIter2IterL3FromL1MuonPixelLayerTripletsScoutingNoVtx + process.hltIter2IterL3FromL1MuonPixelClusterCheckScoutingNoVtx + process.hltIter2IterL3FromL1MuonPixelHitDoubletsScoutingNoVtx + process.hltIter2IterL3FromL1MuonPixelHitTripletsScoutingNoVtx + process.hltIter2IterL3FromL1MuonPixelSeedsScoutingNoVtx + process.hltIter2IterL3FromL1MuonCkfTrackCandidatesScoutingNoVtx + process.hltIter2IterL3FromL1MuonCtfWithMaterialTracksScoutingNoVtx + process.hltIter2IterL3FromL1MuonTrackCutClassifierScoutingNoVtx + process.hltIter2IterL3FromL1MuonTrackSelectionHighPurityScoutingNoVtx ) +process.HLTIterativeTrackingIter02ForIterL3FromL1MuonScoutingNoVtx = cms.Sequence( process.HLTIterativeTrackingIteration0ForIterL3FromL1MuonScoutingNoVtx + process.HLTIterativeTrackingIteration2ForIterL3FromL1MuonScoutingNoVtx + process.hltIter2IterL3FromL1MuonMergedScoutingNoVtx ) +process.HLTIterL3IOmuonFromL1TkCandidateSequenceScoutingNoVtx = cms.Sequence( process.HLTRecopixelvertexingSequenceForIterL3FromL1MuonScoutingNoVtx + process.HLTIterativeTrackingIter02ForIterL3FromL1MuonScoutingNoVtx ) +process.HLTIterL3muonTkCandidateSequenceScoutingNoVtx = cms.Sequence( process.HLTDoLocalPixelSequence + process.HLTDoLocalStripSequence + process.HLTIterL3OIAndIOFromL2muonTkCandidateSequenceScoutingNoVtx + process.hltIterL3MuonL1MuonNoL2SelectorScoutingNoVtx + process.HLTIterL3IOmuonFromL1TkCandidateSequenceScoutingNoVtx ) +process.HLTL3muonrecoNocandSequenceScoutingNoVtx = cms.Sequence( process.HLTIterL3muonTkCandidateSequenceScoutingNoVtx + process.hltIterL3MuonMergedScoutingNoVtx + process.hltIterL3MuonAndMuonFromL1MergedScoutingNoVtx + process.hltL3MuonsIterL3LinksScoutingNoVtx + process.hltIterL3MuonsScoutingNoVtx ) +process.HLTL3muonrecoSequenceScoutingNoVtx = cms.Sequence( process.HLTL3muonrecoNocandSequenceScoutingNoVtx + process.hltIterL3MuonCandidatesScoutingNoVtx ) +process.HLTPFClusteringEcalMFForMuonsScoutingNoVtx = cms.Sequence( process.hltRecHitInRegionForMuonsMFnoVtx + process.hltRecHitInRegionForMuonsESScoutingNoVtx + process.hltParticleFlowRecHitECALForMuonsMFScoutingNoVtx + process.hltParticleFlowRecHitPSForMuonsScoutingNoVtx + process.hltParticleFlowClusterECALUncorrectedForMuonsMFScoutingNoVtx + process.hltParticleFlowClusterPSForMuonsScoutingNoVtx + process.hltParticleFlowClusterECALForMuonsMFScoutingNoVtx ) +process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalMFSequence + process.HLTDoLocalHcalSequence + process.hltTowerMakerForECALMF + process.hltTowerMakerForHCAL + process.hltFixedGridRhoFastjetECALMFForMuons + process.hltFixedGridRhoFastjetHCAL + process.HLTPFClusteringEcalMFForMuonsScoutingNoVtx + process.hltMuonEcalMFPFClusterIsoForMuonsScoutingNoVtx ) +process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx = cms.Sequence( process.HLTPFHcalClustering + process.hltMuonHcalPFClusterIsoForMuonsScoutingNoVtx ) +process.HLTPixelTrackingL3MuonScoutingNoVtx = cms.Sequence( process.hltL3MuonVertexScoutingNoVtx + process.HLTDoLocalPixelSequence + process.hltPixelLayerQuadruplets + process.hltPixelTracksL3MuonFilter + process.hltPixelTracksL3MuonFitter + process.hltPixelTracksTrackingRegionsL3MuonScoutingNoVtx + process.hltPixelTracksHitDoubletsL3MuonScoutingNoVtx + process.hltPixelTracksHitQuadrupletsL3MuonScoutingNoVtx + process.hltPixelTracksL3MuonScoutingNoVtx + process.hltPixelVerticesL3MuonScoutingNoVtx ) +process.HLTIterativeTrackingL3MuonIteration0ScoutingNoVtx = cms.Sequence( process.hltPixelTracksForSeedsL3MuonFilter + process.hltPixelTracksForSeedsL3MuonFitter + process.hltPixelTracksTrackingRegionsForSeedsL3MuonScoutingNoVtx + process.hltPixelTracksHitDoubletsForSeedsL3MuonScoutingNoVtx + process.hltPixelTracksHitQuadrupletsForSeedsL3MuonScoutingNoVtx + process.hltPixelTracksForSeedsL3MuonScoutingNoVtx + process.hltIter0L3MuonPixelSeedsFromPixelTracksScoutingNoVtx + process.hltIter0L3MuonCkfTrackCandidatesScoutingNoVtx + process.hltIter0L3MuonCtfWithMaterialTracksScoutingNoVtx + process.hltIter0L3MuonTrackCutClassifierScoutingNoVtx + process.hltIter0L3MuonTrackSelectionHighPurityScoutingNoVtx ) +process.HLTIterativeTrackingL3MuonIteration1ScoutingNoVtx = cms.Sequence( process.hltIter1L3MuonClustersRefRemovalScoutingNoVtx + process.hltIter1L3MuonMaskedMeasurementTrackerEventScoutingNoVtx + process.hltIter1L3MuonPixelLayerQuadrupletsScoutingNoVtx + process.hltIter1L3MuonPixelTrackingRegionsScoutingNoVtx + process.hltIter1L3MuonPixelClusterCheck + process.hltIter1L3MuonPixelHitDoubletsScoutingNoVtx + process.hltIter1L3MuonPixelHitQuadrupletsScoutingNoVtx + process.hltIter1L3MuonPixelSeedsScoutingNoVtx + process.hltIter1L3MuonCkfTrackCandidatesScoutingNoVtx + process.hltIter1L3MuonCtfWithMaterialTracksScoutingNoVtx + process.hltIter1L3MuonTrackCutClassifierPromptScoutingNoVtx + process.hltIter1L3MuonTrackCutClassifierDetachedScoutingNoVtx + process.hltIter1L3MuonTrackCutClassifierMergedScoutingNoVtx + process.hltIter1L3MuonTrackSelectionHighPurityScoutingNoVtx ) +process.HLTIterativeTrackingL3MuonIteration2ScoutingNoVtx = cms.Sequence( process.hltIter2L3MuonClustersRefRemovalScoutingNoVtx + process.hltIter2L3MuonMaskedMeasurementTrackerEventScoutingNoVtx + process.hltIter2L3MuonPixelLayerTripletsScoutingNoVtx + process.hltIter2L3MuonPixelTrackingRegionsScoutingNoVtx + process.hltIter2L3MuonPixelClusterCheck + process.hltIter2L3MuonPixelHitDoubletsScoutingNoVtx + process.hltIter2L3MuonPixelHitTripletsScoutingNoVtx + process.hltIter2L3MuonPixelSeedsScoutingNoVtx + process.hltIter2L3MuonCkfTrackCandidatesScoutingNoVtx + process.hltIter2L3MuonCtfWithMaterialTracksScoutingNoVtx + process.hltIter2L3MuonTrackCutClassifierScoutingNoVtx + process.hltIter2L3MuonTrackSelectionHighPurityScoutingNoVtx ) +process.HLTIterativeTrackingL3MuonIter02ScoutingNoVtx = cms.Sequence( process.HLTIterativeTrackingL3MuonIteration0ScoutingNoVtx + process.HLTIterativeTrackingL3MuonIteration1ScoutingNoVtx + process.hltIter1L3MuonMergedScoutingNoVtx + process.HLTIterativeTrackingL3MuonIteration2ScoutingNoVtx + process.hltIter2L3MuonMergedScoutingNoVtx ) +process.HLTTrackReconstructionForIsoL3MuonIter02ScoutingNoVtx = cms.Sequence( process.HLTPixelTrackingL3MuonScoutingNoVtx + process.HLTDoLocalStripSequence + process.HLTIterativeTrackingL3MuonIter02ScoutingNoVtx ) +process.HLTMuIsolationSequenceScoutingNoVtx = cms.Sequence( process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx + process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuonsScoutingNoVtx + process.HLTTrackReconstructionForIsoL3MuonIter02ScoutingNoVtx + process.hltMuonTkRelIsolationCut0p09MapScoutingNoVtx ) process.HLTDoHIEcalClusWithCleaningSequence = cms.Sequence( process.hltIslandBasicClustersHI + process.hltHiIslandSuperClustersHI + process.hltHiCorrectedIslandBarrelSuperClustersHI + process.hltHiCorrectedIslandEndcapSuperClustersHI + process.hltCleanedHiCorrectedIslandBarrelSuperClustersHI + process.hltRecoHIEcalWithCleaningCandidate ) process.HLTPhoton20SequenceLooseHOverE = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG10Filter + process.hltEG20EtFilterLooseHoverE + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG20HEFilterLooseHoverE ) process.HLTPhoton30SequenceLooseHOverE = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG10Filter + process.hltEG30EtFilterLooseHoverE + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG30HEFilterLooseHoverE ) process.HLTBeginSequenceCalibration = cms.Sequence( process.hltCalibrationEventsFilter + process.hltGtStage2Digis ) process.HLTBeginSequenceNZS = cms.Sequence( process.hltTriggerType + process.hltL1EventNumberNZS + process.HLTL1UnpackerSequence + process.HLTBeamSpot ) +process.HLTNoPUSequence = cms.Sequence( process.HLTDoLocalPixelSequenceRegForBTag + process.HLTFastRecopixelvertexingSequence + process.hltPixelTracksForNoPUFilter + process.hltSelectorJets20L1FastJetForNoPU + process.hltPixelTracksForNoPUFitter + process.hltPixelTracksTrackingRegionsForNoPU + process.hltPixelTracksHitDoubletsForNoPU + process.hltPixelTracksHitQuadrupletsForNoPU + process.hltPixelTracksForNoPU + process.hltCaloJetFromPV ) process.HLTDiphoton1010R9Id85b90eORIso60CaloId15b35eANDHE10R9Id50b80eMass10Sequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5Filter + process.hltEG10EtL1SingleEG5EtFilter + process.hltEgammaR9ID + process.hltEG10R9Id50b80eR9IdFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHToverET + process.hltEG10HE10R9Id50b80eHEFilter + cms.ignore(process.hltEG10R9Id85b90eHE10R9Id50b80eR9IdLastFilter) + process.hltEgammaClusterShape + cms.ignore(process.hltEG10CaloId15b35eHE10R9Id50b80eClusterShapeFilter) + process.hltEgammaEcalPFClusterIso + cms.ignore(process.hltEG10Iso60CaloId15b35eHE10R9Id50b80eEcalIsoLastFilter) + process.hltEG10RId85b90eORIso60CaloId15b35eANDHE10R9Id50b80eLegCombLastFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltDiEG10EtEta2p55UnseededFilter + process.hltEgammaR9IDUnseeded + process.hltDiEG10R9Id50b80eR9IdUnseededFilter + process.hltEgammaHoverEUnseeded + process.hltDiEG10HE10R9Id50b80eHEUnseededFilter + cms.ignore(process.hltDiEG10R9Id85b90eHE10R9Id50b80eR9UnseededLastFilter) + process.hltEgammaClusterShapeUnseeded + cms.ignore(process.hltDiEG10CaloId15b35eHE10R9Id50b80eClusterShapeUnseededFilter) + process.hltEgammaEcalPFClusterIsoUnseeded + cms.ignore(process.hltDiEG10Iso60LCaloId15b35eHE10R9Id50b80eEcalIsoUnseededFilter) + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIsoUnseeded + cms.ignore(process.hltDiEG10Iso60LCaloId15b35eHE10R9Id50b80eTrackIsoUnseededLastFilter) + process.hltDiEG10R9Id85b90eORIso60CaloId15b35eANDHE10R9Id50b80eMass10CombMassLastFilter ) process.HLTEle5CaloIdLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5WithJetAndTauFilter + process.hltEG5L1SingleEG5WithJetAndTauEtFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG5HEFilter + process.hltEgammaClusterShape + process.hltEG5CaloIdLClusterShapeFilter + process.HLTElePixelMatchSequence + process.hltEle5CaloIdLPixelMatchFilter ) process.HLTEle5CaloIdLMWSequence = cms.Sequence( process.HLTEle5CaloIdLSequence + process.hltEle5CaloIdLMWPMS2Filter ) process.HLTDoubleEle5CaloIdLUnseededSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltEgammaCandidatesWrapperUnseeded + process.hltDiEG5EtUnseededFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverEUnseeded + process.hltDiEG5HEUnseededFilter + process.hltEgammaClusterShapeUnseeded + process.hltDiEG5CaloIdLClusterShapeUnseededFilter + process.HLTElePixelMatchUnseededSequence + process.hltDiEle5CaloIdLPixelMatchUnseededFilter ) process.HLTDoubleEle5CaloIdLMWSequence = cms.Sequence( process.HLTDoubleEle5CaloIdLUnseededSequence + process.hltDiEle5CaloIdLMWPMS2UnseededFilter ) -process.HLTEle5WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5Filter + process.hltEG5L1SingleEG5EtFilter + process.hltEgammaClusterShape + process.hltEle5WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle5WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle5WPTightEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle5WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle5WPTightPixelMatchFilter + process.hltEle5WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle5WPTightGsfOneOEMinusOneOPFilter + process.hltEle5WPTightGsfMissingHitsFilter + process.hltEle5WPTightGsfDetaFilter + process.hltEle5WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle5WPTightGsfTrackIsoFilter ) -process.HLTEle15Ele10CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg2Filter + process.hltEgammaClusterShape + process.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg2Filter + process.hltEgammaEcalPFClusterIso + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + process.HLTElePixelMatchSequence + process.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + process.HLTGsfElectronSequence + process.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg2Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg2Filter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) +process.HLTEle5WPTightGsfSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5Filter + process.hltEG5L1SingleEG5EtFilter + process.hltEgammaClusterShape + process.hltEle5WPTightClusterShapeFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle5WPTightHEFilter + process.hltEgammaEcalPFClusterIso + process.hltEle5WPTightEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle5WPTightHcalIsoFilter + process.HLTElePixelMatchSequence + process.hltEle5WPTightPixelMatchFilter + process.hltEle5WPTightPMS2Filter + process.HLTGsfElectronSequence + process.hltEle5WPTightGsfOneOEMinusOneOPFilter + process.hltEle5WPTightGsfMissingHitsFilter + process.hltEle5WPTightGsfDetaFilter + process.hltEle5WPTightGsfDphiFilter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle5WPTightGsfTrackIsoFilter ) +process.HLTEle15Ele10CaloIdLTrackIdLIsoVLSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG5Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEtLeg2Filter + process.hltEgammaClusterShape + process.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLClusterShapeLeg2Filter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHELeg2Filter + process.hltEgammaEcalPFClusterIso + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLEcalIsoLeg2Filter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLHcalIsoLeg2Filter + process.HLTElePixelMatchSequence + process.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLPixelMatchLeg2Filter + process.HLTGsfElectronSequence + process.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLOneOEMinusOneOPLeg2Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDetaLeg2Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLDphiLeg2Filter + process.HLTTrackReconstructionForIsoElectronIter02 + process.hltEgammaEleGsfTrackIso + process.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg1Filter + process.hltEle15Ele10CaloIdLTrackIdLIsoVLTrackIsoLeg2Filter ) process.HLTMuIsolationSequenceForMC = cms.Sequence( process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons + process.hltL3fL1sMu5L1L2L3pfecalIsoRhoFilteredEB0p14EE0p10 + process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons + process.hltL3fL1sMu5L1L2L3pfhcalIsoRhoFilteredHB0p16HE0p20 + process.HLTTrackReconstructionForIsoL3MuonIter02 + process.hltMuonTkRelIsolationCut0p07Map ) process.HLTMu24Eta2p1IsoTau40Eta2p1IsolationSequence = cms.Sequence( process.HLTL3muonEcalPFisorecoSequenceNoBoolsForMuons + process.hltL3fL1sMu22erIsoTau40erL1f0L2f10QL3Filtered24QL3pfecalIsoRhoFilteredEB0p14EE0p10 + process.HLTL3muonHcalPFisorecoSequenceNoBoolsForMuons + process.hltL3fL1sMu22IsoTau40erL1f0L2f10QL3Filtered24QL3pfhcalIsoRhoFilteredHB0p16HE0p20 + process.HLTTrackReconstructionForIsoL3MuonIter02 + process.hltMuonTkRelIsolationCut0p07Map ) process.HLTMediumChargedIsoPFTau50Trk30OnePrSequence = cms.Sequence( process.HLTMediumChargedIsoPFTauSequence + process.hltPFTau50 + process.hltSelectedPFTausTrackFinding + process.hltPFTau50Track + process.hltPFTauTrackPt30Discriminator + process.hltPFTau1Prong + process.hltSelectedPFTausTrackPt30MediumAbsOrRelIsolation1Prong + process.hltPFTau50TrackPt30MediumAbsOrRelIso1Prong ) @@ -91296,7 +93195,7 @@ process.HLTHPSDoubleLooseChargedIsoAntiMuonPFTau20Sequence = cms.Sequence( process.HLTHPSLooseChargedIsoPFTauSequence + process.hltHpsDoublePFTau20 + process.hltHpsSelectedPFTausTrackFinding + process.hltHpsDoublePFTau20Track + process.hltHpsSelectedPFTausTrackFindingLooseChargedIsolation + process.hltHpsDoublePFTau20TrackLooseChargedIso + process.hltHpsPFTauAgainstMuonDiscriminator + process.hltHpsSelectedPFTausTrackFindingLooseChargedIsolationAgainstMuon + process.hltHpsDoublePFTau20TrackLooseChargedIsoAgainstMuon ) process.HLTHPSDoubleMediumChargedIsoAntiMuonPFTau20Sequence = cms.Sequence( process.HLTHPSMediumChargedIsoPFTauSequence + process.hltHpsDoublePFTau20 + process.hltHpsSelectedPFTausTrackFinding + process.hltHpsDoublePFTau20Track + process.hltHpsSelectedPFTausTrackFindingMediumChargedIsolation + process.hltHpsDoublePFTau20TrackMediumChargedIso + process.hltHpsPFTauAgainstMuonDiscriminator + process.hltHpsSelectedPFTausTrackFindingMediumChargedIsolationAgainstMuon + process.hltHpsDoublePFTau20TrackMediumChargedIsoAgainstMuon ) process.HLTHPSDoubleTightChargedIsoAntiMuonPFTau20Sequence = cms.Sequence( process.HLTHPSTightChargedIsoPFTauSequence + process.hltHpsDoublePFTau20 + process.hltHpsSelectedPFTausTrackFinding + process.hltHpsDoublePFTau20Track + process.hltHpsSelectedPFTausTrackFindingTightChargedIsolation + process.hltHpsDoublePFTau20TrackTightChargedIso + process.hltHpsPFTauAgainstMuonDiscriminator + process.hltHpsSelectedPFTausTrackFindingTightChargedIsolationAgainstMuon + process.hltHpsDoublePFTau20TrackTightChargedIsoAgainstMuon ) -process.HLTPhoton50R9Id90HE10IsoMEBOnlySequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG50R9Id90HE10IsoMEBOnlyEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG50R9Id90HE10IsoMEBOnlyHEFilter + process.hltEgammaR9ID + process.hltEG50R9Id90HE10IsoMEBOnlyR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG50R9Id90HE10IsoMEBOnlyEcalIsoFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIso + process.hltEG50R9Id90HE10IsoMEBOnlyHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG50R9Id90HE10IsoMEBOnlyTrackIsoFilter ) +process.HLTPhoton50R9Id90HE10IsoMEBOnlySequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleEG40Filter + process.hltEG50R9Id90HE10IsoMEBOnlyEtFilter + process.hltEgammaClusterShape + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG50R9Id90HE10IsoMEBOnlyHEFilter + process.hltEgammaR9ID + process.hltEG50R9Id90HE10IsoMEBOnlyR9Filter + process.hltEgammaEcalPFClusterIso + process.hltEG50R9Id90HE10IsoMEBOnlyEcalIsoFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIso + process.hltEG50R9Id90HE10IsoMEBOnlyHcalIsoFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIso + process.hltEG50R9Id90HE10IsoMEBOnlyTrackIsoFilter ) process.HLTIterativeTrackingDoubleJpsiIteration0 = cms.Sequence( process.hltPixelTracksForSeedsJpsiFilter + process.hltPixelTracksForSeedsJpsiFitter + process.hltPixelTracksTrackingRegionsForSeedsJpsiDoubleTrk + process.hltPixelLayerQuadruplets + process.hltPixelTracksHitDoubletsForSeedsJpsiDoubleTrk + process.hltPixelTracksHitQuadrupletsForSeedsJpsiDoubleTrk + process.hltPixelTracksForSeedsJpsiDoubleTrk + process.hltIter0DisplacedJpsiPixelSeedsFromPixelTracksDoubleTrk + process.hltIter0DisplacedJpsiCkfTrackCandidatesDoubleTrk + process.hltIter0DisplacedJpsiCtfWithMaterialTracksDoubleTrk + process.hltIter0DisplacedJpsiTrackCutClassifierDoubleTrk + process.hltIter0DisplacedJpsiTrackSelectionHighPurityDoubleTrk ) process.HLTIterativeTrackingDoubleJpsiIteration1 = cms.Sequence( process.hltIter1DisplacedJpsiClustersRefRemovalDoubleTrk + process.hltIter1DisplacedJpsiMaskedMeasurementTrackerEventDoubleTrk + process.hltIter1DisplacedJpsiPixelLayerQuadrupletsDoubleTrk + process.hltIter1DisplacedJpsiPixelTrackingRegionsDoubleTrk + process.hltIter1DisplacedJpsiPixelClusterCheck + process.hltIter1DisplacedJpsiPixelHitDoubletsDoubleTrk + process.hltIter1DisplacedJpsiPixelHitQuadrupletsDoubleTrk + process.hltIter1DisplacedJpsiPixelSeedsDoubleTrk + process.hltIter1DisplacedJpsiCkfTrackCandidatesDoubleTrk + process.hltIter1DisplacedJpsiCtfWithMaterialTracksDoubleTrk + process.hltIter1DisplacedJpsiTrackCutClassifierPromptDoubleTrk + process.hltIter1DisplacedJpsiTrackCutClassifierDetachedDoubleTrk + process.hltIter1DisplacedJpsiTrackCutClassifierMergedDoubleTrk + process.hltIter1DisplacedJpsiTrackSelectionHighPurityDoubleTrk ) process.HLTIterativeTrackingDoubleJpsiIteration2 = cms.Sequence( process.hltIter2DisplacedJpsiClustersRefRemovalDoubleTrk + process.hltIter2DisplacedJpsiMaskedMeasurementTrackerEventDoubleTrk + process.hltIter2DisplacedJpsiPixelLayerTripletsDoubleTrk + process.hltIter2DisplacedJpsiPixelTrackingRegionsDoubleTrk + process.hltIter2DisplacedJpsiPixelClusterCheck + process.hltIter2DisplacedJpsiPixelHitDoubletsDoubleTrk + process.hltIter2DisplacedJpsiPixelHitTripletsDoubleTrk + process.hltIter2DisplacedJpsiPixelSeedsDoubleTrk + process.hltIter2DisplacedJpsiCkfTrackCandidatesDoubleTrk + process.hltIter2DisplacedJpsiCtfWithMaterialTracksDoubleTrk + process.hltIter2DisplacedJpsiTrackCutClassifierDoubleTrk + process.hltIter2DisplacedJpsiTrackSelectionHighPurityDoubleTrk ) @@ -91310,6 +93209,7 @@ process.HLTDiphoton3018R9Idb50e90ANDIso60CaloId15b35eANDHE12b10eMass55NoPixelVetoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG30L1SingleAndDoubleEGOrEtFilter + process.hltEgammaR9ID + process.hltEG30R9Id50b80eR9IdFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG30HE12b10eR9Id50b80eHEFilter + process.hltEG30R9Id50b90eHE12b10eR9Id50b80eR9IdFilter + process.hltEgammaClusterShape + process.hltEG30CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eClusterShapeFilter + process.hltEgammaEcalPFClusterIso + process.hltEG30Iso60CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eEcalIsoFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltDiEG18EtUnseededFilter + process.hltEgammaR9IDUnseeded + process.hltDiEG18R9Id50b80eR9IdUnseededFilter + process.hltEgammaHoverEUnseeded + process.hltDiEG18HE12b10eR9Id50b80eHEUnseededFilter + process.hltEG18R9Id50b90eHE12b10eR9Id50b80eR9IdUnseededFilter + process.hltEgammaClusterShapeUnseeded + process.hltEG18CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eClusterShapeUnseededFilter + process.hltEgammaEcalPFClusterIsoUnseeded + process.hltEG18Iso60CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eEcalIsoUnseededFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIsoUnseeded + process.hltEG18TrackIso60Iso60CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eTrackIsoUnseededFilter + process.hltEG18TrackIso60Iso60CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eMass55CombMassLastFilter ) process.HLTDiphoton3018R9Idb50e90ANDIso60CaloId15b35eANDHE12b10eNoPixelVetoSequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgamma + process.hltEgammaCandidates + process.hltEGL1SingleAndDoubleEGOrFilter + process.hltEG30L1SingleAndDoubleEGOrEtFilter + process.hltEgammaR9ID + process.hltEG30R9Id50b80eR9IdFilter + process.HLTDoLocalHcalSequence + process.HLTFastJetForEgamma + process.hltEgammaHoverE + process.hltEG30HE12b10eR9Id50b80eHEFilter + process.hltEG30R9Id50b90eHE12b10eR9Id50b80eR9IdFilter + process.hltEgammaClusterShape + process.hltEG30CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eClusterShapeFilter + process.hltEgammaEcalPFClusterIso + process.hltEG30Iso60CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eEcalIsoFilter + process.HLTPFClusteringForEgammaUnseeded + process.hltEgammaCandidatesUnseeded + process.hltDiEG18EtUnseededFilter + process.hltEgammaR9IDUnseeded + process.hltDiEG18R9Id50b80eR9IdUnseededFilter + process.hltEgammaHoverEUnseeded + process.hltDiEG18HE12b10eR9Id50b80eHEUnseededFilter + process.hltEG18R9Id50b90eHE12b10eR9Id50b80eR9IdUnseededFilter + process.hltEgammaClusterShapeUnseeded + process.hltEG18CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eClusterShapeUnseededFilter + process.hltEgammaEcalPFClusterIsoUnseeded + process.hltEG18Iso60CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eEcalIsoUnseededFilter + process.HLTTrackReconstructionForIsoForPhotons + process.hltEgammaHollowTrackIsoUnseeded + process.hltEG18TrackIso60Iso60CaloId15b35eR9Id50b90eHE12b10eR9Id50b80eTrackIsoUnseededFilter ) process.HLTBeginSequenceParking = cms.Sequence( process.hltTriggerType + process.hltEnableParking + process.HLTL1UnpackerSequence + process.HLTBeamSpot ) +process.HLTPixelOnlyPFScoutingPackingSequence = cms.Sequence( process.hltScoutingPFPacker + process.hltScoutingMuonPacker + process.hltScoutingEgammaPacker ) process.HLTPFScoutingPackingSequence = cms.Sequence( process.hltScoutingPFPacker + process.hltScoutingMuonPacker + process.hltScoutingEgammaPacker ) process.HLTriggerFirstPath = cms.Path( process.hltGetConditions + process.hltGetRaw + process.hltPSetMap + process.hltBoolFalse ) @@ -91830,24 +93730,7 @@ process.HLT_ZeroBias_part6_v6 = cms.Path( process.HLTBeginSequence + process.hltL1sZeroBias + process.hltPreZeroBiaspart6 + process.HLTEndSequence ) process.HLT_ZeroBias_part7_v6 = cms.Path( process.HLTBeginSequence + process.hltL1sZeroBias + process.hltPreZeroBiaspart7 + process.HLTEndSequence ) process.DST_ZeroBias_v2 = cms.Path( process.HLTBeginSequence + process.hltL1sZeroBias + process.hltPreDSTZeroBias + process.HLTEndSequence ) -process.DST_HT250_CaloScouting_v10 = cms.Path( process.HLTBeginSequence + process.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 + process.hltPreDSTHT250CaloScouting + process.HLTAK4CaloJetsSequence + process.hltHtMht + process.hltHT250 + process.HLTCaloScoutingSequence + process.HLTEndSequence ) -process.DST_HT250_CaloBTagScouting_v10 = cms.Path( process.HLTBeginSequence + process.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 + process.hltPreDSTHT250CaloBTagScouting + process.HLTAK4CaloJetsSequence + process.hltHtMht + process.hltHT250 + process.HLTCaloScoutingSequence + process.HLTCaloBTagScoutingSequence + process.HLTEndSequence ) -process.DST_HT410_PFScouting_v16 = cms.Path( process.HLTBeginSequence + process.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 + process.hltPreDSTHT410PFScouting + process.HLTAK4CaloJetsSequence + process.hltHtMht + process.hltHT410 + process.HLTPFScoutingSequence + process.HLTEndSequence ) -process.DST_HT410_BTagScouting_v16 = cms.Path( process.HLTBeginSequence + process.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 + process.hltPreDSTHT410BTagScouting + process.HLTAK4CaloJetsSequence + process.hltHtMht + process.hltHT410 + process.HLTPFScoutingSequence + process.HLTBTagScoutingSequence + process.HLTEndSequence ) -process.DST_ZeroBias_BTagScouting_v15 = cms.Path( process.HLTBeginSequence + process.hltL1sZeroBias + process.hltPreDSTZeroBiasBTagScouting + process.HLTPFScoutingSequence + process.HLTBTagScoutingSequence + process.HLTEndSequence ) -process.DST_ZeroBias_CaloScouting_PFScouting_v14 = cms.Path( process.HLTBeginSequence + process.hltL1sZeroBias + process.hltPreDSTZeroBiasCaloScoutingPFScouting + process.HLTCaloScoutingSequence + process.HLTPFScoutingSequence + process.HLTEndSequence ) -process.DST_CaloJet40_BTagScouting_v15 = cms.Path( process.HLTBeginSequence + process.hltL1sZeroBias + process.hltPreDSTCaloJet40BTagScouting + process.HLTAK4CaloJetsSequence + process.hltSingleAK4CaloJet40 + process.HLTPFScoutingSequence + process.HLTBTagScoutingSequence + process.HLTEndSequence ) -process.DST_CaloJet40_CaloScouting_PFScouting_v15 = cms.Path( process.HLTBeginSequence + process.hltL1sZeroBias + process.hltPreDSTCaloJet40CaloScoutingPFScouting + process.HLTAK4CaloJetsSequence + process.hltSingleAK4CaloJet40 + process.HLTCaloScoutingSequence + process.HLTPFScoutingSequence + process.HLTEndSequence ) -process.DST_CaloJet40_CaloBTagScouting_v14 = cms.Path( process.HLTBeginSequence + process.hltL1sZeroBias + process.hltPreDSTCaloJet40CaloBTagScouting + process.HLTAK4CaloJetsSequence + process.hltSingleAK4CaloJet40 + process.HLTCaloScoutingSequence + process.HLTCaloBTagScoutingSequence + process.HLTPFScoutingSequence + process.HLTEndSequence ) -process.DST_L1HTT_BTagScouting_v15 = cms.Path( process.HLTBeginSequence + process.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 + process.hltPreDSTL1HTTBTagScouting + process.HLTPFScoutingSequence + process.HLTBTagScoutingSequence + process.HLTEndSequence ) -process.DST_L1HTT_CaloScouting_PFScouting_v15 = cms.Path( process.HLTBeginSequence + process.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 + process.hltPreDSTL1HTTCaloScoutingPFScouting + process.HLTCaloScoutingSequence + process.HLTPFScoutingSequence + process.HLTEndSequence ) -process.DST_L1HTT_CaloBTagScouting_v14 = cms.Path( process.HLTBeginSequence + process.hltL1sHTT200to500IorSingleJet180to200IorDoubleJet30Mass300to400 + process.hltPreDSTL1HTTCaloBTagScouting + process.HLTCaloScoutingSequence + process.HLTCaloBTagScoutingSequence + process.HLTPFScoutingSequence + process.HLTEndSequence ) -process.DST_L1DoubleMu_BTagScouting_v16 = cms.Path( process.HLTBeginSequence + process.hltL1sDoubleMuIorTripleMuIorQuadMu + process.hltPreDSTL1DoubleMuBTagScouting + process.HLTPFScoutingSequence + process.HLTBTagScoutingSequence + process.HLTEndSequence ) -process.DST_L1DoubleMu_CaloScouting_PFScouting_v15 = cms.Path( process.HLTBeginSequence + process.hltL1sDoubleMuIorTripleMuIorQuadMu + process.hltPreDSTL1DoubleMuCaloScoutingPFScouting + process.HLTCaloScoutingSequence + process.HLTPFScoutingSequence + process.HLTEndSequence ) -process.DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6 = cms.Path( process.HLTBeginSequence + process.hltL1sHTT200to500IorSingleJet180to200 + process.hltPreDSTDoubleMu3noVtxCaloScoutingMonitoring + process.HLTL2muonrecoSequenceNoVtx + process.HLTL3muonrecoSequenceNoVtx + process.HLTAK4CaloJetsSequence + process.hltHtMht + process.hltHT250 + process.HLTCaloScoutingSequence + process.HLTMuIsolationSequenceNoVtx + process.HLTEndSequence ) -process.DST_DoubleMu3_noVtx_CaloScouting_v6 = cms.Path( process.HLTBeginSequence + process.hltL1sDoubleMuIorTripleMuIorQuadMu + process.hltPreDSTDoubleMu3noVtxCaloScouting + process.hltDimuon3L1Filtered0 + process.HLTL2muonrecoSequenceNoVtx + process.hltDimuon3L2PreFiltered0 + process.HLTL3muonrecoSequenceNoVtx + process.hltDoubleMu3L3FilteredNoVtx + process.HLTCaloScoutingSequence + process.HLTMuIsolationSequenceNoVtx + process.hltDisplacedmumuVtxProducer + process.HLTEndSequence ) -process.DST_DoubleMu1_noVtx_CaloScouting_v2 = cms.Path( process.HLTBeginSequence + process.hltL1sDoubleMuIorTripleMuIorQuadMu + process.hltPreDSTDoubleMu1noVtxCaloScouting + process.hltDimuon3L1Filtered0 + process.HLTL2muonrecoSequenceNoVtx + process.hltDimuon3L2PreFiltered0 + process.HLTL3muonrecoSequenceNoVtx + process.hltDoubleMu1L3FilteredNoVtx + process.HLTCaloScoutingSequence + process.HLTMuIsolationSequenceNoVtx + process.hltDisplacedmumu1VtxProducer + process.HLTEndSequence ) -process.DST_DoubleMu3_noVtx_Mass10_PFScouting_v3 = cms.Path( process.HLTBeginSequence + process.hltL1sDoubleMuIorTripleMuIorQuadMu + process.hltPreDSTDoubleMu3noVtxMass10PFScouting + process.hltDimuon3L1Filtered0 + process.HLTL2muonrecoSequenceNoVtx + process.hltDimuon3L2PreFiltered0 + process.HLTL3muonrecoSequenceNoVtx + process.hltDoubleMu3L3FilteredNoVtxMass10 + process.HLTCaloScoutingSequence + process.HLTPFScoutingSequenceNoVtx + process.hltDisplacedmumuMass10VtxProducer + process.HLTEndSequence ) +process.DST_Run3_PFScoutingPixelTracking_v16 = cms.Path( process.HLTBeginSequence + process.hltL1sDSTRun3PFScoutingPixelTracking + process.hltPreDSTRun3PFScoutingPixelTracking + process.HLTAK4CaloJetsSequence + process.HLTPixelOnlyPFScoutingSequence + process.hltEgammaR9ID + process.HLTL2muonrecoSequenceScoutingNoVtx + process.HLTL3muonrecoSequenceScoutingNoVtx + process.hltDisplacedmumuVtxNoMatchingProducer + process.HLTMuIsolationSequenceScoutingNoVtx + process.HLTEndSequence ) process.HLT_AK4CaloJet30_v11 = cms.Path( process.HLTBeginSequence + process.hltL1sZeroBias + process.hltPreAK4CaloJet30 + process.HLTAK4CaloJetsSequence + process.hltSingleAK4CaloJet30 + process.HLTEndSequence ) process.HLT_AK4CaloJet40_v10 = cms.Path( process.HLTBeginSequence + process.hltL1sZeroBias + process.hltPreAK4CaloJet40 + process.HLTAK4CaloJetsSequence + process.hltSingleAK4CaloJet40 + process.HLTEndSequence ) process.HLT_AK4CaloJet50_v10 = cms.Path( process.HLTBeginSequence + process.hltL1sZeroBias + process.hltPreAK4CaloJet50 + process.HLTAK4CaloJetsSequence + process.hltSingleAK4CaloJet50 + process.HLTEndSequence ) @@ -92081,8 +93964,7 @@ process.ExpressOutput = cms.EndPath( process.hltGtStage2Digis + process.hltPreExpressOutput + process.hltPreExpressOutputSmart + process.hltOutputExpress ) process.ExpressAlignmentOutput = cms.EndPath( process.hltGtStage2Digis + process.hltPreExpressAlignmentOutput + process.hltPreExpressAlignmentOutputSmart + process.hltOutputExpressAlignment ) process.NanoDSTOutput = cms.EndPath( process.hltGtStage2Digis + process.hltPreNanoDSTOutput + process.hltOutputNanoDST ) -process.ScoutingPFOutput = cms.EndPath( process.hltGtStage2Digis + process.hltPreScoutingPFOutput + process.hltFEDSelectorL1 + process.HLTPFScoutingPackingSequence + process.hltScoutingPrimaryVertexPacker + process.hltOutputScoutingPF ) -process.ScoutingCaloMuonOutput = cms.EndPath( process.hltGtStage2Digis + process.hltPreScoutingCaloMuonOutput + process.hltFEDSelectorL1 + process.hltScoutingCaloPacker + process.hltScoutingMuonPackerCalo + process.hltScoutingPrimaryVertexPacker + process.hltScoutingPrimaryVertexPackerCaloMuon + process.hltScoutingTrackPacker + process.hltOutputScoutingCaloMuon ) +process.ScoutingPFOutput = cms.EndPath( process.hltGtStage2Digis + process.hltPreScoutingPFOutput + process.hltFEDSelectorL1 + process.HLTPixelOnlyPFScoutingPackingSequence + process.hltScoutingPrimaryVertexPacker + process.hltScoutingTrackPacker + process.hltOutputScoutingPF ) process.PhysicsScoutingMonitorOutput = cms.EndPath( process.hltGtStage2Digis + process.hltPrePhysicsScoutingMonitorOutput + process.hltPrePhysicsScoutingMonitorOutputSmart + process.hltScoutingCaloPacker + process.hltScoutingMuonPackerCalo + process.HLTPFScoutingPackingSequence + process.hltScoutingPrimaryVertexPacker + process.hltScoutingPrimaryVertexPackerCaloMuon + process.hltOutputPhysicsScoutingMonitor ) process.PhysicsHLTPhysics1Output = cms.EndPath( process.hltGtStage2Digis + process.hltPrePhysicsHLTPhysics1Output + process.hltOutputPhysicsHLTPhysics1 ) process.PhysicsHLTPhysics2Output = cms.EndPath( process.hltGtStage2Digis + process.hltPrePhysicsHLTPhysics2Output + process.hltOutputPhysicsHLTPhysics2 ) @@ -92094,7 +93976,7 @@ process.PhysicsZeroBias4Output = cms.EndPath( process.hltGtStage2Digis + process.hltPrePhysicsZeroBias4Output + process.hltOutputPhysicsZeroBias4 ) -process.HLTSchedule = cms.Schedule( *(process.HLTriggerFirstPath, process.HLT_AK8PFJet360_TrimMass30_v18, process.HLT_AK8PFJet380_TrimMass30_v11, process.HLT_AK8PFJet400_TrimMass30_v12, process.HLT_AK8PFJet420_TrimMass30_v11, process.HLT_AK8PFHT750_TrimMass50_v12, process.HLT_AK8PFHT800_TrimMass50_v12, process.HLT_AK8PFHT850_TrimMass50_v11, process.HLT_AK8PFHT900_TrimMass50_v11, process.HLT_CaloJet500_NoJetID_v12, process.HLT_CaloJet550_NoJetID_v7, process.HLT_DoubleMu5_Upsilon_DoubleEle3_CaloIdL_TrackIdL_v4, process.HLT_DoubleMu3_DoubleEle7p5_CaloIdL_TrackIdL_Upsilon_v4, process.HLT_Trimuon5_3p5_2_Upsilon_Muon_v5, process.HLT_TrimuonOpen_5_3p5_2_Upsilon_Muon_v3, process.HLT_DoubleEle25_CaloIdL_MW_v4, process.HLT_DoubleEle27_CaloIdL_MW_v4, process.HLT_DoubleEle33_CaloIdL_MW_v17, process.HLT_DoubleEle24_eta2p1_WPTight_Gsf_v7, process.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_DZ_PFHT350_v20, process.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_PFHT350_v20, process.HLT_Ele27_Ele37_CaloIdL_MW_v4, process.HLT_Mu27_Ele37_CaloIdL_MW_v5, process.HLT_Mu37_Ele27_CaloIdL_MW_v5, process.HLT_Mu37_TkMu27_v5, process.HLT_DoubleMu4_3_Bs_v14, process.HLT_DoubleMu4_3_Jpsi_v2, process.HLT_DoubleMu4_JpsiTrk_Displaced_v15, process.HLT_DoubleMu4_LowMassNonResonantTrk_Displaced_v15, process.HLT_DoubleMu3_Trk_Tau3mu_v12, process.HLT_DoubleMu3_TkMu_DsTau3Mu_v4, process.HLT_DoubleMu4_PsiPrimeTrk_Displaced_v15, process.HLT_DoubleMu4_Mass3p8_DZ_PFHT350_v8, process.HLT_Mu3_PFJet40_v16, process.HLT_Mu7p5_L2Mu2_Jpsi_v10, process.HLT_Mu7p5_L2Mu2_Upsilon_v10, process.HLT_Mu7p5_Track2_Jpsi_v11, process.HLT_Mu7p5_Track3p5_Jpsi_v11, process.HLT_Mu7p5_Track7_Jpsi_v11, process.HLT_Mu7p5_Track2_Upsilon_v11, process.HLT_Mu7p5_Track3p5_Upsilon_v11, process.HLT_Mu7p5_Track7_Upsilon_v11, process.HLT_Mu3_L1SingleMu5orSingleMu7_v1, process.HLT_DoublePhoton33_CaloIdL_v6, process.HLT_DoublePhoton70_v6, process.HLT_DoublePhoton85_v14, process.HLT_Ele20_WPTight_Gsf_v6, process.HLT_Ele15_WPLoose_Gsf_v3, process.HLT_Ele17_WPLoose_Gsf_v3, process.HLT_Ele20_WPLoose_Gsf_v6, process.HLT_Ele20_eta2p1_WPLoose_Gsf_v6, process.HLT_DiEle27_WPTightCaloOnly_L1DoubleEG_v4, process.HLT_Ele27_WPTight_Gsf_v16, process.HLT_Ele28_WPTight_Gsf_v1, process.HLT_Ele30_WPTight_Gsf_v1, process.HLT_Ele32_WPTight_Gsf_v15, process.HLT_Ele35_WPTight_Gsf_v9, process.HLT_Ele35_WPTight_Gsf_L1EGMT_v5, process.HLT_Ele38_WPTight_Gsf_v9, process.HLT_Ele40_WPTight_Gsf_v9, process.HLT_Ele32_WPTight_Gsf_L1DoubleEG_v9, process.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTau30_eta2p1_CrossL1_v13, process.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, process.HLT_HT450_Beamspot_v11, process.HLT_HT300_Beamspot_v11, process.HLT_ZeroBias_Beamspot_v4, process.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTau27_eta2p1_CrossL1_v12, process.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_CrossL1_v4, process.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, process.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, process.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, process.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, process.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v4, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS30_Trk1_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu27_LooseChargedIsoPFTau20_Trk1_eta2p1_SingleL1_v5, process.HLT_IsoMu27_LooseChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, process.HLT_IsoMu27_MediumChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, process.HLT_IsoMu27_TightChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, process.HLT_IsoMu20_v15, process.HLT_IsoMu24_v13, process.HLT_IsoMu24_eta2p1_v15, process.HLT_IsoMu27_v16, process.HLT_IsoMu30_v4, process.HLT_UncorrectedJetE30_NoBPTX_v6, process.HLT_UncorrectedJetE30_NoBPTX3BX_v6, process.HLT_UncorrectedJetE60_NoBPTX3BX_v6, process.HLT_UncorrectedJetE70_NoBPTX3BX_v6, process.HLT_L1SingleMu18_v3, process.HLT_L1SingleMu25_v2, process.HLT_L1SingleMuCosmics_v1, process.HLT_L2Mu10_v7, process.HLT_L2Mu10_NoVertex_NoBPTX3BX_v5, process.HLT_L2Mu10_NoVertex_NoBPTX_v6, process.HLT_L2Mu45_NoVertex_3Sta_NoBPTX3BX_v4, process.HLT_L2Mu40_NoVertex_3Sta_NoBPTX3BX_v5, process.HLT_L2Mu50_v2, process.HLT_L2Mu23NoVtx_2Cha_v1, process.HLT_L2Mu23NoVtx_2Cha_CosmicSeed_v1, process.HLT_DoubleL2Mu30NoVtx_2Cha_CosmicSeed_Eta2p4_v2, process.HLT_DoubleL2Mu30NoVtx_2Cha_Eta2p4_v2, process.HLT_DoubleL2Mu50_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_Eta2p4_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_Eta2p4_v2, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_v14, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_v3, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v15, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_v3, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8_v5, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass8_v3, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8_v5, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass3p8_v3, process.HLT_Mu25_TkMu0_Onia_v8, process.HLT_Mu30_TkMu0_Psi_v1, process.HLT_Mu30_TkMu0_Upsilon_v1, process.HLT_Mu20_TkMu0_Phi_v8, process.HLT_Mu25_TkMu0_Phi_v8, process.HLT_Mu12_v3, process.HLT_Mu15_v3, process.HLT_Mu20_v12, process.HLT_Mu27_v13, process.HLT_Mu50_v13, process.HLT_Mu55_v3, process.HLT_OldMu100_v3, process.HLT_TkMu100_v2, process.HLT_DiPFJet15_NoCaloMatched_v16, process.HLT_DiPFJet25_NoCaloMatched_v16, process.HLT_DiPFJet15_FBEta3_NoCaloMatched_v17, process.HLT_DiPFJet25_FBEta3_NoCaloMatched_v17, process.HLT_DiPFJetAve40_v14, process.HLT_DiPFJetAve60_v14, process.HLT_DiPFJetAve80_v13, process.HLT_DiPFJetAve140_v13, process.HLT_DiPFJetAve200_v13, process.HLT_DiPFJetAve260_v14, process.HLT_DiPFJetAve320_v14, process.HLT_DiPFJetAve400_v14, process.HLT_DiPFJetAve500_v14, process.HLT_DiPFJetAve15_HFJEC_v17, process.HLT_DiPFJetAve25_HFJEC_v17, process.HLT_DiPFJetAve35_HFJEC_v17, process.HLT_DiPFJetAve60_HFJEC_v15, process.HLT_DiPFJetAve80_HFJEC_v16, process.HLT_DiPFJetAve100_HFJEC_v16, process.HLT_DiPFJetAve160_HFJEC_v16, process.HLT_DiPFJetAve220_HFJEC_v16, process.HLT_DiPFJetAve300_HFJEC_v16, process.HLT_AK8PFJet15_v3, process.HLT_AK8PFJet25_v3, process.HLT_AK8PFJet40_v16, process.HLT_AK8PFJet60_v15, process.HLT_AK8PFJet80_v15, process.HLT_AK8PFJet140_v15, process.HLT_AK8PFJet200_v15, process.HLT_AK8PFJet260_v16, process.HLT_AK8PFJet320_v16, process.HLT_AK8PFJet400_v16, process.HLT_AK8PFJet450_v16, process.HLT_AK8PFJet500_v16, process.HLT_AK8PFJet550_v11, process.HLT_PFJet15_v3, process.HLT_PFJet25_v3, process.HLT_PFJet40_v21, process.HLT_PFJet60_v21, process.HLT_PFJet80_v20, process.HLT_PFJet140_v19, process.HLT_PFJet200_v19, process.HLT_PFJet260_v20, process.HLT_PFJet320_v20, process.HLT_PFJet400_v20, process.HLT_PFJet450_v21, process.HLT_PFJet500_v21, process.HLT_PFJet550_v11, process.HLT_PFJetFwd15_v3, process.HLT_PFJetFwd25_v3, process.HLT_PFJetFwd40_v19, process.HLT_PFJetFwd60_v19, process.HLT_PFJetFwd80_v18, process.HLT_PFJetFwd140_v18, process.HLT_PFJetFwd200_v18, process.HLT_PFJetFwd260_v19, process.HLT_PFJetFwd320_v19, process.HLT_PFJetFwd400_v19, process.HLT_PFJetFwd450_v19, process.HLT_PFJetFwd500_v19, process.HLT_AK8PFJetFwd15_v3, process.HLT_AK8PFJetFwd25_v3, process.HLT_AK8PFJetFwd40_v15, process.HLT_AK8PFJetFwd60_v14, process.HLT_AK8PFJetFwd80_v14, process.HLT_AK8PFJetFwd140_v14, process.HLT_AK8PFJetFwd200_v14, process.HLT_AK8PFJetFwd260_v15, process.HLT_AK8PFJetFwd320_v15, process.HLT_AK8PFJetFwd400_v15, process.HLT_AK8PFJetFwd450_v15, process.HLT_AK8PFJetFwd500_v15, process.HLT_PFHT180_v17, process.HLT_PFHT250_v17, process.HLT_PFHT370_v17, process.HLT_PFHT430_v17, process.HLT_PFHT510_v17, process.HLT_PFHT590_v17, process.HLT_PFHT680_v17, process.HLT_PFHT780_v17, process.HLT_PFHT890_v17, process.HLT_PFHT1050_v18, process.HLT_PFHT500_PFMET100_PFMHT100_IDTight_v12, process.HLT_PFHT500_PFMET110_PFMHT110_IDTight_v12, process.HLT_PFHT700_PFMET85_PFMHT85_IDTight_v12, process.HLT_PFHT700_PFMET95_PFMHT95_IDTight_v12, process.HLT_PFHT800_PFMET75_PFMHT75_IDTight_v12, process.HLT_PFHT800_PFMET85_PFMHT85_IDTight_v12, process.HLT_PFMET110_PFMHT110_IDTight_v20, process.HLT_PFMET120_PFMHT120_IDTight_v20, process.HLT_PFMET130_PFMHT130_IDTight_v20, process.HLT_PFMET140_PFMHT140_IDTight_v20, process.HLT_PFMET100_PFMHT100_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET110_PFMHT110_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET120_PFMHT120_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET130_PFMHT130_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET140_PFMHT140_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET120_PFMHT120_IDTight_PFHT60_v9, process.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_PFHT60_v9, process.HLT_PFMETTypeOne120_PFMHT120_IDTight_PFHT60_v9, process.HLT_PFMETTypeOne110_PFMHT110_IDTight_v12, process.HLT_PFMETTypeOne120_PFMHT120_IDTight_v12, process.HLT_PFMETTypeOne130_PFMHT130_IDTight_v12, process.HLT_PFMETTypeOne140_PFMHT140_IDTight_v11, process.HLT_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, process.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, process.HLT_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, process.HLT_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, process.HLT_MonoCentralPFJet80_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, process.HLT_MonoCentralPFJet80_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, process.HLT_MonoCentralPFJet80_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, process.HLT_MonoCentralPFJet80_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, process.HLT_L1ETMHadSeeds_v2, process.HLT_CaloMHT90_v4, process.HLT_CaloMET80_NotCleaned_v4, process.HLT_CaloMET90_NotCleaned_v4, process.HLT_CaloMET100_NotCleaned_v4, process.HLT_CaloMET110_NotCleaned_v4, process.HLT_CaloMET250_NotCleaned_v4, process.HLT_CaloMET300_NotCleaned_v4, process.HLT_CaloMET350_NotCleaned_v4, process.HLT_PFMET200_NotCleaned_v9, process.HLT_PFMET250_NotCleaned_v9, process.HLT_PFMET300_NotCleaned_v9, process.HLT_PFMET200_BeamHaloCleaned_v9, process.HLT_PFMETTypeOne200_BeamHaloCleaned_v9, process.HLT_MET105_IsoTrk50_v9, process.HLT_MET120_IsoTrk50_v9, process.HLT_SingleJet30_Mu12_SinglePFJet40_v11, process.HLT_Mu12_DoublePFJets40_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets100_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets200_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets350_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets40MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets54MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets62MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets40_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets100_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets200_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets350_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets116MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets128MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_Photon300_NoHE_v12, process.HLT_Mu8_TrkIsoVVL_v12, process.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_DZ_v18, process.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_v18, process.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_DZ_v19, process.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_v19, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v13, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_PFBtagDeepCSV_1p5_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_CaloBtagDeepCSV_1p5_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v11, process.HLT_Mu17_TrkIsoVVL_v13, process.HLT_Mu19_TrkIsoVVL_v4, process.HLT_BTagMu_AK4DiJet20_Mu5_v13, process.HLT_BTagMu_AK4DiJet40_Mu5_v13, process.HLT_BTagMu_AK4DiJet70_Mu5_v13, process.HLT_BTagMu_AK4DiJet110_Mu5_v13, process.HLT_BTagMu_AK4DiJet170_Mu5_v12, process.HLT_BTagMu_AK4Jet300_Mu5_v12, process.HLT_BTagMu_AK8DiJet170_Mu5_v9, process.HLT_BTagMu_AK8Jet170_DoubleMu5_v2, process.HLT_BTagMu_AK8Jet300_Mu5_v12, process.HLT_BTagMu_AK4DiJet20_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet40_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet70_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet110_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet170_Mu5_noalgo_v12, process.HLT_BTagMu_AK4Jet300_Mu5_noalgo_v12, process.HLT_BTagMu_AK8DiJet170_Mu5_noalgo_v9, process.HLT_BTagMu_AK8Jet170_DoubleMu5_noalgo_v2, process.HLT_BTagMu_AK8Jet300_Mu5_noalgo_v12, process.HLT_Ele15_Ele8_CaloIdL_TrackIdL_IsoVL_v3, process.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v19, process.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_v19, process.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v15, process.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_v7, process.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v7, process.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v15, process.HLT_Mu12_DoublePhoton20_v5, process.HLT_TriplePhoton_20_20_20_CaloIdLV2_v3, process.HLT_TriplePhoton_20_20_20_CaloIdLV2_R9IdVL_v3, process.HLT_TriplePhoton_30_30_10_CaloIdLV2_v4, process.HLT_TriplePhoton_30_30_10_CaloIdLV2_R9IdVL_v4, process.HLT_TriplePhoton_35_35_5_CaloIdLV2_R9IdVL_v4, process.HLT_Photon20_v2, process.HLT_Photon33_v5, process.HLT_Photon50_v13, process.HLT_Photon75_v13, process.HLT_Photon90_v13, process.HLT_Photon120_v13, process.HLT_Photon150_v6, process.HLT_Photon175_v14, process.HLT_Photon200_v13, process.HLT_Photon100EB_TightID_TightIso_v2, process.HLT_Photon110EB_TightID_TightIso_v2, process.HLT_Photon120EB_TightID_TightIso_v2, process.HLT_Photon100EBHE10_v2, process.HLT_Photon100EEHE10_v2, process.HLT_Photon100EE_TightID_TightIso_v2, process.HLT_Photon50_R9Id90_HE10_IsoM_v14, process.HLT_Photon75_R9Id90_HE10_IsoM_v14, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ300_PFJetsMJJ400DEta3_v5, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ400_PFJetsMJJ600DEta3_v5, process.HLT_Photon90_R9Id90_HE10_IsoM_v14, process.HLT_Photon120_R9Id90_HE10_IsoM_v14, process.HLT_Photon165_R9Id90_HE10_IsoM_v15, process.HLT_Photon90_CaloIdL_PFHT700_v16, process.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass90_v13, process.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass95_v13, process.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_PixelVeto_Mass55_v15, process.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_NoPixelVeto_Mass55_v13, process.HLT_Photon35_TwoProngs35_v1, process.HLT_IsoMu24_TwoProngs35_v1, process.HLT_Dimuon0_Jpsi_L1_NoOS_v7, process.HLT_Dimuon0_Jpsi_NoVertexing_NoOS_v7, process.HLT_Dimuon0_Jpsi_v8, process.HLT_Dimuon0_Jpsi_NoVertexing_v8, process.HLT_Dimuon0_Jpsi_L1_4R_0er1p5R_v7, process.HLT_Dimuon0_Jpsi_NoVertexing_L1_4R_0er1p5R_v7, process.HLT_Dimuon0_Jpsi3p5_Muon2_v5, process.HLT_Dimuon0_Upsilon_L1_4p5_v9, process.HLT_Dimuon0_Upsilon_L1_5_v9, process.HLT_Dimuon0_Upsilon_L1_4p5NoOS_v8, process.HLT_Dimuon0_Upsilon_L1_4p5er2p0_v9, process.HLT_Dimuon0_Upsilon_L1_4p5er2p0M_v7, process.HLT_Dimuon0_Upsilon_NoVertexing_v7, process.HLT_Dimuon0_Upsilon_L1_5M_v8, process.HLT_Dimuon0_LowMass_L1_0er1p5R_v7, process.HLT_Dimuon0_LowMass_L1_0er1p5_v8, process.HLT_Dimuon0_LowMass_v8, process.HLT_Dimuon0_LowMass_L1_4_v8, process.HLT_Dimuon0_LowMass_L1_4R_v7, process.HLT_Dimuon0_LowMass_L1_TM530_v6, process.HLT_Dimuon0_Upsilon_Muon_L1_TM0_v6, process.HLT_Dimuon0_Upsilon_Muon_NoL1Mass_v6, process.HLT_TripleMu_5_3_3_Mass3p8_DZ_v8, process.HLT_TripleMu_10_5_5_DZ_v10, process.HLT_TripleMu_12_10_5_v10, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_v4, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_Charge1_v4, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_v4, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_Charge1_v4, process.HLT_DoubleMu3_DZ_PFMET50_PFMHT60_v10, process.HLT_DoubleMu3_DZ_PFMET70_PFMHT70_v10, process.HLT_DoubleMu3_DZ_PFMET90_PFMHT90_v10, process.HLT_DoubleMu3_Trk_Tau3mu_NoL1Mass_v6, process.HLT_DoubleMu4_Jpsi_Displaced_v7, process.HLT_DoubleMu4_Jpsi_NoVertexing_v7, process.HLT_DoubleMu4_JpsiTrkTrk_Displaced_v7, process.HLT_DoubleMu43NoFiltersNoVtx_v4, process.HLT_DoubleMu48NoFiltersNoVtx_v4, process.HLT_Mu43NoFiltersNoVtx_Photon43_CaloIdL_v5, process.HLT_Mu48NoFiltersNoVtx_Photon48_CaloIdL_v5, process.HLT_Mu38NoFiltersNoVtxDisplaced_Photon38_CaloIdL_v1, process.HLT_Mu43NoFiltersNoVtxDisplaced_Photon43_CaloIdL_v1, process.HLT_DoubleMu33NoFiltersNoVtxDisplaced_v1, process.HLT_DoubleMu40NoFiltersNoVtxDisplaced_v1, process.HLT_DoubleMu20_7_Mass0to30_L1_DM4_v7, process.HLT_DoubleMu20_7_Mass0to30_L1_DM4EG_v8, process.HLT_HT425_v9, process.HLT_HT430_DisplacedDijet40_DisplacedTrack_v13, process.HLT_HT500_DisplacedDijet40_DisplacedTrack_v13, process.HLT_HT430_DisplacedDijet60_DisplacedTrack_v13, process.HLT_HT400_DisplacedDijet40_DisplacedTrack_v13, process.HLT_HT650_DisplacedDijet60_Inclusive_v13, process.HLT_HT550_DisplacedDijet60_Inclusive_v13, process.HLT_DiJet110_35_Mjj650_PFMET110_v9, process.HLT_DiJet110_35_Mjj650_PFMET120_v9, process.HLT_DiJet110_35_Mjj650_PFMET130_v9, process.HLT_TripleJet110_35_35_Mjj650_PFMET110_v9, process.HLT_TripleJet110_35_35_Mjj650_PFMET120_v9, process.HLT_TripleJet110_35_35_Mjj650_PFMET130_v9, process.HLT_Ele30_eta2p1_WPTight_Gsf_CentralPFJet35_EleCleaned_v13, process.HLT_Ele28_eta2p1_WPTight_Gsf_HT150_v13, process.HLT_Ele28_HighEta_SC20_Mass55_v13, process.HLT_DoubleMu20_7_Mass0to30_Photon23_v8, process.HLT_Ele15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, process.HLT_Ele15_IsoVVVL_PFHT450_PFMET50_v16, process.HLT_Ele15_IsoVVVL_PFHT450_v16, process.HLT_Ele50_IsoVVVL_PFHT450_v16, process.HLT_Ele15_IsoVVVL_PFHT600_v20, process.HLT_Mu4_TrkIsoVVL_DiPFJet90_40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v15, process.HLT_Mu8_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v16, process.HLT_Mu10_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT350_PFMETNoMu60_v15, process.HLT_Mu15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, process.HLT_Mu15_IsoVVVL_PFHT450_PFMET50_v15, process.HLT_Mu15_IsoVVVL_PFHT450_v15, process.HLT_Mu50_IsoVVVL_PFHT450_v15, process.HLT_Mu15_IsoVVVL_PFHT600_v19, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET70_PFMHT70_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET80_PFMHT80_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET90_PFMHT90_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET100_PFMHT100_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu70_PFMHTNoMu70_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu80_PFMHTNoMu80_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu90_PFMHTNoMu90_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu100_PFMHTNoMu100_IDTight_v2, process.HLT_Dimuon10_PsiPrime_Barrel_Seagulls_v7, process.HLT_Dimuon20_Jpsi_Barrel_Seagulls_v7, process.HLT_Dimuon12_Upsilon_y1p4_v2, process.HLT_Dimuon14_Phi_Barrel_Seagulls_v7, process.HLT_Dimuon18_PsiPrime_v14, process.HLT_Dimuon25_Jpsi_v14, process.HLT_Dimuon18_PsiPrime_noCorrL1_v6, process.HLT_Dimuon24_Upsilon_noCorrL1_v6, process.HLT_Dimuon24_Phi_noCorrL1_v6, process.HLT_Dimuon25_Jpsi_noCorrL1_v6, process.HLT_DiMu4_Ele9_CaloIdL_TrackIdL_DZ_Mass3p8_v17, process.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_DZ_v17, process.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_v17, process.HLT_DoubleIsoMu20_eta2p1_v7, process.HLT_TrkMu12_DoubleTrkMu5NoFiltersNoVtx_v6, process.HLT_TrkMu16_DoubleTrkMu6NoFiltersNoVtx_v12, process.HLT_TrkMu17_DoubleTrkMu8NoFiltersNoVtx_v13, process.HLT_Mu8_v12, process.HLT_Mu17_v13, process.HLT_Mu19_v4, process.HLT_Mu17_Photon30_IsoCaloId_v6, process.HLT_Ele8_CaloIdL_TrackIdL_IsoVL_PFJet30_v16, process.HLT_Ele12_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, process.HLT_Ele15_CaloIdL_TrackIdL_IsoVL_PFJet30_v3, process.HLT_Ele23_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, process.HLT_Ele8_CaloIdM_TrackIdM_PFJet30_v18, process.HLT_Ele17_CaloIdM_TrackIdM_PFJet30_v16, process.HLT_Ele23_CaloIdM_TrackIdM_PFJet30_v18, process.HLT_Ele50_CaloIdVT_GsfTrkIdT_PFJet165_v18, process.HLT_Ele115_CaloIdVT_GsfTrkIdT_v14, process.HLT_Ele135_CaloIdVT_GsfTrkIdT_v7, process.HLT_Ele145_CaloIdVT_GsfTrkIdT_v8, process.HLT_Ele200_CaloIdVT_GsfTrkIdT_v8, process.HLT_Ele250_CaloIdVT_GsfTrkIdT_v13, process.HLT_Ele300_CaloIdVT_GsfTrkIdT_v13, process.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_TriplePFBTagDeepCSV_4p5_v3, process.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_v9, process.HLT_PFHT400_SixPFJet32_DoublePFBTagDeepCSV_2p94_v8, process.HLT_PFHT400_SixPFJet32_v8, process.HLT_PFHT450_SixPFJet36_PFBTagDeepCSV_1p59_v7, process.HLT_PFHT450_SixPFJet36_v7, process.HLT_PFHT400_FivePFJet_100_100_60_30_30_v8, process.HLT_PFHT400_FivePFJet_100_100_60_30_30_DoublePFBTagDeepCSV_4p5_v8, process.HLT_PFHT400_FivePFJet_120_120_60_30_30_DoublePFBTagDeepCSV_4p5_v8, process.HLT_PFHT350_v19, process.HLT_PFHT350MinPFJet15_v9, process.HLT_Photon60_R9Id90_CaloIdL_IsoL_v5, process.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_v5, process.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_PFHT350MinPFJet15_v11, process.HLT_ECALHT800_v10, process.HLT_DiSC30_18_EIso_AND_HE_Mass70_v13, process.HLT_Physics_v7, process.HLT_Physics_part0_v7, process.HLT_Physics_part1_v7, process.HLT_Physics_part2_v7, process.HLT_Physics_part3_v7, process.HLT_Physics_part4_v7, process.HLT_Physics_part5_v7, process.HLT_Physics_part6_v7, process.HLT_Physics_part7_v7, process.DST_Physics_v7, process.HLT_Random_v3, process.HLT_ZeroBias_v6, process.HLT_ZeroBias_Alignment_v1, process.HLT_ZeroBias_part0_v6, process.HLT_ZeroBias_part1_v6, process.HLT_ZeroBias_part2_v6, process.HLT_ZeroBias_part3_v6, process.HLT_ZeroBias_part4_v6, process.HLT_ZeroBias_part5_v6, process.HLT_ZeroBias_part6_v6, process.HLT_ZeroBias_part7_v6, process.DST_ZeroBias_v2, process.DST_HT250_CaloScouting_v10, process.DST_HT250_CaloBTagScouting_v10, process.DST_HT410_PFScouting_v16, process.DST_HT410_BTagScouting_v16, process.DST_ZeroBias_BTagScouting_v15, process.DST_ZeroBias_CaloScouting_PFScouting_v14, process.DST_CaloJet40_BTagScouting_v15, process.DST_CaloJet40_CaloScouting_PFScouting_v15, process.DST_CaloJet40_CaloBTagScouting_v14, process.DST_L1HTT_BTagScouting_v15, process.DST_L1HTT_CaloScouting_PFScouting_v15, process.DST_L1HTT_CaloBTagScouting_v14, process.DST_L1DoubleMu_BTagScouting_v16, process.DST_L1DoubleMu_CaloScouting_PFScouting_v15, process.DST_DoubleMu3_noVtx_CaloScouting_Monitoring_v6, process.DST_DoubleMu3_noVtx_CaloScouting_v6, process.DST_DoubleMu1_noVtx_CaloScouting_v2, process.DST_DoubleMu3_noVtx_Mass10_PFScouting_v3, process.HLT_AK4CaloJet30_v11, process.HLT_AK4CaloJet40_v10, process.HLT_AK4CaloJet50_v10, process.HLT_AK4CaloJet80_v10, process.HLT_AK4CaloJet100_v10, process.HLT_AK4CaloJet120_v9, process.HLT_AK4PFJet30_v19, process.HLT_AK4PFJet50_v19, process.HLT_AK4PFJet80_v19, process.HLT_AK4PFJet100_v19, process.HLT_AK4PFJet120_v18, process.HLT_SinglePhoton10_Eta3p1ForPPRef_v8, process.HLT_SinglePhoton20_Eta3p1ForPPRef_v9, process.HLT_SinglePhoton30_Eta3p1ForPPRef_v9, process.HLT_Photon20_HoverELoose_v10, process.HLT_Photon30_HoverELoose_v10, process.HLT_EcalCalibration_v4, process.HLT_HcalCalibration_v5, process.AlCa_EcalPhiSym_v9, process.HLT_L1UnpairedBunchBptxMinus_v2, process.HLT_L1UnpairedBunchBptxPlus_v2, process.HLT_L1NotBptxOR_v3, process.HLT_L1_CDC_SingleMu_3_er1p2_TOP120_DPHI2p618_3p142_v2, process.HLT_CDC_L2cosmic_10_er1p0_v1, process.HLT_CDC_L2cosmic_5p5_er1p0_v1, process.HLT_HcalNZS_v13, process.HLT_HcalPhiSym_v15, process.HLT_HcalIsolatedbunch_v5, process.HLT_IsoTrackHB_v4, process.HLT_IsoTrackHE_v4, process.HLT_ZeroBias_FirstCollisionAfterAbortGap_v5, process.HLT_ZeroBias_IsolatedBunches_v5, process.HLT_ZeroBias_FirstCollisionInTrain_v4, process.HLT_ZeroBias_LastCollisionInTrain_v3, process.HLT_ZeroBias_FirstBXAfterTrain_v3, process.AlCa_RPCMuonNormalisation_v13, process.AlCa_LumiPixelsCounts_Random_v1, process.AlCa_LumiPixelsCounts_ZeroBias_v1, process.MC_ReducedIterativeTracking_v12, process.MC_PFMET_v17, process.MC_AK4PFJets_v17, process.MC_PFBTagDeepCSV_v10, process.MC_PFHT_v16, process.MC_PFMHT_v16, process.MC_CaloMET_v8, process.MC_CaloMET_JetIdCleaned_v9, process.MC_AK4CaloJets_v9, process.MC_AK4CaloJetsFromPV_v8, process.MC_CaloBTagDeepCSV_v8, process.MC_CaloHT_v8, process.MC_CaloMHT_v8, process.MC_AK8PFJets_v17, process.MC_AK8TrimPFJets_v17, process.MC_AK8PFHT_v16, process.MC_AK8CaloHT_v8, process.MC_Diphoton10_10_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass10_v13, process.MC_DoubleEle5_CaloIdL_MW_v15, process.MC_Ele5_WPTight_Gsf_v8, process.MC_Ele15_Ele10_CaloIdL_TrackIdL_IsoVL_DZ_v15, process.MC_IsoMu_v15, process.MC_DoubleMu_TrkIsoVVL_DZ_v11, process.MC_DoubleMuNoFiltersNoVtx_v7, process.AlCa_EcalPi0EBonly_v13, process.AlCa_EcalPi0EEonly_v13, process.AlCa_EcalEtaEBonly_v13, process.AlCa_EcalEtaEEonly_v13, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET90_v12, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET100_v12, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET110_v8, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET120_v8, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET130_v8, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET140_v3, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, process.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_1pr_v11, process.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_v12, process.HLT_MediumChargedIsoPFTau200HighPtRelaxedIso_Trk50_eta2p1_v12, process.HLT_MediumChargedIsoPFTau220HighPtRelaxedIso_Trk50_eta2p1_v12, process.HLT_Ele16_Ele12_Ele8_CaloIdL_TrackIdL_v9, process.HLT_Rsq0p35_v15, process.HLT_Rsq0p40_v15, process.HLT_RsqMR300_Rsq0p09_MR200_v15, process.HLT_RsqMR320_Rsq0p09_MR200_v15, process.HLT_RsqMR300_Rsq0p09_MR200_4jet_v15, process.HLT_RsqMR320_Rsq0p09_MR200_4jet_v15, process.HLT_IsoMu27_MET90_v3, process.HLT_DoubleMediumChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, process.HLT_DoubleMediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, process.HLT_DoubleTightChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, process.HLT_DoubleTightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, process.HLT_DoubleMediumChargedIsoPFTauHPS30_L1MaxMass_Trk1_eta2p1_Reg_v1, process.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4, process.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, process.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, process.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, process.HLT_VBF_DoubleLooseChargedIsoPFTau20_Trk1_eta2p1_v3, process.HLT_VBF_DoubleLooseChargedIsoPFTauHPS20_Trk1_eta2p1_v1, process.HLT_VBF_DoubleMediumChargedIsoPFTauHPS20_Trk1_eta2p1_v1, process.HLT_VBF_DoubleTightChargedIsoPFTauHPS20_Trk1_eta2p1_v1, process.HLT_Photon50_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_PFMET50_v5, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_v5, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ600DEta3_v5, process.HLT_PFMET100_PFMHT100_IDTight_PFHT60_v9, process.HLT_PFMETNoMu100_PFMHTNoMu100_IDTight_PFHT60_v9, process.HLT_PFMETTypeOne100_PFMHT100_IDTight_PFHT60_v9, process.HLT_Mu18_Mu9_SameSign_v4, process.HLT_Mu18_Mu9_SameSign_DZ_v4, process.HLT_Mu18_Mu9_v4, process.HLT_Mu18_Mu9_DZ_v4, process.HLT_Mu20_Mu10_SameSign_v4, process.HLT_Mu20_Mu10_SameSign_DZ_v4, process.HLT_Mu20_Mu10_v4, process.HLT_Mu20_Mu10_DZ_v4, process.HLT_Mu23_Mu12_SameSign_v4, process.HLT_Mu23_Mu12_SameSign_DZ_v4, process.HLT_Mu23_Mu12_v4, process.HLT_Mu23_Mu12_DZ_v4, process.HLT_DoubleMu2_Jpsi_DoubleTrk1_Phi1p05_v6, process.HLT_DoubleMu2_Jpsi_DoubleTkMu0_Phi_v5, process.HLT_DoubleMu3_DCA_PFMET50_PFMHT60_v10, process.HLT_TripleMu_5_3_3_Mass3p8_DCA_v3, process.HLT_QuadPFJet98_83_71_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_QuadPFJet103_88_75_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_QuadPFJet111_90_80_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_QuadPFJet98_83_71_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet103_88_75_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet105_88_76_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet111_90_80_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet98_83_71_15_v5, process.HLT_QuadPFJet103_88_75_15_v5, process.HLT_QuadPFJet105_88_76_15_v5, process.HLT_QuadPFJet111_90_80_15_v5, process.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p17_v2, process.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p1_v2, process.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_p02_v3, process.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np2_v2, process.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np4_v2, process.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_Mass55_v2, process.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_v2, process.HLT_Mu12_IP6_ToCSCS_v1, process.HLT_Mu12_IP6_part0_v2, process.HLT_Mu12_IP6_part1_v2, process.HLT_Mu12_IP6_part2_v2, process.HLT_Mu12_IP6_part3_v2, process.HLT_Mu12_IP6_part4_v2, process.HLT_Mu9_IP5_ToCSCS_v1, process.HLT_Mu9_IP5_part0_v2, process.HLT_Mu9_IP5_part1_v2, process.HLT_Mu9_IP5_part2_v2, process.HLT_Mu9_IP5_part3_v2, process.HLT_Mu9_IP5_part4_v2, process.HLT_Mu7_IP4_ToCSCS_v1, process.HLT_Mu7_IP4_part0_v2, process.HLT_Mu7_IP4_part1_v2, process.HLT_Mu7_IP4_part2_v2, process.HLT_Mu7_IP4_part3_v2, process.HLT_Mu7_IP4_part4_v2, process.HLT_Mu9_IP4_ToCSCS_v1, process.HLT_Mu9_IP4_part0_v2, process.HLT_Mu9_IP4_part1_v2, process.HLT_Mu9_IP4_part2_v2, process.HLT_Mu9_IP4_part3_v2, process.HLT_Mu9_IP4_part4_v2, process.HLT_Mu8_IP5_ToCSCS_v1, process.HLT_Mu8_IP5_part0_v2, process.HLT_Mu8_IP5_part1_v2, process.HLT_Mu8_IP5_part2_v2, process.HLT_Mu8_IP5_part3_v2, process.HLT_Mu8_IP5_part4_v2, process.HLT_Mu8_IP6_ToCSCS_v1, process.HLT_Mu8_IP6_part0_v2, process.HLT_Mu8_IP6_part1_v2, process.HLT_Mu8_IP6_part2_v2, process.HLT_Mu8_IP6_part3_v2, process.HLT_Mu8_IP6_part4_v2, process.HLT_Mu9_IP6_ToCSCS_v1, process.HLT_Mu9_IP6_part0_v3, process.HLT_Mu9_IP6_part1_v3, process.HLT_Mu9_IP6_part2_v3, process.HLT_Mu9_IP6_part3_v3, process.HLT_Mu9_IP6_part4_v3, process.HLT_Mu8_IP3_ToCSCS_v1, process.HLT_Mu8_IP3_part0_v3, process.HLT_Mu8_IP3_part1_v3, process.HLT_Mu8_IP3_part2_v3, process.HLT_Mu8_IP3_part3_v3, process.HLT_Mu8_IP3_part4_v3, process.HLT_Mu9_IP0_part0_v2, process.HLT_Mu9_IP3_part0_v2, process.HLT_QuadPFJet105_88_76_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_TrkMu6NoFiltersNoVtx_v1, process.HLT_TrkMu16NoFiltersNoVtx_v1, process.HLT_DoubleTrkMu_16_6_NoFiltersNoVtx_v1, process.HLTriggerFinalPath, process.HLTAnalyzerEndpath, process.ParkingHLTPhysicsOutput, process.ParkingZeroBiasOutput, process.PhysicsCommissioningOutput, process.PhysicsEGammaOutput, process.PhysicsEndOfFillOutput, process.PhysicsHadronsTausOutput, process.PhysicsMuonsOutput, process.ParkingBPH1Output, process.ParkingBPH2Output, process.ParkingBPH3Output, process.ParkingBPH4Output, process.ParkingBPH5Output, process.DQMOutput, process.DQMOnlineBeamspotOutput, process.DQMCalibrationOutput, process.DQMEventDisplayOutput, process.HLTMonitorOutput, process.RPCMONOutput, process.CalibrationOutput, process.EcalCalibrationOutput, process.ALCAPHISYMOutput, process.ALCALumiPixelCountsExpressOutput, process.ALCALumiPixelCountsPromptOutput, process.ALCAP0Output, process.ExpressOutput, process.ExpressAlignmentOutput, process.NanoDSTOutput, process.ScoutingPFOutput, process.ScoutingCaloMuonOutput, process.PhysicsScoutingMonitorOutput, process.PhysicsHLTPhysics1Output, process.PhysicsHLTPhysics2Output, process.PhysicsHLTPhysics3Output, process.PhysicsHLTPhysics4Output, process.PhysicsZeroBias1Output, process.PhysicsZeroBias2Output, process.PhysicsZeroBias3Output, process.PhysicsZeroBias4Output )) +process.HLTSchedule = cms.Schedule( *(process.HLTriggerFirstPath, process.HLT_AK8PFJet360_TrimMass30_v18, process.HLT_AK8PFJet380_TrimMass30_v11, process.HLT_AK8PFJet400_TrimMass30_v12, process.HLT_AK8PFJet420_TrimMass30_v11, process.HLT_AK8PFHT750_TrimMass50_v12, process.HLT_AK8PFHT800_TrimMass50_v12, process.HLT_AK8PFHT850_TrimMass50_v11, process.HLT_AK8PFHT900_TrimMass50_v11, process.HLT_CaloJet500_NoJetID_v12, process.HLT_CaloJet550_NoJetID_v7, process.HLT_DoubleMu5_Upsilon_DoubleEle3_CaloIdL_TrackIdL_v4, process.HLT_DoubleMu3_DoubleEle7p5_CaloIdL_TrackIdL_Upsilon_v4, process.HLT_Trimuon5_3p5_2_Upsilon_Muon_v5, process.HLT_TrimuonOpen_5_3p5_2_Upsilon_Muon_v3, process.HLT_DoubleEle25_CaloIdL_MW_v4, process.HLT_DoubleEle27_CaloIdL_MW_v4, process.HLT_DoubleEle33_CaloIdL_MW_v17, process.HLT_DoubleEle24_eta2p1_WPTight_Gsf_v7, process.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_DZ_PFHT350_v20, process.HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_PFHT350_v20, process.HLT_Ele27_Ele37_CaloIdL_MW_v4, process.HLT_Mu27_Ele37_CaloIdL_MW_v5, process.HLT_Mu37_Ele27_CaloIdL_MW_v5, process.HLT_Mu37_TkMu27_v5, process.HLT_DoubleMu4_3_Bs_v14, process.HLT_DoubleMu4_3_Jpsi_v2, process.HLT_DoubleMu4_JpsiTrk_Displaced_v15, process.HLT_DoubleMu4_LowMassNonResonantTrk_Displaced_v15, process.HLT_DoubleMu3_Trk_Tau3mu_v12, process.HLT_DoubleMu3_TkMu_DsTau3Mu_v4, process.HLT_DoubleMu4_PsiPrimeTrk_Displaced_v15, process.HLT_DoubleMu4_Mass3p8_DZ_PFHT350_v8, process.HLT_Mu3_PFJet40_v16, process.HLT_Mu7p5_L2Mu2_Jpsi_v10, process.HLT_Mu7p5_L2Mu2_Upsilon_v10, process.HLT_Mu7p5_Track2_Jpsi_v11, process.HLT_Mu7p5_Track3p5_Jpsi_v11, process.HLT_Mu7p5_Track7_Jpsi_v11, process.HLT_Mu7p5_Track2_Upsilon_v11, process.HLT_Mu7p5_Track3p5_Upsilon_v11, process.HLT_Mu7p5_Track7_Upsilon_v11, process.HLT_Mu3_L1SingleMu5orSingleMu7_v1, process.HLT_DoublePhoton33_CaloIdL_v6, process.HLT_DoublePhoton70_v6, process.HLT_DoublePhoton85_v14, process.HLT_Ele20_WPTight_Gsf_v6, process.HLT_Ele15_WPLoose_Gsf_v3, process.HLT_Ele17_WPLoose_Gsf_v3, process.HLT_Ele20_WPLoose_Gsf_v6, process.HLT_Ele20_eta2p1_WPLoose_Gsf_v6, process.HLT_DiEle27_WPTightCaloOnly_L1DoubleEG_v4, process.HLT_Ele27_WPTight_Gsf_v16, process.HLT_Ele28_WPTight_Gsf_v1, process.HLT_Ele30_WPTight_Gsf_v1, process.HLT_Ele32_WPTight_Gsf_v15, process.HLT_Ele35_WPTight_Gsf_v9, process.HLT_Ele35_WPTight_Gsf_L1EGMT_v5, process.HLT_Ele38_WPTight_Gsf_v9, process.HLT_Ele40_WPTight_Gsf_v9, process.HLT_Ele32_WPTight_Gsf_L1DoubleEG_v9, process.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTau30_eta2p1_CrossL1_v13, process.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_LooseChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_MediumChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, process.HLT_Ele24_eta2p1_WPTight_Gsf_TightChargedIsoPFTauHPS30_eta2p1_TightID_CrossL1_v1, process.HLT_HT450_Beamspot_v11, process.HLT_HT300_Beamspot_v11, process.HLT_ZeroBias_Beamspot_v4, process.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTau27_eta2p1_CrossL1_v12, process.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_CrossL1_v4, process.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, process.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_CrossL1_v1, process.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, process.HLT_IsoMu20_eta2p1_MediumChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, process.HLT_IsoMu20_eta2p1_TightChargedIsoPFTauHPS27_eta2p1_TightID_CrossL1_v1, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_CrossL1_v12, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu24_eta2p1_TightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_CrossL1_v4, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTauHPS30_Trk1_eta2p1_Reg_CrossL1_v1, process.HLT_IsoMu27_LooseChargedIsoPFTau20_Trk1_eta2p1_SingleL1_v5, process.HLT_IsoMu27_LooseChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, process.HLT_IsoMu27_MediumChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, process.HLT_IsoMu27_TightChargedIsoPFTauHPS20_Trk1_eta2p1_SingleL1_v1, process.HLT_IsoMu20_v15, process.HLT_IsoMu24_v13, process.HLT_IsoMu24_eta2p1_v15, process.HLT_IsoMu27_v16, process.HLT_IsoMu30_v4, process.HLT_UncorrectedJetE30_NoBPTX_v6, process.HLT_UncorrectedJetE30_NoBPTX3BX_v6, process.HLT_UncorrectedJetE60_NoBPTX3BX_v6, process.HLT_UncorrectedJetE70_NoBPTX3BX_v6, process.HLT_L1SingleMu18_v3, process.HLT_L1SingleMu25_v2, process.HLT_L1SingleMuCosmics_v1, process.HLT_L2Mu10_v7, process.HLT_L2Mu10_NoVertex_NoBPTX3BX_v5, process.HLT_L2Mu10_NoVertex_NoBPTX_v6, process.HLT_L2Mu45_NoVertex_3Sta_NoBPTX3BX_v4, process.HLT_L2Mu40_NoVertex_3Sta_NoBPTX3BX_v5, process.HLT_L2Mu50_v2, process.HLT_L2Mu23NoVtx_2Cha_v1, process.HLT_L2Mu23NoVtx_2Cha_CosmicSeed_v1, process.HLT_DoubleL2Mu30NoVtx_2Cha_CosmicSeed_Eta2p4_v2, process.HLT_DoubleL2Mu30NoVtx_2Cha_Eta2p4_v2, process.HLT_DoubleL2Mu50_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_CosmicSeed_Eta2p4_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_v2, process.HLT_DoubleL2Mu23NoVtx_2Cha_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_NoL2Matched_v2, process.HLT_DoubleL2Mu25NoVtx_2Cha_Eta2p4_v2, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_v14, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_v3, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v15, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_v3, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8_v5, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass8_v3, process.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8_v5, process.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass3p8_v3, process.HLT_Mu25_TkMu0_Onia_v8, process.HLT_Mu30_TkMu0_Psi_v1, process.HLT_Mu30_TkMu0_Upsilon_v1, process.HLT_Mu20_TkMu0_Phi_v8, process.HLT_Mu25_TkMu0_Phi_v8, process.HLT_Mu12_v3, process.HLT_Mu15_v3, process.HLT_Mu20_v12, process.HLT_Mu27_v13, process.HLT_Mu50_v13, process.HLT_Mu55_v3, process.HLT_OldMu100_v3, process.HLT_TkMu100_v2, process.HLT_DiPFJet15_NoCaloMatched_v16, process.HLT_DiPFJet25_NoCaloMatched_v16, process.HLT_DiPFJet15_FBEta3_NoCaloMatched_v17, process.HLT_DiPFJet25_FBEta3_NoCaloMatched_v17, process.HLT_DiPFJetAve40_v14, process.HLT_DiPFJetAve60_v14, process.HLT_DiPFJetAve80_v13, process.HLT_DiPFJetAve140_v13, process.HLT_DiPFJetAve200_v13, process.HLT_DiPFJetAve260_v14, process.HLT_DiPFJetAve320_v14, process.HLT_DiPFJetAve400_v14, process.HLT_DiPFJetAve500_v14, process.HLT_DiPFJetAve15_HFJEC_v17, process.HLT_DiPFJetAve25_HFJEC_v17, process.HLT_DiPFJetAve35_HFJEC_v17, process.HLT_DiPFJetAve60_HFJEC_v15, process.HLT_DiPFJetAve80_HFJEC_v16, process.HLT_DiPFJetAve100_HFJEC_v16, process.HLT_DiPFJetAve160_HFJEC_v16, process.HLT_DiPFJetAve220_HFJEC_v16, process.HLT_DiPFJetAve300_HFJEC_v16, process.HLT_AK8PFJet15_v3, process.HLT_AK8PFJet25_v3, process.HLT_AK8PFJet40_v16, process.HLT_AK8PFJet60_v15, process.HLT_AK8PFJet80_v15, process.HLT_AK8PFJet140_v15, process.HLT_AK8PFJet200_v15, process.HLT_AK8PFJet260_v16, process.HLT_AK8PFJet320_v16, process.HLT_AK8PFJet400_v16, process.HLT_AK8PFJet450_v16, process.HLT_AK8PFJet500_v16, process.HLT_AK8PFJet550_v11, process.HLT_PFJet15_v3, process.HLT_PFJet25_v3, process.HLT_PFJet40_v21, process.HLT_PFJet60_v21, process.HLT_PFJet80_v20, process.HLT_PFJet140_v19, process.HLT_PFJet200_v19, process.HLT_PFJet260_v20, process.HLT_PFJet320_v20, process.HLT_PFJet400_v20, process.HLT_PFJet450_v21, process.HLT_PFJet500_v21, process.HLT_PFJet550_v11, process.HLT_PFJetFwd15_v3, process.HLT_PFJetFwd25_v3, process.HLT_PFJetFwd40_v19, process.HLT_PFJetFwd60_v19, process.HLT_PFJetFwd80_v18, process.HLT_PFJetFwd140_v18, process.HLT_PFJetFwd200_v18, process.HLT_PFJetFwd260_v19, process.HLT_PFJetFwd320_v19, process.HLT_PFJetFwd400_v19, process.HLT_PFJetFwd450_v19, process.HLT_PFJetFwd500_v19, process.HLT_AK8PFJetFwd15_v3, process.HLT_AK8PFJetFwd25_v3, process.HLT_AK8PFJetFwd40_v15, process.HLT_AK8PFJetFwd60_v14, process.HLT_AK8PFJetFwd80_v14, process.HLT_AK8PFJetFwd140_v14, process.HLT_AK8PFJetFwd200_v14, process.HLT_AK8PFJetFwd260_v15, process.HLT_AK8PFJetFwd320_v15, process.HLT_AK8PFJetFwd400_v15, process.HLT_AK8PFJetFwd450_v15, process.HLT_AK8PFJetFwd500_v15, process.HLT_PFHT180_v17, process.HLT_PFHT250_v17, process.HLT_PFHT370_v17, process.HLT_PFHT430_v17, process.HLT_PFHT510_v17, process.HLT_PFHT590_v17, process.HLT_PFHT680_v17, process.HLT_PFHT780_v17, process.HLT_PFHT890_v17, process.HLT_PFHT1050_v18, process.HLT_PFHT500_PFMET100_PFMHT100_IDTight_v12, process.HLT_PFHT500_PFMET110_PFMHT110_IDTight_v12, process.HLT_PFHT700_PFMET85_PFMHT85_IDTight_v12, process.HLT_PFHT700_PFMET95_PFMHT95_IDTight_v12, process.HLT_PFHT800_PFMET75_PFMHT75_IDTight_v12, process.HLT_PFHT800_PFMET85_PFMHT85_IDTight_v12, process.HLT_PFMET110_PFMHT110_IDTight_v20, process.HLT_PFMET120_PFMHT120_IDTight_v20, process.HLT_PFMET130_PFMHT130_IDTight_v20, process.HLT_PFMET140_PFMHT140_IDTight_v20, process.HLT_PFMET100_PFMHT100_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET110_PFMHT110_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET120_PFMHT120_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET130_PFMHT130_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET140_PFMHT140_IDTight_CaloBTagDeepCSV_3p1_v8, process.HLT_PFMET120_PFMHT120_IDTight_PFHT60_v9, process.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_PFHT60_v9, process.HLT_PFMETTypeOne120_PFMHT120_IDTight_PFHT60_v9, process.HLT_PFMETTypeOne110_PFMHT110_IDTight_v12, process.HLT_PFMETTypeOne120_PFMHT120_IDTight_v12, process.HLT_PFMETTypeOne130_PFMHT130_IDTight_v12, process.HLT_PFMETTypeOne140_PFMHT140_IDTight_v11, process.HLT_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, process.HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, process.HLT_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, process.HLT_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, process.HLT_MonoCentralPFJet80_PFMETNoMu110_PFMHTNoMu110_IDTight_v20, process.HLT_MonoCentralPFJet80_PFMETNoMu120_PFMHTNoMu120_IDTight_v20, process.HLT_MonoCentralPFJet80_PFMETNoMu130_PFMHTNoMu130_IDTight_v19, process.HLT_MonoCentralPFJet80_PFMETNoMu140_PFMHTNoMu140_IDTight_v19, process.HLT_L1ETMHadSeeds_v2, process.HLT_CaloMHT90_v4, process.HLT_CaloMET80_NotCleaned_v4, process.HLT_CaloMET90_NotCleaned_v4, process.HLT_CaloMET100_NotCleaned_v4, process.HLT_CaloMET110_NotCleaned_v4, process.HLT_CaloMET250_NotCleaned_v4, process.HLT_CaloMET300_NotCleaned_v4, process.HLT_CaloMET350_NotCleaned_v4, process.HLT_PFMET200_NotCleaned_v9, process.HLT_PFMET250_NotCleaned_v9, process.HLT_PFMET300_NotCleaned_v9, process.HLT_PFMET200_BeamHaloCleaned_v9, process.HLT_PFMETTypeOne200_BeamHaloCleaned_v9, process.HLT_MET105_IsoTrk50_v9, process.HLT_MET120_IsoTrk50_v9, process.HLT_SingleJet30_Mu12_SinglePFJet40_v11, process.HLT_Mu12_DoublePFJets40_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets100_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets200_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets350_CaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets40MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets54MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_Mu12_DoublePFJets62MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets40_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets100_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets200_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets350_CaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets116MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_DoublePFJets128MaxDeta1p6_DoubleCaloBTagDeepCSV_p71_v2, process.HLT_Photon300_NoHE_v12, process.HLT_Mu8_TrkIsoVVL_v12, process.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_DZ_v18, process.HLT_Mu8_DiEle12_CaloIdL_TrackIdL_v18, process.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_DZ_v19, process.HLT_Mu8_Ele8_CaloIdM_TrackIdM_Mass8_PFHT350_v19, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v13, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_PFDiJet30_PFBtagDeepCSV_1p5_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_CaloDiJet30_CaloBtagDeepCSV_1p5_v1, process.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v11, process.HLT_Mu17_TrkIsoVVL_v13, process.HLT_Mu19_TrkIsoVVL_v4, process.HLT_BTagMu_AK4DiJet20_Mu5_v13, process.HLT_BTagMu_AK4DiJet40_Mu5_v13, process.HLT_BTagMu_AK4DiJet70_Mu5_v13, process.HLT_BTagMu_AK4DiJet110_Mu5_v13, process.HLT_BTagMu_AK4DiJet170_Mu5_v12, process.HLT_BTagMu_AK4Jet300_Mu5_v12, process.HLT_BTagMu_AK8DiJet170_Mu5_v9, process.HLT_BTagMu_AK8Jet170_DoubleMu5_v2, process.HLT_BTagMu_AK8Jet300_Mu5_v12, process.HLT_BTagMu_AK4DiJet20_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet40_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet70_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet110_Mu5_noalgo_v13, process.HLT_BTagMu_AK4DiJet170_Mu5_noalgo_v12, process.HLT_BTagMu_AK4Jet300_Mu5_noalgo_v12, process.HLT_BTagMu_AK8DiJet170_Mu5_noalgo_v9, process.HLT_BTagMu_AK8Jet170_DoubleMu5_noalgo_v2, process.HLT_BTagMu_AK8Jet300_Mu5_noalgo_v12, process.HLT_Ele15_Ele8_CaloIdL_TrackIdL_IsoVL_v3, process.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v19, process.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_v19, process.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v15, process.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_v7, process.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v7, process.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ_v15, process.HLT_Mu12_DoublePhoton20_v5, process.HLT_TriplePhoton_20_20_20_CaloIdLV2_v3, process.HLT_TriplePhoton_20_20_20_CaloIdLV2_R9IdVL_v3, process.HLT_TriplePhoton_30_30_10_CaloIdLV2_v4, process.HLT_TriplePhoton_30_30_10_CaloIdLV2_R9IdVL_v4, process.HLT_TriplePhoton_35_35_5_CaloIdLV2_R9IdVL_v4, process.HLT_Photon20_v2, process.HLT_Photon33_v5, process.HLT_Photon50_v13, process.HLT_Photon75_v13, process.HLT_Photon90_v13, process.HLT_Photon120_v13, process.HLT_Photon150_v6, process.HLT_Photon175_v14, process.HLT_Photon200_v13, process.HLT_Photon100EB_TightID_TightIso_v2, process.HLT_Photon110EB_TightID_TightIso_v2, process.HLT_Photon120EB_TightID_TightIso_v2, process.HLT_Photon100EBHE10_v2, process.HLT_Photon100EEHE10_v2, process.HLT_Photon100EE_TightID_TightIso_v2, process.HLT_Photon50_R9Id90_HE10_IsoM_v14, process.HLT_Photon75_R9Id90_HE10_IsoM_v14, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ300_PFJetsMJJ400DEta3_v5, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ400_PFJetsMJJ600DEta3_v5, process.HLT_Photon90_R9Id90_HE10_IsoM_v14, process.HLT_Photon120_R9Id90_HE10_IsoM_v14, process.HLT_Photon165_R9Id90_HE10_IsoM_v15, process.HLT_Photon90_CaloIdL_PFHT700_v16, process.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass90_v13, process.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass95_v13, process.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_PixelVeto_Mass55_v15, process.HLT_Diphoton30PV_18PV_R9Id_AND_IsoCaloId_AND_HE_R9Id_NoPixelVeto_Mass55_v13, process.HLT_Photon35_TwoProngs35_v1, process.HLT_IsoMu24_TwoProngs35_v1, process.HLT_Dimuon0_Jpsi_L1_NoOS_v7, process.HLT_Dimuon0_Jpsi_NoVertexing_NoOS_v7, process.HLT_Dimuon0_Jpsi_v8, process.HLT_Dimuon0_Jpsi_NoVertexing_v8, process.HLT_Dimuon0_Jpsi_L1_4R_0er1p5R_v7, process.HLT_Dimuon0_Jpsi_NoVertexing_L1_4R_0er1p5R_v7, process.HLT_Dimuon0_Jpsi3p5_Muon2_v5, process.HLT_Dimuon0_Upsilon_L1_4p5_v9, process.HLT_Dimuon0_Upsilon_L1_5_v9, process.HLT_Dimuon0_Upsilon_L1_4p5NoOS_v8, process.HLT_Dimuon0_Upsilon_L1_4p5er2p0_v9, process.HLT_Dimuon0_Upsilon_L1_4p5er2p0M_v7, process.HLT_Dimuon0_Upsilon_NoVertexing_v7, process.HLT_Dimuon0_Upsilon_L1_5M_v8, process.HLT_Dimuon0_LowMass_L1_0er1p5R_v7, process.HLT_Dimuon0_LowMass_L1_0er1p5_v8, process.HLT_Dimuon0_LowMass_v8, process.HLT_Dimuon0_LowMass_L1_4_v8, process.HLT_Dimuon0_LowMass_L1_4R_v7, process.HLT_Dimuon0_LowMass_L1_TM530_v6, process.HLT_Dimuon0_Upsilon_Muon_L1_TM0_v6, process.HLT_Dimuon0_Upsilon_Muon_NoL1Mass_v6, process.HLT_TripleMu_5_3_3_Mass3p8_DZ_v8, process.HLT_TripleMu_10_5_5_DZ_v10, process.HLT_TripleMu_12_10_5_v10, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_v4, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_Tau15_Charge1_v4, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_v4, process.HLT_Tau3Mu_Mu7_Mu1_TkMu1_IsoTau15_Charge1_v4, process.HLT_DoubleMu3_DZ_PFMET50_PFMHT60_v10, process.HLT_DoubleMu3_DZ_PFMET70_PFMHT70_v10, process.HLT_DoubleMu3_DZ_PFMET90_PFMHT90_v10, process.HLT_DoubleMu3_Trk_Tau3mu_NoL1Mass_v6, process.HLT_DoubleMu4_Jpsi_Displaced_v7, process.HLT_DoubleMu4_Jpsi_NoVertexing_v7, process.HLT_DoubleMu4_JpsiTrkTrk_Displaced_v7, process.HLT_DoubleMu43NoFiltersNoVtx_v4, process.HLT_DoubleMu48NoFiltersNoVtx_v4, process.HLT_Mu43NoFiltersNoVtx_Photon43_CaloIdL_v5, process.HLT_Mu48NoFiltersNoVtx_Photon48_CaloIdL_v5, process.HLT_Mu38NoFiltersNoVtxDisplaced_Photon38_CaloIdL_v1, process.HLT_Mu43NoFiltersNoVtxDisplaced_Photon43_CaloIdL_v1, process.HLT_DoubleMu33NoFiltersNoVtxDisplaced_v1, process.HLT_DoubleMu40NoFiltersNoVtxDisplaced_v1, process.HLT_DoubleMu20_7_Mass0to30_L1_DM4_v7, process.HLT_DoubleMu20_7_Mass0to30_L1_DM4EG_v8, process.HLT_HT425_v9, process.HLT_HT430_DisplacedDijet40_DisplacedTrack_v13, process.HLT_HT500_DisplacedDijet40_DisplacedTrack_v13, process.HLT_HT430_DisplacedDijet60_DisplacedTrack_v13, process.HLT_HT400_DisplacedDijet40_DisplacedTrack_v13, process.HLT_HT650_DisplacedDijet60_Inclusive_v13, process.HLT_HT550_DisplacedDijet60_Inclusive_v13, process.HLT_DiJet110_35_Mjj650_PFMET110_v9, process.HLT_DiJet110_35_Mjj650_PFMET120_v9, process.HLT_DiJet110_35_Mjj650_PFMET130_v9, process.HLT_TripleJet110_35_35_Mjj650_PFMET110_v9, process.HLT_TripleJet110_35_35_Mjj650_PFMET120_v9, process.HLT_TripleJet110_35_35_Mjj650_PFMET130_v9, process.HLT_Ele30_eta2p1_WPTight_Gsf_CentralPFJet35_EleCleaned_v13, process.HLT_Ele28_eta2p1_WPTight_Gsf_HT150_v13, process.HLT_Ele28_HighEta_SC20_Mass55_v13, process.HLT_DoubleMu20_7_Mass0to30_Photon23_v8, process.HLT_Ele15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, process.HLT_Ele15_IsoVVVL_PFHT450_PFMET50_v16, process.HLT_Ele15_IsoVVVL_PFHT450_v16, process.HLT_Ele50_IsoVVVL_PFHT450_v16, process.HLT_Ele15_IsoVVVL_PFHT600_v20, process.HLT_Mu4_TrkIsoVVL_DiPFJet90_40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v15, process.HLT_Mu8_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT300_PFMETNoMu60_v16, process.HLT_Mu10_TrkIsoVVL_DiPFJet40_DEta3p5_MJJ750_HTT350_PFMETNoMu60_v15, process.HLT_Mu15_IsoVVVL_PFHT450_CaloBTagDeepCSV_4p5_v8, process.HLT_Mu15_IsoVVVL_PFHT450_PFMET50_v15, process.HLT_Mu15_IsoVVVL_PFHT450_v15, process.HLT_Mu50_IsoVVVL_PFHT450_v15, process.HLT_Mu15_IsoVVVL_PFHT600_v19, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET70_PFMHT70_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET80_PFMHT80_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET90_PFMHT90_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMET100_PFMHT100_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu70_PFMHTNoMu70_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu80_PFMHTNoMu80_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu90_PFMHTNoMu90_IDTight_v2, process.HLT_Mu3er1p5_PFJet100er2p5_PFMETNoMu100_PFMHTNoMu100_IDTight_v2, process.HLT_Dimuon10_PsiPrime_Barrel_Seagulls_v7, process.HLT_Dimuon20_Jpsi_Barrel_Seagulls_v7, process.HLT_Dimuon12_Upsilon_y1p4_v2, process.HLT_Dimuon14_Phi_Barrel_Seagulls_v7, process.HLT_Dimuon18_PsiPrime_v14, process.HLT_Dimuon25_Jpsi_v14, process.HLT_Dimuon18_PsiPrime_noCorrL1_v6, process.HLT_Dimuon24_Upsilon_noCorrL1_v6, process.HLT_Dimuon24_Phi_noCorrL1_v6, process.HLT_Dimuon25_Jpsi_noCorrL1_v6, process.HLT_DiMu4_Ele9_CaloIdL_TrackIdL_DZ_Mass3p8_v17, process.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_DZ_v17, process.HLT_DiMu9_Ele9_CaloIdL_TrackIdL_v17, process.HLT_DoubleIsoMu20_eta2p1_v7, process.HLT_TrkMu12_DoubleTrkMu5NoFiltersNoVtx_v6, process.HLT_TrkMu16_DoubleTrkMu6NoFiltersNoVtx_v12, process.HLT_TrkMu17_DoubleTrkMu8NoFiltersNoVtx_v13, process.HLT_Mu8_v12, process.HLT_Mu17_v13, process.HLT_Mu19_v4, process.HLT_Mu17_Photon30_IsoCaloId_v6, process.HLT_Ele8_CaloIdL_TrackIdL_IsoVL_PFJet30_v16, process.HLT_Ele12_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, process.HLT_Ele15_CaloIdL_TrackIdL_IsoVL_PFJet30_v3, process.HLT_Ele23_CaloIdL_TrackIdL_IsoVL_PFJet30_v18, process.HLT_Ele8_CaloIdM_TrackIdM_PFJet30_v18, process.HLT_Ele17_CaloIdM_TrackIdM_PFJet30_v16, process.HLT_Ele23_CaloIdM_TrackIdM_PFJet30_v18, process.HLT_Ele50_CaloIdVT_GsfTrkIdT_PFJet165_v18, process.HLT_Ele115_CaloIdVT_GsfTrkIdT_v14, process.HLT_Ele135_CaloIdVT_GsfTrkIdT_v7, process.HLT_Ele145_CaloIdVT_GsfTrkIdT_v8, process.HLT_Ele200_CaloIdVT_GsfTrkIdT_v8, process.HLT_Ele250_CaloIdVT_GsfTrkIdT_v13, process.HLT_Ele300_CaloIdVT_GsfTrkIdT_v13, process.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_TriplePFBTagDeepCSV_4p5_v3, process.HLT_PFHT330PT30_QuadPFJet_75_60_45_40_v9, process.HLT_PFHT400_SixPFJet32_DoublePFBTagDeepCSV_2p94_v8, process.HLT_PFHT400_SixPFJet32_v8, process.HLT_PFHT450_SixPFJet36_PFBTagDeepCSV_1p59_v7, process.HLT_PFHT450_SixPFJet36_v7, process.HLT_PFHT400_FivePFJet_100_100_60_30_30_v8, process.HLT_PFHT400_FivePFJet_100_100_60_30_30_DoublePFBTagDeepCSV_4p5_v8, process.HLT_PFHT400_FivePFJet_120_120_60_30_30_DoublePFBTagDeepCSV_4p5_v8, process.HLT_PFHT350_v19, process.HLT_PFHT350MinPFJet15_v9, process.HLT_Photon60_R9Id90_CaloIdL_IsoL_v5, process.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_v5, process.HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_PFHT350MinPFJet15_v11, process.HLT_ECALHT800_v10, process.HLT_DiSC30_18_EIso_AND_HE_Mass70_v13, process.HLT_Physics_v7, process.HLT_Physics_part0_v7, process.HLT_Physics_part1_v7, process.HLT_Physics_part2_v7, process.HLT_Physics_part3_v7, process.HLT_Physics_part4_v7, process.HLT_Physics_part5_v7, process.HLT_Physics_part6_v7, process.HLT_Physics_part7_v7, process.DST_Physics_v7, process.HLT_Random_v3, process.HLT_ZeroBias_v6, process.HLT_ZeroBias_Alignment_v1, process.HLT_ZeroBias_part0_v6, process.HLT_ZeroBias_part1_v6, process.HLT_ZeroBias_part2_v6, process.HLT_ZeroBias_part3_v6, process.HLT_ZeroBias_part4_v6, process.HLT_ZeroBias_part5_v6, process.HLT_ZeroBias_part6_v6, process.HLT_ZeroBias_part7_v6, process.DST_ZeroBias_v2, process.DST_Run3_PFScoutingPixelTracking_v16, process.HLT_AK4CaloJet30_v11, process.HLT_AK4CaloJet40_v10, process.HLT_AK4CaloJet50_v10, process.HLT_AK4CaloJet80_v10, process.HLT_AK4CaloJet100_v10, process.HLT_AK4CaloJet120_v9, process.HLT_AK4PFJet30_v19, process.HLT_AK4PFJet50_v19, process.HLT_AK4PFJet80_v19, process.HLT_AK4PFJet100_v19, process.HLT_AK4PFJet120_v18, process.HLT_SinglePhoton10_Eta3p1ForPPRef_v8, process.HLT_SinglePhoton20_Eta3p1ForPPRef_v9, process.HLT_SinglePhoton30_Eta3p1ForPPRef_v9, process.HLT_Photon20_HoverELoose_v10, process.HLT_Photon30_HoverELoose_v10, process.HLT_EcalCalibration_v4, process.HLT_HcalCalibration_v5, process.AlCa_EcalPhiSym_v9, process.HLT_L1UnpairedBunchBptxMinus_v2, process.HLT_L1UnpairedBunchBptxPlus_v2, process.HLT_L1NotBptxOR_v3, process.HLT_L1_CDC_SingleMu_3_er1p2_TOP120_DPHI2p618_3p142_v2, process.HLT_CDC_L2cosmic_10_er1p0_v1, process.HLT_CDC_L2cosmic_5p5_er1p0_v1, process.HLT_HcalNZS_v13, process.HLT_HcalPhiSym_v15, process.HLT_HcalIsolatedbunch_v5, process.HLT_IsoTrackHB_v4, process.HLT_IsoTrackHE_v4, process.HLT_ZeroBias_FirstCollisionAfterAbortGap_v5, process.HLT_ZeroBias_IsolatedBunches_v5, process.HLT_ZeroBias_FirstCollisionInTrain_v4, process.HLT_ZeroBias_LastCollisionInTrain_v3, process.HLT_ZeroBias_FirstBXAfterTrain_v3, process.AlCa_RPCMuonNormalisation_v13, process.AlCa_LumiPixelsCounts_Random_v1, process.AlCa_LumiPixelsCounts_ZeroBias_v1, process.MC_ReducedIterativeTracking_v12, process.MC_PFMET_v17, process.MC_AK4PFJets_v17, process.MC_PFBTagDeepCSV_v10, process.MC_PFHT_v16, process.MC_PFMHT_v16, process.MC_CaloMET_v8, process.MC_CaloMET_JetIdCleaned_v9, process.MC_AK4CaloJets_v9, process.MC_AK4CaloJetsFromPV_v8, process.MC_CaloBTagDeepCSV_v8, process.MC_CaloHT_v8, process.MC_CaloMHT_v8, process.MC_AK8PFJets_v17, process.MC_AK8TrimPFJets_v17, process.MC_AK8PFHT_v16, process.MC_AK8CaloHT_v8, process.MC_Diphoton10_10_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass10_v13, process.MC_DoubleEle5_CaloIdL_MW_v15, process.MC_Ele5_WPTight_Gsf_v8, process.MC_Ele15_Ele10_CaloIdL_TrackIdL_IsoVL_DZ_v15, process.MC_IsoMu_v15, process.MC_DoubleMu_TrkIsoVVL_DZ_v11, process.MC_DoubleMuNoFiltersNoVtx_v7, process.AlCa_EcalPi0EBonly_v13, process.AlCa_EcalPi0EEonly_v13, process.AlCa_EcalEtaEBonly_v13, process.AlCa_EcalEtaEEonly_v13, process.HLT_IsoMu24_eta2p1_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET90_v12, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET100_v12, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET110_v8, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET120_v8, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET130_v8, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_MET140_v3, process.HLT_MediumChargedIsoPFTau50_Trk30_eta2p1_1pr_v12, process.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_1pr_v11, process.HLT_MediumChargedIsoPFTau180HighPtRelaxedIso_Trk50_eta2p1_v12, process.HLT_MediumChargedIsoPFTau200HighPtRelaxedIso_Trk50_eta2p1_v12, process.HLT_MediumChargedIsoPFTau220HighPtRelaxedIso_Trk50_eta2p1_v12, process.HLT_Ele16_Ele12_Ele8_CaloIdL_TrackIdL_v9, process.HLT_Rsq0p35_v15, process.HLT_Rsq0p40_v15, process.HLT_RsqMR300_Rsq0p09_MR200_v15, process.HLT_RsqMR320_Rsq0p09_MR200_v15, process.HLT_RsqMR300_Rsq0p09_MR200_4jet_v15, process.HLT_RsqMR320_Rsq0p09_MR200_4jet_v15, process.HLT_IsoMu27_MET90_v3, process.HLT_DoubleMediumChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, process.HLT_DoubleMediumChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, process.HLT_DoubleTightChargedIsoPFTau35_Trk1_eta2p1_Reg_v12, process.HLT_DoubleTightChargedIsoPFTau35_Trk1_TightID_eta2p1_Reg_v12, process.HLT_DoubleMediumChargedIsoPFTauHPS30_L1MaxMass_Trk1_eta2p1_Reg_v1, process.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4, process.HLT_DoubleTightChargedIsoPFTauHPS35_Trk1_TightID_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, process.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_eta2p1_Reg_v1, process.HLT_DoubleMediumChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, process.HLT_DoubleTightChargedIsoPFTauHPS40_Trk1_TightID_eta2p1_Reg_v1, process.HLT_VBF_DoubleLooseChargedIsoPFTau20_Trk1_eta2p1_v3, process.HLT_VBF_DoubleLooseChargedIsoPFTauHPS20_Trk1_eta2p1_v1, process.HLT_VBF_DoubleMediumChargedIsoPFTauHPS20_Trk1_eta2p1_v1, process.HLT_VBF_DoubleTightChargedIsoPFTauHPS20_Trk1_eta2p1_v1, process.HLT_Photon50_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_PFMET50_v5, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ300DEta3_v5, process.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_PFJetsMJJ600DEta3_v5, process.HLT_PFMET100_PFMHT100_IDTight_PFHT60_v9, process.HLT_PFMETNoMu100_PFMHTNoMu100_IDTight_PFHT60_v9, process.HLT_PFMETTypeOne100_PFMHT100_IDTight_PFHT60_v9, process.HLT_Mu18_Mu9_SameSign_v4, process.HLT_Mu18_Mu9_SameSign_DZ_v4, process.HLT_Mu18_Mu9_v4, process.HLT_Mu18_Mu9_DZ_v4, process.HLT_Mu20_Mu10_SameSign_v4, process.HLT_Mu20_Mu10_SameSign_DZ_v4, process.HLT_Mu20_Mu10_v4, process.HLT_Mu20_Mu10_DZ_v4, process.HLT_Mu23_Mu12_SameSign_v4, process.HLT_Mu23_Mu12_SameSign_DZ_v4, process.HLT_Mu23_Mu12_v4, process.HLT_Mu23_Mu12_DZ_v4, process.HLT_DoubleMu2_Jpsi_DoubleTrk1_Phi1p05_v6, process.HLT_DoubleMu2_Jpsi_DoubleTkMu0_Phi_v5, process.HLT_DoubleMu3_DCA_PFMET50_PFMHT60_v10, process.HLT_TripleMu_5_3_3_Mass3p8_DCA_v3, process.HLT_QuadPFJet98_83_71_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_QuadPFJet103_88_75_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_QuadPFJet111_90_80_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_QuadPFJet98_83_71_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet103_88_75_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet105_88_76_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet111_90_80_15_PFBTagDeepCSV_1p3_VBF2_v8, process.HLT_QuadPFJet98_83_71_15_v5, process.HLT_QuadPFJet103_88_75_15_v5, process.HLT_QuadPFJet105_88_76_15_v5, process.HLT_QuadPFJet111_90_80_15_v5, process.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p17_v2, process.HLT_AK8PFJet330_TrimMass30_PFAK8BTagDeepCSV_p1_v2, process.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_p02_v3, process.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np2_v2, process.HLT_AK8PFJet330_TrimMass30_PFAK8BoostedDoubleB_np4_v2, process.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_Mass55_v2, process.HLT_Diphoton30_18_R9IdL_AND_HE_AND_IsoCaloId_NoPixelVeto_v2, process.HLT_Mu12_IP6_ToCSCS_v1, process.HLT_Mu12_IP6_part0_v2, process.HLT_Mu12_IP6_part1_v2, process.HLT_Mu12_IP6_part2_v2, process.HLT_Mu12_IP6_part3_v2, process.HLT_Mu12_IP6_part4_v2, process.HLT_Mu9_IP5_ToCSCS_v1, process.HLT_Mu9_IP5_part0_v2, process.HLT_Mu9_IP5_part1_v2, process.HLT_Mu9_IP5_part2_v2, process.HLT_Mu9_IP5_part3_v2, process.HLT_Mu9_IP5_part4_v2, process.HLT_Mu7_IP4_ToCSCS_v1, process.HLT_Mu7_IP4_part0_v2, process.HLT_Mu7_IP4_part1_v2, process.HLT_Mu7_IP4_part2_v2, process.HLT_Mu7_IP4_part3_v2, process.HLT_Mu7_IP4_part4_v2, process.HLT_Mu9_IP4_ToCSCS_v1, process.HLT_Mu9_IP4_part0_v2, process.HLT_Mu9_IP4_part1_v2, process.HLT_Mu9_IP4_part2_v2, process.HLT_Mu9_IP4_part3_v2, process.HLT_Mu9_IP4_part4_v2, process.HLT_Mu8_IP5_ToCSCS_v1, process.HLT_Mu8_IP5_part0_v2, process.HLT_Mu8_IP5_part1_v2, process.HLT_Mu8_IP5_part2_v2, process.HLT_Mu8_IP5_part3_v2, process.HLT_Mu8_IP5_part4_v2, process.HLT_Mu8_IP6_ToCSCS_v1, process.HLT_Mu8_IP6_part0_v2, process.HLT_Mu8_IP6_part1_v2, process.HLT_Mu8_IP6_part2_v2, process.HLT_Mu8_IP6_part3_v2, process.HLT_Mu8_IP6_part4_v2, process.HLT_Mu9_IP6_ToCSCS_v1, process.HLT_Mu9_IP6_part0_v3, process.HLT_Mu9_IP6_part1_v3, process.HLT_Mu9_IP6_part2_v3, process.HLT_Mu9_IP6_part3_v3, process.HLT_Mu9_IP6_part4_v3, process.HLT_Mu8_IP3_ToCSCS_v1, process.HLT_Mu8_IP3_part0_v3, process.HLT_Mu8_IP3_part1_v3, process.HLT_Mu8_IP3_part2_v3, process.HLT_Mu8_IP3_part3_v3, process.HLT_Mu8_IP3_part4_v3, process.HLT_Mu9_IP0_part0_v2, process.HLT_Mu9_IP3_part0_v2, process.HLT_QuadPFJet105_88_76_15_DoublePFBTagDeepCSV_1p3_7p7_VBF1_v8, process.HLT_TrkMu6NoFiltersNoVtx_v1, process.HLT_TrkMu16NoFiltersNoVtx_v1, process.HLT_DoubleTrkMu_16_6_NoFiltersNoVtx_v1, process.HLTriggerFinalPath, process.HLTAnalyzerEndpath, process.ParkingHLTPhysicsOutput, process.ParkingZeroBiasOutput, process.PhysicsCommissioningOutput, process.PhysicsEGammaOutput, process.PhysicsEndOfFillOutput, process.PhysicsHadronsTausOutput, process.PhysicsMuonsOutput, process.ParkingBPH1Output, process.ParkingBPH2Output, process.ParkingBPH3Output, process.ParkingBPH4Output, process.ParkingBPH5Output, process.DQMOutput, process.DQMOnlineBeamspotOutput, process.DQMCalibrationOutput, process.DQMEventDisplayOutput, process.HLTMonitorOutput, process.RPCMONOutput, process.CalibrationOutput, process.EcalCalibrationOutput, process.ALCAPHISYMOutput, process.ALCALumiPixelCountsExpressOutput, process.ALCALumiPixelCountsPromptOutput, process.ALCAP0Output, process.ExpressOutput, process.ExpressAlignmentOutput, process.NanoDSTOutput, process.ScoutingPFOutput, process.PhysicsScoutingMonitorOutput, process.PhysicsHLTPhysics1Output, process.PhysicsHLTPhysics2Output, process.PhysicsHLTPhysics3Output, process.PhysicsHLTPhysics4Output, process.PhysicsZeroBias1Output, process.PhysicsZeroBias2Output, process.PhysicsZeroBias3Output, process.PhysicsZeroBias4Output )) process.source = cms.Source( "PoolSource", @@ -92116,7 +93998,6 @@ wantSummary = cms.untracked.bool( True ), numberOfThreads = cms.untracked.uint32( 4 ), numberOfStreams = cms.untracked.uint32( 0 ), - sizeOfStackForThreadsInKB = cms.untracked.uint32( 10*1024 ) ) # override the GlobalTag, connection string and pfnPrefix @@ -92125,11 +94006,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run3_hlt_GRun') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('TriggerSummaryProducerAOD') - process.MessageLogger.categories.append('L1GtTrigReport') - process.MessageLogger.categories.append('L1TGlobalSummary') - process.MessageLogger.categories.append('HLTrigReport') - process.MessageLogger.categories.append('FastReport') + process.MessageLogger.TriggerSummaryProducerAOD = cms.untracked.PSet() + process.MessageLogger.L1GtTrigReport = cms.untracked.PSet() + process.MessageLogger.L1TGlobalSummary = cms.untracked.PSet() + process.MessageLogger.HLTrigReport = cms.untracked.PSet() + process.MessageLogger.FastReport = cms.untracked.PSet() + process.MessageLogger.ThroughputService = cms.untracked.PSet() # add specific customizations _customInfo = {} diff --git a/HLTrigger/Configuration/test/OnLine_HLT_HIon.py b/HLTrigger/Configuration/test/OnLine_HLT_HIon.py index d6550f506e6fd..fdd8e634edd89 100644 --- a/HLTrigger/Configuration/test/OnLine_HLT_HIon.py +++ b/HLTrigger/Configuration/test/OnLine_HLT_HIon.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --full --data /dev/CMSSW_11_2_0/HIon --type HIon --unprescale --process HLTHIon --globaltag auto:run3_hlt_HIon --input file:RelVal_Raw_HIon_DATA.root +# hltGetConfiguration --full --data /dev/CMSSW_11_3_0/HIon --type HIon --unprescale --process HLTHIon --globaltag auto:run3_hlt_HIon --input file:RelVal_Raw_HIon_DATA.root -# /dev/CMSSW_11_2_0/HIon/V12 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/HIon/V12 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTHIon" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/HIon/V12') + tableName = cms.string('/dev/CMSSW_11_3_0/HIon/V12') ) process.transferSystem = cms.PSet( @@ -6048,15 +6048,8 @@ ) process.MessageLogger = cms.Service( "MessageLogger", suppressInfo = cms.untracked.vstring( ), - statistics = cms.untracked.vstring( 'cerr' ), - suppressFwkInfo = cms.untracked.vstring( ), - cout = cms.untracked.PSet( placeholder = cms.untracked.bool( True ) ), - cerr_stats = cms.untracked.PSet( - threshold = cms.untracked.string( "WARNING" ), - output = cms.untracked.string( "cerr" ), - optionalPSet = cms.untracked.bool( True ) - ), suppressDebug = cms.untracked.vstring( ), + suppressFwkInfo = cms.untracked.vstring( ), cerr = cms.untracked.PSet( INFO = cms.untracked.PSet( limit = cms.untracked.int32( 0 ) ), noTimeStamps = cms.untracked.bool( False ), @@ -6072,10 +6065,6 @@ limit = cms.untracked.int32( 10000000 ) ), threshold = cms.untracked.string( "INFO" ), - suppressInfo = cms.untracked.vstring( ), - suppressWarning = cms.untracked.vstring( ), - suppressDebug = cms.untracked.vstring( ), - suppressError = cms.untracked.vstring( ) ), suppressWarning = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltCtf3HitL1SeededWithMaterialTracks', @@ -6098,17 +6087,6 @@ 'hltBLifetimeRegionalCtfWithMaterialTracksbbPhiL1FastJetFastPV', 'hltCtfActivityWithMaterialTracks' ), debugModules = cms.untracked.vstring( ), - categories = cms.untracked.vstring( 'FwkJob', - 'FwkReport', - 'FwkSummary', - 'Root_NoDictionary' ), - destinations = cms.untracked.vstring( 'warnings', - 'errors', - 'infos', - 'debugs', - 'cout', - 'cerr' ), - threshold = cms.untracked.string( "INFO" ), suppressError = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltL3MuonCandidates', 'hltL3TkTracksFromL2OIState', @@ -7442,7 +7420,7 @@ ts4Thresh = cms.double( 0.0 ), meanTime = cms.double( 0.0 ), nnlsThresh = cms.double( 1.0E-11 ), - nMaxItersMin = cms.int32( 500 ), + nMaxItersMin = cms.int32( 50 ), timeSigmaSiPM = cms.double( 2.5 ), applyTimeSlew = cms.bool( True ), timeSlewParsType = cms.int32( 3 ), @@ -12521,7 +12499,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble( 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ), muonMaxDPtOPt = cms.double( 1.0 ), trackQuality = cms.string( "highPurity" ), - cleanBadConvertedBrems = cms.bool( False ) + cleanBadConvertedBrems = cms.bool( False ), + vetoEndcap = cms.bool( False ) ), cms.PSet( source = cms.InputTag( "hltParticleFlowClusterECALUnseeded" ), importerName = cms.string( "ECALClusterImporter" ), @@ -12637,6 +12616,7 @@ calibHF_eta_step = cms.vdouble( 0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4 ), goodTrackDeadHcal_layers = cms.uint32( 4 ), goodPixelTrackDeadHcal_dxy = cms.double( 0.02 ), + vetoEndcap = cms.bool( False ), usePFNuclearInteractions = cms.bool( False ), GedElectronValueMap = cms.InputTag( "gedGsfElectronsTmp" ), goodPixelTrackDeadHcal_chi2n = cms.double( 2.0 ), @@ -15063,14 +15043,6 @@ useEt = cms.bool( True ), rhoScale = cms.double( 1.0 ) ) -process.hltRegionalTowerForEgamma = cms.EDProducer( "EgammaHLTCaloTowerProducer", - L1NonIsoCand = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - EMin = cms.double( 0.8 ), - EtMin = cms.double( 0.5 ), - L1IsoCand = cms.InputTag( 'hltGtStage2Digis','EGamma' ), - useTowersInCone = cms.double( 0.8 ), - towerCollection = cms.InputTag( "hltTowerMakerForAll" ) -) process.hltEgammaHcalPFClusterIsoPPOnAA = cms.EDProducer( "EgammaHLTHcalPFClusterIsolationProducer", effectiveAreas = cms.vdouble( 0.2, 0.25 ), useHF = cms.bool( False ), @@ -33818,7 +33790,7 @@ process.HLTHIGEDPhoton40EBHECutPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG40EtEBPPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEG40HoverEEBPPOnAAFilter ) process.HLTHIGEDPhoton50EBHECutPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG50EtEBPPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEG50HoverEEBPPOnAAFilter ) process.HLTHIGEDPhoton60EBHECutPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG60EtEBPPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEG60HoverEEBPPOnAAFilter ) -process.HLTPFHcalClusteringForEgamma = cms.Sequence( process.hltRegionalTowerForEgamma + process.hltParticleFlowRecHitHBHE + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL ) +process.HLTPFHcalClustering = cms.Sequence( process.hltParticleFlowRecHitHBHE + process.hltParticleFlowClusterHBHE + process.hltParticleFlowClusterHCAL ) process.HLTDoLocalStripPPOnAAZeroSuppressionSequence = cms.Sequence( process.hltSiStripExcludedFEDListProducer + process.HLTDoSiStripZeroSuppression + process.hltHITrackingSiStripRawToClustersFacilityZeroSuppression + process.hltSiStripClustersPPOnAAZeroSuppression ) process.HLTRecoPixelTracksPPOnAASequence = cms.Sequence( process.hltPixelTracksFilter + process.hltPixelTracksFitter + process.hltPixelTracksTrackingRegionsPPOnAA + process.hltPixelLayerQuadrupletsPPOnAA + process.hltPixelTracksHitDoubletsPPOnAA + process.hltPixelTracksHitQuadrupletsPPOnAA + process.hltPixelTracksPPOnAA ) process.HLTPixelVertexingPPOnAASequence = cms.Sequence( process.HLTRecoPixelTracksPPOnAASequence + process.hltPixelVerticesPPOnAA + process.hltTrimmedPixelVerticesPPOnAA ) @@ -33829,16 +33801,16 @@ process.HLTIterativeTrackingForElectronsIteration2 = cms.Sequence( process.hltIter2ElectronsClustersRefRemoval + process.hltIter2ElectronsMaskedMeasurementTrackerEvent + process.hltIter2ElectronsPixelLayerTriplets + process.hltIter2ElectronsPixelTrackingRegions + process.hltIter2ElectronsPixelHitDoublets + process.hltIter2ElectronsPixelHitTriplets + process.hltIter2ElectronsPixelSeeds + process.hltIter2ElectronsCkfTrackCandidates + process.hltIter2ElectronsCtfWithMaterialTracks + process.hltIter2ElectronsTrackSelectionHighPurity ) process.HLTIterativeTrackingDoubletRecoveryForElectrons = cms.Sequence( process.hltDoubletRecoveryForElectronsClustersRefRemoval + process.hltDoubletRecoveryForElectronsMaskedMeasurementTrackerEvent + process.hltDoubletRecoveryForElectronsPixelLayersAndRegions + process.hltDoubletRecoveryForElectronsPFlowPixelHitDoublets + process.hltDoubletRecoveryForElectronsPFlowPixelSeeds + process.hltDoubletRecoveryForElectronsPFlowCkfTrackCandidates + process.hltDoubletRecoveryForElectronsPFlowCtfWithMaterialTracks + process.hltDoubletRecoveryForElectronsPFlowTrackSelectionHighPurity ) process.HLTIterativeTrackingForElectrons = cms.Sequence( process.HLTIterativeTrackingForElectronsIteration0 + process.HLTIterativeTrackingForElectronsIteration1 + process.hltIter1ForElectronsMerged + process.HLTIterativeTrackingForElectronsIteration2 + process.hltIter2ForElectronsMerged + process.HLTIterativeTrackingDoubletRecoveryForElectrons + process.hltMergedForElectrons ) -process.HLTEle10GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG10EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle10ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle10HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle10EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle10HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle10PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle10GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle10GsfDetaPPOnAAFilter + process.hltEle10GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle10GsfTrackIsoPPOnAAFilter ) +process.HLTEle10GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG10EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle10ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle10HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle10EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle10HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle10PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle10GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle10GsfDetaPPOnAAFilter + process.hltEle10GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle10GsfTrackIsoPPOnAAFilter ) process.HLTDoHIStripZeroSuppressionRepacker = cms.Sequence( process.hltSiStripDigiToZSRaw + process.rawDataRepacker + process.rawDataReducedFormat ) -process.HLTEle15GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG15EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle15ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle15HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle15EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle15HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle15PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle15GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle15GsfDetaPPOnAAFilter + process.hltEle15GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle15GsfTrackIsoPPOnAAFilter ) -process.HLTEle20GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG20EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle20ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle20HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle20EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle20HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle20PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle20GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle20GsfDetaPPOnAAFilter + process.hltEle20GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle20GsfTrackIsoPPOnAAFilter ) -process.HLTEle30GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG30EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle30ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle30HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle30EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle30HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle30PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle30GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle30GsfDetaPPOnAAFilter + process.hltEle30GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle30GsfTrackIsoPPOnAAFilter ) -process.HLTEle40GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG40EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle40ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle40HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle40EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle40HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle40PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle40GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle40GsfDetaPPOnAAFilter + process.hltEle40GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle40GsfTrackIsoPPOnAAFilter ) -process.HLTEle50GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG50EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle50ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle50HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle50EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle50HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle50PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle50GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle50GsfDetaPPOnAAFilter + process.hltEle50GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle50GsfTrackIsoPPOnAAFilter ) -process.HLTEle15Ele10GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG15EtPPOnAAFilter + process.hltDoubleEG10EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltDoubleEle10ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltDoubleEle10HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltDoubleEle10EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltDoubleEle10HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.HLTGsfElectronPPOnAASequence + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) -process.HLTDoubleEle10GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltDoubleEG10EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltDoubleEle10ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltDoubleEle10HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltDoubleEle10EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltDoubleEle10HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.HLTGsfElectronPPOnAASequence + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) -process.HLTDoubleEle15GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltDoubleEG15EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltDoubleEle15ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltDoubleEle15HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltDoubleEle15EcalIsoPPOnAAFilter + process.HLTPFHcalClusteringForEgamma + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltDoubleEle15HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.HLTGsfElectronPPOnAASequence + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltDoubleEle15GsfTrackIsoPPOnAAFilter ) +process.HLTEle15GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG15EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle15ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle15HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle15EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle15HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle15PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle15GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle15GsfDetaPPOnAAFilter + process.hltEle15GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle15GsfTrackIsoPPOnAAFilter ) +process.HLTEle20GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG20EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle20ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle20HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle20EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle20HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle20PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle20GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle20GsfDetaPPOnAAFilter + process.hltEle20GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle20GsfTrackIsoPPOnAAFilter ) +process.HLTEle30GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG30EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle30ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle30HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle30EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle30HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle30PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle30GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle30GsfDetaPPOnAAFilter + process.hltEle30GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle30GsfTrackIsoPPOnAAFilter ) +process.HLTEle40GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG40EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle40ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle40HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle40EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle40HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle40PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle40GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle40GsfDetaPPOnAAFilter + process.hltEle40GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle40GsfTrackIsoPPOnAAFilter ) +process.HLTEle50GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG50EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltEle50ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltEle50HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltEle50EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltEle50HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.hltEle50PixelMatchPPOnAAFilter + process.HLTGsfElectronPPOnAASequence + process.hltEle50GsfOneOEMinusOneOPPPOnAAFilter + process.hltEle50GsfDetaPPOnAAFilter + process.hltEle50GsfDphiPPOnAAFilter + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltEle50GsfTrackIsoPPOnAAFilter ) +process.HLTEle15Ele10GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltEG15EtPPOnAAFilter + process.hltDoubleEG10EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltDoubleEle10ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltDoubleEle10HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltDoubleEle10EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltDoubleEle10HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.HLTGsfElectronPPOnAASequence + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) +process.HLTDoubleEle10GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltDoubleEG10EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltDoubleEle10ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltDoubleEle10HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltDoubleEle10EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltDoubleEle10HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.HLTGsfElectronPPOnAASequence + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltDoubleEle10GsfTrackIsoPPOnAAFilter ) +process.HLTDoubleEle15GsfPPOnAASequence = cms.Sequence( process.HLTDoFullUnpackingEgammaEcalSequence + process.HLTPFClusteringForEgammaPPOnAA + process.hltEgammaCandidatesPPOnAA + process.hltEgammaCandidatesWrapperPPOnAA + process.hltDoubleEG15EtPPOnAAFilter + process.hltEgammaClusterShapePPOnAA + process.hltDoubleEle15ClusterShapePPOnAAFilter + process.HLTDoLocalHcalWithTowerSequence + process.hltEgammaHoverEPPOnAA + process.hltDoubleEle15HoverEPPOnAAFilter + process.hltEgammaEcalPFClusterIsoPPOnAA + process.hltDoubleEle15EcalIsoPPOnAAFilter + process.HLTPFHcalClustering + process.hltEgammaHcalPFClusterIsoPPOnAA + process.hltDoubleEle15HcalIsoPPOnAAFilter + process.HLTDoLocalPixelSequencePPOnAA + process.HLTDoLocalStripPPOnAAZeroSuppressionSequence + process.HLTPixelVertexingPPOnAASequence + process.HLTElectronPixelMatchingPPOnAASequence + process.HLTGsfElectronPPOnAASequence + process.HLTIterativeTrackingForElectrons + process.hltEgammaEleGsfTrackIsoPPOnAA + process.hltDoubleEle15GsfTrackIsoPPOnAAFilter ) process.HLTEndSequenceWithZeroSuppressionRepacker = cms.Sequence( process.HLTDoHIStripZeroSuppressionRepacker + process.HLTEndSequence ) process.HLTFullIterativeTrackingIteration0PreSplittingPPOnAAForDmeson = cms.Sequence( process.hltFullIter0PixelQuadrupletsPreSplittingPPOnAAForDmeson + process.hltFullIter0PixelTrackingRegionsPreSplittingPPOnAAForDmeson + process.hltFullIter0PixelClusterCheckPreSplittingPPOnAAForDmeson + process.hltFullIter0PixelHitDoubletsPreSplittingPPOnAAForDmeson + process.hltFullIter0PixelHitQuadrupletsPreSplittingPPOnAAForDmeson + process.hltFullIter0PixelSeedsPreSplittingPPOnAAForDmeson + process.hltFullIter0CkfTrackCandidatesPreSplittingPPOnAAForDmeson + process.hltFullIter0CtfWithMaterialTracksPreSplittingPPOnAAForDmeson + process.hltFullIter0PrimaryVerticesPreSplittingPPOnAAForDmeson ) process.HLTDoLocalPixelSequenceAfterSplittingPPOnAAForDmeson = cms.Sequence( process.hltSiPixelClustersAfterSplittingPPOnAAForDmeson + process.hltSiPixelClustersCacheAfterSplittingPPOnAAForDmeson + process.hltSiPixelRecHitsAfterSplittingPPOnAAForDmeson ) @@ -34407,7 +34379,6 @@ wantSummary = cms.untracked.bool( True ), numberOfThreads = cms.untracked.uint32( 4 ), numberOfStreams = cms.untracked.uint32( 0 ), - sizeOfStackForThreadsInKB = cms.untracked.uint32( 10*1024 ) ) # override the GlobalTag, connection string and pfnPrefix @@ -34416,11 +34387,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run3_hlt_HIon') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('TriggerSummaryProducerAOD') - process.MessageLogger.categories.append('L1GtTrigReport') - process.MessageLogger.categories.append('L1TGlobalSummary') - process.MessageLogger.categories.append('HLTrigReport') - process.MessageLogger.categories.append('FastReport') + process.MessageLogger.TriggerSummaryProducerAOD = cms.untracked.PSet() + process.MessageLogger.L1GtTrigReport = cms.untracked.PSet() + process.MessageLogger.L1TGlobalSummary = cms.untracked.PSet() + process.MessageLogger.HLTrigReport = cms.untracked.PSet() + process.MessageLogger.FastReport = cms.untracked.PSet() + process.MessageLogger.ThroughputService = cms.untracked.PSet() # load the DQMStore and DQMRootOutputModule process.load( "DQMServices.Core.DQMStore_cfi" ) diff --git a/HLTrigger/Configuration/test/OnLine_HLT_PIon.py b/HLTrigger/Configuration/test/OnLine_HLT_PIon.py index 08c4d2193e2d4..2aa4f8b3ab739 100644 --- a/HLTrigger/Configuration/test/OnLine_HLT_PIon.py +++ b/HLTrigger/Configuration/test/OnLine_HLT_PIon.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --full --data /dev/CMSSW_11_2_0/PIon --type PIon --unprescale --process HLTPIon --globaltag auto:run3_hlt_PIon --input file:RelVal_Raw_PIon_DATA.root +# hltGetConfiguration --full --data /dev/CMSSW_11_3_0/PIon --type PIon --unprescale --process HLTPIon --globaltag auto:run3_hlt_PIon --input file:RelVal_Raw_PIon_DATA.root -# /dev/CMSSW_11_2_0/PIon/V12 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/PIon/V12 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTPIon" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/PIon/V12') + tableName = cms.string('/dev/CMSSW_11_3_0/PIon/V12') ) process.transferSystem = cms.PSet( @@ -5519,15 +5519,8 @@ ) process.MessageLogger = cms.Service( "MessageLogger", suppressInfo = cms.untracked.vstring( ), - statistics = cms.untracked.vstring( 'cerr' ), - suppressFwkInfo = cms.untracked.vstring( ), - cout = cms.untracked.PSet( placeholder = cms.untracked.bool( True ) ), - cerr_stats = cms.untracked.PSet( - threshold = cms.untracked.string( "WARNING" ), - output = cms.untracked.string( "cerr" ), - optionalPSet = cms.untracked.bool( True ) - ), suppressDebug = cms.untracked.vstring( ), + suppressFwkInfo = cms.untracked.vstring( ), cerr = cms.untracked.PSet( INFO = cms.untracked.PSet( limit = cms.untracked.int32( 0 ) ), noTimeStamps = cms.untracked.bool( False ), @@ -5543,10 +5536,6 @@ limit = cms.untracked.int32( 10000000 ) ), threshold = cms.untracked.string( "INFO" ), - suppressInfo = cms.untracked.vstring( ), - suppressWarning = cms.untracked.vstring( ), - suppressDebug = cms.untracked.vstring( ), - suppressError = cms.untracked.vstring( ) ), suppressWarning = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltCtf3HitL1SeededWithMaterialTracks', @@ -5569,17 +5558,6 @@ 'hltBLifetimeRegionalCtfWithMaterialTracksbbPhiL1FastJetFastPV', 'hltCtfActivityWithMaterialTracks' ), debugModules = cms.untracked.vstring( ), - categories = cms.untracked.vstring( 'FwkJob', - 'FwkReport', - 'FwkSummary', - 'Root_NoDictionary' ), - destinations = cms.untracked.vstring( 'warnings', - 'errors', - 'infos', - 'debugs', - 'cout', - 'cerr' ), - threshold = cms.untracked.string( "INFO" ), suppressError = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltL3MuonCandidates', 'hltL3TkTracksFromL2OIState', @@ -5864,7 +5842,6 @@ wantSummary = cms.untracked.bool( True ), numberOfThreads = cms.untracked.uint32( 4 ), numberOfStreams = cms.untracked.uint32( 0 ), - sizeOfStackForThreadsInKB = cms.untracked.uint32( 10*1024 ) ) # override the GlobalTag, connection string and pfnPrefix @@ -5873,11 +5850,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run3_hlt_PIon') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('TriggerSummaryProducerAOD') - process.MessageLogger.categories.append('L1GtTrigReport') - process.MessageLogger.categories.append('L1TGlobalSummary') - process.MessageLogger.categories.append('HLTrigReport') - process.MessageLogger.categories.append('FastReport') + process.MessageLogger.TriggerSummaryProducerAOD = cms.untracked.PSet() + process.MessageLogger.L1GtTrigReport = cms.untracked.PSet() + process.MessageLogger.L1TGlobalSummary = cms.untracked.PSet() + process.MessageLogger.HLTrigReport = cms.untracked.PSet() + process.MessageLogger.FastReport = cms.untracked.PSet() + process.MessageLogger.ThroughputService = cms.untracked.PSet() # add specific customizations _customInfo = {} diff --git a/HLTrigger/Configuration/test/OnLine_HLT_PRef.py b/HLTrigger/Configuration/test/OnLine_HLT_PRef.py index defe110100ccb..2c29103a38636 100644 --- a/HLTrigger/Configuration/test/OnLine_HLT_PRef.py +++ b/HLTrigger/Configuration/test/OnLine_HLT_PRef.py @@ -1,13 +1,13 @@ -# hltGetConfiguration --full --data /dev/CMSSW_11_2_0/PRef --type PRef --unprescale --process HLTPRef --globaltag auto:run3_hlt_PRef --input file:RelVal_Raw_PRef_DATA.root +# hltGetConfiguration --full --data /dev/CMSSW_11_3_0/PRef --type PRef --unprescale --process HLTPRef --globaltag auto:run3_hlt_PRef --input file:RelVal_Raw_PRef_DATA.root -# /dev/CMSSW_11_2_0/PRef/V12 (CMSSW_11_2_0_pre9) +# /dev/CMSSW_11_3_0/PRef/V12 (CMSSW_11_3_0_pre4) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTPRef" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_2_0/PRef/V12') + tableName = cms.string('/dev/CMSSW_11_3_0/PRef/V12') ) process.transferSystem = cms.PSet( @@ -5598,15 +5598,8 @@ ) process.MessageLogger = cms.Service( "MessageLogger", suppressInfo = cms.untracked.vstring( ), - statistics = cms.untracked.vstring( 'cerr' ), - suppressFwkInfo = cms.untracked.vstring( ), - cout = cms.untracked.PSet( placeholder = cms.untracked.bool( True ) ), - cerr_stats = cms.untracked.PSet( - threshold = cms.untracked.string( "WARNING" ), - output = cms.untracked.string( "cerr" ), - optionalPSet = cms.untracked.bool( True ) - ), suppressDebug = cms.untracked.vstring( ), + suppressFwkInfo = cms.untracked.vstring( ), cerr = cms.untracked.PSet( INFO = cms.untracked.PSet( limit = cms.untracked.int32( 0 ) ), noTimeStamps = cms.untracked.bool( False ), @@ -5622,10 +5615,6 @@ limit = cms.untracked.int32( 10000000 ) ), threshold = cms.untracked.string( "INFO" ), - suppressInfo = cms.untracked.vstring( ), - suppressWarning = cms.untracked.vstring( ), - suppressDebug = cms.untracked.vstring( ), - suppressError = cms.untracked.vstring( ) ), suppressWarning = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltCtf3HitL1SeededWithMaterialTracks', @@ -5648,17 +5637,6 @@ 'hltBLifetimeRegionalCtfWithMaterialTracksbbPhiL1FastJetFastPV', 'hltCtfActivityWithMaterialTracks' ), debugModules = cms.untracked.vstring( ), - categories = cms.untracked.vstring( 'FwkJob', - 'FwkReport', - 'FwkSummary', - 'Root_NoDictionary' ), - destinations = cms.untracked.vstring( 'warnings', - 'errors', - 'infos', - 'debugs', - 'cout', - 'cerr' ), - threshold = cms.untracked.string( "INFO" ), suppressError = cms.untracked.vstring( 'hltOnlineBeamSpot', 'hltL3MuonCandidates', 'hltL3TkTracksFromL2OIState', @@ -6022,7 +6000,7 @@ ts4Thresh = cms.double( 0.0 ), meanTime = cms.double( 0.0 ), nnlsThresh = cms.double( 1.0E-11 ), - nMaxItersMin = cms.int32( 500 ), + nMaxItersMin = cms.int32( 50 ), timeSigmaSiPM = cms.double( 2.5 ), applyTimeSlew = cms.bool( True ), timeSlewParsType = cms.int32( 3 ), @@ -11866,7 +11844,6 @@ wantSummary = cms.untracked.bool( True ), numberOfThreads = cms.untracked.uint32( 4 ), numberOfStreams = cms.untracked.uint32( 0 ), - sizeOfStackForThreadsInKB = cms.untracked.uint32( 10*1024 ) ) # override the GlobalTag, connection string and pfnPrefix @@ -11875,11 +11852,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run3_hlt_PRef') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('TriggerSummaryProducerAOD') - process.MessageLogger.categories.append('L1GtTrigReport') - process.MessageLogger.categories.append('L1TGlobalSummary') - process.MessageLogger.categories.append('HLTrigReport') - process.MessageLogger.categories.append('FastReport') + process.MessageLogger.TriggerSummaryProducerAOD = cms.untracked.PSet() + process.MessageLogger.L1GtTrigReport = cms.untracked.PSet() + process.MessageLogger.L1TGlobalSummary = cms.untracked.PSet() + process.MessageLogger.HLTrigReport = cms.untracked.PSet() + process.MessageLogger.FastReport = cms.untracked.PSet() + process.MessageLogger.ThroughputService = cms.untracked.PSet() # add specific customizations _customInfo = {} diff --git a/HLTrigger/Configuration/test/analyse_cfg.py b/HLTrigger/Configuration/test/analyse_cfg.py index d0458e394dac8..4c1c08efe3622 100644 --- a/HLTrigger/Configuration/test/analyse_cfg.py +++ b/HLTrigger/Configuration/test/analyse_cfg.py @@ -3,17 +3,17 @@ process = cms.Process("ANA") process.load('FWCore/MessageService/MessageLogger_cfi') -process.MessageLogger.categories.append('TriggerSummaryAnalyzerAOD') -process.MessageLogger.categories.append('TriggerSummaryAnalyzerRAW') -process.MessageLogger.categories.append('HLTEventAnalyzerAOD') -process.MessageLogger.categories.append('HLTEventAnalyzerRAW') -process.MessageLogger.categories.append('L1GtTrigReport') -process.MessageLogger.categories.append('L1TGlobalSummary') -process.MessageLogger.categories.append('HLTrigReport') -process.MessageLogger.categories.append('HLTSummaryFilter') -process.MessageLogger.categories.append('HLTConfigProvider') -process.MessageLogger.categories.append('HLTPrescaleProvider') -process.MessageLogger.categories.append('HLTConfigData') +process.MessageLogger.TriggerSummaryAnalyzerAOD=dict() +process.MessageLogger.TriggerSummaryAnalyzerRAW=dict() +process.MessageLogger.HLTEventAnalyzerAOD=dict() +process.MessageLogger.HLTEventAnalyzerRAW=dict() +process.MessageLogger.L1GtTrigReport=dict() +process.MessageLogger.L1TGlobalSummary=dict() +process.MessageLogger.HLTrigReport=dict() +process.MessageLogger.HLTSummaryFilter=dict() +process.MessageLogger.HLTConfigProvider=dict() +process.MessageLogger.HLTPrescaleProvider=dict() +process.MessageLogger.HLTConfigData=dict() # process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') # process.load('Configuration.StandardSequences.CondDBESSource_cff') diff --git a/HLTrigger/Configuration/test/getFrozenHLT.sh b/HLTrigger/Configuration/test/getFrozenHLT.sh index 7b2f143536a84..e15e4fd0ea646 100755 --- a/HLTrigger/Configuration/test/getFrozenHLT.sh +++ b/HLTrigger/Configuration/test/getFrozenHLT.sh @@ -2,9 +2,9 @@ # ConfDB configurations to use TABLES="Fake Fake1 Fake2" -HLT_Fake="/dev/CMSSW_11_2_0/Fake" -HLT_Fake1="/dev/CMSSW_11_2_0/Fake1" -HLT_Fake2="/dev/CMSSW_11_2_0/Fake2" +HLT_Fake="/dev/CMSSW_11_3_0/Fake" +HLT_Fake1="/dev/CMSSW_11_3_0/Fake1" +HLT_Fake2="/dev/CMSSW_11_3_0/Fake2" # print extra messages ? VERBOSE=false diff --git a/HLTrigger/Configuration/test/getHLT.sh b/HLTrigger/Configuration/test/getHLT.sh index 87aa3e1abd5e2..d0d586f1aef0a 100755 --- a/HLTrigger/Configuration/test/getHLT.sh +++ b/HLTrigger/Configuration/test/getHLT.sh @@ -1,8 +1,8 @@ #! /bin/bash # ConfDB configurations to use -MASTER="/dev/CMSSW_11_2_0/HLT" # no explicit version, take the most recent -TARGET="/dev/CMSSW_11_2_0/\$TABLE" # no explicit version, take the most recent +MASTER="/dev/CMSSW_11_3_0/HLT" # no explicit version, take the most recent +TARGET="/dev/CMSSW_11_3_0/\$TABLE" # no explicit version, take the most recent TABLES="GRun HIon PIon PRef" # $TABLE in the above variable will be expanded to these TABLES diff --git a/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.cc b/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.cc index 1db10bb1d818d..f42e0b9a3f878 100644 --- a/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.cc +++ b/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.cc @@ -68,6 +68,7 @@ HLTScoutingEgammaProducer::HLTScoutingEgammaProducer(const edm::ParameterSet& iC //register products produces(); produces(); + topologyToken_ = esConsumes(); } HLTScoutingEgammaProducer::~HLTScoutingEgammaProducer() = default; @@ -179,9 +180,7 @@ void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, e iEvent.getByToken(ecalRechitEB_, rechitsEB); iEvent.getByToken(ecalRechitEE_, rechitsEE); - edm::ESHandle pTopology; - setup.get().get(pTopology); - const CaloTopology* topology = pTopology.product(); + const CaloTopology* topology = &setup.getData(topologyToken_); // Produce electrons and photons int index = 0; diff --git a/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.h b/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.h index 0ce58ad785728..3bc5de8beeb3f 100644 --- a/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.h +++ b/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.h @@ -88,6 +88,7 @@ class HLTScoutingEgammaProducer : public edm::global::EDProducer<> { const edm::EDGetTokenT ecalRechitEB_; const edm::EDGetTokenT ecalRechitEE_; + edm::ESGetToken topologyToken_; }; #endif diff --git a/HLTrigger/HLTanalyzers/test/HLTrigReport.py b/HLTrigger/HLTanalyzers/test/HLTrigReport.py index fa27ec3f217d9..7dcaeccdbb102 100644 --- a/HLTrigger/HLTanalyzers/test/HLTrigReport.py +++ b/HLTrigger/HLTanalyzers/test/HLTrigReport.py @@ -4,7 +4,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 999999999 -process.MessageLogger.categories.append('HLTrigReport') +process.MessageLogger.HLTrigReport=dict() process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(False) diff --git a/HLTrigger/HLTanalyzers/test/test_hltrigreport_base_cfg.py b/HLTrigger/HLTanalyzers/test/test_hltrigreport_base_cfg.py index e473b586274d3..109086660ed09 100644 --- a/HLTrigger/HLTanalyzers/test/test_hltrigreport_base_cfg.py +++ b/HLTrigger/HLTanalyzers/test/test_hltrigreport_base_cfg.py @@ -4,7 +4,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 999999999 -process.MessageLogger.categories.append('HLTrigReport') +process.MessageLogger.HLTrigReport=dict() process.options.wantSummary = False diff --git a/HLTrigger/HLTcore/interface/FractionalPrescale.h b/HLTrigger/HLTcore/interface/FractionalPrescale.h new file mode 100644 index 0000000000000..b6a8dbb97731a --- /dev/null +++ b/HLTrigger/HLTcore/interface/FractionalPrescale.h @@ -0,0 +1,7 @@ +#ifndef HLTrigger_HLTcore_FractionalPrescale_h +#define HLTrigger_HLTcore_FractionalPrescale_h + +#include +using FractionalPrescale = boost::rational; + +#endif diff --git a/HLTrigger/HLTcore/interface/HLTConfigProvider.h b/HLTrigger/HLTcore/interface/HLTConfigProvider.h index 610299d4258ae..fdd303a278146 100644 --- a/HLTrigger/HLTcore/interface/HLTConfigProvider.h +++ b/HLTrigger/HLTcore/interface/HLTConfigProvider.h @@ -16,6 +16,7 @@ #include "FWCore/Framework/interface/LuminosityBlock.h" #include "HLTrigger/HLTcore/interface/HLTConfigData.h" +#include "HLTrigger/HLTcore/interface/FractionalPrescale.h" #include #include @@ -183,7 +184,13 @@ class HLTConfigProvider { /// Number of HLT prescale sets unsigned int prescaleSize() const { return hltConfigData_->prescaleSize(); } /// HLT prescale value in specific prescale set for a specific trigger path - unsigned int prescaleValue(unsigned int set, const std::string& trigger) const { + template + T prescaleValue(unsigned int set, const std::string& trigger) const { + //limit to only 4 allowed types + static_assert(std::is_same_v or std::is_same_v or std::is_same_v or + std::is_same_v, + "Please use prescaleValue, prescaleValue, prescaleValue, or " + "prescaleValue,\n note int and unsigned int will be depreated soon"); return hltConfigData_->prescaleValue(set, trigger); } diff --git a/HLTrigger/HLTcore/interface/HLTEventAnalyzerRAW.h b/HLTrigger/HLTcore/interface/HLTEventAnalyzerRAW.h index 24aa8ca0ae71c..f77e2dd9f9fa0 100644 --- a/HLTrigger/HLTcore/interface/HLTEventAnalyzerRAW.h +++ b/HLTrigger/HLTcore/interface/HLTEventAnalyzerRAW.h @@ -3,7 +3,7 @@ /** \class HLTEventAnalyzerRAW * - * + * * This class is an EDAnalyzer analyzing the combined HLT information for RAW * * @@ -79,6 +79,22 @@ class HLTEventAnalyzerRAW : public edm::stream::EDAnalyzer<> { trigger::Vids l1hfringsIds_; trigger::VRl1hfrings l1hfringsRefs_; + /* Phase-2 */ + trigger::Vids l1ttkmuIds_; + trigger::VRl1ttkmuon l1ttkmuRefs_; + trigger::Vids l1ttkeleIds_; + trigger::VRl1ttkele l1ttkeleRefs_; + trigger::Vids l1ttkemIds_; + trigger::VRl1ttkem l1ttkemRefs_; + trigger::Vids l1tpfjetIds_; + trigger::VRl1tpfjet l1tpfjetRefs_; + trigger::Vids l1tpftauIds_; + trigger::VRl1tpftau l1tpftauRefs_; + trigger::Vids l1thpspftauIds_; + trigger::VRl1thpspftau l1thpspftauRefs_; + trigger::Vids l1tpftrackIds_; + trigger::VRl1tpftrack l1tpftrackRefs_; + trigger::Vids pfjetIds_; trigger::VRpfjet pfjetRefs_; trigger::Vids pftauIds_; diff --git a/HLTrigger/HLTcore/interface/HLTPrescaleProvider.h b/HLTrigger/HLTcore/interface/HLTPrescaleProvider.h index 6744907cdff95..1c59175548269 100644 --- a/HLTrigger/HLTcore/interface/HLTPrescaleProvider.h +++ b/HLTrigger/HLTcore/interface/HLTPrescaleProvider.h @@ -15,6 +15,7 @@ * function calls were added. W. David Dagenhart */ +#include "HLTrigger/HLTcore/interface/FractionalPrescale.h" #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h" #include "L1Trigger/GlobalTriggerAnalyzer/interface/L1GtUtils.h" #include "L1Trigger/L1TGlobal/interface/L1TGlobalUtil.h" @@ -58,25 +59,53 @@ class HLTPrescaleProvider { // negative == error /// combining the two methods above - unsigned int prescaleValue(const edm::Event& iEvent, const edm::EventSetup& iSetup, const std::string& trigger); + template + T prescaleValue(const edm::Event& iEvent, const edm::EventSetup& iSetup, const std::string& trigger) { + const int set(prescaleSet(iEvent, iSetup)); + //there is a template specialisation for unsigned in which returns +1 which + //emulates old behaviour + return set < 0 ? -1 : hltConfigProvider_.prescaleValue(static_cast(set), trigger); + } /// Combined L1T (pair.first) and HLT (pair.second) prescales per HLT path - std::pair prescaleValues(const edm::Event& iEvent, - const edm::EventSetup& iSetup, - const std::string& trigger); + template + std::pair prescaleValues(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + const std::string& trigger) { + return {convertL1PS(getL1PrescaleValue(iEvent, iSetup, trigger)), + prescaleValue(iEvent, iSetup, trigger)}; + } // any one negative => error in retrieving this (L1T or HLT) prescale // In case of a complex Boolean expression as L1 seed - std::pair >, int> prescaleValuesInDetail(const edm::Event& iEvent, - const edm::EventSetup& iSetup, - const std::string& trigger); + template + std::pair >, THLT> prescaleValuesInDetail(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + const std::string& trigger) { + std::pair >, THLT> retval; + for (auto& entry : getL1PrescaleValueInDetail(iEvent, iSetup, trigger)) { + retval.first.emplace_back(std::move(entry.first), convertL1PS(entry.second)); + } + retval.second = prescaleValue(iEvent, iSetup, trigger); + return retval; + } // Event rejected by HLTPrescaler on ith HLT path? bool rejectedByHLTPrescaler(const edm::TriggerResults& triggerResults, unsigned int i) const; + static int l1PrescaleDenominator() { return kL1PrescaleDenominator_; } private: void checkL1GtUtils() const; void checkL1TGlobalUtil() const; + template + T convertL1PS(double val) const { + return T(val); + } + double getL1PrescaleValue(const edm::Event& iEvent, const edm::EventSetup& iSetup, const std::string& trigger); + std::vector > getL1PrescaleValueInDetail(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + const std::string& trigger); + static constexpr int kL1PrescaleDenominator_ = 100; HLTConfigProvider hltConfigProvider_; std::unique_ptr l1GtUtils_; std::unique_ptr l1tGlobalUtil_; @@ -97,4 +126,13 @@ HLTPrescaleProvider::HLTPrescaleProvider(edm::ParameterSet const& pset, edm::Con l1tGlobalUtil_ = std::make_unique(pset, iC, module, l1t::UseEventSetupIn::Run); } } + +template <> +FractionalPrescale HLTPrescaleProvider::convertL1PS(double val) const; + +template <> +unsigned int HLTPrescaleProvider::prescaleValue(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + const std::string& trigger); + #endif diff --git a/HLTrigger/HLTcore/interface/TriggerSummaryProducerAOD.h b/HLTrigger/HLTcore/interface/TriggerSummaryProducerAOD.h index bdd2a932ef6b5..0f5d573872e8c 100644 --- a/HLTrigger/HLTcore/interface/TriggerSummaryProducerAOD.h +++ b/HLTrigger/HLTcore/interface/TriggerSummaryProducerAOD.h @@ -3,7 +3,7 @@ /** \class TriggerSummaryProducerAOD * - * + * * This class is an EDProducer making the HLT summary object for AOD * * @@ -46,6 +46,15 @@ #include "DataFormats/JetReco/interface/PFJetCollection.h" #include "DataFormats/TauReco/interface/PFTauFwd.h" +#include "DataFormats/L1TCorrelator/interface/TkMuon.h" +#include "DataFormats/L1TCorrelator/interface/TkElectron.h" +#include "DataFormats/L1TCorrelator/interface/TkEm.h" +#include "DataFormats/L1TParticleFlow/interface/PFJet.h" +#include "DataFormats/L1TParticleFlow/interface/PFTau.h" +#include "DataFormats/L1TParticleFlow/interface/HPSPFTau.h" +#include "DataFormats/L1TParticleFlow/interface/HPSPFTauFwd.h" +#include "DataFormats/L1TParticleFlow/interface/PFTrack.h" + #include #include #include @@ -200,5 +209,12 @@ class TriggerSummaryProducerAOD : public edm::global::EDProducer<> { edm::GetterOfProducts getL1TJetParticleCollection_; edm::GetterOfProducts getL1TTauParticleCollection_; edm::GetterOfProducts getL1TEtSumParticleCollection_; + edm::GetterOfProducts getL1TTkMuonCollection_; + edm::GetterOfProducts getL1TTkElectronCollection_; + edm::GetterOfProducts getL1TTkEmCollection_; + edm::GetterOfProducts getL1TPFJetCollection_; + edm::GetterOfProducts getL1TPFTauCollection_; + edm::GetterOfProducts getL1THPSPFTauCollection_; + edm::GetterOfProducts getL1TPFTrackCollection_; }; #endif diff --git a/HLTrigger/HLTcore/plugins/HLTEventAnalyzerRAW.cc b/HLTrigger/HLTcore/plugins/HLTEventAnalyzerRAW.cc index b4e9643a21f55..c72281ac6c0c1 100644 --- a/HLTrigger/HLTcore/plugins/HLTEventAnalyzerRAW.cc +++ b/HLTrigger/HLTcore/plugins/HLTEventAnalyzerRAW.cc @@ -28,6 +28,13 @@ #include "DataFormats/L1Trigger/interface/L1JetParticle.h" #include "DataFormats/L1Trigger/interface/L1MuonParticle.h" #include "DataFormats/L1Trigger/interface/L1EtMissParticle.h" +#include "DataFormats/L1TCorrelator/interface/TkMuon.h" +#include "DataFormats/L1TCorrelator/interface/TkElectron.h" +#include "DataFormats/L1TCorrelator/interface/TkEm.h" +#include "DataFormats/L1TParticleFlow/interface/PFJet.h" +#include "DataFormats/L1TParticleFlow/interface/PFTau.h" +#include "DataFormats/L1TParticleFlow/interface/HPSPFTau.h" +#include "DataFormats/L1TParticleFlow/interface/PFTrack.h" #include "DataFormats/JetReco/interface/PFJet.h" #include "DataFormats/TauReco/interface/PFTau.h" @@ -196,6 +203,20 @@ void HLTEventAnalyzerRAW::analyzeTrigger(const edm::Event& iEvent, l1etmissRefs_.clear(); l1hfringsIds_.clear(); l1hfringsRefs_.clear(); + l1ttkmuIds_.clear(); + l1ttkmuRefs_.clear(); + l1ttkeleIds_.clear(); + l1ttkeleRefs_.clear(); + l1ttkemIds_.clear(); + l1ttkemRefs_.clear(); + l1tpfjetIds_.clear(); + l1tpfjetRefs_.clear(); + l1tpftauIds_.clear(); + l1tpftauRefs_.clear(); + l1thpspftauIds_.clear(); + l1thpspftauRefs_.clear(); + l1tpftrackIds_.clear(); + l1tpftrackRefs_.clear(); pfjetIds_.clear(); pfjetRefs_.clear(); pftauIds_.clear(); @@ -349,6 +370,80 @@ void HLTEventAnalyzerRAW::analyzeTrigger(const edm::Event& iEvent, } } + /* Phase-2 */ + + triggerEventWithRefsHandle_->getObjects(filterIndex, l1ttkmuIds_, l1ttkmuRefs_); + const unsigned int nL1TTkMuons(l1ttkmuIds_.size()); + if (nL1TTkMuons > 0) { + LogVerbatim("HLTEventAnalyzerRAW") << " L1TTkMuons: " << nL1TTkMuons << " - the objects: # id pt" << endl; + for (unsigned int i = 0; i != nL1TTkMuons; ++i) { + LogVerbatim("HLTEventAnalyzerRAW") + << " " << i << " " << l1ttkmuIds_[i] << " " << l1ttkmuRefs_[i]->pt() << endl; + } + } + + triggerEventWithRefsHandle_->getObjects(filterIndex, l1ttkeleIds_, l1ttkeleRefs_); + const unsigned int nL1TTkElectrons(l1ttkeleIds_.size()); + if (nL1TTkElectrons > 0) { + LogVerbatim("HLTEventAnalyzerRAW") + << " L1TTkElectrons: " << nL1TTkElectrons << " - the objects: # id pt" << endl; + for (unsigned int i = 0; i != nL1TTkElectrons; ++i) { + LogVerbatim("HLTEventAnalyzerRAW") + << " " << i << " " << l1ttkeleIds_[i] << " " << l1ttkeleRefs_[i]->pt() << endl; + } + } + + triggerEventWithRefsHandle_->getObjects(filterIndex, l1ttkemIds_, l1ttkemRefs_); + const unsigned int nL1TTkEMs(l1ttkemIds_.size()); + if (nL1TTkEMs > 0) { + LogVerbatim("HLTEventAnalyzerRAW") << " L1TTkEMs: " << nL1TTkEMs << " - the objects: # id pt" << endl; + for (unsigned int i = 0; i != nL1TTkEMs; ++i) { + LogVerbatim("HLTEventAnalyzerRAW") + << " " << i << " " << l1ttkemIds_[i] << " " << l1ttkemRefs_[i]->pt() << endl; + } + } + + triggerEventWithRefsHandle_->getObjects(filterIndex, l1tpfjetIds_, l1tpfjetRefs_); + const unsigned int nL1TPFJets(l1tpfjetIds_.size()); + if (nL1TPFJets > 0) { + LogVerbatim("HLTEventAnalyzerRAW") << " L1TPFJets: " << nL1TPFJets << " - the objects: # id pt" << endl; + for (unsigned int i = 0; i != nL1TPFJets; ++i) { + LogVerbatim("HLTEventAnalyzerRAW") + << " " << i << " " << l1tpfjetIds_[i] << " " << l1tpfjetRefs_[i]->pt() << endl; + } + } + + triggerEventWithRefsHandle_->getObjects(filterIndex, l1tpftauIds_, l1tpftauRefs_); + const unsigned int nL1TPFTaus(l1tpftauIds_.size()); + if (nL1TPFTaus > 0) { + LogVerbatim("HLTEventAnalyzerRAW") << " L1TPFTaus: " << nL1TPFTaus << " - the objects: # id pt" << endl; + for (unsigned int i = 0; i != nL1TPFTaus; ++i) { + LogVerbatim("HLTEventAnalyzerRAW") + << " " << i << " " << l1tpftauIds_[i] << " " << l1tpftauRefs_[i]->pt() << endl; + } + } + + triggerEventWithRefsHandle_->getObjects(filterIndex, l1thpspftauIds_, l1thpspftauRefs_); + const unsigned int nL1THPSPFTaus(l1thpspftauIds_.size()); + if (nL1THPSPFTaus > 0) { + LogVerbatim("HLTEventAnalyzerRAW") + << " L1THPSPFTaus: " << nL1THPSPFTaus << " - the objects: # id pt" << endl; + for (unsigned int i = 0; i != nL1THPSPFTaus; ++i) { + LogVerbatim("HLTEventAnalyzerRAW") + << " " << i << " " << l1thpspftauIds_[i] << " " << l1thpspftauRefs_[i]->pt() << endl; + } + } + + triggerEventWithRefsHandle_->getObjects(filterIndex, l1tpftrackIds_, l1tpftrackRefs_); + const unsigned int nL1TPFTracks(l1tpftrackIds_.size()); + if (nL1TPFTracks > 0) { + LogVerbatim("HLTEventAnalyzerRAW") << " L1TPFTracks: " << nL1TPFTracks << " - the objects: # id pt" << endl; + for (unsigned int i = 0; i != nL1TPFTracks; ++i) { + LogVerbatim("HLTEventAnalyzerRAW") + << " " << i << " " << l1tpftrackIds_[i] << " " << l1tpftrackRefs_[i]->pt() << endl; + } + } + triggerEventWithRefsHandle_->getObjects(filterIndex, pfjetIds_, pfjetRefs_); const unsigned int nPFJets(pfjetIds_.size()); if (nPFJets > 0) { diff --git a/HLTrigger/HLTcore/plugins/HLTPrescaleExample.cc b/HLTrigger/HLTcore/plugins/HLTPrescaleExample.cc new file mode 100644 index 0000000000000..508016066f039 --- /dev/null +++ b/HLTrigger/HLTcore/plugins/HLTPrescaleExample.cc @@ -0,0 +1,71 @@ + +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "HLTrigger/HLTcore/interface/HLTPrescaleProvider.h" +#include + +class HLTPrescaleExample : public edm::one::EDAnalyzer { +public: + HLTPrescaleExample(edm::ParameterSet const& iPSet); + + void beginJob() override {} + void beginRun(edm::Run const& iEvent, edm::EventSetup const&) override; + void analyze(edm::Event const& iEvent, edm::EventSetup const&) override; + void endRun(edm::Run const& iEvent, edm::EventSetup const&) override {} + void endJob() override {} + +private: + HLTPrescaleProvider hltPSProvider_; + std::string hltProcess_; + std::string hltPath_; +}; + +HLTPrescaleExample::HLTPrescaleExample(edm::ParameterSet const& iPSet) + : hltPSProvider_(iPSet.getParameter("hltPSProvCfg"), consumesCollector(), *this), + hltProcess_(iPSet.getParameter("hltProcess")), + hltPath_(iPSet.getParameter("hltPath")) {} + +void HLTPrescaleExample::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) { + bool changed = false; + hltPSProvider_.init(iRun, iSetup, hltProcess_, changed); +} + +void HLTPrescaleExample::analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup) { + auto hltPSDouble = hltPSProvider_.prescaleValue(iEvent, iSetup, hltPath_); + auto hltPSInt = hltPSProvider_.prescaleValue(iEvent, iSetup, hltPath_); + auto hltPSUInt = hltPSProvider_.prescaleValue(iEvent, iSetup, hltPath_); + auto hltPSFrac = hltPSProvider_.prescaleValue(iEvent, iSetup, hltPath_); + + auto l1HLTPSDouble = hltPSProvider_.prescaleValues(iEvent, iSetup, hltPath_); + auto l1HLTPSInt = hltPSProvider_.prescaleValues(iEvent, iSetup, hltPath_); + auto l1HLTPSFrac = hltPSProvider_.prescaleValues(iEvent, iSetup, hltPath_); + auto l1HLTPSDoubleFrac = hltPSProvider_.prescaleValues(iEvent, iSetup, hltPath_); + + auto l1HLTDetailPSDouble = hltPSProvider_.prescaleValuesInDetail(iEvent, iSetup, hltPath_); + auto l1HLTDetailPSInt = hltPSProvider_.prescaleValuesInDetail(iEvent, iSetup, hltPath_); + auto l1HLTDetailPSFrac = hltPSProvider_.prescaleValuesInDetail(iEvent, iSetup, hltPath_); + + std::cout << "---------Begin Event--------" << std::endl; + std::cout << "hltDouble " << hltPSDouble << " hltInt " << hltPSInt << " hltPSUInt " << hltPSUInt << " hltFrac " + << hltPSFrac << std::endl; + + std::cout << " l1HLTDouble " << l1HLTPSDouble.first << " " << l1HLTPSDouble.second << " l1HLTInt " << l1HLTPSInt.first + << " " << l1HLTPSInt.second << " l1HLTFrac " << l1HLTPSFrac.first << " " << l1HLTPSFrac.second + << " l1HLTDoubleFrac " << l1HLTPSDoubleFrac.first << " " << l1HLTPSDoubleFrac.second << std::endl; + auto printL1HLTDetail = [](const std::string& text, const auto& val, std::ostream& out) { + out << text; + for (const auto& entry : val.first) { + out << entry.first << ":" << entry.second << " "; + } + out << " HLT : " << val.second << std::endl; + }; + + printL1HLTDetail("l1HLTDetailDouble ", l1HLTDetailPSDouble, std::cout); + printL1HLTDetail("l1HLTDetailInt ", l1HLTDetailPSInt, std::cout); + printL1HLTDetail("l1HLTDetailFrac ", l1HLTDetailPSFrac, std::cout); + std::cout << "---------End Event--------" << std::endl << std::endl; +} + +DEFINE_FWK_MODULE(HLTPrescaleExample); diff --git a/HLTrigger/HLTcore/plugins/TriggerSummaryAnalyzerRAW.cc b/HLTrigger/HLTcore/plugins/TriggerSummaryAnalyzerRAW.cc index 49082056b78e9..d66a7a87cc8c0 100644 --- a/HLTrigger/HLTcore/plugins/TriggerSummaryAnalyzerRAW.cc +++ b/HLTrigger/HLTcore/plugins/TriggerSummaryAnalyzerRAW.cc @@ -157,6 +157,35 @@ void TriggerSummaryAnalyzerRAW::analyze(edm::StreamID, const edm::Event& iEvent, if (nL1TEtSum > 0) LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TEtSum: " << nL1TEtSum; + /* Phase-2 */ + const unsigned int nL1TTkMuon(handle->l1ttkmuonSlice(iFO).second - handle->l1ttkmuonSlice(iFO).first); + if (nL1TTkMuon > 0) + LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TTkMuon: " << nL1TTkMuon; + + const unsigned int nL1TTkEle(handle->l1ttkeleSlice(iFO).second - handle->l1ttkeleSlice(iFO).first); + if (nL1TTkEle > 0) + LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TTkEle: " << nL1TTkEle; + + const unsigned int nL1TTkEm(handle->l1ttkemSlice(iFO).second - handle->l1ttkemSlice(iFO).first); + if (nL1TTkEm > 0) + LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TTkEm: " << nL1TTkEm; + + const unsigned int nL1TPFJet(handle->l1tpfjetSlice(iFO).second - handle->l1tpfjetSlice(iFO).first); + if (nL1TPFJet > 0) + LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TPFJet: " << nL1TPFJet; + + const unsigned int nL1TPFTau(handle->l1tpftauSlice(iFO).second - handle->l1tpftauSlice(iFO).first); + if (nL1TPFTau > 0) + LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TPFTau: " << nL1TPFTau; + + const unsigned int nL1THPSPFTau(handle->l1thpspftauSlice(iFO).second - handle->l1thpspftauSlice(iFO).first); + if (nL1THPSPFTau > 0) + LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1THPSPFTau: " << nL1THPSPFTau; + + const unsigned int nL1TPFTrack(handle->l1tpftrackSlice(iFO).second - handle->l1tpftrackSlice(iFO).first); + if (nL1TPFTrack > 0) + LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TPFTrack: " << nL1TPFTrack; + LogVerbatim("TriggerSummaryAnalyzerRAW") << endl; } LogVerbatim("TriggerSummaryAnalyzerRAW") << "Elements in linearised collections of Refs: " << endl; @@ -181,6 +210,15 @@ void TriggerSummaryAnalyzerRAW::analyze(edm::StreamID, const edm::Event& iEvent, LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TJet: " << handle->l1tjetSize() << endl; LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TTau: " << handle->l1ttauSize() << endl; LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TEtSum: " << handle->l1tetsumSize() << endl; + /* Phase-2 */ + LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TTkMuon: " << handle->l1ttkmuonSize() << endl; + LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TTkEle: " << handle->l1ttkeleSize() << endl; + LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TTkEm: " << handle->l1ttkemSize() << endl; + LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TPFJet: " << handle->l1tpfjetSize() << endl; + LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TPFTau: " << handle->l1tpftauSize() << endl; + LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1THPSPFTau: " << handle->l1thpspftauSize() << endl; + LogVerbatim("TriggerSummaryAnalyzerRAW") << " L1TPFTrack: " << handle->l1tpftrackSize() << endl; + } else { LogVerbatim("TriggerSummaryAnalyzerRAW") << "Handle invalid! Check InputTag provided." << endl; } diff --git a/HLTrigger/HLTcore/plugins/TriggerSummaryProducerAOD.cc b/HLTrigger/HLTcore/plugins/TriggerSummaryProducerAOD.cc index 3a54096850177..275bfec719165 100644 --- a/HLTrigger/HLTcore/plugins/TriggerSummaryProducerAOD.cc +++ b/HLTrigger/HLTcore/plugins/TriggerSummaryProducerAOD.cc @@ -47,6 +47,15 @@ #include "DataFormats/L1Trigger/interface/Tau.h" #include "DataFormats/L1Trigger/interface/EtSum.h" +#include "DataFormats/L1TCorrelator/interface/TkMuon.h" +#include "DataFormats/L1TCorrelator/interface/TkElectron.h" +#include "DataFormats/L1TCorrelator/interface/TkEm.h" +#include "DataFormats/L1TParticleFlow/interface/PFJet.h" +#include "DataFormats/L1TParticleFlow/interface/PFTau.h" +#include "DataFormats/L1TParticleFlow/interface/HPSPFTau.h" +#include "DataFormats/L1TParticleFlow/interface/HPSPFTauFwd.h" +#include "DataFormats/L1TParticleFlow/interface/PFTrack.h" + #include "DataFormats/JetReco/interface/PFJet.h" #include "DataFormats/TauReco/interface/PFTau.h" @@ -135,6 +144,15 @@ TriggerSummaryProducerAOD::TriggerSummaryProducerAOD(const edm::ParameterSet& ps getL1TJetParticleCollection_ = edm::GetterOfProducts(productMatch, this); getL1TTauParticleCollection_ = edm::GetterOfProducts(productMatch, this); getL1TEtSumParticleCollection_ = edm::GetterOfProducts(productMatch, this); + + getL1TTkMuonCollection_ = edm::GetterOfProducts(productMatch, this); + getL1TTkElectronCollection_ = edm::GetterOfProducts(productMatch, this); + getL1TTkEmCollection_ = edm::GetterOfProducts(productMatch, this); + getL1TPFJetCollection_ = edm::GetterOfProducts(productMatch, this); + getL1TPFTauCollection_ = edm::GetterOfProducts(productMatch, this); + getL1THPSPFTauCollection_ = edm::GetterOfProducts(productMatch, this); + getL1TPFTrackCollection_ = edm::GetterOfProducts(productMatch, this); + getPFJetCollection_ = edm::GetterOfProducts(productMatch, this); getPFTauCollection_ = edm::GetterOfProducts(productMatch, this); getPFMETCollection_ = edm::GetterOfProducts(productMatch, this); @@ -159,6 +177,13 @@ TriggerSummaryProducerAOD::TriggerSummaryProducerAOD(const edm::ParameterSet& ps getL1TJetParticleCollection_(bd); getL1TTauParticleCollection_(bd); getL1TEtSumParticleCollection_(bd); + getL1TTkMuonCollection_(bd); + getL1TTkElectronCollection_(bd); + getL1TTkEmCollection_(bd); + getL1TPFJetCollection_(bd); + getL1TPFTauCollection_(bd); + getL1THPSPFTauCollection_(bd); + getL1TPFTrackCollection_(bd); getPFJetCollection_(bd); getPFTauCollection_(bd); getPFMETCollection_(bd); @@ -333,11 +358,26 @@ void TriggerSummaryProducerAOD::produce(edm::StreamID, edm::Event& iEvent, const fillTriggerObjectCollections( toc, offset, tags, keys, iEvent, getL1TEtSumParticleCollection_, collectionTagsEvent); /// - fillTriggerObjectCollections( + fillTriggerObjectCollections( + toc, offset, tags, keys, iEvent, getL1TTkMuonCollection_, collectionTagsEvent); + fillTriggerObjectCollections( + toc, offset, tags, keys, iEvent, getL1TTkElectronCollection_, collectionTagsEvent); + fillTriggerObjectCollections( + toc, offset, tags, keys, iEvent, getL1TTkEmCollection_, collectionTagsEvent); + fillTriggerObjectCollections( + toc, offset, tags, keys, iEvent, getL1TPFJetCollection_, collectionTagsEvent); + fillTriggerObjectCollections( + toc, offset, tags, keys, iEvent, getL1TPFTauCollection_, collectionTagsEvent); + fillTriggerObjectCollections( + toc, offset, tags, keys, iEvent, getL1THPSPFTauCollection_, collectionTagsEvent); + fillTriggerObjectCollections( + toc, offset, tags, keys, iEvent, getL1TPFTrackCollection_, collectionTagsEvent); + /// + fillTriggerObjectCollections( toc, offset, tags, keys, iEvent, getPFJetCollection_, collectionTagsEvent); - fillTriggerObjectCollections( + fillTriggerObjectCollections( toc, offset, tags, keys, iEvent, getPFTauCollection_, collectionTagsEvent); - fillTriggerObjectCollections( + fillTriggerObjectCollections( toc, offset, tags, keys, iEvent, getPFMETCollection_, collectionTagsEvent); /// const unsigned int nk(tags.size()); @@ -391,6 +431,22 @@ void TriggerSummaryProducerAOD::produce(edm::StreamID, edm::Event& iEvent, const fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1ttauIds(), fobs[ifob]->l1ttauRefs(), offset, keys, ids); fillFilterObjectMembers( iEvent, filterTag, fobs[ifob]->l1tetsumIds(), fobs[ifob]->l1tetsumRefs(), offset, keys, ids); + /**/ + fillFilterObjectMembers( + iEvent, filterTag, fobs[ifob]->l1ttkmuonIds(), fobs[ifob]->l1ttkmuonRefs(), offset, keys, ids); + fillFilterObjectMembers( + iEvent, filterTag, fobs[ifob]->l1ttkeleIds(), fobs[ifob]->l1ttkeleRefs(), offset, keys, ids); + fillFilterObjectMembers( + iEvent, filterTag, fobs[ifob]->l1ttkemIds(), fobs[ifob]->l1ttkemRefs(), offset, keys, ids); + fillFilterObjectMembers( + iEvent, filterTag, fobs[ifob]->l1tpfjetIds(), fobs[ifob]->l1tpfjetRefs(), offset, keys, ids); + fillFilterObjectMembers( + iEvent, filterTag, fobs[ifob]->l1tpftauIds(), fobs[ifob]->l1tpftauRefs(), offset, keys, ids); + fillFilterObjectMembers( + iEvent, filterTag, fobs[ifob]->l1thpspftauIds(), fobs[ifob]->l1thpspftauRefs(), offset, keys, ids); + fillFilterObjectMembers( + iEvent, filterTag, fobs[ifob]->l1tpftrackIds(), fobs[ifob]->l1tpftrackRefs(), offset, keys, ids); + /**/ fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->pfjetIds(), fobs[ifob]->pfjetRefs(), offset, keys, ids); fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->pftauIds(), fobs[ifob]->pftauRefs(), offset, keys, ids); fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->pfmetIds(), fobs[ifob]->pfmetRefs(), offset, keys, ids); @@ -572,9 +628,10 @@ void TriggerSummaryProducerAOD::fillFilterObjectMembers(const edm::Event& iEvent } else { auto itOffset = offset.find(pid); if (itOffset == offset.end()) { - const string& label(iEvent.getProvenance(pid).moduleLabel()); - const string& instance(iEvent.getProvenance(pid).productInstanceName()); - const string& process(iEvent.getProvenance(pid).processName()); + const auto& prov = iEvent.getStableProvenance(pid); + const string& label(prov.moduleLabel()); + const string& instance(prov.productInstanceName()); + const string& process(prov.processName()); std::ostringstream ost; ost << "Uunknown pid: " << pid << " FilterTag / Key: " << tag.encode() << " / " << i << "of" << n << " CollectionTag / Key: " << InputTag(label, instance, process).encode() << " / " << refs[i].key() diff --git a/HLTrigger/HLTcore/plugins/TriggerSummaryProducerRAW.cc b/HLTrigger/HLTcore/plugins/TriggerSummaryProducerRAW.cc index 228d2fb44239a..166f36af6183f 100644 --- a/HLTrigger/HLTcore/plugins/TriggerSummaryProducerRAW.cc +++ b/HLTrigger/HLTcore/plugins/TriggerSummaryProducerRAW.cc @@ -89,7 +89,9 @@ void TriggerSummaryProducerRAW::produce(edm::StreamID, edm::Event& iEvent, const << fobs[ifob]->l1hfringsSize() << " E/" << fobs[ifob]->pfjetSize() << " F/" << fobs[ifob]->pftauSize() << " G/" << fobs[ifob]->pfmetSize() << " I/" << fobs[ifob]->l1tmuonSize() << " J/" << fobs[ifob]->l1tegammaSize() << " K/" << fobs[ifob]->l1tjetSize() << " L/" << fobs[ifob]->l1ttauSize() << " M/" << fobs[ifob]->l1tetsumSize() - << endl; + << " N/" << fobs[ifob]->l1ttkmuonSize() << " O/" << fobs[ifob]->l1ttkeleSize() << " P/" + << fobs[ifob]->l1ttkemSize() << " Q/" << fobs[ifob]->l1tpfjetSize() << " R/" << fobs[ifob]->l1tpftauSize() + << " S/" << fobs[ifob]->l1thpspftauSize() << " T/" << fobs[ifob]->l1tpftrackSize() << endl; LogTrace("TriggerSummaryProducerRaw") << "TriggerSummaryProducerRaw::addFilterObjects( )" << "\n fobs[ifob]->l1tmuonIds().size() = " << fobs[ifob]->l1tmuonIds().size() diff --git a/HLTrigger/HLTcore/src/HLTPrescaleProvider.cc b/HLTrigger/HLTcore/src/HLTPrescaleProvider.cc index 823beef010d01..176bb1b1d0ceb 100644 --- a/HLTrigger/HLTcore/src/HLTPrescaleProvider.cc +++ b/HLTrigger/HLTcore/src/HLTPrescaleProvider.cc @@ -102,46 +102,39 @@ int HLTPrescaleProvider::prescaleSet(const edm::Event& iEvent, const edm::EventS } } -unsigned int HLTPrescaleProvider::prescaleValue(const edm::Event& iEvent, - const edm::EventSetup& iSetup, - const std::string& trigger) { - const int set(prescaleSet(iEvent, iSetup)); - if (set < 0) { - return 1; - } else { - return hltConfigProvider_.prescaleValue(static_cast(set), trigger); +template <> +FractionalPrescale HLTPrescaleProvider::convertL1PS(double val) const { + int numer = static_cast(val * kL1PrescaleDenominator_ + 0.5); + static constexpr double kL1RoundingEpsilon = 0.001; + if (std::abs(numer - val * kL1PrescaleDenominator_) > kL1RoundingEpsilon) { + edm::LogWarning("ValueError") << " Error, L1 prescale val " << val + << "does not appear to precisely expressable as int / " << kL1PrescaleDenominator_ + << ", using a FractionalPrescale is a loss of precision"; } -} -std::pair HLTPrescaleProvider::prescaleValues(const edm::Event& iEvent, - const edm::EventSetup& iSetup, - const std::string& trigger) { - // start with setting both L1T and HLT prescale values to 0 - std::pair result(std::pair(0, 0)); - - // get HLT prescale (possible if HLT prescale set index is correctly found) - const int set(prescaleSet(iEvent, iSetup)); - if (set < 0) { - result.second = -1; - } else { - result.second = static_cast(hltConfigProvider_.prescaleValue(static_cast(set), trigger)); - } + return {numer, kL1PrescaleDenominator_}; +} +double HLTPrescaleProvider::getL1PrescaleValue(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + const std::string& trigger) { // get L1T prescale - works only for those hlt trigger paths with // exactly one L1GT seed module which has exactly one L1T name as seed + double result = -1; + const unsigned int l1tType(hltConfigProvider_.l1tType()); if (l1tType == 1) { checkL1GtUtils(); const unsigned int nL1GTSeedModules(hltConfigProvider_.hltL1GTSeeds(trigger).size()); if (nL1GTSeedModules == 0) { // no L1 seed module on path hence no L1 seed hence formally no L1 prescale - result.first = 1; + result = 1; } else if (nL1GTSeedModules == 1) { l1GtUtils_->getL1GtRunCache(iEvent, iSetup, useL1EventSetup, useL1GtTriggerMenuLite); const std::string l1tname(hltConfigProvider_.hltL1GTSeeds(trigger).at(0).second); int l1error(0); - result.first = l1GtUtils_->prescaleFactor(iEvent, l1tname, l1error); + result = l1GtUtils_->prescaleFactor(iEvent, l1tname, l1error); if (l1error != 0) { if (count_[1] < countMax) { count_[1] += 1; @@ -154,7 +147,7 @@ std::pair HLTPrescaleProvider::prescaleValues(const edm::Event& iEvent << " For seeds being complex logical expressions, try the new method 'prescaleValuesInDetail'." << std::endl; } - result.first = -1; + result = -1; } } else { /// error - can't handle properly multiple L1GTSeed modules @@ -169,18 +162,18 @@ std::pair HLTPrescaleProvider::prescaleValues(const edm::Event& iEvent << nL1GTSeedModules << ", with L1 seeds: " << dump << ". (Note: at most one L1GTSeed module is allowed for a proper determination of the L1T prescale!)"; } - result.first = -1; + result = -1; } } else if (l1tType == 2) { checkL1TGlobalUtil(); const unsigned int nL1TSeedModules(hltConfigProvider_.hltL1TSeeds(trigger).size()); if (nL1TSeedModules == 0) { // no L1 seed module on path hence no L1 seed hence formally no L1 prescale - result.first = 1; + result = 1; } else if (nL1TSeedModules == 1) { // l1tGlobalUtil_->retrieveL1Event(iEvent,iSetup); const std::string l1tname(hltConfigProvider_.hltL1TSeeds(trigger).at(0)); - bool l1error(!l1tGlobalUtil_->getPrescaleByName(l1tname, result.first)); + bool l1error(!l1tGlobalUtil_->getPrescaleByName(l1tname, result)); if (l1error) { if (count_[1] < countMax) { count_[1] += 1; @@ -193,7 +186,7 @@ std::pair HLTPrescaleProvider::prescaleValues(const edm::Event& iEvent << " For seeds being complex logical expressions, try the new method 'prescaleValuesInDetail'." << std::endl; } - result.first = -1; + result = -1; } } else { /// error - can't handle properly multiple L1TSeed modules @@ -208,34 +201,22 @@ std::pair HLTPrescaleProvider::prescaleValues(const edm::Event& iEvent << nL1TSeedModules << ", with L1T seeds: " << dump << ". (Note: at most one L1TSeed module is allowed for a proper determination of the L1T prescale!)"; } - result.first = -1; + result = -1; } } else { if (count_[1] < countMax) { count_[1] += 1; edm::LogError("HLTPrescaleProvider") << " Unknown L1T Type " << l1tType << " - can not determine L1T prescale! "; } - result.first = -1; + result = -1; } return result; } -std::pair >, int> HLTPrescaleProvider::prescaleValuesInDetail( +std::vector > HLTPrescaleProvider::getL1PrescaleValueInDetail( const edm::Event& iEvent, const edm::EventSetup& iSetup, const std::string& trigger) { - std::pair >, int> result; - result.first.clear(); - - // get HLT prescale (possible if HLT prescale set index is correctly found) - const int set(prescaleSet(iEvent, iSetup)); - if (set < 0) { - result.second = -1; - } else { - result.second = static_cast(hltConfigProvider_.prescaleValue(static_cast(set), trigger)); - } - - // get L1T prescale - works only for those hlt trigger paths with - // exactly one L1GT seed module + std::vector > result; const unsigned int l1tType(hltConfigProvider_.l1tType()); if (l1tType == 1) { @@ -244,14 +225,19 @@ std::pair >, int> HLTPrescaleProvider::p const unsigned int nL1GTSeedModules(hltConfigProvider_.hltL1GTSeeds(trigger).size()); if (nL1GTSeedModules == 0) { // no L1 seed module on path hence no L1 seed hence formally no L1 prescale - result.first.clear(); + result.clear(); } else if (nL1GTSeedModules == 1) { l1GtUtils_->getL1GtRunCache(iEvent, iSetup, useL1EventSetup, useL1GtTriggerMenuLite); const std::string l1tname(hltConfigProvider_.hltL1GTSeeds(trigger).at(0).second); L1GtUtils::LogicalExpressionL1Results l1Logical(l1tname, *l1GtUtils_); l1Logical.logicalExpressionRunUpdate(iEvent.getRun(), iSetup, l1tname); const std::vector >& errorCodes(l1Logical.errorCodes(iEvent)); - result.first = l1Logical.prescaleFactors(); + auto resultInt = l1Logical.prescaleFactors(); + result.clear(); + for (const auto& entry : resultInt) { + result.push_back(entry); + } + int l1error(l1Logical.isValid() ? 0 : 1); for (auto const& errorCode : errorCodes) { l1error += std::abs(errorCode.second); @@ -264,13 +250,12 @@ std::pair >, int> HLTPrescaleProvider::p << l1tname << "' using L1GtUtils: " << std::endl << " isValid=" << l1Logical.isValid() << " l1tname/error/prescale " << errorCodes.size() << std::endl; for (unsigned int i = 0; i < errorCodes.size(); ++i) { - message << " " << i << ":" << errorCodes[i].first << "/" << errorCodes[i].second << "/" - << result.first[i].second; + message << " " << i << ":" << errorCodes[i].first << "/" << errorCodes[i].second << "/" << result[i].second; } message << "."; edm::LogError("HLTPrescaleProvider") << message.str(); } - result.first.clear(); + result.clear(); } } else { /// error - can't handle properly multiple L1GTSeed modules @@ -285,27 +270,27 @@ std::pair >, int> HLTPrescaleProvider::p << nL1GTSeedModules << ", with L1 seeds: " << dump << ". (Note: at most one L1GTSeed module is allowed for a proper determination of the L1T prescale!)"; } - result.first.clear(); + result.clear(); } } else if (l1tType == 2) { checkL1TGlobalUtil(); const unsigned int nL1TSeedModules(hltConfigProvider_.hltL1TSeeds(trigger).size()); if (nL1TSeedModules == 0) { // no L1 seed module on path hence no L1 seed hence formally no L1 prescale - result.first.clear(); + result.clear(); } else if (nL1TSeedModules == 1) { // l1tGlobalUtil_->retrieveL1Event(iEvent,iSetup); std::string l1tname(hltConfigProvider_.hltL1TSeeds(trigger).at(0)); GlobalLogicParser l1tGlobalLogicParser = GlobalLogicParser(l1tname); const std::vector l1tSeeds = l1tGlobalLogicParser.expressionSeedsOperandList(); int l1error(0); - int l1tPrescale(-1); + double l1tPrescale(-1); for (auto const& i : l1tSeeds) { const string& l1tSeed = i.tokenName; if (!l1tGlobalUtil_->getPrescaleByName(l1tSeed, l1tPrescale)) { l1error += 1; } - result.first.push_back(std::pair(l1tSeed, l1tPrescale)); + result.push_back(std::pair(l1tSeed, l1tPrescale)); } if (l1error != 0) { if (count_[3] < countMax) { @@ -319,12 +304,12 @@ std::pair >, int> HLTPrescaleProvider::p for (unsigned int i = 0; i < l1tSeeds.size(); ++i) { const string& l1tSeed = l1tSeeds[i].tokenName; message << " " << i << ":" << l1tSeed << "/" << l1tGlobalUtil_->getPrescaleByName(l1tSeed, l1tPrescale) - << "/" << result.first[i].second; + << "/" << result[i].second; } message << "."; edm::LogError("HLTPrescaleProvider") << message.str(); } - result.first.clear(); + result.clear(); } } else { /// error - can't handle properly multiple L1TSeed modules @@ -339,14 +324,14 @@ std::pair >, int> HLTPrescaleProvider::p << nL1TSeedModules << ", with L1T seeds: " << dump << ". (Note: at most one L1TSeed module is allowed for a proper determination of the L1T prescale!)"; } - result.first.clear(); + result.clear(); } } else { if (count_[3] < countMax) { count_[3] += 1; edm::LogError("HLTPrescaleProvider") << " Unknown L1T Type " << l1tType << " - can not determine L1T prescale! "; } - result.first.clear(); + result.clear(); } return result; @@ -375,3 +360,11 @@ void HLTPrescaleProvider::checkL1TGlobalUtil() const { "or input is from mixed eras"; } } + +template <> +unsigned int HLTPrescaleProvider::prescaleValue(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + const std::string& trigger) { + const int set(prescaleSet(iEvent, iSetup)); + return set < 0 ? 1 : hltConfigProvider_.prescaleValue(static_cast(set), trigger); +} diff --git a/HLTrigger/HLTcore/test/getHLTPrescaleTable.py b/HLTrigger/HLTcore/test/getHLTPrescaleTable.py index 3fc4cc449fe64..bda04ca94b9a3 100644 --- a/HLTrigger/HLTcore/test/getHLTPrescaleTable.py +++ b/HLTrigger/HLTcore/test/getHLTPrescaleTable.py @@ -3,7 +3,7 @@ process = cms.Process("PUT") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append('HLTPrescaleRecorder') +process.MessageLogger.HLTPrescaleRecorder=dict() process.source = cms.Source("EmptySource", firstRun = cms.untracked.uint32(1) diff --git a/HLTrigger/HLTcore/test/hltPrescaleExample_cfg.py b/HLTrigger/HLTcore/test/hltPrescaleExample_cfg.py new file mode 100644 index 0000000000000..7ef175aaac1c4 --- /dev/null +++ b/HLTrigger/HLTcore/test/hltPrescaleExample_cfg.py @@ -0,0 +1,54 @@ + +import FWCore.ParameterSet.Config as cms +process = cms.Process("HLTPSCheck") + +import FWCore.ParameterSet.VarParsing as VarParsing +options = VarParsing.VarParsing ('analysis') +options.register('globalTag','auto:run2_data',options.multiplicity.singleton,options.varType.string,"global tag to use") +options.parseArguments() + +print options.inputFiles +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring(options.inputFiles), + ) + +# initialize MessageLogger and output report +process.load("FWCore.MessageLogger.MessageLogger_cfi") +process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( + reportEvery = cms.untracked.int32(5000), + limit = cms.untracked.int32(10000000) +) + +process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(False) ) + + +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, options.globalTag, '') + + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(options.maxEvents) +) + + +process.hltPSExample = cms.EDAnalyzer("HLTPrescaleExample", + hltProcess=cms.string("HLT"), +# hltPath=cms.string("HLT_Photon50_v13"), + hltPath=cms.string("HLT_Photon33_v5"), + hltPSProvCfg=cms.PSet( + stageL1Trigger = cms.uint32(2) + ) + ) + + +process.p = cms.Path( + process.hltPSExample +) + + + +print "global tag: ",process.GlobalTag.globaltag + + + diff --git a/HLTrigger/HLTcore/test/putHLTPrescaleTable.py b/HLTrigger/HLTcore/test/putHLTPrescaleTable.py index 33ee12872384b..055aaac625264 100644 --- a/HLTrigger/HLTcore/test/putHLTPrescaleTable.py +++ b/HLTrigger/HLTcore/test/putHLTPrescaleTable.py @@ -3,7 +3,7 @@ process = cms.Process("PUT") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append('HLTPrescaleRecorder') +process.MessageLogger.HLTPrescaleRecorder=dict() process.source = cms.Source("EmptySource", firstRun = cms.untracked.uint32(1) diff --git a/HLTrigger/HLTfilters/plugins/BuildFile.xml b/HLTrigger/HLTfilters/plugins/BuildFile.xml index 261f1dfd066cd..0fa5752dc1a6c 100644 --- a/HLTrigger/HLTfilters/plugins/BuildFile.xml +++ b/HLTrigger/HLTfilters/plugins/BuildFile.xml @@ -19,4 +19,5 @@ + diff --git a/HLTrigger/HLTfilters/plugins/HLT2L1TkMuonL1TkMuonMuRefDR.cc b/HLTrigger/HLTfilters/plugins/HLT2L1TkMuonL1TkMuonMuRefDR.cc new file mode 100644 index 0000000000000..2362d615495bc --- /dev/null +++ b/HLTrigger/HLTfilters/plugins/HLT2L1TkMuonL1TkMuonMuRefDR.cc @@ -0,0 +1,174 @@ +#include + +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" +#include "DataFormats/L1TCorrelator/interface/TkMuon.h" +#include "DataFormats/L1TCorrelator/interface/TkMuonFwd.h" +#include "DataFormats/Math/interface/deltaR.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "HLTrigger/HLTcore/interface/defaultModuleLabel.h" +#include "L1Trigger/L1TMuon/interface/MicroGMTConfiguration.h" + +#include "HLT2L1TkMuonL1TkMuonMuRefDR.h" + +// +// constructors and destructor +// +HLT2L1TkMuonL1TkMuonMuRefDR::HLT2L1TkMuonL1TkMuonMuRefDR(const edm::ParameterSet& iConfig) + : HLTFilter(iConfig), + originTag1_(iConfig.getParameter>("originTag1")), + originTag2_(iConfig.getParameter>("originTag2")), + inputTag1_(iConfig.getParameter("inputTag1")), + inputTag2_(iConfig.getParameter("inputTag2")), + inputToken1_(consumes(inputTag1_)), + inputToken2_(consumes(inputTag2_)), + minDR_(iConfig.getParameter("MinDR")), + min_N_(iConfig.getParameter("MinN")), + same_(inputTag1_.encode() == inputTag2_.encode()) {} // same collections to be compared? + +HLT2L1TkMuonL1TkMuonMuRefDR::~HLT2L1TkMuonL1TkMuonMuRefDR() {} + +void HLT2L1TkMuonL1TkMuonMuRefDR::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + makeHLTFilterDescription(desc); + std::vector originTag1(1, edm::InputTag("hltOriginal1")); + std::vector originTag2(1, edm::InputTag("hltOriginal2")); + desc.add>("originTag1", originTag1); + desc.add>("originTag2", originTag2); + desc.add("inputTag1", edm::InputTag("hltFiltered1")); + desc.add("inputTag2", edm::InputTag("hltFiltered2")); + desc.add("MinDR", -1.0); + desc.add("MinN", 1); + + descriptions.add("hlt2L1TkMuonL1TkMuonMuRefDR", desc); +} + +bool HLT2L1TkMuonL1TkMuonMuRefDR::getCollections(edm::Event& iEvent, + std::vector& coll1, + std::vector& coll2, + trigger::TriggerFilterObjectWithRefs& filterproduct) const { + edm::Handle handle1, handle2; + if (iEvent.getByToken(inputToken1_, handle1) and iEvent.getByToken(inputToken2_, handle2)) { + // get hold of pre-filtered object collections + handle1->getObjects(trigger::TriggerObjectType::TriggerL1TkMu, coll1); + handle2->getObjects(trigger::TriggerObjectType::TriggerL1TkMu, coll2); + const trigger::size_type n1(coll1.size()); + const trigger::size_type n2(coll2.size()); + + if (saveTags()) { + edm::InputTag tagOld; + for (unsigned int i = 0; i < originTag1_.size(); ++i) { + filterproduct.addCollectionTag(originTag1_[i]); + } + tagOld = edm::InputTag(); + for (trigger::size_type i1 = 0; i1 != n1; ++i1) { + const edm::ProductID pid(coll1[i1].id()); + const std::string& label(iEvent.getProvenance(pid).moduleLabel()); + const std::string& instance(iEvent.getProvenance(pid).productInstanceName()); + const std::string& process(iEvent.getProvenance(pid).processName()); + edm::InputTag tagNew(edm::InputTag(label, instance, process)); + if (tagOld.encode() != tagNew.encode()) { + filterproduct.addCollectionTag(tagNew); + tagOld = tagNew; + } + } + for (unsigned int i = 0; i < originTag2_.size(); ++i) { + filterproduct.addCollectionTag(originTag2_[i]); + } + tagOld = edm::InputTag(); + for (trigger::size_type i2 = 0; i2 != n2; ++i2) { + const edm::ProductID pid(coll2[i2].id()); + const std::string& label(iEvent.getProvenance(pid).moduleLabel()); + const std::string& instance(iEvent.getProvenance(pid).productInstanceName()); + const std::string& process(iEvent.getProvenance(pid).processName()); + edm::InputTag tagNew(edm::InputTag(label, instance, process)); + if (tagOld.encode() != tagNew.encode()) { + filterproduct.addCollectionTag(tagNew); + tagOld = tagNew; + } + } + } + + return true; + } else + return false; +} + +std::pair HLT2L1TkMuonL1TkMuonMuRefDR::convertEtaPhi(l1t::TkMuonRef& tkmu) const { + float muRefEta = 0.; + float muRefPhi = 0.; + + if (tkmu->muonDetector() != emtfRegion_) { + if (tkmu->muRef().isNull()) + return std::make_pair(muRefEta, muRefPhi); + + muRefEta = tkmu->muRef()->hwEta() * etaScale_; + muRefPhi = static_cast(l1t::MicroGMTConfiguration::calcGlobalPhi( + tkmu->muRef()->hwPhi(), tkmu->muRef()->trackFinderType(), tkmu->muRef()->processor())); + muRefPhi = muRefPhi * phiScale_; + } else { + if (tkmu->emtfTrk().isNull()) + return std::make_pair(muRefEta, muRefPhi); + + muRefEta = tkmu->emtfTrk()->Eta(); + muRefPhi = angle_units::operators::convertDegToRad(tkmu->emtfTrk()->Phi_glob()); + } + muRefPhi = reco::reduceRange(muRefPhi); + + return std::make_pair(muRefEta, muRefPhi); +} + +bool HLT2L1TkMuonL1TkMuonMuRefDR::computeDR(edm::Event& iEvent, l1t::TkMuonRef& r1, l1t::TkMuonRef& r2) const { + if (minDR_ < 0.) + return true; + + auto [eta1, phi1] = convertEtaPhi(r1); + auto [eta2, phi2] = convertEtaPhi(r2); + return (reco::deltaR2(eta1, phi1, eta2, phi2) > minDR_ * minDR_); +} + +// ------------ method called to produce the data ------------ +bool HLT2L1TkMuonL1TkMuonMuRefDR::hltFilter(edm::Event& iEvent, + const edm::EventSetup& iSetup, + trigger::TriggerFilterObjectWithRefs& filterproduct) const { + // All HLT filters must create and fill an HLT filter object, + // recording any reconstructed physics objects satisfying (or not) + // this HLT filter, and place it in the Event. + bool accept(false); + + std::vector coll1; + std::vector coll2; + + if (getCollections(iEvent, coll1, coll2, filterproduct)) { + int n(0); + l1t::TkMuonRef r1; + l1t::TkMuonRef r2; + + for (unsigned int i1 = 0; i1 != coll1.size(); i1++) { + r1 = coll1[i1]; + unsigned int I(0); + if (same_) { + I = i1 + 1; + } + for (unsigned int i2 = I; i2 != coll2.size(); i2++) { + r2 = coll2[i2]; + + if (!computeDR(iEvent, r1, r2)) + continue; + + n++; + filterproduct.addObject(trigger::TriggerObjectType::TriggerL1TkMu, r1); + filterproduct.addObject(trigger::TriggerObjectType::TriggerL1TkMu, r2); + } + } + + accept = accept || (n >= min_N_); + } + + return accept; +} + +DEFINE_FWK_MODULE(HLT2L1TkMuonL1TkMuonMuRefDR); diff --git a/HLTrigger/HLTfilters/plugins/HLT2L1TkMuonL1TkMuonMuRefDR.h b/HLTrigger/HLTfilters/plugins/HLT2L1TkMuonL1TkMuonMuRefDR.h new file mode 100644 index 0000000000000..3d190919008a7 --- /dev/null +++ b/HLTrigger/HLTfilters/plugins/HLT2L1TkMuonL1TkMuonMuRefDR.h @@ -0,0 +1,56 @@ +#ifndef HLT2L1TkMuonL1TkMuonMuRefDR_h +#define HLT2L1TkMuonL1TkMuonMuRefDR_h + +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" +#include "HLTrigger/HLTcore/interface/HLTFilter.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" + +#include "DataFormats/L1TCorrelator/interface/TkMuon.h" +#include "DataFormats/L1TCorrelator/interface/TkMuonFwd.h" + +#include +#include +namespace trigger { + class TriggerFilterObjectWithRefs; +} + +// +// class declaration +// + +class HLT2L1TkMuonL1TkMuonMuRefDR : public HLTFilter { +public: + explicit HLT2L1TkMuonL1TkMuonMuRefDR(const edm::ParameterSet&); + ~HLT2L1TkMuonL1TkMuonMuRefDR() override; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + bool hltFilter(edm::Event&, + const edm::EventSetup&, + trigger::TriggerFilterObjectWithRefs& filterproduct) const override; + bool getCollections(edm::Event& iEvent, + std::vector& coll1, + std::vector& coll2, + trigger::TriggerFilterObjectWithRefs& filterproduct) const; + bool computeDR(edm::Event& iEvent, l1t::TkMuonRef& c1, l1t::TkMuonRef& c2) const; + std::pair convertEtaPhi(l1t::TkMuonRef& tkmu) const; + +private: + // configuration + const std::vector originTag1_; // input tag identifying originals 1st product + const std::vector originTag2_; // input tag identifying originals 2nd product + const edm::InputTag inputTag1_; // input tag identifying filtered 1st product + const edm::InputTag inputTag2_; // input tag identifying filtered 2nd product + const edm::EDGetTokenT inputToken1_; + const edm::EDGetTokenT inputToken2_; + const double minDR_; // minimum dR between two muon regional candidates linked to L1TkMuon + const int min_N_; // number of pairs passing cuts required + const bool same_; // 1st and 2nd product are one and the same + + // eta and phi scaling for RegionalMuonCand + static constexpr unsigned int emtfRegion_{3}; + static constexpr float etaScale_{0.010875}; + static constexpr float phiScale_{2. * M_PI / 576.}; +}; + +#endif //HLT2L1TkMuonL1TkMuonMuRefDR_h diff --git a/HLTrigger/HLTfilters/plugins/HLTDoublet.cc b/HLTrigger/HLTfilters/plugins/HLTDoublet.cc index a358f0cbd66eb..21493e81f98b4 100644 --- a/HLTrigger/HLTfilters/plugins/HLTDoublet.cc +++ b/HLTrigger/HLTfilters/plugins/HLTDoublet.cc @@ -135,9 +135,10 @@ bool HLTDoublet::hltFilter(edm::Event& iEvent, tagOld = InputTag(); for (size_type i1 = 0; i1 != n1; ++i1) { const ProductID pid(coll1[i1].id()); - const string& label(iEvent.getProvenance(pid).moduleLabel()); - const string& instance(iEvent.getProvenance(pid).productInstanceName()); - const string& process(iEvent.getProvenance(pid).processName()); + const auto& prov = iEvent.getStableProvenance(pid); + const string& label(prov.moduleLabel()); + const string& instance(prov.productInstanceName()); + const string& process(prov.processName()); InputTag tagNew(InputTag(label, instance, process)); if (tagOld.encode() != tagNew.encode()) { filterproduct.addCollectionTag(tagNew); @@ -153,9 +154,10 @@ bool HLTDoublet::hltFilter(edm::Event& iEvent, tagOld = InputTag(); for (size_type i2 = 0; i2 != n2; ++i2) { const ProductID pid(coll2[i2].id()); - const string& label(iEvent.getProvenance(pid).moduleLabel()); - const string& instance(iEvent.getProvenance(pid).productInstanceName()); - const string& process(iEvent.getProvenance(pid).processName()); + const auto& prov = iEvent.getStableProvenance(pid); + const string& label(prov.moduleLabel()); + const string& instance(prov.productInstanceName()); + const string& process(prov.processName()); InputTag tagNew(InputTag(label, instance, process)); if (tagOld.encode() != tagNew.encode()) { filterproduct.addCollectionTag(tagNew); diff --git a/HLTrigger/HLTfilters/plugins/HLTDoubletDZ.cc b/HLTrigger/HLTfilters/plugins/HLTDoubletDZ.cc index c1a5497c59ee5..05f918aa9f8c2 100644 --- a/HLTrigger/HLTfilters/plugins/HLTDoubletDZ.cc +++ b/HLTrigger/HLTfilters/plugins/HLTDoubletDZ.cc @@ -13,6 +13,11 @@ #include "DataFormats/EgammaCandidates/interface/ElectronFwd.h" #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" #include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h" +#include "DataFormats/L1TCorrelator/interface/TkMuon.h" +#include "DataFormats/L1TCorrelator/interface/TkMuonFwd.h" +#include "DataFormats/L1TParticleFlow/interface/PFTau.h" +#include "DataFormats/L1TParticleFlow/interface/HPSPFTau.h" +#include "DataFormats/L1TParticleFlow/interface/HPSPFTauFwd.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -125,6 +130,25 @@ HLTDoubletDZ::HLTDoublet same_(inputTag1_.encode() == inputTag2_.encode()) // same collections to be compared? {} +template <> +HLTDoubletDZ::HLTDoubletDZ(const edm::ParameterSet& iConfig) + : HLTFilter(iConfig), + originTag1_(iConfig.template getParameter>("originTag1")), + originTag2_(iConfig.template getParameter>("originTag2")), + inputTag1_(iConfig.template getParameter("inputTag1")), + inputTag2_(iConfig.template getParameter("inputTag2")), + inputToken1_(consumes(inputTag1_)), + inputToken2_(consumes(inputTag2_)), + triggerType1_(iConfig.template getParameter("triggerType1")), + triggerType2_(iConfig.template getParameter("triggerType2")), + minDR_(iConfig.template getParameter("MinDR")), + maxDZ_(iConfig.template getParameter("MaxDZ")), + minPixHitsForDZ_(iConfig.template getParameter("MinPixHitsForDZ")), + min_N_(iConfig.template getParameter("MinN")), + checkSC_(iConfig.template getParameter("checkSC")), + same_(inputTag1_.encode() == inputTag2_.encode()) // same collections to be compared? +{} + template HLTDoubletDZ::~HLTDoubletDZ() {} @@ -258,9 +282,10 @@ HLTDoubletDZ::getCollections(edm::Event& iEvent, tagOld = edm::InputTag(); for (trigger::size_type i1 = 0; i1 != n1; ++i1) { const edm::ProductID pid(coll1[i1].id()); - const std::string& label(iEvent.getProvenance(pid).moduleLabel()); - const std::string& instance(iEvent.getProvenance(pid).productInstanceName()); - const std::string& process(iEvent.getProvenance(pid).processName()); + const auto& prov = iEvent.getStableProvenance(pid); + const std::string& label(prov.moduleLabel()); + const std::string& instance(prov.productInstanceName()); + const std::string& process(prov.processName()); edm::InputTag tagNew(edm::InputTag(label, instance, process)); if (tagOld.encode() != tagNew.encode()) { filterproduct.addCollectionTag(tagNew); @@ -273,9 +298,10 @@ HLTDoubletDZ::getCollections(edm::Event& iEvent, tagOld = edm::InputTag(); for (trigger::size_type i2 = 0; i2 != n2; ++i2) { const edm::ProductID pid(coll2[i2].id()); - const std::string& label(iEvent.getProvenance(pid).moduleLabel()); - const std::string& instance(iEvent.getProvenance(pid).productInstanceName()); - const std::string& process(iEvent.getProvenance(pid).processName()); + const auto& prov = iEvent.getStableProvenance(pid); + const std::string& label(prov.moduleLabel()); + const std::string& instance(prov.productInstanceName()); + const std::string& process(prov.processName()); edm::InputTag tagNew(edm::InputTag(label, instance, process)); if (tagOld.encode() != tagNew.encode()) { filterproduct.addCollectionTag(tagNew); @@ -404,6 +430,41 @@ bool HLTDoubletDZ::compu return true; } +template <> +bool HLTDoubletDZ::computeDZ(edm::Event& iEvent, + l1t::TkMuonRef& r1, + l1t::TkMuonRef& r2) const { + const l1t::TkMuon& candidate1(*r1); + const l1t::TkMuon& candidate2(*r2); + if (reco::deltaR(candidate1, candidate2) < minDR_) + return false; + + // We don't care about minPixHitsForDZ_ with the L1TkMuons, + // especially because the pixel does not participate in the L1T + if (std::abs(candidate1.trkzVtx() - candidate2.trkzVtx()) > maxDZ_) + return false; + + return true; +} + +template <> +bool HLTDoubletDZ::computeDZ(edm::Event& iEvent, + l1t::HPSPFTauRef& r1, + l1t::HPSPFTauRef& r2) const { + const l1t::HPSPFTau& candidate1(*r1); + const l1t::HPSPFTau& candidate2(*r2); + if (reco::deltaR(candidate1, candidate2) < minDR_) + return false; + + // We don't care about minPixHitsForDZ_ with the L1HPSPFTaus, + // especially because the pixel does not participate in the L1T + if (std::abs(candidate1.leadChargedPFCand()->pfTrack()->vertex().z() - + candidate2.leadChargedPFCand()->pfTrack()->vertex().z()) > maxDZ_) + return false; + + return true; +} + // ------------ method called to produce the data ------------ template bool HLTDoubletDZ::hltFilter(edm::Event& iEvent, @@ -453,12 +514,147 @@ bool HLTDoubletDZ::hltFilter(edm::Event& iEvent, return accept; } +/// Special instantiation for L1TkMuon +/// L1TkMuon are *not* RecoCandidates, therefore they don't implement superCluster() +/// They are LeafCandidates instead +template <> +bool HLTDoubletDZ::hltFilter(edm::Event& iEvent, + const edm::EventSetup& iSetup, + trigger::TriggerFilterObjectWithRefs& filterproduct) const { + // All HLT filters must create and fill an HLT filter object, + // recording any reconstructed physics objects satisfying (or not) + // this HLT filter, and place it in the Event. + bool accept(false); + + std::vector coll1; + std::vector coll2; + + if (getCollections(iEvent, coll1, coll2, filterproduct)) { + int n(0); + l1t::TkMuonRef r1; + l1t::TkMuonRef r2; + + for (unsigned int i1 = 0; i1 != coll1.size(); i1++) { + r1 = coll1[i1]; + unsigned int I(0); + if (same_) { + I = i1 + 1; + } + for (unsigned int i2 = I; i2 != coll2.size(); i2++) { + r2 = coll2[i2]; + + if (!computeDZ(iEvent, r1, r2)) + continue; + + n++; + filterproduct.addObject(triggerType1_, r1); + filterproduct.addObject(triggerType2_, r2); + } + } + + accept = accept || (n >= min_N_); + } + + return accept; +} + +/// Special instantiation for L1PFTau +/// L1PFTau are *not* RecoCandidates, therefore they don't implement superCluster() +/// They are LeafCandidates instead +template <> +bool HLTDoubletDZ::hltFilter(edm::Event& iEvent, + const edm::EventSetup& iSetup, + trigger::TriggerFilterObjectWithRefs& filterproduct) const { + // All HLT filters must create and fill an HLT filter object, + // recording any reconstructed physics objects satisfying (or not) + // this HLT filter, and place it in the Event. + bool accept(false); + + std::vector coll1; + std::vector coll2; + + if (getCollections(iEvent, coll1, coll2, filterproduct)) { + int n(0); + l1t::PFTauRef r1; + l1t::PFTauRef r2; + + for (unsigned int i1 = 0; i1 != coll1.size(); i1++) { + r1 = coll1[i1]; + unsigned int I(0); + if (same_) { + I = i1 + 1; + } + for (unsigned int i2 = I; i2 != coll2.size(); i2++) { + r2 = coll2[i2]; + + if (!computeDZ(iEvent, r1, r2)) + continue; + + n++; + filterproduct.addObject(triggerType1_, r1); + filterproduct.addObject(triggerType2_, r2); + } + } + + accept = accept || (n >= min_N_); + } + + return accept; +} + +/// Special instantiation for L1HPSPFTau +/// L1HPSPFTau are *not* RecoCandidates, therefore they don't implement superCluster() +/// They are LeafCandidates instead +template <> +bool HLTDoubletDZ::hltFilter(edm::Event& iEvent, + const edm::EventSetup& iSetup, + trigger::TriggerFilterObjectWithRefs& filterproduct) const { + // All HLT filters must create and fill an HLT filter object, + // recording any reconstructed physics objects satisfying (or not) + // this HLT filter, and place it in the Event. + bool accept(false); + + std::vector coll1; + std::vector coll2; + + if (getCollections(iEvent, coll1, coll2, filterproduct)) { + int n(0); + l1t::HPSPFTauRef r1; + l1t::HPSPFTauRef r2; + + for (unsigned int i1 = 0; i1 != coll1.size(); i1++) { + r1 = coll1[i1]; + unsigned int I(0); + if (same_) { + I = i1 + 1; + } + for (unsigned int i2 = I; i2 != coll2.size(); i2++) { + r2 = coll2[i2]; + + if (!computeDZ(iEvent, r1, r2)) + continue; + + n++; + filterproduct.addObject(triggerType1_, r1); + filterproduct.addObject(triggerType2_, r2); + } + } + + accept = accept || (n >= min_N_); + } + + return accept; +} + typedef HLTDoubletDZ HLT2ElectronElectronDZ; typedef HLTDoubletDZ HLT2MuonMuonDZ; typedef HLTDoubletDZ HLT2ElectronMuonDZ; typedef HLTDoubletDZ HLT2PhotonPhotonDZ; typedef HLTDoubletDZ HLT2MuonPhotonDZ; typedef HLTDoubletDZ HLT2PhotonMuonDZ; +typedef HLTDoubletDZ HLT2L1TkMuonL1TkMuonDZ; +typedef HLTDoubletDZ HLT2L1PFTauL1PFTauDZ; +typedef HLTDoubletDZ HLT2L1HPSPFTauL1HPSPFTauDZ; DEFINE_FWK_MODULE(HLT2ElectronElectronDZ); DEFINE_FWK_MODULE(HLT2MuonMuonDZ); @@ -466,3 +662,6 @@ DEFINE_FWK_MODULE(HLT2ElectronMuonDZ); DEFINE_FWK_MODULE(HLT2PhotonPhotonDZ); DEFINE_FWK_MODULE(HLT2PhotonMuonDZ); DEFINE_FWK_MODULE(HLT2MuonPhotonDZ); +DEFINE_FWK_MODULE(HLT2L1TkMuonL1TkMuonDZ); +DEFINE_FWK_MODULE(HLT2L1PFTauL1PFTauDZ); +DEFINE_FWK_MODULE(HLT2L1HPSPFTauL1HPSPFTauDZ); diff --git a/HLTrigger/HLTfilters/plugins/L1TEnergySumFilterT.h b/HLTrigger/HLTfilters/plugins/L1TEnergySumFilterT.h new file mode 100644 index 0000000000000..ac51306dda5e9 --- /dev/null +++ b/HLTrigger/HLTfilters/plugins/L1TEnergySumFilterT.h @@ -0,0 +1,132 @@ +#ifndef HLTrigger_HLTfilters_L1TEnergySumFilterT_h +#define HLTrigger_HLTfilters_L1TEnergySumFilterT_h + +#include +#include + +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" +#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "HLTrigger/HLTcore/interface/HLTFilter.h" +#include "HLTrigger/HLTcore/interface/defaultModuleLabel.h" + +template +class L1TEnergySumFilterT : public HLTFilter { +public: + explicit L1TEnergySumFilterT(const edm::ParameterSet&); + ~L1TEnergySumFilterT() override; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + bool hltFilter(edm::Event&, + edm::EventSetup const&, + trigger::TriggerFilterObjectWithRefs& filterproduct) const override; + +private: + edm::InputTag const l1tSumTag_; + edm::EDGetTokenT> const l1tSumToken_; + + trigger::TriggerObjectType const l1tSumType_; + double const minPt_; + + edm::ParameterSet scalings_; + std::vector theScalings_; + + static trigger::TriggerObjectType typeOfL1TSum(std::string const&); + + double offlineEnergySum(double const Et) const; +}; + +template +L1TEnergySumFilterT::L1TEnergySumFilterT(const edm::ParameterSet& iConfig) + : HLTFilter(iConfig), + l1tSumTag_(iConfig.getParameter("inputTag")), + l1tSumToken_(consumes>(l1tSumTag_)), + l1tSumType_(typeOfL1TSum(iConfig.getParameter("TypeOfSum"))), + minPt_(iConfig.getParameter("MinPt")) { + scalings_ = iConfig.getParameter("Scalings"); + theScalings_ = scalings_.getParameter>("theScalings"); +} + +template +L1TEnergySumFilterT::~L1TEnergySumFilterT() = default; + +template +trigger::TriggerObjectType L1TEnergySumFilterT::typeOfL1TSum(std::string const& typeOfSum) { + trigger::TriggerObjectType sumEnum; + + if (typeOfSum == "MET") + sumEnum = trigger::TriggerObjectType::TriggerL1PFMET; + else if (typeOfSum == "ETT") + sumEnum = trigger::TriggerObjectType::TriggerL1PFETT; + else if (typeOfSum == "HT") + sumEnum = trigger::TriggerObjectType::TriggerL1PFHT; + else if (typeOfSum == "MHT") + sumEnum = trigger::TriggerObjectType::TriggerL1PFMHT; + else { + throw cms::Exception("ConfigurationError") + << "Wrong type of energy sum: \"" << typeOfSum << "\" (valid choices are: MET, ETT, HT, MHT)"; + } + + return sumEnum; +} + +template +void L1TEnergySumFilterT::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + makeHLTFilterDescription(desc); + desc.add("inputTag", edm::InputTag("L1PFEnergySums")); + + edm::ParameterSetDescription descScalings; + descScalings.add>("theScalings", {0.0, 1.0, 0.0}); + desc.add("Scalings", descScalings); + + desc.add("TypeOfSum", "HT"); + desc.add("MinPt", -1.); + descriptions.add(defaultModuleLabel>(), desc); +} + +template +bool L1TEnergySumFilterT::hltFilter(edm::Event& iEvent, + edm::EventSetup const& iSetup, + trigger::TriggerFilterObjectWithRefs& filterproduct) const { + // All HLT filters must create and fill an HLT filter object, + // recording any reconstructed physics objects satisfying (or not) + // this HLT filter, and place it in the Event. + + // The filter object + if (saveTags()) { + filterproduct.addCollectionTag(l1tSumTag_); + } + + auto const& l1tSums = iEvent.getHandle(l1tSumToken_); + + int nSum(0); + for (auto iSum = l1tSums->begin(); iSum != l1tSums->end(); ++iSum) { + double offlinePt = 0.0; + // pt or sumEt? + if (l1tSumType_ == trigger::TriggerObjectType::TriggerL1PFMET or + l1tSumType_ == trigger::TriggerObjectType::TriggerL1PFMHT) { + offlinePt = offlineEnergySum(iSum->pt()); + } else if (l1tSumType_ == trigger::TriggerObjectType::TriggerL1PFETT or + l1tSumType_ == trigger::TriggerObjectType::TriggerL1PFHT) { + offlinePt = offlineEnergySum(iSum->sumEt()); + } + + if (offlinePt >= minPt_) { + ++nSum; + edm::Ref> ref(l1tSums, std::distance(l1tSums->begin(), iSum)); + filterproduct.addObject(l1tSumType_, ref); + } + } + + // return final filter decision + return nSum > 0; +} + +template +double L1TEnergySumFilterT::offlineEnergySum(double const Et) const { + return (theScalings_.at(0) + Et * theScalings_.at(1) + Et * Et * theScalings_.at(2)); +} + +#endif // HLTrigger_HLTfilters_L1TEnergySumFilterT_h diff --git a/HLTrigger/HLTfilters/plugins/L1THPSPFTauFilter.cc b/HLTrigger/HLTfilters/plugins/L1THPSPFTauFilter.cc new file mode 100644 index 0000000000000..c406d345c6d9b --- /dev/null +++ b/HLTrigger/HLTfilters/plugins/L1THPSPFTauFilter.cc @@ -0,0 +1,121 @@ +/** \class L1THPSPFTauFilter + * + * See header file for documentation + * + * + * \author Martin Grunewald + * \author Sandeep Bhowmik + * \author Thiago Tomei + * + */ + +#include "L1THPSPFTauFilter.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" + +#include "DataFormats/Common/interface/Handle.h" + +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" +#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" + +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/EventSetupRecord.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +// +// constructors and destructor +// + +L1THPSPFTauFilter::L1THPSPFTauFilter(const edm::ParameterSet& iConfig) + : HLTFilter(iConfig), + l1HPSPFTauTag_(iConfig.getParameter("inputTag")), + hpspfTauToken_(consumes(l1HPSPFTauTag_)) { + min_Pt_ = iConfig.getParameter("MinPt"); + min_N_ = iConfig.getParameter("MinN"); + min_Eta_ = iConfig.getParameter("MinEta"); + max_Eta_ = iConfig.getParameter("MaxEta"); + max_RelChargedIso_ = iConfig.getParameter("MaxRelChargedIso"); + min_LeadTrackPt_ = iConfig.getParameter("MinLeadTrackPt"); + scalings_ = iConfig.getParameter("Scalings"); + barrelScalings_ = scalings_.getParameter >("barrel"); + overlapScalings_ = scalings_.getParameter >("overlap"); + endcapScalings_ = scalings_.getParameter >("endcap"); +} + +L1THPSPFTauFilter::~L1THPSPFTauFilter() = default; + +// +// member functions +// + +void L1THPSPFTauFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + makeHLTFilterDescription(desc); + desc.add("MinPt", -1.0); + desc.add("MinEta", -5.0); + desc.add("MaxEta", 5.0); + desc.add("MaxRelChargedIso", 1.0E9); + desc.add("MinLeadTrackPt", -1.0); + desc.add("MinN", 1); + desc.add("inputTag", edm::InputTag("L1HPSPFTaus")); + + edm::ParameterSetDescription descScalings; + descScalings.add >("barrel", {0.0, 1.0, 0.0}); + descScalings.add >("overlap", {0.0, 1.0, 0.0}); + descScalings.add >("endcap", {0.0, 1.0, 0.0}); + desc.add("Scalings", descScalings); + + descriptions.add("L1THPSPFTauFilter", desc); +} + +// ------------ method called to produce the data ------------ +bool L1THPSPFTauFilter::hltFilter(edm::Event& iEvent, + const edm::EventSetup& iSetup, + trigger::TriggerFilterObjectWithRefs& filterproduct) const { + using namespace std; + using namespace edm; + using namespace reco; + using namespace trigger; + + // All HLT filters must create and fill an HLT filter object, + // recording any reconstructed physics objects satisfying (or not) + // this HLT filter, and place it in the Event. + + // The filter object + if (saveTags()) { + filterproduct.addCollectionTag(l1HPSPFTauTag_); + } + + // Specific filter code + + // get hold of products from Event + Handle HPSPFTaus; + iEvent.getByToken(hpspfTauToken_, HPSPFTaus); + + // pftau + int npftau(0); + auto apftaus(HPSPFTaus->begin()); + auto opftaus(HPSPFTaus->end()); + l1t::HPSPFTauCollection::const_iterator iHPSPFTau; + for (iHPSPFTau = apftaus; iHPSPFTau != opftaus; iHPSPFTau++) { + double offlinePt = this->HPSPFTauOfflineEt(iHPSPFTau->pt(), iHPSPFTau->eta()); + if (offlinePt >= min_Pt_ && iHPSPFTau->eta() <= max_Eta_ && iHPSPFTau->eta() >= min_Eta_ && + (iHPSPFTau->sumChargedIso() / iHPSPFTau->pt()) < max_RelChargedIso_ && + (iHPSPFTau->leadChargedPFCand()->pfTrack()->pt()) > min_LeadTrackPt_) { + npftau++; + l1t::HPSPFTauRef ref(l1t::HPSPFTauRef(HPSPFTaus, distance(apftaus, iHPSPFTau))); + filterproduct.addObject(trigger::TriggerObjectType::TriggerL1PFTau, ref); + } + } + + // return with final filter decision + const bool accept(npftau >= min_N_); + return accept; +} + +double L1THPSPFTauFilter::HPSPFTauOfflineEt(double Et, double Eta) const { + if (std::abs(Eta) < 1.5) + return (barrelScalings_.at(0) + Et * barrelScalings_.at(1) + Et * Et * barrelScalings_.at(2)); + else + return (endcapScalings_.at(0) + Et * endcapScalings_.at(1) + Et * Et * endcapScalings_.at(2)); +} diff --git a/HLTrigger/HLTfilters/plugins/L1THPSPFTauFilter.h b/HLTrigger/HLTfilters/plugins/L1THPSPFTauFilter.h new file mode 100644 index 0000000000000..41fff14d715da --- /dev/null +++ b/HLTrigger/HLTfilters/plugins/L1THPSPFTauFilter.h @@ -0,0 +1,50 @@ +#ifndef L1THPSPFTauFilter_h +#define L1THPSPFTauFilter_h + +/** \class L1THPSPFTauFilter + * + * + * This class is an HLTFilter (-> EDFilter) implementing a very basic + * HLT trigger acting on HPSPFTau candidates + * + * + * + * \author Sandeep Bhowmik + * \author Thiago Tomei + */ + +#include "HLTrigger/HLTcore/interface/HLTFilter.h" +#include "DataFormats/L1TParticleFlow/interface/HPSPFTau.h" +#include "DataFormats/L1TParticleFlow/interface/HPSPFTauFwd.h" + +// +// class declaration +// + +class L1THPSPFTauFilter : public HLTFilter { +public: + explicit L1THPSPFTauFilter(const edm::ParameterSet&); + ~L1THPSPFTauFilter() override; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + bool hltFilter(edm::Event&, + const edm::EventSetup&, + trigger::TriggerFilterObjectWithRefs& filterproduct) const override; + +private: + edm::InputTag l1HPSPFTauTag_; // input tag for L1 HPSPFTau product + edm::EDGetTokenT hpspfTauToken_; // token identifying product containing L1 HPSPFTaus + double min_Pt_; // min pt cut + int min_N_; // min number of candidates above pT cut + double min_Eta_; // min eta cut + double max_Eta_; // max eta cut + double max_RelChargedIso_; // max relative charged isolation + double min_LeadTrackPt_; // min leading track pT + edm::ParameterSet scalings_; // all scalings. An indirection level allows extra flexibility + std::vector barrelScalings_; // barrel scalings + std::vector overlapScalings_; // overlap scalings + std::vector endcapScalings_; // endcap scalings + + double HPSPFTauOfflineEt(double Et, double Eta) const; +}; + +#endif //L1THPSPFTauFilter_h diff --git a/HLTrigger/HLTfilters/plugins/L1TJetFilterT.h b/HLTrigger/HLTfilters/plugins/L1TJetFilterT.h new file mode 100644 index 0000000000000..247586e1d9a6a --- /dev/null +++ b/HLTrigger/HLTfilters/plugins/L1TJetFilterT.h @@ -0,0 +1,132 @@ +#ifndef HLTrigger_HLTfilters_L1TJetFilterT_h +#define HLTrigger_HLTfilters_L1TJetFilterT_h + +#include +#include +#include + +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" +#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "HLTrigger/HLTcore/interface/HLTFilter.h" +#include "HLTrigger/HLTcore/interface/defaultModuleLabel.h" + +template +class L1TJetFilterT : public HLTFilter { +public: + explicit L1TJetFilterT(const edm::ParameterSet&); + ~L1TJetFilterT() override; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + bool hltFilter(edm::Event&, + const edm::EventSetup&, + trigger::TriggerFilterObjectWithRefs& filterproduct) const override; + +private: + edm::InputTag const l1tJetTag_; + edm::EDGetTokenT> const l1tJetToken_; + + double const minPt_; + double const minEta_; + double const maxEta_; + int const minN_; + + edm::ParameterSet scalings_; // all scalings. An indirection level allows extra flexibility + std::vector barrelScalings_; // barrel scalings + std::vector overlapScalings_; // overlap scalings + std::vector endcapScalings_; // endcap scalings + + double offlineJetPt(double const pt, double const eta) const; +}; + +template +L1TJetFilterT::L1TJetFilterT(const edm::ParameterSet& iConfig) + : HLTFilter(iConfig), + l1tJetTag_(iConfig.getParameter("inputTag")), + l1tJetToken_(consumes>(l1tJetTag_)), + minPt_(iConfig.getParameter("MinPt")), + minEta_(iConfig.getParameter("MinEta")), + maxEta_(iConfig.getParameter("MaxEta")), + minN_(iConfig.getParameter("MinN")) { + scalings_ = iConfig.getParameter("Scalings"); + barrelScalings_ = scalings_.getParameter>("barrel"); + overlapScalings_ = scalings_.getParameter>("overlap"); + endcapScalings_ = scalings_.getParameter>("endcap"); +} + +template +L1TJetFilterT::~L1TJetFilterT() = default; + +template +void L1TJetFilterT::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + makeHLTFilterDescription(desc); + desc.add("inputTag", edm::InputTag("ak4PFL1PuppiCorrected")); + desc.add("MinPt", -1.0); + desc.add("MinEta", -5.0); + desc.add("MaxEta", 5.0); + desc.add("MinN", 1); + + edm::ParameterSetDescription descScalings; + descScalings.add>("barrel", {0.0, 1.0, 0.0}); + descScalings.add>("overlap", {0.0, 1.0, 0.0}); + descScalings.add>("endcap", {0.0, 1.0, 0.0}); + desc.add("Scalings", descScalings); + + descriptions.add(defaultModuleLabel>(), desc); +} + +template +bool L1TJetFilterT::hltFilter(edm::Event& iEvent, + const edm::EventSetup& iSetup, + trigger::TriggerFilterObjectWithRefs& filterproduct) const { + // All HLT filters must create and fill an HLT filter object, + // recording any reconstructed physics objects satisfying (or not) + // this HLT filter, and place it in the Event. + + // The filter object + if (saveTags()) { + filterproduct.addCollectionTag(l1tJetTag_); + } + + auto const& l1tJets = iEvent.getHandle(l1tJetToken_); + + int nJet(0); + for (auto iJet = l1tJets->begin(); iJet != l1tJets->end(); ++iJet) { + if (offlineJetPt(iJet->pt(), iJet->eta()) >= minPt_ && iJet->eta() <= maxEta_ && iJet->eta() >= minEta_) { + ++nJet; + edm::Ref> ref(l1tJets, std::distance(l1tJets->begin(), iJet)); + filterproduct.addObject(trigger::TriggerObjectType::TriggerL1PFJet, ref); + } + } + + // return with final filter decision + return nJet >= minN_; +} + +template +double L1TJetFilterT::offlineJetPt(double const pt, double const eta) const { + if (std::abs(eta) < 1.5) + return (barrelScalings_.at(0) + pt * barrelScalings_.at(1) + pt * pt * barrelScalings_.at(2)); + else if (std::abs(eta) < 2.4) + return (overlapScalings_.at(0) + pt * overlapScalings_.at(1) + pt * pt * overlapScalings_.at(2)); + else + return (endcapScalings_.at(0) + pt * endcapScalings_.at(1) + pt * pt * endcapScalings_.at(2)); + + /* + uint const scIdx = std::abs(eta) < 1.5 ? 0 : (std::abs(eta) < 2.4 ? 1 : 2); + + if (scIdx >= scalingConstants.m_constants.size()) { + throw cms::Exception("Input") << "out-of-range index for L1TObjScalingConstants vector (size=" + << scalingConstants.m_constants.size() << ") [jet: pt=" << pt << ", eta=" << eta + << "]"; + } + + return scalingConstants.m_constants.at(scIdx).m_constant + pt * scalingConstants.m_constants.at(scIdx).m_linear + + pt * pt * scalingConstants.m_constants.at(scIdx).m_quadratic; + */ +} + +#endif // HLTrigger_HLTfilters_L1TJetFilterT_h diff --git a/HLTrigger/HLTfilters/plugins/L1TPFTauFilter.cc b/HLTrigger/HLTfilters/plugins/L1TPFTauFilter.cc new file mode 100644 index 0000000000000..85af40bd1c14f --- /dev/null +++ b/HLTrigger/HLTfilters/plugins/L1TPFTauFilter.cc @@ -0,0 +1,124 @@ +/** \class L1TPFTauFilter + * + * See header file for documentation + * + * + * \author Martin Grunewald + * \author Sandeep Bhowmik + * \author Thiago Tomei + * + */ + +#include "L1TPFTauFilter.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" + +#include "DataFormats/Common/interface/Handle.h" + +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" +#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" + +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/EventSetupRecord.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +// +// constructors and destructor +// + +L1TPFTauFilter::L1TPFTauFilter(const edm::ParameterSet& iConfig) + : HLTFilter(iConfig), + l1PFTauTag_(iConfig.getParameter("inputTag")), + pfTauToken_(consumes(l1PFTauTag_)) { + min_Pt_ = iConfig.getParameter("MinPt"); + min_N_ = iConfig.getParameter("MinN"); + min_Eta_ = iConfig.getParameter("MinEta"); + max_Eta_ = iConfig.getParameter("MaxEta"); + maxChargedIso_ = iConfig.getParameter("MaxChargedIso"); + maxFullIso_ = iConfig.getParameter("MaxFullIso"); + passLooseNN_ = iConfig.getParameter("PassLooseNN"); + passTightNN_ = iConfig.getParameter("PassTightNN"); + scalings_ = iConfig.getParameter("Scalings"); + barrelScalings_ = scalings_.getParameter >("barrel"); + endcapScalings_ = scalings_.getParameter >("endcap"); +} + +L1TPFTauFilter::~L1TPFTauFilter() = default; + +// +// member functions +// + +void L1TPFTauFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + makeHLTFilterDescription(desc); + desc.add("MinPt", -1.0); + desc.add("MinEta", -5.0); + desc.add("MaxEta", 5.0); + desc.add("MinN", 1); + desc.add("MaxChargedIso", 1.0E9); // could use std::numeric_limits::max(), but it is overkill... + desc.add("MaxFullIso", 1.0E9); + desc.add("PassLooseNN", -1); + desc.add("PassTightNN", -1); + desc.add("inputTag", edm::InputTag("L1PFTausNN")); + + edm::ParameterSetDescription descScalings; + descScalings.add >("barrel", {0.0, 1.0, 0.0}); + descScalings.add >("overlap", {0.0, 1.0, 0.0}); + descScalings.add >("endcap", {0.0, 1.0, 0.0}); + desc.add("Scalings", descScalings); + + descriptions.add("L1TPFTauFilter", desc); +} + +// ------------ method called to produce the data ------------ +bool L1TPFTauFilter::hltFilter(edm::Event& iEvent, + const edm::EventSetup& iSetup, + trigger::TriggerFilterObjectWithRefs& filterproduct) const { + using namespace std; + using namespace edm; + using namespace reco; + using namespace trigger; + + // All HLT filters must create and fill an HLT filter object, + // recording any reconstructed physics objects satisfying (or not) + // this HLT filter, and place it in the Event. + + // The filter object + if (saveTags()) { + filterproduct.addCollectionTag(l1PFTauTag_); + } + + // Specific filter code + + // get hold of products from Event + Handle PFTaus; + iEvent.getByToken(pfTauToken_, PFTaus); + + // pftau + int npftau(0); + auto apftaus(PFTaus->begin()); + auto opftaus(PFTaus->end()); + l1t::PFTauCollection::const_iterator iPFTau; + for (iPFTau = apftaus; iPFTau != opftaus; iPFTau++) { + double offlinePt = this->PFTauOfflineEt(iPFTau->pt(), iPFTau->eta()); + if (offlinePt >= min_Pt_ && iPFTau->eta() <= max_Eta_ && iPFTau->eta() >= min_Eta_ && + iPFTau->passLooseNN() > passLooseNN_ && iPFTau->passTightNN() > passTightNN_ && + iPFTau->chargedIso() < maxChargedIso_ && iPFTau->fullIso() < maxFullIso_) { + npftau++; + l1t::PFTauRef ref(l1t::PFTauRef(PFTaus, distance(apftaus, iPFTau))); + filterproduct.addObject(trigger::TriggerObjectType::TriggerL1PFTau, ref); + } + } + + // return with final filter decision + const bool accept(npftau >= min_N_); + return accept; +} + +double L1TPFTauFilter::PFTauOfflineEt(double Et, double Eta) const { + if (std::abs(Eta) < 1.5) + return (barrelScalings_.at(0) + Et * barrelScalings_.at(1) + Et * Et * barrelScalings_.at(2)); + else + return (endcapScalings_.at(0) + Et * endcapScalings_.at(1) + Et * Et * endcapScalings_.at(2)); +} diff --git a/HLTrigger/HLTfilters/plugins/L1TPFTauFilter.h b/HLTrigger/HLTfilters/plugins/L1TPFTauFilter.h new file mode 100644 index 0000000000000..5fe29fd6f34f2 --- /dev/null +++ b/HLTrigger/HLTfilters/plugins/L1TPFTauFilter.h @@ -0,0 +1,49 @@ +#ifndef L1TPFTauFilter_h +#define L1TPFTauFilter_h + +/** \class L1TPFTauFilter + * + * + * This class is an HLTFilter (-> EDFilter) implementing a very basic + * HLT trigger acting on PFTau (NN) candidates + * + * + * + * \author Thiago Tomei + */ + +#include "HLTrigger/HLTcore/interface/HLTFilter.h" +#include "DataFormats/L1TParticleFlow/interface/PFTau.h" + +// +// class declaration +// + +class L1TPFTauFilter : public HLTFilter { +public: + explicit L1TPFTauFilter(const edm::ParameterSet&); + ~L1TPFTauFilter() override; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + bool hltFilter(edm::Event&, + const edm::EventSetup&, + trigger::TriggerFilterObjectWithRefs& filterproduct) const override; + +private: + edm::InputTag l1PFTauTag_; //input tag for L1 PFTau product + edm::EDGetTokenT pfTauToken_; // token identifying product containing L1 PFTaus + double min_Pt_; // min pt cut + int min_N_; // min number of candidates above pT cut + double min_Eta_; //min eta cut + double max_Eta_; //max eta cut + double maxChargedIso_; // Cut on charged isolation + double maxFullIso_; // Cut on full isolation + int passLooseNN_; // Pass loose NN cut... for some implementation of the NN + int passTightNN_; // Pass tight NN cut... for some implementation of the NN + edm::ParameterSet scalings_; // all scalings. An indirection level allows extra flexibility + std::vector barrelScalings_; // barrel scalings + std::vector endcapScalings_; // endcap scalings + + double PFTauOfflineEt(double Et, double Eta) const; +}; + +#endif //L1TPFTauFilter_h diff --git a/HLTrigger/HLTfilters/plugins/L1TTkEleFilter.cc b/HLTrigger/HLTfilters/plugins/L1TTkEleFilter.cc new file mode 100644 index 0000000000000..8a90b784f71e9 --- /dev/null +++ b/HLTrigger/HLTfilters/plugins/L1TTkEleFilter.cc @@ -0,0 +1,199 @@ +/** \class L1TTkEleFilter + * + * See header file for documentation + * + * + * \author Martin Grunewald + * \author Simone Gennai + * \author Thiago Tomei + * + */ + +#include "L1TTkEleFilter.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" + +#include "DataFormats/Common/interface/Handle.h" + +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" +#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" + +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/EventSetupRecord.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +// +// constructors and destructor +// + +L1TTkEleFilter::L1TTkEleFilter(const edm::ParameterSet& iConfig) + : HLTFilter(iConfig), + l1TkEleTag1_(iConfig.getParameter("inputTag1")), + l1TkEleTag2_(iConfig.getParameter("inputTag2")), + tkEleToken1_(consumes(l1TkEleTag1_)), + tkEleToken2_(consumes(l1TkEleTag2_)) { + min_Pt_ = iConfig.getParameter("MinPt"); + min_N_ = iConfig.getParameter("MinN"); + min_Eta_ = iConfig.getParameter("MinEta"); + max_Eta_ = iConfig.getParameter("MaxEta"); + scalings_ = iConfig.getParameter("Scalings"); + barrelScalings_ = scalings_.getParameter >("barrel"); + endcapScalings_ = scalings_.getParameter >("endcap"); + etaBinsForIsolation_ = iConfig.getParameter >("EtaBinsForIsolation"); + trkIsolation_ = iConfig.getParameter >("TrkIsolation"); + quality1_ = iConfig.getParameter("Quality1"); + quality2_ = iConfig.getParameter("Quality2"); + qual1IsMask_ = iConfig.getParameter("Qual1IsMask"); + qual2IsMask_ = iConfig.getParameter("Qual2IsMask"); + applyQual1_ = iConfig.getParameter("ApplyQual1"); + applyQual2_ = iConfig.getParameter("ApplyQual2"); + + if (etaBinsForIsolation_.size() != (trkIsolation_.size() + 1)) + throw cms::Exception("ConfigurationError") + << "Vector of isolation values should have same size of vector of eta bins plus one."; +} + +L1TTkEleFilter::~L1TTkEleFilter() = default; + +// +// member functions +// + +void L1TTkEleFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + + makeHLTFilterDescription(desc); + desc.add("MinPt", -1.0); + desc.add("MinEta", -5.0); + desc.add("MaxEta", 5.0); + desc.add("MinN", 1); + desc.add("inputTag1", edm::InputTag("L1TkElectrons1")); + desc.add("inputTag2", edm::InputTag("L1TkElectrons2")); + desc.add >("EtaBinsForIsolation", {0.0, 1.479}); + desc.add >("TrkIsolation", + { + 99999.9, + }); + desc.add("Quality1", 0); + desc.add("Quality2", 0); + desc.add("Qual1IsMask", false); + desc.add("Qual2IsMask", false); + desc.add("ApplyQual1", false); + desc.add("ApplyQual2", false); + + edm::ParameterSetDescription descScalings; + descScalings.add >("barrel", {0.0, 1.0, 0.0}); + descScalings.add >("endcap", {0.0, 1.0, 0.0}); + desc.add("Scalings", descScalings); + + descriptions.add("L1TTkEleFilter", desc); +} + +// ------------ method called to produce the data ------------ +bool L1TTkEleFilter::hltFilter(edm::Event& iEvent, + const edm::EventSetup& iSetup, + trigger::TriggerFilterObjectWithRefs& filterproduct) const { + using namespace std; + using namespace edm; + using namespace reco; + using namespace trigger; + + // All HLT filters must create and fill an HLT filter object, + // recording any reconstructed physics objects satisfying (or not) + // this HLT filter, and place it in the Event. + + // The filter object + if (saveTags()) { + filterproduct.addCollectionTag(l1TkEleTag1_); + filterproduct.addCollectionTag(l1TkEleTag2_); + } + + // Specific filter code + + // get hold of products from Event + + /// Barrel colleciton + Handle tkEles1; + iEvent.getByToken(tkEleToken1_, tkEles1); + + /// Endcap collection + Handle tkEles2; + iEvent.getByToken(tkEleToken2_, tkEles2); + + int ntrkEle(0); + // Loop over first collection + auto atrkEles(tkEles1->begin()); + auto otrkEles(tkEles1->end()); + TkEleCollection::const_iterator itkEle; + for (itkEle = atrkEles; itkEle != otrkEles; itkEle++) { + double offlinePt = this->TkEleOfflineEt(itkEle->pt(), itkEle->eta()); + bool passQuality(false); + bool passIsolation(false); + + if (applyQual1_) { + if (qual1IsMask_) + passQuality = (itkEle->EGRef()->hwQual() & quality1_); + else + passQuality = (itkEle->EGRef()->hwQual() == quality1_); + } else + passQuality = true; + + // There has to be a better way to do this. + for (unsigned int etabin = 1; etabin != etaBinsForIsolation_.size(); ++etabin) { + if (std::abs(itkEle->eta()) < etaBinsForIsolation_.at(etabin) and + std::abs(itkEle->eta()) > etaBinsForIsolation_.at(etabin - 1) and + itkEle->trkIsol() < trkIsolation_.at(etabin - 1)) + passIsolation = true; + } + + if (offlinePt >= min_Pt_ && itkEle->eta() <= max_Eta_ && itkEle->eta() >= min_Eta_ && passQuality && + passIsolation) { + ntrkEle++; + l1t::TkElectronRef ref1(l1t::TkElectronRef(tkEles1, distance(atrkEles, itkEle))); + filterproduct.addObject(trigger::TriggerObjectType::TriggerL1TkEle, ref1); + } + } + + // Loop over second collection. Notice we don't reset ntrkEle + atrkEles = tkEles2->begin(); + otrkEles = tkEles2->end(); + for (itkEle = atrkEles; itkEle != otrkEles; itkEle++) { + double offlinePt = this->TkEleOfflineEt(itkEle->pt(), itkEle->eta()); + bool passQuality(false); + bool passIsolation(false); + + if (applyQual2_) { + if (qual2IsMask_) + passQuality = (itkEle->EGRef()->hwQual() & quality2_); + else + passQuality = (itkEle->EGRef()->hwQual() == quality2_); + } else + passQuality = true; + + for (unsigned int etabin = 1; etabin != etaBinsForIsolation_.size(); ++etabin) { + if (std::abs(itkEle->eta()) < etaBinsForIsolation_.at(etabin) and + std::abs(itkEle->eta()) > etaBinsForIsolation_.at(etabin - 1) and + itkEle->trkIsol() < trkIsolation_.at(etabin - 1)) + passIsolation = true; + } + + if (offlinePt >= min_Pt_ && itkEle->eta() <= max_Eta_ && itkEle->eta() >= min_Eta_ && passQuality && + passIsolation) { + ntrkEle++; + l1t::TkElectronRef ref2(l1t::TkElectronRef(tkEles2, distance(atrkEles, itkEle))); + filterproduct.addObject(trigger::TriggerObjectType::TriggerL1TkEle, ref2); + } + } + + // return with final filter decision + const bool accept(ntrkEle >= min_N_); + return accept; +} + +double L1TTkEleFilter::TkEleOfflineEt(double Et, double Eta) const { + if (std::abs(Eta) < 1.5) + return (barrelScalings_.at(0) + Et * barrelScalings_.at(1) + Et * Et * barrelScalings_.at(2)); + else + return (endcapScalings_.at(0) + Et * endcapScalings_.at(1) + Et * Et * endcapScalings_.at(2)); +} diff --git a/HLTrigger/HLTfilters/plugins/L1TTkEleFilter.h b/HLTrigger/HLTfilters/plugins/L1TTkEleFilter.h new file mode 100644 index 0000000000000..f4bd6d3a9f5ba --- /dev/null +++ b/HLTrigger/HLTfilters/plugins/L1TTkEleFilter.h @@ -0,0 +1,60 @@ +#ifndef L1TTkEleFilter_h +#define L1TTkEleFilter_h + +/** \class L1TTkEleFilter + * + * + * This class is an HLTFilter (-> EDFilter) implementing a very basic + * HLT trigger acting on TkEle candidates + * This has support for *two* collections, since electrons can come + * either from crystal calo or HGCAL + * + * \author Simone Gennai + * \author Thiago Tomei + */ + +#include "HLTrigger/HLTcore/interface/HLTFilter.h" +#include "DataFormats/L1TCorrelator/interface/TkElectron.h" +#include "DataFormats/L1TCorrelator/interface/TkElectronFwd.h" + +// +// class declaration +// + +class L1TTkEleFilter : public HLTFilter { +public: + explicit L1TTkEleFilter(const edm::ParameterSet&); + ~L1TTkEleFilter() override; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + bool hltFilter(edm::Event&, + const edm::EventSetup&, + trigger::TriggerFilterObjectWithRefs& filterproduct) const override; + +private: + edm::InputTag l1TkEleTag1_; //input tag for L1 Tk Ele product + edm::InputTag l1TkEleTag2_; //input tag for L1 Tk Ele product + + typedef std::vector TkEleCollection; + edm::EDGetTokenT tkEleToken1_; // token identifying product containing L1 TkEles + edm::EDGetTokenT tkEleToken2_; // token identifying product containing L1 TkEles + + double min_Pt_; // min pt cut + int min_N_; // min number of candidates above pT cut + double min_Eta_; // min eta cut + double max_Eta_; // max eta cut + edm::ParameterSet scalings_; // all scalings. An indirection level allows extra flexibility + std::vector barrelScalings_; // barrel scalings + std::vector endcapScalings_; // endcap scalings + std::vector etaBinsForIsolation_; // abs. eta bin edges for isolation. First edge at 0.0 must be explicit! + std::vector trkIsolation_; // values for track isolation in the bins defined above + int quality1_; // quality for electrons of 1st collection + int quality2_; // quality for electrons of 2nd collection + int qual1IsMask_; // is qual for electrons of 1st collection a mask? + int qual2IsMask_; // is qual for electrons of 2nd collection a mask? + bool applyQual1_; // should we apply quality 1? + bool applyQual2_; // should we apply quality 2? + + double TkEleOfflineEt(double Et, double Eta) const; +}; + +#endif //L1TTkEleFilter_h diff --git a/HLTrigger/HLTfilters/plugins/L1TTkEmFilter.cc b/HLTrigger/HLTfilters/plugins/L1TTkEmFilter.cc new file mode 100644 index 0000000000000..567099134ba0c --- /dev/null +++ b/HLTrigger/HLTfilters/plugins/L1TTkEmFilter.cc @@ -0,0 +1,197 @@ +/** \class L1TTkEmFilter + * + * See header file for documentation + * + * + * \author Martin Grunewald + * \author Simone Gennai + * \author Thiago Tomei + * + */ + +#include "L1TTkEmFilter.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" + +#include "DataFormats/Common/interface/Handle.h" + +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" +#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" + +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/EventSetupRecord.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +// +// constructors and destructor +// + +L1TTkEmFilter::L1TTkEmFilter(const edm::ParameterSet& iConfig) + : HLTFilter(iConfig), + l1TkEmTag1_(iConfig.getParameter("inputTag1")), + l1TkEmTag2_(iConfig.getParameter("inputTag2")), + tkEmToken1_(consumes(l1TkEmTag1_)), + tkEmToken2_(consumes(l1TkEmTag2_)) { + min_Pt_ = iConfig.getParameter("MinPt"); + min_N_ = iConfig.getParameter("MinN"); + min_Eta_ = iConfig.getParameter("MinEta"); + max_Eta_ = iConfig.getParameter("MaxEta"); + scalings_ = iConfig.getParameter("Scalings"); + barrelScalings_ = scalings_.getParameter >("barrel"); + endcapScalings_ = scalings_.getParameter >("endcap"); + etaBinsForIsolation_ = iConfig.getParameter >("EtaBinsForIsolation"); + etaBinsForIsolation_ = iConfig.getParameter >("EtaBinsForIsolation"); + trkIsolation_ = iConfig.getParameter >("TrkIsolation"); + quality1_ = iConfig.getParameter("Quality1"); + quality2_ = iConfig.getParameter("Quality2"); + qual1IsMask_ = iConfig.getParameter("Qual1IsMask"); + qual2IsMask_ = iConfig.getParameter("Qual2IsMask"); + applyQual1_ = iConfig.getParameter("ApplyQual1"); + applyQual2_ = iConfig.getParameter("ApplyQual2"); + + if (etaBinsForIsolation_.size() != (trkIsolation_.size() + 1)) + throw cms::Exception("ConfigurationError") + << "Vector of isolation values should have same size of vector of eta bins plus one."; +} + +L1TTkEmFilter::~L1TTkEmFilter() = default; + +// +// member functions +// + +void L1TTkEmFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + makeHLTFilterDescription(desc); + desc.add("MinPt", -1.0); + desc.add("MinEta", -5.0); + desc.add("MaxEta", 5.0); + desc.add("MinN", 1); + desc.add("inputTag1", edm::InputTag("L1TkEms1")); + desc.add("inputTag2", edm::InputTag("L1TkEms2")); + desc.add >("EtaBinsForIsolation", {0.0, 1.479}); + desc.add >("TrkIsolation", + { + 99999.9, + }); + desc.add("Quality1", 0); + desc.add("Quality2", 0); + desc.add("Qual1IsMask", false); + desc.add("Qual2IsMask", false); + desc.add("ApplyQual1", false); + desc.add("ApplyQual2", false); + + edm::ParameterSetDescription descScalings; + descScalings.add >("barrel", {0.0, 1.0, 0.0}); + descScalings.add >("endcap", {0.0, 1.0, 0.0}); + desc.add("Scalings", descScalings); + + descriptions.add("L1TTkEmFilter", desc); +} + +// ------------ method called to produce the data ------------ +bool L1TTkEmFilter::hltFilter(edm::Event& iEvent, + const edm::EventSetup& iSetup, + trigger::TriggerFilterObjectWithRefs& filterproduct) const { + using namespace std; + using namespace edm; + using namespace reco; + using namespace trigger; + + // All HLT filters must create and fill an HLT filter object, + // recording any reconstructed physics objects satisfying (or not) + // this HLT filter, and place it in the Event. + + // The filter object + if (saveTags()) { + filterproduct.addCollectionTag(l1TkEmTag1_); + filterproduct.addCollectionTag(l1TkEmTag2_); + } + + // Specific filter code + + // get hold of products from Event + + /// Barrel collection + Handle tkEms1; + iEvent.getByToken(tkEmToken1_, tkEms1); + + /// Endcap collection + Handle tkEms2; + iEvent.getByToken(tkEmToken2_, tkEms2); + + int ntrkEm(0); + // Loop over first collection + auto atrkEms(tkEms1->begin()); + auto otrkEms(tkEms1->end()); + TkEmCollection::const_iterator itkEm; + for (itkEm = atrkEms; itkEm != otrkEms; itkEm++) { + double offlinePt = this->TkEmOfflineEt(itkEm->pt(), itkEm->eta()); + bool passQuality(false); + bool passIsolation(false); + + if (applyQual1_) { + if (qual1IsMask_) + passQuality = (itkEm->EGRef()->hwQual() & quality1_); + else + passQuality = (itkEm->EGRef()->hwQual() == quality1_); + } else + passQuality = true; + + // There has to be a better way to do this. + for (unsigned int etabin = 1; etabin != etaBinsForIsolation_.size(); ++etabin) { + if (std::abs(itkEm->eta()) < etaBinsForIsolation_.at(etabin) and + std::abs(itkEm->eta()) > etaBinsForIsolation_.at(etabin - 1) and + itkEm->trkIsol() < trkIsolation_.at(etabin - 1)) + passIsolation = true; + } + + if (offlinePt >= min_Pt_ && itkEm->eta() <= max_Eta_ && itkEm->eta() >= min_Eta_ && passQuality && passIsolation) { + ntrkEm++; + l1t::TkEmRef ref1(l1t::TkEmRef(tkEms1, distance(atrkEms, itkEm))); + filterproduct.addObject(trigger::TriggerObjectType::TriggerL1TkEm, ref1); + } + } + + // Loop over second collection. Notice we don't reset ntrkEm + atrkEms = tkEms2->begin(); + otrkEms = tkEms2->end(); + for (itkEm = atrkEms; itkEm != otrkEms; itkEm++) { + double offlinePt = this->TkEmOfflineEt(itkEm->pt(), itkEm->eta()); + bool passQuality(false); + bool passIsolation(false); + + if (applyQual2_) { + if (qual2IsMask_) + passQuality = (itkEm->EGRef()->hwQual() & quality2_); + else + passQuality = (itkEm->EGRef()->hwQual() == quality2_); + } else + passQuality = true; + + for (unsigned int etabin = 1; etabin != etaBinsForIsolation_.size(); ++etabin) { + if (std::abs(itkEm->eta()) < etaBinsForIsolation_.at(etabin) and + std::abs(itkEm->eta()) > etaBinsForIsolation_.at(etabin - 1) and + itkEm->trkIsol() < trkIsolation_.at(etabin - 1)) + passIsolation = true; + } + + if (offlinePt >= min_Pt_ && itkEm->eta() <= max_Eta_ && itkEm->eta() >= min_Eta_ && passQuality && passIsolation) { + ntrkEm++; + l1t::TkEmRef ref2(l1t::TkEmRef(tkEms2, distance(atrkEms, itkEm))); + filterproduct.addObject(trigger::TriggerObjectType::TriggerL1TkEm, ref2); + } + } + + // return with final filter decision + const bool accept(ntrkEm >= min_N_); + return accept; +} + +double L1TTkEmFilter::TkEmOfflineEt(double Et, double Eta) const { + if (std::abs(Eta) < 1.5) + return (barrelScalings_.at(0) + Et * barrelScalings_.at(1) + Et * Et * barrelScalings_.at(2)); + else + return (endcapScalings_.at(0) + Et * endcapScalings_.at(1) + Et * Et * endcapScalings_.at(2)); +} diff --git a/HLTrigger/HLTfilters/plugins/L1TTkEmFilter.h b/HLTrigger/HLTfilters/plugins/L1TTkEmFilter.h new file mode 100644 index 0000000000000..8affb6a14b85a --- /dev/null +++ b/HLTrigger/HLTfilters/plugins/L1TTkEmFilter.h @@ -0,0 +1,60 @@ +#ifndef L1TTkEmFilter_h +#define L1TTkEmFilter_h + +/** \class L1TTkEmFilter + * + * + * This class is an HLTFilter (-> EDFilter) implementing a very basic + * HLT trigger acting on TkEm candidates + * This has support for *two* collections, since photons can come + * either from crystal calo or HGCAL + * + * \author Simone Gennai + * \author Thiago Tomei + */ + +#include "HLTrigger/HLTcore/interface/HLTFilter.h" +#include "DataFormats/L1TCorrelator/interface/TkEm.h" +#include "DataFormats/L1TCorrelator/interface/TkEmFwd.h" + +// +// class declaration +// + +class L1TTkEmFilter : public HLTFilter { +public: + explicit L1TTkEmFilter(const edm::ParameterSet&); + ~L1TTkEmFilter() override; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + bool hltFilter(edm::Event&, + const edm::EventSetup&, + trigger::TriggerFilterObjectWithRefs& filterproduct) const override; + +private: + edm::InputTag l1TkEmTag1_; //input tag for L1 Tk Em product + edm::InputTag l1TkEmTag2_; //input tag for L1 Tk Em product + + typedef std::vector TkEmCollection; + edm::EDGetTokenT tkEmToken1_; // token identifying product containing L1 TkEms + edm::EDGetTokenT tkEmToken2_; // token identifying product containing L1 TkEms + + double min_Pt_; // min pt cut + int min_N_; // min number of candidates above pT cut + double min_Eta_; //min eta cut + double max_Eta_; //max eta cut + edm::ParameterSet scalings_; // all scalings. An indirection level allows extra flexibility + std::vector barrelScalings_; // barrel scalings + std::vector endcapScalings_; // endcap scalings + std::vector etaBinsForIsolation_; // abs. eta bin edges for isolation. First edge at 0.0 must be explicit! + std::vector trkIsolation_; // values for track isolation in the bins defined above + int quality1_; // quality for photons of 1st collection + int quality2_; // quality for photons of 2nd collection + int qual1IsMask_; // is qual for photons of 1st collection a mask? + int qual2IsMask_; // is qual for photons of 2nd collection a mask? + bool applyQual1_; // should we apply quality 1? + bool applyQual2_; // should we apply quality 2? + + double TkEmOfflineEt(double Et, double Eta) const; +}; + +#endif //L1TTkEmFilter_h diff --git a/HLTrigger/HLTfilters/plugins/L1TTkMuonFilter.cc b/HLTrigger/HLTfilters/plugins/L1TTkMuonFilter.cc new file mode 100644 index 0000000000000..339bedecfadc4 --- /dev/null +++ b/HLTrigger/HLTfilters/plugins/L1TTkMuonFilter.cc @@ -0,0 +1,182 @@ +/** \class L1TTkMuonFilter + * + * See header file for documentation + * + * + * \author Martin Grunewald + * \author Simone Gennai + * \author Thiago Tomei + * + */ + +#include "L1TTkMuonFilter.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" + +#include "DataFormats/Common/interface/Handle.h" + +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" +#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" +#include "DataFormats/Math/interface/deltaR.h" + +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/EventSetupRecord.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +// +// constructors and destructor +// + +namespace { + bool isDupMuon(const l1t::TkMuonRef& muon, const std::vector& existing) { + for (const auto& exist : existing) { + //it is our understanding that there is an exact eta phi match + //and we should not be concerned with numerical precision + if (reco::deltaR2(*muon, *exist) <= 0) { + return true; + } + } + return false; + } +} // namespace + +L1TTkMuonFilter::L1TTkMuonFilter(const edm::ParameterSet& iConfig) + : HLTFilter(iConfig), + l1TkMuonTag_(iConfig.getParameter("inputTag")), + tkMuonToken_(consumes(l1TkMuonTag_)), + qualityCut_(iConfig.getParameter("qualities")) { + min_Pt_ = iConfig.getParameter("MinPt"); + min_N_ = iConfig.getParameter("MinN"); + min_Eta_ = iConfig.getParameter("MinEta"); + max_Eta_ = iConfig.getParameter("MaxEta"); + applyQuality_ = iConfig.getParameter("applyQuality"); + applyDuplicateRemoval_ = iConfig.getParameter("applyDuplicateRemoval"); + scalings_ = iConfig.getParameter("Scalings"); + barrelScalings_ = scalings_.getParameter>("barrel"); + overlapScalings_ = scalings_.getParameter>("overlap"); + endcapScalings_ = scalings_.getParameter>("endcap"); +} + +L1TTkMuonFilter::~L1TTkMuonFilter() = default; + +// +// member functions +// + +void L1TTkMuonFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + makeHLTFilterDescription(desc); + desc.add("MinPt", -1.0); + desc.add("MinEta", -5.0); + desc.add("MaxEta", 5.0); + desc.add("MinN", 1); + desc.add("inputTag", edm::InputTag("L1TkMuons")); + desc.add("applyQuality", true); + desc.add("applyDuplicateRemoval", true); + desc.add("qualities", MuonQualityCut::makePSetDescription()); + + edm::ParameterSetDescription descScalings; + descScalings.add>("barrel", {0.0, 1.0, 0.0}); + descScalings.add>("overlap", {0.0, 1.0, 0.0}); + descScalings.add>("endcap", {0.0, 1.0, 0.0}); + desc.add("Scalings", descScalings); + + descriptions.add("L1TTkMuonFilter", desc); +} + +// ------------ method called to produce the data ------------ +bool L1TTkMuonFilter::hltFilter(edm::Event& iEvent, + const edm::EventSetup& iSetup, + trigger::TriggerFilterObjectWithRefs& filterproduct) const { + using namespace std; + using namespace edm; + using namespace reco; + using namespace trigger; + + // All HLT filters must create and fill an HLT filter object, + // recording any reconstructed physics objects satisfying (or not) + // this HLT filter, and place it in the Event. + + // The filter object + if (saveTags()) { + filterproduct.addCollectionTag(l1TkMuonTag_); + } + + // Specific filter code + + // get hold of products from Event + Handle tkMuons; + iEvent.getByToken(tkMuonToken_, tkMuons); + + //it looks rather slow to get the added muons back out of the filterproduct + //so we just make a vector of passing and then add them all at the end + std::vector passingMuons; + auto atrkmuons(tkMuons->begin()); + auto otrkmuons(tkMuons->end()); + TkMuonCollection::const_iterator itkMuon; + for (itkMuon = atrkmuons; itkMuon != otrkmuons; itkMuon++) { + double offlinePt = this->TkMuonOfflineEt(itkMuon->pt(), itkMuon->eta()); + bool passesQual = !applyQuality_ || qualityCut_(*itkMuon); + if (passesQual && offlinePt >= min_Pt_ && itkMuon->eta() <= max_Eta_ && itkMuon->eta() >= min_Eta_) { + l1t::TkMuonRef ref(l1t::TkMuonRef(tkMuons, distance(atrkmuons, itkMuon))); + if (!applyDuplicateRemoval_ || !isDupMuon(ref, passingMuons)) { + passingMuons.push_back(ref); + } + } + } + for (const auto& muon : passingMuons) { + filterproduct.addObject(trigger::TriggerObjectType::TriggerL1TkMu, muon); + } + + // return with final filter decision + const bool accept(static_cast(passingMuons.size()) >= min_N_); + return accept; +} + +L1TTkMuonFilter::MuonQualityCut::MuonQualityCut(const edm::ParameterSet& iConfig) { + auto detQualities = iConfig.getParameter>("values"); + for (const auto& detQuality : detQualities) { + auto dets = detQuality.getParameter>("detectors"); + auto qualities = detQuality.getParameter>("qualities"); + std::sort(qualities.begin(), qualities.end()); + for (const auto& det : dets) { + allowedQualities_.insert({det, std::move(qualities)}); + } + } +} + +bool L1TTkMuonFilter::MuonQualityCut::operator()(const l1t::TkMuon& muon) const { + const auto& qualities = allowedQualities_.find(muon.muonDetector()); + if (qualities != allowedQualities_.end()) { + return std::binary_search(qualities->second.begin(), qualities->second.end(), muon.quality()); + } else { + return true; //if qualities for that detector is not specified, we return true + } +} + +void L1TTkMuonFilter::MuonQualityCut::fillPSetDescription(edm::ParameterSetDescription& desc) { + edm::ParameterSetDescription detQualDesc; + detQualDesc.add>("detectors", {3}); + detQualDesc.add>("qualities", {11, 13, 14, 15}); + std::vector detQualDefaults; + edm::ParameterSet detQualDefault; + detQualDefault.addParameter>("detectors", {3}); + detQualDefault.addParameter>("qualities", {11, 13, 14, 15}); + detQualDefaults.push_back(detQualDefault); + desc.addVPSet("values", detQualDesc, detQualDefaults); +} + +edm::ParameterSetDescription L1TTkMuonFilter::MuonQualityCut::makePSetDescription() { + edm::ParameterSetDescription desc; + fillPSetDescription(desc); + return desc; +} + +double L1TTkMuonFilter::TkMuonOfflineEt(double Et, double Eta) const { + if (std::abs(Eta) < 0.9) + return (barrelScalings_.at(0) + Et * barrelScalings_.at(1) + Et * Et * barrelScalings_.at(2)); + else if (std::abs(Eta) < 1.2) + return (overlapScalings_.at(0) + Et * overlapScalings_.at(1) + Et * Et * overlapScalings_.at(2)); + else + return (endcapScalings_.at(0) + Et * endcapScalings_.at(1) + Et * Et * endcapScalings_.at(2)); +} diff --git a/HLTrigger/HLTfilters/plugins/L1TTkMuonFilter.h b/HLTrigger/HLTfilters/plugins/L1TTkMuonFilter.h new file mode 100644 index 0000000000000..f011045b7e836 --- /dev/null +++ b/HLTrigger/HLTfilters/plugins/L1TTkMuonFilter.h @@ -0,0 +1,65 @@ +#ifndef L1TTkMuonFilter_h +#define L1TTkMuonFilter_h + +/** \class L1TTkMuonFilter + * + * + * This class is an HLTFilter (-> EDFilter) implementing a very basic + * HLT trigger acting on TkMuon candidates + * + * + * + * \author Simone Gennai + * \author Thiago Tomei + */ + +#include "HLTrigger/HLTcore/interface/HLTFilter.h" +#include "DataFormats/L1TCorrelator/interface/TkMuon.h" +#include "DataFormats/L1TCorrelator/interface/TkMuonFwd.h" + +// +// class declaration +// + +class L1TTkMuonFilter : public HLTFilter { +public: + explicit L1TTkMuonFilter(const edm::ParameterSet&); + ~L1TTkMuonFilter() override; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + bool hltFilter(edm::Event&, + const edm::EventSetup&, + trigger::TriggerFilterObjectWithRefs& filterproduct) const override; + +private: + class MuonQualityCut { + public: + MuonQualityCut(const edm::ParameterSet&); + bool operator()(const l1t::TkMuon&) const; + static void fillPSetDescription(edm::ParameterSetDescription& desc); + static edm::ParameterSetDescription makePSetDescription(); + + private: + std::unordered_map> allowedQualities_; + }; + + edm::InputTag l1TkMuonTag_; //input tag for L1 Tk Muon product + typedef std::vector TkMuonCollection; + edm::EDGetTokenT tkMuonToken_; // token identifying product containing L1 TkMuons + + double min_Pt_; // min pt cut + int min_N_; // min number of candidates above pT cut + double min_Eta_; // min eta cut + double max_Eta_; // max eta cut + bool applyQuality_; // apply quaility cuts + bool applyDuplicateRemoval_; // apply duplicate removal + edm::ParameterSet scalings_; // all scalings. An indirection level allows extra flexibility + std::vector barrelScalings_; // barrel scalings + std::vector overlapScalings_; // overlap scalings + std::vector endcapScalings_; // endcap scalings + + MuonQualityCut qualityCut_; + + double TkMuonOfflineEt(double Et, double Eta) const; +}; + +#endif //L1TTkMuonFilter_h diff --git a/HLTrigger/HLTfilters/plugins/plugins.cc b/HLTrigger/HLTfilters/plugins/plugins.cc index ca137aa8d5c25..0344c3dd1ec96 100644 --- a/HLTrigger/HLTfilters/plugins/plugins.cc +++ b/HLTrigger/HLTfilters/plugins/plugins.cc @@ -39,6 +39,14 @@ using namespace trigger; #include "HLTSinglet.h" #include "HLTSinglet.cc" +#include "L1TTkEleFilter.h" +#include "L1TTkEmFilter.h" +#include "L1TTkMuonFilter.h" +#include "L1TPFTauFilter.h" +#include "L1THPSPFTauFilter.h" +#include "L1TJetFilterT.h" +#include "L1TEnergySumFilterT.h" + // filter for HLT candidates typedef HLTSinglet HLT1Photon; typedef HLTSinglet HLT1Electron; @@ -62,6 +70,12 @@ typedef HLTSinglet HLTLevel1Jet; // the actual type is ovrridden object-by-object (TriggerL1CenJet, TriggerL1ForJet or TriggerL1TauJet) typedef HLTSinglet HLTLevel1Muon; +// filters for Phase-2 +typedef L1TJetFilterT L1TJetFilter; +typedef L1TJetFilterT L1TPFJetFilter; +typedef L1TEnergySumFilterT L1TEnergySumFilter; +typedef L1TEnergySumFilterT L1TPFEnergySumFilter; + #include "HLTSmartSinglet.h" #include "HLTSmartSinglet.cc" @@ -157,6 +171,17 @@ DEFINE_FWK_MODULE(HLTLevel1MET); DEFINE_FWK_MODULE(HLTLevel1Jet); DEFINE_FWK_MODULE(HLTLevel1Muon); +// Phase-2 +DEFINE_FWK_MODULE(L1TTkEleFilter); +DEFINE_FWK_MODULE(L1TTkEmFilter); +DEFINE_FWK_MODULE(L1TTkMuonFilter); +DEFINE_FWK_MODULE(L1TPFTauFilter); +DEFINE_FWK_MODULE(L1THPSPFTauFilter); +DEFINE_FWK_MODULE(L1TJetFilter); +DEFINE_FWK_MODULE(L1TPFJetFilter); +DEFINE_FWK_MODULE(L1TEnergySumFilter); +DEFINE_FWK_MODULE(L1TPFEnergySumFilter); + DEFINE_FWK_MODULE(HLTGlobalSumsPFMET); DEFINE_FWK_MODULE(HLTGlobalSumsCaloMET); DEFINE_FWK_MODULE(HLTGlobalSumsMET); diff --git a/HLTrigger/HLTfilters/test/HLTBeamModeFilter_cfg.py b/HLTrigger/HLTfilters/test/HLTBeamModeFilter_cfg.py index 827f4be719f77..d224f503e4c1f 100644 --- a/HLTrigger/HLTfilters/test/HLTBeamModeFilter_cfg.py +++ b/HLTrigger/HLTfilters/test/HLTBeamModeFilter_cfg.py @@ -94,9 +94,8 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['gtEvmDigis', 'hltBeamModeFilter'] -process.MessageLogger.categories.append('L1GlobalTriggerEvmRawToDigi') -process.MessageLogger.categories.append('HLTBeamModeFilter') -#process.MessageLogger.destinations = ['cerr'] +process.MessageLogger.L1GlobalTriggerEvmRawToDigi=dict() +process.MessageLogger.HLTBeamModeFilter=dict() process.MessageLogger.cerr.threshold = 'DEBUG' #process.MessageLogger.cerr.threshold = 'INFO' diff --git a/HLTrigger/HLTfilters/test/HLTLevel1GTSeed_cfg.py b/HLTrigger/HLTfilters/test/HLTLevel1GTSeed_cfg.py index d31da685ca171..c7b3a7fa282ad 100644 --- a/HLTrigger/HLTfilters/test/HLTLevel1GTSeed_cfg.py +++ b/HLTrigger/HLTfilters/test/HLTLevel1GTSeed_cfg.py @@ -474,8 +474,7 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['hltLevel1GTSeed'] -process.MessageLogger.categories.append('HLTLevel1GTSeed') -#process.MessageLogger.destinations = ['cerr'] +process.MessageLogger.HLTLevel1GTSeed=dict() process.MessageLogger.cerr.threshold = 'DEBUG' #process.MessageLogger.cerr.threshold = 'INFO' diff --git a/HLTrigger/HLTfilters/test/test_Phase2L1THLT.py b/HLTrigger/HLTfilters/test/test_Phase2L1THLT.py new file mode 100644 index 0000000000000..813010e42feff --- /dev/null +++ b/HLTrigger/HLTfilters/test/test_Phase2L1THLT.py @@ -0,0 +1,201 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("HLTX") + +### Load all ESSources, ESProducers and PSets +# process.load("HLTrigger.Configuration.Phase2.hltPhase2Setup_cff") + +### GlobalTag +# process.load("Configuration.StandardSequences.CondDBESSource_cff") +# process.GlobalTag.globaltag = "112X_mcRun4_realistic_T15_v2" + +process.l1tEle7 = cms.EDFilter( + "L1TTkEleFilter", + MinPt=cms.double(7.0), + MinEta=cms.double(-2.4), + MaxEta=cms.double(2.4), + inputTag1=cms.InputTag("L1TkElectronsEllipticMatchCrystal", "EG"), + inputTag2=cms.InputTag("L1TkElectronsEllipticMatchHGC", "EG"), + Scalings=cms.PSet( + barrel=cms.vdouble(0.805095, 1.18336, 0.0), + endcap=cms.vdouble(0.453144, 1.26205, 0.0), + ), + EtaBinsForIsolation=cms.vdouble(0.0, 9999.9), + TrkIsolation=cms.vdouble(99999.9), # No isolation + ApplyQual1=cms.bool(True), + ApplyQual2=cms.bool(True), + Quality1=cms.int32(2), # 0x2 + Quality2=cms.int32(5), + Qual1IsMask=cms.bool(True), + Qual2IsMask=cms.bool(False), +) + +process.l1tIsoEle7 = cms.EDFilter( + "L1TTkEleFilter", + MinPt=cms.double(7.0), + MinEta=cms.double(-2.4), + MaxEta=cms.double(2.4), + inputTag1=cms.InputTag("L1TkElectronsEllipticMatchCrystal", "EG"), + inputTag2=cms.InputTag("L1TkElectronsEllipticMatchHGC", "EG"), + Scalings=cms.PSet( + barrel=cms.vdouble(0.434262, 1.20586, 0.0), + endcap=cms.vdouble(0.266186, 1.25976, 0.0), + ), + EtaBinsForIsolation=cms.vdouble(0.0, 1.479, 9999.9), + TrkIsolation=cms.vdouble(0.12, 0.2), + ApplyQual1=cms.bool(False), + ApplyQual2=cms.bool(True), + Quality1=cms.int32(-1), + Quality2=cms.int32(5), + Qual1IsMask=cms.bool(False), + Qual2IsMask=cms.bool(False), +) + +process.l1tIsoPho7 = cms.EDFilter( + "L1TTkEmFilter", + MinPt=cms.double(7.0), + MinEta=cms.double(-2.4), + MaxEta=cms.double(2.4), + inputTag1=cms.InputTag("L1TkPhotonsCrystal", "EG"), + inputTag2=cms.InputTag("L1TkPhotonsHGC", "EG"), + Scalings=cms.PSet( + barrel=cms.vdouble(2.54255, 1.08749, 0.0), + endcap=cms.vdouble(2.11186, 1.15524, 0.0), + ), + EtaBinsForIsolation=cms.vdouble(0.0, 1.479, 9999.9), + TrkIsolation=cms.vdouble(0.28, 0.35), + ApplyQual1=cms.bool(False), + ApplyQual2=cms.bool(True), + Quality1=cms.int32(2), # 0x2 "second bit" + Quality2=cms.int32(5), + Qual1IsMask=cms.bool(True), + Qual2IsMask=cms.bool(False), +) + +process.l1tMuon7 = cms.EDFilter( + "L1TTkMuonFilter", + MinPt=cms.double(7.0), + MinEta=cms.double(-2.4), + MaxEta=cms.double(2.4), + inputTag=cms.InputTag("L1TkMuons"), + Scalings=cms.PSet( + barrel=cms.vdouble(0.802461, 1.04193, 0.0), + overlap=cms.vdouble(0.921315, 1.03611, 0.0), + endcap=cms.vdouble(0.828802, 1.03447, 0.0), + ), +) + +process.l1tDoubleMuon7 = cms.EDFilter( + "L1TTkMuonFilter", + MinN=cms.int32(2), + MinPt=cms.double(7.0), + MinEta=cms.double(-2.4), + MaxEta=cms.double(2.4), + inputTag=cms.InputTag("L1TkMuons"), + Scalings=cms.PSet( + barrel=cms.vdouble(0.802461, 1.04193, 0.0), + overlap=cms.vdouble(0.921315, 1.03611, 0.0), + endcap=cms.vdouble(0.828802, 1.03447, 0.0), + ), +) + +process.l1tDoubleMuon7DZ0p33 = cms.EDFilter( + "HLT2L1TkMuonL1TkMuonDZ", + originTag1=cms.VInputTag( + "L1TkMuons", + ), + originTag2=cms.VInputTag( + "L1TkMuons", + ), + inputTag1=cms.InputTag("l1tDoubleMuon7"), + inputTag2=cms.InputTag("l1tDoubleMuon7"), + triggerType1=cms.int32(-114), # L1TkMuon + triggerType2=cms.int32(-114), # L1TkMuon + MinDR=cms.double(-1), + MaxDZ=cms.double(0.33), + MinPixHitsForDZ=cms.int32(0), # Immaterial + checkSC=cms.bool(False), # Immaterial + MinN=cms.int32(1), +) + +process.l1tPFJet64 = cms.EDFilter( + "L1TPFJetFilter", + inputTag=cms.InputTag("ak4PFL1PuppiCorrected"), + Scalings=cms.PSet( + barrel=cms.vdouble(11.1254, 1.40627, 0), + overlap=cms.vdouble(24.8375, 1.4152, 0), + endcap=cms.vdouble(42.4039, 1.33052, 0), + ), + MinPt=cms.double(64.0), + MinEta=cms.double(-2.4), + MaxEta=cms.double(2.4), +) + +process.L1PFHtMht = cms.EDProducer( + "HLTHtMhtProducer", + jetsLabel=cms.InputTag("ak4PFL1PuppiCorrected"), + minPtJetHt=cms.double(30), + maxEtaJetHt=cms.double(2.4), +) + +# ### Notice that there is no MHT seed in the Phase-II Level-1 Menu... +# # Possible choices for TypeOfSum are: MET, MHT, ETT, HT +# # but notice that if you are using a MET seed you +# # should probably use the precomputed one. + +# # We don't have scaling for MHT... +process.l1tPFMht40 = cms.EDFilter( + "L1TEnergySumFilter", + inputTag=cms.InputTag("L1PFHtMht"), + Scalings=cms.PSet( + theScalings=cms.vdouble(0, 1, 0), + ), + TypeOfSum=cms.string("MHT"), + MinPt=cms.double(40.0), +) + +process.l1tPFHt90 = cms.EDFilter( + "L1TEnergySumFilter", + inputTag=cms.InputTag("L1PFHtMht"), + Scalings=cms.PSet( + # theScalings = cms.vdouble(-7.12716,1.03067,0), # PFPhase1HTOfflineEtCut + theScalings=cms.vdouble(50.0182, 1.0961, 0), # PFPhase1HT090OfflineEtCut + ), + TypeOfSum=cms.string("MHT"), + MinPt=cms.double(90.0), +) + +process.l1tPFMet90 = cms.EDFilter( + "L1TPFEnergySumFilter", + inputTag=cms.InputTag("l1PFMetPuppi"), + Scalings=cms.PSet( + # theScalings = cms.vdouble(-7.24159,1.20973,0), # PuppiMETOfflineEtCut + theScalings=cms.vdouble(54.2859, 1.39739, 0), # PuppiMET090OfflineEtCut + # theScalings = cms.vdouble(0,0,0), + ), + TypeOfSum=cms.string("MET"), + MinPt=cms.double(90.0), +) + +process.HLT_SingleEle7 = cms.Path(process.l1tEle7) +process.HLT_SingleIsoEle7 = cms.Path(process.l1tIsoEle7) +process.HLT_SingleIsoPhoton7 = cms.Path(process.l1tIsoPho7) +process.HLT_SingleMu7 = cms.Path(process.l1tMuon7) +process.HLT_DoubleMu7_DZ0p33 = cms.Path( + process.l1tDoubleMuon7 + process.l1tDoubleMuon7DZ0p33 +) +process.HLT_SingleJet64 = cms.Path(process.l1tPFJet64) +process.HLT_MHT40 = cms.Path(process.L1PFHtMht + process.l1tPFMht40) +process.HLT_HT90 = cms.Path(process.L1PFHtMht + process.l1tPFHt90) +process.HLT_MET90 = cms.Path(process.l1tPFMet90) + +process.source = cms.Source( + "PoolSource", + fileNames=cms.untracked.vstring( + "/store/mc/Phase2HLTTDRSummer20ReRECOMiniAOD/DYToLL_M-50_TuneCP5_14TeV-pythia8/FEVT/PU200_pilot_111X_mcRun4_realistic_T15_v1-v1/270000/FF7BF0E2-1380-2D48-BB19-F79E6907CD5D.root", + # "/store/mc/Phase2HLTTDRSummer20ReRECOMiniAOD/SingleElectron_PT2to200/FEVT/PU200_111X_mcRun4_realistic_T15_v1_ext2-v1/270000/0064D31F-F48B-3144-8CB9-17F820065E01.root", + ), +) + +process.maxEvents.input = cms.untracked.int32(-1) +process.options = cms.untracked.PSet(wantSummary=cms.untracked.bool(True)) diff --git a/HLTrigger/JetMET/interface/HLTHtMhtProducer.h b/HLTrigger/JetMET/interface/HLTHtMhtProducer.h index 7ddff58c3200d..8d4bdb357cbbc 100644 --- a/HLTrigger/JetMET/interface/HLTHtMhtProducer.h +++ b/HLTrigger/JetMET/interface/HLTHtMhtProducer.h @@ -19,10 +19,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/Common/interface/View.h" -#include "DataFormats/JetReco/interface/Jet.h" -#include "DataFormats/JetReco/interface/JetCollection.h" -#include "DataFormats/METReco/interface/MET.h" -#include "DataFormats/METReco/interface/METFwd.h" +#include "DataFormats/Candidate/interface/CandidateFwd.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" @@ -62,7 +59,7 @@ class HLTHtMhtProducer : public edm::stream::EDProducer<> { edm::InputTag jetsLabel_; edm::InputTag pfCandidatesLabel_; - edm::EDGetTokenT m_theJetToken; + edm::EDGetTokenT m_theJetToken; edm::EDGetTokenT m_thePFCandidateToken; }; diff --git a/HLTrigger/JetMET/interface/HLTMhtProducer.h b/HLTrigger/JetMET/interface/HLTMhtProducer.h index 71fedeb3b5d2b..6411636ded259 100644 --- a/HLTrigger/JetMET/interface/HLTMhtProducer.h +++ b/HLTrigger/JetMET/interface/HLTMhtProducer.h @@ -18,10 +18,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/Common/interface/View.h" -#include "DataFormats/JetReco/interface/Jet.h" -#include "DataFormats/JetReco/interface/JetCollection.h" -#include "DataFormats/METReco/interface/MET.h" -#include "DataFormats/METReco/interface/METFwd.h" +#include "DataFormats/Candidate/interface/CandidateFwd.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" @@ -58,7 +55,7 @@ class HLTMhtProducer : public edm::stream::EDProducer<> { edm::InputTag jetsLabel_; edm::InputTag pfCandidatesLabel_; - edm::EDGetTokenT m_theJetToken; + edm::EDGetTokenT m_theJetToken; edm::EDGetTokenT m_thePFCandidateToken; }; diff --git a/HLTrigger/JetMET/plugins/BuildFile.xml b/HLTrigger/JetMET/plugins/BuildFile.xml index 691b52a6fdf8b..16f33f7e7f7f9 100644 --- a/HLTrigger/JetMET/plugins/BuildFile.xml +++ b/HLTrigger/JetMET/plugins/BuildFile.xml @@ -1,10 +1,13 @@ + + + - + diff --git a/HLTrigger/JetMET/plugins/HLTMultiplicityValueProducer.h b/HLTrigger/JetMET/plugins/HLTMultiplicityValueProducer.h new file mode 100644 index 0000000000000..0e2d8f1e9f2b4 --- /dev/null +++ b/HLTrigger/JetMET/plugins/HLTMultiplicityValueProducer.h @@ -0,0 +1,73 @@ +#ifndef HLTrigger_JetMET_plugins_HLTMultiplicityValueProducer_h +#define HLTrigger_JetMET_plugins_HLTMultiplicityValueProducer_h + +#include +#include + +#include "CommonTools/Utils/interface/StringCutObjectSelector.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +template +class HLTMultiplicityValueProducer : public edm::global::EDProducer<> { +public: + explicit HLTMultiplicityValueProducer(edm::ParameterSet const&); + ~HLTMultiplicityValueProducer() override {} + + static void fillDescriptions(edm::ConfigurationDescriptions&); + +protected: + void produce(edm::StreamID, edm::Event&, edm::EventSetup const&) const override; + + edm::EDGetTokenT> const src_token_; + StringCutObjectSelector const strObjSelector_; + OUT_TYPE const defaultValue_; +}; + +template +HLTMultiplicityValueProducer::HLTMultiplicityValueProducer(edm::ParameterSet const& iConfig) + : src_token_(consumes>(iConfig.getParameter("src"))), + strObjSelector_(StringCutObjectSelector(iConfig.getParameter("cut"))), + defaultValue_(iConfig.getParameter("defaultValue")) { + produces(); +} + +template +void HLTMultiplicityValueProducer::produce(edm::StreamID, + edm::Event& iEvent, + edm::EventSetup const& iSetup) const { + auto const& objHandle(iEvent.getHandle(src_token_)); + + if (objHandle.isValid()) { + LogDebug("Input") << "size of input collection: " << objHandle->size(); + + OUT_TYPE objMult(0); + for (auto const& obj : *objHandle) { + if (strObjSelector_(obj)) { + ++objMult; + } + } + + LogDebug("Output") << "size of selected input objects: " << objMult; + + iEvent.put(std::make_unique(objMult)); + } else { + iEvent.put(std::make_unique(defaultValue_)); + } +} + +template +void HLTMultiplicityValueProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("src", edm::InputTag(""))->setComment("input collection"); + desc.add("cut", "")->setComment("string for StringCutObjectSelector"); + desc.add("defaultValue", 0)->setComment("default output value (used when input collection is unavailable)"); + descriptions.addWithDefaultLabel(desc); +} + +#endif // HLTrigger_JetMET_plugins_HLTMultiplicityValueProducer_h diff --git a/HLTrigger/JetMET/plugins/HLTMultiplicityValueProducerFromNestedCollection.cc b/HLTrigger/JetMET/plugins/HLTMultiplicityValueProducerFromNestedCollection.cc new file mode 100644 index 0000000000000..19cf8dc232806 --- /dev/null +++ b/HLTrigger/JetMET/plugins/HLTMultiplicityValueProducerFromNestedCollection.cc @@ -0,0 +1,12 @@ +#include "HLTMultiplicityValueProducerFromNestedCollection.h" +#include "DataFormats/Phase2TrackerCluster/interface/Phase2TrackerCluster1D.h" +#include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +typedef HLTMultiplicityValueProducerFromNestedCollection + HLTSiPixelClusterMultiplicityValueProducer; +DEFINE_FWK_MODULE(HLTSiPixelClusterMultiplicityValueProducer); + +typedef HLTMultiplicityValueProducerFromNestedCollection + HLTSiPhase2TrackerClusterMultiplicityValueProducer; +DEFINE_FWK_MODULE(HLTSiPhase2TrackerClusterMultiplicityValueProducer); diff --git a/HLTrigger/JetMET/plugins/HLTMultiplicityValueProducerFromNestedCollection.h b/HLTrigger/JetMET/plugins/HLTMultiplicityValueProducerFromNestedCollection.h new file mode 100644 index 0000000000000..36d55ab237c8c --- /dev/null +++ b/HLTrigger/JetMET/plugins/HLTMultiplicityValueProducerFromNestedCollection.h @@ -0,0 +1,67 @@ +#ifndef HLTrigger_JetMET_plugins_HLTMultiplicityValueProducerFromNestedCollection_h +#define HLTrigger_JetMET_plugins_HLTMultiplicityValueProducerFromNestedCollection_h + +#include + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +template +class HLTMultiplicityValueProducerFromNestedCollection : public edm::global::EDProducer<> { +public: + explicit HLTMultiplicityValueProducerFromNestedCollection(edm::ParameterSet const&); + ~HLTMultiplicityValueProducerFromNestedCollection() override {} + + static void fillDescriptions(edm::ConfigurationDescriptions&); + +protected: + void produce(edm::StreamID, edm::Event&, edm::EventSetup const&) const override; + + edm::EDGetTokenT const src_token_; + OUT_TYPE const defaultValue_; +}; + +template +HLTMultiplicityValueProducerFromNestedCollection::HLTMultiplicityValueProducerFromNestedCollection( + edm::ParameterSet const& iConfig) + : src_token_(consumes(iConfig.getParameter("src"))), + defaultValue_(iConfig.getParameter("defaultValue")) { + produces(); +} + +template +void HLTMultiplicityValueProducerFromNestedCollection::produce( + edm::StreamID, edm::Event& iEvent, edm::EventSetup const& iSetup) const { + auto const& objHandle(iEvent.getHandle(src_token_)); + + if (objHandle.isValid()) { + LogDebug("Input") << "size of input collection: " << objHandle->size(); + + OUT_TYPE objMult(0); + for (auto const& obj : *objHandle) { + objMult += obj.size(); + } + + LogDebug("Output") << "size of output objects: " << objMult; + + iEvent.put(std::make_unique(objMult)); + } else { + iEvent.put(std::make_unique(defaultValue_)); + } +} + +template +void HLTMultiplicityValueProducerFromNestedCollection::fillDescriptions( + edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("src", edm::InputTag(""))->setComment("input collection"); + desc.add("defaultValue", 0)->setComment("default output value (used when input collection is unavailable)"); + descriptions.addWithDefaultLabel(desc); +} + +#endif // HLTrigger_JetMET_plugins_HLTMultiplicityValueProducerFromNestedCollection_h diff --git a/HLTrigger/JetMET/src/HLTHtMhtProducer.cc b/HLTrigger/JetMET/src/HLTHtMhtProducer.cc index 913eb9ed2aee5..5d324a4d721e6 100644 --- a/HLTrigger/JetMET/src/HLTHtMhtProducer.cc +++ b/HLTrigger/JetMET/src/HLTHtMhtProducer.cc @@ -13,6 +13,9 @@ #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/METReco/interface/MET.h" +#include "DataFormats/METReco/interface/METFwd.h" + // Constructor HLTHtMhtProducer::HLTHtMhtProducer(const edm::ParameterSet& iConfig) : usePt_(iConfig.getParameter("usePt")), @@ -25,7 +28,7 @@ HLTHtMhtProducer::HLTHtMhtProducer(const edm::ParameterSet& iConfig) maxEtaJetMht_(iConfig.getParameter("maxEtaJetMht")), jetsLabel_(iConfig.getParameter("jetsLabel")), pfCandidatesLabel_(iConfig.getParameter("pfCandidatesLabel")) { - m_theJetToken = consumes>(jetsLabel_); + m_theJetToken = consumes(jetsLabel_); m_thePFCandidateToken = consumes(pfCandidatesLabel_); // Register the products @@ -60,7 +63,7 @@ void HLTHtMhtProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup if (pfCandidatesLabel_.label().empty()) excludePFMuons_ = false; - edm::Handle jets; + edm::Handle jets; iEvent.getByToken(m_theJetToken, jets); edm::Handle pfCandidates; @@ -70,32 +73,30 @@ void HLTHtMhtProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup int nj_ht = 0, nj_mht = 0; double ht = 0., mhx = 0., mhy = 0.; - if (!jets->empty()) { - for (reco::JetView::const_iterator j = jets->begin(); j != jets->end(); ++j) { - double pt = usePt_ ? j->pt() : j->et(); - double eta = j->eta(); - double phi = j->phi(); - double px = usePt_ ? j->px() : j->et() * cos(phi); - double py = usePt_ ? j->py() : j->et() * sin(phi); - - if (pt > minPtJetHt_ && std::abs(eta) < maxEtaJetHt_) { - ht += pt; - ++nj_ht; - } + for (auto const& aJet : *jets) { + double const pt = usePt_ ? aJet.pt() : aJet.et(); + double const eta = aJet.eta(); + double const phi = aJet.phi(); + double const px = usePt_ ? aJet.px() : aJet.et() * cos(phi); + double const py = usePt_ ? aJet.py() : aJet.et() * sin(phi); - if (pt > minPtJetMht_ && std::abs(eta) < maxEtaJetMht_) { - mhx -= px; - mhy -= py; - ++nj_mht; - } + if (pt > minPtJetHt_ && std::abs(eta) < maxEtaJetHt_) { + ht += pt; + ++nj_ht; + } + + if (pt > minPtJetMht_ && std::abs(eta) < maxEtaJetMht_) { + mhx -= px; + mhy -= py; + ++nj_mht; } } if (excludePFMuons_) { - for (auto const& j : *pfCandidates) { - if (std::abs(j.pdgId()) == 13) { - mhx += j.px(); - mhy += j.py(); + for (auto const& aCand : *pfCandidates) { + if (std::abs(aCand.pdgId()) == 13) { + mhx += aCand.px(); + mhy += aCand.py(); } } } diff --git a/HLTrigger/JetMET/src/HLTMhtProducer.cc b/HLTrigger/JetMET/src/HLTMhtProducer.cc index ecf0b972d374f..2f2faf4512e2b 100644 --- a/HLTrigger/JetMET/src/HLTMhtProducer.cc +++ b/HLTrigger/JetMET/src/HLTMhtProducer.cc @@ -13,6 +13,9 @@ #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/METReco/interface/MET.h" +#include "DataFormats/METReco/interface/METFwd.h" + // Constructor HLTMhtProducer::HLTMhtProducer(const edm::ParameterSet& iConfig) : usePt_(iConfig.getParameter("usePt")), @@ -22,7 +25,7 @@ HLTMhtProducer::HLTMhtProducer(const edm::ParameterSet& iConfig) maxEtaJet_(iConfig.getParameter("maxEtaJet")), jetsLabel_(iConfig.getParameter("jetsLabel")), pfCandidatesLabel_(iConfig.getParameter("pfCandidatesLabel")) { - m_theJetToken = consumes>(jetsLabel_); + m_theJetToken = consumes(jetsLabel_); if (pfCandidatesLabel_.label().empty()) excludePFMuons_ = false; if (excludePFMuons_) @@ -54,7 +57,7 @@ void HLTMhtProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) // Create a pointer to the products std::unique_ptr result(new reco::METCollection()); - edm::Handle jets; + edm::Handle jets; iEvent.getByToken(m_theJetToken, jets); edm::Handle pfCandidates; @@ -64,28 +67,26 @@ void HLTMhtProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) int nj = 0; double sumet = 0., mhx = 0., mhy = 0.; - if (!jets->empty()) { - for (reco::JetView::const_iterator j = jets->begin(); j != jets->end(); ++j) { - double pt = usePt_ ? j->pt() : j->et(); - double eta = j->eta(); - double phi = j->phi(); - double px = usePt_ ? j->px() : j->et() * cos(phi); - double py = usePt_ ? j->py() : j->et() * sin(phi); - - if (pt > minPtJet_ && std::abs(eta) < maxEtaJet_) { - mhx -= px; - mhy -= py; - sumet += pt; - ++nj; - } + for (auto const& aJet : *jets) { + double const pt = usePt_ ? aJet.pt() : aJet.et(); + double const eta = aJet.eta(); + double const phi = aJet.phi(); + double const px = usePt_ ? aJet.px() : aJet.et() * cos(phi); + double const py = usePt_ ? aJet.py() : aJet.et() * sin(phi); + + if (pt > minPtJet_ && std::abs(eta) < maxEtaJet_) { + mhx -= px; + mhy -= py; + sumet += pt; + ++nj; } } if (excludePFMuons_) { - for (auto const& j : *pfCandidates) { - if (std::abs(j.pdgId()) == 13) { - mhx += j.px(); - mhy += j.py(); + for (auto const& aCand : *pfCandidates) { + if (std::abs(aCand.pdgId()) == 13) { + mhx += aCand.px(); + mhy += aCand.py(); } } } diff --git a/HLTrigger/Muon/plugins/HLTMuonL3PreFilter.cc b/HLTrigger/Muon/plugins/HLTMuonL3PreFilter.cc index 2de22fbfd8355..fd65e34fd9169 100644 --- a/HLTrigger/Muon/plugins/HLTMuonL3PreFilter.cc +++ b/HLTrigger/Muon/plugins/HLTMuonL3PreFilter.cc @@ -175,7 +175,7 @@ bool HLTMuonL3PreFilter::hltFilter(Event& iEvent, edm::Ref l3seedRef = tk->seedRef().castTo >(); TrackRef staTrack = l3seedRef->l2Track(); - LogDebug("HLTMuonL3PreFilter") << "L2 from: " << iEvent.getProvenance(staTrack.id()).moduleLabel() + LogDebug("HLTMuonL3PreFilter") << "L2 from: " << iEvent.getStableProvenance(staTrack.id()).moduleLabel() << " index: " << staTrack.key(); L2toL3s[staTrack].push_back(RecoChargedCandidateRef(mucands, i)); } diff --git a/HLTrigger/Muon/plugins/HLTMuonTrkL1TkMuFilter.cc b/HLTrigger/Muon/plugins/HLTMuonTrkL1TkMuFilter.cc new file mode 100644 index 0000000000000..2107461f6688f --- /dev/null +++ b/HLTrigger/Muon/plugins/HLTMuonTrkL1TkMuFilter.cc @@ -0,0 +1,131 @@ +#include "HLTMuonTrkL1TkMuFilter.h" + +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" +#include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" +#include "DataFormats/Math/interface/deltaR.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" +#include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h" +#include "DataFormats/MuonReco/interface/MuonFwd.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/MuonSeed/interface/L3MuonTrajectorySeed.h" +#include "DataFormats/MuonSeed/interface/L3MuonTrajectorySeedCollection.h" + +#include "TrackingTools/PatternTools/interface/ClosestApproachInRPhi.h" +#include "TrackingTools/TransientTrack/interface/TransientTrack.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/Utilities/interface/EDMException.h" + +HLTMuonTrkL1TkMuFilter::HLTMuonTrkL1TkMuFilter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig) { + m_muonsTag = iConfig.getParameter("inputMuonCollection"); + m_muonsToken = consumes(m_muonsTag); + m_candsTag = iConfig.getParameter("inputCandCollection"); + m_candsToken = consumes(m_candsTag); + m_previousCandTag = iConfig.getParameter("previousCandTag"); + m_previousCandToken = consumes(m_previousCandTag); + m_minTrkHits = iConfig.getParameter("minTrkHits"); + m_minMuonHits = iConfig.getParameter("minMuonHits"); + m_minMuonStations = iConfig.getParameter("minMuonStations"); + m_maxNormalizedChi2 = iConfig.getParameter("maxNormalizedChi2"); + m_minPt = iConfig.getParameter("minPt"); + m_minN = iConfig.getParameter("minN"); + m_maxAbsEta = iConfig.getParameter("maxAbsEta"); +} + +void HLTMuonTrkL1TkMuFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + makeHLTFilterDescription(desc); + desc.add("inputMuonCollection", edm::InputTag("")); + desc.add("inputCandCollection", edm::InputTag("")); + desc.add("previousCandTag", edm::InputTag("")); + desc.add("minTrkHits", -1); + desc.add("minMuonHits", -1); + desc.add("minMuonStations", -1); + desc.add("maxNormalizedChi2", 1e99); + desc.add("trkMuonId", 0); + desc.add("minPt", 24); + desc.add("minN", 1); + desc.add("maxAbsEta", 1e99); + descriptions.add("hltMuonTrkL1TkMuFilter", desc); +} + +bool HLTMuonTrkL1TkMuFilter::hltFilter(edm::Event& iEvent, + const edm::EventSetup& iSetup, + trigger::TriggerFilterObjectWithRefs& filterproduct) const { + edm::Handle muons; + iEvent.getByToken(m_muonsToken, muons); + edm::Handle cands; + iEvent.getByToken(m_candsToken, cands); + if (saveTags()) + filterproduct.addCollectionTag(m_candsTag); + if (cands->size() != muons->size()) + throw edm::Exception(edm::errors::Configuration) + << "Both input collection must be aligned and represent same physical muon objects"; + + edm::Handle previousLevelCands; + std::vector vl1cands; + + bool check_l1match = true; + if (m_previousCandTag == edm::InputTag("")) + check_l1match = false; + if (check_l1match) { + iEvent.getByToken(m_previousCandToken, previousLevelCands); + previousLevelCands->getObjects(trigger::TriggerL1TkMu, vl1cands); + } + + std::vector filteredMuons; + for (unsigned int i = 0; i < muons->size(); ++i) { + const reco::Muon& muon(muons->at(i)); + // check for dR match to L1 muons + if (check_l1match) { + bool matchl1 = false; + for (auto const& l1cand : vl1cands) { + if (deltaR2(muon, *l1cand) < 0.3 * 0.3) { + matchl1 = true; + break; + } + } + if (!matchl1) + continue; + } + + if (muon.numberOfMatchedStations() < m_minMuonStations) + continue; + + if (!muon.innerTrack().isNull()) { + if (muon.innerTrack()->numberOfValidHits() < m_minTrkHits) + continue; + } + + if (!muon.globalTrack().isNull()) { + if (muon.globalTrack()->normalizedChi2() > m_maxNormalizedChi2) + continue; + if (muon.globalTrack()->hitPattern().numberOfValidMuonHits() < m_minMuonHits) + continue; + } + + if (muon.pt() < m_minPt) + continue; + + if (std::abs(muon.eta()) > m_maxAbsEta) + continue; + + filteredMuons.push_back(i); + } + + for (std::vector::const_iterator itr = filteredMuons.begin(); itr != filteredMuons.end(); ++itr) + filterproduct.addObject(trigger::TriggerMuon, reco::RecoChargedCandidateRef(cands, *itr)); + + return filteredMuons.size() >= m_minN; +} + +// declare this class as a framework plugin +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(HLTMuonTrkL1TkMuFilter); diff --git a/HLTrigger/Muon/plugins/HLTMuonTrkL1TkMuFilter.h b/HLTrigger/Muon/plugins/HLTMuonTrkL1TkMuFilter.h new file mode 100644 index 0000000000000..bc145acc4ca59 --- /dev/null +++ b/HLTrigger/Muon/plugins/HLTMuonTrkL1TkMuFilter.h @@ -0,0 +1,44 @@ +#ifndef HLTMuonTrkL1TkMuFilter_h +#define HLTMuonTrkL1TkMuFilter_h + +#include "HLTrigger/HLTcore/interface/HLTFilter.h" +#include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h" +#include "DataFormats/MuonReco/interface/MuonFwd.h" +#include "DataFormats/MuonReco/interface/MuonSelectors.h" +#include "DataFormats/L1TCorrelator/interface/TkMuon.h" +#include "DataFormats/L1TCorrelator/interface/TkMuonFwd.h" + +namespace edm { + class ConfigurationDescriptions; +} + +class HLTMuonTrkL1TkMuFilter : public HLTFilter { +public: + HLTMuonTrkL1TkMuFilter(const edm::ParameterSet&); + ~HLTMuonTrkL1TkMuFilter() override {} + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + bool hltFilter(edm::Event&, + const edm::EventSetup&, + trigger::TriggerFilterObjectWithRefs& filterproduct) const override; + +private: + // WARNING: two input collection represent should be aligned and represent + // the same list of muons, just stored in different containers + edm::InputTag m_muonsTag; // input collection of muons + edm::EDGetTokenT m_muonsToken; // input collection of muons + edm::InputTag m_candsTag; // input collection of candidates to be referenced + edm::EDGetTokenT m_candsToken; // input collection of candidates to be referenced + edm::InputTag m_previousCandTag; // input tag identifying product contains muons passing the previous level + edm::EDGetTokenT + m_previousCandToken; // token identifying product contains muons passing the previous level + int m_minTrkHits; + int m_minMuonHits; + int m_minMuonStations; + double m_maxNormalizedChi2; + double m_minPt; + unsigned int m_minN; + double m_maxAbsEta; + bool m_saveTags; +}; + +#endif //HLTMuonTrkL1TkMuFilter_h diff --git a/HLTrigger/Muon/test/hltMuonL1RegionalFilter_cfg.py b/HLTrigger/Muon/test/hltMuonL1RegionalFilter_cfg.py index 79932c92fd036..76847b5e7eda8 100644 --- a/HLTrigger/Muon/test/hltMuonL1RegionalFilter_cfg.py +++ b/HLTrigger/Muon/test/hltMuonL1RegionalFilter_cfg.py @@ -40,7 +40,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.debugModules = cms.untracked.vstring('HLTMuonL1RegionalFilter') -process.MessageLogger.categories = cms.untracked.vstring('HLTMuonL1RegionalFilter') +process.MessageLogger.HLTMuonL1RegionalFilter = dict() process.MessageLogger.cerr.threshold = cms.untracked.string('DEBUG') process.MessageLogger.cerr.DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(0) ) diff --git a/HLTrigger/Timer/plugins/FastTimerService.cc b/HLTrigger/Timer/plugins/FastTimerService.cc index 433cb4c3a74a4..62abb7a78f1fe 100644 --- a/HLTrigger/Timer/plugins/FastTimerService.cc +++ b/HLTrigger/Timer/plugins/FastTimerService.cc @@ -382,24 +382,29 @@ void FastTimerService::PlotsPerElement::book(dqm::reco::DQMStore::IBooker& booke std::string y_title_ms = fmt::sprintf("events / %.1f ms", ranges.time_resolution); std::string y_title_kB = fmt::sprintf("events / %.1f kB", ranges.memory_resolution); + // MonitorElement::setStatOverflows(kTRUE) includes underflows and overflows in the computation of mean and RMS time_thread_ = booker.book1D(name + " time_thread", title + " processing time (cpu)", time_bins, 0., ranges.time_range); time_thread_->setXTitle("processing time [ms]"); time_thread_->setYTitle(y_title_ms); + time_thread_->setStatOverflows(kTRUE); time_real_ = booker.book1D(name + " time_real", title + " processing time (real)", time_bins, 0., ranges.time_range); time_real_->setXTitle("processing time [ms]"); time_real_->setYTitle(y_title_ms); + time_real_->setStatOverflows(kTRUE); if (memory_usage::is_available()) { allocated_ = booker.book1D(name + " allocated", title + " allocated memory", mem_bins, 0., ranges.memory_range); allocated_->setXTitle("memory [kB]"); allocated_->setYTitle(y_title_kB); + allocated_->setStatOverflows(kTRUE); deallocated_ = booker.book1D(name + " deallocated", title + " deallocated memory", mem_bins, 0., ranges.memory_range); deallocated_->setXTitle("memory [kB]"); deallocated_->setYTitle(y_title_kB); + deallocated_->setStatOverflows(kTRUE); } if (not byls) @@ -416,6 +421,7 @@ void FastTimerService::PlotsPerElement::book(dqm::reco::DQMStore::IBooker& booke " "); time_thread_byls_->setXTitle("lumisection"); time_thread_byls_->setYTitle("processing time [ms]"); + time_thread_byls_->setStatOverflows(kTRUE); time_real_byls_ = booker.bookProfile(name + " time_real_byls", title + " processing time (real) vs. lumisection", @@ -428,6 +434,7 @@ void FastTimerService::PlotsPerElement::book(dqm::reco::DQMStore::IBooker& booke " "); time_real_byls_->setXTitle("lumisection"); time_real_byls_->setYTitle("processing time [ms]"); + time_real_byls_->setStatOverflows(kTRUE); if (memory_usage::is_available()) { allocated_byls_ = booker.bookProfile(name + " allocated_byls", @@ -441,6 +448,7 @@ void FastTimerService::PlotsPerElement::book(dqm::reco::DQMStore::IBooker& booke " "); allocated_byls_->setXTitle("lumisection"); allocated_byls_->setYTitle("memory [kB]"); + allocated_byls_->setStatOverflows(kTRUE); deallocated_byls_ = booker.bookProfile(name + " deallocated_byls", title + " deallocated memory vs. lumisection", @@ -453,13 +461,11 @@ void FastTimerService::PlotsPerElement::book(dqm::reco::DQMStore::IBooker& booke " "); deallocated_byls_->setXTitle("lumisection"); deallocated_byls_->setYTitle("memory [kB]"); + deallocated_byls_->setStatOverflows(kTRUE); } } void FastTimerService::PlotsPerElement::fill(Resources const& data, unsigned int lumisection) { - // enable underflows and overflows in the computation of mean and rms - TH1::StatOverflows(true); - if (time_thread_) time_thread_->Fill(ms(data.time_thread)); @@ -486,9 +492,6 @@ void FastTimerService::PlotsPerElement::fill(Resources const& data, unsigned int } void FastTimerService::PlotsPerElement::fill(AtomicResources const& data, unsigned int lumisection) { - // enable underflows and overflows in the computation of mean and rms - TH1::StatOverflows(true); - if (time_thread_) time_thread_->Fill(ms(boost::chrono::nanoseconds(data.time_thread.load()))); @@ -517,9 +520,6 @@ void FastTimerService::PlotsPerElement::fill(AtomicResources const& data, unsign void FastTimerService::PlotsPerElement::fill_fraction(Resources const& data, Resources const& part, unsigned int lumisection) { - // enable underflows and overflows in the computation of mean and rms - TH1::StatOverflows(true); - float total; float fraction; @@ -564,27 +564,32 @@ void FastTimerService::PlotsPerPath::book(dqm::reco::DQMStore::IBooker& booker, unsigned int lumisections, bool byls) { const std::string basedir = booker.pwd(); - // booker.setCurrentFolder(basedir + "/path " + path.name_); booker.setCurrentFolder(basedir + "/" + prefixDir + path.name_); total_.book(booker, "path", path.name_, ranges, lumisections, byls); + // MonitorElement::setStatOverflows(kTRUE) includes underflows and overflows in the computation of mean and RMS unsigned int bins = path.modules_and_dependencies_.size(); module_counter_ = booker.book1DD("module_counter", "module counter", bins + 1, -0.5, bins + 0.5); module_counter_->setYTitle("events"); + module_counter_->setStatOverflows(kTRUE); module_time_thread_total_ = booker.book1DD("module_time_thread_total", "total module time (cpu)", bins, -0.5, bins - 0.5); module_time_thread_total_->setYTitle("processing time [ms]"); + module_time_thread_total_->setStatOverflows(kTRUE); module_time_real_total_ = booker.book1DD("module_time_real_total", "total module time (real)", bins, -0.5, bins - 0.5); module_time_real_total_->setYTitle("processing time [ms]"); + module_time_real_total_->setStatOverflows(kTRUE); if (memory_usage::is_available()) { module_allocated_total_ = booker.book1DD("module_allocated_total", "total allocated memory", bins, -0.5, bins - 0.5); module_allocated_total_->setYTitle("memory [kB]"); + module_allocated_total_->setStatOverflows(kTRUE); module_deallocated_total_ = booker.book1DD("module_deallocated_total", "total deallocated memory", bins, -0.5, bins - 0.5); module_deallocated_total_->setYTitle("memory [kB]"); + module_deallocated_total_->setStatOverflows(kTRUE); } for (unsigned int bin : boost::irange(0u, bins)) { auto const& module = job[path.modules_and_dependencies_[bin]]; diff --git a/HLTrigger/Timer/python/FastTimer.py b/HLTrigger/Timer/python/FastTimer.py index d336a8b529790..2943203a8ea85 100644 --- a/HLTrigger/Timer/python/FastTimer.py +++ b/HLTrigger/Timer/python/FastTimer.py @@ -58,7 +58,6 @@ def addPrint(process): # enable text dump if not hasattr(process,'MessageLogger'): process.load('FWCore.MessageService.MessageLogger_cfi') - process.MessageLogger.categories.append('FastReport') process.MessageLogger.cerr.FastReport = cms.untracked.PSet( limit = cms.untracked.int32( 10000000 ) ) return process diff --git a/HLTrigger/Timer/src/ProcessCallGraph.cc b/HLTrigger/Timer/src/ProcessCallGraph.cc index f4e4bc9ac51a1..7250ca4479a3d 100644 --- a/HLTrigger/Timer/src/ProcessCallGraph.cc +++ b/HLTrigger/Timer/src/ProcessCallGraph.cc @@ -4,7 +4,6 @@ #include #include -#include #include #include #include @@ -73,13 +72,7 @@ void ProcessCallGraph::preBeginJob(edm::PathsAndConsumesOfModulesBase const& pat boost::get_property(graph, boost::graph_name) = context.processName(); // create graph vertices associated to all modules in the process - unsigned int size = 0; - if (auto const& allModules = pathsAndConsumes.allModules(); not allModules.empty()) { - size = std::accumulate( - allModules.begin(), allModules.end(), size, [](unsigned int s, edm::ModuleDescription const* module) { - return std::max(s, module->id()); - }); - } + unsigned int size = pathsAndConsumes.largestModuleID() - boost::num_vertices(graph) + 1; for (size_t i = 0; i < size; ++i) boost::add_vertex(graph); diff --git a/HLTrigger/Tools/bin/BuildFile.xml b/HLTrigger/Tools/bin/BuildFile.xml index 146289b651768..a44e6aa620c6b 100644 --- a/HLTrigger/Tools/bin/BuildFile.xml +++ b/HLTrigger/Tools/bin/BuildFile.xml @@ -13,7 +13,6 @@ - diff --git a/HLTrigger/Tools/bin/hltDiff.cc b/HLTrigger/Tools/bin/hltDiff.cc index e0accdd409ec5..1dcec11cd4f82 100644 --- a/HLTrigger/Tools/bin/hltDiff.cc +++ b/HLTrigger/Tools/bin/hltDiff.cc @@ -22,7 +22,6 @@ #include #include -#include #include #include @@ -737,7 +736,7 @@ class JsonOutputProducer { void write() { if (!writeJson) return; - std::set filesCreated; + std::set filesCreated, filesNotCreated; std::ofstream out_file; if (!m_run_events.empty()) { // Creating a separate file for each run @@ -747,40 +746,46 @@ class JsonOutputProducer { // Writing the output to a JSON file std::string output_name = output_filename_base(run) += ".json"; out_file.open(output_name, std::ofstream::out); + if (out_file.good()) { + out_file << '{'; // line open + out_file << configuration.serialise(1) << ','; + out_file << vars.serialise(1) << ','; + // writing block for each event + out_file << indent(1) << key("events") << '['; // line open + for (auto it = v_events.begin(); it != v_events.end(); ++it) { + out_file << (*it).serialise(2); + if (it != --v_events.end()) + out_file << ','; + } + out_file << indent(1) << ']'; // line close + out_file << indent(0) << "}"; // line close + out_file.close(); + // Adding file name to the list of created files + filesCreated.insert(output_name); + } else + filesNotCreated.insert(output_name); + } + } else { + // Creating a single file containing with only configuration part + std::string output_name = output_filename_base(0) += ".json"; + out_file.open(output_name, std::ofstream::out); + if (out_file.good()) { out_file << '{'; // line open out_file << configuration.serialise(1) << ','; out_file << vars.serialise(1) << ','; // writing block for each event out_file << indent(1) << key("events") << '['; // line open - for (auto it = v_events.begin(); it != v_events.end(); ++it) { - out_file << (*it).serialise(2); - if (it != --v_events.end()) - out_file << ','; - } + // for (std::vector::const_iterator it = v_events.begin(); it != v_events.end(); ++it) { + // out_file << (*it).serialise(2); + // if (it != --v_events.end()) out_file << ','; + // } out_file << indent(1) << ']'; // line close out_file << indent(0) << "}"; // line close out_file.close(); // Adding file name to the list of created files filesCreated.insert(output_name); - } - } else { - // Creating a single file containing with only configuration part - std::string output_name = output_filename_base(0) += ".json"; - out_file.open(output_name, std::ofstream::out); - out_file << '{'; // line open - out_file << configuration.serialise(1) << ','; - out_file << vars.serialise(1) << ','; - // writing block for each event - out_file << indent(1) << key("events") << '['; // line open - // for (std::vector::const_iterator it = v_events.begin(); it != v_events.end(); ++it) { - // out_file << (*it).serialise(2); - // if (it != --v_events.end()) out_file << ','; - // } - out_file << indent(1) << ']'; // line close - out_file << indent(0) << "}"; // line close - out_file.close(); - // Adding file name to the list of created files - filesCreated.insert(output_name); + } else + filesNotCreated.insert(output_name); } if (!filesCreated.empty()) { @@ -788,8 +793,16 @@ class JsonOutputProducer { for (const std::string& filename : filesCreated) std::cout << " " << filename << std::endl; } + + if (!filesNotCreated.empty()) { + std::cout << "Failed to create the following JSON files (check output directory and its permissions):" + << std::endl; + for (const std::string& filename : filesNotCreated) + std::cout << " " << filename << std::endl; + } } }; + size_t JsonOutputProducer::tab_spaces = 0; class SummaryOutputProducer { @@ -941,7 +954,15 @@ class SummaryOutputProducer { } } - std::string writeHistograms() const { + bool writeHistograms(std::string& file_name) const { + // Storing histograms to a ROOT file + file_name = json.output_filename_base(this->run) += ".root"; + auto out_file = new TFile(file_name.c_str(), "RECREATE"); + if (not out_file or out_file->IsZombie()) { + out_file->Close(); + return false; + } + std::map m_histo; // Counting the numbers of bins for different types of histograms // *_c - changed; *_gl - gained or lost @@ -1069,9 +1090,6 @@ class SummaryOutputProducer { } } - // Storing histograms to a ROOT file - std::string file_name = json.output_filename_base(this->run) += ".root"; - auto out_file = new TFile(file_name.c_str(), "RECREATE"); // Storing the histograms in a proper folder according to the DQM convention char savePath[1000]; sprintf(savePath, "DQMData/Run %d/HLT/Run summary/EventByEvent/", this->run); @@ -1082,57 +1100,65 @@ class SummaryOutputProducer { nameHisto.second->Write(nameHisto.first.c_str()); out_file->Close(); - return file_name; + return true; } - std::string writeCSV_trigger() const { - std::string file_name = json.output_filename_base(this->run) += "_trigger.csv"; - FILE* out_file = fopen((file_name).c_str(), "w"); + bool writeCSV_trigger(std::string& file_name) const { + bool ret = false; - fprintf(out_file, - "Total,Accepted OLD,Accepted NEW,Gained,Lost,|G|/A_N + " - "|L|/AO,sigma(AN)+sigma(AO),Changed,C/(T-AO),sigma(T-AO),trigger\n"); - for (const auto& idSummary : m_triggerSummary) { - const SummaryOutputProducer::TriggerSummary& S = idSummary.second; + file_name = json.output_filename_base(this->run) += "_trigger.csv"; + FILE* out_file = fopen(file_name.c_str(), "w"); + + if (out_file) { fprintf(out_file, - "%d,%d,%d,%+.f,%+.f,%.2f%%,%.2f%%,~%.f,~%.2f%%,%.2f%%,%s\n", - this->json.configuration.events, - S.accepted_o, - S.accepted_n, - S.gained().v, - -1.0 * S.lost().v, - (S.gained(1).v + S.lost(1).v) * 100.0, - (S.gained(1).e + S.lost(1).e) * 100.0, - S.changed().v, - S.changed(1).v * 100.0, - S.changed(1).e * 100.0, - S.name.c_str()); + "Total,Accepted OLD,Accepted NEW,Gained,Lost,|G|/A_N + " + "|L|/AO,sigma(AN)+sigma(AO),Changed,C/(T-AO),sigma(T-AO),trigger\n"); + for (const auto& idSummary : m_triggerSummary) { + const SummaryOutputProducer::TriggerSummary& S = idSummary.second; + fprintf(out_file, + "%d,%d,%d,%+.f,%+.f,%.2f%%,%.2f%%,~%.f,~%.2f%%,%.2f%%,%s\n", + this->json.configuration.events, + S.accepted_o, + S.accepted_n, + S.gained().v, + -1.0 * S.lost().v, + (S.gained(1).v + S.lost(1).v) * 100.0, + (S.gained(1).e + S.lost(1).e) * 100.0, + S.changed().v, + S.changed(1).v * 100.0, + S.changed(1).e * 100.0, + S.name.c_str()); + } + fclose(out_file); + ret = true; } - fclose(out_file); - - return file_name; + return ret; } - std::string writeCSV_module() const { - std::string file_name = json.output_filename_base(this->run) += "_module.csv"; - FILE* out_file = fopen((file_name).c_str(), "w"); - - fprintf(out_file, "Total,Gained,Lost,Changed,module\n"); - for (const auto& idSummary : m_moduleSummary) { - const SummaryOutputProducer::GenericSummary& S = idSummary.second; - fprintf(out_file, - "%d,+%.f,-%.f,~%.f,%s\n", - this->json.configuration.events, - S.gained().v, - S.lost().v, - S.changed().v, - S.name.c_str()); + bool writeCSV_module(std::string& file_name) const { + bool ret = false; + + file_name = json.output_filename_base(this->run) += "_module.csv"; + FILE* out_file = fopen(file_name.c_str(), "w"); + + if (out_file) { + fprintf(out_file, "Total,Gained,Lost,Changed,module\n"); + for (const auto& idSummary : m_moduleSummary) { + const SummaryOutputProducer::GenericSummary& S = idSummary.second; + fprintf(out_file, + "%d,+%.f,-%.f,~%.f,%s\n", + this->json.configuration.events, + S.gained().v, + S.lost().v, + S.changed().v, + S.name.c_str()); + } + fclose(out_file); + ret = true; } - fclose(out_file); - - return file_name; + return ret; } public: @@ -1143,26 +1169,40 @@ class SummaryOutputProducer { : json(_json), run(0), storeROOT(_storeROOT), storeCSV(_storeCSV) {} void write() { - std::vector filesCreated; + std::vector filesCreated, filesNotCreated; // Processing every run from the JSON producer if (!json.m_run_events.empty()) { for (const auto& runEvents : json.m_run_events) { prepareSummaries(runEvents.first, runEvents.second); if (storeROOT) { - filesCreated.push_back(writeHistograms()); + std::string fName; + auto& fNameVec = writeHistograms(fName) ? filesCreated : filesNotCreated; + fNameVec.push_back(fName); } if (storeCSV) { - filesCreated.push_back(writeCSV_trigger()); - filesCreated.push_back(writeCSV_module()); + std::string fNameTrigger; + auto& fNameTriggerVec = writeCSV_trigger(fNameTrigger) ? filesCreated : filesNotCreated; + fNameTriggerVec.push_back(fNameTrigger); + + std::string fNameModule; + auto& fNameModuleVec = writeCSV_module(fNameModule) ? filesCreated : filesNotCreated; + fNameModuleVec.push_back(fNameModule); } } } else { if (storeROOT) { - filesCreated.push_back(writeHistograms()); + std::string fName; + auto& fNameVec = writeHistograms(fName) ? filesCreated : filesNotCreated; + fNameVec.push_back(fName); } if (storeCSV) { - filesCreated.push_back(writeCSV_trigger()); - filesCreated.push_back(writeCSV_module()); + std::string fNameTrigger; + auto& fNameTriggerVec = writeCSV_trigger(fNameTrigger) ? filesCreated : filesNotCreated; + fNameTriggerVec.push_back(fNameTrigger); + + std::string fNameModule; + auto& fNameModuleVec = writeCSV_module(fNameModule) ? filesCreated : filesNotCreated; + fNameModuleVec.push_back(fNameModule); } } @@ -1171,6 +1211,13 @@ class SummaryOutputProducer { for (const std::string& filename : filesCreated) std::cout << " " << filename << std::endl; } + + if (!filesNotCreated.empty()) { + std::cout << "Failed to create the following summary files (check output directory and its permissions):" + << std::endl; + for (const std::string& filename : filesNotCreated) + std::cout << " " << filename << std::endl; + } } }; @@ -1490,7 +1537,7 @@ class HltDiff { std::cout << "\n" << std::endl; } // Printing the summary of affected triggers with affected-event counts - if (!quiet) { + if (!quiet and old_config) { bool summaryHeaderPrinted = false; for (size_t p = 0; p < old_config->size(); ++p) { if (differences.at(p).total() < 1) @@ -1560,7 +1607,7 @@ usage: hltDiff -o|--old-files FILE1.ROOT [FILE2.ROOT ...] [-O|--old-process LABE safer if files are run for the first time, but can cause a substantial delay\n\ \n\ -d|--debug\n\ - display messages about missing events and collectiions\n\ + display messages about missing events and collections\n\ \n\ -q|--quiet\n\ don't display summary printout with the list of affected trigger paths\n\ diff --git a/HLTrigger/btau/plugins/HLTJetTag.cc b/HLTrigger/btau/plugins/HLTJetTag.cc index 913f7ff7f1ac3..61f15b886dc4e 100644 --- a/HLTrigger/btau/plugins/HLTJetTag.cc +++ b/HLTrigger/btau/plugins/HLTJetTag.cc @@ -93,7 +93,7 @@ bool HLTJetTag::hltFilter(edm::Event& event, auto const& dependent = handle->keyProduct(); if (not dependent.isNull() and not dependent.hasCache()) { // only an empty AssociationVector can have a invalid dependent collection - edm::Provenance const& dependent_provenance = event.getProvenance(dependent.id()); + edm::StableProvenance const& dependent_provenance = event.getStableProvenance(dependent.id()); if (dependent_provenance.branchDescription().dropped()) // FIXME the error message should be made prettier throw edm::Exception(edm::errors::ProductNotFound) diff --git a/HLTrigger/btau/plugins/HLTJetTagWithMatching.cc b/HLTrigger/btau/plugins/HLTJetTagWithMatching.cc index 2942638e62805..696625fe60ce7 100644 --- a/HLTrigger/btau/plugins/HLTJetTagWithMatching.cc +++ b/HLTrigger/btau/plugins/HLTJetTagWithMatching.cc @@ -109,7 +109,7 @@ bool HLTJetTagWithMatching::hltFilter(edm::Event& event, auto const& dependent = handle->keyProduct(); if (not dependent.isNull() and not dependent.hasCache()) { // only an empty AssociationVector can have a invalid dependent collection - edm::Provenance const& dependent_provenance = event.getProvenance(dependent.id()); + edm::StableProvenance const& dependent_provenance = event.getStableProvenance(dependent.id()); if (dependent_provenance.branchDescription().dropped()) // FIXME the error message should be made prettier throw edm::Exception(edm::errors::ProductNotFound) diff --git a/HLTrigger/special/plugins/HLTLogMonitorFilter.cc b/HLTrigger/special/plugins/HLTLogMonitorFilter.cc index 657c5bf15f7a4..acd2c6562ec79 100644 --- a/HLTrigger/special/plugins/HLTLogMonitorFilter.cc +++ b/HLTrigger/special/plugins/HLTLogMonitorFilter.cc @@ -26,7 +26,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" #include "DataFormats/Provenance/interface/EventID.h" -#include "FWCore/MessageLogger/interface/ErrorSummaryEntry.h" +#include "DataFormats/Common/interface/ErrorSummaryEntry.h" #include "FWCore/MessageLogger/interface/LoggedErrorsSummary.h" // @@ -101,6 +101,7 @@ class HLTLogMonitorFilter : public edm::EDFilter { // ---------- member data --------------------------- uint32_t m_prescale; // default threshold, after which messages in each Category start to be logarithmically prescaled CategoryMap m_data; // map each category name to its prescale data + edm::EDPutTokenT> m_putToken; }; // system include files @@ -128,7 +129,7 @@ HLTLogMonitorFilter::HLTLogMonitorFilter(const edm::ParameterSet& config) : m_pr addCategory(name, threshold); } - produces >(); + m_putToken = produces>(); } HLTLogMonitorFilter::~HLTLogMonitorFilter() = default; @@ -151,7 +152,7 @@ bool HLTLogMonitorFilter::filter(edm::Event& event, const edm::EventSetup& setup bool accept = false; std::string category; - std::vector errorSummary{edm::LoggedErrorsSummary(event.streamID().value())}; + std::vector errorSummary{edm::LoggedErrorsSummary(event.streamID().value())}; for (auto const& entry : errorSummary) { // split the message category typedef boost::split_iterator splitter; @@ -169,11 +170,19 @@ bool HLTLogMonitorFilter::filter(edm::Event& event, const edm::EventSetup& setup } // harvest the errors, but only if the filter will accept the event - std::unique_ptr > errors(new std::vector()); + std::vector errors; if (accept) { - errors->swap(errorSummary); + errors.reserve(errorSummary.size()); + std::transform(errorSummary.begin(), errorSummary.end(), std::back_inserter(errors), [](auto& iEntry) { + edm::ErrorSummaryEntry entry; + entry.category = std::move(iEntry.category); + entry.module = std::move(iEntry.module); + entry.severity = edm::ELseverityLevel(iEntry.severity.getLevel()); + entry.count = iEntry.count; + return entry; + }); } - event.put(std::move(errors)); + event.emplace(m_putToken, std::move(errors)); return accept; } diff --git a/HLTrigger/special/test/testDynamicPrescaler.py b/HLTrigger/special/test/testDynamicPrescaler.py index a40a3e43ea0d5..249e98f3e595a 100644 --- a/HLTrigger/special/test/testDynamicPrescaler.py +++ b/HLTrigger/special/test/testDynamicPrescaler.py @@ -17,7 +17,7 @@ process.hltTrigReport = cms.EDAnalyzer( "HLTrigReport", HLTriggerResults = cms.InputTag( 'TriggerResults' ) ) -process.MessageLogger.categories.append('HLTrigReport') +process.MessageLogger.HLTrigReport=dict() process.path = cms.Path(process.hltDynamicPrescaler) process.info = cms.EndPath(process.hltTrigReport) diff --git a/HLTriggerOffline/B2G/test/b2gHLTDQM_production_cfg.py b/HLTriggerOffline/B2G/test/b2gHLTDQM_production_cfg.py index c5847c582ff42..ed0d25eb5413f 100644 --- a/HLTriggerOffline/B2G/test/b2gHLTDQM_production_cfg.py +++ b/HLTriggerOffline/B2G/test/b2gHLTDQM_production_cfg.py @@ -74,7 +74,6 @@ ## configure message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('B2GSingleLeptonTriggerDQM' ) process.MessageLogger.cerr.B2GSingleLeptonTriggerDQM = cms.untracked.PSet(limit = cms.untracked.int32(1)) diff --git a/HLTriggerOffline/Common/test/hltHarvesting_cfg.py b/HLTriggerOffline/Common/test/hltHarvesting_cfg.py index e2288037668ac..3657697fcab8c 100644 --- a/HLTriggerOffline/Common/test/hltHarvesting_cfg.py +++ b/HLTriggerOffline/Common/test/hltHarvesting_cfg.py @@ -33,7 +33,6 @@ # Other statements #Adding DQMFileSaver to the message logger configuration -process.MessageLogger.categories.append('DQMFileSaver') process.MessageLogger.cout.DQMFileSaver = cms.untracked.PSet( limit = cms.untracked.int32(1000000) ) diff --git a/HLTriggerOffline/Common/test/hltSourceHarvestCompare_cfg.py b/HLTriggerOffline/Common/test/hltSourceHarvestCompare_cfg.py index 49b941ace7988..80d348d0e85bc 100644 --- a/HLTriggerOffline/Common/test/hltSourceHarvestCompare_cfg.py +++ b/HLTriggerOffline/Common/test/hltSourceHarvestCompare_cfg.py @@ -37,7 +37,6 @@ process.options = cms.untracked.PSet( fileMode = cms.untracked.string('FULLMERGE') ) -process.MessageLogger.categories.append('DQMFileSaver') process.MessageLogger.cout.DQMFileSaver = cms.untracked.PSet( limit = cms.untracked.int32(1000000) ) diff --git a/HLTriggerOffline/Egamma/test/testEmDQM_cfg.py b/HLTriggerOffline/Egamma/test/testEmDQM_cfg.py index 5908ffa552380..90db91bc81ddf 100644 --- a/HLTriggerOffline/Egamma/test/testEmDQM_cfg.py +++ b/HLTriggerOffline/Egamma/test/testEmDQM_cfg.py @@ -8,7 +8,6 @@ process.load("FWCore.MessageService.MessageLogger_cfi") # suppress printout of error messages on every event when a collection is missing in the event -process.MessageLogger.categories.append("EmDQMInvalidRefs") process.MessageLogger.cerr.EmDQMInvalidRefs = cms.untracked.PSet(limit = cms.untracked.int32(5)) process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) diff --git a/HLTriggerOffline/Egamma/test/testPatRecoElectrons.py b/HLTriggerOffline/Egamma/test/testPatRecoElectrons.py deleted file mode 100644 index 65beb80575e24..0000000000000 --- a/HLTriggerOffline/Egamma/test/testPatRecoElectrons.py +++ /dev/null @@ -1,176 +0,0 @@ -import FWCore.ParameterSet.Config as cms -from functools import reduce - -process = cms.Process("test") - - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) -#---------------------------------------------------------------------- -# input file -#---------------------------------------------------------------------- -process.source = cms.Source("PoolSource", - # duplicateCheckMode = cms.untracked.string('noDuplicateCheck'), - fileNames = cms.untracked.vstring( - 'rfio:///castor/cern.ch/user/a/aholz/2011-01-hlt-validation-input-files/output/hlt_HLT_DQM_GR10_H_V12T.root', - ) - ) -#---------------------------------------------------------------------- -# output file -#---------------------------------------------------------------------- - -process.out = cms.OutputModule("PoolOutputModule", - # fileName = cms.untracked.string('/tmp/aholz/wpxTest.root'), - - - fileName = cms.untracked.string('/tmp/aholz/hlt_HLT_DQM_GR10_H_V12T.root') -) - - -process.outPath = cms.EndPath(process.out) - -#---------------------------------------------------------------------- -# print PATH summary at the end -#---------------------------------------------------------------------- -process.options = cms.untracked.PSet(wantSummary = cms.untracked.bool(True)) - - -#---------------------------------------------------------------------- -#---------------------------------------------------------------------- -# standard configuration for producing PAT electrons -# and them separating them into separate collections -#---------------------------------------- -# -# objects generated by this file (of interest -# to the user): -# -# makePatElectronCollections a sequence for creating -# pat electrons and -# then splitting them into -# different collections -#---------------------------------------- -import FWCore.ParameterSet.Config as cms - -from PhysicsTools.PatAlgos.patSequences_cff import * - -# note that we can't disable the MC Matching here -# as we don't have a process object... - -#---------------------------------------------------------------------- -# inspired by http://cmslxr.fnal.gov/lxr/source/ElectroWeakAnalysis/WENu/test/pat_WenuVBTF_ntuple_forData.py -# and see also the recipe at https://twiki.cern.ch/twiki/bin/view/CMS/SimpleCutBasedEleID#Electron_ID_Implementation_in_Re - -process.load("PhysicsTools.PatAlgos.patSequences_cff") -process.load("ElectroWeakAnalysis.WENu.simpleEleIdSequence_cff") -process.load("Configuration.StandardSequences.GeometryRecoDB_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.load('Configuration.StandardSequences.MagneticField_38T_cff') - -# from Configuration.AlCa.autoCond import autoCond -# process.GlobalTag.globaltag = autoCond['startup'] - -# taken from the configuration of the skim (and the reco -# used for the skim) -process.GlobalTag.globaltag = 'FT_R_39X_V4A::All' -# process.GlobalTag.globaltag = 'GR_R_39X_V5::All' - -process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence) -process.makePatElectrons = cms.Sequence(process.patElectronIDs * - # commented out for the moment -- do we still need this ? - process.patElectronIsolation * - process.patElectrons) - -# process.runPat = cms.Path(process.makePatElectrons) - -process.patElectrons.addElectronID = cms.bool(True) -process.patElectrons.electronIDSources = cms.PSet( - - # relative isolation - simpleEleId95relIso= cms.InputTag("simpleEleId95relIso"), - simpleEleId90relIso= cms.InputTag("simpleEleId90relIso"), - simpleEleId85relIso= cms.InputTag("simpleEleId85relIso"), - simpleEleId80relIso= cms.InputTag("simpleEleId80relIso"), - simpleEleId70relIso= cms.InputTag("simpleEleId70relIso"), - simpleEleId60relIso= cms.InputTag("simpleEleId60relIso"), - - # combined isolation (adding track momenta and - # calorimetric energies which overcounts energy/momentum - # in some cases) - # simpleEleId95cIso= cms.InputTag("simpleEleId95cIso"), - # simpleEleId90cIso= cms.InputTag("simpleEleId90cIso"), - # simpleEleId85cIso= cms.InputTag("simpleEleId85cIso"), - # simpleEleId80cIso= cms.InputTag("simpleEleId80cIso"), - # simpleEleId70cIso= cms.InputTag("simpleEleId70cIso"), - # simpleEleId60cIso= cms.InputTag("simpleEleId60cIso"), -) - - -#---------------------------------------------------------------------- -# require that electrons pass all criteria -#---------------------------------------------------------------------- -modulesForSequence = [] - -wpxEfficiencies = [ 60, 70, 80, 85, 90, 95] - -for efficiency in wpxEfficiencies: - - moduleName = "WP%02dElectrons" % efficiency - - module = cms.EDFilter("CandViewSelector", - src = cms.InputTag("patElectrons"), - cut = cms.string('electronID("simpleEleId%02drelIso") > 6.5' % efficiency) - ) - - # add module to process - setattr(process, moduleName, module) - - # keep module for producing a sequence - modulesForSequence.append(module) - - -#---------------------------------------------------------------------- -# make sure PAT is run before looking at the categories -#---------------------------------------------------------------------- -import operator -makePatElectronCollections = cms.Sequence(process.makePatElectrons - + reduce(operator.add, modulesForSequence) - ) - - -process.makePatElectronCollectionsPath = cms.Path(makePatElectronCollections) -#---------------------------------------------------------------------- -# counting -#---------------------------------------------------------------------- -# add some counting of GSF electrons (i.e. add a path -# which requires the corresponding collection to have at least one -# element) - -# the module for counting -process.countGsfElectrons = cms.EDFilter("CandViewCountFilter", - src = cms.InputTag("gsfElectrons"), - minNumber = cms.uint32(1) - ) - -process.countGsfElectronsPath = cms.Path(process.countGsfElectrons) - -# add counting of WPx electrons -for efficiency in wpxEfficiencies: - moduleName = "countWP%02dElectrons" % efficiency - - module = cms.EDFilter("CandViewCountFilter", - src = cms.InputTag("WP%02dElectrons" % efficiency), - minNumber = cms.uint32(1) - ) - - setattr(process, moduleName, module) - - # create a corresponding path - setattr(process, moduleName + "Path", cms.Path(module)) - - -#---------------------------------------------------------------------- - - - - diff --git a/HLTriggerOffline/Exotica/src/EVTColContainer.cc b/HLTriggerOffline/Exotica/src/EVTColContainer.cc index ef66af86957ea..90236eb4ff508 100644 --- a/HLTriggerOffline/Exotica/src/EVTColContainer.cc +++ b/HLTriggerOffline/Exotica/src/EVTColContainer.cc @@ -34,6 +34,7 @@ #include "DataFormats/MuonReco/interface/MuonFwd.h" #include "DataFormats/TauReco/interface/PFTau.h" #include "DataFormats/TauReco/interface/PFTauFwd.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include diff --git a/HLTriggerOffline/Exotica/test/hltExoticaValidator_cfg.py b/HLTriggerOffline/Exotica/test/hltExoticaValidator_cfg.py index cf4fb99718b79..5c3a0cf169b2e 100644 --- a/HLTriggerOffline/Exotica/test/hltExoticaValidator_cfg.py +++ b/HLTriggerOffline/Exotica/test/hltExoticaValidator_cfg.py @@ -201,21 +201,19 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 1000 -process.MessageLogger.destinations += ['ExoticaValidationMessages'] -process.MessageLogger.categories += ['ExoticaValidation'] + #process.MessageLogger.debugModules += ['HLTExoticaValidator','HLTExoticaSubAnalysis','HLTExoticaPlotter'] process.MessageLogger.debugModules += ['*'] -process.MessageLogger.ExoticaValidationMessages = cms.untracked.PSet( +process.MessageLogger.files.ExoticaValidationMessages = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), ExoticaValidation = cms.untracked.PSet(limit = cms.untracked.int32(1000)) ) -process.MessageLogger.categories.extend(["GetManyWithoutRegistration","GetByLabelWithoutRegistration"]) + _messageSettings = cms.untracked.PSet( reportEvery = cms.untracked.int32(1), - optionalPSet = cms.untracked.bool(True), limit = cms.untracked.int32(10000000) ) diff --git a/HLTriggerOffline/HeavyFlavor/test/heavyFlavorValidation_cfg.py b/HLTriggerOffline/HeavyFlavor/test/heavyFlavorValidation_cfg.py index e7176894be894..fb6c389a1ab6a 100644 --- a/HLTriggerOffline/HeavyFlavor/test/heavyFlavorValidation_cfg.py +++ b/HLTriggerOffline/HeavyFlavor/test/heavyFlavorValidation_cfg.py @@ -37,7 +37,7 @@ #process.load("FWCore.MessageService.MessageLogger_cfi") #process.MessageLogger.debugModules = cms.untracked.vstring('heavyFlavorValidation') -#process.MessageLogger.categories = cms.untracked.vstring('HLTriggerOfflineHeavyFlavor') +# #process.MessageLogger.cerr.threshold = cms.untracked.string('DEBUG') #process.MessageLogger.cerr.DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(0) ) diff --git a/HLTriggerOffline/Higgs/src/EVTColContainer.cc b/HLTriggerOffline/Higgs/src/EVTColContainer.cc index 91423af116b6c..940194042fa2d 100644 --- a/HLTriggerOffline/Higgs/src/EVTColContainer.cc +++ b/HLTriggerOffline/Higgs/src/EVTColContainer.cc @@ -32,6 +32,7 @@ #include "DataFormats/JetReco/interface/PFJet.h" #include "DataFormats/JetReco/interface/PFJetCollection.h" #include "DataFormats/BTauReco/interface/JetTag.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include diff --git a/HLTriggerOffline/Higgs/test/hltHiggsValidator_cfg.py b/HLTriggerOffline/Higgs/test/hltHiggsValidator_cfg.py index 14464a3e94e28..c9c03f54adf7e 100644 --- a/HLTriggerOffline/Higgs/test/hltHiggsValidator_cfg.py +++ b/HLTriggerOffline/Higgs/test/hltHiggsValidator_cfg.py @@ -54,10 +54,9 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 2000 -process.MessageLogger.destinations += ['HiggsValidationMessages'] -process.MessageLogger.categories += ['HiggsValidation'] + process.MessageLogger.debugModules += ['*']#HLTHiggsValidator','HLTHiggsSubAnalysis','HLTHiggsPlotter'] -process.MessageLogger.HiggsValidationMessages = cms.untracked.PSet( +process.MessageLogger.files.HiggsValidationMessages = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), HiggsValidation = cms.untracked.PSet(limit = cms.untracked.int32(1000)) diff --git a/HLTriggerOffline/Muon/test/hltMuonValidator_cfg.py b/HLTriggerOffline/Muon/test/hltMuonValidator_cfg.py index 9c165b852e96d..80f6ca9133e9f 100644 --- a/HLTriggerOffline/Muon/test/hltMuonValidator_cfg.py +++ b/HLTriggerOffline/Muon/test/hltMuonValidator_cfg.py @@ -40,10 +40,9 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 2000 -process.MessageLogger.destinations += ['HLTMuonValMessages'] -process.MessageLogger.categories += ['HLTMuonVal'] + process.MessageLogger.debugModules += ['HLTMuonValidator'] -process.MessageLogger.HLTMuonValMessages = cms.untracked.PSet( +process.MessageLogger.files.HLTMuonValMessages = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), HLTMuonVal = cms.untracked.PSet(limit = cms.untracked.int32(1000)) diff --git a/HLTriggerOffline/SMP/test/hltSMPValidator_cfg.py b/HLTriggerOffline/SMP/test/hltSMPValidator_cfg.py index 1a6e2dd928bb8..60d5d42731edc 100644 --- a/HLTriggerOffline/SMP/test/hltSMPValidator_cfg.py +++ b/HLTriggerOffline/SMP/test/hltSMPValidator_cfg.py @@ -32,10 +32,9 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 2000 -process.MessageLogger.destinations += ['SMPValidationMessages'] -process.MessageLogger.categories += ['SMPValidation'] + process.MessageLogger.debugModules += ['*']#HLTHiggsValidator','HLTHiggsSubAnalysis','HLTHiggsPlotter'] -process.MessageLogger.SMPValidationMessages = cms.untracked.PSet( +process.MessageLogger.files.SMPValidationMessages = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), SMPValidation = cms.untracked.PSet(limit = cms.untracked.int32(1000)) diff --git a/HLTriggerOffline/Tau/test/runHLTTauValidation_cfg.py b/HLTriggerOffline/Tau/test/runHLTTauValidation_cfg.py index 9d20c7e94cda5..badae5b95ce9c 100644 --- a/HLTriggerOffline/Tau/test/runHLTTauValidation_cfg.py +++ b/HLTriggerOffline/Tau/test/runHLTTauValidation_cfg.py @@ -5,7 +5,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 100 -#process.MessageLogger.categories.append("HLTTauDQMOffline") +# process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) diff --git a/HeavyFlavorAnalysis/Configuration/python/HeavyFlavorAnalysis_EventContent_cff.py b/HeavyFlavorAnalysis/Configuration/python/HeavyFlavorAnalysis_EventContent_cff.py deleted file mode 100644 index e1067a75e366d..0000000000000 --- a/HeavyFlavorAnalysis/Configuration/python/HeavyFlavorAnalysis_EventContent_cff.py +++ /dev/null @@ -1,18 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# HeavyFlavorAnalysis event content -# -from HeavyFlavorAnalysis.Skimming.bToMuMu_EventContent_cff import * -from HeavyFlavorAnalysis.Skimming.jpsiToMuMu_EventContent_cff import * -from HeavyFlavorAnalysis.Skimming.upsilonToMuMu_EventContent_cff import * -from HeavyFlavorAnalysis.Skimming.tauTo3Mu_EventContent_cff import * - -HeavyFlavorAnalysisEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -HeavyFlavorAnalysisEventContent.outputCommands.extend(bToMuMuEventContent.outputCommands) -HeavyFlavorAnalysisEventContent.outputCommands.extend(jpsiToMuMuEventContent.outputCommands) -HeavyFlavorAnalysisEventContent.outputCommands.extend(upsilonToMuMuEventContent.outputCommands) -HeavyFlavorAnalysisEventContent.outputCommands.extend(tauTo3MuEventContent.outputCommands) - diff --git a/HeavyFlavorAnalysis/Configuration/python/HeavyFlavorAnalysis_OutputModules_cff.py b/HeavyFlavorAnalysis/Configuration/python/HeavyFlavorAnalysis_OutputModules_cff.py deleted file mode 100644 index e918c804a2882..0000000000000 --- a/HeavyFlavorAnalysis/Configuration/python/HeavyFlavorAnalysis_OutputModules_cff.py +++ /dev/null @@ -1,11 +0,0 @@ -# The following comments couldn't be translated into the new config version: - -#tauTo3MuOutputModuleAODSIM & - -import FWCore.ParameterSet.Config as cms - -# -# HeavyFlavorAnalysis output modules -# -from HeavyFlavorAnalysis.Skimming.onia_OutputModules_cff import * - diff --git a/HeavyFlavorAnalysis/Configuration/python/HeavyFlavorAnalysis_SkimPaths_cff.py b/HeavyFlavorAnalysis/Configuration/python/HeavyFlavorAnalysis_SkimPaths_cff.py deleted file mode 100644 index c58e0d79a3898..0000000000000 --- a/HeavyFlavorAnalysis/Configuration/python/HeavyFlavorAnalysis_SkimPaths_cff.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# HeavyFlavorAnalysis skim paths -# -from HeavyFlavorAnalysis.Skimming.onia_SkimPaths_cff import * -from HeavyFlavorAnalysis.Skimming.tauTo3Mu_SkimPaths_cff import * - diff --git a/HeavyFlavorAnalysis/Configuration/python/HeavyFlavorAnalysis_cff.py b/HeavyFlavorAnalysis/Configuration/python/HeavyFlavorAnalysis_cff.py deleted file mode 100644 index 29f89f2ca7027..0000000000000 --- a/HeavyFlavorAnalysis/Configuration/python/HeavyFlavorAnalysis_cff.py +++ /dev/null @@ -1,9 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# HeavyFlavorAnalysis standard sequences -# -from HeavyFlavorAnalysis.Skimming.onia_Sequences_cff import * -from HeavyFlavorAnalysis.Skimming.tauTo3MuSequences_cff import * -heavyFlavorAnalysis = cms.Sequence(cms.SequencePlaceholder("onia")+cms.SequencePlaceholder("tauTo3Mu")) - diff --git a/HeavyFlavorAnalysis/Onia2MuMu/BuildFile.xml b/HeavyFlavorAnalysis/Onia2MuMu/BuildFile.xml index c031a57951625..8636a23d694fa 100644 --- a/HeavyFlavorAnalysis/Onia2MuMu/BuildFile.xml +++ b/HeavyFlavorAnalysis/Onia2MuMu/BuildFile.xml @@ -4,7 +4,6 @@ - diff --git a/HeavyFlavorAnalysis/Onia2MuMu/src/OniaVtxReProducer.cc b/HeavyFlavorAnalysis/Onia2MuMu/src/OniaVtxReProducer.cc index 146335ccaca71..f4a422a273758 100644 --- a/HeavyFlavorAnalysis/Onia2MuMu/src/OniaVtxReProducer.cc +++ b/HeavyFlavorAnalysis/Onia2MuMu/src/OniaVtxReProducer.cc @@ -11,17 +11,17 @@ OniaVtxReProducer::OniaVtxReProducer(const edm::Handle & const edm::Provenance *prov = handle.provenance(); if (prov == nullptr) throw cms::Exception("CorruptData") << "Vertex handle doesn't have provenance."; - edm::ParameterSet psetFromProvenance = edm::parameterSet(*prov, iEvent.processHistory()); + edm::ParameterSet psetFromProvenance = edm::parameterSet(prov->stable(), iEvent.processHistory()); bool is_primary_available = false; const edm::Provenance *parent_prov = prov; - if (edm::moduleName(*prov, iEvent.processHistory()) != "PrimaryVertexProducer") { + if (edm::moduleName(prov->stable(), iEvent.processHistory()) != "PrimaryVertexProducer") { std::vector parents = prov->productProvenance()->parentage().parents(); for (std::vector::const_iterator it = parents.begin(), ed = parents.end(); it != ed; ++it) { edm::Provenance parprov = iEvent.getProvenance(*it); if (parprov.friendlyClassName() == "recoVertexs") { // for AOD actually this the parent we should look for parent_prov = &parprov; - psetFromProvenance = edm::parameterSet(parprov, iEvent.processHistory()); + psetFromProvenance = edm::parameterSet(parprov.stable(), iEvent.processHistory()); is_primary_available = true; break; } @@ -40,7 +40,7 @@ OniaVtxReProducer::OniaVtxReProducer(const edm::Handle & bool foundTracks = false; bool foundBeamSpot = false; for (std::vector::const_iterator it = parents.begin(), ed = parents.end(); it != ed; ++it) { - edm::Provenance parprov = iEvent.getProvenance(*it); + const edm::Provenance &parprov = iEvent.getProvenance(*it); if (parprov.friendlyClassName() == "recoTracks") { tracksTag_ = edm::InputTag(parprov.moduleLabel(), parprov.productInstanceName(), parprov.processName()); foundTracks = true; diff --git a/HeavyFlavorAnalysis/Skimming/BuildFile.xml b/HeavyFlavorAnalysis/Skimming/BuildFile.xml deleted file mode 100644 index 7cf29fc51b3f4..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/BuildFile.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/HeavyFlavorAnalysis/Skimming/interface/Combinatorics.h b/HeavyFlavorAnalysis/Skimming/interface/Combinatorics.h deleted file mode 100644 index 10ae79adfed51..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/interface/Combinatorics.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Combinatorics.h - * - * 03/04/2006 kasselmann@physik.rwth-aachen.de - * - */ - -#ifndef COMBINATORICS_H -#define COMBINATORICS_H - -// C++ header -#include - -// ROOT header -#include - -class Combinatorics { -public: - Combinatorics(Int_t Set, Int_t Subset); - virtual ~Combinatorics(); - - std::vector > GetPermutations(); - std::vector > GetCombinations(); - std::vector > GetCombinations_2_0(); - std::vector > GetCombinations_2_2(); - std::vector > GetCombinations_N_1(); - - Int_t EqualPermutation(const std::vector& permutation1, const std::vector& permutation2); - Int_t EqualPermutation_2_0(const std::vector& permutation1, const std::vector& permutation2); - Int_t EqualPermutation_2_2(const std::vector& permutation1, const std::vector& permutation2); - Int_t EqualPermutation_N_1(const std::vector& permutation1, const std::vector& permutation2); - - void Print(const std::vector& permutation); - void Print(const std::vector >& permutations); - -private: - Int_t CalculatePermutations(); - - void initial_permutation(int size, int* permutation); - Bool_t next_permutation(int size, int* permutation); - void initial_subset(int k, int* subset); - Bool_t next_subset(int n, int k, int* subset); - - void Skip_2_0(const std::vector >& permutation1, std::vector >& permutation2); - void Skip_2_2(const std::vector >& permutation1, std::vector >& permutation2); - - std::vector Rotate(const std::vector& permutation, UInt_t digits); - - const Int_t m_SetQuantity; - const Int_t m_SubsetQuantity; - - std::vector m_Subset; - std::vector > m_Permutations; - std::vector > m_Combinations; -}; - -#endif diff --git a/HeavyFlavorAnalysis/Skimming/interface/Tau3MuReco.h b/HeavyFlavorAnalysis/Skimming/interface/Tau3MuReco.h deleted file mode 100644 index 4b8cd32919946..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/interface/Tau3MuReco.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef TAU3MURECO_H -#define TAU3MURECO_H - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include -#include -#include - -class Tau3MuReco { -public: - Tau3MuReco(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC); - ~Tau3MuReco(); - - bool doTau3MuReco(const edm::Event& iEvent, - const edm::EventSetup& iSetup, - reco::MuonCollection* muonCollection, - reco::TrackCollection* trackCollection); - -private: - bool check4MuonTrack( - const reco::Track& track); //compares track with reconstructed muons and return true if they are equal - bool find3rdTrack( - const edm::Event& iEvent, - const edm::EventSetup& iSetup, - const reco::TrackCollection& Tracks); //try to find a 3rd muon in tracks, if this was not detected as a muon - bool findCorrectPairing(); //find the correct 3 muons, if more than 3 muons has been reconstructed - double getInvariantMass(const reco::TrackCollection* tracks, const double MuonMass = 0.106); - double getDeltaR(const reco::Track& track1, const reco::Track& track2); - bool removeIncorrectMuon(); //try to remove one muon, which seems to come not from a tau->3Mu decay - - const double m_kMatchingDeltaR; - const double m_kMatchingPt; - const double m_kTauMassCut; - const double m_kTauMass; - const double m_kMuonMass; - - const edm::EDGetTokenT m_kMuonSourceToken; - const edm::EDGetTokenT m_kTrackSourceToken; - - reco::MuonCollection* m_MuonCollection; - reco::TrackCollection* m_TrackCollection; -}; - -#endif diff --git a/HeavyFlavorAnalysis/Skimming/plugins/BuildFile.xml b/HeavyFlavorAnalysis/Skimming/plugins/BuildFile.xml deleted file mode 100644 index 996fee6d9943b..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/plugins/BuildFile.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/HeavyFlavorAnalysis/Skimming/plugins/Tau3MuSkim.cc b/HeavyFlavorAnalysis/Skimming/plugins/Tau3MuSkim.cc deleted file mode 100644 index 97096b5b26104..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/plugins/Tau3MuSkim.cc +++ /dev/null @@ -1,60 +0,0 @@ -// -*- C++ -*- -// -// Package: Tau3MuSkim -// Class: Tau3MuSkim -// -/**\class Tau3MuSkim Tau3MuSkim.cc HeavyFlavorAnalysis/Skimming/plugins/Tau3MuSkim.cc - - Description: - - Implementation: - -*/ -// -// Original Author: Manuel Giffels -// Created: Mon Jul 23 10:19:11 CEST 2007 -// -// -// - -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "DataFormats/MuonReco/interface/MuonFwd.h" - -#include "HeavyFlavorAnalysis/Skimming/interface/Tau3MuReco.h" -#include "HeavyFlavorAnalysis/Skimming/plugins/Tau3MuSkim.h" - -Tau3MuSkim::Tau3MuSkim(const edm::ParameterSet& iConfig) { - m_Tau3MuReco = new Tau3MuReco(iConfig, consumesCollector()); - - produces("tau3MuCandidateMuons"); - produces("tau3MuCandidateTracks"); -} - -Tau3MuSkim::~Tau3MuSkim() { delete m_Tau3MuReco; } - -// -// member functions -// - -// ------------ method called on each new Event ------------ -bool Tau3MuSkim::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) { - std::unique_ptr tau3MuCandidateMuons(new reco::MuonCollection); - std::unique_ptr tau3MuCandidateTracks(new reco::TrackCollection); - - bool accept = m_Tau3MuReco->doTau3MuReco(iEvent, iSetup, tau3MuCandidateMuons.get(), tau3MuCandidateTracks.get()); - - iEvent.put(std::move(tau3MuCandidateMuons), "tau3MuCandidateMuons"); - iEvent.put(std::move(tau3MuCandidateTracks), "tau3MuCandidateTracks"); - - return accept; -} - -// ------------ method called once each job just before starting event loop ------------ -void Tau3MuSkim::beginJob() {} - -// ------------ method called once each job just after ending the event loop ------------ -void Tau3MuSkim::endJob() {} - -//define this as a plug-in -DEFINE_FWK_MODULE(Tau3MuSkim); diff --git a/HeavyFlavorAnalysis/Skimming/plugins/Tau3MuSkim.h b/HeavyFlavorAnalysis/Skimming/plugins/Tau3MuSkim.h deleted file mode 100644 index f83574fd5f7c5..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/plugins/Tau3MuSkim.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef TAU3MUSKIM -#define TAU3MUSKIM - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -// -// class declaration -// - -class Tau3MuReco; - -class Tau3MuSkim : public edm::EDFilter { -public: - explicit Tau3MuSkim(const edm::ParameterSet&); - ~Tau3MuSkim() override; - -private: - void beginJob() override; - bool filter(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - // ----------member data --------------------------- - Tau3MuReco* m_Tau3MuReco; -}; - -#endif diff --git a/HeavyFlavorAnalysis/Skimming/python/AODSIMTauTo3Mu_EventContent_cff.py b/HeavyFlavorAnalysis/Skimming/python/AODSIMTauTo3Mu_EventContent_cff.py deleted file mode 100644 index f96663f12346b..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/AODSIMTauTo3Mu_EventContent_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HeavyFlavorAnalysis.Skimming.tauTo3Mu_EventContent_cff import * -AODSIMTauTo3MuEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -AODSIMTauTo3MuEventContent.outputCommands.extend(AODSIMEventContent.outputCommands) -AODSIMTauTo3MuEventContent.outputCommands.extend(tauTo3MuEventContent.outputCommands) - diff --git a/HeavyFlavorAnalysis/Skimming/python/CompactSkim_cff.py b/HeavyFlavorAnalysis/Skimming/python/CompactSkim_cff.py deleted file mode 100644 index 1a072842e0137..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/CompactSkim_cff.py +++ /dev/null @@ -1,117 +0,0 @@ -import FWCore.ParameterSet.Config as cms -from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask - -def CompactSkim(process,inFileNames,outFileName,Global_Tag='auto:run2_mc',MC=True,Filter=True): - - patAlgosToolsTask = getPatAlgosToolsTask(process) - - process.load('Configuration.StandardSequences.Services_cff') - process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') - process.load('FWCore.MessageService.MessageLogger_cfi') - process.load('Configuration.EventContent.EventContent_cff') - process.load('Configuration.StandardSequences.GeometryRecoDB_cff') - process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff') - process.load('Configuration.StandardSequences.EndOfProcess_cff') - patAlgosToolsTask.add(process.MEtoEDMConverter) - process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') - - process.MessageLogger.cerr.FwkReport.reportEvery = 100 - process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(False) ) - process.source = cms.Source('PoolSource', fileNames = cms.untracked.vstring(inFileNames)) - process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - - from Configuration.AlCa.GlobalTag import GlobalTag - process.GlobalTag = GlobalTag(process.GlobalTag, Global_Tag, '') - - # make patCandidates, select and clean them - process.load('PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff') - patAlgosToolsTask.add(process.patCandidatesTask) - process.load('PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff') - patAlgosToolsTask.add(process.selectedPatCandidatesTask) - process.load('PhysicsTools.PatAlgos.cleaningLayer1.cleanPatCandidates_cff') - patAlgosToolsTask.add(process.cleanPatCandidatesTask) - process.patMuons.embedTrack = True - - process.selectedPatMuons.cut = cms.string('muonID(\"TMOneStationTight\")' - ' && abs(innerTrack.dxy) < 0.3' - ' && abs(innerTrack.dz) < 20.' - ' && innerTrack.hitPattern.trackerLayersWithMeasurement > 5' - ' && innerTrack.hitPattern.pixelLayersWithMeasurement > 0' - ' && innerTrack.quality(\"highPurity\")' - ) - - #make patTracks - from PhysicsTools.PatAlgos.tools.trackTools import makeTrackCandidates - makeTrackCandidates(process, - label = 'TrackCands', # output collection - tracks = cms.InputTag('generalTracks'), # input track collection - particleType = 'pi+', # particle type (for assigning a mass) - preselection = 'pt > 0.7', # preselection cut on candidates - selection = 'pt > 0.7', # selection on PAT Layer 1 objects - isolation = {}, # isolations to use (set to {} for None) - isoDeposits = [], - mcAs = None # replicate MC match as the one used for Muons - ) - process.patTrackCands.embedTrack = True - - # dimuon = Onia2MUMU - process.load('HeavyFlavorAnalysis.Onia2MuMu.onia2MuMuPAT_cfi') - patAlgosToolsTask.add(process.onia2MuMuPAT) - process.onia2MuMuPAT.muons=cms.InputTag('cleanPatMuons') - process.onia2MuMuPAT.primaryVertexTag=cms.InputTag('offlinePrimaryVertices') - process.onia2MuMuPAT.beamSpotTag=cms.InputTag('offlineBeamSpot') - - process.onia2MuMuPATCounter = cms.EDFilter('CandViewCountFilter', - src = cms.InputTag('onia2MuMuPAT'), - minNumber = cms.uint32(1), - ) - - # reduce MC genParticles a la miniAOD - process.load('PhysicsTools.PatAlgos.slimming.genParticles_cff') - patAlgosToolsTask.add(process.genParticlesTask) - process.packedGenParticles.inputVertices = cms.InputTag('offlinePrimaryVertices') - - # make photon candidate conversions for P-wave studies - process.load('HeavyFlavorAnalysis.Onia2MuMu.OniaPhotonConversionProducer_cfi') - patAlgosToolsTask.add(process.PhotonCandidates) - - # add v0 with tracks embed - process.load('HeavyFlavorAnalysis.Onia2MuMu.OniaAddV0TracksProducer_cfi') - patAlgosToolsTask.add(process.oniaV0Tracks) - - # Pick branches you want to keep - SlimmedEventContent = [ - 'keep recoVertexs_offlinePrimaryVertices_*_*', - 'keep *_inclusiveSecondaryVertices_*_*', - 'keep *_offlineBeamSpot_*_*', - 'keep *_TriggerResults_*_HLT', - 'keep *_gtDigis_*_RECO', - 'keep *_cleanPatTrackCands_*_*', - 'keep *_PhotonCandidates_*_*', - 'keep *_onia2MuMuPAT_*_*', - 'keep *_generalV0Candidates_*_*', - 'keep *_oniaV0Tracks_*_*', - 'keep PileupSummaryInfos_*_*_*' - ] - - if not MC: - from PhysicsTools.PatAlgos.tools.coreTools import runOnData - runOnData( process, outputModules = [] ) - else : - SlimmedEventContent += [ - 'keep patPackedGenParticles_packedGenParticles_*_*', - 'keep recoGenParticles_prunedGenParticles_*_*', - 'keep GenFilterInfo_*_*_*', - 'keep GenEventInfoProduct_generator_*_*', - 'keep GenRunInfoProduct_*_*_*' - ] - - process.FilterOutput = cms.Path(process.onia2MuMuPATCounter) - - process.out = cms.OutputModule('PoolOutputModule', - fileName = cms.untracked.string(outFileName), - outputCommands = cms.untracked.vstring('drop *', *SlimmedEventContent), - SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('FilterOutput')) if Filter else cms.untracked.PSet() - ) - - process.outpath = cms.EndPath(process.out, patAlgosToolsTask) diff --git a/HeavyFlavorAnalysis/Skimming/python/bToMuMuOutputModuleAODSIM_cfi.py b/HeavyFlavorAnalysis/Skimming/python/bToMuMuOutputModuleAODSIM_cfi.py deleted file mode 100644 index d93b46ca9f0bd..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/bToMuMuOutputModuleAODSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -#include "Configuration/EventContent/data/EventContent.cff" -from HeavyFlavorAnalysis.Skimming.onia_EventContent_cff import * -bToMuMuOutputModuleAODSIM = cms.OutputModule("PoolOutputModule", - AODSIMEventContent, - bToMuMuEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('bToMuMu'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('bToMuMu.root') -) - - diff --git a/HeavyFlavorAnalysis/Skimming/python/bToMuMu_EventContent_cff.py b/HeavyFlavorAnalysis/Skimming/python/bToMuMu_EventContent_cff.py deleted file mode 100644 index af91d61c0a659..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/bToMuMu_EventContent_cff.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# keep essential info used to construct b to Jpsi -bToMuMuEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -bToMuMuEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('bToMuMuHLTPath') - ) -) - diff --git a/HeavyFlavorAnalysis/Skimming/python/bToMuMu_HLTPath_cfi.py b/HeavyFlavorAnalysis/Skimming/python/bToMuMu_HLTPath_cfi.py deleted file mode 100644 index 873a4b6fd9663..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/bToMuMu_HLTPath_cfi.py +++ /dev/null @@ -1,7 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -bToMuMuHLTFilter = copy.deepcopy(hltHighLevel) -bToMuMuHLTFilter.HLTPaths = ['HLT_DoubleMu3', 'HLT_DoubleMu4_BJPsi', 'HLT_DoubleMu3_SameSign'] - diff --git a/HeavyFlavorAnalysis/Skimming/python/bToMuMu_SkimPath_cff.py b/HeavyFlavorAnalysis/Skimming/python/bToMuMu_SkimPath_cff.py deleted file mode 100644 index 081024b15ab1b..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/bToMuMu_SkimPath_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HeavyFlavorAnalysis.Skimming.bToMuMu_HLTPath_cfi import * -bToMuMuHLTPath = cms.Path(bToMuMuHLTFilter) - diff --git a/HeavyFlavorAnalysis/Skimming/python/jpsiToMuMuOutputModuleAODSIM_cfi.py b/HeavyFlavorAnalysis/Skimming/python/jpsiToMuMuOutputModuleAODSIM_cfi.py deleted file mode 100644 index 4479cc2b0ecf2..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/jpsiToMuMuOutputModuleAODSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -#include "Configuration/EventContent/data/EventContent.cff" -from HeavyFlavorAnalysis.Skimming.onia_EventContent_cff import * -jpsiToMuMuOutputModuleAODSIM = cms.OutputModule("PoolOutputModule", - AODSIMEventContent, - jpsiToMuMuEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('jpsiToMuMu'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('jpsiToMuMu.root') -) - - diff --git a/HeavyFlavorAnalysis/Skimming/python/jpsiToMuMu_EventContent_cff.py b/HeavyFlavorAnalysis/Skimming/python/jpsiToMuMu_EventContent_cff.py deleted file mode 100644 index 90a9565e691c9..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/jpsiToMuMu_EventContent_cff.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -jpsiToMuMuEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) - -jpsiToMuMuEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('jpsiToMuMuHLTPath') - ) -) - diff --git a/HeavyFlavorAnalysis/Skimming/python/jpsiToMuMu_HLTPath_cfi.py b/HeavyFlavorAnalysis/Skimming/python/jpsiToMuMu_HLTPath_cfi.py deleted file mode 100644 index bbaa6124b21ef..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/jpsiToMuMu_HLTPath_cfi.py +++ /dev/null @@ -1,7 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -jpsiToMuMuHLTFilter = copy.deepcopy(hltHighLevel) -jpsiToMuMuHLTFilter.HLTPaths = ['HLT_DoubleMu3_JPsi'] - diff --git a/HeavyFlavorAnalysis/Skimming/python/jpsiToMuMu_SkimPath_cff.py b/HeavyFlavorAnalysis/Skimming/python/jpsiToMuMu_SkimPath_cff.py deleted file mode 100644 index 157297610609f..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/jpsiToMuMu_SkimPath_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HeavyFlavorAnalysis.Skimming.jpsiToMuMu_HLTPath_cfi import * -jpsiToMuMuHLTPath = cms.Path(jpsiToMuMuHLTFilter) - diff --git a/HeavyFlavorAnalysis/Skimming/python/onia_EventContent_cff.py b/HeavyFlavorAnalysis/Skimming/python/onia_EventContent_cff.py deleted file mode 100644 index 2285588858ead..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/onia_EventContent_cff.py +++ /dev/null @@ -1,20 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HeavyFlavorAnalysis.Skimming.jpsiToMuMu_EventContent_cff import * -from HeavyFlavorAnalysis.Skimming.upsilonToMuMu_EventContent_cff import * -from HeavyFlavorAnalysis.Skimming.bToMuMu_EventContent_cff import * -from Configuration.EventContent.EventContent_cff import * -oniaMuMuEventContent = cms.PSet( - outputCommands = cms.untracked.vstring('keep *_source_*_*', - 'keep recoCandidatesOwned_genParticleCandidates_*_*', - 'keep recoTracks_ctfWithMaterialTracks_*_*', - 'keep recoTracks_globalMuons_*_*', - 'keep recoTracks_standAloneMuons_*_*', - 'keep recoMuons_muons_*_*', - 'keep recoCandidatesOwned_allMuons_*_*', - 'keep recoCandidatesOwned_allTracks_*_*', - 'keep recoCandidatesOwned_allStandAloneMuonTracks_*_*') -) -AODSIMEventContent.outputCommands.extend(oniaMuMuEventContent.outputCommands) -AODSIMEventContent.outputCommands.extend(bToMuMuEventContent.outputCommands) - diff --git a/HeavyFlavorAnalysis/Skimming/python/onia_OutputModules_cff.py b/HeavyFlavorAnalysis/Skimming/python/onia_OutputModules_cff.py deleted file mode 100644 index 752e29b69d655..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/onia_OutputModules_cff.py +++ /dev/null @@ -1,6 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HeavyFlavorAnalysis.Skimming.jpsiToMuMuOutputModuleAODSIM_cfi import * -from HeavyFlavorAnalysis.Skimming.upsilonToMuMuOutputModuleAODSIM_cfi import * -from HeavyFlavorAnalysis.Skimming.bToMuMuOutputModuleAODSIM_cfi import * - diff --git a/HeavyFlavorAnalysis/Skimming/python/onia_Sequences_cff.py b/HeavyFlavorAnalysis/Skimming/python/onia_Sequences_cff.py deleted file mode 100644 index 1d27c22c07af0..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/onia_Sequences_cff.py +++ /dev/null @@ -1,6 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HeavyFlavorAnalysis.Skimming.jpsiToMuMu_HLTPath_cfi import * -from HeavyFlavorAnalysis.Skimming.upsilonToMuMu_HLTPath_cfi import * -from HeavyFlavorAnalysis.Skimming.bToMuMu_HLTPath_cfi import * - diff --git a/HeavyFlavorAnalysis/Skimming/python/onia_SkimPaths_cff.py b/HeavyFlavorAnalysis/Skimming/python/onia_SkimPaths_cff.py deleted file mode 100644 index 0bdf93d926a06..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/onia_SkimPaths_cff.py +++ /dev/null @@ -1,6 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HeavyFlavorAnalysis.Skimming.jpsiToMuMu_SkimPath_cff import * -from HeavyFlavorAnalysis.Skimming.upsilonToMuMu_SkimPath_cff import * -from HeavyFlavorAnalysis.Skimming.bToMuMu_SkimPath_cff import * - diff --git a/HeavyFlavorAnalysis/Skimming/python/tauTo3MuFilter_cfi.py b/HeavyFlavorAnalysis/Skimming/python/tauTo3MuFilter_cfi.py deleted file mode 100644 index 3ca3164a8c51b..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/tauTo3MuFilter_cfi.py +++ /dev/null @@ -1,13 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -tauTo3MuFilter = cms.EDFilter("Tau3MuSkim", - RecoAnalysisMuonMass = cms.double(0.1057), - RecoAnalysisTauMass = cms.double(1.777), - TrackSourceTag = cms.InputTag("ctfWithMaterialTracks"), - RecoAnalysisMatchingDeltaR = cms.double(0.01), - MuonSourceTag = cms.InputTag("muons"), - RecoAnalysisMatchingPt = cms.double(0.1), - RecoAnalysisTauMassCut = cms.double(0.2) -) - - diff --git a/HeavyFlavorAnalysis/Skimming/python/tauTo3MuHLTPath_cfi.py b/HeavyFlavorAnalysis/Skimming/python/tauTo3MuHLTPath_cfi.py deleted file mode 100644 index 9664d5fea2ca5..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/tauTo3MuHLTPath_cfi.py +++ /dev/null @@ -1,7 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -tauTo3MuHLTFilter = copy.deepcopy(hltHighLevel) -tauTo3MuHLTFilter.HLTPaths = ['HLT_IsoMu11', 'HLT_Mu15_L1Mu7', 'HLT_DoubleMu3', 'HLT_TripleMu3'] - diff --git a/HeavyFlavorAnalysis/Skimming/python/tauTo3MuOutputModule_cfi.py b/HeavyFlavorAnalysis/Skimming/python/tauTo3MuOutputModule_cfi.py deleted file mode 100644 index ac639d19c1545..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/tauTo3MuOutputModule_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HeavyFlavorAnalysis.Skimming.tauTo3Mu_EventContent_cff import * -from HeavyFlavorAnalysis.Skimming.AODSIMTauTo3Mu_EventContent_cff import * -tauTo3MuOutputModule = cms.OutputModule("PoolOutputModule", - AODSIMTauTo3MuEventContent, - tauTo3MuEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('tauTo3Mu'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('tauTo3Mu.root') -) - - diff --git a/HeavyFlavorAnalysis/Skimming/python/tauTo3MuSequences_cff.py b/HeavyFlavorAnalysis/Skimming/python/tauTo3MuSequences_cff.py deleted file mode 100644 index de14812da4cba..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/tauTo3MuSequences_cff.py +++ /dev/null @@ -1,6 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HeavyFlavorAnalysis.Skimming.tauTo3MuHLTPath_cfi import * -from HeavyFlavorAnalysis.Skimming.tauTo3MuFilter_cfi import * -tauTo3MuSkim = cms.Sequence(tauTo3MuHLTFilter+tauTo3MuFilter) - diff --git a/HeavyFlavorAnalysis/Skimming/python/tauTo3Mu_EventContent_cff.py b/HeavyFlavorAnalysis/Skimming/python/tauTo3Mu_EventContent_cff.py deleted file mode 100644 index b1e783e9d80f7..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/tauTo3Mu_EventContent_cff.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -tauTo3MuEventContent = cms.PSet( - outputCommands = cms.untracked.vstring('keep recoTracks_ctfWithMaterialTracks_*_*', - 'keep recoTracks_globalMuons_*_*', - 'keep recoTracks_standAloneMuons_*_*', - 'keep recoMuons_muons_*_*', - 'keep recoCandidatesOwned_genParticle_*_*', - 'keep *_tauTo3MuFilter_*_*') -) -tauTo3MuEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('tauTo3MuPath') - ) -) - diff --git a/HeavyFlavorAnalysis/Skimming/python/tauTo3Mu_SkimPaths_cff.py b/HeavyFlavorAnalysis/Skimming/python/tauTo3Mu_SkimPaths_cff.py deleted file mode 100644 index 30fe63d9d1a5a..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/tauTo3Mu_SkimPaths_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HeavyFlavorAnalysis.Skimming.tauTo3MuSequences_cff import * -tauTo3MuPath = cms.Path(tauTo3MuSkim) - diff --git a/HeavyFlavorAnalysis/Skimming/python/upsilonToMuMuOutputModuleAODSIM_cfi.py b/HeavyFlavorAnalysis/Skimming/python/upsilonToMuMuOutputModuleAODSIM_cfi.py deleted file mode 100644 index f9351f21ed82c..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/upsilonToMuMuOutputModuleAODSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -#include "Configuration/EventContent/data/EventContent.cff" -from HeavyFlavorAnalysis.Skimming.onia_EventContent_cff import * -upsilonToMuMuOutputModuleAODSIM = cms.OutputModule("PoolOutputModule", - upsilonToMuMuEventSelection, - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('upsilonToMuMu'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('upsilonToMuMu.root') -) - - diff --git a/HeavyFlavorAnalysis/Skimming/python/upsilonToMuMu_EventContent_cff.py b/HeavyFlavorAnalysis/Skimming/python/upsilonToMuMu_EventContent_cff.py deleted file mode 100644 index d3e746482e301..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/upsilonToMuMu_EventContent_cff.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -upsilonToMuMuEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) - -upsilonToMuMuEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('upsilonToMuMuHLTPath') - ) -) - diff --git a/HeavyFlavorAnalysis/Skimming/python/upsilonToMuMu_HLTPath_cfi.py b/HeavyFlavorAnalysis/Skimming/python/upsilonToMuMu_HLTPath_cfi.py deleted file mode 100644 index dd67b2b8c3812..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/upsilonToMuMu_HLTPath_cfi.py +++ /dev/null @@ -1,7 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -upsilonToMuMuHLTFilter = copy.deepcopy(hltHighLevel) -upsilonToMuMuHLTFilter.HLTPaths = ['HLT_DoubleMu3_Upsilon'] - diff --git a/HeavyFlavorAnalysis/Skimming/python/upsilonToMuMu_SkimPath_cff.py b/HeavyFlavorAnalysis/Skimming/python/upsilonToMuMu_SkimPath_cff.py deleted file mode 100644 index 730a2aa007eb0..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/python/upsilonToMuMu_SkimPath_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HeavyFlavorAnalysis.Skimming.upsilonToMuMu_HLTPath_cfi import * -upsilonToMuMuHLTPath = cms.Path(upsilonToMuMuHLTFilter) - diff --git a/HeavyFlavorAnalysis/Skimming/src/Combinatorics.cc b/HeavyFlavorAnalysis/Skimming/src/Combinatorics.cc deleted file mode 100644 index 8ac52973951dd..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/src/Combinatorics.cc +++ /dev/null @@ -1,426 +0,0 @@ -/* - * Combinatorics.cpp - * - * 03/04/2006 kasselmann@physik.rwth-aachen.de - * 19/08/2007 giffels@physik.rwth-aachen.de - * - */ -//framework -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -// Own header -#include "HeavyFlavorAnalysis/Skimming/interface/Combinatorics.h" - -using namespace std; - -// ************************************************************************** -// Class Constructor -// ************************************************************************** -Combinatorics::Combinatorics(Int_t SetQuantity, Int_t SubsetQuantity) - : - - m_SetQuantity(SetQuantity), - m_SubsetQuantity(SubsetQuantity) { - // Get permutations - CalculatePermutations(); -} - -// ************************************************************************** -// Class Destructor -// ************************************************************************** -Combinatorics::~Combinatorics() {} - -// ************************************************************************** -// Get subset permutations -// ************************************************************************** -vector > Combinatorics::GetPermutations() { return m_Permutations; } - -// ************************************************************************** -// Calculate all subset permutations -// ************************************************************************** -Int_t Combinatorics::CalculatePermutations() { - if (m_SetQuantity < 1 || m_SubsetQuantity < 1 || (m_SetQuantity < m_SubsetQuantity)) { - edm::LogWarning("Combinatorics") << "[Combinatorics] No valid choice of set or subset!" << endl; - return -1; - } - - Int_t* currentSubset = new Int_t[m_SubsetQuantity]; - Int_t* currentMapping = new Int_t[m_SetQuantity]; - - initial_subset(m_SubsetQuantity, currentSubset); - do { - initial_permutation(m_SetQuantity, currentMapping); - do { - for (UShort_t i = 0; i < m_SubsetQuantity; i++) { - m_Subset.push_back(currentSubset[currentMapping[i]]); - } - m_Permutations.push_back(m_Subset); - m_Subset.clear(); - } while (next_permutation(m_SubsetQuantity, currentMapping)); - } while (next_subset(m_SetQuantity, m_SubsetQuantity, currentSubset)); - - delete[] currentSubset; - delete[] currentMapping; - - return 0; -} - -// ************************************************************************** -// Build initial permutation -// ************************************************************************** -void Combinatorics::initial_permutation(int size, int* permutation) { - for (int i = 0; i < size; i++) { - permutation[i] = i; - } -} - -// ************************************************************************** -// Build initial subset -// ************************************************************************** -void Combinatorics::initial_subset(int k, int* subset) { - for (int i = 0; i < k; i++) { - subset[i] = i; - } -} - -// ************************************************************************** -// Get next permutation if a next permutation exists -// ************************************************************************** -Bool_t Combinatorics::next_permutation(int size, int* permutation) { - int i, j, k; - if (size < 2) - return false; - i = size - 2; - - while ((permutation[i] > permutation[i + 1]) && (i != 0)) { - i--; - } - if ((i == 0) && (permutation[0] > permutation[1])) - return false; - - k = i + 1; - for (j = i + 2; j < size; j++) { - if ((permutation[j] > permutation[i]) && (permutation[j] < permutation[k])) { - k = j; - } - } - - // swap i and k - { - int tmp = permutation[i]; - permutation[i] = permutation[k]; - permutation[k] = tmp; - } - - for (j = i + 1; j <= ((size + i) / 2); j++) { - int tmp = permutation[j]; - permutation[j] = permutation[size + i - j]; - permutation[size + i - j] = tmp; - } - - // return whether a next permutation exists - return true; -} - -// ************************************************************************** -// Get next subset if a next subset exists -// -// n: the size of the set -// k: the size of the subset -// ************************************************************************** -Bool_t Combinatorics::next_subset(int n, int k, int* subset) { - int i; - int j; - int jsave; - bool done; - - if (subset[0] < n - k) { - done = false; - jsave = k - 1; - for (j = 0; j < k - 1; j++) { - if (subset[j] + 1 < subset[j + 1]) { - jsave = j; - break; - } - } - for (i = 0; i < jsave; i++) - subset[i] = i; - subset[jsave] = subset[jsave] + 1; - } else { - done = true; - } - // return whether a next subset exists - return !done; -} - -// ************************************************************************** -// Get all subset combinations -// ************************************************************************** -vector > Combinatorics::GetCombinations() { - if (m_Permutations.empty()) { - LogDebug("Combinatorics") << "Nothing to do." << endl; - return m_Combinations; - } - - m_Combinations.push_back(m_Permutations.at(0)); - - for (UInt_t i = 1; i < m_Permutations.size(); i++) { - if (!EqualPermutation(m_Combinations.back(), m_Permutations.at(i))) { - m_Combinations.push_back(m_Permutations.at(i)); - } - } - return m_Combinations; -} - -// ************************************************************************** -// Returns true if two permutations of four "int" are equal -// (Equal means e.g.: 0123 = 1023 = 0132 = 1032) -// ************************************************************************** -Int_t Combinatorics::EqualPermutation(const vector& p1, const vector& p2) { - if (p1.size() != p2.size()) { - edm::LogWarning("Combinatorics") << "[Combinatorics::EqualPermutation] permutations have different size!" << endl; - return -1; - } - - Float_t p1_sum = 0.0; - Float_t p2_sum = 0.0; - - // Check whether permutations are equal (2^index) - for (UInt_t i = 0; i < p1.size(); i++) - p1_sum += (1 << p1.at(i)); - for (UInt_t i = 0; i < p2.size(); i++) - p2_sum += (1 << p2.at(i)); - - return (p1_sum == p2_sum ? 1 : 0); -} - -// ************************************************************************** -// Get combinations: 4 out of n -// -// (The order of the first and second two is not important! -// 0123 = 1023 = 0132 = 1032 are equal therefore) -// ************************************************************************** -vector > Combinatorics::GetCombinations_2_2() { - // combination vector returned - vector > FinalCombinations; - - if (m_Permutations.empty()) { - LogDebug("Combinatorics") << "[Combinatorics::GetCombinations_2_2] Nothing to do." << endl; - return FinalCombinations; - } - - // So far only for subsets of four indices - if (m_SubsetQuantity != 4) { - edm::LogWarning("Combinatorics") << "[Combinatorics::GetCombinations_2_2] Subset must be 4." << endl; - return FinalCombinations; - } - - // Skip specific permutations - Skip_2_2(m_Permutations, FinalCombinations); - - return FinalCombinations; -} - -// ************************************************************************** -// Get combinations: 4 out of n -// -// (The order of the last two is important only: -// 0123 = 1023 are equal therefore) -// ************************************************************************** -vector > Combinatorics::GetCombinations_2_0() { - // combination vector returned - vector > FinalCombinations; - - if (m_Permutations.empty()) { - LogDebug("Combinatorics") << "[Combinatorics::GetCombinations_2_0] Nothing to do." << endl; - return FinalCombinations; - } - - // So far only for subsets of four indices - if (m_SubsetQuantity != 4) { - edm::LogWarning("Combinatorics") << "[Combinatorics::GetCombinations_2_0] Subset must be 4." << endl; - return FinalCombinations; - } - - // Skip specific permutations - Skip_2_0(m_Permutations, FinalCombinations); - - return FinalCombinations; -} - -// ************************************************************************** -// Skip permutation from p1 if already existing in p2 -// ************************************************************************** -void Combinatorics::Skip_2_0(const vector >& p1, vector >& p2) { - Bool_t Skip = kFALSE; - - p2.push_back(p1.at(0)); - - for (UShort_t i = 1; i < p1.size(); i++) { - for (UShort_t j = 0; j < p2.size(); j++) { - if (EqualPermutation_2_0(p1.at(i), p2.at(j))) { - Skip = kTRUE; - } - } - if (!Skip) - p2.push_back(p1.at(i)); - - Skip = kFALSE; - } -} - -// ************************************************************************** -// Skip permutation from p1 if already existing in p2 -// ************************************************************************** -void Combinatorics::Skip_2_2(const vector >& p1, vector >& p2) { - Bool_t Skip = kFALSE; - - p2.push_back(p1.at(0)); - - for (UShort_t i = 1; i < p1.size(); i++) { - for (UShort_t j = 0; j < p2.size(); j++) { - if (EqualPermutation_2_2(p1.at(i), p2.at(j))) { - Skip = kTRUE; - } - } - if (!Skip) - p2.push_back(p1.at(i)); - - Skip = kFALSE; - } -} - -// ************************************************************************** -// Returns true if the two first digm_ of two permutations are equal -// e.g.: 0123 = 1023 -// ************************************************************************** -Int_t Combinatorics::EqualPermutation_2_0(const vector& p1, const vector& p2) { - if (p1.size() < 2) { - edm::LogWarning("Combinatorics") << "[Combinatorics::EqualPermutation_2_0] permutation has wrong size!" << endl; - return -1; - } - - // Check whether permutations are equal - if (((1 << p1.at(0)) + (1 << p1.at(1)) == (1 << p2.at(0)) + (1 << p2.at(1))) && p1.at(2) == p2.at(2) && - p1.at(3) == p2.at(3)) { - return 1; - } - return 0; -} - -// ************************************************************************** -// Returns true if two permutations of four "int" are equal -// e.g.: 0123 = 1023 = 0132 = 1032 -// ************************************************************************** -Int_t Combinatorics::EqualPermutation_2_2(const vector& p1, const vector& p2) { - // Returns true if two permutations of four "int" are equal - // (equal means e.g.: 0123 = 1023 = 0132 = 1032) - - if (p1.size() != 4 && p2.size() != 4) { - edm::LogWarning("Combinatorics") << "[Combinatorics::EqualPermutationTwoByTwo] permutation(s) have wrong size!" - << endl; - return -1; - } - - // Check whether permutations are equal (2^index) - if (((1 << p1.at(0)) + (1 << p1.at(1)) == (1 << p2.at(0)) + (1 << p2.at(1))) && - ((1 << p1.at(2)) + (1 << p1.at(3)) == (1 << p2.at(2)) + (1 << p2.at(3)))) { - return 1; - } - return 0; -} - -// ************************************************************************** -// Returns true if two permutations of four are "equal" -// e.g.: 0123 = 1023 -// ************************************************************************** -Int_t Combinatorics::EqualPermutation_N_1(const vector& p1, const vector& p2) { - // Returns true if two permutations of four "int" are equal - // (equal means e.g.: 012 = 102) - - if (p1.size() != p2.size()) { - edm::LogWarning("Combinatorics") << "[Combinatorics::EqualPermutationTwoByTwo] permutation(s) have wrong size!" - << endl; - return -1; - } - - return (EqualPermutation(p1, p2) && p1.back() == p2.back() ? 1 : 0); -} - -// ************************************************************************** -// Get combinations "N by 1" -// ************************************************************************** -vector > Combinatorics::GetCombinations_N_1() { - // Get combinations - m_Combinations.clear(); - GetCombinations(); - - // combination vector returned - vector > FinalCombinations; - - if (m_Combinations.empty()) { - LogDebug("Combinatorics") << "[Combinatorics::GetCombinationsThreeByOne] Nothing to do." << endl; - return FinalCombinations; - } - - for (UInt_t i = 0; i < m_Combinations.size(); i++) { - vector RotatingPermutation = m_Combinations.at(i); - FinalCombinations.push_back(m_Combinations.at(i)); - - for (UInt_t j = 1; j < RotatingPermutation.size(); j++) { - FinalCombinations.push_back(Rotate(RotatingPermutation, j)); - } - } - return FinalCombinations; -} - -// ************************************************************************** -// Rotate permutation to the "left" by n digm_ -// ************************************************************************** -vector Combinatorics::Rotate(const vector& permutation, UInt_t digm_) { - vector p; - vector tmp; - - if (permutation.size() <= digm_) { - edm::LogWarning("Combinatorics") << "[Combinatorics::Rotate] WARNING: More rotations than digm_ in permutation!" - << endl; - } - - // Save the first i digm_ - for (UInt_t i = 0; i < digm_; i++) { - tmp.push_back(permutation.at(i)); - } - for (UInt_t j = 0; j < permutation.size() - digm_; j++) { - p.push_back(permutation.at(j + digm_)); - } - for (UInt_t k = 0; k < digm_; k++) - p.push_back(tmp.at(k)); - - return p; -} - -// ************************************************************************** -// Print one permutation -// ************************************************************************** -void Combinatorics::Print(const vector& p) { - // Print permutations - for (UShort_t i = 0; i < p.size(); i++) { - LogDebug("Combinatorics") << (p.at(i)); - } - LogDebug("Combinatorics") << endl; -} - -// ************************************************************************** -// Print permutations -// ************************************************************************** -void Combinatorics::Print(const vector >& p) { - LogDebug("Combinatorics") << "**************" << endl; - LogDebug("Combinatorics") << "Permutations: " << p.size() << endl; - - // Print permutations - for (UShort_t i = 0; i < p.size(); i++) { - for (UShort_t j = 0; j < (p.at(0)).size(); j++) - LogDebug("Combinatorics") << (p.at(i)).at(j); - LogDebug("Combinatorics") << endl; - } -} diff --git a/HeavyFlavorAnalysis/Skimming/src/Tau3MuReco.cc b/HeavyFlavorAnalysis/Skimming/src/Tau3MuReco.cc deleted file mode 100644 index f23ad72dd5437..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/src/Tau3MuReco.cc +++ /dev/null @@ -1,292 +0,0 @@ -#include - -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "HeavyFlavorAnalysis/Skimming/interface/Combinatorics.h" - -#include "HeavyFlavorAnalysis/Skimming/interface/Tau3MuReco.h" - -Tau3MuReco::Tau3MuReco(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC) - : m_kMatchingDeltaR(iConfig.getParameter("RecoAnalysisMatchingDeltaR")), - m_kMatchingPt(iConfig.getParameter("RecoAnalysisMatchingPt")), - m_kTauMassCut(iConfig.getParameter("RecoAnalysisTauMassCut")), - m_kTauMass(iConfig.getParameter("RecoAnalysisTauMass")), - m_kMuonMass(iConfig.getParameter("RecoAnalysisMuonMass")), - m_kMuonSourceToken(iC.consumes(iConfig.getParameter("MuonSourceTag"))), - m_kTrackSourceToken(iC.consumes(iConfig.getParameter("TrackSourceTag"))) {} - -Tau3MuReco::~Tau3MuReco() {} - -bool Tau3MuReco::doTau3MuReco(const edm::Event& iEvent, - const edm::EventSetup& iSetup, - reco::MuonCollection* muonCollection, - reco::TrackCollection* trackCollection) { - m_MuonCollection = muonCollection; - m_TrackCollection = trackCollection; - - edm::Handle muons; - edm::Handle tracks; - - reco::MuonCollection::const_iterator muon; - - iEvent.getByToken(m_kMuonSourceToken, muons); - iEvent.getByToken(m_kTrackSourceToken, tracks); - - for (muon = muons->begin(); muon != muons->end(); ++muon) { - m_TrackCollection->push_back(*(muon->track().get())); - m_MuonCollection->push_back(*muon); - } - - if (m_TrackCollection->size() > 3) { - //find the right three ones coming from tau - if (findCorrectPairing() == false) { //maybe implement something like in ==3 (throw away ....) - LogDebug("Tau3MuReco") << "Could not find correct combination!" << std::endl; - return false; - } - - return true; - } - - if (m_TrackCollection->size() == 3) { - if (fabs(getInvariantMass(m_TrackCollection, m_kMuonMass) - m_kTauMass) <= m_kTauMassCut) - return true; - else //throw away one muon which don't match - removeIncorrectMuon(); - } - - if (m_TrackCollection->size() == 2) { - //search the third track - - //get 3rd muon canidate from tracks - if (find3rdTrack(iEvent, iSetup, *(tracks.product())) == false) { - LogDebug("Tau3MuReco") << "A 3rd Track can not be assigned!" << std::endl; - return false; - } else - return true; - } - - // cannot use this event, because less than 2 muons have been found - - LogDebug("Tau3MuReco") << "Not enough (" << m_TrackCollection->size() << ") muons found! Event skipped!" << std::endl; - - return false; -} - -//private -bool Tau3MuReco::check4MuonTrack(const reco::Track& track) { - reco::TrackCollection::const_iterator iter; - - for (iter = m_TrackCollection->begin(); iter != m_TrackCollection->end(); iter++) { - //check if the track has the right charge - //and check if dR is smaller than fMatchingDeltaR - if ((*iter).charge() == track.charge() && getDeltaR(*iter, track) < m_kMatchingDeltaR && - fabs(((*iter).pt()) - (track.pt())) <= (track.pt() * m_kMatchingPt)) { - LogDebug("Tau3MuReco") << "Found muon track in Tracks with DeltaR: " << getDeltaR(*iter, track) - << " Pt: " << track.pt() << " Muons Pt is: " << (*iter).pt() << std::endl; - return true; - } - } - return false; -} - -bool Tau3MuReco::find3rdTrack(const edm::Event& iEvent, - const edm::EventSetup& iSetup, - const reco::TrackCollection& Tracks) { - //check size of TrackVector (should be two!) - if (m_TrackCollection->size() != 2) - return false; - - //more then two tracks should be in the event - if (Tracks.size() <= 2) - return false; - - double SumDeltaR = 0; - - double MuonDeltaR = getDeltaR(m_TrackCollection->at(0), m_TrackCollection->at(1)); - - //Loop overall tracks - - LogDebug("Tau3MuReco") << "Number of tracks found: " << Tracks.size() << std::endl; - - std::multimap TrackMultiMap; - - unsigned short muonCounter = 0; - - reco::TrackCollection::const_iterator track; - - for (track = Tracks.begin(); track != Tracks.end(); track++) { - if (check4MuonTrack(*track)) { - muonCounter++; - continue; - } - - SumDeltaR = MuonDeltaR; - - SumDeltaR += getDeltaR(m_TrackCollection->at(1), *track); - SumDeltaR += getDeltaR(*track, m_TrackCollection->at(0)); - - std::pair actTrack(SumDeltaR, *track); - - TrackMultiMap.insert(actTrack); - } - - //two tracks should be clearly identified as muons by check4MuonTrack - //else event is not useable - if (muonCounter < 2) { - LogDebug("Tau3MuReco") << "Not enough muons (" << muonCounter << ") assigned to a track! Event skipped!" - << std::endl; - return false; - } - - std::multimap::iterator it = TrackMultiMap.begin(); - - if (it == TrackMultiMap.end()) { - LogDebug("Tau3MuReco") << "Not enough tracks (0) left! Event skipped!" << std::endl; - return false; - } - - //get 2mu+track with minimal DeltaR Sum (MultiMaps are sorted) - m_TrackCollection->push_back((*it).second); - - //and check charge of this track - //and check invariant mass of this combination - //and make a vertex fit - - char Charge = m_TrackCollection->at(0).charge() * m_TrackCollection->at(1).charge(); - - unsigned int count = 0; - - //Charge > 0 means the two muons have same charge, so the third track has to have the opposit charge - while ((Charge > 0 && ((*it).second).charge() == (m_TrackCollection->at(0)).charge()) || - fabs(getInvariantMass(m_TrackCollection) - m_kTauMass) > m_kTauMassCut) { - count++; - - LogDebug("Tau3MuReco") << "Track canidate: " << count << std::endl; - - if (Charge > 0 && ((*it).second).charge() != (m_TrackCollection->at(0)).charge()) - LogDebug("Tau3MuReco") << "\tWrong charge!" << std::endl; - LogDebug("Tau3MuReco") << "\tInvariant Mass deviation! " << fabs(getInvariantMass(m_TrackCollection) - m_kTauMass) - << std::endl; - LogDebug("Tau3MuReco") << "\tTrack Pt: " << (*it).second.pt() << std::endl; - LogDebug("Tau3MuReco") << "\tDelta R: " << (*it).first << std::endl; - LogDebug("Tau3MuReco") << "\tChi2: " << ((*it).second).normalizedChi2() << std::endl; - - ++it; - - //was not the best canidate - m_TrackCollection->pop_back(); - - if (it == TrackMultiMap.end()) - return false; - - //get next to minimal (Delta R Sum) track - m_TrackCollection->push_back((*it).second); - } - - LogDebug("Tau3MuReco") << "Found corresponding 3rd track: " << std::endl; - LogDebug("Tau3MuReco") << "Track canidate: " << count << std::endl; - LogDebug("Tau3MuReco") << "\tInvariant Mass deviation! " << fabs(getInvariantMass(m_TrackCollection) - m_kTauMass) - << std::endl; - LogDebug("Tau3MuReco") << "\tDelta R: " << (*it).first << std::endl; - LogDebug("Tau3MuReco") << "\tNormChi2: " << ((*it).second).normalizedChi2() << std::endl; - - //choose this track, because it is the best canidate - return true; -} - -bool Tau3MuReco::findCorrectPairing() { - Combinatorics myCombinatorics(m_TrackCollection->size(), 3); - - std::vector > CombinationVec = myCombinatorics.GetCombinations(); - - std::vector >::iterator it = CombinationVec.begin(); - - char Charge = 0; - - reco::TrackCollection tempTrackCollection; - reco::MuonCollection tempMuonCollection; - - do { - if (it == CombinationVec.end()) - return false; - - Charge = 0; - - tempMuonCollection.clear(); - tempTrackCollection.clear(); - - for (UInt_t i = 0; i < (*it).size(); i++) { - Charge += m_TrackCollection->at((*it).at(i)).charge(); - tempTrackCollection.push_back(m_TrackCollection->at((*it).at(i))); - tempMuonCollection.push_back(m_MuonCollection->at((*it).at(i))); - } - - LogDebug("Tau3MuReco") << "Charge is: " << (int)Charge << " Have to be -1 or 1!!!" << std::endl; - LogDebug("Tau3MuReco") << "Invariant mass is: " << fabs(getInvariantMass(&tempTrackCollection) - m_kTauMass) - << " Have to be smaller than " << m_kTauMassCut << std::endl; - - it++; - } while (abs(Charge) != 1 || fabs(getInvariantMass(&tempTrackCollection) - m_kTauMass) > m_kTauMassCut); - - *m_MuonCollection = tempMuonCollection; - *m_TrackCollection = tempTrackCollection; - - return true; -} - -bool Tau3MuReco::removeIncorrectMuon() { - double deltaR12 = getDeltaR(m_TrackCollection->at(0), m_TrackCollection->at(1)); - double deltaR23 = getDeltaR(m_TrackCollection->at(1), m_TrackCollection->at(2)); - double deltaR31 = getDeltaR(m_TrackCollection->at(2), m_TrackCollection->at(0)); - - //if DeltaR12 is the smallest, than the 3rd one seems to be wrong - //if DeltaR23 is the smallest, than the 2nd one seems to be wrong - //if DeltaR31 is the smallest, than the 1st one seems to be wrong - - unsigned char temp; - double junk; - - deltaR12 < deltaR23 ? temp = 3 : temp = 1; - deltaR12 < deltaR23 ? junk = deltaR12 : junk = deltaR23; - - if (deltaR31 < junk) - temp = 2; - - m_TrackCollection->erase(m_TrackCollection->begin() + temp - 1); - - return true; -} - -double Tau3MuReco::getInvariantMass(const reco::TrackCollection* tracks, const double MuonMass) { - unsigned int numOfParticles = tracks->size(); - - double SumPx = 0; - double SumPy = 0; - double SumPz = 0; - - double SumE = 0; - - for (unsigned int i = 0; i < numOfParticles; i++) { - SumPx += tracks->at(i).px(); - SumPy += tracks->at(i).py(); - SumPz += tracks->at(i).pz(); - - SumE += sqrt(pow(tracks->at(i).p(), 2) + pow(MuonMass, 2)); - } - - double invmass = sqrt(pow(SumE, 2) - pow(SumPx, 2) - pow(SumPy, 2) - pow(SumPz, 2)); - - return invmass; -} - -double Tau3MuReco::getDeltaR(const reco::Track& track1, const reco::Track& track2) { - double dEta = track1.eta() - track2.eta(); - double dPhi = track1.phi() - track2.phi(); - - while (dPhi >= TMath::Pi()) - dPhi -= (2.0 * TMath::Pi()); - while (dPhi < (-1.0 * TMath::Pi())) - dPhi += (2.0 * TMath::Pi()); - - return sqrt(pow(dEta, 2) + pow(dPhi, 2)); -} diff --git a/HeavyFlavorAnalysis/Skimming/test/runCompactSkim.py b/HeavyFlavorAnalysis/Skimming/test/runCompactSkim.py deleted file mode 100644 index dc126265a270e..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/test/runCompactSkim.py +++ /dev/null @@ -1,15 +0,0 @@ -from FWCore.ParameterSet.VarParsing import VarParsing -opt = VarParsing ('analysis') -opt.parseArguments() - -outFileName = opt.outputFile -inFileNames = opt.inputFiles -Global_Tag = 'auto:run2_mc' -MC = True -Filter = True - -import FWCore.ParameterSet.Config as cms -process = cms.Process('PAT') - -from HeavyFlavorAnalysis.Skimming.CompactSkim_cff import CompactSkim -CompactSkim(process,inFileNames,outFileName,Global_Tag,MC,Filter) diff --git a/HeterogeneousCore/CUDACore/BuildFile.xml b/HeterogeneousCore/CUDACore/BuildFile.xml index 8454f44f3f1ae..42f7db8fc72d6 100644 --- a/HeterogeneousCore/CUDACore/BuildFile.xml +++ b/HeterogeneousCore/CUDACore/BuildFile.xml @@ -1,11 +1,13 @@ + + - + diff --git a/HeterogeneousCore/CUDACore/interface/ScopedContext.h b/HeterogeneousCore/CUDACore/interface/ScopedContext.h index cdc3e2dd2c620..e2d55577d2a02 100644 --- a/HeterogeneousCore/CUDACore/interface/ScopedContext.h +++ b/HeterogeneousCore/CUDACore/interface/ScopedContext.h @@ -228,9 +228,10 @@ namespace cms { namespace impl { template void ScopedContextHolderHelper::pushNextTask(F&& f, ContextState const* state) { + auto group = waitingTaskHolder_.group(); replaceWaitingTaskHolder(edm::WaitingTaskWithArenaHolder{ - edm::make_waiting_task_with_holder(tbb::task::allocate_root(), - std::move(waitingTaskHolder_), + *group, + edm::make_waiting_task_with_holder(std::move(waitingTaskHolder_), [state, func = std::forward(f)](edm::WaitingTaskWithArenaHolder h) { func(ScopedContextTask{state, std::move(h)}); })}); diff --git a/HeterogeneousCore/CUDACore/test/BuildFile.xml b/HeterogeneousCore/CUDACore/test/BuildFile.xml index 91f3a28137571..0cd9316b34b69 100644 --- a/HeterogeneousCore/CUDACore/test/BuildFile.xml +++ b/HeterogeneousCore/CUDACore/test/BuildFile.xml @@ -5,9 +5,7 @@ - - diff --git a/HeterogeneousCore/CUDACore/test/test_ScopedContext.cc b/HeterogeneousCore/CUDACore/test/test_ScopedContext.cc index 7a6543a667c3d..5352d96714393 100644 --- a/HeterogeneousCore/CUDACore/test/test_ScopedContext.cc +++ b/HeterogeneousCore/CUDACore/test/test_ScopedContext.cc @@ -75,8 +75,8 @@ TEST_CASE("Use of cms::cuda::ScopedContext", "[CUDACore]") { { // acquire std::unique_ptr> dataPtr = ctx.wrap(10); const auto& data = *dataPtr; - edm::WaitingTaskWithArenaHolder dummy{ - edm::make_waiting_task(tbb::task::allocate_root(), [](std::exception_ptr const* iPtr) {})}; + tbb::task_group group; + edm::WaitingTaskWithArenaHolder dummy{group, edm::make_waiting_task([](std::exception_ptr const* iPtr) {})}; cms::cuda::ScopedContextAcquire ctx2{data, std::move(dummy), ctxstate}; } diff --git a/HeterogeneousCore/CUDAServices/BuildFile.xml b/HeterogeneousCore/CUDAServices/BuildFile.xml index 945d272ba8530..5fcaf5e5527b0 100644 --- a/HeterogeneousCore/CUDAServices/BuildFile.xml +++ b/HeterogeneousCore/CUDAServices/BuildFile.xml @@ -1,8 +1,8 @@ - + diff --git a/HeterogeneousCore/CUDAServices/plugins/BuildFile.xml b/HeterogeneousCore/CUDAServices/plugins/BuildFile.xml index 0928247e400d7..b9bd22319cc8c 100644 --- a/HeterogeneousCore/CUDAServices/plugins/BuildFile.xml +++ b/HeterogeneousCore/CUDAServices/plugins/BuildFile.xml @@ -2,12 +2,8 @@ - - - - diff --git a/HeterogeneousCore/CUDAServices/plugins/NVProfilerService.cc b/HeterogeneousCore/CUDAServices/plugins/NVProfilerService.cc index 65bb196ba0fa2..a1637305fc627 100644 --- a/HeterogeneousCore/CUDAServices/plugins/NVProfilerService.cc +++ b/HeterogeneousCore/CUDAServices/plugins/NVProfilerService.cc @@ -209,6 +209,10 @@ class NVProfilerService { void preModuleConstruction(edm::ModuleDescription const&); void postModuleConstruction(edm::ModuleDescription const&); + // these signal pair are guaranteed to be called by the same thread + void preModuleDestruction(edm::ModuleDescription const&); + void postModuleDestruction(edm::ModuleDescription const&); + // these signal pair are guaranteed to be called by the same thread void preModuleBeginJob(edm::ModuleDescription const&); void postModuleBeginJob(edm::ModuleDescription const&); @@ -399,6 +403,10 @@ NVProfilerService::NVProfilerService(edm::ParameterSet const& config, edm::Activ registry.watchPreModuleConstruction(this, &NVProfilerService::preModuleConstruction); registry.watchPostModuleConstruction(this, &NVProfilerService::postModuleConstruction); + // these signal pair are guaranteed to be called by the same thread + registry.watchPreModuleDestruction(this, &NVProfilerService::preModuleDestruction); + registry.watchPostModuleDestruction(this, &NVProfilerService::postModuleDestruction); + // these signal pair are guaranteed to be called by the same thread registry.watchPreModuleBeginJob(this, &NVProfilerService::preModuleBeginJob); registry.watchPostModuleBeginJob(this, &NVProfilerService::postModuleBeginJob); @@ -820,6 +828,24 @@ void NVProfilerService::postModuleConstruction(edm::ModuleDescription const& des } } +void NVProfilerService::preModuleDestruction(edm::ModuleDescription const& desc) { + if (not skipFirstEvent_) { + auto mid = desc.id(); + global_modules_.grow_to_at_least(mid + 1); + auto const& label = desc.moduleLabel(); + auto const& msg = label + " destruction"; + global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label)); + } +} + +void NVProfilerService::postModuleDestruction(edm::ModuleDescription const& desc) { + if (not skipFirstEvent_) { + auto mid = desc.id(); + nvtxDomainRangeEnd(global_domain_, global_modules_[mid]); + global_modules_[mid] = nvtxInvalidRangeId; + } +} + void NVProfilerService::preModuleBeginJob(edm::ModuleDescription const& desc) { if (not skipFirstEvent_) { auto mid = desc.id(); diff --git a/HeterogeneousCore/CUDAServices/test/testCUDAService.py b/HeterogeneousCore/CUDAServices/test/testCUDAService.py index 06edefcac2b66..8c634a9e260bd 100644 --- a/HeterogeneousCore/CUDAServices/test/testCUDAService.py +++ b/HeterogeneousCore/CUDAServices/test/testCUDAService.py @@ -4,7 +4,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') process.load('HeterogeneousCore.CUDAServices.CUDAService_cfi') -process.MessageLogger.categories.append("CUDAService") +process.MessageLogger.CUDAService=dict() process.source = cms.Source("EmptySource") diff --git a/HeterogeneousCore/CUDATest/BuildFile.xml b/HeterogeneousCore/CUDATest/BuildFile.xml index 80750b6fdf294..3d370b4248fa4 100644 --- a/HeterogeneousCore/CUDATest/BuildFile.xml +++ b/HeterogeneousCore/CUDATest/BuildFile.xml @@ -1,5 +1,6 @@ - + + diff --git a/HeterogeneousCore/CUDATest/plugins/BuildFile.xml b/HeterogeneousCore/CUDATest/plugins/BuildFile.xml index c26ad21c16a90..e12fb032e7f8d 100644 --- a/HeterogeneousCore/CUDATest/plugins/BuildFile.xml +++ b/HeterogeneousCore/CUDATest/plugins/BuildFile.xml @@ -1,8 +1,8 @@ + - diff --git a/HeterogeneousCore/CUDAUtilities/interface/cudaCompat.h b/HeterogeneousCore/CUDAUtilities/interface/cudaCompat.h index f9b4b2f8a4c16..8bd51d3fa7959 100644 --- a/HeterogeneousCore/CUDAUtilities/interface/cudaCompat.h +++ b/HeterogeneousCore/CUDAUtilities/interface/cudaCompat.h @@ -11,21 +11,26 @@ #include #include +// include the CUDA runtime header to define some of the attributes, types and sybols also on the CPU #include +// make sure function are inlined to avoid multiple definition +#undef __global__ +#define __global__ inline __attribute__((always_inline)) + +#undef __forceinline__ +#define __forceinline__ inline __attribute__((always_inline)) + namespace cms { namespace cudacompat { -#ifndef __CUDA_RUNTIME_H__ - struct dim3 { - uint32_t x, y, z; - }; -#endif + // run serially with a single thread + // 1-dimensional block const dim3 threadIdx = {0, 0, 0}; const dim3 blockDim = {1, 1, 1}; - - extern thread_local dim3 blockIdx; - extern thread_local dim3 gridDim; + // 1-dimensional grid + const dim3 blockIdx = {0, 0, 0}; + const dim3 gridDim = {1, 1, 1}; template T1 atomicCAS(T1* address, T1 compare, T2 val) { @@ -78,35 +83,12 @@ namespace cms { return *x; } - inline void resetGrid() { - blockIdx = {0, 0, 0}; - gridDim = {1, 1, 1}; - } - } // namespace cudacompat } // namespace cms -// some not needed as done by cuda runtime... -#ifndef __CUDA_RUNTIME_H__ -#define __host__ -#define __device__ -#define __global__ -#define __shared__ -#define __forceinline__ -#endif - -// make sure function are inlined to avoid multiple definition -#ifndef __CUDA_ARCH__ -#undef __global__ -#define __global__ inline __attribute__((always_inline)) -#undef __forceinline__ -#define __forceinline__ inline __attribute__((always_inline)) -#endif - -#ifndef __CUDA_ARCH__ +// make the cudacompat implementation available in the global namespace using namespace cms::cudacompat; -#endif -#endif +#endif // __CUDACC__ #endif // HeterogeneousCore_CUDAUtilities_interface_cudaCompat_h diff --git a/HeterogeneousCore/CUDAUtilities/interface/prefixScan.h b/HeterogeneousCore/CUDAUtilities/interface/prefixScan.h index 33dc6a18ffa2a..1a779fc677ff7 100644 --- a/HeterogeneousCore/CUDAUtilities/interface/prefixScan.h +++ b/HeterogeneousCore/CUDAUtilities/interface/prefixScan.h @@ -3,6 +3,7 @@ #include +#include "FWCore/Utilities/interface/CMSUnrollLoop.h" #include "HeterogeneousCore/CUDAUtilities/interface/cudaCompat.h" #include "HeterogeneousCore/CUDAUtilities/interface/cuda_assert.h" @@ -13,7 +14,7 @@ __device__ void __forceinline__ warpPrefixScan(T const* __restrict__ ci, T* __re // ci and co may be the same auto x = ci[i]; auto laneId = threadIdx.x & 0x1f; -#pragma unroll + CMS_UNROLL_LOOP for (int offset = 1; offset < 32; offset <<= 1) { auto y = __shfl_up_sync(mask, x, offset); if (laneId >= offset) @@ -26,7 +27,7 @@ template __device__ void __forceinline__ warpPrefixScan(T* c, uint32_t i, uint32_t mask) { auto x = c[i]; auto laneId = threadIdx.x & 0x1f; -#pragma unroll + CMS_UNROLL_LOOP for (int offset = 1; offset < 32; offset <<= 1) { auto y = __shfl_up_sync(mask, x, offset); if (laneId >= offset) diff --git a/HeterogeneousCore/CUDAUtilities/interface/radixSort.h b/HeterogeneousCore/CUDAUtilities/interface/radixSort.h index e4b2905782825..0958a81bc5dbb 100644 --- a/HeterogeneousCore/CUDAUtilities/interface/radixSort.h +++ b/HeterogeneousCore/CUDAUtilities/interface/radixSort.h @@ -6,6 +6,7 @@ #include #include +#include "FWCore/Utilities/interface/CMSUnrollLoop.h" #include "HeterogeneousCore/CUDAUtilities/interface/cuda_assert.h" template @@ -124,7 +125,7 @@ __device__ __forceinline__ void radixSortImpl( if (threadIdx.x < sb) { auto x = c[threadIdx.x]; auto laneId = threadIdx.x & 0x1f; -#pragma unroll + CMS_UNROLL_LOOP for (int offset = 1; offset < 32; offset <<= 1) { auto y = __shfl_up_sync(0xffffffff, x, offset); if (laneId >= offset) diff --git a/HeterogeneousCore/CUDAUtilities/src/cudaCompat.cc b/HeterogeneousCore/CUDAUtilities/src/cudaCompat.cc deleted file mode 100644 index 7b8efda8e3811..0000000000000 --- a/HeterogeneousCore/CUDAUtilities/src/cudaCompat.cc +++ /dev/null @@ -1,17 +0,0 @@ -#include "HeterogeneousCore/CUDAUtilities/interface/cudaCompat.h" - -namespace cms { - namespace cudacompat { - thread_local dim3 blockIdx; - thread_local dim3 gridDim; - } // namespace cudacompat -} // namespace cms - -namespace { - struct InitGrid { - InitGrid() { cms::cudacompat::resetGrid(); } - }; - - const InitGrid initGrid; - -} // namespace diff --git a/HeterogeneousCore/MPIServices/plugins/BuildFile.xml b/HeterogeneousCore/MPIServices/plugins/BuildFile.xml index e857a457b005f..d26dc62c3c213 100644 --- a/HeterogeneousCore/MPIServices/plugins/BuildFile.xml +++ b/HeterogeneousCore/MPIServices/plugins/BuildFile.xml @@ -1,4 +1,4 @@ - + diff --git a/HeterogeneousCore/MPIServices/test/testMPIService.py b/HeterogeneousCore/MPIServices/test/testMPIService.py index 2867133bc82be..db955ce502568 100644 --- a/HeterogeneousCore/MPIServices/test/testMPIService.py +++ b/HeterogeneousCore/MPIServices/test/testMPIService.py @@ -4,7 +4,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') process.load('HeterogeneousCore.MPIServices.MPIService_cfi') -process.MessageLogger.categories.append("MPIService") +process.MessageLogger.MPIService=dict() process.source = cms.Source("EmptySource") diff --git a/HeterogeneousCore/SonicCore/README.md b/HeterogeneousCore/SonicCore/README.md index df877101e50e6..6ae698aeb6a9e 100644 --- a/HeterogeneousCore/SonicCore/README.md +++ b/HeterogeneousCore/SonicCore/README.md @@ -15,9 +15,8 @@ To implement a concrete derived producer class, the following skeleton can be us class MyProducer : public SonicEDProducer { public: - explicit MyProducer(edm::ParameterSet const& cfg) : SonicEDProducer(cfg) { - //for debugging - setDebugName("MyProducer"); + explicit MyProducer(edm::ParameterSet const& cfg) : SonicEDProducer(cfg, "MyProducer") { + //do any necessary operations } void acquire(edm::Event const& iEvent, edm::EventSetup const& iSetup, Input& iInput) override { //convert event data to client input format @@ -65,7 +64,7 @@ To add a new communication protocol for SONIC, follow these steps: 2. Set up the concrete client(s) that use the communication protocol in a new package in the `HeterogeneousCore` subsystem 3. Add a test producer (see above) to make sure it works -To implement a concrete client, the following skeleton can be used for the `.h` file, with the function implementations in an associated `.cc` file: +To implement a concrete client, the following skeleton can be used for the `.h` file: ```cpp #ifndef HeterogeneousCore_MyPackage_MyClient #define HeterogeneousCore_MyPackage_MyClient @@ -75,7 +74,7 @@ To implement a concrete client, the following skeleton can be used for the `.h` class MyClient : public SonicClient { public: - MyClient(const edm::ParameterSet& params); + MyClient(const edm::ParameterSet& params, const std::string& debugName); static void fillPSetDescription(edm::ParameterSetDescription& iDesc); @@ -86,6 +85,14 @@ protected: #endif ``` +The concrete client member function implementations, in an associated `.cc` file, should include the following: +```cpp +MyClient::MyClient(const edm::ParameterSet& params, const std::string& debugName) + : SonicClient(params, debugName, "MyClient") { + //do any necessary operations +} +``` + The `SonicClient` has three available modes: * `Sync`: synchronous call, blocks until the result is returned. * `Async`: asynchronous, non-blocking call. diff --git a/HeterogeneousCore/SonicCore/interface/SonicAcquirer.h b/HeterogeneousCore/SonicCore/interface/SonicAcquirer.h index 0b9021ffe571c..88917f5daac98 100644 --- a/HeterogeneousCore/SonicCore/interface/SonicAcquirer.h +++ b/HeterogeneousCore/SonicCore/interface/SonicAcquirer.h @@ -8,6 +8,8 @@ #include "HeterogeneousCore/SonicCore/interface/sonic_utils.h" #include +#include +#include template class SonicAcquirer : public Module { @@ -15,26 +17,34 @@ class SonicAcquirer : public Module { //typedef to simplify usage typedef typename Client::Input Input; //constructor - SonicAcquirer(edm::ParameterSet const& cfg) : client_(cfg.getParameter("Client")) {} + SonicAcquirer(edm::ParameterSet const& cfg, const std::string& debugName = "") + : clientPset_(cfg.getParameterSet("Client")), debugName_(debugName) {} //destructor ~SonicAcquirer() override = default; - //derived classes use a dedicated acquire() interface that incorporates client_.input() + //construct client at beginning of job + //in case client constructor depends on operations happening in derived module constructors + void beginStream(edm::StreamID) override { makeClient(); } + + //derived classes use a dedicated acquire() interface that incorporates client_->input() //(no need to interact with callback holder) void acquire(edm::Event const& iEvent, edm::EventSetup const& iSetup, edm::WaitingTaskWithArenaHolder holder) final { auto t0 = std::chrono::high_resolution_clock::now(); - acquire(iEvent, iSetup, client_.input()); - sonic_utils::printDebugTime(client_.debugName(), "acquire() time: ", t0); + acquire(iEvent, iSetup, client_->input()); + sonic_utils::printDebugTime(debugName_, "acquire() time: ", t0); t_dispatch_ = std::chrono::high_resolution_clock::now(); - client_.dispatch(holder); + client_->dispatch(holder); } virtual void acquire(edm::Event const& iEvent, edm::EventSetup const& iSetup, Input& iInput) = 0; protected: - //for debugging - void setDebugName(const std::string& debugName) { client_.setDebugName(debugName); } + //helper + void makeClient() { client_ = std::make_unique(clientPset_, debugName_); } + //members - Client client_; + edm::ParameterSet clientPset_; + std::unique_ptr client_; + std::string debugName_; std::chrono::time_point t_dispatch_; }; diff --git a/HeterogeneousCore/SonicCore/interface/SonicClient.h b/HeterogeneousCore/SonicCore/interface/SonicClient.h index a3bfd2bd7ed7d..00b26fedc523f 100644 --- a/HeterogeneousCore/SonicCore/interface/SonicClient.h +++ b/HeterogeneousCore/SonicCore/interface/SonicClient.h @@ -9,7 +9,8 @@ template class SonicClient : public SonicClientBase, public SonicClientTypes { public: //constructor - SonicClient(const edm::ParameterSet& params) : SonicClientBase(params), SonicClientTypes() {} + SonicClient(const edm::ParameterSet& params, const std::string& debugName, const std::string& clientName) + : SonicClientBase(params, debugName, clientName), SonicClientTypes() {} }; #endif diff --git a/HeterogeneousCore/SonicCore/interface/SonicClientBase.h b/HeterogeneousCore/SonicCore/interface/SonicClientBase.h index 6efc00d7e7dc6..3af1b574a4d54 100644 --- a/HeterogeneousCore/SonicCore/interface/SonicClientBase.h +++ b/HeterogeneousCore/SonicCore/interface/SonicClientBase.h @@ -19,12 +19,11 @@ enum class SonicMode { Sync = 1, Async = 2, PseudoAsync = 3 }; class SonicClientBase { public: //constructor - SonicClientBase(const edm::ParameterSet& params); + SonicClientBase(const edm::ParameterSet& params, const std::string& debugName, const std::string& clientName); //destructor virtual ~SonicClientBase() = default; - void setDebugName(const std::string& debugName); const std::string& debugName() const { return debugName_; } const std::string& clientName() const { return clientName_; } SonicMode mode() const { return mode_; } @@ -42,6 +41,8 @@ class SonicClientBase { static void fillBasePSetDescription(edm::ParameterSetDescription& desc, bool allowRetry = true); protected: + void setMode(SonicMode mode); + virtual void evaluate() = 0; void start(edm::WaitingTaskWithArenaHolder holder); @@ -57,7 +58,7 @@ class SonicClientBase { std::optional holder_; //for logging/debugging - std::string clientName_, debugName_, fullDebugName_; + std::string debugName_, clientName_, fullDebugName_; std::chrono::time_point t0_; friend class SonicDispatcher; diff --git a/HeterogeneousCore/SonicCore/interface/SonicEDFilter.h b/HeterogeneousCore/SonicCore/interface/SonicEDFilter.h index 3747fd780a2b1..f7bf4033e7e25 100644 --- a/HeterogeneousCore/SonicCore/interface/SonicEDFilter.h +++ b/HeterogeneousCore/SonicCore/interface/SonicEDFilter.h @@ -16,22 +16,22 @@ class SonicEDFilter : public SonicAcquirer>(cfg) {} + SonicEDFilter(edm::ParameterSet const& cfg, const std::string& debugName) + : SonicAcquirer>(cfg, debugName) {} //destructor ~SonicEDFilter() override = default; - //derived classes use a dedicated produce() interface that incorporates client_.output() + //derived classes use a dedicated produce() interface that incorporates client_->output() bool filter(edm::Event& iEvent, edm::EventSetup const& iSetup) final { //measure time between acquire and produce - sonic_utils::printDebugTime(this->client_.debugName(), "dispatch() time: ", this->t_dispatch_); + sonic_utils::printDebugTime(this->debugName_, "dispatch() time: ", this->t_dispatch_); auto t0 = std::chrono::high_resolution_clock::now(); - bool result = filter(iEvent, iSetup, this->client_.output()); - sonic_utils::printDebugTime(this->client_.debugName(), "filter() time: ", t0); + bool result = filter(iEvent, iSetup, this->client_->output()); + sonic_utils::printDebugTime(this->debugName_, "filter() time: ", t0); //reset client data - this->client_.reset(); + this->client_->reset(); return result; } diff --git a/HeterogeneousCore/SonicCore/interface/SonicEDProducer.h b/HeterogeneousCore/SonicCore/interface/SonicEDProducer.h index f777b05257001..5e4e1ce719d71 100644 --- a/HeterogeneousCore/SonicCore/interface/SonicEDProducer.h +++ b/HeterogeneousCore/SonicCore/interface/SonicEDProducer.h @@ -16,22 +16,22 @@ class SonicEDProducer : public SonicAcquirer>(cfg) {} + SonicEDProducer(edm::ParameterSet const& cfg, const std::string& debugName) + : SonicAcquirer>(cfg, debugName) {} //destructor ~SonicEDProducer() override = default; - //derived classes use a dedicated produce() interface that incorporates client_.output() + //derived classes use a dedicated produce() interface that incorporates client_->output() void produce(edm::Event& iEvent, edm::EventSetup const& iSetup) final { //measure time between acquire and produce - sonic_utils::printDebugTime(this->client_.debugName(), "dispatch() time: ", this->t_dispatch_); + sonic_utils::printDebugTime(this->debugName_, "dispatch() time: ", this->t_dispatch_); auto t0 = std::chrono::high_resolution_clock::now(); - produce(iEvent, iSetup, this->client_.output()); - sonic_utils::printDebugTime(this->client_.debugName(), "produce() time: ", t0); + produce(iEvent, iSetup, this->client_->output()); + sonic_utils::printDebugTime(this->debugName_, "produce() time: ", t0); //reset client data - this->client_.reset(); + this->client_->reset(); } virtual void produce(edm::Event& iEvent, edm::EventSetup const& iSetup, Output const& iOutput) = 0; }; diff --git a/HeterogeneousCore/SonicCore/interface/SonicOneEDAnalyzer.h b/HeterogeneousCore/SonicCore/interface/SonicOneEDAnalyzer.h index ce4e8de3abcd9..2b52913fbca53 100644 --- a/HeterogeneousCore/SonicCore/interface/SonicOneEDAnalyzer.h +++ b/HeterogeneousCore/SonicCore/interface/SonicOneEDAnalyzer.h @@ -21,43 +21,53 @@ class SonicOneEDAnalyzer : public edm::one::EDAnalyzer { typedef typename Client::Input Input; typedef typename Client::Output Output; //constructor - SonicOneEDAnalyzer(edm::ParameterSet const& cfg) : client_(cfg.getParameter("Client")) { + SonicOneEDAnalyzer(edm::ParameterSet const& cfg, const std::string& debugName) + : clientPset_(cfg.getParameterSet("Client")), debugName_(debugName) { //ExternalWork is not compatible with one modules, so Sync mode is enforced - if (client_.mode() != SonicMode::Sync) - throw cms::Exception("UnsupportedMode") << "SonicOneEDAnalyzer can only use Sync mode for clients"; + if (clientPset_.getParameter("mode") != "Sync") { + edm::LogWarning("ResetClientMode") << "Resetting client mode to Sync for SonicOneEDAnalyzer"; + clientPset_.addParameter("mode", "Sync"); + } } //destructor ~SonicOneEDAnalyzer() override = default; - //derived classes still use a dedicated acquire() interface that incorporates client_.input() for consistency + //construct client at beginning of job + //in case client constructor depends on operations happening in derived module constructors + void beginJob() override { makeClient(); } + + //derived classes still use a dedicated acquire() interface that incorporates client_->input() for consistency virtual void acquire(edm::Event const& iEvent, edm::EventSetup const& iSetup, Input& iInput) = 0; - //derived classes use a dedicated analyze() interface that incorporates client_.output() + //derived classes use a dedicated analyze() interface that incorporates client_->output() void analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup) final { auto t0 = std::chrono::high_resolution_clock::now(); - acquire(iEvent, iSetup, client_.input()); - sonic_utils::printDebugTime(client_.debugName(), "acquire() time: ", t0); + acquire(iEvent, iSetup, client_->input()); + sonic_utils::printDebugTime(debugName_, "acquire() time: ", t0); //pattern similar to ExternalWork, but blocking auto t1 = std::chrono::high_resolution_clock::now(); - client_.dispatch(); + client_->dispatch(); //measure time between acquire and produce - sonic_utils::printDebugTime(client_.debugName(), "dispatch() time: ", t1); + sonic_utils::printDebugTime(debugName_, "dispatch() time: ", t1); auto t2 = std::chrono::high_resolution_clock::now(); - analyze(iEvent, iSetup, client_.output()); - sonic_utils::printDebugTime(client_.debugName(), "analyze() time: ", t2); + analyze(iEvent, iSetup, client_->output()); + sonic_utils::printDebugTime(debugName_, "analyze() time: ", t2); //reset client data - client_.reset(); + client_->reset(); } virtual void analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup, Output const& iOutput) = 0; protected: - //for debugging - void setDebugName(const std::string& debugName) { client_.setDebugName(debugName); } + //helper + void makeClient() { client_ = std::make_unique(clientPset_, debugName_); } + //members - Client client_; + edm::ParameterSet clientPset_; + std::unique_ptr client_; + std::string debugName_; }; #endif diff --git a/HeterogeneousCore/SonicCore/src/SonicClientBase.cc b/HeterogeneousCore/SonicCore/src/SonicClientBase.cc index 750e2990b0277..bc8a551453334 100644 --- a/HeterogeneousCore/SonicCore/src/SonicClientBase.cc +++ b/HeterogeneousCore/SonicCore/src/SonicClientBase.cc @@ -2,17 +2,31 @@ #include "FWCore/Utilities/interface/Exception.h" #include "FWCore/ParameterSet/interface/allowedValues.h" -SonicClientBase::SonicClientBase(const edm::ParameterSet& params) - : allowedTries_(params.getUntrackedParameter("allowedTries", 0)) { +SonicClientBase::SonicClientBase(const edm::ParameterSet& params, + const std::string& debugName, + const std::string& clientName) + : allowedTries_(params.getUntrackedParameter("allowedTries", 0)), + debugName_(debugName), + clientName_(clientName), + fullDebugName_(debugName_) { + if (!clientName_.empty()) + fullDebugName_ += ":" + clientName_; + std::string modeName(params.getParameter("mode")); if (modeName == "Sync") - mode_ = SonicMode::Sync; + setMode(SonicMode::Sync); else if (modeName == "Async") - mode_ = SonicMode::Async; + setMode(SonicMode::Async); else if (modeName == "PseudoAsync") - mode_ = SonicMode::PseudoAsync; + setMode(SonicMode::PseudoAsync); else throw cms::Exception("Configuration") << "Unknown mode for SonicClient: " << modeName; +} + +void SonicClientBase::setMode(SonicMode mode) { + if (dispatcher_ and mode_ == mode) + return; + mode_ = mode; //get correct dispatcher for mode if (mode_ == SonicMode::Sync or mode_ == SonicMode::Async) @@ -21,13 +35,6 @@ SonicClientBase::SonicClientBase(const edm::ParameterSet& params) dispatcher_ = std::make_unique(this); } -void SonicClientBase::setDebugName(const std::string& debugName) { - debugName_ = debugName; - fullDebugName_ = debugName_; - if (!clientName_.empty()) - fullDebugName_ += ":" + clientName_; -} - void SonicClientBase::start(edm::WaitingTaskWithArenaHolder holder) { start(); holder_ = std::move(holder); diff --git a/HeterogeneousCore/SonicCore/test/DummyClient.h b/HeterogeneousCore/SonicCore/test/DummyClient.h index 4bca9ea91eb0d..ccef888ad9f7d 100644 --- a/HeterogeneousCore/SonicCore/test/DummyClient.h +++ b/HeterogeneousCore/SonicCore/test/DummyClient.h @@ -12,8 +12,8 @@ class DummyClient : public SonicClient { public: //constructor - DummyClient(const edm::ParameterSet& params) - : SonicClient(params), + DummyClient(const edm::ParameterSet& params, const std::string& debugName) + : SonicClient(params, debugName, "DummyClient"), factor_(params.getParameter("factor")), wait_(params.getParameter("wait")), fails_(params.getParameter("fails")) {} diff --git a/HeterogeneousCore/SonicCore/test/SonicDummyFilter.cc b/HeterogeneousCore/SonicCore/test/SonicDummyFilter.cc index df40257f0b22b..386f51af90e46 100644 --- a/HeterogeneousCore/SonicCore/test/SonicDummyFilter.cc +++ b/HeterogeneousCore/SonicCore/test/SonicDummyFilter.cc @@ -10,9 +10,7 @@ namespace sonictest { class SonicDummyFilter : public SonicEDFilter { public: explicit SonicDummyFilter(edm::ParameterSet const& cfg) - : SonicEDFilter(cfg), input_(cfg.getParameter("input")) { - //for debugging - setDebugName("SonicDummyFilter"); + : SonicEDFilter(cfg, "SonicDummyFilter"), input_(cfg.getParameter("input")) { putToken_ = produces(); } diff --git a/HeterogeneousCore/SonicCore/test/SonicDummyOneAnalyzer.cc b/HeterogeneousCore/SonicCore/test/SonicDummyOneAnalyzer.cc index 10e402922e55f..399752820b2c4 100644 --- a/HeterogeneousCore/SonicCore/test/SonicDummyOneAnalyzer.cc +++ b/HeterogeneousCore/SonicCore/test/SonicDummyOneAnalyzer.cc @@ -12,12 +12,9 @@ namespace sonictest { class SonicDummyOneAnalyzer : public SonicOneEDAnalyzer { public: explicit SonicDummyOneAnalyzer(edm::ParameterSet const& cfg) - : SonicOneEDAnalyzer(cfg), + : SonicOneEDAnalyzer(cfg, "SonicDummyOneAnalyzer"), input_(cfg.getParameter("input")), - expected_(cfg.getParameter("expected")) { - //for debugging - setDebugName("SonicDummyOneAnalyzer"); - } + expected_(cfg.getParameter("expected")) {} void acquire(edm::Event const& iEvent, edm::EventSetup const& iSetup, Input& iInput) override { iInput = input_; } diff --git a/HeterogeneousCore/SonicCore/test/SonicDummyProducer.cc b/HeterogeneousCore/SonicCore/test/SonicDummyProducer.cc index 602a4afcf940f..e782ee15f8928 100644 --- a/HeterogeneousCore/SonicCore/test/SonicDummyProducer.cc +++ b/HeterogeneousCore/SonicCore/test/SonicDummyProducer.cc @@ -10,9 +10,7 @@ namespace sonictest { class SonicDummyProducer : public SonicEDProducer { public: explicit SonicDummyProducer(edm::ParameterSet const& cfg) - : SonicEDProducer(cfg), input_(cfg.getParameter("input")) { - //for debugging - setDebugName("SonicDummyProducer"); + : SonicEDProducer(cfg, "SonicDummyProducer"), input_(cfg.getParameter("input")) { putToken_ = produces(); } diff --git a/HeterogeneousCore/SonicTriton/BuildFile.xml b/HeterogeneousCore/SonicTriton/BuildFile.xml index b574f395f4d12..8efadafbe2869 100644 --- a/HeterogeneousCore/SonicTriton/BuildFile.xml +++ b/HeterogeneousCore/SonicTriton/BuildFile.xml @@ -1,6 +1,8 @@ - - + + + + diff --git a/HeterogeneousCore/SonicTriton/README.md b/HeterogeneousCore/SonicTriton/README.md index 736c73a9a8320..6dbbb635caaab 100644 --- a/HeterogeneousCore/SonicTriton/README.md +++ b/HeterogeneousCore/SonicTriton/README.md @@ -1,5 +1,7 @@ # SONIC for Triton Inference Server +## Introduction to Triton + Triton Inference Server ([docs](https://docs.nvidia.com/deeplearning/triton-inference-server/archives/triton_inference_server_1130/user-guide/docs/index.html), [repo](https://github.com/NVIDIA/triton-inference-server)) is an open-source product from Nvidia that facilitates the use of GPUs as a service to process inference requests. @@ -9,6 +11,8 @@ boolean, unsigned integer (8, 16, 32, or 64 bits), integer (8, 16, 32, or 64 bit Triton additionally supports inputs and outputs with multiple dimensions, some of which might be variable (denoted by -1). Concrete values for variable dimensions must be specified for each call (event). +## Client + Accordingly, the `TritonClient` input and output types are: * input: `TritonInputMap = std::unordered_map` * output: `TritonOutputMap = std::unordered_map` @@ -22,11 +26,8 @@ The model information from the server can be printed by enabling `verbose` outpu `TritonClient` takes several parameters: * `modelName`: name of model with which to perform inference * `modelVersion`: version number of model (default: -1, use latest available version on server) -* `batchSize`: number of objects sent per request - * can also be set on per-event basis using `setBatchSize()` - * some models don't support batching -* `address`: server IP address -* `port`: server port +* `modelConfigPath`: path to `config.pbtxt` file for the model (using `edm::FileInPath`) +* `preferredServer`: name of preferred server, for testing (see [Services](#services) below) * `timeout`: maximum allowed time for a request * `outputs`: optional, specify which output(s) the server should send @@ -38,6 +39,8 @@ Useful `TritonData` accessors include: * `byteSize()`: return number of bytes for data type * `dname()`: return name of data type * `batchSize()`: return current batch size +* `setBatchSize()`: set a new batch size + * some models may not support batching To update the `TritonData` shape in the variable-dimension case: * `setShape(const std::vector& newShape)`: update all (variable) dimensions with values provided in `newShape` @@ -49,6 +52,22 @@ and returned by `TritonOutputData::fromServer()`, respectively: * `TritonInput = std::vector>` * `TritonOutput = std::vector>` +## Modules + +SONIC Triton supports producers, filters, and analyzers. +New modules should inherit from `TritonEDProducer`, `TritonEDFilter`, or `TritonOneEDAnalyzer`. +These follow essentially the same patterns described in [SonicCore](../SonicCore#for-analyzers). + +If an `edm::GlobalCache` of type `T` is needed, there are two changes: +* The new module should inherit from `TritonEDProducerT` or `TritonEDFilterT` +* The new module should contain these lines: + ```cpp + static std::unique_ptr initializeGlobalCache(edm::ParameterSet const& pset) { + TritonEDProducerT::initializeGlobalCache(pset); + [module-specific code goes here] + } + ``` + In a SONIC Triton producer, the basic flow should follow this pattern: 1. `acquire()`: a. access input object(s) from `TritonInputMap` @@ -61,5 +80,46 @@ In a SONIC Triton producer, the basic flow should follow this pattern: b. obtain output data as `TritonOutput` using `fromServer()` function of output object(s) (sets output shape(s) if variable dimensions exist) c. fill output products -Several example producers (running ResNet50 or Graph Attention Network), along with instructions to run a local server, -can be found in the [test](./test) directory. +## Services + +A script [`cmsTriton`](./scripts/cmsTriton) is provided to launch and manage local servers. +The script has two operations (`start` and `stop`) and the following options: +* `-c`: don't cleanup temporary dir (for debugging) +* `-D`: dry run: print container commands rather than executing them +* `-d`: use Docker instead of Singularity +* `-f`: force reuse of (possibly) existing container instance +* `-g`: use GPU instead of CPU +* `-i` [name]`: server image name (default: fastml/triton-torchgeo:20.09-py3-geometric) +* `-M [dir]`: model repository (can be given more than once) +* `-m [dir]`: specific model directory (can be given more than one) +* `-n [name]`: name of container instance, also used for hidden temporary dir (default: triton_server_instance) +* `-P [port]`: base port number for services (-1: automatically find an unused port range) (default: 8000) +* `-p [pid]`: automatically shut down server when process w/ specified PID ends (-1: use parent process PID) +* `-r [num]`: number of retries when starting container (default: 3) +* `-s [dir]`: Singularity sandbox directory (default: /cvmfs/unpacked.cern.ch/registry.hub.docker.com/fastml/triton-torchgeo:20.09-py3-geometric) +* `-t [dir]`: non-default hidden temporary dir +* `-v`: (verbose) start: activate server debugging info; stop: keep server logs +* `-w [time]`: maximum time to wait for server to start (default: 120 seconds) +* `-h`: print help message and exit + +Additional details and caveats: +* The `start` and `stop` operations for a given container instance should always be executed in the same directory +if a relative path is used for the hidden temporary directory (including the default from the container instance name), +in order to ensure that everything is properly cleaned up. +* A model repository is a folder that contains multiple model directories, while a model directory contains the files for a specific file. +(In the example below, `$CMSSW_BASE/src/HeterogeneousCore/SonicTriton/data/models` is a model repository, +while `$CMSSW_BASE/src/HeterogeneousCore/SonicTriton/data/models/resnet50_netdef` is a model directory.) +If a model repository is provided, all of the models it contains will be provided to the server. +* Older versions of Singularity have a short timeout that may cause launching the server to fail the first time the command is executed. +The `-r` (retry) flag exists to work around this issue. + +A central `TritonService` is provided to keep track of all available servers and which models they can serve. +The servers will automatically be assigned to clients at startup. +If some models are not served by any server, the `TritonService` can launch a fallback server using the `cmsTriton` script described above. +If the process modifiers `enableSonicTriton` or `allSonicTriton` are activated, +the fallback server will launch automatically if needed and will use a local GPU if one is available. +If the fallback server uses CPU, clients that use the fallback server will automatically be set to `Sync` mode. + +## Examples + +Several example producers (running ResNet50 or Graph Attention Network) can be found in the [test](./test) directory. diff --git a/HeterogeneousCore/SonicTriton/interface/TritonClient.h b/HeterogeneousCore/SonicTriton/interface/TritonClient.h index 99ca5f8765fe7..ccda4a3c6ec6a 100644 --- a/HeterogeneousCore/SonicTriton/interface/TritonClient.h +++ b/HeterogeneousCore/SonicTriton/interface/TritonClient.h @@ -29,7 +29,7 @@ class TritonClient : public SonicClient { }; //constructor - TritonClient(const edm::ParameterSet& params); + TritonClient(const edm::ParameterSet& params, const std::string& debugName); //accessors unsigned batchSize() const { return batchSize_; } diff --git a/HeterogeneousCore/SonicTriton/interface/TritonDummyCache.h b/HeterogeneousCore/SonicTriton/interface/TritonDummyCache.h new file mode 100644 index 0000000000000..df38d0bae28c9 --- /dev/null +++ b/HeterogeneousCore/SonicTriton/interface/TritonDummyCache.h @@ -0,0 +1,20 @@ +#ifndef HeterogeneousCore_SonicTriton_TritonDummyCache +#define HeterogeneousCore_SonicTriton_TritonDummyCache + +struct TritonDummyCache {}; + +//Triton modules want to call initializeGlobalCache, but don't want GlobalCache pointer in constructor +//-> override framework function (can't partial specialize function templates) +namespace edm { + class ParameterSet; + namespace stream { + namespace impl { + template + T* makeStreamModule(edm::ParameterSet const& iPSet, const TritonDummyCache*) { + return new T(iPSet); + } + } // namespace impl + } // namespace stream +} // namespace edm + +#endif diff --git a/HeterogeneousCore/SonicTriton/interface/TritonEDFilter.h b/HeterogeneousCore/SonicTriton/interface/TritonEDFilter.h new file mode 100644 index 0000000000000..989570373817e --- /dev/null +++ b/HeterogeneousCore/SonicTriton/interface/TritonEDFilter.h @@ -0,0 +1,33 @@ +#ifndef HeterogeneousCore_SonicTriton_TritonEDFilter +#define HeterogeneousCore_SonicTriton_TritonEDFilter + +//TritonDummyCache include comes first for overload resolution +#include "HeterogeneousCore/SonicTriton/interface/TritonDummyCache.h" +#include "HeterogeneousCore/SonicCore/interface/SonicEDFilter.h" +#include "HeterogeneousCore/SonicTriton/interface/TritonClient.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HeterogeneousCore/SonicTriton/interface/TritonService.h" + +//inherited classes that use a non-default GlobalCache should be sure to call the parent initializeGlobalCache() +template +class TritonEDFilterT : public SonicEDFilter, Capabilities...> { +public: + TritonEDFilterT(edm::ParameterSet const& cfg, const std::string& debugName) + : SonicEDFilter, Capabilities...>(cfg, debugName) {} + + //use this function to avoid calling TritonService functions Nstreams times + static std::unique_ptr initializeGlobalCache(edm::ParameterSet const& pset) { + edm::Service ts; + const auto& clientPset = pset.getParameterSet("Client"); + ts->addModel(clientPset.getParameter("modelName"), + clientPset.getParameter("modelConfigPath").fullPath()); + return nullptr; + } + + static void globalEndJob(G*) {} +}; + +template +using TritonEDFilter = TritonEDFilterT; + +#endif diff --git a/HeterogeneousCore/SonicTriton/interface/TritonEDProducer.h b/HeterogeneousCore/SonicTriton/interface/TritonEDProducer.h new file mode 100644 index 0000000000000..0b8ec909f511c --- /dev/null +++ b/HeterogeneousCore/SonicTriton/interface/TritonEDProducer.h @@ -0,0 +1,33 @@ +#ifndef HeterogeneousCore_SonicTriton_TritonEDProducer +#define HeterogeneousCore_SonicTriton_TritonEDProducer + +//TritonDummyCache include comes first for overload resolution +#include "HeterogeneousCore/SonicTriton/interface/TritonDummyCache.h" +#include "HeterogeneousCore/SonicCore/interface/SonicEDProducer.h" +#include "HeterogeneousCore/SonicTriton/interface/TritonClient.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HeterogeneousCore/SonicTriton/interface/TritonService.h" + +//inherited classes that use a non-default GlobalCache should be sure to call the parent initializeGlobalCache() +template +class TritonEDProducerT : public SonicEDProducer, Capabilities...> { +public: + TritonEDProducerT(edm::ParameterSet const& cfg, const std::string& debugName) + : SonicEDProducer, Capabilities...>(cfg, debugName) {} + + //use this function to avoid calling TritonService functions Nstreams times + static std::unique_ptr initializeGlobalCache(edm::ParameterSet const& pset) { + edm::Service ts; + const auto& clientPset = pset.getParameterSet("Client"); + ts->addModel(clientPset.getParameter("modelName"), + clientPset.getParameter("modelConfigPath").fullPath()); + return nullptr; + } + + static void globalEndJob(G*) {} +}; + +template +using TritonEDProducer = TritonEDProducerT; + +#endif diff --git a/HeterogeneousCore/SonicTriton/interface/TritonOneEDAnalyzer.h b/HeterogeneousCore/SonicTriton/interface/TritonOneEDAnalyzer.h new file mode 100644 index 0000000000000..6eaf35604586a --- /dev/null +++ b/HeterogeneousCore/SonicTriton/interface/TritonOneEDAnalyzer.h @@ -0,0 +1,24 @@ +#ifndef HeterogeneousCore_SonicTriton_TritonOneEDAnalyzer +#define HeterogeneousCore_SonicTriton_TritonOneEDAnalyzer + +#include "HeterogeneousCore/SonicCore/interface/SonicOneEDAnalyzer.h" +#include "HeterogeneousCore/SonicTriton/interface/TritonClient.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HeterogeneousCore/SonicTriton/interface/TritonService.h" + +#include + +template +class TritonOneEDAnalyzer : public SonicOneEDAnalyzer { +public: + TritonOneEDAnalyzer(edm::ParameterSet const& cfg, const std::string& debugName) + : SonicOneEDAnalyzer(cfg, debugName) { + edm::Service ts; + const auto& clientPset = cfg.getParameterSet("Client"); + ts->addModel(clientPset.getParameter("modelName"), + clientPset.getParameter("modelConfigPath").fullPath()); + } +}; + +#endif diff --git a/HeterogeneousCore/SonicTriton/interface/TritonService.h b/HeterogeneousCore/SonicTriton/interface/TritonService.h new file mode 100644 index 0000000000000..24232b6894ae1 --- /dev/null +++ b/HeterogeneousCore/SonicTriton/interface/TritonService.h @@ -0,0 +1,104 @@ +#ifndef HeterogeneousCore_SonicTriton_TritonService +#define HeterogeneousCore_SonicTriton_TritonService + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include +#include +#include +#include +#include +#include + +//forward declarations +namespace edm { + class ActivityRegistry; + class ConfigurationDescriptions; + class PathsAndConsumesOfModulesBase; + class ProcessContext; + class ModuleDescription; +} // namespace edm + +class TritonService { +public: + //classes and defs + struct FallbackOpts { + FallbackOpts(const edm::ParameterSet& pset) + : enable(pset.getUntrackedParameter("enable")), + debug(pset.getUntrackedParameter("debug")), + verbose(pset.getUntrackedParameter("verbose")), + useDocker(pset.getUntrackedParameter("useDocker")), + useGPU(pset.getUntrackedParameter("useGPU")), + retries(pset.getUntrackedParameter("retries")), + wait(pset.getUntrackedParameter("wait")), + instanceName(pset.getUntrackedParameter("instanceName")), + tempDir(pset.getUntrackedParameter("tempDir")) {} + + bool enable; + bool debug; + bool verbose; + bool useDocker; + bool useGPU; + int retries; + int wait; + std::string instanceName; + std::string tempDir; + }; + struct Server { + Server(const edm::ParameterSet& pset) + : url(pset.getUntrackedParameter("address") + ":" + + std::to_string(pset.getUntrackedParameter("port"))), + isFallback(pset.getUntrackedParameter("name") == fallbackName) {} + Server(const std::string& name_, const std::string& url_) : url(url_), isFallback(name_ == fallbackName) {} + + //members + std::string url; + bool isFallback; + std::unordered_set models; + static const std::string fallbackName; + static const std::string fallbackAddress; + }; + struct Model { + Model(const std::string& path_ = "") : path(path_) {} + + //members + std::string path; + std::unordered_set servers; + std::unordered_set modules; + }; + struct Module { + //currently assumes that a module can only have one associated model + Module(const std::string& model_) : model(model_) {} + + //members + std::string model; + }; + + TritonService(const edm::ParameterSet& pset, edm::ActivityRegistry& areg); + ~TritonService() = default; + + //accessors + void addModel(const std::string& modelName, const std::string& path); + std::pair serverAddress(const std::string& model, const std::string& preferred = "") const; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void preModuleConstruction(edm::ModuleDescription const&); + void postModuleConstruction(edm::ModuleDescription const&); + void preModuleDestruction(edm::ModuleDescription const&); + void preBeginJob(edm::PathsAndConsumesOfModulesBase const&, edm::ProcessContext const&); + + bool verbose_; + FallbackOpts fallbackOpts_; + unsigned currentModuleId_; + bool allowAddModel_; + bool startedFallback_; + std::unordered_map unservedModels_; + //this represents a many:many:many map + std::unordered_map servers_; + std::unordered_map models_; + std::unordered_map modules_; +}; + +#endif diff --git a/HeterogeneousCore/SonicTriton/plugins/BuildFile.xml b/HeterogeneousCore/SonicTriton/plugins/BuildFile.xml new file mode 100644 index 0000000000000..f5eea4e8cf125 --- /dev/null +++ b/HeterogeneousCore/SonicTriton/plugins/BuildFile.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/HeterogeneousCore/SonicTriton/plugins/TritonService.cc b/HeterogeneousCore/SonicTriton/plugins/TritonService.cc new file mode 100644 index 0000000000000..963e6eee3c56e --- /dev/null +++ b/HeterogeneousCore/SonicTriton/plugins/TritonService.cc @@ -0,0 +1,5 @@ +#include "FWCore/ServiceRegistry/interface/ServiceMaker.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "HeterogeneousCore/SonicTriton/interface/TritonService.h" + +DEFINE_FWK_SERVICE(TritonService); diff --git a/HeterogeneousCore/SonicTriton/python/TritonService_cff.py b/HeterogeneousCore/SonicTriton/python/TritonService_cff.py new file mode 100644 index 0000000000000..e991d54e6f72f --- /dev/null +++ b/HeterogeneousCore/SonicTriton/python/TritonService_cff.py @@ -0,0 +1,19 @@ +from HeterogeneousCore.SonicTriton.TritonService_cfi import * + +from Configuration.ProcessModifiers.enableSonicTriton_cff import enableSonicTriton + +_gpu_available_cached = None + +def _gpu_available(): + global _gpu_available_cached + if _gpu_available_cached is None: + import os + _gpu_available_cached = (os.system("nvidia-smi -L") == 0) + return _gpu_available_cached + +enableSonicTriton.toModify(TritonService, + fallback = dict( + enable = True, + useGPU = _gpu_available(), + ), +) diff --git a/HeterogeneousCore/SonicTriton/scripts/cmsTriton b/HeterogeneousCore/SonicTriton/scripts/cmsTriton new file mode 100755 index 0000000000000..d9a82a1be9c49 --- /dev/null +++ b/HeterogeneousCore/SonicTriton/scripts/cmsTriton @@ -0,0 +1,432 @@ +#!/bin/bash + +# defaults +USEDOCKER="" +GPU="" +VERBOSE="" +VERBOSE_ARGS="--log-verbose=1 --log-error=1 --log-info=1" +WTIME=120 +SERVER=triton_server_instance +RETRIES=3 +REPOS=() +MODELS=() +FORCE="" +CLEANUP=true +TMPDIR="" +DRYRUN="" +PARENTPID="" +BASEPORT=8000 +AUTOPORT="" +NPORTS=3 +IMAGE=fastml/triton-torchgeo:20.09-py3-geometric +SANDBOX=/cvmfs/unpacked.cern.ch/registry.hub.docker.com/${IMAGE} + +usage() { + ECHO="echo -e" + $ECHO "cmsTriton [options] [start|stop]" + $ECHO + $ECHO "Options:" + $ECHO "-c \t don't cleanup temporary dir (for debugging)" + $ECHO "-D \t dry run: print container commands rather than executing them" + $ECHO "-d \t use Docker instead of Singularity" + $ECHO "-f \t force reuse of (possibly) existing container instance" + $ECHO "-g \t use GPU instead of CPU" + $ECHO "-i [name] \t server image name (default: ${IMAGE})" + $ECHO "-M [dir] \t model repository (can be given more than once)" + $ECHO "-m [dir] \t specific model directory (can be given more than one)" + $ECHO "-n [name] \t name of container instance, also used for default hidden temporary dir (default: ${SERVER})" + $ECHO "-P [port] \t base port number for services (-1: automatically find an unused port range) (default: ${BASEPORT})" + $ECHO "-p [pid] \t automatically shut down server when process w/ specified PID ends (-1: use parent process PID)" + $ECHO "-r [num] \t number of retries when starting container (default: ${RETRIES})" + $ECHO "-s [dir] \t Singularity sandbox directory (default: ${SANDBOX})" + $ECHO "-t [dir] \t non-default hidden temporary dir" + $ECHO "-v \t (verbose) start: activate server debugging info; stop: keep server logs" + $ECHO "-w [time] \t maximum time to wait for server to start (default: ${WTIME} seconds)" + $ECHO "-h \t print this message and exit" + $ECHO + $ECHO "Operations:" + $ECHO "start \t start server" + $ECHO "stop \t stop server" + exit $1 +} + +# check shm locations +SHM=/dev/shm +if [ -e /run/shm ]; then + SHM=/run/shm +fi + +while getopts "cDdfgi:M:m:n:P:p:r:s:t:vw:h" opt; do + case "$opt" in + c) CLEANUP="" + ;; + D) DRYRUN=echo + ;; + d) USEDOCKER=true + ;; + f) FORCE=true + ;; + g) GPU=true + ;; + i) IMAGE="$OPTARG" + ;; + M) REPOS+=("$OPTARG") + ;; + m) MODELS+=("$OPTARG") + ;; + n) SERVER="$OPTARG" + ;; + P) if [ "$OPTARG" -eq -1 ]; then AUTOPORT=true; else BASEPORT="$OPTARG"; fi + ;; + p) if [ "$OPTARG" -eq -1 ]; then PARENTPID="$PPID"; else PARENTPID="$OPTARG"; fi + ;; + r) RETRIES="$OPTARG" + ;; + s) SANDBOX="$OPTARG" + ;; + t) TMPDIR="$OPTARG" + ;; + v) VERBOSE="$VERBOSE_ARGS" + ;; + w) WTIME="$OPTARG" + ;; + h) usage 0 + ;; + esac +done + +shift $(($OPTIND - 1)) +OP=$1 + +if [ "$OP" != start ] && [ "$OP" != stop ]; then + usage 1 +fi + +if [ "$RETRIES" -le 0 ]; then + RETRIES=1 +fi + + +TOPDIR=$PWD +if [ -z "$TMPDIR" ]; then + TMPDIR="${TOPDIR}/.${SERVER}" +else + TMPDIR=$(readlink -f $TMPDIR) +fi + +SANDBOX=$(readlink -f ${SANDBOX}) +DOCKER="sudo docker" +LOG="log_${SERVER}.log" +STOPLOG="log_stop_${SERVER}.log" +LIB=lib +STARTED_INDICATOR="Started GRPCInferenceService" +SEGFAULT_INDICATOR="Address already in use" +EXTRA="" + +compute_ports(){ + # compute derived port numbers + export HTTPPORT=$BASEPORT + export GRPCPORT=$((BASEPORT+1)) + export METRPORT=$((BASEPORT+2)) +} + +check_port(){ + # success on this command means the port is in use + if 2>/dev/null >"/dev/tcp/0.0.0.0/$1"; then + return 1 + else + return 0 + fi +} + +check_ports(){ + if check_port $HTTPPORT && check_port $GRPCPORT && check_port $METRPORT; then + return 0 + else + return 1 + fi +} + +find_ports(){ + while ! check_ports; do + BASEPORT=$((BASEPORT+NPORTS)) + compute_ports + done + echo "CMS_TRITON_GRPC_PORT: $GRPCPORT" +} + +handle_ports(){ + # handle ports + compute_ports + if [ -n "$AUTOPORT" ]; then + find_ports + elif ! check_ports; then + echo "Error: requested port in use" + return 1 + fi + export PORTARGS="--http-port=${HTTPPORT} --grpc-port=${GRPCPORT} --metrics-port=${METRPORT}" +} + +start_docker(){ + # mount all model repositories + MOUNTARGS="" + REPOARGS="" + for REPO in ${REPOS[@]}; do + MOUNTARGS="$MOUNTARGS -v$REPO:$REPO" + REPOARGS="$REPOARGS --model-repository=${REPO}" + done + + $DRYRUN $DOCKER run -d --name ${SERVER} \ + --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 \ + -p${HTTPPORT}:${HTTPPORT} -p${GRPCPORT}:${GRPCPORT} -p${METRPORT}:${METRPORT} $EXTRA $MOUNTARGS \ + ${IMAGE} tritonserver $PORTARGS $REPOARGS $VERBOSE +} + +start_singularity(){ + # triton server image may need to modify contents of opt/tritonserver/lib/ + # but cvmfs is read-only + # -> make a writable local directory with the same contents + $DRYRUN mkdir ${LIB} + $DRYRUN ln -s ${SANDBOX}/opt/tritonserver/lib/* ${LIB}/ + + # mount all model repositories + MOUNTARGS="" + REPOARGS="" + for REPO in ${REPOS[@]}; do + MOUNTARGS="$MOUNTARGS -B $REPO" + REPOARGS="$REPOARGS --model-repository=${REPO}" + done + + # start instance + # need to bind /cvmfs for above symlinks to work inside container + $DRYRUN singularity instance start \ + -B ${SHM}:/run/shm -B ${LIB}:/opt/tritonserver/lib -B ${SANDBOX} $MOUNTARGS $EXTRA \ + ${SANDBOX} ${SERVER} + + START_EXIT=$? + if [ "$START_EXIT" -ne 0 ]; then + rm -rf ${LIB} + return "$START_EXIT" + fi + + # run the actual server + if [ -z "$DRYRUN" ]; then + REDIR="$LOG" + else + REDIR=/dev/stdout + fi + $DRYRUN singularity run instance://${SERVER} \ + tritonserver $PORTARGS $REPOARGS $VERBOSE >& ${REDIR} & + [ -z "$DRYRUN" ] || wait +} + +stop_docker(){ + # keep log + if [ -z "$DRYRUN" ]; then + if [ -n "$VERBOSE" ]; then $DOCKER logs ${SERVER} >& "$LOG"; fi + fi + + $DRYRUN $DOCKER stop ${SERVER} + $DRYRUN $DOCKER rm ${SERVER} +} + +stop_singularity(){ + $DRYRUN singularity instance stop ${SERVER} +} + +test_docker(){ + # docker logs print to stderr + ${DOCKER} logs ${SERVER} |& grep "$1" +} + +test_singularity(){ + grep "$1" $LOG +} + +wait_server(){ + if [ -n "$DRYRUN" ]; then + return + fi + + COUNT=0 + while ! $TEST_FN "$STARTED_INDICATOR" >& /dev/null; do + if $TEST_FN "$SEGFAULT_INDICATOR" >& /dev/null; then + handle_ports + PORT_EXIT=$? + # port exit is zero if it found a new, good port; so retry + if [ "$PORT_EXIT" -ne 0 ]; then + auto_stop true + exit $PORT_EXIT + else + return 1 + fi + elif [ "$COUNT" -gt "$WTIME" ]; then + echo "timed out waiting for server to start" + auto_stop true + exit 1 + else + COUNT=$(($COUNT + 1)) + sleep 1 + fi + done + + echo "server is ready!" +} + +list_models(){ + # make list of model repositories + for MODEL in ${MODELS[@]}; do + # check if file was provided rather than directory + if [ -f "$MODEL" ]; then + MODEL="$(dirname "$MODEL")" + fi + REPOS+=("$(dirname "$MODEL")") + done + for ((r=0; r < ${#REPOS[@]}; r++)); do + # avoid issues w/ multiple levels of symlinks + REPOS[$r]=$(readlink -f ${REPOS[$r]}) + done + # make unique list + read -a REPOS <<< "$(printf "%s\n" "${REPOS[@]}" | sort -u | tr '\n' ' ')" +} + +auto_stop(){ + # allow enabling verbosity here even if disabled at top level + # but otherwise use top-level setting + if [ -n "$1" ]; then VERBOSE="$VERBOSE_ARGS"; fi + PARENTPID="$2" + + if [ -n "$PARENTPID" ]; then + if [ -n "$VERBOSE" ]; then + echo "watching PID $PARENTPID" + ps + fi + PCOUNTER=0 + PMAX=5 + while [ "$PCOUNTER" -le "$PMAX" ]; do + if ! kill -0 $PARENTPID >& /dev/null; then + PCOUNTER=$((PCOUNTER+1)) + if [ -n "$VERBOSE" ]; then + echo "trigger $PCOUNTER:" + ps + fi + else + # must get N in a row, otherwise reset + if [ "$PCOUNTER" -gt 0 ] && [ -n "$VERBOSE" ]; then + echo "reset:" + ps + fi + PCOUNTER=0 + fi + sleep 1 + done + fi + $STOP_FN + + # move logs out of tmp dir + if [ -z "$DRYRUN" ]; then + if [ -n "$VERBOSE" ]; then + mv "$LOG" "$TOPDIR" + # only keep non-empty log + if [ -s "$STOPLOG" ]; then + mv "$STOPLOG" "$TOPDIR" + fi + fi + fi + + if [ -n "$CLEANUP" ]; then + $DRYRUN cd "$TOPDIR" + $DRYRUN rm -rf "$TMPDIR" + fi +} + +make_tmp(){ + # make sure everything happens in tmp dir + $DRYRUN mkdir "$TMPDIR" + MKDIR_EXIT=$? + if [ "$MKDIR_EXIT" -ne 0 ]; then + echo "Could not create temp dir: $TMPDIR" + exit "$MKDIR_EXIT" + fi + $DRYRUN cd "$TMPDIR" +} + +if [ -n "$USEDOCKER" ]; then + if [ -n "$GPU" ]; then + EXTRA="--gpus all" + fi + START_FN=start_docker + TEST_FN=test_docker + STOP_FN=stop_docker + PROG_NAME=Docker +else + if [ -n "$GPU" ]; then + EXTRA="--nv" + fi + START_FN=start_singularity + TEST_FN=test_singularity + STOP_FN=stop_singularity + PROG_NAME=Singularity +fi + +if [ "$OP" == start ]; then + # handle cleaning up + if [ -n "$FORCE" ]; then + auto_stop + elif [ -d "$TMPDIR" ]; then + echo "Error: this container may already exist (override with -f)" + exit 1 + fi + + handle_ports + PORT_EXIT=$? + if [ "$PORT_EXIT" -ne 0 ]; then exit $PORT_EXIT; fi + + list_models + + make_tmp + + # if parent PID is provided, automatically stop server when finished + # do this before actually trying to start the server in case of ctrl+c + if [ -n "$PARENTPID" ]; then + auto_stop "" "$PARENTPID" >& "$STOPLOG" & + fi + + START_EXIT=0 + for ((counter=0; counter < ${RETRIES}; counter++)); do + if [ "$START_EXIT" -ne 0 ]; then make_tmp; fi + + $START_FN + START_EXIT=$? + if [ "$START_EXIT" -eq 0 ]; then + wait_server + WAIT_EXIT=$? + if [ "$WAIT_EXIT" -eq 0 ]; then + break + else + # allow to keep retrying if there was a port issue + counter=$((counter-1)) + START_EXIT="$WAIT_EXIT" + fi + fi + + if [ "$START_EXIT" -ne 0 ]; then + auto_stop + echo "Retrying after container issue..." + fi + done + if [ "$START_EXIT" -ne 0 ]; then + echo "Error from $PROG_NAME" + exit "$START_EXIT" + fi +else + # check for tmp dir + if [ -d "$TMPDIR" ] || [ -n "$DRYRUN" ]; then + $DRYRUN cd "$TMPDIR" + elif [ -z "$FORCE" ]; then + echo "Error: attempt to stop unknown container $SERVER" + exit 1 + fi + + auto_stop +fi diff --git a/HeterogeneousCore/SonicTriton/src/TritonClient.cc b/HeterogeneousCore/SonicTriton/src/TritonClient.cc index 98380e6546f4d..f26a09392ba81 100644 --- a/HeterogeneousCore/SonicTriton/src/TritonClient.cc +++ b/HeterogeneousCore/SonicTriton/src/TritonClient.cc @@ -1,6 +1,9 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" +#include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/Utilities/interface/Exception.h" #include "HeterogeneousCore/SonicTriton/interface/TritonClient.h" +#include "HeterogeneousCore/SonicTriton/interface/TritonService.h" #include "HeterogeneousCore/SonicTriton/interface/triton_utils.h" #include "grpc_client.h" @@ -20,18 +23,23 @@ namespace nic = ni::client; //based on https://github.com/triton-inference-server/server/blob/v2.3.0/src/clients/c++/examples/simple_grpc_async_infer_client.cc //and https://github.com/triton-inference-server/server/blob/v2.3.0/src/clients/c++/perf_client/perf_client.cc -TritonClient::TritonClient(const edm::ParameterSet& params) - : SonicClient(params), +TritonClient::TritonClient(const edm::ParameterSet& params, const std::string& debugName) + : SonicClient(params, debugName, "TritonClient"), verbose_(params.getUntrackedParameter("verbose")), options_(params.getParameter("modelName")) { - clientName_ = "TritonClient"; - //will get overwritten later, just used in constructor - fullDebugName_ = clientName_; + //get appropriate server for this model + edm::Service ts; + const auto& [url, isFallbackCPU] = + ts->serverAddress(options_.model_name_, params.getUntrackedParameter("preferredServer")); + if (verbose_) + edm::LogInfo(fullDebugName_) << "Using server: " << url; + //enforce sync mode for fallback CPU server to avoid contention + //todo: could enforce async mode otherwise (unless mode was specified by user?) + if (isFallbackCPU) + setMode(SonicMode::Sync); //connect to the server //TODO: add SSL options - std::string url(params.getUntrackedParameter("address") + ":" + - std::to_string(params.getUntrackedParameter("port"))); triton_utils::throwIfError(nic::InferenceServerGrpcClient::Create(&client_, url, false), "TritonClient(): unable to create inference context"); @@ -127,8 +135,8 @@ TritonClient::TritonClient(const edm::ParameterSet& params) throw cms::Exception("MissingOutput") << "Some requested outputs were not available on the server: " << triton_utils::printColl(s_outputs); - //check requested batch size and propagate to inputs and outputs - setBatchSize(params.getUntrackedParameter("batchSize")); + //propagate batch size to inputs and outputs + setBatchSize(1); //print model info std::stringstream model_msg; @@ -327,9 +335,11 @@ TritonClient::ServerSideStats TritonClient::summarizeServerStats(const inference inference::ModelStatistics TritonClient::getServerSideStatus() const { if (verbose_) { inference::ModelStatisticsResponse resp; - triton_utils::warnIfError(client_->ModelInferenceStatistics(&resp, options_.model_name_, options_.model_version_), - "getServerSideStatus(): unable to get model statistics"); - return *(resp.model_stats().begin()); + bool success = triton_utils::warnIfError( + client_->ModelInferenceStatistics(&resp, options_.model_name_, options_.model_version_), + "getServerSideStatus(): unable to get model statistics"); + if (success) + return *(resp.model_stats().begin()); } return inference::ModelStatistics{}; } @@ -340,10 +350,9 @@ void TritonClient::fillPSetDescription(edm::ParameterSetDescription& iDesc) { fillBasePSetDescription(descClient); descClient.add("modelName"); descClient.add("modelVersion", ""); + descClient.add("modelConfigPath"); //server parameters should not affect the physics results - descClient.addUntracked("batchSize"); - descClient.addUntracked("address"); - descClient.addUntracked("port"); + descClient.addUntracked("preferredServer", ""); descClient.addUntracked("timeout"); descClient.addUntracked("verbose", false); descClient.addUntracked>("outputs", {}); diff --git a/HeterogeneousCore/SonicTriton/src/TritonService.cc b/HeterogeneousCore/SonicTriton/src/TritonService.cc new file mode 100644 index 0000000000000..7ad47b4eded3f --- /dev/null +++ b/HeterogeneousCore/SonicTriton/src/TritonService.cc @@ -0,0 +1,293 @@ +#include "HeterogeneousCore/SonicTriton/interface/TritonService.h" +#include "HeterogeneousCore/SonicTriton/interface/triton_utils.h" + +#include "DataFormats/Provenance/interface/ModuleDescription.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/ServiceRegistry/interface/ActivityRegistry.h" +#include "FWCore/ServiceRegistry/interface/ProcessContext.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "FWCore/Utilities/interface/GlobalIdentifier.h" + +#include "grpc_client.h" +#include "grpc_service.pb.h" + +#include +#include +#include +#include +#include +#include + +namespace ni = nvidia::inferenceserver; +namespace nic = ni::client; + +const std::string TritonService::Server::fallbackName{"fallback"}; +const std::string TritonService::Server::fallbackAddress{"0.0.0.0"}; + +namespace { + std::pair execSys(const std::string& cmd) { + //redirect stderr to stdout + auto pipe = popen((cmd + " 2>&1").c_str(), "r"); + int thisErrno = errno; + if (!pipe) + throw cms::Exception("SystemError") << "popen() failed with errno " << thisErrno << " for command: " << cmd; + + //extract output + constexpr static unsigned buffSize = 128; + std::array buffer; + std::string result; + while (!feof(pipe)) { + if (fgets(buffer.data(), buffSize, pipe)) + result += buffer.data(); + else { + thisErrno = ferror(pipe); + if (thisErrno) + throw cms::Exception("SystemError") << "failed reading command output with errno " << thisErrno; + } + } + + int rv = pclose(pipe); + return std::make_pair(result, rv); + } +} // namespace + +TritonService::TritonService(const edm::ParameterSet& pset, edm::ActivityRegistry& areg) + : verbose_(pset.getUntrackedParameter("verbose")), + fallbackOpts_(pset.getParameterSet("fallback")), + currentModuleId_(0), + allowAddModel_(false), + startedFallback_(false) { + //module construction is assumed to be serial (correct at the time this code was written) + areg.watchPreModuleConstruction(this, &TritonService::preModuleConstruction); + areg.watchPostModuleConstruction(this, &TritonService::postModuleConstruction); + areg.watchPreModuleDestruction(this, &TritonService::preModuleDestruction); + //fallback server will be launched (if needed) before beginJob + areg.watchPreBeginJob(this, &TritonService::preBeginJob); + + //include fallback server in set if enabled + if (fallbackOpts_.enable) + servers_.emplace(std::piecewise_construct, + std::forward_as_tuple(Server::fallbackName), + std::forward_as_tuple(Server::fallbackName, Server::fallbackAddress)); + + //loop over input servers: check which models they have + std::string msg; + if (verbose_) + msg = "List of models for each server:\n"; + for (const auto& serverPset : pset.getUntrackedParameterSetVector("servers")) { + const std::string& serverName(serverPset.getUntrackedParameter("name")); + //ensure uniqueness + auto [sit, unique] = servers_.emplace(serverName, serverPset); + if (!unique) + throw cms::Exception("DuplicateServer") + << "Not allowed to specify more than one server with same name (" << serverName << ")"; + auto& serverInfo(sit->second); + + std::unique_ptr client; + triton_utils::throwIfError( + nic::InferenceServerGrpcClient::Create(&client, serverInfo.url, false), + "TritonService(): unable to create inference context for " + serverName + " (" + serverInfo.url + ")"); + + inference::RepositoryIndexResponse repoIndexResponse; + triton_utils::throwIfError( + client->ModelRepositoryIndex(&repoIndexResponse), + "TritonService(): unable to get repository index for " + serverName + " (" + serverInfo.url + ")"); + + //servers keep track of models and vice versa + if (verbose_) + msg += serverName + ": "; + for (const auto& modelIndex : repoIndexResponse.models()) { + const auto& modelName = modelIndex.name(); + auto mit = models_.find(modelName); + if (mit == models_.end()) + mit = models_.emplace(modelName, "").first; + auto& modelInfo(mit->second); + modelInfo.servers.insert(serverName); + serverInfo.models.insert(modelName); + if (verbose_) + msg += modelName + ", "; + } + if (verbose_) + msg += "\n"; + } + if (verbose_) + edm::LogInfo("TritonService") << msg; +} + +void TritonService::preModuleConstruction(edm::ModuleDescription const& desc) { + currentModuleId_ = desc.id(); + allowAddModel_ = true; +} + +void TritonService::addModel(const std::string& modelName, const std::string& path) { + //should only be called in module constructors + if (!allowAddModel_) + throw cms::Exception("DisallowedAddModel") << "Attempt to call addModel() outside of module constructors"; + //if model is not in the list, then no specified server provides it + auto mit = models_.find(modelName); + if (mit == models_.end()) { + auto& modelInfo(unservedModels_.emplace(modelName, path).first->second); + modelInfo.modules.insert(currentModuleId_); + //only keep track of modules that need unserved models + modules_.emplace(currentModuleId_, modelName); + } +} + +void TritonService::postModuleConstruction(edm::ModuleDescription const& desc) { allowAddModel_ = false; } + +void TritonService::preModuleDestruction(edm::ModuleDescription const& desc) { + //remove destructed modules from unserved list + if (unservedModels_.empty()) + return; + auto id = desc.id(); + auto oit = modules_.find(id); + if (oit != modules_.end()) { + const auto& moduleInfo(oit->second); + auto mit = unservedModels_.find(moduleInfo.model); + if (mit != unservedModels_.end()) { + auto& modelInfo(mit->second); + modelInfo.modules.erase(id); + //remove a model if it is no longer needed by any modules + if (modelInfo.modules.empty()) + unservedModels_.erase(mit); + } + modules_.erase(oit); + } +} + +//second return value is only true if fallback CPU server is being used +std::pair TritonService::serverAddress(const std::string& model, + const std::string& preferred) const { + auto mit = models_.find(model); + if (mit == models_.end()) + throw cms::Exception("MissingModel") << "There are no servers that provide model " << model; + const auto& modelInfo(mit->second); + const auto& modelServers = modelInfo.servers; + + auto msit = modelServers.end(); + if (!preferred.empty()) { + msit = modelServers.find(preferred); + //todo: add a "strict" parameter to stop execution if preferred server isn't found? + if (msit == modelServers.end()) + edm::LogWarning("PreferredServer") << "Preferred server " << preferred << " for model " << model + << " not available, will choose another server"; + } + const auto& serverName(msit == modelServers.end() ? *modelServers.begin() : preferred); + + //todo: use some algorithm to select server rather than just picking arbitrarily + const auto& serverInfo(servers_.find(serverName)->second); + bool isFallbackCPU = serverInfo.isFallback and !fallbackOpts_.useGPU; + return std::make_pair(serverInfo.url, isFallbackCPU); +} + +void TritonService::preBeginJob(edm::PathsAndConsumesOfModulesBase const&, edm::ProcessContext const&) { + //only need fallback if there are unserved models + if (!fallbackOpts_.enable or unservedModels_.empty()) + return; + + std::string msg; + if (verbose_) + msg = "List of models for fallback server: "; + //all unserved models are provided by fallback server + auto& serverInfo(servers_.find(Server::fallbackName)->second); + for (const auto& [modelName, model] : unservedModels_) { + auto& modelInfo(models_.emplace(modelName, model).first->second); + modelInfo.servers.insert(Server::fallbackName); + serverInfo.models.insert(modelName); + if (verbose_) + msg += modelName + ", "; + } + if (verbose_) + edm::LogInfo("TritonService") << msg; + + //randomize instance name + if (fallbackOpts_.instanceName.empty()) { + fallbackOpts_.instanceName = "triton_server_instance_" + edm::createGlobalIdentifier(); + } + + //assemble server start command + std::string command("cmsTriton -P -1 -p " + std::to_string(::getpid())); + if (fallbackOpts_.debug) + command += " -c"; + if (fallbackOpts_.verbose) + command += " -v"; + if (fallbackOpts_.useDocker) + command += " -d"; + if (fallbackOpts_.useGPU) + command += " -g"; + if (!fallbackOpts_.instanceName.empty()) + command += " -n " + fallbackOpts_.instanceName; + if (fallbackOpts_.retries >= 0) + command += " -r " + std::to_string(fallbackOpts_.retries); + if (fallbackOpts_.wait >= 0) + command += " -w " + std::to_string(fallbackOpts_.wait); + for (const auto& [modelName, model] : unservedModels_) { + command += " -m " + model.path; + } + //don't need this anymore + unservedModels_.clear(); + + //get a random temporary directory if none specified + if (fallbackOpts_.tempDir.empty()) { + auto tmp_dir_path{std::filesystem::temp_directory_path() /= edm::createGlobalIdentifier()}; + fallbackOpts_.tempDir = tmp_dir_path.string(); + } + //special case ".": use script default (temp dir = .$instanceName) + if (fallbackOpts_.tempDir != ".") + command += " -t " + fallbackOpts_.tempDir; + + command += " start"; + + if (fallbackOpts_.debug) + edm::LogInfo("TritonService") << "Fallback server temporary directory: " << fallbackOpts_.tempDir; + if (verbose_) + edm::LogInfo("TritonService") << command; + + //mark as started before executing in case of ctrl+c while command is running + startedFallback_ = true; + const auto& [output, rv] = execSys(command); + if (verbose_ or rv != 0) + edm::LogInfo("TritonService") << output; + if (rv != 0) + throw cms::Exception("FallbackFailed") << "Starting the fallback server failed with exit code " << rv; + + //get the port + const std::string& portIndicator("CMS_TRITON_GRPC_PORT: "); + //find last instance in log in case multiple ports were tried + auto pos = output.rfind(portIndicator); + if (pos != std::string::npos) { + auto pos2 = pos + portIndicator.size(); + auto pos3 = output.find('\n', pos2); + const auto& portNum = output.substr(pos2, pos3 - pos2); + serverInfo.url += ":" + portNum; + } else + throw cms::Exception("FallbackFailed") << "Unknown port for fallback server, log follows:\n" << output; +} + +void TritonService::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.addUntracked("verbose", false); + + edm::ParameterSetDescription validator; + validator.addUntracked("name"); + validator.addUntracked("address"); + validator.addUntracked("port"); + + desc.addVPSetUntracked("servers", validator, {}); + + edm::ParameterSetDescription fallbackDesc; + fallbackDesc.addUntracked("enable", false); + fallbackDesc.addUntracked("debug", false); + fallbackDesc.addUntracked("verbose", false); + fallbackDesc.addUntracked("useDocker", false); + fallbackDesc.addUntracked("useGPU", false); + fallbackDesc.addUntracked("retries", -1); + fallbackDesc.addUntracked("wait", -1); + fallbackDesc.addUntracked("instanceName", ""); + fallbackDesc.addUntracked("tempDir", ""); + desc.add("fallback", fallbackDesc); + + descriptions.addWithDefaultLabel(desc); +} diff --git a/HeterogeneousCore/SonicTriton/test/BuildFile.xml b/HeterogeneousCore/SonicTriton/test/BuildFile.xml index 39a975ea89418..f3b5d01f6cfda 100644 --- a/HeterogeneousCore/SonicTriton/test/BuildFile.xml +++ b/HeterogeneousCore/SonicTriton/test/BuildFile.xml @@ -1,6 +1,10 @@ - - - - - - + + + + + + + + + + diff --git a/HeterogeneousCore/SonicTriton/test/README.md b/HeterogeneousCore/SonicTriton/test/README.md index 6d0d75960078a..52e890480edc7 100644 --- a/HeterogeneousCore/SonicTriton/test/README.md +++ b/HeterogeneousCore/SonicTriton/test/README.md @@ -1,46 +1,29 @@ # SONIC TritonClient tests -Test producers `TritonImageProducer` and `TritonGraphProducer` are available. +Test modules `TritonImageProducer` and `TritonGraphProducer` (`TritonGraphFilter`, `TritonGraphAnalyzer`) are available. They generate arbitrary inputs for inference (with ResNet50 or Graph Attention Network, respectively) and print the resulting output. -To run the tests, a local Triton server can be started using Singularity (default, should not require superuser permission) -or Docker (may require superuser permission). -The server can utilize the local CPU (support for AVX instructions required) or a local Nvidia GPU, if one is available. -The default local server address is `0.0.0.0`. - -First, the relevant data should be downloaded from Nvidia: +First, the relevant data for ResNet50 should be downloaded from Nvidia: ``` ./fetch_model.sh ``` -The server can be managed with the `triton` script (using Singularity with CPU by default): -``` -./triton start -[run test commands] -./triton stop -``` - -The script has the following options: -* `-d`: use Docker instead of Singularity -* `-g`: use GPU instead of CPU -* `-n`: name of container instance (default: triton_server_instance) -* `-v`: (verbose) start: activate server debugging info; stop: keep server logs -* `-w`: maximum time to wait for server to start (default: 60 seconds) -* `-h`: print help message and exit +A local Triton server will be launched automatically when the tests run. +The local server will use Singularity with CPU by default; if a local Nvidia GPU is available, it will be used instead. +(This behavior can also be controlled manually using the "device" argument to [tritonTest_cfg.py](./tritonTest_cfg.py).) ## Test commands Run the image test: ``` -cmsRun tritonTest_cfg.py maxEvents=1 producer=TritonImageProducer +cmsRun tritonTest_cfg.py maxEvents=1 modules=TritonImageProducer ``` Run the graph test: ``` -cmsRun tritonTest_cfg.py maxEvents=1 producer=TritonGraphProducer +cmsRun tritonTest_cfg.py maxEvents=1 modules=TritonGraphProducer ``` ## Caveats * Local CPU server requires support for AVX instructions. -* Multiple users cannot run servers on the same GPU (e.g. on a shared node). diff --git a/HeterogeneousCore/SonicTriton/test/TritonGraphModules.cc b/HeterogeneousCore/SonicTriton/test/TritonGraphModules.cc new file mode 100644 index 0000000000000..46ced5e330291 --- /dev/null +++ b/HeterogeneousCore/SonicTriton/test/TritonGraphModules.cc @@ -0,0 +1,171 @@ +#include "HeterogeneousCore/SonicTriton/interface/TritonEDProducer.h" + +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include +#include +#include +#include + +class TritonGraphHelper { +public: + TritonGraphHelper(edm::ParameterSet const& cfg) + : nodeMin_(cfg.getParameter("nodeMin")), + nodeMax_(cfg.getParameter("nodeMax")), + edgeMin_(cfg.getParameter("edgeMin")), + edgeMax_(cfg.getParameter("edgeMax")) {} + void makeInput(edm::Event const& iEvent, TritonInputMap& iInput) const { + //get event-based seed for RNG + unsigned int runNum_uint = static_cast(iEvent.id().run()); + unsigned int lumiNum_uint = static_cast(iEvent.id().luminosityBlock()); + unsigned int evNum_uint = static_cast(iEvent.id().event()); + std::uint32_t seed = (lumiNum_uint << 10) + (runNum_uint << 20) + evNum_uint; + std::mt19937 rng(seed); + + std::uniform_int_distribution randint1(nodeMin_, nodeMax_); + int nnodes = randint1(rng); + std::uniform_int_distribution randint2(edgeMin_, edgeMax_); + int nedges = randint2(rng); + + //set shapes + auto& input1 = iInput.at("x__0"); + input1.setShape(0, nnodes); + auto data1 = std::make_shared>(1); + auto& vdata1 = (*data1)[0]; + vdata1.reserve(input1.sizeShape()); + + auto& input2 = iInput.at("edgeindex__1"); + input2.setShape(1, nedges); + auto data2 = std::make_shared>(1); + auto& vdata2 = (*data2)[0]; + vdata2.reserve(input2.sizeShape()); + + //fill + std::normal_distribution randx(-10, 4); + for (unsigned i = 0; i < input1.sizeShape(); ++i) { + vdata1.push_back(randx(rng)); + } + + std::uniform_int_distribution randedge(0, nnodes - 1); + for (unsigned i = 0; i < input2.sizeShape(); ++i) { + vdata2.push_back(randedge(rng)); + } + + // convert to server format + input1.toServer(data1); + input2.toServer(data2); + } + void makeOutput(const TritonOutputMap& iOutput, const std::string& debugName) const { + //check the results + const auto& output1 = iOutput.begin()->second; + // convert from server format + const auto& tmp = output1.fromServer(); + std::stringstream msg; + for (int i = 0; i < output1.shape()[0]; ++i) { + msg << "output " << i << ": "; + for (int j = 0; j < output1.shape()[1]; ++j) { + msg << tmp[0][output1.shape()[1] * i + j] << " "; + } + msg << "\n"; + } + edm::LogInfo(debugName) << msg.str(); + } + static void fillPSetDescription(edm::ParameterSetDescription& desc) { + desc.add("nodeMin", 100); + desc.add("nodeMax", 4000); + desc.add("edgeMin", 8000); + desc.add("edgeMax", 15000); + } + +private: + //members + unsigned nodeMin_, nodeMax_; + unsigned edgeMin_, edgeMax_; +}; + +class TritonGraphProducer : public TritonEDProducer<> { +public: + explicit TritonGraphProducer(edm::ParameterSet const& cfg) + : TritonEDProducer<>(cfg, "TritonGraphProducer"), helper_(cfg) {} + void acquire(edm::Event const& iEvent, edm::EventSetup const& iSetup, Input& iInput) override { + helper_.makeInput(iEvent, iInput); + } + void produce(edm::Event& iEvent, edm::EventSetup const& iSetup, Output const& iOutput) override { + helper_.makeOutput(iOutput, debugName_); + } + ~TritonGraphProducer() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + TritonClient::fillPSetDescription(desc); + TritonGraphHelper::fillPSetDescription(desc); + //to ensure distinct cfi names + descriptions.addWithDefaultLabel(desc); + } + +private: + //member + TritonGraphHelper helper_; +}; + +DEFINE_FWK_MODULE(TritonGraphProducer); + +#include "HeterogeneousCore/SonicTriton/interface/TritonEDFilter.h" + +class TritonGraphFilter : public TritonEDFilter<> { +public: + explicit TritonGraphFilter(edm::ParameterSet const& cfg) : TritonEDFilter<>(cfg, "TritonGraphFilter"), helper_(cfg) {} + void acquire(edm::Event const& iEvent, edm::EventSetup const& iSetup, Input& iInput) override { + helper_.makeInput(iEvent, iInput); + } + bool filter(edm::Event& iEvent, edm::EventSetup const& iSetup, Output const& iOutput) override { + helper_.makeOutput(iOutput, debugName_); + return true; + } + ~TritonGraphFilter() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + TritonClient::fillPSetDescription(desc); + TritonGraphHelper::fillPSetDescription(desc); + //to ensure distinct cfi names + descriptions.addWithDefaultLabel(desc); + } + +private: + //member + TritonGraphHelper helper_; +}; + +DEFINE_FWK_MODULE(TritonGraphFilter); + +#include "HeterogeneousCore/SonicTriton/interface/TritonOneEDAnalyzer.h" + +class TritonGraphAnalyzer : public TritonOneEDAnalyzer<> { +public: + explicit TritonGraphAnalyzer(edm::ParameterSet const& cfg) + : TritonOneEDAnalyzer<>(cfg, "TritonGraphAnalyzer"), helper_(cfg) {} + void acquire(edm::Event const& iEvent, edm::EventSetup const& iSetup, Input& iInput) override { + helper_.makeInput(iEvent, iInput); + } + void analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup, Output const& iOutput) override { + helper_.makeOutput(iOutput, debugName_); + } + ~TritonGraphAnalyzer() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + TritonClient::fillPSetDescription(desc); + TritonGraphHelper::fillPSetDescription(desc); + //to ensure distinct cfi names + descriptions.addWithDefaultLabel(desc); + } + +private: + //member + TritonGraphHelper helper_; +}; + +DEFINE_FWK_MODULE(TritonGraphAnalyzer); diff --git a/HeterogeneousCore/SonicTriton/test/TritonGraphProducer.cc b/HeterogeneousCore/SonicTriton/test/TritonGraphProducer.cc deleted file mode 100644 index 952a6e0bd08b1..0000000000000 --- a/HeterogeneousCore/SonicTriton/test/TritonGraphProducer.cc +++ /dev/null @@ -1,87 +0,0 @@ -#include "HeterogeneousCore/SonicCore/interface/SonicEDProducer.h" -#include "HeterogeneousCore/SonicTriton/interface/TritonClient.h" - -#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" -#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include -#include -#include -#include -#include -#include - -class TritonGraphProducer : public SonicEDProducer { -public: - explicit TritonGraphProducer(edm::ParameterSet const& cfg) : SonicEDProducer(cfg) { - //for debugging - setDebugName("TritonGraphProducer"); - } - void acquire(edm::Event const& iEvent, edm::EventSetup const& iSetup, Input& iInput) override { - //get event-based seed for RNG - unsigned int runNum_uint = static_cast(iEvent.id().run()); - unsigned int lumiNum_uint = static_cast(iEvent.id().luminosityBlock()); - unsigned int evNum_uint = static_cast(iEvent.id().event()); - std::uint32_t seed = (lumiNum_uint << 10) + (runNum_uint << 20) + evNum_uint; - std::mt19937 rng(seed); - - std::uniform_int_distribution randint1(100, 4000); - int nnodes = randint1(rng); - std::uniform_int_distribution randint2(8000, 15000); - int nedges = randint2(rng); - - //set shapes - auto& input1 = iInput.at("x__0"); - input1.setShape(0, nnodes); - auto data1 = std::make_shared>(1); - auto& vdata1 = (*data1)[0]; - vdata1.reserve(input1.sizeShape()); - - auto& input2 = iInput.at("edgeindex__1"); - input2.setShape(1, nedges); - auto data2 = std::make_shared>(1); - auto& vdata2 = (*data2)[0]; - vdata2.reserve(input2.sizeShape()); - - //fill - std::normal_distribution randx(-10, 4); - for (unsigned i = 0; i < input1.sizeShape(); ++i) { - vdata1.push_back(randx(rng)); - } - - std::uniform_int_distribution randedge(0, nnodes - 1); - for (unsigned i = 0; i < input2.sizeShape(); ++i) { - vdata2.push_back(randedge(rng)); - } - - // convert to server format - input1.toServer(data1); - input2.toServer(data2); - } - void produce(edm::Event& iEvent, edm::EventSetup const& iSetup, Output const& iOutput) override { - //check the results - const auto& output1 = iOutput.begin()->second; - // convert from server format - const auto& tmp = output1.fromServer(); - std::stringstream msg; - for (int i = 0; i < output1.shape()[0]; ++i) { - msg << "output " << i << ": "; - for (int j = 0; j < output1.shape()[1]; ++j) { - msg << tmp[0][output1.shape()[1] * i + j] << " "; - } - msg << "\n"; - } - edm::LogInfo(client_.debugName()) << msg.str(); - } - ~TritonGraphProducer() override = default; - - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - edm::ParameterSetDescription desc; - TritonClient::fillPSetDescription(desc); - //to ensure distinct cfi names - descriptions.addWithDefaultLabel(desc); - } -}; - -DEFINE_FWK_MODULE(TritonGraphProducer); diff --git a/HeterogeneousCore/SonicTriton/test/TritonImageProducer.cc b/HeterogeneousCore/SonicTriton/test/TritonImageProducer.cc index 2617d28eedb2c..4c602c659ea75 100644 --- a/HeterogeneousCore/SonicTriton/test/TritonImageProducer.cc +++ b/HeterogeneousCore/SonicTriton/test/TritonImageProducer.cc @@ -1,6 +1,6 @@ -#include "HeterogeneousCore/SonicCore/interface/SonicEDProducer.h" -#include "HeterogeneousCore/SonicTriton/interface/TritonClient.h" +#include "HeterogeneousCore/SonicTriton/interface/TritonEDProducer.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -11,14 +11,14 @@ #include #include -class TritonImageProducer : public SonicEDProducer { +class TritonImageProducer : public TritonEDProducer<> { public: explicit TritonImageProducer(edm::ParameterSet const& cfg) - : SonicEDProducer(cfg), topN_(cfg.getParameter("topN")) { - //for debugging - setDebugName("TritonImageProducer"); + : TritonEDProducer<>(cfg, "TritonImageProducer"), + batchSize_(cfg.getParameter("batchSize")), + topN_(cfg.getParameter("topN")) { //load score list - std::string imageListFile(cfg.getParameter("imageList")); + std::string imageListFile(cfg.getParameter("imageList").fullPath()); std::ifstream ifile(imageListFile); if (ifile.is_open()) { std::string line; @@ -30,12 +30,13 @@ class TritonImageProducer : public SonicEDProducer { } } void acquire(edm::Event const& iEvent, edm::EventSetup const& iSetup, Input& iInput) override { + client_->setBatchSize(batchSize_); // create an npix x npix x ncol image w/ arbitrary color value // model only has one input, so just pick begin() auto& input1 = iInput.begin()->second; auto data1 = std::make_shared>(); - data1->reserve(input1.batchSize()); - for (unsigned i = 0; i < input1.batchSize(); ++i) { + data1->reserve(batchSize_); + for (unsigned i = 0; i < batchSize_; ++i) { data1->emplace_back(input1.sizeDims(), 0.5f); } // convert to server format @@ -50,8 +51,9 @@ class TritonImageProducer : public SonicEDProducer { static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; TritonClient::fillPSetDescription(desc); + desc.add("batchSize", 1); desc.add("topN", 5); - desc.add("imageList"); + desc.add("imageList"); //to ensure distinct cfi names descriptions.addWithDefaultLabel(desc); } @@ -76,10 +78,11 @@ class TritonImageProducer : public SonicEDProducer { if (counter >= topN_) break; } - edm::LogInfo(client_.debugName()) << msg.str(); + edm::LogInfo(debugName_) << msg.str(); } } + unsigned batchSize_; unsigned topN_; std::vector imageList_; }; diff --git a/HeterogeneousCore/SonicTriton/test/fetch_model.sh b/HeterogeneousCore/SonicTriton/test/fetch_model.sh index bc469886e215c..0f36460b936ce 100755 --- a/HeterogeneousCore/SonicTriton/test/fetch_model.sh +++ b/HeterogeneousCore/SonicTriton/test/fetch_model.sh @@ -19,36 +19,3 @@ mkdir -p 1 curl -o 1/model.netdef http://download.caffe2.ai.s3.amazonaws.com/models/resnet50/predict_net.pb curl -o 1/init_model.netdef http://download.caffe2.ai.s3.amazonaws.com/models/resnet50/init_net.pb - -GAT_DIR=${TEST_DIR}/../data/models/gat_test -cd $TEST_DIR -mkdir -p $GAT_DIR -cd $GAT_DIR - -cat << EOF > config.pbtxt -name: "gat_test" -platform: "pytorch_libtorch" -max_batch_size: 0 -input [ - { - name: "x__0" - data_type: TYPE_FP32 - dims: [ -1, 1433 ] - }, - { - name: "edgeindex__1" - data_type: TYPE_INT64 - dims: [ 2, -1 ] - } -] -output [ - { - name: "logits__0" - data_type: TYPE_FP32 - dims: [ -1, 7 ] - } -] -EOF - -mkdir -p 1 -cp /cvmfs/unpacked.cern.ch/registry.hub.docker.com/fastml/triton-torchgeo:20.09-py3-geometric/torch_geometric/examples/model.pt 1/model.pt diff --git a/HeterogeneousCore/SonicTriton/test/triton b/HeterogeneousCore/SonicTriton/test/triton deleted file mode 100755 index a02c63e3f64e3..0000000000000 --- a/HeterogeneousCore/SonicTriton/test/triton +++ /dev/null @@ -1,168 +0,0 @@ -#!/bin/bash - -# defaults -USEDOCKER="" -GPU="" -VERBOSE="" -WTIME=60 -SERVER=triton_server_instance - -usage() { - ECHO="echo -e" - $ECHO "triton [options] [start|stop]" - $ECHO - $ECHO "Options:" - $ECHO "-d \t use Docker instead of Singularity" - $ECHO "-g \t use GPU instead of CPU" - $ECHO "-n \t name of container instance (default: ${SERVER})" - $ECHO "-v \t (verbose) start: activate server debugging info; stop: keep server logs" - $ECHO "-w \t maximum time to wait for server to start (default: ${WTIME} seconds)" - $ECHO "-h \t print this message and exit" - $ECHO - $ECHO "Operations:" - $ECHO "start \t start server" - $ECHO "stop \t stop server" - exit $1 -} - -# check shm locations -SHM=/dev/shm -if [ -e /run/shm ]; then - SHM=/run/shm -fi - -while getopts "dgvhw:n:" opt; do - case "$opt" in - d) USEDOCKER=true - ;; - g) GPU=true - ;; - v) VERBOSE="--log-verbose=1 --log-error=1 --log-info=1" - ;; - h) usage 0 - ;; - w) WTIME="$OPTARG" - ;; - n) SERVER="$OPTARG" - ;; - esac -done - -shift $(($OPTIND - 1)) -OP=$1 - -if [ "$OP" != start ] && [ "$OP" != stop ]; then - usage 1 -fi - -DOCKER="sudo docker" -IMAGE=fastml/triton-torchgeo:20.09-py3-geometric -MODELS=${CMSSW_BASE}/src/HeterogeneousCore/SonicTriton/data/models -LOG=log_triton_server.log -LIB=lib -STARTED_INDICATOR="Started GRPCInferenceService" -EXTRA="" - -start_docker(){ - $DOCKER run -d --name ${SERVER} \ - --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 \ - -p8000:8000 -p8001:8001 -p8002:8002 $EXTRA \ - -v${MODELS}:/models \ - ${IMAGE} tritonserver --model-repository=/models $VERBOSE -} - -start_singularity(){ - # triton server image may need to modify contents of opt/tritonserver/lib/ - # but cvmfs is read-only - # -> make a writable local directory with the same contents - mkdir ${LIB} - ln -s /cvmfs/unpacked.cern.ch/registry.hub.docker.com/${IMAGE}/opt/tritonserver/lib/* ${LIB}/ - - # start instance - # need to bind /cvmfs for above symlinks to work inside container - singularity instance start \ - -B ${SHM}:/run/shm -B ${MODELS}:/models -B ${LIB}:/opt/tritonserver/lib -B /cvmfs $EXTRA \ - /cvmfs/unpacked.cern.ch/registry.hub.docker.com/${IMAGE} ${SERVER} - - START_EXIT=$? - if [ "$START_EXIT" -ne 0 ]; then - rm -rf ${LIB} - return "$START_EXIT" - fi - - # run the actual server - singularity run instance://${SERVER} \ - tritonserver --model-repository=/models $VERBOSE >& ${LOG} & -} - -stop_docker(){ - # keep log - if [ -n "$VERBOSE" ]; then $DOCKER logs ${SERVER} >& ${LOG}; fi - - $DOCKER stop ${SERVER} - $DOCKER rm ${SERVER} -} - -stop_singularity(){ - singularity instance stop ${SERVER} - - # cleanup - rm -rf ${LIB} - if [ -z "$VERBOSE" ]; then rm ${LOG}; fi -} - -test_docker(){ - # docker logs print to stderr - ${DOCKER} logs ${SERVER} |& grep "$STARTED_INDICATOR" -} - -test_singularity(){ - grep "$STARTED_INDICATOR" $LOG -} - -wait_server(){ - COUNT=0 - while ! $WAIT_COND >& /dev/null; do - if [ "$COUNT" -gt "$WTIME" ]; then - echo "timed out waiting for server to start" - VERBOSE=true $STOP_FN - exit 1 - else - COUNT=$(($COUNT + 1)) - sleep 1 - fi - done - - echo "server is ready!" - exit 0 -} - -if [ -n "$USEDOCKER" ]; then - if [ -n "$GPU" ]; then - EXTRA="--gpus all" - fi - START_FN=start_docker - WAIT_COND=test_docker - STOP_FN=stop_docker - PROG_NAME=Docker -else - if [ -n "$GPU" ]; then - EXTRA="--nv" - fi - START_FN=start_singularity - WAIT_COND=test_singularity - STOP_FN=stop_singularity - PROG_NAME=Singularity -fi - -if [ "$OP" == start ]; then - $START_FN - START_EXIT=$? - if [ "$START_EXIT" -ne 0 ]; then - echo "Error from $PROG_NAME" - exit "$START_EXIT" - fi - wait_server -else - $STOP_FN -fi diff --git a/HeterogeneousCore/SonicTriton/test/tritonTest_cfg.py b/HeterogeneousCore/SonicTriton/test/tritonTest_cfg.py index 0646e527d16b0..b9683cdb9439d 100644 --- a/HeterogeneousCore/SonicTriton/test/tritonTest_cfg.py +++ b/HeterogeneousCore/SonicTriton/test/tritonTest_cfg.py @@ -1,19 +1,23 @@ from FWCore.ParameterSet.VarParsing import VarParsing import FWCore.ParameterSet.Config as cms -import os, sys, json +import os, sys, json, six options = VarParsing("analysis") -options.register("address", "0.0.0.0", VarParsing.multiplicity.singleton, VarParsing.varType.string) +options.register("serverName", "default", VarParsing.multiplicity.singleton, VarParsing.varType.string) +options.register("address", "", VarParsing.multiplicity.singleton, VarParsing.varType.string) options.register("port", 8001, VarParsing.multiplicity.singleton, VarParsing.varType.int) options.register("timeout", 30, VarParsing.multiplicity.singleton, VarParsing.varType.int) options.register("params", "", VarParsing.multiplicity.singleton, VarParsing.varType.string) options.register("threads", 1, VarParsing.multiplicity.singleton, VarParsing.varType.int) options.register("streams", 0, VarParsing.multiplicity.singleton, VarParsing.varType.int) -options.register("batchSize", 1, VarParsing.multiplicity.singleton, VarParsing.varType.int) -options.register("producer", "TritonImageProducer", VarParsing.multiplicity.singleton, VarParsing.varType.string) +options.register("modules", "TritonImageProducer", VarParsing.multiplicity.list, VarParsing.varType.string) options.register("modelName","resnet50_netdef", VarParsing.multiplicity.singleton, VarParsing.varType.string) -options.register("mode","PseudoAsync", VarParsing.multiplicity.singleton, VarParsing.varType.string) +options.register("mode","Async", VarParsing.multiplicity.singleton, VarParsing.varType.string) options.register("verbose", False, VarParsing.multiplicity.singleton, VarParsing.varType.bool) +options.register("unittest", False, VarParsing.multiplicity.singleton, VarParsing.varType.bool) +options.register("device","auto", VarParsing.multiplicity.singleton, VarParsing.varType.string) +options.register("docker", False, VarParsing.multiplicity.singleton, VarParsing.varType.bool) +options.register("tries", 0, VarParsing.multiplicity.singleton, VarParsing.varType.int) options.parseArguments() if len(options.params)>0: @@ -23,51 +27,96 @@ options.port = int(pdict["port"]) print("server = "+options.address+":"+str(options.port)) -# check producer/model -models = { - "TritonImageProducer": "resnet50_netdef", - "TritonGraphProducer": "gat_test", -} +# check devices +options.device = options.device.lower() +allowed_devices = ["auto","cpu","gpu"] +if options.device not in allowed_devices: + raise ValueError("Unknown device: "+options.device) -if options.producer not in models: - raise ValueError("Unknown producer: "+options.producer) +from Configuration.ProcessModifiers.enableSonicTriton_cff import enableSonicTriton +process = cms.Process('tritonTest',enableSonicTriton) -process = cms.Process('tritonTest') +process.load("HeterogeneousCore.SonicTriton.TritonService_cff") process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(options.maxEvents) ) process.source = cms.Source("EmptySource") -process.TritonProducer = cms.EDProducer(options.producer, - Client = cms.PSet( - mode = cms.string(options.mode), - batchSize = cms.untracked.uint32(options.batchSize), - address = cms.untracked.string(options.address), - port = cms.untracked.uint32(options.port), - timeout = cms.untracked.uint32(options.timeout), - modelName = cms.string(models[options.producer]), - modelVersion = cms.string(""), - verbose = cms.untracked.bool(options.verbose), - allowedTries = cms.untracked.uint32(0), +process.TritonService.verbose = options.verbose +process.TritonService.fallback.verbose = options.verbose +process.TritonService.fallback.useDocker = options.docker +if options.device != "auto": + process.TritonService.fallback.useGPU = options.device=="gpu" +if len(options.address)>0: + process.TritonService.servers.append( + cms.PSet( + name = cms.untracked.string(options.serverName), + address = cms.untracked.string(options.address), + port = cms.untracked.uint32(options.port), + ) ) -) -if options.producer=="TritonImageProducer": - process.TritonProducer.topN = cms.uint32(5) - process.TritonProducer.imageList = cms.string("../data/models/resnet50_netdef/resnet50_labels.txt") # Let it run -process.p = cms.Path( - process.TritonProducer -) +process.p = cms.Path() + +# check module/model +models = { + "TritonImageProducer": "resnet50_netdef", + "TritonGraphProducer": "gat_test", + "TritonGraphFilter": "gat_test", + "TritonGraphAnalyzer": "gat_test", +} + +modules = { + "Producer": cms.EDProducer, + "Filter": cms.EDFilter, + "Analyzer": cms.EDAnalyzer, +} + +keepMsgs = ['TritonClient','TritonService'] +for module in options.modules: + if module not in models: + raise ValueError("Unknown module: "+module) + Module = [obj for name,obj in six.iteritems(modules) if name in module][0] + setattr(process, module, + Module(module, + Client = cms.PSet( + mode = cms.string(options.mode), + preferredServer = cms.untracked.string(""), + timeout = cms.untracked.uint32(options.timeout), + modelName = cms.string(models[module]), + modelVersion = cms.string(""), + modelConfigPath = cms.FileInPath("HeterogeneousCore/SonicTriton/data/models/{}/config.pbtxt".format(models[module])), + verbose = cms.untracked.bool(options.verbose), + allowedTries = cms.untracked.uint32(options.tries), + ) + ) + ) + processModule = getattr(process, module) + if module=="TritonImageProducer": + processModule.batchSize = cms.uint32(1) + processModule.topN = cms.uint32(5) + processModule.imageList = cms.FileInPath("HeterogeneousCore/SonicTriton/data/models/resnet50_netdef/resnet50_labels.txt") + elif "TritonGraph" in module: + if options.unittest: + # reduce input size for unit test + processModule.nodeMin = cms.uint32(1) + processModule.nodeMax = cms.uint32(10) + processModule.edgeMin = cms.uint32(20) + processModule.edgeMax = cms.uint32(40) + else: + processModule.nodeMin = cms.uint32(100) + processModule.nodeMax = cms.uint32(4000) + processModule.edgeMin = cms.uint32(8000) + processModule.edgeMax = cms.uint32(15000) + process.p += processModule + keepMsgs.extend([module,module+':TritonClient']) process.load('FWCore/MessageService/MessageLogger_cfi') process.MessageLogger.cerr.FwkReport.reportEvery = 500 -keep_msgs = [options.producer,options.producer+':TritonClient','TritonClient'] -for msg in keep_msgs: - process.MessageLogger.categories.append(msg) +for msg in keepMsgs: setattr(process.MessageLogger.cerr,msg, cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), limit = cms.untracked.int32(10000000), ) ) diff --git a/HeterogeneousCore/SonicTriton/test/unittest.sh b/HeterogeneousCore/SonicTriton/test/unittest.sh new file mode 100755 index 0000000000000..a428a98a723d8 --- /dev/null +++ b/HeterogeneousCore/SonicTriton/test/unittest.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +LOCALTOP=$1 + +# the test is not possible if: +# 1. avx instructions not supported (needed for singularity on CPU) +# 2. singularity not found or not usable +# 3. inside singularity container w/o unprivileged user namespace enabled (needed for singularity-in-singularity) +# so just return true in those cases + +if grep -q avx /proc/cpuinfo; then + echo "has avx" +else + echo "missing avx" + exit 0 +fi + +if type singularity >& /dev/null; then + echo "has singularity" +else + echo "missing singularity" + exit 0 +fi + +if [ -n "$SINGULARITY_CONTAINER" ]; then + if grep -q "^allow setuid = no" /etc/singularity/singularity.conf && unshare -U echo >/dev/null 2>&1; then + echo "has unprivileged user namespace support" + else + echo "missing unprivileged user namespace support" + exit 0 + fi +fi + +tmpFile=$(mktemp -p ${LOCALTOP} SonicTritonTestXXXXXXXX.log) +cmsRun ${LOCALTOP}/src/HeterogeneousCore/SonicTriton/test/tritonTest_cfg.py modules=TritonGraphProducer,TritonGraphFilter,TritonGraphAnalyzer maxEvents=1 unittest=1 verbose=1 >& $tmpFile +CMSEXIT=$? + +cat $tmpFile + +STOP_COUNTER=0 +while ! LOGFILE="$(ls -rt ${LOCALTOP}/log_triton_server_instance*.log 2>/dev/null | tail -n 1)" && [ "$STOP_COUNTER" -lt 5 ]; do + STOP_COUNTER=$((STOP_COUNTER+1)) + sleep 5 +done + +if [ -n "$LOGFILE" ]; then + echo -e '\n=====\nContents of '$LOGFILE':\n=====\n' + cat "$LOGFILE" +fi + +if grep -q "Socket closed" $tmpFile; then + echo "Transient server error (not caused by client code)" + CMSEXIT=0 +fi + +rm $tmpFile +exit $CMSEXIT diff --git a/HiggsAnalysis/Configuration/python/HiggsAnalysis_EventContent_cff.py b/HiggsAnalysis/Configuration/python/HiggsAnalysis_EventContent_cff.py deleted file mode 100644 index 25d89f1539d51..0000000000000 --- a/HiggsAnalysis/Configuration/python/HiggsAnalysis_EventContent_cff.py +++ /dev/null @@ -1,23 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# HiggsAnalysis event content -# -# Dominique Fortin - UC Riverside -from HiggsAnalysis.Skimming.heavyChHiggsToTauNu_EventContent_cff import * -from HiggsAnalysis.Skimming.higgsTo2Gamma_EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToInvisible_EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToTauTau_LeptonTau_EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToWW2Leptons_EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToZZ4Leptons_EventContent_cff import * -# include "HiggsAnalysis/Skimming/data/rsTo2Gamma_EventContent.cff" -HiggsAnalysisEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -HiggsAnalysisEventContent.outputCommands.extend(heavyChHiggsToTauNuEventContent.outputCommands) -HiggsAnalysisEventContent.outputCommands.extend(higgsTo2GammaEventContent.outputCommands) -HiggsAnalysisEventContent.outputCommands.extend(higgsToInvisibleEventContent.outputCommands) -HiggsAnalysisEventContent.outputCommands.extend(higgsToTauTauLeptonTauEventContent.outputCommands) -HiggsAnalysisEventContent.outputCommands.extend(higgsToWW2LeptonsEventContent.outputCommands) -HiggsAnalysisEventContent.outputCommands.extend(higgsToZZ4LeptonsEventContent.outputCommands) - diff --git a/HiggsAnalysis/Configuration/python/HiggsAnalysis_OutputModules_cff.py b/HiggsAnalysis/Configuration/python/HiggsAnalysis_OutputModules_cff.py deleted file mode 100644 index c63c0090099ff..0000000000000 --- a/HiggsAnalysis/Configuration/python/HiggsAnalysis_OutputModules_cff.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# HiggsAnalysis output modules -# -# Dominique Fortin - UC Riverside -from HiggsAnalysis.Skimming.heavyChHiggsToTauNu_OutputModule_cff import * -from HiggsAnalysis.Skimming.higgsTo2Gamma_OutputModule_cff import * -from HiggsAnalysis.Skimming.higgsToInvisible_OutputModule_cff import * -from HiggsAnalysis.Skimming.higgsToTauTau_LeptonTau_OutputModule_cff import * -from HiggsAnalysis.Skimming.higgsToWW2Leptons_OutputModule_cff import * -from HiggsAnalysis.Skimming.higgsToZZ4Leptons_OutputModule_cff import * -# include "HiggsAnalysis/Skimming/data/rsTo2Gamma_OutputModule.cff" -HiggsAnalysisOutput = cms.Sequence(heavyChHiggsToTauNuOutputModuleRECOSIM+higgsTo2GammaOutputModuleRECOSIM+higgsToInvisibleOutputModuleRECOSIM+higgsToTauTauLeptonTauOutputModuleAODSIM+higgsToWW2LeptonsOutputModuleAODSIM+higgsToZZ4LeptonsOutputModuleRECOSIM) - diff --git a/HiggsAnalysis/Configuration/python/HiggsAnalysis_SkimPaths_cff.py b/HiggsAnalysis/Configuration/python/HiggsAnalysis_SkimPaths_cff.py deleted file mode 100644 index b775ed31f242b..0000000000000 --- a/HiggsAnalysis/Configuration/python/HiggsAnalysis_SkimPaths_cff.py +++ /dev/null @@ -1,13 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# HiggsAnalysis skim paths -# -# Dominique Fortin - UC Riverside -from HiggsAnalysis.Skimming.heavyChHiggsToTauNu_SkimPaths_cff import * -from HiggsAnalysis.Skimming.higgsTo2Gamma_SkimPaths_cff import * -from HiggsAnalysis.Skimming.higgsToInvisible_SkimPaths_cff import * -from HiggsAnalysis.Skimming.higgsToTauTau_LeptonTau_SkimPaths_cff import * -from HiggsAnalysis.Skimming.higgsToWW2Leptons_SkimPaths_cff import * -from HiggsAnalysis.Skimming.higgsToZZ4Leptons_SkimPaths_cff import * - diff --git a/HiggsAnalysis/Configuration/python/HiggsAnalysis_cff.py b/HiggsAnalysis/Configuration/python/HiggsAnalysis_cff.py deleted file mode 100644 index 382d73f86eabc..0000000000000 --- a/HiggsAnalysis/Configuration/python/HiggsAnalysis_cff.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# HiggsAnalysis standard sequences -# -# Dominique Fortin - UC Riverside -from HiggsAnalysis.Skimming.heavyChHiggsToTauNu_Sequences_cff import * -from HiggsAnalysis.Skimming.higgsTo2Gamma_Sequences_cff import * -from HiggsAnalysis.Skimming.higgsToInvisible_Sequences_cff import * -from HiggsAnalysis.Skimming.higgsToTauTau_LeptonTau_Sequences_cff import * -from HiggsAnalysis.Skimming.higgsToWW2Leptons_Sequences_cff import * -from HiggsAnalysis.Skimming.higgsToZZ4Leptons_Sequences_cff import * -# include "HiggsAnalysis/Skimming/data/rsTo2Gamma_Sequences.cff" -higgsAnalysis = cms.Sequence(heavyChHiggsToTauNuSequence+higgsTo2GammaSequence+higgsToInvisibleSequence+higgsToTauTauLeptonTauSequence+higgsToWW2LeptonsSequence+higgsToZZ4LeptonsSequence) - diff --git a/HiggsAnalysis/HiggsToGammaGamma/BuildFile.xml b/HiggsAnalysis/HiggsToGammaGamma/BuildFile.xml deleted file mode 100644 index 68e49f7627d2e..0000000000000 --- a/HiggsAnalysis/HiggsToGammaGamma/BuildFile.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/HiggsAnalysis/HiggsToGammaGamma/interface/PhotonFix.h b/HiggsAnalysis/HiggsToGammaGamma/interface/PhotonFix.h deleted file mode 100644 index 553ab98ef661c..0000000000000 --- a/HiggsAnalysis/HiggsToGammaGamma/interface/PhotonFix.h +++ /dev/null @@ -1,172 +0,0 @@ -#ifndef PhotonFix_Defined_hh -#define PhotonFix_Defined_hh - -//-------------------------------------------------------// -// Project: PhotonFix -// Author: Paul Dauncey (p.dauncey@imperial.ac.uk) -// Modified: 11/07/2011 -// Admins: Paul Dauncey (p.dauncey@imperial.ac.uk) -// Matt Kenzie (matthew.william.kenzie@cern.ch) -//-------------------------------------------------------// - -/* - Does post-reco fixes to ECAL photon energy and estimates resolution. - This can run outside of the usual CMS software framework but requires - access to a file 'EcalGaps.dat' which must be in the same directory as - that used to run. - - To run within CMSSW use PhotonFixCMS.h (which can access the geometry - directly - go to "RecoEcal/EgammaCoreTools/plugins/PhotonFixCMS.h" - for details. - - Before instantiating any objects of PhotonFix, the constants must be - initialised in the first event using - PhotonFix::initialise("3_8"); - - The string gives the reco version used. Valid strings are - "3_8", "3_11", "4_2" and "Nominal", where the latter gives no correction - to the energy and a nominal resolution value. There is also "4_2e" which - provides corrections for electrons which are reconstructed as photons (to - aid with testing the performance of these corrections in data). - - Make objects using - PhotonFix a(energy,eta,phi,r9); - where energy is the photon energy, eta and phi are the ECAL - cluster positions (NB from the Supercluster object, _not_ the - Photon object, as the latter gives eta and phi directions, - not positions), and r9 is the R9 value of the SC. - - Get the corrected energy using - a.fixedEnergy(); - and the resolution using - a.sigmaEnergy(); - -*/ - -#include -#include - -class PhotonFix { -public: - PhotonFix(double e, double eta, double phi, double r9); - - // Must be called before instantiating any PhotonFix objects - static bool initialise(const std::string &s = "Nominal"); - static bool initialised(); - - // Used by above; do not call directly - static bool initialiseParameters(const std::string &s); - static bool initialiseGeometry(const std::string &s); - - void setup(); - - // Corrected energy and sigma - double fixedEnergy() const; - double sigmaEnergy() const; - - // Input values - double rawEnergy() const; - double eta() const; - double phi() const; - double r9() const; - - // Derived EB crystal, submodule and module relative coordinates - double etaC() const; - double etaS() const; - double etaM() const; - - double phiC() const; - double phiS() const; - double phiM() const; - - // Derived EE zeta, crystal, subcrystal and D-module relative coordinates - double xZ() const; - double xC() const; - double xS() const; - double xM() const; - - double yZ() const; - double yC() const; - double yS() const; - double yM() const; - - // Return arrays containing positions of ecal gaps - static void barrelCGap(unsigned i, unsigned j, unsigned k, double c); - static void barrelSGap(unsigned i, unsigned j, unsigned k, double c); - static void barrelMGap(unsigned i, unsigned j, unsigned k, double c); - static void endcapCrystal(unsigned i, unsigned j, bool c); - static void endcapCGap(unsigned i, unsigned j, unsigned k, double c); - static void endcapSGap(unsigned i, unsigned j, unsigned k, double c); - static void endcapMGap(unsigned i, unsigned j, unsigned k, double c); - - void print() const; - - // Input and output the fit parameters - static void setParameters(unsigned be, unsigned hl, const double *p); - static void getParameters(unsigned be, unsigned hl, double *p); - - static void dumpParameters(std::ostream &o); - static void printParameters(std::ostream &o); - - // Utility functions - static double GetaPhi(double f0, double f1); - static double asinh(double s); - static void dumpGaps(std::ostream &o); - -private: - // Utility functions - static double dPhi(double f0, double f1); - static double aPhi(double f0, double f1); - - static double expCorrection(double a, const double *p); - static double gausCorrection(double a, const double *p); - - // Actual data for each instantiated object - unsigned _be, _hl; - double _e, _eta, _phi, _r9; - double _aC, _aS, _aM, _bC, _bS, _bM; - - // Constants - static const double _onePi; - static const double _twoPi; - - // Initialisation flag - static bool _initialised; - - // Parameters for fixes - static double _meanScale[2][2][4]; - static double _meanAT[2][2][4]; - static double _meanAC[2][2][4]; - static double _meanAS[2][2][4]; - static double _meanAM[2][2][4]; - static double _meanBT[2][2][4]; - static double _meanBC[2][2][4]; - static double _meanBS[2][2][4]; - static double _meanBM[2][2][4]; - static double _meanR9[2][2][4]; - - // Parameters for resolution - static double _sigmaScale[2][2][4]; - static double _sigmaAT[2][2][4]; - static double _sigmaAC[2][2][4]; - static double _sigmaAS[2][2][4]; - static double _sigmaAM[2][2][4]; - static double _sigmaBT[2][2][4]; - static double _sigmaBC[2][2][4]; - static double _sigmaBS[2][2][4]; - static double _sigmaBM[2][2][4]; - static double _sigmaR9[2][2][4]; - - // EB gap positions - static double _barrelCGap[169][360][2]; - static double _barrelSGap[33][180][2]; - static double _barrelMGap[7][18][2]; - - // EE crystal existence and gap positions - static bool _endcapCrystal[100][100]; - static double _endcapCGap[2][7080][2]; - static double _endcapSGap[2][264][2]; - static double _endcapMGap[2][1][2]; -}; - -#endif diff --git a/HiggsAnalysis/HiggsToGammaGamma/interface/PhotonFixCMS.h b/HiggsAnalysis/HiggsToGammaGamma/interface/PhotonFixCMS.h deleted file mode 100644 index 1678534a3a652..0000000000000 --- a/HiggsAnalysis/HiggsToGammaGamma/interface/PhotonFixCMS.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef PhotonFixCMS_Defined_hh -#define PhotonFixCMS_Defined_hh - -//-------------------------------------------------------// -// Project: PhotonFix -// Author: Paul Dauncey (p.dauncey@imperial.ac.uk) -// Modified: 11/07/2011 -// Admins: Paul Dauncey (p.dauncey@imperial.ac.uk) -// Matt Kenzie (matthew.william.kenzie@cern.ch) -//-------------------------------------------------------// - -/* - Does post-reco fixes to ECAL photon energy and estimates resolution. - This can run outside of the usual CMS software framework but requires - access to a file 'PhotonFix.dat' which must be in the same directory as - that used to run. - - To run independently of CMSSW use PhotonFix.h directly - go to - "RecoEcal/EgammaCoreTools/plugins/PhotonFix.h" for details. - - Before instantiating any objects of PhotonFix, the constants must be - initialised in the first event using - PhotonFixCMS::initialise("3_8"); - - The string gives the reco version used. Valid strings are - "3_8", "3_11", "4_2" and "Nominal", where the latter gives no correction - to the energy and a nominal resolution value. There is also "4_2e" which - provides corrections for electrons which are reconstructed as photons (to - aid with testing the performance of these corrections in data). - - - Make objects using - PhotonFixCMS a(p); - where p is a reco::Photon reference - - Get the corrected energy using - a.fixedEnergy(); - and the resolution using - a.sigmaEnergy(); - -*/ - -#include -#include -#include "HiggsAnalysis/HiggsToGammaGamma/interface/PhotonFix.h" -#include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "FWCore/Framework/interface/EventSetup.h" - -class PhotonFixCMS { -public: - PhotonFixCMS(const reco::Photon &p); - - // Must be called before instantiating any PhotonFix objects - static bool initialise(const edm::EventSetup &iSetup, const std::string &s = "Nominal"); - - // Corrected energy and sigma - double fixedEnergy() const; - double sigmaEnergy() const; - - const PhotonFix &photonFix() const; - -private: - PhotonFix pf; -}; -#endif diff --git a/HiggsAnalysis/HiggsToGammaGamma/src/PhotonFix.cc b/HiggsAnalysis/HiggsToGammaGamma/src/PhotonFix.cc deleted file mode 100644 index 8a1a67494db72..0000000000000 --- a/HiggsAnalysis/HiggsToGammaGamma/src/PhotonFix.cc +++ /dev/null @@ -1,2158 +0,0 @@ -#include -#include -#include -#include - -// ensure that this include points to the appropriate location for PhotonFix.h -#include "HiggsAnalysis/HiggsToGammaGamma/interface/PhotonFix.h" - -PhotonFix::PhotonFix(double e, double eta, double phi, double r9) : _e(e), _eta(eta), _phi(phi), _r9(r9) { setup(); } - -void PhotonFix::setup() { - // Check constants have been set up - assert(_initialised); - - // Determine if EB or EE - _be = (fabs(_eta) < 1.48 ? 0 : 1); - - // Determine if high or low R9 - if (_be == 0) - _hl = (_r9 >= 0.94 ? 0 : 1); - else - _hl = (_r9 >= 0.95 ? 0 : 1); - - // Coordinates relative to cracks - double r2Min; - if (_be == 0) { - r2Min = 1.0e6; - for (unsigned i(0); i < 169; i++) { - for (unsigned j(0); j < 360; j++) { - double de(_eta - _barrelCGap[i][j][0]); - double df(dPhi(_phi, _barrelCGap[i][j][1])); - double r2(de * de + df * df); - - if (r2 < r2Min) { - r2Min = r2; - if (i >= 84) { - _aC = de; - _bC = -df; - } else { - _aC = -de; - _bC = df; - } - } - } - } - - r2Min = 1.0e6; - for (unsigned i(0); i < 33; i++) { - for (unsigned j(0); j < 180; j++) { - double de(_eta - _barrelSGap[i][j][0]); - double df(dPhi(_phi, _barrelSGap[i][j][1])); - double r2(de * de + df * df); - - if (r2 < r2Min) { - r2Min = r2; - if (i >= 16) { - _aS = de; - _bS = -df; - } else { - _aS = -de; - _bS = df; - } - } - } - } - - r2Min = 1.0e6; - for (unsigned i(0); i < 7; i++) { - for (unsigned j(0); j < 18; j++) { - double de(_eta - _barrelMGap[i][j][0]); - double df(dPhi(_phi, _barrelMGap[i][j][1])); - double r2(de * de + df * df); - - if (r2 < r2Min) { - r2Min = r2; - if (i >= 3) { - _aM = de; - _bM = -df; - } else { - _aM = -de; - _bM = df; - } - } - } - } - - } else { - unsigned iz(_eta >= 0.0 ? 0 : 1); - double r[2] = {xZ(), yZ()}; - - r2Min = 1.0e6; - for (unsigned i(0); i < 7080; i++) { - double dx(r[0] - _endcapCGap[iz][i][0]); - double dy(r[1] - _endcapCGap[iz][i][1]); - double r2(dx * dx + dy * dy); - - if (r2 < r2Min) { - r2Min = r2; - if (r[0] > 0.0) - _aC = dx; - else - _aC = -dx; - if (r[1] > 0.0) - _bC = dy; - else - _bC = -dy; - } - } - - r2Min = 1.0e6; - for (unsigned i(0); i < 264; i++) { - double dx(r[0] - _endcapSGap[iz][i][0]); - double dy(r[1] - _endcapSGap[iz][i][1]); - double r2(dx * dx + dy * dy); - - if (r2 < r2Min) { - r2Min = r2; - if (r[0] > 0.0) - _aS = dx; - else - _aS = -dx; - if (r[1] > 0.0) - _bS = dy; - else - _bS = -dy; - } - } - - r2Min = 1.0e6; - for (unsigned i(0); i < 1; i++) { - double dx(r[0] - _endcapMGap[iz][i][0]); - double dy(r[1] - _endcapMGap[iz][i][1]); - double r2(dx * dx + dy * dy); - - if (r2 < r2Min) { - r2Min = r2; - if (iz == 0) { - _aM = dx; - _bM = dy; - } else { - _aM = -dx; - _bM = -dy; - } - } - } - } -} - -double PhotonFix::fixedEnergy() const { - double f(0.0); - - // Overall scale and energy(T) dependence - f = _meanScale[_be][_hl][0]; - f += _meanScale[_be][_hl][1] * _e; - f += _meanScale[_be][_hl][2] * _e / cosh(_eta); - f += _meanScale[_be][_hl][3] * cosh(_eta) / _e; - - // General eta or zeta dependence - if (_be == 0) { - f += _meanAT[_be][_hl][0] * _eta * _eta; - f += expCorrection(_eta, _meanBT[_be][_hl]); - } else { - f += _meanAT[_be][_hl][0] * xZ() * xZ(); - f += _meanBT[_be][_hl][0] * yZ() * yZ(); - } - - // Eta or x crystal, submodule and module dependence - f += expCorrection(_aC, _meanAC[_be][_hl]); - f += expCorrection(_aS, _meanAS[_be][_hl]); - f += expCorrection(_aM, _meanAM[_be][_hl]); - - // Phi or y crystal, submodule and module dependence - f += expCorrection(_bC, _meanBC[_be][_hl]); - f += expCorrection(_bS, _meanBS[_be][_hl]); - f += expCorrection(_bM, _meanBM[_be][_hl]); - - // R9 dependence - if (_hl == 0) { - f += _meanR9[_be][_hl][1] * (_r9 - _meanR9[_be][_hl][0]) * (_r9 - _meanR9[_be][_hl][0]) + - _meanR9[_be][_hl][2] * (_r9 - _meanR9[_be][_hl][0]) * (_r9 - _meanR9[_be][_hl][0]) * - (_r9 - _meanR9[_be][_hl][0]); - } else { - f += _meanR9[_be][_hl][0] * _r9 + _meanR9[_be][_hl][1] * _r9 * _r9 + _meanR9[_be][_hl][2] * _r9 * _r9 * _r9; - } - - return _e * f; -} - -double PhotonFix::sigmaEnergy() const { - // Overall resolution scale vs energy - double sigma; - if (_be == 0) { - sigma = _sigmaScale[_be][_hl][0] * _sigmaScale[_be][_hl][0]; - //std::cout << "PhotonFix::sigmaEnergy 1 sigma = " << sigma << std::endl; - sigma += _sigmaScale[_be][_hl][1] * _sigmaScale[_be][_hl][1] * _e; - //std::cout << "PhotonFix::sigmaEnergy 2 sigma = " << sigma << std::endl; - sigma += _sigmaScale[_be][_hl][2] * _sigmaScale[_be][_hl][2] * _e * _e; - //std::cout << "PhotonFix::sigmaEnergy 3 sigma = " << sigma << std::endl; - } else { - sigma = _sigmaScale[_be][_hl][0] * _sigmaScale[_be][_hl][0] * cosh(_eta) * cosh(_eta); - sigma += _sigmaScale[_be][_hl][1] * _sigmaScale[_be][_hl][1] * _e; - sigma += _sigmaScale[_be][_hl][2] * _sigmaScale[_be][_hl][2] * _e * _e; - } - sigma = sqrt(sigma); - - double f(1.0); - - // General eta or zeta dependence - if (_be == 0) { - f += _sigmaAT[_be][_hl][0] * _eta * _eta; - //std::cout << "PhotonFix::sigmaEnergy 4 f = " << f << std::endl; - f += expCorrection(_eta, _sigmaBT[_be][_hl]); - //std::cout << "PhotonFix::sigmaEnergy 5 f = " << f << std::endl; - } else { - f += _sigmaAT[_be][_hl][0] * xZ() * xZ(); - f += _sigmaBT[_be][_hl][0] * yZ() * yZ(); - } - - // Eta or x crystal, submodule and module dependence - f += expCorrection(_aC, _sigmaAC[_be][_hl]); - //std::cout << "PhotonFix::sigmaEnergy 6 f = " << f << std::endl; - f += expCorrection(_aS, _sigmaAS[_be][_hl]); - //std::cout << "PhotonFix::sigmaEnergy 7 f = " << f << std::endl; - f += expCorrection(_aM, _sigmaAM[_be][_hl]); - //std::cout << "PhotonFix::sigmaEnergy 8 f = " << f << std::endl; - - // Phi or y crystal, submodule and module dependence - f += expCorrection(_bC, _sigmaBC[_be][_hl]); - //std::cout << "PhotonFix::sigmaEnergy 9 f = " << f << std::endl; - f += expCorrection(_bS, _sigmaBS[_be][_hl]); - //std::cout << "PhotonFix::sigmaEnergy 10 f = " << f << std::endl; - f += expCorrection(_bM, _sigmaBM[_be][_hl]); - //std::cout << "PhotonFix::sigmaEnergy 11 f = " << f << std::endl; - - // R9 dependence - if (_hl == 0) { - f += _sigmaR9[_be][_hl][1] * (_r9 - _sigmaR9[_be][_hl][0]) * (_r9 - _sigmaR9[_be][_hl][0]) + - _sigmaR9[_be][_hl][2] * (_r9 - _sigmaR9[_be][_hl][0]) * (_r9 - _sigmaR9[_be][_hl][0]) * - (_r9 - _sigmaR9[_be][_hl][0]); - //std::cout << "PhotonFix::sigmaEnergy 12 f = " << f << std::endl; - } else { - f += _sigmaR9[_be][_hl][0] * _r9 + _sigmaR9[_be][_hl][1] * _r9 * _r9; - //std::cout << "PhotonFix::sigmaEnergy 13 f = " << f << std::endl; - } - - return sigma * f; -} - -double PhotonFix::rawEnergy() const { return _e; } - -double PhotonFix::eta() const { return _eta; } - -double PhotonFix::phi() const { return _phi; } - -double PhotonFix::r9() const { return _r9; } - -double PhotonFix::etaC() const { - assert(_be == 0); - return _aC; -} - -double PhotonFix::etaS() const { - assert(_be == 0); - return _aS; -} - -double PhotonFix::etaM() const { - assert(_be == 0); - return _aM; -} - -double PhotonFix::phiC() const { - assert(_be == 0); - return _bC; -} - -double PhotonFix::phiS() const { - assert(_be == 0); - return _bS; -} - -double PhotonFix::phiM() const { - assert(_be == 0); - return _bM; -} - -double PhotonFix::xZ() const { - assert(_be == 1); - return asinh(cos(_phi) / sinh(_eta)); -} - -double PhotonFix::xC() const { - assert(_be == 1); - return _aC; -} - -double PhotonFix::xS() const { - assert(_be == 1); - return _aS; -} - -double PhotonFix::xM() const { - assert(_be == 1); - return _aM; -} - -double PhotonFix::yZ() const { - assert(_be == 1); - return asinh(sin(_phi) / sinh(_eta)); -} - -double PhotonFix::yC() const { - assert(_be == 1); - return _bC; -} - -double PhotonFix::yS() const { - assert(_be == 1); - return _bS; -} - -double PhotonFix::yM() const { - assert(_be == 1); - return _bM; -} - -double PhotonFix::GetaPhi(double f0, double f1) { return aPhi(f0, f1); } - -void PhotonFix::barrelCGap(unsigned i, unsigned j, unsigned k, double c) { _barrelCGap[i][j][k] = c; } -void PhotonFix::barrelSGap(unsigned i, unsigned j, unsigned k, double c) { _barrelSGap[i][j][k] = c; } -void PhotonFix::barrelMGap(unsigned i, unsigned j, unsigned k, double c) { _barrelMGap[i][j][k] = c; } -void PhotonFix::endcapCrystal(unsigned i, unsigned j, bool c) { _endcapCrystal[i][j] = c; } -void PhotonFix::endcapCGap(unsigned i, unsigned j, unsigned k, double c) { _endcapCGap[i][j][k] = c; } -void PhotonFix::endcapSGap(unsigned i, unsigned j, unsigned k, double c) { _endcapSGap[i][j][k] = c; } -void PhotonFix::endcapMGap(unsigned i, unsigned j, unsigned k, double c) { _endcapMGap[i][j][k] = c; } - -void PhotonFix::print() const { - std::cout << "PhotonFix: e,eta,phi,r9 = " << _e << ", " << _eta << ", " << _phi << ", " << _r9 << ", gaps " << _aC - << ", " << _aS << ", " << _aM << ", " << _bC << ", " << _bS << ", " << _bM << std::endl; -} - -void PhotonFix::setParameters(unsigned be, unsigned hl, const double *p) { - for (unsigned i(0); i < 4; i++) { - _meanScale[be][hl][i] = p[i + 0 * 4]; - _meanAT[be][hl][i] = p[i + 1 * 4]; - _meanAC[be][hl][i] = p[i + 2 * 4]; - _meanAS[be][hl][i] = p[i + 3 * 4]; - _meanAM[be][hl][i] = p[i + 4 * 4]; - _meanBT[be][hl][i] = p[i + 5 * 4]; - _meanBC[be][hl][i] = p[i + 6 * 4]; - _meanBS[be][hl][i] = p[i + 7 * 4]; - _meanBM[be][hl][i] = p[i + 8 * 4]; - _meanR9[be][hl][i] = p[i + 9 * 4]; - - _sigmaScale[be][hl][i] = p[i + 10 * 4]; - _sigmaAT[be][hl][i] = p[i + 11 * 4]; - _sigmaAC[be][hl][i] = p[i + 12 * 4]; - _sigmaAS[be][hl][i] = p[i + 13 * 4]; - _sigmaAM[be][hl][i] = p[i + 14 * 4]; - _sigmaBT[be][hl][i] = p[i + 15 * 4]; - _sigmaBC[be][hl][i] = p[i + 16 * 4]; - _sigmaBS[be][hl][i] = p[i + 17 * 4]; - _sigmaBM[be][hl][i] = p[i + 18 * 4]; - _sigmaR9[be][hl][i] = p[i + 19 * 4]; - } -} - -void PhotonFix::getParameters(unsigned be, unsigned hl, double *p) { - for (unsigned i(0); i < 4; i++) { - p[i + 0 * 4] = _meanScale[be][hl][i]; - p[i + 1 * 4] = _meanAT[be][hl][i]; - p[i + 2 * 4] = _meanAC[be][hl][i]; - p[i + 3 * 4] = _meanAS[be][hl][i]; - p[i + 4 * 4] = _meanAM[be][hl][i]; - p[i + 5 * 4] = _meanBT[be][hl][i]; - p[i + 6 * 4] = _meanBC[be][hl][i]; - p[i + 7 * 4] = _meanBS[be][hl][i]; - p[i + 8 * 4] = _meanBM[be][hl][i]; - p[i + 9 * 4] = _meanR9[be][hl][i]; - - p[i + 10 * 4] = _sigmaScale[be][hl][i]; - p[i + 11 * 4] = _sigmaAT[be][hl][i]; - p[i + 12 * 4] = _sigmaAC[be][hl][i]; - p[i + 13 * 4] = _sigmaAS[be][hl][i]; - p[i + 14 * 4] = _sigmaAM[be][hl][i]; - p[i + 15 * 4] = _sigmaBT[be][hl][i]; - p[i + 16 * 4] = _sigmaBC[be][hl][i]; - p[i + 17 * 4] = _sigmaBS[be][hl][i]; - p[i + 18 * 4] = _sigmaBM[be][hl][i]; - p[i + 19 * 4] = _sigmaR9[be][hl][i]; - } -} - -void PhotonFix::dumpParameters(std::ostream &o) { - for (unsigned be(0); be < 2; be++) { - for (unsigned hl(0); hl < 2; hl++) { - for (unsigned i(0); i < 4; i++) { - o << " _meanScale[" << be << "][" << hl << "][" << i << "]=" << _meanScale[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _meanAT[" << be << "][" << hl << "][" << i << "]=" << _meanAT[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _meanAC[" << be << "][" << hl << "][" << i << "]=" << _meanAC[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _meanAS[" << be << "][" << hl << "][" << i << "]=" << _meanAS[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _meanAM[" << be << "][" << hl << "][" << i << "]=" << _meanAM[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _meanBT[" << be << "][" << hl << "][" << i << "]=" << _meanBT[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _meanBC[" << be << "][" << hl << "][" << i << "]=" << _meanBC[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _meanBS[" << be << "][" << hl << "][" << i << "]=" << _meanBS[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _meanBM[" << be << "][" << hl << "][" << i << "]=" << _meanBM[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _meanR9[" << be << "][" << hl << "][" << i << "]=" << _meanR9[be][hl][i] << ";" << std::endl; - } - o << std::endl; - - for (unsigned i(0); i < 4; i++) { - o << " _sigmaScale[" << be << "][" << hl << "][" << i << "]=" << _sigmaScale[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _sigmaAT[" << be << "][" << hl << "][" << i << "]=" << _sigmaAT[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _sigmaAC[" << be << "][" << hl << "][" << i << "]=" << _sigmaAC[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _sigmaAS[" << be << "][" << hl << "][" << i << "]=" << _sigmaAS[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _sigmaAM[" << be << "][" << hl << "][" << i << "]=" << _sigmaAM[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _sigmaBT[" << be << "][" << hl << "][" << i << "]=" << _sigmaBT[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _sigmaBC[" << be << "][" << hl << "][" << i << "]=" << _sigmaBC[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _sigmaBS[" << be << "][" << hl << "][" << i << "]=" << _sigmaBS[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _sigmaBM[" << be << "][" << hl << "][" << i << "]=" << _sigmaBM[be][hl][i] << ";" << std::endl; - } - for (unsigned i(0); i < 4; i++) { - o << " _sigmaR9[" << be << "][" << hl << "][" << i << "]=" << _sigmaR9[be][hl][i] << ";" << std::endl; - } - o << std::endl; - } - } -} - -void PhotonFix::printParameters(std::ostream &o) { - o << "PhotonFix::printParameters()" << std::endl; - - for (unsigned be(0); be < 2; be++) { - for (unsigned hl(0); hl < 2; hl++) { - o << " Parameters for " << (be == 0 ? "barrel" : "endcap") << ", " << (hl == 0 ? "high" : "low") << " R9" - << std::endl; - - o << " Mean scaling "; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _meanScale[be][hl][i]; - o << std::endl; - o << " Mean " << (be == 0 ? "Eta " : "ZetaX") << " total "; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _meanAT[be][hl][i]; - o << std::endl; - o << " Mean " << (be == 0 ? "Eta " : "ZetaX") << " crystal "; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _meanAC[be][hl][i]; - o << std::endl; - o << " Mean " << (be == 0 ? "Eta " : "ZetaX") << " submodule"; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _meanAS[be][hl][i]; - o << std::endl; - o << " Mean " << (be == 0 ? "Eta " : "ZetaX") << " module "; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _meanAM[be][hl][i]; - o << std::endl; - o << " Mean " << (be == 0 ? "Eta zero " : "ZetaY total "); - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _meanBT[be][hl][i]; - o << std::endl; - o << " Mean " << (be == 0 ? "Phi " : "ZetaY") << " crystal "; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _meanBC[be][hl][i]; - o << std::endl; - o << " Mean " << (be == 0 ? "Phi " : "ZetaY") << " submodule"; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _meanBS[be][hl][i]; - o << std::endl; - o << " Mean " << (be == 0 ? "Phi " : "ZetaY") << " module "; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _meanBM[be][hl][i]; - o << std::endl; - o << " Mean R9 "; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _meanR9[be][hl][i]; - o << std::endl; - - o << " Sigma scaling "; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _sigmaScale[be][hl][i]; - o << std::endl; - o << " Sigma " << (be == 0 ? "Eta " : "ZetaX") << " total "; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _sigmaAT[be][hl][i]; - o << std::endl; - o << " Sigma " << (be == 0 ? "Eta " : "ZetaX") << " crystal "; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _sigmaAC[be][hl][i]; - o << std::endl; - o << " Sigma " << (be == 0 ? "Eta " : "ZetaX") << " submodule"; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _sigmaAS[be][hl][i]; - o << std::endl; - o << " Sigma " << (be == 0 ? "Eta " : "ZetaX") << " module "; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _sigmaAM[be][hl][i]; - o << std::endl; - o << " Sigma " << (be == 0 ? "Eta " : "ZetaY") << " total "; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _sigmaBT[be][hl][i]; - o << std::endl; - o << " Sigma " << (be == 0 ? "Eta " : "ZetaY") << " crystal "; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _sigmaBC[be][hl][i]; - o << std::endl; - o << " Sigma " << (be == 0 ? "Phi " : "ZetaY") << " submodule"; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _sigmaBS[be][hl][i]; - o << std::endl; - o << " Sigma " << (be == 0 ? "Phi " : "ZetaY") << " module "; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _sigmaBM[be][hl][i]; - o << std::endl; - o << " Sigma R9 "; - for (unsigned i(0); i < 4; i++) - o << std::setw(14) << _sigmaR9[be][hl][i]; - o << std::endl; - } - } -} - -double PhotonFix::asinh(double s) { - if (s >= 0.0) - return log(sqrt(s * s + 1.0) + s); - else - return -log(sqrt(s * s + 1.0) - s); -} - -void PhotonFix::dumpGaps(std::ostream &o) { - o << std::setprecision(15); - - for (unsigned i(0); i < 169; i++) { - for (unsigned j(0); j < 360; j++) { - for (unsigned k(0); k < 2; k++) { - o << _barrelCGap[i][j][k] << std::endl; - } - } - } - - for (unsigned i(0); i < 33; i++) { - for (unsigned j(0); j < 180; j++) { - for (unsigned k(0); k < 2; k++) { - o << _barrelSGap[i][j][k] << std::endl; - } - } - } - - for (unsigned i(0); i < 7; i++) { - for (unsigned j(0); j < 18; j++) { - for (unsigned k(0); k < 2; k++) { - o << _barrelMGap[i][j][k] << std::endl; - } - } - } - - for (unsigned i(0); i < 100; i++) { - for (unsigned j(0); j < 100; j++) { - if (_endcapCrystal[i][j]) - o << 0 << std::endl; - else - o << 1 << std::endl; - } - } - - for (unsigned i(0); i < 2; i++) { - for (unsigned j(0); j < 7080; j++) { - for (unsigned k(0); k < 2; k++) { - o << _endcapCGap[i][j][k] << std::endl; - } - } - } - - for (unsigned i(0); i < 2; i++) { - for (unsigned j(0); j < 264; j++) { - for (unsigned k(0); k < 2; k++) { - o << _endcapSGap[i][j][k] << std::endl; - } - } - } - - for (unsigned i(0); i < 2; i++) { - for (unsigned j(0); j < 1; j++) { - for (unsigned k(0); k < 2; k++) { - o << _endcapMGap[i][j][k] << std::endl; - } - } - } -} - -double PhotonFix::dPhi(double f0, double f1) { - double df(f0 - f1); - if (df > _onePi) - df -= _twoPi; - if (df < -_onePi) - df += _twoPi; - return df; -} - -double PhotonFix::aPhi(double f0, double f1) { - double af(0.5 * (f0 + f1)); - if (fabs(dPhi(af, f0)) > 0.5 * _onePi) { - if (af >= 0.0) - af -= _onePi; - else - af += _onePi; - } - - assert(fabs(dPhi(af, f0)) < 0.5 * _onePi); - assert(fabs(dPhi(af, f1)) < 0.5 * _onePi); - - return af; -} - -double PhotonFix::expCorrection(double a, const double *p) { - if (p[1] == 0.0 || p[2] == 0.0 || p[3] == 0.0) - return 0.0; - - double b(a - p[0]); - if (b >= 0.0) - return p[1] * exp(-fabs(p[2]) * b); - else - return p[1] * exp(fabs(p[3]) * b); -} - -double PhotonFix::gausCorrection(double a, const double *p) { - if (p[1] == 0.0 || p[2] == 0.0 || p[3] == 0.0) - return 0.0; - - double b(a - p[0]); - if (b >= 0.0) - return p[1] * exp(-0.5 * p[2] * p[2] * b * b); - else - return p[1] * exp(-0.5 * p[3] * p[3] * b * b); -} -bool PhotonFix::initialised() { return _initialised; } -bool PhotonFix::initialise(const std::string &s) { - if (_initialised) - return false; - - initialiseParameters(s); - initialiseGeometry(s); - return true; -} - -bool PhotonFix::initialiseParameters(const std::string &s) { - _initialised = false; - - if (s == "Nominal") { - for (unsigned be(0); be < 2; be++) { - for (unsigned hl(0); hl < 2; hl++) { - for (unsigned i(0); i < 4; i++) { - _meanScale[be][hl][i] = 0; - _meanAT[be][hl][i] = 0; - _meanAC[be][hl][i] = 0; - _meanAS[be][hl][i] = 0; - _meanAM[be][hl][i] = 0; - _meanBT[be][hl][i] = 0; - _meanBC[be][hl][i] = 0; - _meanBS[be][hl][i] = 0; - _meanBM[be][hl][i] = 0; - _meanR9[be][hl][i] = 0; - - _sigmaScale[be][hl][i] = 0; - _sigmaAT[be][hl][i] = 0; - _sigmaAC[be][hl][i] = 0; - _sigmaAS[be][hl][i] = 0; - _sigmaAM[be][hl][i] = 0; - _sigmaBT[be][hl][i] = 0; - _sigmaBC[be][hl][i] = 0; - _sigmaBS[be][hl][i] = 0; - _sigmaBM[be][hl][i] = 0; - _sigmaR9[be][hl][i] = 0; - } - - _meanScale[be][hl][0] = 1.0; - if (be == 0) { - _sigmaScale[be][hl][0] = 0.2; - _sigmaScale[be][hl][1] = 0.03; - _sigmaScale[be][hl][2] = 0.006; - } else { - _sigmaScale[be][hl][0] = 0.25; - _sigmaScale[be][hl][1] = 0.05; - _sigmaScale[be][hl][2] = 0.010; - } - } - } - - _initialised = true; - } - - if (s == "3_8") { - _meanScale[0][0][0] = 0.994724; - _meanScale[0][0][1] = 1.98102e-06; - _meanScale[0][0][2] = 1.43015e-05; - _meanScale[0][0][3] = -0.0908525; - _meanAT[0][0][0] = 0.0; - _meanAT[0][0][1] = 0.0; - _meanAT[0][0][2] = 0.0; - _meanAT[0][0][3] = 0.0; - _meanAC[0][0][0] = -0.00352041; - _meanAC[0][0][1] = 0.00982015; - _meanAC[0][0][2] = 434.32; - _meanAC[0][0][3] = 529.508; - _meanAS[0][0][0] = -1.1; - _meanAS[0][0][1] = 0.00135995; - _meanAS[0][0][2] = 295.712; - _meanAS[0][0][3] = 5.13202e+07; - _meanAM[0][0][0] = -0.00140562; - _meanAM[0][0][1] = 0.156322; - _meanAM[0][0][2] = 263.097; - _meanAM[0][0][3] = 222.294; - _meanBT[0][0][0] = 0.0; - _meanBT[0][0][1] = 0.0; - _meanBT[0][0][2] = 0.0; - _meanBT[0][0][3] = 0.0; - _meanBC[0][0][0] = -0.00294295; - _meanBC[0][0][1] = 0.011533; - _meanBC[0][0][2] = 562.905; - _meanBC[0][0][3] = 421.097; - _meanBS[0][0][0] = -0.00204373; - _meanBS[0][0][1] = 0.00347592; - _meanBS[0][0][2] = 36.5614; - _meanBS[0][0][3] = 1265.25; - _meanBM[0][0][0] = -0.00275381; - _meanBM[0][0][1] = 0.0812447; - _meanBM[0][0][2] = 216.885; - _meanBM[0][0][3] = 264.754; - _meanR9[0][0][0] = 0.952584; - _meanR9[0][0][1] = 22.7119; - _meanR9[0][0][2] = 402.816; - _meanR9[0][0][3] = 0; - - _sigmaScale[0][0][0] = 0.167184; - _sigmaScale[0][0][1] = 6.14323e-11; - _sigmaScale[0][0][2] = 0.00769693; - _sigmaScale[0][0][3] = 0; - _sigmaAT[0][0][0] = 0.228255; - _sigmaAT[0][0][1] = 0; - _sigmaAT[0][0][2] = 0; - _sigmaAT[0][0][3] = 0; - _sigmaAC[0][0][0] = -0.00411906; - _sigmaAC[0][0][1] = 0.077799; - _sigmaAC[0][0][2] = 23.1033; - _sigmaAC[0][0][3] = -3e+17; - _sigmaAS[0][0][0] = 0; - _sigmaAS[0][0][1] = 0; - _sigmaAS[0][0][2] = 0; - _sigmaAS[0][0][3] = 0; - _sigmaAM[0][0][0] = -0.000130695; - _sigmaAM[0][0][1] = 11.2121; - _sigmaAM[0][0][2] = 468.535; - _sigmaAM[0][0][3] = 407.652; - _sigmaBT[0][0][0] = 1.33384e-05; - _sigmaBT[0][0][1] = 8.77098; - _sigmaBT[0][0][2] = 324.048; - _sigmaBT[0][0][3] = 239.868; - _sigmaBC[0][0][0] = -0.00281964; - _sigmaBC[0][0][1] = 0.125811; - _sigmaBC[0][0][2] = 538.949; - _sigmaBC[0][0][3] = 1358.76; - _sigmaBS[0][0][0] = 0; - _sigmaBS[0][0][1] = 0; - _sigmaBS[0][0][2] = 0; - _sigmaBS[0][0][3] = 0; - _sigmaBM[0][0][0] = -0.00293676; - _sigmaBM[0][0][1] = 8.88276; - _sigmaBM[0][0][2] = 350.032; - _sigmaBM[0][0][3] = 580.354; - _sigmaR9[0][0][0] = 0.955876; - _sigmaR9[0][0][1] = 2254.5; - _sigmaR9[0][0][2] = 14627; - _sigmaR9[0][0][3] = 0; - - _meanScale[0][1][0] = 0.888348; - _meanScale[0][1][1] = 1.20452e-05; - _meanScale[0][1][2] = -1.04458e-05; - _meanScale[0][1][3] = -0.542383; - _meanAT[0][1][0] = 0.0; - _meanAT[0][1][1] = 0.0; - _meanAT[0][1][2] = 0.0; - _meanAT[0][1][3] = 0.0; - _meanAC[0][1][0] = -0.00320856; - _meanAC[0][1][1] = 0.0240109; - _meanAC[0][1][2] = 115.145; - _meanAC[0][1][3] = 205.859; - _meanAS[0][1][0] = 0.0349736; - _meanAS[0][1][1] = -0.00232864; - _meanAS[0][1][2] = 318.584; - _meanAS[0][1][3] = 1.4e+09; - _meanAM[0][1][0] = -0.00104798; - _meanAM[0][1][1] = 0.208249; - _meanAM[0][1][2] = 297.049; - _meanAM[0][1][3] = 220.609; - _meanBT[0][1][0] = 0.0; - _meanBT[0][1][1] = 0.0; - _meanBT[0][1][2] = 0.0; - _meanBT[0][1][3] = 0.0; - _meanBC[0][1][0] = -0.00420429; - _meanBC[0][1][1] = 0.00203991; - _meanBC[0][1][2] = 172.278; - _meanBC[0][1][3] = 410.677; - _meanBS[0][1][0] = -0.0430854; - _meanBS[0][1][1] = 0.0961883; - _meanBS[0][1][2] = 0.196958; - _meanBS[0][1][3] = 11442.2; - _meanBM[0][1][0] = -0.00389457; - _meanBM[0][1][1] = 0.0449086; - _meanBM[0][1][2] = 78.9252; - _meanBM[0][1][3] = 103.237; - _meanR9[0][1][0] = 0.0182102; - _meanR9[0][1][1] = -0.03752; - _meanR9[0][1][2] = 0.0198881; - _meanR9[0][1][3] = 0; - - _sigmaScale[0][1][0] = 0.386681; - _sigmaScale[0][1][1] = 0.0913412; - _sigmaScale[0][1][2] = 0.00119232; - _sigmaScale[0][1][3] = 0; - _sigmaAT[0][1][0] = 1.36562; - _sigmaAT[0][1][1] = 0; - _sigmaAT[0][1][2] = 0; - _sigmaAT[0][1][3] = 0; - _sigmaAC[0][1][0] = -0.00504613; - _sigmaAC[0][1][1] = -1.09115; - _sigmaAC[0][1][2] = 8.57406; - _sigmaAC[0][1][3] = 57.1351; - _sigmaAS[0][1][0] = 0; - _sigmaAS[0][1][1] = 0; - _sigmaAS[0][1][2] = 0; - _sigmaAS[0][1][3] = 0; - _sigmaAM[0][1][0] = -0.00014319; - _sigmaAM[0][1][1] = 5.39527; - _sigmaAM[0][1][2] = 432.566; - _sigmaAM[0][1][3] = 265.165; - _sigmaBT[0][1][0] = -0.040161; - _sigmaBT[0][1][1] = 2.65711; - _sigmaBT[0][1][2] = -0.398357; - _sigmaBT[0][1][3] = -0.440649; - _sigmaBC[0][1][0] = 0.00580015; - _sigmaBC[0][1][1] = -0.631833; - _sigmaBC[0][1][2] = 18594.3; - _sigmaBC[0][1][3] = 4.00955e+08; - _sigmaBS[0][1][0] = 0; - _sigmaBS[0][1][1] = 0; - _sigmaBS[0][1][2] = 0; - _sigmaBS[0][1][3] = 0; - _sigmaBM[0][1][0] = -0.00376665; - _sigmaBM[0][1][1] = 3.74316; - _sigmaBM[0][1][2] = 102.72; - _sigmaBM[0][1][3] = 157.396; - _sigmaR9[0][1][0] = -3.12696; - _sigmaR9[0][1][1] = 1.75114; - _sigmaR9[0][1][2] = 0; - _sigmaR9[0][1][3] = 0; - - _meanScale[1][0][0] = 0.999461; - _meanScale[1][0][1] = 4.37414e-06; - _meanScale[1][0][2] = 4.92078e-06; - _meanScale[1][0][3] = -0.121609; - _meanAT[1][0][0] = 0.0; - _meanAT[1][0][1] = 0.0; - _meanAT[1][0][2] = 0.0; - _meanAT[1][0][3] = 0.0; - _meanAC[1][0][0] = -0.000396058; - _meanAC[1][0][1] = 0.0144837; - _meanAC[1][0][2] = 1374.93; - _meanAC[1][0][3] = 945.634; - _meanAS[1][0][0] = -0.000871036; - _meanAS[1][0][1] = 0.0442747; - _meanAS[1][0][2] = 645.709; - _meanAS[1][0][3] = 962.845; - _meanAM[1][0][0] = 0.000434298; - _meanAM[1][0][1] = 0.0658628; - _meanAM[1][0][2] = 1928.49; - _meanAM[1][0][3] = 728.522; - _meanBT[1][0][0] = 0.0; - _meanBT[1][0][1] = 0.0; - _meanBT[1][0][2] = 0.0; - _meanBT[1][0][3] = 0.0; - _meanBC[1][0][0] = -0.000452212; - _meanBC[1][0][1] = 0.0129968; - _meanBC[1][0][2] = 1056.08; - _meanBC[1][0][3] = 759.102; - _meanBS[1][0][0] = -0.000786157; - _meanBS[1][0][1] = 0.0346555; - _meanBS[1][0][2] = 592.239; - _meanBS[1][0][3] = 854.285; - _meanBM[1][0][0] = -0.0665038; - _meanBM[1][0][1] = -0.00211713; - _meanBM[1][0][2] = 4.84395; - _meanBM[1][0][3] = 11.6644; - _meanR9[1][0][0] = 0.971355; - _meanR9[1][0][1] = 47.2751; - _meanR9[1][0][2] = 536.907; - _meanR9[1][0][3] = 0; - - _sigmaScale[1][0][0] = 0.254641; - _sigmaScale[1][0][1] = 0.00264818; - _sigmaScale[1][0][2] = 0.0114953; - _sigmaScale[1][0][3] = 0; - _sigmaAT[1][0][0] = 0.935839; - _sigmaAT[1][0][1] = 0; - _sigmaAT[1][0][2] = 0; - _sigmaAT[1][0][3] = 0; - _sigmaAC[1][0][0] = -0.00476475; - _sigmaAC[1][0][1] = 2.14548; - _sigmaAC[1][0][2] = 29937; - _sigmaAC[1][0][3] = 2.6e+11; - _sigmaAS[1][0][0] = -8.17285e-05; - _sigmaAS[1][0][1] = 1.5821; - _sigmaAS[1][0][2] = 1928.83; - _sigmaAS[1][0][3] = 902.519; - _sigmaAM[1][0][0] = 0.0278577; - _sigmaAM[1][0][1] = 0.58439; - _sigmaAM[1][0][2] = 43.3575; - _sigmaAM[1][0][3] = 19.7836; - _sigmaBT[1][0][0] = -0.456051; - _sigmaBT[1][0][1] = 0; - _sigmaBT[1][0][2] = 0; - _sigmaBT[1][0][3] = 0; - _sigmaBC[1][0][0] = -0.00264527; - _sigmaBC[1][0][1] = 0.696043; - _sigmaBC[1][0][2] = 7.49509e+12; - _sigmaBC[1][0][3] = 96843; - _sigmaBS[1][0][0] = 0.000258933; - _sigmaBS[1][0][1] = 1.28387; - _sigmaBS[1][0][2] = 1668.71; - _sigmaBS[1][0][3] = 730.716; - _sigmaBM[1][0][0] = 0.00121506; - _sigmaBM[1][0][1] = 0.938541; - _sigmaBM[1][0][2] = 9003.57; - _sigmaBM[1][0][3] = 288.897; - _sigmaR9[1][0][0] = 1.01207; - _sigmaR9[1][0][1] = -816.244; - _sigmaR9[1][0][2] = -16283.8; - _sigmaR9[1][0][3] = 0; - - _meanScale[1][1][0] = 0.324634; - _meanScale[1][1][1] = 9.48206e-05; - _meanScale[1][1][2] = 1.0e-12; - _meanScale[1][1][3] = 1.0e-12; - _meanAT[1][1][0] = 0.0; - _meanAT[1][1][1] = 0.0; - _meanAT[1][1][2] = 0.0; - _meanAT[1][1][3] = 0.0; - _meanAC[1][1][0] = -0.00158311; - _meanAC[1][1][1] = 0.0106161; - _meanAC[1][1][2] = 338.964; - _meanAC[1][1][3] = 797.172; - _meanAS[1][1][0] = -0.00960269; - _meanAS[1][1][1] = -0.00496491; - _meanAS[1][1][2] = 934.472; - _meanAS[1][1][3] = 8.32667e-16; - _meanAM[1][1][0] = -0.00219814; - _meanAM[1][1][1] = 0.653906; - _meanAM[1][1][2] = 0.0949848; - _meanAM[1][1][3] = 0.0977831; - _meanBT[1][1][0] = 0.0; - _meanBT[1][1][1] = 0.0; - _meanBT[1][1][2] = 0.0; - _meanBT[1][1][3] = 0.0; - _meanBC[1][1][0] = -0.00423472; - _meanBC[1][1][1] = 0.0279695; - _meanBC[1][1][2] = 28073.7; - _meanBC[1][1][3] = 118612; - _meanBS[1][1][0] = -0.0012476; - _meanBS[1][1][1] = 0.02744; - _meanBS[1][1][2] = 390.697; - _meanBS[1][1][3] = 727.861; - _meanBM[1][1][0] = -1.36573e-05; - _meanBM[1][1][1] = 0.0667504; - _meanBM[1][1][2] = -80154.4; - _meanBM[1][1][3] = 576.637; - _meanR9[1][1][0] = 0.113317; - _meanR9[1][1][1] = 0.0142669; - _meanR9[1][1][2] = -0.125721; - _meanR9[1][1][3] = 0; - - _sigmaScale[1][1][0] = 0.471767; - _sigmaScale[1][1][1] = 0.211196; - _sigmaScale[1][1][2] = 0.0240124; - _sigmaScale[1][1][3] = 0; - _sigmaAT[1][1][0] = 0.404395; - _sigmaAT[1][1][1] = 0; - _sigmaAT[1][1][2] = 0; - _sigmaAT[1][1][3] = 0; - _sigmaAC[1][1][0] = 0.00173151; - _sigmaAC[1][1][1] = -0.479291; - _sigmaAC[1][1][2] = 11583.5; - _sigmaAC[1][1][3] = -7e+09; - _sigmaAS[1][1][0] = 0.000450387; - _sigmaAS[1][1][1] = 0.662978; - _sigmaAS[1][1][2] = 924.051; - _sigmaAS[1][1][3] = 448.417; - _sigmaAM[1][1][0] = 0.00335603; - _sigmaAM[1][1][1] = 0.648407; - _sigmaAM[1][1][2] = 134.672; - _sigmaAM[1][1][3] = 27.4139; - _sigmaBT[1][1][0] = 0.602402; - _sigmaBT[1][1][1] = 0; - _sigmaBT[1][1][2] = 0; - _sigmaBT[1][1][3] = 0; - _sigmaBC[1][1][0] = -0.00256192; - _sigmaBC[1][1][1] = 2.01276; - _sigmaBC[1][1][2] = 114558; - _sigmaBC[1][1][3] = 2.15421e+06; - _sigmaBS[1][1][0] = 0.00151576; - _sigmaBS[1][1][1] = 0.359084; - _sigmaBS[1][1][2] = 329.414; - _sigmaBS[1][1][3] = 154.509; - _sigmaBM[1][1][0] = -0.0452587; - _sigmaBM[1][1][1] = 1.26253; - _sigmaBM[1][1][2] = 1.9e+09; - _sigmaBM[1][1][3] = 1058.76; - _sigmaR9[1][1][0] = 4.59667; - _sigmaR9[1][1][1] = -5.14404; - _sigmaR9[1][1][2] = 0; - _sigmaR9[1][1][3] = 0; - - _initialised = true; - } - - if (s == "3_11") { - _meanScale[0][0][0] = 0.994363; - _meanScale[0][0][1] = 4.84904e-07; - _meanScale[0][0][2] = 1.54475e-05; - _meanScale[0][0][3] = -0.103309; - _meanAT[0][0][0] = 0.0; - _meanAT[0][0][1] = 0.0; - _meanAT[0][0][2] = 0.0; - _meanAT[0][0][3] = 0.0; - _meanAC[0][0][0] = -0.00360057; - _meanAC[0][0][1] = 0.00970858; - _meanAC[0][0][2] = 409.406; - _meanAC[0][0][3] = 527.952; - _meanAS[0][0][0] = -1.1; - _meanAS[0][0][1] = 0.00135995; - _meanAS[0][0][2] = 295.712; - _meanAS[0][0][3] = 5.13202e+07; - _meanAM[0][0][0] = -0.00129854; - _meanAM[0][0][1] = 0.151466; - _meanAM[0][0][2] = 261.828; - _meanAM[0][0][3] = 214.662; - _meanBT[0][0][0] = 0.0; - _meanBT[0][0][1] = 0.0; - _meanBT[0][0][2] = 0.0; - _meanBT[0][0][3] = 0.0; - _meanBC[0][0][0] = -0.00286864; - _meanBC[0][0][1] = 0.0114118; - _meanBC[0][0][2] = 563.962; - _meanBC[0][0][3] = 412.922; - _meanBS[0][0][0] = -0.00210996; - _meanBS[0][0][1] = 0.00327867; - _meanBS[0][0][2] = 23.617; - _meanBS[0][0][3] = 1018.45; - _meanBM[0][0][0] = -0.002287; - _meanBM[0][0][1] = 0.0848984; - _meanBM[0][0][2] = 235.575; - _meanBM[0][0][3] = 260.773; - _meanR9[0][0][0] = 0.951724; - _meanR9[0][0][1] = 23.7181; - _meanR9[0][0][2] = 177.34; - _meanR9[0][0][3] = 0; - - _sigmaScale[0][0][0] = 0.187578; - _sigmaScale[0][0][1] = -0.000901045; - _sigmaScale[0][0][2] = 0.00673186; - _sigmaScale[0][0][3] = 0; - _sigmaAT[0][0][0] = 0.183777; - _sigmaAT[0][0][1] = 0; - _sigmaAT[0][0][2] = 0; - _sigmaAT[0][0][3] = 0; - _sigmaAC[0][0][0] = -0.00430202; - _sigmaAC[0][0][1] = 0.122501; - _sigmaAC[0][0][2] = 51.9772; - _sigmaAC[0][0][3] = -3e+17; - _sigmaAS[0][0][0] = 0; - _sigmaAS[0][0][1] = 0; - _sigmaAS[0][0][2] = 0; - _sigmaAS[0][0][3] = 0; - _sigmaAM[0][0][0] = 0.00101883; - _sigmaAM[0][0][1] = 11.2009; - _sigmaAM[0][0][2] = 593.111; - _sigmaAM[0][0][3] = 345.433; - _sigmaBT[0][0][0] = -6.02356e-05; - _sigmaBT[0][0][1] = 6.99896; - _sigmaBT[0][0][2] = 235.996; - _sigmaBT[0][0][3] = 196; - _sigmaBC[0][0][0] = -0.00282254; - _sigmaBC[0][0][1] = 0.18764; - _sigmaBC[0][0][2] = 509.825; - _sigmaBC[0][0][3] = 1400.14; - _sigmaBS[0][0][0] = 0; - _sigmaBS[0][0][1] = 0; - _sigmaBS[0][0][2] = 0; - _sigmaBS[0][0][3] = 0; - _sigmaBM[0][0][0] = -0.00252199; - _sigmaBM[0][0][1] = 39.1544; - _sigmaBM[0][0][2] = 612.481; - _sigmaBM[0][0][3] = 905.994; - _sigmaR9[0][0][0] = 0.95608; - _sigmaR9[0][0][1] = 2203.31; - _sigmaR9[0][0][2] = -22454.2; - _sigmaR9[0][0][3] = 0; - - _meanScale[0][1][0] = 0.889415; - _meanScale[0][1][1] = 1.21788e-05; - _meanScale[0][1][2] = -4.3438e-06; - _meanScale[0][1][3] = -0.629968; - _meanAT[0][1][0] = 0.0; - _meanAT[0][1][1] = 0.0; - _meanAT[0][1][2] = 0.0; - _meanAT[0][1][3] = 0.0; - _meanAC[0][1][0] = -0.00313701; - _meanAC[0][1][1] = 0.0227998; - _meanAC[0][1][2] = 128.653; - _meanAC[0][1][3] = 234.333; - _meanAS[0][1][0] = 0.0346198; - _meanAS[0][1][1] = -0.00261336; - _meanAS[0][1][2] = 177.983; - _meanAS[0][1][3] = 1.19839e+14; - _meanAM[0][1][0] = -0.00100745; - _meanAM[0][1][1] = 0.264247; - _meanAM[0][1][2] = 337.255; - _meanAM[0][1][3] = 251.454; - _meanBT[0][1][0] = 0.0; - _meanBT[0][1][1] = 0.0; - _meanBT[0][1][2] = 0.0; - _meanBT[0][1][3] = 0.0; - _meanBC[0][1][0] = -0.00397794; - _meanBC[0][1][1] = 0.00219079; - _meanBC[0][1][2] = 176.842; - _meanBC[0][1][3] = 450.29; - _meanBS[0][1][0] = -2e+07; - _meanBS[0][1][1] = 0.0957598; - _meanBS[0][1][2] = -8.88573e-27; - _meanBS[0][1][3] = 11442.2; - _meanBM[0][1][0] = -0.00366315; - _meanBM[0][1][1] = 0.0622186; - _meanBM[0][1][2] = 94.5155; - _meanBM[0][1][3] = 126.404; - _meanR9[0][1][0] = 0.00636789; - _meanR9[0][1][1] = 0.000336062; - _meanR9[0][1][2] = -0.0092699; - _meanR9[0][1][3] = 0; - - _sigmaScale[0][1][0] = 0.685096; - _sigmaScale[0][1][1] = 0.129065; - _sigmaScale[0][1][2] = -0.00212486; - _sigmaScale[0][1][3] = 0; - _sigmaAT[0][1][0] = 0.898865; - _sigmaAT[0][1][1] = 0; - _sigmaAT[0][1][2] = 0; - _sigmaAT[0][1][3] = 0; - _sigmaAC[0][1][0] = -0.00492979; - _sigmaAC[0][1][1] = -1.20123; - _sigmaAC[0][1][2] = 2.89231; - _sigmaAC[0][1][3] = 18.2059; - _sigmaAS[0][1][0] = 0; - _sigmaAS[0][1][1] = 0; - _sigmaAS[0][1][2] = 0; - _sigmaAS[0][1][3] = 0; - _sigmaAM[0][1][0] = -0.000727825; - _sigmaAM[0][1][1] = 8.42395; - _sigmaAM[0][1][2] = 512.032; - _sigmaAM[0][1][3] = 415.962; - _sigmaBT[0][1][0] = -0.0336364; - _sigmaBT[0][1][1] = 2.45182; - _sigmaBT[0][1][2] = -0.284353; - _sigmaBT[0][1][3] = -0.31679; - _sigmaBC[0][1][0] = 0.00510553; - _sigmaBC[0][1][1] = -0.953869; - _sigmaBC[0][1][2] = 113872; - _sigmaBC[0][1][3] = 1.35966e+09; - _sigmaBS[0][1][0] = 0; - _sigmaBS[0][1][1] = 0; - _sigmaBS[0][1][2] = 0; - _sigmaBS[0][1][3] = 0; - _sigmaBM[0][1][0] = -0.0034071; - _sigmaBM[0][1][1] = 4.19719; - _sigmaBM[0][1][2] = 128.952; - _sigmaBM[0][1][3] = 180.604; - _sigmaR9[0][1][0] = -3.38988; - _sigmaR9[0][1][1] = 2.0714; - _sigmaR9[0][1][2] = 0; - _sigmaR9[0][1][3] = 0; - - _meanScale[1][0][0] = 1.0009; - _meanScale[1][0][1] = -4.79805e-06; - _meanScale[1][0][2] = 3.34625e-05; - _meanScale[1][0][3] = -0.194267; - _meanAT[1][0][0] = 0.0; - _meanAT[1][0][1] = 0.0; - _meanAT[1][0][2] = 0.0; - _meanAT[1][0][3] = 0.0; - _meanAC[1][0][0] = -0.000177563; - _meanAC[1][0][1] = 0.0122839; - _meanAC[1][0][2] = 1798.92; - _meanAC[1][0][3] = 776.856; - _meanAS[1][0][0] = -0.000533039; - _meanAS[1][0][1] = 0.0642604; - _meanAS[1][0][2] = 969.596; - _meanAS[1][0][3] = 1004.15; - _meanAM[1][0][0] = 0.000163185; - _meanAM[1][0][1] = 0.085936; - _meanAM[1][0][2] = 1593.17; - _meanAM[1][0][3] = 681.623; - _meanBT[1][0][0] = 0.0; - _meanBT[1][0][1] = 0.0; - _meanBT[1][0][2] = 0.0; - _meanBT[1][0][3] = 0.0; - _meanBC[1][0][0] = -0.000518186; - _meanBC[1][0][1] = 0.0121868; - _meanBC[1][0][2] = 1112.53; - _meanBC[1][0][3] = 933.281; - _meanBS[1][0][0] = -0.000750734; - _meanBS[1][0][1] = 0.03859; - _meanBS[1][0][2] = 547.579; - _meanBS[1][0][3] = 775.887; - _meanBM[1][0][0] = -0.190395; - _meanBM[1][0][1] = -0.00362647; - _meanBM[1][0][2] = 5.25687; - _meanBM[1][0][3] = -2.8e+08; - _meanR9[1][0][0] = 0.972346; - _meanR9[1][0][1] = 53.9185; - _meanR9[1][0][2] = 1354.5; - _meanR9[1][0][3] = 0; - - _sigmaScale[1][0][0] = 0.348019; - _sigmaScale[1][0][1] = -6.43731e-11; - _sigmaScale[1][0][2] = 0.0158647; - _sigmaScale[1][0][3] = 0; - _sigmaAT[1][0][0] = 0.215239; - _sigmaAT[1][0][1] = 0; - _sigmaAT[1][0][2] = 0; - _sigmaAT[1][0][3] = 0; - _sigmaAC[1][0][0] = -0.00492298; - _sigmaAC[1][0][1] = -3.40058; - _sigmaAC[1][0][2] = 17263.9; - _sigmaAC[1][0][3] = 2.6e+11; - _sigmaAS[1][0][0] = -0.000237998; - _sigmaAS[1][0][1] = 3.0258; - _sigmaAS[1][0][2] = 1811.25; - _sigmaAS[1][0][3] = 1846.79; - _sigmaAM[1][0][0] = 0.0210134; - _sigmaAM[1][0][1] = 0.328359; - _sigmaAM[1][0][2] = 22.49; - _sigmaAM[1][0][3] = 14.5021; - _sigmaBT[1][0][0] = -0.495072; - _sigmaBT[1][0][1] = 0; - _sigmaBT[1][0][2] = 0; - _sigmaBT[1][0][3] = 0; - _sigmaBC[1][0][0] = -0.00265007; - _sigmaBC[1][0][1] = 0.970549; - _sigmaBC[1][0][2] = -6.89119e+07; - _sigmaBC[1][0][3] = 180110; - _sigmaBS[1][0][0] = 0.00045833; - _sigmaBS[1][0][1] = 2.16342; - _sigmaBS[1][0][2] = 3582.4; - _sigmaBS[1][0][3] = 1100.36; - _sigmaBM[1][0][0] = 0.00188871; - _sigmaBM[1][0][1] = 1.66177; - _sigmaBM[1][0][2] = 3.2e+08; - _sigmaBM[1][0][3] = 2163.81; - _sigmaR9[1][0][0] = -220.415; - _sigmaR9[1][0][1] = 5.19136e-08; - _sigmaR9[1][0][2] = 3.04028e-10; - _sigmaR9[1][0][3] = 0; - - _meanScale[1][1][0] = 0.338011; - _meanScale[1][1][1] = 9.47815e-05; - _meanScale[1][1][2] = -0.000238735; - _meanScale[1][1][3] = -0.846414; - _meanAT[1][1][0] = 0.0; - _meanAT[1][1][1] = 0.0; - _meanAT[1][1][2] = 0.0; - _meanAT[1][1][3] = 0.0; - _meanAC[1][1][0] = -0.00125367; - _meanAC[1][1][1] = 0.013324; - _meanAC[1][1][2] = 203.988; - _meanAC[1][1][3] = 431.951; - _meanAS[1][1][0] = 0.000282607; - _meanAS[1][1][1] = 0.0307431; - _meanAS[1][1][2] = 343.509; - _meanAS[1][1][3] = 274.957; - _meanAM[1][1][0] = 0.0020258; - _meanAM[1][1][1] = 0.643913; - _meanAM[1][1][2] = 0.0693877; - _meanAM[1][1][3] = 0.0816029; - _meanBT[1][1][0] = 0.0; - _meanBT[1][1][1] = 0.0; - _meanBT[1][1][2] = 0.0; - _meanBT[1][1][3] = 0.0; - _meanBC[1][1][0] = -0.00513833; - _meanBC[1][1][1] = 5.94424e+08; - _meanBC[1][1][2] = -62814.9; - _meanBC[1][1][3] = 118612; - _meanBS[1][1][0] = -0.00152129; - _meanBS[1][1][1] = 0.0234694; - _meanBS[1][1][2] = 186.483; - _meanBS[1][1][3] = 754.201; - _meanBM[1][1][0] = -0.000404987; - _meanBM[1][1][1] = 0.156384; - _meanBM[1][1][2] = -1.7e+08; - _meanBM[1][1][3] = 1793.83; - _meanR9[1][1][0] = 0.0645278; - _meanR9[1][1][1] = 0.161614; - _meanR9[1][1][2] = -0.215822; - _meanR9[1][1][3] = 0; - - _sigmaScale[1][1][0] = 1.07376; - _sigmaScale[1][1][1] = 7.47238e-13; - _sigmaScale[1][1][2] = 0.0289594; - _sigmaScale[1][1][3] = 0; - _sigmaAT[1][1][0] = -0.520907; - _sigmaAT[1][1][1] = 0; - _sigmaAT[1][1][2] = 0; - _sigmaAT[1][1][3] = 0; - _sigmaAC[1][1][0] = 0.00165941; - _sigmaAC[1][1][1] = -0.351422; - _sigmaAC[1][1][2] = 8968.94; - _sigmaAC[1][1][3] = -7e+09; - _sigmaAS[1][1][0] = 0.000490279; - _sigmaAS[1][1][1] = 0.554531; - _sigmaAS[1][1][2] = 469.111; - _sigmaAS[1][1][3] = 457.541; - _sigmaAM[1][1][0] = 0.00102079; - _sigmaAM[1][1][1] = 0.628055; - _sigmaAM[1][1][2] = 53.9452; - _sigmaAM[1][1][3] = 72.911; - _sigmaBT[1][1][0] = -0.461542; - _sigmaBT[1][1][1] = 0; - _sigmaBT[1][1][2] = 0; - _sigmaBT[1][1][3] = 0; - _sigmaBC[1][1][0] = -0.00219303; - _sigmaBC[1][1][1] = 0.874327; - _sigmaBC[1][1][2] = 71353.2; - _sigmaBC[1][1][3] = 2.09924e+08; - _sigmaBS[1][1][0] = 0.00104021; - _sigmaBS[1][1][1] = 0.236098; - _sigmaBS[1][1][2] = 482.954; - _sigmaBS[1][1][3] = 191.984; - _sigmaBM[1][1][0] = -0.000116086; - _sigmaBM[1][1][1] = 2.4438; - _sigmaBM[1][1][2] = 1.9e+09; - _sigmaBM[1][1][3] = -700.271; - _sigmaR9[1][1][0] = 4.59374; - _sigmaR9[1][1][1] = -5.06202; - _sigmaR9[1][1][2] = 0; - _sigmaR9[1][1][3] = 0; - - _initialised = true; - } - - if (s == "4_2") { - _meanScale[0][0][0] = 0.996757; - _meanScale[0][0][1] = -1.02729e-05; - _meanScale[0][0][2] = 2.92397e-05; - _meanScale[0][0][3] = -0.0892806; - _meanAT[0][0][0] = 0.000616189; - _meanAT[0][0][1] = 0; - _meanAT[0][0][2] = 0; - _meanAT[0][0][3] = 0; - _meanAC[0][0][0] = -0.00343502; - _meanAC[0][0][1] = 0.0102123; - _meanAC[0][0][2] = 460.294; - _meanAC[0][0][3] = 510.925; - _meanAS[0][0][0] = 0; - _meanAS[0][0][1] = 0; - _meanAS[0][0][2] = 0; - _meanAS[0][0][3] = 0; - _meanAM[0][0][0] = -0.0010363; - _meanAM[0][0][1] = 0.147364; - _meanAM[0][0][2] = 280.742; - _meanAM[0][0][3] = 200.903; - _meanBT[0][0][0] = 0; - _meanBT[0][0][1] = 0.0290516; - _meanBT[0][0][2] = -113.185; - _meanBT[0][0][3] = -176099; - _meanBC[0][0][0] = -0.00262961; - _meanBC[0][0][1] = 0.0134481; - _meanBC[0][0][2] = 699.825; - _meanBC[0][0][3] = 401.452; - _meanBS[0][0][0] = 0; - _meanBS[0][0][1] = 0; - _meanBS[0][0][2] = 0; - _meanBS[0][0][3] = 0; - _meanBM[0][0][0] = -0.00170238; - _meanBM[0][0][1] = 0.0751873; - _meanBM[0][0][2] = 232.9; - _meanBM[0][0][3] = 225.712; - _meanR9[0][0][0] = 0.946441; - _meanR9[0][0][1] = 19.5162; - _meanR9[0][0][2] = 173.503; - _meanR9[0][0][3] = 0; - - _sigmaScale[0][0][0] = 0.196245; - _sigmaScale[0][0][1] = 0.0191932; - _sigmaScale[0][0][2] = 0.00660053; - _sigmaScale[0][0][3] = 0; - _sigmaAT[0][0][0] = 0.179417; - _sigmaAT[0][0][1] = 0; - _sigmaAT[0][0][2] = 0; - _sigmaAT[0][0][3] = 0; - _sigmaAC[0][0][0] = -0.00383752; - _sigmaAC[0][0][1] = 0.0881981; - _sigmaAC[0][0][2] = 88.6384; - _sigmaAC[0][0][3] = -3e+17; - _sigmaAS[0][0][0] = 0; - _sigmaAS[0][0][1] = 0; - _sigmaAS[0][0][2] = 0; - _sigmaAS[0][0][3] = 0; - _sigmaAM[0][0][0] = 0.000932441; - _sigmaAM[0][0][1] = 10.1637; - _sigmaAM[0][0][2] = 610.691; - _sigmaAM[0][0][3] = 290.271; - _sigmaBT[0][0][0] = -0.00599323; - _sigmaBT[0][0][1] = 1.71943; - _sigmaBT[0][0][2] = 90.7352; - _sigmaBT[0][0][3] = 164.449; - _sigmaBC[0][0][0] = -0.00167802; - _sigmaBC[0][0][1] = 0.303306; - _sigmaBC[0][0][2] = 1326.56; - _sigmaBC[0][0][3] = 765.552; - _sigmaBS[0][0][0] = 0; - _sigmaBS[0][0][1] = 0; - _sigmaBS[0][0][2] = 0; - _sigmaBS[0][0][3] = 0; - _sigmaBM[0][0][0] = -0.00252598; - _sigmaBM[0][0][1] = 52.0947; - _sigmaBM[0][0][2] = 660.313; - _sigmaBM[0][0][3] = 1052.64; - _sigmaR9[0][0][0] = 0.952982; - _sigmaR9[0][0][1] = 1961.39; - _sigmaR9[0][0][2] = 22382.1; - _sigmaR9[0][0][3] = 0; - - _meanScale[0][1][0] = 0.88802; - _meanScale[0][1][1] = 1.61e-05; - _meanScale[0][1][2] = -1.08e-05; - _meanScale[0][1][3] = -0.489; - _meanAT[0][1][0] = -0.00165; - _meanAT[0][1][1] = 0; - _meanAT[0][1][2] = 0; - _meanAT[0][1][3] = 0; - _meanAC[0][1][0] = -0.003195; - _meanAC[0][1][1] = 0.02012; - _meanAC[0][1][2] = 151.6; - _meanAC[0][1][3] = 255; - _meanAS[0][1][0] = 0; - _meanAS[0][1][1] = 0; - _meanAS[0][1][2] = 0; - _meanAS[0][1][3] = 0; - _meanAM[0][1][0] = -0.00055; - _meanAM[0][1][1] = 0.1515; - _meanAM[0][1][2] = 534; - _meanAM[0][1][3] = 330; - _meanBT[0][1][0] = 0; - _meanBT[0][1][1] = 0.187; - _meanBT[0][1][2] = 299.298; - _meanBT[0][1][3] = 428.221; - _meanBC[0][1][0] = -0.00366; - _meanBC[0][1][1] = 0.0038; - _meanBC[0][1][2] = 760; - _meanBC[0][1][3] = 760; - _meanBS[0][1][0] = 0; - _meanBS[0][1][1] = 0; - _meanBS[0][1][2] = 0; - _meanBS[0][1][3] = 0; - _meanBM[0][1][0] = -0.00316; - _meanBM[0][1][1] = 0.0404; - _meanBM[0][1][2] = 137; - _meanBM[0][1][3] = 146; - _meanR9[0][1][0] = 0.02573; - _meanR9[0][1][1] = -0.03722; - _meanR9[0][1][2] = 0.0144; - _meanR9[0][1][3] = 0; - - _sigmaScale[0][1][0] = 0.66; - _sigmaScale[0][1][1] = 0.07465; - _sigmaScale[0][1][2] = -0.00373; - _sigmaScale[0][1][3] = 0; - _sigmaAT[0][1][0] = 1.363; - _sigmaAT[0][1][1] = 0; - _sigmaAT[0][1][2] = 0; - _sigmaAT[0][1][3] = 0; - _sigmaAC[0][1][0] = -0.00342; - _sigmaAC[0][1][1] = -1.667; - _sigmaAC[0][1][2] = 6.6; - _sigmaAC[0][1][3] = 14; - _sigmaAS[0][1][0] = 0; - _sigmaAS[0][1][1] = 0; - _sigmaAS[0][1][2] = 0; - _sigmaAS[0][1][3] = 0; - _sigmaAM[0][1][0] = -0.00094; - _sigmaAM[0][1][1] = 12.0228; - _sigmaAM[0][1][2] = 536; - _sigmaAM[0][1][3] = 464; - _sigmaBT[0][1][0] = 0.022; - _sigmaBT[0][1][1] = 3.223; - _sigmaBT[0][1][2] = -0.361; - _sigmaBT[0][1][3] = -0.318; - _sigmaBC[0][1][0] = 0.00567264; - _sigmaBC[0][1][1] = -1.184; - _sigmaBC[0][1][2] = 76000; - _sigmaBC[0][1][3] = 2.14748e+08; - _sigmaBS[0][1][0] = 0; - _sigmaBS[0][1][1] = 0; - _sigmaBS[0][1][2] = 0; - _sigmaBS[0][1][3] = 0; - _sigmaBM[0][1][0] = -0.00236; - _sigmaBM[0][1][1] = 5.78; - _sigmaBM[0][1][2] = 166; - _sigmaBM[0][1][3] = 203.5; - _sigmaR9[0][1][0] = -2.94; - _sigmaR9[0][1][1] = 1.53445; - _sigmaR9[0][1][2] = 0; - _sigmaR9[0][1][3] = 0; - - _meanScale[1][0][0] = 0.993921; - _meanScale[1][0][1] = -8.11417e-06; - _meanScale[1][0][2] = 3.23086e-05; - _meanScale[1][0][3] = -0.0976369; - _meanAT[1][0][0] = 0.0691979; - _meanAT[1][0][1] = 0; - _meanAT[1][0][2] = 0; - _meanAT[1][0][3] = 0; - _meanAC[1][0][0] = -0.000310485; - _meanAC[1][0][1] = 0.0169478; - _meanAC[1][0][2] = 1301.97; - _meanAC[1][0][3] = 796.53; - _meanAS[1][0][0] = -0.0005425; - _meanAS[1][0][1] = 0.0676613; - _meanAS[1][0][2] = 790.284; - _meanAS[1][0][3] = 970; - _meanAM[1][0][0] = 0.000134362; - _meanAM[1][0][1] = 0.364822; - _meanAM[1][0][2] = 3396.04; - _meanAM[1][0][3] = 2407.2; - _meanBT[1][0][0] = 0.0456649; - _meanBT[1][0][1] = 0; - _meanBT[1][0][2] = 0; - _meanBT[1][0][3] = 0; - _meanBC[1][0][0] = -0.000356413; - _meanBC[1][0][1] = 0.0167018; - _meanBC[1][0][2] = 1394.52; - _meanBC[1][0][3] = 823.035; - _meanBS[1][0][0] = -0.000484; - _meanBS[1][0][1] = 0.0542618; - _meanBS[1][0][2] = 798.07; - _meanBS[1][0][3] = 1019.88; - _meanBM[1][0][0] = -0.175333; - _meanBM[1][0][1] = -0.00324513; - _meanBM[1][0][2] = 2.87972; - _meanBM[1][0][3] = 7.58712e+12; - _meanR9[1][0][0] = 0.96393; - _meanR9[1][0][1] = 29.6072; - _meanR9[1][0][2] = 334.89; - _meanR9[1][0][3] = 0; - - _sigmaScale[1][0][0] = 0.337911; - _sigmaScale[1][0][1] = 1.03419e-11; - _sigmaScale[1][0][2] = 0.0153846; - _sigmaScale[1][0][3] = 0; - _sigmaAT[1][0][0] = 1.12; - _sigmaAT[1][0][1] = 0; - _sigmaAT[1][0][2] = 0; - _sigmaAT[1][0][3] = 0; - _sigmaAC[1][0][0] = 48.1275; - _sigmaAC[1][0][1] = 1.50005e+08; - _sigmaAC[1][0][2] = 21231.6; - _sigmaAC[1][0][3] = 2.6e+11; - _sigmaAS[1][0][0] = -0.00036952; - _sigmaAS[1][0][1] = 2.75194; - _sigmaAS[1][0][2] = 1045.06; - _sigmaAS[1][0][3] = 1420.87; - _sigmaAM[1][0][0] = 0.05567; - _sigmaAM[1][0][1] = 0.32; - _sigmaAM[1][0][2] = 420; - _sigmaAM[1][0][3] = 12.8233; - _sigmaBT[1][0][0] = -0.22312; - _sigmaBT[1][0][1] = 0; - _sigmaBT[1][0][2] = 0; - _sigmaBT[1][0][3] = 0; - _sigmaBC[1][0][0] = -0.00320087; - _sigmaBC[1][0][1] = 59.2836; - _sigmaBC[1][0][2] = 7.49509e+12; - _sigmaBC[1][0][3] = 1.32714e+07; - _sigmaBS[1][0][0] = 0.000189384; - _sigmaBS[1][0][1] = 2.89111; - _sigmaBS[1][0][2] = 2468.02; - _sigmaBS[1][0][3] = 1294.69; - _sigmaBM[1][0][0] = 0.00154629; - _sigmaBM[1][0][1] = 16.9762; - _sigmaBM[1][0][2] = 1.05e+07; - _sigmaBM[1][0][3] = -9e+06; - _sigmaR9[1][0][0] = 99.68; - _sigmaR9[1][0][1] = -9.37265e-08; - _sigmaR9[1][0][2] = 6.91613e-09; - _sigmaR9[1][0][3] = 0; - - _meanScale[1][1][0] = 0.340125; - _meanScale[1][1][1] = -5.02007e-05; - _meanScale[1][1][2] = 0.000208216; - _meanScale[1][1][3] = -1.32063; - _meanAT[1][1][0] = -0.092494; - _meanAT[1][1][1] = 0; - _meanAT[1][1][2] = 0; - _meanAT[1][1][3] = 0; - _meanAC[1][1][0] = -0.00131984; - _meanAC[1][1][1] = 0.00950668; - _meanAC[1][1][2] = 259.804; - _meanAC[1][1][3] = 705.003; - _meanAS[1][1][0] = -0.00705787; - _meanAS[1][1][1] = -0.00581517; - _meanAS[1][1][2] = 7.10951e+10; - _meanAS[1][1][3] = -68.7322; - _meanAM[1][1][0] = -0.00496966; - _meanAM[1][1][1] = 0.655834; - _meanAM[1][1][2] = 0.0491064; - _meanAM[1][1][3] = 0.0632471; - _meanBT[1][1][0] = -0.158344; - _meanBT[1][1][1] = 0; - _meanBT[1][1][2] = 0; - _meanBT[1][1][3] = 0; - _meanBC[1][1][0] = -0.00498431; - _meanBC[1][1][1] = -18315.4; - _meanBC[1][1][2] = 50760; - _meanBC[1][1][3] = 118612; - _meanBS[1][1][0] = -0.000620577; - _meanBS[1][1][1] = 0.0247672; - _meanBS[1][1][2] = 437.005; - _meanBS[1][1][3] = 374.823; - _meanBM[1][1][0] = 0.000431046; - _meanBM[1][1][1] = 0.0224695; - _meanBM[1][1][2] = -1.06e+07; - _meanBM[1][1][3] = -135.039; - _meanR9[1][1][0] = 0.151826; - _meanR9[1][1][1] = 0.00348896; - _meanR9[1][1][2] = -0.161781; - _meanR9[1][1][3] = 0; - - _sigmaScale[1][1][0] = 1.19993; - _sigmaScale[1][1][1] = 1.38778e-17; - _sigmaScale[1][1][2] = 0.0251314; - _sigmaScale[1][1][3] = 0; - _sigmaAT[1][1][0] = -0.791929; - _sigmaAT[1][1][1] = 0; - _sigmaAT[1][1][2] = 0; - _sigmaAT[1][1][3] = 0; - _sigmaAC[1][1][0] = 0.0015505; - _sigmaAC[1][1][1] = -0.530085; - _sigmaAC[1][1][2] = 33506.7; - _sigmaAC[1][1][3] = -7e+09; - _sigmaAS[1][1][0] = 7.98682e-05; - _sigmaAS[1][1][1] = 0.875124; - _sigmaAS[1][1][2] = 483.102; - _sigmaAS[1][1][3] = 1005.71; - _sigmaAM[1][1][0] = -0.00510653; - _sigmaAM[1][1][1] = 1.05312; - _sigmaAM[1][1][2] = 49.6466; - _sigmaAM[1][1][3] = 7.11474e+12; - _sigmaBT[1][1][0] = -1.30079; - _sigmaBT[1][1][1] = 0; - _sigmaBT[1][1][2] = 0; - _sigmaBT[1][1][3] = 0; - _sigmaBC[1][1][0] = -0.00202301; - _sigmaBC[1][1][1] = 4.19368; - _sigmaBC[1][1][2] = -1.08161e+07; - _sigmaBC[1][1][3] = -6e+09; - _sigmaBS[1][1][0] = 0.00182147; - _sigmaBS[1][1][1] = 0.25995; - _sigmaBS[1][1][2] = 881.576; - _sigmaBS[1][1][3] = 304.891; - _sigmaBM[1][1][0] = -0.0454995; - _sigmaBM[1][1][1] = 7.63845; - _sigmaBM[1][1][2] = 1.9e+09; - _sigmaBM[1][1][3] = 150001; - _sigmaR9[1][1][0] = 5.69741; - _sigmaR9[1][1][1] = -6.23853; - _sigmaR9[1][1][2] = 0; - _sigmaR9[1][1][3] = 0; - - _initialised = true; - } - - if (s == "4_2e") { - _meanScale[0][0][0] = 1.02133; - _meanScale[0][0][1] = -0.000183073; - _meanScale[0][0][2] = 0.000252052; - _meanScale[0][0][3] = 0.300892; - _meanAT[0][0][0] = 0.016876; - _meanAT[0][0][1] = 0; - _meanAT[0][0][2] = 0; - _meanAT[0][0][3] = 0; - _meanAC[0][0][0] = -0.00327969; - _meanAC[0][0][1] = 0.00932112; - _meanAC[0][0][2] = 430.176; - _meanAC[0][0][3] = 440.94; - _meanAS[0][0][0] = 0; - _meanAS[0][0][1] = 0; - _meanAS[0][0][2] = 0; - _meanAS[0][0][3] = 0; - _meanAM[0][0][0] = -0.000876726; - _meanAM[0][0][1] = 0.128953; - _meanAM[0][0][2] = 262.609; - _meanAM[0][0][3] = 204.869; - _meanBT[0][0][0] = 0; - _meanBT[0][0][1] = 0; - _meanBT[0][0][2] = 0; - _meanBT[0][0][3] = 0; - _meanBC[0][0][0] = -0.00316342; - _meanBC[0][0][1] = 0.00801235; - _meanBC[0][0][2] = 552.944; - _meanBC[0][0][3] = 507.239; - _meanBS[0][0][0] = 0; - _meanBS[0][0][1] = 0; - _meanBS[0][0][2] = 0; - _meanBS[0][0][3] = 0; - _meanBM[0][0][0] = -0.00171652; - _meanBM[0][0][1] = 0.0746995; - _meanBM[0][0][2] = 190.606; - _meanBM[0][0][3] = 210.147; - _meanR9[0][0][0] = 0.847311; - _meanR9[0][0][1] = -10.0049; - _meanR9[0][0][2] = 67.613; - _meanR9[0][0][3] = 0; - - _sigmaScale[0][0][0] = 0.345777; - _sigmaScale[0][0][1] = 0.0375747; - _sigmaScale[0][0][2] = -0.00516299; - _sigmaScale[0][0][3] = 0; - _sigmaAT[0][0][0] = 0.994444; - _sigmaAT[0][0][1] = 0; - _sigmaAT[0][0][2] = 0; - _sigmaAT[0][0][3] = 0; - _sigmaAC[0][0][0] = -0.00380373; - _sigmaAC[0][0][1] = -1.00415; - _sigmaAC[0][0][2] = 110274; - _sigmaAC[0][0][3] = -3e+17; - _sigmaAS[0][0][0] = 0; - _sigmaAS[0][0][1] = 0; - _sigmaAS[0][0][2] = 0; - _sigmaAS[0][0][3] = 0; - _sigmaAM[0][0][0] = -0.000881147; - _sigmaAM[0][0][1] = 8.76414; - _sigmaAM[0][0][2] = 455.387; - _sigmaAM[0][0][3] = 412.382; - _sigmaBT[0][0][0] = 0.00578517; - _sigmaBT[0][0][1] = 2.28008; - _sigmaBT[0][0][2] = -3.36e+07; - _sigmaBT[0][0][3] = -152.696; - _sigmaBC[0][0][0] = -0.00161997; - _sigmaBC[0][0][1] = 50513.8; - _sigmaBC[0][0][2] = -1.26888e+07; - _sigmaBC[0][0][3] = 3.75561e+07; - _sigmaBS[0][0][0] = 0; - _sigmaBS[0][0][1] = 0; - _sigmaBS[0][0][2] = 0; - _sigmaBS[0][0][3] = 0; - _sigmaBM[0][0][0] = -0.00168415; - _sigmaBM[0][0][1] = 6.89324; - _sigmaBM[0][0][2] = 272.169; - _sigmaBM[0][0][3] = 315.424; - _sigmaR9[0][0][0] = 0.952571; - _sigmaR9[0][0][1] = 0; - _sigmaR9[0][0][2] = 0; - _sigmaR9[0][0][3] = 0; - - _meanScale[0][1][0] = 0.870259; - _meanScale[0][1][1] = 0.000234598; - _meanScale[0][1][2] = -0.000262422; - _meanScale[0][1][3] = 0.277914; - _meanAT[0][1][0] = 1e-06; - _meanAT[0][1][1] = 0; - _meanAT[0][1][2] = 0; - _meanAT[0][1][3] = 0; - _meanAC[0][1][0] = -0.00324258; - _meanAC[0][1][1] = 0.0209948; - _meanAC[0][1][2] = 167.983; - _meanAC[0][1][3] = 305.464; - _meanAS[0][1][0] = 0.0333341; - _meanAS[0][1][1] = -591.066; - _meanAS[0][1][2] = 1.48079e+11; - _meanAS[0][1][3] = 1.61987e+07; - _meanAM[0][1][0] = -0.000991417; - _meanAM[0][1][1] = 0.121994; - _meanAM[0][1][2] = 367.004; - _meanAM[0][1][3] = 289.22; - _meanBT[0][1][0] = 0; - _meanBT[0][1][1] = 0.187; - _meanBT[0][1][2] = 299.298; - _meanBT[0][1][3] = 428.221; - _meanBC[0][1][0] = -0.00437016; - _meanBC[0][1][1] = 0.00235015; - _meanBC[0][1][2] = 759.85; - _meanBC[0][1][3] = -5018.79; - _meanBS[0][1][0] = -1.2e+08; - _meanBS[0][1][1] = 0.0934286; - _meanBS[0][1][2] = -1.226e-16; - _meanBS[0][1][3] = 11442.2; - _meanBM[0][1][0] = -0.000153536; - _meanBM[0][1][1] = 0.0101487; - _meanBM[0][1][2] = 60.0003; - _meanBM[0][1][3] = -4.4e+08; - _meanR9[0][1][0] = 0.0853634; - _meanR9[0][1][1] = -0.263819; - _meanR9[0][1][2] = 0.200892; - _meanR9[0][1][3] = 0; - - _sigmaScale[0][1][0] = 0.705452; - _sigmaScale[0][1][1] = -0.0781086; - _sigmaScale[0][1][2] = 0.0039561; - _sigmaScale[0][1][3] = 0; - _sigmaAT[0][1][0] = 1.46888; - _sigmaAT[0][1][1] = 0; - _sigmaAT[0][1][2] = 0; - _sigmaAT[0][1][3] = 0; - _sigmaAC[0][1][0] = -0.00537924; - _sigmaAC[0][1][1] = -0.740685; - _sigmaAC[0][1][2] = 1.59714; - _sigmaAC[0][1][3] = 31.9922; - _sigmaAS[0][1][0] = 0; - _sigmaAS[0][1][1] = 0; - _sigmaAS[0][1][2] = 0; - _sigmaAS[0][1][3] = 0; - _sigmaAM[0][1][0] = 0.000163134; - _sigmaAM[0][1][1] = 7.30822; - _sigmaAM[0][1][2] = 632.013; - _sigmaAM[0][1][3] = 373.003; - _sigmaBT[0][1][0] = 0.00253725; - _sigmaBT[0][1][1] = 2.97332; - _sigmaBT[0][1][2] = -0.516548; - _sigmaBT[0][1][3] = -0.50994; - _sigmaBC[0][1][0] = 0.00578715; - _sigmaBC[0][1][1] = -0.473225; - _sigmaBC[0][1][2] = 8363.08; - _sigmaBC[0][1][3] = 2.36808e+19; - _sigmaBS[0][1][0] = 0; - _sigmaBS[0][1][1] = 0; - _sigmaBS[0][1][2] = 0; - _sigmaBS[0][1][3] = 0; - _sigmaBM[0][1][0] = 0.000184199; - _sigmaBM[0][1][1] = 3.82105; - _sigmaBM[0][1][2] = 93.4062; - _sigmaBM[0][1][3] = 95.4072; - _sigmaR9[0][1][0] = 1.20664; - _sigmaR9[0][1][1] = -3.43548; - _sigmaR9[0][1][2] = 0; - _sigmaR9[0][1][3] = 0; - - _meanScale[1][0][0] = 0.966787; - _meanScale[1][0][1] = 4.77112e-05; - _meanScale[1][0][2] = -4.47768e-05; - _meanScale[1][0][3] = 0.0854689; - _meanAT[1][0][0] = 0.0691979; - _meanAT[1][0][1] = 0; - _meanAT[1][0][2] = 0; - _meanAT[1][0][3] = 0; - _meanAC[1][0][0] = -0.000985244; - _meanAC[1][0][1] = 0.0132327; - _meanAC[1][0][2] = 530.13; - _meanAC[1][0][3] = 1008.64; - _meanAS[1][0][0] = -0.000571197; - _meanAS[1][0][1] = 0.0579624; - _meanAS[1][0][2] = 687.722; - _meanAS[1][0][3] = 836.21; - _meanAM[1][0][0] = 0.00052402; - _meanAM[1][0][1] = 0.402941; - _meanAM[1][0][2] = 3615.29; - _meanAM[1][0][3] = 1495.1; - _meanBT[1][0][0] = 0.0456649; - _meanBT[1][0][1] = 0; - _meanBT[1][0][2] = 0; - _meanBT[1][0][3] = 0; - _meanBC[1][0][0] = -0.000675969; - _meanBC[1][0][1] = 0.0118283; - _meanBC[1][0][2] = 1050.1; - _meanBC[1][0][3] = 1329.8; - _meanBS[1][0][0] = -0.000254569; - _meanBS[1][0][1] = 0.0576783; - _meanBS[1][0][2] = 853.571; - _meanBS[1][0][3] = 938.698; - _meanBM[1][0][0] = -0.186506; - _meanBM[1][0][1] = -0.00654349; - _meanBM[1][0][2] = 1.09286; - _meanBM[1][0][3] = -5.8e+08; - _meanR9[1][0][0] = 0.951164; - _meanR9[1][0][1] = -0.323083; - _meanR9[1][0][2] = 506.054; - _meanR9[1][0][3] = 0; - - _sigmaScale[1][0][0] = 0.443288; - _sigmaScale[1][0][1] = 1.73472e-18; - _sigmaScale[1][0][2] = 0.0134633; - _sigmaScale[1][0][3] = 0; - _sigmaAT[1][0][0] = 6.60294; - _sigmaAT[1][0][1] = 0; - _sigmaAT[1][0][2] = 0; - _sigmaAT[1][0][3] = 0; - _sigmaAC[1][0][0] = 48.1275; - _sigmaAC[1][0][1] = 1.50005e+08; - _sigmaAC[1][0][2] = 21231.6; - _sigmaAC[1][0][3] = 2.6e+11; - _sigmaAS[1][0][0] = 0.000112234; - _sigmaAS[1][0][1] = 2.38201; - _sigmaAS[1][0][2] = 1368.36; - _sigmaAS[1][0][3] = 1014.58; - _sigmaAM[1][0][0] = 0.0227945; - _sigmaAM[1][0][1] = 1.35035; - _sigmaAM[1][0][2] = 34.8078; - _sigmaAM[1][0][3] = 41.2653; - _sigmaBT[1][0][0] = 4.6512; - _sigmaBT[1][0][1] = 0; - _sigmaBT[1][0][2] = 0; - _sigmaBT[1][0][3] = 0; - _sigmaBC[1][0][0] = -0.00385034; - _sigmaBC[1][0][1] = 9860.11; - _sigmaBC[1][0][2] = 7.49509e+12; - _sigmaBC[1][0][3] = 5.55794e+07; - _sigmaBS[1][0][0] = 0.000287389; - _sigmaBS[1][0][1] = 2.22754; - _sigmaBS[1][0][2] = 2066.43; - _sigmaBS[1][0][3] = 926.247; - _sigmaBM[1][0][0] = 0.00110983; - _sigmaBM[1][0][1] = 4.70582; - _sigmaBM[1][0][2] = 8.47552e+10; - _sigmaBM[1][0][3] = -4572.21; - _sigmaR9[1][0][0] = 141.283; - _sigmaR9[1][0][1] = -6.07621e-07; - _sigmaR9[1][0][2] = 1.40907e-08; - _sigmaR9[1][0][3] = 0; - - _meanScale[1][1][0] = 0.290862; - _meanScale[1][1][1] = -5.93303e-05; - _meanScale[1][1][2] = 0.000431058; - _meanScale[1][1][3] = 0.350738; - _meanAT[1][1][0] = -0.092494; - _meanAT[1][1][1] = 0; - _meanAT[1][1][2] = 0; - _meanAT[1][1][3] = 0; - _meanAC[1][1][0] = -0.00105099; - _meanAC[1][1][1] = 0.0195863; - _meanAC[1][1][2] = 162.87; - _meanAC[1][1][3] = 259.479; - _meanAS[1][1][0] = -0.00820192; - _meanAS[1][1][1] = -0.00404515; - _meanAS[1][1][2] = -9e+12; - _meanAS[1][1][3] = -12.1537; - _meanAM[1][1][0] = 0.00430129; - _meanAM[1][1][1] = 0.647006; - _meanAM[1][1][2] = 0.0524654; - _meanAM[1][1][3] = 0.057336; - _meanBT[1][1][0] = -0.158344; - _meanBT[1][1][1] = 0; - _meanBT[1][1][2] = 0; - _meanBT[1][1][3] = 0; - _meanBC[1][1][0] = -0.00661496; - _meanBC[1][1][1] = -0.0551321; - _meanBC[1][1][2] = 1286.49; - _meanBC[1][1][3] = 118612; - _meanBS[1][1][0] = -0.000517633; - _meanBS[1][1][1] = 0.0294134; - _meanBS[1][1][2] = 414.964; - _meanBS[1][1][3] = 487.294; - _meanBM[1][1][0] = 0.00298075; - _meanBM[1][1][1] = 0.0146853; - _meanBM[1][1][2] = -7.17525e+06; - _meanBM[1][1][3] = 41.9253; - _meanR9[1][1][0] = 0.213804; - _meanR9[1][1][1] = -0.395466; - _meanR9[1][1][2] = 0.202973; - _meanR9[1][1][3] = 0; - - _sigmaScale[1][1][0] = 1.29656; - _sigmaScale[1][1][1] = 9.61084e-11; - _sigmaScale[1][1][2] = 0.0270649; - _sigmaScale[1][1][3] = 0; - _sigmaAT[1][1][0] = -0.0115339; - _sigmaAT[1][1][1] = 0; - _sigmaAT[1][1][2] = 0; - _sigmaAT[1][1][3] = 0; - _sigmaAC[1][1][0] = 0.0013797; - _sigmaAC[1][1][1] = -0.445789; - _sigmaAC[1][1][2] = 29539.8; - _sigmaAC[1][1][3] = -3.6e+08; - _sigmaAS[1][1][0] = 0.000213606; - _sigmaAS[1][1][1] = 0.547654; - _sigmaAS[1][1][2] = 892.47; - _sigmaAS[1][1][3] = 408.826; - _sigmaAM[1][1][0] = -0.00121353; - _sigmaAM[1][1][1] = 1.10052; - _sigmaAM[1][1][2] = 31.303; - _sigmaAM[1][1][3] = 80.0479; - _sigmaBT[1][1][0] = 0.470361; - _sigmaBT[1][1][1] = 0; - _sigmaBT[1][1][2] = 0; - _sigmaBT[1][1][3] = 0; - _sigmaBC[1][1][0] = -0.00222463; - _sigmaBC[1][1][1] = 18440.6; - _sigmaBC[1][1][2] = 5.80805e+07; - _sigmaBC[1][1][3] = -4.43323e+17; - _sigmaBS[1][1][0] = 0.00156455; - _sigmaBS[1][1][1] = 0.337173; - _sigmaBS[1][1][2] = 281.318; - _sigmaBS[1][1][3] = 252.457; - _sigmaBM[1][1][0] = -0.0455886; - _sigmaBM[1][1][1] = 1.47875; - _sigmaBM[1][1][2] = 1.9e+09; - _sigmaBM[1][1][3] = 1193.93; - _sigmaR9[1][1][0] = 8.89993; - _sigmaR9[1][1][1] = -9.8386; - _sigmaR9[1][1][2] = 0; - _sigmaR9[1][1][3] = 0; - - _initialised = true; - } - - assert(_initialised); - return true; -} - -// Get the geometry of cracks and gaps from file -bool PhotonFix::initialiseGeometry(const std::string &s) { - std::ifstream fin("../test/PhotonFix.dat"); - assert(fin); - - std::cout << "Reading in here" << std::endl; - for (unsigned i(0); i < 169; i++) { - for (unsigned j(0); j < 360; j++) { - for (unsigned k(0); k < 2; k++) { - fin >> _barrelCGap[i][j][k]; - } - } - } - - for (unsigned i(0); i < 33; i++) { - for (unsigned j(0); j < 180; j++) { - for (unsigned k(0); k < 2; k++) { - fin >> _barrelSGap[i][j][k]; - } - } - } - - for (unsigned i(0); i < 7; i++) { - for (unsigned j(0); j < 18; j++) { - for (unsigned k(0); k < 2; k++) { - fin >> _barrelMGap[i][j][k]; - } - } - } - for (unsigned i(0); i < 100; i++) { - for (unsigned j(0); j < 100; j++) { - unsigned k; - fin >> k; - _endcapCrystal[i][j] = (k == 0); - } - } - - for (unsigned i(0); i < 2; i++) { - for (unsigned j(0); j < 7080; j++) { - for (unsigned k(0); k < 2; k++) { - fin >> _endcapCGap[i][j][k]; - } - } - } - - for (unsigned i(0); i < 2; i++) { - for (unsigned j(0); j < 264; j++) { - for (unsigned k(0); k < 2; k++) { - fin >> _endcapSGap[i][j][k]; - } - } - } - - for (unsigned i(0); i < 2; i++) { - for (unsigned j(0); j < 1; j++) { - for (unsigned k(0); k < 2; k++) { - fin >> _endcapMGap[i][j][k]; - } - } - } - - assert(fin); - - return true; -} - -const double PhotonFix::_onePi(acos(-1.0)); -const double PhotonFix::_twoPi(2.0 * acos(-1.0)); - -bool PhotonFix::_initialised = false; - -double PhotonFix::_meanScale[2][2][4]; -double PhotonFix::_meanAT[2][2][4]; -double PhotonFix::_meanAC[2][2][4]; -double PhotonFix::_meanAS[2][2][4]; -double PhotonFix::_meanAM[2][2][4]; -double PhotonFix::_meanBT[2][2][4]; -double PhotonFix::_meanBC[2][2][4]; -double PhotonFix::_meanBS[2][2][4]; -double PhotonFix::_meanBM[2][2][4]; -double PhotonFix::_meanR9[2][2][4]; - -double PhotonFix::_sigmaScale[2][2][4]; -double PhotonFix::_sigmaAT[2][2][4]; -double PhotonFix::_sigmaAC[2][2][4]; -double PhotonFix::_sigmaAS[2][2][4]; -double PhotonFix::_sigmaAM[2][2][4]; -double PhotonFix::_sigmaBT[2][2][4]; -double PhotonFix::_sigmaBC[2][2][4]; -double PhotonFix::_sigmaBS[2][2][4]; -double PhotonFix::_sigmaBM[2][2][4]; -double PhotonFix::_sigmaR9[2][2][4]; - -double PhotonFix::_barrelCGap[169][360][2]; -double PhotonFix::_barrelSGap[33][180][2]; -double PhotonFix::_barrelMGap[7][18][2]; - -bool PhotonFix::_endcapCrystal[100][100]; -double PhotonFix::_endcapCGap[2][7080][2]; -double PhotonFix::_endcapSGap[2][264][2]; -double PhotonFix::_endcapMGap[2][1][2]; diff --git a/HiggsAnalysis/HiggsToGammaGamma/src/PhotonFixCMS.cc b/HiggsAnalysis/HiggsToGammaGamma/src/PhotonFixCMS.cc deleted file mode 100644 index e6e793e37c53c..0000000000000 --- a/HiggsAnalysis/HiggsToGammaGamma/src/PhotonFixCMS.cc +++ /dev/null @@ -1,172 +0,0 @@ -#include -#include -#include -#include - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/DetId/interface/DetId.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "Geometry/Records/interface/EcalBarrelGeometryRecord.h" -#include "Geometry/EcalAlgo/interface/EcalBarrelGeometry.h" -#include "Geometry/Records/interface/EcalEndcapGeometryRecord.h" -#include "Geometry/EcalAlgo/interface/EcalEndcapGeometry.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "Geometry/CaloGeometry/interface/CaloCellGeometry.h" -#include "Geometry/CaloGeometry/interface/TruncatedPyramid.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" - -#include "HiggsAnalysis/HiggsToGammaGamma/interface/PhotonFixCMS.h" - -PhotonFixCMS::PhotonFixCMS(const reco::Photon &p) - : pf(p.energy(), p.superCluster()->eta(), p.superCluster()->phi(), p.r9()) {} - -bool PhotonFixCMS::initialise(const edm::EventSetup &iSetup, const std::string &s) { - if (PhotonFix::initialised()) - return false; - - PhotonFix::initialiseParameters(s); - - // Get ECAL geometry - edm::ESHandle geoHandle; - iSetup.get().get(geoHandle); - const CaloGeometry &geometry = *geoHandle; - - // EB - const CaloSubdetectorGeometry *barrelGeometry = geometry.getSubdetectorGeometry(DetId::Ecal, EcalBarrel); - - double bc[170][360][2]; - for (int iz(0); iz < 2; iz++) { - for (int ie(0); ie < 85; ie++) { - int id = ie + 1; - if (iz == 0) - id = ie - 85; - for (int ip(0); ip < 360; ip++) { - EBDetId eb(id, ip + 1); - - auto cellGeometry = barrelGeometry->getGeometry(eb); - const GlobalPoint &crystalPos = cellGeometry->getPosition(); - bc[85 * iz + ie][ip][0] = crystalPos.eta(); - bc[85 * iz + ie][ip][1] = crystalPos.phi(); - } - } - } - - for (unsigned i(0); i < 169; i++) { - for (unsigned j(0); j < 360; j++) { - unsigned k((j + 1) % 360); - - double eta = 0.25 * (bc[i][j][0] + bc[i + 1][j][0] + bc[i][k][0] + bc[i + 1][k][0]); - double phi = PhotonFix::GetaPhi(PhotonFix::GetaPhi(bc[i][j][1], bc[i + 1][j][1]), - PhotonFix::GetaPhi(bc[i][k][1], bc[i + 1][k][1])); - - PhotonFix::barrelCGap(i, j, 0, eta); - PhotonFix::barrelCGap(i, j, 1, phi); - - if ((i % 5) == 4 && (j % 2) == 1) { - PhotonFix::barrelSGap(i / 5, j / 2, 0, eta); - PhotonFix::barrelSGap(i / 5, j / 2, 1, phi); - } - - if ((j % 20) == 19) { - if (i == 19) { - PhotonFix::barrelMGap(0, j / 20, 0, eta); - PhotonFix::barrelMGap(0, j / 20, 1, phi); - } - if (i == 39) { - PhotonFix::barrelMGap(1, j / 20, 0, eta); - PhotonFix::barrelMGap(1, j / 20, 1, phi); - } - if (i == 59) { - PhotonFix::barrelMGap(2, j / 20, 0, eta); - PhotonFix::barrelMGap(2, j / 20, 1, phi); - } - if (i == 84) { - PhotonFix::barrelMGap(3, j / 20, 0, eta); - PhotonFix::barrelMGap(3, j / 20, 1, phi); - } - if (i == 109) { - PhotonFix::barrelMGap(4, j / 20, 0, eta); - PhotonFix::barrelMGap(4, j / 20, 1, phi); - } - if (i == 129) { - PhotonFix::barrelMGap(5, j / 20, 0, eta); - PhotonFix::barrelMGap(5, j / 20, 1, phi); - } - if (i == 149) { - PhotonFix::barrelMGap(6, j / 20, 0, eta); - PhotonFix::barrelMGap(6, j / 20, 1, phi); - } - } - } - } - - // EE - const CaloSubdetectorGeometry *endcapGeometry = geometry.getSubdetectorGeometry(DetId::Ecal, EcalEndcap); - - double ec[2][100][100][2]; - bool valid[100][100]; - int val_count = 0; - for (int iz(0); iz < 2; iz++) { - for (int ix(0); ix < 100; ix++) { - for (int iy(0); iy < 100; iy++) { - valid[ix][iy] = EEDetId::validDetId(ix + 1, iy + 1, 2 * iz - 1); - if (iz == 0) - PhotonFix::endcapCrystal(ix, iy, valid[ix][iy]); - if (valid[ix][iy]) { - EEDetId ee(ix + 1, iy + 1, 2 * iz - 1); - val_count += 1; - - auto cellGeometry = endcapGeometry->getGeometry(ee); - const GlobalPoint &crystalPos = cellGeometry->getPosition(); - ec[iz][ix][iy][0] = asinh(crystalPos.x() / fabs(crystalPos.z())); - ec[iz][ix][iy][1] = asinh(crystalPos.y() / fabs(crystalPos.z())); - } - } - } - } - std::cout << "GG valid " << val_count << std::endl; - double c[2]; - for (unsigned iz(0); iz < 2; iz++) { - unsigned nC(0), nS(0); - for (unsigned i(0); i < 99; i++) { - for (unsigned j(0); j < 99; j++) { - if (valid[i][j] && valid[i + 1][j] && valid[i][j + 1] && valid[i + 1][j + 1]) { - for (unsigned k(0); k < 2; k++) { - c[k] = 0.25 * (ec[iz][i][j][k] + ec[iz][i + 1][j][k] + ec[iz][i][j + 1][k] + ec[iz][i + 1][j + 1][k]); - - PhotonFix::endcapCGap(iz, nC, k, c[k]); - } - - if ((i % 5) == 4 && (j % 5) == 4) { - for (unsigned k(0); k < 2; k++) { - PhotonFix::endcapSGap(iz, nS, k, c[k]); - } - nS++; - } - nC++; - } - } - } - std::cout << "Endcap number of crystal, submodule boundaries = " << nC << ", " << nS << std::endl; - } - - // Hardcode EE D-module gap to 0,0 - PhotonFix::endcapMGap(0, 0, 0, 0.0); - PhotonFix::endcapMGap(0, 0, 1, 0.0); - PhotonFix::endcapMGap(1, 0, 0, 0.0); - PhotonFix::endcapMGap(1, 0, 1, 0.0); - - return true; -} - -double PhotonFixCMS::fixedEnergy() const { return pf.fixedEnergy(); } - -double PhotonFixCMS::sigmaEnergy() const { return pf.sigmaEnergy(); } - -const PhotonFix &PhotonFixCMS::photonFix() const { return pf; } diff --git a/HiggsAnalysis/HiggsToGammaGamma/test/PhotonFix.dat b/HiggsAnalysis/HiggsToGammaGamma/test/PhotonFix.dat deleted file mode 100644 index 13c61d207dfd0..0000000000000 --- a/HiggsAnalysis/HiggsToGammaGamma/test/PhotonFix.dat +++ /dev/null @@ -1,173192 +0,0 @@ --1.46862989664 --0.15601734072 --1.46860229969 --0.138757757842 --1.46857792139 --0.121498476714 --1.46855676174 --0.104239817709 --1.46853888035 --0.0869813524186 --1.46852421761 --0.0697233742103 --1.46851277351 --0.0524654565379 --1.46850457787 --0.0352079104632 --1.46849957109 --0.0179503036197 --1.46849781275 --0.000692945672197 --1.46849936247 -0.0165645941161 --1.46850413084 -0.0338220098056 --1.46851202846 -0.0510797258466 --1.46852326393 -0.0683374460786 --1.46853777766 -0.0855955947191 --1.46855551004 -0.102853864431 --1.46857640147 -0.120112676173 --1.46860057116 -0.137371733785 --1.46862789989 -0.154631458223 --1.46864336729 -0.173840790987 --1.46862989664 -0.1930485107 --1.46860229969 -0.210308093577 --1.46857795119 -0.22756736353 --1.46855682134 -0.24482601881 --1.46853888034 -0.262084484101 --1.4685241878 -0.279342472553 --1.46851274371 -0.296600401402 --1.46850451827 -0.31385795027 --1.46849954128 -0.331115543843 --1.46849781275 -0.348372891545 --1.46849930286 -0.365630432963 --1.46850410104 -0.382887855172 --1.46851211787 -0.400145582855 --1.46852332354 -0.417403303087 --1.46853777766 -0.434661440551 --1.46855551004 -0.451919712126 --1.46857640147 -0.469178535044 --1.46860057116 -0.48643759638 --1.46862789989 -0.503697313368 --1.46864339709 -0.522906631231 --1.46862992644 -0.542114362121 --1.46860232949 -0.559373959899 --1.46857795119 -0.576633229852 --1.46855679154 -0.593891888857 --1.46853891015 -0.611150354147 --1.46852421761 -0.6284083426 --1.46851274371 -0.645666256547 --1.46850451827 -0.662923797965 --1.46849957108 -0.680181398988 --1.46849787235 -0.697438746691 --1.46849936247 -0.714696288109 --1.46850410104 -0.731953710318 --1.46851208806 -0.74921143055 --1.46852335334 -0.76646913588 --1.46853780746 -0.783727273345 --1.46855551004 -0.800985559821 --1.46857640147 -0.818244382739 --1.46860057116 -0.835503429175 --1.46862792969 -0.852763161063 --1.46864339709 -0.871972501278 --1.46862989664 -0.891180217266 --1.46860232949 -0.908439800143 --1.46857795119 -0.925699070096 --1.46855679154 -0.942957744002 --1.46853888034 -0.960216209293 --1.4685242176 -0.977474167943 --1.46851277351 -0.99473206699 --1.46850451827 -1.01198962331 --1.46849957108 -1.02924725413 --1.46849787235 -1.04650461674 --1.46849936247 -1.06376215816 --1.46850410104 -1.08101958036 --1.46851208806 -1.09827730059 --1.46852332354 -1.11553499103 --1.46853777766 -1.13279312849 --1.46855551004 -1.15005141497 --1.46857640147 -1.16731023789 --1.46860057116 -1.18456932903 --1.46862789989 -1.20182904601 --1.46864336729 -1.22103834152 --1.46862989664 -1.24024602771 --1.46860229969 -1.25750562548 --1.46857792139 -1.27476492524 --1.46855679154 -1.29202356934 --1.46853888034 -1.30928203464 --1.4685241878 -1.32654002309 --1.46851274371 -1.34379795194 --1.46850454807 -1.36105549336 --1.46849960089 -1.37831309438 --1.46849787235 -1.39557045698 --1.46849936247 -1.4128279984 --1.46850413084 -1.43008542061 --1.46851211787 -1.44734314084 --1.46852332354 -1.46460083127 --1.46853774786 -1.48185896874 --1.46855548024 -1.49911725521 --1.46857643127 -1.51637604832 --1.46860060096 -1.53363510966 --1.46862795949 -1.55089488626 --1.4686434567 -1.57010424137 --1.46862989664 -1.58931192755 --1.46860229969 -1.60657146573 --1.46857795119 -1.62383076548 --1.46855682134 -1.64108946919 --1.46853896975 -1.65834793449 --1.46852427721 -1.67560589313 --1.46851277351 -1.69286379218 --1.46850451827 -1.7101213336 --1.46849954128 -1.72737893462 --1.46849784255 -1.74463629723 --1.46849936247 -1.76189383864 --1.46850413084 -1.77915126085 --1.46851211787 -1.79640898108 --1.46852332354 -1.81366670131 --1.46853777766 -1.83092483878 --1.46855553985 -1.84818312526 --1.46857643127 -1.86544194817 --1.46860054135 -1.88270100951 --1.46862787009 -1.8999607265 --1.46864336729 -1.91917002201 --1.46862989664 -1.9383777678 --1.46860232949 -1.95563736558 --1.46857795119 -1.97289660573 --1.46855679154 -1.99015524983 --1.46853888034 -2.00741371513 --1.4685242176 -2.02467173338 --1.46851277351 -2.04192966222 --1.46850451827 -2.05918717385 --1.46849954128 -2.07644474507 --1.46849784255 -2.09370213747 --1.46849936247 -2.11095970869 --1.46850410104 -2.1282171607 --1.46851208806 -2.14547485113 --1.46852332354 -2.16273254156 --1.46853777766 -2.17999070883 --1.46855551004 -2.1972489953 --1.46857640147 -2.21450781822 --1.46860057116 -2.23176681995 --1.46862792969 -2.24902653694 --1.46864339709 -2.26823586226 --1.46862989664 -2.28744357824 --1.46860232949 -2.30470317602 --1.46857798099 -2.32196247578 --1.46855682134 -2.33922117949 --1.46853888034 -2.35647964477 --1.4685241878 -2.37373757362 --1.46851274371 -2.39099544286 --1.46850454807 -2.40825301409 --1.46849957109 -2.42551070452 --1.46849787235 -2.44276803732 --1.46849939227 -2.46002548933 --1.46850413084 -2.47728294134 --1.46851211787 -2.49454069138 --1.46852332354 -2.51179838181 --1.46853777766 -2.52905648947 --1.46855551004 -2.54631477594 --1.46857640147 -2.56357365846 --1.46860057116 -2.5808327198 --1.46862789989 -2.59809243679 --1.46864333749 -2.6173017621 --1.46862986684 -2.63650947809 --1.46860229969 -2.65376907587 --1.46857792139 -2.67102831602 --1.46855679154 -2.68828696012 --1.46853888034 -2.70554548502 --1.4685241878 -2.72280347347 --1.46851274371 -2.74006140232 --1.46850451827 -2.75731891393 --1.46849957108 -2.77457648515 --1.46849784255 -2.79183381796 --1.46849933267 -2.80909132958 --1.46850410104 -2.82634878159 --1.46851208806 -2.84360653162 --1.46852332354 -2.86086422205 --1.46853777766 -2.87812238932 --1.46855553985 -2.89538067579 --1.46857643127 -2.9126394391 --1.46860054135 -2.92989856004 --1.46862789989 -2.94715833664 --1.46864339709 -2.96636766195 --1.46862989664 -2.98557531834 --1.46860229969 -3.00283485651 --1.46857792139 -3.02009415626 --1.46855676174 -3.03735280037 --1.46853888035 -3.05461126566 --1.46852421761 -3.07186931372 --1.46851277351 -3.08912724257 --1.46850457787 -3.10638475418 --1.46849957109 -3.1236423254 --1.46849781275 -3.14089968999 --1.46849936247 --3.12502801418 --1.46850413084 --3.10777062178 --1.46851202846 --3.09051293135 --1.46852326393 --3.07325524092 --1.46853777766 --3.05599707365 --1.46855551004 --3.03873878717 --1.46857640147 --3.02148002386 --1.46860057116 --3.00422090292 --1.46862789989 --2.98696118593 --1.46864336729 --2.96775186062 --1.46862989664 --2.94854414463 --1.46860229969 --2.93128460646 --1.46857795119 --2.9140253067 --1.46855682134 --2.8967666626 --1.46853888034 --2.87950819731 --1.4685241878 --2.86225014925 --1.46851274371 --2.8449922204 --1.46850451827 --2.82773470878 --1.46849954128 --2.81047713756 --1.46849781275 --2.79321974516 --1.46849930286 --2.77596217394 --1.46850410104 --2.75870484114 --1.46851211787 --2.74144715071 --1.46852332354 --2.72418934107 --1.46853777766 --2.7069311738 --1.46855551004 --2.68967294693 --1.46857640147 --2.67241412401 --1.46860057116 --2.65515506268 --1.46862789989 --2.63789534569 --1.46864339709 --2.61868602038 --1.46862992644 --2.59947824478 --1.46860232949 --2.582218647 --1.46857795119 --2.56495940685 --1.46855679154 --2.54770076275 --1.46853891015 --2.53044235706 --1.46852421761 --2.51318436861 --1.46851274371 --2.49592643976 --1.46850451827 --2.47866886854 --1.46849957108 --2.46141123772 --1.46849787235 --2.44415390491 --1.46849936247 --2.4268963933 --1.46850410104 --2.40963894129 --1.46851208806 --2.39238119126 --1.46852335334 --2.37512350083 --1.46853780746 --2.35786539316 --1.46855551004 --2.34060710668 --1.46857640147 --2.32334822417 --1.46860057116 --2.30608922243 --1.46862792969 --2.28882950544 --1.46864339709 --2.26962012052 --1.46862989664 --2.25041240454 --1.46860232949 --2.23315286636 --1.46857795119 --2.21589362621 --1.46855679154 --2.1986349225 --1.46853888034 --2.18137639761 --1.4685242176 --2.16411846876 --1.46851277351 --2.14686059952 --1.46850451827 --2.1296030283 --1.46849957108 --2.11234539747 --1.46849787235 --2.09508806467 --1.46849936247 --2.07783055306 --1.46850410104 --2.06057310105 --1.46851208806 --2.04331535101 --1.46852332354 --2.02605766058 --1.46853777766 --2.00879955292 --1.46855551004 --1.99154126644 --1.46857640147 --1.97428244352 --1.46860057116 --1.95702338219 --1.46862789989 --1.9397636354 --1.46864336729 --1.92055428028 --1.46862989664 --1.9013465941 --1.46860229969 --1.88408699632 --1.46857792139 --1.86682769656 --1.46855679154 --1.84956905246 --1.46853888034 --1.83231058717 --1.4685241878 --1.81505259872 --1.46851274371 --1.79779469967 --1.46850454807 --1.78053715825 --1.46849960089 --1.76327955723 --1.46849787235 --1.74602222443 --1.46849936247 --1.72876468301 --1.46850413084 --1.7115072608 --1.46851211787 --1.69424954057 --1.46852332354 --1.67699182034 --1.46853774786 --1.65973368287 --1.46855548024 --1.6424753964 --1.46857643127 --1.62521657348 --1.46860060096 --1.60795751214 --1.46862795949 --1.59069779515 --1.4686434567 --1.57148849964 --1.46862989664 --1.55228075385 --1.46860229969 --1.53502115607 --1.46857795119 --1.51776191592 --1.46855682134 --1.50050324202 --1.46853896975 --1.48324474693 --1.46852427721 --1.46598678827 --1.46851277351 --1.44872888923 --1.46850451827 --1.43147131801 --1.46849954128 --1.41421368718 --1.46849784255 --1.39695632458 --1.46849936247 --1.37969878316 --1.46850413084 --1.36244139075 --1.46851211787 --1.34518370032 --1.46852332354 --1.32792598009 --1.46853777766 --1.31066781283 --1.46855553985 --1.29340955615 --1.46857643127 --1.27615073323 --1.46860054135 --1.2588916719 --1.46862787009 --1.24163195491 --1.46864336729 --1.22242259979 --1.46862989664 --1.20321491361 --1.46860232949 --1.18595531583 --1.46857795119 --1.16869601607 --1.46855679154 --1.15143737197 --1.46853888034 --1.13417890668 --1.4685242176 --1.11692091823 --1.46851277351 --1.09966298938 --1.46850451827 --1.08240544796 --1.46849954128 --1.06514787674 --1.46849784255 --1.04789054394 --1.46849936247 --1.03063297272 --1.46850410104 --1.0133755207 --1.46851208806 --0.996117815374 --1.46852332354 --0.978860110045 --1.46853777766 --0.961601942778 --1.46855551004 --0.944343656301 --1.46857640147 --0.927084878087 --1.46860057116 --0.909825831652 --1.46862792969 --0.892566084862 --1.46864339709 --0.873356759548 --1.46862989664 --0.854149058461 --1.46860232949 --0.836889475584 --1.46857798099 --0.819630205631 --1.46855682134 --0.802371531725 --1.46853888034 --0.785113036633 --1.4685241878 --0.767855063081 --1.46851274371 --0.750597164035 --1.46850454807 --0.733339607715 --1.46849957109 --0.716081991792 --1.46849787235 --0.698824644089 --1.46849939227 --0.681567102671 --1.46850413084 --0.664309695363 --1.46851211787 --0.647051975131 --1.46852332354 --0.629794254899 --1.46853777766 --0.612536117434 --1.46855551004 --0.59527784586 --1.46857640147 --0.578019022942 --1.46860057116 --0.560759946704 --1.46862789989 --0.543500214815 --1.46864333749 --0.524290904403 --1.46862986684 --0.505083210766 --1.46860229969 --0.487823605538 --1.46857792139 --0.470564328134 --1.46855679154 --0.45330568403 --1.46853888034 --0.436047203839 --1.4685241878 --0.418789222837 --1.46851274371 --0.40153130889 --1.46850451827 --0.384273760021 --1.46849957108 --0.367016166448 --1.46849784255 --0.349758811295 --1.46849933267 --0.332501254975 --1.46850410104 --0.315243832767 --1.46851208806 --0.297986119986 --1.46852332354 --0.280728399754 --1.46853777766 --0.263470247388 --1.46855553985 --0.246211990714 --1.46857643127 --0.228953186423 --1.46860054135 --0.211694110185 --1.46862789989 --0.194434378296 --1.46864339709 --0.175225049257 --1.45152050256 --0.156015470624 --1.45149305463 --0.138755898923 --1.45146879554 --0.121496632695 --1.45144769549 --0.104237979278 --1.4514298737 --0.0869795158505 --1.45141524076 --0.0697215422987 --1.45140382648 --0.0524636311456 --1.45139566064 --0.0352060929872 --1.45139068365 --0.0179484942928 --1.45138895512 --0.000691143563018 --1.45139050484 -0.0165663890075 --1.45139527321 -0.0338237984106 --1.45140314103 -0.0510815083981 --1.45141431689 -0.0683392193168 --1.45142877102 -0.0855973605067 --1.45144644379 -0.102855622768 --1.45146727562 -0.12011442706 --1.4514913559 -0.137373477221 --1.45151859522 -0.154633197933 --1.45153400302 -0.173842597753 --1.45152056217 -0.193050377071 --1.45149308443 -0.210309952497 --1.45146879554 -0.227569215 --1.45144772529 -0.24482787028 --1.4514298737 -0.262086331845 --1.45141524076 -0.279344305396 --1.45140382647 -0.296602219343 --1.45139563084 -0.313859760761 --1.45139068365 -0.331117354333 --1.45138895512 -0.348374694586 --1.45139044523 -0.365632228553 --1.4513951838 -0.382889643311 --1.45140314103 -0.400147356093 --1.4514143467 -0.417405068875 --1.45142877102 -0.434663206339 --1.45144644379 -0.451921463013 --1.45146727562 -0.469180271029 --1.4514913559 -0.486439332366 --1.45151859522 -0.503699071705 --1.45153400302 -0.522908464074 --1.45152053237 -0.542116239667 --1.45149305463 -0.559375807643 --1.45146879554 -0.576635062695 --1.45144772529 -0.593893721699 --1.4514299035 -0.61115218699 --1.45141527056 -0.628410175443 --1.45140382647 -0.645668074489 --1.45139563084 -0.662925601006 --1.45139068365 -0.68018321693 --1.45138895512 -0.697440564633 --1.45139044523 -0.714698091149 --1.45139521361 -0.731955513358 --1.45140317083 -0.749213218689 --1.4514143765 -0.766470909119 --1.45142880082 -0.783729046583 --1.45144644379 -0.800987318158 --1.45146724581 -0.818246141076 --1.45149132609 -0.835505187512 --1.45151859522 -0.852764889598 --1.45153400302 -0.871974304318 --1.45152053237 -0.891182079911 --1.45149305463 -0.908441647887 --1.45146879554 -0.92570091784 --1.45144772529 -0.942959576845 --1.4514298737 -0.960218042135 --1.45141521096 -0.977476000786 --1.45140379668 -0.994733899831 --1.45139563084 -1.01199144125 --1.45139068365 -1.02924907207 --1.45138898492 -1.04650643468 --1.45139050483 -1.06376394629 --1.45139521361 -1.0810213685 --1.45140314103 -1.09827908873 --1.4514143765 -1.11553677916 --1.45142880082 -1.13279491663 --1.45144644379 -1.15005320311 --1.45146727562 -1.16731199622 --1.4514913559 -1.18457105756 --1.45151859522 -1.20183077455 --1.45153400302 -1.22104012966 --1.45152053237 -1.24024790525 --1.45149302482 -1.25750750303 --1.45146876574 -1.27476677298 --1.45144772529 -1.29202541709 --1.4514298737 -1.30928388238 --1.45141521096 -1.32654187084 --1.45140379668 -1.34379979968 --1.45139563084 -1.3610573113 --1.45139068365 -1.37831488252 --1.45138898492 -1.39557224512 --1.45139047503 -1.41282978654 --1.45139521361 -1.43008720875 --1.45140317083 -1.44734492898 --1.4514143467 -1.46460261941 --1.45142877102 -1.48186075687 --1.45144644379 -1.49911901355 --1.45146727562 -1.51637780666 --1.4514913559 -1.533636868 --1.45151862502 -1.55089661479 --1.45153403282 -1.57010602951 --1.45152056217 -1.5893137753 --1.45149308443 -1.60657331347 --1.45146879554 -1.62383261323 --1.4514477551 -1.64109131694 --1.45142993331 -1.65834978223 --1.45141527056 -1.67560771108 --1.45140382647 -1.69286558032 --1.45139560103 -1.71012315154 --1.45139065385 -1.72738078237 --1.45138895512 -1.74463811517 --1.45139044523 -1.76189562678 --1.45139521361 -1.77915304899 --1.45140317083 -1.79641076922 --1.4514143765 -1.81366845965 --1.45142880082 -1.83092659712 --1.4514464736 -1.8481848836 --1.45146730542 -1.86544367671 --1.45149132609 -1.88270273805 --1.45151856542 -1.89996245503 --1.45153400302 -1.91917183995 --1.45152053237 -1.93837964534 --1.45149305463 -1.95563921332 --1.45146879554 -1.97289845347 --1.45144772529 -1.99015709758 --1.4514298737 -2.00741556287 --1.45141524076 -2.02467352152 --1.45140382647 -2.04193145037 --1.45139563084 -2.05918902159 --1.45139068365 -2.07644659281 --1.45138895512 -2.09370392561 --1.45139044523 -2.11096149683 --1.45139521361 -2.12821894884 --1.45140317083 -2.14547663927 --1.4514143467 -2.1627343297 --1.45142877102 -2.17999249697 --1.45144644379 -2.19725078344 --1.45146724581 -2.21450954676 --1.45149132609 -2.23176854849 --1.45151859522 -2.24902826548 --1.45153400302 -2.26823771 --1.45152053237 -2.2874455452 --1.45149305463 -2.30470508337 --1.45146879554 -2.32196432352 --1.45144772529 -2.33922296763 --1.4514298737 -2.35648143291 --1.45141524076 -2.37373942136 --1.45140382647 -2.39099729061 --1.45139563084 -2.40825480223 --1.45139068365 -2.42551243305 --1.45138898492 -2.44276982546 --1.45139047503 -2.46002733707 --1.45139521361 -2.47728472948 --1.45140317083 -2.49454241991 --1.4514143467 -2.51180011034 --1.45142877102 -2.5290582776 --1.45144644379 -2.54631656408 --1.45146727562 -2.563575387 --1.4514913559 -2.58083444834 --1.45151859522 -2.59809416533 --1.45153397322 -2.61730355024 --1.45152053237 -2.63651132583 --1.45149305463 -2.65377092362 --1.45146876574 -2.67103016376 --1.45144772529 -2.68828880787 --1.4514298737 -2.70554733277 --1.45141524076 -2.72280532122 --1.45140382647 -2.74006325006 --1.45139563084 -2.75732076168 --1.45139068365 -2.7745783329 --1.45138895512 -2.7918356657 --1.45139044523 -2.80909311771 --1.45139521361 -2.82635051012 --1.45140317083 -2.84360831976 --1.4514143467 -2.86086606979 --1.45142877102 -2.87812417745 --1.4514464736 -2.89538240432 --1.45146727562 -2.91264122724 --1.45149129629 -2.92990034819 --1.45151859522 -2.94716006517 --1.45153400302 -2.96636945009 --1.45152050256 -2.98557716608 --1.45149305463 -3.00283670426 --1.45146879554 -3.02009600401 --1.45144769549 -3.03735464812 --1.4514298737 -3.0546131134 --1.45141524076 -3.07187110185 --1.45140382648 -3.0891290307 --1.45139566064 -3.10638660192 --1.45139068365 -3.12364417315 --1.45138895512 -3.14090153773 --1.45139050484 --3.12502622605 --1.45139527321 --3.10776889324 --1.45140314103 --3.09051114321 --1.45141431689 --3.07325339318 --1.45142877102 --3.05599528551 --1.45144644379 --3.03873705864 --1.45146727562 --3.02147823572 --1.4514913559 --3.00421911478 --1.45151859522 --2.98695939779 --1.45153400302 --2.96775001287 --1.45152056217 --2.94854229689 --1.45149308443 --2.93128275871 --1.45146879554 --2.91402345896 --1.45144772529 --2.89676481485 --1.4514298737 --2.87950634956 --1.45141524076 --2.86224836111 --1.45140382647 --2.84499043226 --1.45139563084 --2.82773286104 --1.45139068365 --2.81047528982 --1.45138895512 --2.79321795702 --1.45139044523 --2.7759603858 --1.4513951838 --2.7587029934 --1.45140314103 --2.74144530297 --1.4514143467 --2.72418755293 --1.45142877102 --2.70692938566 --1.45144644379 --2.68967115879 --1.45146727562 --2.67241239548 --1.4514913559 --2.65515333414 --1.45151859522 --2.63789361715 --1.45153400302 --2.61868423224 --1.45152053237 --2.59947639704 --1.45149305463 --2.58221679926 --1.45146879554 --2.56495755911 --1.45144772529 --2.54769891501 --1.4514299035 --2.53044050932 --1.45141527056 --2.51318252087 --1.45140382647 --2.49592459202 --1.45139563084 --2.4786670804 --1.45139068365 --2.46140944958 --1.45138895512 --2.44415211678 --1.45139044523 --2.42689460516 --1.45139521361 --2.40963715315 --1.45140317083 --2.39237946272 --1.4514143765 --2.37512177229 --1.45142880082 --2.35786360502 --1.45144644379 --2.34060531855 --1.45146724581 --2.32334649563 --1.45149132609 --2.30608749389 --1.45151859522 --2.28882777691 --1.45153400302 --2.26961833239 --1.45152053237 --2.25041055679 --1.45149305463 --2.23315101862 --1.45146879554 --2.21589177847 --1.45144772529 --2.19863307476 --1.4514298737 --2.18137454987 --1.45141521096 --2.16411662102 --1.45140379668 --2.14685881138 --1.45139563084 --2.12960129976 --1.45139068365 --2.11234360933 --1.45138898492 --2.09508621692 --1.45139050483 --2.07782876492 --1.45139521361 --2.06057137251 --1.45140314103 --2.04331362247 --1.4514143765 --2.02605593204 --1.45142880082 --2.00879782438 --1.45144644379 --1.99153953791 --1.45146727562 --1.97428068519 --1.4514913559 --1.95702162385 --1.45151859522 --1.93976190686 --1.45153400302 --1.92055249214 --1.45152053237 --1.90134474635 --1.45149302482 --1.88408514857 --1.45146876574 --1.86682584882 --1.45144772529 --1.84956720471 --1.4514298737 --1.83230873942 --1.45141521096 --1.81505075097 --1.45140379668 --1.79779288173 --1.45139563084 --1.78053537011 --1.45139068365 --1.76327773929 --1.45138898492 --1.74602040648 --1.45139047503 --1.72876289487 --1.45139521361 --1.71150547266 --1.45140317083 --1.69424775243 --1.4514143467 --1.67699003219 --1.45142877102 --1.65973189473 --1.45144644379 --1.64247363806 --1.45146727562 --1.62521481514 --1.4514913559 --1.6079557538 --1.45151862502 --1.59069603682 --1.45153403282 --1.5714866519 --1.45152056217 --1.5522788763 --1.45149308443 --1.53501930833 --1.45146879554 --1.51776003838 --1.4514477551 --1.50050139427 --1.45142993331 --1.48324292898 --1.45141527056 --1.46598494053 --1.45140382647 --1.44872704148 --1.45139560103 --1.43146950006 --1.45139065385 --1.41421189904 --1.45138895512 --1.39695453644 --1.45139044523 --1.37969699502 --1.45139521361 --1.36243960261 --1.45140317083 --1.34518191218 --1.4514143765 --1.32792419195 --1.45142880082 --1.31066605449 --1.4514464736 --1.29340779782 --1.45146730542 --1.2761489749 --1.45149132609 --1.25888991356 --1.45151856542 --1.24163019658 --1.45153400302 --1.22242081166 --1.45152053237 --1.20321303606 --1.45149305463 --1.18595343828 --1.45146879554 --1.16869416833 --1.45144772529 --1.15143552422 --1.4514298737 --1.13417705893 --1.45141524076 --1.11691907048 --1.45140382647 --1.09966114163 --1.45139563084 --1.08240363002 --1.45139068365 --1.0651460588 --1.45138895512 --1.047888726 --1.45139044523 --1.03063118458 --1.45139521361 --1.01337376237 --1.45140317083 --0.996116057038 --1.4514143467 --0.978858321905 --1.45142877102 --0.961600169539 --1.45144644379 --0.944341897964 --1.45146724581 --0.92708311975 --1.45149132609 --0.909824088216 --1.45151859522 --0.892564341426 --1.45153400302 --0.873354941607 --1.45152053237 --0.854147166014 --1.45149305463 --0.836887583137 --1.45146879554 --0.819628313184 --1.45144772529 --0.80236966908 --1.4514298737 --0.785111203789 --1.45141524076 --0.767853215337 --1.45140382647 --0.750595331192 --1.45139563084 --0.733337804675 --1.45139068365 --0.716080188751 --1.45138898492 --0.698822841048 --1.45139047503 --0.68156529963 --1.45139521361 --0.664307892322 --1.45140317083 --0.647050201893 --1.4514143467 --0.629792496562 --1.45142877102 --0.612534344196 --1.45144644379 --0.595276087522 --1.45146727562 --0.578017279506 --1.4514913559 --0.560758203268 --1.45151859522 --0.543498471379 --1.45153397322 --0.524289086461 --1.45152053237 --0.50508133322 --1.45149305463 --0.487821750343 --1.45146876574 --0.470562472939 --1.45144772529 --0.453303828835 --1.4514298737 --0.436045363545 --1.45141524076 --0.418787389994 --1.45140382647 --0.401529490948 --1.45139563084 --0.38427194953 --1.45139068365 --0.367014355957 --1.45138895512 --0.349757008254 --1.45139044523 --0.332499459386 --1.45139521361 --0.315242052078 --1.45140317083 --0.297984346747 --1.4514143467 --0.280726633966 --1.45142877102 --0.263468489051 --1.4514464736 --0.246210228652 --1.45146727562 --0.228951431811 --1.45149129629 --0.211692370475 --1.45151859522 --0.194432646036 --1.45153400302 --0.175223246217 --1.43438383937 --0.156013578177 --1.43435648084 --0.1387540102 --1.43433231115 --0.121494755149 --1.43431130052 --0.104236109182 --1.43429356813 --0.0869776513427 --1.434278965 --0.0697196843102 --1.43426755071 --0.0524617796764 --1.43425944447 --0.0352042503655 --1.43425449729 --0.0179466602858 --1.43425276875 --0.000689316540957 --1.43425431847 -0.0165682078805 --1.43425905705 -0.033825609833 --1.43426692486 -0.0510833142325 --1.43427807093 -0.0683410158381 --1.43429243564 -0.0855991467833 --1.43431001901 -0.102857401594 --1.43433076143 -0.120116198435 --1.4343547523 -0.137375246733 --1.43438190222 -0.154634959996 --1.43439725041 -0.17384441942 --1.43438386917 -0.193052265793 --1.43435648084 -0.210311837494 --1.43433228135 -0.227571099996 --1.43431130052 -0.244829751551 --1.43429350853 -0.26208820194 --1.43427893519 -0.279346168041 --1.43426758051 -0.296604074538 --1.43425944447 -0.313861601055 --1.43425449729 -0.331119187176 --1.43425276875 -0.348376527429 --1.43425425887 -0.365634053945 --1.43425896764 -0.382891453803 --1.43426689506 -0.400149151683 --1.43427807093 -0.417406857014 --1.43429243564 -0.434664994478 --1.43431004882 -0.451923251152 --1.43433082104 -0.469182044267 --1.43435478211 -0.486441090703 --1.43438190222 -0.503700822592 --1.43439725041 -0.522910282016 --1.43438380956 -0.542118132114 --1.43435645103 -0.559377700091 --1.43433228135 -0.576636940241 --1.43431127071 -0.593895584345 --1.43429356813 -0.611154049635 --1.4342790246 -0.628412023187 --1.43426761031 -0.645669922233 --1.43425941467 -0.66292744875 --1.43425446749 -0.680185034871 --1.43425276875 -0.697442382574 --1.43425425887 -0.714699909091 --1.43425899744 -0.731957316399 --1.43426692486 -0.74921502173 --1.43427807093 -0.766472727061 --1.43429243564 -0.783730849624 --1.43431001901 -0.800989091396 --1.43433076143 -0.818247914314 --1.4343547523 -0.835506975651 --1.43438190222 -0.852766662836 --1.43439725041 -0.87197612226 --1.43438383937 -0.891183972358 --1.43435648084 -0.908443525433 --1.43433231115 -0.925702780485 --1.43431130052 -0.94296143949 --1.43429350853 -0.96021990478 --1.43427890539 -0.977477863431 --1.43426755071 -0.994735747576 --1.43425944447 -1.01199325919 --1.43425449729 -1.02925089002 --1.43425276875 -1.04650825262 --1.43425428867 -1.06376576423 --1.43425899744 -1.08102318644 --1.43426689506 -1.09828087688 --1.43427810073 -1.11553856731 --1.43429246545 -1.13279670477 --1.43431004882 -1.15005496144 --1.43433082104 -1.16731375456 --1.43435478211 -1.18457281589 --1.43438190222 -1.20183253288 --1.43439725041 -1.22104197741 --1.43438383937 -1.24024981261 --1.43435645103 -1.25750938058 --1.43433228135 -1.27476865053 --1.43431130052 -1.29202729463 --1.43429350853 -1.30928575993 --1.43427890539 -1.32654374838 --1.43426755071 -1.34380164743 --1.43425944447 -1.36105915904 --1.43425449729 -1.37831673026 --1.43425276875 -1.39557406306 --1.43425425887 -1.41283157468 --1.43425899744 -1.43008899689 --1.43426692486 -1.44734674692 --1.43427807093 -1.46460443735 --1.43429243564 -1.48186254501 --1.43431001901 -1.49912080169 --1.43433076143 -1.51637959481 --1.4343547523 -1.53363862634 --1.43438190222 -1.55089834333 --1.43439725041 -1.57010781765 --1.43438386917 -1.58931565285 --1.43435651064 -1.60657522082 --1.43433231115 -1.62383449078 --1.43431136012 -1.64109316468 --1.43429356813 -1.65835162997 --1.434278965 -1.67560955882 --1.43426758051 -1.69286742807 --1.43425938487 -1.71012499929 --1.43425446749 -1.72738263011 --1.43425276875 -1.74463996291 --1.43425425887 -1.76189747453 --1.43425899744 -1.77915486693 --1.43426692486 -1.79641255736 --1.43427810073 -1.81367024779 --1.43429246545 -1.83092838526 --1.43431004882 -1.84818664193 --1.43433082104 -1.86544543505 --1.43435478211 -1.88270449639 --1.43438190222 -1.89996421337 --1.43439725041 -1.91917368769 --1.43438383937 -1.93838152289 --1.43435645103 -1.95564106107 --1.43433228135 -1.97290033102 --1.43431130052 -1.99015897512 --1.43429350853 -2.00741741061 --1.43427893519 -2.02467536927 --1.43426758051 -2.04193329811 --1.43425944447 -2.05919086933 --1.43425449729 -2.07644844055 --1.43425276875 -2.09370577335 --1.43425428867 -2.11096334457 --1.43425902724 -2.12822073698 --1.43426692486 -2.14547842741 --1.43427807093 -2.16273611784 --1.43429243564 -2.1799942851 --1.43431004882 -2.19725257158 --1.43433079123 -2.2145113349 --1.4343547523 -2.23177033663 --1.43438190222 -2.24903005361 --1.43439725041 -2.26823955774 --1.43438380956 -2.28744739294 --1.43435645103 -2.30470693112 --1.43433231115 -2.32196617127 --1.43431130052 -2.33922481537 --1.43429353833 -2.35648334027 --1.43427896499 -2.37374132872 --1.43426758051 -2.39099913836 --1.43425944447 -2.40825664997 --1.43425449729 -2.4255142808 --1.43425276875 -2.4427716732 --1.43425428867 -2.46002918482 --1.43425902724 -2.47728651762 --1.43426692486 -2.49454420805 --1.43427807093 -2.51180189848 --1.43429243564 -2.52906006574 --1.43431001901 -2.54631835222 --1.43433079123 -2.56357711554 --1.43435478211 -2.58083623648 --1.43438190222 -2.59809595347 --1.43439725041 -2.61730539799 --1.43438386917 -2.63651323319 --1.43435648084 -2.65377277136 --1.43433228135 -2.67103201151 --1.43431130052 -2.68829065561 --1.43429350853 -2.70554918051 --1.43427893519 -2.72280710936 --1.43426758051 -2.74006503821 --1.43425944447 -2.75732260943 --1.43425452709 -2.77458018064 --1.43425279855 -2.79183751345 --1.43425428867 -2.80909496546 --1.43425902724 -2.82635235786 --1.43426692486 -2.8436101079 --1.43427807093 -2.86086785793 --1.43429243564 -2.8781259656 --1.43431004882 -2.89538419246 --1.43433079123 -2.91264301539 --1.4343547523 -2.92990207672 --1.43438190222 -2.94716179371 --1.43439725041 -2.96637123823 --1.43438383937 -2.98557907343 --1.43435648084 -3.00283867121 --1.43433231115 -3.02009797096 --1.43431130052 -3.03735661507 --1.43429356813 -3.05461502076 --1.434278965 -3.0718729496 --1.43426755071 -3.08913087844 --1.43425944447 -3.10638839006 --1.43425449729 -3.12364596128 --1.43425276875 -3.14090332587 --1.43425431847 --3.12502449751 --1.43425905705 --3.10776710511 --1.43426692486 --3.09050935507 --1.43427807093 --3.07325160503 --1.43429243564 --3.05599349737 --1.43431001901 --3.0387352705 --1.43433076143 --3.02147644758 --1.4343547523 --3.00421738625 --1.43438190222 --2.98695766926 --1.43439725041 --2.96774822473 --1.43438386917 --2.94854038954 --1.43435648084 --2.93128079176 --1.43433228135 --2.91402149201 --1.43431130052 --2.8967628479 --1.43429350853 --2.87950444222 --1.43427893519 --2.86224651337 --1.43426758051 --2.84498858452 --1.43425944447 --2.8277310729 --1.43425449729 --2.81047350168 --1.43425276875 --2.79321616888 --1.43425425887 --2.77595859766 --1.43425896764 --2.75870114565 --1.43426689506 --2.74144345522 --1.43427807093 --2.72418576479 --1.43429243564 --2.70692765713 --1.43431004882 --2.68966937065 --1.43433082104 --2.67241054773 --1.43435478211 --2.655151546 --1.43438190222 --2.63789182901 --1.43439725041 --2.6186823845 --1.43438380956 --2.59947454929 --1.43435645103 --2.58221495152 --1.43433228135 --2.56495571137 --1.43431127071 --2.54769706726 --1.43429356813 --2.53043860197 --1.4342790246 --2.51318061352 --1.43426761031 --2.49592274428 --1.43425941467 --2.47866523266 --1.43425446749 --2.46140760183 --1.43425276875 --2.44415026903 --1.43425425887 --2.42689275741 --1.43425899744 --2.40963536501 --1.43426692486 --2.39237767458 --1.43427807093 --2.37511992455 --1.43429243564 --2.35786175728 --1.43431001901 --2.34060353041 --1.43433076143 --2.32334476709 --1.4343547523 --2.30608570576 --1.43438190222 --2.28882598877 --1.43439725041 --2.26961654425 --1.43438383937 --2.25040870905 --1.43435648084 --2.23314917087 --1.43433231115 --2.21588993072 --1.43431130052 --2.19863122701 --1.43429350853 --2.18137270212 --1.43427890539 --2.16411477327 --1.43426755071 --2.14685696363 --1.43425944447 --2.12959945202 --1.43425449729 --2.11234176159 --1.43425276875 --2.09508436918 --1.43425428867 --2.07782691717 --1.43425899744 --2.06056952477 --1.43426689506 --2.04331183434 --1.43427810073 --2.02605414391 --1.43429246545 --2.00879597664 --1.43431004882 --1.99153771997 --1.43433082104 --1.97427892685 --1.43435478211 --1.95701986551 --1.43438190222 --1.93976014853 --1.43439725041 --1.92055070401 --1.43438383937 --1.90134286881 --1.43435645103 --1.88408327103 --1.43433228135 --1.86682400107 --1.43431130052 --1.84956535697 --1.43429350853 --1.83230689168 --1.43427890539 --1.81504893303 --1.43426755071 --1.79779103399 --1.43425944447 --1.78053349257 --1.43425449729 --1.76327589154 --1.43425276875 --1.74601855874 --1.43425425887 --1.72876104712 --1.43425899744 --1.71150365472 --1.43426692486 --1.69424596429 --1.43427807093 --1.67698824406 --1.43429243564 --1.65973007679 --1.43431001901 --1.64247184992 --1.43433076143 --1.62521305681 --1.4343547523 --1.60795399546 --1.43438190222 --1.59069427848 --1.43439725041 --1.57148480416 --1.43438386917 --1.55227696896 --1.43435651064 --1.53501743078 --1.43433231115 --1.51775816083 --1.43431136012 --1.50049951672 --1.43429356813 --1.48324105143 --1.434278965 --1.46598306298 --1.43426758051 --1.44872519374 --1.43425938487 --1.43146768212 --1.43425446749 --1.4142100811 --1.43425276875 --1.39695271849 --1.43425425887 --1.37969517708 --1.43425899744 --1.36243775487 --1.43426692486 --1.34518006444 --1.43427810073 --1.32792237401 --1.43429246545 --1.31066426635 --1.43431004882 --1.29340600967 --1.43433082104 --1.27614718676 --1.43435478211 --1.25888812542 --1.43438190222 --1.24162840843 --1.43439725041 --1.22241896391 --1.43438383937 --1.20321112871 --1.43435645103 --1.18595156073 --1.43433228135 --1.16869232058 --1.43431130052 --1.15143367648 --1.43429350853 --1.13417521119 --1.43427893519 --1.11691722274 --1.43426758051 --1.09965929389 --1.43425944447 --1.08240178228 --1.43425449729 --1.06514421106 --1.43425276875 --1.04788687825 --1.43425428867 --1.03062936663 --1.43425902724 --1.01337197423 --1.43426692486 --0.996114253998 --1.43427807093 --0.978856518864 --1.43429243564 --0.9615983814 --1.43431004882 --0.944340139627 --1.43433079123 --0.927081346512 --1.4343547523 --0.909822300076 --1.43438190222 --0.892562583089 --1.43439725041 --0.873353123665 --1.43438380956 --0.854145288468 --1.43435645103 --0.836885720491 --1.43433231115 --0.819626450539 --1.43431130052 --0.802367806435 --1.43429353833 --0.785109341145 --1.43427896499 --0.767851367593 --1.43426758051 --0.750593483448 --1.43425944447 --0.733335956931 --1.43425449729 --0.716078355908 --1.43425276875 --0.698821008205 --1.43425428867 --0.681563481688 --1.43425902724 --0.664306089282 --1.43426692486 --0.647048398852 --1.43427807093 --0.629790708423 --1.43429243564 --0.612532570958 --1.43431001901 --0.595274314284 --1.43433079123 --0.578015506267 --1.43435478211 --0.56075643003 --1.43438190222 --0.543496713042 --1.43439725041 --0.524287253618 --1.43438386917 --0.505079433322 --1.43435648084 --0.487819872796 --1.43433228135 --0.470560595393 --1.43431130052 --0.45330195874 --1.43429350853 --0.436043508351 --1.43427893519 --0.418785534799 --1.43426758051 --0.401527628303 --1.43425944447 --0.384270101786 --1.43425452709 --0.367012523115 --1.43425279855 --0.349755175411 --1.43425428867 --0.332497633993 --1.43425902724 --0.315240241587 --1.43426692486 --0.297982551157 --1.43427807093 --0.280724845827 --1.43429243564 --0.263466708362 --1.43431004882 --0.246208447963 --1.43433079123 --0.228949647397 --1.4343547523 --0.211690600961 --1.43438190222 --0.194430883974 --1.43439725041 --0.175221417099 --1.41721609235 --0.156011663377 --1.41718885302 --0.138752102852 --1.41716477275 --0.121492851526 --1.41714385152 --0.104234209284 --1.41712611913 --0.0869757588953 --1.4171115756 --0.069717801176 --1.41710028052 --0.0524599067867 --1.41709220409 --0.0352023844607 --1.4170872569 --0.0179448015988 --1.41708552837 --0.000687464838847 --1.41708704829 -0.0165700518992 --1.41709175706 -0.0338274454698 --1.41709962487 -0.0510851424187 --1.41711074114 -0.0683428384364 --1.41712501645 -0.0856009591371 --1.41714251042 -0.102859202772 --1.41716316342 -0.120117994025 --1.41718706489 -0.137377038598 --1.41721412539 -0.15463674441 --1.41722941399 -0.173846270889 --1.41721609235 -0.193054184317 --1.41718879342 -0.210313748568 --1.41716468334 -0.22757300362 --1.41714379191 -0.244831647724 --1.41712608933 -0.262090101838 --1.4171115756 -0.279348053038 --1.41710025072 -0.296605937183 --1.41709217429 -0.3138634637 --1.4170872569 -0.331121049821 --1.41708552837 -0.348378375173 --1.41708701849 -0.365635894239 --1.41709172726 -0.382893286645 --1.41709962487 -0.400150977075 --1.41711074114 -0.417408682406 --1.41712501645 -0.434666804969 --1.41714254022 -0.451925054192 --1.41716322303 -0.469183847308 --1.41718709469 -0.486442886293 --1.41721412539 -0.503702588379 --1.41722941399 -0.522912114858 --1.41721603274 -0.542120054364 --1.41718879342 -0.55937962234 --1.41716471314 -0.576638862491 --1.41714376211 -0.593897506595 --1.41712611913 -0.611155956984 --1.41711166501 -0.628413900733 --1.41710034013 -0.645671799779 --1.41709217429 -0.662929326296 --1.41708722711 -0.680186867714 --1.41708552837 -0.697444230318 --1.41708701849 -0.714701771736 --1.41709172726 -0.731959149242 --1.41709962487 -0.749216854572 --1.41711074114 -0.766474559903 --1.41712501645 -0.783732667565 --1.41714251042 -0.800990894437 --1.41716319323 -0.818249702454 --1.41718709469 -0.83550876379 --1.41721412539 -0.852768465877 --1.41722941399 -0.871977970004 --1.41721606254 -0.891185894609 --1.41718879342 -0.908445462584 --1.41716471315 -0.925704687834 --1.41714382171 -0.942963331938 --1.41712611913 -0.960221812129 --1.4171115756 -0.977479770779 --1.41710028052 -0.994737640023 --1.41709220409 -1.01199513674 --1.4170872569 -1.02925273776 --1.41708552837 -1.04651007056 --1.41708701849 -1.06376758218 --1.41709172726 -1.08102500439 --1.41709962487 -1.09828269482 --1.41711074114 -1.11554038525 --1.41712501645 -1.13279849291 --1.41714254022 -1.15005674958 --1.41716322303 -1.1673155725 --1.41718709469 -1.18457460403 --1.41721412539 -1.20183429122 --1.41722941399 -1.22104382515 --1.41721606254 -1.24025171995 --1.41718876362 -1.25751128793 --1.41716468334 -1.27477055788 --1.41714382171 -1.29202920198 --1.41712611913 -1.30928766728 --1.4171115756 -1.32654562593 --1.41710025072 -1.34380352497 --1.41709217429 -1.36106103659 --1.4170872569 -1.37831860781 --1.41708552837 -1.39557594061 --1.41708701849 -1.41283345222 --1.41709172726 -1.43009084463 --1.41709962487 -1.44734856486 --1.41711074114 -1.46460625529 --1.41712501645 -1.48186436296 --1.41714251042 -1.49912261963 --1.41716319323 -1.51638138294 --1.41718709469 -1.53364041448 --1.41721412539 -1.55090013146 --1.41722944379 -1.57010966539 --1.41721609235 -1.58931759 --1.41718882322 -1.60657715797 --1.41716477275 -1.62383639812 --1.41714385152 -1.64109504223 --1.41712608933 -1.65835350752 --1.4171115756 -1.67561143637 --1.41710025073 -1.69286930561 --1.41709214449 -1.71012687683 --1.4170872569 -1.72738447786 --1.41708552837 -1.74464181066 --1.41708701849 -1.76189932227 --1.41709172726 -1.77915668488 --1.41709962487 -1.7964143753 --1.41711074114 -1.81367206573 --1.41712501645 -1.8309301734 --1.41714254022 -1.84818843007 --1.41716322303 -1.86544725299 --1.41718709469 -1.88270628452 --1.41721412539 -1.89996600151 --1.41722941399 -1.91917556524 --1.41721609235 -1.93838343024 --1.41718879342 -1.95564296841 --1.41716468334 -1.97290223837 --1.41714379191 -1.99016088247 --1.41712608933 -2.00741934776 --1.4171115756 -2.02467733622 --1.41710025072 -2.04193520546 --1.41709217429 -2.05919271708 --1.4170872569 -2.0764502883 --1.41708552837 -2.0937076211 --1.41708704829 -2.11096519232 --1.41709175706 -2.12822258472 --1.41709962487 -2.14548027515 --1.41711074114 -2.16273796558 --1.41712501645 -2.17999613285 --1.41714254022 -2.19725435973 --1.41716322303 -2.21451312304 --1.41718709469 -2.23177212477 --1.41721412539 -2.24903178215 --1.41722941399 -2.26824134588 --1.41721603274 -2.28744930029 --1.41718876362 -2.30470889807 --1.41716471315 -2.32196813822 --1.41714379191 -2.33922678232 --1.41712611913 -2.35648524761 --1.41711160541 -2.37374317646 --1.41710025072 -2.3910010457 --1.41709214449 -2.40825861692 --1.4170872271 -2.42551624775 --1.41708552837 -2.44277352094 --1.41708704829 -2.46003097296 --1.41709175706 -2.47728836536 --1.41709962487 -2.49454605579 --1.41711074114 -2.51180374622 --1.41712501645 -2.52906191349 --1.41714251042 -2.54632019997 --1.41716319323 -2.56357896328 --1.41718709469 -2.58083802462 --1.41721412539 -2.59809774161 --1.41722941399 -2.61730724573 --1.41721609235 -2.63651514053 --1.41718879342 -2.65377467871 --1.41716468334 -2.67103391886 --1.41714382171 -2.68829256296 --1.41712611913 -2.70555102825 --1.4171115756 -2.7228089571 --1.41710025072 -2.74006688595 --1.41709214449 -2.75732445717 --1.4170872569 -2.77458202839 --1.41708555817 -2.79183936119 --1.41708701849 -2.8090968132 --1.41709172726 -2.82635420561 --1.41709962487 -2.84361189604 --1.41711074114 -2.86086958647 --1.41712501645 -2.87812775373 --1.41714254022 -2.89538604021 --1.41716322303 -2.91264480352 --1.41718709469 -2.92990380526 --1.41721412539 -2.94716352224 --1.41722941399 -2.96637308597 --1.41721609235 -2.98558104038 --1.41718885302 -3.00284057856 --1.41716477275 -3.0200998187 --1.41714385152 -3.03735846281 --1.41712611913 -3.0546169281 --1.4171115756 -3.07187485695 --1.41710028052 -3.08913272619 --1.41709220409 -3.10639023781 --1.4170872569 -3.12364780903 --1.41708552837 -3.14090517361 --1.41708704829 --3.12502264976 --1.41709175706 --3.10776525736 --1.41709962487 --3.09050750733 --1.41711074114 --3.0732498169 --1.41712501645 --3.05599170923 --1.41714251042 --3.03873342276 --1.41716316342 --3.02147465944 --1.41718706489 --3.00421565771 --1.41721412539 --2.98695594073 --1.41722941399 --2.96774637699 --1.41721609235 --2.94853842258 --1.41718879342 --2.93127888441 --1.41716468334 --2.91401964426 --1.41714379191 --2.89676100016 --1.41712608933 --2.87950253487 --1.4171115756 --2.86224460602 --1.41710025072 --2.84498673677 --1.41709217429 --2.82772922516 --1.4170872569 --2.81047165394 --1.41708552837 --2.79321432114 --1.41708701849 --2.77595674992 --1.41709172726 --2.75869935751 --1.41709962487 --2.74144166708 --1.41711074114 --2.72418397665 --1.41712501645 --2.70692592859 --1.41714254022 --2.68966764211 --1.41716322303 --2.67240875959 --1.41718709469 --2.65514975786 --1.41721412539 --2.63789010048 --1.41722941399 --2.61868053675 --1.41721603274 --2.59947258234 --1.41718879342 --2.58221298456 --1.41716471314 --2.56495374441 --1.41714376211 --2.54769510031 --1.41712611913 --2.53043663502 --1.41711166501 --2.51317870617 --1.41710034013 --2.49592083692 --1.41709217429 --2.47866332531 --1.41708722711 --2.46140581369 --1.41708552837 --2.44414842129 --1.41708701849 --2.42689085007 --1.41709172726 --2.40963351727 --1.41709962487 --2.39237582684 --1.41711074114 --2.3751180768 --1.41712501645 --2.35785990953 --1.41714251042 --2.34060174227 --1.41716319323 --2.32334297895 --1.41718709469 --2.30608385801 --1.41721412539 --2.28882414103 --1.41722941399 --2.26961469651 --1.41721606254 --2.2504068017 --1.41718879342 --2.23314720392 --1.41716471315 --2.21588796377 --1.41714382171 --2.19862931967 --1.41712611913 --2.18137085438 --1.4171115756 --2.16411292553 --1.41710028052 --2.14685505628 --1.41709220409 --2.12959754467 --1.4170872569 --2.11233991385 --1.41708552837 --2.09508252144 --1.41708701849 --2.07782506943 --1.41709172726 --2.06056767702 --1.41709962487 --2.04330998659 --1.41711074114 --2.02605229616 --1.41712501645 --2.00879412889 --1.41714254022 --1.99153587222 --1.41716322303 --1.97427710891 --1.41718709469 --1.95701807737 --1.41721412539 --1.93975836038 --1.41722941399 --1.92054885626 --1.41721606254 --1.90134093166 --1.41718876362 --1.88408136368 --1.41716468334 --1.86682212353 --1.41714382171 --1.84956347942 --1.41712611913 --1.83230501413 --1.4171115756 --1.81504705549 --1.41710025072 --1.79778915644 --1.41709217429 --1.78053161502 --1.4170872569 --1.7632740438 --1.41708552837 --1.746016711 --1.41708701849 --1.72875919938 --1.41709172726 --1.71150180697 --1.41709962487 --1.69424411655 --1.41711074114 --1.67698642612 --1.41712501645 --1.65972825885 --1.41714251042 --1.64247003197 --1.41716319323 --1.62521126866 --1.41718709469 --1.60795220733 --1.41721412539 --1.59069249034 --1.41722944379 --1.57148295641 --1.41721609235 --1.55227503181 --1.41718882322 --1.53501549363 --1.41716477275 --1.51775625348 --1.41714385152 --1.50049760937 --1.41712608933 --1.48323917389 --1.4171115756 --1.46598121524 --1.41710025073 --1.4487233162 --1.41709214449 --1.43146580458 --1.4170872569 --1.41420820355 --1.41708552837 --1.39695087075 --1.41708701849 --1.37969335914 --1.41709172726 --1.36243593693 --1.41709962487 --1.3451782465 --1.41711074114 --1.32792055607 --1.41712501645 --1.31066244841 --1.41714254022 --1.29340419173 --1.41716322303 --1.27614539862 --1.41718709469 --1.25888636708 --1.41721412539 --1.24162665009 --1.41722941399 --1.22241711616 --1.41721609235 --1.20320922136 --1.41718879342 --1.18594965339 --1.41716468334 --1.16869041324 --1.41714379191 --1.15143179894 --1.41712608933 --1.13417333364 --1.4171115756 --1.11691534519 --1.41710025072 --1.09965744615 --1.41709217429 --1.08239993453 --1.4170872569 --1.06514236331 --1.41708552837 --1.04788503051 --1.41708704829 --1.03062748909 --1.41709175706 --1.01337009669 --1.41709962487 --0.996112406254 --1.41711074114 --0.978854700923 --1.41712501645 --0.961596563458 --1.41714254022 --0.944338336587 --1.41716322303 --0.927079558372 --1.41718709469 --0.909820511937 --1.41721412539 --0.892560824752 --1.41722941399 --0.873351290822 --1.41721603274 --0.854143366218 --1.41718876362 --0.836883813143 --1.41716471315 --0.819624558091 --1.41714379191 --0.802365913987 --1.41712611913 --0.785107448697 --1.41711160541 --0.767849490047 --1.41710025072 --0.750591605902 --1.41709214449 --0.733334079385 --1.4170872271 --0.716076478362 --1.41708552837 --0.69881914556 --1.41708704829 --0.681561648845 --1.41709175706 --0.664304256439 --1.41709962487 --0.647046566009 --1.41711074114 --0.629788890481 --1.41712501645 --0.612530767918 --1.41714251042 --0.595272496343 --1.41716319323 --0.578013688326 --1.41718709469 --0.560754656792 --1.41721412539 --0.543494954705 --1.41722941399 --0.524285405874 --1.41721609235 --0.505077518523 --1.41718879342 --0.487817965448 --1.41716468334 --0.470558688044 --1.41714382171 --0.453300066292 --1.41712611913 --0.436041623354 --1.4171115756 --0.418783657253 --1.41710025072 --0.401525758207 --1.41709214449 --0.384268239141 --1.4170872569 --0.36701066792 --1.41708555817 --0.349753320217 --1.41708701849 --0.332495801151 --1.41709172726 --0.315238408744 --1.41709962487 --0.297980710864 --1.41711074114 --0.280723020434 --1.41712501645 --0.26346489042 --1.41714254022 --0.246206637472 --1.41716322303 --0.228947848082 --1.41718709469 --0.211688809097 --1.41721412539 --0.19442909956 --1.41722941399 --0.175219569355 --1.40005332232 --0.156007699668 --1.4000261724 --0.138748154044 --1.40000221133 --0.121488917619 --1.39998140931 --0.104230294004 --1.39996373653 --0.0869718585163 --1.39994925261 --0.0697139166295 --1.39993801713 --0.0524560390041 --1.3999299407 --0.0351985311136 --1.39992502332 --0.0179409640841 --1.39992332459 --0.000683643389492 --1.3999247849 -0.0165738575161 --1.39992946386 -0.0338312350214 --1.39993733168 -0.0510889152065 --1.39994841814 -0.0683465991169 --1.39996266365 -0.0856047049165 --1.39998009801 -0.102862929925 --1.40000069142 -0.120121711865 --1.40002447367 -0.137380741536 --1.40005141497 -0.154640432447 --1.40006664395 -0.173850100487 --1.40005332232 -0.193058148026 --1.4000261426 -0.210317693651 --1.40000215173 -0.227576933801 --1.3999813497 -0.244835559279 --1.39996373653 -0.262093998492 --1.39994928241 -0.279351934791 --1.39993798733 -0.296609804034 --1.3999299109 -0.313867323101 --1.39992502332 -0.331124894321 --1.39992332459 -0.348382197321 --1.3999248147 -0.365639701485 --1.39992949367 -0.382897078991 --1.39993736148 -0.400154754519 --1.39994844794 -0.417412444949 --1.39996266365 -0.434670552611 --1.39998009801 -0.451928786934 --1.40000069142 -0.469187565148 --1.40002447367 -0.486446589231 --1.40005138516 -0.503706276417 --1.40006661415 -0.522915944457 --1.40005332232 -0.542124003172 --1.4000262022 -0.559383556247 --1.40000224113 -0.576642796397 --1.39998137951 -0.593901410699 --1.39996373653 -0.611159846186 --1.39994931221 -0.628417789936 --1.39993804693 -0.64567565918 --1.3999299407 -0.662933170795 --1.39992502332 -0.680190727115 --1.39992332459 -0.697448059917 --1.3999247849 -0.714705586434 --1.39992949367 -0.731962949038 --1.39993739128 -0.749220624566 --1.39994844794 -0.766478314996 --1.39996266365 -0.783736392856 --1.39998009801 -0.800994604826 --1.40000066161 -0.818253397942 --1.40002444387 -0.835512444377 --1.40005138516 -0.852772146463 --1.40006661415 -0.871981799603 --1.40005329251 -0.891189858317 --1.40002611279 -0.908449411392 --1.40000215173 -0.925708621741 --1.39998137951 -0.942967250944 --1.39996376633 -0.960225701332 --1.39994928241 -0.977483645081 --1.39993801713 -0.994741514324 --1.3999299407 -1.01199901104 --1.39992502332 -1.02925658226 --1.39992332459 -1.04651388526 --1.3999248147 -1.06377136707 --1.39992952347 -1.08102875948 --1.39993736148 -1.09828644991 --1.39994841814 -1.11554414034 --1.39996266365 -1.132802248 --1.39998009801 -1.15006047487 --1.40000069142 -1.16731926799 --1.40002447367 -1.18457829952 --1.40005138516 -1.20183798671 --1.40006661415 -1.22104763985 --1.40005332232 -1.24025568366 --1.4000261426 -1.25751525164 --1.40000215173 -1.27477449179 --1.39998137951 -1.29203310609 --1.39996376633 -1.30929154158 --1.39994928241 -1.32654950023 --1.39993798733 -1.34380739927 --1.3999299109 -1.36106488108 --1.39992502332 -1.3783224523 --1.39992332459 -1.39557978511 --1.3999248147 -1.41283726692 --1.39992952347 -1.43009462952 --1.39993739128 -1.44735231995 --1.39994847775 -1.46461001038 --1.39996269346 -1.48186811805 --1.39998009801 -1.49912634492 --1.40000066161 -1.51638510823 --1.40002447367 -1.53364413977 --1.40005141497 -1.55090382695 --1.40006664395 -1.57011350989 --1.40005332232 -1.58932155371 --1.4000261426 -1.60658109188 --1.40000221133 -1.62384033203 --1.39998137951 -1.64109894633 --1.39996370673 -1.65835741162 --1.39994925261 -1.67561534047 --1.39993798733 -1.69287320972 --1.3999299109 -1.71013075113 --1.39992499351 -1.72738829255 --1.39992329478 -1.74464559555 --1.3999247849 -1.76190310716 --1.39992949367 -1.77916046977 --1.39993736148 -1.7964181304 --1.39994841814 -1.81367582083 --1.39996266365 -1.83093392849 --1.39998009801 -1.84819215536 --1.40000069142 -1.86545094847 --1.40002447367 -1.88270998001 --1.40005138516 -1.899969697 --1.40006661415 -1.91917937994 --1.40005332232 -1.93838739395 --1.4000261426 -1.95564693213 --1.40000215173 -1.97290617228 --1.3999813497 -1.99016481638 --1.39996373653 -2.00742328167 --1.39994928241 -2.02468121052 --1.39993798733 -2.04193907976 --1.3999299109 -2.05919659138 --1.39992502332 -2.07645410299 --1.39992332459 -2.09371137619 --1.3999248147 -2.11096894741 --1.39992952347 -2.12822639942 --1.39993736148 -2.14548408985 --1.39994841814 -2.16274178028 --1.39996266365 -2.17999988794 --1.39998009801 -2.19725805521 --1.40000066161 -2.21451681852 --1.40002444387 -2.23177582025 --1.40005138516 -2.24903547764 --1.40006661415 -2.26824522018 --1.40005329251 -2.2874532938 --1.40002611279 -2.30471283197 --1.40000215173 -2.32197207212 --1.3999813497 -2.33923071623 --1.39996373653 -2.35648912191 --1.39994928241 -2.37374705076 --1.39993798733 -2.39100497961 --1.3999298811 -2.40826249123 --1.39992499351 -2.42552006245 --1.39992332459 -2.44277733564 --1.3999247849 -2.46003478765 --1.39992949367 -2.47729218006 --1.39993739128 -2.49454987049 --1.39994844794 -2.51180756092 --1.39996266365 -2.52906566858 --1.39998009801 -2.54632389546 --1.40000069142 -2.56358265877 --1.40002447367 -2.5808416605 --1.40005138516 -2.59810137749 --1.40006661415 -2.61731106043 --1.40005335212 -2.63651913404 --1.4000261724 -2.65377867222 --1.40000215173 -2.67103785276 --1.39998137951 -2.68829649687 --1.39996376633 -2.70555496216 --1.39994928241 -2.72281289101 --1.39993798733 -2.74007076025 --1.3999298811 -2.75732827187 --1.39992499351 -2.77458584309 --1.39992332459 -2.79184317589 --1.3999247849 -2.8091006279 --1.39992949367 -2.8263579607 --1.39993736148 -2.84361565113 --1.39994841814 -2.86087334156 --1.39996266365 -2.87813150883 --1.39998009801 -2.8953897953 --1.40000066161 -2.91264855861 --1.40002444387 -2.92990756035 --1.40005141497 -2.94716721773 --1.40006664395 -2.96637690067 --1.40005332232 -2.98558497429 --1.4000261724 -3.00284451246 --1.40000221133 -3.02010375261 --1.39998140931 -3.03736233711 --1.39996373653 -3.0546208024 --1.39994925261 -3.07187873125 --1.39993801713 -3.08913654089 --1.3999299407 -3.10639411211 --1.39992502332 -3.12365168333 --1.39992332459 -3.14090898831 --1.3999247849 --3.12501883507 --1.39992946386 --3.10776150226 --1.39993733168 --3.09050375223 --1.39994841814 --3.0732460618 --1.39996266365 --3.05598795414 --1.39998009801 --3.03872966766 --1.40000069142 --3.02147090435 --1.40002447367 --3.00421190262 --1.40005141497 --2.98695224523 --1.40006664395 --2.96774256229 --1.40005332232 --2.94853448868 --1.4000261426 --2.93127495051 --1.40000215173 --2.91401571035 --1.3999813497 --2.89675712585 --1.39996373653 --2.87949866057 --1.39994928241 --2.86224073172 --1.39993798733 --2.84498292208 --1.3999299109 --2.82772535086 --1.39992502332 --2.81046777964 --1.39992332459 --2.79321050644 --1.3999248147 --2.77595293522 --1.39992949367 --2.75869554281 --1.39993736148 --2.74143791199 --1.39994844794 --2.72418028116 --1.39996266365 --2.7069221735 --1.39998009801 --2.68966388702 --1.40000069142 --2.67240506411 --1.40002447367 --2.65514606238 --1.40005138516 --2.63788640499 --1.40006661415 --2.61867672205 --1.40005332232 --2.59946864843 --1.4000262022 --2.58220905066 --1.40000224113 --2.56494981051 --1.39998137951 --2.54769122601 --1.39996373653 --2.53043282032 --1.39994931221 --2.51317483187 --1.39993804693 --2.49591690302 --1.3999299407 --2.47865945101 --1.39992502332 --2.461401999 --1.39992332459 --2.44414460659 --1.3999247849 --2.42688703537 --1.39992949367 --2.40962970257 --1.39993739128 --2.39237201214 --1.39994844794 --2.37511432171 --1.39996266365 --2.35785621405 --1.39998009801 --2.34059804678 --1.40000066161 --2.32333928347 --1.40002444387 --2.30608022213 --1.40005138516 --2.28882050514 --1.40006661415 --2.2696108222 --1.40005329251 --2.25040274859 --1.40002611279 --2.23314321041 --1.40000215173 --2.21588402987 --1.39998137951 --2.19862538576 --1.39996376633 --2.18136698008 --1.39994928241 --2.16410905123 --1.39993801713 --2.14685112238 --1.3999299407 --2.12959367037 --1.39992502332 --2.11233609915 --1.39992332459 --2.09507870674 --1.3999248147 --2.07782125473 --1.39992952347 --2.06056392193 --1.39993736148 --2.0433062315 --1.39994841814 --2.02604854107 --1.39996266365 --2.00879043341 --1.39998009801 --1.99153217673 --1.40000069142 --1.97427338362 --1.40002447367 --1.95701438189 --1.40005138516 --1.9397546947 --1.40006661415 --1.92054501176 --1.40005332232 --1.90133693814 --1.4000261426 --1.88407739997 --1.40000215173 --1.86681815982 --1.39998137951 --1.84955954552 --1.39996376633 --1.83230111003 --1.39994928241 --1.81504315138 --1.39993798733 --1.79778528213 --1.3999299109 --1.78052777052 --1.39992502332 --1.7632702291 --1.39992332459 --1.7460128963 --1.3999248147 --1.72875538468 --1.39992952347 --1.71149802208 --1.39993739128 --1.69424033165 --1.39994847775 --1.67698264122 --1.39996269346 --1.65972453356 --1.39998009801 --1.64246630669 --1.40000066161 --1.62520754337 --1.40002447367 --1.60794851184 --1.40005141497 --1.59068879485 --1.40006664395 --1.57147914171 --1.40005332232 --1.5522710979 --1.4000261426 --1.53501155973 --1.40000221133 --1.51775231958 --1.39998137951 --1.50049367547 --1.39996370673 --1.48323526978 --1.39994925261 --1.46597734094 --1.39993798733 --1.44871944189 --1.3999299109 --1.43146193027 --1.39992499351 --1.41420435905 --1.39992329478 --1.39694705605 --1.3999247849 --1.37968954444 --1.39992949367 --1.36243215203 --1.39993736148 --1.34517449141 --1.39994841814 --1.32791683078 --1.39996266365 --1.31065872311 --1.39998009801 --1.29340046644 --1.40000069142 --1.27614170313 --1.40002447367 --1.25888267159 --1.40005138516 --1.24162298441 --1.40006661415 --1.22241333127 --1.40005332232 --1.20320525766 --1.4000261426 --1.18594568968 --1.40000215173 --1.16868644953 --1.3999813497 --1.15142786503 --1.39996373653 --1.13416942954 --1.39994928241 --1.11691144109 --1.39993798733 --1.09965357184 --1.3999299109 --1.08239609003 --1.39992502332 --1.06513854861 --1.39992332459 --1.04788121581 --1.3999248147 --1.03062367439 --1.39992952347 --1.01336631179 --1.39993736148 --0.996108636259 --1.39994841814 --0.97885094583 --1.39996266365 --0.961592838168 --1.39998009801 --0.944334611297 --1.40000066161 --0.927075862884 --1.40002444387 --0.909816861153 --1.40005138516 --0.892557159067 --1.40006661415 --0.873347446322 --1.40005329251 --0.854139387608 --1.40002611279 --0.836879864335 --1.40000215173 --0.819620609284 --1.3999813497 --0.80236196518 --1.39996373653 --0.785103529692 --1.39994928241 --0.767845585942 --1.39993798733 --0.750587731599 --1.3999298811 --0.733330234885 --1.39992499351 --0.716072648764 --1.39992332459 --0.698815345764 --1.3999247849 --0.681557863951 --1.39992949367 --0.664300471544 --1.39993739128 --0.647042781114 --1.39994844794 --0.629785120487 --1.39996266365 --0.612527012825 --1.39998009801 --0.595268756151 --1.40000069142 --0.578009963036 --1.40002447367 --0.560750961304 --1.40005138516 --0.54349128902 --1.40006661415 --0.524281591177 --1.40005335212 --0.505073547363 --1.4000261724 --0.487814001739 --1.40000215173 --0.470554746687 --1.39998137951 --0.453296139836 --1.39996376633 --0.43603771925 --1.39994928241 --0.4187797755 --1.39993798733 --0.401521891355 --1.3999298811 --0.38426437974 --1.39992499351 --0.367006823421 --1.39992332459 --0.34974950552 --1.3999247849 --0.332491993904 --1.39992949367 --0.315234608948 --1.39993736148 --0.297976925969 --1.39994841814 --0.280719250441 --1.39996266365 --0.263461142778 --1.39998009801 --0.246202912181 --1.40000066161 --0.228944141418 --1.40002444387 --0.211685117334 --1.40005141497 --0.194425422698 --1.40006664395 --0.175215750932 --1.3829408586 --0.156003635377 --1.38291382789 --0.138744100929 --1.38288998604 --0.12148488313 --1.38286927342 --0.104226281866 --1.38285169005 --0.0869678631425 --1.38283723593 --0.0697099361569 --1.38282603025 --0.0524520743639 --1.38281801343 --0.0351945837029 --1.38281312585 --0.0179370320402 --1.38281142712 --0.000679727643727 --1.38281285763 -0.016577756498 --1.38281747699 -0.0338351172395 --1.382825315 -0.0510927801952 --1.38283637166 -0.0683504473418 --1.38285058737 -0.0856085401028 --1.38286796212 -0.102866752073 --1.38288843632 -0.120125520975 --1.38291212916 -0.137384533882 --1.38293898106 -0.154644209891 --1.38295415044 -0.173854023218 --1.3829408586 -0.193062208593 --1.38291379809 -0.21032173559 --1.38288992643 -0.22758096084 --1.38286921382 -0.244839563966 --1.38285166025 -0.262097977102 --1.38283726573 -0.27935590595 --1.38282606006 -0.296613782644 --1.38281798363 -0.31387128681 --1.38281309605 -0.331128828228 --1.38281142712 -0.348386123776 --1.38281288743 -0.36564361304 --1.38281753659 -0.382900975644 --1.38282540441 -0.400158636272 --1.38283646107 -0.417416289449 --1.38285061717 -0.43467438221 --1.38286799192 -0.451932609082 --1.38288849592 -0.469191364944 --1.38291215896 -0.486450374127 --1.38293895125 -0.503710061311 --1.38295409083 -0.522919878363 --1.3829408586 -0.542128056288 --1.3829138577 -0.559387594461 --1.38288998604 -0.576646819711 --1.38286924362 -0.59390540421 --1.38285166025 -0.611163824797 --1.38283723593 -0.628421768546 --1.38282600045 -0.645679622889 --1.38281795383 -0.662937104702 --1.38281309605 -0.680194661021 --1.38281142712 -0.697451964021 --1.38281285763 -0.714709460735 --1.38281753659 -0.73196682334 --1.38282543421 -0.749224483967 --1.38283643127 -0.766482144594 --1.38285058737 -0.783740222454 --1.38286799192 -0.800998434425 --1.38288846612 -0.818257197738 --1.38291212916 -0.835516214371 --1.38293895125 -0.852775901556 --1.38295409083 -0.871985718608 --1.3829408288 -0.891193911433 --1.38291379809 -0.908453434706 --1.38288995623 -0.925712645054 --1.38286924362 -0.942971259355 --1.38285166025 -0.960229665041 --1.38283726573 -0.977487578988 --1.38282603025 -0.994745463133 --1.38281795383 -1.01200297475 --1.38281309605 -1.02926051616 --1.38281139732 -1.04651781917 --1.38281285763 -1.06377530098 --1.38281756639 -1.08103266358 --1.38282540441 -1.09829032421 --1.38283643127 -1.11554801464 --1.38285061717 -1.1328061223 --1.38286799192 -1.15006428957 --1.38288846612 -1.16732305288 --1.38291212916 -1.18458208442 --1.38293895125 -1.2018417716 --1.38295412064 -1.22105157376 --1.38294091821 -1.24025976658 --1.3829138577 -1.25751930475 --1.38288995623 -1.2747785151 --1.38286924362 -1.2920370996 --1.38285166025 -1.30929550528 --1.38283723593 -1.32655346393 --1.38282603025 -1.34381133318 --1.38281798363 -1.36106881499 --1.38281309605 -1.37832638621 --1.38281142712 -1.39558368921 --1.38281288743 -1.41284114122 --1.38281753659 -1.43009850383 --1.3828253746 -1.44735619426 --1.38283643127 -1.46461385489 --1.38285061717 -1.48187193274 --1.38286799192 -1.49913015961 --1.38288843632 -1.51638892293 --1.38291212916 -1.53364792466 --1.38293898106 -1.55090761185 --1.38295409083 -1.5701174438 --1.3829408288 -1.58932560683 --1.38291379809 -1.6065851152 --1.38288992643 -1.62384435535 --1.38286924362 -1.64110296965 --1.38285169005 -1.65836140513 --1.38283723593 -1.67561933398 --1.38282603025 -1.69287720322 --1.38281798363 -1.71013468504 --1.38281306625 -1.72739219665 --1.38281136752 -1.74464949966 --1.38281282783 -1.76190701127 --1.38281753659 -1.77916437388 --1.38282540441 -1.7964220047 --1.38283640147 -1.81367969513 --1.38285058737 -1.83093780279 --1.38286799192 -1.84819597006 --1.38288849592 -1.86545473337 --1.38291215896 -1.88271376491 --1.38293895125 -1.89997345209 --1.38295409083 -1.91918325424 --1.3829408288 -1.93839144707 --1.38291379809 -1.95565098524 --1.38288995623 -1.97291019559 --1.38286924362 -1.99016880989 --1.38285166025 -2.00742721557 --1.38283723593 -2.02468514442 --1.38282603025 -2.04194307327 --1.38281798363 -2.05920058489 --1.38281309605 -2.0764580965 --1.38281142712 -2.0937153697 --1.38281288743 -2.11097288132 --1.38281756639 -2.12823027373 --1.38282540441 -2.14548796415 --1.38283643127 -2.16274565459 --1.38285061717 -2.18000370264 --1.38286799192 -2.19726186991 --1.38288846612 -2.21452063322 --1.38291212916 -2.23177963496 --1.38293895125 -2.24903929234 --1.38295412064 -2.26824915409 --1.3829408586 -2.28745734692 --1.38291382789 -2.30471682548 --1.38288998604 -2.32197600603 --1.38286924362 -2.33923465014 --1.38285166025 -2.35649311543 --1.38283726573 -2.37375104428 --1.38282603025 -2.39100891352 --1.38281795383 -2.40826636553 --1.38281309605 -2.42552393675 --1.38281139732 -2.44278126955 --1.38281282783 -2.46003872156 --1.38281753659 -2.47729605436 --1.38282543421 -2.4945537448 --1.38283643127 -2.51181143523 --1.38285058737 -2.52906948328 --1.38286799192 -2.54632765054 --1.38288849592 -2.56358641386 --1.38291215896 -2.58084541559 --1.38293895125 -2.59810513258 --1.38295409083 -2.61731499434 --1.3829408586 -2.63652318716 --1.38291382789 -2.65378272533 --1.38288995623 -2.67104190588 --1.38286924362 -2.68830049038 --1.38285166025 -2.70555895567 --1.38283723593 -2.72281688452 --1.38282603025 -2.74007469416 --1.38281798363 -2.75733220577 --1.38281309605 -2.77458977699 --1.38281139732 -2.79184705019 --1.38281285763 -2.8091045022 --1.38281753659 -2.82636183501 --1.3828253746 -2.84361952543 --1.38283643127 -2.86087721586 --1.38285061717 -2.87813532353 --1.38286799192 -2.89539361 --1.38288843632 -2.91265237331 --1.38291209936 -2.92991137505 --1.38293898106 -2.94717103243 --1.38295415044 -2.96638077498 --1.3829408586 -2.9855889678 --1.38291382789 -3.00284856558 --1.38288998604 -3.02010780573 --1.38286927342 -3.03736639023 --1.38285169005 -3.05462479591 --1.38283723593 -3.07188272476 --1.38282603025 -3.08914059401 --1.38281801343 -3.10639810562 --1.38281312585 -3.12365561724 --1.38281142712 -3.14091286262 --1.38281285763 --3.12501496077 --1.38281747699 --3.10775762796 --1.382825315 --3.09049993753 --1.38283637166 --3.07324224711 --1.38285058737 --3.05598413944 --1.38286796212 --3.03872585297 --1.38288843632 --3.02146708966 --1.38291212916 --3.00420808792 --1.38293898106 --2.98694843054 --1.38295415044 --2.96773862838 --1.3829408586 --2.94853043556 --1.38291379809 --2.93127089739 --1.38288992643 --2.91401165724 --1.38286921382 --2.89675307274 --1.38285166025 --2.87949466705 --1.38283726573 --2.8622367382 --1.38282606006 --2.84497886896 --1.38281798363 --2.82772135735 --1.38281309605 --2.81046384573 --1.38281142712 --2.79320657253 --1.38281288743 --2.77594900131 --1.38281753659 --2.7586916089 --1.38282540441 --2.74143403768 --1.38283646107 --2.72417646646 --1.38285061717 --2.7069182992 --1.38286799192 --2.68966001272 --1.38288849592 --2.67240124941 --1.38291215896 --2.65514224768 --1.38293895125 --2.63788259029 --1.38295409083 --2.61867278814 --1.3829408586 --2.59946459532 --1.3829138577 --2.58220505715 --1.38288998604 --2.5649458766 --1.38286924362 --2.5476872921 --1.38285166025 --2.53042888642 --1.38283723593 --2.51317089796 --1.38282600045 --2.49591296911 --1.38281795383 --2.4786555171 --1.38281309605 --2.46139800549 --1.38281142712 --2.44414067268 --1.38281285763 --2.42688316106 --1.38281753659 --2.40962582826 --1.38282543421 --2.39236813784 --1.38283643127 --2.3751104474 --1.38285058737 --2.35785239935 --1.38286799192 --2.34059423208 --1.38288846612 --2.32333546877 --1.38291212916 --2.30607646704 --1.38293895125 --2.28881675005 --1.38295409083 --2.26960688829 --1.3829408288 --2.25039869547 --1.38291379809 --2.2331392169 --1.38288995623 --2.21588003636 --1.38286924362 --2.19862139225 --1.38285166025 --2.18136298656 --1.38283726573 --2.16410505772 --1.38282603025 --2.14684718847 --1.38281795383 --2.12958973646 --1.38281309605 --2.11233216524 --1.38281139732 --2.09507483244 --1.38281285763 --2.07781738043 --1.38281756639 --2.06056004763 --1.38282540441 --2.04330235719 --1.38283643127 --2.02604466676 --1.38285061717 --2.00878661871 --1.38286799192 --1.99152839184 --1.38288846612 --1.97426956892 --1.38291212916 --1.95701056719 --1.38293895125 --1.93975090981 --1.38295412064 --1.92054107785 --1.38294091821 --1.90133288502 --1.3829138577 --1.88407334686 --1.38288995623 --1.86681410671 --1.38286924362 --1.8495555222 --1.38285166025 --1.83229711652 --1.38283723593 --1.81503918767 --1.38282603025 --1.79778131842 --1.38281798363 --1.78052383661 --1.38281309605 --1.76326629519 --1.38281142712 --1.74600896239 --1.38281288743 --1.72875148058 --1.38281753659 --1.71149414777 --1.3828253746 --1.69423645735 --1.38283643127 --1.67697876692 --1.38285061717 --1.65972071886 --1.38286799192 --1.64246249199 --1.38288843632 --1.62520372868 --1.38291212916 --1.60794472695 --1.38293898106 --1.59068503976 --1.38295409083 --1.57147526741 --1.3829408288 --1.55226707459 --1.38291379809 --1.53500753641 --1.38288992643 --1.51774829626 --1.38286924362 --1.50048965216 --1.38285169005 --1.48323124647 --1.38283723593 --1.46597334742 --1.38282603025 --1.44871547818 --1.38281798363 --1.43145796657 --1.38281306625 --1.41420042515 --1.38281136752 --1.39694315195 --1.38281282783 --1.37968564034 --1.38281753659 --1.36242824793 --1.38282540441 --1.3451706171 --1.38283640147 --1.32791298628 --1.38285058737 --1.31065487861 --1.38286799192 --1.29339665174 --1.38288849592 --1.27613788843 --1.38291215896 --1.2588788569 --1.38293895125 --1.24161919952 --1.38295409083 --1.22240939736 --1.3829408288 --1.20320117474 --1.38291379809 --1.18594163656 --1.38288995623 --1.16868242621 --1.38286924362 --1.15142384172 --1.38285166025 --1.13416543603 --1.38283723593 --1.11690747738 --1.38282603025 --1.09964960813 --1.38281798363 --1.08239212632 --1.38281309605 --1.0651345849 --1.38281142712 --1.0478772819 --1.38281288743 --1.03061980009 --1.38281756639 --1.01336243749 --1.38282540441 --0.996104747055 --1.38283643127 --0.97884708643 --1.38285061717 --0.96158900857 --1.38286799192 --0.9443307966 --1.38288846612 --0.927072063088 --1.38291212916 --0.909813061357 --1.38293895125 --0.89255335927 --1.38295412064 --0.873343512416 --1.3829408586 --0.854135334491 --1.38291382789 --0.83687582612 --1.38288998604 --0.81961658597 --1.38286924362 --0.802357956767 --1.38285166025 --0.78509953618 --1.38283726573 --0.767841622233 --1.38282603025 --0.750583767891 --1.38281795383 --0.733326286077 --1.38281309605 --0.716068729758 --1.38281139732 --0.69881144166 --1.38281282783 --0.681553959847 --1.38281753659 --0.664296582341 --1.38282543421 --0.647038906812 --1.38283643127 --0.629781231284 --1.38285058737 --0.612523138523 --1.38286799192 --0.595264926553 --1.38288849592 --0.578006163239 --1.38291215896 --0.560747176409 --1.38293895125 --0.543487519026 --1.38295409083 --0.524277672172 --1.3829408586 --0.505069471895 --1.38291382789 --0.487809941172 --1.38288995623 --0.470550715924 --1.38286924362 --0.453292123973 --1.38285166025 --0.436033718288 --1.38283723593 --0.41877578944 --1.38282603025 --0.401517920196 --1.38281798363 --0.384260430932 --1.38281309605 --0.367002889514 --1.38281139732 --0.349745586514 --1.38281285763 --0.3324880898 --1.38281753659 --0.315230719745 --1.3828253746 --0.297973059117 --1.38283643127 --0.280715405941 --1.38285061717 --0.26345731318 --1.38286799192 --0.246199097484 --1.38288843632 --0.228940334171 --1.38291209936 --0.211681321263 --1.38293898106 --0.194421645254 --1.38295415044 --0.175211831927 --1.36584559083 --0.15600149706 --1.36581867933 --0.138741970062 --1.36579492688 --0.121482757852 --1.36577430368 --0.104224162176 --1.36575680971 --0.0869657564908 --1.36574238539 --0.0697078378871 --1.36573120952 --0.052449981682 --1.3657232821 --0.0351925003343 --1.36571842432 --0.0179349572864 --1.36571669579 --0.000677661038932 --1.3657181561 -0.0165798154194 --1.36572277546 -0.0338371675462 --1.36573055386 -0.0510948225856 --1.36574155092 -0.0683524794876 --1.36575570703 -0.0856105647981 --1.36577302217 -0.102868771181 --1.36579337716 -0.120127525181 --1.36581695079 -0.137386526913 --1.36584371328 -0.154646199196 --1.36585882306 -0.173856090754 --1.36584559083 -0.193064350635 --1.36581864953 -0.210323873907 --1.36579486728 -0.227583084256 --1.36577424407 -0.24484167248 --1.36575677991 -0.262100085616 --1.36574241519 -0.279358007014 --1.36573123932 -0.296615868807 --1.3657232225 -0.313873358071 --1.36571836472 -0.331130892038 --1.36571672559 -0.348388187587 --1.3657181561 -0.36564566195 --1.36572274566 -0.382903024554 --1.36573058367 -0.400160685182 --1.36574161053 -0.417418323458 --1.36575570703 -0.434676416219 --1.36577302217 -0.451934628189 --1.36579343676 -0.469193369151 --1.3658169806 -0.486452378333 --1.36584368348 -0.503712050617 --1.36585876345 -0.522921934724 --1.36584556102 -0.542130202055 --1.36581864953 -0.559389740229 --1.36579486728 -0.576648935676 --1.36577421427 -0.593907520175 --1.36575675011 -0.611165940761 --1.36574241519 -0.628423854709 --1.36573120952 -0.645681709051 --1.36572319269 -0.662939190864 --1.36571836472 -0.680196732282 --1.36571669579 -0.697454035282 --1.3657181263 -0.714711517096 --1.36572277546 -0.7319688797 --1.36573061347 -0.749226540327 --1.36574158072 -0.766484171152 --1.36575567723 -0.783742249012 --1.36577302217 -0.801000460982 --1.36579343676 -0.818259209395 --1.3658169806 -0.835518211127 --1.36584371328 -0.852777883411 --1.36585879326 -0.871987774968 --1.36584556102 -0.891196042299 --1.36581864953 -0.908455565572 --1.36579489708 -0.92571477592 --1.36577424407 -0.94297337532 --1.36575675011 -0.960231795907 --1.36574241519 -0.977489709854 --1.36573120952 -0.994747564197 --1.36572319269 -1.01200506091 --1.36571836472 -1.02926260233 --1.36571666598 -1.04651990533 --1.36571809649 -1.06377738714 --1.36572274566 -1.08103471994 --1.36573058367 -1.09829235077 --1.36574161053 -1.1155500412 --1.36575570703 -1.13280814886 --1.36577302217 -1.15006631612 --1.36579340696 -1.16732507944 --1.36581695079 -1.18458408118 --1.36584371328 -1.20184373856 --1.36585882306 -1.22105363012 --1.36584562063 -1.24026191235 --1.36581867933 -1.25752145052 --1.36579489708 -1.27478063107 --1.36577424407 -1.29203921556 --1.36575675011 -1.30929762125 --1.36574241519 -1.3265555501 --1.36573123932 -1.34381341934 --1.3657232225 -1.36107090115 --1.36571836472 -1.37832844257 --1.36571669579 -1.39558574558 --1.3657181263 -1.41284322739 --1.36572274566 -1.43010058999 --1.36573055386 -1.44735825062 --1.36574155092 -1.46461588144 --1.36575567723 -1.4818739593 --1.36577302217 -1.49913218617 --1.36579340696 -1.51639091969 --1.36581695079 -1.53364992142 --1.36584371328 -1.5509096086 --1.36585879326 -1.57011950016 --1.36584553122 -1.58932775259 --1.36581861972 -1.60658726096 --1.36579486728 -1.62384650111 --1.36577424407 -1.64110511541 --1.36575677991 -1.6583635211 --1.36574238539 -1.67562142014 --1.36573120952 -1.69287928939 --1.3657232523 -1.7101367712 --1.36571842432 -1.72739428282 --1.36571669578 -1.74465158582 --1.36571809649 -1.76190906763 --1.36572277546 -1.77916640043 --1.36573061347 -1.79642406106 --1.36574158072 -1.81368175149 --1.36575567723 -1.83093982935 --1.36577302217 -1.84819799662 --1.36579343676 -1.86545675993 --1.3658169806 -1.88271576166 --1.36584368348 -1.89997541905 --1.36585876345 -1.9191853404 --1.36584556102 -1.93839362264 --1.36581864953 -1.95565313101 --1.36579489708 -1.97291231155 --1.36577424407 -1.99017089605 --1.36575675011 -2.00742933154 --1.36574238539 -2.02468729019 --1.36573120952 -2.04194515943 --1.3657232225 -2.05920261144 --1.36571836472 -2.07646018266 --1.36571672559 -2.09371751547 --1.3657181561 -2.11097496748 --1.36572277546 -2.12823230028 --1.36573061347 -2.14548999071 --1.36574161053 -2.16274768114 --1.36575570703 -2.1800057292 --1.36577302217 -2.19726389646 --1.36579346657 -2.21452265978 --1.3658170402 -2.23178166151 --1.36584371328 -2.24904125929 --1.36585879326 -2.26825118065 --1.36584559083 -2.28745949268 --1.36581867933 -2.30471897125 --1.36579492688 -2.3219781518 --1.36577424407 -2.3392367959 --1.36575675011 -2.35649526119 --1.36574244499 -2.37375313044 --1.36573123932 -2.39101094008 --1.3657232225 -2.40826845169 --1.36571839452 -2.42552602291 --1.36571669579 -2.44278329611 --1.3657181561 -2.46004074812 --1.36572280526 -2.47729808092 --1.36573061347 -2.49455577135 --1.36574158072 -2.51181346178 --1.36575567723 -2.52907150984 --1.36577302217 -2.54632967711 --1.36579343676 -2.56358844042 --1.3658169806 -2.58084744215 --1.36584368348 -2.59810715914 --1.36585876345 -2.6173170805 --1.36584556102 -2.63652533293 --1.36581864953 -2.6537848711 --1.36579489708 -2.67104405165 --1.36577424407 -2.68830263614 --1.36575675011 -2.70556104183 --1.36574238539 -2.72281897068 --1.36573120952 -2.74007683992 --1.3657232225 -2.75733435154 --1.36571836472 -2.77459186315 --1.36571669579 -2.79184907675 --1.3657181263 -2.80910658836 --1.36572271586 -2.82636398077 --1.36573055386 -2.8436216116 --1.36574161053 -2.86087924242 --1.36575570703 -2.87813729048 --1.36577302217 -2.89539557695 --1.36579340696 -2.91265434027 --1.36581695079 -2.929913342 --1.36584368348 -2.94717305899 --1.36585879326 -2.96638286114 --1.36584559083 -2.98559111357 --1.36581867933 -3.00285065174 --1.36579492688 -3.02010989189 --1.36577430368 -3.037368536 --1.36575680971 -3.05462694168 --1.36574238539 -3.07188487053 --1.36573120952 -3.08914273978 --1.3657232821 -3.10640019179 --1.36571842432 -3.1236577034 --1.36571669579 -3.14091494878 --1.3657181561 --3.1250128746 --1.36572277546 --3.1077554822 --1.36573055386 --3.09049785137 --1.36574155092 --3.07324022055 --1.36575570703 --3.05598217249 --1.36577302217 --3.03872388602 --1.36579337716 --3.0214651227 --1.36581695079 --3.00420612096 --1.36584371328 --2.98694640398 --1.36585882306 --2.96773654222 --1.36584559083 --2.94852828979 --1.36581864953 --2.93126881122 --1.36579486728 --2.91400957107 --1.36577424407 --2.89675092697 --1.36575677991 --2.87949252129 --1.36574241519 --2.86223459244 --1.36573123932 --2.84497672319 --1.3657232225 --2.82771927118 --1.36571836472 --2.81046175957 --1.36571672559 --2.79320442676 --1.3657181561 --2.77594691515 --1.36572274566 --2.75868958235 --1.36573058367 --2.74143201113 --1.36574161053 --2.7241743803 --1.36575570703 --2.70691621303 --1.36577302217 --2.68965798617 --1.36579343676 --2.67239922285 --1.3658169806 --2.65514022112 --1.36584368348 --2.63788062334 --1.36585876345 --2.61867076159 --1.36584556102 --2.59946244955 --1.36581864953 --2.58220291138 --1.36579486728 --2.56494373083 --1.36577421427 --2.54768514633 --1.36575675011 --2.53042674065 --1.36574241519 --2.5131688118 --1.36573120952 --2.49591094255 --1.36572319269 --2.47865349054 --1.36571836472 --2.46139591933 --1.36571669579 --2.44413858652 --1.3657181263 --2.42688113451 --1.36572277546 --2.40962380171 --1.36573061347 --2.39236611128 --1.36574158072 --2.37510842085 --1.36575567723 --2.35785037279 --1.36577302217 --2.34059220553 --1.36579343676 --2.32333344221 --1.3658169806 --2.30607444048 --1.36584371328 --2.28881478309 --1.36585879326 --2.26960486173 --1.36584556102 --2.2503966093 --1.36581864953 --2.23313713074 --1.36579489708 --2.21587789059 --1.36577424407 --2.19861924649 --1.36575675011 --2.1813608408 --1.36574241519 --2.16410291195 --1.36573120952 --2.1468450427 --1.36572319269 --2.12958759069 --1.36571836472 --2.11233007908 --1.36571666598 --2.09507274628 --1.36571809649 --2.07781529427 --1.36572274566 --2.06055796146 --1.36573058367 --2.04330027103 --1.36574161053 --2.02604264021 --1.36575570703 --2.00878459215 --1.36577302217 --1.99152636528 --1.36579340696 --1.97426757217 --1.36581695079 --1.95700857043 --1.36584371328 --1.93974891305 --1.36585882306 --1.92053902149 --1.36584562063 --1.90133076906 --1.36581867933 --1.88407123089 --1.36579489708 --1.86681199074 --1.36577424407 --1.84955340624 --1.36575675011 --1.83229500055 --1.36574241519 --1.8150370717 --1.36573123932 --1.79777920246 --1.3657232225 --1.78052175045 --1.36571836472 --1.76326420903 --1.36571669579 --1.74600690603 --1.3657181263 --1.72874945402 --1.36572274566 --1.71149209141 --1.36573055386 --1.69423440099 --1.36574155092 --1.67697674036 --1.36575567723 --1.6597186923 --1.36577302217 --1.64246046543 --1.36579340696 --1.62520170212 --1.36581695079 --1.60794273019 --1.36584371328 --1.59068307281 --1.36585879326 --1.57147318125 --1.36584553122 --1.55226489902 --1.36581861972 --1.53500539064 --1.36579486728 --1.5177461803 --1.36577424407 --1.50048756599 --1.36575677991 --1.48322913051 --1.36574238539 --1.46597123146 --1.36573120952 --1.44871339202 --1.3657232523 --1.4314558804 --1.36571842432 --1.41419833898 --1.36571669578 --1.39694106579 --1.36571809649 --1.37968358398 --1.36572277546 --1.36242622137 --1.36573061347 --1.34516859054 --1.36574158072 --1.32791092992 --1.36575567723 --1.31065282225 --1.36577302217 --1.29339462519 --1.36579343676 --1.27613586187 --1.3658169806 --1.25887686014 --1.36584368348 --1.24161720276 --1.36585876345 --1.2224073112 --1.36584556102 --1.20319902897 --1.36581864953 --1.1859394908 --1.36579489708 --1.16868031025 --1.36577424407 --1.15142172575 --1.36575675011 --1.13416332006 --1.36574238539 --1.11690539121 --1.36573120952 --1.09964752197 --1.3657232225 --1.08239004016 --1.36571836472 --1.06513249874 --1.36571672559 --1.04787522554 --1.3657181561 --1.03061774373 --1.36572277546 --1.01336035132 --1.36573061347 --0.996102690694 --1.36574161053 --0.978845044971 --1.36575570703 --0.961586967111 --1.36577302217 --0.944328770041 --1.36579346657 --0.927070036531 --1.3658170402 --0.909811034799 --1.36584371328 --0.892551362514 --1.36585879326 --0.873341456055 --1.36584559083 --0.854133173823 --1.36581867933 --0.836873665452 --1.36579492688 --0.819614470005 --1.36577424407 --0.802355855703 --1.36575675011 --0.785097435117 --1.36574244499 --0.767839536071 --1.36573123932 --0.750581666827 --1.3657232225 --0.733324199915 --1.36571839452 --0.716066658497 --1.36571669579 --0.698809340596 --1.3657181561 --0.681551873684 --1.36572280526 --0.664294525981 --1.36573061347 --0.647036865354 --1.36574158072 --0.629779189825 --1.36575567723 --0.612521111966 --1.36577302217 --0.595262929797 --1.36579343676 --0.578004181385 --1.3658169806 --0.560745194554 --1.36584368348 --0.54348552227 --1.36585876345 --0.52427560091 --1.36584556102 --0.505067333579 --1.36581864953 --0.487807817757 --1.36579489708 --0.470548599959 --1.36577424407 --0.453290015459 --1.36575675011 --0.436031609773 --1.36574238539 --0.418773680926 --1.36573120952 --0.401515826583 --1.3657232225 --0.384258344769 --1.36571836472 --0.367000803351 --1.36571669579 --0.349743515253 --1.3657181263 --0.33248604089 --1.36572271586 --0.315228678286 --1.36573055386 --0.297971025109 --1.36574161053 --0.280713379383 --1.36575570703 --0.263455294073 --1.36577302217 --0.246197082102 --1.36579340696 --0.228938322514 --1.36581695079 --0.211679320782 --1.36584368348 --0.194419652223 --1.36585879326 --0.175209764391 --1.34872514009 --0.155999328941 --1.34869834781 --0.138739809394 --1.34867468476 --0.121480602771 --1.34865412116 --0.104222014546 --1.3486367464 --0.0869636181742 --1.34862247109 --0.0697057107463 --1.34861129523 --0.0524478610605 --1.348603338 --0.035190386232 --1.34859853983 --0.0179328531958 --1.34859681129 --0.000675566261633 --1.34859827161 -0.0165819020476 --1.34860292077 -0.0338392457924 --1.34861066937 -0.051096893847 --1.34862160683 -0.0683545432985 --1.34863567353 -0.0856126174331 --1.34865292907 -0.10287081264 --1.34867322445 -0.120129553601 --1.34869664907 -0.13738854602 --1.34872329235 -0.154648210853 --1.34873834252 -0.173858176917 --1.34872514009 -0.193066518754 --1.34869834781 -0.210326042026 --1.34867468476 -0.227585241198 --1.34865412116 -0.244843818247 --1.3486367464 -0.262102231384 --1.34862244129 -0.27936013788 --1.34861129523 -0.296617977321 --1.348603338 -0.313875459134 --1.34859851002 -0.331132993102 --1.34859684109 -0.3483902812 --1.34859827161 -0.365647740662 --1.34860286117 -0.382905088365 --1.34861063957 -0.400162748992 --1.34862160683 -0.417420394719 --1.34863564372 -0.434678465128 --1.34865289926 -0.451936669648 --1.34867325425 -0.46919541806 --1.34869667888 -0.486454419792 --1.34872326255 -0.503714069724 --1.34873831272 -0.522924020886 --1.34872514009 -0.542132377624 --1.34869831801 -0.559391900897 --1.34867465496 -0.576651081443 --1.34865412116 -0.593909665942 --1.3486367464 -0.611168086529 --1.34862247109 -0.628426000476 --1.34861132503 -0.645683839917 --1.348603338 -0.66294130683 --1.34859851002 -0.680198833346 --1.34859681129 -0.697456121445 --1.3485982418 -0.714713603258 --1.34860289097 -0.731970950961 --1.34861066937 -0.749228596687 --1.34862160683 -0.766486257315 --1.34863564372 -0.783744320273 --1.34865286946 -0.801002502441 --1.34867322445 -0.818261250854 --1.34869667888 -0.835520252586 --1.34872329235 -0.852779924869 --1.34873834252 -0.871989876032 --1.34872514009 -0.891198217869 --1.34869834781 -0.908457741141 --1.34867468476 -0.925716936588 --1.34865409136 -0.942975521087 --1.3486367166 -0.960233941674 --1.34862244129 -0.977491855621 --1.34861129523 -0.994749680162 --1.348603338 -1.01200714707 --1.34859851002 -1.02926471829 --1.34859681129 -1.04652202129 --1.3485982418 -1.06377947331 --1.34860286117 -1.08103680611 --1.34861063957 -1.09829443693 --1.34862160683 -1.11555209756 --1.34863564372 -1.13281017542 --1.34865289926 -1.15006834269 --1.34867325425 -1.167327106 --1.34869667888 -1.18458610773 --1.34872329235 -1.20184576511 --1.34873834252 -1.22105574608 --1.34872514009 -1.24026408792 --1.34869834781 -1.25752359629 --1.34867471456 -1.27478277683 --1.34865415096 -1.29204136133 --1.3486367464 -1.30929976701 --1.34862247109 -1.32655769587 --1.34861132503 -1.34381556511 --1.3486033082 -1.36107301712 --1.34859848022 -1.37833052874 --1.34859681129 -1.39558783174 --1.3485982418 -1.41284531355 --1.34860289097 -1.43010264635 --1.34861066937 -1.44736027718 --1.34862160683 -1.4646179378 --1.34863564372 -1.48187604546 --1.34865289926 -1.49913424253 --1.34867325425 -1.51639294624 --1.34869670868 -1.53365194798 --1.34872329235 -1.55091160536 --1.34873831272 -1.57012155652 --1.34872511029 -1.58932992816 --1.3486982882 -1.60658946633 --1.34867468476 -1.62384867668 --1.34865415096 -1.64110726118 --1.3486367464 -1.65836566686 --1.34862244129 -1.67562353611 --1.34861126542 -1.69288137555 --1.3486033082 -1.71013888717 --1.34859853982 -1.72739642859 --1.34859684109 -1.74465370178 --1.3485982418 -1.7619111538 --1.34860289097 -1.7791684866 --1.34861066937 -1.79642614722 --1.34862160683 -1.81368380785 --1.34863564372 -1.83094185591 --1.34865289926 -1.84820005298 --1.34867325425 -1.86545881629 --1.34869667888 -1.88271778822 --1.34872326255 -1.8999774456 --1.34873831272 -1.91918745637 --1.34872514009 -1.93839579821 --1.34869834781 -1.95565527677 --1.34867468476 -1.97291448712 --1.34865409136 -1.99017307162 --1.3486367166 -2.00743147731 --1.34862244129 -2.02468937636 --1.34861129523 -2.04194718599 --1.3486033082 -2.05920469761 --1.34859848022 -2.07646226883 --1.34859684109 -2.09371954203 --1.34859827161 -2.11097699404 --1.34860292077 -2.12823432684 --1.34861069917 -2.14549201727 --1.34862160683 -2.1627497077 --1.34863564372 -2.18000775576 --1.34865289926 -2.19726592302 --1.34867328405 -2.21452468634 --1.34869673848 -2.23178368807 --1.34872329235 -2.24904328585 --1.34873831272 -2.26825326681 --1.3487251699 -2.28746163845 --1.34869834781 -2.30472111702 --1.34867465496 -2.32198035717 --1.34865412116 -2.33923900127 --1.3486367464 -2.35649740696 --1.34862247109 -2.3737552762 --1.34861132503 -2.39101308584 --1.348603338 -2.40827059746 --1.34859851002 -2.42552810908 --1.34859684109 -2.44278532267 --1.34859830141 -2.46004283428 --1.34860295058 -2.47730022669 --1.34861069917 -2.49455785751 --1.34862160683 -2.51181548834 --1.34863564372 -2.5290735364 --1.34865289926 -2.54633170366 --1.34867325425 -2.56359046697 --1.34869667888 -2.58084946871 --1.34872326255 -2.5981091857 --1.34873831272 -2.61731916666 --1.34872514009 -2.63652747869 --1.34869834781 -2.65378701687 --1.34867468476 -2.67104619741 --1.34865412116 -2.68830478191 --1.3486367464 -2.7055631876 --1.34862244129 -2.72282111645 --1.34861129523 -2.74007898569 --1.3486033082 -2.7573364377 --1.34859848022 -2.77459394932 --1.34859684109 -2.79185122251 --1.34859827161 -2.80910873413 --1.34860286117 -2.82636612654 --1.34861063957 -2.84362369776 --1.34862160683 -2.86088126898 --1.34863564372 -2.87813937664 --1.34865289926 -2.89539766312 --1.34867325425 -2.91265636682 --1.34869670868 -2.92991536855 --1.34872329235 -2.94717508554 --1.34873831272 -2.9663850069 --1.34872514009 -2.98559331894 --1.34869834781 -3.00285279751 --1.34867468476 -3.02011203766 --1.34865412116 -3.03737068176 --1.3486367464 -3.05462908745 --1.34862247109 -3.07188695669 --1.34861129523 -3.08914476633 --1.348603338 -3.10640221834 --1.34859853983 -3.12365978956 --1.34859681129 -3.14091709455 --1.34859827161 --3.12501072883 --1.34860292077 --3.10775333643 --1.34861066937 --3.09049576521 --1.34862160683 --3.07323819399 --1.34863567353 --3.05598008633 --1.34865292907 --3.03872179985 --1.34867322445 --3.02146309614 --1.34869664907 --3.00420409441 --1.34872329235 --2.98694437742 --1.34873834252 --2.96773445606 --1.34872514009 --2.94852608442 --1.34869834781 --2.93126660585 --1.34867468476 --2.91400742531 --1.34865412116 --2.8967487812 --1.3486367464 --2.87949037552 --1.34862244129 --2.86223250627 --1.34861129523 --2.84497469664 --1.348603338 --2.82771718502 --1.34859851002 --2.8104596138 --1.34859684109 --2.7932023406 --1.34859827161 --2.77594488859 --1.34860286117 --2.75868755579 --1.34861063957 --2.74142992497 --1.34862160683 --2.72417223454 --1.34863564372 --2.70691412687 --1.34865289926 --2.68965595961 --1.34867325425 --2.67239719629 --1.34869667888 --2.65513819456 --1.34872326255 --2.63787859678 --1.34873831272 --2.61866867542 --1.34872514009 --2.59946030378 --1.34869831801 --2.58220076561 --1.34867465496 --2.56494158507 --1.34865412116 --2.54768300056 --1.3486367464 --2.53042459488 --1.34862247109 --2.51316666603 --1.34861132503 --2.49590879679 --1.348603338 --2.47865134478 --1.34859851002 --2.46139383316 --1.34859681129 --2.44413655996 --1.3485982418 --2.42687910795 --1.34860289097 --2.40962177515 --1.34861066937 --2.39236408472 --1.34862160683 --2.37510639429 --1.34863564372 --2.35784834623 --1.34865286946 --2.34059017897 --1.34867322445 --2.32333141565 --1.34869667888 --2.30607241392 --1.34872329235 --2.28881275654 --1.34873834252 --2.26960277557 --1.34872514009 --2.25039446354 --1.34869834781 --2.23313492537 --1.34867468476 --2.21587568522 --1.34865409136 --2.19861710072 --1.3486367166 --2.18135869503 --1.34862244129 --2.16410076618 --1.34861129523 --2.14684289694 --1.348603338 --2.12958544493 --1.34859851002 --2.11232793331 --1.34859681129 --2.09507060051 --1.3485982418 --2.0778131485 --1.34860286117 --2.06055581569 --1.34861063957 --2.04329818487 --1.34862160683 --2.02604061365 --1.34863564372 --2.00878256559 --1.34865289926 --1.99152433872 --1.34867325425 --1.97426557541 --1.34869667888 --1.95700657368 --1.34872329235 --1.9397469163 --1.34873834252 --1.92053696513 --1.34872514009 --1.90132859349 --1.34869834781 --1.88406905532 --1.34867471456 --1.86680984497 --1.34865415096 --1.84955126047 --1.3486367464 --1.83229285478 --1.34862247109 --1.81503495574 --1.34861132503 --1.7977771163 --1.3486033082 --1.78051963449 --1.34859848022 --1.76326209307 --1.34859681129 --1.74600481987 --1.3485982418 --1.72874736786 --1.34860289097 --1.71149000525 --1.34861066937 --1.69423234463 --1.34862160683 --1.6769747138 --1.34863564372 --1.65971663594 --1.34865289926 --1.64245840907 --1.34867325425 --1.62519967556 --1.34869670868 --1.60794070363 --1.34872329235 --1.59068104625 --1.34873831272 --1.57147106528 --1.34872511029 --1.55226272345 --1.3486982882 --1.53500324488 --1.34867468476 --1.51774403453 --1.34865415096 --1.50048545003 --1.3486367464 --1.48322701454 --1.34862244129 --1.46596908569 --1.34861126542 --1.44871127605 --1.3486033082 --1.43145379424 --1.34859853982 --1.41419625282 --1.34859684109 --1.39693894982 --1.3485982418 --1.37968149781 --1.34860289097 --1.36242416501 --1.34861066937 --1.34516650438 --1.34862160683 --1.32790884375 --1.34863564372 --1.31065076589 --1.34865289926 --1.29339259863 --1.34867325425 --1.27613383532 --1.34869667888 --1.25887483358 --1.34872326255 --1.2416151762 --1.34873831272 --1.22240519524 --1.34872514009 --1.2031968534 --1.34869834781 --1.18593734503 --1.34867468476 --1.16867816448 --1.34865409136 --1.15141957998 --1.3486367166 --1.1341611743 --1.34862244129 --1.11690324545 --1.34861129523 --1.09964540601 --1.3486033082 --1.082387954 --1.34859848022 --1.06513041258 --1.34859684109 --1.04787313938 --1.34859827161 --1.03061565757 --1.34860292077 --1.01335829496 --1.34861069917 --0.996100649235 --1.34862160683 --0.97884298861 --1.34863564372 --0.961584925651 --1.34865289926 --0.944326728582 --1.34867328405 --0.927067995071 --1.34869673848 --0.909809023141 --1.34872329235 --0.892549365758 --1.34873831272 --0.873339384794 --1.3487251699 --0.854131013155 --1.34869834781 --0.836871504784 --1.34867465496 --0.819612309337 --1.34865412116 --0.802353709936 --1.3486367464 --0.785095304251 --1.34862247109 --0.767837390303 --1.34861132503 --0.750579550862 --1.348603338 --0.733322098851 --1.34859851002 --0.716064557433 --1.34859684109 --0.698807254434 --1.34859830141 --0.681549787521 --1.34860295058 --0.664292439818 --1.34861069917 --0.647034794092 --1.34862160683 --0.629777148366 --1.34863564372 --0.612519070506 --1.34865289926 --0.595260888338 --1.34867325425 --0.578002154827 --1.34869667888 --0.560743153095 --1.34872326255 --0.543483480811 --1.34873831272 --0.524273514748 --1.34872514009 --0.505065172911 --1.34869834781 --0.487805649638 --1.34867468476 --0.470546454191 --1.34865412116 --0.453287877142 --1.3486367464 --0.436029471457 --1.34862244129 --0.418771550059 --1.34861129523 --0.401513703168 --1.3486033082 --0.384256228805 --1.34859848022 --0.366998687386 --1.34859684109 --0.349741414189 --1.34859827161 --0.332483954728 --1.34860286117 --0.315226599574 --1.34861063957 --0.297968953848 --1.34862160683 --0.280711315572 --1.34863564372 --0.263453237713 --1.34865289926 --0.246195033193 --1.34867325425 --0.228936288506 --1.34869670868 --0.21167729795 --1.34872329235 --0.194417636842 --1.34873831272 --0.175207670778 --1.33157590032 --0.15599712357 --1.33154922724 --0.138737615198 --1.3315256834 --0.121478419751 --1.33150523901 --0.104219840839 --1.33148792386 --0.0869614500552 --1.33147370815 --0.069703550078 --1.33146262169 --0.052445711568 --1.33145469427 --0.0351882451214 --1.3314499259 --0.0179307213984 --1.33144822716 --0.000673443078995 --1.33144965768 -0.016584015917 --1.33145430684 -0.0338413515128 --1.33146205544 -0.0510989902541 --1.33147290349 -0.068356629461 --1.33148688078 -0.085614696145 --1.33150404692 -0.102872883901 --1.33152425289 -0.120131621138 --1.33154758811 -0.13739060238 --1.33157408237 -0.154650248587 --1.33158904314 -0.173860296607 --1.33157593012 -0.193068724126 --1.33154925704 -0.210328236223 --1.33152571321 -0.227587427944 --1.33150526881 -0.244846001268 --1.33148792386 -0.262104392052 --1.33147367835 -0.279362283647 --1.33146265149 -0.296620123088 --1.33145475388 -0.313877597451 --1.3314499259 -0.331135123968 --1.33144822716 -0.348392404616 --1.33144965768 -0.365649856627 --1.33145427704 -0.382907189428 --1.33146202564 -0.400164835155 --1.33147290349 -0.41742247343 --1.33148685098 -0.434680528939 --1.33150401712 -0.451938733458 --1.3315242827 -0.469197489321 --1.33154761791 -0.486456468701 --1.33157408237 -0.503716111183 --1.33158904314 -0.522926151752 --1.33157593012 -0.542134582996 --1.33154922724 -0.559394091368 --1.3315256536 -0.576653271914 --1.33150526881 -0.593911841512 --1.33148798346 -0.611170247197 --1.33147370815 -0.628428161144 --1.33146265149 -0.645685985684 --1.33145475388 -0.662943452597 --1.3314499259 -0.680200979114 --1.33144822716 -0.697458252311 --1.33144965768 -0.714715719223 --1.33145427704 -0.731973037124 --1.33146202564 -0.749230667949 --1.33147290349 -0.766488343477 --1.33148685098 -0.783746421337 --1.33150398731 -0.801004603505 --1.33152425289 -0.818263322115 --1.33154764772 -0.835522308945 --1.33157411218 -0.852781981229 --1.33158904314 -0.871992006898 --1.33157593012 -0.891200423241 --1.33154925704 -0.908459931612 --1.3315256834 -0.925719112157 --1.33150520921 -0.942977696657 --1.33148789406 -0.960236102343 --1.33147367835 -0.977494001389 --1.33146265149 -0.994751825929 --1.33145475388 -1.01200926304 --1.3314499259 -1.02926683426 --1.33144822716 -1.04652416706 --1.33144965768 -1.06378158927 --1.33145427704 -1.08103889227 --1.33146202564 -1.0982965529 --1.33147290349 -1.11555421353 --1.33148685098 -1.13281226158 --1.33150401712 -1.15007042885 --1.3315243125 -1.16732916236 --1.33154764772 -1.18458816409 --1.33157408237 -1.20184782147 --1.33158904314 -1.22105786204 --1.33157593012 -1.24026629329 --1.33154925704 -1.25752580166 --1.33152571321 -1.2747849822 --1.33150526881 -1.2920435369 --1.33148795366 -1.30930191278 --1.33147370815 -1.32655984163 --1.33146265149 -1.34381771088 --1.33145472407 -1.36107516289 --1.33144989609 -1.3783326745 --1.33144822716 -1.3955899477 --1.33144968748 -1.41284739971 --1.33145430684 -1.43010473251 --1.33146199584 -1.44736236334 --1.33147287369 -1.46462002396 --1.33148685098 -1.48187810183 --1.33150401712 -1.49913626909 --1.3315242827 -1.5163950026 --1.33154767752 -1.53365400434 --1.33157411217 -1.55091366172 --1.33158901334 -1.57012370229 --1.33157593012 -1.58933213353 --1.33154922724 -1.6065916419 --1.33152571321 -1.62385082245 --1.33150529861 -1.64110940695 --1.33148792386 -1.65836781263 --1.33147367835 -1.67562568188 --1.33146262169 -1.69288349152 --1.33145466447 -1.71014100313 --1.33144986629 -1.72739857435 --1.33144822716 -1.74465584755 --1.33144965768 -1.76191329956 --1.33145427704 -1.77917063236 --1.33146202564 -1.79642826319 --1.33147290349 -1.81368589401 --1.33148685098 -1.83094394207 --1.33150401712 -1.84820213914 --1.3315242827 -1.86546087265 --1.33154761791 -1.88271984458 --1.33157408237 -1.89997950196 --1.33158904314 -1.91918954253 --1.33157590032 -1.93839797377 --1.33154922724 -1.95565748214 --1.33152571321 -1.9729166925 --1.33150523901 -1.99017524719 --1.33148789406 -2.00743362308 --1.33147367835 -2.02469152212 --1.33146265149 -2.04194933176 --1.33145472407 -2.05920684338 --1.33144989609 -2.0764644146 --1.33144822716 -2.0937216878 --1.33144965768 -2.1109790802 --1.33145430684 -2.128236413 --1.33146205544 -2.14549410343 --1.33147290349 -2.16275173426 --1.33148685098 -2.18000978231 --1.33150401712 -2.19726794958 --1.3315242827 -2.21452671289 --1.33154764772 -2.23178571463 --1.33157411218 -2.24904531241 --1.33158904314 -2.26825535297 --1.33157595992 -2.28746384382 --1.33154925704 -2.30472332239 --1.3315256536 -2.32198250294 --1.33150526881 -2.33924114704 --1.33148795366 -2.35649955273 --1.33147367835 -2.37375742197 --1.33146265149 -2.39101523161 --1.33145472407 -2.40827268362 --1.33144989609 -2.42553019524 --1.33144822716 -2.44278746843 --1.33144965768 -2.46004498005 --1.33145433664 -2.47730237246 --1.33146208525 -2.49456000328 --1.33147290349 -2.5118175745 --1.33148685098 -2.52907562256 --1.33150401712 -2.54633384943 --1.3315242827 -2.56359255314 --1.33154764772 -2.58085149527 --1.33157411218 -2.59811121225 --1.33158901334 -2.61732125282 --1.33157590032 -2.63652962446 --1.33154925704 -2.65378922224 --1.3315256834 -2.67104846239 --1.33150523901 -2.68830698729 --1.33148792386 -2.70556533337 --1.33147367835 -2.72282326222 --1.33146265149 -2.74008113146 --1.33145472407 -2.75733858347 --1.33144989609 -2.77459609509 --1.33144822716 -2.79185336828 --1.33144965768 -2.80911082029 --1.33145427704 -2.8263681531 --1.33146202564 -2.84362578392 --1.33147290349 -2.86088341475 --1.33148688078 -2.87814152241 --1.33150404692 -2.89539974928 --1.3315242827 -2.91265845299 --1.33154767752 -2.92991745472 --1.33157414198 -2.9471771121 --1.33158904314 -2.96638715267 --1.33157590032 -2.98559552431 --1.33154922724 -3.00285500288 --1.3315256834 -3.02011424303 --1.33150523901 -3.03737282753 --1.33148792386 -3.05463123322 --1.33147370815 -3.07188910246 --1.33146262169 -3.0891469121 --1.33145469427 -3.10640436411 --1.3314499259 -3.12366187572 --1.33144822716 -3.14091918071 --1.33144965768 --3.12500864267 --1.33145430684 --3.10775130987 --1.33146205544 --3.09049367905 --1.33147290349 --3.07323604822 --1.33148688078 --3.05597794056 --1.33150404692 --3.03871971369 --1.33152425289 --3.02146100998 --1.33154758811 --3.00420200825 --1.33157408237 --2.98694235086 --1.33158904314 --2.9677323103 --1.33157593012 --2.94852387905 --1.33154925704 --2.93126440049 --1.33152571321 --2.91400521994 --1.33150526881 --2.89674663544 --1.33148792386 --2.87948822975 --1.33147367835 --2.86223036051 --1.33146265149 --2.84497255087 --1.33145475388 --2.82771503925 --1.3314499259 --2.81045746803 --1.33144822716 --2.79320025444 --1.33144965768 --2.77594280243 --1.33145427704 --2.75868541002 --1.33146202564 --2.7414277792 --1.33147290349 --2.72417014837 --1.33148685098 --2.70691210031 --1.33150401712 --2.68965393305 --1.3315242827 --2.67239516974 --1.33154761791 --2.655136168 --1.33157408237 --2.63787657022 --1.33158904314 --2.61866652966 --1.33157593012 --2.59945803881 --1.33154922724 --2.58219856024 --1.3315256536 --2.5649394393 --1.33150526881 --2.5476808548 --1.33148798346 --2.53042244911 --1.33147370815 --2.51316452026 --1.33146265149 --2.49590665102 --1.33145475388 --2.47864919901 --1.3314499259 --2.46139168739 --1.33144822716 --2.4441344142 --1.33144965768 --2.42687696219 --1.33145427704 --2.40961962938 --1.33146202564 --2.39236199856 --1.33147290349 --2.37510436773 --1.33148685098 --2.35784626007 --1.33150398731 --2.3405880332 --1.33152425289 --2.32332932949 --1.33154764772 --2.30607038736 --1.33157411218 --2.28881067037 --1.33158904314 --2.26960062981 --1.33157593012 --2.25039225817 --1.33154925704 --2.23313271999 --1.3315256834 --2.21587353945 --1.33150520921 --2.19861495495 --1.33148789406 --2.18135654926 --1.33147367835 --2.16409862041 --1.33146265149 --2.14684075117 --1.33145475388 --2.12958329916 --1.3314499259 --2.11232578755 --1.33144822716 --2.09506851435 --1.33144965768 --2.07781106234 --1.33145427704 --2.06055372953 --1.33146202564 --2.04329609871 --1.33147290349 --2.02603846788 --1.33148685098 --2.00878041982 --1.33150401712 --1.99152225256 --1.3315243125 --1.97426351905 --1.33154764772 --1.95700451732 --1.33157408237 --1.93974485994 --1.33158904314 --1.92053481937 --1.33157593012 --1.90132638812 --1.33154925704 --1.88406687975 --1.33152571321 --1.8668076694 --1.33150526881 --1.8495490849 --1.33148795366 --1.83229070902 --1.33147370815 --1.81503280997 --1.33146265149 --1.79777497053 --1.33145472407 --1.78051748872 --1.33144989609 --1.7632599473 --1.33144822716 --1.74600267411 --1.33144968748 --1.72874522209 --1.33145430684 --1.71148788929 --1.33146199584 --1.69423025846 --1.33147287369 --1.67697262764 --1.33148685098 --1.65971454978 --1.33150401712 --1.64245635271 --1.3315242827 --1.6251976192 --1.33154767752 --1.60793861747 --1.33157411217 --1.59067898989 --1.33158901334 --1.57146894932 --1.33157593012 --1.55226051807 --1.33154922724 --1.5350010395 --1.33152571321 --1.51774182916 --1.33150529861 --1.50048324466 --1.33148792386 --1.48322483897 --1.33147367835 --1.46596693992 --1.33146262169 --1.44870913029 --1.33145466447 --1.43145167827 --1.33144986629 --1.41419416666 --1.33144822716 --1.39693686366 --1.33144965768 --1.37967941165 --1.33145427704 --1.36242207884 --1.33146202564 --1.34516441822 --1.33147290349 --1.32790678739 --1.33148685098 --1.31064870953 --1.33150401712 --1.29339051247 --1.3315242827 --1.27613177895 --1.33154761791 --1.25887280703 --1.33157408237 --1.24161314965 --1.33158904314 --1.22240307927 --1.33157590032 --1.20319467783 --1.33154922724 --1.18593519926 --1.33152571321 --1.16867598891 --1.33150523901 --1.15141740441 --1.33148789406 --1.13415902853 --1.33147367835 --1.11690109968 --1.33146265149 --1.09964326024 --1.33145472407 --1.08238580823 --1.33144989609 --1.06512826681 --1.33144822716 --1.04787099361 --1.33144965768 --1.0306135416 --1.33145430684 --1.0133562088 --1.33146205544 --0.996098563075 --1.33147290349 --0.978840917349 --1.33148685098 --0.96158285439 --1.33150401712 --0.944324657321 --1.3315242827 --0.92706592381 --1.33154764772 --0.90980695188 --1.33157411218 --0.892547309398 --1.33158904314 --0.873337268829 --1.33157595992 --0.854128837585 --1.33154925704 --0.836869329214 --1.3315256536 --0.819610133767 --1.33150526881 --0.802351549268 --1.33148795366 --0.785093143582 --1.33147367835 --0.767835229635 --1.33146265149 --0.750577405095 --1.33145472407 --0.733319953084 --1.33144989609 --0.716062426567 --1.33144822716 --0.69880515337 --1.33144965768 --0.681547686458 --1.33145433664 --0.664290338755 --1.33146208525 --0.647032693028 --1.33147290349 --0.629775062203 --1.33148685098 --0.612517014146 --1.33150401712 --0.595258817077 --1.3315242827 --0.578000083566 --1.33154764772 --0.560741096735 --1.33157411218 --0.543481439352 --1.33158901334 --0.524271398783 --1.33157590032 --0.505062967539 --1.33154925704 --0.487803451717 --1.3315256834 --0.470544263721 --1.33150523901 --0.453285686671 --1.33148792386 --0.436027295887 --1.33147367835 --0.418769396841 --1.33146265149 --0.40151154995 --1.33145472407 --0.384254083037 --1.33144989609 --0.36699655652 --1.33144822716 --0.349739290773 --1.33144965768 --0.332481838762 --1.33145427704 --0.31522449106 --1.33146202564 --0.297966852784 --1.33147290349 --0.28070922941 --1.33148688078 --0.263451159 --1.33150404692 --0.246192961931 --1.3315242827 --0.228934232146 --1.33154767752 --0.211675245315 --1.33157414198 --0.194415595382 --1.33158904314 --0.175205551088 --1.31439909339 --0.155993212015 --1.31437250972 --0.138733718545 --1.31434908509 --0.121474539861 --1.31432878971 --0.104215977714 --1.31431153417 --0.0869576018304 --1.31429737806 --0.069699715823 --1.3142863512 --0.0524418931455 --1.31427845359 --0.0351844420657 --1.31427368522 --0.0179269339424 --1.31427201629 --0.000669670756908 --1.3142734468 -0.0165877726395 --1.31427806616 -0.03384509217 --1.31428575516 -0.0511027136818 --1.3142965436 -0.0683603370562 --1.31431049109 -0.085618391633 --1.31432756782 -0.102876564488 --1.31434765458 -0.120135283098 --1.31437090039 -0.137394249439 --1.31439724564 -0.154653880745 --1.3144120872 -0.173864074051 --1.31439909339 -0.193072639406 --1.31437253952 -0.210332129151 --1.31434911489 -0.227591305972 --1.31432881951 -0.244849864394 --1.31431153417 -0.262108244002 --1.31429737806 -0.279366128147 --1.31428638101 -0.296623952687 --1.31427848339 -0.313881404698 --1.31427368522 -0.331138916314 --1.31427201629 -0.348396189511 --1.3142734468 -0.365653634071 --1.31427803635 -0.382910944521 --1.31428575516 -0.400168560445 --1.3142965734 -0.41742618382 --1.31431046128 -0.434684231877 --1.31432753802 -0.451942414045 --1.31434768438 -0.469201140106 --1.31437093019 -0.486460104585 --1.31439724564 -0.503719739616 --1.314412117 -0.522929921746 --1.31439912319 -0.5421384871 --1.31437253952 -0.559397980571 --1.31434908509 -0.576657146216 --1.31432878971 -0.593915700913 --1.31431156397 -0.611174091697 --1.31429737806 -0.628431975842 --1.3142863512 -0.645689785481 --1.31427848339 -0.662947252393 --1.31427368522 -0.68020477891 --1.31427201629 -0.697462037206 --1.3142734468 -0.714719489217 --1.31427803635 -0.731976792216 --1.31428575516 -0.74923440814 --1.3142965734 -0.766492053866 --1.31431046128 -0.783750116825 --1.31432753802 -0.801008284092 --1.31434768438 -0.818266972899 --1.31437096 -0.835525929928 --1.31439727544 -0.852785587311 --1.314412117 -0.871995776892 --1.31439912319 -0.891204327345 --1.31437253952 -0.908463835716 --1.31434908509 -0.925723016262 --1.31432875991 -0.94298158586 --1.31431150436 -0.960239976645 --1.31429737806 -0.977497845888 --1.31428638101 -0.994755655526 --1.31427848339 -1.01201310754 --1.31427368522 -1.02927064896 --1.31427201629 -1.04652792215 --1.3142734468 -1.06378531456 --1.31427803635 -1.08104261756 --1.31428575516 -1.09830027819 --1.3142965734 -1.11555790902 --1.31431046128 -1.13281595707 --1.31432753802 -1.15007412434 --1.31434771419 -1.16733282805 --1.31437096 -1.18459182978 --1.31439724564 -1.20185145736 --1.3144120872 -1.22106161714 --1.31439909339 -1.24027019739 --1.31437253952 -1.25752970576 --1.31434908509 -1.27478888631 --1.31432875991 -1.2920474112 --1.31431153417 -1.30930575728 --1.31429740787 -1.32656365633 --1.31428638101 -1.34382149577 --1.31427848339 -1.36107894778 --1.31427368522 -1.3783364594 --1.31427201629 -1.3955937326 --1.3142734766 -1.41285118461 --1.31427806616 -1.43010848761 --1.31428572535 -1.44736611843 --1.3142965436 -1.46462374925 --1.31431046128 -1.48188176751 --1.31432753802 -1.49913993478 --1.31434765458 -1.51639866829 --1.31437093019 -1.53365764022 --1.31439727544 -1.5509172976 --1.3144120872 -1.57012748718 --1.31439909339 -1.58933603763 --1.31437253952 -1.60659551621 --1.31434911489 -1.62385469675 --1.31432875991 -1.64111328125 --1.31431147456 -1.65837165713 --1.31429737806 -1.67562952637 --1.31428638101 -1.69288733602 --1.31427845359 -1.71014481783 --1.31427365542 -1.72740235925 --1.31427201629 -1.74465960264 --1.3142734468 -1.76191705465 --1.31427803635 -1.77917438745 --1.31428575516 -1.79643198848 --1.3142965734 -1.8136895895 --1.31431046128 -1.83094763756 --1.31432753802 -1.84820583463 --1.31434768438 -1.86546453834 --1.31437093019 -1.88272351027 --1.31439724564 -1.89998313785 --1.314412117 -1.91919329762 --1.31439909339 -1.93840187788 --1.31437250972 -1.95566138625 --1.31434911489 -1.9729205668 --1.31432878971 -1.99017912149 --1.31431150436 -2.00743752718 --1.31429737806 -2.02469539642 --1.31428638101 -2.04195320606 --1.3142785132 -2.05921065807 --1.31427371502 -2.07646816969 --1.31427201629 -2.09372544289 --1.3142734468 -2.11098283529 --1.31427803635 -2.12824016809 --1.31428575516 -2.14549779892 --1.3142965734 -2.16275537014 --1.31431049109 -2.1800134182 --1.31432756782 -2.19727158547 --1.31434768438 -2.21453034878 --1.31437096 -2.23178935051 --1.31439727544 -2.24904894829 --1.314412117 -2.26825916767 --1.31439912319 -2.28746777773 --1.31437253952 -2.3047272563 --1.31434908509 -2.32198637724 --1.31432878971 -2.33924496174 --1.31431153417 -2.35650336742 --1.31429737806 -2.37376123667 --1.31428638101 -2.39101904631 --1.31427848339 -2.40827643871 --1.31427368522 -2.42553395033 --1.31427201629 -2.44279128313 --1.3142734468 -2.46004873514 --1.31427806616 -2.47730606794 --1.31428578496 -2.49456375837 --1.3142965734 -2.51182132959 --1.31431049109 -2.52907937765 --1.31432756782 -2.54633760453 --1.31434768438 -2.56359624863 --1.31437096 -2.58085513115 --1.31439730525 -2.59811478853 --1.3144120872 -2.61732500792 --1.31439906359 -2.63653355837 --1.31437253952 -2.65379309654 --1.31434908509 -2.67105233669 --1.31432875991 -2.68831086159 --1.31431150436 -2.70556914806 --1.31429737806 -2.72282707691 --1.31428638101 -2.74008494616 --1.31427848339 -2.75734239817 --1.31427368522 -2.77459990978 --1.31427201629 -2.79185712338 --1.3142734468 -2.80911457539 --1.31427803635 -2.82637190819 --1.31428575516 -2.84362953901 --1.3142965734 -2.86088716984 --1.31431049109 -2.8781452179 --1.31432756782 -2.89540338516 --1.31434768438 -2.91266208887 --1.31437096 -2.9299210906 --1.31439727544 -2.94718074798 --1.314412117 -2.96639090776 --1.31439909339 -2.98559945822 --1.31437250972 -3.00285893679 --1.31434908509 -3.02011811733 --1.31432878971 -3.03737670183 --1.31431153417 -3.05463510752 --1.31429737806 -3.07189297676 --1.3142863512 -3.0891507864 --1.31427845359 -3.10640823841 --1.31427368522 -3.12366569042 --1.31427201629 -3.1409229358 --1.3142734468 --3.12500488758 --1.31427806616 --3.10774755478 --1.31428575516 --3.09048992395 --1.3142965436 --3.07323229313 --1.31431049109 --3.05597424507 --1.31432756782 --3.03871607781 --1.31434765458 --3.0214573741 --1.31437090039 --3.00419837236 --1.31439724564 --2.98693871498 --1.3144120872 --2.96772855521 --1.31439909339 --2.94852000475 --1.31437253952 --2.93126052618 --1.31434911489 --2.91400134564 --1.31432881951 --2.89674282074 --1.31431153417 --2.87948441505 --1.31429737806 --2.86222648621 --1.31428638101 --2.84496867657 --1.31427848339 --2.82771122456 --1.31427368522 --2.81045371294 --1.31427201629 --2.79319649935 --1.3142734468 --2.77593904734 --1.31427803635 --2.75868165493 --1.31428575516 --2.74142408371 --1.3142965734 --2.72416651249 --1.31431046128 --2.70690846443 --1.31432753802 --2.68965029717 --1.31434768438 --2.67239153385 --1.31437093019 --2.65513253212 --1.31439724564 --2.63787293434 --1.314412117 --2.61866271496 --1.31439912319 --2.5994541049 --1.31437253952 --2.58219462633 --1.31434908509 --2.56493550539 --1.31432878971 --2.5476769805 --1.31431156397 --2.53041857481 --1.31429737806 --2.51316070557 --1.3142863512 --2.49590289593 --1.31427848339 --2.47864544392 --1.31427368522 --2.4613879323 --1.31427201629 --2.4441305995 --1.3142734468 --2.42687314749 --1.31427803635 --2.40961587429 --1.31428575516 --2.39235824347 --1.3142965734 --2.37510061264 --1.31431046128 --2.35784250498 --1.31432753802 --2.3405842781 --1.31434768438 --2.323325634 --1.31437096 --2.30606675148 --1.31439727544 --2.2888070941 --1.314412117 --2.26959687471 --1.31439912319 --2.25038832426 --1.31437253952 --2.23312884569 --1.31434908509 --2.21586966515 --1.31432875991 --2.19861108065 --1.31431150436 --2.18135273457 --1.31429737806 --2.16409480572 --1.31428638101 --2.14683693647 --1.31427848339 --2.12957948446 --1.31427368522 --2.11232197285 --1.31427201629 --2.09506475926 --1.3142734468 --2.07780730725 --1.31427803635 --2.06054997444 --1.31428575516 --2.04329234362 --1.3142965734 --2.02603471279 --1.31431046128 --2.00877666473 --1.31432753802 --1.99151852727 --1.31434771419 --1.97425982356 --1.31437096 --1.95700085163 --1.31439724564 --1.93974122405 --1.3144120872 --1.92053100467 --1.31439909339 --1.90132245421 --1.31437253952 --1.88406300545 --1.31434908509 --1.8668037951 --1.31432875991 --1.8495452106 --1.31431153417 --1.83228686452 --1.31429740787 --1.81502896547 --1.31428638101 --1.79777112603 --1.31427848339 --1.78051367402 --1.31427368522 --1.76325616241 --1.31427201629 --1.74599891901 --1.3142734766 --1.728741467 --1.31427806616 --1.7114841342 --1.31428572535 --1.69422653317 --1.3142965436 --1.67696890235 --1.31431046128 --1.65971085429 --1.31432753802 --1.64245268702 --1.31434765458 --1.62519395351 --1.31437093019 --1.60793498159 --1.31439727544 --1.59067535401 --1.3144120872 --1.57146516442 --1.31439909339 --1.55225658417 --1.31437253952 --1.5349971056 --1.31434911489 --1.51773795485 --1.31432875991 --1.50047940016 --1.31431147456 --1.48322099447 --1.31429737806 --1.46596309542 --1.31428638101 --1.44870528579 --1.31427845359 --1.43144786358 --1.31427365542 --1.41419038177 --1.31427201629 --1.39693310857 --1.3142734468 --1.37967565656 --1.31427803635 --1.36241832375 --1.31428575516 --1.34516069293 --1.3142965734 --1.32790309191 --1.31431046128 --1.31064501405 --1.31432753802 --1.29338681698 --1.31434768438 --1.27612811327 --1.31437093019 --1.25886917114 --1.31439724564 --1.24160954356 --1.314412117 --1.22239932418 --1.31439909339 --1.20319077373 --1.31437250972 --1.18593132496 --1.31434911489 --1.16867211461 --1.31432878971 --1.15141353011 --1.31431150436 --1.13415518403 --1.31429737806 --1.11689728499 --1.31428638101 --1.09963944554 --1.3142785132 --1.08238199353 --1.31427371502 --1.06512448191 --1.31427201629 --1.04786723852 --1.3142734468 --1.03060978651 --1.31427803635 --1.01335245371 --1.31428575516 --0.996094837786 --1.3142965734 --0.978837221861 --1.31431049109 --0.961579173803 --1.31432756782 --0.944320991635 --1.31434768438 --0.927062258124 --1.31437096 --0.909803286195 --1.31439727544 --0.892543673515 --1.314412117 --0.873333498835 --1.31439912319 --0.85412491858 --1.31437253952 --0.83686542511 --1.31434908509 --0.819606259465 --1.31432878971 --0.802347674966 --1.31431153417 --0.785089284182 --1.31429737806 --0.767831400037 --1.31428638101 --0.750573575497 --1.31427848339 --0.733316138387 --1.31427368522 --0.716058641672 --1.31427201629 --0.698801383376 --1.3142734468 --0.681543931365 --1.31427806616 --0.664286598563 --1.31428578496 --0.647028967738 --1.3142965734 --0.629771351814 --1.31431049109 --0.612513318658 --1.31432756782 --0.59525513649 --1.31434768438 --0.57799641788 --1.31437096 --0.560737460851 --1.31439730525 --0.54347781837 --1.3144120872 --0.524267613888 --1.31439906359 --0.505059041083 --1.31437253952 --0.487799569965 --1.31434908509 --0.470540396869 --1.31432875991 --0.45328181982 --1.31431150436 --0.436023443937 --1.31429737806 --0.418765567243 --1.31428638101 --0.401507735252 --1.31427848339 --0.384250275791 --1.31427368522 --0.366992771626 --1.31427201629 --0.34973552078 --1.3142734468 --0.33247808367 --1.31427803635 --0.315220758319 --1.31428575516 --0.297963134944 --1.3142965734 --0.280705519021 --1.31431049109 --0.263447463513 --1.31432756782 --0.24618928507 --1.31434768438 --0.228930570185 --1.31437096 --0.211671598256 --1.31439727544 --0.194411963224 --1.314412117 --0.175201781094 --1.29726266861 --0.155989196151 --1.29723623395 --0.138729713857 --1.29721295834 --0.121470550075 --1.29719269276 --0.104212004691 --1.29717549681 --0.0869536418468 --1.29716145992 --0.0696957735345 --1.29715049267 --0.0524379676208 --1.29714262486 --0.0351805319078 --1.29713785649 --0.0179230393842 --1.29713621736 --0.000665792031215 --1.29713764787 -0.0165916352998 --1.29714217782 -0.0338489385322 --1.29714980721 -0.0511065442115 --1.29716059565 -0.0683641545474 --1.29717451334 -0.0856221932917 --1.29719150066 -0.10288034752 --1.29721146822 -0.120139047503 --1.29723462462 -0.137398000806 --1.29726085067 -0.154657620937 --1.29727560282 -0.173867955804 --1.29726263881 -0.19307666272 --1.29723623395 -0.210336133838 --1.29721295834 -0.227595295757 --1.29719269276 -0.244853839278 --1.29717549681 -0.262112207711 --1.29716145992 -0.279370084405 --1.29715046286 -0.296627894044 --1.29714259505 -0.313885331154 --1.29713782668 -0.331142820418 --1.29713615775 -0.348400078714 --1.29713761806 -0.365657508373 --1.29714220762 -0.382914796472 --1.29714989662 -0.400172397494 --1.29716065526 -0.417430005968 --1.29717448354 -0.434688039124 --1.29719147086 -0.45194619894 --1.29721149802 -0.469204895199 --1.29723465443 -0.486463852227 --1.29726082087 -0.503723479807 --1.29727560282 -0.522933796048 --1.29726266861 -0.542142510414 --1.29723623395 -0.559401988983 --1.29721295834 -0.576661139727 --1.29719269276 -0.593919694424 --1.29717549681 -0.611178070307 --1.29716143012 -0.62843593955 --1.29715043306 -0.645693734288 --1.29714259505 -0.662951171398 --1.29713785649 -0.680208668113 --1.29713621736 -0.697465911508 --1.29713764787 -0.714723348617 --1.29714220762 -0.731980636716 --1.29714989662 -0.74923825264 --1.29716065526 -0.766495868564 --1.29717451334 -0.78375390172 --1.29719150066 -0.801012054086 --1.29721149802 -0.818270742893 --1.29723465443 -0.835529685021 --1.29726085067 -0.852789327502 --1.29727563262 -0.871999680996 --1.29726266861 -0.89120836556 --1.29723620415 -0.908467844129 --1.29721289873 -0.925727009773 --1.29719266295 -0.942985549569 --1.29717549681 -0.960243925452 --1.29716145992 -0.977501794696 --1.29715049267 -0.994759589434 --1.29714262486 -1.01201704145 --1.29713785649 -1.02927455306 --1.29713618756 -1.04653176665 --1.29713761806 -1.06378915906 --1.29714220762 -1.08104649186 --1.29714986682 -1.09830412269 --1.29716062546 -1.11556169391 --1.29717448354 -1.13281971216 --1.29719147086 -1.15007787943 --1.29721149802 -1.16733658314 --1.29723465443 -1.18459555507 --1.29726085067 -1.20185518265 --1.29727560282 -1.22106552124 --1.29726263881 -1.2402742207 --1.29723623395 -1.25753369927 --1.29721295834 -1.27479287982 --1.29719269276 -1.29205140472 --1.29717549681 -1.3093097508 --1.29716145992 -1.32656762004 --1.29715049267 -1.34382542967 --1.29714262486 -1.36108288169 --1.29713785649 -1.3783403635 --1.29713618756 -1.3955976069 --1.29713761806 -1.41285505891 --1.29714217782 -1.4301123321 --1.29714983702 -1.44736993313 --1.29716062546 -1.46462756395 --1.29717448354 -1.4818855822 --1.29719147086 -1.49914374947 --1.29721146822 -1.51640245318 --1.29723462462 -1.53366139531 --1.29726085067 -1.55092102289 --1.29727560282 -1.57013133168 --1.29726266861 -1.58934006095 --1.29723626375 -1.60659953952 --1.29721292854 -1.62385869026 --1.29719263315 -1.64111727476 --1.29717546701 -1.65837562084 --1.29716145992 -1.67563346028 --1.29715049267 -1.69289126992 --1.29714259505 -1.71014872193 --1.29713782668 -1.72740623355 --1.29713618756 -1.74466347695 --1.29713764787 -1.76192089915 --1.29714223742 -1.77917820215 --1.29714986682 -1.79643580318 --1.29716062546 -1.8136934042 --1.29717448354 -1.83095145225 --1.29719147086 -1.84820961952 --1.29721149802 -1.86546832323 --1.29723465443 -1.88272726536 --1.29726085067 -1.89998686313 --1.29727563262 -1.91919720173 --1.29726266861 -1.93840590119 --1.29723623395 -1.95566537976 --1.29721295834 -1.97292456031 --1.29719269276 -1.990183115 --1.29717549681 -2.00744152069 --1.29716145992 -2.02469933033 --1.29715046286 -2.04195708036 --1.29714262485 -2.05921453237 --1.29713785649 -2.07647204399 --1.29713615775 -2.09372925758 --1.29713761806 -2.11098664999 --1.29714220762 -2.12824398279 --1.29714989662 -2.14550161362 --1.29716065526 -2.16275918484 --1.29717451334 -2.18001717329 --1.29719150066 -2.19727540016 --1.29721149802 -2.21453416348 --1.29723465443 -2.2317931056 --1.29726085067 -2.24905270338 --1.29727563262 -2.26826304198 --1.29726266861 -2.28747177124 --1.29723623395 -2.30473124981 --1.29721295834 -2.32199037075 --1.29719269276 -2.33924895525 --1.29717549681 -2.35650736093 --1.29716145992 -2.37376523018 --1.29715046286 -2.39102303982 --1.29714259505 -2.40828043222 --1.29713785649 -2.42553788423 --1.29713618756 -2.44279515743 --1.29713761806 -2.46005260945 --1.29714220762 -2.47730994225 --1.29714989662 -2.49456757307 --1.29716065526 -2.51182514429 --1.29717451334 -2.52908319235 --1.29719150066 -2.54634135961 --1.29721149802 -2.56360000372 --1.29723465443 -2.58085888624 --1.29726085067 -2.59811854363 --1.29727560282 -2.61732888222 --1.29726263881 -2.63653755188 --1.29723623395 -2.65379703045 --1.29721295834 -2.67105621099 --1.29719269276 -2.68831479549 --1.29717549681 -2.70557314157 --1.29716145992 -2.72283101082 --1.29715046286 -2.74008882046 --1.29714259505 -2.75734627247 --1.29713785649 -2.77460378408 --1.29713618756 -2.79186099768 --1.29713761806 -2.80911844969 --1.29714220762 -2.82637578249 --1.29714989662 -2.84363335371 --1.29716065526 -2.86089092493 --1.29717448354 -2.87814897299 --1.29719147086 -2.89540714026 --1.29721149802 -2.91266584397 --1.29723462462 -2.9299248457 --1.29726082087 -2.94718450308 --1.29727563262 -2.96639478207 --1.29726266861 -2.98560345173 --1.29723623395 -3.0028629303 --1.29721295834 -3.02012211084 --1.29719269276 -3.03738069534 --1.29717549681 -3.05463904142 --1.29716145992 -3.07189685106 --1.29715049267 -3.0891546607 --1.29714262486 -3.10641211271 --1.29713785649 -3.12366962433 --1.29713621736 -3.14092686971 --1.29713764787 --3.12500101328 --1.29714217782 --3.10774368048 --1.29714980721 --3.09048610926 --1.29716059565 --3.07322853803 --1.29717451334 --3.05597048998 --1.29719150066 --3.03871232271 --1.29721146822 --3.021453619 --1.29723462462 --3.00419461727 --1.29726085067 --2.98693495989 --1.29727560282 --2.9677246809 --1.29726263881 --2.94851601124 --1.29723623395 --2.93125653267 --1.29721295834 --2.91399735213 --1.29719269276 --2.89673882723 --1.29717549681 --2.87948048115 --1.29716145992 --2.8622226119 --1.29715046286 --2.84496480227 --1.29714259505 --2.82770735026 --1.29713782668 --2.81044983864 --1.29713615775 --2.79319256544 --1.29713761806 --2.77593517304 --1.29714220762 --2.75867789984 --1.29714989662 --2.74142026901 --1.29716065526 --2.72416263819 --1.29717448354 --2.70690464974 --1.29719147086 --2.68964654207 --1.29721149802 --2.67238777876 --1.29723465443 --2.65512877703 --1.29726082087 --2.63786917925 --1.29727560282 --2.61865884066 --1.29726266861 --2.59945011139 --1.29723623395 --2.58219063282 --1.29721295834 --2.56493151188 --1.29719269276 --2.54767298699 --1.29717549681 --2.5304145813 --1.29716143012 --2.51315671206 --1.29715043306 --2.49589890242 --1.29714259505 --2.47864145041 --1.29713785649 --2.4613839984 --1.29713621736 --2.44412672519 --1.29713764787 --2.42686927318 --1.29714220762 --2.4096120596 --1.29714989662 --2.39235442877 --1.29716065526 --2.37509673834 --1.29717451334 --2.35783869028 --1.29719150066 --2.34058052301 --1.29721149802 --2.32332187891 --1.29723465443 --2.30606299639 --1.29726085067 --2.288803339 --1.29727563262 --2.26959294081 --1.29726266861 --2.25038427115 --1.29723620415 --2.23312485218 --1.29721289873 --2.21586567164 --1.29719266295 --2.19860714674 --1.29717549681 --2.18134880066 --1.29716145992 --2.16409087181 --1.29715049267 --2.14683306217 --1.29714262486 --2.12957561016 --1.29713785649 --2.11231809855 --1.29713618756 --2.09506088495 --1.29713761806 --2.07780343294 --1.29714220762 --2.06054610014 --1.29714986682 --2.04328852892 --1.29716062546 --2.0260309577 --1.29717448354 --2.00877290964 --1.29719147086 --1.99151474238 --1.29721149802 --1.97425603867 --1.29723465443 --1.95699709654 --1.29726085067 --1.93973749876 --1.29727560282 --1.92052713037 --1.29726263881 --1.9013184011 --1.29723623395 --1.88405898214 --1.29721295834 --1.86679983139 --1.29719269276 --1.84954124689 --1.29717549681 --1.83228287101 --1.29716145992 --1.81502500177 --1.29715049267 --1.79776722193 --1.29714262486 --1.78050979972 --1.29713785649 --1.7632522881 --1.29713618756 --1.74599504471 --1.29713761806 --1.72873759269 --1.29714217782 --1.7114802897 --1.29714983702 --1.69422271848 --1.29716062546 --1.67696508765 --1.29717448354 --1.6597070396 --1.29719147086 --1.64244890213 --1.29721146822 --1.62519019842 --1.29723462462 --1.60793122649 --1.29726085067 --1.59067159891 --1.29727560282 --1.57146129012 --1.29726266861 --1.55225259065 --1.29723626375 --1.53499311209 --1.29721292854 --1.51773396135 --1.29719263315 --1.50047543645 --1.29717546701 --1.48321706057 --1.29716145992 --1.46595916152 --1.29715049267 --1.44870135188 --1.29714259505 --1.43144392967 --1.29713782668 --1.41418644786 --1.29713618756 --1.39692920446 --1.29713764787 --1.37967178225 --1.29714223742 --1.36241444945 --1.29714986682 --1.34515681863 --1.29716062546 --1.32789924741 --1.29717448354 --1.31064122915 --1.29719147086 --1.29338306189 --1.29721149802 --1.27612435818 --1.29723465443 --1.25886541605 --1.29726085067 --1.24160578847 --1.29727563262 --1.22239542008 --1.29726266861 --1.20318672061 --1.29723623395 --1.18592727184 --1.29721295834 --1.1686681211 --1.29719269276 --1.1514095664 --1.29717549681 --1.13415119052 --1.29716145992 --1.11689332128 --1.29715046286 --1.09963554144 --1.29714262485 --1.08237811923 --1.29713785649 --1.06512060761 --1.29713615775 --1.04786336422 --1.29713761806 --1.03060591221 --1.29714220762 --1.01334860921 --1.29714989662 --0.996091008186 --1.29716065526 --0.978833407164 --1.29717451334 --0.96157540381 --1.29719150066 --0.944317221642 --1.29721149802 --0.92705848813 --1.29723465443 --0.909799546003 --1.29726085067 --0.892539948225 --1.29727563262 --0.873329609633 --1.29726266861 --0.854120880365 --1.29723623395 --0.836861401796 --1.29721295834 --0.819602236151 --1.29719269276 --0.802343666553 --1.29717549681 --0.785085305572 --1.29716145992 --0.767827451229 --1.29715046286 --0.75056964159 --1.29714259505 --0.733312219381 --1.29713785649 --0.716054737568 --1.29713618756 --0.698797494173 --1.29713761806 --0.681540071964 --1.29714220762 --0.664282754064 --1.29714989662 --0.64702513814 --1.29716065526 --0.629767537117 --1.29717451334 --0.61250950396 --1.29719150066 --0.595251336694 --1.29721149802 --0.577992632985 --1.29723465443 --0.560733705759 --1.29726085067 --0.543474078178 --1.29727560282 --0.524263739586 --1.29726263881 --0.505055040121 --1.29723623395 --0.487795569003 --1.29721295834 --0.470536410809 --1.29719269276 --0.453277856112 --1.29717549681 --0.436019487679 --1.29716145992 --0.418761625886 --1.29715046286 --0.401503816247 --1.29714259505 --0.384246371686 --1.29713785649 --0.366988889873 --1.29713618756 --0.349731639028 --1.29713761806 --0.332474209368 --1.29714220762 --0.315216913819 --1.29714989662 --0.297959312797 --1.29716065526 --0.280701696873 --1.29717448354 --0.263443648815 --1.29719147086 --0.246185492724 --1.29721149802 --0.228926796466 --1.29723462462 --0.211667846888 --1.29726082087 --0.194408226759 --1.29727563262 --0.175197903067 --1.28016805649 --0.15598673746 --1.28014177084 --0.138727270067 --1.28011861444 --0.121468117461 --1.28009843827 --0.104209579527 --1.28008136153 --0.0869512241334 --1.28006738424 --0.069693364203 --1.28005650639 --0.0524355713278 --1.28004869819 --0.035178147722 --1.28004392982 --0.0179206633475 --1.28004232049 --0.000663425773382 --1.280043751 -0.016593991546 --1.28004825115 -0.033851286862 --1.28005588054 -0.0511088846251 --1.28006663918 -0.0683664865792 --1.28008046746 -0.0856245160103 --1.28009730577 -0.1028826572 --1.28011718392 -0.120141346008 --1.28014025092 -0.137400288135 --1.28016632795 -0.154659900814 --1.2801810205 -0.173870321364 --1.28016808629 -0.19307911396 --1.28014180064 -0.210338577628 --1.28011861444 -0.227597735822 --1.28009843827 -0.244856275618 --1.28008136153 -0.262114621699 --1.28006738424 -0.279372483492 --1.28005647659 -0.296630293131 --1.28004863858 -0.313887715339 --1.28004387021 -0.331145182252 --1.28004226089 -0.348402425647 --1.2800437212 -0.365659847856 --1.28004825115 -0.382917135954 --1.28005591035 -0.400174736977 --1.28006663918 -0.417432337999 --1.28008040786 -0.434690363705 --1.28009727597 -0.45194850862 --1.28011718392 -0.469207204878 --1.28014025092 -0.486466154456 --1.28016629815 -0.503725759685 --1.2801809907 -0.522936165333 --1.28016808629 -0.542144969106 --1.28014180064 -0.559404447675 --1.28011861444 -0.576663598418 --1.28009843827 -0.593922138214 --1.28008136153 -0.611180499196 --1.28006738424 -0.628438353538 --1.28005647659 -0.645696148276 --1.28004863858 -0.662953570485 --1.28004390001 -0.680211052299 --1.28004232049 -0.697468280792 --1.280043751 -0.7147256881 --1.28004825115 -0.731982991099 --1.28005591035 -0.749240592122 --1.28006663918 -0.766498178244 --1.28008043766 -0.783756196499 --1.28009730577 -0.801014363766 --1.28011718392 -0.818273067475 --1.28014028072 -0.8355319947 --1.28016635776 -0.852791622281 --1.2801810205 -0.872002065182 --1.28016808629 -0.891210839152 --1.28014177084 -0.908470287919 --1.28011855483 -0.925729438662 --1.28009840846 -0.942987948656 --1.28008136153 -0.960246309638 --1.28006738424 -0.977504193783 --1.28005650639 -0.994761988522 --1.28004869819 -1.01201942563 --1.28004392982 -1.02927690744 --1.28004229069 -1.04653412104 --1.2800437212 -1.06379151344 --1.28004825115 -1.08104881644 --1.28005588054 -1.09830644727 --1.28006660938 -1.11556404829 --1.28008040786 -1.13282203674 --1.28009727597 -1.15008017421 --1.28011718392 -1.16733887792 --1.28014028072 -1.18459782004 --1.28016635776 -1.20185744762 --1.2801810205 -1.22106787562 --1.28016808629 -1.2402766645 --1.28014180064 -1.25753614307 --1.28011861444 -1.27479532361 --1.28009843827 -1.2920538485 --1.28008136153 -1.30931219458 --1.28006738424 -1.32657006383 --1.28005650639 -1.34382784366 --1.28004866839 -1.36108526587 --1.28004390001 -1.37834274769 --1.28004229069 -1.39559996128 --1.2800437212 -1.41285738349 --1.28004822135 -1.43011468649 --1.28005585074 -1.44737225771 --1.28006660938 -1.46462985873 --1.28008040786 -1.48188790679 --1.28009730577 -1.49914607406 --1.28011721372 -1.51640477777 --1.28014028072 -1.53366371989 --1.28016635776 -1.55092331767 --1.2801810205 -1.57013371587 --1.28016811609 -1.58934253454 --1.28014183044 -1.60660198331 --1.28011858464 -1.62386110425 --1.28009840846 -1.64111968875 --1.28008136153 -1.65837803483 --1.28006738424 -1.67563584447 --1.28005650639 -1.69289365411 --1.28004863858 -1.71015110612 --1.28004387021 -1.72740858793 --1.28004229069 -1.74466583133 --1.280043751 -1.76192325354 --1.28004828095 -1.77918052673 --1.28005588054 -1.79643812776 --1.28006660938 -1.81369575858 --1.28008040786 -1.83095380664 --1.28009727597 -1.8482119143 --1.28011718392 -1.86547058821 --1.28014025092 -1.88272953034 --1.28016632795 -1.89998912811 --1.2801810205 -1.91919955611 --1.28016808629 -1.93840834499 --1.28014180064 -1.95566782355 --1.28011861444 -1.9729270041 --1.28009843827 -1.99018552899 --1.28008136153 -2.00744387507 --1.28006738424 -2.02470171452 --1.28005647659 -2.04195946455 --1.28004863858 -2.05921691656 --1.28004387021 -2.07647442817 --1.28004226089 -2.09373164177 --1.2800437212 -2.11098903418 --1.28004825115 -2.12824630737 --1.28005591035 -2.1455039382 --1.28006663918 -2.16276156902 --1.28008040786 -2.18001955748 --1.28009727597 -2.19727772474 --1.28011718392 -2.21453642845 --1.28014025092 -2.23179537058 --1.28016632795 -2.24905502796 --1.2801810205 -2.26826542616 --1.28016808629 -2.28747421503 --1.28014180064 -2.3047336936 --1.28011861444 -2.32199281454 --1.28009843827 -2.33925139904 --1.28008136153 -2.35650974512 --1.28006738424 -2.37376755476 --1.28005647659 -2.3910253644 --1.28004866839 -2.40828281641 --1.28004392982 -2.42554032802 --1.28004229069 -2.44279754162 --1.2800437212 -2.46005493403 --1.28004825115 -2.47731226683 --1.28005591035 -2.49456989765 --1.28006663918 -2.51182746887 --1.28008040786 -2.52908545732 --1.28009727597 -2.54634362459 --1.28011718392 -2.5636023283 --1.28014025092 -2.58086121082 --1.28016629815 -2.59812086821 --1.2801809907 -2.6173312664 --1.28016808629 -2.63653999567 --1.28014180064 -2.65379947424 --1.28011864424 -2.67105859518 --1.28009846807 -2.68831717968 --1.28008136153 -2.70557558537 --1.28006738424 -2.72283345461 --1.28005647659 -2.74009126425 --1.28004866839 -2.75734865665 --1.28004392982 -2.77460610867 --1.28004229069 -2.79186338186 --1.2800437212 -2.80912083387 --1.28004825115 -2.82637810707 --1.28005591035 -2.84363567829 --1.28006663918 -2.86089324951 --1.28008040786 -2.87815129757 --1.28009727597 -2.89540946484 --1.28011718392 -2.91266816854 --1.28014022112 -2.92992717028 --1.28016629815 -2.94718676806 --1.2801810205 -2.96639716625 --1.28016805649 -2.98560595512 --1.28014177084 -3.00286537409 --1.28011861444 -3.02012455463 --1.28009843827 -3.03738307953 --1.28008136153 -3.054641366 --1.28006738424 -3.07189923525 --1.28005650639 -3.08915704489 --1.28004869819 -3.1064144969 --1.28004392982 -3.12367200852 --1.28004232049 -3.14092919429 --1.280043751 --3.1249986887 --1.28004825115 --3.1077413559 --1.28005588054 --3.09048378468 --1.28006663918 --3.07322621346 --1.28008046746 --3.0559681654 --1.28009730577 --3.03870999813 --1.28011718392 --3.02145129442 --1.28014025092 --3.0041923523 --1.28016632795 --2.98693275452 --1.2801810205 --2.96772229672 --1.28016808629 --2.94851356745 --1.28014180064 --2.93125414849 --1.28011861444 --2.91399490834 --1.28009843827 --2.89673638344 --1.28008136153 --2.87947809696 --1.28006738424 --2.86222022772 --1.28005647659 --2.84496241808 --1.28004863858 --2.82770496607 --1.28004387021 --2.81044745445 --1.28004226089 --2.79319018125 --1.2800437212 --2.77593278885 --1.28004825115 --2.75867557526 --1.28005591035 --2.74141794443 --1.28006663918 --2.724160254 --1.28008040786 --2.70690226555 --1.28009727597 --2.68964421749 --1.28011718392 --2.67238551378 --1.28014025092 --2.65512651205 --1.28016629815 --2.63786691427 --1.2801809907 --2.61865651608 --1.28016808629 --2.5994476676 --1.28014180064 --2.58218818903 --1.28011861444 --2.56492906809 --1.28009843827 --2.5476705432 --1.28008136153 --2.53041213751 --1.28006738424 --2.51315426826 --1.28005647659 --2.49589645863 --1.28004863858 --2.47863900661 --1.28004390001 --2.4613815546 --1.28004232049 --2.44412434101 --1.280043751 --2.4268669486 --1.28004825115 --2.40960967541 --1.28005591035 --2.39235210419 --1.28006663918 --2.37509447336 --1.28008043766 --2.3578364253 --1.28009730577 --2.34057825804 --1.28011718392 --2.32331955433 --1.28014028072 --2.30606067181 --1.28016635776 --2.28880101442 --1.2801810205 --2.26959055662 --1.28016808629 --2.25038182736 --1.28014177084 --2.23312240839 --1.28011855483 --2.21586328745 --1.28009840846 --2.19860476256 --1.28008136153 --2.18134635687 --1.28006738424 --2.16408848763 --1.28005650639 --2.14683067799 --1.28004869819 --2.12957322598 --1.28004392982 --2.11231577397 --1.28004229069 --2.09505856037 --1.2800437212 --2.07780116796 --1.28004825115 --2.06054383516 --1.28005588054 --2.04328620434 --1.28006660938 --2.02602863312 --1.28008040786 --2.00877058506 --1.28009727597 --1.9915124178 --1.28011718392 --1.97425374389 --1.28014028072 --1.95699480176 --1.28016635776 --1.93973520398 --1.2801810205 --1.92052477598 --1.28016808629 --1.90131595731 --1.28014180064 --1.88405650854 --1.28011861444 --1.8667973876 --1.28009843827 --1.8495388329 --1.28008136153 --1.83228045702 --1.28006738424 --1.81502258778 --1.28005650639 --1.79776480794 --1.28004866839 --1.78050741553 --1.28004390001 --1.76324993372 --1.28004229069 --1.74599269033 --1.2800437212 --1.72873523831 --1.28004822135 --1.71147793531 --1.28005585074 --1.69422036409 --1.28006660938 --1.67696276307 --1.28008040786 --1.65970471501 --1.28009730577 --1.64244657755 --1.28011721372 --1.62518790364 --1.28014028072 --1.60792896151 --1.28016635776 --1.59066933393 --1.2801810205 --1.57145890594 --1.28016811609 --1.55225014687 --1.28014183044 --1.5349906981 --1.28011858464 --1.51773151755 --1.28009840846 --1.50047299266 --1.28008136153 --1.48321464658 --1.28006738424 --1.46595677733 --1.28005650639 --1.44869896769 --1.28004863858 --1.43144151568 --1.28004387021 --1.41418403387 --1.28004229069 --1.39692682028 --1.280043751 --1.37966942787 --1.28004828095 --1.36241212487 --1.28005588054 --1.34515449404 --1.28006660938 --1.32789692282 --1.28008040786 --1.31063893437 --1.28009727597 --1.29338076711 --1.28011718392 --1.2761220634 --1.28014025092 --1.25886312127 --1.28016632795 --1.24160349369 --1.2801810205 --1.22239306569 --1.28016808629 --1.20318427682 --1.28014180064 --1.18592479825 --1.28011861444 --1.16866567731 --1.28009843827 --1.15140715242 --1.28008136153 --1.13414874673 --1.28006738424 --1.11689087749 --1.28005647659 --1.09963312745 --1.28004863858 --1.08237573504 --1.28004387021 --1.06511822343 --1.28004226089 --1.04786098003 --1.2800437212 --1.03060355783 --1.28004825115 --1.01334628463 --1.28005591035 --0.996088698505 --1.28006663918 --0.978831067681 --1.28008040786 --0.961573049426 --1.28009727597 --0.94431489706 --1.28011718392 --0.927056193352 --1.28014025092 --0.909797266126 --1.28016632795 --0.892537653446 --1.2801810205 --0.873327225447 --1.28016808629 --0.854118436575 --1.28014180064 --0.836858958006 --1.28011861444 --0.819599792361 --1.28009843827 --0.802341252565 --1.28008136153 --0.785082921386 --1.28006738424 --0.767825067044 --1.28005647659 --0.750567257404 --1.28004866839 --0.733309835195 --1.28004392982 --0.716052338481 --1.28004229069 --0.698795095086 --1.2800437212 --0.68153770268 --1.28004825115 --0.664280414581 --1.28005591035 --0.647022813558 --1.28006663918 --0.629765227437 --1.28008040786 --0.612507194281 --1.28009727597 --0.595249041915 --1.28011718392 --0.577990353107 --1.28014025092 --0.560731425881 --1.28016629815 --0.543471813202 --1.2801809907 --0.524261385202 --1.28016808629 --0.50505258888 --1.28014180064 --0.487793125212 --1.28011864424 --0.470533974468 --1.28009846807 --0.453275434673 --1.28008136153 --0.436017073691 --1.28006738424 --0.418759219349 --1.28005647659 --0.40150142461 --1.28004866839 --0.384243994951 --1.28004392982 --0.366986520589 --1.28004229069 --0.349729269743 --1.2800437212 --0.332471847534 --1.28004825115 --0.315214551985 --1.28005591035 --0.297956958413 --1.28006663918 --0.28069935739 --1.28008040786 --0.263441324234 --1.28009727597 --0.24618318677 --1.28011718392 --0.228924497962 --1.28014022112 --0.21166555956 --1.28016629815 --0.194405950606 --1.2801810205 --0.175195533782 --1.26305007935 --0.155984245241 --1.26302394271 --0.138724792749 --1.26300087571 --0.121465647593 --1.26298081875 --0.104207120836 --1.26296386123 --0.0869487803429 --1.26294997335 --0.0696909287945 --1.2629391253 --0.0524331443012 --1.26293131709 --0.0351757300086 --1.26292660832 --0.0179182549473 --1.262924999 --0.000661027850583 --1.26292642951 -0.0165963806212 --1.26293095946 -0.0338536668569 --1.26293852925 -0.0511112539098 --1.26294919849 -0.0683688428253 --1.26296293735 -0.0856268629432 --1.26297971606 -0.102884998545 --1.26299953461 -0.12014367804 --1.2630224526 -0.137402612716 --1.26304835081 -0.154662217945 --1.26306292415 -0.17387272045 --1.26305010915 -0.193081598729 --1.26302400231 -0.210341058671 --1.26300087571 -0.22760020569 --1.26298081875 -0.244858723134 --1.26296386123 -0.262117065489 --1.26294997335 -0.279374927282 --1.2629391253 -0.29663271457 --1.26293128729 -0.313890121877 --1.26292654872 -0.33114758879 --1.2629249692 -0.348404824734 --1.26292642951 -0.365662232042 --1.26293092966 -0.382919512689 --1.26293852925 -0.400177106261 --1.26294919849 -0.417434692383 --1.26296287775 -0.434692710638 --1.26297965646 -0.451950848102 --1.26299950481 -0.46920953691 --1.2630224526 -0.486468471587 --1.26304835081 -0.503728061915 --1.26306292415 -0.52293856442 --1.26305010915 -0.5421474576 --1.26302400231 -0.559406936169 --1.26300087571 -0.576666072011 --1.26298081875 -0.593924582005 --1.26296386123 -0.611182928085 --1.26294997335 -0.628440782428 --1.2629391551 -0.645698577166 --1.26293131709 -0.662955984473 --1.26292657852 -0.680213466287 --1.262924999 -0.697470679879 --1.26292642951 -0.714728072285 --1.26293089986 -0.731985375285 --1.26293846965 -0.749242946505 --1.26294916868 -0.766500532627 --1.26296287775 -0.783758550882 --1.26297968626 -0.801016703248 --1.26299950481 -0.818275392055 --1.2630224526 -0.835534304381 --1.26304838061 -0.85279391706 --1.26306295395 -0.872004434466 --1.26305013895 -0.891213312745 --1.26302400231 -0.908472761512 --1.26300087571 -0.925731897354 --1.26298081875 -0.942990422249 --1.26296383143 -0.96024876833 --1.26294991374 -0.977506607771 --1.2629390955 -0.99476441741 --1.26293131709 -1.01202183962 --1.26292657852 -1.02927929163 --1.2629249692 -1.04653653502 --1.26292642951 -1.06379392743 --1.26293092966 -1.08105120063 --1.26293849945 -1.09830880165 --1.26294916868 -1.11556640267 --1.26296287775 -1.13282442093 --1.26297965646 -1.15008252859 --1.262999475 -1.1673412025 --1.26302242279 -1.18460014463 --1.26304835081 -1.2018597424 --1.26306295395 -1.22107025981 --1.26305010915 -1.24027913809 --1.26302397251 -1.25753858685 --1.26300087571 -1.2747977674 --1.26298081875 -1.2920562923 --1.26296386123 -1.30931463838 --1.26294997335 -1.32657250762 --1.2629391253 -1.34383025766 --1.26293128729 -1.36108765006 --1.26292657852 -1.37834513187 --1.262924999 -1.39560234547 --1.26292639971 -1.41285976768 --1.26293089986 -1.43011707068 --1.26293849945 -1.4473746419 --1.26294916868 -1.46463224292 --1.26296287775 -1.48189026117 --1.26297971606 -1.49914839864 --1.26299953461 -1.51640710235 --1.2630224526 -1.53366604447 --1.26304838061 -1.55092564225 --1.26306295395 -1.57013612986 --1.26305010915 -1.58934500814 --1.26302397251 -1.6066044569 --1.26300087571 -1.62386357784 --1.26298081875 -1.64112213254 --1.26296386123 -1.65838047862 --1.26294997335 -1.67563828826 --1.2629391551 -1.6928960979 --1.26293131709 -1.71015354991 --1.26292657852 -1.72741100192 --1.262924999 -1.74466821551 --1.26292642951 -1.76192563772 --1.26293089986 -1.77918291092 --1.26293849945 -1.79644048214 --1.26294919849 -1.81369808316 --1.26296287775 -1.83095613122 --1.26297965646 -1.84821426869 --1.26299950481 -1.86547294259 --1.2630224526 -1.88273185492 --1.26304835081 -1.89999142289 --1.26306295395 -1.9192019403 --1.26305013895 -1.93841084838 --1.26302400231 -1.95567032695 --1.26300087571 -1.97292947769 --1.26298081875 -1.99018797279 --1.26296386123 -2.00744625926 --1.26294997335 -2.02470415831 --1.2629391253 -2.04196196795 --1.26293128729 -2.05921936035 --1.26292654872 -2.07647681236 --1.2629249692 -2.09373402595 --1.26292642951 -2.11099147796 --1.26293089986 -2.12824875116 --1.26293846965 -2.14550632239 --1.26294916868 -2.16276395321 --1.26296287775 -2.18002200127 --1.26297965646 -2.19728010893 --1.26299950481 -2.21453875303 --1.2630224526 -2.23179769516 --1.26304832101 -2.24905735254 --1.26306292415 -2.26826786995 --1.26305013895 -2.28747671842 --1.26302397251 -2.30473619699 --1.26300084591 -2.32199531794 --1.26298081875 -2.33925378323 --1.26296386123 -2.35651212931 --1.26294997335 -2.37376999855 --1.2629391253 -2.39102774859 --1.26293131709 -2.40828514099 --1.26292660832 -2.42554271221 --1.262924999 -2.44279992581 --1.26292642951 -2.46005725861 --1.26293092966 -2.47731459141 --1.26293849945 -2.49457222223 --1.26294916868 -2.51182979345 --1.26296287775 -2.52908778191 --1.26297965646 -2.54634594917 --1.26299950481 -2.56360465288 --1.2630224526 -2.58086353541 --1.26304835081 -2.59812313318 --1.26306295395 -2.61733365059 --1.26305013895 -2.63654249906 --1.26302400231 -2.65380197764 --1.26300090552 -2.67106115818 --1.26298084855 -2.68831968308 --1.26296386123 -2.70557802916 --1.26294997335 -2.7228358984 --1.2629391253 -2.74009370804 --1.26293131709 -2.75735110044 --1.26292657852 -2.77460855246 --1.2629249692 -2.79186582565 --1.26292642951 -2.80912321806 --1.26293092966 -2.82638043165 --1.26293849945 -2.84363806248 --1.26294916868 -2.8608956337 --1.26296287775 -2.87815362215 --1.26297968626 -2.89541178942 --1.26299953461 -2.91267049312 --1.2630224526 -2.92992949486 --1.26304835081 -2.94718909264 --1.26306295395 -2.96639955044 --1.26305007935 -2.98560845852 --1.26302394271 -3.00286787748 --1.26300087571 -3.02012699842 --1.26298081875 -3.03738552332 --1.26296386123 -3.0546438098 --1.26294997335 -3.07190167904 --1.2629391253 -3.08915948868 --1.26293131709 -3.10641694069 --1.26292660832 -3.1236743927 --1.262924999 -3.14093157848 --1.26292642951 --3.12499624491 --1.26293095946 --3.10773897171 --1.26293852925 --3.09048140049 --1.26294919849 --3.07322376967 --1.26296293735 --3.05596578121 --1.26297971606 --3.03870767355 --1.26299953461 --3.02144896984 --1.2630224526 --3.00419002771 --1.26304835081 --2.98693042993 --1.26306292415 --2.96771991253 --1.26305010915 --2.94851106405 --1.26302400231 --2.93125164509 --1.26300087571 --2.91399246454 --1.26298081875 --2.89673393965 --1.26296386123 --2.87947565317 --1.26294997335 --2.86221778393 --1.2629391253 --2.84495997429 --1.26293128729 --2.82770252228 --1.26292654872 --2.81044507027 --1.2629249692 --2.79318785667 --1.26292642951 --2.77593040466 --1.26293092966 --2.75867313147 --1.26293852925 --2.74141556025 --1.26294919849 --2.72415792942 --1.26296287775 --2.70689988136 --1.26297965646 --2.6896417737 --1.26299950481 --2.67238312959 --1.2630224526 --2.65512418747 --1.26304835081 --2.63786458969 --1.26306292415 --2.61865407229 --1.26305010915 --2.59944516421 --1.26302400231 --2.58218574524 --1.26300087571 --2.5649266243 --1.26298081875 --2.5476680994 --1.26296386123 --2.53040969372 --1.26294997335 --2.51315182447 --1.2629391551 --2.49589407444 --1.26293131709 --2.47863668203 --1.26292657852 --2.46137917042 --1.262924999 --2.44412195683 --1.26292642951 --2.42686462402 --1.26293089986 --2.40960729122 --1.26293846965 --2.39234972 --1.26294916868 --2.37509214878 --1.26296287775 --2.35783410072 --1.26297968626 --2.34057593346 --1.26299950481 --2.32331722975 --1.2630224526 --2.30605834723 --1.26304838061 --2.28879874945 --1.26306295395 --2.26958823204 --1.26305013895 --2.25037938356 --1.26302400231 --2.233119905 --1.26300087571 --2.21586078405 --1.26298081875 --2.19860225916 --1.26296383143 --2.18134385347 --1.26294991374 --2.16408604383 --1.2629390955 --2.14682823419 --1.26293131709 --2.12957078218 --1.26292657852 --2.11231333017 --1.2629249692 --2.09505611658 --1.26292642951 --2.07779878378 --1.26293092966 --2.06054151058 --1.26293849945 --2.04328387976 --1.26294916868 --2.02602630854 --1.26296287775 --2.00876826048 --1.26297965646 --1.99151009321 --1.262999475 --1.97425141931 --1.26302242279 --1.95699247718 --1.26304835081 --1.9397328794 --1.26306295395 --1.920522362 --1.26305010915 --1.90131348372 --1.26302397251 --1.88405403495 --1.26300087571 --1.8667948842 --1.26298081875 --1.84953635931 --1.26296386123 --1.83227804303 --1.26294997335 --1.81502017379 --1.2629391253 --1.79776236415 --1.26293128729 --1.78050497174 --1.26292657852 --1.76324751973 --1.262924999 --1.74599030614 --1.26292639971 --1.72873288393 --1.26293089986 --1.71147558093 --1.26293849945 --1.69421797991 --1.26294916868 --1.67696040869 --1.26296287775 --1.65970239043 --1.26297971606 --1.64244422317 --1.26299953461 --1.62518554926 --1.2630224526 --1.60792663693 --1.26304838061 --1.59066703915 --1.26306295395 --1.57145652175 --1.26305010915 --1.55224764347 --1.26302397251 --1.5349881947 --1.26300087571 --1.51772904396 --1.26298081875 --1.50047051907 --1.26296386123 --1.48321217298 --1.26294997335 --1.46595433354 --1.2629391551 --1.44869652391 --1.26293131709 --1.4314391017 --1.26292657852 --1.41418164968 --1.262924999 --1.39692440629 --1.26292642951 --1.37966701389 --1.26293089986 --1.36240974068 --1.26293849945 --1.34515213966 --1.26294919849 --1.32789456844 --1.26296287775 --1.31063657999 --1.26297965646 --1.29337844252 --1.26299950481 --1.27611973882 --1.2630224526 --1.25886079669 --1.26304835081 --1.24160119891 --1.26306295395 --1.22239068151 --1.26305013895 --1.20318180323 --1.26302400231 --1.18592235446 --1.26300087571 --1.16866320371 --1.26298081875 --1.15140467882 --1.26296386123 --1.13414630294 --1.26294997335 --1.1168884337 --1.2629391253 --1.09963068366 --1.26293128729 --1.08237329125 --1.26292654872 --1.06511580944 --1.2629249692 --1.04785859585 --1.26292642951 --1.03060117364 --1.26293089986 --1.01334387064 --1.26293846965 --0.996086314321 --1.26294916868 --0.978828713298 --1.26296287775 --0.961570680141 --1.26297965646 --0.944312557578 --1.26299950481 --0.927053883672 --1.2630224526 --0.909794941544 --1.26304832101 --0.892535328865 --1.26306292415 --0.87332482636 --1.26305013895 --0.854115948081 --1.26302397251 --0.836856484413 --1.26300084591 --0.81959733367 --1.26298081875 --0.802338823676 --1.26296386123 --0.785080507398 --1.26294997335 --0.767822638154 --1.2629391253 --0.750564843416 --1.26293131709 --0.733307436108 --1.26292660832 --0.716049939394 --1.262924999 --0.6987927109 --1.26292642951 --0.681535318494 --1.26293092966 --0.664278030395 --1.26293849945 --0.647020444274 --1.26294916868 --0.629762873053 --1.26296287775 --0.612504854798 --1.26297965646 --0.595246717334 --1.26299950481 --0.577988028526 --1.2630224526 --0.560729086399 --1.26304835081 --0.543469503522 --1.26306295395 --0.524258986116 --1.26305013895 --0.505050085485 --1.26302400231 --0.487790651619 --1.26300090552 --0.470531515777 --1.26298084855 --0.453272975981 --1.26296386123 --0.43601462245 --1.26294997335 --0.418756775558 --1.2629391253 --0.401498995721 --1.26293131709 --0.384241580963 --1.26292657852 --0.3669841066 --1.2629249692 --0.349726870656 --1.26292642951 --0.332469463349 --1.26293092966 --0.31521217525 --1.26293849945 --0.297954581678 --1.26294916868 --0.280697003007 --1.26296287775 --0.263438992202 --1.26297968626 --0.246180854738 --1.26299953461 --0.228922169656 --1.2630224526 --0.211663238704 --1.26304835081 --0.194403637201 --1.26306295395 --0.175193127245 --1.24590530991 --0.15598173067 --1.24587932229 --0.138722285629 --1.2458563447 --0.121463146061 --1.24583637714 --0.104204630479 --1.24581947923 --0.0869462992996 --1.24580568076 --0.069688458927 --1.24579489231 --0.0524306846783 --1.24578711391 --0.0351732792333 --1.24578246474 --0.0179158153478 --1.24578088522 --0.000658598262818 --1.24578231573 -0.0165988004301 --1.24578681588 -0.0338560775854 --1.24579432607 -0.0511136548594 --1.24580490589 -0.0683712288737 --1.24581855536 -0.0856292378157 --1.24583527446 -0.10288736783 --1.2458550036 -0.120146043599 --1.24587777257 -0.137404970825 --1.24590349198 -0.154664561152 --1.2459179759 -0.173875153065 --1.24590525031 -0.193084120751 --1.24587929249 -0.210343569517 --1.2458563149 -0.22760270536 --1.24583637714 -0.244861211628 --1.24581950903 -0.262119546533 --1.24580571056 -0.279377400875 --1.24579489231 -0.296635173261 --1.24578711391 -0.313892565668 --1.24578243494 -0.33115003258 --1.24578082562 -0.348407253623 --1.24578228593 -0.365664646029 --1.24578681588 -0.382921919227 --1.24579435587 -0.400179497898 --1.2458049357 -0.417437076569 --1.24581852555 -0.434695087373 --1.24583521485 -0.451953217387 --1.24585497379 -0.469211891293 --1.24587777257 -0.486470811069 --1.24590349198 -0.503730393946 --1.2459179759 -0.522940993309 --1.24590528011 -0.542149975896 --1.24587932229 -0.559409439564 --1.2458563149 -0.576668575406 --1.24583640695 -0.5939270854 --1.24581953883 -0.611185401678 --1.24580571056 -0.628443226218 --1.24579492211 -0.645701020956 --1.24578714371 -0.662958443165 --1.24578246474 -0.680215910077 --1.24578085542 -0.697473108768 --1.24578228593 -0.714730501175 --1.24578678608 -0.731987774372 --1.24579429626 -0.749245345592 --1.24580490589 -0.766502946615 --1.24581852555 -0.783760949969 --1.24583524466 -0.801019072533 --1.24585497379 -0.818277746439 --1.24587774277 -0.835536658764 --1.24590349198 -0.852796241641 --1.24591800571 -0.872006833553 --1.24590528011 -0.891215831041 --1.24587932229 -0.908475279808 --1.2458563447 -0.925734385848 --1.24583640695 -0.942992925644 --1.24581950903 -0.960251271725 --1.24580565095 -0.977509081364 --1.24579486251 -0.9947668761 --1.24578711391 -1.01202428341 --1.24578243494 -1.02928173542 --1.24578085542 -1.04653897882 --1.24578231573 -1.06379637122 --1.24578681588 -1.08105364442 --1.24579432607 -1.09831121564 --1.24580487609 -1.11556878686 --1.24581849575 -1.13282680511 --1.24583521485 -1.15008491278 --1.24585494399 -1.16734358668 --1.24587771297 -1.18460249901 --1.24590346217 -1.20186209679 --1.24591800571 -1.2210727334 --1.24590525031 -1.24028167128 --1.24587926268 -1.25754109025 --1.2458563149 -1.2748002708 --1.24583640695 -1.29205879569 --1.24581953883 -1.30931711197 --1.24580571056 -1.32657495141 --1.24579489231 -1.34383270144 --1.24578711391 -1.36109009385 --1.24578246474 -1.37834757566 --1.24578085542 -1.39560478926 --1.24578225613 -1.41286218166 --1.24578678608 -1.43011945486 --1.24579432607 -1.44737702608 --1.24580487609 -1.46463462711 --1.24581849575 -1.48189264536 --1.24583524466 -1.49915078282 --1.24585494399 -1.51640945673 --1.24587774277 -1.53366836906 --1.24590352178 -1.55092796684 --1.24591800571 -1.57013854385 --1.24590525031 -1.58934751153 --1.24587926268 -1.6066069901 --1.2458563149 -1.62386611104 --1.24583637714 -1.64112460613 --1.24581950903 -1.65838295221 --1.24580571056 -1.67564079165 --1.24579492211 -1.69289857149 --1.24578714371 -1.7101559937 --1.24578246474 -1.72741344571 --1.24578085542 -1.7446706593 --1.24578228593 -1.76192805171 --1.24578678608 -1.77918532491 --1.24579432607 -1.79644289613 --1.2458049357 -1.81370046735 --1.24581852555 -1.8309584856 --1.24583521485 -1.84821662306 --1.24585497379 -1.86547532677 --1.24587777257 -1.8827342391 --1.24590349198 -1.89999377728 --1.24591800571 -1.91920438409 --1.24590528011 -1.93841338158 --1.24587932229 -1.95567283035 --1.2458563447 -1.97293198109 --1.24583637714 -1.99019047618 --1.24581950903 -2.00744879246 --1.24580571056 -2.0247066617 --1.24579489231 -2.04196441173 --1.24578711391 -2.05922180414 --1.24578243494 -2.07647925615 --1.24578085542 -2.09373646975 --1.24578231573 -2.11099392176 --1.24578678608 -2.12825119495 --1.24579429626 -2.14550876618 --1.24580490589 -2.1627663374 --1.24581852555 -2.18002432585 --1.24583521485 -2.19728249311 --1.24585497379 -2.21454119682 --1.24587780237 -2.23180007935 --1.24590352178 -2.24905961752 --1.24591800571 -2.26827025414 --1.24590528011 -2.28747922182 --1.24587929249 -2.30473864079 --1.2458563149 -2.32199776173 --1.24583640695 -2.33925622702 --1.24581953883 -2.3565146327 --1.24580571056 -2.37377256155 --1.24579489231 -2.39103031159 --1.24578711391 -2.40828764439 --1.24578246474 -2.425545156 --1.24578085542 -2.44280236959 --1.24578225613 -2.4600597024 --1.24578678608 -2.4773170352 --1.24579432607 -2.49457460642 --1.24580490589 -2.51183217764 --1.24581852555 -2.5290902257 --1.24583521485 -2.54634833336 --1.24585497379 -2.56360697746 --1.24587777257 -2.58086585999 --1.24590352178 -2.59812545776 --1.24591803551 -2.61733609438 --1.24590528011 -2.63654506207 --1.24587932229 -2.65380454063 --1.2458563447 -2.67106372118 --1.24583640695 -2.68832224607 --1.24581953883 -2.70558053255 --1.24580571056 -2.72283834219 --1.24579489231 -2.74009615183 --1.24578711391 -2.75735354424 --1.24578243494 -2.77461099625 --1.24578082562 -2.79186820984 --1.24578228593 -2.80912554264 --1.24578681588 -2.82638281584 --1.24579432607 -2.84364044666 --1.24580490589 -2.86089801788 --1.24581852555 -2.87815600634 --1.24583524466 -2.895414114 --1.2458550036 -2.91267281771 --1.24587777257 -2.92993181944 --1.24590352178 -2.94719141722 --1.24591806531 -2.96640193462 --1.24590530991 -2.98561090231 --1.24587932229 -3.00287038088 --1.2458563447 -3.02012950182 --1.24583637714 -3.03738802671 --1.24581947923 -3.05464631319 --1.24580568076 -3.07190412283 --1.24579489231 -3.08916193247 --1.24578711391 -3.10641938448 --1.24578246474 -3.12367683649 --1.24578088522 -3.14093402226 --1.24578231573 --3.12499386072 --1.24578681588 --3.10773658752 --1.24579432607 --3.0904790163 --1.24580490589 --3.07322138548 --1.24581855536 --3.05596339702 --1.24583527446 --3.03870534897 --1.2458550036 --3.02144664526 --1.24587777257 --3.00418764353 --1.24590349198 --2.98692804575 --1.2459179759 --2.96771752834 --1.24590525031 --2.94850856066 --1.24587929249 --2.93124908209 --1.2458563149 --2.91398996115 --1.24583637714 --2.89673143625 --1.24581950903 --2.87947314977 --1.24580571056 --2.86221534014 --1.24579489231 --2.8449575305 --1.24578711391 --2.82770007849 --1.24578243494 --2.81044262647 --1.24578082562 --2.79318541288 --1.24578228593 --2.77592796087 --1.24578681588 --2.75867068768 --1.24579435587 --2.74141311645 --1.2458049357 --2.72415554523 --1.24581852555 --2.70689755678 --1.24583521485 --2.68963938951 --1.24585497379 --2.67238068581 --1.24587777257 --2.65512180328 --1.24590349198 --2.63786226511 --1.2459179759 --2.61865162849 --1.24590528011 --2.59944266081 --1.24587932229 --2.58218330145 --1.2458563149 --2.56492418051 --1.24583640695 --2.54766565561 --1.24581953883 --2.53040724993 --1.24580571056 --2.51314938069 --1.24579492211 --2.49589163065 --1.24578714371 --2.47863423824 --1.24578246474 --2.46137672663 --1.24578085542 --2.44411951304 --1.24578228593 --2.42686218024 --1.24578678608 --2.40960490703 --1.24579429626 --2.39234733581 --1.24580490589 --2.37508970499 --1.24581852555 --2.35783165693 --1.24583524466 --2.34057354927 --1.24585497379 --2.32331490517 --1.24587774277 --2.30605602264 --1.24590349198 --2.28879642486 --1.24591800571 --2.26958578825 --1.24590528011 --2.25037682056 --1.24587932229 --2.23311734199 --1.2458563447 --2.21585822105 --1.24583640695 --2.19859969616 --1.24581950903 --2.18134135008 --1.24580565095 --2.16408354044 --1.24579486251 --2.1468257308 --1.24578711391 --2.12956833839 --1.24578243494 --2.11231088638 --1.24578085542 --2.09505367279 --1.24578231573 --2.07779633999 --1.24578681588 --2.06053906679 --1.24579432607 --2.04328149557 --1.24580487609 --2.02602392435 --1.24581849575 --2.00876587629 --1.24583521485 --1.99150773883 --1.24585494399 --1.97424906492 --1.24587771297 --1.95699015259 --1.24590346217 --1.93973055482 --1.24591800571 --1.920519948 --1.24590525031 --1.90131098032 --1.24587926268 --1.88405153155 --1.2458563149 --1.86679238081 --1.24583640695 --1.84953385592 --1.24581953883 --1.83227553964 --1.24580571056 --1.8150177002 --1.24579489231 --1.79775992036 --1.24578711391 --1.78050252795 --1.24578246474 --1.76324507594 --1.24578085542 --1.74598786235 --1.24578225613 --1.72873046994 --1.24578678608 --1.71147319675 --1.24579432607 --1.69421559572 --1.24580487609 --1.6769580245 --1.24581849575 --1.65970003605 --1.24583524466 --1.64244189859 --1.24585494399 --1.62518319487 --1.24587774277 --1.60792425275 --1.24590352178 --1.59066468477 --1.24591800571 --1.57145410776 --1.24590525031 --1.55224514007 --1.24587926268 --1.53498569131 --1.2458563149 --1.51772654057 --1.24583637714 --1.50046801567 --1.24581950903 --1.48320969939 --1.24580571056 --1.46595188975 --1.24579492211 --1.44869408011 --1.24578714371 --1.4314366579 --1.24578246474 --1.4141792059 --1.24578085542 --1.3969219625 --1.24578228593 --1.37966457009 --1.24578678608 --1.36240729689 --1.24579432607 --1.34514972567 --1.2458049357 --1.32789215445 --1.24581852555 --1.310634166 --1.24583521485 --1.29337605834 --1.24585497379 --1.27611735463 --1.24587777257 --1.2588584125 --1.24590349198 --1.24159884453 --1.24591800571 --1.22238823772 --1.24590528011 --1.20317927003 --1.24587932229 --1.18591985106 --1.2458563447 --1.16866070032 --1.24583637714 --1.15140217542 --1.24581950903 --1.13414382935 --1.24580571056 --1.11688598991 --1.24579489231 --1.09962823987 --1.24578711391 --1.08237084746 --1.24578243494 --1.06511339545 --1.24578085542 --1.04785618186 --1.24578231573 --1.03059875965 --1.24578678608 --1.01334145666 --1.24579429626 --0.996083885433 --1.24580490589 --0.978826314211 --1.24581852555 --0.961568310857 --1.24583521485 --0.944310188293 --1.24585497379 --0.927051514387 --1.24587780237 --0.909792587161 --1.24590352178 --0.892533004284 --1.24591800571 --0.873322412371 --1.24590528011 --0.854113429785 --1.24587929249 --0.836853995919 --1.2458563149 --0.819594860077 --1.24583640695 --0.802336335182 --1.24581953883 --0.785078004003 --1.24580571056 --0.76782014966 --1.24579489231 --0.750562369823 --1.24578711391 --0.733304977417 --1.24578246474 --0.716047510505 --1.24578085542 --0.698790311813 --1.24578225613 --0.681532919407 --1.24578678608 --0.664275616407 --1.24579432607 --0.647018030286 --1.24580490589 --0.629760459065 --1.24581852555 --0.612502470612 --1.24583521485 --0.595244348049 --1.24585497379 --0.577985659242 --1.24587777257 --0.560726732016 --1.24590352178 --0.54346716404 --1.24591803551 --0.524256572127 --1.24590528011 --0.50504758209 --1.24587932229 --0.487788140774 --1.2458563447 --0.470529004931 --1.24583640695 --0.453270480037 --1.24581953883 --0.436012148857 --1.24580571056 --0.418754316867 --1.24579489231 --0.40149653703 --1.24578711391 --0.384239129722 --1.24578243494 --0.36698167026 --1.24578082562 --0.349724441767 --1.24578228593 --0.332467034459 --1.24578681588 --0.315209768713 --1.24579432607 --0.297952197492 --1.24580490589 --0.280694618821 --1.24581852555 --0.263436615467 --1.24583524466 --0.246178485453 --1.2458550036 --0.228919807822 --1.24587777257 --0.211660884321 --1.24590352178 --0.194401293993 --1.24591806531 --0.175190698355 --1.22875928879 --0.155977711082 --1.22873342037 --0.138718284667 --1.2287105918 --0.121459161863 --1.22869077325 --0.104200657457 --1.22867396474 --0.086942339316 --1.22866022587 --0.0696845166385 --1.22864949703 --0.0524267591536 --1.22864174843 --0.0351693700068 --1.22863709927 --0.0179119217209 --1.22863554955 --0.000654720468448 --1.22863698006 -0.0166026616935 --1.2286414206 -0.0338599225506 --1.22864890098 -0.0511174844578 --1.22865945101 -0.0683750445023 --1.22867301107 -0.0856330357492 --1.22868961096 -0.102891148999 --1.22870922089 -0.120149813592 --1.22873187065 -0.137408722192 --1.22875744104 -0.154668290168 --1.22877189517 -0.173879027367 --1.22875922918 -0.193088136614 --1.22873336077 -0.210347566754 --1.22871056199 -0.227606698871 --1.22869074345 -0.244865193963 --1.22867396474 -0.26212349534 --1.22866025567 -0.279381327331 --1.22864949703 -0.296639099717 --1.22864177823 -0.313896477223 --1.22863712907 -0.331153921783 --1.22863551975 -0.348411120474 --1.22863695025 -0.365668497979 --1.22864145041 -0.382925763726 --1.22864893079 -0.400183327496 --1.22865945101 -0.417440898717 --1.22867301107 -0.43469888717 --1.22868961096 -0.451956994831 --1.22870922089 -0.469215653836 --1.22873187065 -0.486474566161 --1.22875744104 -0.503734134137 --1.22877189517 -0.522944867611 --1.22875925899 -0.54215399921 --1.22873339057 -0.559413433075 --1.22871053219 -0.576672554016 --1.22869077325 -0.59393106401 --1.22867402435 -0.611189365387 --1.22866025567 -0.628447160125 --1.22864949703 -0.64570492506 --1.22864177823 -0.662962347269 --1.22863712907 -0.68021979928 --1.22863551975 -0.69747698307 --1.22863695025 -0.714734360576 --1.22864145041 -0.731991618872 --1.22864893079 -0.749249190092 --1.22865945101 -0.766506776214 --1.22867301107 -0.783764764667 --1.22868961096 -0.801022857428 --1.22870922089 -0.818281501532 --1.22873187065 -0.835540398956 --1.22875744104 -0.852799981833 --1.22877189517 -0.872010737657 --1.22875922918 -0.891219869256 --1.22873339057 -0.90847928822 --1.2287105918 -0.925738379359 --1.22869077325 -0.942996904254 --1.22867399454 -0.960255235433 --1.22866025567 -0.977513030171 --1.22864949703 -0.994770780205 --1.22864177823 -1.01202818751 --1.22863712907 -1.02928563953 --1.22863554955 -1.04654282332 --1.22863698006 -1.06380021572 --1.22864145041 -1.08105748892 --1.22864893079 -1.09831503033 --1.2286594212 -1.11557260156 --1.22867298126 -1.13283059001 --1.22868961096 -1.15008869767 --1.22870922089 -1.16734737158 --1.22873187065 -1.1846062541 --1.22875744104 -1.20186585188 --1.22877189517 -1.2210766077 --1.22875925899 -1.2402856946 --1.22873339057 -1.25754511356 --1.22871056199 -1.27480426431 --1.22869077325 -1.2920627892 --1.22867399454 -1.30932107568 --1.22866025567 -1.32657888532 --1.22864949703 -1.34383663535 --1.22864177823 -1.36109402776 --1.22863712907 -1.37835150957 --1.22863554955 -1.39560869336 --1.22863695025 -1.41286602616 --1.2286414206 -1.43012329936 --1.22864893079 -1.44738087058 --1.2286594212 -1.464638412 --1.22867298126 -1.48189643025 --1.22868961096 -1.49915456772 --1.22870919109 -1.51641321182 --1.22873187065 -1.53367212415 --1.22875750065 -1.55093169212 --1.22877192497 -1.57014241815 --1.22875922918 -1.58935153484 --1.22873336077 -1.60661098361 --1.22871053219 -1.62387010455 --1.22869074345 -1.64112856984 --1.22867399454 -1.65838691592 --1.22866025567 -1.67564475536 --1.22864949703 -1.6929025054 --1.22864177823 -1.71015989781 --1.22863712907 -1.72741732002 --1.22863551975 -1.74467453361 --1.22863695025 -1.76193192601 --1.22864145041 -1.77918916941 --1.22864893079 -1.79644674063 --1.22865945101 -1.81370431185 --1.22867301107 -1.8309623003 --1.22868961096 -1.84822040796 --1.22870922089 -1.86547905207 --1.22873187065 -1.88273796439 --1.22875744104 -1.89999753237 --1.22877189517 -1.91920825839 --1.22875922918 -1.93841737509 --1.22873339057 -1.95567679405 --1.2287105918 -1.9729359448 --1.22869074345 -1.99019446969 --1.22867396474 -2.00745278597 --1.22866025567 -2.02471059561 --1.22864949703 -2.04196828604 --1.22864177823 -2.05922567845 --1.22863712907 -2.07648313046 --1.22863554955 -2.09374034405 --1.22863698006 -2.11099779606 --1.22864145041 -2.12825500965 --1.22864893079 -2.14551258087 --1.22865945101 -2.16277015209 --1.22867301107 -2.18002808094 --1.22868961096 -2.19728624821 --1.22870922089 -2.21454495192 --1.22873190045 -2.23180383444 --1.22875750065 -2.24906337261 --1.22877192497 -2.26827412844 --1.22875922918 -2.28748321533 --1.22873339057 -2.3047426343 --1.2287105918 -2.32200175524 --1.22869080305 -2.33926022053 --1.22867402435 -2.35651856661 --1.22866025567 -2.37377643585 --1.22864949703 -2.39103424549 --1.22864177823 -2.4082916379 --1.22863712907 -2.42554908991 --1.22863551975 -2.4428063035 --1.22863692045 -2.4600636363 --1.2286413908 -2.4773209095 --1.22864890098 -2.49457848072 --1.22865945101 -2.51183605194 --1.22867301107 -2.52909404039 --1.22868961096 -2.54635208845 --1.22870922089 -2.56361073256 --1.22873187065 -2.58086961508 --1.22875747084 -2.59812921286 --1.22877192497 -2.61733996868 --1.22875922918 -2.63654911518 --1.22873339057 -2.65380859375 --1.2287105918 -2.67106765508 --1.22869080305 -2.68832612037 --1.22867402435 -2.70558446645 --1.22866025567 -2.7228423357 --1.22864949703 -2.74010008574 --1.22864177823 -2.75735741854 --1.22863712907 -2.77461487055 --1.22863551975 -2.79187208414 --1.22863695025 -2.80912941694 --1.22864145041 -2.82638669014 --1.22864893079 -2.84364426136 --1.22865945101 -2.86090183258 --1.22867301107 -2.87815988064 --1.22868961096 -2.89541792869 --1.22870922089 -2.9126765728 --1.22873187065 -2.92993551492 --1.22875747084 -2.9471950531 --1.22877195478 -2.96640580893 --1.22875928879 -2.98561495543 --1.22873342037 -3.00287437439 --1.2287105918 -3.02013349533 --1.22869077325 -3.03739202022 --1.22867396474 -3.0546503067 --1.22866022587 -3.07190811634 --1.22864949703 -3.08916586637 --1.22864174843 -3.10642325878 --1.22863709927 -3.12368071079 --1.22863554955 -3.14093789657 --1.22863698006 --3.12499004603 --1.2286414206 --3.10773277283 --1.22864890098 --3.09047520161 --1.22865945101 --3.07321763039 --1.22867301107 --3.05595958233 --1.22868961096 --3.03870153427 --1.22870922089 --3.02144289017 --1.22873187065 --3.00418388843 --1.22875744104 --2.98692435026 --1.22877189517 --2.96771365404 --1.22875922918 --2.94850450754 --1.22873336077 --2.93124508858 --1.22871056199 --2.91398596764 --1.22869074345 --2.89672744274 --1.22867396474 --2.87946915626 --1.22866025567 --2.86221134663 --1.22864949703 --2.84495359659 --1.22864177823 --2.82769620419 --1.22863712907 --2.81043875217 --1.22863551975 --2.79318153858 --1.22863695025 --2.77592408657 --1.22864145041 --2.75866687298 --1.22864893079 --2.74140936136 --1.22865945101 --2.72415179014 --1.22867301107 --2.70689380169 --1.22868961096 --2.68963563442 --1.22870922089 --2.67237693071 --1.22873187065 --2.65511804819 --1.22875744104 --2.63785851002 --1.22877189517 --2.61864775419 --1.22875925899 --2.5994386673 --1.22873339057 --2.58217930794 --1.22871053219 --2.564920187 --1.22869077325 --2.5476616621 --1.22867402435 --2.53040331602 --1.22866025567 --2.51314550638 --1.22864949703 --2.49588769675 --1.22864177823 --2.47863030434 --1.22863712907 --2.46137285232 --1.22863551975 --2.44411563873 --1.22863695025 --2.42685830593 --1.22864145041 --2.40960103273 --1.22864893079 --2.39234346151 --1.22865945101 --2.37508583069 --1.22867301107 --2.35782784223 --1.22868961096 --2.34056979418 --1.22870922089 --2.32331115007 --1.22873187065 --2.30605226755 --1.22875744104 --2.28879266977 --1.22877189517 --2.26958191395 --1.22875922918 --2.25037276745 --1.22873339057 --2.23311328888 --1.2287105918 --2.21585422754 --1.22869077325 --2.19859570265 --1.22867399454 --2.18133735657 --1.22866025567 --2.16407960654 --1.22864949703 --2.1468218565 --1.22864177823 --2.12956446409 --1.22863712907 --2.11230701208 --1.22863554955 --2.09504985809 --1.22863698006 --2.07779252529 --1.22864145041 --2.06053519249 --1.22864893079 --2.04327762127 --1.2286594212 --2.02602005005 --1.22867298126 --2.0087620616 --1.22868961096 --1.99150395393 --1.22870922089 --1.97424528003 --1.22873187065 --1.95698639751 --1.22875744104 --1.93972682953 --1.22877189517 --1.92051610351 --1.22875925899 --1.90130695701 --1.22873339057 --1.88404750824 --1.22871056199 --1.8667884171 --1.22869077325 --1.84952992201 --1.22867399454 --1.83227157593 --1.22866025567 --1.81501373649 --1.22864949703 --1.79775598645 --1.22864177823 --1.78049862385 --1.22863712907 --1.76324117183 --1.22863554955 --1.74598395825 --1.22863695025 --1.72872659564 --1.2286414206 --1.71146935224 --1.22864893079 --1.69421178102 --1.2286594212 --1.6769542098 --1.22867298126 --1.65969622135 --1.22868961096 --1.64243811369 --1.22870919109 --1.62517943979 --1.22873187065 --1.60792052746 --1.22875750065 --1.59066095948 --1.22877192497 --1.57145020365 --1.22875922918 --1.55224111676 --1.22873336077 --1.5349816978 --1.22871053219 --1.51772254705 --1.22869074345 --1.50046405196 --1.22867399454 --1.48320576549 --1.22866025567 --1.46594795585 --1.22864949703 --1.44869017601 --1.22864177823 --1.4314327538 --1.22863712907 --1.41417530179 --1.22863551975 --1.396918118 --1.22863695025 --1.37966072559 --1.22864145041 --1.3624034524 --1.22864893079 --1.34514591098 --1.22865945101 --1.32788833976 --1.22867301107 --1.3106303513 --1.22868961096 --1.29337224364 --1.22870922089 --1.27611356974 --1.22873187065 --1.25885465741 --1.22875744104 --1.24159508944 --1.22877189517 --1.22238436341 --1.22875922918 --1.20317524671 --1.22873339057 --1.18591582775 --1.2287105918 --1.16865670681 --1.22869074345 --1.15139818191 --1.22867396474 --1.13413986564 --1.22866025567 --1.116882056 --1.22864949703 --1.09962430596 --1.22864177823 --1.08236694336 --1.22863712907 --1.06510949135 --1.22863554955 --1.04785227776 --1.22863698006 --1.03059491515 --1.22864145041 --1.01333767176 --1.22864893079 --0.996080085635 --1.22865945101 --0.978822484612 --1.22867301107 --0.96156449616 --1.22868961096 --0.944306388498 --1.22870922089 --0.927047729492 --1.22873190045 --0.909788832068 --1.22875750065 --0.892529264092 --1.22877192497 --0.873318523169 --1.22875922918 --0.854109406471 --1.22873339057 --0.836849987507 --1.2287105918 --0.819590866566 --1.22869080305 --0.802332341671 --1.22867402435 --0.785074025393 --1.22866025567 --0.767816215754 --1.22864949703 --0.750558465719 --1.22864177823 --0.733301073313 --1.22863712907 --0.716043621302 --1.22863551975 --0.69878642261 --1.22863692045 --0.681529030203 --1.2286413908 --0.664271771907 --1.22864890098 --0.647014215589 --1.22865945101 --0.629756644368 --1.22867301107 --0.612498655915 --1.22868961096 --0.595240548253 --1.22870922089 --0.577981904149 --1.22873187065 --0.560723006725 --1.22875747084 --0.543463423848 --1.22877192497 --0.524252697825 --1.22875922918 --0.505043573678 --1.22873339057 --0.487784132361 --1.2287105918 --0.47052501142 --1.22869080305 --0.453266508877 --1.22867402435 --0.43600820005 --1.22866025567 --0.41875038296 --1.22864949703 --0.401492618024 --1.22864177823 --0.384235218167 --1.22863712907 --0.366977773607 --1.22863551975 --0.349720567465 --1.22863695025 --0.332463175058 --1.22864145041 --0.315205924213 --1.22864893079 --0.297948375344 --1.22865945101 --0.280690796673 --1.22867301107 --0.26343280077 --1.22868961096 --0.246174700558 --1.22870922089 --0.228916037828 --1.22873187065 --0.211657125503 --1.22875747084 --0.194397553801 --1.22877195478 --0.175186820328 --1.21164864301 --0.155973561108 --1.21162295342 --0.138714157045 --1.21160030365 --0.12145505473 --1.21158063412 --0.104196565226 --1.21156391501 --0.0869382638484 --1.21155023575 --0.0696804570034 --1.21153956651 --0.0524227134883 --1.21153187752 --0.0351653406397 --1.21152722836 --0.0179079081863 --1.21152564883 --0.000650723464785 --1.21152707934 -0.0166066419333 --1.21153151989 -0.0338638853282 --1.21153897047 -0.0511214304715 --1.21154946089 -0.0683789784089 --1.21156293154 -0.085636952892 --1.21157944202 -0.102895047516 --1.21159893274 -0.120153695345 --1.2116214633 -0.137412589043 --1.21164691448 -0.154672142118 --1.2116612494 -0.173883024603 --1.21164861321 -0.193092282862 --1.21162292361 -0.21035169065 --1.21160030365 -0.227610804141 --1.21158060431 -0.244869291782 --1.21156391501 -0.262127585709 --1.21155026555 -0.279385395348 --1.21153956651 -0.296643137932 --1.21153190732 -0.313900507986 --1.21152725816 -0.331157937646 --1.21152567864 -0.348415121436 --1.21152710914 -0.36567248404 --1.21153154969 -0.382929734885 --1.21153900027 -0.400187283754 --1.21154946089 -0.417444832623 --1.21156293154 -0.434702798724 --1.21157944202 -0.451960891485 --1.21159893274 -0.46921954304 --1.2116214633 -0.486478440463 --1.21164691448 -0.503737993538 --1.2116612494 -0.522948861122 --1.21164864301 -0.542158141732 --1.21162295342 -0.559417545795 --1.21160024405 -0.576676636934 --1.21158057451 -0.593935146928 --1.21156394482 -0.611193448305 --1.21155026555 -0.628451257944 --1.21153956651 -0.645708993077 --1.21153190732 -0.662966355681 --1.21152725816 -0.680223792791 --1.21152567864 -0.697480976582 --1.21152710914 -0.714738339186 --1.21153154969 -0.731995582581 --1.21153900027 -0.749253123999 --1.21154946089 -0.766510680318 --1.21156293154 -0.78376866877 --1.21157944202 -0.80102674663 --1.21159893274 -0.818285375834 --1.2116214633 -0.835544273257 --1.21164691448 -0.852803856134 --1.2116612494 -0.872014760971 --1.21164861321 -0.891224011779 --1.21162292361 -0.908483400941 --1.21160030365 -0.92574249208 --1.21158060431 -0.943000987172 --1.21156388521 -0.96025930345 --1.21155023575 -0.977517098188 --1.21153956651 -0.994774818421 --1.21153190732 -1.01203221083 --1.21152725816 -1.02928966284 --1.21152564883 -1.04654681682 --1.21152710914 -1.06380417943 --1.21153157949 -1.08106145262 --1.21153900027 -1.09831896424 --1.21154946089 -1.11557650566 --1.21156293154 -1.13283449411 --1.21157944202 -1.15009260178 --1.21159893274 -1.16735124588 --1.2116214633 -1.1846101284 --1.21164691448 -1.20186969638 --1.2116612494 -1.22108057141 --1.21164864301 -1.24028983712 --1.21162295342 -1.25754925608 --1.21160030365 -1.27480837703 --1.21158060431 -1.29206687212 --1.21156391501 -1.3093251586 --1.21155026555 -1.32658296824 --1.21153956651 -1.34384071827 --1.21153190732 -1.36109808088 --1.21152725816 -1.37835550308 --1.21152567863 -1.39561268687 --1.21152707934 -1.41287004947 --1.21153151989 -1.43012729287 --1.21153900027 -1.44738483429 --1.21154946089 -1.4646423757 --1.21156293154 -1.48190036416 --1.21157944202 -1.49915844202 --1.21159893274 -1.51641708613 --1.2116214633 -1.53367599845 --1.21164694428 -1.55093553662 --1.211661309 -1.57014641166 --1.21164864301 -1.58935567736 --1.21162292361 -1.60661509633 --1.21160027385 -1.62387418747 --1.21158060431 -1.64113265276 --1.21156394482 -1.65839096904 --1.21155026555 -1.67564877868 --1.21153956651 -1.69290652871 --1.21153187752 -1.71016392112 --1.21152722836 -1.72742131353 --1.21152564883 -1.74467849732 --1.21152707934 -1.76193588972 --1.21153154969 -1.77919313312 --1.21153900027 -1.79645070434 --1.21154946089 -1.81370824575 --1.21156290174 -1.8309662044 --1.21157941222 -1.84822431207 --1.21159893274 -1.86548292637 --1.2116214633 -1.88274180889 --1.21164691448 -1.90000137687 --1.2116612494 -1.9192122519 --1.21164864301 -1.93842151761 --1.21162295342 -1.95568093658 --1.21160030365 -1.97294005752 --1.21158060431 -1.99019855261 --1.21156391501 -2.00745686889 --1.21155026555 -2.02471464872 --1.21153956651 -2.04197233915 --1.21153190732 -2.05922973156 --1.21152725816 -2.07648718357 --1.21152564883 -2.09374433756 --1.21152710914 -2.11100172997 --1.21153157949 -2.12825900316 --1.21153900027 -2.14551657438 --1.21154946089 -2.162774086 --1.21156293154 -2.18003201485 --1.21157944202 -2.19729018212 --1.21159893274 -2.21454882622 --1.2116214633 -2.23180770874 --1.21164691448 -2.24906730652 --1.2116612792 -2.26827818155 --1.21164867282 -2.28748738766 --1.21162295342 -2.30474680662 --1.21160030365 -2.32200592756 --1.21158063412 -2.33926439285 --1.21156391501 -2.35652267933 --1.21155023575 -2.37378048897 --1.21153956651 -2.391038239 --1.21153190732 -2.40829563141 --1.21152725816 -2.42555308342 --1.21152567864 -2.44281029701 --1.21152710914 -2.46006762981 --1.21153151989 -2.47732484341 --1.21153897047 -2.49458241463 --1.21154946089 -2.51183998585 --1.21156293154 -2.5290979147 --1.21157944202 -2.54635596276 --1.21159893274 -2.56361460686 --1.2116214633 -2.58087348938 --1.21164691448 -2.59813308716 --1.2116612494 -2.61734396219 --1.21164861321 -2.6365532279 --1.21162292361 -2.65381264687 --1.21160027385 -2.6710717082 --1.21158060431 -2.68833017349 --1.21156391501 -2.70558851957 --1.21155023575 -2.72284638882 --1.21153956651 -2.74010407925 --1.21153190732 -2.75736141205 --1.21152725816 -2.77461886406 --1.21152564883 -2.79187607765 --1.21152707934 -2.80913341045 --1.21153154969 -2.82639062405 --1.21153900027 -2.84364819527 --1.21154946089 -2.86090576649 --1.21156293154 -2.87816381455 --1.21157944202 -2.8954218626 --1.21159893274 -2.9126805067 --1.2116214633 -2.92993938923 --1.21164691448 -2.9471988678 --1.2116612494 -2.96640980244 --1.21164864301 -2.98561906815 --1.21162295342 -3.00287848711 --1.21160030365 -3.02013760805 --1.21158063412 -3.03739607334 --1.21156391501 -3.05465435982 --1.21155023575 -3.07191216946 --1.21153956651 -3.08916991949 --1.21153187752 -3.10642731189 --1.21152722836 -3.12368476391 --1.21152564883 -3.14094194968 --1.21152707934 --3.12498605252 --1.21153151989 --3.10772883892 --1.21153897047 --3.0904712677 --1.21154946089 --3.07321369648 --1.21156293154 --3.05595564842 --1.21157944202 --3.03869760037 --1.21159893274 --3.02143895626 --1.2116214633 --3.00418001413 --1.21164691448 --2.98692053556 --1.2116612494 --2.96770966053 --1.21164861321 --2.94850039482 --1.21162292361 --2.93124097586 --1.21160030365 --2.91398185491 --1.21158060431 --2.89672338962 --1.21156391501 --2.87946510315 --1.21155026555 --2.86220729351 --1.21153956651 --2.84494954347 --1.21153190732 --2.82769215107 --1.21152725816 --2.81043469906 --1.21152567864 --2.79317754507 --1.21152710914 --2.77592015266 --1.21153154969 --2.75866287947 --1.21153900027 --2.74140536785 --1.21154946089 --2.72414785624 --1.21156293154 --2.70688986778 --1.21157944202 --2.68963170052 --1.21159893274 --2.67237305641 --1.2116214633 --2.65511417389 --1.21164691448 --2.63785463572 --1.2116612494 --2.61864376068 --1.21164864301 --2.59943449497 --1.21162295342 --2.58217513561 --1.21160024405 --2.56491601467 --1.21158057451 --2.54765748978 --1.21156394482 --2.5303992033 --1.21155026555 --2.51314139366 --1.21153956651 --2.49588364363 --1.21153190732 --2.47862631082 --1.21152725816 --2.46136885881 --1.21152567864 --2.44411164522 --1.21152710914 --2.42685431242 --1.21153154969 --2.40959703922 --1.21153900027 --2.392339468 --1.21154946089 --2.37508189678 --1.21156293154 --2.35782396793 --1.21157944202 --2.34056591987 --1.21159893274 --2.32330727577 --1.2116214633 --2.30604839325 --1.21164691448 --2.28878879547 --1.2116612494 --2.26957792044 --1.21164861321 --2.25036865473 --1.21162292361 --2.23310923576 --1.21160030365 --2.21585017443 --1.21158060431 --2.19859164953 --1.21156388521 --2.18133330345 --1.21155023575 --2.16407555342 --1.21153956651 --2.14681786299 --1.21153190732 --2.12956047058 --1.21152725816 --2.11230301857 --1.21152564883 --2.09504586458 --1.21152710914 --2.07778853178 --1.21153157949 --2.06053125858 --1.21153900027 --2.04327368736 --1.21154946089 --2.02601611614 --1.21156293154 --2.00875818729 --1.21157944202 --1.99150007963 --1.21159893274 --1.97424137593 --1.2116214633 --1.9569824934 --1.21164691448 --1.93972295523 --1.2116612494 --1.92051208019 --1.21164864301 --1.90130278468 --1.21162295342 --1.88404339552 --1.21160030365 --1.86678433418 --1.21158060431 --1.84952583909 --1.21156391501 --1.83226752281 --1.21155026555 --1.81500968337 --1.21153956651 --1.79775193334 --1.21153190732 --1.78049460053 --1.21152725816 --1.76323714852 --1.21152567863 --1.74597996473 --1.21152707934 --1.72872263193 --1.21153151989 --1.71146538853 --1.21153900027 --1.69420781731 --1.21154946089 --1.6769502759 --1.21156293154 --1.65969231724 --1.21157944202 --1.64243420958 --1.21159893274 --1.62517556548 --1.2116214633 --1.60791668296 --1.21164694428 --1.59065711498 --1.211661309 --1.57144621015 --1.21164864301 --1.55223697424 --1.21162292361 --1.53497755527 --1.21160027385 --1.51771843433 --1.21158060431 --1.50045996905 --1.21156394482 --1.48320168257 --1.21155026555 --1.46594387293 --1.21153956651 --1.4486861229 --1.21153187752 --1.43142873049 --1.21152722836 --1.41417130828 --1.21152564883 --1.39691415429 --1.21152707934 --1.37965676189 --1.21153154969 --1.36239948869 --1.21153900027 --1.34514197707 --1.21154946089 --1.32788443565 --1.21156290174 --1.3106264472 --1.21157941222 --1.29336833954 --1.21159893274 --1.27610969544 --1.2116214633 --1.25885081291 --1.21164691448 --1.24159124493 --1.2116612494 --1.2223803699 --1.21164864301 --1.20317110419 --1.21162295342 --1.18591168523 --1.21160030365 --1.16865256429 --1.21158060431 --1.15139406919 --1.21156391501 --1.13413578272 --1.21155026555 --1.11687797308 --1.21153956651 --1.09962025285 --1.21153190732 --1.08236292005 --1.21152725816 --1.06510546804 --1.21152564883 --1.04784825444 --1.21152710914 --1.03059092164 --1.21153157949 --1.01333370805 --1.21153900027 --0.996076136828 --1.21154946089 --0.978818565607 --1.21156293154 --0.961560592056 --1.21157944202 --0.944302484393 --1.21159893274 --0.927043840289 --1.2116214633 --0.909784972668 --1.21164691448 --0.892525404692 --1.2116612792 --0.873314499855 --1.21164867282 --0.854105249047 --1.21162295342 --0.836845844984 --1.21160030365 --0.819586724043 --1.21158063412 --0.802328228951 --1.21156391501 --0.785069957376 --1.21155023575 --0.767812177539 --1.21153956651 --0.750554442406 --1.21153190732 --0.733297064901 --1.21152725816 --0.716039627791 --1.21152567864 --0.698782414198 --1.21152710914 --0.681525036692 --1.21153151989 --0.6642678231 --1.21153897047 --0.647010281682 --1.21154946089 --0.629752725363 --1.21156293154 --0.61249473691 --1.21157944202 --0.595236629247 --1.21159893274 --0.577978014946 --1.2116214633 --0.560719132424 --1.21164691448 --0.543459549546 --1.2116612494 --0.524248674512 --1.21164861321 --0.505039416254 --1.21162292361 --0.487779997289 --1.21160027385 --0.4705208987 --1.21158060431 --0.453262403608 --1.21156391501 --0.436004109681 --1.21155023575 --0.418746314943 --1.21153956651 --0.401488564909 --1.21153190732 --0.384231187403 --1.21152725816 --0.366973757744 --1.21152564883 --0.349716566503 --1.21152707934 --0.332459196448 --1.21153154969 --0.315201960504 --1.21153900027 --0.297944419086 --1.21154946089 --0.280686862767 --1.21156293154 --0.263428889215 --1.21157944202 --0.246170800179 --1.21159893274 --0.22891215235 --1.2116214633 --0.211653258652 --1.21164691448 --0.194393701851 --1.2116612494 --0.175182815641 --1.19455015659 --0.15597075969 --1.19452464581 --0.138711366803 --1.19450214505 --0.121452275664 --1.19448259473 --0.104193799198 --1.19446596503 --0.0869355089962 --1.19445234537 --0.0696777114645 --1.19444176555 --0.0524199781939 --1.19443416596 --0.0351626160554 --1.1944295466 --0.0179051957093 --1.19442793727 --0.000648021930827 --1.19442936778 -0.0166093318258 --1.19443383813 -0.0338665642776 --1.19444122911 -0.0511240996421 --1.19445160031 -0.0683816354722 --1.19446498156 -0.0856395978481 --1.19448143244 -0.102897681296 --1.19450080395 -0.120156314224 --1.19452318549 -0.137415196746 --1.19454851747 -0.154674746096 --1.19456273317 -0.173885732889 --1.19455015659 -0.19309509173 --1.19452464581 -0.210354484618 --1.19450214505 -0.227613575757 --1.19448259473 -0.244872055948 --1.19446599483 -0.262130357325 --1.19445237517 -0.279388159513 --1.19444176555 -0.296645872295 --1.19443416596 -0.313903227449 --1.1944295466 -0.331160657108 --1.19442796707 -0.348417833447 --1.19442939758 -0.36567518115 --1.19443383813 -0.382932409644 --1.19444122911 -0.400189951062 --1.19445163012 -0.41744749248 --1.19446501136 -0.434705451131 --1.19448143244 -0.451963536442 --1.19450080395 -0.469222173095 --1.19452318549 -0.486481048167 --1.19454848766 -0.503740593791 --1.19456270337 -0.522951573133 --1.19455018639 -0.542160943151 --1.19452467561 -0.559420332312 --1.19450211525 -0.576679423452 --1.19448256492 -0.593937933445 --1.19446596503 -0.611196219921 --1.19445234537 -0.628454014659 --1.19444176555 -0.645711749792 --1.19443416596 -0.662969097495 --1.1944295466 -0.680226504803 --1.19442796707 -0.697483673692 --1.19442939758 -0.714741036296 --1.19443383813 -0.73199826479 --1.19444122911 -0.749255776405 --1.19445160031 -0.766513317823 --1.19446498156 -0.783771306276 --1.19448143244 -0.801029384136 --1.19450080395 -0.818287998438 --1.19452318549 -0.835546895861 --1.19454848766 -0.852806478739 --1.19456270337 -0.872017458081 --1.19455012679 -0.891226798296 --1.194524616 -0.908486187458 --1.19450214505 -0.925745263696 --1.19448256493 -0.943003728986 --1.19446593523 -0.960262045264 --1.19445234537 -0.977519854903 --1.19444176555 -0.994777575136 --1.19443416596 -1.01203495264 --1.1944295466 -1.02929237485 --1.19442793727 -1.04654952883 --1.19442939758 -1.06380686164 --1.19443383813 -1.08106410503 --1.1944411993 -1.09832164645 --1.19445163012 -1.11557918787 --1.19446501136 -1.13283714652 --1.19448143244 -1.15009522438 --1.19450080395 -1.16735386849 --1.19452318549 -1.18461275101 --1.19454851747 -1.20187228918 --1.19456273317 -1.22108328343 --1.19455015659 -1.24029263854 --1.19452464581 -1.2575520277 --1.19450211525 -1.27481114865 --1.19448256492 -1.29206961393 --1.19446599483 -1.30932790041 --1.19445237517 -1.32658571005 --1.19444176555 -1.34384343028 --1.19443416596 -1.36110076309 --1.1944295466 -1.37835818529 --1.19442796707 -1.39561539888 --1.19442936778 -1.41287276149 --1.19443377852 -1.43012997508 --1.1944411993 -1.4473874867 --1.19445160031 -1.46464502812 --1.19446498156 -1.48190301657 --1.19448143244 -1.49916109442 --1.19450080395 -1.51641973853 --1.19452318549 -1.53367862105 --1.19454848766 -1.55093815923 --1.19456273317 -1.57014912367 --1.19455018639 -1.58935847878 --1.19452464581 -1.60661789775 --1.19450214505 -1.62387695909 --1.19448259473 -1.64113542438 --1.19446599483 -1.65839371085 --1.19445240497 -1.67565152049 --1.19444179535 -1.69290927052 --1.19443416596 -1.71016663313 --1.1944295764 -1.72742402553 --1.19442799687 -1.74468117952 --1.19442939758 -1.76193857193 --1.19443383813 -1.77919581532 --1.19444125891 -1.79645335674 --1.19445165992 -1.81371089816 --1.19446498156 -1.83096882701 --1.19448140264 -1.84822690487 --1.19450080395 -1.86548554897 --1.19452318549 -1.8827444315 --1.19454848766 -1.90000396967 --1.19456270337 -1.91921496392 --1.19455018639 -1.93842434883 --1.19452467561 -1.95568373799 --1.19450214505 -1.97294282913 --1.19448259473 -1.99020129442 --1.19446599483 -2.0074596107 --1.19445237517 -2.02471739054 --1.19444176555 -2.04197508097 --1.19443416596 -2.05923247338 --1.1944295466 -2.07648992539 --1.19442793727 -2.09374707937 --1.19442939758 -2.11100441217 --1.19443386793 -2.12826168537 --1.19444122911 -2.14551925659 --1.19445160031 -2.16277676821 --1.19446498156 -2.18003469705 --1.19448143244 -2.19729280472 --1.19450080395 -2.21455144882 --1.19452318549 -2.23181033134 --1.19454848766 -2.24906986952 --1.19456273317 -2.26828086376 --1.1945502162 -2.28749024868 --1.19452467561 -2.30474960804 --1.19450214505 -2.32200866938 --1.19448259473 -2.33926719427 --1.19446596503 -2.35652548075 --1.19445234537 -2.37378329039 --1.19444176555 -2.39104104042 --1.19443416596 -2.40829831362 --1.1944295466 -2.42555570602 --1.19442796707 -2.44281291962 --1.19442939758 -2.46007025242 --1.19443383813 -2.47732746601 --1.19444122911 -2.49458503723 --1.19445163012 -2.51184260845 --1.19446501136 -2.5291005373 --1.19448143244 -2.54635858536 --1.19450080395 -2.56361722946 --1.19452318549 -2.58087611198 --1.19454848766 -2.59813570976 --1.19456270337 -2.617346704 --1.19455015659 -2.63655602932 --1.19452464581 -2.65381538868 --1.19450211525 -2.67107450962 --1.19448256492 -2.68833303451 --1.19446596503 -2.70559132099 --1.19445234537 -2.72284913063 --1.19444176555 -2.74010682106 --1.19443416596 -2.75736415386 --1.1944295466 -2.77462160587 --1.19442796707 -2.79187875986 --1.19442939758 -2.80913609266 --1.19443383813 -2.82639336586 --1.19444122911 -2.84365087748 --1.19445163012 -2.86090838909 --1.19446501136 -2.87816643715 --1.19448143244 -2.89542448521 --1.19450080395 -2.9126830697 --1.19452318549 -2.92994195223 --1.19454848766 -2.9472014904 --1.19456270337 -2.96641248464 --1.19455015659 -2.98562180996 --1.19452464581 -3.00288128853 --1.19450214505 -3.02014040947 --1.19448259473 -3.03739881515 --1.19446596503 -3.05465710163 --1.19445234537 -3.07191491127 --1.19444176555 -3.0891726613 --1.19443416596 -3.10643005371 --1.1944295466 -3.12368750572 --1.19442793727 -3.1409446915 --1.19442936778 --3.1249833107 --1.19443383813 --3.10772609711 --1.19444122911 --3.09046858549 --1.19445160031 --3.07321107388 --1.19446498156 --3.05595302582 --1.19448143244 --3.03869491816 --1.19450080395 --3.02143627405 --1.19452318549 --3.00417745113 --1.19454851747 --2.98691797256 --1.19456273317 --2.96770697832 --1.19455015659 --2.94849765301 --1.19452464581 --2.93123817444 --1.19450214505 --2.91397905349 --1.19448259473 --2.89672064781 --1.19446599483 --2.87946236133 --1.19445237517 --2.8622045517 --1.19444176555 --2.84494680166 --1.19443416596 --2.82768940926 --1.1944295466 --2.81043195725 --1.19442796707 --2.79317480326 --1.19442939758 --2.77591747046 --1.19443383813 --2.75866019726 --1.19444122911 --2.74140262604 --1.19445163012 --2.72414511442 --1.19446501136 --2.70688718557 --1.19448143244 --2.68962907791 --1.19450080395 --2.67237043381 --1.19452318549 --2.65511155128 --1.19454848766 --2.63785207271 --1.19456270337 --2.61864107847 --1.19455018639 --2.59943163395 --1.19452467561 --2.58217227459 --1.19450211525 --2.56491321325 --1.19448256492 --2.54765474796 --1.19446596503 --2.53039646149 --1.19445234537 --2.51313865185 --1.19444176555 --2.49588096142 --1.19443416596 --2.47862356901 --1.1944295466 --2.461366117 --1.19442796707 --2.44410896301 --1.19442939758 --2.42685163021 --1.19443383813 --2.40959441662 --1.19444122911 --2.3923368454 --1.19445160031 --2.37507927418 --1.19446498156 --2.35782134533 --1.19448143244 --2.34056329727 --1.19450080395 --2.32330465317 --1.19452318549 --2.30604577064 --1.19454848766 --2.28878617287 --1.19456270337 --2.26957517862 --1.19455012679 --2.25036585331 --1.194524616 --2.23310649395 --1.19450214505 --2.21584743261 --1.19448256493 --2.19858890772 --1.19446593523 --2.18133056164 --1.19445234537 --2.164072752 --1.19444176555 --2.14681506157 --1.19443416596 --2.12955772877 --1.1944295466 --2.11230033636 --1.19442793727 --2.09504318237 --1.19442939758 --2.07778578997 --1.19443383813 --2.06052851677 --1.1944411993 --2.04327100515 --1.19445163012 --2.02601349354 --1.19446501136 --2.00875556469 --1.19448143244 --1.99149745703 --1.19450080395 --1.97423875332 --1.19452318549 --1.9569798708 --1.19454851747 --1.93972033262 --1.19456273317 --1.92050933838 --1.19455015659 --1.90129998327 --1.19452464581 --1.88404062391 --1.19450211525 --1.86678153277 --1.19448256492 --1.84952303768 --1.19446599483 --1.83226475119 --1.19445237517 --1.81500694156 --1.19444176555 --1.79774922133 --1.19443416596 --1.78049188852 --1.1944295466 --1.76323443651 --1.19442796707 --1.74597728252 --1.19442936778 --1.72871994972 --1.19443377852 --1.71146267653 --1.1944411993 --1.69420513511 --1.19445160031 --1.67694762349 --1.19446498156 --1.65968966484 --1.19448143244 --1.64243158698 --1.19450080395 --1.62517297268 --1.19452318549 --1.60791409015 --1.19454848766 --1.59065452218 --1.19456273317 --1.57144352794 --1.19455018639 --1.55223417282 --1.19452464581 --1.53497475386 --1.19450214505 --1.51771566272 --1.19448259473 --1.50045719743 --1.19446599483 --1.48319891095 --1.19445240497 --1.46594113111 --1.19444179535 --1.44868338108 --1.19443416596 --1.43142598868 --1.1944295764 --1.41416859627 --1.19442799687 --1.39691144228 --1.19442939758 --1.37965407967 --1.19443383813 --1.36239683628 --1.19444125891 --1.34513929487 --1.19445165992 --1.32788175344 --1.19446498156 --1.31062379479 --1.19448140264 --1.29336571693 --1.19450080395 --1.27610707283 --1.19452318549 --1.25884819031 --1.19454848766 --1.24158865213 --1.19456270337 --1.22237765789 --1.19455018639 --1.20316830277 --1.19452467561 --1.18590891361 --1.19450214505 --1.16864979267 --1.19448259473 --1.15139132738 --1.19446599483 --1.13413304091 --1.19445237517 --1.11687523127 --1.19444176555 --1.09961754084 --1.19443416596 --1.08236020804 --1.1944295466 --1.06510275602 --1.19442793727 --1.04784554243 --1.19442939758 --1.03058820963 --1.19443386793 --1.01333099604 --1.19444122911 --0.99607345462 --1.19445160031 --0.978815928102 --1.19446498156 --0.96155795455 --1.19448143244 --0.944299861789 --1.19450080395 --0.927041232586 --1.19452318549 --0.909782364965 --1.19454848766 --0.89252281189 --1.19456273317 --0.873311817646 --1.1945502162 --0.85410246253 --1.19452467561 --0.836843058467 --1.19450214505 --0.819583952427 --1.19448259473 --0.802325472235 --1.19446596503 --0.785067215562 --1.19445234537 --0.767809420824 --1.19444176555 --0.75055167079 --1.19443416596 --0.733294337988 --1.1944295466 --0.71603693068 --1.19442796707 --0.698779731989 --1.19442939758 --0.681522369385 --1.19443383813 --0.664265155793 --1.19444122911 --0.647007614374 --1.19445163012 --0.629750072956 --1.19446501136 --0.612492099404 --1.19448143244 --0.595233991742 --1.19450080395 --0.577975362539 --1.19452318549 --0.560716494918 --1.19454848766 --0.543456956745 --1.19456270337 --0.524245962501 --1.19455015659 --0.505036592483 --1.19452464581 --0.487777203321 --1.19450211525 --0.470518119633 --1.19448256492 --0.453259639442 --1.19446596503 --0.436001352966 --1.19445234537 --0.418743565679 --1.19444176555 --0.401485830546 --1.19443416596 --0.384228467941 --1.1944295466 --0.366971053183 --1.19442796707 --0.349713869393 --1.19442939758 --0.332456506788 --1.19443383813 --0.315199278295 --1.19444122911 --0.297941744327 --1.19445163012 --0.28068421036 --1.19446501136 --0.26342625171 --1.19448143244 --0.246168170124 --1.19450080395 --0.228909537196 --1.19452318549 --0.211650654674 --1.19454848766 --0.194391105324 --1.19456270337 --0.175180114805 --1.17742952704 --0.155967924744 --1.17740416527 --0.138708539307 --1.17738181353 --0.121449459344 --1.17736241221 --0.104190995917 --1.17734593153 --0.0869327187538 --1.17733237147 --0.0696749296039 --1.17732185126 --0.0524172075093 --1.17731428146 --0.0351598570123 --1.17730966211 --0.0179024478421 --1.17730811238 --0.000645285472275 --1.17730954289 -0.0166120571085 --1.17731395364 -0.0338692772202 --1.17732128501 -0.0511268014088 --1.17733159661 -0.0683843269944 --1.17734488845 -0.0856422781944 --1.17736124992 -0.102900352329 --1.17738050222 -0.120158972219 --1.17740270495 -0.137417841703 --1.17742788792 -0.154677379876 --1.17744204402 -0.173888467252 --1.17742955685 -0.193097926676 --1.17740419507 -0.210357315838 --1.17738181353 -0.227616395801 --1.17736238241 -0.244874853641 --1.17734590172 -0.262133136391 --1.17733237147 -0.279390931129 --1.17732185126 -0.296648643911 --1.17731428146 -0.313905991614 --1.17730969191 -0.331163406372 --1.17730814219 -0.348420567811 --1.17730954289 -0.365677908063 --1.17731395364 -0.382935121655 --1.17732131481 -0.400192655623 --1.17733165622 -0.41745018959 --1.17734491825 -0.43470813334 --1.17736124992 -0.451966203749 --1.17738050222 -0.469224818051 --1.17740270495 -0.486483678222 --1.17742785811 -0.503743223846 --1.17744201422 -0.522954314947 --1.17742955685 -0.542163789272 --1.17740419507 -0.559423178435 --1.17738181353 -0.576682239771 --1.17736238241 -0.593940719962 --1.17734584212 -0.611199006439 --1.17733231187 -0.628456786275 --1.17732185126 -0.645714506507 --1.17731431127 -0.66297185421 --1.17730969191 -0.680229261517 --1.17730811238 -0.697486415506 --1.17730954289 -0.714743763209 --1.17731395364 -0.732000976801 --1.17732128501 -0.749258488417 --1.17733159661 -0.766516014933 --1.17734488845 -0.783773988485 --1.17736124992 -0.801032081246 --1.17738050222 -0.818290665746 --1.17740270495 -0.835549518466 --1.17742785811 -0.852809101343 --1.17744201422 -0.872020184994 --1.17742952704 -0.891229614616 --1.17740416527 -0.908489003777 --1.17738184333 -0.925748080015 --1.17736238241 -0.943006545305 --1.17734587192 -0.960264831781 --1.17733237147 -0.977522626519 --1.17732185126 -0.994780346751 --1.17731431127 -1.01203769446 --1.17730972171 -1.02929508686 --1.17730814219 -1.04655224085 --1.17730954289 -1.06380960346 --1.17731392384 -1.08106681705 --1.17732128501 -1.09832435847 --1.17733165622 -1.11558189988 --1.17734491825 -1.13283982873 --1.17736124992 -1.15009790659 --1.17738050222 -1.16735655069 --1.17740270495 -1.18461543321 --1.17742788792 -1.20187494159 --1.17744204402 -1.22108602524 --1.17742955685 -1.24029546976 --1.17740419507 -1.25755482912 --1.17738178373 -1.27481395006 --1.17736235261 -1.29207241535 --1.17734590172 -1.30933067202 --1.17733237147 -1.32658848166 --1.17732185126 -1.3438462019 --1.17731431127 -1.3611035347 --1.17730972171 -1.37836095691 --1.17730817199 -1.3956181407 --1.1773095429 -1.4128754735 --1.17731389403 -1.43013268709 --1.17732125521 -1.44739019871 --1.17733159661 -1.46464771032 --1.17734488845 -1.48190566897 --1.17736122012 -1.49916374683 --1.17738047242 -1.51642239094 --1.17740270495 -1.53368127346 --1.17742785811 -1.55094081164 --1.17744201422 -1.57015186548 --1.17742955685 -1.58936131 --1.17740419507 -1.60662072897 --1.17738181353 -1.62387979031 --1.17736238241 -1.6411382556 --1.17734587192 -1.65839654207 --1.17733237147 -1.67565432191 --1.17732188106 -1.69291204214 --1.17731434107 -1.71016937494 --1.17730978131 -1.72742679715 --1.17730820179 -1.74468395114 --1.1773095727 -1.76194131374 --1.17731395364 -1.77919852733 --1.17732134461 -1.79645603895 --1.17733168602 -1.81371361018 --1.17734491825 -1.83097153902 --1.17736124992 -1.84822958708 --1.17738050222 -1.86548820138 --1.17740273476 -1.8827470839 --1.17742788792 -1.90000662208 --1.17744201422 -1.91921770573 --1.17742955685 -1.93842718005 --1.17740419507 -1.95568653941 --1.17738181353 -1.97294563055 --1.17736238241 -1.99020409584 --1.17734587192 -2.00746238232 --1.17733234167 -2.02472019196 --1.17732185126 -2.04197788239 --1.17731431127 -2.05923521519 --1.17730972171 -2.07649260759 --1.17730814219 -2.09374976158 --1.17730954289 -2.11100715399 --1.17731395364 -2.12826442718 --1.17732131481 -2.1455219388 --1.17733162641 -2.16277945041 --1.17734488845 -2.18003737926 --1.17736124992 -2.19729542732 --1.17738050222 -2.21455407143 --1.17740270495 -2.23181295395 --1.17742788792 -2.24907243252 --1.17744204402 -2.26828354597 --1.17742955685 -2.2874931097 --1.17740419507 -2.30475246906 --1.17738181353 -2.3220114708 --1.17736238241 -2.33926993609 --1.17734587192 -2.35652822256 --1.17733234167 -2.3737860322 --1.17732185126 -2.39104378224 --1.17731431127 -2.40830105543 --1.17730972171 -2.42555844784 --1.17730814219 -2.44281566143 --1.17730954289 -2.46007299423 --1.17731395364 -2.47733020782 --1.17732131481 -2.49458771944 --1.17733165622 -2.51184523106 --1.17734491825 -2.52910321951 --1.17736124992 -2.54636132717 --1.17738050222 -2.56361991167 --1.17740270495 -2.58087873459 --1.17742785811 -2.59813833237 --1.17744201422 -2.61734944582 --1.17742955685 -2.63655889034 --1.17740419507 -2.6538182497 --1.17738181353 -2.67107731104 --1.17736238241 -2.68833583593 --1.17734590172 -2.70559412241 --1.17733237147 -2.72285187245 --1.17732185126 -2.74010956288 --1.17731431127 -2.75736695528 --1.17730972171 -2.77462440729 --1.17730817199 -2.79188150167 --1.1773095727 -2.80913883448 --1.17731395364 -2.82639610767 --1.17732131481 -2.84365361929 --1.17733165622 -2.8609111309 --1.17734491825 -2.87816911936 --1.17736124992 -2.89542716741 --1.17738050222 -2.91268575192 --1.17740273476 -2.92994463444 --1.17742788792 -2.94720417261 --1.17744201422 -2.96641522646 --1.17742952704 -2.98562467098 --1.17740416527 -3.00288414955 --1.17738181353 -3.02014327049 --1.17736241221 -3.03740167618 --1.17734593153 -3.05465996266 --1.17733237147 -3.0719177723 --1.17732185126 -3.08917546272 --1.17731428146 -3.10643279552 --1.17730966211 -3.12369018793 --1.17730811238 -3.14094737371 --1.17730954289 --3.12498056889 --1.17731395364 --3.1077233553 --1.17732128501 --3.09046584368 --1.17733159661 --3.07320833206 --1.17734488845 --3.05595034361 --1.17736124992 --3.03869223595 --1.17738050222 --3.02143359184 --1.17740270495 --3.00417476893 --1.17742788792 --2.98691529036 --1.17744204402 --2.96770423651 --1.17742955685 --2.94849479199 --1.17740419507 --2.93123531342 --1.17738181353 --2.91397619247 --1.17736238241 --2.89671778679 --1.17734590172 --2.87945950031 --1.17733237147 --2.86220169067 --1.17732185126 --2.84494400024 --1.17731428146 --2.82768666744 --1.17730969191 --2.81042927504 --1.17730814219 --2.79317212105 --1.17730954289 --2.77591472864 --1.17731395364 --2.75865751505 --1.17732131481 --2.74140000343 --1.17733165622 --2.72414243221 --1.17734491825 --2.70688450336 --1.17736124992 --2.68962645531 --1.17738050222 --2.6723678112 --1.17740270495 --2.65510892868 --1.17742785811 --2.63784945011 --1.17744201422 --2.61863833666 --1.17742955685 --2.59942877293 --1.17740419507 --2.58216941357 --1.17738181353 --2.56491041183 --1.17736238241 --2.54765200615 --1.17734584212 --2.53039371967 --1.17733231187 --2.51313591003 --1.17732185126 --2.4958782196 --1.17731431127 --2.4786208272 --1.17730969191 --2.46136337519 --1.17730811238 --2.4441062212 --1.17730954289 --2.4268488884 --1.17731395364 --2.40959167481 --1.17732128501 --2.39233416319 --1.17733159661 --2.37507665158 --1.17734488845 --2.35781866312 --1.17736124992 --2.34056055546 --1.17738050222 --2.32330197096 --1.17740270495 --2.30604314804 --1.17742785811 --2.28878355026 --1.17744201422 --2.26957243681 --1.17742952704 --2.25036299229 --1.17740416527 --2.23310363293 --1.17738184333 --2.21584463119 --1.17736238241 --2.1985861063 --1.17734587192 --2.18132776022 --1.17733237147 --2.16407001018 --1.17732185126 --2.14681231975 --1.17731431127 --2.12955498695 --1.17730972171 --2.11229759455 --1.17730814219 --2.09504044056 --1.17730954289 --2.07778304816 --1.17731392384 --2.06052577496 --1.17732128501 --2.04326826334 --1.17733165622 --2.02601075173 --1.17734491825 --2.00875282288 --1.17736124992 --1.99149477482 --1.17738050222 --1.97423613071 --1.17740270495 --1.95697724819 --1.17742788792 --1.93971771002 --1.17744204402 --1.92050662637 --1.17742955685 --1.90129718184 --1.17740419507 --1.88403779268 --1.17738178373 --1.86677870154 --1.17736235261 --1.84952023626 --1.17734590172 --1.83226194978 --1.17733237147 --1.81500416994 --1.17732185126 --1.79774647951 --1.17731431127 --1.78048914671 --1.17730972171 --1.7632316947 --1.17730817199 --1.74597451091 --1.1773095429 --1.72871717811 --1.17731389403 --1.71145993471 --1.17732125521 --1.6942024231 --1.17733159661 --1.67694491148 --1.17734488845 --1.65968695283 --1.17736122012 --1.64242890477 --1.17738047242 --1.62517029047 --1.17740270495 --1.60791140795 --1.17742785811 --1.59065186977 --1.17744201422 --1.57144078612 --1.17742955685 --1.5522313118 --1.17740419507 --1.53497192264 --1.17738181353 --1.5177128613 --1.17736238241 --1.50045439601 --1.17734587192 --1.48319610953 --1.17733237147 --1.46593832969 --1.17732188106 --1.44868060946 --1.17731434107 --1.43142324686 --1.17730978131 --1.41416585445 --1.17730820179 --1.39690870047 --1.1773095727 --1.37965136767 --1.17731395364 --1.36239415407 --1.17732134461 --1.34513661266 --1.17733168602 --1.32787907124 --1.17734491825 --1.31062111259 --1.17736124992 --1.29336303473 --1.17738050222 --1.27610442042 --1.17740273476 --1.2588455677 --1.17742788792 --1.24158602953 --1.17744201422 --1.22237491608 --1.17742955685 --1.20316547155 --1.17740419507 --1.1859061122 --1.17738181353 --1.16864702106 --1.17736238241 --1.15138855577 --1.17734587192 --1.13413026929 --1.17733234167 --1.11687248945 --1.17732185126 --1.09961476922 --1.17731431127 --1.08235740662 --1.17730972171 --1.0650999844 --1.17730814219 --1.04784280062 --1.17730954289 --1.03058546781 --1.17731395364 --1.01332825422 --1.17732131481 --0.996070742607 --1.17733162641 --0.978813245893 --1.17734488845 --0.961555272341 --1.17736124992 --0.94429717958 --1.17738050222 --0.927038565278 --1.17740270495 --0.909779697656 --1.17742788792 --0.892520174384 --1.17744204402 --0.873309105634 --1.17742955685 --0.854099631309 --1.17740419507 --0.836840212345 --1.17738181353 --0.819581136107 --1.17736238241 --0.802322685719 --1.17734587192 --0.785064414144 --1.17733234167 --0.767806619406 --1.17732185126 --0.750548899174 --1.17731431127 --0.733291566372 --1.17730972171 --0.716034173965 --1.17730814219 --0.698777005076 --1.17730954289 --0.681519642473 --1.17731395364 --0.664262443781 --1.17732131481 --0.647004917264 --1.17733165622 --0.629747375846 --1.17734491825 --0.612489417195 --1.17736124992 --0.595231324434 --1.17738050222 --0.577972695231 --1.17740270495 --0.560713842511 --1.17742785811 --0.543454319239 --1.17744201422 --0.524243220687 --1.17742955685 --0.505033753812 --1.17740419507 --0.487774379551 --1.17738181353 --0.470515310764 --1.17736238241 --0.453256852925 --1.17734590172 --0.4359985739 --1.17733237147 --0.418740786612 --1.17732185126 --0.40148306638 --1.17731431127 --0.384225711227 --1.17730972171 --0.366968296468 --1.17730817199 --0.34971113503 --1.1773095727 --0.332453787327 --1.17731395364 --0.315196566284 --1.17732131481 --0.297939047217 --1.17733165622 --0.28068151325 --1.17734491825 --0.26342356205 --1.17736124992 --0.246165502816 --1.17738050222 --0.228906884789 --1.17740273476 --0.211648009717 --1.17742788792 --0.194388467818 --1.17744201422 --0.175177380442 --1.16028353572 --0.155965052545 --1.16025832295 --0.138705678284 --1.16023612023 --0.121446609497 --1.16021683812 --0.104188157245 --1.16020044685 --0.0869298912584 --1.160187006 --0.0696721123531 --1.16017657518 --0.0524144014344 --1.160169065 --0.0351570625789 --1.16016447544 --0.0178996645845 --1.16016295552 --0.000642513856293 --1.16016438603 -0.0166148180142 --1.16016870737 -0.0338720269501 --1.16017597914 -0.0511295385659 --1.16018626094 -0.0683870529756 --1.16019949317 -0.0856449957937 --1.16021570563 -0.102903058752 --1.16023480892 -0.120161665604 --1.16025686264 -0.137420520187 --1.16028186679 -0.154680043459 --1.16029596329 -0.173891235143 --1.16028353572 -0.193100798875 --1.16025832295 -0.210360176861 --1.16023609042 -0.227619245648 --1.16021677852 -0.244877703488 --1.16020044685 -0.262135975062 --1.1601870358 -0.279393739998 --1.16017657518 -0.29665145278 --1.160169065 -0.313908793032 --1.16016450524 -0.331166185438 --1.16016295552 -0.348423339426 --1.16016435623 -0.365680672228 --1.16016870737 -0.38293787837 --1.16017600894 -0.400195389986 --1.16018629074 -0.417452909052 --1.16019949317 -0.434710845351 --1.16021570563 -0.451968900859 --1.16023480892 -0.469227515161 --1.16025686264 -0.486486367881 --1.16028186679 -0.503745891154 --1.16029593349 -0.522957086563 --1.16028350592 -0.542166665197 --1.16025832295 -0.559426039457 --1.16023609042 -0.576685085893 --1.16021677852 -0.593943536281 --1.16020041704 -0.611201792956 --1.160187006 -0.628459572792 --1.16017657518 -0.645717293024 --1.1601690948 -0.662974625826 --1.16016450524 -0.680232048035 --1.16016292572 -0.697489202023 --1.16016432643 -0.714746519924 --1.16016867757 -0.732003718615 --1.16017597914 -0.74926123023 --1.16018626094 -0.766518741846 --1.16019946337 -0.783776685596 --1.16021567583 -0.801034778357 --1.16023480892 -0.818293362856 --1.16025686264 -0.835552200675 --1.16028186679 -0.85281175375 --1.16029596329 -0.872022941709 --1.16028353572 -0.89123249054 --1.16025832295 -0.908491879702 --1.16023615003 -0.925750941038 --1.16021680832 -0.943009391427 --1.16020038724 -0.960267648101 --1.160187006 -0.977525427937 --1.16017657518 -0.99478316307 --1.1601690948 -1.01204049587 --1.16016453504 -1.02929788828 --1.16016298532 -1.04655501246 --1.16016438603 -1.06381237507 --1.16016867757 -1.08106961846 --1.16017597914 -1.09832710028 --1.16018629074 -1.11558458209 --1.16019946337 -1.13284254074 --1.16021567583 -1.1501006484 --1.16023480892 -1.16735926271 --1.16025689244 -1.18461811542 --1.16028189659 -1.2018776238 --1.16029596329 -1.22108879686 --1.16028353572 -1.24029836059 --1.16025832295 -1.25755771994 --1.16023609042 -1.27481678128 --1.16021677852 -1.29207524658 --1.16020044685 -1.30933350325 --1.1601870358 -1.32659128308 --1.16017657518 -1.34384900331 --1.1601690948 -1.36110633612 --1.16016453504 -1.37836372852 --1.16016295552 -1.39562088251 --1.16016432643 -1.41287821532 --1.16016867757 -1.43013542891 --1.16017597914 -1.44739294052 --1.16018626094 -1.46465045214 --1.16019946337 -1.48190838098 --1.16021564603 -1.49916642904 --1.16023474932 -1.51642507314 --1.16025686264 -1.53368395567 --1.16028189659 -1.55094346404 --1.16029593349 -1.5701546371 --1.16028350592 -1.58936420083 --1.16025829315 -1.60662358999 --1.16023609042 -1.62388265133 --1.16021680832 -1.64114111662 --1.16020041704 -1.6583994031 --1.160187006 -1.67565715313 --1.16017657518 -1.69291484356 --1.160169065 -1.71017217636 --1.16016450525 -1.72742959857 --1.16016298532 -1.74468675256 --1.16016435623 -1.76194408536 --1.16016867757 -1.77920129895 --1.16017600894 -1.79645881057 --1.16018629074 -1.81371632218 --1.16019946337 -1.83097425103 --1.16021567583 -1.84823232889 --1.16023480892 -1.86549091339 --1.16025692224 -1.88274976611 --1.16028192639 -1.90000930429 --1.16029596329 -1.91922047734 --1.16028353572 -1.93843004107 --1.16025832295 -1.95568940043 --1.16023609042 -1.97294849157 --1.16021677852 -1.99020695687 --1.16020038724 -2.00746524334 --1.16018697619 -2.02472305298 --1.16017657518 -2.04198074341 --1.160169065 -2.05923807621 --1.16016450525 -2.07649540901 --1.16016295552 -2.09375250339 --1.16016435623 -2.1110098958 --1.16016870737 -2.128267169 --1.16017600894 -2.14552468062 --1.16018629074 -2.16278213263 --1.16019946337 -2.18004006147 --1.16021567583 -2.19729816914 --1.16023480892 -2.21455675364 --1.16025689244 -2.23181557655 --1.16028192639 -2.24907511473 --1.16029596329 -2.26828634739 --1.16028350592 -2.28749597072 --1.16025832295 -2.30475533009 --1.16023609042 -2.32201433182 --1.16021677852 -2.3392727375 --1.16020041704 -2.35653102398 --1.160187006 -2.37378883362 --1.16017657518 -2.39104652405 --1.1601690948 -2.40830385685 --1.16016453504 -2.42556124926 --1.16016295552 -2.44281840324 --1.16016432643 -2.46007579565 --1.16016864776 -2.47733300924 --1.16017597914 -2.49459046126 --1.16018629074 -2.51184797287 --1.16019949317 -2.52910596132 --1.16021570563 -2.54636406898 --1.16023480892 -2.56362265348 --1.16025686264 -2.5808814764 --1.16028186679 -2.59814101458 --1.16029596329 -2.61735218764 --1.16028353572 -2.63656175136 --1.16025832295 -2.65382111073 --1.16023609042 -2.67108011246 --1.16021677852 -2.68833863735 --1.16020044685 -2.70559692383 --1.1601870358 -2.72285461426 --1.16017657518 -2.74011230469 --1.160169065 -2.7573696971 --1.16016450525 -2.77462714911 --1.16016295552 -2.79188430309 --1.16016432643 -2.80914163589 --1.16016867757 -2.82639884948 --1.16017600894 -2.8436563611 --1.16018629074 -2.86091387272 --1.16019949317 -2.87817180157 --1.16021570563 -2.89542984962 --1.16023480892 -2.91268849373 --1.16025692224 -2.92994737625 --1.16028192639 -2.94720685482 --1.16029596329 -2.96641802788 --1.16028353572 -2.98562759161 --1.16025832295 -3.00288701057 --1.16023612023 -3.02014613151 --1.16021683812 -3.0374045372 --1.16020044685 -3.05466282368 --1.160187006 -3.07192063332 --1.16017657518 -3.08917832375 --1.160169065 -3.10643565655 --1.16016447544 -3.12369298935 --1.16016295552 -3.14095011552 --1.16016438603 --3.12497782707 --1.16016870737 --3.10772061348 --1.16017597914 --3.09046310186 --1.16018626094 --3.07320559025 --1.16019949317 --3.0559476614 --1.16021570563 --3.03868961334 --1.16023480892 --3.02143096924 --1.16025686264 --3.00417208672 --1.16028186679 --2.98691260815 --1.16029596329 --2.96770143509 --1.16028353572 --2.94849187136 --1.16025832295 --2.9312324524 --1.16023609042 --2.91397333145 --1.16021677852 --2.89671492577 --1.16020044685 --2.87945663929 --1.1601870358 --2.86219882965 --1.16017657518 --2.84494113922 --1.160169065 --2.82768380642 --1.16016450524 --2.81042647362 --1.16016295552 --2.79316937923 --1.16016435623 --2.77591198683 --1.16016870737 --2.75865477323 --1.16017600894 --2.74139732122 --1.16018629074 --2.72413980961 --1.16019949317 --2.70688182116 --1.16021570563 --2.6896237731 --1.16023480892 --2.6723651886 --1.16025686264 --2.65510630608 --1.16028186679 --2.6378467679 --1.16029593349 --2.61863553524 --1.16028350592 --2.59942591191 --1.16025832295 --2.58216655254 --1.16023609042 --2.56490755081 --1.16021677852 --2.54764914512 --1.16020041704 --2.53039085865 --1.160187006 --2.51313304901 --1.16017657518 --2.49587535858 --1.1601690948 --2.47861802578 --1.16016450524 --2.46136057377 --1.16016292572 --2.44410341978 --1.16016432643 --2.42684614658 --1.16016867757 --2.40958893299 --1.16017597914 --2.39233142137 --1.16018626094 --2.37507390976 --1.16019946337 --2.35781592131 --1.16021567583 --2.34055781364 --1.16023480892 --2.32329928875 --1.16025686264 --2.30604046583 --1.16028186679 --2.28878086805 --1.16029596329 --2.26956969499 --1.16028353572 --2.25036013126 --1.16025832295 --2.2331007719 --1.16023615003 --2.21584177017 --1.16021680832 --2.19858324528 --1.16020038724 --2.1813249588 --1.160187006 --2.16406726837 --1.16017657518 --2.14680957794 --1.1601690948 --2.12955224514 --1.16016453504 --2.11229479313 --1.16016298532 --2.09503763914 --1.16016438603 --2.07778030634 --1.16016867757 --2.06052303314 --1.16017597914 --2.04326552152 --1.16018629074 --2.02600800991 --1.16019946337 --2.00875008106 --1.16021567583 --1.99149206281 --1.16023480892 --1.97423344851 --1.16025689244 --1.95697456598 --1.16028189659 --1.93971505761 --1.16029596329 --1.92050388455 --1.16028353572 --1.90129432082 --1.16025832295 --1.88403493166 --1.16023609042 --1.86677587033 --1.16021677852 --1.84951740504 --1.16020044685 --1.83225911856 --1.1601870358 --1.81500136852 --1.16017657518 --1.79774367809 --1.1601690948 --1.78048634529 --1.16016453504 --1.76322892308 --1.16016295552 --1.74597173929 --1.16016432643 --1.72871440649 --1.16016867757 --1.7114571929 --1.16017597914 --1.69419968128 --1.16018626094 --1.67694216967 --1.16019946337 --1.65968424082 --1.16021564603 --1.64242619276 --1.16023474932 --1.62516757846 --1.16025686264 --1.60790872574 --1.16028189659 --1.59064918756 --1.16029593349 --1.5714380145 --1.16028350592 --1.55222845077 --1.16025829315 --1.53496906161 --1.16023609042 --1.51771000028 --1.16021680832 --1.50045156479 --1.16020041704 --1.48319330811 --1.160187006 --1.46593549847 --1.16017657518 --1.44867777824 --1.160169065 --1.43142044544 --1.16016450525 --1.41416305304 --1.16016298532 --1.39690592885 --1.16016435623 --1.37964862585 --1.16016867757 --1.36239141226 --1.16017600894 --1.34513390065 --1.16018629074 --1.32787638903 --1.16019946337 --1.31061840057 --1.16021567583 --1.29336032271 --1.16023480892 --1.27610173821 --1.16025692224 --1.25884288549 --1.16028192639 --1.24158334732 --1.16029596329 --1.22237214446 --1.16028353572 --1.20316261053 --1.16025832295 --1.18590325117 --1.16023609042 --1.16864418984 --1.16021677852 --1.15138572455 --1.16020038724 --1.13412743807 --1.16018697619 --1.11686968803 --1.16017657518 --1.0996119678 --1.160169065 --1.0823546052 --1.16016450525 --1.06509721279 --1.16016295552 --1.0478400588 --1.16016435623 --1.030582726 --1.16016870737 --1.01332551241 --1.16017600894 --0.996068000794 --1.16018629074 --0.97881051898 --1.16019946337 --0.961552575231 --1.16021567583 --0.94429448247 --1.16023480892 --0.927035868168 --1.16025689244 --0.909777015448 --1.16028192639 --0.892517492175 --1.16029596329 --0.873306304216 --1.16028350592 --0.854096740484 --1.16025832295 --0.836837366223 --1.16023609042 --0.819578304887 --1.16021677852 --0.802319854498 --1.16020041704 --0.785061582923 --1.160187006 --0.767803803086 --1.16017657518 --0.750546112657 --1.1601690948 --0.733288764954 --1.16016453504 --0.716031372547 --1.16016295552 --0.698774233461 --1.16016432643 --0.681516885758 --1.16016864776 --0.664259687066 --1.16017597914 --0.647002160549 --1.16018629074 --0.629744634032 --1.16019949317 --0.612486690283 --1.16021570563 --0.595228627324 --1.16023480892 --0.577970027923 --1.16025686264 --0.560711175204 --1.16028186679 --0.54345163703 --1.16029596329 --0.524240449071 --1.16028353572 --0.50503090024 --1.16025832295 --0.487771518529 --1.16023609042 --0.470512449741 --1.16021677852 --0.453254006803 --1.16020044685 --0.435995750129 --1.1601870358 --0.418737977743 --1.16017657518 --0.401480257511 --1.160169065 --0.384222909808 --1.16016450525 --0.3669655025 --1.16016295552 --0.349708355963 --1.16016432643 --0.332451030612 --1.16016867757 --0.31519382447 --1.16017600894 --0.297936312855 --1.16018629074 --0.280678786337 --1.16019949317 --0.263420842588 --1.16021570563 --0.24616279453 --1.16023480892 --0.228904187679 --1.16025692224 --0.211645323783 --1.16028192639 --0.194385796785 --1.16029596329 --0.175174608826 --1.14051029086 --0.155960150063 --1.14048522711 --0.138700790703 --1.14046317339 --0.121441736817 --1.1404440403 --0.104183305055 --1.14042776823 --0.0869250614196 --1.14041447639 --0.069667304866 --1.14040410519 --0.052409613505 --1.1403966248 --0.0351522923447 --1.14039215445 --0.0178949129768 --1.14039066434 --0.00063778180629 --1.14039203525 -0.0166195309721 --1.14039632678 -0.0338767222129 --1.14040356875 -0.0511342156679 --1.14041376114 -0.0683917067945 --1.14042687416 -0.0856496281922 --1.14044293761 -0.102907672524 --1.14046189189 -0.120166260749 --1.1404838264 -0.137425098568 --1.14050862193 -0.154684603215 --1.14052256942 -0.173895969987 --1.14051026106 -0.193105708808 --1.14048525691 -0.210365064442 --1.14046317339 -0.227624114603 --1.14044401049 -0.244882550091 --1.14042779803 -0.262140795589 --1.1404145062 -0.279398553074 --1.14040410519 -0.296656250954 --1.14039665461 -0.313913568855 --1.14039218426 -0.33117094636 --1.14039063454 -0.348428077996 --1.14039203525 -0.365685395896 --1.14039632678 -0.382942587137 --1.14040350914 -0.4002000615 --1.14041373134 -0.417457550764 --1.14042690396 -0.434715479612 --1.14044296741 -0.451973520219 --1.14046189189 -0.469232112169 --1.1404838264 -0.486490957439 --1.14050862193 -0.503750450909 --1.14052253962 -0.522961810231 --1.14051023126 -0.542171567678 --1.14048522711 -0.559430927038 --1.14046314359 -0.576689973473 --1.14044401049 -0.59394839406 --1.14042779803 -0.611206635833 --1.14041447639 -0.628464400768 --1.14040407538 -0.645722076297 --1.14039665461 -0.662979394197 --1.14039218426 -0.680236801505 --1.14039060474 -0.697493925691 --1.14039197564 -0.714751213789 --1.14039629698 -0.732008397579 --1.14040350914 -0.749265909195 --1.14041373134 -0.76652340591 --1.14042687416 -0.783781319857 --1.14044296741 -0.801039367914 --1.14046192169 -0.818297937512 --1.1404838264 -0.835556790233 --1.14050862193 -0.852816313505 --1.14052256942 -0.872027665377 --1.14051026106 -0.891237407923 --1.14048525691 -0.908496782183 --1.14046320319 -0.925755813718 --1.14044401049 -0.943014234305 --1.14042773843 -0.960272476077 --1.14041447639 -0.977530241012 --1.14040410519 -0.994787961245 --1.14039665461 -1.01204526425 --1.14039218426 -1.02930262685 --1.14039066434 -1.04655975103 --1.14039206505 -1.06381708384 --1.14039629698 -1.08107429743 --1.14040347934 -1.09833174944 --1.14041373134 -1.11558923125 --1.14042684436 -1.1328471899 --1.14044290781 -1.15010523796 --1.14046189189 -1.16736382246 --1.1404838562 -1.18462264538 --1.14050865173 -1.20188215375 --1.14052256942 -1.22109353543 --1.14051026106 -1.24030327797 --1.14048522711 -1.25756263733 --1.14046314359 -1.27482166887 --1.14044401049 -1.29208010435 --1.14042779803 -1.30933836103 --1.1404145062 -1.32659608126 --1.14040410519 -1.34385374189 --1.14039665461 -1.36111107469 --1.14039218426 -1.37836846709 --1.14039060474 -1.39562559128 --1.14039194584 -1.41288292408 --1.14039626718 -1.43014013767 --1.14040350914 -1.44739761949 --1.14041373134 -1.4646551013 --1.14042687416 -1.48191300035 --1.14044293761 -1.4991710484 --1.14046186209 -1.5164296627 --1.14048379659 -1.53368851542 --1.14050865173 -1.5509480238 --1.14052256942 -1.57015937567 --1.14051023126 -1.58936911821 --1.14048519731 -1.60662847757 --1.14046314359 -1.62388750911 --1.1404440403 -1.6411459446 --1.14042779803 -1.65840420127 --1.14041447639 -1.6756619513 --1.14040407538 -1.69291964173 --1.14039662481 -1.71017697453 --1.14039215446 -1.72743433714 --1.14039066434 -1.74469146132 --1.14039200544 -1.76194879413 --1.14039626718 -1.77920597792 --1.14040350914 -1.79646345973 --1.14041373134 -1.81372094154 --1.14042687416 -1.83097887039 --1.14044293761 -1.84823694825 --1.14046189189 -1.86549553275 --1.1404838562 -1.88275435567 --1.14050865173 -1.90001386404 --1.14052256942 -1.91922521591 --1.14051026106 -1.93843495846 --1.14048525691 -1.95569431782 --1.14046317339 -1.97295337915 --1.14044401049 -1.99021181464 --1.14042776823 -2.00747007131 --1.14041447639 -2.02472782135 --1.14040410519 -2.04198551178 --1.14039662481 -2.05924284458 --1.14039215446 -2.07650017739 --1.14039063454 -2.09375727177 --1.14039203525 -2.11101460457 --1.14039632678 -2.12827181816 --1.14040353894 -2.14552932978 --1.14041376114 -2.16278678179 --1.14042684436 -2.18004471063 --1.14044293761 -2.1973028183 --1.14046192169 -2.21456134319 --1.1404838264 -2.23182016611 --1.14050862193 -2.24907970429 --1.14052253962 -2.26829105616 --1.14051023126 -2.2875007987 --1.14048525691 -2.30476015806 --1.14046317339 -2.3220192194 --1.14044401049 -2.33927762508 --1.14042779803 -2.35653585195 --1.14041447639 -2.37379366159 --1.14040407538 -2.39105135202 --1.14039665461 -2.40830868483 --1.14039218426 -2.42556607723 --1.14039063454 -2.44282317162 --1.14039200544 -2.46008050442 --1.14039626718 -2.47733765841 --1.14040347934 -2.49459511042 --1.14041373134 -2.51185268164 --1.14042690396 -2.52911061048 --1.14044296741 -2.54636859894 --1.14046189189 -2.56362724304 --1.1404838264 -2.58088612556 --1.14050862193 -2.59814560414 --1.14052256942 -2.61735695601 --1.14051026106 -2.63656669855 --1.14048525691 -2.65382599831 --1.14046317339 -2.67108500004 --1.14044401049 -2.68834352493 --1.14042779803 -2.70560181141 --1.1404145062 -2.72285950184 --1.14040410519 -2.74011713266 --1.14039662481 -2.75737446547 --1.14039215446 -2.77463191748 --1.14039060474 -2.79188907146 --1.14039197564 -2.80914634466 --1.14039629698 -2.82640355825 --1.14040350914 -2.84366106987 --1.14041373134 -2.86091852188 --1.14042690396 -2.87817639112 --1.14044296741 -2.89543443918 --1.14046189189 -2.91269308329 --1.1404838562 -2.9299519062 --1.14050865173 -2.94721138477 --1.14052259922 -2.96642279625 --1.14051029086 -2.9856325388 --1.14048522711 -3.00289189816 --1.14046317339 -3.02015095949 --1.1404440403 -3.03740936517 --1.14042776823 -3.05466765165 --1.14041447639 -3.07192540169 --1.14040410519 -3.08918309212 --1.1403966248 -3.10644042492 --1.14039215445 -3.12369775772 --1.14039066434 -3.14095488389 --1.14039203525 --3.12497311831 --1.14039632678 --3.10771590471 --1.14040356875 --3.0904583931 --1.14041376114 --3.07320094109 --1.14042687416 --3.05594307185 --1.14044293761 --3.03868502378 --1.14046189189 --3.02142637968 --1.1404838264 --3.00416755676 --1.14050862193 --2.98690807819 --1.14052256942 --2.96769666672 --1.14051026106 --2.94848692417 --1.14048525691 --2.93122756481 --1.14046317339 --2.91396850348 --1.14044401049 --2.89671009779 --1.14042779803 --2.87945181131 --1.1404145062 --2.86219406128 --1.14040410519 --2.84493637085 --1.14039665461 --2.82767903805 --1.14039218426 --2.81042170525 --1.14039063454 --2.79316461086 --1.14039203525 --2.77590727806 --1.14039632678 --2.75865006447 --1.14040350914 --2.74139261246 --1.14041373134 --2.72413516045 --1.14042690396 --2.70687717199 --1.14044296741 --2.68961912394 --1.14046189189 --2.67236059904 --1.1404838264 --2.65510171652 --1.14050862193 --2.63784217835 --1.14052253962 --2.61863082647 --1.14051023126 --2.59942108393 --1.14048522711 --2.58216172457 --1.14046314359 --2.56490266323 --1.14044401049 --2.54764425755 --1.14042779803 --2.53038603068 --1.14041447639 --2.51312822104 --1.14040407538 --2.4958705306 --1.14039665461 --2.47861325741 --1.14039218426 --2.461355865 --1.14039060474 --2.44409877062 --1.14039197564 --2.42684149742 --1.14039629698 --2.40958428383 --1.14040350914 --2.39232677221 --1.14041373134 --2.3750692606 --1.14042687416 --2.35781133175 --1.14044296741 --2.34055328369 --1.14046192169 --2.3232947588 --1.1404838264 --2.30603587627 --1.14050862193 --2.28877627849 --1.14052256942 --2.26956498623 --1.14051026106 --2.25035524368 --1.14048525691 --2.23309588432 --1.14046320319 --2.21583688259 --1.14044401049 --2.1985784173 --1.14042773843 --2.18132019043 --1.14041447639 --2.1640624404 --1.14040410519 --2.14680474997 --1.14039665461 --2.12954741716 --1.14039218426 --2.11229002476 --1.14039066434 --2.09503293037 --1.14039206505 --2.07777559758 --1.14039629698 --2.06051832437 --1.14040347934 --2.04326081276 --1.14041373134 --2.02600336075 --1.14042684436 --2.00874549151 --1.14044290781 --1.99148747325 --1.14046189189 --1.97422882914 --1.1404838562 --1.95696997642 --1.14050865173 --1.93971049785 --1.14052256942 --1.92049914598 --1.14051026106 --1.90128940344 --1.14048522711 --1.88403004408 --1.14046314359 --1.86677101255 --1.14044401049 --1.84951254725 --1.14042779803 --1.83225429058 --1.1404145062 --1.81499657035 --1.14040410519 --1.79773887992 --1.14039665461 --1.78048154712 --1.14039218426 --1.76322415471 --1.14039060474 --1.74596703052 --1.14039194584 --1.72870972753 --1.14039626718 --1.71145251393 --1.14040350914 --1.69419500232 --1.14041373134 --1.67693752051 --1.14042687416 --1.65967962146 --1.14044293761 --1.6424215734 --1.14046186209 --1.6251629889 --1.14048379659 --1.60790416598 --1.14050865173 --1.59064465761 --1.14052256942 --1.57143330574 --1.14051023126 --1.5522235632 --1.14048519731 --1.53496417403 --1.14046314359 --1.5177051127 --1.1404440403 --1.50044670701 --1.14042779803 --1.48318848014 --1.14041447639 --1.4659307003 --1.14040407538 --1.44867298007 --1.14039662481 --1.43141567707 --1.14039215446 --1.41415831447 --1.14039066434 --1.39690119028 --1.14039200544 --1.37964388728 --1.14039626718 --1.36238670349 --1.14040350914 --1.34512922168 --1.14041373134 --1.32787171006 --1.14042687416 --1.31061375141 --1.14044293761 --1.29335573315 --1.14046189189 --1.27609714865 --1.1404838562 --1.25883826613 --1.14050865173 --1.24157875776 --1.14052256942 --1.22236743569 --1.14051026106 --1.20315772295 --1.14048525691 --1.18589836359 --1.14046317339 --1.16863933206 --1.14044401049 --1.15138086677 --1.14042776823 --1.13412258029 --1.14041447639 --1.11686483025 --1.14040410519 --1.09960713983 --1.14039662481 --1.08234983683 --1.14039215446 --1.06509247422 --1.14039063454 --1.04783535004 --1.14039203525 --1.03057801723 --1.14039632678 --1.01332080364 --1.14040353894 --0.996063321829 --1.14041376114 --0.978805854916 --1.14042684436 --0.961547940969 --1.14044293761 --0.944289878011 --1.14046192169 --0.92703127861 --1.1404838264 --0.909772440791 --1.14050862193 --0.89251293242 --1.14052253962 --0.873301550746 --1.14051023126 --0.854091823101 --1.14048525691 --0.836832493544 --1.14046317339 --0.819573432207 --1.14044401049 --0.80231499672 --1.14042779803 --0.785056754947 --1.14041447639 --0.767798990011 --1.14040407538 --0.750541314483 --1.14039665461 --0.733283981681 --1.14039218426 --0.716026604176 --1.14039063454 --0.698769494891 --1.14039200544 --0.68151217699 --1.14039626718 --0.664254978299 --1.14040347934 --0.646997466683 --1.14041373134 --0.629739969969 --1.14042690396 --0.612482070923 --1.14044296741 --0.595224037766 --1.14046189189 --0.577965438366 --1.1404838264 --0.560706600547 --1.14050862193 --0.543447092175 --1.14052256942 --0.524235725403 --1.14051026106 --0.505025990307 --1.14048525691 --0.487766630947 --1.14046317339 --0.470507577062 --1.14044401049 --0.453249149025 --1.14042779803 --0.435990907252 --1.1404145062 --0.418733157218 --1.14040410519 --0.401475466788 --1.14039662481 --0.384218133986 --1.14039215446 --0.366960756481 --1.14039060474 --0.349703624845 --1.14039197564 --0.332446314395 --1.14039629698 --0.315189130604 --1.14040350914 --0.29793163389 --1.14041373134 --0.280674137175 --1.14042690396 --0.263416215777 --1.14044296741 --0.246158178896 --1.14046189189 --0.22889958322 --1.1404838562 --0.211640741676 --1.14050865173 --0.194381240755 --1.14052259922 --0.175169881433 --1.12076309324 --0.155955117196 --1.1207382381 --0.138695776463 --1.12071633339 --0.121436741203 --1.12069737911 --0.104178331792 --1.12068128586 --0.0869201067835 --1.12066808343 --0.0696623697877 --1.12065777183 --0.0524046998471 --1.12065035105 --0.0351473991759 --1.1206459403 --0.0178900395986 --1.12064445019 --0.000632927985863 --1.12064576149 -0.0166243650019 --1.12065005303 -0.0338815357536 --1.12065726519 -0.0511390101165 --1.12066736817 -0.0683964826167 --1.12068036199 -0.0856543835253 --1.12069627642 -0.102912405506 --1.12071511149 -0.120170971379 --1.12073689699 -0.13742979616 --1.1207614541 -0.154689285904 --1.12077525258 -0.173900824041 --1.12076306343 -0.19311073795 --1.1207382977 -0.210370078683 --1.12071639299 -0.227629113943 --1.12069734931 -0.244887523353 --1.12068125605 -0.262145735324 --1.12066808343 -0.279403477907 --1.12065777183 -0.296661160886 --1.12065038085 -0.313918463886 --1.1206459403 -0.331175819039 --1.12064442038 -0.348432920873 --1.12064579129 -0.365690223872 --1.12065002322 -0.382947400212 --1.12065720558 -0.400204859674 --1.12066736817 -0.417462326586 --1.12068039179 -0.434720233083 --1.12069633603 -0.451978258789 --1.12071511149 -0.469236820936 --1.12073686719 -0.486495643854 --1.1207614541 -0.503755122423 --1.12077525258 -0.522966653108 --1.12076306343 -0.54217658937 --1.1207382381 -0.559435933828 --1.12071633339 -0.576694965362 --1.12069737911 -0.593953371048 --1.12068128586 -0.611211597919 --1.12066805363 -0.628469347954 --1.12065774202 -0.645727008581 --1.12065038085 -0.662984311581 --1.1206459701 -0.680241674185 --1.12064442038 -0.697498768568 --1.12064576149 -0.714756041765 --1.12065005303 -0.732013210654 --1.12065720558 -0.74927072227 --1.12066733837 -0.766528189182 --1.12068039179 -0.783786073327 --1.12069636583 -0.801044106484 --1.1207151413 -0.818302676082 --1.12073686719 -0.835561499 --1.1207614839 -0.85282099247 --1.12077528238 -0.872032538056 --1.12076306343 -0.891242444515 --1.1207382679 -0.908501788974 --1.12071636319 -0.925760820508 --1.12069737911 -0.943019211292 --1.12068128586 -0.960277438164 --1.12066808343 -0.977535188198 --1.12065777183 -0.994792863726 --1.12065038085 -1.01205015183 --1.1206459701 -1.02930748463 --1.12064445019 -1.04656460881 --1.12064579129 -1.06382191181 --1.12065002322 -1.0810790658 --1.12065720558 -1.09833654761 --1.12066736817 -1.11559402943 --1.12068036199 -1.13285192847 --1.12069630623 -1.15010994673 --1.12071511149 -1.16736853123 --1.12073686719 -1.18462735414 --1.1207614541 -1.20188683272 --1.12077525258 -1.2210983932 --1.12076306343 -1.24030831456 --1.1207382381 -1.25756764412 --1.12071633339 -1.27482667565 --1.12069734931 -1.29208508134 --1.12068125605 -1.30934330821 --1.12066808343 -1.32660102844 --1.12065777183 -1.34385868907 --1.12065038085 -1.36111599207 --1.1206459403 -1.37837335468 --1.12064442038 -1.39563047886 --1.12064576149 -1.41288778186 --1.12065002322 -1.43014496565 --1.12065720558 -1.44740241766 --1.12066733837 -1.46465986967 --1.12068036198 -1.48191776872 --1.12069630623 -1.49917581678 --1.12071511149 -1.51643437147 --1.12073683738 -1.53369316459 --1.1207614839 -1.55095267296 --1.12077531218 -1.57016420365 --1.12076306343 -1.589374125 --1.1207382381 -1.60663348436 --1.12071633339 -1.6238925159 --1.12069737911 -1.64115092158 --1.12068128586 -1.65840914845 --1.12066808343 -1.67566689849 --1.12065777182 -1.69292455911 --1.12065038085 -1.71018186212 --1.1206459403 -1.72743919492 --1.12064442038 -1.7446962893 --1.12064579129 -1.7619536221 --1.12065005303 -1.77921077609 --1.12065723538 -1.7964682281 --1.12066736817 -1.81372570991 --1.12068039179 -1.83098360896 --1.12069633603 -1.84824165702 --1.12071514129 -1.86550024152 --1.12073689699 -1.88275906444 --1.1207614541 -1.90001854301 --1.12077525258 -1.91923007369 --1.12076306343 -1.93843999505 --1.1207382679 -1.95569935441 --1.12071636319 -1.97295838595 --1.12069734931 -1.99021679163 --1.12068125605 -2.0074750185 --1.12066808343 -2.02473270893 --1.12065777183 -2.04199039936 --1.12065038085 -2.05924773216 --1.1206459403 -2.07650506496 --1.12064445019 -2.09376215935 --1.1206458509 -2.11101949215 --1.12065008283 -2.12827664614 --1.12065723539 -2.14553409815 --1.12066736817 -2.16279160976 --1.12068036199 -2.18004947901 --1.12069633603 -2.19730746746 --1.1207151711 -2.21456605196 --1.12073686719 -2.23182493448 --1.1207614243 -2.24908441305 --1.12077525258 -2.26829588414 --1.12076306343 -2.28750580549 --1.1207382679 -2.30476516485 --1.12071636319 -2.32202422619 --1.12069734931 -2.33928263188 --1.12068125605 -2.35654079914 --1.12066805363 -2.37379854917 --1.12065774202 -2.3910562396 --1.12065038085 -2.4083135724 --1.1206459701 -2.42557096481 --1.12064445019 -2.4428280592 --1.12064579129 -2.46008533239 --1.12065002322 -2.47734248638 --1.12065720558 -2.49459993839 --1.12066736817 -2.51185745001 --1.12068039179 -2.52911537886 --1.12069630623 -2.54637336731 --1.12071508169 -2.56363195181 --1.12073686719 -2.58089077473 --1.1207614541 -2.5981502533 --1.12077525258 -2.61736184359 --1.12076306343 -2.63657176494 --1.1207382679 -2.6538310051 --1.12071636319 -2.67109000683 --1.12069734931 -2.68834847212 --1.12068125605 -2.70560675859 --1.12066808343 -2.72286450863 --1.12065777183 -2.74012207985 --1.12065038085 -2.75737935305 --1.1206459403 -2.77463680506 --1.12064439058 -2.79189389944 --1.12064576149 -2.80915111303 --1.12065005303 -2.82640832663 --1.12065720558 -2.84366583824 --1.12066736817 -2.86092329025 --1.12068042159 -2.8781811595 --1.12069633603 -2.89543920756 --1.12071511149 -2.91269779205 --1.12073686719 -2.92995655537 --1.1207614541 -2.94721603393 --1.12077528238 -2.96642762422 --1.12076309324 -2.98563754558 --1.1207382381 -3.00289690495 --1.12071633339 -3.02015590668 --1.12069737911 -3.03741431236 --1.12068128586 -3.05467259884 --1.12066808343 -3.07193028927 --1.12065777183 -3.0891879797 --1.12065035105 -3.1064453125 --1.1206459403 -3.1237026453 --1.12064445019 -3.14095971186 --1.12064576149 --3.12496834994 --1.12065005303 --3.10771113634 --1.12065726519 --3.09045362473 --1.12066736817 --3.07319617272 --1.12068036199 --3.05593830347 --1.12069627642 --3.03868025541 --1.12071511149 --3.02142167091 --1.12073689699 --3.0041629076 --1.1207614541 --2.98690342903 --1.12077525258 --2.96769183874 --1.12076306343 --2.94848191738 --1.1207382977 --2.93122255802 --1.12071639299 --2.91396349669 --1.12069734931 --2.896705091 --1.12068125605 --2.87944686413 --1.12066808343 --2.8621891737 --1.12065777183 --2.84493148327 --1.12065038085 --2.82767415047 --1.1206459403 --2.81041681766 --1.12064442038 --2.79315972328 --1.12064579129 --2.77590245009 --1.12065002322 --2.7586452961 --1.12065720558 --2.74138778448 --1.12066736817 --2.72413033247 --1.12068039179 --2.70687246323 --1.12069633603 --2.68961441517 --1.12071511149 --2.67235583067 --1.12073686719 --2.65509694815 --1.1207614541 --2.63783746958 --1.12077525258 --2.6186259985 --1.12076306343 --2.59941607714 --1.1207382381 --2.58215671777 --1.12071633339 --2.56489765644 --1.12069737911 --2.54763925076 --1.12068128586 --2.53038108349 --1.12066805363 --2.51312333345 --1.12065774202 --2.49586564303 --1.12065038085 --2.47860836983 --1.1206459701 --2.46135103703 --1.12064442038 --2.44409394264 --1.12064576149 --2.42683660984 --1.12065005303 --2.40957939625 --1.12065720558 --2.39232194424 --1.12066733837 --2.37506449223 --1.12068039179 --2.35780656338 --1.12069636583 --2.34054857493 --1.1207151413 --2.32329005003 --1.12073686719 --2.30603116751 --1.1207614839 --2.28877162933 --1.12077528238 --2.26956009864 --1.12076306343 --2.25035017729 --1.1207382679 --2.23309087753 --1.12071636319 --2.2158318758 --1.12069737911 --2.19857347011 --1.12068128586 --2.18131524325 --1.12066808343 --2.16405743361 --1.12065777183 --2.14679980278 --1.12065038085 --2.12954252959 --1.1206459701 --2.11228519678 --1.12064445019 --2.0950281024 --1.12064579129 --2.0777707696 --1.12065002322 --2.060513556 --1.12065720558 --2.04325604439 --1.12066736817 --2.02599859238 --1.12068036199 --2.00874072313 --1.12069630623 --1.99148270488 --1.12071511149 --1.97422409057 --1.12073686719 --1.95696529746 --1.1207614541 --1.93970581889 --1.12077525258 --1.92049428821 --1.12076306343 --1.90128439665 --1.1207382381 --1.88402503729 --1.12071633339 --1.86676600575 --1.12069734931 --1.84950757026 --1.12068125605 --1.8322493434 --1.12066808343 --1.81499162317 --1.12065777183 --1.79773396254 --1.12065038085 --1.78047665954 --1.1206459403 --1.76321926713 --1.12064442038 --1.74596217275 --1.12064576149 --1.72870489955 --1.12065002322 --1.71144771576 --1.12065720558 --1.69419023395 --1.12066733837 --1.67693275213 --1.12068036198 --1.65967488289 --1.12069630623 --1.64241686463 --1.12071511149 --1.62515828013 --1.12073683738 --1.60789945722 --1.1207614839 --1.59063997865 --1.12077531218 --1.57142844796 --1.12076306343 --1.5522185266 --1.1207382381 --1.53495916724 --1.12071633339 --1.51770013571 --1.12069737911 --1.50044173002 --1.12068128586 --1.48318350315 --1.12066808343 --1.46592578292 --1.12065777182 --1.44866809249 --1.12065038085 --1.43141078949 --1.1206459403 --1.41415345669 --1.12064442038 --1.3968963325 --1.12064579129 --1.3796390295 --1.12065005303 --1.36238187552 --1.12065723538 --1.3451243937 --1.12066736817 --1.32786691189 --1.12068039179 --1.31060901284 --1.12069633603 --1.29335099459 --1.12071514129 --1.27609241008 --1.12073689699 --1.25883355737 --1.1207614541 --1.2415740788 --1.12077525258 --1.22236257792 --1.12076306343 --1.20315265656 --1.1207382679 --1.185893327 --1.12071636319 --1.16863432526 --1.12069734931 --1.15137588978 --1.12068125605 --1.13411763311 --1.12066808343 --1.11685988307 --1.12065777183 --1.09960219264 --1.12065038085 --1.08234491944 --1.1206459403 --1.06508758664 --1.12064445019 --1.04783049226 --1.1206458509 --1.03057318926 --1.12065008283 --1.01331600547 --1.12065723539 --0.996058553458 --1.12066736817 --0.978801071644 --1.12068036199 --0.961543172598 --1.12069633603 --0.944285139441 --1.1207151711 --0.927026554942 --1.12073686719 --0.909767746925 --1.1207614243 --0.892508268356 --1.12077525258 --0.87329672277 --1.12076306343 --0.854086816311 --1.1207382679 --0.836827471852 --1.12071636319 --0.819568425417 --1.12069734931 --0.802310019731 --1.12068125605 --0.78505179286 --1.12066805363 --0.767794057727 --1.12065774202 --0.7505363971 --1.12065038085 --0.733279079199 --1.1206459701 --0.716021731496 --1.12064445019 --0.698764637113 --1.12064579129 --0.681507334113 --1.12065002322 --0.664250150323 --1.12065720558 --0.646992668509 --1.12066736817 --0.629735201597 --1.12068039179 --0.612477317453 --1.12069630623 --0.595219299197 --1.12071508169 --0.577960714698 --1.12073686719 --0.560701906681 --1.1207614541 --0.543442428112 --1.12077525258 --0.524230867624 --1.12076306343 --0.505020938814 --1.1207382679 --0.487761609256 --1.12071636319 --0.470502592623 --1.12069734931 --0.453244172037 --1.12068125605 --0.435985937715 --1.12066808343 --0.418728217483 --1.12065777183 --0.401470556855 --1.12065038085 --0.384213246405 --1.1206459403 --0.366955883801 --1.12064439058 --0.349698774517 --1.12064576149 --0.332441486419 --1.12065005303 --0.315184317529 --1.12065720558 --0.297926835716 --1.12066736817 --0.280669361353 --1.12068042159 --0.263411469757 --1.12069633603 --0.246153447777 --1.12071511149 --0.228894863278 --1.12073686719 --0.211636044085 --1.1207614541 --0.194376561791 --1.12077528238 --0.175165023655 --1.10364598036 --0.155951950699 --1.10362133384 --0.138692624867 --1.10359957814 --0.121433600784 --1.10358074307 --0.104175204411 --1.10356476903 --0.0869169887155 --1.10355165601 --0.0696592647582 --1.10354146362 --0.0524016087875 --1.10353416204 --0.0351443211548 --1.1035297513 --0.0178869748488 --1.10352817177 --0.000629875808953 --1.10352951288 -0.0166274048388 --1.10353380442 -0.0338845620863 --1.10354092717 -0.051142022945 --1.10355097055 -0.0683994842693 --1.10356390476 -0.0856573730707 --1.10357972979 -0.102915383875 --1.10359841585 -0.120173942298 --1.10362002253 -0.13743275404 --1.10364437103 -0.154692232609 --1.1036580801 -0.173903878778 --1.10364595056 -0.193113900721 --1.10362136364 -0.210373230279 --1.10359963775 -0.227632254362 --1.10358071327 -0.244890656322 --1.10356476903 -0.262148857117 --1.10355168581 -0.279406577349 --1.10354146362 -0.296664245427 --1.10353413224 -0.313921540976 --1.10352969169 -0.331178881228 --1.10352817177 -0.348435968161 --1.10352951288 -0.365693248808 --1.10353374481 -0.382950410247 --1.10354092717 -0.400207877159 --1.10355100035 -0.417465344071 --1.10356390476 -0.434723228216 --1.1035797596 -0.451981239021 --1.10359841585 -0.469239793718 --1.10361999273 -0.486498601735 --1.10364440083 -0.503758065403 --1.10365810991 -0.522969707847 --1.10364595056 -0.542179763317 --1.10362133384 -0.559439092874 --1.10359960795 -0.576698109508 --1.10358074307 -0.593956500292 --1.10356476903 -0.611214697361 --1.10355165601 -0.628472432494 --1.10354146362 -0.645730108023 --1.10353413224 -0.662987411022 --1.10352972149 -0.680244728923 --1.10352820158 -0.697501823306 --1.10352951288 -0.714759111404 --1.10353377462 -0.732016250491 --1.10354092717 -0.749273732305 --1.10355097055 -0.766531199217 --1.10356390476 -0.783789068461 --1.1035797596 -0.801047086716 --1.10359841585 -0.818305656314 --1.10361996293 -0.83556444943 --1.10364440083 -0.852823927999 --1.10365813971 -0.872035592794 --1.10364595056 -0.891245603561 --1.10362133384 -0.908504933119 --1.10359960795 -0.925763949752 --1.10358074307 -0.943022325635 --1.10356476903 -0.960280552506 --1.10355165601 -0.97753828764 --1.10354146362 -0.994795933364 --1.10353413224 -1.01205322146 --1.10352972149 -1.02931058407 --1.10352820158 -1.04656767845 --1.10352951288 -1.06382492184 --1.10353374481 -1.08108207583 --1.10354092717 -1.09833958745 --1.10355100035 -1.11559703946 --1.10356390476 -1.13285490871 --1.1035797596 -1.15011292696 --1.10359841585 -1.16737148166 --1.10361996293 -1.18463030457 --1.10364437103 -1.20188978314 --1.10365810991 -1.22110143304 --1.10364595056 -1.24031147361 --1.10362133384 -1.25757080317 --1.10359960795 -1.2748298049 --1.10358071327 -1.29208818078 --1.10356476903 -1.30934640765 --1.10355168581 -1.32660415768 --1.10354146362 -1.34386181831 --1.10353413224 -1.36111909151 --1.10352969169 -1.37837642431 --1.10352823138 -1.3956335485 --1.10352957249 -1.4128908217 --1.10353377462 -1.43014797568 --1.10354092717 -1.44740542769 --1.10355100035 -1.46466287971 --1.10356390476 -1.48192077875 --1.10357972979 -1.49917879701 --1.10359838605 -1.51643735171 --1.10361996293 -1.53369614482 --1.10364440083 -1.55095562339 --1.10365810991 -1.57016727329 --1.10364598036 -1.58937728405 --1.10362136364 -1.60663661361 --1.10359960795 -1.62389564514 --1.10358074307 -1.64115405083 --1.10356476903 -1.6584122777 --1.10355168581 -1.67566999793 --1.10354149341 -1.69292762876 --1.10353413224 -1.71018493176 --1.10352969169 -1.72744229436 --1.10352817177 -1.74469935894 --1.10352954269 -1.76195666194 --1.10353380442 -1.77921381593 --1.10354095697 -1.79647126794 --1.10355100035 -1.81372871995 --1.10356390476 -1.83098658919 --1.1035797596 -1.84824463725 --1.10359844565 -1.86550319195 --1.10361999273 -1.88276198506 --1.10364437103 -1.90002146363 --1.10365810991 -1.91923311353 --1.10364595056 -1.9384431541 --1.10362133384 -1.95570251345 --1.10359960795 -1.97296151519 --1.10358071327 -1.99021992087 --1.10356476903 -2.00747811794 --1.10355168581 -2.02473580837 --1.10354146362 -2.0419934988 --1.10353413224 -2.0592508316 --1.10352969169 -2.07650816441 --1.10352820158 -2.09376525879 --1.10352957249 -2.11102259159 --1.10353380442 -2.12827968597 --1.10354092717 -2.14553713799 --1.10355097055 -2.1627946496 --1.10356390476 -2.18005245924 --1.1035797596 -2.19731044769 --1.10359844565 -2.2145690918 --1.10362002253 -2.23182791472 --1.10364440083 -2.24908733368 --1.10365810991 -2.26829898358 --1.10364595056 -2.28750902414 --1.10362133384 -2.30476832389 --1.10359960795 -2.32202732563 --1.10358071327 -2.33928573132 --1.10356476903 -2.35654395819 --1.10355168581 -2.37380164862 --1.10354146362 -2.39105927944 --1.10353413224 -2.40831661224 --1.10352972149 -2.42557394504 --1.10352820158 -2.44283103943 --1.10352951288 -2.46008837223 --1.10353374481 -2.47734552622 --1.10354092717 -2.49460297823 --1.10355100035 -2.51186043024 --1.10356390476 -2.52911829948 --1.10357972979 -2.54637634754 --1.10359835625 -2.56363493204 --1.10361996293 -2.58089369536 --1.10364440083 -2.59815317392 --1.10365810991 -2.61736488342 --1.10364595056 -2.63657492399 --1.10362133384 -2.65383416414 --1.10359960795 -2.67109316587 --1.10358071327 -2.68835157156 --1.10356476903 -2.70560979843 --1.10355168581 -2.72286760807 --1.10354146362 -2.74012523889 --1.10353413224 -2.75738245249 --1.10352969169 -2.77463984489 --1.10352817177 -2.79189693927 --1.10352951288 -2.80915415287 --1.10353380442 -2.82641136646 --1.10354095697 -2.84366881847 --1.10355100035 -2.86092627048 --1.10356393456 -2.87818419934 --1.1035797596 -2.89544218779 --1.10359838605 -2.91270071268 --1.10361996293 -2.9299595356 --1.10364440083 -2.94721901417 --1.10365810991 -2.96643066406 --1.10364598036 -2.98564070463 --1.10362133384 -3.00290006399 --1.10359957814 -3.02015906573 --1.10358074307 -3.03741747141 --1.10356476903 -3.05467569828 --1.10355165601 -3.07193338871 --1.10354146362 -3.08919107914 --1.10353416204 -3.10644835234 --1.1035297513 -3.12370568514 --1.10352817177 -3.1409627517 --1.10352951288 --3.1249653101 --1.10353380442 --3.10770809651 --1.10354092717 --3.0904506445 --1.10355097055 --3.07319319249 --1.10356390476 --3.05593526363 --1.10357972979 --3.03867727518 --1.10359841585 --3.02141875029 --1.10362002253 --3.00415992737 --1.10364437103 --2.9869004488 --1.1036580801 --2.9676887989 --1.10364595056 --2.94847875833 --1.10362136364 --2.93121939898 --1.10359963775 --2.91396033764 --1.10358071327 --2.89670193195 --1.10356476903 --2.87944376469 --1.10355168581 --2.86218607426 --1.10354146362 --2.84492838383 --1.10353413224 --2.82767105103 --1.10352969169 --2.81041371822 --1.10352817177 --2.79315668344 --1.10352951288 --2.77589941025 --1.10353374481 --2.75864225626 --1.10354092717 --2.74138474464 --1.10355100035 --2.72412729263 --1.10356390476 --2.70686948299 --1.1035797596 --2.68961143494 --1.10359841585 --2.67235285043 --1.10361999273 --2.65509402752 --1.10364440083 --2.63783454895 --1.10365810991 --2.61862295866 --1.10364595056 --2.59941291809 --1.10362133384 --2.58215355873 --1.10359960795 --2.564894557 --1.10358074307 --2.54763615131 --1.10356476903 --2.53037792444 --1.10355165601 --2.51312023401 --1.10354146362 --2.49586260319 --1.10353413224 --2.47860527039 --1.10352972149 --2.46134793758 --1.10352820158 --2.4440908432 --1.10352951288 --2.4268335104 --1.10353377462 --2.40957635641 --1.10354092717 --2.3923189044 --1.10355097055 --2.37506145239 --1.10356390476 --2.35780358315 --1.1035797596 --2.34054559469 --1.10359841585 --2.32328701019 --1.10361996293 --2.30602818727 --1.10364440083 --2.2887687087 --1.10365813971 --2.26955699921 --1.10364595056 --2.25034701824 --1.10362133384 --2.23308777809 --1.10359960795 --2.21582877636 --1.10358074307 --2.19857037067 --1.10356476903 --2.1813120842 --1.10355165601 --2.16405433416 --1.10354146362 --2.14679670334 --1.10353413224 --2.12953943014 --1.10352972149 --2.11228209734 --1.10352820158 --2.09502500295 --1.10352951288 --2.07776772976 --1.10353374481 --2.06051057577 --1.10354092717 --2.04325312376 --1.10355100035 --2.02599561215 --1.10356390476 --2.0087376833 --1.1035797596 --1.99147969484 --1.10359841585 --1.97422114015 --1.10361996293 --1.95696234703 --1.10364437103 --1.93970286846 --1.10365810991 --1.92049121857 --1.10364595056 --1.9012812078 --1.10362133384 --1.88402187825 --1.10359960795 --1.86676284671 --1.10358071327 --1.84950444102 --1.10356476903 --1.83224624396 --1.10355168581 --1.81498852372 --1.10354146362 --1.79773086309 --1.10353413224 --1.7804735601 --1.10352969169 --1.76321619749 --1.10352823138 --1.74595910311 --1.10352957249 --1.72870182991 --1.10353377462 --1.71144467592 --1.10354092717 --1.69418722391 --1.10355100035 --1.6769297421 --1.10356390476 --1.65967187285 --1.10357972979 --1.6424138844 --1.10359838605 --1.6251552999 --1.10361996293 --1.60789647698 --1.10364440083 --1.59063702822 --1.10365810991 --1.57142537832 --1.10364598036 --1.55221533775 --1.10362136364 --1.5349560082 --1.10359960795 --1.51769700646 --1.10358074307 --1.50043860078 --1.10356476903 --1.48318037391 --1.10355168581 --1.46592268348 --1.10354149341 --1.44866502285 --1.10353413224 --1.43140771985 --1.10352969169 --1.41415038705 --1.10352817177 --1.39689329267 --1.10352954269 --1.37963601947 --1.10353380442 --1.36237886548 --1.10354095697 --1.34512138367 --1.10355100035 --1.32786393166 --1.10356390476 --1.31060603261 --1.1035797596 --1.29334798455 --1.10359844565 --1.27608942985 --1.10361999273 --1.25883063674 --1.10364437103 --1.24157115817 --1.10365810991 --1.22235950828 --1.10364595056 --1.20314949751 --1.10362133384 --1.18589016795 --1.10359960795 --1.16863113642 --1.10358071327 --1.15137276054 --1.10356476903 --1.13411456346 --1.10355168581 --1.11685681343 --1.10354146362 --1.099599123 --1.10353413224 --1.0823418498 --1.10352969169 --1.065084517 --1.10352820158 --1.04782742262 --1.10352957249 --1.03057014942 --1.10353380442 --1.01331299543 --1.10354092717 --0.996055543423 --1.10355097055 --0.978798061609 --1.10356390476 --0.961540162563 --1.1035797596 --0.944282159209 --1.10359844565 --0.927023589611 --1.10362002253 --0.909764796495 --1.10364440083 --0.892505332827 --1.10365810991 --0.873293682933 --1.10364595056 --0.854083672166 --1.10362133384 --0.836824327708 --1.10359960795 --0.819565296173 --1.10358071327 --0.802306905389 --1.10356476903 --0.785048693418 --1.10355168581 --0.767790973187 --1.10354146362 --0.750533312559 --1.10353413224 --0.73327600956 --1.10352972149 --0.716018676758 --1.10352820158 --0.698761582375 --1.10352951288 --0.681504294276 --1.10353374481 --0.664247125387 --1.10354092717 --0.646989658475 --1.10355100035 --0.629732206464 --1.10356390476 --0.612474322319 --1.10357972979 --0.595216318965 --1.10359835625 --0.577957749367 --1.10361996293 --0.560698956251 --1.10364440083 --0.543439492583 --1.10365810991 --0.524227827788 --1.10364595056 --0.505017787218 --1.10362133384 --0.48775845021 --1.10359960795 --0.470499448478 --1.10358071327 --0.453241042793 --1.10356476903 --0.435982823372 --1.10355168581 --0.41872511059 --1.10354146362 --0.401467457414 --1.10353413224 --0.384210169315 --1.10352969169 --0.366952821612 --1.10352817177 --0.349695727229 --1.10352951288 --0.332438454032 --1.10353380442 --0.315181292594 --1.10354095697 --0.297923825681 --1.10355100035 --0.28066637367 --1.10356393456 --0.263408482075 --1.1035797596 --0.24615046382 --1.10359838605 --0.228891897947 --1.10361996293 --0.211633093655 --1.10364440083 --0.194373622537 --1.10365810991 --0.175161965191 --1.08650758862 --0.155948743224 --1.08648315072 --0.138689428568 --1.08646157384 --0.121430421248 --1.08644285798 --0.104172034189 --1.08642697334 --0.0869138296694 --1.08641394973 --0.0696561206132 --1.08640387655 --0.0523984795436 --1.08639666438 --0.0351412054151 --1.08639225363 --0.0178838709835 --1.08639070391 --0.000626784283665 --1.08639207482 -0.0166304835584 --1.08639630675 -0.0338876284659 --1.0864033699 -0.051145077683 --1.08641335368 -0.0684025269002 --1.08642616868 -0.0856604017317 --1.0864418745 -0.10291840136 --1.08646041155 -0.120176948607 --1.08648183942 -0.137435745448 --1.08650603891 -0.154695209115 --1.08651962877 -0.173906967044 --1.08650758862 -0.193117108196 --1.08648318052 -0.210376422852 --1.08646160364 -0.227635424584 --1.08644285798 -0.244893819094 --1.08642703295 -0.262152016163 --1.08641403914 -0.279409721494 --1.08640390635 -0.296667374671 --1.08639663458 -0.313924655319 --1.08639225363 -0.33118198812 --1.08639073372 -0.348439067602 --1.08639204502 -0.365696333349 --1.08639627695 -0.382953472436 --1.0864033699 -0.400210924447 --1.08641332388 -0.417468383908 --1.08642613888 -0.434726253152 --1.0864418745 -0.451984249055 --1.08646041155 -0.469242788851 --1.08648183942 -0.486501596868 --1.08650603891 -0.503761045635 --1.08651962876 -0.522972792387 --1.08650758862 -0.542182967067 --1.08648318052 -0.559442296624 --1.08646160364 -0.576701298356 --1.08644285798 -0.593959674239 --1.08642700315 -0.611217871308 --1.08641400933 -0.628475576639 --1.08640390635 -0.645733222365 --1.08639663458 -0.662990510464 --1.08639222383 -0.680247828364 --1.08639070391 -0.697504907847 --1.08639204502 -0.714762181044 --1.08639627695 -0.73201932013 --1.0864033699 -0.749276772142 --1.08641332388 -0.766534224153 --1.08642616868 -0.783792093396 --1.08644190431 -0.801050096751 --1.08646041155 -0.818308651447 --1.08648180962 -0.835567444563 --1.0865060091 -0.852826908231 --1.08651962876 -0.872038662434 --1.08650758862 -0.89124879241 --1.08648318052 -0.908508107066 --1.08646160364 -0.925767108798 --1.08644285798 -0.943025499583 --1.08642700315 -0.960283711553 --1.08641400933 -0.977541431785 --1.08640390635 -0.994799062609 --1.08639663458 -1.0120563209 --1.08639222383 -1.02931368351 --1.08639070391 -1.04657077789 --1.08639204502 -1.06382802129 --1.08639627695 -1.08108517528 --1.0864033699 -1.09834265709 --1.08641332388 -1.1156001091 --1.08642613888 -1.13285797834 --1.0864418745 -1.15011593699 --1.08646041155 -1.16737446189 --1.08648180962 -1.18463328481 --1.0865060091 -1.20189276338 --1.08651962876 -1.22110453248 --1.08650755882 -1.24031466246 --1.08648315072 -1.25757399202 --1.08646160364 -1.27483299375 --1.08644285798 -1.29209136963 --1.08642703295 -1.3093495965 --1.08641403914 -1.32660731673 --1.08640390635 -1.34386494756 --1.08639663458 -1.36112222076 --1.08639222383 -1.37837955356 --1.08639073372 -1.39563664794 --1.08639207482 -1.41289389133 --1.08639627695 -1.43015101552 --1.0864033401 -1.44740846753 --1.08641332388 -1.46466591954 --1.08642619848 -1.48192378879 --1.08644190431 -1.49918177724 --1.08646038175 -1.51644036174 --1.08648180962 -1.53369918466 --1.08650603891 -1.55095863343 --1.08651962877 -1.57017037273 --1.08650761843 -1.5893805027 --1.08648321033 -1.60663983226 --1.08646160364 -1.62389883399 --1.08644285798 -1.64115720988 --1.08642697334 -1.65841540694 --1.08641397953 -1.67567309737 --1.08640390635 -1.6929307282 --1.08639660477 -1.71018803119 --1.08639222383 -1.7274453938 --1.08639073372 -1.74470245838 --1.08639204502 -1.76195973158 --1.08639627695 -1.77921688557 --1.0864033699 -1.79647433758 --1.08641332388 -1.81373178959 --1.08642616868 -1.83098965883 --1.08644190431 -1.84824767709 --1.08646041155 -1.86550620198 --1.08648180962 -1.8827649653 --1.08650603891 -1.90002444387 --1.08651965857 -1.91923621297 --1.08650758862 -1.93844634295 --1.08648318052 -1.9557056725 --1.08646160364 -1.97296467423 --1.08644285798 -1.99022307992 --1.08642703295 -2.00748127699 --1.08641403914 -2.02473896742 --1.08640390635 -2.04199659824 --1.08639663458 -2.05925387144 --1.08639222383 -2.07651120424 --1.08639073372 -2.09376829863 --1.08639207482 -2.11102563143 --1.08639627695 -2.12828278542 --1.0864033699 -2.14554023743 --1.08641332388 -2.16279768944 --1.08642616868 -2.18005549908 --1.08644190431 -2.19731348753 --1.08646041155 -2.21457207203 --1.08648183942 -2.23183083534 --1.08650606871 -2.24909025431 --1.08651965857 -2.26830208302 --1.08650758862 -2.28751224279 --1.08648318052 -2.30477148294 --1.08646160364 -2.32203048468 --1.08644285798 -2.33928889036 --1.08642703295 -2.35654711724 --1.08641403914 -2.37380480766 --1.08640390635 -2.39106243849 --1.08639663458 -2.40831977129 --1.08639222383 -2.42557710409 --1.08639070391 -2.44283419847 --1.08639204502 -2.46009147167 --1.08639627695 -2.47734856606 --1.0864033699 -2.49460601807 --1.08641332388 -2.51186347008 --1.08642616868 -2.52912133932 --1.08644190431 -2.54637932777 --1.08646038175 -2.56363791227 --1.08648180962 -2.58089673519 --1.08650606871 -2.59815615416 --1.08651965857 -2.61736792326 --1.08650758862 -2.63657808304 --1.08648318052 -2.65383738279 --1.08646160364 -2.67109638452 --1.08644285798 -2.68835479021 --1.08642703295 -2.70561301708 --1.08641403914 -2.72287076712 --1.08640390635 -2.74012839794 --1.08639663458 -2.75738561153 --1.08639222383 -2.77464294433 --1.08639070391 -2.79190003872 --1.08639204502 -2.80915725231 --1.08639630675 -2.8264144063 --1.0864033997 -2.84367185831 --1.08641335368 -2.86092931032 --1.08642616868 -2.87818723917 --1.0864418745 -2.89544522762 --1.08646038175 -2.91270375252 --1.08648180962 -2.92996257543 --1.08650606871 -2.947222054 --1.08651965857 -2.9664337635 --1.08650758862 -2.98564392328 --1.08648315072 -3.00290328264 --1.08646157384 -3.02016228438 --1.08644285798 -3.03742069006 --1.08642697334 -3.05467885733 --1.08641394973 -3.07193654776 --1.08640387655 -3.08919417858 --1.08639666438 -3.10645139217 --1.08639225363 -3.12370872497 --1.08639070391 -3.14096585114 --1.08639207482 --3.12496221066 --1.08639630675 --3.10770505667 --1.0864033699 --3.09044760466 --1.08641335368 --3.07319015265 --1.08642616868 --3.0559322238 --1.0864418745 --3.03867423534 --1.08646041155 --3.02141571045 --1.08648183942 --3.00415688753 --1.08650603891 --2.98689740896 --1.08651962877 --2.96768569946 --1.08650758862 --2.94847553968 --1.08648318052 --2.93121618033 --1.08646160364 --2.91395717859 --1.08644285798 --2.89669877291 --1.08642703295 --2.87944060564 --1.08641403914 --2.86218291521 --1.08640390635 --2.84492528438 --1.08639663458 --2.82766801119 --1.08639225363 --2.81041067838 --1.08639073372 --2.79315364361 --1.08639204502 --2.7758963108 --1.08639627695 --2.75863909721 --1.0864033699 --2.7413816452 --1.08641332388 --2.72412419319 --1.08642613888 --2.70686638355 --1.0864418745 --2.6896083951 --1.08646041155 --2.6723498702 --1.08648183942 --2.65509110689 --1.08650603891 --2.63783162832 --1.08651962876 --2.61861985921 --1.08650758862 --2.59940969944 --1.08648318052 --2.58215039969 --1.08646160364 --2.56489139795 --1.08644285798 --2.54763299227 --1.08642700315 --2.53037476539 --1.08641400933 --2.51311707496 --1.08640390635 --2.49585944414 --1.08639663458 --2.47860211134 --1.08639222383 --2.46134477854 --1.08639070391 --2.44408774376 --1.08639204502 --2.42683047056 --1.08639627695 --2.40957331657 --1.0864033699 --2.39231586456 --1.08641332388 --2.37505841255 --1.08642616868 --2.35780060291 --1.08644190431 --2.34054261446 --1.08646041155 --2.32328397035 --1.08648180962 --2.30602514744 --1.0865060091 --2.28876572848 --1.08651962876 --2.26955395937 --1.08650758862 --2.2503438592 --1.08648318052 --2.23308461905 --1.08646160364 --2.21582561731 --1.08644285798 --2.19856721163 --1.08642700315 --2.18130898475 --1.08641400933 --2.16405123472 --1.08640390635 --2.14679354429 --1.08639663458 --2.12953627109 --1.08639222383 --2.11227893829 --1.08639070391 --2.09502184391 --1.08639204502 --2.07776463032 --1.08639627695 --2.06050753593 --1.0864033699 --2.04325008392 --1.08641332388 --2.02599257231 --1.08642613888 --2.00873464346 --1.0864418745 --1.99147668481 --1.08646041155 --1.97421815991 --1.08648180962 --1.956959337 --1.0865060091 --1.93969988823 --1.08651962876 --1.92048811913 --1.08650755882 --1.90127795935 --1.08648315072 --1.88401865959 --1.08646160364 --1.86675965786 --1.08644285798 --1.84950128198 --1.08642703295 --1.83224311471 --1.08641403914 --1.81498539448 --1.08640390635 --1.79772773385 --1.08639663458 --1.78047043085 --1.08639222383 --1.76321309805 --1.08639073372 --1.74595603347 --1.08639207482 --1.72869876027 --1.08639627695 --1.71144160628 --1.0864033401 --1.69418415427 --1.08641332388 --1.67692670226 --1.08642619848 --1.65966883302 --1.08644190431 --1.64241084456 --1.08646038175 --1.62515228987 --1.08648180962 --1.60789349675 --1.08650603891 --1.59063404799 --1.08651962877 --1.57142227888 --1.08650761843 --1.5522121489 --1.08648321033 --1.53495284915 --1.08646160364 --1.51769384742 --1.08644285798 --1.50043544173 --1.08642697334 --1.48317721486 --1.08641397953 --1.46591952443 --1.08640390635 --1.44866189361 --1.08639660477 --1.43140462041 --1.08639222383 --1.41414728761 --1.08639073372 --1.39689019322 --1.08639204502 --1.37963292003 --1.08639627695 --1.36237576604 --1.0864033699 --1.34511831403 --1.08641332388 --1.32786089182 --1.08642616868 --1.31060299277 --1.08644190431 --1.29334497452 --1.08646041155 --1.27608644962 --1.08648180962 --1.25882765651 --1.08650603891 --1.24156820774 --1.08651965857 --1.22235643864 --1.08650758862 --1.20314630866 --1.08648318052 --1.1858869791 --1.08646160364 --1.16862794757 --1.08644285798 --1.15136960149 --1.08642703295 --1.13411143422 --1.08641403914 --1.11685368419 --1.08640390635 --1.09959599375 --1.08639663458 --1.08233872056 --1.08639222383 --1.06508138776 --1.08639073372 --1.04782432318 --1.08639207482 --1.03056704998 --1.08639627695 --1.01330989599 --1.0864033699 --0.996052473784 --1.08641332388 --0.978795021772 --1.08642616868 --0.961537137627 --1.08644190431 --0.944279134273 --1.08646041155 --0.927020579576 --1.08648183942 --0.909761801362 --1.08650606871 --0.892502352595 --1.08651965857 --0.873290583492 --1.08650758862 --0.854080438614 --1.08648318052 --0.836821123958 --1.08646160364 --0.819562122226 --1.08644285798 --0.802303746343 --1.08642703295 --0.785045549274 --1.08641403914 --0.767787829042 --1.08640390635 --0.750530183316 --1.08639663458 --0.733272910118 --1.08639222383 --0.716015577317 --1.08639070391 --0.698758482933 --1.08639204502 --0.681501209736 --1.08639627695 --0.664244070649 --1.0864033699 --0.646986618638 --1.08641332388 --0.629729166627 --1.08642616868 --0.612471297383 --1.08644190431 --0.59521330893 --1.08646038175 --0.577954754233 --1.08648180962 --0.560695961118 --1.08650606871 --0.543436512351 --1.08651965857 --0.524224743247 --1.08650758862 --0.505014590919 --1.08648318052 --0.487755268812 --1.08646160364 --0.47049626708 --1.08644285798 --0.453237868846 --1.08642703295 --0.435979664326 --1.08641403914 --0.418721958995 --1.08640390635 --0.401464320719 --1.08639663458 --0.384207054973 --1.08639222383 --0.366949722171 --1.08639070391 --0.349692627788 --1.08639204502 --0.332435362041 --1.08639630675 --0.315178222954 --1.0864033997 --0.297920778394 --1.08641335368 --0.280663341284 --1.08642616868 --0.263405457139 --1.0864418745 --0.24614745006 --1.08646038175 --0.228888902813 --1.08648180962 --0.211630109698 --1.08650606871 --0.194370649755 --1.08651965857 --0.175158880651 --1.06934481859 --0.155945494771 --1.06932061911 --0.138686198741 --1.06929922104 --0.121427206322 --1.06928062439 --0.104168830439 --1.06926485896 --0.0869106370956 --1.06925192476 --0.0696529392153 --1.06924191118 --0.0523953102529 --1.06923475862 --0.0351380496286 --1.06923037767 --0.0178807280026 --1.06922888756 --0.000623654341323 --1.06923025846 -0.0166336006951 --1.06923443079 -0.0338907320984 --1.06924143434 -0.0511481678113 --1.06925135851 -0.0684056049213 --1.0692640841 -0.0856634695083 --1.06927964092 -0.102921456098 --1.06929799915 -0.120179986581 --1.0693192482 -0.137438770384 --1.06934329868 -0.154698215425 --1.06935676932 -0.173910092563 --1.06934484839 -0.193120356649 --1.06932064891 -0.210379656404 --1.06929922104 -0.227638643235 --1.06928062439 -0.244897022844 --1.06926488877 -0.262155205012 --1.06925201416 -0.279412895441 --1.06924197078 -0.296670533717 --1.06923475862 -0.313927799464 --1.06923040748 -0.331185132265 --1.06922888756 -0.348442211747 --1.06923019886 -0.365699455142 --1.06923440099 -0.382956571877 --1.06924143434 -0.400214008987 --1.06925132871 -0.417471453547 --1.0692640543 -0.43472931534 --1.06927964092 -0.451987296343 --1.06929799915 -0.469245821238 --1.0693192482 -0.486504621804 --1.06934326887 -0.503764078021 --1.06935673952 -0.522975936532 --1.06934481859 -0.542186185717 --1.06932061911 -0.559445500374 --1.06929922104 -0.576704502106 --1.06928062439 -0.593962877989 --1.06926491857 -0.611221075058 --1.06925201416 -0.628478765488 --1.06924194098 -0.645736381412 --1.06923475862 -0.662993654609 --1.06923037767 -0.68025097251 --1.06922885775 -0.697508022189 --1.06923022866 -0.714765265584 --1.06923446059 -0.732022404671 --1.06924146414 -0.749279856682 --1.06925132871 -0.766537278891 --1.0692640841 -0.783795148134 --1.06927967072 -0.801053166389 --1.06929799915 -0.818311706186 --1.0693192482 -0.8355704844 --1.06934326887 -0.852829933166 --1.06935673952 -0.872041806579 --1.06934484839 -0.891252055764 --1.06932064891 -0.908511340618 --1.06929922104 -0.925770327449 --1.06928062439 -0.943028718233 --1.06926488877 -0.960286900401 --1.06925201416 -0.977544605732 --1.06924197078 -0.994802266359 --1.06923475862 -1.01205950976 --1.06923037767 -1.02931681275 --1.06922885775 -1.04657390713 --1.06923022866 -1.06383118034 --1.06923443079 -1.08108830452 --1.06924143434 -1.09834572673 --1.06925132871 -1.11560317874 --1.0692640245 -1.13286104799 --1.06927961111 -1.15011900663 --1.06929799915 -1.16737753153 --1.0693192482 -1.18463632465 --1.06934326887 -1.20189580321 --1.06935673952 -1.22110769152 --1.06934481859 -1.24031791091 --1.0693205893 -1.25757721066 --1.06929919124 -1.2748362124 --1.06928062439 -1.29209458828 --1.06926488877 -1.30935278535 --1.06925201416 -1.32661047578 --1.06924197078 -1.34386810661 --1.06923475862 -1.3611253798 --1.06923037767 -1.3783827126 --1.06922885775 -1.39563977718 --1.06923019886 -1.41289699078 --1.06923440099 -1.43015411496 --1.06924140453 -1.44741156697 --1.0692512989 -1.46466901898 --1.0692640543 -1.48192688823 --1.06927964092 -1.49918484688 --1.06929799915 -1.51644340158 --1.0693192482 -1.5337022245 --1.06934329868 -1.55096164346 --1.06935679913 -1.57017347217 --1.0693448484 -1.58938375115 --1.06932061911 -1.60664308071 --1.06929922104 -1.62390205264 --1.06928062439 -1.64116042852 --1.06926488876 -1.65841862559 --1.06925201416 -1.67567631602 --1.06924197078 -1.69293394685 --1.06923472881 -1.71019119024 --1.06923037767 -1.72744849324 --1.06922888756 -1.74470558762 --1.06923022866 -1.76196286082 --1.06923443079 -1.77921998501 --1.06924143434 -1.79647740722 --1.06925132871 -1.81373485923 --1.0692640841 -1.83099272847 --1.06927967072 -1.84825071693 --1.06929799915 -1.86550924182 --1.0693192482 -1.88276800513 --1.06934329868 -1.9000274837 --1.06935676932 -1.91923937201 --1.06934484839 -1.9384495914 --1.06932064891 -1.95570889115 --1.06929922104 -1.97296789289 --1.06928062439 -1.99022626877 --1.06926488877 -2.00748449564 --1.06925201416 -2.02474218607 --1.06924197078 -2.04199975729 --1.06923475862 -2.05925697088 --1.06923037767 -2.07651430368 --1.06922888756 -2.09377139807 --1.06923022866 -2.11102867127 --1.06923440099 -2.12828588486 --1.06924143434 -2.14554333687 --1.06925132871 -2.16280072928 --1.0692640543 -2.18005853892 --1.06927964092 -2.19731652737 --1.06929799915 -2.21457505226 --1.0693192482 -2.23183381558 --1.06934329868 -2.24909329414 --1.06935676932 -2.26830518246 --1.06934481859 -2.28751546144 --1.06932061911 -2.3047747612 --1.06929922104 -2.32203376293 --1.06928062439 -2.33929210901 --1.06926488877 -2.35655027628 --1.06925198436 -2.37380796671 --1.06924194098 -2.39106559753 --1.06923475862 -2.40832293034 --1.06923037767 -2.42558026314 --1.06922885775 -2.44283735752 --1.06923022866 -2.46009463072 --1.06923443079 -2.4773517251 --1.06924143434 -2.49460911751 --1.06925132871 -2.51186656952 --1.0692640543 -2.52912449837 --1.06927964092 -2.54638242721 --1.06929799915 -2.56364095211 --1.0693192482 -2.58089977503 --1.06934329868 -2.59815913439 --1.06935676932 -2.6173710227 --1.06934481859 -2.63658130169 --1.0693205893 -2.65384060144 --1.06929919124 -2.67109960317 --1.06928062439 -2.68835800886 --1.06926491857 -2.70561623573 --1.06925201416 -2.72287392616 --1.06924194098 -2.74013155699 --1.06923475862 -2.75738877058 --1.06923037767 -2.77464604378 --1.06922885775 -2.79190313816 --1.06923022866 -2.80916041136 --1.06923443079 -2.82641750574 --1.06924143434 -2.84367495775 --1.06925135851 -2.86093240977 --1.0692640543 -2.87819027901 --1.06927961111 -2.89544826746 --1.06929799915 -2.91270679235 --1.0693192482 -2.92996555567 --1.06934329868 -2.94722503424 --1.06935676932 -2.96643692255 --1.06934481859 -2.98564714193 --1.06932061911 -3.00290644169 --1.06929922104 -3.02016544342 --1.06928062439 -3.03742384911 --1.06926485896 -3.05468201637 --1.06925192476 -3.0719397068 --1.06924191118 -3.08919733763 --1.06923475862 -3.10645455122 --1.06923037767 -3.12371188402 --1.06922888756 -3.14096901019 --1.06923025846 --3.12495905161 --1.06923443079 --3.10770195723 --1.06924143434 --3.09044450522 --1.06925135851 --3.0731870532 --1.0692640841 --3.05592918396 --1.06927964092 --3.0386711955 --1.06929799915 --3.02141267061 --1.0693192482 --3.00415384769 --1.06934329868 --2.98689436913 --1.06935676932 --2.96768254042 --1.06934484839 --2.94847226143 --1.06932064891 --2.93121296168 --1.06929922104 --2.91395401955 --1.06928062439 --2.89669561386 --1.06926488877 --2.87943744659 --1.06925201416 --2.86217975617 --1.06924197078 --2.84492212534 --1.06923475862 --2.82766491174 --1.06923040748 --2.81040757895 --1.06922888756 --2.79315048456 --1.06923019886 --2.77589321136 --1.06923440099 --2.75863605737 --1.06924143434 --2.74137860536 --1.06925132871 --2.72412115336 --1.0692640543 --2.70686334371 --1.06927964092 --2.68960535526 --1.06929799915 --2.67234683036 --1.0693192482 --2.65508806705 --1.06934326887 --2.63782858849 --1.06935673952 --2.61861670017 --1.06934481859 --2.59940642118 --1.06932061911 --2.58214712143 --1.06929922104 --2.5648881197 --1.06928062439 --2.54762977362 --1.06926491857 --2.53037160635 --1.06925201416 --2.51311391592 --1.06924194098 --2.49585628509 --1.06923475862 --2.47859895229 --1.06923037767 --2.46134161949 --1.06922885775 --2.44408464432 --1.06923022866 --2.42682743072 --1.06923446059 --2.40957021713 --1.06924146414 --2.39231276512 --1.06925132871 --2.37505537271 --1.0692640841 --2.35779750347 --1.06927967072 --2.34053951502 --1.06929799915 --2.32328093052 --1.0693192482 --2.3060221076 --1.06934326887 --2.28876274824 --1.06935673952 --2.26955085993 --1.06934484839 --2.25034058094 --1.06932064891 --2.23308134079 --1.06929922104 --2.21582233906 --1.06928062439 --2.19856393338 --1.06926488877 --2.1813057661 --1.06925201416 --2.16404801607 --1.06924197078 --2.14679032564 --1.06923475862 --2.12953311205 --1.06923037767 --2.11227583885 --1.06922885775 --2.09501874447 --1.06923022866 --2.07776147127 --1.06923443079 --2.06050437689 --1.06924143434 --2.04324692488 --1.06925132871 --2.02598947287 --1.0692640245 --2.00873160362 --1.06927961111 --1.99147361517 --1.06929799915 --1.97421509028 --1.0693192482 --1.95695629716 --1.06934326887 --1.9396968782 --1.06935673952 --1.92048501969 --1.06934481859 --1.9012747407 --1.0693205893 --1.88401544094 --1.06929919124 --1.86675646901 --1.06928062439 --1.84949809313 --1.06926488877 --1.83223989606 --1.06925201416 --1.81498217583 --1.06924197078 --1.797724545 --1.06923475862 --1.78046727181 --1.06923037767 --1.76320996881 --1.06922885775 --1.74595293403 --1.06923019886 --1.72869566083 --1.06923440099 --1.71143850684 --1.06924140453 --1.69418105483 --1.0692512989 --1.67692363262 --1.0692640543 --1.65966579318 --1.06927964092 --1.64240780473 --1.06929799915 --1.62514927984 --1.0693192482 --1.60789051652 --1.06934329868 --1.59063103795 --1.06935679913 --1.57141914964 --1.0693448484 --1.55220893025 --1.06932061911 --1.5349496305 --1.06929922104 --1.51769062877 --1.06928062439 --1.50043225289 --1.06926488876 --1.48317405582 --1.06925201416 --1.46591636539 --1.06924197078 --1.44865873456 --1.06923472881 --1.43140146136 --1.06923037767 --1.41414412856 --1.06922888756 --1.39688703418 --1.06923022866 --1.37962979079 --1.06923443079 --1.3623726666 --1.06924143434 --1.34511521458 --1.06925132871 --1.32785779237 --1.0692640841 --1.31059992314 --1.06927967072 --1.29334193468 --1.06929799915 --1.27608340979 --1.0693192482 --1.25882461667 --1.06934329868 --1.24156519771 --1.06935676932 --1.22235330939 --1.06934484839 --1.2031430304 --1.06932064891 --1.18588373065 --1.06929922104 --1.16862472892 --1.06928062439 --1.15136638284 --1.06926488877 --1.13410821557 --1.06925201416 --1.11685049534 --1.06924197078 --1.09959283471 --1.06923475862 --1.08233556152 --1.06923037767 --1.06507825852 --1.06922888756 --1.04782122373 --1.06923022866 --1.03056395054 --1.06923440099 --1.01330679655 --1.06924143434 --0.996049374343 --1.06925132871 --0.978791952133 --1.0692640543 --0.961534097791 --1.06927964092 --0.944276094437 --1.06929799915 --0.927017554641 --1.0693192482 --0.909758776426 --1.06934329868 --0.892499327659 --1.06935676932 --0.873287439346 --1.06934481859 --0.854077175259 --1.06932061911 --0.836817890406 --1.06929922104 --0.819558918476 --1.06928062439 --0.802300542593 --1.06926488877 --0.785042360425 --1.06925198436 --0.767784655094 --1.06924194098 --0.750527009368 --1.06923475862 --0.733269751072 --1.06923037767 --0.716012433171 --1.06922885775 --0.698755353689 --1.06923022866 --0.681498080492 --1.06923443079 --0.664240956306 --1.06924143434 --0.646983519196 --1.06925132871 --0.629726082087 --1.0692640543 --0.612468227744 --1.06927964092 --0.595210254192 --1.06929799915 --0.577951744199 --1.0693192482 --0.560692951083 --1.06934329868 --0.543433502317 --1.06935676932 --0.524221614003 --1.06934481859 --0.505011335015 --1.0693205893 --0.48775203526 --1.06929919124 --0.47049304843 --1.06928062439 --0.453234665096 --1.06926491857 --0.435976468027 --1.06925201416 --0.418718777597 --1.06924194098 --0.401461154223 --1.06923475862 --0.384203895927 --1.06923037767 --0.366946578026 --1.06922885775 --0.349689498544 --1.06923022866 --0.332432240248 --1.06923443079 --0.315175116062 --1.06924143434 --0.297917686403 --1.06925135851 --0.280660256743 --1.0692640543 --0.2634023875 --1.06927961111 --0.246144395321 --1.06929799915 --0.228885862976 --1.0693192482 --0.211627081037 --1.06934329868 --0.19436763227 --1.06935676932 --0.175155747682 --1.05218559504 --0.155940756202 --1.05216157436 --0.138681482524 --1.05214032531 --0.121422505006 --1.05212190748 --0.104164149612 --1.05210629106 --0.0869059786201 --1.05209347606 --0.0696482984349 --1.05208352208 --0.0523906843737 --1.05207639933 --0.0351334428414 --1.05207204819 --0.017876141239 --1.05207055807 --0.000619086902585 --1.05207189917 -0.0166381490417 --1.0520760715 -0.0338952620514 --1.05208304524 -0.0511526782066 --1.05209288001 -0.0684100948274 --1.05210548639 -0.0856679398567 --1.052120924 -0.102925909683 --1.05213913322 -0.12018442899 --1.05216020346 -0.137443196028 --1.05218407512 -0.154702618718 --1.05219742656 -0.173914667219 --1.05218556523 -0.193125095218 --1.05216154456 -0.210384372622 --1.05214032531 -0.227643344552 --1.05212190748 -0.244901698083 --1.05210629106 -0.262159861624 --1.05209353566 -0.279417544603 --1.05208358169 -0.296675160527 --1.05207639933 -0.313932403922 --1.05207204819 -0.331189714372 --1.05207055807 -0.348446771502 --1.05207186937 -0.365703999996 --1.0520760417 -0.382961109281 --1.05208304524 -0.40021853149 --1.05209288001 -0.417475953698 --1.05210548639 -0.434733793139 --1.052120924 -0.45199175924 --1.05213913322 -0.469250276685 --1.05216020346 -0.486509039998 --1.05218407512 -0.503768481314 --1.05219742656 -0.52298052609 --1.05218556523 -0.542190939188 --1.05216157437 -0.559450224042 --1.05214035511 -0.57670918107 --1.05212190748 -0.593967527151 --1.05210632086 -0.61122572422 --1.05209350586 -0.62848341465 --1.05208352208 -0.645741000772 --1.05207639933 -0.662998244166 --1.05207204819 -0.680255547166 --1.05207055807 -0.697512596846 --1.05207189917 -0.714769840241 --1.0520760715 -0.732026949525 --1.05208304524 -0.749284371733 --1.05209288001 -0.766541793942 --1.05210548639 -0.783799648285 --1.052120924 -0.801057636738 --1.05213913322 -0.818316146731 --1.05216020346 -0.835574895144 --1.05218407512 -0.852834329009 --1.05219742656 -0.872046381235 --1.05218556523 -0.891256794334 --1.05216157437 -0.908516064286 --1.05214035511 -0.925775036216 --1.05212190748 -0.943033397198 --1.05210629106 -0.960291564465 --1.05209353566 -0.977549239993 --1.05208358169 -0.99480688572 --1.05207639933 -1.01206412912 --1.05207207799 -1.02932140231 --1.05207058787 -1.04657846689 --1.05207189917 -1.06383574009 --1.0520760417 -1.08109283447 --1.05208301544 -1.09835022688 --1.05209288001 -1.11560764909 --1.05210545659 -1.13286548853 --1.05212089419 -1.15012347698 --1.05213913322 -1.16738200188 --1.05216020346 -1.18464076519 --1.05218407512 -1.20190021396 --1.05219742656 -1.22111225128 --1.05218556523 -1.24032264948 --1.05216154456 -1.25758194923 --1.05214032531 -1.27484092116 --1.05212190748 -1.29209923744 --1.05210629106 -1.30935740471 --1.05209350586 -1.32661509514 --1.05208355189 -1.34387272596 --1.05207639933 -1.36112996936 --1.05207204819 -1.37838727236 --1.05207058787 -1.39564433694 --1.05207189917 -1.41290155053 --1.0520760119 -1.43015867472 --1.05208301544 -1.44741609693 --1.05209288001 -1.46467351913 --1.05210545659 -1.48193138838 --1.05212089419 -1.49918931723 --1.05213913322 -1.51644781232 --1.05216020346 -1.53370660544 --1.05218407512 -1.5509660244 --1.05219745636 -1.57017806172 --1.05218556523 -1.58938848972 --1.05216151476 -1.60664775967 --1.05214032531 -1.6239067316 --1.05212190748 -1.64116510748 --1.05210632086 -1.65842330456 --1.05209356547 -1.67568099499 --1.05208358169 -1.69293859601 --1.05207639933 -1.71019580961 --1.05207204819 -1.7274530828 --1.05207055807 -1.74471014738 --1.05207189917 -1.76196742058 --1.0520760417 -1.77922451496 --1.05208301544 -1.79648190737 --1.05209288001 -1.81373932958 --1.05210548639 -1.83099716902 --1.052120924 -1.84825515747 --1.05213913322 -1.86551368237 --1.05216020346 -1.88277244568 --1.05218407512 -1.90003189445 --1.05219742656 -1.91924393177 --1.05218559504 -1.93845432997 --1.05216160417 -1.95571362972 --1.05214035511 -1.97297260165 --1.05212190748 -1.99023094773 --1.05210629106 -2.00748917461 --1.05209353566 -2.02474683523 --1.05208358169 -2.04200440645 --1.05207639933 -2.05926162005 --1.05207204819 -2.07651889324 --1.05207055807 -2.09377598762 --1.05207186937 -2.11103326082 --1.0520760417 -2.12829041481 --1.05208304524 -2.14554780722 --1.05209288001 -2.16280519962 --1.05210545659 -2.18006306887 --1.05212089419 -2.19732105732 --1.05213913322 -2.21457952261 --1.05216020346 -2.23183828592 --1.05218407512 -2.24909776449 --1.05219742656 -2.26830977201 --1.05218556523 -2.28752017021 --1.05216157437 -2.30477946997 --1.05214035511 -2.3220384717 --1.05212190748 -2.33929681778 --1.05210629106 -2.35655498505 --1.05209350586 -2.37381261587 --1.05208355189 -2.39107018709 --1.05207639933 -2.40832751989 --1.05207204819 -2.4255848527 --1.05207055807 -2.44284188747 --1.05207189917 -2.46009916067 --1.0520760417 -2.47735625506 --1.05208301544 -2.49461364746 --1.05209288001 -2.51187109947 --1.05210545659 -2.52912896871 --1.05212089419 -2.54638689757 --1.05213913322 -2.56364536285 --1.05216020346 -2.58090412617 --1.05218407512 -2.59816354513 --1.05219742656 -2.61737561226 --1.05218556523 -2.63658607006 --1.05216154456 -2.65384531021 --1.05214032531 -2.67110425234 --1.05212190748 -2.68836265802 --1.05210632086 -2.70562082529 --1.05209353566 -2.72287851572 --1.05208355189 -2.74013614655 --1.05207639933 -2.75739336014 --1.05207207799 -2.77465063333 --1.05207058787 -2.79190766811 --1.05207189917 -2.80916494131 --1.0520760417 -2.8264220953 --1.05208301544 -2.84367954731 --1.05209288001 -2.86093693972 --1.05210545659 -2.87819474935 --1.05212089419 -2.8954526782 --1.05213913322 -2.9127112031 --1.05216020346 -2.92996996641 --1.05218407512 -2.94722938538 --1.05219742656 -2.96644151211 --1.05218559504 -2.98565191031 --1.05216157436 -3.00291115046 --1.05214032531 -3.02017015219 --1.05212190748 -3.03742849827 --1.05210629106 -3.05468660593 --1.05209347606 -3.07194429636 --1.05208352208 -3.08920198679 --1.05207639933 -3.10645920038 --1.05207204819 -3.12371647358 --1.05207055807 -3.14097354014 --1.05207189917 --3.12495452165 --1.0520760715 --3.10769736767 --1.05208304524 --3.09043991566 --1.05209288001 --3.07318252325 --1.05210548639 --3.05592471361 --1.052120924 --3.03866678476 --1.05213913322 --3.02140825987 --1.05216020346 --3.00414943695 --1.05218407512 --2.98689001798 --1.05219742656 --2.96767795086 --1.05218556523 --2.94846749306 --1.05216154456 --2.93120825291 --1.05214032531 --2.91394931078 --1.05212190748 --2.8966909647 --1.05210629106 --2.87943279743 --1.05209353566 --2.862175107 --1.05208358169 --2.84491747618 --1.05207639933 --2.82766026258 --1.05207204819 --2.81040298939 --1.05207055807 --2.793145895 --1.05207186937 --2.7758886218 --1.0520760417 --2.75863152742 --1.05208304524 --2.74137413502 --1.05209288001 --2.72411674261 --1.05210548639 --2.70685893297 --1.052120924 --2.68960088491 --1.05213913322 --2.67234236002 --1.05216020346 --2.65508365631 --1.05218407512 --2.63782417774 --1.05219742656 --2.61861211061 --1.05218556523 --2.59940171242 --1.05216157437 --2.58214241266 --1.05214035511 --2.56488341093 --1.05212190748 --2.54762512446 --1.05210632086 --2.53036695719 --1.05209350586 --2.51310926676 --1.05208352208 --2.49585169554 --1.05207639933 --2.47859442234 --1.05207204819 --2.46133708954 --1.05207055807 --2.44408005476 --1.05207189917 --2.42682284116 --1.0520760715 --2.40956568718 --1.05208304524 --2.39230829477 --1.05209288001 --2.37505090237 --1.05210548639 --2.35779297352 --1.052120924 --2.34053498507 --1.05213913322 --2.32327651977 --1.05216020346 --2.30601775646 --1.05218407512 --2.2887583375 --1.05219742656 --2.26954627037 --1.05218556523 --2.25033587217 --1.05216157437 --2.23307663202 --1.05214035511 --2.21581763029 --1.05212190748 --2.19855922461 --1.05210629106 --2.18130105734 --1.05209353566 --2.16404336691 --1.05208358169 --2.14678573608 --1.05207639933 --2.12952852249 --1.05207207799 --2.11227124929 --1.05207058787 --2.09501421452 --1.05207189917 --2.07775694132 --1.0520760417 --2.06049984693 --1.05208301544 --2.04324239492 --1.05209288001 --2.02598494291 --1.05210545659 --2.00872713328 --1.05212089419 --1.99146914482 --1.05213913322 --1.97421064973 --1.05216020346 --1.95695191622 --1.05218407512 --1.93969249725 --1.05219742656 --1.92048045993 --1.05218556523 --1.90127000212 --1.05216154456 --1.88401073217 --1.05214032531 --1.86675179005 --1.05212190748 --1.84949341416 --1.05210629106 --1.8322352171 --1.05209350586 --1.81497752666 --1.05208355189 --1.79771992564 --1.05207639933 --1.78046268225 --1.05207204819 --1.76320537925 --1.05207058787 --1.74594834447 --1.05207189917 --1.72869110107 --1.0520760119 --1.71143397689 --1.05208301544 --1.69417655468 --1.05209288001 --1.67691913247 --1.05210545659 --1.65966132283 --1.05212089419 --1.64240336418 --1.05213913322 --1.62514483928 --1.05216020346 --1.60788607598 --1.05218407512 --1.59062662721 --1.05219745636 --1.57141458988 --1.05218556523 --1.55220419168 --1.05216151476 --1.53494489193 --1.05214032531 --1.5176858902 --1.05212190748 --1.50042754412 --1.05210632086 --1.48316940665 --1.05209356547 --1.46591174603 --1.05208358169 --1.4486541152 --1.05207639933 --1.431396842 --1.05207204819 --1.414139539 --1.05207055807 --1.39688247442 --1.05207189917 --1.37962526083 --1.0520760417 --1.36236816645 --1.05208301544 --1.34511074423 --1.05209288001 --1.32785332203 --1.05210548639 --1.31059545278 --1.052120924 --1.29333746433 --1.05213913322 --1.27607896924 --1.05216020346 --1.25882023573 --1.05218407512 --1.24156078697 --1.05219742656 --1.22234871984 --1.05218559504 --1.20313829183 --1.05216160417 --1.18587899208 --1.05214035511 --1.16862002015 --1.05212190748 --1.15136170387 --1.05210629106 --1.13410353661 --1.05209353566 --1.11684584618 --1.05208358169 --1.09958821535 --1.05207639933 --1.08233097196 --1.05207204819 --1.06507369876 --1.05207055807 --1.04781663418 --1.05207186937 --1.03055939079 --1.0520760417 --1.0133022666 --1.05208304524 --0.996044829489 --1.05209288001 --0.978787437082 --1.05210545659 --0.96152959764 --1.05212089419 --0.944271638989 --1.05213913322 --0.927013128996 --1.05216020346 --0.909754350782 --1.05218407512 --0.892494931817 --1.05219742656 --0.873282879591 --1.05218556523 --0.854072451592 --1.05216157437 --0.836813166738 --1.05214035511 --0.819554209709 --1.05212190748 --0.802295863629 --1.05210629106 --0.785037696362 --1.05209350586 --0.767780020833 --1.05208355189 --0.750522390008 --1.05207639933 --0.733265131712 --1.05207204819 --0.716007828712 --1.05207055807 --0.698750779033 --1.05207189917 --0.681493535638 --1.0520760417 --0.664236411452 --1.05208301544 --0.646978989243 --1.05209288001 --0.629721581936 --1.05210545659 --0.612463757396 --1.05212089419 --0.595205798745 --1.05213913322 --0.577947303653 --1.05216020346 --0.560688540339 --1.05218407512 --0.543429091573 --1.05219742656 --0.524217039347 --1.05218556523 --0.505006603897 --1.05216154456 --0.487747311592 --1.05214032531 --0.470488347113 --1.05212190748 --0.453230001032 --1.05210632086 --0.435971818864 --1.05209353566 --0.418714135885 --1.05208355189 --0.401456534863 --1.05207639933 --0.384199291468 --1.05207207799 --0.366941995919 --1.05207058787 --0.349684938788 --1.05207189917 --0.332427695394 --1.0520760417 --0.315170586109 --1.05208301544 --0.2979131639 --1.05209288001 --0.280655749142 --1.05210545659 --0.26339790225 --1.05212089419 --0.246139928699 --1.05213913322 --0.228881418705 --1.05216020346 --0.211622662842 --1.05218407512 --0.194363228976 --1.05219742656 --0.1751511693 --1.03506866097 --0.155935868621 --1.03504481911 --0.13867661357 --1.03502374887 --0.121417658403 --1.03500550985 --0.104159321636 --1.03499001265 --0.0869011711329 --1.03497734666 --0.0696435114369 --1.03496751189 --0.0523859178647 --1.03496044874 --0.0351286958903 --1.0349561274 --0.0178714133799 --1.03495460749 --0.00061437790282 --1.03495588899 -0.016642838018 --1.03496003151 -0.0338999317028 --1.03496697545 -0.0511573292315 --1.03497672081 -0.0684147272259 --1.03498920798 -0.0856725517661 --1.03500452637 -0.102930501104 --1.03502261639 -0.120189005509 --1.03504350781 -0.137447752058 --1.03506717086 -0.154707159847 --1.03508043289 -0.173919383436 --1.03506866097 -0.193129975349 --1.03504478931 -0.210389230401 --1.03502374887 -0.227648183703 --1.03500550985 -0.244906529784 --1.03499004245 -0.26216468215 --1.03497740627 -0.279422342777 --1.03496754169 -0.296679936349 --1.03496041894 -0.313937157393 --1.0349560976 -0.331194445491 --1.03495460749 -0.34845148027 --1.03495591879 -0.365708693862 --1.03496009111 -0.382965788245 --1.03496703505 -0.400223188102 --1.03497675061 -0.417480587959 --1.03498920798 -0.434738397598 --1.03500452637 -0.451996348798 --1.03502261639 -0.469254858792 --1.03504350781 -0.486513584852 --1.03506717086 -0.503772996366 --1.03508043289 -0.522985234857 --1.03506869077 -0.54219584167 --1.03504484892 -0.559455111623 --1.03502377868 -0.576714023948 --1.03500550985 -0.593972340226 --1.03499001265 -0.611230522394 --1.03497734666 -0.628488197923 --1.03496751189 -0.645745784044 --1.03496044874 -0.663002997637 --1.0349561274 -0.680260285735 --1.03495460749 -0.697517320514 --1.03495591879 -0.714774549008 --1.03496006131 -0.732031643391 --1.03496697545 -0.749289035797 --1.03497672081 -0.766546443105 --1.03498920798 -0.783804252744 --1.03500452637 -0.801062211394 --1.03502261639 -0.818320721388 --1.03504350781 -0.835579454899 --1.03506717086 -0.852838858962 --1.03508040309 -0.872051075101 --1.03506863117 -0.891261667013 --1.03504484892 -0.908520922065 --1.03502380848 -0.925779879093 --1.03500553966 -0.943038225174 --1.03499007225 -0.96029637754 --1.03497740627 -0.977554023266 --1.03496754169 -0.994811624289 --1.03496041894 -1.01206886769 --1.0349561274 -1.02932614088 --1.03495463729 -1.04658317566 --1.03495591879 -1.06384041905 --1.03496006131 -1.08109751344 --1.03496697545 -1.09835490584 --1.03497672081 -1.11561229825 --1.03498920798 -1.13287010789 --1.03500452637 -1.15012806654 --1.03502261639 -1.16738656163 --1.03504350781 -1.18464529514 --1.03506717086 -1.20190471411 --1.03508040309 -1.22111693025 --1.03506863117 -1.24032753706 --1.03504481911 -1.25758680701 --1.03502377868 -1.27484574914 --1.03500553966 -1.29210406542 --1.03499007225 -1.30936220288 --1.03497737646 -1.32661986351 --1.03496751189 -1.34387749434 --1.03496044874 -1.36113470793 --1.0349561274 -1.37839198113 --1.03495463729 -1.3956490457 --1.03495591879 -1.4129062593 --1.03496003151 -1.43016335368 --1.03496697545 -1.44742071628 --1.03497672081 -1.46467810869 --1.03498920798 -1.48193597794 --1.03500452637 -1.49919390678 --1.03502261639 -1.51645237207 --1.03504350781 -1.53371113539 --1.03506717086 -1.55097055435 --1.03508043289 -1.57018280029 --1.03506866097 -1.5893933773 --1.03504478931 -1.60665261745 --1.03502374887 -1.62391158938 --1.03500550985 -1.64116993546 --1.03499004245 -1.65842810273 --1.03497740627 -1.67568576336 --1.03496754169 -1.69294333458 --1.03496041894 -1.71020054818 --1.0349560976 -1.72745782137 --1.03495460749 -1.74471485615 --1.03495591879 -1.76197209954 --1.03496006131 -1.77922919393 --1.03496697545 -1.79648658633 --1.03497672081 -1.81374397874 --1.03498920798 -1.83100178838 --1.03500452637 -1.84825974703 --1.03502261639 -1.86551827192 --1.03504350781 -1.88277703523 --1.03506717086 -1.9000364244 --1.03508043289 -1.91924861073 --1.03506869077 -1.93845921755 --1.03504487872 -1.9557185173 --1.03502380848 -1.97297745943 --1.03500553966 -1.99023577571 --1.03499007225 -2.00749397278 --1.03497740627 -2.0247516036 --1.03496754169 -2.04200917482 --1.03496044874 -2.05926638842 --1.0349561274 -2.07652360201 --1.03495460749 -2.09378069639 --1.03495591879 -2.11103796959 --1.03496009111 -2.12829506397 --1.03496700525 -2.14555245638 --1.03497672081 -2.16280984878 --1.03498920798 -2.18006771803 --1.03500452637 -2.19732564688 --1.03502261639 -2.21458411217 --1.03504350781 -2.23184287548 --1.03506717086 -2.24910229444 --1.03508040309 -2.26831448078 --1.03506866097 -2.28752505779 --1.03504484892 -2.30478435755 --1.03502377868 -2.32204329967 --1.03500550985 -2.33930164575 --1.03499004245 -2.35655981302 --1.03497740627 -2.37381738424 --1.03496754169 -2.39107495546 --1.03496041894 -2.40833228827 --1.0349560976 -2.42558962107 --1.03495460749 -2.44284659624 --1.03495591879 -2.46010380983 --1.03496006131 -2.47736090422 --1.03496697545 -2.49461829662 --1.03497672081 -2.51187568903 --1.03498920798 -2.52913349867 --1.03500452637 -2.54639142752 --1.03502261639 -2.56364989281 --1.03504350781 -2.58090865612 --1.03506717086 -2.59816807508 --1.03508043289 -2.61738032103 --1.03506869077 -2.63659095764 --1.03504484892 -2.65385019779 --1.03502377868 -2.67110908031 --1.03500550985 -2.68836742639 --1.03499004245 -2.70562559366 --1.03497740627 -2.72288328409 --1.03496754169 -2.74014091492 --1.03496044874 -2.75739812851 --1.0349561572 -2.77465540171 --1.03495463729 -2.79191237688 --1.03495591879 -2.80916959047 --1.03496006131 -2.82642674446 --1.03496697545 -2.84368413687 --1.03497672081 -2.86094152927 --1.03498920798 -2.87819933891 --1.03500452637 -2.89545726776 --1.03502261639 -2.91271579266 --1.03504350781 -2.92997455597 --1.03506717086 -2.94723397494 --1.03508040309 -2.96644622087 --1.03506866097 -2.98565679788 --1.03504481911 -3.00291603804 --1.03502374887 -3.02017503977 --1.03500550985 -3.03743338585 --1.03499001265 -3.05469149351 --1.03497734666 -3.07194912434 --1.03496751189 -3.08920675516 --1.03496044874 -3.10646396875 --1.0349561274 -3.12372118235 --1.03495460749 -3.14097818931 --1.03495588899 --3.12494987249 --1.03496003151 --3.10769271851 --1.03496697545 --3.0904353261 --1.03497672081 --3.07317793369 --1.03498920798 --3.05592006445 --1.03500452637 --3.0386621356 --1.03502261639 --3.02140367031 --1.03504350781 --3.00414490699 --1.03506717086 --2.98688548803 --1.03508043289 --2.96767324209 --1.03506866097 --2.94846266508 --1.03504478931 --2.93120342493 --1.03502374887 --2.9139444232 --1.03500550985 --2.89668607712 --1.03499004245 --2.87942790985 --1.03497740627 --2.86217027903 --1.03496754169 --2.84491270781 --1.03496041894 --2.82765549421 --1.0349560976 --2.81039828062 --1.03495460749 --2.79314118624 --1.03495591879 --2.77588391304 --1.03496009111 --2.75862681866 --1.03496703505 --2.74136942625 --1.03497675061 --2.72411209345 --1.03498920798 --2.70685428381 --1.03500452637 --2.68959629535 --1.03502261639 --2.67233777046 --1.03504350781 --2.65507906675 --1.03506717086 --2.63781964779 --1.03508043289 --2.61860740185 --1.03506869077 --2.59939682484 --1.03504484892 --2.58213758469 --1.03502377868 --2.56487864256 --1.03500550985 --2.54762029648 --1.03499001265 --2.53036212921 --1.03497734666 --2.51310443878 --1.03496751189 --2.49584686756 --1.03496044874 --2.47858965397 --1.0349561274 --2.46133238077 --1.03495460749 --2.44407534599 --1.03495591879 --2.4268180728 --1.03496006131 --2.40956097841 --1.03496697545 --2.39230364561 --1.03497672081 --2.3750462532 --1.03498920798 --2.35778838396 --1.03500452637 --2.34053039551 --1.03502261639 --2.32327193022 --1.03504350781 --2.30601322651 --1.03506717086 --2.28875380755 --1.03508040309 --2.2695415616 --1.03506863117 --2.25033098459 --1.03504484892 --2.23307174444 --1.03502380848 --2.21581280231 --1.03500553966 --2.19855445623 --1.03499007225 --2.18129628897 --1.03497740627 --2.16403859854 --1.03496754169 --2.14678096771 --1.03496041894 --2.12952375412 --1.0349561274 --2.11226648092 --1.03495463729 --2.09500950575 --1.03495591879 --2.07775229216 --1.03496006131 --2.06049519777 --1.03496697545 --2.04323780536 --1.03497672081 --2.02598035336 --1.03498920798 --2.00872254372 --1.03500452637 --1.99146458507 --1.03502261639 --1.97420608997 --1.03504350781 --1.95694738626 --1.03506717086 --1.9396879673 --1.03508040309 --1.92047572136 --1.03506863117 --1.90126511455 --1.03504481911 --1.8840058744 --1.03502377868 --1.86674693227 --1.03500553966 --1.84948858619 --1.03499007225 --1.83223041892 --1.03497737646 --1.81497275829 --1.03496751189 --1.79771518707 --1.03496044874 --1.78045797348 --1.0349561274 --1.76320067048 --1.03495463729 --1.7459436357 --1.03495591879 --1.72868642211 --1.03496003151 --1.71142932772 --1.03496697545 --1.69417193532 --1.03497672081 --1.67691451311 --1.03498920798 --1.65965670347 --1.03500452637 --1.64239877462 --1.03502261639 --1.62514024973 --1.03504350781 --1.60788148642 --1.03506717086 --1.59062206745 --1.03508043289 --1.57140988111 --1.03506866097 --1.5521993041 --1.03504478931 --1.53494000435 --1.03502374887 --1.51768103242 --1.03500550985 --1.50042271614 --1.03499004245 --1.48316457867 --1.03497740627 --1.46590691805 --1.03496754169 --1.44864931703 --1.03496041894 --1.43139207363 --1.0349560976 --1.41413480043 --1.03495460749 --1.39687776565 --1.03495591879 --1.37962055206 --1.03496006131 --1.36236345768 --1.03496697545 --1.34510606527 --1.03497672081 --1.32784867287 --1.03498920798 --1.31059083343 --1.03500452637 --1.29333287477 --1.03502261639 --1.27607440949 --1.03504350781 --1.25881570578 --1.03506717086 --1.24155625701 --1.03508043289 --1.22234401107 --1.03506869077 --1.20313340425 --1.03504487872 --1.1858741343 --1.03502380848 --1.16861522198 --1.03500553966 --1.1513569057 --1.03499007225 --1.13409873843 --1.03497740627 --1.1168410778 --1.03496754169 --1.09958347678 --1.03496044874 --1.08232626319 --1.0349561274 --1.06506898999 --1.03495460749 --1.04781192541 --1.03495591879 --1.03055471182 --1.03496009111 --1.01329761744 --1.03496700525 --0.996040195227 --1.03497672081 --0.97878280282 --1.03498920798 --0.96152497828 --1.03500452637 --0.94426703453 --1.03502261639 --0.927008539439 --1.03504350781 --0.909749805927 --1.03506717086 --0.892490401864 --1.03508040309 --0.873278170824 --1.03506866097 --0.854067578912 --1.03504484892 --0.836808294058 --1.03502377868 --0.81954935193 --1.03500550985 --0.802291035652 --1.03499004245 --0.785032883287 --1.03497740627 --0.76777523756 --1.03496754169 --0.750517636537 --1.03496041894 --0.733260393143 --1.0349560976 --0.716003105044 --1.03495460749 --0.698746070265 --1.03495591879 --0.681488856673 --1.03496006131 --0.664231747389 --1.03496697545 --0.646974340081 --1.03497672081 --0.629716962576 --1.03498920798 --0.612459152937 --1.03500452637 --0.595201209188 --1.03502261639 --0.577942714095 --1.03504350781 --0.560683965683 --1.03506717086 --0.543424546718 --1.03508043289 --0.52421233058 --1.03506869077 --0.505001738667 --1.03504484892 --0.487742461264 --1.03502377868 --0.470483504236 --1.03500550985 --0.453225173056 --1.03499004245 --0.435967020691 --1.03497740627 --0.418709360063 --1.03496754169 --0.401451766491 --1.03496044874 --0.384194545448 --1.0349561572 --0.3669372648 --1.03495463729 --0.349680230022 --1.03495591879 --0.332423016429 --1.03496006131 --0.315165914595 --1.03496697545 --0.297908507288 --1.03497672081 --0.280651107431 --1.03498920798 --0.263393282891 --1.03500452637 --0.246135339141 --1.03502261639 --0.228876847774 --1.03504350781 --0.211618110537 --1.03506717086 --0.194358691573 --1.03508040309 --0.175146456808 --1.0179682672 --0.155932288617 --1.01794463396 --0.138673044741 --1.01792377234 --0.121414106339 --1.01790568232 --0.104155784473 --1.01789033413 --0.0868976470083 --1.01787778735 --0.0696400022134 --1.01786801219 --0.0523824244738 --1.01786100864 --0.0351252164692 --1.01785677671 --0.0178679479286 --1.0178552866 --0.000610925955697 --1.0178565681 -0.016646276461 --1.01786065101 -0.0339033547789 --1.01786747575 -0.0511607369408 --1.0178771317 -0.0684181218967 --1.01788952947 -0.0856759343296 --1.01790472865 -0.102933870629 --1.01792266965 -0.120192356408 --1.01794338226 -0.137451086193 --1.01796680689 -0.154710486531 --1.01797994971 -0.173922840506 --1.017968297 -0.193133555353 --1.01794463396 -0.210392799229 --1.01792377234 -0.227651741356 --1.01790568232 -0.244910072535 --1.01789036393 -0.262168213725 --1.01787781716 -0.279425859452 --1.01786801219 -0.296683430672 --1.01786097884 -0.313940629363 --1.01785674691 -0.331197910011 --1.0178552568 -0.348454937339 --1.0178565383 -0.36571212858 --1.01786068082 -0.382969200611 --1.01786753535 -0.400226585567 --1.0178771615 -0.417483970523 --1.01788952947 -0.434741772711 --1.01790469885 -0.45199970901 --1.01792263985 -0.469258196652 --1.01794338226 -0.486516915262 --1.01796680689 -0.503776319325 --1.01797994971 -0.522988677025 --1.017968297 -0.542199403047 --1.01794463396 -0.559458673001 --1.01792380214 -0.576717600226 --1.01790571213 -0.593975916505 --1.01789033413 -0.611234068871 --1.01787778735 -0.628491714597 --1.01786801219 -0.645749285817 --1.01786100864 -0.663006484508 --1.01785677671 -0.680263757706 --1.0178552866 -0.697520762682 --1.0178565979 -0.714777961374 --1.01786071062 -0.732035040855 --1.01786750555 -0.749292418361 --1.0178771019 -0.766549825668 --1.01788949967 -0.783807635307 --1.01790472865 -0.801065564156 --1.01792266965 -0.818324059248 --1.01794335246 -0.835582792759 --1.01796677708 -0.852842181921 --1.01797991991 -0.872054517269 --1.0179682672 -0.891265243292 --1.01794466376 -0.908524483442 --1.01792380214 -0.925783425569 --1.01790571213 -0.943041756749 --1.01789039373 -0.960299894213 --1.01787781716 -0.977557525039 --1.01786801219 -0.994815096259 --1.01786097884 -1.01207232475 --1.01785674691 -1.02932959795 --1.0178552568 -1.04658663273 --1.0178565383 -1.06384384632 --1.01786068082 -1.0811009109 --1.01786750555 -1.09835830331 --1.0178771317 -1.11561569571 --1.01788952947 -1.13287347555 --1.01790469885 -1.1501314044 --1.01792263985 -1.16738989949 --1.01794335246 -1.1846486032 --1.01796677708 -1.20190799236 --1.01797991991 -1.22112035751 --1.0179682672 -1.24033111334 --1.01794463396 -1.25759035349 --1.01792380214 -1.27484926581 --1.01790574193 -1.2921076119 --1.01789039373 -1.30936574936 --1.01787781716 -1.32662338019 --1.01786804199 -1.34388098121 --1.01786103844 -1.3611381948 --1.01785677671 -1.378395468 --1.0178552568 -1.39565250278 --1.01785650849 -1.41290968656 --1.01786065101 -1.43016675115 --1.01786753535 -1.44742411375 --1.0178771615 -1.46468150616 --1.01788952947 -1.4819393456 --1.01790472865 -1.49919727445 --1.01792266965 -1.51645573974 --1.01794338226 -1.53371447325 --1.01796680689 -1.55097389221 --1.01797994971 -1.57018625736 --1.017968297 -1.58939695358 --1.01794463396 -1.60665619373 --1.01792377234 -1.62391513586 --1.01790568232 -1.64117345214 --1.01789036393 -1.6584315896 --1.01787781716 -1.67568925023 --1.01786801219 -1.69294682145 --1.01786097884 -1.71020400524 --1.01785674691 -1.72746127844 --1.0178552568 -1.74471831322 --1.0178565681 -1.76197552681 --1.01786071062 -1.77923262119 --1.01786750555 -1.7964900136 --1.0178771317 -1.8137473762 --1.01788952947 -1.83100518584 --1.01790469885 -1.84826311469 --1.01792263985 -1.86552160978 --1.01794338226 -1.8827803731 --1.01796680689 -1.90003973246 --1.01797994971 -1.9192520678 --1.017968297 -1.93846282363 --1.01794466376 -1.95572209358 --1.01792380214 -1.97298103571 --1.01790571213 -1.99023932218 --1.01789039373 -2.00749745965 --1.01787781716 -2.02475512028 --1.01786804199 -2.0420126915 --1.01786103844 -2.05926984549 --1.01785677671 -2.07652705908 --1.0178552568 -2.09378415346 --1.0178565681 -2.11104136705 --1.01786071062 -2.12829846144 --1.01786753535 -2.14555591345 --1.0178771615 -2.16281324625 --1.01788952947 -2.18007105589 --1.01790469885 -2.19732898473 --1.01792263985 -2.21458745003 --1.01794335246 -2.23184621334 --1.01796677708 -2.2491055727 --1.01797991991 -2.26831787824 --1.0179682672 -2.28752863407 --1.01794466376 -2.30478793382 --1.01792383194 -2.32204687595 --1.01790571213 -2.33930516243 --1.01789036393 -2.35656327009 --1.01787781716 -2.37382090092 --1.01786801219 -2.39107847214 --1.01786097884 -2.40833574534 --1.01785674691 -2.42559307814 --1.0178552568 -2.44285005331 --1.0178565681 -2.4601072073 --1.01786071062 -2.47736430168 --1.01786750555 -2.49462169409 --1.0178771317 -2.51187902689 --1.01788952947 -2.52913683653 --1.01790469885 -2.54639476538 --1.01792263985 -2.56365329027 --1.01794338226 -2.58091205359 --1.01796680689 -2.59817141294 --1.01797994971 -2.61738377809 --1.017968297 -2.63659447431 --1.01794463396 -2.65385371446 --1.01792377234 -2.67111265659 --1.01790568232 -2.68837100267 --1.01789036393 -2.70562916994 --1.01787781716 -2.72288680077 --1.01786801219 -2.74014443159 --1.01786100864 -2.75740164518 --1.01785677671 -2.77465885878 --1.0178552568 -2.79191583395 --1.0178565681 -2.80917304754 --1.01786071062 -2.82643014192 --1.01786750555 -2.84368747473 --1.0178771317 -2.86094492674 --1.01788955927 -2.87820273638 --1.01790472865 -2.89546066522 --1.01792263985 -2.91271919012 --1.01794338226 -2.92997789383 --1.01796680689 -2.9472373128 --1.01797991991 -2.96644967795 --1.0179682672 -2.98566037417 --1.01794463396 -3.00291961432 --1.01792377234 -3.02017855644 --1.01790568232 -3.03743690252 --1.01789033413 -3.05469506979 --1.01787778735 -3.07195264101 --1.01786801219 -3.08921021223 --1.01786100864 -3.10646742583 --1.01785677671 -3.12372463942 --1.0178552866 -3.14098164638 --1.0178565681 --3.12494641542 --1.01786065101 --3.10768932104 --1.01786747575 --3.09043198824 --1.0178771317 --3.07317453623 --1.01788952947 --3.05591666698 --1.01790472865 --3.03865873814 --1.01792266965 --3.02140027285 --1.01794338226 --3.00414156914 --1.01796680689 --2.98688215018 --1.01797994971 --2.96766978503 --1.017968297 --2.9484590888 --1.01794463396 --2.93119984865 --1.01792377234 --2.91394090653 --1.01790568232 --2.89668256044 --1.01789036393 --2.87942439318 --1.01787781716 --2.86216676236 --1.01786801219 --2.84490919114 --1.01786097884 --2.82765203715 --1.01785674691 --2.81039482355 --1.0178552568 --2.79313772917 --1.0178565383 --2.77588051558 --1.01786068082 --2.7586234212 --1.01786753535 --2.74136596918 --1.0178771615 --2.72410863638 --1.01788952947 --2.70685088634 --1.01790469885 --2.6895929575 --1.01792263985 --2.67233443261 --1.01794338226 --2.65507572889 --1.01796680689 --2.63781636953 --1.01797994971 --2.61860400438 --1.017968297 --2.59939324856 --1.01794463396 --2.58213400841 --1.01792380214 --2.56487506628 --1.01790571213 --2.5476167202 --1.01789033413 --2.53035861254 --1.01787778735 --2.51310092211 --1.01786801219 --2.49584335089 --1.01786100864 --2.47858613729 --1.01785677671 --2.4613288641 --1.0178552866 --2.44407188892 --1.0178565979 --2.42681467533 --1.01786071062 --2.40955758095 --1.01786750555 --2.39230018854 --1.0178771019 --2.37504285574 --1.01788949967 --2.3577850461 --1.01790472865 --2.34052705765 --1.01792266965 --2.32326859236 --1.01794335246 --2.30600988865 --1.01796677708 --2.28875046968 --1.01797991991 --2.26953810454 --1.0179682672 --2.25032740831 --1.01794466376 --2.23306816816 --1.01792380214 --2.21580922604 --1.01790571213 --2.19855093956 --1.01789039373 --2.18129277229 --1.01787781716 --2.16403508186 --1.01786801219 --2.14677745104 --1.01786097884 --2.12952023744 --1.01785674691 --2.11226302385 --1.0178552568 --2.09500604868 --1.0178565383 --2.07774883509 --1.01786068082 --2.0604917407 --1.01786750555 --2.0432344079 --1.0178771317 --2.0259770155 --1.01788952947 --2.00871920586 --1.01790469885 --1.99146124721 --1.01792263985 --1.97420275212 --1.01794335246 --1.95694404841 --1.01796677708 --1.93968462944 --1.01797991991 --1.92047226429 --1.0179682672 --1.90126156807 --1.01794463396 --1.88400232792 --1.01792380214 --1.86674338579 --1.01790574193 --1.84948503971 --1.01789039373 --1.83222687244 --1.01787781716 --1.81496924162 --1.01786804199 --1.7977116704 --1.01786103844 --1.78045445681 --1.01785677671 --1.76319721341 --1.0178552568 --1.74594020843 --1.01785650849 --1.72868299484 --1.01786065101 --1.71142590046 --1.01786753535 --1.69416850805 --1.0178771615 --1.67691111565 --1.01788952947 --1.65965330601 --1.01790472865 --1.64239537716 --1.01792266965 --1.62513688207 --1.01794338226 --1.60787814855 --1.01796680689 --1.59061872959 --1.01797994971 --1.57140639424 --1.017968297 --1.55219569802 --1.01794463396 --1.53493642807 --1.01792377234 --1.51767748594 --1.01790568232 --1.50041919947 --1.01789036393 --1.483161062 --1.01787781716 --1.46590340137 --1.01786801219 --1.44864583015 --1.01786097884 --1.43138861656 --1.01785674691 --1.41413134337 --1.0178552568 --1.39687430859 --1.0178565681 --1.37961709499 --1.01786071062 --1.36236003041 --1.01786750555 --1.34510266781 --1.0178771317 --1.3278452754 --1.01788952947 --1.31058746576 --1.01790469885 --1.29332953691 --1.01792263985 --1.27607107163 --1.01794338226 --1.25881233811 --1.01796680689 --1.24155291915 --1.01797994971 --1.2223405838 --1.017968297 --1.20312982798 --1.01794466376 --1.18587055802 --1.01792380214 --1.1686116755 --1.01790571213 --1.15135335922 --1.01789039373 --1.13409519195 --1.01787781716 --1.11683756113 --1.01786804199 --1.09957998991 --1.01786103844 --1.08232277632 --1.01785677671 --1.06506550312 --1.0178552568 --1.04780846834 --1.0178565681 --1.03055128455 --1.01786071062 --1.01329421997 --1.01786753535 --0.996036797762 --1.0178771615 --0.978779405356 --1.01788952947 --0.961521610618 --1.01790469885 --0.944263666868 --1.01792263985 --0.927005186677 --1.01794335246 --0.909746482968 --1.01796677708 --0.892487078905 --1.01797991991 --0.873274713755 --1.0179682672 --0.854064002633 --1.01794466376 --0.836804747581 --1.01792383194 --0.819545805454 --1.01790571213 --0.802287489176 --1.01789036393 --0.785029366612 --1.01787781716 --0.767771735787 --1.01786801219 --0.750514134765 --1.01786097884 --0.733256921172 --1.01785674691 --0.715999662876 --1.0178552568 --0.698742628097 --1.0178565681 --0.681485429406 --1.01786071062 --0.664228335023 --1.01786750555 --0.646970927715 --1.0178771317 --0.629713565111 --1.01788952947 --0.612455770373 --1.01790469885 --0.595197856426 --1.01792263985 --0.577939361334 --1.01794338226 --0.56068059802 --1.01796680689 --0.543421208858 --1.01797994971 --0.52420887351 --1.017968297 --0.504998162389 --1.01794463396 --0.487738907337 --1.01792377234 --0.47047995776 --1.01790568232 --0.45322163403 --1.01789036393 --0.435963504016 --1.01787781716 --0.418705865741 --1.01786801219 --0.401448279619 --1.01786100864 --0.384191073477 --1.01785677671 --0.36693380028 --1.0178552568 --0.349676780403 --1.0178565681 --0.332419581711 --1.01786071062 --0.315162487328 --1.01786750555 --0.297905102372 --1.0178771317 --0.280647717416 --1.01788955927 --0.263389907777 --1.01790472865 --0.246131982655 --1.01792263985 --0.228873498738 --1.01794338226 --0.211614768952 --1.01796680689 --0.194355368614 --1.01797991991 --0.175143010914 --1.00084793567 --0.155928667635 --1.00082451105 --0.138669434935 --1.00080385804 --0.121410511434 --1.00078593194 --0.104152206332 --1.00077074766 --0.0868940837681 --1.00075830519 --0.0696364538744 --1.00074857473 --0.052378888242 --1.00074163079 --0.0351216932758 --1.00073745847 --0.017864440335 --1.00073601306 --0.00060743233189 --1.00073730946 -0.0166497563477 --1.00074137747 -0.0339068216272 --1.0007481128 -0.0511641893536 --1.00075764954 -0.068421558477 --1.0007699281 -0.0856793541461 --1.00078499317 -0.102937279269 --1.00080277026 -0.120195748284 --1.00082330406 -0.137454461306 --1.00084650516 -0.154713850468 --1.00085948407 -0.173926331102 --1.00084793567 -0.19313718006 --1.00082451105 -0.21039641276 --1.00080385804 -0.227655336261 --1.00078593194 -0.244913645088 --1.00077074766 -0.262171775103 --1.00075830519 -0.279429413378 --1.00074857473 -0.296686962247 --1.00074163079 -0.313944146037 --1.00073745847 -0.331201404333 --1.00073598325 -0.348458409309 --1.00073724985 -0.3657155931 --1.00074131787 -0.382972665131 --1.00074808299 -0.400230035186 --1.00075764954 -0.41748739779 --1.0007699281 -0.434745199978 --1.00078496337 -0.452003121376 --1.00080274045 -0.469261594117 --1.00082330406 -0.486520305276 --1.00084650516 -0.503779694438 --1.00085949898 -0.522992178798 --1.00084795058 -0.54220302403 --1.00082451105 -0.559462279082 --1.00080388785 -0.576721206308 --1.00078599155 -0.593979507685 --1.00077077746 -0.611237630248 --1.00075830519 -0.628495261073 --1.00074857473 -0.645752817392 --1.00074163079 -0.663010001182 --1.00073745847 -0.680267259478 --1.00073601306 -0.697524249554 --1.00073730946 -0.714781433344 --1.00074137747 -0.732038497925 --1.0007481128 -0.749295860529 --1.00075761974 -0.766553267837 --1.0007698983 -0.783811092377 --1.00078499317 -0.801068991423 --1.00080277026 -0.818327441811 --1.00082327425 -0.835586160421 --1.00084647536 -0.852845549583 --1.00085949898 -0.872058019042 --1.00084795058 -0.891268864274 --1.00082451105 -0.908528089523 --1.00080385804 -0.92578703165 --1.00078593194 -0.943045347929 --1.00077074766 -0.960303455591 --1.00075830519 -0.977561071515 --1.00074858964 -0.994818627834 --1.00074164569 -1.01207584143 --1.00073745847 -1.02933311462 --1.00073598325 -1.0465901196 --1.00073724985 -1.06384730339 --1.00074131787 -1.08110436797 --1.00074808299 -1.09836176038 --1.00075764954 -1.11561912298 --1.0007699281 -1.13287687302 --1.00078494847 -1.15013480187 --1.00080275536 -1.16739329696 --1.00082330406 -1.18465200066 --1.00084647536 -1.20191138983 --1.00085949898 -1.22112387419 --1.00084795058 -1.24033471942 --1.00082451105 -1.25759395957 --1.00080388785 -1.2748528719 --1.00078596175 -1.29211118818 --1.00077074766 -1.30936932564 --1.00075830519 -1.32662695646 --1.00074861944 -1.34388452768 --1.0007416755 -1.36114174127 --1.00073745847 -1.37839898467 --1.00073598325 -1.39565598965 --1.00073724985 -1.41291317344 --1.00074134767 -1.43017020822 --1.0007481724 -1.44742757082 --1.00075770915 -1.46468496323 --1.0007699281 -1.48194277287 --1.00078499317 -1.49920070171 --1.00080277026 -1.51645916701 --1.00082330406 -1.53371787071 --1.00084650516 -1.55097725988 --1.00085948407 -1.57018974423 --1.00084792077 -1.58940058947 --1.00082449615 -1.60665979982 --1.00080387294 -1.62391871214 --1.00078597665 -1.64117702842 --1.00077077746 -1.65843516588 --1.00075830519 -1.67569279671 --1.00074857473 -1.69295033813 --1.00074163079 -1.71020752192 --1.00073745847 -1.72746479511 --1.00073598325 -1.74472180009 --1.00073727965 -1.76197898388 --1.00074134767 -1.77923607826 --1.00074808299 -1.79649347067 --1.00075764954 -1.81375080347 --1.0007699281 -1.83100858331 --1.00078496337 -1.84826651215 --1.00080274045 -1.86552497745 --1.00082330406 -1.88278371096 --1.00084650516 -1.90004310012 --1.00085948407 -1.91925558448 --1.00084793567 -1.93846642971 --1.00082451105 -1.95572566986 --1.00080385804 -1.97298461199 --1.00078593194 -1.99024289846 --1.00077074766 -2.00750103593 --1.00075830519 -2.02475869656 --1.00074861944 -2.04201626777 --1.0007416755 -2.05927342176 --1.00073745847 -2.07653063536 --1.00073598325 -2.09378767014 --1.00073727965 -2.11104482412 --1.00074134767 -2.12830191851 --1.0007481128 -2.14555937052 --1.00075767934 -2.16281670332 --1.0007699281 -2.18007445336 --1.00078494847 -2.1973323822 --1.00080272555 -2.21459084749 --1.00082327425 -2.2318495512 --1.00084647536 -2.24910891056 --1.00085949898 -2.26832139492 --1.00084795058 -2.28753226995 --1.00082457065 -2.3047915101 --1.00080394745 -2.32205045223 --1.00078596175 -2.33930873871 --1.00077074766 -2.35656684637 --1.00075830519 -2.37382447719 --1.00074857473 -2.39108204841 --1.00074163079 -2.40833926201 --1.00073745847 -2.4255965352 --1.00073598325 -2.44285351038 --1.00073727965 -2.46011066437 --1.00074137747 -2.47736775875 --1.0007481426 -2.49462515116 --1.00075767934 -2.51188248396 --1.0007699281 -2.5291402936 --1.00078496337 -2.54639822245 --1.00080274045 -2.56365668774 --1.00082330406 -2.58091545105 --1.00084650516 -2.59817481041 --1.00085949898 -2.61738723517 --1.00084795058 -2.63659805059 --1.00082451105 -2.65385729074 --1.00080385804 -2.67111629248 --1.00078593194 -2.68837463856 --1.00077074766 -2.70563274622 --1.00075830519 -2.72289037705 --1.00074857473 -2.74014794827 --1.00074163079 -2.75740510225 --1.00073745847 -2.77466231585 --1.00073598325 -2.79191935063 --1.00073727965 -2.80917656422 --1.00074134767 -2.826433599 --1.00074808299 -2.8436909318 --1.00075764954 -2.86094838381 --1.0007699579 -2.87820619345 --1.00078499317 -2.89546406269 --1.00080274045 -2.91272258758 --1.00082330406 -2.92998129129 --1.00084653497 -2.94724065065 --1.00085951388 -2.96645313501 --1.00084793567 -2.98566401005 --1.00082451105 -3.0029232502 --1.00080385804 -3.02018213272 --1.00078593194 -3.0374404192 --1.00077074766 -3.05469852686 --1.00075830519 -3.07195615768 --1.00074857473 -3.0892137289 --1.00074163079 -3.1064709425 --1.00073745847 -3.12372821569 --1.00073601306 -3.14098522265 --1.00073730946 --3.12494289875 --1.00074137747 --3.10768586397 --1.0007481128 --3.09042853117 --1.00075764954 --3.07317107916 --1.0007699281 --3.05591326952 --1.00078499317 --3.03865540028 --1.00080277026 --3.02139687538 --1.00082330406 --3.00413817167 --1.00084650516 --2.98687881231 --1.00085948407 --2.96766626835 --1.00084793567 --2.94845539332 --1.00082451105 --2.93119621277 --1.00080385804 --2.91393733025 --1.00078593194 --2.89667898416 --1.00077074766 --2.8794208765 --1.00075830519 --2.86216324568 --1.00074857473 --2.84490567446 --1.00074163079 --2.82764852047 --1.00073745847 --2.81039124727 --1.00073598325 --2.79313421249 --1.00073724985 --2.7758770585 --1.00074131787 --2.75861996412 --1.00074808299 --2.74136251211 --1.00075764954 --2.72410517931 --1.0007699281 --2.70684748888 --1.00078496337 --2.68958956003 --1.00080274045 --2.67233103514 --1.00082330406 --2.65507239103 --1.00084650516 --2.63781303167 --1.00085949898 --2.61860048771 --1.00084795058 --2.59938961268 --1.00082451105 --2.58213037252 --1.00080388785 --2.5648714304 --1.00078599155 --2.54761314392 --1.00077077746 --2.53035503626 --1.00075830519 --2.51309740543 --1.00074857473 --2.49583983421 --1.00074163079 --2.47858262062 --1.00073745847 --2.46132534742 --1.00073601306 --2.44406837225 --1.00073730946 --2.42681121826 --1.00074137747 --2.40955412388 --1.0007481128 --2.39229673147 --1.00075761974 --2.37503939867 --1.0007698983 --2.35778158903 --1.00078499317 --2.34052366018 --1.00080277026 --2.3232652545 --1.00082327425 --2.30600649119 --1.00084647536 --2.28874707222 --1.00085949898 --2.26953464746 --1.00084795058 --2.25032383204 --1.00082451105 --2.23306459189 --1.00080385804 --2.21580559016 --1.00078593194 --2.19854730368 --1.00077074766 --2.18128919601 --1.00075830519 --2.16403156519 --1.00074858964 --2.14677399397 --1.00074164569 --2.12951678038 --1.00073745847 --2.11225956679 --1.00073598325 --2.09500259161 --1.00073724985 --2.07774537802 --1.00074131787 --2.06048828364 --1.00074808299 --2.04323095083 --1.00075764954 --2.02597361803 --1.0007699281 --2.00871580839 --1.00078494847 --1.99145781994 --1.00080275536 --1.97419935465 --1.00082330406 --1.95694065094 --1.00084647536 --1.93968126178 --1.00085949898 --1.92046877742 --1.00084795058 --1.90125793219 --1.00082451105 --1.88399872184 --1.00080388785 --1.86673980952 --1.00078596175 --1.84948146343 --1.00077074766 --1.83222329617 --1.00075830519 --1.81496566534 --1.00074861944 --1.79770812392 --1.0007416755 --1.78045094013 --1.00073745847 --1.76319369674 --1.00073598325 --1.74593669176 --1.00073724985 --1.72867947817 --1.00074134767 --1.71142241359 --1.0007481724 --1.69416505098 --1.00075770915 --1.67690765858 --1.0007699281 --1.65964984894 --1.00078499317 --1.64239194989 --1.00080277026 --1.6251334846 --1.00082330406 --1.60787478089 --1.00084650516 --1.59061539173 --1.00085948407 --1.57140290737 --1.00084792077 --1.55219209194 --1.00082449615 --1.53493285179 --1.00080387294 --1.51767390967 --1.00078597665 --1.50041562319 --1.00077077746 --1.48315751553 --1.00075830519 --1.4658998847 --1.00074857473 --1.44864231348 --1.00074163079 --1.43138509989 --1.00073745847 --1.41412782669 --1.00073598325 --1.39687082171 --1.00073727965 --1.37961363792 --1.00074134767 --1.36235657335 --1.00074808299 --1.34509921074 --1.00075764954 --1.32784184813 --1.0007699281 --1.3105840683 --1.00078496337 --1.29332613945 --1.00080274045 --1.27606767416 --1.00082330406 --1.25880894065 --1.00084650516 --1.24154955149 --1.00085948407 --1.22233709693 --1.00084793567 --1.2031262219 --1.00082451105 --1.18586695194 --1.00080385804 --1.16860803962 --1.00078593194 --1.15134975314 --1.00077074766 --1.13409161568 --1.00075830519 --1.11683398485 --1.00074861944 --1.09957641363 --1.0007416755 --1.08231922984 --1.00073745847 --1.06506198644 --1.00073598325 --1.04780495167 --1.00073727965 --1.03054779768 --1.00074134767 --1.0132907629 --1.0007481128 --0.996033355595 --1.00075767934 --0.978775963187 --1.0007699281 --0.96151818335 --1.00078494847 --0.944260269403 --1.00080272555 --0.927001804113 --1.00082327425 --0.909743100405 --1.00084647536 --0.892483711243 --1.00085949898 --0.873271211982 --1.00084795058 --0.85406036675 --1.00082457065 --0.836801156402 --1.00080394745 --0.819542229176 --1.00078596175 --0.802283912897 --1.00077074766 --0.785025805235 --1.00075830519 --0.76776817441 --1.00074857473 --0.750510573387 --1.00074163079 --0.733253389597 --1.00073745847 --0.715996146202 --1.00073598325 --0.698739126324 --1.00073727965 --0.681481957435 --1.00074137747 --0.664224892855 --1.0007481426 --0.646967500448 --1.00075767934 --0.629710137844 --1.0007699281 --0.612452358008 --1.00078496337 --0.595194444061 --1.00080274045 --0.577935948968 --1.00082330406 --0.560677200556 --1.00084650516 --0.543417826295 --1.00085949898 --0.524205371738 --1.00084795058 --0.504994533956 --1.00082451105 --0.487735293806 --1.00080385804 --0.47047636658 --1.00078593194 --0.453218057752 --1.00077074766 --0.435959935188 --1.00075830519 --0.418702311814 --1.00074857473 --0.401444748044 --1.00074163079 --0.384187556803 --1.00073745847 --0.366930298507 --1.00073598325 --0.34967328608 --1.00073727965 --0.332416094839 --1.00074134767 --0.315159022808 --1.00074808299 --0.297901652753 --1.00075764954 --0.280644282698 --1.0007699579 --0.263386487961 --1.00078499317 --0.246128574014 --1.00080274045 --0.228870108723 --1.00082330406 --0.211611393839 --1.00084653497 --0.194352008402 --1.00085951388 --0.175139524042 --0.983704805374 --0.155925001949 --0.983681619167 --0.13866578415 --0.983661144972 --0.121406877413 --0.983643382788 --0.104148585349 --0.983628362417 --0.0868904776871 --0.983616039157 --0.0696328626946 --0.983606413006 --0.0523753110319 --0.98359952867 --0.0351181295701 --0.983595371246 --0.017860890599 --0.983593940735 --0.00060389726423 --0.983595192432 -0.0166532769799 --0.983599230647 -0.033910327591 --0.983605965972 -0.0511676818133 --0.983615398407 -0.0684250378981 --0.983627542853 -0.0856828186661 --0.983642444014 -0.1029407233 --0.983660057187 -0.120199175551 --0.983680397272 -0.137457877397 --0.983703374863 -0.154717251658 --0.983716249466 -0.173929862678 --0.983704805374 -0.193140845746 --0.983681619167 -0.210400063544 --0.983661159873 -0.227658972144 --0.983643382788 -0.244917266071 --0.983628347516 -0.262175381184 --0.983616039157 -0.279432997108 --0.983606413006 -0.296690538525 --0.98359952867 -0.313947722316 --0.983595371246 -0.33120495826 --0.983593940735 -0.348461948335 --0.983595192432 -0.365719117224 --0.983599200845 -0.382976174355 --0.98360593617 -0.400233529508 --0.983615398407 -0.41749086976 --0.983627557755 -0.434748657048 --0.983642458916 -0.452006570995 --0.983660057187 -0.469265036285 --0.983680427074 -0.486523732543 --0.983703404665 -0.503783114254 --0.983716264367 -0.522995725274 --0.983704820275 -0.542206689716 --0.983681619167 -0.559465914965 --0.983661159873 -0.57672482729 --0.983643427491 -0.593983128667 --0.983628377318 -0.611241221428 --0.983616024256 -0.628498837352 --0.983606398105 -0.645756408572 --0.983599513769 -0.663013577461 --0.983595356345 -0.680270805955 --0.983593925834 -0.69752779603 --0.983595222235 -0.71478497982 --0.983599260449 -0.732042044401 --0.983605965972 -0.749299392104 --0.983615398407 -0.766556754708 --0.983627542853 -0.783814549446 --0.983642473817 -0.801072448492 --0.983660057187 -0.81833088398 --0.98368036747 -0.835589572787 --0.983703374863 -0.852848947048 --0.983716264367 -0.872061565518 --0.983704820275 -0.891272544861 --0.983681619167 -0.908531755209 --0.983661159873 -0.925790682435 --0.983643397689 -0.943048968911 --0.983628362417 -0.960307061672 --0.983616039157 -0.977564677596 --0.983606413007 -0.994822219014 --0.983599528671 -1.0120794177 --0.983595371246 -1.0293366909 --0.983593940735 -1.04659366607 --0.983595222235 -1.06385082006 --0.983599230647 -1.08110788464 --0.98360593617 -1.09836524725 --0.983615398407 -1.11562258005 --0.983627542853 -1.13288033009 --0.983642458916 -1.15013825893 --0.983660101891 -1.16739672423 --0.983680427074 -1.18465542794 --0.983703374863 -1.2019148171 --0.983716249466 -1.22112742067 --0.983704805374 -1.24033838511 --0.983681619167 -1.25759759546 --0.983661144972 -1.27485650778 --0.983643382788 -1.29211479425 --0.983628362417 -1.30937290192 --0.983616039157 -1.32663053274 --0.983606427908 -1.34388810396 --0.983599543572 -1.36114528775 --0.983595356345 -1.37840250135 --0.983593896031 -1.39565950632 --0.983595192432 -1.41291669011 --0.983599260449 -1.43017372489 --0.983605995775 -1.4474310875 --0.983615443111 -1.4646884501 --0.983627572656 -1.48194622993 --0.983642458916 -1.49920415878 --0.983660027384 -1.51646262407 --0.98368036747 -1.53372129798 --0.983703374863 -1.55098065734 --0.983716234565 -1.57019329071 --0.983704775572 -1.58940428496 --0.983681604266 -1.6066634655 --0.983661174774 -1.62392234803 --0.983643442392 -1.6411806643 --0.983628392219 -1.65843880177 --0.983616054058 -1.67569640279 --0.983606413007 -1.69295394421 --0.983599513769 -1.710211128 --0.983595356345 -1.72746837139 --0.983593925834 -1.74472534656 --0.983595222235 -1.76198250055 --0.983599230647 -1.77923956514 --0.98360593617 -1.79649692774 --0.983615398407 -1.81375429034 --0.983627557755 -1.83101207018 --0.983642488718 -1.84826996922 --0.98366008699 -1.86552840471 --0.983680427074 -1.88278710842 --0.983703404665 -1.90004649758 --0.983716234565 -1.91925910115 --0.983704790473 -1.9384700656 --0.983681619167 -1.95572930575 --0.983661159873 -1.97298824787 --0.983643397689 -1.99024653435 --0.983628362417 -2.00750464201 --0.983616039157 -2.02476227283 --0.983606413007 -2.04201984405 --0.983599528671 -2.05927699804 --0.983595356345 -2.07653421164 --0.983593925834 -2.09379118681 --0.983595222235 -2.1110483408 --0.983599230647 -2.12830543518 --0.98360593617 -2.14556282759 --0.983615398407 -2.16282016039 --0.983627557755 -2.18007791042 --0.983642473817 -2.19733583927 --0.983660072088 -2.21459430456 --0.983680397272 -2.23185294866 --0.983703374863 -2.24911230802 --0.983716264367 -2.2683249712 --0.983704820275 -2.28753596544 --0.98368164897 -2.30479520559 --0.983661189675 -2.32205408812 --0.983643397689 -2.33931237459 --0.983628362417 -2.35657048225 --0.983616039157 -2.37382805348 --0.983606398105 -2.3910856247 --0.983599513769 -2.40834283828 --0.983595356345 -2.42560011148 --0.983593925834 -2.44285708666 --0.983595222235 -2.46011424064 --0.983599260449 -2.47737127542 --0.983605995775 -2.49462860823 --0.983615428209 -2.51188594103 --0.983627542853 -2.52914375067 --0.983642444014 -2.54640167952 --0.983660057187 -2.5636600852 --0.983680397272 -2.58091884852 --0.983703374863 -2.59817820788 --0.983716264367 -2.61739075184 --0.983704820275 -2.63660174608 --0.983681619167 -2.65386098623 --0.983661159873 -2.67111992836 --0.983643397689 -2.68837821484 --0.983628362417 -2.7056363225 --0.983616039157 -2.72289395332 --0.983606398105 -2.74015152454 --0.983599513769 -2.75740867853 --0.983595356345 -2.77466589212 --0.983593925834 -2.7919229269 --0.983595222235 -2.80918008089 --0.983599230647 -2.82643711567 --0.98360593617 -2.84369450808 --0.983615413308 -2.86095190048 --0.983627557755 -2.87820965052 --0.983642473817 -2.89546746016 --0.98366008699 -2.91272598505 --0.983680397272 -2.92998474836 --0.983703404665 -2.94724410772 --0.983716279268 -2.96645665169 --0.983704805374 -2.98566764593 --0.983681619167 -3.00292688608 --0.983661144972 -3.0201857686 --0.983643382788 -3.03744405508 --0.983628362417 -3.05470210314 --0.983616039157 -3.07195979357 --0.983606413006 -3.08921736479 --0.98359952867 -3.10647451878 --0.983595371246 -3.12373179197 --0.983593940735 -3.14098879893 --0.983595192432 --3.12493938208 --0.983599230647 --3.1076823473 --0.983605965972 --3.09042495489 --0.983615398407 --3.07316756249 --0.983627542853 --3.05590981245 --0.983642444014 --3.03865200281 --0.983660057187 --3.02139347792 --0.983680397272 --3.0041347146 --0.983703374863 --2.98687535524 --0.983716249466 --2.96766275168 --0.983704805374 --2.94845175743 --0.983681619167 --2.93119257688 --0.983661159873 --2.91393369436 --0.983643382788 --2.89667534828 --0.983628347516 --2.87941730022 --0.983616039157 --2.862159729 --0.983606413006 --2.84490215778 --0.98359952867 --2.82764494419 --0.983595371246 --2.81038767099 --0.983593940735 --2.79313069582 --0.983595192432 --2.77587354183 --0.983599200845 --2.75861644745 --0.98360593617 --2.74135905504 --0.983615398407 --2.72410172224 --0.983627557755 --2.70684397221 --0.983642458916 --2.68958604336 --0.983660057187 --2.67232757807 --0.983680427074 --2.65506893396 --0.983703404665 --2.6378095746 --0.983716264367 --2.61859691143 --0.983704820275 --2.59938591718 --0.983681619167 --2.58212673664 --0.983661159873 --2.56486785412 --0.983643427491 --2.54760950804 --0.983628377318 --2.53035140037 --0.983616024256 --2.51309382915 --0.983606398105 --2.49583625793 --0.983599513769 --2.47857910395 --0.983595356345 --2.46132189035 --0.983593925834 --2.44406485558 --0.983595222235 --2.42680764198 --0.983599260449 --2.4095506072 --0.983605965972 --2.3922932744 --0.983615398407 --2.3750359416 --0.983627542853 --2.35777813196 --0.983642473817 --2.34052020311 --0.983660057187 --2.32326179743 --0.98368036747 --2.30600309372 --0.983703374863 --2.28874373436 --0.983716264367 --2.26953113079 --0.983704820275 --2.25032013655 --0.983681619167 --2.2330608964 --0.983661159873 --2.21580195427 --0.983643397689 --2.19854366779 --0.983628362417 --2.18128556013 --0.983616039157 --2.16402798891 --0.983606413007 --2.1467704773 --0.983599528671 --2.12951326371 --0.983595371246 --2.11225599051 --0.983593940735 --2.09499901533 --0.983595222235 --2.07774186135 --0.983599230647 --2.06048482657 --0.98360593617 --2.04322749376 --0.983615398407 --2.02597010136 --0.983627542853 --2.00871229172 --0.983642458916 --1.99145436287 --0.983660101891 --1.97419589758 --0.983680427074 --1.95693719387 --0.983703374863 --1.93967783451 --0.983716249466 --1.92046523094 --0.983704805374 --1.9012542367 --0.983681619167 --1.88399505615 --0.983661144972 --1.86673617363 --0.983643382788 --1.84947785735 --0.983628362417 --1.83221971989 --0.983616039157 --1.81496208906 --0.983606427908 --1.79770454764 --0.983599543572 --1.78044739366 --0.983595356345 --1.76319015026 --0.983593896031 --1.74593314528 --0.983595192432 --1.7286759615 --0.983599260449 --1.71141889691 --0.983605995775 --1.69416156411 --0.983615443111 --1.67690420151 --0.983627572656 --1.65964639187 --0.983642458916 --1.64238852263 --0.983660027384 --1.62513005733 --0.98368036747 --1.60787135362 --0.983703374863 --1.59061199427 --0.983716234565 --1.5713993907 --0.983704775572 --1.55218845606 --0.983681604266 --1.53492921591 --0.983661174774 --1.51767027378 --0.983643442392 --1.5004119873 --0.983628392219 --1.48315387964 --0.983616054058 --1.46589627862 --0.983606413007 --1.4486387372 --0.983599513769 --1.43138152361 --0.983595356345 --1.41412428021 --0.983593925834 --1.39686730504 --0.983595222235 --1.37961012125 --0.983599230647 --1.36235305667 --0.98360593617 --1.34509569406 --0.983615398407 --1.32783836126 --0.983627557755 --1.31058058143 --0.983642488718 --1.29332265258 --0.98366008699 --1.27606421709 --0.983680427074 --1.25880551339 --0.983703404665 --1.24154615402 --0.983716234565 --1.22233355046 --0.983704790473 --1.20312255621 --0.983681619167 --1.18586334586 --0.983661159873 --1.16860443354 --0.983643397689 --1.15134614706 --0.983628362417 --1.1340880394 --0.983616039157 --1.11683040857 --0.983606413007 --1.09957283735 --0.983599528671 --1.08231568337 --0.983595356345 --1.06505846977 --0.983593925834 --1.04780143499 --0.983595222235 --1.0305442512 --0.983599230647 --1.01328721643 --0.98360593617 --0.996029868722 --0.983615398407 --0.978772506118 --0.983627557755 --0.961514726281 --0.983642473817 --0.944256827235 --0.983660072088 --0.926998376846 --0.983680397272 --0.909739688039 --0.983703374863 --0.892480298877 --0.983716264367 --0.873267665505 --0.983704820275 --0.854056686163 --0.98368164897 --0.836797490716 --0.983661189675 --0.819538593292 --0.983643397689 --0.802280291915 --0.983628362417 --0.785022199154 --0.983616039157 --0.76776458323 --0.983606398105 --0.75050701201 --0.983599513769 --0.733249828219 --0.983595356345 --0.715992569923 --0.983593925834 --0.698735579848 --0.983595222235 --0.68147842586 --0.983599260449 --0.664221376181 --0.983605995775 --0.646964013577 --0.983615428209 --0.629706665873 --0.983627542853 --0.612448886037 --0.983642444014 --0.59519097209 --0.983660057187 --0.5779325068 --0.983680397272 --0.56067378819 --0.983703374863 --0.543414428831 --0.983716264367 --0.524201840163 --0.983704820275 --0.50499086082 --0.983681619167 --0.487731635571 --0.983661159873 --0.470472723246 --0.983643397689 --0.453214421868 --0.983628362417 --0.435956321657 --0.983616039157 --0.418698713183 --0.983606398105 --0.401441156864 --0.983599513769 --0.384183980524 --0.983595356345 --0.36692674458 --0.983593925834 --0.349669754505 --0.983595222235 --0.332412578166 --0.983599230647 --0.315155513585 --0.98360593617 --0.29789815098 --0.983615413308 --0.280640803277 --0.983627557755 --0.263383023441 --0.983642473817 --0.246125116944 --0.98366008699 --0.228866670281 --0.983680397272 --0.211607974023 --0.983703404665 --0.194348603487 --0.983716279268 --0.175135988742 --0.966561347246 --0.155920118094 --0.966538384557 --0.138660918921 --0.966518089175 --0.121402027086 --0.966500520706 --0.104143749923 --0.966485649347 --0.0868856590241 --0.966473430395 --0.0696280635893 --0.966463908553 --0.0523705342784 --0.96645706892 --0.0351133733056 --0.9664529562 --0.017856152961 --0.966451570392 --0.000599179416895 --0.966452807188 -0.0166579762008 --0.966456770897 -0.0339150065556 --0.966463431716 -0.0511723412201 --0.966472819448 -0.0684296805412 --0.966484874487 -0.0856874454766 --0.966499596834 -0.102945324033 --0.966517031193 -0.120203753933 --0.966537177563 -0.137462440878 --0.966559916735 -0.154721796513 --0.966572672128 -0.173934582621 --0.966561317444 -0.193145733327 --0.966538354755 -0.210404932499 --0.966518104076 -0.227663826197 --0.966500520706 -0.244922094047 --0.966485634446 -0.262180179357 --0.966473445296 -0.27943778038 --0.966463938356 -0.296695321798 --0.966457113624 -0.313952490687 --0.966452971101 -0.33120970428 --0.966451570391 -0.348466679454 --0.966452822089 -0.365723825991 --0.966456770897 -0.382980845869 --0.966463446617 -0.400238193572 --0.966472804547 -0.417495526374 --0.966484844685 -0.434753283858 --0.966499611735 -0.452011175454 --0.966517046094 -0.469269610941 --0.966537207365 -0.486528292298 --0.966559946537 -0.503787651658 --0.966572672128 -0.523000434041 --0.966561317444 -0.542211577296 --0.966538354755 -0.559470772743 --0.966518104076 -0.576729670167 --0.966500535608 -0.593987956643 --0.966485634446 -0.611246034503 --0.966473415494 -0.628503620625 --0.966463908553 -0.645761162043 --0.966457098723 -0.66301831603 --0.966452971101 -0.680275544524 --0.966451555491 -0.697532534599 --0.96645283699 -0.714789688587 --0.966456800699 -0.732046738267 --0.966463446617 -0.749304056167 --0.966472804547 -0.766561374068 --0.966484829784 -0.783819139004 --0.966499626637 -0.80107703805 --0.966517031193 -0.818335473537 --0.966537132859 -0.835594132543 --0.966559916735 -0.852853491902 --0.966572672128 -0.872066274285 --0.966561317444 -0.891277432442 --0.966538354755 -0.90853664279 --0.966518104076 -0.925795525312 --0.966500535608 -0.943053781986 --0.966485649347 -0.960311889649 --0.966473430395 -0.977569490671 --0.966463893652 -0.994827002287 --0.966457083821 -1.01208418608 --0.966452986002 -1.02934139967 --0.966451570392 -1.04659837484 --0.96645283699 -1.06385555863 --0.966456800699 -1.08111256361 --0.966463446617 -1.09836986661 --0.966472804547 -1.11562719941 --0.966484829784 -1.13288494945 --0.966499626637 -1.15014284849 --0.966517075897 -1.16740131378 --0.966537177563 -1.18466001749 --0.966559946537 -1.20191934705 --0.96657268703 -1.22113209963 --0.966561302543 -1.24034327269 --0.966538354755 -1.25760248303 --0.966518089175 -1.27486136556 --0.966500520706 -1.29211962223 --0.966485664249 -1.30937770009 --0.966473445296 -1.32663530111 --0.966463908553 -1.34389284253 --0.96645706892 -1.36114999652 --0.966452941298 -1.37840721011 --0.966451525688 -1.39566421509 --0.966452807188 -1.41292136907 --0.966456800699 -1.43017840385 --0.966463431716 -1.44743576646 --0.966472804547 -1.46469309926 --0.966484874487 -1.48195084929 --0.966499611735 -1.49920874834 --0.96651700139 -1.51646718383 --0.96653714776 -1.53372582793 --0.966559946537 -1.55098518729 --0.96657268703 -1.57019799948 --0.966561302543 -1.58940914273 --0.966538354755 -1.60666832328 --0.966518104076 -1.6239272058 --0.966500535608 -1.64118549228 --0.966485664249 -1.65844359994 --0.966473460198 -1.67570120096 --0.966463908553 -1.69295874238 --0.966457083821 -1.71021589637 --0.966452971101 -1.72747310996 --0.966451555491 -1.74473008514 --0.96645283699 -1.76198723912 --0.966456800699 -1.7792442441 --0.966463446617 -1.7965015769 --0.966472834349 -1.81375893951 --0.966484874487 -1.83101671934 --0.966499626637 -1.84827458858 --0.966517060995 -1.86553299427 --0.966537222266 -1.88279169798 --0.966559961438 -1.90005102753 --0.966572657227 -1.91926380992 --0.966561302543 -1.93847498298 --0.966538354755 -1.95573419333 --0.966518104076 -1.97299310565 --0.966500535608 -1.99025136232 --0.966485649347 -2.00750944018 --0.966473430395 -2.02476704121 --0.966463893652 -2.04202455282 --0.966457054019 -2.05928170681 --0.966452941298 -2.0765389204 --0.966451555491 -2.09379589558 --0.96645283699 -2.11105310917 --0.966456800699 -2.12831014395 --0.966463446617 -2.14556747675 --0.966472804547 -2.16282480955 --0.966484859586 -2.18008255959 --0.966499656439 -2.19734048844 --0.966517075897 -2.21459889412 --0.966537177563 -2.23185753822 --0.966559916735 -2.24911689758 --0.966572672128 -2.26832967996 --0.966561317444 -2.28754085302 --0.966538384557 -2.30480009318 --0.966518133879 -2.3220589757 --0.966500535608 -2.33931720257 --0.966485649347 -2.35657525063 --0.966473445296 -2.37383288145 --0.966463923454 -2.39109045267 --0.96645706892 -2.40834760666 --0.966452941298 -2.42560487985 --0.966451555491 -2.44286185503 --0.96645283699 -2.46011894941 --0.966456800699 -2.47737592459 --0.966463446617 -2.49463325739 --0.966472804547 -2.51189059019 --0.966484829784 -2.52914834023 --0.966499596834 -2.54640626907 --0.966517046094 -2.56366473437 --0.966537177563 -2.58092343807 --0.966559916735 -2.59818273783 --0.966572672128 -2.61739546061 --0.966561317444 -2.63660663366 --0.966538384557 -2.65386587381 --0.966518133879 -2.67112475634 --0.966500535608 -2.68838304281 --0.966485664249 -2.70564115047 --0.966473445296 -2.7228987217 --0.966463908553 -2.74015629292 --0.96645706892 -2.7574134469 --0.966452941298 -2.77467066049 --0.966451555491 -2.79192763567 --0.96645283699 -2.80918473005 --0.966456800699 -2.82644182444 --0.966463446617 -2.84369921684 --0.96647284925 -2.86095649004 --0.966484874487 -2.87821424007 --0.966499611735 -2.89547210932 --0.966517060995 -2.91273057461 --0.966537177563 -2.92998927832 --0.966559916735 -2.94724863768 --0.966572672128 -2.96646142006 --0.966561347246 -2.98567253351 --0.966538384557 -3.00293171406 --0.966518089175 -3.02019059658 --0.966500520706 -3.03744888306 --0.966485649347 -3.05470699072 --0.966473430395 -3.07196462154 --0.966463908553 -3.08922213316 --0.96645706892 -3.10647928715 --0.9664529562 -3.12373650074 --0.966451570392 -3.14099344809 --0.966452807188 --3.12493473291 --0.966456770897 --3.10767763853 --0.966463431716 --3.09042024612 --0.966472819448 --3.07316291333 --0.966484874487 --3.05590516329 --0.966499596834 --3.03864735365 --0.966517031193 --3.02138888836 --0.966537177563 --3.00413018465 --0.966559916735 --2.98687082529 --0.966572672128 --2.96765804291 --0.966561317444 --2.94844692946 --0.966538354755 --2.93118774891 --0.966518104076 --2.91392886639 --0.966500520706 --2.89667057991 --0.966485634446 --2.87941247225 --0.966473445296 --2.86215490103 --0.966463938356 --2.84489738941 --0.966457113624 --2.82764017582 --0.966452971101 --2.81038296223 --0.966451570391 --2.79312598705 --0.966452822089 --2.77586877346 --0.966456770897 --2.75861173868 --0.966463446617 --2.74135440588 --0.966472804547 --2.72409707308 --0.966484844685 --2.70683932305 --0.966499611735 --2.6895814538 --0.966517046094 --2.67232304812 --0.966537207365 --2.65506434441 --0.966559946537 --2.63780498505 --0.966572672128 --2.61859220266 --0.966561317444 --2.5993810296 --0.966538354755 --2.58212184906 --0.966518104076 --2.56486296654 --0.966500535608 --2.54760468006 --0.966485634446 --2.53034663201 --0.966473415494 --2.51308906078 --0.966463908553 --2.49583154917 --0.966457098723 --2.47857439518 --0.966452971101 --2.46131712198 --0.966451555491 --2.4440600872 --0.96645283699 --2.42680293321 --0.966456800699 --2.40954595804 --0.966463446617 --2.39228862524 --0.966472804547 --2.37503129244 --0.966484829784 --2.3577735424 --0.966499626637 --2.34051561356 --0.966517031193 --2.32325720787 --0.966537132859 --2.30599856377 --0.966559916735 --2.28873920441 --0.966572672128 --2.26952642203 --0.966561317444 --2.25031524897 --0.966538354755 --2.23305600881 --0.966518104076 --2.21579712629 --0.966500535608 --2.19853883982 --0.966485649347 --2.18128073216 --0.966473430395 --2.16402316094 --0.966463893652 --2.14676564932 --0.966457083821 --2.12950849533 --0.966452986002 --2.11225122213 --0.966451570392 --2.09499424696 --0.96645283699 --2.07773715258 --0.966456800699 --2.0604801774 --0.966463446617 --2.0432228446 --0.966472804547 --2.02596539259 --0.966484829784 --2.00870758295 --0.966499626637 --1.99144974351 --0.966517075897 --1.97419133782 --0.966537177563 --1.95693266392 --0.966559946537 --1.93967330456 --0.96657268703 --1.92046052217 --0.966561302543 --1.90124934912 --0.966538354755 --1.88399016857 --0.966518089175 --1.86673128605 --0.966500520706 --1.84947299957 --0.966485664249 --1.83221492171 --0.966473445296 --1.81495732069 --0.966463908553 --1.79769977927 --0.96645706892 --1.78044262529 --0.966452941298 --1.76318541169 --0.966451525688 --1.74592843652 --0.966452807188 --1.72867128253 --0.966456800699 --1.71141421795 --0.966463431716 --1.69415688515 --0.966472804547 --1.67689955235 --0.966484874487 --1.65964177251 --0.966499611735 --1.64238390327 --0.96651700139 --1.62512546778 --0.96653714776 --1.60786679387 --0.966559946537 --1.59060743451 --0.96657268703 --1.57139465213 --0.966561302543 --1.55218353868 --0.966538354755 --1.53492432833 --0.966518104076 --1.517665416 --0.966500535608 --1.50040712952 --0.966485664249 --1.48314902186 --0.966473460198 --1.46589145064 --0.966463908553 --1.44863393903 --0.966457083821 --1.43137675524 --0.966452971101 --1.41411954164 --0.966451555491 --1.39686256647 --0.96645283699 --1.37960541248 --0.966456800699 --1.36234840751 --0.966463446617 --1.34509107471 --0.966472834349 --1.3278337419 --0.966484874487 --1.31057596207 --0.966499626637 --1.29331806302 --0.966517060995 --1.27605962753 --0.966537222266 --1.25880092382 --0.966559961438 --1.24154159427 --0.966572657227 --1.22232881188 --0.966561302543 --1.20311763883 --0.966538354755 --1.18585848808 --0.966518104076 --1.16859960556 --0.966500535608 --1.15134131909 --0.966485649347 --1.13408324122 --0.966473430395 --1.1168256402 --0.966463893652 --1.09956809878 --0.966457054019 --1.0823109448 --0.966452941298 --1.0650537312 --0.966451555491 --1.04779672623 --0.96645283699 --1.03053954244 --0.966456800699 --1.01328250766 --0.966463446617 --0.996025189757 --0.966472804547 --0.978767871857 --0.966484859586 --0.961510121822 --0.966499656439 --0.944252222777 --0.966517075897 --0.926993787289 --0.966537177563 --0.909735113382 --0.966559916735 --0.892475739121 --0.966572672128 --0.873262971639 --0.966561317444 --0.854051813483 --0.966538384557 --0.836792588234 --0.966518133879 --0.819533720612 --0.966500535608 --0.802275463939 --0.966485649347 --0.785017386079 --0.966473445296 --0.767759785056 --0.966463923454 --0.750502243638 --0.96645706892 --0.73324508965 --0.966452941298 --0.715987861156 --0.966451555491 --0.698730885982 --0.96645283699 --0.681473731995 --0.966456800699 --0.664216697216 --0.966463446617 --0.646959349513 --0.966472804547 --0.62970200181 --0.966484829784 --0.612444251776 --0.966499596834 --0.595186367631 --0.966517046094 --0.577927917242 --0.966537177563 --0.560669243336 --0.966559916735 --0.543409898877 --0.966572672128 --0.524197116494 --0.966561317444 --0.504985973239 --0.966538384557 --0.487726770341 --0.966518133879 --0.470467865467 --0.966500535608 --0.453209586442 --0.966485664249 --0.435951516032 --0.966473445296 --0.41869392246 --0.966463908553 --0.401436381042 --0.96645706892 --0.384179219603 --0.966452941298 --0.366922006011 --0.966451555491 --0.349665038288 --0.96645283699 --0.332407876849 --0.966456800699 --0.31515083462 --0.966463446617 --0.297893486917 --0.96647284925 --0.280636161566 --0.966484874487 --0.263378411531 --0.966499611735 --0.246120516211 --0.966517060995 --0.228862080723 --0.966537177563 --0.211603403091 --0.966559916735 --0.194344051182 --0.966572672128 --0.175131268799 --0.949451312423 --0.155915070325 --0.949428588152 --0.138655889779 --0.949408501387 --0.121397012845 --0.949391126633 --0.104138758033 --0.949376374483 --0.0868806857616 --0.949364259839 --0.0696231098846 --0.949354842305 --0.0523656019941 --0.949348062277 --0.035108460579 --0.949344024062 --0.0178512609564 --0.949342653155 --0.000594307901337 --0.949343889952 -0.0166628274601 --0.949347808957 -0.0339198382571 --0.949354365468 -0.0511771533638 --0.949363678694 -0.0684344731271 --0.949375629425 -0.0856922157109 --0.949390202761 -0.102950075641 --0.949407443404 -0.12020849064 --0.949427396059 -0.137467153371 --0.949449911714 -0.154726486653 --0.949462518096 -0.173939451575 --0.94945128262 -0.19315077737 --0.949428543448 -0.210409957916 --0.949408486486 -0.227668832988 --0.94939109683 -0.244927078485 --0.949376359582 -0.262185141444 --0.949364289641 -0.279442735016 --0.949354887009 -0.296700261533 --0.949348121881 -0.313957393169 --0.949344009161 -0.33121458441 --0.949342623353 -0.348471544683 --0.949343904853 -0.36572868377 --0.949347823858 -0.382985688746 --0.949354410171 -0.400243014097 --0.949363678694 -0.417500324548 --0.949375584722 -0.43475805223 --0.949390217662 -0.452015921474 --0.949407473206 -0.46927433461 --0.949427396059 -0.486533001065 --0.949449911714 -0.503792338073 --0.949462518096 -0.523005306721 --0.94945128262 -0.542216643691 --0.94942855835 -0.559475824237 --0.949408516288 -0.576734691858 --0.949391111731 -0.593992933631 --0.949376374483 -0.61125099659 --0.949364289641 -0.628508582712 --0.949354872108 -0.645766094327 --0.949348121881 -0.663023233414 --0.949344053865 -0.680280447006 --0.949342653155 -0.697537407279 --0.949343889952 -0.714794531465 --0.949347808957 -0.732051536441 --0.94935439527 -0.749308854341 --0.949363678694 -0.766566172242 --0.949375584722 -0.783823907375 --0.949390217662 -0.801081776619 --0.949407458305 -0.818340197205 --0.949427381158 -0.835598856211 --0.949449911714 -0.852858200669 --0.949462518096 -0.872071146965 --0.94945128262 -0.891282469034 --0.94942855835 -0.908541664481 --0.949408501387 -0.925800532103 --0.94939109683 -0.943058788776 --0.949376359582 -0.960316866636 --0.94936427474 -0.977574422956 --0.949354857206 -0.994831934572 --0.949348136783 -1.01208910346 --0.949344053865 -1.02934628725 --0.949342623353 -1.04660323262 --0.949343889952 -1.06386038661 --0.949347808957 -1.08111739159 --0.94935439527 -1.09837469458 --0.949363678694 -1.11563202739 --0.949375599623 -1.13288974762 --0.949390232563 -1.15014761686 --0.949407473206 -1.16740608215 --0.949427396059 -1.18466475606 --0.949449941516 -1.20192405582 --0.949462547898 -1.22113698721 --0.94945128262 -1.24034833908 --0.949428543448 -1.25760754943 --0.949408486486 -1.27486643195 --0.94939109683 -1.29212465882 --0.949376374483 -1.30938270688 --0.949364289641 -1.3266402781 --0.949354857206 -1.34389778972 --0.949348077178 -1.3611549139 --0.94934399426 -1.37841209769 --0.949342623353 -1.39566907287 --0.949343889952 -1.41292622686 --0.949347823858 -1.43018323183 --0.94935439527 -1.44744053483 --0.949363663793 -1.46469786763 --0.949375614524 -1.48195561766 --0.949390232563 -1.49921348691 --0.949407458305 -1.51647189259 --0.949427396059 -1.5337305367 --0.949449941516 -1.55098989606 --0.949462547898 -1.57020285725 --0.94945128262 -1.58941414952 --0.949428543448 -1.60667333007 --0.949408486486 -1.62393221259 --0.94939109683 -1.64119046927 --0.949376389384 -1.65844854712 --0.949364304543 -1.67570611835 --0.949354857206 -1.69296362996 --0.94934810698 -1.71022078395 --0.949344024062 -1.72747799754 --0.949342623353 -1.74473497271 --0.949343889952 -1.7619920969 --0.949347808957 -1.77924907208 --0.94935439527 -1.79650640488 --0.949363708496 -1.81376373768 --0.949375629425 -1.83102148771 --0.949390217662 -1.84827932715 --0.949407458305 -1.86553773284 --0.94942741096 -1.88279643655 --0.949449926615 -1.9000557363 --0.949462518096 -1.9192686975 --0.94945128262 -1.93848004937 --0.94942855835 -1.95573922992 --0.949408501387 -1.97299811244 --0.94939109683 -1.99025633931 --0.949376359582 -2.00751441717 --0.94936427474 -2.02477198839 --0.949354857206 -2.0420294404 --0.949348077178 -2.05928659439 --0.94934399426 -2.07654380798 --0.949342608452 -2.09380078316 --0.949343875051 -2.11105793715 --0.949347808957 -2.12831491232 --0.94935439527 -2.14557224512 --0.949363678694 -2.16282957792 --0.949375599623 -2.18008732796 --0.949390232563 -2.19734525681 --0.949407473206 -2.21460366249 --0.949427396059 -2.2318623066 --0.949449911714 -2.24912160635 --0.949462518096 -2.26833450794 --0.94945128262 -2.28754585981 --0.949428588152 -2.30480509996 --0.949408531189 -2.32206398249 --0.94939109683 -2.33932214975 --0.949376359582 -2.35658019781 --0.949364289641 -2.37383782864 --0.949354887009 -2.39109539986 --0.949348092079 -2.40835249424 --0.94934399426 -2.42560970783 --0.949342623353 -2.44286668301 --0.949343889952 -2.46012377739 --0.949347808957 -2.47738081217 --0.949354380369 -2.49463814497 --0.949363663793 -2.51189541817 --0.949375599623 -2.5291531086 --0.949390232563 -2.54641103745 --0.949407473206 -2.56366950274 --0.949427396059 -2.58092814684 --0.949449911714 -2.59818744659 --0.949462518096 -2.61740040779 --0.94945128262 -2.63661175966 --0.949428588152 -2.65387094021 --0.949408531189 -2.67112976313 --0.94939109683 -2.6883880496 --0.949376374483 -2.70564615726 --0.949364289641 -2.72290372848 --0.949354872108 -2.7401612401 --0.949348092079 -2.75741833449 --0.94934399426 -2.77467554808 --0.949342623353 -2.79193252325 --0.949343889952 -2.80918961763 --0.949347808957 -2.82644665241 --0.94935439527 -2.84370398521 --0.949363708496 -2.86096125841 --0.949375614524 -2.87821900845 --0.94939020276 -2.89547687769 --0.949407458305 -2.91273528338 --0.949427396059 -2.92999392748 --0.949449911714 -2.94725328684 --0.949462518096 -2.96646630764 --0.949451312423 -2.98567759991 --0.949428588152 -3.00293672085 --0.949408501387 -3.02019560337 --0.949391126633 -3.03745388985 --0.949376374483 -3.05471199751 --0.949364259839 -3.07196956873 --0.949354842305 -3.08922702074 --0.949348062277 -3.10648417473 --0.949344024062 -3.12374138832 --0.949342653155 -3.14099833568 --0.949343889952 --3.12492984533 --0.949347808957 --3.10767281055 --0.949354365468 --3.09041547775 --0.949363678694 --3.07315814495 --0.949375629425 --3.05590039492 --0.949390202761 --3.03864258528 --0.949407443404 --3.02138417959 --0.949427396059 --3.00412553549 --0.949449911714 --2.98686617613 --0.949462518096 --2.96765315533 --0.94945128262 --2.94844186306 --0.949428543448 --2.93118274212 --0.949408486486 --2.9139238596 --0.94939109683 --2.89666557312 --0.949376359582 --2.87940746546 --0.949364289641 --2.86214989424 --0.949354887009 --2.84489244222 --0.949348121881 --2.82763528824 --0.949344009161 --2.81037807465 --0.949342623353 --2.79312109947 --0.949343904853 --2.77586394548 --0.949347823858 --2.75860697031 --0.949354410171 --2.74134963751 --0.949363678694 --2.72409230471 --0.949375584722 --2.70683455467 --0.949390217662 --2.68957674503 --0.949407473206 --2.67231833935 --0.949427396059 --2.65505963564 --0.949449911714 --2.63780033589 --0.949462518096 --2.61858737469 --0.94945128262 --2.59937602282 --0.94942855835 --2.58211678266 --0.949408516288 --2.56485790014 --0.949391111731 --2.54759973288 --0.949376374483 --2.53034168482 --0.949364289641 --2.5130841136 --0.949354872108 --2.49582660198 --0.949348121881 --2.478569448 --0.949344053865 --2.4613122344 --0.949342653155 --2.44405525923 --0.949343889952 --2.42679810524 --0.949347808957 --2.40954113006 --0.94935439527 --2.39228379726 --0.949363678694 --2.37502646446 --0.949375584722 --2.35776877403 --0.949390217662 --2.34051084518 --0.949407458305 --2.3232524395 --0.949427381158 --2.30599379539 --0.949449911714 --2.28873443603 --0.949462518096 --2.26952153444 --0.94945128262 --2.25031024217 --0.94942855835 --2.23305100203 --0.949408501387 --2.2157921195 --0.94939109683 --2.19853383303 --0.949376359582 --2.18127578497 --0.94936427474 --2.16401827335 --0.949354857206 --2.14676070213 --0.949348136783 --2.12950354815 --0.949344053865 --2.11224633455 --0.949342623353 --2.09498935938 --0.949343889952 --2.07773226499 --0.949347808957 --2.06047528982 --0.94935439527 --2.04321795702 --0.949363678694 --2.02596056461 --0.949375599623 --2.00870281458 --0.949390232563 --1.99144500494 --0.949407473206 --1.97418662906 --0.949427396059 --1.95692798495 --0.949449941516 --1.93966862559 --0.949462547898 --1.92045566439 --0.94945128262 --1.90124431252 --0.949428543448 --1.88398513198 --0.949408486486 --1.86672627926 --0.94939109683 --1.84946799278 --0.949376374483 --1.83220991492 --0.949364289641 --1.8149523437 --0.949354857206 --1.79769486189 --0.949348077178 --1.7804377377 --0.94934399426 --1.76318052411 --0.949342623353 --1.74592354894 --0.949343889952 --1.72866639495 --0.949347823858 --1.71140938997 --0.94935439527 --1.69415208697 --0.949363663793 --1.67689475417 --0.949375614524 --1.65963700413 --0.949390232563 --1.64237913489 --0.949407458305 --1.62512072921 --0.949427396059 --1.60786208511 --0.949449941516 --1.59060275555 --0.949462547898 --1.57138979435 --0.94945128262 --1.55217847228 --0.949428543448 --1.53491929174 --0.949408486486 --1.51766040921 --0.94939109683 --1.50040215254 --0.949376389384 --1.48314407468 --0.949364304543 --1.46588650346 --0.949354857206 --1.44862899185 --0.94934810698 --1.43137183785 --0.949344024062 --1.41411462426 --0.949342623353 --1.39685767889 --0.949343889952 --1.3796005845 --0.949347808957 --1.36234357953 --0.94935439527 --1.34508624673 --0.949363708496 --1.32782894373 --0.949375629425 --1.31057122349 --0.949390217662 --1.29331335425 --0.949407458305 --1.27605491877 --0.94942741096 --1.25879624486 --0.949449926615 --1.2415369153 --0.949462518096 --1.2223239243 --0.94945128262 --1.20311257243 --0.94942855835 --1.18585342169 --0.949408501387 --1.16859456897 --0.94939109683 --1.1513363123 --0.949376359582 --1.13407823443 --0.94936427474 --1.11682066321 --0.949354857206 --1.0995631516 --0.949348077178 --1.08230602741 --0.94934399426 --1.06504884362 --0.949342608452 --1.04779186845 --0.949343875051 --1.03053471446 --0.949347808957 --1.01327770949 --0.94935439527 --0.996020391585 --0.949363678694 --0.978763073683 --0.949375599623 --0.961505353451 --0.949390232563 --0.944247469306 --0.949407473206 --0.92698904872 --0.949427396059 --0.909730389714 --0.949449911714 --0.892471045256 --0.949462518096 --0.873258113861 --0.94945128262 --0.854046791792 --0.949428588152 --0.836787581444 --0.949408531189 --0.819528713823 --0.94939109683 --0.80227047205 --0.949376359582 --0.78501239419 --0.949364289641 --0.767754808068 --0.949354887009 --0.750497296453 --0.949348092079 --0.733240187168 --0.94934399426 --0.715982988477 --0.949342623353 --0.698726013303 --0.949343889952 --0.681468889118 --0.949347808957 --0.664211884141 --0.949354380369 --0.64695456624 --0.949363663793 --0.629697233439 --0.949375599623 --0.612439498306 --0.949390232563 --0.595181629062 --0.949407473206 --0.577923178673 --0.949427396059 --0.560664534569 --0.949449911714 --0.543405219913 --0.949462518096 --0.524192243815 --0.94945128262 --0.504980914295 --0.949428588152 --0.487721741199 --0.949408531189 --0.470462858677 --0.94939109683 --0.453204602003 --0.949376374483 --0.435946546495 --0.949364289641 --0.418688967824 --0.949354872108 --0.401431448758 --0.949348092079 --0.384174317121 --0.94934399426 --0.366917125881 --0.949342623353 --0.349660165608 --0.949343889952 --0.332403019071 --0.949347808957 --0.315145999193 --0.94935439527 --0.297888681293 --0.949363708496 --0.280631378293 --0.949375614524 --0.26337365061 --0.94939020276 --0.246115773916 --0.949407458305 --0.228857349604 --0.949427396059 --0.211598686874 --0.949449911714 --0.194339353591 --0.949462518096 --0.175126396119 --0.932354003191 --0.155911043286 --0.932331517339 --0.138651877641 --0.932311654091 --0.121393013746 --0.932294458151 --0.104134773835 --0.932279869914 --0.0868767220527 --0.93226788938 --0.0696191629395 --0.932258576155 --0.0523616690189 --0.932251900435 --0.0351045443676 --0.932247892022 --0.0178473603446 --0.932246491313 --0.000590422889217 --0.932247698307 -0.0166666964069 --0.932251617313 -0.0339236930013 --0.932258144021 -0.0511809941381 --0.932267308235 -0.068438295275 --0.932279109955 -0.0856960192323 --0.932293564081 -0.102953869849 --0.93231061101 -0.120212273672 --0.932330340147 -0.137470919639 --0.932352632284 -0.154730234295 --0.932365104556 -0.173943340778 --0.932354003191 -0.193154811859 --0.932331502438 -0.210413977504 --0.932311654091 -0.227672837675 --0.932294443249 -0.244931068272 --0.932279855013 -0.262189120054 --0.932267904282 -0.279446691275 --0.932258591056 -0.296704187989 --0.932251900435 -0.313961304724 --0.932247847319 -0.331218488515 --0.93224646151 -0.348475426435 --0.932247728109 -0.365732550621 --0.932251647115 -0.382989548147 --0.932258144021 -0.400246843696 --0.932267308235 -0.417504139245 --0.932279095054 -0.434761866928 --0.932293564081 -0.45201972127 --0.932310625911 -0.469278112054 --0.932330325246 -0.486536763608 --0.932352647185 -0.503796093166 --0.932365134358 -0.523009181023 --0.93235398829 -0.542220652104 --0.932331502438 -0.559479832649 --0.932311683893 -0.576738685369 --0.932294458151 -0.593996927142 --0.932279869914 -0.6112549752 --0.932267934084 -0.628512531519 --0.932258605957 -0.645770043135 --0.932251900435 -0.663027182221 --0.932247877121 -0.680284351111 --0.932246491313 -0.697541281581 --0.932247728109 -0.714798405767 --0.932251632214 -0.732055395841 --0.932258144021 -0.749312713742 --0.932267323136 -0.766570016742 --0.932279095054 -0.783827736974 --0.932293578982 -0.801085576415 --0.932310640812 -0.818343952298 --0.932330340147 -0.835602611303 --0.932352632284 -0.852861940861 --0.932365089655 -0.872075036168 --0.93235398829 -0.891286492348 --0.932331517339 -0.908545672894 --0.932311654091 -0.925804540515 --0.932294428348 -0.943062767386 --0.932279855013 -0.960320815444 --0.932267904282 -0.977578371763 --0.932258591056 -0.994835883379 --0.932251930237 -1.01209300756 --0.932247877121 -1.02935019135 --0.932246476412 -1.04660710692 --0.932247713208 -1.06386423111 --0.932251602411 -1.08112126589 --0.932258144021 -1.09837856889 --0.932267323136 -1.11563587188 --0.932279109955 -1.13289356232 --0.932293578982 -1.15015143156 --0.932310625911 -1.16740986705 --0.932330340147 -1.18466851115 --0.932352632284 -1.20192781091 --0.932365104556 -1.22114089131 --0.93235398829 -1.24035236239 --0.932331487537 -1.25761154294 --0.93231163919 -1.27487042546 --0.932294428348 -1.29212865233 --0.932279855013 -1.30938670039 --0.932267904282 -1.32664427161 --0.932258591056 -1.34390175343 --0.932251900435 -1.36115884781 --0.932247847319 -1.3784160316 --0.93224646151 -1.39567297697 --0.932247698307 -1.41293010115 --0.932251617312 -1.43018707633 --0.932258144021 -1.44744434953 --0.932267308235 -1.46470168233 --0.932279109955 -1.48195943236 --0.932293593883 -1.49921727181 --0.932310640812 -1.51647567749 --0.932330340147 -1.53373432159 --0.932352662087 -1.55099365115 --0.932365134358 -1.57020676136 --0.932354003191 -1.58941820264 --0.932331502438 -1.60667735338 --0.93231163919 -1.6239362061 --0.932294428348 -1.64119443298 --0.932279869914 -1.65845248104 --0.932267919183 -1.67571005225 --0.932258591056 -1.69296756387 --0.932251915336 -1.71022471786 --0.93224786222 -1.72748190165 --0.93224646151 -1.74473884702 --0.932247728109 -1.7619959414 --0.932251632214 -1.77925291657 --0.932258144021 -1.79651024938 --0.932267323136 -1.81376755237 --0.932279109955 -1.83102527261 --0.932293578982 -1.84828311205 --0.932310640812 -1.86554151773 --0.932330355048 -1.88280019164 --0.932352632284 -1.9000594914 --0.932365089655 -1.9192725718 --0.932353973388 -1.93848407269 --0.93233153224 -1.95574325323 --0.932311698794 -1.97300210595 --0.932294443249 -1.99026033282 --0.932279855013 -2.00751835108 --0.932267904282 -2.0247759223 --0.932258591056 -2.04203343391 --0.932251900435 -2.0592905283 --0.932247847319 -2.07654768228 --0.932246446609 -2.09380465746 --0.932247713208 -2.11106181145 --0.932251632214 -2.12831878662 --0.93225812912 -2.14557605982 --0.932267308235 -2.16283333302 --0.932279095054 -2.18009114265 --0.932293564081 -2.1973490715 --0.932310625911 -2.21460741758 --0.932330325246 -2.23186606169 --0.932352617383 -2.24912536144 --0.932365104556 -2.26833838225 --0.93235398829 -2.28754985332 --0.93233153224 -2.30480909347 --0.932311698794 -2.322067976 --0.932294443249 -2.33932614326 --0.932279855013 -2.35658419132 --0.932267904282 -2.37384176254 --0.932258591056 -2.39109927416 --0.932251900435 -2.40835636854 --0.932247847319 -2.42561358213 --0.93224646151 -2.44287055731 --0.932247728109 -2.46012765169 --0.932251632214 -2.47738468647 --0.932258114219 -2.49464201927 --0.932267293334 -2.51189929247 --0.932279109955 -2.5291569829 --0.932293578982 -2.54641485214 --0.932310625911 -2.56367325783 --0.932330340147 -2.58093190193 --0.932352632284 -2.59819120169 --0.932365104556 -2.6174043417 --0.93235398829 -2.63661581278 --0.932331502438 -2.65387493372 --0.932311668992 -2.67113375664 --0.932294443249 -2.68839204311 --0.932279855013 -2.70565015077 --0.932267904282 -2.72290766239 --0.932258591056 -2.7401651144 --0.932251900435 -2.75742226839 --0.932247832417 -2.77467948198 --0.932246446609 -2.79193639755 --0.932247698307 -2.80919349194 --0.932251602411 -2.82645046711 --0.93225812912 -2.84370779991 --0.932267308235 -2.86096513271 --0.932279095054 -2.87822282314 --0.932293564081 -2.89548063278 --0.932310640812 -2.91273903847 --0.932330355048 -2.92999768257 --0.932352632284 -2.94725704193 --0.932365104556 -2.96647018194 --0.932354003191 -2.98568165302 --0.932331517339 -3.00294077396 --0.932311654091 -3.02019959688 --0.932294458151 -3.03745788336 --0.932279869914 -3.05471593142 --0.93226788938 -3.07197350264 --0.932258576155 -3.08923101425 --0.932251900435 -3.10648810864 --0.932247892022 -3.12374526262 --0.932246491313 -3.14100220998 --0.932247698307 --3.12492597103 --0.932251617313 --3.10766899586 --0.932258144021 --3.09041166305 --0.932267308235 --3.07315433025 --0.932279109955 --3.05589663982 --0.932293564081 --3.03863883019 --0.93231061101 --3.0213804245 --0.932330340147 --3.00412178039 --0.932352632284 --2.98686242104 --0.932365104556 --2.96764928103 --0.932354003191 --2.94843780994 --0.932331502438 --2.931178689 --0.932311654091 --2.91391986609 --0.932294443249 --2.89666157961 --0.932279855013 --2.87940353155 --0.932267904282 --2.86214596033 --0.932258591056 --2.84488844871 --0.932251900435 --2.82763135433 --0.932247847319 --2.81037420035 --0.93224646151 --2.79311728478 --0.932247728109 --2.77586013079 --0.932251647115 --2.75860309601 --0.932258144021 --2.74134582281 --0.932267308235 --2.72408854962 --0.932279095054 --2.70683079958 --0.932293564081 --2.68957293034 --0.932310625911 --2.67231452465 --0.932330325246 --2.65505588055 --0.932352647185 --2.63779658079 --0.932365134358 --2.61858350039 --0.93235398829 --2.5993720293 --0.932331502438 --2.58211278915 --0.932311683893 --2.56485390663 --0.932294458151 --2.54759573937 --0.932279869914 --2.53033769131 --0.932267934084 --2.51308012008 --0.932258605957 --2.49582260847 --0.932251900435 --2.47856551409 --0.932247877121 --2.4613083601 --0.932246491313 --2.44405138493 --0.932247728109 --2.42679423094 --0.932251632214 --2.40953725576 --0.932258144021 --2.39227992296 --0.932267323136 --2.37502259016 --0.932279095054 --2.35776489973 --0.932293578982 --2.34050703049 --0.932310640812 --2.3232486844 --0.932330340147 --2.3059900403 --0.932352632284 --2.28873068094 --0.932365089655 --2.26951760053 --0.93235398829 --2.25030618906 --0.932331517339 --2.23304700851 --0.932311654091 --2.21578812599 --0.932294428348 --2.19852989912 --0.932279855013 --2.18127185106 --0.932267904282 --2.16401433945 --0.932258591056 --2.14675682783 --0.932251930237 --2.12949961424 --0.932247877121 --2.11224240065 --0.932246476412 --2.09498548508 --0.932247713208 --2.07772839069 --0.932251602411 --2.06047141552 --0.932258144021 --2.04321408272 --0.932267323136 --2.02595674992 --0.932279109955 --2.00869905949 --0.932293578982 --1.99144124985 --0.932310625911 --1.97418284416 --0.932330340147 --1.95692420006 --0.932352632284 --1.9396648705 --0.932365104556 --1.92045176029 --0.93235398829 --1.90124028921 --0.932331487537 --1.88398113847 --0.93231163919 --1.86672228575 --0.932294428348 --1.84946399927 --0.932279855013 --1.83220595122 --0.932267904282 --1.8149484098 --0.932258591056 --1.79769092798 --0.932251900435 --1.78043380379 --0.932247847319 --1.76317662001 --0.93224646151 --1.74591967464 --0.932247698307 --1.72866252064 --0.932251617312 --1.71140554547 --0.932258144021 --1.69414827228 --0.932267308235 --1.67689096928 --0.932279109955 --1.65963321924 --0.932293593883 --1.64237535 --0.932310640812 --1.62511697412 --0.932330340147 --1.60785833001 --0.932352662087 --1.59059903026 --0.932365134358 --1.57138594985 --0.932354003191 --1.55217444897 --0.932331502438 --1.53491526842 --0.93231163919 --1.5176564157 --0.932294428348 --1.50039818883 --0.932279869914 --1.48314014077 --0.932267919183 --1.46588256955 --0.932258591056 --1.44862505794 --0.932251915336 --1.43136793375 --0.93224786222 --1.41411074996 --0.93224646151 --1.39685383439 --0.932247728109 --1.37959674001 --0.932251632214 --1.36233970523 --0.932258144021 --1.34508237243 --0.932267323136 --1.32782509923 --0.932279109955 --1.3105674088 --0.932293578982 --1.29330953956 --0.932310640812 --1.27605113387 --0.932330355048 --1.25879251957 --0.932352632284 --1.24153319001 --0.932365089655 --1.22232005 --0.932353973388 --1.20310857892 --0.93233153224 --1.18584939838 --0.932311698794 --1.16859054565 --0.932294443249 --1.15133231878 --0.932279855013 --1.13407424092 --0.932267904282 --1.1168166697 --0.932258591056 --1.09955918789 --0.932251900435 --1.08230209351 --0.932247847319 --1.06504490972 --0.932246446609 --1.04778796434 --0.932247713208 --1.03053084015 --0.932251632214 --1.01327386498 --0.93225812912 --0.996016576888 --0.932267308235 --0.978759258985 --0.932279095054 --0.961501523852 --0.932293564081 --0.944243654609 --0.932310625911 --0.926985263824 --0.932330325246 --0.909726634622 --0.932352617383 --0.892467319965 --0.932365104556 --0.873254224658 --0.93235398829 --0.854042753577 --0.93233153224 --0.836783587933 --0.932311698794 --0.819524720311 --0.932294443249 --0.802266478538 --0.932279855013 --0.785008430481 --0.932267904282 --0.767750874162 --0.932258591056 --0.750493377447 --0.932251900435 --0.733236253262 --0.932247847319 --0.715979069472 --0.93224646151 --0.6987221241 --0.932247728109 --0.681465014816 --0.932251632214 --0.66420802474 --0.932258114219 --0.646950721741 --0.932267293334 --0.62969340384 --0.932279109955 --0.612435683608 --0.932293578982 --0.595177844167 --0.932310625911 --0.57791942358 --0.932330340147 --0.560660779476 --0.932352632284 --0.54340146482 --0.932365104556 --0.52418833971 --0.93235398829 --0.504976868629 --0.932331502438 --0.487717725337 --0.932311668992 --0.470458872616 --0.932294443249 --0.453200623393 --0.932279855013 --0.435942575336 --0.932267904282 --0.418685011566 --0.932258591056 --0.401427514851 --0.932251900435 --0.384170405566 --0.932247832417 --0.366913221776 --0.932246446609 --0.349656276405 --0.932247698307 --0.332399152219 --0.932251602411 --0.315142147243 --0.93225812912 --0.297884851694 --0.932267308235 --0.280627563596 --0.932279095054 --0.263369843364 --0.932293564081 --0.246111989021 --0.932310640812 --0.228853579611 --0.932330355048 --0.211594931781 --0.932352632284 --0.194335617125 --0.932365104556 --0.175122514367 --0.915237620473 --0.155906971544 --0.915215358138 --0.1386478208 --0.915195703507 --0.121388973668 --0.915178701282 --0.104130748659 --0.915164276958 --0.0868727136403 --0.915152445436 --0.069615171291 --0.915143221617 --0.0523576904088 --0.915136620402 --0.0351005820557 --0.915132641792 --0.017843414098 --0.915131226182 --0.00058649247512 --0.915132433176 -0.0166706107557 --0.915136337281 -0.0339275919832 --0.915142804385 -0.0511848777533 --0.915151849389 -0.068442161195 --0.915163531899 -0.0856998711825 --0.915177851915 -0.102957706898 --0.915194705129 -0.120216092095 --0.915214195847 -0.13747472316 --0.915236234665 -0.154734026641 --0.915248572826 -0.173947274685 --0.915237575769 -0.193158887327 --0.915215328336 -0.21041803807 --0.915195718408 -0.22767688334 --0.915178716183 -0.244935099036 --0.915164276958 -0.262193135918 --0.915152445436 -0.279450684786 --0.915143221617 -0.296708159149 --0.915136605501 -0.313965275883 --0.915132626891 -0.331222444773 --0.915131241083 -0.348479352892 --0.915132477879 -0.365736454725 --0.915136352182 -0.38299343735 --0.915142774582 -0.400250717998 --0.91515186429 -0.417508013547 --0.9151635468 -0.434765733779 --0.915177837014 -0.452023565769 --0.915194690228 -0.469281941652 --0.915214166045 -0.486540570855 --0.915236249566 -0.503799878061 --0.915248602629 -0.523013114929 --0.915237560868 -0.542224720121 --0.915215313435 -0.559483870864 --0.915195718408 -0.576742723584 --0.91517868638 -0.594000965357 --0.915164247155 -0.611258998513 --0.915152460337 -0.62851652503 --0.915143251419 -0.645774006844 --0.915136620402 -0.663031131029 --0.915132626891 -0.680288299918 --0.915131241083 -0.697545215487 --0.915132477879 -0.714802324772 --0.915136352182 -0.732059314847 --0.915142789483 -0.749316602945 --0.915151849389 -0.766573876142 --0.915163502097 -0.783831596374 --0.915177837014 -0.801089420914 --0.91519472003 -0.818347766995 --0.915214195847 -0.835606396198 --0.915236234665 -0.852865710855 --0.915248557925 -0.872078970075 --0.915237560868 -0.891290590167 --0.915215328336 -0.908549755812 --0.915195703507 -0.925808578729 --0.915178671479 -0.943066775799 --0.915164247155 -0.960324823856 --0.915152415633 -0.977582380176 --0.915143191814 -0.994839876889 --0.915136605501 -1.01209697127 --0.915132626891 -1.02935412526 --0.915131255984 -1.04661104083 --0.915132462978 -1.06386816501 --0.915136322379 -1.08112516999 --0.915142789483 -1.09838244319 --0.915151849389 -1.11563971639 --0.915163502097 -1.13289740682 --0.915177822113 -1.15015524626 --0.915194690228 -1.16741365194 --0.915214180946 -1.18467229605 --0.915236234665 -1.2019315958 --0.915248572826 -1.22114482522 --0.915237560868 -1.24035641551 --0.915215328336 -1.25761556625 --0.915195718408 -1.27487441897 --0.915178701282 -1.29213264585 --0.915164276958 -1.3093906939 --0.915152445436 -1.32664823532 --0.915143236518 -1.34390568733 --0.915136605501 -1.36116281151 --0.91513261199 -1.37842002511 --0.915131226182 -1.39567694068 --0.915132433176 -1.41293403506 --0.915136322379 -1.43019098043 --0.915142789483 -1.44744825363 --0.915151879192 -1.46470558643 --0.915163531899 -1.48196330666 --0.915177837014 -1.4992211163 --0.91519472003 -1.51647949219 --0.91521422565 -1.53373813629 --0.91523629427 -1.55099743605 --0.91524861753 -1.57021069527 --0.915237620473 -1.58942231536 --0.915215373039 -1.6066814363 --0.915195718408 -1.62394025922 --0.915178701282 -1.64119848609 --0.915164276958 -1.65845653415 --0.915152445436 -1.67571407557 --0.915143221617 -1.69297155738 --0.915136620402 -1.71022868156 --0.915132641792 -1.72748583555 --0.915131241083 -1.74474275112 --0.915132477879 -1.7619998455 --0.915136352182 -1.77925682068 --0.915142789483 -1.79651412368 --0.915151849389 -1.81377139687 --0.915163516998 -1.83102908731 --0.915177837014 -1.84828692675 --0.91519472003 -1.86554533243 --0.915214240551 -1.88280397654 --0.915236264467 -1.90006327629 --0.915248557925 -1.91927650571 --0.915237545967 -1.9384881556 --0.915215343237 -1.95574733615 --0.91519574821 -1.97300612926 --0.91517868638 -1.99026432633 --0.915164247155 -2.00752234459 --0.915152445436 -2.02477991581 --0.915143236518 -2.04203742742 --0.915136620402 -2.05929452181 --0.915132626891 -2.0765516758 --0.915131241083 -2.09380859137 --0.915132477879 -2.11106574535 --0.915136352182 -2.12832272053 --0.915142774582 -2.14557993412 --0.915151834488 -2.16283720732 --0.915163502097 -2.18009495735 --0.915177822113 -2.19735282659 --0.915194690228 -2.21461117268 --0.915214166045 -2.23186981678 --0.915236219764 -2.24912917614 --0.915248572826 -2.26834237576 --0.915237560868 -2.28755396605 --0.915215343237 -2.30481314659 --0.91519574821 -2.32207202911 --0.915178716183 -2.33933019638 --0.915164276958 -2.35658824444 --0.915152445436 -2.37384581566 --0.915143236518 -2.39110326767 --0.915136620402 -2.40836036205 --0.915132626891 -2.42561751604 --0.915131241083 -2.44287449121 --0.915132477879 -2.4601315856 --0.915136352182 -2.47738856077 --0.915142774582 -2.49464589357 --0.91515186429 -2.51190316677 --0.915163531899 -2.5291608572 --0.915177822113 -2.54641866684 --0.915194705129 -2.56367707252 --0.91521422565 -2.58093571663 --0.915236264467 -2.59819495678 --0.915248572826 -2.617408216 --0.915237560868 -2.63661980629 --0.915215313435 -2.65387892723 --0.915195718408 -2.67113780975 --0.91517868638 -2.68839609623 --0.915164247155 -2.70565414429 --0.915152445436 -2.7229115963 --0.915143236518 -2.74016904831 --0.915136620402 -2.7574262619 --0.91513261199 -2.77468341589 --0.915131226182 -2.79194027186 --0.915132448077 -2.80919736624 --0.915136322379 -2.82645434141 --0.915142774582 -2.84371167422 --0.91515186429 -2.86096894741 --0.9151635468 -2.87822663784 --0.915177837014 -2.89548450708 --0.915194705129 -2.91274291277 --0.91521422565 -2.93000149727 --0.915236264467 -2.94726079702 --0.915248587728 -2.96647405624 --0.915237620473 -2.98568570614 --0.915215358138 -3.00294488668 --0.915195703507 -3.02020365 --0.915178701282 -3.03746187687 --0.915164276958 -3.05471992493 --0.915152445436 -3.07197749615 --0.915143221617 -3.08923500776 --0.915136620402 -3.10649210215 --0.915132641792 -3.12374925613 --0.915131226182 -3.14100614388 --0.915132433176 --3.12492209673 --0.915136337281 --3.10766512155 --0.915142804385 --3.09040778875 --0.915151849389 --3.07315051556 --0.915163531899 --3.05589282513 --0.915177851915 --3.03863495588 --0.915194705129 --3.0213765502 --0.915214195847 --3.0041179657 --0.915236234665 --2.98685866594 --0.915248572826 --2.96764540672 --0.915237575769 --2.94843375683 --0.915215328336 --2.93117457628 --0.915195718408 --2.91391581297 --0.915178716183 --2.8966575861 --0.915164276958 --2.87939953804 --0.915152445436 --2.86214196682 --0.915143221617 --2.8448844552 --0.915136605501 --2.82762736082 --0.915132626891 --2.81037020683 --0.915131241083 --2.79311335087 --0.915132477879 --2.77585619688 --0.915136352182 --2.7585991621 --0.915142774582 --2.74134194851 --0.91515186429 --2.72408467531 --0.9151635468 --2.70682698488 --0.915177837014 --2.68956911564 --0.915194690228 --2.67231070995 --0.915214166045 --2.65505206585 --0.915236249566 --2.63779270649 --0.915248602629 --2.61857950687 --0.915237560868 --2.59936791658 --0.915215313435 --2.58210873604 --0.915195718408 --2.56484985352 --0.91517868638 --2.54759168625 --0.915164247155 --2.5303336978 --0.915152460337 --2.51307612657 --0.915143251419 --2.49581867456 --0.915136620402 --2.47856158018 --0.915132626891 --2.46130436659 --0.915131241083 --2.44404739141 --0.915132477879 --2.42679029703 --0.915136352182 --2.40953332186 --0.915142789483 --2.39227598905 --0.915151849389 --2.37501871586 --0.915163502097 --2.35776102543 --0.915177837014 --2.34050321579 --0.91519472003 --2.32324492931 --0.915214195847 --2.30598628521 --0.915236234665 --2.28872692585 --0.915248557925 --2.26951366663 --0.915237560868 --2.25030207634 --0.915215328336 --2.2330429554 --0.915195703507 --2.21578407288 --0.915178671479 --2.19852584601 --0.915164247155 --2.18126779795 --0.915152415633 --2.16401028633 --0.915143191814 --2.14675283432 --0.915136605501 --2.12949568033 --0.915132626891 --2.11223852635 --0.915131255984 --2.09498161078 --0.915132462978 --2.07772451639 --0.915136322379 --2.06046754122 --0.915142789483 --2.04321020842 --0.915151849389 --2.02595293522 --0.915163502097 --2.00869524479 --0.915177822113 --1.99143740535 --0.915194690228 --1.97417902947 --0.915214180946 --1.95692038536 --0.915236234665 --1.93966108561 --0.915248572826 --1.92044782639 --0.915237560868 --1.90123620629 --0.915215328336 --1.88397708535 --0.915195718408 --1.86671823263 --0.915178701282 --1.84945997596 --0.915164276958 --1.8322019577 --0.915152445436 --1.81494444609 --0.915143236518 --1.79768696427 --0.915136605501 --1.78042984009 --0.91513261199 --1.7631726861 --0.915131226182 --1.74591577053 --0.915132433176 --1.72865864634 --0.915136322379 --1.71140167117 --0.915142789483 --1.69414439797 --0.915151879192 --1.67688712478 --0.915163531899 --1.65962937474 --0.915177837014 --1.6423715055 --0.91519472003 --1.62511315942 --0.91521422565 --1.60785454512 --0.91523629427 --1.59059524536 --0.91524861753 --1.57138201594 --0.915237620473 --1.55217036605 --0.915215373039 --1.5349111855 --0.915195718408 --1.51765236258 --0.915178701282 --1.50039416552 --0.915164276958 --1.48313614726 --0.915152445436 --1.46587857604 --0.915143221617 --1.44862106442 --0.915136620402 --1.43136397004 --0.915132641792 --1.41410681605 --0.915131241083 --1.39684990048 --0.915132477879 --1.3795928061 --0.915136352182 --1.36233580112 --0.915142789483 --1.34507849812 --0.915151849389 --1.32782122493 --0.915163516998 --1.3105635345 --0.915177837014 --1.29330569505 --0.91519472003 --1.27604728937 --0.915214240551 --1.25878867507 --0.915236264467 --1.24152940512 --0.915248557925 --1.22231614589 --0.915237545967 --1.2031045258 --0.915215343237 --1.18584537506 --0.91519574821 --1.16858652234 --0.91517868638 --1.15132829547 --0.915164247155 --1.13407024741 --0.915152445436 --1.116812706 --0.915143236518 --1.09955522418 --0.915136620402 --1.08229809999 --0.915132626891 --1.06504094601 --0.915131241083 --1.04778406024 --0.915132477879 --1.03052696586 --0.915136352182 --1.01326999068 --0.915142774582 --0.996012702584 --0.915151834488 --0.978755399584 --0.915163502097 --0.961497679353 --0.915177822113 --0.944239839912 --0.915194690228 --0.926981464029 --0.915214166045 --0.909722834826 --0.915236219764 --0.892463520169 --0.915248572826 --0.87325027585 --0.915237560868 --0.854038655758 --0.915215343237 --0.836779519916 --0.91519574821 --0.819520696997 --0.915178716183 --0.802262470126 --0.915164276958 --0.785004422068 --0.915152445436 --0.767746880651 --0.915143236518 --0.750489383936 --0.915136620402 --0.73323225975 --0.915132626891 --0.715975120664 --0.915131241083 --0.698718205094 --0.915132477879 --0.68146109581 --0.915136352182 --0.664204120636 --0.915142774582 --0.646946832538 --0.91515186429 --0.629689529538 --0.915163531899 --0.612431839108 --0.915177822113 --0.595174014568 --0.915194705129 --0.577915608883 --0.91521422565 --0.560656994581 --0.915236264467 --0.543397694826 --0.915248572826 --0.524184405803 --0.915237560868 --0.504972793162 --0.915215313435 --0.487713672221 --0.915195718408 --0.470454834401 --0.91517868638 --0.453196600079 --0.915164247155 --0.435938566923 --0.915152445436 --0.418681025505 --0.915143236518 --0.401423543692 --0.915136620402 --0.384166434407 --0.91513261199 --0.366909258067 --0.915131226182 --0.349652342498 --0.915132448077 --0.332395248115 --0.915136322379 --0.31513826549 --0.915142774582 --0.297880977392 --0.91515186429 --0.280623696744 --0.9151635468 --0.263365991414 --0.915177837014 --0.246108151972 --0.915194705129 --0.228849761188 --0.91521422565 --0.211591131985 --0.915236264467 --0.194331828505 --0.915248587728 --0.17511858046 --0.898099437356 --0.155902843923 --0.898077428341 --0.138643704355 --0.898058012128 --0.121384879574 --0.898041203618 --0.10412667878 --0.898026928306 --0.0868686567992 --0.898015245795 --0.0696111302823 --0.898006126285 --0.0523536670953 --0.897999584675 --0.0350965731777 --0.897995680571 --0.0178394222166 --0.897994309664 --0.000582517357543 --0.897995501757 -0.0166745693423 --0.897999316454 -0.0339315324091 --0.898005694151 -0.0511888004839 --0.89801466465 -0.0684460690245 --0.89802621305 -0.0857037641108 --0.898040354252 -0.1029615812 --0.898057028651 -0.12021994777 --0.898076310754 -0.137478563935 --0.898098126054 -0.154737856239 --0.898110315203 -0.173951249569 --0.898099392652 -0.193163003773 --0.898077428341 -0.210422139615 --0.89805804193 -0.227680966258 --0.898041203618 -0.244939163327 --0.898026928306 -0.262197189033 --0.898015230894 -0.279454723001 --0.898006111383 -0.296712182462 --0.897999569774 -0.313969284296 --0.897995650768 -0.331226430833 --0.897994294762 -0.348483324051 --0.897995516657 -0.365740418434 --0.897999316454 -0.382997386158 --0.898005694151 -0.400254659355 --0.898014709354 -0.417511940002 --0.898026242852 -0.434769622981 --0.898040354252 -0.452027440071 --0.898057028651 -0.469285815954 --0.898076310754 -0.486544430256 --0.898098111153 -0.50380371511 --0.898110300302 -0.523017093539 --0.898099392652 -0.542228847742 --0.898077398539 -0.559487983584 --0.898058027029 -0.576746821404 --0.898041188717 -0.594005033374 --0.898026898503 -0.611263051629 --0.898015230894 -0.628520578146 --0.898006141186 -0.645778030157 --0.897999614477 -0.66303512454 --0.89799566567 -0.680292278528 --0.897994294762 -0.697549179196 --0.897995501757 -0.714806273579 --0.897999316454 -0.732063248753 --0.898005694151 -0.749320521951 --0.89801466465 -0.766577780247 --0.898026198149 -0.783835470676 --0.898040339351 -0.801093280315 --0.898057043552 -0.818351641297 --0.898076325655 -0.835610255599 --0.898098111153 -0.852869540453 --0.898110300302 -0.872082948685 --0.898099392652 -0.89129473269 --0.898077398539 -0.908553868532 --0.898058012128 -0.925812661648 --0.898041173816 -0.943070858717 --0.898026898503 -0.960328891873 --0.898015201092 -0.97758641839 --0.898006081581 -0.994843900204 --0.897999584675 -1.01210099458 --0.89799566567 -1.02935811877 --0.897994294762 -1.04661503434 --0.897995516657 -1.06387212872 --0.897999331355 -1.0811290741 --0.898005709052 -1.09838634729 --0.898014679551 -1.11564362049 --0.898026198149 -1.13290131092 --0.898040339351 -1.15015912056 --0.89805701375 -1.16741749644 --0.898076295853 -1.18467614055 --0.898098111153 -1.2019354403 --0.898110285401 -1.22114881873 --0.898099377751 -1.24036055803 --0.89807741344 -1.25761967897 --0.898058027029 -1.27487850189 --0.898041203618 -1.29213672877 --0.898026928306 -1.30939474702 --0.898015230894 -1.32665225864 --0.898006141186 -1.34390971065 --0.897999584675 -1.36116683483 --0.897995635867 -1.37842401862 --0.897994294763 -1.39568090439 --0.897995501757 -1.41293799877 --0.897999301553 -1.43019494415 --0.898005709053 -1.44745218754 --0.898014724255 -1.46470949053 --0.898026227951 -1.48196718096 --0.898040339351 -1.49922499061 --0.898057028651 -1.51648336649 --0.898076340556 -1.53374198079 --0.898098140955 -1.55100125074 --0.898110315203 -1.57021465897 --0.898099437356 -1.58942642808 --0.898077443242 -1.60668554902 --0.89805804193 -1.62394437194 --0.898041203618 -1.64120256901 --0.898026913405 -1.65846061706 --0.898015230894 -1.67571812868 --0.898006111383 -1.69297558069 --0.897999569774 -1.71023267507 --0.897995650768 -1.72748979926 --0.897994294762 -1.74474671483 --0.897995501757 -1.76200380921 --0.897999316454 -1.77926078439 --0.898005694151 -1.79651805758 --0.89801466465 -1.81377530098 --0.89802621305 -1.83103299141 --0.898040354252 -1.84829080105 --0.898057028651 -1.86554917693 --0.898076340556 -1.88280782104 --0.898098140955 -1.90006712079 --0.898110300302 -1.91928049922 --0.898099407554 -1.93849226833 --0.89807741344 -1.95575141907 --0.898058027029 -1.97301021218 --0.898041188717 -1.99026840925 --0.898026898503 -2.0075264275 --0.898015230894 -2.02478396893 --0.898006141186 -2.04204142094 --0.897999599576 -2.05929851532 --0.897995650768 -2.07655566931 --0.897994294762 -2.09381252527 --0.897995516657 -2.11106961965 --0.897999331355 -2.12832659483 --0.898005709052 -2.14558386803 --0.898014679551 -2.16284114122 --0.898026198149 -2.18009883165 --0.898040339351 -2.1973567009 --0.89805701375 -2.21461504698 --0.898076295853 -2.23187363148 --0.898098111153 -2.24913299084 --0.898110285401 -2.26834636927 --0.898099377751 -2.28755807877 --0.898077398539 -2.30481719971 --0.898058027029 -2.32207608223 --0.898041218519 -2.3393343091 --0.898026943207 -2.35659229755 --0.898015245795 -2.37384980917 --0.898006126285 -2.39110726118 --0.897999584675 -2.40836435556 --0.897995650768 -2.42562150955 --0.897994294762 -2.44287848473 --0.897995501757 -2.46013557911 --0.897999316454 -2.47739249468 --0.898005694151 -2.49464976788 --0.898014694453 -2.51190704107 --0.898026227951 -2.5291647315 --0.898040339351 -2.54642254114 --0.898057028651 -2.56368094683 --0.898076340556 -2.58093953133 --0.898098140955 -2.59819877148 --0.898110300302 -2.61741220951 --0.898099392652 -2.63662397862 --0.898077428341 -2.65388309956 --0.89805804193 -2.67114192247 --0.898041173816 -2.68840014934 --0.898026898503 -2.7056581974 --0.898015230894 -2.72291570902 --0.898006141186 -2.74017316103 --0.897999614477 -2.75743031502 --0.89799566567 -2.7746874094 --0.897994294762 -2.79194426537 --0.897995501757 -2.80920135975 --0.897999316454 -2.82645833492 --0.898005694151 -2.84371560812 --0.898014694453 -2.86097282171 --0.898026242852 -2.87823051214 --0.898040354252 -2.89548838139 --0.89805701375 -2.91274678707 --0.898076325655 -2.93000537157 --0.898098140955 -2.94726461172 --0.898110315203 -2.96647799015 --0.898099437356 -2.98568981886 --0.898077428341 -3.00294899941 --0.898058012128 -3.02020776272 --0.898041203618 -3.03746592998 --0.898026928306 -3.05472397804 --0.898015245795 -3.07198154926 --0.898006126285 -3.08923900127 --0.897999584675 -3.10649609566 --0.897995680571 -3.12375324965 --0.897994309664 -3.14101013739 --0.897995501757 --3.12491810322 --0.897999316454 --3.10766112804 --0.898005694151 --3.09040385485 --0.89801466465 --3.07314664126 --0.89802621305 --3.05588895083 --0.898040354252 --3.03863108158 --0.898057028651 --3.0213726759 --0.898076310754 --3.0041140914 --0.898098126054 --2.98685485125 --0.898110315203 --2.96764147282 --0.898099392652 --2.94842964411 --0.898077428341 --2.93117046356 --0.89805804193 --2.91391170025 --0.898041203618 --2.89665353298 --0.898026928306 --2.87939548492 --0.898015230894 --2.8621379137 --0.898006111383 --2.84488046169 --0.897999569774 --2.82762336731 --0.897995650768 --2.81036621332 --0.897994294762 --2.79310935736 --0.897995516657 --2.77585226297 --0.897999316454 --2.7585952878 --0.898005694151 --2.7413380146 --0.898014709354 --2.72408074141 --0.898026242852 --2.70682305098 --0.898040354252 --2.68956524134 --0.898057028651 --2.67230689526 --0.898076310754 --2.65504825115 --0.898098111153 --2.63778889179 --0.898110300302 --2.61857551336 --0.898099392652 --2.59936380386 --0.898077398539 --2.58210468292 --0.898058027029 --2.5648458004 --0.898041188717 --2.54758757353 --0.898026898503 --2.53032964468 --0.898015230894 --2.51307213306 --0.898006141186 --2.49581468105 --0.897999614477 --2.47855758667 --0.89799566567 --2.46130037308 --0.897994294762 --2.44404345751 --0.897995501757 --2.42678636313 --0.897999316454 --2.40952938795 --0.898005694151 --2.39227211475 --0.89801466465 --2.37501484156 --0.898026198149 --2.35775715113 --0.898040339351 --2.34049934149 --0.898057043552 --2.32324099541 --0.898076325655 --2.30598241091 --0.898098111153 --2.28872311115 --0.898110300302 --2.26950967312 --0.898099392652 --2.25029790401 --0.898077398539 --2.23303878307 --0.898058012128 --2.21577996016 --0.898041173816 --2.19852173329 --0.898026898503 --2.18126368523 --0.898015201092 --2.16400623321 --0.898006081581 --2.1467487812 --0.897999584675 --2.12949168682 --0.89799566567 --2.11223459244 --0.897994294762 --2.09497761726 --0.897995516657 --2.07772052288 --0.897999331355 --2.0604635477 --0.898005709052 --2.04320627451 --0.898014679551 --2.02594906092 --0.898026198149 --2.00869137049 --0.898040339351 --1.99143353104 --0.89805701375 --1.97417518496 --0.898076295853 --1.95691657066 --0.898098111153 --1.93965727091 --0.898110285401 --1.92044386268 --0.898099377751 --1.90123209357 --0.89807741344 --1.88397297263 --0.898058027029 --1.86671414971 --0.898041203618 --1.84945595265 --0.898026928306 --1.83219790459 --0.898015230894 --1.81494036317 --0.898006141186 --1.79768291116 --0.897999584675 --1.78042584658 --0.897995635867 --1.76316869259 --0.897994294763 --1.74591177702 --0.897995501757 --1.72865471244 --0.897999301553 --1.71139773726 --0.898005709053 --1.69414046406 --0.898014724255 --1.67688319087 --0.898026227951 --1.65962547064 --0.898040339351 --1.64236763119 --0.898057028651 --1.62510928511 --0.898076340556 --1.60785070062 --0.898098140955 --1.59059140086 --0.898110315203 --1.57137802243 --0.898099437356 --1.55216625333 --0.898077443242 --1.53490707278 --0.89805804193 --1.51764824987 --0.898041203618 --1.5003900826 --0.898026913405 --1.48313209414 --0.898015230894 --1.46587455273 --0.898006111383 --1.44861707091 --0.897999569774 --1.43135997653 --0.897995650768 --1.41410282254 --0.897994294762 --1.39684590697 --0.897995501757 --1.37958881259 --0.897999316454 --1.36233186722 --0.898005694151 --1.34507459402 --0.89801466465 --1.32781732082 --0.89802621305 --1.31055963039 --0.898040354252 --1.29330182075 --0.898057028651 --1.27604344487 --0.898076340556 --1.25878483057 --0.898098140955 --1.24152559042 --0.898110300302 --1.22231218219 --0.898099407554 --1.20310038328 --0.89807741344 --1.18584126234 --0.898058027029 --1.16858243942 --0.898041188717 --1.15132421255 --0.898026898503 --1.13406619429 --0.898015230894 --1.11680868268 --0.898006141186 --1.09955120087 --0.897999599576 --1.08229407668 --0.897995650768 --1.0650369823 --0.897994294762 --1.04778012633 --0.897995516657 --1.03052303195 --0.897999331355 --1.01326605678 --0.898005709052 --0.996008768676 --0.898014679551 --0.978751495481 --0.898026198149 --0.961493790149 --0.898040339351 --0.94423596561 --0.89805701375 --0.926977619529 --0.898076295853 --0.909719005227 --0.898098111153 --0.892459690571 --0.898110285401 --0.87324629724 --0.898099377751 --0.854034528136 --0.898077398539 --0.836775407195 --0.898058027029 --0.81951661408 --0.898041218519 --0.802258402109 --0.898026943207 --0.785000354052 --0.898015245795 --0.767742827534 --0.898006126285 --0.750485360622 --0.897999584675 --0.733228266239 --0.897995650768 --0.715971127152 --0.897994294762 --0.698714211583 --0.897995501757 --0.681457132101 --0.897999316454 --0.664200171828 --0.898005694151 --0.646942913532 --0.898014694453 --0.629685640335 --0.898026227951 --0.612427949906 --0.898040339351 --0.595170140266 --0.898057028651 --0.577911749482 --0.898076340556 --0.560653150081 --0.898098140955 --0.543393880129 --0.898110300302 --0.524180456996 --0.898099392652 --0.504968680441 --0.898077428341 --0.4877095595 --0.89805804193 --0.470450744033 --0.898041173816 --0.453192532062 --0.898026898503 --0.435934513807 --0.898015230894 --0.41867698729 --0.898006141186 --0.401419520378 --0.897999614477 --0.384162425995 --0.89799566567 --0.366905264556 --0.897994294762 --0.349648371339 --0.897995501757 --0.332391299307 --0.897999316454 --0.315134331584 --0.898005694151 --0.297877050936 --0.898014694453 --0.28061978519 --0.898026242852 --0.263362102211 --0.898040354252 --0.24610427022 --0.89805701375 --0.228845898062 --0.898076325655 --0.211587287485 --0.898098140955 --0.194327998906 --0.898110315203 --0.175114605576 --0.880940705537 --0.155898101628 --0.880918979644 --0.138638980687 --0.880899816751 --0.121380176395 --0.880883187055 --0.104121992364 --0.880869090557 --0.0868639908731 --0.880857557058 --0.0696064857766 --0.880848556757 --0.0523490421474 --0.880842089653 --0.0350919673219 --0.880838230252 --0.0178348349873 --0.880836904049 --0.000577948754653 --0.880838081241 -0.0166791193187 --0.880841836333 -0.0339360632934 --0.880848139525 -0.0511933127418 --0.880857020617 -0.0684505626559 --0.880868420005 -0.0857082419097 --0.880882367492 -0.102966040373 --0.880898833275 -0.120224386453 --0.880917906761 -0.137482985854 --0.880939483643 -0.154742252081 --0.88095150888 -0.173955816776 --0.880940705537 -0.193167746067 --0.880919009447 -0.210426859558 --0.880899846554 -0.227685663849 --0.880883187055 -0.244943846017 --0.880869090557 -0.262201853097 --0.880857512355 -0.279459357262 --0.880848512054 -0.296716801822 --0.880842074752 -0.313973888755 --0.880838185549 -0.331231020391 --0.880836844444 -0.348487891257 --0.88083806634 -0.365744963288 --0.880841836333 -0.38300191611 --0.880848139525 -0.400259174406 --0.880857020617 -0.417516432702 --0.880868390202 -0.43477409333 --0.880882367492 -0.452031895518 --0.880898863077 -0.4692902565 --0.880917921662 -0.486548855901 --0.880939468742 -0.503808118403 --0.880951493978 -0.523021653295 --0.880940720439 -0.54223357141 --0.880918994546 -0.559492707253 --0.880899831652 -0.576751530171 --0.880883201956 -0.594009712338 --0.880869090557 -0.611267715692 --0.880857542157 -0.628525227308 --0.880848556757 -0.645782664418 --0.880842104554 -0.663039743901 --0.88083820045 -0.680296868086 --0.880836844444 -0.697553738952 --0.880838021636 -0.714810803533 --0.880841806531 -0.732067763805 --0.880848124623 -0.749325037003 --0.880856990814 -0.766582280397 --0.880868390202 -0.783839941025 --0.880882367492 -0.801097750663 --0.880898863077 -0.818356096745 --0.880917921662 -0.835614681244 --0.880939468742 -0.852873951197 --0.880951493978 -0.87208750844 --0.880940705537 -0.891299456358 --0.880918979644 -0.908558577299 --0.880899816751 -0.925817370415 --0.880883172154 -0.943075552583 --0.880869075656 -0.960333555937 --0.880857542157 -0.977591067553 --0.880848541856 -0.994848519566 --0.880842089653 -1.01210558414 --0.88083820045 -1.02936267853 --0.880836859345 -1.0466195941 --0.880838081241 -1.06387668848 --0.880841851234 -1.08113360405 --0.880848154426 -1.09839084744 --0.880857020617 -1.11564809084 --0.880868390202 -1.13290578127 --0.880882367492 -1.15016359091 --0.880898848176 -1.16742193699 --0.880917906761 -1.18468055129 --0.880939468742 -1.20193982124 --0.880951479077 -1.22115337849 --0.880940705538 -1.2403652966 --0.880918994546 -1.25762438774 --0.880899816751 -1.27488321066 --0.880883187055 -1.29214143753 --0.880869090557 -1.30939942598 --0.880857542157 -1.32665690779 --0.880848556757 -1.34391435981 --0.880842089653 -1.36117145419 --0.880838185549 -1.37842857837 --0.880836874247 -1.39568543434 --0.880838081241 -1.41294249892 --0.88084179163 -1.4301994741 --0.880848094821 -1.44745671749 --0.880857005716 -1.46471396088 --0.880868405104 -1.48197162151 --0.880882382393 -1.49922943115 --0.880898863077 -1.51648780703 --0.880917906761 -1.53374639153 --0.88093945384 -1.55100566149 --0.880951493978 -1.57021921873 --0.880940720439 -1.58943113685 --0.880918979645 -1.60669025779 --0.880899846554 -1.6239490509 --0.880883216858 -1.64120721817 --0.880869075656 -1.65846526622 --0.880857542157 -1.67572277784 --0.880848556757 -1.69298020005 --0.880842089653 -1.71023729443 --0.880838185549 -1.72749441862 --0.880836844444 -1.74475130439 --0.880838051439 -1.76200836897 --0.880841836333 -1.77926531434 --0.880848124623 -1.79652258754 --0.880856990814 -1.81377983093 --0.880868390202 -1.83103749156 --0.880882367492 -1.8482952714 --0.880898848176 -1.86555361748 --0.880917906761 -1.88281226158 --0.880939468742 -1.90007153153 --0.880951493978 -1.91928505897 --0.88094073534 -1.9384970069 --0.880918994546 -1.95575612783 --0.880899816751 -1.97301492095 --0.880883201956 -1.99027311802 --0.880869090557 -2.00753110647 --0.880857542157 -2.02478861809 --0.880848556757 -2.0420460701 --0.880842089653 -2.05930316448 --0.880838185549 -2.07656025886 --0.880836844444 -2.09381711483 --0.88083806634 -2.11107420921 --0.880841851234 -2.12833112478 --0.880848154426 -2.14558839798 --0.880857020617 -2.16284567117 --0.880868390202 -2.18010336161 --0.88088235259 -2.19736117124 --0.880898833275 -2.21461945772 --0.880917906761 -2.23187804222 --0.880939468742 -2.24913740158 --0.880951479077 -2.26835095882 --0.880940705538 -2.28756284714 --0.880918979645 -2.30482196808 --0.880899816751 -2.32208079099 --0.880883201956 -2.33933901786 --0.880869105458 -2.35659694671 --0.880857557058 -2.37385439872 --0.880848541856 -2.39111185074 --0.880842074752 -2.40836894512 --0.880838185549 -2.42562609911 --0.880836859345 -2.44288301468 --0.880838036537 -2.46014010906 --0.880841806531 -2.47739702463 --0.880848124623 -2.49465423823 --0.880856990814 -2.51191151142 --0.880868390202 -2.52916920185 --0.880882367492 -2.54642701149 --0.880898848176 -2.56368535757 --0.880917906761 -2.58094388247 --0.880939468742 -2.59820318222 --0.880951493978 -2.61741679907 --0.880940720439 -2.63662874699 --0.880919024348 -2.65388786793 --0.880899846554 -2.67114663124 --0.880883187055 -2.68840479851 --0.880869090557 -2.70566284657 --0.880857542157 -2.72292035818 --0.880848556757 -2.74017781019 --0.880842104554 -2.75743490457 --0.88083820045 -2.77469199896 --0.880836859345 -2.79194885493 --0.880838036537 -2.8092058897 --0.880841776728 -2.82646286488 --0.880848094821 -2.84372013808 --0.880856990814 -2.86097735166 --0.880868390202 -2.87823498249 --0.88088235259 -2.89549279213 --0.880898833275 -2.91275119782 --0.880917906761 -2.93000978231 --0.880939468742 -2.94726902246 --0.880951493978 -2.96648257971 --0.880940705537 -2.98569452763 --0.880918979644 -3.00295364857 --0.880899816751 -3.02021241188 --0.880883187055 -3.03747057915 --0.880869090557 -3.0547286272 --0.880857557058 -3.07198619842 --0.880848556757 -3.08924365043 --0.880842089653 -3.10650068521 --0.880838230252 -3.1237577796 --0.880836904049 -3.14101466735 --0.880838081241 --3.12491357326 --0.880841836333 --3.10765659809 --0.880848139525 --3.09039932489 --0.880857020617 --3.07314211131 --0.880868420005 --3.05588442088 --0.880882367492 --3.03862661123 --0.880898833275 --3.02136826516 --0.880917906761 --3.00410962105 --0.880939483643 --2.9868503809 --0.88095150888 --2.96763688326 --0.880940705537 --2.94842493534 --0.880919009447 --2.9311658144 --0.880899846554 --2.91390705108 --0.880883187055 --2.89664888382 --0.880869090557 --2.87939083576 --0.880857512355 --2.86213326454 --0.880848512054 --2.84487581253 --0.880842074752 --2.82761877776 --0.880838185549 --2.81036168337 --0.880836844444 --2.7931047678 --0.88083806634 --2.77584767341 --0.880841836333 --2.75859075784 --0.880848139525 --2.74133348465 --0.880857020617 --2.72407627106 --0.880868390202 --2.70681858063 --0.880882367492 --2.68956077099 --0.880898863077 --2.67230248451 --0.880917921662 --2.65504384041 --0.880939468742 --2.63778454065 --0.880951493978 --2.61857098341 --0.880940720439 --2.5993590951 --0.880918994546 --2.58209997415 --0.880899831652 --2.56484109163 --0.880883201956 --2.54758286476 --0.880869090557 --2.53032493591 --0.880857542157 --2.5130674839 --0.880848556757 --2.49581003189 --0.880842104554 --2.47855293751 --0.88083820045 --2.46129578352 --0.880836844444 --2.44403892755 --0.880838021636 --2.42678183317 --0.880841806531 --2.409524858 --0.880848124623 --2.3922676444 --0.880856990814 --2.37501037121 --0.880868390202 --2.35775268078 --0.880882367492 --2.34049487114 --0.880898863077 --2.32323652506 --0.880917921662 --2.30597800017 --0.880939468742 --2.28871870041 --0.880951493978 --2.26950508356 --0.880940705537 --2.25029313564 --0.880918979644 --2.2330340147 --0.880899816751 --2.21577525139 --0.880883172154 --2.19851708412 --0.880869075656 --2.18125903607 --0.880857542157 --2.16400158405 --0.880848541856 --2.14674419165 --0.880842089653 --2.12948709726 --0.88083820045 --2.11222994328 --0.880836859345 --2.09497302771 --0.880838081241 --2.07771599292 --0.880841851234 --2.06045901775 --0.880848154426 --2.04320174456 --0.880857020617 --2.02594453097 --0.880868390202 --2.00868690014 --0.880882367492 --1.9914290905 --0.880898848176 --1.97417071462 --0.880917906761 --1.95691213012 --0.880939468742 --1.93965286017 --0.880951479077 --1.92043927312 --0.880940705538 --1.901227355 --0.880918994546 --1.88396826386 --0.880899816751 --1.86670944095 --0.880883187055 --1.84945124388 --0.880869090557 --1.83219322562 --0.880857542157 --1.81493571401 --0.880848556757 --1.7976782918 --0.880842089653 --1.78042122722 --0.880838185549 --1.76316407323 --0.880836874247 --1.74590718746 --0.880838081241 --1.72865015268 --0.88084179163 --1.71139320731 --0.880848094821 --1.69413593411 --0.880857005716 --1.67687866092 --0.880868405104 --1.65962100029 --0.880882382393 --1.64236322045 --0.880898863077 --1.62510487437 --0.880917906761 --1.60784628987 --0.88093945384 --1.59058701992 --0.880951493978 --1.57137346268 --0.880940720439 --1.55216151476 --0.880918979645 --1.53490236401 --0.880899846554 --1.5176435709 --0.880883216858 --1.50038540364 --0.880869075656 --1.48312741518 --0.880857542157 --1.46586990357 --0.880848556757 --1.44861245156 --0.880842089653 --1.43135538697 --0.880838185549 --1.41409826279 --0.880836844444 --1.39684134722 --0.880838051439 --1.37958425283 --0.880841836333 --1.36232733727 --0.880848124623 --1.34507009387 --0.880856990814 --1.32781285047 --0.880868390202 --1.31055516005 --0.880882367492 --1.29329735041 --0.880898848176 --1.27603900433 --0.880917906761 --1.25878041983 --0.880939468742 --1.24152117968 --0.880951493978 --1.22230759263 --0.88094073534 --1.20309564471 --0.880918994546 --1.18583655357 --0.880899816751 --1.16857773066 --0.880883201956 --1.15131950378 --0.880869090557 --1.13406151533 --0.880857542157 --1.11680403352 --0.880848556757 --1.09954661131 --0.880842089653 --1.08228951692 --0.880838185549 --1.06503239274 --0.880836844444 --1.04777553677 --0.88083806634 --1.03051844239 --0.880841851234 --1.01326149702 --0.880848154426 --0.996004253626 --0.880857020617 --0.978746980429 --0.880868390202 --0.961489275098 --0.88088235259 --0.94423148036 --0.880898833275 --0.926973178983 --0.880917906761 --0.909714579582 --0.880939468742 --0.892455279827 --0.880951479077 --0.873241722584 --0.880940705538 --0.854029789567 --0.880918979645 --0.836770683527 --0.880899816751 --0.819511890411 --0.880883201956 --0.802253693342 --0.880869105458 --0.784995689988 --0.880857557058 --0.767738193273 --0.880848541856 --0.750480756164 --0.880842074752 --0.733223661781 --0.880838185549 --0.715966522694 --0.880836859345 --0.698709651828 --0.880838036537 --0.681452602148 --0.880841806531 --0.664195656776 --0.880848124623 --0.64693839848 --0.880856990814 --0.629681140184 --0.880868390202 --0.612423464656 --0.880882367492 --0.595165669918 --0.880898848176 --0.577907323837 --0.880917906761 --0.560648724437 --0.880939468742 --0.543389454484 --0.880951493978 --0.524175897241 --0.880940720439 --0.504963949323 --0.880919024348 --0.487704835832 --0.880899846554 --0.470446042717 --0.880883187055 --0.453187853098 --0.880869090557 --0.435929849744 --0.880857542157 --0.418672330677 --0.880848556757 --0.401414886117 --0.880842104554 --0.384157814086 --0.88083820045 --0.366900674999 --0.880836859345 --0.349643804133 --0.880838036537 --0.332386739552 --0.880841776728 --0.31512978673 --0.880848094821 --0.297872535885 --0.880856990814 --0.28061529249 --0.880868390202 --0.263357616961 --0.88088235259 --0.246099807322 --0.880898833275 --0.228841461241 --0.880917906761 --0.211582873017 --0.880939468742 --0.194323606789 --0.880951493978 --0.17511003837 --0.863786056637 --0.155893176794 --0.863764613867 --0.138634085655 --0.863745689392 --0.121375305578 --0.863729253411 --0.104117132723 --0.863715350628 --0.0868591535836 --0.863703951239 --0.0696016689762 --0.863695040345 --0.0523442402482 --0.863688647747 --0.0350871849805 --0.863684818149 --0.0178300722037 --0.863683506847 --0.000573205063118 --0.863684684038 -0.0166838434525 --0.863688394427 -0.0339407674037 --0.863694608212 -0.0511979972944 --0.863703384996 -0.0684552295134 --0.863714650273 -0.0857128892094 --0.863728433847 -0.102970669046 --0.863744705915 -0.120228998363 --0.863763540983 -0.137487575412 --0.863784834743 -0.154746819288 --0.863796710968 -0.17396055907 --0.863786056637 -0.193172667175 --0.863764613867 -0.210431758314 --0.863745689392 -0.227690543979 --0.863729253411 -0.244948714972 --0.863715335727 -0.262206695974 --0.863703891635 -0.279464177787 --0.863694995642 -0.296721607447 --0.863688632846 -0.313978664577 --0.863684773445 -0.331235781312 --0.863683462143 -0.348492644727 --0.863684669137 -0.365749686956 --0.863688394427 -0.383006609976 --0.863694623113 -0.40026383847 --0.863703384996 -0.417521074414 --0.863714620471 -0.434778727591 --0.863728433847 -0.452036507428 --0.863744720817 -0.469294846058 --0.863763540983 -0.486553430557 --0.863784834743 -0.503812670708 --0.863796710968 -0.523026406765 --0.863786071539 -0.542238503695 --0.863764628768 -0.559497594834 --0.863745689392 -0.576756402851 --0.863729253411 -0.594014570117 --0.863715335727 -0.61127255857 --0.863703921437 -0.628530055284 --0.863695025444 -0.645787477493 --0.863688647747 -0.663044542074 --0.863684788346 -0.680301636457 --0.863683462143 -0.697558477521 --0.863684639335 -0.714815527201 --0.863688364625 -0.732072457671 --0.863694608212 -0.749329701066 --0.863703370094 -0.766586944461 --0.863714620471 -0.783844605088 --0.863728433847 -0.801102399826 --0.863744720817 -0.818360701203 --0.863763540983 -0.8356192559 --0.863784834743 -0.852878525853 --0.863796710968 -0.872092261911 --0.863786056637 -0.891304373741 --0.863764598966 -0.908563479781 --0.863745674491 -0.925822257996 --0.86372923851 -0.943080410362 --0.863715320826 -0.960338398815 --0.863703921437 -0.977595895529 --0.863695025444 -0.994853302838 --0.863688632846 -1.01211035252 --0.863684788346 -1.0293674469 --0.863683491945 -1.04662433266 --0.863684684038 -1.06388142705 --0.863688409328 -1.08113834262 --0.863694638014 -1.09839555621 --0.863703384996 -1.1156527698 --0.863714620471 -1.13291043043 --0.863728448748 -1.15016821026 --0.863744735718 -1.16742652655 --0.863763540983 -1.18468511105 --0.863784834743 -1.2019443512 --0.863796710968 -1.22115811706 --0.863786071539 -1.24037021398 --0.863764628768 -1.25762927532 --0.863745689392 -1.27488809824 --0.863729253411 -1.29214629531 --0.863715335727 -1.30940425396 --0.863703921437 -1.32666170597 --0.863695025444 -1.34391915798 --0.863688632846 -1.36117622256 --0.863684788346 -1.37843331694 --0.863683491945 -1.39569017291 --0.863684684038 -1.41294720769 --0.863688364625 -1.43020418286 --0.863694578409 -1.44746142626 --0.863703370094 -1.46471863985 --0.863714650273 -1.48197627067 --0.863728478551 -1.49923405051 --0.86374476552 -1.51649239659 --0.863763540983 -1.53375098109 --0.863784790039 -1.55101025105 --0.863796696067 -1.5702239573 --0.863786071539 -1.58943605423 --0.863764598966 -1.60669517517 --0.863745689392 -1.62395393849 --0.863729268312 -1.64121207595 --0.863715320825 -1.6584700942 --0.863703936338 -1.67572760582 --0.863695040345 -1.69298499822 --0.863688647747 -1.7102420628 --0.863684788346 -1.72749918699 --0.863683462143 -1.74475604296 --0.863684669137 -1.76201310754 --0.863688394427 -1.77927002311 --0.863694608212 -1.7965272665 --0.863703370094 -1.8137845099 --0.863714620471 -1.83104214072 --0.863728448748 -1.84829992056 --0.863744735718 -1.86555823684 --0.863763540983 -1.88281682134 --0.863784834743 -1.90007606149 --0.863796710968 -1.91928979754 --0.863786071539 -1.93850192428 --0.863764613867 -1.95576101542 --0.86374565959 -1.97301980853 --0.86372923851 -1.9902779758 --0.863715335727 -2.00753596425 --0.863703921437 -2.02479344606 --0.863695025444 -2.04205083847 --0.863688647747 -2.05930793285 --0.863684788346 -2.07656502724 --0.863683462143 -2.0938218832 --0.863684669137 -2.11107897759 --0.863688394427 -2.12833583355 --0.863694623113 -2.14559304714 --0.863703384996 -2.16285032034 --0.863714620471 -2.18010801077 --0.863728418946 -2.1973657608 --0.863744705915 -2.21462404728 --0.863763540983 -2.23188269138 --0.863784834743 -2.24914199114 --0.863796710968 -2.26835572719 --0.863786071539 -2.28756779432 --0.863764613867 -2.30482685566 --0.863745674491 -2.32208567858 --0.863729253411 -2.33934384584 --0.863715335727 -2.35660177469 --0.863703921437 -2.37385928631 --0.863695010543 -2.39111673832 --0.863688632846 -2.4083737731 --0.863684803247 -2.42563086748 --0.863683491945 -2.44288772345 --0.863684654236 -2.46014475823 --0.863688379526 -2.4774016738 --0.863694623113 -2.49465888739 --0.863703370094 -2.51191616058 --0.863714620471 -2.52917385101 --0.863728433847 -2.54643160105 --0.863744720817 -2.56368988752 --0.863763540983 -2.58094847202 --0.863784834743 -2.59820777178 --0.863796710968 -2.61742150783 --0.863786071539 -2.63663363457 --0.863764613867 -2.65389275551 --0.863745674491 -2.67115151882 --0.86372923851 -2.68840968609 --0.863715320825 -2.70566767454 --0.863703921437 -2.72292512655 --0.863695025444 -2.74018257856 --0.863688647747 -2.75743961334 --0.863684803247 -2.77469670773 --0.863683491945 -2.79195356369 --0.863684654236 -2.80921059847 --0.863688349723 -2.82646757364 --0.863694578409 -2.84372484684 --0.863703355193 -2.86098206043 --0.863714620471 -2.87823963165 --0.863728433847 -2.89549744129 --0.863744720816 -2.91275584698 --0.863763540983 -2.93001437187 --0.863784834743 -2.94727361202 --0.863796710968 -2.96648734808 --0.863786056637 -2.98569941521 --0.863764613867 -3.00295853615 --0.863745689392 -3.02021729946 --0.863729253411 -3.03747546673 --0.863715350628 -3.05473351479 --0.863703951239 -3.0719910264 --0.863695040345 -3.08924841881 --0.863688647747 -3.10650545359 --0.863684818149 -3.12376254797 --0.863683506847 -3.14101937612 --0.863684684038 --3.1249088645 --0.863688394427 --3.10765188932 --0.863694608212 --3.09039461613 --0.863703384996 --3.07313740254 --0.863714650273 --3.05587977171 --0.863728433847 --3.03862196207 --0.863744705915 --3.02136361599 --0.863763540983 --3.00410503149 --0.863784834743 --2.98684579134 --0.863796710968 --2.96763211489 --0.863786056637 --2.94842004776 --0.863764613867 --2.93116092682 --0.863745689392 --2.9139021635 --0.863729253411 --2.89664399624 --0.863715335727 --2.87938594818 --0.863703891635 --2.86212843657 --0.863694995642 --2.84487104416 --0.863688632846 --2.82761400938 --0.863684773445 --2.810356915 --0.863683462143 --2.79309999943 --0.863684669137 --2.77584290504 --0.863688394427 --2.75858604908 --0.863694623113 --2.74132883549 --0.863703384996 --2.7240716219 --0.863714620471 --2.70681393147 --0.863728433847 --2.68955612183 --0.863744720817 --2.67229783535 --0.863763540983 --2.65503925085 --0.863784834743 --2.6377800107 --0.863796710968 --2.61856621504 --0.863786071539 --2.59935414791 --0.863764628768 --2.58209508657 --0.863745689392 --2.56483620405 --0.863729253411 --2.54757803679 --0.863715335727 --2.53032010794 --0.863703921437 --2.51306265593 --0.863695025444 --2.49580520392 --0.863688647747 --2.47854810953 --0.863684788346 --2.46129101515 --0.863683462143 --2.44403415918 --0.863684639335 --2.4267771244 --0.863688364625 --2.40952020883 --0.863694608212 --2.39226299524 --0.863703370094 --2.37500572205 --0.863714620471 --2.35774803162 --0.863728433847 --2.34049028158 --0.863744720817 --2.32323199511 --0.863763540983 --2.30597341061 --0.863784834743 --2.28871411085 --0.863796710968 --2.2695003748 --0.863786056637 --2.25028824806 --0.863764598966 --2.23302912712 --0.863745674491 --2.21577036381 --0.86372923851 --2.19851225614 --0.863715320826 --2.18125426769 --0.863703921437 --2.16399675608 --0.863695025444 --2.14673936367 --0.863688632846 --2.12948232889 --0.863684788346 --2.1122251749 --0.863683491945 --2.09496831894 --0.863684684038 --2.07771128416 --0.863688409328 --2.06045430899 --0.863694638014 --2.04319703579 --0.863703384996 --2.0259398222 --0.863714620471 --2.00868225098 --0.863728448748 --1.99142447114 --0.863744735718 --1.97416609526 --0.863763540983 --1.95690751076 --0.863784834743 --1.93964827061 --0.863796710968 --1.92043453455 --0.863786071539 --1.90122243762 --0.863764628768 --1.88396334648 --0.863745689392 --1.86670455337 --0.863729253411 --1.8494463563 --0.863715335727 --1.83218836784 --0.863703921437 --1.81493091583 --0.863695025444 --1.79767352343 --0.863688632846 --1.78041645884 --0.863684788346 --1.76315930486 --0.863683491945 --1.74590244889 --0.863684684038 --1.72864541411 --0.863688364625 --1.71138849854 --0.863694578409 --1.69413125515 --0.863703370094 --1.67687401176 --0.863714650273 --1.65961638093 --0.863728478551 --1.64235860109 --0.86374476552 --1.62510025501 --0.863763540983 --1.60784167051 --0.863784790039 --1.59058243036 --0.863796696067 --1.57136869431 --0.863786071539 --1.55215656757 --0.863764598966 --1.53489747643 --0.863745689392 --1.51763871312 --0.863729268312 --1.50038054586 --0.863715320825 --1.4831225574 --0.863703936338 --1.46586504578 --0.863695040345 --1.44860762358 --0.863688647747 --1.4313505888 --0.863684788346 --1.41409349441 --0.863683462143 --1.39683660865 --0.863684669137 --1.37957954407 --0.863688394427 --1.3623226285 --0.863694608212 --1.34506541491 --0.863703370094 --1.32780820131 --0.863714620471 --1.31055051088 --0.863728448748 --1.29329273105 --0.863744735718 --1.27603441477 --0.863763540983 --1.25877583027 --0.863784834743 --1.24151659012 --0.863796710968 --1.22230285406 --0.863786071539 --1.20309075713 --0.863764613867 --1.18583166599 --0.86374565959 --1.16857287288 --0.86372923851 --1.15131467581 --0.863715335727 --1.13405668735 --0.863703921437 --1.11679923534 --0.863695025444 --1.09954181313 --0.863688647747 --1.08228474855 --0.863684788346 --1.06502762437 --0.863683462143 --1.0477707386 --0.863684669137 --1.03051367402 --0.863688394427 --1.01325675845 --0.863694623113 --0.99599954486 --0.863703384996 --0.978742301464 --0.863714620471 --0.961484625936 --0.863728418946 --0.944226861 --0.863744705915 --0.926968559623 --0.863763540983 --0.909709960222 --0.863784834743 --0.892450690269 --0.863796710968 --0.873236969114 --0.863786071539 --0.854024887085 --0.863764613867 --0.836765795946 --0.863745674491 --0.819507002831 --0.863729253411 --0.802248820663 --0.863715335727 --0.78499083221 --0.863703921437 --0.767733350396 --0.863695010543 --0.750475943088 --0.863688632846 --0.733218878508 --0.863684803247 --0.715961769223 --0.863683491945 --0.69870492816 --0.863684654236 --0.68144787848 --0.863688379526 --0.664190962911 --0.863694623113 --0.646933719516 --0.863703370094 --0.629676476121 --0.863714620471 --0.612418830395 --0.863728433847 --0.595161035657 --0.863744720817 --0.577902704477 --0.863763540983 --0.560644119978 --0.863784834743 --0.543384879828 --0.863796710968 --0.524171158671 --0.863786071539 --0.50495903939 --0.863764613867 --0.487699948251 --0.863745674491 --0.470441155135 --0.86372923851 --0.453182980418 --0.863715320825 --0.435925006866 --0.863703921437 --0.418667517602 --0.863695025444 --0.401410087943 --0.863688647747 --0.384153030813 --0.863684803247 --0.366895921529 --0.863683491945 --0.349639065563 --0.863684654236 --0.332382008433 --0.863688349723 --0.315125077963 --0.863694578409 --0.297867849469 --0.863703355193 --0.280610620975 --0.863714620471 --0.263352960348 --0.863728433847 --0.246095176786 --0.863744720816 --0.228836856782 --0.863763540983 --0.211578287184 --0.863784834743 --0.194319039583 --0.863796710968 --0.17510529235 --0.846635684371 --0.155888650566 --0.84661449492 --0.138629578054 --0.846595808864 --0.121370814741 --0.8465795964 --0.104112660512 --0.84656585753 --0.0868546981364 --0.846554577351 --0.0695972256362 --0.846545800567 --0.0523398155347 --0.846539512277 --0.0350827788934 --0.84653571248 --0.0178256831132 --0.846534401178 --0.000568834133445 --0.846535548568 -0.0166881969199 --0.846539214253 -0.0339451027103 --0.846545338631 -0.0512023139745 --0.846554011106 -0.0684595294297 --0.846565157175 -0.085717169568 --0.846578776836 -0.102974932641 --0.846594840288 -0.120233245194 --0.846613436937 -0.137491803616 --0.846634462476 -0.154751032591 --0.846646189689 -0.173964928835 --0.846635684371 -0.193177197129 --0.84661449492 -0.210436277092 --0.846595808864 -0.22769504413 --0.846579581499 -0.24495319277 --0.846565827727 -0.262211151421 --0.846554547548 -0.279468618334 --0.846545770764 -0.296726033091 --0.846539467573 -0.31398306787 --0.846535652876 -0.331240162253 --0.846534371376 -0.348497018218 --0.846535548568 -0.365754045546 --0.846539214253 -0.383010953665 --0.846545383334 -0.400268167257 --0.84655405581 -0.417525380849 --0.846565142274 -0.434783011675 --0.846578761935 -0.452040761709 --0.846594840288 -0.469299085438 --0.846613436937 -0.486557655036 --0.846634462476 -0.503816865384 --0.846646189689 -0.523030772805 --0.846635684371 -0.542243048549 --0.84661449492 -0.559502094984 --0.846595808864 -0.576760873199 --0.846579581499 -0.594019055367 --0.846565827727 -0.611277028918 --0.846554547548 -0.628534480929 --0.846545770764 -0.645791888237 --0.846539482474 -0.663048952818 --0.846535682678 -0.6803060323 --0.846534386277 -0.697562858462 --0.846535548568 -0.714819893241 --0.846539214253 -0.732076793909 --0.846545353532 -0.749334007502 --0.846554026008 -0.766591235996 --0.846565157175 -0.783848881722 --0.846578776836 -0.801106661558 --0.84659487009 -0.818364962936 --0.846613466739 -0.835623502731 --0.846634477377 -0.852882742882 --0.846646204591 -0.872096642852 --0.846635699272 -0.891308903694 --0.84661449492 -0.908567979932 --0.846595793963 -0.925826743245 --0.846579581499 -0.943084895611 --0.846565827727 -0.960342869163 --0.846554547548 -0.977600336075 --0.846545770764 -0.994857743382 --0.846539482474 -1.01211479306 --0.846535697579 -1.02937188744 --0.846534401178 -1.04662871361 --0.846535563469 -1.06388574839 --0.846539244055 -1.08114266396 --0.846545368433 -1.09839987755 --0.846554026008 -1.11565709114 --0.846565142274 -1.13291472196 --0.846578776836 -1.150172472 --0.846594884991 -1.16743075848 --0.846613466739 -1.18468934298 --0.846634477377 -1.20194858313 --0.846646189689 -1.2211624682 --0.84663566947 -1.24037474394 --0.84661449492 -1.25763383508 --0.846595808864 -1.27489262819 --0.846579581499 -1.29215076566 --0.846565827727 -1.30940869451 --0.846554547548 -1.32666614652 --0.846545770764 -1.34392356872 --0.846539482474 -1.3611806035 --0.846535697579 -1.37843769789 --0.846534386277 -1.39569455385 --0.846535518765 -1.41295158863 --0.846539199352 -1.43020853401 --0.846545383334 -1.44746574759 --0.846554040909 -1.46472296119 --0.846565142274 -1.48198059201 --0.846578776836 -1.49923834204 --0.846594855189 -1.51649665833 --0.846613422036 -1.53375521303 --0.846634417772 -1.55101445318 --0.846646159887 -1.57022833824 --0.846635684371 -1.58944058418 --0.84661449492 -1.60669967532 --0.846595793963 -1.62395843863 --0.846579566598 -1.6412165761 --0.846565812826 -1.65847456455 --0.84655456245 -1.67573204636 --0.846545770764 -1.69298943877 --0.846539482474 -1.71024647355 --0.846535697579 -1.72750356793 --0.846534386277 -1.7447603941 --0.846535563469 -1.76201745868 --0.846539229154 -1.77927437425 --0.846545353532 -1.79653155804 --0.846554026008 -1.81378877163 --0.846565157175 -1.83104640245 --0.846578791737 -1.84830418229 --0.846594884991 -1.86556246877 --0.846613466739 -1.88282102346 --0.846634477377 -1.90008026362 --0.846646189689 -1.91929417849 --0.84663566947 -1.93850645423 --0.84661449492 -1.95576551557 --0.846595793963 -1.97302430868 --0.846579566598 -1.99028247595 --0.846565842628 -2.0075404644 --0.846554562449 -2.02479791641 --0.846545770764 -2.04205524921 --0.846539497375 -2.05931228399 --0.846535697579 -2.07656937838 --0.846534386277 -2.09382623434 --0.846535563469 -2.11108332873 --0.846539229154 -2.12834018469 --0.846545383334 -2.14559733868 --0.84655405581 -2.16285455227 --0.846565157175 -2.1801122427 --0.846578776836 -2.19737005234 --0.84659487009 -2.21462833881 --0.846613466739 -2.23188692331 --0.846634477377 -2.24914616346 --0.846646204591 -2.26836007833 --0.846635699272 -2.28757232428 --0.846614509821 -2.30483132601 --0.846595808864 -2.32209014892 --0.846579581499 -2.33934831619 --0.846565842628 -2.35660624504 --0.846554562449 -2.37386375666 --0.846545755863 -2.39112120867 --0.846539482474 -2.40837824345 --0.84653571248 -2.42563527823 --0.846534401178 -2.44289207459 --0.846535548568 -2.46014910937 --0.846539229154 -2.47740602494 --0.846545398235 -2.49466323852 --0.84655405581 -2.51192051172 --0.846565157175 -2.52917814255 --0.846578776836 -2.54643583298 --0.846594840288 -2.56369411945 --0.846613436937 -2.58095270395 --0.846634477377 -2.5982119441 --0.846646189689 -2.61742585897 --0.846635684371 -2.63663816452 --0.84661449492 -2.65389728546 --0.846595793963 -2.67115604877 --0.846579566598 -2.68841415644 --0.846565827727 -2.70567208529 --0.846554562449 -2.7229295373 --0.846545770764 -2.74018698931 --0.846539497375 -2.75744402409 --0.846535697579 -2.77470111847 --0.846534386277 -2.79195797443 --0.846535548568 -2.80921500921 --0.846539229154 -2.82647192478 --0.846545383334 -2.84372913837 --0.846554040909 -2.86098635197 --0.846565142274 -2.87824392319 --0.846578776836 -2.89550167322 --0.846594855189 -2.91276007891 --0.846613436937 -2.93001866341 --0.846634477377 -2.94727784395 --0.846646204591 -2.96649169922 --0.846635684371 -2.98570394516 --0.84661449492 -3.0029630661 --0.846595808864 -3.02022182941 --0.8465795964 -3.03747999668 --0.84656585753 -3.05473804474 --0.846554577351 -3.07199549675 --0.846545800567 -3.08925282955 --0.846539512277 -3.10650986433 --0.84653571248 -3.12376695871 --0.846534401178 -3.14102378686 --0.846535548568 --3.12490445375 --0.846539214253 --3.10764753818 --0.846545338631 --3.09039032459 --0.846554011106 --3.073133111 --0.846565157175 --3.05587548018 --0.846578776836 --3.03861767054 --0.846594840288 --3.02135932446 --0.846613436937 --3.00410079956 --0.846634462476 --2.98684155941 --0.846646189689 --2.96762770414 --0.846635684371 --2.94841551781 --0.84661449492 --2.93115639687 --0.846595808864 --2.91389763355 --0.846579581499 --2.89663946628 --0.846565827727 --2.87938141823 --0.846554547548 --2.86212396622 --0.846545770764 --2.84486663342 --0.846539467573 --2.82760959864 --0.846535652876 --2.81035250425 --0.846534371376 --2.79309564829 --0.846535548568 --2.77583861351 --0.846539214253 --2.75858175754 --0.846545383334 --2.74132454395 --0.84655405581 --2.72406733036 --0.846565142274 --2.70680963993 --0.846578761935 --2.68955183029 --0.846594840288 --2.67229354382 --0.846613436937 --2.65503501892 --0.846634462476 --2.63777577877 --0.846646189689 --2.61856180429 --0.846635684371 --2.59934955835 --0.84661449492 --2.58209055662 --0.846595808864 --2.5648317337 --0.846579581499 --2.54757356644 --0.846565827727 --2.53031563759 --0.846554547548 --2.51305818558 --0.846545770764 --2.49580079317 --0.846539482474 --2.47854369879 --0.846535682678 --2.4612866044 --0.846534386277 --2.44402980804 --0.846535548568 --2.42677277326 --0.846539214253 --2.40951585769 --0.846545353532 --2.3922586441 --0.846554026008 --2.37500137091 --0.846565157175 --2.35774374008 --0.846578776836 --2.34048604965 --0.84659487009 --2.32322776318 --0.846613466739 --2.30596917868 --0.846634477377 --2.28870993853 --0.846646204591 --2.26949602366 --0.846635699272 --2.25028371811 --0.84661449492 --2.23302465677 --0.846595793963 --2.21576589346 --0.846579581499 --2.1985077858 --0.846565827727 --2.18124985695 --0.846554547548 --2.16399234533 --0.846545770764 --2.14673489332 --0.846539482474 --2.12947785855 --0.846535697579 --2.11222076416 --0.846534401178 --2.0949639082 --0.846535563469 --2.07770687341 --0.846539244055 --2.06044995785 --0.846545368433 --2.04319274426 --0.846554026008 --2.02593553066 --0.846565142274 --2.00867795944 --0.846578776836 --1.99142020941 --0.846594884991 --1.97416186333 --0.846613466739 --1.95690330863 --0.846634477377 --1.93964406848 --0.846646189689 --1.92043018341 --0.84663566947 --1.90121793747 --0.84661449492 --1.88395884633 --0.846595808864 --1.86670008302 --0.846579581499 --1.84944191575 --0.846565827727 --1.8321839273 --0.846554547548 --1.81492647529 --0.846545770764 --1.79766908288 --0.846539482474 --1.7804120481 --0.846535697579 --1.76315492391 --0.846534386277 --1.74589806795 --0.846535518765 --1.72864103317 --0.846539199352 --1.71138414741 --0.846545383334 --1.69412696362 --0.846554040909 --1.67686975002 --0.846565142274 --1.6596121192 --0.846578776836 --1.64235433936 --0.846594855189 --1.62509599328 --0.846613422036 --1.60783740878 --0.846634417772 --1.59057819843 --0.846646159887 --1.57136431337 --0.846635684371 --1.55215203762 --0.84661449492 --1.53489297629 --0.846595793963 --1.51763421297 --0.846579566598 --1.5003760457 --0.846565812826 --1.48311808705 --0.84655456245 --1.46586060524 --0.846545770764 --1.44860318303 --0.846539482474 --1.43134614825 --0.846535697579 --1.41408908367 --0.846534386277 --1.39683225751 --0.846535563469 --1.37957522273 --0.846539229154 --1.36231830717 --0.846545353532 --1.34506109357 --0.846554026008 --1.32780387997 --0.846565157175 --1.31054621935 --0.846578791737 --1.29328846931 --0.846594884991 --1.27603018284 --0.846613466739 --1.25877159834 --0.846634477377 --1.24151235819 --0.846646189689 --1.22229847312 --0.84663566947 --1.20308619737 --0.84661449492 --1.18582710624 --0.846595793963 --1.16856834293 --0.846579566598 --1.15131020546 --0.846565842628 --1.13405224681 --0.846554562449 --1.1167947948 --0.846545770764 --1.09953737259 --0.846539497375 --1.08228033781 --0.846535697579 --1.06502324342 --0.846534386277 --1.04776635766 --0.846535563469 --1.03050932288 --0.846539229154 --1.01325240731 --0.846545383334 --0.995995208622 --0.84655405581 --0.97873802483 --0.846565157175 --0.961480364203 --0.846578776836 --0.944222599268 --0.84659487009 --0.926964297891 --0.846613466739 --0.909705728292 --0.846634477377 --0.892446503043 --0.846646204591 --0.873232617974 --0.846635699272 --0.854020372033 --0.846614509821 --0.836761295795 --0.846595808864 --0.819502517581 --0.846579581499 --0.802244350314 --0.846565842628 --0.784986376762 --0.846554562449 --0.76772890985 --0.846545755863 --0.750471502542 --0.846539482474 --0.733214467764 --0.84653571248 --0.715957388282 --0.846534401178 --0.698700547218 --0.846535548568 --0.681443497539 --0.846539229154 --0.664186596871 --0.846545398235 --0.646929398179 --0.84655405581 --0.629672184586 --0.846565157175 --0.612414553762 --0.846578776836 --0.595156788826 --0.846594840288 --0.577898457646 --0.846613436937 --0.560639888048 --0.846634477377 --0.5433806777 --0.846646189689 --0.524166792631 --0.846635684371 --0.504954516888 --0.84661449492 --0.487695433199 --0.846595793963 --0.470436654985 --0.846579566598 --0.453178495169 --0.846565827727 --0.435920536518 --0.846554562449 --0.418663077057 --0.846545770764 --0.401405669749 --0.846539497375 --0.384148634971 --0.846535697579 --0.366891540587 --0.846534386277 --0.349634692073 --0.846535548568 --0.332377657294 --0.846539229154 --0.315120741725 --0.846545383334 --0.297863528132 --0.846554040909 --0.28060631454 --0.846565142274 --0.263348676264 --0.846578776836 --0.246090915054 --0.846594855189 --0.228832606226 --0.846613436937 --0.211574051529 --0.846634477377 --0.19431482628 --0.846646204591 --0.175100926309 --0.829466477036 --0.155884072185 --0.829445585608 --0.138625018299 --0.829427137971 --0.121366271749 --0.829411134124 --0.104108134285 --0.829397544265 --0.0868501868099 --0.829386383295 --0.0695927292109 --0.829377755523 --0.0523353405297 --0.82937155664 --0.0350783234462 --0.829367801547 --0.0178212451283 --0.829366520047 --0.000564414774997 --0.829367667437 -0.016692598816 --0.829371318221 -0.033949488774 --0.829377382994 -0.0512066828087 --0.829385921359 -0.0684638759121 --0.829396903515 -0.0857214983553 --0.829410359264 -0.102979244664 --0.829426184297 -0.120237534866 --0.829444512725 -0.137496072799 --0.829465284944 -0.154755286872 --0.829476848244 -0.173969350755 --0.829466477036 -0.193181782961 --0.829445570707 -0.210440844298 --0.82942712307 -0.227699588984 --0.829411119223 -0.244957718998 --0.829397544265 -0.262215659022 --0.829386413098 -0.279473111034 --0.829377755523 -0.29673050344 --0.829371541739 -0.313987523317 --0.829367801547 -0.331244602799 --0.829366520047 -0.348501428962 --0.829367652536 -0.365758433938 --0.829371288419 -0.383015334606 --0.829377397895 -0.400272548199 --0.829385951161 -0.41752974689 --0.829396873712 -0.434787355363 --0.82941031456 -0.452045083046 --0.829426199198 -0.469303384423 --0.829444557428 -0.48656193167 --0.829465299845 -0.503821127117 --0.829476878047 -0.52303519845 --0.829466506839 -0.542247638107 --0.829445585608 -0.55950666964 --0.829427137971 -0.576765432954 --0.829411119223 -0.594023600221 --0.829397544265 -0.611281529069 --0.829386413098 -0.628538966179 --0.829377770424 -0.645796358585 --0.82937155664 -0.663053393364 --0.829367801547 -0.680310487747 --0.829366520047 -0.697567299009 --0.829367652536 -0.714824303985 --0.829371288419 -0.732081189752 --0.829377368092 -0.749338388443 --0.829385921359 -0.766595587135 --0.829396888614 -0.783853203058 --0.829410329461 -0.801110967994 --0.829426229 -0.818369269371 --0.829444587231 -0.835627794266 --0.829465314746 -0.852887004614 --0.829476863146 -0.872101068497 --0.829466491938 -0.891313493252 --0.82944560051 -0.908572539687 --0.829427137971 -0.925831273198 --0.829411119223 -0.943089425564 --0.829397529364 -0.960347369313 --0.829386398197 -0.977604821324 --0.829377755523 -0.994862213729 --0.82937155664 -1.01211923361 --0.829367816448 -1.02937632799 --0.829366520047 -1.04663312435 --0.829367682338 -1.06389012933 --0.829371318221 -1.0811470449 --0.82937733829 -1.09840422868 --0.829385891557 -1.11566141247 --0.829396873712 -1.1329190433 --0.82941031456 -1.15017679334 --0.829426229 -1.16743507982 --0.829444572329 -1.18469363451 --0.829465299845 -1.20195284486 --0.829476878047 -1.22116687894 --0.829466491937 -1.2403793335 --0.829445585608 -1.25763842463 --0.829427137971 -1.27489715814 --0.829411119223 -1.29215526581 --0.829397544265 -1.30941319466 --0.829386413098 -1.32667064667 --0.829377755523 -1.34392803907 --0.82937155664 -1.36118507385 --0.829367816448 -1.37844216824 --0.829366505146 -1.3956989944 --0.829367622733 -1.41295599938 --0.829371273517 -1.43021288514 --0.829377397895 -1.44747009873 --0.829385921359 -1.46472731232 --0.82939684391 -1.48198491335 --0.82941031456 -1.49924266338 --0.829426199198 -1.51650094986 --0.829444527626 -1.53375947476 --0.829465270042 -1.55101871491 --0.829476833343 -1.57023277879 --0.829466491938 -1.58944517374 --0.829445615411 -1.60670420528 --0.82942712307 -1.62396296859 --0.829411104322 -1.64122113585 --0.829397544265 -1.65847909451 --0.829386413098 -1.67573654652 --0.829377770424 -1.69299393892 --0.82937155664 -1.7102509439 --0.829367816448 -1.72750800848 --0.829366520047 -1.74476480484 --0.829367667437 -1.76202183962 --0.829371318221 -1.77927875519 --0.829377368092 -1.79653590917 --0.829385921359 -1.81379309296 --0.829396903515 -1.83105072379 --0.829410359264 -1.84830847382 --0.829426243901 -1.8655667603 --0.829444587231 -1.8828253448 --0.829465299845 -1.90008455515 --0.829476833343 -1.91929858923 --0.829466462135 -1.93851104379 --0.829445585608 -1.95577010512 --0.829427137971 -1.97302883863 --0.829411119223 -1.9902869761 --0.829397559166 -2.00754496455 --0.829386427999 -2.02480244637 --0.829377755523 -2.04205977917 --0.82937155664 -2.05931675434 --0.829367816448 -2.07657384872 --0.829366520047 -2.09383064509 --0.829367682338 -2.11108767987 --0.829371333122 -2.12834459543 --0.829377412796 -2.14560174942 --0.829385951161 -2.16285896301 --0.829396888614 -2.18011659384 --0.829410344362 -2.19737434387 --0.829426243901 -2.21463263035 --0.829444587231 -2.23189115524 --0.829465314746 -2.24915039539 --0.829476892948 -2.26836448908 --0.82946652174 -2.28757691384 --0.829445585608 -2.30483591557 --0.82942712307 -2.32209467888 --0.829411119223 -2.33935284615 --0.829397559166 -2.356610775 --0.829386427999 -2.37386822701 --0.829377770424 -2.39112567902 --0.829371571541 -2.40838271379 --0.829367816448 -2.42563968897 --0.829366520047 -2.44289648533 --0.829367652536 -2.46015352011 --0.829371288419 -2.47741043568 --0.829377368092 -2.49466764927 --0.829385921359 -2.51192486286 --0.829396903515 -2.52918249369 --0.829410359264 -2.54644018412 --0.829426229 -2.56369847059 --0.829444572329 -2.58095699549 --0.829465314746 -2.59821617603 --0.829476848244 -2.61743026972 --0.829466477036 -2.63664275408 --0.829445585608 -2.65390187502 --0.82942712307 -2.67116057873 --0.829411119223 -2.68841862679 --0.829397559166 -2.70567655564 --0.829386427999 -2.72293400765 --0.829377770424 -2.74019145966 --0.829371571541 -2.75744849443 --0.829367816448 -2.77470552921 --0.829366520047 -2.79196238518 --0.829367667437 -2.80921941995 --0.829371318221 -2.82647627592 --0.829377412796 -2.84373342991 --0.829385951161 -2.8609906435 --0.829396888614 -2.87824827433 --0.829410344362 -2.89550596476 --0.829426214099 -2.91276431084 --0.829444542527 -2.93002295494 --0.829465299845 -2.94728213549 --0.829476863146 -2.96649610996 --0.829466477036 -2.98570853472 --0.829445585608 -3.00296765566 --0.829427137971 -3.02022641897 --0.829411134124 -3.03748452663 --0.829397544265 -3.05474251509 --0.829386383295 -3.0719999671 --0.829377755523 -3.0892572999 --0.82937155664 -3.10651433468 --0.829367801547 -3.12377142906 --0.829366520047 -3.14102825721 --0.829367667437 --3.12490004301 --0.829371318221 --3.10764318704 --0.829377382994 --3.09038597346 --0.829385921359 --3.07312875986 --0.829396903515 --3.05587112904 --0.829410359264 --3.0386133194 --0.829426184297 --3.02135503292 --0.829444512725 --3.00409650803 --0.829465284944 --2.98683726787 --0.829476848244 --2.9676232934 --0.829466477036 --2.94841092825 --0.829445570707 --2.93115180731 --0.82942712307 --2.913893044 --0.829411119223 --2.89663487673 --0.829397544265 --2.87937688827 --0.829386413098 --2.86211943626 --0.829377755523 --2.84486210346 --0.829371541739 --2.82760512829 --0.829367801547 --2.8103480339 --0.829366520047 --2.79309123754 --0.829367652536 --2.77583426237 --0.829371288419 --2.7585773468 --0.829377397895 --2.74132013321 --0.829385951161 --2.72406297922 --0.829396873712 --2.7068053484 --0.82941031456 --2.68954753876 --0.829426199198 --2.67228925228 --0.829444557428 --2.65503072739 --0.829465299845 --2.63777148723 --0.829476878047 --2.61855739355 --0.829466506839 --2.5993449688 --0.829445585608 --2.58208596706 --0.829427137971 --2.56482720375 --0.829411119223 --2.54756903649 --0.829397544265 --2.53031110764 --0.829386413098 --2.51305365562 --0.829377770424 --2.49579632282 --0.82937155664 --2.47853928804 --0.829367801547 --2.46128219366 --0.829366520047 --2.4440253973 --0.829367652536 --2.42676830292 --0.829371288419 --2.40951138735 --0.829377368092 --2.39225423336 --0.829385921359 --2.37499701977 --0.829396888614 --2.35773938894 --0.829410329461 --2.34048169851 --0.829426229 --2.32322341204 --0.829444587231 --2.30596488714 --0.829465314746 --2.28870570659 --0.829476863146 --2.26949161291 --0.829466491938 --2.25027912855 --0.82944560051 --2.23302012682 --0.829427137971 --2.21576142311 --0.829411119223 --2.19850325584 --0.829397529364 --2.181245327 --0.829386398197 --2.16398787498 --0.829377755523 --2.14673042297 --0.82937155664 --2.1294733882 --0.829367816448 --2.11221635342 --0.829366520047 --2.09495949745 --0.829367682338 --2.07770246268 --0.829371318221 --2.06044560671 --0.82937733829 --2.04318845272 --0.829385891557 --2.02593123913 --0.829396873712 --2.0086736083 --0.82941031456 --1.99141585827 --0.829426229 --1.97415754199 --0.829444572329 --1.9568990171 --0.829465299845 --1.93963980675 --0.829476878047 --1.92042574287 --0.829466491937 --1.90121334791 --0.829445585608 --1.88395428657 --0.829427137971 --1.86669552326 --0.829411119223 --1.8494373858 --0.829397544265 --1.83217942715 --0.829386413098 --1.81492197513 --0.829377755523 --1.79766458273 --0.82937155664 --1.78040757776 --0.829367816448 --1.76315048337 --0.829366505146 --1.7458936274 --0.829367622733 --1.72863662243 --0.829371273517 --1.71137976647 --0.829377397895 --1.69412261248 --0.829385921359 --1.67686539888 --0.82939684391 --1.65960776806 --0.82941031456 --1.64235004782 --0.829426199198 --1.62509173155 --0.829444527626 --1.60783317685 --0.829465270042 --1.5905739665 --0.829476833343 --1.57135990262 --0.829466491938 --1.55214747787 --0.829445615411 --1.53488841653 --0.82942712307 --1.51762965321 --0.829411104322 --1.50037151575 --0.829397544265 --1.4831135869 --0.829386413098 --1.46585613489 --0.829377770424 --1.44859871268 --0.82937155664 --1.4313416779 --0.829367816448 --1.41408464312 --0.829366520047 --1.39682784676 --0.829367667437 --1.37957081199 --0.829371318221 --1.36231389642 --0.829377368092 --1.34505671263 --0.829385921359 --1.32779952883 --0.829396903515 --1.31054189801 --0.829410359264 --1.29328414798 --0.829426243901 --1.2760258615 --0.829444587231 --1.25876730681 --0.829465299845 --1.24150809646 --0.829476833343 --1.22229403258 --0.829466462135 --1.20308157802 --0.829445585608 --1.18582251668 --0.829427137971 --1.16856378317 --0.829411119223 --1.15130567551 --0.829397559166 --1.13404774666 --0.829386427999 --1.11679029464 --0.829377755523 --1.09953290224 --0.82937155664 --1.08227589727 --0.829367816448 --1.06501880288 --0.829366520047 --1.04776194692 --0.829367682338 --1.03050494194 --0.829371333122 --1.01324805618 --0.829377412796 --0.995990872383 --0.829385951161 --0.978733673691 --0.829396888614 --0.961476042867 --0.829410344362 --0.944218307734 --0.829426243901 --0.926960006356 --0.829444587231 --0.909701451659 --0.829465314746 --0.892442256212 --0.829476892948 --0.87322820723 --0.82946652174 --0.854015782476 --0.829445585608 --0.83675673604 --0.82942712307 --0.819497972727 --0.829411119223 --0.802239820361 --0.829397559166 --0.784981876612 --0.829386427999 --0.7677244246 --0.829377770424 --0.750467017293 --0.829371571541 --0.733209997416 --0.829367816448 --0.715952932835 --0.829366520047 --0.698696106672 --0.829367652536 --0.681439101696 --0.829371288419 --0.664182201028 --0.829377368092 --0.646925002337 --0.829385921359 --0.629667833447 --0.829396903515 --0.612410217524 --0.829410359264 --0.595152467489 --0.829426229 --0.577894166112 --0.829444572329 --0.560635611415 --0.829465314746 --0.543376415968 --0.829476848244 --0.524162366986 --0.829466477036 --0.50494992733 --0.829445585608 --0.487690858543 --0.82942712307 --0.470432110131 --0.829411119223 --0.453173972666 --0.829397559166 --0.435916021466 --0.829386427999 --0.418658576906 --0.829377770424 --0.401401199401 --0.829371571541 --0.384144186974 --0.829367816448 --0.366887100041 --0.829366520047 --0.349630266428 --0.829367667437 --0.332373254001 --0.829371318221 --0.315116353333 --0.829377412796 --0.297859162092 --0.829385951161 --0.280601978302 --0.829396888614 --0.263344362378 --0.829410344362 --0.246086616069 --0.829426214099 --0.228828310966 --0.829444542527 --0.211569771171 --0.829465299845 --0.194310564548 --0.829476863146 --0.17509650439 --0.812276124954 --0.155879437923 --0.812255531549 --0.138620402664 --0.812237352133 --0.121361674741 --0.812221542001 --0.104103557765 --0.812208145857 --0.0868456270546 --0.812197163701 --0.0695881899446 --0.812188625336 --0.0523308198899 --0.812182500958 --0.0350738200359 --0.812178820371 --0.0178167605773 --0.812177568674 --0.000559948384763 --0.812178701162 -0.0166970468126 --0.812182292342 -0.0339539190754 --0.81218829751 -0.051211095415 --0.812196716666 -0.0684682689607 --0.812207549811 -0.0857258737087 --0.812220811844 -0.102983601391 --0.81223641336 -0.120241876691 --0.812254503369 -0.137500397861 --0.812274992466 -0.154759593308 --0.812286391854 -0.173973824828 --0.812276124954 -0.193186417222 --0.812255516648 -0.210445452482 --0.812237337232 -0.227704178542 --0.8122215271 -0.24496229738 --0.812208145857 -0.262220226228 --0.812197178602 -0.279477663338 --0.812188640237 -0.296735025943 --0.812182530761 -0.313992030919 --0.812178835273 -0.33124910295 --0.812177553773 -0.34850589931 --0.81217867136 -0.365762881935 --0.81218226254 -0.383019760251 --0.812188282609 -0.400276951492 --0.812196701765 -0.417534127831 --0.812207490206 -0.434791728854 --0.812220752239 -0.452049449086 --0.812236428261 -0.469307728112 --0.812254548073 -0.486566260457 --0.812274992466 -0.503825441003 --0.812286406755 -0.5230396837 --0.812276169658 -0.542252287269 --0.812255546451 -0.559511303902 --0.812237337232 -0.576770052314 --0.8122215271 -0.594028174877 --0.812208160758 -0.611286073923 --0.812197193503 -0.628543511033 --0.812188655138 -0.645800888538 --0.812182530761 -0.663057893515 --0.812178820372 -0.680314958096 --0.812177538872 -0.697571754456 --0.81217867136 -0.714828759432 --0.81218226254 -0.732085630297 --0.812188267707 -0.749342799187 --0.812196686864 -0.766599968076 --0.812207490206 -0.783857569099 --0.812220752239 -0.801115304232 --0.812236428261 -0.818373575807 --0.812254548073 -0.8356320858 --0.812275007367 -0.852891296148 --0.812286391854 -0.872105538845 --0.812276124954 -0.891318127513 --0.812255531549 -0.908577159047 --0.812237352133 -0.925835862756 --0.812221542001 -0.943093985319 --0.812208160758 -0.960351914168 --0.812197193503 -0.977609351277 --0.812188640237 -0.99486671388 --0.812182515859 -1.01212370395 --0.812178820372 -1.02938076854 --0.812177538872 -1.0466375649 --0.812178686261 -1.06389459968 --0.812182277441 -1.08115151525 --0.812188252806 -1.09840866923 --0.812196671963 -1.11566582322 --0.812207490206 -1.13292342424 --0.812220752239 -1.15018114447 --0.812236428261 -1.16743943096 --0.812254533172 -1.18469795585 --0.812274992466 -1.20195713639 --0.812286421657 -1.22117137909 --0.812276169658 -1.24038398266 --0.812255546451 -1.25764301419 --0.812237352133 -1.2749017179 --0.812221542001 -1.29215982556 --0.812208160758 -1.30941775441 --0.812197193503 -1.32667520643 --0.812188640237 -1.34393259883 --0.812182515859 -1.3611896038 --0.812178820372 -1.37844666839 --0.81217752397 -1.39570346475 --0.812178656459 -1.41296043992 --0.81218226254 -1.43021729588 --0.812188282609 -1.44747447967 --0.812196686864 -1.46473166347 --0.812207460404 -1.48198926449 --0.812220752239 -1.49924701452 --0.812236443162 -1.5165052712 --0.812254533172 -1.53376379609 --0.812274992466 -1.55102300644 --0.812286391854 -1.57023721934 --0.812276139855 -1.5894498229 --0.812255516648 -1.60670885444 --0.812237307429 -1.62396758795 --0.8122215271 -1.64122572541 --0.812208175659 -1.65848365426 --0.812197208404 -1.67574107647 --0.812188655138 -1.69299843907 --0.812182515859 -1.71025544405 --0.812178820372 -1.72751250863 --0.812177538872 -1.74476930499 --0.81217867136 -1.76202630996 --0.812182277441 -1.77928319573 --0.812188282609 -1.79654034972 --0.812196701765 -1.81379750371 --0.812207505107 -1.83105510473 --0.812220782042 -1.84831282496 --0.812236443162 -1.86557111144 --0.812254548073 -1.88282966614 --0.812274977565 -1.90008884669 --0.812286362052 -1.91930305958 --0.812276139855 -1.93851566315 --0.812255546451 -1.95577472448 --0.812237352133 -1.973033458 --0.812221542001 -1.99029153585 --0.812208160758 -2.0075494647 --0.812197193503 -2.02480691672 --0.812188640237 -2.04206424952 --0.812182515859 -2.05932128429 --0.812178820372 -2.07657837868 --0.812177538872 -2.09383511543 --0.812178686261 -2.11109209061 --0.812182292342 -2.12834900618 --0.81218829751 -2.14560621977 --0.812196716666 -2.16286343336 --0.812207505107 -2.18012100458 --0.81222076714 -2.19737869501 --0.812236443162 -2.21463698149 --0.812254548073 -2.23189550638 --0.812275007367 -2.24915468693 --0.812286421657 -2.26836889982 --0.812276169658 -2.28758150339 --0.812255531549 -2.30484050512 --0.812237337232 -2.32209926844 --0.812221542001 -2.3393574357 --0.812208175659 -2.35661530495 --0.812197208404 -2.37387275696 --0.812188655138 -2.39113020897 --0.812182530761 -2.40838718414 --0.812178820372 -2.42564415932 --0.812177538872 -2.44290095568 --0.81217867136 -2.46015793085 --0.81218226254 -2.47741478682 --0.812188252806 -2.49467200041 --0.812196671963 -2.511929214 --0.812207505107 -2.52918684483 --0.812220782042 -2.54644453526 --0.812236458063 -2.56370282173 --0.812254562974 -2.58096134663 --0.812275007367 -2.59822052717 --0.812286391854 -2.61743479967 --0.812276139855 -2.63664740324 --0.812255531549 -2.65390646458 --0.812237337232 -2.67116516829 --0.812221542001 -2.68842321634 --0.812208160758 -2.70568114519 --0.812197193503 -2.7229385972 --0.812188655138 -2.74019598961 --0.812182530761 -2.75745296478 --0.812178835273 -2.77470999956 --0.812177553773 -2.79196685553 --0.812178686261 -2.8092238903 --0.812182292342 -2.82648074627 --0.81218829751 -2.84373784065 --0.812196701765 -2.86099499464 --0.812207505107 -2.87825262547 --0.812220782042 -2.8955103755 --0.812236443162 -2.91276866197 --0.812254533172 -2.93002724647 --0.812274977565 -2.94728648662 --0.812286376953 -2.96650063992 --0.812276124954 -2.98571318388 --0.812255531549 -3.00297224522 --0.812237352133 -3.02023100853 --0.812221542001 -3.03748911619 --0.812208145857 -3.05474704504 --0.812197163701 -3.07200443744 --0.812188625336 -3.08926177025 --0.812182500958 -3.10651880503 --0.812178820371 -3.12377589941 --0.812177568674 -3.14103272756 --0.812178701162 --3.12489557266 --0.812182292342 --3.1076387167 --0.81218829751 --3.09038156271 --0.812196716666 --3.07312440872 --0.812207549811 --3.0558667779 --0.812220811844 --3.03860896826 --0.81223641336 --3.02135074139 --0.812254503369 --3.00409221649 --0.812274992466 --2.98683297634 --0.812286391854 --2.96761882305 --0.812276124954 --2.94840627909 --0.812255516648 --2.93114721775 --0.812237337232 --2.91388845444 --0.8122215271 --2.89663028717 --0.812208145857 --2.87937235832 --0.812197178602 --2.86211496591 --0.812188640237 --2.84485763311 --0.812182530761 --2.82760059834 --0.812178835273 --2.81034350395 --0.812177553773 --2.7930867672 --0.81217867136 --2.77582979202 --0.81218226254 --2.75857287645 --0.812188282609 --2.74131566286 --0.812196701765 --2.72405850887 --0.812207490206 --2.70680093765 --0.812220752239 --2.68954318762 --0.812236428261 --2.67228490114 --0.812254548073 --2.65502637625 --0.812274992466 --2.6377671957 --0.812286406755 --2.61855298281 --0.812276169658 --2.59934037924 --0.812255546451 --2.58208137751 --0.812237337232 --2.56482261419 --0.8122215271 --2.54756444693 --0.812208160758 --2.53030657768 --0.812197193503 --2.51304912567 --0.812188655138 --2.49579173326 --0.812182530761 --2.47853475809 --0.812178820372 --2.46127772331 --0.812177538872 --2.44402092695 --0.81217867136 --2.42676389218 --0.81218226254 --2.40950703621 --0.812188267707 --2.39224988222 --0.812196686864 --2.37499266863 --0.812207490206 --2.3577350378 --0.812220752239 --2.34047734737 --0.812236428261 --2.3232190609 --0.812254548073 --2.305960536 --0.812275007367 --2.28870135546 --0.812286391854 --2.26948714256 --0.812276124954 --2.250274539 --0.812255531549 --2.23301547766 --0.812237352133 --2.21575677395 --0.812221542001 --2.19849866629 --0.812208160758 --2.18124073744 --0.812197193503 --2.16398328543 --0.812188640237 --2.14672589302 --0.812182515859 --2.12946891785 --0.812178820372 --2.11221194267 --0.812177538872 --2.09495508671 --0.812178686261 --2.07769799233 --0.812182277441 --2.06044113636 --0.812188252806 --2.04318404198 --0.812196671963 --2.02592688799 --0.812207490206 --2.00866919756 --0.812220752239 --1.99141144752 --0.812236428261 --1.97415319085 --0.812254533172 --1.95689466596 --0.812274992466 --1.93963551521 --0.812286421657 --1.92042130232 --0.812276169658 --1.90120869875 --0.812255546451 --1.88394963741 --0.812237352133 --1.8666909039 --0.812221542001 --1.84943279624 --0.812208160758 --1.83217486739 --0.812197193503 --1.81491744519 --0.812188640237 --1.79766008258 --0.812182515859 --1.7804030776 --0.812178820372 --1.76314598322 --0.81217752397 --1.74588915706 --0.812178656459 --1.72863218189 --0.81218226254 --1.71137532592 --0.812188282609 --1.69411817193 --0.812196686864 --1.67686098814 --0.812207460404 --1.65960338712 --0.812220752239 --1.64234566688 --0.812236443162 --1.62508738041 --0.812254533172 --1.60782888532 --0.812274992466 --1.59056967497 --0.812286391854 --1.57135543227 --0.812276139855 --1.55214285851 --0.812255516648 --1.53488382697 --0.812237307429 --1.51762506366 --0.8122215271 --1.500366956 --0.812208175659 --1.48310905695 --0.812197208404 --1.46585160494 --0.812188655138 --1.44859421253 --0.812182515859 --1.43133720755 --0.812178820372 --1.41408017278 --0.812177538872 --1.39682337642 --0.81217867136 --1.37956637144 --0.812182277441 --1.36230948567 --0.812188282609 --1.34505230188 --0.812196701765 --1.32779511809 --0.812207505107 --1.31053751707 --0.812220782042 --1.29327979684 --0.812236443162 --1.27602151037 --0.812254548073 --1.25876298547 --0.812274977565 --1.24150380493 --0.812286362052 --1.22228956223 --0.812276139855 --1.20307695866 --0.812255546451 --1.18581792712 --0.812237352133 --1.16855922341 --0.812221542001 --1.15130111575 --0.812208160758 --1.1340431869 --0.812197193503 --1.11678573489 --0.812188640237 --1.09952837229 --0.812182515859 --1.08227139711 --0.812178820372 --1.06501430273 --0.812177538872 --1.04775747657 --0.812178686261 --1.0305005014 --0.812182292342 --1.01324364543 --0.81218829751 --0.99598647654 --0.812196716666 --0.978729277849 --0.812207505107 --0.961471676826 --0.81222076714 --0.944213956595 --0.812236443162 --0.926955655217 --0.812254548073 --0.909697115421 --0.812275007367 --0.892437934875 --0.812286421657 --0.873223721981 --0.812276169658 --0.854011118412 --0.812255531549 --0.836752101779 --0.812237337232 --0.819493368268 --0.812221542001 --0.802235245704 --0.812208175659 --0.784977331757 --0.812197208404 --0.767719894647 --0.812188655138 --0.750462517142 --0.812182530761 --0.733205527067 --0.812178820372 --0.715948462486 --0.812177538872 --0.698691636324 --0.81217867136 --0.68143466115 --0.81218226254 --0.664177790284 --0.812188252806 --0.646920591593 --0.812196671963 --0.629663422704 --0.812207505107 --0.612405836582 --0.812220782042 --0.595148101449 --0.812236458063 --0.577889829874 --0.812254562974 --0.560631290078 --0.812275007367 --0.543372094631 --0.812286391854 --0.524157881737 --0.812276139855 --0.504945285618 --0.812255531549 --0.487686246634 --0.812237337232 --0.470427513122 --0.812221542001 --0.45316939801 --0.812208160758 --0.435911476612 --0.812197193503 --0.418654054403 --0.812188655138 --0.401396684349 --0.812182530761 --0.384139679372 --0.812178835273 --0.366882622242 --0.812177553773 --0.349625810981 --0.812178686261 --0.332368806005 --0.812182292342 --0.315111927688 --0.81218829751 --0.297854758799 --0.812196701765 --0.280597597361 --0.812207505107 --0.263339996338 --0.812220782042 --0.246082257479 --0.812236443162 --0.228823974729 --0.812254533172 --0.211565453559 --0.812274977565 --0.194306258112 --0.812286376953 --0.175092030317 --0.792548984289 --0.155873045325 --0.792528688908 --0.138614024967 --0.792510807514 --0.121355315671 --0.792495280504 --0.104097232223 --0.792482107877 --0.0868393294513 --0.792471304536 --0.0695819184184 --0.792462930083 --0.052324575372 --0.792456924915 --0.0350676011294 --0.792453274131 --0.0178105658852 --0.792452022433 --0.000553778838367 --0.792453154922 -0.016703190282 --0.792456686497 -0.0339600369334 --0.792462557554 -0.051217187196 --0.792470872402 -0.0684743383899 --0.792481556535 -0.0857319198549 --0.792494550348 -0.102989617735 --0.792509913445 -0.120247868821 --0.792527735233 -0.137506373227 --0.792547866702 -0.154765538871 --0.792559087277 -0.173979990184 --0.792548984289 -0.193192813545 --0.792528703809 -0.210451826453 --0.792510822415 -0.227710526437 --0.792495250702 -0.244968622923 --0.792482092977 -0.26222653687 --0.792471319437 -0.279483936727 --0.792462930083 -0.296741269529 --0.792456924915 -0.313998259604 --0.79245325923 -0.331255301833 --0.792451992631 -0.348512083292 --0.792453125119 -0.365769051015 --0.792456656694 -0.383025892079 --0.792462557554 -0.400283046067 --0.792470827699 -0.417540192604 --0.792481467128 -0.434797771275 --0.792494535446 -0.452055476605 --0.792509928346 -0.469313725829 --0.792527735233 -0.486572228372 --0.792547851801 -0.503831394017 --0.792559072375 -0.52304585278 --0.79254899919 -0.542258679867 --0.79252871871 -0.5595176965 --0.792510807514 -0.576776400208 --0.792495250702 -0.594034478068 --0.792482107878 -0.611292377114 --0.792471334338 -0.628549799323 --0.792462930083 -0.645807147026 --0.792456910014 -0.663064107299 --0.79245325923 -0.680321127176 --0.792451992631 -0.697577923536 --0.792453125119 -0.71483489871 --0.792456656694 -0.732091739774 --0.792462527752 -0.749348893762 --0.792470797896 -0.766606032848 --0.792481467128 -0.783863604069 --0.792494535446 -0.8011213094 --0.792509943247 -0.818379566074 --0.792527750134 -0.835638046265 --0.792547866702 -0.852897211909 --0.792559072375 -0.872111678124 --0.792548969388 -0.89132450521 --0.792528703809 -0.908583521843 --0.792510822415 -0.92584221065 --0.792495265603 -0.943100318313 --0.792482122779 -0.96035823226 --0.792471349239 -0.977615624666 --0.792462930083 -0.994872972369 --0.792456910014 -1.01212993264 --0.79245325923 -1.02938696742 --0.792451992631 -1.04664376378 --0.792453125119 -1.06390073895 --0.792456656694 -1.08115759492 --0.792462557554 -1.09841474891 --0.7924708426 -1.11567190289 --0.792481482029 -1.13292947412 --0.792494535446 -1.15018716455 --0.792509928346 -1.16744542122 --0.792527735233 -1.18470391631 --0.792547866702 -1.20196306706 --0.792559087277 -1.22117754817 --0.79254899919 -1.24039036035 --0.79252871871 -1.25764936209 --0.792510822415 -1.2749080658 --0.792495265603 -1.29216614365 --0.792482107878 -1.3094240725 --0.792471334338 -1.32668149471 --0.792462930083 -1.34393885732 --0.792456910014 -1.36119583249 --0.79245325923 -1.37845283747 --0.79245197773 -1.39570960402 --0.792453125119 -1.4129665792 --0.792456686497 -1.43022343516 --0.792462557554 -1.44748058915 --0.792470812798 -1.46473774314 --0.792481452227 -1.48199531436 --0.792494505644 -1.49925303459 --0.792509928346 -1.51651129127 --0.792527750134 -1.53376978636 --0.792547866702 -1.5510289371 --0.792559072375 -1.57024335861 --0.792548954487 -1.5894562006 --0.792528659105 -1.60671523214 --0.792510792613 -1.62397393585 --0.792495250702 -1.64123204351 --0.792482107877 -1.65848994255 --0.792471349239 -1.67574733496 --0.792462930083 -1.69300466776 --0.792456924915 -1.71026167273 --0.79245325923 -1.72751873732 --0.79245197773 -1.74477550387 --0.792453125119 -1.76203244924 --0.792456656694 -1.77928930521 --0.792462557554 -1.7965464592 --0.7924708426 -1.81380358338 --0.792481482029 -1.8310611546 --0.792494535446 -1.84831884504 --0.792509943247 -1.86557710171 --0.792527750134 -1.8828356266 --0.792547851801 -1.90009480715 --0.792559072375 -1.91930925846 --0.79254899919 -1.93852207064 --0.79252871871 -1.95578110218 --0.792510822415 -1.97303980589 --0.792495265603 -1.99029785395 --0.792482107878 -2.00755572319 --0.792471334338 -2.0248131156 --0.792462930083 -2.0420704484 --0.792456910014 -2.05932748318 --0.79245325923 -2.07658457756 --0.792451992631 -2.09384131432 --0.792453125119 -2.11109822988 --0.792456656694 -2.12835508585 --0.792462557554 -2.14561229944 --0.7924708426 -2.16286945343 --0.792481482029 -2.18012702465 --0.792494535446 -2.19738471508 --0.792509928346 -2.21464294195 --0.792527735233 -2.23190146684 --0.792547866702 -2.24916064739 --0.792559087277 -2.2683750987 --0.79254899919 -2.28758794069 --0.79252871871 -2.30484694242 --0.792510837316 -2.32210564613 --0.792495280504 -2.3393637538 --0.792482122779 -2.35662162304 --0.792471349239 -2.37387901545 --0.792462930083 -2.39113640785 --0.792456910014 -2.40839338302 --0.79245325923 -2.4256503582 --0.792451992631 -2.44290715456 --0.792453125119 -2.46016412973 --0.792456656694 -2.47742092609 --0.792462542653 -2.49467808008 --0.792470827699 -2.51193529368 --0.792481482029 -2.5291928649 --0.792494535446 -2.54645055533 --0.792509943247 -2.5637088418 --0.792527750134 -2.58096730709 --0.792547866702 -2.59822648763 --0.792559087277 -2.61744099855 --0.79254899919 -2.63665378094 --0.79252871871 -2.65391278267 --0.792510822415 -2.67117148638 --0.792495265603 -2.68842953443 --0.792482107878 -2.70568746328 --0.792471334338 -2.72294491529 --0.792462930083 -2.74020224809 --0.792456910014 -2.75745922327 --0.79245325923 -2.77471625805 --0.792451992631 -2.79197305441 --0.792453125119 -2.80923002958 --0.792456656694 -2.82648688555 --0.792462542653 -2.84374397993 --0.792470812798 -2.86100107432 --0.792481467128 -2.87825864554 --0.792494535446 -2.89551639557 --0.792509943247 -2.91277468204 --0.792527750134 -2.93003320694 --0.792547851801 -2.94729238748 --0.792559072375 -2.96650677919 --0.792548984289 -2.98571956158 --0.792528688908 -3.00297856331 --0.792510807514 -3.02023732662 --0.792495280504 -3.03749549389 --0.792482107877 -3.05475336313 --0.792471304536 -3.07201069593 --0.792462930083 -3.08926802873 --0.792456924915 -3.10652500391 --0.792453274131 -3.12378209829 --0.792452022433 -3.14103892644 --0.792453154922 --3.12488943338 --0.792456686497 --3.10763257742 --0.792462557554 --3.09037548304 --0.792470872402 --3.07311838865 --0.792481556535 --3.05586075783 --0.792494550348 --3.03860300779 --0.792509913445 --3.02134478092 --0.792527735233 --3.00408625603 --0.792547866702 --2.98682707548 --0.792559087277 --2.96761268378 --0.792548984289 --2.94839990139 --0.792528703809 --2.93114089966 --0.792510822415 --2.91388213634 --0.792495250702 --2.89662396908 --0.792482092977 --2.87936609983 --0.792471319437 --2.86210876703 --0.792462930083 --2.84485143423 --0.792456924915 --2.82759439945 --0.79245325923 --2.81033730507 --0.792451992631 --2.79308056832 --0.792453125119 --2.77582365275 --0.792456656694 --2.75856679678 --0.792462557554 --2.74130958319 --0.792470827699 --2.7240524292 --0.792481467128 --2.70679485798 --0.792494535446 --2.68953716755 --0.792509928346 --2.67227894068 --0.792527735233 --2.65502041578 --0.792547851801 --2.63776123524 --0.792559072375 --2.61854678392 --0.79254899919 --2.59933394194 --0.79252871871 --2.5820749402 --0.792510807514 --2.5648162365 --0.792495250702 --2.54755812883 --0.792482107878 --2.53030025959 --0.792471334338 --2.51304280758 --0.792462930083 --2.49578541517 --0.792456910014 --2.4785284996 --0.79245325923 --2.46127152443 --0.792451992631 --2.44401472807 --0.792453125119 --2.4267577529 --0.792456656694 --2.40950095654 --0.792462527752 --2.39224380255 --0.792470797896 --2.37498658895 --0.792481467128 --2.35772901773 --0.792494535446 --2.3404713273 --0.792509943247 --2.32321304083 --0.792527750134 --2.30595457554 --0.792547866702 --2.28869539499 --0.792559072375 --2.26948094368 --0.792548969388 --2.2502681613 --0.792528703809 --2.23300909996 --0.792510822415 --2.21575039625 --0.792495265603 --2.19849234819 --0.792482122779 --2.18123441934 --0.792471349239 --2.16397696734 --0.792462930083 --2.14671963453 --0.792456910014 --2.12946265936 --0.79245325923 --2.11220568418 --0.792451992631 --2.09494888782 --0.792453125119 --2.07769185305 --0.792456656694 --2.06043499708 --0.792462557554 --2.0431779027 --0.7924708426 --2.02592080831 --0.792481482029 --2.00866317749 --0.792494535446 --1.99140545726 --0.792509928346 --1.97414720059 --0.792527735233 --1.95688870549 --0.792547866702 --1.93962958455 --0.792559087277 --1.92041513324 --0.79254899919 --1.90120229125 --0.79252871871 --1.88394328952 --0.792510822415 --1.86668458581 --0.792495265603 --1.84942647815 --0.792482107878 --1.8321685791 --0.792471334338 --1.8149111867 --0.792462930083 --1.79765385389 --0.792456910014 --1.78039684892 --0.79245325923 --1.76313978434 --0.79245197773 --1.74588301778 --0.792453125119 --1.7286260426 --0.792456686497 --1.71136918664 --0.792462557554 --1.69411206245 --0.792470812798 --1.67685493827 --0.792481452227 --1.65959736705 --0.792494505644 --1.64233964681 --0.792509928346 --1.62508139014 --0.792527750134 --1.60782289505 --0.792547866702 --1.59056371451 --0.792559072375 --1.57134926319 --0.792548954487 --1.55213645101 --0.792528659105 --1.53487744928 --0.792510792613 --1.51761871577 --0.792495250702 --1.5003606379 --0.792482107877 --1.48310276866 --0.792471349239 --1.46584534645 --0.792462930083 --1.44858798385 --0.792456924915 --1.43133100867 --0.79245325923 --1.4140740037 --0.79245197773 --1.39681720734 --0.792453125119 --1.37956023216 --0.792456656694 --1.362303406 --0.792462557554 --1.34504622221 --0.7924708426 --1.32778903842 --0.792481482029 --1.3105314672 --0.792494535446 --1.29327377677 --0.792509943247 --1.2760155201 --0.792527750134 --1.258757025 --0.792547851801 --1.24149787426 --0.792559072375 --1.22228339315 --0.79254899919 --1.20307058096 --0.79252871871 --1.18581157923 --0.792510822415 --1.16855287552 --0.792495265603 --1.15129479766 --0.792482107878 --1.13403686881 --0.792471334338 --1.1167794466 --0.792462930083 --1.0995221436 --0.792456910014 --1.08226516843 --0.79245325923 --1.06500810385 --0.792451992631 --1.04775133729 --0.792453125119 --1.03049436211 --0.792456656694 --1.01323750615 --0.792462557554 --0.995980367064 --0.7924708426 --0.978723213077 --0.792481482029 --0.961465626955 --0.792494535446 --0.944207921624 --0.792509928346 --0.92694966495 --0.792527735233 --0.909691140056 --0.792547866702 --0.892431974411 --0.792559087277 --0.873217537999 --0.79254899919 --0.854004710913 --0.79252871871 --0.836745709181 --0.792510837316 --0.819487005472 --0.792495280504 --0.802228927612 --0.792482122779 --0.784971043467 --0.792471349239 --0.76771363616 --0.792462930083 --0.750456288457 --0.792456910014 --0.733199313283 --0.79245325923 --0.715942263603 --0.792451992631 --0.698685467243 --0.792453125119 --0.68142850697 --0.792456656694 --0.664171665907 --0.792462542653 --0.646914511919 --0.792470827699 --0.629657357931 --0.792481482029 --0.61239978671 --0.792494535446 --0.59514208138 --0.792509943247 --0.577883839607 --0.792527750134 --0.560625329614 --0.792547866702 --0.543366149068 --0.792559087277 --0.524151697755 --0.79254899919 --0.50493888557 --0.79252871871 --0.487679876387 --0.792510822415 --0.470421157777 --0.792495265603 --0.453163072467 --0.792482107878 --0.435905180871 --0.792471334338 --0.418647781015 --0.792462930083 --0.401390433311 --0.792456910014 --0.384133450687 --0.79245325923 --0.366876423359 --0.792451992631 --0.34961964935 --0.792453125119 --0.332362666726 --0.792456656694 --0.315105810762 --0.792462542653 --0.297848664224 --0.792470812798 --0.280591517687 --0.792481467128 --0.263333939016 --0.792494535446 --0.246076226235 --0.792509943247 --0.228817977011 --0.792527750134 --0.211559481919 --0.792547851801 --0.194300312549 --0.792559072375 --0.175085861236 --0.772867918015 --0.155866496265 --0.772847980261 --0.138607509434 --0.77283038199 --0.12134882249 --0.7728151232 --0.104090757668 --0.772802203893 --0.0868328846991 --0.772791579366 --0.0695755006746 --0.772783339023 --0.0523181818426 --0.772777453065 --0.0350612350739 --0.772773846984 --0.0178042261396 --0.772772610188 --0.00054746470414 --0.772773742676 -0.016709478572 --0.772777199745 -0.0339662991464 --0.772782951593 -0.0512234224006 --0.772791147232 -0.0684805493802 --0.77280163765 -0.0857381038368 --0.772814422846 -0.102995773777 --0.772829562426 -0.120253998786 --0.77284707129 -0.137512478978 --0.772866860032 -0.154771618545 --0.77287787199 -0.173986300826 --0.772867947817 -0.193199358881 --0.772848010063 -0.210458353162 --0.772830411792 -0.227717030794 --0.7728151232 -0.244975090027 --0.772802203894 -0.262232966721 --0.772791609168 -0.279490344227 --0.772783353925 -0.296747662127 --0.772777438164 -0.3140046224 --0.772773832083 -0.331261627376 --0.772772610188 -0.348518386483 --0.772773727774 -0.365775339305 --0.772777169943 -0.383032150566 --0.772782966494 -0.400289274752 --0.772791132331 -0.417546406388 --0.772801592946 -0.434803955257 --0.772814437747 -0.452061638236 --0.772829577327 -0.469319857657 --0.77284707129 -0.486578322947 --0.772866860032 -0.503837488592 --0.77287787199 -0.523052170873 --0.772867947817 -0.542265206575 --0.772847995162 -0.559524208307 --0.772830396891 -0.576782882213 --0.7728151232 -0.594040930271 --0.772802203894 -0.611298814416 --0.772791609168 -0.628556206823 --0.772783353925 -0.645813524723 --0.772777438164 -0.663070470095 --0.772773832083 -0.680327475071 --0.772772610188 -0.697584241629 --0.772773712873 -0.714841187 --0.772777155042 -0.732098013163 --0.772782936692 -0.749355137348 --0.772791087627 -0.766612246632 --0.772801578045 -0.783869788051 --0.772814437747 -0.801127478481 --0.772829592228 -0.818385720253 --0.772847086191 -0.835644185543 --0.772866860032 -0.852903306484 --0.772877842188 -0.872117981314 --0.772867918014 -0.89133104682 --0.772848010063 -0.908590048552 --0.772830411792 -0.925848722458 --0.7728151232 -0.943106800318 --0.772802203894 -0.960364684462 --0.772791624069 -0.977622032166 --0.772783353925 -0.994879350066 --0.772777423262 -1.01213631034 --0.772773832083 -1.02939334512 --0.772772610188 -1.04665011167 --0.772773727774 -1.06390702724 --0.772777169943 -1.08116385341 --0.772782951593 -1.09842097759 --0.77279111743 -1.11567810178 --0.772801592946 -1.132935673 --0.772814437747 -1.15019333363 --0.772829577327 -1.16745153069 --0.77284707129 -1.18470999599 --0.772866845131 -1.20196914673 --0.772877857089 -1.22118386626 --0.772867947817 -1.24039691686 --0.772848010063 -1.2576558888 --0.772830396891 -1.2749145627 --0.772815108299 -1.29217261076 --0.772802188993 -1.3094305098 --0.772791594267 -1.32668790221 --0.772783339023 -1.34394523501 --0.772777423262 -1.36120218039 --0.772773832083 -1.37845915556 --0.772772625089 -1.39571592211 --0.772773742676 -1.41297289729 --0.772777184844 -1.43022972345 --0.772782951593 -1.44748684764 --0.772791087627 -1.46474397183 --0.772801578045 -1.48200148344 --0.772814422846 -1.49925917387 --0.772829562426 -1.51651743054 --0.772847086191 -1.53377589583 --0.772866889834 -1.55103501677 --0.77287787199 -1.5702496767 --0.772867918014 -1.58946272731 --0.772847995162 -1.60672172904 --0.772830411792 -1.62398043275 --0.772815108299 -1.64123851061 --0.772802174091 -1.65849637985 --0.772791609168 -1.67575377226 --0.772783353925 -1.69301107526 --0.772777438164 -1.71026802063 --0.772773832083 -1.72752505541 --0.772772595287 -1.74478179216 --0.772773712873 -1.76203870773 --0.772777184844 -1.7792955637 --0.772782981395 -1.79655268789 --0.77279111743 -1.81380978227 --0.772801592946 -1.83106735349 --0.772814437747 -1.84832501411 --0.772829592228 -1.86558324098 --0.772847086191 -1.88284176588 --0.772866860032 -1.90010091662 --0.77287787199 -1.91931557655 --0.772867947817 -1.93852862716 --0.772848010063 -1.95578759909 --0.772830411792 -1.97304624319 --0.7728151232 -1.99030432105 --0.772802203894 -2.00756219029 --0.772791609168 -2.0248195529 --0.772783339023 -2.0420768857 --0.772777423262 -2.05933386087 --0.772773832083 -2.07659089565 --0.772772610188 -2.09384763241 --0.772773727774 -2.11110454798 --0.772777199745 -2.12836140394 --0.772782981395 -2.14561855793 --0.772791102528 -2.16287565231 --0.772801578045 -2.18013322353 --0.772814437747 -2.19739091397 --0.772829577327 -2.21464908123 --0.772847056389 -2.23190754652 --0.772866845131 -2.24916672706 --0.77287787199 -2.2683814168 --0.772867947817 -2.28759449721 --0.772848010063 -2.30485349894 --0.772830426693 -2.32211214304 --0.772815138101 -2.3393701911 --0.772802203894 -2.35662806034 --0.772791609168 -2.37388539314 --0.772783339023 -2.39114272594 --0.772777423262 -2.40839970112 --0.772773832083 -2.42565667629 --0.772772610188 -2.44291347265 --0.772773727774 -2.46017044783 --0.772777169943 -2.47742724419 --0.772782936692 -2.49468433857 --0.772791102529 -2.51194149256 --0.772801592946 -2.52919906378 --0.772814437747 -2.54645675421 --0.772829592228 -2.56371498108 --0.772847086191 -2.58097338676 --0.772866860032 -2.59823256731 --0.77287787199 -2.61744725704 --0.772867947817 -2.63666027784 --0.772848010063 -2.65391927958 --0.772830411792 -2.67117792368 --0.7728151232 -2.68843597174 --0.772802203894 -2.70569390059 --0.772791609168 -2.7229513526 --0.772783339023 -2.7402086854 --0.772777423262 -2.75746560097 --0.772773846984 -2.77472257614 --0.772772625089 -2.7919793129 --0.772773727774 -2.80923622847 --0.772777169943 -2.82649308443 --0.772782936692 -2.84375023842 --0.772791087627 -2.8610073328 --0.772801578045 -2.87826484442 --0.772814437747 -2.89552253485 --0.772829592228 -2.91278082132 --0.772847086191 -2.93003934622 --0.772866860032 -2.94729846716 --0.772877857089 -2.96651309729 --0.772867918015 -2.98572611809 --0.772847980261 -3.00298511982 --0.77283038199 -3.02024388313 --0.7728151232 -3.0375019908 --0.772802203893 -3.05475980043 --0.772791579366 -3.07201713324 --0.772783339023 -3.08927446604 --0.772777453065 -3.10653144121 --0.772773846984 -3.12378847599 --0.772772610188 -3.14104524453 --0.772773742676 --3.1248831749 --0.772777199745 --3.10762637854 --0.772782951593 --3.09036922455 --0.772791147232 --3.07311213016 --0.77280163765 --3.05585461855 --0.772814422846 --3.03859692812 --0.772829562426 --3.02133864164 --0.77284707129 --3.00408011675 --0.772866860032 --2.98682099581 --0.77287787199 --2.96760636568 --0.772867947817 --2.94839334488 --0.772848010063 --2.93113434315 --0.772830411792 --2.91387557983 --0.7728151232 --2.89661747217 --0.772802203894 --2.87935966253 --0.772791609168 --2.86210232973 --0.772783353925 --2.84484499693 --0.772777438164 --2.82758802176 --0.772773832083 --2.81033098698 --0.772772610188 --2.79307425022 --0.772773727774 --2.77581733465 --0.772777169943 --2.75856053829 --0.772782966494 --2.74130338431 --0.772791132331 --2.72404623032 --0.772801592946 --2.7067886591 --0.772814437747 --2.68953102827 --0.772829577327 --2.672272861 --0.77284707129 --2.65501433611 --0.772866860032 --2.63775515557 --0.77287787199 --2.61854046583 --0.772867947817 --2.59932738543 --0.772847995162 --2.58206838369 --0.772830396891 --2.56480973959 --0.7728151232 --2.54755169153 --0.772802203894 --2.53029382229 --0.772791609168 --2.51303642988 --0.772783353925 --2.49577909708 --0.772777438164 --2.47852218151 --0.772773832083 --2.46126520634 --0.772772610188 --2.44400840998 --0.772773712873 --2.4267514348 --0.772777155042 --2.40949463844 --0.772782936692 --2.39223754406 --0.772791087627 --2.37498039007 --0.772801578045 --2.35772281885 --0.772814437747 --2.34046512842 --0.772829592228 --2.32320690155 --0.772847086191 --2.30594849587 --0.772866860032 --2.28868937493 --0.772877842188 --2.26947468519 --0.772867918014 --2.25026160478 --0.772848010063 --2.23300260306 --0.772830411792 --2.21574395895 --0.7728151232 --2.19848591089 --0.772802203894 --2.18122798204 --0.772791624069 --2.16397058964 --0.772783353925 --2.14671331644 --0.772777423262 --2.12945634127 --0.772773832083 --2.11219930649 --0.772772610188 --2.09494256973 --0.772773727774 --2.07768565416 --0.772777169943 --2.0604287982 --0.772782951593 --2.04317170382 --0.77279111743 --2.02591460943 --0.772801592946 --2.00865703821 --0.772814437747 --1.99139934778 --0.772829577327 --1.97414109111 --0.77284707129 --1.95688262582 --0.772866845131 --1.93962350488 --0.772877857089 --1.92040881515 --0.772867947817 --1.90119576454 --0.772848010063 --1.88393679261 --0.772830396891 --1.8666780889 --0.772815108299 --1.84942001104 --0.772802188993 --1.8321621418 --0.772791594267 --1.81490474939 --0.772783339023 --1.79764741659 --0.772777423262 --1.78039047122 --0.772773832083 --1.76313346624 --0.772772625089 --1.74587672949 --0.772773742676 --1.72861978411 --0.772777184844 --1.71136292815 --0.772782951593 --1.69410580396 --0.772791087627 --1.67684870958 --0.772801578045 --1.65959116816 --0.772814422846 --1.64233347774 --0.772829562426 --1.62507525086 --0.772847086191 --1.60781675577 --0.772866889834 --1.59055760503 --0.77287787199 --1.5713429451 --0.772867918014 --1.5521298945 --0.772847995162 --1.53487089276 --0.772830411792 --1.51761221886 --0.772815108299 --1.5003541708 --0.772802174091 --1.48309630156 --0.772791609168 --1.46583893895 --0.772783353925 --1.44858160615 --0.772777438164 --1.43132463097 --0.772773832083 --1.4140676558 --0.772772595287 --1.39681088924 --0.772773712873 --1.37955391407 --0.772777184844 --1.36229711771 --0.772782981395 --1.34503999352 --0.77279111743 --1.32778286934 --0.772801592946 --1.31052529812 --0.772814437747 --1.29326760769 --0.772829592228 --1.27600938082 --0.772847086191 --1.25875091553 --0.772866860032 --1.24149179459 --0.77287787199 --1.22227707505 --0.772867947817 --1.20306402445 --0.772848010063 --1.18580505252 --0.772830411792 --1.16854637861 --0.7728151232 --1.15128833055 --0.772802203894 --1.13403043151 --0.772791609168 --1.1167730391 --0.772783339023 --1.0995157361 --0.772777423262 --1.08225879073 --0.772773832083 --1.06500178576 --0.772772610188 --1.0477450192 --0.772773727774 --1.03048807382 --0.772777199745 --1.01323124766 --0.772782981395 --0.995974123479 --0.772791102528 --0.978717014194 --0.772801578045 --0.961459442973 --0.772814437747 --0.944201752543 --0.772829577327 --0.926943540573 --0.772847056389 --0.909685045481 --0.772866845131 --0.892425909638 --0.77287787199 --0.873211234808 --0.772867947817 --0.853998169303 --0.772848010063 --0.836739182472 --0.772830426693 --0.819480493665 --0.772815138101 --0.802222460508 --0.772802203894 --0.784964606166 --0.772791609168 --0.76770721376 --0.772783339023 --0.750449880957 --0.772777423262 --0.733192920685 --0.772773832083 --0.715935915709 --0.772772610188 --0.698679164052 --0.772773727774 --0.681422233582 --0.772777169943 --0.66416540742 --0.772782936692 --0.646908268333 --0.772791102529 --0.629651144147 --0.772801592946 --0.612393602729 --0.772814437747 --0.5951359272 --0.772829592228 --0.577877700329 --0.772847086191 --0.560619220137 --0.772866860032 --0.543360069394 --0.77287787199 --0.524145394563 --0.772867947817 --0.50493234396 --0.772848010063 --0.487673342228 --0.772830411792 --0.470414660871 --0.7728151232 --0.453156605363 --0.772802203894 --0.435898736119 --0.772791609168 --0.418641358614 --0.772783339023 --0.401384033263 --0.772777423262 --0.384127080441 --0.772773846984 --0.366870082915 --0.772772625089 --0.349613338709 --0.772773727774 --0.332356378436 --0.772777169943 --0.315099544823 --0.772782936692 --0.297842420637 --0.772791087627 --0.280585296452 --0.772801578045 --0.263327747583 --0.772814437747 --0.24607006833 --0.772829592228 --0.228811845183 --0.772847086191 --0.211553372443 --0.772866860032 --0.19429422915 --0.772877857089 --0.175079543143 --0.755750209093 --0.155861515552 --0.755730569363 --0.138602554798 --0.755713239312 --0.12134388648 --0.755698204041 --0.104085838422 --0.755685508251 --0.0868279859424 --0.755675077438 --0.0695706224069 --0.755666926503 --0.0523133194074 --0.755661100149 --0.0350563903339 --0.755657583475 --0.0177994037513 --0.755656376481 --0.000542662106455 --0.755657449365 -0.0167142616119 --0.755660861731 -0.0339710619301 --0.755666553974 -0.0512281665578 --0.7556745857 -0.0684852749109 --0.755684897303 -0.0857428051531 --0.755697533488 -0.103000456467 --0.755712464452 -0.120258664712 --0.755729705095 -0.137517120689 --0.755749180913 -0.15477624163 --0.755759999156 -0.173991106451 --0.755750223994 -0.193204339594 --0.755730614066 -0.210463311523 --0.755713284016 -0.227721966803 --0.755698218942 -0.24498000741 --0.755685508251 -0.262237869203 --0.755675077438 -0.279495231807 --0.755666956306 -0.296752534807 --0.755661144853 -0.314009465277 --0.755657613278 -0.331266440451 --0.755656406283 -0.348523169756 --0.755657494068 -0.365780100226 --0.755660876632 -0.383036904037 --0.755666568875 -0.400294013321 --0.755674615503 -0.417551130057 --0.755684912205 -0.434808656573 --0.755697563291 -0.45206630975 --0.755712479353 -0.46932451427 --0.755729705095 -0.486582964659 --0.755749195814 -0.503842107952 --0.755760028959 -0.523056969047 --0.755750238895 -0.542270183563 --0.755730599165 -0.559529155492 --0.755713284016 -0.576787814498 --0.755698248744 -0.594045847654 --0.755685523152 -0.611303701997 --0.755675077438 -0.628561064601 --0.755666956306 -0.645818367601 --0.75566111505 -0.663075298071 --0.755657568574 -0.680332288146 --0.755656376481 -0.697589054704 --0.755657434464 -0.714845985174 --0.755660831928 -0.732102781534 --0.755666553974 -0.749359875917 --0.7556745857 -0.7666169703 --0.755684897303 -0.783874511719 --0.755697563291 -0.801132172346 --0.755712479353 -0.818390369415 --0.755729705095 -0.835648834705 --0.755749195814 -0.852907955647 --0.755760014057 -0.87212279439 --0.755750223994 -0.891336023807 --0.755730614066 -0.908595025539 --0.755713298917 -0.925853684545 --0.755698233843 -0.9431117028 --0.755685508251 -0.960369557142 --0.755675092339 -0.977626919746 --0.755666941404 -0.994884222745 --0.755661085248 -1.01214113832 --0.755657583475 -1.02939814329 --0.755656391382 -1.04665490985 --0.755657479167 -1.06391182542 --0.755660876632 -1.08116865158 --0.755666539073 -1.09842574597 --0.755674570799 -1.11568281055 --0.755684897303 -1.13294035196 --0.755697563291 -1.15019801259 --0.755712479353 -1.16745620966 --0.755729705095 -1.18471467495 --0.755749180913 -1.20197382569 --0.755759999156 -1.22118869424 --0.755750223994 -1.24040192365 --0.755730614066 -1.25766086578 --0.755713284016 -1.27491950989 --0.755698233843 -1.29217755794 --0.755685508251 -1.30943539739 --0.755675062537 -1.32669275999 --0.755666926503 -1.34395009279 --0.755661085248 -1.36120700836 --0.755657568574 -1.37846398354 --0.755656406283 -1.3957207501 --0.755657494068 -1.41297769547 --0.755660861731 -1.43023449183 --0.755666539073 -1.44749158621 --0.755674570799 -1.46474868059 --0.755684897303 -1.48200619221 --0.755697563291 -1.49926385283 --0.755712464452 -1.51652204991 --0.755729705095 -1.5337805152 --0.755749225616 -1.55103963614 --0.75576004386 -1.57025447488 --0.755750253797 -1.5894677043 --0.755730599165 -1.60672670603 --0.755713269114 -1.62398537994 --0.755698248744 -1.64124342799 --0.755685508251 -1.65850129723 --0.755675062537 -1.67575865984 --0.755666926503 -1.69301593304 --0.75566111505 -1.7102728486 --0.755657598377 -1.72752985358 --0.755656391382 -1.74478659034 --0.755657449365 -1.76204350591 --0.755660861731 -1.77930033207 --0.755666568875 -1.79655742645 --0.755674570799 -1.81381452084 --0.755684897303 -1.83107206225 --0.755697563291 -1.84832969308 --0.755712494254 -1.86558791995 --0.755729719997 -1.88284638524 --0.755749195814 -1.90010550618 --0.755760014057 -1.91932037473 --0.755750223994 -1.93853360414 --0.755730614066 -1.95579254627 --0.755713298917 -1.97305119038 --0.755698233843 -1.99030926824 --0.755685508251 -2.00756710768 --0.755675077438 -2.02482444048 --0.755666941404 -2.04208177328 --0.755661129951 -2.05933874845 --0.755657598377 -2.07659572363 --0.755656376481 -2.09385246039 --0.755657479167 -2.11110937596 --0.755660906434 -2.12836617232 --0.755666583776 -2.14562326669 --0.7556745857 -2.16288036108 --0.755684897303 -2.1801379323 --0.755697563291 -2.19739562273 --0.755712479353 -2.21465379 --0.755729690194 -2.23191219568 --0.755749180913 -2.24917131662 --0.755760014057 -2.26838618517 --0.755750223994 -2.28759944439 --0.755730614066 -2.30485844612 --0.755713298917 -2.32211709023 --0.755698233843 -2.33937507868 --0.755685508251 -2.35663294792 --0.755675077438 -2.37389028072 --0.755666926503 -2.39114755392 --0.755661085248 -2.40840452909 --0.755657568574 -2.42566150427 --0.755656391382 -2.44291824102 --0.755657494068 -2.4601752162 --0.755660876632 -2.47743201256 --0.755666553974 -2.49468910694 --0.7556745857 -2.51194620132 --0.755684897303 -2.52920371294 --0.755697563291 -2.54646140337 --0.755712479353 -2.56371957064 --0.755729705095 -2.58097797632 --0.755749195814 -2.59823715687 --0.755760028959 -2.61745202541 --0.755750238895 -2.63666522503 --0.755730614066 -2.65392422676 --0.755713298917 -2.67118287087 --0.755698233843 -2.68844091893 --0.755685508251 -2.70569884777 --0.755675077438 -2.72295624018 --0.755666941404 -2.74021351338 --0.755661129951 -2.75747036934 --0.755657613278 -2.77472740412 --0.755656391382 -2.79198414087 --0.755657449365 -2.80924099684 --0.755660846829 -2.8264978528 --0.755666553974 -2.84375500679 --0.7556745857 -2.86101210117 --0.755684897303 -2.87826961279 --0.755697563291 -2.89552724361 --0.755712479353 -2.91278547048 --0.755729705095 -2.93004399538 --0.755749195814 -2.94730311632 --0.755760014057 -2.96651792526 --0.755750209093 -2.98573112488 --0.755730569363 -3.00299012661 --0.755713239312 -3.02024883032 --0.755698204041 -3.03750687837 --0.755685508251 -3.05476468802 --0.755675077438 -3.07202202082 --0.755666926503 -3.08927935362 --0.755661100149 -3.10653632879 --0.755657583475 -3.12379330396 --0.755656376481 -3.1410500129 --0.755657449365 --3.12487840652 --0.755660861731 --3.10762161016 --0.755666553974 --3.09036445618 --0.7556745857 --3.07310736179 --0.755684897303 --3.05584985018 --0.755697533488 --3.03859221935 --0.755712464452 --3.02133399248 --0.755729705095 --3.00407546759 --0.755749180913 --2.98681634665 --0.755759999156 --2.9676015377 --0.755750223994 --2.94838833809 --0.755730614066 --2.93112933636 --0.755713284016 --2.91387063265 --0.755698218942 --2.89661258459 --0.755685508251 --2.87935477495 --0.755675077438 --2.86209744215 --0.755666956306 --2.84484010935 --0.755661144853 --2.82758313417 --0.755657613278 --2.810326159 --0.755656406283 --2.79306942224 --0.755657494068 --2.77581250667 --0.755660876632 --2.75855576992 --0.755666568875 --2.74129867554 --0.755674615503 --2.72404152155 --0.755684912205 --2.70678395033 --0.755697563291 --2.6895263195 --0.755712479353 --2.67226815224 --0.755729705095 --2.65500968695 --0.755749195814 --2.63775056601 --0.755760028959 --2.61853569746 --0.755750238895 --2.59932243824 --0.755730599165 --2.58206349611 --0.755713284016 --2.56480485201 --0.755698248744 --2.54754680395 --0.755685523152 --2.53028899431 --0.755675077438 --2.51303166151 --0.755666956306 --2.49577432871 --0.75566111505 --2.47851735354 --0.755657568574 --2.46126037836 --0.755656376481 --2.4440036416 --0.755657434464 --2.42674666643 --0.755660831928 --2.40948987007 --0.755666553974 --2.39223277569 --0.7556745857 --2.37497568131 --0.755684897303 --2.35771816969 --0.755697563291 --2.34046047926 --0.755712479353 --2.32320231199 --0.755729705095 --2.30594390631 --0.755749195814 --2.28868478537 --0.755760014057 --2.26946991682 --0.755750223994 --2.2502566576 --0.755730614066 --2.23299765587 --0.755713298917 --2.21573901176 --0.755698233843 --2.19848102331 --0.755685508251 --2.18122309446 --0.755675092339 --2.16396570206 --0.755666941404 --2.14670848847 --0.755661085248 --2.1294515729 --0.755657583475 --2.11219453812 --0.755656391382 --2.09493780136 --0.755657479167 --2.07768088579 --0.755660876632 --2.06042402983 --0.755666539073 --2.04316693544 --0.755674570799 --2.02590984106 --0.755684897303 --2.00865226984 --0.755697563291 --1.99139463902 --0.755712479353 --1.97413647175 --0.755729705095 --1.95687800646 --0.755749180913 --1.93961888552 --0.755759999156 --1.92040401697 --0.755750223994 --1.90119078755 --0.755730614066 --1.88393181563 --0.755713284016 --1.86667311192 --0.755698233843 --1.84941509366 --0.755685508251 --1.83215725422 --0.755675062537 --1.81489986181 --0.755666926503 --1.79764255881 --0.755661085248 --1.78038564324 --0.755657568574 --1.76312866807 --0.755656406283 --1.74587193131 --0.755657494068 --1.72861501574 --0.755660861731 --1.71135818958 --0.755666539073 --1.6941010654 --0.755674570799 --1.67684397102 --0.755684897303 --1.6595864296 --0.755697563291 --1.64232876897 --0.755712464452 --1.6250705719 --0.755729705095 --1.60781210661 --0.755749225616 --1.59055298567 --0.75576004386 --1.57133814693 --0.755750253797 --1.55212491751 --0.755730599165 --1.53486594558 --0.755713269114 --1.51760730148 --0.755698248744 --1.50034925342 --0.755685508251 --1.48309138417 --0.755675062537 --1.46583405137 --0.755666926503 --1.44857674837 --0.75566111505 --1.43131977319 --0.755657598377 --1.41406279802 --0.755656391382 --1.39680609107 --0.755657449365 --1.3795491457 --0.755660861731 --1.36229234934 --0.755666568875 --1.34503525495 --0.755674570799 --1.32777816057 --0.755684897303 --1.31052061916 --0.755697563291 --1.29326292872 --0.755712494254 --1.27600470185 --0.755729719997 --1.25874626636 --0.755749195814 --1.24148717523 --0.755760014057 --1.22227227688 --0.755750223994 --1.20305904746 --0.755730614066 --1.18580010533 --0.755713298917 --1.16854146123 --0.755698233843 --1.15128341317 --0.755685508251 --1.13402554393 --0.755675077438 --1.11676818132 --0.755666941404 --1.09951084852 --0.755661129951 --1.08225393296 --0.755657598377 --1.06499698758 --0.755656376481 --1.04774022102 --0.755657479167 --1.03048327565 --0.755660906434 --1.01322647929 --0.755666583776 --0.99596938491 --0.7556745857 --0.978712290525 --0.755684897303 --0.961454734206 --0.755697563291 --0.944197073579 --0.755712479353 --0.926938891411 --0.755729690194 --0.909680426121 --0.755749180913 --0.892421290278 --0.755760014057 --0.873206421733 --0.755750223994 --0.853993177414 --0.755730614066 --0.836734205484 --0.755713298917 --0.81947556138 --0.755698233843 --0.802217543125 --0.755685508251 --0.784959688783 --0.755675077438 --0.767702326179 --0.755666926503 --0.750445023179 --0.755661085248 --0.733188077807 --0.755657568574 --0.715931087732 --0.755656391382 --0.698674350977 --0.755657494068 --0.681417450309 --0.755660876632 --0.664160653949 --0.755666553974 --0.646903514862 --0.7556745857 --0.629646405578 --0.755684897303 --0.612388893962 --0.755697563291 --0.595131248236 --0.755712479353 --0.577873051167 --0.755729705095 --0.560614585876 --0.755749195814 --0.543355450034 --0.755760028959 --0.52414059639 --0.755750238895 --0.504927366972 --0.755730614066 --0.487668387592 --0.755713298917 --0.470409728587 --0.755698233843 --0.45315169543 --0.755685508251 --0.435893848538 --0.755675077438 --0.418636478483 --0.755666941404 --0.401379168033 --0.755661129951 --0.384122245014 --0.755657613278 --0.366865262389 --0.755656391382 --0.349608525634 --0.755657449365 --0.332351587713 --0.755660846829 --0.315094776452 --0.755666553974 --0.297837674618 --0.7556745857 --0.280580580234 --0.755684897303 --0.263323053718 --0.755697563291 --0.246065389365 --0.755712479353 --0.22880718112 --0.755729705095 --0.211548727006 --0.755749195814 --0.194289606064 --0.755760014057 --0.175074741244 --0.738614454866 --0.155856490135 --0.73859512806 --0.138597540558 --0.73857806623 --0.121338892728 --0.738563284278 --0.104080868885 --0.738550767302 --0.0868230331689 --0.738540500402 --0.0695656891912 --0.738532498479 --0.0523084076121 --0.73852674663 --0.0350514985621 --0.738523289561 --0.0177945317701 --0.73852211237 --0.000537810614333 --0.738523170352 -0.0167190933134 --0.738526538014 -0.0339758726768 --0.738532140851 -0.0512329582125 --0.738540023565 -0.0684900451452 --0.738550171256 -0.0857475567609 --0.738562613726 -0.103005193174 --0.73857729137 -0.120263377204 --0.738594263792 -0.137521814555 --0.738613426686 -0.154780920595 --0.738624081016 -0.173995964229 --0.738614469767 -0.193209376186 --0.738595157862 -0.210468322039 --0.738578096032 -0.227726954967 --0.738563284278 -0.244984980673 --0.738550767302 -0.26224283129 --0.738540500402 -0.279500171542 --0.73853251338 -0.296757444739 --0.738526791334 -0.314014352858 --0.738523334265 -0.331271313131 --0.738522142172 -0.348528034985 --0.738523200154 -0.365784943104 --0.738526538014 -0.383041717112 --0.738532140851 -0.400298804045 --0.738540038466 -0.417555898428 --0.738550186157 -0.434813410044 --0.738562643528 -0.452071048319 --0.738577306271 -0.469329237938 --0.738594263792 -0.486587665975 --0.738613441586 -0.503846764564 --0.738624110818 -0.523061797023 --0.738614484668 -0.542275205255 --0.738595157862 -0.559534162283 --0.738578110934 -0.576792791486 --0.73856331408 -0.594050809741 --0.738550782203 -0.611308664083 --0.738540500402 -0.628566011786 --0.73853251338 -0.645823284984 --0.738526761532 -0.663080185652 --0.738523289561 -0.680337145925 --0.738522097469 -0.697593897581 --0.73852314055 -0.71485081315 --0.738526508212 -0.732107579708 --0.738532140851 -0.74936465919 --0.738540038466 -0.766621738672 --0.738550186157 -0.783879265189 --0.738562643528 -0.801136896014 --0.738577306271 -0.818395078183 --0.738594263792 -0.835653528571 --0.738613441586 -0.852912634611 --0.738624081016 -0.872127667069 --0.738614454866 -0.8913410604 --0.738595157862 -0.90860003233 --0.738578110934 -0.925858676434 --0.738563299179 -0.943116664887 --0.738550767302 -0.960374489427 --0.738540500402 -0.977631852031 --0.738532498479 -0.99488914013 --0.73852674663 -1.0121460259 --0.738523304463 -1.02940300107 --0.73852211237 -1.04665973782 --0.738523170352 -1.0639166534 --0.738526538014 -1.08117344976 --0.73853212595 -1.09843051433 --0.738540023565 -1.11568757892 --0.738550186157 -1.13294509053 --0.738562643528 -1.15020275116 --0.738577306271 -1.16746094823 --0.738594263792 -1.18471938372 --0.738613441586 -1.20197850466 --0.738624095917 -1.22119352222 --0.738614469767 -1.24040693045 --0.738595157862 -1.25766587257 --0.738578110934 -1.27492451668 --0.73856331408 -1.29218256474 --0.738550782203 -1.30944037438 --0.738540500402 -1.32669770718 --0.738532498479 -1.34395501018 --0.73852674663 -1.36121192575 --0.738523289561 -1.37846890092 --0.73852211237 -1.39572560787 --0.738523185253 -1.41298249364 --0.738526538014 -1.43023929 --0.738532140851 -1.44749638438 --0.738540038466 -1.46475344896 --0.738550186157 -1.48201096058 --0.738562643528 -1.4992685914 --0.738577306271 -1.51652675867 --0.738594263792 -1.53378522396 --0.738613441586 -1.5510443151 --0.738624110818 -1.57025933266 --0.738614499569 -1.58947274089 --0.738595142961 -1.60673171282 --0.738578081131 -1.62399035692 --0.73856331408 -1.64124837518 --0.738550782203 -1.65850621462 --0.738540500403 -1.67576354742 --0.738532498479 -1.69302082062 --0.738526791334 -1.71027773619 --0.738523334265 -1.72753471136 --0.73852211237 -1.74479144811 --0.738523155451 -1.76204836368 --0.738526508212 -1.77930513024 --0.73853212595 -1.79656219482 --0.738540038466 -1.81381928921 --0.738550201058 -1.83107680082 --0.738562643528 -1.84833443165 --0.73857730627 -1.86559262872 --0.738594263792 -1.8828510344 --0.738613426685 -1.90011015535 --0.738624051213 -1.91932523251 --0.738614439965 -1.93853864074 --0.738595157862 -1.95579758287 --0.738578110934 -1.97305622697 --0.738563299179 -1.99031424523 --0.738550767302 -2.00757208467 --0.738540500402 -2.02482938767 --0.73853251338 -2.04208666086 --0.738526791334 -2.05934363603 --0.738523319364 -2.07660061121 --0.738522097469 -2.09385734797 --0.738523170352 -2.11111420393 --0.738526538014 -2.12837094068 --0.738532140851 -2.14562803507 --0.738540038466 -2.16288512945 --0.738550186157 -2.18014264107 --0.738562643528 -2.19740027189 --0.738577291369 -2.21465849876 --0.738594248891 -2.23191690445 --0.738613441586 -2.24917596579 --0.738624095917 -2.26839107275 --0.738614469767 -2.28760451079 --0.738595157862 -2.30486345291 --0.738578110934 -2.32212209702 --0.738563299179 -2.33938008547 --0.738550767302 -2.35663795471 --0.738540500402 -2.37389528751 --0.738532498479 -2.39115250111 --0.738526761531 -2.40840941668 --0.738523304462 -2.42566639185 --0.73852211237 -2.4429231286 --0.738523185253 -2.46018004417 --0.738526538014 -2.47743678093 --0.738532140851 -2.49469387531 --0.738540053367 -2.5119509697 --0.738550201058 -2.52920848131 --0.738562658429 -2.54646617174 --0.738577321172 -2.56372433901 --0.738594263792 -2.5809827447 --0.738613441586 -2.59824186563 --0.738624081016 -2.61745691299 --0.738614454866 -2.63667029142 --0.738595157862 -2.65392923355 --0.738578110934 -2.67118787765 --0.738563284278 -2.68844592571 --0.738550752401 -2.70570379496 --0.738540500402 -2.72296112776 --0.73853251338 -2.74021834135 --0.738526791334 -2.75747519732 --0.738523319364 -2.77473223209 --0.738522097469 -2.79198896885 --0.73852314055 -2.80924588442 --0.738526508212 -2.82650268078 --0.738532140851 -2.84375977516 --0.738540053367 -2.86101686955 --0.738550201058 -2.87827438116 --0.738562643528 -2.89553201199 --0.738577291369 -2.91279017925 --0.738594248891 -2.93004864454 --0.738613441586 -2.94730776548 --0.738624081016 -2.96652275324 --0.738614454866 -2.98573613167 --0.73859512806 -3.0029951334 --0.73857806623 -3.0202537775 --0.738563284278 -3.03751176596 --0.738550767302 -3.0547695756 --0.738540500402 -3.0720269084 --0.738532498479 -3.0892842412 --0.73852674663 -3.10654121637 --0.738523289561 -3.12379819155 --0.73852211237 -3.14105484088 --0.738523170352 --3.12487357855 --0.738526538014 --3.10761678219 --0.738532140851 --3.0903596878 --0.738540023565 --3.07310259342 --0.738550171256 --3.05584508181 --0.738562613726 --3.03858745098 --0.73857729137 --3.02132928372 --0.738594263792 --3.00407081843 --0.738613426686 --2.98681169748 --0.738624081016 --2.96759670973 --0.738614469767 --2.9483833313 --0.738595157862 --2.93112432957 --0.738578096032 --2.91386568546 --0.738563284278 --2.89660769701 --0.738550767302 --2.87934988737 --0.738540500402 --2.86209255457 --0.73853251338 --2.84483522177 --0.738526791334 --2.82757824659 --0.738523334265 --2.81032127142 --0.738522142172 --2.79306453467 --0.738523200154 --2.7758076787 --0.738526538014 --2.75855094194 --0.738532140851 --2.74129384756 --0.738540038466 --2.72403675318 --0.738550186157 --2.70677924156 --0.738562643528 --2.68952161074 --0.738577306271 --2.67226338386 --0.738594263792 --2.65500497818 --0.738613441586 --2.63774591684 --0.738624110818 --2.61853086948 --0.738614484668 --2.59931743145 --0.738595157862 --2.58205848932 --0.738578110934 --2.56479990482 --0.73856331408 --2.54754185677 --0.738550782203 --2.53028398752 --0.738540500402 --2.51302665472 --0.73853251338 --2.49576938152 --0.738526761532 --2.47851246596 --0.738523289561 --2.46125549078 --0.738522097469 --2.44399875402 --0.73852314055 --2.42674183846 --0.738526508212 --2.4094851017 --0.738532140851 --2.39222800732 --0.738540038466 --2.37497091293 --0.738550186157 --2.35771340132 --0.738562643528 --2.34045577049 --0.738577306271 --2.32319760323 --0.738594263792 --2.30593913793 --0.738613441586 --2.28868001699 --0.738624081016 --2.26946496963 --0.738614454866 --2.25025159121 --0.738595157862 --2.23299264908 --0.738578110934 --2.21573400497 --0.738563299179 --2.19847601652 --0.738550767302 --2.18121814728 --0.738540500402 --2.16396075487 --0.738532498479 --2.14670354128 --0.73852674663 --2.12944668532 --0.738523304463 --2.11218971014 --0.73852211237 --2.09493297338 --0.738523170352 --2.07767599821 --0.738526538014 --2.06041920185 --0.73853212595 --2.04316210747 --0.738540023565 --2.02590501308 --0.738550186157 --2.00864750147 --0.738562643528 --1.99138990044 --0.738577306271 --1.97413176298 --0.738594263792 --1.95687329769 --0.738613441586 --1.93961417675 --0.738624095917 --1.92039912939 --0.738614469767 --1.90118572116 --0.738595157862 --1.88392677903 --0.738578110934 --1.86666813493 --0.73856331408 --1.84941014647 --0.738550782203 --1.83215230703 --0.738540500402 --1.81489494443 --0.738532498479 --1.79763767123 --0.73852674663 --1.78038075566 --0.738523289561 --1.76312381029 --0.73852211237 --1.74586707354 --0.738523185253 --1.72861015797 --0.738526538014 --1.71135339141 --0.738532140851 --1.69409629703 --0.738540038466 --1.67683920264 --0.738550186157 --1.65958169103 --0.738562643528 --1.6423240602 --0.738577306271 --1.62506586313 --0.738594263792 --1.60780742765 --0.738613441586 --1.5905483365 --0.738624110818 --1.57133328915 --0.738614499569 --1.55211988091 --0.738595142961 --1.53486093879 --0.738578081131 --1.51760229469 --0.73856331408 --1.50034427643 --0.738550782203 --1.48308643699 --0.738540500403 --1.46582910419 --0.738532498479 --1.44857183099 --0.738526791334 --1.43131488561 --0.738523334265 --1.41405791044 --0.73852211237 --1.39680123329 --0.738523155451 --1.37954434752 --0.738526508212 --1.36228755116 --0.73853212595 --1.34503045678 --0.738540038466 --1.3277733624 --0.738550201058 --1.31051585078 --0.738562643528 --1.29325819015 --0.73857730627 --1.27599999309 --0.738594263792 --1.2587415874 --0.738613426685 --1.24148249626 --0.738624051213 --1.2222674489 --0.738614439965 --1.20305404067 --0.738595157862 --1.18579509854 --0.738578110934 --1.16853645444 --0.738563299179 --1.15127840638 --0.738550767302 --1.13402056694 --0.738540500402 --1.11676323414 --0.73853251338 --1.09950593114 --0.738526791334 --1.08224904537 --0.738523319364 --1.0649921298 --0.738522097469 --1.04773539305 --0.738523170352 --1.03047844767 --0.738526538014 --1.01322165132 --0.738532140851 --0.995964586734 --0.738540038466 --0.978707507252 --0.738550186157 --0.961449980736 --0.738562643528 --0.944192364812 --0.738577291369 --0.926934182644 --0.738594248891 --0.909675732255 --0.738613441586 --0.892416611314 --0.738624095917 --0.873201563954 --0.738614469767 --0.853988155723 --0.738595157862 --0.836729213596 --0.738578110934 --0.819470584392 --0.738563299179 --0.802212566137 --0.738550767302 --0.784954726696 --0.738540500402 --0.767697393894 --0.738532498479 --0.750440135598 --0.738526761531 --0.733183205128 --0.738523304462 --0.715926215053 --0.73852211237 --0.698669493199 --0.738523185253 --0.681412607432 --0.738526538014 --0.664155840873 --0.738532140851 --0.646898731589 --0.738540053367 --0.629641652107 --0.738550201058 --0.612384155393 --0.738562658429 --0.595126509667 --0.738577321172 --0.577868327498 --0.738594263792 --0.560609892011 --0.738613441586 --0.543350785971 --0.738624081016 --0.524135753513 --0.738614454866 --0.504922352731 --0.738595157862 --0.487663388252 --0.738578110934 --0.470404744148 --0.738563284278 --0.453146733343 --0.738550752401 --0.435888901353 --0.738540500402 --0.418631538749 --0.73853251338 --0.401374258101 --0.738526791334 --0.384117357433 --0.738523319364 --0.366860382259 --0.738522097469 --0.349603667855 --0.73852314055 --0.332346759736 --0.738526508212 --0.315089978278 --0.738532140851 --0.297832898796 --0.738540053367 --0.280575811863 --0.738550201058 --0.263318300247 --0.738562643528 --0.246060661972 --0.738577291369 --0.228802472353 --0.738594248891 --0.21154403314 --0.738613441586 --0.194284930825 --0.738624081016 --0.175069894641 --0.721458718181 --0.155851412564 --0.7214397192 --0.138592477888 --0.721422940493 --0.12133385241 --0.72140841186 --0.104075852782 --0.721396073699 --0.0868180338293 --0.721385955811 --0.0695607066154 --0.721378102899 --0.0523034473881 --0.72137247026 --0.0350465606898 --0.721369072795 --0.0177896129899 --0.721367910504 --0.000532911624758 --0.721368968487 -0.0167239727452 --0.721372276544 -0.0339807327837 --0.721377760172 -0.0512377964333 --0.721385508776 -0.0684948610142 --0.721395522356 -0.0857523567975 --0.72140775621 -0.103009974584 --0.721422165632 -0.120268139988 --0.721438869834 -0.1375265643 --0.721457734704 -0.154785651714 --0.721468195319 -0.174000866711 --0.721458718181 -0.193214450032 --0.7214397192 -0.210473380983 --0.721422940492 -0.227732002735 --0.721408396959 -0.244990002364 --0.721396073699 -0.262247815729 --0.721385955811 -0.279505133629 --0.721378087998 -0.296762391925 --0.721372440457 -0.314019285143 --0.721369057894 -0.331276237965 --0.721367910504 -0.348532944918 --0.721368953586 -0.365789830685 --0.721372246742 -0.383046582341 --0.721377760172 -0.400303646922 --0.721385538578 -0.417560711503 --0.721395537257 -0.434818200767 --0.721407771111 -0.452075824142 --0.721422195435 -0.469333998859 --0.721438869834 -0.486592411995 --0.721457719803 -0.503851488233 --0.721468195319 -0.523066699505 --0.721458718181 -0.542280286551 --0.7214397192 -0.559539213777 --0.721422955394 -0.576797828078 --0.721408382058 -0.594055846334 --0.721396043897 -0.611313670874 --0.721385970712 -0.628570973873 --0.721378102899 -0.645828232169 --0.721372455359 -0.663085132837 --0.721369057894 -0.680342078209 --0.721367880702 -0.697598785162 --0.721368938685 -0.714855670929 --0.721372246742 -0.732112437487 --0.721377760172 -0.749369487166 --0.721385538578 -0.766626536846 --0.721395537257 -0.783884048462 --0.721407771111 -0.801141664386 --0.721422180533 -0.818399831653 --0.721438869834 -0.835658252239 --0.721457734704 -0.852917343378 --0.721468165517 -0.872132584453 --0.72145870328 -0.891346156597 --0.7214397192 -0.908605083823 --0.721422925591 -0.925863713026 --0.721408396959 -0.943121701479 --0.721396073699 -0.960379511118 --0.721385955811 -0.97763684392 --0.721378102899 -0.994894102216 --0.721372455359 -1.01215097308 --0.721369042992 -1.02940791845 --0.721367880702 -1.04666462541 --0.721368938685 -1.06392154098 --0.721372246742 -1.08117830753 --0.721377760172 -1.09843534231 --0.721385538578 -1.1156924069 --0.721395537257 -1.13294988871 --0.721407771111 -1.15020751953 --0.721422180533 -1.1674657166 --0.721438869834 -1.18472412229 --0.721457734704 -1.20198321343 --0.72146821022 -1.22119840979 --0.721458733082 -1.24041199684 --0.7214397192 -1.25767093897 --0.721422940492 -1.27492955327 --0.721408396959 -1.29218757152 --0.7213960886 -1.30944538116 --0.721385970712 -1.32670271397 --0.721378102899 -1.34395998716 --0.721372455359 -1.36121687293 --0.721369042992 -1.3784738183 --0.721367880702 -1.39573049545 --0.721368953586 -1.41298735142 --0.721372261643 -1.43024411798 --0.721377775073 -1.44750121236 --0.721385553479 -1.46475827694 --0.721395537257 -1.48201575875 --0.721407771111 -1.49927335978 --0.721422195435 -1.51653152704 --0.721438884735 -1.53378996253 --0.721457734704 -1.55104902387 --0.72146821022 -1.57026425004 --0.721458733082 -1.58947783709 --0.721439704299 -1.60673674941 --0.721422940493 -1.62399539351 --0.72140841186 -1.64125341177 --0.721396073699 -1.65851122141 --0.721385985613 -1.67576852441 --0.721378132701 -1.6930257678 --0.721372485161 -1.71028268337 --0.721369087696 -1.72753965855 --0.721367880702 -1.7447963655 --0.721368923783 -1.76205325127 --0.721372246742 -1.77930998802 --0.721377760172 -1.7965670228 --0.721385553479 -1.81382411718 --0.721395552158 -1.8310816288 --0.721407771111 -1.84833922982 --0.721422165632 -1.86559736728 --0.721438840032 -1.88285577297 --0.721457704902 -1.90011489392 --0.721468165517 -1.91933014989 --0.721458718181 -1.93854373694 --0.721439734101 -1.95580264926 --0.721422940492 -1.97306126356 --0.721408396959 -1.99031925201 --0.721396073699 -2.00757709145 --0.721385970712 -2.02483439446 --0.7213781178 -2.04209160805 --0.72137247026 -2.05934852362 --0.721369072795 -2.07660549879 --0.721367895603 -2.09386223555 --0.721368938685 -2.11111909151 --0.721372246742 -2.12837582827 --0.721377760172 -2.14563292265 --0.721385538578 -2.16289001703 --0.721395537257 -2.18014746905 --0.721407771111 -2.19740504027 --0.721422180533 -2.21466326714 --0.721438854933 -2.23192167282 --0.721457704902 -2.24918067455 --0.721468195319 -2.26839590073 --0.721458733082 -2.28760957718 --0.721439704299 -2.3048685193 --0.721422940493 -2.32212716341 --0.72140841186 -2.33938515186 --0.7213960886 -2.3566429019 --0.721385970712 -2.3739002347 --0.721378087998 -2.3911575079 --0.72137247026 -2.40841436386 --0.721369087696 -2.42567127943 --0.721367895603 -2.44292801619 --0.721368938685 -2.46018493176 --0.721372261643 -2.47744166851 --0.721377775073 -2.49469870329 --0.721385553479 -2.51195579767 --0.721395552158 -2.52921330929 --0.721407786012 -2.54647094011 --0.721422195434 -2.56372910738 --0.721438869834 -2.58098751307 --0.721457719803 -2.59824663401 --0.721468165517 -2.61746186018 --0.721458703279 -2.63667541742 --0.721439704299 -2.65393429994 --0.721422940493 -2.67119294405 --0.721408396959 -2.68845099211 --0.721396073699 -2.70570880175 --0.721385985613 -2.72296613455 --0.7213781178 -2.74022334814 --0.72137247026 -2.75748020411 --0.721369072795 -2.77473717928 --0.721367880702 -2.79199385643 --0.721368923783 -2.809250772 --0.721372246742 -2.82650750876 --0.721377760172 -2.84376454353 --0.721385553479 -2.86102163792 --0.721395552158 -2.87827914953 --0.721407771111 -2.89553678036 --0.721422165632 -2.91279494762 --0.721438854933 -2.93005335331 --0.721457734704 -2.94731241465 --0.721468180418 -2.96652764082 --0.721458718181 -2.98574119806 --0.7214397192 -3.00300014019 --0.721422940493 -3.02025878429 --0.72140841186 -3.03751677274 --0.721396073699 -3.05477458238 --0.721385955811 -3.07203191519 --0.721378102899 -3.08928918838 --0.72137247026 -3.10654610395 --0.721369072795 -3.12380307913 --0.721367910504 -3.14105972846 --0.721368968487 --3.12486869097 --0.721372276544 --3.10761195421 --0.721377760172 --3.09035491943 --0.721385508776 --3.07309782505 --0.721395522356 --3.05584031343 --0.72140775621 --3.03858268261 --0.721422165632 --3.02132451534 --0.721438869834 --3.00406610966 --0.721457734704 --2.98680704832 --0.721468195319 --2.96759182215 --0.721458718181 --2.94837826491 --0.7214397192 --2.93111932278 --0.721422940492 --2.91386067867 --0.721408396959 --2.89660269022 --0.721396073699 --2.87934488058 --0.721385955811 --2.86208754778 --0.721378087998 --2.84483027458 --0.721372440457 --2.82757335901 --0.721369057894 --2.81031638384 --0.721367910504 --2.79305964708 --0.721368953586 --2.77580279112 --0.721372246742 --2.75854605436 --0.721377760172 --2.74128895998 --0.721385538578 --2.7240319252 --0.721395537257 --2.70677447319 --0.721407771111 --2.68951684237 --0.721422195435 --2.6722586155 --0.721438869834 --2.65500020981 --0.721457719803 --2.63774114847 --0.721468195319 --2.6185259819 --0.721458718181 --2.59931236506 --0.7214397192 --2.58205336332 --0.721422955394 --2.56479483843 --0.721408382058 --2.54753684997 --0.721396043897 --2.53027898073 --0.721385970712 --2.51302164793 --0.721378102899 --2.49576437473 --0.721372455359 --2.47850751877 --0.721369057894 --2.4612506032 --0.721367880702 --2.44399386644 --0.721368938685 --2.42673701048 --0.721372246742 --2.40948027372 --0.721377760172 --2.39222317934 --0.721385538578 --2.37496608496 --0.721395537257 --2.35770857334 --0.721407771111 --2.34045100212 --0.721422180533 --2.32319283485 --0.721438869834 --2.30593436957 --0.721457734704 --2.28867524863 --0.721468165517 --2.26946002245 --0.72145870328 --2.25024646521 --0.7214397192 --2.23298758268 --0.721422925591 --2.21572893858 --0.721408396959 --2.19847089052 --0.721396073699 --2.18121308088 --0.721385955811 --2.16395574808 --0.721378102899 --2.14669853449 --0.721372455359 --2.12944167853 --0.721369042992 --2.11218476296 --0.721367880702 --2.0949280858 --0.721368938685 --2.07767111063 --0.721372246742 --2.06041437387 --0.721377760172 --2.04315733909 --0.721385538578 --2.02590024471 --0.721395537257 --2.0086427331 --0.721407771111 --1.99138510227 --0.721422180533 --1.97412696481 --0.721438869834 --1.95686852932 --0.721457734704 --1.93960943818 --0.72146821022 --1.92039424181 --0.721458733082 --1.90118065476 --0.7214397192 --1.88392171264 --0.721422940492 --1.86666309834 --0.721408396959 --1.84940510988 --0.7213960886 --1.83214727044 --0.721385970712 --1.81488996744 --0.721378102899 --1.79763272405 --0.721372455359 --1.78037580848 --0.721369042992 --1.7631188631 --0.721367880702 --1.74586215615 --0.721368953586 --1.72860527039 --0.721372261643 --1.71134853363 --0.721377775073 --1.69409146905 --0.721385553479 --1.67683437467 --0.721395537257 --1.65957689285 --0.721407771111 --1.64231929183 --0.721422195435 --1.62506109476 --0.721438884735 --1.60780268908 --0.721457734704 --1.59054362774 --0.72146821022 --1.57132837176 --0.721458733082 --1.55211478472 --0.721439704299 --1.53485587239 --0.721422940493 --1.51759725809 --0.72140841186 --1.50033926964 --0.721396073699 --1.48308146 --0.721385985613 --1.4658241272 --0.721378132701 --1.448566854 --0.721372485161 --1.43130996823 --0.721369087696 --1.41405302286 --0.721367880702 --1.39679634571 --0.721368923783 --1.37953948975 --0.721372246742 --1.36228269339 --0.721377760172 --1.345025599 --0.721385553479 --1.32776853442 --0.721395552158 --1.31051105261 --0.721407771111 --1.29325342178 --0.721422165632 --1.27599525452 --0.721438840032 --1.25873684883 --0.721457704902 --1.24147772789 --0.721468165517 --1.22226253152 --0.721458718181 --1.20304897427 --0.721439734101 --1.18579003215 --0.721422940492 --1.16853138804 --0.721408396959 --1.15127336979 --0.721396073699 --1.13401556015 --0.721385970712 --1.11675822735 --0.7213781178 --1.09950098395 --0.72137247026 --1.08224412799 --0.721369072795 --1.06498718262 --0.721367895603 --1.04773047566 --0.721368938685 --1.0304735899 --0.721372246742 --1.01321682334 --0.721377760172 --0.995959758759 --0.721385538578 --0.978702679276 --0.721395537257 --0.961445182562 --0.721407771111 --0.944187581539 --0.721422180533 --0.926929399371 --0.721438854933 --0.909670978785 --0.721457704902 --0.892411917448 --0.721468195319 --0.873196706176 --0.721458733082 --0.853983104229 --0.721439704299 --0.836724191904 --0.721422940493 --0.8194655478 --0.72140841186 --0.802207529545 --0.7213960886 --0.784949734807 --0.721385970712 --0.767692416906 --0.721378087998 --0.750435173512 --0.72137247026 --0.733178272844 --0.721369087696 --0.71592131257 --0.721367895603 --0.698664620519 --0.721368938685 --0.681407734752 --0.721372261643 --0.664150968194 --0.721377775073 --0.646893888712 --0.721385553479 --0.629636824131 --0.721395552158 --0.612379357219 --0.721407786012 --0.595121726394 --0.721422195434 --0.577863544226 --0.721438869834 --0.56060513854 --0.721457719803 --0.543346062303 --0.721468165517 --0.524130851031 --0.721458703279 --0.504917263985 --0.721439704299 --0.487658321858 --0.721422940493 --0.470399707556 --0.721408396959 --0.453141711652 --0.721396073699 --0.435883887112 --0.721385985613 --0.41862655431 --0.7213781178 --0.401369303465 --0.72137247026 --0.384112410247 --0.721369072795 --0.366855457425 --0.721367880702 --0.349598772824 --0.721368923783 --0.332341887057 --0.721372246742 --0.315085120499 --0.721377760172 --0.297828063369 --0.721385553479 --0.280570998788 --0.721395552158 --0.263313494623 --0.721407771111 --0.246055882424 --0.721422165632 --0.228797722608 --0.721438854933 --0.211539298296 --0.721457734704 --0.194280210882 --0.721468180418 --0.175064995885 --0.704306840896 --0.155845291912 --0.704288139939 --0.138586383313 --0.704271659255 --0.12132778205 --0.704257398844 --0.104069806636 --0.704245269298 --0.0868120137602 --0.704235315323 --0.0695547107607 --0.704227596521 --0.0522974748165 --0.704222068191 --0.0350406127982 --0.704218715429 --0.0177836886141 --0.70421756804 --0.000527010764928 --0.704218611121 -0.0167298486922 --0.704221859574 -0.0339865852148 --0.704227253795 -0.0512436255813 --0.704234883189 -0.0685006668791 --0.704244732857 -0.0857581365854 --0.704256743193 -0.103015726432 --0.704270899296 -0.120273869485 --0.704287305474 -0.13753226772 --0.70430585742 -0.154791332781 --0.704316139221 -0.174006767571 --0.704306811094 -0.193220563233 --0.704288139939 -0.210479468107 --0.704271659255 -0.227738063782 --0.704257383942 -0.244996037334 --0.704245269298 -0.262253828347 --0.704235315323 -0.279511131346 --0.70422758162 -0.296768374741 --0.704222038388 -0.314025238157 --0.704218715429 -0.331282161176 --0.70421756804 -0.348538838327 --0.70421859622 -0.365795694291 --0.704221859575 -0.383052431047 --0.704227268696 -0.400309480726 --0.704234912992 -0.417566522956 --0.704244747758 -0.434823982418 --0.704256758094 -0.452081568539 --0.704270929098 -0.469339713454 --0.704287320376 -0.486598111689 --0.70430585742 -0.503857180476 --0.70431612432 -0.523072615266 --0.704306796193 -0.542286410928 --0.704288154841 -0.559545308352 --0.704271689058 -0.576803922653 --0.70425735414 -0.594061911106 --0.704245224595 -0.611319676042 --0.704235330224 -0.62857696414 --0.704227596521 -0.645834222436 --0.704222038388 -0.663091093302 --0.704218685627 -0.680348023772 --0.704217538237 -0.697604700923 --0.70421859622 -0.714861541986 --0.704221844673 -0.732118293643 --0.704227253795 -0.749375328422 --0.704234912992 -0.766632348299 --0.704244747758 -0.783889830113 --0.704256758094 -0.801147431135 --0.704270914197 -0.818405568599 --0.704287320376 -0.835663959384 --0.704305872321 -0.852923020721 --0.704316139221 -0.872138485313 --0.704306825995 -0.891352280974 --0.704288154841 -0.908611178398 --0.704271659255 -0.925869777799 --0.704257369041 -0.94312773645 --0.704245269298 -0.960385546089 --0.704235330224 -0.977642849088 --0.704227596521 -0.994900062681 --0.704222053289 -1.01215690375 --0.704218685627 -1.02941381931 --0.704217553139 -1.04667052626 --0.704218611121 -1.06392741203 --0.704221844673 -1.08118414879 --0.704227253795 -1.09844118357 --0.704234912992 -1.11569821835 --0.704244732857 -1.13295567036 --0.704256743193 -1.15021327138 --0.704270914197 -1.16747143865 --0.704287320376 -1.18472981453 --0.704305872321 -1.20198887587 --0.704316139221 -1.22120431066 --0.704306811094 -1.24041810632 --0.704288154841 -1.25767704845 --0.704271674156 -1.27493563295 --0.704257369041 -1.2921935916 --0.704245269299 -1.30945140124 --0.704235330224 -1.32670870424 --0.704227596521 -1.34396594763 --0.704222053289 -1.36122280359 --0.704218685627 -1.37847971916 --0.704217538237 -1.39573639631 --0.704218626022 -1.41299325228 --0.704221889377 -1.43024995923 --0.704227268696 -1.44750699401 --0.704234912992 -1.46476405859 --0.704244747758 -1.4820215404 --0.704256772995 -1.49927914143 --0.704270943999 -1.51653727889 --0.704287335277 -1.53379565478 --0.704305872321 -1.55105471611 --0.704316154122 -1.5702701807 --0.704306811094 -1.58948397636 --0.704288125038 -1.60674285889 --0.704271674156 -1.62400147319 --0.704257383943 -1.64125949145 --0.704245254397 -1.65851727128 --0.704235330224 -1.67577454448 --0.704227611422 -1.69303175807 --0.70422205329 -1.71028864384 --0.704218700528 -1.72754558921 --0.704217538237 -1.74480223656 --0.704218581319 -1.76205909252 --0.704221844673 -1.77931582928 --0.704227253795 -1.79657286406 --0.704234912992 -1.81382992864 --0.704244747758 -1.83108741045 --0.704256772995 -1.84834498167 --0.704270929098 -1.86560308933 --0.704287305474 -1.88286149502 --0.70430585742 -1.90012058616 --0.704316154122 -1.91933602094 --0.704306840896 -1.93854981661 --0.704288169742 -1.95580872894 --0.704271674156 -1.97306731344 --0.704257369041 -1.99032527208 --0.704245269298 -2.00758308172 --0.704235345125 -2.02484041452 --0.704227611422 -2.04209762812 --0.70422205329 -2.05935448408 --0.704218715429 -2.07661139965 --0.70421756804 -2.0938680768 --0.70421859622 -2.11112493277 --0.704221844673 -2.12838166952 --0.704227253795 -2.1456387639 --0.704234898091 -2.16289579868 --0.704244732857 -2.1801532507 --0.704256758094 -2.19741082192 --0.704270929098 -2.21466898918 --0.704287320376 -2.23192739487 --0.704305842519 -2.2491863966 --0.70431612432 -2.26840180159 --0.704306811094 -2.28761565685 --0.704288139939 -2.30487459898 --0.704271674156 -2.32213318348 --0.704257383943 -2.33939111232 --0.704245269299 -2.35664886236 --0.704235330224 -2.37390619517 --0.70422758162 -2.39116346836 --0.704222038388 -2.40842032433 --0.704218715429 -2.4256772399 --0.70421756804 -2.44293391705 --0.70421859622 -2.46019083262 --0.704221859574 -2.47744756937 --0.704227268696 -2.49470454454 --0.704234912992 -2.51196163893 --0.704244732857 -2.52921909094 --0.704256743193 -2.54647666216 --0.704270914197 -2.56373482942 --0.704287320376 -2.58099323511 --0.70430585742 -2.59825229645 --0.704316139221 -2.61746770144 --0.704306825995 -2.6366814971 --0.704288125038 -2.65394037962 --0.704271659255 -2.67119902372 --0.704257383943 -2.68845707178 --0.704245269299 -2.70571488142 --0.704235345125 -2.72297215462 --0.704227611422 -2.74022936821 --0.704222068191 -2.75748622418 --0.704218715429 -2.77474313974 --0.704217553139 -2.7919998169 --0.70421859622 -2.80925667286 --0.704221844673 -2.82651335001 --0.704227253795 -2.84377032518 --0.704234898091 -2.86102741957 --0.704244732857 -2.87828493118 --0.704256758094 -2.8955425024 --0.704270914197 -2.91280066967 --0.704287320376 -2.93005907535 --0.704305872321 -2.94731813669 --0.704316154122 -2.96653360128 --0.704306840896 -2.98574739695 --0.704288139939 -3.00300627947 --0.704271659255 -3.02026486397 --0.704257398844 -3.03752285242 --0.704245269298 -3.05478066206 --0.704235315323 -3.07203799486 --0.704227596521 -3.08929520845 --0.704222068191 -3.10655200481 --0.704218715429 -3.12380892038 --0.70421756804 -3.14106562932 --0.704218611121 --3.12486279011 --0.704221859574 --3.10760611296 --0.704227253795 --3.09034913778 --0.704234883189 --3.0730920434 --0.704244732857 --3.05583453178 --0.704256743193 --3.03857696056 --0.704270899296 --3.02131879329 --0.704287305474 --3.00406038761 --0.70430585742 --2.98680132628 --0.704316139221 --2.96758586169 --0.704306811094 --2.94837206602 --0.704288139939 --2.9311131835 --0.704271659255 --2.913854599 --0.704257383942 --2.89659661055 --0.704245269298 --2.8793388009 --0.704235315323 --2.8620814681 --0.70422758162 --2.84482425451 --0.704222038388 --2.82756745815 --0.704218715429 --2.81031054258 --0.70421756804 --2.79305380583 --0.70421859622 --2.77579694986 --0.704221859575 --2.75854021311 --0.704227268696 --2.74128311872 --0.704234912992 --2.72402614355 --0.704244747758 --2.70676869154 --0.704256758094 --2.68951106071 --0.704270929098 --2.67225295305 --0.704287320376 --2.65499454737 --0.70430585742 --2.63773542643 --0.70431612432 --2.61852002144 --0.704306796193 --2.59930622578 --0.704288154841 --2.58204728365 --0.704271689058 --2.56478869915 --0.70425735414 --2.5475307703 --0.704245224595 --2.53027302027 --0.704235330224 --2.51301568746 --0.704227596521 --2.49575841427 --0.704222038388 --2.4785015583 --0.704218685627 --2.46124464273 --0.704217538237 --2.44398796558 --0.70421859622 --2.42673110962 --0.704221844673 --2.40947437286 --0.704227253795 --2.39221733808 --0.704234912992 --2.37496030331 --0.704244747758 --2.3577028513 --0.704256758094 --2.34044522047 --0.704270914197 --2.32318705321 --0.704287320376 --2.30592870713 --0.704305872321 --2.28866964579 --0.704316139221 --2.26945418119 --0.704306825995 --2.25024038553 --0.704288154841 --2.23298150301 --0.704271659255 --2.2157228589 --0.704257369041 --2.19846487045 --0.704245269298 --2.18120706081 --0.704235330224 --2.16394972801 --0.704227596521 --2.14669257402 --0.704222053289 --2.12943571806 --0.704218685627 --2.11217880249 --0.704217553139 --2.09492218494 --0.704218611121 --2.07766526937 --0.704221844673 --2.06040853262 --0.704227253795 --2.04315155745 --0.704234912992 --2.02589446306 --0.704244732857 --2.00863695145 --0.704256743193 --1.99137935042 --0.704270914197 --1.97412121296 --0.704287320376 --1.95686283708 --0.704305872321 --1.93960377574 --0.704316139221 --1.92038834095 --0.704306811094 --1.90117454529 --0.704288154841 --1.88391563296 --0.704271674156 --1.86665701866 --0.704257369041 --1.84939903021 --0.704245269299 --1.83214125037 --0.704235330224 --1.81488397718 --0.704227596521 --1.79762673378 --0.704222053289 --1.78036984801 --0.704218685627 --1.76311290264 --0.704217538237 --1.74585622549 --0.704218626022 --1.72859939933 --0.704221889377 --1.71134269237 --0.704227268696 --1.6940856576 --0.704234912992 --1.67682859302 --0.704244747758 --1.6595711112 --0.704256772995 --1.64231353998 --0.704270943999 --1.62505537272 --0.704287335277 --1.60779696703 --0.704305872321 --1.59053793549 --0.704316154122 --1.5713224709 --0.704306811094 --1.55210864544 --0.704288125038 --1.53484976291 --0.704271674156 --1.51759117842 --0.704257383943 --1.50033321977 --0.704245254397 --1.48307543993 --0.704235330224 --1.46581813693 --0.704227611422 --1.44856089354 --0.70422205329 --1.43130403757 --0.704218700528 --1.414047122 --0.704217538237 --1.39679044485 --0.704218581319 --1.37953358889 --0.704221844673 --1.36227682233 --0.704227253795 --1.34501975775 --0.704234912992 --1.32776272297 --0.704244747758 --1.31050527096 --0.704256772995 --1.29324766993 --0.704270929098 --1.27598953247 --0.704287305474 --1.25873112678 --0.70430585742 --1.24147203565 --0.704316154122 --1.22225663066 --0.704306840896 --1.2030428648 --0.704288169742 --1.18578395247 --0.704271674156 --1.16852533817 --0.704257369041 --1.15126734972 --0.704245269298 --1.13400954008 --0.704235345125 --1.11675223708 --0.704227611422 --1.09949502349 --0.70422205329 --1.08223816752 --0.704218715429 --1.06498122215 --0.70421756804 --1.047724545 --0.70421859622 --1.03046771884 --0.704221844673 --1.01321098208 --0.704227253795 --0.995953932405 --0.704234898091 --0.978696882725 --0.704244732857 --0.961439415813 --0.704256758094 --0.944181829691 --0.704270929098 --0.926923662424 --0.704287320376 --0.90966527164 --0.704305842519 --0.892406225205 --0.70431612432 --0.873190805316 --0.704306811094 --0.853977009654 --0.704288139939 --0.836718112231 --0.704271674156 --0.819459497929 --0.704257383943 --0.802201494574 --0.704245269299 --0.784943714738 --0.704235330224 --0.767686426639 --0.70422758162 --0.750429183245 --0.704222038388 --0.733172312379 --0.704218715429 --0.715915381908 --0.70421756804 --0.698658719659 --0.70421859622 --0.681401848793 --0.704221859574 --0.664145112037 --0.704227268696 --0.646888077259 --0.704234912992 --0.629631012678 --0.704244732857 --0.612373560667 --0.704256743193 --0.595115959644 --0.704270914197 --0.577857807279 --0.704287320376 --0.560599416495 --0.70430585742 --0.543340370059 --0.704316139221 --0.524124935269 --0.704306825995 --0.504911124706 --0.704288125038 --0.487652227283 --0.704271659255 --0.470393627882 --0.704257383943 --0.453135646879 --0.704245269299 --0.435877852142 --0.704235345125 --0.418620556593 --0.704227611422 --0.401363328099 --0.704222068191 --0.384106464684 --0.704218715429 --0.366849541664 --0.704217553139 --0.349592871964 --0.70421859622 --0.332336008548 --0.704221844673 --0.315079256892 --0.704227253795 --0.297822214663 --0.704234898091 --0.280565187335 --0.704244732857 --0.263307712972 --0.704256758094 --0.246050115675 --0.704270914197 --0.228791981935 --0.704287320376 --0.211533587426 --0.704305872321 --0.194274526089 --0.704316154122 --0.1750590913 --0.687192499637 --0.155838996172 --0.687174156308 --0.13858011365 --0.687157973647 --0.121321542189 --0.687143936753 --0.104063589126 --0.687132030726 --0.0868058223277 --0.687122285366 --0.0695485463366 --0.687114685774 --0.0522913327441 --0.68710924685 --0.0350344940089 --0.687105938792 --0.0177775952034 --0.687104806304 --0.000520942732692 --0.687105834484 -0.0167358918115 --0.687109023333 -0.0339926024899 --0.687114343047 -0.051249618642 --0.687121838331 -0.0685066366568 --0.687131494284 -0.0857640802861 --0.687143296003 -0.103021645919 --0.687157213688 -0.120279759169 --0.687173321843 -0.137538127601 --0.687191531062 -0.154797170311 --0.687201634049 -0.174012832344 --0.687192469835 -0.193226855248 --0.687174126506 -0.21048573032 --0.687157943845 -0.227744296193 --0.687143906951 -0.245002247393 --0.687132030726 -0.26226002723 --0.687122285366 -0.279517315328 --0.687114685774 -0.296774528921 --0.68710924685 -0.314031362534 --0.687105953693 -0.331288255751 --0.687104806304 -0.348544903099 --0.687105849385 -0.365801736712 --0.687109068036 -0.383058443666 --0.687114357948 -0.400315463543 --0.687121838331 -0.417572490871 --0.687131494284 -0.434829927981 --0.687143296003 -0.452087499201 --0.687157213688 -0.469345614314 --0.687173336744 -0.486603975296 --0.687191545964 -0.503863029182 --0.687201619148 -0.52307869494 --0.687192454934 -0.542292699218 --0.687174141407 -0.559551566839 --0.687157988548 -0.57681016624 --0.687143921852 -0.59406812489 --0.687132015825 -0.611325860023 --0.687122285366 -0.628583148122 --0.687114685774 -0.645840391517 --0.687109231949 -0.66309723258 --0.687105923891 -0.680354133248 --0.687104791403 -0.697610780596 --0.687105819583 -0.714867591858 --0.687109023333 -0.732124298811 --0.687114343047 -0.74938133359 --0.687121838331 -0.766638338566 --0.687131494284 -0.783895775676 --0.687143296003 -0.801153361797 --0.687157213688 -0.818411484361 --0.687173336744 -0.835669845342 --0.687191545964 -0.852928876877 --0.687201634049 -0.872144550085 --0.687192499637 -0.891358569265 --0.687174171209 -0.908617451787 --0.687157988548 -0.925876021385 --0.687143921852 -0.943133950234 --0.687132030726 -0.960391730071 --0.687122270465 -0.977649003268 --0.687114655971 -0.994906187059 --0.68710924685 -1.01216301322 --0.687105938792 -1.02941992879 --0.687104806304 -1.04667660594 --0.687105834484 -1.0639334321 --0.687109023333 -1.08119013906 --0.687114343047 -1.09844717383 --0.687121838331 -1.11570420861 --0.687131479382 -1.13296166062 --0.687143281102 -1.15021920204 --0.687157213688 -1.1674773097 --0.687173336744 -1.18473568559 --0.687191545964 -1.20199471712 --0.687201619148 -1.22121036053 --0.687192484736 -1.2404243648 --0.687174171209 -1.25768327713 --0.687157958746 -1.27494186163 --0.68714389205 -1.29219982028 --0.687132015825 -1.30945760012 --0.687122285366 -1.32671484351 --0.687114685774 -1.3439720571 --0.68710924685 -1.36122891307 --0.687105938792 -1.37848579883 --0.687104791403 -1.39574244618 --0.687105834484 -1.41299930215 --0.687109053135 -1.4302560091 --0.687114387751 -1.44751298427 --0.687121868133 -1.46476998925 --0.687131494284 -1.48202747107 --0.687143340707 -1.49928507209 --0.687157258391 -1.51654317975 --0.687173336744 -1.53380152583 --0.687191545964 -1.55106058717 --0.687201634049 -1.57027626038 --0.687192484736 -1.58949026465 --0.687174156308 -1.60674914717 --0.687157988548 -1.62400773167 --0.687143921852 -1.64126569033 --0.687132015825 -1.65852344036 --0.687122285366 -1.67578071356 --0.687114655972 -1.69303789735 --0.687109202147 -1.71029475331 --0.687105923891 -1.72755166888 --0.687104791403 -1.74480828643 --0.687105819583 -1.76206511259 --0.687109023333 -1.77932181955 --0.687114372849 -1.79657885432 --0.687121868133 -1.8138358891 --0.687131494284 -1.83109334111 --0.687143310904 -1.84835088253 --0.687157228589 -1.86560899019 --0.687173336744 -1.88286739588 --0.687191545964 -1.90012642741 --0.687201634049 -1.91934207082 --0.687192469835 -1.9385560751 --0.687174141407 -1.95581495762 --0.687157988548 -1.97307354212 --0.687143921852 -1.99033150077 --0.687132030726 -2.00758928061 --0.687122270465 -2.0248465538 --0.687114655971 -2.04210376739 --0.687109231949 -2.05936062336 --0.687105938792 -2.07661747932 --0.687104806304 -2.09387409687 --0.687105819583 -2.11113095283 --0.687109023333 -2.12838768959 --0.687114343047 -2.14564472437 --0.68712182343 -2.16290169954 --0.687131479383 -2.18015915155 --0.687143325806 -2.19741672277 --0.68715724349 -2.21467489004 --0.687173336744 -2.23193329573 --0.687191545964 -2.24919229746 --0.687201619148 -2.26840794086 --0.687192484736 -2.28762197494 --0.687174171209 -2.30488085747 --0.687157958746 -2.32213938236 --0.68714389205 -2.33939731121 --0.687132015825 -2.35665506125 --0.687122285366 -2.37391239405 --0.687114685774 -2.39116960764 --0.687109231949 -2.408426404 --0.687105938792 -2.42568337917 --0.687104806304 -2.44294005632 --0.687105849385 -2.46019685268 --0.687109053135 -2.47745352983 --0.687114372849 -2.49471056461 --0.687121868133 -2.51196759939 --0.687131479382 -2.5292250514 --0.687143281102 -2.54648262262 --0.687157213688 -2.56374073028 --0.687173336744 -2.58099913597 --0.687191545964 -2.5982581377 --0.687201634049 -2.61747372151 --0.687192469835 -2.63668775559 --0.687174126506 -2.65394663811 --0.687157973647 -2.67120522261 --0.687143921852 -2.68846321106 --0.687132015825 -2.7057210207 --0.687122285366 -2.7229782939 --0.687114685774 -2.74023544788 --0.68710924685 -2.75749230385 --0.687105938792 -2.77474921942 --0.687104806304 -2.79200589657 --0.687105864286 -2.80926275253 --0.687109053135 -2.82651942968 --0.687114372849 -2.84377640486 --0.687121853232 -2.86103343964 --0.687131479383 -2.87829089165 --0.687143325806 -2.89554846287 --0.68715724349 -2.91280657053 --0.687173336744 -2.93006491661 --0.687191545964 -2.94732397795 --0.687201634049 -2.96653968096 --0.687192499637 -2.98575371504 --0.687174156308 -3.00301259756 --0.687157973647 -3.02027112246 --0.687143936753 -3.0375290513 --0.687132030726 -3.05478686095 --0.687122285366 -3.07204413414 --0.687114685774 -3.08930134773 --0.68710924685 -3.10655814409 --0.687105938792 -3.12381500006 --0.687104806304 -3.14107170899 --0.687105834484 --3.12485671043 --0.687109023333 --3.10760003328 --0.687114343047 --3.09034305811 --0.687121838331 --3.07308602333 --0.687131494284 --3.05582857132 --0.687143296003 --3.0385710001 --0.687157213688 --3.02131289244 --0.687173321843 --3.00405454635 --0.687191531062 --2.98679548502 --0.687201634049 --2.96757978201 --0.687192469835 --2.94836574793 --0.687174126506 --2.93110686541 --0.687157943845 --2.91384834051 --0.687143906951 --2.89659041166 --0.687132030726 --2.87933260202 --0.687122285366 --2.86207532883 --0.687114685774 --2.84481811523 --0.68710924685 --2.82756131887 --0.687105953693 --2.81030446291 --0.687104806304 --2.79304778576 --0.687105849385 --2.77579092979 --0.687109068036 --2.75853419304 --0.687114357948 --2.74127715826 --0.687121838331 --2.72402018309 --0.687131494284 --2.70676273107 --0.687143296003 --2.68950515985 --0.687157213688 --2.67224705219 --0.687173336744 --2.65498864651 --0.687191545964 --2.63772958517 --0.687201619148 --2.61851394176 --0.687192454934 --2.59929996729 --0.687174141407 --2.58204108477 --0.687157988548 --2.56478244066 --0.687143921852 --2.54752451181 --0.687132015825 --2.53026682138 --0.687122285366 --2.51300948858 --0.687114685774 --2.49575227499 --0.687109231949 --2.47849547863 --0.687105923891 --2.46123850346 --0.687104791403 --2.44398182631 --0.687105819583 --2.42672502995 --0.687109023333 --2.40946835279 --0.687114343047 --2.39221131802 --0.687121838331 --2.37495434284 --0.687131494284 --2.35769695044 --0.687143296003 --2.34043931961 --0.687157213688 --2.32318115235 --0.687173336744 --2.30592280626 --0.687191545964 --2.28866380453 --0.687201634049 --2.26944816113 --0.687192499637 --2.25023412705 --0.687174171209 --2.23297524452 --0.687157988548 --2.21571666002 --0.687143921852 --2.19845873118 --0.687132030726 --2.18120092153 --0.687122270465 --2.16394358873 --0.687114655971 --2.14668643475 --0.68710924685 --2.12942957878 --0.687105938792 --2.11217266321 --0.687104806304 --2.09491604567 --0.687105834484 --2.0776591897 --0.687109023333 --2.06040251255 --0.687114343047 --2.04314553738 --0.687121838331 --2.02588844299 --0.687131479382 --2.00863099098 --0.687143281102 --1.99137344957 --0.687157213688 --1.9741153419 --0.687173336744 --1.95685699582 --0.687191545964 --1.93959793449 --0.687201619148 --1.92038226127 --0.687192484736 --1.901168257 --0.687174171209 --1.88390937447 --0.687157958746 --1.86665078998 --0.68714389205 --1.84939283133 --0.687132015825 --1.83213508129 --0.687122285366 --1.81487780809 --0.687114685774 --1.7976205647 --0.68710924685 --1.78036370873 --0.687105938792 --1.76310682297 --0.687104791403 --1.74585017562 --0.687105834484 --1.72859334946 --0.687109053135 --1.71133667231 --0.687114387751 --1.69407966733 --0.687121868133 --1.67682263255 --0.687131494284 --1.65956518054 --0.687143340707 --1.64230760932 --0.687157258391 --1.62504947185 --0.687173336744 --1.60779109597 --0.687191545964 --1.59053209424 --0.687201634049 --1.57131642103 --0.687192484736 --1.55210235715 --0.687174156308 --1.53484347462 --0.687157988548 --1.51758491993 --0.687143921852 --1.50032699108 --0.687132015825 --1.48306924104 --0.687122285366 --1.46581196785 --0.687114655972 --1.44855475426 --0.687109202147 --1.4312979281 --0.687105923891 --1.41404101253 --0.687104791403 --1.39678433538 --0.687105819583 --1.37952750921 --0.687109023333 --1.36227080226 --0.687114372849 --1.34501376748 --0.687121868133 --1.3277567327 --0.687131494284 --1.31049931049 --0.687143310904 --1.29324176908 --0.687157228589 --1.27598366141 --0.687173336744 --1.25872528553 --0.687191545964 --1.24146622419 --0.687201634049 --1.22225058079 --0.687192469835 --1.20303657651 --0.687174141407 --1.18577769398 --0.687157988548 --1.16851910949 --0.687143921852 --1.15126112104 --0.687132030726 --1.1340033412 --0.687122270465 --1.1167460978 --0.687114655971 --1.09948888421 --0.687109231949 --1.08223202824 --0.687105938792 --1.06497514248 --0.687104806304 --1.04771849513 --0.687105819583 --1.03046166897 --0.687109023333 --1.01320493221 --0.687114343047 --0.995947912335 --0.68712182343 --0.978690907359 --0.687131479383 --0.961433470249 --0.687143325806 --0.94417591393 --0.68715724349 --0.926917776465 --0.687173336744 --0.909659415484 --0.687191545964 --0.892400369048 --0.687201619148 --0.873184710741 --0.687192484736 --0.853970706463 --0.687174171209 --0.83671182394 --0.687157958746 --0.819453254342 --0.68714389205 --0.80219528079 --0.687132015825 --0.784937515855 --0.687122285366 --0.767680257559 --0.687114685774 --0.750423029065 --0.687109231949 --0.733166188002 --0.687105938792 --0.715909287334 --0.687104806304 --0.698652639985 --0.687105849385 --0.681395798922 --0.687109053135 --0.664139106869 --0.687114372849 --0.646882101893 --0.687121868133 --0.629625067115 --0.687131479382 --0.612367615104 --0.687143281102 --0.595110028982 --0.687157213688 --0.57785192132 --0.687173336744 --0.560593545437 --0.687191545964 --0.543334513903 --0.687201634049 --0.524118870497 --0.687192469835 --0.504904843867 --0.687174126506 --0.487645968795 --0.687157973647 --0.470387391746 --0.687143921852 --0.453129425645 --0.687132015825 --0.435871660709 --0.687122285366 --0.418614394963 --0.687114685774 --0.401357188821 --0.68710924685 --0.384100347757 --0.687105938792 --0.366843447089 --0.687104806304 --0.349586799741 --0.687105864286 --0.332329958677 --0.687109053135 --0.315073244274 --0.687114372849 --0.297816224396 --0.687121853232 --0.280559211969 --0.687131479383 --0.263301774859 --0.687143325806 --0.246044203639 --0.68715724349 --0.228786084801 --0.687173336744 --0.211527716368 --0.687191545964 --0.194268677384 --0.687201634049 --0.175053019077 --0.670093148947 --0.15583351627 --0.670075148344 --0.138574648648 --0.670059278607 --0.121316103265 --0.670045495033 --0.104058176279 --0.670033797622 --0.0868004299701 --0.670024245977 --0.069543177262 --0.670016780495 --0.0522859860212 --0.670011430979 --0.0350291682408 --0.670008212328 --0.0177722920198 --0.670007094741 --0.000515661668032 --0.67000810802 -0.0167411516886 --0.670011252165 -0.0339978411794 --0.670016467571 -0.0512548349798 --0.670023813844 -0.0685118287802 --0.670033276081 -0.085769250989 --0.670044869185 -0.103026799858 --0.67005854845 -0.120284890756 --0.670074373484 -0.137543234974 --0.670092225075 -0.154802255332 --0.670102119446 -0.17401811108 --0.670093119144 -0.193232331425 --0.670075118542 -0.210491191596 --0.670059248805 -0.227749738842 --0.670045465231 -0.245007667691 --0.670033827424 -0.26226542145 --0.670024275779 -0.279522679746 --0.670016810298 -0.296779870987 --0.670011460781 -0.314036682248 --0.670008212328 -0.331293560564 --0.670007094741 -0.348550185561 --0.670008122921 -0.365806996823 --0.670011267066 -0.383063688874 --0.670016467571 -0.4003206864 --0.670023813844 -0.417577691376 --0.670033276081 -0.434835106135 --0.670044869185 -0.452092655003 --0.67005854845 -0.469350747764 --0.670074373484 -0.486609086394 --0.670092225075 -0.503868110478 --0.670102119446 -0.523083969951 --0.670093119144 -0.542298182845 --0.670075118542 -0.559557035565 --0.670059278607 -0.576815590262 --0.670045495033 -0.594073519111 --0.670033827424 -0.611331254244 --0.670024275779 -0.628588527441 --0.670016810298 -0.645845741034 --0.670011460781 -0.663102552295 --0.670008212328 -0.680359423161 --0.670007124543 -0.697616055608 --0.670008122921 -0.714872837067 --0.670011237264 -0.732129514218 --0.670016467571 -0.749386534095 --0.670023813844 -0.76664352417 --0.670033276081 -0.783900946378 --0.670044869185 -0.801158502698 --0.67005854845 -0.81841661036 --0.670074373484 -0.835674956441 --0.670092225075 -0.852933973074 --0.670102119446 -0.872149839997 --0.670093148947 -0.891364067793 --0.670075148344 -0.908622920513 --0.670059278607 -0.925881445408 --0.670045495033 -0.943139389157 --0.670033827424 -0.960397124291 --0.670024245977 -0.977654367685 --0.670016780495 -0.994911566377 --0.670011460781 -1.01216837764 --0.670008212328 -1.02942526341 --0.670007124543 -1.04668191076 --0.670008122921 -1.06393870712 --0.670011237264 -1.08119538426 --0.670016467571 -1.09845238924 --0.670023813844 -1.11570939422 --0.670033276081 -1.13296681642 --0.670044869185 -1.15022432804 --0.67005854845 -1.1674824357 --0.670074373484 -1.18474081159 --0.670092225075 -1.20199981332 --0.670102119446 -1.22121563554 --0.670093148947 -1.24042984843 --0.670075148344 -1.25768873096 --0.670059248805 -1.27494728565 --0.670045465231 -1.2922052443 --0.670033827424 -1.30946299434 --0.670024275779 -1.32672020793 --0.670016810298 -1.34397739172 --0.670011460781 -1.36123421788 --0.670008212328 -1.37849110365 --0.670007124543 -1.3957477212 --0.670008122921 -1.41300454736 --0.670011237264 -1.43026125431 --0.670016497373 -1.44751822948 --0.670023873448 -1.46477520466 --0.670033305884 -1.48203262687 --0.670044898987 -1.49929019809 --0.670058578253 -1.51654830575 --0.670074373484 -1.53380665183 --0.670092225075 -1.55106568337 --0.670102119446 -1.57028153539 --0.670093148947 -1.58949574828 --0.670075178146 -1.606754601 --0.670059293508 -1.6240131557 --0.670045480132 -1.64127108455 --0.670033827424 -1.65852883458 --0.670024275779 -1.67578610778 --0.670016780495 -1.69304326177 --0.670011430979 -1.71030008793 --0.670008212328 -1.7275569737 --0.670007124543 -1.74481359124 --0.670008137822 -1.7620703876 --0.670011252165 -1.77932706475 --0.670016497373 -1.79658406973 --0.670023873448 -1.81384107471 --0.670033335686 -1.83109852671 --0.670044898987 -1.84835603833 --0.67005854845 -1.86561411619 --0.670074373484 -1.88287249207 --0.670092225075 -1.90013149381 --0.670102119446 -1.91934737563 --0.670093119144 -1.93856158852 --0.670075148344 -1.95582041144 --0.67005930841 -1.97307896614 --0.670045495033 -1.99033692479 --0.670033827424 -2.00759470463 --0.670024245977 -2.02485191822 --0.670016780495 -2.04210907221 --0.670011460781 -2.05936592818 --0.670008212328 -2.07662278414 --0.670007124543 -2.09387940168 --0.670008122921 -2.11113625765 --0.670011237264 -2.1283929348 --0.670016467571 -2.14564990997 --0.670023813844 -2.16290688515 --0.670033305884 -2.18016433716 --0.670044928789 -2.19742190838 --0.670058578253 -2.21468001604 --0.670074373484 -2.23193836212 --0.670092225075 -2.24919736385 --0.670102119446 -2.26841324568 --0.670093148947 -2.28762745857 --0.670075148344 -2.30488628149 --0.670059248805 -2.32214480638 --0.670045465231 -2.33940273523 --0.670033827424 -2.35666048527 --0.670024275779 -2.37391775847 --0.670016810298 -2.39117497206 --0.670011460781 -2.40843176842 --0.670008212328 -2.42568868399 --0.670007094741 -2.44294536114 --0.670008137822 -2.46020209789 --0.670011281967 -2.47745871544 --0.670016497373 -2.49471575021 --0.670023873448 -2.51197272539 --0.670033305884 -2.5292301774 --0.670044869185 -2.54648774862 --0.67005854845 -2.56374579668 --0.670074373484 -2.58100420237 --0.670092225075 -2.5982632041 --0.670102119446 -2.61747902632 --0.670093119144 -2.63669329882 --0.670075118542 -2.65395212173 --0.670059278607 -2.67121064663 --0.670045495033 -2.68846857548 --0.670033827424 -2.70572632551 --0.670024275779 -2.72298365831 --0.670016810298 -2.7402408123 --0.670011490583 -2.75749760866 --0.670008242131 -2.77475452423 --0.670007094741 -2.79201114178 --0.670008137822 -2.80926799774 --0.670011281967 -2.8265247345 --0.670016497373 -2.84378170967 --0.670023843646 -2.86103868485 --0.670033305884 -2.87829607725 --0.670044928789 -2.89555364847 --0.670058578253 -2.91281175613 --0.670074373484 -2.93007004261 --0.670092225075 -2.94732904434 --0.670102119446 -2.96654492617 --0.670093148947 -2.98575913906 --0.670075148344 -3.00301802158 --0.670059278607 -3.02027654648 --0.670045495033 -3.03753447533 --0.670033797622 -3.05479222536 --0.670024245977 -3.07204943895 --0.670016780495 -3.08930665254 --0.670011430979 -3.10656350851 --0.670008212328 -3.12382036448 --0.670007094741 -3.1410769542 --0.67000810802 --3.12485146522 --0.670011252165 --3.10759472847 --0.670016467571 --3.0903377533 --0.670023813844 --3.07308077812 --0.670033276081 --3.05582338571 --0.670044869185 --3.0385658145 --0.67005854845 --3.02130770683 --0.670074373484 --3.00404942036 --0.670092225075 --2.98679041863 --0.670102119446 --2.9675745368 --0.670093119144 --2.9483603239 --0.670075118542 --2.93110144138 --0.670059248805 --2.91384291649 --0.670045465231 --2.89658498764 --0.670033827424 --2.87932723761 --0.670024275779 --2.86207002401 --0.670016810298 --2.84481281042 --0.670011460781 --2.82755595445 --0.670008212328 --2.81029909849 --0.670007094741 --2.79304248094 --0.670008122921 --2.77578562498 --0.670011267066 --2.75852894783 --0.670016467571 --2.74127197265 --0.670023813844 --2.72401499748 --0.670033276081 --2.70675754547 --0.670044869185 --2.68949997425 --0.67005854845 --2.67224186659 --0.670074373484 --2.65498352051 --0.670092225075 --2.63772451878 --0.670102119446 --2.61850869655 --0.670093119144 --2.59929454326 --0.670075118542 --2.58203566074 --0.670059278607 --2.56477707625 --0.670045495033 --2.5475191474 --0.670033827424 --2.53026139736 --0.670024275779 --2.51300412417 --0.670016810298 --2.49574691057 --0.670011460781 --2.47849011421 --0.670008212328 --2.46123319864 --0.670007124543 --2.44397652149 --0.670008122921 --2.42671978474 --0.670011237264 --2.40946316719 --0.670016467571 --2.39220613241 --0.670023813844 --2.37494915724 --0.670033276081 --2.35769176483 --0.670044869185 --2.34043419361 --0.67005854845 --2.32317608595 --0.670074373484 --2.30591768026 --0.670092225075 --2.28865867853 --0.670102119446 --2.26944285631 --0.670093148947 --2.25022858381 --0.670075148344 --2.2329697609 --0.670059278607 --2.215711236 --0.670045495033 --2.19845324755 --0.670033827424 --2.18119549751 --0.670024245977 --2.16393822432 --0.670016780495 --2.14668101072 --0.670011460781 --2.12942421436 --0.670008212328 --2.1121673584 --0.670007124543 --2.09491074085 --0.670008122921 --2.07765394449 --0.670011237264 --2.06039726734 --0.670016467571 --2.04314029216 --0.670023813844 --2.02588325739 --0.670033276081 --2.00862580538 --0.670044869185 --1.99136829376 --0.67005854845 --1.9741102159 --0.670074373484 --1.95685186982 --0.670092225075 --1.93959283829 --0.670102119446 --1.92037698626 --0.670093148947 --1.90116277337 --0.670075148344 --1.88390392065 --0.670059248805 --1.86664536595 --0.670045465231 --1.8493874371 --0.670033827424 --1.83212968707 --0.670024275779 --1.81487241388 --0.670016810298 --1.79761523008 --0.670011460781 --1.78035840392 --0.670008212328 --1.76310154796 --0.670007124543 --1.74584493041 --0.670008122921 --1.72858810425 --0.670011237264 --1.7113314271 --0.670016497373 --1.69407442212 --0.670023873448 --1.67681741714 --0.670033305884 --1.65955999493 --0.670044898987 --1.64230242372 --0.670058578253 --1.62504431605 --0.670074373484 --1.60778599977 --0.670092225075 --1.59052699805 --0.670102119446 --1.57131111622 --0.670093148947 --1.55209690333 --0.670075178146 --1.5348380506 --0.670059293508 --1.51757949591 --0.670045480132 --1.50032156706 --0.670033827424 --1.48306384682 --0.670024275779 --1.46580660343 --0.670016780495 --1.44854938984 --0.670011430979 --1.43129259348 --0.670008212328 --1.41403570771 --0.670007124543 --1.39677903056 --0.670008137822 --1.3795222342 --0.670011252165 --1.36226555705 --0.670016497373 --1.34500855207 --0.670023873448 --1.3277515471 --0.670033335686 --1.31049412489 --0.670044898987 --1.29323661327 --0.67005854845 --1.27597853541 --0.670074373484 --1.25872018933 --0.670092225075 --1.2414611578 --0.670102119446 --1.22224530578 --0.670093119144 --1.20303109288 --0.670075148344 --1.18577221036 --0.67005930841 --1.16851365566 --0.670045495033 --1.15125572682 --0.670033827424 --1.13399797678 --0.670024245977 --1.11674073338 --0.670016780495 --1.09948354959 --0.670011460781 --1.08222672343 --0.670008212328 --1.06496983767 --0.670007124543 --1.04771322012 --0.670008122921 --1.03045639396 --0.670011237264 --1.013199687 --0.670016467571 --0.995942696928 --0.670023813844 --0.978685691952 --0.670033305884 --0.961428284645 --0.670044928789 --0.944170758128 --0.670058578253 --0.926912665367 --0.670074373484 --0.909654319286 --0.670092225075 --0.892395302653 --0.670102119446 --0.873179450631 --0.670093148947 --0.853965222836 --0.670075148344 --0.836706355214 --0.670059248805 --0.819447815418 --0.670045465231 --0.802189871669 --0.670033827424 --0.784932121634 --0.670024275779 --0.767674878239 --0.670016810298 --0.750417679548 --0.670011460781 --0.733160868287 --0.670008212328 --0.71590398252 --0.670007094741 --0.698647350073 --0.670008137822 --0.681390538812 --0.670011281967 --0.664133861661 --0.670016497373 --0.646876886487 --0.670023873448 --0.629619896412 --0.670033305884 --0.612362444401 --0.670044869185 --0.59510487318 --0.67005854845 --0.577846810222 --0.670074373484 --0.56058844924 --0.670092225075 --0.543329417706 --0.670102119446 --0.524113580585 --0.670093119144 --0.50489936769 --0.670075118542 --0.48764051497 --0.670059278607 --0.470381967723 --0.670045495033 --0.453124031424 --0.670033827424 --0.43586628139 --0.670024275779 --0.418609023094 --0.670016810298 --0.401351846754 --0.670011490583 --0.384095028043 --0.670008242131 --0.366838127375 --0.670007094741 --0.349581502378 --0.670008137822 --0.332324691116 --0.670011281967 --0.315068006515 --0.670016497373 --0.297811016441 --0.670023843646 --0.280554018914 --0.670033305884 --0.263296604156 --0.670044928789 --0.246039055288 --0.670058578253 --0.228780958802 --0.670074373484 --0.211522612721 --0.670092225075 --0.194263588637 --0.670102119446 --0.175047736615 --0.65297627449 --0.155827987939 --0.652958646417 --0.138569146395 --0.652943074703 --0.121310617775 --0.65292955935 --0.104052711278 --0.652918085456 --0.0867949873209 --0.652908682823 --0.0695377569646 --0.652901381254 --0.0522805908695 --0.652896150947 --0.0350237949751 --0.652893006801 --0.0177669394761 --0.652891948819 --0.000510331243278 --0.652892947197 -0.0167464599945 --0.652896001935 -0.0340031282976 --0.652901127934 -0.051260101609 --0.652908354997 -0.068517071195 --0.652917608619 -0.0857744719833 --0.652928963304 -0.103032004088 --0.652942374348 -0.120290080085 --0.652957871556 -0.137548398226 --0.652975395322 -0.154807392508 --0.652985095978 -0.174023445696 --0.65297627449 -0.193237856031 --0.652958646417 -0.210496697575 --0.652943074703 -0.227755226195 --0.65292955935 -0.245013128966 --0.65291814506 -0.262270852923 --0.652908742428 -0.279528088868 --0.652901411057 -0.296785265207 --0.652896180749 -0.314042046666 --0.652893006801 -0.331298902631 --0.652891919017 -0.348555520177 --0.652892902493 -0.365812309086 --0.652895987034 -0.383068978786 --0.652901098132 -0.40032595396 --0.652908325195 -0.417582929134 --0.652917608619 -0.434840328992 --0.652928963304 -0.452097855508 --0.652942374348 -0.469355925917 --0.652957871556 -0.486614242196 --0.652975395322 -0.503873236478 --0.652985095978 -0.523089304566 --0.65297627449 -0.542303726077 --0.652958616614 -0.559562548995 --0.652943044901 -0.576821058989 --0.65292955935 -0.594078958035 --0.652918115258 -0.611336693168 --0.652908712625 -0.628593936562 --0.652901411057 -0.645851105452 --0.652896180749 -0.663107901812 --0.652893006801 -0.680364757776 --0.652891948819 -0.697621375322 --0.652892932296 -0.71487814188 --0.652895987034 -0.73213480413 --0.652901127934 -0.749391794205 --0.652908354997 -0.766648769379 --0.652917608619 -0.783906176686 --0.652928963304 -0.801163703203 --0.652942374348 -0.818421795964 --0.652957871556 -0.835680127144 --0.652975395322 -0.852939113974 --0.652985095978 -0.872155159712 --0.65297627449 -0.891369581223 --0.652958616614 -0.908628404141 --0.652943044901 -0.925886914134 --0.65292955935 -0.943144842982 --0.65291814506 -0.960402563214 --0.652908742428 -0.977659776807 --0.652901411057 -0.994916960596 --0.652896180749 -1.01217380166 --0.652893006801 -1.02943062782 --0.652891948819 -1.04668721556 --0.652892932296 -1.06394401192 --0.652895987034 -1.08120065927 --0.652901127934 -1.09845763445 --0.652908354997 -1.11571460962 --0.652917608619 -1.13297200203 --0.652928963304 -1.15022951364 --0.652942374348 -1.16748759151 --0.652957871556 -1.18474593759 --0.652975395322 -1.20200493932 --0.652985095978 -1.22122097015 --0.65297627449 -1.24043539166 --0.652958646417 -1.25769424439 --0.652943074703 -1.27495276928 --0.65292955935 -1.29221069813 --0.652918115258 -1.30946841836 --0.652908712625 -1.32672563195 --0.652901411057 -1.34398278594 --0.652896180749 -1.3612395823 --0.652893006801 -1.37849646807 --0.652891948819 -1.39575305581 --0.652892932296 -1.41300985217 --0.652895987034 -1.43026652932 --0.652901127934 -1.44752350449 --0.6529083848 -1.46478047967 --0.652917668224 -1.48203787208 --0.652928993106 -1.49929541349 --0.652942374348 -1.51655349135 --0.652957871556 -1.53381180763 --0.652975365519 -1.55107080937 --0.652985066175 -1.57028687 --0.65297627449 -1.58950129151 --0.652958646417 -1.60676011444 --0.652943059802 -1.62401863933 --0.652929544449 -1.64127653837 --0.65291814506 -1.65853425861 --0.652908742428 -1.6757915318 --0.652901411057 -1.69304868579 --0.652896180749 -1.71030545235 --0.652893006801 -1.72756230831 --0.652891948819 -1.74481892586 --0.652892947197 -1.76207572222 --0.652896001935 -1.77933239937 --0.652901098132 -1.79658934474 --0.652908354997 -1.81384631992 --0.652917668223 -1.83110374212 --0.652928993106 -1.84836122394 --0.652942374348 -1.86561927199 --0.652957871556 -1.88287761807 --0.652975395322 -1.90013661981 --0.652985095978 -1.91935271025 --0.65297627449 -1.93856713176 --0.652958676219 -1.95582595467 --0.652943104505 -1.97308447957 --0.65292955935 -1.99034237862 --0.65291814506 -2.00760012865 --0.652908742428 -2.02485734225 --0.652901411057 -2.04211449623 --0.652896180749 -2.05937129259 --0.652893006801 -2.07662814856 --0.652891948819 -2.0938847661 --0.652892932296 -2.11114156246 --0.652895987034 -2.12839823961 --0.652901127934 -2.14565521479 --0.652908354997 -2.16291218996 --0.652917638421 -2.18016958237 --0.652928993106 -2.19742709398 --0.652942374348 -2.21468520165 --0.652957871556 -2.23194348812 --0.652975395322 -2.24920243025 --0.652985095978 -2.26841855049 --0.65297627449 -2.2876329422 --0.652958646417 -2.30489176512 --0.652943074703 -2.32215029001 --0.65292955935 -2.33940815926 --0.652918115258 -2.35666590929 --0.652908712625 -2.37392312288 --0.652901411057 -2.39118033648 --0.652896180749 -2.40843719244 --0.652893006801 -2.42569404841 --0.652891919017 -2.44295066595 --0.652892917395 -2.46020740271 --0.652896001935 -2.47746402025 --0.652901127934 -2.49472099543 --0.6529083848 -2.5119779706 --0.652917638421 -2.52923542261 --0.652928963304 -2.54649293423 --0.652942374348 -2.56375098229 --0.652957871556 -2.58100938797 --0.652975395322 -2.5982683897 --0.652985095978 -2.61748439074 --0.65297627449 -2.63669884205 --0.652958616614 -2.65395766497 --0.652943044901 -2.67121618986 --0.65292955935 -2.68847411871 --0.65291814506 -2.70573180914 --0.652908742428 -2.72298908234 --0.652901411057 -2.74024623633 --0.652896210551 -2.75750297308 --0.652893036604 -2.77475982905 --0.652891919017 -2.79201644659 --0.652892917395 -2.80927330256 --0.652896001935 -2.82652997971 --0.652901127934 -2.84378695488 --0.652908354997 -2.86104393005 --0.652917638421 -2.87830126286 --0.652928993106 -2.89555883408 --0.652942374348 -2.91281694174 --0.652957871556 -2.93007522821 --0.652975395322 -2.94733422995 --0.652985095978 -2.96655029058 --0.65297627449 -2.98576468229 --0.652958646417 -3.00302350521 --0.652943074703 -3.02028203011 --0.65292955935 -3.03753995895 --0.652918085456 -3.05479764938 --0.652908682823 -3.07205486298 --0.652901381254 -3.08931207657 --0.652896150947 -3.10656887293 --0.652893006801 -3.12382572889 --0.652891948819 -3.14108231862 --0.652892947197 --3.12484616041 --0.652896001935 --3.10758948326 --0.652901127934 --3.09033250808 --0.652908354997 --3.07307553291 --0.652917608619 --3.05581820011 --0.652928963304 --3.03856062889 --0.652942374348 --3.02130252123 --0.652957871556 --3.00404423475 --0.652975395322 --2.98678523302 --0.652985095978 --2.96756917238 --0.65297627449 --2.94835478067 --0.652958646417 --2.93109595775 --0.652943074703 --2.91383743286 --0.65292955935 --2.89657950401 --0.65291814506 --2.87932181359 --0.652908742428 --2.86206459999 --0.652901411057 --2.8448073864 --0.652896180749 --2.82755059004 --0.652893006801 --2.81029373407 --0.652891919017 --2.79303711653 --0.652892902493 --2.77578032017 --0.652895987034 --2.75852364302 --0.652901098132 --2.74126666784 --0.652908325195 --2.72400975227 --0.652917608619 --2.70675235987 --0.652928963304 --2.68949478865 --0.652942374348 --2.67223674059 --0.652957871556 --2.65497845411 --0.652975395322 --2.63771945238 --0.652985095978 --2.61850339174 --0.65297627449 --2.59928900003 --0.652958616614 --2.58203017711 --0.652943044901 --2.56477165222 --0.65292955935 --2.54751372338 --0.652918115258 --2.53025597334 --0.652908712625 --2.51299875974 --0.652901411057 --2.49574154615 --0.652896180749 --2.47848469019 --0.652893006801 --2.46122783422 --0.652891948819 --2.44397121668 --0.652892932296 --2.42671447992 --0.652895987034 --2.40945786238 --0.652901127934 --2.3922008872 --0.652908354997 --2.37494391203 --0.652917608619 --2.35768646002 --0.652928963304 --2.3404289484 --0.652942374348 --2.32317090035 --0.652957871556 --2.30591249466 --0.652975395322 --2.28865349293 --0.652985095978 --2.26943749189 --0.65297627449 --2.25022304058 --0.652958616614 --2.23296421767 --0.652943044901 --2.21570569277 --0.65292955935 --2.19844776392 --0.65291814506 --2.18119007349 --0.652908742428 --2.1639328599 --0.652901411057 --2.14667570591 --0.652896180749 --2.12941890955 --0.652893006801 --2.11216205358 --0.652891948819 --2.09490543604 --0.652892932296 --2.07764869928 --0.652895987034 --2.06039202213 --0.652901127934 --2.04313504696 --0.652908354997 --2.02587807178 --0.652917608619 --2.00862061977 --0.652928963304 --1.99136310816 --0.652942374348 --1.9741050303 --0.652957871556 --1.95684671402 --0.652975395322 --1.93958771229 --0.652985095978 --1.92037165165 --0.65297627449 --1.90115723014 --0.652958646417 --1.88389840722 --0.652943074703 --1.86663988233 --0.65292955935 --1.84938195348 --0.652918115258 --1.83212423325 --0.652908712625 --1.81486698985 --0.652901411057 --1.79760983586 --0.652896180749 --1.78035306931 --0.652893006801 --1.76309621334 --0.652891948819 --1.74583959579 --0.652892932296 --1.72858279943 --0.652895987034 --1.71132612228 --0.652901127934 --1.69406914711 --0.6529083848 --1.67681217193 --0.652917668224 --1.65955477953 --0.652928993106 --1.64229723811 --0.652942374348 --1.62503913045 --0.652957871556 --1.60778084398 --0.652975365519 --1.59052187205 --0.652985066175 --1.5713057816 --0.65297627449 --1.55209138989 --0.652958646417 --1.53483256698 --0.652943059802 --1.51757401228 --0.652929544449 --1.50031611324 --0.65291814506 --1.483058393 --0.652908742428 --1.46580117941 --0.652901411057 --1.44854399562 --0.652896180749 --1.43128719926 --0.652893006801 --1.41403034329 --0.652891948819 --1.39677369594 --0.652892947197 --1.37951692939 --0.652896001935 --1.36226028204 --0.652901098132 --1.34500330687 --0.652908354997 --1.32774633169 --0.652917668223 --1.31048890948 --0.652928993106 --1.29323139787 --0.652942374348 --1.27597334981 --0.652957871556 --1.25871500373 --0.652975395322 --1.241456002 --0.652985095978 --1.22223997116 --0.65297627449 --1.20302554965 --0.652958676219 --1.18576669693 --0.652943104505 --1.16850817204 --0.65292955935 --1.15125027299 --0.65291814506 --1.13399255276 --0.652908742428 --1.11673530936 --0.652901411057 --1.09947815537 --0.652896180749 --1.08222138881 --0.652893006801 --1.06496450305 --0.652891948819 --1.0477078855 --0.652892932296 --1.03045108914 --0.652895987034 --1.01319441199 --0.652901127934 --0.995937451719 --0.652908354997 --0.978680461645 --0.652917638421 --0.961423069239 --0.652928993106 --0.944165557623 --0.652942374348 --0.926907479763 --0.652957871556 --0.909649148583 --0.652975395322 --0.892390161753 --0.652985095978 --0.873174116016 --0.65297627449 --0.853959694505 --0.652958646417 --0.836700856685 --0.652943074703 --0.819442331791 --0.65292955935 --0.802184417844 --0.652918115258 --0.784926697612 --0.652908712625 --0.767669469118 --0.652901411057 --0.750412285328 --0.652896180749 --0.733155503869 --0.652893006801 --0.715898647904 --0.652891919017 --0.698642030358 --0.652892917395 --0.681385233999 --0.652896001935 --0.664128571749 --0.652901127934 --0.646871611476 --0.6529083848 --0.629614651203 --0.652917638421 --0.612357228994 --0.652928963304 --0.595099672675 --0.652942374348 --0.577841624618 --0.652957871556 --0.560583293438 --0.652975395322 --0.543324276805 --0.652985095978 --0.524108231068 --0.65297627449 --0.504893839359 --0.652958616614 --0.48763500154 --0.652943044901 --0.470376461744 --0.65292955935 --0.453118555247 --0.65291814506 --0.435860835016 --0.652908742428 --0.418603606522 --0.652901411057 --0.401346445084 --0.652896210551 --0.384089656174 --0.652893036604 --0.366832777858 --0.652891919017 --0.349576167762 --0.652892917395 --0.332319386303 --0.652896001935 --0.315062716603 --0.652901127934 --0.29780574888 --0.652908354997 --0.280548773706 --0.652917638421 --0.263291373849 --0.652928993106 --0.246033847332 --0.652942374348 --0.228775776923 --0.652957871556 --0.211517456919 --0.652975395322 --0.194258458912 --0.652985095978 --0.175042405724 --0.635840222239 --0.15582241118 --0.635822951794 --0.138563595712 --0.635807693005 --0.121305087581 --0.635794460773 --0.104047199711 --0.635783240199 --0.0867894999683 --0.635774016381 --0.0695322938263 --0.635766863823 --0.052275147289 --0.635761752724 --0.0350183723495 --0.635758653283 --0.017761539435 --0.635757610202 --0.000504952855408 --0.635758578777 -0.0167518162634 --0.635761573911 -0.0340084629133 --0.635766640306 -0.0512654148042 --0.635773733258 -0.0685223629698 --0.635782763362 -0.0857797395438 --0.635793879628 -0.103037245572 --0.635807007551 -0.120295304805 --0.635822162032 -0.137553606182 --0.635839357972 -0.154812578112 --0.635848879814 -0.17402882874 --0.635840252041 -0.19324343279 --0.635823011398 -0.210502248258 --0.635807722807 -0.227760754526 --0.635794460773 -0.24501863867 --0.635783270002 -0.262276344001 --0.635774046183 -0.279533557594 --0.635766863823 -0.296790704131 --0.635761752724 -0.314047463238 --0.635758653283 -0.331304296851 --0.635757580399 -0.348560892046 --0.635758548975 -0.365817666054 --0.635761573911 -0.383074313402 --0.635766580701 -0.400331258774 --0.635773673654 -0.417588211596 --0.635782793164 -0.434845596552 --0.635793909431 -0.452103100717 --0.635807037353 -0.469361156225 --0.635822221637 -0.486619450152 --0.635839387774 -0.503878414631 --0.635848879814 -0.523094683885 --0.635840252041 -0.542309299111 --0.635822981596 -0.559568092227 --0.635807693005 -0.576826587319 --0.635794460773 -0.594084486365 --0.635783240199 -0.611342191696 --0.635774016381 -0.628599390388 --0.635766863823 -0.645856544375 --0.635761752724 -0.663113325834 --0.635758653283 -0.680370151997 --0.635757580399 -0.697626754642 --0.635758548975 -0.714883521199 --0.635761603713 -0.732140153646 --0.635766640306 -0.749397113919 --0.635773703456 -0.766654074192 --0.635782793164 -0.783911466598 --0.635793909431 -0.801168978214 --0.635807037353 -0.818427026272 --0.635822221637 -0.835685312748 --0.635839387774 -0.852944284677 --0.635848879814 -0.87216052413 --0.635840252041 -0.891375124455 --0.635822981596 -0.908633947373 --0.635807693005 -0.925892457366 --0.635794460773 -0.943150341511 --0.635783270002 -0.960408046842 --0.635774046183 -0.977665245533 --0.635766863823 -0.99492238462 --0.635761752724 -1.01217919588 --0.635758653283 -1.02943602204 --0.635757580399 -1.04669257998 --0.635758548975 -1.06394934654 --0.635761573911 -1.08120599389 --0.635766610503 -1.09846293926 --0.635773703456 -1.11571988463 --0.635782793164 -1.13297727704 --0.635793909431 -1.15023478866 --0.635807037353 -1.16749283672 --0.635822221637 -1.18475115299 --0.635839387774 -1.20201012492 --0.635848879814 -1.22122636437 --0.635840252041 -1.2404409945 --0.635823011398 -1.25769978762 --0.635807722807 -1.27495828271 --0.635794460773 -1.29221621156 --0.635783240199 -1.30947390199 --0.635774016381 -1.32673108578 --0.635766863823 -1.34398823976 --0.635761752724 -1.36124503612 --0.635758653283 -1.37850186228 --0.635757580399 -1.39575842023 --0.635758548975 -1.41301521659 --0.635761603713 -1.43027186394 --0.635766640306 -1.44752880931 --0.635773703456 -1.46478578448 --0.635782822967 -1.48204317689 --0.635793939233 -1.4993006587 --0.635807007551 -1.51655870676 --0.635822191834 -1.53381699324 --0.635839357972 -1.55107596517 --0.635848850012 -1.57029223442 --0.635840252041 -1.58950683474 --0.635822981596 -1.60676565767 --0.635807693005 -1.62402418256 --0.635794460773 -1.64128205181 --0.635783270002 -1.65853974223 --0.635774046183 -1.67579698563 --0.635766863823 -1.69305410981 --0.635761752724 -1.71031084657 --0.635758653283 -1.72756770253 --0.635757580399 -1.74482432008 --0.635758548975 -1.76208108664 --0.635761603713 -1.77933773398 --0.635766640306 -1.79659467936 --0.635773703456 -1.81385162473 --0.635782793164 -1.83110898733 --0.635793909431 -1.84836646915 --0.635807037353 -1.8656245172 --0.635822221637 -1.88288283348 --0.635839387774 -1.90014183521 --0.635848879814 -1.91935810447 --0.635840222239 -1.93857270479 --0.635822951794 -1.95583152771 --0.635807693005 -1.9730900228 --0.635794460773 -1.99034789205 --0.635783270002 -2.00760558248 --0.635774046183 -2.02486276627 --0.635766863823 -2.04211992025 --0.635761752724 -2.05937665701 --0.635758653283 -2.07663351297 --0.635757580399 -2.09389013052 --0.635758548975 -2.11114686728 --0.635761603713 -2.12840354442 --0.635766640306 -2.1456605196 --0.635773703456 -2.16291749477 --0.635782793164 -2.18017482758 --0.635793909431 -2.19743227959 --0.635807037353 -2.21469038725 --0.635822221637 -2.23194867373 --0.635839387774 -2.24920761585 --0.635848879814 -2.26842391491 --0.635840252041 -2.28763854504 --0.635823011398 -2.30489736796 --0.635807722807 -2.32215583325 --0.635794460773 -2.33941370249 --0.635783240199 -2.35667139292 --0.635774016381 -2.37392860651 --0.635766863823 -2.3911858201 --0.635761752724 -2.40844261646 --0.635758653283 -2.42569941282 --0.635757580399 -2.44295597076 --0.635758548975 -2.46021276712 --0.635761573911 -2.47746938467 --0.635766610503 -2.49472630024 --0.635773703456 -2.51198327541 --0.635782793164 -2.52924072742 --0.635793909431 -2.54649823904 --0.635807037353 -2.5637562871 --0.635822221637 -2.58101463318 --0.635839387774 -2.5982735753 --0.635848879814 -2.61748975515 --0.635840252041 -2.63670438528 --0.635822981596 -2.6539632082 --0.635807693005 -2.67122173309 --0.635794460773 -2.68847966194 --0.635783270002 -2.70573735237 --0.635774046183 -2.72299456596 --0.635766863823 -2.74025166035 --0.635761752724 -2.7575083971 --0.635758653283 -2.77476525307 --0.635757580399 -2.79202187061 --0.635758548975 -2.80927866697 --0.635761603713 -2.82653528452 --0.635766640306 -2.84379225969 --0.635773703456 -2.86104917526 --0.635782793164 -2.87830650806 --0.635793909431 -2.89556407929 --0.635807037353 -2.91282212734 --0.635822221637 -2.93008041382 --0.635839387774 -2.94733941555 --0.635848879814 -2.966555655 --0.635840222239 -2.98577022553 --0.635822951794 -3.00302904845 --0.635807693005 -3.02028757334 --0.635794460773 -3.03754544258 --0.635783240199 -3.05480313301 --0.635774016381 -3.0720603466 --0.635766863823 -3.08931750059 --0.635761752724 -3.10657423735 --0.635758653283 -3.12383109331 --0.635757610202 -3.14108774264 --0.635758578777 --3.124840796 --0.635761573911 --3.10758417845 --0.635766640306 --3.09032720327 --0.635773733258 --3.0730702281 --0.635782763362 --3.0558128953 --0.635793879628 --3.03855538368 --0.635807007551 --3.02129733562 --0.635822162032 --3.00403904915 --0.635839357972 --2.98678004742 --0.635848879814 --2.96756380797 --0.635840252041 --2.94834923744 --0.635823011398 --2.93109041452 --0.635807722807 --2.91383188963 --0.635794460773 --2.89657402038 --0.635783270002 --2.87931632995 --0.635774046183 --2.86205911636 --0.635766863823 --2.84480196238 --0.635761752724 --2.82754522562 --0.635758653283 --2.81028836966 --0.635757580399 --2.79303175211 --0.635758548975 --2.77577501536 --0.635761573911 --2.75851833821 --0.635766580701 --2.74126136303 --0.635773673654 --2.72400444746 --0.635782793164 --2.70674711466 --0.635793909431 --2.68948960304 --0.635807037353 --2.67223155498 --0.635822221637 --2.65497326851 --0.635839387774 --2.63771426678 --0.635848879814 --2.61849796772 --0.635840252041 --2.59928333759 --0.635822981596 --2.58202457428 --0.635807693005 --2.56476610899 --0.635794460773 --2.54750818014 --0.635783240199 --2.53025048971 --0.635774016381 --2.51299333572 --0.635766863823 --2.49573612213 --0.635761752724 --2.47847926617 --0.635758653283 --2.46122246981 --0.635757580399 --2.44396591186 --0.635758548975 --2.42670911551 --0.635761603713 --2.40945249796 --0.635766640306 --2.39219558239 --0.635773703456 --2.37493860722 --0.635782793164 --2.35768115521 --0.635793909431 --2.34042364359 --0.635807037353 --2.32316559553 --0.635822221637 --2.30590730906 --0.635839387774 --2.28864836693 --0.635848879814 --2.26943212748 --0.635840252041 --2.25021749735 --0.635822981596 --2.23295867443 --0.635807693005 --2.21570014954 --0.635794460773 --2.19844228029 --0.635783270002 --2.18118458986 --0.635774046183 --2.16392737627 --0.635766863823 --2.14667028189 --0.635761752724 --2.12941348553 --0.635758653283 --2.11215662956 --0.635757580399 --2.09490001202 --0.635758548975 --2.07764327526 --0.635761573911 --2.06038665772 --0.635766610503 --2.04312968254 --0.635773703456 --2.02587276697 --0.635782793164 --2.00861537457 --0.635793909431 --1.99135783315 --0.635807037353 --1.97409978509 --0.635822221637 --1.95684149861 --0.635839387774 --1.93958252668 --0.635848879814 --1.92036628723 --0.635840252041 --1.90115168691 --0.635823011398 --1.88389286399 --0.635807722807 --1.86663433909 --0.635794460773 --1.84937644005 --0.635783240199 --1.83211874962 --0.635774016381 --1.81486153602 --0.635766863823 --1.79760438204 --0.635761752724 --1.78034764528 --0.635758653283 --1.76309081912 --0.635757580399 --1.74583420158 --0.635758548975 --1.72857743502 --0.635761603713 --1.71132078767 --0.635766640306 --1.6940638423 --0.635773703456 --1.67680689693 --0.635782822967 --1.65954953432 --0.635793939233 --1.6422920227 --0.635807007551 --1.62503394484 --0.635822191834 --1.60777565837 --0.635839357972 --1.59051668644 --0.635848850012 --1.57130041719 --0.635840252041 --1.55208581686 --0.635822981596 --1.53482699394 --0.635807693005 --1.51756846905 --0.635794460773 --1.50031059981 --0.635783270002 --1.48305287957 --0.635774046183 --1.46579566598 --0.635766863823 --1.44853854179 --0.635761752724 --1.43128177523 --0.635758653283 --1.41402491927 --0.635757580399 --1.39676833153 --0.635758548975 --1.37951159477 --0.635761603713 --1.36225494743 --0.635766640306 --1.34499800205 --0.635773703456 --1.32774105668 --0.635782793164 --1.31048366427 --0.635793909431 --1.29322615266 --0.635807037353 --1.2759681046 --0.635822221637 --1.25870978832 --0.635839387774 --1.24145081639 --0.635848879814 --1.22223457694 --0.635840222239 --1.20301994682 --0.635822951794 --1.1857611537 --0.635807693005 --1.16850265861 --0.635794460773 --1.15124475956 --0.635783270002 --1.13398706913 --0.635774046183 --1.11672985554 --0.635766863823 --1.09947270155 --0.635761752724 --1.08221596479 --0.635758653283 --1.06495913863 --0.635757580399 --1.04770252109 --0.635758548975 --1.03044572473 --0.635761603713 --1.01318907738 --0.635766640306 --0.995932146908 --0.635773703456 --0.978675186634 --0.635782793164 --0.961417809129 --0.635793909431 --0.944160297513 --0.635807037353 --0.926902234554 --0.635822221637 --0.909643933177 --0.635839387774 --0.892384976149 --0.635848879814 --0.873168736696 --0.635840252041 --0.85395412147 --0.635823011398 --0.836695298553 --0.635807722807 --0.819436788559 --0.635794460773 --0.802178904414 --0.635783240199 --0.784921213984 --0.635774016381 --0.767664000392 --0.635766863823 --0.750406831503 --0.635761752724 --0.733150064945 --0.635758653283 --0.715893253684 --0.635757580399 --0.69863666594 --0.635758548975 --0.68137986958 --0.635761573911 --0.664123237133 --0.635766610503 --0.646866291762 --0.635773703456 --0.629609331489 --0.635782793164 --0.612351953983 --0.635793909431 --0.595094442367 --0.635807037353 --0.57783639431 --0.635822221637 --0.560578092933 --0.635839387774 --0.543319106102 --0.635848879814 --0.524102851748 --0.635840252041 --0.504888258874 --0.635822981596 --0.487629443407 --0.635807693005 --0.470370925963 --0.635794460773 --0.453113041818 --0.635783270002 --0.435855343938 --0.635774046183 --0.418598145246 --0.635766863823 --0.40134100616 --0.635761752724 --0.384084224701 --0.635758653283 --0.366827376187 --0.635757580399 --0.349570788443 --0.635758548975 --0.332314029336 --0.635761603713 --0.315057389438 --0.635766640306 --0.297800436616 --0.635773703456 --0.280543491244 --0.635782793164 --0.263286113739 --0.635793909431 --0.246028602124 --0.635807037353 --0.228770550341 --0.635822221637 --0.211512252688 --0.635839387774 --0.194253280759 --0.635848879814 --0.175037026405 --0.618704646826 --0.155816007406 --0.618687704206 --0.138557210565 --0.618672788143 --0.121298730373 --0.618659839034 --0.104040872305 --0.61864887178 --0.0867831986398 --0.618639871478 --0.0695260176435 --0.618632867932 --0.0522688962519 --0.618627846241 --0.0350121473893 --0.618624806404 --0.0177553386893 --0.618623748422 --0.000498776789755 --0.618624687195 -0.0167579671834 --0.618627622724 -0.0340145882219 --0.61863258481 -0.0512715140357 --0.618639528751 -0.0685284389183 --0.618648380041 -0.0857857894152 --0.618659287691 -0.103043265641 --0.618672132492 -0.120301296935 --0.618686974049 -0.137559577823 --0.618703827262 -0.154818531126 --0.61871317029 -0.174035008997 --0.61870470643 -0.193249840289 --0.618687793613 -0.21050862968 --0.618672817945 -0.227767109871 --0.618659839034 -0.245024975389 --0.61864887178 -0.262282662094 --0.618639871478 -0.279539845884 --0.618632867932 -0.296796955168 --0.618627846241 -0.314053691924 --0.618624806404 -0.331310503185 --0.618623748422 -0.348567068577 --0.618624687195 -0.365823812783 --0.618627652526 -0.383080430329 --0.61863258481 -0.400337360799 --0.618639498949 -0.41759429127 --0.618648409844 -0.434851638973 --0.618659317494 -0.452109120786 --0.618672162295 -0.469367161393 --0.618687033653 -0.486625425517 --0.618703827262 -0.503884352744 --0.618713140488 -0.523100838065 --0.61870470643 -0.542315676809 --0.61868776381 -0.559574455023 --0.618672788143 -0.576832950115 --0.618659839034 -0.594090819359 --0.61864887178 -0.611348494887 --0.618639871478 -0.628605678678 --0.618632867932 -0.645862817764 --0.618627846241 -0.663119569421 --0.618624806404 -0.68037635088 --0.618623763323 -0.697632923723 --0.618624702096 -0.714889675379 --0.618627682328 -0.732146278024 --0.618632614612 -0.749403193593 --0.618639498949 -0.766660138965 --0.618648409844 -0.78391751647 --0.618659317494 -0.801174998284 --0.618672162295 -0.818433016539 --0.618687033653 -0.835691273212 --0.618703827262 -0.852950230241 --0.618713140488 -0.872166708112 --0.61870470643 -0.891381531954 --0.618687793613 -0.908640339971 --0.618672817945 -0.925898820162 --0.618659839034 -0.943156674505 --0.61864887178 -0.960414350033 --0.618639841676 -0.977671518922 --0.61863283813 -0.994928643109 --0.618627846241 -1.01218539476 --0.618624806404 -1.02944222093 --0.618623748422 -1.04669877887 --0.618624687195 -1.06395548582 --0.618627652526 -1.08121213317 --0.61863258481 -1.09846907854 --0.618639498949 -1.11572599411 --0.618648409844 -1.13298335672 --0.618659317494 -1.15024083853 --0.618672162295 -1.16749885678 --0.618687033653 -1.18475714326 --0.618703857064 -1.20201608538 --0.61871317029 -1.22123256326 --0.61870470643 -1.2404474318 --0.618687793613 -1.25770619511 --0.618672817945 -1.2749646306 --0.618659839034 -1.29222252965 --0.61864887178 -1.30948022008 --0.618639871478 -1.32673737406 --0.618632867932 -1.34399449825 --0.618627846241 -1.36125126481 --0.618624806404 -1.37850806117 --0.618623748422 -1.39576461911 --0.618624716997 -1.41302138567 --0.618627682328 -1.43027797341 --0.61863258481 -1.44753488898 --0.618639528751 -1.46479183435 --0.618648454547 -1.48204919696 --0.618659332395 -1.49930667877 --0.618672132492 -1.51656472683 --0.618687003851 -1.5338229835 --0.618703857064 -1.55108189583 --0.618713140488 -1.5702983737 --0.618704676628 -1.58951321244 --0.618687793613 -1.60677203536 --0.618672817945 -1.62403053045 --0.618659839034 -1.6412883699 --0.61864887178 -1.65854606032 --0.618639841676 -1.67580324411 --0.618632808328 -1.6930603385 --0.618627816438 -1.71031707525 --0.618624806404 -1.72757390141 --0.618623748422 -1.74483048916 --0.618624687195 -1.76208722592 --0.618627652526 -1.77934384346 --0.618632614613 -1.79660078883 --0.618639558554 -1.8138577044 --0.618648439646 -1.83111503721 --0.618659317494 -1.84837251902 --0.618672162295 -1.86563053727 --0.618687033653 -1.88288882375 --0.618703827262 -1.90014779567 --0.618713140488 -1.91936427354 --0.618704676628 -1.93857911229 --0.618687734008 -1.95583790541 --0.618672788143 -1.9730963707 --0.618659839034 -1.99035423994 --0.61864887178 -2.00761190057 --0.618639871478 -2.02486908436 --0.618632867932 -2.04212617874 --0.618627846241 -2.0593829155 --0.618624806404 -2.07663977146 --0.618623748422 -2.09389632941 --0.618624687195 -2.11115306616 --0.618627682328 -2.1284096837 --0.618632614612 -2.14566659927 --0.618639498949 -2.16292351484 --0.618648409844 -2.18018084765 --0.618659317494 -2.19743829966 --0.618672162295 -2.21469634771 --0.618687033653 -2.23195463419 --0.618703827262 -2.24921357632 --0.618713140488 -2.26843011379 --0.61870470643 -2.28764498234 --0.61868776381 -2.30490374565 --0.618672788143 -2.32216221094 --0.618659839034 -2.33942008019 --0.61864887178 -2.35667771101 --0.618639841676 -2.3739349246 --0.61863283813 -2.3911921382 --0.618627846241 -2.40844887495 --0.618624806404 -2.42570561171 --0.618623748422 -2.44296211004 --0.618624687195 -2.4602189064 --0.618627652526 -2.47747552395 --0.61863258481 -2.49473237991 --0.618639528751 -2.51198935509 --0.618648439646 -2.52924674749 --0.618659317494 -2.54650425911 --0.618672162295 -2.56376230717 --0.618687033653 -2.58102053404 --0.618703857064 -2.59827947616 --0.618713140488 -2.61749595403 --0.618704676628 -2.63671076298 --0.61868776381 -2.65396952629 --0.618672788143 -2.67122805119 --0.618659839034 -2.68848592043 --0.61864887178 -2.70574361086 --0.618639871478 -2.72300082445 --0.618632867932 -2.74025791883 --0.618627846241 -2.75751465559 --0.618624806404 -2.77477145195 --0.618623748422 -2.7920280695 --0.618624687195 -2.80928480625 --0.618627682328 -2.8265413642 --0.618632614612 -2.84379833937 --0.618639498949 -2.86105525494 --0.618648409844 -2.87831258774 --0.618659317494 -2.89557009935 --0.618672162295 -2.91282808781 --0.618687033653 -2.93008637428 --0.618703827262 -2.94734537601 --0.618713140488 -2.96656179428 --0.618704646826 -2.98577660322 --0.618687704206 -3.00303542614 --0.618672788143 -3.02029389143 --0.618659839034 -3.03755176067 --0.61864887178 -3.0548094511 --0.618639871478 -3.07206660509 --0.618632867932 -3.08932369947 --0.618627846241 -3.10658043623 --0.618624806404 -3.12383729219 --0.618623748422 -3.14109394153 --0.618624687195 --3.12483465672 --0.618627622724 --3.10757809877 --0.61863258481 --3.0903211236 --0.618639528751 --3.07306414842 --0.618648380041 --3.05580681562 --0.618659287691 --3.03854936361 --0.618672132492 --3.02129137516 --0.618686974049 --3.00403308868 --0.618703827262 --2.98677408696 --0.61871317029 --2.96755766869 --0.61870470643 --2.94834285975 --0.618687793613 --2.93108397722 --0.618672817945 --2.91382551193 --0.618659839034 --2.89656770229 --0.61864887178 --2.87931001186 --0.618639871478 --2.86205285788 --0.618632867932 --2.8447957635 --0.618627846241 --2.82753902674 --0.618624806404 --2.81028217077 --0.618623748422 --2.79302555323 --0.618624687195 --2.77576887607 --0.618627652526 --2.75851225853 --0.61863258481 --2.74125528335 --0.618639498949 --2.72399836778 --0.618648409844 --2.70674103498 --0.618659317494 --2.68948358297 --0.618672162295 --2.67222553491 --0.618687033653 --2.65496724844 --0.618703827262 --2.63770830631 --0.618713140488 --2.61849176884 --0.61870470643 --2.59927690029 --0.61868776381 --2.58201813698 --0.618672788143 --2.56475967169 --0.618659839034 --2.54750180244 --0.61864887178 --2.53024417162 --0.618639871478 --2.51298701763 --0.618632867932 --2.49572980404 --0.618627846241 --2.47847300768 --0.618624806404 --2.46121627093 --0.618623763323 --2.44395977258 --0.618624702096 --2.42670297623 --0.618627682328 --2.40944635868 --0.618632614612 --2.39218950271 --0.618639498949 --2.37493252754 --0.618648409844 --2.35767513514 --0.618659317494 --2.34041768313 --0.618672162295 --2.32315963507 --0.618687033653 --2.3059014082 --0.618703827262 --2.28864246607 --0.618713140488 --2.2694259286 --0.61870470643 --2.25021111965 --0.618687793613 --2.23295235634 --0.618672817945 --2.21569383144 --0.618659839034 --2.1984359622 --0.61864887178 --2.18117827177 --0.618639841676 --2.16392105818 --0.61863283813 --2.1466639638 --0.618627846241 --2.12940722704 --0.618624806404 --2.11215043068 --0.618623748422 --2.09489387274 --0.618624687195 --2.07763713598 --0.618627652526 --2.06038051844 --0.61863258481 --2.04312354326 --0.618639498949 --2.02586662769 --0.618648409844 --2.00860929489 --0.618659317494 --1.99135178327 --0.618672162295 --1.97409376502 --0.618687033653 --1.95683550835 --0.618703857064 --1.93957656622 --0.61871317029 --1.92036011815 --0.61870470643 --1.90114530921 --0.618687793613 --1.88388648629 --0.618672817945 --1.8666279912 --0.618659839034 --1.84937015176 --0.61864887178 --1.83211246132 --0.618639871478 --1.81485524773 --0.618632867932 --1.79759812355 --0.618627846241 --1.78034138679 --0.618624806404 --1.76308459043 --0.618623748422 --1.74582803249 --0.618624716997 --1.72857129574 --0.618627682328 --1.71131467819 --0.61863258481 --1.69405773282 --0.618639528751 --1.67680081725 --0.618648454547 --1.65954348445 --0.618659332395 --1.64228600264 --0.618672132492 --1.62502798438 --0.618687003851 --1.6077696979 --0.618703857064 --1.59051072597 --0.618713140488 --1.57129424811 --0.618704676628 --1.55207940936 --0.618687793613 --1.53482061624 --0.618672817945 --1.51756212115 --0.618659839034 --1.50030425191 --0.61864887178 --1.48304659128 --0.618639841676 --1.46578940749 --0.618632808328 --1.44853228331 --0.618627816438 --1.43127554655 --0.618624806404 --1.41401872039 --0.618623748422 --1.39676216245 --0.618624687195 --1.37950545549 --0.618627652526 --1.36224880814 --0.618632614613 --1.34499189258 --0.618639558554 --1.32773497701 --0.618648439646 --1.3104775846 --0.618659317494 --1.29322010279 --0.618672162295 --1.27596208453 --0.618687033653 --1.25870382786 --0.618703827262 --1.24144488573 --0.618713140488 --1.22222837806 --0.618704676628 --1.20301353931 --0.618687734008 --1.185754776 --0.618672788143 --1.16849628091 --0.618659839034 --1.15123841167 --0.61864887178 --1.13398075104 --0.618639871478 --1.11672356725 --0.618632867932 --1.09946644306 --0.618627846241 --1.08220970631 --0.618624806404 --1.06495290995 --0.618623748422 --1.0476963222 --0.618624687195 --1.03043955565 --0.618627682328 --1.0131829381 --0.618632614612 --0.995926037431 --0.618639498949 --0.978669121862 --0.618648409844 --0.961411759257 --0.618659317494 --0.944154277444 --0.618672162295 --0.926896259188 --0.618687033653 --0.909637987614 --0.618703827262 --0.892379030585 --0.618713140488 --0.873162552714 --0.61870470643 --0.853947713971 --0.61868776381 --0.836688920856 --0.618672788143 --0.819430440664 --0.618659839034 --0.802172586322 --0.61864887178 --0.784914910793 --0.618639841676 --0.767657727003 --0.61863283813 --0.750400587916 --0.618627846241 --0.733143821359 --0.618624806404 --0.715887024999 --0.618623748422 --0.698630467057 --0.618624687195 --0.6813737154 --0.618627652526 --0.664117112756 --0.61863258481 --0.646860197187 --0.618639528751 --0.629603251815 --0.618648439646 --0.612345904112 --0.618659317494 --0.595088437199 --0.618672162295 --0.577830404043 --0.618687033653 --0.560572132468 --0.618703857064 --0.54331317544 --0.618713140488 --0.524096682667 --0.618704676628 --0.504881843924 --0.61868776381 --0.48762306571 --0.618672788143 --0.47036459297 --0.618659839034 --0.453106731177 --0.61864887178 --0.435849048197 --0.618639871478 --0.418591864407 --0.618632867932 --0.401334747672 --0.618627846241 --0.384077988565 --0.618624806404 --0.366821169853 --0.618623748422 --0.349564611912 --0.618624687195 --0.332307875156 --0.618627682328 --0.31505125761 --0.618632614612 --0.29779432714 --0.618639498949 --0.280537411571 --0.618648409844 --0.263280063868 --0.618659317494 --0.246022574604 --0.618672162295 --0.228764545173 --0.618687033653 --0.211506273598 --0.618703827262 --0.19424732402 --0.618713140488 --0.175030846149 --0.601598754525 --0.155809432268 --0.601582214236 --0.13855066523 --0.601567611098 --0.121292209253 --0.60155493021 --0.104034375399 --0.601544201374 --0.0867767259478 --0.601535394788 --0.069519566372 --0.601528540253 --0.0522624738514 --0.60152362287 --0.0350057529286 --0.601520657539 --0.0177489700727 --0.60151964426 --0.000492434715852 --0.601520568132 -0.0167642834131 --0.601523444057 -0.0340208788402 --0.601528257132 -0.0512777781114 --0.60153503716 -0.0685346778482 --0.601543754339 -0.0857920069248 --0.601554438472 -0.103049458936 --0.601567000151 -0.120307458565 --0.601581528783 -0.137565709651 --0.601597994566 -0.154824633151 --0.601607114077 -0.174041345715 --0.60159881413 -0.193256419152 --0.601582244039 -0.210515182465 --0.601567611098 -0.22777363658 --0.60155493021 -0.245031472296 --0.601544201374 -0.262289129198 --0.601535394788 -0.279546290636 --0.601528570056 -0.296803377569 --0.601523652672 -0.314060091973 --0.601520657539 -0.331316880882 --0.60151964426 -0.348573416471 --0.601520568132 -0.365830123425 --0.601523473859 -0.383086718619 --0.601528286934 -0.400343634188 --0.60153503716 -0.417600534856 --0.601543754339 -0.434857845306 --0.601554408669 -0.452115304768 --0.601566970348 -0.469373315573 --0.601581528783 -0.486631557346 --0.601597964764 -0.50389046967 --0.601607084274 -0.52310718596 --0.60159881413 -0.542322263122 --0.601582214236 -0.559581026435 --0.601567581296 -0.576839491725 --0.60155493021 -0.594097316265 --0.601544201374 -0.61135494709 --0.601535394788 -0.628612115979 --0.601528570056 -0.645869240164 --0.601523652672 -0.663125962019 --0.601520657539 -0.680382728577 --0.601519659161 -0.697639256716 --0.601520583033 -0.71489597857 --0.601523473859 -0.732152566314 --0.601528316736 -0.749409452081 --0.601535066962 -0.766666382551 --0.601543754339 -0.783923715353 --0.601554408669 -0.801181152463 --0.601566970348 -0.818439140916 --0.601581528783 -0.83569739759 --0.601597964764 -0.852956354618 --0.601607084274 -0.872173056006 --0.60159881413 -0.891388118267 --0.601582244039 -0.908646896481 --0.601567611098 -0.925905346871 --0.60155493021 -0.943163171411 --0.601544201374 -0.960420817137 --0.601535364985 -0.977677971125 --0.601528540253 -0.994935065508 --0.601523652672 -1.01219180227 --0.601520687341 -1.02944859863 --0.601519674063 -1.04670512676 --0.601520568132 -1.06396180391 --0.601523473859 -1.08121839165 --0.601528316736 -1.09847533703 --0.601535066962 -1.1157322526 --0.601543754339 -1.1329895854 --0.601554438472 -1.15024703741 --0.601567000151 -1.16750502586 --0.601581528783 -1.18476328254 --0.601597994566 -1.20202219486 --0.601607084274 -1.22123891115 --0.601598784327 -1.24045398832 --0.601582244039 -1.25771272182 --0.601567611098 -1.27497115731 --0.60155493021 -1.29222902656 --0.601544201374 -1.30948668718 --0.601535394788 -1.32674384117 --0.601528570056 -1.34400093555 --0.601523652672 -1.36125764251 --0.601520657539 -1.37851443887 --0.60151964426 -1.39577099681 --0.601520597935 -1.41302770376 --0.601523473859 -1.4302842617 --0.601528257132 -1.44754117727 --0.601535066962 -1.46479806304 --0.601543799043 -1.48205536604 --0.601554423571 -1.49931284785 --0.601566970348 -1.51657086611 --0.601581528783 -1.53382909298 --0.601598024368 -1.5510880053 --0.601607084274 -1.57030472159 --0.601598754525 -1.58951979875 --0.601582244039 -1.60677859187 --0.601567611098 -1.62403705716 --0.601554900408 -1.6412948668 --0.601544171572 -1.65855252743 --0.601535364985 -1.67580968142 --0.601528480649 -1.6930667758 --0.601523593068 -1.71032351256 --0.601520657539 -1.72758027911 --0.60151964426 -1.74483680725 --0.601520568132 -1.76209354401 --0.601523414254 -1.77935013175 --0.601528257132 -1.79660701752 --0.601535096765 -1.81386393309 --0.601543784142 -1.83112126589 --0.601554408669 -1.8483787179 --0.601566970348 -1.86563670635 --0.601581528783 -1.88289496303 --0.601597964764 -1.90015387535 --0.601607084274 -1.91937059164 --0.60159881413 -1.9385856986 --0.601582244039 -1.95584446192 --0.601567611098 -1.97310289741 --0.60155493021 -1.99036073685 --0.601544231176 -2.00761839747 --0.60153542459 -2.02487558126 --0.601528570056 -2.04213267565 --0.601523652672 -2.0593894124 --0.601520657539 -2.07664620876 --0.60151964426 -2.0939027071 --0.601520568132 -2.11115944386 --0.601523473859 -2.1284160614 --0.601528286934 -2.14567291737 --0.60153503716 -2.16292977333 --0.601543754339 -2.18018710613 --0.601554438472 -2.19744455814 --0.601567000151 -2.2147025466 --0.601581528783 -2.23196077347 --0.601597964764 -2.2492197156 --0.601607084274 -2.26843649149 --0.60159881413 -2.28765153885 --0.601582214236 -2.30491030216 --0.601567581296 -2.32216876745 --0.60155493021 -2.33942657709 --0.601544201374 -2.35668420792 --0.601535364985 -2.3739413619 --0.601528540253 -2.39119851589 --0.601523652672 -2.40845525265 --0.601520657539 -2.4257119894 --0.60151964426 -2.44296848774 --0.601520568132 -2.4602252245 --0.601523473859 -2.47748184204 --0.601528316736 -2.49473869801 --0.601535096765 -2.51199561358 --0.601543784142 -2.52925294638 --0.601554408669 -2.54651039839 --0.601566970348 -2.56376844645 --0.601581528783 -2.58102661372 --0.601597994566 -2.59828555584 --0.601607054472 -2.61750233173 --0.601598754525 -2.63671731949 --0.601582214236 -2.6539760828 --0.601567581296 -2.6712346077 --0.60155493021 -2.68849241734 --0.601544201374 -2.70575004816 --0.601535394788 -2.72300720215 --0.601528540253 -2.74026429653 --0.60152362287 -2.75752103329 --0.601520657539 -2.77477782965 --0.60151964426 -2.79203438759 --0.601520568132 -2.80929106474 --0.601523473859 -2.82654762268 --0.601528286934 -2.84380459786 --0.60153503716 -2.86106151343 --0.601543754339 -2.87831878662 --0.601554408669 -2.89557623863 --0.601566970348 -2.91283422709 --0.601581528783 -2.93009251356 --0.601597964764 -2.94735145569 --0.601607054472 -2.96656811237 --0.601598754525 -2.98578321934 --0.601582214236 -3.00304198265 --0.601567611098 -3.02030038834 --0.60155493021 -3.03755825758 --0.601544201374 -3.05481594801 --0.601535394788 -3.072073102 --0.601528540253 -3.08933013678 --0.60152362287 -3.10658681393 --0.601520657539 -3.12384366989 --0.60151964426 -3.14110025962 --0.601520568132 --3.12482839823 --0.601523444057 --3.10757184029 --0.601528257132 --3.09031486511 --0.60153503716 --3.07305794954 --0.601543754339 --3.05580067635 --0.601554438472 --3.03854322434 --0.601567000151 --3.02128523588 --0.601581528783 --3.00402694941 --0.601597994566 --2.98676800728 --0.601607114077 --2.96755135059 --0.60159881413 --2.94833624363 --0.601582244039 --2.93107742071 --0.601567611098 --2.91381901503 --0.60155493021 --2.89656120539 --0.601544201374 --2.87930351496 --0.601535394788 --2.86204636097 --0.601528570056 --2.84478932619 --0.601523652672 --2.82753258943 --0.601520657539 --2.81027573347 --0.60151964426 --2.79301917553 --0.601520568132 --2.77576249838 --0.601523473859 --2.75850594044 --0.601528286934 --2.74124902487 --0.60153503716 --2.7239921093 --0.601543754339 --2.7067347765 --0.601554408669 --2.68947732449 --0.601566970348 --2.67221933603 --0.601581528783 --2.65496110916 --0.601597964764 --2.63770222664 --0.601607084274 --2.61848545075 --0.60159881413 --2.59927034378 --0.601582214236 --2.58201158047 --0.601567581296 --2.56475311518 --0.60155493021 --2.54749530554 --0.601544201374 --2.53023767471 --0.601535394788 --2.51298052073 --0.601528570056 --2.49572336674 --0.601523652672 --2.47846662998 --0.601520657539 --2.46120989322 --0.601519659161 --2.44395339489 --0.601520583033 --2.42669665813 --0.601523473859 --2.40944004059 --0.601528316736 --2.39218318462 --0.601535066962 --2.37492626905 --0.601543754339 --2.35766893625 --0.601554408669 --2.34041154385 --0.601566970348 --2.32315355539 --0.601581528783 --2.30589526892 --0.601597964764 --2.28863626719 --0.601607084274 --2.2694195509 --0.60159881413 --2.25020456314 --0.601582244039 --2.23294579983 --0.601567611098 --2.21568727493 --0.60155493021 --2.19842946529 --0.601544201374 --2.18117183447 --0.601535364985 --2.16391468048 --0.601528540253 --2.1466575861 --0.601523652672 --2.12940084934 --0.601520687341 --2.11214411259 --0.601519674063 --2.09488761425 --0.601520568132 --2.07763087749 --0.601523473859 --2.06037425995 --0.601528316736 --2.04311734438 --0.601535066962 --2.02586042881 --0.601543754339 --2.00860309601 --0.601554438472 --1.991345644 --0.601567000151 --1.97408762574 --0.601581528783 --1.95682936907 --0.601597994566 --1.93957045674 --0.601607084274 --1.92035377026 --0.601598784327 --1.9011387229 --0.601582244039 --1.88387992978 --0.601567611098 --1.86662146449 --0.60155493021 --1.84936365485 --0.601544201374 --1.83210599422 --0.601535394788 --1.81484881044 --0.601528570056 --1.79759171605 --0.601523652672 --1.7803349793 --0.601520657539 --1.76307821274 --0.60151964426 --1.7458217144 --0.601520597935 --1.72856497764 --0.601523473859 --1.7113083601 --0.601528257132 --1.69405147433 --0.601535066962 --1.67679458856 --0.601543799043 --1.65953725576 --0.601554423571 --1.64227980375 --0.601566970348 --1.6250218153 --0.601581528783 --1.60776355863 --0.601598024368 --1.5905046165 --0.601607084274 --1.57128790021 --0.601598754525 --1.55207282305 --0.601582244039 --1.53481405973 --0.601567611098 --1.51755562424 --0.601554900408 --1.5002977848 --0.601544171572 --1.48304012417 --0.601535364985 --1.46578297019 --0.601528480649 --1.44852587581 --0.601523593068 --1.43126916886 --0.601520657539 --1.4140123725 --0.60151964426 --1.39675581455 --0.601520568132 --1.3794991374 --0.601523414254 --1.36224254965 --0.601528257132 --1.34498563409 --0.601535096765 --1.32772871852 --0.601543784142 --1.31047135591 --0.601554408669 --1.2932139039 --0.601566970348 --1.27595591545 --0.601581528783 --1.25869768858 --0.601597964764 --1.24143877625 --0.601607084274 --1.22222203016 --0.60159881413 --1.2030069828 --0.601582244039 --1.18574824929 --0.601567611098 --1.1684897542 --0.60155493021 --1.15123188496 --0.601544231176 --1.13397425413 --0.60153542459 --1.11671712995 --0.601528570056 --1.09946003556 --0.601523652672 --1.08220329881 --0.601520657539 --1.06494653225 --0.60151964426 --1.04769000411 --0.601520568132 --1.03043326735 --0.601523473859 --1.01317664981 --0.601528286934 --0.99591976404 --0.60153503716 --0.978662878275 --0.601543754339 --0.961405530572 --0.601554438472 --0.944148093462 --0.601567000151 --0.92689011991 --0.601581528783 --0.909631878138 --0.601597964764 --0.892372921109 --0.601607084274 --0.873156189918 --0.60159881413 --0.853941142559 --0.601582214236 --0.836682379246 --0.601567581296 --0.819423913955 --0.60155493021 --0.802166089415 --0.601544201374 --0.784908428788 --0.601535364985 --0.7676512748 --0.601528540253 --0.750394180417 --0.601523652672 --0.733137443662 --0.601520657539 --0.715880662203 --0.60151964426 --0.698624104262 --0.601520568132 --0.681367397308 --0.601523473859 --0.664110824466 --0.601528316736 --0.646853908897 --0.601535096765 --0.629597008228 --0.601543784142 --0.612339690328 --0.601554408669 --0.595082238317 --0.601566970348 --0.577824234963 --0.601581528783 --0.560566008091 --0.601597994566 --0.543307080865 --0.601607054472 --0.524090334773 --0.601598754525 --0.504875265062 --0.601582214236 --0.4876165241 --0.601567581296 --0.470358073712 --0.60155493021 --0.45310022682 --0.601544201374 --0.435842566192 --0.601535394788 --0.418585412204 --0.601528540253 --0.401328325271 --0.60152362287 --0.384071603417 --0.601520657539 --0.366814814508 --0.60151964426 --0.349558278918 --0.601520568132 --0.332301564515 --0.601523473859 --0.31504496187 --0.601528286934 --0.297788061202 --0.60153503716 --0.280531175435 --0.601543754339 --0.263273850084 --0.601554408669 --0.246016386896 --0.601566970348 --0.228758387268 --0.601581528783 --0.21150014177 --0.601597964764 --0.194241214544 --0.601607054472 --0.17502450198 --0.584503859281 --0.155803464353 --0.584487721324 --0.138544719667 --0.584473446011 --0.121286287904 --0.584461063146 --0.104028480127 --0.584450557828 --0.0867708493024 --0.584441944957 --0.0695137130096 --0.584435239434 --0.0522566447034 --0.584430426359 --0.0349999470636 --0.584427535534 --0.0177431893535 --0.584426537156 --0.000486677046865 --0.584427446127 -0.016770017799 --0.584430277348 -0.0340265906416 --0.584434956312 -0.0512834666297 --0.584441572427 -0.0685403412208 --0.584450095892 -0.0857976470143 --0.584460541606 -0.103055074811 --0.584472835064 -0.120313053951 --0.584487050771 -0.13757128641 --0.584503114223 -0.154830180108 --0.584511980414 -0.174047101289 --0.584503889084 -0.193262390792 --0.584487721324 -0.210521131754 --0.584473416209 -0.227779563516 --0.584461033344 -0.245037376881 --0.584450557828 -0.262295000255 --0.584441915154 -0.279552131891 --0.584435239434 -0.296809203923 --0.584430456161 -0.314065903425 --0.584427535534 -0.331322669983 --0.584426566959 -0.34857917577 --0.58442747593 -0.365835860372 --0.584430277348 -0.383092433214 --0.584434971213 -0.40034931153 --0.584441617131 -0.417606197297 --0.584450125694 -0.434863500297 --0.584460511804 -0.452120929956 --0.584472805262 -0.469378910959 --0.584487050771 -0.48663713038 --0.584503114223 -0.503896027804 --0.584511980414 -0.523112952709 --0.584503889084 -0.542328238487 --0.584487721324 -0.5595869869 --0.584473416209 -0.576845422387 --0.584461033344 -0.594103232026 --0.584450557828 -0.611360833049 --0.584441915154 -0.628617957234 --0.584435239434 -0.645875051618 --0.584430456161 -0.663131773472 --0.584427535534 -0.680388540029 --0.584426537156 -0.697645023465 --0.584427446127 -0.714901715517 --0.584430277348 -0.73215828836 --0.584435001016 -0.749415144324 --0.584441646933 -0.766672030091 --0.584450125694 -0.783929347992 --0.584460511804 -0.801186770201 --0.584472805262 -0.818444728851 --0.584487050771 -0.835702970624 --0.584503114223 -0.85296189785 --0.584511980414 -0.872178822756 --0.584503889084 -0.891394093632 --0.584487721324 -0.908652827144 --0.584473446011 -0.925911262632 --0.584461033344 -0.94316907227 --0.584450528026 -0.960426703095 --0.584441944957 -0.977683842182 --0.584435269236 -0.994940906763 --0.584430456161 -1.01219761372 --0.584427565336 -1.02945438028 --0.584426566958 -1.04671087861 --0.584427446127 -1.06396755576 --0.584430277348 -1.0812241137 --0.584434986114 -1.09848099947 --0.584441632032 -1.11573788523 --0.584450125694 -1.13299518823 --0.584460541606 -1.15025264025 --0.584472835064 -1.1675106287 --0.584487050771 -1.18476885557 --0.584503114223 -1.20202773809 --0.584511950612 -1.221244663 --0.584503859281 -1.24045994878 --0.584487721324 -1.25771865248 --0.584473416209 -1.27497708797 --0.584461033344 -1.29223492742 --0.584450557828 -1.30949255824 --0.584441915154 -1.32674971223 --0.584435239434 -1.34400677681 --0.584430456161 -1.36126345396 --0.584427535534 -1.37852022052 --0.584426537156 -1.39577674866 --0.584427446127 -1.41303342581 --0.584430277348 -1.43028998375 --0.584434971213 -1.44754689932 --0.584441617131 -1.46480375528 --0.584450125694 -1.48206102848 --0.584460511804 -1.49931845069 --0.584472805262 -1.51657643914 --0.584487050771 -1.53383466601 --0.584503144026 -1.55109357834 --0.584511980414 -1.57031050324 --0.584503859281 -1.58952575922 --0.584487721324 -1.60678452253 --0.584473416209 -1.62404298782 --0.584461003542 -1.64130079746 --0.584450528026 -1.65855839848 --0.584441915154 -1.67581552267 --0.584435209632 -1.69307261706 --0.584430426359 -1.71032932401 --0.584427535534 -1.72758606076 --0.584426566959 -1.7448425591 --0.58442747593 -1.76209926605 --0.584430247545 -1.77935582399 --0.584434956312 -1.79661267996 --0.584441632032 -1.81386956572 --0.584450125694 -1.83112689852 --0.584460511804 -1.84838435054 --0.584472820163 -1.86564230919 --0.584487065673 -1.88290053606 --0.584503114223 -1.90015941858 --0.584511980414 -1.91937634348 --0.584503889084 -1.93859165907 --0.584487721324 -1.95585039258 --0.584473416209 -1.97310879826 --0.584461033344 -1.9903666079 --0.58445058763 -2.00762423873 --0.584441944957 -2.02488136291 --0.584435239434 -2.0421384573 --0.584430456161 -2.05939519405 --0.584427535534 -2.07665193081 --0.584426566959 -2.09390842915 --0.58442747593 -2.1111651659 --0.584430277348 -2.12842172384 --0.584434956312 -2.14567857981 --0.584441572427 -2.16293543577 --0.584450095892 -2.18019270897 --0.584460541606 -2.19745016098 --0.584472835064 -2.21470814944 --0.584487050771 -2.23196637631 --0.584503114223 -2.24922531843 --0.584511980414 -2.26844227314 --0.584503889084 -2.28765749931 --0.584487721324 -2.30491620302 --0.584473446011 -2.32217460871 --0.584461063146 -2.33943241835 --0.584450557828 -2.35669010878 --0.584441915154 -2.37394726276 --0.584435239434 -2.39120429754 --0.584430456161 -2.4084609747 --0.584427535534 -2.42571777105 --0.584426537156 -2.44297426939 --0.584427446127 -2.46023094654 --0.584430277348 -2.47748756409 --0.584434986114 -2.49474442005 --0.584441632032 -2.51200127602 --0.584450125694 -2.52925860882 --0.584460511804 -2.54651600122 --0.584472805262 -2.56377398968 --0.584487050771 -2.58103221655 --0.584503114223 -2.59829109907 --0.584511950612 -2.61750805378 --0.584503859281 -2.63672333956 --0.584487721324 -2.65398210287 --0.584473416209 -2.67124056816 --0.584461033344 -2.6884983778 --0.584450557828 -2.70575594902 --0.584441915154 -2.7230130434 --0.584435209632 -2.74027013779 --0.584430426359 -2.75752687454 --0.584427535534 -2.7747836709 --0.584426566959 -2.79204010964 --0.58442747593 -2.80929672718 --0.584430277348 -2.82655334473 --0.584434956312 -2.8438102603 --0.58444160223 -2.86106711626 --0.584450125694 -2.87832438946 --0.584460511804 -2.89558184147 --0.584472805262 -2.91283982992 --0.584487050771 -2.93009805679 --0.584503114223 -2.94735699892 --0.584511950612 -2.96657389402 --0.584503859281 -2.9857891798 --0.584487721324 -3.00304794312 --0.584473446011 -3.0203063488 --0.584461063146 -3.03756415844 --0.584450557828 -3.05482178927 --0.584441944957 -3.07207894325 --0.584435239434 -3.08933597803 --0.584430426359 -3.10659265518 --0.584427535534 -3.12384945154 --0.584426537156 -3.14110598166 --0.584427446127 --3.12482267618 --0.584430277348 --3.10756611824 --0.584434956312 --3.09030914307 --0.584441572427 --3.0730522871 --0.584450095892 --3.05579507351 --0.584460541606 --3.0385376215 --0.584472835064 --3.02127957344 --0.584487050771 --3.00402134657 --0.584503114223 --2.98676246405 --0.584511980414 --2.96754556894 --0.584503889084 --2.94833028316 --0.584487721324 --2.93107151985 --0.584473416209 --2.91381311417 --0.584461033344 --2.89655530453 --0.584450557828 --2.8792976737 --0.584441915154 --2.86204051971 --0.584435239434 --2.84478348493 --0.584430456161 --2.82752674818 --0.584427535534 --2.81026995182 --0.584426566959 --2.79301345348 --0.58442747593 --2.77575671673 --0.584430277348 --2.75850021839 --0.584434971213 --2.74124336243 --0.584441617131 --2.72398644686 --0.584450125694 --2.70672917366 --0.584460511804 --2.68947172165 --0.584472805262 --2.67221373319 --0.584487050771 --2.65495556593 --0.584503114223 --2.63769668341 --0.584511980414 --2.6184796691 --0.584503889084 --2.59926438332 --0.584487721324 --2.58200567961 --0.584473416209 --2.56474727392 --0.584461033344 --2.54748946428 --0.584450557828 --2.53023177385 --0.584441915154 --2.51297467947 --0.584435239434 --2.49571764469 --0.584430456161 --2.47846090793 --0.584427535534 --2.46120411157 --0.584426537156 --2.44394761324 --0.584427446127 --2.42669093609 --0.584430277348 --2.40943431854 --0.584435001016 --2.39217746258 --0.584441646933 --2.37492060661 --0.584450125694 --2.35766327381 --0.584460511804 --2.34040588141 --0.584472805262 --2.32314795255 --0.584487050771 --2.30588966608 --0.584503114223 --2.28863072395 --0.584511980414 --2.26941382885 --0.584503889084 --2.25019860268 --0.584487721324 --2.23293983936 --0.584473446011 --2.21568131447 --0.584461033344 --2.19842350483 --0.584450528026 --2.18116593361 --0.584441944957 --2.16390883923 --0.584435269236 --2.14665174484 --0.584430456161 --2.12939506769 --0.584427565336 --2.11213833094 --0.584426566958 --2.0948818326 --0.584427446127 --2.07762515545 --0.584430277348 --2.0603685379 --0.584434986114 --2.04311168194 --0.584441632032 --2.02585482597 --0.584450125694 --2.00859749317 --0.584460541606 --1.99134007096 --0.584472835064 --1.97408205271 --0.584487050771 --1.95682379603 --0.584503114223 --1.93956491351 --0.584511950612 --1.92034801841 --0.584503859281 --1.90113276243 --0.584487721324 --1.88387399912 --0.584473416209 --1.86661553383 --0.584461033344 --1.84935772419 --0.584450557828 --1.83210009336 --0.584441915154 --1.81484296918 --0.584435239434 --1.7975859046 --0.584430456161 --1.78032919764 --0.584427535534 --1.76307246089 --0.584426537156 --1.74581596255 --0.584427446127 --1.7285592556 --0.584430277348 --1.71130266786 --0.584434971213 --1.69404581189 --0.584441617131 --1.67678892612 --0.584450125694 --1.65953159332 --0.584460511804 --1.64227417111 --0.584472805262 --1.62501621246 --0.584487050771 --1.60775798559 --0.584503144026 --1.59049907327 --0.584511980414 --1.57128214836 --0.584503859281 --1.55206686258 --0.584487721324 --1.53480812907 --0.584473416209 --1.51754972339 --0.584461003542 --1.50029191374 --0.584450528026 --1.48303425312 --0.584441915154 --1.46577709913 --0.584435209632 --1.44852006436 --0.584430426359 --1.43126338721 --0.584427535534 --1.41400659085 --0.584426566959 --1.3967500627 --0.58442747593 --1.37949338555 --0.584430247545 --1.36223682761 --0.584434956312 --1.34497994184 --0.584441632032 --1.32772305607 --0.584450125694 --1.31046575308 --0.584460511804 --1.29320830107 --0.584472820163 --1.27595031262 --0.584487065673 --1.25869211555 --0.584503114223 --1.24143323302 --0.584511980414 --1.22221627831 --0.584503889084 --1.20300099254 --0.584487721324 --1.18574228882 --0.584473416209 --1.16848385334 --0.584461033344 --1.15122601389 --0.58445058763 --1.13396838307 --0.584441944957 --1.11671125889 --0.584435239434 --1.09945419431 --0.584430456161 --1.08219748736 --0.584427535534 --1.0649407506 --0.584426566959 --1.04768425226 --0.58442747593 --1.03042754531 --0.584430277348 --1.01317095756 --0.584434956312 --0.995914056897 --0.584441572427 --0.978657200933 --0.584450095892 --0.961399912834 --0.584460541606 --0.944142490625 --0.584472835064 --0.926884517074 --0.584487050771 --0.909626290202 --0.584503114223 --0.892367377877 --0.584511980414 --0.87315043807 --0.584503889084 --0.853935167193 --0.584487721324 --0.836676433682 --0.584473446011 --0.819417998195 --0.584461063146 --0.802160188555 --0.584450557828 --0.78490254283 --0.584441915154 --0.767645403743 --0.584435239434 --0.750388354063 --0.584430456161 --0.73313164711 --0.584427535534 --0.715874880552 --0.584426537156 --0.698618352413 --0.584427446127 --0.681361660361 --0.584430277348 --0.66410510242 --0.584434986114 --0.646848201752 --0.584441632032 --0.629591345787 --0.584450125694 --0.612334057689 --0.584460511804 --0.595076620579 --0.584472805262 --0.577818647027 --0.584487050771 --0.560560435057 --0.584503114223 --0.543301537633 --0.584511950612 --0.524084582925 --0.584503859281 --0.504869297147 --0.584487721324 --0.487610578537 --0.584473416209 --0.470352143049 --0.584461033344 --0.45309432596 --0.584450557828 --0.435836695135 --0.584441915154 --0.418579563498 --0.584435209632 --0.401322498917 --0.584430426359 --0.384065799415 --0.584427535534 --0.366809047759 --0.584426566959 --0.349552534521 --0.58442747593 --0.332295835018 --0.584430277348 --0.315039254725 --0.584434956312 --0.297782376409 --0.58444160223 --0.280525512993 --0.584450125694 --0.263268202543 --0.584460511804 --0.246010765433 --0.584472805262 --0.228752795607 --0.584487050771 --0.21149457246 --0.584503114223 --0.194235667586 --0.584511950612 --0.175018742681 --0.567391619086 --0.15579744801 --0.567375838756 --0.138538721949 --0.567361906171 --0.121280316263 --0.567349806428 --0.104022534564 --0.567339524627 --0.0867649242282 --0.567331135273 --0.0695078140125 --0.567324623465 --0.0522507699206 --0.567319914698 --0.0349940946326 --0.567317083478 --0.0177373597398 --0.567316114902 --0.000480871181938 --0.567317008972 -0.0167757994495 --0.567319765687 -0.0340323476121 --0.567324340343 -0.0512892007828 --0.567330777645 -0.0685460530221 --0.567339062691 -0.0858033336699 --0.567349284887 -0.103060737252 --0.567361310124 -0.120318695903 --0.567375198006 -0.137576907873 --0.567390903831 -0.154835782945 --0.567399546504 -0.174052916467 --0.567391619086 -0.193268407136 --0.567375838756 -0.210527125746 --0.567361876368 -0.227785538882 --0.567349776626 -0.245043329895 --0.567339554429 -0.262300930918 --0.567331135273 -0.279558032752 --0.567324593663 -0.296815082431 --0.567319914698 -0.314071759581 --0.567317083478 -0.331328488886 --0.567316144705 -0.348584972322 --0.567317038775 -0.365841649473 --0.567319765687 -0.383098192513 --0.567324355245 -0.400355041027 --0.567330852151 -0.417611904442 --0.567339122295 -0.43486918509 --0.567349284887 -0.452126592397 --0.567361310124 -0.469384551048 --0.567375183105 -0.486642748118 --0.56739088893 -0.50390163064 --0.567399546504 -0.523118764162 --0.567391619086 -0.542334243655 --0.567375838756 -0.559592962265 --0.567361876368 -0.576851382852 --0.567349776626 -0.594109177589 --0.567339554429 -0.611366763711 --0.567331135273 -0.628623858094 --0.567324593663 -0.645880922675 --0.567319914698 -0.663137629628 --0.567317083478 -0.680394366383 --0.567316114902 -0.697650834918 --0.567317008972 -0.714907497167 --0.567319765687 -0.732164055109 --0.567324355245 -0.749420896172 --0.567330852151 -0.766677737236 --0.567339122295 -0.783935025334 --0.567349284887 -0.801192432642 --0.567361310124 -0.818450391293 --0.567375198006 -0.835708603263 --0.567390903831 -0.852967485786 --0.567399546504 -0.872184634209 --0.567391619086 -0.891400113702 --0.567375853657 -0.908658802509 --0.567361921072 -0.925917223096 --0.567349776626 -0.943175017834 --0.567339524627 -0.960432633758 --0.567331165075 -0.977689757943 --0.567324623465 -0.994946822525 --0.567319914698 -1.01220348478 --0.567317083478 -1.02946019173 --0.567316114902 -1.04671669006 --0.567317008972 -1.06397336721 --0.567319765687 -1.08122989536 --0.567324340343 -1.09848675132 --0.56733083725 -1.11574360728 --0.567339122295 -1.13300088048 --0.567349284887 -1.15025830269 --0.567361310124 -1.16751626134 --0.567375183105 -1.18477448821 --0.567390859127 -1.20203337074 --0.567399516702 -1.22125047446 --0.567391619086 -1.24046596885 --0.567375838756 -1.25772467255 --0.567361876368 -1.27498307824 --0.567349776626 -1.29224088788 --0.567339554429 -1.3094984889 --0.567331135273 -1.32675561309 --0.567324593663 -1.34401264787 --0.567319914698 -1.36126932502 --0.567317083478 -1.37852606178 --0.567316114902 -1.39578253031 --0.567317008972 -1.41303917765 --0.567319765687 -1.4302957356 --0.567324355245 -1.44755262136 --0.567330852151 -1.46480947733 --0.567339152098 -1.48206675053 --0.567349299789 -1.49932414293 --0.567361295223 -1.51658210159 --0.567375198006 -1.53384029865 --0.567390903831 -1.55109918118 --0.567399531603 -1.57031631469 --0.567391604185 -1.58953177929 --0.567375838756 -1.6067905128 --0.567361876368 -1.62404894829 --0.567349776626 -1.64130672813 --0.567339554429 -1.65856432915 --0.567331135273 -1.67582142353 --0.567324593663 -1.69307848812 --0.567319914698 -1.71033516527 --0.567317083478 -1.72759187222 --0.567316144705 -1.74484837055 --0.567317038775 -1.7621050477 --0.567319765687 -1.77936157584 --0.567324340343 -1.79661843181 --0.56733083725 -1.81387528777 --0.567339152098 -1.83113259077 --0.56734931469 -1.84839001298 --0.567361325026 -1.86564794183 --0.567375212908 -1.8829061389 --0.567390903831 -1.90016502142 --0.567399546504 -1.91938218474 --0.567391619086 -1.93859767914 --0.567375838756 -1.95585635305 --0.567361876368 -1.97311475873 --0.567349776626 -1.99037256837 --0.567339554429 -2.00763016939 --0.567331135273 -2.02488726378 --0.567324593663 -2.04214429856 --0.567319914698 -2.05940097571 --0.567317083478 -2.07665771246 --0.567316144705 -2.0939142108 --0.567317038775 -2.11117088795 --0.567319765687 -2.12842744589 --0.567324340343 -2.14568430185 --0.567330777645 -2.16294109821 --0.567339062691 -2.18019837141 --0.567349284887 -2.19745582342 --0.567361310124 -2.21471381188 --0.567375198006 -2.23197203875 --0.567390903831 -2.24923086166 --0.567399546504 -2.26844799518 --0.567391619086 -2.28766351938 --0.567375838756 -2.30492216349 --0.567361906171 -2.32218056917 --0.567349806428 -2.33943837881 --0.567339554429 -2.35669600964 --0.567331135273 -2.37395316362 --0.567324593663 -2.3912101388 --0.567319914698 -2.40846681595 --0.567317083478 -2.42572361231 --0.567316114902 -2.44298005104 --0.567317008972 -2.46023672819 --0.567319765687 -2.47749334574 --0.567324340343 -2.4947501421 --0.56733083725 -2.51200699806 --0.567339122295 -2.52926433086 --0.567349284887 -2.54652166366 --0.567361310124 -2.56377959251 --0.567375198006 -2.58103781939 --0.567390874028 -2.59829670191 --0.567399516702 -2.61751383543 --0.567391619086 -2.63672935963 --0.567375838756 -2.65398812294 --0.567361876368 -2.67124652863 --0.567349776626 -2.68850433827 --0.567339554429 -2.70576190949 --0.567331135273 -2.72301900387 --0.567324593663 -2.74027609825 --0.567319914698 -2.7575327754 --0.567317083478 -2.77478945255 --0.567316144705 -2.79204589129 --0.567317038775 -2.80930256844 --0.567319765687 -2.82655912638 --0.567324340343 -2.84381598234 --0.56733083725 -2.86107283831 --0.567339122295 -2.8783301115 --0.567349284887 -2.89558750391 --0.567361310124 -2.91284543276 --0.567375198006 -2.93010365963 --0.567390903831 -2.94736260176 --0.567399546504 -2.96657973528 --0.567391619086 -2.98579519987 --0.567375838756 -3.00305390358 --0.567361906171 -3.02031230927 --0.567349806428 -3.03757011891 --0.567339524627 -3.05482769013 --0.567331135273 -3.07208478451 --0.567324623465 -3.08934187889 --0.567319914698 -3.10659855604 --0.567317083478 -3.1238552928 --0.567316114902 -3.14111182292 --0.567317008972 --3.12481683493 --0.567319765687 --3.10756033659 --0.567324340343 --3.09030342102 --0.567330777645 --3.07304656505 --0.567339062691 --3.05578935147 --0.567349284887 --3.03853195906 --0.567361310124 --3.0212739706 --0.567375198006 --3.00401574373 --0.567390903831 --2.98675686121 --0.567399546504 --2.96753972769 --0.567391619086 --2.9483242631 --0.567375838756 --2.93106555939 --0.567361876368 --2.9138071537 --0.567349776626 --2.89654934406 --0.567339554429 --2.87929171324 --0.567331135273 --2.86203461885 --0.567324593663 --2.84477758407 --0.567319914698 --2.82752090692 --0.567317083478 --2.81026417017 --0.567316144705 --2.79300767183 --0.567317038775 --2.77575099468 --0.567319765687 --2.75849449634 --0.567324355245 --2.74123764038 --0.567330852151 --2.72398078442 --0.567339122295 --2.70672357082 --0.567349284887 --2.68946611881 --0.567361310124 --2.67220807075 --0.567375183105 --2.65494990349 --0.56739088893 --2.63769102097 --0.567399546504 --2.61847382784 --0.567391619086 --2.59925836325 --0.567375838756 --2.58199971914 --0.567361876368 --2.56474131346 --0.567349776626 --2.54748350382 --0.567339554429 --2.53022587299 --0.567331135273 --2.51296877861 --0.567324593663 --2.49571180343 --0.567319914698 --2.47845506668 --0.567317083478 --2.46119827032 --0.567316114902 --2.44394183159 --0.567317008972 --2.42668521404 --0.567319765687 --2.4094285965 --0.567324355245 --2.39217174053 --0.567330852151 --2.37491488457 --0.567339122295 --2.35765755177 --0.567349284887 --2.34040021896 --0.567361310124 --2.32314229011 --0.567375198006 --2.30588406324 --0.567390903831 --2.28862518072 --0.567399546504 --2.2694080472 --0.567391619086 --2.25019258261 --0.567375853657 --2.23293381929 --0.567361921072 --2.215675354 --0.567349776626 --2.19841760397 --0.567339524627 --2.18116003275 --0.567331165075 --2.16390287876 --0.567324623465 --2.14664578438 --0.567319914698 --2.12938916683 --0.567317083478 --2.11213243007 --0.567316114902 --2.09487593174 --0.567317008972 --2.07761931419 --0.567319765687 --2.06036275625 --0.567324340343 --2.04310590029 --0.56733083725 --2.02584904432 --0.567339122295 --2.00859177113 --0.567349284887 --1.99133437872 --0.567361310124 --1.97407639027 --0.567375183105 --1.9568181932 --0.567390859127 --1.93955934048 --0.567399516702 --1.92034220696 --0.567391619086 --1.90112671256 --0.567375838756 --1.88386797905 --0.567361876368 --1.86660957336 --0.567349776626 --1.84935179352 --0.567339554429 --1.8320941627 --0.567331135273 --1.81483703852 --0.567324593663 --1.79758000374 --0.567319914698 --1.78032335639 --0.567317083478 --1.76306664943 --0.567316114902 --1.7458101511 --0.567317008972 --1.72855347395 --0.567319765687 --1.71129691601 --0.567324355245 --1.69404006004 --0.567330852151 --1.67678320408 --0.567339152098 --1.65952590108 --0.567349299789 --1.64226850867 --0.567361295223 --1.62501057982 --0.567375198006 --1.60775235295 --0.567390903831 --1.59049347043 --0.567399531603 --1.57127633691 --0.567391604185 --1.55206084251 --0.567375838756 --1.5348021388 --0.567361876368 --1.51754373312 --0.567349776626 --1.50028595328 --0.567339554429 --1.48302835226 --0.567331135273 --1.46577122807 --0.567324593663 --1.4485141933 --0.567319914698 --1.43125751615 --0.567317083478 --1.41400074959 --0.567316144705 --1.39674428105 --0.567317038775 --1.3794876039 --0.567319765687 --1.36223104596 --0.567324340343 --1.34497419 --0.56733083725 --1.32771733403 --0.567339152098 --1.31046009064 --0.56734931469 --1.29320266843 --0.567361325026 --1.27594467997 --0.567375212908 --1.2586865127 --0.567390903831 --1.24142765999 --0.567399546504 --1.22221049667 --0.567391619086 --1.20299497247 --0.567375838756 --1.18573626876 --0.567361876368 --1.16847786307 --0.567349776626 --1.15122005343 --0.567339554429 --1.13396245241 --0.567331135273 --1.11670532823 --0.567324593663 --1.09944829345 --0.567319914698 --1.0821916163 --0.567317083478 --1.06493487954 --0.567316144705 --1.04767841101 --0.567317038775 --1.03042176366 --0.567319765687 --1.01316520572 --0.567324340343 --0.99590831995 --0.567330777645 --0.978651493788 --0.567339062691 --0.961394235492 --0.567349284887 --0.944136828184 --0.567361310124 --0.926878869533 --0.567375198006 --0.909620657563 --0.567390903831 --0.892361789942 --0.567399546504 --0.87314465642 --0.567391619086 --0.853929147124 --0.567375838756 --0.836670443416 --0.567361906171 --0.819412022829 --0.567349806428 --0.802154228091 --0.567339554429 --0.784896627069 --0.567331135273 --0.767639517784 --0.567324593663 --0.750382483006 --0.567319914698 --0.733125790954 --0.567317083478 --0.715869054198 --0.567316114902 --0.698612570763 --0.567317008972 --0.681355893612 --0.567319765687 --0.664099335671 --0.567324340343 --0.646842479706 --0.56733083725 --0.629585653543 --0.567339122295 --0.612328380346 --0.567349284887 --0.595070973039 --0.567361310124 --0.577813014388 --0.567375198006 --0.560554802418 --0.567390874028 --0.543295934797 --0.567399516702 --0.524078786373 --0.567391619086 --0.504863284528 --0.567375838756 --0.487604573369 --0.567361876368 --0.470346160233 --0.567349776626 --0.453088372946 --0.567339554429 --0.435830771923 --0.567331135273 --0.418573662639 --0.567324593663 --0.401316620409 --0.567319914698 --0.384059950709 --0.567317083478 --0.366803221405 --0.567316144705 --0.349546730519 --0.567317038775 --0.332290053368 --0.567319765687 --0.315033495426 --0.567324340343 --0.297776639462 --0.56733083725 --0.280519798398 --0.567339122295 --0.26326251775 --0.567349284887 --0.246005110443 --0.567361310124 --0.228747155517 --0.567375198006 --0.211488950997 --0.567390903831 --0.1942300722 --0.567399546504 --0.175012938679 --0.550260588526 --0.155791386962 --0.550245136022 --0.138532683253 --0.550231531262 --0.121274296195 --0.550219744444 --0.104016533122 --0.550209730864 --0.0867589507252 --0.550201565028 --0.0695018675178 --0.550195202231 --0.0522448467091 --0.550190627575 --0.034988196101 --0.55018787086 --0.0177314840257 --0.550186917186 --0.000475019216537 --0.550187811255 -0.0167816276662 --0.550190508366 -0.034038150683 --0.550194963813 -0.0512949796393 --0.550201237202 -0.0685518076643 --0.550209313631 -0.0858090668916 --0.550219282508 -0.103066449985 --0.550231024623 -0.120324380696 --0.550244554877 -0.137582562864 --0.550259873271 -0.154841415584 --0.550268307328 -0.174058768898 --0.550260558724 -0.193274475634 --0.550245165825 -0.210533164441 --0.550231561065 -0.227791551501 --0.550219744444 -0.245049316436 --0.550209760666 -0.262306891382 --0.55020159483 -0.279563978315 --0.550195202231 -0.296821005643 --0.550190627575 -0.314077652991 --0.55018787086 -0.331334352493 --0.550186917186 -0.348590813577 --0.550187781453 -0.365847468376 --0.550190478563 -0.383103996515 --0.550194963813 -0.400360830128 --0.550201281905 -0.41761765629 --0.550209358334 -0.434874907136 --0.550219282508 -0.452132292092 --0.550231024623 -0.46939022094 --0.550244539976 -0.486648403108 --0.55025985837 -0.50390727073 --0.550268307328 -0.523124620318 --0.550260558724 -0.542340323329 --0.550245165825 -0.559599012136 --0.550231561065 -0.576857402921 --0.550219744444 -0.594115167856 --0.550209760666 -0.611372739077 --0.550201565028 -0.62862983346 --0.550195172429 -0.645886868238 --0.550190597773 -0.663143515586 --0.550187841057 -0.680400207639 --0.550186917186 -0.697656676173 --0.550187811255 -0.714913323521 --0.550190508366 -0.73216985166 --0.550194963813 -0.749426677823 --0.550201281905 -0.766683503986 --0.550209358334 -0.78394074738 --0.550219282508 -0.801198109984 --0.550231024623 -0.818456068635 --0.550244554877 -0.835714265704 --0.550259873271 -0.852973133325 --0.550268307328 -0.872190490365 --0.550260558724 -0.891406178474 --0.550245180726 -0.908664852381 --0.550231575966 -0.925923228264 --0.550219744444 -0.943180993199 --0.550209760666 -0.960438579321 --0.550201565028 -0.977695688605 --0.550195172429 -0.994952723385 --0.550190627575 -1.01220935583 --0.55018787086 -1.02946606279 --0.550186917186 -1.04672253132 --0.550187781453 -1.06397917867 --0.550190478563 -1.08123570681 --0.550194963813 -1.09849253297 --0.550201281905 -1.11574935913 --0.550209358334 -1.13300663233 --0.550219282508 -1.15026402473 --0.550231024623 -1.16752195358 --0.550244539976 -1.18478015065 --0.550259828567 -1.20203900337 --0.550268277526 -1.22125631571 --0.550260528922 -1.24047201872 --0.550245136023 -1.25773072243 --0.550231561065 -1.27498912811 --0.550219744444 -1.29224690795 --0.550209760666 -1.30950447917 --0.55020159483 -1.32676154375 --0.550195202231 -1.34401854873 --0.550190597773 -1.36127522588 --0.550187841057 -1.37853193283 --0.550186917186 -1.39578837156 --0.550187811255 -1.41304501891 --0.550190508366 -1.43030154705 --0.550194963813 -1.44755837322 --0.550201281905 -1.46481522918 --0.550209388137 -1.48207250237 --0.550219297409 -1.49932986498 --0.550231009722 -1.51658776403 --0.550244554877 -1.53384593129 --0.550259873271 -1.55110481381 --0.550268322229 -1.57032218576 --0.550260543823 -1.58953788877 --0.550245136023 -1.60679656267 --0.550231546164 -1.62405493856 --0.550219729543 -1.64131268859 --0.550209760666 -1.65857028961 --0.55020159483 -1.675827384 --0.550195202231 -1.69308441878 --0.550190627575 -1.71034106612 --0.55018787086 -1.72759774328 --0.550186917186 -1.74485424161 --0.550187781453 -1.76211088896 --0.550190478563 -1.7793673873 --0.550194963813 -1.79662424326 --0.550201281905 -1.81388106942 --0.550209388137 -1.83113831282 --0.55021931231 -1.84839570522 --0.550231024623 -1.86565363407 --0.550244554877 -1.88291180134 --0.550259873271 -1.90017065406 --0.550268307328 -1.919388026 --0.550260558724 -1.93860372901 --0.550245165825 -1.95586240292 --0.550231561065 -1.9731208086 --0.550219744444 -1.99037858844 --0.550209760666 -2.00763618946 --0.55020159483 -2.02489328385 --0.550195202231 -2.04215025902 --0.550190627575 -2.05940687657 --0.55018787086 -2.07666361332 --0.550186917186 -2.09392011166 --0.550187811255 -2.1111767292 --0.550190508366 -2.12843328715 --0.550194963813 -2.14569014311 --0.550201252103 -2.16294687987 --0.550209328532 -2.18020415306 --0.550219282508 -2.19746160507 --0.550231024623 -2.21471953392 --0.550244554877 -2.23197770119 --0.550259873271 -2.2492365241 --0.550268307328 -2.26845383644 --0.550260558724 -2.28766953945 --0.550245165825 -2.30492824316 --0.550231561065 -2.32218664885 --0.550219744444 -2.33944439888 --0.550209760666 -2.3567019701 --0.55020159483 -2.37395906449 --0.550195202231 -2.39121603966 --0.550190627575 -2.40847271681 --0.55018787086 -2.42572945357 --0.550186917186 -2.44298589229 --0.550187811255 -2.46024256945 --0.550190508366 -2.47749912739 --0.550194963813 -2.49475592375 --0.550201281905 -2.51201277971 --0.550209358334 -2.52927005291 --0.550219282508 -2.54652738571 --0.550231024623 -2.56378531456 --0.550244554877 -2.58104348183 --0.550259843468 -2.59830236435 --0.550268307328 -2.61751973629 --0.550260558724 -2.6367354393 --0.550245136023 -2.65399414301 --0.550231561065 -2.67125248909 --0.550219744444 -2.68851029873 --0.550209760666 -2.70576786995 --0.55020159483 -2.72302490473 --0.550195202231 -2.74028199911 --0.550190597773 -2.75753867626 --0.550187841057 -2.77479529381 --0.550186917186 -2.79205173254 --0.550187781453 -2.8093084693 --0.550190478563 -2.82656496763 --0.550194963813 -2.84382176399 --0.550201281905 -2.86107861996 --0.550209358334 -2.87833583355 --0.550219282508 -2.89559316635 --0.550231024623 -2.9128510952 --0.550244554877 -2.93010932207 --0.550259873271 -2.94736820459 --0.55026833713 -2.96658557653 --0.550260588526 -2.98580127954 --0.550245136022 -3.00305992365 --0.550231531262 -3.02031832933 --0.550219744444 -3.03757613898 --0.550209730864 -3.0548337102 --0.550201565028 -3.07209080457 --0.550195202231 -3.08934783935 --0.550190627575 -3.1066044569 --0.55018787086 -3.12386119366 --0.550186917186 -3.14111766417 --0.550187811255 --3.12481099367 --0.550190508366 --3.10755449533 --0.550194963813 --3.09029769897 --0.550201237202 --3.07304084301 --0.550209313631 --3.05578356981 --0.550219282508 --3.03852623701 --0.550231024623 --3.02126836777 --0.550244554877 --3.0040101409 --0.550259873271 --2.98675125837 --0.550268307328 --2.96753388643 --0.550260558724 --2.94831818342 --0.550245165825 --2.93105953932 --0.550231561065 --2.91380113363 --0.550219744444 --2.89654332399 --0.550209760666 --2.87928569317 --0.55020159483 --2.86202859878 --0.550195202231 --2.84477162361 --0.550190627575 --2.82751500606 --0.55018787086 --2.81025826931 --0.550186917186 --2.79300183058 --0.550187781453 --2.77574521303 --0.550190478563 --2.75848865509 --0.550194963813 --2.74123179912 --0.550201281905 --2.72397500276 --0.550209358334 --2.70671778917 --0.550219282508 --2.68946033716 --0.550231024623 --2.67220234871 --0.550244539976 --2.65494418144 --0.55025985837 --2.63768535853 --0.550268307328 --2.61846804619 --0.550260558724 --2.59925234318 --0.550245165825 --2.58199363947 --0.550231561065 --2.56473523378 --0.550219744444 --2.54747748375 --0.550209760666 --2.53021991253 --0.550201565028 --2.51296281814 --0.550195172429 --2.49570584297 --0.550190597773 --2.47844916582 --0.550187841057 --2.46119242906 --0.550186917186 --2.44393599033 --0.550187811255 --2.42667937279 --0.550190508366 --2.40942281484 --0.550194963813 --2.39216595888 --0.550201281905 --2.37490910292 --0.550209358334 --2.35765182972 --0.550219282508 --2.34039449692 --0.550231024623 --2.32313656807 --0.550244554877 --2.3058784008 --0.550259873271 --2.28861951828 --0.550268307328 --2.26940214634 --0.550260558724 --2.25018644333 --0.550245180726 --2.23292773962 --0.550231575966 --2.21566939354 --0.550219744444 --2.19841170311 --0.550209760666 --2.18115413189 --0.550201565028 --2.1638969779 --0.550195172429 --2.14663988352 --0.550190627575 --2.12938326597 --0.55018787086 --2.11212658882 --0.550186917186 --2.09487009049 --0.550187781453 --2.07761341333 --0.550190478563 --2.06035691499 --0.550194963813 --2.04310011863 --0.550201281905 --2.02584326267 --0.550209358334 --2.00858601928 --0.550219282508 --1.99132865667 --0.550231024623 --1.97407069802 --0.550244539976 --1.95681253075 --0.550259828567 --1.93955370784 --0.550268277526 --1.9203363359 --0.550260528922 --1.90112060309 --0.550245136023 --1.88386189938 --0.550231561065 --1.8666035533 --0.550219744444 --1.84934583306 --0.550209760666 --1.83208823204 --0.55020159483 --1.81483110785 --0.550195202231 --1.79757407308 --0.550190597773 --1.78031742573 --0.550187841057 --1.76306074858 --0.550186917186 --1.74580428004 --0.550187811255 --1.72854763269 --0.550190508366 --1.71129110455 --0.550194963813 --1.69403424859 --0.550201281905 --1.67677745223 --0.550209388137 --1.65952020884 --0.550219297409 --1.64226281643 --0.550231009722 --1.62500488758 --0.550244554877 --1.60774669051 --0.550259873271 --1.59048783779 --0.550268322229 --1.57127049565 --0.550260543823 --1.55205479264 --0.550245136023 --1.53479608893 --0.550231546164 --1.51753768325 --0.550219729543 --1.50027993321 --0.550209760666 --1.48302236199 --0.55020159483 --1.46576526761 --0.550195202231 --1.44850826264 --0.550190627575 --1.43125161529 --0.55018787086 --1.41399487853 --0.550186917186 --1.3967384398 --0.550187781453 --1.37948179245 --0.550190478563 --1.36222526431 --0.550194963813 --1.34496843815 --0.550201281905 --1.32771158219 --0.550209388137 --1.31045433879 --0.55021931231 --1.29319694638 --0.550231024623 --1.27593898773 --0.550244554877 --1.25868082046 --0.550259873271 --1.24142199755 --0.550268307328 --1.22220465541 --0.550260558724 --1.2029889226 --0.550245165825 --1.18573021889 --0.550231561065 --1.1684718132 --0.550219744444 --1.15121403337 --0.550209760666 --1.13395649195 --0.55020159483 --1.11669942737 --0.550195202231 --1.09944239259 --0.550190627575 --1.08218571544 --0.55018787086 --1.06492900849 --0.550186917186 --1.04767256975 --0.550187811255 --1.0304159224 --0.550190508366 --1.01315939427 --0.550194963813 --0.995902568103 --0.550201252103 --0.978645756841 --0.550209328532 --0.961388498545 --0.550219282508 --0.944131106138 --0.550231024623 --0.926873192191 --0.550244554877 --0.909615010023 --0.550259873271 --0.892356157303 --0.550268307328 --0.873138815165 --0.550260558724 --0.853923097253 --0.550245165825 --0.836664408445 --0.550231561065 --0.819405987859 --0.550219744444 --0.802148222923 --0.550209760666 --0.784890666604 --0.55020159483 --0.767633572221 --0.550195202231 --0.750376552343 --0.550190627575 --0.733119890094 --0.55018787086 --0.715863183141 --0.550186917186 --0.698606729507 --0.550187811255 --0.681350082159 --0.550190508366 --0.664093539119 --0.550194963813 --0.646836712957 --0.550201281905 --0.629579901695 --0.550209358334 --0.612322643399 --0.550219282508 --0.595065250993 --0.550231024623 --0.577807322145 --0.550244554877 --0.560549154878 --0.550259843468 --0.543290302157 --0.550268307328 --0.524072945118 --0.550260558724 --0.504857219756 --0.550245136023 --0.487598516047 --0.550231561065 --0.470340132713 --0.550219744444 --0.453082367777 --0.550209760666 --0.435824789107 --0.55020159483 --0.418567702174 --0.550195202231 --0.401310697198 --0.550190597773 --0.3840540573 --0.550187841057 --0.366797335446 --0.550186917186 --0.349540866911 --0.550187781453 --0.332284219563 --0.550190478563 --0.315027698874 --0.550194963813 --0.297770872712 --0.550201281905 --0.28051404655 --0.550209358334 --0.263256788254 --0.550219282508 --0.245999403298 --0.550231024623 --0.228741466999 --0.550244554877 --0.211483284831 --0.550259873271 --0.194224432111 --0.55026833713 --0.175007089973 --0.533095642924 --0.155785348267 --0.533080592751 --0.13852667436 --0.533067345619 --0.121268311516 --0.533055871725 --0.104010572657 --0.533046141267 --0.0867530182004 --0.533038184047 --0.0694959582761 --0.533031955361 --0.0522389598191 --0.533027485013 --0.0349823324941 --0.533024817705 --0.0177256441675 --0.533023878932 --0.000469203805547 --0.533024728298 -0.0167874193285 --0.533027350903 -0.0340439183638 --0.533031687141 -0.0513007231057 --0.53303784132 -0.0685575269163 --0.533045724034 -0.0858147609979 --0.53305542469 -0.103072123602 --0.533066868782 -0.120330031961 --0.533080041408 -0.137588184327 --0.53309494257 -0.15484701097 --0.53310315311 -0.174064576626 --0.533095613122 -0.193280506879 --0.533080622554 -0.21053917706 --0.533067375422 -0.227797530591 --0.533055871725 -0.245055273175 --0.533046141267 -0.262312822044 --0.533038154244 -0.279569886625 --0.533031925559 -0.296826891601 --0.533027485013 -0.314083516598 --0.533024787903 -0.331340201199 --0.53302384913 -0.348596639931 --0.533024698496 -0.365853264928 --0.533027350902 -0.383109770715 --0.533031731844 -0.400366581976 --0.533037871122 -0.417623378336 --0.533045738936 -0.43488060683 --0.53305542469 -0.452137976885 --0.533066868782 -0.469395875931 --0.533080041408 -0.486654028296 --0.53309494257 -0.503912873566 --0.53310315311 -0.523130446672 --0.533095613122 -0.542346358299 --0.533080622554 -0.559605017304 --0.533067375422 -0.576863393188 --0.533055871725 -0.594121128321 --0.533046141267 -0.61137868464 --0.533038124442 -0.628635764122 --0.533031895757 -0.645892754197 --0.53302745521 -0.663149371743 --0.5330247581 -0.680406063795 --0.53302384913 -0.697662502527 --0.533024728298 -0.714919120073 --0.533027380705 -0.73217561841 --0.533031731844 -0.74943241477 --0.533037871122 -0.76668921113 --0.533045738936 -0.783946454525 --0.53305542469 -0.801203802228 --0.533066868782 -0.818461731076 --0.533080041408 -0.835719898343 --0.53309494257 -0.852978721261 --0.53310315311 -0.872196286917 --0.533095613122 -0.891412183642 --0.533080622554 -0.908670857549 --0.533067375422 -0.925929218531 --0.533055871725 -0.943186953664 --0.533046141267 -0.960444509983 --0.533038124442 -0.977701574564 --0.533031895757 -0.994958579541 --0.533027485013 -1.01221522689 --0.533024817705 -1.02947193384 --0.533023878932 -1.04672834277 --0.533024698496 -1.06398493051 --0.533027350902 -1.08124145866 --0.533031731844 -1.09849825501 --0.533037871122 -1.11575505137 --0.533045738936 -1.13301232457 --0.53305542469 -1.15026968717 --0.533066868782 -1.16752758622 --0.533080041408 -1.18478575349 --0.53309494257 -1.20204457641 --0.53310315311 -1.22126212716 --0.53309558332 -1.24047806859 --0.533080592752 -1.2577367425 --0.533067375422 -1.27499511838 --0.533055871725 -1.29225286841 --0.533046141267 -1.30951040983 --0.533038154244 -1.32676744461 --0.533031925559 -1.34402441979 --0.53302745521 -1.36128106714 --0.5330247581 -1.37853774428 --0.53302384913 -1.39579418302 --0.533024728298 -1.41305083036 --0.533027350903 -1.4303073287 --0.533031687141 -1.44756412506 --0.533037856221 -1.46482095122 --0.533045738936 -1.48207819462 --0.533055394888 -1.49933552742 --0.53306683898 -1.51659342647 --0.533080041408 -1.53385156393 --0.53309494257 -1.55111041665 --0.533103182912 -1.57032799721 --0.533095613122 -1.58954390884 --0.533080592752 -1.60680258274 --0.533067360521 -1.62406092882 --0.533055856824 -1.64131864906 --0.533046141267 -1.65857622028 --0.533038154244 -1.67583331466 --0.533031925559 -1.69309031963 --0.533027485013 -1.71034693718 --0.533024787903 -1.72760361433 --0.53302384913 -1.74486005306 --0.533024698496 -1.76211667061 --0.533027350902 -1.77937316895 --0.533031731844 -1.79662999511 --0.533037871122 -1.81388679147 --0.533045738936 -1.83114400506 --0.533055394888 -1.84840136766 --0.53306683898 -1.86565926671 --0.533080041408 -1.88291743397 --0.53309494257 -1.9001762569 --0.53310315311 -1.91939380765 --0.533095613122 -1.93860974908 --0.533080622554 -1.95586842299 --0.533067375422 -1.97312679887 --0.533055871725 -1.9903845489 --0.533046141267 -2.00764212012 --0.533038154244 -2.0248991847 --0.533031925559 -2.04215615988 --0.533027485013 -2.05941277742 --0.533024787903 -2.07666945458 --0.53302384913 -2.09392589331 --0.533024728298 -2.11118251085 --0.533027350903 -2.12843900919 --0.533031702042 -2.14569586515 --0.533037871122 -2.16295266151 --0.533045738936 -2.18020987511 --0.53305542469 -2.19746726751 --0.533066868782 -2.21472513676 --0.533080041408 -2.23198330402 --0.53309494257 -2.24924218654 --0.53310315311 -2.26845967769 --0.533095613122 -2.28767555952 --0.533080622554 -2.30493426323 --0.533067375422 -2.32219260931 --0.533055871725 -2.33945035935 --0.533046141267 -2.35670793057 --0.533038154244 -2.37396496534 --0.533031925559 -2.39122194052 --0.533027485013 -2.40847855807 --0.533024787903 -2.42573529482 --0.53302384913 -2.44299179316 --0.533024728298 -2.4602483511 --0.533027380705 -2.47750484943 --0.533031716943 -2.4947617054 --0.533037856221 -2.51201850176 --0.533045738936 -2.52927571535 --0.53305542469 -2.54653304816 --0.533066868782 -2.563790977 --0.533080041408 -2.58104914427 --0.53309494257 -2.59830796718 --0.533103182912 -2.61752557754 --0.533095613122 -2.63674151898 --0.533080592752 -2.65400016308 --0.533067375422 -2.67125844956 --0.533055871725 -2.68851619959 --0.533046141267 -2.70577377081 --0.533038184047 -2.72303080559 --0.533031955361 -2.74028784037 --0.53302745521 -2.75754451752 --0.533024787903 -2.77480119467 --0.533023878932 -2.79205757379 --0.533024698496 -2.80931425095 --0.533027350902 -2.82657074928 --0.533031731844 -2.84382748604 --0.533037871122 -2.8610842824 --0.533045738936 -2.87834149599 --0.53305542469 -2.8955988884 --0.533066868782 -2.91285681725 --0.533080041408 -2.93011492491 --0.53309494257 -2.94737374782 --0.533103182912 -2.96659135819 --0.533095642924 -2.98580729961 --0.533080592751 -3.00306594372 --0.533067345619 -3.02032434941 --0.533055871725 -3.03758209944 --0.533046141267 -3.05483967066 --0.533038184047 -3.07209676504 --0.533031955361 -3.08935374021 --0.533027485013 -3.10661035776 --0.533024817705 -3.12386703491 --0.533023878932 -3.14112344582 --0.533024728298 --3.12480521202 --0.533027350903 --3.10754871368 --0.533031687141 --3.09029197693 --0.53303784132 --3.07303518057 --0.533045724034 --3.05577790737 --0.53305542469 --3.03852051497 --0.533066868782 --3.02126264572 --0.533080041408 --3.00400453806 --0.53309494257 --2.98674571514 --0.53310315311 --2.96752810478 --0.533095613122 --2.94831216335 --0.533080622554 --2.93105351925 --0.533067375422 --2.91379511356 --0.533055871725 --2.89653736353 --0.533046141267 --2.87927979231 --0.533038154244 --2.86202269793 --0.533031925559 --2.84476572275 --0.533027485013 --2.8275091052 --0.533024787903 --2.81025242805 --0.53302384913 --2.79299604893 --0.533024698496 --2.77573943138 --0.533027350902 --2.75848287344 --0.533031731844 --2.74122601747 --0.533037871122 --2.72396922111 --0.533045738936 --2.70671200752 --0.53305542469 --2.68945461511 --0.533066868782 --2.67219674587 --0.533080041408 --2.65493857861 --0.53309494257 --2.63767975569 --0.53310315311 --2.61846226454 --0.533095613122 --2.59924638271 --0.533080622554 --2.581987679 --0.533067375422 --2.56472927332 --0.533055871725 --2.54747152328 --0.533046141267 --2.53021395206 --0.533038124442 --2.51295691728 --0.533031895757 --2.49569994211 --0.53302745521 --2.47844332457 --0.5330247581 --2.46118658781 --0.53302384913 --2.44393008947 --0.533024728298 --2.42667353153 --0.533027380705 --2.4094170332 --0.533031731844 --2.39216017723 --0.533037871122 --2.37490338087 --0.533045738936 --2.35764616728 --0.53305542469 --2.34038883448 --0.533066868782 --2.32313090563 --0.533080041408 --2.30587273836 --0.53309494257 --2.28861391545 --0.53310315311 --2.26939636469 --0.533095613122 --2.25018042326 --0.533080622554 --2.23292171955 --0.533067375422 --2.21566343307 --0.533055871725 --2.19840574264 --0.533046141267 --2.18114817142 --0.533038124442 --2.16389113665 --0.533031895757 --2.14663410187 --0.533027485013 --2.12937742472 --0.533024817705 --2.11212074757 --0.533023878932 --2.09486430883 --0.533024698496 --2.07760763168 --0.533027350902 --2.06035113334 --0.533031731844 --2.04309439659 --0.533037871122 --2.02583760023 --0.533045738936 --2.00858035684 --0.53305542469 --1.99132299423 --0.533066868782 --1.97406506538 --0.533080041408 --1.95680689812 --0.53309494257 --1.9395480752 --0.53310315311 --1.92033049464 --0.53309558332 --1.90111458302 --0.533080592752 --1.88385590911 --0.533067375422 --1.86659756303 --0.533055871725 --1.8493398726 --0.533046141267 --1.83208230137 --0.533038154244 --1.81482520699 --0.533031925559 --1.79756820202 --0.53302745521 --1.78031155467 --0.5330247581 --1.76305487752 --0.53302384913 --1.74579846859 --0.533024728298 --1.72854185104 --0.533027350903 --1.71128535271 --0.533031687141 --1.69402852654 --0.533037856221 --1.67677173019 --0.533045738936 --1.6595145166 --0.533055394888 --1.64225712418 --0.53306683898 --1.62499922514 --0.533080041408 --1.60774108768 --0.53309494257 --1.59048226476 --0.533103182912 --1.571264714 --0.533095613122 --1.55204877258 --0.533080592752 --1.53479009867 --0.533067360521 --1.51753172278 --0.533055856824 --1.50027397275 --0.533046141267 --1.48301643133 --0.533038154244 --1.46575936675 --0.533031925559 --1.44850236178 --0.533027485013 --1.43124574423 --0.533024787903 --1.41398903727 --0.53302384913 --1.39673259854 --0.533024698496 --1.379475981 --0.533027350902 --1.36221948266 --0.533031731844 --1.3449626863 --0.533037871122 --1.32770586014 --0.533045738936 --1.31044861675 --0.533055394888 --1.29319125414 --0.53306683898 --1.27593335509 --0.533080041408 --1.25867518783 --0.53309494257 --1.24141636491 --0.53310315311 --1.22219881415 --0.533095613122 --1.20298290253 --0.533080622554 --1.18572422862 --0.533067375422 --1.16846585274 --0.533055871725 --1.1512081027 --0.533046141267 --1.13395056129 --0.533038154244 --1.11669352651 --0.533031925559 --1.09943652153 --0.533027485013 --1.08217987418 --0.533024787903 --1.06492319703 --0.53302384913 --1.0476667583 --0.533024728298 --1.03041011095 --0.533027350903 --1.01315361262 --0.533031702042 --0.995896816255 --0.533037871122 --0.978640034795 --0.533045738936 --0.961382806301 --0.53305542469 --0.944125428796 --0.533066868782 --0.92686752975 --0.533080041408 --0.909609377384 --0.53309494257 --0.892350539565 --0.53310315311 --0.873132973909 --0.533095613122 --0.853917047381 --0.533080622554 --0.836658388376 --0.533067375422 --0.819400012493 --0.533055871725 --0.802142262459 --0.533046141267 --0.78488470614 --0.533038154244 --0.767627641559 --0.533031925559 --0.750370666385 --0.533027485013 --0.733114033937 --0.533024787903 --0.715857326984 --0.53302384913 --0.698600888252 --0.533024728298 --0.681344285607 --0.533027380705 --0.66408778727 --0.533031716943 --0.646830976009 --0.533037856221 --0.629574179649 --0.533045738936 --0.612316936255 --0.53305542469 --0.595059558749 --0.533066868782 --0.577801674604 --0.533080041408 --0.56054353714 --0.53309494257 --0.543284699321 --0.533103182912 --0.524067133665 --0.533095613122 --0.504851192236 --0.533080592752 --0.487592510879 --0.533067375422 --0.470334157348 --0.533055871725 --0.453076414764 --0.533046141267 --0.435818850994 --0.533038184047 --0.418561793864 --0.533031955361 --0.401304803788 --0.53302745521 --0.384048171341 --0.533024787903 --0.36679147929 --0.533023878932 --0.349535048008 --0.533024698496 --0.332278430462 --0.533027350902 --0.315021932125 --0.533031731844 --0.297765128315 --0.533037871122 --0.280508324504 --0.533045738936 --0.26325108856 --0.53305542469 --0.245993729681 --0.533066868782 --0.228735815734 --0.533080041408 --0.211477655918 --0.53309494257 --0.194218832999 --0.533103182912 --0.175001271069 --0.515892714262 --0.155779093504 --0.515878096223 --0.138520453125 --0.515865236521 --0.121262121946 --0.51585406065 --0.104004405439 --0.515844583511 --0.0867468751967 --0.515836820006 --0.0694898376241 --0.515830785036 --0.0522328633815 --0.515826433897 --0.0349762616679 --0.515823811292 --0.0177195982542 --0.515822947025 --0.000463183503597 --0.515823766589 -0.0167934147176 --0.515826299787 -0.0340498886071 --0.515830546618 -0.0513066696003 --0.515836551786 -0.0685634529218 --0.515844210982 -0.0858206581324 --0.515853613615 -0.103077994659 --0.51586471498 -0.120335880667 --0.515877559781 -0.137594006956 --0.515892088413 -0.154852811247 --0.515900075435 -0.174070596695 --0.515892714262 -0.193286750466 --0.515878096223 -0.210545398295 --0.515865236521 -0.227803725749 --0.51585406065 -0.245061445981 --0.515844583511 -0.262318976223 --0.515836805105 -0.279576011002 --0.515830740332 -0.296832986176 --0.515826404094 -0.314089596272 --0.51582378149 -0.33134625107 --0.515822917223 -0.34860266 --0.515823766589 -0.365859270096 --0.515826314688 -0.383115746081 --0.515830546617 -0.40037252754 --0.515836536884 -0.417629301548 --0.515844210982 -0.43488650769 --0.515853613615 -0.452143847942 --0.515864744782 -0.469401724637 --0.515877589583 -0.486659862101 --0.515892088413 -0.503918677569 --0.515900075435 -0.523136466742 --0.515892714262 -0.542352586985 --0.515878096223 -0.559611231088 --0.515865236521 -0.576869592071 --0.51585406065 -0.594127297401 --0.515844583511 -0.611384823918 --0.515836805105 -0.628641873598 --0.515830740332 -0.645898833871 --0.515826418996 -0.663155421615 --0.515823796391 -0.680412113667 --0.515822917223 -0.697668522596 --0.515823766589 -0.71492511034 --0.515826314688 -0.732181593776 --0.515830546617 -0.749438375234 --0.515836536884 -0.766695141792 --0.515844210982 -0.783952355385 --0.515853613615 -0.801209703088 --0.515864744782 -0.818467587233 --0.515877589583 -0.835725709796 --0.515892088413 -0.852984502911 --0.515900075435 -0.872202292084 --0.515892714262 -0.891418427229 --0.515878096223 -0.908677086234 --0.515865206719 -0.925935432315 --0.515854030848 -0.943193137646 --0.515844583511 -0.960450664163 --0.515836790204 -0.977707698941 --0.515830725431 -0.994964689017 --0.515826404094 -1.01222130656 --0.515823811292 -1.02947795391 --0.515822947025 -1.04673436284 --0.515823766589 -1.06399095058 --0.515826314688 -1.08124741912 --0.515830546617 -1.09850418568 --0.515836536884 -1.11576098204 --0.515844225883 -1.13301822543 --0.515853628516 -1.15027555823 --0.515864744782 -1.16753342748 --0.515877589583 -1.18479156494 --0.515892058611 -1.20205038786 --0.515900045633 -1.22126817703 --0.515892714262 -1.24048432708 --0.515878096223 -1.25774294138 --0.515865236521 -1.27500128746 --0.51585406065 -1.2922590375 --0.515844583511 -1.30951654911 --0.515836805105 -1.32677358389 --0.515830740332 -1.34403052926 --0.515826404094 -1.36128711701 --0.51582378149 -1.37854379416 --0.51582288742 -1.39580020309 --0.515823736787 -1.41305679083 --0.515826284885 -1.43031328916 --0.515830501914 -1.44757008552 --0.515836521983 -1.46482685208 --0.515844210982 -1.48208406568 --0.515853583813 -1.49934139848 --0.51586471498 -1.51659929752 --0.515877589583 -1.53385740518 --0.515892088413 -1.5511161983 --0.515900075435 -1.57033398747 --0.515892714262 -1.58955013752 --0.515878096223 -1.60680881143 --0.515865236521 -1.62406712771 --0.51585406065 -1.64132481814 --0.515844583511 -1.65858235955 --0.515836805105 -1.67583942413 --0.515830740332 -1.6930963993 --0.515826404094 -1.71035301685 --0.51582378149 -1.727609694 --0.515822917223 -1.74486607313 --0.515823766589 -1.76212266087 --0.515826314688 -1.77937912941 --0.515830546617 -1.79663592577 --0.515836536884 -1.81389272213 --0.515844210982 -1.83114990592 --0.515853583813 -1.84840723872 --0.515864685177 -1.86566510796 --0.515877559781 -1.88292324543 --0.515892088413 -1.90018206835 --0.515900075435 -1.91939985752 --0.515892714262 -1.93861600757 --0.515878096223 -1.95587465167 --0.515865236521 -1.97313299775 --0.51585406065 -1.99039071798 --0.515844583511 -2.0076482594 --0.515836805105 -2.02490526438 --0.515830740332 -2.04216223955 --0.515826404094 -2.0594188571 --0.51582378149 -2.07667547464 --0.515822917223 -2.09393185377 --0.515823736787 -2.11118847132 --0.515826255083 -2.12844496965 --0.515830516815 -2.14570176601 --0.515836536884 -2.16295856237 --0.515844210982 -2.18021577596 --0.515853613615 -2.19747310877 --0.515864744782 -2.21473091841 --0.515877589583 -2.23198908567 --0.515892088413 -2.2492479682 --0.515900075435 -2.26846569777 --0.515892714262 -2.28768181801 --0.515878096223 -2.30494046211 --0.515865206719 -2.32219880819 --0.515854030848 -2.33945655823 --0.515844583511 -2.35671406984 --0.515836805105 -2.37397110462 --0.515830740332 -2.39122807979 --0.515826404094 -2.40848463774 --0.51582378149 -2.42574131489 --0.515822917223 -2.44299781323 --0.515823736787 -2.46025437117 --0.515826284885 -2.4775108099 --0.515830531716 -2.49476760626 --0.515836521983 -2.51202434301 --0.515844210982 -2.5292815566 --0.515853613615 -2.54653888941 --0.515864744782 -2.56379681826 --0.515877589583 -2.58105498552 --0.515892088413 -2.59831374884 --0.515900075435 -2.61753153801 --0.515892714262 -2.63674771786 --0.515878096223 -2.65400636196 --0.515865206719 -2.67126464844 --0.515854030848 -2.68852233886 --0.515844583511 -2.70577991008 --0.515836834907 -2.72303700447 --0.515830770135 -2.74029392004 --0.515826404094 -2.75755053758 --0.515823811292 -2.77480727434 --0.515822947025 -2.79206365347 --0.515823766589 -2.80932021141 --0.515826314688 -2.82657670975 --0.515830546617 -2.84383350611 --0.515836507082 -2.86109024286 --0.51584418118 -2.87834745646 --0.515853613615 -2.89560484887 --0.515864744782 -2.91286271811 --0.515877589583 -2.93012076616 --0.515892088413 -2.94737952948 --0.515900075435 -2.96659737825 --0.515892714262 -2.9858135581 --0.515878096223 -3.00307220221 --0.515865236521 -3.02033054829 --0.51585406065 -3.03758823872 --0.515844583511 -3.05484580994 --0.515836820006 -3.07210284472 --0.515830785036 -3.08935981989 --0.515826433897 -3.10661643743 --0.515823811292 -3.12387305498 --0.515822947025 -3.14112946589 --0.515823766589 --3.12479925156 --0.515826299787 --3.10754275322 --0.515830546618 --3.09028595686 --0.515836551786 --3.07302922011 --0.515844210982 --3.05577200651 --0.515853613615 --3.0385146141 --0.51586471498 --3.02125674486 --0.515877559781 --3.00399869681 --0.515892088413 --2.98673993349 --0.515900075435 --2.96752208471 --0.515892714262 --2.94830590487 --0.515878096223 --2.93104726076 --0.515865236521 --2.91378891468 --0.51585406065 --2.89653122425 --0.515844583511 --2.87927365303 --0.515836805105 --2.86201661825 --0.515830740332 --2.84475964308 --0.515826404094 --2.82750302553 --0.51582378149 --2.81024640798 --0.515822917223 --2.79299002886 --0.515823766589 --2.77573341131 --0.515826314688 --2.75847691298 --0.515830546617 --2.74122011662 --0.515836536884 --2.72396332026 --0.515844210982 --2.70670610667 --0.515853613615 --2.68944877386 --0.515864744782 --2.67219096422 --0.515877589583 --2.65493279696 --0.515892088413 --2.63767391443 --0.515900075435 --2.61845618486 --0.515892714262 --2.59924012423 --0.515878096223 --2.58198148012 --0.515865236521 --2.56472307444 --0.51585406065 --2.5474653244 --0.515844583511 --2.53020781279 --0.515836805105 --2.51295077801 --0.515830740332 --2.49569380283 --0.515826418996 --2.47843724489 --0.515823796391 --2.46118056774 --0.515822917223 --2.44392412901 --0.515823766589 --2.42666757107 --0.515826314688 --2.40941107273 --0.515830546617 --2.39215427637 --0.515836536884 --2.37489753962 --0.515844210982 --2.35764032602 --0.515853613615 --2.34038299322 --0.515864744782 --2.32312506437 --0.515877589583 --2.30586689711 --0.515892088413 --2.28860813379 --0.515900075435 --2.26939040422 --0.515892714262 --2.25017422437 --0.515878096223 --2.23291552067 --0.515865206719 --2.21565723419 --0.515854030848 --2.19839954376 --0.515844583511 --2.18114203214 --0.515836790204 --2.16388499737 --0.515830725431 --2.1466280222 --0.515826404094 --2.12937134505 --0.515823811292 --2.11211460829 --0.515822947025 --2.09485822916 --0.515823766589 --2.07760167122 --0.515826314688 --2.06034523249 --0.515830546617 --2.04308849573 --0.515836536884 --2.02583169937 --0.515844225883 --2.00857445598 --0.515853628516 --1.99131712317 --0.515864744782 --1.97405922413 --0.515877589583 --1.95680105686 --0.515892058611 --1.93954223394 --0.515900045633 --1.92032447457 --0.515892714262 --1.90110835433 --0.515878096223 --1.88384971023 --0.515865236521 --1.86659139395 --0.51585406065 --1.84933370352 --0.515844583511 --1.8320761323 --0.515836805105 --1.81481906772 --0.515830740332 --1.79756212235 --0.515826404094 --1.7803055048 --0.51582378149 --1.76304882765 --0.51582288742 --1.74579244852 --0.515823736787 --1.72853586078 --0.515826284885 --1.71127936244 --0.515830501914 --1.69402256608 --0.515836521983 --1.67676579952 --0.515844210982 --1.65950861574 --0.515853583813 --1.64225125313 --0.51586471498 --1.62499338388 --0.515877589583 --1.60773527622 --0.515892088413 --1.5904764533 --0.515900075435 --1.57125866413 --0.515892714262 --1.55204251409 --0.515878096223 --1.53478386998 --0.515865236521 --1.5175255239 --0.51585406065 --1.50026780367 --0.515844583511 --1.48301029205 --0.515836805105 --1.46575325727 --0.515830740332 --1.4484962523 --0.515826404094 --1.43123966456 --0.51582378149 --1.41398301721 --0.515822917223 --1.39672657847 --0.515823766589 --1.37946996092 --0.515826314688 --1.36221349239 --0.515830546617 --1.34495672584 --0.515836536884 --1.32769992948 --0.515844210982 --1.31044271588 --0.515853583813 --1.29318538308 --0.515864685177 --1.27592751384 --0.515877559781 --1.25866937637 --0.515892088413 --1.24141055345 --0.515900075435 --1.22219279408 --0.515892714262 --1.20297667384 --0.515878096223 --1.18571802974 --0.515865236521 --1.16845968366 --0.51585406065 --1.15120196343 --0.515844583511 --1.13394442201 --0.515836805105 --1.11668738723 --0.515830740332 --1.09943044186 --0.515826404094 --1.08217382431 --0.51582378149 --1.06491714716 --0.515822917223 --1.04766073823 --0.515823736787 --1.03040412068 --0.515826255083 --1.01314762235 --0.515830516815 --0.995890855789 --0.515836536884 --0.978634104133 --0.515844210982 --0.961376905442 --0.515853613615 --0.944119557738 --0.515864744782 --0.926861673594 --0.515877589583 --0.90960355103 --0.515892088413 --0.892344743014 --0.515900075435 --0.87312695384 --0.515892714262 --0.853910803795 --0.515878096223 --0.836652159691 --0.515865206719 --0.81939381361 --0.515854030848 --0.802136093378 --0.515844583511 --0.784878566861 --0.515836805105 --0.767621532082 --0.515830740332 --0.75036457181 --0.515826404094 --0.733107969165 --0.51582378149 --0.715851292014 --0.515822917223 --0.698594868183 --0.515823736787 --0.681338280439 --0.515826284885 --0.664081826806 --0.515830531716 --0.646825045347 --0.515836521983 --0.629568263888 --0.515844210982 --0.612311050296 --0.515853613615 --0.595053702593 --0.515864744782 --0.577795818448 --0.515877589583 --0.560537680983 --0.515892088413 --0.543278872967 --0.515900075435 --0.524061098695 --0.515892714262 --0.50484496355 --0.515878096223 --0.487586311996 --0.515865206719 --0.470327973366 --0.515854030848 --0.453070260584 --0.515844583511 --0.435812726617 --0.515836834907 --0.418555691838 --0.515830770135 --0.401298716664 --0.515826404094 --0.384042099118 --0.515823811292 --0.366785429418 --0.515822947025 --0.349529027939 --0.515823766589 --0.332272440195 --0.515826314688 --0.31501595676 --0.515830546617 --0.297759175301 --0.515836507082 --0.280502408743 --0.51584418118 --0.26324519515 --0.515853613615 --0.245987854898 --0.515864744782 --0.228729974479 --0.515877589583 --0.211471840739 --0.515892088413 --0.194213043898 --0.515900075435 --0.174995251 --0.498667411506 --0.155772559345 --0.498653195798 --0.138513941318 --0.498640708625 --0.121255636215 --0.498629838228 --0.103997945786 --0.498620614409 --0.086740437895 --0.498613066971 --0.0694834236055 --0.498607210815 --0.0522264773026 --0.498603008688 --0.0349699035287 --0.498600453138 --0.0177132664249 --0.498599626124 --0.000456877285615 --0.498600430786 -0.016799695557 --0.498602896929 -0.0340561447665 --0.4986070171 -0.051312899217 --0.498612836003 -0.0685696555301 --0.498620301485 -0.085826838389 --0.498629420996 -0.103084148839 --0.498640179634 -0.120342006907 --0.498652681708 -0.137600108981 --0.49866681546 -0.154858887196 --0.498674571514 -0.174076907337 --0.498667411506 -0.19329328835 --0.498653195798 -0.210551906377 --0.498640686274 -0.227810211479 --0.498629815876 -0.245067905635 --0.498620614409 -0.262325413525 --0.498613104224 -0.279582418501 --0.498607218265 -0.296839363873 --0.498602978885 -0.314095944166 --0.498600453138 -0.331352576613 --0.498599626124 -0.348608970642 --0.498600430786 -0.365865550935 --0.498602882027 -0.383121989667 --0.498606994748 -0.400378748775 --0.498612828553 -0.417635507882 --0.498620301485 -0.434892691672 --0.498629420996 -0.452150002122 --0.498640209436 -0.469407856465 --0.498652711511 -0.486665971578 --0.49866681546 -0.503924749792 --0.498674571514 -0.523142755031 --0.498667411506 -0.542359113693 --0.498653195798 -0.559617742896 --0.498640708625 -0.576876074076 --0.498629838228 -0.594133764505 --0.498620614409 -0.61139126122 --0.498613104224 -0.628648266197 --0.498607218265 -0.645905211568 --0.498602993787 -0.663161784411 --0.498600468039 -0.680418431759 --0.498599626124 -0.697674825787 --0.498600430786 -0.71493139863 --0.498602882027 -0.732187837362 --0.498606994748 -0.749444589019 --0.498612828553 -0.766701340675 --0.498620301485 -0.783958524466 --0.498629420996 -0.801215842366 --0.498640209436 -0.818473696709 --0.498652711511 -0.835731804371 --0.49866681546 -0.852990582585 --0.498674571514 -0.872208610177 --0.498667411506 -0.891424998641 --0.498653195798 -0.908683612942 --0.498640678823 -0.925941929221 --0.498629808426 -0.943199619651 --0.498620614409 -0.960457101464 --0.498613089323 -0.97771410644 --0.498607203364 -0.994971081615 --0.498602978885 -1.01222765446 --0.498600453138 -1.029484272 --0.498599626124 -1.04674068093 --0.498600430786 -1.06399726868 --0.498602882027 -1.08125370741 --0.498606994748 -1.09851044416 --0.498612828553 -1.11576721072 --0.498620316386 -1.13302439451 --0.498629435897 -1.15028169751 --0.498640209436 -1.16753956675 --0.498652711511 -1.18479767441 --0.498666785658 -1.20205646753 --0.498674541712 -1.22127449513 --0.498667411506 -1.24049085379 --0.498653195798 -1.25774943828 --0.498640708625 -1.27500775456 --0.498629838228 -1.2922654748 --0.498620614409 -1.30952298641 --0.498613104224 -1.32677999139 --0.498607218265 -1.34403690696 --0.498602978885 -1.3612934649 --0.498600453138 -1.37855011225 --0.498599596322 -1.39580649138 --0.498600400984 -1.41306304932 --0.498602882027 -1.43031951785 --0.498606994748 -1.44757628441 --0.498612828553 -1.46483305097 --0.498620301485 -1.48209026456 --0.498629420996 -1.49934756756 --0.498640231788 -1.516605407 --0.498652711511 -1.53386351466 --0.498666793108 -1.55112227797 --0.498674571514 -1.57034027577 --0.498667411506 -1.58955669403 --0.498653195798 -1.60681533814 --0.498640708625 -1.62407362461 --0.498629838228 -1.64133131504 --0.498620614409 -1.65858879685 --0.498613081872 -1.67584580183 --0.498607195914 -1.693102777 --0.498602978885 -1.71035936474 --0.498600453138 -1.72761601209 --0.498599626124 -1.74487239122 --0.498600430786 -1.76212894917 --0.498602882027 -1.7793853879 --0.498606994748 -1.79664215445 --0.498612828553 -1.81389892101 --0.498620301485 -1.831156075 --0.498629420996 -1.848413378 --0.498640201985 -1.86567124724 --0.49865270406 -1.8829293549 --0.49866681546 -1.90018814802 --0.498674571514 -1.91940617561 --0.498667411506 -1.93862253428 --0.498653195798 -1.95588114858 --0.498640708625 -1.97313946485 --0.498629838228 -1.99039715528 --0.498620614409 -2.0076546967 --0.498613104224 -2.02491170168 --0.498607218265 -2.04216861725 --0.498602978885 -2.05942517519 --0.498600453138 -2.07668179273 --0.498599626124 -2.09393817186 --0.498600400984 -2.11119478941 --0.498602852225 -2.12845128774 --0.498606994748 -2.1457080245 --0.498612828553 -2.16296476126 --0.498620301485 -2.18022191524 --0.498629420996 -2.19747924805 --0.498640231788 -2.21473711729 --0.498652733862 -2.23199522495 --0.49866681546 -2.24925404787 --0.498674571514 -2.26847201586 --0.498667411506 -2.28768831492 --0.498653195798 -2.30494695902 --0.498640678823 -2.3222053051 --0.498629808426 -2.33946299553 --0.498620614409 -2.35672050714 --0.498613081872 -2.37397754192 --0.498607195914 -2.39123445749 --0.498602978885 -2.40849101543 --0.498600453138 -2.42574769258 --0.498599626124 -2.44300413132 --0.498600400984 -2.46026068926 --0.498602852225 -2.47751706839 --0.498606994748 -2.49477380514 --0.498612828553 -2.51203054189 --0.498620301485 -2.52928775549 --0.498629420996 -2.54654508829 --0.498640231788 -2.56380295754 --0.498652733862 -2.5810610652 --0.49866681546 -2.59831982851 --0.498674571514 -2.6175378561 --0.498667411506 -2.63675427437 --0.498653195798 -2.65401285887 --0.498640678823 -2.67127114534 --0.498629808426 -2.68852883577 --0.498620614409 -2.70578634739 --0.498613081872 -2.72304338217 --0.498607195914 -2.74030029774 --0.498602978885 -2.75755691528 --0.498600453138 -2.77481359243 --0.498599626124 -2.79206997156 --0.498600430786 -2.8093264699 --0.498602882027 -2.82658290863 --0.498606994748 -2.84383970499 --0.498612798751 -2.86109644174 --0.498620271683 -2.87835365534 --0.498629420996 -2.89561098814 --0.498640209436 -2.91286879778 --0.498652711511 -2.93012684584 --0.49866681546 -2.94738560915 --0.498674571514 -2.96660369634 --0.498667411506 -2.98582011461 --0.498653195798 -3.00307875871 --0.498640708625 -3.02033704519 --0.498629838228 -3.03759467602 --0.498620614409 -3.05485218763 --0.498613066971 -3.07210922241 --0.498607210815 -3.08936619759 --0.498603008688 -3.10662275553 --0.498600453138 -3.12387937307 --0.498599626124 -3.14113578399 --0.498600430786 --3.12479299307 --0.498602896929 --3.10753655434 --0.4986070171 --3.09027975798 --0.498612836003 --3.07302302122 --0.498620301485 --3.05576580763 --0.498629420996 --3.03850847483 --0.498640179634 --3.02125066519 --0.498652681708 --3.00399261713 --0.49866681546 --2.98673385382 --0.498674571514 --2.96751576662 --0.498667411506 --2.94829934835 --0.498653195798 --2.93104070425 --0.498640686274 --2.91378241777 --0.498629815876 --2.89652478695 --0.498620614409 --2.87926727534 --0.498613104224 --2.86201024056 --0.498607218265 --2.84475326538 --0.498602978885 --2.82749670744 --0.498600453138 --2.81024008989 --0.498599626124 --2.79298371076 --0.498600430786 --2.77572709322 --0.498602882027 --2.75847059488 --0.498606994748 --2.74121385813 --0.498612828553 --2.72395712137 --0.498620301485 --2.70669996739 --0.498629420996 --2.68944269419 --0.498640209436 --2.67218482494 --0.498652711511 --2.65492665768 --0.49866681546 --2.63766783476 --0.498674571514 --2.61844986677 --0.498667411506 --2.59923356772 --0.498653195798 --2.58197492361 --0.498640708625 --2.56471657753 --0.498629838228 --2.5474588871 --0.498620614409 --2.53020137548 --0.498613104224 --2.5129443407 --0.498607218265 --2.49568742514 --0.498602993787 --2.4784308672 --0.498600468039 --2.46117424965 --0.498599626124 --2.44391787052 --0.498600430786 --2.42666125298 --0.498602882027 --2.40940481425 --0.498606994748 --2.39214807749 --0.498612828553 --2.37489134073 --0.498620301485 --2.35763412714 --0.498629420996 --2.34037679434 --0.498640209436 --2.32311892509 --0.498652711511 --2.30586081743 --0.49866681546 --2.28860205412 --0.498674571514 --2.26938402653 --0.498667411506 --2.25016760826 --0.498653195798 --2.23290902376 --0.498640678823 --2.21565073729 --0.498629808426 --2.19839304686 --0.498620614409 --2.18113559484 --0.498613089323 --2.16387856007 --0.498607203364 --2.14662158489 --0.498602978885 --2.12936496735 --0.498600453138 --2.1121082902 --0.498599626124 --2.09485191107 --0.498600430786 --2.07759541273 --0.498602882027 --2.06033903361 --0.498606994748 --2.04308229685 --0.498612828553 --2.02582550049 --0.498620316386 --2.0085682571 --0.498629435897 --1.99131095409 --0.498640209436 --1.97405311465 --0.498652711511 --1.95679497719 --0.498666785658 --1.93953615427 --0.498674541712 --1.92031815648 --0.498667411506 --1.90110179782 --0.498653195798 --1.88384318352 --0.498640708625 --1.86658489704 --0.498629838228 --1.84932720661 --0.498620614409 --1.83206966519 --0.498613104224 --1.81481266022 --0.498607218265 --1.79755574465 --0.498602978885 --1.7802991569 --0.498600453138 --1.76304250956 --0.498599596322 --1.74578613043 --0.498600400984 --1.72852957248 --0.498602882027 --1.71127310395 --0.498606994748 --1.69401633739 --0.498612828553 --1.67675960064 --0.498620301485 --1.65950244665 --0.498629420996 --1.64224511385 --0.498640231788 --1.6249872446 --0.498652711511 --1.60772916674 --0.498666793108 --1.59047037363 --0.498674571514 --1.57125234604 --0.498667411506 --1.55203598738 --0.498653195798 --1.53477737308 --0.498640708625 --1.5175190568 --0.498629838228 --1.50026136637 --0.498620614409 --1.48300385475 --0.498613081872 --1.46574681997 --0.498607195914 --1.4484898746 --0.498602978885 --1.43123331666 --0.498600453138 --1.41397666931 --0.498599626124 --1.39672026038 --0.498600430786 --1.37946367264 --0.498602882027 --1.3622072339 --0.498606994748 --1.34495049715 --0.498612828553 --1.32769373059 --0.498620301485 --1.3104365468 --0.498629420996 --1.29317924381 --0.498640201985 --1.27592137456 --0.49865270406 --1.25866326689 --0.49866681546 --1.24140450359 --0.498674571514 --1.2221865058 --0.498667411506 --1.20297011733 --0.498653195798 --1.18571150303 --0.498640708625 --1.16845318675 --0.498629838228 --1.15119549632 --0.498620614409 --1.1339379847 --0.498613104224 --1.11668097973 --0.498607218265 --1.09942406416 --0.498602978885 --1.08216744661 --0.498600453138 --1.06491079926 --0.498599626124 --1.04765444994 --0.498600400984 --1.0303978622 --0.498602852225 --1.01314139366 --0.498606994748 --0.995884642005 --0.498612828553 --0.978627890349 --0.498620301485 --0.96137072146 --0.498629420996 --0.94411341846 --0.498640231788 --0.926855564117 --0.498652733862 --0.909597456455 --0.49866681546 --0.892338678241 --0.498674571514 --0.87312066555 --0.498667411506 --0.853904277086 --0.498653195798 --0.836645632982 --0.498640678823 --0.819387316704 --0.498629808426 --0.802129656076 --0.498620614409 --0.784872174263 --0.498613081872 --0.767615139484 --0.498607195914 --0.750358179211 --0.498602978885 --0.733101606369 --0.498600453138 --0.715844959021 --0.498599626124 --0.698588564992 --0.498600400984 --0.681332007051 --0.498602852225 --0.664075568319 --0.498606994748 --0.646818801761 --0.498612828553 --0.629562050104 --0.498620301485 --0.612304881215 --0.498629420996 --0.595047563315 --0.498640231788 --0.577789679169 --0.498652733862 --0.560531571507 --0.49866681546 --0.543272793293 --0.498674571514 --0.524054780602 --0.498667411506 --0.50483842194 --0.498653195798 --0.487579800188 --0.498640678823 --0.47032148391 --0.498629808426 --0.453063800931 --0.498620614409 --0.435806304216 --0.498613081872 --0.418549291789 --0.498607195914 --0.401292338967 --0.498602978885 --0.384035751223 --0.498600453138 --0.366779111326 --0.498599626124 --0.349522724748 --0.498600430786 --0.332266159356 --0.498602882027 --0.315009705722 --0.498606994748 --0.297752946615 --0.498612798751 --0.280496202409 --0.498620271683 --0.263239018619 --0.498629420996 --0.245981704444 --0.498640209436 --0.228723846376 --0.498652711511 --0.211465742439 --0.49866681546 --0.19420696795 --0.498674571514 --0.174988944084 --0.481424294412 --0.155765976757 --0.481410525739 --0.138507384807 --0.481398396194 --0.121249103919 --0.481387853622 --0.103991439566 --0.481378912926 --0.0867339577526 --0.481371581554 --0.0694769695401 --0.481365889311 --0.0522200483829 --0.481361806393 --0.034963499289 --0.481359347701 --0.0177068889607 --0.481358513236 --0.000450526131315 --0.481359258294 -0.0168060199357 --0.481361664832 -0.0340624446981 --0.481365665794 -0.0513191726059 --0.481371305883 -0.0685759019106 --0.4813785851 -0.0858330633491 --0.481387466192 -0.10309034586 --0.481397911906 -0.120348175988 --0.4814100191 -0.137606251985 --0.481423713267 -0.154865004122 --0.481431238353 -0.174083262682 --0.481424294412 -0.193299874663 --0.481410525739 -0.210558470339 --0.481398373842 -0.227816749364 --0.481387801468 -0.245074413717 --0.481378883123 -0.26233189553 --0.481371581554 -0.279588870704 --0.481365866959 -0.296845793724 --0.481361784041 -0.314102336764 --0.481359347701 -0.33135894686 --0.481358513236 -0.348615325987 --0.481359280646 -0.365871876478 --0.481361687184 -0.383128292859 --0.481365688146 -0.400385029614 --0.481371328235 -0.417641766369 --0.4813785851 -0.434898920357 --0.481387466192 -0.452156201005 --0.481397911906 -0.469414025545 --0.4814100191 -0.486672110856 --0.481423713267 -0.503930866718 --0.481431238353 -0.523149102926 --0.481424294412 -0.542365700006 --0.481410525739 -0.559624314308 --0.481398396194 -0.576882615686 --0.48138782382 -0.594140276313 --0.481378883123 -0.611397743225 --0.481371603906 -0.628654718399 --0.481365889311 -0.64591164887 --0.481361784041 -0.663168206811 --0.481359347701 -0.680424809456 --0.481358513236 -0.697681173682 --0.481359280646 -0.714937716722 --0.481361687184 -0.732194125652 --0.481365688146 -0.749450862408 --0.481371328235 -0.766707584262 --0.4813785851 -0.78396473825 --0.481387466192 -0.801222026348 --0.481397911906 -0.818479865789 --0.4814100191 -0.83573795855 --0.481423713267 -0.852996706962 --0.481431238353 -0.872214972973 --0.481424294412 -0.891431584954 --0.481410503388 -0.908690154552 --0.481398373842 -0.92594845593 --0.48138782382 -0.943206131458 --0.481378883123 -0.960463583469 --0.481371603906 -0.977720558643 --0.481365889311 -0.994977518917 --0.481361784041 -1.01223409176 --0.481359347701 -1.0294906795 --0.481358513236 -1.04674702883 --0.481359280646 -1.06400358677 --0.481361687184 -1.0812600255 --0.481365688146 -1.09851673245 --0.481371328235 -1.1157734394 --0.481378562748 -1.13303059339 --0.48138744384 -1.15028786659 --0.481397911906 -1.16754570603 --0.4814100191 -1.18480381369 --0.481423713267 -1.20206257701 --0.481431238353 -1.22128081322 --0.481424294412 -1.2404974103 --0.481410525739 -1.2577559948 --0.481398396194 -1.27501428127 --0.48138782382 -1.2922719717 --0.481378883123 -1.30952945351 --0.481371603906 -1.32678642869 --0.481365911662 -1.34404334426 --0.481361806393 -1.3612998724 --0.481359347701 -1.37855648994 --0.481358513236 -1.39581286907 --0.481359280646 -1.41306939721 --0.481361687184 -1.43032580614 --0.481365688146 -1.44758254289 --0.481371328235 -1.46483930945 --0.481378562748 -1.48209649324 --0.48138744384 -1.49935376644 --0.481397934258 -1.51661157608 --0.4814100191 -1.53386965394 --0.481423690915 -1.55112841725 --0.481431238353 -1.57034665346 --0.481424294412 -1.58956328034 --0.481410503388 -1.60682189464 --0.481398373842 -1.62408018112 --0.48138782382 -1.64133784175 --0.481378883123 -1.65859529376 --0.481371559203 -1.67585226893 --0.481365866959 -1.6931092143 --0.481361806393 -1.71036577225 --0.481359347701 -1.72762235999 --0.481358513236 -1.74487870932 --0.481359280646 -1.76213526726 --0.481361687184 -1.77939170599 --0.481365688146 -1.79664844275 --0.481371328235 -1.8139051795 --0.4813785851 -1.83116233349 --0.481387466192 -1.84841957689 --0.481397934258 -1.86567741633 --0.481410041452 -1.88293552399 --0.481423713267 -1.90019425749 --0.481431238353 -1.9194124937 --0.481424294412 -1.93862909078 --0.481410503388 -1.95588767529 --0.481398373842 -1.97314596176 --0.48138782382 -1.99040365219 --0.481378883123 -2.00766116381 --0.481371603906 -2.02491813898 --0.481365911662 -2.04217505455 --0.481361806393 -2.05943161249 --0.481359347701 -2.07668823004 --0.481358513236 -2.09394454956 --0.481359280646 -2.1112011075 --0.481361687184 -2.12845760584 --0.481365688146 -2.14571434259 --0.481371328235 -2.16297107935 --0.4813785851 -2.18022817373 --0.481387466192 -2.19748544693 --0.481397934258 -2.21474331617 --0.481410041452 -2.23200136423 --0.481423713267 -2.24926012754 --0.481431238353 -2.26847833395 --0.481424294412 -2.28769487142 --0.481410525739 -2.30495351553 --0.481398396194 -2.322211802 --0.48138782382 -2.33946949244 --0.481378883123 -2.35672706366 --0.481371559203 -2.37398403883 --0.481365844607 -2.39124089479 --0.481361784041 -2.40849745273 --0.481359347701 -2.42575412989 --0.481358513236 -2.44301050902 --0.481359280646 -2.46026700735 --0.481361687184 -2.47752338648 --0.481365688146 -2.49478012323 --0.481371328235 -2.51203685999 --0.481378562748 -2.52929401398 --0.48138744384 -2.54655128718 --0.481397934258 -2.56380909682 --0.481410041452 -2.58106720448 --0.481423713267 -2.59832596779 --0.481431238353 -2.6175442338 --0.481424294412 -2.63676089048 --0.481410503388 -2.65401941538 --0.481398373842 -2.67127770185 --0.48138782382 -2.68853539228 --0.481378883123 -2.70579284429 --0.481371581554 -2.72304981947 --0.481365866959 -2.74030673504 --0.481361761689 -2.75756329298 --0.481359325349 -2.77481991053 --0.481358513236 -2.79207628966 --0.481359280646 -2.80933278799 --0.481361687184 -2.82658916712 --0.481365688146 -2.84384590387 --0.481371328235 -2.86110264063 --0.481378562748 -2.87835985422 --0.48138744384 -2.89561718702 --0.481397911906 -2.91287499666 --0.4814100191 -2.93013304472 --0.481423713267 -2.94739180803 --0.481431238353 -2.96661007404 --0.481424294412 -2.98582667112 --0.481410525739 -3.00308531523 --0.481398396194 -3.02034360171 --0.481387853622 -3.03760117293 --0.481378912926 -3.05485862494 --0.481371581554 -3.07211565972 --0.481365889311 -3.08937263489 --0.481361806393 -3.10662919283 --0.481359347701 -3.12388575077 --0.481358513236 -3.14114210208 --0.481359258294 --3.12478667498 --0.481361664832 --3.10753029585 --0.481365665794 --3.09027355909 --0.481371305883 --3.07301682234 --0.4813785851 --3.05575960875 --0.481387466192 --3.03850227594 --0.481397911906 --3.0212444663 --0.4814100191 --3.00398641825 --0.481423713267 --2.98672765494 --0.481431238353 --2.96750938893 --0.481424294412 --2.94829279184 --0.481410525739 --2.93103414774 --0.481398373842 --2.91377586126 --0.481387801468 --2.89651829004 --0.481378883123 --2.87926083803 --0.481371581554 --2.86200380325 --0.481365866959 --2.84474682808 --0.481361784041 --2.82749027014 --0.481359347701 --2.8102337122 --0.481358513236 --2.79297739267 --0.481359280646 --2.77572077513 --0.481361687184 --2.75846427679 --0.481365688146 --2.74120754004 --0.481371328235 --2.72395086289 --0.4813785851 --2.7066937685 --0.481387466192 --2.6894364953 --0.481397911906 --2.67217862606 --0.4814100191 --2.6549205184 --0.481423713267 --2.63766175509 --0.481431238353 --2.61844354868 --0.481424294412 --2.5992270112 --0.481410525739 --2.5819683671 --0.481398396194 --2.56471008063 --0.48138782382 --2.5474523902 --0.481378883123 --2.53019487858 --0.481371603906 --2.5129379034 --0.481365889311 --2.49568098784 --0.481361784041 --2.4784244299 --0.481359347701 --2.46116781235 --0.481358513236 --2.44391143322 --0.481359280646 --2.42665487528 --0.481361687184 --2.40939849615 --0.481365688146 --2.3921417594 --0.481371328235 --2.37488502264 --0.4813785851 --2.35762786865 --0.481387466192 --2.34037059545 --0.481397911906 --2.32311278582 --0.4814100191 --2.30585473776 --0.481423713267 --2.28859597445 --0.481431238353 --2.26937764883 --0.481424294412 --2.25016099215 --0.481410503388 --2.23290246725 --0.481398373842 --2.21564418078 --0.48138782382 --2.19838649034 --0.481378883123 --2.18112903833 --0.481371603906 --2.16387206316 --0.481365889311 --2.14661514759 --0.481361784041 --2.12935858965 --0.481359347701 --2.1121019721 --0.481358513236 --2.09484559297 --0.481359280646 --2.07758909464 --0.481361687184 --2.06033271551 --0.481365688146 --2.04307597876 --0.481371328235 --2.025819242 --0.481378562748 --2.00856205821 --0.48138744384 --1.99130475521 --0.481397911906 --1.97404694557 --0.4814100191 --1.95678883791 --0.481423713267 --1.9395300448 --0.481431238353 --1.92031180859 --0.481424294412 --1.90109521151 --0.481410525739 --1.88383662701 --0.481398396194 --1.86657834053 --0.48138782382 --1.8493206799 --0.481378883123 --1.83206319809 --0.481371603906 --1.81480622292 --0.481365911662 --1.79754930734 --0.481361806393 --1.78029274941 --0.481359347701 --1.76303613186 --0.481358513236 --1.74577975273 --0.481359280646 --1.72852322459 --0.481361687184 --1.71126681566 --0.481365688146 --1.69401007891 --0.481371328235 --1.67675334215 --0.481378562748 --1.65949618816 --0.48138744384 --1.64223888517 --0.481397934258 --1.62498104573 --0.4814100191 --1.60772299767 --0.481423690915 --1.59046426415 --0.481431238353 --1.57124599814 --0.481424294412 --1.55202937126 --0.481410503388 --1.53477078676 --0.481398373842 --1.51751253009 --0.48138782382 --1.50025486946 --0.481378883123 --1.48299735784 --0.481371559203 --1.46574035287 --0.481365866959 --1.4484834373 --0.481361806393 --1.43122687936 --0.481359347701 --1.41397026181 --0.481358513236 --1.39671391249 --0.481359280646 --1.37945735454 --0.481361687184 --1.36220091581 --0.481365688146 --1.34494420886 --0.481371328235 --1.32768750191 --0.4813785851 --1.31043034792 --0.481387466192 --1.29317307472 --0.481397934258 --1.27591523528 --0.481410041452 --1.25865715742 --0.481423713267 --1.24139842391 --0.481431238353 --1.2221801579 --0.481424294412 --1.20296353102 --0.481410503388 --1.18570494652 --0.481398373842 --1.16844666004 --0.48138782382 --1.15118896961 --0.481378883123 --1.1339314878 --0.481371603906 --1.11667451262 --0.481365911662 --1.09941759705 --0.481361806393 --1.08216103911 --0.481359347701 --1.06490442157 --0.481358513236 --1.04764807224 --0.481359280646 --1.03039154411 --0.481361687184 --1.01313513517 --0.481365688146 --0.995878383516 --0.481371328235 --0.978621646762 --0.4813785851 --0.961364507675 --0.481387466192 --0.944107234478 --0.481397934258 --0.926849395037 --0.481410041452 --0.909591302276 --0.481423713267 --0.892332553864 --0.481431238353 --0.873114317655 --0.481424294412 --0.853897705674 --0.481410525739 --0.836639076471 --0.481398396194 --0.819380789995 --0.48138782382 --0.80212315917 --0.481378883123 --0.784865677357 --0.481371559203 --0.767608672381 --0.481365844607 --0.750351756811 --0.481361784041 --0.733095213771 --0.481359347701 --0.715838581323 --0.481358513236 --0.698582217097 --0.481359280646 --0.681325703859 --0.481361687184 --0.664069265127 --0.481365688146 --0.64681251347 --0.481371328235 --0.629555791616 --0.481378562748 --0.612298637629 --0.48138744384 --0.59504134953 --0.481397934258 --0.577783510089 --0.481410041452 --0.560525432229 --0.481423713267 --0.543266683817 --0.481431238353 --0.524048432708 --0.481424294412 --0.504831820727 --0.481410503388 --0.487573236227 --0.481398373842 --0.470314957201 --0.48138782382 --0.453057289123 --0.481378883123 --0.435799814761 --0.481371581554 --0.418542839587 --0.481365866959 --0.401285909116 --0.481361761689 --0.384029351175 --0.481359325349 --0.366772741079 --0.481358513236 --0.349516376853 --0.481359280646 --0.332259833813 --0.481361687184 --0.315003409982 --0.481365688146 --0.297746680677 --0.481371328235 --0.280489951372 --0.481378562748 --0.263232797384 --0.48138744384 --0.245975513011 --0.481397911906 --0.228717669845 --0.4814100191 --0.211459591985 --0.481423713267 --0.194200839848 --0.481431238353 --0.174982585013 --0.464162230492 --0.15575933829 --0.464148901403 --0.138500779867 --0.464137151837 --0.121242528781 --0.46412691474 --0.10398488678 --0.464118264616 --0.086727431044 --0.464111171663 --0.0694704726339 --0.464105643332 --0.052213575691 --0.464101679623 --0.0349570512772 --0.464099287987 --0.0177004672587 --0.464098468423 --0.000444130972028 --0.46409920603 -0.0168123887852 --0.464101545513 -0.0340687874705 --0.464105427265 -0.0513254897669 --0.46411088109 -0.0685821920633 --0.464117921889 -0.0858393255621 --0.464126557112 -0.103096580133 --0.464136697352 -0.12035438791 --0.464148409665 -0.137612443418 --0.464161664248 -0.154871173203 --0.464168965816 -0.174089666456 --0.464162252843 -0.193306509406 --0.464148901403 -0.210565075278 --0.464137129485 -0.227823331952 --0.464126907289 -0.245080970228 --0.464118257165 -0.262338422239 --0.464111149311 -0.27959536761 --0.464105598628 -0.296852260828 --0.464101657271 -0.314108788967 --0.464099287987 -0.33136536926 --0.464098468423 -0.348621711135 --0.464099228382 -0.365878246724 --0.464101567865 -0.383134640753 --0.464105449617 -0.400391347706 --0.464110925793 -0.417648054659 --0.464117944241 -0.434905171394 --0.464126557112 -0.45216242969 --0.464136697352 -0.469420239329 --0.464148409665 -0.486678294838 --0.4641616866 -0.503937028349 --0.464168988168 -0.523155510426 --0.464162252843 -0.542372345924 --0.464148901403 -0.559630930424 --0.464137129485 -0.576889201999 --0.464126884937 -0.594146832824 --0.464118234813 -0.611404284835 --0.464111171663 -0.628661230207 --0.46410562098 -0.645918115973 --0.464101657271 -0.663174644112 --0.464099287987 -0.680431216955 --0.464098468423 -0.697687551379 --0.464099228382 -0.714944064617 --0.464101567865 -0.732200458646 --0.464105449617 -0.7494571805 --0.464110925793 -0.766713872552 --0.464117944241 -0.783970996737 --0.464126557112 -0.801228269935 --0.464136697352 -0.818486079574 --0.464148409665 -0.835744127631 --0.464161664248 -0.853002846241 --0.464168965816 -0.87222135067 --0.464162252843 -0.89143820107 --0.464148901403 -0.908696755766 --0.464137129485 -0.925955027342 --0.464126907289 -0.943212673068 --0.464118257165 -0.960470110178 --0.464111171663 -0.977727070451 --0.46410562098 -0.994983986021 --0.464101657271 -1.01224052906 --0.464099287987 -1.029497087 --0.464098468423 -1.04675340652 --0.464099228382 -1.06400996447 --0.464101567865 -1.08126637339 --0.464105427265 -1.09852305054 --0.464110903442 -1.11577972769 --0.464117944241 -1.13303685188 --0.464126557112 -1.15029409528 --0.464136697352 -1.16755190492 --0.464148409665 -1.18481001258 --0.464161664248 -1.20206874609 --0.464168965816 -1.22128719091 --0.464162252843 -1.24050402641 --0.464148923754 -1.25776261091 --0.464137151837 -1.27502086759 --0.464126907289 -1.29227849841 --0.464118257165 -1.30953595042 --0.464111171663 -1.3267929256 --0.464105643332 -1.34404984117 --0.464101679623 -1.3613063395 --0.464099287987 -1.37856292724 --0.464098468423 -1.39581927657 --0.464099228382 -1.41307577491 --0.464101567865 -1.43033215404 --0.464105427265 -1.44758886099 --0.464110903442 -1.46484559774 --0.464117944241 -1.48210275173 --0.464126557112 -1.49935999513 --0.464136697352 -1.51661777496 --0.464148409665 -1.53387582302 --0.464161664248 -1.55113458633 --0.464168965816 -1.57035309076 --0.464162252843 -1.58956992626 --0.464148879051 -1.60682848096 --0.464137107134 -1.62408673763 --0.464126884937 -1.64134436846 --0.464118234813 -1.65860182047 --0.464111149311 -1.67585879564 --0.46410562098 -1.69311568141 --0.464101709425 -1.71037220955 --0.464099317789 -1.72762879729 --0.464098468423 -1.74488511682 --0.464099228382 -1.76214164496 --0.464101567865 -1.77939805389 --0.464105427265 -1.79665476084 --0.464110903442 -1.81391146779 --0.464117944241 -1.83116859198 --0.464126557112 -1.84842583537 --0.464136697352 -1.86568364501 --0.464148409665 -1.88294172287 --0.464161664248 -1.90020042658 --0.464168965816 -1.9194188714 --0.464162230492 -1.9386357069 --0.464148856699 -1.9558942914 --0.464137107134 -1.97315257788 --0.464126907289 -1.9904102385 --0.464118257165 -2.00766766071 --0.464111171663 -2.02492457628 --0.464105643332 -2.04218149185 --0.464101679623 -2.05943804979 --0.464099287987 -2.07669466734 --0.464098468423 -2.09395098686 --0.464099228382 -2.1112074852 --0.464101567865 -2.12846392393 --0.464105427265 -2.14572066069 --0.464110903442 -2.16297733784 --0.464117944241 -2.18023443222 --0.464126557112 -2.19749170542 --0.464136697352 -2.21474951505 --0.464148409665 -2.23200756311 --0.4641616866 -2.24926632643 --0.464168988168 -2.26848477125 --0.464162230492 -2.28770154714 --0.464148901403 -2.30496013165 --0.464137151837 -2.32221841812 --0.464126884937 -2.33947610855 --0.464118234813 -2.35673362017 --0.464111149311 -2.37399059534 --0.464105598628 -2.3912474513 --0.464101657271 -2.40850394964 --0.464099287987 -2.42576050759 --0.464098468423 -2.44301682711 --0.464099228382 -2.46027332544 --0.464101567865 -2.47752970457 --0.464105427265 -2.49478644133 --0.464110903442 -2.51204317808 --0.464117944241 -2.52930027246 --0.464126557112 -2.54655748606 --0.464136697352 -2.56381529569 --0.464148409665 -2.58107340336 --0.464161664248 -2.59833216667 --0.464168965816 -2.6175506115 --0.464162252843 -2.63676744699 --0.464148879051 -2.65402603149 --0.464137107134 -2.67128431797 --0.464126884937 -2.6885419488 --0.464118234813 -2.70579940081 --0.464111171663 -2.72305637598 --0.46410562098 -2.74031323195 --0.46410163492 -2.75756973028 --0.464099265635 -2.77482634783 --0.464098468423 -2.79208266735 --0.464099228382 -2.80933916568 --0.464101567865 -2.82659554481 --0.464105427265 -2.84385222197 --0.464110903442 -2.86110895872 --0.464117921889 -2.87836617231 --0.46412653476 -2.89562344551 --0.464136697352 -2.91288119554 --0.464148409665 -2.9301392436 --0.464161664248 -2.94739800692 --0.464168965816 -2.96661651134 --0.464162230492 -2.98583334684 --0.464148901403 -3.00309193134 --0.464137151837 -3.02035015821 --0.46412691474 -3.03760772944 --0.464118264616 -3.05486518145 --0.464111171663 -3.07212215662 --0.464105643332 -3.08937907219 --0.464101679623 -3.10663563013 --0.464099287987 -3.12389218807 --0.464098468423 -3.14114847978 --0.46409920603 --3.12478029728 --0.464101545513 --3.10752391815 --0.464105427265 --3.090267241 --0.46411088109 --3.07301050425 --0.464117921889 --3.05575329065 --0.464126557112 --3.03849601745 --0.464136697352 --3.02123826742 --0.464148409665 --3.00398021937 --0.464161664248 --2.98672145605 --0.464168965816 --2.96750295162 --0.464162252843 --2.94828611612 --0.464148901403 --2.93102753162 --0.464137129485 --2.91376930475 --0.464126907289 --2.89651173353 --0.464118257165 --2.87925428152 --0.464111149311 --2.86199730634 --0.464105598628 --2.84474039078 --0.464101657271 --2.82748383284 --0.464099287987 --2.8102272749 --0.464098468423 --2.79297095537 --0.464099228382 --2.77571439743 --0.464101567865 --2.7584579587 --0.464105449617 --2.74120122194 --0.464110925793 --2.7239446044 --0.464117944241 --2.70668751002 --0.464126557112 --2.68943017721 --0.464136697352 --2.67217236757 --0.464148409665 --2.65491437912 --0.4641616866 --2.63765567541 --0.464168988168 --2.61843717098 --0.464162252843 --2.59922033548 --0.464148901403 --2.58196175099 --0.464137129485 --2.56470346451 --0.464126884937 --2.54744577408 --0.464118234813 --2.53018832207 --0.464111171663 --2.5129314065 --0.46410562098 --2.49567449093 --0.464101657271 --2.47841799259 --0.464099287987 --2.46116143465 --0.464098468423 --2.44390505552 --0.464099228382 --2.42664855718 --0.464101567865 --2.40939217806 --0.464105449617 --2.3921354413 --0.464110925793 --2.37487876415 --0.464117944241 --2.35762166977 --0.464126557112 --2.34036439657 --0.464136697352 --2.32310658693 --0.464148409665 --2.30584853888 --0.464161664248 --2.28858983517 --0.464168965816 --2.26937133074 --0.464162252843 --2.25015443564 --0.464148901403 --2.23289591074 --0.464137129485 --2.21563762426 --0.464126907289 --2.19837993383 --0.464118257165 --2.18112248182 --0.464111171663 --2.16386550665 --0.46410562098 --2.14660865068 --0.464101657271 --2.12935215235 --0.464099287987 --2.1120955944 --0.464098468423 --2.09483927488 --0.464099228382 --2.07758271694 --0.464101567865 --2.06032633781 --0.464105427265 --2.04306966066 --0.464110903442 --2.02581292391 --0.464117944241 --2.00855576992 --0.464126557112 --1.99129852653 --0.464136697352 --1.97404071689 --0.464148409665 --1.95678263903 --0.464161664248 --1.93952390551 --0.464168965816 --1.92030543089 --0.464162252843 --1.90108859539 --0.464148923754 --1.88383004069 --0.464137151837 --1.86657178402 --0.464126907289 --1.84931415319 --0.464118257165 --1.83205670118 --0.464111171663 --1.81479972601 --0.464105643332 --1.79754281044 --0.464101679623 --1.7802862823 --0.464099287987 --1.76302969456 --0.464098468423 --1.74577334523 --0.464099228382 --1.7285168469 --0.464101567865 --1.71126046777 --0.464105427265 --1.69400376081 --0.464110903442 --1.67674705386 --0.464117944241 --1.65948992968 --0.464126557112 --1.64223265648 --0.464136697352 --1.62497484684 --0.464148409665 --1.60771679878 --0.464161664248 --1.59045809507 --0.464168965816 --1.57123962045 --0.464162252843 --1.55202275515 --0.464148879051 --1.53476417065 --0.464137107134 --1.51750591397 --0.464126884937 --1.50024828315 --0.464118234813 --1.48299080133 --0.464111149311 --1.46573385596 --0.46410562098 --1.44847697019 --0.464101709425 --1.43122041225 --0.464099317789 --1.41396385431 --0.464098468423 --1.39670753479 --0.464099228382 --1.37945100665 --0.464101567865 --1.36219459772 --0.464105427265 --1.34493789077 --0.464110903442 --1.32768121362 --0.464117944241 --1.31042408943 --0.464126557112 --1.29316684604 --0.464136697352 --1.2759090364 --0.464148409665 --1.25865098834 --0.464161664248 --1.24139225483 --0.464168965816 --1.2221737504 --0.464162230492 --1.2029569149 --0.464148856699 --1.1856983304 --0.464137107134 --1.16844007373 --0.464126907289 --1.1511824429 --0.464118257165 --1.13392499089 --0.464111171663 --1.11666801572 --0.464105643332 --1.09941110015 --0.464101679623 --1.08215460181 --0.464099287987 --1.06489801407 --0.464098468423 --1.04764166474 --0.464099228382 --1.03038516641 --0.464101567865 --1.01312878728 --0.464105427265 --0.995872080325 --0.464110903442 --0.978615373373 --0.464117944241 --0.961358249187 --0.464126557112 --0.944100990892 --0.464136697352 --0.926843181253 --0.464148409665 --0.909585118294 --0.4641616866 --0.892326369882 --0.464168988168 --0.873107895255 --0.464162230492 --0.853891074658 --0.464148901403 --0.836632475257 --0.464137151837 --0.819374203682 --0.464126884937 --0.802116587758 --0.464118234813 --0.784859120846 --0.464111149311 --0.767602145672 --0.464105598628 --0.750345274806 --0.464101657271 --0.733088761568 --0.464099287987 --0.715832173824 --0.464098468423 --0.6985758394 --0.464099228382 --0.681319326163 --0.464101567865 --0.664062932134 --0.464105427265 --0.646806225181 --0.464110903442 --0.629549518228 --0.464117944241 --0.612292379141 --0.464126557112 --0.595035120845 --0.464136697352 --0.577777311206 --0.464148409665 --0.560519248247 --0.464161664248 --0.543260529637 --0.464168965816 --0.52404204011 --0.464162252843 --0.504825182259 --0.464148879051 --0.487566627562 --0.464137107134 --0.470308378339 --0.464126884937 --0.453050732612 --0.464118234813 --0.435793288052 --0.464111171663 --0.41853634268 --0.46410562098 --0.401279434562 --0.46410163492 --0.384022898972 --0.464099265635 --0.366766303778 --0.464098468423 --0.349509969354 --0.464099228382 --0.332253456116 --0.464101567865 --0.314997062087 --0.464105427265 --0.297740362584 --0.464110903442 --0.280483648181 --0.464117921889 --0.263226516545 --0.46412653476 --0.245969265699 --0.464136697352 --0.228711456061 --0.464148409665 --0.211453404278 --0.464161664248 --0.194194678217 --0.464168965816 --0.174976184964 --0.444510489702 --0.155752532184 --0.444497652352 --0.138493999839 --0.44448634237 --0.12123577483 --0.444476462901 --0.103978158906 --0.44446811825 --0.0867207311094 --0.444461300969 --0.0694637997076 --0.444455973804 --0.0522069288418 --0.444452166558 --0.0349504328333 --0.444449864328 --0.017693876056 --0.444449074567 --0.0004375660792 --0.444449797273 -0.0168189264368 --0.444452047348 -0.0340752960183 --0.444455787539 -0.0513319727033 --0.444461047649 -0.068588649854 --0.444467812776 -0.0858457535505 --0.444476135075 -0.103102982044 --0.444485917687 -0.120360763744 --0.444497197866 -0.137618795038 --0.444509960711 -0.154877498746 --0.444516979158 -0.174096226692 --0.444510512054 -0.193313311786 --0.44449763 -0.210571851582 --0.444486275315 -0.227830082178 --0.444476462901 -0.245087690651 --0.444468140602 -0.26234511286 --0.444461300969 -0.27960203588 --0.444455973804 -0.296858906746 --0.444452166558 -0.314115419984 --0.444449864328 -0.331371977925 --0.444449074567 -0.348628282547 --0.444449797273 -0.365884780884 --0.444452047348 -0.38314114511 --0.444455809891 -0.400397822261 --0.444461092353 -0.417654499412 --0.444467835128 -0.434911593795 --0.444476112723 -0.452168829739 --0.444485895335 -0.469426624477 --0.444497197866 -0.486684657633 --0.444509983063 -0.503943353891 --0.44451700151 -0.523162081838 --0.444510512054 -0.542379170656 --0.44449763 -0.559637710452 --0.444486275315 -0.576895937324 --0.444476440549 -0.594153553247 --0.44446811825 -0.611410990357 --0.444461300969 -0.628667905927 --0.444455973804 -0.64592474699 --0.444452166558 -0.663181245327 --0.444449864328 -0.680437818169 --0.444449074567 -0.697694137692 --0.444449819625 -0.714950606227 --0.4444520697 -0.732206970453 --0.444455809891 -0.749463662505 --0.444461092353 -0.766720324755 --0.444467835128 -0.783977434039 --0.444476112723 -0.801234692336 --0.444485895335 -0.818492472172 --0.444497197866 -0.835750490427 --0.444509960711 -0.853009194136 --0.444516979158 -0.872227922082 --0.444510512054 -0.8914450109 --0.444497652351 -0.908703550696 --0.444486320019 -0.925961792469 --0.444476485252 -0.943219423294 --0.444468140602 -0.960476830601 --0.444461300969 -0.977733746171 --0.444455973804 -0.994990617036 --0.444452166558 -1.01224711537 --0.444449864328 -1.02950367331 --0.444449074567 -1.04675999284 --0.444449819625 -1.06401649118 --0.4444520697 -1.0812728405 --0.444455787539 -1.09852951765 --0.444461070001 -1.1157861948 --0.44446785748 -1.13304328918 --0.444476157427 -1.15030050278 --0.444485917687 -1.16755831241 --0.444497197866 -1.18481639027 --0.444509960711 -1.20207506418 --0.444516979158 -1.22129377723 --0.444510512054 -1.24051088095 --0.444497674703 -1.25776943564 --0.44448634237 -1.27502763271 --0.444476485252 -1.29228520393 --0.444468140602 -1.30954265595 --0.444461300969 -1.32679960132 --0.444455973804 -1.34405648709 --0.444452166558 -1.36131298542 --0.444449864328 -1.37856951356 --0.444449074567 -1.39582580328 --0.444449819625 -1.41308230162 --0.4444520697 -1.43033868075 --0.444455787539 -1.4475953579 --0.444461070001 -1.46485206485 --0.44446785748 -1.48210918903 --0.444476135075 -1.49936640262 --0.444485895335 -1.51662415266 --0.444497197866 -1.53388217091 --0.444509960711 -1.55114090442 --0.444516979158 -1.57035964728 --0.444510512054 -1.58957672119 --0.44449763 -1.60683524609 --0.444486297667 -1.62409347296 --0.444476462901 -1.64135110378 --0.44446811825 -1.65860852599 --0.444461300969 -1.67586547136 --0.444455973804 -1.69312232733 --0.44445219636 -1.71037879586 --0.444449894131 -1.72763538361 --0.444449074567 -1.74489170313 --0.444449797273 -1.76214817167 --0.444452047348 -1.77940455079 --0.444455787539 -1.79666122794 --0.444461070001 -1.81391787529 --0.444467835128 -1.83117496967 --0.444476112723 -1.84843221307 --0.444485895335 -1.86569002271 --0.444497197866 -1.88294807076 --0.444509960711 -1.90020674467 --0.444516979158 -1.91942545772 --0.444510489702 -1.93864256144 --0.444497607648 -1.95590111614 --0.444486297667 -1.97315934301 --0.444476485252 -1.99041694403 --0.444468140602 -2.00767436624 --0.444461300969 -2.02493131161 --0.444455973804 -2.04218816757 --0.444452166558 -2.05944466591 --0.444449864328 -2.07670122385 --0.444449074567 -2.09395754337 --0.444449797273 -2.11121404171 --0.444452047348 -2.12847042084 --0.444455787539 -2.14572709799 --0.444461070001 -2.16298371553 --0.444467835128 -2.18024080991 --0.444476135075 -2.19749808311 --0.444485917687 -2.21475589275 --0.444497197866 -2.23201394081 --0.444509983063 -2.24927264452 --0.44451700151 -2.26849132777 --0.444510489702 -2.28770840168 --0.444497652352 -2.30496692658 --0.44448634237 -2.32222515345 --0.444476462901 -2.33948284388 --0.44446811825 -2.35674029589 --0.444461300969 -2.37399721145 --0.444455973804 -2.39125406742 --0.444452166558 -2.40851056576 --0.444449864328 -2.42576706409 --0.444449074567 -2.44302332401 --0.444449819625 -2.46027988195 --0.4444520697 -2.47753626108 --0.444455787539 -2.49479293823 --0.444461070001 -2.51204961539 --0.44446785748 -2.52930670977 --0.444476135075 -2.54656392336 --0.444485895335 -2.56382167339 --0.444497197866 -2.58107972145 --0.444509960711 -2.59833848476 --0.444516979158 -2.61755716801 --0.444510512054 -2.63677418232 --0.444497652351 -2.65403282642 --0.444486297667 -2.6712911129 --0.444476440549 -2.68854868412 --0.44446811825 -2.70580607653 --0.444461300969 -2.7230629921 --0.444455973804 -2.74031984806 --0.444452166558 -2.7575763464 --0.444449864328 -2.77483296395 --0.444449074567 -2.79208922386 --0.444449819625 -2.80934572219 --0.4444520697 -2.82660210132 --0.444455787539 -2.84385871887 --0.444461070001 -2.86111545563 --0.444467835128 -2.87837260961 --0.444476112723 -2.89562982321 --0.444485895335 -2.91288757324 --0.444497197866 -2.93014556169 --0.444509960711 -2.9474042654 --0.444516979158 -2.96662306786 --0.444510489702 -2.98584020138 --0.444497652352 -3.00309872627 --0.44448634237 -3.02035689354 --0.444476462901 -3.03761446476 --0.44446811825 -3.05487191677 --0.444461300969 -3.07212889195 --0.444455973804 -3.08938574791 --0.444452166558 -3.10664218665 --0.444449864328 -3.12389874458 --0.444449074567 -3.14115503629 --0.444449797273 --3.12477374077 --0.444452047348 --3.10751736164 --0.444455787539 --3.0902607441 --0.444461047649 --3.07300400734 --0.444467812776 --3.05574685335 --0.444476135075 --3.03848963976 --0.444485917687 --3.02123188973 --0.444497197866 --3.00397390128 --0.444509960711 --2.98671519757 --0.444516979158 --2.96749639511 --0.444510512054 --2.94827926159 --0.44449763 --2.93102073669 --0.444486275315 --2.91376256942 --0.444476462901 --2.8965049982 --0.444468140602 --2.87924754619 --0.444461300969 --2.86199057102 --0.444455973804 --2.84473371505 --0.444452166558 --2.82747721672 --0.444449864328 --2.81022065878 --0.444449074567 --2.79296433926 --0.444449797273 --2.77570784092 --0.444452047348 --2.7584515214 --0.444455809891 --2.74119484424 --0.444461092353 --2.7239381671 --0.444467835128 --2.70668107271 --0.444476112723 --2.68942379951 --0.444485895335 --2.67216598987 --0.444497197866 --2.65490800142 --0.444509983063 --2.63764935732 --0.44451700151 --2.61843061447 --0.444510512054 --2.59921348095 --0.44449763 --2.58195495606 --0.444486275315 --2.56469672918 --0.444476440549 --2.54743909835 --0.44446811825 --2.53018164634 --0.444461300969 --2.51292473078 --0.444455973804 --2.49566787481 --0.444452166558 --2.47841137647 --0.444449864328 --2.46115487814 --0.444449074567 --2.44389855862 --0.444449819625 --2.42664206028 --0.4444520697 --2.40938568115 --0.444455809891 --2.3921289444 --0.444461092353 --2.37487232685 --0.444467835128 --2.35761523247 --0.444476112723 --2.34035795927 --0.444485895335 --2.32310020924 --0.444497197866 --2.30584216118 --0.444509960711 --2.28858345747 --0.444516979158 --2.26936477423 --0.444510512054 --2.25014770031 --0.444497652351 --2.23288917541 --0.444486320019 --2.21563088893 --0.444476485252 --2.19837319851 --0.444468140602 --2.1811158061 --0.444461300969 --2.16385889054 --0.444455973804 --2.14660203457 --0.444452166558 --2.12934553623 --0.444449864328 --2.11208897829 --0.444449074567 --2.09483271838 --0.444449819625 --2.07757622004 --0.4444520697 --2.06031984091 --0.444455787539 --2.04306316376 --0.444461070001 --2.025806427 --0.44446785748 --2.00854930282 --0.444476157427 --1.99129211903 --0.444485917687 --1.97403433919 --0.444497197866 --1.95677632093 --0.444509960711 --1.93951761722 --0.444516979158 --1.92029887438 --0.444510512054 --1.90108180046 --0.444497674703 --1.88382327557 --0.44448634237 --1.8665650487 --0.444476485252 --1.84930741787 --0.444468140602 --1.83204999566 --0.444461300969 --1.81479305029 --0.444455973804 --1.79753616452 --0.444452166558 --1.78027966618 --0.444449864328 --1.76302310824 --0.444449074567 --1.74576681852 --0.444449819625 --1.72851032019 --0.4444520697 --1.71125394106 --0.444455787539 --1.69399726391 --0.444461070001 --1.67674058676 --0.44446785748 --1.65948352218 --0.444476135075 --1.64222627878 --0.444485895335 --1.62496846915 --0.444497197866 --1.60771045089 --0.444509960711 --1.59045177698 --0.444516979158 --1.57123306394 --0.444510512054 --1.55201596022 --0.44449763 --1.53475740552 --0.444486297667 --1.51749914885 --0.444476462901 --1.50024154782 --0.44446811825 --1.48298412561 --0.444461300969 --1.46572721004 --0.444455973804 --1.44847035408 --0.44445219636 --1.43121382594 --0.444449894131 --1.413957268 --0.444449074567 --1.39670094848 --0.444449797273 --1.37944447994 --0.444452047348 --1.36218810081 --0.444455787539 --1.34493139386 --0.444461070001 --1.32767474652 --0.444467835128 --1.31041765213 --0.444476112723 --1.29316043854 --0.444485895335 --1.2759026587 --0.444497197866 --1.25864461064 --0.444509960711 --1.24138590693 --0.444516979158 --1.22216716409 --0.444510489702 --1.20295009017 --0.444497607648 --1.18569156528 --0.444486297667 --1.16843333841 --0.444476485252 --1.15117573739 --0.444468140602 --1.13391831517 --0.444461300969 --1.1166613698 --0.444455973804 --1.09940445423 --0.444452166558 --1.08214795589 --0.444449864328 --1.06489142775 --0.444449074567 --1.04763510823 --0.444449797273 --1.0303786099 --0.444452047348 --1.01312226057 --0.444455787539 --0.995865598319 --0.444461070001 --0.978608906269 --0.444467835128 --0.961351796985 --0.444476135075 --0.944094568491 --0.444485917687 --0.926836773753 --0.444497197866 --0.909578740597 --0.444509983063 --0.892320036888 --0.44451700151 --0.873101323843 --0.444510489702 --0.853884249926 --0.444497652352 --0.836625695229 --0.44448634237 --0.819367468357 --0.444476462901 --0.802109852433 --0.44446811825 --0.784852415323 --0.444461300969 --0.767595484853 --0.444455973804 --0.750338628888 --0.444452166558 --0.733082130551 --0.444449864328 --0.715825587511 --0.444449074567 --0.698569282889 --0.444449819625 --0.68131275475 --0.4444520697 --0.664056405425 --0.444455787539 --0.646799743176 --0.444461070001 --0.629543051124 --0.44446785748 --0.612285941839 --0.444476135075 --0.595028713346 --0.444485895335 --0.577770933509 --0.444497197866 --0.560512900353 --0.444509960711 --0.543254211545 --0.444516979158 --0.524035483599 --0.444510512054 --0.50481838733 --0.444497652351 --0.487559847534 --0.444486297667 --0.470301613211 --0.444476440549 --0.453043997288 --0.44446811825 --0.43578658998 --0.444461300969 --0.41852966696 --0.444455973804 --0.401272781193 --0.444452166558 --0.384016275406 --0.444449864328 --0.366759710014 --0.444449074567 --0.349503405392 --0.444449819625 --0.332246921956 --0.4444520697 --0.31499055773 --0.444455787539 --0.297733873129 --0.444461070001 --0.280477181077 --0.444467835128 --0.263220086694 --0.444476112723 --0.245962865651 --0.444485895335 --0.228705082089 --0.444497197866 --0.211447056383 --0.444509960711 --0.194188356399 --0.444516979158 --0.174969621003 --0.424822583795 --0.155745543539 --0.424810253083 --0.138487033546 --0.424799382686 --0.121228832752 --0.424789920449 --0.103971244767 --0.424781903624 --0.0867138467729 --0.424775339663 --0.0694569414482 --0.424770206213 --0.0522000975907 --0.424766562879 --0.0349436304532 --0.424764379859 --0.0176871011499 --0.4247636199 --0.000430818181485 --0.424764297903 -0.0168256463949 --0.42476644367 -0.0340819871053 --0.424770049751 -0.0513386363164 --0.424775116146 -0.0685952883214 --0.424781605601 -0.0858523659408 --0.424789577722 -0.103109566495 --0.424798972905 -0.120367318392 --0.424809828401 -0.13762531802 --0.424822106958 -0.154883991927 --0.424828827381 -0.174102969468 --0.424822583795 -0.193320304156 --0.424810230732 -0.210578817875 --0.424799315631 -0.227837022394 --0.424789875746 -0.245094608516 --0.424781881273 -0.262351997197 --0.424775317311 -0.279608897865 --0.424770228564 -0.296865753829 --0.424766585231 -0.314122229814 --0.424764357508 -0.331378757954 --0.424763575196 -0.348635032773 --0.424764275551 -0.365891493857 --0.42476644367 -0.383147835732 --0.424770049751 -0.40040449053 --0.424775116146 -0.417661137879 --0.424781605601 -0.43491820991 --0.424789555371 -0.452175416052 --0.424798950553 -0.469433180988 --0.424809828401 -0.486691191792 --0.424822106958 -0.503949858248 --0.424828827381 -0.523168832063 --0.424822583795 -0.542386159301 --0.424810230732 -0.559644669294 --0.424799315631 -0.576902866364 --0.424789875746 -0.594160452485 --0.424781881273 -0.611417844891 --0.424775317311 -0.62867474556 --0.424770206213 -0.645931586623 --0.424766562879 -0.663188055158 --0.424764379859 -0.680444613099 --0.424763597548 -0.69770090282 --0.424764297903 -0.714957341552 --0.424766466021 -0.732213675976 --0.424770049751 -0.749470338225 --0.424775116146 -0.766726985574 --0.424781605601 -0.783984065056 --0.424789555371 -0.801241278648 --0.424798950553 -0.818499028683 --0.424809828401 -0.835757032037 --0.424822106958 -0.853015720844 --0.424828827381 -0.87223470211 --0.424822583795 -0.891452029348 --0.424810230732 -0.90871052444 --0.424799337983 -0.925968721509 --0.424789898098 -0.943226337433 --0.424781881273 -0.960483729839 --0.424775317311 -0.977740615606 --0.424770228564 -0.994997456669 --0.424766585231 -1.0122539103 --0.424764357508 -1.02951043844 --0.424763575196 -1.04676672816 --0.424764297903 -1.0640231967 --0.424766466021 -1.08127951622 --0.424770049751 -1.09853616357 --0.424775116146 -1.11579284072 --0.424781605601 -1.1330499351 --0.424789577722 -1.15030711889 --0.424798972905 -1.16756486893 --0.424809828401 -1.18482288718 --0.424822106958 -1.20208156109 --0.424828827381 -1.22130054235 --0.424822583795 -1.24051788449 --0.424810253083 -1.25777640939 --0.424799360335 -1.27503457665 --0.424789875746 -1.29229214788 --0.424781881273 -1.30954957008 --0.424775339663 -1.32680645585 --0.424770206213 -1.34406331181 --0.424766562879 -1.36131981015 --0.424764357508 -1.37857630849 --0.424763575196 -1.39583256841 --0.424764275551 -1.41308903694 --0.42476644367 -1.43034538627 --0.424770049751 -1.44760206342 --0.424775116146 -1.46485871077 --0.424781605601 -1.48211577535 --0.424789555371 -1.49937298894 --0.424798950553 -1.51663073898 --0.424809828401 -1.53388872742 --0.424822106958 -1.55114740133 --0.424828849733 -1.5703663826 --0.424822606147 -1.58958372474 --0.424810230732 -1.60684221983 --0.424799360335 -1.6241004169 --0.424789898098 -1.64135801792 --0.424781881273 -1.65861541033 --0.424775339663 -1.6758723259 --0.424770228564 -1.69312915206 --0.424766562879 -1.71038559079 --0.424764357508 -1.72764214873 --0.424763597548 -1.74489843845 --0.424764253199 -1.76215487719 --0.424766421318 -1.77941122651 --0.424770049751 -1.79666787386 --0.424775116146 -1.81392452121 --0.424781605601 -1.83118161559 --0.424789555371 -1.84843879938 --0.424798950553 -1.86569654942 --0.424809828401 -1.88295456767 --0.424822106958 -1.90021324158 --0.424828827381 -1.91943222284 --0.424822583795 -1.93864956498 --0.424810230732 -1.95590808988 --0.424799360335 -1.97316625715 --0.424789920449 -1.99042382836 --0.424781881273 -2.00768128037 --0.424775317311 -2.02493822575 --0.424770206213 -2.04219502211 --0.424766562879 -2.05945146084 --0.424764357508 -2.07670801878 --0.424763575196 -2.0939642787 --0.424764275551 -2.11122071743 --0.42476644367 -2.12847709656 --0.424770049751 -2.1457337141 --0.424775116146 -2.16299033165 --0.424781605601 -2.18024742603 --0.424789577722 -2.19750463962 --0.424798972905 -2.21476244926 --0.424809828401 -2.23202043772 --0.424822106958 -2.24927908182 --0.424828827381 -2.26849806309 --0.424822583795 -2.28771537542 --0.424810253083 -2.30497390032 --0.424799382686 -2.32223212719 --0.424789898098 -2.33948975802 --0.424781881273 -2.35674715042 --0.424775339663 -2.37400400639 --0.424770206213 -2.39126086235 --0.424766540527 -2.40851736069 --0.424764357508 -2.42577385902 --0.424763597548 -2.44303011894 --0.424764297903 -2.46028661728 --0.424766466021 -2.4775429368 --0.424770049751 -2.49479961396 --0.424775116146 -2.5120562315 --0.424781605601 -2.52931326628 --0.424789555371 -2.54657047987 --0.424798950553 -2.5638282299 --0.424809828401 -2.58108627796 --0.424822106958 -2.59834498167 --0.424828827381 -2.61756390333 --0.424822583795 -2.63678121567 --0.424810253083 -2.65403980017 --0.424799360335 -2.67129802704 --0.424789898098 -2.68855559826 --0.424781881273 -2.70581293106 --0.424775317311 -2.72306978703 --0.424770206213 -2.74032664299 --0.424766562879 -2.75758314133 --0.424764357508 -2.77483969927 --0.424763575196 -2.79209595919 --0.424764297903 -2.80935245752 --0.424766466021 -2.82660883665 --0.424770049751 -2.8438654542 --0.424775116146 -2.86112213135 --0.424781605601 -2.87837922573 --0.424789555371 -2.89563643932 --0.424798950553 -2.91289418935 --0.424809828401 -2.93015211821 --0.424822106958 -2.94741076231 --0.424828827381 -2.96662980318 --0.424822583795 -2.98584717512 --0.424810253083 -3.00310564041 --0.424799382686 -3.02036380768 --0.424789920449 -3.0376213789 --0.424781903624 -3.05487883091 --0.424775339663 -3.07213580608 --0.424770206213 -3.08939260244 --0.424766562879 -3.10664898157 --0.424764379859 -3.12390547991 --0.4247636199 -3.14116177161 --0.424764297903 --3.12476700544 --0.42476644367 --3.10751062632 --0.424770049751 --3.09025400877 --0.424775116146 --3.07299733162 --0.424781605601 --3.05574023723 --0.424789577722 --3.03848302364 --0.424798972905 --3.02122527361 --0.424809828401 --3.00396734476 --0.424822106958 --2.98670870066 --0.424828827381 --2.96748965979 --0.424822583795 --2.94827228785 --0.424810230732 --2.93101382256 --0.424799315631 --2.91375565529 --0.424789875746 --2.89649808407 --0.424781881273 --2.87924069166 --0.424775317311 --2.86198371649 --0.424770228564 --2.84472686052 --0.424766585231 --2.82747042179 --0.424764357508 --2.81021386385 --0.424763575196 --2.79295760393 --0.424764275551 --2.7757011652 --0.42476644367 --2.75844484568 --0.424770049751 --2.74118822813 --0.424775116146 --2.72393155098 --0.424781605601 --2.7066744566 --0.424789555371 --2.689417243 --0.424798950553 --2.67215949297 --0.424809828401 --2.65490150452 --0.424822106958 --2.63764280081 --0.424828827381 --2.61842381954 --0.424822583795 --2.59920650721 --0.424810230732 --2.58194798231 --0.424799315631 --2.56468981504 --0.424789875746 --2.54743224382 --0.424781881273 --2.53017479181 --0.424775317311 --2.51291787624 --0.424770206213 --2.49566102028 --0.424766562879 --2.47840452194 --0.424764379859 --2.46114802361 --0.424763597548 --2.44389176369 --0.424764297903 --2.42663532495 --0.424766466021 --2.40937900543 --0.424770049751 --2.39212226868 --0.424775116146 --2.37486565113 --0.424781605601 --2.35760861635 --0.424789555371 --2.34035140276 --0.424798950553 --2.32309365273 --0.424809828401 --2.30583560467 --0.424822106958 --2.28857690096 --0.424828827381 --2.2693579793 --0.424822583795 --2.25014066696 --0.424810230732 --2.23288214207 --0.424799337983 --2.21562391519 --0.424789898098 --2.19836628437 --0.424781881273 --2.18110895157 --0.424775317311 --2.1638520956 --0.424770228564 --2.14659523964 --0.424766585231 --2.1293387413 --0.424764357508 --2.11208218336 --0.424763575196 --2.09482592345 --0.424764297903 --2.07756948471 --0.424766466021 --2.06031316518 --0.424770049751 --2.04305648803 --0.424775116146 --2.02579975128 --0.424781605601 --2.0085426867 --0.424789577722 --1.99128553271 --0.424798972905 --1.97402778268 --0.424809828401 --1.95676979422 --0.424822106958 --1.93951112032 --0.424828827381 --1.92029213905 --0.424822583795 --1.90107479692 --0.424810253083 --1.88381630183 --0.424799360335 --1.86655810475 --0.424789875746 --1.84930047393 --0.424781881273 --1.83204308152 --0.424775339663 --1.81478619575 --0.424770206213 --1.79752936959 --0.424766562879 --1.78027290106 --0.424764357508 --1.76301634312 --0.424763575196 --1.7457600832 --0.424764275551 --1.72850361467 --0.42476644367 --1.71124726534 --0.424770049751 --1.69399061799 --0.424775116146 --1.67673394084 --0.424781605601 --1.65947687626 --0.424789555371 --1.64221969247 --0.424798950553 --1.62496191264 --0.424809828401 --1.60770392418 --0.424822106958 --1.59044528008 --0.424828849733 --1.57122629881 --0.424822606147 --1.55200895667 --0.424810230732 --1.53475043178 --0.424799360335 --1.5174922049 --0.424789898098 --1.50023463369 --0.424781881273 --1.48297724128 --0.424775339663 --1.46572032571 --0.424770228564 --1.44846349955 --0.424766562879 --1.43120703101 --0.424764357508 --1.41395050287 --0.424763597548 --1.39669421315 --0.424764253199 --1.37943777442 --0.424766421318 --1.36218142509 --0.424770049751 --1.34492474794 --0.424775116146 --1.3276681304 --0.424781605601 --1.31041106581 --0.424789555371 --1.29315385222 --0.424798950553 --1.27589610219 --0.424809828401 --1.25863808393 --0.424822106958 --1.24137941003 --0.424828827381 --1.22216042876 --0.424822583795 --1.20294308662 --0.424810230732 --1.18568459153 --0.424799360335 --1.16842639446 --0.424789920449 --1.15116879344 --0.424781881273 --1.13391140103 --0.424775317311 --1.11665451527 --0.424770206213 --1.0993976593 --0.424766562879 --1.08214119077 --0.424764357508 --1.06488466263 --0.424763575196 --1.0476283431 --0.424764275551 --1.03037187457 --0.42476644367 --1.01311555505 --0.424770049751 --0.9958589077 --0.424775116146 --0.97860224545 --0.424781605601 --0.961345165968 --0.424789577722 --0.944087982178 --0.424798972905 --0.926830202341 --0.424809828401 --0.909572213888 --0.424822106958 --0.892313569784 --0.424828827381 --0.873094588518 --0.424822583795 --0.85387724638 --0.424810253083 --0.836618736387 --0.424799382686 --0.819360539317 --0.424789898098 --0.802102938294 --0.424781881273 --0.784845545888 --0.424775339663 --0.767588660121 --0.424770206213 --0.750331833959 --0.424766540527 --0.733075350523 --0.424764357508 --0.715818807483 --0.424763597548 --0.698562517762 --0.424764297903 --0.681306034327 --0.424766466021 --0.664049714804 --0.424770049751 --0.646793067456 --0.424775116146 --0.629536405206 --0.424781605601 --0.612279325724 --0.424789555371 --0.595022127033 --0.424798950553 --0.577764391899 --0.424809828401 --0.560506388545 --0.424822106958 --0.543247714639 --0.424828827381 --0.524028733372 --0.424822583795 --0.504811391234 --0.424810253083 --0.487552881241 --0.424799360335 --0.470294676721 --0.424789898098 --0.4530370906 --0.424781881273 --0.435779698193 --0.424775317311 --0.418522797525 --0.424770206213 --0.401265949011 --0.424766562879 --0.384009480476 --0.424764357508 --0.366752944887 --0.424763575196 --0.349496670067 --0.424764297903 --0.332240216434 --0.424766466021 --0.314983867109 --0.424770049751 --0.29772721231 --0.424775116146 --0.280470564962 --0.424781605601 --0.26321349293 --0.424789555371 --0.245956286788 --0.424798950553 --0.228698529303 --0.424809828401 --0.211440529674 --0.424822106958 --0.194181852042 --0.424828827381 --0.174962874501 --0.407470025122 --0.15573849529 --0.407458133996 --0.138480007648 --0.407447651029 --0.121221827343 --0.407438546419 --0.103964271024 --0.407430820167 --0.0867069009691 --0.407424487173 --0.0694500254467 --0.407419562339 --0.0521932132542 --0.407416045666 --0.0349367726594 --0.407413944602 --0.017680269666 --0.407413244247 --0.000424014870077 --0.407413907349 -0.0168324224651 --0.407415948808 -0.0340887359343 --0.407419405878 -0.0513453576714 --0.407424293459 -0.0686019798741 --0.407430537045 -0.0858590286225 --0.407438218593 -0.1031162031 --0.407447271049 -0.120373928919 --0.407457731664 -0.137631896883 --0.407469570637 -0.154890544713 --0.407476045191 -0.174109779298 --0.407470025122 -0.193327359855 --0.407458133996 -0.210585843772 --0.407447628677 -0.227844022214 --0.407438524067 -0.245101582259 --0.407430820167 -0.262358948589 --0.407424487173 -0.279615819454 --0.407419584691 -0.296872638166 --0.407416068017 -0.314129084349 --0.40741392225 -0.331385582686 --0.407413199544 -0.348641827703 --0.407413884997 -0.365898266435 --0.40741597116 -0.383154593408 --0.40741942823 -0.400411225855 --0.407424293459 -0.417667835951 --0.407430559397 -0.434924870729 --0.407438240945 -0.452182047069 --0.407447271049 -0.469439774752 --0.407457731664 -0.486697755754 --0.407469570637 -0.503956422209 --0.407476045191 -0.523175641894 --0.407470025122 -0.542393192649 --0.407458133996 -0.55965167284 --0.407447628677 -0.576909869909 --0.407438524067 -0.594167441129 --0.407430820167 -0.611424788833 --0.407424487173 -0.628681659699 --0.407419562339 -0.645938500762 --0.407416045666 -0.663194939494 --0.407413944602 -0.68045142293 --0.407413221896 -0.697707682848 --0.407413884997 -0.71496412158 --0.407415948808 -0.732220426202 --0.407419405878 -0.749477058649 --0.407424293459 -0.766733691096 --0.407430559397 -0.783990740776 --0.407438240945 -0.801247909665 --0.407447271049 -0.818505614996 --0.407457731664 -0.835763588548 --0.407469570637 -0.853022247553 --0.407476045191 -0.87224149704 --0.407470025122 -0.891459092498 --0.407458133996 -0.908717557788 --0.407447628677 -0.925975710153 --0.407438524067 -0.943233281374 --0.407430797815 -0.960490658879 --0.407424464822 -0.977747529745 --0.407419584691 -0.995004355905 --0.407416068017 -1.01226079464 --0.40741392225 -1.02951729298 --0.407413199544 -1.04677355289 --0.407413884997 -1.06402999163 --0.407415948808 -1.08128628135 --0.407419405878 -1.09854289889 --0.407424293459 -1.11579954624 --0.407430537045 -1.13305661082 --0.407438218593 -1.15031376481 --0.407447271049 -1.16757148504 --0.407457731664 -1.1848294735 --0.407469570637 -1.2020881176 --0.407476045191 -1.22130733729 --0.407470025122 -1.24052491784 --0.407458133996 -1.25778341293 --0.407447628677 -1.2750415802 --0.407438501716 -1.29229915142 --0.407430797815 -1.30955651402 --0.407424487173 -1.32681336999 --0.407419562339 -1.34407019615 --0.407416045666 -1.36132666468 --0.40741392225 -1.37858316303 --0.407413177192 -1.39583939314 --0.407413817942 -1.41309583187 --0.407415904105 -1.43035215139 --0.407419405878 -1.44760879874 --0.407424293459 -1.46486541629 --0.407430559397 -1.48212245107 --0.407438218593 -1.49937963486 --0.407447248697 -1.51663735509 --0.407457731664 -1.53389531374 --0.407469570637 -1.55115395784 --0.407476067543 -1.57037320733 --0.407470047474 -1.58959078789 --0.407458133996 -1.60684925318 --0.407447651029 -1.62410742045 --0.407438524067 -1.64136496186 --0.407430820167 -1.65862235427 --0.407424509525 -1.67587924003 --0.407419584691 -1.6931360364 --0.407416068017 -1.71039247513 --0.407413944602 -1.72764900327 --0.407413199544 -1.74490526318 --0.407413817942 -1.76216167211 --0.407415926456 -1.77941796184 --0.40741942823 -1.79667457938 --0.407424293459 -1.81393122673 --0.407430559397 -1.83118829131 --0.407438240945 -1.8484454453 --0.407447293401 -1.86570316553 --0.407457754016 -1.88296115398 --0.407469570637 -1.90021979809 --0.407476045191 -1.91943901777 --0.407470025122 -1.93865659833 --0.407458133996 -1.95591509342 --0.407447651029 -1.97317326069 --0.407438546419 -1.99043083191 --0.407430797815 -2.00768825412 --0.407424464822 -2.02494513989 --0.407419562339 -2.04220187664 --0.407416068017 -2.05945825577 --0.407413944602 -2.07671481371 --0.407413199544 -2.09397107363 --0.407413884997 -2.11122751236 --0.407415948808 -2.12848383188 --0.407419405878 -2.14574038982 --0.407424293459 -2.16299706697 --0.407430559397 -2.18025416136 --0.407438240945 -2.19751131534 --0.407447271049 -2.21476906538 --0.407457731664 -2.23202699423 --0.407469570637 -2.24928563833 --0.407476045191 -2.26850491762 --0.407470025122 -2.28772246837 --0.407458133996 -2.30498093367 --0.407447651029 -2.32223916054 --0.407438524067 -2.33949673176 --0.407430820167 -2.35675406456 --0.407424509525 -2.37401092052 --0.407419562339 -2.39126777649 --0.407416023314 -2.40852427482 --0.40741392225 -2.42578071356 --0.407413199544 -2.44303691387 --0.407413862646 -2.4602933526 --0.407415948808 -2.47754967213 --0.407419405878 -2.49480634928 --0.407424293459 -2.51206296682 --0.407430559397 -2.529319942 --0.407438240945 -2.54657709599 --0.407447271049 -2.56383484602 --0.407457731664 -2.58109283447 --0.407469570637 -2.59835147858 --0.407476045191 -2.61757069826 --0.407470025122 -2.63678830862 --0.407458133996 -2.65404683351 --0.407447651029 -2.67130500078 --0.407438546419 -2.6885625124 --0.407430820167 -2.7058198452 --0.407424487173 -2.72307670117 --0.407419562339 -2.74033355713 --0.407416045666 -2.75759005547 --0.40741392225 -2.7748465538 --0.407413199544 -2.79210281372 --0.407413884997 -2.80935925245 --0.40741597116 -2.82661557198 --0.40741942823 -2.84387218952 --0.407424293459 -2.86112880707 --0.407430559397 -2.87838590145 --0.407438240945 -2.89564305544 --0.407447271049 -2.91290074587 --0.407457731664 -2.93015873432 --0.407469570637 -2.94741737843 --0.407476045191 -2.96663659811 --0.407470025122 -2.98585414886 --0.407458133996 -3.00311261415 --0.407447651029 -3.02037078142 --0.407438546419 -3.03762835264 --0.407430820167 -3.05488580465 --0.407424487173 -3.07214272022 --0.407419562339 -3.08939945698 --0.407416045666 -3.10665583611 --0.407413944602 -3.12391233444 --0.407413244247 -3.14116862614 --0.407413907349 --3.12476021051 --0.407415948808 --3.10750389099 --0.407419405878 --3.09024727344 --0.407424293459 --3.0729906559 --0.407430537045 --3.05573362112 --0.407438218593 --3.03847640753 --0.407447271049 --3.02121865749 --0.407457731664 --3.00396072864 --0.407469570637 --2.98670208454 --0.407476045191 --2.96748286486 --0.407470025122 --2.9482653141 --0.407458133996 --2.93100684881 --0.407447628677 --2.91374868154 --0.407438524067 --2.89649111032 --0.407430820167 --2.87923371792 --0.407424487173 --2.86197680235 --0.407419584691 --2.84472000599 --0.407416068017 --2.82746362686 --0.40741392225 --2.81020706892 --0.407413199544 --2.792950809 --0.407413884997 --2.77569442988 --0.40741597116 --2.75843811035 --0.40741942823 --2.74118149281 --0.407424293459 --2.72392487526 --0.407430559397 --2.70666778087 --0.407438240945 --2.68941056728 --0.407447271049 --2.67215287685 --0.407457731664 --2.654894948 --0.407469570637 --2.6376362443 --0.407476045191 --2.61841696501 --0.407470025122 --2.59919941425 --0.407458133996 --2.58194094896 --0.407447628677 --2.56468278169 --0.407438524067 --2.54742521047 --0.407430820167 --2.53016781807 --0.407424487173 --2.5129109621 --0.407419562339 --2.49565410614 --0.407416045666 --2.47839766741 --0.407413944602 --2.46114122868 --0.407413221896 --2.44388496876 --0.407413884997 --2.42662853002 --0.407415948808 --2.4093722105 --0.407419405878 --2.39211553335 --0.407424293459 --2.3748589158 --0.407430559397 --2.35760194063 --0.407438240945 --2.34034478665 --0.407447271049 --2.32308703661 --0.407457731664 --2.30582904816 --0.407469570637 --2.28857040405 --0.407476045191 --2.26935118437 --0.407470025122 --2.25013357401 --0.407458133996 --2.23287504912 --0.407447628677 --2.21561688185 --0.407438524067 --2.19835937023 --0.407430797815 --2.18110203743 --0.407424464822 --2.16384518146 --0.407419584691 --2.1465883255 --0.407416068017 --2.12933182717 --0.40741392225 --2.11207532883 --0.407413199544 --2.09481906891 --0.407413884997 --2.07756263018 --0.407415948808 --2.06030637026 --0.407419405878 --2.04304975271 --0.407424293459 --2.02579307556 --0.407430537045 --2.00853604078 --0.407438218593 --1.99127888679 --0.407447271049 --1.97402116656 --0.407457731664 --1.95676320791 --0.407469570637 --1.93950456381 --0.407476045191 --1.92028531432 --0.407470025122 --1.90106770396 --0.407458133996 --1.88380923867 --0.407447628677 --1.8665510714 --0.407438501716 --1.84929350018 --0.407430797815 --1.83203613758 --0.407424487173 --1.81477928161 --0.407419562339 --1.79752248526 --0.407416045666 --1.78026604652 --0.40741392225 --1.76300951839 --0.407413177192 --1.74575325847 --0.407413817942 --1.72849681973 --0.407415904105 --1.71124050021 --0.407419405878 --1.69398391247 --0.407424293459 --1.67672729492 --0.407430559397 --1.65947023034 --0.407438218593 --1.64221307635 --0.407447248697 --1.62495532632 --0.407457731664 --1.60769733786 --0.407469570637 --1.59043869376 --0.407476067543 --1.57121947408 --0.407470047474 --1.55200192332 --0.407458133996 --1.53474342823 --0.407447651029 --1.51748523116 --0.407438524067 --1.50022765994 --0.407430820167 --1.48297026754 --0.407424509525 --1.46571338177 --0.407419584691 --1.44845658541 --0.407416068017 --1.43120014667 --0.407413944602 --1.41394367814 --0.407413199544 --1.39668744803 --0.407413817942 --1.37943100929 --0.407415926456 --1.36217468977 --0.40741942823 --1.34491804242 --0.407424293459 --1.32766142488 --0.407430559397 --1.31040439009 --0.407438240945 --1.29314720631 --0.407447293401 --1.27588948608 --0.407457754016 --1.25863152742 --0.407469570637 --1.24137288332 --0.407476045191 --1.22215363383 --0.407470025122 --1.20293602347 --0.407458133996 --1.18567752838 --0.407447651029 --1.16841936111 --0.407438546419 --1.15116181969 --0.407430797815 --1.13390445709 --0.407424464822 --1.11664757132 --0.407419562339 --1.09939077496 --0.407416068017 --1.08213436604 --0.407413944602 --1.0648778379 --0.407413199544 --1.04762154818 --0.407413884997 --1.03036510944 --0.407415948808 --1.01310878992 --0.407419405878 --0.995852187277 --0.407424293459 --0.978595554829 --0.407430559397 --0.961338490248 --0.407438240945 --0.944081351161 --0.407447271049 --0.926823630929 --0.407457731664 --0.909565657377 --0.407469570637 --0.892307013273 --0.407476045191 --0.873087793588 --0.407470025122 --0.853870198131 --0.407458133996 --0.836611703038 --0.407447651029 --0.819353535772 --0.407438524067 --0.802095964551 --0.407430820167 --0.784838601947 --0.407424509525 --0.767581745982 --0.407419562339 --0.750324949622 --0.407416023314 --0.733068495989 --0.40741392225 --0.71581196785 --0.407413199544 --0.698555707932 --0.407413862646 --0.681299269199 --0.407415948808 --0.664042979479 --0.407419405878 --0.646786361933 --0.407424293459 --0.629529729486 --0.407430559397 --0.612272664905 --0.407438240945 --0.595015496016 --0.407447271049 --0.577757790685 --0.407457731664 --0.560499817133 --0.407469570637 --0.543241173029 --0.407476045191 --0.524021923542 --0.407470025122 --0.504804328084 --0.407458133996 --0.487545855343 --0.407447651029 --0.470287680626 --0.407438546419 --0.453030116856 --0.407430820167 --0.435772746801 --0.407424487173 --0.418515883386 --0.407419562339 --0.401259064674 --0.407416045666 --0.384002618492 --0.40741392225 --0.366746112704 --0.407413199544 --0.349489867687 --0.407413884997 --0.332233443856 --0.40741597116 --0.314977116883 --0.40741942823 --0.297720499337 --0.407424293459 --0.28046388179 --0.407430559397 --0.26320682466 --0.407438240945 --0.245949648321 --0.407447271049 --0.228691920638 --0.407457731664 --0.211433947086 --0.407469570637 --0.194175299257 --0.407476045191 --0.174956072121 --0.390100173652 --0.155731402337 --0.390088751912 --0.138472940773 --0.390078656375 --0.121214784682 --0.390069887042 --0.103957260027 --0.390062443912 --0.0866999141872 --0.390056371689 --0.0694430666044 --0.390051662922 --0.0521862860769 --0.390048250556 --0.0349298720248 --0.390046201646 --0.0176733972039 --0.390045538544 --0.000417170813305 --0.390046194196 -0.0168392383493 --0.39004817605 -0.0340955238789 --0.39005150646 -0.0513521190733 --0.390056200326 -0.068608712405 --0.390062205494 -0.0858657322824 --0.39006960392 -0.103122880682 --0.390078321099 -0.120380578563 --0.390088379383 -0.137638520449 --0.390099734068 -0.154897142201 --0.390105940402 -0.174116626382 --0.390100151301 -0.193334460259 --0.390088707209 -0.210592914372 --0.390078634024 -0.227851059287 --0.390069887042 -0.245108585805 --0.390062466264 -0.262365929783 --0.390056371689 -0.279622770846 --0.39005164057 -0.296879559755 --0.390048250556 -0.314135983586 --0.390046201646 -0.331392452121 --0.390045538544 -0.348648682237 --0.390046194196 -0.365905098617 --0.390048198402 -0.383161388338 --0.390051528812 -0.400417983532 --0.390056200326 -0.417674563825 --0.390062227845 -0.434931568801 --0.390069626272 -0.452188715339 --0.390078298747 -0.469446413219 --0.390088334679 -0.486704356968 --0.390099734068 -0.503962993621 --0.390105962754 -0.523182466626 --0.390100173652 -0.542400285602 --0.390088751912 -0.559658750892 --0.390078656375 -0.576916918158 --0.390069887042 -0.594174459576 --0.390062481165 -0.611431792378 --0.39005638659 -0.628688633442 --0.39005164057 -0.645945429802 --0.390048250556 -0.663201838732 --0.390046201646 -0.680458292365 --0.390045538544 -0.697714537382 --0.390046194196 -0.714970946312 --0.39004817605 -0.732227221131 --0.39005150646 -0.749483808875 --0.390056200326 -0.76674041152 --0.390062227845 -0.783997446299 --0.390069626272 -0.801254570484 --0.390078298747 -0.818512260914 --0.390088357031 -0.835770219565 --0.39009975642 -0.853028833866 --0.390105962754 -0.872248306871 --0.390100173652 -0.891466140747 --0.390088751912 -0.908724606037 --0.390078656375 -0.925982758403 --0.390069887042 -0.94324028492 --0.390062443912 -0.960497632623 --0.390056349337 -0.977754473686 --0.39005164057 -0.995011284947 --0.390048250556 -1.01226770878 --0.390046201646 -1.02952417731 --0.390045538544 -1.04678040743 --0.390046194196 -1.06403678656 --0.39004817605 -1.08129304647 --0.39005150646 -1.09854966402 --0.390056200326 -1.11580628157 --0.390062205494 -1.13306328654 --0.39006960392 -1.15032041073 --0.390078298747 -1.16757813096 --0.390088357031 -1.18483608961 --0.39009975642 -1.20209467411 --0.390105962754 -1.22131416201 --0.390100173652 -1.24053201079 --0.390088751912 -1.25779047609 --0.390078656375 -1.27504861355 --0.390069887042 -1.29230615497 --0.390062443912 -1.30956351757 --0.390056349337 -1.32682034373 --0.39005164057 -1.34407711029 --0.390048250556 -1.36133354902 --0.390046201646 -1.37859001756 --0.390045516193 -1.39584621787 --0.390046149492 -1.4131026566 --0.390048131347 -1.43035894632 --0.390051461756 -1.44761553407 --0.390056177974 -1.46487212181 --0.390062227845 -1.48212915659 --0.39006960392 -1.49938631058 --0.390078298747 -1.516644001 --0.390088357031 -1.53390192985 --0.390099734068 -1.55116054416 --0.390105962754 -1.57038006187 --0.390100151301 -1.58959788084 --0.390088729561 -1.60685631633 --0.390078656375 -1.62411445379 --0.390069887042 -1.64137196541 --0.390062466264 -1.65862932801 --0.39005639404 -1.67588618398 --0.390051662922 -1.69314298034 --0.390048272908 -1.71039938927 --0.390046223998 -1.7276558578 --0.390045516193 -1.74491208792 --0.390046149492 -1.76216846704 --0.39004817605 -1.77942475676 --0.390051528812 -1.79668137431 --0.390056200326 -1.81393796206 --0.390062227845 -1.83119496703 --0.390069626272 -1.84845209121 --0.390078321099 -1.86570981145 --0.390088379383 -1.8829677999 --0.39009975642 -1.90022641421 --0.390105962754 -1.91944587231 --0.390100173652 -1.93866372109 --0.390088729561 -1.95592218638 --0.390078634024 -1.97318032384 --0.390069887042 -1.99043786526 --0.390062443912 -2.00769522786 --0.390056349337 -2.02495205402 --0.39005164057 -2.04220879078 --0.390048272908 -2.0594651699 --0.390046223998 -2.07672166824 --0.390045538544 -2.09397792816 --0.390046194196 -2.11123436689 --0.39004817605 -2.12849062681 --0.39005150646 -2.14574718475 --0.390056200326 -2.1630038619 --0.390062227845 -2.18026089668 --0.390069626272 -2.19751799106 --0.390078298747 -2.21477568149 --0.390088357031 -2.23203361034 --0.39009975642 -2.24929225445 --0.390105962754 -2.26851177216 --0.390100173652 -2.28772962093 --0.390088751912 -2.30498802662 --0.390078656375 -2.32224613428 --0.390069887042 -2.3395037055 --0.390062466264 -2.3567610383 --0.39005639404 -2.37401789427 --0.390051662922 -2.39127469063 --0.390048250556 -2.40853112936 --0.390046201646 -2.4257875681 --0.390045516193 -2.4430437088 --0.390046171844 -2.46030014753 --0.39004817605 -2.47755646705 --0.39005150646 -2.4948130846 --0.390056200326 -2.51206970215 --0.390062227845 -2.52932667732 --0.390069626272 -2.5465837717 --0.390078298747 -2.56384146213 --0.390088357031 -2.58109939098 --0.39009975642 -2.59835803509 --0.390105962754 -2.61757755279 --0.390100173652 -2.63679540157 --0.390088751912 -2.65405386686 --0.390078656375 -2.67131197453 --0.390069887042 -2.68856948614 --0.390062466264 -2.70582681894 --0.39005639404 -2.72308367491 --0.390051662922 -2.74034053087 --0.390048250556 -2.75759696961 --0.390046201646 -2.77485340834 --0.390045538544 -2.79210966826 --0.390046194196 -2.80936610699 --0.390048198402 -2.82662236691 --0.390051528812 -2.84387892484 --0.390056200326 -2.86113548278 --0.390062227845 -2.87839257717 --0.390069626272 -2.89564973116 --0.390078298747 -2.91290736198 --0.390088357031 -2.93016535044 --0.39009975642 -2.94742399454 --0.390105962754 -2.96664339304 --0.390100173652 -2.98586118221 --0.390088751912 -3.00311970711 --0.390078656375 -3.02037787438 --0.390069887042 -3.03763538599 --0.390062443912 -3.0548927784 --0.390056371689 -3.07214963436 --0.390051662922 -3.08940637111 --0.390048250556 -3.10666275024 --0.390046201646 -3.12391924858 --0.390045538544 -3.14117554028 --0.390046194196 --3.12475335598 --0.39004817605 --3.10749709606 --0.39005150646 --3.09024053812 --0.390056200326 --3.07298398018 --0.390062205494 --3.0557269454 --0.39006960392 --3.03846973181 --0.390078321099 --3.02121204138 --0.390088379383 --3.00395411253 --0.390099734068 --2.98669546843 --0.390105940402 --2.96747606993 --0.390100151301 --2.94825828075 --0.390088707209 --2.93099975586 --0.390078634024 --2.91374158859 --0.390069887042 --2.89648407698 --0.390062466264 --2.87922668457 --0.390056371689 --2.86196982861 --0.39005164057 --2.84471309185 --0.390048250556 --2.82745671272 --0.390046201646 --2.81020021439 --0.390045538544 --2.79294395447 --0.390046194196 --2.77568757534 --0.390048198402 --2.75843131542 --0.390051528812 --2.74117469788 --0.390056200326 --2.72391808033 --0.390062227845 --2.70666104555 --0.390069626272 --2.68940389157 --0.390078298747 --2.67214620113 --0.390088334679 --2.65488827229 --0.390099734068 --2.63762968779 --0.390105962754 --2.61841017008 --0.390100173652 --2.5991923213 --0.390088751912 --2.58193391561 --0.390078656375 --2.56467574835 --0.390069887042 --2.54741817713 --0.390062481165 --2.53016084433 --0.39005638659 --2.51290404797 --0.39005164057 --2.4956472516 --0.390048250556 --2.47839081287 --0.390046201646 --2.46113437414 --0.390045538544 --2.44387817383 --0.390046194196 --2.4266217351 --0.39004817605 --2.40936541557 --0.39005150646 --2.39210879803 --0.390056200326 --2.37485218048 --0.390062227845 --2.35759520531 --0.390069626272 --2.34033811092 --0.390078298747 --2.32308042049 --0.390088357031 --2.30582249164 --0.39009975642 --2.28856384754 --0.390105962754 --2.26934432983 --0.390100173652 --2.25012654066 --0.390088751912 --2.23286807537 --0.390078656375 --2.2156099081 --0.390069887042 --2.19835239649 --0.390062443912 --2.18109506369 --0.390056349337 --2.16383820772 --0.39005164057 --2.14658135176 --0.390048250556 --2.12932491303 --0.390046201646 --2.11206847429 --0.390045538544 --2.09481221437 --0.390046194196 --2.07755577564 --0.39004817605 --2.06029951573 --0.39005150646 --2.04304295778 --0.390056200326 --2.02578639984 --0.390062205494 --2.00852936506 --0.39006960392 --1.99127221108 --0.390078298747 --1.97401452064 --0.390088357031 --1.9567565918 --0.39009975642 --1.93949797749 --0.390105962754 --1.92027845979 --0.390100173652 --1.90106061101 --0.390088751912 --1.88380217553 --0.390078656375 --1.86654403806 --0.390069887042 --1.84928652644 --0.390062443912 --1.83202919364 --0.390056349337 --1.81477233768 --0.39005164057 --1.79751554132 --0.390048250556 --1.78025913238 --0.390046201646 --1.76300266385 --0.390045516193 --1.74574640393 --0.390046149492 --1.7284899652 --0.390048131347 --1.71123367548 --0.390051461756 --1.69397711754 --0.390056177974 --1.6767205596 --0.390062227845 --1.65946355462 --0.39006960392 --1.64220640063 --0.390078298747 --1.6249486804 --0.390088357031 --1.60769072175 --0.390099734068 --1.59043207765 --0.390105962754 --1.57121261954 --0.390100151301 --1.55199480057 --0.390088729561 --1.53473633528 --0.390078656375 --1.51747819781 --0.390069887042 --1.5002206564 --0.390062466264 --1.48296329379 --0.39005639404 --1.46570643783 --0.390051662922 --1.44844967127 --0.390048272908 --1.43119326234 --0.390046223998 --1.41393679381 --0.390045516193 --1.39668059349 --0.390046149492 --1.37942418456 --0.39004817605 --1.36216789484 --0.390051528812 --1.3449113071 --0.390056200326 --1.32765468955 --0.390062227845 --1.31039765477 --0.390069626272 --1.29314053059 --0.390078321099 --1.27588284015 --0.390088379383 --1.25862491131 --0.39009975642 --1.241366297 --0.390105962754 --1.2221467793 --0.390100173652 --1.20292893052 --0.390088729561 --1.18567049504 --0.390078634024 --1.16841232777 --0.390069887042 --1.15115481615 --0.390062443912 --1.13389748335 --0.390056349337 --1.11664059758 --0.39005164057 --1.09938383102 --0.390048272908 --1.0821274519 --0.390046223998 --1.06487098336 --0.390045538544 --1.04761472344 --0.390046194196 --1.03035828471 --0.39004817605 --1.01310199499 --0.39005150646 --0.995845437049 --0.390056200326 --0.978588834405 --0.390062227845 --0.961331799626 --0.390069626272 --0.944074675441 --0.390078298747 --0.926816985011 --0.390088357031 --0.909559026361 --0.39009975642 --0.892300412059 --0.390105962754 --0.873080953956 --0.390100173652 --0.853863090277 --0.390088751912 --0.836604639888 --0.390078656375 --0.819346517325 --0.390069887042 --0.802088961005 --0.390062466264 --0.784831613302 --0.39005639404 --0.767574772239 --0.390051662922 --0.75031799078 --0.390048250556 --0.73306158185 --0.390046201646 --0.715805098414 --0.390045516193 --0.698548868298 --0.390046171844 --0.681292459369 --0.39004817605 --0.664036184549 --0.39005150646 --0.646779596806 --0.390056200326 --0.629522994161 --0.390062227845 --0.612265944481 --0.390069626272 --0.595008805394 --0.390078298747 --0.577751129866 --0.390088357031 --0.560493186116 --0.39009975642 --0.543234571814 --0.390105962754 --0.524015083909 --0.390100173652 --0.504797250032 --0.390088751912 --0.487538792193 --0.390078656375 --0.470280632376 --0.390069887042 --0.453023098409 --0.390062466264 --0.435765758157 --0.39005639404 --0.418508924544 --0.390051662922 --0.401252135634 --0.390048250556 --0.383995711804 --0.390046201646 --0.366739243269 --0.390045538544 --0.349483020604 --0.390046194196 --0.332226611674 --0.390048198402 --0.314970329404 --0.390051528812 --0.29771373421 --0.390056200326 --0.280457139015 --0.390062227845 --0.263200119138 --0.390069626272 --0.245942972601 --0.390078298747 --0.22868527472 --0.390088357031 --0.211427327245 --0.39009975642 --0.194168709218 --0.390105962754 --0.174949228763 --0.372712209821 --0.155724260956 --0.372701242566 --0.138465832919 --0.372691556812 --0.121207708493 --0.372683137656 --0.103950209915 --0.372675999999 --0.0866928901523 --0.372670181095 --0.0694360677153 --0.372665636241 --0.0521793151274 --0.372662365436 --0.034922930412 --0.372660413385 --0.0176664849278 --0.372659765184 --0.000410287408155 --0.372660398483 -0.0168460933492 --0.372662328184 -0.0341023514048 --0.372665531933 -0.0513589186594 --0.372670032084 -0.0686154849827 --0.372675806284 -0.0858724787831 --0.372682884336 -0.103129595518 --0.372691251338 -0.120387267321 --0.372700899839 -0.137645192444 --0.372711762786 -0.154903780669 --0.372717730701 -0.174123510718 --0.372712187469 -0.193341597915 --0.372701197863 -0.210600018501 --0.37269153446 -0.227858137339 --0.372683137656 -0.245115637779 --0.372675999999 -0.26237295568 --0.372670158744 -0.279629774392 --0.37266561389 -0.296886533499 --0.372662365436 -0.314142920077 --0.372660413385 -0.331399358809 --0.372659765184 -0.348655566573 --0.372660398483 -0.365911960602 --0.372662328184 -0.383168213069 --0.372665531933 -0.400424771011 --0.372670009732 -0.417681328952 --0.372675783932 -0.434938311577 --0.372682884336 -0.452195443213 --0.372691206634 -0.469453126192 --0.372700832784 -0.486711025238 --0.372711762786 -0.503969602287 --0.372717738152 -0.523189336061 --0.372712172568 -0.542407438159 --0.372701220214 -0.559665888548 --0.372691556812 -0.57692399621 --0.372683137656 -0.594181492925 --0.372676014901 -0.611438825726 --0.372670173645 -0.628695636987 --0.37266561389 -0.645952373743 --0.372662365436 -0.663208752871 --0.372660413385 -0.680465221405 --0.372659765184 -0.69772143662 --0.372660398483 -0.714977800846 --0.372662328184 -0.732234045863 --0.372665531933 -0.749490603804 --0.372670009732 -0.766747191548 --0.372675783932 -0.784004196524 --0.372682884336 -0.801261290908 --0.372691206634 -0.818518966437 --0.372700855136 -0.835776895284 --0.372711785138 -0.853035464883 --0.372717738152 -0.872255176306 --0.37271219492 -0.891473263502 --0.372701242566 -0.908731713891 --0.37269153446 -0.925989851356 --0.372683115304 -0.94324734807 --0.372675999999 -0.960504665971 --0.372670158744 -0.977761477232 --0.372665636241 -0.995018243791 --0.372662387788 -1.01227462292 --0.372660413385 -1.02953106165 --0.372659765184 -1.04678726196 --0.372660398483 -1.06404364109 --0.372662328184 -1.08129990101 --0.372665531933 -1.09855645895 --0.372670009732 -1.11581304669 --0.372675783932 -1.13307005167 --0.372682884336 -1.15032714605 --0.372691206634 -1.16758480668 --0.372700855136 -1.18484273553 --0.372711785138 -1.20210132003 --0.372717738152 -1.22132104635 --0.37271219492 -1.24053913355 --0.372701242566 -1.25779759884 --0.372691556812 -1.2750557065 --0.372683137656 -1.29231318831 --0.372675999999 -1.30957052112 --0.372670158744 -1.32682731748 --0.372665636241 -1.34408405423 --0.372662387788 -1.36134046316 --0.372660413385 -1.37859690189 --0.372659765184 -1.39585310221 --0.372660398483 -1.41310951114 --0.372662305832 -1.43036574125 --0.372665487229 -1.44762229919 --0.37266998738 -1.46487885713 --0.372675783932 -1.48213586211 --0.372682884336 -1.4993930161 --0.372691228986 -1.51665070653 --0.372700855136 -1.53390860557 --0.372711762786 -1.55116716027 --0.372717738152 -1.5703869164 --0.372712172568 -1.5896050334 --0.372701220214 -1.60686343909 --0.37269153446 -1.62412151694 --0.372683115304 -1.64137902856 --0.372675999999 -1.65863636136 --0.372670181095 -1.67589318752 --0.372665658593 -1.69314995408 --0.372662387788 -1.71040633321 --0.372660413385 -1.72766277194 --0.372659765184 -1.74491894245 --0.372660398483 -1.76217532158 --0.372662328184 -1.7794316113 --0.372665531933 -1.79668819905 --0.372670032084 -1.81394475699 --0.372675806284 -1.83120170236 --0.372682884336 -1.84845879674 --0.372691206634 -1.86571648717 --0.372700855136 -1.88297444582 --0.372711785138 -1.90023306012 --0.372717753053 -1.91945278644 --0.372712209821 -1.93867087364 --0.372701220214 -1.95592930913 --0.37269153446 -1.97318741679 --0.372683137656 -1.9904448986 --0.372675999999 -2.0077022016 --0.372670158744 -2.02495902777 --0.372665636241 -2.04221576452 --0.372662387788 -2.05947214365 --0.372660413385 -2.07672864199 --0.372659765184 -2.0939848423 --0.372660398483 -2.11124122143 --0.372662328184 -2.12849748135 --0.372665531933 -2.14575403929 --0.372670009732 -2.16301059723 --0.372675783932 -2.1802675724 --0.372682884336 -2.19752466679 --0.372691206634 -2.21478235722 --0.372700855136 -2.23204028606 --0.372711785138 -2.24929887057 --0.372717753053 -2.26851862669 --0.372712209821 -2.28773671388 --0.372701242566 -2.30499511957 --0.372691556812 -2.32225322723 --0.372683137656 -2.33951073885 --0.372675999999 -2.35676801205 --0.372670181095 -2.37402486801 --0.372665658593 -2.39128160477 --0.372662387788 -2.4085379839 --0.372660413385 -2.42579448223 --0.372659765184 -2.44305062294 --0.372660398483 -2.46030700206 --0.372662328184 -2.47756326198 --0.372665531933 -2.49481981993 --0.372670032084 -2.51207643747 --0.372675806284 -2.52933341265 --0.372682884336 -2.54659050703 --0.372691206634 -2.56384819746 --0.372700855136 -2.58110612631 --0.372711785138 -2.59836471081 --0.372717738152 -2.61758440733 --0.37271219492 -2.63680255413 --0.372701242566 -2.65406095981 --0.372691556812 -2.67131900787 --0.372683137656 -2.6885765791 --0.372675999999 -2.7058339119 --0.372670181095 -2.72309070825 --0.372665636241 -2.74034750461 --0.372662365436 -2.75760388374 --0.372660413385 -2.77486026287 --0.372659765184 -2.79211652279 --0.372660398483 -2.80937296152 --0.372662328184 -2.82662916184 --0.372665531933 -2.84388571978 --0.372670009732 -2.86114227772 --0.372675783932 -2.87839931249 --0.372682884336 -2.89565646648 --0.372691206634 -2.9129140377 --0.372700855136 -2.93017196655 --0.37271180749 -2.94743061066 --0.372717775405 -2.96665030718 --0.372712209821 -2.98586839437 --0.372701242566 -3.00312685966 --0.372691556812 -3.02038496733 --0.372683137656 -3.03764241934 --0.372675999999 -3.05489975214 --0.372670181095 -3.0721566081 --0.372665636241 -3.08941334486 --0.372662365436 -3.10666966438 --0.372660413385 -3.12392616272 --0.372659765184 -3.14118245442 --0.372660398483 --3.12474650145 --0.372662328184 --3.10749030113 --0.372665531933 --3.09023374319 --0.372670032084 --3.07297718525 --0.372675806284 --3.05572015047 --0.372682884336 --3.03846299648 --0.372691251338 --3.02120542526 --0.372700899839 --3.00394749641 --0.372711762786 --2.98668885231 --0.372717730701 --2.96746915579 --0.372712187469 --2.94825106859 --0.372701197863 --2.9309926033 --0.37269153446 --2.91373449564 --0.372683137656 --2.89647704363 --0.372675999999 --2.87921971083 --0.372670158744 --2.86196285486 --0.37266561389 --2.8447061181 --0.372662365436 --2.82744973898 --0.372660413385 --2.81019324064 --0.372659765184 --2.79293704033 --0.372660398483 --2.7756806612 --0.372662328184 --2.75842440128 --0.372665531933 --2.74116784334 --0.372670009732 --2.7239112854 --0.372675783932 --2.70665431023 --0.372682884336 --2.68939721584 --0.372691206634 --2.67213952541 --0.372700832784 --2.65488159656 --0.372711762786 --2.63762307167 --0.372717738152 --2.61840331554 --0.372712172568 --2.59918522835 --0.372701220214 --2.58192682266 --0.372691556812 --2.5646686554 --0.372683137656 --2.54741114378 --0.372676014901 --2.53015381098 --0.372670173645 --2.51289701462 --0.37266561389 --2.49564033746 --0.372662365436 --2.47838389873 --0.372660413385 --2.4611274004 --0.372659765184 --2.44387125969 --0.372660398483 --2.42661488056 --0.372662328184 --2.40935862064 --0.372665531933 --2.3921020627 --0.372670009732 --2.37484544516 --0.372675783932 --2.35758846998 --0.372682884336 --2.3403313756 --0.372691206634 --2.32307368517 --0.372700855136 --2.30581581592 --0.372711785138 --2.28855723143 --0.372717738152 --2.2693374753 --0.37271219492 --2.2501193881 --0.372701242566 --2.23286098242 --0.37269153446 --2.21560287476 --0.372683115304 --2.19834530354 --0.372675999999 --2.18108797074 --0.372670158744 --2.16383117437 --0.372665636241 --2.14657437801 --0.372662387788 --2.12931799889 --0.372660413385 --2.11206161976 --0.372659765184 --2.09480535984 --0.372660398483 --2.07754892111 --0.372662328184 --2.0602927208 --0.372665531933 --2.04303616285 --0.372670009732 --2.02577960491 --0.372675783932 --2.00852262974 --0.372682884336 --1.99126550555 --0.372691206634 --1.97400781512 --0.372700855136 --1.95674991608 --0.372711785138 --1.93949133158 --0.372717738152 --1.92027157545 --0.37271219492 --1.90105348826 --0.372701242566 --1.88379508257 --0.372691556812 --1.86653697491 --0.372683137656 --1.84927946329 --0.372675999999 --1.83202216029 --0.372670158744 --1.81476533413 --0.372665636241 --1.79750856757 --0.372662387788 --1.78025218844 --0.372660413385 --1.76299574971 --0.372659765184 --1.7457395494 --0.372660398483 --1.72848314047 --0.372662305832 --1.71122688055 --0.372665487229 --1.69397032261 --0.37266998738 --1.67671376467 --0.372675783932 --1.6594567895 --0.372682884336 --1.64219966531 --0.372691228986 --1.62494200468 --0.372700855136 --1.60768407583 --0.372711762786 --1.59042546153 --0.372717738152 --1.57120573521 --0.372712172568 --1.55198764801 --0.372701220214 --1.53472921253 --0.37269153446 --1.51747110486 --0.372683115304 --1.50021362305 --0.372675999999 --1.48295629024 --0.372670181095 --1.46569943428 --0.372665658593 --1.44844269753 --0.372662387788 --1.4311863482 --0.372660413385 --1.41392987966 --0.372659765184 --1.39667367935 --0.372660398483 --1.37941733003 --0.372662328184 --1.36216107011 --0.372665531933 --1.34490451217 --0.372670032084 --1.32764792442 --0.372675806284 --1.31039091945 --0.372682884336 --1.29313382506 --0.372691206634 --1.27587613464 --0.372700855136 --1.25861820579 --0.372711785138 --1.24135962129 --0.372717753053 --1.22213989496 --0.372712209821 --1.20292180777 --0.372701220214 --1.18566340208 --0.37269153446 --1.16840526462 --0.372683137656 --1.151147753 --0.372675999999 --1.13389045 --0.372670158744 --1.11663362384 --0.372665636241 --1.09937688709 --0.372662387788 --1.08212050796 --0.372660413385 --1.06486406922 --0.372659765184 --1.0476078391 --0.372660398483 --1.03035143018 --0.372662328184 --1.01309520006 --0.372665531933 --0.995838627219 --0.372670009732 --0.978582039476 --0.372675783932 --0.961325064301 --0.372682884336 --0.944067955017 --0.372691206634 --0.926810279489 --0.372700855136 --0.90955235064 --0.372711785138 --0.892293766141 --0.372717753053 --0.873074054718 --0.372712209821 --0.853855952621 --0.372701242566 --0.836597532034 --0.372691556812 --0.819339439273 --0.372683137656 --0.802081927657 --0.372675999999 --0.784824609757 --0.372670181095 --0.767567768693 --0.372665658593 --0.750311017037 --0.372662387788 --0.733054637909 --0.372660413385 --0.715798169375 --0.372659765184 --0.698541983962 --0.372660398483 --0.681285604834 --0.372662328184 --0.664029330015 --0.372665531933 --0.646772786975 --0.372670032084 --0.629516229034 --0.372675806284 --0.612259209156 --0.372682884336 --0.595002099871 --0.372691206634 --0.577744439244 --0.372700855136 --0.560486510396 --0.372711785138 --0.543227925897 --0.372717738152 --0.524008199572 --0.37271219492 --0.504790119827 --0.372701242566 --0.48753169179 --0.372691556812 --0.470273561776 --0.372683137656 --0.453016057611 --0.372675999999 --0.43575873971 --0.372670181095 --0.418501935899 --0.372665636241 --0.401245169342 --0.372662365436 --0.383988767863 --0.372660413385 --0.366732336581 --0.372659765184 --0.349476136267 --0.372660398483 --0.332219742238 --0.372662328184 --0.314963489771 --0.372665531933 --0.297706924379 --0.372670009732 --0.280450366437 --0.372675783932 --0.263193376362 --0.372682884336 --0.245936255902 --0.372691206634 --0.228678587824 --0.372700855136 --0.211420666426 --0.37271180749 --0.194162078202 --0.372717775405 --0.174942344427 --0.355329342187 --0.155716568231 --0.355318836868 --0.138458169996 --0.355309568345 --0.12120007351 --0.355301506818 --0.103942602873 --0.355294682086 --0.0866853184998 --0.355289109051 --0.0694285277277 --0.355284750462 --0.0521718058735 --0.355281628668 --0.0349154528231 --0.355279780925 --0.0176590364426 --0.355279162526 --0.00040286965668 --0.355279736221 -0.0168534805998 --0.355281569064 -0.0341097088531 --0.355284631252 -0.0513662444428 --0.355288945138 -0.0686227818951 --0.355294495821 -0.0858797468245 --0.3553012833 -0.103136831895 --0.355309270322 -0.120394472033 --0.355318494141 -0.137652371079 --0.355328932405 -0.154910929501 --0.355334654451 -0.174130927771 --0.355329342187 -0.193349286914 --0.355318836868 -0.210607681424 --0.355309568345 -0.227865770459 --0.355301506818 -0.245123241097 --0.355294682086 -0.262380532921 --0.355289109051 -0.279637329281 --0.355284750462 -0.296894051135 --0.355281628668 -0.314150393009 --0.355279780925 -0.33140680939 --0.355279162526 -0.348662987351 --0.355279736221 -0.365919344127 --0.355281569064 -0.383175566793 --0.355284653604 -0.400432094932 --0.355288945138 -0.417688630522 --0.355294473469 -0.434945590794 --0.355301260948 -0.452202685177 --0.355309225619 -0.469460345805 --0.355318471789 -0.48671822995 --0.355328917503 -0.503976769745 --0.355334624648 -0.523196771741 --0.355329304934 -0.542415142059 --0.355318814516 -0.559673547744 --0.355309568345 -0.576931625604 --0.355301506818 -0.594189092517 --0.355294682086 -0.611446395517 --0.355289109051 -0.628703191877 --0.355284750462 -0.64595989883 --0.355281628668 -0.663216233253 --0.355279780925 -0.680472671985 --0.355279162526 -0.697728842497 --0.355279758573 -0.714985176921 --0.355281591415 -0.732241407037 --0.355284653604 -0.749497935176 --0.355288945138 -0.766754493117 --0.355294473469 -0.78401145339 --0.3553012833 -0.801268517971 --0.355309247971 -0.818526178599 --0.355318471789 -0.835784062743 --0.355328932405 -0.853042602539 --0.355334639549 -0.872262611985 --0.355329327285 -0.891480982304 --0.355318836868 -0.908739387989 --0.355309545994 -0.92599748075 --0.355301484466 -0.943254962564 --0.355294682086 -0.960512250662 --0.355289109051 -0.97776901722 --0.355284772813 -0.995025739074 --0.35528165102 -1.0122820735 --0.355279780925 -1.02953848243 --0.355279162526 -1.04679468274 --0.355279736221 -1.06405106187 --0.355281569064 -1.08130729198 --0.355284653604 -1.09856379032 --0.355288945138 -1.11582031846 --0.355294473469 -1.13307729363 --0.3553012833 -1.15033438802 --0.355309247971 -1.16759201884 --0.355318471789 -1.18484991789 --0.355328932405 -1.20210847258 --0.355334639549 -1.22132846713 --0.355329327285 -1.24054682255 --0.355318836868 -1.25780522824 --0.355309568345 -1.2750633359 --0.355301506818 -1.29232078791 --0.355294682086 -1.3095780611 --0.355289109051 -1.32683485746 --0.355284772813 -1.34409156442 --0.35528165102 -1.36134791374 --0.355279780925 -1.37860435247 --0.355279162526 -1.39586052299 --0.355279758573 -1.41311687231 --0.355281591415 -1.43037310243 --0.355284653604 -1.44762963057 --0.355288945138 -1.4648861587 --0.355294473469 -1.48214313388 --0.3553012833 -1.49940025806 --0.355309247971 -1.51665791869 --0.355318471789 -1.53391578794 --0.355328932405 -1.55117431283 --0.355334639549 -1.57039430738 --0.355329327285 -1.5896126926 --0.355318814516 -1.60687109828 --0.355309523642 -1.62412917614 --0.355301484466 -1.64138665795 --0.355294682086 -1.65864396096 --0.355289109051 -1.67590072751 --0.355284772813 -1.69315743447 --0.35528165102 -1.71041381359 --0.355279780925 -1.72767025232 --0.355279162526 -1.74492639303 --0.355279736221 -1.76218274236 --0.355281569064 -1.77943897247 --0.355284653604 -1.79669550061 --0.35528896749 -1.81395202875 --0.355294495821 -1.83120897412 --0.3553012833 -1.84846606851 --0.355309247971 -1.86572369933 --0.355318471789 -1.88298159838 --0.355328917503 -1.90024018288 --0.355334639549 -1.91946020722 --0.355329342187 -1.93867856264 --0.355318836868 -1.95593693853 --0.355309568345 -1.97319501639 --0.355301506818 -1.9904524684 --0.355294682086 -2.00770974159 --0.355289109051 -2.02496653796 --0.355284772813 -2.04222327471 --0.35528165102 -2.05947965383 --0.355279780925 -2.07673609257 --0.355279162526 -2.09399223327 --0.355279758573 -2.1112486124 --0.355281591415 -2.12850487232 --0.355284631252 -2.14576137066 --0.355288922786 -2.16301786899 --0.355294473469 -2.18027478456 --0.3553012833 -2.19753187895 --0.355309247971 -2.21478956938 --0.355318471789 -2.23204743862 --0.355328917503 -2.24930596352 --0.355334639549 -2.26852601766 --0.355329342187 -2.28774440289 --0.355318836868 -2.30500274897 --0.355309568345 -2.32226085663 --0.355301506818 -2.33951830864 --0.355294682086 -2.35677552223 --0.355289109051 -2.3740323782 --0.355284772813 -2.39128911495 --0.35528165102 -2.40854543447 --0.355279780925 -2.4258018732 --0.355279162526 -2.44305807352 --0.355279736221 -2.46031445265 --0.355281569064 -2.47757065296 --0.355284653604 -2.4948271513 --0.35528896749 -2.51208370924 --0.355294495821 -2.52934068442 --0.355301260948 -2.5465977788 --0.355309225619 -2.56385540962 --0.355318471789 -2.58111333847 --0.355328932405 -2.59837192297 --0.355334639549 -2.61759185791 --0.355329327285 -2.63681024313 --0.355318836868 -2.65406864881 --0.355309568345 -2.67132669687 --0.355301506818 -2.68858420849 --0.355294682086 -2.70584154129 --0.355289109051 -2.72309827805 --0.355284750462 -2.7403549552 --0.355281628668 -2.75761133432 --0.355279780925 -2.77486777305 --0.355279162526 -2.79212397337 --0.355279736221 -2.80938029289 --0.355281569064 -2.8266364336 --0.355284653604 -2.84389299155 --0.355288945138 -2.86114960909 --0.355294473469 -2.87840658426 --0.3553012833 -2.89566361904 --0.355309247971 -2.91292124987 --0.355318471789 -2.93017917871 --0.355328939855 -2.94743776321 --0.355334661901 -2.96665775776 --0.355329342187 -2.98587608337 --0.355318836868 -3.00313448906 --0.355309568345 -3.02039259672 --0.355301506818 -3.03765004873 --0.355294682086 -3.05490732193 --0.355289109051 -3.07216411829 --0.355284750462 -3.08942085504 --0.355281628668 -3.10667717457 --0.355279780925 -3.1239336133 --0.355279162526 -3.1411898454 --0.355279736221 --3.12473917008 --0.355281569064 --3.10748302936 --0.355284631252 --3.09022647142 --0.355288945138 --3.07296985388 --0.355294495821 --3.05571287871 --0.3553012833 --3.03845584393 --0.355309270322 --3.0211982131 --0.355318494141 --3.00394028425 --0.355328932405 --2.98668169975 --0.355334654451 --2.96746170521 --0.355329342187 --2.94824337959 --0.355318836868 --2.9309849739 --0.355309568345 --2.91372692585 --0.355301506818 --2.89646947384 --0.355294682086 --2.87921214104 --0.355289109051 --2.86195534468 --0.355284750462 --2.84469860792 --0.355281628668 --2.82744222879 --0.355279780925 --2.81018579006 --0.355279162526 --2.79292964935 --0.355279736221 --2.77567327022 --0.355281569064 --2.75841701031 --0.355284653604 --2.74116051197 --0.355288945138 --2.72390401363 --0.355294473469 --2.70664709806 --0.355301260948 --2.68939000368 --0.355309225619 --2.67213231325 --0.355318471789 --2.65487444401 --0.355328917503 --2.63761591911 --0.355334624648 --2.61839586496 --0.355329304934 --2.59917747974 --0.355318814516 --2.58191913366 --0.355309568345 --2.564661026 --0.355301506818 --2.54740357399 --0.355294682086 --2.53014630079 --0.355289109051 --2.51288944483 --0.355284750462 --2.49563276767 --0.355281628668 --2.47837644815 --0.355279780925 --2.46112000942 --0.355279162526 --2.44386386871 --0.355279758573 --2.42660748958 --0.355281591415 --2.40935122966 --0.355284653604 --2.39209473133 --0.355288945138 --2.37483817339 --0.355294473469 --2.35758119822 --0.3553012833 --2.34032410383 --0.355309247971 --2.32306647301 --0.355318471789 --2.30580866337 --0.355328932405 --2.28855013847 --0.355334639549 --2.26933008433 --0.355329327285 --2.2501116395 --0.355318836868 --2.23285323381 --0.355309545994 --2.21559518576 --0.355301484466 --2.19833767414 --0.355294682086 --2.18108034134 --0.355289109051 --2.16382360458 --0.355284772813 --2.14656692743 --0.35528165102 --2.12931054831 --0.355279780925 --2.11205416918 --0.355279162526 --2.09479796887 --0.355279736221 --2.07754158974 --0.355281569064 --2.06028544903 --0.355284653604 --2.04302889109 --0.355288945138 --2.02577227354 --0.355294473469 --2.00851532817 --0.3553012833 --1.99125826359 --0.355309247971 --1.97400060296 --0.355318471789 --1.95674273372 --0.355328932405 --1.93948417902 --0.355334639549 --1.92026415467 --0.355329327285 --1.90104579926 --0.355318836868 --1.88378742337 --0.355309568345 --1.86652931571 --0.355301506818 --1.8492718339 --0.355294682086 --1.8320145607 --0.355289109051 --1.81475776434 --0.355284772813 --1.79750105739 --0.35528165102 --1.78024470806 --0.355279780925 --1.76298826933 --0.355279162526 --1.74573212862 --0.355279758573 --1.7284757793 --0.355281591415 --1.71121954918 --0.355284653604 --1.69396302104 --0.355288945138 --1.6767064631 --0.355294473469 --1.65944948792 --0.3553012833 --1.64219242335 --0.355309247971 --1.62493479252 --0.355318471789 --1.60767689348 --0.355328932405 --1.59041833878 --0.355334639549 --1.57119831443 --0.355329327285 --1.55197995901 --0.355318814516 --1.53472155333 --0.355309523642 --1.51746347547 --0.355301484466 --1.50020602346 --0.355294682086 --1.48294872046 --0.355289109051 --1.46569192409 --0.355284772813 --1.44843518734 --0.35528165102 --1.43117886782 --0.355279780925 --1.41392245889 --0.355279162526 --1.39666625857 --0.355279736221 --1.37940993905 --0.355281569064 --1.36215370893 --0.355284653604 --1.34489715099 --0.35528896749 --1.32764062285 --0.355294495821 --1.31038367748 --0.3553012833 --1.2931265831 --0.355309247971 --1.27586892247 --0.355318471789 --1.25861102343 --0.355328917503 --1.24135243893 --0.355334639549 --1.22213247418 --0.355329342187 --1.20291411877 --0.355318836868 --1.18565571308 --0.355309568345 --1.16839763522 --0.355301506818 --1.15114015341 --0.355294682086 --1.13388288021 --0.355289109051 --1.11662608385 --0.355284772813 --1.0993693769 --0.35528165102 --1.08211302757 --0.355279780925 --1.06485658884 --0.355279162526 --1.04760041833 --0.355279758573 --1.030344069 --0.355281591415 --1.01308783889 --0.355284631252 --0.995831280949 --0.355288922786 --0.978574737906 --0.355294473469 --0.961317807436 --0.3553012833 --0.944060727954 --0.355309247971 --0.926803067327 --0.355318471789 --0.909545168281 --0.355328917503 --0.892286613583 --0.355334639549 --0.87306663394 --0.355329342187 --0.853848278522 --0.355318836868 --0.836589872837 --0.355309568345 --0.819331794977 --0.355301506818 --0.802074328065 --0.355294682086 --0.784817054868 --0.355289109051 --0.767560243607 --0.355284772813 --0.750303506851 --0.35528165102 --0.733047157526 --0.355279780925 --0.715790718794 --0.355279162526 --0.698534563184 --0.355279736221 --0.681278213859 --0.355281569064 --0.664021968842 --0.355284653604 --0.646765455604 --0.35528896749 --0.629508927465 --0.355294495821 --0.612251952291 --0.355301260948 --0.594994872808 --0.355309225619 --0.577737227082 --0.355318471789 --0.560479328036 --0.355328932405 --0.543220788241 --0.355334639549 --0.524000793696 --0.355329327285 --0.504782423377 --0.355318836868 --0.487524025142 --0.355309568345 --0.470265939832 --0.355301506818 --0.453008458018 --0.355294682086 --0.43575116992 --0.355289109051 --0.418494403362 --0.355284750462 --0.401237666607 --0.355281628668 --0.38398129493 --0.355279780925 --0.366724886 --0.355279162526 --0.34946872294 --0.355279736221 --0.332212366164 --0.355281569064 --0.314956136048 --0.355284653604 --0.297699607909 --0.355288945138 --0.28044307977 --0.355294473469 --0.263186112046 --0.3553012833 --0.245929017663 --0.355309247971 --0.228671375662 --0.355318471789 --0.211413487792 --0.355328939855 --0.19415492937 --0.355334661901 --0.174934923649 --0.337982997298 --0.155708745122 --0.337972976267 --0.138450380415 --0.337964139879 --0.121192319318 --0.33795645088 --0.103934878483 --0.337949946523 --0.0866776257753 --0.337944619357 --0.0694208685309 --0.337940461934 --0.052164176479 --0.337937474251 --0.0349078532309 --0.337935678661 --0.0176514668856 --0.337935090065 --0.00039533060044 --0.337935648859 -0.0168609891552 --0.337937384844 -0.034117186442 --0.337940312922 -0.0513736903667 --0.337944433093 -0.0686301942915 --0.337949745357 -0.0858871284872 --0.337956242264 -0.103144185618 --0.337963841856 -0.120401792228 --0.337972663343 -0.137659657746 --0.337982669473 -0.154918193817 --0.337988108397 -0.174138471484 --0.337982997298 -0.193357106298 --0.337972976267 -0.210615474731 --0.337964139879 -0.227873526514 --0.33795645088 -0.245130967349 --0.337949946523 -0.262388221919 --0.337944619357 -0.279644981027 --0.337940461934 -0.296901673079 --0.337937474251 -0.314157985151 --0.337935701013 -0.33141437918 --0.337935112417 -0.348670527339 --0.337935648859 -0.365926854312 --0.337937384844 -0.383183047176 --0.337940335274 -0.400439545512 --0.337944455445 -0.4176960513 --0.337949723005 -0.43495298177 --0.33795619756 -0.4522100389 --0.337963819504 -0.469467654824 --0.337972663343 -0.486725524068 --0.33798263222 -0.503984041512 --0.337988071144 -0.523204311728 --0.33798301965 -0.542422965169 --0.337972998619 -0.559681341052 --0.337964139879 -0.576939389109 --0.33795645088 -0.59419682622 --0.337949946523 -0.611454084516 --0.337944619357 -0.628710836172 --0.337940461934 -0.645967528224 --0.337937474251 -0.663223847747 --0.337935701013 -0.680480241776 --0.337935112417 -0.697736382484 --0.33793567121 -0.714992687106 --0.337937407196 -0.73224888742 --0.337940335274 -0.749505385757 --0.337944455445 -0.766761898994 --0.337949723005 -0.784018844366 --0.337956219912 -0.801275879145 --0.337963841856 -0.818533495068 --0.337972663343 -0.835791364312 --0.337982647121 -0.853049889207 --0.337988086045 -0.872270166874 --0.33798301965 -0.891488805413 --0.337972998619 -0.908747166395 --0.337964139879 -0.926005229354 --0.33795645088 -0.943262696266 --0.337949946523 -0.960519939661 --0.337944619357 -0.977776676416 --0.337940461934 -0.995033383369 --0.337937474251 -1.01228970289 --0.337935701013 -1.02954608202 --0.337935112417 -1.04680225253 --0.337935648859 -1.06405857205 --0.337937384844 -1.08131474257 --0.337940335274 -1.0985712409 --0.337944455445 -1.11582773924 --0.337949723005 -1.13308465481 --0.337956219912 -1.15034171939 --0.337963841856 -1.16759932041 --0.337972663343 -1.18485715985 --0.337982669473 -1.20211568475 --0.337988108397 -1.22133600712 --0.337982997298 -1.24055466056 --0.337972976267 -1.25781300664 --0.337964139879 -1.2750710845 --0.33795645088 -1.29232850671 --0.337949946523 -1.3095857501 --0.337944619357 -1.32684254646 --0.337940461934 -1.34409922361 --0.337937474251 -1.36135551333 --0.337935701013 -1.37861192226 --0.337935112417 -1.39586806297 --0.33793567121 -1.41312438249 --0.337937407196 -1.43038061261 --0.337940335274 -1.44763711095 --0.337944455445 -1.46489360929 --0.337949723005 -1.48215055466 --0.337956219912 -1.49940761924 --0.337963864207 -1.51666522026 --0.337972685695 -1.5339230597 --0.337982647121 -1.5511815846 --0.337988086045 -1.57040184736 --0.337982997298 -1.589620471 --0.337972953915 -1.60687884688 --0.337964117527 -1.62413692474 --0.33795645088 -1.64139437675 --0.337949946523 -1.65865164995 --0.337944619357 -1.67590838671 --0.337940461934 -1.69316506386 --0.337937474251 -1.71042141318 --0.337935678661 -1.72767782211 --0.337935090065 -1.74493396282 --0.337935648859 -1.76219025254 --0.337937384844 -1.77944642305 --0.337940335274 -1.79670292139 --0.337944455445 -1.81395941973 --0.337949723005 -1.8312163651 --0.337956219912 -1.84847342968 --0.337963841856 -1.8657310307 --0.337972663343 -1.88298889994 --0.33798263222 -1.90024745464 --0.337988071144 -1.91946774721 --0.33798301965 -1.93868637085 --0.337972998619 -1.95594471693 --0.337964139879 -1.97320276499 --0.33795645088 -1.990460217 --0.337949946523 -2.0077174902 --0.337944619357 -2.02497422695 --0.337940461934 -2.0422309041 --0.337937474251 -2.05948722363 --0.337935701013 -2.07674360275 --0.337935112417 -2.09399974346 --0.33793567121 -2.11125606298 --0.337937407196 -2.1285123229 --0.337940312922 -2.14576882124 --0.337944433093 -2.16302531957 --0.337949723005 -2.18028223514 --0.337956219912 -2.19753926992 --0.337963841856 -2.21479690075 --0.337972663343 -2.23205471039 --0.33798263222 -2.24931323528 --0.337988071144 -2.26853358745 --0.337982997298 -2.2877522707 --0.337972976267 -2.30501055718 --0.337964139879 -2.32226860523 --0.33795645088 -2.33952605724 --0.337949946523 -2.35678327084 --0.337944619357 -2.3740400672 --0.337940461934 -2.39129680395 --0.337937474251 -2.40855312347 --0.337935701013 -2.42580944299 --0.337935112417 -2.44306558371 --0.337935648859 -2.46032196284 --0.337937384844 -2.47757816315 --0.337940335274 -2.49483466148 --0.337944455445 -2.51209115982 --0.337949723005 -2.52934807539 --0.33795619756 -2.54660511017 --0.337963819504 -2.56386268139 --0.337972663343 -2.58112055063 --0.337982669473 -2.59837913513 --0.337988108397 -2.6175994277 --0.33798301965 -2.63681805134 --0.337972998619 -2.65407645702 --0.337964139879 -2.67133450508 --0.33795645088 -2.68859189749 --0.337949946523 -2.70584917069 --0.337944619357 -2.72310590744 --0.337940461934 -2.74036258459 --0.337937474251 -2.75761896372 --0.337935701013 -2.77487540245 --0.337935112417 -2.79213154316 --0.337935648859 -2.80938780308 --0.337937384844 -2.82664394379 --0.337940335274 -2.84390044212 --0.337944455445 -2.86115700006 --0.337949723005 -2.87841397524 --0.337956219912 -2.89567101002 --0.337963841856 -2.91292864084 --0.337972663343 -2.93018651008 --0.337982654572 -2.94744503498 --0.337988093495 -2.96666526795 --0.337982997298 -2.98588383198 --0.337972976267 -3.00314223766 --0.337964139879 -3.02040034532 --0.33795645088 -3.03765779734 --0.337949946523 -3.05491507054 --0.337944619357 -3.07217180729 --0.337940461934 -3.08942848444 --0.337937474251 -3.10668480396 --0.337935678661 -3.12394118309 --0.337935090065 -3.14119735558 --0.337935648859 --3.12473165989 --0.337937384844 --3.10747551918 --0.337940312922 --3.09021902084 --0.337944433093 --3.0729624629 --0.337949745357 --3.05570548773 --0.337956242264 --3.03844845295 --0.337963841856 --3.02119082213 --0.337972663343 --3.00393295288 --0.337982669473 --2.98667442799 --0.337988108397 --2.96745419502 --0.337982997298 --2.94823563099 --0.337972976267 --2.9309772253 --0.337964139879 --2.91371917724 --0.33795645088 --2.89646172524 --0.337949946523 --2.87920445204 --0.337944619357 --2.86194771528 --0.337940461934 --2.84469097853 --0.337937474251 --2.82743465901 --0.337935701013 --2.81017827988 --0.337935112417 --2.79292213917 --0.337935648859 --2.77566581964 --0.337937384844 --2.75840961933 --0.337940335274 --2.74115312099 --0.337944455445 --2.72389662266 --0.337949723005 --2.70663970709 --0.33795619756 --2.68938261271 --0.337963819504 --2.67212498188 --0.337972663343 --2.65486717224 --0.33798263222 --2.63760864735 --0.337988071144 --2.61838829517 --0.33798301965 --2.59916961193 --0.337972998619 --2.58191132545 --0.337964139879 --2.564653337 --0.33795645088 --2.54739588499 --0.337949946523 --2.53013861179 --0.337944619357 --2.51288181543 --0.337940461934 --2.49562513828 --0.337937474251 --2.47836887836 --0.337935701013 --2.46111249924 --0.337935112417 --2.44385635853 --0.33793567121 --2.4265999794 --0.337937407196 --2.40934371948 --0.337940335274 --2.39208722115 --0.337944455445 --2.37483072281 --0.337949723005 --2.35757380724 --0.337956219912 --2.34031677246 --0.337963841856 --2.32305920124 --0.337972663343 --2.305801332 --0.337982647121 --2.2885428071 --0.337988086045 --2.26932251454 --0.33798301965 --2.25010383129 --0.337972998619 --2.23284548521 --0.337964139879 --2.21558743715 --0.33795645088 --2.19832998514 --0.337949946523 --2.18107271194 --0.337944619357 --2.16381597519 --0.337940461934 --2.14655929804 --0.337937474251 --2.12930291891 --0.337935701013 --2.11204653979 --0.337935112417 --2.09479039908 --0.337935648859 --2.07753407955 --0.337937384844 --2.06027793884 --0.337940335274 --2.04302144051 --0.337944455445 --2.02576488256 --0.337949723005 --2.00850793719 --0.337956219912 --1.99125090242 --0.337963841856 --1.97399330139 --0.337972663343 --1.95673546195 --0.337982669473 --1.93947693706 --0.337988108397 --1.92025664449 --0.337982997298 --1.90103802085 --0.337972976267 --1.88377964497 --0.337964139879 --1.86652153731 --0.33795645088 --1.84926411509 --0.337949946523 --1.8320068717 --0.337944619357 --1.81475010514 --0.337940461934 --1.79749342799 --0.337937474251 --1.78023710847 --0.337935701013 --1.76298069954 --0.337935112417 --1.74572455883 --0.33793567121 --1.72846826911 --0.337937407196 --1.7112120986 --0.337940335274 --1.69395560026 --0.337944455445 --1.67669907212 --0.337949723005 --1.65944212675 --0.337956219912 --1.64218509197 --0.337963864207 --1.62492746115 --0.337972685695 --1.6076695919 --0.337982647121 --1.59041106701 --0.337988086045 --1.57119077444 --0.337982997298 --1.5519721508 --0.337972953915 --1.53471377492 --0.337964117527 --1.51745572686 --0.33795645088 --1.50019827485 --0.337949946523 --1.48294103146 --0.337944619357 --1.4656842947 --0.337940461934 --1.44842755794 --0.337937474251 --1.43117123842 --0.337935678661 --1.4139148891 --0.337935090065 --1.39665874839 --0.337935648859 --1.37940242886 --0.337937384844 --1.36214622855 --0.337940335274 --1.34488970041 --0.337944455445 --1.32763320208 --0.337949723005 --1.31037628651 --0.337956219912 --1.29311922193 --0.337963841856 --1.2758616209 --0.337972663343 --1.25860375166 --0.33798263222 --1.24134519696 --0.337988071144 --1.2221249342 --0.33798301965 --1.20290628076 --0.337972998619 --1.18564790487 --0.337964139879 --1.16838985681 --0.33795645088 --1.15113243461 --0.337949946523 --1.13387519121 --0.337944619357 --1.11661842465 --0.337940461934 --1.0993617475 --0.337937474251 --1.08210542798 --0.337935701013 --1.06484901905 --0.337935112417 --1.04759287834 --0.33793567121 --1.03033655882 --0.337937407196 --1.0130803287 --0.337940312922 --0.995823830367 --0.337944433093 --0.978567332029 --0.337949723005 --0.96131041646 --0.337956219912 --0.944053381681 --0.337963841856 --0.926795750857 --0.337972663343 --0.909537896514 --0.33798263222 --0.892279371619 --0.337988071144 --0.873059093952 --0.337982997298 --0.853840455413 --0.337972976267 --0.836582094431 --0.337964139879 --0.819324031472 --0.33795645088 --0.802066594362 --0.337949946523 --0.784809365869 --0.337944619357 --0.767552599311 --0.337940461934 --0.750295877457 --0.337937474251 --0.733039543033 --0.337935701013 --0.715783163905 --0.337935112417 --0.698527023196 --0.337935648859 --0.681270703673 --0.337937384844 --0.66401450336 --0.337940335274 --0.646758005023 --0.337944455445 --0.629501506686 --0.337949723005 --0.612244576216 --0.33795619756 --0.594987511635 --0.337963819504 --0.577729895711 --0.337972663343 --0.56047205627 --0.337982669473 --0.543213531375 --0.337988108397 --0.523993253708 --0.33798301965 --0.504774615168 --0.337972998619 --0.487516239285 --0.337964139879 --0.470258183777 --0.33795645088 --0.453000731766 --0.337949946523 --0.43574347347 --0.337944619357 --0.418486721813 --0.337940461934 --0.401230029762 --0.337937474251 --0.383973702788 --0.337935701013 --0.36671731621 --0.337935112417 --0.349461190403 --0.337935648859 --0.332204863429 --0.337937384844 --0.314948663116 --0.337940335274 --0.297692164779 --0.337944455445 --0.280435666442 --0.337949723005 --0.263178728521 --0.337956219912 --0.245921660214 --0.337963841856 --0.228664055467 --0.337972663343 --0.211406201124 --0.337982654572 --0.194147668779 --0.337988093495 --0.174927379936 --0.320650339126 --0.155701313168 --0.320640780032 --0.138442974538 --0.320632383227 --0.121184952557 --0.320625074208 --0.10392754525 --0.320618882775 --0.0866703204811 --0.32061380893 --0.0694135930389 --0.320609852672 --0.0521569270641 --0.320606999099 --0.0349006312899 --0.320605270565 --0.0176442759112 --0.320604711771 --0.000388169428333 --0.320605263114 -0.0168681212235 --0.320606924593 -0.0341242891736 --0.32060970366 -0.0513807637617 --0.320613630116 -0.0686372388155 --0.32061868161 -0.0858941413462 --0.320624865591 -0.103151166812 --0.320632115006 -0.120408749208 --0.320640519261 -0.137666586787 --0.320650048554 -0.154925093055 --0.320655226707 -0.174145635217 --0.320650361478 -0.193364534527 --0.320640802384 -0.210622873158 --0.320632383227 -0.227880895138 --0.320625074208 -0.245138306171 --0.320618867874 -0.262395530939 --0.320613794029 -0.279652260244 --0.320609852672 -0.296908922494 --0.320607014001 -0.314165212214 --0.320605307817 -0.33142156899 --0.320604734123 -0.348677679897 --0.320605263114 -0.365933977068 --0.320606924593 -0.383190147579 --0.320609726012 -0.400446623564 --0.320613652468 -0.417703092098 --0.320618659258 -0.434959992766 --0.32062484324 -0.452217034996 --0.320632115006 -0.469474613667 --0.320640519261 -0.486732438207 --0.320650026202 -0.503990925849 --0.320655204355 -0.523211464286 --0.32065038383 -0.542430385947 --0.320640824735 -0.559688732028 --0.320632383227 -0.576946750283 --0.320625074208 -0.594204172492 --0.320618882775 -0.611461400985 --0.320613786578 -0.628718093038 --0.32060983032 -0.645974770189 --0.320607014001 -0.66323107481 --0.320605307817 -0.680487424135 --0.320604734123 -0.697743549943 --0.320605263114 -0.714999824763 --0.320606924593 -0.732255980372 --0.320609726012 -0.749512463808 --0.320613652468 -0.766768947244 --0.320618659258 -0.784025862813 --0.32062484324 -0.80128288269 --0.320632115006 -0.81854043901 --0.320640519261 -0.835798278451 --0.320650026202 -0.853056803345 --0.320655204355 -0.872277334332 --0.320650361478 -0.891496241093 --0.320640802384 -0.908754572272 --0.320632383227 -0.926012590528 --0.320625074208 -0.943270027638 --0.320618867874 -0.96052724123 --0.320613771677 -0.977783948183 --0.32060983032 -0.995040640234 --0.320607014001 -1.01229694486 --0.320605307817 -1.02955329418 --0.320604734123 -1.04680940509 --0.320605263114 -1.064065665 --0.320606924593 -1.08132180572 --0.320609726012 -1.09857830406 --0.320613652468 -1.11583480239 --0.320618659258 -1.13309168816 --0.32062484324 -1.15034872294 --0.320632115006 -1.16760629416 --0.320640519261 -1.1848641038 --0.320650048554 -1.20212262869 --0.320655226707 -1.22134318948 --0.320650339126 -1.24056208134 --0.320640780032 -1.25782042742 --0.320632383227 -1.27507847547 --0.320625074208 -1.29233586788 --0.320618867874 -1.30959308148 --0.320613771677 -1.32684981823 --0.32060983032 -1.34410646558 --0.320607014001 -1.3613627553 --0.320605307817 -1.37861913443 --0.320604734123 -1.39587524534 --0.320605263114 -1.41313153505 --0.320606924593 -1.43038770556 --0.320609726012 -1.4476441741 --0.320613652468 -1.46490064263 --0.320618659258 -1.4821575582 --0.32062484324 -1.49941459298 --0.320632137358 -1.5166721642 --0.320640541613 -1.53392997384 --0.320650026202 -1.55118846893 --0.320655204355 -1.57040902972 --0.320650339126 -1.58962792158 --0.320640780032 -1.60688623786 --0.320632383227 -1.62414425611 --0.320625074208 -1.64140167832 --0.320618867874 -1.65865892172 --0.320613771677 -1.67591565848 --0.32060983032 -1.69317233562 --0.320607014001 -1.71042862535 --0.320605285466 -1.72768497467 --0.320604711771 -1.74494108558 --0.320605263114 -1.76219734549 --0.320606924593 -1.77945351601 --0.320609726012 -1.79671001435 --0.320613652468 -1.81396648288 --0.320618659258 -1.83122336864 --0.320624820888 -1.84848040342 --0.320632092654 -1.86573800445 --0.320640519261 -1.88299584389 --0.320650026202 -1.90025436878 --0.320655204355 -1.91947489977 --0.32065038383 -1.93869379163 --0.320640824735 -1.95595213771 --0.320632383227 -1.97321015596 --0.320625074208 -1.99046757817 --0.320618867874 -2.00772479176 --0.320613794029 -2.02498149872 --0.320609852672 -2.04223817587 --0.320607014001 -2.05949443579 --0.320605307817 -2.07675075531 --0.320604734123 -2.09400689602 --0.320605263114 -2.11126321554 --0.320606924593 -2.12851941586 --0.320609726012 -2.14577585459 --0.320613652468 -2.16303235292 --0.320618659258 -2.18028926849 --0.320624820888 -2.19754624367 --0.320632092654 -2.21480381489 --0.320640519261 -2.23206162453 --0.320650026202 -2.24932014942 --0.320655204355 -2.26854074001 --0.320650361478 -2.28775966168 --0.320640802384 -2.30501794815 --0.320632383227 -2.32227599621 --0.320625074208 -2.33953344822 --0.320618867874 -2.35679066181 --0.320613771677 -2.37404739857 --0.32060983032 -2.39130407572 --0.320607014001 -2.40856039524 --0.320605307817 -2.42581671476 --0.320604734123 -2.44307273626 --0.320605263114 -2.46032905579 --0.320606924593 -2.47758531571 --0.320609726012 -2.49484175443 --0.320613652468 -2.51209819317 --0.320618659258 -2.52935510874 --0.320624820888 -2.54661208391 --0.320632092654 -2.56386965513 --0.320640519261 -2.58112746477 --0.320650048554 -2.59838593006 --0.320655226707 -2.61760652065 --0.320650361478 -2.63682544232 --0.320640802384 -2.6540837884 --0.320632383227 -2.67134183645 --0.320625074208 -2.68859922886 --0.320618867874 -2.70585644245 --0.320613771677 -2.72311317921 --0.32060983032 -2.74036985636 --0.320607014001 -2.75762617588 --0.320605307817 -2.77488255501 --0.320604734123 -2.79213869571 --0.320605263114 -2.80939495563 --0.320606924593 -2.82665109635 --0.320609726012 -2.84390759468 --0.320613652468 -2.86116403341 --0.320618659258 -2.87842094898 --0.32062484324 -2.89567804336 --0.320632115006 -2.91293561458 --0.320640519261 -2.93019342423 --0.320650048554 -2.94745194912 --0.320655226707 -2.96667248011 --0.320650339126 -2.98589134216 --0.320640780032 -3.00314968824 --0.320632383227 -3.0204076767 --0.320625074208 -3.0376650691 --0.320618882775 -3.0549223423 --0.32061380893 -3.07217907906 --0.320609852672 -3.08943575621 --0.320606999099 -3.10669201613 --0.320605270565 -3.12394833565 --0.320604711771 -3.14120450814 --0.320605263114 --3.12472450733 --0.320606924593 --3.10746836663 --0.32060970366 --3.09021186828 --0.320613630116 --3.07295542955 --0.32061868161 --3.05569851398 --0.320624865591 --3.0384414196 --0.320632115006 --3.02118384838 --0.320640519261 --3.00392603874 --0.320650048554 --2.98666751385 --0.320655226707 --2.96744698286 --0.320650361478 --2.9482281208 --0.320640802384 --2.93096977472 --0.320632383227 --2.91371178627 --0.320625074208 --2.89645439387 --0.320618867874 --2.87919718027 --0.320613794029 --2.86194044351 --0.320609852672 --2.84468370676 --0.320607014001 --2.82742744684 --0.320605307817 --2.81017112732 --0.320604734123 --2.79291498661 --0.320605263114 --2.77565872669 --0.320606924593 --2.75840258599 --0.320609726012 --2.74114608765 --0.320613652468 --2.72388958931 --0.320618659258 --2.70663267374 --0.32062484324 --2.68937563897 --0.320632115006 --2.67211806774 --0.320640519261 --2.6548602581 --0.320650026202 --2.63760173321 --0.320655204355 --2.61838114262 --0.32065038383 --2.59916222095 --0.320640824735 --2.58190393448 --0.320632383227 --2.56464594603 --0.320625074208 --2.54738849402 --0.320618882775 --2.53013122082 --0.320613786578 --2.51287454367 --0.32060983032 --2.49561792612 --0.320607014001 --2.4783616066 --0.320605307817 --2.46110522747 --0.320604734123 --2.44384914637 --0.320605263114 --2.42659282684 --0.320606924593 --2.40933662653 --0.320609726012 --2.3920801878 --0.320613652468 --2.37482368946 --0.320618659258 --2.35756677389 --0.32062484324 --2.34030979872 --0.320632115006 --2.3230522871 --0.320640519261 --2.30579441786 --0.320650026202 --2.28853589297 --0.320655204355 --2.26931536198 --0.320650361478 --2.25009644031 --0.320640802384 --2.23283815384 --0.320632383227 --2.21558010578 --0.320625074208 --2.19832265377 --0.320618867874 --2.18106544018 --0.320613771677 --2.16380870342 --0.32060983032 --2.14655202627 --0.320607014001 --2.12929570675 --0.320605307817 --2.11203932762 --0.320604734123 --2.09478318692 --0.320605263114 --2.07752692699 --0.320606924593 --2.06027078628 --0.320609726012 --2.04301428795 --0.320613652468 --2.02575784922 --0.320618659258 --2.00850096345 --0.32062484324 --1.99124392867 --0.320632115006 --1.97398635745 --0.320640519261 --1.95672854781 --0.320650048554 --1.93947005272 --0.320655226707 --1.92024949193 --0.320650339126 --1.90103060007 --0.320640780032 --1.88377222418 --0.320632383227 --1.86651414633 --0.320625074208 --1.84925675392 --0.320618867874 --1.83199957013 --0.320613771677 --1.81474286318 --0.32060983032 --1.79748618603 --0.320607014001 --1.7802298665 --0.320605307817 --1.76297351718 --0.320604734123 --1.74571740627 --0.320605263114 --1.72846111655 --0.320606924593 --1.71120497584 --0.320609726012 --1.69394850731 --0.320613652468 --1.67669203878 --0.320618659258 --1.65943515301 --0.32062484324 --1.64217811823 --0.320632137358 --1.62492051721 --0.320640541613 --1.60766267777 --0.320650026202 --1.59040415287 --0.320655204355 --1.57118362188 --0.320650339126 --1.55196473002 --0.320640780032 --1.53470638394 --0.320632383227 --1.51744836569 --0.320625074208 --1.50019094348 --0.320618867874 --1.48293372989 --0.320613771677 --1.46567699313 --0.32060983032 --1.44842028618 --0.320607014001 --1.43116399646 --0.320605285466 --1.41390767694 --0.320604711771 --1.39665159583 --0.320605263114 --1.37939530611 --0.320606924593 --1.3621391058 --0.320609726012 --1.34488260746 --0.320613652468 --1.32762613893 --0.320618659258 --1.31036925316 --0.320624820888 --1.29311224818 --0.320632092654 --1.27585467696 --0.320640519261 --1.25859680772 --0.320650026202 --1.24133831263 --0.320655204355 --1.22211778164 --0.32065038383 --1.20289885998 --0.320640824735 --1.1856405139 --0.320632383227 --1.16838246584 --0.320625074208 --1.15112507343 --0.320618867874 --1.13386785984 --0.320613794029 --1.11661115289 --0.320609852672 --1.09935450554 --0.320607014001 --1.08209818602 --0.320605307817 --1.06484183669 --0.320604734123 --1.04758572578 --0.320605263114 --1.03032940626 --0.320606924593 --1.01307323575 --0.320609726012 --0.995816782118 --0.320613652468 --0.978560298681 --0.320618659258 --0.961303398013 --0.320624820888 --0.944046393037 --0.320632092654 --0.926788806915 --0.320640519261 --0.909530982376 --0.320650026202 --0.892272472382 --0.320655204355 --0.873051926494 --0.320650361478 --0.853833034635 --0.320640802384 --0.836574703455 --0.320632383227 --0.819316655397 --0.320625074208 --0.802059233188 --0.320618867874 --0.784802019596 --0.320613771677 --0.767545297742 --0.32060983032 --0.750288635493 --0.320607014001 --0.73303231597 --0.320605307817 --0.715775966644 --0.320604734123 --0.69851988554 --0.320605263114 --0.681263580918 --0.320606924593 --0.664007380605 --0.320609726012 --0.646750926971 --0.320613652468 --0.629494473338 --0.320618659258 --0.61223757267 --0.320624820888 --0.594980537891 --0.320632092654 --0.577722936869 --0.320640519261 --0.56046512723 --0.320650048554 --0.543206632137 --0.320655226707 --0.523986086249 --0.320650361478 --0.50476718694 --0.320640802384 --0.487508840859 --0.320632383227 --0.470250815153 --0.320625074208 --0.452993385494 --0.320618867874 --0.435736164451 --0.320613771677 --0.418479442596 --0.32060983032 --0.401222772896 --0.320607014001 --0.383966490627 --0.320605307817 --0.366710133851 --0.320604734123 --0.349454022944 --0.320605263114 --0.332197725773 --0.320606924593 --0.314941555262 --0.320609726012 --0.297685086727 --0.320613652468 --0.280428618193 --0.320618659258 --0.263171710074 --0.32062484324 --0.245914675295 --0.320632115006 --0.22865710035 --0.320640519261 --0.21139927581 --0.320650048554 --0.194140773267 --0.320655226707 --0.174920219928 --0.303300336003 --0.155693851411 --0.303291246295 --0.138435538858 --0.303283259273 --0.121177550405 --0.303276315332 --0.103920176625 --0.303270436824 --0.0866629779339 --0.303265631199 --0.0694062784314 --0.303261876106 --0.0521496413276 --0.303259178996 --0.0348933753558 --0.30325756967 --0.0176370511763 --0.303257040679 --0.000380974728613 --0.303257539869 -0.0168752861209 --0.303259111941 -0.0341314245016 --0.303261756897 -0.0513878678903 --0.303265489638 -0.0686443150044 --0.303270272911 -0.0859011895954 --0.303276129067 -0.103158187121 --0.303283035755 -0.120415743441 --0.303291007876 -0.137673545629 --0.303300030529 -0.15493201837 --0.303304962814 -0.174152828753 --0.303300358355 -0.193371992558 --0.303291268647 -0.210630297661 --0.303283259273 -0.22788829729 --0.303276315332 -0.245145682245 --0.303270421922 -0.262402877212 --0.303265616298 -0.279659584165 --0.303261876106 -0.296916216612 --0.303259193897 -0.31417247653 --0.303257584572 -0.331428803504 --0.303257040679 -0.348684884608 --0.303257539869 -0.365941144526 --0.303259111941 -0.383197277784 --0.303261779249 -0.400453723967 --0.30326551199 -0.41771017015 --0.303270272911 -0.434967041015 --0.303276129067 -0.452224053443 --0.303283035755 -0.469481609762 --0.303291007876 -0.486739389598 --0.303300030529 -0.503997862339 --0.303304962814 -0.523218676448 --0.303300358355 -0.542437836528 --0.303291268647 -0.559696152807 --0.303283259273 -0.576954156161 --0.303276315332 -0.594211533666 --0.303270436824 -0.611468732357 --0.303265608847 -0.628725409508 --0.303261853754 -0.645982056856 --0.303259193897 -0.663238331675 --0.303257584572 -0.680494651198 --0.303257018328 -0.697750747204 --0.303257517517 -0.715006992221 --0.303259111941 -0.732263118029 --0.303261779249 -0.749519556761 --0.30326551199 -0.766776010394 --0.303270272911 -0.784032896161 --0.303276129067 -0.801289901138 --0.303283035755 -0.818547442556 --0.303291007876 -0.835805237293 --0.303300030529 -0.853063717484 --0.303304962814 -0.872284531593 --0.303300336003 -0.891503706574 --0.303291246295 -0.90876199305 --0.303283259273 -0.926019981503 --0.303276315332 -0.943277388811 --0.303270421922 -0.960534587502 --0.303265593946 -0.977791264653 --0.303261853754 -0.995047912001 --0.303259193897 -1.01230418682 --0.303257584572 -1.02956050635 --0.303257040679 -1.04681655765 --0.303257539869 -1.06407278776 --0.303259111941 -1.08132892847 --0.303261779249 -1.09858539701 --0.30326551199 -1.11584186554 --0.303270272911 -1.1330987215 --0.303276129067 -1.15035572648 --0.303283035755 -1.1676132977 --0.303291007876 -1.18487110734 --0.303300030529 -1.20212960244 --0.303304962814 -1.22135040164 --0.303300336003 -1.24056953192 --0.303291246295 -1.2578278482 --0.303283259273 -1.27508586645 --0.303276315332 -1.29234322906 --0.303270421922 -1.30960044265 --0.303265593946 -1.3268571496 --0.303261853754 -1.34411376715 --0.303259193897 -1.36137002706 --0.303257584572 -1.37862634659 --0.303257040679 -1.39588242769 --0.303257539869 -1.41313868761 --0.303259111941 -1.43039482832 --0.303261779249 -1.44765126705 --0.303265489638 -1.46490770578 --0.303270250559 -1.48216459155 --0.303276129067 -1.49942159653 --0.303283035755 -1.51667916775 --0.303291007876 -1.53393694758 --0.303300030529 -1.55119538307 --0.303304962814 -1.57041621208 --0.303300336003 -1.58963540196 --0.303291246295 -1.60689368844 --0.303283259273 -1.62415167689 --0.303276315332 -1.6414090693 --0.303270421922 -1.65866625309 --0.303265593946 -1.67592296004 --0.303261853754 -1.69317960739 --0.303259193897 -1.71043586731 --0.303257584572 -1.72769218683 --0.303257018328 -1.74494826794 --0.303257517517 -1.76220452786 --0.303259111941 -1.77946066856 --0.303261779249 -1.7967171371 --0.30326551199 -1.81397357583 --0.303270272911 -1.83123043179 --0.303276106715 -1.84848743677 --0.303283013403 -1.86574497819 --0.303291007876 -1.88300278783 --0.303300030529 -1.90026128292 --0.303304962814 -1.91948208213 --0.303300358355 -1.93870124221 --0.303291268647 -1.95595955849 --0.303283259273 -1.97321754694 --0.303276315332 -1.99047493934 --0.303270421922 -2.00773209334 --0.303265616298 -2.02498877049 --0.303261876106 -2.04224544764 --0.303259193897 -2.05950170755 --0.303257584572 -2.07675802707 --0.303257040679 -2.09401410818 --0.303257539869 -2.1112704277 --0.303259111941 -2.12852656841 --0.303261779249 -2.14578294754 --0.30326551199 -2.16303938627 --0.303270272911 -2.18029624224 --0.303276106715 -2.19755321741 --0.303283013403 -2.21481078863 --0.303291007876 -2.23206859827 --0.303300030529 -2.24932706356 --0.303304962814 -2.26854789257 --0.303300358355 -2.28776705265 --0.303291268647 -2.30502533912 --0.303283259273 -2.32228338718 --0.303276315332 -2.33954077959 --0.303270421922 -2.35679799318 --0.303265593946 -2.37405472994 --0.303261853754 -2.39131134748 --0.303259193897 -2.40856760741 --0.303257584572 -2.42582392693 --0.303257018328 -2.44307994842 --0.303257517517 -2.46033620834 --0.303259111941 -2.47759240866 --0.303261779249 -2.49484878778 --0.30326551199 -2.51210522651 --0.303270272911 -2.52936214208 --0.303276106715 -2.54661911726 --0.303283013403 -2.56387668848 --0.303291007876 -2.58113449812 --0.303300030529 -2.59839296341 --0.303304962814 -2.61761379242 --0.303300336003 -2.6368329525 --0.303291246295 -2.65409123897 --0.303283259273 -2.67134922743 --0.303276315332 -2.68860661984 --0.303270421922 -2.70586383343 --0.303265593946 -2.72312051058 --0.303261853754 -2.74037712813 --0.303259193897 -2.75763338804 --0.303257584572 -2.77488970756 --0.303257018328 -2.79214584827 --0.303257517517 -2.80940210819 --0.303259111941 -2.8266582489 --0.303261779249 -2.84391474724 --0.30326551199 -2.86117112636 --0.303270272911 -2.87842798233 --0.303276129067 -2.89568501711 --0.303283035755 -2.91294252872 --0.303291007876 -2.93020033836 --0.303300030529 -2.94745886326 --0.303304962814 -2.96667969227 --0.303300336003 -2.98589885235 --0.303291246295 -3.00315713882 --0.303283259273 -3.02041506767 --0.303276315332 -3.03767240047 --0.303270436824 -3.05492961407 --0.303265631199 -3.07218635082 --0.303261876106 -3.08944302797 --0.303259178996 -3.10669928789 --0.30325756967 -3.12395560741 --0.303257040679 -3.1412117203 --0.303257539869 --3.12471735478 --0.303259111941 --3.10746121407 --0.303261756897 --3.09020471573 --0.303265489638 --3.0729483366 --0.303270272911 --3.05569148063 --0.303276129067 --3.03843444585 --0.303283035755 --3.02117693424 --0.303291007876 --3.0039191246 --0.303300030529 --2.98666059971 --0.303304962814 --2.9674397707 --0.303300358355 --2.94822061062 --0.303291268647 --2.93096232414 --0.303283259273 --2.91370433569 --0.303276315332 --2.89644700289 --0.303270421922 --2.8791898489 --0.303265616298 --2.86193311214 --0.303261876106 --2.84467643499 --0.303259193897 --2.82742017508 --0.303257584572 --2.81016385555 --0.303257040679 --2.79290777445 --0.303257539869 --2.77565151453 --0.303259111941 --2.75839537382 --0.303261779249 --2.74113893509 --0.30326551199 --2.72388249635 --0.303270272911 --2.70662564039 --0.303276129067 --2.68936866522 --0.303283035755 --2.67211109399 --0.303291007876 --2.65485328436 --0.303300030529 --2.63759481907 --0.303304962814 --2.61837399006 --0.303300358355 --2.59915482998 --0.303291268647 --2.5818965435 --0.303283259273 --2.56463849545 --0.303276315332 --2.54738110304 --0.303270436824 --2.53012388944 --0.303265608847 --2.51286721229 --0.303261853754 --2.49561059475 --0.303259193897 --2.47835427523 --0.303257584572 --2.46109795571 --0.303257018328 --2.4438419342 --0.303257517517 --2.42658567428 --0.303259111941 --2.40932953358 --0.303261779249 --2.39207315445 --0.30326551199 --2.37481665611 --0.303270272911 --2.35755974054 --0.303276129067 --2.34030276537 --0.303283035755 --2.32304525375 --0.303291007876 --2.30578744411 --0.303300030529 --2.28852897883 --0.303304962814 --2.26930814982 --0.303300336003 --2.25008893013 --0.303291246295 --2.23283070326 --0.303283259273 --2.21557271481 --0.303276315332 --2.1983152628 --0.303270421922 --2.1810580492 --0.303265593946 --2.16380137205 --0.303261853754 --2.1465447545 --0.303259193897 --2.12928849458 --0.303257584572 --2.11203217506 --0.303257040679 --2.09477603436 --0.303257539869 --2.07751977444 --0.303259111941 --2.06026369333 --0.303261779249 --2.043007195 --0.30326551199 --2.02575075626 --0.303270272911 --2.0084939301 --0.303276129067 --1.99123692513 --0.303283035755 --1.97397935391 --0.303291007876 --1.95672157407 --0.303300030529 --1.93946310878 --0.303304962814 --1.92024227977 --0.303300336003 --1.90102311969 --0.303291246295 --1.88376477361 --0.303283259273 --1.86650675535 --0.303276315332 --1.84924939275 --0.303270421922 --1.83199223876 --0.303265593946 --1.81473556161 --0.303261853754 --1.79747891426 --0.303259193897 --1.78022262454 --0.303257584572 --1.76296630502 --0.303257040679 --1.74571022392 --0.303257539869 --1.72845393419 --0.303259111941 --1.71119782329 --0.303261779249 --1.69394138455 --0.303265489638 --1.67668494582 --0.303270250559 --1.65942808986 --0.303276129067 --1.64217105508 --0.303283035755 --1.62491351366 --0.303291007876 --1.60765573382 --0.303300030529 --1.59039723873 --0.303304962814 --1.57117643952 --0.303300336003 --1.55195727944 --0.303291246295 --1.53469896317 --0.303283259273 --1.51744097471 --0.303276315332 --1.50018358231 --0.303270421922 --1.48292636871 --0.303265593946 --1.46566966176 --0.303261853754 --1.44841301441 --0.303259193897 --1.43115675449 --0.303257584572 --1.41390043497 --0.303257018328 --1.39664438367 --0.303257517517 --1.37938812375 --0.303259111941 --1.36213195324 --0.303261779249 --1.34487551451 --0.30326551199 --1.32761907578 --0.303270272911 --1.31036219001 --0.303276106715 --1.29310521484 --0.303283013403 --1.27584767342 --0.303291007876 --1.25858983398 --0.303300030529 --1.24133136869 --0.303304962814 --1.22211056948 --0.303300358355 --1.2028914094 --0.303291268647 --1.18563309312 --0.303283259273 --1.16837507486 --0.303276315332 --1.15111771226 --0.303270421922 --1.13386052847 --0.303265616298 --1.11660385132 --0.303261876106 --1.09934720397 --0.303259193897 --1.08209091425 --0.303257584572 --1.06483459473 --0.303257040679 --1.04757851362 --0.303257539869 --1.0303222537 --0.303259111941 --1.013066113 --0.303261779249 --0.995809674264 --0.30326551199 --0.978553235531 --0.303270272911 --0.961296364665 --0.303276106715 --0.94403937459 --0.303283013403 --0.926781818271 --0.303291007876 --0.909524023533 --0.303300030529 --0.892265543342 --0.303304962814 --0.873044729233 --0.303300358355 --0.853825584054 --0.303291268647 --0.836567267776 --0.303283259273 --0.81930924952 --0.303276315332 --0.802051872015 --0.303270421922 --0.784794673324 --0.303265593946 --0.76753796637 --0.303261853754 --0.750281348825 --0.303259193897 --0.733025088906 --0.303257584572 --0.715768754482 --0.303257018328 --0.698512688279 --0.303257517517 --0.681256428361 --0.303259111941 --0.664000272751 --0.303261779249 --0.646743834019 --0.30326551199 --0.629487395287 --0.303270272911 --0.612230524421 --0.303276106715 --0.594973519444 --0.303283013403 --0.577715963125 --0.303291007876 --0.560458168387 --0.303300030529 --0.543199688196 --0.303304962814 --0.523978874087 --0.303300336003 --0.504759714007 --0.303291246295 --0.48750140518 --0.303283259273 --0.470243409276 --0.303276315332 --0.45298601687 --0.303270421922 --0.435728825629 --0.303265593946 --0.418472141027 --0.303261853754 --0.401215501129 --0.303259193897 --0.383959241211 --0.303257584572 --0.366702899337 --0.303257018328 --0.349446810782 --0.303257517517 --0.332190558314 --0.303259111941 --0.314934417605 --0.303261779249 --0.297677978873 --0.30326551199 --0.280421540141 --0.303270272911 --0.263164661825 --0.303276129067 --0.245907660574 --0.303283035755 --0.22865010798 --0.303291007876 --0.211392305792 --0.303300030529 --0.194133833051 --0.303304962814 --0.174913022667 --0.285932347178 --0.155686363578 --0.285923779011 --0.138428084552 --0.285916186869 --0.121170118451 --0.285909593106 --0.103912772611 --0.285904042423 --0.0866556037218 --0.285899505019 --0.0693989312276 --0.285895965993 --0.05214232672 --0.285893425345 --0.0348860924132 --0.285891905427 --0.0176297959406 --0.285891391337 --0.000373748363925 --0.285891868174 -0.0168824829161 --0.28589335829 -0.0341385914944 --0.285895869136 -0.0513950055465 --0.285899393261 -0.0686514209956 --0.285903900862 -0.0859082657844 --0.285909436643 -0.103165237233 --0.285915985703 -0.12042276375 --0.285923525691 -0.137680530548 --0.285932034254 -0.154938977212 --0.285936698318 -0.174160055816 --0.285932332277 -0.193379480391 --0.285923741758 -0.210637755692 --0.285916186869 -0.227895725519 --0.285909615457 -0.245153084397 --0.285904042423 -0.262410253286 --0.285899505019 -0.279666930437 --0.285895965993 -0.296923533082 --0.285893425345 -0.314179763198 --0.285891905427 -0.331436060369 --0.285891391337 -0.348692111671 --0.285891868174 -0.365948341786 --0.28589335829 -0.383204437792 --0.285895869136 -0.400460854173 --0.285899393261 -0.417717270553 --0.285903900862 -0.434974111617 --0.285909436643 -0.452231094241 --0.285915985703 -0.469488620758 --0.285923525691 -0.486746378243 --0.285932034254 -0.504004836083 --0.285936698318 -0.523225918412 --0.285932332277 -0.542445346713 --0.285923741758 -0.559703618288 --0.285916164518 -0.576961576939 --0.285909593106 -0.594218924641 --0.285904042423 -0.61147609353 --0.285899505019 -0.62873275578 --0.285895965993 -0.645989358425 --0.285893425345 -0.663245618343 --0.285891905427 -0.680501922965 --0.285891368985 -0.697757959366 --0.285891845822 -0.715014174581 --0.28589335829 -0.732270270586 --0.285895869136 -0.749526679516 --0.285899393261 -0.766783103347 --0.285903900862 -0.784039974212 --0.285909436643 -0.801296964288 --0.285915963352 -0.818554475904 --0.285923503339 -0.83581225574 --0.285932034254 -0.853070691228 --0.285936698318 -0.872291758656 --0.285932332277 -0.891511201858 --0.285923741758 -0.908769458532 --0.285916186869 -0.926027432084 --0.285909615457 -0.943284794688 --0.285904042423 -0.960541948676 --0.285899505019 -0.977798610925 --0.285895951092 -0.995055228472 --0.285893410444 -1.01231148839 --0.285891905427 -1.02956777811 --0.285891391337 -1.04682379961 --0.285891868174 -1.06407999992 --0.28589335829 -1.08133611083 --0.285895869136 -1.09859254956 --0.285899393261 -1.11584895849 --0.285903900862 -1.13310578466 --0.285909436643 -1.15036275983 --0.285915985703 -1.16762030125 --0.285923525691 -1.18487808109 --0.285932034254 -1.20213654638 --0.285936698318 -1.2213576436 --0.285932332277 -1.2405770421 --0.285923741758 -1.25783529878 --0.285916186869 -1.27509328723 --0.285909615457 -1.29235062003 --0.285904042423 -1.30960780382 --0.285899505019 -1.32686451078 --0.285895965993 -1.34412109852 --0.285893425345 -1.36137729883 --0.285891905427 -1.37863358855 --0.285891391337 -1.39588963986 --0.285891868174 -1.41314586997 --0.28589335829 -1.43040201068 --0.285895869136 -1.44765841961 --0.285899370909 -1.46491482854 --0.28590387851 -1.4821716845 --0.285909436643 -1.49942865968 --0.285915985703 -1.5166862011 --0.285923548043 -1.53394395113 --0.285932056606 -1.55120235681 --0.285936698318 -1.57042342424 --0.285932347178 -1.58964288235 --0.285923756659 -1.60690116883 --0.285916186869 -1.62415912748 --0.285909615457 -1.64141649008 --0.285904042423 -1.65867364407 --0.285899505019 -1.67593032122 --0.285895965993 -1.69318693876 --0.285893425345 -1.71044316888 --0.285891905427 -1.7276994586 --0.285891368985 -1.7449555099 --0.285891845822 -1.76221174002 --0.28589335829 -1.77946782112 --0.285895869136 -1.79672425985 --0.285899393261 -1.81398066878 --0.285903900862 -1.83123749495 --0.285909436643 -1.84849447012 --0.285915963352 -1.86575198174 --0.285923503339 -1.88300976157 --0.285932034254 -1.90026822686 --0.285936698318 -1.91948932409 --0.285932332277 -1.93870872259 --0.285923741758 -1.95596700907 --0.285916164518 -1.97322499752 --0.285909593106 -1.99048233032 --0.285904042423 -2.00773945451 --0.285899505019 -2.02499610186 --0.285895951092 -2.0422527194 --0.285893410444 -2.05950897932 --0.285891905427 -2.07676529884 --0.285891391337 -2.09402132034 --0.285891868174 -2.11127758026 --0.28589335829 -2.12853372097 --0.285895869136 -2.1457901001 --0.285899393261 -2.16304647923 --0.285903900862 -2.18030333519 --0.285909436643 -2.19756031036 --0.285915963352 -2.21481782198 --0.285923503339 -2.23207557201 --0.285932034254 -2.2493340373 --0.285936698318 -2.26855516434 --0.285932332277 -2.28777456283 --0.285923741758 -2.30503284931 --0.285916164518 -2.32229083776 --0.285909593106 -2.33954811096 --0.285904042423 -2.35680532455 --0.285899505019 -2.37406206131 --0.285895965993 -2.39131867886 --0.285893425345 -2.40857493878 --0.285891905427 -2.42583119869 --0.285891368985 -2.44308722019 --0.285891845822 -2.46034342051 --0.28589335829 -2.47759950161 --0.285895869136 -2.49485594034 --0.285899393261 -2.51211237907 --0.285903900862 -2.52936917543 --0.285909436643 -2.54662615061 --0.285915963352 -2.56388372183 --0.285923503339 -2.58114153147 --0.285932034254 -2.59839999676 --0.285936698318 -2.61762106419 --0.285932332277 -2.63684046268 --0.285923741758 -2.65409874916 --0.285916164518 -2.67135667801 --0.285909593106 -2.68861401081 --0.285904042423 -2.7058712244 --0.285899505019 -2.72312784195 --0.285895965993 -2.7403844595 --0.285893425345 -2.75764071941 --0.285891905427 -2.77489697933 --0.285891368985 -2.79215306044 --0.285891845822 -2.80940932035 --0.28589335829 -2.82666546106 --0.285895869136 -2.84392189979 --0.285899393261 -2.86117827892 --0.285903900862 -2.87843513489 --0.285909436643 -2.89569205045 --0.285915963352 -2.91294950247 --0.285923503339 -2.9302073121 --0.285932034254 -2.9474657774 --0.285936698318 -2.96668684483 --0.285932347178 -2.98590630293 --0.285923779011 -3.00316458941 --0.285916186869 -3.02042251826 --0.285909593106 -3.03767985106 --0.285904042423 -3.05493700504 --0.285899505019 -3.07219368219 --0.285895965993 -3.08945029974 --0.285893425345 -3.10670655966 --0.285891905427 -3.12396287918 --0.285891391337 -3.14121893247 --0.285891868174 --3.12471014261 --0.28589335829 --3.10745400191 --0.285895869136 --3.09019756317 --0.285899393261 --3.07294118404 --0.285903900862 --3.05568432808 --0.285909436643 --3.0384273529 --0.285915985703 --3.02116990089 --0.285923525691 --3.00391215086 --0.285932034254 --2.98665368557 --0.285936698318 --2.96743261814 --0.285932332277 --2.94821316004 --0.285923741758 --2.93095487356 --0.285916186869 --2.91369688511 --0.285909615457 --2.89643955231 --0.285904042423 --2.87918245792 --0.285899505019 --2.86192578077 --0.285895965993 --2.84466916323 --0.285893425345 --2.82741290331 --0.285891905427 --2.81015658379 --0.285891391337 --2.79290056229 --0.285891868174 --2.77564430237 --0.28589335829 --2.75838816166 --0.285895869136 --2.74113178253 --0.285899393261 --2.7238754034 --0.285903900862 --2.70661854744 --0.285909436643 --2.68936157226 --0.285915985703 --2.67210406065 --0.285923525691 --2.65484631061 --0.285932034254 --2.63758784533 --0.285936698318 --2.61836671829 --0.285932332277 --2.59914731979 --0.285923741758 --2.58188909292 --0.285916164518 --2.56463110447 --0.285909593106 --2.54737377167 --0.285904042423 --2.53011655808 --0.285899505019 --2.51285982132 --0.285895965993 --2.49560326338 --0.285893425345 --2.47834700346 --0.285891905427 --2.46109068394 --0.285891368985 --2.44383472204 --0.285891845822 --2.42657852173 --0.28589335829 --2.40932238102 --0.285895869136 --2.39206600189 --0.285899393261 --2.37480956316 --0.285903900862 --2.35755270719 --0.285909436643 --2.34029573202 --0.285915963352 --2.3230381608 --0.285923503339 --2.30578035116 --0.285932034254 --2.28852194547 --0.285936698318 --2.26930087805 --0.285932332277 --2.25008141995 --0.285923741758 --2.23282319308 --0.285916186869 --2.21556520462 --0.285909615457 --2.19830781221 --0.285904042423 --2.18105065823 --0.285899505019 --2.16379404068 --0.285895951092 --2.14653742313 --0.285893410444 --2.12928116321 --0.285891905427 --2.1120249033 --0.285891391337 --2.09476882219 --0.285891868174 --2.07751256227 --0.28589335829 --2.06025654077 --0.285895869136 --2.04300010204 --0.285899393261 --2.02574360371 --0.285903900862 --2.00848680735 --0.285909436643 --1.99122986198 --0.285915985703 --1.97397232056 --0.285923525691 --1.95671457052 --0.285932034254 --1.93945613503 --0.285936698318 --1.92023506761 --0.285932332277 --1.90101563931 --0.285923741758 --1.88375732303 --0.285916186869 --1.86649936438 --0.285909615457 --1.84924203157 --0.285904042423 --1.83198487759 --0.285899505019 --1.81472820044 --0.285895965993 --1.79747158289 --0.285893425345 --1.78021535277 --0.285891905427 --1.76295906306 --0.285891391337 --1.74570301175 --0.285891868174 --1.72844675183 --0.28589335829 --1.71119067073 --0.285895869136 --1.6939342618 --0.285899370909 --1.67667782307 --0.28590387851 --1.65942099691 --0.285909436643 --1.64216402173 --0.285915985703 --1.62490651012 --0.285923548043 --1.60764876008 --0.285932056606 --1.59039029479 --0.285936698318 --1.57116919756 --0.285932347178 --1.55194976926 --0.285923756659 --1.53469148279 --0.285916186869 --1.51743352413 --0.285909615457 --1.50017616152 --0.285904042423 --1.48291897774 --0.285899505019 --1.46566233039 --0.285895965993 --1.44840571284 --0.285893425345 --1.43114945292 --0.285891905427 --1.41389316321 --0.285891368985 --1.39663714171 --0.285891845822 --1.37938091159 --0.28589335829 --1.36212480068 --0.285895869136 --1.34486842156 --0.285899393261 --1.32761201263 --0.285903900862 --1.31035512686 --0.285909436643 --1.29309815168 --0.285915963352 --1.27584064007 --0.285923503339 --1.25858286023 --0.285932034254 --1.24132442474 --0.285936698318 --1.22210335732 --0.285932332277 --1.20288392901 --0.285923741758 --1.18562564254 --0.285916164518 --1.16836765408 --0.285909593106 --1.15111032128 --0.285904042423 --1.1338531971 --0.285899505019 --1.11659651995 --0.285895951092 --1.0993398726 --0.285893410444 --1.08208364248 --0.285891905427 --1.06482735276 --0.285891391337 --1.04757130146 --0.285891868174 --1.03031510115 --0.28589335829 --1.01305896044 --0.285895869136 --0.995802506805 --0.285899393261 --0.978546112776 --0.285903900862 --0.961289286614 --0.285909436643 --0.944032326341 --0.285915963352 --0.926774799824 --0.285923503339 --0.909517034888 --0.285932034254 --0.892258584499 --0.285936698318 --0.87303750217 --0.285932332277 --0.853818073869 --0.285923741758 --0.836559772492 --0.285916164518 --0.81930179894 --0.285909593106 --0.802044481039 --0.285904042423 --0.784787327052 --0.285899505019 --0.767530634999 --0.285895965993 --0.750274017453 --0.285893425345 --0.733017787337 --0.285891905427 --0.715761497617 --0.285891368985 --0.698505446315 --0.285891845822 --0.6812492311 --0.28589335829 --0.663993135094 --0.285895869136 --0.646736696362 --0.285899393261 --0.629480287433 --0.285903900862 --0.612223446369 --0.285909436643 --0.594966456294 --0.285915963352 --0.577708959579 --0.285923503339 --0.560451194644 --0.285932034254 --0.543192729354 --0.285936698318 --0.523971647024 --0.285932332277 --0.504752226174 --0.285923741758 --0.487493947149 --0.285916164518 --0.470235973597 --0.285909593106 --0.452978618443 --0.285904042423 --0.435721457005 --0.285899505019 --0.418464802205 --0.285895965993 --0.40120819211 --0.285893425345 --0.383951947093 --0.285891905427 --0.366695635021 --0.285891368985 --0.34943959117 --0.285891845822 --0.332183368504 --0.28589335829 --0.314927242696 --0.285895869136 --0.297670833766 --0.285899393261 --0.280414432287 --0.285903900862 --0.263157576323 --0.285909436643 --0.245900604874 --0.285915963352 --0.228643089533 --0.285923503339 --0.211385313422 --0.285932034254 --0.194126866758 --0.285936698318 --0.174905791879 --0.268565833569 --0.155678510666 --0.268557786942 --0.138420257717 --0.268550634384 --0.121162317694 --0.268544405699 --0.103905001655 --0.268539182842 --0.0866478681564 --0.26853492111 --0.0693912282586 --0.268531583249 --0.0521346544847 --0.268529176712 --0.0348784504458 --0.26852773875 --0.0176221856382 --0.268527254462 --0.000366169493642 --0.268527701497 -0.0168900310528 --0.268529109657 -0.0341461091302 --0.26853146404 -0.05140249338 --0.26853479445 -0.0686588771641 --0.268539048731 -0.0859156921506 --0.268544256687 -0.103172631934 --0.268550418317 -0.120430123061 --0.268557533622 -0.137687858194 --0.268565565348 -0.154946275055 --0.268569931388 -0.174167636782 --0.268565818667 -0.193387340754 --0.268557749688 -0.210645586252 --0.268550634384 -0.227903522551 --0.268544450402 -0.245160840452 --0.268539205193 -0.262417979538 --0.26853492111 -0.279674626887 --0.268531583249 -0.296931199729 --0.268529176712 -0.314187400043 --0.26852773875 -0.331443667412 --0.268527254462 -0.348699681461 --0.268527701497 -0.365955874324 --0.268529109657 -0.383211947978 --0.268531486392 -0.400468334556 --0.26853479445 -0.417724713683 --0.26853902638 -0.434981532395 --0.268544256687 -0.452238485217 --0.268550440669 -0.469495974481 --0.268557555974 -0.486753717065 --0.268565565348 -0.504012130201 --0.268569931388 -0.523233488202 --0.268565818667 -0.542453214526 --0.268557749688 -0.559711456299 --0.268550612032 -0.576969385147 --0.268544405699 -0.594226703048 --0.268539182842 -0.611483827233 --0.26853492111 -0.628740459681 --0.268531583249 -0.645997032523 --0.268529176712 -0.663253262639 --0.26852773875 -0.680509537458 --0.268527254462 -0.697765529156 --0.268527701497 -0.715021729469 --0.268529109657 -0.732277795672 --0.26853146404 -0.7495341748 --0.268534772098 -0.766790568828 --0.26853902638 -0.784047394991 --0.268544256687 -0.801304340362 --0.268550418317 -0.818561822176 --0.268557533622 -0.835819587112 --0.268565565348 -0.853078007698 --0.268569931388 -0.872299343348 --0.268565818667 -0.89151905477 --0.268557749688 -0.908777296543 --0.268550634384 -0.926035240293 --0.268544450402 -0.943292558193 --0.268539205193 -0.960549682379 --0.26853492111 -0.977806314826 --0.268531568349 -0.995062902569 --0.268529161811 -1.01231914758 --0.26852773875 -1.0295754075 --0.268527254462 -1.0468313992 --0.268527701497 -1.06408756971 --0.268529109657 -1.08134365082 --0.26853146404 -1.09860005975 --0.268534772098 -1.11585643888 --0.26853902638 -1.13311323523 --0.268544256687 -1.1503701806 --0.268550440669 -1.16762769222 --0.268557555974 -1.18488544225 --0.268565565348 -1.20214384794 --0.268569931388 -1.22136518359 --0.268565818667 -1.24058488011 --0.268557749688 -1.25784313679 --0.268550634384 -1.27510109544 --0.268544428051 -1.29235839843 --0.268539182842 -1.30961552262 --0.26853492111 -1.32687216997 --0.268531583249 -1.34412872791 --0.268529176712 -1.36138492822 --0.26852773875 -1.37864121795 --0.268527254462 -1.39589723944 --0.268527701497 -1.41315343976 --0.268529109657 -1.43040952087 --0.268531486392 -1.44766589999 --0.26853479445 -1.46492227912 --0.26853902638 -1.48217910528 --0.268544256687 -1.49943605065 --0.268550418317 -1.51669353247 --0.268557555973 -1.5339512825 --0.2685655877 -1.55120968819 --0.268569931388 -1.57043102384 --0.268565833569 -1.58965075016 --0.26855776459 -1.60690900684 --0.268550634384 -1.62416693568 --0.268544450402 -1.64142426848 --0.268539205193 -1.65868139267 --0.26853492111 -1.67593804002 --0.268531583249 -1.69319462776 --0.268529176712 -1.71045082808 --0.26852773875 -1.72770708799 --0.268527254462 -1.74496307969 --0.268527701497 -1.7622192502 --0.268529109657 -1.77947533131 --0.26853146404 -1.79673174024 --0.268534772098 -1.81398811936 --0.26853902638 -1.83124491572 --0.268544256687 -1.84850186109 --0.268550418317 -1.86575937271 --0.268557533622 -1.88301709294 --0.268565565348 -1.90027552843 --0.268569931388 -1.91949692368 --0.268565818667 -1.9387165904 --0.268557749688 -1.95597484708 --0.268550612032 -1.97323280573 --0.26854442805 -1.99049007892 --0.268539205193 -2.00774720311 --0.26853492111 -2.02500385046 --0.268531568349 -2.0422604084 --0.268529161811 -2.05951660871 --0.26852773875 -2.07677286863 --0.268527254462 -2.09402889013 --0.268527701497 -2.11128509045 --0.268529109657 -2.12854117155 --0.26853146404 -2.14579755068 --0.268534772098 -2.16305392981 --0.26853902638 -2.18031078577 --0.268544256687 -2.19756776094 --0.268550418317 -2.21482521296 --0.268557533622 -2.23208290338 --0.268565565348 -2.24934136867 --0.268569931388 -2.26856279373 --0.268565818667 -2.28778249025 --0.268557749688 -2.30504071713 --0.268550612032 -2.32229864598 --0.268544405699 -2.33955591917 --0.268539182842 -2.35681307316 --0.26853492111 -2.37406975031 --0.268531583249 -2.39132630825 --0.268529176712 -2.40858250856 --0.26852773875 -2.42583876848 --0.268527254462 -2.44309478998 --0.268527701497 -2.46035099029 --0.268529109657 -2.4776070118 --0.268531486392 -2.49486345053 --0.268534816802 -2.51211988926 --0.268539048731 -2.52937662601 --0.268544256687 -2.54663354158 --0.268550418317 -2.5638910532 --0.268557533622 -2.58114880324 --0.268565565348 -2.59840720892 --0.268569931388 -2.61762857437 --0.268565818667 -2.63684827089 --0.268557749688 -2.65410649776 --0.268550612032 -2.67136442661 --0.26854442805 -2.68862175941 --0.268539205193 -2.7058789134 --0.26853492111 -2.72313553095 --0.268531583249 -2.7403921485 --0.268529176712 -2.75764840842 --0.26852773875 -2.77490466833 --0.268527254462 -2.79216063023 --0.268527701497 -2.80941683054 --0.268529109657 -2.82667297125 --0.26853146404 -2.84392935038 --0.268534772098 -2.8611857295 --0.26853902638 -2.87844252586 --0.268544256687 -2.89569938183 --0.268550418317 -2.91295689344 --0.268557533622 -2.93021470308 --0.268565565348 -2.94747310877 --0.268569931388 -2.96669441462 --0.268565833569 -2.98591417074 --0.268557786942 -3.00317245722 --0.268550634384 -3.02043032646 --0.268544405699 -3.03768765926 --0.268539182842 -3.05494481325 --0.26853492111 -3.0722014308 --0.268531583249 -3.08945798874 --0.268529176712 -3.10671418906 --0.26852773875 -3.12397044897 --0.268527254462 -3.14122650226 --0.268527701497 --3.12470257282 --0.268529109657 --3.10744649172 --0.26853146404 --3.09019011259 --0.26853479445 --3.07293373347 --0.268539048731 --3.0556768775 --0.268544256687 --3.03841996193 --0.268550418317 --3.02116250992 --0.268557533622 --3.00390475988 --0.268565565348 --2.9866463542 --0.268569931388 --2.96742504835 --0.268565818667 --2.94820535183 --0.268557749688 --2.93094706535 --0.268550634384 --2.9136891365 --0.268544450402 --2.89643180371 --0.268539205193 --2.87917464971 --0.26853492111 --2.86191803217 --0.268531583249 --2.84466147423 --0.268529176712 --2.82740527391 --0.26852773875 --2.810149014 --0.268527254462 --2.7928929925 --0.268527701497 --2.77563679218 --0.268529109657 --2.75838071108 --0.268531486392 --2.74112433195 --0.26853479445 --2.72386795283 --0.26853902638 --2.70661109686 --0.268544256687 --2.68935412169 --0.268550440669 --2.67209666968 --0.268557555974 --2.65483897925 --0.268565565348 --2.63758051396 --0.268569931388 --2.6183590889 --0.268565818667 --2.59913939238 --0.268557749688 --2.58188122511 --0.268550612032 --2.56462329626 --0.268544405699 --2.54736596346 --0.268539182842 --2.53010880947 --0.26853492111 --2.51285213232 --0.268531583249 --2.49559563399 --0.268529176712 --2.47833943367 --0.26852773875 --2.46108311415 --0.268527254462 --2.44382715225 --0.268527701497 --2.42657095194 --0.268529109657 --2.40931487083 --0.26853146404 --2.3920584917 --0.268534772098 --2.37480211258 --0.26853902638 --2.35754531622 --0.268544256687 --2.34028834104 --0.268550418317 --2.32303082943 --0.268557533622 --2.3057730794 --0.268565565348 --2.28851467371 --0.268569931388 --2.26929330826 --0.268565818667 --2.25007361174 --0.268557749688 --2.23281538486 --0.268550634384 --2.21555739641 --0.268544450402 --2.19830006361 --0.268539205193 --2.18104296923 --0.26853492111 --2.16378635168 --0.268531568349 --2.14652973414 --0.268529161811 --2.12927347422 --0.26852773875 --2.1120172143 --0.268527254462 --2.0947612524 --0.268527701497 --2.07750505209 --0.268529109657 --2.06024897099 --0.26853146404 --2.04299259186 --0.268534772098 --2.02573615313 --0.26853902638 --2.00847935677 --0.268544256687 --1.991222471 --0.268550440669 --1.97396498918 --0.268557555974 --1.95670723915 --0.268565565348 --1.93944883346 --0.268569931388 --1.92022749782 --0.268565818667 --1.90100777149 --0.268557749688 --1.88374951482 --0.268550634384 --1.86649158597 --0.268544428051 --1.84923425317 --0.268539182842 --1.83197712898 --0.26853492111 --1.81472048163 --0.268531583249 --1.79746389389 --0.268529176712 --1.78020769357 --0.26852773875 --1.76295143366 --0.268527254462 --1.74569544196 --0.268527701497 --1.72843921185 --0.268529109657 --1.71118313074 --0.268531486392 --1.69392678142 --0.26853479445 --1.67667037249 --0.26853902638 --1.65941357613 --0.268544256687 --1.64215666056 --0.268550418317 --1.62489914894 --0.268557555973 --1.60764139891 --0.2685655877 --1.59038296342 --0.268569931388 --1.57116159797 --0.268565833569 --1.55194190145 --0.26855776459 --1.53468364477 --0.268550634384 --1.51742571592 --0.268544450402 --1.50016841292 --0.268539205193 --1.48291125894 --0.26853492111 --1.46565461159 --0.268531583249 --1.44839802385 --0.268529176712 --1.43114182353 --0.26852773875 --1.41388556361 --0.268527254462 --1.39662954211 --0.268527701497 --1.3793733716 --0.268529109657 --1.3621172905 --0.26853146404 --1.34486091137 --0.268534772098 --1.32760456204 --0.26853902638 --1.31034773588 --0.268544256687 --1.29309076071 --0.268550418317 --1.27583324909 --0.268557533622 --1.25857552886 --0.268565565348 --1.24131715298 --0.268569931388 --1.22209578753 --0.268565818667 --1.2028760612 --0.268557749688 --1.18561780453 --0.268550612032 --1.16835984588 --0.26854442805 --1.15110254287 --0.268539205193 --1.13384544849 --0.26853492111 --1.11658880115 --0.268531568349 --1.0993322134 --0.268529161811 --1.08207601309 --0.26852773875 --1.06481975317 --0.268527254462 --1.04756373167 --0.268527701497 --1.03030753135 --0.268529109657 --1.01305145025 --0.26853146404 --0.995795041322 --0.268534772098 --0.978538662195 --0.26853902638 --0.961281865835 --0.268544256687 --0.944024920464 --0.268550418317 --0.92676743865 --0.268557533622 --0.909509718418 --0.268565565348 --0.892251282931 --0.268569931388 --0.873029902578 --0.268565818667 --0.853810191154 --0.268557749688 --0.836551949382 --0.268550612032 --0.819294005632 --0.268544405699 --0.802036702633 --0.268539182842 --0.784779578448 --0.26853492111 --0.767522931099 --0.268531583249 --0.750266358257 --0.268529176712 --0.733010143042 --0.26852773875 --0.715753883123 --0.268527254462 --0.698497876525 --0.268527701497 --0.681241691112 --0.268529109657 --0.663985624909 --0.268531486392 --0.646729215979 --0.268534816802 --0.629472821951 --0.268539048731 --0.61221601069 --0.268544256687 --0.594959080219 --0.268550418317 --0.577701598406 --0.268557533622 --0.560443848371 --0.268565565348 --0.543185427785 --0.268569931388 --0.523964077234 --0.268565818667 --0.504744365811 --0.268557749688 --0.487486109138 --0.268550612032 --0.470228180289 --0.26854442805 --0.452970862389 --0.268539205193 --0.435713723302 --0.26853492111 --0.418457090855 --0.268531583249 --0.401200510561 --0.268529176712 --0.383944302797 --0.26852773875 --0.366688035428 --0.268527254462 --0.34943202883 --0.268527701497 --0.332175828516 --0.268529109657 --0.314919732511 --0.26853146404 --0.297663353384 --0.268534772098 --0.280406974256 --0.26853902638 --0.263150155544 --0.268544256687 --0.245893217623 --0.268550418317 --0.228635732085 --0.268557533622 --0.211377985775 --0.268565565348 --0.194119565189 --0.268569931388 --0.174898214638 --0.251228310168 --0.155670553446 --0.251220740378 --0.138412334025 --0.251214038581 --0.121154425666 --0.251208208501 --0.10389713943 --0.251203298569 --0.0866400375962 --0.251199297607 --0.069383431226 --0.251196175814 --0.0521268872544 --0.251193910837 --0.0348707139492 --0.251192551106 --0.0176144812722 --0.251192111522 --0.000358497025445 --0.251192528754 -0.016897671856 --0.251193851232 -0.0341537185013 --0.251196056604 -0.0514100715518 --0.251199182123 -0.0686664246023 --0.251203190535 -0.0859232079238 --0.251208078116 -0.103180117905 --0.25121384114 -0.120437579229 --0.251220524311 -0.137695282698 --0.251228075475 -0.154953666031 --0.251232162118 -0.17417531088 --0.251228310168 -0.193395297974 --0.251220740378 -0.21065351367 --0.251214057207 -0.227911420167 --0.251208249479 -0.245168700814 --0.251203320921 -0.262425802648 --0.251199278981 -0.279682420194 --0.251196138561 -0.296938963235 --0.251193892211 -0.314195126295 --0.251192551106 -0.331451363862 --0.251192111522 -0.348707348108 --0.251192528754 -0.365963511169 --0.251193851232 -0.383219562471 --0.251196078956 -0.400475919247 --0.251199182123 -0.417732268572 --0.251203168184 -0.434989057481 --0.251208078116 -0.4522459656 --0.251213863492 -0.469503417611 --0.251220546663 -0.486761137843 --0.251228075475 -0.504019513727 --0.251232162118 -0.523241147399 --0.251228310168 -0.542461156845 --0.251220740378 -0.559719383717 --0.251214038581 -0.576977297664 --0.251208208501 -0.594234570861 --0.251203298569 -0.611491650343 --0.251199297607 -0.628748252988 --0.251196157187 -0.646004810929 --0.251193910837 -0.663260996342 --0.251192569733 -0.680517226457 --0.251192111522 -0.697773203254 --0.251192528754 -0.715029373765 --0.251193851232 -0.732285425067 --0.251196056604 -0.749541774392 --0.251199159771 -0.766798123718 --0.251203168184 -0.784054905176 --0.251208078116 -0.801311820746 --0.251213863492 -0.818569287658 --0.251220546663 -0.83582700789 --0.251228075475 -0.853085398674 --0.251232162118 -0.872307017445 --0.251228310168 -0.891526997089 --0.251220740378 -0.908785223961 --0.251214038581 -0.926043137908 --0.251208230853 -0.943300411105 --0.251203320921 -0.960557505489 --0.251199297607 -0.977814123035 --0.251196175814 -0.995070666073 --0.251193910837 -1.01232683659 --0.251192551106 -1.0295830965 --0.251192111522 -1.0468390882 --0.251192528754 -1.06409522891 --0.251193851232 -1.08135128021 --0.251196056604 -1.09860762954 --0.251199159771 -1.11586397886 --0.251203168184 -1.13312077522 --0.251208078116 -1.15037769079 --0.251213863492 -1.1676351428 --0.251220546663 -1.18489286303 --0.251228075475 -1.20215123892 --0.251232162118 -1.22137284279 --0.251228310168 -1.24059283734 --0.251220740378 -1.25785106421 --0.251214038581 -1.27510896325 --0.251208208501 -1.29236623644 --0.251203298569 -1.30962333083 --0.251199297607 -1.32687994838 --0.251196157187 -1.34413650632 --0.251193892211 -1.36139267683 --0.251192551106 -1.37864890695 --0.251192111522 -1.39590489864 --0.251192528754 -1.41316106916 --0.251193851232 -1.43041709066 --0.251196078956 -1.44767346978 --0.251199182123 -1.46492984891 --0.251203168184 -1.48218661547 --0.251208078116 -1.49944350123 --0.25121384114 -1.51670095324 --0.251220505684 -1.53395867347 --0.251228056848 -1.55121704936 --0.251232162118 -1.57043868303 --0.251228310168 -1.58965870738 --0.251220740378 -1.60691693425 --0.251214057207 -1.6241748333 --0.251208249479 -1.6414321363 --0.251203320921 -1.65868923068 --0.251199297607 -1.67594581842 --0.251196175814 -1.69320234656 --0.251193910837 -1.71045854687 --0.251192551106 -1.72771480679 --0.251192111522 -1.74497076869 --0.251192528754 -1.7622269094 --0.251193851232 -1.7794829607 --0.251196056604 -1.79673931002 --0.251199159771 -1.81399565935 --0.251203168184 -1.83125245571 --0.251208078116 -1.84850937128 --0.251213863492 -1.86576685309 --0.251220546663 -1.88302454352 --0.251228075475 -1.90028291941 --0.251232162118 -1.91950458288 --0.251228310168 -1.93872454763 --0.251220740378 -1.9559827745 --0.251214038581 -1.97324070334 --0.251208230853 -1.99049794674 --0.251203320921 -2.00775507093 --0.251199297607 -2.02501171828 --0.251196175814 -2.04226821661 --0.251193910837 -2.05952435732 --0.251192551106 -2.07678061724 --0.251192111522 -2.09403663874 --0.251192528754 -2.11129277945 --0.251193851232 -2.12854880094 --0.251196056604 -2.14580512047 --0.251199159771 -2.16306143999 --0.251203168184 -2.18031829595 --0.251208078116 -2.19757527113 --0.251213863492 -2.21483272314 --0.251220546663 -2.23209041357 --0.251228075475 -2.24934875965 --0.251232162118 -2.26857042312 --0.251228310168 -2.28779041767 --0.251220740378 -2.30504858494 --0.251214038581 -2.32230651379 --0.251208208501 -2.33956384659 --0.251203298569 -2.35682094097 --0.251199297607 -2.37407749892 --0.251196157187 -2.39133399725 --0.251193892211 -2.40859013796 --0.251192551106 -2.42584639788 --0.251192111522 -2.44310241938 --0.251192528754 -2.46035861969 --0.251193851232 -2.47761464119 --0.251196078956 -2.49487102032 --0.251199204475 -2.51212745905 --0.251203190535 -2.52938419581 --0.251208078116 -2.54664105177 --0.251213863492 -2.56389850378 --0.251220546663 -2.58115619421 --0.251228075475 -2.59841459989 --0.251232162118 -2.61763626337 --0.251228310168 -2.63685625791 --0.251220740378 -2.65411442518 --0.251214038581 -2.67137229443 --0.251208230853 -2.68862962723 --0.251203320921 -2.70588672161 --0.251199278981 -2.72314333916 --0.251196157187 -2.7403999567 --0.251193910837 -2.75765615702 --0.251192551106 -2.77491235733 --0.251192111522 -2.79216825962 --0.251192528754 -2.80942440033 --0.251193851232 -2.82668048143 --0.251196056604 -2.84393686056 --0.251199159771 -2.86119323969 --0.251203168184 -2.87844997644 --0.251208078116 -2.89570683241 --0.251213863492 -2.91296434403 --0.251220546663 -2.93022209406 --0.251228075475 -2.94748049975 --0.251232162118 -2.96670210361 --0.251228310168 -2.98592209816 --0.251220740378 -3.00318038463 --0.251214038581 -3.02043825388 --0.251208208501 -3.03769552708 --0.251203298569 -3.05495268107 --0.251199297607 -3.07220929861 --0.251196175814 -3.08946579695 --0.251193910837 -3.10672193766 --0.251192551106 -3.12397819758 --0.251192111522 -3.14123419126 --0.251192528754 --3.12469500303 --0.251193851232 --3.10743898153 --0.251196056604 --3.09018260241 --0.251199182123 --3.07292622328 --0.251203190535 --3.05566942692 --0.251208078116 --3.03841257095 --0.25121384114 --3.02115511894 --0.251220524311 --3.00389736891 --0.251228075475 --2.98663896322 --0.251232162118 --2.96741735935 --0.251228310168 --2.94819742441 --0.251220740378 --2.93093913793 --0.251214057207 --2.91368120909 --0.251208249479 --2.89642393589 --0.251203320921 --2.8791667819 --0.251199278981 --2.86191016436 --0.251196138561 --2.84465366602 --0.251193892211 --2.82739752531 --0.251192551106 --2.81014126539 --0.251192111522 --2.79288524389 --0.251192528754 --2.77562910319 --0.251193851232 --2.75837308168 --0.251196078956 --2.74111676216 --0.251199182123 --2.72386044264 --0.251203168184 --2.70660358668 --0.251208078116 --2.6893466115 --0.251213863492 --2.67208915949 --0.251220546663 --2.65483146906 --0.251228075475 --2.63757312298 --0.251232162118 --2.6183514595 --0.251228310168 --2.59913146496 --0.251220740378 --2.58187329769 --0.251214038581 --2.56461536884 --0.251208208501 --2.54735809565 --0.251203298569 --2.53010100126 --0.251199297607 --2.51284438372 --0.251196157187 --2.49558788538 --0.251193910837 --2.47833174467 --0.251192569733 --2.46107548475 --0.251192111522 --2.44381946325 --0.251192528754 --2.42656326294 --0.251193851232 --2.40930724144 --0.251196056604 --2.39205086231 --0.251199159771 --2.37479448319 --0.251203168184 --2.35753774643 --0.251208078116 --2.34028083086 --0.251213863492 --2.32302337885 --0.251220546663 --2.30576568842 --0.251228075475 --2.28850728273 --0.251232162118 --2.26928561926 --0.251228310168 --2.25006562471 --0.251220740378 --2.23280745745 --0.251214038581 --2.2155495882 --0.251208230853 --2.1982922554 --0.251203320921 --2.18103516102 --0.251199297607 --2.16377854347 --0.251196175814 --2.14652192593 --0.251193910837 --2.12926572561 --0.251192551106 --2.1120095253 --0.251192111522 --2.09475362301 --0.251192528754 --2.0774974823 --0.251193851232 --2.0602414012 --0.251196056604 --2.04298502207 --0.251199159771 --2.02572864294 --0.251203168184 --2.00847187638 --0.251208078116 --1.99121499062 --0.251213863492 --1.97395753861 --0.251220546663 --1.95669981837 --0.251228075475 --1.93944141269 --0.251232162118 --1.92021980882 --0.251228310168 --1.90099981427 --0.251220740378 --1.8837415874 --0.251214038581 --1.86648368835 --0.251208208501 --1.84922638536 --0.251203298569 --1.83196929097 --0.251199297607 --1.81471267343 --0.251196157187 --1.79745611549 --0.251193892211 --1.78019994497 --0.251192551106 --1.76294371486 --0.251192111522 --1.74568775296 --0.251192528754 --1.72843158245 --0.251193851232 --1.71117553115 --0.251196078956 --1.69391921162 --0.251199182123 --1.6766628325 --0.251203168184 --1.65940603614 --0.251208078116 --1.64214915037 --0.25121384114 --1.62489166856 --0.251220505684 --1.60763394833 --0.251228056848 --1.59037557245 --0.251232162118 --1.57115393877 --0.251228310168 --1.55193397403 --0.251220740378 --1.53467574716 --0.251214057207 --1.51741781831 --0.251208249479 --1.50016054511 --0.251203320921 --1.48290342093 --0.251199297607 --1.46564680338 --0.251196175814 --1.44839027524 --0.251193910837 --1.43113410473 --0.251192551106 --1.41387787461 --0.251192111522 --1.39662188291 --0.251192528754 --1.37936571241 --0.251193851232 --1.3621096611 --0.251196056604 --1.34485331178 --0.251199159771 --1.32759699225 --0.251203168184 --1.31034019589 --0.251208078116 --1.29308325052 --0.251213863492 --1.27582579851 --0.251220546663 --1.25856810808 --0.251228075475 --1.2413097322 --0.251232162118 --1.22208806872 --0.251228310168 --1.20286807418 --0.251220740378 --1.18560987711 --0.251214038581 --1.16835197806 --0.251208230853 --1.15109470486 --0.251203320921 --1.13383761048 --0.251199297607 --1.11658099294 --0.251196175814 --1.09932443499 --0.251193910837 --1.08206826448 --0.251192551106 --1.06481203437 --0.251192111522 --1.04755604267 --0.251192528754 --1.03029987216 --0.251193851232 --1.01304382086 --0.251196056604 --0.995787471531 --0.251199159771 --0.978531137108 --0.251203168184 --0.96127435565 --0.251208078116 --0.94401744008 --0.251213863492 --0.926759988069 --0.251220546663 --0.909502282739 --0.251228075475 --0.892243877053 --0.251232162118 --0.873022213578 --0.251228310168 --0.853802248836 --0.251220740378 --0.836544051767 --0.251214038581 --0.819286122918 --0.251208208501 --0.80202883482 --0.251203298569 --0.784771725536 --0.251199297607 --0.76751512289 --0.251196157187 --0.750258594751 --0.251193892211 --0.73300242424 --0.251192551106 --0.715746194124 --0.251192111522 --0.698490217328 --0.251192528754 --0.681234046817 --0.251193851232 --0.663977995515 --0.251196078956 --0.64672164619 --0.251199204475 --0.629465267062 --0.251203190535 --0.612208470702 --0.251208078116 --0.594951584935 --0.251213863492 --0.577694132924 --0.251220546663 --0.560436397791 --0.251228075475 --0.543178007006 --0.251232162118 --0.523956403136 --0.251228310168 --0.504736408591 --0.251220740378 --0.48747818172 --0.251214038581 --0.470220290124 --0.251208230853 --0.452963009477 --0.251203320921 --0.435705900192 --0.251199278981 --0.418449275196 --0.251196157187 --0.401192732155 --0.251193910837 --0.383936569095 --0.251192551106 --0.366680331528 --0.251192111522 --0.349424347282 --0.251192528754 --0.332168176771 --0.251193851232 --0.314912132919 --0.251196056604 --0.297655783593 --0.251199159771 --0.280399419367 --0.251203168184 --0.263142630458 --0.251208078116 --0.24588572979 --0.251213863492 --0.228628281504 --0.251220546663 --0.211370568722 --0.251228075475 --0.194112181663 --0.251232162118 --0.174890544265 --0.233900364488 --0.155662834644 --0.233893282711 --0.138404652476 --0.233887013048 --0.12114677392 --0.2338815853 --0.103889517486 --0.233877006918 --0.0866324491799 --0.233873259276 --0.0693758716807 --0.233870342374 --0.0521193556487 --0.233868233859 --0.0348632130772 --0.233866970986 --0.0176070106681 --0.233866557479 --0.000351056456568 --0.23386695236 -0.0169050816912 --0.233868192881 -0.0341610978357 --0.233870245516 -0.0514174206182 --0.233873147517 -0.068673742935 --0.233876895159 -0.0859304927289 --0.233881473541 -0.103187371046 --0.233886860311 -0.120444806293 --0.233893092721 -0.137702487409 --0.233900137246 -0.15496084094 --0.233903963119 -0.17418275401 --0.233900364488 -0.193403013051 --0.233893282711 -0.210661198944 --0.233887031674 -0.227919075638 --0.233881603926 -0.245176330209 --0.233877006918 -0.26243340224 --0.23387324065 -0.279689989984 --0.233870305121 -0.296946503222 --0.233868215233 -0.31420262903 --0.233866970986 -0.331458829343 --0.233866557479 -0.348714783788 --0.23386695236 -0.365970924497 --0.233868192881 -0.383226945996 --0.233870245516 -0.400483280421 --0.233873147517 -0.417739599943 --0.233876895159 -0.434996344149 --0.233881473541 -0.452253229916 --0.233886860311 -0.469510659576 --0.233893092721 -0.486768327653 --0.233900137246 -0.504026666284 --0.233903963119 -0.523248583079 --0.233900364488 -0.542468860745 --0.233893282711 -0.559727042913 --0.233887013048 -0.576984927058 --0.2338815853 -0.594242185354 --0.233877006918 -0.611499235034 --0.233873259276 -0.628755807876 --0.233870323747 -0.646012336016 --0.233868233859 -0.663268476724 --0.233866989612 -0.680524691939 --0.233866557479 -0.697780653834 --0.23386695236 -0.715036779642 --0.233868192881 -0.732292801141 --0.233870245516 -0.749549120664 --0.233873147517 -0.766805425286 --0.233876895159 -0.784062176943 --0.233881473541 -0.801319077611 --0.233886860311 -0.818576529622 --0.233893092721 -0.835834205151 --0.233900137246 -0.853092551231 --0.233903963119 -0.872314468026 --0.233900364488 -0.891534730792 --0.233893282711 -0.90879291296 --0.233887013048 -0.926050782204 --0.2338815853 -0.943308025599 --0.233877006918 -0.96056509018 --0.233873259276 -0.977821677923 --0.233870342374 -0.995078191161 --0.233868233859 -1.01233431697 --0.233866970986 -1.02959054709 --0.233866557479 -1.04684650898 --0.23386695236 -1.06410261989 --0.233868192881 -1.08135864139 --0.233870264143 -1.09861496091 --0.233873166144 -1.11587128043 --0.233876895159 -1.13312804699 --0.233881473541 -1.15038493276 --0.233886860311 -1.16764235496 --0.233893092721 -1.18490004539 --0.233900137246 -1.20215839148 --0.233903963119 -1.22138029337 --0.233900364488 -1.24060055613 --0.233893282711 -1.2578587234 --0.233887013048 -1.27511659264 --0.2338815853 -1.29237386584 --0.233877006918 -1.30963096023 --0.233873259276 -1.32688754797 --0.233870323747 -1.34414407611 --0.233868215233 -1.36140018702 --0.233866970986 -1.37865635753 --0.233866557479 -1.39591231942 --0.23386695236 -1.41316846013 --0.233868192881 -1.43042448163 --0.233870245516 -1.44768083095 --0.233873147517 -1.46493718028 --0.233876895159 -1.48219391704 --0.233881473541 -1.499450773 --0.233886860311 -1.51670819521 --0.233893074095 -1.53396585584 --0.233900118619 -1.55122420192 --0.233903963119 -1.57044613361 --0.233900364488 -1.58966642618 --0.233893282711 -1.60692462325 --0.233887031674 -1.62418249249 --0.233881603926 -1.64143973589 --0.233877006918 -1.65869680047 --0.233873259276 -1.67595335841 --0.233870342374 -1.69320985675 --0.233868233859 -1.71046602726 --0.233866970986 -1.72772225738 --0.233866557479 -1.74497821927 --0.23386695236 -1.76223435998 --0.233868192881 -1.77949035168 --0.233870245516 -1.7967466414 --0.233873147517 -1.81400296092 --0.233876895159 -1.83125972748 --0.233881473541 -1.84851661325 --0.233886860311 -1.86577406526 --0.233893092721 -1.88303175569 --0.233900137246 -1.90029010177 --0.233903963119 -1.91951200366 --0.233900364488 -1.93873226643 --0.233893282711 -1.9559904635 --0.233887013048 -1.97324833274 --0.2338815853 -1.99050557614 --0.233877006918 -2.00776267052 --0.233873259276 -2.02501922846 --0.233870342374 -2.0422757268 --0.233868233859 -2.05953186751 --0.233866970986 -2.07678806782 --0.233866557479 -2.09404408932 --0.23386695236 -2.11130023003 --0.233868192881 -2.12855619192 --0.233870245516 -2.14581245184 --0.233873147517 -2.16306877136 --0.233876895159 -2.18032556772 --0.233881473541 -2.19758248329 --0.233886860311 -2.2148399353 --0.233893092721 -2.23209762573 --0.233900137246 -2.24935597181 --0.233903963119 -2.2685778737 --0.233900364488 -2.28779810667 --0.233893282711 -2.30505627394 --0.233887013048 -2.32231414318 --0.2338815853 -2.33957141638 --0.233877006918 -2.35682851076 --0.233873259276 -2.3740850687 --0.233870323747 -2.39134156704 --0.233868215233 -2.40859770775 --0.233866970986 -2.42585390806 --0.233866557479 -2.44310986996 --0.23386695236 -2.46036601067 --0.233868192881 -2.47762203216 --0.233870264143 -2.49487841129 --0.233873166144 -2.51213473082 --0.233876895159 -2.52939146757 --0.233881473541 -2.54664832354 --0.233886860311 -2.56390571594 --0.233893092721 -2.58116340637 --0.233900137246 -2.59842181206 --0.233903963119 -2.61764371395 --0.233900364488 -2.63686394691 --0.233893282711 -2.65412211418 --0.233887013048 -2.67137998343 --0.2338815853 -2.68863731622 --0.233877006918 -2.705894351 --0.23387324065 -2.72315090895 --0.233870323747 -2.74040746689 --0.233868233859 -2.7576636076 --0.233866970986 -2.77491980791 --0.233866557479 -2.7921757102 --0.23386695236 -2.80943185091 --0.233868192881 -2.82668787241 --0.233870245516 -2.84394419193 --0.233873147517 -2.86120051146 --0.233876895159 -2.87845724821 --0.233881473541 -2.89571416378 --0.233886860311 -2.91297161579 --0.233893092721 -2.93022924662 --0.233900137246 -2.9474875927 --0.233903963119 -2.96670955419 --0.233900364488 -2.98592984676 --0.233893282711 -3.00318807364 --0.233887013048 -3.02044594288 --0.2338815853 -3.03770315647 --0.233877006918 -3.05496025085 --0.233873259276 -3.07221680879 --0.233870342374 -3.08947330713 --0.233868233859 -3.10672944784 --0.233866970986 -3.12398564815 --0.233866557479 -3.14124158223 --0.23386695236 --3.12468761205 --0.233868192881 --3.10743159056 --0.233870245516 --3.09017527104 --0.233873147517 --3.07291895151 --0.233876895159 --3.05566221476 --0.233881473541 --3.03840529919 --0.233886860311 --3.02114784718 --0.233893092721 --3.00389021635 --0.233900137246 --2.98663187027 --0.233903963119 --2.96740990877 --0.233900364488 --2.9481896162 --0.233893282711 --2.93093138933 --0.233887031674 --2.91367352009 --0.233881603926 --2.8964163065 --0.233877006918 --2.87915921211 --0.23387324065 --2.86190265417 --0.233870305121 --2.84464615583 --0.233868215233 --2.82739001513 --0.233866970986 --2.81013381481 --0.233866557479 --2.79287779331 --0.23386695236 --2.7756216526 --0.233868192881 --2.75836569071 --0.233870245516 --2.74110943079 --0.233873147517 --2.72385311127 --0.233876895159 --2.70659631491 --0.233881473541 --2.68933939934 --0.233886860311 --2.67208194733 --0.233893092721 --2.6548242569 --0.233900137246 --2.63756597042 --0.233903963119 --2.61834406853 --0.233900364488 --2.59912377596 --0.233893282711 --2.58186560869 --0.233887013048 --2.56460773945 --0.2338815853 --2.54735052586 --0.233877006918 --2.53009343147 --0.233873259276 --2.51283681392 --0.233870323747 --2.49558031559 --0.233868233859 --2.47832423449 --0.233866989612 --2.46106797457 --0.233866557479 --2.44381195307 --0.23386695236 --2.42655587196 --0.233868192881 --2.40929985047 --0.233870245516 --2.39204347134 --0.233873147517 --2.37478715181 --0.233876895159 --2.35753041506 --0.233881473541 --2.34027355909 --0.233886860311 --2.32301610708 --0.233893092721 --2.30575841665 --0.233900137246 --2.28850007057 --0.233903963119 --2.26927816868 --0.233900364488 --2.25005793571 --0.233893282711 --2.23279976845 --0.233887013048 --2.2155418992 --0.2338815853 --2.198284626 --0.233877006918 --2.18102759123 --0.233873259276 --2.16377097368 --0.233870342374 --2.14651441574 --0.233868233859 --2.12925827503 --0.233866970986 --2.11200207472 --0.233866557479 --2.09474617243 --0.23386695236 --2.07749003172 --0.233868192881 --2.06023401022 --0.233870264143 --2.0429776907 --0.233873166144 --2.02572137117 --0.233876895159 --2.00846463442 --0.233881473541 --1.99120771885 --0.233886860311 --1.97395029664 --0.233893092721 --1.95669263602 --0.233900137246 --1.93943426013 --0.233903963119 --1.92021235824 --0.233900364488 --1.90099209547 --0.233893282711 --1.8837338984 --0.233887013048 --1.86647602916 --0.2338815853 --1.84921875596 --0.233877006918 --1.83196169138 --0.233873259276 --1.81470513344 --0.233870323747 --1.7974486053 --0.233868215233 --1.78019246459 --0.233866970986 --1.76293626428 --0.233866557479 --1.74568030239 --0.23386695236 --1.72842416168 --0.233868192881 --1.71116816998 --0.233870245516 --1.69391185045 --0.233873147517 --1.67665550112 --0.233876895159 --1.65939873457 --0.233881473541 --1.6421418786 --0.233886860311 --1.6248844564 --0.233893074095 --1.60762676597 --0.233900118619 --1.59036841989 --0.233903963119 --1.57114648819 --0.233900364488 --1.55192622542 --0.233893282711 --1.53466802835 --0.233887031674 --1.51741015911 --0.233881603926 --1.50015291572 --0.233877006918 --1.48289582134 --0.233873259276 --1.46563926339 --0.233870342374 --1.44838276506 --0.233868233859 --1.43112659455 --0.233866970986 --1.41387039423 --0.233866557479 --1.39661446214 --0.23386695236 --1.37935832143 --0.233868192881 --1.36210229993 --0.233870245516 --1.34484598041 --0.233873147517 --1.32758966088 --0.233876895159 --1.31033289432 --0.233881473541 --1.29307600856 --0.233886860311 --1.27581858635 --0.233893092721 --1.25856089592 --0.233900137246 --1.24130254984 --0.233903963119 --1.22208064795 --0.233900364488 --1.20286038518 --0.233893282711 --1.18560221791 --0.233887013048 --1.16834434867 --0.2338815853 --1.15108707547 --0.233877006918 --1.13383001089 --0.233873259276 --1.11657342315 --0.233870342374 --1.09931689501 --0.233868233859 --1.0820607841 --0.233866970986 --1.06480458379 --0.233866557479 --1.04754862189 --0.23386695236 --1.03029248119 --0.233868192881 --1.01303645968 --0.233870245516 --0.995780140162 --0.233873147517 --0.978523820639 --0.233876895159 --0.961267068982 --0.233881473541 --0.944010198116 --0.233886860311 --0.926752761006 --0.233893092721 --0.909495070576 --0.233900137246 --0.892236709595 --0.233903963119 --0.8730147928 --0.233900364488 --0.853794559836 --0.233893282711 --0.836536377668 --0.233887013048 --0.819278478622 --0.2338815853 --0.802021220326 --0.233877006918 --0.784764140844 --0.233873259276 --0.767507568002 --0.233870323747 --0.750251054764 --0.233868215233 --0.732994914055 --0.233866970986 --0.715738728642 --0.233866557479 --0.698482781648 --0.23386695236 --0.681226626038 --0.233868192881 --0.663970589638 --0.233870264143 --0.646714270115 --0.233873166144 --0.629457950592 --0.233876895159 --0.612201184034 --0.233881473541 --0.594944313168 --0.233886860311 --0.577686905861 --0.233893092721 --0.560429215431 --0.233900137246 --0.543170854449 --0.233903963119 --0.523948952555 --0.233900364488 --0.50472868979 --0.233893282711 --0.487470507622 --0.233887013048 --0.470212630928 --0.2338815853 --0.452955372632 --0.233877006918 --0.435698308051 --0.23387324065 --0.418441720307 --0.233870323747 --0.401185207069 --0.233868233859 --0.383929073811 --0.233866970986 --0.366672866047 --0.233866557479 --0.349416911602 --0.23386695236 --0.332160763443 --0.233868192881 --0.314904741943 --0.233870245516 --0.29764842242 --0.233873147517 --0.280392102897 --0.233876895159 --0.263135351241 --0.233881473541 --0.245878469199 --0.233886860311 --0.228621050716 --0.233893092721 --0.211363375187 --0.233900137246 --0.19410501793 --0.233903963119 --0.174883101135 --0.216554630548 --0.155655093491 --0.216548059136 --0.138396944851 --0.216542247683 --0.121139101684 --0.21653721109 --0.103881871328 --0.216532953084 --0.0866248328239 --0.216529455036 --0.0693682841956 --0.216526735574 --0.0521117970347 --0.216524813324 --0.0348556856625 --0.216523647308 --0.0175995151512 --0.216523237526 --0.000343591906132 --0.21652360633 -0.0169125166722 --0.216524772346 -0.0341685027815 --0.216526698321 -0.051424793899 --0.216529384256 -0.0686810845509 --0.21653284505 -0.0859378054738 --0.216537080705 -0.103194652125 --0.216542080045 -0.120452053845 --0.216547876596 -0.137709707022 --0.216554429382 -0.154968027025 --0.216557983309 -0.174190212041 --0.216554630548 -0.193410750479 --0.216548059136 -0.210668906569 --0.216542247683 -0.227926753461 --0.21653721109 -0.245183981955 --0.216532953084 -0.262441024184 --0.216529473662 -0.279697574675 --0.216526754201 -0.296954058111 --0.216524813324 -0.314210169017 --0.216523647308 -0.331466339528 --0.216523237526 -0.34872224927 --0.21652360633 -0.365978360176 --0.21652475372 -0.383234351873 --0.216526679695 -0.400490649045 --0.216529384256 -0.417746946216 --0.21653284505 -0.435003660619 --0.216537080705 -0.452260516584 --0.216542080045 -0.469517916441 --0.216547876596 -0.486775539816 --0.216554429382 -0.504033848643 --0.216557983309 -0.523256063461 --0.216554630548 -0.542476609349 --0.216548059136 -0.559734746814 --0.216542247683 -0.576992601156 --0.21653721109 -0.59424982965 --0.216532953084 -0.611506849527 --0.216529473662 -0.628763392568 --0.216526754201 -0.646019890905 --0.216524813324 -0.663276001811 --0.216523647308 -0.680532187223 --0.216523237526 -0.697788119316 --0.21652360633 -0.715044215321 --0.21652475372 -0.732300192118 --0.216526679695 -0.749556481838 --0.216529384256 -0.766812771559 --0.21653284505 -0.784069493413 --0.216537080705 -0.801326349378 --0.216542080045 -0.818583786488 --0.216547876596 -0.835841432214 --0.216554429382 -0.853099733591 --0.216557983309 -0.872321933508 --0.216554630548 -0.891542464495 --0.216548059136 -0.908800601959 --0.216542247683 -0.926058441401 --0.21653721109 -0.943315684795 --0.216532953084 -0.960572734475 --0.216529455036 -0.977829262614 --0.216526735574 -0.995085746051 --0.216524813324 -1.01234185696 --0.216523647308 -1.02959802747 --0.216523237526 -1.04685395956 --0.21652360633 -1.06411004066 --0.216524772346 -1.08136603236 --0.216526716948 -1.09862235189 --0.216529402882 -1.11587864161 --0.21653284505 -1.13313534856 --0.216537080705 -1.15039217472 --0.216542080045 -1.16764959693 --0.216547876596 -1.18490728736 --0.216554429382 -1.20216557384 --0.216557983309 -1.22138774395 --0.216554630548 -1.24060830474 --0.216548059136 -1.2578664422 --0.216542247683 -1.27512428164 --0.21653721109 -1.29238152504 --0.216532953084 -1.30963858962 --0.216529455036 -1.32689514756 --0.216526735574 -1.3441516161 --0.216524813324 -1.3614076972 --0.216523647308 -1.37866386771 --0.216523237526 -1.39591979981 --0.21652360633 -1.41317591071 --0.21652475372 -1.43043190241 --0.216526661068 -1.44768819213 --0.216529365629 -1.46494451165 --0.21653284505 -1.48220124841 --0.216537080705 -1.49945807457 --0.216542098671 -1.51671546698 --0.216547895223 -1.5339730978 --0.216554429382 -1.55123141408 --0.216557983309 -1.57045361399 --0.216554630548 -1.58967414499 --0.216548059136 -1.60693231225 --0.216542247683 -1.62419018149 --0.21653721109 -1.64144739509 --0.216532953084 -1.65870442986 --0.216529473662 -1.675960958 --0.216526754201 -1.69321742654 --0.216524813324 -1.71047356725 --0.216523647308 -1.72772973776 --0.216523237526 -1.74498566985 --0.21652360633 -1.76224181056 --0.216524772346 -1.77949777246 --0.216526698321 -1.79675403237 --0.216529384256 -1.8140103221 --0.21653284505 -1.83126702905 --0.216537080705 -1.84852388501 --0.216542080045 -1.86578130722 --0.216547876596 -1.88303896785 --0.216554429382 -1.90029731393 --0.216557983309 -1.91951948404 --0.216554630548 -1.93874001503 --0.216548059136 -1.9559981525 --0.216542247683 -1.97325596213 --0.21653721109 -1.99051320553 --0.216532953084 -2.00777027011 --0.216529473662 -2.02502679825 --0.216526754201 -2.04228329658 --0.216524813324 -2.0595394373 --0.216523647308 -2.076795578 --0.216523237526 -2.0940515399 --0.21652360633 -2.111307621 --0.21652475372 -2.12856352329 --0.216526679695 -2.14581984282 --0.216529384256 -2.16307616234 --0.21653284505 -2.1803328991 --0.216537080705 -2.19758975506 --0.216542080045 -2.21484714746 --0.216547876596 -2.23210483789 --0.216554429382 -2.24936318397 --0.216557983309 -2.26858532429 --0.216554630548 -2.28780585527 --0.216548059136 -2.30506402254 --0.216542247683 -2.32232183218 --0.21653721109 -2.33957904577 --0.216532953084 -2.35683608055 --0.216529473662 -2.37409263849 --0.216526754201 -2.39134913683 --0.216524813324 -2.40860527754 --0.216523647308 -2.42586141824 --0.216523237526 -2.44311732054 --0.21652360633 -2.46037346125 --0.216524772346 -2.47762948275 --0.216526698321 -2.49488580227 --0.216529384256 -2.51214206219 --0.21653284505 -2.52939879894 --0.216537099332 -2.5466555953 --0.216542098671 -2.5639129281 --0.216547876596 -2.58117061853 --0.216554429382 -2.59842902422 --0.216557983309 -2.61765116453 --0.216554630548 -2.63687163591 --0.216548059136 -2.65412980318 --0.216542247683 -2.67138767242 --0.21653721109 -2.68864494562 --0.216532953084 -2.7059019804 --0.216529473662 -2.72315853834 --0.216526754201 -2.74041497707 --0.216524813324 -2.75767105818 --0.216523647308 -2.7749273181 --0.216523237526 -2.79218322039 --0.21652360633 -2.80943930149 --0.21652475372 -2.82669532299 --0.216526679695 -2.84395158291 --0.216529384256 -2.86120784283 --0.21653284505 -2.87846457958 --0.216537080705 -2.89572149515 --0.216542080045 -2.91297888756 --0.216547876596 -2.93023645878 --0.216554429382 -2.94749480486 --0.216557983309 -2.96671706438 --0.216554630548 -2.98593759537 --0.216548059136 -3.00319576264 --0.216542247683 -3.02045357227 --0.21653721109 -3.03771078586 --0.216532953084 -3.05496788025 --0.216529455036 -3.07222437859 --0.216526735574 -3.08948087692 --0.216524813324 -3.10673695802 --0.216523647308 -3.12399309874 --0.216523237526 -3.14124903281 --0.21652360633 --3.12468016148 --0.216524772346 --3.10742413998 --0.216526698321 --3.09016788006 --0.216529384256 --3.07291162014 --0.21653284505 --3.05565488338 --0.216537080705 --3.03839796781 --0.216542080045 --3.0211405158 --0.216547876596 --3.00388294458 --0.216554429382 --2.98662465811 --0.216557983309 --2.96740239858 --0.216554630548 --2.9481818676 --0.216548059136 --2.93092370033 --0.216542247683 --2.91366583109 --0.21653721109 --2.8964086175 --0.216532953084 --2.87915158272 --0.216529473662 --2.86189508438 --0.216526754201 --2.84463858604 --0.216524813324 --2.82738244534 --0.216523647308 --2.81012630463 --0.216523237526 --2.79287034273 --0.21652360633 --2.77561426163 --0.21652475372 --2.75835835934 --0.216526679695 --2.74110203981 --0.216529384256 --2.72384572029 --0.21653284505 --2.70658904314 --0.216537080705 --2.68933218718 --0.216542080045 --2.67207473517 --0.216547876596 --2.65481704474 --0.216554429382 --2.63755875826 --0.216557983309 --2.61833661795 --0.216554630548 --2.59911602735 --0.216548059136 --2.58185786009 --0.216542247683 --2.56460005045 --0.21653721109 --2.54734283685 --0.216532953084 --2.53008580208 --0.216529473662 --2.51282924414 --0.216526754201 --2.4955727458 --0.216524813324 --2.47831666469 --0.216523647308 --2.46106046438 --0.216523237526 --2.44380450249 --0.21652360633 --2.42654842138 --0.21652475372 --2.40929245949 --0.216526679695 --2.39203613996 --0.216529384256 --2.37477982044 --0.21653284505 --2.35752308369 --0.216537080705 --2.34026628732 --0.216542080045 --2.32300889492 --0.216547876596 --2.30575120449 --0.216554429382 --2.28849291802 --0.216557983309 --2.2692707777 --0.216554630548 --2.25005024672 --0.216548059136 --2.23279207945 --0.216542247683 --2.2155342102 --0.21653721109 --2.19827699661 --0.216532953084 --2.18101996183 --0.216529455036 --2.16376340389 --0.216526735574 --2.14650696516 --0.216524813324 --2.12925082445 --0.216523647308 --2.11199456453 --0.216523237526 --2.09473866224 --0.21652360633 --2.07748258114 --0.216524772346 --2.06022655964 --0.216526716948 --2.04297029972 --0.216529402882 --2.0257140398 --0.21653284505 --2.00845730305 --0.216537080705 --1.99120044708 --0.216542080045 --1.97394305468 --0.216547876596 --1.95668542385 --0.216554429382 --1.93942710758 --0.216557983309 --1.92020490766 --0.216554630548 --1.90098437667 --0.216548059136 --1.8837262094 --0.216542247683 --1.86646834016 --0.21653721109 --1.84921109676 --0.216532953084 --1.83195406198 --0.216529455036 --1.81469753384 --0.216526735574 --1.79744106531 --0.216524813324 --1.78018495441 --0.216523647308 --1.76292875409 --0.216523237526 --1.745672822 --0.21652360633 --1.72841671109 --0.21652475372 --1.7111607492 --0.216526661068 --1.69390445948 --0.216529365629 --1.67664816975 --0.21653284505 --1.6593914628 --0.216537080705 --1.64213460684 --0.216542098671 --1.62487721443 --0.216547895223 --1.60761955381 --0.216554429382 --1.59036120773 --0.216557983309 --1.57113900781 --0.216554630548 --1.55191847682 --0.216548059136 --1.53466030955 --0.216542247683 --1.51740249991 --0.21653721109 --1.50014528632 --0.216532953084 --1.48288822174 --0.216529473662 --1.4656316936 --0.216526754201 --1.44837519526 --0.216524813324 --1.43111908436 --0.216523647308 --1.41386291385 --0.216523237526 --1.39660701156 --0.21652360633 --1.37935093045 --0.216524772346 --1.36209490895 --0.216526698321 --1.34483858943 --0.216529384256 --1.32758229971 --0.21653284505 --1.31032559275 --0.216537080705 --1.29306876659 --0.216542080045 --1.27581134439 --0.216547876596 --1.25855365395 --0.216554429382 --1.24129536748 --0.216557983309 --1.22207319737 --0.216554630548 --1.20285263658 --0.216548059136 --1.18559449911 --0.216542247683 --1.16833665967 --0.21653721109 --1.15107941628 --0.216532953084 --1.1338223815 --0.216529473662 --1.11656582356 --0.216526754201 --1.09930935502 --0.216524813324 --1.08205327392 --0.216523647308 --1.0647970736 --0.216523237526 --1.04754114151 --0.21652360633 --1.0302850306 --0.21652475372 --1.01302906871 --0.216526679695 --0.995772793889 --0.216529384256 --0.978516489267 --0.21653284505 --0.961259752512 --0.216537080705 --0.944002896547 --0.216542080045 --0.926745504141 --0.216547876596 --0.909487858414 --0.216554429382 --0.892229527235 --0.216557983309 --0.873007327318 --0.216554630548 --0.853786796331 --0.216548059136 --0.836528643965 --0.216542247683 --0.819270804524 --0.21653721109 --0.802013590932 --0.216532953084 --0.784756541252 --0.216529473662 --0.767499983311 --0.216526754201 --0.750243514777 --0.216524813324 --0.73298740387 --0.216523647308 --0.715731218457 --0.216523237526 --0.698475301266 --0.21652360633 --0.681219190359 --0.216524772346 --0.663963183761 --0.216526698321 --0.64670689404 --0.216529384256 --0.629450619221 --0.21653284505 --0.612193897366 --0.216537099332 --0.594937056303 --0.216542098671 --0.577679663897 --0.216547876596 --0.56042201817 --0.216554429382 --0.54316367209 --0.216557983309 --0.523941472172 --0.216554630548 --0.504720956087 --0.216548059136 --0.487462796271 --0.216542247683 --0.470204941929 --0.21653721109 --0.452947720886 --0.216532953084 --0.435690686107 --0.216529473662 --0.418434143067 --0.216526754201 --0.401177659631 --0.216524813324 --0.383921541273 --0.216523647308 --0.366665363312 --0.216523237526 --0.349409453571 --0.21652360633 --0.332153342664 --0.21652475372 --0.314897343517 --0.216526679695 --0.297641053796 --0.216529384256 --0.280384764075 --0.21653284505 --0.263128049672 --0.216537080705 --0.245871197432 --0.216542080045 --0.22861379385 --0.216547876596 --0.211356148124 --0.216554429382 --0.194097820669 --0.216557983309 --0.174875631929 --0.199190735817 --0.155647333712 --0.19918467477 --0.138389218599 --0.199179325253 --0.121131405234 --0.199174687267 --0.103874200955 --0.199170757085 --0.0866171903908 --0.199167519808 --0.0693606734276 --0.199165012688 --0.0521042188629 --0.1991632469 --0.0348481382243 --0.19916215539 --0.0175919979811 --0.199161771685 --0.000336105702447 --0.199162133038 -0.0169199726079 --0.199163209647 -0.0341759282164 --0.19916497916 -0.051432187669 --0.199167452753 -0.0686884475872 --0.199170634151 -0.085945142433 --0.19917454198 -0.103201959282 --0.19917916134 -0.120459327474 --0.199184514582 -0.137716948986 --0.199190553278 -0.154975239188 --0.199193827808 -0.174197696149 --0.199190735817 -0.193418510258 --0.19918467477 -0.210676640272 --0.199179325253 -0.227934453637 --0.199174687267 -0.245191644877 --0.199170757085 -0.262448661029 --0.199167538434 -0.279705181718 --0.199165031314 -0.296961635351 --0.1991632469 -0.314217723906 --0.19916215539 -0.331473864615 --0.199161771685 -0.348729744554 --0.199162114412 -0.365985818207 --0.199163172394 -0.383241780102 --0.199164975434 -0.40049804002 --0.199167467654 -0.417754307389 --0.199170634151 -0.435011006892 --0.19917454198 -0.452267818153 --0.19917916134 -0.469525173307 --0.199184514582 -0.48678278178 --0.199190553278 -0.504041068256 --0.199193827808 -0.523263558746 --0.199190735817 -0.542484387756 --0.19918467477 -0.559742495418 --0.199179325253 -0.577000305057 --0.199174687267 -0.594257488846 --0.199170757085 -0.611514493823 --0.199167538434 -0.628771007061 --0.199165031314 -0.646027475596 --0.1991632469 -0.663283571601 --0.19916215539 -0.680539697408 --0.199161771685 -0.697795584798 --0.199162114412 -0.715051665902 --0.199163172394 -0.732307612896 --0.199164975434 -0.749563872814 --0.199167467654 -0.766820147633 --0.199170634151 -0.784076839685 --0.19917454198 -0.801333650947 --0.19917916134 -0.818591043353 --0.199184514582 -0.835848674178 --0.199190553278 -0.853106960654 --0.199193827808 -0.872329413891 --0.199190735817 -0.891550213099 --0.19918467477 -0.908808335662 --0.199179325253 -0.926066160202 --0.199174687267 -0.943323373794 --0.199170738459 -0.960580378771 --0.199167501182 -0.977836877108 --0.199165012688 -0.995093330741 --0.1991632469 -1.01234939694 --0.19916215539 -1.02960553765 --0.199161771685 -1.04686146974 --0.199162114412 -1.06411755085 --0.199163191021 -1.08137348294 --0.199164994061 -1.09862974286 --0.199167467654 -1.11588600278 --0.199170634151 -1.13314267993 --0.19917454198 -1.15039947629 --0.19917916134 -1.16765686869 --0.199184514582 -1.18491452932 --0.199190553278 -1.202172786 --0.199193827808 -1.22139522433 --0.199190735817 -1.24061605334 --0.19918467477 -1.2578741908 --0.199179325253 -1.27513200044 --0.199174687267 -1.29238918423 --0.199170757085 -1.30964621902 --0.199167519808 -1.32690274715 --0.199165012688 -1.34415918589 --0.1991632469 -1.36141526699 --0.19916215539 -1.3786714077 --0.199161771685 -1.39592728019 --0.199162114412 -1.41318336129 --0.199163172394 -1.43043932318 --0.199164941907 -1.44769558311 --0.199167434127 -1.46495187283 --0.199170634151 -1.48220857978 --0.19917454198 -1.49946537614 --0.199179179967 -1.51672273874 --0.199184533209 -1.53398033977 --0.199190553278 -1.55123862624 --0.199193827808 -1.57046109438 --0.199190735817 -1.58968189359 --0.19918467477 -1.60694003105 --0.199179325253 -1.62419787049 --0.199174687267 -1.64145508408 --0.199170738459 -1.65871208906 --0.199167519808 -1.6759685874 --0.199165031314 -1.69322502613 --0.1991632469 -1.71048110724 --0.19916215539 -1.72773724794 --0.199161771685 -1.74499315023 --0.199162133038 -1.76224926114 --0.199163209647 -1.77950522304 --0.199164994061 -1.79676145315 --0.199167467654 -1.81401768327 --0.199170634151 -1.83127436042 --0.19917454198 -1.84853118658 --0.19917916134 -1.86578857899 --0.199184514582 -1.88304620981 --0.199190553278 -1.90030452609 --0.199193827808 -1.91952699423 --0.199190735817 -1.93874779344 --0.19918467477 -1.9560059011 --0.199179325253 -1.97326368093 --0.199174687267 -1.99052086472 --0.199170738459 -2.0077778697 --0.199167519808 -2.02503436804 --0.199165031314 -2.04229086637 --0.1991632469 -2.05954700708 --0.19916215539 -2.07680314779 --0.199161771685 -2.09405905008 --0.199162114412 -2.11131507158 --0.199163172394 -2.12857097387 --0.199164975434 -2.1458272934 --0.199167467654 -2.16308355332 --0.199170634151 -2.18034029007 --0.19917454198 -2.19759714604 --0.19917916134 -2.21485447884 --0.199184514582 -2.23211210966 --0.199190553278 -2.24937039614 --0.199193827808 -2.26859283447 --0.199190735817 -2.28781366348 --0.19918467477 -2.30507177114 --0.199179325253 -2.32232952118 --0.199174687267 -2.33958673477 --0.199170738459 -2.35684376955 --0.199167519808 -2.37410026789 --0.199165031314 -2.39135670662 --0.1991632469 -2.40861278772 --0.19916215539 -2.42586892843 --0.199161771685 -2.44312483072 --0.199162133038 -2.46038091183 --0.199163209647 -2.47763687372 --0.199164975435 -2.49489313364 --0.199167449027 -2.51214939356 --0.199170634151 -2.52940613032 --0.199174560607 -2.54666292668 --0.199179179967 -2.56392025948 --0.199184514582 -2.5811778903 --0.199190553278 -2.59843623638 --0.199193827808 -2.61765867472 --0.199190735817 -2.63687944412 --0.19918467477 -2.65413755178 --0.199179325253 -2.67139536142 --0.199174687267 -2.68865257502 --0.199170757085 -2.7059096098 --0.199167538434 -2.72316616774 --0.199165031314 -2.74042260647 --0.1991632469 -2.75767862797 --0.19916215539 -2.77493476868 --0.199161771685 -2.79219067097 --0.199162114412 -2.80944675207 --0.199163172394 -2.82670277357 --0.199164960533 -2.84395903349 --0.199167452753 -2.8612152338 --0.199170634151 -2.87847191095 --0.19917454198 -2.89572876692 --0.19917916134 -2.91298609972 --0.199184514582 -2.93024367094 --0.199190553278 -2.94750201702 --0.199193827808 -2.96672451496 --0.199190735817 -2.98594528437 --0.19918467477 -3.00320345163 --0.199179325253 -3.02046126127 --0.199174687267 -3.03771841526 --0.199170757085 -3.05497545004 --0.199167519808 -3.07223194838 --0.199165012688 -3.08948844671 --0.1991632469 -3.10674452782 --0.19916215539 -3.12400066853 --0.199161771685 -3.141256543 --0.199162133038 --3.1246727109 --0.199163209647 --3.1074166894 --0.19916497916 --3.09016042948 --0.199167452753 --3.07290416956 --0.199170634151 --3.05564749241 --0.19917454198 --3.03839069605 --0.19917916134 --3.02113330364 --0.199184514582 --3.00387573242 --0.199190553278 --2.98661744595 --0.199193827808 --2.96739494801 --0.199190735817 --2.9481741786 --0.19918467477 --2.93091601133 --0.199179325253 --2.91365814209 --0.199174687267 --2.8964009881 --0.199170757085 --2.87914401293 --0.199167538434 --2.86188745499 --0.199165031314 --2.84463095665 --0.1991632469 --2.82737487555 --0.19916215539 --2.81011873484 --0.199161771685 --2.79286283255 --0.199162114412 --2.77560681105 --0.199163172394 --2.75835090876 --0.199164975434 --2.74109458923 --0.199167467654 --2.72383832931 --0.199170634151 --2.70658171177 --0.19917454198 --2.68932491541 --0.19917916134 --2.6720674634 --0.199184514582 --2.65480977297 --0.199190553278 --2.6375515461 --0.199193827808 --2.61832910776 --0.199190735817 --2.59910821915 --0.19918467477 --2.58185011149 --0.199179325253 --2.56459236145 --0.199174687267 --2.54733514786 --0.199170757085 --2.53007811308 --0.199167538434 --2.51282161474 --0.199165031314 --2.49556517601 --0.1991632469 --2.47830909491 --0.19916215539 --2.4610529542 --0.199161771685 --2.44379705191 --0.199162114412 --2.4265409708 --0.199163172394 --2.40928506851 --0.199164975434 --2.39202880859 --0.199167467654 --2.37477248907 --0.199170634151 --2.35751575231 --0.19917454198 --2.34025895595 --0.19917916134 --2.32300162315 --0.199184514582 --2.30574399233 --0.199190553278 --2.28848570585 --0.199193827808 --2.26926326752 --0.199190735817 --2.25004243851 --0.19918467477 --2.23278433085 --0.199179325253 --2.21552652121 --0.199174687267 --2.19826930761 --0.199170738459 --2.18101227283 --0.199167501182 --2.1637557745 --0.199165012688 --2.14649939537 --0.1991632469 --2.12924331427 --0.19916215539 --2.11198711395 --0.199161771685 --2.09473121166 --0.199162114412 --2.07747513056 --0.199163191021 --2.06021916866 --0.199164994061 --2.04296296835 --0.199167467654 --2.02570670843 --0.199170634151 --2.00844997167 --0.19917454198 --1.99119314551 --0.19917916134 --1.97393578291 --0.199184514582 --1.95667815209 --0.199190553278 --1.93941986561 --0.199193827808 --1.92019742727 --0.199190735817 --1.90097662807 --0.19918467477 --1.8837184906 --0.199179325253 --1.86646065116 --0.199174687267 --1.84920343756 --0.199170757085 --1.83194643259 --0.199167519808 --1.81468990445 --0.199165012688 --1.79743346572 --0.1991632469 --1.78017741442 --0.19916215539 --1.7629212439 --0.199161771685 --1.74566534161 --0.199162114412 --1.72840926051 --0.199163172394 --1.71115329861 --0.199164941907 --1.6938970387 --0.199167434127 --1.67664080858 --0.199170634151 --1.65938413143 --0.19917454198 --1.64212730527 --0.199179179967 --1.62486994267 --0.199184533209 --1.60761231184 --0.199190553278 --1.59035399556 --0.199193827808 --1.57113152742 --0.199190735817 --1.55191072821 --0.19918467477 --1.53465259075 --0.199179325253 --1.51739478111 --0.199174687267 --1.50013759732 --0.199170738459 --1.48288059234 --0.199167519808 --1.46562409401 --0.199165031314 --1.44836762547 --0.1991632469 --1.43111154437 --0.19916215539 --1.41385540366 --0.199161771685 --1.39659950137 --0.199162133038 --1.37934342027 --0.199163209647 --1.36208745837 --0.199164994061 --1.34483119846 --0.199167467654 --1.32757493854 --0.199170634151 --1.31031826138 --0.19917454198 --1.29306146503 --0.19917916134 --1.27580410242 --0.199184514582 --1.25854644179 --0.199190553278 --1.24128815532 --0.199193827808 --1.22206571698 --0.199190735817 --1.20284488797 --0.19918467477 --1.18558678031 --0.199179325253 --1.16832897067 --0.199174687267 --1.15107175708 --0.199170738459 --1.1338147223 --0.199167519808 --1.11655819416 --0.199165031314 --1.09930175543 --0.1991632469 --1.08204567432 --0.19916215539 --1.06478953361 --0.199161771685 --1.04753366112 --0.199162114412 --1.03027758002 --0.199163172394 --1.01302161812 --0.199164975434 --0.99576537311 --0.199167467654 --0.978509128094 --0.199170634151 --0.96125240624 --0.19917454198 --0.943995565176 --0.19917916134 --0.926738217473 --0.199184514582 --0.909480601549 --0.199190553278 --0.892222300172 --0.199193827808 --0.872999832034 --0.199190735817 --0.853779017925 --0.19918467477 --0.836520895362 --0.199179325253 --0.819263100624 --0.199174687267 --0.802005931735 --0.199170738459 --0.784748911857 --0.199167519808 --0.767492368817 --0.199165031314 --0.750235930085 --0.1991632469 --0.732979863882 --0.19916215539 --0.715723708272 --0.199161771685 --0.698467805982 --0.199162133038 --0.681211724877 --0.199163209647 --0.663955777884 --0.199164975435 --0.646699532866 --0.199167449027 --0.629443272948 --0.199170634151 --0.612186565995 --0.199174560607 --0.594929754734 --0.199179179967 --0.57767239213 --0.199184514582 --0.560414761305 --0.199190553278 --0.543156445026 --0.199193827808 --0.523933991789 --0.199190735817 --0.504713200032 --0.19918467477 --0.487455062568 --0.199179325253 --0.470197238028 --0.199174687267 --0.452940046787 --0.199170757085 --0.435683049262 --0.199167538434 --0.418426536024 --0.199165031314 --0.40117007494 --0.1991632469 --0.383913986385 --0.19916215539 --0.366657838226 --0.199161771685 --0.349401958287 --0.199162114412 --0.332145884633 --0.199163172394 --0.314889930189 --0.199164960533 --0.29763367027 --0.199167452753 --0.280377395451 --0.199170634151 --0.26312071085 --0.19917454198 --0.245863899589 --0.19917916134 --0.228606522083 --0.199184514582 --0.211348902434 --0.199190553278 --0.194090612233 --0.199193827808 --0.17486814782 --0.181828394532 --0.155639346689 --0.181822847575 --0.138381261378 --0.181817945093 --0.121123475954 --0.181813709438 --0.103866308927 --0.181810133159 --0.0866093300283 --0.18180718273 --0.0693528456613 --0.181804876775 --0.0520964227617 --0.181803248823 --0.0348403728567 --0.181802269071 --0.0175842635799 --0.18180193007 --0.000328402500603 --0.181802250445 -0.0169276439119 --0.18180321902 -0.0341835664585 --0.181804828346 -0.0514397956431 --0.181807097048 -0.0686960266903 --0.181810010225 -0.0859526898712 --0.181813586503 -0.103209473193 --0.181817822159 -0.120466811582 --0.181822720915 -0.137724403292 --0.181828226895 -0.154982663691 --0.181831214577 -0.1742054075 --0.181828394532 -0.193426501006 --0.181822847575 -0.210684597492 --0.181817945093 -0.227942381054 --0.181813709438 -0.245199538767 --0.181810133159 -0.262456521392 --0.18180718273 -0.279713012278 --0.181804876775 -0.296969436109 --0.181803248823 -0.314225487411 --0.181802269071 -0.331481598318 --0.18180193007 -0.348737448454 --0.181802231818 -0.365993477404 --0.181803200394 -0.383249409497 --0.181804843247 -0.400505647063 --0.181807111949 -0.417761877179 --0.181810010225 -0.435018546879 --0.181813601404 -0.452275335789 --0.181817837059 -0.46953266114 --0.181822720915 -0.486790239811 --0.181828226895 -0.504048496485 --0.181831214577 -0.523271262646 --0.181828394532 -0.542492374778 --0.181822847575 -0.559750452638 --0.181817945093 -0.577008232474 --0.181813709438 -0.594265386462 --0.181810133159 -0.611522361636 --0.18180718273 -0.628778845072 --0.181804876775 -0.646035268903 --0.181803248823 -0.663291320205 --0.181802269071 -0.68054741621 --0.18180193007 -0.697803273797 --0.181802231818 -0.71505934 --0.181803200394 -0.732315272093 --0.181804843247 -0.749571487308 --0.181807111949 -0.766827717423 --0.181810010225 -0.784084379673 --0.181813601404 -0.801341176033 --0.181817837059 -0.818598508835 --0.181822720915 -0.835856094956 --0.181828226895 -0.853114366531 --0.181831214577 -0.87233710289 --0.181828394532 -0.891558200121 --0.181822847575 -0.908816307783 --0.181817945093 -0.926074102521 --0.181813709438 -0.943331256509 --0.181810114533 -0.960588216782 --0.181807164103 -0.977844700217 --0.181804876775 -0.995101138949 --0.181803248823 -1.01235720515 --0.181802269071 -1.02961331606 --0.18180193007 -1.04686915875 --0.181802231818 -1.06412521005 --0.181803200394 -1.08138114214 --0.181804843247 -1.09863734245 --0.181807111949 -1.11589357257 --0.181810010225 -1.13315024972 --0.181813601404 -1.15040701628 --0.181817837059 -1.16766437888 --0.181822720915 -1.1849219799 --0.181828226895 -1.20218020678 --0.181831214577 -1.22140294313 --0.181828394532 -1.24062404036 --0.181822847575 -1.25788214802 --0.181817963719 -1.27513992786 --0.181813728064 -1.29239708185 --0.181810133159 -1.30965408683 --0.18180718273 -1.32691058516 --0.181804876775 -1.34416699409 --0.181803248823 -1.36142304539 --0.181802269071 -1.3786791265 --0.18180193007 -1.39593496918 --0.181802231818 -1.41319102049 --0.181803200394 -1.43044695258 --0.181804828346 -1.4477032125 --0.181807097048 -1.46495944262 --0.181810010225 -1.48221608996 --0.181813601404 -1.49947288632 --0.181817837059 -1.51673021913 --0.181822720915 -1.53398779035 --0.181828226895 -1.55124604702 --0.181831214577 -1.57046878338 --0.181828394532 -1.58968988061 --0.181822847575 -1.60694798827 --0.181817963719 -1.62420579791 --0.181813728064 -1.6414629817 --0.181810114533 -1.65871992707 --0.181807164103 -1.67597639561 --0.181804876775 -1.69323283434 --0.181803248823 -1.71048888564 --0.181802269071 -1.72774499655 --0.18180193007 -1.74500086904 --0.181802250445 -1.76225692034 --0.18180321902 -1.77951285243 --0.181804843247 -1.79676905274 --0.181807111949 -1.81402525306 --0.181810010225 -1.83128193021 --0.181813601404 -1.84853872657 --0.181817837059 -1.86579608917 --0.181822720915 -1.88305366039 --0.181828226895 -1.90031191707 --0.181831214577 -1.91953468323 --0.181828394532 -1.93875578046 --0.181822847575 -1.95601385832 --0.181817945093 -1.97327160835 --0.181813709438 -1.99052876234 --0.181810114533 -2.00778570771 --0.181807164103 -2.02504217624 --0.181804876775 -2.04229867458 --0.181803248823 -2.05955475569 --0.181802269071 -2.07681083679 --0.18180193007 -2.09406673908 --0.181802231818 -2.11132276058 --0.181803200394 -2.12857866287 --0.181804843247 -2.14583492279 --0.181807111949 -2.16309112311 --0.181810010225 -2.18034780026 --0.181813601404 -2.19760459662 --0.181817837059 -2.21486192942 --0.181822720915 -2.23211950064 --0.181828226895 -2.24937778711 --0.181831214577 -2.26860058308 --0.181828394532 -2.28782165051 --0.181822847575 -2.30507969856 --0.181817963719 -2.3223374486 --0.181813728064 -2.33959466219 --0.181810114533 -2.35685169697 --0.181807164103 -2.3741081357 --0.181804876775 -2.39136451483 --0.181803248823 -2.40862053633 --0.181802269071 -2.42587667704 --0.18180193007 -2.44313257932 --0.181802250445 -2.46038860083 --0.18180321902 -2.47764450312 --0.181804843247 -2.49490070343 --0.181807111949 -2.51215696335 --0.181810010225 -2.5294137001 --0.181813601404 -2.54667049646 --0.181817837059 -2.56392776966 --0.181822720915 -2.58118534088 --0.181828226895 -2.59844362736 --0.181831214577 -2.61766636372 --0.181828394532 -2.63688743115 --0.181822847575 -2.6541454792 --0.181817963719 -2.67140328884 --0.181813728064 -2.68866050243 --0.181810133159 -2.70591747761 --0.18180718273 -2.72317397594 --0.181804876775 -2.74043041468 --0.181803248823 -2.75768643618 --0.181802269071 -2.77494251728 --0.18180193007 -2.79219835996 --0.181802231818 -2.80945444107 --0.181803200394 -2.82671040297 --0.181804828346 -2.84396660328 --0.181807097048 -2.86122280359 --0.181810010225 -2.87847948074 --0.181813601404 -2.89573627711 --0.181817837059 -2.91299360991 --0.181822720915 -2.93025118112 --0.181828226895 -2.947509408 --0.181831214577 -2.96673214436 --0.181828394532 -2.98595327139 --0.181822847575 -3.00321143866 --0.181817945093 -3.02046918869 --0.181813709438 -3.03772628308 --0.181810133159 -3.05498325825 --0.18180718273 -3.07223975658 --0.181804876775 -3.08949625492 --0.181803248823 -3.10675233603 --0.181802269071 -3.12400841713 --0.18180193007 -3.14126423199 --0.181802250445 --3.1246650219 --0.18180321902 --3.10740906 --0.181804828346 --3.09015280008 --0.181807097048 --3.07289654016 --0.181810010225 --3.05563992262 --0.181813586503 --3.03838318586 --0.181817822159 --3.02112585306 --0.181822720915 --3.00386828184 --0.181828226895 --2.98661005497 --0.181831214577 --2.96738731861 --0.181828394532 --2.94816619158 --0.181822847575 --2.93090802431 --0.181817945093 --2.91365027428 --0.181813709438 --2.89639317989 --0.181810133159 --2.87913620472 --0.18180718273 --2.86187964678 --0.181804876775 --2.84462314844 --0.181803248823 --2.82736712694 --0.181802269071 --2.81011104584 --0.18180193007 --2.79285520315 --0.181802231818 --2.77559918165 --0.181803200394 --2.75834327936 --0.181804843247 --2.74108701944 --0.181807111949 --2.72383075952 --0.181810010225 --2.70657414198 --0.181813601404 --2.68931740523 --0.181817837059 --2.67206001282 --0.181822720915 --2.65480238199 --0.181828226895 --2.63754415512 --0.181831214577 --2.61832135916 --0.181828394532 --2.59910023212 --0.181822847575 --2.58184218407 --0.181817945093 --2.56458443403 --0.181813709438 --2.54732728004 --0.181810133159 --2.53007024526 --0.18180718273 --2.51281374693 --0.181804876775 --2.4955573678 --0.181803248823 --2.4783013463 --0.181802269071 --2.4610452652 --0.18180193007 --2.44378936291 --0.181802231818 --2.4265332818 --0.181803200394 --2.40927737952 --0.181804843247 --2.3920211792 --0.181807111949 --2.37476497889 --0.181810010225 --2.35750830173 --0.181813601404 --2.34025144577 --0.181817837059 --2.32299411297 --0.181822720915 --2.30573654175 --0.181828226895 --2.28847825527 --0.181831214577 --2.26925551891 --0.181828394532 --2.25003445148 --0.181822847575 --2.23277640343 --0.181817945093 --2.21551859379 --0.181813709438 --2.19826138019 --0.181810114533 --2.18100440502 --0.181807164103 --2.16374796629 --0.181804876775 --2.14649158716 --0.181803248823 --2.12923550606 --0.181802269071 --2.11197936535 --0.18180193007 --2.09472352267 --0.181802231818 --2.07746744156 --0.181803200394 --2.06021153927 --0.181804843247 --2.04295539856 --0.181807111949 --2.02569913864 --0.181810010225 --2.00844243169 --0.181813601404 --1.99118563533 --0.181817837059 --1.97392830253 --0.181822720915 --1.9566707015 --0.181828226895 --1.93941241503 --0.181831214577 --1.92018970847 --0.181828394532 --1.90096864104 --0.181822847575 --1.88371053338 --0.181817963719 --1.86645272374 --0.181813728064 --1.84919553995 --0.181810133159 --1.83193856477 --0.18180718273 --1.81468206644 --0.181804876775 --1.79742565751 --0.181803248823 --1.78016963601 --0.181802269071 --1.7629135251 --0.18180193007 --1.74565765262 --0.181802231818 --1.72840160131 --0.181803200394 --1.71114566922 --0.181804828346 --1.69388943911 --0.181807097048 --1.67663323879 --0.181810010225 --1.65937656164 --0.181813601404 --1.64211976528 --0.181817837059 --1.62486243248 --0.181822720915 --1.60760483145 --0.181828226895 --1.59034657478 --0.181831214577 --1.57112383842 --0.181828394532 --1.55190274119 --0.181822847575 --1.53464463353 --0.181817963719 --1.5173868537 --0.181813728064 --1.5001296997 --0.181810114533 --1.48287272453 --0.181807164103 --1.465616256 --0.181804876775 --1.44835984707 --0.181803248823 --1.43110379577 --0.181802269071 --1.41384765506 --0.18180193007 --1.39659178257 --0.181802250445 --1.37933573127 --0.18180321902 --1.36207982898 --0.181804843247 --1.34482362866 --0.181807111949 --1.32756736875 --0.181810010225 --1.3103106916 --0.181813601404 --1.29305392504 --0.181817837059 --1.27579662204 --0.181822720915 --1.25853902102 --0.181828226895 --1.24128073454 --0.181831214577 --1.22205799818 --0.181828394532 --1.20283693075 --0.181822847575 --1.18557885289 --0.181817945093 --1.16832104325 --0.181813709438 --1.15106385946 --0.181810114533 --1.13380685448 --0.181807164103 --1.11655035615 --0.181804876775 --1.09929394722 --0.181803248823 --1.08203789592 --0.181802269071 --1.06478181481 --0.18180193007 --1.04752597213 --0.181802231818 --1.03026992082 --0.181803200394 --1.01301398873 --0.181804843247 --0.995757743716 --0.181807111949 --0.9785015136 --0.181810010225 --0.961244851351 --0.181813601404 --0.943988069892 --0.181817837059 --0.92673073709 --0.181822720915 --0.909473150969 --0.181828226895 --0.892214879394 --0.181831214577 --0.872992128134 --0.181828394532 --0.853771045804 --0.181822847575 --0.836512953043 --0.181817963719 --0.819255173206 --0.181813728064 --0.801998019218 --0.181810114533 --0.784741029143 --0.181807164103 --0.767484545707 --0.181804876775 --0.750228121877 --0.181803248823 --0.732972070575 --0.181802269071 --0.715715974569 --0.18180193007 --0.698460102082 --0.181802250445 --0.681204050779 --0.18180321902 --0.663948148489 --0.181804843247 --0.646691918373 --0.181807111949 --0.629435673356 --0.181810010225 --0.612178996205 --0.181813601404 --0.594922229648 --0.181817837059 --0.577664911747 --0.181822720915 --0.560407295823 --0.181828226895 --0.543149024248 --0.181831214577 --0.523926287889 --0.181828394532 --0.50470520556 --0.181822847575 --0.487447120249 --0.181817963719 --0.470189325512 --0.181813728064 --0.452932156623 --0.181810133159 --0.435675188899 --0.18180718273 --0.418418705464 --0.181804876775 --0.401162274182 --0.181803248823 --0.38390622288 --0.181802269071 --0.366650111974 --0.18180193007 --0.349394254387 --0.181802231818 --0.332138210535 --0.181803200394 --0.314882285893 --0.181804828346 --0.297626055777 --0.181807097048 --0.280369825661 --0.181810010225 --0.263113163411 --0.181813601404 --0.245856378228 --0.181817837059 --0.228599045426 --0.181822720915 --0.211341455579 --0.181828226895 --0.194083191454 --0.181831214577 --0.174860440194 --0.164495110512 --0.155631296336 --0.164490085095 --0.138373240828 --0.164485640824 --0.121115490794 --0.164481792599 --0.103858361021 --0.164478555322 --0.0866014137864 --0.164475884289 --0.0693449564278 --0.164473794401 --0.0520885661244 --0.164472319186 --0.0348325511441 --0.164471443743 --0.0175764726009 --0.164471141994 --0.000320642488077 --0.164471421391 -0.0169353717938 --0.164472304284 -0.03419126058 --0.164473779499 -0.0514474594965 --0.164475832134 -0.0687036588788 --0.16447846964 -0.0859602876008 --0.164481721818 -0.103217044845 --0.164485551417 -0.120474353433 --0.164489977062 -0.137731906027 --0.164494965226 -0.154990132898 --0.164497673511 -0.17421316728 --0.164495110512 -0.193434547633 --0.164490085095 -0.210692610592 --0.164485640824 -0.227950364351 --0.164481792599 -0.245207495987 --0.164478555322 -0.26246444881 --0.164475884289 -0.279720902443 --0.164473794401 -0.29697728157 --0.164472319186 -0.31423330307 --0.164471443743 -0.331489384174 --0.164471141994 -0.348745204508 --0.164471421391 -0.366001211107 --0.164472304284 -0.383257105946 --0.164473779499 -0.40051330626 --0.164475832134 -0.417769499123 --0.16447846964 -0.43502613157 --0.164481721818 -0.452282890677 --0.164485551417 -0.469540201128 --0.164489977062 -0.486797757447 --0.164494965226 -0.504055976867 --0.164497673511 -0.523279011249 --0.164495110512 -0.542500391602 --0.164490085095 -0.55975843966 --0.164485640824 -0.577016204596 --0.164481792599 -0.594273358584 --0.164478555322 -0.611530318856 --0.164475884289 -0.628786757589 --0.164473794401 -0.646043136716 --0.164472319186 -0.663299143315 --0.164471443743 -0.680555209518 --0.164471141994 -0.697811037302 --0.164471421391 -0.715067058802 --0.164472304284 -0.732322961092 --0.164473779499 -0.749579161406 --0.164475832134 -0.766835361719 --0.16447846964 -0.784091994166 --0.164481721818 -0.801348760724 --0.164485551417 -0.818606048822 --0.164489977062 -0.835863590241 --0.164494965226 -0.853121832013 --0.164497673511 -0.872344866395 --0.164495110512 -0.891566231847 --0.164490085095 -0.908824309707 --0.164485640824 -0.926082074642 --0.164481792599 -0.943339183926 --0.164478555322 -0.960596129298 --0.164475884289 -0.977852582932 --0.164473794401 -0.995108991863 --0.164472319186 -1.01236504316 --0.164471443743 -1.02962109446 --0.164471141994 -1.04687687755 --0.164471421391 -1.06413289905 --0.164472304284 -1.08138883114 --0.164473779499 -1.09864503145 --0.164475832134 -1.11590123177 --0.16447846964 -1.13315787912 --0.164481721818 -1.15041461587 --0.164485551417 -1.16767191887 --0.164489977062 -1.18492946029 --0.164494965226 -1.20218768716 --0.164497673511 -1.22141072154 --0.164495110512 -1.24063208699 --0.164490085095 -1.25789013505 --0.16448565945 -1.27514788508 --0.164481811225 -1.29240503907 --0.164478555322 -1.30966198444 --0.164475884289 -1.32691845298 --0.164473794401 -1.3441748321 --0.164472319186 -1.3614308238 --0.164471443743 -1.37868690491 --0.164471141994 -1.39594274759 --0.164471421391 -1.41319876909 --0.164472304284 -1.43045464158 --0.164473779499 -1.44771084189 --0.164475832134 -1.46496704221 --0.16447846964 -1.48222365975 --0.164481721818 -1.49948042631 --0.164485551417 -1.51673775911 --0.164489977062 -1.53399533034 --0.164494965226 -1.55125355721 --0.164497673511 -1.57047656179 --0.164495110512 -1.58969792724 --0.164490085095 -1.6069560051 --0.16448565945 -1.62421378493 --0.164481811225 -1.64147090912 --0.164478555322 -1.65872782469 --0.164475884289 -1.67598426342 --0.164473794401 -1.69324067235 --0.164472319186 -1.71049672365 --0.164471443743 -1.72775280476 --0.164471141994 -1.74500864744 --0.164471402764 -1.76226463914 --0.164472285658 -1.77952051163 --0.164473779499 -1.79677671194 --0.164475832134 -1.81403291225 --0.16447846964 -1.8312895596 --0.164481721818 -1.84854632616 --0.164485551417 -1.86580362916 --0.164489977062 -1.88306114078 --0.164494965226 -1.90031936765 --0.164497673511 -1.91954243183 --0.164495110512 -1.93876382709 --0.164490085095 -1.95602187514 --0.164485640824 -1.97327959537 --0.164481792599 -1.99053671956 --0.164478555322 -2.00779363513 --0.164475884289 -2.02505010366 --0.164473794401 -2.04230654239 --0.164472319186 -2.0595625639 --0.164471443743 -2.076818645 --0.164471141994 -2.09407448769 --0.164471421391 -2.11133044958 --0.164472304284 -2.12858635187 --0.164473779499 -2.14584261179 --0.164475832134 -2.1630987525 --0.16447846964 -2.18035537004 --0.164481721818 -2.1976121068 --0.164485551417 -2.2148694396 --0.164489977062 -2.23212701082 --0.164494965226 -2.24938523769 --0.164497673511 -2.26860833168 --0.164495110512 -2.28782969713 --0.164490085095 -2.30508774519 --0.16448565945 -2.32234549522 --0.164481811225 -2.33960264921 --0.164478555322 -2.35685962439 --0.164475884289 -2.37411600351 --0.164473794401 -2.39137238264 --0.164472319186 -2.40862840414 --0.164471443743 -2.42588448524 --0.164471141994 -2.44314032793 --0.164471421391 -2.46039634943 --0.164472304284 -2.47765225172 --0.164473779499 -2.49490839243 --0.164475832134 -2.51216465235 --0.16447846964 -2.5294213295 --0.164481721818 -2.54667806625 --0.164485551417 -2.56393533945 --0.164489977062 -2.58119285107 --0.164494965226 -2.59845107794 --0.164497673511 -2.61767411232 --0.164495110512 -2.63689547777 --0.164490085095 -2.65415352583 --0.16448565945 -2.67141127586 --0.164481811225 -2.68866842985 --0.164478555322 -2.70592540503 --0.164475884289 -2.72318184376 --0.164473794401 -2.74043822288 --0.164472319186 -2.75769424439 --0.164471443743 -2.77495032549 --0.164471141994 -2.79220616817 --0.164471421391 -2.80946218967 --0.164472304284 -2.82671803236 --0.164473779499 -2.84397417307 --0.164475832134 -2.86123043299 --0.16447846964 -2.87848711014 --0.164481721818 -2.89574384689 --0.164485551417 -2.91300117969 --0.164489977062 -2.93025869131 --0.164494965226 -2.94751685858 --0.164497673511 -2.96673989296 --0.164495110512 -2.98596131802 --0.164490085095 -3.00321942568 --0.164485640824 -3.02047717571 --0.164481792599 -3.0377342701 --0.164478555322 -3.05499118567 --0.164475884289 -3.072247684 --0.164473794401 -3.08950412273 --0.164472319186 -3.10676014423 --0.164471443743 -3.12401622534 --0.164471141994 -3.1412720402 --0.164471421391 --3.12465727329 --0.164472304284 --3.1074014306 --0.164473779499 --3.09014523029 --0.164475832134 --3.07288897038 --0.16447846964 --3.05563235283 --0.164481721818 --3.03837561607 --0.164485551417 --3.02111828327 --0.164489977062 --3.00386071205 --0.164494965226 --2.98660254479 --0.164497673511 --2.96737957001 --0.164495110512 --2.94815814495 --0.164490085095 --2.93090003729 --0.164485640824 --2.91364228726 --0.164481792599 --2.89638519287 --0.164478555322 --2.8791282773 --0.164475884289 --2.86187177897 --0.164473794401 --2.84461534023 --0.164472319186 --2.82735931874 --0.164471443743 --2.81010323763 --0.164471141994 --2.79284745455 --0.164471421391 --2.77559149265 --0.164472304284 --2.75833559036 --0.164473779499 --2.74107933044 --0.164475832134 --2.72382313013 --0.16447846964 --2.70656651259 --0.164481721818 --2.68930977583 --0.164485551417 --2.67205250263 --0.164489977062 --2.65479493141 --0.164494965226 --2.63753664493 --0.164497673511 --2.61831361055 --0.164495110512 --2.5990923047 --0.164490085095 --2.58183425665 --0.164485640824 --2.56457644701 --0.164481792599 --2.54731929302 --0.164478555322 --2.53006231785 --0.164475884289 --2.51280587912 --0.164473794401 --2.49554949999 --0.164472319186 --2.47829347849 --0.164471443743 --2.46103745699 --0.164471141994 --2.4437816143 --0.164471421391 --2.4265255332 --0.164472304284 --2.40926963091 --0.164473779499 --2.3920134902 --0.164475832134 --2.37475734949 --0.16447846964 --2.35750073195 --0.164481721818 --2.34024393559 --0.164485551417 --2.32298660278 --0.164489977062 --2.30572903156 --0.164494965226 --2.28847080469 --0.164497673511 --2.26924777031 --0.164495110512 --2.25002640486 --0.164490085095 --2.2327683568 --0.164485640824 --2.21551060677 --0.164481792599 --2.19825345278 --0.164478555322 --2.1809964776 --0.164475884289 --2.16374009848 --0.164473794401 --2.14648371935 --0.164472319186 --2.12922763825 --0.164471443743 --2.11197155714 --0.164471141994 --2.09471577406 --0.164471421391 --2.07745975256 --0.164472304284 --2.06020385027 --0.164473779499 --2.04294770956 --0.164475832134 --2.02569144964 --0.16447846964 --2.0084348023 --0.164481721818 --1.99117809534 --0.164485551417 --1.97392076254 --0.164489977062 --1.95666319132 --0.164494965226 --1.93940493465 --0.164497673511 --1.92018193006 --0.164495110512 --1.90096059441 --0.164490085095 --1.88370251656 --0.16448565945 --1.86644473672 --0.164481811225 --1.84918761253 --0.164478555322 --1.83193066716 --0.164475884289 --1.81467419863 --0.164473794401 --1.7974178195 --0.164472319186 --1.780161798 --0.164471443743 --1.7629057169 --0.164471141994 --1.74564987421 --0.164471421391 --1.72839388252 --0.164472304284 --1.71113801003 --0.164473779499 --1.69388180971 --0.164475832134 --1.6766256094 --0.16447846964 --1.65936896205 --0.164481721818 --1.64211219549 --0.164485551417 --1.62485489249 --0.164489977062 --1.60759735107 --0.164494965226 --1.5903391242 --0.164497673511 --1.57111608982 --0.164495110512 --1.55189469457 --0.164490085095 --1.53463661671 --0.16448565945 --1.51737886667 --0.164481811225 --1.50012174248 --0.164478555322 --1.48286479711 --0.164475884289 --1.46560835838 --0.164473794401 --1.44835197926 --0.164472319186 --1.43109595776 --0.164471443743 --1.41383987665 --0.164471141994 --1.39658406377 --0.164471402764 --1.37932804227 --0.164472285658 --1.36207213998 --0.164473779499 --1.34481593967 --0.164475832134 --1.32755973935 --0.16447846964 --1.310303092 --0.164481721818 --1.29304635525 --0.164485551417 --1.27578908205 --0.164489977062 --1.25853151083 --0.164494965226 --1.24127325415 --0.164497673511 --1.22205018997 --0.164495110512 --1.20282885432 --0.164490085095 --1.18557083607 --0.164485640824 --1.16831305623 --0.164481792599 --1.15105590224 --0.164478555322 --1.13379895687 --0.164475884289 --1.11654248833 --0.164473794401 --1.09928610921 --0.164472319186 --1.08203011751 --0.164471443743 --1.06477403641 --0.164471141994 --1.04751819372 --0.164471421391 --1.03026217222 --0.164472304284 --1.01300629974 --0.164473779499 --0.99575008452 --0.164475832134 --0.978493869304 --0.16447846964 --0.961237251758 --0.164481721818 --0.943980515003 --0.164485551417 --0.926723197103 --0.164489977062 --0.909465625882 --0.164494965226 --0.892207399011 --0.164497673511 --0.872984364629 --0.164495110512 --0.853762999177 --0.164490085095 --0.836504936218 --0.16448565945 --0.819247186184 --0.164481811225 --0.801990047097 --0.164478555322 --0.784733086824 --0.164475884289 --0.767476662993 --0.164473794401 --0.750220268965 --0.164472319186 --0.732964232564 --0.164471443743 --0.715708166361 --0.164471141994 --0.698452338577 --0.164471421391 --0.681196331978 --0.164472304284 --0.663940444588 --0.164473779499 --0.646684229374 --0.164475832134 --0.629428014159 --0.16447846964 --0.612171381712 --0.164481721818 --0.594914659858 --0.164485551417 --0.57765737176 --0.164489977062 --0.560399800539 --0.164494965226 --0.543141558766 --0.164497673511 --0.523918524384 --0.164495110512 --0.504697158933 --0.164490085095 --0.487439103425 --0.16448565945 --0.470181338489 --0.164481811225 --0.452924199403 --0.164478555322 --0.435667254031 --0.164475884289 --0.418410815298 --0.164473794401 --0.401154428721 --0.164472319186 --0.38389839977 --0.164471443743 --0.366642318666 --0.164471141994 --0.349386490881 --0.164471421391 --0.332130484283 --0.164472304284 --0.314874589443 --0.164473779499 --0.29761838913 --0.164475832134 --0.280362196266 --0.16447846964 --0.263105556369 --0.164481721818 --0.245848800987 --0.164485551417 --0.228591505438 --0.164489977062 --0.211333949119 --0.164494965226 --0.194075711071 --0.164497673511 --0.174852672964 --0.147171076387 --0.155623398721 --0.147166572511 --0.13836536929 --0.147162601352 --0.121107650921 --0.147159144282 --0.103850554675 --0.147156242281 --0.0865936391056 --0.147153861821 --0.0693372124806 --0.147151980549 --0.0520808538422 --0.147150650621 --0.0348248714581 --0.147149857134 --0.0175688241143 --0.147149577737 --0.000313024735077 --0.147149834782 -0.0169429574162 --0.147150631994 -0.0341988145374 --0.147151961922 -0.0514549827203 --0.147153805941 -0.0687111495063 --0.1471561715 -0.0859677474946 --0.147159092128 -0.103224476799 --0.147162511945 -0.120481755584 --0.147166483105 -0.137739274651 --0.147170972079 -0.15499747172 --0.147173389792 -0.174220789224 --0.147171076387 -0.193442448973 --0.147166572511 -0.210700478405 --0.147162601352 -0.227958198637 --0.147159144282 -0.245215304196 --0.147156242281 -0.262472227216 --0.147153861821 -0.279728651047 --0.147151980549 -0.296985000372 --0.147150650621 -0.314240984619 --0.147149857134 -0.331497035921 --0.147149577737 -0.348752833903 --0.147149834782 -0.36600881815 --0.147150631994 -0.383264675736 --0.147151961922 -0.400520838797 --0.147153805941 -0.417776994407 --0.1471561715 -0.435033589601 --0.147159077227 -0.452290318906 --0.147162497043 -0.469547607005 --0.147166483105 -0.486805140972 --0.147170972079 -0.50406332314 --0.147173389792 -0.523286610842 --0.147171076387 -0.542508274317 --0.147166572511 -0.559766322374 --0.147162601352 -0.577024042606 --0.147159144282 -0.594281151891 --0.147156242281 -0.611538082361 --0.147153861821 -0.628794506192 --0.147151980549 -0.646050855517 --0.147150650621 -0.663306817412 --0.147149857134 -0.680562868715 --0.147149577737 -0.697818666697 --0.147149834782 -0.715074643493 --0.147150631994 -0.732330515981 --0.147151943296 -0.749586686492 --0.147153787315 -0.766842857003 --0.1471561715 -0.784099459648 --0.147159077227 -0.801356181502 --0.147162497043 -0.8186134547 --0.147166483105 -0.835870981216 --0.147170972079 -0.853129178285 --0.147173389792 -0.872352510691 --0.147171076387 -0.891574159265 --0.147166572511 -0.90883217752 --0.147162601352 -0.926089897752 --0.147159144282 -0.943346992135 --0.147156223655 -0.960603907704 --0.147153843195 -0.977860331536 --0.147151980549 -0.995116695763 --0.147150650621 -1.01237267256 --0.147149857134 -1.02962869406 --0.147149596364 -1.04688447714 --0.147149853409 -1.06414046884 --0.147150631994 -1.08139634132 --0.147151961922 -1.09865254164 --0.147153805941 -1.11590874195 --0.1471561715 -1.1331653297 --0.147159077227 -1.15042203665 --0.147162497043 -1.16767930985 --0.147166483105 -1.18493682146 --0.147170972079 -1.20219501853 --0.147173389792 -1.22141832113 --0.147171076387 -1.24063995481 --0.147166572511 -1.25789800286 --0.147162601352 -1.2751557529 --0.147159144282 -1.29241284728 --0.147156242281 -1.30966976285 --0.147153861821 -1.32692620158 --0.147151980549 -1.34418255091 --0.147150650621 -1.3614385128 --0.147149857134 -1.3786945641 --0.147149577737 -1.39595037699 --0.147149834782 -1.41320636869 --0.147150631994 -1.43046221137 --0.147151961922 -1.44771835208 --0.147153805941 -1.46497452259 --0.1471561715 -1.48223114014 --0.147159077227 -1.49948787689 --0.147162497043 -1.51674517989 --0.147166483105 -1.53400272131 --0.147170972079 -1.55126091838 --0.147173389792 -1.57048422098 --0.147171076387 -1.58970585466 --0.147166572511 -1.60696387291 --0.147162601352 -1.62422159314 --0.147159144282 -1.64147868753 --0.147156223655 -1.65873560309 --0.147153843195 -1.67599201203 --0.147151980549 -1.69324836135 --0.147150650621 -1.71050438285 --0.147149857134 -1.72776046395 --0.147149577737 -1.74501624704 --0.147149816155 -1.76227220893 --0.147150613367 -1.77952808142 --0.147151943296 -1.79678425193 --0.147153787315 -1.81404042244 --0.1471561715 -1.83129701018 --0.147159077227 -1.84855371714 --0.147162497043 -1.86581099033 --0.147166483105 -1.88306850195 --0.147170972079 -1.90032669902 --0.147173389792 -1.91955006123 --0.147171076387 -1.9387717247 --0.147166572511 -1.95602974295 --0.147162601352 -1.97328746319 --0.147159144282 -1.99054455757 --0.147156223655 -2.00780144334 --0.147153843195 -2.02505785227 --0.147151980549 -2.0423142314 --0.147150650621 -2.05957025289 --0.147149857134 -2.076826334 --0.147149596364 -2.09408211708 --0.147149853409 -2.11133807898 --0.147150631994 -2.12859392166 --0.147151943296 -2.14585012198 --0.147153787315 -2.16310626268 --0.1471561715 -2.18036282063 --0.147159077227 -2.19761955738 --0.147162497043 -2.21487689018 --0.147166483105 -2.2321344018 --0.147170972079 -2.24939256907 --0.147173389792 -2.26861590147 --0.147171076387 -2.28783756495 --0.147166572511 -2.305095613 --0.147162601352 -2.32235330343 --0.147159144282 -2.33961039782 --0.147156223655 -2.35686737299 --0.147153843195 -2.37412375212 --0.147151980549 -2.39138007164 --0.147150650621 -2.40863609314 --0.147149857134 -2.42589211464 --0.147149577737 -2.44314789772 --0.147149834782 -2.46040391922 --0.147150631994 -2.47765976191 --0.147151961922 -2.49491590262 --0.147153805941 -2.51217216254 --0.1471561715 -2.52942878008 --0.147159077227 -2.54668545723 --0.147162497043 -2.56394273042 --0.147166483105 -2.58120024204 --0.147170972079 -2.59845840931 --0.147173389792 -2.61768174172 --0.147171076387 -2.63690340519 --0.147166572511 -2.65416139364 --0.147162601352 -2.67141908407 --0.147159144282 -2.68867617846 --0.147156223655 -2.70593315363 --0.147153843195 -2.72318959236 --0.147151980549 -2.74044597149 --0.147150650621 -2.75770193338 --0.147149857134 -2.77495795488 --0.147149577737 -2.79221379757 --0.147149834782 -2.80946975946 --0.147150631994 -2.82672560215 --0.147151961922 -2.84398174286 --0.147153805941 -2.86123794317 --0.1471561715 -2.87849456072 --0.147159077227 -2.89575123787 --0.147162497043 -2.91300851106 --0.147166483105 -2.93026602268 --0.147170972079 -2.94752424955 --0.147173389792 -2.96674758196 --0.147171076387 -2.98596924543 --0.147166572511 -3.00322729349 --0.147162601352 -3.02048504353 --0.147159144282 -3.03774213791 --0.147156242281 -3.05499899387 --0.147153861821 -3.07225543261 --0.147151980549 -3.08951181173 --0.147150650621 -3.10676777363 --0.147149857134 -3.12402385473 --0.147149577737 -3.1412796696 --0.147149834782 --3.1246497035 --0.147150631994 --3.10739386082 --0.147151961922 --3.09013772011 --0.147153805941 --3.07288151979 --0.1471561715 --3.05562490225 --0.147159092128 --3.03836816549 --0.147162511945 --3.02111083269 --0.147166483105 --3.00385332107 --0.147170972079 --2.98659515381 --0.147173389792 --2.96737188101 --0.147171076387 --2.94815021753 --0.147166572511 --2.93089216948 --0.147162601352 --2.91363441944 --0.147159144282 --2.89637732506 --0.147156242281 --2.87912046909 --0.147153861821 --2.86186403036 --0.147151980549 --2.84460765124 --0.147150650621 --2.82735168934 --0.147149857134 --2.81009560824 --0.147149577737 --2.79283982515 --0.147149834782 --2.77558386326 --0.147150631994 --2.75832796097 --0.147151961922 --2.74107176065 --0.147153805941 --2.72381561994 --0.1471561715 --2.706559062 --0.147159077227 --2.68930232525 --0.147162497043 --2.67204505205 --0.147166483105 --2.65478754043 --0.147170972079 --2.63752931356 --0.147173389792 --2.61830604076 --0.147171076387 --2.59908443689 --0.147166572511 --2.58182638884 --0.147162601352 --2.5645686388 --0.147159144282 --2.54731148481 --0.147156242281 --2.53005456924 --0.147153861821 --2.51279819012 --0.147151980549 --2.49554181099 --0.147150650621 --2.47828578949 --0.147149857134 --2.46102976799 --0.147149577737 --2.44377398491 --0.147149834782 --2.42651796341 --0.147150631994 --2.40926212072 --0.147151943296 --2.39200598001 --0.147153787315 --2.37474983931 --0.1471561715 --2.35749322176 --0.147159077227 --2.340236485 --0.147162497043 --2.32297921181 --0.147166483105 --2.30572164059 --0.147170972079 --2.28846347332 --0.147173389792 --2.26924014091 --0.147171076387 --2.25001847744 --0.147166572511 --2.23276048899 --0.147162601352 --2.21550279856 --0.147159144282 --2.19824570417 --0.147156223655 --2.180988729 --0.147153843195 --2.16373234987 --0.147151980549 --2.14647597075 --0.147150650621 --2.12921994925 --0.147149857134 --2.11196392775 --0.147149596364 --2.09470814466 --0.147149853409 --2.07745218277 --0.147150631994 --2.06019628048 --0.147151961922 --2.04294013977 --0.147153805941 --2.02568393945 --0.1471561715 --2.00842732191 --0.147159077227 --1.99117064476 --0.147162497043 --1.97391334176 --0.147166483105 --1.95665580035 --0.147170972079 --1.93939760327 --0.147173389792 --1.92017430067 --0.147171076387 --1.900952667 --0.147166572511 --1.88369464875 --0.147162601352 --1.86643689871 --0.147159144282 --1.84917980432 --0.147156242281 --1.83192291856 --0.147153861821 --1.81466647983 --0.147151980549 --1.7974101007 --0.147150650621 --1.780154109 --0.147149857134 --1.7628980577 --0.147149577737 --1.74564224481 --0.147149834782 --1.72838628292 --0.147150631994 --1.71113044024 --0.147151961922 --1.69387426972 --0.147153805941 --1.67661809921 --0.1471561715 --1.65936151147 --0.147159077227 --1.64210480452 --0.147162497043 --1.62484753132 --0.147166483105 --1.6075900197 --0.147170972079 --1.59033179283 --0.147173389792 --1.57110846042 --0.147171076387 --1.55188679695 --0.147166572511 --1.53462874889 --0.147162601352 --1.51737102866 --0.147159144282 --1.50011393428 --0.147156223655 --1.48285701871 --0.147153843195 --1.46560060978 --0.147151980549 --1.44834426046 --0.147150650621 --1.43108826876 --0.147149857134 --1.41383224726 --0.147149577737 --1.39657646418 --0.147149816155 --1.37932044268 --0.147150613367 --1.36206457019 --0.147151943296 --1.34480839968 --0.147153787315 --1.32755225897 --0.1471561715 --1.31029567123 --0.147159077227 --1.29303893447 --0.147162497043 --1.27578166127 --0.147166483105 --1.25852411985 --0.147170972079 --1.24126592279 --0.147173389792 --1.22204259038 --0.147171076387 --1.20282095671 --0.147166572511 --1.18556296826 --0.147162601352 --1.16830524802 --0.147159144282 --1.15104812383 --0.147156223655 --1.13379120826 --0.147153843195 --1.11653476953 --0.147151980549 --1.09927839041 --0.147150650621 --1.08202242851 --0.147149857134 --1.06476637721 --0.147149596364 --1.04751056433 --0.147149853409 --1.03025457263 --0.147150631994 --1.01299872994 --0.147151943296 --0.995742574334 --0.147153787315 --0.978486418724 --0.1471561715 --0.961229816079 --0.147159077227 --0.943973079324 --0.147162497043 --0.926715806126 --0.147166483105 --0.909458264708 --0.147170972079 --0.89220006764 --0.147173389792 --0.872976765037 --0.147171076387 --0.853755101561 --0.147166572511 --0.836497053504 --0.147162601352 --0.819239348173 --0.147159144282 --0.80198225379 --0.147156223655 --0.784725323319 --0.147153843195 --0.767468929291 --0.147151980549 --0.750212565064 --0.147150650621 --0.732956573367 --0.147149857134 --0.715700536966 --0.147149577737 --0.698444724083 --0.147149834782 --0.681188747287 --0.147150631994 --0.6639328897 --0.147151961922 --0.646676704287 --0.147153805941 --0.629420518875 --0.1471561715 --0.612163931131 --0.147159077227 --0.59490723908 --0.147162497043 --0.577649965882 --0.147166483105 --0.560392439365 --0.147170972079 --0.543134227395 --0.147173389792 --0.523910909891 --0.147171076387 --0.504689268768 --0.147166572511 --0.487431235612 --0.147162601352 --0.470173500478 --0.147159144282 --0.452916391194 --0.147156223655 --0.435659475625 --0.147153843195 --0.418403074145 --0.147151980549 --0.40114672482 --0.147150650621 --0.383890725672 --0.147149857134 --0.36663466692 --0.147149577737 --0.349378868938 --0.147149834782 --0.332122899592 --0.147150631994 --0.314867042005 --0.147151961922 --0.297610871494 --0.147153805941 --0.280354708433 --0.1471561715 --0.263098105788 --0.147159077227 --0.245841380209 --0.147162497043 --0.228584107012 --0.147166483105 --0.211326576769 --0.147170972079 --0.19406837225 --0.147173389792 --0.174845058471 --0.129828754813 --0.15561548993 --0.129824783653 --0.138357490301 --0.129821285605 --0.121099799871 --0.129818229005 --0.103842733428 --0.129815651104 --0.0865858476609 --0.129813548177 --0.0693294573576 --0.129811884836 --0.0520731313154 --0.129810713232 --0.0348171773367 --0.129810016602 --0.0175611616578 --0.12980976142 --0.000305393477902 --0.129809981212 -0.0169505570084 --0.129810675978 -0.034206383396 --0.129811847582 -0.0514625217766 --0.129813494161 -0.0687186568975 --0.129815597087 -0.0859752222895 --0.12981816195 -0.103231918067 --0.12982118316 -0.120489167049 --0.129824712873 -0.137746661901 --0.129828687758 -0.155004829168 --0.12983080931 -0.174228422344 --0.129828754813 -0.193450357765 --0.129824783653 -0.210708361119 --0.129821285605 -0.227966051549 --0.129818229005 -0.245223127305 --0.129815651104 -0.262480020523 --0.129813548177 -0.279736407101 --0.129811884836 -0.296992734075 --0.129810713232 -0.314248673618 --0.129810016602 -0.331504687667 --0.12980976142 -0.348760470748 --0.129809981212 -0.366016417742 --0.129810675978 -0.383272238075 --0.129811847582 -0.400528378784 --0.129813494161 -0.417784512043 --0.129815597087 -0.435041077435 --0.12981816195 -0.452297769487 --0.12982118316 -0.469555020332 --0.129824712873 -0.486812524498 --0.129828687758 -0.504070684314 --0.12983080931 -0.523294255137 --0.129828754813 -0.542516186834 --0.129824783653 -0.559774205089 --0.129821285605 -0.577031895518 --0.129818229005 -0.594288975 --0.129815651104 -0.611545860767 --0.129813548177 -0.628802254796 --0.129811884836 -0.64605858922 --0.129810713232 -0.663314536214 --0.129810016602 -0.680570557713 --0.12980976142 -0.697826310992 --0.129809981212 -0.715082257986 --0.129810675978 -0.732338100672 --0.129811828956 -0.74959422648 --0.129813475534 -0.766850352287 --0.129815597087 -0.78410692513 --0.12981816195 -0.801363632083 --0.12982118316 -0.818620875478 --0.129824712873 -0.835878357291 --0.129828687758 -0.853136524558 --0.12983080931 -0.872360140085 --0.129828754813 -0.891582071781 --0.129824783653 -0.908840045333 --0.129821285605 -0.926097735763 --0.129818229005 -0.943354815244 --0.129815632478 -0.960611686111 --0.129813529551 -0.977868080139 --0.129811884836 -0.995124429464 --0.129810713232 -1.01238036156 --0.129810016602 -1.02963638306 --0.129809780047 -1.04689213633 --0.129809999839 -1.06414806843 --0.129810675978 -1.08140391111 --0.129811847582 -1.09866008163 --0.129813494161 -1.11591625214 --0.129815597087 -1.13317281008 --0.12981816195 -1.15042948723 --0.12982118316 -1.16768673062 --0.129824712873 -1.18494421244 --0.129828687758 -1.20220237971 --0.12983080931 -1.22142598033 --0.129828754813 -1.24064791203 --0.129824783653 -1.25790593028 --0.129821285605 -1.27516362071 --0.129818229005 -1.29242065549 --0.129815651104 -1.30967757106 --0.129813548177 -1.32693397999 --0.129811884836 -1.34419026971 --0.129810713232 -1.36144623161 --0.129810016602 -1.3787022531 --0.12980976142 -1.39595800638 --0.129809981212 -1.41321396828 --0.129810675978 -1.43046981096 --0.129811847582 -1.44772592187 --0.129813494161 -1.46498203278 --0.129815597087 -1.48223862052 --0.12981816195 -1.49949532747 --0.12982118316 -1.51675257087 --0.129824712873 -1.53401008248 --0.129828687758 -1.55126824975 --0.12983080931 -1.57049182058 --0.129828754813 -1.58971375227 --0.129824783653 -1.60697174072 --0.129821285605 -1.62422943116 --0.129818229005 -1.64148652553 --0.129815632478 -1.6587434113 --0.129813529551 -1.67599976063 --0.129811884836 -1.69325608015 --0.129810713232 -1.71051207185 --0.129810016602 -1.72776812315 --0.12980976142 -1.74502387643 --0.129809981212 -1.76227980852 --0.129810675978 -1.77953565121 --0.129811828956 -1.79679179192 --0.129813475534 -1.81404793263 --0.129815597087 -1.83130449057 --0.12981816195 -1.84856116772 --0.12982118316 -1.86581841111 --0.129824712873 -1.88307589292 --0.129828687758 -1.90033406019 --0.12983080931 -1.91955769062 --0.129828754813 -1.93877962232 --0.129824783653 -1.95603761077 --0.129821285605 -1.9732953012 --0.129818229005 -1.99055236578 --0.129815632478 -2.00780922174 --0.129813529551 -2.02506560087 --0.129811884836 -2.04232198 --0.129810713232 -2.0595779419 --0.129810016602 -2.07683396339 --0.129809780047 -2.09408974648 --0.129809999839 -2.11134570837 --0.129810692742 -2.12860149145 --0.129811845719 -2.14585763216 --0.129813475534 -2.16311377287 --0.129815597087 -2.18037027121 --0.12981816195 -2.19762700796 --0.12982118316 -2.21488428116 --0.129824712873 -2.23214173317 --0.129828687758 -2.24939990044 --0.12983080931 -2.26862347126 --0.129828754813 -2.28784543276 --0.129824783653 -2.30510348082 --0.129821285605 -2.32236111164 --0.129818229005 -2.33961814642 --0.129815632478 -2.35687512159 --0.129813529551 -2.37413150072 --0.129811884836 -2.39138776064 --0.129810713232 -2.40864378214 --0.129810016602 -2.42589980364 --0.12980976142 -2.44315552712 --0.129809981212 -2.46041148901 --0.129810675978 -2.4776673317 --0.129811847582 -2.49492347241 --0.129813494161 -2.51217967272 --0.129815597087 -2.52943623066 --0.12981816195 -2.54669284821 --0.12982118316 -2.5639501214 --0.129824712873 -2.58120763302 --0.129828687758 -2.59846574068 --0.12983080931 -2.61768937111 --0.129828754813 -2.63691133261 --0.129824783653 -2.65416926146 --0.129821285605 -2.67142695188 --0.129818229005 -2.68868404627 --0.129815632478 -2.70594096184 --0.129813529551 -2.72319740057 --0.129811884836 -2.74045372009 --0.129810713232 -2.75770962238 --0.129810016602 -2.77496564388 --0.12980976142 -2.79222142696 --0.129809981212 -2.80947738886 --0.129810692742 -2.82673323155 --0.129811864346 -2.84398931265 --0.129813494161 -2.86124545336 --0.129815597087 -2.8785020709 --0.12981816195 -2.89575868845 --0.12982118316 -2.91301590204 --0.129824712873 -2.93027341366 --0.129828687758 -2.94753164053 --0.12983080931 -2.96675527096 --0.129828754813 -2.98597717285 --0.129824783653 -3.0032351613 --0.129821285605 -3.02049285173 --0.129818229005 -3.03774994612 --0.129815651104 -3.05500680208 --0.129813548177 -3.07226318121 --0.129811884836 -3.08951956033 --0.129810713232 -3.10677546263 --0.129810016602 -3.12403142452 --0.12980976142 -3.14128723939 --0.129809981212 --3.12464213371 --0.129810675978 --3.10738629103 --0.129811847582 --3.09013015032 --0.129813494161 --3.07287400961 --0.129815597087 --3.05561739206 --0.12981816195 --3.03836071491 --0.12982118316 --3.02110344172 --0.129824712873 --3.0038459301 --0.129828687758 --2.98658776283 --0.12983080931 --2.96736419201 --0.129828754813 --2.94814229012 --0.129824783653 --2.93088430166 --0.129821285605 --2.91362661123 --0.129818229005 --2.89636951685 --0.129815651104 --2.87911266089 --0.129813548177 --2.86185628176 --0.129811884836 --2.84459990263 --0.129810713232 --2.82734400034 --0.129810016602 --2.81008803844 --0.12980976142 --2.79283225536 --0.129809981212 --2.77557623386 --0.129810675978 --2.75832039118 --0.129811847582 --2.74106425047 --0.129813494161 --2.72380810976 --0.129815597087 --2.70655161142 --0.12981816195 --2.68929487467 --0.12982118316 --2.67203760147 --0.129824712873 --2.65478014946 --0.129828687758 --2.63752198219 --0.12983080931 --2.61829841137 --0.129828754813 --2.59907650948 --0.129824783653 --2.58181846142 --0.129821285605 --2.56456077099 --0.129818229005 --2.5473036766 --0.129815651104 --2.53004676104 --0.129813548177 --2.51279044151 --0.129811884836 --2.49553412199 --0.129810713232 --2.47827810049 --0.129810016602 --2.46102207899 --0.12980976142 --2.44376635551 --0.129809981212 --2.42651039362 --0.129810675978 --2.40925455093 --0.129811828956 --2.39199841022 --0.129813475534 --2.37474232912 --0.129815597087 --2.35748577118 --0.12981816195 --2.34022903442 --0.12982118316 --2.32297182083 --0.129824712873 --2.30571430922 --0.129828687758 --2.28845614195 --0.12983080931 --2.26923257112 --0.129828754813 --2.25001060962 --0.129824783653 --2.23275262117 --0.129821285605 --2.21549493074 --0.129818229005 --2.19823789596 --0.129815632478 --2.1809809804 --0.129813529551 --2.16372454166 --0.129811884836 --2.14646822214 --0.129810713232 --2.12921226025 --0.129810016602 --2.11195623875 --0.129809780047 --2.09470045566 --0.129809999839 --2.07744455337 --0.129810675978 --2.06018871069 --0.129811847582 --2.04293256998 --0.129813494161 --2.02567642927 --0.129815597087 --2.00841984152 --0.12981816195 --1.99116319418 --0.12982118316 --1.97390592098 --0.129824712873 --1.95664840937 --0.129828687758 --1.9393902719 --0.12983080931 --1.92016667128 --0.129828754813 --1.90094473958 --0.129824783653 --1.88368675113 --0.129821285605 --1.8664290309 --0.129818229005 --1.84917196632 --0.129815651104 --1.83191511035 --0.129813548177 --1.81465870142 --0.129811884836 --1.79740235209 --0.129810713232 --1.78014642 --0.129810016602 --1.7628903985 --0.12980976142 --1.74563461542 --0.129809981212 --1.72837868333 --0.129810675978 --1.71112287044 --0.129811847582 --1.69386672974 --0.129813494161 --1.67661058903 --0.129815597087 --1.65935403108 --0.12981816195 --1.64209735393 --0.12982118316 --1.62484011054 --0.129824712873 --1.60758262873 --0.129828687758 --1.59032443166 --0.12983080931 --1.57110083103 --0.129828754813 --1.55187889934 --0.129824783653 --1.53462088108 --0.129821285605 --1.51736319065 --0.129818229005 --1.50010612607 --0.129815632478 --1.4828492403 --0.129813529551 --1.46559286117 --0.129811884836 --1.44833654165 --0.129810713232 --1.43108057976 --0.129810016602 --1.41382458806 --0.12980976142 --1.39656883478 --0.129809981212 --1.37931284308 --0.129810675978 --1.3620570004 --0.129811828956 --1.34480085969 --0.129813475534 --1.32754474878 --0.129815597087 --1.31028822064 --0.12981816195 --1.29303148389 --0.12982118316 --1.27577421069 --0.129824712873 --1.25851672888 --0.129828687758 --1.24125856161 --0.12983080931 --1.22203496098 --0.129828754813 --1.20281305909 --0.129824783653 --1.18555507064 --0.129821285605 --1.16829738021 --0.129818229005 --1.15104031563 --0.129815632478 --1.13378340006 --0.129813529551 --1.11652699113 --0.129811884836 --1.09927067161 --0.129810713232 --1.08201473951 --0.129810016602 --1.06475871801 --0.129809780047 --1.04750293493 --0.129809999839 --1.03024700284 --0.129810692742 --1.01299116015 --0.129811845719 --0.995735019444 --0.129813475534 --0.97847892344 --0.129815597087 --0.961222335696 --0.12981816195 --0.943965613842 --0.12982118316 --0.926708385348 --0.129824712873 --0.909450903535 --0.129828687758 --0.892192721367 --0.12983080931 --0.872969120741 --0.129828754813 --0.853747189045 --0.129824783653 --0.83648917079 --0.129821285605 --0.819231495261 --0.129818229005 --0.801974445581 --0.129815632478 --0.784717544913 --0.129813529551 --0.767461165786 --0.129811884836 --0.750204831362 --0.129810713232 --0.732948884368 --0.129810016602 --0.715692877769 --0.12980976142 --0.698437094688 --0.129809981212 --0.681181147694 --0.129810675978 --0.66392531991 --0.129811847582 --0.646669179201 --0.129813494161 --0.629413023591 --0.129815597087 --0.612156465649 --0.12981816195 --0.594899788499 --0.12982118316 --0.577642530203 --0.129824712873 --0.560385048389 --0.129828687758 --0.543126881122 --0.12983080931 --0.523903280497 --0.129828754813 --0.504681348801 --0.129824783653 --0.487423352897 --0.129821285605 --0.470165662468 --0.129818229005 --0.452908582986 --0.129815632478 --0.435651689768 --0.129813529551 --0.41839531064 --0.129811884836 --0.401138991117 --0.129810713232 --0.383883029223 --0.129810016602 --0.366627007723 --0.12980976142 --0.349371246994 --0.129809981212 --0.332115292549 --0.129810692742 --0.314859464764 --0.129811864346 --0.297603338957 --0.129813494161 --0.280347205699 --0.129815597087 --0.263090632856 --0.12981816195 --0.245833937078 --0.12982118316 --0.228576693684 --0.129824712873 --0.211319193244 --0.129828687758 --0.194061022252 --0.12983080931 --0.174837429077 --0.112467927858 --0.155607566237 --0.112464489415 --0.138349600136 --0.112461453304 --0.121091941372 --0.11245880276 --0.103834901005 --0.112456567586 --0.0865780487657 --0.112454731017 --0.0693216910586 --0.112453296781 --0.0520653966814 --0.112452279776 --0.034809473902 --0.112451661378 --0.0175534880255 --0.112451443449 --0.000297751044855 --0.112451642752 -0.0169581677765 --0.112452242523 -0.0342139634304 --0.112453244626 -0.051470070146 --0.112454680726 -0.068726176396 --0.112456515432 -0.0859827101231 --0.112458733842 -0.103239372373 --0.112461369485 -0.120496589691 --0.112464424223 -0.137754052877 --0.112467862666 -0.155012190342 --0.112469714135 -0.174236066639 --0.112467927858 -0.193458281457 --0.112464489415 -0.210716255009 --0.112461453304 -0.227973915636 --0.11245880276 -0.245230950415 --0.112456567586 -0.26248781383 --0.112454731017 -0.279744170606 --0.112453296781 -0.297000460327 --0.112452279776 -0.314256370067 --0.112451661378 -0.331512346864 --0.112451443449 -0.348768092692 --0.112451642752 -0.366024009883 --0.112452242523 -0.383279807865 --0.112453244626 -0.400535918772 --0.112454680726 -0.417792022228 --0.112456515432 -0.435048557818 --0.112458733842 -0.452305227518 --0.112461369485 -0.469562448561 --0.112464424223 -0.486819908023 --0.112467862666 -0.504078045488 --0.112469714135 -0.523301914335 --0.112467927858 -0.542524114252 --0.112464489415 -0.559782087803 --0.112461453304 -0.577039763331 --0.11245880276 -0.594296827912 --0.112456550822 -0.611553683877 --0.112454714254 -0.628810018301 --0.112453296781 -0.646066308022 --0.112452279776 -0.663322240114 --0.112451678142 -0.680578231811 --0.112451460213 -0.697833955288 --0.112451642752 -0.715089887381 --0.112452242523 -0.732345685363 --0.112453244626 -0.749601781368 --0.112454680726 -0.766857877374 --0.112456515432 -0.784114405513 --0.112458733842 -0.801371097565 --0.112461369485 -0.818628296256 --0.112464424223 -0.835885748267 --0.112467862666 -0.853143900633 --0.112469714135 -0.87236776948 --0.112467927858 -0.891589969396 --0.112464489415 -0.908847928047 --0.112461453304 -0.926105603576 --0.11245880276 -0.943362638354 --0.112456550822 -0.960619479418 --0.112454714254 -0.977875858545 --0.112453296781 -0.995132192969 --0.112452279776 -1.01238811016 --0.112451661378 -1.02964407205 --0.112451443449 -1.04689979553 --0.112451642752 -1.06415572762 --0.112452242523 -1.08141154051 --0.112453244626 -1.09866765142 --0.112454680726 -1.11592376232 --0.112456515432 -1.13318029046 --0.112458733842 -1.15043693781 --0.112461369485 -1.1676941514 --0.112464424223 -1.18495160341 --0.112467862666 -1.20220974088 --0.112469714135 -1.22143363953 --0.112467927858 -1.24065586924 --0.112464489415 -1.2579138279 --0.112461453304 -1.27517145872 --0.11245880276 -1.2924284935 --0.112456567586 -1.30968537927 --0.112454731017 -1.32694172859 --0.112453296781 -1.34419798851 --0.112452279776 -1.3614539206 --0.112451661378 -1.3787099123 --0.112451443449 -1.39596563578 --0.112451642752 -1.41322156787 --0.112452242523 -1.43047738075 --0.112453244626 -1.44773346186 --0.112454680726 -1.46498954296 --0.112456515432 -1.4822461009 --0.112458733842 -1.49950277806 --0.112461369485 -1.51675996184 --0.112464424223 -1.53401744365 --0.112467862666 -1.55127561092 --0.112469714135 -1.57049944997 --0.112467927858 -1.58972164988 --0.112464489415 -1.60697963834 --0.112461453304 -1.62423732877 --0.11245880276 -1.64149436355 --0.112456567586 -1.65875118971 --0.112454731017 -1.67600753903 --0.112453296781 -1.69326385856 --0.112452279776 -1.71051979065 --0.112451678142 -1.72777578235 --0.112451460213 -1.74503153562 --0.112451642752 -1.76228743791 --0.112452242523 -1.77954322099 --0.112453244626 -1.7967993319 --0.112454680726 -1.81405544281 --0.112456515432 -1.83131197095 --0.112458733842 -1.8485686481 --0.112461369485 -1.86582586169 --0.112464424223 -1.8830832839 --0.112467862666 -1.90034142136 --0.112469714135 -1.91956532002 --0.112467927858 -1.93878754974 --0.112464489415 -1.95604550839 --0.112461453304 -1.97330313921 --0.11245880276 -1.99056017399 --0.112456550822 -2.00781700015 --0.112454714254 -2.02507334948 --0.112453296781 -2.0423297286 --0.112452279776 -2.0595856309 --0.112451678142 -2.07684159279 --0.112451460213 -2.09409737587 --0.112451642752 -2.11135327816 --0.112452259287 -2.12860906124 --0.11245326139 -2.14586520195 --0.112454680726 -2.16312128305 --0.112456515432 -2.18037778139 --0.112458733842 -2.19763445854 --0.112461369485 -2.21489167213 --0.112464424223 -2.23214918375 --0.112467862666 -2.24940729141 --0.112469714135 -2.26863110065 --0.112467927858 -2.28785336018 --0.112464489415 -2.30511134863 --0.112461453304 -2.32236897946 --0.11245880276 -2.33962601423 --0.112456567586 -2.3568829298 --0.112454731017 -2.37413930893 --0.112453296781 -2.39139556885 --0.112452279776 -2.40865153074 --0.112451661378 -2.42590755224 --0.112451443449 -2.44316321611 --0.112451642752 -2.4604190588 --0.112452242523 -2.47767490148 --0.112453244626 -2.49493104219 --0.112454680726 -2.5121871829 --0.112456515432 -2.52944368124 --0.112458733842 -2.54670029878 --0.112461369485 -2.56395757198 --0.112464424223 -2.581215024 --0.112467862666 -2.59847313166 --0.112469714135 -2.61769706011 --0.112467927858 -2.63691931963 --0.112464489415 -2.65417724847 --0.112461453304 -2.6714348793 --0.11245880276 -2.68869191408 --0.112456567586 -2.70594877005 --0.112454731017 -2.72320514918 --0.112453296781 -2.74046140909 --0.112452279776 -2.75771731138 --0.112451661378 -2.77497333288 --0.112451443449 -2.79222905636 --0.112451642752 -2.80948501825 --0.112452259287 -2.82674080133 --0.11245326139 -2.84399682283 --0.112454680726 -2.86125296354 --0.112456515432 -2.87850958109 --0.112458733842 -2.89576619863 --0.112461369485 -2.91302335262 --0.112464424223 -2.93028080463 --0.112467862666 -2.9475389719 --0.112469714135 -2.96676290035 --0.112467927858 -2.98598510027 --0.112464489415 -3.00324302912 --0.112461453304 -3.02050065994 --0.11245880276 -3.03775769472 --0.112456567586 -3.05501455069 --0.112454731017 -3.07227092981 --0.112453296781 -3.08952724934 --0.112452279776 -3.10678315163 --0.112451661378 -3.12403911352 --0.112451443449 -3.14129486878 --0.112451642752 --3.12463450432 --0.112452242523 --3.10737872124 --0.112453244626 --3.09012264013 --0.112454680726 --3.07286649943 --0.112456515432 --3.05560988188 --0.112458733842 --3.03835326433 --0.112461369485 --3.02109611035 --0.112464424223 --3.00383859873 --0.112467862666 --2.98658043146 --0.112469714135 --2.96735656261 --0.112467927858 --2.9481343627 --0.112464489415 --2.93087643385 --0.112461453304 --2.91361874342 --0.11245880276 --2.89636170864 --0.112456567586 --2.87910491228 --0.112454731017 --2.86184853315 --0.112453296781 --2.84459221363 --0.112452279776 --2.82733631134 --0.112451661378 --2.81008034945 --0.112451443449 --2.79282456636 --0.112451642752 --2.77556860447 --0.112452242523 --2.75831282139 --0.112453244626 --2.74105668068 --0.112454680726 --2.72380059958 --0.112456515432 --2.70654410124 --0.112458733842 --2.68928736448 --0.112461369485 --2.67203015089 --0.112464424223 --2.65477275849 --0.112467862666 --2.63751465082 --0.112469714135 --2.61829078197 --0.112467927858 --2.59906858206 --0.112464489415 --2.5818105936 --0.112461453304 --2.56455290318 --0.11245880276 --2.54729580879 --0.112456550822 --2.53003889322 --0.112454714254 --2.5127826333 --0.112453296781 --2.49552637339 --0.112452279776 --2.47827041149 --0.112451678142 --2.46101444959 --0.112451460213 --2.44375872612 --0.112451642752 --2.42650276422 --0.112452242523 --2.40924692154 --0.112453244626 --2.39199084044 --0.112454680726 --2.37473481894 --0.112456515432 --2.3574783206 --0.112458733842 --2.34022158385 --0.112461369485 --2.32296437025 --0.112464424223 --2.30570691824 --0.112467862666 --2.28844875097 --0.112469714135 --2.26922494173 --0.112467927858 --2.25000274181 --0.112464489415 --2.23274469376 --0.112461453304 --2.21548700333 --0.11245880276 --2.19823002815 --0.112456550822 --2.18097317219 --0.112454714254 --2.16371673345 --0.112453296781 --2.14646047353 --0.112452279776 --2.12920457125 --0.112451661378 --2.11194854975 --0.112451443449 --2.09469282627 --0.112451642752 --2.07743692398 --0.112452242523 --2.0601811409 --0.112453244626 --2.0429250598 --0.112454680726 --2.02566891909 --0.112456515432 --2.00841236114 --0.112458733842 --1.9911557436 --0.112461369485 --1.97389850021 --0.112464424223 --1.95664101839 --0.112467862666 --1.93938291073 --0.112469714135 --1.92015901208 --0.112467927858 --1.90093678236 --0.112464489415 --1.88367882371 --0.112461453304 --1.86642116309 --0.11245880276 --1.8491641283 --0.112456567586 --1.83190727234 --0.112454731017 --1.81465092301 --0.112453296781 --1.79739463329 --0.112452279776 --1.780138731 --0.112451661378 --1.76288273931 --0.112451443449 --1.74562698603 --0.112451642752 --1.72837108374 --0.112452242523 --1.71111530066 --0.112453244626 --1.69385918975 --0.112454680726 --1.67660307884 --0.112456515432 --1.6593465507 --0.112458733842 --1.64208987355 --0.112461369485 --1.62483265996 --0.112464424223 --1.60757523775 --0.112467862666 --1.59031710029 --0.112469714135 --1.57109320164 --0.112467927858 --1.55187097192 --0.112464489415 --1.53461301327 --0.112461453304 --1.51735535264 --0.11245880276 --1.50009831786 --0.112456567586 --1.4828414619 --0.112454731017 --1.46558511257 --0.112453296781 --1.44832882285 --0.112452279776 --1.43107286096 --0.112451678142 --1.41381686926 --0.112451460213 --1.39656114578 --0.112451642752 --1.37930521369 --0.112452242523 --1.36204940081 --0.112453244626 --1.3447932899 --0.112454680726 --1.3275372088 --0.112456515432 --1.31028071046 --0.112458733842 --1.29302403331 --0.112461369485 --1.27576678991 --0.112464424223 --1.2585093379 --0.112467862666 --1.24125120044 --0.112469714135 --1.22202730179 --0.112467927858 --1.20280510187 --0.112464489415 --1.18554714322 --0.112461453304 --1.1682894826 --0.11245880276 --1.15103244782 --0.112456550822 --1.13377556205 --0.112454714254 --1.11651921272 --0.112453296781 --1.0992629528 --0.112452279776 --1.08200705051 --0.112451678142 --1.06475105882 --0.112451460213 --1.04749530554 --0.112451642752 --1.03023940325 --0.112452259287 --1.01298359036 --0.11245326139 --0.995727464556 --0.112454680726 --0.978471368551 --0.112456515432 --0.96121481061 --0.112458733842 --0.94395814836 --0.112461369485 --0.926700949669 --0.112464424223 --0.909443482756 --0.112467862666 --0.892185345292 --0.112469714135 --0.872961461544 --0.112467927858 --0.853739246726 --0.112464489415 --0.836481288075 --0.112461453304 --0.819223642349 --0.11245880276 --0.801966607571 --0.112456567586 --0.784709751606 --0.112454731017 --0.76745338738 --0.112453296781 --0.750197067857 --0.112452279776 --0.732941150665 --0.112451661378 --0.715685173869 --0.112451443449 --0.698429435491 --0.112451642752 --0.681173533201 --0.112452242523 --0.66391775012 --0.112453244626 --0.646661654115 --0.112454680726 --0.629405528307 --0.112456515432 --0.612148970366 --0.112458733842 --0.594892308116 --0.112461369485 --0.577635094523 --0.112464424223 --0.560377657413 --0.112467862666 --0.543119519949 --0.112469714135 --0.5238956213 --0.112467927858 --0.504673406482 --0.112464489415 --0.487415447831 --0.112461453304 --0.470157787204 --0.11245880276 --0.452900744975 --0.112456567586 --0.43564388901 --0.112454731017 --0.418387539684 --0.112453296781 --0.401131249964 --0.112452279776 --0.383875325322 --0.112451661378 --0.366619333625 --0.112451443449 --0.349363602698 --0.112451642752 --0.332107678056 --0.112452259287 --0.314851880074 --0.11245326139 --0.297595791519 --0.112454680726 --0.280339680612 --0.112456515432 --0.263083137572 --0.112458733842 --0.245826475322 --0.112461369485 --0.228569258004 --0.112464424223 --0.211311794818 --0.112467862666 --0.194053661078 --0.112469714135 --0.174829788506 --0.0948094967752 --0.155602190644 --0.0948065780102 --0.138344243169 --0.0948040038348 --0.12108660303 --0.0948017761112 --0.103829585016 --0.0947998911141 --0.0865727551281 --0.0947983488439 --0.0693164188415 --0.0947971530258 --0.0520601449534 --0.0947962850332 --0.0348042435944 --0.0947957430034 --0.0175482786726 --0.0947955604643 --0.000292564043775 --0.0947957392783 -0.0169633342885 --0.0947962477802 -0.0342191094533 --0.0947971027344 -0.0514751924202 --0.0947983153164 -0.0687312800437 --0.0947998538612 -0.0859877932817 --0.0948017239571 -0.103244433179 --0.0948039554059 -0.120501630008 --0.0948065295814 -0.137759067118 --0.0948094315826 -0.155017185956 --0.0948110055179 -0.174241259694 --0.0948094967752 -0.193463664502 --0.0948065780102 -0.210721608251 --0.0948040038348 -0.227979246527 --0.0948017761112 -0.245236262679 --0.0947998911141 -0.262493103743 --0.0947983488439 -0.279749438167 --0.0947971530258 -0.297005705535 --0.0947962850332 -0.314261607826 --0.0947957430034 -0.33151756227 --0.0947955604643 -0.348773270845 --0.0947957392783 -0.366029165685 --0.0947962477802 -0.383284948766 --0.0947971027344 -0.400541044771 --0.0947983153164 -0.417797118425 --0.0947998538612 -0.435053631663 --0.0948017239571 -0.452310293913 --0.0948039554059 -0.469567492604 --0.0948065295814 -0.486824929714 --0.0948094315826 -0.504083044827 --0.0948110055179 -0.523307099938 --0.0948094967752 -0.542529508472 --0.0948065780102 -0.559787467122 --0.0948040038348 -0.577045112848 --0.0948017761112 -0.594302132726 --0.0947998743504 -0.611558958888 --0.0947983320802 -0.628815293312 --0.0947971530258 -0.64607155323 --0.0947962850332 -0.663327440619 --0.0947957597674 -0.680583417415 --0.0947955772283 -0.697839140892 --0.0947957392783 -0.715095058083 --0.0947962477802 -0.732350826263 --0.0947971027344 -0.749606892466 --0.0947983153164 -0.766862973571 --0.0947998538612 -0.784119471908 --0.0948017239571 -0.801376134157 --0.0948039554059 -0.818633332848 --0.0948065295814 -0.835890769958 --0.0948094315826 -0.853148907423 --0.0948110055179 -0.872372955084 --0.0948094967752 -0.891595348716 --0.0948065780102 -0.908853307366 --0.0948040038348 -0.926110953093 --0.0948017761112 -0.943367958069 --0.0947998743504 -0.960624799132 --0.0947983320802 -0.977881148458 --0.0947971530258 -0.995137438177 --0.0947962850332 -1.01239335537 --0.0947957430034 -1.02964925766 --0.0947955604643 -1.04690495133 --0.0947957392783 -1.06416088343 --0.0947962477802 -1.08141666651 --0.0947971027344 -1.09867274761 --0.0947983153164 -1.11592882871 --0.0947998538612 -1.13318535685 --0.0948017239571 -1.1504419744 --0.0948039554059 -1.16769915819 --0.0948065295814 -1.1849566102 --0.0948094315826 -1.20221471787 --0.0948110055179 -1.22143879533 --0.0948094967752 -1.24066123366 --0.0948065780102 -1.25791919232 --0.0948040038348 -1.27517682314 --0.0948017761112 -1.29243382812 --0.0947998911141 -1.30969065428 --0.0947983488439 -1.3269469738 --0.0947971530258 -1.34420323372 --0.0947962850332 -1.36145913601 --0.0947957430034 -1.3787150979 --0.0947955604643 -1.39597082138 --0.0947957392783 -1.41322672367 --0.0947962477802 -1.43048250675 --0.0947971027344 -1.44773858786 --0.0947983153164 -1.46499466896 --0.0947998538612 -1.4822511971 --0.0948017239571 -1.49950784445 --0.0948039554059 -1.51676502824 --0.0948065295814 -1.53402248025 --0.0948094315826 -1.55128061771 --0.0948110055179 -1.57050466538 --0.0948094967752 -1.5897270441 --0.0948065780102 -1.60698500276 --0.0948040038348 -1.62424266339 --0.0948017761112 -1.64149966836 --0.0947998911141 -1.65875649452 --0.0947983488439 -1.67601284385 --0.0947971530258 -1.69326913357 --0.0947962850332 -1.71052503586 --0.0947957597674 -1.72778099775 --0.0947955772283 -1.74503672123 --0.0947957392783 -1.76229262352 --0.0947962477802 -1.7795483768 --0.0947971027344 -1.7968044579 --0.0947983153164 -1.81406053901 --0.0947998538612 -1.83131703734 --0.0948017239571 -1.84857368469 --0.0948039554059 -1.86583086848 --0.0948065295814 -1.88308829069 --0.0948094315826 -1.90034642815 --0.0948110055179 -1.91957053542 --0.0948094967752 -1.93879294396 --0.0948065780102 -1.95605087281 --0.0948040038348 -1.97330850363 --0.0948017761112 -1.9905655086 --0.0947998743504 -2.00782233477 --0.0947983320802 -2.02507865429 --0.0947971530258 -2.04233497381 --0.0947962850332 -2.0595908761 --0.0947957597674 -2.07684677839 --0.0947955772283 -2.09410250187 --0.0947957392783 -2.11135840416 --0.0947962477802 -2.12861418724 --0.0947971027344 -2.14587032795 --0.0947983153164 -2.16312640905 --0.0947998538612 -2.18038290739 --0.0948017239571 -2.19763952494 --0.0948039554059 -2.21489667893 --0.0948065295814 -2.23215419054 --0.0948094315826 -2.2494122982 --0.0948110055179 -2.26863634586 --0.0948094967752 -2.2878587842 --0.0948065780102 -2.30511671305 --0.0948040038348 -2.32237434387 --0.0948017761112 -2.33963137865 --0.0947998911141 -2.35688823461 --0.0947983488439 -2.37414461374 --0.0947971530258 -2.39140087366 --0.0947962850332 -2.40865671635 --0.0947957430034 -2.42591273785 --0.0947955604643 -2.44316846132 --0.0947957392783 -2.46042430401 --0.0947962477802 -2.47768008709 --0.0947971027344 -2.4949361682 --0.0947983153164 -2.5121922493 --0.0947998538612 -2.52944874763 --0.0948017239571 -2.54670536518 --0.0948039554059 -2.56396257877 --0.0948065295814 -2.58122003079 --0.0948094315826 -2.59847813845 --0.0948110055179 -2.61770224571 --0.0948094967752 -2.63692468405 --0.0948065780102 -2.6541826129 --0.0948040038348 -2.67144018412 --0.0948017761112 -2.68869715929 --0.0947998911141 -2.70595401525 --0.0947983488439 -2.72321039438 --0.0947971530258 -2.7404666543 --0.0947962850332 -2.75772255659 --0.0947957430034 -2.77497857809 --0.0947955604643 -2.79223424196 --0.0947957392783 -2.80949014425 --0.0947962477802 -2.82674592733 --0.0947971027344 -2.84400194883 --0.0947983153164 -2.86125808954 --0.0947998538612 -2.87851464748 --0.0948017239571 -2.89577126503 --0.0948039554059 -2.91302841902 --0.0948065295814 -2.93028587103 --0.0948094315826 -2.9475440383 --0.0948110055179 -2.96676808596 --0.0948094967752 -2.98599046469 --0.0948065780102 -3.00324839353 --0.0948040038348 -3.02050602436 --0.0948017761112 -3.03776305914 --0.0947998911141 -3.0550199151 --0.0947983488439 -3.07227623463 --0.0947971530258 -3.08953249455 --0.0947962850332 -3.10678839684 --0.0947957430034 -3.12404435873 --0.0947955604643 -3.14130005439 --0.0947957392783 --3.12462931871 --0.0947962477802 --3.10737353563 --0.0947971027344 --3.09011751413 --0.0947983153164 --3.07286137342 --0.0947998538612 --3.05560481548 --0.0948017239571 --3.03834819793 --0.0948039554059 --3.02109104395 --0.0948065295814 --3.00383359194 --0.0948094315826 --2.98657542467 --0.0948110055179 --2.96735137701 --0.0948094967752 --2.94812899828 --0.0948065780102 --2.93087106943 --0.0948040038348 --2.913613379 --0.0948017761112 --2.89635634422 --0.0947998911141 --2.87909954786 --0.0947983488439 --2.86184322834 --0.0947971530258 --2.84458696842 --0.0947962850332 --2.82733106613 --0.0947957430034 --2.81007510424 --0.0947955604643 --2.79281932116 --0.0947957392783 --2.77556341887 --0.0947962477802 --2.75830769539 --0.0947971027344 --2.74105155468 --0.0947983153164 --2.72379547358 --0.0947998538612 --2.70653897524 --0.0948017239571 --2.68928229809 --0.0948039554059 --2.6720251441 --0.0948065295814 --2.65476775169 --0.0948094315826 --2.63750964403 --0.0948110055179 --2.61828559637 --0.0948094967752 --2.59906315804 --0.0948065780102 --2.58180516958 --0.0948040038348 --2.56454753875 --0.0948017761112 --2.54729050398 --0.0947998743504 --2.53003364802 --0.0947983320802 --2.51277732849 --0.0947971530258 --2.49552106857 --0.0947962850332 --2.47826522589 --0.0947957597674 --2.4610093236 --0.0947955772283 --2.44375354052 --0.0947957392783 --2.42649757862 --0.0947962477802 --2.40924179554 --0.0947971027344 --2.39198571444 --0.0947983153164 --2.37472969294 --0.0947998538612 --2.3574731946 --0.0948017239571 --2.34021651745 --0.0948039554059 --2.32295930385 --0.0948065295814 --2.30570185184 --0.0948094315826 --2.28844374418 --0.0948110055179 --2.26921969652 --0.0948094967752 --2.24999731779 --0.0948065780102 --2.23273932934 --0.0948040038348 --2.21548169851 --0.0948017761112 --2.19822472334 --0.0947998743504 --2.18096786738 --0.0947983320802 --2.16371148825 --0.0947971530258 --2.14645522833 --0.0947962850332 --2.12919932604 --0.0947957430034 --2.11194336414 --0.0947955604643 --2.09468770027 --0.0947957392783 --2.07743173838 --0.0947962477802 --2.0601759553 --0.0947971027344 --2.04291993379 --0.0947983153164 --2.02566379309 --0.0947998538612 --2.00840726495 --0.0948017239571 --1.9911506772 --0.0948039554059 --1.97389346361 --0.0948065295814 --1.9566360116 --0.0948094315826 --1.93937790394 --0.0948110055179 --1.92015382647 --0.0948094967752 --1.90093141794 --0.0948065780102 --1.88367348909 --0.0948040038348 --1.86641585827 --0.0948017761112 --1.84915882349 --0.0947998911141 --1.83190196753 --0.0947983488439 --1.814645648 --0.0947971530258 --1.79738938808 --0.0947962850332 --1.78013348579 --0.0947957430034 --1.7628775239 --0.0947955604643 --1.74562180042 --0.0947957392783 --1.72836589813 --0.0947962477802 --1.71111014485 --0.0947971027344 --1.69385406375 --0.0947983153164 --1.67659798265 --0.0947998538612 --1.65934148431 --0.0948017239571 --1.64208480716 --0.0948039554059 --1.62482762337 --0.0948065295814 --1.60757020116 --0.0948094315826 --1.59031206369 --0.0948110055179 --1.57108798623 --0.0948094967752 --1.5518655777 --0.0948065780102 --1.53460764885 --0.0948040038348 --1.51735001803 --0.0948017761112 --1.50009301305 --0.0947998911141 --1.48283618689 --0.0947983488439 --1.46557983756 --0.0947971530258 --1.44832354784 --0.0947962850332 --1.43106761575 --0.0947957597674 --1.41381165385 --0.0947955772283 --1.39655596018 --0.0947957392783 --1.37930005789 --0.0947962477802 --1.36204427481 --0.0947971027344 --1.3447881937 --0.0947983153164 --1.3275321126 --0.0947998538612 --1.31027561426 --0.0948017239571 --1.29301899672 --0.0948039554059 --1.27576178313 --0.0948065295814 --1.25850433111 --0.0948094315826 --1.24124622345 --0.0948110055179 --1.22202214599 --0.0948094967752 --1.20279970765 --0.0948065780102 --1.18554177881 --0.0948040038348 --1.16828414798 --0.0948017761112 --1.1510271132 --0.0947998743504 --1.13377028704 --0.0947983320802 --1.11651396751 --0.0947971530258 --1.0992577076 --0.0947962850332 --1.08200180531 --0.0947957597674 --1.06474584341 --0.0947955772283 --1.04749011993 --0.0947957392783 --1.03023421764 --0.0947962477802 --1.01297846437 --0.0947971027344 --0.995722383262 --0.0947983153164 --0.978466272354 --0.0947998538612 --0.961209729314 --0.0948017239571 --0.943953096866 --0.0948039554059 --0.926695927977 --0.0948065295814 --0.909438461065 --0.0948094315826 --0.892180338502 --0.0948110055179 --0.87295627594 --0.0948094967752 --0.853733867407 --0.0948065780102 --0.836475938559 --0.0948040038348 --0.819218307734 --0.0948017761112 --0.801961287856 --0.0947998911141 --0.784704461694 --0.0947983488439 --0.767448112369 --0.0947971530258 --0.750191807747 --0.0947962850332 --0.732935920358 --0.0947957430034 --0.715679958463 --0.0947955604643 --0.698424234986 --0.0947957392783 --0.681168347597 --0.0947962477802 --0.663912594318 --0.0947971027344 --0.646656528115 --0.0947983153164 --0.62940043211 --0.0947998538612 --0.61214388907 --0.0948017239571 --0.594887241721 --0.0948039554059 --0.577630057931 --0.0948065295814 --0.560372620821 --0.0948094315826 --0.543114498258 --0.0948110055179 --0.523890420794 --0.0948094967752 --0.504668027163 --0.0948065780102 --0.487410083413 --0.0948040038348 --0.470152445137 --0.0948017761112 --0.45289543271 --0.0947998911141 --0.435638599098 --0.0947983488439 --0.418382264674 --0.0947971530258 --0.401125997304 --0.0947962850332 --0.383870102465 --0.0947957430034 --0.366614125669 --0.0947955604643 --0.349358409643 --0.0947957392783 --0.332102514804 --0.0947962477802 --0.314846731722 --0.0947971027344 --0.297590658069 --0.0947983153164 --0.280334576964 --0.0947998538612 --0.263078056276 --0.0948017239571 --0.245821412653 --0.0948039554059 --0.228564213962 --0.0948065295814 --0.211306773126 --0.0948094315826 --0.194048661739 --0.0948110055179 --0.174824599177 --0.0765866730362 --0.155598782003 --0.0765843056142 --0.138340849429 --0.0765822269023 --0.12108322233 --0.0765804238617 --0.103826219216 --0.0765788778663 --0.0865694005042 --0.0765776205808 --0.0693130781874 --0.0765766557306 --0.0520568164066 --0.0765759646893 --0.0348009290174 --0.0765755455941 --0.0175449801609 --0.0765753984451 --0.000289279036223 --0.0765755418688 -0.0169666064903 --0.076575960964 -0.0342223681509 --0.0765766557306 -0.0514784362167 --0.0765776373446 -0.0687345098704 --0.076578874141 -0.0859910119325 --0.0765803884715 -0.103247640654 --0.0765821933746 -0.120504824445 --0.076584270224 -0.137762248516 --0.076586605981 -0.155020352453 --0.0765878800303 -0.174244541675 --0.0765866730362 -0.193467069417 --0.0765843056142 -0.210725001991 --0.0765822269023 -0.227982629091 --0.0765804238617 -0.245239637792 --0.0765788778663 -0.262496456504 --0.0765776205808 -0.279752776027 --0.0765766706317 -0.297009035945 --0.0765759795904 -0.314264923334 --0.0765755455941 -0.331520870328 --0.0765753984451 -0.348776571452 --0.0765755418688 -0.366032451391 --0.076575960964 -0.38328821212 --0.0765766557306 -0.400544293225 --0.0765776205808 -0.417800359428 --0.0765788573772 -0.435056857765 --0.0765803884715 -0.452313482761 --0.0765821933746 -0.469570666552 --0.076584270224 -0.486828111112 --0.076586605981 -0.504086211324 --0.0765878800303 -0.523310378194 --0.0765866730362 -0.542532920838 --0.0765843056142 -0.559790864587 --0.0765822269023 -0.57704846561 --0.0765804238617 -0.594305470586 --0.0765788778663 -0.611562296748 --0.0765776205808 -0.628818616271 --0.0765766557306 -0.646074876189 --0.0765759646893 -0.663330763578 --0.0765755455941 -0.680586710572 --0.0765753984451 -0.697842419147 --0.0765755418688 -0.715098321438 --0.076575960964 -0.732354089618 --0.0765766557306 -0.749610140919 --0.0765776205808 -0.766866207123 --0.0765788573772 -0.78412270546 --0.0765803884715 -0.801379337907 --0.0765821933746 -0.818636536598 --0.076584270224 -0.835893943906 --0.076586605981 -0.853152051568 --0.0765878800303 -0.87237624824 --0.0765866730362 -0.891598775983 --0.0765843056142 -0.908856704831 --0.0765822269023 -0.926114320755 --0.0765804238617 -0.943371325731 --0.0765788778663 -0.960628151894 --0.0765776205808 -0.977884471417 --0.0765766706317 -0.995140746235 --0.0765759795904 -1.01239666343 --0.0765755455941 -1.02965256572 --0.0765753984451 -1.04690822959 --0.0765755418688 -1.06416413188 --0.076575960964 -1.08141991496 --0.0765766557306 -1.09867596626 --0.0765776205808 -1.11593204737 --0.0765788573772 -1.13318860531 --0.0765803884715 -1.15044519305 --0.0765821933746 -1.16770234704 --0.076584270224 -1.18495979905 --0.076586605981 -1.20221790671 --0.0765878800303 -1.22144210339 --0.0765866730362 -1.24066463113 --0.0765843056142 -1.25792255998 --0.0765822269023 -1.2751801908 --0.0765804238617 -1.29243719578 --0.0765788778663 -1.30969399214 --0.0765776205808 -1.32695031166 --0.0765766557306 -1.34420657158 --0.0765759646893 -1.36146244407 --0.0765755455941 -1.37871840596 --0.0765753984451 -1.39597412944 --0.0765755418688 -1.41323000193 --0.076575960964 -1.4304857552 --0.0765766557306 -1.44774183631 --0.0765776205808 -1.46499791742 --0.0765788573772 -1.48225441575 --0.0765803884715 -1.4995110333 --0.0765821933746 -1.51676821709 --0.076584270224 -1.53402563929 --0.076586605981 -1.55128374696 --0.0765878800303 -1.57050794363 --0.0765866730362 -1.58973047137 --0.0765843056142 -1.60698840022 --0.0765822269023 -1.62424603104 --0.0765804238617 -1.64150303602 --0.0765788778663 -1.65875986219 --0.0765776205808 -1.67601618171 --0.0765766557306 -1.69327244163 --0.0765759646893 -1.71052834392 --0.0765755455941 -1.72778427601 --0.0765753984451 -1.74503996968 --0.0765755418688 -1.76229587197 --0.076575960964 -1.77955162525 --0.0765766557306 -1.79680770636 --0.0765776205808 -1.81406378746 --0.0765788573772 -1.8313202858 --0.0765803884715 -1.84857687354 --0.0765821933746 -1.86583402753 --0.076584270224 -1.88309147954 --0.076586605981 -1.900349617 --0.0765878800303 -1.91957384348 --0.0765866730362 -1.93879637122 --0.0765843056142 -1.95605430007 --0.0765822269023 -1.97331190109 --0.0765804238617 -1.99056887627 --0.0765788778663 -2.00782573223 --0.0765776205808 -2.02508205175 --0.0765766706317 -2.04233831167 --0.0765759795904 -2.05959421396 --0.0765755455941 -2.07685011625 --0.0765753984451 -2.09410578012 --0.0765755418688 -2.11136168241 --0.076575960964 -2.1286174655 --0.0765766557306 -2.1458735466 --0.0765776205808 -2.16312962771 --0.0765788573772 -2.18038612604 --0.0765803884715 -2.19764274359 --0.0765821933746 -2.21489989758 --0.076584270224 -2.23215734959 --0.076586605981 -2.24941545725 --0.0765878800303 -2.26863968372 --0.0765866730362 -2.28786224127 --0.0765843056142 -2.30512017012 --0.0765822269023 -2.32237780094 --0.0765804238617 -2.33963477611 --0.0765788778663 -2.35689157247 --0.0765776205808 -2.374147892 --0.0765766557306 -2.39140415192 --0.0765759646893 -2.4086599946 --0.0765755455941 -2.4259159565 --0.0765753984451 -2.44317167997 --0.0765755418688 -2.46042758226 --0.076575960964 -2.47768336535 --0.0765766557306 -2.49493938685 --0.0765776205808 -2.51219540834 --0.0765788573772 -2.52945190668 --0.0765803884715 -2.54670852423 --0.0765821933746 -2.56396573782 --0.076584270224 -2.58122318983 --0.076586605981 -2.59848129749 --0.0765878800303 -2.61770552397 --0.0765866730362 -2.63692802191 --0.0765843056142 -2.65418595076 --0.0765822269023 -2.67144358158 --0.0765804238617 -2.68870055675 --0.0765788778663 -2.70595735311 --0.0765776205808 -2.72321367264 --0.0765766557306 -2.74046993256 --0.0765759646893 -2.75772583485 --0.0765755455941 -2.77498185635 --0.0765753984451 -2.79223757982 --0.0765755418688 -2.80949342251 --0.076575960964 -2.82674914599 --0.0765766557306 -2.84400522709 --0.0765776205808 -2.8612613678 --0.0765788573772 -2.87851786613 --0.0765803884715 -2.89577448368 --0.0765821933746 -2.91303163767 --0.076584270224 -2.93028903007 --0.076586605981 -2.94754719734 --0.0765878800303 -2.96677136421 --0.0765866730362 -2.98599386215 --0.0765843056142 -3.003251791 --0.0765822269023 -3.02050942183 --0.0765804238617 -3.0377664566 --0.0765788778663 -3.05502331257 --0.0765776205808 -3.07227963209 --0.0765766557306 -3.08953589201 --0.0765759646893 -3.1067917943 --0.0765755455941 -3.12404769659 --0.0765753984451 -3.14130339225 --0.0765755418688 --3.12462604046 --0.076575960964 --3.10737031698 --0.0765766557306 --3.09011423588 --0.0765776373446 --3.07285809517 --0.076578874141 --3.05560159683 --0.0765803884715 --3.03834497929 --0.0765821933746 --3.0210878253 --0.076584270224 --3.00383043289 --0.076586605981 --2.98657226562 --0.0765878800303 --2.96734809876 --0.0765866730362 --2.94812560082 --0.0765843056142 --2.93086767197 --0.0765822269023 --2.91361004114 --0.0765804238617 --2.89635300636 --0.0765788778663 --2.8790961504 --0.0765776205808 --2.86183983088 --0.0765766706317 --2.84458357096 --0.0765759795904 --2.82732766867 --0.0765755455941 --2.81007176638 --0.0765753984451 --2.7928160429 --0.0765755418688 --2.77556014061 --0.076575960964 --2.75830441713 --0.0765766557306 --2.74104833603 --0.0765776205808 --2.72379225492 --0.0765788573772 --2.70653575658 --0.0765803884715 --2.68927913904 --0.0765821933746 --2.67202198505 --0.076584270224 --2.65476453304 --0.076586605981 --2.63750642538 --0.0765878800303 --2.61828231811 --0.0765866730362 --2.59905976057 --0.0765843056142 --2.58180177212 --0.0765822269023 --2.5645442009 --0.0765804238617 --2.54728716612 --0.0765788778663 --2.53003031016 --0.0765776205808 --2.51277399063 --0.0765766557306 --2.49551773071 --0.0765759646893 --2.47826188803 --0.0765755455941 --2.46100598574 --0.0765753984451 --2.44375026226 --0.0765755418688 --2.42649435997 --0.076575960964 --2.40923857689 --0.0765766557306 --2.39198249578 --0.0765776205808 --2.37472647428 --0.0765788573772 --2.35746997595 --0.0765803884715 --2.3402133584 --0.0765821933746 --2.32295614481 --0.076584270224 --2.3056986928 --0.076586605981 --2.28844064474 --0.0765878800303 --2.26921641827 --0.0765866730362 --2.24999386072 --0.0765843056142 --2.23273593187 --0.0765822269023 --2.21547830105 --0.0765804238617 --2.19822132588 --0.0765788778663 --2.18096452952 --0.0765776205808 --2.16370820999 --0.0765766706317 --2.14645195007 --0.0765759795904 --2.12919604778 --0.0765755455941 --2.11194008589 --0.0765753984451 --2.09468442202 --0.0765755418688 --2.07742851973 --0.076575960964 --2.06017273664 --0.0765766557306 --2.04291665554 --0.0765776205808 --2.02566051483 --0.0765788573772 --2.0084040463 --0.0765803884715 --1.99114748835 --0.0765821933746 --1.97389027476 --0.076584270224 --1.95663282275 --0.076586605981 --1.93937474489 --0.0765878800303 --1.92015057802 --0.0765866730362 --1.90092805028 --0.0765843056142 --1.88367012143 --0.0765822269023 --1.8664124906 --0.0765804238617 --1.84915548563 --0.0765788778663 --1.83189865947 --0.0765776205808 --1.81464233995 --0.0765766557306 --1.79738608002 --0.0765759646893 --1.78013017773 --0.0765755455941 --1.76287421584 --0.0765753984451 --1.74561852217 --0.0765755418688 --1.72836264968 --0.076575960964 --1.7111068964 --0.0765766557306 --1.69385081529 --0.0765776205808 --1.67659473419 --0.0765788573772 --1.65933823586 --0.0765803884715 --1.6420815885 --0.0765821933746 --1.62482443452 --0.076584270224 --1.60756701231 --0.076586605981 --1.59030887484 --0.0765878800303 --1.57108467817 --0.0765866730362 --1.55186215043 --0.0765843056142 --1.53460422158 --0.0765822269023 --1.51734662056 --0.0765804238617 --1.50008964539 --0.0765788778663 --1.48283281922 --0.0765776205808 --1.4655764699 --0.0765766557306 --1.44832018018 --0.0765759646893 --1.43106427789 --0.0765755455941 --1.41380837559 --0.0765753984451 --1.39655271173 --0.0765755418688 --1.37929680943 --0.076575960964 --1.36204102636 --0.0765766557306 --1.34478494525 --0.0765776205808 --1.32752889395 --0.0765788573772 --1.31027242541 --0.0765803884715 --1.29301580787 --0.0765821933746 --1.27575859428 --0.076584270224 --1.25850114226 --0.076586605981 --1.2412430346 --0.0765878800303 --1.22201886773 --0.0765866730362 --1.20279633999 --0.0765843056142 --1.18553841114 --0.0765822269023 --1.16828078032 --0.0765804238617 --1.15102374554 --0.0765788778663 --1.13376694918 --0.0765776205808 --1.11651062965 --0.0765766706317 --1.09925436974 --0.0765759795904 --1.08199849725 --0.0765755455941 --1.06474253535 --0.0765753984451 --1.04748681188 --0.0765755418688 --1.03023093939 --0.076575960964 --1.01297521591 --0.0765766557306 --0.995719149711 --0.0765776205808 --0.978463068604 --0.0765788573772 --0.961206540465 --0.0765803884715 --0.943949908018 --0.0765821933746 --0.926692739129 --0.076584270224 --0.909435287118 --0.076586605981 --0.892177179456 --0.0765878800303 --0.872952997685 --0.0765866730362 --0.853730484843 --0.0765843056142 --0.836472555995 --0.0765822269023 --0.819214910269 --0.0765804238617 --0.801957920194 --0.0765788778663 --0.784701108933 --0.0765776205808 --0.767444774509 --0.0765766557306 --0.750188499689 --0.0765759646893 --0.7329326123 --0.0765755455941 --0.715676680207 --0.0765753984451 --0.698420986533 --0.0765755418688 --0.681165084243 --0.076575960964 --0.663909316063 --0.0765766557306 --0.646653264761 --0.0765776205808 --0.629397198558 --0.0765788573772 --0.61214068532 --0.0765803884715 --0.594884067774 --0.0765821933746 --0.577626898885 --0.076584270224 --0.560369446874 --0.076586605981 --0.543111324311 --0.0765878800303 --0.523887142539 --0.0765866730362 --0.504664614797 --0.0765843056142 --0.487406678498 --0.0765822269023 --0.470149077475 --0.0765804238617 --0.452892079949 --0.0765788778663 --0.435635246336 --0.0765776205808 --0.418378919363 --0.0765766557306 --0.401122659444 --0.0765759646893 --0.383866772056 --0.0765755455941 --0.366610825062 --0.0765753984451 --0.349355131388 --0.0765755418688 --0.332099243999 --0.076575960964 --0.314843468368 --0.0765766557306 --0.297587402165 --0.0765776205808 --0.280331335962 --0.0765788573772 --0.263074830175 --0.0765803884715 --0.245818208903 --0.0765821933746 --0.228561028838 --0.076584270224 --0.211303599179 --0.076586605981 --0.194045498968 --0.0765878800303 --0.174821309745 --0.0580773456022 --0.155594792217 --0.0580755583942 --0.13833687827 --0.0580739928409 --0.121079271659 --0.0580726172775 --0.103822279722 --0.058071446605 --0.0865654759109 --0.0580704808235 --0.0693091703579 --0.0580697376281 --0.0520529244095 --0.0580692170188 --0.0347970542498 --0.0580689013004 --0.0175411212258 --0.0580687886104 --0.000285435467957 --0.0580688985065 -0.0169704342261 --0.0580692319199 -0.0342261800543 --0.0580697543919 -0.0514822322875 --0.0580704817548 -0.0687382891774 --0.0580714130774 -0.085994778201 --0.0580725669861 -0.103251390159 --0.0580739434809 -0.120508559048 --0.0580755248666 -0.137765970081 --0.0580772962421 -0.155024055392 --0.0580782620236 -0.174248386175 --0.0580773456022 -0.193471055478 --0.0580755583942 -0.21072897315 --0.0580739928409 -0.227986585349 --0.0580726172775 -0.245243575424 --0.058071446605 -0.262500375509 --0.0580704808235 -0.279756687582 --0.0580697525293 -0.297012925148 --0.05806923192 -0.314268790185 --0.0580689013004 -0.331524737179 --0.0580687886104 -0.348780423403 --0.0580688985065 -0.36603628844 --0.0580692319199 -0.383292026817 --0.0580697543919 -0.40054808557 --0.058070464991 -0.417804151773 --0.0580713963136 -0.435060627758 --0.0580725669861 -0.452317222953 --0.0580739434809 -0.469574391842 --0.0580755248666 -0.486831814051 --0.0580772962421 -0.504089906812 --0.0580782620236 -0.523314237594 --0.0580773456022 -0.542536899447 --0.0580755583942 -0.559794813395 --0.0580739928409 -0.577052414417 --0.0580726172775 -0.594309419394 --0.058071446605 -0.611566230654 --0.0580704808235 -0.628822520375 --0.0580697376281 -0.646078765392 --0.0580692170188 -0.66333463788 --0.0580689013004 -0.680590569973 --0.0580687886104 -0.697846248746 --0.0580688985065 -0.715102136135 --0.0580692319199 -0.732357904315 --0.0580697543919 -0.749613955617 --0.058070464991 -0.766870006919 --0.0580713963136 -0.784126475453 --0.0580725669861 -0.801383078098 --0.0580739434809 -0.818640261889 --0.0580755248666 -0.835897669196 --0.0580772962421 -0.853155747056 --0.0580782620236 -0.872380077839 --0.0580773456022 -0.891602754593 --0.0580755583942 -0.908860683441 --0.0580739928409 -0.926118299365 --0.0580726172775 -0.943375274539 --0.058071446605 -0.960632055998 --0.0580704808235 -0.977888375521 --0.0580697525293 -0.99514465034 --0.05806923192 -1.01240053773 --0.0580689013004 -1.02965644002 --0.0580687886104 -1.04691210389 --0.0580688985065 -1.06416797638 --0.0580692319199 -1.08142372966 --0.0580697543919 -1.09867978096 --0.058070464991 -1.11593583226 --0.0580713963136 -1.1331923604 --0.0580725669861 -1.15044894814 --0.0580739434809 -1.16770610213 --0.0580755248666 -1.18496355414 --0.0580772962421 -1.202221632 --0.0580782620236 -1.22144597769 --0.0580773456022 -1.24066862464 --0.0580755583942 -1.25792649389 --0.0580739928409 -1.27518412471 --0.0580726172775 -1.29244112969 --0.058071446605 -1.30969792605 --0.0580704808235 -1.32695424557 --0.0580697376281 -1.34421047568 --0.0580692170188 -1.36146631837 --0.0580689013004 -1.37872228026 --0.0580687886104 -1.39597797394 --0.0580688985065 -1.41323381663 --0.0580692319199 -1.4304895699 --0.0580697543919 -1.44774565101 --0.058070464991 -1.46500170231 --0.0580713963136 -1.48225817085 --0.0580725669861 -1.49951478839 --0.0580739434809 -1.51677194238 --0.0580755248666 -1.53402933478 --0.0580772962421 -1.55128744245 --0.0580782620236 -1.57051178813 --0.0580773456022 -1.58973446488 --0.0580755583942 -1.60699239373 --0.0580739928409 -1.62424999475 --0.0580726172775 -1.64150696993 --0.058071446605 -1.65876376629 --0.0580704808235 -1.67602005601 --0.0580697376281 -1.69327631592 --0.0580692170188 -1.71053221822 --0.0580689013004 -1.72778812051 --0.0580687886104 -1.74504378438 --0.0580688985065 -1.76229968667 --0.0580692319199 -1.77955543995 --0.0580697543919 -1.79681149125 --0.058070464991 -1.81406757235 --0.0580713963136 -1.83132407069 --0.0580725669861 -1.84858065843 --0.0580739434809 -1.86583781242 --0.0580755248666 -1.88309523463 --0.0580772962421 -1.90035331249 --0.0580782620236 -1.91957765817 --0.0580773456022 -1.93880033493 --0.0580755583942 -1.95605823398 --0.0580739928409 -1.973315835 --0.0580726172775 -1.99057281017 --0.058071446605 -2.00782963634 --0.0580704808235 -2.02508598566 --0.0580697525293 -2.04234224558 --0.05806923192 -2.05959808826 --0.0580689013004 -2.07685399055 --0.0580687886104 -2.09410965442 --0.0580688985065 -2.11136555672 --0.0580692319199 -2.1286213398 --0.0580697543919 -2.1458773613 --0.058070464991 -2.1631333828 --0.0580713963136 -2.18038988113 --0.0580725669861 -2.19764649868 --0.0580739434809 -2.21490365267 --0.0580755248666 -2.23216110468 --0.0580772962421 -2.24941915274 --0.0580782620236 -2.26864349842 --0.0580773456022 -2.28786617518 --0.0580755583942 -2.30512404442 --0.0580739928409 -2.32238173485 --0.0580726172775 -2.33963871002 --0.058071446605 -2.35689544678 --0.0580704808235 -2.3741517663 --0.0580697376281 -2.39140802622 --0.0580692170188 -2.4086638689 --0.0580689013004 -2.42591977119 --0.0580687886104 -2.44317549467 --0.0580688985065 -2.46043139696 --0.0580692319199 -2.47768712044 --0.0580697543919 -2.49494314194 --0.058070464991 -2.51219916344 --0.0580713963136 -2.52945566178 --0.0580725669861 -2.54671227932 --0.0580739434809 -2.56396943331 --0.0580755248666 -2.58122688532 --0.0580772962421 -2.59848505258 --0.0580782620236 -2.61770939827 --0.0580773456022 -2.63693201542 --0.0580755583942 -2.65418994427 --0.0580739928409 -2.67144757509 --0.0580726172775 -2.68870455027 --0.058071446605 -2.70596134662 --0.0580704808235 -2.72321760654 --0.0580697376281 -2.74047380686 --0.0580692170188 -2.75772970915 --0.0580689013004 -2.77498567104 --0.0580687886104 -2.79224139452 --0.0580688985065 -2.8094972372 --0.0580692319199 -2.82675296068 --0.0580697543919 -2.84400904179 --0.058070464991 -2.86126512289 --0.0580713963136 -2.87852162123 --0.0580725669861 -2.89577823878 --0.0580739434809 -2.91303539276 --0.0580755248666 -2.93029272556 --0.0580772962421 -2.94755083322 --0.0580782620236 -2.96677517891 --0.0580773456022 -2.98599785566 --0.0580755583942 -3.00325578451 --0.0580739928409 -3.02051335573 --0.0580726172775 -3.0377703309 --0.058071446605 -3.05502718687 --0.0580704808235 -3.07228350639 --0.0580697376281 -3.08953976631 --0.0580692170188 -3.1067956686 --0.0580689013004 -3.12405157089 --0.0580687886104 -3.14130726655 --0.0580688985065 --3.12462222576 --0.0580692319199 --3.10736650229 --0.0580697543919 --3.09011042118 --0.0580704817548 --3.07285434008 --0.0580714130774 --3.05559784174 --0.0580725669861 --3.03834122419 --0.0580739434809 --3.02108407021 --0.0580755248666 --3.00382673741 --0.0580772962421 --2.98656862974 --0.0580782620236 --2.96734428406 --0.0580773456022 --2.94812160731 --0.0580755583942 --2.93086367846 --0.0580739928409 --2.91360610723 --0.0580726172775 --2.89634913206 --0.058071446605 --2.8790922761 --0.0580704808235 --2.86183595658 --0.0580697525293 --2.84457969666 --0.05806923192 --2.82732379437 --0.0580689013004 --2.81006789208 --0.0580687886104 --2.7928122282 --0.0580688985065 --2.77555632591 --0.0580692319199 --2.75830054283 --0.0580697543919 --2.74104452133 --0.058070464991 --2.72378849983 --0.0580713963136 --2.7065320611 --0.0580725669861 --2.68927544355 --0.0580739434809 --2.67201822996 --0.0580755248666 --2.65476077795 --0.0580772962421 --2.63750272989 --0.0580782620236 --2.61827844381 --0.0580773456022 --2.59905576706 --0.0580755583942 --2.58179789782 --0.0580739928409 --2.56454026699 --0.0580726172775 --2.54728317261 --0.058071446605 --2.53002637625 --0.0580704808235 --2.51277011633 --0.0580697376281 --2.49551385641 --0.0580692170188 --2.47825801373 --0.0580689013004 --2.46100211144 --0.0580687886104 --2.44374644756 --0.0580688985065 --2.42649054527 --0.0580692319199 --2.40923476219 --0.0580697543919 --2.39197874069 --0.058070464991 --2.37472271919 --0.0580713963136 --2.35746622085 --0.0580725669861 --2.34020960331 --0.0580739434809 --2.32295244932 --0.0580755248666 --2.30569499731 --0.0580772962421 --2.28843688965 --0.0580782620236 --2.26921254396 --0.0580773456022 --2.24998986721 --0.0580755583942 --2.23273193836 --0.0580739928409 --2.21547430754 --0.0580726172775 --2.19821733237 --0.058071446605 --2.18096059561 --0.0580704808235 --2.16370433569 --0.0580697525293 --2.14644807577 --0.05806923192 --2.12919217348 --0.0580689013004 --2.11193621159 --0.0580687886104 --2.09468054771 --0.0580688985065 --2.07742470503 --0.0580692319199 --2.06016898155 --0.0580697543919 --2.04291290045 --0.058070464991 --2.02565675974 --0.0580713963136 --2.00840029121 --0.0580725669861 --1.99114373326 --0.0580739434809 --1.97388654947 --0.0580755248666 --1.95662912727 --0.0580772962421 --1.93937104941 --0.0580782620236 --1.92014673352 --0.0580773456022 --1.90092405677 --0.0580755583942 --1.88366612792 --0.0580739928409 --1.86640852689 --0.0580726172775 --1.84915155172 --0.058071446605 --1.83189475537 --0.0580704808235 --1.81463843584 --0.0580697376281 --1.79738217592 --0.0580692170188 --1.78012630343 --0.0580689013004 --1.76287037134 --0.0580687886104 --1.74561470747 --0.0580688985065 --1.72835883498 --0.0580692319199 --1.7111030817 --0.0580697543919 --1.6938470304 --0.058070464991 --1.6765909493 --0.0580713963136 --1.65933445096 --0.0580725669861 --1.64207783341 --0.0580739434809 --1.62482067942 --0.0580755248666 --1.60756328702 --0.0580772962421 --1.59030520916 --0.0580782620236 --1.57108086347 --0.0580773456022 --1.55185818672 --0.0580755583942 --1.53460028768 --0.0580739928409 --1.51734268665 --0.0580726172775 --1.50008571148 --0.058071446605 --1.48282888532 --0.0580704808235 --1.4655725658 --0.0580697376281 --1.44831630587 --0.0580692170188 --1.43106040359 --0.0580689013004 --1.4138045013 --0.0580687886104 --1.39654883743 --0.0580688985065 --1.37929296494 --0.0580692319199 --1.36203721166 --0.0580697543919 --1.34478113055 --0.058070464991 --1.32752510905 --0.0580713963136 --1.31026867032 --0.0580725669861 --1.29301205277 --0.0580739434809 --1.27575486898 --0.0580755248666 --1.25849744677 --0.0580772962421 --1.24123933911 --0.0580782620236 --1.22201499343 --0.0580773456022 --1.20279234648 --0.0580755583942 --1.18553444744 --0.0580739928409 --1.16827681661 --0.0580726172775 --1.15101981163 --0.058071446605 --1.13376301527 --0.0580704808235 --1.11650669575 --0.0580697525293 --1.09925046563 --0.05806923192 --1.08199462294 --0.0580689013004 --1.06473869085 --0.0580687886104 --1.04748299718 --0.0580688985065 --1.03022712469 --0.0580692319199 --1.01297137141 --0.0580697543919 --0.995715305209 --0.058070464991 --0.978459268808 --0.0580713963136 --0.961202785373 --0.0580725669861 --0.943946167826 --0.0580739434809 --0.926688998937 --0.0580755248666 --0.909431576728 --0.0580772962421 --0.892173498869 --0.0580782620236 --0.872949168086 --0.0580773456022 --0.853726506233 --0.0580755583942 --0.836468592286 --0.0580739928409 --0.819210961461 --0.0580726172775 --0.801953986287 --0.058071446605 --0.784697175026 --0.0580704808235 --0.767440855503 --0.0580697376281 --0.750184610486 --0.0580692170188 --0.732928737998 --0.0580689013004 --0.715672820806 --0.0580687886104 --0.698417142034 --0.0580688985065 --0.681161269546 --0.0580692319199 --0.663905516267 --0.0580697543919 --0.646649464965 --0.058070464991 --0.629393413663 --0.0580713963136 --0.612136930227 --0.0580725669861 --0.594880327582 --0.0580739434809 --0.577623173594 --0.0580755248666 --0.560365736485 --0.0580772962421 --0.543107628822 --0.0580782620236 --0.523883312941 --0.0580773456022 --0.504660636187 --0.0580755583942 --0.487402714789 --0.0580739928409 --0.470145128667 --0.0580726172775 --0.452888146043 --0.058071446605 --0.435631327331 --0.0580704808235 --0.418375015259 --0.0580697376281 --0.401118770242 --0.0580692170188 --0.383862890303 --0.0580689013004 --0.36660695821 --0.0580687886104 --0.349351286888 --0.0580688985065 --0.332095421851 --0.0580692319199 --0.314839668572 --0.0580697543919 --0.29758361727 --0.058070464991 --0.280327558517 --0.0580713963136 --0.263071067631 --0.0580725669861 --0.245814464987 --0.0580739434809 --0.228557296097 --0.0580755248666 --0.211299881339 --0.0580772962421 --0.194041796029 --0.0580782620236 --0.174817465246 --0.0395497288555 --0.155590806156 --0.0395485167392 --0.13833290711 --0.0395474452525 --0.121075313538 --0.0395464980975 --0.103818336502 --0.039545705542 --0.0865615531802 --0.0395450526848 --0.069305264391 --0.0395445558242 --0.0520490324124 --0.0395441986621 --0.0347931785509 --0.0395439658314 --0.0175372611266 --0.0395439034328 --0.00028159096837 --0.0395439807326 -0.016974263126 --0.0395441986621 -0.0342299924232 --0.0395445553586 -0.051486030221 --0.0395450368524 -0.0687420703471 --0.039545673877 -0.0859985426068 --0.0395464664325 -0.103255139664 --0.0395473991521 -0.120512291789 --0.0395484860055 -0.137769691646 --0.0395496971906 -0.155027762056 --0.0395503500477 -0.174252230674 --0.0395497288555 -0.193475041538 --0.0395485167392 -0.21073294431 --0.0395474452525 -0.227990537882 --0.0395464980975 -0.24524750933 --0.039545705542 -0.262504301965 --0.0395450526848 -0.279760599137 --0.0395445558242 -0.297016814351 --0.0395441986621 -0.314272657037 --0.0395439658314 -0.331528581679 --0.0395439034328 -0.348784253001 --0.0395439807326 -0.366040110588 --0.0395441986621 -0.383295834064 --0.0395445553586 -0.400551877916 --0.0395450368524 -0.417807936668 --0.039545673877 -0.435064397752 --0.0395464664325 -0.452320985496 --0.0395473991521 -0.469578132034 --0.0395484860055 -0.48683552444 --0.0395496971906 -0.50409360975 --0.0395503500477 -0.523318096995 --0.0395497288555 -0.542540878058 --0.0395485167392 -0.559798762202 --0.0395474452525 -0.577056378126 --0.0395465134643 -0.594313368201 --0.0395457209088 -0.61157014966 --0.0395450526848 -0.628826439381 --0.0395445558242 -0.646082669497 --0.0395441986621 -0.663338512182 --0.0395439658314 -0.680594429374 --0.0395439034328 -0.697850078344 --0.0395439807326 -0.715105950832 --0.0395441986621 -0.732361719012 --0.0395445553586 -0.749617755413 --0.0395450368524 -0.766873776913 --0.039545673877 -0.784130215645 --0.0395464664325 -0.801386803388 --0.0395473991521 -0.818643972278 --0.0395484860055 -0.835901379585 --0.0395496971906 -0.853159442544 --0.0395503500477 -0.872383907437 --0.0395497288555 -0.891606733203 --0.0395485167392 -0.908864662051 --0.0395474452525 -0.926122263074 --0.0395465134643 -0.943379208445 --0.0395457209088 -0.960635989904 --0.0395450526848 -0.977892294526 --0.0395445558242 -0.995148539545 --0.0395441986621 -1.01240441203 --0.0395439658314 -1.02966031432 --0.0395439034328 -1.04691597819 --0.0395439807326 -1.06417182088 --0.0395441986621 -1.08142754435 --0.0395445553586 -1.09868359566 --0.0395450368524 -1.11593961716 --0.039545673877 -1.13319608569 --0.0395464664325 -1.15045267343 --0.0395473991521 -1.16770982742 --0.0395484860055 -1.18496724963 --0.0395496971906 -1.20222529769 --0.0395503500477 -1.22144979239 --0.0395497288555 -1.24067261815 --0.0395485167392 -1.25793048739 --0.0395474452525 -1.27518808842 --0.0395465134643 -1.29244506359 --0.0395457209088 -1.30970185995 --0.0395450526848 -1.32695814967 --0.0395445558242 -1.34421434999 --0.0395441986621 -1.36147019267 --0.0395439658314 -1.37872612477 --0.0395439034328 -1.39598178864 --0.0395439807326 -1.41323763132 --0.0395441986621 -1.4304933846 --0.0395445553586 -1.44774946571 --0.0395450368524 -1.46500548721 --0.039545673877 -1.48226192594 --0.0395464664325 -1.49951854348 --0.0395473991521 -1.51677569747 --0.0395484860055 -1.53403308988 --0.0395496971906 -1.55129116774 --0.0395503500477 -1.57051563263 --0.0395497288555 -1.5897384584 --0.0395485167392 -1.60699638725 --0.0395474452525 -1.62425395847 --0.0395465134643 -1.64151090384 --0.0395457209088 -1.6587677002 --0.0395450526848 -1.67602398992 --0.0395445558242 -1.69328022003 --0.0395441986621 -1.71053609252 --0.0395439658314 -1.72779199481 --0.0395439034328 -1.74504765868 --0.0395439807326 -1.76230353117 --0.0395441986621 -1.77955925465 --0.0395445553586 -1.79681527614 --0.0395450368524 -1.81407132745 --0.039545673877 -1.83132782579 --0.0395464664325 -1.84858441353 --0.0395473991521 -1.86584153771 --0.0395484860055 -1.88309895992 --0.0395496971906 -1.90035703778 --0.0395503500477 -1.91958150267 --0.0395497288555 -1.93880429864 --0.0395485167392 -1.95606216788 --0.0395474452525 -1.97331976891 --0.0395464980975 -1.99057674408 --0.039545705542 -2.00783354044 --0.0395450526848 -2.02508985996 --0.0395445558242 -2.04234611988 --0.0395441986621 -2.05960196256 --0.0395439658314 -2.07685786486 --0.0395439034328 -2.09411352873 --0.0395439807326 -2.11136943102 --0.0395441986621 -2.1286251545 --0.0395445553586 -2.14588111639 --0.0395450368524 -2.16313713789 --0.039545673877 -2.18039363623 --0.0395464664325 -2.19765025377 --0.0395473991521 -2.21490734816 --0.0395484860055 -2.23216480017 --0.0395496971906 -2.24942290783 --0.0395503500477 -2.26864731312 --0.0395497288555 -2.28787010908 --0.0395485167392 -2.30512797833 --0.0395474452525 -2.32238560915 --0.0395464980975 -2.33964258433 --0.039545705542 -2.35689938069 --0.0395450526848 -2.37415570021 --0.0395445558242 -2.39141190052 --0.0395441986621 -2.40866774321 --0.0395439658314 -2.4259236455 --0.0395439034328 -2.44317936897 --0.0395439807326 -2.46043527126 --0.0395441986621 -2.47769093513 --0.0395445553586 -2.49494695663 --0.0395450368524 -2.51220303774 --0.039545673877 -2.52945947647 --0.0395464664325 -2.54671603441 --0.0395473991521 -2.5639731884 --0.0395484860055 -2.58123064041 --0.0395496971906 -2.59848874807 --0.0395503500477 -2.61771321297 --0.0395497288555 -2.63693600893 --0.0395485167392 -2.65419393778 --0.0395474452525 -2.671451509 --0.0395464980975 -2.68870848417 --0.039545705542 -2.70596534014 --0.0395450526848 -2.72322160006 --0.0395445558242 -2.74047774076 --0.0395441986621 -2.75773358345 --0.0395439658314 -2.77498948574 --0.0395439034328 -2.79224514961 --0.0395439807326 -2.8095010519 --0.0395441986621 -2.82675683498 --0.0395445553586 -2.84401285649 --0.0395450368524 -2.86126887799 --0.039545673877 -2.87852537632 --0.0395464664325 -2.89578199387 --0.0395473991521 -2.91303914785 --0.0395484860055 -2.93029648066 --0.0395496971906 -2.94755452871 --0.0395503500477 -2.96677899361 --0.0395497288555 -2.98600178957 --0.0395485167392 -3.00325971842 --0.0395474452525 -3.02051734924 --0.0395464980975 -3.03777432441 --0.039545705542 -3.05503112077 --0.0395450526848 -3.0722873807 --0.0395445558242 -3.08954364061 --0.0395441986621 -3.1067995429 --0.0395439658314 -3.12405544519 --0.0395439034328 -3.14131108125 --0.0395439807326 --3.12461841106 --0.0395441986621 --3.10736262798 --0.0395445553586 --3.09010660648 --0.0395450368524 --3.07285058498 --0.039545673877 --3.05559408665 --0.0395464664325 --3.0383374691 --0.0395473991521 --3.02108031512 --0.0395484860055 --3.00382298231 --0.0395496971906 --2.98656493426 --0.0395503500477 --2.96734046936 --0.0395497288555 --2.9481176734 --0.0395485167392 --2.93085974455 --0.0395474452525 --2.91360211372 --0.0395464980975 --2.89634513855 --0.039545705542 --2.87908834219 --0.0395450526848 --2.86183208227 --0.0395445558242 --2.84457582235 --0.0395441986621 --2.82731992006 --0.0395439658314 --2.81006401777 --0.0395439034328 --2.7928084135 --0.0395439807326 --2.77555257082 --0.0395441986621 --2.75829678774 --0.0395445553586 --2.74104076624 --0.0395450368524 --2.72378474474 --0.039545673877 --2.70652830601 --0.0395464664325 --2.68927168846 --0.0395473991521 --2.67201453448 --0.0395484860055 --2.65475714207 --0.0395496971906 --2.6374990344 --0.0395503500477 --2.61827450991 --0.0395497288555 --2.59905171394 --0.0395485167392 --2.5817939043 --0.0395474452525 --2.56453627348 --0.0395465134643 --2.5472792387 --0.0395457209088 --2.53002250195 --0.0395450526848 --2.51276624203 --0.0395445558242 --2.49550998211 --0.0395441986621 --2.47825413943 --0.0395439658314 --2.46099823714 --0.0395439034328 --2.44374257326 --0.0395439807326 --2.42648667097 --0.0395441986621 --2.40923094749 --0.0395445553586 --2.391974926 --0.0395450368524 --2.3747189045 --0.039545673877 --2.35746246576 --0.0395464664325 --2.34020584822 --0.0395473991521 --2.32294869423 --0.0395484860055 --2.30569124222 --0.0395496971906 --2.28843313456 --0.0395503500477 --2.26920866966 --0.0395497288555 --2.2499858737 --0.0395485167392 --2.23272794485 --0.0395474452525 --2.21547037363 --0.0395465134643 --2.19821345806 --0.0395457209088 --2.1809566617 --0.0395450526848 --2.16370034218 --0.0395445558242 --2.14644414186 --0.0395441986621 --2.12918829918 --0.0395439658314 --2.11193239689 --0.0395439034328 --2.09467673302 --0.0395439807326 --2.07742083072 --0.0395441986621 --2.06016510725 --0.0395445553586 --2.04290908575 --0.0395450368524 --2.02565300465 --0.039545673877 --2.00839653611 --0.0395464664325 --1.99113997817 --0.0395473991521 --1.97388282418 --0.0395484860055 --1.95662543178 --0.0395496971906 --1.93936735392 --0.0395503500477 --1.92014288902 --0.0395497288555 --1.90092006326 --0.0395485167392 --1.88366213441 --0.0395474452525 --1.86640456319 --0.0395465134643 --1.84914758802 --0.0395457209088 --1.83189079166 --0.0395450526848 --1.81463450193 --0.0395445558242 --1.79737827182 --0.0395441986621 --1.78012242913 --0.0395439658314 --1.76286652684 --0.0395439034328 --1.74561086297 --0.0395439807326 --1.72835499048 --0.0395441986621 --1.71109926701 --0.0395445553586 --1.69384324551 --0.0395450368524 --1.6765871942 --0.039545673877 --1.65933069587 --0.0395464664325 --1.64207407832 --0.0395473991521 --1.62481692433 --0.0395484860055 --1.60755953193 --0.0395496971906 --1.59030148387 --0.0395503500477 --1.57107701898 --0.0395497288555 --1.55185422301 --0.0395485167392 --1.53459635377 --0.0395474452525 --1.51733872294 --0.0395465134643 --1.50008174777 --0.0395457209088 --1.48282498121 --0.0395450526848 --1.46556869149 --0.0395445558242 --1.44831243158 --0.0395441986621 --1.43105652928 --0.0395439658314 --1.413800627 --0.0395439034328 --1.39654499293 --0.0395439807326 --1.37928915024 --0.0395441986621 --1.36203342676 --0.0395445553586 --1.34477737546 --0.0395450368524 --1.32752132415 --0.039545673877 --1.31026488542 --0.0395464664325 --1.29300829768 --0.0395473991521 --1.27575114369 --0.0395484860055 --1.25849375129 --0.0395496971906 --1.24123567343 --0.0395503500477 --1.22201114893 --0.0395497288555 --1.20278832316 --0.0395485167392 --1.18553045392 --0.0395474452525 --1.1682728529 --0.0395464980975 --1.15101587772 --0.039545705542 --1.13375908137 --0.0395450526848 --1.11650279164 --0.0395445558242 --1.09924659133 --0.0395441986621 --1.08199074865 --0.0395439658314 --1.06473484635 --0.0395439034328 --1.04747918249 --0.0395439807326 --1.03022328019 --0.0395441986621 --1.01296752691 --0.0395445553586 --0.995711505411 --0.0395450368524 --0.978455469012 --0.039545673877 --0.961199000478 --0.0395464664325 --0.943942412734 --0.0395473991521 --0.926685273647 --0.0395484860055 --0.909427866339 --0.0395496971906 --0.89216978848 --0.0395503500477 --0.872945338488 --0.0395497288555 --0.853722527623 --0.0395485167392 --0.836464613676 --0.0395474452525 --0.819207027555 --0.0395464980975 --0.801950067282 --0.039545705542 --0.78469324112 --0.0395450526848 --0.767436936498 --0.0395445558242 --0.750180721283 --0.0395441986621 --0.732924863696 --0.0395439658314 --0.715668961406 --0.0395439034328 --0.698413282633 --0.0395439807326 --0.681157425046 --0.0395441986621 --0.663901716471 --0.0395445553586 --0.64664568007 --0.0395450368524 --0.629389628768 --0.039545673877 --0.612133175135 --0.0395464664325 --0.59487657249 --0.0395473991521 --0.577619403601 --0.0395484860055 --0.560361996293 --0.0395496971906 --0.543103933334 --0.0395503500477 --0.523879468441 --0.0395497288555 --0.504656650126 --0.0395485167392 --0.487398758531 --0.0395474452525 --0.470141172409 --0.0395464980975 --0.452884197235 --0.039545705542 --0.435627408326 --0.0395450526848 --0.418371126056 --0.0395445558242 --0.401114888489 --0.0395441986621 --0.383859023452 --0.0395439658314 --0.36660310626 --0.0395439034328 --0.349347442389 --0.0395439807326 --0.332091592252 --0.0395441986621 --0.314835861325 --0.0395445553586 --0.297579824924 --0.0395450368524 --0.280323788524 --0.039545673877 --0.263067312539 --0.0395464664325 --0.245810709894 --0.0395473991521 --0.228553559631 --0.0395484860055 --0.211296163499 --0.0395496971906 --0.19403809309 --0.0395503500477 --0.174813620746 --0.0210088826716 --0.155586820096 --0.0210082412232 --0.138328932226 --0.0210076605435 --0.121071353555 --0.0210071562324 --0.103814397007 --0.0210067431908 --0.0865576323122 --0.0210063916165 --0.0693013593555 --0.021006132476 --0.0520451404154 --0.0210059490055 --0.034789301455 --0.0210058114026 --0.0175333998632 --0.0210057813675 --0.0002777450718 --0.021005827235 -0.0169780936558 --0.0210059338715 -0.0342338075861 --0.0210061320104 -0.0514898290858 --0.0210063916165 -0.0687458505854 --0.0210067280568 -0.0860023088753 --0.0210071562323 -0.103258894756 --0.0210076451767 -0.120516028255 --0.0210082102567 -0.137773413211 --0.0210088517051 -0.155031468719 --0.0210092030466 -0.174256075174 --0.0210088826716 -0.193479027599 --0.0210082412232 -0.210736915469 --0.0210076605435 -0.22799449414 --0.0210071562324 -0.245251446962 --0.0210067431908 -0.26250822097 --0.0210063916165 -0.27976450324 --0.021006132476 -0.297020711005 --0.0210059490055 -0.314276538789 --0.0210058114026 -0.331532433629 --0.0210057813675 -0.34878809005 --0.021005827235 -0.366043940186 --0.0210059338715 -0.383299656212 --0.0210061320104 -0.400555677712 --0.0210063916165 -0.417811706662 --0.0210067280568 -0.435068160295 --0.0210071562323 -0.452324748039 --0.0210076451767 -0.469581879676 --0.0210082102567 -0.48683924973 --0.0210088517051 -0.504097320139 --0.0210092030466 -0.523321926593 --0.0210088826716 -0.542544871568 --0.0210082412232 -0.559802755713 --0.0210076605435 -0.577060326934 --0.0210071715992 -0.594317302108 --0.0210067585576 -0.611574068666 --0.0210063916165 -0.628830343485 --0.021006132476 -0.6460865587 --0.0210059490055 -0.663342386484 --0.0210058114026 -0.680598288774 --0.0210057813675 -0.697853922844 --0.021005827235 -0.71510976553 --0.0210059338715 -0.732365518808 --0.0210061320104 -0.749621540308 --0.0210063916165 -0.766877546906 --0.0210067280568 -0.784133985639 --0.0210071562323 -0.801390558481 --0.0210076451767 -0.818647697568 --0.0210082102567 -0.835905089974 --0.0210088517051 -0.853163152933 --0.0210092030466 -0.872387766838 --0.0210088826716 -0.891610726714 --0.0210082412232 -0.908868610859 --0.0210076605435 -0.92612618208 --0.0210071715992 -0.943383127451 --0.0210067585576 -0.960639923811 --0.0210063916165 -0.977896213532 --0.021006132476 -0.995152428746 --0.0210059490055 -1.01240828633 --0.0210058114026 -1.02966415882 --0.0210057813675 -1.04691979289 --0.021005827235 -1.06417563557 --0.0210059338715 -1.08143135905 --0.0210061320104 -1.09868738055 --0.0210063916165 -1.11594340205 --0.0210067280568 -1.13319984078 --0.0210071562323 -1.15045639872 --0.0210076451767 -1.16771355271 --0.0210082102567 -1.18497094512 --0.0210088517051 -1.20222899318 --0.0210092030466 -1.22145363689 --0.0210088826716 -1.24067661166 --0.0210082412232 -1.2579344809 --0.0210076605435 -1.27519205212 --0.0210071715992 -1.2924489975 --0.0210067585576 -1.30970576405 --0.0210063916165 -1.32696202397 --0.021006132476 -1.34421822429 --0.0210059490055 -1.36147406698 --0.0210058114026 -1.37872996926 --0.0210057813675 -1.39598563314 --0.021005827235 -1.41324147582 --0.0210059338715 -1.43049719929 --0.0210061320104 -1.4477532506 --0.0210063916165 -1.4650092721 --0.0210067280568 -1.48226571083 --0.0210071562323 -1.49952229857 --0.0210076451767 -1.51677945256 --0.0210082102567 -1.53403684497 --0.0210088517051 -1.55129489303 --0.0210092030466 -1.57051947713 --0.0210088826716 -1.5897424221 --0.0210082412232 -1.60700032115 --0.0210076605435 -1.62425789237 --0.0210071715992 -1.64151483774 --0.0210067585576 -1.6587716341 --0.0210063916165 -1.67602792382 --0.021006132476 -1.69328412414 --0.0210059490055 -1.71053996682 --0.0210058114026 -1.72779586911 --0.0210057813675 -1.74505153298 --0.021005827235 -1.76230734587 --0.0210059338715 -1.77956303954 --0.0210061320104 -1.79681906104 --0.0210063916165 -1.81407508254 --0.0210067280568 -1.83133155107 --0.0210071562323 -1.84858813882 --0.0210076451767 -1.865845263 --0.0210082102567 -1.88310265541 --0.0210088517051 -1.90036073327 --0.0210092030466 -1.91958534717 --0.0210088826716 -1.93880829215 --0.0210082412232 -1.95606616139 --0.0210076605435 -1.97332373261 --0.0210071562324 -1.99058070779 --0.0210067431908 -2.00783747435 --0.0210063916165 -2.02509373426 --0.021006132476 -2.04234999418 --0.0210059490055 -2.05960583687 --0.0210058114026 -2.07686173916 --0.0210057813675 -2.09411740303 --0.021005827235 -2.11137324572 --0.0210059338715 -2.12862890959 --0.0210061320104 -2.14588487148 --0.0210063916165 -2.16314089298 --0.0210067280568 -2.18039739132 --0.0210071562323 -2.19765400886 --0.0210076451767 -2.21491110325 --0.0210082102567 -2.23216849566 --0.0210088517051 -2.24942660332 --0.0210092030466 -2.26865118742 --0.0210088826716 -2.28787410259 --0.0210082412232 -2.30513197184 --0.0210076605435 -2.32238954306 --0.0210071562324 -2.33964651823 --0.0210067431908 -2.3569033742 --0.0210063916165 -2.37415963411 --0.021006132476 -2.39141577482 --0.0210059490055 -2.40867167711 --0.0210058114026 -2.4259275794 --0.0210057813675 -2.44318318367 --0.021005827235 -2.46043902636 --0.0210059338715 -2.47769474983 --0.0210061320104 -2.49495077133 --0.0210063916165 -2.51220685244 --0.0210067280568 -2.52946329117 --0.0210071562323 -2.5467197895 --0.0210076451767 -2.56397694349 --0.0210082102567 -2.5812343955 --0.0210088517051 -2.59849244356 --0.0210092030466 -2.61771702766 --0.0210088826716 -2.63694000244 --0.0210082412232 -2.65419787169 --0.0210076605435 -2.67145544291 --0.0210071562324 -2.68871241808 --0.0210067431908 -2.70596921444 --0.0210063916165 -2.72322547436 --0.021006132476 -2.74048161507 --0.0210059490055 -2.75773745775 --0.0210058114026 -2.77499336004 --0.0210057813675 -2.79224902392 --0.021005827235 -2.80950492621 --0.0210059338715 -2.82676064968 --0.0210061320104 -2.84401667118 --0.0210063916165 -2.86127269268 --0.0210067280568 -2.87852913141 --0.0210071562323 -2.89578574896 --0.0210076451767 -2.91304284334 --0.0210082102567 -2.93030017614 --0.0210088517051 -2.9475582242 --0.0210092030466 -2.96678280831 --0.0210088826716 -2.98600578308 --0.0210082412232 -3.00326371193 --0.0210076605435 -3.02052134276 --0.0210071562324 -3.03777831793 --0.0210067431908 -3.05503505468 --0.0210063916165 -3.0722913146 --0.021006132476 -3.08954757452 --0.0210059490055 -3.10680341721 --0.0210058114026 -3.1240593195 --0.0210057813675 -3.14131495555 --0.021005827235 --3.12461453676 --0.0210059338715 --3.10735881329 --0.0210061320104 --3.09010279179 --0.0210063916165 --3.07284677029 --0.0210067280568 --3.05559033155 --0.0210071562323 --3.03833371401 --0.0210076451767 --3.02107661963 --0.0210082102567 --3.00381928682 --0.0210088517051 --2.98656123876 --0.0210092030466 --2.96733665466 --0.0210088826716 --2.94811367989 --0.0210082412232 --2.93085575104 --0.0210076605435 --2.91359812021 --0.0210071562324 --2.89634114504 --0.0210067431908 --2.87908440828 --0.0210063916165 --2.86182814837 --0.021006132476 --2.84457188845 --0.0210059490055 --2.82731604576 --0.0210058114026 --2.81006020307 --0.0210057813675 --2.79280459881 --0.021005827235 --2.77554875612 --0.0210059338715 --2.75829303265 --0.0210061320104 --2.74103701115 --0.0210063916165 --2.72378098965 --0.0210067280568 --2.70652455091 --0.0210071562323 --2.68926793337 --0.0210076451767 --2.67201077938 --0.0210082102567 --2.65475344658 --0.0210088517051 --2.63749533891 --0.0210092030466 --2.61827069521 --0.0210088826716 --2.59904778004 --0.0210082412232 --2.58178991079 --0.0210076605435 --2.56453233957 --0.0210071715992 --2.5472753644 --0.0210067585576 --2.53001862764 --0.0210063916165 --2.51276236773 --0.021006132476 --2.49550610781 --0.0210059490055 --2.47825026512 --0.0210058114026 --2.46099436283 --0.0210057813675 --2.44373869896 --0.021005827235 --2.42648285627 --0.0210059338715 --2.4092271328 --0.0210061320104 --2.3919711113 --0.0210063916165 --2.3747151494 --0.0210067280568 --2.35745871067 --0.0210071562323 --2.34020209312 --0.0210076451767 --2.32294493914 --0.0210082102567 --2.30568748712 --0.0210088517051 --2.28842943907 --0.0210092030466 --2.26920485497 --0.0210088826716 --2.24998193979 --0.0210082412232 --2.23272407055 --0.0210076605435 --2.21546649933 --0.0210071715992 --2.19820958376 --0.0210067585576 --2.18095272779 --0.0210063916165 --2.16369640827 --0.021006132476 --2.14644026756 --0.0210059490055 --2.12918442488 --0.0210058114026 --2.11192852259 --0.0210057813675 --2.09467285871 --0.021005827235 --2.07741695642 --0.0210059338715 --2.06016123295 --0.0210061320104 --2.04290527105 --0.0210063916165 --2.02564924955 --0.0210067280568 --2.00839278102 --0.0210071562323 --1.99113622308 --0.0210076451767 --1.97387906909 --0.0210082102567 --1.95662167668 --0.0210088517051 --1.93936362863 --0.0210092030466 --1.92013904452 --0.0210088826716 --1.90091606975 --0.0210082412232 --1.8836581707 --0.0210076605435 --1.86640062928 --0.0210071715992 --1.84914365411 --0.0210067585576 --1.83188685775 --0.0210063916165 --1.81463059783 --0.021006132476 --1.79737439752 --0.0210059490055 --1.78011855483 --0.0210058114026 --1.76286265254 --0.0210057813675 --1.74560698867 --0.021005827235 --1.72835114598 --0.0210059338715 --1.71109545231 --0.0210061320104 --1.69383943081 --0.0210063916165 --1.67658340931 --0.0210067280568 --1.65932694077 --0.0210071562323 --1.64207032323 --0.0210076451767 --1.62481319904 --0.0210082102567 --1.60755583644 --0.0210088517051 --1.59029778838 --0.0210092030466 --1.57107317447 --0.0210088826716 --1.5518502295 --0.0210082412232 --1.53459236026 --0.0210076605435 --1.51733475923 --0.0210071715992 --1.50007778406 --0.0210067585576 --1.48282101751 --0.0210063916165 --1.46556475759 --0.021006132476 --1.44830852747 --0.0210059490055 --1.43105265498 --0.0210058114026 --1.41379678249 --0.0210057813675 --1.39654117822 --0.021005827235 --1.37928533554 --0.0210059338715 --1.36202961206 --0.0210061320104 --1.34477359056 --0.0210063916165 --1.32751753926 --0.0210067280568 --1.31026110053 --0.0210071562323 --1.29300454259 --0.0210076451767 --1.2757473886 --0.0210082102567 --1.2584899962 --0.0210088517051 --1.24123194814 --0.0210092030466 --1.22200730443 --0.0210088826716 --1.20278432965 --0.0210082412232 --1.18552646041 --0.0210076605435 --1.16826888919 --0.0210071562324 --1.15101194382 --0.0210067431908 --1.13375517726 --0.0210063916165 --1.11649891734 --0.021006132476 --1.09924271703 --0.0210059490055 --1.08198687434 --0.0210058114026 --1.06473097205 --0.0210057813675 --1.04747530818 --0.021005827235 --1.03021943569 --0.0210059338715 --1.01296374201 --0.0210061320104 --0.995707750319 --0.0210063916165 --0.978451699018 --0.0210067280568 --0.961195230484 --0.0210071562323 --0.943938672543 --0.0210076451767 --0.926681548357 --0.0210082102567 --0.90942414105 --0.0210088517051 --0.892166078091 --0.0210092030466 --0.872941493988 --0.0210088826716 --0.853718534112 --0.0210082412232 --0.836460620165 --0.0210076605435 --0.819203063846 --0.0210071562324 --0.801946118474 --0.0210067431908 --0.784689307213 --0.0210063916165 --0.767433032394 --0.021006132476 --0.75017683208 --0.0210059490055 --0.732920974493 --0.0210058114026 --0.715665087104 --0.0210057813675 --0.698409438133 --0.021005827235 --0.681153595447 --0.0210059338715 --0.663897901773 --0.0210061320104 --0.646641895175 --0.0210063916165 --0.629385858774 --0.0210067280568 --0.612129405141 --0.0210071562323 --0.594872817397 --0.0210076451767 --0.577615663409 --0.0210082102567 --0.560358285904 --0.0210088517051 --0.543100237846 --0.0210092030466 --0.52387560904 --0.0210088826716 --0.504652649164 --0.0210082412232 --0.487394787371 --0.0210076605435 --0.470137216151 --0.0210071562324 --0.452880255878 --0.0210067431908 --0.43562348932 --0.0210063916165 --0.418367221952 --0.021006132476 --0.401110991835 --0.0210059490055 --0.383855141699 --0.0210058114026 --0.366599246859 --0.0210057813675 --0.349343597889 --0.021005827235 --0.332087762654 --0.0210059338715 --0.314832046628 --0.0210061320104 --0.297576017677 --0.0210063916165 --0.280320003628 --0.0210067280568 --0.263063542545 --0.0210071562323 --0.245806947351 --0.0210076451767 --0.228549823165 --0.0210082102567 --0.211292441934 --0.0210088517051 --0.194034386426 --0.0210092030466 --0.174809776247 --2.16532499999e-08 --0.155419073999 --1.74623000001e-08 --0.138161104172 -1.16414999992e-09 --0.12090362981 -1.88592750002e-08 --0.103646596894 -6.75207500024e-09 --0.0863899346441 --5.35509999972e-09 --0.069133576937 --1.862645e-08 --0.0518774632364 --2.79400000011e-09 --0.0346215399913 -1.32713250003e-08 --0.0173657382838 --1.16414999992e-09 --0.000110000139105 --1.62981250002e-08 -0.0171457391698 --1.69966250002e-08 -0.0344015406445 --1.83936250003e-08 -0.0516574624926 --5.35510000016e-09 -0.0689135706052 -2.18860749996e-08 -0.086169930175 -1.88592749997e-08 -0.103426605463 -1.16415000036e-09 -0.120683643967 --2.09550000008e-09 -0.137941110879 --6.28642500035e-09 -0.155199073255 --2.35158749999e-08 -0.174422927201 --2.16532499999e-08 -0.193646781146 --1.74623000001e-08 -0.210904743522 -1.16414999992e-09 -0.228162210435 -1.88592750002e-08 -0.245419248938 -6.75207500024e-09 -0.262675926089 --5.35509999972e-09 -0.279932282865 --1.862645e-08 -0.297188386321 --2.79400000011e-09 -0.314444310963 -1.32713250003e-08 -0.331700101495 --1.16414999992e-09 -0.348955839872 --1.62981250002e-08 -0.366211593151 --1.69966250002e-08 -0.383467391133 --1.83936250003e-08 -0.400723308325 --5.35510000016e-09 -0.417979419232 -2.18860749996e-08 -0.435235776007 -1.88592749997e-08 -0.452492453158 -1.16415000036e-09 -0.469749495387 --2.09550000008e-09 -0.487006954849 --6.28642500035e-09 -0.504264928401 --2.35158749999e-08 -0.523488774895 --2.16532499999e-08 -0.54271261394 --1.74623000001e-08 -0.559970587492 -1.16414999992e-09 -0.577228054404 -1.88592750002e-08 -0.594485104084 -6.75207500024e-09 -0.611741781235 --5.35509999972e-09 -0.62899813056 --1.862645e-08 -0.646254241467 --2.79400000011e-09 -0.663510143757 -1.32713250003e-08 -0.68076595664 --1.16414999992e-09 -0.698021709919 --1.62981250002e-08 -0.715277418494 --1.69966250002e-08 -0.732533216476 --1.83936250003e-08 -0.749789148569 --5.35510000016e-09 -0.767045259475 -2.18860749996e-08 -0.784301608801 -1.88592749997e-08 -0.801558285952 -1.16415000036e-09 -0.818815335631 --2.09550000008e-09 -0.836072802544 --6.28642500035e-09 -0.853330776096 --2.35158749999e-08 -0.872554630041 --2.16532499999e-08 -0.891778469086 --1.74623000001e-08 -0.909036427737 -1.16414999992e-09 -0.926293894649 -1.88592750002e-08 -0.943550929427 -6.75207500024e-09 -0.960807621479 --5.35509999972e-09 -0.978064000607 --1.862645e-08 -0.995320111512 --2.79400000011e-09 -1.0125760138 -1.32713250003e-08 -1.02983179689 --1.16414999992e-09 -1.04708752036 --1.62981250002e-08 -1.06434324384 --1.69966250002e-08 -1.08159905672 --1.83936250003e-08 -1.09885498881 --5.35510000016e-09 -1.11611112952 -2.18860749996e-08 -1.13336747885 -1.88592749997e-08 -1.1506241262 -1.16415000036e-09 -1.16788119078 --2.09550000008e-09 -1.18513867259 --6.28642500035e-09 -1.20239663124 --2.35158749999e-08 -1.22162050009 --2.16532499999e-08 -1.24084436893 --1.74623000001e-08 -1.25810232759 -1.16414999992e-09 -1.2753597796 -1.88592750002e-08 -1.29261678457 -6.75207500024e-09 -1.30987346172 --5.35509999972e-09 -1.32712981104 --1.862645e-08 -1.34438592195 --2.79400000011e-09 -1.36164185405 -1.32713250003e-08 -1.37889763713 --1.16414999992e-09 -1.39615339041 --1.62981250002e-08 -1.41340914369 --1.69966250002e-08 -1.43066495657 --1.83936250003e-08 -1.44792088866 --5.35510000016e-09 -1.46517699957 -2.18860749996e-08 -1.48243334889 -1.88592749997e-08 -1.49968999624 -1.16415000036e-09 -1.51694703102 --2.09550000008e-09 -1.53420451284 --6.28642500035e-09 -1.55146250129 --2.35158749999e-08 -1.57068634033 --2.16532499999e-08 -1.58991014958 --1.74623000001e-08 -1.60716810823 -1.16414999992e-09 -1.62442559004 -1.88592750002e-08 -1.64168265462 -6.75207500024e-09 -1.65893933177 --5.35509999972e-09 -1.67619568109 --1.862645e-08 -1.693451792 --2.79400000011e-09 -1.71070772409 -1.32713250003e-08 -1.72796353697 --1.16414999992e-09 -1.74521929026 --1.62981250002e-08 -1.76247498393 --1.69966250002e-08 -1.77973073721 --1.83936250003e-08 -1.7969866693 --5.35510000016e-09 -1.81424278021 -2.18860749996e-08 -1.83149912954 -1.88592749997e-08 -1.84875583649 -1.16415000036e-09 -1.86601290106 --2.09550000008e-09 -1.88327035308 --6.28642500035e-09 -1.90052831173 --2.35158749999e-08 -1.91975218058 --2.16532499999e-08 -1.93897604942 --1.74623000001e-08 -1.95623400808 -1.16414999992e-09 -1.97349148989 -1.88592750002e-08 -1.99074852467 -6.75207500024e-09 -2.00800514221 --5.35509999972e-09 -2.02526152134 --1.862645e-08 -2.04251766205 --2.79400000011e-09 -2.05977356434 -1.32713250003e-08 -2.07702940702 --1.16414999992e-09 -2.0942851305 --1.62981250002e-08 -2.11154085398 --1.69966250002e-08 -2.12879663706 --1.83936250003e-08 -2.14605253935 --5.35510000016e-09 -2.16330868006 -2.18860749996e-08 -2.18056505918 -1.88592749997e-08 -2.19782173634 -1.16415000036e-09 -2.21507877111 --2.09550000008e-09 -2.23233622312 --6.28642500035e-09 -2.24959415197 --2.35158749999e-08 -2.26881802082 --2.16532499999e-08 -2.28804188967 --1.74623000001e-08 -2.30529981851 -1.16414999992e-09 -2.32255727053 -1.88592750002e-08 -2.33981430531 -6.75207500024e-09 -2.35707104206 --5.35509999972e-09 -2.37432742119 --1.862645e-08 -2.39158350229 --2.79400000011e-09 -2.40883946419 -1.32713250003e-08 -2.42609524727 --1.16414999992e-09 -2.44335091114 --1.62981250002e-08 -2.46060663462 --1.69966250002e-08 -2.4778624773 --1.83936250003e-08 -2.49511837959 --5.35510000016e-09 -2.5123745203 -2.18860749996e-08 -2.52963089943 -1.88592749997e-08 -2.54688751698 -1.16415000036e-09 -2.56414455175 --2.09550000008e-09 -2.58140206337 --6.28642500035e-09 -2.59866005182 --2.35158749999e-08 -2.61788386107 --2.16532499999e-08 -2.63710772991 --1.74623000001e-08 -2.65436565876 -1.16414999992e-09 -2.67162311077 -1.88592750002e-08 -2.68888020515 -6.75207500024e-09 -2.70613688231 --5.35509999972e-09 -2.72339320183 --1.862645e-08 -2.74064928293 --2.79400000011e-09 -2.75790524483 -1.32713250003e-08 -2.77516102791 --1.16414999992e-09 -2.79241681099 --1.62981250002e-08 -2.80967259407 --1.69966250002e-08 -2.82692837715 --1.83936250003e-08 -2.84418433905 --5.35510000016e-09 -2.86144042015 -2.18860749996e-08 -2.87869673967 -1.88592749997e-08 -2.89595341682 -1.16415000036e-09 -2.913210392 --2.09550000008e-09 -2.93046784401 --6.28642500035e-09 -2.94772583246 --2.35158749999e-08 -2.96694970131 --2.16532499999e-08 -2.98617357016 --1.74623000001e-08 -3.00343155861 -1.16414999992e-09 -3.02068907023 -1.88592750002e-08 -3.037946105 -6.75207500024e-09 -3.05520272255 --5.35509999972e-09 -3.07245910168 --1.862645e-08 -3.08971524239 --2.79400000011e-09 -3.10697114468 -1.32713250003e-08 -3.12422698736 --1.16414999992e-09 -3.14148274262 --1.62981250002e-08 --3.1244468689 --1.69966250002e-08 --3.10719108582 --1.83936250003e-08 --3.08993512392 --5.35510000016e-09 --3.07267904282 -2.18860749996e-08 --3.05542272329 -1.88592749997e-08 --3.03816604614 -1.16415000036e-09 --3.02090907097 --2.09550000008e-09 --3.00365161896 --6.28642500035e-09 --2.9863936305 --2.35158749999e-08 --2.96716976166 --2.16532499999e-08 --2.94794589281 --1.74623000001e-08 --2.93068790436 -1.16414999992e-09 --2.91343039274 -1.88592750002e-08 --2.89617335796 -6.75207500024e-09 --2.87891674042 --5.35509999972e-09 --2.86166036129 --1.862645e-08 --2.84440422058 --2.79400000011e-09 --2.82714831829 -1.32713250003e-08 --2.80989253521 --1.16414999992e-09 --2.79263681174 --1.62981250002e-08 --2.77538108826 --1.69966250002e-08 --2.75812530518 --1.83936250003e-08 --2.74086934328 --5.35510000016e-09 --2.72361326218 -2.18860749996e-08 --2.70635694265 -1.88592749997e-08 --2.6891002059 -1.16415000036e-09 --2.67184311152 --2.09550000008e-09 --2.6545856595 --6.28642500035e-09 --2.63732773066 --2.35158749999e-08 --2.61810392141 --2.16532499999e-08 --2.59888011217 --1.74623000001e-08 --2.58162212372 -1.16414999992e-09 --2.5643646121 -1.88592750002e-08 --2.54710757732 -6.75207500024e-09 --2.52985090017 --5.35509999972e-09 --2.51259452105 --1.862645e-08 --2.49533838034 --2.79400000011e-09 --2.47808247805 -1.32713250003e-08 --2.46082669497 --1.16414999992e-09 --2.44357097149 --1.62981250002e-08 --2.42631524801 --1.69966250002e-08 --2.40905940533 --1.83936250003e-08 --2.39180350304 --5.35510000016e-09 --2.37454742193 -2.18860749996e-08 --2.3572910428 -1.88592749997e-08 --2.34003436565 -1.16415000036e-09 --2.32277733088 --2.09550000008e-09 --2.30551981926 --6.28642500035e-09 --2.28826183081 --2.35158749999e-08 --2.26903802156 --2.16532499999e-08 --2.24981421232 --1.74623000001e-08 --2.23255628348 -1.16414999992e-09 --2.21529883146 -1.88592750002e-08 --2.19804173708 -6.75207500024e-09 --2.18078500032 --5.35509999972e-09 --2.1635286808 --1.862645e-08 --2.1462725997 --2.79400000011e-09 --2.1290166378 -1.32713250003e-08 --2.11176085472 --1.16414999992e-09 --2.09450507164 --1.62981250002e-08 --2.07724928856 --1.69966250002e-08 --2.05999350548 --1.83936250003e-08 --2.04273766279 --5.35510000016e-09 --2.02548158169 -2.18860749996e-08 --2.00822517276 -1.88592749997e-08 --1.99096849561 -1.16415000036e-09 --1.97371146083 --2.09550000008e-09 --1.95645397901 --6.28642500035e-09 --1.93919599056 --2.35158749999e-08 --1.91997218132 --2.16532499999e-08 --1.90074834228 --1.74623000001e-08 --1.88349038362 -1.16414999992e-09 --1.86623293161 -1.88592750002e-08 --1.84897586703 -6.75207500024e-09 --1.83171918988 --5.35509999972e-09 --1.81446284056 --1.862645e-08 --1.79720672965 --2.79400000011e-09 --1.77995079756 -1.32713250003e-08 --1.76269498467 --1.16414999992e-09 --1.74543923139 --1.62981250002e-08 --1.72818347811 --1.69966250002e-08 --1.71092769503 --1.83936250003e-08 --1.69367176294 --5.35510000016e-09 --1.67641565204 -2.18860749996e-08 --1.65915930271 -1.88592749997e-08 --1.64190262556 -1.16415000036e-09 --1.62464562058 --2.09550000008e-09 --1.60738816857 --6.28642500035e-09 --1.59013020992 --2.35158749999e-08 --1.57090634107 --2.16532499999e-08 --1.55168247223 --1.74623000001e-08 --1.53442451358 -1.16414999992e-09 --1.51716703176 -1.88592750002e-08 --1.49990996719 -6.75207500024e-09 --1.48265329004 --5.35509999972e-09 --1.46539694071 --1.862645e-08 --1.4481408298 --2.79400000011e-09 --1.43088489771 -1.32713250003e-08 --1.41362911463 --1.16414999992e-09 --1.39637342095 --1.62981250002e-08 --1.37911769747 --1.69966250002e-08 --1.36186188459 --1.83936250003e-08 --1.3446059525 --5.35510000016e-09 --1.32734984159 -2.18860749996e-08 --1.31009349227 -1.88592749997e-08 --1.29283681512 -1.16415000036e-09 --1.27557975054 --2.09550000008e-09 --1.25832226873 --6.28642500035e-09 --1.24106431008 --2.35158749999e-08 --1.22184047103 --2.16532499999e-08 --1.20261663199 --1.74623000001e-08 --1.18535864353 -1.16414999992e-09 --1.16810116172 -1.88592750002e-08 --1.15084415674 -6.75207500024e-09 --1.13358747959 --5.35509999972e-09 --1.11633113026 --1.862645e-08 --1.09907504916 --2.79400000011e-09 --1.08181911707 -1.32713250003e-08 --1.06456330419 --1.16414999992e-09 --1.04730755091 --1.62981250002e-08 --1.03005179763 --1.69966250002e-08 --1.01279601455 --1.83936250003e-08 --0.995540112256 --5.35510000016e-09 --0.978283986449 -2.18860749996e-08 --0.961027622223 -1.88592749997e-08 --0.943770959973 -1.16415000036e-09 --0.926513910294 --2.09550000008e-09 --0.909256443382 --6.28642500035e-09 --0.891998484731 --2.35158749999e-08 --0.872774630785 --2.16532499999e-08 --0.853550761938 --1.74623000001e-08 --0.836292788386 -1.16414999992e-09 --0.819035336375 -1.88592750002e-08 --0.801778301597 -6.75207500024e-09 --0.784521624446 --5.35509999972e-09 --0.767265275121 --1.862645e-08 --0.750009164214 --2.79400000011e-09 --0.732753232122 -1.32713250003e-08 --0.715497434139 --1.16414999992e-09 --0.698241695762 --1.62981250002e-08 --0.680985957384 --1.69966250002e-08 --0.663730159402 --1.83936250003e-08 --0.646474257112 --5.35510000016e-09 --0.629218146205 -2.18860749996e-08 --0.611961767077 -1.88592749997e-08 --0.594705089927 -1.16415000036e-09 --0.577448055148 --2.09550000008e-09 --0.560190603137 --6.28642500035e-09 --0.542932644487 --2.35158749999e-08 --0.52370877564 --2.16532499999e-08 --0.504484906793 --1.74623000001e-08 --0.487226948142 -1.16414999992e-09 --0.469969496131 -1.88592750002e-08 --0.452712461352 -6.75207500024e-09 --0.435455784202 --5.35509999972e-09 --0.418199427426 --1.862645e-08 --0.400943316519 --2.79400000011e-09 --0.383687384426 -1.32713250003e-08 --0.366431586444 --1.16414999992e-09 --0.349175848067 --1.62981250002e-08 --0.33192010969 --1.69966250002e-08 --0.314664319158 --1.83936250003e-08 --0.297408387065 --5.35510000016e-09 --0.280152276158 -2.18860749996e-08 --0.262895919382 -1.88592749997e-08 --0.245639242232 -1.16415000036e-09 --0.228382207454 --2.09550000008e-09 --0.211124733091 --6.28642500035e-09 --0.19386677444 --2.35158749999e-08 --0.174642927945 -0.0210088647436 --0.155251465738 -0.0210081967525 --0.137993406504 -0.0210076449439 --0.120736021548 -0.0210071802139 --0.103478889912 -0.021006744355 --0.0862223114819 -0.021006395109 --0.0689658559859 -0.0210061334073 --0.0517098326236 -0.02100595925 --0.0344538092613 -0.0210058428347 --0.0171980927698 -0.0210057843942 -5.77452592525e-05 -0.0210058137309 -0.0173133988865 -0.021005930379 -0.0345693011768 -0.0210061047692 -0.0518251415342 -0.021006395109 -0.0690813558176 -0.021006773226 -0.086337627843 -0.0210071802139 -0.103594401851 -0.0210076449439 -0.120851365849 -0.0210081969853 -0.138108938932 -0.0210088649765 -0.155366819352 -0.021009213524 -0.174589771778 -0.0210088647436 -0.193814389408 -0.0210081967525 -0.211072444916 -0.0210076449439 -0.228329818696 -0.0210071802139 -0.245586961508 -0.021006744355 -0.262843556702 -0.021006395109 -0.280100002885 -0.0210061334073 -0.297356024385 -0.02100595925 -0.314612053335 -0.0210058428347 -0.331867754459 -0.0210057843942 -0.349123589694 -0.0210058137309 -0.366379246116 -0.021005930379 -0.383635148406 -0.0210061047692 -0.400890991092 -0.021006395109 -0.418147206307 -0.021006773226 -0.435403481126 -0.0210071802139 -0.452660255134 -0.0210076449439 -0.469917215407 -0.0210081969853 -0.487174786628 -0.0210088649765 -0.504432678223 -0.021009213524 -0.523655638099 -0.0210088647436 -0.542880237102 -0.0210081967525 -0.56013828516 -0.0210076449439 -0.577395677566 -0.0210071802139 -0.594652816653 -0.021006744355 -0.611909389496 -0.021006395109 -0.629165843129 -0.0210061334073 -0.646421864629 -0.02100595925 -0.663677856326 -0.0210058428347 -0.680933594704 -0.0210057843942 -0.698189467192 -0.0210058137309 -0.71544508636 -0.021005930379 -0.73270097375 -0.0210061047692 -0.749956816435 -0.021006395109 -0.767213031649 -0.021006773226 -0.784469306469 -0.0210071802139 -0.801726102829 -0.0210076449439 -0.818983078003 -0.0210081969853 -0.836240634322 -0.0210088649765 -0.853498518467 -0.021009213524 -0.872721478343 -0.0210088647436 -0.891946092248 -0.0210081967525 -0.909204140306 -0.0210076449439 -0.926461517811 -0.0210071802139 -0.943718656898 -0.021006744355 -0.96097522974 -0.021006395109 -0.978231698275 -0.0210061334073 -0.995487749575 -0.02100595925 -1.01274374127 -0.0210058428347 -1.02999943495 -0.0210057843942 -1.04725527763 -0.0210058137309 -1.0645109117 -0.021005930379 -1.08176681399 -0.0210061047692 -1.09902265668 -0.021006395109 -1.1162789166 -0.021006773226 -1.13353520632 -0.0210071802139 -1.15079194307 -0.0210076449439 -1.16804891825 -0.0210081969853 -1.18530651927 -0.0210088649765 -1.20256438851 -0.021009213524 -1.22178733349 -0.0210088647436 -1.24101194739 -0.0210081967525 -1.25826999545 -0.0210076449439 -1.27552735805 -0.0210071802139 -1.29278448224 -0.021006744355 -1.31004109979 -0.021006395109 -1.32729756832 -0.0210061334073 -1.34455358982 -0.02100595925 -1.36180961132 -0.0210058428347 -1.379065305 -0.0210057843942 -1.39632114768 -0.0210058137309 -1.41357681155 -0.021005930379 -1.43083271384 -0.0210061047692 -1.44808855653 -0.021006395109 -1.46534475684 -0.021006773226 -1.48260101676 -0.0210071802139 -1.49985778332 -0.0210076449439 -1.51711472869 -0.0210081969853 -1.53437229991 -0.0210088649765 -1.55163022876 -0.021009213524 -1.57085320354 -0.0210088647436 -1.59007778764 -0.0210081967525 -1.6073358357 -0.0210076449439 -1.6245932281 -0.0210071802139 -1.64185038209 -0.021006744355 -1.65910694003 -0.021006395109 -1.67636337876 -0.0210061334073 -1.69361943007 -0.02100595925 -1.71087545156 -0.0210058428347 -1.72813117504 -0.0210057843942 -1.74538701773 -0.0210058137309 -1.76264262199 -0.021005930379 -1.77989849448 -0.0210061047692 -1.79715436697 -0.021006395109 -1.81441059708 -0.021006773226 -1.83166685701 -0.0210071802139 -1.84892362356 -0.0210076449439 -1.86618059873 -0.0210081969853 -1.88343819976 -0.0210088649765 -1.900696069 -0.021009213524 -1.91991901398 -0.0210088647436 -1.93914362789 -0.0210081967525 -1.95640167594 -0.0210076449439 -1.97365909815 -0.0210071802139 -1.99091622234 -0.021006744355 -2.00817272067 -0.021006395109 -2.0254291892 -0.0210061334073 -2.04268527031 -0.02100595925 -2.05994129181 -0.0210058428347 -2.07719701528 -0.0210057843942 -2.09445285797 -0.0210058137309 -2.11170852184 -0.021005930379 -2.12896442413 -0.0210061047692 -2.14622026682 -0.021006395109 -2.16347652674 -0.021006773226 -2.18073278666 -0.0210071802139 -2.19798952341 -0.0210076449439 -2.21524649858 -0.0210081969853 -2.2325040698 -0.0210088649765 -2.24976187944 -0.021009213524 -2.26898479462 -0.0210088647436 -2.28820949793 -0.0210081967525 -2.30546760559 -0.0210076449439 -2.32272493839 -0.0210071802139 -2.33998203278 -0.021006744355 -2.35723865032 -0.021006395109 -2.37449514866 -0.0210061334073 -2.39175117016 -0.02100595925 -2.40900719166 -0.0210058428347 -2.42626285553 -0.0210057843942 -2.44351863861 -0.0210058137309 -2.46077430248 -0.021005930379 -2.47803020478 -0.0210061047692 -2.49528604746 -0.021006395109 -2.51254230738 -0.021006773226 -2.5297985673 -0.0210071802139 -2.54705530405 -0.0210076449439 -2.56431227922 -0.0210081969853 -2.58156991005 -0.0210088649765 -2.5988278389 -0.021009213524 -2.61805075407 -0.0210088647436 -2.63727533817 -0.0210081967525 -2.65453338623 -0.0210076449439 -2.67179071903 -0.0210071802139 -2.68904787302 -0.021006744355 -2.70630449056 -0.021006395109 -2.7235609293 -0.0210061334073 -2.7408169508 -0.02100595925 -2.7580729723 -0.0210058428347 -2.77532869577 -0.0210057843942 -2.79258459806 -0.0210058137309 -2.80984026194 -0.021005930379 -2.82709616423 -0.0210061047692 -2.84435200691 -0.021006395109 -2.86160814762 -0.021006773226 -2.87886440754 -0.0210071802139 -2.8961212039 -0.0210076449439 -2.91337811947 -0.0210081969853 -2.93063569069 -0.0210088649765 -2.94789361954 -0.021009213524 -2.96711659431 -0.0210088647436 -2.98634117842 -0.0210081967525 -3.00359922647 -0.0210076449439 -3.02085667849 -0.0210071802139 -3.03811383248 -0.021006744355 -3.05537033081 -0.021006395109 -3.07262676954 -0.0210061334073 -3.08988279104 -0.02100595925 -3.10713881254 -0.0210058428347 -3.12439459562 -0.0210057843942 --3.14153483708 -0.0210058137309 --3.12427920103 -0.021005930379 --3.10702329874 -0.0210061047692 --3.08976745606 -0.021006395109 --3.07251131535 -0.021006773226 --3.05525505543 -0.0210071802139 --3.03799825907 -0.0210076449439 --3.0207413435 -0.0210081969853 --3.00348377228 -0.0210088649765 --2.98622584343 -0.021009213524 --2.96700286865 -0.0210088647436 --2.94777828455 -0.0210081967525 --2.93052023649 -0.0210076449439 --2.91326278448 -0.0210071802139 --2.89600563049 -0.021006744355 --2.87874913216 -0.021006395109 --2.86149269343 -0.0210061334073 --2.84423661232 -0.02100595925 --2.82698059082 -0.0210058428347 --2.80972486734 -0.0210057843942 --2.79246902466 -0.0210058137309 --2.77521342039 -0.021005930379 --2.7579575181 -0.0210061047692 --2.74070167541 -0.021006395109 --2.7234454751 -0.021006773226 --2.70618915558 -0.0210071802139 --2.68893235922 -0.0210076449439 --2.67167538405 -0.0210081969853 --2.65441781283 -0.0210088649765 --2.63716000319 -0.021009213524 --2.61793708801 -0.0210088647436 --2.5987124443 -0.0210081967525 --2.58145439625 -0.0210076449439 --2.56419700384 -0.0210071802139 --2.54693984985 -0.021006744355 --2.52968323231 -0.021006395109 --2.51242673397 -0.0210061334073 --2.49517071247 -0.02100595925 --2.47791475058 -0.0210058428347 --2.46065908671 -0.0210057843942 --2.44340324402 -0.0210058137309 --2.42614758015 -0.021005930379 --2.40889167786 -0.0210061047692 --2.39163583517 -0.021006395109 --2.37437957525 -0.021006773226 --2.35712331533 -0.0210071802139 --2.33986657858 -0.0210076449439 --2.32260960341 -0.0210081969853 --2.30535203219 -0.0210088649765 --2.28809416294 -0.021009213524 --2.26887118816 -0.0210088647436 --2.24964654446 -0.0210081967525 --2.2323884964 -0.0210076449439 --2.2151311636 -0.0210071802139 --2.19787400961 -0.021006744355 --2.18061739206 -0.021006395109 --2.16336095333 -0.0210061334073 --2.14610493183 -0.02100595925 --2.12884891033 -0.0210058428347 --2.11159318686 -0.0210057843942 --2.09433734417 -0.0210058137309 --2.0770816803 -0.021005930379 --2.0598257184 -0.0210061047692 --2.04256993532 -0.021006395109 --2.02531379461 -0.021006773226 --2.00805750489 -0.0210071802139 --1.99080070853 -0.0210076449439 --1.97354376316 -0.0210081969853 --1.95628619194 -0.0210088649765 --1.93902826309 -0.021009213524 --1.91980531812 -0.0210088647436 --1.90058073402 -0.0210081967525 --1.88332268596 -0.0210076449439 --1.86606529355 -0.0210071802139 --1.84880813956 -0.021006744355 --1.83155155182 -0.021006395109 --1.81429511309 -0.0210061334073 --1.79703909159 -0.02100595925 --1.77978307009 -0.0210058428347 --1.76252734661 -0.0210057843942 --1.74527147412 -0.0210058137309 --1.72801581025 -0.021005930379 --1.71075990796 -0.0210061047692 --1.69350406527 -0.021006395109 --1.67624786496 -0.021006773226 --1.65899160504 -0.0210071802139 --1.64173483849 -0.0210076449439 --1.62447789311 -0.0210081969853 --1.60722032189 -0.0210088649765 --1.58996245265 -0.021009213524 --1.57073950767 -0.0210088647436 --1.55151486397 -0.0210081967525 --1.53425678611 -0.0210076449439 --1.5169993937 -0.0210071802139 --1.49974226952 -0.021006744355 --1.48248571157 -0.021006395109 --1.46522924304 -0.0210061334073 --1.44797322154 -0.02100595925 --1.43071720004 -0.0210058428347 --1.41346147657 -0.0210057843942 --1.39620566368 -0.0210058137309 --1.37895002961 -0.021005930379 --1.36169412732 -0.0210061047692 --1.34443828464 -0.021006395109 --1.32718205452 -0.021006773226 --1.3099257648 -0.0210071802139 --1.29266899824 -0.0210076449439 --1.27541205287 -0.0210081969853 --1.25815448165 -0.0210088649765 --1.2408965826 -0.021009213524 --1.22167363763 -0.0210088647436 --1.20244905353 -0.0210081967525 --1.18519097567 -0.0210076449439 --1.16793358326 -0.0210071802139 --1.15067645907 -0.021006744355 --1.13341984153 -0.021006395109 --1.1161634028 -0.0210061334073 --1.0989074111 -0.02100595925 --1.08165135979 -0.0210058428347 --1.06439563632 -0.0210057843942 --1.04713979363 -0.0210058137309 --1.02988412976 -0.021005930379 --1.01262822747 -0.0210061047692 --0.995372399688 -0.021006395109 --0.978116184473 -0.021006773226 --0.960859909653 -0.0210071802139 --0.943603143096 -0.0210076449439 --0.926346182823 -0.0210081969853 --0.909088641405 -0.0210088649765 --0.89183075726 -0.021009213524 --0.872607797384 -0.0210088647436 --0.853383168578 -0.0210081967525 --0.836125090718 -0.0210076449439 --0.818867728114 -0.0210071802139 --0.801610603929 -0.021006744355 --0.784354031086 -0.021006395109 --0.767097577453 -0.0210061334073 --0.749841541052 -0.02100595925 --0.732585519552 -0.0210058428347 --0.715329810977 -0.0210057843942 --0.69807395339 -0.0210058137309 --0.680818289518 -0.021005930379 --0.663562387228 -0.0210061047692 --0.646306559444 -0.021006395109 --0.62905035913 -0.021006773226 --0.611794069409 -0.0210071802139 --0.59453728795 -0.0210076449439 --0.577280342579 -0.0210081969853 --0.560022771358 -0.0210088649765 --0.542764872313 -0.021009213524 --0.523541912436 -0.0210088647436 --0.504317298531 -0.0210081967525 --0.487059243023 -0.0210076449439 --0.469801872968 -0.0210071802139 --0.452544748783 -0.021006744355 --0.43528816104 -0.021006395109 --0.418031699955 -0.0210061334073 --0.400775685907 -0.02100595925 --0.383519664407 -0.0210058428347 --0.36626394093 -0.0210057843942 --0.349008098245 -0.0210058137309 --0.331752449274 -0.021005930379 --0.314496554434 -0.0210061047692 --0.297240711749 -0.021006395109 --0.279984496534 -0.021006773226 --0.262728221714 -0.0210071802139 --0.245471443981 -0.0210076449439 --0.228214483708 -0.0210081969853 --0.210956908763 -0.0210088649765 --0.193699028343 -0.021009213524 --0.174476075918 -0.0395497037098 --0.155247755349 -0.0395484748297 --0.13798968494 -0.0395474173129 --0.120732286945 -0.0395465022884 --0.103475136683 -0.0395457018167 --0.086218541488 -0.0395450736396 --0.0689620720223 -0.0395445884205 --0.0517060337588 -0.0395442163572 --0.0344499950297 -0.0395439867861 --0.0171942634043 -0.0395439011045 -6.15911558275e-05 -0.0395439872518 -0.017317259917 -0.0395442158915 -0.034573177807 -0.0395445306786 -0.0518290335313 -0.0395450456999 -0.0690852627158 -0.039545731619 -0.0863415524363 -0.0395465032197 -0.103598339483 -0.0395474173129 -0.120855314657 -0.0395485027693 -0.138112906366 -0.0395497325808 -0.155370805412 -0.0395503616892 -0.174593616277 -0.0395497037098 -0.193818092346 -0.0395484748297 -0.211076166481 -0.0395474173129 -0.228333558887 -0.0395465022884 -0.2455907166 -0.0395457018167 -0.262847326696 -0.0395450736396 -0.28010379523 -0.0395445884205 -0.297359824181 -0.0395442163572 -0.314615860582 -0.0395439867861 -0.331871591508 -0.0395439011045 -0.349127449095 -0.0395439872518 -0.366383105516 -0.0395442158915 -0.383639022708 -0.0395445306786 -0.400894887745 -0.0395450456999 -0.41815111041 -0.039545731619 -0.435407407582 -0.0395465032197 -0.452664196491 -0.0395474173129 -0.469921164215 -0.0395485027693 -0.487178757787 -0.0395497325808 -0.504436664284 -0.0395503616892 -0.523659467697 -0.0395497037098 -0.542883947491 -0.0395484748297 -0.560142025351 -0.0395474173129 -0.577399417758 -0.0395465022884 -0.594656571746 -0.0395457018167 -0.611913159489 -0.0395450736396 -0.629169628024 -0.0395445884205 -0.646425649523 -0.0395442163572 -0.663681671023 -0.0395439867861 -0.680937424302 -0.0395439011045 -0.69819329679 -0.0395439872518 -0.715448960662 -0.0395442158915 -0.732704877853 -0.0395445306786 -0.749960720539 -0.0395450456999 -0.767216950655 -0.039545731619 -0.784473255277 -0.0395465032197 -0.801730036735 -0.0395474173129 -0.818986997008 -0.0395485027693 -0.83624458313 -0.0395497325808 -0.853502497077 -0.0395503616892 -0.872725322843 -0.0395497037098 -0.891949802637 -0.0395484748297 -0.909207865596 -0.0395474173129 -0.926465258002 -0.0395465022884 -0.94372241199 -0.0395457018167 -0.960978999734 -0.0395450736396 -0.97823548317 -0.0395445884205 -0.995491549373 -0.0395442163572 -1.01274758578 -0.0395439867861 -1.03000327945 -0.0395439011045 -1.04725912213 -0.0395439872518 -1.064514786 -0.0395442158915 -1.0817706883 -0.0395445306786 -1.09902656078 -0.0395450456999 -1.1162828207 -0.039545731619 -1.13353911042 -0.0395465032197 -1.15079587698 -0.0395474173129 -1.16805285216 -0.0395485027693 -1.18531045318 -0.0395497325808 -1.20256835222 -0.0395503616892 -1.22179117799 -0.0395497037098 -1.24101564288 -0.0395484748297 -1.25827369094 -0.0395474173129 -1.27553108334 -0.0395465022884 -1.29278823733 -0.0395457018167 -1.31004485488 -0.0395450736396 -1.32730135322 -0.0395445884205 -1.34455737472 -0.0395442163572 -1.36181339622 -0.0395439867861 -1.3790691495 -0.0395439011045 -1.39632502199 -0.0395439872518 -1.41358068585 -0.0395442158915 -1.43083658815 -0.0395445306786 -1.44809243083 -0.0395450456999 -1.46534863114 -0.039545731619 -1.48260492087 -0.0395465032197 -1.49986174703 -0.0395474173129 -1.5171187222 -0.0395485027693 -1.53437629342 -0.0395497325808 -1.55163422227 -0.0395503616892 -1.57085704803 -0.0395497037098 -1.59008151293 -0.0395484748297 -1.60733959079 -0.0395474173129 -1.6245969832 -0.0395465022884 -1.64185413718 -0.0395457018167 -1.65911072492 -0.0395450736396 -1.67636716366 -0.0395445884205 -1.69362321496 -0.0395442163572 -1.71087926626 -0.0395439867861 -1.72813498974 -0.0395439011045 -1.74539083243 -0.0395439872518 -1.7626464665 -0.0395442158915 -1.77990236878 -0.0395445306786 -1.79715827108 -0.0395450456999 -1.81441453099 -0.039545731619 -1.83167082071 -0.0395465032197 -1.84892758727 -0.0395474173129 -1.86618456244 -0.0395485027693 -1.88344219327 -0.0395497325808 -1.90070006251 -0.0395503616892 -1.91992285848 -0.0395497037098 -1.93914732337 -0.0395484748297 -1.95640537143 -0.0395474173129 -1.97366279363 -0.0395465022884 -1.99091994762 -0.0395457018167 -2.00817653537 -0.0395450736396 -2.0254330039 -0.0395445884205 -2.04268908501 -0.0395442163572 -2.05994510651 -0.0395439867861 -2.07720077038 -0.0395439011045 -2.09445667267 -0.0395439872518 -2.11171239615 -0.0395442158915 -2.12896829844 -0.0395445306786 -2.14622414112 -0.0395450456999 -2.16348040104 -0.039545731619 -2.18073666096 -0.0395465032197 -2.19799339771 -0.0395474173129 -2.21525043249 -0.0395485027693 -2.23250800371 -0.0395497325808 -2.24976581335 -0.0395503616892 -2.26898866892 -0.0395497037098 -2.28821319342 -0.0395484748297 -2.30547130108 -0.0395474173129 -2.32272869348 -0.0395465022884 -2.33998584747 -0.0395457018167 -2.35724246502 -0.0395450736396 -2.37449890375 -0.0395445884205 -2.39175492525 -0.0395442163572 -2.40901100636 -0.0395439867861 -2.42626672983 -0.0395439011045 -2.44352251291 -0.0395439872518 -2.46077817678 -0.0395442158915 -2.47803407908 -0.0395445306786 -2.49528992176 -0.0395450456999 -2.51254618168 -0.039545731619 -2.5298025012 -0.0395465032197 -2.54705929756 -0.0395474173129 -2.56431627273 -0.0395485027693 -2.58157390356 -0.0395497325808 -2.59883183241 -0.0395503616892 -2.61805462837 -0.0395497037098 -2.63727909327 -0.0395484748297 -2.65453714133 -0.0395474173129 -2.67179447412 -0.0395465022884 -2.68905162811 -0.0395457018167 -2.70630824566 -0.0395450736396 -2.723564744 -0.0395445884205 -2.7408207655 -0.0395442163572 -2.75807678699 -0.0395439867861 -2.77533257007 -0.0395439011045 -2.79258841276 -0.0395439872518 -2.80984407664 -0.0395442158915 -2.82710003853 -0.0395445306786 -2.84435588121 -0.0395450456999 -2.86161202192 -0.039545731619 -2.87886828184 -0.0395465032197 -2.8961251378 -0.0395474173129 -2.91338211298 -0.0395485027693 -2.9306396842 -0.0395497325808 -2.94789761305 -0.0395503616892 -2.96712040901 -0.0395497037098 -2.98634487391 -0.0395484748297 -3.00360298157 -0.0395474173129 -3.02086043358 -0.0395465022884 -3.03811758757 -0.0395457018167 -3.0553740859 -0.0395450736396 -3.07263052464 -0.0395445884205 -3.08988660574 -0.0395442163572 -3.10714262724 -0.0395439867861 -3.12439835071 -0.0395439011045 --3.14153108199 -0.0395439872518 --3.12427538633 -0.0395442158915 --3.10701942444 -0.0395445306786 --3.08976358175 -0.0395450456999 --3.07250744104 -0.039545731619 --3.05525118113 -0.0395465032197 --3.03799432516 -0.0395474173129 --3.02073734998 -0.0395485027693 --3.00347977877 -0.0395497325808 --2.98622184992 -0.0395503616892 --2.96699905396 -0.0395497037098 --2.94777458906 -0.0395484748297 --2.9305164814 -0.0395474173129 --2.91325902939 -0.0395465022884 --2.8960018754 -0.0395457018167 --2.87874531746 -0.0395450736396 --2.86148887873 -0.0395445884205 --2.84423279762 -0.0395442163572 --2.82697677612 -0.0395439867861 --2.80972111225 -0.0395439011045 --2.79246520996 -0.0395439872518 --2.77520954609 -0.0395442158915 --2.7579536438 -0.0395445306786 --2.74069780111 -0.0395450456999 --2.7234415412 -0.039545731619 --2.70618516207 -0.0395465032197 --2.68892842531 -0.0395474173129 --2.67167145014 -0.0395485027693 --2.65441381931 -0.0395497325808 --2.63715600967 -0.0395503616892 --2.61793327332 -0.0395497037098 --2.59870874882 -0.0395484748297 --2.58145064115 -0.0395474173129 --2.56419324875 -0.0395465022884 --2.54693609476 -0.0395457018167 --2.52967947722 -0.0395450736396 --2.51242297888 -0.0395445884205 --2.49516695738 -0.0395442163572 --2.47791099548 -0.0395439867861 --2.460655272 -0.0395439011045 --2.44339936972 -0.0395439872518 --2.42614370584 -0.0395442158915 --2.40888780355 -0.0395445306786 --2.39163196087 -0.0395450456999 --2.37437570095 -0.039545731619 --2.35711938142 -0.0395465032197 --2.33986264467 -0.0395474173129 --2.3226056695 -0.0395485027693 --2.30534803867 -0.0395497325808 --2.28809016943 -0.0395503616892 --2.26886731386 -0.0395497037098 --2.24964278936 -0.0395484748297 --2.23238474131 -0.0395474173129 --2.21512740851 -0.0395465022884 --2.19787025452 -0.0395457018167 --2.18061363697 -0.0395450736396 --2.16335713863 -0.0395445884205 --2.14610111714 -0.0395442163572 --2.12884509564 -0.0395439867861 --2.11158931256 -0.0395439011045 --2.09433352947 -0.0395439872518 --2.0770778656 -0.0395442158915 --2.0598218441 -0.0395445306786 --2.04256600141 -0.0395450456999 --2.02530986071 -0.039545731619 --2.00805360079 -0.0395465032197 --1.99079677463 -0.0395474173129 --1.97353979946 -0.0395485027693 --1.95628222824 -0.0395497325808 --1.93902429938 -0.0395503616892 --1.91980144381 -0.0395497037098 --1.90057697892 -0.0395484748297 --1.88331893086 -0.0395474173129 --1.86606153846 -0.0395465022884 --1.84880438447 -0.0395457018167 --1.83154776692 -0.0395450736396 --1.81429129839 -0.0395445884205 --1.79703527689 -0.0395442163572 --1.77977925539 -0.0395439867861 --1.76252353192 -0.0395439011045 --1.74526765943 -0.0395439872518 --1.72801196575 -0.0395442158915 --1.71075603366 -0.0395445306786 --1.69350019097 -0.0395450456999 --1.67624399066 -0.039545731619 --1.65898770094 -0.0395465032197 --1.64173090458 -0.0395474173129 --1.62447392941 -0.0395485027693 --1.60721632838 -0.0395497325808 --1.58995845914 -0.0395503616892 --1.57073566318 -0.0395497037098 --1.55151116848 -0.0395484748297 --1.53425309062 -0.0395474173129 --1.51699566841 -0.0395465022884 --1.49973854422 -0.0395457018167 --1.48248198629 -0.0395450736396 --1.46522548795 -0.0395445884205 --1.44796943664 -0.0395442163572 --1.43071338535 -0.0395439867861 --1.41345766187 -0.0395439011045 --1.39620181918 -0.0395439872518 --1.37894615531 -0.0395442158915 --1.36169025302 -0.0395445306786 --1.34443438053 -0.0395450456999 --1.32717812061 -0.039545731619 --1.3099218309 -0.0395465032197 --1.29266506434 -0.0395474173129 --1.27540811897 -0.0395485027693 --1.25815054775 -0.0395497325808 --1.2408926189 -0.0395503616892 --1.22166979313 -0.0395497037098 --1.20244532824 -0.0395484748297 --1.18518725038 -0.0395474173129 --1.16792985797 -0.0395465022884 --1.15067270398 -0.0395457018167 --1.13341608644 -0.0395450736396 --1.1161596179 -0.0395445884205 --1.0989035964 -0.0395442163572 --1.0816475451 -0.0395439867861 --1.06439179182 -0.0395439011045 --1.04713594914 -0.0395439872518 --1.02988028526 -0.0395442158915 --1.01262435317 -0.0395445306786 --0.995368510484 -0.0395450456999 --0.978112280369 -0.039545731619 --0.960855990648 -0.0395465032197 --0.94359920919 -0.0395474173129 --0.926342219114 -0.0395485027693 --0.909084662795 -0.0395497325808 --0.89182677865 -0.0395503616892 --0.872603952884 -0.0395497037098 --0.85337947309 -0.0395484748297 --0.83612138033 -0.0395474173129 --0.818864002824 -0.0395465022884 --0.801606863737 -0.0395457018167 --0.784350261092 -0.0395450736396 --0.767093792558 -0.0395445884205 --0.749837741256 -0.0395442163572 --0.732581689954 -0.0395439867861 --0.715325966477 -0.0395439011045 --0.698070108891 -0.0395439872518 --0.680814445019 -0.0395442158915 --0.663558527828 -0.0395445306786 --0.646302670241 -0.0395450456999 --0.629046455025 -0.039545731619 --0.611790135503 -0.0395465032197 --0.594533339143 -0.0395474173129 --0.577276393771 -0.0395485027693 --0.56001880765 -0.0395497325808 --0.542760878801 -0.0395503616892 --0.523538053036 -0.0395497037098 --0.504313603043 -0.0395484748297 --0.487055540085 -0.0395474173129 --0.469798140227 -0.0395465022884 --0.45254099369 -0.0395457018167 --0.435284398496 -0.0395450736396 --0.418027922511 -0.0395445884205 --0.40077188611 -0.0395442163572 --0.38351584971 -0.0395439867861 --0.366260111332 -0.0395439011045 --0.349004261195 -0.0395439872518 --0.331748597324 -0.0395442158915 --0.314492672681 -0.0395445306786 --0.297236815095 -0.0395450456999 --0.27998059243 -0.039545731619 --0.262724302709 -0.0395465032197 --0.245467506349 -0.0395474173129 --0.228210531175 -0.0395485027693 --0.210952941328 -0.0395497325808 --0.193695042282 -0.0395503616892 --0.174472227692 -0.0580772683024 --0.15524405241 -0.0580755006522 --0.1379859671 -0.058073955588 --0.120728552341 -0.058072607033 --0.103471387178 -0.0580714559182 --0.0862147789448 -0.058070502244 --0.0689582899213 -0.0580697450787 --0.0517022339627 -0.0580692104995 --0.0344461817294 -0.0580689003691 --0.0171904347371 -0.0580687876791 -6.54358882475e-05 -0.0580689003691 -0.0173211209476 -0.0580692375079 -0.0345770549029 -0.0580697441474 -0.0518329255283 -0.0580704743043 -0.0690891677514 -0.0580714568496 -0.0863454733044 -0.0580726079643 -0.103602278978 -0.058073955588 -0.12085926719 -0.0580755565315 -0.138116873801 -0.0580773251131 -0.155374795199 -0.0580782229081 -0.174597468227 -0.0580772962421 -0.19382179901 -0.0580755285919 -0.211079891771 -0.058073955588 -0.228337302804 -0.058072607033 -0.245594471693 -0.0580714559182 -0.26285109669 -0.058070502244 -0.280107580126 -0.0580697450787 -0.297363609075 -0.0580692104995 -0.314619660377 -0.0580689003691 -0.331875413656 -0.0580687876791 -0.349131293595 -0.0580689003691 -0.366386979818 -0.0580692375079 -0.383642904461 -0.0580697441474 -0.400898776949 -0.0580704743043 -0.418155021965 -0.0580714568496 -0.435411334038 -0.0580726079643 -0.452668130398 -0.058073955588 -0.469925113022 -0.0580755565315 -0.487182721496 -0.0580773251131 -0.504440642893 -0.0580782229081 -0.523663312197 -0.0580772962421 -0.54288764298 -0.0580755285919 -0.56014573574 -0.058073955588 -0.577403157949 -0.058072607033 -0.594660326839 -0.0580714559182 -0.611916929484 -0.058070502244 -0.629173412919 -0.0580697450787 -0.64642944932 -0.0580692104995 -0.663685500622 -0.0580689003691 -0.680941268802 -0.0580687876791 -0.69819714129 -0.0580689003691 -0.715452834964 -0.0580692375079 -0.732708781957 -0.0580697441474 -0.749964639545 -0.0580704743043 -0.767220884562 -0.0580714568496 -0.784477189183 -0.0580726079643 -0.801733970642 -0.058073955588 -0.818990945816 -0.0580755565315 -0.836248546839 -0.0580773251131 -0.853506475687 -0.0580782229081 -0.872729167342 -0.0580772683024 -0.891953498125 -0.0580755006522 -0.909211575985 -0.058073955588 -0.926468983293 -0.058072607033 -0.943726152182 -0.0580714559182 -0.960982769728 -0.058070502244 -0.978239268065 -0.0580697450787 -0.995495319369 -0.0580692104995 -1.01275137067 -0.0580689003691 -1.03000712395 -0.0580687876791 -1.04726299643 -0.0580689003691 -1.06451866031 -0.0580692375079 -1.0817745626 -0.0580697441474 -1.09903046489 -0.0580704743043 -1.11628672481 -0.0580714568496 -1.13354301453 -0.0580726079643 -1.15079981089 -0.058073955588 -1.16805678606 -0.0580755565315 -1.18531438709 -0.0580773251131 -1.20257231593 -0.0580782229081 -1.22179502249 -0.0580772962421 -1.24101936817 -0.0580755285919 -1.25827744603 -0.058073955588 -1.27553483844 -0.058072607033 -1.29279199243 -0.0580714559182 -1.31004860997 -0.058070502244 -1.32730510831 -0.0580697450787 -1.34456115961 -0.0580692104995 -1.36181721091 -0.0580689003691 -1.37907296419 -0.0580687876791 -1.39632883668 -0.0580689003691 -1.41358453035 -0.0580692375079 -1.43084046244 -0.0580697441474 -1.44809633493 -0.0580704743043 -1.46535256505 -0.0580714568496 -1.48260885477 -0.0580726079643 -1.49986568094 -0.058073955588 -1.51712268591 -0.0580755565315 -1.53438028694 -0.0580773251131 -1.55163821578 -0.0580782229081 -1.57086089253 -0.0580772962421 -1.59008520842 -0.0580755285919 -1.60734328627 -0.058073955588 -1.62460070848 -0.058072607033 -1.64185789227 -0.0580714559182 -1.65911450982 -0.058070502244 -1.67637097836 -0.0580697450787 -1.69362702966 -0.0580692104995 -1.71088308096 -0.0580689003691 -1.72813880444 -0.0580687876791 -1.74539467693 -0.0580689003691 -1.7626503706 -0.0580692375079 -1.77990627289 -0.0580697441474 -1.79716214537 -0.0580704743043 -1.8144184053 -0.0580714568496 -1.83167472482 -0.0580726079643 -1.84893155098 -0.058073955588 -1.86618852615 -0.0580755565315 -1.88344612718 -0.0580773251131 -1.90070402622 -0.0580782229081 -1.91992670298 -0.0580772683024 -1.93915104866 -0.0580755006522 -1.95640912652 -0.058073955588 -1.97366654873 -0.058072607033 -1.99092370271 -0.0580714559182 -2.00818035006 -0.058070502244 -2.02543687821 -0.0580697450787 -2.0426928997 -0.0580692104995 -2.0599489212 -0.0580689003691 -2.07720464468 -0.0580687876791 -2.09446054697 -0.0580689003691 -2.11171627045 -0.0580692375079 -2.12897217274 -0.0580697441474 -2.14622801542 -0.0580704743043 -2.16348427534 -0.0580714568496 -2.18074053526 -0.0580726079643 -2.19799733162 -0.058073955588 -2.2152543664 -0.0580755565315 -2.23251193762 -0.0580773251131 -2.24976986647 -0.0580782229081 -2.26899260283 -0.0580772683024 -2.2882168889 -0.0580755006522 -2.30547493696 -0.058073955588 -2.32273238897 -0.058072607033 -2.33998960257 -0.0580714559182 -2.35724622011 -0.058070502244 -2.37450265884 -0.0580697450787 -2.39175868034 -0.0580692104995 -2.40901476145 -0.0580689003691 -2.42627054453 -0.0580687876791 -2.44352638721 -0.0580689003691 -2.46078205109 -0.0580692375079 -2.47803795338 -0.0580697441474 -2.49529379606 -0.0580704743043 -2.51255005598 -0.0580714568496 -2.52980643511 -0.0580726079643 -2.54706329108 -0.058073955588 -2.56432026624 -0.0580755565315 -2.58157783746 -0.0580773251131 -2.59883576632 -0.0580782229081 -2.61805844307 -0.0580772962421 -2.63728278875 -0.0580755285919 -2.65454089642 -0.058073955588 -2.67179822922 -0.058072607033 -2.6890553832 -0.0580714559182 -2.70631200075 -0.058070502244 -2.72356849909 -0.0580697450787 -2.74082458019 -0.0580692104995 -2.75808066129 -0.0580689003691 -2.77533638477 -0.0580687876791 -2.79259216786 -0.0580689003691 -2.80984789133 -0.0580692375079 -2.82710391283 -0.0580697441474 -2.84435975552 -0.0580704743043 -2.86161595583 -0.0580714568496 -2.87887227536 -0.0580726079643 -2.89612907171 -0.058073955588 -2.91338604688 -0.0580755565315 -2.93064367771 -0.0580773251131 -2.94790160656 -0.0580782229081 -2.96712422371 -0.0580772683024 -2.9863485694 -0.0580755006522 -3.00360673666 -0.058073955588 -3.02086418867 -0.058072607033 -3.03812128306 -0.0580714559182 -3.05537784099 -0.058070502244 -3.07263433933 -0.0580697450787 -3.08989042044 -0.0580692104995 -3.10714650154 -0.0580689003691 -3.12440222502 -0.0580687876791 --3.1415272673 -0.0580689003691 --3.12427157164 -0.0580692375079 --3.10701555014 -0.0580697441474 --3.08975970745 -0.0580704743043 --3.07250350714 -0.0580714568496 --3.05524718761 -0.0580726079643 --3.03799039125 -0.058073955588 --3.02073341608 -0.0580755565315 --3.00347578525 -0.0580773251131 --2.98621785641 -0.0580782229081 --2.96699523926 -0.0580772962421 --2.94777089357 -0.0580755285919 --2.93051272631 -0.058073955588 --2.9132552743 -0.058072607033 --2.89599812031 -0.0580714559182 --2.87874150276 -0.058070502244 --2.86148500442 -0.0580697450787 --2.84422898293 -0.0580692104995 --2.82697296142 -0.0580689003691 --2.80971723795 -0.0580687876791 --2.79246133566 -0.0580689003691 --2.77520567179 -0.0580692375079 --2.7579497695 -0.0580697441474 --2.74069386721 -0.0580704743043 --2.72343760729 -0.0580714568496 --2.70618128776 -0.0580726079643 --2.68892455101 -0.058073955588 --2.67166757584 -0.0580755565315 --2.65440988541 -0.0580773251131 --2.63715201616 -0.0580782229081 --2.61792939901 -0.0580772962421 --2.59870505333 -0.0580755285919 --2.58144694567 -0.058073955588 --2.56418949366 -0.058072607033 --2.54693233967 -0.0580714559182 --2.52967572212 -0.058070502244 --2.51241922378 -0.0580697450787 --2.49516320229 -0.0580692104995 --2.47790718079 -0.0580689003691 --2.4606513977 -0.0580687876791 --2.44339549541 -0.0580689003691 --2.42613983154 -0.0580692375079 --2.40888392925 -0.0580697441474 --2.39162808657 -0.0580704743043 --2.37437182665 -0.0580714568496 --2.35711550712 -0.0580726079643 --2.33985871076 -0.058073955588 --2.32260167599 -0.0580755565315 --2.30534404516 -0.0580773251131 --2.28808611631 -0.0580782229081 --2.26886343956 -0.0580772683024 --2.24963915348 -0.0580755006522 --2.23238110542 -0.058073955588 --2.21512371302 -0.058072607033 --2.19786649942 -0.0580714559182 --2.18060988188 -0.058070502244 --2.16335338354 -0.0580697450787 --2.14609730244 -0.0580692104995 --2.12884128094 -0.0580689003691 --2.11158555746 -0.0580687876791 --2.09432971478 -0.0580689003691 --2.0770739913 -0.0580692375079 --2.0598179698 -0.0580697441474 --2.04256212711 -0.0580704743043 --2.0253059864 -0.0580714568496 --2.00804966688 -0.0580726079643 --1.99079281091 -0.058073955588 --1.97353583574 -0.0580755565315 --1.95627823472 -0.0580773251131 --1.93902030587 -0.0580782229081 --1.91979759932 -0.0580772962421 --1.90057328343 -0.0580755285919 --1.88331520557 -0.058073955588 --1.86605778337 -0.058072607033 --1.84880062938 -0.0580714559182 --1.83154401183 -0.058070502244 --1.8142875135 -0.0580697450787 --1.79703146219 -0.0580692104995 --1.77977544069 -0.0580689003691 --1.76251971722 -0.0580687876791 --1.74526384473 -0.0580689003691 --1.72800812125 -0.0580692375079 --1.71075215936 -0.0580697441474 --1.69349631667 -0.0580704743043 --1.67624008656 -0.0580714568496 --1.65898376703 -0.0580726079643 --1.64172697067 -0.058073955588 --1.6244699657 -0.0580755565315 --1.60721233487 -0.0580773251131 --1.58995446563 -0.0580782229081 --1.57073181867 -0.0580772962421 --1.55150747299 -0.0580755285919 --1.53424939513 -0.058073955588 --1.51699194312 -0.058072607033 --1.49973478913 -0.0580714559182 --1.48247820139 -0.058070502244 --1.46522170305 -0.0580697450787 --1.44796565175 -0.0580692104995 --1.43070957065 -0.0580689003691 --1.41345381737 -0.0580687876791 --1.39619794488 -0.0580689003691 --1.37894228101 -0.0580692375079 --1.36168637871 -0.0580697441474 --1.34443047642 -0.0580704743043 --1.32717421651 -0.0580714568496 --1.30991792679 -0.0580726079643 --1.29266113043 -0.058073955588 --1.27540415525 -0.0580755565315 --1.25814655423 -0.0580773251131 --1.24088862538 -0.0580782229081 --1.22166594863 -0.0580772683024 --1.20244163275 -0.0580755006522 --1.18518352508 -0.058073955588 --1.16792610288 -0.058072607033 --1.15066894889 -0.0580714559182 --1.13341233135 -0.058070502244 --1.11615583301 -0.0580697450787 --1.09889978171 -0.0580692104995 --1.0816437304 -0.0580689003691 --1.06438797712 -0.0580687876791 --1.04713213444 -0.0580689003691 --1.02987644076 -0.0580692375079 --1.01262047887 -0.0580697441474 --0.99536462128 -0.0580704743043 --0.978108376264 -0.0580714568496 --0.960852071643 -0.0580726079643 --0.943595275283 -0.058073955588 --0.926338270306 -0.0580755565315 --0.909080684185 -0.0580773251131 --0.891822770238 -0.0580782229081 --0.872600078582 -0.0580772683024 --0.8533757478 -0.0580755006522 --0.83611766994 -0.058073955588 --0.818860277534 -0.058072607033 --0.801603108645 -0.0580714559182 --0.784346476197 -0.058070502244 --0.767089992762 -0.0580697450787 --0.74983394146 -0.0580692104995 --0.732577875257 -0.0580689003691 --0.715322136879 -0.0580687876791 --0.698066264391 -0.0580689003691 --0.680810585618 -0.0580692375079 --0.663554653526 -0.0580697441474 --0.646298781038 -0.0580704743043 --0.62904253602 -0.0580714568496 --0.611786201596 -0.0580726079643 --0.594529405236 -0.058073955588 --0.577272430063 -0.0580755565315 --0.56001482904 -0.0580773251131 --0.542756900191 -0.0580782229081 --0.523534223437 -0.0580772962421 --0.504309915006 -0.0580755285919 --0.487051829695 -0.058073955588 --0.469794414937 -0.058072607033 --0.452537246048 -0.0580714559182 --0.435280628502 -0.058070502244 --0.418024145066 -0.0580697450787 --0.400768093765 -0.0580692104995 --0.383512035012 -0.0580689003691 --0.366256281733 -0.0580687876791 --0.349000409245 -0.0580689003691 --0.331744737923 -0.0580692375079 --0.31448880583 -0.0580697441474 --0.297232925892 -0.0580704743043 --0.279976680875 -0.0580714568496 --0.262720368802 -0.0580726079643 --0.245463564992 -0.058073955588 --0.228206582367 -0.0580755565315 --0.210948970169 -0.0580773251131 --0.193691052496 -0.0580782229081 --0.174468383193 -0.0765865892172 --0.155240356922 -0.0765842460096 --0.137982252985 -0.0765821766108 --0.120724821463 -0.0765803847462 --0.103467641398 -0.0765788685531 --0.0862110164016 -0.0765776280314 --0.0689545106143 -0.0765766352415 --0.0516984378919 -0.0765759442002 --0.0344423688948 -0.0765755586326 --0.0171866058372 -0.0765754207969 -6.92796893425e-05 -0.076575530693 -0.0173249803483 -0.0765759721398 -0.0345809292048 -0.0765766911208 -0.0518368156627 -0.0765776559711 -0.0690930746496 -0.0765788964927 -0.0863493960351 -0.0765804126859 -0.103606216609 -0.0765822045505 -0.120863221586 -0.0765842739492 -0.138120848686 -0.0765866432339 -0.15537878871 -0.0765878558159 -0.174601316452 -0.0765866171569 -0.193825501949 -0.0765842739493 -0.211083609611 -0.0765821766108 -0.228341035545 -0.0765803847462 -0.24559821561 -0.0765788685531 -0.262854851782 -0.0765776280314 -0.280111350119 -0.0765766352415 -0.297367408872 -0.0765759442002 -0.314623475075 -0.0765755586326 -0.331879235804 -0.0765754207969 -0.349135130644 -0.076575530693 -0.366390839219 -0.0765759721398 -0.383646786213 -0.0765766911208 -0.400902673602 -0.0765776559711 -0.41815893352 -0.0765788964927 -0.435415253043 -0.0765804126859 -0.452672064305 -0.0765822045505 -0.46992906928 -0.0765842739492 -0.487186692655 -0.0765866432339 -0.504444621504 -0.0765878558159 -0.523667156696 -0.0765866171569 -0.542891338468 -0.0765842739493 -0.56014944613 -0.0765821766108 -0.577406898141 -0.0765803847462 -0.594664081931 -0.0765788685531 -0.611920684576 -0.0765776280314 -0.629177182913 -0.0765766352415 -0.646433249116 -0.0765759442002 -0.663689300418 -0.0765755586326 -0.680945083499 -0.0765754207969 -0.698200970888 -0.076575530693 -0.715456679464 -0.0765759721398 -0.732712656259 -0.0765766911208 -0.749968543648 -0.0765776559711 -0.767224803567 -0.0765788964927 -0.784481108189 -0.0765804126859 -0.80173791945 -0.0765822045505 -0.818994924426 -0.0765842739492 -0.836252555251 -0.0765866432339 -0.853510484099 -0.0765878558159 -0.87273299694 -0.0765865892172 -0.891957193613 -0.0765842460096 -0.909215286374 -0.0765821766108 -0.926472708583 -0.0765803847462 -0.943729907274 -0.0765788685531 -0.960986539722 -0.0765776280314 -0.97824305296 -0.0765766352415 -0.995499119164 -0.0765759442002 -1.01275518537 -0.0765755586326 -1.03001093864 -0.0765754207969 -1.04726681113 -0.076575530693 -1.06452253461 -0.0765759721398 -1.0817784667 -0.0765766911208 -1.09903433919 -0.0765776559711 -1.11629059911 -0.0765788964927 -1.13354694843 -0.0765804126859 -1.15080377459 -0.0765822045505 -1.16806074977 -0.0765842739492 -1.1853183806 -0.0765866432339 -1.20257630944 -0.0765878558159 -1.22179883718 -0.0765866171569 -1.24102303385 -0.0765842739493 -1.25828114152 -0.0765821766108 -1.27553856373 -0.0765803847462 -1.29279574752 -0.0765788685531 -1.31005236507 -0.0765776280314 -1.3273088634 -0.0765766352415 -1.34456497431 -0.0765759442002 -1.36182105542 -0.0765755586326 -1.37907677889 -0.0765754207969 -1.39633265138 -0.076575530693 -1.41358837485 -0.0765759721398 -1.43084433675 -0.0765766911208 -1.44810023904 -0.0765776559711 -1.46535649895 -0.0765788964927 -1.48261278868 -0.0765804126859 -1.49986961484 -0.0765822045505 -1.51712664962 -0.0765842739492 -1.53438428045 -0.0765866432339 -1.55164220929 -0.0765878558159 -1.57086473703 -0.0765866171569 -1.5900889039 -0.0765842739493 -1.60734698176 -0.0765821766108 -1.62460443378 -0.0765803847462 -1.64186164737 -0.0765788685531 -1.65911826492 -0.0765776280314 -1.67637476325 -0.0765766352415 -1.69363084435 -0.0765759442002 -1.71088689565 -0.0765755586326 -1.72814264894 -0.0765754207969 -1.74539855123 -0.076575530693 -1.7626542747 -0.0765759721398 -1.77991020679 -0.0765766911208 -1.79716604948 -0.0765776559711 -1.8144223094 -0.0765788964927 -1.83167865873 -0.0765804126859 -1.84893548489 -0.0765822045505 -1.86619246006 -0.0765842739492 -1.88345006109 -0.0765866432339 -1.90070798993 -0.0765878558159 -1.91993051767 -0.0765865892172 -1.93915471434 -0.0765842460096 -1.95641285181 -0.0765821766108 -1.97367030382 -0.0765803847462 -1.99092745781 -0.0765788685531 -2.00818410516 -0.0765776280314 -2.0254406333 -0.0765766352415 -2.0426966548 -0.0765759442002 -2.0599527359 -0.0765755586326 -2.07720851898 -0.0765754207969 -2.09446442127 -0.076575530693 -2.11172014475 -0.0765759721398 -2.12897604704 -0.0765766911208 -2.14623188972 -0.0765776559711 -2.16348814964 -0.0765788964927 -2.18074446917 -0.0765804126859 -2.19800132513 -0.0765822045505 -2.21525830031 -0.0765842739492 -2.23251587153 -0.0765866432339 -2.24977385998 -0.0765878558159 -2.26899641752 -0.0765865892172 -2.28822058439 -0.0765842460096 -2.30547869205 -0.0765821766108 -2.32273614406 -0.0765803847462 -2.33999329805 -0.0765788685531 -2.3572499156 -0.0765776280314 -2.37450647354 -0.0765766352415 -2.39176255464 -0.0765759442002 -2.40901857614 -0.0765755586326 -2.42627429962 -0.0765754207969 -2.44353020191 -0.076575530693 -2.46078592539 -0.0765759721398 -2.47804182768 -0.0765766911208 -2.49529772997 -0.0765776559711 -2.51255404949 -0.0765788964927 -2.52981042862 -0.0765804126859 -2.54706722498 -0.0765822045505 -2.56432420015 -0.0765842739492 -2.58158183098 -0.0765866432339 -2.59883975983 -0.0765878558159 -2.61806225777 -0.0765866171569 -2.63728642464 -0.0765842739493 -2.6545445919 -0.0765821766108 -2.67180198431 -0.0765803847462 -2.6890591383 -0.0765788685531 -2.70631575584 -0.0765776280314 -2.72357225418 -0.0765766352415 -2.74082839489 -0.0765759442002 -2.75808447599 -0.0765755586326 -2.77534019947 -0.0765754207969 -2.79259604216 -0.076575530693 -2.80985176563 -0.0765759721398 -2.82710778713 -0.0765766911208 -2.84436362982 -0.0765776559711 -2.86161988974 -0.0765788964927 -2.87887626887 -0.0765804126859 -2.89613300562 -0.0765822045505 -2.91338998079 -0.0765842739492 -2.93064767122 -0.0765866432339 -2.94790560007 -0.0765878558159 -2.96712809801 -0.0765865892172 -2.98635232449 -0.0765842460096 -3.00361043215 -0.0765821766108 -3.02086788416 -0.0765803847462 -3.03812503815 -0.0765788685531 -3.05538165569 -0.0765776280314 -3.07263815403 -0.0765766352415 -3.08989417553 -0.0765759442002 -3.10715031624 -0.0765755586326 -3.12440609932 -0.0765754207969 --3.14152339299 -0.076575530693 --3.12426769734 -0.0765759721398 --3.10701167584 -0.0765766911208 --3.08975583315 -0.0765776559711 --3.07249957323 -0.0765788964927 --3.0552431941 -0.0765804126859 --3.03798645735 -0.0765822045505 --3.02072948217 -0.0765842739492 --3.00347179174 -0.0765866432339 --2.9862138629 -0.0765878558159 --2.96699136496 -0.0765866171569 --2.94776713848 -0.0765842739493 --2.93050903082 -0.0765821766108 --2.91325157881 -0.0765803847462 --2.89599436521 -0.0765788685531 --2.87873774767 -0.0765776280314 --2.86148124933 -0.0765766352415 --2.84422522783 -0.0765759442002 --2.82696914673 -0.0765755586326 --2.80971336365 -0.0765754207969 --2.79245746136 -0.076575530693 --2.77520179749 -0.0765759721398 --2.7579458952 -0.0765766911208 --2.7406899929 -0.0765776559711 --2.72343373299 -0.0765788964927 --2.70617741346 -0.0765804126859 --2.6889206171 -0.0765822045505 --2.67166364193 -0.0765842739492 --2.6544060111 -0.0765866432339 --2.63714808226 -0.0765878558159 --2.61792552471 -0.0765866171569 --2.59870129824 -0.0765842739493 --2.58144319058 -0.0765821766108 --2.56418573857 -0.0765803847462 --2.54692858458 -0.0765788685531 --2.52967196703 -0.0765776280314 --2.51241546869 -0.0765766352415 --2.49515944719 -0.0765759442002 --2.47790336609 -0.0765755586326 --2.46064758301 -0.0765754207969 --2.44339168072 -0.076575530693 --2.42613595724 -0.0765759721398 --2.40888005495 -0.0765766911208 --2.39162415266 -0.0765776559711 --2.37436789274 -0.0765788964927 --2.35711163282 -0.0765804126859 --2.33985477686 -0.0765822045505 --2.32259768248 -0.0765842739492 --2.30534005165 -0.0765866432339 --2.2880821228 -0.0765878558159 --2.26885962486 -0.0765865892172 --2.2496355176 -0.0765842460096 --2.23237740994 -0.0765821766108 --2.21511995793 -0.0765803847462 --2.19786274433 -0.0765788685531 --2.18060612678 -0.0765776280314 --2.16334962845 -0.0765766352415 --2.14609348774 -0.0765759442002 --2.12883746624 -0.0765755586326 --2.11158174276 -0.0765754207969 --2.09432584047 -0.076575530693 --2.077070117 -0.0765759721398 --2.0598140955 -0.0765766911208 --2.04255825281 -0.0765776559711 --2.0253020525 -0.0765788964927 --2.00804570317 -0.0765804126859 --1.99078887701 -0.0765822045505 --1.97353187204 -0.0765842739492 --1.95627424121 -0.0765866432339 --1.93901631236 -0.0765878558159 --1.91979378462 -0.0765866171569 --1.90056961775 -0.0765842739493 --1.88331151009 -0.0765821766108 --1.86605405808 -0.0765803847462 --1.84879687429 -0.0765788685531 --1.83154025674 -0.0765776280314 --1.8142837584 -0.0765766352415 --1.7970276773 -0.0765759442002 --1.779771626 -0.0765755586326 --1.76251587271 -0.0765754207969 --1.74525997043 -0.076575530693 --1.72800424695 -0.0765759721398 --1.71074828506 -0.0765766911208 --1.69349241257 -0.0765776559711 --1.67623615265 -0.0765788964927 --1.65897983312 -0.0765804126859 --1.64172303676 -0.0765822045505 --1.62446603179 -0.0765842739492 --1.60720840097 -0.0765866432339 --1.58995047211 -0.0765878558159 --1.57072794437 -0.0765866171569 --1.5515037477 -0.0765842739493 --1.53424564004 -0.0765821766108 --1.51698821783 -0.0765803847462 --1.49973106384 -0.0765788685531 --1.4824744165 -0.0765776280314 --1.46521788836 -0.0765766352415 --1.44796183706 -0.0765759442002 --1.43070575595 -0.0765755586326 --1.41344997287 -0.0765754207969 --1.39619410038 -0.076575530693 --1.37893843651 -0.0765759721398 --1.36168250442 -0.0765766911208 --1.34442660212 -0.0765776559711 --1.32717034221 -0.0765788964927 --1.30991402268 -0.0765804126859 --1.29265719652 -0.0765822045505 --1.27540019154 -0.0765842739492 --1.25814256072 -0.0765866432339 --1.24088463187 -0.0765878558159 --1.22166210413 -0.0765865892172 --1.20243793726 -0.0765842460096 --1.1851798296 -0.0765821766108 --1.16792237759 -0.0765803847462 --1.1506651938 -0.0765788685531 --1.13340857625 -0.0765776280314 --1.11615207792 -0.0765766352415 --1.09889599681 -0.0765759442002 --1.08163991571 -0.0765755586326 --1.06438416243 -0.0765754207969 --1.04712828994 -0.076575530693 --1.02987256646 -0.0765759721398 --1.01261660457 -0.0765766911208 --0.995360732078 -0.0765776559711 --0.97810447216 -0.0765788964927 --0.960848137736 -0.0765804126859 --0.943591326475 -0.0765822045505 --0.9263343364 -0.0765842739492 --0.909076735377 -0.0765866432339 --0.891818791628 -0.0765878558159 --0.872596234083 -0.0765865892172 --0.85337203741 -0.0765842460096 --0.83611394465 -0.0765821766108 --0.818856537342 -0.0765803847462 --0.801599353552 -0.0765788685531 --0.784342721104 -0.0765776280314 --0.767086207867 -0.0765766352415 --0.749830126763 -0.0765759442002 --0.732574060559 -0.0765755586326 --0.715318307281 -0.0765754207969 --0.698062419891 -0.076575530693 --0.680806726217 -0.0765759721398 --0.663550794125 -0.0765766911208 --0.646294891834 -0.0765776559711 --0.629038602114 -0.0765788964927 --0.611782282591 -0.0765804126859 --0.594525486231 -0.0765822045505 --0.577268481254 -0.0765842739492 --0.56001085043 -0.0765866432339 --0.54275290668 -0.0765878558159 --0.523530378938 -0.0765866171569 --0.504306212067 -0.0765842739493 --0.487048111856 -0.0765821766108 --0.469790682197 -0.0765803847462 --0.452533505857 -0.0765788685531 --0.435276858509 -0.0765776280314 --0.418020345271 -0.0765766352415 --0.400764286518 -0.0765759442002 --0.383508212864 -0.0765755586326 --0.366252444684 -0.0765754207969 --0.348996564746 -0.076575530693 --0.331740871072 -0.0765759721398 --0.314484924078 -0.0765766911208 --0.297229036689 -0.0765776559711 --0.27997276932 -0.0765788964927 --0.262716434896 -0.0765804126859 --0.245459619909 -0.0765822045505 --0.228202629835 -0.0765842739492 --0.21094500646 -0.0765866432339 --0.193687070161 -0.0765878558159 --0.174464542419 -0.0948094446212 --0.155237190425 -0.0948065463454 --0.137979071587 -0.0948039442302 --0.120721627027 -0.0948017239571 --0.103464432061 -0.0947998557241 --0.0862077958882 -0.0947983115913 --0.0689512798562 -0.0947970934213 --0.051695193164 -0.0947962533685 --0.0344391111284 -0.0947957653552 --0.0171833345666 -0.0947956033051 -7.2564464065e-05 -0.0947957653553 -0.0173282786272 -0.0947962794452 -0.0345842400566 -0.0947971474378 -0.0518401404843 -0.0947983674704 -0.0690964153037 -0.0947999116035 -0.0863527543843 -0.0948017798365 -0.103609587997 -0.0948040001094 -0.120866600424 -0.0948065463452 -0.1381242387 -0.094809470698 -0.1553821899 -0.0948109868913 -0.174604598433 -0.0948094446212 -0.19382866472 -0.0948065463454 -0.211086783558 -0.0948039442302 -0.228344224393 -0.0948017239571 -0.245601423085 -0.0947998557241 -0.262858062983 -0.0947983115913 -0.28011456877 -0.0947970934213 -0.297370657325 -0.0947962533685 -0.314626738429 -0.0947957653552 -0.331882506609 -0.0947956033051 -0.349138408899 -0.0947957653553 -0.366394132376 -0.0947962794452 -0.383650094271 -0.0947971474378 -0.400906004012 -0.0947983674704 -0.418162278831 -0.0947999116035 -0.435418598354 -0.0948017798365 -0.452675424517 -0.0948040001094 -0.469932444394 -0.0948065724224 -0.48719009012 -0.0948094967752 -0.504448026419 -0.0948109868913 -0.523670434952 -0.0948094446212 -0.542894497514 -0.0948065463454 -0.560152605176 -0.0948039442302 -0.577410072088 -0.0948017239571 -0.594667270779 -0.0947998557241 -0.611923888326 -0.0947983115913 -0.629180416465 -0.0947970934213 -0.64643651247 -0.0947962533685 -0.663692578673 -0.0947957653552 -0.680948361755 -0.0947956033051 -0.698204264045 -0.0947957653553 -0.71545997262 -0.0947962794452 -0.732715949416 -0.0947971474378 -0.749971866608 -0.0947983674704 -0.767228141427 -0.0947999116035 -0.78448446095 -0.0948017798365 -0.801741287112 -0.0948040001094 -0.818998292088 -0.0948065463452 -0.836255937815 -0.094809470698 -0.853513881564 -0.0948109868913 -0.872736275196 -0.0948094446212 -0.891960352659 -0.0948065463454 -0.909218475223 -0.0948039442302 -0.926475912333 -0.0948017239571 -0.943733096123 -0.0947998557241 -0.960989743471 -0.0947983115913 -0.978246286512 -0.0947970934213 -0.995502397419 -0.0947962533685 -1.01275846362 -0.0947957653552 -1.0300142169 -0.0947956033051 -1.04727008939 -0.0947957653553 -1.06452581286 -0.0947962794452 -1.08178180456 -0.0947971474378 -1.09903770685 -0.0947983674704 -1.11629396677 -0.0947999116035 -1.1335503161 -0.0948017798365 -1.15080717206 -0.0948040001094 -1.16806414723 -0.0948065463452 -1.18532177806 -0.094809470698 -1.20257973671 -0.0948109868913 -1.22180214524 -0.0948094446212 -1.2410261929 -0.0948065463454 -1.25828430057 -0.0948039442302 -1.27554175258 -0.0948017239571 -1.29279893637 -0.0947998557241 -1.31005558372 -0.0947983115913 -1.32731211185 -0.0947970934213 -1.34456822276 -0.0947962533685 -1.36182430387 -0.0947957653552 -1.37908005714 -0.0947956033051 -1.39633595943 -0.0947957653553 -1.41359168291 -0.0947962794452 -1.43084764481 -0.0947971474378 -1.4481035471 -0.0947983674704 -1.46535980701 -0.0947999116035 -1.48261612654 -0.0948017798365 -1.4998729825 -0.0948040001094 -1.51713001728 -0.0948065463452 -1.53438764811 -0.094809470698 -1.55164560675 -0.0948109868913 -1.57086801529 -0.0948094446212 -1.59009206295 -0.0948065463454 -1.60735017061 -0.0948039442302 -1.62460762262 -0.0948017239571 -1.64186483622 -0.0947998557241 -1.65912145376 -0.0947983115913 -1.6763779521 -0.0947970934213 -1.69363406301 -0.0947962533685 -1.71089017391 -0.0947957653552 -1.72814595699 -0.0947956033051 -1.74540185928 -0.0947957392783 -1.76265755296 -0.0947962533682 -1.77991351485 -0.0947971474378 -1.79716941714 -0.0947983674704 -1.81442567706 -0.0947999116035 -1.83168202639 -0.0948017798365 -1.84893885255 -0.0948040001094 -1.86619585753 -0.0948065463452 -1.88345348835 -0.094809470698 -1.9007114172 -0.0948109868913 -1.91993382573 -0.0948094166815 -1.93915787339 -0.0948065184057 -1.95641601086 -0.0948039442302 -1.97367349267 -0.0948017239571 -1.99093067646 -0.0947998557241 -2.00818735361 -0.0947983115913 -2.02544385195 -0.0947970934213 -2.04269987345 -0.0947962533685 -2.05995601416 -0.0947957653552 -2.07721179724 -0.0947956033051 -2.09446769953 -0.0947957653553 -2.11172348261 -0.0947962794452 -2.1289793849 -0.0947971474378 -2.14623522758 -0.0947983674704 -2.1634914875 -0.0947999116035 -2.18074780703 -0.0948017798365 -2.19800466299 -0.0948040001094 -2.21526169777 -0.0948065463452 -2.2325193286 -0.094809470698 -2.24977725744 -0.0948109868913 -2.26899969578 -0.0948094166815 -2.28822380304 -0.0948065184057 -2.3054819107 -0.0948039442302 -2.32273936272 -0.0948017239571 -2.3399965167 -0.0947998557241 -2.35725313425 -0.0947983115913 -2.37450969219 -0.0947970934213 -2.39176577329 -0.0947962533685 -2.4090218544 -0.0947957653552 -2.42627757788 -0.0947956033051 -2.44353348017 -0.0947957653553 -2.46078926325 -0.0947962794452 -2.47804522514 -0.0947971474378 -2.49530112743 -0.0947983674704 -2.51255744696 -0.0947999116035 -2.52981382609 -0.0948017798365 -2.54707056284 -0.0948040001094 -2.56432753802 -0.0948065463452 -2.58158522844 -0.094809470698 -2.59884315729 -0.0948109868913 -2.61806553602 -0.0948094446212 -2.63728958368 -0.0948065463454 -2.65454775095 -0.0948039442302 -2.67180520296 -0.0948017239571 -2.68906235695 -0.0947998557241 -2.7063189745 -0.0947983115913 -2.72357553244 -0.0947970934213 -2.74083167315 -0.0947962533685 -2.75808769464 -0.0947957653552 -2.77534347773 -0.0947956033051 -2.79259938002 -0.0947957653553 -2.80985504389 -0.0947962794452 -2.82711106539 -0.0947971474378 -2.84436696768 -0.0947983674704 -2.86162322759 -0.0947999116035 -2.87887960672 -0.0948017798365 -2.89613640309 -0.0948040001094 -2.91339337825 -0.0948065463452 -2.93065100908 -0.094809470698 -2.94790893793 -0.0948109868913 -2.96713137627 -0.0948094446212 -2.98635548353 -0.0948065463454 -3.00361359119 -0.0948039442302 -3.02087104321 -0.0948017239571 -3.0381282568 -0.0947998557241 -3.05538487434 -0.0947983115913 -3.07264137268 -0.0947970934213 -3.08989745379 -0.0947962533685 -3.10715353489 -0.0947957653552 -3.12440931797 -0.0947956033051 --3.14152011473 -0.0947957653553 --3.12426441908 -0.0947962794452 --3.10700839758 -0.0947971474378 --3.08975249529 -0.0947983674704 --3.07249623537 -0.0947999116035 --3.05523985624 -0.0948017798365 --3.03798305988 -0.0948040001094 --3.02072608471 -0.0948065463452 --3.00346845388 -0.094809470698 --2.98621052504 -0.0948109868913 --2.9669880867 -0.0948094446212 --2.94776397943 -0.0948065463454 --2.93050587177 -0.0948039442302 --2.91324841976 -0.0948017239571 --2.89599120617 -0.0947998557241 --2.87873458862 -0.0947983115913 --2.86147809028 -0.0947970934213 --2.84422200918 -0.0947962533685 --2.82696592808 -0.0947957653552 --2.809710145 -0.0947956033051 --2.79245424271 -0.0947957653553 --2.77519857884 -0.0947962794452 --2.75794261694 -0.0947971474378 --2.74068665505 -0.0947983674704 --2.72343039513 -0.0947999116035 --2.7061740756 -0.0948017798365 --2.68891721964 -0.0948040001094 --2.67166024446 -0.0948065724224 --2.65440261364 -0.0948094967752 --2.63714462519 -0.0948109868913 --2.61792218685 -0.0948094446212 --2.59869813919 -0.0948065463454 --2.58144003153 -0.0948039442302 --2.56418251991 -0.0948017239571 --2.54692536592 -0.0947998557241 --2.52966874838 -0.0947983115913 --2.51241225004 -0.0947970934213 --2.49515622854 -0.0947962533685 --2.47790008783 -0.0947957653552 --2.46064430475 -0.0947956033051 --2.44338840246 -0.0947957653553 --2.42613261938 -0.0947962794452 --2.40887671709 -0.0947971474378 --2.3916208148 -0.0947983674704 --2.37436449528 -0.0947999116035 --2.35710823536 -0.0948017798365 --2.339851439 -0.0948040001094 --2.32259434462 -0.0948065463452 --2.30533665419 -0.094809470698 --2.28807872534 -0.0948109868913 --2.26885634661 -0.0948094446212 --2.24963229895 -0.0948065463454 --2.23237419129 -0.0948039442302 --2.21511673927 -0.0948017239571 --2.19785952568 -0.0947998557241 --2.18060290813 -0.0947983115913 --2.16334635019 -0.0947970934213 --2.14609020949 -0.0947962533685 --2.12883418798 -0.0947957653552 --2.1115784049 -0.0947956033051 --2.09432250261 -0.0947957653553 --2.07706683874 -0.0947962794452 --2.05981081724 -0.0947971474378 --2.04255491495 -0.0947983674704 --2.02529865503 -0.0947999116035 --2.00804230571 -0.0948017798365 --1.99078550935 -0.0948040001094 --1.97352850437 -0.0948065463452 --1.95627084375 -0.094809470698 --1.93901288509 -0.0948109868913 --1.91979050636 -0.0948094446212 --1.9005664587 -0.0948065463454 --1.88330835104 -0.0948039442302 --1.86605089903 -0.0948017239571 --1.84879368544 -0.0947998557241 --1.83153703809 -0.0947983115913 --1.81428050995 -0.0947970934213 --1.79702442884 -0.0947962533685 --1.77976834774 -0.0947957653552 --1.76251256466 -0.0947956033051 --1.74525666237 -0.0947957653553 --1.72800093889 -0.0947962794452 --1.710744977 -0.0947971474378 --1.69348907471 -0.0947983674704 --1.67623281479 -0.0947999116035 --1.65897649527 -0.0948017798365 --1.6417196691 -0.0948040001094 --1.62446266413 -0.0948065463452 --1.60720503331 -0.094809470698 --1.58994707465 -0.0948109868913 --1.57072463632 -0.0948094446212 --1.55150055885 -0.0948065463454 --1.53424245119 -0.0948039442302 --1.51698502898 -0.0948017239571 --1.49972784519 -0.0947998557241 --1.48247119784 -0.0947983115913 --1.4652146697 -0.0947970934213 --1.4479585886 -0.0947962533685 --1.43070250749 -0.0947957653552 --1.41344672441 -0.0947956033051 --1.39619085193 -0.0947957392783 --1.37893515825 -0.0947962533682 --1.36167916656 -0.0947971474378 --1.34442326427 -0.0947983674704 --1.32716700435 -0.0947999116035 --1.30991065502 -0.0948017798365 --1.29265382886 -0.0948040001094 --1.27539682388 -0.0948065463452 --1.25813916326 -0.094809470698 --1.2408812046 -0.0948109868913 --1.22165882587 -0.0948094166815 --1.20243477821 -0.0948065184057 --1.18517664075 -0.0948039442302 --1.16791918874 -0.0948017239571 --1.15066200495 -0.0947998557241 --1.1334053576 -0.0947983115913 --1.11614882946 -0.0947970934213 --1.09889274836 -0.0947962533685 --1.08163666725 -0.0947957653552 --1.06438088417 -0.0947956033051 --1.04712498188 -0.0947957653553 --1.0298692584 -0.0947962794452 --1.01261329651 -0.0947971474378 --0.995357409119 -0.0947983674704 --0.9781011343 -0.0947999116035 --0.960844784975 -0.0948017798365 --0.943587958813 -0.0948040001094 --0.926330953837 -0.0948065463452 --0.909073323011 -0.094809470698 --0.891815379262 -0.0948109868913 --0.872592955828 -0.0948094166815 --0.853368878364 -0.0948065184057 --0.836110755801 -0.0948039442302 --0.818853318692 -0.0948017239571 --0.801596134901 -0.0947998557241 --0.784339517355 -0.0947983115913 --0.767082989216 -0.0947970934213 --0.749826878309 -0.0947962533685 --0.732570797205 -0.0947957653552 --0.715315029025 -0.0947956033051 --0.698059141636 -0.0947957653553 --0.680803433061 -0.0947962794452 --0.663547471166 -0.0947971474378 --0.646291553974 -0.0947983674704 --0.629035264254 -0.0947999116035 --0.61177892983 -0.0948017798365 --0.594522118568 -0.0948040001094 --0.577265098691 -0.0948065463452 --0.560007452964 -0.094809470698 --0.542749509215 -0.0948109868913 --0.523527100682 -0.0948094446212 --0.504303045571 -0.0948065463454 --0.487044930458 -0.0948039442302 --0.469787485898 -0.0948017239571 --0.452530294657 -0.0947998557241 --0.435273639858 -0.0947983115913 --0.418017111719 -0.0947970934213 --0.400761038065 -0.0947962533685 --0.383504964411 -0.0947957653552 --0.36624918133 -0.0947956033051 --0.34899328649 -0.0947957653553 --0.331737570465 -0.0947962794452 --0.314481601119 -0.0947971474378 --0.297225706279 -0.0947983674704 --0.27996943146 -0.0947999116035 --0.262713097036 -0.0948017798365 --0.245456263423 -0.0948040001094 --0.228199247271 -0.0948065463452 --0.21094161272 -0.094809470698 --0.193683668971 -0.0948109868913 --0.174461260438 -0.11246787943 --0.15523218736 -0.112464446574 --0.137974049896 -0.112461384386 --0.120716586709 -0.112458748743 --0.103459369391 -0.112456513569 --0.0862027127296 -0.112454677001 --0.0689461780712 -0.112453240901 --0.0516900708899 -0.112452255562 --0.0344339660369 -0.112451668829 --0.0171781692188 -0.112451482564 -7.77512323125e-05 -0.112451696769 -0.0173334870488 -0.112452283501 -0.0345894703641 -0.112453293055 -0.0518453931436 -0.112454731018 -0.0691016893834 -0.112456569448 -0.0863580498845 -0.112458804622 -0.103614905849 -0.112461438403 -0.120871940628 -0.112464472652 -0.138129595667 -0.112467905507 -0.155387561768 -0.112469688058 -0.174609784037 -0.11246787943 -0.19383366406 -0.112464446574 -0.211091801524 -0.112461384386 -0.228349264711 -0.112458748743 -0.245606493205 -0.112456513569 -0.262863151729 -0.112454677001 -0.280119672418 -0.112453240901 -0.297375783324 -0.112452255562 -0.314631886781 -0.112451668829 -0.331887669861 -0.112451482564 -0.349143594503 -0.112451696769 -0.366399340331 -0.112452283501 -0.383655317128 -0.112453293055 -0.40091124922 -0.112454731018 -0.418167546391 -0.112456569448 -0.435423895717 -0.112458804622 -0.452680744231 -0.112461438403 -0.469937779009 -0.112464498729 -0.487195454538 -0.112467959523 -0.504453413189 -0.112469715997 -0.523675635457 -0.11246787943 -0.542899519205 -0.112464446574 -0.560157626867 -0.112461384386 -0.577415093779 -0.112458748743 -0.594672307372 -0.112456513569 -0.611928954721 -0.112454677001 -0.629185527563 -0.112453240901 -0.646441653371 -0.112452255562 -0.663697749376 -0.112451668829 -0.68095356226 -0.112451482564 -0.698209479451 -0.112451696769 -0.715465188026 -0.112452283501 -0.732721164823 -0.112453293055 -0.749977096915 -0.112454731018 -0.767233386636 -0.112456569448 -0.78448972106 -0.112458804622 -0.801746577025 -0.112461438403 -0.819003611803 -0.112464472652 -0.836261257529 -0.112467905507 -0.853519231081 -0.112469688058 -0.872741475701 -0.11246787943 -0.891965344548 -0.112464446574 -0.909223496914 -0.112461384386 -0.926480978727 -0.112458748743 -0.943738162517 -0.112456513569 -0.960994809866 -0.112454677001 -0.978251352907 -0.112453240901 -0.995507493615 -0.112452255562 -1.01276358962 -0.112451668829 -1.0300193727 -0.112451482564 -1.04727530479 -0.112451696769 -1.06453102827 -0.112452283501 -1.08178701997 -0.112453293055 -1.09904298186 -0.112454731018 -1.11629927158 -0.112456569448 -1.13355562091 -0.112458804622 -1.15081247687 -0.112461438403 -1.16806948185 -0.112464472652 -1.18532714248 -0.112467933446 -1.20258513093 -0.112469715997 -1.22180736065 -0.11246787943 -1.2410311997 -0.112464446574 -1.25828933716 -0.112461384386 -1.27554681897 -0.112458748743 -1.29280400276 -0.112456513569 -1.31006067991 -0.112454677001 -1.32731723785 -0.112453240901 -1.34457334876 -0.112452255562 -1.36182945967 -0.112451668829 -1.37908524275 -0.112451482564 -1.39634114504 -0.112451696769 -1.41359689832 -0.112452283501 -1.43085289001 -0.112453293055 -1.44810879231 -0.112454731018 -1.46536508202 -0.112456569448 -1.48262143135 -0.112458804622 -1.49987828732 -0.112461438403 -1.5171353221 -0.112464472652 -1.53439298272 -0.112467933446 -1.55165097117 -0.112469715997 -1.57087320089 -0.11246787943 -1.59009706974 -0.112464446574 -1.6073551774 -0.112461384386 -1.62461265921 -0.112458748743 -1.64186990261 -0.112456513569 -1.65912654996 -0.112454677001 -1.67638304829 -0.112453240901 -1.6936391592 -0.112452255562 -1.71089529991 -0.112451668829 -1.72815111279 -0.112451482564 -1.74540704489 -0.112451670691 -1.76266273856 -0.112452257424 -1.77991870046 -0.112453293055 -1.79717466235 -0.112454731018 -1.81443095207 -0.112456569448 -1.8316873014 -0.112458804622 -1.84894415736 -0.112461438403 -1.86620119214 -0.112464472652 -1.88345885277 -0.112467905507 -1.90071681142 -0.112469688058 -1.91993904114 -0.11246785149 -1.93916290999 -0.112464418635 -1.95642104745 -0.112461384386 -1.97367852926 -0.112458748743 -1.99093574286 -0.112456513569 -2.00819244981 -0.112454677001 -2.02544897795 -0.112453240901 -2.04270499945 -0.112452255562 -2.05996114016 -0.112451668829 -2.07721698284 -0.112451482564 -2.09447288513 -0.112451696769 -2.11172860861 -0.112452283501 -2.1289845705 -0.112453293055 -2.1462405324 -0.112454731018 -2.16349685192 -0.112456569448 -2.18075317144 -0.112458804622 -2.19801002741 -0.112461438403 -2.21526706219 -0.112464472652 -2.23252469301 -0.112467933446 -2.24978268146 -0.112469715997 -2.26900494099 -0.11246785149 -2.28822880984 -0.112464418635 -2.3054869175 -0.112461384386 -2.32274436951 -0.112458748743 -2.3400015831 -0.112456513569 -2.35725826025 -0.112454677001 -2.37451475859 -0.112453240901 -2.39177083969 -0.112452255562 -2.4090269804 -0.112451668829 -2.42628276348 -0.112451482564 -2.44353866577 -0.112451696769 -2.46079444885 -0.112452283501 -2.47805047035 -0.112453293055 -2.49530637264 -0.112454731018 -2.51256269216 -0.112456569448 -2.52981907129 -0.112458804622 -2.54707586765 -0.112461438403 -2.56433290243 -0.112464472652 -2.58159059286 -0.112467933446 -2.59884852171 -0.112469715997 -2.61807072163 -0.11246787943 -2.63729459047 -0.112464446574 -2.65455275774 -0.112461384386 -2.67181026936 -0.112458748743 -2.68906742335 -0.112456513569 -2.70632404089 -0.112454677001 -2.72358065844 -0.112453240901 -2.74083679915 -0.112452255562 -2.75809282065 -0.112451668829 -2.77534860373 -0.112451482564 -2.79260456562 -0.112451696769 -2.80986028909 -0.112452283501 -2.8271163106 -0.112453293055 -2.84437221289 -0.112454731018 -2.8616284728 -0.112456569448 -2.87888485193 -0.112458804622 -2.8961417079 -0.112461438403 -2.91339874268 -0.112464472652 -2.9306563735 -0.112467905507 -2.94791430235 -0.112469688058 -2.96713650227 -0.11246787943 -2.98636043072 -0.112464446574 -3.00361859799 -0.112461384386 -3.02087605 -0.112458748743 -3.03813326359 -0.112456513569 -3.05538988113 -0.112454677001 -3.07264643908 -0.112453240901 -3.08990257979 -0.112452255562 -3.10715866089 -0.112451668829 -3.12441450358 -0.112451482564 --3.14151486953 -0.112451696769 --3.12425917387 -0.112452283501 --3.10700315237 -0.112453293055 --3.08974725008 -0.112454731018 --3.07249099016 -0.112456569448 --3.05523461103 -0.112458804622 --3.03797775507 -0.112461438403 --3.02072072029 -0.112464472652 --3.00346308946 -0.112467905507 --2.98620516062 -0.112469688058 --2.9669829011 -0.11246787943 --2.94775897264 -0.112464446574 --2.93050086498 -0.112461384386 --2.91324341297 -0.112458748743 --2.89598613977 -0.112456513569 --2.87872946262 -0.112454677001 --2.86147296429 -0.112453240901 --2.84421688318 -0.112452255562 --2.82696080208 -0.112451668829 --2.80970495939 -0.112451482564 --2.7924490571 -0.112451696769 --2.77519339323 -0.112452283501 --2.75793737173 -0.112453293055 --2.74068135023 -0.112454731018 --2.72342509032 -0.112456569448 --2.70616877079 -0.112458804622 --2.68891191482 -0.112461438403 --2.67165493965 -0.112464498729 --2.65439724922 -0.112467959523 --2.63713920116 -0.112469715997 --2.61791694164 -0.11246787943 --2.5986931324 -0.112464446574 --2.58143502474 -0.112461384386 --2.56417751312 -0.112458748743 --2.54692029953 -0.112456513569 --2.52966362238 -0.112454677001 --2.51240712404 -0.112453240901 --2.49515104294 -0.112452255562 --2.47789490223 -0.112451668829 --2.46063911915 -0.112451482564 --2.44338321686 -0.112451696769 --2.42612743378 -0.112452283501 --2.40887147188 -0.112453293055 --2.39161556959 -0.112454731018 --2.37435925007 -0.112456569448 --2.35710293054 -0.112458804622 --2.33984607458 -0.112461438403 --2.3225890398 -0.112464472652 --2.30533140898 -0.112467905507 --2.28807342053 -0.112469688058 --2.268851161 -0.11246787943 --2.24962729216 -0.112464446574 --2.23236918449 -0.112461384386 --2.21511167288 -0.112458748743 --2.19785445928 -0.112456513569 --2.18059784174 -0.112454677001 --2.1633412838 -0.112453240901 --2.14608514309 -0.112452255562 --2.12882906198 -0.112451668829 --2.1115732789 -0.112451482564 --2.09431731701 -0.112451696769 --2.07706159353 -0.112452283501 --2.05980563164 -0.112453293055 --2.04254972935 -0.112454731018 --2.02529340983 -0.112456569448 --2.0080370307 -0.112458804622 --1.99078020454 -0.112461438403 --1.97352319956 -0.112464472652 --1.95626550913 -0.112467933446 --1.93900752068 -0.112469715997 --1.91978532076 -0.11246787943 --1.90056145191 -0.112464446574 --1.88330334425 -0.112461384386 --1.86604586244 -0.112458748743 --1.84878861904 -0.112456513569 --1.83153194189 -0.112454677001 --1.81427538395 -0.112453240901 --1.79701930284 -0.112452255562 --1.77976322174 -0.112451668829 --1.76250740886 -0.112451482564 --1.74525147677 -0.112451696769 --1.72799575329 -0.112452283501 --1.71073976159 -0.112453293055 --1.6934838295 -0.112454731018 --1.67622756958 -0.112456569448 --1.65897122026 -0.112458804622 --1.64171433449 -0.112461438403 --1.62445729971 -0.112464472652 --1.60719966888 -0.112467933446 --1.58994171023 -0.112469715997 --1.57071948051 -0.11246787943 --1.55149558186 -0.112464446574 --1.5342374444 -0.112461384386 --1.51697999239 -0.112458748743 --1.4997227788 -0.112456513569 --1.48246613145 -0.112454677001 --1.46520960331 -0.112453240901 --1.4479534924 -0.112452255562 --1.43069738149 -0.112451668829 --1.41344159841 -0.112451482564 --1.39618566632 -0.112451670691 --1.37892991304 -0.112452257424 --1.36167392135 -0.112453293055 --1.34441801906 -0.112454731018 --1.32716172934 -0.112456569448 --1.30990535021 -0.112458804622 --1.29264852405 -0.112461438403 --1.27539148927 -0.112464472652 --1.25813379884 -0.112467905507 --1.24087581038 -0.112469688058 --1.22165361047 -0.11246785149 --1.20242977142 -0.112464418635 --1.18517160416 -0.112461384386 --1.16791412234 -0.112458748743 --1.15065693856 -0.112456513569 --1.1334002614 -0.112454677001 --1.11614370346 -0.112453240901 --1.09888759256 -0.112452255562 --1.08163151145 -0.112451668829 --1.06437572837 -0.112451482564 --1.04711979628 -0.112451696769 --1.0298640728 -0.112452283501 --1.0126080811 -0.112453293055 --0.99535214901 -0.112454731018 --0.978095844388 -0.112456569448 --0.960839480162 -0.112458804622 --0.943582639098 -0.112461438403 --0.926325604319 -0.112464472652 --0.909067943692 -0.112467933446 --0.891809970141 -0.112469715997 --0.872587755323 -0.11246785149 --0.853363886475 -0.112464418635 --0.836105749011 -0.112461384386 --0.818848282099 -0.112458748743 --0.801591068506 -0.112456513569 --0.784334421158 -0.112454677001 --0.767077878118 -0.112453240901 --0.749821767211 -0.112452255562 --0.732565671206 -0.112451668829 --0.715309873224 -0.112451482564 --0.698053956032 -0.112451696769 --0.680798217654 -0.112452283501 --0.663542211056 -0.112453293055 --0.646286278963 -0.112454731018 --0.629030004144 -0.112456569448 --0.611773654818 -0.112458804622 --0.594516813755 -0.112461438403 --0.577259764075 -0.112464472652 --0.560002073646 -0.112467933446 --0.542744114995 -0.112469715997 --0.523521915078 -0.11246787943 --0.504298046231 -0.112464446574 --0.487039901316 -0.112461384386 --0.469782434404 -0.112458748743 --0.452525220811 -0.112456513569 --0.435268558562 -0.112454677001 --0.418012015522 -0.112453240901 --0.400755912066 -0.112452255562 --0.383499830961 -0.112451668829 --0.366244018078 -0.112451482564 --0.348988093436 -0.112451696769 --0.33173237741 -0.112452283501 --0.314476385713 -0.112453293055 --0.29722046107 -0.112454731018 --0.279964163899 -0.112456569448 --0.262707814574 -0.112458804622 --0.245450962335 -0.112461438403 --0.228193912655 -0.112464472652 --0.210936252028 -0.112467905507 --0.193678285926 -0.112469688058 --0.174456067383 -0.129828693345 --0.155224822461 -0.129824718461 --0.13796665892 -0.129821188748 --0.120709164068 -0.129818152636 --0.103451915085 -0.129815589636 --0.0861952286214 -0.129813499749 --0.068938662298 -0.129811851308 --0.0516825225204 -0.129810700193 --0.0344263850711 -0.129810018465 --0.0171705577523 -0.129809807986 -8.53934325275e-05 -0.129810044542 -0.0173411606811 -0.129810724407 -0.0345971756615 -0.129811899736 -0.0518531296402 -0.129813548178 -0.069109457545 -0.129815643653 -0.0863658487797 -0.12981823273 -0.103622732684 -0.129821293056 -0.120879802853 -0.129824800417 -0.138137493283 -0.129828775302 -0.155395489186 -0.129830813036 -0.174617428332 -0.129828693345 -0.193841025233 -0.129824718461 -0.2110991925 -0.129821214825 -0.228356685489 -0.129818178713 -0.24561394006 -0.129815589636 -0.262870639563 -0.129813499749 -0.280127197504 -0.129811851308 -0.297383330763 -0.129810700193 -0.314639464021 -0.129810018465 -0.331895276904 -0.129809781909 -0.349151238799 -0.129810018465 -0.36640701443 -0.129810724407 -0.383663021028 -0.129811899736 -0.400918975472 -0.129813548178 -0.418175302446 -0.129815643653 -0.435431696475 -0.12981823273 -0.452688582241 -0.129821293056 -0.469945646823 -0.129824800417 -0.487203344703 -0.129828803242 -0.504461348057 -0.129830840975 -0.523683294654 -0.129828693345 -0.54290689528 -0.129824718461 -0.560165047646 -0.129821214825 -0.577422529459 -0.129818178713 -0.594679772854 -0.129815589636 -0.611936464906 -0.129813499749 -0.629193037748 -0.129811851308 -0.646449193358 -0.129810700193 -0.663705319166 -0.129810018465 -0.680961146951 -0.129809781909 -0.698217108846 -0.129810018465 -0.715472862124 -0.129810724407 -0.732728883624 -0.129811899736 -0.749984845519 -0.129813548178 -0.767241150141 -0.129815643653 -0.784497514367 -0.12981823273 -0.801754415035 -0.129821293056 -0.819011494517 -0.129824800417 -0.836269170046 -0.129828775302 -0.853527158499 -0.129830813036 -0.872749105096 -0.129828693345 -0.891972705722 -0.129824718461 -0.90923088789 -0.129821214825 -0.926488384605 -0.129818178713 -0.943745627999 -0.129815589636 -0.961002320051 -0.129813499749 -0.978258863092 -0.129811851308 -0.9955149889 -0.129810700193 -1.01277112961 -0.129810018465 -1.03002697229 -0.129809781909 -1.04728296399 -0.129810018465 -1.06453874707 -0.129810724407 -1.08179473877 -0.129811899736 -1.09905070066 -0.129813548178 -1.11630702019 -0.129815643653 -1.13356339931 -0.12981823273 -1.15082028508 -0.129821293056 -1.16807734966 -0.129824800417 -1.18533504009 -0.129828803242 -1.20259305834 -0.129830840975 -1.22181501984 -0.129828693345 -1.24103859067 -0.129824718461 -1.25829675793 -0.129821214825 -1.27555423975 -0.129818178713 -1.29281145334 -0.129815589636 -1.31006816029 -0.129813499749 -1.32732474804 -0.129811851308 -1.34458088875 -0.129810700193 -1.36183702945 -0.129810018465 -1.37909284234 -0.129809781909 -1.39634877443 -0.129810018465 -1.41360455752 -0.129810724407 -1.43086057901 -0.129811899736 -1.44811651111 -0.129813548178 -1.46537286043 -0.129815643653 -1.48262926936 -0.12981823273 -1.49988612533 -0.129821293056 -1.51714318991 -0.129824800417 -1.53440091014 -0.129828803242 -1.55165889859 -0.129830840975 -1.57088083029 -0.129828693345 -1.59010443092 -0.129824718461 -1.60736256838 -0.129821214825 -1.62462007999 -0.129818178713 -1.64187735319 -0.129815589636 -1.65913406014 -0.129813499749 -1.67639058828 -0.129811851308 -1.69364669919 -0.129810700193 -1.7109028697 -0.129810018465 -1.72815871238 -0.129809781909 -1.74541467428 -0.129810018465 -1.76267042756 -0.129810724407 -1.77992641926 -0.129811899736 -1.79718238115 -0.129813548178 -1.81443870068 -0.129815643653 -1.83169510961 -0.12981823273 -1.84895199537 -0.129821293056 -1.86620903015 -0.129824800417 -1.88346672058 -0.129828775302 -1.90072470903 -0.129830813036 -1.91994667053 -0.129828693345 -1.93917030096 -0.129824718461 -1.95642846823 -0.129821214825 -1.97368595004 -0.129818178713 -1.99094319343 -0.129815589636 -2.00819993019 -0.129813499749 -2.02545648813 -0.129811851308 -2.04271256924 -0.129810700193 -2.05996870995 -0.129810018465 -2.07722455263 -0.129809781909 -2.09448051452 -0.129810018465 -2.111736238 -0.129810724407 -2.1289922595 -0.129811899736 -2.146248281 -0.129813548178 -2.16350460053 -0.129815643653 -2.18076097965 -0.12981823273 -2.19801789522 -0.129821293056 -2.21527493 -0.129824800417 -2.23253256083 -0.129828803242 -2.24979060888 -0.129830840975 -2.26901257038 -0.129828693345 -2.28823614121 -0.129824718461 -2.30549430847 -0.129821214825 -2.32275176048 -0.129818178713 -2.34000903368 -0.129815589636 -2.35726577043 -0.129813499749 -2.37452226877 -0.129811851308 -2.39177840948 -0.129810700193 -2.40903455019 -0.129810018465 -2.42629039287 -0.129809781909 -2.44354635477 -0.129810018465 -2.46080207825 -0.129810724407 -2.47805809975 -0.129811899736 -2.49531406164 -0.129813548178 -2.51257044077 -0.129815643653 -2.5298268199 -0.12981823273 -2.54708367586 -0.129821293056 -2.56434077025 -0.129824800417 -2.58159846068 -0.129828803242 -2.59885644913 -0.129830840975 -2.61807835102 -0.129828693345 -2.63730192184 -0.129824718461 -2.65456014872 -0.129821214825 -2.67181766033 -0.129818178713 -2.68907487392 -0.129815589636 -2.70633155107 -0.129813499749 -2.72358816862 -0.129811851308 -2.74084430933 -0.129810700193 -2.75810039043 -0.129810018465 -2.77535623312 -0.129809781909 -2.79261219501 -0.129810018465 -2.80986797809 -0.129810724407 -2.82712399959 -0.129811899736 -2.84437990189 -0.129813548178 -2.86163622141 -0.129815643653 -2.87889260054 -0.12981823273 -2.8961494565 -0.129821293056 -2.91340655089 -0.129824800417 -2.93066430092 -0.129828775302 -2.94792228937 -0.129830813036 -2.96714419126 -0.129828693345 -2.98636782169 -0.129824718461 -3.00362598896 -0.129821188748 -3.02088350058 -0.129818152636 -3.03814071417 -0.129815589636 -3.05539733171 -0.129813499749 -3.07265394926 -0.129811851308 -3.08991014958 -0.129810700193 -3.10716629028 -0.129810018465 -3.12442213297 -0.129809807986 --3.14150724013 -0.129810044542 --3.12425148487 -0.129810724407 --3.10699546337 -0.129811899736 --3.08973956108 -0.129813548178 --3.07248324156 -0.129815643653 --3.05522680283 -0.12981823273 --3.03796994686 -0.129821293056 --3.02071285248 -0.129824800417 --3.00345510244 -0.129828775302 --2.9861971736 -0.129830813036 --2.9669752121 -0.129828693345 --2.94775158167 -0.129824718461 --2.93049347401 -0.129821214825 --2.91323596239 -0.129818178713 --2.8959786892 -0.129815589636 --2.87872195244 -0.129813499749 --2.8614653945 -0.129811851308 --2.84420931339 -0.129810700193 --2.82695317269 -0.129810018465 --2.80969733 -0.129809781909 --2.7924413681 -0.129810018465 --2.77518564463 -0.129810724407 --2.75792962312 -0.129811899736 --2.74067360163 -0.129813548178 --2.72341734171 -0.129815643653 --2.70616096258 -0.12981823273 --2.68890404701 -0.129821293056 --2.67164701223 -0.129824800417 --2.6543893218 -0.129828803242 --2.63713127375 -0.129830840975 --2.61790931225 -0.129828693345 --2.59868574142 -0.129824718461 --2.58142757416 -0.129821214825 --2.56417012215 -0.129818178713 --2.54691284895 -0.129815589636 --2.5296561122 -0.129813499749 --2.51239961386 -0.129811851308 --2.49514347315 -0.129810700193 --2.47788733244 -0.129810018465 --2.46063154936 -0.129809781909 --2.44337558746 -0.129810018465 --2.42611980438 -0.129810724407 --2.40886378288 -0.129811899736 --2.39160782099 -0.129813548178 --2.37435150147 -0.129815643653 --2.35709512234 -0.12981823273 --2.33983820677 -0.129821293056 --2.32258117199 -0.129824800417 --2.30532354116 -0.129828775302 --2.28806549311 -0.129830813036 --2.26884353161 -0.129828693345 --2.24961996079 -0.129824718461 --2.23236179352 -0.129821214825 --2.2151042819 -0.129818178713 --2.19784700871 -0.129815589636 --2.18059033156 -0.129813499749 --2.16333383322 -0.129811851308 --2.14607769251 -0.129810700193 --2.1288214922 -0.129810018465 --2.11156564951 -0.129809781909 --2.09430968762 -0.129810018465 --2.07705390453 -0.129810724407 --2.05979794264 -0.129811899736 --2.04254204035 -0.129813548178 --2.02528566122 -0.129815643653 --2.00802925229 -0.12981823273 --1.99077236652 -0.129821293056 --1.97351530194 -0.129824800417 --1.95625761151 -0.129828803242 --1.93899962306 -0.129830840975 --1.91977769137 -0.129828693345 --1.90055409074 -0.129824718461 --1.88329595327 -0.129821214825 --1.86603844166 -0.129818178713 --1.84878116846 -0.129815589636 --1.83152446151 -0.129813499749 --1.81426787376 -0.129811851308 --1.79701176286 -0.129810700193 --1.77975565195 -0.129810018465 --1.76249980927 -0.129809781909 --1.74524384737 -0.129810018465 --1.7279880941 -0.129810724407 --1.7107320726 -0.129811899736 --1.6934761107 -0.129813548178 --1.67621982098 -0.129815643653 --1.65896341204 -0.12981823273 --1.64170649647 -0.129821293056 --1.6244494617 -0.129824800417 --1.60719180107 -0.129828803242 --1.58993378282 -0.129830840975 --1.57071182132 -0.129828693345 --1.55148822069 -0.129824718461 --1.53423005342 -0.129821214825 --1.51697257161 -0.129818178713 --1.49971532822 -0.129815589636 --1.48245865107 -0.129813499749 --1.46520209313 -0.129811851308 --1.44794592261 -0.129810700193 --1.4306897819 -0.129810018465 --1.41343396902 -0.129809781909 --1.39617800713 -0.129810018465 --1.37892222405 -0.129810724407 --1.36166620255 -0.129811899736 --1.34441027046 -0.129813548178 --1.32715395093 -0.129815643653 --1.3098975718 -0.12981823273 --1.29264068604 -0.129821293056 --1.27538359165 -0.129824800417 --1.25812590122 -0.129828775302 --1.24086791277 -0.129830813036 --1.22164598107 -0.129828693345 --1.20242241025 -0.129824718461 --1.18516421318 -0.129821214825 --1.16790667176 -0.129818178713 --1.15064945817 -0.129815589636 --1.13339278102 -0.129813499749 --1.11613619328 -0.129811851308 --1.09888005257 -0.129810700193 --1.08162394166 -0.129810018465 --1.06436812878 -0.129809781909 --1.04711216688 -0.129810018465 --1.02985641361 -0.129810724407 --1.0126003921 -0.129811899736 --0.995344430209 -0.129813548178 --0.978088095784 -0.129815643653 --0.960831686854 -0.12981823273 --0.943574801087 -0.129821293056 --0.926317736507 -0.129824800417 --0.909060060978 -0.129828803242 --0.891802057624 -0.129830840975 --0.872580096125 -0.129828693345 --0.853356510401 -0.129824718461 --0.836098372936 -0.129821214825 --0.81884086132 -0.129818178713 --0.801583588123 -0.129815589636 --0.784326910973 -0.129813499749 --0.767070367933 -0.129811851308 --0.749814227223 -0.129810700193 --0.732558086514 -0.129810018465 --0.71530225873 -0.129809781909 --0.698046311736 -0.129810018465 --0.680790558457 -0.129810724407 --0.663534536957 -0.129811899736 --0.646278560161 -0.129813548178 --0.629022240639 -0.129815643653 --0.611765861511 -0.12981823273 --0.594508975744 -0.129821293056 --0.577251911163 -0.129824800417 --0.559994190931 -0.129828803242 --0.542736187577 -0.129830840975 --0.523514270783 -0.129828693345 --0.504290677607 -0.129824718461 --0.48703250289 -0.129821214825 --0.469775013626 -0.129818178713 --0.452517770231 -0.129815589636 --0.435261078179 -0.129813499749 --0.418004505336 -0.129811851308 --0.400748364627 -0.129810700193 --0.38349224627 -0.129810018465 --0.366236411035 -0.129809781909 --0.348980456591 -0.129810018465 --0.331724695861 -0.129810724407 --0.314468681812 -0.129811899736 --0.297212734819 -0.129813548178 --0.279956392944 -0.129815643653 --0.262700006366 -0.12981823273 --0.245443131775 -0.129821293056 --0.228186052293 -0.129824800417 --0.210928361863 -0.129828775302 --0.193670362234 -0.129830813036 --0.174448419362 -0.147170990706 --0.155217468739 -0.147166490555 --0.13795927912 -0.147162508219 --0.120701752603 -0.147159062326 --0.103444473818 -0.147156156599 --0.0861877519638 -0.147153794766 --0.0689311530441 -0.147151943296 --0.0516749834642 -0.147150631994 --0.0344188166782 -0.147149834782 --0.0171629583929 -0.147149577737 -9.3024922535e-05 -0.147149860859 -0.0173488226719 -0.147150654346 -0.0346048683859 -0.147151991725 -0.051860854961 -0.147153869271 -0.0691172145307 -0.147156234831 -0.0863736346364 -0.147159140557 -0.103630550206 -0.147162612527 -0.120887650177 -0.147166598588 -0.138145372272 -0.147171098739 -0.155403401702 -0.147173412144 -0.174625057727 -0.147170990706 -0.19384836778 -0.147166490555 -0.211106568575 -0.147162534297 -0.228364098817 -0.147159088403 -0.245621375739 -0.147156156599 -0.262878105044 -0.147153794766 -0.280134700239 -0.147151943296 -0.297390863299 -0.147150631994 -0.314647033811 -0.147149834782 -0.331902883947 -0.147149577737 -0.349158860743 -0.147149860859 -0.366414666176 -0.147150654346 -0.383670717478 -0.147151991725 -0.400926701725 -0.147153869271 -0.418183065951 -0.147156234831 -0.435439482331 -0.147159140557 -0.452696397901 -0.147162612527 -0.469953499734 -0.147166598588 -0.487211219966 -0.147171098739 -0.504469260573 -0.147173412144 -0.523690924048 -0.147170990706 -0.542914241552 -0.147166490555 -0.56017242372 -0.147162534297 -0.577429950237 -0.147159088403 -0.594687238335 -0.147156156599 -0.611943945289 -0.147153794766 -0.629200533032 -0.147151943296 -0.646456718445 -0.147150631994 -0.663712888956 -0.147149834782 -0.680968731642 -0.14714955166 -0.698224708438 -0.147149834782 -0.715480521321 -0.147150654346 -0.732736587524 -0.147151991725 -0.749992579222 -0.147153869271 -0.767248928547 -0.147156234831 -0.784505322575 -0.147159140557 -0.801762238145 -0.147162612527 -0.819019347429 -0.147166598588 -0.836277067661 -0.147171098739 -0.853535085917 -0.147173412144 -0.872756749392 -0.147170990706 -0.891980066896 -0.147166490555 -0.909238263965 -0.147162534297 -0.926495790482 -0.147159088403 -0.943753063679 -0.147156156599 -0.961009800434 -0.147153794766 -0.978266388178 -0.147151943296 -0.995522528889 -0.147150631994 -1.0127786994 -0.147149834782 -1.03003460169 -0.14714955166 -1.04729062319 -0.147149834782 -1.06454640627 -0.147150654346 -1.08180242777 -0.147151991725 -1.09905841946 -0.147153869271 -1.11631476879 -0.147156234831 -1.13357117772 -0.147159140557 -1.15082809329 -0.147162612527 -1.16808518767 -0.147166598588 -1.1853429079 -0.147171098739 -1.20260095596 -0.147173412144 -1.22182264924 -0.147170990706 -1.24104595184 -0.147166490555 -1.25830411911 -0.147162534297 -1.27556163073 -0.147159088403 -1.29281890392 -0.147156156599 -1.31007564068 -0.147153794766 -1.32733225823 -0.147151943296 -1.34458842874 -0.147150631994 -1.36184456944 -0.147149834782 -1.37910041213 -0.147149577737 -1.39635640383 -0.147149860859 -1.41361221671 -0.147150654346 -1.43086826801 -0.147151991725 -1.44812422991 -0.147153869271 -1.46538060904 -0.147156234831 -1.48263704777 -0.147159140557 -1.49989393353 -0.147162612527 -1.51715105772 -0.147166598588 -1.53440880775 -0.147171098739 -1.55166682601 -0.147173412144 -1.57088845968 -0.147170990706 -1.59011176229 -0.147166490555 -1.60736995935 -0.147162534297 -1.62462750077 -0.147159088403 -1.64188477397 -0.147156156599 -1.65914151073 -0.147153794766 -1.67639809847 -0.147151943296 -1.69365423918 -0.147150631994 -1.71091043949 -0.147149834782 -1.72816631198 -0.147149577737 -1.74542230367 -0.147149860859 -1.76267808676 -0.147150654346 -1.77993410826 -0.147151991725 -1.79719009996 -0.147153869271 -1.81444644928 -0.147156234831 -1.83170288801 -0.147159140557 -1.84895983338 -0.147162612527 -1.86621689797 -0.147166598588 -1.88347458839 -0.147171098739 -1.90073260665 -0.147173412144 -1.91995429992 -0.147170990706 -1.93917766213 -0.147166490555 -1.9564358592 -0.147162534297 -1.97369337082 -0.147159088403 -1.99095064402 -0.147156156599 -2.00820741057 -0.147153794766 -2.02546399832 -0.147151943296 -2.04272013903 -0.147150631994 -2.05997627973 -0.147149834782 -2.07723212242 -0.147149577737 -2.09448814392 -0.147149860859 -2.111743927 -0.147150654346 -2.12900000811 -0.147151991725 -2.14625602961 -0.147153869271 -2.16351228953 -0.147156234831 -2.18076866865 -0.147159140557 -2.19802564382 -0.147162612527 -2.21528273821 -0.147166598588 -2.23254042864 -0.147171098739 -2.2497985363 -0.147173412144 -2.26902019977 -0.147170990706 -2.28824347258 -0.147166490555 -2.30550169945 -0.147162534297 -2.32275921106 -0.147159088403 -2.34001648426 -0.147156156599 -2.35727322102 -0.147153794766 -2.37452977896 -0.147151943296 -2.39178591967 -0.147150631994 -2.40904211998 -0.147149834782 -2.42629802227 -0.14714955166 -2.44355404377 -0.147149834782 -2.46080976725 -0.147150654346 -2.47806578875 -0.147151991725 -2.49532181025 -0.147153869271 -2.51257818938 -0.147156234831 -2.52983462811 -0.147159140557 -2.54709148407 -0.147162612527 -2.56434857846 -0.147166598588 -2.58160632849 -0.147171098739 -2.59886437654 -0.147173412144 -2.61808604002 -0.147170990706 -2.63730931282 -0.147166490555 -2.65456753969 -0.147162534297 -2.67182505131 -0.147159088403 -2.6890823245 -0.147156156599 -2.70633906126 -0.147153794766 -2.72359567881 -0.147151943296 -2.74085181951 -0.147150631994 -2.75810796022 -0.147149834782 -2.77536386251 -0.147149577737 -2.79261982441 -0.147149860859 -2.8098756671 -0.147150654346 -2.8271316886 -0.147151991725 -2.84438759089 -0.147153869271 -2.86164397001 -0.147156234831 -2.87890040874 -0.147159140557 -2.89615732431 -0.147162612527 -2.9134144187 -0.147166598588 -2.93067216873 -0.147171098739 -2.94793021679 -0.147173412144 -2.96715188026 -0.147170990706 -2.98637521267 -0.147166490555 -3.00363337994 -0.147162508219 -3.02089089155 -0.147159062326 -3.03814816475 -0.147156156599 -3.0554048419 -0.147153794766 -3.07266145945 -0.147151943296 -3.08991771936 -0.147150631994 -3.10717386007 -0.147149834782 -3.12442970276 -0.147149577737 --3.14149961074 -0.147149860859 --3.12424379587 -0.147150654346 --3.10698777437 -0.147151991725 --3.08973187208 -0.147153869271 --3.07247549295 -0.147156234831 --3.05521899462 -0.147159140557 --3.03796207905 -0.147162612527 --3.02070498467 -0.147166598588 --3.00344723463 -0.147171098739 --2.98618924618 -0.147173412144 --2.9669675827 -0.147170990706 --2.9477442503 -0.147166490555 --2.93048608303 -0.147162534297 --2.91322857141 -0.147159088403 --2.89597129822 -0.147156156599 --2.87871450186 -0.147153794766 --2.86145788431 -0.147151943296 --2.8442017436 -0.147150631994 --2.82694560289 -0.147149834782 --2.80968976021 -0.147149577737 --2.79243373871 -0.147149860859 --2.77517795563 -0.147150654346 --2.75792193413 -0.147151991725 --2.74066591263 -0.147153869271 --2.7234095931 -0.147156234831 --2.70615321398 -0.147159140557 --2.6888962388 -0.147162612527 --2.67163914442 -0.147166598588 --2.65438145399 -0.147171098739 --2.63712340594 -0.147173412144 --2.61790174246 -0.147170990706 --2.59867841005 -0.147166490555 --2.58142024278 -0.147162534297 --2.56416273117 -0.147159088403 --2.54690539837 -0.147156156599 --2.52964866162 -0.147153794766 --2.51239210367 -0.147151943296 --2.49513596296 -0.147150631994 --2.47787982225 -0.147149834782 --2.46062397957 -0.14714955166 --2.44336795807 -0.147149834782 --2.42611217499 -0.147150654346 --2.40885609388 -0.147151991725 --2.39160007238 -0.147153869271 --2.37434369325 -0.147156234831 --2.35708731413 -0.147159140557 --2.33983045816 -0.147162612527 --2.32257330418 -0.147166598588 --2.30531555414 -0.147171098739 --2.28805750608 -0.147173412144 --2.26883584261 -0.147170990706 --2.24961256981 -0.147166490555 --2.23235440254 -0.147162534297 --2.21509689092 -0.147159088403 --2.19783961773 -0.147156156599 --2.18058288097 -0.147153794766 --2.16332632303 -0.147151943296 --2.14607018232 -0.147150631994 --2.12881392241 -0.147149834782 --2.11155802011 -0.14714955166 --2.09430205822 -0.147149834782 --2.07704621553 -0.147150654346 --2.05979019403 -0.147151991725 --2.04253429174 -0.147153869271 --2.02527791262 -0.147156234831 --2.00802144408 -0.147159140557 --1.99076452851 -0.147162612527 --1.97350743413 -0.147166598588 --1.9562497139 -0.147171098739 --1.93899169564 -0.147173412144 --1.91977006197 -0.147170990706 --1.90054675937 -0.147166490555 --1.8832885623 -0.147162534297 --1.86603102088 -0.147159088403 --1.84877371788 -0.147156156599 --1.83151698113 -0.147153794766 --1.81426039338 -0.147151943296 --1.79700425268 -0.147150631994 --1.77974808216 -0.147149834782 --1.76249220967 -0.147149577737 --1.74523621798 -0.147149860859 --1.72798040509 -0.147150654346 --1.71072438359 -0.147151991725 --1.6934684217 -0.147153869271 --1.67621207237 -0.147156234831 --1.65895563364 -0.147159140557 --1.64169868827 -0.147162612527 --1.62444159388 -0.147166598588 --1.60718390345 -0.147171098739 --1.5899258852 -0.147173412144 --1.57070419192 -0.147170990706 --1.55148085952 -0.147166490555 --1.53422266245 -0.147162534297 --1.51696515083 -0.147159088403 --1.49970787764 -0.147156156599 --1.48245117068 -0.147153794766 --1.46519458294 -0.147151943296 --1.44793838263 -0.147150631994 --1.43068221212 -0.147149834782 --1.41342633963 -0.147149577737 --1.39617037773 -0.147149860859 --1.37891459465 -0.147150654346 --1.36165851355 -0.147151991725 --1.34440252185 -0.147153869271 --1.32714617252 -0.147156234831 --1.30988976359 -0.147159140557 --1.29263284803 -0.147162612527 --1.27537575364 -0.147166598588 --1.25811803341 -0.147171098739 --1.24086001515 -0.147173412144 --1.22163838148 -0.147170990706 --1.20241507888 -0.147166490555 --1.18515685201 -0.147162534297 --1.16789928079 -0.147159088403 --1.15064203739 -0.147156156599 --1.13338533044 -0.147153794766 --1.11612868309 -0.147151943296 --1.09887251258 -0.147150631994 --1.08161637187 -0.147149834782 --1.06436052919 -0.147149577737 --1.04710453749 -0.147149860859 --1.02984872461 -0.147150654346 --1.0125926733 -0.147151991725 --0.995336696504 -0.147153869271 --0.97808034718 -0.147156234831 --0.960823908448 -0.147159140557 --0.943566992879 -0.147162612527 --0.926309913397 -0.147166598588 --0.909052193165 -0.147171098739 --0.891794145107 -0.147173412144 --0.872572466731 -0.147170990706 --0.853349164128 -0.147166490555 --0.83609098196 -0.147162534297 --0.818833440542 -0.147159088403 --0.801576137543 -0.147156156599 --0.78431943059 -0.147153794766 --0.767062872649 -0.147151943296 --0.749806702137 -0.147150631994 --0.732550516724 -0.147149834782 --0.715294659138 -0.14714955166 --0.69803866744 -0.147149834782 --0.680782884359 -0.147150654346 --0.66352686286 -0.147151991725 --0.64627084136 -0.147153869271 --0.629014477134 -0.147156234831 --0.611758068204 -0.147159140557 --0.594501152634 -0.147162612527 --0.577244058251 -0.147166598588 --0.559986323118 -0.147171098739 --0.542728304863 -0.147173412144 --0.523506641388 -0.147170990706 --0.504283316433 -0.147166490555 --0.487025126815 -0.147162534297 --0.469767600298 -0.147159088403 --0.452510327101 -0.147156156599 --0.435253612697 -0.147153794766 --0.417997002602 -0.147151943296 --0.40074083209 -0.147150631994 --0.38348467648 -0.147149834782 --0.366228811443 -0.147149577737 --0.348972819745 -0.147149860859 --0.331717014313 -0.147150654346 --0.314460977912 -0.147151991725 --0.297205001116 -0.147153869271 --0.27994863689 -0.147156234831 --0.262692220509 -0.147159140557 --0.245435301215 -0.147162612527 --0.228178195656 -0.147166598588 --0.210920479149 -0.147171098739 --0.193662449717 -0.147173412144 --0.174440782517 -0.164495002478 --0.155210133642 -0.164489995688 --0.137951906771 -0.164485577494 --0.120694350451 -0.16448173672 --0.103437045589 -0.164478473365 --0.0861802902073 -0.164475820958 --0.068923660554 -0.164473749697 --0.0516674593091 -0.164472285658 --0.0344112613238 -0.164471402764 --0.0171553723048 -0.16447109729 -0.000100642442703 -0.164471399039 -0.017356471857 -0.16447230801 -0.0346125499345 -0.164473801851 -0.0518685663119 -0.164475873113 -0.0691249566153 -0.164478525519 -0.0863814074546 -0.164481788874 -0.103638354689 -0.164485655725 -0.1208954826 -0.164490099996 -0.138153232634 -0.164495129139 -0.155411299318 -0.164497710765 -0.174632675946 -0.164495002478 -0.193855706602 -0.164489995688 -0.21111394465 -0.164485577494 -0.228371500969 -0.16448173672 -0.245628803968 -0.164478473365 -0.262885563076 -0.164475820958 -0.280142188073 -0.164473749697 -0.297398380935 -0.164472285658 -0.3146545887 -0.164471402764 -0.331910476088 -0.164471123367 -0.349166475236 -0.164471425116 -0.366422310472 -0.16447230801 -0.383678399027 -0.164473801851 -0.400934420526 -0.164475873113 -0.418190807104 -0.164478525519 -0.435447245836 -0.164481788874 -0.452704198658 -0.164485655725 -0.469961337745 -0.164490099996 -0.48721909523 -0.164495103062 -0.504477143287 -0.164497684688 -0.523698508739 -0.164495002478 -0.542921572924 -0.164489995688 -0.560179799795 -0.164485577494 -0.577437341213 -0.164481710643 -0.594694644212 -0.164478447288 -0.611951380968 -0.164475820958 -0.629208013415 -0.164473749697 -0.64646422863 -0.164472285658 -0.663720443845 -0.164471402764 -0.680976331234 -0.16447109729 -0.698232322931 -0.164471399039 -0.715488180518 -0.16447230801 -0.732744261622 -0.164473801851 -0.75000025332 -0.164475873113 -0.767256647349 -0.164478525519 -0.784513086081 -0.164481788874 -0.801770031452 -0.164485655725 -0.819027170539 -0.164490099996 -0.836284920573 -0.164495129139 -0.853542983532 -0.164497710765 -0.872764393688 -0.164495002478 -0.891987413168 -0.164489995688 -0.909245625138 -0.164485577494 -0.92650321126 -0.164481710643 -0.943760514259 -0.164478447288 -0.961017265916 -0.164475820958 -0.978273883462 -0.164473749697 -0.995530083776 -0.164472285658 -1.01278629899 -0.164471402764 -1.03004220128 -0.16447109729 -1.04729822278 -0.164471399039 -1.06455403566 -0.16447230801 -1.08181008697 -0.164473801851 -1.09906610846 -0.164475873113 -1.11632251739 -0.164478525519 -1.13357898593 -0.164481788874 -1.1508359313 -0.164485655725 -1.16809302568 -0.164490099996 -1.18535077572 -0.164495129139 -1.20260885358 -0.164497710765 -1.22183024883 -0.164495002478 -1.24105325341 -0.164489995688 -1.25831145048 -0.164485577494 -1.2755690217 -0.164481710643 -1.2928263545 -0.164478447288 -1.31008312106 -0.164475820958 -1.3273397386 -0.164473749697 -1.34459593892 -0.164472285658 -1.36185213924 -0.164471402764 -1.37910801172 -0.164471123367 -1.39636403322 -0.164471425116 -1.41361987591 -0.16447230801 -1.43087595701 -0.164473801851 -1.44813194871 -0.164475873113 -1.46538832784 -0.164478525519 -1.48264479637 -0.164481788874 -1.49990174174 -0.164485655725 -1.51715889573 -0.164490099996 -1.53441667557 -0.164495129139 -1.55167472362 -0.164497710765 -1.57089605927 -0.164495002478 -1.59011909365 -0.164489995688 -1.60737735033 -0.164485577494 -1.62463492155 -0.164481710643 -1.64189222455 -0.164478447288 -1.65914896131 -0.164475820958 -1.67640557885 -0.164473749697 -1.69366177917 -0.164472285658 -1.71091797948 -0.164471402764 -1.72817388177 -0.164471123367 -1.74542990327 -0.164471425116 -1.76268571615 -0.16447230801 -1.77994179726 -0.164473801851 -1.79719781876 -0.164475873113 -1.81445419788 -0.164478525519 -1.83171066642 -0.164481788874 -1.84896764159 -0.164485655725 -1.86622473597 -0.164490099996 -1.88348245621 -0.164495129139 -1.90074053407 -0.164497710765 -1.91996192932 -0.164495002478 -1.9391849637 -0.164489995688 -1.95644319058 -0.164485577494 -1.9737007618 -0.16448173672 -1.9909580648 -0.164478473365 -2.00821486115 -0.164475820958 -2.0254715085 -0.164473749697 -2.04272764921 -0.164472285658 -2.05998378992 -0.164471402764 -2.07723969221 -0.164471123367 -2.09449577332 -0.164471425116 -2.111751616 -0.16447230801 -2.12900769711 -0.164473801851 -2.14626371861 -0.164475873113 -2.16352003813 -0.164478525519 -2.18077647686 -0.164481788874 -2.19803345203 -0.164485655725 -2.21529054642 -0.164490099996 -2.23254829645 -0.164495103062 -2.24980640411 -0.164497684688 -2.26902776956 -0.164495002478 -2.28825080395 -0.164489995688 -2.30550909043 -0.164485577494 -2.32276666165 -0.164481710643 -2.34002393484 -0.164478447288 -2.3572806716 -0.164475820958 -2.37453728914 -0.164473749697 -2.39179342985 -0.164472285658 -2.40904968977 -0.164471402764 -2.42630565167 -0.16447109729 -2.44356167317 -0.164471399039 -2.46081745625 -0.16447230801 -2.47807347775 -0.164473801851 -2.49532949925 -0.164475873113 -2.51258593798 -0.164478525519 -2.52984243631 -0.164481788874 -2.54709929228 -0.164485655725 -2.56435638666 -0.164490099996 -2.5816141963 -0.164495129139 -2.59887230396 -0.164497710765 -2.61809372902 -0.164495002478 -2.6373167038 -0.164489995688 -2.65457487106 -0.164485577494 -2.67183244228 -0.164481710643 -2.68908977509 -0.164478447288 -2.70634651184 -0.164475820958 -2.72360312939 -0.164473749697 -2.7408593297 -0.164472285658 -2.75811553001 -0.164471402764 -2.77537143231 -0.164471123367 -2.79262745381 -0.164471425116 -2.80988329649 -0.16447230801 -2.8271393776 -0.164473801851 -2.84439533949 -0.164475873113 -2.86165171862 -0.164478525519 -2.87890821695 -0.164481788874 -2.89616519213 -0.164485655725 -2.91342234612 -0.164490099996 -2.93068003655 -0.164495103062 -2.9479380846 -0.164497684688 -2.96715950966 -0.164495002478 -2.98638254404 -0.164489995688 -3.00364077091 -0.164485577494 -3.02089828253 -0.16448173672 -3.03815555573 -0.164478473365 -3.05541229248 -0.164475820958 -3.07266896963 -0.164473749697 -3.08992522955 -0.164472285658 -3.10718137026 -0.164471402764 -3.12443727255 -0.16447109729 --3.14149198134 -0.164471399039 --3.12423616648 -0.16447230801 --3.10698008537 -0.164473801851 --3.08972412348 -0.164475873113 --3.07246774435 -0.164478525519 --3.05521124601 -0.164481788874 --3.03795427084 -0.164485655725 --3.02069711685 -0.164490099996 --3.00343942642 -0.164495129139 --2.98618137836 -0.164497710765 --2.96695995331 -0.164495002478 --2.94773691893 -0.164489995688 --2.93047869205 -0.164485577494 --2.91322118044 -0.16448173672 --2.89596384764 -0.164478473365 --2.87870705128 -0.164475820958 --2.86145043373 -0.164473749697 --2.84419423342 -0.164472285658 --2.82693809271 -0.164471402764 --2.80968219042 -0.164471123367 --2.79242616892 -0.164471425116 --2.77517032623 -0.16447230801 --2.75791424513 -0.164473801851 --2.74065822363 -0.164475873113 --2.7234018445 -0.164478525519 --2.70614546538 -0.164481788874 --2.6888884902 -0.164485655725 --2.67163133621 -0.164490099996 --2.65437358618 -0.164495103062 --2.63711553812 -0.164497684688 --2.61789417267 -0.164495002478 --2.59867107868 -0.164489995688 --2.58141285181 -0.164485577494 --2.56415534019 -0.164481710643 --2.54689800739 -0.164478447288 --2.52964121103 -0.164475820958 --2.51238459349 -0.164473749697 --2.49512845278 -0.164472285658 --2.47787225246 -0.164471402764 --2.46061635017 -0.16447109729 --2.44336032867 -0.164471399039 --2.42610448599 -0.16447230801 --2.40884840488 -0.164473801851 --2.39159238338 -0.164475873113 --2.37433600426 -0.164478525519 --2.35707956553 -0.164481788874 --2.33982264996 -0.164485655725 --2.32256549597 -0.164490099996 --2.30530768633 -0.164495129139 --2.28804963827 -0.164497710765 --2.26882821322 -0.164495002478 --2.24960517883 -0.164489995688 --2.23234701156 -0.164485577494 --2.21508944034 -0.164481710643 --2.19783216715 -0.164478447288 --2.18057543039 -0.164475820958 --2.16331881285 -0.164473749697 --2.14606261253 -0.164472285658 --2.12880635261 -0.164471402764 --2.11155045032 -0.16447109729 --2.09429442882 -0.164471399039 --2.07703858614 -0.16447230801 --2.05978250503 -0.164473801851 --2.04252654314 -0.164475873113 --2.02527016401 -0.164478525519 --2.00801366568 -0.164481788874 --1.99075675011 -0.164485655725 --1.97349962592 -0.164490099996 --1.95624184608 -0.164495129139 --1.93898379803 -0.164497710765 --1.91976246238 -0.164495002478 --1.900539428 -0.164489995688 --1.88328117132 -0.164485577494 --1.8660236001 -0.164481710643 --1.8487662673 -0.164478447288 --1.83150950074 -0.164475820958 --1.814252913 -0.164473749697 --1.79699674249 -0.164472285658 --1.77974054217 -0.164471402764 --1.76248463988 -0.164471123367 --1.74522861838 -0.164471425116 --1.72797277569 -0.16447230801 --1.71071669459 -0.164473801851 --1.69346070289 -0.164475873113 --1.67620432377 -0.164478525519 --1.65894785524 -0.164481788874 --1.64169088006 -0.164485655725 --1.62443372607 -0.164490099996 --1.60717600584 -0.164495129139 --1.58991798759 -0.164497710765 --1.57069659233 -0.164495002478 --1.55147352815 -0.164489995688 --1.53421530128 -0.164485577494 --1.51695775986 -0.164481710643 --1.49970045685 -0.164478447288 --1.4824437201 -0.164475820958 --1.46518707275 -0.164473749697 --1.44793087244 -0.164472285658 --1.43067467212 -0.164471402764 --1.41341876983 -0.164471123367 --1.39616277814 -0.164471425116 --1.37890693545 -0.16447230801 --1.36165085435 -0.164473801851 --1.34439483285 -0.164475873113 --1.32713842392 -0.164478525519 --1.30988198519 -0.164481788874 --1.29262506962 -0.164485655725 --1.27536794543 -0.164490099996 --1.25811016559 -0.164495129139 --1.24085208774 -0.164497710765 --1.22163072229 -0.164495002478 --1.20240771771 -0.164489995688 --1.18514949083 -0.164485577494 --1.16789191961 -0.16448173672 --1.15063461661 -0.164478473365 --1.13337785005 -0.164475820958 --1.11612120271 -0.164473749697 --1.09886500239 -0.164472285658 --1.08160883188 -0.164471402764 --1.06435295939 -0.164471123367 --1.04709690809 -0.164471425116 --1.02984106541 -0.16447230801 --1.0125849843 -0.164473801851 --0.995328962802 -0.164475873113 --0.978072598576 -0.164478525519 --0.960816144943 -0.164481788874 --0.943559199572 -0.164485655725 --0.926302090288 -0.164490099996 --0.909044325352 -0.164495103062 --0.891786247492 -0.164497684688 --0.872564867139 -0.164495002478 --0.853341832757 -0.164489995688 --0.836083605886 -0.164485577494 --0.818826049566 -0.164481710643 --0.801568731666 -0.164478447288 --0.784311980009 -0.164475820958 --0.767055362463 -0.164473749697 --0.749799177051 -0.164472285658 --0.732542976737 -0.164471402764 --0.715287074447 -0.16447109729 --0.698031038046 -0.164471399039 --0.680775225162 -0.16447230801 --0.66351917386 -0.164473801851 --0.64626313746 -0.164475873113 --0.629006743431 -0.164478525519 --0.611750289798 -0.164481788874 --0.594493359327 -0.164485655725 --0.577236220241 -0.164490099996 --0.559978455305 -0.164495129139 --0.542720407248 -0.164497710765 --0.523499011993 -0.164495002478 --0.504275985062 -0.164489995688 --0.487017765641 -0.164485577494 --0.469760194421 -0.164481710643 --0.452502891422 -0.164478447288 --0.435246147215 -0.164475820958 --0.417989499867 -0.164473749697 --0.400733299554 -0.164472285658 --0.383477121592 -0.164471402764 --0.366221226752 -0.164471123367 --0.348965205252 -0.164471425116 --0.331709377468 -0.16447230801 --0.314453303814 -0.164473801851 --0.297197274864 -0.164475873113 --0.279940888286 -0.164478525519 --0.262684457004 -0.164481788874 --0.245427500457 -0.164485655725 --0.228170357644 -0.164490099996 --0.21091260761 -0.164495103062 --0.193654544652 -0.164497684688 --0.174433160573 -0.181828252971 --0.155202664435 -0.181822739541 --0.137944396585 -0.181817848235 --0.120686808601 -0.181813623756 --0.103429475799 -0.181810043752 --0.0861726906151 -0.181807111949 --0.0689160292968 -0.181804828346 --0.0516597954556 -0.18180321902 --0.0344035653397 -0.181802250445 --0.0171476437245 -0.181801922619 -0.000108402222395 -0.18180224672 -0.0173642637674 -0.181803241372 -0.0346203744411 -0.1818048805 -0.0518764220178 -0.181807164103 -0.0691328430548 -0.181810095906 -0.0863893274218 -0.181813701987 -0.103646304458 -0.181817974895 -0.120903465897 -0.181822866201 -0.138161249459 -0.181828401983 -0.15541934222 -0.181831233203 -0.174640435726 -0.181828252971 -0.193863186985 -0.181822739541 -0.211121454835 -0.181817848235 -0.228379037231 -0.181813623756 -0.245636377484 -0.181810043752 -0.262893170118 -0.181807111949 -0.280149817467 -0.181804828346 -0.297406040132 -0.18180321902 -0.314662277699 -0.181802250445 -0.33191819489 -0.181801922619 -0.349174246192 -0.18180224672 -0.36643011123 -0.181803241372 -0.383686222136 -0.1818048805 -0.400942273438 -0.181807164103 -0.418198682368 -0.181810095906 -0.435455165804 -0.181813701987 -0.452712155878 -0.181817974895 -0.469969324767 -0.181822866201 -0.487227104604 -0.181828375906 -0.504485182464 -0.181831207126 -0.523706272244 -0.181828252971 -0.542929053306 -0.181822739541 -0.56018730998 -0.181817848235 -0.577444881201 -0.181813597679 -0.594702214003 -0.181810017675 -0.611958995462 -0.181807111949 -0.629215657711 -0.181804828346 -0.646471887827 -0.18180321902 -0.663728132844 -0.181802250445 -0.680984050035 -0.181801922619 -0.698240101337 -0.18180224672 -0.715495988726 -0.181803241372 -0.732752084732 -0.1818048805 -0.750008106232 -0.181807164103 -0.767264515162 -0.181810095906 -0.784521013499 -0.181813701987 -0.801778018475 -0.181817974895 -0.819035172462 -0.181822866201 -0.836292937398 -0.181828401983 -0.853551015258 -0.181831233203 -0.87277212739 -0.181828252971 -0.891994893551 -0.181822739541 -0.909253150225 -0.181817848235 -0.926510751247 -0.181813597679 -0.943768084049 -0.181810017675 -0.961024865508 -0.181807111949 -0.978281527758 -0.181804828346 -0.995537772774 -0.18180321902 -1.01279401779 -0.181802250445 -1.03004992008 -0.181801922619 -1.04730594158 -0.18180224672 -1.06456181407 -0.181803241372 -1.08181792498 -0.1818048805 -1.09907397628 -0.181807164103 -1.11633041501 -0.181810095906 -1.13358691335 -0.181813701987 -1.15084388852 -0.181817974895 -1.1681010127 -0.181822866201 -1.18535879254 -0.181828401983 -1.20261690021 -0.181831233203 -1.22183799744 -0.181828252971 -1.24106073379 -0.181822739541 -1.25831899047 -0.181817848235 -1.27557656169 -0.181813597679 -1.29283389449 -0.181810017675 -1.31009072065 -0.181807111949 -1.327347368 -0.181804828346 -1.34460356832 -0.18180321902 -1.36185982823 -0.181802250445 -1.37911576032 -0.181801922619 -1.39637181163 -0.18180224672 -1.41362768411 -0.181803241372 -1.43088379502 -0.1818048805 -1.44813981652 -0.181807164103 -1.46539622545 -0.181810095906 -1.48265272379 -0.181813701987 -1.49990969896 -0.181817974895 -1.51716688275 -0.181822866201 -1.53442469239 -0.181828401983 -1.55168277025 -0.181831233203 -1.57090383768 -0.181828252971 -1.59012657404 -0.181822739541 -1.60738486052 -0.181817848235 -1.62464246154 -0.181813597679 -1.64189979434 -0.181810017675 -1.6591565609 -0.181807111949 -1.67641320825 -0.181804828346 -1.69366946816 -0.18180321902 -1.71092569828 -0.181802250445 -1.72818163037 -0.181801922619 -1.74543765187 -0.18180224672 -1.76269349456 -0.181803241372 -1.77994963527 -0.1818048805 -1.79720568657 -0.181807164103 -1.8144620955 -0.181810095906 -1.83171859384 -0.181813701987 -1.84897556901 -0.181817974895 -1.86623269319 -0.181822866201 -1.88349047303 -0.181828401983 -1.90074858069 -0.181831233203 -1.91996967792 -0.181828252971 -1.93919241428 -0.181822739541 -1.95645067096 -0.181817848235 -1.97370830178 -0.181813623756 -1.99096566439 -0.181810043752 -2.00822246075 -0.181807111949 -2.0254791379 -0.181804828346 -2.04273533821 -0.18180321902 -2.05999153852 -0.181802250445 -2.07724744082 -0.181801922619 -2.09450352192 -0.18180224672 -2.11175942421 -0.181803241372 -2.12901550531 -0.1818048805 -2.14627152682 -0.181807164103 -2.16352790594 -0.181810095906 -2.18078440428 -0.181813701987 -2.19804137945 -0.181817974895 -2.21529853344 -0.181822866201 -2.23255634308 -0.181828375906 -2.24981445074 -0.181831207126 -2.26903551817 -0.181828252971 -2.28825825453 -0.181822739541 -2.305516541 -0.181817848235 -2.32277411222 -0.181813597679 -2.34003150463 -0.181810017675 -2.35728830099 -0.181807111949 -2.37454491854 -0.181804828346 -2.39180111885 -0.18180321902 -2.40905737877 -0.181802250445 -2.42631334066 -0.181801922619 -2.44356936216 -0.18180224672 -2.46082520485 -0.181803241372 -2.47808128595 -0.1818048805 -2.49533736706 -0.181807164103 -2.51259386539 -0.181810095906 -2.52985030413 -0.181813701987 -2.54710721969 -0.181817974895 -2.56436437368 -0.181822866201 -2.58162218332 -0.181828401983 -2.59888035059 -0.181831233203 -2.61810147762 -0.181828252971 -2.63732421398 -0.181822739541 -2.65458244085 -0.181817848235 -2.67184001207 -0.181813597679 -2.68909734487 -0.181810017675 -2.70635408163 -0.181807111949 -2.72361069918 -0.181804828346 -2.7408669591 -0.18180321902 -2.75812321901 -0.181802250445 -2.77537918091 -0.181801922619 -2.79263526201 -0.18180224672 -2.8098910451 -0.181803241372 -2.8271471262 -0.1818048805 -2.8444032073 -0.181807164103 -2.86165964604 -0.181810095906 -2.87891614437 -0.181813701987 -2.89617311954 -0.181817974895 -2.91343033314 -0.181822866201 -2.93068808318 -0.181828375906 -2.94794613123 -0.181831207126 -2.96716725826 -0.181828252971 -2.98638999462 -0.181822739541 -3.0036482811 -0.181817848235 -3.02090585232 -0.181813623756 -3.03816312552 -0.181810043752 -3.05541992188 -0.181807111949 -3.07267665863 -0.181804828346 -3.08993291855 -0.18180321902 -3.10718911887 -0.181802250445 -3.12444502116 -0.181801922619 --3.14148423274 -0.18180224672 --3.12422841787 -0.181803241372 --3.10697233677 -0.1818048805 --3.08971625566 -0.181807164103 --3.07245981693 -0.181810095906 --3.05520331859 -0.181813701987 --3.03794634342 -0.181817974895 --3.02068912983 -0.181822866201 --3.00343137979 -0.181828401983 --2.98617333174 -0.181831233203 --2.96695220471 -0.181828252971 --2.94772946835 -0.181822739541 --2.93047118187 -0.181817848235 --2.91321361065 -0.181813623756 --2.89595627785 -0.181810043752 --2.87869948149 -0.181807111949 --2.86144280434 -0.181804828346 --2.84418654442 -0.18180321902 --2.8269303441 -0.181802250445 --2.80967444181 -0.181801922619 --2.79241842032 -0.18180224672 --2.77516251802 -0.181803241372 --2.75790637731 -0.1818048805 --2.74065035582 -0.181807164103 --2.72339397669 -0.181810095906 --2.70613753796 -0.181813701987 --2.68888056279 -0.181817974895 --2.67162334919 -0.181822866201 --2.65436553955 -0.181828375906 --2.6371074915 -0.181831207126 --2.61788642407 -0.181828252971 --2.5986636281 -0.181822739541 --2.58140534163 -0.181817848235 --2.56414777041 -0.181813597679 --2.5468904376 -0.181810017675 --2.52963364124 -0.181807111949 --2.51237696409 -0.181804828346 --2.49512076378 -0.18180321902 --2.47786450386 -0.181802250445 --2.46060860157 -0.181801922619 --2.44335258007 -0.18180224672 --2.42609667778 -0.181803241372 --2.40884059667 -0.1818048805 --2.39158457518 -0.181807164103 --2.37432819605 -0.181810095906 --2.35707163811 -0.181813701987 --2.33981460333 -0.181817974895 --2.32255750894 -0.181822866201 --2.30529969931 -0.181828401983 --2.28804165125 -0.181831233203 --2.26882052422 -0.181828252971 --2.24959766865 -0.181822739541 --2.23233944178 -0.181817848235 --2.21508187056 -0.181813597679 --2.19782453776 -0.181810017675 --2.180567801 -0.181807111949 --2.16331118345 -0.181804828346 --2.14605492353 -0.18180321902 --2.12879866362 -0.181802250445 --2.11154276132 -0.181801922619 --2.09428668022 -0.18180224672 --2.07703083754 -0.181803241372 --2.05977475643 -0.1818048805 --2.04251867533 -0.181807164103 --2.0252622366 -0.181810095906 --2.00800576806 -0.181813701987 --1.99074882269 -0.181817974895 --1.9734916389 -0.181822866201 --1.95623382926 -0.181828401983 --1.9389757514 -0.181831233203 --1.91975468397 -0.181828252971 --1.90053191781 -0.181822739541 --1.88327363134 -0.181817848235 --1.86601606011 -0.181813597679 --1.84875872731 -0.181810017675 --1.83150193095 -0.181807111949 --1.8142452836 -0.181804828346 --1.79698905348 -0.18180321902 --1.77973282337 -0.181802250445 --1.76247689128 -0.181801922619 --1.74522086978 -0.18180224672 --1.72796502709 -0.181803241372 --1.71070888639 -0.1818048805 --1.69345283508 -0.181807164103 --1.67619642615 -0.181810095906 --1.65893992782 -0.181813701987 --1.64168292284 -0.181817974895 --1.62442576885 -0.181822866201 --1.60716801881 -0.181828401983 --1.58990994096 -0.181831233203 --1.57068884373 -0.181828252971 --1.55146607757 -0.181822739541 --1.53420782089 -0.181817848235 --1.51695021987 -0.181813597679 --1.49969285726 -0.181810017675 --1.48243609071 -0.181807111949 --1.46517941356 -0.181804828346 --1.44792318344 -0.18180321902 --1.43066698313 -0.181802250445 --1.41341108083 -0.181801922619 --1.39615502954 -0.18180224672 --1.37889912724 -0.181803241372 --1.36164301634 -0.1818048805 --1.34438696503 -0.181807164103 --1.3271305263 -0.181810095906 --1.30987408757 -0.181813701987 --1.2926171422 -0.181817974895 --1.27535995841 -0.181822866201 --1.25810214877 -0.181828401983 --1.24084404111 -0.181831233203 --1.22162294388 -0.181828252971 --1.20240020752 -0.181822739541 --1.18514195085 -0.181817848235 --1.16788437963 -0.181813623756 --1.15062704682 -0.181810043752 --1.13337025046 -0.181807111949 --1.11611360312 -0.181804828346 --1.098857373 -0.18180321902 --1.08160114288 -0.181802250445 --1.06434521079 -0.181801922619 --1.04708912969 -0.18180224672 --1.029833287 -0.181803241372 --1.01257717609 -0.1818048805 --0.995321109891 -0.181807164103 --0.978064715862 -0.181810095906 --0.960808232427 -0.181813701987 --0.943551257253 -0.181817974895 --0.926294103265 -0.181822866201 --0.909036308527 -0.181828375906 --0.891778200865 -0.181831207126 --0.872557103634 -0.181828252971 --0.853334352374 -0.181822739541 --0.836076095701 -0.181817848235 --0.81881852448 -0.181813597679 --0.801561176777 -0.181810017675 --0.784304380417 -0.181807111949 --0.767047718167 -0.181804828346 --0.749791488051 -0.18180321902 --0.732535287738 -0.181802250445 --0.715279355645 -0.181801922619 --0.698023274541 -0.18180224672 --0.680767431855 -0.181803241372 --0.66351133585 -0.1818048805 --0.646255284548 -0.181807164103 --0.628998860717 -0.181810095906 --0.611742377282 -0.181813701987 --0.594485402108 -0.181817974895 --0.577228233218 -0.181822866201 --0.55997043848 -0.181828401983 --0.542712345719 -0.181831233203 --0.52349126339 -0.181828252971 --0.504268527031 -0.181822739541 --0.487010262907 -0.181817848235 --0.469752661884 -0.181813597679 --0.452495321632 -0.181810017675 --0.435238532722 -0.181807111949 --0.417981863022 -0.181804828346 --0.400725640357 -0.18180321902 --0.383469425142 -0.181802250445 --0.3662135005 -0.181801922619 --0.348957449198 -0.18180224672 --0.331701591611 -0.181803241372 --0.314445480704 -0.1818048805 --0.297189414501 -0.181807164103 --0.27993299067 -0.181810095906 --0.262676529587 -0.181813701987 --0.245419558138 -0.181817974895 --0.228162381798 -0.181822866201 --0.210904594511 -0.181828375906 --0.19364650175 -0.181831207126 --0.174425408244 -0.199190545827 --0.155195247382 -0.199184518308 --0.13793694973 -0.199179172516 --0.120679328218 -0.199174553156 --0.103421960026 -0.199170645327 --0.0861651431769 -0.199167449027 --0.0689084492624 -0.199164982885 --0.0516521884128 -0.199163228273 --0.034395926632 -0.199162129313 --0.0171399717219 -0.19916178286 -0.00011610542424 -0.199162151664 -0.0173719979357 -0.199163228273 -0.0346281398088 -0.199165035039 -0.0518842218444 -0.19916754961 -0.0691406745463 -0.199170745909 -0.086397189647 -0.199174653739 -0.103654198349 -0.199179317802 -0.120911391452 -0.199184689671 -0.138169206679 -0.199190739542 -0.155427329242 -0.199193812907 -0.174648139626 -0.199190545827 -0.193870607764 -0.199184518308 -0.21112890169 -0.199179172516 -0.228386521339 -0.199174553156 -0.245643898844 -0.199170645327 -0.262900710106 -0.199167449027 -0.280157394707 -0.199164960533 -0.297413654626 -0.199163205922 -0.314669914544 -0.199162129313 -0.331925868988 -0.19916178286 -0.349181957543 -0.199162151664 -0.366437852383 -0.199163228273 -0.383693985641 -0.199165035039 -0.400950066745 -0.19916754961 -0.418206520379 -0.199170745909 -0.435463041067 -0.199174653739 -0.452720053494 -0.199179317802 -0.469977244735 -0.199184663594 -0.487235054374 -0.199190713465 -0.504493191839 -0.199193812907 -0.523714005947 -0.199190545827 -0.542936459183 -0.199184518308 -0.56019474566 -0.199179172516 -0.577452361584 -0.199174553156 -0.594709739089 -0.199170645327 -0.611966565251 -0.199167449027 -0.629223257303 -0.199164960533 -0.64647950232 -0.199163205922 -0.663735762238 -0.19916215539 -0.680991724133 -0.199161808937 -0.698247805238 -0.199162151664 -0.715503707528 -0.199163228273 -0.732759848237 -0.199165035039 -0.75001591444 -0.19916754961 -0.767272353172 -0.199170745909 -0.784528881312 -0.199174653739 -0.80178591609 -0.199179317802 -0.819043114782 -0.199184663594 -0.836300909519 -0.199190713465 -0.853559017181 -0.199193812907 -0.87277983129 -0.199190545827 -0.892002299428 -0.199184518308 -0.909260600805 -0.199179172516 -0.92651823163 -0.199174553156 -0.943775594235 -0.199170645327 -0.961032405496 -0.199167449027 -0.978289112449 -0.199164960533 -0.995545372368 -0.199163205922 -1.01280164719 -0.199162129313 -1.03005760908 -0.19916178286 -1.04731366038 -0.199162151664 -1.06456956267 -0.199163228273 -1.08182570338 -0.199165035039 -1.09908178449 -0.19916754961 -1.11633822322 -0.199170745909 -1.13359472155 -0.199174653739 -1.15085172653 -0.199179317802 -1.16810891032 -0.199184663594 -1.18536674976 -0.199190713465 -1.20262488723 -0.199193812907 -1.22184568644 -0.199190545827 -1.24106815457 -0.199184518308 -1.25832647085 -0.199179172516 -1.27558407187 -0.199174553156 -1.29284143448 -0.199170645327 -1.31009829045 -0.199167449027 -1.3273549676 -0.199164960533 -1.34461119771 -0.199163205922 -1.36186745762 -0.19916215539 -1.37912341952 -0.199161808937 -1.39637950062 -0.199162151664 -1.41363540292 -0.199163228273 -1.43089157343 -0.199165035039 -1.44814762473 -0.19916754961 -1.46540406346 -0.199170745909 -1.4826605916 -0.199174676091 -1.49991759658 -0.199179340154 -1.51717481017 -0.199184663594 -1.53443261981 -0.199190713465 -1.55169072747 -0.199193812907 -1.57091155648 -0.199190545827 -1.59013402462 -0.199184518308 -1.60739231109 -0.199179172516 -1.62464994192 -0.199174553156 -1.64190730453 -0.199170645327 -1.65916410088 -0.199167449027 -1.67642080784 -0.199164960533 -1.69367706776 -0.199163205922 -1.71093332767 -0.199162129313 -1.72818931937 -0.19916178286 -1.74544537067 -0.199162151664 -1.76270124316 -0.199163228273 -1.77995738387 -0.199165035039 -1.79721346498 -0.19916754961 -1.81446993351 -0.199170745909 -1.83172643185 -0.199174653739 -1.84898343682 -0.199179317802 -1.86624065041 -0.199184663594 -1.88349846005 -0.199190713465 -1.90075656772 -0.199193812907 -1.91997736692 -0.199190545827 -1.93919983506 -0.199184518308 -1.95645815134 -0.199179172516 -1.97371578217 -0.199174553156 -1.99097317457 -0.199170645327 -2.00822997093 -0.199167449027 -2.02548664809 -0.199164960533 -2.04274296761 -0.199163205922 -2.05999922752 -0.19916215539 -2.07725512981 -0.199161808937 -2.09451121092 -0.199162151664 -2.11176711321 -0.199163228273 -2.12902325392 -0.199165035039 -2.14627933502 -0.19916754961 -2.16353577375 -0.199170745909 -2.18079227209 -0.199174653739 -2.19804924726 -0.199179317802 -2.21530646086 -0.199184663594 -2.2325642705 -0.199190713465 -2.24982243776 -0.199193812907 -2.26904326677 -0.199190545827 -2.2882656455 -0.199184518308 -2.30552393198 -0.199179172516 -2.3227815628 -0.199174553156 -2.34003901481 -0.199170645327 -2.35729587078 -0.199167449027 -2.37455248833 -0.199164960533 -2.39180874824 -0.199163205922 -2.40906506777 -0.199162129313 -2.42632097006 -0.19916178286 -2.44357699156 -0.199162151664 -2.46083289385 -0.199163228273 -2.47808903456 -0.199165035039 -2.49534517527 -0.19916754961 -2.5126016736 -0.199170745909 -2.52985811233 -0.199174653739 -2.54711508751 -0.199179317802 -2.5643723011 -0.199184663594 -2.58163017034 -0.199190713465 -2.59888833761 -0.199193812907 -2.61810910702 -0.199190545827 -2.63733160496 -0.199184518308 -2.65458995104 -0.199179172516 -2.67184752226 -0.199174553156 -2.68910485506 -0.199170645327 -2.70636165142 -0.199167449027 -2.72361832857 -0.199164960533 -2.74087458849 -0.199163205922 -2.75813084841 -0.199162129313 -2.77538686991 -0.19916178286 -2.79264295101 -0.199162151664 -2.8098987937 -0.199163228273 -2.8271548748 -0.199165035039 -2.84441095591 -0.19916754961 -2.86166745424 -0.199170745909 -2.87892401218 -0.199174653739 -2.89618104696 -0.199179317802 -2.91343826056 -0.199184689671 -2.9306960702 -0.199190739542 -2.94795411825 -0.199193812907 -2.96717494726 -0.199190545827 -2.9863974452 -0.199184518308 -3.00365573168 -0.199179172516 -3.0209133625 -0.199174553156 -3.0381706953 -0.199170645327 -3.05542749166 -0.199167449027 -3.07268422842 -0.199164982885 -3.08994048834 -0.199163228273 -3.10719674826 -0.199162129313 -3.12445271015 -0.19916178286 --3.14147654374 -0.199162151664 --3.12422066927 -0.199163228273 --3.10696452856 -0.199165035039 --3.08970844746 -0.19916754961 --3.07245200873 -0.199170745909 --3.05519545078 -0.199174653739 --3.037938416 -0.199179317802 --3.02068120241 -0.199184689671 --3.00342339277 -0.199190739542 --2.98616534471 -0.199193812907 --2.9669445157 -0.199190545827 --2.94772201776 -0.199184518308 --2.93046373129 -0.199179172516 --2.91320610046 -0.199174553156 --2.89594876766 -0.199170645327 --2.8786919713 -0.199167449027 --2.86143523455 -0.199164960533 --2.84417897463 -0.199163205922 --2.82692271471 -0.199162129313 --2.80966675282 -0.19916178286 --2.79241067171 -0.199162151664 --2.77515476942 -0.199163228273 --2.75789862871 -0.199165035039 --2.74064254761 -0.19916754961 --2.72338610888 -0.199170745909 --2.70612961054 -0.199174653739 --2.68887263537 -0.199179317802 --2.67161542177 -0.199184663594 --2.65435761213 -0.199190713465 --2.63709950447 -0.199193812907 --2.61787867546 -0.199190545827 --2.59865623712 -0.199184518308 --2.58139795065 -0.199179172516 --2.56414026022 -0.199174553156 --2.54688286781 -0.199170645327 --2.52962607145 -0.199167449027 --2.5123693943 -0.199164960533 --2.49511313438 -0.199163205922 --2.47785687447 -0.19916215539 --2.46060097218 -0.199161808937 --2.44334489107 -0.199162151664 --2.42608898878 -0.199163228273 --2.40883284807 -0.199165035039 --2.39157676697 -0.19916754961 --2.37432032824 -0.199170745909 --2.35706377029 -0.199174653739 --2.33980673551 -0.199179317802 --2.32254958153 -0.199184663594 --2.30529177189 -0.199190713465 --2.28803366423 -0.199193812907 --2.26881283522 -0.199190545827 --2.24959033728 -0.199184518308 --2.2323320508 -0.199179172516 --2.21507441998 -0.199174553156 --2.19781702757 -0.199170645327 --2.18056023121 -0.199167449027 --2.16330355406 -0.199164960533 --2.14604729414 -0.199163205922 --2.12879103422 -0.199162129313 --2.11153507233 -0.19916178286 --2.09427899122 -0.199162151664 --2.07702308893 -0.199163228273 --2.05976700783 -0.199165035039 --2.04251092672 -0.19916754961 --2.02525442839 -0.199170745909 --2.00799793005 -0.199174653739 --1.99074092508 -0.199179317802 --1.97348371148 -0.199184663594 --1.95622587204 -0.199190713465 --1.93896773458 -0.199193812907 --1.91974693537 -0.199190545827 --1.90052446723 -0.199184518308 --1.88326618076 -0.199179172516 --1.86600857973 -0.199174553156 --1.84875121713 -0.199170645327 --1.83149442077 -0.199167449027 --1.81423771381 -0.199164960533 --1.79698142409 -0.199163205922 --1.77972516418 -0.19916215539 --1.76246920228 -0.199161808937 --1.74521315098 -0.199162151664 --1.72795727849 -0.199163228273 --1.71070113778 -0.199165035039 --1.69344505668 -0.19916754961 --1.67618858814 -0.199170745909 --1.65893206 -0.199174676091 --1.64167502522 -0.199179340154 --1.62441784143 -0.199184663594 --1.6071600616 -0.199190713465 --1.58990195394 -0.199193812907 --1.57068112492 -0.199190545827 --1.55145865679 -0.199184518308 --1.53420037031 -0.199179172516 --1.51694273949 -0.199174553156 --1.49968534708 -0.199170645327 --1.48242852092 -0.199167449027 --1.46517184377 -0.199164960533 --1.44791558385 -0.199163205922 --1.43065932393 -0.199162129313 --1.41340339184 -0.19916178286 --1.39614731073 -0.199162151664 --1.37889140844 -0.199163228273 --1.36163526773 -0.199165035039 --1.34437915683 -0.19916754961 --1.32712268829 -0.199170745909 --1.30986621976 -0.199174653739 --1.29260924458 -0.199179317802 --1.27535203099 -0.199184663594 --1.25809419155 -0.199190713465 --1.24083605409 -0.199193812907 --1.22161525488 -0.199190545827 --1.20239278674 -0.199184518308 --1.18513450027 -0.199179172516 --1.16787689924 -0.199174553156 --1.15061953664 -0.199170645327 --1.13336271048 -0.199167449027 --1.11610600353 -0.199164960533 --1.0988497436 -0.199163205922 --1.08159348368 -0.19916215539 --1.06433752179 -0.199161808937 --1.04708144068 -0.199162151664 --1.0298255682 -0.199163228273 --1.01256939769 -0.199165035039 --0.995313301683 -0.19916754961 --0.978056877852 -0.199170745909 --0.960800364613 -0.199174653739 --0.943543374538 -0.199179317802 --0.926286175847 -0.199184663594 --0.909028336406 -0.199190713465 --0.891770198941 -0.199193812907 --0.872549399733 -0.199190545827 --0.853326946497 -0.199184518308 --0.83606864512 -0.199179172516 --0.818811044097 -0.199174553156 --0.801553666592 -0.199170645327 --0.784296840429 -0.199167449027 --0.767040148377 -0.199164960533 --0.749783873558 -0.199163205922 --0.732527643442 -0.199162129313 --0.715271696448 -0.19916178286 --0.698015585542 -0.199162151664 --0.680759698153 -0.199163228273 --0.663503557444 -0.199165035039 --0.646247461438 -0.19916754961 --0.628991022706 -0.199170745909 --0.611734524369 -0.199174653739 --0.594477504492 -0.199179317802 --0.5772203058 -0.199184663594 --0.55996248126 -0.199190713465 --0.542704358697 -0.199193812907 --0.523483559489 -0.199190545827 --0.504261098802 -0.199184518308 --0.487002804875 -0.199179172516 --0.46974517405 -0.199174553156 --0.452487803996 -0.199170645327 --0.435230985284 -0.199167449027 --0.417974293232 -0.199164960533 --0.400718040765 -0.199163205922 --0.383461773395 -0.199162129313 --0.366205811501 -0.19916178286 --0.348949737847 -0.199162151664 --0.331693850458 -0.199163228273 --0.314437709749 -0.199165035039 --0.297181621194 -0.19916754961 --0.279925167561 -0.199170745909 --0.262668661773 -0.199174653739 --0.245411656797 -0.199179317802 --0.228154458106 -0.199184689671 --0.210896644741 -0.199190739542 --0.193638522178 -0.199193812907 --0.174417711794 -0.216554418206 --0.15518803522 -0.216547891498 --0.137929715216 -0.216542087495 --0.120672060177 -0.216537069529 --0.103414652869 -0.216532848776 --0.0861578080803 -0.216529395431 --0.0689010852948 -0.216526705772 --0.0516447927803 -0.216524787247 --0.0343885011971 -0.216523610055 --0.0171325162519 -0.216523222625 -0.000123591860755 -0.21652360633 -0.017379514873 -0.216524783522 -0.0346356881782 -0.216526754201 -0.0518918000161 -0.216529466212 -0.0691482806578 -0.216532941908 -0.086404826492 -0.216537188739 -0.103661868721 -0.216542229056 -0.12091909349 -0.216548059136 -0.138176940381 -0.216554630548 -0.155435100198 -0.216557968408 -0.17465563491 -0.216554418206 -0.193877819926 -0.216547891498 -0.21113614738 -0.216542087495 -0.228393796831 -0.216537069529 -0.245651192963 -0.216532848776 -0.262908034027 -0.216529395431 -0.280164763331 -0.21652668342 -0.297421060503 -0.216524764895 -0.314677357674 -0.216523610055 -0.331933341921 -0.216523244977 -0.349189437926 -0.216523628682 -0.366445370019 -0.216524783522 -0.38370154053 -0.216526754201 -0.400957651436 -0.216529466212 -0.418214134872 -0.216532941908 -0.435470685363 -0.21653721109 -0.452727727592 -0.216542251408 -0.469984941185 -0.216548033059 -0.487242795527 -0.216554604471 -0.504500970245 -0.216557968408 -0.523721501231 -0.216554418206 -0.542943671346 -0.216547865421 -0.560201987624 -0.21654208377 -0.57745963335 -0.216537091881 -0.594717055559 -0.216532848776 -0.611973911524 -0.216529395431 -0.629230618477 -0.21652668342 -0.646486908197 -0.216524764895 -0.663743197918 -0.216523636132 -0.680999189615 -0.216523271054 -0.698255300522 -0.216523628682 -0.715511217713 -0.216524783522 -0.732767388224 -0.216526754201 -0.75002348423 -0.216529466212 -0.767279967665 -0.216532941908 -0.784536525607 -0.21653721109 -0.801793575287 -0.216542251408 -0.819050818682 -0.216548033059 -0.836308643222 -0.216554604471 -0.853566795588 -0.216557968408 -0.872787356377 -0.216554418206 -0.89200951159 -0.216547865421 -0.909267827868 -0.21654208377 -0.926525488496 -0.216537091881 -0.943782895803 -0.216532848776 -0.961039751768 -0.216529395431 -0.978296458721 -0.21652668342 -0.995552718641 -0.216524764895 -1.01280903816 -0.216523610055 -1.03006505966 -0.216523244977 -1.04732114076 -0.216523628682 -1.06457707286 -0.216524783522 -1.08183324337 -0.216526754201 -1.09908935428 -0.216529488563 -1.11634582281 -0.216532964259 -1.13360235095 -0.216537188739 -1.15085938573 -0.216542229056 -1.16811659932 -0.216548033059 -1.18537446857 -0.216554604471 -1.20263263583 -0.216557968408 -1.22185316682 -0.216554418206 -1.24107536674 -0.216547865421 -1.25833371282 -0.21654208377 -1.27559134364 -0.216537091881 -1.29284873605 -0.216532848776 -1.31010562182 -0.216529395431 -1.32736232877 -0.21652668342 -1.34461858869 -0.216524764895 -1.36187487841 -0.216523636132 -1.3791308701 -0.216523271054 -1.39638698101 -0.216523628682 -1.4136429131 -0.216524783522 -1.43089911342 -0.216526754201 -1.44815519452 -0.216529488563 -1.46541166306 -0.216532964259 -1.482668221 -0.21653721109 -1.49992525578 -0.216542251408 -1.51718249917 -0.216548033059 -1.53444033861 -0.216554604471 -1.55169847608 -0.216557968408 -1.57091903687 -0.216554418206 -1.59014126658 -0.216547865421 -1.60739958286 -0.21654208377 -1.62465721369 -0.216537091881 -1.64191460609 -0.216532848776 -1.65917143225 -0.216529395431 -1.67642816901 -0.21652668342 -1.69368445873 -0.216524764895 -1.71094074845 -0.216523610055 -1.72819676995 -0.216523244977 -1.74545285106 -0.216523628682 -1.76270875335 -0.216524783522 -1.77996492386 -0.216526754201 -1.79722103476 -0.216529488563 -1.8144775331 -0.216532964259 -1.83173406124 -0.21653721109 -1.84899112583 -0.216542251408 -1.86624839902 -0.216548033059 -1.88350620866 -0.216554626823 -1.90076434612 -0.21655799076 -1.91998487711 -0.216554418206 -1.93920704723 -0.216547865421 -1.95646539331 -0.21654208377 -1.97372305393 -0.216537091881 -1.99098047614 -0.216532848776 -2.0082373023 -0.216529395431 -2.02549397946 -0.21652668342 -2.04275029898 -0.216524764895 -2.0600066185 -0.216523636132 -2.07726258039 -0.216523271054 -2.09451872111 -0.216523628682 -2.1117746234 -0.216524783522 -2.1290307641 -0.216526754201 -2.14628690481 -0.216529466212 -2.16354340315 -0.216532941908 -2.18079996109 -0.216537188739 -2.19805699587 -0.216542229056 -2.21531420946 -0.216548033059 -2.2325720191 -0.216554604471 -2.24983018637 -0.216557968408 -2.26905077696 -0.216554418206 -2.28827291727 -0.216547865421 -2.30553120375 -0.21654208377 -2.32278889418 -0.216537091881 -2.34004634619 -0.216532848776 -2.35730320215 -0.216529395431 -2.3745598793 -0.21652668342 -2.39181619882 -0.216524764895 -2.40907251835 -0.216523610055 -2.42632842064 -0.216523244977 -2.44358450174 -0.216523628682 -2.46084046364 -0.216524783522 -2.47809660434 -0.216526754201 -2.49535274505 -0.216529466212 -2.51260924339 -0.216532941908 -2.52986574173 -0.21653721109 -2.54712277651 -0.216542251408 -2.5643799901 -0.216548033059 -2.58163785934 -0.216554626823 -2.59889602661 -0.21655799076 -2.6181165576 -0.216554418206 -2.63733881712 -0.216547865421 -2.6545971632 -0.21654208377 -2.67185473442 -0.216537091881 -2.68911212683 -0.216532848776 -2.70636898279 -0.216529395431 -2.72362571955 -0.21652668342 -2.74088203907 -0.216524764895 -2.75813829899 -0.216523610055 -2.77539432049 -0.216523244977 -2.79265040159 -0.216523628682 -2.80990630388 -0.216524783522 -2.82716250419 -0.216526754201 -2.8444185853 -0.216529466212 -2.86167508364 -0.216532941908 -2.87893164158 -0.21653721109 -2.89618867636 -0.216542251408 -2.91344594956 -0.216548059136 -2.9307038188 -0.216554630548 -2.94796192646 -0.216557968408 -2.96718245745 -0.216554418206 -2.98640465737 -0.216547891498 -3.00366294384 -0.216542087495 -3.02092063427 -0.216537069529 -3.03817802667 -0.216532848776 -3.05543482304 -0.216529395431 -3.07269155979 -0.216526705772 -3.08994781971 -0.216524787247 -3.10720413923 -0.216523610055 -3.12446016073 -0.216523222625 --3.14146909316 -0.21652360633 --3.12421315909 -0.216524783522 --3.10695689917 -0.216526754201 --3.08970081806 -0.216529466212 --3.07244443893 -0.216532941908 --3.05518788099 -0.216537188739 --3.03793078661 -0.216542229056 --3.02067351341 -0.216548059136 --3.00341564417 -0.216554630548 --2.9861575365 -0.216557968408 --2.96693700552 -0.216554418206 --2.9477148056 -0.216547891498 --2.93045645952 -0.216542087495 --2.91319876909 -0.216537069529 --2.89594143629 -0.216532848776 --2.87868463993 -0.216529395431 --2.86142790318 -0.21652668342 --2.84417164326 -0.216524764895 --2.82691532373 -0.216523610055 --2.80965930224 -0.216523244977 --2.79240322113 -0.216523628682 --2.77514731884 -0.216524783522 --2.75789111853 -0.216526754201 --2.74063497782 -0.216529466212 --2.72337847948 -0.216532941908 --2.70612192154 -0.21653721109 --2.68886488676 -0.216542251408 --2.67160767317 -0.216548033059 --2.65434986353 -0.216554604471 --2.63709169626 -0.216557968408 --2.61787116527 -0.216554418206 --2.59864902496 -0.216547865421 --2.58139067888 -0.21654208377 --2.56413298845 -0.216537091881 --2.54687553644 -0.216532848776 --2.52961868048 -0.216529395431 --2.51236206293 -0.21652668342 --2.49510574341 -0.216524764895 --2.47784942388 -0.216523636132 --2.4605935216 -0.216523271054 --2.44333738089 -0.216523628682 --2.42608141899 -0.216524783522 --2.40882527828 -0.216526754201 --2.39156919718 -0.216529466212 --2.37431269884 -0.216532941908 --2.3570561409 -0.21653721109 --2.33979910612 -0.216542251408 --2.32254189253 -0.216548033059 --2.30528408289 -0.216554604471 --2.28802591562 -0.216557968408 --2.26880532503 -0.216554418206 --2.24958318472 -0.216547865421 --2.23232489824 -0.21654208377 --2.21506720781 -0.216537091881 --2.1978097558 -0.216532848776 --2.18055289984 -0.216529395431 --2.16329616308 -0.21652668342 --2.14603984356 -0.216524764895 --2.12878358364 -0.216523610055 --2.11152756214 -0.216523244977 --2.09427148104 -0.216523628682 --2.07701557875 -0.216524783522 --2.05975943804 -0.216526754201 --2.04250335693 -0.216529488563 --2.0252468586 -0.216532964259 --2.00799030065 -0.216537188739 --1.99073323608 -0.216542229056 --1.97347602248 -0.216548033059 --1.95621815324 -0.216554604471 --1.93895998597 -0.216557968408 --1.91973945498 -0.216554418206 --1.90051725507 -0.216547865421 --1.88325893879 -0.21654208377 --1.86600130796 -0.216537091881 --1.84874391556 -0.216532848776 --1.83148708939 -0.216529395431 --1.81423035264 -0.21652668342 --1.79697403312 -0.216524764895 --1.7797177434 -0.216523636132 --1.7624617517 -0.216523271054 --1.74520564079 -0.216523628682 --1.7279497385 -0.216524783522 --1.71069359779 -0.216526754201 --1.69343748689 -0.216529488563 --1.67618098855 -0.216532964259 --1.65892443061 -0.21653721109 --1.64166736603 -0.216542251408 --1.62441012263 -0.216548033059 --1.60715228319 -0.216554604471 --1.58989414573 -0.216557968408 --1.57067361474 -0.216554418206 --1.55145144463 -0.216547865421 --1.53419312835 -0.21654208377 --1.51693546772 -0.216537091881 --1.49967804551 -0.216532848776 --1.48242118955 -0.216529395431 --1.4651644826 -0.21652668342 --1.44790819287 -0.216524764895 --1.43065190315 -0.216523610055 --1.41339594126 -0.216523244977 --1.39613983035 -0.216523628682 --1.37888389826 -0.216524783522 --1.36162772775 -0.216526754201 --1.34437158704 -0.216529488563 --1.3271150887 -0.216532964259 --1.30985856056 -0.21653721109 --1.29260155559 -0.216542251408 --1.27534434199 -0.216548033059 --1.25808647275 -0.216554626823 --1.24082830549 -0.21655799076 --1.22160777449 -0.216554418206 --1.20238557458 -0.216547865421 --1.1851272583 -0.21654208377 --1.16786962748 -0.216537091881 --1.15061223507 -0.216532848776 --1.1333553493 -0.216529395431 --1.11609861255 -0.21652668342 --1.09884235263 -0.216524764895 --1.08158606291 -0.216523636132 --1.06433007121 -0.216523271054 --1.04707396031 -0.216523628682 --1.02981802821 -0.216524783522 --1.0125618279 -0.216526754201 --0.995305716993 -0.216529466212 --0.978049263358 -0.216532941908 --0.960792720318 -0.216537188739 --0.943535685539 -0.216542229056 --0.926278457046 -0.216548033059 --0.909020587802 -0.216554604471 --0.891762435436 -0.216557968408 --0.872541904449 -0.216554418206 --0.853319719434 -0.216547865421 --0.836061403155 -0.21654208377 --0.818803757429 -0.216537091881 --0.801546350121 -0.216532848776 --0.784289509058 -0.216529395431 --0.767032787204 -0.21652668342 --0.749776482582 -0.216524764895 --0.732520207762 -0.216523610055 --0.715264230966 -0.216523244977 --0.69800812006 -0.216523628682 --0.680752202869 -0.216524783522 --0.663496017456 -0.216526754201 --0.646239891648 -0.216529466212 --0.628983423113 -0.216532941908 --0.611726880073 -0.21653721109 --0.594469830394 -0.216542251408 --0.5772126019 -0.216548033059 --0.559954747558 -0.216554626823 --0.542696595192 -0.21655799076 --0.523476064205 -0.216554418206 --0.50425387919 -0.216547865421 --0.48699555546 -0.21654208377 --0.469737902283 -0.216537091881 --0.452480502427 -0.216532848776 --0.435223661363 -0.216529395431 --0.417966939509 -0.21652668342 --0.400710642338 -0.216524764895 --0.383454345167 -0.216523610055 --0.36619835347 -0.216523244977 --0.348942250013 -0.216523628682 --0.331686332822 -0.216524783522 --0.314430162311 -0.216526754201 --0.297174051404 -0.216529466212 --0.279917567968 -0.216532941908 --0.262661024928 -0.21653721109 --0.245403982699 -0.216542251408 --0.228146754205 -0.216548059136 --0.210888914764 -0.216554630548 --0.193630758673 -0.216557968408 --0.174410220235 -0.23390013352 --0.155180841684 -0.233893107623 --0.137922488153 -0.233886860311 --0.120664805174 -0.233881436288 --0.103407371789 -0.233876887709 --0.0861504953355 -0.233873184771 --0.0688937427476 -0.233870260418 --0.0516374185681 -0.233868185431 --0.0343810971826 -0.233866956085 --0.0171250824351 -0.233866531402 -0.000131056411192 -0.233866933733 -0.0173870101571 -0.233868207783 -0.0346432123333 -0.233870331198 -0.0518993530422 -0.233873255551 -0.0691558653489 -0.233877003193 -0.0864124428481 -0.233881577849 -0.103669516742 -0.233887001872 -0.120926775038 -0.233893271536 -0.138184655458 -0.233900342137 -0.155442841351 -0.233903951943 -0.174663104117 -0.23390013352 -0.193885017186 -0.233893107623 -0.211143370718 -0.233886860311 -0.228401042521 -0.233881436288 -0.24565846473 -0.233876887709 -0.262915343046 -0.233873184771 -0.280172102154 -0.233870260418 -0.297428436577 -0.233868185431 -0.314684771001 -0.233866956085 -0.3319407776 -0.233866553753 -0.349196903407 -0.233866956085 -0.366452865302 -0.233868207783 -0.383709065616 -0.233870331198 -0.400965206325 -0.233873255551 -0.418221719563 -0.233877003193 -0.435478299856 -0.233881622553 -0.452735379338 -0.233887046576 -0.469992630184 -0.233893271536 -0.487250499428 -0.233900342137 -0.504508689046 -0.233903951943 -0.523728951812 -0.23390013352 -0.542950868607 -0.233893081546 -0.560209214687 -0.233886856586 -0.577466890216 -0.23388145864 -0.594724342227 -0.233876887709 -0.611981227994 -0.233873184771 -0.629237964749 -0.233870282769 -0.646494284272 -0.233868207782 -0.663750618696 -0.233866956085 -0.681006640196 -0.233866553753 -0.698262795806 -0.233866956085 -0.7155187428 -0.233868207783 -0.732774913311 -0.233870331198 -0.750031039119 -0.233873255551 -0.767287552357 -0.233877003193 -0.7845441401 -0.233881600201 -0.801801219582 -0.233887024224 -0.819058477878 -0.233893271536 -0.836316347122 -0.233900342137 -0.85357452929 -0.233903951943 -0.872794821858 -0.23390013352 -0.892016723752 -0.233893081546 -0.909275069833 -0.233886856586 -0.926532745361 -0.23388145864 -0.94379016757 -0.233876887709 -0.961047053337 -0.233873184771 -0.978303790093 -0.233870260418 -0.995560094714 -0.233868185431 -1.01281642914 -0.233866956085 -1.03007245064 -0.233866553753 -1.04732856155 -0.233866956085 -1.06458455324 -0.233868207783 -1.08184078336 -0.233870331198 -1.09909692407 -0.233873277902 -1.11635342241 -0.233877025544 -1.13360998035 -0.233881600201 -1.15086704493 -0.233887024224 -1.16812428832 -0.233893271536 -1.18538218737 -0.233900342137 -1.20264038444 -0.233903951943 -1.2218606472 -0.23390013352 -1.2410825789 -0.233893081546 -1.25834092498 -0.233886856586 -1.27559858561 -0.23388145864 -1.29285600781 -0.233876887709 -1.31011289358 -0.233873184771 -1.32736963034 -0.233870260418 -1.34462594986 -0.233868185431 -1.36188229918 -0.233866956085 -1.37913832069 -0.233866553753 -1.39639446139 -0.233866956085 -1.41365042329 -0.233868207783 -1.4309066236 -0.233870331198 -1.44816273451 -0.233873277902 -1.46541926265 -0.233877025544 -1.48267585039 -0.233881577849 -1.49993291497 -0.233887001872 -1.51719018817 -0.233893271536 -1.53444805741 -0.233900342137 -1.55170622468 -0.233903951943 -1.57092648745 -0.23390013352 -1.59014841914 -0.233893081546 -1.60740679502 -0.233886856586 -1.62466445565 -0.23388145864 -1.64192187786 -0.233876887709 -1.65917876362 -0.233873184771 -1.67643550038 -0.233870260418 -1.69369181991 -0.233868185431 -1.71094813943 -0.233866956085 -1.72820416093 -0.233866553753 -1.74546030164 -0.233866956085 -1.76271626353 -0.233868207783 -1.77997246385 -0.233870331198 -1.79722860455 -0.233873277902 -1.8144851327 -0.233877025544 -1.83174169064 -0.233881622553 -1.84899875522 -0.233887046576 -1.86625602841 -0.233893271536 -1.88351389765 -0.233900364488 -1.90077209473 -0.233903974295 -1.91999235749 -0.23390013352 -1.93921425939 -0.233893081546 -1.95647260547 -0.233886856586 -1.9737302959 -0.23388145864 -1.99098774791 -0.233876887709 -2.00824460387 -0.233873184771 -2.02550131082 -0.233870282769 -2.04275763035 -0.233868207782 -2.06001400948 -0.233866956085 -2.07727003098 -0.233866553753 -2.09452617169 -0.233866956085 -2.11178213358 -0.233868207783 -2.12903833389 -0.233870331198 -2.1462944746 -0.233873255551 -2.16355097294 -0.233877003193 -2.18080759049 -0.233881577849 -2.19806468487 -0.233887001872 -2.21532189846 -0.233893271536 -2.2325797677 -0.233900342137 -2.24983793497 -0.233903951943 -2.26905822754 -0.23390013352 -2.28828012943 -0.233893081546 -2.30553841591 -0.233886856586 -2.32279610634 -0.23388145864 -2.34005355835 -0.233876887709 -2.35731047392 -0.233873184771 -2.37456727028 -0.233870282769 -2.3918235898 -0.233868207782 -2.40907984972 -0.233866956085 -2.42633581162 -0.233866553753 -2.44359195233 -0.233866956085 -2.46084797382 -0.233868207783 -2.47810417413 -0.233870331198 -2.49536031484 -0.233873255551 -2.51261681318 -0.233877003193 -2.52987337113 -0.233881622553 -2.54713046551 -0.233887046576 -2.5643876791 -0.233893271536 -2.58164554834 -0.233900364488 -2.59890377521 -0.233903974295 -2.61812406778 -0.23390013352 -2.63734602928 -0.233893081546 -2.65460437536 -0.233886856586 -2.67186200619 -0.23388145864 -2.6891194582 -0.233876887709 -2.70637631416 -0.233873184771 -2.72363305092 -0.233870260418 -2.74088943004 -0.233868185431 -2.75814574957 -0.233866956085 -2.77540177107 -0.233866553753 -2.79265791178 -0.233866956085 -2.80991381407 -0.233868207783 -2.82717001438 -0.233870331198 -2.84442615509 -0.233873255551 -2.86168271303 -0.233877003193 -2.87893927097 -0.233881600201 -2.89619630575 -0.233887024224 -2.91345363855 -0.233893271536 -2.9307115078 -0.233900342137 -2.94796967506 -0.233903951943 -2.96718990803 -0.23390013352 -2.98641180992 -0.233893107623 -3.003670156 -0.233886860311 -3.02092784643 -0.233881436288 -3.03818529844 -0.233876887709 -3.05544215441 -0.233873184771 -3.07269889116 -0.233870260418 -3.08995521068 -0.233868185431 -3.10721158981 -0.233866956085 -3.12446761132 -0.233866531402 --3.14146158297 -0.233866933733 --3.1242056489 -0.233868207783 --3.10694944859 -0.233870331198 --3.08969330787 -0.233873255551 --3.07243680954 -0.233877003193 --3.0551802516 -0.233881577849 --3.03792315722 -0.233887001872 --3.02066582441 -0.233893271536 --3.00340795517 -0.233900342137 --2.9861497879 -0.233903951943 --2.96692955494 -0.23390013352 --2.94770765305 -0.233893107623 --2.93044924736 -0.233886860311 --2.91319155693 -0.233881436288 --2.89593416452 -0.233876887709 --2.87867730856 -0.233873184771 --2.86142057181 -0.233870260418 --2.84416425228 -0.233868185431 --2.82690787315 -0.233866956085 --2.80965185165 -0.233866553753 --2.79239577055 -0.233866956085 --2.77513986826 -0.233868207783 --2.75788360834 -0.233870331198 --2.74062740803 -0.233873255551 --2.72337090969 -0.233877003193 --2.70611435175 -0.233881622553 --2.68885725737 -0.233887046576 --2.67159998417 -0.233893271536 --2.65434217453 -0.233900342137 --2.63708400726 -0.233903951943 --2.61786371469 -0.23390013352 --2.5986418128 -0.233893081546 --2.58138346672 -0.233886856586 --2.56412577629 -0.23388145864 --2.54686832428 -0.233876887709 --2.52961140871 -0.233873184771 --2.51235467196 -0.233870282769 --2.49509835243 -0.233868207782 --2.47784203291 -0.233866956085 --2.46058607101 -0.233866553753 --2.4433298707 -0.233866956085 --2.4260738492 -0.233868207783 --2.40881770849 -0.233870331198 --2.39156162739 -0.233873255551 --2.37430512905 -0.233877003193 --2.3570485115 -0.233881600201 --2.33979141712 -0.233887024224 --2.32253420353 -0.233893271536 --2.30527633429 -0.233900342137 --2.28801816702 -0.233903951943 --2.26879787445 -0.23390013352 --2.24957597256 -0.233893081546 --2.23231762647 -0.233886856586 --2.21505993604 -0.23388145864 --2.19780248403 -0.233876887709 --2.18054556847 -0.233873184771 --2.16328883171 -0.233870260418 --2.14603251219 -0.233868185431 --2.12877619266 -0.233866956085 --2.11152011156 -0.233866553753 --2.09426397085 -0.233866956085 --2.07700806856 -0.233868207783 --2.05975192786 -0.233870331198 --2.04249578714 -0.233873277902 --2.0252392292 -0.233877025544 --2.00798264146 -0.233881600201 --1.99072557688 -0.233887024224 --1.97346833349 -0.233893271536 --1.95621046424 -0.233900342137 --1.93895229697 -0.233903951943 --1.9197320044 -0.23390013352 --1.90051007271 -0.233893081546 --1.88325172663 -0.233886856586 --1.865994066 -0.23388145864 --1.84873664379 -0.233876887709 --1.83147975802 -0.233873184771 --1.81422302127 -0.233870260418 --1.79696670175 -0.233868185431 --1.77971035242 -0.233866956085 --1.76245430112 -0.233866553753 --1.74519816041 -0.233866956085 --1.72794222832 -0.233868207783 --1.71068605781 -0.233870331198 --1.6934299171 -0.233873277902 --1.67617338896 -0.233877025544 --1.65891680121 -0.233881577849 --1.64165970683 -0.233887001872 --1.62440243364 -0.233893271536 --1.60714456439 -0.233900342137 --1.58988639712 -0.233903951943 --1.57066616416 -0.23390013352 --1.55144426226 -0.233893081546 --1.53418591618 -0.233886856586 --1.51692822576 -0.23388145864 --1.49967077375 -0.233876887709 --1.48241388798 -0.233873184771 --1.46515712142 -0.233870260418 --1.4479008019 -0.233868185431 --1.43064451217 -0.233866956085 --1.41338852048 -0.233866553753 --1.39613237977 -0.233866956085 --1.37887641787 -0.233868207783 --1.36162018776 -0.233870331198 --1.34436401725 -0.233873277902 --1.32710751891 -0.233877025544 --1.30985096097 -0.233881622553 --1.29259389639 -0.233887046576 --1.27533665299 -0.233893271536 --1.25807878375 -0.233900364488 --1.24082058668 -0.233903974295 --1.22160029411 -0.23390013352 --1.20237836242 -0.233893081546 --1.18512001633 -0.233886856586 --1.16786235571 -0.23388145864 --1.1506049335 -0.233876887709 --1.13334804773 -0.233873184771 --1.11609131098 -0.233870282769 --1.09883499145 -0.233868207782 --1.08157864213 -0.233866956085 --1.06432262063 -0.233866553753 --1.04706647992 -0.233866956085 --1.02981051803 -0.233868207783 --1.01255431771 -0.233870331198 --0.995298191905 -0.233873255551 --0.978041678667 -0.233877003193 --0.960785090924 -0.233881577849 --0.943528026342 -0.233887001872 --0.926270768047 -0.233893271536 --0.909012883902 -0.233900342137 --0.891754716635 -0.233903951943 --0.872534453869 -0.23390013352 --0.853312537074 -0.233893081546 --0.836054190993 -0.233886856586 --0.818796500564 -0.23388145864 --0.801539063454 -0.233876887709 --0.784282192588 -0.233873184771 --0.767025440931 -0.233870282769 --0.749769106507 -0.233868207782 --0.732512786984 -0.233866956085 --0.715256780386 -0.233866553753 --0.698000654578 -0.233866956085 --0.680744707584 -0.233868207783 --0.663488507271 -0.233870331198 --0.646232351661 -0.233873255551 --0.628975823522 -0.233877003193 --0.611719250679 -0.233881622553 --0.594462186098 -0.233887046576 --0.577204927802 -0.233893271536 --0.559947043658 -0.233900364488 --0.54268886149 -0.233903974295 --0.523468613625 -0.23390013352 --0.50424670428 -0.233893081546 --0.486988335848 -0.233886856586 --0.469730660319 -0.23388145864 --0.45247323066 -0.233876887709 --0.435216344893 -0.233873184771 --0.417959585786 -0.233870260418 --0.400703258812 -0.233868185431 --0.38344693929 -0.233866956085 --0.366190932691 -0.233866553753 --0.348934791982 -0.233866956085 --0.331678837538 -0.233868207783 --0.314422644675 -0.233870331198 --0.297166496515 -0.233873255551 --0.279909975827 -0.233877003193 --0.262653410435 -0.233881600201 --0.245396338403 -0.233887024224 --0.228139076382 -0.233893271536 --0.210881203413 -0.233900342137 --0.19362301752 -0.233903951943 --0.174402754753 -0.2512280792 --0.155173674226 -0.251220520586 --0.137915279716 -0.251213844865 --0.120657572523 -0.251208052039 --0.103400120512 -0.251203164458 --0.0861432105303 -0.251199204475 --0.0688864244148 -0.251196075231 --0.0516300713643 -0.251193843782 --0.0343737192452 -0.251192517579 --0.017117672367 -0.251192077994 -0.00013849674724 -0.251192543656 -0.0173944816925 -0.251193914563 -0.0346507141366 -0.251196168363 -0.0519068855792 -0.251199297607 -0.0691634314135 -0.251203324646 -0.0864200424403 -0.251208234579 -0.103677146137 -0.251214027405 -0.120934432372 -0.251220725477 -0.138192340732 -0.251228306442 -0.155450552702 -0.251232180745 -0.174670539796 -0.2512280792 -0.193892184645 -0.251220520586 -0.211150560528 -0.251213844865 -0.228408265859 -0.251208052039 -0.245665732771 -0.251203164458 -0.262922637164 -0.251199204475 -0.280179418623 -0.251196075231 -0.297435775399 -0.251193843782 -0.314692139626 -0.251192517579 -0.331948183477 -0.251192077994 -0.349204353988 -0.251192543656 -0.366460338235 -0.251193914563 -0.383716553449 -0.251196168363 -0.400972723961 -0.251199297607 -0.418229274452 -0.251203324646 -0.435485884547 -0.25120825693 -0.452742993831 -0.251214049757 -0.47000028193 -0.251220725477 -0.487258180976 -0.251228306442 -0.504516400397 -0.251232158393 -0.52373637259 -0.251228056848 -0.542958006263 -0.251220520586 -0.560216411948 -0.251213844865 -0.577474117279 -0.251208052039 -0.594731584191 -0.251203164458 -0.611988514662 -0.251199204475 -0.62924529612 -0.251196097582 -0.646501630544 -0.251193866134 -0.66375797987 -0.251192517579 -0.681014031172 -0.251192077994 -0.698270216584 -0.251192543656 -0.715526223183 -0.251193914563 -0.732782423496 -0.251196168363 -0.750038579106 -0.251199297607 -0.767295122147 -0.251203302294 -0.784551724791 -0.251208212227 -0.801808834076 -0.251214027405 -0.819066122174 -0.251220725477 -0.836324036121 -0.251228306442 -0.853582248092 -0.251232180745 -0.872802257538 -0.2512280792 -0.89202389121 -0.251220520586 -0.909282267094 -0.251213844865 -0.926540002227 -0.251208052039 -0.943797454238 -0.251203164458 -0.961054340005 -0.251199204475 -0.978311121464 -0.251196075231 -0.99556747079 -0.251193843782 -1.01282382012 -0.251192517579 -1.03007987142 -0.251192077994 -1.04733601213 -0.251192543656 -1.06459203362 -0.251193914563 -1.08184829354 -0.251196168363 -1.09910443425 -0.251199297607 -1.11636096239 -0.251203302294 -1.13361757994 -0.251208234579 -1.15087470412 -0.251214049757 -1.16813197732 -0.251220725477 -1.18538990617 -0.251228306442 -1.20264813304 -0.251232180745 -1.22186809778 -0.2512280792 -1.24108973145 -0.251220520586 -1.25834810734 -0.251213844865 -1.27560582757 -0.251208052039 -1.29286327958 -0.251203164458 -1.31012016535 -0.251199204475 -1.3273769319 -0.251196075231 -1.34463331103 -0.251193843782 -1.36188969016 -0.251192517579 -1.37914571166 -0.251192077994 -1.39640188217 -0.251192543656 -1.41365787387 -0.251193914563 -1.43091410398 -0.251196168363 -1.44817027449 -0.251199297607 -1.46542683244 -0.251203324646 -1.48268344998 -0.251208234579 -1.49994054436 -0.251214027405 -1.51719784736 -0.251220725477 -1.53445574641 -0.251228328794 -1.55171394348 -0.251232180745 -1.57093393803 -0.251228056848 -1.5901555717 -0.251220520586 -1.60741397739 -0.251213844865 -1.62467169762 -0.251208052039 -1.64192914963 -0.251203164458 -1.6591860652 -0.251199204475 -1.67644283175 -0.251196075231 -1.69369915128 -0.251193843782 -1.7109555006 -0.251192517579 -1.72821155191 -0.251192077994 -1.74546775222 -0.251192543656 -1.76272377372 -0.251193914563 -1.77997997403 -0.251196168363 -1.79723614454 -0.251199297607 -1.81449273229 -0.251203324646 -1.83174932003 -0.25120825693 -1.84900638461 -0.251214049757 -1.86626365781 -0.251220725477 -1.88352158666 -0.251228306442 -1.90077981353 -0.251232180745 -1.91999977827 -0.2512280792 -1.93922141195 -0.251220520586 -1.95647978783 -0.251213844865 -1.97373750806 -0.251208052039 -1.99099498987 -0.251203164458 -2.00825190544 -0.251199204475 -2.0255086422 -0.251196097582 -2.04276496172 -0.251193866134 -2.06002134085 -0.251192517579 -2.07727742195 -0.251192077994 -2.09453362227 -0.251192543656 -2.11178964376 -0.251193914563 -2.12904590368 -0.251196168363 -2.14630204439 -0.251199297607 -2.16355854273 -0.251203302294 -2.18081516027 -0.251208212227 -2.19807225466 -0.251214027405 -2.21532952785 -0.251220725477 -2.2325874567 -0.251228306442 -2.24984562397 -0.251232180745 -2.26906561852 -0.2512280792 -2.28828728199 -0.251220520586 -2.30554562807 -0.251213844865 -2.3228033185 -0.251208052039 -2.34006077051 -0.251203164458 -2.35731774569 -0.251199204475 -2.37457460165 -0.251196097582 -2.39183092117 -0.251193866134 -2.40908724069 -0.251192517579 -2.42634326219 -0.251192077994 -2.4435994029 -0.251192543656 -2.46085542441 -0.251193914563 -2.47811168432 -0.251196168363 -2.49536782503 -0.251199297607 -2.51262432337 -0.251203324646 -2.52988100052 -0.251208234579 -2.5471380949 -0.251214027405 -2.56439530849 -0.251220725477 -2.58165329694 -0.251228306442 -2.59891158343 -0.251232180745 -2.61813151837 -0.2512280792 -2.63735312223 -0.251220520586 -2.65461152792 -0.251213844865 -2.67186927795 -0.251208052039 -2.68912672996 -0.251203164458 -2.70638358593 -0.251199204475 -2.72364038229 -0.251196075231 -2.74089676142 -0.251193843782 -2.75815314054 -0.251192517579 -2.77540916204 -0.251192077994 -2.79266530275 -0.251192543656 -2.80992126465 -0.251193914563 -2.82717746496 -0.251196168363 -2.84443366528 -0.251199297607 -2.86169028282 -0.251203324646 -2.87894690037 -0.251208234579 -2.89620399475 -0.251214027405 -2.91346126795 -0.251220725477 -2.93071913719 -0.251228306442 -2.94797736406 -0.251232180745 -2.96719735861 -0.2512280792 -2.98641902209 -0.251220520586 -3.00367742777 -0.251213844865 -3.0209351182 -0.251208052039 -3.03819257021 -0.251203164458 -3.05544942618 -0.251199204475 -3.07270616293 -0.251196075231 -3.08996254206 -0.251193843782 -3.10721892118 -0.251192517579 -3.12447500229 -0.251192077994 --3.14145413239 -0.251192543656 --3.12419819832 -0.251193914563 --3.10694199801 -0.251196168363 --3.08968579769 -0.251199297607 --3.07242918014 -0.251203324646 --3.0551725626 -0.251208234579 --3.03791546822 -0.251214027405 --3.02065819502 -0.251220725477 --3.00340032577 -0.251228306442 --2.9861420989 -0.251232180745 --2.96692210436 -0.2512280792 --2.94770044088 -0.251220520586 --2.9304420948 -0.251213844865 --2.91318440437 -0.251208052039 --2.89592689276 -0.251203164458 --2.87866997719 -0.251199204475 --2.86141324043 -0.251196075231 --2.84415692091 -0.251193843782 --2.82690054178 -0.251192517579 --2.80964446068 -0.251192077994 --2.79238826037 -0.251192543656 --2.77513229847 -0.251193914563 --2.75787609816 -0.251196168363 --2.74061989784 -0.251199297607 --2.7233633399 -0.251203324646 --2.70610678196 -0.25120825693 --2.68884968758 -0.251214049757 --2.67159235478 -0.251220725477 --2.65433448553 -0.251228306442 --2.63707631826 -0.251232158393 --2.61785626411 -0.251228056848 --2.59863460064 -0.251220520586 --2.58137625456 -0.251213844865 --2.56411856413 -0.251208052039 --2.54686111212 -0.251203164458 --2.52960413695 -0.251199204475 --2.51234728098 -0.251196097582 --2.49509096146 -0.251193866134 --2.47783470154 -0.251192517579 --2.46057868004 -0.251192077994 --2.44332242012 -0.251192543656 --2.42606639862 -0.251193914563 --2.40881019831 -0.251196168363 --2.3915540576 -0.251199297607 --2.37429755926 -0.251203302294 --2.35704094172 -0.251208212227 --2.33978384733 -0.251214027405 --2.32252657414 -0.251220725477 --2.30526864529 -0.251228306442 --2.28801041841 -0.251232180745 --2.26879042387 -0.2512280792 --2.24956882 -0.251220520586 --2.23231041431 -0.251213844865 --2.21505266428 -0.251208052039 --2.19779521227 -0.251203164458 --2.1805382967 -0.251199204475 --2.16328150034 -0.251196075231 --2.14602518082 -0.251193843782 --2.12876880169 -0.251192517579 --2.11151272058 -0.251192077994 --2.09425657988 -0.251192543656 --2.07700061798 -0.251193914563 --2.05974441767 -0.251196168363 --2.04248827696 -0.251199297607 --2.02523165941 -0.251203302294 --2.00797501207 -0.251208234579 --1.99071797729 -0.251214049757 --1.97346067429 -0.251220725477 --1.95620277524 -0.251228306442 --1.93894457817 -0.251232180745 --1.91972455382 -0.2512280792 --1.90050292015 -0.251220520586 --1.88324454427 -0.251213844865 --1.86598682404 -0.251208052039 --1.84872937202 -0.251203164458 --1.83147245646 -0.251199204475 --1.8142156899 -0.251196075231 --1.79695934057 -0.251193843782 --1.77970296144 -0.251192517579 --1.76244691014 -0.251192077994 --1.74519073963 -0.251192543656 --1.72793474794 -0.251193914563 --1.71067851782 -0.251196168363 --1.69342234731 -0.251199297607 --1.67616578937 -0.251203324646 --1.65890917182 -0.251208234579 --1.64165207743 -0.251214027405 --1.62439480424 -0.251220725477 --1.60713690519 -0.251228328794 --1.58987870813 -0.251232180745 --1.57065871358 -0.251228056848 --1.5514370501 -0.251220520586 --1.53417870402 -0.251213844865 --1.51692101359 -0.251208052039 --1.49966353178 -0.251203164458 --1.48240661621 -0.251199204475 --1.46514981985 -0.251196075231 --1.44789347052 -0.251193843782 --1.4306371212 -0.251192517579 --1.4133810699 -0.251192077994 --1.39612492919 -0.251192543656 --1.37886893749 -0.251193914563 --1.36161267757 -0.251196168363 --1.34435650706 -0.251199297607 --1.32709997892 -0.251203324646 --1.30984339118 -0.25120825693 --1.2925862968 -0.251214049757 --1.2753289938 -0.251220725477 --1.25807109475 -0.251228306442 --1.24081286788 -0.251232180745 --1.22159284353 -0.2512280792 --1.20237120986 -0.251220520586 --1.18511283397 -0.251213844865 --1.16785511374 -0.251208052039 --1.15059766173 -0.251203164458 --1.13334077597 -0.251199204475 --1.11608397961 -0.251196097582 --1.09882760048 -0.251193866134 --1.08157125116 -0.251192517579 --1.06431522966 -0.251192077994 --1.04705905914 -0.251192543656 --1.02980306745 -0.251193914563 --1.01254683733 -0.251196168363 --0.995290681719 -0.251199297607 --0.978034123778 -0.251203302294 --0.960777506233 -0.251208212227 --0.94352042675 -0.251214027405 --0.926263123751 -0.251220725477 --0.909005209803 -0.251228306442 --0.891747012734 -0.251232180745 --0.87252703309 -0.2512280792 --0.853305399418 -0.251220520586 --0.836047008634 -0.251213844865 --0.818789273501 -0.251208052039 --0.801531806588 -0.251203164458 --0.78427490592 -0.251199204475 --0.767018124461 -0.251196097582 --0.749761775136 -0.251193866134 --0.73250542581 -0.251192517579 --0.715249374509 -0.251192077994 --0.697993203998 -0.251192543656 --0.680737227201 -0.251193914563 --0.663480997086 -0.251196168363 --0.646224811673 -0.251199297607 --0.628968253732 -0.251203324646 --0.611711636185 -0.251208234579 --0.594454556703 -0.251214027405 --0.577197283506 -0.251220725477 --0.559939354658 -0.251228306442 --0.542681142688 -0.251232180745 --0.523461163044 -0.2512280792 --0.504239529371 -0.251220520586 --0.486981146037 -0.251213844865 --0.469723440706 -0.251208052039 --0.452465981245 -0.251203164458 --0.435209050775 -0.251199204475 --0.417952261865 -0.251196075231 --0.40069591999 -0.251193843782 --0.383439563215 -0.251192517579 --0.366183519363 -0.251192077994 --0.348927348852 -0.251192543656 --0.331671364606 -0.251193914563 --0.31441514194 -0.251196168363 --0.297158963978 -0.251199297607 --0.279902413488 -0.251203324646 --0.262645818293 -0.251208234579 --0.24538871646 -0.251214027405 --0.228131420911 -0.251220725477 --0.210873510689 -0.251228306442 --0.193615294993 -0.251232180745 --0.174395315349 -0.2685655877 --0.155166279524 -0.268557541072 --0.137907858938 -0.268550403416 --0.12065012008 -0.268544249236 --0.103392634541 -0.268539041281 --0.0861356966197 -0.268534786999 --0.0688788797706 -0.268531478941 --0.0516224950552 -0.268529102206 --0.0343661108054 -0.268527686596 --0.0171100317966 -0.268527232111 -0.00014616874978 -0.268527716398 -0.0174021848943 -0.268529176712 -0.0346584497019 -0.268531568348 -0.0519146537408 -0.268534898758 -0.06917123124 -0.268539197743 -0.0864278748631 -0.268544450402 -0.103685010225 -0.268550649285 -0.120942329988 -0.26855776459 -0.138200268149 -0.268565833569 -0.155458509922 -0.26856996119 -0.174678210169 -0.2685655877 -0.193899564445 -0.268557541072 -0.211157973856 -0.268550425768 -0.228415720165 -0.268544249236 -0.24567322433 -0.268539018929 -0.262930162251 -0.268534786999 -0.280186973512 -0.268531478941 -0.29744336009 -0.268529102206 -0.314699754119 -0.268527664244 -0.331955827773 -0.268527209759 -0.349212028086 -0.26852773875 -0.366468042135 -0.268529199064 -0.383724294603 -0.268531568348 -0.400980502367 -0.268534898758 -0.41823707521 -0.268539197743 -0.435493715107 -0.268544450402 -0.452750854194 -0.268550626934 -0.470008179545 -0.268557742238 -0.487266123295 -0.268565833569 -0.504524372518 -0.268569938838 -0.52374406159 -0.268565565348 -0.54296541214 -0.268557541072 -0.560223847627 -0.268550425768 -0.577481582761 -0.268544249236 -0.594739079476 -0.268539018929 -0.611996039748 -0.268534786999 -0.629252851009 -0.268531478941 -0.646509215236 -0.268529102206 -0.663765594363 -0.268527664244 -0.681021660566 -0.268527209759 -0.698277845979 -0.268527716398 -0.715533897281 -0.268529176712 -0.732790157199 -0.268531568348 -0.750046357513 -0.268534898758 -0.767302945256 -0.268539175391 -0.784559562802 -0.26854442805 -0.801816701889 -0.268550626934 -0.819074034691 -0.268557742238 -0.83633197844 -0.268565833569 -0.853590220213 -0.26856996119 -0.872809931636 -0.2685655877 -0.892031267285 -0.268557541072 -0.90928965807 -0.268550403416 -0.926547437906 -0.268544226885 -0.943804949522 -0.268539018929 -0.961061879992 -0.268534786999 -0.978318691254 -0.268531478941 -0.995575055482 -0.268529102206 -1.01283144951 -0.268527664244 -1.03008753061 -0.268527209759 -1.04734370112 -0.268527716398 -1.06459972262 -0.268529176712 -1.08185598254 -0.268531568348 -1.09911218285 -0.268534898758 -1.1163687706 -0.268539175391 -1.13362541795 -0.26854442805 -1.15088257193 -0.268550626934 -1.16813987494 -0.268557742238 -1.18539780378 -0.268565833569 -1.20265606046 -0.26856996119 -1.22187575698 -0.2685655877 -1.24109709263 -0.268557541072 -1.25835549831 -0.268550425768 -1.27561327815 -0.268544249236 -1.29287075996 -0.268539018929 -1.31012767553 -0.268534786999 -1.32738450169 -0.268531478941 -1.34464091062 -0.268529102206 -1.36189728975 -0.268527664244 -1.37915334105 -0.268527209759 -1.39640957117 -0.268527716398 -1.41366559267 -0.268529176712 -1.43092185259 -0.268531568348 -1.4481780529 -0.268534898758 -1.46543464064 -0.268539197743 -1.48269128799 -0.268544450402 -1.49994841218 -0.268550626934 -1.51720574498 -0.268557742238 -1.53446367383 -0.26856585592 -1.5517219305 -0.26856996119 -1.57094165683 -0.268565565348 -1.59016299248 -0.268557541072 -1.60742139816 -0.268550403416 -1.6246791482 -0.268544226885 -1.64193663001 -0.268539041281 -1.65919357538 -0.268534809351 -1.67645040154 -0.268531478941 -1.69370675087 -0.268529102206 -1.71096313 -0.268527664244 -1.7282192111 -0.268527209759 -1.74547541141 -0.268527716398 -1.76273143291 -0.268529176712 -1.77998769283 -0.268531568348 -1.79724392295 -0.268534898758 -1.81450051069 -0.268539197743 -1.83175715804 -0.268544450402 -1.84901428222 -0.268550626934 -1.86627155543 -0.268557742238 -1.88352951408 -0.268565833569 -1.90078777075 -0.26856996119 -1.92000743747 -0.2685655877 -1.93922877312 -0.268557541072 -1.9564871788 -0.268550403416 -1.97374495864 -0.268544226885 -1.99100247025 -0.268539018929 -2.00825944543 -0.268534786999 -2.02551627159 -0.268531478941 -2.04277259111 -0.268529124558 -2.06002897024 -0.268527686596 -2.07728505135 -0.268527209759 -2.09454125166 -0.268527716398 -2.11179733276 -0.268529176712 -2.12905365229 -0.268531568348 -2.14630979299 -0.268534898758 -2.16356629133 -0.268539175391 -2.18082290888 -0.26854442805 -2.19808006287 -0.268550626934 -2.21533745527 -0.268557742238 -2.23259538412 -0.268565833569 -2.24985355139 -0.26856996119 -2.26907330751 -0.2685655877 -2.28829473257 -0.268557541072 -2.30555313826 -0.268550425768 -2.32281082868 -0.268544249236 -2.3400682807 -0.268539018929 -2.35732525587 -0.268534786999 -2.37458211184 -0.268531478941 -2.39183849096 -0.268529102206 -2.40909487009 -0.268527664244 -2.42635095119 -0.268527209759 -2.44360715151 -0.268527716398 -2.46086317301 -0.268529176712 -2.47811943293 -0.268531568348 -2.49537563324 -0.268534898758 -2.51263219118 -0.268539197743 -2.52988886833 -0.26854442805 -2.54714596271 -0.268550604582 -2.56440323591 -0.268557742238 -2.58166122436 -0.268565833569 -2.59891951084 -0.26856996119 -2.61813920737 -0.2685655877 -2.63736051321 -0.268557541072 -2.6546189189 -0.268550425768 -2.67187666893 -0.268544271588 -2.68913412094 -0.268539041281 -2.70639103651 -0.268534786999 -2.72364789248 -0.268531478941 -2.7409042716 -0.268529124558 -2.75816065073 -0.268527686596 -2.77541673183 -0.268527209759 -2.79267293215 -0.26852773875 -2.80992895365 -0.268529199064 -2.82718521356 -0.268531568348 -2.84444147349 -0.268534898758 -2.86169809103 -0.268539197743 -2.87895470858 -0.268544450402 -2.89621180296 -0.268550626934 -2.91346907615 -0.268557742238 -2.93072706461 -0.268565833569 -2.94798535109 -0.26856996119 -2.96720504761 -0.2685655877 -2.98642641306 -0.268557541072 -3.00368481874 -0.268550403416 -3.02094256878 -0.268544249236 -3.03820008039 -0.268539041281 -3.05545699596 -0.268534786999 -3.07271373272 -0.268531478941 -3.08997011185 -0.268529102206 -3.10722655058 -0.268527686596 -3.12448263168 -0.268527232111 --3.141446503 -0.268527716398 --3.12419050932 -0.268529176712 --3.1069342494 -0.268531568348 --3.08967798948 -0.268534898758 --3.07242137194 -0.268539197743 --3.05516475439 -0.268544450402 --3.03790766001 -0.268550649285 --3.02065038681 -0.26855776459 --3.00339239836 -0.268565833569 --2.98613411188 -0.26856996119 --2.96691441536 -0.2685655877 --2.94769304991 -0.268557541072 --2.93043470383 -0.268550425768 --2.91317695379 -0.268544249236 --2.89591938257 -0.268539018929 --2.8786624074 -0.268534786999 --2.86140567064 -0.268531478941 --2.84414935112 -0.268529102206 --2.82689291239 -0.268527664244 --2.80963683129 -0.268527209759 --2.79238063097 -0.26852773875 --2.77512460947 -0.268529199064 --2.75786840916 -0.268531568348 --2.74061220884 -0.268534898758 --2.7233555913 -0.268539197743 --2.70609897375 -0.268544450402 --2.68884181976 -0.268550626934 --2.67158442736 -0.268557742238 --2.65432649851 -0.268565833569 --2.63706833124 -0.268569938838 --2.61784863472 -0.268565565348 --2.59862726927 -0.268557541072 --2.58136880398 -0.268550425768 --2.56411105395 -0.268544249236 --2.54685360193 -0.268539018929 --2.52959662676 -0.268534786999 --2.51233977079 -0.268531478941 --2.49508339167 -0.268529102206 --2.47782707214 -0.268527664244 --2.46057099104 -0.268527209759 --2.44331479073 -0.268527716398 --2.42605876923 -0.268529176712 --2.40880244971 -0.268531568348 --2.39154624939 -0.268534898758 --2.37428969145 -0.268539175391 --2.3570330739 -0.26854442805 --2.33977597952 -0.268550626934 --2.32251864672 -0.268557742238 --2.30526071787 -0.268565833569 --2.28800243139 -0.26856996119 --2.26878267527 -0.2685655877 --2.24956136942 -0.268557541072 --2.23230296374 -0.268550403416 --2.2150452137 -0.268544226885 --2.19778776169 -0.268539018929 --2.18053084612 -0.268534786999 --2.16327399015 -0.268531478941 --2.14601761103 -0.268529102206 --2.1287612319 -0.268527664244 --2.11150515079 -0.268527209759 --2.09424895048 -0.268527716398 --2.07699292898 -0.268529176712 --2.05973666906 -0.268531568348 --2.04248046875 -0.268534898758 --2.0252238512 -0.268539175391 --2.00796720386 -0.26854442805 --1.99071010947 -0.268550626934 --1.97345277667 -0.268557742238 --1.95619484782 -0.268565833569 --1.93893659115 -0.26856996119 --1.91971686482 -0.2685655877 --1.90049552918 -0.268557541072 --1.88323712349 -0.268550425768 --1.86597937346 -0.268544249236 --1.84872189164 -0.268539018929 --1.83146494627 -0.268534786999 --1.81420812011 -0.268531478941 --1.79695174098 -0.268529102206 --1.77969536185 -0.268527664244 --1.76243931055 -0.268527209759 --1.74518311024 -0.268527716398 --1.72792705893 -0.268529176712 --1.71067076921 -0.268531568348 --1.6934145689 -0.268534898758 --1.67615801096 -0.268539197743 --1.65890136361 -0.268544450402 --1.64164423943 -0.268550626934 --1.62438693643 -0.268557742238 --1.60712897778 -0.26856585592 --1.5898707509 -0.26856996119 --1.57065105438 -0.268565565348 --1.55142965913 -0.268557541072 --1.53417125344 -0.268550403416 --1.51691353321 -0.268544226885 --1.49965602159 -0.268539041281 --1.48239907622 -0.268534809351 --1.46514227986 -0.268531478941 --1.44788590074 -0.268529102206 --1.43062949181 -0.268527664244 --1.4133734107 -0.268527209759 --1.39611724019 -0.268527716398 --1.37886121869 -0.268529176712 --1.36160495877 -0.268531568348 --1.34434875846 -0.268534898758 --1.32709217071 -0.268539197743 --1.30983555317 -0.268544450402 --1.29257842898 -0.268550626934 --1.27532109618 -0.268557742238 --1.25806316734 -0.268565833569 --1.24080491066 -0.26856996119 --1.22158518433 -0.2685655877 --1.20236384869 -0.268557541072 --1.185105443 -0.268550403416 --1.16784769297 -0.268544226885 --1.15059021115 -0.268539018929 --1.13333326578 -0.268534786999 --1.11607640982 -0.268531478941 --1.09882003069 -0.268529124558 --1.08156368137 -0.268527686596 --1.06430763006 -0.268527209759 --1.04705139995 -0.268527716398 --1.02979534864 -0.268529176712 --1.01253908872 -0.268531568348 --0.995282903313 -0.268534898758 --0.978026330471 -0.268539175391 --0.960769698024 -0.26854442805 --0.943512573838 -0.268550626934 --0.926255226135 -0.268557742238 --0.908997282386 -0.268565833569 --0.891739040613 -0.26856996119 --0.87251932919 -0.2685655877 --0.85329797864 -0.268557541072 --0.836039572954 -0.268550425768 --0.81878182292 -0.268544249236 --0.801524326205 -0.268539018929 --0.784267395735 -0.268534786999 --0.767010599375 -0.268531478941 --0.749754205346 -0.268529102206 --0.732497826219 -0.268527664244 --0.715241760016 -0.268527209759 --0.697985544801 -0.268527716398 --0.680729523301 -0.268529176712 --0.663473248482 -0.268531568348 --0.646217033267 -0.268534898758 --0.628960460425 -0.268539197743 --0.611703813076 -0.26854442805 --0.59444668889 -0.268550604582 --0.577189385891 -0.268557742238 --0.559931427241 -0.268565833569 --0.542673185468 -0.26856996119 --0.523453488946 -0.2685655877 --0.504232130944 -0.268557541072 --0.486973725259 -0.268550425768 --0.469715990126 -0.268544271588 --0.452458500862 -0.268539041281 --0.43520154804 -0.268534786999 --0.417944729328 -0.268531478941 --0.400688357651 -0.268529124558 --0.383431963622 -0.268527686596 --0.366175867617 -0.268527209759 --0.348919674754 -0.26852773875 --0.331663668156 -0.268529199064 --0.314407400787 -0.268531568348 --0.297151200473 -0.268534898758 --0.279894627631 -0.268539197743 --0.262637995184 -0.268544450402 --0.245380856097 -0.268550626934 --0.228123523295 -0.268557742238 --0.210865583271 -0.268565833569 --0.193607337773 -0.26856996119 --0.174387637525 -0.285932064056 --0.15515897423 -0.285923555493 --0.137900535017 -0.285915963352 --0.120642760769 -0.285909421742 --0.103385236114 -0.285903900862 --0.0861282683909 -0.285899378359 --0.0688714236021 -0.285895876586 --0.0516150090844 -0.285893343389 --0.0343585931696 -0.285891845822 --0.01710248366 -0.285891383886 -0.000153748085722 -0.285891883075 -0.0174097951967 -0.285893425345 -0.0346660902724 -0.285895973444 -0.0519223259762 -0.28589951247 -0.0691789351404 -0.285904049873 -0.0864356067032 -0.285909622907 -0.103692770004 -0.285916209221 -0.120950123295 -0.285923756659 -0.13820809871 -0.285932332277 -0.15546637401 -0.285936698318 -0.174685798585 -0.285932041704 -0.193906869739 -0.28592351079 -0.211165305227 -0.285915985704 -0.228423081338 -0.285909444094 -0.245680619031 -0.28590387851 -0.262937597931 -0.285899356007 -0.280194438994 -0.285895854234 -0.297450855374 -0.285893343389 -0.314707271755 -0.285891823471 -0.331963367761 -0.285891361535 -0.349219597876 -0.285891905427 -0.366475649178 -0.285893447697 -0.383731946349 -0.285895973444 -0.400988191366 -0.28589951247 -0.418244794011 -0.285904049873 -0.435501456261 -0.285909622907 -0.45275862515 -0.285916186869 -0.470015987754 -0.285923734307 -0.487273953855 -0.285932332277 -0.50453223288 -0.285936698318 -0.523751661182 -0.285932064056 -0.54297272861 -0.285923533141 -0.560231178999 -0.285915985704 -0.577488943934 -0.285909444094 -0.594746470451 -0.28590387851 -0.612003460527 -0.285899356007 -0.62926030159 -0.285895854234 -0.64651671052 -0.285893343389 -0.663773134351 -0.285891823471 -0.681029230356 -0.285891361535 -0.69828543067 -0.285891883075 -0.715541496873 -0.285893402994 -0.732797801495 -0.285895951092 -0.750054031611 -0.28589951247 -0.767310664058 -0.285904049873 -0.784567311406 -0.285909622907 -0.801824465394 -0.285916186869 -0.819081827998 -0.285923734307 -0.83633980155 -0.285932332277 -0.853598088026 -0.285936698318 -0.872817501426 -0.285932041704 -0.892038553953 -0.28592351079 -0.909297004342 -0.285915963352 -0.92655479908 -0.285909421742 -0.943812325597 -0.28590387851 -0.961069300771 -0.285899356007 -0.978326141834 -0.285895854234 -0.995582550765 -0.285893343389 -1.01283895969 -0.285891823471 -1.0300950706 -0.285891361535 -1.04735130072 -0.285891883075 -1.06460732222 -0.285893425345 -1.08186361194 -0.285895973444 -1.09911987185 -0.28589951247 -1.1163764894 -0.285904049873 -1.13363313675 -0.285909622907 -1.15089032054 -0.285916209221 -1.16814768314 -0.285923756659 -1.1854056418 -0.285932332277 -1.20266392827 -0.285936698318 -1.22188335657 -0.285932041704 -1.241104424 -0.28592351079 -1.25836285949 -0.285915963352 -1.27562063933 -0.285909421742 -1.29287815094 -0.28590387851 -1.31013512612 -0.285899356007 -1.32739198208 -0.285895854234 -1.34464839101 -0.285893343389 -1.36190479994 -0.285891823471 -1.37916091084 -0.285891361535 -1.39641717076 -0.285891883075 -1.41367322206 -0.285893402994 -1.43092951179 -0.285895951092 -1.4481857419 -0.28589951247 -1.46544235945 -0.285904049873 -1.4826990366 -0.285909622907 -1.49995619059 -0.285916186869 -1.51721352339 -0.285923734307 -1.53447148204 -0.285932332277 -1.55172976851 -0.285936698318 -1.57094919682 -0.285932064056 -1.59017026424 -0.285923533141 -1.60742869973 -0.285915941 -1.62468647957 -0.28590939939 -1.64194402099 -0.285903900862 -1.65920099616 -0.285899378359 -1.67645785213 -0.285895854234 -1.69371426106 -0.285893343389 -1.71097066999 -0.285891823471 -1.72822678089 -0.285891361535 -1.74548298121 -0.285891883075 -1.76273900271 -0.285893425345 -1.77999532223 -0.285895973444 -1.79725158214 -0.28589951247 -1.81450816989 -0.285904049873 -1.83176484704 -0.285909622907 -1.84902203083 -0.285916186869 -1.86627936363 -0.285923734307 -1.88353735209 -0.285932332277 -1.90079563856 -0.285936698318 -1.92001503706 -0.285932041704 -1.93923610449 -0.28592351079 -1.95649453998 -0.285915963352 -1.97375231981 -0.285909421742 -1.99100983143 -0.28590387851 -2.00826680661 -0.285899356007 -2.02552372217 -0.285895854234 -2.04278016091 -0.285893365741 -2.06003654003 -0.285891845822 -2.07729262113 -0.285891361535 -2.09454882145 -0.285891883075 -2.11180490256 -0.285893425345 -2.12906122208 -0.285895973444 -2.14631742239 -0.28589951247 -2.16357403993 -0.285904049873 -2.18083065748 -0.285909622907 -2.19808781147 -0.285916209221 -2.21534526348 -0.285923756659 -2.23260325194 -0.285932332277 -2.24986147881 -0.285936698318 -2.26908093691 -0.285932041704 -2.28830206394 -0.28592351079 -2.30556046963 -0.285915985704 -2.32281816006 -0.285909444094 -2.34007567167 -0.28590387851 -2.35733270645 -0.285899356007 -2.37458956242 -0.285895854234 -2.39184594155 -0.285893343389 -2.40910232067 -0.285891823471 -2.42635846138 -0.285891361535 -2.4436147213 -0.285891883075 -2.4608707428 -0.285893425345 -2.47812706232 -0.285895973444 -2.49538332224 -0.28589951247 -2.51263993979 -0.285904049873 -2.52989661694 -0.285909622907 -2.54715377092 -0.285916186869 -2.56441110372 -0.285923734307 -2.58166903257 -0.285932332277 -2.59892731905 -0.285936698318 -2.61814677715 -0.285932041704 -2.63736784458 -0.28592351079 -2.65462625027 -0.285915963352 -2.6718840003 -0.285909444094 -2.68914151192 -0.285903900862 -2.70639848709 -0.285899356007 -2.72365534306 -0.285895854234 -2.74091172218 -0.285893365741 -2.75816816091 -0.285891845822 -2.77542430163 -0.285891361535 -2.79268056155 -0.285891905427 -2.80993664265 -0.285893425345 -2.82719290256 -0.285895951092 -2.84444916248 -0.28589951247 -2.86170578003 -0.285904049873 -2.87896239757 -0.285909622907 -2.89621955156 -0.285916186869 -2.91347688437 -0.285923734307 -2.93073487282 -0.285932332277 -2.9479931593 -0.285936698318 -2.96721255779 -0.285932064056 -2.98643362522 -0.285923555493 -3.00369209051 -0.285915963352 -3.02094990015 -0.285909421742 -3.03820741176 -0.285903900862 -3.05546438694 -0.285899378359 -3.0727212429 -0.285895876586 -3.08997768164 -0.285893343389 -3.10723412037 -0.285891845822 -3.12449020147 -0.285891383886 --3.14143887361 -0.285891883075 --3.12418282032 -0.285893425345 --3.1069265604 -0.285895973444 --3.08967030048 -0.28589951247 --3.07241368294 -0.285904049873 --3.05515706539 -0.285909622907 --3.0378999114 -0.285916209221 --3.0206425786 -0.285923756659 --3.00338459015 -0.285932332277 --2.98612630367 -0.285936698318 --2.96690690517 -0.285932041704 --2.94768583775 -0.28592351079 --2.93042737246 -0.285915985704 --2.91316956281 -0.285909444094 --2.89591199159 -0.28590387851 --2.87865501642 -0.285899356007 --2.86139822006 -0.285895854234 --2.84414178133 -0.285893343389 --2.8268853426 -0.285891823471 --2.8096292615 -0.285891361535 --2.79237306118 -0.285891905427 --2.77511703968 -0.285893447697 --2.75786077976 -0.285895973444 --2.74060451984 -0.28589951247 --2.7233479023 -0.285904049873 --2.70609128475 -0.285909622907 --2.68883407116 -0.285916186869 --2.67157661915 -0.285923734307 --2.6543186903 -0.285932332277 --2.63706046343 -0.285936698318 --2.61784100532 -0.285932064056 --2.5986199379 -0.285923533141 --2.58136147261 -0.285915985704 --2.56410372257 -0.285909444094 --2.54684621096 -0.28590387851 --2.52958917618 -0.285899356007 --2.51233232021 -0.285895854234 --2.49507594109 -0.285893343389 --2.47781956196 -0.285891823471 --2.46056342125 -0.285891361535 --2.44330722093 -0.285891883075 --2.42605119943 -0.285893402994 --2.40879482031 -0.285895951092 --2.39153856039 -0.28589951247 --2.37428194284 -0.285904049873 --2.35702526569 -0.285909622907 --2.33976817131 -0.285916186869 --2.32251083851 -0.285923734307 --2.30525285006 -0.285932332277 --2.28799456358 -0.285936698318 --2.26877510548 -0.285932041704 --2.24955403805 -0.28592351079 --2.23229557276 -0.285915963352 --2.21503782272 -0.285909421742 --2.19778037071 -0.28590387851 --2.18052339554 -0.285899356007 --2.16326653957 -0.285895854234 --2.14601016044 -0.285893343389 --2.12875372172 -0.285891823471 --2.11149758101 -0.285891361535 --2.09424132109 -0.285891883075 --2.07698523998 -0.285893425345 --2.05972898007 -0.285895973444 --2.04247277975 -0.28589951247 --2.02521616221 -0.285904049873 --2.00795948505 -0.285909622907 --1.99070233107 -0.285916209221 --1.97344499826 -0.285923756659 --1.95618703961 -0.285932332277 --1.93892875313 -0.285936698318 --1.91970932484 -0.285932041704 --1.90048825741 -0.28592351079 --1.88322982192 -0.285915963352 --1.86597204208 -0.285909421742 --1.84871450066 -0.28590387851 --1.83145752549 -0.285899356007 --1.81420066953 -0.285895854234 --1.7969442606 -0.285893343389 --1.77968785167 -0.285891823471 --1.76243174076 -0.285891361535 --1.74517554045 -0.285891883075 --1.72791945934 -0.285893402994 --1.71066313982 -0.285895951092 --1.69340693951 -0.28589951247 --1.67615035176 -0.285904049873 --1.65889367461 -0.285909622907 --1.64163649082 -0.285916186869 --1.62437912822 -0.285923734307 --1.60712113976 -0.285932332277 --1.58986288309 -0.285936698318 --1.57064348459 -0.285932064056 --1.55142238736 -0.285923533141 --1.53416392207 -0.285915941 --1.51690614224 -0.28590939939 --1.49964863062 -0.285903900862 --1.48239165545 -0.285899378359 --1.46513482928 -0.285895854234 --1.44787842035 -0.285893343389 --1.43062198162 -0.285891823471 --1.41336587071 -0.285891361535 --1.3961096406 -0.285891883075 --1.3788536191 -0.285893425345 --1.36159732938 -0.285895973444 --1.34434106946 -0.28589951247 --1.32708445192 -0.285904049873 --1.30982780457 -0.285909622907 --1.29257065058 -0.285916186869 --1.27531328797 -0.285923734307 --1.25805532932 -0.285932332277 --1.24079704285 -0.285936698318 --1.22157758474 -0.285932041704 --1.20235651731 -0.28592351079 --1.18509808183 -0.285915963352 --1.16784033179 -0.285909421742 --1.15058282018 -0.28590387851 --1.1333258152 -0.285899356007 --1.11606895924 -0.285895854234 --1.09881258011 -0.285893365741 --1.08155617118 -0.285891845822 --1.06430006027 -0.285891361535 --1.04704380036 -0.285891883075 --1.02978774906 -0.285893425345 --1.01253148913 -0.285895973444 --0.995275244117 -0.28589951247 --0.978018611669 -0.285904049873 --0.96076194942 -0.285909622907 --0.943504795432 -0.285916209221 --0.926247432828 -0.285923756659 --0.908989459276 -0.285932332277 --0.891731187701 -0.285936698318 --0.8725117594 -0.285932041704 --0.853290677071 -0.28592351079 --0.836032241583 -0.285915985704 --0.818774476647 -0.285909444094 --0.801516950131 -0.28590387851 --0.784259960055 -0.285899356007 --0.767003133893 -0.285895854234 --0.749746710062 -0.285893343389 --0.732490286231 -0.285891823471 --0.715234205127 -0.285891361535 --0.69797796011 -0.285891883075 --0.680721893907 -0.285893425345 --0.663465604186 -0.285895973444 --0.64620937407 -0.28589951247 --0.628952756524 -0.285904049873 --0.611696094275 -0.285909622907 --0.594438925386 -0.285916186869 --0.577181562782 -0.285923734307 --0.559923604131 -0.285932332277 --0.542665332556 -0.285936698318 --0.523445919156 -0.285932041704 --0.504224836826 -0.28592351079 --0.486966386437 -0.285915963352 --0.469708621502 -0.285909444094 --0.452451102436 -0.285903900862 --0.435194127262 -0.285899356007 --0.417937271297 -0.285895854234 --0.400680854916 -0.285893365741 --0.383424438536 -0.285891845822 --0.36616833508 -0.285891361535 --0.348912112415 -0.285891905427 --0.331656061113 -0.285893425345 --0.314399756491 -0.285895951092 --0.297143526376 -0.28589951247 --0.279886923731 -0.285904049873 --0.262630261481 -0.285909622907 --0.245373088866 -0.285916186869 --0.228115726262 -0.285923734307 --0.210857756436 -0.285932332277 --0.193599481136 -0.285936698318 --0.174380052835 -0.303300023079 --0.155152011663 -0.303291022777 --0.137893546373 -0.303283020854 --0.120635742322 -0.303276106715 --0.103378187865 -0.303270258009 --0.0861211884767 -0.303265489638 --0.0688643129543 -0.303261786699 --0.0516078695655 -0.303259119391 --0.0343514252454 -0.303257517516 --0.017095286632 -0.303257018328 -0.00016097491607 -0.30325756967 -0.0174170520622 -0.303259193897 -0.0346733774058 -0.303261876106 -0.051929641515 -0.303265616298 -0.0691862767562 -0.303270429373 -0.0864429753274 -0.303276330233 -0.103700168431 -0.303283259272 -0.120957547799 -0.303291238844 -0.138215556741 -0.303300328552 -0.155473865569 -0.303304933012 -0.174693025648 -0.303300000727 -0.193913839757 -0.303290978074 -0.211172308773 -0.303283020854 -0.228430107236 -0.303276129067 -0.24568766728 -0.303270258009 -0.262944675982 -0.303265467286 -0.280201546848 -0.303261764348 -0.29745798558 -0.303259119391 -0.314714431763 -0.303257517516 -0.331970565021 -0.303257018328 -0.349226817489 -0.30325756967 -0.366482891142 -0.303259193897 -0.383739218116 -0.303261898458 -0.400995492935 -0.303265638649 -0.418252125383 -0.303270429373 -0.435508824885 -0.303276330233 -0.452766031027 -0.303283259272 -0.470023415982 -0.303291238844 -0.487281404435 -0.303300328552 -0.504539720714 -0.303304933012 -0.523758888245 -0.303300023079 -0.542979672551 -0.303291000426 -0.560238152742 -0.303283020854 -0.577495962381 -0.303276129067 -0.5947535187 -0.303270258009 -0.612010523677 -0.303265467286 -0.629267394543 -0.303261764348 -0.646523848176 -0.303259119391 -0.663780286908 -0.303257517516 -0.681036412716 -0.303257018328 -0.698292672634 -0.30325756967 -0.715548768639 -0.303259171545 -0.732805103064 -0.303261876107 -0.750061348081 -0.303265638649 -0.767317980528 -0.303270429373 -0.784574687481 -0.303276330233 -0.801831886172 -0.303283259272 -0.819089263678 -0.303291238844 -0.83634725213 -0.303300328552 -0.853605553508 -0.303304933012 -0.872824713588 -0.303300000727 -0.892045527697 -0.303290978074 -0.909304007888 -0.303283020854 -0.926561817527 -0.303276129067 -0.943819373846 -0.303270258009 -0.961076378822 -0.303265467286 -0.978333249688 -0.303261764348 -0.995589703322 -0.303259119391 -1.01284614205 -0.303257517516 -1.03010228276 -0.303257018328 -1.04735854268 -0.30325756967 -1.06461459398 -0.303259193897 -1.08187091351 -0.303261876106 -1.09912717342 -0.303265616298 -1.11638382077 -0.303270429373 -1.13364052773 -0.303276330233 -1.15089774132 -0.303283281624 -1.16815513372 -0.303291261196 -1.18541312218 -0.303300328552 -1.20267140865 -0.303304933012 -1.22189056873 -0.303300000727 -1.24111139774 -0.303290978074 -1.25836986303 -0.303282998502 -1.27562764287 -0.303276106715 -1.29288518429 -0.303270258009 -1.31014221907 -0.303265467286 -1.32739910484 -0.303261764348 -1.34465551377 -0.303259119391 -1.3619119525 -0.303257517516 -1.3791680932 -0.303257018328 -1.39642438293 -0.30325756967 -1.41368046403 -0.303259171545 -1.43093678355 -0.303261853755 -1.44819307327 -0.303265616298 -1.46544972062 -0.303270429373 -1.48270639777 -0.303276330233 -1.49996355176 -0.303283259272 -1.51722091436 -0.303291238844 -1.53447893262 -0.303300328552 -1.5517372489 -0.303304933012 -1.57095640898 -0.303300023079 -1.59017723799 -0.303291000426 -1.60743570328 -0.303282998502 -1.62469351292 -0.303276106715 -1.64195108414 -0.303270258009 -1.65920805931 -0.303265467286 -1.67646494508 -0.303261764348 -1.69372141361 -0.303259119391 -1.71097785234 -0.303257517516 -1.72823399305 -0.303257018328 -1.74549022317 -0.30325756967 -1.76274627447 -0.303259193897 -1.78000262379 -0.303261876106 -1.79725888371 -0.303265616298 -1.81451550126 -0.303270429373 -1.83177220821 -0.303276330233 -1.84902942181 -0.303283259272 -1.86628681421 -0.303291238844 -1.88354480267 -0.303300328552 -1.90080311894 -0.303304933012 -1.92002227902 -0.303300000727 -1.93924307823 -0.303290978074 -1.95650157332 -0.303283020854 -1.97375935316 -0.303276129067 -1.99101689458 -0.303270258009 -2.00827389956 -0.303265467286 -2.02553081513 -0.303261764348 -2.04278731346 -0.303259119391 -2.06004369259 -0.303257517516 -2.0772998333 -0.303257018328 -2.09455609322 -0.30325756967 -2.11181211472 -0.303259193897 -2.12906843424 -0.303261876106 -2.14632475376 -0.303265616298 -2.16358143091 -0.303270429373 -2.18083804846 -0.303276330233 -2.19809520244 -0.303283281624 -2.21535265446 -0.303291261196 -2.23261070252 -0.303300328552 -2.24986898899 -0.303304933012 -2.26908814907 -0.303300000727 -2.28830897808 -0.303290978074 -2.30556744337 -0.303283020854 -2.32282519341 -0.303276129067 -2.34008276463 -0.303270258009 -2.35733979941 -0.303265467286 -2.37459665537 -0.303261764348 -2.3918530941 -0.303259119391 -2.40910953283 -0.303257517516 -2.42636567354 -0.303257018328 -2.44362193346 -0.30325756967 -2.46087801457 -0.303259193897 -2.47813433409 -0.303261876106 -2.495390594 -0.303265616298 -2.51264727116 -0.303270429373 -2.52990400791 -0.303276330233 -2.54716122151 -0.303283259272 -2.56441855431 -0.303291238844 -2.58167648316 -0.303300328552 -2.59893476963 -0.303304933012 -2.61815392971 -0.303300000727 -2.63737475872 -0.303290978074 -2.65463322401 -0.303282998502 -2.67189103365 -0.303276106715 -2.68914860487 -0.303270258009 -2.70640563965 -0.303265467286 -2.72366249562 -0.303261764348 -2.74091887474 -0.303259119391 -2.75817537308 -0.303257517516 -2.77543151379 -0.303257018328 -2.79268777371 -0.30325756967 -2.80994391442 -0.303259171545 -2.82720023394 -0.303261876107 -2.84445649385 -0.303265638649 -2.8617131114 -0.303270429373 -2.87896978855 -0.303276330233 -2.89622700215 -0.303283259272 -2.91348433495 -0.303291238844 -2.9307423234 -0.303300328552 -2.94800066948 -0.303304933012 -2.96721982956 -0.303300023079 -2.98644059896 -0.303291022777 -3.00369906426 -0.303283020854 -3.02095687389 -0.303276106715 -3.03821438551 -0.303270258009 -3.05547142029 -0.303265489638 -3.07272833586 -0.303261786699 -3.08998477459 -0.303259119391 -3.10724121332 -0.303257517516 -3.12449741363 -0.303257018328 --3.14143160184 -0.30325756967 --3.12417554855 -0.303259193897 --3.10691922903 -0.303261876106 --3.08966296911 -0.303265616298 --3.07240635157 -0.303270429373 --3.05514967441 -0.303276330233 --3.03789246082 -0.303283259272 --3.02063512802 -0.303291238844 --3.00337713957 -0.303300328552 --2.98611879349 -0.303304933012 --2.96689963341 -0.303300000727 --2.947678864 -0.303290978074 --2.93042039871 -0.303283020854 --2.91316258907 -0.303276129067 --2.89590501785 -0.303270258009 --2.87864798307 -0.303265467286 --2.8613910675 -0.303261764348 --2.84413462877 -0.303259119391 --2.82687824965 -0.303257517516 --2.80962204933 -0.303257018328 --2.79236578941 -0.30325756967 --2.77510976791 -0.303259193897 --2.75785344839 -0.303261898458 --2.74059718847 -0.303265638649 --2.72334057093 -0.303270429373 --2.70608389377 -0.303276330233 --2.68882668018 -0.303283259272 --2.67156922817 -0.303291238844 --2.65431123972 -0.303300328552 --2.63705295324 -0.303304933012 --2.61783373356 -0.303300023079 --2.59861290455 -0.303291000426 --2.58135443926 -0.303283020854 --2.56409668922 -0.303276129067 --2.546839118 -0.303270258009 --2.52958208322 -0.303265467286 --2.51232522726 -0.303261764348 --2.49506878853 -0.303259119391 --2.4778124094 -0.303257517516 --2.46055626869 -0.303257018328 --2.44329994917 -0.30325756967 --2.42604386806 -0.303259171545 --2.40878754854 -0.303261876107 --2.39153128862 -0.303265638649 --2.37427467107 -0.303270429373 --2.35701793432 -0.303276330233 --2.33976072073 -0.303283259272 --2.32250338793 -0.303291238844 --2.30524539947 -0.303300328552 --2.287987113 -0.303304933012 --2.26876795292 -0.303300000727 --2.24954712391 -0.303290978074 --2.23228859901 -0.303283020854 --2.21503078938 -0.303276129067 --2.19777327776 -0.303270258009 --2.18051624298 -0.303265467286 --2.16325938702 -0.303261764348 --2.14600300789 -0.303259119391 --2.12874650955 -0.303257517516 --2.11149036884 -0.303257018328 --2.09423410892 -0.30325756967 --2.07697796822 -0.303259193897 --2.0597216487 -0.303261876106 --2.04246544838 -0.303265616298 --2.02520883084 -0.303270429373 --2.00795209408 -0.303276330233 --1.99069494009 -0.303283281624 --1.97343760729 -0.303291261196 --1.95617958903 -0.303300328552 --1.93892127276 -0.303304933012 --1.91970211268 -0.303300000727 --1.90048128367 -0.303290978074 --1.88322281837 -0.303282998502 --1.86596500873 -0.303276106715 --1.84870743751 -0.303270258009 --1.83145046234 -0.303265467286 --1.81419357657 -0.303261764348 --1.79693710804 -0.303259119391 --1.77968066931 -0.303257517516 --1.7624245286 -0.303257018328 --1.74516829848 -0.30325756967 --1.72791221738 -0.303259171545 --1.71065586805 -0.303261853755 --1.69339960814 -0.303265616298 --1.67614299059 -0.303270429373 --1.65888631344 -0.303276330233 --1.64162909985 -0.303283259272 --1.62437170744 -0.303291238844 --1.60711368918 -0.303300328552 --1.58985537291 -0.303304933012 --1.57063624263 -0.303300023079 --1.55141544342 -0.303291000426 --1.53415694833 -0.303282998502 --1.51689913869 -0.303276106715 --1.49964159727 -0.303270258009 --1.48238459229 -0.303265467286 --1.46512773633 -0.303261764348 --1.4478712976 -0.303259119391 --1.43061482906 -0.303257517516 --1.41335865855 -0.303257018328 --1.39610239863 -0.30325756967 --1.37884634733 -0.303259193897 --1.36159002781 -0.303261876106 --1.34433376789 -0.303265616298 --1.32707712054 -0.303270429373 --1.30982041359 -0.303276330233 --1.2925632298 -0.303283259272 --1.27530583739 -0.303291238844 --1.25804784894 -0.303300328552 --1.24078956246 -0.303304933012 --1.22157037258 -0.303300000727 --1.20234954357 -0.303290978074 --1.18509107828 -0.303283020854 --1.16783329845 -0.303276129067 --1.15057575703 -0.303270258009 --1.13331872225 -0.303265467286 --1.11606183648 -0.303261764348 --1.09880542755 -0.303259119391 --1.08154898882 -0.303257517516 --1.06429284811 -0.303257018328 --1.04703655839 -0.30325756967 --1.02978050709 -0.303259193897 --1.01252421737 -0.303261876106 --0.995267912745 -0.303265616298 --0.978011250496 -0.303270429373 --0.960754558444 -0.303276330233 --0.943497389555 -0.303283281624 --0.92624001205 -0.303291261196 --0.908981993795 -0.303300328552 --0.891723707318 -0.303304933012 --0.87250456214 -0.303300000727 --0.853283748031 -0.303290978074 --0.836025267839 -0.303283020854 --0.818767443299 -0.303276129067 --0.80150988698 -0.303270258009 --0.784252882004 -0.303265467286 --0.766996011138 -0.303261764348 --0.749739572406 -0.303259119391 --0.732483118773 -0.303257517516 --0.715226978064 -0.303257018328 --0.697970718145 -0.30325756967 --0.680714637041 -0.303259193897 --0.663458317518 -0.303261876106 --0.6462020576 -0.303265616298 --0.628945410251 -0.303270429373 --0.6116887182 -0.303276330233 --0.594431519508 -0.303283259272 --0.577174142003 -0.303291238844 --0.559916168451 -0.303300328552 --0.542657852173 -0.303304933012 --0.523438692093 -0.303300000727 --0.504217885435 -0.303290978074 --0.486959405243 -0.303282998502 --0.469701595604 -0.303276106715 --0.452444039285 -0.303270258009 --0.435187041759 -0.303265467286 --0.417930163443 -0.303261764348 --0.40067370981 -0.303259119391 --0.383417271078 -0.303257517516 --0.36616115272 -0.303257018328 --0.348904892802 -0.30325756967 --0.331648804247 -0.303259171545 --0.314392462373 -0.303261876107 --0.297136202455 -0.303265638649 --0.279879570007 -0.303270429373 --0.262622870505 -0.303276330233 --0.245365679264 -0.303283259272 --0.228108298034 -0.303291238844 --0.210850294679 -0.303300328552 --0.193591985851 -0.303304933012 --0.174372822046 -0.32065000385 --0.155145078898 -0.320640526712 --0.13788658753 -0.320632122457 --0.120628757402 -0.320624858141 --0.103371173143 -0.320618674159 --0.0861141420901 -0.320613637566 --0.0688572367653 -0.320609740913 --0.0516007626429 -0.320606946945 --0.0343442889862 -0.320605240762 --0.0170881215017 -0.32060470432 -0.000168169848622 -0.320605292916 -0.0174242763315 -0.320606999099 -0.0346806319431 -0.32060982287 -0.0519369253889 -0.320613756776 -0.0691935885697 -0.320618845522 -0.0864503160119 -0.320625051856 -0.103707538918 -0.320632353425 -0.120964948088 -0.320640787482 -0.13822298497 -0.320650368929 -0.155481319875 -0.320655219257 -0.174700215459 -0.320650026202 -0.193920768798 -0.320640526712 -0.211179278791 -0.320632122457 -0.228437107056 -0.320624858141 -0.245694682002 -0.320618674159 -0.262951716781 -0.320613637566 -0.280208617449 -0.320609740913 -0.297465085983 -0.320606946945 -0.314721561968 -0.320605240762 -0.331977732479 -0.32060470432 -0.3492340222 -0.320605292916 -0.366490118205 -0.320606999099 -0.383746467531 -0.320609845221 -0.401002772153 -0.320613779128 -0.418259434402 -0.320618845522 -0.435516163707 -0.320625051856 -0.452773399651 -0.320632353425 -0.470030806958 -0.320640787482 -0.487288825214 -0.320650368929 -0.504547163844 -0.320655219257 -0.523766070604 -0.320650026202 -0.542986616492 -0.320640526712 -0.560245126486 -0.320632122457 -0.577502965927 -0.320624858141 -0.594760552048 -0.320618674159 -0.612017586827 -0.320613615215 -0.629274487496 -0.320609718561 -0.64653095603 -0.320606946945 -0.663787424564 -0.320605263114 -0.681043580174 -0.320604726672 -0.698299869895 -0.320605292916 -0.715555980801 -0.320606999099 -0.732812330127 -0.320609845221 -0.750068619847 -0.320613779128 -0.767325282097 -0.320618845522 -0.784582033753 -0.320625051856 -0.801839262247 -0.320632353425 -0.819096654654 -0.320640787482 -0.83635468781 -0.320650368929 -0.85361301899 -0.320655219257 -0.872831910849 -0.320650026202 -0.892052471638 -0.320640526712 -0.90931096673 -0.320632122457 -0.92656879127 -0.320624858141 -0.943826377392 -0.320618674159 -0.96108341217 -0.320613637566 -0.978340327739 -0.320609740913 -0.995596811176 -0.320606946945 -1.01285329461 -0.320605263114 -1.03010946512 -0.320604726672 -1.04736575484 -0.320605292916 -1.06462183595 -0.320606999099 -1.08187815547 -0.32060982287 -1.09913444519 -0.320613756776 -1.11639112234 -0.320618845522 -1.1336478591 -0.320625051856 -1.15090510249 -0.320632353425 -1.1681625247 -0.320640787482 -1.18542054296 -0.320650368929 -1.20267885923 -0.320655219257 -1.22189775109 -0.320650026202 -1.24111831188 -0.320640526712 -1.25837680698 -0.320632122457 -1.27563464642 -0.320624858141 -1.29289221763 -0.320618674159 -1.31014925242 -0.320613637566 -1.32740619779 -0.320609740913 -1.34466263652 -0.320606946945 -1.36191907525 -0.320605263114 -1.37917524576 -0.320604726672 -1.39643156528 -0.320605292916 -1.41368767619 -0.320606999099 -1.43094402552 -0.32060982287 -1.44820034504 -0.320613756776 -1.46545702219 -0.320618845522 -1.48271372914 -0.320625051856 -1.49997091293 -0.320632353425 -1.51722830534 -0.320640787482 -1.5344863534 -0.320650368929 -1.55174469948 -0.320655219257 -1.57096362114 -0.320650026202 -1.59018421173 -0.320640526712 -1.60744270683 -0.320632122457 -1.62470051646 -0.320624858141 -1.64195808768 -0.320618674159 -1.65921509266 -0.320613637566 -1.67647200823 -0.320609740913 -1.69372850657 -0.320606946945 -1.7109849751 -0.320605263114 -1.72824114561 -0.320604726672 -1.74549743533 -0.320605292916 -1.76275351644 -0.320606999099 -1.78000989556 -0.32060982287 -1.79726618528 -0.320613756776 -1.81452283263 -0.320618845522 -1.83177956939 -0.320625051856 -1.84903678298 -0.320632353425 -1.86629420519 -0.320640787482 -1.88355222344 -0.320650368929 -1.90081056952 -0.320655219257 -1.92002946138 -0.320650026202 -1.93924999237 -0.320640526712 -1.95650851727 -0.320632122457 -1.97376635671 -0.320624858141 -1.99102395773 -0.320618674159 -2.00828096271 -0.320613637566 -2.02553784848 -0.320609740913 -2.04279434681 -0.320606946945 -2.06005078554 -0.320605263114 -2.07730698586 -0.320604726672 -2.09456330538 -0.320605292916 -2.11181932688 -0.320606999099 -2.129075706 -0.32060982287 -2.14633208513 -0.320613756776 -2.16358870268 -0.320618845522 -2.18084537983 -0.320625051856 -2.19810259342 -0.320632353425 -2.21536004543 -0.320640787482 -2.23261809349 -0.320650368929 -2.24987637997 -0.320655219257 -2.26909530163 -0.320650026202 -2.28831589222 -0.320640526712 -2.30557441712 -0.320632122457 -2.32283222675 -0.320624858141 -2.34008979797 -0.320618674159 -2.35734683275 -0.320613637566 -2.37460374832 -0.320609740913 -2.39186024666 -0.320606946945 -2.40911674499 -0.320605263114 -2.4263728857 -0.320604726672 -2.44362914562 -0.320605292916 -2.46088528633 -0.320606999099 -2.47814160585 -0.32060982287 -2.49539786577 -0.320613756776 -2.51265454292 -0.320618845522 -2.52991127968 -0.320625051856 -2.54716855288 -0.320632353425 -2.56442594528 -0.320640787482 -2.58168393373 -0.320650368929 -2.59894222021 -0.320655219257 -2.61816108227 -0.320650026202 -2.63738167286 -0.320640526712 -2.65464019775 -0.320632122457 -2.67189800739 -0.320624858141 -2.68915557861 -0.320618674159 -2.706412673 -0.320613637566 -2.72366958857 -0.320609740913 -2.7409260273 -0.320606946945 -2.75818252564 -0.320605263114 -2.77543866634 -0.320604726672 -2.79269492626 -0.320605292916 -2.80995106697 -0.320606999099 -2.8272074461 -0.320609845221 -2.84446376562 -0.320613779128 -2.86172044277 -0.320618845522 -2.87897717953 -0.320625051856 -2.89623439312 -0.320632353425 -2.91349172592 -0.320640787482 -2.93074977398 -0.320650368929 -2.94800817966 -0.320655196905 -2.96722710132 -0.32065000385 -2.98644757271 -0.320640526712 -3.00370597839 -0.320632122457 -3.02096384764 -0.320624858141 -3.03822147847 -0.320618674159 -3.05547851324 -0.320613637566 -3.07273536921 -0.320609740913 -3.08999180794 -0.320606946945 -3.10724830628 -0.320605240762 -3.12450456619 -0.32060470432 --3.14142444928 -0.320605292916 --3.124168396 -0.320606999099 --3.10691201687 -0.32060982287 --3.08965569735 -0.320613756776 --3.07239902019 -0.320618845522 --3.05514228344 -0.320625051856 --3.03788506985 -0.320632353425 --3.02062773705 -0.320640787482 --3.00336968899 -0.320650368929 --2.9861112833 -0.320655219257 --2.96689236164 -0.320650026202 --2.94767189026 -0.320640526712 --2.93041342497 -0.320632122457 --2.91315555572 -0.320624858141 --2.8958979845 -0.320618674159 --2.87864094972 -0.320613637566 --2.86138403415 -0.320609740913 --2.84412759542 -0.320606946945 --2.82687115669 -0.320605240762 --2.80961489677 -0.32060470432 --2.79235857725 -0.320605292916 --2.77510255575 -0.320606999099 --2.75784623623 -0.320609845221 --2.74058991671 -0.320613779128 --2.72333323956 -0.320618845522 --2.7060765028 -0.320625051856 --2.68881928921 -0.320632353425 --2.6715618372 -0.320640787482 --2.65430378914 -0.320650368929 --2.63704550266 -0.320655219257 --2.617826581 -0.320650026202 --2.59860599041 -0.320640526712 --2.58134746551 -0.320632122457 --2.56408965587 -0.320624858141 --2.54683208465 -0.320618674159 --2.52957504988 -0.320613615215 --2.51231813431 -0.320609718561 --2.49506163597 -0.320606946945 --2.47780519724 -0.320605263114 --2.46054905653 -0.320604726672 --2.443292737 -0.320605292916 --2.4260365963 -0.320606999099 --2.40878027678 -0.320609845221 --2.39152401686 -0.320613779128 --2.37426739931 -0.320618845522 --2.35701066256 -0.320625051856 --2.33975338936 -0.320632353425 --2.32249599695 -0.320640787482 --2.30523794889 -0.320650368929 --2.28797960281 -0.320655219257 --2.26876074076 -0.320650026202 --2.24954020977 -0.320640526712 --2.23228168487 -0.320632122457 --2.21502387523 -0.320624858141 --2.19776630401 -0.320618674159 --2.18050920963 -0.320613637566 --2.16325229406 -0.320609740913 --2.14599585533 -0.320606946945 --2.128739357 -0.320605263114 --2.11148321629 -0.320604726672 --2.09422695636 -0.320605292916 --2.07697081566 -0.320606999099 --2.05971443653 -0.32060982287 --2.04245817661 -0.320613756776 --2.02520149946 -0.320618845522 --2.0079447329 -0.320625051856 --1.99068754911 -0.320632353425 --1.97343015671 -0.320640787482 --1.95617210865 -0.320650368929 --1.93891376257 -0.320655219257 --1.91969487071 -0.320650026202 --1.90047430992 -0.320640526712 --1.88321581483 -0.320632122457 --1.86595800519 -0.320624858141 --1.84870043397 -0.320618674159 --1.83144342899 -0.320613637566 --1.81418651342 -0.320609740913 --1.79693001509 -0.320606946945 --1.77967354655 -0.320605263114 --1.76241737604 -0.320604726672 --1.74516108632 -0.320605292916 --1.72790497541 -0.320606999099 --1.71064859629 -0.32060982287 --1.69339230657 -0.320613756776 --1.67613565922 -0.320618845522 --1.65887892246 -0.320625051856 --1.64162170887 -0.320632353425 --1.62436431646 -0.320640787482 --1.60710626841 -0.320650368929 --1.58984792233 -0.320655219257 --1.57062903046 -0.320650026202 --1.55140849948 -0.320640526712 --1.53415000439 -0.320632122457 --1.51689216495 -0.320624858141 --1.49963456392 -0.320618674159 --1.48237752914 -0.320613637566 --1.46512064338 -0.320609740913 --1.44786417484 -0.320606946945 --1.4306076765 -0.320605263114 --1.41335147619 -0.320604726672 --1.39609521627 -0.320605292916 --1.37883913517 -0.320606999099 --1.36158278585 -0.32060982287 --1.34432649612 -0.320613756776 --1.32706981898 -0.320618845522 --1.30981308222 -0.320625051856 --1.29255583882 -0.320632353425 --1.27529844642 -0.320640787482 --1.25804042816 -0.320650368929 --1.24078208208 -0.320655219257 --1.22156319022 -0.320650026202 --1.20234262943 -0.320640526712 --1.18508413434 -0.320632122457 --1.1678263247 -0.320624858141 --1.15056875348 -0.320618674159 --1.1333116889 -0.320613637566 --1.11605474353 -0.320609740913 --1.0987983048 -0.320606946945 --1.08154186606 -0.320605263114 --1.06428569555 -0.320604726672 --1.04702937603 -0.320605292916 --1.02977326513 -0.320606999099 --1.0125169158 -0.32060982287 --0.995260611176 -0.320613756776 --0.978003948927 -0.320618845522 --0.960747212171 -0.320625051856 --0.94349001348 -0.320632353425 --0.926232606173 -0.320640787482 --0.908974543214 -0.320650368929 --0.891716226935 -0.320655219257 --0.872497349977 -0.320650026202 --0.85327680409 -0.320640526712 --0.836018294096 -0.320632122457 --0.818760439753 -0.320624858141 --0.801502853632 -0.320618674159 --0.784245848656 -0.320613637566 --0.766988947988 -0.320609740913 --0.749732464552 -0.320606946945 --0.732475981116 -0.320605263114 --0.715219795704 -0.320604726672 --0.697963520884 -0.320605292916 --0.680707424879 -0.320606999099 --0.663451060653 -0.32060982287 --0.646194770932 -0.320613756776 --0.628938108683 -0.320618845522 --0.611681386829 -0.320625051856 --0.594424158335 -0.320632353425 --0.577166751027 -0.320640787482 --0.559908732772 -0.320650368929 --0.542650401592 -0.320655219257 --0.523431509733 -0.320650026202 --0.504210956395 -0.320640526712 --0.48695243895 -0.320632122457 --0.469694599509 -0.320624858141 --0.452437020838 -0.320618674159 --0.43517998606 -0.320613637566 --0.417923085392 -0.320609740913 --0.400666616857 -0.320606946945 --0.383410148323 -0.320605263114 --0.366153985262 -0.320604726672 --0.348897688091 -0.320605292916 --0.331641577184 -0.320606999099 --0.314385205507 -0.320609845221 --0.297128915787 -0.320613779128 --0.279872260988 -0.320618845522 --0.262615524233 -0.320625051856 --0.245358299464 -0.320632353425 --0.228100895882 -0.320640787482 --0.210842870176 -0.320650368929 --0.193584531546 -0.320655196905 --0.174365624785 -0.33798263967 --0.15513817966 -0.337972693146 --0.137879654765 -0.337963856757 --0.12062179856 -0.337956205011 --0.103364186362 -0.337949723005 --0.0861071273685 -0.337944447994 --0.0688501950354 -0.337940350175 --0.0515936901793 -0.337937414646 --0.0343371867202 -0.337935648859 --0.0170809898991 -0.337935082615 -0.000175330787898 -0.337935678661 -0.0174314666074 -0.337937481702 -0.0346878515556 -0.337940454483 -0.0519441757351 -0.337944597006 -0.069200870581 -0.337949939072 -0.0864576287568 -0.337956443429 -0.103714881465 -0.337964124978 -0.120972320437 -0.337972968817 -0.138230383396 -0.337983004749 -0.155488748103 -0.337988108396 -0.174707382917 -0.337982662022 -0.193927668035 -0.337972693146 -0.211186204105 -0.337963856757 -0.228444062173 -0.337956205011 -0.245701666921 -0.337949723005 -0.262958727777 -0.337944447994 -0.280215658247 -0.337940350175 -0.297472164035 -0.337937414646 -0.314728669822 -0.337935626507 -0.331984862685 -0.337935060263 -0.349241182208 -0.337935678661 -0.366497308016 -0.337937481702 -0.383753687143 -0.337940454483 -0.401010029018 -0.337944597006 -0.41826672852 -0.337949939072 -0.435523480177 -0.337956443429 -0.452780731023 -0.337964124978 -0.470038168132 -0.337972968817 -0.487296223641 -0.337983004749 -0.504554592073 -0.337988108396 -0.523773223161 -0.337982662022 -0.54299351573 -0.337972693146 -0.560252070427 -0.337963879109 -0.57750992477 -0.337956227362 -0.594767540693 -0.337949723005 -0.612024605274 -0.337944425642 -0.629281520844 -0.337940327823 -0.646538019181 -0.337937414646 -0.663794532418 -0.337935648859 -0.681050732732 -0.337935082615 -0.698307052255 -0.337935678661 -0.715563163161 -0.337937481702 -0.732819527388 -0.337940454483 -0.750075861811 -0.337944597006 -0.767332568764 -0.337949939072 -0.784589350223 -0.337956443429 -0.801846593618 -0.337964124978 -0.819104000926 -0.337972991168 -0.836362078786 -0.3379830271 -0.85362046957 -0.337988108396 -0.872839078307 -0.337982662022 -0.892059355975 -0.337972693146 -0.909317910671 -0.337963879109 -0.926575765014 -0.337956227362 -0.943833351135 -0.337949723005 -0.961090400815 -0.337944447994 -0.978347346186 -0.337940350175 -0.995603859425 -0.337937414646 -1.01286038756 -0.337935648859 -1.03011658788 -0.337935082615 -1.0473729074 -0.337935678661 -1.06462901831 -0.337937481702 -1.08188536763 -0.337940454483 -1.09914171696 -0.337944597006 -1.11639842391 -0.337949939072 -1.13365516067 -0.337956443429 -1.15091240406 -0.337964110077 -1.16816985607 -0.337972953916 -1.18542793393 -0.337983004749 -1.20268630982 -0.337988108396 -1.22190493345 -0.337982662022 -1.24112522602 -0.337972693146 -1.25838375091 -0.337963856757 -1.27564162016 -0.337956205011 -1.29289922118 -0.337949723005 -1.31015625596 -0.337944447994 -1.32741323113 -0.337940350175 -1.34466972947 -0.337937414646 -1.361926198 -0.33793567121 -1.37918239832 -0.337935104966 -1.39643871784 -0.337935678661 -1.41369485855 -0.337937481702 -1.43095126748 -0.337940454483 -1.448207587 -0.337944574654 -1.46546426416 -0.33794991672 -1.48272103072 -0.337956443429 -1.49997827411 -0.337964110077 -1.51723569632 -0.337972976268 -1.53449377418 -0.3379830271 -1.55175215006 -0.337988108396 -1.5709708035 -0.337982662022 -1.59019109607 -0.337972693146 -1.60744962096 -0.337963856757 -1.6247074604 -0.337956227362 -1.64196506143 -0.337949745357 -1.65922212601 -0.337944447994 -1.67647904158 -0.337940350175 -1.69373553991 -0.337937414646 -1.71099206805 -0.337935648859 -1.72824826837 -0.337935082615 -1.74550458789 -0.337935678661 -1.7627607286 -0.337937481702 -1.78001710772 -0.337940454483 -1.79727342724 -0.337944597006 -1.8145301342 -0.337949939072 -1.83178690076 -0.337956443429 -1.84904414415 -0.337964124978 -1.86630159617 -0.337972968817 -1.88355964422 -0.337983004749 -1.9008179903 -0.337988108396 -1.92003661394 -0.337982662022 -1.93925690651 -0.337972693146 -1.95651546121 -0.337963856757 -1.97377333045 -0.337956205011 -1.99103093147 -0.337949723005 -2.00828796625 -0.337944447994 -2.02554488182 -0.337940350175 -2.04280138016 -0.337937414646 -2.06005787849 -0.337935648859 -2.07731407881 -0.337935082615 -2.09457045794 -0.337935678661 -2.11182659864 -0.337937481702 -2.12908297777 -0.337940454483 -2.14633929729 -0.337944597006 -2.16359597444 -0.337949939072 -2.1808527708 -0.337956443429 -2.1981099844 -0.337964124978 -2.21536743641 -0.337972968817 -2.23262548446 -0.337983004749 -2.24988377094 -0.337988108396 -2.26910245419 -0.337982662022 -2.28832280636 -0.337972693146 -2.30558133125 -0.337963856757 -2.32283914089 -0.337956205011 -2.34009671211 -0.337949723005 -2.35735380649 -0.337944447994 -2.37461078167 -0.337940350175 -2.39186728001 -0.337937414646 -2.40912377834 -0.33793567121 -2.42637997866 -0.337935104966 -2.44363629818 -0.337935678661 -2.46089243889 -0.337937481702 -2.47814881801 -0.337940454483 -2.49540513754 -0.337944597006 -2.51266181469 -0.337949939072 -2.52991855144 -0.337956421077 -2.54717582464 -0.337964087725 -2.56443327665 -0.337972953916 -2.58169138432 -0.337983004749 -2.59894967079 -0.337988108396 -2.61816823483 -0.337982662022 -2.637388587 -0.337972693146 -2.65464711189 -0.337963856757 -2.67190498114 -0.337956205011 -2.68916261196 -0.337949723005 -2.70641964674 -0.337944447994 -2.72367662192 -0.337940350175 -2.74093312025 -0.337937414646 -2.75818961859 -0.33793567121 -2.7754458189 -0.337935104966 -2.79270207882 -0.337935678661 -2.80995821953 -0.337937481702 -2.82721459865 -0.337940454483 -2.84447097778 -0.337944597006 -2.86172771454 -0.337949939072 -2.87898445129 -0.337956443429 -2.89624172449 -0.337964110077 -2.9134991169 -0.337972953916 -2.93075716496 -0.337983004749 -2.94801557064 -0.337988086044 -2.96723419428 -0.33798263967 -2.98645442724 -0.337972693146 -3.00371295214 -0.337963856757 -3.02097088099 -0.337956205011 -3.03822851181 -0.337949723005 -3.05548554659 -0.337944447994 -3.07274246216 -0.337940350175 -3.0899989605 -0.337937414646 -3.10725545883 -0.337935648859 -3.12451165914 -0.337935082615 --3.14141735633 -0.337935678661 --3.12416124344 -0.337937481702 --3.10690480471 -0.337940454483 --3.08964842558 -0.337944597006 --3.07239174843 -0.337949939072 --3.05513501167 -0.337956443429 --3.03787773847 -0.337964124978 --3.02062034607 -0.337972968817 --3.00336229801 -0.337983004749 --2.98610389233 -0.337988108396 --2.96688520908 -0.337982662022 --2.94766497612 -0.337972693146 --2.93040645123 -0.337963856757 --2.91314852238 -0.337956205011 --2.89589095116 -0.337949723005 --2.87863391638 -0.337944447994 --2.86137700081 -0.337940350175 --2.84412050247 -0.337937414646 --2.82686400414 -0.337935626507 --2.80960780382 -0.337935060263 --2.79235142469 -0.337935678661 --2.77509534359 -0.337937481702 --2.75783902407 -0.337940454483 --2.74058264494 -0.337944597006 --2.72332590819 -0.337949939072 --2.70606917143 -0.337956443429 --2.68881195784 -0.337964124978 --2.67155450582 -0.337972968817 --2.65429645777 -0.337983004749 --2.63703811169 -0.337988108396 --2.61781942844 -0.337982662022 --2.59859907627 -0.337972693146 --2.58134055137 -0.337963879109 --2.56408274174 -0.337956227362 --2.54682517052 -0.337949723005 --2.52956807613 -0.337944425642 --2.51231110096 -0.337940327823 --2.49505460262 -0.337937414646 --2.47779810429 -0.337935648859 --2.46054190397 -0.337935082615 --2.44328558445 -0.337935678661 --2.42602944374 -0.337937481702 --2.40877306462 -0.337940454483 --2.3915168047 -0.337944597006 --2.37426012755 -0.337949939072 --2.35700333119 -0.337956443429 --2.33974611759 -0.337964124978 --2.32248866558 -0.337972991168 --2.30523049832 -0.3379830271 --2.28797209263 -0.337988108396 --2.2687535286 -0.337982662022 --2.24953329563 -0.337972693146 --2.23227477073 -0.337963879109 --2.2150169611 -0.337956227362 --2.19775933027 -0.337949723005 --2.18050223589 -0.337944447994 --2.16324532032 -0.337940350175 --2.14598882198 -0.337937414646 --2.12873226404 -0.337935648859 --2.11147606373 -0.337935082615 --2.09421980381 -0.337935678661 --2.0769636631 -0.337937481702 --2.05970728398 -0.337940454483 --2.04245096445 -0.337944597006 --2.0251942277 -0.337949939072 --2.00793746114 -0.337956443429 --1.99068021774 -0.337964110077 --1.97342276573 -0.337972953916 --1.95616468787 -0.337983004749 --1.93890631199 -0.337988108396 --1.91968768835 -0.337982662022 --1.90046742558 -0.337972693146 --1.88320890069 -0.337963856757 --1.86595103145 -0.337956205011 --1.84869343042 -0.337949723005 --1.83143639564 -0.337944447994 --1.81417948007 -0.337940350175 --1.79692298174 -0.337937414646 --1.7796664536 -0.33793567121 --1.76241022348 -0.337935104966 --1.74515390396 -0.337935678661 --1.72789776325 -0.337937481702 --1.71064138412 -0.337940454483 --1.6933850944 -0.337944574654 --1.67612838745 -0.33794991672 --1.65887159109 -0.337956443429 --1.6416143477 -0.337964110077 --1.62435692549 -0.337972976268 --1.60709887743 -0.3379830271 --1.58984053135 -0.337988108396 --1.57062187791 -0.337982662022 --1.55140158534 -0.337972693146 --1.53414306044 -0.337963856757 --1.5168851912 -0.337956227362 --1.49962756038 -0.337949745357 --1.4823704958 -0.337944447994 --1.46511358022 -0.337940350175 --1.44785708189 -0.337937414646 --1.43060058355 -0.337935648859 --1.41334438324 -0.337935082615 --1.39608806372 -0.337935678661 --1.37883195281 -0.337937481702 --1.36157557368 -0.337940454483 --1.34431922436 -0.337944597006 --1.32706254721 -0.337949939072 --1.30980581045 -0.337956443429 --1.29254853725 -0.337964124978 --1.27529111504 -0.337972968817 --1.25803303719 -0.337983004749 --1.2407746315 -0.337988108396 --1.22155600786 -0.337982662022 --1.20233571529 -0.337972693146 --1.1850771904 -0.337963856757 --1.16781935095 -0.337956205011 --1.15056174993 -0.337949723005 --1.13330468535 -0.337944447994 --1.11604771018 -0.337940350175 --1.09879124165 -0.337937414646 --1.08153477311 -0.337935648859 --1.06427854299 -0.337935082615 --1.04702219367 -0.337935678661 --1.02976605296 -0.337937481702 --1.01250970363 -0.337940454483 --0.995253384113 -0.337944597006 --0.97799667716 -0.337949939072 --0.960739910603 -0.337956443429 --0.943482652307 -0.337964124978 --0.926225215197 -0.337972968817 --0.908967152238 -0.337983004749 --0.891708791256 -0.337988108396 --0.872490167618 -0.337982662022 --0.853269889951 -0.337972693146 --0.836011350155 -0.337963856757 --0.818753495813 -0.337956205011 --0.80149589479 -0.337949723005 --0.784238830209 -0.337944447994 --0.766981899738 -0.337940350175 --0.7497253865 -0.337937414646 --0.732468873262 -0.33793567121 --0.715212672949 -0.337935104966 --0.697956353426 -0.337935678661 --0.680700227618 -0.337937481702 --0.663443848491 -0.337940454483 --0.646187528968 -0.337944597006 --0.628930822015 -0.337949939072 --0.611674070358 -0.337956421077 --0.594416826963 -0.337964087725 --0.577159374952 -0.337972953916 --0.559901311994 -0.337983004749 --0.542642980814 -0.337988108396 --0.523424357176 -0.337982662022 --0.504204049707 -0.337972693146 --0.48694550246 -0.337963856757 --0.469687633216 -0.337956205011 --0.452430039644 -0.337949723005 --0.435172975063 -0.337944447994 --0.417916037142 -0.337940350175 --0.400659546256 -0.337937414646 --0.383403047919 -0.33793567121 --0.366146847606 -0.337935104966 --0.348890513182 -0.337935678661 --0.331634379923 -0.337937481702 --0.314377993345 -0.337940454483 --0.297121673822 -0.337944597006 --0.279864989221 -0.337949939072 --0.262608222664 -0.337956443429 --0.245350964368 -0.337964110077 --0.228093527258 -0.337972953916 --0.21083547175 -0.337983004749 --0.193577107042 -0.337988086044 --0.174358464777 -0.355328932404 --0.155130922794 -0.355318494141 --0.137872356922 -0.35530924052 --0.120614465326 -0.355301231146 --0.103356825188 -0.355294466019 --0.0860997401178 -0.355288952589 --0.0688427779824 -0.355284638703 --0.051586243324 -0.355281569064 --0.0343297086656 -0.355279751122 --0.0170734813437 -0.355279147625 -0.000182869145648 -0.355279766023 -0.0174390363973 -0.355281665921 -0.0346954525448 -0.355284757912 -0.0519518069923 -0.355289101601 -0.0692085344344 -0.355294704437 -0.0864653233439 -0.355301514268 -0.103722605854 -0.355309568345 -0.120980072766 -0.355318821966 -0.138238161802 -0.355329312384 -0.155496560037 -0.355334639549 -0.174714922905 -0.355328932404 -0.193934932351 -0.355318494141 -0.211193490773 -0.35530924052 -0.228451378643 -0.355301231146 -0.245709016919 -0.355294466019 -0.262966103852 -0.355288952589 -0.280223071575 -0.355284638703 -0.297479614615 -0.355281569064 -0.314736157656 -0.35527972877 -0.33199237287 -0.355279125273 -0.349248714745 -0.355279766023 -0.366504877806 -0.355281665921 -0.383761286736 -0.355284757912 -0.401017650962 -0.355289101601 -0.418274372816 -0.355294704437 -0.435531161725 -0.355301514268 -0.452788449824 -0.355309568345 -0.470045924187 -0.355318821966 -0.487304016948 -0.355329312384 -0.504562415183 -0.355334639549 -0.523780763149 -0.355328932404 -0.543000772595 -0.355318494141 -0.560259357095 -0.355309262872 -0.577517241239 -0.355301253498 -0.594774886966 -0.355294466019 -0.612031966448 -0.355288952589 -0.629288911819 -0.355284638703 -0.64654545486 -0.355281569064 -0.6638019979 -0.35527972877 -0.681058242917 -0.355279125273 -0.698314607143 -0.355279766023 -0.715570747852 -0.355281665921 -0.732827141881 -0.355284780264 -0.750083506107 -0.355289123952 -0.767340242863 -0.355294704437 -0.784597039223 -0.355301514268 -0.80185431242 -0.355309568345 -0.819111764431 -0.355318844318 -0.836369857192 -0.355329357088 -0.853628277779 -0.355334661901 -0.872846633196 -0.355328932404 -0.892066627741 -0.355318494141 -0.90932521224 -0.355309262872 -0.926583096385 -0.355301253498 -0.943840712309 -0.355294466019 -0.961097806692 -0.355288952589 -0.978354766965 -0.355284638703 -0.995611295105 -0.355281569064 -1.01286786795 -0.35527972877 -1.03012409806 -0.355279125273 -1.04738041758 -0.355279766023 -1.06463658809 -0.355281665921 -1.08189299702 -0.355284780264 -1.09914934635 -0.355289123952 -1.11640611291 -0.355294704437 -1.13366287947 -0.355301514268 -1.15092012286 -0.355309553444 -1.16817760468 -0.355318807066 -1.18543571234 -0.355329312384 -1.20269411802 -0.355334639549 -1.22191247344 -0.355328932404 -1.24113249779 -0.355318494141 -1.25839105248 -0.35530924052 -1.27564895153 -0.355301231146 -1.29290658236 -0.355294466019 -1.31016364693 -0.355288952589 -1.32742062211 -0.355284638703 -1.34467718005 -0.355281569064 -1.36193370819 -0.355279751122 -1.3791899085 -0.355279147625 -1.39644625783 -0.355279766023 -1.41370242834 -0.355281665921 -1.43095886707 -0.355284780264 -1.4482152164 -0.355289101601 -1.46547192335 -0.355294682086 -1.48272871971 -0.355301514268 -1.49998599291 -0.355309553444 -1.51724347472 -0.355318829417 -1.53450158238 -0.355329357088 -1.55175998807 -0.355334661901 -1.57097834349 -0.355328932404 -1.59019833803 -0.355318494141 -1.60745689273 -0.355309262872 -1.62471476197 -0.355301275849 -1.6419724226 -0.355294488371 -1.65922951698 -0.355288952589 -1.67648646235 -0.355284638703 -1.69374299049 -0.355281569064 -1.71099954844 -0.35527972877 -1.72825577855 -0.355279125273 -1.74551209807 -0.355279766023 -1.76276829839 -0.355281665921 -1.78002470732 -0.355284780264 -1.79728105664 -0.355289123952 -1.8145377934 -0.355294704437 -1.83179458976 -0.355301514268 -1.84905189276 -0.355309568345 -1.86630934477 -0.355318821966 -1.88356742263 -0.355329312384 -1.90082582831 -0.355334639549 -1.92004418373 -0.355328932404 -1.93926417828 -0.355318494141 -1.95652276278 -0.35530924052 -1.97378066182 -0.355301231146 -1.99103826284 -0.355294466019 -2.00829532742 -0.355288952589 -2.0255523324 -0.355284638703 -2.04280889034 -0.355281569064 -2.06006538868 -0.35527972877 -2.07732158899 -0.355279125273 -2.09457796812 -0.355279766023 -2.11183416844 -0.355281665921 -2.12909054756 -0.355284757912 -2.14634686708 -0.355289101601 -2.16360366344 -0.355294704437 -2.18086051941 -0.355301514268 -2.198117733 -0.355309568345 -2.21537518502 -0.355318821966 -2.23263329268 -0.355329312384 -2.24989163875 -0.355334639549 -2.26911002398 -0.355328932404 -2.28833007813 -0.355318494141 -2.30558860302 -0.35530924052 -2.32284647227 -0.355301231146 -2.34010410309 -0.355294466019 -2.35736119747 -0.355288952589 -2.37461817264 -0.355284661055 -2.39187467098 -0.355281591415 -2.40913116932 -0.355279751122 -2.42638742924 -0.355279147625 -2.44364380837 -0.355279766023 -2.46089994908 -0.355281665921 -2.47815638781 -0.355284780264 -2.49541276693 -0.355289123952 -2.51266950369 -0.355294704437 -2.52992630005 -0.355301491916 -2.54718351364 -0.355309531093 -2.56444096566 -0.355318807066 -2.58169913292 -0.355329334736 -2.598957479 -0.355334661901 -2.61817580462 -0.355328932404 -2.63739585877 -0.355318494141 -2.65465438366 -0.35530924052 -2.6719123125 -0.355301231146 -2.68917000294 -0.355294466019 -2.70642703772 -0.355288930237 -2.72368401289 -0.355284638703 -2.74094057083 -0.355281591415 -2.75819712877 -0.355279751122 -2.77545332908 -0.355279147625 -2.79270964861 -0.355279766023 -2.80996584892 -0.355281665921 -2.82722222805 -0.355284757912 -2.84447860717 -0.355289101601 -2.86173534393 -0.355294704437 -2.87899208069 -0.355301514268 -2.89624941349 -0.355309553444 -2.91350686551 -0.355318807066 -2.93076491356 -0.355329312384 -2.94802337885 -0.355334639549 -2.96724170447 -0.355328932404 -2.9864616394 -0.355318494141 -3.00372028351 -0.35530924052 -3.02097821235 -0.355301231146 -3.03823584318 -0.355294466019 -3.05549293756 -0.355288952589 -3.07274991274 -0.355284638703 -3.09000647068 -0.355281569064 -3.10726296901 -0.355279751122 -3.12451916933 -0.355279147625 --3.14140978654 -0.355279766023 --3.12415361405 -0.355281665921 --3.10689717531 -0.355284757912 --3.08964079618 -0.355289101601 --3.07238411903 -0.355294704437 --3.05512738227 -0.355301514268 --3.03787004947 -0.355309568345 --3.02061253786 -0.355318821966 --3.0033544898 -0.355329312384 --2.98609608412 -0.355334639549 --2.9668776989 -0.355328932404 --2.94765776396 -0.355318494141 --2.93039917946 -0.35530924052 --2.91314125061 -0.355301231146 --2.89588361978 -0.355294466019 --2.8786265254 -0.355288952589 --2.86136955023 -0.355284638703 --2.84411299229 -0.355281569064 --2.82685649395 -0.35527972877 --2.80960029364 -0.355279125273 --2.79234391451 -0.355279766023 --2.7750877738 -0.355281665921 --2.75783139467 -0.355284757912 --2.74057501554 -0.355289101601 --2.72331827879 -0.355294704437 --2.70606154203 -0.355301514268 --2.68880426883 -0.355309568345 --2.67154675722 -0.355318821966 --2.65428864956 -0.355329312384 --2.63703024387 -0.355334639549 --2.61781185865 -0.355328932404 --2.5985918045 -0.355318494141 --2.58133327961 -0.355309262872 --2.56407541037 -0.355301253498 --2.54681777954 -0.355294466019 --2.52956068516 -0.355288952589 --2.51230370999 -0.355284638703 --2.49504721165 -0.355281569064 --2.47779071331 -0.35527972877 --2.46053445339 -0.355279125273 --2.44327807427 -0.355279766023 --2.42602193355 -0.355281665921 --2.40876549482 -0.355284780264 --2.3915091753 -0.355289123952 --2.37425243854 -0.355294704437 --2.35699558258 -0.355301514268 --2.33973836899 -0.355309568345 --2.32248091698 -0.355318844318 --2.30522274971 -0.355329357088 --2.28796434402 -0.355334661901 --2.26874601841 -0.355328932404 --2.24952602386 -0.355318494141 --2.23226743937 -0.355309262872 --2.21500957012 -0.355301253498 --2.1977519393 -0.355294466019 --2.18049484492 -0.355288952589 --2.16323792935 -0.355284638703 --2.14598143101 -0.355281569064 --2.12872481346 -0.35527972877 --2.11146855354 -0.355279125273 --2.09421229363 -0.355279766023 --2.07695609331 -0.355281665921 --2.05969965458 -0.355284780264 --2.04244327545 -0.355289123952 --2.0251865387 -0.355294704437 --2.00792980194 -0.355301514268 --1.99067252875 -0.355309553444 --1.97341504693 -0.355318807066 --1.95615690946 -0.355329312384 --1.93889850378 -0.355334639549 --1.91968014836 -0.355328932404 --1.90046015381 -0.355318494141 --1.88320159912 -0.35530924052 --1.86594370007 -0.355301231146 --1.84868606925 -0.355294466019 --1.83142897487 -0.355288952589 --1.81417202949 -0.355284638703 --1.79691553116 -0.355281569064 --1.77965897322 -0.355279751122 --1.7624027133 -0.355279147625 --1.74514636397 -0.355279766023 --1.72789019346 -0.355281665921 --1.71063381433 -0.355284780264 --1.69337746501 -0.355289101601 --1.67612069846 -0.355294682086 --1.6588639021 -0.355301514268 --1.64160662889 -0.355309553444 --1.62434917688 -0.355318829417 --1.60709109902 -0.355329357088 --1.58983269334 -0.355334661901 --1.57061433792 -0.355328932404 --1.55139434338 -0.355318494141 --1.53413575888 -0.355309262872 --1.51687785983 -0.355301275849 --1.49962022901 -0.355294488371 --1.48236313462 -0.355288952589 --1.46510615945 -0.355284638703 --1.44784963131 -0.355281569064 --1.43059313297 -0.35527972877 --1.41333690286 -0.355279125273 --1.39608052373 -0.355279766023 --1.37882438302 -0.355281665921 --1.36156797409 -0.355284780264 --1.34431159497 -0.355289123952 --1.32705488801 -0.355294704437 --1.30979812146 -0.355301514268 --1.29254081845 -0.355309568345 --1.27528333664 -0.355318821966 --1.25802522898 -0.355329312384 --1.24076682329 -0.355334639549 --1.22154846787 -0.355328932404 --1.20232844353 -0.355318494141 --1.18506988883 -0.35530924052 --1.16781198979 -0.355301231146 --1.15055435896 -0.355294466019 --1.13329729438 -0.355288952589 --1.1160403192 -0.355284638703 --1.09878379106 -0.355281569064 --1.08152726293 -0.35527972877 --1.06427103281 -0.355279125273 --1.04701465368 -0.355279766023 --1.02975848317 -0.355281665921 --1.01250210404 -0.355284757912 --0.995245739818 -0.355289101601 --0.977989003062 -0.355294704437 --0.960732221604 -0.355301514268 --0.943474933505 -0.355309568345 --0.926217466593 -0.355318821966 --0.908959373832 -0.355329312384 --0.891700983048 -0.355334639549 --0.872482642531 -0.355328932404 --0.853262647986 -0.355318494141 --0.836004063487 -0.35530924052 --0.818746164441 -0.355301231146 --0.801488548517 -0.355294466019 --0.784231439233 -0.355288952589 --0.76697447896 -0.355284661055 --0.749717935919 -0.355281591415 --0.732461392879 -0.355279751122 --0.715205192566 -0.355279147625 --0.69794884324 -0.355279766023 --0.680692672729 -0.355281665921 --0.663436248898 -0.355284780264 --0.646179899573 -0.355289123952 --0.628923177719 -0.355294704437 --0.611666381359 -0.355301491916 --0.594409108162 -0.355309531093 --0.577151626349 -0.355318807066 --0.559893518686 -0.355329334736 --0.542635142803 -0.355334661901 --0.523416787386 -0.355328932404 --0.50419677049 -0.355318494141 --0.486938208341 -0.35530924052 --0.469680309295 -0.355301231146 --0.45242267102 -0.355294466019 --0.435165584087 -0.355288930237 --0.417908623815 -0.355284638703 --0.400652095675 -0.355281591415 --0.383395560086 -0.355279751122 --0.36613932997 -0.355279147625 --0.348882973194 -0.355279766023 --0.331626817584 -0.355281665921 --0.314370401204 -0.355284757912 --0.297114044428 -0.355289101601 --0.279857322574 -0.355294704437 --0.262600526213 -0.355301514268 --0.24534324184 -0.355309553444 --0.228085771203 -0.355318807066 --0.210827678442 -0.355329312384 --0.193569283933 -0.355334639549 --0.174350932241 -0.372711770237 --0.155123777688 -0.372700847685 --0.137865182012 -0.372691199183 --0.120607260615 -0.372682847082 --0.103349588811 -0.372675769031 --0.0860924720764 -0.372670017183 --0.0688354801387 -0.372665524483 --0.0515789166093 -0.372662305832 --0.0343223512173 -0.372660376132 --0.0170660938602 -0.372659757734 -0.000190287362785 -0.372660435736 -0.0174464860465 -0.37266241014 -0.0347029319964 -0.372665651142 -0.0519593171775 -0.372670181095 -0.0692160762846 -0.3726760149 -0.0864728931338 -0.372683122754 -0.103730203584 -0.372691534459 -0.120987702161 -0.372701220214 -0.138245820999 -0.372712180018 -0.155504249036 -0.372717745602 -0.174722339958 -0.372711770237 -0.193942077458 -0.372700847685 -0.211200665682 -0.372691199183 -0.228458583355 -0.372682861984 -0.245716251433 -0.372675806284 -0.262973368168 -0.372670017183 -0.280230365694 -0.372665502131 -0.297486938536 -0.372662305832 -0.314743511379 -0.372660376132 -0.331999763846 -0.372659757734 -0.349256142974 -0.372660435736 -0.366512335837 -0.37266241014 -0.383768774569 -0.372665651142 -0.401025161147 -0.372670181095 -0.418281905353 -0.3726760149 -0.435538724065 -0.372683122754 -0.452796049416 -0.372691534459 -0.470053561032 -0.372701220214 -0.487311676144 -0.372712180018 -0.504570096731 -0.372717723251 -0.523788183928 -0.372711747885 -0.543007910252 -0.372700847685 -0.560266509652 -0.372691199183 -0.577524453402 -0.372682847082 -0.59478212893 -0.372675791383 -0.612039223314 -0.372670017183 -0.629296213389 -0.372665502131 -0.646552786231 -0.372662305832 -0.663809359073 -0.372660398484 -0.681065618992 -0.372659780085 -0.698321998119 -0.372660435736 -0.715578198433 -0.37266241014 -0.732834637165 -0.372665673494 -0.750091031194 -0.372670203447 -0.767347797751 -0.3726760149 -0.784604609013 -0.372683122754 -0.801861912012 -0.372691534459 -0.819119393825 -0.372701220214 -0.836377501488 -0.37271220237 -0.853635951877 -0.372717745602 -0.872854068875 -0.372711770236 -0.892073795199 -0.372700870037 -0.9093323946 -0.372691199183 -0.926590308547 -0.372682847082 -0.943847954274 -0.372675791383 -0.961105078459 -0.372670039535 -0.978362068534 -0.372665524483 -0.995618641376 -0.372662305832 -1.01287522912 -0.372660398484 -1.03013148904 -0.372659780085 -1.04738783836 -0.372660435736 -1.06464403868 -0.37266241014 -1.08190047741 -0.372665673494 -1.09915682674 -0.372670203447 -1.11641362309 -0.3726760149 -1.13367044926 -0.372683122754 -1.15092775226 -0.372691534459 -1.16818526387 -0.372701220214 -1.18544340134 -0.372712180018 -1.20270183683 -0.372717745602 -1.22191989422 -0.372711770237 -1.24113962054 -0.372700847685 -1.25839823485 -0.372691199183 -1.27565616369 -0.372682847082 -1.29291382432 -0.372675791383 -1.3101709485 -0.372670039535 -1.32742792368 -0.372665524483 -1.34468448162 -0.372662305832 -1.36194103956 -0.372660376132 -1.37919726968 -0.372659757734 -1.3964536786 -0.372660435736 -1.41370987892 -0.37266241014 -1.43096631766 -0.372665673494 -1.44822272659 -0.372670203447 -1.46547949314 -0.3726760149 -1.48273631931 -0.372683122754 -1.4999936223 -0.372691534459 -1.51725113392 -0.372701220214 -1.53450924158 -0.37271220237 -1.55176764727 -0.372717767954 -1.57098573446 -0.372711792588 -1.59020549059 -0.372700870037 -1.60746407509 -0.372691221535 -1.62472197413 -0.372682884336 -1.64197966456 -0.372675783933 -1.65923675895 -0.372670017183 -1.67649376392 -0.372665524483 -1.69375035167 -0.372662305832 -1.71100690961 -0.372660376132 -1.72826316953 -0.372659757734 -1.74551951885 -0.372660435736 -1.76277571916 -0.37266241014 -1.7800321877 -0.372665673494 -1.79728856683 -0.372670203447 -1.81454530358 -0.3726760149 -1.83180212975 -0.372683122754 -1.84905946255 -0.372691534459 -1.86631694436 -0.372701220214 -1.88357505203 -0.372712180018 -1.90083351731 -0.372717723251 -1.92005163431 -0.372711747885 -1.93927133084 -0.372700847685 -1.95652991533 -0.372691199183 -1.97378784418 -0.372682847082 -1.99104550481 -0.372675791383 -2.00830259919 -0.372670039535 -2.02555960417 -0.372665524483 -2.04281622172 -0.372662305832 -2.06007277966 -0.372660376132 -2.07732903957 -0.372659757734 -2.0945854187 -0.372660435736 -2.11184155941 -0.37266241014 -2.12909799815 -0.372665651142 -2.14635443688 -0.372670181095 -2.16361123324 -0.3726760149 -2.1808680296 -0.372683122754 -2.19812530279 -0.372691534459 -2.21538281441 -0.372701220214 -2.23264098167 -0.372712180018 -2.24989938736 -0.372717723251 -2.26911747456 -0.372711747885 -2.28833723069 -0.372700847685 -2.30559575558 -0.372691199183 -2.32285368443 -0.372682847082 -2.34011137485 -0.372675791383 -2.35736846924 -0.372670039535 -2.37462544441 -0.372665546834 -2.39188200236 -0.372662328184 -2.4091385603 -0.372660376132 -2.42639482022 -0.372659757734 -2.44365119934 -0.372660435736 -2.46090739965 -0.37266241014 -2.47816389799 -0.372665673494 -2.49542027712 -0.372670203447 -2.51267701387 -0.3726760149 -2.52993386984 -0.372683122754 -2.54719114304 -0.372691534459 -2.56444859505 -0.372701220214 -2.58170676231 -0.37271220237 -2.598965168 -0.372717745602 -2.6181832552 -0.372711747885 -2.63740301132 -0.372700847685 -2.65466153622 -0.372691199183 -2.67191946506 -0.372682847082 -2.6891772151 -0.372675791383 -2.70643436909 -0.372669994831 -2.72369134426 -0.372665502131 -2.7409479022 -0.372662328184 -2.75820446014 -0.372660398484 -2.77546066046 -0.372659780085 -2.79271703958 -0.372660435736 -2.8099732995 -0.37266241014 -2.82722973824 -0.372665651142 -2.84448611736 -0.372670181095 -2.86174291373 -0.3726760149 -2.87899971008 -0.372683122754 -2.89625698328 -0.372691534459 -2.91351443529 -0.372701220214 -2.93077254295 -0.372712180018 -2.94803106785 -0.372717745602 -2.96724915505 -0.372711770237 -2.98646885157 -0.372700847685 -3.00372749567 -0.372691199183 -3.02098542452 -0.372682847082 -3.03824311495 -0.372675769031 -3.05550020933 -0.372670017183 -3.0727571845 -0.372665524483 -3.09001380205 -0.372662305832 -3.10727035999 -0.372660376132 -3.12452661991 -0.372659757734 --3.14140227635 -0.372660435736 --3.12414610386 -0.37266241014 --3.10688972473 -0.372665651142 --3.0896333456 -0.372670181095 --3.07237654924 -0.3726760149 --3.05511975288 -0.372683122754 --3.03786247969 -0.372691534459 --3.02060490847 -0.372701220214 --3.0033468008 -0.372712180018 --2.98608839512 -0.372717745602 --2.96687030792 -0.372711770237 --2.9476506114 -0.372700847685 --2.93039196729 -0.372691199183 --2.91313403845 -0.372682861984 --2.89587634802 -0.372675806284 --2.87861925363 -0.372670017183 --2.86136227846 -0.372665502131 --2.84410566091 -0.372662305832 --2.82684910297 -0.372660376132 --2.80959284305 -0.372659757734 --2.79233646393 -0.372660435736 --2.77508032322 -0.37266241014 --2.75782394409 -0.372665651142 --2.74056750536 -0.372670181095 --2.723310709 -0.3726760149 --2.70605397224 -0.372683122754 --2.68879663944 -0.372691534459 --2.67153906822 -0.372701220214 --2.65428096056 -0.372712180018 --2.63702255487 -0.372717723251 --2.61780446768 -0.372711747885 --2.59858471155 -0.372700847685 --2.58132612705 -0.372691199183 --2.5640681982 -0.372682847082 --2.54681050777 -0.372675791383 --2.52955341339 -0.372670017183 --2.51229643822 -0.372665502131 --2.49503988027 -0.372662305832 --2.47778332233 -0.372660398484 --2.46052706242 -0.372659780085 --2.44327068329 -0.372660435736 --2.42601448298 -0.37266241014 --2.40875798464 -0.372665673494 --2.39150160551 -0.372670203447 --2.37424486875 -0.3726760149 --2.35698801279 -0.372683122754 --2.3397307396 -0.372691534459 --2.32247328758 -0.372701220214 --2.30521512031 -0.37271220237 --2.28795671463 -0.372717745602 --2.26873862743 -0.372711770236 --2.2495188713 -0.372700870037 --2.2322602272 -0.372691199183 --2.21500229836 -0.372682847082 --2.19774472714 -0.372675791383 --2.18048763275 -0.372670039535 --2.16323059797 -0.372665524483 --2.14597404003 -0.372662305832 --2.12871748209 -0.372660398484 --2.11146122217 -0.372659780085 --2.09420490265 -0.372660435736 --2.07694864273 -0.37266241014 --2.05969214439 -0.372665673494 --2.04243576527 -0.372670203447 --2.02517902851 -0.3726760149 --2.00792226195 -0.372683122754 --1.99066492915 -0.372691534459 --1.97340738773 -0.372701220214 --1.95614925027 -0.372712180018 --1.93889084458 -0.372717745602 --1.91967275738 -0.372711770237 --1.90045300126 -0.372700847685 --1.88319441676 -0.372691199183 --1.86593651772 -0.372682847082 --1.84867885709 -0.372675791383 --1.8314217031 -0.372670039535 --1.81416469812 -0.372665524483 --1.79690816999 -0.372662305832 --1.77965161204 -0.372660376132 --1.76239535212 -0.372659757734 --1.745138973 -0.372660435736 --1.72788277269 -0.37266241014 --1.71062633395 -0.372665673494 --1.69336992502 -0.372670203447 --1.67611315846 -0.3726760149 --1.65885636211 -0.372683122754 --1.64159905911 -0.372691534459 --1.62434157729 -0.372701220214 --1.60708343983 -0.37271220237 --1.58982497454 -0.372717767954 --1.57060688734 -0.372711792588 --1.55138719082 -0.372700870037 --1.53412860632 -0.372691221535 --1.51687067747 -0.372682884336 --1.49961301684 -0.372675783933 --1.48235589266 -0.372670017183 --1.46509888768 -0.372665524483 --1.44784229994 -0.372662305832 --1.430585742 -0.372660376132 --1.41332948208 -0.372659757734 --1.39607310295 -0.372660435736 --1.37881693244 -0.37266241014 --1.36156049371 -0.372665673494 --1.34430411458 -0.372670203447 --1.32704734802 -0.3726760149 --1.30979052186 -0.372683122754 --1.29253318906 -0.372691534459 --1.27527567744 -0.372701220214 --1.25801756978 -0.372712180018 --1.24075913429 -0.372717723251 --1.22154104709 -0.372711747885 --1.20232132077 -0.372700847685 --1.18506273627 -0.372691199183 --1.16780480743 -0.372682847082 --1.1505471468 -0.372675791383 --1.13329002261 -0.372670039535 --1.11603301763 -0.372665524483 --1.09877645969 -0.372662305832 --1.08151990175 -0.372660376132 --1.06426367164 -0.372659757734 --1.04700729251 -0.372660435736 --1.02975106239 -0.37266241014 --1.01249459386 -0.372665651142 --0.995238214733 -0.372670181095 --0.977981463075 -0.3726760149 --0.960724651813 -0.372683122754 --0.943467348814 -0.372691534459 --0.926209852099 -0.372701220214 --0.908951714635 -0.372712180018 --0.891693294049 -0.372717723251 --0.872475221754 -0.372711747885 --0.853255495429 -0.372700847685 --0.835996896029 -0.372691199183 --0.81873896718 -0.372682847082 --0.801481306553 -0.372675791383 --0.784224182367 -0.372670039535 --0.766967192292 -0.372665546834 --0.749710604548 -0.372662328184 --0.732454031705 -0.372660376132 --0.71519780159 -0.372659757734 --0.697941437364 -0.372660435736 --0.68068523705 -0.37266241014 --0.663428753614 -0.372665673494 --0.646172374487 -0.372670203447 --0.628915652633 -0.3726760149 --0.611658841371 -0.372683122754 --0.59440150857 -0.372691534459 --0.577143982053 -0.372701220214 --0.559885859489 -0.37271220237 --0.542627438903 -0.372717745602 --0.523409351706 -0.372711747885 --0.504189610481 -0.372700847685 --0.486931025982 -0.372691199183 --0.469673119485 -0.372682847082 --0.452415436506 -0.372675791383 --0.435158312321 -0.372669994831 --0.417901329696 -0.372665502131 --0.400644756854 -0.372662328184 --0.383388191462 -0.372660398484 --0.366131946444 -0.372659780085 --0.348875567317 -0.372660435736 --0.331619367004 -0.37266241014 --0.314362920821 -0.372665651142 --0.297106534243 -0.372670181095 --0.279849775136 -0.3726760149 --0.262592948973 -0.372683122754 --0.245335634798 -0.372691534459 --0.228078141809 -0.372701220214 --0.210820019245 -0.372712180018 --0.193561591208 -0.372717745602 --0.174343515188 -0.390099748969 --0.155117146671 -0.390088364482 --0.137858524919 -0.390078298747 --0.120600573719 -0.390069589019 --0.103342873976 -0.390062205494 --0.0860857311636 -0.390056185424 --0.0688287112862 -0.39005150646 --0.0515721179545 -0.390048183501 --0.0343155255542 -0.390046164393 --0.0170592395589 -0.390045516193 -0.000197171000765 -0.390046231449 -0.0174533987884 -0.390048272908 -0.034709871281 -0.390051655471 -0.051966285333 -0.390056394041 -0.0692230733112 -0.390062466264 -0.0864799171686 -0.39006985724 -0.103737255558 -0.390078634024 -0.1209947858 -0.39008872956 -0.138252936303 -0.39010014385 -0.155511394143 -0.390105962754 -0.174729228019 -0.390099748969 -0.193948708474 -0.390088364482 -0.211207330227 -0.390078298747 -0.228465273976 -0.39006960392 -0.245722968132 -0.390062242747 -0.262980118394 -0.390056185424 -0.280237138271 -0.390051484108 -0.297493733466 -0.390048161149 -0.314750336111 -0.390046142042 -0.332006618381 -0.390045516193 -0.34926301986 -0.390046231449 -0.366519242525 -0.390048272908 -0.38377571851 -0.390051655471 -0.40103213489 -0.390056394041 -0.418288908899 -0.390062466264 -0.435545749962 -0.390069872141 -0.452803105116 -0.390078648925 -0.470060646534 -0.39008872956 -0.487318791449 -0.39010014385 -0.504577241838 -0.39010591805 -0.523795083165 -0.390099704266 -0.54301455617 -0.390088364482 -0.560273170471 -0.390078298747 -0.577531144023 -0.390069589019 -0.594788864255 -0.390062227845 -0.61204598844 -0.390056185424 -0.629302993417 -0.390051484108 -0.646559581161 -0.390048183501 -0.663816183806 -0.390046186745 -0.681072473526 -0.390045538545 -0.698328867554 -0.390046231449 -0.71558509767 -0.390048272908 -0.732841581106 -0.390051655471 -0.750098019838 -0.390056394041 -0.767354801297 -0.390062466264 -0.78461162746 -0.390069872141 -0.801868975162 -0.390078648925 -0.819126486778 -0.39008872956 -0.836384609342 -0.39010014385 -0.853643089533 -0.39010591805 -0.872860953212 -0.390099704266 -0.892080426216 -0.390088364482 -0.909339040518 -0.390078298747 -0.926596969366 -0.390069589019 -0.943854659796 -0.390062227845 -0.961111813784 -0.390056207776 -0.978368833661 -0.39005150646 -0.995625451206 -0.390048161149 -1.01288205385 -0.390046164393 -1.03013831377 -0.390045538545 -1.0473947227 -0.390046231449 -1.06465095282 -0.390048272908 -1.08190739155 -0.390051655471 -1.09916380048 -0.390056394041 -1.11642062664 -0.390062466264 -1.13367748261 -0.390069872141 -1.1509348154 -0.390078648925 -1.16819235682 -0.39008872956 -1.18545052409 -0.39010014385 -1.20270898938 -0.390105940402 -1.22192677856 -0.390099704266 -1.24114623666 -0.39008834213 -1.25840488076 -0.390078298747 -1.27566280961 -0.390069589019 -1.29292052984 -0.390062227845 -1.31017771363 -0.390056207776 -1.32743471861 -0.39005150646 -1.34469127655 -0.390048161149 -1.36194783449 -0.390046142042 -1.37920412421 -0.390045516193 -1.39646056294 -0.390046231449 -1.41371679306 -0.390048272908 -1.4309732616 -0.390051655471 -1.44822970033 -0.390056394041 -1.46548649669 -0.390062466264 -1.48274335265 -0.390069872141 -1.50000068545 -0.390078648925 -1.51725819707 -0.39008872956 -1.53451633454 -0.390100158751 -1.55177477002 -0.390105955303 -1.5709926188 -0.390099748969 -1.5902121365 -0.390088386834 -1.60747075081 -0.390078298747 -1.62472867966 -0.39006960392 -1.64198637009 -0.390062220395 -1.65924349427 -0.390056185424 -1.67650052905 -0.39005150646 -1.6937571466 -0.390048161149 -1.71101373434 -0.390046142042 -1.72827002406 -0.390045516193 -1.74552643299 -0.390046231449 -1.76278263331 -0.390048272908 -1.78003913164 -0.390051655471 -1.79729554057 -0.390056394041 -1.81455230713 -0.390062466264 -1.83180916309 -0.390069872141 -1.84906649589 -0.390078648925 -1.86632403731 -0.39008872956 -1.88358217478 -0.39010014385 -1.90084064007 -0.39010591805 -1.92005851865 -0.390099681914 -1.93927797675 -0.39008834213 -1.95653659105 -0.390078298747 -1.9737945497 -0.390069589019 -1.99105224013 -0.390062227845 -2.00830936432 -0.390056207776 -2.0255663395 -0.39005150646 -2.04282295704 -0.390048161149 -2.06007957459 -0.390046142042 -2.07733589411 -0.390045516193 -2.09459233284 -0.390046231449 -2.11184847355 -0.390048272908 -2.12910491228 -0.390051655471 -2.14636141062 -0.390056394041 -2.16361820698 -0.390062466264 -2.18087500334 -0.390069872141 -2.19813233614 -0.390078648925 -2.21538990736 -0.39008872956 -2.23264807463 -0.39010014385 -2.24990648031 -0.39010591805 -2.26912432909 -0.390099704266 -2.2883438468 -0.390088364482 -2.3056024313 -0.390078298747 -2.32286036014 -0.390069589019 -2.34011805058 -0.390062227845 -2.35737520456 -0.390056207776 -2.37463223934 -0.39005150646 -2.39188885689 -0.390048161149 -2.40914547444 -0.390046142042 -2.42640173435 -0.390045516193 -2.44365811348 -0.390046231449 -2.4609143734 -0.390048272908 -2.47817087174 -0.390051655471 -2.49542725086 -0.390056394041 -2.51268398762 -0.390062466264 -2.52994084358 -0.390069872141 -2.54719823599 -0.390078648925 -2.56445574761 -0.39008872956 -2.58171385527 -0.39010014385 -2.59897232055 -0.39010591805 -2.61819016933 -0.390099681914 -2.63740962744 -0.39008834213 -2.65466821194 -0.390078298747 -2.67192614078 -0.390069589019 -2.68918389082 -0.390062227845 -2.70644110441 -0.390056185424 -2.72369813919 -0.390051484108 -2.74095469713 -0.390048161149 -2.75821125507 -0.390046164393 -2.77546751499 -0.390045538545 -2.79272389412 -0.390046231449 -2.80998015404 -0.390048272908 -2.82723665238 -0.390051655471 -2.8444930315 -0.390056394041 -2.86174988747 -0.390062466264 -2.87900674343 -0.390069872141 -2.89626401663 -0.390078648925 -2.91352152824 -0.39008872956 -2.93077969551 -0.39010014385 -2.9480382204 -0.390105962754 -2.96725606918 -0.390099748969 -2.98647552729 -0.390088364482 -3.00373417139 -0.390078298747 -3.02099215985 -0.390069589019 -3.03824985028 -0.390062205494 -3.05550694466 -0.390056185424 -3.07276391983 -0.39005150646 -3.09002053738 -0.390048183501 -3.10727715492 -0.390046164393 -3.12453347445 -0.390045516193 --3.14139542182 -0.390046231449 --3.12413924933 -0.390048272908 --3.10688281059 -0.390051655471 --3.08962637186 -0.390056394041 --3.0723695159 -0.390062466264 --3.05511265993 -0.39006985724 --3.03785538673 -0.390078634024 --3.02059787512 -0.39008872956 --3.00333970785 -0.39010014385 --2.98608124256 -0.390105962754 --2.96686339379 -0.390099748969 --2.94764393568 -0.390088364482 --2.93038529157 -0.390078298747 --2.91312730313 -0.39006960392 --2.89586961269 -0.390062242747 --2.87861251831 -0.390056185424 --2.86135554313 -0.390051484108 --2.84409892559 -0.390048161149 --2.82684230805 -0.390046142042 --2.80958604812 -0.390045516193 --2.79232960939 -0.390046231449 --2.77507340908 -0.390048272908 --2.75781697035 -0.390051655471 --2.74056047201 -0.390056394041 --2.72330367565 -0.390062466264 --2.70604687929 -0.390069872141 --2.68878954649 -0.390078648925 --2.67153197527 -0.39008872956 --2.65427386761 -0.39010014385 --2.63701546192 -0.39010591805 --2.61779761315 -0.390099704266 --2.59857809544 -0.390088364482 --2.58131945133 -0.390078298747 --2.56406152248 -0.390069589019 --2.54680383206 -0.390062227845 --2.52954667806 -0.390056185424 --2.51228970289 -0.390051484108 --2.49503314495 -0.390048183501 --2.4777764678 -0.390046186745 --2.46052014828 -0.390045538545 --2.44326376915 -0.390046231449 --2.42600750923 -0.390048272908 --2.4087510109 -0.390051655471 --2.39149463177 -0.390056394041 --2.37423789501 -0.390062466264 --2.35698103905 -0.390069872141 --2.33972364664 -0.390078648925 --2.32246613502 -0.39008872956 --2.30520802736 -0.39010014385 --2.28794962168 -0.39010591805 --2.2687317729 -0.390099704266 --2.24951225519 -0.390088364482 --2.23225361109 -0.390078298747 --2.21499568224 -0.390069589019 --2.19773805142 -0.390062227845 --2.18048089743 -0.390056207776 --2.16322380304 -0.39005150646 --2.1459671855 -0.390048161149 --2.12871062755 -0.390046164393 --2.11145436764 -0.390045538545 --2.09419798851 -0.390046231449 --2.0769417286 -0.390048272908 --2.05968523025 -0.390051655471 --2.04242885112 -0.390056394041 --2.02517205477 -0.390062466264 --2.0079151988 -0.390069872141 --1.9906578362 -0.390078648925 --1.97340029478 -0.39008872956 --1.95614218712 -0.39010014385 --1.93888375163 -0.390105940402 --1.91966590285 -0.390099704266 --1.90044638514 -0.39008834213 --1.88318777084 -0.390078298747 --1.865929842 -0.390069589019 --1.84867215157 -0.390062227845 --1.83141499758 -0.390056207776 --1.8141579628 -0.39005150646 --1.79690137506 -0.390048161149 --1.77964478731 -0.390046142042 --1.76238849759 -0.390045516193 --1.74513208866 -0.390046231449 --1.72787588835 -0.390048272908 --1.71061939001 -0.390051655471 --1.69336295128 -0.390056394041 --1.67610618472 -0.390062466264 --1.65884935856 -0.390069872141 --1.64159202576 -0.390078648925 --1.62433448434 -0.39008872956 --1.60707631707 -0.390100158751 --1.58981785178 -0.390105955303 --1.57060000301 -0.390099748969 --1.5513805449 -0.390088386834 --1.5341219306 -0.390078298747 --1.51686397195 -0.39006960392 --1.49960628152 -0.390062220395 --1.48234912753 -0.390056185424 --1.46509212255 -0.39005150646 --1.44783550501 -0.390048161149 --1.43057888746 -0.390046142042 --1.41332259774 -0.390045516193 --1.39606618881 -0.390046231449 --1.3788099885 -0.390048272908 --1.36155354976 -0.390051655471 --1.34429714083 -0.390056394041 --1.32704034448 -0.390062466264 --1.30978348851 -0.390069872141 --1.29252612591 -0.390078648925 --1.27526861429 -0.39008872956 --1.25801047683 -0.39010014385 --1.24075201154 -0.39010591805 --1.22153419256 -0.390099681914 --1.20231470466 -0.39008834213 --1.18505609036 -0.390078298747 --1.1677981615 -0.390069589019 --1.15054047108 -0.390062227845 --1.13328328729 -0.390056207776 --1.11602625251 -0.39005150646 --1.09876969457 -0.390048161149 --1.08151310682 -0.390046142042 --1.0642568171 -0.390045516193 --1.04700040817 -0.390046231449 --1.02974414825 -0.390048272908 --1.01248764992 -0.390051655471 --0.995231255889 -0.390056394041 --0.97797447443 -0.390062466264 --0.960717633366 -0.390069872141 --0.943460300565 -0.390078648925 --0.926202774048 -0.39008872956 --0.908944606781 -0.39010014385 --0.891686141491 -0.39010591805 --0.872468307615 -0.390099704266 --0.85324883461 -0.390088364482 --0.83599023521 -0.390078298747 --0.81873229146 -0.390069589019 --0.801474586129 -0.390062227845 --0.784217447042 -0.390056207776 --0.766960412264 -0.39005150646 --0.749703794718 -0.390048161149 --0.732447206974 -0.390046142042 --0.715190932155 -0.390045516193 --0.697934538126 -0.390046231449 --0.68067830801 -0.390048272908 --0.663421809674 -0.390051655471 --0.646165400744 -0.390056394041 --0.628908634186 -0.390062466264 --0.611651793122 -0.390069872141 --0.594394430518 -0.390078648925 --0.577136904001 -0.39008872956 --0.559878781438 -0.39010014385 --0.542620316148 -0.39010591805 --0.52340246737 -0.390099681914 --0.504182986915 -0.39008834213 --0.486924372613 -0.390078298747 --0.469666436315 -0.390069589019 --0.452408738434 -0.390062227845 --0.435151591897 -0.390056185424 --0.417894557118 -0.390051484108 --0.400637947023 -0.390048161149 --0.38338136673 -0.390046164393 --0.366125099361 -0.390045538545 --0.348868690431 -0.390046231449 --0.331612445414 -0.390048272908 --0.31435597688 -0.390051655471 --0.29709956795 -0.390056394041 --0.27984277159 -0.390062466264 --0.262585923075 -0.390069872141 --0.245328586548 -0.390078648925 --0.228071063757 -0.39008872956 --0.210812915116 -0.39010014385 --0.193554457277 -0.390105962754 --0.174336627126 -0.407469578087 --0.155110552907 -0.407457761466 --0.137851905078 -0.407447293401 --0.120593924075 -0.407438233495 --0.103336198255 -0.407430559397 --0.0860790275037 -0.407424286008 --0.068821977824 -0.407419405878 --0.0515653574839 -0.407415963709 --0.0343087371439 -0.407413884997 --0.0170524229761 -0.407413206995 -0.000204015290365 -0.407413944602 -0.0174602712505 -0.407416068018 -0.0347167719156 -0.40741956979 -0.0519732125104 -0.407424509525 -0.0692300284281 -0.407430812716 -0.0864869020879 -0.407438486815 -0.10374427028 -0.407447628677 -0.121001826599 -0.407458133996 -0.138260003179 -0.407470010221 -0.155518487096 -0.407476037741 -0.174736071378 -0.407469578087 -0.193955302238 -0.407457761466 -0.211213950068 -0.407447293401 -0.22847192362 -0.407438233495 -0.245729647577 -0.407430559397 -0.262986823916 -0.407424286008 -0.280243873596 -0.407419405878 -0.297500498593 -0.407415941358 -0.314757123589 -0.407413862646 -0.332013428211 -0.407413206995 -0.349269859493 -0.407413944602 -0.366526119411 -0.407416068018 -0.383782625198 -0.40741956979 -0.40103906393 -0.407424487173 -0.418295867741 -0.407430812716 -0.435552738607 -0.407438524067 -0.452810116112 -0.407447643578 -0.470067687333 -0.407458133996 -0.4873258695 -0.407470010221 -0.504584349692 -0.407476015389 -0.523801937699 -0.407469555736 -0.543021172285 -0.407457761466 -0.560279816389 -0.407447293401 -0.577537775039 -0.407438233495 -0.594795510173 -0.407430559397 -0.612052708864 -0.407424286008 -0.629309728742 -0.407419405878 -0.646566331387 -0.407415963709 -0.663822978735 -0.407413884997 -0.681079283357 -0.407413206995 -0.698335707188 -0.40741392225 -0.715591967106 -0.407416045666 -0.732848480344 -0.40741956979 -0.750104948878 -0.407424509525 -0.76736176014 -0.407430835068 -0.784618601203 -0.407438524067 -0.801875978708 -0.407447643578 -0.819133549929 -0.407458133996 -0.836391702294 -0.407470010221 -0.853650197387 -0.407476015389 -0.872867792845 -0.407469548285 -0.892087012529 -0.407457754016 -0.909345641732 -0.407447293401 -0.926603600383 -0.407438233495 -0.943861335516 -0.407430559397 -0.961118504405 -0.407424286008 -0.978375554085 -0.407419405878 -0.995632201434 -0.407415941358 -1.01288881898 -0.407413862646 -1.0301451087 -0.407413206995 -1.04740157724 -0.40741392225 -1.06465783715 -0.407416045666 -1.08191430569 -0.40741956979 -1.09917074442 -0.407424509525 -1.11642757058 -0.407430835068 -1.13368445635 -0.407438524067 -1.15094181895 -0.407447643578 -1.16819939017 -0.407458133996 -1.18545758724 -0.407470010221 -1.20271608234 -0.407476015389 -1.22193363309 -0.407469533384 -1.24115285277 -0.407457716763 -1.25841149688 -0.407447271049 -1.27566945553 -0.407438233495 -1.29292720556 -0.407430559397 -1.31018438935 -0.407424286008 -1.32744145393 -0.407419405878 -1.34469807148 -0.407415941358 -1.36195465922 -0.407413862646 -1.37921097875 -0.407413206995 -1.39646741748 -0.40741392225 -1.4137236774 -0.407416045666 -1.43098017573 -0.40741956979 -1.44823661446 -0.407424487173 -1.46549344063 -0.407430812716 -1.48275032639 -0.407438546419 -1.500007689 -0.407447665929 -1.51726523042 -0.407458133996 -1.53452339768 -0.407470025123 -1.55178186297 -0.40747603029 -1.57099947333 -0.407469570637 -1.59021872282 -0.407457776368 -1.60747736692 -0.407447293401 -1.62473532558 -0.407438233495 -1.64199304581 -0.407430559397 -1.6592502296 -0.407424286008 -1.67650726438 -0.407419405878 -1.69376388192 -0.407415941358 -1.71102049947 -0.407413862646 -1.72827681899 -0.407413206995 -1.74553328753 -0.407413944602 -1.76278951764 -0.407416068018 -1.78004601598 -0.40741956979 -1.79730248451 -0.407424487173 -1.81455928087 -0.407430812716 -1.83181613684 -0.407438524067 -1.84907349944 -0.407447643578 -1.86633107066 -0.407458133996 -1.88358926773 -0.407470010221 -1.90084776283 -0.407476015389 -1.92006534338 -0.407469533384 -1.93928456306 -0.407457739115 -1.95654323697 -0.407447293401 -1.97380122542 -0.407438233495 -1.99105891585 -0.407430559397 -2.00831606984 -0.407424286008 -2.02557307482 -0.407419405878 -2.04282969236 -0.407415941358 -2.06008636951 -0.407413862646 -2.07734268903 -0.407413206995 -2.09459912777 -0.407413944602 -2.11185532808 -0.407416068018 -2.12911176681 -0.40741956979 -2.14636826515 -0.407424487173 -2.16362512112 -0.407430812716 -2.18088203669 -0.407438524067 -2.19813942909 -0.407447643578 -2.21539694071 -0.407458133996 -2.23265510798 -0.407470010221 -2.24991357327 -0.407476015389 -2.26913118363 -0.407469555736 -2.28835046291 -0.407457761466 -2.30560910701 -0.407447293401 -2.32286703587 -0.407438233495 -2.3401247263 -0.407430559397 -2.35738193989 -0.407424286008 -2.37463903427 -0.407419405878 -2.39189565182 -0.407415941358 -2.40915226936 -0.407413862646 -2.42640858888 -0.407413206995 -2.44366496801 -0.40741392225 -2.46092122793 -0.407416045666 -2.47817778588 -0.40741956979 -2.495434165 -0.407424487173 -2.51269090176 -0.407430812716 -2.52994781733 -0.407438524067 -2.54720526934 -0.407447643578 -2.56446284056 -0.407458133996 -2.58172094822 -0.407470010221 -2.59897941351 -0.407476015389 -2.61819702387 -0.407469533384 -2.63741624355 -0.407457739115 -2.65467488766 -0.407447293401 -2.67193281651 -0.407438233495 -2.68919050694 -0.407430559397 -2.70644772053 -0.407424286008 -2.72370481491 -0.407419405878 -2.74096143246 -0.407415941358 -2.75821805 -0.407413862646 -2.77547436952 -0.407413206995 -2.79273080826 -0.407413944602 -2.80998706818 -0.407416068018 -2.82724356651 -0.40741956979 -2.84450000525 -0.407424487173 -2.86175686121 -0.407430812716 -2.87901371717 -0.407438524067 -2.89627104997 -0.407447643578 -2.91352862119 -0.407458133996 -2.93078678846 -0.407470010221 -2.94804531336 -0.407476037741 -2.96726292372 -0.407469578087 -2.9864820838 -0.407457761466 -3.0037407279 -0.407447293401 -3.02099877596 -0.407438233495 -3.038256526 -0.407430559397 -3.05551367998 -0.407424286008 -3.07277065515 -0.407419405878 -3.0900272727 -0.407415963709 -3.10728389025 -0.407413884997 -3.12454020977 -0.407413206995 --3.14138862689 -0.407413944602 --3.12413239479 -0.407416068018 --3.10687589645 -0.40741956979 --3.08961939812 -0.407424509525 --3.07236254215 -0.407430812716 --3.05510568619 -0.407438486815 --3.03784835338 -0.407447628677 --3.02059084177 -0.407458133996 --3.0033326745 -0.407470010221 --2.98607414961 -0.407476037741 --2.96685653925 -0.407469578087 --2.94763737917 -0.407457761466 --2.93037873507 -0.407447293401 --2.91312068701 -0.407438233495 --2.89586293697 -0.407430559397 --2.87860578299 -0.407424286008 --2.86134880781 -0.407419405878 --2.84409219027 -0.407415941358 --2.82683551312 -0.407413862646 --2.8095792532 -0.407413206995 --2.79232281446 -0.407413944602 --2.77506655454 -0.407416068018 --2.75781005621 -0.40741956979 --2.74055355787 -0.407424487173 --2.72329676151 -0.407430812716 --2.70603990555 -0.407438524067 --2.68878257275 -0.407447643578 --2.67152500153 -0.407458133996 --2.65426677465 -0.407470010221 --2.63700830936 -0.407476015389 --2.61779075861 -0.407469555736 --2.59857147932 -0.407457761466 --2.58131277561 -0.407447293401 --2.56405484676 -0.407438233495 --2.54679715634 -0.407430559397 --2.52953994274 -0.407424286008 --2.51228296757 -0.407419405878 --2.49502640963 -0.407415963709 --2.47776967287 -0.407413884997 --2.46051335335 -0.407413206995 --2.44325697422 -0.40741392225 --2.42600065469 -0.407416045666 --2.40874409676 -0.40741956979 --2.39148771763 -0.407424509525 --2.37423098087 -0.407430835068 --2.35697412491 -0.407438524067 --2.3397166729 -0.407447643578 --2.32245904207 -0.407458133996 --2.30520093441 -0.407470010221 --2.28794252872 -0.407476015389 --2.26872491836 -0.407469548285 --2.24950563908 -0.407457754016 --2.23224699498 -0.407447293401 --2.21498906612 -0.407438233495 --2.1977313757 -0.407430559397 --2.1804741621 -0.407424286008 --2.16321706772 -0.407419405878 --2.14596045017 -0.407415941358 --2.12870383263 -0.407413862646 --2.1114475131 -0.407413206995 --2.09419107437 -0.40741392225 --2.07693481445 -0.407416045666 --2.05967831611 -0.40741956979 --2.04242187738 -0.407424509525 --2.02516508102 -0.407430835068 --2.00790819526 -0.407438524067 --1.99065080285 -0.407447643578 --1.97339326143 -0.407458133996 --1.95613512397 -0.407470010221 --1.93887665867 -0.407476015389 --1.91965904832 -0.407469533384 --1.90043979883 -0.407457716763 --1.88318115473 -0.407447271049 --1.86592319608 -0.407438233495 --1.84866547584 -0.407430559397 --1.83140829206 -0.407424286008 --1.81415125728 -0.407419405878 --1.79689463973 -0.407415941358 --1.77963799238 -0.407413862646 --1.76238167286 -0.407413206995 --1.74512523413 -0.40741392225 --1.72786900401 -0.407416045666 --1.71061250567 -0.40741956979 --1.69335603714 -0.407424487173 --1.67609921098 -0.407430812716 --1.65884235501 -0.407438546419 --1.64158499241 -0.407447665929 --1.62432742119 -0.407458133996 --1.60706925392 -0.407470025123 --1.58981075883 -0.40747603029 --1.57059317827 -0.407469570637 --1.55137395859 -0.407457776368 --1.53411528468 -0.407447293401 --1.51685729623 -0.407438233495 --1.4995996058 -0.407430559397 --1.48234245181 -0.407424286008 --1.46508538723 -0.407419405878 --1.44782873988 -0.407415941358 --1.43057212234 -0.407413862646 --1.41331580281 -0.407413206995 --1.39605933428 -0.407413944602 --1.37880310416 -0.407416068018 --1.36154663563 -0.40741956979 --1.3442901969 -0.407424487173 --1.32703340053 -0.407430812716 --1.30977651477 -0.407438524067 --1.29251912236 -0.407447643578 --1.27526158095 -0.407458133996 --1.25800338388 -0.407470010221 --1.24074491859 -0.407476015389 --1.22152736783 -0.407469533384 --1.20230808854 -0.407457739115 --1.18504944444 -0.407447293401 --1.16779151559 -0.407438233495 --1.15053379536 -0.407430559397 --1.13327658176 -0.407424286008 --1.11601954699 -0.407419405878 --1.09876295924 -0.407415941358 --1.08150631189 -0.407413862646 --1.06424999237 -0.407413206995 --1.04699355364 -0.407413944602 --1.02973726392 -0.407416068018 --1.01248076558 -0.40741956979 --0.99522435665 -0.407424487173 --0.977967530489 -0.407430812716 --0.960710629821 -0.407438524067 --0.943453267217 -0.407447643578 --0.926195725798 -0.407458133996 --0.908937528729 -0.407470010221 --0.891679033637 -0.407476015389 --0.87246145308 -0.407469555736 --0.853242233396 -0.407457761466 --0.835983604193 -0.407447293401 --0.818725630641 -0.407438233495 --0.801467895508 -0.407430559397 --0.784210726619 -0.407424286008 --0.766953676939 -0.407419405878 --0.749697044492 -0.407415941358 --0.732440426946 -0.407413862646 --0.715184122324 -0.407413206995 --0.697927698493 -0.40741392225 --0.680671438575 -0.407416045666 --0.663414925337 -0.40741956979 --0.646158486605 -0.407424487173 --0.628901675344 -0.407430812716 --0.611644789577 -0.407438524067 --0.594387426972 -0.407447643578 --0.577129885554 -0.407458133996 --0.559871718287 -0.407470010221 --0.542613223195 -0.407476015389 --0.523395612836 -0.407469533384 --0.504176393151 -0.407457739115 --0.486917763948 -0.407447293401 --0.469659782946 -0.407438233495 --0.452402055263 -0.407430559397 --0.435144893825 -0.407424286008 --0.417887829244 -0.407419405878 --0.400631196797 -0.407415941358 --0.383374586701 -0.407413862646 --0.366118274629 -0.407413206995 --0.348861835897 -0.407413944602 --0.331605575979 -0.407416068018 --0.314349077642 -0.40741956979 --0.29709263891 -0.407424487173 --0.279835812748 -0.407430812716 --0.262578934431 -0.407438524067 --0.245321571827 -0.407447643578 --0.228064019233 -0.407458133996 --0.210805840791 -0.407470010221 --0.193547356874 -0.407476037741 --0.174329780042 -0.424822069704 --0.155103992671 -0.42480982095 --0.13784532249 -0.424798995256 --0.120587322861 -0.424789585173 --0.103329565376 -0.4247815907 --0.0860723629594 -0.424775116146 --0.0688152862712 -0.424770072103 --0.0515586361289 -0.424766466022 --0.0343019878491 -0.424764305353 --0.0170456466731 -0.42476362735 -0.00021081860177 -0.42476438731 -0.0174671020359 -0.424766585231 -0.034723631572 -0.424770228565 -0.0519800987095 -0.424775339663 -0.0692369416356 -0.424781881273 -0.086493846029 -0.424789868295 -0.103751244024 -0.424799337983 -0.121008824557 -0.424810230732 -0.138267025352 -0.424822583795 -0.15552553907 -0.42482881248 -0.174742873758 -0.424822069704 -0.193961851299 -0.42480982095 -0.211220525205 -0.424798972904 -0.228478532284 -0.424789577723 -0.245736289769 -0.424781605602 -0.262993492186 -0.424775116146 -0.280250564217 -0.424770072103 -0.297507211566 -0.424766466022 -0.314763866365 -0.424764305353 -0.332020208239 -0.42476362735 -0.349276669323 -0.42476438731 -0.366532951594 -0.424766585231 -0.383789487183 -0.424770228565 -0.401045955717 -0.424775332213 -0.41830278933 -0.424781896174 -0.435559689998 -0.424789890647 -0.452817089856 -0.424799337983 -0.470074683428 -0.424810230732 -0.487332887947 -0.424822583795 -0.50459139049 -0.42482881248 -0.523808732629 -0.424822069704 -0.543027713895 -0.42480982095 -0.5602863729 -0.424798972904 -0.577544361353 -0.424789577723 -0.594802126288 -0.424781627953 -0.612059369683 -0.424775138497 -0.629316419363 -0.424770072103 -0.64657305181 -0.424766466022 -0.663829743862 -0.424764305353 -0.681086048484 -0.42476362735 -0.698342487216 -0.424764364958 -0.715598791838 -0.424766562879 -0.732855319977 -0.424770228565 -0.750111788511 -0.424775339663 -0.767368644476 -0.424781903625 -0.784625545144 -0.424789890647 -0.801882952451 -0.424799337983 -0.819140553474 -0.424810230732 -0.836398735643 -0.424822583795 -0.853657245636 -0.42482881248 -0.872874572873 -0.424822084606 -0.892093539238 -0.424809835851 -0.909352213144 -0.424798972904 -0.926610216499 -0.424789577723 -0.943867981434 -0.424781605602 -0.961125165224 -0.424775093794 -0.978382244706 -0.424770049751 -0.995638936758 -0.424766466022 -1.01289555431 -0.424764305353 -1.03015187383 -0.42476362735 -1.04740837216 -0.424764364958 -1.06466466189 -0.424766562879 -1.08192119003 -0.424770228565 -1.09917762876 -0.424775339663 -1.11643445492 -0.424781903625 -1.13369140029 -0.424789890647 -1.1509487927 -0.424799337983 -1.16820636392 -0.424810230732 -1.18546459079 -0.424822583795 -1.20272311568 -0.42482881248 -1.22194042802 -0.424822069704 -1.24115940928 -0.424809798598 -1.25841808319 -0.424798950553 -1.27567607164 -0.424789577723 -1.29293382168 -0.424781627953 -1.31019100547 -0.424775138497 -1.32744809985 -0.424770072103 -1.344704777 -0.424766466022 -1.36196142435 -0.424764305353 -1.37921777368 -0.42476362735 -1.39647424221 -0.424764364958 -1.41373050213 -0.424766562879 -1.43098703026 -0.424770228565 -1.4482434988 -0.424775317311 -1.46550035477 -0.424781881273 -1.48275727034 -0.4247899279 -1.50001466274 -0.424799375236 -1.51727226377 -0.424810230732 -1.53453046084 -0.424822583795 -1.55178895593 -0.42482881248 -1.57100629806 -0.424822084606 -1.59022524953 -0.424809835851 -1.60748392344 -0.424798972904 -1.62474194169 -0.424789562821 -1.64199969173 -0.424781613052 -1.65925690532 -0.424775116146 -1.6765139699 -0.424770049751 -1.69377061725 -0.424766466022 -1.7110272646 -0.424764305353 -1.72828358412 -0.424763604998 -1.74554005265 -0.424764364958 -1.76279634237 -0.424766585231 -1.78005287051 -0.424770228565 -1.79730936885 -0.424775317311 -1.81456619501 -0.424781881273 -1.83182308078 -0.424789890647 -1.84908050299 -0.424799337983 -1.86633807421 -0.424810230732 -1.88359627128 -0.424822583795 -1.90085479617 -0.42482881248 -1.92007213831 -0.424822069704 -1.93929111957 -0.42480982095 -1.95654979348 -0.424798972904 -1.97380781174 -0.424789577723 -1.99106556177 -0.424781605602 -2.00832277536 -0.424775116146 -2.02557981014 -0.424770072103 -2.04283642769 -0.424766466022 -2.06009316444 -0.424764305353 -2.07734948397 -0.42476362735 -2.0946059227 -0.42476438731 -2.11186218262 -0.424766585231 -2.12911868095 -0.424770228565 -2.14637517929 -0.424775317311 -2.16363203526 -0.424781881273 -2.18088901043 -0.424789890647 -2.19814646244 -0.424799337983 -2.21540397406 -0.424810230732 -2.23266214133 -0.424822561443 -2.24992066622 -0.424828790128 -2.26913803816 -0.424822069704 -2.28835701942 -0.42480982095 -2.30561566353 -0.424798972904 -2.32287365198 -0.424789577723 -2.34013140201 -0.424781605602 -2.35738861561 -0.424775116146 -2.37464570999 -0.424770072103 -2.39190232753 -0.424766466022 -2.40915894508 -0.424764305353 -2.42641532421 -0.42476362735 -2.44367176294 -0.424764364958 -2.46092802286 -0.424766562879 -2.4781845808 -0.424770228565 -2.49544101953 -0.424775332213 -2.51269781589 -0.424781896174 -2.52995479107 -0.424789890647 -2.54721224308 -0.424799337983 -2.5644698143 -0.424810230732 -2.58172798157 -0.424822561443 -2.59898644686 -0.424828790128 -2.6182038188 -0.424822069704 -2.63742285967 -0.42480982095 -2.65468150377 -0.424798972904 -2.67193943262 -0.424789577723 -2.68919718266 -0.424781605602 -2.70645439625 -0.424775116146 -2.72371149063 -0.424770072103 -2.74096816778 -0.424766466022 -2.75822478533 -0.424764305353 -2.77548116445 -0.42476362735 -2.79273766279 -0.42476438731 -2.80999392271 -0.424766585231 -2.82725042105 -0.424770228565 -2.84450691938 -0.424775317311 -2.86176377535 -0.424781881273 -2.87902063131 -0.424789890647 -2.89627802372 -0.424799337983 -2.91353559494 -0.424810230732 -2.93079382182 -0.424822583795 -2.94805234671 -0.42482881248 -2.96726965904 -0.424822069704 -2.98648864031 -0.42480982095 -3.00374734402 -0.424798995256 -3.02100539207 -0.424789585173 -3.03826314211 -0.4247815907 -3.0555203557 -0.424775116146 -3.07277739048 -0.424770072103 -3.09003400803 -0.424766466022 -3.10729068518 -0.424764305353 -3.1245470047 -0.42476362735 --3.14138183196 -0.42476438731 --3.12412554026 -0.424766585231 --3.10686904192 -0.424770228565 --3.08961254358 -0.424775339663 --3.07235568762 -0.424781881273 --3.05509883166 -0.424789868295 --3.03784143925 -0.424799337983 --3.02058386803 -0.424810230732 --3.00332564116 -0.424822583795 --2.98606711626 -0.42482881248 --2.96684980393 -0.424822069704 --2.94763082266 -0.42480982095 --2.93037211895 -0.424798972904 --2.91311407089 -0.424789577723 --2.89585632086 -0.424781605602 --2.87859910727 -0.424775116146 --2.86134207249 -0.424770072103 --2.84408545494 -0.424766466022 --2.82682871819 -0.424764305353 --2.80957239866 -0.42476362735 --2.79231601953 -0.42476438731 --2.77505975962 -0.424766585231 --2.75780320168 -0.424770228565 --2.74054670334 -0.424775332213 --2.72328984737 -0.424781896174 --2.7060329318 -0.424789890647 --2.688775599 -0.424799337983 --2.67151802778 -0.424810230732 --2.65425974131 -0.424822583795 --2.63700121641 -0.42482881248 --2.61778390407 -0.424822069704 --2.59856492281 -0.42480982095 --2.5813062191 -0.424798972904 --2.56404823064 -0.424789577723 --2.54679048061 -0.424781627953 --2.52953326702 -0.424775138497 --2.51227629185 -0.424770072103 --2.4950196743 -0.424766466022 --2.47776293755 -0.424764305353 --2.46050661802 -0.42476362735 --2.44325017929 -0.424764364958 --2.42599385977 -0.424766562879 --2.40873730183 -0.424770228565 --2.3914808631 -0.424775339663 --2.37422406674 -0.424781903625 --2.35696715116 -0.424789890647 --2.33970969915 -0.424799337983 --2.32245206833 -0.424810230732 --2.30519390106 -0.424822583795 --2.28793543577 -0.42482881248 --2.26871806383 -0.424822084606 --2.24949908257 -0.424809835851 --2.23224043846 -0.424798972904 --2.21498245001 -0.424789577723 --2.19772469997 -0.424781605602 --2.18046748638 -0.424775093794 --2.163210392 -0.424770049751 --2.14595371485 -0.424766466022 --2.1286970973 -0.424764305353 --2.11144077778 -0.42476362735 --2.09418427944 -0.424764364958 --2.07692795992 -0.424766562879 --2.05967146158 -0.424770228565 --2.04241496325 -0.424775339663 --2.02515816688 -0.424781903625 --2.00790131092 -0.424789890647 --1.99064385891 -0.424799337983 --1.97338625789 -0.424810230732 --1.95612806082 -0.424822583795 --1.93886956573 -0.42482881248 --1.91965222359 -0.424822069704 --1.90043324232 -0.424809798598 --1.88317456841 -0.424798950553 --1.86591657996 -0.424789577723 --1.84865882993 -0.424781627953 --1.83140161633 -0.424775138497 --1.81414455176 -0.424770072103 --1.79688790441 -0.424766466022 --1.77963122726 -0.424764305353 --1.76237490773 -0.42476362735 --1.745118469 -0.424764364958 --1.72786217928 -0.424766562879 --1.71060565114 -0.424770228565 --1.6933491528 -0.424775317311 --1.67609229684 -0.424781881273 --1.65883541107 -0.4247899279 --1.64157798886 -0.424799375236 --1.62432041765 -0.424810230732 --1.60706225038 -0.424822583795 --1.58980372548 -0.42482881248 --1.57058638334 -0.424822084606 --1.55136740208 -0.424809835851 --1.53410872817 -0.424798972904 --1.51685070991 -0.424789562821 --1.49959295988 -0.424781613052 --1.48233577609 -0.424775116146 --1.46507868171 -0.424770049751 --1.44782203436 -0.424766466022 --1.43056541681 -0.424764305353 --1.41330906749 -0.424763604998 --1.39605256915 -0.424764364958 --1.37879627943 -0.424766585231 --1.36153975129 -0.424770228565 --1.34428331256 -0.424775317311 --1.3270264864 -0.424781881273 --1.30976957083 -0.424789890647 --1.29251217842 -0.424799337983 --1.2752545774 -0.424810230732 --1.25799635053 -0.424822583795 --1.24073785543 -0.42482881248 --1.2215205431 -0.424822069704 --1.20230153203 -0.42480982095 --1.18504285812 -0.424798972904 --1.16778489947 -0.424789577723 --1.15052714944 -0.424781605602 --1.13326993585 -0.424775116146 --1.11601287127 -0.424770072103 --1.09875622392 -0.424766466022 --1.08149954677 -0.424764305353 --1.06424319744 -0.42476362735 --1.04698672891 -0.42476438731 --1.02973043919 -0.424766585231 --1.01247394085 -0.424770228565 --0.995217502117 -0.424775317311 --0.977960631251 -0.424781881273 --0.96070368588 -0.424789890647 --0.943446278572 -0.424799337983 --0.926188707352 -0.424810230732 --0.908930510282 -0.424822561443 --0.891672000289 -0.424828790128 --0.872454658151 -0.424822069704 --0.853235691786 -0.42480982095 --0.835977017879 -0.424798972904 --0.818719014525 -0.424789577723 --0.801461264491 -0.424781605602 --0.784204065799 -0.424775116146 --0.766947001219 -0.424770072103 --0.749690338969 -0.424766466022 --0.73243367672 -0.424764305353 --0.715177342296 -0.42476362735 --0.697920903564 -0.424764364958 --0.680664628744 -0.424766562879 --0.663408085704 -0.424770228565 --0.646151602268 -0.424775332213 --0.628894761205 -0.424781896174 --0.611637875438 -0.424789890647 --0.594380483031 -0.424799337983 --0.577122882008 -0.424810230732 --0.559864670038 -0.424822561443 --0.542606160044 -0.424828790128 --0.523388817906 -0.424822069704 --0.504169844091 -0.42480982095 --0.486911185086 -0.424798972904 --0.469653174281 -0.424789577723 --0.452395416796 -0.424781605602 --0.435138218104 -0.424775116146 --0.417881146073 -0.424770072103 --0.400624483824 -0.424766466022 --0.383367821574 -0.424764305353 --0.36611148715 -0.42476362735 --0.348855033517 -0.42476438731 --0.331598758697 -0.424766585231 --0.314342230558 -0.424770228565 --0.297085754573 -0.424775317311 --0.279828906059 -0.424781881273 --0.262572005391 -0.424789890647 --0.245314601809 -0.424799337983 --0.228057015687 -0.424810230732 --0.210798814893 -0.424822583795 --0.193540304899 -0.42482881248 --0.174322973937 -0.444509960711 --0.155097495765 -0.444497182965 --0.137838795781 -0.444485902786 --0.120580768212 -0.444476120174 --0.103322982788 -0.444467805326 --0.0860657524317 -0.444461084903 --0.0688086515292 -0.444455839694 --0.0515519725159 -0.444452084601 --0.0342952972278 -0.444449827075 --0.0170389276464 -0.444449111819 -0.000217566033825 -0.444449901581 -0.0174738764763 -0.444452188909 -0.0347304334864 -0.444455966353 -0.0519869280979 -0.444461278617 -0.0692437980324 -0.444468133152 -0.0865007322282 -0.444476462901 -0.103758158162 -0.444486305117 -0.121015768498 -0.44449763 -0.13827399537 -0.444510474801 -0.155532538891 -0.444516971708 -0.174749627709 -0.44450994581 -0.19396835193 -0.444497190416 -0.211227055639 -0.444485902786 -0.228485088796 -0.444476135075 -0.245742868632 -0.444467842579 -0.263000100851 -0.444461084903 -0.280257202685 -0.444455817342 -0.297513872385 -0.444452062249 -0.314770556986 -0.444449827075 -0.332026936114 -0.444449111819 -0.34928341955 -0.444449901581 -0.366539724171 -0.444452188909 -0.383796297014 -0.444455988705 -0.40105279535 -0.44446131587 -0.418309651315 -0.444468148053 -0.435566581786 -0.444476462901 -0.452824011445 -0.444486305117 -0.470081619918 -0.444497652352 -0.487339839339 -0.444510497153 -0.504598379135 -0.444516971708 -0.523815482855 -0.44450994581 -0.543034210801 -0.444497168064 -0.560292899608 -0.444485880434 -0.577550932765 -0.444476135075 -0.594808727503 -0.444467864931 -0.612065970898 -0.444461107254 -0.629323065281 -0.444455817342 -0.64657972753 -0.444452062249 -0.663836419582 -0.444449827075 -0.681092768908 -0.444449111819 -0.698349237442 -0.444449901581 -0.715605556965 -0.444452188909 -0.732862114906 -0.444455988705 -0.750118613243 -0.444461300969 -0.76737549901 -0.444468133152 -0.784632429481 -0.444476462901 -0.801889851689 -0.444486305117 -0.819147467613 -0.444497652352 -0.836405694485 -0.444510497153 -0.85366423428 -0.444516971708 -0.872881308198 -0.44450994581 -0.892100036144 -0.444497190416 -0.909358754754 -0.444485902786 -0.926616787911 -0.444476135075 -0.943874567747 -0.444467842579 -0.961131796241 -0.444461062551 -0.978388890624 -0.444455817342 -0.995645582674 -0.444452084601 -1.01290225982 -0.444449827075 -1.03015860915 -0.444449111819 -1.04741510749 -0.444449901581 -1.06467142701 -0.444452188909 -1.08192798496 -0.444455988705 -1.09918448329 -0.444461300969 -1.11644133926 -0.4444681108 -1.13369828463 -0.444476440549 -1.15095570684 -0.444486282766 -1.16821330786 -0.44449763 -1.18547153473 -0.444510497153 -1.20273005962 -0.444516971708 -1.22194716334 -0.44450994581 -1.24116590619 -0.444497190416 -1.2584246099 -0.444485902786 -1.27568262815 -0.444476135075 -1.29294037819 -0.444467864931 -1.31019762158 -0.444461107254 -1.32745474577 -0.444455817342 -1.34471142292 -0.444452062249 -1.36196810007 -0.444449827075 -1.3792244792 -0.444449111819 -1.39648097754 -0.444449901581 -1.41373726725 -0.444452188909 -1.430993855 -0.444455988705 -1.44825035333 -0.444461300969 -1.4655072093 -0.4444681108 -1.48276415467 -0.44447645545 -1.50002157689 -0.444486320019 -1.51727920771 -0.444497652352 -1.53453743458 -0.444510497153 -1.55179595948 -0.444516971708 -1.57101303339 -0.44450994581 -1.59023174643 -0.444497190416 -1.60749045014 -0.444485887885 -1.6247484982 -0.444476082921 -1.64200627804 -0.444467827678 -1.65926349163 -0.444461084902 -1.67652058601 -0.444455817342 -1.69377726316 -0.444452084601 -1.71103397012 -0.444449827075 -1.72829031944 -0.444449089468 -1.74554678798 -0.444449879229 -1.7628031075 -0.444452188909 -1.78005966544 -0.444455988705 -1.79731619358 -0.444461300969 -1.81457307935 -0.4444681108 -1.83182999492 -0.444476440549 -1.84908741713 -0.444486305117 -1.86634501815 -0.44449763 -1.88360324502 -0.444510474801 -1.90086179972 -0.444516971708 -1.92007890343 -0.44450994581 -1.93929761648 -0.444497190416 -1.95655629039 -0.444485902786 -1.97381433844 -0.444476135075 -1.99107214808 -0.444467842579 -2.00832936168 -0.444461084903 -2.02558642626 -0.444455817342 -2.04284310341 -0.444452062249 -2.06009984016 -0.444449827075 -2.07735621929 -0.444449111819 -2.09461271763 -0.444449901581 -2.11186903715 -0.444452188909 -2.12912553549 -0.444455988705 -2.14638203383 -0.444461300969 -2.1636389494 -0.444468133152 -2.18089586496 -0.444476462901 -2.19815331697 -0.444486305117 -2.2154109478 -0.444497652352 -2.23266911507 -0.444510474801 -2.24992763996 -0.444516949356 -2.26914471388 -0.44450994581 -2.28836345672 -0.444497168064 -2.30562216044 -0.444485880434 -2.32288014889 -0.444476135075 -2.34013795853 -0.444467842579 -2.35739523172 -0.444461084903 -2.37465232611 -0.444455817342 -2.39190894365 -0.444452062249 -2.40916562081 -0.444449827075 -2.42642199994 -0.444449111819 -2.44367849827 -0.444449901581 -2.46093481779 -0.444452188909 -2.47819137573 -0.444455988705 -2.49544787407 -0.44446131587 -2.51270473004 -0.444468125701 -2.52996170521 -0.444476440549 -2.54721915722 -0.444486282766 -2.56447672844 -0.44449763 -2.58173489571 -0.444510474801 -2.5989934206 -0.444516949356 -2.61821055412 -0.44450994581 -2.63742935657 -0.444497190416 -2.65468806028 -0.444485902786 -2.67194604873 -0.444476135075 -2.68920379877 -0.444467842579 -2.70646101237 -0.444461084903 -2.72371816635 -0.444455817342 -2.7409749031 -0.444452062249 -2.75823152065 -0.444449827075 -2.77548789978 -0.444449111819 -2.79274439812 -0.444449901581 -2.81000065804 -0.444452188909 -2.82725721598 -0.444455988705 -2.84451371431 -0.444461300969 -2.86177057028 -0.444468133152 -2.87902748585 -0.444476462901 -2.89628493785 -0.444486305117 -2.91354250908 -0.444497652352 -2.93080079556 -0.444510497153 -2.94805938005 -0.444516971708 -2.96727639436 -0.444509960711 -2.98649513721 -0.444497182965 -3.00375390053 -0.444485902786 -3.02101194858 -0.444476120174 -3.03826969862 -0.444467805326 -3.05552691221 -0.444461084903 -3.07278400659 -0.444455839694 -3.09004068374 -0.444452084601 -3.1072974205 -0.444449827075 -3.12455379963 -0.444449111819 --3.14137509664 -0.444449901581 --3.12411880493 -0.444452188909 --3.10686224699 -0.444455966353 --3.08960574865 -0.444461278617 --3.07234889269 -0.444468133152 --3.05509197712 -0.444476462901 --3.03783452511 -0.444486305117 --3.02057695389 -0.44449763 --3.00331866741 -0.444510474801 --2.98606008291 -0.444516971708 --2.9668430686 -0.44450994581 --2.94762432575 -0.444497190416 --2.93036556244 -0.444485902786 --2.91310751438 -0.444476135075 --2.89584976434 -0.444467842579 --2.87859255076 -0.444461084903 --2.86133545637 -0.444455817342 --2.84407877922 -0.444452062249 --2.82682204246 -0.444449827075 --2.80956566333 -0.444449111819 --2.7923092246 -0.444449901581 --2.77505296469 -0.444452188909 --2.75779640675 -0.444455988705 --2.74053984881 -0.44446131587 --2.72328299284 -0.444468148053 --2.70602607727 -0.444476462901 --2.68876868486 -0.444486305117 --2.67151105404 -0.444497652352 --2.65425276756 -0.444510497153 --2.63699424267 -0.444516971708 --2.61777716875 -0.44450994581 --2.59855848551 -0.444497168064 --2.5812997818 -0.444485880434 --2.56404173374 -0.444476135075 --2.5467839241 -0.444467864931 --2.5295266509 -0.444461107254 --2.51226961612 -0.444455817342 --2.49501299858 -0.444452062249 --2.47775626183 -0.444449827075 --2.4604998827 -0.444449111819 --2.44324338436 -0.444449901581 --2.42598706484 -0.444452188909 --2.4087305069 -0.444455988705 --2.39147400856 -0.444461300969 --2.37421715259 -0.444468133152 --2.35696023703 -0.444476462901 --2.33970278501 -0.444486305117 --2.32244515419 -0.444497652352 --2.30518698692 -0.444510497153 --2.28792846203 -0.444516971708 --2.26871132851 -0.44450994581 --2.24949258566 -0.444497190416 --2.23223388195 -0.444485902786 --2.21497583389 -0.444476135075 --2.19771808386 -0.444467842579 --2.18046087027 -0.444461062551 --2.16320377588 -0.444455817342 --2.14594703913 -0.444452084601 --2.12869036197 -0.444449827075 --2.11143410206 -0.444449111819 --2.09417760372 -0.444449901581 --2.07692122459 -0.444452188909 --2.05966466665 -0.444455988705 --2.04240816831 -0.444461300969 --2.02515131235 -0.4444681108 --2.00789439678 -0.444476440549 --1.99063694477 -0.444486282766 --1.97337931395 -0.44449763 --1.95612108708 -0.444510497153 --1.93886256218 -0.444516971708 --1.91964548827 -0.44450994581 --1.90042674541 -0.444497190416 --1.8831680417 -0.444485902786 --1.86591002345 -0.444476135075 --1.84865224361 -0.444467864931 --1.83139503002 -0.444461107254 --1.81413790584 -0.444455817342 --1.79688119888 -0.444452062249 --1.77962452173 -0.444449827075 --1.7623681724 -0.444449111819 --1.74511170387 -0.444449901581 --1.72785538435 -0.444452188909 --1.71059882641 -0.444455988705 --1.69334232807 -0.444461300969 --1.67608544231 -0.4444681108 --1.65882852674 -0.44447645545 --1.64157107473 -0.444486320019 --1.62431347371 -0.444497652352 --1.60705527663 -0.444510497153 --1.58979672193 -0.444516971708 --1.57057961822 -0.44450994581 --1.55136090517 -0.444497190416 --1.53410223126 -0.444485887885 --1.51684418321 -0.444476082921 --1.49958637357 -0.444467827678 --1.48232913017 -0.444461084902 --1.46507203579 -0.444455817342 --1.44781538844 -0.444452084601 --1.4305587411 -0.444449827075 --1.41330236197 -0.444449089468 --1.39604583383 -0.444449879229 --1.3787895143 -0.444452188909 --1.36153295636 -0.444455988705 --1.34427648783 -0.444461300969 --1.32701963186 -0.4444681108 --1.30976268649 -0.444476440549 --1.29250526428 -0.444486305117 --1.27524763346 -0.44449763 --1.25798940659 -0.444510474801 --1.24073088169 -0.444516971708 --1.22151380778 -0.44450994581 --1.20229506492 -0.444497190416 --1.18503633141 -0.444485902786 --1.16777831316 -0.444476135075 --1.15052056312 -0.444467842579 --1.13326334953 -0.444461084903 --1.11600622535 -0.444455817342 --1.0987495184 -0.444452062249 --1.08149284125 -0.444449827075 --1.06423646212 -0.444449111819 --1.04697996378 -0.444449901581 --1.02972367406 -0.444452188909 --1.01246711612 -0.444455988705 --0.995210632682 -0.444461300969 --0.977953776717 -0.444468133152 --0.960696846247 -0.444476462901 --0.943439394236 -0.444486305117 --0.926181763411 -0.444497652352 --0.908923566341 -0.444510474801 --0.891665026545 -0.444516949356 --0.872447937727 -0.44450994581 --0.853229209781 -0.444497168064 --0.83597047627 -0.444485880434 --0.818712458014 -0.444476135075 --0.801454678178 -0.444467842579 --0.784197449684 -0.444461084903 --0.766940355301 -0.444455817342 --0.74968367815 -0.444452062249 --0.732426986098 -0.444449827075 --0.715170621872 -0.444449111819 --0.697914168239 -0.444449901581 --0.680657848716 -0.444452188909 --0.663401275873 -0.444455988705 --0.646144777536 -0.44446131587 --0.62888790667 -0.444468125701 --0.611630991101 -0.444476440549 --0.594373568892 -0.444486282766 --0.577115938067 -0.44449763 --0.559857711196 -0.444510474801 --0.5425991714 -0.444516949356 --0.523382082581 -0.44450994581 --0.504163354635 -0.444497190416 --0.486904650926 -0.444485902786 --0.469646625221 -0.444476135075 --0.452388845384 -0.444467842579 --0.435131601989 -0.444461084903 --0.417874507606 -0.444455817342 --0.400617830456 -0.444452062249 --0.383361130953 -0.444449827075 --0.366104774177 -0.444449111819 --0.348848298192 -0.444449901581 --0.331591978669 -0.444452188909 --0.314335420728 -0.444455988705 --0.297078922391 -0.444461300969 --0.279822051525 -0.444468133152 --0.262565128505 -0.444476462901 --0.245307695121 -0.444486305117 --0.228050079196 -0.444497652352 --0.210791852325 -0.444510497153 --0.193533316255 -0.444516971708 --0.174316227436 -0.46416169405 --0.155091173947 -0.464148424566 --0.137832444161 -0.464136682451 --0.120574388653 -0.464126527309 --0.103316580877 -0.464117929339 --0.0860593244433 -0.464110948146 --0.0688021965325 -0.464105479419 --0.0515454914421 -0.464101575315 --0.0342887877487 -0.464099228382 --0.0170323899947 -0.464098483324 -0.000224130926655 -0.464099295437 -0.0174804681447 -0.464101649821 -0.0347370505333 -0.464105576277 -0.0519935721531 -0.464111119508 -0.0692504700273 -0.464118257165 -0.0865074321628 -0.46412691474 -0.103764886036 -0.464137129485 -0.12102252245 -0.464148893952 -0.138280779124 -0.464162223041 -0.155539348721 -0.464168958366 -0.174756191671 -0.464161679149 -0.193974677473 -0.464148432016 -0.211233410984 -0.464136704802 -0.228491462767 -0.464126549661 -0.245749264956 -0.464117951691 -0.263006523252 -0.464110925794 -0.280263654888 -0.464105434716 -0.297520361841 -0.464101552964 -0.314777068793 -0.464099228382 -0.332033462823 -0.464098483324 -0.34928997606 -0.464099317789 -0.366546317935 -0.464101694525 -0.383802913129 -0.464105643332 -0.401059433818 -0.464111164212 -0.418316319585 -0.464118257165 -0.435573279858 -0.464126899839 -0.452830731869 -0.464137114584 -0.470088362694 -0.464148901403 -0.487346611917 -0.464162230492 -0.504605188966 -0.464168958366 -0.523822039366 -0.464161679149 -0.543040513992 -0.464148409665 -0.560299247503 -0.464136682451 -0.577557325363 -0.464126549661 -0.594815135002 -0.464117951691 -0.612072393298 -0.464110948146 -0.629329532385 -0.464105457068 -0.646586209535 -0.464101552964 -0.663842901588 -0.464099228382 -0.681099310517 -0.464098483324 -0.698355838656 -0.464099295437 -0.71561217308 -0.464101672173 -0.732868745923 -0.464105643332 -0.750125274062 -0.464111164212 -0.76738217473 -0.464118257165 -0.784639120102 -0.46412691474 -0.801896572113 -0.464137129485 -0.819154217839 -0.464148901403 -0.836412474513 -0.464162230492 -0.85367102921 -0.464168958366 -0.87288787961 -0.464161679149 -0.892106369138 -0.464148432016 -0.909365102649 -0.464136704802 -0.926623165607 -0.464126549661 -0.943880975246 -0.464117951691 -0.961138248443 -0.464110925794 -0.978395342827 -0.464105457068 -0.995652049778 -0.464101575315 -1.01290878653 -0.464099228382 -1.03016516566 -0.464098483324 -1.0474216938 -0.464099317789 -1.06467801333 -0.464101694525 -1.08193457127 -0.46410562098 -1.09919112921 -0.46411114186 -1.11644801498 -0.464118234813 -1.13370496035 -0.464126892388 -1.15096244216 -0.464137107133 -1.16822007298 -0.464148879051 -1.18547829985 -0.464162230492 -1.20273685455 -0.464168958366 -1.22195371986 -0.464161679149 -1.24117222428 -0.464148432016 -1.25843095779 -0.464136704802 -1.27568900585 -0.464126549661 -1.29294678569 -0.46411792934 -1.31020405889 -0.464110903442 -1.32746121287 -0.464105434716 -1.34471791983 -0.464101552964 -1.36197462678 -0.464099228382 -1.37923100591 -0.464098483324 -1.39648750425 -0.464099317789 -1.41374385357 -0.464101694525 -1.43100047111 -0.464105643332 -1.44825699925 -0.464111164212 -1.46551388502 -0.464118234813 -1.4827708602 -0.464126892388 -1.50002831221 -0.464137129485 -1.51728594303 -0.464148916304 -1.53454419971 -0.464162245393 -1.5518027544 -0.464168958366 -1.5710195899 -0.464161679149 -1.59023809433 -0.464148432016 -1.60749682784 -0.464136689901 -1.6247548759 -0.464126512408 -1.64201268554 -0.464117929339 -1.65926992893 -0.464110948146 -1.67652705312 -0.464105479419 -1.69378376007 -0.464101575315 -1.71104046702 -0.464099228382 -1.72829684615 -0.464098460972 -1.74555337429 -0.464099273086 -1.76280972361 -0.464101672173 -1.78006631136 -0.46410562098 -1.7973228395 -0.46411114186 -1.81457972527 -0.464118234813 -1.83183667064 -0.464126892388 -1.84909412265 -0.464137129485 -1.86635178328 -0.464148879051 -1.88361003995 -0.46416220814 -1.90086859465 -0.464168958366 -1.92008545995 -0.464161679149 -1.93930393457 -0.464148432016 -1.95656263828 -0.464136704802 -1.97382068634 -0.464126549661 -1.99107849598 -0.464117951691 -2.00833573938 -0.464110925794 -2.02559286356 -0.464105434716 -2.04284960031 -0.464101552964 -2.06010633707 -0.464099228382 -2.0773627162 -0.464098460972 -2.09461921454 -0.464099273086 -2.11187559366 -0.464101672173 -2.1291321516 -0.464105643332 -2.14638864994 -0.464111164212 -2.16364556551 -0.464118257165 -2.18090248108 -0.46412691474 -2.19815999269 -0.464137129485 -2.21541768312 -0.464148901403 -2.23267590999 -0.464162230492 -2.24993443489 -0.464168958366 -2.26915121078 -0.464161679149 -2.28836977482 -0.464148409665 -2.30562853813 -0.464136682451 -2.32288652659 -0.464126564562 -2.34014433622 -0.464117944241 -2.35740166903 -0.464110903442 -2.37465876341 -0.464105434716 -2.39191538096 -0.464101552964 -2.40917211771 -0.464099228382 -2.42642849684 -0.464098483324 -2.44368505478 -0.464099317789 -2.4609414339 -0.464101694525 -2.47819799185 -0.464105643332 -2.49545454979 -0.464111164212 -2.51271146536 -0.464118234813 -2.52996844053 -0.464126892388 -2.54722589254 -0.464137107133 -2.56448346376 -0.464148879051 -2.58174169063 -0.464162230492 -2.59900027514 -0.464168958366 -2.61821711063 -0.464161679149 -2.63743561506 -0.464148432016 -2.65469437838 -0.464136704802 -2.67195242643 -0.464126549661 -2.68921017647 -0.46411792934 -2.70646744967 -0.464110903442 -2.72372466326 -0.464105434716 -2.74098140001 -0.464101552964 -2.75823801756 -0.464099228382 -2.77549439669 -0.464098483324 -2.79275095463 -0.464099317789 -2.81000727415 -0.464101694525 -2.8272638917 -0.464105643332 -2.84452039004 -0.464111164212 -2.861777246 -0.464118257165 -2.87903422117 -0.464126899839 -2.89629167318 -0.464137114584 -2.91354930401 -0.464148901403 -2.93080759049 -0.464162230492 -2.94806617498 -0.464168958366 -2.96728301048 -0.46416169405 -2.98650145531 -0.464148424566 -3.00376021862 -0.464136682451 -3.02101832628 -0.464126527309 -3.03827613592 -0.464117929339 -3.05553334951 -0.464110948146 -3.0727904439 -0.464105479419 -3.09004718065 -0.464101575315 -3.10730391741 -0.464099228382 -3.12456029653 -0.464098483324 --3.14136854013 -0.464099295437 --3.12411218882 -0.464101649821 --3.10685557127 -0.464105576277 --3.08959907293 -0.464111119508 --3.07234221697 -0.464118257165 --3.0550852418 -0.46412691474 --3.03782778978 -0.464137129485 --3.02057015896 -0.464148893952 --3.00331187248 -0.464162223041 --2.98605328798 -0.464168958366 --2.96683645248 -0.464161679149 --2.94761794805 -0.464148432016 --2.93035918474 -0.464136704802 --2.91310113668 -0.464126549661 --2.89584332704 -0.464117951691 --2.87858611345 -0.464110925794 --2.86132901907 -0.464105434716 --2.84407228231 -0.464101552964 --2.82681554556 -0.464099228382 --2.80955916643 -0.464098483324 --2.79230266809 -0.464099317789 --2.77504634857 -0.464101694525 --2.75778979063 -0.464105643332 --2.74053323269 -0.464111164212 --2.72327637672 -0.464118257165 --2.70601946115 -0.464126899839 --2.68876200914 -0.464137114584 --2.67150431871 -0.464148901403 --2.65424603224 -0.464162230492 --2.63698750735 -0.464168958366 --2.61777067185 -0.464161679149 --2.59855216742 -0.464148409665 --2.5812934041 -0.464136682451 --2.56403535604 -0.464126549661 --2.5467775464 -0.464117951691 --2.5295202136 -0.464110948146 --2.51226311922 -0.464105457068 --2.49500650168 -0.464101552964 --2.47774976492 -0.464099228382 --2.46049332619 -0.464098483324 --2.44323682785 -0.464099295437 --2.42598050833 -0.464101672173 --2.40872389078 -0.464105643332 --2.39146733284 -0.464111164212 --2.37421041727 -0.464118257165 --2.3569535017 -0.46412691474 --2.33969604969 -0.464137129485 --2.32243841887 -0.464148901403 --2.30518019199 -0.464162230492 --2.28792160749 -0.464168958366 --2.268704772 -0.464161679149 --2.24948626757 -0.464148432016 --2.23222750425 -0.464136704802 --2.21496945619 -0.464126549661 --2.19771170616 -0.464117951691 --2.18045443296 -0.464110925794 --2.16319733858 -0.464105457068 --2.14594060183 -0.464101575315 --2.12868386507 -0.464099228382 --2.11142754555 -0.464098483324 --2.09417098761 -0.464099317789 --2.07691460848 -0.464101694525 --2.05965805054 -0.46410562098 --2.0424015522 -0.46411114186 --2.02514463663 -0.464118234813 --2.00788766146 -0.464126892388 --1.99063020945 -0.464137107133 --1.97337257862 -0.464148879051 --1.95611432195 -0.464162230492 --1.93885576725 -0.464168958366 --1.91963893175 -0.464161679149 --1.90042042732 -0.464148432016 --1.88316169381 -0.464136704802 --1.86590364576 -0.464126549661 --1.84864583612 -0.46411792934 --1.83138859272 -0.464110903442 --1.81413143873 -0.464105434716 --1.79687470198 -0.464101552964 --1.77961802482 -0.464099228382 --1.7623616457 -0.464098483324 --1.74510511756 -0.464099317789 --1.72784876823 -0.464101694525 --1.71059218049 -0.464105643332 --1.69333568215 -0.464111164212 --1.67607876659 -0.464118234813 --1.65882182121 -0.464126892388 --1.6415643692 -0.464137129485 --1.62430670858 -0.464148916304 --1.6070484519 -0.464162245393 --1.5897898674 -0.464168958366 --1.5705730319 -0.464161679149 --1.55135458708 -0.464148432016 --1.53409588337 -0.464136689901 --1.51683780551 -0.464126512408 --1.49957996607 -0.464117929339 --1.48232269287 -0.464110948146 --1.46506559849 -0.464105479419 --1.44780892134 -0.464101575315 --1.43055221439 -0.464099228382 --1.41329580546 -0.464098460972 --1.39603924751 -0.464099273086 --1.37878292799 -0.464101672173 --1.36152637005 -0.46410562098 --1.34426984191 -0.46411114186 --1.32701295614 -0.464118234813 --1.30975598097 -0.464126892388 --1.29249852896 -0.464137129485 --1.27524089813 -0.464148879051 --1.25798264146 -0.46416220814 --1.24072408676 -0.464168958366 --1.22150725126 -0.464161679149 --1.20228874683 -0.464148432016 --1.18502998352 -0.464136704802 --1.16777193546 -0.464126549661 --1.15051415563 -0.464117951691 --1.13325691223 -0.464110925794 --1.11599975824 -0.464105434716 --1.09874302149 -0.464101552964 --1.08148631453 -0.464099228382 --1.06422990561 -0.464098460972 --1.04697340727 -0.464099273086 --1.02971708774 -0.464101672173 --1.0124604702 -0.464105643332 --0.995203956963 -0.464111164212 --0.977947100997 -0.464118257165 --0.960690170527 -0.46412691474 --0.943432673812 -0.464137129485 --0.926174998283 -0.464148901403 --0.908916771412 -0.464162230492 --0.891658216715 -0.464168958366 --0.872441381216 -0.464161679149 --0.853222891688 -0.464148409665 --0.835964143276 -0.464136682451 --0.818706080317 -0.464126564562 --0.801448255777 -0.464117944241 --0.784190997482 -0.464110903442 --0.766933888197 -0.464105434716 --0.749677196145 -0.464101552964 --0.732420489192 -0.464099228382 --0.715164110064 -0.464098483324 --0.697907596827 -0.464099317789 --0.6806512326 -0.464101694525 --0.663394659758 -0.464105643332 --0.64613814652 -0.464111164212 --0.62888123095 -0.464118234813 --0.611624255777 -0.464126892388 --0.594366818666 -0.464137107133 --0.577109187841 -0.464148879051 --0.559850931167 -0.464162230492 --0.542592361569 -0.464168958366 --0.523375511169 -0.464161679149 --0.504157021642 -0.464148432016 --0.486898288131 -0.464136704802 --0.469640247524 -0.464126549661 --0.452382437884 -0.46411792934 --0.435125172138 -0.464110903442 --0.417868047953 -0.464105434716 --0.400611348451 -0.464101552964 --0.383354641497 -0.464099228382 --0.366098247469 -0.464098483324 --0.34884172678 -0.464099317789 --0.331585377455 -0.464101694525 --0.314328789711 -0.464105643332 --0.297072276473 -0.464111164212 --0.279815390706 -0.464118257165 --0.262558422983 -0.464126899839 --0.245300963521 -0.464137114584 --0.228043328971 -0.464148901403 --0.210785068571 -0.464162230492 --0.193526506424 -0.464168958366 --0.174309663475 -0.481423720718 --0.155085012317 -0.481410048902 --0.137826256454 -0.481397941708 --0.120568176731 -0.481387466192 --0.103310342878 -0.4813785851 --0.0860530603677 -0.481371350586 --0.0687959035858 -0.481365703047 --0.0515391724184 -0.481361687184 --0.0342824435793 -0.481359288097 --0.0170260209125 -0.481358513236 -0.000230525853113 -0.481359325349 -0.017486889381 -0.481361754239 -0.0347434980795 -0.481365837157 -0.0520000467077 -0.481371581554 -0.0692569706589 -0.481378912926 -0.0865139570087 -0.48138782382 -0.103771436959 -0.481398373842 -0.12102909945 -0.48141053319 -0.138287387789 -0.481424301863 -0.155545983464 -0.481431230903 -0.174762584269 -0.481423720718 -0.193980839104 -0.481410034001 -0.211239598691 -0.481397926807 -0.228497672826 -0.481387451291 -0.245755501092 -0.481378570199 -0.263012781739 -0.481371328235 -0.280269935727 -0.481365680695 -0.297526679933 -0.481361687184 -0.314783416688 -0.481359273195 -0.332039825618 -0.481358498335 -0.349296368659 -0.481359362602 -0.366552740335 -0.481361828745 -0.383809357882 -0.481365896761 -0.401065900922 -0.481371581554 -0.418322816491 -0.481378905475 -0.435579806566 -0.481387846172 -0.45283728838 -0.481398381293 -0.470094949007 -0.481410518289 -0.487353228033 -0.481424286962 -0.504611834884 -0.481431230903 -0.523828431964 -0.481423720718 -0.543046668172 -0.481410048902 -0.560305431485 -0.481397941708 -0.577563524246 -0.481387451291 -0.594821363687 -0.481378570199 -0.612078651786 -0.481371350586 -0.629335820675 -0.481365703047 -0.646592527628 -0.481361687184 -0.663849234581 -0.481359273195 -0.681105673313 -0.481358498335 -0.698362246156 -0.481359325349 -0.715618610382 -0.481361791492 -0.732875183224 -0.481365896761 -0.750131741166 -0.481371581554 -0.767388671637 -0.481378905475 -0.784645646811 -0.481387838721 -0.801903128624 -0.481398373842 -0.819160804153 -0.481410518289 -0.83641910553 -0.481424286962 -0.853677675128 -0.481431230903 -0.87289428711 -0.481423705816 -0.892112538219 -0.481410034001 -0.90937128663 -0.481397941708 -0.926629379392 -0.481387466192 -0.943887218833 -0.4813785851 -0.961144506931 -0.481371328235 -0.978401646018 -0.481365680695 -0.995658382772 -0.481361687184 -1.01291513443 -0.481359273195 -1.03017154336 -0.481358498335 -1.0474281013 -0.481359347701 -1.06468445062 -0.481361813844 -1.08194100857 -0.48136587441 -1.09919756651 -0.481371559203 -1.11645451188 -0.481378890574 -1.13371151686 -0.48138782382 -1.15096899867 -0.481398373842 -1.1682266295 -0.481410518289 -1.18548491597 -0.481424286962 -1.20274353027 -0.481431230903 -1.22196012735 -0.481423720718 -1.24117839336 -0.481410048902 -1.25843715668 -0.481397941708 -1.27569520474 -0.481387451291 -1.29295304418 -0.481378547847 -1.31021034717 -0.481371305883 -1.32746750116 -0.481365680695 -1.34472423792 -0.481361687184 -1.36198097467 -0.481359273195 -1.37923738361 -0.481358498335 -1.39649391174 -0.481359362602 -1.41375029087 -0.481361828745 -1.43100690841 -0.481365896761 -1.44826346636 -0.481371581554 -1.46552038193 -0.481378905475 -1.4827773571 -0.481387838721 -1.50003483891 -0.481398373842 -1.51729249954 -0.481410548091 -1.53455078602 -0.481424316764 -1.55180937052 -0.481431230903 -1.5710259676 -0.481423720718 -1.59024423361 -0.481410034001 -1.60750302672 -0.481397926807 -1.62476110459 -0.481387466192 -1.64201891422 -0.4813785851 -1.65927618742 -0.481371365487 -1.67653334141 -0.481365717948 -1.69379007816 -0.481361687184 -1.71104681492 -0.481359273195 -1.72830322385 -0.481358475983 -1.74555978179 -0.481359317899 -1.76281616092 -0.481361806393 -1.78007277846 -0.48136587441 -1.7973293066 -0.481371559203 -1.81458619237 -0.481378905475 -1.83184319735 -0.481387838721 -1.84910070896 -0.481398373842 -1.86635839939 -0.481410518289 -1.88361665607 -0.481424286962 -1.90087521076 -0.481431230903 -1.92009183765 -0.481423720718 -1.93931010366 -0.481410048902 -1.95656883717 -0.481397941708 -1.97382688523 -0.481387466192 -1.99108472467 -0.4813785851 -2.00834202766 -0.481371328235 -2.02559918165 -0.481365680695 -2.04285591841 -0.481361687184 -2.06011265516 -0.481359273195 -2.07736903429 -0.481358475983 -2.09462559223 -0.481359317899 -2.11188203096 -0.481361806393 -2.12913864851 -0.481365896761 -2.14639514685 -0.481371581554 -2.16365200281 -0.481378905475 -2.18090897799 -0.481387861073 -2.19816654921 -0.481398396194 -2.21542423963 -0.481410518289 -2.23268252611 -0.481424286962 -2.24994111061 -0.481431230903 -2.26915764809 -0.481423720718 -2.2883759141 -0.481410048902 -2.30563467741 -0.481397941708 -2.32289278507 -0.481387481094 -2.34015065431 -0.481378577649 -2.35740792751 -0.481371305883 -2.3746650219 -0.481365680695 -2.39192169905 -0.481361687184 -2.40917849541 -0.481359273195 -2.42643493414 -0.481358498335 -2.44369149208 -0.481359362602 -2.46094787121 -0.481361828745 -2.47820442915 -0.481365896761 -2.49546098709 -0.481371581554 -2.51271796226 -0.481378905475 -2.52997499705 -0.481387838721 -2.54723244906 -0.481398373842 -2.56449002028 -0.481410518289 -2.58174830675 -0.481424286962 -2.59900695086 -0.481431230903 -2.61822354794 -0.481423705816 -2.63744175434 -0.481410034001 -2.65470051766 -0.481397941708 -2.67195862531 -0.481387451291 -2.68921643495 -0.481378547847 -2.70647376776 -0.481371305883 -2.72373098135 -0.481365680695 -2.74098771811 -0.481361687184 -2.75824439526 -0.481359273195 -2.77550077438 -0.481358498335 -2.79275733232 -0.481359347701 -2.81001371145 -0.481361813844 -2.827270329 -0.481365896761 -2.84452688694 -0.481371581554 -2.86178380251 -0.481378905475 -2.87904077769 -0.48138782382 -2.8962982297 -0.481398358941 -2.91355592012 -0.481410518289 -2.9308142066 -0.481424286962 -2.9480727315 -0.481431230903 -2.96728938818 -0.481423720718 -2.98650765419 -0.481410048902 -3.0037664175 -0.481397941708 -3.02102452516 -0.481387466192 -3.0382823348 -0.4813785851 -3.055539608 -0.481371350586 -3.07279676199 -0.481365703047 -3.09005349875 -0.481361687184 -3.1073102355 -0.481359288097 -3.12456661463 -0.481358513236 --3.14136216243 -0.481359325349 --3.12410575152 -0.481361754239 --3.10684913397 -0.481365837157 --3.08959257603 -0.481371581554 --3.07233566046 -0.481378912926 --3.05507868528 -0.48138782382 --3.03782123327 -0.481398373842 --3.02056354285 -0.48141053319 --3.00330525637 -0.481424301863 --2.98604673147 -0.481431230903 --2.96683007479 -0.481423720718 --2.94761174917 -0.481410034001 --2.93035298586 -0.481397926807 --2.9130949378 -0.481387451291 --2.89583712816 -0.481378570199 --2.87857985496 -0.481371328235 --2.86132270098 -0.481365680695 --2.84406596422 -0.481361687184 --2.82680922747 -0.481359273195 --2.80955284834 -0.481358498335 --2.79229635 -0.481359362602 --2.77503997087 -0.481361828745 --2.75778329373 -0.481365896761 --2.74052673578 -0.481371581554 --2.72326987982 -0.481378905475 --2.70601290465 -0.481387846172 --2.68875539303 -0.481398381293 --2.6714977026 -0.481410518289 --2.65423941612 -0.481424286962 --2.63698083162 -0.481431230903 --2.61776423454 -0.481423720718 --2.59854596853 -0.481410048902 --2.58128720522 -0.481397941708 --2.56402915716 -0.481387451291 --2.54677128791 -0.481378570199 --2.52951395512 -0.481371350586 --2.51225686073 -0.481365703047 --2.49500018358 -0.481361687184 --2.47774344683 -0.481359273195 --2.46048694849 -0.481358498335 --2.44323039055 -0.481359325349 --2.42597407103 -0.481361791492 --2.40871745348 -0.481365896761 --2.39146089554 -0.481371581554 --2.37420397997 -0.481378905475 --2.3569470048 -0.481387838721 --2.33968949318 -0.481398373842 --2.32243186236 -0.481410518289 --2.30517357588 -0.481424286962 --2.28791493177 -0.481431230903 --2.26869833469 -0.481423705816 --2.24948012829 -0.481410034001 --2.23222136498 -0.481397941708 --2.21496325731 -0.481387466192 --2.19770544768 -0.4813785851 --2.18044817448 -0.481371328235 --2.16319102049 -0.481365680695 --2.14593428373 -0.481361687184 --2.12867754698 -0.481359273195 --2.11142110825 -0.481358498335 --2.09416455031 -0.481359347701 --2.07690817118 -0.481361813844 --2.05965161324 -0.48136587441 --2.0423950553 -0.481371559203 --2.02513808012 -0.481378890574 --2.00788113475 -0.48138782382 --1.99062368274 -0.481398373842 --1.97336602211 -0.481410518289 --1.95610770583 -0.481424286962 --1.93884912133 -0.481431230903 --1.91963252425 -0.481423720718 --1.90041425824 -0.481410048902 --1.88315549493 -0.481397941708 --1.86589741707 -0.481387451291 --1.84863960743 -0.481378547847 --1.83138230443 -0.481371305883 --1.81412512064 -0.481365680695 --1.79686841368 -0.481361687184 --1.77961170673 -0.481359273195 --1.7623552978 -0.481358498335 --1.74509873986 -0.481359362602 --1.72784236073 -0.481361828745 --1.71058574319 -0.481365896761 --1.69332918525 -0.481371581554 --1.67607226968 -0.481378905475 --1.65881529451 -0.481387838721 --1.64155781269 -0.481398373842 --1.62430012226 -0.481410548091 --1.60704183579 -0.481424316764 --1.58978325129 -0.481431230903 --1.5705666542 -0.481423720718 --1.55134841799 -0.481410034001 --1.53408968449 -0.481397926807 --1.51683157683 -0.481387466192 --1.49957370758 -0.4813785851 --1.48231643438 -0.481371365487 --1.4650593102 -0.481365717948 --1.44780260324 -0.481361687184 --1.43054586649 -0.481359273195 --1.41328942776 -0.481358475983 --1.39603286982 -0.481359317899 --1.37877652049 -0.481361806393 --1.36151993275 -0.48136587441 --1.3442633748 -0.481371559203 --1.32700642943 -0.481378905475 --1.30974945426 -0.481387838721 --1.29249197245 -0.481398373842 --1.27523431182 -0.481410518289 --1.25797605514 -0.481424286962 --1.24071744084 -0.481431230903 --1.22150081396 -0.481423720718 --1.20228257775 -0.481410048902 --1.18502381444 -0.481397941708 --1.16776573658 -0.481387466192 --1.15050789714 -0.4813785851 --1.13325059414 -0.481371328235 --1.11599344015 -0.481365680695 --1.09873670339 -0.481361687184 --1.08147996664 -0.481359273195 --1.06422352791 -0.481358475983 --1.04696699977 -0.481359317899 --1.02971065044 -0.481361806393 --1.0124540329 -0.481365896761 --0.99519750476 -0.481371581554 --0.977940604091 -0.481378905475 --0.960683628917 -0.481387861073 --0.943426117301 -0.481398396194 --0.92616841197 -0.481410518289 --0.908910140395 -0.481424286962 --0.891651570797 -0.481431230903 --0.872434973717 -0.481423720718 --0.853216737509 -0.481410048902 --0.835957974195 -0.481397941708 --0.818699866533 -0.481387481094 --0.801442027092 -0.481378577649 --0.784184738994 -0.481371305883 --0.766927585006 -0.481365680695 --0.749670878053 -0.481361687184 --0.732414141298 -0.481359273195 --0.715157717467 -0.481358498335 --0.697901174426 -0.481359362602 --0.6806448102 -0.481361828745 --0.663388222456 -0.481365896761 --0.646131679416 -0.481371581554 --0.628874734045 -0.481378905475 --0.611617714167 -0.481387838721 --0.594360247254 -0.481398373842 --0.577102601528 -0.481410518289 --0.559844315052 -0.481424286962 --0.542585715651 -0.481431230903 --0.52336910367 -0.481423705816 --0.504150852561 -0.481410034001 --0.486892096698 -0.481397941708 --0.46963403374 -0.481387451291 --0.452376194298 -0.481378547847 --0.4351189062 -0.481371305883 --0.417861752212 -0.481365680695 --0.400605015457 -0.481361687184 --0.383348286152 -0.481359273195 --0.366091862321 -0.481358498335 --0.348835319281 -0.481359347701 --0.331578962505 -0.481361813844 --0.314322344959 -0.481365896761 --0.297065794468 -0.481371581554 --0.279808886349 -0.481378905475 --0.262551903725 -0.48138782382 --0.245294418186 -0.481398358941 --0.228036750108 -0.481410518289 --0.210778463632 -0.481424286962 --0.193519871682 -0.481431230903 --0.174303267151 -0.498666793108 --0.155078891665 -0.498652696609 --0.137820106 -0.498640216887 --0.1205620002 -0.498629435897 --0.103304145858 -0.498620271683 --0.0860468354076 -0.49861279875 --0.0687896506861 -0.498607002199 --0.0515328971669 -0.498602874577 --0.0342761436477 -0.498600415886 --0.0170196953695 -0.498599626124 -0.000236877007407 -0.498600460589 -0.0174932661466 -0.498602971435 -0.0347499018535 -0.498607181013 -0.0520064774901 -0.498613111675 -0.0692634284496 -0.498620666564 -0.0865204408765 -0.498629823327 -0.103777945042 -0.498640686274 -0.121035635471 -0.498653210699 -0.138293948025 -0.498667396605 -0.155552569777 -0.498674541712 -0.174768939614 -0.498666793108 -0.193986959756 -0.49865269661 -0.211245741695 -0.498640216887 -0.228503841907 -0.498629420996 -0.245761699974 -0.498620286583 -0.263019002974 -0.498612828552 -0.280276186764 -0.498607002199 -0.297532953322 -0.498602874577 -0.314789712429 -0.498600400985 -0.332046158612 -0.498599611223 -0.349302731454 -0.49860047549 -0.366559118032 -0.498603001237 -0.38381575793 -0.498607210815 -0.401072330773 -0.498613074422 -0.418329283595 -0.498620629311 -0.435586303473 -0.498629875481 -0.452843800187 -0.498640723527 -0.470101483166 -0.498653210699 -0.487359791994 -0.498667396605 -0.504618436098 -0.498674541712 -0.523834809661 -0.498666793108 -0.54305280745 -0.498652696609 -0.560311585665 -0.498640216887 -0.577569693327 -0.498629420996 -0.59482756257 -0.498620286583 -0.61208486557 -0.498612828552 -0.629342064261 -0.498607002199 -0.646598815918 -0.498602874577 -0.663855537772 -0.498600400985 -0.681111991405 -0.498599596321 -0.698368579149 -0.498600445688 -0.715624973178 -0.498602986336 -0.732881590724 -0.498607210815 -0.750138178468 -0.498613074422 -0.76739512384 -0.498620629311 -0.784652128816 -0.498629853129 -0.80190962553 -0.498640701175 -0.81916731596 -0.498653210699 -0.836425662041 -0.498667396605 -0.853684276342 -0.498674541712 -0.872900649905 -0.498666778207 -0.892118662596 -0.498652681708 -0.909377425909 -0.498640216887 -0.926635548472 -0.498629435897 -0.943893417716 -0.498620271683 -0.961150720716 -0.49861279875 -0.978407904506 -0.498607002199 -0.995664656161 -0.498602874577 -1.01292142272 -0.498600400985 -1.03017786145 -0.498599596321 -1.0474344492 -0.498600460589 -1.06469085812 -0.498603001237 -1.08194744587 -0.498607195914 -1.09920400381 -0.498613059521 -1.11646097898 -0.49862061441 -1.13371801376 -0.498629838228 -1.15097549558 -0.498640701175 -1.1682331562 -0.498653210699 -1.18549150229 -0.498667396605 -1.20275014639 -0.498674541712 -1.22196650505 -0.498666793108 -1.24118453264 -0.498652696609 -1.25844332576 -0.498640216887 -1.27570140362 -0.498629420996 -1.29295924306 -0.498620286583 -1.31021657586 -0.498612828552 -1.32747375965 -0.498607002199 -1.34473049641 -0.498602874577 -1.36198726297 -0.498600400985 -1.3792437315 -0.498599596321 -1.39650028944 -0.49860047549 -1.41375666857 -0.49860304594 -1.43101331592 -0.498607240617 -1.44826990366 -0.498613074422 -1.46552681923 -0.498620629311 -1.4827837944 -0.498629838228 -1.50004133582 -0.498640686274 -1.51729905605 -0.498653240502 -1.53455734253 -0.498667426408 -1.55181592703 -0.498674541712 -1.5710323155 -0.498666793108 -1.59025034309 -0.498652681708 -1.6075091362 -0.498640201986 -1.62476727366 -0.498629420996 -1.64202511311 -0.498620286584 -1.6592824161 -0.498612843454 -1.67653959989 -0.4986070171 -1.69379633665 -0.498602874577 -1.71105310321 -0.498600400985 -1.72830954194 -0.498599596321 -1.74556612969 -0.49860047549 -1.76282253862 -0.498603016138 -1.78007915616 -0.498607195914 -1.7973357141 -0.498613059521 -1.81459265947 -0.498620629311 -1.83184969425 -0.498629853129 -1.84910720587 -0.498640701175 -1.8663648963 -0.498653210699 -1.88362321258 -0.498667411506 -1.90088182688 -0.498674556613 -1.92009818554 -0.498666793108 -1.93931621313 -0.498652696609 -1.95657497644 -0.498640216887 -1.9738330543 -0.498629435897 -1.99109095335 -0.498620301485 -2.00834825635 -0.498612828552 -2.02560544014 -0.498607002199 -2.0428622365 -0.498602874577 -2.06011897325 -0.498600400985 -2.07737535238 -0.498599596321 -2.09463196993 -0.49860047549 -2.11188846827 -0.498603016138 -2.12914508581 -0.498607210815 -2.14640158415 -0.498613104224 -2.16365849972 -0.498620659113 -2.1809155345 -0.49862986058 -2.19817304611 -0.498640708625 -2.21543073654 -0.498653210699 -2.23268908262 -0.498667396605 -2.24994772672 -0.498674541712 -2.26916402578 -0.498666793108 -2.28838199377 -0.498652711511 -2.30564081669 -0.498640231788 -2.32289898395 -0.498629435897 -2.3401568532 -0.498620301485 -2.3574141264 -0.498612828552 -2.37467128039 -0.498607002199 -2.39192801714 -0.498602874577 -2.4091848135 -0.498600400985 -2.42644131184 -0.498599596321 -2.44369786978 -0.49860047549 -2.46095424891 -0.498603016138 -2.47821086645 -0.498607195914 -2.49546742439 -0.498613059521 -2.51272439957 -0.498620629311 -2.52998143435 -0.498629838228 -2.54723894596 -0.498640686274 -2.56449657679 -0.498653210699 -2.58175486326 -0.498667411506 -2.59901350737 -0.498674556613 -2.61822992563 -0.498666778207 -2.63744795323 -0.498652681708 -2.65470671654 -0.498640216887 -2.6719648242 -0.498629420996 -2.68922263384 -0.498620286583 -2.70647996664 -0.498612828552 -2.72373718024 -0.498607002199 -2.74099391699 -0.498602874577 -2.75825071335 -0.498600400985 -2.77550715208 -0.498599596321 -2.79276365042 -0.498600460589 -2.81002002955 -0.498603001237 -2.8272767067 -0.498607210815 -2.84453332424 -0.498613074422 -2.86179023981 -0.498620629311 -2.87904721499 -0.498629853129 -2.8963047266 -0.498640701175 -2.91356241703 -0.498653210699 -2.93082070351 -0.498667396605 -2.94807928801 -0.498674541712 -2.96729570627 -0.498666793108 -2.98651379347 -0.498652696609 -3.00377255678 -0.498640216887 -3.02103060484 -0.498629435897 -3.03828847408 -0.498620271683 -3.05554580689 -0.49861279875 -3.07280302048 -0.498607002199 -3.09005981684 -0.498602874577 -3.1073165536 -0.498600415886 -3.12457293272 -0.498599626124 --3.14135584434 -0.498600460589 --3.12409943342 -0.498602971435 --3.10684275627 -0.498607181013 --3.08958613873 -0.498613111675 --3.07232922316 -0.498620666564 --3.05507224798 -0.498629823327 --3.03781473637 -0.498640686274 --3.02055698633 -0.498653210699 --3.00329869985 -0.498667396605 --2.98604017496 -0.498674541712 --2.96682375669 -0.498666793108 --2.9476056695 -0.49865269661 --2.93034690619 -0.498640216887 --2.91308885813 -0.498629420996 --2.89583098888 -0.498620286583 --2.87857365608 -0.498612828552 --2.86131644249 -0.498607002199 --2.84405964613 -0.498602874577 --2.82680290938 -0.498600400985 --2.80954653025 -0.498599611223 --2.7922899723 -0.49860047549 --2.77503353357 -0.498603001237 --2.75777685642 -0.498607210815 --2.74052029848 -0.498613074422 --2.72326338291 -0.498620629311 --2.70600634813 -0.498629875481 --2.68874883652 -0.498640723527 --2.67149114609 -0.498653210699 --2.65423280001 -0.498667396605 --2.6369741559 -0.498674541712 --2.61775785684 -0.498666793108 --2.59853988886 -0.498652696609 --2.58128112555 -0.498640216887 --2.56402301788 -0.498629420996 --2.54676508903 -0.498620286583 --2.52950775623 -0.498612828552 --2.51225060224 -0.498607002199 --2.49499386549 -0.498602874577 --2.47773712874 -0.498600400985 --2.4604806304 -0.498599596321 --2.44322401285 -0.498600445688 --2.42596763372 -0.498602986336 --2.40871101618 -0.498607210815 --2.39145445824 -0.498613074422 --2.37419754267 -0.498620629311 --2.35694056749 -0.498629853129 --2.33968305588 -0.498640701175 --2.32242536545 -0.498653210699 --2.30516701937 -0.498667396605 --2.28790837526 -0.498674541712 --2.268691957 -0.498666778207 --2.24947398901 -0.498652681708 --2.2322152257 -0.498640216887 --2.21495705843 -0.498629435897 --2.19769924879 -0.498620271683 --2.18044197559 -0.49861279875 --2.163184762 -0.498607002199 --2.14592802524 -0.498602874577 --2.12867128849 -0.498600400985 --2.11141479015 -0.498599596321 --2.09415823221 -0.498600460589 --2.07690185308 -0.498603001237 --2.05964523554 -0.498607195914 --2.04238861799 -0.498613059521 --2.02513164282 -0.49862061441 --2.00787466764 -0.498629838228 --1.99061715603 -0.498640701175 --1.9733594656 -0.498653210699 --1.95610114932 -0.498667396605 --1.93884253502 -0.498674541712 --1.91962614655 -0.498666793108 --1.90040811896 -0.498652696609 --1.88314935565 -0.498640216887 --1.86589124799 -0.498629420996 --1.84863340855 -0.498620286583 --1.83137607574 -0.498612828552 --1.81411886215 -0.498607002199 --1.7968621552 -0.498602874577 --1.77960541844 -0.498600400985 --1.76234897971 -0.498599596321 --1.74509239197 -0.49860047549 --1.72783598304 -0.49860304594 --1.71057936549 -0.498607240617 --1.69332277775 -0.498613074422 --1.67606583237 -0.498620629311 --1.6588088274 -0.498629838228 --1.64155131578 -0.498640686274 --1.62429362535 -0.498653240502 --1.60703530908 -0.498667426408 --1.58977669478 -0.498674541712 --1.57056033611 -0.498666793108 --1.55134230852 -0.498652681708 --1.5340835154 -0.498640201986 --1.51682540774 -0.498629420996 --1.4995675385 -0.498620286584 --1.4823102355 -0.498612843454 --1.46505305171 -0.4986070171 --1.44779628515 -0.498602874577 --1.4305395484 -0.498600400985 --1.41328310967 -0.498599596321 --1.39602655172 -0.49860047549 --1.37877017259 -0.498603016138 --1.36151352524 -0.498607195914 --1.3442569375 -0.498613059521 --1.32699996233 -0.498620629311 --1.30974295735 -0.498629853129 --1.29248544573 -0.498640701175 --1.27522775531 -0.498653210699 --1.25796946883 -0.498667411506 --1.24071082473 -0.498674556613 --1.22149443626 -0.498666793108 --1.20227643847 -0.498652696609 --1.18501767516 -0.498640216887 --1.1677595675 -0.498629435897 --1.15050169826 -0.498620301485 --1.13324439525 -0.498612828552 --1.11598721147 -0.498607002199 --1.09873044491 -0.498602874577 --1.08147367835 -0.498600400985 --1.06421723962 -0.498599596321 --1.04696068168 -0.49860047549 --1.02970427275 -0.498603016138 --1.0124476552 -0.498607210815 --0.995191097258 -0.498613104224 --0.977934136987 -0.498620659113 --0.960677132011 -0.49862986058 --0.943419620395 -0.498640708625 --0.926161900162 -0.498653210699 --0.908903598785 -0.498667396605 --0.891644999385 -0.498674541712 --0.872428625822 -0.498666793108 --0.85321059823 -0.498652711511 --0.835951805115 -0.498640231788 --0.818693697453 -0.498629435897 --0.801435858011 -0.498620301485 --0.78417854011 -0.498612828552 --0.766921326518 -0.498607002199 --0.749664604664 -0.498602874577 --0.732407838106 -0.498600400985 --0.715151369572 -0.498599596321 --0.697894826532 -0.49860047549 --0.680638447404 -0.498603016138 --0.663381800055 -0.498607195914 --0.646125227213 -0.498613059521 --0.628868281842 -0.498620629311 --0.611611247062 -0.498629838228 --0.594353750348 -0.498640686274 --0.57709607482 -0.498653210699 --0.559837758541 -0.498667411506 --0.542579144239 -0.498674556613 --0.523362770677 -0.498666778207 --0.504144743085 -0.498652681708 --0.48688596487 -0.498640216887 --0.469627864659 -0.498629420996 --0.452370002866 -0.498620286583 --0.435112684965 -0.498612828552 --0.417855508626 -0.498607002199 --0.400598749518 -0.498602874577 --0.38334197551 -0.498600400985 --0.366085521877 -0.498599596321 --0.348828963936 -0.498600460589 --0.331572584808 -0.498603001237 --0.31431594491 -0.498607210815 --0.297059364617 -0.498613074422 --0.279802411795 -0.498620629311 --0.262545414269 -0.498629853129 --0.24528792128 -0.498640701175 --0.228030223399 -0.498653210699 --0.210771907121 -0.498667396605 --0.193513285369 -0.498674541712 --0.174296911806 -0.515892058611 --0.155072815716 -0.515877559781 --0.1378140077 -0.51586471498 --0.120555872098 -0.515853613615 --0.103297991678 -0.51584418118 --0.086040655151 -0.515836492181 --0.0687834462151 -0.515830531716 --0.0515266675502 -0.515826284885 --0.0342698874883 -0.515823751688 --0.0170134142972 -0.515822961927 -0.000243183458222 -0.515823841095 -0.0174995984417 -0.515826404094 -0.0347562595271 -0.515830725431 -0.052012860775 -0.515836805105 -0.0692698368802 -0.515844583511 -0.0865268744528 -0.515854030848 -0.103784404695 -0.515865206719 -0.121042117476 -0.515878096223 -0.138300452381 -0.515892699361 -0.155559107661 -0.515900045633 -0.174775250256 -0.515892058611 -0.193993031979 -0.515877574682 -0.211251839996 -0.515864729881 -0.228509973734 -0.515853613615 -0.245767861605 -0.515844210982 -0.263025186956 -0.515836521983 -0.280282385647 -0.515830531716 -0.297539174557 -0.515826284885 -0.314795963466 -0.515823736787 -0.332052432001 -0.515822947025 -0.349309034646 -0.515823841095 -0.366565443575 -0.515826418996 -0.383822105825 -0.515830770135 -0.401078715921 -0.515836805105 -0.418335683644 -0.515844553709 -0.435592718423 -0.51585406065 -0.45285025239 -0.515865236521 -0.470107972622 -0.515878096223 -0.487366311252 -0.515892699361 -0.504624962807 -0.515900045633 -0.523841112852 -0.515892058611 -0.543058887124 -0.515877559781 -0.560317665339 -0.51586471498 -0.577575817705 -0.515853613615 -0.594833731651 -0.515844225883 -0.612091049552 -0.515836536884 -0.629348263144 -0.515830546618 -0.646605044603 -0.515826299787 -0.663861811161 -0.515823736787 -0.681118294597 -0.515822902322 -0.69837488234 -0.515823796391 -0.71563129127 -0.515826418996 -0.73288795352 -0.515830755234 -0.750144556165 -0.515836790204 -0.767401531339 -0.51584456861 -0.784658581018 -0.51585406065 -0.801916107535 -0.51586522162 -0.819173812866 -0.515878096223 -0.836432158947 -0.515892699361 -0.853690803051 -0.515900045633 -0.872906953097 -0.515892058611 -0.892124727368 -0.515877559781 -0.909383520484 -0.51586471498 -0.92664167285 -0.515853613615 -0.943899556995 -0.51584418118 -0.961156889796 -0.515836492181 -0.978414103389 -0.515830546618 -0.995670884847 -0.515826299787 -1.01292765141 -0.515823736787 -1.03018411994 -0.515822932124 -1.04744073749 -0.515823841095 -1.06469717622 -0.515826433897 -1.08195382357 -0.515830740333 -1.09921041131 -0.515836775303 -1.11646738648 -0.51584456861 -1.13372442126 -0.515854075551 -1.15098196268 -0.515865236521 -1.16823965311 -0.515878096223 -1.18549799919 -0.515892699361 -1.2027566731 -0.515900045633 -1.22197279334 -0.515892058611 -1.24119058251 -0.515877559781 -1.25844940543 -0.51586471498 -1.27570751309 -0.515853613615 -1.29296538234 -0.515844225883 -1.31022274494 -0.515836536884 -1.32747995854 -0.515830546618 -1.34473672509 -0.515826299787 -1.36199352145 -0.515823736787 -1.37924998998 -0.515822932124 -1.39650657773 -0.515823841095 -1.41376298666 -0.515826463699 -1.43101966381 -0.515830799937 -1.44827628136 -0.515836805105 -1.46553322673 -0.51584456861 -1.48279023171 -0.51585406065 -1.50004780293 -0.515865221619 -1.51730555296 -0.515878111124 -1.53456386924 -0.515892714262 -1.55182248354 -0.515900045633 -1.57103863358 -0.515892073512 -1.59025642276 -0.515877574682 -1.60751521587 -0.51586471498 -1.62477338314 -0.515853598714 -1.64203128219 -0.515844210982 -1.65928861499 -0.515836536884 -1.67654582858 -0.515830546618 -1.69380259514 -0.515826299787 -1.7110593617 -0.515823736787 -1.72831583023 -0.515822902322 -1.74557244777 -0.515823811292 -1.76282888651 -0.515826433897 -1.78008550406 -0.515830740333 -1.7973420918 -0.515836790204 -1.81459909677 -0.51584456861 -1.83185613155 -0.51585406065 -1.84911364317 -0.515865236521 -1.8663713634 -0.515878096223 -1.88362970948 -0.515892714262 -1.90088835359 -0.515900060534 -1.92010450363 -0.515892058611 -1.93932229281 -0.515877559781 -1.95658108592 -0.51586471498 -1.97383922338 -0.515853613615 -1.99109712243 -0.515844225883 -2.00835442543 -0.515836536884 -2.02561163902 -0.515830546618 -2.04286843538 -0.515826299787 -2.06012523174 -0.515823736787 -2.07738167047 -0.515822932124 -2.09463828802 -0.515823841095 -2.11189478636 -0.515826418996 -2.1291514039 -0.515830740332 -2.14640796185 -0.515836820006 -2.16366493702 -0.515844598412 -2.1809219718 -0.51585406065 -2.19817948342 -0.515865221619 -2.21543723345 -0.515878096223 -2.23269557953 -0.515892699361 -2.24995422363 -0.515900045633 -2.26917034387 -0.515892058611 -2.28838807344 -0.515877574682 -2.30564695597 -0.515864729881 -2.32290512323 -0.515853613615 -2.34016293287 -0.515844225883 -2.35742026568 -0.515836536884 -2.37467747927 -0.515830546618 -2.39193427563 -0.515826299787 -2.40919107199 -0.515823736787 -2.42644751072 -0.515822932124 -2.44370412826 -0.515823841095 -2.460960567 -0.515826433897 -2.47821718455 -0.515830740333 -2.49547380209 -0.515836775303 -2.51273077727 -0.515844553709 -2.52998775244 -0.515854045749 -2.54724532366 -0.515865221619 -2.56450307369 -0.515878096223 -2.58176141977 -0.515892714262 -2.59902006387 -0.515900060534 -2.61823618412 -0.515892058611 -2.6374540329 -0.515877559781 -2.65471285582 -0.51586471498 -2.67197090387 -0.515853613615 -2.68922877312 -0.515844210982 -2.70648610592 -0.515836521983 -2.72374331951 -0.515830546618 -2.74100011587 -0.515826299787 -2.75825691223 -0.515823736787 -2.77551341057 -0.515822932124 -2.79276996851 -0.515823841095 -2.81002634764 -0.515826433897 -2.82728308439 -0.515830770135 -2.84453970194 -0.515836805105 -2.86179661751 -0.51584456861 -2.87905365229 -0.515854075551 -2.8963111639 -0.515865236521 -2.91356885433 -0.515878096223 -2.93082720041 -0.515892699361 -2.94808584451 -0.515900045633 -2.96730202436 -0.515892058611 -2.98651987314 -0.515877559781 -3.00377863646 -0.51586471498 -3.02103674412 -0.515853613615 -3.03829467296 -0.51584418118 -3.05555200577 -0.515836492181 -3.07280921936 -0.515830531716 -3.09006601572 -0.515826284885 -3.10732275248 -0.515823751688 -3.12457919121 -0.515822961927 --3.14134952624 -0.515823841095 --3.12409311533 -0.515826404094 --3.10683637857 -0.515830725431 --3.08957976103 -0.515836805105 --3.07232284546 -0.515844583511 --3.05506581068 -0.515854030848 --3.03780829906 -0.515865206719 --3.02055054903 -0.515878096223 --3.00329220295 -0.515892699361 --2.98603361845 -0.515900045633 --2.9668174386 -0.515892058611 --2.94759958983 -0.515877574682 --2.93034082651 -0.515864729881 --2.91308271885 -0.515853613615 --2.89582479 -0.515844210982 --2.8785674572 -0.515836521983 --2.86131024361 -0.515830531716 --2.84405344725 -0.515826284885 --2.82679665089 -0.515823736787 --2.80954021216 -0.515822947025 --2.79228365421 -0.515823841095 --2.77502715587 -0.515826418996 --2.75777047872 -0.515830770135 --2.74051392079 -0.515836805105 --2.72325694561 -0.515844553709 --2.70599991083 -0.51585406065 --2.68874239922 -0.515865236521 --2.67148464918 -0.515878096223 --2.6542263031 -0.515892699361 --2.636967659 -0.515900045633 --2.61775153875 -0.515892058611 --2.59853380919 -0.515877559781 --2.58127504587 -0.51586471498 --2.56401687861 -0.515853613615 --2.54675894976 -0.515844225883 --2.52950161695 -0.515836536884 --2.51224440336 -0.515830546618 --2.494987607 -0.515826299787 --2.47773081064 -0.515823736787 --2.46047431231 -0.515822902322 --2.44321769476 -0.515823796391 --2.42596131563 -0.515826418996 --2.40870469809 -0.515830755234 --2.39144808054 -0.515836790204 --2.37419110536 -0.51584456861 --2.35693407059 -0.51585406065 --2.33967655897 -0.51586522162 --2.32241886854 -0.515878096223 --2.30516046286 -0.515892699361 --2.28790181875 -0.515900045633 --2.26868569851 -0.515892058611 --2.24946796894 -0.515877559781 --2.23220914602 -0.51586471498 --2.21495097876 -0.515853613615 --2.19769316912 -0.51584418118 --2.18043583631 -0.515836492181 --2.16317856312 -0.515830546618 --2.14592176676 -0.515826299787 --2.12866503 -0.515823736787 --2.11140853167 -0.515822932124 --2.09415191412 -0.515823841095 --2.07689553499 -0.515826433897 --2.05963885784 -0.515830740333 --2.04238224029 -0.515836775303 --2.02512526512 -0.51584456861 --2.00786823034 -0.515854075551 --1.99061068892 -0.515865236521 --1.97335296869 -0.515878096223 --1.95609465242 -0.515892699361 --1.93883600831 -0.515900045633 --1.91961985827 -0.515892058611 --1.90040203929 -0.515877559781 --1.88314324617 -0.51586471498 --1.86588513851 -0.515853613615 --1.84862723947 -0.515844225883 --1.83136990666 -0.515836536884 --1.81411269307 -0.515830546618 --1.79685592651 -0.515826299787 --1.77959915996 -0.515823736787 --1.76234269142 -0.515822932124 --1.74508607388 -0.515823841095 --1.72782963514 -0.515826463699 --1.71057298779 -0.515830799937 --1.69331640005 -0.515836805105 --1.67605942488 -0.51584456861 --1.6588023901 -0.51585406065 --1.64154487848 -0.515865221619 --1.62428715825 -0.515878111124 --1.60702881217 -0.515892714262 --1.58977016807 -0.515900045633 --1.57055401802 -0.515892073512 --1.55133622885 -0.515877574682 --1.53407740593 -0.51586471498 --1.51681926846 -0.515853598714 --1.49956139922 -0.515844210982 --1.48230406642 -0.515836536884 --1.46504685283 -0.515830546618 --1.44779005646 -0.515826299787 --1.43053328991 -0.515823736787 --1.41327682137 -0.515822902322 --1.39602023363 -0.515823811292 --1.3787638247 -0.515826433897 --1.36150714755 -0.515830740333 --1.34425053 -0.515836790204 --1.32699352503 -0.51584456861 --1.30973649025 -0.51585406065 --1.29247897863 -0.515865236521 --1.27522128821 -0.515878096223 --1.25796294212 -0.515892714262 --1.24070426822 -0.515900060534 --1.22148814797 -0.515892058611 --1.2022703588 -0.515877559781 --1.18501156568 -0.51586471498 --1.16775345802 -0.515853613615 --1.15049555898 -0.515844225883 --1.13323825598 -0.515836536884 --1.11598104238 -0.515830546618 --1.09872421622 -0.515826299787 --1.08146741986 -0.515823736787 --1.06421098113 -0.515822932124 --1.04695439339 -0.515823841095 --1.02969795466 -0.515826418996 --1.01244130731 -0.515830740332 --0.995184704661 -0.515836820006 --0.977927714586 -0.515844598412 --0.960670679808 -0.51585406065 --0.943413153291 -0.515865221619 --0.926155418158 -0.515878096223 --0.908897086978 -0.515892699361 --0.891638457775 -0.515900045633 --0.87242230773 -0.515892058611 --0.853204518557 -0.515877574682 --0.83594571054 -0.515864729881 --0.818687573075 -0.515853613615 --0.801429703832 -0.515844225883 --0.784172356129 -0.515836536884 --0.766915127635 -0.515830546618 --0.749658361077 -0.515826299787 --0.732401579619 -0.515823736787 --0.715145125985 -0.515822932124 --0.697888538241 -0.515823841095 --0.680632099509 -0.515826433897 --0.66337543726 -0.515830740333 --0.646118834615 -0.515836775303 --0.628861859441 -0.515844553709 --0.611604839563 -0.515854045749 --0.594347313047 -0.515865221619 --0.577089592815 -0.515878096223 --0.559831246733 -0.515892714262 --0.54257260263 -0.515900060534 --0.523356467486 -0.515892058611 --0.504138678312 -0.515877559781 --0.486879870295 -0.51586471498 --0.469621740281 -0.515853613615 --0.452363848686 -0.515844210982 --0.435106508434 -0.515836521983 --0.417849317193 -0.515830546618 --0.400592528284 -0.515826299787 --0.383335731924 -0.515823736787 --0.366079255939 -0.515822932124 --0.348822660744 -0.515823841095 --0.331566244364 -0.515826433897 --0.314309582114 -0.515830770135 --0.29705298692 -0.515836805105 --0.279796011746 -0.51584456861 --0.262538984418 -0.515854075551 --0.245281461626 -0.515865236521 --0.228023737669 -0.515878096223 --0.210765395313 -0.515892699361 --0.193506747484 -0.515900045633 --0.174290601164 -0.533094927668 --0.155067019165 -0.533080026507 --0.137808188796 -0.53306683898 --0.12055002898 -0.53305542469 --0.103292118758 -0.533045738935 --0.0860347598791 -0.533037856221 --0.0687775267288 -0.533031716943 --0.0515207219869 -0.533027350903 --0.0342639167793 -0.533024728298 --0.0170074182097 -0.533023893833 -0.000249203993007 -0.533024802804 -0.017505642958 -0.53302745521 -0.034762328025 -0.533031910658 -0.0520189544186 -0.533038124442 -0.0692759538069 -0.533046111464 -0.0865330155939 -0.533055856824 -0.103790573776 -0.533067360521 -0.121048312634 -0.533080607653 -0.138306673616 -0.533095598221 -0.155565351248 -0.533103138208 -0.174781270325 -0.533094927668 -0.193998832256 -0.533080026507 -0.211257666349 -0.53306683898 -0.228515826166 -0.53305542469 -0.245773732662 -0.533045738935 -0.263031080365 -0.533037856221 -0.280288308859 -0.533031716943 -0.29754512012 -0.533027350903 -0.314801931381 -0.533024728298 -0.332058429718 -0.533023893833 -0.349315054714 -0.533024802804 -0.366571485996 -0.533027470112 -0.383828170598 -0.533031955361 -0.401084810496 -0.533038154244 -0.41834179312 -0.533046111464 -0.43559885025 -0.533055871725 -0.452856428922 -0.533067375422 -0.470114178956 -0.533080607653 -0.487372539937 -0.533095628023 -0.504631206393 -0.533103168011 -0.52384711802 -0.533094927668 -0.543064668775 -0.533080026507 -0.560323506594 -0.53306683898 -0.577581688762 -0.53305542469 -0.594839602709 -0.533045753836 -0.612096950412 -0.533037871123 -0.629354164004 -0.533031731844 -0.646610960364 -0.533027365804 -0.663867786527 -0.533024728298 -0.681124299765 -0.533023864031 -0.69838090241 -0.533024773001 -0.715637326241 -0.533027470112 -0.732894018293 -0.53303194046 -0.75015065074 -0.533038139343 -0.767407655716 -0.533046126366 -0.784664720297 -0.533055871725 -0.801922276616 -0.533067360521 -0.819180011749 -0.533080607653 -0.836438372731 -0.533095598221 -0.853697046638 -0.533103138208 -0.872912973166 -0.533094927668 -0.89213052392 -0.533080041408 -0.909389346838 -0.533066853881 -0.926647529006 -0.53305542469 -0.943905428052 -0.533045738935 -0.961162775755 -0.533037856221 -0.97842001915 -0.533031731844 -0.995676845313 -0.533027365804 -1.01293364167 -0.533024713397 -1.03019014001 -0.533023878932 -1.04744675755 -0.533024832606 -1.06470319629 -0.533027499914 -1.08195987344 -0.53303194046 -1.09921649098 -0.533038154244 -1.11647349596 -0.533046141267 -1.13373056054 -0.533055886626 -1.15098813176 -0.533067375422 -1.168245852 -0.533080607653 -1.18550419807 -0.533095598221 -1.20276290178 -0.533103138208 -1.22197884321 -0.533094927668 -1.24119639397 -0.533080026507 -1.25845521688 -0.53306683898 -1.27571335435 -0.53305542469 -1.2929712832 -0.533045753836 -1.31022867561 -0.533037871123 -1.3274858892 -0.533031731844 -1.34474268556 -0.533027365804 -1.36199951172 -0.533024728298 -1.37925598025 -0.533023893833 -1.3965125978 -0.533024802804 -1.41376903653 -0.533027470112 -1.43102571368 -0.533031955361 -1.44828236103 -0.533038154244 -1.46553936601 -0.533046126366 -1.48279640078 -0.533055886626 -1.500053972 -0.533067375422 -1.51731172204 -0.533080607653 -1.53457006812 -0.533095598221 -1.55182874203 -0.533103138208 -1.57104465365 -0.533094942569 -1.59026223421 -0.533080041408 -1.60752105713 -0.53306683898 -1.6247792244 -0.53305542469 -1.64203715324 -0.533045753836 -1.65929448605 -0.53303784132 -1.67655172944 -0.533031716943 -1.6938085556 -0.533027380705 -1.71106535197 -0.533024713397 -1.7283218503 -0.53302384913 -1.74557846784 -0.533024802804 -1.76283490658 -0.533027499914 -1.78009158373 -0.533031925559 -1.79734820128 -0.533038154245 -1.81460520625 -0.533046141267 -1.83186227083 -0.533055871725 -1.84911981225 -0.533067375422 -1.86637756228 -0.533080607653 -1.88363593817 -0.533095598221 -1.90089461208 -0.533103138208 -1.9201105237 -0.533094927668 -1.93932807446 -0.533080026507 -1.95658692718 -0.53306683898 -1.97384509444 -0.53305542469 -1.99110299349 -0.533045753836 -2.00836032629 -0.533037871123 -2.02561753988 -0.533031731844 -2.04287433624 -0.533027365804 -2.06013119221 -0.533024728298 -2.07738769054 -0.533023893833 -2.09464430809 -0.533024802804 -2.11190080643 -0.53302745521 -2.12915748358 -0.533031925559 -2.14641410112 -0.533038139343 -2.1636710763 -0.533046126366 -2.18092811108 -0.533055886626 -2.1981856823 -0.533067375422 -2.21544343233 -0.533080607653 -2.23270177841 -0.533095628023 -2.24996048212 -0.533103168011 -2.26917642355 -0.533094927668 -2.2883939147 -0.533080026507 -2.30565273762 -0.53306683898 -2.32291090488 -0.53305542469 -2.34016877413 -0.533045753836 -2.35742616654 -0.533037871123 -2.37468338013 -0.533031731844 -2.39194017649 -0.533027365804 -2.40919703245 -0.533024728298 -2.42645347118 -0.533023893833 -2.44371008873 -0.533024802804 -2.46096658707 -0.533027470112 -2.47822326422 -0.533031925559 -2.49547988177 -0.533038139343 -2.51273685694 -0.533046126366 -2.52999389172 -0.533055871725 -2.54725146294 -0.533067375422 -2.56450927258 -0.533080607653 -2.58176767826 -0.533095598221 -2.59902632236 -0.533103138208 -2.61824220419 -0.533094927668 -2.63745981455 -0.533080041408 -2.65471869707 -0.533066853881 -2.67197680473 -0.53305542469 -2.68923473358 -0.533045738935 -2.70649206638 -0.533037856221 -2.72374927998 -0.533031731844 -2.74100613594 -0.533027365804 -2.7582628727 -0.533024728298 -2.77551937103 -0.533023893833 -2.79277604818 -0.533024832606 -2.81003242731 -0.533027499914 -2.82728910446 -0.53303194046 -2.84454578161 -0.533038154244 -2.86180275678 -0.533046141267 -2.87905979156 -0.533055886626 -2.89631736278 -0.533067375422 -2.91357511282 -0.533080607653 -2.9308334589 -0.533095598221 -2.94809210301 -0.533103138208 -2.96730804443 -0.533094927668 -2.98652565479 -0.533080026507 -3.00378447771 -0.53306683898 -3.02104264498 -0.53305542469 -3.03830057382 -0.533045738935 -3.05555790663 -0.533037856221 -3.07281512022 -0.533031716943 -3.09007191658 -0.533027350903 -3.10732871294 -0.533024728298 -3.12458521128 -0.533023893833 --3.14134344657 -0.533024802804 --3.12408703566 -0.53302745521 --3.1068303585 -0.533031910658 --3.08957368135 -0.533038124442 --3.07231664658 -0.533046111464 --3.0550596118 -0.533055856824 --3.03780210018 -0.533067360521 --3.02054435015 -0.533080607653 --3.00328600407 -0.533095598221 --2.98602735996 -0.533103138208 --2.96681141854 -0.533094927668 --2.94759380818 -0.533080026507 --2.93033498526 -0.53306683898 --2.91307681799 -0.53305542469 --2.89581888914 -0.533045738935 --2.87856155634 -0.533037856221 --2.86130434275 -0.533031716943 --2.84404754639 -0.533027350903 --2.82679069042 -0.533024728298 --2.80953419209 -0.533023893833 --2.79227763414 -0.533024802804 --2.77502113581 -0.533027470112 --2.75776445866 -0.533031955361 --2.74050784111 -0.533038154244 --2.72325080633 -0.533046111464 --2.70599377155 -0.533055871725 --2.68873620033 -0.533067375422 --2.6714784503 -0.533080607653 --2.65422010422 -0.533095628023 --2.63696140051 -0.533103168011 --2.61774551869 -0.533094927668 --2.59852802754 -0.533080026507 --2.58126920462 -0.53306683898 --2.56401103735 -0.53305542469 --2.5467531085 -0.533045753836 --2.52949571609 -0.533037871123 --2.5122385025 -0.533031731844 --2.49498170614 -0.533027365804 --2.47772485018 -0.533024728298 --2.46046835184 -0.533023864031 --2.4432117343 -0.533024773001 --2.42595529556 -0.533027470112 --2.40869861841 -0.53303194046 --2.39144200087 -0.533038139343 --2.37418502569 -0.533046126366 --2.35692793131 -0.533055871725 --2.33967036009 -0.533067360521 --2.32241266966 -0.533080607653 --2.30515426398 -0.533095598221 --2.28789556026 -0.533103138208 --2.26867967844 -0.533094927668 --2.24946218729 -0.533080041408 --2.23220336437 -0.533066853881 --2.2149451375 -0.53305542469 --2.19768726826 -0.533045738935 --2.18042993545 -0.533037856221 --2.16317260265 -0.533031731844 --2.14591574669 -0.533027365804 --2.12865900994 -0.533024713397 --2.1114025116 -0.533023878932 --2.09414589405 -0.533024832606 --2.07688951492 -0.533027499914 --2.05963277817 -0.53303194046 --2.04237616062 -0.533038154244 --2.02511918545 -0.533046141267 --2.00786209107 -0.533055886626 --1.99060451984 -0.533067375422 --1.97334679961 -0.533080607653 --1.95608845353 -0.533095598221 --1.93882977963 -0.533103138208 --1.919613868 -0.533094927668 --1.90039625764 -0.533080026507 --1.88313740492 -0.53306683898 --1.86587926745 -0.53305542469 --1.84862136841 -0.533045753836 --1.83136403561 -0.533037871123 --1.81410679221 -0.533031731844 --1.79684996605 -0.533027365804 --1.77959316969 -0.533024728298 --1.76233667135 -0.533023893833 --1.745080024 -0.533024802804 --1.72782358527 -0.533027470112 --1.71056690812 -0.533031955361 --1.69331029057 -0.533038154244 --1.6760533154 -0.533046126366 --1.65879625082 -0.533055886626 --1.64153870941 -0.533067375422 --1.62428095937 -0.533080607653 --1.60702258349 -0.533095598221 --1.58976390958 -0.533103138208 --1.57054796815 -0.533094942569 --1.55133041739 -0.533080041408 --1.53407159447 -0.53306683898 --1.51681342721 -0.53305542469 --1.49955552817 -0.533045753836 --1.48229816556 -0.53303784132 --1.46504095197 -0.533031716943 --1.44778415561 -0.533027380705 --1.43052732945 -0.533024713397 --1.41327083111 -0.53302384913 --1.39601421356 -0.533024802804 --1.37875774503 -0.533027499914 --1.36150103808 -0.533031925559 --1.34424442053 -0.533038154245 --1.32698741555 -0.533046141267 --1.30973035097 -0.533055871725 --1.29247280955 -0.533067375422 --1.27521508932 -0.533080607653 --1.25795674324 -0.533095598221 --1.24069806933 -0.533103138208 --1.22148215771 -0.533094927668 --1.20226457715 -0.533080026507 --1.18500572443 -0.53306683898 --1.16774758697 -0.53305542469 --1.15048965812 -0.533045753836 --1.13323229551 -0.533037871123 --1.11597508192 -0.533031731844 --1.09871825576 -0.533027365804 --1.0814614594 -0.533024728298 --1.06420499086 -0.533023893833 --1.04694834351 -0.533024802804 --1.02969190478 -0.53302745521 --1.01243522764 -0.533031925559 --0.995178580285 -0.533038139343 --0.977921575308 -0.533046126366 --0.960664525628 -0.533055886626 --0.94340698421 -0.533067375422 --0.926149219275 -0.533080607653 --0.908890843391 -0.533095628023 --0.891632184386 -0.533103168011 --0.872416272759 -0.533094927668 --0.853198722005 -0.533080026507 --0.835939899087 -0.53306683898 --0.81868173182 -0.53305542469 --0.801423817873 -0.533045753836 --0.784166440368 -0.533037871123 --0.766909211874 -0.533031731844 --0.749652415514 -0.533027365804 --0.732395589352 -0.533024728298 --0.715139120817 -0.533023893833 --0.697882503271 -0.533024802804 --0.680626034737 -0.533027470112 --0.663369372487 -0.533031925559 --0.64611274004 -0.533038139343 --0.628855735064 -0.533046126366 --0.611598715186 -0.533055871725 --0.594341143966 -0.533067375422 --0.577083393932 -0.533080607653 --0.559825047851 -0.533095598221 --0.542566359043 -0.533103138208 --0.523350432515 -0.533094927668 --0.50413287431 -0.533080041408 --0.486874036491 -0.533066853881 --0.469615884125 -0.53305542469 --0.452357970178 -0.533045738935 --0.435100607574 -0.533037856221 --0.417843386531 -0.533031731844 --0.400586567819 -0.533027365804 --0.383329771459 -0.533024728298 --0.366073280573 -0.533023893833 --0.348816648126 -0.533024832606 --0.331560209394 -0.533027499914 --0.314303517341 -0.53303194046 --0.297046892345 -0.533038154244 --0.27978990227 -0.533046141267 --0.262532845139 -0.533055886626 --0.245275285095 -0.533067375422 --0.228017538786 -0.533080607653 --0.210759174079 -0.533095598221 --0.193500503898 -0.533103138208 --0.17428458482 -0.550259843468 --0.155061420053 -0.550244554877 --0.137802563608 -0.550231024623 --0.12054438144 -0.550219297409 --0.103286448866 -0.550209358335 --0.0860290676356 -0.550201281905 --0.0687718093395 -0.550194978714 --0.0515149794519 -0.550190493464 --0.0342581500299 -0.550187796354 --0.0170016260818 -0.550186932087 -0.000255020102485 -0.55018787086 -0.0175114825833 -0.550190612674 -0.0347681911662 -0.550195172429 -0.0520248413086 -0.550201550126 -0.0692818667739 -0.550209760666 -0.0865389537066 -0.550219774246 -0.103796536103 -0.550231575966 -0.121054301039 -0.550245165825 -0.138312686235 -0.550260543823 -0.155571378768 -0.550268262625 -0.174787081778 -0.550259828567 -0.194004435092 -0.550244539976 -0.211263291538 -0.550231039524 -0.228521473706 -0.55021931231 -0.24577940628 -0.550209358335 -0.26303678751 -0.550201281905 -0.280294045806 -0.550194963813 -0.297550864518 -0.550190478563 -0.31480769813 -0.550187811255 -0.33206423372 -0.550186932087 -0.349320873618 -0.550187855959 -0.366577334702 -0.550190612674 -0.383834034205 -0.55019518733 -0.401090681553 -0.550201565027 -0.418347708881 -0.550209760666 -0.435604795814 -0.550219759345 -0.452862381935 -0.550231575966 -0.470120154321 -0.550245165825 -0.487378545105 -0.550260573625 -0.504637233913 -0.550268307328 -0.523852929473 -0.550259843468 -0.543070271611 -0.550244554877 -0.560329139233 -0.550231024623 -0.577587336302 -0.550219297409 -0.59484526515 -0.550209358335 -0.612102642655 -0.550201281905 -0.62935988605 -0.550194978714 -0.646616697311 -0.550190493464 -0.663873538375 -0.550187811255 -0.681130081415 -0.550186932087 -0.698386728764 -0.550187855959 -0.715643182397 -0.550190612674 -0.73289988935 -0.55019518733 -0.750156536699 -0.550201550126 -0.767413556576 -0.550209745765 -0.784670650959 -0.550219774246 -0.80192823708 -0.550231590867 -0.819185987115 -0.550245165825 -0.836444377899 -0.550260528922 -0.853703096509 -0.550268262625 -0.87291879952 -0.550259843468 -0.892136126757 -0.550244539976 -0.909394979477 -0.550231009722 -0.926653191447 -0.550219297409 -0.943911120295 -0.550209358335 -0.961168482899 -0.550201281905 -0.978425741196 -0.550194978714 -0.995682597161 -0.550190493464 -1.01293942332 -0.550187796354 -1.03019592166 -0.550186917186 -1.04745256901 -0.55018787086 -1.06470903755 -0.550190627575 -1.0819657445 -0.55019518733 -1.09922239185 -0.550201565027 -1.11647942662 -0.550209760666 -1.133736521 -0.550219759345 -1.15099409222 -0.550231561065 -1.16825184226 -0.550245150924 -1.18551021814 -0.550260528922 -1.20276892185 -0.550268262625 -1.22198465466 -0.550259843468 -1.2412019968 -0.550244554877 -1.25846084952 -0.550231024623 -1.27571904659 -0.550219297409 -1.29297697544 -0.550209358335 -1.31023436785 -0.550201281905 -1.32749161124 -0.550194978714 -1.34474840761 -0.550190493464 -1.36200526357 -0.550187811255 -1.37926179171 -0.550186932087 -1.39651840925 -0.550187841057 -1.41377487779 -0.550190597772 -1.43103158474 -0.55019518733 -1.44828823209 -0.550201565027 -1.46554526687 -0.550209760666 -1.48280233145 -0.550219759345 -1.50005993247 -0.550231575966 -1.51731771231 -0.550245180726 -1.53457605839 -0.550260543823 -1.5518347621 -0.550268262625 -1.57105049491 -0.550259828567 -1.59026786685 -0.550244510174 -1.60752668977 -0.55023099482 -1.62478485703 -0.550219282508 -1.64204281568 -0.550209343433 -1.65930017829 -0.550201252103 -1.67655745149 -0.550194948912 -1.69381430745 -0.550190493464 -1.71107110381 -0.550187796354 -1.72832763195 -0.550186917186 -1.7455842793 -0.550187885761 -1.76284071803 -0.550190642476 -1.78009745479 -0.55019518733 -1.79735410214 -0.550201579929 -1.81461110711 -0.550209775567 -1.83186820149 -0.550219774246 -1.84912577271 -0.550231575966 -1.86638355255 -0.550245150924 -1.88364195824 -0.550260543823 -1.90090063214 -0.550268277526 -1.92011630535 -0.550259843468 -1.93933364749 -0.550244525075 -1.95659253001 -0.55023099482 -1.97385072708 -0.550219297409 -1.99110865593 -0.550209358335 -2.00836598873 -0.550201281905 -2.02562326193 -0.550194963813 -2.04288011789 -0.550190478563 -2.06013691425 -0.550187811255 -2.07739347219 -0.550186932087 -2.09465014935 -0.550187855959 -2.11190664768 -0.550190612674 -2.12916338444 -0.550195202231 -2.14642000199 -0.550201579928 -2.16367697716 -0.550209760666 -2.18093407154 -0.550219774246 -2.19819170236 -0.550231590867 -2.2154494524 -0.550245165825 -2.23270779848 -0.550260573625 -2.24996650219 -0.550268307328 -2.26918226481 -0.550259828567 -2.28839957714 -0.550244539976 -2.30565834045 -0.550231024623 -2.32291650772 -0.550219297409 -2.34017449617 -0.550209358335 -2.35743194819 -0.550201281905 -2.37468916178 -0.550194978714 -2.39194589853 -0.550190493464 -2.4092027545 -0.550187811255 -2.42645931244 -0.550186932087 -2.44371592999 -0.550187855959 -2.46097242832 -0.550190612674 -2.47822916508 -0.55019518733 -2.49548578263 -0.550201579929 -2.5127427578 -0.550209775567 -2.52999985218 -0.550219774246 -2.54725748301 -0.550231590867 -2.56451529264 -0.550245165825 -2.58177369833 -0.550260528922 -2.59903234243 -0.550268262625 -2.61824804545 -0.550259828567 -2.63746541739 -0.550244554877 -2.65472429991 -0.550231039524 -2.67198246717 -0.550219297409 -2.68924039602 -0.550209358335 -2.70649778843 -0.550201281905 -2.72375500202 -0.550194978714 -2.74101185798 -0.550190493464 -2.75826865435 -0.550187811255 -2.77552515268 -0.550186932087 -2.79278182983 -0.550187885761 -2.81003826856 -0.550190642476 -2.82729494572 -0.55019518733 -2.84455162287 -0.550201579929 -2.86180865764 -0.550209775567 -2.87906569242 -0.550219759345 -2.89632332325 -0.550231575966 -2.91358113289 -0.550245165825 -2.93083947897 -0.550260528922 -2.94809818268 -0.550268262625 -2.96731388569 -0.550259843468 -2.98653125763 -0.550244554877 -3.00379014015 -0.550231024623 -3.02104830742 -0.550219297409 -3.03830623627 -0.550209358335 -3.05556356907 -0.550201281905 -3.07282078266 -0.550194978714 -3.09007763862 -0.550190493464 -3.10733449459 -0.550187796354 -3.12459099293 -0.550186932087 --3.14133766492 -0.55018787086 --3.1240811944 -0.550190612674 --3.10682451725 -0.550195172429 --3.0895678401 -0.550201550126 --3.07231074571 -0.550209760666 --3.05505371094 -0.550219774246 --3.03779613972 -0.550231575966 --3.02053833008 -0.550245165825 --3.003279984 -0.550260543823 --2.98602128029 -0.550268262625 --2.96680557728 -0.550259828567 --2.94758820534 -0.550244539976 --2.93032932282 -0.550231039524 --2.91307115555 -0.55021931231 --2.8958132267 -0.550209358335 --2.8785558939 -0.550201281905 --2.8612986803 -0.550194963813 --2.84404182434 -0.550190478563 --2.82678496838 -0.550187811255 --2.80952841044 -0.550186932087 --2.79227173328 -0.550187855959 --2.77501529455 -0.550190612674 --2.7577586174 -0.55019518733 --2.74050194025 -0.550201565027 --2.72324490547 -0.550209760666 --2.70598781109 -0.550219759345 --2.68873023987 -0.550231575966 --2.67147254944 -0.550245165825 --2.65421414375 -0.550260573625 --2.63695538044 -0.550268307328 --2.61773973703 -0.550259843468 --2.5985224247 -0.550244554877 --2.58126354218 -0.550231024623 --2.56400537491 -0.550219297409 --2.54674744606 -0.550209358335 --2.52948999405 -0.550201281905 --2.51223272085 -0.550194978714 --2.4949759841 -0.550190493464 --2.47771912813 -0.550187811255 --2.46046257019 -0.550186932087 --2.44320595264 -0.550187855959 --2.42594945431 -0.550190612674 --2.40869271755 -0.55019518733 --2.3914361 -0.550201550126 --2.37417912483 -0.550209745765 --2.35692203045 -0.550219774246 --2.33966439962 -0.550231590867 --2.32240664959 -0.550245165825 --2.30514824391 -0.550260528922 --2.2878895402 -0.550268262625 --2.26867383718 -0.550259843468 --2.24945652485 -0.550244539976 --2.23219770193 -0.550231009722 --2.21493941546 -0.550219297409 --2.19768148661 -0.550209358335 --2.1804241538 -0.550201281905 --2.16316688061 -0.550194978714 --2.14591002465 -0.550190493464 --2.12865322829 -0.550187796354 --2.11139672995 -0.550186917186 --2.0941401124 -0.55018787086 --2.07688367367 -0.550190627575 --2.05962693691 -0.55019518733 --2.04237031936 -0.550201565027 --2.02511328459 -0.550209760666 --2.0078561306 -0.550219759345 --1.99059852958 -0.550231561065 --1.97334080935 -0.550245150924 --1.95608243346 -0.550260528922 --1.93882372975 -0.550268262625 --1.91960802674 -0.550259843468 --1.9003906548 -0.550244554877 --1.88313177228 -0.550231024623 --1.86587360501 -0.550219297409 --1.84861570597 -0.550209358335 --1.83135834336 -0.550201281905 --1.81410107016 -0.550194978714 --1.7968442142 -0.550190493464 --1.77958738804 -0.550187811255 --1.7623308599 -0.550186932087 --1.74507421255 -0.550187841057 --1.72781777382 -0.550190597772 --1.71056106687 -0.55019518733 --1.69330441952 -0.550201565027 --1.67604741455 -0.550209760666 --1.65879032016 -0.550219759345 --1.64153274894 -0.550231575966 --1.6242749691 -0.550245180726 --1.60701656341 -0.550260543823 --1.5897578597 -0.550268262625 --1.57054215669 -0.550259828567 --1.55132484436 -0.550244510174 --1.53406599164 -0.55023099482 --1.51680779457 -0.550219282508 --1.49954986572 -0.550209343433 --1.48229247332 -0.550201252103 --1.46503522992 -0.550194948912 --1.44777840376 -0.550190493464 --1.4305215478 -0.550187796354 --1.41326504946 -0.550186917186 --1.39600840211 -0.550187885761 --1.37875190378 -0.550190642476 --1.36149516702 -0.55019518733 --1.34423851967 -0.550201579929 --1.3269815445 -0.550209775567 --1.30972445011 -0.550219774246 --1.29246684909 -0.550231575966 --1.27520909906 -0.550245150924 --1.25795072317 -0.550260543823 --1.24069204926 -0.550268277526 --1.22147634625 -0.550259843468 --1.20225897431 -0.550244525075 --1.18500009179 -0.55023099482 --1.16774192453 -0.550219297409 --1.15048399568 -0.550209358335 --1.13322660327 -0.550201281905 --1.11596935988 -0.550194963813 --1.09871253372 -0.550190478563 --1.08145570755 -0.550187811255 --1.06419917941 -0.550186932087 --1.04694250226 -0.550187855959 --1.02968603373 -0.550190612674 --1.01242935658 -0.550195202231 --0.995172709229 -0.550201579928 --0.977915674448 -0.550209760666 --0.960658594966 -0.550219774246 --0.943401008844 -0.550231590867 --0.926143229008 -0.550245165825 --0.908884838223 -0.550260573625 --0.891626164317 -0.550268307328 --0.872410461307 -0.550259828567 --0.853193089366 -0.550244539976 --0.835934251547 -0.550231024623 --0.81867608428 -0.550219297409 --0.801418140531 -0.550209358335 --0.784160748124 -0.550201281905 --0.76690350473 -0.550194978714 --0.749646693468 -0.550190493464 --0.732389837504 -0.550187811255 --0.715133309364 -0.550186932087 --0.697876676917 -0.550187855959 --0.680620208382 -0.550190612674 --0.663363501429 -0.55019518733 --0.64610683918 -0.550201579929 --0.628849834204 -0.550209775567 --0.611592784524 -0.550219774246 --0.5943351686 -0.550231590867 --0.577077388764 -0.550245165825 --0.559819027782 -0.550260528922 --0.542560338974 -0.550268262625 --0.523344621062 -0.550259828567 --0.504127249122 -0.550244554877 --0.486868403852 -0.550231039524 --0.469610229134 -0.550219297409 --0.452352292835 -0.550209358335 --0.43509490788 -0.550201281905 --0.417837649584 -0.550194978714 --0.400580823421 -0.550190493464 --0.38332401216 -0.550187811255 --0.366067491472 -0.550186932087 --0.348810829223 -0.550187885761 --0.331554375589 -0.550190642476 --0.314297668636 -0.55019518733 --0.297041006386 -0.550201579929 --0.279783986509 -0.550209775567 --0.262526899576 -0.550219759345 --0.245269313454 -0.550231575966 --0.228011552244 -0.550245165825 --0.210753168911 -0.550260528922 --0.193494472653 -0.550268262625 --0.174278769642 -0.567390888929 --0.155055779964 -0.567375212908 --0.137796901167 -0.567361339927 --0.12053869851 -0.567349299789 --0.103280739859 -0.567339122295 --0.0860233344138 -0.567330822349 --0.0687660509721 -0.567324355245 --0.0515091978013 -0.567319780588 --0.0342523474246 -0.567317023874 --0.0169957997277 -0.567316129804 -0.00026087113656 -0.567317098379 -0.0175173582975 -0.567319914698 -0.0347740920261 -0.567324578762 -0.0520307663828 -0.567331135273 -0.0692878169939 -0.567339554429 -0.0865449290722 -0.567349791527 -0.103802530095 -0.567361876368 -0.121060311794 -0.567375823855 -0.13831871748 -0.567391604185 -0.155577439815 -0.567399531603 -0.174792937935 -0.567390888929 -0.194010071456 -0.567375212908 -0.211268946528 -0.567361354828 -0.228527154773 -0.56734931469 -0.245785109699 -0.567339122295 -0.263042517007 -0.567330822349 -0.280299797655 -0.567324325442 -0.297556646168 -0.567319750786 -0.314813509583 -0.567317023874 -0.332070060074 -0.567316114903 -0.349326722324 -0.567317083478 -0.36658321321 -0.567319914698 -0.383839942515 -0.567324578762 -0.401096604764 -0.567331135273 -0.418353654444 -0.567339539528 -0.435610763728 -0.567349761725 -0.452868364751 -0.567361876368 -0.470126159489 -0.567375823855 -0.487384572625 -0.567391604185 -0.504643283784 -0.567399546504 -0.523858770728 -0.567390888929 -0.543075919151 -0.567375212908 -0.560334801674 -0.567361339927 -0.577593013644 -0.567349299789 -0.594850972295 -0.567339092493 -0.612108364701 -0.567330792546 -0.629365652799 -0.567324340344 -0.646622508764 -0.567319765687 -0.663879349828 -0.567317023874 -0.681135892868 -0.567316114903 -0.698392570019 -0.567317083478 -0.715649068356 -0.567319914698 -0.73290579021 -0.567324578762 -0.750162452459 -0.567331120372 -0.767419502139 -0.567339524627 -0.784676626325 -0.567349791527 -0.801934242249 -0.567361906171 -0.819192007184 -0.567375823855 -0.836450412869 -0.567391589284 -0.853709161281 -0.567399531603 -0.872924655676 -0.56739090383 -0.892141774297 -0.567375198007 -0.909400656819 -0.567361310124 -0.92665886879 -0.567349299789 -0.943916812539 -0.567339092493 -0.961174204945 -0.567330807447 -0.978431493044 -0.567324355245 -0.995688363909 -0.567319750786 -1.01294520498 -0.567317008972 -1.03020173311 -0.567316114903 -1.04745841026 -0.567317068577 -1.0647149086 -0.567319899797 -1.08197164536 -0.567324563861 -1.09922832251 -0.567331105471 -1.11648538709 -0.567339539528 -1.13374248147 -0.567349791527 -1.15100008249 -0.567361876368 -1.16825786233 -0.567375808954 -1.18551626802 -0.567391589284 -1.20277500153 -0.567399516702 -1.22199046612 -0.567390874028 -1.24120759964 -0.567375212908 -1.25846648217 -0.567361339927 -1.27572470904 -0.567349299789 -1.29298266769 -0.567339122295 -1.31024006009 -0.56733083725 -1.32749736309 -0.567324355245 -1.34475421906 -0.567319765687 -1.36201107502 -0.567317023874 -1.37926760316 -0.567316114903 -1.39652425051 -0.567317068577 -1.41378077865 -0.567319899797 -1.4310375154 -0.567324578762 -1.44829416275 -0.567331135273 -1.46555119753 -0.567339539528 -1.48280829191 -0.567349761725 -1.50006592273 -0.567361876368 -1.51732373237 -0.567375853657 -1.53458210826 -0.567391619086 -1.55184081197 -0.567399531603 -1.57105633617 -0.567390888929 -1.59027349949 -0.567375183106 -1.60753235221 -0.567361310124 -1.62479051947 -0.567349284887 -1.64204850793 -0.567339077592 -1.65930593014 -0.567330792546 -1.67656320334 -0.567324325442 -1.6938200593 -0.567319735885 -1.71107688546 -0.567317008972 -1.7283334434 -0.567316114903 -1.74559012055 -0.567317083478 -1.76284658909 -0.567319914698 -1.78010332585 -0.567324593663 -1.797360003 -0.567331150174 -1.81461706757 -0.567339539528 -1.83187419176 -0.567349776626 -1.84913179278 -0.567361876368 -1.86638960242 -0.567375823855 -1.88364800811 -0.567391619086 -1.90090668202 -0.567399546504 -1.92012214661 -0.56739090383 -1.93933928013 -0.567375198007 -1.95659819245 -0.567361310124 -1.97385641932 -0.567349299789 -1.99111437798 -0.567339122295 -2.00837174058 -0.56733083725 -2.02562904358 -0.567324340343 -2.04288589954 -0.567319750786 -2.0601426959 -0.567317023874 -2.07739931345 -0.567316114903 -2.0946559906 -0.567317083478 -2.11191248894 -0.567319914698 -2.1291692257 -0.567324593663 -2.14642584324 -0.567331150174 -2.16368287802 -0.567339539528 -2.1809399724 -0.567349776626 -2.19819766283 -0.567361891269 -2.21545553207 -0.567375823855 -2.23271387816 -0.567391619086 -2.24997252226 -0.567399561405 -2.26918804646 -0.567390888929 -2.28840517998 -0.567375212908 -2.30566400289 -0.567361339927 -2.32292222977 -0.567349299789 -2.34018021822 -0.567339122295 -2.35743767023 -0.567330822349 -2.37469494343 -0.567324340344 -2.39195173979 -0.567319765687 -2.40920859575 -0.567317023874 -2.42646515369 -0.567316114903 -2.44372183084 -0.567317083478 -2.46097832918 -0.567319914698 -2.47823506593 -0.567324593663 -2.49549174309 -0.567331150174 -2.51274877787 -0.567339539528 -2.53000587225 -0.567349776626 -2.54726350307 -0.567361891269 -2.56452131271 -0.567375823855 -2.5817797184 -0.567391589284 -2.59903842211 -0.567399531603 -2.6182538867 -0.567390874028 -2.63747102022 -0.567375198007 -2.65472990274 -0.567361339927 -2.67198807001 -0.567349299789 -2.68924605846 -0.567339122295 -2.70650351048 -0.567330822349 -2.72376072407 -0.567324340344 -2.74101758003 -0.567319750786 -2.758274436 -0.567317008972 -2.77553093433 -0.567316114903 -2.79278761148 -0.567317083478 -2.81004410982 -0.5673199296 -2.82730084658 -0.567324608564 -2.84455752373 -0.567331150174 -2.86181461811 -0.567339539528 -2.87907171249 -0.567349761725 -2.89632928371 -0.567361876368 -2.91358709335 -0.567375823855 -2.93084549904 -0.567391589284 -2.94810426235 -0.567399531603 -2.96731978655 -0.567390888929 -2.98653692007 -0.567375212908 -3.00379580259 -0.567361339927 -3.02105396986 -0.567349299789 -3.03831189871 -0.567339122295 -3.05556929112 -0.567330822349 -3.07282656431 -0.567324355245 -3.09008342028 -0.567319780588 -3.10734027624 -0.567317023874 -3.12459683418 -0.567316129804 --3.14133182366 -0.567317098379 --3.12407535314 -0.567319914698 --3.10681861639 -0.567324578762 --3.08956193924 -0.567331135273 --3.07230484486 -0.567339554429 --3.05504775048 -0.567349791527 --3.03779017925 -0.567361876368 --3.02053236961 -0.567375823855 --3.00327396393 -0.567391604185 --2.98601520061 -0.567399531603 --2.96679967642 -0.567390888929 --2.9475825429 -0.567375212908 --2.93032366038 -0.567361354828 --2.91306549311 -0.56734931469 --2.89580756426 -0.567339122295 --2.87855017185 -0.567330822349 --2.86129289865 -0.567324325442 --2.84403604269 -0.567319750786 --2.82677918673 -0.567317023874 --2.80952256918 -0.567316114903 --2.79226589203 -0.567317083478 --2.77500945329 -0.567319914698 --2.75775271654 -0.567324578762 --2.74049603939 -0.567331135273 --2.72323900461 -0.567339539528 --2.70598185063 -0.567349761725 --2.6887242198 -0.567361876368 --2.67146652937 -0.567375823855 --2.65420812369 -0.567391604185 --2.63694936037 -0.567399546504 --2.61773389578 -0.567390888929 --2.59851676226 -0.567375212908 --2.58125787974 -0.567361339927 --2.56399965286 -0.567349299789 --2.54674172401 -0.567339092493 --2.52948433161 -0.567330792546 --2.51222699881 -0.567324340344 --2.49497014284 -0.567319765687 --2.47771328688 -0.567317023874 --2.46045672894 -0.567316114903 --2.44320005179 -0.567317083478 --2.42594355345 -0.567319914698 --2.40868681669 -0.567324578762 --2.39143013954 -0.567331120372 --2.37417316437 -0.567339524627 --2.35691606999 -0.567349791527 --2.33965837956 -0.567361906171 --2.32240056992 -0.567375823855 --2.30514216423 -0.567391589284 --2.28788346052 -0.567399531603 --2.26866799593 -0.56739090383 --2.24945086241 -0.567375198007 --2.23219197989 -0.567361310124 --2.21493375301 -0.567349299789 --2.19767576456 -0.567339092493 --2.18041837215 -0.567330807447 --2.16316115856 -0.567324355245 --2.1459043026 -0.567319750786 --2.12864738703 -0.567317008972 --2.11139088869 -0.567316114903 --2.09413427115 -0.567317068577 --2.07687777281 -0.567319899797 --2.05962103605 -0.567324563861 --2.0423643589 -0.567331105471 --2.02510726452 -0.567339539528 --2.00785014033 -0.567349791527 --1.99059256911 -0.567361876368 --1.97333478928 -0.567375808954 --1.95607638359 -0.567391589284 --1.93881765008 -0.567399516702 --1.91960215568 -0.567390874028 --1.90038502216 -0.567375212908 --1.88312613964 -0.567361339927 --1.86586794257 -0.567349299789 --1.84860998392 -0.567339122295 --1.83135259151 -0.56733083725 --1.81409531832 -0.567324355245 --1.79683846235 -0.567319765687 --1.77958160639 -0.567317023874 --1.76232504845 -0.567316114903 --1.7450684011 -0.567317068577 --1.72781193257 -0.567319899797 --1.71055516601 -0.567324578762 --1.69329848886 -0.567331135273 --1.67604145408 -0.567339539528 --1.65878432989 -0.567349761725 --1.64152672887 -0.567361876368 --1.62426891923 -0.567375853657 --1.60701051355 -0.567391619086 --1.58975180984 -0.567399531603 --1.57053631544 -0.567390888929 --1.55131921172 -0.567375183106 --1.5340603292 -0.567361310124 --1.51680210233 -0.567349284887 --1.49954417348 -0.567339077592 --1.48228675127 -0.567330792546 --1.46502944827 -0.567324325442 --1.44777259231 -0.567319735885 --1.43051573634 -0.567317008972 --1.4132592082 -0.567316114903 --1.39600253105 -0.567317083478 --1.37874603272 -0.567319914698 --1.36148929596 -0.567324593663 --1.34423261881 -0.567331150174 --1.32697558403 -0.567339539528 --1.30971848965 -0.567349776626 --1.29246088862 -0.567361876368 --1.27520310879 -0.567375823855 --1.2579446733 -0.567391619086 --1.24068593979 -0.567399546504 --1.22147047519 -0.56739090383 --1.20225334167 -0.567375198007 --1.18499445915 -0.567361310124 --1.16773626209 -0.567349299789 --1.15047830343 -0.567339122295 --1.13322091102 -0.56733083725 --1.11596363783 -0.567324340343 --1.09870678187 -0.567319750786 --1.0814498961 -0.567317023874 --1.06419333815 -0.567316114903 --1.04693669081 -0.567317083478 --1.02968019247 -0.567319914698 --1.01242345572 -0.567324593663 --0.995166793467 -0.567331150174 --0.977909743786 -0.567339539528 --0.960652634501 -0.567349776626 --0.943395018578 -0.567361891269 --0.926137208939 -0.567375823855 --0.908878803253 -0.567391619086 --0.891620114446 -0.567399561405 --0.872404620051 -0.567390888929 --0.853187456727 -0.567375212908 --0.835928589105 -0.567361339927 --0.818670406938 -0.567349299789 --0.801412448287 -0.567339122295 --0.784155026078 -0.567330822349 --0.766897752881 -0.567324340344 --0.749640911818 -0.567319765687 --0.732384040952 -0.567317023874 --0.715127468109 -0.567316114903 --0.69787082076 -0.567317083478 --0.680614352226 -0.567319914698 --0.663357600569 -0.567324593663 --0.646100908518 -0.567331150174 --0.628843873739 -0.567339539528 --0.611586779356 -0.567349776626 --0.594329163432 -0.567361891269 --0.577071368694 -0.567375823855 --0.559812963009 -0.567391589284 --0.542554244399 -0.567399531603 --0.523338750005 -0.567390874028 --0.504121609032 -0.567375198007 --0.486862748861 -0.567361339927 --0.469604559243 -0.567349299789 --0.452346585691 -0.567339122295 --0.435089178383 -0.567330822349 --0.417831897736 -0.567324340344 --0.400575049222 -0.567319750786 --0.383318208158 -0.567317008972 --0.366061650216 -0.567316114903 --0.348804965615 -0.567317083478 --0.33154848963 -0.5673199296 --0.314291767776 -0.567324608564 --0.297035083175 -0.567331150174 --0.279778033495 -0.567339539528 --0.26252092421 -0.567349761725 --0.245263319462 -0.567361876368 --0.228005535901 -0.567375823855 --0.210747130215 -0.567391589284 --0.19348840788 -0.567399531603 --0.174272917211 -0.584503129124 --0.155050184577 -0.584487050772 --0.137791287154 -0.584472835064 --0.120533062145 -0.584460526705 --0.103275077418 -0.584450110793 --0.0860176458955 -0.584441587329 --0.0687603391707 -0.584434956312 --0.0515034617856 -0.584430277348 --0.0342465881258 -0.584427446127 --0.0169900178444 -0.584426522255 -0.000266676302998 -0.584427520633 -0.0175231874455 -0.584430426359 -0.0347799472511 -0.584435224533 -0.0520366458223 -0.584441944957 -0.0692937178537 -0.584450572729 -0.0865508541465 -0.584461048245 -0.103808477521 -0.584473416209 -0.121066285297 -0.584487691521 -0.138324715197 -0.584503859281 -0.155583459884 -0.584511995316 -0.174798749387 -0.584503144026 -0.194015666842 -0.584487080574 -0.211274560541 -0.584472849965 -0.228532794863 -0.584460526705 -0.245790775865 -0.584450125694 -0.2630482018 -0.584441617131 -0.28030551225 -0.584434956312 -0.297562390566 -0.584430262447 -0.314819261432 -0.584427446127 -0.332075826824 -0.584426537156 -0.349332526326 -0.584427535534 -0.366589047015 -0.584430411458 -0.383845798671 -0.584435209632 -0.401102490723 -0.584441930056 -0.418359562755 -0.584450528026 -0.435616694391 -0.584461003542 -0.452874317765 -0.584473416209 -0.470132134855 -0.584487706423 -0.487390562892 -0.584503859281 -0.504649303854 -0.584511995316 -0.523864597082 -0.584503129124 -0.543081521988 -0.584487050772 -0.560340419412 -0.584472835064 -0.577598661184 -0.584460526705 -0.594856649637 -0.584450095892 -0.612114056945 -0.584441587329 -0.629371345043 -0.584434956312 -0.646628245712 -0.584430262447 -0.663885131478 -0.584427461028 -0.681141674518 -0.584426552058 -0.69839836657 -0.584427535534 -0.715654894709 -0.584430411458 -0.732911646366 -0.584435209632 -0.750168338418 -0.584441944957 -0.7674254179 -0.584450542927 -0.784682556987 -0.584461033344 -0.801940187812 -0.58447343111 -0.81919798255 -0.584487691521 -0.836456403136 -0.584503859281 -0.853715166449 -0.584511995316 -0.872930452227 -0.584503144026 -0.892147362232 -0.584487080574 -0.909406259656 -0.584472849965 -0.926664486527 -0.584460526705 -0.94392247498 -0.584450095892 -0.961179897189 -0.58444160223 -0.978437200189 -0.584434971213 -0.995694100856 -0.584430262447 -1.01295095682 -0.584427446127 -1.03020751477 -0.584426522255 -1.04746422172 -0.584427520633 -1.06472074986 -0.584430426359 -1.08197751641 -0.584435209632 -1.09923419357 -0.584441915154 -1.11649125814 -0.584450557828 -1.13374838233 -0.584461063147 -1.15100601315 -0.584473446011 -1.16826382279 -0.584487706423 -1.18552225828 -0.584503859281 -1.20278102159 -0.584511980414 -1.22199627757 -0.584503099322 -1.24121320248 -0.584487050772 -1.2584721148 -0.584472849965 -1.27573034168 -0.584460526705 -1.29298833013 -0.584450125694 -1.31024575233 -0.584441632032 -1.32750308514 -0.584434971213 -1.3447599709 -0.584430277348 -1.36201682686 -0.584427461028 -1.3792733848 -0.584426537156 -1.39653009176 -0.584427535534 -1.4137866199 -0.584430426359 -1.43104335666 -0.584435224533 -1.44830006361 -0.584441930056 -1.46555712819 -0.584450542927 -1.48281422257 -0.584461033344 -1.5000718534 -0.584473416209 -1.51732969284 -0.584487706422 -1.53458812833 -0.584503874182 -1.55184686184 -0.584511995316 -1.57106214762 -0.584503144026 -1.59027907252 -0.584487065673 -1.60753795505 -0.584472835064 -1.62479615212 -0.584460541606 -1.64205414057 -0.584450110793 -1.65931159258 -0.584441587329 -1.67656889558 -0.584434956312 -1.69382578135 -0.584430247545 -1.71108266711 -0.584427431226 -1.72833922505 -0.584426537156 -1.74559590221 -0.584427535534 -1.76285243035 -0.584430411458 -1.78010919691 -0.584435209632 -1.79736587406 -0.584441930056 -1.81462293863 -0.584450542927 -1.83188009262 -0.584461033344 -1.84913775324 -0.584473416209 -1.86639556289 -0.584487706422 -1.88365396857 -0.584503874182 -1.90091270208 -0.584511995316 -1.92012795806 -0.584503144026 -1.93934488296 -0.584487065673 -1.95660382509 -0.584472835064 -1.97386205196 -0.584460526705 -1.99112004042 -0.584450110793 -2.00837746262 -0.584441617131 -2.02563476562 -0.584434971213 -2.04289162159 -0.584430262447 -2.06014847755 -0.584427461028 -2.0774050951 -0.584426552058 -2.09466177225 -0.584427535534 -2.11191827059 -0.584430426359 -2.12917500735 -0.584435239434 -2.14643168449 -0.584441959858 -2.16368877888 -0.584450542927 -2.18094587326 -0.584461018443 -2.19820356369 -0.584473416209 -2.21546143293 -0.584487691521 -2.23271983862 -0.584503874183 -2.24997854233 -0.584512010217 -2.2691937685 -0.584503144026 -2.28841072321 -0.584487080574 -2.30566966533 -0.584472849965 -2.32292789221 -0.584460526705 -2.34018582106 -0.584450125694 -2.35744327307 -0.584441617131 -2.37470060587 -0.584434956312 -2.39195746183 -0.584430262447 -2.4092143774 -0.584427461028 -2.42647093534 -0.584426552058 -2.44372761249 -0.584427535534 -2.46098411083 -0.584430411458 -2.47824084758 -0.584435209632 -2.49549758434 -0.584441944957 -2.51275467873 -0.584450542927 -2.53001183271 -0.584461018443 -2.54726946354 -0.58447343111 -2.56452727318 -0.584487706423 -2.58178567886 -0.584503859281 -2.59904444218 -0.584511995316 -2.61825972796 -0.584503129124 -2.63747662306 -0.584487050772 -2.65473550558 -0.584472835064 -2.67199373245 -0.584460526705 -2.68925178051 -0.584450125694 -2.70650923252 -0.584441617131 -2.72376650572 -0.584434956312 -2.74102336168 -0.584430247545 -2.75828021765 -0.584427431226 -2.77553677559 -0.584426522255 -2.79279345274 -0.584427520633 -2.81004995107 -0.584430426359 -2.82730674743 -0.584435239434 -2.84456348419 -0.584441944957 -2.86182057858 -0.584450542927 -2.87907767296 -0.584461018443 -2.89633524418 -0.584473416209 -2.91359305382 -0.584487706423 -2.93085151911 -0.584503859281 -2.94811028242 -0.584511995316 -2.9673255682 -0.584503129124 -2.9865424633 -0.584487050772 -3.00380134582 -0.584472835064 -3.0210595727 -0.584460526705 -3.03831756115 -0.584450110793 -3.05557501316 -0.584441587329 -3.07283234596 -0.584434956312 -3.09008920193 -0.584430277348 -3.10734605789 -0.584427446127 -3.12460267544 -0.584426522255 --3.14132598241 -0.584427520633 --3.12406951189 -0.584430426359 --3.10681271553 -0.584435224533 --3.08955597877 -0.584441944957 --3.07229888439 -0.584450572729 --3.05504179001 -0.584461048245 --3.03778421879 -0.584473416209 --3.02052640915 -0.584487691521 --3.00326794386 -0.584503859281 --2.98600918054 -0.584511995316 --2.96679389477 -0.584503144026 --2.94757699967 -0.584487080574 --2.93031811714 -0.584472849965 --2.91305989027 -0.584460526705 --2.89580190182 -0.584450125694 --2.87854444981 -0.584441617131 --2.86128711701 -0.584434956312 --2.84403026104 -0.584430262447 --2.82677340508 -0.584427446127 --2.80951678753 -0.584426537156 --2.79226011038 -0.584427535534 --2.77500361204 -0.584430411458 --2.75774687528 -0.584435209632 --2.74049019813 -0.584441930056 --2.72323310375 -0.584450528026 --2.70597594977 -0.584461003542 --2.68871831894 -0.584473416209 --2.67146056891 -0.584487706423 --2.65420210362 -0.584503859281 --2.6369433403 -0.584511995316 --2.61772805452 -0.584503129124 --2.59851109982 -0.584487050772 --2.58125221729 -0.584472835064 --2.56399399042 -0.584460526705 --2.54673606157 -0.584450095892 --2.52947866917 -0.584441587329 --2.51222133637 -0.584434956312 --2.49496436119 -0.584430262447 --2.47770750523 -0.584427461028 --2.46045100689 -0.584426552058 --2.44319427014 -0.584427535534 --2.4259377718 -0.584430411458 --2.40868103504 -0.584435209632 --2.39142429828 -0.584441944957 --2.37416726351 -0.584450542927 --2.35691010952 -0.584461033344 --2.33965241909 -0.58447343111 --2.32239460945 -0.584487691521 --2.30513620377 -0.584503859281 --2.28787744045 -0.584511995316 --2.26866215467 -0.584503144026 --2.24944525957 -0.584487080574 --2.23218637705 -0.584472849965 --2.21492815018 -0.584460526705 --2.19767010212 -0.584450095892 --2.18041270971 -0.58444160223 --2.16315549612 -0.584434971213 --2.14589858055 -0.584430262447 --2.12864160538 -0.584427446127 --2.11138510704 -0.584426522255 --2.0941284895 -0.584427520633 --2.07687193155 -0.584430426359 --2.05961513519 -0.584435209632 --2.04235845804 -0.584441915154 --2.02510136366 -0.584450557828 --2.00784420967 -0.584461063147 --1.99058663845 -0.584473446011 --1.97332882881 -0.584487706423 --1.95607039332 -0.584503859281 --1.93881163001 -0.584511980414 --1.91959634423 -0.584503099322 --1.90037944913 -0.584487050772 --1.88312056661 -0.584472849965 --1.86586230993 -0.584460526705 --1.84860429168 -0.584450125694 --1.83134689927 -0.584441632032 --1.81408962607 -0.584434971213 --1.79683274031 -0.584430277348 --1.77957585454 -0.584427461028 --1.7623192966 -0.584426537156 --1.74506261945 -0.584427535534 --1.72780609131 -0.584430426359 --1.71054929495 -0.584435224533 --1.693292588 -0.584441930056 --1.67603552341 -0.584450542927 --1.65877839923 -0.584461033344 --1.6415207684 -0.584473416209 --1.62426292896 -0.584487706422 --1.60700452328 -0.584503874182 --1.58974581957 -0.584511995316 --1.57053050398 -0.584503144026 --1.55131357908 -0.584487065673 --1.53405469656 -0.584472835064 --1.51679646969 -0.584460541606 --1.49953851104 -0.584450110793 --1.48228105902 -0.584441587329 --1.46502372623 -0.584434956312 --1.44776687026 -0.584430247545 --1.4305100143 -0.584427431226 --1.41325342655 -0.584426537156 --1.3959967196 -0.584427535534 --1.37874022126 -0.584430411458 --1.36148348451 -0.584435209632 --1.34422677755 -0.584441930056 --1.32696968317 -0.584450542927 --1.30971255899 -0.584461033344 --1.29245495796 -0.584473416209 --1.27519714832 -0.584487706422 --1.25793868303 -0.584503874182 --1.24067991972 -0.584511995316 --1.22146466374 -0.584503144026 --1.20224773884 -0.584487065673 --1.18498882652 -0.584472835064 --1.16773059964 -0.584460526705 --1.15047261119 -0.584450110793 --1.13321521878 -0.584441617131 --1.11595794558 -0.584434971213 --1.09870105982 -0.584430262447 --1.08144414425 -0.584427461028 --1.0641875565 -0.584426552058 --1.04693087936 -0.584427535534 --1.02967438102 -0.584430426359 --1.01241761446 -0.584435239434 --0.995160907508 -0.584441959858 --0.977903842926 -0.584450542927 --0.960646718741 -0.584461018443 --0.943389087916 -0.584473416209 --0.926131263375 -0.584487691521 --0.908872812987 -0.584503874183 --0.891614079476 -0.584512010217 --0.8723988235 -0.584503144026 --0.853181898594 -0.584487080574 --0.83592300117 -0.584472849965 --0.818664774298 -0.584460526705 --0.801406785845 -0.584450125694 --0.784149348736 -0.584441617131 --0.766892045736 -0.584434956312 --0.749635174871 -0.584430262447 --0.732378274203 -0.584427461028 --0.715121686458 -0.584426552058 --0.697865024209 -0.584427535534 --0.680608525872 -0.584430411458 --0.663351759314 -0.584435209632 --0.646095052361 -0.584441944957 --0.628837972879 -0.584450542927 --0.611580833793 -0.584461018443 --0.594323217869 -0.58447343111 --0.57706540823 -0.584487706423 --0.559806972742 -0.584503859281 --0.542548209429 -0.584511995316 --0.523332923651 -0.584503129124 --0.504116028547 -0.584487050772 --0.486857138574 -0.584472835064 --0.469598919153 -0.584460526705 --0.45234092325 -0.584450125694 --0.43508349359 -0.584441617131 --0.417826190591 -0.584434956312 --0.400569312274 -0.584430247545 --0.383312448859 -0.584427431226 --0.366055868566 -0.584426522255 --0.348799169064 -0.584427520633 --0.331542670727 -0.584430426359 --0.31428591162 -0.584435239434 --0.297029204666 -0.584441944957 --0.279772132635 -0.584450542927 --0.262515000999 -0.584461018443 --0.245257377625 -0.584473416209 --0.227999567986 -0.584487706423 --0.210741132498 -0.584503859281 --0.193482384086 -0.584511995316 --0.174267105758 -0.601597994566 --0.15504463762 -0.601581543684 --0.137785717845 -0.601567000151 --0.120527468622 -0.60155442357 --0.103269465268 -0.601543754339 --0.0860120076686 -0.60153503716 --0.0687546767295 -0.601528257131 --0.0514977741986 -0.601523444057 --0.0342408758588 -0.601520553231 --0.0169842829928 -0.601519614458 -0.000272434204815 -0.601520642638 -0.0175289693288 -0.601523637772 -0.0347857521847 -0.601528540253 -0.0520424740389 -0.601535409689 -0.0692995702848 -0.601544231176 -0.0865567289293 -0.601554960012 -0.103814376518 -0.601567625999 -0.121072214097 -0.601582229137 -0.138330668211 -0.601598784328 -0.155589431524 -0.601607084274 -0.174804508686 -0.601598009467 -0.194021217525 -0.601581588387 -0.2112801373 -0.601567029953 -0.228538393974 -0.60155442357 -0.245796401054 -0.60154376924 -0.26305384934 -0.601535066962 -0.280311182141 -0.601528272033 -0.29756808281 -0.601523458958 -0.314824968577 -0.601520568132 -0.33208155632 -0.60151964426 -0.349338278174 -0.60152065754 -0.366594821214 -0.601523593068 -0.383851595223 -0.601528510451 -0.401108317077 -0.601535394788 -0.418365426362 -0.601544201374 -0.435622572899 -0.60155493021 -0.452880218625 -0.601567625999 -0.470138072967 -0.601582244038 -0.487396515906 -0.601598784328 -0.50465528667 -0.601607084274 -0.523870378733 -0.601597994566 -0.543087080121 -0.601581558585 -0.560345992446 -0.601567015052 -0.57760424912 -0.60155442357 -0.594862267375 -0.60154376924 -0.612119704485 -0.601535081863 -0.629377007484 -0.601528286934 -0.646633923054 -0.601523458958 -0.663890838623 -0.601520583034 -0.681147411466 -0.601519659162 -0.69840413332 -0.60152065754 -0.715660691261 -0.601523593068 -0.73291747272 -0.601528510451 -0.750174179673 -0.601535409689 -0.767431274057 -0.601544216275 -0.784688442945 -0.601554945111 -0.801946088671 -0.601567625999 -0.819203898311 -0.601582229137 -0.836462348699 -0.601598784328 -0.853721126914 -0.601607084274 -0.872936189175 -0.601597994566 -0.892152905464 -0.601581573486 -0.90941183269 -0.601567029953 -0.926670089364 -0.60155442357 -0.94392810762 -0.60154376924 -0.961185544729 -0.601535066962 -0.97844286263 -0.601528272033 -0.9956997782 -0.601523473859 -1.01295664907 -0.601520583034 -1.03021323681 -0.601519629359 -1.04746997357 -0.601520642638 -1.06472653151 -0.601523622871 -1.08198332787 -0.601528540253 -1.09924003482 -0.601535394788 -1.1164970994 -0.601544216275 -1.13375425339 -0.601554960012 -1.15101191402 -0.6015676409 -1.16826975345 -0.601582244038 -1.18552821874 -0.601598784328 -1.20278698206 -0.601607084274 -1.22200205922 -0.601597979665 -1.24121877551 -0.601581558585 -1.25847771764 -0.601567029953 -1.27573597431 -0.60155442357 -1.29299396276 -0.60154376924 -1.31025141478 -0.601535066962 -1.32750874758 -0.601528272033 -1.34476563334 -0.601523473859 -1.36202251911 -0.601520583034 -1.37927913666 -0.60151964426 -1.39653587341 -0.60152065754 -1.41379237175 -0.601523622871 -1.43104913831 -0.601528525353 -1.44830587506 -0.601535379886 -1.46556296945 -0.601544216275 -1.48282012344 -0.601554960012 -1.50007778406 -0.601567625999 -1.5173356235 -0.601582244038 -1.53459408879 -0.601598784327 -1.55185285211 -0.601607069373 -1.57106789947 -0.601597994566 -1.59028461575 -0.601581543684 -1.60754352808 -0.601567000151 -1.62480175495 -0.601554438472 -1.6420597732 -0.60154376924 -1.65931722522 -0.601535066962 -1.67657455802 -0.601528272033 -1.69383147359 -0.601523444057 -1.71108838915 -0.601520568132 -1.7283449769 -0.60151964426 -1.74560168386 -0.601520672441 -1.7628582418 -0.60152362287 -1.78011503816 -0.601528525352 -1.79737174511 -0.601535394788 -1.81462880969 -0.601544216275 -1.83188596368 -0.601554960012 -1.8491436243 -0.601567625999 -1.86640146374 -0.601582229137 -1.88365989923 -0.601598784328 -1.90091866255 -0.601607084274 -1.92013373971 -0.601597994566 -1.939350456 -0.601581543684 -1.95660939813 -0.601567000151 -1.9738676548 -0.60155442357 -1.99112564325 -0.601543754339 -2.00838306546 -0.601535052061 -2.02564042806 -0.601528272033 -2.04289734363 -0.601523458958 -2.0601541996 -0.601520583034 -2.07741081714 -0.601519659162 -2.0946675539 -0.601520672441 -2.11192405224 -0.601523637772 -2.1291808486 -0.601528555155 -2.14643758535 -0.60153542459 -2.16369467974 -0.601544216275 -2.18095183372 -0.601554945111 -2.19820952415 -0.601567625999 -2.21546733379 -0.601582229137 -2.23272573948 -0.601598784328 -2.24998450279 -0.601607084274 -2.26919955015 -0.601597994566 -2.28841632605 -0.601581558585 -2.30567526817 -0.601567015052 -2.32293349505 -0.60155442357 -2.3401914835 -0.60154376924 -2.35744893551 -0.601535066962 -2.37470626831 -0.601528272033 -2.39196312427 -0.601523458958 -2.40922003984 -0.601520583034 -2.42647665739 -0.601519659162 -2.44373333454 -0.601520672441 -2.46098989248 -0.60152362287 -2.47824668884 -0.601528525352 -2.4955034256 -0.601535409689 -2.51276051998 -0.601544216275 -2.53001767397 -0.601554945111 -2.5472753644 -0.6015676409 -2.56453323364 -0.601582244038 -2.58179163933 -0.601598784328 -2.59905040264 -0.601607084274 -2.61826550961 -0.601597994566 -2.63748216629 -0.601581558585 -2.65474104881 -0.601567015052 -2.67199933529 -0.60155442357 -2.68925738335 -0.60154376924 -2.70651483536 -0.601535066962 -2.72377216816 -0.601528272033 -2.74102908373 -0.601523458958 -2.7582859993 -0.601520568132 -2.77554255724 -0.601519629359 -2.79279923439 -0.601520657539 -2.81005579233 -0.60152362287 -2.82731258869 -0.601528540253 -2.84456932545 -0.601535409689 -2.86182641983 -0.601544216275 -2.87908351421 -0.601554945111 -2.89634114504 -0.601567625999 -2.91359901428 -0.601582244038 -2.93085747957 -0.601598784328 -2.94811624289 -0.601607084274 -2.96733129025 -0.601597994566 -2.98654794693 -0.601581543684 -3.00380688906 -0.601567000151 -3.02106517553 -0.60155442357 -3.03832316399 -0.601543754339 -3.055580616 -0.60153503716 -3.0728380084 -0.601528257131 -3.09009492397 -0.601523444057 -3.10735177994 -0.601520553231 -3.12460839748 -0.601519614458 --3.14132020076 -0.601520642638 --3.12406367063 -0.601523637772 --3.10680687427 -0.601528540253 --3.08955013752 -0.601535409689 --3.07229304314 -0.601544231176 --3.05503594876 -0.601554960012 --3.03777831793 -0.601567625999 --3.02052044869 -0.601582229137 --3.00326192379 -0.601598784328 --2.98600316048 -0.601607084274 --2.96678817272 -0.601598009467 --2.94757151604 -0.601581588387 --2.93031257391 -0.601567029953 --2.91305428743 -0.60155442357 --2.89579623938 -0.60154376924 --2.87853878737 -0.601535066962 --2.86128145456 -0.601528272033 --2.84402453899 -0.601523458958 --2.82676768303 -0.601520568132 --2.80951106549 -0.60151964426 --2.79225432873 -0.60152065754 --2.77499783039 -0.601523593068 --2.75774109363 -0.601528510451 --2.74048435688 -0.601535394788 --2.72322720289 -0.601544201374 --2.70597004891 -0.60155493021 --2.68871247769 -0.601567625999 --2.67145466805 -0.601582244038 --2.65419614315 -0.601598784328 --2.63693737984 -0.601607084274 --2.61772227287 -0.601597994566 --2.59850549698 -0.601581558585 --2.58124661445 -0.601567015052 --2.56398838759 -0.60155442357 --2.54673039913 -0.60154376924 --2.52947294712 -0.601535081863 --2.51221561432 -0.601528286934 --2.49495869875 -0.601523458958 --2.47770184279 -0.601520583034 --2.46044528485 -0.601519659162 --2.44318854809 -0.60152065754 --2.42593199015 -0.601523593068 --2.40867519379 -0.601528510451 --2.39141851664 -0.601535409689 --2.37416142225 -0.601544216275 --2.35690420866 -0.601554945111 --2.33964651823 -0.601567625999 --2.32238870859 -0.601582229137 --2.30513030291 -0.601598784328 --2.28787153959 -0.601607084274 --2.26865643263 -0.601597994566 --2.24943971634 -0.601581573486 --2.23218083381 -0.601567029953 --2.21492254734 -0.60155442357 --2.19766449928 -0.60154376924 --2.18040710688 -0.601535066962 --2.16314983368 -0.601528272033 --2.14589291811 -0.601523473859 --2.12863594294 -0.601520583034 --2.111379385 -0.601519629359 --2.09412270785 -0.601520642638 --2.0768660903 -0.601523622871 --2.05960929394 -0.601528540253 --2.04235261679 -0.601535394788 --2.0250955224 -0.601544216275 --2.00783833862 -0.601554960012 --1.99058070779 -0.6015676409 --1.97332289815 -0.601582244038 --1.95606443286 -0.601598784328 --1.93880563974 -0.601607084274 --1.91959056258 -0.601597979665 --1.90037387609 -0.601581558585 --1.88311499357 -0.601567029953 --1.8658567369 -0.60155442357 --1.84859868884 -0.60154376924 --1.83134126663 -0.601535066962 --1.81408396363 -0.601528272033 --1.79682704806 -0.601523473859 --1.77957013249 -0.601520583034 --1.76231354475 -0.60151964426 --1.7450568378 -0.60152065754 --1.72780027986 -0.601523622871 --1.7105434835 -0.601528525353 --1.69328674674 -0.601535379886 --1.67602965236 -0.601544216275 --1.65877252817 -0.601554960012 --1.64151489735 -0.601567625999 --1.6242570281 -0.601582244038 --1.60699859262 -0.601598784327 --1.5897398591 -0.601607069373 --1.57052475214 -0.601597994566 --1.55130803585 -0.601581543684 --1.53404912353 -0.601567000151 --1.51679086685 -0.601554438472 --1.4995328784 -0.60154376924 --1.48227542639 -0.601535066962 --1.46501809359 -0.601528272033 --1.44776120782 -0.601523444057 --1.43050432205 -0.601520568132 --1.41324770451 -0.60151964426 --1.39599096775 -0.601520672441 --1.37873443961 -0.60152362287 --1.36147767306 -0.601528525352 --1.3442209363 -0.601535394788 --1.32696384191 -0.601544216275 --1.30970668793 -0.601554960012 --1.2924490273 -0.601567625999 --1.27519121766 -0.601582229137 --1.25793275237 -0.601598784328 --1.24067395925 -0.601607084274 --1.22145888209 -0.601597994566 --1.2022421658 -0.601581543684 --1.18498322368 -0.601567000151 --1.16772499681 -0.60155442357 --1.15046700835 -0.601543754339 --1.13320958614 -0.601535052061 --1.11595228314 -0.601528272033 --1.09869533777 -0.601523458958 --1.0814384222 -0.601520583034 --1.06418183446 -0.601519659162 --1.0469250977 -0.601520672441 --1.02966856957 -0.601523637772 --1.01241180301 -0.601528555155 --0.995155081154 -0.60153542459 --0.977898001671 -0.601544216275 --0.960640832782 -0.601554945111 --0.943383157254 -0.601567625999 --0.926125332713 -0.601582229137 --0.908866867423 -0.601598784328 --0.89160810411 -0.601607084274 --0.872393071651 -0.601597994566 --0.853176355362 -0.601581558585 --0.835917428136 -0.601567015052 --0.818659171462 -0.60155442357 --0.801401153207 -0.60154376924 --0.784143716097 -0.601535066962 --0.766886398196 -0.601528272033 --0.749629482627 -0.601523458958 --0.732372567057 -0.601520583034 --0.715115979314 -0.601519659162 --0.697859272361 -0.601520672441 --0.680602729321 -0.60152362287 --0.663345947862 -0.601528525352 --0.646089226007 -0.601535409689 --0.628832131624 -0.601544216275 --0.611574962735 -0.601554945111 --0.594317317009 -0.6015676409 --0.577059477567 -0.601582244038 --0.559801027179 -0.601598784328 --0.542542263865 -0.601607084274 --0.523327171802 -0.601597994566 --0.504110477865 -0.601581558585 --0.48685157299 -0.601567015052 --0.469593316316 -0.60155442357 --0.452335298061 -0.60154376924 --0.43507784605 -0.601535066962 --0.417820520699 -0.601528272033 --0.400563627481 -0.601523458958 --0.383306741714 -0.601520568132 --0.36605014652 -0.601519629359 --0.348793424666 -0.601520657539 --0.331536889076 -0.60152362287 --0.314280100167 -0.601528540253 --0.297023378312 -0.601535409689 --0.27976629138 -0.601544216275 --0.262509129941 -0.601554945111 --0.24525147304 -0.601567625999 --0.227993641049 -0.601582244038 --0.210735183209 -0.601598784328 --0.193476412445 -0.601607084274 --0.174261342734 -0.618703827262 --0.155038524419 -0.618687048554 --0.137779582292 -0.618672177195 --0.120521306991 -0.618659302592 --0.10326327756 -0.618648409844 --0.0860057957471 -0.618639528751 --0.0687484377995 -0.61863258481 --0.0514915119857 -0.618627652526 --0.0342345880345 -0.618624702096 --0.0169779674616 -0.618623748422 -0.00027877674438 -0.618624806404 -0.0175353381783 -0.618627861142 -0.0347921466455 -0.618632867932 -0.0520488945768 -0.618639871478 -0.069306017831 -0.618648871779 -0.0865631997585 -0.618659853935 -0.103820871562 -0.618672803044 -0.121078733355 -0.618687734008 -0.138337213546 -0.618704676628 -0.155596010387 -0.618713140488 -0.174810852856 -0.618703842163 -0.194027327001 -0.618687048554 -0.211286276579 -0.618672177195 -0.228544551879 -0.618659302592 -0.245802577585 -0.618648394942 -0.263060055673 -0.61863951385 -0.280317410827 -0.61863258481 -0.297574333847 -0.618627652526 -0.314831256867 -0.618624702096 -0.332087874412 -0.618623763323 -0.349344611167 -0.618624791503 -0.36660117656 -0.618627816439 -0.383857995271 -0.618632853031 -0.401114746928 -0.618639871478 -0.418371863663 -0.61864888668 -0.435629040003 -0.618659868836 -0.452886722982 -0.618672832846 -0.470144592226 -0.61868776381 -0.487403064966 -0.618704676628 -0.504661858082 -0.618713140488 -0.523876696825 -0.618703842163 -0.543093174696 -0.618687048554 -0.560352131724 -0.618672192096 -0.577610403299 -0.618659317493 -0.594868436456 -0.618648394942 -0.612125918269 -0.618639528751 -0.629383251071 -0.618632599711 -0.64664016664 -0.618627667427 -0.663897112012 -0.618624731898 -0.681153729558 -0.618623763323 -0.698410481214 -0.618624776602 -0.715667068958 -0.618627816439 -0.732923865318 -0.618632853031 -0.750180587172 -0.618639871478 -0.767437711358 -0.61864888668 -0.784694910049 -0.618659868836 -0.801952600479 -0.618672832846 -0.819210439921 -0.61868776381 -0.83646889031 -0.618704676628 -0.853727698327 -0.618713140488 -0.87294253707 -0.618703842163 -0.89215901494 -0.618687048554 -0.909417971969 -0.618672192096 -0.926676258445 -0.618659317493 -0.943934291601 -0.618648394942 -0.961191743612 -0.61863951385 -0.978449091315 -0.61863258481 -0.995706021788 -0.618627667427 -1.01296293736 -0.618624731898 -1.0302195847 -0.618623763323 -1.04747632146 -0.618624776602 -1.0647328794 -0.61862783134 -1.08198970556 -0.618632867932 -1.09924644232 -0.618639871478 -1.1165035367 -0.61864888668 -1.13376072049 -0.618659868836 -1.15101841092 -0.618672803044 -1.16827628016 -0.618687734008 -1.18553477525 -0.618704676628 -1.20279356837 -0.618713140488 -1.22200840712 -0.618703842163 -1.24122488499 -0.618687048554 -1.25848385691 -0.618672192096 -1.27574214339 -0.618659317493 -1.29300013184 -0.618648394942 -1.31025761366 -0.61863951385 -1.32751497627 -0.61863258481 -1.34477189183 -0.618627667427 -1.36202883721 -0.618624716997 -1.37928545475 -0.618623763323 -1.39654219151 -0.618624791503 -1.41379871964 -0.61862783134 -1.43105551601 -0.618632853031 -1.44831228256 -0.618639856577 -1.46556940675 -0.61864888668 -1.48282662034 -0.618659853935 -1.50008431077 -0.618672788143 -1.51734215021 -0.618687748909 -1.5346006453 -0.618704676628 -1.55185940862 -0.618713125587 -1.57107421756 -0.618703842163 -1.59029072523 -0.618687033653 -1.60754966736 -0.618672162294 -1.62480792403 -0.618659302592 -1.64206597209 -0.618648380041 -1.6593234539 -0.618639498949 -1.67658081651 -0.618632569909 -1.69383773208 -0.618627637625 -1.71109464764 -0.618624702096 -1.72835129499 -0.618623748422 -1.74560803175 -0.618624791503 -1.76286458969 -0.618627846241 -1.78012141585 -0.618632867932 -1.79737818241 -0.618639871478 -1.8146353066 -0.61864888668 -1.83189246059 -0.618659868836 -1.84915012122 -0.618672803044 -1.86640799045 -0.618687734008 -1.88366645574 -0.618704676628 -1.90092524886 -0.618713140488 -1.92014008761 -0.618703842163 -1.93935656548 -0.618687033653 -1.9566155374 -0.618672177195 -1.97387382388 -0.618659317493 -1.99113184214 -0.618648394942 -2.00838929415 -0.61863951385 -2.02564668655 -0.61863258481 -2.04290360212 -0.618627667427 -2.06016045809 -0.618624716997 -2.07741713524 -0.618623763323 -2.0946739316 -0.618624806404 -2.11193042993 -0.618627846241 -2.1291872263 -0.618632867932 -2.14644402266 -0.618639886379 -2.16370117664 -0.618648901582 -2.18095833063 -0.618659868836 -2.19821596146 -0.618672832846 -2.2154738307 -0.61868776381 -2.23273229599 -0.618704676628 -2.2499910593 -0.618713140488 -2.26920592785 -0.618703842163 -2.28842246532 -0.618687033653 -2.30568140745 -0.618672162294 -2.32293969393 -0.618659302592 -2.34019774198 -0.618648394942 -2.357455194 -0.61863951385 -2.3747125268 -0.61863258481 -2.39196944237 -0.618627652526 -2.40922635794 -0.618624716997 -2.42648297548 -0.618623763323 -2.44373971224 -0.618624791503 -2.46099632978 -0.618627846241 -2.47825318575 -0.618632867932 -2.4955099225 -0.618639871478 -2.51276701689 -0.61864888668 -2.53002417087 -0.618659868836 -2.5472818613 -0.618672803044 -2.56453973055 -0.618687734008 -2.58179819584 -0.618704676628 -2.59905701876 -0.618713140488 -2.6182718277 -0.618703842163 -2.63748824596 -0.618687048554 -2.65474718809 -0.618672192096 -2.67200547457 -0.618659317493 -2.68926352263 -0.618648394942 -2.70652097464 -0.61863951385 -2.72377830744 -0.61863258481 -2.74103528261 -0.618627667427 -2.75829225778 -0.618624716997 -2.77554881573 -0.618623748422 -2.79280555248 -0.618624791503 -2.81006217003 -0.618627846241 -2.82731896639 -0.618632867932 -2.84457570314 -0.618639871478 -2.86183279753 -0.61864888668 -2.87908995151 -0.618659868836 -2.89634764194 -0.618672832846 -2.91360557079 -0.61868776381 -2.93086403608 -0.618704676628 -2.9481227994 -0.618713125587 -2.96733766794 -0.618703827262 -2.98655408621 -0.618687048554 -3.00381302834 -0.618672177195 -3.02107131481 -0.618659302592 -3.03832930326 -0.618648409844 -3.05558681488 -0.618639528751 -3.07284426689 -0.61863258481 -3.09010118246 -0.618627652526 -3.10735803842 -0.618624702096 -3.12461471557 -0.618623748422 --3.14131382306 -0.618624806404 --3.12405729294 -0.618627861142 --3.10680049658 -0.618632867932 --3.08954375982 -0.618639871478 --3.07228666544 -0.618648871779 --3.05502951145 -0.618659853935 --3.03777182102 -0.618672803044 --3.02051389218 -0.618687734008 --3.00325536728 -0.618704676628 --2.98599660396 -0.618713140488 --2.96678179503 -0.618703842163 --2.94756537676 -0.618687048554 --2.93030643463 -0.618672177195 --2.91304814816 -0.618659302592 --2.8957901001 -0.618648394942 --2.87853258848 -0.61863951385 --2.86127519607 -0.61863258481 --2.8440182805 -0.618627652526 --2.82676142454 -0.618624702096 --2.80950474739 -0.618623763323 --2.79224801063 -0.618624791503 --2.7749915123 -0.618627816439 --2.75773471594 -0.618632853031 --2.74047797918 -0.618639871478 --2.72322082519 -0.61864888668 --2.7059636116 -0.618659868836 --2.68870592117 -0.618672832846 --2.67144805193 -0.61868776381 --2.65418958664 -0.618704676628 --2.63693082333 -0.618713140488 --2.61771595478 -0.618703842163 --2.5984994173 -0.618687048554 --2.58124047518 -0.618672192096 --2.5639821887 -0.618659317493 --2.54672414064 -0.618648394942 --2.52946668863 -0.618639528751 --2.51220935583 -0.618632599711 --2.49495244027 -0.618627667427 --2.4776955247 -0.618624731898 --2.46043890714 -0.618623763323 --2.44318217039 -0.618624776602 --2.42592555285 -0.618627816439 --2.40866875649 -0.618632853031 --2.39141207933 -0.618639871478 --2.37415492535 -0.61864888668 --2.35689771176 -0.618659868836 --2.33964002133 -0.618672832846 --2.32238221169 -0.61868776381 --2.305123806 -0.618704676628 --2.28786498308 -0.618713140488 --2.26865011453 -0.618703842163 --2.24943363666 -0.618687048554 --2.23217469454 -0.618672192096 --2.21491640806 -0.618659317493 --2.19765836001 -0.618648394942 --2.18040090799 -0.61863951385 --2.16314357519 -0.61863258481 --2.14588665962 -0.618627667427 --2.12862968445 -0.618624731898 --2.1113730669 -0.618623763323 --2.09411633015 -0.618624776602 --2.0768597126 -0.61862783134 --2.05960291624 -0.618632867932 --2.04234617948 -0.618639871478 --2.0250890851 -0.61864888668 --2.00783190131 -0.618659868836 --1.99057421088 -0.618672803044 --1.97331637144 -0.618687734008 --1.95605787635 -0.618704676628 --1.93879905343 -0.618713140488 --1.91958421468 -0.618703842163 --1.90036776662 -0.618687048554 --1.8831088543 -0.618672192096 --1.86585059762 -0.618659317493 --1.84859254956 -0.618648394942 --1.83133506775 -0.61863951385 --1.81407770514 -0.61863258481 --1.79682075978 -0.618627667427 --1.7795638442 -0.618624716997 --1.76230722666 -0.618623763323 --1.7450504601 -0.618624791503 --1.72779390216 -0.61862783134 --1.7105371058 -0.618632853031 --1.69328033924 -0.618639856577 --1.67602321506 -0.61864888668 --1.65876606107 -0.618659853935 --1.64150840044 -0.618672788143 --1.62425050139 -0.618687748909 --1.6069920361 -0.618704676628 --1.58973327279 -0.618713125587 --1.57051840424 -0.618703842163 --1.55130192637 -0.618687033653 --1.53404298425 -0.618672162294 --1.51678469777 -0.618659302592 --1.49952667951 -0.618648380041 --1.4822691977 -0.618639498949 --1.4650118649 -0.618632569909 --1.44775494933 -0.618627637625 --1.43049800396 -0.618624702096 --1.41324138641 -0.618623748422 --1.39598464966 -0.618624791503 --1.37872806191 -0.618627846241 --1.36147123575 -0.618632867932 --1.344214499 -0.618639871478 --1.32695740461 -0.61864888668 --1.30970022082 -0.618659868836 --1.2924425304 -0.618672803044 --1.27518469095 -0.618687734008 --1.25792619586 -0.618704676628 --1.24066737294 -0.618713140488 --1.22145253419 -0.618703842163 --1.20223608613 -0.618687033653 --1.1849771142 -0.618672177195 --1.16771882772 -0.618659317493 --1.15046083927 -0.618648394942 --1.13320338726 -0.61863951385 --1.11594602466 -0.61863258481 --1.09868904948 -0.618627667427 --1.08143210411 -0.618624716997 --1.06417551637 -0.618623763323 --1.04691877961 -0.618624806404 --1.02966219186 -0.618627846241 --1.01240539551 -0.618632867932 --0.995148658752 -0.618639886379 --0.977891519666 -0.618648901582 --0.960634335876 -0.618659868836 --0.943376675248 -0.618672832846 --0.926118820906 -0.61868776381 --0.908860325813 -0.618704676628 --0.891601532698 -0.618713140488 --0.872386708856 -0.618703842163 --0.853170230984 -0.618687033653 --0.835911273956 -0.618672162294 --0.81865298748 -0.618659302592 --0.801394969225 -0.618648394942 --0.784137517214 -0.61863951385 --0.766880169511 -0.61863258481 --0.749623209238 -0.618627652526 --0.732366278767 -0.618624716997 --0.715109661221 -0.618623763323 --0.697852909565 -0.618624791503 --0.680596351623 -0.618627846241 --0.663339540362 -0.618632867932 --0.646082788706 -0.618639871478 --0.628825679422 -0.61864888668 --0.61156848073 -0.618659868836 --0.594310805202 -0.618672803044 --0.577052950859 -0.618687734008 --0.559794470668 -0.618704676628 --0.542535692453 -0.618713140488 --0.523320838809 -0.618703842163 --0.504104368389 -0.618687048554 --0.486845433712 -0.618672192096 --0.469587154686 -0.618659317493 --0.45232912153 -0.618648394942 --0.435071639717 -0.61863951385 --0.417814284563 -0.61863258481 --0.400557361543 -0.618627667427 --0.383300438523 -0.618624716997 --0.366043813527 -0.618623748422 --0.348787069321 -0.618624791503 --0.331530511379 -0.618627846241 --0.314273700118 -0.618632867932 --0.297016955912 -0.618639871478 --0.279759846628 -0.61864888668 --0.262502655387 -0.618659868836 --0.245244968683 -0.618672832846 --0.227987110615 -0.61868776381 --0.210728630424 -0.618704676628 --0.193469837308 -0.618713125587 --0.174254998564 -0.635839372873 --0.155032571405 -0.635822236538 --0.137773603201 -0.635807037354 --0.120515301823 -0.635793894529 --0.103257248178 -0.635782763362 --0.085999744013 -0.635773703456 --0.068742364645 -0.635766625404 --0.0514854146168 -0.635761573911 --0.0342284636572 -0.635758548975 --0.0169718163088 -0.635757595301 -0.000284953508525 -0.635758683085 -0.0175415407866 -0.635761782527 -0.0347983748652 -0.635766908527 -0.0520551484078 -0.635774061084 -0.0693122930825 -0.635783240199 -0.0865694992244 -0.635794460773 -0.103827198967 -0.635807693005 -0.121085086837 -0.635822936893 -0.138343594968 -0.635840237141 -0.155602414161 -0.635848894715 -0.174817025661 -0.635839372873 -0.19403327629 -0.635822191834 -0.211292251945 -0.635807022452 -0.228550549597 -0.635793894529 -0.24580860138 -0.635782748461 -0.263066105544 -0.635773673654 -0.28032348305 -0.635766610503 -0.297580428422 -0.635761573911 -0.314837381244 -0.635758548975 -0.332094028592 -0.635757595301 -0.349350787699 -0.635758653283 -0.366607382894 -0.635761752725 -0.383864238858 -0.635766908527 -0.401121012866 -0.635774061084 -0.418378137052 -0.6357832551 -0.435635343194 -0.635794475674 -0.452893055976 -0.635807722807 -0.470150947571 -0.635822981596 -0.487409450114 -0.635840252042 -0.50466825068 -0.635848879814 -0.523882865906 -0.635839387774 -0.543099120259 -0.635822221637 -0.560358092189 -0.635807037353 -0.577616408467 -0.635793924332 -0.594874456525 -0.635782763362 -0.61213196814 -0.635773673654 -0.629389345646 -0.635766610503 -0.646646276116 -0.635761588812 -0.663903236389 -0.635758593678 -0.681159883737 -0.635757610202 -0.698416665196 -0.635758638382 -0.71567325294 -0.635761752725 -0.732930064201 -0.635766893625 -0.75018684566 -0.635774046183 -0.767444014549 -0.6357832551 -0.784701213241 -0.635794475674 -0.801958918571 -0.635807722807 -0.819216802716 -0.635822966695 -0.836475282908 -0.635840237141 -0.853734120727 -0.635848879814 -0.872948721051 -0.635839372874 -0.892164945603 -0.635822221637 -0.909423932433 -0.635807052254 -0.926682248712 -0.635793924332 -0.943940296769 -0.635782763362 -0.961197793484 -0.635773673654 -0.97845518589 -0.635766610503 -0.995712116361 -0.635761588812 -1.01296907663 -0.635758593678 -1.03022575378 -0.635757610202 -1.04748252034 -0.635758653283 -1.06473910808 -0.635761767626 -1.08199593425 -0.635766893625 -1.0992527008 -0.635774046183 -1.11650982499 -0.6357832551 -1.13376703859 -0.635794475674 -1.15102475882 -0.635807693005 -1.16828262806 -0.635822936893 -1.18554115295 -0.635840237141 -1.20279997587 -0.635848894715 -1.22201454639 -0.635839387774 -1.24123081565 -0.635822221637 -1.25848981738 -0.635807052254 -1.27574810386 -0.635793924332 -1.29300612211 -0.635782763362 -1.31026363373 -0.635773673654 -1.32752105594 -0.635766610503 -1.34477800131 -0.635761588812 -1.36203494668 -0.635758563876 -1.37929159403 -0.635757595301 -1.39654836058 -0.635758668184 -1.41380491852 -0.635761767626 -1.43106174469 -0.635766893625 -1.44831854105 -0.635774046183 -1.46557569504 -0.6357832551 -1.48283290863 -0.635794460773 -1.50009059906 -0.635807678104 -1.51734849811 -0.635822951794 -1.534607023 -0.635840252042 -1.55186581612 -0.635848894715 -1.57108041644 -0.635839402675 -1.59029665589 -0.635822236538 -1.60755562782 -0.635807022452 -1.6248139441 -0.635793894529 -1.64207199216 -0.635782763362 -1.65932950377 -0.635773673654 -1.67658689618 -0.635766595602 -1.69384384155 -0.635761544108 -1.71110078692 -0.635758534074 -1.72835743427 -0.635757580399 -1.74561420083 -0.635758653283 -1.76287078857 -0.635761767626 -1.78012761474 -0.635766893625 -1.79738441109 -0.635774046183 -1.81464156509 -0.6357832551 -1.83189874888 -0.635794475674 -1.84915646911 -0.635807693005 -1.86641433835 -0.635822951794 -1.88367283344 -0.635840252042 -1.90093168616 -0.635848894715 -1.92014628649 -0.635839387774 -1.93936252594 -0.635822206736 -1.95662149787 -0.635807037353 -1.97387978435 -0.635793924332 -1.99113786221 -0.635782763362 -2.00839537382 -0.635773673654 -2.02565276623 -0.635766610503 -2.0429096818 -0.635761588812 -2.06016659737 -0.635758578777 -2.07742327452 -0.635757610202 -2.09468007088 -0.635758653283 -2.11193662882 -0.635761752725 -2.12919342518 -0.635766893625 -2.14645028114 -0.635774061084 -2.16370749474 -0.635783284903 -2.18096464873 -0.635794490575 -2.19822227955 -0.635807722807 -2.2154802084 -0.635822966695 -2.23273873329 -0.635840237141 -2.24999749661 -0.635848894715 -2.26921212673 -0.635839387774 -2.28842842579 -0.635822206736 -2.30568736792 -0.635807022452 -2.32294565439 -0.63579390943 -2.34020376206 -0.635782763362 -2.35746127367 -0.635773673654 -2.37471860647 -0.635766595602 -2.39197552204 -0.63576155901 -2.40923249722 -0.635758578777 -2.42648917437 -0.635757610202 -2.44374591112 -0.635758653283 -2.46100252867 -0.635761767626 -2.47825938463 -0.635766893625 -2.49551612139 -0.635774046183 -2.51277327538 -0.6357832551 -2.53003048897 -0.635794475674 -2.5472881794 -0.635807693005 -2.56454604864 -0.635822936893 -2.58180457353 -0.635840237141 -2.59906339645 -0.635848879814 -2.61827796698 -0.635839372874 -2.63749420643 -0.635822221637 -2.65475320816 -0.635807052254 -2.67201149463 -0.63579390943 -2.6892695427 -0.635782748461 -2.70652705431 -0.635773673654 -2.72378438711 -0.635766610503 -2.74104136229 -0.635761588812 -2.75829833746 -0.635758563876 -2.77555495501 -0.635757580399 -2.79281175137 -0.635758653283 -2.81006836891 -0.635761767626 -2.82732522488 -0.635766893625 -2.84458196163 -0.635774046183 -2.86183905602 -0.6357832551 -2.87909626961 -0.635794475674 -2.89635396004 -0.635807722807 -2.91361188888 -0.635822981596 -2.93087041378 -0.635840252042 -2.9481292367 -0.635848864913 -2.96734386683 -0.635839372873 -2.98656004667 -0.635822236538 -3.0038189888 -0.635807037354 -3.02107733488 -0.635793894529 -3.03833538294 -0.635782763362 -3.05559289456 -0.635773703456 -3.07285034657 -0.635766625404 -3.09010726214 -0.635761573911 -3.10736417771 -0.635758548975 -3.12462085486 -0.635757595301 --3.14130768378 -0.635758683085 --3.12405109406 -0.635761782527 --3.10679423809 -0.635766908527 --3.08953750134 -0.635774061084 --3.07228040695 -0.635783240199 --3.05502319336 -0.635794460773 --3.03776550293 -0.635807693005 --3.02050757408 -0.635822936893 --3.00324904919 -0.635840237141 --2.98599022627 -0.635848894715 --2.96677559614 -0.635839372873 --2.9475594163 -0.635822191834 --2.93030047417 -0.635807022452 --2.91304212809 -0.635793894529 --2.89578408003 -0.635782748461 --2.87852656841 -0.635773673654 --2.8612691164 -0.635766610503 --2.84401220083 -0.635761573911 --2.82675528526 -0.635758548975 --2.80949860811 -0.635757595301 --2.79224187136 -0.635758653283 --2.77498531342 -0.635761752725 --2.75772845745 -0.635766908527 --2.74047166109 -0.635774061084 --2.72321456671 -0.6357832551 --2.70595735311 -0.635794475674 --2.68869954347 -0.635807722807 --2.67144167423 -0.635822981596 --2.65418320894 -0.635840252042 --2.63692438602 -0.635848879814 --2.6177097559 -0.635839387774 --2.59849345684 -0.635822221637 --2.58123451471 -0.635807037353 --2.56397622824 -0.635793924332 --2.54671818018 -0.635782763362 --2.52946066856 -0.635773673654 --2.51220327616 -0.635766610503 --2.49494636059 -0.635761588812 --2.47768938542 -0.635758593678 --2.46043270826 -0.635757610202 --2.44317597151 -0.635758638382 --2.42591941357 -0.635761752725 --2.40866261721 -0.635766893625 --2.39140582085 -0.635774046183 --2.37414860725 -0.6357832551 --2.35689139366 -0.635794475674 --2.33963370323 -0.635807722807 --2.32237583399 -0.635822966695 --2.3051173687 -0.635840237141 --2.28785854578 -0.635848879814 --2.26864391565 -0.635839372874 --2.2494276762 -0.635822221637 --2.23216867447 -0.635807052254 --2.21491038799 -0.635793924332 --2.19765233993 -0.635782763362 --2.18039482832 -0.635773673654 --2.16313749552 -0.635766610503 --2.14588052034 -0.635761588812 --2.12862354517 -0.635758593678 --2.11136692762 -0.635757610202 --2.09411013126 -0.635758653283 --2.07685351372 -0.635761767626 --2.05959665775 -0.635766893625 --2.042339921 -0.635774046183 --2.02508282661 -0.6357832551 --2.00782561302 -0.635794475674 --1.99056792259 -0.635807693005 --1.97331002355 -0.635822936893 --1.95605149865 -0.635840237141 --1.93879267573 -0.635848894715 --1.91957807541 -0.635839387774 --1.90036183595 -0.635822221637 --1.88310286403 -0.635807052254 --1.86584457755 -0.635793924332 --1.84858652949 -0.635782763362 --1.83132901787 -0.635773673654 --1.81407162547 -0.635766610503 --1.7968146503 -0.635761588812 --1.77955770492 -0.635758563876 --1.76230108738 -0.635757595301 --1.74504429102 -0.635758668184 --1.72778770327 -0.635761767626 --1.71053087711 -0.635766893625 --1.69327408075 -0.635774046183 --1.67601692677 -0.6357832551 --1.65875974298 -0.635794460773 --1.64150205255 -0.635807678104 --1.6242441237 -0.635822951794 --1.60698562861 -0.635840252042 --1.58972683549 -0.635848894715 --1.57051220536 -0.635839402675 --1.55129596591 -0.635822236538 --1.53403699398 -0.635807022452 --1.5167786777 -0.635793894529 --1.49952062964 -0.635782763362 --1.48226311803 -0.635773673654 --1.46500575543 -0.635766595602 --1.44774883986 -0.635761544108 --1.43049189448 -0.635758534074 --1.41323524713 -0.635757580399 --1.39597848058 -0.635758653283 --1.37872186303 -0.635761767626 --1.36146500707 -0.635766893625 --1.34420824051 -0.635774046183 --1.32695111633 -0.6357832551 --1.30969390273 -0.635794475674 --1.2924361825 -0.635807693005 --1.27517831326 -0.635822951794 --1.25791981816 -0.635840252042 --1.24066099524 -0.635848894715 --1.22144639492 -0.635839387774 --1.20223015547 -0.635822206736 --1.18497115374 -0.635807037353 --1.16771283746 -0.635793924332 --1.1504548192 -0.635782763362 --1.13319733739 -0.635773673654 --1.11593994498 -0.635766610503 --1.09868296981 -0.635761588812 --1.08142599463 -0.635758578777 --1.06416934729 -0.635757610202 --1.04691258073 -0.635758653283 --1.02965599298 -0.635761752725 --1.01239919662 -0.635766893625 --0.995142430066 -0.635774061084 --0.977885231375 -0.635783284903 --0.960628017783 -0.635794490575 --0.943370357156 -0.635807722807 --0.926112473011 -0.635822966695 --0.908853948116 -0.635840237141 --0.891595140099 -0.635848894715 --0.872380524874 -0.635839387774 --0.853164285421 -0.635822206736 --0.835905313492 -0.635807022452 --0.818646997213 -0.63579390943 --0.801388949156 -0.635782763362 --0.784131452441 -0.635773673654 --0.766874074936 -0.635766595602 --0.749617114663 -0.63576155901 --0.73236015439 -0.635758578777 --0.715103507042 -0.635757610202 --0.697846740484 -0.635758653283 --0.68059015274 -0.635761767626 --0.663333311677 -0.635766893625 --0.646076545119 -0.635774046183 --0.628819406033 -0.6357832551 --0.611562162638 -0.635794475674 --0.594304472208 -0.635807693005 --0.577046602965 -0.635822936893 --0.559788092971 -0.635840237141 --0.542529284954 -0.635848879814 --0.523314669728 -0.635839372874 --0.504098422825 -0.635822221637 --0.486839450896 -0.635807052254 --0.469581156969 -0.63579390943 --0.452323101461 -0.635782748461 --0.435065589845 -0.635773673654 --0.41780821234 -0.635766610503 --0.400551259518 -0.635761588812 --0.383294306696 -0.635758563876 --0.366037651897 -0.635757580399 --0.348780885339 -0.635758653283 --0.331524312496 -0.635761767626 --0.314267478883 -0.635766893625 --0.297010704875 -0.635774046183 --0.279753565788 -0.6357832551 --0.262496359646 -0.635794475674 --0.24523865059 -0.635807722807 --0.22798075527 -0.635822981596 --0.210722249001 -0.635840252042 --0.193463437259 -0.635848864913 --0.174248822033 -0.652975395322 --0.155027389526 -0.652957856655 --0.13776839152 -0.652942359448 --0.120510069653 -0.652928978205 --0.103252001107 -0.652917608619 --0.0859944764525 -0.652908354998 --0.0687370756641 -0.652901142836 --0.0514801032841 -0.652896001935 --0.0342231295072 -0.652892902494 --0.016966459807 -0.652891919017 -0.000290331663563 -0.652893036604 -0.0175469408277 -0.652896210551 -0.0348037965596 -0.65290145576 -0.0520605929196 -0.652908757329 -0.0693177580834 -0.652918115258 -0.0865749884397 -0.65292955935 -0.10383271426 -0.652943074703 -0.121090622619 -0.652958646417 -0.138349153102 -0.652976289391 -0.155607987196 -0.652985110879 -0.174822401255 -0.652975395322 -0.194038458168 -0.652957871556 -0.211297456175 -0.65294238925 -0.228555776179 -0.652928978205 -0.245813846588 -0.652917608619 -0.263071380555 -0.652908340097 -0.280328787863 -0.652901113033 -0.297585755587 -0.652896001935 -0.31484273076 -0.652892932296 -0.332099400461 -0.652891933918 -0.349356174469 -0.652893006801 -0.366612777114 -0.652896165848 -0.383869647979 -0.652901425958 -0.40112645179 -0.652908742428 -0.418383613229 -0.652918100357 -0.435640834272 -0.652929544449 -0.452898554504 -0.652943074703 -0.470156475902 -0.652958661318 -0.487415000797 -0.652976304292 -0.504673838615 -0.652985095978 -0.523888275027 -0.652975395322 -0.543104320764 -0.652957871556 -0.560363307595 -0.652942374348 -0.577621638775 -0.652929008007 -0.594879701734 -0.652917638421 -0.61213722825 -0.652908340097 -0.629394635558 -0.652901127935 -0.646651610732 -0.652896016836 -0.663908571005 -0.652892932296 -0.681165233254 -0.652891948819 -0.698422044516 -0.652893021702 -0.715678647161 -0.652896165848 -0.732935503125 -0.652901411057 -0.750192329288 -0.652908727527 -0.767449498177 -0.652918100357 -0.784706696868 -0.652929544449 -0.8019644171 -0.652943089604 -0.819222316146 -0.652958661318 -0.836480841041 -0.652976289391 -0.853739693761 -0.652985095978 -0.87295410037 -0.652975380421 -0.892170146108 -0.652957871556 -0.90942914784 -0.652942404151 -0.926687479019 -0.652929022908 -0.943945541978 -0.652917638421 -0.961203068495 -0.652908340097 -0.978460475802 -0.652901127935 -0.995717421175 -0.652896016836 -1.01297441125 -0.652892947197 -1.0302310884 -0.652891948819 -1.04748788476 -0.652893021703 -1.06474453211 -0.652896180749 -1.08200135827 -0.652901411057 -1.09925815463 -0.652908727527 -1.11651533842 -0.652918100357 -1.13377255201 -0.652929544449 -1.15103027224 -0.652943074703 -1.16828817129 -0.652958646417 -1.18554672599 -0.65297627449 -1.20280554891 -0.652985110879 -1.22201991081 -0.652975410223 -1.24123600125 -0.652957886457 -1.25849500299 -0.652942404151 -1.27575328946 -0.652929008007 -1.29301136732 -0.652917638421 -1.31026890874 -0.652908340097 -1.32752633095 -0.652901127935 -1.34478330612 -0.652896016836 -1.3620402813 -0.652892932296 -1.37929695845 -0.652891933918 -1.39655375481 -0.652893036604 -1.41381034255 -0.65289619565 -1.43106719851 -0.652901425958 -1.44832399487 -0.652908742428 -1.46558114886 -0.652918115258 -1.48283839226 -0.652929544449 -1.50009611249 -0.652943074703 -1.51735401154 -0.652958676219 -1.53461253643 -0.652976304292 -1.55187138915 -0.652985110879 -1.57108581066 -0.652975410223 -1.5903018415 -0.652957901358 -1.60756084323 -0.652942404151 -1.62481918931 -0.652928993106 -1.64207726717 -0.65291762352 -1.65933477878 -0.652908354998 -1.67659217119 -0.652901127934 -1.69384917617 -0.652895987034 -1.71110615134 -0.652892917395 -1.72836276889 -0.652891933918 -1.74561956525 -0.652893021703 -1.7628762126 -0.652896180749 -1.78013303876 -0.652901411057 -1.79738983512 -0.652908727527 -1.81464701891 -0.652918100357 -1.8319042325 -0.652929544449 -1.84916195273 -0.652943074703 -1.86641985178 -0.652958661318 -1.88367840648 -0.652976289391 -1.900937289 -0.652985095977 -1.92015171051 -0.652975395322 -1.93936774135 -0.652957871556 -1.95662671328 -0.65294238925 -1.97388499975 -0.652929008007 -1.99114307761 -0.652917638421 -2.00840058923 -0.652908340097 -2.02565801144 -0.652901127935 -2.04291498661 -0.652896016836 -2.06017196178 -0.652892947197 -2.07742863893 -0.65289196372 -2.09468537569 -0.652893021702 -2.11194199323 -0.652896165848 -2.1291988492 -0.652901411057 -2.14645570516 -0.652908727527 -2.16371291876 -0.652918115258 -2.18097013235 -0.65292955935 -2.19822782278 -0.652943074703 -2.21548575163 -0.652958646417 -2.23274433613 -0.652976289391 -2.25000315905 -0.652985110879 -2.26921755075 -0.652975395322 -2.28843361139 -0.652957856655 -2.30569255352 -0.652942374348 -2.32295084 -0.652928993106 -2.34020894766 -0.65291762352 -2.35746651888 -0.652908340097 -2.37472391128 -0.652901113033 -2.39198082685 -0.652896001935 -2.40923780203 -0.652892947197 -2.42649447918 -0.652891948819 -2.44375127554 -0.652893021703 -2.46100789309 -0.652896180749 -2.47826474905 -0.652901411057 -2.49552154541 -0.652908727527 -2.51277875901 -0.652918100357 -2.5300359726 -0.652929544449 -2.54729366303 -0.652943074703 -2.56455159187 -0.652958646417 -2.58181011677 -0.65297627449 -2.59906893968 -0.652985081076 -2.61828333139 -0.652975380421 -2.63749939203 -0.652957871556 -2.65475839377 -0.65294238925 -2.67201668024 -0.652928993106 -2.6892747879 -0.65291762352 -2.70653235912 -0.652908340097 -2.72378969192 -0.652901127935 -2.7410466671 -0.652896016836 -2.75830364227 -0.652892917395 -2.77556031942 -0.652891919017 -2.79281717539 -0.652893021703 -2.81007379293 -0.652896180749 -2.8273306489 -0.652901411057 -2.84458738565 -0.652908727527 -2.86184453964 -0.652918100357 -2.87910175324 -0.652929544449 -2.89635944367 -0.652943074703 -2.91361737251 -0.652958661318 -2.93087589741 -0.652976304292 -2.94813477993 -0.652985095978 -2.96734923124 -0.652975395322 -2.98656523228 -0.652957856655 -3.00382423401 -0.652942359448 -3.02108263969 -0.652928978205 -3.03834068775 -0.652917608619 -3.05559813976 -0.652908354998 -3.07285559177 -0.652901142836 -3.09011256695 -0.652896001935 -3.10736954212 -0.652892902494 -3.12462621927 -0.652891919017 --3.14130231936 -0.652893036604 --3.12404567003 -0.652896210551 --3.10678881407 -0.65290145576 --3.08953207731 -0.652908757329 --3.07227492332 -0.652918115258 --3.05501765013 -0.65292955935 --3.0377599597 -0.652943074703 --3.02050209045 -0.652958646417 --3.00324356556 -0.652976289391 --2.98598468304 -0.652985110879 --2.96677023172 -0.652975395322 --2.94755423069 -0.652957871556 --2.93029522896 -0.65294238925 --2.91303682327 -0.652928978205 --2.89577877522 -0.652917608619 --2.8785213232 -0.652908340097 --2.86126387119 -0.652901113033 --2.84400689602 -0.652896001935 --2.82674992085 -0.652892932296 --2.8094932437 -0.652891933918 --2.79223650694 -0.652893006801 --2.77497988939 -0.652896165848 --2.75772303343 -0.652901425958 --2.74046617746 -0.652908742428 --2.72320902348 -0.652918100357 --2.70595180988 -0.652929544449 --2.68869405985 -0.652943074703 --2.6714361906 -0.652958661318 --2.6541776061 -0.652976304292 --2.63691872358 -0.652985095978 --2.61770433188 -0.652975395322 --2.59848827123 -0.652957871556 --2.58122932911 -0.652942374348 --2.56397104263 -0.652929008007 --2.54671299458 -0.652917638421 --2.52945542336 -0.652908340097 --2.51219797134 -0.652901127935 --2.49494105577 -0.652896016836 --2.4776840806 -0.652892932296 --2.46042740345 -0.652891948819 --2.44317060709 -0.652893021702 --2.42591404915 -0.652896165848 --2.40865719319 -0.652901411057 --2.39140033722 -0.652908727527 --2.37414318323 -0.652918100357 --2.35688596964 -0.652929544449 --2.3396282196 -0.652943089604 --2.32237029075 -0.652958661318 --2.30511176586 -0.652976289391 --2.28785294294 -0.652985095978 --2.26863855124 -0.652975380421 --2.24942249059 -0.652957871556 --2.23216348886 -0.652942404151 --2.21490520239 -0.652929022908 --2.19764709473 -0.652917638421 --2.18038952351 -0.652908340097 --2.16313219071 -0.652901127935 --2.14587521553 -0.652896016836 --2.12861824036 -0.652892947197 --2.11136156321 -0.652891948819 --2.09410470724 -0.652893021703 --2.0768480897 -0.652896180749 --2.05959123373 -0.652901411057 --2.04233449698 -0.652908727527 --2.02507734298 -0.652918100357 --2.00782009959 -0.652929544449 --1.99056240916 -0.652943074703 --1.97330448031 -0.652958646417 --1.95604595542 -0.65297627449 --1.9387871325 -0.652985110879 --1.91957271099 -0.652975410223 --1.90035665035 -0.652957886457 --1.88309764862 -0.652942404151 --1.86583933234 -0.652929008007 --1.84858125448 -0.652917638421 --1.83132371307 -0.652908340097 --1.81406632066 -0.652901127935 --1.79680934548 -0.652896016836 --1.77955237031 -0.652892932296 --1.76229572296 -0.652891933918 --1.7450389266 -0.652893036604 --1.72778230906 -0.65289619565 --1.71052542329 -0.652901425958 --1.69326862693 -0.652908742428 --1.67601147294 -0.652918115258 --1.65875425934 -0.652929544449 --1.64149653912 -0.652943074703 --1.62423861027 -0.652958676219 --1.60698008537 -0.652976304292 --1.58972123265 -0.652985110879 --1.57050681114 -0.652975410223 --1.55129078031 -0.652957901358 --1.53403177857 -0.652942404151 --1.51677343249 -0.652928993106 --1.49951538443 -0.65291762352 --1.48225787282 -0.652908354998 --1.46500045061 -0.652901127934 --1.44774350524 -0.652895987034 --1.43048655987 -0.652892917395 --1.41322988272 -0.652891933918 --1.39597308636 -0.652893021703 --1.37871646881 -0.652896180749 --1.36145961285 -0.652901411057 --1.34420278668 -0.652908727527 --1.3269456327 -0.652918100357 --1.3096884191 -0.652929544449 --1.29243066907 -0.652943074703 --1.27517277002 -0.652958661318 --1.25791427493 -0.652976289391 --1.24065545201 -0.652985095977 --1.2214410305 -0.652975395322 --1.20222494006 -0.652957871556 --1.18496593833 -0.65294238925 --1.16770765185 -0.652929008007 --1.15044957399 -0.652917638421 --1.13319203258 -0.652908340097 --1.11593464017 -0.652901127935 --1.098677665 -0.652896016836 --1.08142068982 -0.652892947197 --1.06416401267 -0.65289196372 --1.04690721631 -0.652893021702 --1.02965062857 -0.652896165848 --1.01239380241 -0.652901411057 --0.995137006044 -0.652908727527 --0.977879777551 -0.652918115258 --0.960622534156 -0.65292955935 --0.943364843726 -0.652943074703 --0.926106929779 -0.652958646417 --0.908848389983 -0.652976289391 --0.891589567065 -0.652985110879 --0.872375145554 -0.652975395322 --0.853159099817 -0.652957856655 --0.835900112987 -0.652942374348 --0.818641781807 -0.652928993106 --0.801383703947 -0.65291762352 --0.784126162529 -0.652908340097 --0.766868755221 -0.652901113033 --0.749611794948 -0.652896001935 --0.732354819774 -0.652892947197 --0.715098157525 -0.652891948819 --0.697841376066 -0.652893021703 --0.68058475852 -0.652896180749 --0.663327887654 -0.652901411057 --0.646071106196 -0.652908727527 --0.628813937306 -0.652918100357 --0.61155667901 -0.652929544449 --0.594298973679 -0.652943074703 --0.577041074634 -0.652958646417 --0.559782549739 -0.65297627449 --0.54252371192 -0.652985081076 --0.523309290409 -0.652975380421 --0.504093244672 -0.652957871556 --0.48683425039 -0.65294238925 --0.469575926661 -0.652928993106 --0.452317848802 -0.65291762352 --0.435060322285 -0.652908340097 --0.417802929878 -0.652901127935 --0.400545947254 -0.652896016836 --0.38328896463 -0.652892917395 --0.366032294929 -0.652891919017 --0.34877550602 -0.652893021703 --0.331518910826 -0.652896180749 --0.314262054861 -0.652901411057 --0.2970052585 -0.652908727527 --0.279748097062 -0.652918100357 --0.262490876019 -0.652929544449 --0.245233148337 -0.652943074703 --0.227975223214 -0.652958661318 --0.210716694594 -0.652976304292 --0.193457864225 -0.652985095978 --0.17424344644 -0.670092210173 --0.155022252351 -0.67007432878 --0.137763239443 -0.67005854845 --0.120504895225 -0.670044898987 --0.103246804327 -0.670033305884 --0.0859892591834 -0.670023843646 --0.0687318332493 -0.670016482472 --0.051474836655 -0.670011281967 --0.0342178423889 -0.670008122921 --0.0169611515012 -0.670007094741 -0.00029566162266 -0.670008227229 -0.0175522919744 -0.670011490583 -0.0348091698252 -0.6700168401 -0.0520659880713 -0.670024245977 -0.0693231737241 -0.670033812523 -0.0865804273635 -0.670045509934 -0.103838181123 -0.670059263707 -0.121096109971 -0.670075133443 -0.138354655355 -0.670093134046 -0.155613515526 -0.670102119446 -0.174827732146 -0.670092210173 -0.194043584168 -0.670074358582 -0.211302608252 -0.670058563351 -0.228560950607 -0.670044884086 -0.245819039642 -0.670033290982 -0.263076595962 -0.670023828745 -0.280334033072 -0.670016467571 -0.297591030598 -0.670011267066 -0.314848020673 -0.670008137822 -0.332104712725 -0.670007109642 -0.349361516535 -0.670008212328 -0.366618134081 -0.67001144588 -0.383875019848 -0.670016780496 -0.40113183856 -0.670024231076 -0.418389029801 -0.670033797622 -0.435646280646 -0.670045465231 -0.45290401578 -0.670059248805 -0.470161952079 -0.670075133443 -0.487420499325 -0.670093134046 -0.504679374397 -0.670102134347 -0.523893609643 -0.670092225074 -0.543109446764 -0.670074343681 -0.560368463397 -0.670058563351 -0.577626809478 -0.670044913888 -0.594884902239 -0.670033320785 -0.612142458558 -0.670023843646 -0.629399865866 -0.670016482472 -0.646656870842 -0.670011281967 -0.663913860917 -0.670008122921 -0.681170552969 -0.670007124543 -0.698427379131 -0.67000824213 -0.715683996677 -0.67001144588 -0.732940882444 -0.670016780496 -0.750197708607 -0.670024231076 -0.767454892397 -0.670033797622 -0.784712135792 -0.670045465231 -0.801969885826 -0.670059263706 -0.819227814675 -0.670075163245 -0.83648635447 -0.670093148947 -0.85374520719 -0.670102119446 -0.872959434986 -0.670092210173 -0.892175287008 -0.670074343681 -0.909434303641 -0.670058563351 -0.926692664623 -0.670044913888 -0.943950757384 -0.670033320785 -0.961208298802 -0.670023858547 -0.978465721011 -0.670016482472 -0.995722711088 -0.670011267066 -1.01297971606 -0.670008137822 -1.03023639322 -0.670007109642 -1.04749318957 -0.670008212328 -1.06474986673 -0.67001144588 -1.08200675249 -0.670016780496 -1.09926354885 -0.670024231076 -1.11652073264 -0.670033797622 -1.13377797603 -0.670045480132 -1.15103572607 -0.670059263707 -1.16829365492 -0.670075148344 -1.18555220961 -0.670093134046 -1.20281106234 -0.670102119446 -1.22202527523 -0.670092225075 -1.24124115705 -0.670074358582 -1.25850015878 -0.670058578253 -1.27575847506 -0.670044913888 -1.29301658273 -0.670033305883 -1.31027415395 -0.670023828745 -1.32753157616 -0.670016482472 -1.34478855133 -0.670011281967 -1.36204555631 -0.670008137822 -1.37930226326 -0.670007124543 -1.39655908942 -0.670008242131 -1.41381570697 -0.670011460781 -1.43107256293 -0.670016795397 -1.44832938909 -0.670024245977 -1.46558657288 -0.670033812523 -1.48284384608 -0.670045465231 -1.50010159611 -0.670059263706 -1.51735949516 -0.670075178146 -1.53461804986 -0.670093134046 -1.55187693238 -0.670102104544 -1.57109114528 -0.670092210173 -1.5903069973 -0.670074373483 -1.60756602883 -0.670058593154 -1.62482437491 -0.670044913888 -1.64208248258 -0.670033320785 -1.659340024 -0.670023858547 -1.6765974164 -0.670016482472 -1.69385442138 -0.670011267066 -1.71111142636 -0.670008137822 -1.72836807371 -0.670007124543 -1.74562487007 -0.670008227229 -1.76288154722 -0.67001144588 -1.78013843298 -0.670016780496 -1.79739522934 -0.670024231076 -1.81465244293 -0.670033782721 -1.83190968632 -0.670045465231 -1.84916740656 -0.670059263707 -1.86642536521 -0.670075148344 -1.88368391991 -0.670093134046 -1.90094277263 -0.670102104544 -1.92015701533 -0.670092210173 -1.93937286735 -0.670074358582 -1.95663186908 -0.670058578253 -1.97389018536 -0.670044913888 -1.99114826322 -0.670033305883 -2.00840577483 -0.670023843646 -2.02566325665 -0.670016482472 -2.04292029142 -0.670011267066 -2.0601772666 -0.670008137822 -2.07743400335 -0.670007139444 -2.09469079971 -0.670008227229 -2.11194741726 -0.670011430979 -2.12920427322 -0.670016795397 -2.14646106958 -0.670024245977 -2.16371828318 -0.670033797622 -2.18097555637 -0.670045465231 -2.1982332468 -0.670059248805 -2.21549117565 -0.670075133443 -2.23274976015 -0.670093134046 -2.25000864267 -0.670102134347 -2.26922285557 -0.670092225074 -2.28843867779 -0.670074343681 -2.30569773912 -0.670058563351 -2.3229560852 -0.670044898987 -2.34021413326 -0.670033305884 -2.35747170448 -0.670023843646 -2.37472915649 -0.670016467571 -2.39198613167 -0.670011267066 -2.40924310684 -0.670008137822 -2.42649978399 -0.670007124543 -2.44375663996 -0.670008227229 -2.4610132575 -0.670011460781 -2.47827011347 -0.670016795397 -2.49552696943 -0.670024231076 -2.51278418303 -0.670033797622 -2.53004139662 -0.670045480132 -2.54729908705 -0.670059263707 -2.5645570159 -0.670075133443 -2.5818156004 -0.670093104243 -2.59907448292 -0.670102089643 -2.61828869581 -0.670092210173 -2.63750457764 -0.670074343681 -2.65476357937 -0.67005854845 -2.67202186585 -0.670044898987 -2.68927997351 -0.670033320785 -2.70653754473 -0.670023858547 -2.72379493714 -0.670016497373 -2.74105191231 -0.670011281967 -2.75830888748 -0.670008122921 -2.77556562424 -0.670007109642 -2.7928224802 -0.670008227229 -2.81007909775 -0.67001144588 -2.82733595371 -0.670016780496 -2.84459275007 -0.670024231076 -2.86184996367 -0.670033797622 -2.87910717726 -0.670045465231 -2.89636492729 -0.670059248805 -2.91362291575 -0.670075148344 -2.93088144064 -0.670093148947 -2.94814026356 -0.670102119446 -2.96735453606 -0.670092210173 -2.98657041788 -0.67007432878 -3.00382941961 -0.67005854845 -3.0210877657 -0.670044898987 -3.03834581375 -0.670033305884 -3.05560332537 -0.670023843646 -3.07286077738 -0.670016482472 -3.09011781215 -0.670011281967 -3.10737484693 -0.670008122921 -3.12463152409 -0.670007094741 --3.14129701455 -0.670008227229 --3.12404036522 -0.670011490583 --3.10678350925 -0.6700168401 --3.08952671289 -0.670024245977 --3.0722694993 -0.670033812523 --3.0550121665 -0.670045509934 --3.03775441647 -0.670059263707 --3.02049654722 -0.670075133443 --3.00323802233 -0.670093134046 --2.9859791398 -0.670102119446 --2.96676486731 -0.670092210173 --2.94754904509 -0.670074358582 --2.93029004335 -0.670058563351 --2.91303163767 -0.670044884086 --2.89577353001 -0.670033290982 --2.878516078 -0.670023828745 --2.86125868559 -0.670016467571 --2.84400165081 -0.670011267066 --2.82674461603 -0.670008137822 --2.80948793888 -0.670007109642 --2.79223120212 -0.670008212328 --2.77497452497 -0.67001144588 --2.7577176094 -0.670016780496 --2.74046081304 -0.670024231076 --2.72320359945 -0.670033797622 --2.70594632626 -0.670045465231 --2.68868863583 -0.670059248805 --2.67143070698 -0.670075133443 --2.65417212248 -0.670093134046 --2.63691323996 -0.670102134347 --2.61769902706 -0.670092225074 --2.59848320484 -0.670074343681 --2.58122420311 -0.670058563351 --2.56396585703 -0.670044913888 --2.54670774937 -0.670033320785 --2.52945017815 -0.670023843646 --2.51219272613 -0.670016482472 --2.49493575096 -0.670011281967 --2.47767877579 -0.670008122921 --2.46042209864 -0.670007124543 --2.44316524267 -0.67000824213 --2.42590862513 -0.67001144588 --2.40865176916 -0.670016780496 --2.3913949132 -0.670024231076 --2.37413775921 -0.670033797622 --2.35688054562 -0.670045465231 --2.33962279558 -0.670059263706 --2.32236486673 -0.670075163245 --2.30510628223 -0.670093148947 --2.28784739971 -0.670102119446 --2.26863324642 -0.670092210173 --2.2494174242 -0.670074343681 --2.23215836286 -0.670058563351 --2.21490001679 -0.670044913888 --2.19764190912 -0.670033320785 --2.1803843379 -0.670023858547 --2.1631269455 -0.670016482472 --2.14586997032 -0.670011267066 --2.12861299515 -0.670008137822 --2.11135625839 -0.670007109642 --2.09409940243 -0.670008212328 --2.07684278488 -0.67001144588 --2.05958592892 -0.670016780496 --2.04232913256 -0.670024231076 --2.02507191896 -0.670033797622 --2.00781464577 -0.670045480132 --1.99055692553 -0.670059263707 --1.97329899669 -0.670075148344 --1.95604044199 -0.670093134046 --1.93878158927 -0.670102119446 --1.91956737638 -0.670092225075 --1.90035152435 -0.670074358582 --1.88309249282 -0.670058578253 --1.86583414674 -0.670044913888 --1.84857603907 -0.670033305883 --1.83131846786 -0.670023828745 --1.81406104564 -0.670016482472 --1.79680407047 -0.670011281967 --1.7795470953 -0.670008137822 --1.76229038835 -0.670007124543 --1.74503359198 -0.670008242131 --1.72777697444 -0.670011460781 --1.71052005887 -0.670016795397 --1.69326326251 -0.670024245977 --1.67600607872 -0.670033812523 --1.65874883532 -0.670045465231 --1.64149108529 -0.670059263706 --1.62423312664 -0.670075178146 --1.60697457194 -0.670093134046 --1.58971571922 -0.670102104544 --1.57050150633 -0.670092210173 --1.55128565431 -0.670074373483 --1.53402665258 -0.670058593154 --1.51676830649 -0.670044913888 --1.49951022863 -0.670033320785 --1.48225268721 -0.670023858547 --1.4649952352 -0.670016482472 --1.44773823023 -0.670011267066 --1.43048125505 -0.670008137822 --1.4132245779 -0.670007124543 --1.39596775174 -0.670008227229 --1.37871110439 -0.67001144588 --1.36145421863 -0.670016780496 --1.34419739246 -0.670024231076 --1.32694023847 -0.670033782721 --1.30968299508 -0.670045465231 --1.29242521524 -0.670059263707 --1.27516728639 -0.670075148344 --1.2579087615 -0.670093134046 --1.24064990878 -0.670102104544 --1.22143566609 -0.670092210173 --1.20221978426 -0.670074358582 --1.18496078253 -0.670058578253 --1.16770246625 -0.670044913888 --1.15044435859 -0.670033305883 --1.13318678737 -0.670023843646 --1.11592936516 -0.670016482472 --1.09867238998 -0.670011267066 --1.08141541481 -0.670008137822 --1.06415870786 -0.670007139444 --1.0469018817 -0.670008227229 --1.02964526415 -0.670011430979 --1.01238840819 -0.670016795397 --0.995131596924 -0.670024245977 --0.977874353528 -0.670033797622 --0.960617095232 -0.670045465231 --0.943359389901 -0.670059248805 --0.926101446152 -0.670075133443 --0.908842891455 -0.670093134046 --0.891584038734 -0.670102134347 --0.872369796037 -0.670092225074 --0.853153944015 -0.670074343681 --0.835894927383 -0.670058563351 --0.818636581302 -0.670044898987 --0.801378503442 -0.670033305884 --0.784120962024 -0.670023843646 --0.766863539815 -0.670016467571 --0.749606534838 -0.670011267066 --0.732349529862 -0.670008137822 --0.71509283781 -0.670007124543 --0.697836026549 -0.670008227229 --0.680579409003 -0.670011460781 --0.663322523236 -0.670016795397 --0.646065711975 -0.670024231076 --0.628808528185 -0.670033797622 --0.611551269889 -0.670045480132 --0.594293534756 -0.670059263707 --0.577035605908 -0.670075133443 --0.559777066112 -0.670093104243 --0.54251819849 -0.670102089643 --0.523303955793 -0.670092210173 --0.504088103771 -0.670074343681 --0.486829102039 -0.67005854845 --0.469570741057 -0.670044898987 --0.452312648297 -0.670033320785 --0.43505512178 -0.670023858547 --0.417797699571 -0.670016497373 --0.400540687144 -0.670011281967 --0.383283682168 -0.670008122921 --0.366026990115 -0.670007109642 --0.348770178855 -0.670008227229 --0.331513568759 -0.67001144588 --0.314256682992 -0.670016780496 --0.29699985683 -0.670024231076 --0.27974268049 -0.670033797622 --0.262485429645 -0.670045465231 --0.245227675885 -0.670059248805 --0.227969739586 -0.670075148344 --0.21071119234 -0.670093148947 --0.193452335894 -0.670102119446 --0.174238111824 -0.68719150126 --0.15501716733 -0.687173336744 --0.137758132071 -0.687157273292 --0.120499767363 -0.687143325805 --0.103241654113 -0.687131494284 --0.0859840847552 -0.68712182343 --0.0687266364694 -0.687114328146 --0.0514696175232 -0.687109038234 --0.0342126018368 -0.687105849385 --0.0169558916241 -0.687104821205 -0.00030094292015 -0.687105953693 -0.0175575949252 -0.687109276652 -0.0348144951277 -0.687114730478 -0.0520713357255 -0.687122255564 -0.0693285418674 -0.687132000923 -0.0865858159959 -0.687143951655 -0.103843592107 -0.687157958746 -0.12110154517 -0.687174111605 -0.13836010918 -0.687192469835 -0.155618991703 -0.687201619148 -0.174833014608 -0.68719150126 -0.194048672915 -0.687173336744 -0.21130771935 -0.687157258391 -0.228566080332 -0.687143310904 -0.245824187994 -0.687131509185 -0.263081759214 -0.687121868134 -0.280339211225 -0.687114357948 -0.297596231103 -0.687109038234 -0.31485324353 -0.687105849385 -0.332109957934 -0.687104821205 -0.349366798997 -0.687105953693 -0.366623446345 -0.687109261751 -0.383880354464 -0.687114670873 -0.401137188077 -0.687122255563 -0.418394394219 -0.687132030725 -0.435651667416 -0.68714389205 -0.452909424901 -0.687157914042 -0.470167391002 -0.687174111605 -0.487425968051 -0.687192469835 -0.504684843123 -0.687201634049 -0.523898854852 -0.687191516161 -0.543114513159 -0.687173306942 -0.560373559594 -0.68715724349 -0.577631935477 -0.687143325805 -0.594890058041 -0.687131524086 -0.612147629261 -0.687121883035 -0.629405081272 -0.687114357948 -0.646662086248 -0.687109038234 -0.663919106126 -0.687105849385 -0.68117582798 -0.687104836106 -0.698432654142 -0.687105968595 -0.715689301491 -0.687109261751 -0.732946187258 -0.687114670873 -0.750203028321 -0.687122255563 -0.767460256815 -0.687132030725 -0.784717530012 -0.68714389205 -0.801975294948 -0.687157914042 -0.819233253598 -0.687174126506 -0.836491808295 -0.687192484736 -0.853750690818 -0.687201619148 -0.872964724898 -0.68719150126 -0.892180368304 -0.687173306942 -0.909439399838 -0.687157228589 -0.926697775722 -0.687143310904 -0.943955913186 -0.687131494284 -0.961213499308 -0.687121868134 -0.978470936417 -0.687114357949 -0.995727941393 -0.687109023333 -1.01298496127 -0.687105849385 -1.03024166822 -0.687104821205 -1.04749849439 -0.687105953693 -1.06475514174 -0.687109261751 -1.08201205731 -0.687114670873 -1.09926891327 -0.687122255563 -1.11652609706 -0.687132030725 -1.13378337026 -0.687143906951 -1.15104115009 -0.687157928944 -1.16829907894 -0.687174126506 -1.18555763364 -0.687192484736 -1.20281651616 -0.687201619148 -1.22203058004 -0.68719150126 -1.24124625325 -0.687173306942 -1.25850525498 -0.68715724349 -1.27576363086 -0.687143325805 -1.29302176833 -0.687131479383 -1.31027933955 -0.687121838331 -1.32753679156 -0.687114357948 -1.34479379654 -0.687109038234 -1.36205080152 -0.687105849385 -1.37930750847 -0.687104836106 -1.39656433463 -0.687105968595 -1.41382098198 -0.687109261751 -1.43107786775 -0.687114670873 -1.44833472371 -0.687122225761 -1.4655919671 -0.687132000923 -1.4828492403 -0.687143921852 -1.50010699033 -0.687157988548 -1.51736494899 -0.687174171209 -1.53462353349 -0.687192469835 -1.55188241601 -0.687201604247 -1.57109642029 -0.68719150126 -1.5903120935 -0.687173321843 -1.60757115483 -0.68715724349 -1.62482950091 -0.687143325806 -1.64208760857 -0.687131509185 -1.65934517979 -0.687121868134 -1.676602602 -0.687114357949 -1.69385960698 -0.687109023333 -1.71111664176 -0.687105849385 -1.72837334871 -0.687104836106 -1.74563017488 -0.687105968595 -1.76288685203 -0.687109261751 -1.7801437676 -0.687114670873 -1.79740059376 -0.687122255563 -1.81465780735 -0.687132015824 -1.83191508055 -0.68714389205 -1.84917286038 -0.687157928944 -1.86643084883 -0.687174126506 -1.88368940353 -0.687192484736 -1.90094825625 -0.687201619148 -1.92016229033 -0.68719150126 -1.93937793374 -0.687173306942 -1.95663693547 -0.68715724349 -1.97389531135 -0.687143325805 -1.99115344882 -0.687131479383 -2.00841096044 -0.687121853233 -2.02566844225 -0.687114357949 -2.04292553663 -0.687109023333 -2.06018251181 -0.687105849385 -2.07743924856 -0.687104836106 -2.09469610453 -0.687105953693 -2.11195272207 -0.68710924685 -2.12920963764 -0.687114685774 -2.146466434 -0.687122270464 -2.16372364759 -0.687132030725 -2.1809809804 -0.68714389205 -2.19823867082 -0.687157914042 -2.21549659967 -0.687174111605 -2.23275518417 -0.687192440033 -2.2500140667 -0.687201604247 -2.26922810078 -0.687191516161 -2.28844374418 -0.687173306942 -2.30570286512 -0.68715724349 -2.32296127081 -0.687143325805 -2.34021931887 -0.687131524086 -2.35747689009 -0.687121883035 -2.3747343421 -0.687114343047 -2.39199131727 -0.687109023333 -2.40924835205 -0.687105849385 -2.42650508881 -0.687104836106 -2.44376188517 -0.687105968595 -2.46101850271 -0.687109276652 -2.47827541828 -0.687114685774 -2.49553233385 -0.687122255563 -2.51278954744 -0.687132030725 -2.53004676103 -0.687143936753 -2.54730451107 -0.687157958746 -2.56456243992 -0.687174111605 -2.58182102442 -0.687192454934 -2.59907996654 -0.687201604247 -2.61829400062 -0.68719150126 -2.63750964403 -0.687173306942 -2.65476870537 -0.687157228589 -2.67202705145 -0.687143310904 -2.68928515911 -0.687131494284 -2.70654273033 -0.687121868134 -2.72380012274 -0.68711437285 -2.74105709791 -0.687109038234 -2.75831413269 -0.687105849385 -2.77557092905 -0.687104836106 -2.79282778502 -0.687105968595 -2.81008440256 -0.687109261751 -2.82734125853 -0.687114670873 -2.84459811449 -0.687122255563 -2.86185532808 -0.687132030725 -2.87911254168 -0.68714389205 -2.89637035132 -0.687157914042 -2.91362839937 -0.687174126506 -2.93088698387 -0.687192484736 -2.94814580679 -0.687201619148 -2.96735984087 -0.68719150126 -2.98657548427 -0.687173336744 -3.00383448601 -0.687157273292 -3.02109283209 -0.687143325805 -3.03835093975 -0.687131494284 -3.05560851097 -0.68712182343 -3.07286596298 -0.687114328146 -3.09012305737 -0.687109038234 -3.10738009214 -0.687105849385 -3.12463676929 -0.687104821205 --3.14129170974 -0.687105953693 --3.12403506041 -0.687109276652 --3.10677820444 -0.687114730478 --3.08952134848 -0.687122255564 --3.07226413488 -0.687132000923 --3.05500686169 -0.687143951655 --3.03774905205 -0.687157958746 --3.0204910636 -0.687174111605 --3.0032324791 -0.687192469835 --2.98597359657 -0.687201619148 --2.96675956249 -0.68719150126 --2.94754391909 -0.687173336744 --2.93028491735 -0.687157258391 --2.91302657128 -0.687143310904 --2.89576840401 -0.687131509185 --2.87851089239 -0.687121868134 --2.86125349999 -0.687114357948 --2.8439964056 -0.687109038234 --2.82673937082 -0.687105849385 --2.80948269367 -0.687104821205 --2.79222589731 -0.687105953693 --2.77496922016 -0.687109261751 --2.75771224499 -0.687114670873 --2.74045544863 -0.687122255563 --2.72319823504 -0.687132030725 --2.70594090224 -0.68714389205 --2.6886832118 -0.687157914042 --2.67142528296 -0.687174111605 --2.65416669846 -0.687192469835 --2.63690781593 -0.687201634049 --2.61769378185 -0.687191516161 --2.59847813845 -0.687173306942 --2.58121913672 -0.68715724349 --2.56396073103 -0.687143325805 --2.54670256376 -0.687131524086 --2.52944499254 -0.687121883035 --2.51218754053 -0.687114357948 --2.49493056536 -0.687109038234 --2.47767353058 -0.687105849385 --2.46041679382 -0.687104836106 --2.44315993786 -0.687105968595 --2.42590332031 -0.687109261751 --2.40864646435 -0.687114670873 --2.39138960838 -0.687122255563 --2.37413239479 -0.687132030725 --2.35687512159 -0.68714389205 --2.33961737156 -0.687157914042 --2.32235944271 -0.687174126506 --2.30510085821 -0.687192484736 --2.28784197569 -0.687201619148 --2.26862800121 -0.68719150126 --2.24941235781 -0.687173306942 --2.23215323686 -0.687157228589 --2.21489483118 -0.687143310904 --2.19763672352 -0.687131494284 --2.1803791523 -0.687121868134 --2.16312175989 -0.687114357949 --2.14586478472 -0.687109023333 --2.12860774994 -0.687105849385 --2.11135101318 -0.687104821205 --2.09409415722 -0.687105953693 --2.07683748007 -0.687109261751 --2.0595806241 -0.687114670873 --2.04232376814 -0.687122255563 --2.02506655455 -0.687132030725 --2.00780931115 -0.687143906951 --1.99055153131 -0.687157928944 --1.97329357266 -0.687174126506 --1.95603498816 -0.687192484736 --1.93877610564 -0.687201619148 --1.91956210136 -0.68719150126 --1.90034642816 -0.687173306942 --1.88308736682 -0.68715724349 --1.86582902074 -0.687143325805 --1.84857091308 -0.687131479383 --1.83131334186 -0.687121838331 --1.81405588985 -0.687114357948 --1.79679888487 -0.687109038234 --1.77954187989 -0.687105849385 --1.76228514313 -0.687104836106 --1.74502831697 -0.687105968595 --1.72777166963 -0.687109261751 --1.71051475406 -0.687114670873 --1.69325792789 -0.687122225761 --1.6760007143 -0.687132000923 --1.6587434411 -0.687143921852 --1.64148566127 -0.687157988548 --1.62422767282 -0.687174171209 --1.60696908832 -0.687192469835 --1.5897102356 -0.687201604247 --1.57049623132 -0.68719150126 --1.55128058791 -0.687173321843 --1.53402155638 -0.68715724349 --1.51676318049 -0.687143325806 --1.49950507283 -0.687131509185 --1.48224750161 -0.687121868134 --1.4649900496 -0.687114357949 --1.44773301482 -0.687109023333 --1.43047600985 -0.687105849385 --1.41321930289 -0.687104836106 --1.39596244693 -0.687105968595 --1.37870579958 -0.687109261751 --1.36144888401 -0.687114670873 --1.34419205785 -0.687122255563 --1.32693487406 -0.687132015824 --1.30967757106 -0.68714389205 --1.29241979122 -0.687157928944 --1.27516186237 -0.687174126506 --1.25790330767 -0.687192484736 --1.24064442515 -0.687201619148 --1.22143039107 -0.68719150126 --1.20221471787 -0.687173306942 --1.18495568633 -0.68715724349 --1.16769731045 -0.687143325805 --1.15043917299 -0.687131479383 --1.13318160176 -0.687121853233 --1.11592414975 -0.687114357949 --1.09866717458 -0.687109023333 --1.08141019941 -0.687105849385 --1.06415346265 -0.687104836106 --1.04689660668 -0.687105953693 --1.02963995933 -0.68710924685 --1.01238307357 -0.687114685774 --0.995126232505 -0.687122270464 --0.97786898911 -0.687132030725 --0.960611715913 -0.68714389205 --0.943353980779 -0.687157914042 --0.926096007228 -0.687174111605 --0.908837422728 -0.687192440033 --0.891578555107 -0.687201604247 --0.872364521026 -0.687191516161 --0.853148862719 -0.687173306942 --0.835889816284 -0.68715724349 --0.818631440401 -0.687143325805 --0.801373332739 -0.687131524086 --0.784115791321 -0.687121883035 --0.766858369112 -0.687114343047 --0.749601334333 -0.687109023333 --0.732344299555 -0.687105849385 --0.715087577701 -0.687104836106 --0.697830751538 -0.687105968595 --0.680574119091 -0.687109276652 --0.663317218423 -0.687114685774 --0.646060362458 -0.687122255563 --0.628803148866 -0.687132030725 --0.611545875669 -0.687143936753 --0.594288110733 -0.687157958746 --0.577030166984 -0.687174111605 --0.559771612287 -0.687192454934 --0.542512714863 -0.687201604247 --0.523298665881 -0.68719150126 --0.504083022475 -0.687173306942 --0.486823998391 -0.687157228589 --0.469565622508 -0.687143310904 --0.452307499945 -0.687131494284 --0.435049936175 -0.687121868134 --0.417792491615 -0.68711437285 --0.400535471737 -0.687109038234 --0.38327845186 -0.687105849385 --0.366021730006 -0.687104836106 --0.348764896393 -0.687105968595 --0.331508271396 -0.687109261751 --0.314251363277 -0.687114670873 --0.296994507312 -0.687122255563 --0.279737308621 -0.687132030725 --0.262480035424 -0.68714389205 --0.245222255587 -0.687157914042 --0.227964304388 -0.687174126506 --0.21070574224 -0.687192484736 --0.193446863443 -0.687201619148 --0.174232833087 -0.704305842519 --0.155011326074 -0.704287335276 --0.137752261013 -0.7042709589 --0.120493872091 -0.704256787896 --0.103235736489 -0.704244732857 --0.0859781373292 -0.704234868288 --0.0687206638977 -0.704227253795 --0.0514636253938 -0.704221844673 --0.0342065840959 -0.704218581319 --0.0169498482719 -0.70421756804 -0.000307010719552 -0.70421873033 -0.0175636874046 -0.704222068191 -0.0348206120543 -0.704227626324 -0.0520774787292 -0.704235345125 -0.0693347118795 -0.704245239496 -0.0865920111537 -0.704257383942 -0.103849809617 -0.704271674156 -0.121107788756 -0.704288125038 -0.138366378844 -0.704306811094 -0.155625283718 -0.70431612432 -0.174839086831 -0.704305842519 -0.194054525345 -0.704287335276 -0.211313594133 -0.7042709589 -0.228571981192 -0.704256758094 -0.245830111206 -0.704244732857 -0.263087704777 -0.704234927893 -0.28034517169 -0.704227253795 -0.297602213919 -0.704221814871 -0.314859263599 -0.704218581319 -0.332116000355 -0.70421756804 -0.349372863769 -0.70421873033 -0.36662954092 -0.704222068191 -0.383886471391 -0.704227596521 -0.401143342257 -0.704235345125 -0.418400578201 -0.704245269299 -0.435657858849 -0.70425735414 -0.452915631235 -0.704271644354 -0.470173627138 -0.704288125038 -0.487432233989 -0.704306811094 -0.504691123963 -0.70431612432 -0.523904919625 -0.704305842519 -0.543120369315 -0.704287305474 -0.560379430652 -0.704270929098 -0.577637821436 -0.704256758094 -0.594895973802 -0.704244732857 -0.612153559923 -0.704234927893 -0.629411041737 -0.704227253795 -0.646668076515 -0.704221814871 -0.663925111294 -0.704218611121 -0.681181848049 -0.704217597842 -0.698438704014 -0.70421873033 -0.715695396066 -0.704222068191 -0.732952311635 -0.704227596521 -0.750209182501 -0.704235345125 -0.767466425896 -0.704245269299 -0.784723713994 -0.70425735414 -0.801981508732 -0.704271644354 -0.819239497185 -0.704288125038 -0.836498081684 -0.704306811094 -0.853756994009 -0.70431612432 -0.872970804572 -0.704305842519 -0.892186224461 -0.704287305474 -0.909445270896 -0.704270929098 -0.92670366168 -0.704256758094 -0.943961828947 -0.704244703055 -0.961219444871 -0.70423489809 -0.978476896882 -0.704227253795 -0.995733916759 -0.704221844673 -1.01299095154 -0.704218611121 -1.03024768829 -0.70421756804 -1.04750457406 -0.70421873033 -1.06476125121 -0.704222068191 -1.08201816678 -0.704227596521 -1.09927505255 -0.704235345125 -1.11653229594 -0.704245269299 -1.13378959894 -0.70425735414 -1.15104737878 -0.704271644354 -1.16830533743 -0.704288125038 -1.18556392193 -0.704306811094 -1.20282280445 -0.70431612432 -1.22203662991 -0.704305842519 -1.24125209451 -0.704287305474 -1.25851112604 -0.704270929098 -1.27576953172 -0.704256787896 -1.29302769899 -0.704244732857 -1.31028527021 -0.70423489809 -1.32754275203 -0.704227253795 -1.34479981661 -0.704221814871 -1.36205685139 -0.704218581319 -1.37931355834 -0.704217538237 -1.3965703845 -0.704218700528 -1.41382706166 -0.704222068191 -1.43108400702 -0.704227596521 -1.44834089279 -0.704235315323 -1.46559813619 -0.704245239496 -1.48285540938 -0.704257383942 -1.50011318922 -0.704271703958 -1.51737117767 -0.70428815484 -1.53462979198 -0.704306840896 -1.5518887043 -0.704316154122 -1.57110249996 -0.704305842519 -1.59031793475 -0.704287305474 -1.60757699609 -0.704270899296 -1.62483537197 -0.704256728291 -1.64209350943 -0.704244703055 -1.65935111046 -0.70423489809 -1.67660856247 -0.704227253795 -1.69386559725 -0.704221814871 -1.71112266183 -0.704218581319 -1.72837942839 -0.70421756804 -1.74563628435 -0.70421873033 -1.7628929615 -0.704222097993 -1.78014987707 -0.704227626324 -1.79740673303 -0.704235345125 -1.81466397643 -0.704245269299 -1.83192127943 -0.70425735414 -1.84917908907 -0.704271644354 -1.86643707752 -0.704288125038 -1.88369566202 -0.704306811094 -1.90095457435 -0.70431612432 -1.92016837001 -0.704305842519 -1.939383775 -0.704287305474 -1.95664280653 -0.704270929098 -1.97390121221 -0.704256758094 -1.99115937948 -0.704244703055 -2.0084169209 -0.70423489809 -2.02567440271 -0.704227253795 -2.0429314971 -0.704221844673 -2.06018853188 -0.704218611121 -2.07744526863 -0.704217538237 -2.09470212459 -0.704218700528 -2.11195880174 -0.704222068191 -2.12921571731 -0.704227596521 -2.14647257328 -0.704235345125 -2.16372984648 -0.704245269299 -2.18098717928 -0.70425735414 -2.19824492931 -0.704271644354 -2.21550285816 -0.704288125038 -2.23276144266 -0.704306781292 -2.25002032518 -0.704316094518 -2.26923412084 -0.704305842519 -2.28844958544 -0.704287305474 -2.30570870638 -0.704270929098 -2.32296711207 -0.704256758094 -2.34022521973 -0.704244732857 -2.35748285055 -0.704234927893 -2.37474030256 -0.704227253795 -2.39199727774 -0.704221844673 -2.40925437212 -0.704218611121 -2.42651110888 -0.704217538237 -2.44376790524 -0.704218700528 -2.46102458238 -0.704222068191 -2.47828155756 -0.704227596521 -2.49553847313 -0.704235345125 -2.51279568672 -0.704245269299 -2.53005295992 -0.704257383942 -2.54731076956 -0.704271674156 -2.56456869841 -0.704288125038 -2.5818272829 -0.704306811094 -2.59908628464 -0.70431612432 -2.6183000803 -0.704305842519 -2.63751548529 -0.704287305474 -2.65477454663 -0.704270929098 -2.67203295231 -0.704256758094 -2.68929111958 -0.704244703055 -2.7065486908 -0.70423489809 -2.7238060832 -0.704227253795 -2.74106311798 -0.704221844673 -2.75832021236 -0.704218611121 -2.77557700872 -0.70421756804 -2.79283386469 -0.70421873033 -2.81009048224 -0.704222068191 -2.82734739781 -0.704227596521 -2.84460425377 -0.704235345125 -2.86186146736 -0.704245269299 -2.87911874056 -0.70425735414 -2.8963765502 -0.704271644354 -2.91363459825 -0.704288125038 -2.93089324236 -0.704306811094 -2.94815212488 -0.70431612432 -2.96736592055 -0.704305842519 -2.98658132553 -0.704287335276 -3.00384038687 -0.7042709589 -3.02109879255 -0.704256787896 -3.03835690021 -0.704244732857 -3.05561447143 -0.704234868288 -3.07287198305 -0.704227253795 -3.09012907743 -0.704221844673 -3.10738605261 -0.704218581319 -3.12464278936 -0.70421756804 --3.14128563006 -0.70421873033 --3.12402898073 -0.704222068191 --3.10677206516 -0.704227626324 --3.0895152092 -0.704235345125 --3.07225799561 -0.704245239496 --3.05500072241 -0.704257383942 --3.03774291277 -0.704271674156 --3.02048486471 -0.704288125038 --3.00322622061 -0.704306811094 --2.98596733809 -0.70431612432 --2.96675354242 -0.704305842519 --2.94753807783 -0.704287335276 --2.93027901649 -0.7042709589 --2.91302067041 -0.704256758094 --2.89576250315 -0.704244732857 --2.87850493193 -0.704234927893 --2.86124747992 -0.704227253795 --2.84399038553 -0.704221814871 --2.82673335075 -0.704218581319 --2.809476614 -0.70421756804 --2.79221975803 -0.70421873033 --2.77496308088 -0.704222068191 --2.75770616531 -0.704227596521 --2.74044930935 -0.704235345125 --2.72319203615 -0.704245269299 --2.70593470335 -0.70425735414 --2.68867695332 -0.704271644354 --2.67141902447 -0.704288125038 --2.65416043997 -0.704306811094 --2.63690155745 -0.70431612432 --2.61768776179 -0.704305842519 --2.59847229719 -0.704287305474 --2.58121323586 -0.704270929098 --2.56395483017 -0.704256758094 --2.5466966629 -0.704244732857 --2.52943909168 -0.704234927893 --2.51218163967 -0.704227253795 --2.49492460489 -0.704221814871 --2.47766751051 -0.704218611121 --2.46041077376 -0.704217597842 --2.44315391779 -0.70421873033 --2.42589724064 -0.704222068191 --2.40864032507 -0.704227596521 --2.39138346911 -0.704235345125 --2.37412625551 -0.704245269299 --2.35686892271 -0.70425735414 --2.33961111307 -0.704271644354 --2.32235312462 -0.704288125038 --2.30509454012 -0.704306811094 --2.2878356576 -0.70431612432 --2.26862186194 -0.704305842519 --2.24940645695 -0.704287305474 --2.23214739561 -0.704270929098 --2.21488898992 -0.704256758094 --2.19763082266 -0.704244703055 --2.18037319183 -0.70423489809 --2.16311579943 -0.704227253795 --2.14585882425 -0.704221844673 --2.12860172987 -0.704218611121 --2.11134499311 -0.70421756804 --2.09408813715 -0.70421873033 --2.0768314004 -0.704222068191 --2.05957448483 -0.704227596521 --2.04231762886 -0.704235345125 --2.02506041527 -0.704245269299 --2.00780314207 -0.70425735414 --1.99054533243 -0.704271644354 --1.97328734398 -0.704288125038 --1.95602872968 -0.704306811094 --1.93876981735 -0.70431612432 --1.91955602169 -0.704305842519 --1.9003405869 -0.704287305474 --1.88308152556 -0.704270929098 --1.86582314968 -0.704256787896 --1.84856501222 -0.704244732857 --1.83130741119 -0.70423489809 --1.81404995918 -0.704227253795 --1.79679292441 -0.704221814871 --1.77953585983 -0.704218581319 --1.76227909327 -0.704217538237 --1.7450222373 -0.704218700528 --1.72776556015 -0.704222068191 --1.71050864458 -0.704227596521 --1.69325178862 -0.704235315323 --1.67599454522 -0.704245239496 --1.65873724222 -0.704257383942 --1.64147943258 -0.704271703958 --1.62422144413 -0.70428815484 --1.60696285963 -0.704306840896 --1.5897039473 -0.704316154122 --1.57049015164 -0.704305842519 --1.55127474666 -0.704287305474 --1.53401565552 -0.704270899296 --1.51675724983 -0.704256728291 --1.49949914217 -0.704244703055 --1.48224154115 -0.70423489809 --1.46498405933 -0.704227253795 --1.44772702456 -0.704221814871 --1.43046998978 -0.704218581319 --1.41321325302 -0.70421756804 --1.39595636726 -0.70421873033 --1.3786997199 -0.704222097993 --1.36144280433 -0.704227626324 --1.34418591857 -0.704235345125 --1.32692867518 -0.704245269299 --1.30967134237 -0.70425735414 --1.29241356254 -0.704271644354 --1.27515560389 -0.704288125038 --1.25789701939 -0.704306811094 --1.24063813686 -0.70431612432 --1.2214243412 -0.704305842519 --1.20220887661 -0.704287305474 --1.18494981527 -0.704270929098 --1.16769140959 -0.704256758094 --1.15043324232 -0.704244703055 --1.1331756711 -0.70423489809 --1.11591821909 -0.704227253795 --1.09866118431 -0.704221844673 --1.08140414953 -0.704218611121 --1.06414741278 -0.704217538237 --1.04689055681 -0.704218700528 --1.02963387966 -0.704222068191 --1.01237693429 -0.704227596521 --0.995120078324 -0.704235345125 --0.97786283493 -0.704245269299 --0.960605531931 -0.70425735414 --0.943347752094 -0.704271644354 --0.92608974874 -0.704288125038 --0.90883114934 -0.704306781292 --0.891572266817 -0.704316094518 --0.872358486056 -0.704305842519 --0.853143036365 -0.704287305474 --0.835883945227 -0.704270929098 --0.818625554442 -0.704256758094 --0.801367402077 -0.704244732857 --0.784109815955 -0.704234927893 --0.766852378845 -0.704227253795 --0.749595344066 -0.704221844673 --0.732338294387 -0.704218611121 --0.71508154273 -0.704217538237 --0.697824701667 -0.704218700528 --0.680568039417 -0.704222068191 --0.663311108947 -0.704227596521 --0.64605422318 -0.704235345125 --0.628796964884 -0.704245269299 --0.611539676786 -0.704257383942 --0.594281882048 -0.704271674156 --0.577023908496 -0.704288125038 --0.559765338898 -0.704306811094 --0.542506426573 -0.70431612432 --0.52329261601 -0.704305842519 --0.504077188671 -0.704287305474 --0.486818127334 -0.704270929098 --0.46955973655 -0.704256758094 --0.452301584184 -0.704244703055 --0.435043983162 -0.70423489809 --0.417786516249 -0.704227253795 --0.400529466569 -0.704221844673 --0.38327242434 -0.704218611121 --0.366015687585 -0.70421756804 --0.34875882417 -0.70421873033 --0.33150216192 -0.704222068191 --0.3142452389 -0.704227596521 --0.296988360584 -0.704235345125 --0.279731124639 -0.704245269299 --0.262473829091 -0.70425735414 --0.245216034353 -0.704271644354 --0.227958064526 -0.704288125038 --0.210699480027 -0.704306811094 --0.193440571427 -0.70431612432 --0.174226764589 -0.721457719803 --0.155005641282 -0.721438854933 --0.137746550143 -0.721422210336 --0.120488140732 -0.721407815814 --0.103229979053 -0.721395537257 --0.0859723538161 -0.721385493875 --0.0687148580328 -0.721377745271 --0.0514577981084 -0.72137221694 --0.0342007325962 -0.721368923783 --0.0169439713936 -0.721367910504 -0.000312911346555 -0.721369072795 -0.0175696124788 -0.721372455358 -0.0348265599459 -0.721378102899 -0.0520834485069 -0.721385985613 -0.0693407095969 -0.721396058798 -0.0865980368107 -0.721408382058 -0.103855855763 -0.721422940492 -0.121113857254 -0.7214397192 -0.138372477144 -0.72145870328 -0.15563140437 -0.721468180418 -0.17484498769 -0.721457719803 -0.194060206413 -0.721438854933 -0.211319293827 -0.721422210336 -0.228577710688 -0.721407786012 -0.24583587423 -0.721395522356 -0.263093493879 -0.721385508776 -0.280350990593 -0.721377715469 -0.297608062625 -0.72137221694 -0.314865127206 -0.721368923783 -0.332121878862 -0.721367880702 -0.349378757178 -0.721369072795 -0.366635464132 -0.721372455358 -0.383892416954 -0.721378102899 -0.401149310172 -0.721385985613 -0.418406575918 -0.721396058798 -0.435663886368 -0.721408382058 -0.452921688557 -0.721422940492 -0.470179699362 -0.721439689398 -0.487438321114 -0.721458673477 -0.504697240889 -0.721468180418 -0.523910835385 -0.721457719803 -0.543126061559 -0.721438854933 -0.560385137796 -0.721422210336 -0.577643558383 -0.721407786012 -0.594901740551 -0.721395522356 -0.612159341574 -0.721385508776 -0.629416838288 -0.721377715469 -0.64667391777 -0.72137221694 -0.66393096745 -0.721368953585 -0.681187719107 -0.721367910504 -0.698444604874 -0.721369072795 -0.715701311827 -0.721372455358 -0.732958257198 -0.721378102899 -0.750215142965 -0.721385985613 -0.767472401261 -0.721396058798 -0.784729719162 -0.721408382058 -0.801987543702 -0.721422940492 -0.819245576858 -0.721439689398 -0.836504191161 -0.721458673477 -0.853763103485 -0.721468180418 -0.872976705432 -0.721457749605 -0.892191916704 -0.721438884735 -0.909450978041 -0.721422210336 -0.926709383726 -0.721407786012 -0.943967565894 -0.721395522356 -0.961225211621 -0.721385508776 -0.978482693434 -0.721377745271 -0.995739743113 -0.721372276544 -1.01299679279 -0.721368983388 -1.03025355935 -0.721367910504 -1.04751047492 -0.721369072795 -1.06476718188 -0.721372455358 -1.08202412725 -0.721378102899 -1.09928101301 -0.721385985613 -1.11653828621 -0.7213960886 -1.13379561901 -0.72140841186 -1.15105342865 -0.721422940492 -1.1683114171 -0.721439689398 -1.1855700314 -0.72145870328 -1.20282894373 -0.721468210221 -1.22204253078 -0.721457749605 -1.24125778675 -0.721438884735 -1.25851684809 -0.721422210336 -1.27577525377 -0.721407815814 -1.29303342104 -0.721395552159 -1.31029102206 -0.721385508776 -1.32754853368 -0.721377715469 -1.34480562806 -0.72137221694 -1.36206269264 -0.721368953585 -1.3793194294 -0.721367880702 -1.39657631516 -0.721369042993 -1.41383302212 -0.721372455358 -1.43108996749 -0.721378102899 -1.44834685325 -0.721385985613 -1.46560409665 -0.721396058798 -1.48286139965 -0.721408382058 -1.50011923909 -0.721422940492 -1.51737725735 -0.721439689398 -1.53463587165 -0.721458733082 -1.55189481378 -0.72146821022 -1.57110840082 -0.72145769 -1.59032359719 -0.721438854933 -1.60758268833 -0.721422150731 -1.62484109402 -0.721407696605 -1.64209926128 -0.721395492554 -1.65935689211 -0.721385508776 -1.67661437393 -0.721377715469 -1.6938714385 -0.72137221694 -1.71112853289 -0.721368953585 -1.72838532925 -0.721367910504 -1.74564218521 -0.721369072795 -1.76289886236 -0.721372485161 -1.78015580773 -0.721378132701 -1.7974126935 -0.721385985613 -1.8146699667 -0.721396058798 -1.8319272995 -0.721408382058 -1.84918510914 -0.721422940492 -1.86644312739 -0.721439689398 -1.88370174169 -0.721458673477 -1.90096065402 -0.721468180418 -1.92017424107 -0.721457749605 -1.93938946724 -0.721438884735 -1.95664852858 -0.721422210336 -1.97390693426 -0.721407786012 -1.99116513133 -0.721395522356 -2.00842273235 -0.721385508776 -2.02568024397 -0.721377745271 -2.04293733835 -0.721372276544 -2.06019443273 -0.721368953585 -2.07745116949 -0.7213678509 -2.09470802546 -0.721369042993 -2.11196476221 -0.721372455358 -2.12922167778 -0.721378102899 -2.14647853374 -0.721385985613 -2.16373580694 -0.721396058798 -2.18099313974 -0.721408382058 -2.19825100899 -0.721422940492 -2.21550899744 -0.721439689398 -2.23276752234 -0.721458673477 -2.25002646446 -0.721468180418 -2.26924008131 -0.721457719803 -2.28845530749 -0.721438854933 -2.30571442842 -0.721422210336 -2.32297283411 -0.721407786012 -2.34023100138 -0.721395522356 -2.3574886322 -0.721385508776 -2.37474608421 -0.721377745271 -2.39200311899 -0.721372246742 -2.40926021337 -0.721368953585 -2.42651700973 -0.721367880702 -2.4437738657 -0.721369042993 -2.46103054285 -0.721372455358 -2.47828751803 -0.721378102899 -2.4955444336 -0.721385985613 -2.51280164719 -0.7213960886 -2.53005897999 -0.72140841186 -2.54731684923 -0.721422940492 -2.56457477808 -0.721439689398 -2.58183336258 -0.721458673477 -2.59909236431 -0.721468180418 -2.61830598116 -0.721457749605 -2.63752120734 -0.721438884735 -2.65478026867 -0.721422210336 -2.67203867435 -0.721407786012 -2.68929684162 -0.721395522356 -2.70655447245 -0.721385538578 -2.72381192446 -0.721377745271 -2.74106901884 -0.721372246742 -2.75832611322 -0.721368953585 -2.77558284998 -0.721367880702 -2.79283976555 -0.721369072795 -2.81009638309 -0.721372455358 -2.82735329866 -0.721378102899 -2.84461021423 -0.721385985613 -2.86186748743 -0.721396058798 -2.87912482023 -0.721408382058 -2.89638262987 -0.721422940492 -2.91364067793 -0.721439689398 -2.93089932203 -0.72145870328 -2.94815820455 -0.721468210221 -2.9673717618 -0.721457719803 -2.98658698797 -0.721438854933 -3.00384610891 -0.721422210336 -3.0211045146 -0.721407815814 -3.03836262226 -0.721395537257 -3.05562025309 -0.721385493875 -3.07287782431 -0.721377745271 -3.09013491869 -0.72137221694 -3.10739189386 -0.721368923783 -3.12464863062 -0.721367910504 --3.1412797292 -0.721369072795 --3.12402302027 -0.721372455358 --3.1067661047 -0.721378102899 --3.08950924874 -0.721385985613 --3.07225197554 -0.721396058798 --3.05499464274 -0.721408382058 --3.03773683309 -0.721422940492 --3.02047878504 -0.7214397192 --3.00322014093 -0.72145870328 --2.98596125841 -0.721468180418 --2.96674770117 -0.721457719803 --2.94753247499 -0.721438854933 --2.93027335405 -0.721422210336 --2.91301494837 -0.721407786012 --2.8957567811 -0.721395522356 --2.87849915028 -0.721385508776 --2.86124163866 -0.721377715469 --2.84398454428 -0.72137221694 --2.8267275095 -0.721368923783 --2.80947077274 -0.721367880702 --2.79221385717 -0.721369072795 --2.77495712042 -0.721372455358 --2.75770020485 -0.721378102899 --2.74044334888 -0.721385985613 --2.72318607569 -0.721396058798 --2.70592874289 -0.721408382058 --2.68867093325 -0.721422940492 --2.67141294479 -0.721439689398 --2.6541543603 -0.721458673477 --2.63689547777 -0.721468180418 --2.61768186092 -0.721457719803 --2.59846657515 -0.721438854933 --2.58120751381 -0.721422210336 --2.56394910812 -0.721407786012 --2.54669088125 -0.721395522356 --2.52943331003 -0.721385508776 --2.51217585802 -0.721377715469 --2.49491876364 -0.72137221694 --2.47766166926 -0.721368953585 --2.4604049325 -0.721367910504 --2.44314807653 -0.721369072795 --2.42589133978 -0.721372455358 --2.40863436461 -0.721378102899 --2.39137750864 -0.721385985613 --2.37412029505 -0.721396058798 --2.35686296225 -0.721408382058 --2.339605093 -0.721422940492 --2.32234704494 -0.721439689398 --2.30508846044 -0.721458673477 --2.28782951832 -0.721468180418 --2.26861590147 -0.721457749605 --2.2494007349 -0.721438884735 --2.23214167357 -0.721422210336 --2.21488326788 -0.721407786012 --2.19762510061 -0.721395522356 --2.18036741018 -0.721385508776 --2.16310995817 -0.721377745271 --2.145852983 -0.721372276544 --2.12859588862 -0.721368983388 --2.11133909226 -0.721367910504 --2.09408223629 -0.721369072795 --2.07682555914 -0.721372455358 --2.05956858396 -0.721378102899 --2.0423116684 -0.721385985613 --2.0250543952 -0.7213960886 --2.0077970624 -0.72140841186 --1.99053925276 -0.721422940492 --1.9732812643 -0.721439689398 --1.9560226202 -0.72145870328 --1.93876367807 -0.721468210221 --1.91955009103 -0.721457749605 --1.90033489466 -0.721438884735 --1.88307583332 -0.721422210336 --1.86581739783 -0.721407815814 --1.84855923057 -0.721395552159 --1.83130159974 -0.721385508776 --1.81404411793 -0.721377715469 --1.79678708315 -0.72137221694 --1.77952998877 -0.721368953585 --1.76227319241 -0.721367880702 --1.74501633644 -0.721369042993 --1.72775965929 -0.721372455358 --1.71050271392 -0.721378102899 --1.69324582815 -0.721385985613 --1.67598855495 -0.721396058798 --1.65873122215 -0.721408382058 --1.64147341252 -0.721422940492 --1.62421539426 -0.721439689398 --1.60695677996 -0.721458733082 --1.58969783783 -0.72146821022 --1.57048425078 -0.72145769 --1.55126905442 -0.721438854933 --1.53400993347 -0.721422150731 --1.51675152778 -0.721407696605 --1.49949339032 -0.721395492554 --1.4822357595 -0.721385508776 --1.46497824788 -0.721377715469 --1.4477211833 -0.72137221694 --1.43046414852 -0.721368953585 --1.41320741177 -0.721367910504 --1.3959504962 -0.721369072795 --1.37869378924 -0.721372485161 --1.36143684387 -0.721378132701 --1.3441799283 -0.721385985613 --1.32692265511 -0.721396058798 --1.3096653223 -0.721408382058 --1.29240751267 -0.721422940492 --1.27514952421 -0.721439689398 --1.25789090991 -0.721458673477 --1.24063199758 -0.721468180418 --1.22141841054 -0.721457749605 --1.20220315457 -0.721438884735 --1.18494409323 -0.721422210336 --1.16768568754 -0.721407786012 --1.15042752028 -0.721395522356 --1.13316991925 -0.721385508776 --1.11591243744 -0.721377745271 --1.09865537286 -0.721372276544 --1.08139827848 -0.721368953585 --1.06414151192 -0.7213678509 --1.04688462615 -0.721369042993 --1.029627949 -0.721372455358 --1.01237100363 -0.721378102899 --0.995114102958 -0.721385985613 --0.977856829762 -0.721396058798 --0.960599496961 -0.721408382058 --0.943341672421 -0.721422940492 --0.926083654165 -0.721439689398 --0.908825054765 -0.721458673477 --0.89156614244 -0.721468180418 --0.872352585196 -0.721457719803 --0.853137359023 -0.721438854933 --0.835878238082 -0.721422210336 --0.818619832396 -0.721407786012 --0.80136166513 -0.721395522356 --0.784104034305 -0.721385508776 --0.766846552491 -0.721377745271 --0.749589502811 -0.721372246742 --0.73233243823 -0.721368953585 --0.715075656772 -0.721367880702 --0.697818785906 -0.721369042993 --0.680562093854 -0.721372455358 --0.663305133581 -0.721378102899 --0.646048247814 -0.721385985613 --0.628790989518 -0.7213960886 --0.611533671618 -0.72140841186 --0.594275847078 -0.721422940492 --0.577017858625 -0.721439689398 --0.559759259224 -0.721458673477 --0.542500331998 -0.721468180418 --0.523286744952 -0.721457749605 --0.504071511329 -0.721438884735 --0.486812420189 -0.721422210336 --0.469553999603 -0.721407786012 --0.452295824886 -0.721395522356 --0.435038216412 -0.721385538578 --0.417780719697 -0.721377745271 --0.400523632765 -0.721372246742 --0.383266568184 -0.721368953585 --0.366009816527 -0.721367880702 --0.34875293076 -0.721369072795 --0.331496231258 -0.721372455358 --0.314239285886 -0.721378102899 --0.296982392669 -0.721385985613 --0.279725134373 -0.721396058798 --0.262467816472 -0.721408382058 --0.245209999383 -0.721422940492 --0.227951999754 -0.721439689398 --0.210693378002 -0.72145870328 --0.19343444705 -0.721468210221 --0.174220867455 -0.738613426686 --0.155000925064 -0.738594263792 --0.137741815299 -0.738577336073 --0.120483381673 -0.738562658429 --0.103225193918 -0.738550201058 --0.0859675537795 -0.738540023565 --0.0687100421637 -0.738532111049 --0.0514529589564 -0.738526508212 --0.0341958724894 -0.738523200154 --0.0169390928931 -0.738522127271 -0.000317810336127 -0.738523289561 -0.0175745317247 -0.738526746631 -0.0348315001466 -0.738532468677 -0.0520884068683 -0.7385404706 -0.0693456884474 -0.7385507375 -0.0866030361503 -0.738563284278 -0.103860871866 -0.738578081131 -0.121118893847 -0.738595172763 -0.138377539813 -0.738614484668 -0.155636489391 -0.738624081016 -0.174849890172 -0.738613426686 -0.194064926356 -0.738594263792 -0.211324028671 -0.738577336073 -0.228582467884 -0.738562658429 -0.245840661228 -0.73855021596 -0.263098299503 -0.738540038467 -0.280355811119 -0.738532111049 -0.297612898052 -0.738526538015 -0.314869977534 -0.738523200154 -0.332126751542 -0.738522127271 -0.349383659661 -0.738523319364 -0.366640388966 -0.738526746631 -0.383897356689 -0.738532468677 -0.401154257357 -0.7385404706 -0.418411538005 -0.7385507375 -0.435668885708 -0.738563284278 -0.452926710248 -0.738578081131 -0.470184743405 -0.738595113158 -0.487443387508 -0.738614425063 -0.504702322185 -0.738624081016 -0.523915737868 -0.738613426686 -0.543130785227 -0.738594263792 -0.560389876365 -0.738577336073 -0.577648326754 -0.738562658429 -0.594906523824 -0.73855021596 -0.612164139748 -0.738540038467 -0.629421666265 -0.738532111049 -0.646678760648 -0.738526538015 -0.66393584013 -0.738523200154 -0.681192621589 -0.738522127271 -0.698449522257 -0.738523319364 -0.71570622921 -0.738526776433 -0.732963189483 -0.738532528281 -0.750220090151 -0.738540500403 -0.767477378249 -0.7385507375 -0.784734740853 -0.738563284278 -0.801992580294 -0.738578081131 -0.819250613451 -0.738595113158 -0.836509242654 -0.738614425063 -0.85376816988 -0.738624081016 -0.872981593013 -0.738613456488 -0.892196640372 -0.738594293594 -0.90945571661 -0.738577336073 -0.926714152098 -0.738562658429 -0.943972349167 -0.73855021596 -0.961229994893 -0.738540038467 -0.978487506509 -0.738532140851 -0.995744600891 -0.738526567817 -1.01300168037 -0.738523229956 -1.03025844693 -0.738522157073 -1.0475153625 -0.738523319364 -1.06477206946 -0.738526746631 -1.08202904463 -0.738532498479 -1.0992859602 -0.738540500403 -1.11654323339 -0.738550767303 -1.133800596 -0.73856331408 -1.15105843544 -0.738578081131 -1.16831645369 -0.738595113158 -1.1855750978 -0.738614454866 -1.20283403993 -0.738624110818 -1.22204744816 -0.738613456488 -1.24126249552 -0.738594293594 -1.25852158666 -0.738577336073 -1.27578002214 -0.738562658429 -1.29303818941 -0.73855021596 -1.31029582023 -0.738540038467 -1.32755336165 -0.738532111049 -1.34481045604 -0.738526538015 -1.36206755042 -0.738523229956 -1.37932431698 -0.738522157073 -1.39658123255 -0.738523319364 -1.4138379693 -0.738526746631 -1.43109491468 -0.738532498479 -1.44835180044 -0.738540500403 -1.46560907364 -0.7385507375 -1.48286640644 -0.738563284278 -1.50012427568 -0.738578110934 -1.51738232374 -0.738595142961 -1.53464093804 -0.738614454866 -1.55189988017 -0.738624081015 -1.5711132884 -0.738613396883 -1.59032833576 -0.738594263792 -1.6075874567 -0.738577306271 -1.62484586239 -0.738562598824 -1.64210402966 -0.738550186157 -1.65936169028 -0.738540038467 -1.6766192019 -0.738532111049 -1.69387629628 -0.738526508212 -1.71113339066 -0.738523200154 -1.72839018703 -0.738522157073 -1.74564707279 -0.738523319364 -1.76290377975 -0.738526776433 -1.78016075492 -0.738532528281 -1.79741767049 -0.738540500403 -1.81467497349 -0.7385507375 -1.83193230629 -0.738563284278 -1.84919011593 -0.738578081131 -1.86644816399 -0.738595113158 -1.88370680809 -0.738614425063 -1.90096572041 -0.738624081016 -1.92017912865 -0.738613456488 -1.939394176 -0.738594293594 -1.95665326715 -0.738577336073 -1.97391170263 -0.738562658429 -1.9911699295 -0.73855021596 -2.00842759013 -0.738540038467 -2.02568507194 -0.738532140851 -2.04294216633 -0.738526567817 -2.06019926071 -0.738523200154 -2.07745599747 -0.738522097468 -2.09471291304 -0.738523289561 -2.11196964979 -0.738526776433 -2.12922662496 -0.738532528281 -2.14648354053 -0.738540500403 -2.16374081373 -0.7385507375 -2.18099814653 -0.738563284278 -2.19825601578 -0.738578110934 -2.21551406384 -0.738595142961 -2.23277264833 -0.738614425063 -2.25003159046 -0.738624081016 -2.26924502849 -0.738613426686 -2.28846007586 -0.738594263792 -2.3057191968 -0.738577336073 -2.32297760248 -0.738562658429 -2.34023576975 -0.73855021596 -2.35749340057 -0.738540038467 -2.37475091219 -0.738532140851 -2.39200800657 -0.738526538015 -2.40926510096 -0.738523200154 -2.42652189732 -0.738522157073 -2.44377875328 -0.738523319364 -2.46103543043 -0.738526746631 -2.4782924056 -0.738532498479 -2.49554938078 -0.738540500403 -2.51280665398 -0.738550767303 -2.53006398678 -0.73856331408 -2.54732185602 -0.738578081131 -2.56457984447 -0.738595113158 -2.58183842897 -0.738614425063 -2.5990973711 -0.738624081016 -2.61831080914 -0.738613456488 -2.63752585649 -0.738594293594 -2.65478497743 -0.738577336073 -2.67204344272 -0.738562658429 -2.68930160999 -0.73855021596 -2.70655924082 -0.738540068269 -2.72381675243 -0.738532140851 -2.74107384682 -0.738526538015 -2.7583309412 -0.738523200154 -2.77558773756 -0.738522097468 -2.79284465313 -0.738523289561 -2.81010133028 -0.738526746631 -2.82735830546 -0.738532498479 -2.84461522103 -0.738540500403 -2.86187249422 -0.7385507375 -2.87912982702 -0.738563284278 -2.89638763666 -0.738578081131 -2.91364568472 -0.738595113158 -2.93090432882 -0.738614454866 -2.94816327095 -0.738624110818 -2.96737664938 -0.738613426686 -2.98659163713 -0.738594263792 -3.00385075808 -0.738577336073 -3.02110922336 -0.738562658429 -3.03836745024 -0.738550201058 -3.05562514067 -0.738540023565 -3.07288265228 -0.738532111049 -3.09013974666 -0.738526508212 -3.10739678144 -0.738523200154 -3.1246535182 -0.738522127271 --3.14127484162 -0.738523289561 --3.12401807308 -0.738526746631 --3.10676109791 -0.738532468677 --3.08950424194 -0.7385404706 --3.07224696875 -0.7385507375 --3.05498963594 -0.738563284278 --3.0377318263 -0.738578081131 --3.02047377825 -0.738595172763 --3.00321507454 -0.738614484668 --2.98595613241 -0.738624081016 --2.96674281359 -0.738613426686 --2.94752776622 -0.738594263792 --2.93026864528 -0.738577336073 --2.9130102396 -0.738562658429 --2.89575201273 -0.73855021596 --2.8784943819 -0.738540038467 --2.86123687029 -0.738532111049 --2.8439797163 -0.738526538015 --2.82672268152 -0.738523200154 --2.80946594477 -0.738522127271 --2.79220896959 -0.738523319364 --2.77495223284 -0.738526746631 --2.75769525767 -0.738532468677 --2.7404384017 -0.7385404706 --2.72318118811 -0.7385507375 --2.7059237957 -0.738563284278 --2.68866592646 -0.738578081131 --2.6714078784 -0.738595113158 --2.65414923429 -0.738614425063 --2.63689035177 -0.738624081016 --2.61767691374 -0.738613426686 --2.59846180678 -0.738594263792 --2.58120274544 -0.738577336073 --2.56394433975 -0.738562658429 --2.54668611288 -0.73855021596 --2.52942848206 -0.738540038467 --2.51217097044 -0.738532111049 --2.49491387606 -0.738526538015 --2.47765684128 -0.738523200154 --2.46040010452 -0.738522127271 --2.44314318895 -0.738523319364 --2.4258864522 -0.738526776433 --2.40862947703 -0.738532528281 --2.39137256146 -0.738540500403 --2.37411528826 -0.7385507375 --2.35685795546 -0.738563284278 --2.33960008621 -0.738578081131 --2.32234203815 -0.738595113158 --2.30508345366 -0.738614425063 --2.28782451153 -0.738624081016 --2.2686110735 -0.738613456488 --2.24939602613 -0.738594293594 --2.23213690519 -0.738577336073 --2.2148784399 -0.738562658429 --2.19762027264 -0.73855021596 --2.18036264181 -0.738540038467 --2.1631051302 -0.738532140851 --2.14584809542 -0.738526567817 --2.12859100103 -0.738523229956 --2.11133414507 -0.738522157073 --2.0940772891 -0.738523319364 --2.07682061195 -0.738526746631 --2.05956363678 -0.738532498479 --2.04230672121 -0.738540500403 --2.02504938841 -0.738550767303 --2.00779205561 -0.73856331408 --1.99053421617 -0.738578081131 --1.97327619791 -0.738595113158 --1.9560175538 -0.738614454866 --1.93875858188 -0.738624110818 --1.91954517365 -0.738613456488 --1.90033015609 -0.738594293594 --1.88307106495 -0.738577336073 --1.86581259966 -0.738562658429 --1.84855443239 -0.73855021596 --1.83129680157 -0.738540038467 --1.81403928995 -0.738532111049 --1.79678222537 -0.738526538015 --1.77952513098 -0.738523229956 --1.76226833462 -0.738522157073 --1.74501144886 -0.738523319364 --1.72775474191 -0.738526746631 --1.71049776673 -0.738532498479 --1.69324085116 -0.738540500403 --1.67598354816 -0.7385507375 --1.65872621536 -0.738563284278 --1.64146840572 -0.738578110934 --1.62421035767 -0.738595142961 --1.60695171356 -0.738614454866 --1.58969277143 -0.738624081015 --1.57047936321 -0.738613396883 --1.55126434565 -0.738594263792 --1.53400522471 -0.738577306271 --1.51674678922 -0.738562598824 --1.49948859215 -0.738550186157 --1.48223096132 -0.738540038467 --1.46497344971 -0.738532111049 --1.44771635532 -0.738526508212 --1.43045929074 -0.738523200154 --1.41320252418 -0.738522157073 --1.39594560861 -0.738523319364 --1.37868887186 -0.738526776433 --1.36143189669 -0.738532528281 --1.34417498112 -0.738540500403 --1.32691770792 -0.7385507375 --1.30966034531 -0.738563284278 --1.29240250588 -0.738578081131 --1.27514451742 -0.738595113158 --1.25788587332 -0.738614425063 --1.24062690139 -0.738624081016 --1.22141349316 -0.738613456488 --1.2021984458 -0.738594293594 --1.18493935466 -0.738577336073 --1.16768091917 -0.738562658429 --1.1504227519 -0.73855021596 --1.13316512108 -0.738540038467 --1.11590760946 -0.738532140851 --1.09865054488 -0.738526567817 --1.0813934505 -0.738523200154 --1.06413665414 -0.738522097468 --1.04687970877 -0.738523289561 --1.02962300181 -0.738526776433 --1.01236605644 -0.738532528281 --0.995109125971 -0.738540500403 --0.977851837873 -0.7385507375 --0.960594490171 -0.738563284278 --0.943336650729 -0.738578110934 --0.926078632474 -0.738595142961 --0.908820003271 -0.738614425063 --0.891561046243 -0.738624081016 --0.872347652912 -0.738613426686 --0.853132620454 -0.738594263792 --0.835873499513 -0.738577336073 --0.818615064025 -0.738562658429 --0.801356881857 -0.73855021596 --0.784099251032 -0.738540038467 --0.766841739416 -0.738532140851 --0.749584659934 -0.738526538015 --0.732327580452 -0.738523200154 --0.715070784092 -0.738522157073 --0.697813883424 -0.738523319364 --0.680557161569 -0.738526746631 --0.663300186395 -0.738532498479 --0.646043285728 -0.738540500403 --0.628786027432 -0.738550767303 --0.61152869463 -0.73856331408 --0.594270840287 -0.738578081131 --0.577012822032 -0.738595113158 --0.559754192829 -0.738614425063 --0.542495250702 -0.738624081016 --0.52328184247 -0.738613456488 --0.50406678021 -0.738594293594 --0.486807666719 -0.738577336073 --0.469549231231 -0.738562658429 --0.452291049063 -0.73855021596 --0.435033418238 -0.738540068269 --0.417775891721 -0.738532140851 --0.400518797338 -0.738526538015 --0.383261710406 -0.738523200154 --0.366004936397 -0.738522097468 --0.34874804318 -0.738523289561 --0.331491321325 -0.738526746631 --0.314234346151 -0.738532498479 --0.296977438033 -0.738540500403 --0.279720164836 -0.7385507375 --0.262462824583 -0.738563284278 --0.245204985142 -0.738578081131 --0.227946959436 -0.738595113158 --0.210688311607 -0.738614454866 --0.193429365754 -0.738624110818 --0.174215972423 -0.755749195814 --0.154996257275 -0.755729719996 --0.137737132609 -0.755712479353 --0.120478669181 -0.755697563291 --0.103220460936 -0.755684927106 --0.085962805897 -0.755674630404 --0.0687052737921 -0.755666583776 --0.0514481673017 -0.755660876632 --0.0341910603456 -0.755657494068 --0.0169342618901 -0.755656376481 -0.000322661362588 -0.755657553673 -0.0175794025418 -0.755661070347 -0.0348363919184 -0.755666926503 -0.0520933205262 -0.755675077438 -0.0693506207317 -0.755685478449 -0.0866079833359 -0.755698218942 -0.103865839541 -0.755713269114 -0.121123885736 -0.755730599165 -0.138382550329 -0.755750223994 -0.155641518534 -0.755759999156 -0.174854744226 -0.755749195814 -0.194069601595 -0.755729719996 -0.211328718811 -0.755712479353 -0.228587180376 -0.755697548389 -0.245845392346 -0.755684912205 -0.263103045523 -0.755674600601 -0.28036057204 -0.755666583776 -0.297617681324 -0.755660906434 -0.314874790609 -0.755657494068 -0.332131586969 -0.755656406283 -0.349388509989 -0.755657583475 -0.366645254195 -0.755661070347 -0.383902251721 -0.755666896701 -0.40115917474 -0.755675047636 -0.418416470289 -0.75568549335 -0.435673840344 -0.755698233843 -0.452931687236 -0.755713269114 -0.470189735293 -0.755730569363 -0.487448394298 -0.755750223994 -0.504707358778 -0.755760028958 -0.523920595646 -0.755749195814 -0.54313544929 -0.755729719996 -0.56039455533 -0.755712479353 -0.577653035521 -0.755697548389 -0.594911247492 -0.755684912205 -0.612168893218 -0.755674600601 -0.629426434636 -0.755666583776 -0.646683514118 -0.755660906434 -0.663940608501 -0.755657494068 -0.681197434664 -0.755656406283 -0.698454365135 -0.755657613278 -0.715711086989 -0.755661129952 -0.732968077064 -0.755666956306 -0.750225007534 -0.755675077439 -0.767482310534 -0.75568549335 -0.784739688039 -0.755698233843 -0.801997557282 -0.755713269114 -0.81925560534 -0.755730569363 -0.836514249444 -0.755750223994 -0.853773206472 -0.755760028958 -0.87298643589 -0.755749195814 -0.892201289534 -0.755729719996 -0.909460395574 -0.755712479353 -0.926718875766 -0.755697548389 -0.943977102637 -0.755684927106 -0.961234733462 -0.755674615503 -0.97849227488 -0.755666583776 -0.995749413968 -0.755660906434 -1.01300650835 -0.755657494068 -1.03026327491 -0.755656406283 -1.04752019048 -0.755657613278 -1.06477692723 -0.755661100149 -1.08203393221 -0.755666926503 -1.09929087758 -0.755675077439 -1.11654815078 -0.75568549335 -1.13380551338 -0.755698233843 -1.15106338263 -0.755713269114 -1.16832143068 -0.755730569363 -1.18558010459 -0.755750194192 -1.20283907652 -0.755759999156 -1.22205230594 -0.755749195814 -1.24126714468 -0.755729719996 -1.25852626562 -0.755712479353 -1.27578476071 -0.755697563291 -1.29304295778 -0.755684927106 -1.31030058861 -0.755674600601 -1.32755813002 -0.755666553974 -1.34481522441 -0.755660876632 -1.3620723486 -0.755657494068 -1.37932917476 -0.755656406283 -1.39658609033 -0.755657583475 -1.41384282708 -0.755661070347 -1.43109980226 -0.755666926503 -1.44835671782 -0.755675047636 -1.46561402082 -0.755685463548 -1.48287138343 -0.755698233843 -1.50012925267 -0.755713298917 -1.51738730073 -0.755730599165 -1.53464594483 -0.755750223994 -1.55190491676 -0.755759999156 -1.57111814618 -0.755749166012 -1.59033301473 -0.755729719996 -1.60759216547 -0.755712479353 -1.62485060096 -0.755697548389 -1.64210876822 -0.755684912205 -1.65936645866 -0.755674600601 -1.67662400007 -0.755666553974 -1.69388109446 -0.755660846829 -1.71113818884 -0.755657464266 -1.7283949852 -0.755656406283 -1.74565193057 -0.755657583475 -1.76290866733 -0.755661100149 -1.7801656425 -0.755666956306 -1.79742258787 -0.755675077439 -1.81467992067 -0.75568549335 -1.83193725348 -0.755698233843 -1.84919509292 -0.755713269114 -1.86645314098 -0.755730569363 -1.88371178508 -0.755750223994 -1.90097075701 -0.755760028958 -1.92018398643 -0.755749195814 -1.93939885497 -0.755729719996 -1.95665797591 -0.755712479353 -1.9739164114 -0.755697563291 -1.99117463827 -0.755684942007 -2.0084323287 -0.755674615503 -2.02568984032 -0.755666583776 -2.0429469347 -0.755660906434 -2.06020402908 -0.755657494068 -2.07746082544 -0.755656376481 -2.09471780062 -0.755657583475 -2.11197453737 -0.755661129952 -2.12923151255 -0.755666956306 -2.14648848772 -0.755675047636 -2.16374582052 -0.755685463548 -2.18100315333 -0.755698233843 -2.19826096297 -0.755713298917 -2.21551901102 -0.755730599165 -2.23277765513 -0.755750223994 -2.25003659725 -0.755760028958 -2.26924985647 -0.755749195814 -2.28846472502 -0.755729719996 -2.30572384596 -0.755712479353 -2.32298225164 -0.755697548389 -2.34024041891 -0.755684912205 -2.35749810934 -0.755674600601 -2.37475568056 -0.755666553974 -2.39201277494 -0.755660876632 -2.40926986933 -0.755657494068 -2.42652666569 -0.755656406283 -2.44378358126 -0.755657613278 -2.46104031801 -0.755661100149 -2.47829729319 -0.755666956305 -2.49555426836 -0.755675107241 -2.51281160116 -0.75568549335 -2.53006893397 -0.755698233843 -2.5473267436 -0.755713269114 -2.56458479166 -0.755730569363 -2.58184349537 -0.755750194192 -2.59910243749 -0.755759999156 -2.61831563711 -0.755749195814 -2.63753050566 -0.755729719996 -2.6547896266 -0.755712479353 -2.67204815149 -0.755697563291 -2.68930631876 -0.755684927106 -2.70656394959 -0.755674600601 -2.72382152081 -0.755666583776 -2.74107861519 -0.755660906434 -2.75833576918 -0.755657494068 -2.77559256554 -0.755656376481 -2.7928494215 -0.755657583475 -2.81010621786 -0.755661100149 -2.82736325264 -0.755666926503 -2.84462010861 -0.755675077439 -2.8618773818 -0.75568549335 -2.87913477421 -0.755698233843 -2.89639264345 -0.755713269114 -2.91365069151 -0.755730569363 -2.93090933561 -0.755750223994 -2.94816827774 -0.755760028958 -2.96738147735 -0.755749195814 -2.9865963459 -0.755729719996 -3.00385546684 -0.755712479353 -3.02111393213 -0.755697563291 -3.03837221861 -0.755684927106 -3.05562990904 -0.755674630404 -3.07288742065 -0.755666583776 -3.09014451503 -0.755660876632 -3.10740160942 -0.755657494068 -3.12465840578 -0.755656376481 --3.14127001365 -0.755657553673 --3.12401324511 -0.755661070347 --3.10675621033 -0.755666926503 --3.08949935436 -0.755675077438 --3.07224208116 -0.755685478449 --3.05498468876 -0.755698218942 --3.03772681952 -0.755713269114 --3.02046877146 -0.755730599165 --3.00321006775 -0.755750223994 --2.98595112562 -0.755759999156 --2.96673798561 -0.755749195814 --2.94752305746 -0.755729719996 --2.93026393652 -0.755712479353 --2.91300553084 -0.755697548389 --2.89574724436 -0.755684912205 --2.87848961353 -0.755674600601 --2.86123210192 -0.755666583776 --2.84397494793 -0.755660906434 --2.82671785355 -0.755657494068 --2.80946105719 -0.755656406283 --2.79220414162 -0.755657583475 --2.77494740486 -0.755661070347 --2.75769037009 -0.755666896701 --2.74043345452 -0.755675047636 --2.72317618132 -0.75568549335 --2.70591878891 -0.755698233843 --2.68866091966 -0.755713269114 --2.67140287161 -0.755730569363 --2.6541442275 -0.755750223994 --2.63688528538 -0.755760028958 --2.61767202616 -0.755749195814 --2.59845715761 -0.755729719996 --2.58119803667 -0.755712479353 --2.56393957138 -0.755697548389 --2.54668140411 -0.755684912205 --2.52942377329 -0.755674600601 --2.51216620207 -0.755666583776 --2.49490910769 -0.755660906434 --2.47765207291 -0.755657494068 --2.46039527655 -0.755656406283 --2.44313830137 -0.755657613278 --2.42588156462 -0.755661129952 --2.40862458945 -0.755666956306 --2.39136761427 -0.755675077439 --2.37411028147 -0.75568549335 --2.35685294866 -0.755698233843 --2.33959513903 -0.755713269114 --2.32233709097 -0.755730569363 --2.30507844687 -0.755750223994 --2.28781950474 -0.755760028958 --2.26860624552 -0.755749195814 --2.24939137697 -0.755729719996 --2.23213225603 -0.755712479353 --2.21487373113 -0.755697548389 --2.19761550426 -0.755684927106 --2.18035793304 -0.755674615503 --2.16310042143 -0.755666583776 --2.14584326744 -0.755660906434 --2.12858617306 -0.755657494068 --2.1113293767 -0.755656406283 --2.09407246113 -0.755657613278 --2.07681572437 -0.755661100149 --2.0595587492 -0.755666926503 --2.04230183363 -0.755675077439 --2.02504450083 -0.75568549335 --2.00778713822 -0.755698233843 --1.99052926898 -0.755713269114 --1.97327122092 -0.755730569363 --1.95601254702 -0.755750194192 --1.93875354528 -0.755759999156 --1.91954034567 -0.755749195814 --1.90032550693 -0.755729719996 --1.88306635618 -0.755712479353 --1.86580789089 -0.755697563291 --1.84854972362 -0.755684927106 --1.83129206299 -0.755674600601 --1.81403452158 -0.755666553974 --1.79677742719 -0.755660876632 --1.77952030301 -0.755657494068 --1.76226350665 -0.755656406283 --1.74500659108 -0.755657583475 --1.72774982453 -0.755661070347 --1.71049284935 -0.755666926503 --1.69323593378 -0.755675047636 --1.67597860098 -0.755685463548 --1.65872123838 -0.755698233843 --1.64146339894 -0.755713298917 --1.62420535088 -0.755730599165 --1.60694670677 -0.755750223994 --1.58968776464 -0.755759999156 --1.57047453523 -0.755749166012 --1.55125966668 -0.755729719996 --1.53400054574 -0.755712479353 --1.51674208045 -0.755697548389 --1.49948385358 -0.755684912205 --1.48222622275 -0.755674600601 --1.46496868133 -0.755666553974 --1.44771155715 -0.755660846829 --1.43045446277 -0.755657464266 --1.41319766641 -0.755656406283 --1.39594075084 -0.755657583475 --1.37868401408 -0.755661100149 --1.3614270091 -0.755666956306 --1.34417006374 -0.755675077439 --1.32691279054 -0.75568549335 --1.30965542793 -0.755698233843 --1.29239755869 -0.755713269114 --1.27513954044 -0.755730569363 --1.25788086653 -0.755750223994 --1.2406218648 -0.755760028958 --1.22140863538 -0.755749195814 --1.20219379663 -0.755729719996 --1.18493467569 -0.755712479353 --1.1676762104 -0.755697563291 --1.15041801333 -0.755684942007 --1.13316035271 -0.755674615503 --1.11590284109 -0.755666583776 --1.09864574671 -0.755660906434 --1.08138862253 -0.755657494068 --1.06413182617 -0.755656376481 --1.04687488079 -0.755657583475 --1.02961814404 -0.755661129952 --1.01236116886 -0.755666956306 --0.995104223489 -0.755675047636 --0.97784692049 -0.755685463548 --0.960589542985 -0.755698233843 --0.943331688643 -0.755713298917 --0.926073655486 -0.755730599165 --0.908815011382 -0.755750223994 --0.891556054354 -0.755760028958 --0.872342824936 -0.755749195814 --0.853127941489 -0.755729719996 --0.835868805647 -0.755712479353 --0.818610370159 -0.755697548389 --0.80135217309 -0.755684912205 --0.784094512462 -0.755674600601 --0.766836971044 -0.755666553974 --0.749579876661 -0.755660876632 --0.732322767377 -0.755657494068 --0.715065956116 -0.755656406283 --0.697809040547 -0.755657613278 --0.680552303791 -0.755661100149 --0.663295313716 -0.755666956305 --0.646038383246 -0.755675107241 --0.628781095147 -0.75568549335 --0.611523747444 -0.755698233843 --0.594265878201 -0.755713269114 --0.577007830143 -0.755730569363 --0.559749171138 -0.755750194192 --0.542490199208 -0.755759999156 --0.52327696979 -0.755749195814 --0.504062086344 -0.755729719996 --0.486802965403 -0.755712479353 --0.469544515014 -0.755697563291 --0.452286317945 -0.755684927106 --0.435028664768 -0.755674600601 --0.417771115899 -0.755666583776 --0.400514006615 -0.755660906434 --0.383256904781 -0.755657494068 --0.366000108421 -0.755656376481 --0.348743192852 -0.755657583475 --0.331486448646 -0.755661100149 --0.31422945112 -0.755666926503 --0.2969725281 -0.755675077439 --0.279715232551 -0.75568549335 --0.262457862496 -0.755698233843 --0.245200004428 -0.755713269114 --0.227941967547 -0.755730569363 --0.210683304817 -0.755750223994 --0.193424340338 -0.755760028958 --0.17421111837 -0.772866845131 --0.15499162674 -0.77284707129 --0.137732483447 -0.772829577327 --0.120474001393 -0.772814452648 --0.103215776384 -0.772801607847 --0.0859580989927 -0.772791147232 --0.0687005463988 -0.772782996297 --0.0514434231445 -0.772777184844 --0.034186297562 -0.772773742676 --0.0169294788502 -0.772772625089 -0.000327464193107 -0.77277380228 -0.0175842251629 -0.772777408361 -0.0348412347957 -0.772783368826 -0.0520981838927 -0.772791624069 -0.0693555017933 -0.772802218795 -0.0866128839552 -0.772815153003 -0.103870760649 -0.772830411792 -0.121128825471 -0.77284796536 -0.13838750869 -0.772867918014 -0.155646495521 -0.772877886891 -0.174859546125 -0.772866874933 -0.194074228406 -0.77284707129 -0.211333364249 -0.772829577327 -0.228591840715 -0.772814437747 -0.245850075036 -0.772801592946 -0.26310775429 -0.772791102528 -0.280365303159 -0.772782966495 -0.297622434795 -0.772777199745 -0.314879566431 -0.772773712873 -0.332136385143 -0.772772595287 -0.349393315613 -0.77277380228 -0.36665007472 -0.772777408361 -0.383907094598 -0.772783339023 -0.401164039969 -0.772791594267 -0.41842135787 -0.772802203894 -0.435678742826 -0.772815138102 -0.45293661207 -0.772830411792 -0.470194675028 -0.77284796536 -0.487453348935 -0.772867918014 -0.504712335765 -0.772877886891 -0.52392539382 -0.772866874933 -0.54314006865 -0.77284707129 -0.560399204493 -0.772829577327 -0.577657699585 -0.772814437747 -0.594915926457 -0.772801592946 -0.612173601985 -0.772791102528 -0.629431158305 -0.772782966495 -0.646688252687 -0.772777199745 -0.663945361972 -0.772773712873 -0.681202203035 -0.772772625089 -0.698459163308 -0.772773861885 -0.715715914965 -0.772777408361 -0.732972919941 -0.772783309221 -0.750229880214 -0.772791594267 -0.767487198115 -0.772802203894 -0.78474457562 -0.772815108299 -0.802002459764 -0.772830381989 -0.819260537624 -0.772847995162 -0.836519211531 -0.772867977619 -0.853778198362 -0.772877916694 -0.872991248965 -0.772866874933 -0.892205923796 -0.77284707129 -0.909465074539 -0.772829577327 -0.92672355473 -0.772814437747 -0.943981796503 -0.772801607847 -0.961239442229 -0.772791132331 -0.978496983647 -0.772782996297 -0.995754122734 -0.772777214646 -1.01301124692 -0.772773742676 -1.03026807308 -0.772772625089 -1.04752498865 -0.772773832083 -1.06478175521 -0.772777408361 -1.08203878999 -0.772783309221 -1.09929573536 -0.772791594267 -1.11655303836 -0.772802203894 -1.13381040096 -0.772815138102 -1.15106827021 -0.772830411792 -1.16832634806 -0.77284796536 -1.18558505177 -0.772867918014 -1.20284405351 -0.772877886891 -1.22205710411 -0.772866874933 -1.24127176404 -0.77284707129 -1.25853091478 -0.772829577327 -1.27578943968 -0.772814452648 -1.29304766655 -0.772801607847 -1.31030532718 -0.772791117429 -1.3275628686 -0.772782951593 -1.34481996298 -0.772777169943 -1.36207708716 -0.772773712873 -1.37933394313 -0.772772595287 -1.3965908885 -0.77277380228 -1.41384762526 -0.772777378559 -1.43110463023 -0.772783309221 -1.4483615756 -0.772791564465 -1.46561890841 -0.772802174091 -1.48287630081 -0.772815138102 -1.50013417005 -0.772830411792 -1.51739221811 -0.772847995162 -1.53465089202 -0.772867977619 -1.55190989375 -0.772877857089 -1.57112294435 -0.772866815328 -1.59033763409 -0.77284707129 -1.60759678483 -0.772829577327 -1.62485525012 -0.772814437747 -1.64211344719 -0.772801592946 -1.65937113762 -0.772791102528 -1.67662870884 -0.772782936692 -1.69388583302 -0.772777169943 -1.71114295721 -0.772773712873 -1.72839975357 -0.772772595287 -1.74565672874 -0.77277380228 -1.7629134953 -0.772777378559 -1.78017047048 -0.772783309221 -1.79742744565 -0.772791594267 -1.81468477845 -0.772802203894 -1.83194214106 -0.772815138102 -1.8492000103 -0.772830411792 -1.86645805836 -0.77284796536 -1.88371673226 -0.772867918014 -1.900975734 -0.772877886891 -1.9201887846 -0.772866874933 -1.93940347433 -0.77284707129 -1.95666262507 -0.772829577327 -1.97392109036 -0.772814452648 -1.99117931724 -0.772801622748 -2.00843697787 -0.772791132331 -2.02569454909 -0.772782981396 -2.04295170307 -0.772777199745 -2.06020879745 -0.772773712873 -2.07746559381 -0.772772595287 -2.09472256899 -0.772773832083 -2.11197936535 -0.772777408361 -2.12923634052 -0.772783309221 -2.1464933157 -0.772791564465 -2.1637506485 -0.772802174091 -2.1810079813 -0.772815138102 -2.19826585054 -0.772830441594 -2.2155238986 -0.772848024965 -2.23278254271 -0.772867977619 -2.25004154444 -0.772877916694 -2.26925462484 -0.772866874933 -2.28846931457 -0.77284707129 -2.30572849512 -0.772829577327 -2.32298696041 -0.772814437747 -2.34024512768 -0.772801592946 -2.35750281811 -0.772791102528 -2.37476038933 -0.772782951594 -2.39201748371 -0.772777184844 -2.40927457809 -0.772773712873 -2.42653143406 -0.772772595287 -2.44378840923 -0.772773832083 -2.46104514599 -0.772777408361 -2.47830218077 -0.772783339023 -2.49555915594 -0.772791624069 -2.51281648874 -0.772802203894 -2.53007382154 -0.772815138102 -2.54733163119 -0.772830411792 -2.56458973885 -0.772847995162 -2.58184850216 -0.772867947817 -2.59910750389 -0.772877857089 -2.61832052469 -0.772866845131 -2.63753515482 -0.77284707129 -2.65479427576 -0.772829577327 -2.67205280065 -0.772814452648 -2.68931102753 -0.772801607847 -2.70656871796 -0.772791117429 -2.72382628918 -0.772782981396 -2.74108338356 -0.772777199745 -2.75834053755 -0.772773742676 -2.77559733391 -0.772772625089 -2.79285424948 -0.772773832083 -2.81011104584 -0.772777408361 -2.82736802101 -0.772783309221 -2.84462493658 -0.772791594267 -2.86188226938 -0.772802203894 -2.87913972139 -0.772815138102 -2.89639765024 -0.772830411792 -2.9136556983 -0.77284796536 -2.9309143424 -0.772867947817 -2.94817328453 -0.772877886891 -2.96738630533 -0.772866845131 -2.98660105467 -0.77284707129 -3.00386017561 -0.772829577327 -3.0211185813 -0.772814452648 -3.03837686777 -0.772801607847 -3.0556345582 -0.772791147232 -3.07289212942 -0.772782996297 -3.09014928341 -0.772777184844 -3.10740637779 -0.772773742676 -3.12466317415 -0.772772625089 --3.14126518567 -0.77277380228 --3.12400841713 -0.772777408361 --3.10675144195 -0.772783368826 --3.08949452639 -0.772791624069 --3.07223719358 -0.772802218795 --3.05497974157 -0.772815153003 --3.03772181273 -0.772830411792 --3.02046376467 -0.77284796536 --3.00320512056 -0.772867918014 --2.98594617843 -0.772877886891 --2.96673315763 -0.772866874933 --2.9475184083 -0.77284707129 --2.93025928736 -0.772829577327 --2.91300088167 -0.772814437747 --2.8957425952 -0.772801592946 --2.87848490477 -0.772791102528 --2.86122733354 -0.772782966495 --2.84397017956 -0.772777199745 --2.82671308518 -0.772773712873 --2.80945628882 -0.772772595287 --2.79219937325 -0.77277380228 --2.77494257689 -0.772777408361 --2.75768554211 -0.772783339023 --2.74042862654 -0.772791594267 --2.72317129374 -0.772802203894 --2.70591390133 -0.772815138102 --2.68865603208 -0.772830411792 --2.67139798403 -0.77284796536 --2.65413933992 -0.772867918014 --2.63688033819 -0.772877886891 --2.61766725778 -0.772866874933 --2.59845256805 -0.77284707129 --2.58119338751 -0.772829577327 --2.56393486262 -0.772814437747 --2.54667669535 -0.772801592946 --2.52941906452 -0.772791102528 --2.5121614933 -0.772782966495 --2.49490439892 -0.772777199745 --2.47764730454 -0.772773712873 --2.46039044857 -0.772772625089 --2.4431334734 -0.772773861885 --2.42587673664 -0.772777408361 --2.40861970186 -0.772783309221 --2.39136272669 -0.772791594267 --2.37410539389 -0.772802203894 --2.35684806109 -0.772815108299 --2.33959025145 -0.772830381989 --2.32233214378 -0.772847995162 --2.30507344008 -0.772867977619 --2.28781443835 -0.772877916694 --2.26860135794 -0.772866874933 --2.24938672781 -0.77284707129 --2.23212760687 -0.772829577327 --2.21486908198 -0.772814437747 --2.1976107955 -0.772801607847 --2.18035316467 -0.772791132331 --2.16309571266 -0.772782996297 --2.14583855867 -0.772777214646 --2.12858140469 -0.772773742676 --2.11132460833 -0.772772625089 --2.09406763315 -0.772773832083 --2.0768108964 -0.772777408361 --2.05955392122 -0.772783309221 --2.04229694605 -0.772791594267 --2.02503961325 -0.772802203894 --2.00778222084 -0.772815138102 --1.99052435159 -0.772830411792 --1.97326627373 -0.77284796536 --1.95600757003 -0.772867918014 --1.9387485683 -0.772877886891 --1.91953554749 -0.772866874933 --1.90032088756 -0.77284707129 --1.88306173682 -0.772829577327 --1.86580327153 -0.772814452648 --1.84854507446 -0.772801607847 --1.83128738403 -0.772791117429 --1.81402981281 -0.772782951593 --1.79677268863 -0.772777169943 --1.77951553464 -0.772773712873 --1.76225873828 -0.772772595287 --1.74500179291 -0.77277380228 --1.72774499655 -0.772777378559 --1.71048802137 -0.772783309221 --1.693231076 -0.772791564465 --1.6759737432 -0.772802174091 --1.6587163508 -0.772815138102 --1.64145845175 -0.772830411792 --1.62420040369 -0.772847995162 --1.60694175959 -0.772867977619 --1.58968278766 -0.772877857089 --1.57046973705 -0.772866815328 --1.55125501752 -0.77284707129 --1.53399586677 -0.772829577327 --1.51673740148 -0.772814437747 --1.49947917461 -0.772801592946 --1.48222151399 -0.772791102528 --1.46496394277 -0.772782936692 --1.44770681858 -0.772777169943 --1.4304496944 -0.772773712873 --1.41319286823 -0.772772595287 --1.39593595266 -0.77277380228 --1.3786791861 -0.772777378559 --1.36142215133 -0.772783309221 --1.34416520595 -0.772791594267 --1.32690790295 -0.772802203894 --1.30965054035 -0.772815138102 --1.29239267111 -0.772830411792 --1.27513459325 -0.77284796536 --1.25787588954 -0.772867918014 --1.24061688781 -0.772877886891 --1.2214038372 -0.772866874933 --1.20218917727 -0.77284707129 --1.18493005633 -0.772829577327 --1.16767156124 -0.772814452648 --1.15041330457 -0.772801622748 --1.13315564394 -0.772791132331 --1.11589813233 -0.772782981396 --1.09864100814 -0.772777199745 --1.08138385415 -0.772773712873 --1.06412702799 -0.772772595287 --1.04687008261 -0.772773832083 --1.02961334586 -0.772777408361 --1.01235634089 -0.772783309221 --0.995099365711 -0.772791564465 --0.97784204781 -0.772802174091 --0.960584655404 -0.772815138102 --0.943326771259 -0.772830441594 --0.926068708301 -0.772848024965 --0.908810049296 -0.772867977619 --0.891551077366 -0.772877916694 --0.872338026762 -0.772866874933 --0.85312333703 -0.77284707129 --0.835864171385 -0.772829577327 --0.818605706096 -0.772814437747 --0.801347494125 -0.772801592946 --0.784089803696 -0.772791102528 --0.766832232475 -0.772782951594 --0.749575123191 -0.772777184844 --0.732318013906 -0.772773712873 --0.715061187744 -0.772772595287 --0.697804257274 -0.772773832083 --0.680547490716 -0.772777408361 --0.663290455937 -0.772783339023 --0.646033510566 -0.772791624069 --0.628776207566 -0.772802203894 --0.611518830061 -0.772815138102 --0.594260945916 -0.772830411792 --0.577002882958 -0.772847995162 --0.559744209051 -0.772867947817 --0.542485207319 -0.772877857089 --0.523272141814 -0.772866845131 --0.504057459533 -0.77284707129 --0.486798331142 -0.772829577327 --0.469539858401 -0.772814452648 --0.45228163898 -0.772801607847 --0.435023963451 -0.772791117429 --0.417766399681 -0.772782981396 --0.400509268046 -0.772777199745 --0.38325214386 -0.772773742676 --0.365995325148 -0.772772625089 --0.348738394678 -0.772773832083 --0.33148163557 -0.772777408361 --0.314224608242 -0.772783309221 --0.296967662871 -0.772791594267 --0.279710352421 -0.772802203894 --0.262452960015 -0.772815138102 --0.24519508332 -0.772830411792 --0.227937027812 -0.77284796536 --0.210678346455 -0.772867947817 --0.19341936335 -0.772877886891 --0.174206312746 -0.792547866702 --0.154985539615 -0.792527735233 --0.137726370245 -0.792509928346 --0.120467867703 -0.792494550348 --0.103209614754 -0.79248149693 --0.0859519094229 -0.792470827698 --0.0686943344772 -0.792462572455 --0.0514371879399 -0.792456686497 --0.034180036746 -0.792453154922 --0.0169231905602 -0.792452037335 -0.000333779025825 -0.792453244328 -0.0175905656069 -0.792456910014 -0.0348476013168 -0.792462930083 -0.0521045764908 -0.792471289634 -0.0693619186059 -0.79248213768 -0.0866193305701 -0.792495310307 -0.103877235204 -0.792510792613 -0.121135320514 -0.792528688908 -0.138394027948 -0.79254899919 -0.155653048307 -0.792559087276 -0.174865867943 -0.792547866702 -0.194080311805 -0.792527735233 -0.21133947745 -0.792509928346 -0.228597979993 -0.792494520545 -0.245856236666 -0.792481467128 -0.263113938272 -0.792470812797 -0.280371509493 -0.79246251285 -0.29762866348 -0.792456641793 -0.314885817468 -0.792453125119 -0.332142665982 -0.792452007532 -0.349399633705 -0.792453244328 -0.366656422615 -0.792456895113 -0.383913457394 -0.792462915182 -0.401170425117 -0.792471289634 -0.41842777282 -0.792482078075 -0.435685180128 -0.792495250702 -0.452943071723 -0.792510792613 -0.470201157033 -0.792528688908 -0.487459868193 -0.792548969388 -0.504718877375 -0.792559057474 -0.523931711912 -0.792547866702 -0.543146178126 -0.792527735233 -0.56040532887 -0.792509928346 -0.577663823962 -0.792494550348 -0.594922080636 -0.79248149693 -0.612179785967 -0.792470812797 -0.629437357188 -0.792462542653 -0.646694496274 -0.792456671596 -0.663951650262 -0.792453125119 -0.681208506226 -0.792452037334 -0.6984654814 -0.792453274131 -0.715722262859 -0.792456865311 -0.732979297638 -0.79246288538 -0.750236287713 -0.792471289634 -0.767493620515 -0.792482078075 -0.784751012921 -0.7924952209 -0.802008911967 -0.792510762811 -0.819267019629 -0.79252871871 -0.836525723338 -0.792549028993 -0.853784739971 -0.792559087276 -0.872997567058 -0.792547866702 -0.892212018371 -0.792527735233 -0.909471198916 -0.792509928346 -0.926729679107 -0.792494550348 -0.94398792088 -0.79248149693 -0.961245626211 -0.792470827698 -0.978503212333 -0.792462542653 -0.995760336516 -0.792456656694 -1.01301750541 -0.792453154922 -1.03027439117 -0.792452007532 -1.04753133655 -0.792453244328 -1.0647881031 -0.792456910014 -1.08204513788 -0.792462900281 -1.09930211305 -0.792471289634 -1.11655944586 -0.792482078075 -1.13381683826 -0.792495250702 -1.15107473731 -0.792510822415 -1.16833284497 -0.79252871871 -1.18559157848 -0.79254899919 -1.20285061002 -0.792559087276 -1.2220634222 -0.792547866702 -1.24127784372 -0.792527735233 -1.25853702426 -0.792509928346 -1.27579554915 -0.792494550348 -1.29305380583 -0.79248149693 -1.31031152606 -0.792470827698 -1.32756909728 -0.792462527751 -1.34482622146 -0.792456641793 -1.36208334565 -0.792453125119 -1.37934020161 -0.79245197773 -1.39659717679 -0.792453244328 -1.41385394335 -0.792456895113 -1.43111100793 -0.792462915182 -1.4483679831 -0.792471319437 -1.46562531591 -0.792482107878 -1.48288273811 -0.792495280504 -1.50014063716 -0.792510792613 -1.51739871502 -0.792528688908 -1.53465741873 -0.79254899919 -1.55191642046 -0.792559087276 -1.57112923265 -0.792547866702 -1.59034371376 -0.792527735233 -1.60760286451 -0.792509928346 -1.6248613596 -0.792494520545 -1.64211961627 -0.792481467128 -1.6593773067 -0.792470812797 -1.67663487792 -0.79246251285 -1.69389206171 -0.792456641793 -1.7111492455 -0.792453125119 -1.72840607166 -0.792452007532 -1.74566304684 -0.792453274131 -1.7629198432 -0.792456895113 -1.78017684817 -0.79246288538 -1.79743382335 -0.792471289634 -1.81469118595 -0.792482078075 -1.83194857836 -0.792495250702 -1.8492064476 -0.792510792613 -1.86646455526 -0.792528688908 -1.88372328878 -0.792548969388 -1.90098229051 -0.792559057474 -1.92019510269 -0.792547866702 -1.93940955401 -0.792527735233 -1.95666873455 -0.792509928346 -1.97392725944 -0.792494550348 -1.99118551612 -0.79248149693 -2.00844317675 -0.792470827698 -2.02570074797 -0.792462527751 -2.04295796156 -0.792456641793 -2.06021511555 -0.792453125119 -2.07747191191 -0.79245197773 -2.09472888708 -0.792453244328 -2.11198568344 -0.792456895113 -2.12924265862 -0.792462915182 -2.14649963379 -0.792471349239 -2.16375702619 -0.792482107878 -2.1810144186 -0.792495250702 -2.19827228785 -0.792510822415 -2.21553039551 -0.79252871871 -2.23278909922 -0.79254899919 -2.25004810095 -0.792559087276 -2.26926094294 -0.792547866702 -2.28847539425 -0.792527735233 -2.3057345748 -0.792509928346 -2.32299309969 -0.792494550348 -2.34025132656 -0.79248149693 -2.35750901699 -0.792470812797 -2.37476664782 -0.792462557554 -2.3920238018 -0.792456686497 -2.40928089619 -0.792453125119 -2.42653775215 -0.792452007532 -2.44379472733 -0.792453244328 -2.46105146408 -0.792456865311 -2.47830855846 -0.79246288538 -2.49556559324 -0.792471289634 -2.51282292605 -0.792482078075 -2.53008025884 -0.792495250702 -2.54733812809 -0.792510792613 -2.56459629536 -0.79252871871 -2.58185499906 -0.792549028993 -2.5991140008 -0.792559057474 -2.61832684279 -0.7925478369 -2.63754123449 -0.792527735233 -2.65480041504 -0.792509928346 -2.67205893993 -0.792494550348 -2.6893171668 -0.79248149693 -2.70657491684 -0.792470827698 -2.72383254766 -0.792462527751 -2.74108964205 -0.792456641793 -2.75834673643 -0.792453154922 -2.7756035924 -0.792452037335 -2.79286056757 -0.792453244328 -2.81011736393 -0.792456865311 -2.82737439871 -0.79246288538 -2.84463137388 -0.792471289634 -2.86188870668 -0.792482078075 -2.87914615869 -0.792495250702 -2.89640408754 -0.792510822415 -2.9136621356 -0.79252871871 -2.93092083931 -0.79254899919 -2.94817984104 -0.792559087276 -2.96739262343 -0.792547866702 -2.98660713434 -0.792527735233 -3.00386631489 -0.792509928346 -3.02112478018 -0.792494550348 -3.03838306665 -0.79248149693 -3.05564075708 -0.792470827698 -3.0728983283 -0.792462572455 -3.09015548229 -0.792456686497 -3.10741263628 -0.792453154922 -3.12466949224 -0.792452037335 --3.14125886758 -0.792453244328 --3.12400209904 -0.792456910014 --3.10674506426 -0.792462930083 --3.08948808909 -0.792471289634 --3.07223075628 -0.79248213768 --3.05497330427 -0.792495310307 --3.03771537542 -0.792510792613 --3.02045732736 -0.792528688908 --3.00319862365 -0.79254899919 --2.98593962193 -0.792559087276 --2.96672683954 -0.792547866702 --2.94751232862 -0.792527735233 --2.93025314808 -0.792509928346 --2.91299468279 -0.792494520545 --2.89573639631 -0.792481467128 --2.87847870588 -0.792470812797 --2.86122113466 -0.79246251285 --2.84396392107 -0.792456641793 --2.82670676708 -0.792453125119 --2.80944997072 -0.792452007532 --2.79219299555 -0.792453244328 --2.77493619919 -0.792456895113 --2.75767922401 -0.792462915182 --2.74042230844 -0.792471289634 --2.72316491604 -0.792482078075 --2.70590746403 -0.792495250702 --2.68864959478 -0.792510792613 --2.67139154672 -0.792528688908 --2.65413284301 -0.792548969388 --2.63687378168 -0.792559057474 --2.61766093969 -0.792547866702 --2.59844648838 -0.792527735233 --2.58118730783 -0.792509928346 --2.56392878294 -0.792494550348 --2.54667055607 -0.79248149693 --2.52941286564 -0.792470812797 --2.51215529442 -0.792462542653 --2.49489814043 -0.792456671596 --2.47764098644 -0.792453125119 --2.46038413048 -0.792452037334 --2.4431271553 -0.792453274131 --2.42587041855 -0.792456865311 --2.40861332416 -0.79246288538 --2.39135628939 -0.792471289634 --2.37409895658 -0.792482078075 --2.35684162378 -0.7924952209 --2.33958375454 -0.792510762811 --2.32232558727 -0.79252871871 --2.30506688356 -0.792549028993 --2.28780788183 -0.792559087276 --2.26859503984 -0.792547866702 --2.24938064813 -0.792527735233 --2.23212152719 -0.792509928346 --2.2148630023 -0.792494550348 --2.19760471583 -0.79248149693 --2.18034696579 -0.792470827698 --2.16308939457 -0.792462542653 --2.14583230019 -0.792456656694 --2.1285751462 -0.792453154922 --2.11131829023 -0.792452007532 --2.09406131506 -0.792453244328 --2.0768045187 -0.792456910014 --2.05954748392 -0.792462900281 --2.04229050875 -0.792471289634 --2.02503317594 -0.792482078075 --2.00777578354 -0.792495250702 --1.99051788449 -0.792510822415 --1.97325977683 -0.79252871871 --1.95600107312 -0.79254899919 --1.93874204159 -0.792559087276 --1.9195291996 -0.792547866702 --1.90031477809 -0.792527735233 --1.88305562735 -0.792509928346 --1.86579713225 -0.792494550348 --1.84853890538 -0.79248149693 --1.83128121495 -0.792470827698 --1.81402361393 -0.792462527751 --1.79676643014 -0.792456641793 --1.77950927615 -0.792453125119 --1.76225244999 -0.79245197773 --1.74499547482 -0.792453244328 --1.72773867846 -0.792456895113 --1.71048167348 -0.792462915182 --1.6932246983 -0.792471319437 --1.6759673357 -0.792482107878 --1.65870991349 -0.792495280504 --1.64145198464 -0.792510792613 --1.62419390678 -0.792528688908 --1.60693523288 -0.79254899919 --1.58967623115 -0.792559087276 --1.57046341896 -0.792547866702 --1.55124893785 -0.792527735233 --1.5339897573 -0.792509928346 --1.51673126221 -0.792494520545 --1.49947300554 -0.792481467128 --1.48221531511 -0.792470812797 --1.46495774389 -0.79246251285 --1.4477006197 -0.792456641793 --1.43044343591 -0.792453125119 --1.41318657994 -0.792452007532 --1.39592963457 -0.792453274131 --1.37867280841 -0.792456895113 --1.36141577363 -0.79246288538 --1.34415882826 -0.792471289634 --1.32690149546 -0.792482078075 --1.30964410305 -0.792495250702 --1.29238620401 -0.792510792613 --1.27512809635 -0.792528688908 --1.25786939263 -0.792548969388 --1.2406103611 -0.792559057474 --1.22139751911 -0.792547866702 --1.2021830976 -0.792527735233 --1.18492394686 -0.792509928346 --1.16766542196 -0.792494550348 --1.15040716529 -0.79248149693 --1.13314947486 -0.792470827698 --1.11589190364 -0.792462527751 --1.09863474965 -0.792456641793 --1.08137759566 -0.792453125119 --1.0641207397 -0.79245197773 --1.04686376452 -0.792453244328 --1.02960699796 -0.792456895113 --1.01234993338 -0.792462915182 --0.995092943311 -0.792471349239 --0.97783562541 -0.792482107878 --0.960578218103 -0.792495250702 --0.943320319057 -0.792510822415 --0.926062226295 -0.79252871871 --0.908803522587 -0.79254899919 --0.891544505954 -0.792559087276 --0.872331678867 -0.792547866702 --0.853117242456 -0.792527735233 --0.835858076811 -0.792509928346 --0.818599566817 -0.792494550348 --0.801341310144 -0.79248149693 --0.784083604813 -0.792470812797 --0.76682600379 -0.792462557554 --0.749568864703 -0.792456686497 --0.732311755419 -0.792453125119 --0.715054914355 -0.792452007532 --0.697797954082 -0.792453244328 --0.680541157722 -0.792456865311 --0.66328407824 -0.79246288538 --0.646027103067 -0.792471289634 --0.628769770265 -0.792482078075 --0.611512362957 -0.792495250702 --0.594254463911 -0.792510792613 --0.576996386052 -0.79252871871 --0.559737697244 -0.792549028993 --0.542478665709 -0.792559057474 --0.523265823722 -0.7925478369 --0.504051372409 -0.792527735233 --0.486792214215 -0.792509928346 --0.469533719122 -0.792494550348 --0.45227547735 -0.79248149693 --0.435017779469 -0.792470827698 --0.417760193348 -0.792462527751 --0.40050303936 -0.792456641793 --0.383245892823 -0.792453154922 --0.365989036858 -0.792452037335 --0.348732069135 -0.792453244328 --0.331475295126 -0.792456865311 --0.314218245447 -0.79246288538 --0.296961262822 -0.792471289634 --0.27970393002 -0.792482078075 --0.262446515262 -0.792495250702 --0.245188612491 -0.792510822415 --0.227930534631 -0.79252871871 --0.210671827197 -0.79254899919 --0.193412814289 -0.792559087276 --0.174199994654 -0.812275022268 --0.154979597777 -0.812254533172 --0.137720398605 -0.81223641336 --0.120461871847 -0.812220796943 --0.103203596547 -0.81220754981 --0.0859458707273 -0.812196701765 --0.0686882687733 -0.81218829751 --0.0514310933649 -0.812182307244 --0.034173917491 -0.812178701162 --0.0169170461595 -0.812177583575 -0.000339948805047 -0.812178820371 -0.0175967605319 -0.812182486057 -0.0348538197577 -0.812188625336 -0.0521108210087 -0.812197178602 -0.0693681910634 -0.812208175659 -0.0866256263107 -0.812221556902 -0.103883558884 -0.812237337232 -0.121141668409 -0.812255561352 -0.138400398195 -0.812276169658 -0.155659448355 -0.812286376953 -0.174872040748 -0.812274992466 -0.194086253643 -0.812254548073 -0.21134544909 -0.812236428261 -0.22860397771 -0.812220737338 -0.245862249285 -0.812207460404 -0.263119973242 -0.81219664216 -0.280377574265 -0.812188208103 -0.297634758055 -0.812182247639 -0.314891934395 -0.812178701162 -0.33214879036 -0.812177583575 -0.349405780435 -0.812178820371 -0.366662606597 -0.812182500958 -0.383919671178 -0.812188640237 -0.401176668703 -0.812197178602 -0.418434046209 -0.812208145857 -0.435691490769 -0.812221497298 -0.452949412167 -0.812237307429 -0.470207504928 -0.812255561352 -0.487466238439 -0.812276169658 -0.504725284874 -0.812286376953 -0.523937895894 -0.812274992466 -0.543152138591 -0.812254548073 -0.560411304236 -0.812236428261 -0.577669814229 -0.81222076714 -0.594928100705 -0.812207520008 -0.612185820937 -0.812196671963 -0.62944342196 -0.812188267708 -0.646700590849 -0.812182307244 -0.663957774639 -0.812178701162 -0.681214675307 -0.812177583575 -0.698471650481 -0.812178820371 -0.715728446841 -0.812182500958 -0.732985526323 -0.812188640237 -0.7502425313 -0.812197178602 -0.767499879003 -0.812208130956 -0.784757301211 -0.812221482396 -0.802015244961 -0.812237307429 -0.819273382425 -0.812255561352 -0.836532101035 -0.812276169658 -0.853791132569 -0.812286376953 -0.873003721237 -0.812274992466 -0.892217949033 -0.812254548073 -0.90947714448 -0.812236428261 -0.926735654473 -0.81222076714 -0.943993926048 -0.812207490206 -0.961251676083 -0.812196671963 -0.978509306908 -0.812188267707 -0.995766475796 -0.812182277441 -1.01302364469 -0.812178701162 -1.03028053045 -0.812177553773 -1.04753753543 -0.812178820371 -1.06479430199 -0.812182545662 -1.08205133676 -0.812188655138 -1.09930837154 -0.812197178602 -1.11656573415 -0.812208130956 -1.13382315636 -0.812221482396 -1.1510810852 -0.812237337232 -1.16833919286 -0.812255591154 -1.18559795618 -0.812276169658 -1.20285701752 -0.812286376953 -1.22206959128 -0.812274992466 -1.24128377438 -0.812254548073 -1.25854298473 -0.812236428261 -1.27580153942 -0.81222076714 -1.2930598259 -0.812207520008 -1.31031754613 -0.812196671963 -1.32757511735 -0.812188237905 -1.34483230114 -0.812182277441 -1.36208948493 -0.812178701162 -1.3793463409 -0.812177553773 -1.39660331607 -0.812178820371 -1.41386014223 -0.812182530761 -1.43111723661 -0.81218867004 -1.44837421179 -0.812197208405 -1.46563157439 -0.812208160758 -1.4828890264 -0.812221512199 -1.50014695525 -0.812237307429 -1.51740506291 -0.812255531549 -1.53466379643 -0.812276124954 -1.55192282796 -0.812286391854 -1.57113540173 -0.812274992466 -1.59034964443 -0.812254503369 -1.60760882497 -0.81223641336 -1.62486734987 -0.812220737338 -1.64212563634 -0.812207490206 -1.65938335657 -0.812196671963 -1.67664095759 -0.812188208103 -1.69389814138 -0.812182247639 -1.71115535498 -0.812178701162 -1.72841224074 -0.812177583575 -1.74566921592 -0.812178879976 -1.76292601228 -0.812182560563 -1.78018307686 -0.812188640237 -1.79744008184 -0.812197178602 -1.81469744444 -0.812208130956 -1.83195486665 -0.812221482396 -1.84921276569 -0.812237307429 -1.86647090316 -0.812255531549 -1.88372966647 -0.812276139855 -1.90098869801 -0.812286376953 -1.92020130158 -0.812274992466 -1.93941554428 -0.812254548073 -1.95667472482 -0.812236428261 -1.97393324971 -0.81222076714 -1.99119153619 -0.812207490206 -2.00844922662 -0.81219664216 -2.02570682764 -0.812188237905 -2.04296404123 -0.812182277441 -2.06022119522 -0.812178701162 -2.07747805119 -0.812177553773 -2.09473508596 -0.812178820371 -2.11199188232 -0.812182530761 -2.1292489171 -0.81218867004 -2.14650589228 -0.812197238207 -2.16376328468 -0.812208160758 -2.18102073669 -0.812221482396 -2.19827860594 -0.812237307429 -2.2155367732 -0.812255531549 -2.23279553652 -0.812276139855 -2.25005453825 -0.812286376953 -2.26926714182 -0.812274962663 -2.28848135471 -0.81225451827 -2.30574053526 -0.812236428261 -2.32299906015 -0.81222076714 -2.34025734663 -0.812207490206 -2.35751509666 -0.81219664216 -2.37477272749 -0.812188267708 -2.39202988148 -0.812182307244 -2.40928703547 -0.812178701162 -2.42654389143 -0.812177583575 -2.4438008666 -0.812178820371 -2.46105766296 -0.812182500958 -2.47831475735 -0.812188640237 -2.49557179213 -0.812197178602 -2.51282912493 -0.812208145857 -2.53008651733 -0.812221497298 -2.54734450579 -0.812237277627 -2.56460267305 -0.812255531549 -2.58186131716 -0.812276154756 -2.59912037849 -0.812286362052 -2.61833298207 -0.812274992466 -2.63754713535 -0.812254548073 -2.65480637551 -0.812236443162 -2.6720649004 -0.812220782042 -2.68932312727 -0.812207490206 -2.70658093691 -0.812196671963 -2.72383856773 -0.812188237905 -2.74109572172 -0.812182247639 -2.75835287571 -0.812178701162 -2.77560973168 -0.812177583575 -2.79286670685 -0.812178820371 -2.81012356281 -0.812182500958 -2.8273806572 -0.812188640237 -2.84463763237 -0.812197178602 -2.86189502477 -0.812208130956 -2.87915247679 -0.812221482396 -2.89641040564 -0.812237337232 -2.91366845369 -0.812255591154 -2.9309271574 -0.812276169658 -2.94818621874 -0.812286406755 -2.96739882231 -0.812275022268 -2.9866130948 -0.812254533172 -3.00387227535 -0.81223641336 -3.02113080025 -0.812220796943 -3.03838908672 -0.81220754981 -3.05564677715 -0.812196701765 -3.07290440798 -0.81218829751 -3.09016156197 -0.812182307244 -3.10741871595 -0.812178701162 -3.12467563152 -0.812177583575 --3.1412527283 -0.812178820371 --3.12399590015 -0.812182486057 --3.10673880577 -0.812188625336 --3.0894818306 -0.812197178602 --3.07222443819 -0.812208175659 --3.05496698618 -0.812221556902 --3.03770905733 -0.812237337232 --3.02045100927 -0.812255561352 --3.00319230557 -0.812276169658 --2.98593324423 -0.812286376953 --2.96672064066 -0.812274992466 --2.94750636816 -0.812254548073 --2.93024718761 -0.812236428261 --2.91298866272 -0.812220737338 --2.89573037624 -0.812207460404 --2.87847268581 -0.81219664216 --2.86121505499 -0.812188208103 --2.8439578414 -0.812182247639 --2.82670068741 -0.812178701162 --2.80944383144 -0.812177583575 --2.79218679667 -0.812178820371 --2.77493000031 -0.812182500958 --2.75767302513 -0.812188640237 --2.74041604996 -0.812197178602 --2.72315859794 -0.812208145857 --2.70590114593 -0.812221497298 --2.68864327669 -0.812237307429 --2.67138516903 -0.812255561352 --2.65412640572 -0.812276169658 --2.63686734438 -0.812286376953 --2.61765474081 -0.812274992466 --2.59844052791 -0.812254548073 --2.58118134737 -0.812236428261 --2.56392282247 -0.81222076714 --2.546664536 -0.812207520008 --2.52940684557 -0.812196671963 --2.51214927435 -0.812188267708 --2.49489206076 -0.812182307244 --2.47763484716 -0.812178701162 --2.46037793159 -0.812177583575 --2.44312095642 -0.812178820371 --2.42586421967 -0.812182500958 --2.40860712528 -0.812188640237 --2.3913500905 -0.812197178602 --2.3740927577 -0.812208130956 --2.3568353653 -0.812221482396 --2.33957743645 -0.812237307429 --2.32231926918 -0.812255561352 --2.30506056547 -0.812276169658 --2.28780156374 -0.812286376953 --2.26858896017 -0.812274992466 --2.24937474727 -0.812254548073 --2.23211556673 -0.812236428261 --2.21485704183 -0.81222076714 --2.19759875536 -0.812207490206 --2.18034094572 -0.812196671963 --2.1630833149 -0.812188267707 --2.14582616091 -0.812182277441 --2.12856900692 -0.812178701162 --2.11131215095 -0.812177553773 --2.09405517578 -0.812178820371 --2.07679837942 -0.812182545662 --2.05954128504 -0.812188655138 --2.04228425026 -0.812197178602 --2.02502685785 -0.812208130956 --2.00776946545 -0.812221482396 --1.9905115664 -0.812237337232 --1.97325342894 -0.812255591154 --1.95599469543 -0.812276169658 --1.93873566389 -0.812286376953 --1.91952306032 -0.812274992466 --1.90030884742 -0.812254548073 --1.88304963708 -0.812236428261 --1.86579111219 -0.81222076714 --1.84853285551 -0.812207520008 --1.83127513528 -0.812196671963 --1.81401753426 -0.812188237905 --1.79676032066 -0.812182277441 --1.77950313687 -0.812178701162 --1.76224628091 -0.812177553773 --1.74498930573 -0.812178820371 --1.72773250938 -0.812182530761 --1.71047544479 -0.81218867004 --1.69321843982 -0.812197208405 --1.67596107721 -0.812208160758 --1.6587036252 -0.812221512199 --1.64144566655 -0.812237307429 --1.62418755889 -0.812255531549 --1.60692885518 -0.812276124954 --1.58966982364 -0.812286391854 --1.57045722008 -0.812274992466 --1.55124297738 -0.812254503369 --1.53398379684 -0.81223641336 --1.51672527194 -0.812220737338 --1.49946698546 -0.812207490206 --1.48220926523 -0.812196671963 --1.46495166421 -0.812188208103 --1.44769451022 -0.812182247639 --1.43043732643 -0.812178701162 --1.41318044067 -0.812177583575 --1.39592343569 -0.812178879976 --1.37866660952 -0.812182560563 --1.36140957474 -0.812188640237 --1.34415259957 -0.812197178602 --1.32689523697 -0.812208130956 --1.30963781476 -0.812221482396 --1.29237988591 -0.812237307429 --1.27512174845 -0.812255531549 --1.25786301494 -0.812276139855 --1.2406039536 -0.812286376953 --1.22139135003 -0.812274992466 --1.20217716694 -0.812254548073 --1.18491795659 -0.812236428261 --1.1676594317 -0.81222076714 --1.15040117502 -0.812207490206 --1.13314342499 -0.81219664216 --1.11588582397 -0.812188237905 --1.09862864017 -0.812182277441 --1.08137145638 -0.812178701162 --1.06411460042 -0.812177553773 --1.04685759544 -0.812178820371 --1.02960076928 -0.812182530761 --1.0123437047 -0.81218867004 --0.995086714625 -0.812197238207 --0.977829366922 -0.812208160758 --0.960571929812 -0.812221482396 --0.943314000964 -0.812237307429 --0.926055878401 -0.812255531549 --0.90879714489 -0.812276139855 --0.891538098455 -0.812286376953 --0.872325509787 -0.812274962663 --0.853111296892 -0.81225451827 --0.835852116346 -0.812236428261 --0.81859357655 -0.81222076714 --0.801335290074 -0.812207490206 --0.784077569842 -0.81219664216 --0.766819939017 -0.812188267708 --0.749562785029 -0.812182307244 --0.732305631041 -0.812178701162 --0.715048760176 -0.812177583575 --0.6977917701 -0.812178820371 --0.680534958839 -0.812182500958 --0.663277879357 -0.812188640237 --0.646020874381 -0.812197178602 --0.628763496876 -0.812208145857 --0.611506059766 -0.812221497298 --0.594248145819 -0.812237277627 --0.576990038157 -0.812255531549 --0.559731319547 -0.812276154756 --0.54247225821 -0.812286362052 --0.523259654641 -0.812274992466 --0.504045434296 -0.812254548073 --0.486786238849 -0.812236443162 --0.469527721405 -0.812220782042 --0.45226944983 -0.812207490206 --0.435011722148 -0.812196671963 --0.417754121125 -0.812188237905 --0.400496944785 -0.812182247639 --0.383239775896 -0.812178701162 --0.365982890129 -0.812177583575 --0.348725885153 -0.812178820371 --0.331469081342 -0.812182500958 --0.314212016762 -0.812188640237 --0.296955019236 -0.812197178602 --0.279697664082 -0.812208130956 --0.262440226972 -0.812221482396 --0.245182294398 -0.812237337232 --0.227924186737 -0.812255591154 --0.210665453226 -0.812276169658 --0.193406410515 -0.812286406755 --0.174193821847 -0.829465314746 --0.154975291341 -0.829444557429 --0.137716077268 -0.829426214099 --0.120457531884 -0.829410359263 --0.103199237957 -0.829396888614 --0.0859414935112 -0.829385921359 --0.0686838729307 -0.829377397895 --0.0514266798273 -0.829371318221 --0.0341694867238 -0.829367667437 --0.0169125979301 -0.829366520047 -0.000344414496793 -0.829367801547 -0.0176012450829 -0.829371541738 -0.034858321771 -0.829377785325 -0.0521153416485 -0.829386472702 -0.0693727321923 -0.829397588968 -0.0866301842034 -0.829411134124 -0.103888133541 -0.829427137971 -0.121146265417 -0.829445585609 -0.138405010104 -0.829466462135 -0.155664071441 -0.829476848245 -0.174876503647 -0.829465314746 -0.194090560079 -0.82944457233 -0.211349770427 -0.829426199198 -0.228608310222 -0.829410329461 -0.245866604149 -0.829396888614 -0.263124346733 -0.829385891557 -0.280381962657 -0.82937733829 -0.297639161348 -0.829371288419 -0.31489636004 -0.829367667437 -0.332153245807 -0.829366520047 -0.349410250783 -0.829367801547 -0.366667084396 -0.829371541739 -0.383924171329 -0.829377755523 -0.401181191206 -0.8293864429 -0.418438583612 -0.829397588968 -0.435696057975 -0.829411104322 -0.452954001725 -0.829427108169 -0.470212109387 -0.829445585609 -0.487470850348 -0.829466462135 -0.504729904234 -0.829476848245 -0.523942351341 -0.829465314746 -0.543156430125 -0.82944457233 -0.560415625572 -0.829426199198 -0.577674165368 -0.829410329461 -0.594932466746 -0.829396918416 -0.612190201878 -0.829385921359 -0.629447832704 -0.829377368093 -0.646705016494 -0.829371318221 -0.663962200284 -0.829367667437 -0.681219115853 -0.829366534948 -0.69847612083 -0.829367816448 -0.715732946992 -0.829371571541 -0.732990026474 -0.829377785325 -0.750247031451 -0.8293864429 -0.767504408956 -0.829397574067 -0.784761860967 -0.82941108942 -0.802019834518 -0.829427108169 -0.819277986884 -0.829445615411 -0.836536735296 -0.829466491938 -0.853795781732 -0.829476848245 -0.873008191586 -0.829465314746 -0.892222240567 -0.82944457233 -0.909481450916 -0.829426199198 -0.926740005612 -0.829410329461 -0.943998306989 -0.829396888614 -0.961256057024 -0.829385921359 -0.978513687849 -0.829377397895 -0.995770901441 -0.829371318221 -1.01302808523 -0.829367667437 -1.0302849412 -0.829366520047 -1.04754194617 -0.829367801547 -1.06479877234 -0.829371541739 -1.08205583691 -0.829377755523 -1.0993128717 -0.8293864429 -1.1165702939 -0.829397544265 -1.13382774591 -0.829411059618 -1.15108567476 -0.829427108169 -1.16834381223 -0.829445615411 -1.18560257554 -0.829466491938 -1.20286163688 -0.829476848245 -1.22207406163 -0.829465314746 -1.24128809571 -0.82944457233 -1.25854730606 -0.829426229 -1.27580586076 -0.829410359264 -1.29306414723 -0.829396888614 -1.31032189727 -0.829385891557 -1.32757952809 -0.829377368093 -1.34483671188 -0.829371318221 -1.36209389568 -0.829367667437 -1.37935078144 -0.829366520047 -1.39660778642 -0.829367801547 -1.41386464238 -0.829371571541 -1.43112173676 -0.829377815127 -1.44837874174 -0.8293864429 -1.46563613415 -0.829397544265 -1.48289358616 -0.829411119222 -1.50015151501 -0.829427152872 -1.51740962267 -0.829445630312 -1.53466838598 -0.829466477036 -1.55192747712 -0.829476833344 -1.57113990188 -0.829465284944 -1.59035396576 -0.829444527626 -1.60761317611 -0.829426184297 -1.624871701 -0.829410299659 -1.64212998748 -0.829396888614 -1.65938773751 -0.829385921359 -1.67664536833 -0.82937733829 -1.69390255213 -0.829371288419 -1.71115976572 -0.829367667437 -1.72841668129 -0.829366520047 -1.74567368626 -0.829367831349 -1.76293048262 -0.829371571541 -1.78018754721 -0.829377755523 -1.79744458199 -0.8293864429 -1.81470197439 -0.829397544265 -1.8319594264 -0.829411059618 -1.84921735525 -0.829427108169 -1.86647549272 -0.829445555806 -1.88373425603 -0.829466462135 -1.90099331737 -0.829476878047 -1.92020577192 -0.829465314746 -1.93941983581 -0.82944457233 -1.95667901635 -0.829426199198 -1.97393757105 -0.829410329461 -1.99119588732 -0.829396888614 -2.00845357776 -0.829385891557 -2.02571117878 -0.829377368093 -2.04296839237 -0.829371318221 -2.06022554636 -0.829367667437 -2.07748246193 -0.829366520047 -2.09473955631 -0.829367801547 -2.11199641228 -0.829371541739 -2.12925350666 -0.829377755523 -2.14651048184 -0.8293864429 -2.16376781463 -0.829397544265 -2.18102526665 -0.829411059618 -2.1982831955 -0.829427108169 -2.21554136276 -0.829445615411 -2.23280012608 -0.829466491938 -2.25005912781 -0.829476848245 -2.26927155256 -0.829465255141 -2.28848564625 -0.829444512725 -2.3057448864 -0.829426229 -2.32300341129 -0.829410359264 -2.34026169777 -0.829396888614 -2.35751950741 -0.829385891557 -2.37477713823 -0.829377368093 -2.39203429222 -0.829371318221 -2.40929150581 -0.829367667437 -2.42654836178 -0.829366520047 -2.44380533695 -0.829367801547 -2.46106219292 -0.829371571541 -2.4783192873 -0.829377785325 -2.49557626247 -0.8293864429 -2.51283365488 -0.829397588968 -2.53009110689 -0.829411104322 -2.54734909534 -0.829427078366 -2.56460726261 -0.829445555806 -2.58186596632 -0.829466477036 -2.59912508726 -0.829476863146 -2.61833745241 -0.829465314746 -2.63755142689 -0.82944457233 -2.65481066704 -0.829426214099 -2.67206925154 -0.829410344363 -2.68932753801 -0.829396888614 -2.70658528805 -0.829385921359 -2.72384291887 -0.829377368093 -2.74110013247 -0.829371288419 -2.75835734606 -0.829367667437 -2.77561420202 -0.829366520047 -2.7928711772 -0.829367801547 -2.81012803316 -0.829371571541 -2.82738512754 -0.829377785325 -2.84464216232 -0.8293864429 -2.86189961433 -0.829397544265 -2.87915706634 -0.829411059618 -2.8964149952 -0.829427108169 -2.91367304325 -0.829445585609 -2.93093174696 -0.829466491938 -2.9481908679 -0.829476878047 -2.96740335226 -0.829465314746 -2.98661738634 -0.829444557429 -3.00387656689 -0.829426214099 -3.02113515139 -0.829410359263 -3.03839343786 -0.829396888614 -3.05565112829 -0.829385921359 -3.07290875912 -0.829377397895 -3.09016597271 -0.829371318221 -3.1074231267 -0.829367667437 -3.12468004227 -0.829366520047 --3.14124825795 -0.829367801547 --3.12399142981 -0.829371541738 --3.10673433542 -0.829377785325 --3.08947730065 -0.829386472702 --3.07221984864 -0.829397588968 --3.05496239662 -0.829411134124 --3.03770446777 -0.829427137971 --3.02044636011 -0.829445585609 --3.0031876564 -0.829466462135 --2.98592859506 -0.829476848245 --2.96671611071 -0.829465314746 --2.94750201702 -0.82944457233 --2.93024283648 -0.829426199198 --2.91298431158 -0.829410329461 --2.89572602511 -0.829396888614 --2.87846833468 -0.829385891557 --2.86121070385 -0.82937733829 --2.84395349026 -0.829371288419 --2.82669633627 -0.829367667437 --2.8094394207 -0.829366520047 --2.79218238592 -0.829367801547 --2.77492558956 -0.829371541739 --2.75766855478 -0.829377755523 --2.74041152 -0.8293864429 --2.72315406799 -0.829397588968 --2.70589661598 -0.829411104322 --2.68863868713 -0.829427108169 --2.67138051987 -0.829445585609 --2.65412175655 -0.829466462135 --2.63686275482 -0.829476848245 --2.61765033007 -0.829465314746 --2.59843623638 -0.82944457233 --2.58117699623 -0.829426199198 --2.56391847134 -0.829410329461 --2.54666018486 -0.829396918416 --2.52940243483 -0.829385921359 --2.512144804 -0.829377368093 --2.49488765001 -0.829371318221 --2.47763049602 -0.829367667437 --2.46037352085 -0.829366534948 --2.44311648607 -0.829367816448 --2.42585968971 -0.829371571541 --2.40860259533 -0.829377785325 --2.39134562016 -0.8293864429 --2.37408828736 -0.829397574067 --2.35683083534 -0.82941108942 --2.33957284689 -0.829427108169 --2.32231467962 -0.829445615411 --2.30505591631 -0.829466491938 --2.28779685497 -0.829476848245 --2.26858448982 -0.829465314746 --2.24937045574 -0.82944457233 --2.23211121559 -0.829426199198 --2.2148526907 -0.829410329461 --2.19759440422 -0.829396888614 --2.18033659458 -0.829385921359 --2.16307896376 -0.829377397895 --2.14582175016 -0.829371318221 --2.12856453657 -0.829367667437 --2.1113076806 -0.829366520047 --2.09405070543 -0.829367801547 --2.07679390908 -0.829371541739 --2.05953681469 -0.829377755523 --2.04227977991 -0.8293864429 --2.0250223279 -0.829397544265 --2.00776487589 -0.829411059618 --1.99050697684 -0.829427108169 --1.97324880958 -0.829445615411 --1.95599007606 -0.829466491938 --1.93873104453 -0.829476848245 --1.91951861978 -0.829465314746 --1.90030455589 -0.82944457233 --1.88304531574 -0.829426229 --1.86578679085 -0.829410359264 --1.84852850437 -0.829396888614 --1.83127075434 -0.829385891557 --1.81401315331 -0.829377368093 --1.79675593972 -0.829371318221 --1.77949872613 -0.829367667437 --1.76224184037 -0.829366520047 --1.74498483539 -0.829367801547 --1.72772800923 -0.829371571541 --1.71047091484 -0.829377815127 --1.69321390986 -0.8293864429 --1.67595654726 -0.829397544265 --1.65869906545 -0.829411119222 --1.64144110679 -0.829427152872 --1.62418299913 -0.829445630312 --1.60692426562 -0.829466477036 --1.58966520429 -0.829476833344 --1.57045274973 -0.829465284944 --1.55123868585 -0.829444527626 --1.5339794755 -0.829426184297 --1.5167209208 -0.829410299659 --1.49946263432 -0.829396888614 --1.48220488429 -0.829385921359 --1.46494725347 -0.82937733829 --1.44769006967 -0.829371288419 --1.43043288589 -0.829367667437 --1.41317600012 -0.829366520047 --1.39591899514 -0.829367831349 --1.37866216898 -0.829371571541 --1.3614051044 -0.829377755523 --1.34414809942 -0.8293864429 --1.32689070702 -0.829397544265 --1.30963325501 -0.829411059618 --1.29237529635 -0.829427108169 --1.27511712909 -0.829445555806 --1.25785836577 -0.829466462135 --1.24059930444 -0.829476878047 --1.22138690949 -0.829465314746 --1.20217287541 -0.82944457233 --1.18491363525 -0.829426199198 --1.16765508055 -0.829410329461 --1.15039679408 -0.829396888614 --1.13313907385 -0.829385891557 --1.11588147282 -0.829377368093 --1.09862425923 -0.829371318221 --1.08136704564 -0.829367667437 --1.06411015988 -0.829366520047 --1.0468531251 -0.829367801547 --1.02959626913 -0.829371541739 --1.01233920455 -0.829377755523 --0.995082214473 -0.8293864429 --0.977824836969 -0.829397544265 --0.960567370057 -0.829411059618 --0.943309411407 -0.829427108169 --0.926051273942 -0.829445615411 --0.908792540431 -0.829466491938 --0.891533479094 -0.829476848245 --0.87232105434 -0.829465255141 --0.853107005358 -0.829444512725 --0.83584779501 -0.829426229 --0.818589240312 -0.829410359264 --0.801330938935 -0.829396888614 --0.784073188901 -0.829385891557 --0.766815558076 -0.829377368093 --0.749558389187 -0.829371318221 --0.732301190495 -0.829367667437 --0.715044304729 -0.829366520047 --0.697787299752 -0.829367801547 --0.680530458689 -0.829371571541 --0.663273379206 -0.829377785325 --0.646016359329 -0.8293864429 --0.628758952022 -0.829397588968 --0.61150150001 -0.829411104322 --0.594243571162 -0.829427078366 --0.576985433698 -0.829445555806 --0.559726685286 -0.829466477036 --0.542467623949 -0.829476863146 --0.523255199194 -0.829465314746 --0.504041142762 -0.82944457233 --0.486781924963 -0.829426214099 --0.469523385167 -0.829410344363 --0.45226509124 -0.829396888614 --0.435007348656 -0.829385921359 --0.417749732733 -0.829377368093 --0.400492534041 -0.829371288419 --0.38323533535 -0.829367667437 --0.365978434682 -0.829366520047 --0.348721422255 -0.829367801547 --0.331464596093 -0.829371571541 --0.314207516611 -0.829377785325 --0.296950511634 -0.8293864429 --0.279693126678 -0.829397544265 --0.262435659766 -0.829411059618 --0.245177712291 -0.829427108169 --0.227919586003 -0.829445585609 --0.21066083759 -0.829466491938 --0.193401779979 -0.829476878047 --0.174189351499 -0.846634477377 --0.154971029609 -0.846613436937 --0.137711800635 -0.84659487009 --0.120453244075 -0.846578776836 --0.103194927797 -0.846565127373 --0.0859371628612 -0.846554040909 --0.0686795264483 -0.846545383334 --0.0514223147184 -0.846539229155 --0.0341651034541 -0.846535548568 --0.0169081969652 -0.846534356475 -0.00034883362241 -0.846535682678 -0.017605682835 -0.846539527178 -0.0348627790809 -0.84654584527 -0.0521198166534 -0.846554607153 -0.0693772248924 -0.846565872431 -0.0866346973926 -0.8465795964 -0.103892657906 -0.846595793962 -0.121150810272 -0.846614480019 -0.138409581035 -0.846635654569 -0.155668657273 -0.846646204591 -0.174880925566 -0.84663450718 -0.194094818085 -0.84661346674 -0.211354039609 -0.846594840288 -0.228612598032 -0.846578776836 -0.24587091431 -0.846565186978 -0.263128675521 -0.846554070711 -0.280386306345 -0.846545398235 -0.297643519938 -0.846539214254 -0.314900740981 -0.846535533667 -0.33215765655 -0.846534371376 -0.349414683878 -0.846535682678 -0.366671524942 -0.846539497376 -0.383928626776 -0.846545755863 -0.401185669005 -0.846554547548 -0.418443068862 -0.846565842628 -0.435700543225 -0.846579566598 -0.452958509326 -0.846595793962 -0.470216654241 -0.846614480019 -0.487475425005 -0.846635624766 -0.504734493792 -0.846646174789 -0.523946762085 -0.84663450718 -0.543160676957 -0.84661346674 -0.560419902205 -0.846594840288 -0.577678456902 -0.846578776836 -0.594936773181 -0.846565186978 -0.612194523215 -0.846554070711 -0.629452168941 -0.846545398235 -0.646709367633 -0.846539214254 -0.663966566324 -0.846535518766 -0.681223496795 -0.846534371376 -0.698480531573 -0.846535697579 -0.715737387538 -0.846539527178 -0.732994481921 -0.846545815468 -0.7502515167 -0.84655457735 -0.767508909106 -0.846565842628 -0.784766361117 -0.846579566598 -0.80202434957 -0.846595793962 -0.819282516837 -0.846614509821 -0.836541295052 -0.846635654569 -0.853800371289 -0.846646174789 -0.87301261723 -0.846634477377 -0.892226487398 -0.846613451839 -0.909485712647 -0.846594855189 -0.926744312048 -0.846578806639 -0.944002628326 -0.84656521678 -0.961260378361 -0.846554070711 -0.978518024087 -0.846545398235 -0.99577523768 -0.846539214254 -1.01303246617 -0.846535533667 -1.03028935194 -0.846534371376 -1.04754635692 -0.846535682678 -1.06480321288 -0.846539497376 -1.08206030727 -0.846545755863 -1.09931734204 -0.846554547548 -1.11657476425 -0.846565812826 -1.13383224606 -0.846579536796 -1.15109020472 -0.846595793962 -1.16834837198 -0.846614509821 -1.1856071353 -0.846635654569 -1.20286619663 -0.846646174789 -1.22207847238 -0.84663450718 -1.24129235745 -0.84661346674 -1.2585515678 -0.84659487009 -1.27581012249 -0.846578806639 -1.29306843877 -0.846565157175 -1.31032624841 -0.846554040909 -1.32758390903 -0.846545383334 -1.34484109283 -0.846539229155 -1.36209827662 -0.846535548568 -1.37935519219 -0.846534386277 -1.39661222696 -0.846535712481 -1.41386908293 -0.846539527178 -1.43112617731 -0.84654584527 -1.44838321209 -0.846554592252 -1.4656406343 -0.846565827727 -1.48289808631 -0.8465795964 -1.50015604496 -0.846595838666 -1.51741418243 -0.846614524722 -1.53467294574 -0.846635654569 -1.55193206668 -0.846646174789 -1.57114434242 -0.84663450718 -1.59035822749 -0.846613481641 -1.60761746764 -0.846594884992 -1.62487602234 -0.846578806639 -1.64213430881 -0.846565186978 -1.65939205885 -0.846554070711 -1.67664971947 -0.846545383334 -1.69390693307 -0.846539199352 -1.71116414666 -0.846535533667 -1.72842106223 -0.846534371376 -1.74567809701 -0.846535667777 -1.76293492317 -0.846539482474 -1.78019198775 -0.846545755863 -1.79744905233 -0.846554547548 -1.81470647454 -0.846565812826 -1.83196392655 -0.846579536796 -1.8492218852 -0.846595793962 -1.86648005247 -0.846614480019 -1.88373881578 -0.846635654569 -1.90099787712 -0.846646204591 -1.92021018267 -0.846634477377 -1.93942409754 -0.846613436937 -1.95668327808 -0.84659487009 -1.97394183278 -0.846578806639 -1.99120017886 -0.846565186978 -2.00845789909 -0.846554070711 -2.02571552992 -0.846545398235 -2.04297274351 -0.846539244056 -2.06022995711 -0.846535563469 -2.07748693228 -0.846534371376 -2.09474396705 -0.846535667777 -2.11200082302 -0.846539482474 -2.1292579174 -0.846545755863 -2.14651495218 -0.846554547548 -2.16377234459 -0.846565812826 -2.1810297966 -0.846579536796 -2.19828772545 -0.846595793962 -2.21554589272 -0.846614509821 -2.23280465603 -0.846635654569 -2.25006371737 -0.846646174789 -2.26927602291 -0.846634447575 -2.28848993778 -0.846613407135 -2.30574917793 -0.84659487009 -2.32300770283 -0.846578806639 -2.3402659893 -0.846565186978 -2.35752379894 -0.846554070711 -2.37478148937 -0.846545398235 -2.39203870297 -0.846539214254 -2.40929591656 -0.846535533667 -2.42655277252 -0.846534371376 -2.4438098073 -0.846535682678 -2.46106666326 -0.846539527178 -2.47832375765 -0.846545785666 -2.49558079243 -0.846554547548 -2.51283818483 -0.846565842628 -2.53009563684 -0.846579566598 -2.5473536253 -0.846595793962 -2.56461179257 -0.846614480019 -2.58187055588 -0.846635654569 -2.59912967682 -0.846646204591 -2.61834186316 -0.84663450718 -2.63755571842 -0.84661346674 -2.65481495857 -0.846594840288 -2.67207354307 -0.846578776836 -2.68933188915 -0.846565186978 -2.70658963919 -0.846554040909 -2.72384727001 -0.846545368433 -2.74110448361 -0.846539244056 -2.75836169719 -0.846535548568 -2.77561861276 -0.846534356475 -2.79287564754 -0.846535667777 -2.81013250351 -0.846539512277 -2.82738959789 -0.846545785666 -2.84464663267 -0.846554547548 -2.86190408468 -0.846565812826 -2.87916153669 -0.846579536796 -2.89641946554 -0.846595793962 -2.91367757321 -0.846614480019 -2.93093633652 -0.846635654569 -2.94819545746 -0.846646204591 -2.967407763 -0.846634477377 -2.98662161827 -0.846613436937 -3.00388085842 -0.84659487009 -3.02113950253 -0.846578776836 -3.038397789 -0.846565127373 -3.05565547943 -0.846554040909 -3.07291311026 -0.846545383334 -3.09017032385 -0.846539229155 -3.10742753744 -0.846535548568 -3.12468451261 -0.846534356475 --3.14124378761 -0.846535682678 --3.12398695946 -0.846539527178 --3.10672986507 -0.84654584527 --3.0894728303 -0.846554607153 --3.07221537829 -0.846565872431 --3.05495792627 -0.8465795964 --3.03769999743 -0.846595793962 --3.02044183016 -0.846614480019 --3.00318306684 -0.846635654569 --2.98592400551 -0.846646204591 --2.96671169996 -0.84663450718 --2.94749778509 -0.84661346674 --2.93023854494 -0.846594840288 --2.91297996044 -0.846578776836 --2.89572167397 -0.846565186978 --2.87846398354 -0.846554070711 --2.86120635271 -0.846545398235 --2.84394913912 -0.846539214254 --2.82669192552 -0.846535533667 --2.80943495035 -0.846534371376 --2.79217797518 -0.846535682678 --2.77492117882 -0.846539497376 --2.75766408443 -0.846545755863 --2.74040704966 -0.846554547548 --2.72314959765 -0.846565842628 --2.70589208603 -0.846579566598 --2.68863415718 -0.846595793962 --2.67137598991 -0.846614480019 --2.6541172266 -0.846635624766 --2.63685822487 -0.846646174789 --2.61764591932 -0.84663450718 --2.59843200445 -0.84661346674 --2.5811727643 -0.846594840288 --2.5639141798 -0.846578776836 --2.54665589333 -0.846565186978 --2.52939814329 -0.846554070711 --2.51214045286 -0.846545398235 --2.49488329887 -0.846539214254 --2.47762614488 -0.846535518766 --2.46036916971 -0.846534371376 --2.44311213493 -0.846535697579 --2.42585527897 -0.846539527178 --2.40859812498 -0.846545815468 --2.3913410902 -0.84655457735 --2.3740837574 -0.846565842628 --2.35682630539 -0.846579566598 --2.33956825733 -0.846595793962 --2.32231009006 -0.846614509821 --2.30505132675 -0.846635654569 --2.28779220581 -0.846646174789 --2.26858001947 -0.846634477377 --2.24936616421 -0.846613451839 --2.23210692406 -0.846594855189 --2.21484839916 -0.846578806639 --2.19759011269 -0.84656521678 --2.18033230305 -0.846554070711 --2.16307461262 -0.846545398235 --2.14581739902 -0.846539214254 --2.12856018543 -0.846535533667 --2.11130332947 -0.846534371376 --2.09404629469 -0.846535682678 --2.07678943873 -0.846539497376 --2.05953234434 -0.846545755863 --2.04227530956 -0.846554547548 --2.02501785755 -0.846565812826 --2.00776037574 -0.846579536796 --1.99050244689 -0.846595793962 --1.97324427962 -0.846614509821 --1.95598554611 -0.846635654569 --1.93872645497 -0.846646174789 --1.91951417923 -0.84663450718 --1.90030029416 -0.84661346674 --1.88304105401 -0.84659487009 --1.86578249931 -0.846578806639 --1.84852418303 -0.846565157175 --1.831266433 -0.846554040909 --1.81400880218 -0.846545383334 --1.79675158858 -0.846539229155 --1.77949437499 -0.846535548568 --1.76223742962 -0.846534386277 --1.74498039484 -0.846535712481 --1.72772356868 -0.846539527178 --1.71046647429 -0.84654584527 --1.69320943951 -0.846554592252 --1.67595201731 -0.846565827727 --1.6586945355 -0.8465795964 --1.64143660665 -0.846595838666 --1.62417846918 -0.846614524722 --1.60691967606 -0.846635654569 --1.58966061473 -0.846646174789 --1.57044833899 -0.84663450718 --1.55123442412 -0.846613481641 --1.53397518396 -0.846594884992 --1.51671659946 -0.846578806639 --1.49945831299 -0.846565186978 --1.48220056295 -0.846554070711 --1.46494293213 -0.846545383334 --1.44768571854 -0.846539199352 --1.43042850495 -0.846535533667 --1.41317161918 -0.846534371376 --1.3959145844 -0.846535667777 --1.37865772843 -0.846539482474 --1.36140063405 -0.846545755863 --1.34414359927 -0.846554547548 --1.32688620687 -0.846565812826 --1.30962872505 -0.846579536796 --1.2923707366 -0.846595793962 --1.27511256933 -0.846614480019 --1.25785380602 -0.846635654569 --1.24059474468 -0.846646204591 --1.22138249874 -0.846634477377 --1.20216861368 -0.846613436937 --1.18490937352 -0.84659487009 --1.16765078902 -0.846578806639 --1.15039247274 -0.846565186978 --1.13313475251 -0.846554070711 --1.11587712169 -0.846545398235 --1.09861987829 -0.846539244056 --1.0813626647 -0.846535563469 --1.06410574913 -0.846534371376 --1.04684871435 -0.846535667777 --1.02959185839 -0.846539482474 --1.012334764 -0.846545755863 --0.995077744124 -0.846554547548 --0.977820321918 -0.846565812826 --0.960562855005 -0.846579536796 --0.943304896355 -0.846595793962 --0.926046729088 -0.846614509821 --0.908787980676 -0.846635654569 --0.891528904438 -0.846646174789 --0.872316628694 -0.846634447575 --0.853102743626 -0.846613407135 --0.835843518376 -0.84659487009 --0.818584948778 -0.846578806639 --0.801326617599 -0.846565186978 --0.784068852663 -0.846554070711 --0.766811221838 -0.846545398235 --0.749554023147 -0.846539214254 --0.732296794653 -0.846535533667 --0.715039893985 -0.846534371376 --0.697782874108 -0.846535682678 --0.680526018143 -0.846539527178 --0.663268923759 -0.846545785666 --0.64601187408 -0.846554547548 --0.628754451871 -0.846565842628 --0.611496984959 -0.846579566598 --0.594239041209 -0.846595793962 --0.576980888843 -0.846614480019 --0.55972212553 -0.846635654569 --0.542463064194 -0.846646204591 --0.52325078845 -0.84663450718 --0.504036881029 -0.84661346674 --0.48677764833 -0.846594840288 --0.469519086182 -0.846578776836 --0.452260777354 -0.846565186978 --0.43500302732 -0.846554040909 --0.417745389044 -0.846545368433 --0.40048816055 -0.846539244056 --0.383230939507 -0.846535548568 --0.365974031389 -0.846534356475 --0.348717011511 -0.846535667777 --0.331460170448 -0.846539512277 --0.314203076065 -0.846545785666 --0.296946033835 -0.846554547548 --0.279688626528 -0.846565812826 --0.262431152165 -0.846579536796 --0.245173182339 -0.846595793962 --0.227915037423 -0.846614480019 --0.21065627411 -0.846635654569 --0.193397205323 -0.846646204591 --0.17418493703 -0.863784849644 --0.154966823757 -0.863763540983 --0.13770757243 -0.863744735718 --0.120448995382 -0.863728433847 --0.103190666065 -0.863714650273 --0.085932886228 -0.863703429699 --0.0686752311885 -0.863694638014 --0.0514179989696 -0.863688394427 --0.0341607681476 -0.863684669137 --0.016903843265 -0.863683462143 -0.000353204784912 -0.863684803248 -0.0176100714598 -0.863688707352 -0.0348671865649 -0.863695070148 -0.052124241367 -0.863703921437 -0.0693816663697 -0.863715350628 -0.0866391584277 -0.863729283214 -0.10389713943 -0.863745689392 -0.12115530856 -0.863764613867 -0.138414099813 -0.86378608644 -0.155673198402 -0.863796755672 -0.174885299057 -0.863784879446 -0.194099027663 -0.863763570786 -0.211358275265 -0.863744735718 -0.228616852313 -0.863728433847 -0.245875176042 -0.863714650273 -0.263132952153 -0.863703429699 -0.28039060533 -0.863694652915 -0.297647841275 -0.863688379526 -0.31490508467 -0.863684654236 -0.33216201514 -0.863683477044 -0.349419057369 -0.863684788347 -0.366675913334 -0.863688662648 -0.383933030069 -0.863695010543 -0.40119009465 -0.863703906536 -0.418447516859 -0.863715320825 -0.435704998672 -0.86372923851 -0.452962979674 -0.863745689392 -0.470221146941 -0.863764613867 -0.487479940057 -0.863786056638 -0.504739038646 -0.863796725869 -0.523951143027 -0.863784879446 -0.543164879084 -0.863763570786 -0.560424134135 -0.863744735718 -0.577682703733 -0.863728433847 -0.594941005111 -0.863714650273 -0.612198784947 -0.863703429699 -0.629456460476 -0.863694652915 -0.646713674068 -0.863688379526 -0.663970902562 -0.863684624433 -0.681227862835 -0.863683447242 -0.698484912515 -0.863684788347 -0.715741768479 -0.863688662648 -0.732998892665 -0.863695040345 -0.750255957246 -0.863703921437 -0.767513364553 -0.863715305924 -0.784770846367 -0.86372923851 -0.80202883482 -0.863745689392 -0.819287002086 -0.863764613867 -0.836545795202 -0.863786056638 -0.853804901242 -0.863796725869 -0.873016998172 -0.863784849644 -0.892230719328 -0.863763555884 -0.909489974379 -0.863744750619 -0.92674857378 -0.86372846365 -0.94400690496 -0.863714680076 -0.961264669895 -0.863703429699 -0.978522315621 -0.863694652915 -0.995779544116 -0.863688379526 -1.01303678751 -0.863684639335 -1.03029370308 -0.863683462143 -1.04755073786 -0.863684788347 -1.06480762362 -0.863688662648 -1.08206474781 -0.863695010543 -1.09932178259 -0.863703906536 -1.1165792048 -0.863715335726 -1.13383671641 -0.86372923851 -1.15109470486 -0.863745674491 -1.16835287213 -0.863764613867 -1.18561163545 -0.863786056638 -1.20287072659 -0.863796725869 -1.22208285332 -0.863784879446 -1.24129655957 -0.863763570786 -1.25855579972 -0.863744735718 -1.27581441402 -0.863728433847 -1.2930727601 -0.863714650273 -1.31033053994 -0.863703429699 -1.32758817076 -0.863694638014 -1.34484541416 -0.863688394427 -1.36210265756 -0.863684654236 -1.37935957313 -0.863683477044 -1.3966166079 -0.863684818149 -1.41387346387 -0.863688662648 -1.43113055825 -0.863695040345 -1.44838762283 -0.86370395124 -1.46564507484 -0.863715335727 -1.48290252685 -0.863729223609 -1.50016051531 -0.863745674491 -1.51741871238 -0.863764613867 -1.53467750549 -0.863786056638 -1.55193659663 -0.863796725869 -1.57114869356 -0.863784879446 -1.59036242962 -0.863763585687 -1.60762166977 -0.863744780421 -1.62488025427 -0.863728493452 -1.64213857054 -0.863714680076 -1.65939635038 -0.863703429699 -1.67665404081 -0.863694608211 -1.69391125441 -0.863688334822 -1.711168468 -0.863684654236 -1.72842538357 -0.863683477044 -1.74568244815 -0.863684773445 -1.76293933391 -0.863688647747 -1.7801964283 -0.863695010543 -1.79745349288 -0.863703906536 -1.81471091509 -0.863715320825 -1.8319683969 -0.86372923851 -1.84922638536 -0.863745689392 -1.86648455262 -0.863764613867 -1.88374331593 -0.863786056638 -1.90100240707 -0.863796725869 -1.92021456361 -0.863784849644 -1.93942832947 -0.863763540983 -1.95668753982 -0.86374476552 -1.97394609451 -0.863728463649 -1.99120444059 -0.863714650273 -2.00846219063 -0.863703429699 -2.02571988106 -0.863694652915 -2.04297709465 -0.863688409328 -2.06023430824 -0.863684669137 -2.07749128341 -0.863683462143 -2.09474831819 -0.863684773445 -2.11200517416 -0.863688647747 -2.12926226854 -0.863695010543 -2.14651936293 -0.863703906536 -2.16377681494 -0.863715320825 -2.18103426695 -0.863729223609 -2.1982921958 -0.863745674491 -2.21555036306 -0.863764613867 -2.23280918598 -0.863786056638 -2.25006830692 -0.863796725869 -2.26928043366 -0.863784849644 -2.28849416971 -0.863763540983 -2.30575340986 -0.863744735718 -2.32301199436 -0.863728433847 -2.34027028084 -0.863714620471 -2.35752803087 -0.863703399897 -2.3747857213 -0.863694652915 -2.3920429945 -0.863688379526 -2.40930020809 -0.863684639335 -2.42655706405 -0.863683462143 -2.44381415844 -0.863684788347 -2.46107107401 -0.863688662648 -2.47832816839 -0.863695010543 -2.49558520317 -0.863703891635 -2.51284259558 -0.863715305924 -2.53010010719 -0.86372923851 -2.54735815525 -0.863745689392 -2.56461632252 -0.863764613867 -2.58187508583 -0.863786056638 -2.59913414717 -0.863796725869 -2.6183462143 -0.863784879446 -2.63755995035 -0.863763570786 -2.6548191905 -0.863744735718 -2.672077775 -0.863728433847 -2.68933618069 -0.863714650273 -2.70659399033 -0.863703399897 -2.72385156155 -0.863694623113 -2.74110877514 -0.863688409328 -2.75836604833 -0.863684654236 -2.77562302351 -0.863683447242 -2.79288005829 -0.863684773445 -2.81013691425 -0.863688647747 -2.82739400864 -0.863695010543 -2.84465104342 -0.863703906536 -2.86190849543 -0.863715320825 -2.87916594744 -0.863729223609 -2.89642393589 -0.863745674491 -2.91368210316 -0.863764613867 -2.93094086647 -0.863786056638 -2.94819998741 -0.863796725869 -2.96741211415 -0.863784849644 -2.9866258502 -0.863763540983 -3.00388509035 -0.863744735718 -3.02114367485 -0.863728433847 -3.03840202093 -0.863714650273 -3.05565977097 -0.863703429699 -3.0729174614 -0.863694638014 -3.09017467499 -0.863688394427 -3.10743188858 -0.863684669137 -3.12468886375 -0.863683462143 --3.14123943647 -0.863684803248 --3.12398254872 -0.863688707352 --3.10672545433 -0.863695070148 --3.08946841955 -0.863703921437 --3.07221096754 -0.863715350628 --3.05495351553 -0.863729283214 --3.03769552708 -0.863745689392 --3.02043735981 -0.863764613867 --3.00317859649 -0.86378608644 --2.98591947555 -0.863796755672 --2.96670734882 -0.863784879446 --2.94749361277 -0.863763570786 --2.93023437262 -0.863744735718 --2.91297578812 -0.863728433847 --2.89571744204 -0.863714650273 --2.878459692 -0.863703429699 --2.86120200157 -0.863694652915 --2.84394478798 -0.863688379526 --2.82668757438 -0.863684654236 --2.80943059921 -0.863683477044 --2.79217362404 -0.863684788347 --2.77491676808 -0.863688662648 --2.75765961409 -0.863695010543 --2.74040257931 -0.863703906536 --2.7231451273 -0.863715320825 --2.70588761568 -0.86372923851 --2.68862968683 -0.863745689392 --2.67137151956 -0.863764613867 --2.65411275625 -0.863786056638 --2.63685369492 -0.863796725869 --2.61764150858 -0.863784879446 --2.59842777252 -0.863763570786 --2.58116853237 -0.863744735718 --2.56390994787 -0.863728433847 --2.5466516614 -0.863714650273 --2.52939391136 -0.863703429699 --2.51213622093 -0.863694652915 --2.49487900734 -0.863688379526 --2.47762179375 -0.863684624433 --2.46036481858 -0.863683447242 --2.4431077838 -0.863684788347 --2.42585092783 -0.863688662648 --2.40859377384 -0.863695040345 --2.39133667946 -0.863703921437 --2.37407928705 -0.863715305924 --2.35682177544 -0.86372923851 --2.33956378698 -0.863745689392 --2.32230561972 -0.863764613867 --2.3050467968 -0.863786056638 --2.28778767586 -0.863796725869 --2.26857560873 -0.863784849644 --2.24936193228 -0.863763555884 --2.23210269213 -0.863744750619 --2.21484410763 -0.86372846365 --2.19758576155 -0.863714680076 --2.18032795191 -0.863703429699 --2.16307032108 -0.863694652915 --2.14581310749 -0.863688379526 --2.1285558939 -0.863684639335 --2.11129903794 -0.863683462143 --2.09404194355 -0.863684788347 --2.07678502798 -0.863688662648 --2.0595279336 -0.863695010543 --2.04227089882 -0.863703906536 --2.02501344681 -0.863715335726 --2.00775596499 -0.86372923851 --1.99049797654 -0.863745674491 --1.97323977947 -0.863764613867 --1.95598101616 -0.863786056638 --1.93872192502 -0.863796725869 --1.91950982809 -0.863784879446 --1.90029609203 -0.863763570786 --1.88303682208 -0.863744735718 --1.86577823758 -0.863728433847 --1.8485198915 -0.863714650273 --1.83126211166 -0.863703429699 --1.81400448084 -0.863694638014 --1.79674726725 -0.863688394427 --1.77949005366 -0.863684654236 --1.76223307848 -0.863683477044 --1.7449760139 -0.863684818149 --1.72771918774 -0.863688662648 --1.71046209335 -0.863695040345 --1.69320502877 -0.86370395124 --1.67594757676 -0.863715335727 --1.65869009495 -0.863729223609 --1.6414321363 -0.863745674491 --1.62417396903 -0.863764613867 --1.60691514611 -0.863786056638 --1.58965605497 -0.863796725869 --1.57044395804 -0.863784879446 --1.55123019219 -0.863763585687 --1.53397095203 -0.863744780421 --1.51671236753 -0.863728493452 --1.49945405125 -0.863714680076 --1.48219630122 -0.863703429699 --1.46493864059 -0.863694608211 --1.4476813972 -0.863688334822 --1.43042418361 -0.863684654236 --1.41316726804 -0.863683477044 --1.39591020346 -0.863684773445 --1.37865331769 -0.863688647747 --1.3613961935 -0.863695010543 --1.34413915872 -0.863703906536 --1.32688173652 -0.863715320825 --1.3096242249 -0.86372923851 --1.29236623645 -0.863745689392 --1.27510806918 -0.863764613867 --1.25784930587 -0.863786056638 --1.24059021473 -0.863796725869 --1.2213781178 -0.863784849644 --1.20216441155 -0.863763540983 --1.18490514159 -0.86374476552 --1.16764655709 -0.863728463649 --1.15038824081 -0.863714650273 --1.13313046097 -0.863703429699 --1.11587280035 -0.863694652915 --1.09861552715 -0.863688409328 --1.08135828376 -0.863684669137 --1.06410136819 -0.863683462143 --1.04684433341 -0.863684773445 --1.02958747745 -0.863688647747 --1.01233038306 -0.863695010543 --0.995073318479 -0.863703906536 --0.97781586647 -0.863715320825 --0.960558399558 -0.863729223609 --0.943300426006 -0.863745674491 --0.926042243838 -0.863764613867 --0.908783450723 -0.863786056638 --0.891524344683 -0.863796725869 --0.872312247753 -0.863784849644 --0.853098526597 -0.863763540983 --0.835839286447 -0.863744735718 --0.818580701947 -0.863728433847 --0.801322355866 -0.863714620471 --0.784064590931 -0.863703399897 --0.766806945205 -0.863694652915 --0.749549716711 -0.863688379526 --0.732292473316 -0.863684639335 --0.715035542846 -0.863683462143 --0.697778493166 -0.863684788347 --0.6805216223 -0.863688662648 --0.663264513016 -0.863695010543 --0.646007448435 -0.863703891635 --0.628750011325 -0.863715305924 --0.611492529512 -0.86372923851 --0.59423455596 -0.863745689392 --0.576976373792 -0.863764613867 --0.559717595577 -0.863786056638 --0.542458534241 -0.863796725869 --0.52324642241 -0.863784879446 --0.504032671451 -0.863763570786 --0.4867734164 -0.863744735718 --0.469514831901 -0.863728433847 --0.452256508172 -0.863714650273 --0.434998735786 -0.863703399897 --0.417741082609 -0.863694623113 --0.400483839214 -0.863688409328 --0.383226603269 -0.863684654236 --0.3659696877 -0.863683447242 --0.348712652922 -0.863684773445 --0.331455782056 -0.863688647747 --0.314198665321 -0.863695010543 --0.29694160074 -0.863703906536 --0.279684178531 -0.863715320825 --0.262426704169 -0.863729223609 --0.24516871199 -0.863745674491 --0.227910540998 -0.863764613867 --0.210651759058 -0.863786056638 --0.193392667919 -0.863796725869 --0.174180563539 -0.880939468741 --0.154962256551 -0.880917936564 --0.137702986598 -0.880898877978 --0.120444383472 -0.88088235259 --0.103186037391 -0.880868405104 --0.085928240791 -0.880857050419 --0.0686705652624 -0.880848154426 --0.0514133134857 -0.880841836333 --0.0341560635716 -0.880838081241 --0.0168991188984 -0.880836859346 -0.000357948476447 -0.880838185549 -0.0176148335449 -0.880842119455 -0.0348719679751 -0.880848571658 -0.0521290432662 -0.880857542157 -0.0693864868954 -0.880869090557 -0.0866439957171 -0.880883187056 -0.103901999071 -0.880899816752 -0.121160186827 -0.880919024349 -0.138418994844 -0.880940750241 -0.155678108335 -0.880951493978 -0.174890037626 -0.880939468741 -0.194103598594 -0.880917936564 -0.211362868547 -0.880898877978 -0.228621467948 -0.88088235259 -0.245879802853 -0.880868375301 -0.263137593866 -0.880857005715 -0.280395269394 -0.880848139525 -0.29765252024 -0.880841836333 -0.314909785986 -0.880838051439 -0.332166746259 -0.880836829543 -0.349423803389 -0.880838170648 -0.366680674255 -0.880842074752 -0.383937813342 -0.880848541856 -0.401194900274 -0.880857557058 -0.418452337384 -0.880869090557 -0.435709849 -0.880883201957 -0.452967852354 -0.880899846554 -0.470226019621 -0.880918994546 -0.487484820187 -0.880940720439 -0.504743948579 -0.880951523781 -0.523955896497 -0.880939498544 -0.543169438839 -0.880917936564 -0.560428708792 -0.880898877978 -0.577687308192 -0.88088235259 -0.594945639372 -0.880868375301 -0.612203449011 -0.880857005715 -0.629461124539 -0.880848139525 -0.646718367934 -0.880841836333 -0.66397562623 -0.880838036537 -0.681232601404 -0.880836814642 -0.698489680886 -0.880838170648 -0.715746551752 -0.880842104554 -0.733003675938 -0.880848541856 -0.75026075542 -0.880857512355 -0.76751819253 -0.880869075656 -0.784775689244 -0.880883172155 -0.802033692598 -0.880899816752 -0.819291874766 -0.880918994546 -0.836550667882 -0.880940720439 -0.853809803724 -0.880951493978 -0.873021751642 -0.880939468741 -0.892235293984 -0.880917936564 -0.909494563937 -0.88089889288 -0.926753178239 -0.880882397294 -0.944011524319 -0.880868405104 -0.961269319057 -0.880857005715 -0.978526979685 -0.880848139525 -0.995784237983 -0.880841836333 -1.01304149628 -0.880838036537 -1.03029841185 -0.880836814642 -1.04755547642 -0.880838170648 -1.06481239199 -0.880842104554 -1.08206954598 -0.880848541856 -1.09932661057 -0.880857527256 -1.11658406258 -0.880869105458 -1.13384157419 -0.880883201957 -1.15109956265 -0.880899831653 -1.16835772991 -0.880918994546 -1.18561652302 -0.880940720439 -1.20287564397 -0.880951493978 -1.22208759189 -0.880939468741 -1.24130114913 -0.880917936564 -1.25856041908 -0.880898877978 -1.27581903338 -0.880882382393 -1.29307737946 -0.880868405104 -1.3103351593 -0.880857005715 -1.32759281993 -0.880848139525 -1.34485009313 -0.880841836333 -1.36210736633 -0.880838036537 -1.37936431169 -0.880836814642 -1.39662134647 -0.880838170648 -1.41387820244 -0.880842074752 -1.43113532662 -0.880848541856 -1.44839242101 -0.880857557058 -1.46564987302 -0.880869090557 -1.48290735483 -0.880883187056 -1.50016537309 -0.880899831653 -1.51742359996 -0.880919024349 -1.53468239307 -0.880940750241 -1.55194148421 -0.880951523781 -1.57115343213 -0.880939468741 -1.59036701918 -0.880917906761 -1.60762625933 -0.88089889288 -1.62488484383 -0.880882367492 -1.64214318991 -0.880868375301 -1.65940099955 -0.880857005715 -1.67665868998 -0.880848109722 -1.69391593337 -0.880841806531 -1.71117317677 -0.880838081241 -1.72843012214 -0.880836859346 -1.74568721652 -0.880838170648 -1.76294410229 -0.880842074752 -1.78020122647 -0.880848541856 -1.79745829106 -0.880857557058 -1.81471574307 -0.880869090557 -1.83197325468 -0.880883172155 -1.84923124314 -0.880899816752 -1.86648944021 -0.880918994546 -1.88374823332 -0.880940720439 -1.90100735426 -0.880951493978 -1.92021930218 -0.880939468741 -1.93943285942 -0.880917936564 -1.95669212937 -0.880898877978 -1.97395074368 -0.88088235259 -1.99120908975 -0.880868375301 -2.00846683979 -0.880857005715 -2.02572453022 -0.880848139525 -2.04298180342 -0.880841836333 -2.06023901701 -0.880838036537 -2.07749599218 -0.880836814642 -2.09475308656 -0.880838170648 -2.11200994253 -0.880842074752 -2.12926709652 -0.880848512053 -2.14652419091 -0.880857527256 -2.16378164292 -0.880869090557 -2.18103909493 -0.880883187056 -2.19829702377 -0.880899831653 -2.21555525065 -0.880918994546 -2.23281413317 -0.880940720439 -2.25007325411 -0.880951493978 -2.26928514242 -0.880939468741 -2.28849869967 -0.880917936564 -2.30575799942 -0.880898877978 -2.32301664352 -0.880882382393 -2.34027493 -0.880868375301 -2.35753262043 -0.880856975913 -2.37479031086 -0.880848139525 -2.39204764366 -0.880841836333 -2.40930491686 -0.880838036537 -2.42656183243 -0.880836814642 -2.44381886721 -0.880838170648 -2.46107578278 -0.880842104554 -2.47833293676 -0.880848541856 -2.49558997154 -0.880857512355 -2.51284742356 -0.880869075656 -2.53010499478 -0.880883201957 -2.54736304283 -0.880899846554 -2.5646212101 -0.880918994546 -2.58187997341 -0.880940720439 -2.59913903475 -0.880951523781 -2.61835098267 -0.880939498544 -2.63756453991 -0.880917936564 -2.65482378006 -0.880898877978 -2.67208242417 -0.880882382393 -2.68934082985 -0.880868405104 -2.70659863949 -0.880857005715 -2.72385621071 -0.880848139525 -2.7411134243 -0.880841836333 -2.7583707571 -0.880838036537 -2.77562773228 -0.880836814642 -2.79288476706 -0.880838170648 -2.81014162302 -0.880842074752 -2.8273987174 -0.880848541856 -2.84465581179 -0.880857557058 -2.8619132638 -0.880869090557 -2.87917077541 -0.880883157253 -2.89642882347 -0.88089980185 -2.91368699074 -0.880918994546 -2.93094575405 -0.880940720439 -2.94820487499 -0.880951493978 -2.96741682291 -0.880939468741 -2.98663038015 -0.880917936564 -3.00388962031 -0.880898877978 -3.02114820481 -0.88088235259 -3.03840661049 -0.880868405104 -3.05566442013 -0.880857050419 -3.07292211056 -0.880848154426 -3.09017938376 -0.880841836333 -3.10743659734 -0.880838081241 -3.12469351291 -0.880836859346 --3.1412347277 -0.880838185549 --3.12397783995 -0.880842119455 --3.10672074557 -0.880848571658 --3.08946365118 -0.880857542157 --3.07220619917 -0.880869090557 --3.05494868756 -0.880883187056 --3.0376906395 -0.880899816752 --3.02043247223 -0.880919024349 --3.00317370892 -0.880940750241 --2.98591458797 -0.880951493978 --2.96670264005 -0.880939468741 --2.94748908282 -0.880917936564 --2.93022984266 -0.880898877978 --2.91297125816 -0.88088235259 --2.89571285248 -0.880868375301 --2.87845504284 -0.880857005715 --2.86119735241 -0.880848139525 --2.84394013882 -0.880841836333 --2.82668292522 -0.880838051439 --2.80942595005 -0.880836829543 --2.79216891527 -0.880838170648 --2.77491199971 -0.880842074752 --2.75765478611 -0.880848541856 --2.74039769172 -0.880857557058 --2.72314023971 -0.880869090557 --2.7058827877 -0.880883201957 --2.68862485886 -0.880899846554 --2.67136669159 -0.880918994546 --2.65410786867 -0.880940720439 --2.63684868813 -0.880951523781 --2.61763674021 -0.880939498544 --2.59842318296 -0.880917936564 --2.58116388321 -0.880898877978 --2.56390535831 -0.88088235259 --2.54664707184 -0.880868375301 --2.5293892622 -0.880857005715 --2.51213157177 -0.880848139525 --2.49487429857 -0.880841836333 --2.47761702537 -0.880838036537 --2.4603600502 -0.880836814642 --2.44310295582 -0.880838170648 --2.42584609985 -0.880842104554 --2.40858900547 -0.880848541856 --2.39133191108 -0.880857512355 --2.37407445908 -0.880869075656 --2.35681694746 -0.880883172155 --2.33955895901 -0.880899816752 --2.32230073213 -0.880918994546 --2.30504190922 -0.880940720439 --2.28778278828 -0.880951493978 --2.26857084036 -0.880939468741 --2.24935734272 -0.880917936564 --2.23209810257 -0.88089889288 --2.21483945847 -0.880882397294 --2.19758111238 -0.880868405104 --2.18032330274 -0.880857005715 --2.16306567192 -0.880848139525 --2.14580845833 -0.880841836333 --2.12855118514 -0.880838036537 --2.11129426957 -0.880836814642 --2.09403717518 -0.880838170648 --2.07678025961 -0.880842104554 --2.05952316522 -0.880848541856 --2.04226613044 -0.880857527256 --2.02500867843 -0.880869105458 --2.00775113702 -0.880883201957 --1.99049308896 -0.880899831653 --1.97323489189 -0.880918994546 --1.95597609878 -0.880940720439 --1.93871700764 -0.880951493978 --1.91950508952 -0.880939468741 --1.90029150248 -0.880917936564 --1.88303223252 -0.880898877978 --1.86577364802 -0.880882382393 --1.84851527214 -0.880868405104 --1.8312574625 -0.880857005715 --1.81399980187 -0.880848139525 --1.79674255848 -0.880841836333 --1.77948534489 -0.880838036537 --1.76222836971 -0.880836814642 --1.74497127533 -0.880838170648 --1.72771441937 -0.880842074752 --1.71045729518 -0.880848541856 --1.6932002306 -0.880857557058 --1.67594277859 -0.880869090557 --1.65868526697 -0.880883187056 --1.64142727852 -0.880899831653 --1.62416908145 -0.880919024349 --1.60691025853 -0.880940750241 --1.58965113759 -0.880951523781 --1.57043921947 -0.880939468741 --1.55122566223 -0.880917906761 --1.53396639228 -0.88089889288 --1.51670777798 -0.880882367492 --1.4994494319 -0.880868375301 --1.48219165206 -0.880857005715 --1.46493396163 -0.880848109722 --1.44767671824 -0.880841806531 --1.43041947484 -0.880838081241 --1.41316252947 -0.880836859346 --1.39590546489 -0.880838170648 --1.37864854932 -0.880842074752 --1.36139142513 -0.880848541856 --1.34413436055 -0.880857557058 --1.32687690854 -0.880869090557 --1.30961939692 -0.880883172155 --1.29236137867 -0.880899816752 --1.2751032114 -0.880918994546 --1.25784441829 -0.880940720439 --1.24058529735 -0.880951493978 --1.22137337923 -0.880939468741 --1.20215982199 -0.880917936564 --1.18490052223 -0.880898877978 --1.16764193773 -0.88088235259 --1.15038362145 -0.880868375301 --1.13312581181 -0.880857005715 --1.11586812138 -0.880848139525 --1.09861084819 -0.880841836333 --1.08135360479 -0.880838036537 --1.06409665942 -0.880836814642 --1.04683959484 -0.880838170648 --1.02958273888 -0.880842074752 --1.01232561469 -0.880848512053 --0.995068520305 -0.880857527256 --0.977811068296 -0.880869090557 --0.960553556681 -0.880883187056 --0.943295553326 -0.880899831653 --0.926037371159 -0.880918994546 --0.908778548241 -0.880940720439 --0.891519427299 -0.880951493978 --0.872307509184 -0.880939468741 --0.853093966842 -0.880917936564 --0.83583471179 -0.880898877978 --0.818576097488 -0.880882382393 --0.801317736506 -0.880868375301 --0.78405995667 -0.880856975913 --0.766802281142 -0.880848139525 --0.749545007944 -0.880841836333 --0.732287764549 -0.880838036537 --0.715030834079 -0.880836814642 --0.697773769498 -0.880838170648 --0.680516883731 -0.880842104554 --0.663259744644 -0.880848541856 --0.646002650261 -0.880857512355 --0.62874519825 -0.880869075656 --0.611487701535 -0.880883201957 --0.594229698181 -0.880899846554 --0.576971501112 -0.880918994546 --0.559712693095 -0.880940720439 --0.542453601957 -0.880951523781 --0.523241683841 -0.880939498544 --0.504028111696 -0.880917936564 --0.486768826842 -0.880898877978 --0.469510219991 -0.880882382393 --0.452251881361 -0.880868405104 --0.434994086623 -0.880857005715 --0.417736418545 -0.880848139525 --0.400479160249 -0.880841836333 --0.383221909404 -0.880838036537 --0.365964978933 -0.880836814642 --0.348707914353 -0.880838170648 --0.331451013684 -0.880842074752 --0.314193874598 -0.880848541856 --0.296936810017 -0.880857557058 --0.279679365456 -0.880869090557 --0.262421853841 -0.880883157253 --0.245163846761 -0.88089980185 --0.227905660868 -0.880918994546 --0.210646856576 -0.880940720439 --0.193387743085 -0.880951493978 --0.174175813794 -0.898098096251 --0.154957845807 -0.898076340556 --0.137698564678 -0.898057043552 --0.120439950377 -0.898040324449 --0.103181583807 -0.898026198149 --0.0859237648547 -0.898014694452 --0.068666068837 -0.898005709052 --0.0514088002965 -0.897999331355 --0.0341515331529 -0.897995531559 --0.0168945696205 -0.897994279861 -0.00036251707934 -0.897995606065 -0.0176194205414 -0.897999539971 -0.0348765724338 -0.898006111383 -0.0521336663514 -0.898015245795 -0.0693911304697 -0.898026913405 -0.086648657918 -0.898041173816 -0.103906678036 -0.898058012128 -0.121164886281 -0.898077443242 -0.138423711062 -0.898099422455 -0.155682835728 -0.898110300302 -0.174894601107 -0.898098111153 -0.194107994437 -0.898076310754 -0.211367279291 -0.898057028651 -0.228625901043 -0.898040324449 -0.2458842583 -0.898026168346 -0.263142079115 -0.898014649749 -0.280399776995 -0.898005694151 -0.297657035291 -0.897999331355 -0.314914308488 -0.897995501757 -0.332171283662 -0.897994279861 -0.349428370595 -0.897995635867 -0.366685271263 -0.897999569774 -0.383942425251 -0.898006141186 -0.401199527085 -0.898015245795 -0.418456986546 -0.898026913405 -0.435714513064 -0.898041203618 -0.452972531319 -0.89805804193 -0.470230728388 -0.89807741344 -0.487489551306 -0.898099407553 -0.504748694599 -0.898110345006 -0.523960471153 -0.898098155856 -0.543173849583 -0.898076325655 -0.560433119535 -0.898057028651 -0.577691748738 -0.898040324449 -0.594950124621 -0.898026168346 -0.612207934261 -0.898014649749 -0.62946562469 -0.89800567925 -0.646722897887 -0.897999316454 -0.663980171085 -0.897995501757 -0.681237146259 -0.897994250059 -0.698494225741 -0.897995606065 -0.715751111507 -0.897999599576 -0.733008280397 -0.898006141186 -0.750265389681 -0.898015215993 -0.767522841692 -0.898026913405 -0.784780353308 -0.898041173816 -0.802038371563 -0.898058012128 -0.819296568632 -0.89807741344 -0.83655539155 -0.898099392652 -0.853814542294 -0.898110300302 -0.873026311398 -0.898098126054 -0.892239689827 -0.898076325655 -0.90949895978 -0.898057043553 -0.926757588983 -0.898040369153 -0.944015949965 -0.898026198149 -0.961273789406 -0.898014649749 -0.978531479835 -0.898005694151 -0.995788738134 -0.897999331355 -1.01304602623 -0.897995501757 -1.0303029716 -0.897994250059 -1.04756006598 -0.897995606065 -1.06481698155 -0.897999599576 -1.08207413554 -0.898006141186 -1.09933122992 -0.898015215993 -1.11658868194 -0.898026913405 -1.13384622335 -0.898041203618 -1.15110424161 -0.89805804193 -1.16836240888 -0.89807741344 -1.18562123179 -0.898099407553 -1.20288038254 -0.898110315204 -1.22209215164 -0.898098126054 -1.24130555987 -0.898076325655 -1.25856485962 -0.898057028651 -1.27582344412 -0.898040354252 -1.29308179021 -0.898026227951 -1.31033959985 -0.898014679551 -1.32759732008 -0.898005694151 -1.34485462308 -0.897999331355 -1.36211189628 -0.897995501757 -1.37936887145 -0.897994250059 -1.39662593603 -0.897995635867 -1.4138828218 -0.897999599576 -1.43113997579 -0.898006141186 -1.44839707017 -0.898015245795 -1.46565452218 -0.898026913405 -1.48291203379 -0.898041203618 -1.50017008185 -0.89805804193 -1.51742830873 -0.898077473045 -1.53468710184 -0.898099467158 -1.55194622278 -0.898110345006 -1.57115802169 -0.898098126054 -1.59037142992 -0.898076295853 -1.60763067007 -0.898057043553 -1.62488928437 -0.898040339351 -1.64214766026 -0.898026168346 -1.65940546989 -0.898014649749 -1.67666316032 -0.898005694151 -1.69392043352 -0.897999331355 -1.71117770672 -0.897995531559 -1.72843468189 -0.897994279861 -1.74569177627 -0.897995606065 -1.76294866204 -0.897999569774 -1.78020581603 -0.898006141186 -1.79746291041 -0.898015245795 -1.81472039223 -0.898026913405 -1.83197790384 -0.898041173816 -1.8492358923 -0.898058012128 -1.86649414897 -0.89807741344 -1.88375297188 -0.898099392652 -1.90101209282 -0.898110300302 -1.92022386193 -0.898098126054 -1.93943724036 -0.898076325655 -1.95669654012 -0.898057028651 -1.97395518422 -0.898040324449 -1.9912135601 -0.898026198149 -2.00847133994 -0.898014679551 -2.02572900057 -0.89800567925 -2.04298627376 -0.897999316454 -2.06024354696 -0.897995501757 -2.07750052214 -0.897994279861 -2.09475761652 -0.897995635867 -2.11201453209 -0.897999569774 -2.12927168608 -0.898006111383 -2.14652878046 -0.898015215993 -2.16378629208 -0.898026913405 -2.18104380369 -0.898041203618 -2.19830173254 -0.89805804193 -2.21555995941 -0.89807741344 -2.23281884193 -0.898099392652 -2.25007796287 -0.898110300302 -2.26928967237 -0.898098126054 -2.2885030508 -0.898076325655 -2.30576241016 -0.898057028651 -2.32302105427 -0.898040354252 -2.34027934074 -0.898026198149 -2.35753709078 -0.898014649749 -2.37479484081 -0.898005694151 -2.39205217361 -0.897999331355 -2.40930944681 -0.897995501757 -2.42656642199 -0.897994250059 -2.44382345676 -0.897995635867 -2.46108031273 -0.897999629379 -2.47833752632 -0.898006141186 -2.49559462071 -0.898015215993 -2.51285207272 -0.898026913405 -2.53010964394 -0.898041203618 -2.54736769199 -0.89805804193 -2.56462585926 -0.89807741344 -2.58188462257 -0.898099392652 -2.59914380312 -0.898110330105 -2.61835563183 -0.898098155856 -2.63756895065 -0.898076325655 -2.6548281908 -0.898057028651 -2.67208683491 -0.898040354252 -2.68934524059 -0.898026198149 -2.70660305023 -0.898014649749 -2.72386068106 -0.89800567925 -2.74111795425 -0.897999316454 -2.75837522745 -0.897995501757 -2.77563220263 -0.897994250059 -2.79288935661 -0.897995606065 -2.81014627218 -0.897999569774 -2.82740336657 -0.898006141186 -2.84466040135 -0.898015245795 -2.86191785336 -0.898026913405 -2.87917542458 -0.898041173816 -2.89643347264 -0.898058012128 -2.9136916995 -0.89807741344 -2.93095052242 -0.898099392652 -2.94820964336 -0.8981102705 -2.96742141247 -0.898098096251 -2.9866347909 -0.898076340556 -3.00389403105 -0.898057043552 -3.02115267515 -0.898040324449 -3.03841108084 -0.898026198149 -3.05566889048 -0.898014694452 -3.07292658091 -0.898005709052 -3.0901838541 -0.897999331355 -3.1074411273 -0.897995531559 -3.12469804287 -0.897994279861 --3.14123013814 -0.897995606065 --3.12397325039 -0.897999539971 --3.10671615601 -0.898006111383 --3.08945900202 -0.898015245795 --3.07220155001 -0.898026913405 --3.05494403839 -0.898041173816 --3.03768599033 -0.898058012128 --3.02042776346 -0.898077443242 --3.00316894055 -0.898099422455 --2.98590981961 -0.898110300302 --2.9666980505 -0.898098111153 --2.94748467207 -0.898076310754 --2.93022543192 -0.898057028651 --2.91296678782 -0.898040324449 --2.89570838213 -0.898026168346 --2.87845057249 -0.898014649749 --2.86119288206 -0.898005694151 --2.84393566847 -0.897999331355 --2.82667839527 -0.897995501757 --2.8094214201 -0.897994279861 --2.79216432572 -0.897995635867 --2.77490735054 -0.897999569774 --2.75765019655 -0.898006141186 --2.74039310217 -0.898015245795 --2.72313559055 -0.898026913405 --2.70587807894 -0.898041203618 --2.68862015009 -0.89805804193 --2.67136198282 -0.89807741344 --2.6541031003 -0.898099407553 --2.63684391976 -0.898110345006 --2.61763221026 -0.898098155856 --2.59841883183 -0.898076325655 --2.58115947247 -0.898057028651 --2.56390088797 -0.898040324449 --2.54664260149 -0.898026168346 --2.52938479185 -0.898014649749 --2.51212704182 -0.89800567925 --2.49486970902 -0.897999316454 --2.47761243582 -0.897995501757 --2.46035546064 -0.897994250059 --2.44309836626 -0.897995606065 --2.4258415103 -0.897999599576 --2.40858435631 -0.898006141186 --2.39132726192 -0.898015215993 --2.37406980991 -0.898026913405 --2.3568122983 -0.898041173816 --2.33955425024 -0.898058012128 --2.32229602337 -0.89807741344 --2.30503726006 -0.898099392652 --2.28777813912 -0.898110300302 --2.26856631041 -0.898098126054 --2.24935293198 -0.898076325655 --2.23209369183 -0.898057043553 --2.21483504772 -0.898040369153 --2.19757670164 -0.898026198149 --2.1803188324 -0.898014649749 --2.16306114197 -0.898005694151 --2.14580392838 -0.897999331355 --2.12854659558 -0.897995501757 --2.1112896204 -0.897994250059 --2.09403258562 -0.897995606065 --2.07677572966 -0.897999599576 --2.05951857567 -0.898006141186 --2.04226148128 -0.898015215993 --2.02500402927 -0.898026913405 --2.00774645805 -0.898041203618 --1.99048840999 -0.89805804193 --1.97323021292 -0.89807741344 --1.95597139001 -0.898099407553 --1.93871226907 -0.898110315204 --1.91950049997 -0.898098126054 --1.90028709173 -0.898076325655 --1.88302782178 -0.898057028651 --1.86576920748 -0.898040354252 --1.8485108316 -0.898026227951 --1.83125302196 -0.898014679551 --1.81399533153 -0.898005694151 --1.79673805833 -0.897999331355 --1.77948081494 -0.897995501757 --1.76222383976 -0.897994250059 --1.74496674538 -0.897995635867 --1.72770985961 -0.897999599576 --1.71045267582 -0.898006141186 --1.69319558143 -0.898015245795 --1.67593812942 -0.898026913405 --1.65868058801 -0.898041203618 --1.64142259955 -0.89805804193 --1.62416437268 -0.898077473045 --1.60690551996 -0.898099467158 --1.58964639902 -0.898110345006 --1.57043465972 -0.898098126054 --1.55122128129 -0.898076295853 --1.53396198154 -0.898057043553 --1.51670333743 -0.898040339351 --1.49944496155 -0.898026168346 --1.48218715191 -0.898014649749 --1.46492946148 -0.898005694151 --1.44767221808 -0.897999331355 --1.43041494489 -0.897995531559 --1.41315796971 -0.897994279861 --1.39590087533 -0.897995606065 --1.37864395976 -0.897999569774 --1.36138683557 -0.898006141186 --1.34412974119 -0.898015245795 --1.32687228918 -0.898026913405 --1.30961477756 -0.898041173816 --1.29235672951 -0.898058012128 --1.27509853244 -0.89807741344 --1.25783970952 -0.898099392652 --1.24058055878 -0.898110300302 --1.22136878967 -0.898098126054 --1.20215538144 -0.898076325655 --1.18489608169 -0.898057028651 --1.16763749718 -0.898040324449 --1.15037915111 -0.898026198149 --1.13312131166 -0.898014679551 --1.11586362123 -0.89800567925 --1.09860634804 -0.897999316454 --1.08134907484 -0.897995501757 --1.06409209967 -0.897994279861 --1.04683500528 -0.897995635867 --1.02957814932 -0.897999569774 --1.01232102513 -0.898006111383 --0.995063900946 -0.898015215993 --0.977806419134 -0.898026913405 --0.960548892617 -0.898041203618 --0.943290874362 -0.89805804193 --0.926032662392 -0.89807741344 --0.908773839474 -0.898099392652 --0.891514703631 -0.898110300302 --0.872302934527 -0.898098126054 --0.853089556098 -0.898076325655 --0.835830286145 -0.898057028651 --0.818571656942 -0.898040354252 --0.801313281059 -0.898026198149 --0.784055486321 -0.898014649749 --0.76679778099 -0.898005694151 --0.749540492892 -0.897999331355 --0.732283219695 -0.897995501757 --0.715026274323 -0.897994250059 --0.697769194841 -0.897995635867 --0.680512294173 -0.897999629379 --0.663255155087 -0.898006141186 --0.645998030901 -0.898015215993 --0.628740563989 -0.898026913405 --0.611483037472 -0.898041203618 --0.594225019216 -0.89805804193 --0.576966822147 -0.89807741344 --0.559707984328 -0.898099392652 --0.542448848486 -0.898110330105 --0.523237094283 -0.898098155856 --0.504023708403 -0.898076325655 --0.486764408648 -0.898057028651 --0.469505786895 -0.898040354252 --0.452247425914 -0.898026198149 --0.434989608824 -0.898014649749 --0.417731918395 -0.89800567925 --0.400474637747 -0.897999316454 --0.383217372 -0.897995501757 --0.365960434079 -0.897994250059 --0.348703339696 -0.897995606065 --0.331446416676 -0.897999569774 --0.314189262688 -0.898006141186 --0.296932183206 -0.898015245795 --0.279674731195 -0.898026913405 --0.262417197228 -0.898041173816 --0.245159171522 -0.898058012128 --0.227900967002 -0.89807741344 --0.210642140358 -0.898099392652 --0.193383008242 -0.8981102705 --0.174171242863 -0.915236249566 --0.154954019934 -0.915214210748 --0.137694720179 -0.91519472003 --0.120436090976 -0.915177851916 --0.103177711367 -0.915163516998 --0.0859198719263 -0.915151849389 --0.0686621582135 -0.915142804385 --0.0514048757031 -0.915136352181 --0.0341475917958 -0.915132462978 --0.0168906112667 -0.915131226182 -0.00036649219692 -0.915132582188 -0.01762341219 -0.915136560797 -0.0348805799149 -0.915143206716 -0.0521376896649 -0.915152445436 -0.0693951705471 -0.915164262057 -0.0866527166218 -0.915178671479 -0.103910751641 -0.915195688605 -0.121168972924 -0.915215328336 -0.138427812606 -0.915237560868 -0.155686955899 -0.915248587727 -0.174898575991 -0.915236264467 -0.194111820311 -0.915214180946 -0.211371120066 -0.915194675326 -0.228629760444 -0.915177822113 -0.245888143778 -0.915163516998 -0.263145983219 -0.915151849389 -0.280403696001 -0.915142774582 -0.297660969198 -0.915136322379 -0.314918242395 -0.915132462978 -0.332175225019 -0.915131255984 -0.349432341754 -0.915132641792 -0.366689264774 -0.915136620402 -0.383946426213 -0.915143236518 -0.401203542947 -0.915152430535 -0.418461024761 -0.915164247156 -0.435718566179 -0.915178686381 -0.452976599335 -0.915195703507 -0.470234826207 -0.915215328336 -0.487493664026 -0.915237590671 -0.504752799868 -0.91524861753 -0.523964434862 -0.915236279368 -0.543177694082 -0.915214195847 -0.560436978936 -0.915194675326 -0.57769562304 -0.915177822113 -0.594953998923 -0.915163516998 -0.612211823464 -0.915151849389 -0.629469558597 -0.915142759681 -0.646726846695 -0.915136307478 -0.663984134793 -0.915132462978 -0.681241095066 -0.915131226182 -0.698498174548 -0.915132582188 -0.715755090118 -0.9151365906 -0.733012273908 -0.915143236518 -0.750269398094 -0.915152430535 -0.767526865006 -0.915164247156 -0.784784421325 -0.915178686381 -0.802042469383 -0.915195703507 -0.819300681353 -0.915215328336 -0.836559534073 -0.915237575769 -0.853818684817 -0.915248602629 -0.873030290008 -0.915236279368 -0.892243534327 -0.915214195847 -0.909502819181 -0.915194675326 -0.926761433482 -0.915177822113 -0.944019809365 -0.915163516998 -0.961277678609 -0.915151849389 -0.978535398841 -0.915142774582 -0.995792657139 -0.915136322379 -1.01304993034 -0.915132462978 -1.03030693531 -0.915131226182 -1.04756405949 -0.915132582188 -1.06482097506 -0.9151365906 -1.08207812905 -0.915143236518 -1.09933522344 -0.915152430535 -1.11659270525 -0.915164247156 -1.13385027647 -0.915178686381 -1.15110832453 -0.915195733309 -1.16836652159 -0.915215358138 -1.18562534452 -0.915237590671 -1.20288452506 -0.91524861753 -1.22209617495 -0.915236279368 -1.24130940437 -0.915214195847 -1.25856870413 -0.915194675326 -1.27582731843 -0.915177822113 -1.29308566451 -0.915163546801 -1.31034350395 -0.915151879191 -1.32760125399 -0.915142774582 -1.34485855699 -0.915136322379 -1.36211583018 -0.915132462978 -1.37937280536 -0.915131226182 -1.39662989974 -0.91513261199 -1.41388681531 -0.915136620402 -1.4311439991 -0.915143236518 -1.44840112329 -0.915152430535 -1.4656585753 -0.915164247156 -1.48291608691 -0.915178686381 -1.50017413497 -0.915195703507 -1.51743236184 -0.915215358138 -1.53469121456 -0.915237620473 -1.5519503653 -0.91524861753 -1.57116198539 -0.915236279368 -1.59037524462 -0.91521422565 -1.60763451457 -0.915194705129 -1.62489315867 -0.915177822113 -1.64215156436 -0.915163516998 -1.659409374 -0.915151849389 -1.67666709423 -0.915142774582 -1.69392436743 -0.915136322379 -1.71118164062 -0.915132462978 -1.7284386456 -0.915131226182 -1.74569573998 -0.91513261199 -1.76295265555 -0.915136620402 -1.78020980954 -0.915143236518 -1.79746690392 -0.915152430535 -1.81472441554 -0.915164247156 -1.83198195696 -0.915178686381 -1.84923997521 -0.915195703507 -1.86649823189 -0.915215328336 -1.88375708461 -0.915237560868 -1.90101623535 -0.915248587727 -1.92022785544 -0.915236279368 -1.93944108486 -0.915214195847 -1.95670038461 -0.915194675326 -1.97395902872 -0.915177822113 -1.9912174046 -0.915163546801 -2.00847521424 -0.915151879191 -2.02573293448 -0.915142759681 -2.04299020767 -0.915136307478 -2.06024748087 -0.915132462978 -2.07750445604 -0.915131255984 -2.09476155042 -0.915132641792 -2.1120185256 -0.915136620402 -2.12927567959 -0.915143236518 -2.14653277397 -0.915152445436 -2.16379028559 -0.915164262057 -2.18104785681 -0.915178686381 -2.19830584526 -0.915195733309 -2.21556401253 -0.915215358138 -2.23282289505 -0.915237575769 -2.25008207559 -0.915248602629 -2.26929366588 -0.915236279368 -2.2885068655 -0.915214195847 -2.30576622486 -0.915194675326 -2.32302486896 -0.915177822113 -2.34028321504 -0.915163516998 -2.35754108429 -0.915151849389 -2.37479883432 -0.915142774582 -2.39205610752 -0.915136322379 -2.40931338072 -0.915132462978 -2.42657035589 -0.915131226182 -2.44382745028 -0.91513261199 -2.46108436585 -0.915136620402 -2.47834151983 -0.915143221617 -2.49559861422 -0.915152415634 -2.51285612583 -0.915164247156 -2.53011369705 -0.915178686381 -2.54737168551 -0.915195703507 -2.56462991238 -0.915215328336 -2.58188873529 -0.915237575769 -2.59914791584 -0.915248602629 -2.61835956574 -0.915236279368 -2.63757276535 -0.915214195847 -2.6548320651 -0.915194675326 -2.67209070921 -0.915177822113 -2.6893491149 -0.915163516998 -2.70660692454 -0.915151849389 -2.72386461497 -0.915142759681 -2.74112194776 -0.915136307478 -2.75837922096 -0.915132462978 -2.77563619614 -0.915131226182 -2.79289335012 -0.915132582188 -2.81015026569 -0.9151365906 -2.82740741968 -0.915143236518 -2.84466451406 -0.915152445436 -2.86192196607 -0.915164262057 -2.87917947769 -0.915178686381 -2.89643752575 -0.915195733309 -2.91369581223 -0.915215358138 -2.93095469475 -0.915237575769 -2.94821381569 -0.915248572826 -2.96742540598 -0.915236249566 -2.9866386652 -0.915214210748 -3.00389790535 -0.91519472003 -3.02115654945 -0.915177851916 -3.03841495514 -0.915163516998 -3.05567276478 -0.915151849389 -3.07293045521 -0.915142804385 -3.0901877284 -0.915136352181 -3.10744506121 -0.915132462978 -3.12470203638 -0.915131226182 --3.14122614463 -0.915132582188 --3.12396925688 -0.915136560797 --3.10671210289 -0.915143206716 --3.0894548893 -0.915152445436 --3.07219743728 -0.915164262057 --3.05493998527 -0.915178671479 --3.03768193722 -0.915195688605 --3.02042365074 -0.915215328336 --3.00316476822 -0.915237560868 --2.98590564728 -0.915248587727 --2.96669405699 -0.915236264467 --2.94748079777 -0.915214180946 --2.93022155762 -0.915194675326 --2.91296291351 -0.915177822113 --2.89570450783 -0.915163516998 --2.87844669819 -0.915151849389 --2.86118900776 -0.915142774582 --2.84393173456 -0.915136322379 --2.82667440176 -0.915132462978 --2.80941742659 -0.915131255984 --2.7921603322 -0.915132641792 --2.77490335703 -0.915136620402 --2.75764620304 -0.915143236518 --2.74038910866 -0.915152430535 --2.72313159704 -0.915164247156 --2.70587402582 -0.915178686381 --2.68861603737 -0.915195703507 --2.6713578701 -0.915215328336 --2.65409898758 -0.915237590671 --2.63683986664 -0.91524861753 --2.61762827635 -0.915236279368 --2.59841501713 -0.915214195847 --2.58115565777 -0.915194675326 --2.56389701366 -0.915177822113 --2.54663872719 -0.915163516998 --2.52938085794 -0.915151849389 --2.5121230483 -0.915142759681 --2.49486577511 -0.915136307478 --2.47760856152 -0.915132462978 --2.46035158634 -0.915131226182 --2.44309443236 -0.915132582188 --2.42583751679 -0.9151365906 --2.4085803628 -0.915143236518 --2.39132326841 -0.915152430535 --2.3740658164 -0.915164247156 --2.35680824518 -0.915178686381 --2.33955013752 -0.915195703507 --2.32229191065 -0.915215328336 --2.30503314734 -0.915237575769 --2.2877740264 -0.915248602629 --2.2685623765 -0.915236279368 --2.24934911728 -0.915214195847 --2.23208981752 -0.915194675326 --2.21483123302 -0.915177822113 --2.19757282734 -0.915163516998 --2.18031489849 -0.915151849389 --2.16305720806 -0.915142774582 --2.14579993486 -0.915136322379 --2.12854260206 -0.915132462978 --2.11128562689 -0.915131226182 --2.09402859211 -0.915132582188 --2.07677173614 -0.9151365906 --2.05951458216 -0.915143236518 --2.04225748777 -0.915152430535 --2.02499997616 -0.915164247156 --2.00774237513 -0.915178686381 --1.99048432708 -0.915195733309 --1.97322613001 -0.915215358138 --1.95596730709 -0.915237590671 --1.93870815635 -0.91524861753 --1.91949653626 -0.915236279368 --1.90028327704 -0.915214195847 --1.88302397728 -0.915194675326 --1.86576533317 -0.915177822113 --1.84850695729 -0.915163546801 --1.83124914765 -0.915151879191 --1.81399142742 -0.915142774582 --1.79673412442 -0.915136322379 --1.77947685123 -0.915132462978 --1.76221987605 -0.915131226182 --1.74496278167 -0.91513261199 --1.7277058661 -0.915136620402 --1.71044865251 -0.915143236518 --1.69319155812 -0.915152430535 --1.67593410611 -0.915164247156 --1.65867653489 -0.915178686381 --1.64141851663 -0.915195703507 --1.62416028976 -0.915215358138 --1.60690140724 -0.915237620473 --1.5896422565 -0.91524861753 --1.57043066621 -0.915236279368 --1.55121743679 -0.91521422565 --1.53395813704 -0.915194705129 --1.51669949293 -0.915177822113 --1.49944108725 -0.915163516998 --1.48218324781 -0.915151849389 --1.46492555737 -0.915142774582 --1.44766828418 -0.915136322379 --1.43041098118 -0.915132462978 --1.413154006 -0.915131226182 --1.39589691162 -0.91513261199 --1.37863996625 -0.915136620402 --1.36138281226 -0.915143236518 --1.34412571788 -0.915152430535 --1.32686823607 -0.915164247156 --1.30961069465 -0.915178686381 --1.29235264658 -0.915195703507 --1.27509441972 -0.915215328336 --1.2578355968 -0.915237560868 --1.24057644606 -0.915248587727 --1.22136482596 -0.915236279368 --1.20215156675 -0.915214195847 --1.18489223719 -0.915194675326 --1.16763362288 -0.915177822113 --1.1503752768 -0.915163546801 --1.13311743736 -0.915151879191 --1.11585971713 -0.915142759681 --1.09860241413 -0.915136307478 --1.08134511113 -0.915132462978 --1.06408813596 -0.915131255984 --1.04683104157 -0.915132641792 --1.02957415581 -0.915136620402 --1.01231700182 -0.915143236518 --0.995059862732 -0.915152445436 --0.977802366018 -0.915164262057 --0.9605448246 -0.915178686381 --0.943286791444 -0.915195733309 --0.926028564573 -0.915215358138 --0.908769741655 -0.915237575769 --0.891510590911 -0.915248602629 --0.872298955918 -0.915236279368 --0.853085711598 -0.915214195847 --0.835826426744 -0.915194675326 --0.818567812442 -0.915177822113 --0.801309421658 -0.915163516998 --0.784051582217 -0.915151849389 --0.766793861985 -0.915142774582 --0.749536573887 -0.915136322379 --0.732279270888 -0.915132462978 --0.715022295713 -0.915131226182 --0.69776520133 -0.91513261199 --0.680508285761 -0.915136620402 --0.663251131773 -0.915143221617 --0.645994007588 -0.915152415634 --0.628736525774 -0.915164247156 --0.611478984356 -0.915178686381 --0.594220966101 -0.915195703507 --0.576962739229 -0.915215328336 --0.559703871608 -0.915237575769 --0.542444720864 -0.915248602629 --0.523233115673 -0.915236279368 --0.504019871354 -0.915214195847 --0.486760564148 -0.915194675326 --0.469501927495 -0.915177822113 --0.452243551612 -0.915163516998 --0.434985719621 -0.915151849389 --0.417727999389 -0.915142759681 --0.400470711291 -0.915136307478 --0.383213430643 -0.915132462978 --0.36595647037 -0.915131226182 --0.348699361086 -0.915132582188 --0.331442423165 -0.9151365906 --0.314185254276 -0.915143236518 --0.296928152442 -0.915152445436 --0.27967068553 -0.915164262057 --0.262413144111 -0.915178686381 --0.24515510723 -0.915195733309 --0.227896887809 -0.915215358138 --0.210638042539 -0.915237575769 --0.19337888807 -0.915248572826 --0.174167267978 -0.932352662087 --0.154950238764 -0.932330340147 --0.137690920383 -0.932310625911 --0.120432272553 -0.932293593884 --0.103173878044 -0.932279124856 --0.0859160218387 -0.932267323136 --0.0686582913622 -0.932258144021 --0.0514009930193 -0.93225158751 --0.0341436923481 -0.932247698307 --0.0168866966851 -0.932246491313 -0.000370422378182 -0.932247847319 -0.0176273584366 -0.932251870632 -0.0348845431581 -0.932258576155 -0.0521416701376 -0.932267889381 -0.0693991649896 -0.932279840112 -0.0866567250341 -0.932294428348 -0.10391477868 -0.93231163919 -0.121173013002 -0.932331487537 -0.138431869447 -0.93235398829 -0.155691038817 -0.932365134358 -0.174902513623 -0.932352662087 -0.194115608931 -0.932330340147 -0.211374923587 -0.93231061101 -0.228633578867 -0.932293564081 -0.245891973377 -0.932279109955 -0.263149827719 -0.932267323136 -0.280407562852 -0.932258144021 -0.297664865851 -0.932251617312 -0.31492215395 -0.932247728109 -0.332179144025 -0.932246491313 -0.34943626821 -0.932247877121 -0.36669319868 -0.932251900435 -0.383950382471 -0.932258576155 -0.401207521558 -0.932267904282 -0.418465010822 -0.932279855013 -0.435722567141 -0.93229444325 -0.4529806301 -0.932311654091 -0.470238864422 -0.932331517339 -0.487497709692 -0.932354003191 -0.504756860435 -0.932365119457 -0.523968353868 -0.932352662087 -0.543181464076 -0.932330340147 -0.560440763831 -0.93231061101 -0.577699422836 -0.932293578982 -0.594957828522 -0.932279124856 -0.612215667963 -0.932267323136 -0.629473403096 -0.932258144021 -0.646730720997 -0.932251617312 -0.663988023996 -0.932247698307 -0.68124499917 -0.932246461511 -0.698502123356 -0.932247847319 -0.715759068727 -0.932251900435 -0.733016237617 -0.932258605957 -0.750273376703 -0.932267904282 -0.767530873418 -0.932279855013 -0.784788444638 -0.93229444325 -0.802046507597 -0.932311654091 -0.819304734469 -0.932331487537 -0.836563587189 -0.932353973389 -0.853822737933 -0.932365119457 -0.873034209013 -0.932352662087 -0.892247334123 -0.932330340147 -0.909506648779 -0.93231061101 -0.926765263081 -0.932293578982 -0.944023638964 -0.932279124856 -0.961281508207 -0.932267293334 -0.978539273143 -0.932258114218 -0.995796561243 -0.932251617312 -1.01305383444 -0.932247728109 -1.03031086922 -0.932246491313 -1.0475679934 -0.932247847319 -1.06482490897 -0.932251870632 -1.08208209276 -0.932258576155 -1.09933921695 -0.932267904282 -1.11659672857 -0.932279855013 -1.13385429979 -0.93229444325 -1.15111234784 -0.932311698794 -1.16837057471 -0.93233153224 -1.18562942743 -0.932354003191 -1.20288860798 -0.932365149259 -1.22210007906 -0.932352662087 -1.24131315947 -0.932330340147 -1.25857248903 -0.93231061101 -1.27583116293 -0.932293578982 -1.29308953881 -0.932279124856 -1.31034737825 -0.932267323136 -1.32760512829 -0.932258144021 -1.34486243129 -0.932251617312 -1.36211970449 -0.932247698307 -1.37937667966 -0.932246461511 -1.39663380384 -0.932247877121 -1.41389074921 -0.932251930237 -1.43114796281 -0.932258605957 -1.448405087 -0.932267904282 -1.46566253901 -0.932279855013 -1.48292008043 -0.93229444325 -1.50017815828 -0.932311668992 -1.51743641495 -0.932331502438 -1.53469526768 -0.932353973389 -1.55195444822 -0.932365119457 -1.5711659193 -0.932352662087 -1.59037902951 -0.932330369949 -1.60763835907 -0.932310640812 -1.62489700317 -0.932293578982 -1.64215540886 -0.932279139757 -1.6594132483 -0.932267338037 -1.67667096853 -0.932258144021 -1.69392824173 -0.932251617312 -1.71118554473 -0.932247728109 -1.72844257951 -0.932246491313 -1.74569970369 -0.932247877121 -1.76295661926 -0.932251900435 -1.78021377325 -0.932258576155 -1.79747089744 -0.932267904282 -1.81472840905 -0.932279855013 -1.83198598027 -0.93229444325 -1.84924402833 -0.932311668992 -1.8665022552 -0.932331502438 -1.88376113773 -0.93235398829 -1.90102031827 -0.932365134358 -1.92023178935 -0.932352662087 -1.93944486976 -0.932330340147 -1.95670416951 -0.93231061101 -1.97396284342 -0.932293564081 -1.9912212193 -0.932279109955 -2.00847905874 -0.932267293334 -2.02573680878 -0.932258114218 -2.04299408197 -0.932251617312 -2.06025135517 -0.932247698307 -2.07750838995 -0.932246461511 -2.09476554394 -0.932247906923 -2.11202245951 -0.932251930237 -2.1292796135 -0.932258576155 -2.14653676749 -0.932267919183 -2.1637942791 -0.932279869914 -2.18105185032 -0.93229444325 -2.19830989838 -0.932311683893 -2.21556806564 -0.932331517339 -2.23282694817 -0.932353973389 -2.25008618832 -0.932365119457 -2.2692976594 -0.932352662087 -2.2885106802 -0.932330340147 -2.30576997995 -0.93231061101 -2.32302862406 -0.932293578982 -2.34028702974 -0.932279124856 -2.35754495859 -0.932267323136 -2.37480270863 -0.932258144021 -2.39205998182 -0.932251617312 -2.40931731462 -0.932247698307 -2.4265742898 -0.932246461511 -2.44383138418 -0.932247847319 -2.46108835936 -0.932251870632 -2.47834551334 -0.932258561254 -2.49560260773 -0.932267889381 -2.51286011934 -0.932279855013 -2.53011769057 -0.93229444325 -2.54737567902 -0.932311668992 -2.56463396549 -0.932331502438 -2.58189284802 -0.932354003191 -2.59915196896 -0.932365149259 -2.61836344004 -0.932352662087 -2.63757658005 -0.932330340147 -2.65483593941 -0.93231061101 -2.67209458351 -0.932293578982 -2.6893529892 -0.932279124856 -2.70661079884 -0.932267323136 -2.72386848927 -0.932258144021 -2.74112582207 -0.932251617312 -2.75838315487 -0.932247698307 -2.77564013004 -0.932246461511 -2.79289722443 -0.932247877121 -2.81015414 -0.932251900435 -2.82741135359 -0.932258576155 -2.84466850757 -0.932267919183 -2.86192595959 -0.932279869914 -2.8791834712 -0.93229444325 -2.89644157887 -0.932311698794 -2.91369986534 -0.93233153224 -2.93095868826 -0.932353973389 -2.9482178092 -0.932365119457 -2.96742928028 -0.932352662087 -2.98664242029 -0.932330340147 -3.00390172004 -0.932310625911 -3.02116036415 -0.932293593884 -3.03841876984 -0.932279124856 -3.05567663908 -0.932267323136 -3.07293432951 -0.932258144021 -3.09019160271 -0.93225158751 -3.10744893551 -0.932247698307 -3.12470597029 -0.932246491313 --3.14122221072 -0.932247847319 --3.12396532297 -0.932251870632 --3.10670810938 -0.932258576155 --3.08945095539 -0.932267889381 --3.07219350338 -0.932279840112 --3.05493599176 -0.932294428348 --3.0376778841 -0.93231163919 --3.02041959763 -0.932331487537 --3.00316077471 -0.93235398829 --2.98590159416 -0.932365134358 --2.96669012308 -0.932352662087 --2.94747704267 -0.932330340147 --2.93021774292 -0.93231061101 --2.91295909882 -0.932293564081 --2.89570069313 -0.932279109955 --2.87844282389 -0.932267323136 --2.86118513346 -0.932258144021 --2.84392786026 -0.932251617312 --2.82667052746 -0.932247728109 --2.80941349268 -0.932246491313 --2.7921563983 -0.932247877121 --2.77489948273 -0.932251900435 --2.75764226914 -0.932258576155 --2.74038511515 -0.932267904282 --2.72312760353 -0.932279855013 --2.70587003231 -0.93229444325 --2.68861198425 -0.932311654091 --2.67135381699 -0.932331517339 --2.65409493446 -0.932354003191 --2.63683575392 -0.932365119457 --2.61762428284 -0.932352662087 --2.59841120243 -0.932330340147 --2.58115190267 -0.93231061101 --2.56389325857 -0.932293578982 --2.54663491249 -0.932279124856 --2.52937698364 -0.932267323136 --2.512119174 -0.932258144021 --2.49486190081 -0.932251617312 --2.47760468722 -0.932247698307 --2.46034771204 -0.932246461511 --2.44309049845 -0.932247847319 --2.42583352327 -0.932251900435 --2.40857636929 -0.932258605957 --2.3913192749 -0.932267904282 --2.37406182289 -0.932279855013 --2.35680425167 -0.93229444325 --2.33954614401 -0.932311654091 --2.32228785753 -0.932331487537 --2.30502903461 -0.932353973389 --2.28776991367 -0.932365119457 --2.26855844259 -0.932352662087 --2.24934530258 -0.932330340147 --2.23208594322 -0.93231061101 --2.21482735872 -0.932293578982 --2.19756901264 -0.932279124856 --2.1803111434 -0.932267293334 --2.16305339336 -0.932258114218 --2.14579606056 -0.932251617312 --2.12853872776 -0.932247728109 --2.11128175259 -0.932246491313 --2.0940246582 -0.932247847319 --2.07676774263 -0.932251870632 --2.05951058865 -0.932258576155 --2.04225349426 -0.932267904282 --2.02499598265 -0.932279855013 --2.00773835182 -0.93229444325 --1.99048027396 -0.932311698794 --1.97322207689 -0.93233153224 --1.95596325397 -0.932354003191 --1.93870410323 -0.932365149259 --1.91949263215 -0.932352662087 --1.90027949214 -0.932330340147 --1.88302016258 -0.93231061101 --1.86576151848 -0.932293578982 --1.84850311279 -0.932279124856 --1.83124527335 -0.932267323136 --1.81398755312 -0.932258144021 --1.79673022032 -0.932251617312 --1.77947291732 -0.932247698307 --1.76221594215 -0.932246461511 --1.74495881796 -0.932247877121 --1.72770190239 -0.932251930237 --1.7104447186 -0.932258605957 --1.69318759441 -0.932267904282 --1.6759301126 -0.932279855013 --1.65867254138 -0.93229444325 --1.64141449332 -0.932311668992 --1.62415626645 -0.932331502438 --1.60689738393 -0.932353973389 --1.58963820338 -0.932365119457 --1.5704267323 -0.932352662087 --1.5512136519 -0.932330369949 --1.53395435214 -0.932310640812 --1.51669567823 -0.932293578982 --1.49943727255 -0.932279139757 --1.48217943311 -0.932267338037 --1.46492171287 -0.932258144021 --1.44766440988 -0.932251617312 --1.43040707707 -0.932247728109 --1.4131500721 -0.932246491313 --1.39589297771 -0.932247877121 --1.37863603234 -0.932251900435 --1.36137884855 -0.932258576155 --1.34412172437 -0.932267904282 --1.32686421275 -0.932279855013 --1.30960664153 -0.93229444325 --1.29234859347 -0.932311668992 --1.2750903666 -0.932331502438 --1.25783151388 -0.93235398829 --1.24057236314 -0.932365134358 --1.22136092186 -0.932352662087 --1.20214781165 -0.932330340147 --1.18488845229 -0.93231061101 --1.16762980819 -0.932293564081 --1.15037143231 -0.932279109955 --1.13311359286 -0.932267293334 --1.11585584283 -0.932258114218 --1.09859851003 -0.932251617312 --1.08134123683 -0.932247698307 --1.06408426166 -0.932246461511 --1.04682713747 -0.932247906923 --1.0295701921 -0.932251930237 --1.01231300831 -0.932258576155 --0.995055899024 -0.932267919183 --0.977798402309 -0.932279869914 --0.960540831089 -0.93229444325 --0.943282768131 -0.932311683893 --0.926024526358 -0.932331517339 --0.908765688539 -0.932353973389 --0.891506522894 -0.932365119457 --0.872295036912 -0.932352662087 --0.853081941605 -0.932330340147 --0.835822626948 -0.93231061101 --0.818563997745 -0.932293578982 --0.80130559206 -0.932279124856 --0.784047722817 -0.932267323136 --0.766790002585 -0.932258144021 --0.749532684684 -0.932251617312 --0.732275366784 -0.932247698307 --0.715018376708 -0.932246461511 --0.697761267423 -0.932247847319 --0.680504336953 -0.932251870632 --0.663247153163 -0.932258561254 --0.645990028978 -0.932267889381 --0.628732532263 -0.932279855013 --0.611474975943 -0.93229444325 --0.594216927886 -0.932311668992 --0.576958686113 -0.932331502438 --0.559699818492 -0.932354003191 --0.542440652847 -0.932365149259 --0.523229181767 -0.932352662087 --0.504016079008 -0.932330340147 --0.486756764352 -0.93231061101 --0.469498105347 -0.932293578982 --0.452239729464 -0.932279124856 --0.434981882572 -0.932267323136 --0.417724139988 -0.932258144021 --0.400466836989 -0.932251617312 --0.383209533989 -0.932247698307 --0.365952551365 -0.932246461511 --0.34869543463 -0.932247877121 --0.331438489258 -0.932251900435 --0.314181298017 -0.932258576155 --0.296924181282 -0.932267919183 --0.279666692018 -0.932279869914 --0.262409120798 -0.93229444325 --0.245151069015 -0.932311698794 --0.227892838419 -0.93233153224 --0.210633981973 -0.932353973389 --0.193374812603 -0.932365119457 --0.174163337797 -0.949449941516 --0.154946494848 -0.94942741096 --0.13768716529 -0.949407458305 --0.12042850256 -0.949390217662 --0.103170087561 -0.949375614524 --0.0859122183174 -0.949363708496 --0.0686544729396 -0.949354410171 --0.051397155039 -0.949347764253 --0.0341398380697 -0.94934386015 --0.0168828270398 -0.949342638254 -0.000374307390303 -0.949344009161 -0.0176312597468 -0.949348092079 -0.0348884612322 -0.949354842305 -0.0521456031128 -0.949364244938 -0.069403112866 -0.94937634468 -0.086660688743 -0.949391126633 -0.103918761015 -0.949408531189 -0.121177015826 -0.949428573251 -0.138435889035 -0.949451312423 -0.155695073307 -0.949462547898 -0.174906402826 -0.949449926615 -0.194119356573 -0.949427396059 -0.211378682405 -0.949407473206 -0.228637348861 -0.949390217662 -0.245895761997 -0.949375599623 -0.263153634966 -0.949363678694 -0.280411385 -0.949354410171 -0.2976687029 -0.949347823858 -0.31492601335 -0.949343889952 -0.332183025777 -0.949342638254 -0.349440157413 -0.949344009161 -0.366697095334 -0.949348092079 -0.383954301477 -0.949354842305 -0.401211455464 -0.94936427474 -0.41846896708 -0.949376374483 -0.435726538301 -0.949391126633 -0.45298460871 -0.949408531189 -0.470242850482 -0.949428573251 -0.487501718104 -0.949451282621 -0.5047609061 -0.949462518096 -0.523972243071 -0.949449926615 -0.543185189366 -0.949427396059 -0.560444518924 -0.949407473206 -0.577703207731 -0.949390232563 -0.594961628318 -0.949375614524 -0.612219467759 -0.949363678694 -0.629477202892 -0.94935439527 -0.646734550595 -0.949347808957 -0.663991868496 -0.94934386015 -0.681248873472 -0.949342608452 -0.69850602746 -0.949344009161 -0.715762972832 -0.949348121882 -0.733020171523 -0.949354872108 -0.750277325511 -0.94936427474 -0.767534837127 -0.949376374483 -0.784792408347 -0.949391126633 -0.802050471306 -0.949408531189 -0.81930872798 -0.949428573251 -0.836567595601 -0.949451282621 -0.853826761246 -0.949462518096 -0.873038083315 -0.949449926615 -0.892251074314 -0.949427396059 -0.909510418773 -0.949407473206 -0.926769062877 -0.949390232563 -0.944027453661 -0.949375614524 -0.961285322905 -0.949363648892 -0.97854308784 -0.949354380369 -0.995800405742 -0.949347838759 -1.01305770874 -0.949343904853 -1.03031471372 -0.949342638254 -1.0475718677 -0.949344009161 -1.06482881307 -0.949348092079 -1.08208599687 -0.949354872108 -1.09934315085 -0.949364304543 -1.11660066247 -0.949376374483 -1.13385823369 -0.949391126633 -1.15111631155 -0.94940854609 -1.16837456822 -0.94942855835 -1.18563345075 -0.949451282621 -1.20289263129 -0.949462547898 -1.22210392356 -0.949449926615 -1.24131688476 -0.949427396059 -1.25857624412 -0.949407473206 -1.27583491802 -0.949390247464 -1.29309332371 -0.949375629425 -1.31035116315 -0.949363678694 -1.32760891318 -0.949354410171 -1.34486624599 -0.949347838759 -1.36212354899 -0.949343875051 -1.37938055396 -0.949342608452 -1.39663770795 -0.949344038963 -1.41389468312 -0.949348151684 -1.43115189671 -0.949354872108 -1.4484090209 -0.94936427474 -1.46566650271 -0.949376374483 -1.48292407394 -0.949391126633 -1.50018215179 -0.94940854609 -1.51744043827 -0.94942855835 -1.53469929099 -0.949451252818 -1.55195847153 -0.949462518096 -1.5711698234 -0.949449926615 -1.5903827548 -0.949427396059 -1.60764208436 -0.949407473206 -1.62490075827 -0.949390247464 -1.64215919375 -0.949375629425 -1.659417063 -0.949363678694 -1.67667478323 -0.949354410171 -1.69393208623 -0.949347823858 -1.71118941903 -0.949343889952 -1.72844645381 -0.949342638254 -1.74570357799 -0.949344009161 -1.76296049356 -0.949348092079 -1.78021767736 -0.949354842305 -1.79747483134 -0.94936427474 -1.81473234296 -0.949376374483 -1.83198991418 -0.949391126633 -1.84924799204 -0.94940854609 -1.86650624871 -0.949428588152 -1.88376513124 -0.949451312423 -1.90102431178 -0.949462547898 -1.92023563385 -0.949449926615 -1.93944859505 -0.949427396059 -1.9567079246 -0.949407473206 -1.97396659851 -0.949390217662 -1.991225034 -0.949375599623 -2.00848293304 -0.949363648892 -2.02574062347 -0.949354365468 -2.04299789667 -0.949347823858 -2.06025522948 -0.949343875051 -2.07751226425 -0.949342608452 -2.09476941824 -0.949344038963 -2.11202633381 -0.949348121882 -2.1292835474 -0.949354842305 -2.14654070139 -0.94936427474 -2.16379821301 -0.949376374483 -2.18105584383 -0.949391126633 -2.19831389189 -0.949408531189 -2.21557205915 -0.949428543449 -2.23283094168 -0.949451252818 -2.25009018183 -0.949462518096 -2.2693015337 -0.949449926615 -2.28851443529 -0.949427396059 -2.30577373505 -0.949407473206 -2.32303243875 -0.949390232563 -2.34029084444 -0.949375614524 -2.35754871368 -0.949363708496 -2.37480652332 -0.949354439974 -2.39206385612 -0.949347823858 -2.40932112932 -0.94934386015 -2.42657810449 -0.949342608452 -2.44383525848 -0.949344009161 -2.46109223366 -0.949348092079 -2.47834944725 -0.949354872108 -2.49560660124 -0.949364304543 -2.51286405325 -0.949376374483 -2.53012162447 -0.949391126633 -2.54737973213 -0.949408531189 -2.56463801861 -0.949428543449 -2.58189690113 -0.949451282621 -2.59915602207 -0.949462547898 -2.61836731434 -0.949449926615 -2.63758033514 -0.949427396059 -2.6548396945 -0.949407473206 -2.6720983386 -0.949390232563 -2.68935674429 -0.949375614524 -2.70661455393 -0.949363678694 -2.72387230396 -0.949354410171 -2.74112963676 -0.949347838759 -2.75838696957 -0.949343875051 -2.77564400434 -0.949342608452 -2.79290109873 -0.949344038963 -2.8101580739 -0.949348121882 -2.8274152875 -0.949354842305 -2.84467238188 -0.94936427474 -2.8619298935 -0.949376374483 -2.87918746472 -0.949391126633 -2.89644557238 -0.94940854609 -2.91370385885 -0.94942855835 -2.93096268177 -0.949451252818 -2.94822186232 -0.949462518096 -2.96743321419 -0.949449941516 -2.98664617539 -0.94942741096 -3.00390547514 -0.949407458305 -3.02116411924 -0.949390217662 -3.03842258453 -0.949375614524 -3.05568051338 -0.949363708496 -3.07293820381 -0.949354410171 -3.09019547701 -0.949347764253 -3.10745280981 -0.94934386015 -3.12470984459 -0.949342638254 --3.14121833642 -0.949344009161 --3.12396138907 -0.949348092079 --3.10670417547 -0.949354842305 --3.08944708109 -0.949364244938 --3.07218956947 -0.94937634468 --3.05493199825 -0.949391126633 --3.03767389059 -0.949408531189 --3.02041560412 -0.949428573251 --3.0031567812 -0.949451312423 --2.98589754105 -0.949462547898 --2.96668618918 -0.949449926615 --2.94747328758 -0.949427396059 --2.93021398782 -0.949407473206 --2.91295534372 -0.949390217662 --2.89569687844 -0.949375599623 --2.87843894959 -0.949363678694 --2.86118125916 -0.949354410171 --2.84392398596 -0.949347823858 --2.82666665316 -0.949343889952 --2.80940961838 -0.949342638254 --2.792152524 -0.949344009161 --2.77489560843 -0.949348092079 --2.75763839483 -0.949354842305 --2.74038124084 -0.94936427474 --2.72312366962 -0.949376374483 --2.7058660388 -0.949391126633 --2.68860799074 -0.949408531189 --2.67134982348 -0.949428573251 --2.65409094095 -0.949451282621 --2.6368317008 -0.949462518096 --2.61762034893 -0.949449926615 --2.59840744734 -0.949427396059 --2.58114814758 -0.949407473206 --2.56388944388 -0.949390232563 --2.54663103819 -0.949375614524 --2.52937316895 -0.949363678694 --2.51211541891 -0.94935439527 --2.49485808611 -0.949347808957 --2.47760081291 -0.94934386015 --2.46034383774 -0.949342608452 --2.44308662415 -0.949344009161 --2.42582964897 -0.949348121882 --2.40857243538 -0.949354872108 --2.39131528139 -0.94936427474 --2.37405782938 -0.949376374483 --2.35680025816 -0.949391126633 --2.3395421505 -0.949408531189 --2.32228386402 -0.949428573251 --2.3050249815 -0.949451282621 --2.28776586056 -0.949462518096 --2.26855456829 -0.949449926615 --2.24934154749 -0.949427396059 --2.23208218813 -0.949407473206 --2.21482354403 -0.949390232563 --2.19756519795 -0.949375614524 --2.18030738831 -0.949363648892 --2.16304957867 -0.949354380369 --2.14579224587 -0.949347838759 --2.12853491306 -0.949343904853 --2.11127787829 -0.949342638254 --2.0940207839 -0.949344009161 --2.07676386833 -0.949348092079 --2.05950665474 -0.949354872108 --2.04224950075 -0.949364304543 --2.02499204874 -0.949376374483 --2.00773444772 -0.949391126633 --1.99047631025 -0.94940854609 --1.97321805358 -0.94942855835 --1.95595920086 -0.949451282621 --1.93870005012 -0.949462547898 --1.91948872805 -0.949449926615 --1.90027573705 -0.949427396059 --1.88301637769 -0.949407473206 --1.86575773358 -0.949390247464 --1.8484993279 -0.949375629425 --1.83124145866 -0.949363678694 --1.81398373842 -0.949354410171 --1.79672640562 -0.949347838759 --1.77946907282 -0.949343875051 --1.76221206784 -0.949342608452 --1.74495491386 -0.949344038963 --1.72769796848 -0.949348151684 --1.7104408145 -0.949354872108 --1.6931836605 -0.94936427474 --1.67592611909 -0.949376374483 --1.65866854787 -0.949391126633 --1.64141049981 -0.94940854609 --1.62415227294 -0.94942855835 --1.60689339041 -0.949451252818 --1.58963420987 -0.949462518096 --1.570422858 -0.949449926615 --1.5512098968 -0.949427396059 --1.53395059705 -0.949407473206 --1.51669189334 -0.949390247464 --1.49943345785 -0.949375629425 --1.48217561841 -0.949363678694 --1.46491786837 -0.949354410171 --1.44766053557 -0.949347823858 --1.43040323258 -0.949343889952 --1.4131462276 -0.949342638254 --1.39588910341 -0.949344009161 --1.37863215804 -0.949348092079 --1.36137494445 -0.949354842305 --1.34411779046 -0.94936427474 --1.32686027884 -0.949376374483 --1.30960270762 -0.949391126633 --1.29234462976 -0.94940854609 --1.27508637309 -0.949428588152 --1.25782749057 -0.949451312423 --1.24056831002 -0.949462547898 --1.22135701775 -0.949449926615 --1.20214405656 -0.949427396059 --1.1848846972 -0.949407473206 --1.1676260531 -0.949390217662 --1.15036764741 -0.949375599623 --1.13310977817 -0.949363648892 --1.11585202813 -0.949354365468 --1.09859469533 -0.949347823858 --1.08133739233 -0.949343875051 --1.06408038735 -0.949342608452 --1.04682323337 -0.949344038963 --1.02956625819 -0.949348121882 --1.0123090744 -0.949354842305 --0.995051965119 -0.94936427474 --0.977794468403 -0.949376374483 --0.960536882281 -0.949391126633 --0.94327878952 -0.949408531189 --0.926020532846 -0.949428543449 --0.908761680126 -0.949451252818 --0.891502499581 -0.949462518096 --0.872291147709 -0.949449926615 --0.853078201413 -0.949427396059 --0.835818886757 -0.949407473206 --0.818560212851 -0.949390232563 --0.801301777363 -0.949375614524 --0.784043908119 -0.949363708496 --0.766786172986 -0.949354439974 --0.749528855085 -0.949347823858 --0.732271537185 -0.94934386015 --0.715014517307 -0.949342608452 --0.69775737822 -0.949344009161 --0.680500432849 -0.949348092079 --0.663243249059 -0.949354872108 --0.645986109972 -0.949364304543 --0.628728583455 -0.949376374483 --0.611470997333 -0.949391126633 --0.594212919474 -0.949408531189 --0.576954677701 -0.949428543449 --0.559695810079 -0.949451282621 --0.542436614633 -0.949462547898 --0.523225277663 -0.949449926615 --0.504012331367 -0.949427396059 --0.486753009259 -0.949407473206 --0.469494335353 -0.949390232563 --0.452235937118 -0.949375614524 --0.434978075326 -0.949363678694 --0.417720325291 -0.949354410171 --0.40046299994 -0.949347838759 --0.383205682039 -0.949343875051 --0.365948684513 -0.949342608452 --0.348691545427 -0.949344038963 --0.331434585154 -0.949348121882 --0.314177379012 -0.949354842305 --0.296920239925 -0.94936427474 --0.27966273576 -0.949376374483 --0.262405149639 -0.949391126633 --0.24514707923 -0.94940854609 --0.227888833732 -0.94942855835 --0.210629962385 -0.949451252818 --0.193370781839 -0.949462518096 --0.174159452319 -0.966559931636 --0.154941800982 -0.966537177563 --0.137682452798 -0.966517060995 --0.120423771441 -0.966499641538 --0.103165334091 -0.966484859586 --0.0859074462205 -0.96647284925 --0.0686496831476 -0.966463491321 --0.0513923438266 -0.966456800699 --0.0341350068338 -0.966452807188 --0.0168779760133 -0.966451525688 -0.00037917890586 -0.9664529562 -0.0176361519843 -0.966457098722 -0.0348933725618 -0.966463893652 -0.0521505335346 -0.966473415494 -0.0694080665707 -0.966485664248 -0.0866656657308 -0.966500550508 -0.103923751041 -0.966518133879 -0.121182024479 -0.966538399458 -0.138440921903 -0.966561317444 -0.1557001248 -0.966572657227 -0.174911275506 -0.966559916735 -0.194124050439 -0.966537162662 -0.211383394897 -0.966517046094 -0.228642076254 -0.966499626637 -0.245900522917 -0.966484859586 -0.263158418238 -0.966472804547 -0.280416175723 -0.966463446617 -0.297673508525 -0.966456785798 -0.314930841327 -0.966452792287 -0.332187876105 -0.966451525688 -0.349445030093 -0.9664529562 -0.366701997816 -0.966457098722 -0.38395922631 -0.966463893652 -0.401216387749 -0.966473415494 -0.418473921716 -0.966485649347 -0.435731522739 -0.966500550509 -0.452989600599 -0.966518118977 -0.470247864723 -0.966538369656 -0.487506762147 -0.966561347246 -0.504765972495 -0.96657268703 -0.52397711575 -0.966559916735 -0.543189883232 -0.966537162662 -0.560449257493 -0.966517046094 -0.577707961202 -0.966499626637 -0.594966381788 -0.966484859586 -0.612224251032 -0.966472804547 -0.629482015967 -0.966463431716 -0.64673936367 -0.966456770897 -0.663996696472 -0.966452792287 -0.681253731251 -0.966451525688 -0.69851090014 -0.966452926397 -0.715767860412 -0.96645706892 -0.733025074005 -0.966463893652 -0.750282242894 -0.966473415494 -0.767539769411 -0.966485649347 -0.784797355533 -0.966500550509 -0.802055463195 -0.966518118977 -0.819313749671 -0.966538399458 -0.836572632193 -0.966561377048 -0.853831842542 -0.96657268703 -0.873042985797 -0.966559916735 -0.89225576818 -0.966537162662 -0.909515112639 -0.966517046094 -0.926773786545 -0.966499626637 -0.944032222033 -0.966484859586 -0.961290106177 -0.966472804547 -0.978547871113 -0.966463446617 -0.995805218815 -0.966456800699 -1.01306253672 -0.966452807188 -1.03031954169 -0.966451525688 -1.04757675528 -0.966452926397 -1.06483373046 -0.96645706892 -1.08209091425 -0.966463923454 -1.09934809804 -0.966473445296 -1.11660560965 -0.966485649347 -1.13386318088 -0.966500550509 -1.15112128854 -0.966518118977 -1.16837957501 -0.966538339854 -1.18563848734 -0.966561287641 -1.20289769768 -0.966572657227 -1.22210881114 -0.966559946537 -1.24132159352 -0.966537192464 -1.25858098269 -0.966517060995 -1.27583962679 -0.966499656439 -1.29309803248 -0.966484874487 -1.31035593152 -0.966472804547 -1.32761371136 -0.966463446617 -1.34487104416 -0.966456800699 -1.36212837696 -0.966452807188 -1.37938544154 -0.966451525688 -1.39664259553 -0.9664529562 -1.4138995707 -0.966457128525 -1.4311567843 -0.966463923454 -1.44841393828 -0.966473415494 -1.4656714797 -0.966485649347 -1.48292908072 -0.966500550509 -1.50018715858 -0.966518118977 -1.51744544506 -0.966538339854 -1.53470432758 -0.966561287641 -1.55196350813 -0.966572657227 -1.57117468119 -0.966559946537 -1.59038743377 -0.966537207365 -1.60764676333 -0.966517075897 -1.62490546703 -0.966499656439 -1.64216393232 -0.966484859586 -1.65942183137 -0.966472789646 -1.6766795814 -0.966463416815 -1.69393691421 -0.966456755996 -1.71119424701 -0.966452792287 -1.72845128178 -0.966451525688 -1.74570843577 -0.966452926397 -1.76296538114 -0.96645706892 -1.78022259474 -0.966463893652 -1.79747977853 -0.966473415494 -1.81473731994 -0.966485649347 -1.83199489116 -0.966500550509 -1.84925296902 -0.96651814878 -1.8665112555 -0.966538399458 -1.88377013803 -0.966561347246 -1.90102934837 -0.96657268703 -1.92024049163 -0.966559946537 -1.93945327401 -0.966537192464 -1.95671263337 -0.966517060995 -1.97397130728 -0.966499641538 -1.99122977257 -0.966484859586 -2.00848770141 -0.966472804547 -2.02574545145 -0.966463431716 -2.04300278425 -0.966456785798 -2.06026011705 -0.966452807188 -2.07751709223 -0.966451525688 -2.09477424622 -0.9664529562 -2.112031281 -0.966457098722 -2.12928855419 -0.966463893652 -2.14654564858 -0.966473415494 -2.16380316019 -0.966485649347 -2.18106079102 -0.966500550509 -2.19831883907 -0.96651814878 -2.21557706594 -0.966538369656 -2.23283594847 -0.966561287641 -2.25009518862 -0.966572657227 -2.26930636167 -0.966559916735 -2.28851914406 -0.966537162662 -2.30577850342 -0.966517046094 -2.32303720713 -0.966499626637 -2.34029567241 -0.966484859586 -2.35755354166 -0.966472834349 -2.37481129169 -0.96646347642 -2.3920686245 -0.966456785798 -2.4093258977 -0.966452792287 -2.42658293247 -0.966451525688 -2.44384014606 -0.966452926397 -2.46109712124 -0.96645706892 -2.47835433483 -0.966463923454 -2.49561148882 -0.966473445296 -2.51286900043 -0.966485649347 -2.53012663126 -0.966500550509 -2.54738473892 -0.966518104076 -2.5646430254 -0.966538354755 -2.58190190792 -0.966561347246 -2.59916102886 -0.96657268703 -2.61837214232 -0.966559946537 -2.6375849843 -0.966537192464 -2.65484434366 -0.966517046094 -2.67210304737 -0.966499626637 -2.68936151266 -0.966484859586 -2.7066193223 -0.966472804547 -2.72387707234 -0.966463446617 -2.74113440514 -0.966456800699 -2.75839179754 -0.966452807188 -2.77564889192 -0.966451525688 -2.79290598631 -0.966452926397 -2.81016296149 -0.96645706892 -2.82742017508 -0.966463893652 -2.84467732907 -0.966473415494 -2.86193490029 -0.966485649347 -2.8791924715 -0.966500550509 -2.89645057917 -0.966518118977 -2.91370886564 -0.966538339854 -2.93096774817 -0.966561287641 -2.94822698832 -0.966572657227 -2.96743816137 -0.966559931636 -2.98665088415 -0.966537177563 -3.00391018391 -0.966517060995 -3.02116888761 -0.966499641538 -3.0384273529 -0.966484859586 -3.05568528176 -0.96647284925 -3.07294303179 -0.966463491321 -3.09020036459 -0.966456800699 -3.10745769739 -0.966452807188 -3.12471467257 -0.966451525688 --3.14121350844 -0.9664529562 --3.12395650148 -0.966457098722 --3.10669928789 -0.966463893652 --3.0894421339 -0.966473415494 --3.07218456268 -0.966485664248 --3.05492699146 -0.966500550508 --3.0376688838 -0.966518133879 --3.02041059732 -0.966538399458 --3.0031517148 -0.966561317444 --2.98589247465 -0.966572657227 --2.96668130159 -0.966559916735 --2.94746857882 -0.966537162662 --2.93020927906 -0.966517046094 --2.91295057535 -0.966499626637 --2.89569211006 -0.966484859586 --2.87843418121 -0.966472804547 --2.86117643118 -0.966463446617 --2.84391909838 -0.966456785798 --2.82666176557 -0.966452792287 --2.8094047904 -0.966451525688 --2.79214769602 -0.9664529562 --2.77489072085 -0.966457098722 --2.75763344765 -0.966463893652 --2.74037629366 -0.966473415494 --2.72311878205 -0.966485649347 --2.70586115122 -0.966500550509 --2.68860304356 -0.966518118977 --2.67134481669 -0.966538369656 --2.65408593416 -0.966561347246 --2.63682669401 -0.96657268703 --2.61761552095 -0.966559916735 --2.59840273857 -0.966537162662 --2.58114337921 -0.966517046094 --2.56388467551 -0.966499626637 --2.54662626982 -0.966484859586 --2.52936840057 -0.966472804547 --2.51211065054 -0.966463431716 --2.49485331774 -0.966456770897 --2.47759598494 -0.966452792287 --2.46033895016 -0.966451525688 --2.44308173656 -0.966452926397 --2.42582476139 -0.96645706892 --2.4085675478 -0.966463893652 --2.39131039381 -0.966473415494 --2.37405288219 -0.966485649347 --2.35679531097 -0.966500550509 --2.33953720331 -0.966518118977 --2.32227885723 -0.966538399458 --2.30501997471 -0.966561377048 --2.28776079416 -0.96657268703 --2.26854968071 -0.966559916735 --2.24933689833 -0.966537162662 --2.23207753897 -0.966517046094 --2.21481889487 -0.966499626637 --2.19756042958 -0.966484859586 --2.18030256033 -0.966472804547 --2.1630448103 -0.966463446617 --2.14578747749 -0.966456800699 --2.12853014469 -0.966452807188 --2.11127305031 -0.966451525688 --2.09401589632 -0.966452926397 --2.07675898075 -0.96645706892 --2.05950176716 -0.966463923454 --2.04224455356 -0.966473445296 --2.02498704195 -0.966485649347 --2.00772947073 -0.966500550509 --1.99047133326 -0.966518118977 --1.97321304679 -0.966538339854 --1.95595416427 -0.966561287641 --1.93869495392 -0.966572657227 --1.91948381066 -0.966559946537 --1.90027102828 -0.966537192464 --1.88301166892 -0.966517060995 --1.86575302482 -0.966499656439 --1.84849458933 -0.966484874487 --1.83123669028 -0.966472804547 --1.81397894025 -0.966463446617 --1.79672160745 -0.966456800699 --1.77946427465 -0.966452807188 --1.76220723987 -0.966451525688 --1.74495005607 -0.9664529562 --1.7276930809 -0.966457128525 --1.71043589711 -0.966463923454 --1.69317871332 -0.966473415494 --1.6759211421 -0.966485649347 --1.65866357088 -0.966500550509 --1.64140552282 -0.966518118977 --1.62414726615 -0.966538339854 --1.60688835383 -0.966561287641 --1.58962914348 -0.966572657227 --1.57041797042 -0.966559946537 --1.55120518803 -0.966537207365 --1.53394585848 -0.966517075897 --1.51668715477 -0.966499656439 --1.49942871928 -0.966484859586 --1.48217085004 -0.966472789646 --1.4649130702 -0.966463416815 --1.4476557076 -0.966456755996 --1.4303984046 -0.966452792287 --1.41314139962 -0.966451525688 --1.39588424564 -0.966452926397 --1.37862727046 -0.96645706892 --1.36137002706 -0.966463893652 --1.34411287307 -0.966473415494 --1.32685536146 -0.966485649347 --1.30959776044 -0.966500550509 --1.29233965277 -0.96651814878 --1.2750813663 -0.966538399458 --1.25782248378 -0.966561347246 --1.24056327343 -0.96657268703 --1.22135213017 -0.966559946537 --1.20213934779 -0.966537192464 --1.18487998843 -0.966517060995 --1.16762131453 -0.966499641538 --1.15036287904 -0.966484859586 --1.13310500979 -0.966472804547 --1.11584725976 -0.966463431716 --1.09858992696 -0.966456785798 --1.08133256435 -0.966452807188 --1.06407549977 -0.966451525688 --1.04681834578 -0.9664529562 --1.02956137061 -0.966457098722 --1.01230415702 -0.966463893652 --0.995047003032 -0.966473415494 --0.977789476514 -0.966485649347 --0.960531890392 -0.966500550509 --0.94327378273 -0.96651814878 --0.926015511155 -0.966538369656 --0.908756643534 -0.966561287641 --0.891497448087 -0.966572657227 --0.872286275029 -0.966559916735 --0.853073492646 -0.966537162662 --0.835814163089 -0.966517046094 --0.818555474281 -0.966499626637 --0.801297008992 -0.966484859586 --0.784039139748 -0.966472834349 --0.766781389713 -0.96646347642 --0.74952404201 -0.966456785798 --0.732266709209 -0.966452792287 --0.715009659529 -0.966451525688 --0.697752505541 -0.966452926397 --0.680495545268 -0.96645706892 --0.663238331675 -0.966463923454 --0.645981177687 -0.966473445296 --0.628723651171 -0.966485649347 --0.611466035247 -0.966500550509 --0.594207942486 -0.966518104076 --0.576949685812 -0.966538354755 --0.559690788388 -0.966561347246 --0.54243157804 -0.96657268703 --0.523220419884 -0.966559946537 --0.504007644951 -0.966537192464 --0.486748307943 -0.966517046094 --0.469489619136 -0.966499626637 --0.452231176197 -0.966484859586 --0.434973299503 -0.966472804547 --0.417715542019 -0.966463446617 --0.400458194315 -0.966456800699 --0.383200854063 -0.966452807188 --0.365943834185 -0.966451525688 --0.348686680198 -0.966452926397 --0.331429690123 -0.96645706892 --0.314172461629 -0.966463893652 --0.296915307641 -0.966473415494 --0.279657788575 -0.966485649347 --0.262400187552 -0.966500550509 --0.245142091066 -0.966518118977 --0.227883823216 -0.966538339854 --0.210624933243 -0.966561287641 --0.193365730345 -0.966572657227 --0.174154579639 -0.983703359962 --0.154937248677 -0.983680382371 --0.137677885592 -0.983660057187 --0.120419183746 -0.983642473817 --0.103160725906 -0.983627557755 --0.08590281941 -0.983615398407 --0.0686450377107 -0.983605965972 --0.0513876834884 -0.983599245548 --0.0341303283349 -0.983595207334 --0.0168732772581 -0.983593896031 -0.00038389698602 -0.983595356345 -0.0176408898551 -0.983599543571 -0.0348981297575 -0.983606427908 -0.0521553112194 -0.983616054058 -0.0694128638133 -0.98362839222 -0.0866704788059 -0.98364341259 -0.103928584606 -0.983661174774 -0.12118687667 -0.983681634069 -0.138445787132 -0.983704790473 -0.155705012381 -0.983716249466 -0.174915995449 -0.983703374863 -0.194128599018 -0.983680397272 -0.211387969553 -0.983660072088 -0.228646665811 -0.983642488718 -0.245905127376 -0.983627572656 -0.263163037598 -0.983615413308 -0.280420809985 -0.983605965972 -0.297678165138 -0.983599230647 -0.314935520291 -0.983595192433 -0.332192569971 -0.983593910933 -0.349449746311 -0.983595371246 -0.366706736386 -0.98359952867 -0.383963979781 -0.983606413007 -0.401221163571 -0.983616054058 -0.41847871244 -0.983628377319 -0.435736328363 -0.98364341259 -0.452994436025 -0.983661159873 -0.470252737403 -0.983681634068 -0.487511649728 -0.983704835177 -0.504770867526 -0.983716264367 -0.523981839418 -0.983703359962 -0.543194442988 -0.983680382371 -0.56045383215 -0.983660072088 -0.577712535858 -0.983642488718 -0.594970971346 -0.983627572656 -0.612228885293 -0.983615413308 -0.629486680031 -0.983605951071 -0.646744027734 -0.983599200845 -0.664001375437 -0.983595177531 -0.681258425117 -0.983593910933 -0.698515608907 -0.983595341444 -0.715772598982 -0.983599513769 -0.733029827475 -0.983606427908 -0.750287011266 -0.983616054058 -0.767544567585 -0.983628377319 -0.784802183509 -0.983643382788 -0.802060306072 -0.983661130071 -0.81931860745 -0.983681634068 -0.836577504873 -0.983704835177 -0.853836730123 -0.983716264367 -0.873047709465 -0.983703359962 -0.892260298133 -0.983680382371 -0.909519657493 -0.983660072088 -0.926778361201 -0.983642488718 -0.94403681159 -0.983627572656 -0.961294725538 -0.983615398407 -0.978552505374 -0.983605951071 -0.995809853077 -0.983599230647 -1.01306721568 -0.983595192433 -1.03032428026 -0.983593896031 -1.04758146405 -0.983595326543 -1.06483843922 -0.983599498868 -1.08209568262 -0.983606413007 -1.09935289621 -0.983616054058 -1.11661043763 -0.983628377319 -1.13386800885 -0.98364341259 -1.15112611651 -0.983661159873 -1.16838443279 -0.983681604266 -1.18564337492 -0.983704775572 -1.20290261507 -0.983716234565 -1.22211354971 -0.983703389764 -1.24132615328 -0.983680412173 -1.25858554244 -0.98366008699 -1.27584421635 -0.98364250362 -1.29310265183 -0.983627572656 -1.31036055088 -0.983615398407 -1.32761836052 -0.983605951071 -1.34487572312 -0.983599230647 -1.36213305593 -0.983595192433 -1.37939012051 -0.983593910933 -1.3966473043 -0.983595371246 -1.41390430927 -0.983599573374 -1.43116152287 -0.98360645771 -1.44841867685 -0.983616054058 -1.46567624807 -0.983628377319 -1.4829338789 -0.983643382788 -1.50019198656 -0.983661130071 -1.51745027304 -0.983681574464 -1.53470918536 -0.98370474577 -1.55196839571 -0.983716234565 -1.57117938995 -0.983703404665 -1.59039199352 -0.983680441976 -1.60765135289 -0.983660101891 -1.62491005659 -0.98364250362 -1.64216852188 -0.983627572656 -1.65942645073 -0.983615413308 -1.67668423057 -0.983605921268 -1.69394156337 -0.983599171042 -1.71119889617 -0.983595207334 -1.72845596075 -0.983593925834 -1.74571317434 -0.983595326543 -1.76297014952 -0.983599513769 -1.78022736311 -0.983606398106 -1.7974845767 -0.983616024256 -1.81474214792 -0.983628377319 -1.83199974894 -0.98364341259 -1.8492578268 -0.983661189675 -1.86651611328 -0.983681634069 -1.88377502561 -0.983704805375 -1.90103426576 -0.983716264367 -1.9202452302 -0.983703389764 -1.93945780396 -0.983680412173 -1.95671716333 -0.98366008699 -1.97397589683 -0.98364250362 -1.99123439192 -0.983627572656 -2.00849232077 -0.983615413308 -2.02575010061 -0.983605965972 -2.04300743341 -0.983599230647 -2.06026476621 -0.983595192433 -2.077521801 -0.983593910933 -2.09477901459 -0.983595371246 -2.11203604937 -0.98359952867 -2.12929326296 -0.983606383205 -2.14655041694 -0.983616024256 -2.16380798816 -0.983628377319 -2.18106555939 -0.98364341259 -2.19832366705 -0.983661189675 -2.21558195353 -0.983681634069 -2.23284083605 -0.983704775572 -2.2501000762 -0.983716234565 -2.26931107044 -0.983703359962 -2.28852373361 -0.983680382371 -2.30578309298 -0.983660072088 -2.32304173708 -0.983642488718 -2.34030026197 -0.983627572656 -2.35755819082 -0.983615398407 -2.37481588125 -0.983605951071 -2.39207321405 -0.983599215746 -2.40933060646 -0.983595177531 -2.42658770085 -0.983593910933 -2.44384485483 -0.983595341444 -2.46110183001 -0.983599498868 -2.47835910321 -0.983606383205 -2.49561625719 -0.983616024256 -2.51287382841 -0.983628377319 -2.53013145924 -0.98364341259 -2.54738950729 -0.983661159873 -2.56464779377 -0.983681634068 -2.58190667629 -0.983704850078 -2.59916591645 -0.983716279268 -2.61837691069 -0.983703389764 -2.63758951426 -0.983680397272 -2.65484887362 -0.983660057187 -2.67210757732 -0.983642488718 -2.68936610222 -0.983627572656 -2.70662397146 -0.983615413308 -2.7238817215 -0.983605951071 -2.7411391139 -0.983599215746 -2.75839650631 -0.983595192433 -2.77565354109 -0.983593910933 -2.79291069508 -0.983595341444 -2.81016767025 -0.983599498868 -2.82742488385 -0.983606413007 -2.84468209744 -0.983616054058 -2.86193966865 -0.983628377319 -2.87919729948 -0.98364341259 -2.89645540714 -0.983661159873 -2.91371369362 -0.983681604266 -2.93097263574 -0.983704775572 -2.94823187589 -0.983716234565 -2.96744287014 -0.983703359962 -2.98665541411 -0.983680382371 -3.00391477347 -0.983660057187 -3.02117353678 -0.983642473817 -3.03843194246 -0.983627557755 -3.05568987131 -0.983615398407 -3.07294768095 -0.983605965972 -3.09020501375 -0.983599245548 -3.10746234655 -0.983595207334 -3.12471938133 -0.983593896031 --3.14120874007 -0.983595356345 --3.12395173311 -0.983599543571 --3.10669451952 -0.983606427908 --3.08943736553 -0.983616054058 --3.07217979431 -0.98362839222 --3.05492216349 -0.98364341259 --3.03766405583 -0.983661174774 --3.02040576935 -0.983681634069 --3.00314682722 -0.983704790473 --2.98588758707 -0.983716249466 --2.96667659283 -0.983703374863 --2.94746404886 -0.983680397272 --2.9302046895 -0.983660072088 --2.91294592619 -0.983642488718 --2.8956875205 -0.983627572656 --2.87842959166 -0.983615413308 --2.86117178202 -0.983605965972 --2.84391444922 -0.983599230647 --2.82665711641 -0.983595192433 --2.80940008164 -0.983593910933 --2.79214292765 -0.983595371246 --2.77488595247 -0.98359952867 --2.75762867928 -0.983606413007 --2.74037146569 -0.983616054058 --2.72311395407 -0.983628377319 --2.70585638285 -0.98364341259 --2.68859821558 -0.983661159873 --2.6713399291 -0.983681634068 --2.65408104658 -0.983704835177 --2.63682180643 -0.983716264367 --2.61761081219 -0.983703359962 --2.59839814901 -0.983680382371 --2.58113878966 -0.983660072088 --2.56388014555 -0.983642488718 --2.54662173986 -0.983627572656 --2.52936381102 -0.983615413308 --2.51210600138 -0.983605951071 --2.49484866857 -0.983599200845 --2.47759133577 -0.983595177531 --2.46033424139 -0.983593910933 --2.4430770278 -0.983595341444 --2.42582005262 -0.983599513769 --2.40856277942 -0.983606427908 --2.39130562544 -0.983616054058 --2.37404805422 -0.983628377319 --2.356790483 -0.983643382788 --2.33953243494 -0.983661130071 --2.32227402926 -0.983681634068 --2.30501514673 -0.983704835177 --2.28775596619 -0.983716264367 --2.26854497194 -0.983703359962 --2.24933236837 -0.983680382371 --2.23207300902 -0.983660072088 --2.21481436491 -0.983642488718 --2.19755584002 -0.983627572656 --2.18029791117 -0.983615398407 --2.16304022074 -0.983605951071 --2.14578288794 -0.983599230647 --2.12852549553 -0.983595192433 --2.11126840114 -0.983593896031 --2.09401118755 -0.983595326543 --2.07675415277 -0.983599498868 --2.05949693918 -0.983606413007 --2.0422397852 -0.983616054058 --2.02498221398 -0.983628377319 --2.00772461295 -0.98364341259 --1.99046650529 -0.983661159873 --1.97320821881 -0.983681604266 --1.95594933629 -0.983704775572 --1.93869009614 -0.983716234565 --1.91947910189 -0.983703389764 --1.90026649833 -0.983680412173 --1.88300713897 -0.98366008699 --1.86574846506 -0.98364250362 --1.84848999977 -0.983627572656 --1.83123207092 -0.983615398407 --1.81397429109 -0.983605951071 --1.79671692848 -0.983599230647 --1.77945959568 -0.983595192433 --1.7622025609 -0.983593910933 --1.74494534731 -0.983595371246 --1.72768837213 -0.983599573374 --1.71043115854 -0.98360645771 --1.69317394495 -0.983616054058 --1.67591637373 -0.983628377319 --1.65865877271 -0.983643382788 --1.64140069485 -0.983661130071 --1.62414240837 -0.983681574464 --1.60688346625 -0.98370474577 --1.58962422609 -0.983716234565 --1.57041326165 -0.983703404665 --1.55120065808 -0.983680441976 --1.53394126892 -0.983660101891 --1.51668256521 -0.98364250362 --1.49942412972 -0.983627572656 --1.48216623068 -0.983615413308 --1.46490845084 -0.983605921268 --1.44765108824 -0.983599171042 --1.43039372564 -0.983595207334 --1.41313666105 -0.983593925834 --1.39587950706 -0.983595326543 --1.37862253189 -0.983599513769 --1.3613652587 -0.983606398106 --1.34410807491 -0.983616024256 --1.32685053349 -0.983628377319 --1.30959293246 -0.98364341259 --1.2923348248 -0.983661189675 --1.27507650852 -0.983681634069 --1.257817626 -0.983704805375 --1.24055841565 -0.983716264367 --1.22134742141 -0.983703389764 --1.20213481784 -0.983680412173 --1.18487545848 -0.98366008699 --1.16761675477 -0.98364250362 --1.15035828948 -0.983627572656 --1.13310039043 -0.983615413308 --1.1158426106 -0.983605965972 --1.098585248 -0.983599230647 --1.08132785559 -0.983595192433 --1.064070791 -0.983593910933 --1.04681363702 -0.983595371246 --1.02955663204 -0.98359952867 --1.01229941845 -0.983606383205 --0.99504223466 -0.983616024256 --0.977784648538 -0.983628377319 --0.960527062416 -0.98364341259 --0.943268954754 -0.983661189675 --0.926010653377 -0.983681634069 --0.908751755953 -0.983704775572 --0.891492545605 -0.983716234565 --0.872281566262 -0.983703359962 --0.853068947792 -0.983680382371 --0.835809573531 -0.983660072088 --0.818550869823 -0.983642488718 --0.801292404533 -0.983627572656 --0.784034535289 -0.983615398407 --0.766776770354 -0.983605951071 --0.749519392848 -0.983599215746 --0.732262030244 -0.983595177531 --0.715004950762 -0.983593910933 --0.697747796774 -0.983595341444 --0.680490806699 -0.983599498868 --0.663233548403 -0.983606383205 --0.645976379513 -0.983616024256 --0.628718838095 -0.983628377319 --0.611461222172 -0.98364341259 --0.59420311451 -0.983661159873 --0.576944842934 -0.983681634068 --0.55968593061 -0.983704850078 --0.542426690459 -0.983716279268 --0.523215711117 -0.983703389764 --0.504003114999 -0.983680397272 --0.486743748188 -0.983660057187 --0.469485037029 -0.983642488718 --0.452226571739 -0.983627572656 --0.434968672693 -0.983615413308 --0.417710900307 -0.983605951071 --0.400453530252 -0.983599215746 --0.383196167647 -0.983595192433 --0.365939132869 -0.983593910933 --0.34868196398 -0.983595341444 --0.331424959004 -0.983599498868 --0.314167708159 -0.983606413007 --0.296910531819 -0.983616054058 --0.279652997851 -0.983628377319 --0.262395381927 -0.98364341259 --0.245137266815 -0.983661159873 --0.227878972888 -0.983681604266 --0.210620060563 -0.983704775572 --0.193360835314 -0.983716234565 --0.174149852246 -1.00084649026 --0.154933843762 -1.00082330406 --0.137674465775 -1.00080272555 --0.120415745303 -1.00078497827 --0.103157274425 -1.0007699579 --0.0858993586153 -1.00075766444 --0.0686415629461 -1.0007481277 --0.0513841928914 -1.00074133277 --0.034126822371 -1.00073727965 --0.0168697559275 -1.00073596835 -0.000387432286515 -1.00073741376 -0.0176444391254 -1.00074164569 -0.0349016934634 -1.00074860454 -0.0521588893607 -1.00075832009 -0.0694164549932 -1.00077076256 -0.0866740830243 -1.00078594685 -0.103932205588 -1.00080387294 -0.121190516278 -1.00082452595 -0.138449441642 -1.00084795058 -0.155708678067 -1.00085949898 -0.174919530749 -1.00084647536 -0.194132007658 -1.00082328915 -0.21139138937 -1.00080278516 -0.228650104254 -1.00078503788 -0.24590858072 -1.0007699728 -0.263166494667 -1.00075766444 -0.280424281955 -1.0007481128 -0.29768165201 -1.00074133277 -0.314939029515 -1.00073724985 -0.332196101546 -1.00073598325 -0.349453285336 -1.00073745847 -0.366710282862 -1.00074166059 -0.383967533708 -1.00074861944 -0.40122473985 -1.0007583499 -0.41848230362 -1.00077079236 -0.435739934444 -1.00078594685 -0.452998064458 -1.00080387294 -0.470256373286 -1.00082452595 -0.487515293062 -1.00084793567 -0.504774525762 -1.00085948407 -0.523985370994 -1.00084646046 -0.543197855353 -1.00082327425 -0.560457259417 -1.00080278516 -0.577715963125 -1.00078503788 -0.594974413514 -1.0007699728 -0.612232342362 -1.00075766444 -0.629490152001 -1.0007480979 -0.646747529507 -1.00074130297 -0.664004892111 -1.00073723495 -0.681261926889 -1.00073598325 -0.69851911068 -1.00073745847 -0.715776145458 -1.0007416755 -0.733033403754 -1.00074863434 -0.750290587545 -1.00075832009 -0.767548173666 -1.00077076256 -0.784805804491 -1.00078591704 -0.802063912153 -1.00080384314 -0.819322228432 -1.00082452595 -0.836581140757 -1.00084793567 -0.853840366006 -1.00085948407 -0.873051226139 -1.00084649026 -0.892263695597 -1.00082330406 -0.909523069858 -1.00080275536 -0.92678180337 -1.00078500807 -0.944040268659 -1.0007699728 -0.961298197508 -1.00075764954 -0.978555992246 -1.0007480979 -0.995813354851 -1.00074133277 -1.01307076216 -1.00073727965 -1.03032782674 -1.00073599815 -1.04758498072 -1.00073744357 -1.0648419857 -1.00074166059 -1.0820992589 -1.00074861944 -1.09935647249 -1.00075832009 -1.11661404371 -1.00077076256 -1.13387164474 -1.00078594685 -1.1511297524 -1.00080387294 -1.16838806868 -1.00082452595 -1.1856470108 -1.00084793567 -1.20290625095 -1.00085948407 -1.22211706638 -1.00084649026 -1.24132955074 -1.00082330406 -1.25858893991 -1.00080278516 -1.27584764361 -1.00078503788 -1.2931061089 -1.0007699728 -1.31036400795 -1.00075764954 -1.32762181759 -1.0007480979 -1.34487921 -1.00074136257 -1.3621365726 -1.00073730946 -1.37939363718 -1.00073601306 -1.39665085077 -1.00073745847 -1.41390785575 -1.0007416755 -1.43116506934 -1.00074866414 -1.44842225313 -1.0007583797 -1.46567982435 -1.00077079236 -1.48293745518 -1.00078591704 -1.50019559264 -1.00080384314 -1.51745390892 -1.00082449615 -1.53471285105 -1.00084790587 -1.5519720912 -1.00085948407 -1.57118293643 -1.00084647536 -1.59039542079 -1.00082328915 -1.60765480995 -1.00080278516 -1.62491351366 -1.00078503788 -1.64217197895 -1.0007699728 -1.6594299078 -1.00075766444 -1.67668771744 -1.0007480979 -1.69394508004 -1.00074133277 -1.71120241285 -1.00073732436 -1.72845947742 -1.00073602796 -1.74571669102 -1.00073744357 -1.76297369599 -1.0007416755 -1.78023093939 -1.00074860454 -1.79748815298 -1.00075829029 -1.8147457242 -1.00077076256 -1.83200335503 -1.00078594685 -1.84926146269 -1.00080387294 -1.86651974917 -1.00082452595 -1.88377869129 -1.00084793567 -1.90103796125 -1.00085948407 -1.92024880648 -1.00084646046 -1.93946123123 -1.00082327425 -1.95672059059 -1.00080278516 -1.9739793539 -1.00078503788 -1.991237849 -1.0007699728 -2.00849577784 -1.00075766444 -2.02575355768 -1.0007481128 -2.04301089048 -1.00074136257 -2.06026828289 -1.00073730946 -2.07752537727 -1.00073601306 -2.09478253126 -1.00073745847 -2.11203950643 -1.00074166059 -2.12929677963 -1.00074858964 -2.14655399322 -1.00075829029 -2.16381156445 -1.00077076256 -2.18106919527 -1.00078597665 -2.19832736254 -1.00080390275 -2.21558564901 -1.00082452595 -2.23284453154 -1.00084793567 -2.25010377169 -1.00085948407 -2.26931464672 -1.00084646046 -2.28852713108 -1.00082327425 -2.30578649044 -1.00080278516 -2.32304519415 -1.00078503788 -2.34030365944 -1.0007699728 -2.35756158828 -1.00075764954 -2.37481933832 -1.0007480979 -2.39207667112 -1.00074131787 -2.40933412313 -1.00073726475 -2.42659121752 -1.00073601306 -2.44384837151 -1.00073745847 -2.46110540629 -1.00074166059 -2.47836267948 -1.00074858964 -2.49561983347 -1.00075829029 -2.51287740469 -1.00077076256 -2.53013503551 -1.00078594685 -2.54739314318 -1.00080387294 -2.56465142966 -1.00082452595 -2.58191031218 -1.00084795058 -2.59916961193 -1.00085949898 -2.61838048697 -1.00084646046 -2.63759297133 -1.00082325935 -2.65485233069 -1.00080277026 -2.67211097479 -1.00078503788 -2.68936949968 -1.0007699728 -2.70662742853 -1.00075766444 -2.72388523817 -1.0007480979 -2.74114269018 -1.00074131787 -2.75840002298 -1.00073724985 -2.77565705776 -1.00073598325 -2.79291427135 -1.00073745847 -2.81017124653 -1.00074166059 -2.82742846012 -1.00074861944 -2.84468567371 -1.00075832009 -2.86194324493 -1.00077076256 -2.87920087576 -1.00078594685 -2.89645898342 -1.00080387294 -2.91371732951 -1.00082452595 -2.93097627163 -1.00084793567 -2.94823551178 -1.00085948407 -2.96744638682 -1.00084649026 -2.98665881157 -1.00082330406 -3.00391817093 -1.00080272555 -3.02117693424 -1.00078497827 -3.03843539953 -1.0007699579 -3.05569332838 -1.00075766444 -3.07295113802 -1.0007481277 -3.09020847082 -1.00074133277 -3.10746580362 -1.00073727965 -3.12472289801 -1.00073596835 --3.14120516379 -1.00073741376 --3.12394815684 -1.00074164569 --3.10669094324 -1.00074860454 --3.08943378925 -1.00075832009 --3.07217621803 -1.00077076256 --3.05491858721 -1.00078594685 --3.03766047954 -1.00080387294 --3.02040213346 -1.00082452595 --3.00314319134 -1.00084795058 --2.98588395119 -1.00085949898 --2.96667307615 -1.00084647536 --2.9474606514 -1.00082328915 --2.93020129204 -1.00080278516 --2.91294252872 -1.00078503788 --2.89568406343 -1.0007699728 --2.87842613459 -1.00075766444 --2.86116832495 -1.0007481128 --2.84391099215 -1.00074133277 --2.82665365934 -1.00073724985 --2.80939656496 -1.00073598325 --2.79213935137 -1.00073745847 --2.77488237619 -1.00074166059 --2.757625103 -1.00074861944 --2.7403678894 -1.0007583499 --2.72311031818 -1.00077079236 --2.70585268736 -1.00078594685 --2.6885945797 -1.00080387294 --2.67133629322 -1.00082452595 --2.65407735109 -1.00084793567 --2.63681811094 -1.00085948407 --2.61760729551 -1.00084646046 --2.59839481115 -1.00082327425 --2.58113539219 -1.00080278516 --2.56387668848 -1.00078503788 --2.54661828279 -1.0007699728 --2.52936035395 -1.00075766444 --2.51210254431 -1.0007480979 --2.4948452115 -1.00074130297 --2.4775878191 -1.00073723495 --2.46033072472 -1.00073598325 --2.44307357073 -1.00073745847 --2.42581653595 -1.0007416755 --2.40855920315 -1.00074863434 --2.39130204916 -1.00075832009 --2.37404447794 -1.00077076256 --2.35678684711 -1.00078591704 --2.33952873945 -1.00080384314 --2.32227039337 -1.00082452595 --2.30501151085 -1.00084793567 --2.2877523303 -1.00085948407 --2.26854145527 -1.00084649026 --2.2493289113 -1.00082330406 --2.23206955195 -1.00080275536 --2.21481090784 -1.00078500807 --2.19755238295 -1.0007699728 --2.1802944541 -1.00075764954 --2.16303670407 -1.0007480979 --2.14577931166 -1.00074133277 --2.12852191925 -1.00073727965 --2.11126488447 -1.00073599815 --2.09400767088 -1.00073744357 --2.07675057649 -1.00074166059 --2.0594933629 -1.00074861944 --2.04223620891 -1.00075832009 --2.0249786377 -1.00077076256 --2.00772103667 -1.00078594685 --1.99046289921 -1.00080387294 --1.97320458293 -1.00082452595 --1.9559456706 -1.00084793567 --1.93868643045 -1.00085948407 --1.91947558522 -1.00084649026 --1.90026310086 -1.00082330406 --1.8830037117 -1.00080278516 --1.86574500799 -1.00078503788 --1.8484865427 -1.0007699728 --1.83122861386 -1.00075764954 --1.81397080422 -1.0007480979 --1.79671341181 -1.00074136257 --1.7794560492 -1.00073730946 --1.76219901443 -1.00073601306 --1.74494183064 -1.00073745847 --1.72768482566 -1.0007416755 --1.71042758226 -1.00074866414 --1.69317036867 -1.0007583797 --1.67591279745 -1.00077079236 --1.65865516663 -1.00078591704 --1.64139705896 -1.00080384314 --1.62413877249 -1.00082449615 --1.60687983036 -1.00084790587 --1.58962056041 -1.00085948407 --1.57040971517 -1.00084647536 --1.55119726062 -1.00082328915 --1.53393787146 -1.00080278516 --1.51667913794 -1.00078503788 --1.49942067265 -1.0007699728 --1.48216274381 -1.00075766444 --1.46490496397 -1.0007480979 --1.44764763117 -1.00074133277 --1.43039023876 -1.00073732436 --1.41313314438 -1.00073602796 --1.39587596059 -1.00073744357 --1.37861895561 -1.0007416755 --1.36136168242 -1.00074860454 --1.34410449863 -1.00075829029 --1.3268469274 -1.00077076256 --1.30958932638 -1.00078594685 --1.29233121872 -1.00080387294 --1.27507287264 -1.00082452595 --1.25781396032 -1.00084793567 --1.24055474997 -1.00085948407 --1.22134390473 -1.00084646046 --1.20213142037 -1.00082327425 --1.18487203121 -1.00080278516 --1.1676133275 -1.00078503788 --1.15035486221 -1.0007699728 --1.13309693337 -1.00075766444 --1.11583912373 -1.0007481128 --1.09858173132 -1.00074136257 --1.08132433892 -1.00073730946 --1.06406727433 -1.00073601306 --1.04681012034 -1.00073745847 --1.02955311537 -1.00074166059 --1.01229587197 -1.00074858964 --0.995038673282 -1.00075829029 --0.97778108716 -1.00077076256 --0.960523471236 -1.00078597665 --0.943265333772 -1.00080390275 --0.926007017493 -1.00082452595 --0.908748105168 -1.00084793567 --0.891488879919 -1.00085948407 --0.872278034687 -1.00084646046 --0.853065550327 -1.00082327425 --0.835806146264 -1.00080278516 --0.818547412753 -1.00078503788 --0.801288962364 -1.0007699728 --0.784031063318 -1.00075764954 --0.76677326858 -1.0007480979 --0.749515905976 -1.00074131787 --0.732258528471 -1.00073726475 --0.715001448989 -1.00073601306 --0.6977442801 -1.00073745847 --0.680487260223 -1.00074166059 --0.663229987025 -1.00074858964 --0.645972803235 -1.00075829029 --0.628715232014 -1.00077076256 --0.611457601189 -1.00078594685 --0.594199493527 -1.00080387294 --0.576941207052 -1.00082452595 --0.559682279825 -1.00084795058 --0.542423009872 -1.00085949898 --0.52321216464 -1.00084646046 --0.503999710083 -1.00082325935 --0.486740320921 -1.00080277026 --0.469481594861 -1.00078503788 --0.452223114669 -1.0007699728 --0.434965193272 -1.00075766444 --0.417707413435 -1.0007480979 --0.40045003593 -1.00074131787 --0.383192658425 -1.00073724985 --0.365935608745 -1.00073598325 --0.348678424955 -1.00073745847 --0.331421419978 -1.00074166059 --0.314164154232 -1.00074861944 --0.29690695554 -1.00075832009 --0.279649399221 -1.00077076256 --0.262391768396 -1.00078594685 --0.245133645832 -1.00080387294 --0.227875333279 -1.00082452595 --0.210616406054 -1.00084793567 --0.193357169628 -1.00085948407 --0.174146316946 -1.01796683669 --0.154930491 -1.01794338226 --0.137671090662 -1.01792263985 --0.120412355289 -1.01790475845 --0.103153871372 -1.01788958907 --0.0858959387988 -1.01787719131 --0.0686381263658 -1.01786753535 --0.0513807404786 -1.01786062121 --0.0341233559884 -1.0178565383 --0.0168662762735 -1.01785525679 -0.000390926143155 -1.01785671711 -0.0176479467191 -1.01786097884 -0.0349052138627 -1.01786801219 -0.0521624237299 -1.01787781716 -0.0694200061261 -1.01789039373 -0.0866776518524 -1.01790571213 -0.103935785592 -1.01792380214 -0.121194113046 -1.01794463396 -0.138453058899 -1.0179682672 -0.1557123065 -1.01797994971 -0.174923025072 -1.01796677709 -0.19413536787 -1.01794335246 -0.211394760758 -1.01792266965 -0.228653490543 -1.01790475845 -0.245911978185 -1.01788955927 -0.263169907034 -1.0178771615 -0.280427709222 -1.01786750555 -0.297685101628 -1.01786065101 -0.314942501485 -1.0178565681 -0.332199580967 -1.0178552866 -0.349456772208 -1.01785674691 -0.366713784635 -1.01786100864 -0.383971057832 -1.01786804199 -0.401228286326 -1.01787784696 -0.418485864997 -1.01789039374 -0.435743503272 -1.01790568232 -0.453001648188 -1.01792377233 -0.470259964466 -1.01794460416 -0.487518891692 -1.0179682672 -0.504778131843 -1.01797994971 -0.523988842964 -1.01796677709 -0.543201208115 -1.01794335246 -0.560460627079 -1.01792266965 -0.577719345689 -1.01790475845 -0.594977810979 -1.01788955927 -0.612235739827 -1.0178771615 -0.629493564367 -1.01786750555 -0.646750956774 -1.01786065101 -0.664008334279 -1.0178565681 -0.681265413761 -1.0178553164 -0.698522612453 -1.01785677671 -0.715779662132 -1.01786100864 -0.73303693533 -1.01786804199 -0.750294134021 -1.01787778735 -0.767551735043 -1.01789036393 -0.784809365869 -1.01790571213 -0.802067488432 -1.01792377233 -0.81932580471 -1.01794460416 -0.836584731936 -1.0179682672 -0.853843986988 -1.01797994971 -0.873054713011 -1.01796680689 -0.89226706326 -1.01794338226 -0.909526452422 -1.01792263985 -0.926785200834 -1.01790472865 -0.944043695927 -1.01788955927 -0.961301624775 -1.0178771615 -0.978559434414 -1.01786750555 -0.995816811919 -1.01786065101 -1.01307421922 -1.0178565979 -1.03033128381 -1.0178553164 -1.0475884676 -1.01785677671 -1.06484550238 -1.01786103844 -1.08210277557 -1.01786801219 -1.09935998916 -1.01787778735 -1.11661756038 -1.01789036393 -1.13387519121 -1.01790568232 -1.15113332867 -1.01792377233 -1.16839164495 -1.01794460416 -1.18565058708 -1.0179682672 -1.20290982723 -1.01797994971 -1.22212052345 -1.01796680689 -1.2413328886 -1.01794338226 -1.25859230757 -1.01792266965 -1.27585104108 -1.01790475845 -1.29310950637 -1.01788955927 -1.31036743522 -1.0178771615 -1.32762527466 -1.01786750555 -1.34488266706 -1.01786068082 -1.36214005947 -1.0178566277 -1.37939715385 -1.0178553164 -1.39665436745 -1.01785674691 -1.41391137242 -1.01786097884 -1.43116861582 -1.01786801219 -1.44842582941 -1.01787781716 -1.46568340063 -1.01789036393 -1.48294103146 -1.01790568232 -1.50019919872 -1.01792377233 -1.5174575448 -1.01794460416 -1.53471648693 -1.0179682672 -1.55197572708 -1.01797994971 -1.5711864233 -1.01796677709 -1.59039878845 -1.01794338226 -1.60765820742 -1.01792269945 -1.62491691113 -1.01790475845 -1.64217537641 -1.01788955927 -1.65943333507 -1.0178771317 -1.67669114471 -1.01786747575 -1.69394850731 -1.01786068082 -1.71120586991 -1.0178566277 -1.72846293449 -1.0178553164 -1.74572014809 -1.01785674691 -1.76297718287 -1.01786100864 -1.78023445606 -1.01786804199 -1.79749166965 -1.01787781716 -1.81474927068 -1.01789036393 -1.83200693131 -1.01790568232 -1.84926503897 -1.01792377233 -1.86652332544 -1.01794460416 -1.88378226757 -1.0179682672 -1.90104156733 -1.01797994971 -1.92025232315 -1.01796677709 -1.93946462869 -1.01794338226 -1.95672398805 -1.01792269945 -1.97398275137 -1.01790475845 -1.99124124646 -1.01788955927 -2.00849920511 -1.0178771615 -2.02575701475 -1.01786750555 -2.04301434755 -1.01786068082 -2.06027173996 -1.0178566277 -2.07752883434 -1.0178553164 -2.09478598833 -1.01785677671 -2.1120429635 -1.01786103844 -2.12930029631 -1.01786804199 -2.14655756951 -1.01787778735 -2.16381514072 -1.01789033413 -2.18107277155 -1.01790571213 -2.19833093882 -1.01792380214 -2.2155892849 -1.01794460416 -2.23284816742 -1.0179682672 -2.25010740757 -1.01797994971 -2.26931816339 -1.01796677709 -2.28853046894 -1.01794335246 -2.3057898283 -1.01792266965 -2.32304859161 -1.01790475845 -2.3403070569 -1.01788955927 -2.35756498575 -1.0178771615 -2.37482279539 -1.01786753535 -2.39208012819 -1.01786068082 -2.4093375802 -1.0178565979 -2.42659467459 -1.0178553164 -2.44385188818 -1.01785674691 -2.46110898256 -1.01786100864 -2.47836619615 -1.01786804199 -2.49562335014 -1.01787781716 -2.51288092136 -1.01789036393 -2.53013855219 -1.01790568232 -2.54739671946 -1.01792377233 -2.56465506554 -1.01794460416 -2.58191400767 -1.0179682672 -2.59917324782 -1.01797994971 -2.61838394404 -1.01796677709 -2.63759630918 -1.01794335246 -2.65485572815 -1.01792266965 -2.67211443186 -1.01790475845 -2.68937289715 -1.01788955927 -2.706630826 -1.0178771615 -2.72388869524 -1.01786750555 -2.74114614725 -1.01786065101 -2.75840348006 -1.0178565681 -2.77566057444 -1.0178552866 -2.79291778803 -1.01785677671 -2.8101747632 -1.01786103844 -2.82743197679 -1.01786804199 -2.84468919039 -1.01787778735 -2.86194682122 -1.01789033413 -2.87920445204 -1.01790568232 -2.8964625597 -1.01792377233 -2.91372090578 -1.01794460416 -2.93097984791 -1.0179682672 -2.94823908806 -1.01797997951 -2.96744984388 -1.01796683669 -2.98666220903 -1.01794338226 -3.0039215684 -1.01792263985 -3.02118027211 -1.01790475845 -3.038438797 -1.01788958907 -3.05569672585 -1.01787719131 -3.07295453549 -1.01786753535 -3.09021192789 -1.01786062121 -3.10746926069 -1.0178565383 -3.12472635507 -1.01785525679 --3.14120170673 -1.01785671711 --3.12394469976 -1.01786097884 --3.10668742657 -1.01786801219 --3.08943021297 -1.01787781716 --3.07217264175 -1.01789039373 --3.05491501093 -1.01790571213 --3.03765690327 -1.01792380214 --3.02039855719 -1.01794463396 --3.00313961506 -1.0179682672 --2.98588037491 -1.01797994971 --2.96666961909 -1.01796677709 --2.94745725394 -1.01794335246 --2.93019789458 -1.01792266965 --2.91293919086 -1.01790475845 --2.89568066597 -1.01788955927 --2.87842273712 -1.0178771615 --2.86116492748 -1.01786750555 --2.84390753508 -1.01786065101 --2.82665020228 -1.0178565681 --2.80939310789 -1.0178552866 --2.7921358943 -1.01785674691 --2.77487891912 -1.01786100864 --2.75762158632 -1.01786804199 --2.74036437273 -1.01787784696 --2.72310680151 -1.01789039374 --2.70584911108 -1.01790568232 --2.68859100342 -1.01792377233 --2.67133271694 -1.01794460416 --2.65407377482 -1.0179682672 --2.63681453467 -1.01797994971 --2.61760383844 -1.01796677709 --2.59839147329 -1.01794335246 --2.58113205433 -1.01792266965 --2.56387329101 -1.01790475845 --2.54661482572 -1.01788955927 --2.52935689688 -1.0178771615 --2.51209908724 -1.01786750555 --2.49484175443 -1.01786065101 --2.47758430242 -1.0178565681 --2.46032720804 -1.0178553164 --2.44307005405 -1.01785677671 --2.42581295967 -1.01786100864 --2.40855568647 -1.01786804199 --2.39129853249 -1.01787778735 --2.37404096126 -1.01789036393 --2.35678333044 -1.01790571213 --2.33952516317 -1.01792377233 --2.32226681709 -1.01794460416 --2.30500787496 -1.0179682672 --2.28774863481 -1.01797994971 --2.26853793859 -1.01796680689 --2.24932557344 -1.01794338226 --2.23206615448 -1.01792263985 --2.21480745077 -1.01790472865 --2.19754898548 -1.01788955927 --2.18029105663 -1.0178771615 --2.16303324699 -1.01786750555 --2.14577585459 -1.01786065101 --2.12851846218 -1.0178565979 --2.1112614274 -1.0178553164 --2.09400421381 -1.01785677671 --2.07674711943 -1.01786103844 --2.05948990584 -1.01786801219 --2.04223269224 -1.01787778735 --2.02497506142 -1.01789036393 --2.00771746039 -1.01790568232 --1.99045932293 -1.01792377233 --1.97320097685 -1.01794460416 --1.95594203472 -1.0179682672 --1.93868279457 -1.01797994971 --1.91947209835 -1.01796680689 --1.9002597332 -1.01794338226 --1.88300031423 -1.01792266965 --1.86574158072 -1.01790475845 --1.84848311543 -1.01788955927 --1.83122518658 -1.0178771615 --1.81396737695 -1.01786750555 --1.79670998454 -1.01786068082 --1.77945259213 -1.0178566277 --1.76219552755 -1.0178553164 --1.74493834376 -1.01785674691 --1.72768133879 -1.01786097884 --1.71042403579 -1.01786801219 --1.69316679239 -1.01787781716 --1.67590922117 -1.01789036393 --1.65865159035 -1.01790568232 --1.64139348268 -1.01792377233 --1.6241351664 -1.01794460416 --1.60687622428 -1.0179682672 --1.58961695433 -1.01797994971 --1.5704061985 -1.01796677709 --1.55119389295 -1.01794338226 --1.5339345336 -1.01792269945 --1.51667577028 -1.01790475845 --1.49941727519 -1.01788955927 --1.48215934634 -1.0178771317 --1.4649015367 -1.01786747575 --1.4476441741 -1.01786068082 --1.43038678169 -1.0178566277 --1.41312968731 -1.0178553164 --1.39587247371 -1.01785674691 --1.37861543894 -1.01786100864 --1.36135816574 -1.01786804199 --1.34410098195 -1.01787781716 --1.32684341073 -1.01789036393 --1.3095857799 -1.01790568232 --1.29232764244 -1.01792377233 --1.27506929636 -1.01794460416 --1.25781035423 -1.0179682672 --1.24055111408 -1.01797994971 --1.22134041786 -1.01796677709 --1.20212805271 -1.01794338226 --1.18486863375 -1.01792269945 --1.16760990023 -1.01790475845 --1.15035140514 -1.01788955927 --1.1330934763 -1.0178771615 --1.11583566666 -1.01786750555 --1.09857827425 -1.01786068082 --1.08132088184 -1.0178566277 --1.06406378746 -1.0178553164 --1.04680663348 -1.01785677671 --1.0295496285 -1.01786103844 --1.0122923255 -1.01786804199 --0.995035111905 -1.01787778735 --0.977777555585 -1.01789033413 --0.960519939661 -1.01790571213 --0.943261772394 -1.01792380214 --0.926003441214 -1.01794460416 --0.90874452889 -1.0179682672 --0.891485273838 -1.01797994971 --0.872274532914 -1.01796677709 --0.853062167764 -1.01794335246 --0.8358027637 -1.01792266965 --0.818544030189 -1.01790475845 --0.801285564899 -1.01788955927 --0.784027636051 -1.0178771615 --0.766769826412 -1.01786753535 --0.749512448907 -1.01786068082 --0.732255056501 -1.0178565979 --0.714997977018 -1.0178553164 --0.697740778327 -1.01785674691 --0.68048375845 -1.01786100864 --0.663226470351 -1.01786804199 --0.64596927166 -1.01787781716 --0.628711700439 -1.01789036393 --0.611454039812 -1.01790568232 --0.594195917249 -1.01792377233 --0.576937615871 -1.01794460416 --0.559678673744 -1.0179682672 --0.542419403791 -1.01797994971 --0.523208677769 -1.01796677709 --0.50399633497 -1.01794335246 --0.486736938358 -1.01792266965 --0.469478204847 -1.01790475845 --0.452219717205 -1.01788955927 --0.434961780906 -1.0178771615 --0.417703971267 -1.01786750555 --0.400446586311 -1.01786065101 --0.383189201355 -1.0178565681 --0.365932121873 -1.0178552866 --0.348674930632 -1.01785677671 --0.331417918205 -1.01786103844 --0.314160637558 -1.01786804199 --0.296903431416 -1.01787778735 --0.279645852744 -1.01789033413 --0.262388207018 -1.01790568232 --0.245130069554 -1.01792377233 --0.227871734649 -1.01794460416 --0.210612796247 -1.0179682672 --0.193353548646 -1.01797997951 --0.174142833799 -1.03506720066 --0.154927164316 -1.03504350781 --0.137667745352 -1.03502261639 --0.120408998802 -1.03500455618 --0.10315050371 -1.03498923779 --0.0858925562352 -1.03497675061 --0.0686347298324 -1.03496700525 --0.051377329044 -1.03496003151 --0.0341199324466 -1.03495588899 --0.0168628389947 -1.03495463729 -0.000394378323107 -1.0349561274 -0.0176514131017 -1.03496038913 -0.0349086942151 -1.03496748209 -0.0521659180522 -1.03497737646 -0.0694235144183 -1.03499007225 -0.0866811741144 -1.03500553966 -0.10393932648 -1.03502377868 -0.121197661385 -1.03504481911 -0.138456616551 -1.03506866097 -0.155715882778 -1.03508043289 -0.17492647469 -1.03506717086 -0.194138694555 -1.03504350781 -0.211398102343 -1.03502261639 -0.228656843304 -1.03500452638 -0.245915338397 -1.03498920798 -0.263173289597 -1.03497675061 -0.280431114137 -1.03496700525 -0.297688521445 -1.03496006131 -0.314945928752 -1.03495594859 -0.332203008234 -1.03495466709 -0.349460221827 -1.0349561274 -0.366717256606 -1.03496038913 -0.383974544704 -1.03496748209 -0.401231788099 -1.03497737646 -0.41848937422 -1.03499004245 -0.435747012496 -1.03500550985 -0.453005172312 -1.03502374888 -0.470263510943 -1.03504478931 -0.48752245307 -1.03506869077 -0.504781715572 -1.03508046269 -0.523992314935 -1.03506717086 -0.543204545975 -1.03504350781 -0.560463950038 -1.03502261639 -0.57772269845 -1.03500452638 -0.594981193543 -1.03498920798 -0.612239122391 -1.03497675061 -0.629496961832 -1.03496700525 -0.64675436914 -1.03496006131 -0.664011761546 -1.03495594859 -0.681268885731 -1.03495469689 -0.698526084423 -1.0349561572 -0.715783119201 -1.03496038913 -0.733040422201 -1.03496748209 -0.750297635793 -1.03497734666 -0.767555251717 -1.03499004245 -0.784812897444 -1.03500553966 -0.802071034908 -1.03502377868 -0.819329366088 -1.03504481911 -0.836588323116 -1.03506866097 -0.85384760797 -1.03508043289 -0.873058184982 -1.03506717086 -0.892270386219 -1.03504350781 -0.909529805184 -1.03502261639 -0.926788568497 -1.03500452638 -0.944047063589 -1.03498920798 -0.961304992438 -1.03497675061 -0.978562816978 -1.03496700525 -0.995820209384 -1.03496006131 -1.01307761669 -1.03495594859 -1.03033471108 -1.03495466709 -1.04759192467 -1.0349561572 -1.06484895945 -1.03496041894 -1.08210623265 -1.03496745229 -1.09936344623 -1.03497734666 -1.11662104726 -1.03499004245 -1.13387870789 -1.03500550985 -1.15113684535 -1.03502374888 -1.16839519143 -1.03504475951 -1.18565416336 -1.03506866097 -1.20291340351 -1.03508046269 -1.22212398052 -1.03506717086 -1.24133622647 -1.03504350781 -1.25859564543 -1.03502261639 -1.27585440874 -1.03500452638 -1.29311290383 -1.03498920798 -1.31037083268 -1.03497675061 -1.32762867212 -1.03496700525 -1.34488606453 -1.03496006131 -1.36214345694 -1.03495594859 -1.37940058112 -1.03495466709 -1.39665779471 -1.0349561274 -1.41391482949 -1.03496035933 -1.43117213249 -1.03496742249 -1.44842934608 -1.03497731686 -1.46568691731 -1.03499001265 -1.48294457793 -1.03500550985 -1.5002027452 -1.03502374888 -1.51746109128 -1.03504478931 -1.5347200334 -1.03506866097 -1.55197927356 -1.03508043289 -1.57118988037 -1.03506717086 -1.59040212631 -1.03504353762 -1.60766154528 -1.03502264619 -1.62492024899 -1.03500452638 -1.64217871427 -1.03498920798 -1.65943670273 -1.03497672081 -1.67669454217 -1.03496697545 -1.69395190477 -1.03496006131 -1.71120929718 -1.03495597839 -1.72846639156 -1.03495469689 -1.74572360516 -1.0349561274 -1.76298063993 -1.03496038913 -1.78023791313 -1.03496748209 -1.79749515653 -1.03497737646 -1.81475278735 -1.03499004245 -1.83201044798 -1.03500550985 -1.84926858544 -1.03502377868 -1.86652690172 -1.03504481911 -1.88378584385 -1.03506869077 -1.9010451436 -1.03508046269 -1.92025575042 -1.03506717086 -1.93946793676 -1.03504353762 -1.95672732591 -1.03502264619 -1.97398608923 -1.03500452638 -1.99124461412 -1.03498920798 -2.00850257277 -1.03497675061 -2.02576041222 -1.03496700525 -2.04301780462 -1.03496006131 -2.06027513742 -1.03495594859 -2.07753223181 -1.03495466709 -2.0947894454 -1.0349561572 -2.11204648018 -1.03496041894 -2.12930381298 -1.03496748209 -2.14656108618 -1.03497734666 -2.1638186574 -1.03499001265 -2.18107622862 -1.03500550985 -2.19833439589 -1.03502377868 -2.21559280157 -1.03504481911 -2.2328517437 -1.03506869077 -2.25011098385 -1.03508046269 -2.26932156086 -1.03506717086 -2.2885337472 -1.03504350781 -2.30579316616 -1.03502261639 -2.32305192947 -1.03500455618 -2.34031045437 -1.03498923779 -2.35756838322 -1.03497675061 -2.37482619286 -1.03496703505 -2.39208358526 -1.03496009111 -2.40934097767 -1.03495594859 -2.42659807205 -1.03495466709 -2.44385534525 -1.0349561274 -2.46111243963 -1.03496041894 -2.47836965322 -1.03496751189 -2.49562686682 -1.03497737646 -2.51288449764 -1.03499004245 -2.53014212847 -1.03500550985 -2.54740023613 -1.03502377868 -2.56465858221 -1.03504478931 -2.58191758394 -1.03506863117 -2.59917682409 -1.03508043289 -2.6183874011 -1.03506717086 -2.63759964704 -1.03504350781 -2.65485906601 -1.03502261639 -2.67211782932 -1.03500455618 -2.68937629461 -1.03498923779 -2.70663422346 -1.03497675061 -2.7238920927 -1.03496700525 -2.74114948511 -1.03496006131 -2.75840687752 -1.03495594859 -2.77566403151 -1.03495466709 -2.7929212451 -1.0349561572 -2.81017822027 -1.03496041894 -2.82743549347 -1.03496748209 -2.84469270706 -1.03497734666 -2.86195033789 -1.03499001265 -2.87920802832 -1.03500548005 -2.89646613598 -1.03502371907 -2.91372448206 -1.03504478931 -2.93098342419 -1.03506869077 -2.94824266433 -1.0350804925 -2.96745330095 -1.03506720066 -2.98666554689 -1.03504350781 -3.00392496586 -1.03502261639 -3.02118366957 -1.03500455618 -3.03844213486 -1.03498923779 -3.05570006371 -1.03497675061 -3.07295787335 -1.03496700525 -3.09021532535 -1.03496003151 -3.10747271776 -1.03495588899 -3.12472981215 -1.03495463729 --3.14119824966 -1.0349561274 --3.12394124269 -1.03496038913 --3.10668390989 -1.03496748209 --3.0894266963 -1.03497737646 --3.07216912508 -1.03499007225 --3.05491143465 -1.03500553966 --3.03765332699 -1.03502377868 --3.02039504051 -1.03504481911 --3.00313609839 -1.03506866097 --2.98587679863 -1.03508043289 --2.96666616201 -1.03506717086 --2.94745391607 -1.03504350781 --2.93019455671 -1.03502261639 --2.912935853 -1.03500452638 --2.89567732811 -1.03498920798 --2.87841939926 -1.03497675061 --2.86116158962 -1.03496700525 --2.84390413761 -1.03496006131 --2.82664674521 -1.03495594859 --2.80938965082 -1.03495466709 --2.79213243723 -1.0349561274 --2.77487546205 -1.03496038913 --2.75761812925 -1.03496748209 --2.74036085606 -1.03497737646 --2.72310328484 -1.03499004245 --2.70584565401 -1.03500550985 --2.68858748674 -1.03502374888 --2.67132914067 -1.03504478931 --2.65407019854 -1.03506869077 --2.63681095839 -1.03508046269 --2.61760038138 -1.03506717086 --2.59838813543 -1.03504350781 --2.58112871647 -1.03502261639 --2.56386995315 -1.03500452638 --2.54661142826 -1.03498920798 --2.52935349941 -1.03497675061 --2.51209568977 -1.03496700525 --2.49483829737 -1.03496006131 --2.47758090496 -1.03495594859 --2.46032381058 -1.03495469689 --2.44306659699 -1.0349561572 --2.4258095026 -1.03496038913 --2.4085522294 -1.03496748209 --2.39129501581 -1.03497734666 --2.37403738499 -1.03499004245 --2.35677975416 -1.03500553966 --2.3395216465 -1.03502377868 --2.32226330042 -1.03504481911 --2.30500429869 -1.03506866097 --2.28774499893 -1.03508043289 --2.26853442192 -1.03506717086 --2.24932223558 -1.03504350781 --2.23206281662 -1.03502261639 --2.21480405331 -1.03500452638 --2.19754558802 -1.03498920798 --2.18028765917 -1.03497675061 --2.16302984953 -1.03496700525 --2.14577251673 -1.03496006131 --2.12851506472 -1.03495594859 --2.11125797033 -1.03495466709 --2.09400075674 -1.0349561572 --2.07674366236 -1.03496041894 --2.05948644876 -1.03496745229 --2.04222923517 -1.03497734666 --2.02497154474 -1.03499004245 --2.00771388411 -1.03500550985 --1.99045577645 -1.03502374888 --1.97319743037 -1.03504475951 --1.95593848824 -1.03506866097 --1.93867924809 -1.03508046269 --1.91946864128 -1.03506717086 --1.90025639534 -1.03504350781 --1.88299697637 -1.03502261639 --1.86573821306 -1.03500452638 --1.84847974777 -1.03498920798 --1.83122181892 -1.03497675061 --1.81396397948 -1.03496700525 --1.79670658708 -1.03496006131 --1.77944919467 -1.03495594859 --1.76219210029 -1.03495466709 --1.74493488669 -1.0349561274 --1.72767785191 -1.03496035933 --1.71042054891 -1.03496742249 --1.69316330552 -1.03497731686 --1.6759057045 -1.03499001265 --1.65864807367 -1.03500550985 --1.64138993621 -1.03502374888 --1.62413159013 -1.03504478931 --1.606872648 -1.03506866097 --1.58961337805 -1.03508043289 --1.57040277123 -1.03506717086 --1.5511905849 -1.03504353762 --1.53393119574 -1.03502264619 --1.51667243242 -1.03500452638 --1.49941390753 -1.03498920798 --1.48215594888 -1.03497672081 --1.46489813924 -1.03496697545 --1.44764074683 -1.03496006131 --1.43038335442 -1.03495597839 --1.41312626004 -1.03495469689 --1.39586901664 -1.0349561274 --1.37861198187 -1.03496038913 --1.36135470867 -1.03496748209 --1.34409749508 -1.03497737646 --1.32683992386 -1.03499004245 --1.30958226323 -1.03500550985 --1.29232409596 -1.03502377868 --1.27506574988 -1.03504481911 --1.25780677795 -1.03506869077 --1.2405475378 -1.03508046269 --1.22133696079 -1.03506717086 --1.20212471485 -1.03504353762 --1.18486529589 -1.03502264619 --1.16760653258 -1.03500452638 --1.15034803748 -1.03498920798 --1.13309010864 -1.03497675061 --1.11583226919 -1.03496700525 --1.09857487678 -1.03496006131 --1.08131748438 -1.03495594859 --1.0640603602 -1.03495466709 --1.0468031764 -1.0349561572 --1.02954614163 -1.03496041894 --1.01228880883 -1.03496748209 --0.995031595231 -1.03497734666 --0.977774038911 -1.03499001265 --0.960516408086 -1.03500550985 --0.943258240819 -1.03502377868 --0.925999894738 -1.03504481911 --0.908740967512 -1.03506869077 --0.891481697559 -1.03508046269 --0.872271075845 -1.03506717086 --0.853058844805 -1.03504350781 --0.835799455643 -1.03502261639 --0.81854070723 -1.03500455618 --0.801282197237 -1.03498923779 --0.784024268389 -1.03497675061 --0.766766443849 -1.03496703505 --0.749509036541 -1.03496009111 --0.732251644134 -1.03495594859 --0.714994549751 -1.03495466709 --0.697737321258 -1.0349561274 --0.68048030138 -1.03496041894 --0.663222998381 -1.03496751189 --0.645965769887 -1.03497737646 --0.628708183765 -1.03499004245 --0.611450523138 -1.03500550985 --0.594192385673 -1.03502377868 --0.576934054494 -1.03504478931 --0.559675097465 -1.03506863117 --0.542415827513 -1.03508043289 --0.523205235601 -1.03506717086 --0.503993004561 -1.03504350781 --0.486733600498 -1.03502261639 --0.469474866986 -1.03500455618 --0.452216364443 -1.03498923779 --0.434958413243 -1.03497675061 --0.417700581253 -1.03496700525 --0.400443173945 -1.03496006131 --0.383185781539 -1.03495594859 --0.365928687155 -1.03495466709 --0.348671481013 -1.0349561572 --0.331414446235 -1.03496041894 --0.314157150686 -1.03496748209 --0.296899929643 -1.03497734666 --0.27964233607 -1.03499001265 --0.262384682894 -1.03500548005 --0.245126530528 -1.03502371907 --0.227868184448 -1.03504478931 --0.210609231145 -1.03506869077 --0.193349972367 -1.0350804925 --0.17413938418 -1.05218407512 --0.154922623187 -1.05216023326 --0.137663185597 -1.05213916302 --0.120404420421 -1.05212089419 --0.103145906702 -1.05210542679 --0.0858879387379 -1.05209285021 --0.0686300965026 -1.05208304524 --0.0513726798818 -1.0520760715 --0.0341152637266 -1.05207189917 --0.0168581502512 -1.05207058787 -0.000399086857215 -1.05207207799 -0.0176561407279 -1.05207639933 -0.0349134430289 -1.05208352208 -0.0521706864238 -1.05209347606 -0.0694282995537 -1.05210629106 -0.0866859778762 -1.05212190748 -0.103944150731 -1.05214029551 -0.1212025024 -1.05216154456 -0.138461474329 -1.05218559503 -0.155720759183 -1.05219742656 -0.174931179732 -1.05218407512 -0.194143235684 -1.05216023326 -0.211402665824 -1.05213916302 -0.228661421686 -1.05212089419 -0.245919939131 -1.05210545659 -0.263177908957 -1.05209288001 -0.280435755849 -1.05208304524 -0.297693178058 -1.0520760715 -0.314950592816 -1.05207189917 -0.33220769465 -1.05207058787 -0.349464930594 -1.05207207799 -0.366721995175 -1.05207636952 -0.383979298174 -1.05208349228 -0.401236541569 -1.05209347606 -0.418494150043 -1.05210629106 -0.43575181812 -1.05212190748 -0.453009992838 -1.05214029551 -0.47026835382 -1.05216151476 -0.487527325749 -1.05218559504 -0.504786610604 -1.05219745636 -0.523997038603 -1.05218407512 -0.543209090829 -1.05216023326 -0.560468509793 -1.05213916302 -0.577727288007 -1.05212089419 -0.594985812903 -1.05210545659 -0.612243756652 -1.05209288001 -0.629501596093 -1.05208304524 -0.646759033203 -1.0520760417 -0.664016455412 -1.05207186937 -0.681273564696 -1.05207058787 -0.698530763388 -1.05207207799 -0.715787827969 -1.05207636952 -0.73304516077 -1.05208352208 -0.750302389264 -1.05209350586 -0.767560020089 -1.05210629106 -0.784817695618 -1.05212190748 -0.802075847983 -1.05214032531 -0.819334208966 -1.05216154456 -0.836593195796 -1.05218556523 -0.853852495551 -1.05219742656 -0.873062923551 -1.05218407512 -0.892274945974 -1.05216023326 -0.909534364939 -1.05213916302 -0.926793128252 -1.05212089419 -0.944051623344 -1.05210545659 -0.961309581995 -1.05209288001 -0.978567436338 -1.05208304524 -0.995824873448 -1.0520760417 -1.01308229566 -1.05207189917 -1.03033939004 -1.05207061768 -1.04759663343 -1.05207207799 -1.06485369801 -1.05207639933 -1.08211097122 -1.05208355189 -1.09936821461 -1.05209350586 -1.11662587524 -1.05210629106 -1.13388356567 -1.05212190748 -1.15114170313 -1.05214032531 -1.16840004921 -1.05216151476 -1.18565905094 -1.05218556523 -1.20291832089 -1.05219745636 -1.22212871909 -1.05218407512 -1.24134075642 -1.05216023326 -1.25860020519 -1.05213916302 -1.2758589983 -1.05212089419 -1.29311749339 -1.05210545659 -1.31037545204 -1.05209288001 -1.32763329148 -1.05208304524 -1.34489068389 -1.0520760417 -1.3621481061 -1.05207186937 -1.37940526009 -1.05207058787 -1.39666250348 -1.05207207799 -1.41391953826 -1.05207639933 -1.43117684126 -1.05208352208 -1.44843408465 -1.05209347606 -1.46569168568 -1.05210629106 -1.48294937611 -1.05212190748 -1.50020757317 -1.05214032531 -1.51746591926 -1.05216154456 -1.53472486138 -1.05218556523 -1.55198413134 -1.05219742656 -1.57119458914 -1.05218407512 -1.59040665627 -1.05216023326 -1.60766607523 -1.05213916302 -1.62492480874 -1.05212089419 -1.64218330383 -1.05210542679 -1.65944129228 -1.05209285021 -1.67669916153 -1.05208304524 -1.69395658373 -1.0520760417 -1.71121400595 -1.05207192898 -1.72847110033 -1.05207064748 -1.74572831392 -1.05207207799 -1.7629853785 -1.05207636952 -1.7802426815 -1.05208352208 -1.7974999547 -1.05209350586 -1.81475758553 -1.05210629106 -1.83201524615 -1.05212190748 -1.84927341342 -1.05214032531 -1.8665317595 -1.05216154456 -1.88379073143 -1.05218559504 -1.90105003118 -1.05219745636 -1.92026042938 -1.05218407512 -1.93947246671 -1.05216023326 -1.95673191548 -1.05213916302 -1.97399067878 -1.05212089419 -1.99124920368 -1.05210545659 -2.00850713253 -1.05209285021 -2.02576500177 -1.05208301544 -2.04302245378 -1.0520760417 -2.06027984619 -1.05207186937 -2.07753694058 -1.05207058787 -2.09479415417 -1.05207207799 -2.11205124855 -1.05207639933 -2.12930858135 -1.05208352208 -2.14656585455 -1.05209347606 -2.16382342577 -1.05210629106 -2.1810810566 -1.05212190748 -2.19833922386 -1.05214032531 -2.21559756994 -1.05216154456 -2.23285657167 -1.05218559504 -2.25011587143 -1.05219745636 -2.26932626963 -1.05218407512 -2.28853827715 -1.05216023326 -2.30579775572 -1.05213916302 -2.32305651903 -1.052120924 -2.34031504393 -1.05210545659 -2.35757303238 -1.0520928204 -2.37483084202 -1.05208301544 -2.39208829403 -1.0520760715 -2.40934568643 -1.05207192898 -2.42660278082 -1.05207061768 -2.44386005402 -1.05207207799 -2.4611171484 -1.05207639933 -2.47837442159 -1.05208355189 -2.49563163519 -1.05209350586 -2.51288932562 -1.05210629106 -2.53014701605 -1.05212193728 -2.54740512371 -1.05214035511 -2.56466346979 -1.05216151476 -2.58192241192 -1.05218553543 -2.59918165207 -1.05219742656 -2.61839210987 -1.05218407512 -2.6376042366 -1.05216023326 -2.65486365557 -1.05213916302 -2.67212241888 -1.052120924 -2.68938094377 -1.05210545659 -2.70663887262 -1.05209285021 -2.72389668226 -1.05208304524 -2.74115407467 -1.0520760417 -2.75841152668 -1.05207189917 -2.77566868067 -1.05207061768 -2.79292589426 -1.05207207799 -2.81018292904 -1.05207636952 -2.82744026184 -1.05208349228 -2.84469747543 -1.05209347606 -2.86195510626 -1.05210629106 -2.87921279669 -1.05212187767 -2.89647096396 -1.05214026571 -2.91372936964 -1.05216151476 -2.93098831177 -1.05218559504 -2.94824755192 -1.05219745636 -2.96745795011 -1.05218407512 -2.98667001724 -1.05216023326 -3.00392949581 -1.05213916302 -3.02118825913 -1.05212089419 -3.03844672441 -1.05210542679 -3.05570465326 -1.05209285021 -3.07296252251 -1.05208304524 -3.09021997452 -1.0520760715 -3.10747736692 -1.05207189917 -3.12473446131 -1.05207058787 --3.14119354089 -1.05207207799 --3.12393647432 -1.05207639933 --3.10667920112 -1.05208352208 --3.08942198754 -1.05209347606 --3.07216435671 -1.05210629106 --3.05490666628 -1.05212190748 --3.03764849901 -1.05214029551 --3.02039015293 -1.05216154456 --3.0031312108 -1.05218559503 --2.98587191105 -1.05219742656 --2.96666145324 -1.05218407512 --2.94744938612 -1.05216023326 --2.93019002676 -1.05213916302 --2.91293126344 -1.05212089419 --2.89567273855 -1.05210545659 --2.8784148097 -1.05209288001 --2.86115694046 -1.05208304524 --2.84389948845 -1.0520760715 --2.82664203644 -1.05207189917 --2.80938494205 -1.05207058787 --2.79212772846 -1.05207207799 --2.77487069369 -1.05207636952 --2.75761336088 -1.05208349228 --2.74035602808 -1.05209347606 --2.72309845686 -1.05210629106 --2.70584088564 -1.05212190748 --2.68858271837 -1.05214029551 --2.67132431269 -1.05216151476 --2.65406531096 -1.05218559504 --2.6368060112 -1.05219745636 --2.617595613 -1.05218407512 --2.59838360548 -1.05216023326 --2.58112412691 -1.05213916302 --2.5638653636 -1.05212089419 --2.5466068387 -1.05210545659 --2.52934885025 -1.05209288001 --2.51209104061 -1.05208304524 --2.4948335886 -1.0520760417 --2.47757619619 -1.05207186937 --2.46031910181 -1.05207058787 --2.44306188822 -1.05207207799 --2.42580479383 -1.05207636952 --2.40854746103 -1.05208352208 --2.39129024744 -1.05209350586 --2.37403261662 -1.05210629106 --2.35677492619 -1.05212190748 --2.33951681852 -1.05214032531 --2.32225847244 -1.05216154456 --2.30499947071 -1.05218556523 --2.28774017096 -1.05219742656 --2.26852971315 -1.05218407512 --2.24931770563 -1.05216023326 --2.23205828667 -1.05213916302 --2.21479952336 -1.05212089419 --2.19754099846 -1.05210545659 --2.18028301 -1.05209288001 --2.16302520037 -1.05208304524 --2.14576780796 -1.0520760417 --2.12851035595 -1.05207189917 --2.11125326157 -1.05207061768 --2.09399604797 -1.05207207799 --2.07673895359 -1.05207639933 --2.05948168039 -1.05208355189 --2.0422244668 -1.05209350586 --2.02496677637 -1.05210629106 --2.00770908594 -1.05212190748 --1.99045094847 -1.05214032531 --1.97319257259 -1.05216151476 --1.95593363047 -1.05218556523 --1.93867439032 -1.05219745636 --1.91946393252 -1.05218407512 --1.90025186539 -1.05216023326 --1.88299244642 -1.05213916302 --1.86573368311 -1.05212089419 --1.84847518802 -1.05210545659 --1.83121722936 -1.05209288001 --1.81395936012 -1.05208304524 --1.79670193791 -1.0520760417 --1.77944451571 -1.05207186937 --1.76218739152 -1.05207058787 --1.74493017793 -1.05207207799 --1.72767311335 -1.05207639933 --1.71041581035 -1.05208352208 --1.69315856695 -1.05209347606 --1.67590093613 -1.05210629106 --1.6586432755 -1.05212190748 --1.64138510823 -1.05214032531 --1.62412676215 -1.05216154456 --1.60686779022 -1.05218556523 --1.58960849047 -1.05219742656 --1.57039809227 -1.05218407512 --1.55118605495 -1.05216023326 --1.53392660618 -1.05213916302 --1.51666784287 -1.05212089419 --1.49940931797 -1.05210542679 --1.48215132952 -1.05209285021 --1.46489349008 -1.05208304524 --1.44763606787 -1.0520760417 --1.43037867546 -1.05207192898 --1.41312158108 -1.05207064748 --1.39586430788 -1.05207207799 --1.3786072433 -1.05207636952 --1.3613499403 -1.05208352208 --1.34409272671 -1.05209350586 --1.32683515549 -1.05210629106 --1.30957746506 -1.05212190748 --1.29231926798 -1.05214032531 --1.2750608921 -1.05216154456 --1.25780192017 -1.05218559504 --1.24054265022 -1.05219745636 --1.22133222222 -1.05218407512 --1.2021201551 -1.05216023326 --1.18486070633 -1.05213916302 --1.16760194302 -1.05212089419 --1.15034344793 -1.05210545659 --1.13308551907 -1.05209285021 --1.11582767963 -1.05208301544 --1.09857025743 -1.0520760417 --1.08131283522 -1.05207186937 --1.06405568123 -1.05207058787 --1.04679843783 -1.05207207799 --1.02954140306 -1.05207639933 --1.01228410006 -1.05208352208 --0.995026856661 -1.05209347606 --0.977769255638 -1.05210629106 --0.96051158011 -1.05212190748 --0.943253397942 -1.05214032531 --0.92599503696 -1.05216154456 --0.90873606503 -1.05218559504 --0.891476780176 -1.05219745636 --0.872266352177 -1.05218407512 --0.853054314852 -1.05216023326 --0.835794910789 -1.05213916302 --0.818536147475 -1.052120924 --0.801277622581 -1.05210545659 --0.78401966393 -1.0520928204 --0.766761809587 -1.05208301544 --0.749504372478 -1.0520760715 --0.73224696517 -1.05207192898 --0.714989870786 -1.05207061768 --0.697732627392 -1.05207207799 --0.680475562811 -1.05207639933 --0.66321824491 -1.05208355189 --0.645961001516 -1.05209350586 --0.628703385592 -1.05210629106 --0.611445710063 -1.05212193728 --0.594187557697 -1.05214035511 --0.576929196715 -1.05216151476 --0.559670224786 -1.05218553543 --0.542410939932 -1.05219742656 --0.523200526834 -1.05218407512 --0.503988474607 -1.05216023326 --0.486729040742 -1.05213916302 --0.46947029233 -1.052120924 --0.452211767435 -1.05210545659 --0.434953786433 -1.05209285021 --0.417695946991 -1.05208304524 --0.400438524782 -1.0520760417 --0.383181102574 -1.05207189917 --0.36592400074 -1.05207061768 --0.348666772247 -1.05207207799 --0.331409707666 -1.05207636952 --0.314152404666 -1.05208349228 --0.296895161271 -1.05209347606 --0.279637545347 -1.05210629106 --0.262379869819 -1.05212187767 --0.245121695101 -1.05214026571 --0.22786334157 -1.05216151476 --0.210604373366 -1.05218559504 --0.193345095962 -1.05219745636 --0.174134675414 -1.06934329867 --0.154918219894 -1.069319278 --0.137658767402 -1.06929802895 --0.120399985462 -1.06927961111 --0.103141451255 -1.0692640245 --0.0858834628016 -1.06925132871 --0.0686256019399 -1.06924146414 --0.0513681704179 -1.06923446059 --0.0341107351706 -1.06923022866 --0.0168536012061 -1.06922885775 -0.000403654528783 -1.06923034787 -0.017660727026 -1.06923475862 -0.0349180493504 -1.06924194098 -0.0521753113717 -1.06925195456 -0.0694329412654 -1.06926488877 -0.086690640077 -1.06928062439 -0.103948827833 -1.06929919124 -0.121207201854 -1.06932061911 -0.138466201723 -1.06934484839 -0.155725501478 -1.06935673952 -0.174935743213 -1.06934326887 -0.194147624076 -1.069319278 -0.211407080293 -1.06929802895 -0.228665858507 -1.06927961111 -0.245924398303 -1.0692640543 -0.263182379306 -1.06925135851 -0.280440233648 -1.06924143433 -0.297697678208 -1.06923443079 -0.314955115319 -1.06923022866 -0.332212239504 -1.06922885775 -0.34946949035 -1.06923034787 -0.366726577282 -1.06923472881 -0.383983910084 -1.06924194098 -0.40124116838 -1.06925198436 -0.418498799205 -1.06926488877 -0.435756497085 -1.06928062439 -0.453014679253 -1.06929919124 -0.470273062587 -1.0693205595 -0.487532056868 -1.06934478879 -0.504791341722 -1.06935676933 -0.524001598358 -1.06934329867 -0.543213486671 -1.069319278 -0.560472935438 -1.06929802895 -0.577731713652 -1.06927961111 -0.594990238547 -1.0692640543 -0.612248227 -1.06925135851 -0.629506081342 -1.06924143433 -0.646763533354 -1.06923440099 -0.664020985365 -1.06923019886 -0.681278094649 -1.06922885775 -0.698535338044 -1.06923037767 -0.715792417526 -1.06923475862 -0.733049750328 -1.06924197078 -0.750307023525 -1.06925201416 -0.76756465435 -1.06926488877 -0.78482234478 -1.06928062439 -0.802080526948 -1.06929919124 -0.819338902831 -1.0693205595 -0.836597904563 -1.06934478879 -0.853857204318 -1.06935676933 -0.873067468405 -1.06934329867 -0.892279341817 -1.069319278 -0.909538775682 -1.06929802895 -0.926797553897 -1.06927961111 -0.944056078791 -1.0692640543 -0.961314067244 -1.06925135851 -0.978571921587 -1.06924143433 -0.995829358697 -1.06923440099 -1.01308682561 -1.06923022866 -1.0303439498 -1.06922888756 -1.04760119319 -1.06923034787 -1.06485828757 -1.06923475862 -1.08211559057 -1.06924197078 -1.09937286377 -1.06925198436 -1.1166305244 -1.06926488877 -1.13388821483 -1.06928062439 -1.15114638209 -1.06929922104 -1.16840475797 -1.0693205893 -1.18566378951 -1.06934478879 -1.20292308927 -1.06935676933 -1.22213330865 -1.06934329867 -1.24134516716 -1.069319278 -1.25860464573 -1.06929802895 -1.27586343885 -1.06927964092 -1.29312193394 -1.0692640841 -1.31037992239 -1.06925135851 -1.32763779163 -1.06924140453 -1.34489521384 -1.06923437118 -1.36215266586 -1.06923019886 -1.37940981984 -1.06922888756 -1.39666706324 -1.06923037767 -1.41392409802 -1.06923475862 -1.43118143082 -1.06924197078 -1.44843870401 -1.06925198436 -1.46569633484 -1.06926488877 -1.48295405507 -1.06928062439 -1.50021225214 -1.06929922104 -1.51747059822 -1.0693205893 -1.53472957015 -1.06934478879 -1.5519888699 -1.06935676933 -1.57119914889 -1.06934329867 -1.59041103721 -1.069319278 -1.60767045617 -1.06929802895 -1.62492924929 -1.06927961111 -1.64218780398 -1.0692640245 -1.65944579244 -1.06925132871 -1.67670366168 -1.06924143433 -1.69396111369 -1.06923440099 -1.7112185359 -1.06923022866 -1.72847563029 -1.06922888756 -1.74573287368 -1.06923034787 -1.76298996806 -1.06923472881 -1.78024730086 -1.06924194098 -1.79750457406 -1.06925198436 -1.81476220489 -1.06926488877 -1.83201989531 -1.06928062439 -1.84927809238 -1.06929919124 -1.86653646827 -1.0693205595 -1.88379547 -1.06934478879 -1.90105476975 -1.06935676933 -1.92026498914 -1.06934329867 -1.93947687745 -1.069319278 -1.95673635602 -1.06929802895 -1.97399511934 -1.06927961111 -1.99125364423 -1.0692640543 -2.00851160288 -1.06925132871 -2.02576947212 -1.06924140453 -2.04302692413 -1.06923440099 -2.06028437614 -1.06923019886 -2.07754147053 -1.06922885775 -2.09479868412 -1.06923037767 -2.1120557785 -1.06923478842 -2.1293131113 -1.06924197078 -2.1465704441 -1.06925198436 -2.16382807493 -1.06926488877 -2.18108576536 -1.06928062439 -2.19834393263 -1.06929919124 -2.21560227871 -1.0693205595 -2.23286128044 -1.06934478879 -2.25012058019 -1.06935676933 -2.26933085918 -1.06934329867 -2.2885427475 -1.069319278 -2.30580222607 -1.06929802895 -2.32306098938 -1.06927961111 -2.34031951427 -1.0692640245 -2.35757756233 -1.06925129891 -2.37483537197 -1.06924140453 -2.39209276438 -1.06923443079 -2.40935021639 -1.06923025846 -2.42660737038 -1.06922888756 -2.44386464357 -1.06923034787 -2.46112173796 -1.06923472881 -2.47837907076 -1.06924194098 -2.49563628435 -1.06925198436 -2.51289391517 -1.06926488877 -2.5301516056 -1.06928065419 -2.54740977288 -1.06929922104 -2.56466817856 -1.0693205595 -2.58192712069 -1.06934478879 -2.59918636084 -1.06935676933 -2.61839663982 -1.06934329867 -2.63760858774 -1.069319278 -2.65486806631 -1.06929802895 -2.67212682963 -1.06927961111 -2.68938535452 -1.0692640245 -2.70664334297 -1.06925132871 -2.72390121221 -1.06924143433 -2.74115866422 -1.06923440099 -2.75841611624 -1.06923022866 -2.77567321062 -1.06922888756 -2.79293042422 -1.06923034787 -2.8101875186 -1.06923472881 -2.8274448514 -1.06924194098 -2.84470206499 -1.06925198436 -2.86195969581 -1.06926488877 -2.87921738625 -1.06928062439 -2.89647561312 -1.06929919124 -2.9137340188 -1.0693205595 -2.93099302053 -1.06934478879 -2.94825232029 -1.06935676933 -2.96746253967 -1.06934329867 -2.98667442799 -1.069319278 -3.00393384695 -1.06929802895 -3.02119266987 -1.06927961111 -3.03845119476 -1.0692640245 -3.05570912361 -1.06925132871 -3.07296705246 -1.06924146414 -3.09022450447 -1.06923446059 -3.10748189688 -1.06923022866 -3.12473899126 -1.06922885775 --3.14118901093 -1.06923034787 --3.12393188477 -1.06923475862 --3.10667461157 -1.06924194098 --3.08941739798 -1.06925195456 --3.07215976715 -1.06926488877 --3.05490201712 -1.06928062439 --3.03764379025 -1.06929919124 --3.02038544416 -1.06932061911 --3.00312644244 -1.06934484839 --2.98586714268 -1.06935673952 --2.96665692329 -1.06934326887 --2.94744503498 -1.069319278 --2.93018561601 -1.06929802895 --2.9129268527 -1.06927961111 --2.89566832781 -1.0692640543 --2.87841033935 -1.06925135851 --2.86115241051 -1.06924143433 --2.8438949585 -1.06923443079 --2.82663750648 -1.06923022866 --2.8093804121 -1.06922885775 --2.79212319851 -1.06923034787 --2.77486610413 -1.06923472881 --2.75760877132 -1.06924194098 --2.74035143852 -1.06925198436 --2.7230938077 -1.06926488877 --2.70583617687 -1.06928062439 --2.68857800961 -1.06929919124 --2.67131960392 -1.0693205595 --2.65406060219 -1.06934478879 --2.63680130243 -1.06935676933 --2.61759102344 -1.06934329867 --2.59837913513 -1.069319278 --2.58111965656 -1.06929802895 --2.56386089325 -1.06927961111 --2.54660236835 -1.0692640543 --2.5293443799 -1.06925135851 --2.51208657026 -1.06924143433 --2.49482911825 -1.06923440099 --2.47757166624 -1.06923019886 --2.46031451225 -1.06922885775 --2.44305723906 -1.06923037767 --2.42580020428 -1.06923475862 --2.40854287148 -1.06924197078 --2.39128559828 -1.06925201416 --2.37402802706 -1.06926488877 --2.35677033663 -1.06928062439 --2.33951216936 -1.06929919124 --2.32225376367 -1.0693205595 --2.30499476195 -1.06934478879 --2.28773552179 -1.06935676933 --2.26852524281 -1.06934329867 --2.24931335449 -1.069319278 --2.23205387592 -1.06929802895 --2.21479511261 -1.06927961111 --2.19753658771 -1.0692640543 --2.18027853966 -1.06925135851 --2.16302073002 -1.06924143433 --2.14576327801 -1.06923440099 --2.12850576639 -1.06923022866 --2.11124867201 -1.06922888756 --2.09399145842 -1.06923034787 --2.07673436403 -1.06923475862 --2.05947703123 -1.06924197078 --2.04221981764 -1.06925198436 --2.02496218682 -1.06926488877 --2.00770446658 -1.06928062439 --1.99044626951 -1.06929922104 --1.97318789363 -1.0693205893 --1.9559288919 -1.06934478879 --1.93866959214 -1.06935676933 --1.91945934295 -1.06934329867 --1.90024748444 -1.069319278 --1.88298806548 -1.06929802895 --1.86572927236 -1.06927964092 --1.84847074747 -1.0692640841 --1.83121275902 -1.06925135851 --1.81395485997 -1.06924140453 --1.79669740796 -1.06923437118 --1.77943995595 -1.06923019886 --1.76218280196 -1.06922888756 --1.74492558837 -1.06923037767 --1.72766855359 -1.06923475862 --1.71041122079 -1.06924197078 --1.69315394759 -1.06925198436 --1.67589631677 -1.06926488877 --1.65863862634 -1.06928062439 --1.64138042927 -1.06929922104 --1.62412205339 -1.0693205893 --1.60686305165 -1.06934478879 --1.5896037519 -1.06935676933 --1.57039353251 -1.06934329867 --1.5511816442 -1.069319278 --1.53392216563 -1.06929802895 --1.51666340232 -1.06927961111 --1.49940487742 -1.0692640245 --1.48214688897 -1.06925132871 --1.46488901973 -1.06924143433 --1.44763156772 -1.06923440099 --1.43037414551 -1.06923022866 --1.41311702132 -1.06922888756 --1.39585974812 -1.06923034787 --1.37860265374 -1.06923472881 --1.36134532094 -1.06924194098 --1.34408807754 -1.06925198436 --1.32683047652 -1.06926488877 --1.30957278609 -1.06928062439 --1.29231458902 -1.06929919124 --1.27505621314 -1.0693205595 --1.25779724121 -1.06934478879 --1.24053791165 -1.06935676933 --1.22132763266 -1.06934329867 --1.20211574435 -1.069319278 --1.18485626578 -1.06929802895 --1.16759750247 -1.06927961111 --1.15033897758 -1.0692640543 --1.13308101893 -1.06925132871 --1.11582317948 -1.06924140453 --1.09856572747 -1.06923440099 --1.08130827546 -1.06923019886 --1.06405115128 -1.06922885775 --1.04679387808 -1.06923037767 --1.0295368135 -1.06923478842 --1.0122795105 -1.06924197078 --0.9950222224 -1.06925198436 --0.977764591575 -1.06926488877 --0.960506916046 -1.06928062439 --0.943248748779 -1.06929919124 --0.925990357995 -1.0693205595 --0.908731341362 -1.06934478879 --0.891472026706 -1.06935676933 --0.87226177752 -1.06934329867 --0.853049904108 -1.069319278 --0.835790470242 -1.06929802895 --0.818531706929 -1.06927961111 --0.801273182034 -1.0692640245 --0.78401517868 -1.06925129891 --0.766757294536 -1.06924140453 --0.749499857426 -1.06923443079 --0.732242420316 -1.06923025846 --0.71498529613 -1.06922888756 --0.697728052735 -1.06923034787 --0.680470973253 -1.06923472881 --0.663213640451 -1.06924194098 --0.645956397057 -1.06925198436 --0.628698751331 -1.06926488877 --0.611441045999 -1.06928065419 --0.594182878732 -1.06929922104 --0.576924487948 -1.0693205595 --0.559665501118 -1.06934478879 --0.542406216264 -1.06935676933 --0.523195967079 -1.06934329867 --0.503984078765 -1.069319278 --0.486724615097 -1.06929802895 --0.469465844333 -1.06927961111 --0.452207311988 -1.0692640245 --0.434949308634 -1.06925132871 --0.417691446841 -1.06924143433 --0.400434017181 -1.06923440099 --0.383176572621 -1.06923022866 --0.365919448436 -1.06922888756 --0.34866219759 -1.06923034787 --0.331405118108 -1.06923472881 --0.314147800207 -1.06924194098 --0.296890541911 -1.06925198436 --0.279632911086 -1.06926488877 --0.262375205755 -1.06928062439 --0.245117016137 -1.06929919124 --0.227858647704 -1.0693205595 --0.210599660873 -1.06934478879 --0.193340361118 -1.06935676933 --0.174130104482 -1.08650603891 --0.154915194959 -1.08648180962 --0.137655738741 -1.08646038175 --0.120396947488 -1.08644187451 --0.103138398379 -1.08642616868 --0.0858803987503 -1.08641335368 --0.0686225257814 -1.08640342951 --0.0513650793582 -1.08639633656 --0.0341076301411 -1.08639204502 --0.0168504840694 -1.08639070392 -0.000406784238293 -1.08639219403 -0.0176638702396 -1.08639660477 -0.0349212042056 -1.08640387655 -0.0521784787998 -1.08641400934 -0.0694361235946 -1.08642700315 -0.0866938326508 -1.08644282818 -0.103952031583 -1.08646160364 -0.121210422367 -1.08648318052 -0.138469435275 -1.08650755882 -0.155728746206 -1.08651956916 -0.174938872457 -1.0865060091 -0.19415063411 -1.08648183942 -0.211410101503 -1.08646041155 -0.228668902069 -1.08644187451 -0.245927456766 -1.08642616868 -0.263185456395 -1.08641332388 -0.280443318188 -1.0864033699 -0.297700770199 -1.08639630675 -0.31495822221 -1.08639204502 -0.332215353847 -1.08639070392 -0.349472619593 -1.08639222383 -0.366729713976 -1.08639663458 -0.383987061679 -1.08640390635 -0.401244342327 -1.08641403914 -0.418501988053 -1.08642703295 -0.435759693384 -1.08644288778 -0.453017883003 -1.08646160364 -0.470276281238 -1.08648315072 -0.48753529042 -1.08650758862 -0.504794597626 -1.08651965857 -0.524004742503 -1.08650606871 -0.543216511607 -1.08648183942 -0.560475960374 -1.08646041155 -0.577734723687 -1.0864418447 -0.594993263483 -1.08642613888 -0.612251281738 -1.08641332388 -0.629509165883 -1.0864033699 -0.646766632795 -1.08639630675 -0.664024084806 -1.08639204502 -0.681281208992 -1.08639070392 -0.698538482189 -1.08639222383 -0.715795576572 -1.08639663458 -0.733052909374 -1.08640390635 -0.750310197472 -1.08641400933 -0.767567843199 -1.08642697334 -0.78482554853 -1.08644285798 -0.802083745599 -1.08646160364 -0.819342121482 -1.08648315072 -0.836601138115 -1.08650755882 -0.853860452771 -1.08651959896 -0.873070582748 -1.0865060091 -0.892282351851 -1.08648180962 -0.909541800618 -1.08646041155 -0.926800593734 -1.0864418447 -0.944059163332 -1.08642613888 -0.961317151785 -1.08641332388 -0.978575006127 -1.0864033699 -0.995832458138 -1.08639630675 -1.01308995486 -1.08639204502 -1.03034710884 -1.08639070392 -1.04760435224 -1.08639219403 -1.06486144662 -1.08639660477 -1.08211877942 -1.08640387655 -1.09937605262 -1.08641400934 -1.11663368344 -1.08642703295 -1.13389137387 -1.08644288778 -1.15114957094 -1.08646160364 -1.16840797663 -1.08648312092 -1.18566700816 -1.08650752902 -1.20292630792 -1.08651962876 -1.22213640809 -1.08650606871 -1.241348207 -1.08648183942 -1.25860768557 -1.08646041155 -1.27586644888 -1.08644190431 -1.29312500358 -1.08642619848 -1.31038299203 -1.08641332388 -1.32764086127 -1.0864033401 -1.34489831328 -1.08639627695 -1.36215576529 -1.08639204502 -1.37941291928 -1.08639073372 -1.39667016268 -1.08639222383 -1.41392722726 -1.08639660477 -1.43118458986 -1.08640387654 -1.44844189286 -1.08641400933 -1.46569955349 -1.08642700315 -1.48295727372 -1.08644285798 -1.50021544099 -1.08646160364 -1.51747381687 -1.08648315072 -1.5347328186 -1.08650755882 -1.55199211836 -1.08651962876 -1.57120227814 -1.08650603891 -1.59041404724 -1.08648177981 -1.60767349601 -1.08646038175 -1.62493231893 -1.0864418447 -1.64219087362 -1.08642613888 -1.65944886208 -1.08641332388 -1.67670676112 -1.0864033401 -1.69396421313 -1.08639627695 -1.71122163534 -1.08639204502 -1.72847875953 -1.08639070392 -1.74573603272 -1.08639219403 -1.76299312711 -1.08639660477 -1.78025045991 -1.08640387655 -1.79750773311 -1.08641400934 -1.81476536393 -1.08642703295 -1.83202305436 -1.08644288778 -1.84928128123 -1.08646160364 -1.86653968692 -1.08648315072 -1.88379868865 -1.08650755882 -1.90105801821 -1.08651962876 -1.92026814818 -1.08650606871 -1.93947991729 -1.08648183942 -1.95673939586 -1.08646041155 -1.97399815917 -1.08644187451 -1.99125668407 -1.08642616868 -2.00851470232 -1.08641332388 -2.02577257156 -1.0864033699 -2.04303002358 -1.08639630675 -2.06028747559 -1.08639204502 -2.07754456997 -1.08639070392 -2.09480184317 -1.08639222383 -2.11205893755 -1.08639660477 -2.12931627035 -1.08640387654 -2.14657360315 -1.08641403914 -2.16383129358 -1.08642703295 -2.18108898401 -1.08644288778 -2.19834715128 -1.08646160364 -2.21560555697 -1.08648315072 -2.2328645587 -1.08650755882 -2.25012385845 -1.08651962876 -2.26933401823 -1.08650606871 -2.28854578734 -1.08648183942 -2.3058052659 -1.08646041155 -2.32306402921 -1.08644187451 -2.34032255411 -1.08642616868 -2.35758060217 -1.08641332388 -2.37483847141 -1.0864033699 -2.39209586382 -1.08639630675 -2.40935325622 -1.08639204502 -2.42661041021 -1.08639070392 -2.44386774302 -1.08639222383 -2.4611248374 -1.08639663458 -2.4783821702 -1.08640387655 -2.4956394434 -1.08641400934 -2.51289707422 -1.08642703295 -2.53015476465 -1.08644288778 -2.54741293192 -1.08646160364 -2.5646713376 -1.08648315072 -2.58193033934 -1.08650755882 -2.59918963909 -1.08651962876 -2.61839979887 -1.08650606871 -2.63761156798 -1.08648183942 -2.65487104654 -1.08646041155 -2.67212986946 -1.0864418447 -2.68938839435 -1.08642613888 -2.70664638281 -1.08641332388 -2.72390431166 -1.0864033699 -2.74116176367 -1.08639630675 -2.75841921568 -1.08639204502 -2.77567636966 -1.08639070392 -2.79293358326 -1.08639219403 -2.81019067765 -1.08639660477 -2.82744801044 -1.08640390635 -2.84470522404 -1.08641403914 -2.86196285486 -1.08642703295 -2.87922060489 -1.08644288778 -2.89647883177 -1.08646160364 -2.91373717785 -1.08648312092 -2.93099617958 -1.08650752902 -2.94825553894 -1.08651959896 -2.96746569872 -1.08650603891 -2.98667746782 -1.08648180962 -3.00393688679 -1.08646038175 -3.0211957097 -1.08644187451 -3.0384542346 -1.08642616868 -3.05571222305 -1.08641335368 -3.0729701519 -1.08640342951 -3.09022760391 -1.08639633656 -3.10748505592 -1.08639204502 -3.1247421503 -1.08639070392 --3.14118591149 -1.08639219403 --3.12392878532 -1.08639660477 --3.10667145253 -1.08640387655 --3.08941423893 -1.08641400934 --3.0721566081 -1.08642700315 --3.05489879847 -1.08644282818 --3.03764057159 -1.08646160364 --3.02038222551 -1.08648318052 --3.00312322378 -1.08650755882 --2.98586392403 -1.08651956916 --2.96665382385 -1.0865060091 --2.94744205475 -1.08648183942 --2.93018257618 -1.08646041155 --2.91292381287 -1.08644187451 --2.89566528797 -1.08642616868 --2.87840723991 -1.08641332388 --2.86114931107 -1.0864033699 --2.84389185905 -1.08639630675 --2.82663440704 -1.08639204502 --2.80937731266 -1.08639070392 --2.79212003946 -1.08639222383 --2.77486294508 -1.08639663458 --2.75760561228 -1.08640390635 --2.74034827948 -1.08641403914 --2.72309064865 -1.08642703295 --2.70583295822 -1.08644288778 --2.68857473135 -1.08646160364 --2.67131632566 -1.08648315072 --2.65405732393 -1.08650758862 --2.63679802418 -1.08651965857 --2.6175878644 -1.08650606871 --2.59837609529 -1.08648183942 --2.58111667633 -1.08646041155 --2.56385791302 -1.0864418447 --2.54659932852 -1.08642613888 --2.52934134007 -1.08641332388 --2.51208353043 -1.0864033699 --2.49482607842 -1.08639630675 --2.4775686264 -1.08639204502 --2.46031147241 -1.08639070392 --2.44305413961 -1.08639222383 --2.42579704523 -1.08639663458 --2.40853971243 -1.08640390635 --2.39128243923 -1.08641400933 --2.37402480841 -1.08642697334 --2.35676711798 -1.08644285798 --2.33950895071 -1.08646160364 --2.32225054502 -1.08648315072 --2.30499154329 -1.08650755882 --2.28773224354 -1.08651959896 --2.26852208376 -1.0865060091 --2.24931031465 -1.08648180962 --2.23205083608 -1.08646041155 --2.21479201317 -1.0864418447 --2.19753348827 -1.08642613888 --2.18027549982 -1.08641332388 --2.16301763058 -1.0864033699 --2.14576017857 -1.08639630675 --2.12850266695 -1.08639204502 --2.11124551296 -1.08639070392 --2.09398829937 -1.08639219403 --2.07673120499 -1.08639660477 --2.05947387219 -1.08640387655 --2.04221665859 -1.08641400934 --2.02495902777 -1.08642703295 --2.00770127773 -1.08644288778 --1.99044308066 -1.08646160364 --1.97318470478 -1.08648312092 --1.95592564344 -1.08650752902 --1.93866631388 -1.08651962876 --1.91945621371 -1.08650606871 --1.90024447441 -1.08648183942 --1.88298502565 -1.08646041155 --1.86572620273 -1.08644190431 --1.84846764803 -1.08642619848 --1.83120965958 -1.08641332388 --1.81395176053 -1.0864033401 --1.79669430852 -1.08639627695 --1.77943685651 -1.08639204502 --1.76217970252 -1.08639073372 --1.74492245912 -1.08639222383 --1.72766539454 -1.08639660477 --1.71040806174 -1.08640387654 --1.69315078855 -1.08641400933 --1.67589315772 -1.08642700315 --1.65863543749 -1.08644285798 --1.64137721062 -1.08646160364 --1.62411883474 -1.08648315072 --1.606859833 -1.08650755882 --1.58960050344 -1.08651962876 --1.57039037347 -1.08650603891 --1.55117860436 -1.08648177981 --1.5339191258 -1.08646038175 --1.51666036248 -1.0864418447 --1.49940183759 -1.08642613888 --1.48214381933 -1.08641332388 --1.46488595009 -1.0864033401 --1.44762849808 -1.08639627695 --1.43037104607 -1.08639204502 --1.41311389208 -1.08639070392 --1.39585661888 -1.08639219403 --1.3785995245 -1.08639660477 --1.36134216189 -1.08640387655 --1.3440848887 -1.08641400934 --1.32682725787 -1.08642703295 --1.30956956744 -1.08644288778 --1.29231137037 -1.08646160364 --1.27505299449 -1.08648315072 --1.25779399276 -1.08650755882 --1.2405346632 -1.08651962876 --1.22132450342 -1.08650606871 --1.20211273432 -1.08648183942 --1.18485328555 -1.08646041155 --1.16759449244 -1.08644187451 --1.15033593774 -1.08642616868 --1.13307794929 -1.08641332388 --1.11582008004 -1.0864033699 --1.09856262803 -1.08639630675 --1.08130517602 -1.08639204502 --1.06404805183 -1.08639070392 --1.04679077864 -1.08639222383 --1.02953368425 -1.08639660477 --1.01227635145 -1.08640387654 --0.995019063353 -1.08641403914 --0.977761402726 -1.08642703295 --0.960503712296 -1.08644288778 --0.943245559931 -1.08646160364 --0.925987154245 -1.08648315072 --0.908728137612 -1.08650755882 --0.891468808055 -1.08651962876 --0.872258663177 -1.08650606871 --0.853046894074 -1.08648183942 --0.835787430406 -1.08646041155 --0.818528652191 -1.08644187451 --0.801270127296 -1.08642616868 --0.784012109041 -1.08641332388 --0.766754195094 -1.0864033699 --0.749496757984 -1.08639630675 --0.732239320874 -1.08639204502 --0.714982181787 -1.08639070392 --0.697724923491 -1.08639222383 --0.680467844009 -1.08639663458 --0.663210496306 -1.08640387655 --0.645953223109 -1.08641400934 --0.628695577383 -1.08642703295 --0.611437857151 -1.08644288778 --0.594179660082 -1.08646160364 --0.576921269297 -1.08648315072 --0.559662267566 -1.08650755882 --0.542402967811 -1.08651962876 --0.523192837834 -1.08650606871 --0.50398106128 -1.08648183942 --0.486721597612 -1.08646041155 --0.469462804496 -1.0864418447 --0.452204249799 -1.08642613888 --0.434946253896 -1.08641332388 --0.417688377201 -1.0864033699 --0.400430932641 -1.08639630675 --0.38317348063 -1.08639204502 --0.365916326642 -1.08639070392 --0.348659060896 -1.08639219403 --0.331401973963 -1.08639660477 --0.31414463371 -1.08640390635 --0.296887367964 -1.08641403914 --0.279629729688 -1.08642703295 --0.262372016907 -1.08644288778 --0.245113816112 -1.08646160364 --0.227855425328 -1.08648312092 --0.210596427321 -1.08650752902 --0.193337112665 -1.08651959896 --0.174126964063 -1.10364437103 --0.154912214726 -1.10361996293 --0.137652751058 -1.10359838605 --0.120393946767 -1.1035797596 --0.103135382756 -1.10356390476 --0.0858773700893 -1.10355100035 --0.0686194850132 -1.10354098678 --0.0513620264828 -1.10353380442 --0.0341045637615 -1.10352951288 --0.0168474055827 -1.10352820158 -0.000409875530748 -1.1035297215 -0.0176669755019 -1.10353413224 -0.0349243204109 -1.10354146362 -0.0521816080436 -1.10355168581 -0.069439268671 -1.10356476903 -0.086696986109 -1.10358071327 -0.103955198079 -1.10359960795 -0.12121360004 -1.10362136364 -0.138472620398 -1.10364595056 -0.155731949955 -1.1036580503 -0.174941964448 -1.10364437103 -0.194153614342 -1.10361999273 -0.211413096636 -1.10359841585 -0.228671908379 -1.1035797596 -0.245930474251 -1.10356390476 -0.263188488781 -1.10355094075 -0.280446372926 -1.10354092717 -0.297703832388 -1.10353380442 -0.314961284399 -1.10352951288 -0.332218430936 -1.10352817178 -0.349475711584 -1.1035297215 -0.366732820868 -1.10353416204 -0.383990176022 -1.10354146362 -0.40124746412 -1.10355168581 -0.418505124748 -1.10356479883 -0.435762837529 -1.10358077288 -0.453021042049 -1.10359963775 -0.470279447735 -1.10362136364 -0.487538471818 -1.10364598036 -0.504797801375 -1.10365810991 -0.524007827044 -1.10364440083 -0.54321949184 -1.10361999273 -0.560478955507 -1.10359841585 -0.577737733722 -1.1035797298 -0.59499630332 -1.10356387496 -0.612254336476 -1.10355094075 -0.629512235522 -1.10354092717 -0.646769702435 -1.10353380442 -0.664027154445 -1.10352951288 -0.681284293532 -1.10352817178 -0.69854156673 -1.10352969169 -0.715798690915 -1.10353413224 -0.733056038618 -1.10354146362 -0.750313311815 -1.10355165601 -0.767570972442 -1.10356473923 -0.784828692675 -1.10358074307 -0.802086904645 -1.10359963775 -0.81934531033 -1.10362136364 -0.836604326963 -1.10364595056 -0.853863656521 -1.1036580801 -0.87307369709 -1.10364437103 -0.892285332084 -1.10361996293 -0.90954478085 -1.10359841585 -0.926803588867 -1.1035797298 -0.944062173367 -1.10356387496 -0.961320176721 -1.10355097055 -0.978578045964 -1.10354095697 -0.995835527777 -1.10353380442 -1.01309302449 -1.10352951288 -1.03035020828 -1.10352817178 -1.04760748148 -1.10352969169 -1.06486454606 -1.10353413224 -1.08212187886 -1.10354146362 -1.09937918186 -1.10355168581 -1.11663684249 -1.10356479883 -1.13389453292 -1.10358077288 -1.15115275979 -1.10359963775 -1.16841116548 -1.10362133384 -1.18567016721 -1.10364595056 -1.20292949676 -1.10365813971 -1.22213950753 -1.10364443064 -1.24135118723 -1.10361999273 -1.2586106658 -1.10359841585 -1.27586945891 -1.1035797596 -1.29312801361 -1.10356390476 -1.31038600206 -1.10355094075 -1.32764390111 -1.10354092717 -1.34490135312 -1.10353380442 -1.36215880513 -1.10352951288 -1.37941598892 -1.10352817178 -1.39667326212 -1.10352969169 -1.4139303565 -1.10353413224 -1.4311877191 -1.10354143381 -1.44844502211 -1.10355165601 -1.46570268273 -1.10356476903 -1.48296040296 -1.10358074307 -1.50021860004 -1.10359960795 -1.51747700572 -1.10362133384 -1.53473603725 -1.10364595056 -1.55199533701 -1.10365810991 -1.57120534778 -1.10364440083 -1.59041699767 -1.10361993313 -1.60767647624 -1.10359838605 -1.62493529916 -1.1035797298 -1.64219385386 -1.10356387496 -1.65945187211 -1.10355094075 -1.67670977116 -1.10354089737 -1.69396722317 -1.10353377462 -1.71122470498 -1.10352951288 -1.72848185897 -1.10352817178 -1.74573913217 -1.10352969169 -1.76299622655 -1.10353413224 -1.78025355935 -1.10354146362 -1.79751086235 -1.10355168581 -1.81476852298 -1.10356479883 -1.83202624321 -1.10358077288 -1.84928447008 -1.10359963775 -1.86654284596 -1.10362139344 -1.8838018477 -1.10364598036 -1.90106120706 -1.10365810991 -1.92027124763 -1.10364443064 -1.93948289752 -1.10361999273 -1.95674237609 -1.10359841585 -1.9740011692 -1.1035797596 -1.9912597239 -1.10356390476 -2.00851774216 -1.10355094075 -2.0257756114 -1.10354092717 -2.04303306341 -1.10353380442 -2.06029051542 -1.10352951288 -2.07754766941 -1.10352820158 -2.09480500221 -1.1035297215 -2.1120620966 -1.10353410244 -2.1293194294 -1.10354143381 -2.1465767622 -1.10355168581 -2.16383445263 -1.10356479883 -2.18109214306 -1.10358077288 -2.19835031032 -1.10359963775 -2.21560871601 -1.10362136364 -2.23286771775 -1.10364595056 -2.2501270771 -1.10365810991 -2.26933711767 -1.10364443064 -2.28854870796 -1.10361999273 -2.30580818653 -1.10359841585 -2.32306700945 -1.1035797596 -2.34032553434 -1.10356390476 -2.3575835824 -1.10355094075 -2.37484151125 -1.10354092717 -2.39209896326 -1.10353380442 -2.40935635567 -1.10352951288 -2.42661345005 -1.10352817178 -2.44387078285 -1.1035297215 -2.46112787724 -1.10353416204 -2.47838521004 -1.10354146362 -2.49564254284 -1.10355168581 -2.51290023327 -1.10356479883 -2.5301579237 -1.10358077288 -2.54741609097 -1.10359960795 -2.56467449665 -1.10362133384 -2.58193355799 -1.10364595056 -2.59919291735 -1.10365810991 -2.61840295792 -1.10364443064 -2.63761460781 -1.10361999273 -2.65487408638 -1.10359841585 -2.6721329093 -1.10357969999 -2.68939143419 -1.10356384516 -2.70664942264 -1.10355094075 -2.72390735149 -1.10354092717 -2.7411648035 -1.10353380442 -2.75842225551 -1.10352951288 -2.77567946911 -1.10352817178 -2.7929366827 -1.10352969169 -2.81019377709 -1.10353413224 -2.82745116949 -1.10354146362 -2.84470838308 -1.10355168581 -2.86196601391 -1.10356479883 -2.87922382355 -1.10358077288 -2.89648205042 -1.10359963775 -2.9137403965 -1.10362133384 -2.93099939823 -1.10364592076 -2.94825869799 -1.1036580503 -2.96746873856 -1.10364437103 -2.98668044805 -1.10361996293 -3.00393992662 -1.10359838605 -3.02119868994 -1.1035797596 -3.03845721483 -1.10356390476 -3.05571526289 -1.10355100035 -3.07297319174 -1.10354098678 -3.09023064375 -1.10353380442 -3.10748809576 -1.10352951288 -3.12474524975 -1.10352820158 --3.14118281205 -1.1035297215 --3.12392568588 -1.10353413224 --3.10666829348 -1.10354146362 --3.08941107989 -1.10355168581 --3.07215344906 -1.10356476903 --3.05489563942 -1.10358071327 --3.03763741255 -1.10359960795 --3.02037900686 -1.10362136364 --3.00312000513 -1.10364595056 --2.98586076498 -1.1036580503 --2.96665072441 -1.10364437103 --2.94743901491 -1.10361999273 --2.93017953634 -1.10359841585 --2.91292077303 -1.1035797596 --2.89566224814 -1.10356390476 --2.87840420008 -1.10355094075 --2.86114627123 -1.10354092717 --2.84388881922 -1.10353380442 --2.82663136721 -1.10352951288 --2.80937421322 -1.10352817178 --2.79211688042 -1.1035297215 --2.77485978603 -1.10353416204 --2.75760245323 -1.10354146362 --2.74034512043 -1.10355168581 --2.72308748961 -1.10356479883 --2.70582979918 -1.10358077288 --2.68857157231 -1.10359963775 --2.67131316662 -1.10362136364 --2.65405416489 -1.10364598036 --2.63679480552 -1.10365810991 --2.61758476495 -1.10364440083 --2.59837317467 -1.10361999273 --2.5811137557 -1.10359841585 --2.56385493278 -1.1035797298 --2.54659628868 -1.10356387496 --2.52933824063 -1.10355094075 --2.51208043098 -1.10354092717 --2.49482297897 -1.10353380442 --2.47756552696 -1.10352951288 --2.46030843258 -1.10352817178 --2.44305109977 -1.10352969169 --2.42579394579 -1.10353413224 --2.40853661299 -1.10354146362 --2.39127933979 -1.10355165601 --2.37402164936 -1.10356473923 --2.35676395893 -1.10358074307 --2.33950579167 -1.10359963775 --2.32224738598 -1.10362136364 --2.30498838425 -1.10364595056 --2.28772902488 -1.1036580801 --2.26851892471 -1.10364437103 --2.24930733442 -1.10361996293 --2.23204791546 -1.10359841585 --2.21478903294 -1.1035797298 --2.19753044844 -1.10356387496 --2.18027245998 -1.10355097055 --2.16301459074 -1.10354095697 --2.14575713873 -1.10353380442 --2.12849962711 -1.10352951288 --2.11124241352 -1.10352817178 --2.09398519993 -1.10352969169 --2.07672810554 -1.10353413224 --2.05947071314 -1.10354146362 --2.04221349955 -1.10355168581 --2.02495586872 -1.10356479883 --2.00769811869 -1.10358077288 --1.99043992162 -1.10359963775 --1.97318151593 -1.10362133384 --1.9559224546 -1.10364595056 --1.93866312504 -1.10365813971 --1.91945314407 -1.10364443064 --1.90024149418 -1.10361999273 --1.88298201561 -1.10359841585 --1.86572319269 -1.1035797596 --1.84846460819 -1.10356390476 --1.83120661974 -1.10355094075 --1.81394872069 -1.10354092717 --1.79669126868 -1.10353380442 --1.77943381667 -1.10352951288 --1.76217666268 -1.10352817178 --1.74491938949 -1.10352969169 --1.7276622653 -1.10353413224 --1.7104049325 -1.10354143381 --1.6931476593 -1.10355165601 --1.67588999867 -1.10356476903 --1.65863224864 -1.10358074307 --1.64137402177 -1.10359960795 --1.62411564588 -1.10362133384 --1.60685664415 -1.10364595056 --1.58959731459 -1.10365810991 --1.57038727403 -1.10364440083 --1.55117562413 -1.10361993313 --1.53391614556 -1.10359838605 --1.51665735245 -1.1035797298 --1.49939879775 -1.10356387496 --1.48214074969 -1.10355094075 --1.46488288045 -1.10354089737 --1.44762542844 -1.10353377462 --1.43036797643 -1.10352951288 --1.41311082244 -1.10352817178 --1.39585351944 -1.10352969169 --1.37859642506 -1.10353413224 --1.36133906245 -1.10354146362 --1.34408175945 -1.10355168581 --1.32682409882 -1.10356479883 --1.3095664084 -1.10358077288 --1.29230818153 -1.10359963775 --1.27504977584 -1.10362139344 --1.25779077411 -1.10364598036 --1.24053144455 -1.10365810991 --1.22132140398 -1.10364443064 --1.20210975409 -1.10361999273 --1.18485030532 -1.10359841585 --1.1675914824 -1.1035797596 --1.1503328979 -1.10356390476 --1.13307490945 -1.10355094075 --1.1158170402 -1.10354092717 --1.09855958819 -1.10353380442 --1.08130213618 -1.10352951288 --1.06404495239 -1.10352820158 --1.0467876792 -1.1035297215 --1.02953058482 -1.10353410244 --1.01227322221 -1.10354143381 --0.995015949009 -1.10355168581 --0.977758273482 -1.10356479883 --0.960500538349 -1.10358077288 --0.943242371082 -1.10359963775 --0.925983965397 -1.10362136364 --0.908724933862 -1.10364595056 --0.891465619206 -1.10365810991 --0.872255593538 -1.10364443064 --0.853043928743 -1.10361999273 --0.835784435272 -1.10359841585 --0.818525642156 -1.1035797596 --0.801267117262 -1.10356390476 --0.784009084106 -1.10355094075 --0.766751155257 -1.10354092717 --0.749493703246 -1.10353380442 --0.732236281037 -1.10352951288 --0.714979156852 -1.10352817178 --0.697721853853 -1.1035297215 --0.680464729667 -1.10353416204 --0.663207367063 -1.10354146362 --0.645950078964 -1.10355168581 --0.628692433238 -1.10356479883 --0.611434698105 -1.10358077288 --0.594176486135 -1.10359960795 --0.57691809535 -1.10362133384 --0.559659078717 -1.10364595056 --0.54239974916 -1.10365810991 --0.523189723492 -1.10364443064 --0.503978073597 -1.10361999273 --0.486718609929 -1.10359841585 --0.469459801912 -1.10357969999 --0.452201224864 -1.10356384516 --0.434943221509 -1.10355094075 --0.417685344815 -1.10354092717 --0.400427885353 -1.10353380442 --0.383170418441 -1.10352951288 --0.365913249552 -1.10352817178 --0.348655968905 -1.10352969169 --0.331398867071 -1.10353413224 --0.314141519368 -1.10354146362 --0.29688423872 -1.10355168581 --0.279626578093 -1.10356479883 --0.262368857861 -1.10358077288 --0.24511064589 -1.10359963775 --0.22785224393 -1.10362133384 --0.210593231022 -1.10364592076 --0.193333901465 -1.1036580503 --0.174123868346 -1.1207614839 --0.154909286648 -1.12073686719 --0.137649796903 -1.12071511149 --0.120390977711 -1.12069630623 --0.10313240625 -1.12068036199 --0.0858743805438 -1.12066739797 --0.0686164814979 -1.12065729499 --0.0513590117916 -1.12065005303 --0.0341015374288 -1.12064576149 --0.0168443652801 -1.12064445019 -0.000412928173318 -1.1206459701 -0.0176700407173 -1.12065041065 -0.0349273988977 -1.12065777183 -0.0521846981719 -1.12066805363 -0.0694423709065 -1.12068128586 -0.086700104177 -1.12069737911 -0.103958329186 -1.12071633339 -0.121216738597 -1.1207382679 -0.138475771994 -1.12076309323 -0.155735120177 -1.12077525258 -0.174945019186 -1.1207614541 -0.194156553596 -1.12073686719 -0.211416047067 -1.12071511149 -0.228674869985 -1.12069630623 -0.245933450758 -1.12068036199 -0.263191469013 -1.12066736817 -0.280449368059 -1.12065723539 -0.297706849873 -1.12065002322 -0.314964316785 -1.12064573169 -0.332221470773 -1.12064439058 -0.349478758871 -1.1206459403 -0.366735890507 -1.12065041065 -0.383993253112 -1.12065777183 -0.40125054121 -1.12066805363 -0.418508216739 -1.12068125605 -0.435765944421 -1.12069734931 -0.453024163842 -1.12071639299 -0.470282584429 -1.1207382977 -0.487541615963 -1.12076306343 -0.50480094552 -1.12077525258 -0.524010866881 -1.1207614541 -0.543222427368 -1.12073686719 -0.560481905937 -1.12071511149 -0.577740713954 -1.12069630623 -0.594999298453 -1.12068036199 -0.612257346511 -1.12066733837 -0.629515245557 -1.12065720558 -0.646772712469 -1.12065002322 -0.664030194282 -1.12064573169 -0.68128734827 -1.12064439058 -0.698544621467 -1.1206459403 -0.715801730752 -1.12065041065 -0.733059093356 -1.12065777183 -0.750316396355 -1.12066805363 -0.767574071884 -1.12068125605 -0.784831807017 -1.12069734931 -0.802090018987 -1.12071636319 -0.819348439574 -1.1207382679 -0.836607471109 -1.12076306343 -0.853866815567 -1.12077528238 -0.873076751828 -1.1207614839 -0.892288267613 -1.12073686719 -0.90954773128 -1.12071511149 -0.926806554198 -1.12069630623 -0.944065138698 -1.12068036199 -0.961323156953 -1.12066736817 -0.978581055999 -1.12065723539 -0.995838552713 -1.12065002322 -1.01309603453 -1.12064576149 -1.03035321832 -1.12064442038 -1.04761052132 -1.1206459403 -1.0648676157 -1.12065041065 -1.0821249485 -1.12065777183 -1.0993822515 -1.12066805363 -1.11663994193 -1.12068128586 -1.13389766216 -1.12069737911 -1.15115588903 -1.12071639299 -1.16841429472 -1.1207382977 -1.18567332625 -1.12076309323 -1.20293268561 -1.12077531218 -1.22214257717 -1.1207614839 -1.24135410786 -1.12073686719 -1.25861361623 -1.12071514129 -1.27587243915 -1.12069633603 -1.29313099384 -1.12068036199 -1.31038901209 -1.12066736817 -1.32764691114 -1.12065723539 -1.34490436315 -1.12065002322 -1.36216184497 -1.12064573169 -1.37941905856 -1.12064439058 -1.39667633176 -1.1206459403 -1.41393342614 -1.12065041065 -1.43119081855 -1.12065777183 -1.44844812155 -1.12066805363 -1.46570575237 -1.12068125605 -1.48296350241 -1.12069734931 -1.50022175908 -1.12071636319 -1.51748016477 -1.1207382679 -1.5347391963 -1.12076306343 -1.55199852586 -1.12077528238 -1.57120841742 -1.1207614839 -1.5904199481 -1.12073686719 -1.60767942667 -1.12071511149 -1.62493824959 -1.12069633603 -1.64219683408 -1.12068039179 -1.65945485234 -1.12066733837 -1.67671275139 -1.12065720558 -1.6939702332 -1.12065002322 -1.71122771502 -1.12064576149 -1.728484869 -1.12064442038 -1.745742172 -1.1206459403 -1.76299929619 -1.12065041065 -1.78025662899 -1.12065777183 -1.79751393199 -1.12066805363 -1.81477162242 -1.12068128586 -1.83202937245 -1.12069737911 -1.84928759932 -1.12071636319 -1.86654597521 -1.1207382977 -1.88380500674 -1.12076309323 -1.9010643661 -1.12077528238 -1.92027428747 -1.1207614839 -1.93948581815 -1.12073686719 -1.95674529672 -1.12071514129 -1.97400414944 -1.12069633603 -1.99126273393 -1.12068036199 -2.00852069258 -1.12066736817 -2.02577859163 -1.12065723539 -2.04303610325 -1.12065002322 -2.06029355526 -1.12064576149 -2.07755070925 -1.12064445019 -2.09480804205 -1.1206459701 -2.11206519604 -1.12065041065 -2.12932252884 -1.12065777183 -2.14657980204 -1.12066805363 -2.16383749247 -1.12068128586 -2.1810952425 -1.12069737911 -2.19835340977 -1.12071639299 -2.21561181545 -1.1207382977 -2.23287087679 -1.12076306343 -2.25013023615 -1.12077528238 -2.26934015751 -1.1207614839 -2.2885516882 -1.12073686719 -2.30581116676 -1.12071511149 -2.32306998968 -1.12069630623 -2.34032851457 -1.12068036199 -2.35758656263 -1.12066736817 -2.37484449148 -1.12065723539 -2.39210194349 -1.12065002322 -2.4093593955 -1.12064576149 -2.42661654949 -1.12064439058 -2.44387388229 -1.1206459105 -2.46113097668 -1.12065041065 -2.47838830948 -1.12065777183 -2.49564564228 -1.12066805363 -2.51290333271 -1.12068125605 -2.53016102314 -1.12069734931 -2.54741925001 -1.12071636319 -2.5646776557 -1.1207382679 -2.58193671703 -1.12076306343 -2.59919607639 -1.12077528238 -2.61840599775 -1.1207614839 -2.63761758804 -1.12073686719 -2.65487706661 -1.12071511149 -2.67213582992 -1.12069627642 -2.68939441443 -1.12068033218 -2.70665246248 -1.12066733837 -2.72391033173 -1.12065720558 -2.74116778374 -1.12065002322 -2.75842529535 -1.12064576149 -2.77568250895 -1.12064442038 -2.79293972254 -1.1206459403 -2.81019681692 -1.12065041065 -2.82745426893 -1.12065777183 -2.84471154213 -1.12066805363 -2.86196911335 -1.12068128586 -2.87922686339 -1.12069737911 -2.89648514986 -1.12071639299 -2.91374361515 -1.1207382977 -2.93100261688 -1.12076306343 -2.94826185703 -1.12077528238 -2.96747177839 -1.1207614839 -2.98668336868 -1.12073686719 -3.00394284725 -1.12071511149 -3.02120167017 -1.12069630623 -3.03846025467 -1.12068036199 -3.05571824312 -1.12066739797 -3.07297617197 -1.12065729499 -3.09023368359 -1.12065005303 -3.1074911356 -1.12064576149 -3.12474828958 -1.12064445019 --3.14117977221 -1.1206459701 --3.12392264605 -1.12065041065 --3.10666519404 -1.12065777183 --3.08940792084 -1.12066805363 --3.07215034962 -1.12068128586 --3.05489259958 -1.12069737911 --3.03763431311 -1.12071633339 --3.02037584782 -1.1207382679 --3.00311684608 -1.12076309323 --2.98585760593 -1.12077525258 --2.96664768457 -1.1207614541 --2.94743609428 -1.12073686719 --2.93017661572 -1.12071511149 --2.9129177928 -1.12069630623 --2.8956592083 -1.12068036199 --2.87840121985 -1.12066736817 --2.861143291 -1.12065723539 --2.84388577938 -1.12065002322 --2.82662832737 -1.12064573169 --2.80937117338 -1.12064439058 --2.79211384058 -1.1206459403 --2.77485668659 -1.12065041065 --2.75759935379 -1.12065777183 --2.74034208059 -1.12066805363 --2.72308439016 -1.12068125605 --2.70582664013 -1.12069734931 --2.68856847286 -1.12071639299 --2.67131006718 -1.1207382977 --2.65405100584 -1.12076306343 --2.63679164648 -1.12077525258 --2.61758172512 -1.1207614541 --2.59837025404 -1.12073686719 --2.58111077547 -1.12071511149 --2.56385189295 -1.12069630623 --2.54659330845 -1.12068036199 --2.52933526039 -1.12066733837 --2.51207739115 -1.12065720558 --2.49481993914 -1.12065002322 --2.47756248713 -1.12064573169 --2.46030533314 -1.12064439058 --2.44304800033 -1.1206459403 --2.42579090595 -1.12065041065 --2.40853357315 -1.12065777183 --2.39127624035 -1.12066805363 --2.37401854992 -1.12068125605 --2.35676085949 -1.12069734931 --2.33950269222 -1.12071636319 --2.32224428654 -1.1207382679 --2.3049852252 -1.12076306343 --2.28772586584 -1.12077528238 --2.26851588488 -1.1207614839 --2.24930435419 -1.12073686719 --2.23204493523 -1.12071511149 --2.21478611231 -1.12069630623 --2.19752752781 -1.12068036199 --2.18026947975 -1.12066736817 --2.16301161051 -1.12065723539 --2.1457541585 -1.12065002322 --2.12849664688 -1.12064576149 --2.11123943329 -1.12064442038 --2.09398216009 -1.1206459403 --2.07672506571 -1.12065041065 --2.0594676733 -1.12065777183 --2.0422104001 -1.12066805363 --2.02495276928 -1.12068128586 --2.00769501924 -1.12069737911 --1.99043676257 -1.12071639299 --1.97317835689 -1.1207382977 --1.95591932536 -1.12076309323 --1.93865996599 -1.12077531218 --1.91945007444 -1.1207614839 --1.90023854375 -1.12073686719 --1.88297903538 -1.12071514129 --1.86572021246 -1.12069633603 --1.84846165776 -1.12068036199 --1.83120363951 -1.12066736817 --1.81394571066 -1.12065723539 --1.79668825865 -1.12065002322 --1.77943077683 -1.12064573169 --1.76217362285 -1.12064439058 --1.74491634965 -1.1206459403 --1.72765919566 -1.12065041065 --1.71040186286 -1.12065777183 --1.69314458966 -1.12066805363 --1.67588689923 -1.12068125605 --1.6586291492 -1.12069734931 --1.64137092233 -1.12071636319 --1.62411251664 -1.1207382679 --1.60685348511 -1.12076306343 --1.58959415555 -1.12077528238 --1.57038423419 -1.1207614839 --1.55117270351 -1.12073686719 --1.53391322494 -1.12071511149 --1.51665440202 -1.12069633603 --1.49939581752 -1.12068039179 --1.48213776946 -1.12066733837 --1.46487987041 -1.12065720558 --1.4476223886 -1.12065002322 --1.43036493659 -1.12064576149 --1.4131077826 -1.12064442038 --1.3958504498 -1.1206459403 --1.37859335542 -1.12065041065 --1.36133602261 -1.12065777183 --1.34407868981 -1.12066805363 --1.32682099938 -1.12068128586 --1.30956327915 -1.12069737911 --1.29230505228 -1.12071636319 --1.27504664659 -1.1207382977 --1.25778764486 -1.12076309323 --1.2405282855 -1.12077528238 --1.22131836415 -1.1207614839 --1.20210683346 -1.12073686719 --1.18484732509 -1.12071514129 --1.16758850217 -1.12069633603 --1.15032991767 -1.12068036199 --1.13307189941 -1.12066736817 --1.11581403017 -1.12065723539 --1.09855657816 -1.12065002322 --1.08129909634 -1.12064576149 --1.06404188275 -1.12064445019 --1.04678460956 -1.1206459701 --1.02952751518 -1.12065041065 --1.01227012277 -1.12065777183 --0.995012834668 -1.12066805363 --0.977755174041 -1.12068128586 --0.960497424006 -1.12069737911 --0.943239241838 -1.12071639299 --0.925980836153 -1.1207382977 --0.908721774816 -1.12076306343 --0.89146246016 -1.12077528238 --0.872252553702 -1.1207614839 --0.853040978312 -1.12073686719 --0.835781484842 -1.12071511149 --0.818522691727 -1.12069630623 --0.80126413703 -1.12068036199 --0.784006088972 -1.12066736817 --0.766748175025 -1.12065723539 --0.749490708113 -1.12065002322 --0.7322332412 -1.12064576149 --0.714976087212 -1.12064439058 --0.697718784213 -1.1206459105 --0.680461660028 -1.12065041065 --0.663204282522 -1.12065777183 --0.645946979523 -1.12066805363 --0.628689318895 -1.12068125605 --0.611431598664 -1.12069734931 --0.594173371792 -1.12071636319 --0.576914951205 -1.1207382679 --0.559655934572 -1.12076306343 --0.542396590114 -1.12077528238 --0.523186653853 -1.1207614839 --0.503975115716 -1.12073686719 --0.486715652049 -1.12071511149 --0.469456836581 -1.12069627642 --0.452198252082 -1.12068033218 --0.434940226376 -1.12066733837 --0.417682334781 -1.12065720558 --0.400424860418 -1.12065002322 --0.383167386055 -1.12064576149 --0.365910209715 -1.12064442038 --0.348652906716 -1.1206459403 --0.331395797431 -1.12065041065 --0.314138442278 -1.12065777183 --0.296881146729 -1.12066805363 --0.279623478651 -1.12068128586 --0.262365743518 -1.12069737911 --0.245107520372 -1.12071639299 --0.227849107236 -1.1207382977 --0.210590075702 -1.12076306343 --0.193330734968 -1.12077528238 --0.174120824784 -1.14050865173 --0.154904611409 -1.1404838264 --0.137645099312 -1.14046189189 --0.120386263356 -1.14044290781 --0.103127673268 -1.14042684436 --0.0858696270734 -1.14041379094 --0.0686117084697 -1.14040359855 --0.051354217343 -1.14039632678 --0.0340967234224 -1.14039200544 --0.016839531716 -1.14039063454 -0.000417781993747 -1.14039218426 -0.0176749140955 -1.14039668441 -0.0349322929979 -1.14040410519 -0.0521896127612 -1.14041447639 -0.0694473059848 -1.14042779803 -0.0867050606757 -1.14044401049 -0.103963306174 -1.14046314359 -0.121221739799 -1.14048525691 -0.138480789959 -1.14051026106 -0.155740149319 -1.14052253961 -0.17494988069 -1.14050865173 -0.194161243737 -1.1404838562 -0.211420744657 -1.14046189189 -0.228679582476 -1.14044290781 -0.245938185602 -1.14042684436 -0.263196222484 -1.14041376114 -0.280454136431 -1.14040353894 -0.297711640597 -1.14039626717 -0.314969137311 -1.14039194584 -0.332226321101 -1.14039060473 -0.349483624101 -1.14039215446 -0.366740763187 -1.14039665461 -0.383998140693 -1.14040410519 -0.401255458593 -1.14041447639 -0.418513156474 -1.14042776823 -0.435770906508 -1.14044398069 -0.453029148281 -1.14046317339 -0.470287583768 -1.14048528671 -0.487546637654 -1.14051026106 -0.504805974662 -1.14052253961 -0.524015709758 -1.14050865173 -0.543227091432 -1.1404838562 -0.560486599803 -1.14046189189 -0.577745437622 -1.14044290781 -0.595004037023 -1.14042684436 -0.61226208508 -1.14041373134 -0.629519999027 -1.14040350914 -0.646777495742 -1.14039626717 -0.664035007358 -1.14039194584 -0.681292191148 -1.14039060473 -0.698549494147 -1.14039215446 -0.715806618333 -1.14039665461 -0.733063980937 -1.14040407538 -0.750321298837 -1.14041444659 -0.767579004169 -1.14042776823 -0.784836769104 -1.14044398069 -0.802094995976 -1.14046314359 -0.819353431463 -1.14048525691 -0.8366124928 -1.14051029086 -0.85387185216 -1.14052256942 -0.873081594705 -1.14050865173 -0.892292931676 -1.1404838562 -0.909552410245 -1.14046189189 -0.926811262965 -1.14044290781 -0.944069877267 -1.14042684436 -0.961327925325 -1.14041373134 -0.978585854173 -1.14040350914 -0.995843365788 -1.14039626717 -1.0131008327 -1.14039197564 -1.03035798669 -1.14039063454 -1.04761531949 -1.14039215446 -1.06487247348 -1.14039665461 -1.08212983608 -1.14040410519 -1.09938713908 -1.14041447639 -1.11664485932 -1.14042779803 -1.13390263915 -1.1404440403 -1.15116086602 -1.14046320319 -1.16841927171 -1.14048528671 -1.18567833304 -1.14051026106 -1.20293772221 -1.14052253961 -1.22214743495 -1.14050862193 -1.24135878682 -1.1404838264 -1.25861829519 -1.14046192169 -1.27587711811 -1.14044296742 -1.29313573241 -1.14042687416 -1.31039378047 -1.14041376114 -1.32765167952 -1.14040353894 -1.34490916133 -1.14039626717 -1.36216667294 -1.14039194584 -1.37942388654 -1.14039060473 -1.39668118954 -1.14039215446 -1.41393831372 -1.14039665461 -1.43119570613 -1.14040410519 -1.44845303893 -1.14041444659 -1.46571069956 -1.14042773843 -1.48296844959 -1.14044401049 -1.50022673607 -1.14046320319 -1.51748517156 -1.14048528671 -1.53474420309 -1.14051026106 -1.55200356245 -1.14052253961 -1.57121327519 -1.14050865173 -1.59042462706 -1.1404838562 -1.60768413543 -1.14046186209 -1.62494298815 -1.14044290781 -1.64220160246 -1.14042687416 -1.65945962071 -1.14041373134 -1.67671754956 -1.14040350914 -1.69397506118 -1.14039626717 -1.71123254299 -1.14039197564 -1.72848972678 -1.14039063454 -1.74574702978 -1.14039215446 -1.76300418377 -1.14039665461 -1.78026154638 -1.14040410519 -1.79751881957 -1.14041444659 -1.8147765398 -1.14042776823 -1.83203431964 -1.14044401049 -1.84929254651 -1.14046314359 -1.866550982 -1.14048522711 -1.88381004334 -1.14051023126 -1.90106940269 -1.14052253961 -1.92027914524 -1.14050865173 -1.93949049711 -1.1404838562 -1.95675000548 -1.14046192169 -1.9740088582 -1.14044293761 -1.9912674427 -1.14042684436 -2.00852543116 -1.14041376114 -2.02578336 -1.14040353894 -2.04304093122 -1.14039626717 -2.06029844284 -1.14039197564 -2.07755559683 -1.14039063454 -2.09481287003 -1.14039215446 -2.11207002401 -1.14039665461 -2.12932741642 -1.14040410519 -2.14658468962 -1.14041444659 -2.16384238005 -1.14042776823 -2.18110018968 -1.14044401049 -2.19835841656 -1.14046317339 -2.21561682224 -1.14048528671 -2.23287588358 -1.14051026106 -2.25013524294 -1.14052253961 -2.26934498548 -1.14050862193 -2.28855639696 -1.1404838264 -2.30581593514 -1.14046189189 -2.32307469845 -1.14044290781 -2.34033322334 -1.14042684436 -2.35759133101 -1.14041376114 -2.37484925985 -1.14040353894 -2.39210671186 -1.14039626717 -2.40936422348 -1.14039197564 -2.42662143707 -1.14039063454 -2.44387876987 -1.14039215446 -2.46113586426 -1.14039665461 -2.47839319706 -1.14040410519 -2.49565052986 -1.14041447639 -2.51290827989 -1.14042776823 -2.53016602993 -1.14044398069 -2.5474242568 -1.14046317339 -2.56468266249 -1.14048525691 -2.58194172382 -1.14051023126 -2.59920108318 -1.14052253961 -2.61841082573 -1.14050862193 -2.6376222372 -1.1404838264 -2.65488171577 -1.14046189189 -2.67214053869 -1.14044293761 -2.6893991828 -1.14042687416 -2.70665723085 -1.14041373134 -2.7239151001 -1.14040350914 -2.74117255211 -1.14039626717 -2.75843006373 -1.14039197564 -2.77568727732 -1.14039063454 -2.79294455051 -1.14039215446 -2.8102017045 -1.14039665461 -2.82745915651 -1.14040407538 -2.84471648932 -1.14041444659 -2.86197412014 -1.14042779803 -2.87923181057 -1.14044401049 -2.89649009705 -1.14046317339 -2.91374862194 -1.14048525691 -2.93100762367 -1.14051023126 -2.94826692343 -1.14052256942 -2.96747666597 -1.14050865173 -2.98668801785 -1.1404838264 -3.00394749641 -1.14046189189 -3.02120637894 -1.14044290781 -3.03846502304 -1.14042684436 -3.0557230115 -1.14041379094 -3.07298094034 -1.14040359855 -3.09023851156 -1.14039632678 -3.10749596358 -1.14039200544 -3.12475305796 -1.14039063454 --3.14117494424 -1.14039218426 --3.12391775846 -1.14039668441 --3.10666030645 -1.14040410519 --3.08940297365 -1.14041447639 --3.07214534283 -1.14042779803 --3.0548876524 -1.14044401049 --3.03762936592 -1.14046314359 --3.02037084102 -1.14048525691 --3.00311183929 -1.14051026106 --2.98585253954 -1.14052253961 --2.96664279699 -1.14050865173 --2.94743144512 -1.1404838562 --2.93017196656 -1.14046189189 --2.91291308403 -1.14044290781 --2.89565443993 -1.14042684436 --2.87839645148 -1.14041376114 --2.86113852262 -1.14040353894 --2.8438809514 -1.14039626717 --2.82662343979 -1.14039194584 --2.8093662858 -1.14039060473 --2.7921090126 -1.14039215446 --2.77485185862 -1.14039665461 --2.75759446621 -1.14040410519 --2.74033719301 -1.14041447639 --2.72307950258 -1.14042776823 --2.70582169294 -1.14044398069 --2.68856346607 -1.14046317339 --2.67130506039 -1.14048528671 --2.65404599905 -1.14051026106 --2.63678663969 -1.14052253961 --2.61757689714 -1.14050865173 --2.59836554527 -1.1404838562 --2.5811060071 -1.14046189189 --2.56384718418 -1.14044290781 --2.54658865929 -1.14042684436 --2.52933061123 -1.14041373134 --2.51207268238 -1.14040350914 --2.49481517077 -1.14039626717 --2.47755765915 -1.14039194584 --2.46030044556 -1.14039060473 --2.44304311275 -1.14039215446 --2.42578601837 -1.14039665461 --2.40852868557 -1.14040407538 --2.39127135277 -1.14041444659 --2.37401366234 -1.14042776823 --2.35675591231 -1.14044398069 --2.33949768543 -1.14046314359 --2.32223927975 -1.14048525691 --2.3049801588 -1.14051029086 --2.28772079945 -1.14052256942 --2.2685110569 -1.14050865173 --2.24929964543 -1.1404838562 --2.23204016685 -1.14046189189 --2.21478134394 -1.14044290781 --2.19752275944 -1.14042684436 --2.18026471138 -1.14041373134 --2.16300678253 -1.14040350914 --2.14574933052 -1.14039626717 --2.12849187851 -1.14039197564 --2.11123466492 -1.14039063454 --2.09397733212 -1.14039215446 --2.07672017813 -1.14039665461 --2.05946278572 -1.14040410519 --2.04220545292 -1.14041447639 --2.02494776249 -1.14042779803 --2.00769004226 -1.1404440403 --1.99043178559 -1.14046320319 --1.9731733501 -1.14048528671 --1.95591431856 -1.14051026106 --1.9386549592 -1.14052253961 --1.91944521666 -1.14050862193 --1.90023386479 -1.1404838264 --1.88297435641 -1.14046192169 --1.86571550369 -1.14044296742 --1.84845691919 -1.14042687416 --1.83119887114 -1.14041376114 --1.81394094229 -1.14040353894 --1.79668346048 -1.14039626717 --1.77942594886 -1.14039194584 --1.76216876507 -1.14039060473 --1.74491146207 -1.14039215446 --1.72765430808 -1.14039665461 --1.71039694548 -1.14040410519 --1.69313964248 -1.14041444659 --1.67588195205 -1.14042773843 --1.65862420201 -1.14044401049 --1.64136597514 -1.14046320319 --1.62410753965 -1.14048528671 --1.60684847832 -1.14051026106 --1.58958911896 -1.14052253961 --1.57037937641 -1.14050865173 --1.55116802454 -1.1404838562 --1.53390851617 -1.14046186209 --1.51664969325 -1.14044290781 --1.49939110875 -1.14042687416 --1.48213303089 -1.14041373134 --1.46487510204 -1.14040350914 --1.44761759043 -1.14039626717 --1.43036010861 -1.14039197564 --1.41310295463 -1.14039063454 --1.39584562182 -1.14039215446 --1.37858849764 -1.14039665461 --1.36133113503 -1.14040410519 --1.34407380223 -1.14041444659 --1.3268161118 -1.14042776823 --1.30955836177 -1.14044401049 --1.2923001051 -1.14046314359 --1.27504166961 -1.14048522711 --1.25778263807 -1.14051023126 --1.24052327871 -1.14052253961 --1.22131353617 -1.14050865173 --1.20210215449 -1.1404838562 --1.18484261632 -1.14046192169 --1.1675837934 -1.14044293761 --1.1503252089 -1.14042684436 --1.13306716084 -1.14041376114 --1.1158092618 -1.14040353894 --1.09855177999 -1.14039626717 --1.08129426837 -1.14039197564 --1.06403705478 -1.14039063454 --1.04677975178 -1.14039215446 --1.02952262759 -1.14039665461 --1.01226523519 -1.14040410519 --0.995007917286 -1.14041444659 --0.977750241756 -1.14042776823 --0.960492476821 -1.14044401049 --0.943234249949 -1.14046317339 --0.925975829363 -1.14048528671 --0.908716768026 -1.14051026106 --0.891457423568 -1.14052253961 --0.872247695923 -1.14050862193 --0.853036314249 -1.1404838264 --0.835776805878 -1.14046189189 --0.81851798296 -1.14044290781 --0.80125939846 -1.14042684436 --0.784001335502 -1.14041376114 --0.766743406653 -1.14040353894 --0.74948592484 -1.14039626717 --0.732228413225 -1.14039197564 --0.714971229434 -1.14039063454 --0.697713926435 -1.14039215446 --0.680456787348 -1.14039665461 --0.663199394942 -1.14040410519 --0.645942077041 -1.14041447639 --0.628684386611 -1.14042776823 --0.611426651478 -1.14044398069 --0.594168409705 -1.14046317339 --0.576909959316 -1.14048525691 --0.559650912881 -1.14051023126 --0.542391553521 -1.14052253961 --0.523181810975 -1.14050862193 --0.503970444202 -1.1404838264 --0.486710958183 -1.14046189189 --0.469452120364 -1.14044293761 --0.452193520963 -1.14042687416 --0.434935472905 -1.14041373134 --0.417677551508 -1.14040350914 --0.400420062244 -1.14039626717 --0.38316257298 -1.14039197564 --0.365905374289 -1.14039063454 --0.348648048938 -1.14039215446 --0.331390924752 -1.14039665461 --0.314133547247 -1.14040407538 --0.296876229346 -1.14041444659 --0.279618553817 -1.14042779803 --0.262360803783 -1.14044401049 --0.245102550834 -1.14046317339 --0.227844111621 -1.14048525691 --0.21058506146 -1.14051023126 --0.193325702101 -1.14052256942 --0.174115970731 -1.16028192639 --0.154900047928 -1.16025689244 --0.137640517205 -1.16023477912 --0.120381664485 -1.16021567583 --0.103123055771 -1.16019949317 --0.0858649928123 -1.16018629074 --0.0686070546508 -1.16017600894 --0.051349543035 -1.16016873717 --0.0340920295566 -1.16016438603 --0.0168348194566 -1.16016295552 -0.00042251381092 -1.16016453505 -0.0176796657033 -1.1601690948 -0.0349370632321 -1.16017657518 -0.0521944044158 -1.160187006 -0.0694521171972 -1.16020038724 -0.0867098867893 -1.16021674871 -0.103968152776 -1.16023609042 -0.121226606891 -1.16025835276 -0.13848567754 -1.16028353572 -0.155745055527 -1.16029593349 -0.174954611808 -1.16028192639 -0.194165799767 -1.16025692224 -0.211425323039 -1.16023480892 -0.22868418321 -1.16021570563 -0.245942797512 -1.16019949317 -0.263200856745 -1.16018626094 -0.280458793044 -1.16017597914 -0.29771630466 -1.16016867757 -0.314973823726 -1.16016429663 -0.332231044769 -1.16016292572 -0.34948837012 -1.16016450525 -0.366745516658 -1.1601690352 -0.384002909064 -1.16017654538 -0.401260256767 -1.160187006 -0.418517969549 -1.16020041704 -0.435775741935 -1.16021677852 -0.453034006059 -1.16023609042 -0.470292456448 -1.16025835276 -0.487551532686 -1.16028353572 -0.504810899496 -1.16029593349 -0.524020463228 -1.16028192639 -0.543231651187 -1.16025692224 -0.560491189361 -1.16023480892 -0.577750042081 -1.16021570563 -0.595008641481 -1.16019949317 -0.61226670444 -1.16018626094 -0.62952464819 -1.16017597914 -0.646782159806 -1.16016867757 -0.664039671421 -1.16016429663 -0.681296899914 -1.16016292572 -0.698554247617 -1.16016450525 -0.715811386704 -1.1601690352 -0.73306876421 -1.16017651558 -0.750326097011 -1.160187006 -0.767583817243 -1.16020041704 -0.78484159708 -1.16021674871 -0.802099853754 -1.16023609042 -0.819358319044 -1.16025835276 -0.83661738038 -1.16028356552 -0.853876754642 -1.16029596329 -0.873086318374 -1.16028192639 -0.892297491431 -1.16025692224 -0.909556999802 -1.16023477912 -0.926815867424 -1.16021564603 -0.944074496627 -1.16019946337 -0.961332559586 -1.16018626094 -0.978590503335 -1.16017597914 -0.995848029852 -1.16016867757 -1.01310554147 -1.16016432643 -1.03036272526 -1.16016295552 -1.04762005806 -1.16016450525 -1.06487721204 -1.160169065 -1.08213460445 -1.16017657518 -1.09939193726 -1.160187006 -1.11664965749 -1.16020038724 -1.13390746713 -1.16021677852 -1.1511657238 -1.16023612023 -1.16842412949 -1.16025835276 -1.18568319082 -1.16028353572 -1.20294260979 -1.16029593349 -1.22215217352 -1.16028189659 -1.24136334658 -1.16025689244 -1.25862285495 -1.16023480892 -1.27588170767 -1.16021570563 -1.29314035177 -1.16019949317 -1.31039839983 -1.16018626094 -1.32765632868 -1.16017597914 -1.3449138403 -1.16016867757 -1.36217135191 -1.16016429663 -1.3794285655 -1.16016292572 -1.3966858983 -1.16016450525 -1.41394305229 -1.160169065 -1.4312004447 -1.16017657518 -1.44845780731 -1.160187006 -1.46571552753 -1.16020041704 -1.48297327757 -1.16021680832 -1.50023156405 -1.16023615003 -1.51749002934 -1.16025841236 -1.53474909067 -1.16028359533 -1.55200845003 -1.16029596329 -1.57121798396 -1.16028192639 -1.59042918682 -1.16025692224 -1.60768872499 -1.16023477912 -1.62494757771 -1.16021564603 -1.64220619202 -1.16019946337 -1.65946426987 -1.16018626094 -1.67672222853 -1.16017597914 -1.69397974015 -1.16016867757 -1.71123725176 -1.16016429663 -1.72849446535 -1.16016292572 -1.74575176835 -1.16016450525 -1.76300892234 -1.1601690352 -1.78026631475 -1.16017654538 -1.79752361775 -1.16018697619 -1.81478133797 -1.16020038724 -1.83203914761 -1.16021677852 -1.84929740429 -1.16023609042 -1.86655586958 -1.16025832296 -1.88381493092 -1.16028350592 -1.90107429027 -1.16029593349 -1.92028388381 -1.16028192639 -1.93949505687 -1.16025692224 -1.95675459504 -1.16023480892 -1.97401344776 -1.16021567583 -1.99127203226 -1.16019946337 -2.00853011012 -1.16018626094 -2.02578800917 -1.16017597914 -2.04304552078 -1.16016867757 -2.060303092 -1.16016429663 -2.0775603056 -1.16016292572 -2.09481757879 -1.16016450525 -2.11207473278 -1.1601690352 -2.12933218479 -1.16017654538 -2.14658951759 -1.16018697619 -2.16384720802 -1.16020035744 -2.18110501766 -1.16021674871 -2.19836330414 -1.16023609042 -2.21562170983 -1.16025835276 -2.23288071156 -1.16028353572 -2.25014007092 -1.16029593349 -2.26934963464 -1.16028189659 -2.28856086731 -1.16025689244 -2.30582046509 -1.16023477912 -2.32307928801 -1.16021564603 -2.3403378725 -1.16019946337 -2.35759598017 -1.16018626094 -2.37485390902 -1.16017597914 -2.39211142063 -1.16016867757 -2.40936893225 -1.16016432643 -2.42662614584 -1.16016298532 -2.44388353825 -1.16016453505 -2.46114063263 -1.160169065 -2.47839796543 -1.16017657518 -2.49565529823 -1.1601870358 -2.51291304827 -1.16020044685 -2.5301708579 -1.16021677852 -2.54742908478 -1.16023609042 -2.56468749046 -1.16025832296 -2.5819466114 -1.16028350592 -2.59920603037 -1.16029593349 -2.6184155941 -1.16028189659 -2.63762676716 -1.16025689244 -2.65488624573 -1.16023480892 -2.67214512825 -1.16021573544 -2.68940377235 -1.16019952297 -2.70666182041 -1.16018626094 -2.72391974926 -1.16017597914 -2.74117726088 -1.16016867757 -2.75843477249 -1.16016432643 -2.77569198609 -1.16016295552 -2.79294931889 -1.16016450525 -2.81020647287 -1.1601690352 -2.82746386528 -1.16017651558 -2.84472125769 -1.16018697619 -2.86197900772 -1.16020041704 -2.87923669815 -1.16021677852 -2.89649492502 -1.16023609042 -2.91375344992 -1.16025832296 -2.93101251126 -1.16028350592 -2.94827187061 -1.16029596329 -2.96748143435 -1.16028192639 -2.9866926074 -1.16025689244 -3.00395214558 -1.16023477912 -3.02121096849 -1.16021567583 -3.038469553 -1.16019949317 -3.05572766066 -1.16018629074 -3.0729855895 -1.16017600894 -3.09024310112 -1.16016873717 -3.10750061274 -1.16016438603 -3.12475776672 -1.16016295552 --3.14117017587 -1.16016453505 --3.1239129901 -1.1601690948 --3.10665559769 -1.16017657518 --3.08939820528 -1.160187006 --3.07214045525 -1.16020038724 --3.05488276482 -1.16021674871 --3.03762447834 -1.16023609042 --3.02036595344 -1.16025835276 --3.00310695171 -1.16028353572 --2.98584759236 -1.16029593349 --2.96663802862 -1.16028192639 --2.94742685557 -1.16025692224 --2.93016731739 -1.16023480892 --2.91290849447 -1.16021570563 --2.89564990997 -1.16019949317 --2.87839180231 -1.16018626094 --2.86113381386 -1.16017597914 --2.84387630224 -1.16016867757 --2.82661879062 -1.16016429663 --2.80936157703 -1.16016292572 --2.79210430384 -1.16016450525 --2.77484714985 -1.1601690352 --2.75758969784 -1.16017654538 --2.74033236504 -1.160187006 --2.72307467461 -1.16020041704 --2.70581686497 -1.16021677852 --2.68855857849 -1.16023609042 --2.6713001728 -1.16025835276 --2.65404117107 -1.16028353572 --2.63678181172 -1.16029593349 --2.61757218838 -1.16028192639 --2.59836095572 -1.16025692224 --2.58110141754 -1.16023480892 --2.56384259463 -1.16021570563 --2.54658401012 -1.16019949317 --2.52932596207 -1.16018626094 --2.51206803322 -1.16017597914 --2.4948105216 -1.16016867757 --2.47755300999 -1.16016429663 --2.46029573679 -1.16016292572 --2.44303834438 -1.16016450525 --2.42578125 -1.1601690352 --2.4085239172 -1.16017651558 --2.3912665844 -1.160187006 --2.37400889397 -1.16020041704 --2.35675108433 -1.16021674871 --2.33949279785 -1.16023609042 --2.32223439216 -1.16025835276 --2.30497527123 -1.16028356552 --2.28771585226 -1.16029596329 --2.26850628853 -1.16028192639 --2.24929511547 -1.16025692224 --2.2320356369 -1.16023477912 --2.21477675438 -1.16021564603 --2.19751811028 -1.16019946337 --2.18026006222 -1.16018626094 --2.16300213337 -1.16017597914 --2.14574462176 -1.16016867757 --2.12848711014 -1.16016432643 --2.11122989654 -1.16016295552 --2.09397256374 -1.16016450525 --2.07671540976 -1.160169065 --2.05945801735 -1.16017657518 --2.04220068455 -1.160187006 --2.02494293451 -1.16020038724 --2.00768518448 -1.16021677852 --1.99042695761 -1.16023612023 --1.97316849232 -1.16025835276 --1.95590943098 -1.16028353572 --1.93865004182 -1.16029593349 --1.91944047809 -1.16028189659 --1.90022930503 -1.16025689244 --1.88296979666 -1.16023480892 --1.86571091413 -1.16021570563 --1.84845227003 -1.16019949317 --1.83119422197 -1.16018626094 --1.81393629313 -1.16017597914 --1.79667878151 -1.16016867757 --1.77942126989 -1.16016429663 --1.7621640563 -1.16016292572 --1.7449067235 -1.16016450525 --1.72764956951 -1.160169065 --1.71039217711 -1.16017657518 --1.69313484431 -1.160187006 --1.67587712407 -1.16020041704 --1.65861934423 -1.16021680832 --1.64136111737 -1.16023615003 --1.62410265207 -1.16025841236 --1.60684356093 -1.16028359533 --1.58958420157 -1.16029596329 --1.57037463784 -1.16028192639 --1.55116343498 -1.16025692224 --1.53390389681 -1.16023477912 --1.51664507389 -1.16021564603 --1.49938648939 -1.16019946337 --1.48212838173 -1.16018626094 --1.46487045288 -1.16017597914 --1.44761294127 -1.16016867757 --1.43035539984 -1.16016429663 --1.41309821605 -1.16016292572 --1.39584088325 -1.16016450525 --1.37858372927 -1.1601690352 --1.36132633686 -1.16017654538 --1.34406900406 -1.16018697619 --1.32681131363 -1.16020038724 --1.30955353379 -1.16021677852 --1.29229524732 -1.16023609042 --1.27503681183 -1.16025832296 --1.25777775049 -1.16028350592 --1.24051836133 -1.16029593349 --1.2213087976 -1.16028192639 --1.20209759474 -1.16025692224 --1.18483805656 -1.16023480892 --1.16757920384 -1.16021567583 --1.15032058954 -1.16019946337 --1.13306254148 -1.16018626094 --1.11580461264 -1.16017597914 --1.09854710102 -1.16016867757 --1.08128958941 -1.16016429663 --1.06403237582 -1.16016292572 --1.04677504301 -1.16016450525 --1.02951788902 -1.1601690352 --1.01226049662 -1.16017654538 --0.995003148914 -1.16018697619 --0.977745428681 -1.16020035744 --0.960487648845 -1.16021674871 --0.943229392171 -1.16023609042 --0.925970941782 -1.16025835276 --0.908711880445 -1.16028353572 --0.891452521085 -1.16029593349 --0.872242972254 -1.16028189659 --0.853031769395 -1.16025689244 --0.83577221632 -1.16023477912 --0.818513378501 -1.16021564603 --0.801254794001 -1.16019946337 --0.78399670124 -1.16018626094 --0.76673874259 -1.16017597914 --0.749481245875 -1.16016867757 --0.73222373426 -1.16016432643 --0.714966535568 -1.16016298532 --0.697709187865 -1.16016453505 --0.680452018976 -1.160169065 --0.66319462657 -1.16017657518 --0.645937308669 -1.1601870358 --0.628679588437 -1.16020044685 --0.6114218086 -1.16021677852 --0.594163566828 -1.16023609042 --0.576905101538 -1.16025832296 --0.5596460253 -1.16028350592 --0.542386651039 -1.16029593349 --0.523177087307 -1.16028189659 --0.503965891897 -1.16025689244 --0.486706376076 -1.16023480892 --0.469447530806 -1.16021573544 --0.452188916504 -1.16019952297 --0.434930838644 -1.16018626094 --0.417672894895 -1.16017597914 --0.40041539073 -1.16016867757 --0.383157879114 -1.16016432643 --0.365900665521 -1.16016295552 --0.34864333272 -1.16016450525 --0.331386186183 -1.1601690352 --0.314128778875 -1.16017651558 --0.296871438622 -1.16018697619 --0.279613740742 -1.16020041704 --0.262355968356 -1.16021677852 --0.245097696781 -1.16023609042 --0.227839242667 -1.16025832296 --0.210580177605 -1.16028350592 --0.193320799619 -1.16029596329 --0.174111239612 -1.17742794752 --0.154897384345 -1.17740273476 --0.137637838721 -1.17738047242 --0.1203789711 -1.17736124992 --0.10312035121 -1.17734494805 --0.0858622789383 -1.17733165622 --0.0686043296009 -1.17732131481 --0.0513468049467 -1.17731398344 --0.0340892793611 -1.1773096025 --0.0168320580851 -1.17730817199 -0.000425285659732 -1.17730975151 -0.0176824491937 -1.17731434107 -0.0349398585968 -1.17732188106 -0.0521972104907 -1.17733240127 -0.0694549335167 -1.17734587192 -0.0867127142846 -1.17736235261 -0.103970991448 -1.17738181353 -0.121229456738 -1.17740419507 -0.138488538563 -1.17742955685 -0.155747931451 -1.17744204402 -0.174957383424 -1.17742791772 -0.194168463349 -1.17740273476 -0.211428005248 -1.17738050222 -0.22868688032 -1.17736127972 -0.245945498347 -1.17734494805 -0.263203568756 -1.17733162641 -0.280461512506 -1.17732128501 -0.297719031572 -1.17731392384 -0.31497656554 -1.17730951309 -0.332233794034 -1.17730814219 -0.349491134286 -1.17730972171 -0.366748295724 -1.17731428146 -0.384005703032 -1.17732185125 -0.401263058186 -1.17733237147 -0.418520785868 -1.17734587192 -0.435778573155 -1.17736238241 -0.45303684473 -1.17738181353 -0.47029530257 -1.17740419507 -0.487554386258 -1.17742955685 -0.50481377542 -1.17744204402 -0.524023234844 -1.17742791772 -0.543234318495 -1.17740273476 -0.56049387157 -1.17738050222 -0.57775272429 -1.17736127972 -0.59501132369 -1.17734494805 -0.612269416452 -1.17733162641 -0.629527375102 -1.17732128501 -0.646784886718 -1.17731395364 -0.664042413235 -1.1773095429 -0.681299656629 -1.17730814219 -0.698557019233 -1.17730972171 -0.71581415832 -1.17731428146 -0.733071550727 -1.17732185125 -0.750328913331 -1.17733240127 -0.767586648464 -1.17734587192 -0.784844428301 -1.17736232281 -0.802102684974 -1.17738178373 -0.819361165166 -1.17740419507 -0.836620241403 -1.17742955685 -0.853879630566 -1.17744201422 -0.87308908999 -1.17742788792 -0.89230017364 -1.17740273476 -0.909559711814 -1.17738047242 -0.926818564534 -1.17736122012 -0.944077193737 -1.17734491825 -0.961335271597 -1.17733162641 -0.978593215346 -1.17732128501 -0.995850756763 -1.17731395364 -1.01310828328 -1.1773095727 -1.03036549688 -1.17730817199 -1.04762285948 -1.17730975151 -1.06488001346 -1.17731434107 -1.08213740587 -1.17732188106 -1.09939473868 -1.17733237147 -1.11665245891 -1.17734584212 -1.13391026855 -1.17736235261 -1.15116855502 -1.17738181353 -1.16842699051 -1.17740419507 -1.18568605185 -1.17742955685 -1.20294547081 -1.17744204402 -1.22215494514 -1.17742791772 -1.24136599899 -1.17740273476 -1.25862553715 -1.17738050222 -1.27588441968 -1.17736124992 -1.29314303398 -1.17734491825 -1.31040111184 -1.17733162641 -1.32765907049 -1.17732128501 -1.34491658211 -1.17731395364 -1.36217409372 -1.1773095429 -1.37943133712 -1.17730814219 -1.39668866992 -1.17730972171 -1.41394582391 -1.17731431127 -1.43120324612 -1.17732185125 -1.44846060872 -1.17733237147 -1.46571832895 -1.17734590172 -1.48297610879 -1.17736238241 -1.50023439527 -1.17738184333 -1.51749286056 -1.17740422487 -1.53475195169 -1.17742955685 -1.55201134086 -1.17744201422 -1.57122078538 -1.17742788792 -1.59043186903 -1.17740273476 -1.6076914072 -1.17738047242 -1.62495025992 -1.17736122012 -1.64220887423 -1.17734491825 -1.65946698189 -1.17733162641 -1.67672494054 -1.17732128501 -1.69398245215 -1.17731395364 -1.71123999357 -1.1773095429 -1.72849720717 -1.17730814219 -1.74575453997 -1.17730972171 -1.76301169395 -1.17731428146 -1.78026908636 -1.17732182145 -1.79752644897 -1.17733234167 -1.81478416919 -1.17734587192 -1.83204194903 -1.17736238241 -1.84930023551 -1.17738181353 -1.8665587008 -1.17740419507 -1.88381776214 -1.17742955685 -1.9010771513 -1.17744201422 -1.92028665542 -1.17742788792 -1.93949773908 -1.17740273476 -1.95675727725 -1.17738050222 -1.97401615977 -1.17736124992 -1.99127477408 -1.17734491825 -2.00853285194 -1.17733162641 -2.02579075098 -1.17732128501 -2.0430482626 -1.17731395364 -2.06030583382 -1.1773095429 -2.07756304741 -1.17730814219 -2.09482038021 -1.17730975151 -2.1120775938 -1.17731431127 -2.12933498621 -1.17732182145 -2.14659231901 -1.17733234167 -2.16385006904 -1.17734584212 -2.18110787868 -1.17736235261 -2.19836616516 -1.17738181353 -2.21562457085 -1.17740419507 -2.23288357258 -1.17742955685 -2.25014293194 -1.17744201422 -2.26935243606 -1.17742788792 -2.28856354952 -1.17740273476 -2.30582308769 -1.17738047242 -2.32308197021 -1.17736122012 -2.34034061432 -1.17734491825 -2.35759866238 -1.17733162641 -2.37485659123 -1.17732128501 -2.39211416245 -1.17731395364 -2.40937167406 -1.1773095727 -2.42662888766 -1.17730817199 -2.44388628006 -1.17730975151 -2.46114343405 -1.17731434107 -2.47840082645 -1.17732188106 -2.49565815926 -1.17733243108 -2.51291584969 -1.17734593153 -2.53017365932 -1.17736238241 -2.5474319458 -1.17738181353 -2.56469035149 -1.17740419507 -2.58194947243 -1.17742955685 -2.599208951 -1.17744204402 -2.61841839552 -1.17742791772 -2.63762938976 -1.17740273476 -2.65488892794 -1.17738050222 -2.67214781046 -1.17736127972 -2.68940639496 -1.17734494805 -2.70666450262 -1.17733162641 -2.72392249108 -1.17732128501 -2.74118000269 -1.17731392384 -2.75843751431 -1.1773095429 -2.7756947279 -1.17730817199 -2.7929520607 -1.17730972171 -2.81020921469 -1.17731428146 -2.82746660709 -1.17732182145 -2.8447239995 -1.17733234167 -2.86198174953 -1.17734587192 -2.87923949957 -1.17736238241 -2.89649772644 -1.17738181353 -2.91375625134 -1.17740419507 -2.93101537228 -1.17742955685 -2.94827473164 -1.17744207382 -2.96748417616 -1.17742794752 -2.98669528961 -1.17740273476 -3.00395488739 -1.17738047242 -3.02121371031 -1.17736124992 -3.03847229481 -1.17734494805 -3.05573040247 -1.17733165622 -3.07298833132 -1.17732131481 -3.09024584293 -1.17731398344 -3.10750341416 -1.1773096025 -3.12476062775 -1.17730817199 --3.14116737445 -1.17730975151 --3.12391024828 -1.17731434107 --3.10665285587 -1.17732188106 --3.08939546347 -1.17733240127 --3.07213771343 -1.17734587192 --3.0548799634 -1.17736235261 --3.03762167692 -1.17738181353 --3.02036315203 -1.17740419507 --3.00310409069 -1.17742955685 --2.98584473133 -1.17744204402 --2.96663528681 -1.17742791772 --2.94742417335 -1.17740273476 --2.93016457558 -1.17738050222 --2.91290575266 -1.17736127972 --2.89564716816 -1.17734494805 --2.8783890605 -1.17733162641 --2.86113107204 -1.17732128501 --2.84387356043 -1.17731392384 --2.82661604881 -1.17730951309 --2.80935883522 -1.17730814219 --2.79210150242 -1.17730972171 --2.77484434843 -1.17731428146 --2.75758695602 -1.17732185125 --2.74032956362 -1.17733237147 --2.72307181359 -1.17734587192 --2.70581400395 -1.17736238241 --2.68855571747 -1.17738181353 --2.67129731178 -1.17740419507 --2.65403831005 -1.17742955685 --2.63677895069 -1.17744204402 --2.61756944657 -1.17742791772 --2.59835833311 -1.17740273476 --2.58109879494 -1.17738050222 --2.56383991242 -1.17736127972 --2.54658126831 -1.17734494805 --2.52932322025 -1.17733162641 --2.5120652914 -1.17732128501 --2.49480777979 -1.17731395364 --2.47755026817 -1.1773095429 --2.46029299498 -1.17730814219 --2.44303560257 -1.17730972171 --2.42577844858 -1.17731428146 --2.40852105618 -1.17732185125 --2.39126372338 -1.17733240127 --2.37400603295 -1.17734587192 --2.35674822331 -1.17736232281 --2.33948993683 -1.17738178373 --2.32223153114 -1.17740419507 --2.3049724102 -1.17742955685 --2.28771293163 -1.17744201422 --2.26850348711 -1.17742788792 --2.24929249287 -1.17740273476 --2.2320330143 -1.17738047242 --2.21477413178 -1.17736122012 --2.19751548767 -1.17734491825 --2.18025743961 -1.17733162641 --2.16299951076 -1.17732128501 --2.14574193954 -1.17731395364 --2.12848436832 -1.1773095727 --2.11122715473 -1.17730817199 --2.09396982193 -1.17730975151 --2.07671266794 -1.17731434107 --2.05945527554 -1.17732188106 --2.04219794274 -1.17733237147 --2.0249401927 -1.17734584212 --2.00768238306 -1.17736235261 --1.99042412639 -1.17738181353 --1.9731656611 -1.17740419507 --1.95590656996 -1.17742955685 --1.93864715099 -1.17744204402 --1.91943770647 -1.17742791772 --1.90022665262 -1.17740273476 --1.88296711445 -1.17738050222 --1.86570823193 -1.17736124992 --1.84844958782 -1.17734491825 --1.83119150996 -1.17733162641 --1.81393358111 -1.17732128501 --1.7966760695 -1.17731395364 --1.77941852808 -1.1773095429 --1.76216131449 -1.17730814219 --1.74490398169 -1.17730972171 --1.7276467979 -1.17731431127 --1.71038940549 -1.17732185125 --1.69313207269 -1.17733237147 --1.67587432265 -1.17734590172 --1.65861651301 -1.17736238241 --1.64135825634 -1.17738184333 --1.62409979105 -1.17740422487 --1.60684069991 -1.17742955685 --1.58958134055 -1.17744201422 --1.57037186623 -1.17742788792 --1.55116075277 -1.17740273476 --1.5339012146 -1.17738047242 --1.51664236188 -1.17736122012 --1.49938374758 -1.17734491825 --1.48212566972 -1.17733162641 --1.46486774087 -1.17732128501 --1.44761019945 -1.17731395364 --1.43035262823 -1.1773095429 --1.41309541464 -1.17730814219 --1.39583808184 -1.17730972171 --1.37858092785 -1.17731428146 --1.36132353544 -1.17732182145 --1.34406620264 -1.17733234167 --1.32680848241 -1.17734587192 --1.30955067277 -1.17736238241 --1.29229238629 -1.17738181353 --1.27503395081 -1.17740419507 --1.25777488947 -1.17742955685 --1.2405154705 -1.17744201422 --1.22130602598 -1.17742788792 --1.20209497214 -1.17740273476 --1.18483543396 -1.17738050222 --1.16757655144 -1.17736124992 --1.15031790733 -1.17734491825 --1.13305982947 -1.17733162641 --1.11580187082 -1.17732128501 --1.09854435921 -1.17731395364 --1.08128684759 -1.1773095429 --1.0640296042 -1.17730814219 --1.0467722714 -1.17730975151 --1.02951511741 -1.17731431127 --1.012257725 -1.17732182145 --0.995000377298 -1.17733234167 --0.977742627263 -1.17734584212 --0.960484832525 -1.17736235261 --0.94322656095 -1.17738181353 --0.925968110561 -1.17740419507 --0.908709034324 -1.17742955685 --0.891449645161 -1.17744201422 --0.872240200639 -1.17742788792 --0.853029102087 -1.17740273476 --0.83576951921 -1.17738047242 --0.818510666489 -1.17736122012 --0.801252067089 -1.17734491825 --0.783993974328 -1.17733162641 --0.766736030579 -1.17732128501 --0.749478504061 -1.17731395364 --0.732220977545 -1.1773095727 --0.714963763952 -1.17730817199 --0.697706416249 -1.17730975151 --0.680449262261 -1.17731434107 --0.663191854954 -1.17732188106 --0.645934507251 -1.17733243108 --0.628676772118 -1.17734593153 --0.61141897738 -1.17736238241 --0.594160705805 -1.17738181353 --0.576902240515 -1.17740419507 --0.559643164277 -1.17742955685 --0.542383775115 -1.17744204402 --0.523174315691 -1.17742791772 --0.503963232041 -1.17740273476 --0.486703693867 -1.17738050222 --0.469444826245 -1.17736127972 --0.452186204493 -1.17734494805 --0.434928119183 -1.17733162641 --0.417670167983 -1.17732128501 --0.400412648916 -1.17731392384 --0.383155122399 -1.1773095429 --0.365897908807 -1.17730817199 --0.348640568554 -1.17730972171 --0.331383399665 -1.17731428146 --0.314125977457 -1.17732182145 --0.296868629754 -1.17733234167 --0.279610916972 -1.17734587192 --0.262353129685 -1.17736238241 --0.245094854385 -1.17738181353 --0.22783639282 -1.17740419507 --0.210577316582 -1.17742955685 --0.19331792742 -1.17744207382 --0.174108471721 -1.19454851747 --0.15489474684 -1.19452318549 --0.13763519749 -1.19450080395 --0.120376314968 -1.19448143244 --0.10311768204 -1.19446501136 --0.0858595985919 -1.19445163012 --0.0686016371473 -1.19444122911 --0.0513441003859 -1.19443383813 --0.0340865640901 -1.19442942739 --0.0168293321039 -1.19442799688 -0.000428022583947 -1.1944296062 -0.0176851977594 -1.19443422556 -0.0349426181056 -1.19444179535 -0.052199980244 -1.19445240497 -0.0694577144459 -1.19446599483 -0.086715510115 -1.19448256493 -0.103973798454 -1.19450211525 -0.12123227492 -1.19452464581 -0.138491362333 -1.19455018639 -0.155750766397 -1.19456276297 -0.174960125238 -1.19454851747 -0.19417110458 -1.19452318549 -0.211430657655 -1.19450080395 -0.228689536452 -1.19448143244 -0.245948165655 -1.19446501136 -0.263206250965 -1.19445160032 -0.280464202165 -1.1944411993 -0.297721736133 -1.19443380832 -0.314979277551 -1.19442936778 -0.332236513495 -1.19442796707 -0.349493868649 -1.1944295466 -0.366751037538 -1.19443416596 -0.384008459747 -1.19444179535 -0.401265829801 -1.19445237517 -0.418523564935 -1.19446596503 -0.435781367123 -1.19448256493 -0.453039653599 -1.19450211525 -0.470298118889 -1.19452467561 -0.487557224929 -1.19455018639 -0.504816614092 -1.19456273317 -0.524025946855 -1.19454851747 -0.543236956001 -1.19452318549 -0.560496523977 -1.19450080395 -0.577755376697 -1.19448143244 -0.595014005899 -1.19446501136 -0.612272113562 -1.19445163012 -0.629530057311 -1.19444122911 -0.646787583828 -1.19443383813 -0.664045140147 -1.19442939758 -0.681302383542 -1.19442796707 -0.698559746146 -1.1944295466 -0.715816900134 -1.19443416596 -0.733074307442 -1.19444179535 -0.750331684947 -1.19445237517 -0.767589434982 -1.19446596503 -0.784847214818 -1.19448256492 -0.802105486393 -1.19450211525 -0.819363981485 -1.19452467561 -0.836623072624 -1.1945502162 -0.853882476687 -1.19456273317 -0.873091831803 -1.19454848766 -0.892302811146 -1.19452318549 -0.90956236422 -1.19450080395 -0.926821216941 -1.19448143244 -0.944079861045 -1.19446501136 -0.961337953806 -1.19445163012 -0.978595897555 -1.19444122911 -0.995853438974 -1.19443383813 -1.01311096549 -1.19442939758 -1.03036820888 -1.19442796707 -1.04762560129 -1.1944295764 -1.06488275528 -1.19443419576 -1.08214014769 -1.19444179535 -1.09939751029 -1.19445237517 -1.11665526032 -1.19446596503 -1.13391306996 -1.19448256493 -1.15117135644 -1.19450211525 -1.16842982173 -1.19452467561 -1.18568891287 -1.19455018639 -1.20294833183 -1.19456273317 -1.22215768695 -1.19454851747 -1.24136865139 -1.19452318549 -1.25862821937 -1.19450080395 -1.27588710189 -1.19448143244 -1.29314571619 -1.19446501136 -1.31040379405 -1.19445160032 -1.3276617527 -1.1944411993 -1.34491929412 -1.19443383813 -1.36217683554 -1.19442942739 -1.37943407893 -1.19442802668 -1.39669141173 -1.1944295466 -1.41394859552 -1.19443413616 -1.43120604754 -1.19444176555 -1.44846338034 -1.19445234537 -1.46572107077 -1.19446596503 -1.48297888041 -1.19448256493 -1.50023719669 -1.19450211525 -1.51749569178 -1.19452464581 -1.53475478291 -1.19455015659 -1.55201417208 -1.19456270337 -1.57122352719 -1.19454851746 -1.59043449163 -1.19452321529 -1.60769402981 -1.19450080395 -1.62495291233 -1.19448143244 -1.64221155643 -1.19446501136 -1.65946966409 -1.19445160032 -1.67672762275 -1.1944411695 -1.69398516417 -1.19443380832 -1.71124270558 -1.19442942739 -1.72849991917 -1.19442799688 -1.74575728178 -1.1944295466 -1.76301446557 -1.19443416596 -1.78027185798 -1.19444176555 -1.79752922058 -1.19445234537 -1.81478697061 -1.19446596503 -1.83204475045 -1.19448256493 -1.84930303693 -1.19450211525 -1.86656150222 -1.19452467561 -1.88382059336 -1.19455018639 -1.90108001232 -1.19456270337 -1.92028936744 -1.19454848766 -1.93950036168 -1.19452318549 -1.95675992966 -1.19450080395 -1.97401881218 -1.19448143244 -1.99127745628 -1.19446501136 -2.00853550434 -1.19445160032 -2.02579343319 -1.1944411993 -2.04305100441 -1.19443383813 -2.06030857563 -1.19442939758 -2.07756578922 -1.19442796707 -2.09482312202 -1.1944295764 -2.11208033562 -1.19443419576 -2.12933772802 -1.19444176555 -2.14659506083 -1.19445234537 -2.16385281086 -1.19446596503 -2.1811106205 -1.19448256493 -2.19836890698 -1.19450211525 -2.21562737227 -1.19452467561 -2.2328864336 -1.19455018639 -2.25014579296 -1.19456270337 -2.26935517788 -1.19454848766 -2.28856617212 -1.19452318549 -2.3058257103 -1.19450080395 -2.32308459282 -1.19448143244 -2.34034323692 -1.19446501136 -2.35760134458 -1.19445163012 -2.37485927343 -1.19444122911 -2.39211678505 -1.19443383813 -2.40937435627 -1.19442939758 -2.42663162947 -1.19442796707 -2.44388896227 -1.1944295764 -2.46114611625 -1.19443419576 -2.47840356827 -1.19444179535 -2.49566096067 -1.19445240497 -2.5129186511 -1.19446599483 -2.53017640114 -1.19448256493 -2.54743474722 -1.19450211525 -2.56469321251 -1.19452467561 -2.58195227385 -1.1945502162 -2.59921175242 -1.19456276297 -2.61842113733 -1.19454851747 -2.63763207197 -1.19452318549 -2.65489161015 -1.19450080395 -2.67215049267 -1.19448140264 -2.68940913677 -1.19446498156 -2.70666724443 -1.19445160032 -2.72392523289 -1.1944411993 -2.74118274451 -1.19443380832 -2.75844019652 -1.19442936778 -2.77569741011 -1.19442796707 -2.79295480251 -1.1944295466 -2.8102120161 -1.19443416596 -2.82746946811 -1.19444176555 -2.84472680092 -1.19445234537 -2.86198449135 -1.19446596503 -2.87924230099 -1.19448256493 -2.89650058746 -1.19450211525 -2.91375905276 -1.19452467561 -2.9310181737 -1.19455018639 -2.94827759266 -1.19456273317 -2.96748691797 -1.19454851747 -2.98669791221 -1.19452318549 -3.00395750999 -1.19450080395 -3.02121639252 -1.19448143244 -3.03847503662 -1.19446501136 -3.05573308468 -1.19445163012 -3.07299101353 -1.19444122911 -3.09024858475 -1.19443383813 -3.10750615597 -1.19442942739 -3.12476336956 -1.19442799688 --3.14116463264 -1.1944296062 --3.12390744686 -1.19443422556 --3.10664999485 -1.19444179535 --3.08939266205 -1.19445240497 --3.07213497162 -1.19446599483 --3.05487716198 -1.19448256493 --3.0376188755 -1.19450211525 --3.02036035061 -1.19452464581 --3.00310122967 -1.19455018639 --2.98584187031 -1.19456276297 --2.96663254499 -1.19454851747 --2.94742155075 -1.19452318549 --2.93016195297 -1.19450080395 --2.91290307045 -1.19448143244 --2.89564442635 -1.19446501136 --2.87838637829 -1.19445160032 --2.86112844944 -1.1944411993 --2.84387087822 -1.19443380832 --2.826613307 -1.19442936778 --2.80935609341 -1.19442796707 --2.79209876061 -1.1944295466 --2.77484160662 -1.19443416596 --2.75758421421 -1.19444179535 --2.7403268218 -1.19445237517 --2.72306907177 -1.19446596503 --2.70581126213 -1.19448256493 --2.68855297565 -1.19450211525 --2.67129451036 -1.19452467561 --2.65403544903 -1.19455018639 --2.63677608967 -1.19456273317 --2.61756676435 -1.19454851747 --2.59835577011 -1.19452318549 --2.58109617234 -1.19450080395 --2.56383728981 -1.19448143244 --2.54657864571 -1.19446501136 --2.52932053804 -1.19445163012 --2.5120626092 -1.19444122911 --2.49480509758 -1.19443383813 --2.47754752636 -1.19442939758 --2.46029025316 -1.19442796707 --2.44303292036 -1.1944295466 --2.42577576637 -1.19443416596 --2.40851831436 -1.19444179535 --2.39126092196 -1.19445237517 --2.37400317192 -1.19446596503 --2.35674542189 -1.19448256492 --2.33948713541 -1.19450211525 --2.32222867012 -1.19452467561 --2.30496960878 -1.1945502162 --2.28771013022 -1.19456273317 --2.2685007453 -1.19454848766 --2.24928987026 -1.19452318549 --2.23203039169 -1.19450080395 --2.21477150917 -1.19448143244 --2.19751286507 -1.19446501136 --2.1802547574 -1.19445163012 --2.16299676895 -1.19444122911 --2.14573919773 -1.19443383813 --2.12848168612 -1.19442939758 --2.11122447252 -1.19442796707 --2.09396708012 -1.1944295764 --2.07670992613 -1.19443419576 --2.05945253372 -1.19444179535 --2.04219514132 -1.19445237517 --2.02493739128 -1.19446596503 --2.00767961144 -1.19448256493 --1.99042132496 -1.19450211525 --1.97316282987 -1.19452467561 --1.95590373874 -1.19455018639 --1.93864431977 -1.19456273317 --1.91943496466 -1.19454851747 --1.90022400021 -1.19452318549 --1.88296446204 -1.19450080395 --1.86570557952 -1.19448143244 --1.84844693541 -1.19446501136 --1.83118885756 -1.19445160032 --1.81393089891 -1.1944411993 --1.79667335749 -1.19443383813 --1.77941581607 -1.19442942739 --1.76215860248 -1.19442802668 --1.74490123987 -1.1944295466 --1.72764402628 -1.19443413616 --1.71038663388 -1.19444176555 --1.69312930107 -1.19445234537 --1.67587155104 -1.19446596503 --1.6586137414 -1.19448256493 --1.64135545492 -1.19450211525 --1.62409698963 -1.19452464581 --1.60683789849 -1.19455015659 --1.58957850933 -1.19456270337 --1.57036912441 -1.19454851746 --1.55115813017 -1.19452321529 --1.533898592 -1.19450080395 --1.51663970947 -1.19448143244 --1.49938106537 -1.19446501136 --1.48212298751 -1.19445160032 --1.46486505866 -1.1944411695 --1.44760751724 -1.19443380832 --1.43034994602 -1.19442942739 --1.41309270263 -1.19442799688 --1.39583536982 -1.1944295466 --1.37857821584 -1.19443416596 --1.36132079363 -1.19444176555 --1.34406343103 -1.19445234537 --1.32680568099 -1.19446596503 --1.30954790115 -1.19448256493 --1.29228961468 -1.19450211525 --1.27503111959 -1.19452467561 --1.25777202845 -1.19455018639 --1.24051260948 -1.19456270337 --1.22130328417 -1.19454848766 --1.20209231973 -1.19452318549 --1.18483275175 -1.19450080395 --1.16757386923 -1.19448143244 --1.15031525492 -1.19446501136 --1.13305714726 -1.19445160032 --1.11579915881 -1.1944411993 --1.0985416472 -1.19443383813 --1.08128410578 -1.19442939758 --1.06402686238 -1.19442796707 --1.04676952958 -1.1944295764 --1.02951234579 -1.19443419576 --1.01225495339 -1.19444176555 --0.994997605683 -1.19445234537 --0.977739840746 -1.19446596503 --0.960482031107 -1.19448256493 --0.943223744631 -1.19450211525 --0.925965294242 -1.19452467561 --0.908706203103 -1.19455018639 --0.891446784139 -1.19456270337 --0.872237443924 -1.19454848766 --0.853026464581 -1.19452318549 --0.835766881704 -1.19450080395 --0.818507999182 -1.19448143244 --0.801249369979 -1.19446501136 --0.783991292119 -1.19445163012 --0.76673334837 -1.19444122911 --0.749475806952 -1.19443383813 --0.732218265534 -1.19442939758 --0.71496103704 -1.19442796707 --0.697703689337 -1.1944295764 --0.680446520448 -1.19443419576 --0.663189083338 -1.19444179535 --0.645931720734 -1.19445240497 --0.628674000502 -1.19446599483 --0.611416205764 -1.19448256493 --0.594157889485 -1.19450211525 --0.576899409294 -1.19452467561 --0.559640333057 -1.1945502162 --0.542380928993 -1.19456276297 --0.523171588779 -1.19454851747 --0.503960616887 -1.19452318549 --0.486701056361 -1.19450080395 --0.469442158938 -1.19448140264 --0.452183514833 -1.19446498156 --0.434925429523 -1.19445160032 --0.417667478323 -1.1944411993 --0.400409951806 -1.19443380832 --0.383152410388 -1.19442936778 --0.365895181894 -1.19442796707 --0.348637834191 -1.1944295466 --0.331380650401 -1.19443416596 --0.314123220742 -1.19444176555 --0.296865865588 -1.19445234537 --0.279608137905 -1.19446596503 --0.262350343168 -1.19448256493 --0.245092052966 -1.19450211525 --0.2278335765 -1.19452467561 --0.210574489087 -1.19455018639 --0.193315085024 -1.19456273317 --0.174105726182 -1.21164694428 --0.154892139137 -1.2116214633 --0.137632582337 -1.21159893274 --0.120373690501 -1.21157944203 --0.103115046397 -1.21156293154 --0.0858569517732 -1.21154943109 --0.0685989791527 -1.21153897047 --0.0513414321467 -1.21153157949 --0.0340838851407 -1.21152713895 --0.0168266419787 -1.21152570844 -0.000430724350735 -1.21152731776 -0.0176879097708 -1.21153196693 -0.0349453422241 -1.21153959632 -0.0522027155384 -1.21155023575 -0.0694604581222 -1.21156391501 -0.0867182668298 -1.21158060431 -0.103976568207 -1.21160027385 -0.121235053986 -1.21162292361 -0.138494152576 -1.21164861321 -0.15575356409 -1.2116612792 -0.174962822348 -1.21164694428 -0.194173704833 -1.2116214633 -0.211433269084 -1.21159893274 -0.228692159056 -1.21157944203 -0.245950799435 -1.21156293154 -0.263208895921 -1.21154943109 -0.280466869473 -1.21153897047 -0.297724418342 -1.21153154969 -0.31498195976 -1.21152707934 -0.332239203155 -1.21152564883 -0.34949657321 -1.21152725816 -0.366753757 -1.21153193713 -0.384011186659 -1.21153959632 -0.401268564164 -1.21155020595 -0.418526306748 -1.21156388521 -0.435784123838 -1.21158060431 -0.453042425215 -1.21160030365 -0.470300905406 -1.21162298322 -0.487560026348 -1.21164861321 -0.50481942296 -1.2116612494 -0.524028673768 -1.21164697408 -0.543239578605 -1.2116214931 -0.56049913168 -1.21159893274 -0.577757999301 -1.21157944203 -0.595016643405 -1.21156293154 -0.612274751068 -1.21154946089 -0.629532694817 -1.21153900027 -0.646790236235 -1.21153154969 -0.664047822356 -1.21152707934 -0.681305065751 -1.21152567864 -0.698562413454 -1.21152728796 -0.715819597244 -1.21153190732 -0.733077034354 -1.21153956651 -0.750334426761 -1.21155023575 -0.767592176795 -1.21156391501 -0.784849971533 -1.21158063412 -0.802108258009 -1.21160030365 -0.8193667382 -1.21162295342 -0.836625859142 -1.21164864301 -0.853885293007 -1.2116612494 -0.873094543815 -1.21164691448 -0.89230543375 -1.2116214633 -0.909564986825 -1.21159893274 -0.926823854446 -1.21157944203 -0.94408249855 -1.21156293154 -0.96134057641 -1.21154946089 -0.978598549962 -1.21153900027 -0.995856106281 -1.21153154969 -1.0131136477 -1.21152707934 -1.0303709209 -1.21152567864 -1.0476283133 -1.21152728796 -1.06488546729 -1.21153190732 -1.0821428895 -1.21153956651 -1.09940028191 -1.21155023575 -1.11665800214 -1.21156388521 -1.13391581178 -1.21158057451 -1.15117412806 -1.21160030365 -1.16843259334 -1.21162301302 -1.18569171428 -1.21164864301 -1.20295113325 -1.2116612494 -1.22216036916 -1.21164694428 -1.241371274 -1.2116214633 -1.25863084197 -1.21159893274 -1.2758897245 -1.21157944203 -1.2931483686 -1.21156293154 -1.31040644646 -1.21154943109 -1.32766440511 -1.21153897047 -1.34492194652 -1.21153154969 -1.36217951775 -1.21152710914 -1.37943676114 -1.21152573824 -1.39669409394 -1.21152725816 -1.41395130754 -1.21153187752 -1.43120875955 -1.21153959632 -1.44846609235 -1.21155023575 -1.46572381258 -1.21156391501 -1.48298162222 -1.21158060431 -1.5002399683 -1.21160030365 -1.51749849319 -1.21162298322 -1.53475755453 -1.21164864301 -1.55201694369 -1.2116612792 -1.5712262094 -1.21164697408 -1.59043708443 -1.2116214931 -1.60769665241 -1.21159896254 -1.62495553494 -1.21157947183 -1.64221417904 -1.21156293154 -1.6594722867 -1.21154946089 -1.67673027515 -1.21153897047 -1.69398784637 -1.21153154969 -1.71124535799 -1.21152713895 -1.72850260139 -1.21152570844 -1.74575999379 -1.21152728796 -1.76301717758 -1.21153190732 -1.78027459979 -1.21153956651 -1.7975319624 -1.21155023575 -1.81478971243 -1.21156391501 -1.83204752207 -1.21158060431 -1.84930580855 -1.21160027385 -1.86656427383 -1.21162295342 -1.88382339477 -1.21164861321 -1.90108281374 -1.2116612494 -1.92029204965 -1.21164694428 -1.93950295448 -1.2116214633 -1.95676255226 -1.21159893274 -1.97402143479 -1.21157944203 -1.99128007889 -1.21156293154 -2.00853812694 -1.21154943109 -2.02579605579 -1.21153897047 -2.04305362701 -1.21153154969 -2.06031119823 -1.21152707934 -2.07756847143 -1.21152567864 -2.09482580424 -1.21152728796 -2.11208295822 -1.21153190732 -2.12934041023 -1.21153956651 -2.14659780264 -1.21155020595 -2.16385555267 -1.21156388521 -2.18111336232 -1.21158060431 -2.19837164879 -1.21160027385 -2.21563011408 -1.21162295342 -2.23288923502 -1.21164861321 -2.25014865398 -1.2116612494 -2.26935786009 -1.21164694428 -2.28856873512 -1.2116214633 -2.3058283329 -1.21159893274 -2.32308721543 -1.21157944203 -2.34034585953 -1.21156293154 -2.35760402679 -1.21154946089 -2.37486195564 -1.21153900027 -2.39211946726 -1.21153154969 -2.40937703848 -1.21152707934 -2.42663431168 -1.21152567864 -2.44389170408 -1.21152728796 -2.46114885807 -1.21153190732 -2.47840625048 -1.21153956651 -2.49566364288 -1.21155023575 -2.51292139292 -1.21156391501 -2.53017914295 -1.21158060431 -2.54743748904 -1.21160030365 -2.56469601393 -1.21162298322 -2.58195507526 -1.21164864301 -2.59921449423 -1.2116612792 -2.61842381954 -1.21164694428 -2.63763469458 -1.2116214633 -2.65489417315 -1.21159893274 -2.67215311527 -1.21157941222 -2.68941181898 -1.21156290174 -2.70666986704 -1.21154943109 -2.72392785549 -1.21153897047 -2.74118542671 -1.21153154969 -2.75844293833 -1.21152707934 -2.77570015192 -1.21152567864 -2.79295754433 -1.21152728796 -2.81021475792 -1.21153193713 -2.82747220993 -1.21153959632 -2.84472954273 -1.21155023575 -2.86198723316 -1.21156391501 -2.8792450428 -1.21158060431 -2.89650332928 -1.21160027385 -2.91376179457 -1.21162295342 -2.93102091551 -1.21164861321 -2.94828039408 -1.2116612494 -2.96748965979 -1.21164694428 -2.98670053482 -1.2116214633 -3.0039601326 -1.21159893274 -3.02121901512 -1.21157944203 -3.03847765923 -1.21156293154 -3.05573570728 -1.21154943109 -3.07299363613 -1.21153897047 -3.09025120735 -1.21153157949 -3.10750877857 -1.21152713895 -3.12476599216 -1.21152570844 --3.14116195043 -1.21152731776 --3.12390470505 -1.21153196693 --3.10664725303 -1.21153959632 --3.08938992023 -1.21155023575 --3.0721322298 -1.21156391501 --3.05487442016 -1.21158060431 --3.03761613369 -1.21160027385 --3.02035760879 -1.21162292361 --3.00309848785 -1.21164861321 --2.98583906889 -1.2116612792 --2.96662980318 -1.21164694428 --2.94741892815 -1.2116214633 --2.93015933037 -1.21159893274 --2.91290044784 -1.21157944203 --2.89564180374 -1.21156293154 --2.87838375569 -1.21154943109 --2.86112582684 -1.21153897047 --2.84386825561 -1.21153154969 --2.82661068439 -1.21152707934 --2.8093534112 -1.21152564883 --2.79209607839 -1.21152725816 --2.77483892441 -1.21153193713 --2.7575814724 -1.21153959632 --2.74032407999 -1.21155020595 --2.72306632995 -1.21156388521 --2.70580852032 -1.21158060431 --2.68855023384 -1.21160030365 --2.67129176855 -1.21162298322 --2.65403264761 -1.21164861321 --2.63677322865 -1.2116612494 --2.61756402254 -1.21164697408 --2.59835314751 -1.2116214931 --2.58109354973 -1.21159893274 --2.56383466721 -1.21157944203 --2.5465760231 -1.21156293154 --2.52931785584 -1.21154946089 --2.51205992699 -1.21153900027 --2.49480247497 -1.21153154969 --2.47754490375 -1.21152707934 --2.46028757095 -1.21152567864 --2.44303023815 -1.21152728796 --2.42577308416 -1.21153190732 --2.40851563215 -1.21153956651 --2.39125823974 -1.21155023575 --2.37400043011 -1.21156391501 --2.35674268007 -1.21158063412 --2.33948439359 -1.21160030365 --2.3222258687 -1.21162295342 --2.30496680737 -1.21164864301 --2.2877073884 -1.2116612494 --2.26849806309 -1.21164691448 --2.24928718805 -1.2116214633 --2.23202770949 -1.21159893274 --2.21476882696 -1.21157944203 --2.19751018286 -1.21156293154 --2.1802520752 -1.21154946089 --2.16299402714 -1.21153900027 --2.14573645592 -1.21153154969 --2.12847900391 -1.21152707934 --2.11122179031 -1.21152567864 --2.0939643383 -1.21152728796 --2.07670718432 -1.21153190732 --2.05944979191 -1.21153956651 --2.0421923995 -1.21155023575 --2.02493464947 -1.21156388521 --2.00767683983 -1.21158057451 --1.99041852355 -1.21160030365 --1.97316002846 -1.21162301302 --1.95590093732 -1.21164864301 --1.93864151835 -1.2116612494 --1.91943228245 -1.21164694428 --1.90022140741 -1.2116214633 --1.88296183944 -1.21159893274 --1.86570292712 -1.21157944203 --1.84844428301 -1.21156293154 --1.83118620515 -1.21154943109 --1.8139282167 -1.21153897047 --1.79667067528 -1.21153154969 --1.77941313386 -1.21152710914 --1.76215589047 -1.21152573824 --1.74489852786 -1.21152725816 --1.72764134407 -1.21153187752 --1.71038392186 -1.21153959632 --1.69312655926 -1.21155023575 --1.67586880923 -1.21156391501 --1.65861099959 -1.21158060431 --1.64135271311 -1.21160030365 --1.62409421801 -1.21162298322 --1.60683509708 -1.21164864301 --1.58957567811 -1.2116612792 --1.5703664124 -1.21164697408 --1.55115553737 -1.2116214931 --1.53389596939 -1.21159896254 --1.51663708687 -1.21157947183 --1.49937844276 -1.21156293154 --1.4821203351 -1.21154946089 --1.46486237645 -1.21153897047 --1.44760483503 -1.21153154969 --1.43034729362 -1.21152713895 --1.41309005022 -1.21152570844 --1.39583268762 -1.21152728796 --1.37857550383 -1.21153190732 --1.36131805182 -1.21153956651 --1.34406065941 -1.21155023575 --1.32680290938 -1.21156391501 --1.30954512954 -1.21158060431 --1.29228684306 -1.21160027385 --1.27502834797 -1.21162295342 --1.25776922703 -1.21164861321 --1.24050980806 -1.2116612494 --1.22130057216 -1.21164694428 --1.20208966732 -1.2116214633 --1.18483009935 -1.21159893274 --1.16757121682 -1.21157944203 --1.15031260252 -1.21156293154 --1.13305449486 -1.21154943109 --1.1157965064 -1.21153897047 --1.09853899479 -1.21153154969 --1.08128142357 -1.21152707934 --1.06402418017 -1.21152567864 --1.04676681757 -1.21152728796 --1.02950963378 -1.21153190732 --1.01225224138 -1.21153956651 --0.994994848969 -1.21155020595 --0.977737084031 -1.21156388521 --0.960479274392 -1.21158060431 --0.943220973015 -1.21160027385 --0.925962507724 -1.21162295342 --0.908703401685 -1.21164861321 --0.891443982721 -1.2116612494 --0.872234731913 -1.21164694428 --0.853023841977 -1.2116214633 --0.835764288902 -1.21159893274 --0.818505391478 -1.21157944203 --0.801246747375 -1.21156293154 --0.783988654613 -1.21154946089 --0.766730681061 -1.21153900027 --0.749473139643 -1.21153154969 --0.732215583324 -1.21152707934 --0.71495833993 -1.21152567864 --0.697700977325 -1.21152728796 --0.680443778634 -1.21153190732 --0.663186341524 -1.21153956651 --0.64592897892 -1.21155023575 --0.628671243787 -1.21156391501 --0.611413449049 -1.21158060431 --0.594155117869 -1.21160030365 --0.576896622777 -1.21162298322 --0.55963756144 -1.21164864301 --0.542378142476 -1.2116612792 --0.523168876767 -1.21164694428 --0.503958009183 -1.2116214633 --0.486698441207 -1.21159893274 --0.469439536333 -1.21157941222 --0.452180892229 -1.21156290174 --0.434922799468 -1.21154943109 --0.417664825916 -1.21153897047 --0.400407284498 -1.21153154969 --0.383149735629 -1.21152707934 --0.365892492234 -1.21152567864 --0.348635137081 -1.21152728796 --0.331377945841 -1.21153193713 --0.314120508731 -1.21153959632 --0.296863146126 -1.21155023575 --0.279605403542 -1.21156391501 --0.262347593904 -1.21158060431 --0.245089288801 -1.21160027385 --0.227830797434 -1.21162295342 --0.210571698844 -1.21164861321 --0.19331227988 -1.2116612494 --0.174103017897 -1.22875750065 --0.154888287187 -1.22873190046 --0.137628715485 -1.22870922089 --0.120369808748 -1.22868961096 --0.103111147881 -1.22867301106 --0.0858530383557 -1.2286594212 --0.0685950489715 -1.22864890099 --0.051337486133 -1.2286414504 --0.0340799218975 -1.22863695025 --0.016822661506 -1.22863554955 -0.000434721121565 -1.22863715887 -0.0176919214428 -1.22864180803 -0.0349493697286 -1.22864952683 -0.052206759341 -1.22866025567 -0.0694645196199 -1.22867402435 -0.0867223460227 -1.22869080305 -0.103980664164 -1.2287105918 -0.12123916857 -1.22873342037 -0.138498287648 -1.22875922918 -0.155757706612 -1.22877192497 -0.174966815859 -1.22875753045 -0.194177553058 -1.22873187065 -0.211437128484 -1.22870922089 -0.228696040809 -1.22868964076 -0.245954692364 -1.22867301106 -0.263212807476 -1.22865945101 -0.28047081083 -1.22864890099 -0.2977283746 -1.2286413908 -0.31498593092 -1.22863692045 -0.332243181765 -1.22863551975 -0.349500566721 -1.22863712907 -0.366757780313 -1.22864180803 -0.384015232325 -1.22864952683 -0.401272617281 -1.22866022587 -0.418530374765 -1.22867396474 -0.435788206756 -1.22869077325 -0.453046523034 -1.22871062159 -0.470305018127 -1.22873342037 -0.487564139068 -1.22875922918 -0.504823565483 -1.22877195478 -0.524032682181 -1.22875756025 -0.543243423104 -1.22873193026 -0.56050299108 -1.22870922089 -0.577761888504 -1.22868961096 -0.595020547509 -1.22867301106 -0.612278670073 -1.2286594212 -0.629536643625 -1.22864887118 -0.646794185043 -1.2286413908 -0.664051771164 -1.22863695025 -0.68130902946 -1.22863557935 -0.698566392064 -1.22863715887 -0.715823620558 -1.22864180803 -0.73308108747 -1.22864952683 -0.750338464975 -1.22866025567 -0.76759621501 -1.22867399454 -0.78485403955 -1.22869077325 -0.802112340927 -1.2287105918 -0.81937083602 -1.22873339057 -0.836629986763 -1.22875919938 -0.85388943553 -1.22877189517 -0.873098537326 -1.22875750065 -0.89230927825 -1.22873187065 -0.909568846226 -1.22870922089 -0.92682774365 -1.22868964076 -0.944086402654 -1.22867301106 -0.961344510317 -1.2286594212 -0.97860249877 -1.22864887118 -0.995860055089 -1.2286413908 -1.01311761141 -1.22863695025 -1.03037488461 -1.22863557935 -1.04763227701 -1.22863715887 -1.0648894608 -1.22864180803 -1.08214691281 -1.22864952683 -1.09940430522 -1.22866025567 -1.11666202545 -1.22867396474 -1.13391986489 -1.22869074345 -1.15117821097 -1.22871062159 -1.16843670607 -1.22873345017 -1.18569585681 -1.22875925899 -1.20295527577 -1.22877195478 -1.22216436267 -1.22875753045 -1.24137511849 -1.22873187065 -1.25863468647 -1.22870922089 -1.27589359879 -1.22868964076 -1.2931522727 -1.22867301106 -1.31041038037 -1.2286594212 -1.32766836881 -1.22864887118 -1.34492591023 -1.2286413908 -1.36218348146 -1.22863695025 -1.37944075465 -1.22863557935 -1.39669811726 -1.22863715887 -1.41395533085 -1.22864180803 -1.43121278286 -1.22864952683 -1.44847014546 -1.22866025567 -1.4657278955 -1.22867399454 -1.48298573494 -1.22869077325 -1.50024408102 -1.22871062159 -1.51750257611 -1.22873342037 -1.53476166725 -1.22875919938 -1.55202111602 -1.22877192497 -1.57123023272 -1.22875750065 -1.59044095874 -1.22873184085 -1.60770055652 -1.22870919109 -1.62495943904 -1.22868961096 -1.64221808314 -1.22867301106 -1.65947622061 -1.22865945101 -1.67673420906 -1.22864890099 -1.69399175048 -1.2286414206 -1.7112492919 -1.22863695025 -1.7285065949 -1.22863554955 -1.74576398731 -1.22863715887 -1.76302114129 -1.22864180803 -1.7802785933 -1.22864952683 -1.79753601551 -1.22866025567 -1.81479379535 -1.22867399454 -1.83205160499 -1.22869077325 -1.84930989146 -1.2287105918 -1.86656838656 -1.22873339057 -1.88382750749 -1.22875922918 -1.90108692646 -1.22877195478 -1.92029604316 -1.22875753045 -1.93950679898 -1.22873190046 -1.95676639676 -1.22870925069 -1.97402530909 -1.22868964076 -1.99128398299 -1.22867301106 -2.00854209065 -1.2286594212 -2.0258000493 -1.22864887118 -2.04305762052 -1.2286413908 -2.06031519174 -1.22863692045 -2.07757246494 -1.22863554955 -2.09482985735 -1.22863715887 -2.11208701134 -1.22864177823 -2.12934440374 -1.22864949703 -2.14660179615 -1.22866022587 -2.16385960579 -1.22867396474 -2.18111747504 -1.22869077325 -2.19837582111 -1.2287105918 -2.2156342864 -1.22873339057 -2.23289340734 -1.22875922918 -2.25015282631 -1.22877195478 -2.2693618536 -1.22875753045 -2.28857260942 -1.22873187065 -2.30583220721 -1.22870922089 -2.32309108973 -1.22868964076 -2.34034979344 -1.22867301106 -2.3576079607 -1.22865945101 -2.37486588955 -1.22864890099 -2.39212346077 -1.2286414206 -2.40938103199 -1.22863698006 -2.42663824558 -1.22863557935 -2.44389569759 -1.22863715887 -2.46115291118 -1.22864180803 -2.47841030359 -1.22864952683 -2.495667696 -1.22866025567 -2.51292544603 -1.22867399454 -2.53018325567 -1.22869077325 -2.54744160175 -1.22871062159 -2.56470012665 -1.22873342037 -2.58195924759 -1.22875922918 -2.59921866655 -1.22877195478 -2.61842781305 -1.22875753045 -2.63763850927 -1.22873187065 -2.65489804745 -1.22870922089 -2.67215698957 -1.22868964076 -2.68941563368 -1.22867301106 -2.70667374134 -1.22865945101 -2.7239317894 -1.22864890099 -2.74118936062 -1.2286413908 -2.75844693184 -1.22863692045 -2.77570420504 -1.22863554955 -2.79296153784 -1.22863715887 -2.81021875143 -1.22864180803 -2.82747620344 -1.22864952683 -2.84473353625 -1.22866025567 -2.86199128628 -1.22867399454 -2.87924909592 -1.22869077325 -2.89650738239 -1.2287105918 -2.91376590729 -1.22873339057 -2.93102502823 -1.22875922918 -2.9482845068 -1.22877192497 -2.9674936533 -1.22875750065 -2.98670434952 -1.22873190046 -3.0039639473 -1.22870922089 -3.02122288942 -1.22868961096 -3.03848153353 -1.22867301106 -3.05573958159 -1.2286594212 -3.07299757004 -1.22864890099 -3.09025514126 -1.2286414504 -3.10751271248 -1.22863695025 -3.12476998567 -1.22863554955 --3.14115795691 -1.22863715887 --3.12390071153 -1.22864180803 --3.10664325952 -1.22864952683 --3.08938592672 -1.22866025567 --3.07212817669 -1.22867402435 --3.05487036705 -1.22869080305 --3.03761208058 -1.2287105918 --3.02035355568 -1.22873342037 --3.00309443474 -1.22875922918 --2.98583495617 -1.22877192497 --2.96662580967 -1.22875753045 --2.94741511345 -1.22873187065 --2.93015551567 -1.22870922089 --2.91289657354 -1.22868964076 --2.89563792944 -1.22867301106 --2.87837988138 -1.22865945101 --2.86112189293 -1.22864890099 --2.84386432171 -1.2286413908 --2.82660675049 -1.22863692045 --2.80934941769 -1.22863551975 --2.79209208488 -1.22863712907 --2.77483493089 -1.22864180803 --2.75757747888 -1.22864952683 --2.74032002687 -1.22866022587 --2.72306221723 -1.22867396474 --2.7058044076 -1.22869077325 --2.68854612112 -1.22871062159 --2.67128765583 -1.22873342037 --2.65402853489 -1.22875922918 --2.63676911592 -1.22877195478 --2.61756002903 -1.22875756025 --2.5983492732 -1.22873193026 --2.58108967542 -1.22870922089 --2.5638307929 -1.22868961096 --2.5465720892 -1.22867301106 --2.52931392193 -1.2286594212 --2.51205599308 -1.22864887118 --2.49479848147 -1.2286413908 --2.47754091025 -1.22863695025 --2.46028363705 -1.22863557935 --2.44302624464 -1.22863715887 --2.42576903105 -1.22864180803 --2.40851157904 -1.22864952683 --2.39125418663 -1.22866025567 --2.3739964366 -1.22867399454 --2.35673862695 -1.22869077325 --2.33948028087 -1.2287105918 --2.32222175598 -1.22873339057 --2.30496263504 -1.22875919938 --2.28770321608 -1.22877189517 --2.26849406958 -1.22875750065 --2.24928331375 -1.22873187065 --2.23202377558 -1.22870922089 --2.21476489305 -1.22868964076 --2.19750624895 -1.22867301106 --2.18024814129 -1.2286594212 --2.16299015284 -1.22864887118 --2.14573258161 -1.2286413908 --2.12847507 -1.22863695025 --2.11121785641 -1.22863557935 --2.0939604044 -1.22863715887 --2.0767031312 -1.22864180803 --2.05944567919 -1.22864952683 --2.04218834639 -1.22866025567 --2.02493059635 -1.22867396474 --2.00767272711 -1.22869074345 --1.99041441083 -1.22871062159 --1.97315594554 -1.22873345017 --1.9558968246 -1.22875925899 --1.93863737583 -1.22877195478 --1.91942828894 -1.22875753045 --1.90021756291 -1.22873187065 --1.88295796514 -1.22870922089 --1.86569905281 -1.22868964076 --1.84844040871 -1.22867301106 --1.83118227124 -1.2286594212 --1.81392428279 -1.22864887118 --1.79666674137 -1.2286413908 --1.77940917015 -1.22863695025 --1.76215189696 -1.22863557935 --1.74489453435 -1.22863715887 --1.72763735056 -1.22864180803 --1.71037986875 -1.22864952683 --1.69312247634 -1.22866025567 --1.6758647263 -1.22867399454 --1.65860691667 -1.22869077325 --1.64134860039 -1.22871062159 --1.62409007549 -1.22873342037 --1.60683095455 -1.22875919938 --1.58957153559 -1.22877192497 --1.57036241889 -1.22875750065 --1.55115169287 -1.22873184085 --1.53389212489 -1.22870919109 --1.51663321257 -1.22868961096 --1.49937453866 -1.22867301106 --1.482116431 -1.22865945101 --1.46485844254 -1.22864890099 --1.44760087132 -1.2286414206 --1.43034332991 -1.22863695025 --1.41308608651 -1.22863554955 --1.3958286941 -1.22863715887 --1.37857148051 -1.22864180803 --1.3613140285 -1.22864952683 --1.34405663609 -1.22866025567 --1.32679888606 -1.22867399454 --1.30954104662 -1.22869077325 --1.29228273034 -1.2287105918 --1.27502423525 -1.22873339057 --1.25776511431 -1.22875922918 --1.24050569534 -1.22877195478 --1.22129657865 -1.22875753045 --1.20208582282 -1.22873190046 --1.18482625484 -1.22870925069 --1.16756737232 -1.22868964076 --1.15030872822 -1.22867301106 --1.13305059075 -1.2286594212 --1.1157925725 -1.22864887118 --1.09853503108 -1.2286413908 --1.08127745986 -1.22863692045 --1.06402018666 -1.22863554955 --1.04676279426 -1.22863715887 --1.02950561047 -1.22864177823 --1.01224818826 -1.22864949703 --0.994990795851 -1.22866022587 --0.977733045817 -1.22867396474 --0.960475206375 -1.22869077325 --0.943216875196 -1.2287105918 --0.925958380103 -1.22873339057 --0.908699259162 -1.22875922918 --0.891439840197 -1.22877195478 --0.872230738402 -1.22875753045 --0.853019982576 -1.22873187065 --0.8357604146 -1.22870922089 --0.818501502276 -1.22868964076 --0.801242828369 -1.22867301106 --0.783984720707 -1.22865945101 --0.766726732254 -1.22864890099 --0.749469175935 -1.2286414206 --0.732211604714 -1.22863698006 --0.714954346419 -1.22863557935 --0.697696968913 -1.22863715887 --0.68043975532 -1.22864180803 --0.663182333112 -1.22864952683 --0.645924955606 -1.22866025567 --0.62866717577 -1.22867399454 --0.61140935123 -1.22869077325 --0.59415102005 -1.22871062159 --0.576892510056 -1.22873342037 --0.559633418918 -1.22875922918 --0.542373999953 -1.22877195478 --0.523164883256 -1.22875753045 --0.503954157233 -1.22873187065 --0.486694574356 -1.22870922089 --0.469435654581 -1.22868964076 --0.452177003026 -1.22867301106 --0.434918895364 -1.22865945101 --0.41766089946 -1.22864890099 --0.40040332824 -1.2286413908 --0.38314576447 -1.22863692045 --0.365888513625 -1.22863554955 --0.348631136119 -1.22863715887 --0.331373929977 -1.22864180803 --0.314116485417 -1.22864952683 --0.296859100461 -1.22866025567 --0.279601335525 -1.22867399454 --0.262343510985 -1.22869077325 --0.245085194707 -1.2287105918 --0.227826692164 -1.22873339057 --0.210567571223 -1.22875922918 --0.193308137357 -1.22877192497 --0.174099024385 -1.24590352178 --0.154884558171 -1.24587780237 --0.137624967844 -1.2458550036 --0.120366044343 -1.24583527446 --0.103107364848 -1.24581855535 --0.0858492366969 -1.24580487609 --0.0685912314803 -1.24579429627 --0.0513336546719 -1.24578675628 --0.0340760760009 -1.24578222633 --0.0168187997769 -1.24578085542 -0.000438598217445 -1.24578246474 -0.0176958153024 -1.24578714371 -0.0349532784894 -1.24579492211 -0.0522106839344 -1.24580571056 -0.0694684600457 -1.24581953883 -0.0867263004184 -1.24583640695 -0.103984633461 -1.2458563149 -0.121243152767 -1.24587929249 -0.13850228861 -1.24590528011 -0.155761729926 -1.24591803551 -0.174970697611 -1.24590352178 -0.194181289524 -1.24587771297 -0.211440879852 -1.24585494399 -0.228699807078 -1.24583527446 -0.245958477259 -1.24581855535 -0.263216607273 -1.2458049357 -0.280474625528 -1.24579432607 -0.297732204199 -1.24578672647 -0.314989775419 -1.24578222633 -0.332247048616 -1.24578082562 -0.349504455924 -1.24578243494 -0.366761676967 -1.24578711391 -0.384019136429 -1.24579486251 -0.401276543737 -1.24580568076 -0.418534323573 -1.24581950903 -0.435792155564 -1.24583637714 -0.453050486744 -1.2458563149 -0.470309004188 -1.24587926268 -0.48756814003 -1.24590528011 -0.504827588797 -1.24591806531 -0.524036541581 -1.24590355158 -0.543247133493 -1.24587777257 -0.560506731272 -1.24585497379 -0.577765658498 -1.24583527446 -0.595024332404 -1.24581855535 -0.612282454968 -1.24580487609 -0.629540473223 -1.24579426646 -0.646798044443 -1.24578675628 -0.664055615664 -1.24578228593 -0.681312888861 -1.24578088522 -0.698570281267 -1.24578246474 -0.715827524662 -1.24578714371 -0.733085006475 -1.24579489231 -0.750342398882 -1.24580568076 -0.767600163818 -1.24581950903 -0.784857988358 -1.24583637714 -0.802116304636 -1.2458563149 -0.819374844432 -1.24587926268 -0.836633980274 -1.24590525031 -0.853893429041 -1.24591803551 -0.873102396727 -1.24590355158 -0.892312973738 -1.24587777257 -0.909572571516 -1.24585497379 -0.926831498742 -1.24583527446 -0.94409018755 -1.24581855535 -0.961348325014 -1.24580487609 -0.978606328368 -1.24579426646 -0.995863884689 -1.24578672647 -1.01312145591 -1.24578225613 -1.03037875891 -1.24578085542 -1.04763615131 -1.24578243494 -1.06489336491 -1.24578717351 -1.08215081692 -1.24579492211 -1.09940820932 -1.24580568076 -1.11666598916 -1.24581950903 -1.1339238286 -1.24583637714 -1.15118217468 -1.2458563149 -1.16844069958 -1.24587926268 -1.18569985032 -1.24590528011 -1.20295929909 -1.24591806531 -1.22216823697 -1.24590355158 -1.24137881398 -1.24587774277 -1.25863841176 -1.24585497379 -1.27589735389 -1.24583530426 -1.2931560576 -1.24581855535 -1.31041419506 -1.24580490589 -1.32767218351 -1.24579426646 -1.34492975473 -1.24578669667 -1.36218735576 -1.24578225613 -1.37944462895 -1.24578088522 -1.39670202136 -1.24578249455 -1.41395923495 -1.24578714371 -1.43121668696 -1.24579486251 -1.44847407937 -1.24580568076 -1.46573185921 -1.24581950903 -1.48298972845 -1.24583634734 -1.50024804473 -1.2458563149 -1.51750653982 -1.24587929249 -1.53476569057 -1.24590525031 -1.55202513933 -1.24591800571 -1.57123410702 -1.24590349197 -1.59044471383 -1.24587774277 -1.60770431161 -1.24585494399 -1.62496322393 -1.24583524466 -1.64222189784 -1.24581855535 -1.6594800353 -1.24580490589 -1.67673802376 -1.24579429627 -1.69399556517 -1.24578672647 -1.7112531364 -1.24578219652 -1.7285104394 -1.24578079581 -1.7457678318 -1.24578243494 -1.7630250454 -1.24578714371 -1.78028252721 -1.24579489231 -1.79753994942 -1.24580568076 -1.81479772925 -1.24581953883 -1.83205556869 -1.24583640694 -1.84931388497 -1.2458563149 -1.86657240987 -1.24587926268 -1.88383153081 -1.24590528011 -1.90109094977 -1.24591806531 -1.92029991746 -1.24590352178 -1.93951049447 -1.24587777257 -1.95677012205 -1.2458550036 -1.97402906418 -1.24583527446 -1.99128773809 -1.24581855535 -2.00854590535 -1.24580487609 -2.0258039236 -1.24579426646 -2.04306149483 -1.24578672647 -2.06031906605 -1.24578222633 -2.07757633924 -1.24578082562 -2.09483379126 -1.24578243494 -2.11209100485 -1.24578711391 -2.12934839726 -1.24579486251 -2.14660573006 -1.24580568076 -2.16386348009 -1.24581950903 -2.18112140894 -1.24583637714 -2.19837981462 -1.2458563447 -2.21563833952 -1.24587929249 -2.23289746046 -1.24590528011 -2.25015681982 -1.24591806531 -2.2693657279 -1.24590352178 -2.28857636452 -1.24587771297 -2.30583596229 -1.24585494399 -2.32309490442 -1.24583527446 -2.34035360813 -1.24581855535 -2.35761171579 -1.24580490589 -2.37486970424 -1.24579426646 -2.39212727547 -1.24578672647 -2.40938484669 -1.24578228593 -2.42664211988 -1.24578085542 -2.4438995719 -1.24578243494 -2.46115678549 -1.24578714371 -2.4784142375 -1.24579489231 -2.49567162991 -1.24580568076 -2.51292937994 -1.24581950903 -2.53018724918 -1.24583637714 -2.54744559527 -1.2458563447 -2.56470412016 -1.24587929249 -2.5819632411 -1.24590528011 -2.59922271967 -1.24591806531 -2.61843168735 -1.24590355158 -2.63764220476 -1.24587774277 -2.65490180254 -1.24585494399 -2.67216074467 -1.24583527446 -2.68941944838 -1.24581855535 -2.70667761564 -1.24580490589 -2.72393560409 -1.24579429627 -2.74119317531 -1.24578672647 -2.75845074653 -1.24578222633 -2.77570801974 -1.24578085542 -2.79296541214 -1.24578246474 -2.81022262573 -1.24578711391 -2.82748007774 -1.24579486251 -2.84473747015 -1.24580568076 -2.86199527979 -1.24581950903 -2.87925308943 -1.24583637714 -2.8965113759 -1.2458563149 -2.9137699008 -1.24587926268 -2.93102908134 -1.24590528011 -2.94828855991 -1.24591803551 -2.9674975276 -1.24590352178 -2.98670810461 -1.24587780237 -3.00396770239 -1.2458550036 -3.02122664452 -1.24583527446 -3.03848528862 -1.24581855535 -3.05574339628 -1.24580487609 -3.07300144434 -1.24579429627 -3.09025901556 -1.24578675628 -3.10751658678 -1.24578222633 -3.12477385998 -1.24578085542 --3.14115408261 -1.24578246474 --3.12389683724 -1.24578714371 --3.10663938523 -1.24579492211 --3.08938199282 -1.24580571056 --3.07212418318 -1.24581953883 --3.05486637354 -1.24583640695 --3.03760808706 -1.2458563149 --3.02034956217 -1.24587929249 --3.00309038162 -1.24590528011 --2.98583090305 -1.24591803551 --2.96662193537 -1.24590352178 --2.94741135836 -1.24587771297 --2.93015176058 -1.24585494399 --2.91289281845 -1.24583527446 --2.89563417435 -1.24581855535 --2.87837606669 -1.2458049357 --2.86111801863 -1.24579432607 --2.84386044741 -1.24578672647 --2.82660287619 -1.24578222633 --2.80934560299 -1.24578082562 --2.79208827019 -1.24578243494 --2.77483099699 -1.24578711391 --2.75757348538 -1.24579486251 --2.74031609297 -1.24580568076 --2.72305834293 -1.24581950903 --2.70580053329 -1.24583637714 --2.68854218721 -1.2458563149 --2.67128366232 -1.24587926268 --2.65402454138 -1.24590528011 --2.63676512242 -1.24591806531 --2.61755615473 -1.24590355158 --2.59834551811 -1.24587777257 --2.58108592034 -1.24585497379 --2.56382703781 -1.24583527446 --2.5465683341 -1.24581855535 --2.52931016684 -1.24580487609 --2.51205217838 -1.24579426646 --2.49479460716 -1.24578675628 --2.47753703594 -1.24578228593 --2.46027976274 -1.24578088522 --2.44302231073 -1.24578246474 --2.42576509714 -1.24578714371 --2.40850764513 -1.24579489231 --2.39125019312 -1.24580568076 --2.37399244309 -1.24581950903 --2.35673463344 -1.24583637714 --2.33947628736 -1.2458563149 --2.32221776247 -1.24587926268 --2.30495864153 -1.24590525031 --2.28769916296 -1.24591803551 --2.26849019528 -1.24590355158 --2.24927967787 -1.24587777257 --2.23202008009 -1.24585497379 --2.21476113796 -1.24583527446 --2.19750243425 -1.24581855535 --2.18024432659 -1.24580487609 --2.16298639775 -1.24579426646 --2.14572876692 -1.24578672647 --2.1284711957 -1.24578225613 --2.11121398211 -1.24578085542 --2.09395653009 -1.24578243494 --2.0766992569 -1.24578717351 --2.05944180489 -1.24579492211 --2.04218441248 -1.24580568076 --2.02492660284 -1.24581950903 --2.0076687634 -1.24583637714 --1.99041044712 -1.2458563149 --1.97315195203 -1.24587926268 --1.95589283109 -1.24590528011 --1.93863335252 -1.24591806531 --1.91942438483 -1.24590355158 --1.90021380782 -1.24587774277 --1.88295421005 -1.24585497379 --1.86569529772 -1.24583530426 --1.84843662381 -1.24581855535 --1.83117848635 -1.24580490589 --1.81392049789 -1.24579426646 --1.79666289687 -1.24578669667 --1.77940532565 -1.24578225613 --1.76214805245 -1.24578088522 --1.74489066004 -1.24578249455 --1.72763344646 -1.24578714371 --1.71037593484 -1.24579486251 --1.69311854243 -1.24580568076 --1.6758607924 -1.24581950903 --1.65860295296 -1.24583634734 --1.64134460688 -1.2458563149 --1.62408608198 -1.24587929249 --1.60682696104 -1.24590525031 --1.58956754208 -1.24591800571 --1.57035854459 -1.24590349197 --1.55114793778 -1.24587774277 --1.5338883698 -1.24585494399 --1.51662945747 -1.24583524466 --1.49937078356 -1.24581855535 --1.4821126461 -1.24580490589 --1.46485462785 -1.24579429627 --1.44759705663 -1.24578672647 --1.43033948541 -1.24578219652 --1.41308221221 -1.24578079581 --1.3958248198 -1.24578243494 --1.37856760621 -1.24578714371 --1.3613101542 -1.24579489231 --1.34405273199 -1.24580568076 --1.32679495215 -1.24581953883 --1.30953711271 -1.24583640694 --1.29227876663 -1.2458563149 --1.27502024174 -1.24587926268 --1.2577611208 -1.24590528011 --1.24050167203 -1.24591806531 --1.22129270435 -1.24590352178 --1.20208212734 -1.24587777257 --1.18482252956 -1.2458550036 --1.16756361723 -1.24583527446 --1.15030494332 -1.24581855535 --1.13304680586 -1.24580487609 --1.11578878761 -1.24579426646 --1.09853118658 -1.24578672647 --1.08127358556 -1.24578222633 --1.06401631236 -1.24578082562 --1.04675891995 -1.24578243494 --1.02950170636 -1.24578711391 --1.01224425435 -1.24579486251 --0.994986876844 -1.24580568076 --0.97772911191 -1.24581950903 --0.960471242666 -1.24583637714 --0.943212896586 -1.2458563447 --0.925954371691 -1.24587929249 --0.90869525075 -1.24590528011 --0.891435816884 -1.24591806531 --0.872226849198 -1.24590352178 --0.853016242385 -1.24587771297 --0.835756659508 -1.24585494399 --0.818497732282 -1.24583527446 --0.801239028573 -1.24581855535 --0.783980920911 -1.24580490589 --0.766722932458 -1.24579426646 --0.749465361237 -1.24578672647 --0.732207775116 -1.24578228593 --0.714950487018 -1.24578085542 --0.69769307971 -1.24578243494 --0.680435866118 -1.24578714371 --0.663178429008 -1.24579489231 --0.645921036601 -1.24580568076 --0.628663256765 -1.24581950903 --0.611405402422 -1.24583637714 --0.594147056341 -1.2458563447 --0.576888531446 -1.24587929249 --0.559629395604 -1.24590528011 --0.542369961739 -1.24591806531 --0.523161008954 -1.24590355158 --0.503950417042 -1.24587774277 --0.486690826714 -1.24585494399 --0.469431899488 -1.24583527446 --0.452173218131 -1.24581855535 --0.434915088117 -1.24580490589 --0.417657077313 -1.24579429627 --0.400399498641 -1.24578672647 --0.383141919971 -1.24578222633 --0.365884654224 -1.24578085542 --0.348627261818 -1.24578246474 --0.331370033324 -1.24578711391 --0.314112566411 -1.24579486251 --0.296855159104 -1.24580568076 --0.279597379267 -1.24581950903 --0.262339547276 -1.24583637714 --0.245081219822 -1.2458563149 --0.227822702378 -1.24587926268 --0.210563566536 -1.24590528011 --0.193304121494 -1.24591803551 --0.174095153808 -1.26304838062 --0.154882222414 -1.2630224824 --0.13762262091 -1.26299953461 --0.120363684371 -1.26297968626 --0.103104993701 -1.26296287775 --0.0858468525112 -1.26294916868 --0.0685888398439 -1.26293852925 --0.0513312546536 -1.26293092966 --0.0340736662038 -1.26292639971 --0.0168163799681 -1.2629250288 -0.00044102780521 -1.26292663813 -0.0176982553676 -1.26293134689 -0.0349557287991 -1.2629391253 -0.0522131435573 -1.26294994355 -0.0694709271192 -1.26296386123 -0.0867287777364 -1.26298084855 -0.103987121954 -1.26300087571 -0.121245648712 -1.26302394271 -0.138504792005 -1.26305010915 -0.155764248222 -1.26306295395 -0.174973130226 -1.26304832101 -0.194183632731 -1.26302236319 -0.21144323051 -1.2629994452 -0.228702165186 -1.26297968626 -0.245960853994 -1.26296290755 -0.263218991459 -1.26294919849 -0.280477017164 -1.26293855905 -0.297734610736 -1.26293092966 -0.314992181957 -1.26292636991 -0.332249470055 -1.26292493939 -0.349506892264 -1.26292657852 -0.366764113307 -1.26293131709 -0.384021572769 -1.2629390955 -0.401278987527 -1.26294994354 -0.418536789715 -1.26296386123 -0.435794636607 -1.26298084855 -0.453052967787 -1.26300087571 -0.470311492681 -1.26302394271 -0.487570650876 -1.26305010915 -0.504830099642 -1.26306295395 -0.524038955569 -1.26304835081 -0.543249472976 -1.26302242279 -0.560509085655 -1.26299950481 -0.577768012881 -1.26297968626 -0.595026671886 -1.26296287775 -0.61228479445 -1.26294916868 -0.629542842508 -1.26293849945 -0.64680044353 -1.26293092966 -0.664058044552 -1.26292639971 -0.681315332651 -1.262924999 -0.698572725057 -1.26292663813 -0.715829953551 -1.26293131709 -0.733087435365 -1.2629390955 -0.750344872475 -1.26294994354 -0.767602652312 -1.26296386123 -0.784860476852 -1.26298084855 -0.80211879313 -1.26300087571 -0.819377332926 -1.26302394271 -0.83663648367 -1.26305010915 -0.853895947337 -1.26306295395 -0.873104825616 -1.26304835081 -0.89231531322 -1.2630224526 -0.9095749259 -1.26299950481 -0.926833868027 -1.26297965646 -0.944092571735 -1.26296287775 -0.9613507092 -1.26294916868 -0.978608712554 -1.26293849945 -0.995866298676 -1.26293089986 -1.0131238699 -1.26292639971 -1.03038117289 -1.2629249692 -1.04763859511 -1.26292657852 -1.06489580869 -1.26293134689 -1.0821532607 -1.2629391253 -1.09941068292 -1.26294994354 -1.11666849256 -1.26296386123 -1.133926332 -1.26298084855 -1.15118467808 -1.26300087571 -1.16844320297 -1.26302394271 -1.18570235372 -1.26305010915 -1.20296180248 -1.26306295395 -1.22217065096 -1.26304835081 -1.24138116837 -1.26302242279 -1.25864079595 -1.26299953461 -1.27589970827 -1.26297971606 -1.29315838218 -1.26296287775 -1.31041654944 -1.26294919849 -1.3276745677 -1.26293849945 -1.34493213892 -1.26293089986 -1.36218973994 -1.26292642951 -1.37944704294 -1.262924999 -1.39670446515 -1.26292660832 -1.41396167874 -1.26293131709 -1.43121913075 -1.2629390955 -1.44847652316 -1.26294994354 -1.4657343328 -1.26296386123 -1.48299220204 -1.26298081875 -1.50025051832 -1.26300087571 -1.51750904322 -1.26302397251 -1.53476819396 -1.26305010915 -1.55202764273 -1.26306292415 -1.571236521 -1.26304832101 -1.59044703841 -1.2630224526 -1.60770663619 -1.26299953461 -1.62496557832 -1.26297971606 -1.64222428203 -1.26296287775 -1.65948241949 -1.26294916869 -1.67674040794 -1.26293855905 -1.69399797916 -1.26293092966 -1.71125558019 -1.26292636991 -1.72851285338 -1.26292493939 -1.74577024579 -1.26292657852 -1.76302751898 -1.26293131709 -1.7802850008 -1.2629390657 -1.79754239321 -1.26294991374 -1.81480017304 -1.26296389103 -1.83205804228 -1.26298087835 -1.84931638837 -1.26300087571 -1.86657491326 -1.26302394271 -1.88383406401 -1.26305010915 -1.90109351277 -1.26306295395 -1.92030236125 -1.26304832101 -1.93951284885 -1.26302242279 -1.95677250624 -1.26299953461 -1.97403141856 -1.26297971606 -1.99129006267 -1.26296290755 -2.00854822993 -1.26294916868 -2.02580624819 -1.26293849945 -2.04306381941 -1.26293089986 -2.06032145023 -1.26292639971 -2.07757878304 -1.262924999 -2.09483617544 -1.26292660832 -2.11209338903 -1.26293131709 -2.12935090065 -1.2629390955 -2.14660829305 -1.26294994354 -2.16386598349 -1.26296386123 -2.18112385273 -1.26298084855 -2.19838225841 -1.26300093532 -2.21564078331 -1.26302400231 -2.23289990425 -1.26305010915 -2.25015932322 -1.26306295395 -2.2693682313 -1.26304832101 -2.2885787487 -1.26302239299 -2.30583834648 -1.26299950481 -2.32309734821 -1.26297968626 -2.34035599232 -1.26296287775 -2.35761404037 -1.26294916868 -2.37487208843 -1.26293846965 -2.39212971926 -1.26293087005 -2.40938729048 -1.26292639971 -2.42664456368 -1.2629249692 -2.44390201569 -1.26292657852 -2.46115922928 -1.26293131709 -2.47841668129 -1.2629390955 -2.4956740737 -1.26294994354 -2.51293188333 -1.26296386123 -2.53018975258 -1.26298084855 -2.54744803905 -1.26300090551 -2.56470662355 -1.26302397251 -2.5819657445 -1.26305010915 -2.59922522306 -1.26306295395 -2.61843413115 -1.26304835081 -2.63764452934 -1.26302242279 -2.65490412712 -1.26299950481 -2.67216312885 -1.26297971606 -2.68942183256 -1.26296290755 -2.70667999983 -1.26294916868 -2.72393798828 -1.26293849945 -2.7411955595 -1.26293089986 -2.75845313072 -1.26292639971 -2.77571040392 -1.262924999 -2.79296785593 -1.26292660832 -2.81022506952 -1.26293131709 -2.82748252153 -1.2629390955 -2.84473991394 -1.26294994354 -2.86199772358 -1.26296386123 -2.87925559282 -1.26298084855 -2.8965138793 -1.26300087571 -2.91377240419 -1.26302394271 -2.93103164434 -1.26305010915 -2.94829112291 -1.26306295395 -2.96749997139 -1.26304838062 -2.9867104888 -1.2630224824 -3.00397008658 -1.26299953461 -3.0212289691 -1.26297968626 -3.03848767281 -1.26296287775 -3.05574584007 -1.26294916868 -3.07300382853 -1.26293852925 -3.09026139975 -1.26293092966 -3.10751903057 -1.26292639971 -3.12477630377 -1.2629250288 --3.14115163882 -1.26292663813 --3.12389439345 -1.26293134689 --3.10663694144 -1.2629391253 --3.08937954903 -1.26294994355 --3.07212173938 -1.26296386123 --3.05486387014 -1.26298084855 --3.03760552406 -1.26300087571 --3.02034699917 -1.26302394271 --3.00308781862 -1.26305010915 --2.98582834005 -1.26306295395 --2.96661949158 -1.26304832101 --2.94740897417 -1.26302236319 --2.93014937639 -1.2629994452 --2.91289049387 -1.26297968626 --2.89563179016 -1.26296290755 --2.8783736229 -1.26294919849 --2.86111563444 -1.26293855905 --2.84385806322 -1.26293092966 --2.826600492 -1.26292636991 --2.8093432188 -1.26292493939 --2.7920858264 -1.26292657852 --2.7748285532 -1.26293131709 --2.75757104158 -1.2629390955 --2.74031364918 -1.26294994354 --2.72305589914 -1.26296386123 --2.70579808951 -1.26298084855 --2.68853968382 -1.26300087571 --2.67128115892 -1.26302394271 --2.65402203799 -1.26305010915 --2.63676255942 -1.26306295395 --2.61755371094 -1.26304835081 --2.59834319353 -1.26302242279 --2.58108353615 -1.26299950481 --2.56382465362 -1.26297968626 --2.54656600952 -1.26296287775 --2.52930784226 -1.26294916868 --2.5120497942 -1.26293849945 --2.49479222298 -1.26293092966 --2.47753465176 -1.26292639971 --2.46027731895 -1.262924999 --2.44301986694 -1.26292663813 --2.42576265335 -1.26293131709 --2.40850520134 -1.2629390955 --2.39124774933 -1.26294994354 --2.37398993969 -1.26296386123 --2.35673213005 -1.26298084855 --2.33947384357 -1.26300087571 --2.32221531868 -1.26302394271 --2.30495619774 -1.26305010915 --2.28769671917 -1.26306295395 --2.26848781109 -1.26304835081 --2.24927735329 -1.2630224526 --2.23201775551 -1.26299950481 --2.21475875378 -1.26297965646 --2.19750005007 -1.26296287775 --2.18024194241 -1.26294916868 --2.16298395395 -1.26293849945 --2.14572632313 -1.26293089986 --2.12846875191 -1.26292639971 --2.11121147871 -1.2629249692 --2.0939540267 -1.26292657852 --2.07669681311 -1.26293134689 --2.0594393611 -1.2629391253 --2.04218196869 -1.26294994354 --2.02492415905 -1.26296386123 --2.00766631961 -1.26298084855 --1.99040797353 -1.26300087571 --1.97314941883 -1.26302394271 --1.95589029789 -1.26305010915 --1.93863084912 -1.26306295395 --1.91942197084 -1.26304835081 --1.90021148324 -1.26302242279 --1.88295188546 -1.26299953461 --1.86569294333 -1.26297971606 --1.84843423962 -1.26296287775 --1.83117610216 -1.26294919849 --1.8139180839 -1.26293849945 --1.79666048288 -1.26293089986 --1.77940291166 -1.26292642951 --1.76214563847 -1.262924999 --1.74488824606 -1.26292660832 --1.72763100266 -1.26293131709 --1.71037349105 -1.2629390955 --1.69311609865 -1.26294994354 --1.67585834861 -1.26296386123 --1.65860047936 -1.26298081875 --1.64134213329 -1.26300087571 --1.62408360839 -1.26302397251 --1.60682445764 -1.26305010915 --1.58956500888 -1.26306292415 --1.5703561008 -1.26304832101 --1.55114558339 -1.2630224526 --1.53388598562 -1.26299953461 --1.51662707329 -1.26297971606 --1.49936839938 -1.26296287775 --1.48211026192 -1.26294916869 --1.46485224366 -1.26293855905 --1.44759464264 -1.26293092966 --1.43033707142 -1.26292636991 --1.41307979822 -1.26292493939 --1.39582237601 -1.26292657852 --1.37856516242 -1.26293131709 --1.36130771041 -1.2629390657 --1.3440502584 -1.26294991374 --1.32679244876 -1.26296389103 --1.30953463912 -1.26298087835 --1.29227629304 -1.26300087571 --1.27501773834 -1.26302394271 --1.2577585876 -1.26305010915 --1.24049913883 -1.26306295395 --1.22129029036 -1.26304832101 --1.20207980275 -1.26302242279 --1.18482017517 -1.26299953461 --1.16756123304 -1.26297971606 --1.15030255914 -1.26296290755 --1.13304442167 -1.26294916868 --1.11578640342 -1.26293849945 --1.0985288024 -1.26293089986 --1.08127120137 -1.26292639971 --1.06401389838 -1.262924999 --1.04675650597 -1.26292660832 --1.02949929237 -1.26293131709 --1.01224181056 -1.2629390955 --0.994984403253 -1.26294994354 --0.977726623416 -1.26296386123 --0.960468754172 -1.26298084855 --0.943210408092 -1.26300093532 --0.925951883197 -1.26302400231 --0.908692747355 -1.26305010915 --0.891433298588 -1.26306295395 --0.872224405408 -1.26304832101 --0.853013902903 -1.26302239299 --0.835754320025 -1.26299950481 --0.818495377898 -1.26297968626 --0.801236689091 -1.26296287775 --0.783978566527 -1.26294916868 --0.766720548272 -1.26293846965 --0.749462962151 -1.26293087005 --0.732205361128 -1.26292639971 --0.714948058128 -1.2629249692 --0.697690650821 -1.26292657852 --0.680433437228 -1.26293131709 --0.663175970316 -1.2629390955 --0.645918563009 -1.26294994354 --0.628660783171 -1.26296386123 --0.611402928829 -1.26298084855 --0.594144582749 -1.26300090551 --0.576886042953 -1.26302397251 --0.559626892209 -1.26305010915 --0.542367428541 -1.26306295395 --0.523158550263 -1.26304835081 --0.503948062659 -1.26302242279 --0.48668847233 -1.26299950481 --0.469429537654 -1.26297971606 --0.452170848846 -1.26296290755 --0.434912711382 -1.26294916868 --0.417654685676 -1.26293849945 --0.400397099555 -1.26293089986 --0.383139513433 -1.26292639971 --0.365882232785 -1.262924999 --0.348624832928 -1.26292660832 --0.331367596984 -1.26293131709 --0.31411010772 -1.2629390955 --0.296852692962 -1.26294994354 --0.279594913125 -1.26296386123 --0.262337066233 -1.26298084855 --0.245078731328 -1.26300087571 --0.227820202708 -1.26302394271 --0.21056105569 -1.26305010915 --0.193301603198 -1.26306295395 --0.174092724919 -1.28016632795 --0.154879909009 -1.28014028072 --0.137620296329 -1.28011718392 --0.120361348614 -1.28009727597 --0.103102656081 -1.28008040786 --0.0858445074409 -1.28006663918 --0.0685864826664 -1.28005594015 --0.0513288863003 -1.28004828095 --0.0340712871402 -1.280043751 --0.0168139918242 -1.2800423503 -0.000443425960838 -1.28004395962 -0.0177006626036 -1.28004869819 -0.0349581460468 -1.2800565064 -0.0522155724466 -1.28006738424 -0.0694733671844 -1.28008139133 -0.0867312271148 -1.28009846807 -0.103989578784 -1.28011861444 -0.12124811858 -1.28014183045 -0.138507273048 -1.28016811609 -0.155766736716 -1.2801810205 -0.174975533038 -1.28016632795 -0.194185946137 -1.28014022112 -0.211445551366 -1.28011715412 -0.228704497218 -1.28009727597 -0.245963189751 -1.28008040786 -0.263221338391 -1.28006663918 -0.280479378998 -1.28005594015 -0.297736980021 -1.28004828095 -0.314994566142 -1.2800436914 -0.332251861691 -1.28004226089 -0.3495092839 -1.28004392982 -0.366766519845 -1.28004869819 -0.384023994207 -1.28005650639 -0.401281408966 -1.28006738424 -0.418539218605 -1.28008139133 -0.435797087848 -1.28009846807 -0.453055433929 -1.28011861444 -0.470313966274 -1.28014183045 -0.487573131919 -1.28016811609 -0.504832603037 -1.2801809907 -0.524041369558 -1.28016629815 -0.543251797557 -1.28014025092 -0.560511425138 -1.28011718392 -0.577770352364 -1.28009724617 -0.59502902627 -1.28008037806 -0.612287163734 -1.28006660938 -0.629545211792 -1.28005588054 -0.646802812815 -1.28004825115 -0.664060413837 -1.2800437212 -0.681317716837 -1.28004232049 -0.698575124144 -1.28004395962 -0.715832352638 -1.28004869819 -0.733089849353 -1.28005650639 -0.750347286463 -1.28006738424 -0.767605081201 -1.28008139133 -0.784862935543 -1.28009846807 -0.802121266722 -1.28011861444 -0.819379806519 -1.28014183045 -0.836638972163 -1.28016811609 -0.853898450732 -1.2801809907 -0.873107224703 -1.28016629815 -0.8923176229 -1.28014025092 -0.909577265382 -1.28011718392 -0.92683622241 -1.28009724617 -0.944094911218 -1.28008037806 -0.961353048682 -1.28006660938 -0.978611066937 -1.28005588054 -0.995868667959 -1.28004825115 -1.01312625408 -1.2800437212 -1.03038355708 -1.28004229069 -1.04764100909 -1.28004392982 -1.06489822269 -1.28004869819 -1.0821556747 -1.28005650639 -1.09941312671 -1.28006738424 -1.11667093635 -1.28008139133 -1.13392880559 -1.28009846807 -1.15118715167 -1.28011861444 -1.16844567656 -1.28014183045 -1.18570485711 -1.28016808629 -1.20296430588 -1.28018096089 -1.22217306495 -1.28016629815 -1.24138349294 -1.28014025092 -1.25864312052 -1.28011721372 -1.27590206265 -1.28009727597 -1.29316073656 -1.28008037806 -1.31041887403 -1.28006660938 -1.32767692208 -1.28005588054 -1.34493452311 -1.28004828095 -1.36219209433 -1.280043751 -1.37944939733 -1.28004229069 -1.39670684934 -1.28004392982 -1.41396409273 -1.28004869819 -1.43122157454 -1.28005650639 -1.44847896695 -1.28006738424 -1.46573674679 -1.28008136153 -1.48299461603 -1.28009843827 -1.50025299192 -1.28011861444 -1.51751154661 -1.28014183045 -1.53477066755 -1.28016811609 -1.55203011632 -1.2801809907 -1.571238935 -1.28016629815 -1.59044936299 -1.28014025092 -1.60770896077 -1.28011721372 -1.6249679029 -1.28009730577 -1.64222660661 -1.28008037806 -1.65948477388 -1.28006657958 -1.67674276232 -1.28005591035 -1.69400033355 -1.28004828095 -1.71125796437 -1.2800437212 -1.72851526737 -1.28004226089 -1.74577265978 -1.28004390001 -1.76302990317 -1.28004869819 -1.78028738499 -1.28005647659 -1.79754480719 -1.28006735444 -1.81480261683 -1.28008139133 -1.83206048608 -1.28009846807 -1.84931883216 -1.28011861444 -1.86657735705 -1.28014183045 -1.8838365376 -1.28016811609 -1.90109601617 -1.2801810205 -1.92030477524 -1.28016632795 -1.93951520324 -1.28014025092 -1.95677483082 -1.28011721372 -1.97403374314 -1.28009730577 -1.99129241705 -1.28008040786 -2.00855055451 -1.28006660938 -2.02580857277 -1.28005588054 -2.04306614399 -1.28004828095 -2.06032377481 -1.28004378081 -2.07758110761 -1.2800423503 -2.09483850002 -1.28004395962 -2.11209577322 -1.28004869819 -2.12935328484 -1.28005650639 -2.14661067724 -1.28006738424 -2.16386842728 -1.28008139133 -2.18112629652 -1.28009846807 -2.1983847022 -1.28011864424 -2.2156432271 -1.28014186025 -2.23290234804 -1.28016808629 -2.25016182661 -1.28018096089 -2.26937067509 -1.28016629815 -2.28858107328 -1.28014025092 -2.30584067106 -1.28011721372 -2.32309961319 -1.28009727597 -2.3403582573 -1.28008037806 -2.35761636496 -1.28006660938 -2.37487441301 -1.28005588054 -2.39213210344 -1.28004828095 -2.40938973427 -1.280043751 -2.42664694786 -1.28004229069 -2.44390434027 -1.28004392982 -2.46116161347 -1.28004869819 -2.47841912508 -1.28005650639 -2.49567657709 -1.28006738424 -2.51293438673 -1.28008139133 -2.53019219637 -1.28009846807 -2.54745048284 -1.28011861444 -2.56470906734 -1.28014183045 -2.58196818829 -1.28016808629 -2.59922766686 -1.28018096089 -2.61843651533 -1.28016629815 -2.63764685392 -1.28014025092 -2.6549064517 -1.28011721372 -2.67216545343 -1.28009730577 -2.68942415714 -1.28008040786 -2.70668232441 -1.28006660938 -2.72394037247 -1.28005588054 -2.74119794369 -1.28004825115 -2.75845551491 -1.280043751 -2.77571284771 -1.28004232049 -2.79297029972 -1.28004392982 -2.81022751331 -1.28004869819 -2.82748496533 -1.28005650639 -2.84474235773 -1.28006738424 -2.86200016737 -1.28008139133 -2.87925803661 -1.28009846807 -2.89651632309 -1.28011861444 -2.91377484799 -1.28014183045 -2.93103408814 -1.28016811609 -2.94829356671 -1.2801809907 -2.96750229597 -1.28016632795 -2.98671275377 -1.28014028072 -3.00397241116 -1.28011718392 -3.02123129368 -1.28009727597 -3.03848999739 -1.28008040786 -3.05574816465 -1.28006663918 -3.07300615311 -1.28005594015 -3.09026372433 -1.28004828095 -3.10752135515 -1.280043751 -3.12477868795 -1.2800423503 --3.14114919503 -1.28004395962 --3.12389194965 -1.28004869819 --3.10663449764 -1.2800565064 --3.08937710524 -1.28006738424 --3.07211929559 -1.28008139133 --3.05486142635 -1.28009846807 --3.03760308027 -1.28011861444 --3.02034449577 -1.28014183045 --3.00308531523 -1.28016811609 --2.98582589626 -1.2801810205 --2.966617167 -1.28016632795 --2.9474067092 -1.28014022112 --2.93014705181 -1.28011715412 --2.91288816929 -1.28009727597 --2.89562946558 -1.28008040786 --2.87837129832 -1.28006663918 --2.86111330986 -1.28005594015 --2.84385573864 -1.28004828095 --2.82659816742 -1.2800436914 --2.80934083461 -1.28004226089 --2.7920833826 -1.28004392982 --2.77482616902 -1.28004869819 --2.757568717 -1.28005650639 --2.74031126499 -1.28006738424 --2.72305345536 -1.28008139133 --2.70579558611 -1.28009846807 --2.68853718042 -1.28011861444 --2.67127865553 -1.28014183045 --2.65401953459 -1.28016811609 --2.63676005602 -1.2801809907 --2.61755126715 -1.28016629815 --2.59834086895 -1.28014025092 --2.58108121157 -1.28011718392 --2.56382232904 -1.28009724617 --2.54656368494 -1.28008037806 --2.52930551768 -1.28006660938 --2.51204746962 -1.28005588054 --2.49478983879 -1.28004825115 --2.47753226757 -1.2800437212 --2.46027499437 -1.28004232049 --2.44301754236 -1.28004395962 --2.42576026916 -1.28004869819 --2.40850275755 -1.28005650639 --2.39124536515 -1.28006738424 --2.3739875555 -1.28008139133 --2.35672968626 -1.28009846807 --2.33947139978 -1.28011861444 --2.32221287489 -1.28014183045 --2.30495375395 -1.28016811609 --2.28769427538 -1.2801809907 --2.2684854269 -1.28016629815 --2.24927502871 -1.28014025092 --2.23201543093 -1.28011718392 --2.21475642919 -1.28009724617 --2.19749772548 -1.28008037806 --2.18023955822 -1.28006660938 --2.16298156977 -1.28005588054 --2.14572399855 -1.28004825115 --2.12846636772 -1.2800437212 --2.11120903492 -1.28004229069 --2.09395158291 -1.28004392982 --2.07669436931 -1.28004869819 --2.0594369173 -1.28005650639 --2.0421795249 -1.28006738424 --2.02492171526 -1.28008139133 --2.00766387582 -1.28009846807 --1.99040552974 -1.28011861444 --1.97314694524 -1.28014183045 --1.95588782429 -1.28016808629 --1.93862840533 -1.28018096089 --1.91941958666 -1.28016629815 --1.90020915866 -1.28014025092 --1.88294956088 -1.28011721372 --1.86569061875 -1.28009727597 --1.84843191505 -1.28008037806 --1.83117374778 -1.28006660938 --1.81391569972 -1.28005588054 --1.7966581285 -1.28004828095 --1.77940055728 -1.280043751 --1.76214325428 -1.28004229069 --1.74488583208 -1.28004392982 --1.72762858868 -1.28004869819 --1.71037110686 -1.28005650639 --1.69311368466 -1.28006738424 --1.67585590482 -1.28008136153 --1.65859803557 -1.28009843827 --1.64133968949 -1.28011861444 --1.6240811646 -1.28014183045 --1.60682198405 -1.28016811609 --1.58956250548 -1.2801809907 --1.57035371661 -1.28016629815 --1.55114328861 -1.28014025092 --1.53388366103 -1.28011721372 --1.5166247189 -1.28009730577 --1.49936601519 -1.28008037806 --1.48210790753 -1.28006657958 --1.46484991908 -1.28005591035 --1.44759228826 -1.28004828095 --1.43033468723 -1.2800437212 --1.41307741404 -1.28004226089 --1.39581999183 -1.28004390001 --1.37856274843 -1.28004869819 --1.36130526662 -1.28005647659 --1.34404781461 -1.28006735444 --1.32679000497 -1.28008139133 --1.30953219533 -1.28009846807 --1.29227384925 -1.28011861444 --1.27501526475 -1.28014183045 --1.257756114 -1.28016811609 --1.24049666524 -1.2801810205 --1.22128787637 -1.28016632795 --1.20207747817 -1.28014025092 --1.18481785059 -1.28011721372 --1.16755890846 -1.28009730577 --1.15030023456 -1.28008040786 --1.13304206729 -1.28006660938 --1.11578404903 -1.28005588054 --1.09852644801 -1.28004828095 --1.08126884699 -1.28004378081 --1.06401154399 -1.2800423503 --1.04675412178 -1.28004395962 --1.02949687838 -1.28004869819 --1.01223939657 -1.28005650639 --0.994981974363 -1.28006738424 --0.977724179626 -1.28008139133 --0.960466325283 -1.28009846807 --0.943207964301 -1.28011864424 --0.925949424505 -1.28014186025 --0.908690273762 -1.28016808629 --0.891430824995 -1.28018096089 --0.872222021222 -1.28016629815 --0.853011593222 -1.28014025092 --0.835751980543 -1.28011721372 --0.818493053317 -1.28009727597 --0.801234379411 -1.28008037806 --0.783976227045 -1.28006660938 --0.766718178987 -1.28005588054 --0.749460563064 -1.28004828095 --0.732202962041 -1.280043751 --0.714945673942 -1.28004229069 --0.697688266635 -1.28004392982 --0.680431038141 -1.28004869819 --0.663173556328 -1.28005650639 --0.645916119218 -1.28006738424 --0.62865832448 -1.28008139133 --0.611400485039 -1.28009846807 --0.594142138958 -1.28011861444 --0.576883584261 -1.28014183045 --0.559624433518 -1.28016808629 --0.542364954949 -1.28018096089 --0.523156151176 -1.28016629815 --0.503945752979 -1.28014025092 --0.486686140299 -1.28011721372 --0.469427198172 -1.28009730577 --0.452168509364 -1.28008040786 --0.434910364449 -1.28006660938 --0.417652331293 -1.28005588054 --0.40039473027 -1.28004825115 --0.383137136698 -1.280043751 --0.365879841149 -1.28004232049 --0.348622426391 -1.28004392982 --0.331365190447 -1.28004869819 --0.314107693732 -1.28005650639 --0.296850271523 -1.28006738424 --0.279592484236 -1.28008139133 --0.262334622443 -1.28009846807 --0.245076276362 -1.28011861444 --0.227817736566 -1.28014183045 --0.210558578372 -1.28016811609 --0.193299118429 -1.2801809907 --0.174090325832 -1.29726085067 --0.154877625406 -1.29723465443 --0.13761800155 -1.29721149802 --0.120359051973 -1.29719150066 --0.103100351989 -1.29717451334 --0.085842192173 -1.29716065526 --0.0685841562226 -1.29714989662 --0.0513265477493 -1.29714220762 --0.0340689388104 -1.29713764787 --0.0168116351124 -1.29713621736 -0.00044579268433 -1.29713785649 -0.0177030386403 -1.29714262485 -0.0349605320953 -1.29715049267 -0.0522179687395 -1.29716145992 -0.0694757727906 -1.29717552662 -0.0867336392403 -1.29719266296 -0.10399199836 -1.29721289873 -0.121250553056 -1.29723623395 -0.138509720564 -1.29726266861 -0.155769187957 -1.29727566242 -0.174977894873 -1.29726088047 -0.194188226015 -1.29723465443 -0.211447846145 -1.29721149802 -0.228706803173 -1.29719147086 -0.245965499431 -1.29717448354 -0.263223655522 -1.29716065526 -0.280481696129 -1.29714989662 -0.297739304602 -1.29714220762 -0.314996913075 -1.29713761806 -0.332254208624 -1.29713618756 -0.349511638284 -1.29713785649 -0.36676889658 -1.29714262485 -0.384026385844 -1.29715046286 -0.401283815503 -1.29716140032 -0.418541625142 -1.29717549681 -0.435799494386 -1.29719266296 -0.453057862818 -1.29721289873 -0.470316410065 -1.29723626375 -0.487575575709 -1.29726269841 -0.504835054278 -1.29727563262 -0.524043738842 -1.29726085067 -0.543254077435 -1.29723465443 -0.560513705015 -1.29721146822 -0.577772647142 -1.29719144106 -0.595031365752 -1.29717448354 -0.612289533019 -1.29716062546 -0.629547566176 -1.29714986682 -0.646805167199 -1.29714220762 -0.664062768221 -1.29713767767 -0.68132007122 -1.29713624716 -0.698577493429 -1.29713785649 -0.715834736824 -1.29714262485 -0.73309224844 -1.29715046286 -0.750349670649 -1.29716143012 -0.767607480287 -1.29717552662 -0.784865349531 -1.29719266296 -0.802123695612 -1.29721289873 -0.819382250309 -1.29723623395 -0.836641401052 -1.29726266861 -0.853900879621 -1.29727563262 -0.873109579086 -1.29726085067 -0.892319902777 -1.29723465443 -0.909579545259 -1.29721149802 -0.926838517189 -1.29719147086 -0.944097220898 -1.29717448354 -0.961355358362 -1.29716062546 -0.97861340642 -1.29714986682 -0.995871007442 -1.29714220762 -1.01312860847 -1.29713764787 -1.03038594127 -1.29713621736 -1.04764336348 -1.29713785649 -1.06490060687 -1.29714262485 -1.08215808868 -1.29715046286 -1.09941551089 -1.29716143012 -1.11667332053 -1.29717552662 -1.13393121958 -1.29719266296 -1.15118959546 -1.29721289873 -1.16844812036 -1.29723626375 -1.1857072711 -1.29726266861 -1.20296674967 -1.29727557302 -1.22217544914 -1.29726082087 -1.24138575792 -1.29723465443 -1.2586453855 -1.29721149802 -1.27590435743 -1.29719147086 -1.29316306114 -1.29717448354 -1.3104211986 -1.29716062546 -1.32767924666 -1.29714986682 -1.34493687749 -1.29714220762 -1.36219444871 -1.29713764787 -1.37945172191 -1.29713621736 -1.39670917392 -1.29713785649 -1.41396644711 -1.29714262485 -1.43122395873 -1.29715046286 -1.44848138094 -1.29716143012 -1.46573916078 -1.29717549681 -1.48299703002 -1.29719266295 -1.5002554059 -1.29721292854 -1.5175139606 -1.29723623395 -1.53477311134 -1.29726266861 -1.55203256011 -1.29727560282 -1.57124128938 -1.29726085067 -1.59045165777 -1.29723468423 -1.60771125555 -1.29721149802 -1.62497019768 -1.29719147086 -1.64222890139 -1.29717448354 -1.65948706865 -1.29716062546 -1.67674508691 -1.29714986682 -1.69400268793 -1.29714223742 -1.71126031875 -1.29713764787 -1.72851762176 -1.29713615775 -1.74577504396 -1.29713782668 -1.76303228736 -1.29714265466 -1.78028976917 -1.29715049267 -1.79754722118 -1.29716143012 -1.81480506063 -1.29717552662 -1.83206292987 -1.29719266296 -1.84932127595 -1.29721289873 -1.86657980085 -1.29723626375 -1.88383898139 -1.29726269841 -1.90109845996 -1.29727566242 -1.92030715943 -1.29726088047 -1.93951749802 -1.29723465443 -1.9567770958 -1.29721149802 -1.97403603792 -1.29719147086 -1.99129474163 -1.29717448354 -2.00855287909 -1.29716062546 -2.02581089735 -1.29714986682 -2.04306852818 -1.29714223742 -2.060326159 -1.29713770747 -2.0775834322 -1.29713624716 -2.09484088421 -1.29713785649 -2.11209821701 -1.29714262485 -2.12935566902 -1.29715046286 -2.14661306143 -1.29716140032 -2.16387087107 -1.29717549681 -2.18112874031 -1.29719266296 -2.198387146 -1.29721289873 -2.21564567089 -1.29723626375 -2.23290479183 -1.29726266861 -2.2501642704 -1.29727560282 -2.26937299967 -1.29726085067 -2.28858333826 -1.29723465443 -2.30584293604 -1.29721149802 -2.32310187816 -1.29719147086 -2.34036058188 -1.29717448354 -2.35761868954 -1.29716062546 -2.37487673759 -1.29714986682 -2.39213442802 -1.29714226722 -2.40939205885 -1.29713767767 -2.42664933204 -1.29713618756 -2.44390672445 -1.29713785649 -2.46116399765 -1.29714262485 -2.47842150927 -1.29715046286 -2.49567896128 -1.29716143012 -2.51293677092 -1.29717552662 -2.53019458056 -1.29719266296 -2.54745292664 -1.29721289873 -2.56471151114 -1.29723623395 -2.58197063207 -1.29726263881 -2.59923011065 -1.29727560282 -2.61843883991 -1.29726085067 -2.6376491189 -1.29723465443 -2.65490877628 -1.29721149802 -2.67216777801 -1.29719147086 -2.68942648172 -1.29717448354 -2.70668464899 -1.29716062546 -2.72394269705 -1.29714986682 -2.74120026827 -1.29714223742 -2.75845783949 -1.29713767767 -2.77571517229 -1.29713621736 -2.7929726243 -1.29713785649 -2.8102298379 -1.29714262485 -2.82748734951 -1.29715046286 -2.84474480152 -1.29716143012 -2.86200261116 -1.29717552662 -2.87926048041 -1.29719266296 -2.89651876688 -1.29721289873 -2.91377729178 -1.29723626375 -2.93103653192 -1.29726269841 -2.9482960105 -1.29727563262 -2.96750468016 -1.29726085067 -2.98671507836 -1.29723465443 -3.00397473574 -1.29721149802 -3.02123361826 -1.29719150066 -3.03849226236 -1.29717451334 -3.05575042963 -1.29716065526 -3.07300847769 -1.29714989662 -3.09026604891 -1.29714220762 -3.10752367974 -1.29713764787 -3.12478101254 -1.29713621736 --3.14114687045 -1.29713785649 --3.12388962507 -1.29714262485 --3.10663211346 -1.29715049267 --3.08937466145 -1.29716145992 --3.07211685181 -1.29717552662 --3.05485898256 -1.29719266296 --3.03760069609 -1.29721289873 --3.02034211159 -1.29723623395 --3.00308287144 -1.29726266861 --2.98582345247 -1.29727566242 --2.96661478281 -1.29726088047 --2.94740444422 -1.29723465443 --2.93014478684 -1.29721149802 --2.9128858447 -1.29719147086 --2.8956272006 -1.29717448354 --2.87836903334 -1.29716065526 --2.86111098528 -1.29714989662 --2.84385341406 -1.29714220762 --2.82659578323 -1.29713761806 --2.80933845043 -1.29713618756 --2.79208099842 -1.29713785649 --2.77482372522 -1.29714262485 --2.75756627321 -1.29715046286 --2.74030888081 -1.29716140032 --2.72305107117 -1.29717549681 --2.70579314232 -1.29719266296 --2.68853473663 -1.29721289873 --2.67127621174 -1.29723626375 --2.6540170908 -1.29726269841 --2.63675761223 -1.29727563262 --2.61754888296 -1.29726085067 --2.59833854437 -1.29723465443 --2.58107894659 -1.29721146822 --2.56382006407 -1.29719144106 --2.54656136036 -1.29717448354 --2.52930313349 -1.29716062546 --2.51204508543 -1.29714986682 --2.4947874546 -1.29714220762 --2.47752988338 -1.29713767767 --2.46027261019 -1.29713624716 --2.44301515818 -1.29713785649 --2.42575788498 -1.29714262485 --2.40850037336 -1.29715046286 --2.39124298096 -1.29716143012 --2.37398517132 -1.29717552662 --2.35672730207 -1.29719266296 --2.33946895599 -1.29721289873 --2.3222104311 -1.29723623395 --2.30495131016 -1.29726266861 --2.28769183159 -1.29727563262 --2.26848310232 -1.29726085067 --2.24927276373 -1.29723465443 --2.23201316595 -1.29721149802 --2.21475416422 -1.29719147086 --2.1974954009 -1.29717448354 --2.18023723364 -1.29716062546 --2.16297924518 -1.29714986682 --2.14572167396 -1.29714220762 --2.12846404314 -1.29713764787 --2.11120671034 -1.29713621736 --2.09394925833 -1.29713785649 --2.07669204473 -1.29714262485 --2.05943459272 -1.29715046286 --2.04217714071 -1.29716143012 --2.02491933107 -1.29717552662 --2.00766149163 -1.29719266296 --1.99040311575 -1.29721289873 --1.97314456105 -1.29723626375 --1.95588541031 -1.29726266861 --1.93862593174 -1.29727557302 --1.91941720247 -1.29726082087 --1.90020686388 -1.29723465443 --1.8829472363 -1.29721149802 --1.86568829417 -1.29719147086 --1.84842962027 -1.29717448354 --1.831171453 -1.29716062546 --1.81391340494 -1.29714986682 --1.79665580392 -1.29714220762 --1.7793982029 -1.29713764787 --1.7621408999 -1.29713621736 --1.74488344789 -1.29713785649 --1.72762620449 -1.29714262485 --1.71036872268 -1.29715046286 --1.69311127067 -1.29716143012 --1.67585346102 -1.29717549681 --1.65859559178 -1.29719266295 --1.6413372457 -1.29721292854 --1.62407872081 -1.29723623395 --1.60681954026 -1.29726266861 --1.58956006169 -1.29727560282 --1.57035136223 -1.29726085067 --1.55114102364 -1.29723468423 --1.53388139605 -1.29721149802 --1.51662242413 -1.29719147086 --1.49936372042 -1.29717448354 --1.48210558295 -1.29716062546 --1.4648475647 -1.29714986682 --1.44758996367 -1.29714223742 --1.43033233285 -1.29713764787 --1.41307502985 -1.29713615775 --1.39581763744 -1.29713782668 --1.37856039405 -1.29714265466 --1.36130288243 -1.29715049267 --1.34404543042 -1.29716143012 --1.32678762078 -1.29717552662 --1.30952978134 -1.29719266296 --1.29227143526 -1.29721289873 --1.27501285076 -1.29723626375 --1.25775370002 -1.29726269841 --1.24049422145 -1.29727566242 --1.22128549218 -1.29726088047 --1.20207518339 -1.29723465443 --1.18481555581 -1.29721149802 --1.16755661368 -1.29719147086 --1.15029790997 -1.29717448354 --1.1330397427 -1.29716062546 --1.11578172445 -1.29714986682 --1.09852409363 -1.29714223742 --1.08126649261 -1.29713770747 --1.06400918961 -1.29713624716 --1.0467517376 -1.29713785649 --1.0294944942 -1.29714262485 --1.01223701238 -1.29715046286 --0.994979575275 -1.29716140032 --0.977721765637 -1.29717549681 --0.960463911295 -1.29719266296 --0.943205550313 -1.29721289873 --0.925946995616 -1.29723626375 --0.90868781507 -1.29726266861 --0.891428351403 -1.29727560282 --0.872219651938 -1.29726085067 --0.853009298444 -1.29723465443 --0.835749685764 -1.29721149802 --0.818490758538 -1.29719147086 --0.801232054829 -1.29717448354 --0.783973902464 -1.29716062546 --0.766715854407 -1.29714986682 --0.749458238483 -1.29714226722 --0.732200652361 -1.29713767767 --0.714943349362 -1.29713618756 --0.697685912251 -1.29713785649 --0.680428668856 -1.29714262485 --0.663171187043 -1.29715046286 --0.645913735032 -1.29716143012 --0.628655925393 -1.29717552662 --0.611398071051 -1.29719266296 --0.59413972497 -1.29721289873 --0.576881155372 -1.29723623395 --0.559621974826 -1.29726263881 --0.542362511158 -1.29727560282 --0.523153811693 -1.29726085067 --0.503943488002 -1.29723465443 --0.48668384552 -1.29721149802 --0.469424903393 -1.29719147086 --0.452166207134 -1.29717448354 --0.434908039868 -1.29716062546 --0.417650006711 -1.29714986682 --0.400392405689 -1.29714223742 --0.383134804666 -1.29713767767 --0.365877494216 -1.29713621736 --0.348620057106 -1.29713785649 --0.331362813711 -1.29714262485 --0.314105324447 -1.29715046286 --0.296847887337 -1.29716143012 --0.279590085149 -1.29717552662 --0.262332215905 -1.29719266296 --0.245073851198 -1.29721289873 --0.227815300226 -1.29723626375 --0.210556138307 -1.29726269841 --0.193296670914 -1.29727563262 --0.174087963998 -1.31439730525 --0.154873892665 -1.31437096 --0.137614253908 -1.31434768438 --0.120355287567 -1.31432756782 --0.103096567095 -1.31431049108 --0.0858383923769 -1.3142965734 --0.0685803415254 -1.31428575516 --0.0513227162883 -1.31427803635 --0.0340650924481 -1.3142734468 --0.0168077722192 -1.31427204609 -0.000449671410022 -1.31427371502 -0.017706933897 -1.31427845359 -0.0349644431845 -1.3142863512 -0.0522218942642 -1.31429737806 -0.0694797132164 -1.31431150436 -0.0867375973612 -1.31432875991 -0.103995975107 -1.31434908509 -0.121254542842 -1.31437250972 -0.138513725251 -1.31439909339 -0.155773207546 -1.31441214681 -0.174981769175 -1.31439730525 -0.194191958755 -1.31437096 -0.211451597512 -1.31434768438 -0.228710565716 -1.31432756782 -0.2459692806 -1.31431049108 -0.263227455318 -1.3142965734 -0.280485503375 -1.31428575516 -0.297743134201 -1.31427806616 -0.315000765026 -1.3142734766 -0.332258075476 -1.31427201629 -0.349515512586 -1.31427365542 -0.366772785783 -1.31427845359 -0.384030297398 -1.3142863512 -0.401287741959 -1.31429731846 -0.418545559049 -1.31431147456 -0.435803443193 -1.31432875991 -0.453061833977 -1.3143491149 -0.470320403576 -1.31437256932 -0.487579576671 -1.31439912319 -0.504839047789 -1.31441214681 -0.524047598243 -1.31439727544 -0.543257802725 -1.31437093019 -0.560517460108 -1.31434765458 -0.577776417136 -1.31432753801 -0.595035135746 -1.31431049108 -0.612293332815 -1.3142965734 -0.629551365971 -1.31428575516 -0.646808981896 -1.31427806616 -0.664066612721 -1.31427350641 -0.681323930621 -1.31427204609 -0.698581382632 -1.31427365542 -0.715838640928 -1.31427845359 -0.733096152544 -1.31428638101 -0.750353604555 -1.31429737806 -0.767611429095 -1.31431150436 -0.784869298339 -1.31432875991 -0.802127674222 -1.31434908509 -0.81938624382 -1.31437250972 -0.836645409465 -1.31439909339 -0.853904902935 -1.31441214681 -0.873113468289 -1.31439727544 -0.89232365787 -1.31437093019 -0.909583285451 -1.31434768438 -0.92684225738 -1.31432753802 -0.944100990891 -1.31431046128 -0.961359158158 -1.3142965734 -0.978617206216 -1.31428575516 -0.995874837041 -1.31427806616 -1.01313248277 -1.31427350641 -1.03038978577 -1.31427204609 -1.04764720797 -1.31427365542 -1.06490448117 -1.31427845359 -1.08216199279 -1.31428638101 -1.0994194448 -1.31429740787 -1.11667725444 -1.31431153417 -1.13393515348 -1.31432875991 -1.15119355917 -1.31434908509 -1.16845211386 -1.31437253952 -1.18571126461 -1.31439912319 -1.20297077299 -1.314412117 -1.22217935324 -1.31439727544 -1.24138951302 -1.31437096 -1.2586491406 -1.31434768438 -1.27590811253 -1.31432753802 -1.29316684604 -1.31431046128 -1.3104250133 -1.3142965734 -1.32768306136 -1.31428575516 -1.34494069219 -1.31427806616 -1.36219829321 -1.3142734766 -1.37945559621 -1.31427201629 -1.39671304822 -1.31427365542 -1.41397032141 -1.31427845359 -1.43122783303 -1.31428638101 -1.44848528504 -1.31429740787 -1.46574312449 -1.31431156397 -1.48300102353 -1.31432881951 -1.50025936961 -1.3143491149 -1.51751792431 -1.31437250972 -1.53477713466 -1.31439909339 -1.55203661322 -1.314412117 -1.57124516368 -1.31439730525 -1.59045538306 -1.3143709898 -1.60771501064 -1.31434768438 -1.62497395277 -1.31432753802 -1.64223265648 -1.31431046128 -1.65949085355 -1.3142965734 -1.67674893141 -1.31428575516 -1.69400656223 -1.31427806616 -1.71126419306 -1.3142734468 -1.72852149606 -1.31427198649 -1.74577894807 -1.31427365542 -1.76303622127 -1.31427848339 -1.78029370308 -1.31428641081 -1.79755115509 -1.31429740787 -1.81480899453 -1.31431153417 -1.83206686378 -1.31432875991 -1.84932523966 -1.31434908509 -1.86658379435 -1.31437253952 -1.8838429749 -1.31439912319 -1.90110248327 -1.31441214681 -1.92031106353 -1.31439730525 -1.93952122331 -1.31437096 -1.95678085089 -1.31434768438 -1.97403982282 -1.31432756782 -1.99129852653 -1.31431049108 -2.00855672359 -1.3142965734 -2.02581477165 -1.31428575516 -2.04307240248 -1.31427806616 -2.0603300333 -1.31427350641 -2.0775873065 -1.31427204609 -2.09484475851 -1.31427365542 -2.11210209131 -1.31427845359 -2.12935960293 -1.31428638101 -2.14661705494 -1.31429734826 -2.16387486458 -1.31431147456 -2.18113273382 -1.31432875991 -2.19839113951 -1.31434908509 -2.2156496644 -1.31437253952 -2.23290878534 -1.31439912319 -2.25016826391 -1.31441214681 -2.26937687397 -1.31439727544 -2.28858709335 -1.31437093019 -2.30584669113 -1.31434768438 -2.32310569286 -1.31432756782 -2.34036445617 -1.31431049108 -2.35762256384 -1.3142965734 -2.3748806119 -1.31428572535 -2.39213830233 -1.31427806616 -2.40939593315 -1.31427350641 -2.42665320635 -1.31427201629 -2.44391065836 -1.31427365542 -2.46116793156 -1.31427845359 -2.47842538357 -1.31428638101 -2.49568283558 -1.31429740787 -2.51294064522 -1.31431153417 -2.53019851446 -1.31432875991 -2.54745692015 -1.31434908509 -2.56471550465 -1.31437250972 -2.58197468519 -1.31439909339 -2.59923416376 -1.31441214681 -2.61844271421 -1.31439730525 -2.637652874 -1.31437096 -2.65491253138 -1.31434768438 -2.67217153311 -1.31432756782 -2.68943023681 -1.31431049108 -2.70668840408 -1.3142965734 -2.72394645214 -1.31428575516 -2.74120408297 -1.31427806616 -2.75846171379 -1.3142734766 -2.77571904659 -1.31427201629 -2.7929764986 -1.31427368522 -2.8102337122 -1.31427848339 -2.82749122381 -1.31428638101 -2.84474867582 -1.31429740787 -2.86200654507 -1.31431153417 -2.87926447392 -1.31432875991 -2.89652276039 -1.31434908509 -2.91378128528 -1.31437253952 -2.93104052543 -1.31439912319 -2.94830006361 -1.31441214681 -2.96750861407 -1.31439730525 -2.98671883345 -1.31437096 -3.00397849083 -1.31434768438 -3.02123737335 -1.31432756782 -3.03849601745 -1.31431049108 -3.05575418472 -1.3142965734 -3.07301223278 -1.31428575516 -3.09026986361 -1.31427803635 -3.10752755404 -1.3142734468 -3.12478488684 -1.31427204609 --3.14114299615 -1.31427371502 --3.12388575077 -1.31427845359 --3.10662823916 -1.3142863512 --3.08937078715 -1.31429737806 --3.0721129179 -1.31431150436 --3.05485498905 -1.31432875991 --3.03759670258 -1.31434908509 --3.02033817768 -1.31437250972 --3.00307893753 -1.31439909339 --2.98581939936 -1.31441214681 --2.9666108489 -1.31439730525 --2.94740068912 -1.31437096 --2.93014103174 -1.31434768438 --2.91288208961 -1.31432756782 --2.89562344551 -1.31431049108 --2.87836521864 -1.3142965734 --2.86110711098 -1.31428575516 --2.84384953976 -1.31427806616 --2.82659190893 -1.3142734766 --2.80933457613 -1.31427201629 --2.79207712412 -1.31427365542 --2.77481979132 -1.31427845359 --2.7575622797 -1.3142863512 --2.7403048873 -1.31429731846 --2.72304707766 -1.31431147456 --2.70578920841 -1.31432875991 --2.68853080273 -1.3143491149 --2.67127221823 -1.31437256932 --2.65401309729 -1.31439912319 --2.63675361872 -1.31441214681 --2.61754506826 -1.31439727544 --2.59833484888 -1.31437093019 --2.5810751915 -1.31434765458 --2.56381624937 -1.31432753801 --2.54655748606 -1.31431049108 --2.52929925919 -1.3142965734 --2.51204121113 -1.31428575516 --2.49478363991 -1.31427806616 --2.47752606869 -1.31427350641 --2.46026873589 -1.31427204609 --2.44301128387 -1.31427365542 --2.42575401068 -1.31427845359 --2.40849649906 -1.31428638101 --2.39123904705 -1.31429737806 --2.37398123741 -1.31431150436 --2.35672336817 -1.31432875991 --2.33946496248 -1.31434908509 --2.32220643759 -1.31437250972 --2.30494731665 -1.31439909339 --2.28768783808 -1.31441214681 --2.26847922802 -1.31439727544 --2.24926900864 -1.31437093019 --2.23200941086 -1.31434768438 --2.21475040913 -1.31432753802 --2.19749164582 -1.31431046128 --2.18023347855 -1.3142965734 --2.16297543049 -1.31428575516 --2.14571779966 -1.31427806616 --2.12846016884 -1.31427350641 --2.11120283603 -1.31427204609 --2.09394538402 -1.31427365542 --2.07668817043 -1.31427845359 --2.05943071842 -1.31428638101 --2.04217326641 -1.31429740787 --2.02491545677 -1.31431153417 --2.00765755772 -1.31432875991 --1.99039912224 -1.31434908509 --1.97314056754 -1.31437253952 --1.95588138699 -1.31439912319 --1.93862187863 -1.314412117 --1.91941332817 -1.31439727544 --1.90020313859 -1.31437096 --1.88294348121 -1.31434768438 --1.86568450928 -1.31432753802 --1.84842583537 -1.31431046128 --1.8311676681 -1.3142965734 --1.81390959024 -1.31428575516 --1.79665195942 -1.31427806616 --1.77939432859 -1.3142734766 --1.76213702559 -1.31427201629 --1.74487957358 -1.31427365542 --1.72762230038 -1.31427845359 --1.71036478877 -1.31428638101 --1.69310733676 -1.31429740787 --1.67584952712 -1.31431156397 --1.65859165787 -1.31432881951 --1.64133328199 -1.3143491149 --1.6240747273 -1.31437250972 --1.60681554675 -1.31439909339 --1.58955603838 -1.314412117 --1.57034745812 -1.31439730525 --1.55113729835 -1.3143709898 --1.53387767077 -1.31434768438 --1.51661866904 -1.31432753802 --1.49935996533 -1.31431046128 --1.48210179806 -1.3142965734 --1.46484375 -1.31428575516 --1.44758614897 -1.31427806616 --1.43032851815 -1.3142734468 --1.41307118535 -1.31427198649 --1.39581373334 -1.31427365542 --1.37855648994 -1.31427848339 --1.36129897833 -1.31428641081 --1.34404149652 -1.31429740787 --1.32678368688 -1.31431153417 --1.30952581763 -1.31432875991 --1.29226744175 -1.31434908509 --1.27500885725 -1.31437253952 --1.25774967671 -1.31439912319 --1.24049019814 -1.31441214681 --1.22128164768 -1.31439730525 --1.2020714581 -1.31437096 --1.18481180072 -1.31434768438 --1.16755282879 -1.31432756782 --1.15029409528 -1.31431049108 --1.13303592801 -1.3142965734 --1.11577787995 -1.31428575516 --1.09852024913 -1.31427806616 --1.08126264811 -1.31427350641 --1.0640053153 -1.31427204609 --1.04674786329 -1.31427365542 --1.0294906199 -1.31427845359 --1.01223310828 -1.31428638101 --0.994975656271 -1.31429734826 --0.977717816829 -1.31431147456 --0.960459917784 -1.31432875991 --0.943201556802 -1.31434908509 --0.925943002105 -1.31437253952 --0.908683806658 -1.31439912319 --0.891424313188 -1.31441214681 --0.872215762734 -1.31439727544 --0.853005558253 -1.31437093019 --0.835745930672 -1.31434768438 --0.818486973644 -1.31432756782 --0.801228240133 -1.31431049108 --0.783970087767 -1.3142965734 --0.766712039709 -1.31428572535 --0.749454408884 -1.31427806616 --0.73219679296 -1.31427350641 --0.714939475059 -1.31427201629 --0.697682023048 -1.31427365542 --0.680424749851 -1.31427845359 --0.663167253137 -1.31428638101 --0.645909816027 -1.31429740787 --0.628652006388 -1.31431153417 --0.611394122243 -1.31432875991 --0.59413574636 -1.31434908509 --0.57687716186 -1.31437250972 --0.559617966414 -1.31439909339 --0.542358487845 -1.31441214681 --0.523149937391 -1.31439730525 --0.50393974781 -1.31437096 --0.486680090427 -1.31434768438 --0.469421133399 -1.31432756782 --0.452162414789 -1.31431049108 --0.434904240072 -1.3142965734 --0.417646199465 -1.31428575516 --0.400388583541 -1.31427806616 --0.383130952716 -1.3142734766 --0.365873619914 -1.31427201629 --0.348616175353 -1.31427368522 --0.331358917057 -1.31427848339 --0.314101412892 -1.31428638101 --0.296843960881 -1.31429740787 --0.279586143792 -1.31431153417 --0.262328252197 -1.31432875991 --0.245069868863 -1.31434908509 --0.22781131044 -1.31437253952 --0.210552129894 -1.31439912319 --0.193292643875 -1.31441214681 --0.174084085971 -1.33157414198 --0.154870264232 -1.33154767752 --0.137610606849 -1.3315242827 --0.120351620018 -1.33150404692 --0.103092884645 -1.33148688078 --0.0858346968889 -1.33147290349 --0.0685766311362 -1.33146202564 --0.0513189891353 -1.33145427704 --0.034061350394 -1.33144968748 --0.0168040152639 -1.33144828677 -0.00045344303362 -1.3314499259 -0.0177107208874 -1.33145466447 -0.0349682462402 -1.33146262169 -0.0522257117555 -1.33147367835 -0.0694835465401 -1.33148786426 -0.0867414493114 -1.33150523901 -0.103999843821 -1.3315256834 -0.121258424595 -1.33154922724 -0.138517618179 -1.33157593012 -0.155777122826 -1.33158904314 -0.174985546619 -1.33157414198 -0.194195590913 -1.33154767752 -0.211455244571 -1.33152425289 -0.228714223951 -1.33150401711 -0.245972961188 -1.33148688078 -0.263231150806 -1.33147290349 -0.280489213764 -1.33146202564 -0.297746859491 -1.33145430684 -0.315004497766 -1.33144971728 -0.332261830568 -1.33144825697 -0.34951929003 -1.33144986629 -0.366776570678 -1.33145469427 -0.384034089744 -1.33146265149 -0.401291549206 -1.33147367835 -0.418549388647 -1.33148789406 -0.435807295144 -1.33150523901 -0.453065693379 -1.33152571321 -0.470324277878 -1.33154928685 -0.487583465874 -1.33157595992 -0.504842966795 -1.33158904314 -0.524051383138 -1.33157411218 -0.543261423707 -1.33154764771 -0.560521095991 -1.3315242827 -0.577780067921 -1.33150404692 -0.595038801432 -1.33148688078 -0.612296998501 -1.33147290349 -0.629555046558 -1.33146202564 -0.646812692285 -1.33145430684 -0.664070338011 -1.33144971728 -0.681327685714 -1.33144825697 -0.698585152626 -1.33144989609 -0.715842425823 -1.33145472407 -0.733099937439 -1.33146268129 -0.750357419252 -1.33147370815 -0.767615273595 -1.33148789406 -0.784873157739 -1.33150526881 -0.802131548524 -1.33152571321 -0.819390118122 -1.33154925704 -0.836649313569 -1.33157595992 -0.853908836842 -1.33158904314 -0.873117253185 -1.33157408237 -0.892327293754 -1.33154758811 -0.909586951137 -1.33152422309 -0.926845923066 -1.33150398731 -0.944104656577 -1.33148685098 -0.961362853646 -1.33147293329 -0.978620901704 -1.33146208524 -0.995878577235 -1.33145436645 -1.01313623786 -1.33144974709 -1.03039351106 -1.33144825697 -1.04765099287 -1.33144986629 -1.06490826606 -1.33145469427 -1.08216577768 -1.33146268129 -1.0994232893 -1.33147373795 -1.11668109894 -1.33148792386 -1.13393899798 -1.33150523901 -1.15119740367 -1.3315256834 -1.16845595837 -1.33154925704 -1.18571516871 -1.33157595992 -1.20297470689 -1.33158904314 -1.22218313813 -1.33157414198 -1.2413931489 -1.33154764772 -1.25865277648 -1.33152425289 -1.27591177821 -1.33150401712 -1.29317051172 -1.33148685098 -1.31042870879 -1.33147290349 -1.32768678665 -1.33146202564 -1.34494441748 -1.33145430684 -1.3622020483 -1.33144968748 -1.3794593811 -1.33144822716 -1.39671683311 -1.33144986629 -1.41397410631 -1.33145466447 -1.43123161792 -1.33146265149 -1.44848906994 -1.33147373795 -1.46574693918 -1.33148795366 -1.48300486803 -1.33150529861 -1.50026324391 -1.33152571321 -1.51752182841 -1.33154925704 -1.53478103876 -1.33157595992 -1.55204054713 -1.33158901334 -1.57124894858 -1.33157408237 -1.59045898915 -1.33154764772 -1.60771864653 -1.3315242827 -1.62497761845 -1.33150404692 -1.64223635197 -1.33148688078 -1.65949454903 -1.33147290349 -1.67675262689 -1.33146205544 -1.69401028752 -1.33145430684 -1.71126794815 -1.33144965768 -1.72852528095 -1.33144822716 -1.74578273296 -1.33144986629 -1.76304000616 -1.33145466447 -1.78029751778 -1.33146265149 -1.79755496979 -1.33147373795 -1.81481277942 -1.33148792386 -1.83207067847 -1.33150526881 -1.84932908416 -1.33152571321 -1.86658766866 -1.33154925704 -1.88384687901 -1.33157595992 -1.90110638738 -1.33158904314 -1.92031481862 -1.33157414198 -1.93952485919 -1.33154767752 -1.95678451657 -1.3315242827 -1.9740434885 -1.33150404692 -1.99130222201 -1.33148688078 -2.00856044888 -1.33147290349 -2.02581852674 -1.33146202564 -2.04307609796 -1.33145430684 -2.06033372879 -1.33144971728 -2.07759106159 -1.33144825697 -2.09484851361 -1.33144986629 -2.1121058464 -1.33145469427 -2.12936335802 -1.33146268129 -2.14662081003 -1.33147370815 -2.16387867927 -1.33148789406 -2.18113660812 -1.33150523901 -2.19839501381 -1.3315256834 -2.21565359831 -1.33154925704 -2.23291271925 -1.33157595992 -2.25017219782 -1.33158904314 -2.26938068867 -1.33157408237 -2.28859072924 -1.33154761792 -2.30585032702 -1.33152425289 -2.32310932875 -1.33150401711 -2.34036809206 -1.33148688078 -2.35762625933 -1.33147290349 -2.37488430738 -1.33146199584 -2.39214199781 -1.33145427704 -2.40939968824 -1.33144971728 -2.42665696144 -1.33144825697 -2.44391441345 -1.33144989609 -2.46117174625 -1.33145472407 -2.47842925787 -1.33146268129 -2.49568670988 -1.33147373795 -2.51294451952 -1.33148792386 -2.53020238876 -1.33150526881 -2.54746079445 -1.33152571321 -2.56471937895 -1.33154925704 -2.5819786191 -1.33157595992 -2.59923809767 -1.33158901334 -2.61844646931 -1.33157411218 -2.63765650988 -1.33154767752 -2.65491616726 -1.3315242827 -2.67217516899 -1.33150404692 -2.6894338727 -1.33148688078 -2.70669203997 -1.33147290349 -2.72395014763 -1.33146202564 -2.74120783806 -1.33145427704 -2.75846546888 -1.33144968748 -2.77572280169 -1.33144825697 -2.7929802537 -1.33144989609 -2.81023752689 -1.33145472407 -2.82749503851 -1.33146268129 -2.84475249052 -1.33147373795 -2.86201035976 -1.33148792386 -2.87926828861 -1.33150526881 -2.89652663469 -1.33152571321 -2.91378515959 -1.33154925704 -2.93104439974 -1.33157595992 -2.94830393792 -1.33158904314 -2.96751230955 -1.33157414198 -2.98672240972 -1.33154767752 -3.00398212671 -1.3315242827 -3.02124106884 -1.33150404692 -3.03849977255 -1.33148688078 -3.05575793981 -1.33147290349 -3.07301598787 -1.33146202564 -3.0902736187 -1.33145427704 -3.10753124952 -1.33144968748 -3.12478858233 -1.33144828677 --3.14113924105 -1.3314499259 --3.12388193608 -1.33145466447 --3.10662442446 -1.33146262169 --3.08936697245 -1.33147367835 --3.0721091032 -1.33148786426 --3.05485117435 -1.33150523901 --3.03759282827 -1.3315256834 --3.02033430338 -1.33154922724 --3.00307506323 -1.33157593012 --2.98581552506 -1.33158904314 --2.96660715342 -1.33157414198 --2.94739705324 -1.33154767752 --2.93013733625 -1.33152425289 --2.91287839413 -1.33150401711 --2.89561969042 -1.33148688078 --2.87836146355 -1.33147290349 --2.86110335589 -1.33146202564 --2.84384578467 -1.33145430684 --2.82658821344 -1.33144971728 --2.80933088064 -1.33144825697 --2.79207336902 -1.33144986629 --2.77481603622 -1.33145469427 --2.75755852461 -1.33146265149 --2.7403010726 -1.33147367835 --2.72304326296 -1.33148789406 --2.70578539372 -1.33150523901 --2.68852698803 -1.33152571321 --2.67126834393 -1.33154928685 --2.65400916338 -1.33157595992 --2.63674968481 -1.33158904314 --2.61754125356 -1.33157411218 --2.59833121299 -1.33154764771 --2.58107155561 -1.3315242827 --2.56381255388 -1.33150404692 --2.54655379057 -1.33148688078 --2.5292956233 -1.33147290349 --2.51203757525 -1.33146202564 --2.49477994442 -1.33145430684 --2.4775223136 -1.33144971728 --2.46026498079 -1.33144825697 --2.44300752878 -1.33144989609 --2.42575025558 -1.33145472407 --2.40849274397 -1.33146268129 --2.39123523236 -1.33147370815 --2.37397736311 -1.33148789406 --2.35671949387 -1.33150526881 --2.33946108818 -1.33152571321 --2.32220250368 -1.33154925704 --2.30494338274 -1.33157595992 --2.28768390417 -1.33158904314 --2.26847541332 -1.33157408237 --2.24926537275 -1.33154758811 --2.23200571537 -1.33152422309 --2.21474671364 -1.33150398731 --2.19748800993 -1.33148685098 --2.18022984266 -1.33147293329 --2.16297179461 -1.33146208524 --2.14571410418 -1.33145436645 --2.12845641375 -1.33144974709 --2.11119908094 -1.33144825697 --2.09394162893 -1.33144986629 --2.07668435573 -1.33145469427 --2.05942684412 -1.33146268129 --2.04216939211 -1.33147373795 --2.02491158247 -1.33148792386 --2.00765368343 -1.33150523901 --1.99039524794 -1.3315256834 --1.97313666344 -1.33154925704 --1.95587748289 -1.33157595992 --1.93861797452 -1.33158904314 --1.91940954328 -1.33157414198 --1.90019950271 -1.33154764772 --1.88293987513 -1.33152425289 --1.86568087339 -1.33150401712 --1.84842213988 -1.33148685098 --1.83116397262 -1.33147290349 --1.81390589476 -1.33146202564 --1.79664823413 -1.33145430684 --1.7793905735 -1.33144968748 --1.7621332407 -1.33144822716 --1.74487578869 -1.33144986629 --1.72761851549 -1.33145466447 --1.71036100388 -1.33146265149 --1.69310355187 -1.33147373795 --1.67584571243 -1.33148795366 --1.65858781338 -1.33150529861 --1.64132940769 -1.33152571321 --1.62407082319 -1.33154925704 --1.60681164265 -1.33157595992 --1.58955213427 -1.33158901334 --1.57034370303 -1.33157408237 --1.55113366246 -1.33154764772 --1.53387400508 -1.3315242827 --1.51661500335 -1.33150404692 --1.49935626984 -1.33148688078 --1.48209810257 -1.33147290349 --1.46484005451 -1.33146205544 --1.44758242369 -1.33145430684 --1.43032479286 -1.33144965768 --1.41306746006 -1.33144822716 --1.39580994844 -1.33144986629 --1.37855264544 -1.33145466447 --1.36129513383 -1.33146265149 --1.34403765202 -1.33147373795 --1.32677984238 -1.33148792386 --1.30952197313 -1.33150526881 --1.29226356745 -1.33152571321 --1.27500498295 -1.33154925704 --1.2577457726 -1.33157595992 --1.24048626423 -1.33158904314 --1.22127786279 -1.33157414198 --1.20206782222 -1.33154767752 --1.18480816484 -1.3315242827 --1.1675491631 -1.33150404692 --1.15029042959 -1.33148688078 --1.13303223252 -1.33147290349 --1.11577418447 -1.33146202564 --1.09851655364 -1.33145430684 --1.08125889301 -1.33144971728 --1.06400156021 -1.33144825697 --1.0467441082 -1.33144986629 --1.029486835 -1.33145469427 --1.01222932339 -1.33146268129 --0.994971856476 -1.33147370815 --0.977713987231 -1.33148789406 --0.960456073284 -1.33150523901 --0.9431976825 -1.3315256834 --0.925939112901 -1.33154925704 --0.908679932356 -1.33157595992 --0.891420438886 -1.33158904314 --0.872212007642 -1.33157408237 --0.85300193727 -1.33154761792 --0.835742279888 -1.33152425289 --0.818483293057 -1.33150401711 --0.801224574447 -1.33148688078 --0.78396640718 -1.33147290349 --0.766708344221 -1.33146199584 --0.749450683594 -1.33145427704 --0.732193022966 -1.33144971728 --0.714935705066 -1.33144825697 --0.697678253055 -1.33144989609 --0.680420964956 -1.33145472407 --0.663163438439 -1.33146268129 --0.645905986428 -1.33147373795 --0.628648161889 -1.33148792386 --0.611390262842 -1.33150526881 --0.594131857157 -1.33152571321 --0.576873272657 -1.33154925704 --0.55961407721 -1.33157595992 --0.542354568839 -1.33158901334 --0.523146152496 -1.33157411218 --0.503936097026 -1.33154767752 --0.486676439643 -1.3315242827 --0.469417460263 -1.33150404692 --0.452158726752 -1.33148688078 --0.434900544584 -1.33147290349 --0.417642489076 -1.33146202564 --0.4003848508 -1.33145427704 --0.383127190173 -1.33144968748 --0.36586984992 -1.33144825697 --0.348612405359 -1.33144989609 --0.331355124712 -1.33145472407 --0.314097598195 -1.33146268129 --0.296840138733 -1.33147373795 --0.279582306743 -1.33148792386 --0.262324392796 -1.33150526881 --0.245065998286 -1.33152571321 --0.227807428688 -1.33154925704 --0.210548233241 -1.33157595992 --0.193288728595 -1.33158904314 --0.174080308527 -1.34872329235 --0.154868211597 -1.34869670868 --0.137608550489 -1.34867322445 --0.120349556208 -1.34865286946 --0.103090813384 -1.34863564372 --0.0858326144516 -1.34862160682 --0.0685745412484 -1.34861066937 --0.0513168927282 -1.34860292077 --0.0340592437424 -1.34859830141 --0.016801900696 -1.34859684109 -0.00045556598343 -1.34859851002 -0.0177128526848 -1.3486033082 -0.0349703864195 -1.34861129523 -0.0522278593853 -1.34862241149 -0.0694857025519 -1.348636657 -0.0867436137051 -1.34865409136 -0.104002017528 -1.34867465496 -0.121260607615 -1.348698318 -0.13851980865 -1.34872514009 -0.155779324472 -1.34873831272 -0.174987670034 -1.34872329235 -0.194197636098 -1.34869670868 -0.211457297206 -1.34867322445 -0.228716287762 -1.34865289926 -0.245975039899 -1.34863567353 -0.263233236969 -1.34862163663 -0.280491307378 -1.34861069917 -0.297748960555 -1.34860289097 -0.31500659883 -1.34859827161 -0.332263931632 -1.34859684109 -0.349521413446 -1.34859848022 -0.366778701544 -1.3486033082 -0.38403622061 -1.34861129523 -0.401293702424 -1.34862241149 -0.418551556766 -1.3486367166 -0.435809470713 -1.34865412116 -0.453067868948 -1.34867465496 -0.470326453447 -1.34869834781 -0.487585656345 -1.3487251699 -0.504845172167 -1.34873831272 -0.524053528905 -1.34872329235 -0.543263480068 -1.34869670868 -0.56052313745 -1.34867322445 -0.577782139182 -1.34865286946 -0.595040872693 -1.34863564372 -0.612299054861 -1.34862160682 -0.629557132721 -1.34861066937 -0.646814793348 -1.34860289097 -0.664072439075 -1.34859827161 -0.681329786778 -1.34859684109 -0.698587268591 -1.34859851002 -0.71584457159 -1.348603338 -0.733102083206 -1.34861129523 -0.750359550118 -1.34862241149 -0.767617419362 -1.3486367166 -0.784875333309 -1.34865415096 -0.802133709192 -1.34867468476 -0.81939227879 -1.34869834781 -0.836651504039 -1.3487251699 -0.853911027312 -1.34873831272 -0.873119354248 -1.34872326255 -0.892329335213 -1.34869664907 -0.909589007497 -1.34867316484 -0.926847979427 -1.34865283966 -0.944106727839 -1.34863564372 -0.961364939809 -1.34862166643 -0.978623002768 -1.34861075878 -0.995880678299 -1.34860298038 -1.01313832403 -1.34859833121 -1.03039562702 -1.34859684109 -1.04765310884 -1.34859848022 -1.06491038203 -1.3486033082 -1.08216792345 -1.34861129523 -1.09942543507 -1.34862241149 -1.11668327451 -1.3486366868 -1.13394120336 -1.34865409136 -1.15119960904 -1.34867465496 -1.16845816374 -1.34869834781 -1.18571737408 -1.3487251699 -1.20297688246 -1.34873831272 -1.22218522429 -1.34872329235 -1.24139517546 -1.34869667888 -1.25865483284 -1.34867319465 -1.27591383457 -1.34865286946 -1.29317256808 -1.34863564372 -1.31043079495 -1.34862160682 -1.32768887281 -1.34861066937 -1.34494650364 -1.34860292077 -1.36220416427 -1.34859830141 -1.37946152687 -1.34859687089 -1.39671897888 -1.34859853983 -1.41397625208 -1.3486033082 -1.43123376369 -1.34861126542 -1.44849121571 -1.34862241149 -1.46574908495 -1.3486367166 -1.4830070138 -1.34865415096 -1.50026541948 -1.34867465496 -1.51752400398 -1.348698318 -1.53478318453 -1.3487251699 -1.5520427227 -1.34873828292 -1.57125106454 -1.34872326255 -1.5904610157 -1.34869670868 -1.60772070289 -1.34867322445 -1.62497970462 -1.34865292907 -1.64223843813 -1.34863570333 -1.6594966352 -1.34862163663 -1.67675471306 -1.34861072898 -1.69401237368 -1.34860295058 -1.71127003431 -1.34859830141 -1.72852736711 -1.34859681129 -1.74578481913 -1.34859845042 -1.76304212212 -1.3486032784 -1.78029966354 -1.34861126542 -1.79755711555 -1.34862241149 -1.814814955 -1.3486366868 -1.83207288384 -1.34865412116 -1.84933128953 -1.34867468476 -1.86658987403 -1.34869834781 -1.88384908438 -1.3487251699 -1.90110856295 -1.34873831272 -1.92031690478 -1.34872329235 -1.93952691555 -1.34869670868 -1.95678657294 -1.34867322445 -1.97404551506 -1.34865286946 -1.99130427837 -1.34863564372 -2.00856250524 -1.34862160682 -2.0258205533 -1.34861066937 -2.04307818413 -1.34860292077 -2.06033587455 -1.34859830141 -2.07759320736 -1.34859684109 -2.09485065937 -1.34859851002 -2.11210793257 -1.348603338 -2.12936544418 -1.34861129523 -2.1466229558 -1.34862241149 -2.16388082504 -1.3486366868 -2.18113875389 -1.34865409136 -2.19839715958 -1.34867465496 -2.21565574408 -1.34869834781 -2.23291492462 -1.3487251699 -2.25017440319 -1.34873831272 -2.26938277483 -1.34872326255 -2.2885927558 -1.34869667888 -2.30585235358 -1.34867319465 -2.32311135531 -1.34865283966 -2.34037011862 -1.34863564372 -2.35762834549 -1.34862160682 -2.37488639355 -1.34861066937 -2.39214402437 -1.34860289097 -2.4094017148 -1.34859827161 -2.4266590476 -1.34859684109 -2.44391649962 -1.34859853983 -2.46117383242 -1.34860336781 -2.47843140364 -1.34861129523 -2.49568885565 -1.34862241149 -2.51294666528 -1.3486367166 -2.53020453453 -1.34865415096 -2.54746294021 -1.34867468476 -2.56472158432 -1.34869834781 -2.58198082447 -1.3487251699 -2.59924030304 -1.34873828292 -2.61844861507 -1.34872326255 -2.63765853644 -1.34869670868 -2.65491825342 -1.34867322445 -2.67217725515 -1.34865286946 -2.68943595886 -1.34863564372 -2.70669418573 -1.34862163663 -2.7239522934 -1.34861069917 -2.74120992422 -1.34860289097 -2.75846749544 -1.34859827161 -2.77572482824 -1.34859684109 -2.79298233986 -1.34859848022 -2.81023967266 -1.3486033082 -2.82749718428 -1.34861129523 -2.84475463629 -1.34862241149 -2.86201250553 -1.3486366868 -2.87927043438 -1.34865412116 -2.89652884007 -1.34867468476 -2.91378742457 -1.34869834781 -2.93104660511 -1.3487251699 -2.94830608368 -1.34873831272 -2.96751439571 -1.34872329235 -2.98672443628 -1.34869670868 -3.00398415327 -1.34867322445 -3.02124315501 -1.34865286946 -3.03850191832 -1.34863564372 -3.05576008558 -1.34862160682 -3.07301813364 -1.34861066937 -3.09027576446 -1.34860292077 -3.10753339529 -1.34859830141 -3.12479072809 -1.34859684109 --3.14113709529 -1.34859851002 --3.12387979031 -1.3486033082 --3.10662227869 -1.34861129523 --3.08936482668 -1.34862241149 --3.07210695744 -1.348636657 --3.05484902859 -1.34865409136 --3.0375906229 -1.34867465496 --3.0203320384 -1.348698318 --3.00307285786 -1.34872514009 --2.98581337929 -1.34873831272 --2.96660506725 -1.34872329235 --2.94739502668 -1.34869670868 --2.93013530969 -1.34867322445 --2.91287630796 -1.34865289926 --2.89561754465 -1.34863567353 --2.87835937738 -1.34862163663 --2.86110132933 -1.34861069917 --2.8438436985 -1.34860289097 --2.82658606768 -1.34859827161 --2.80932873487 -1.34859684109 --2.79207122326 -1.34859848022 --2.77481395006 -1.3486033082 --2.75755643845 -1.34861129523 --2.74029892683 -1.34862241149 --2.72304111719 -1.3486367166 --2.70578318834 -1.34865412116 --2.68852478266 -1.34867465496 --2.67126619816 -1.34869834781 --2.65400695801 -1.3487251699 --2.63674747944 -1.34873831272 --2.6175391078 -1.34872329235 --2.59832912683 -1.34869670868 --2.58106952906 -1.34867322445 --2.56381052732 -1.34865286946 --2.54655176401 -1.34863564372 --2.52929359675 -1.34862160682 --2.51203554869 -1.34861066937 --2.49477785826 -1.34860289097 --2.47752016783 -1.34859827161 --2.46026283502 -1.34859684109 --2.44300538301 -1.34859851002 --2.42574810982 -1.348603338 --2.4084905982 -1.34861129523 --2.39123308659 -1.34862241149 --2.37397521734 -1.3486367166 --2.3567173481 -1.34865415096 --2.33945894241 -1.34867468476 --2.32220035791 -1.34869834781 --2.30494117737 -1.3487251699 --2.28768163919 -1.34873831272 --2.26847326755 -1.34872326255 --2.24926334619 -1.34869664907 --2.23200368881 -1.34867316484 --2.21474468708 -1.34865283966 --2.19748598337 -1.34863564372 --2.1802277565 -1.34862166643 --2.16296964884 -1.34861075878 --2.14571201802 -1.34860298038 --2.12845438719 -1.34859833121 --2.11119705439 -1.34859684109 --2.09393960237 -1.34859848022 --2.07668226957 -1.3486033082 --2.05942469835 -1.34861129523 --2.04216724634 -1.34862241149 --2.0249093771 -1.3486366868 --2.00765147805 -1.34865409136 --1.99039310217 -1.34867465496 --1.97313451767 -1.34869834781 --1.95587530732 -1.3487251699 --1.93861576915 -1.34873831272 --1.91940739751 -1.34872329235 --1.90019744635 -1.34869667888 --1.88293781877 -1.34867319465 --1.86567881703 -1.34865286946 --1.84842005372 -1.34863564372 --1.83116185665 -1.34862160682 --1.8139038086 -1.34861066937 --1.79664614797 -1.34860292077 --1.77938848734 -1.34859830141 --1.76213115454 -1.34859687089 --1.74487367272 -1.34859853983 --1.72761636972 -1.3486033082 --1.71035885811 -1.34861126542 --1.6931014061 -1.34862241149 --1.67584353685 -1.3486367166 --1.658585608 -1.34865415096 --1.64132720232 -1.34867465496 --1.62406861782 -1.348698318 --1.60680943727 -1.3487251699 --1.5895499289 -1.34873828292 --1.57034158707 -1.34872326255 --1.55113160611 -1.34869670868 --1.53387194872 -1.34867322445 --1.51661294699 -1.34865292907 --1.49935418367 -1.34863570333 --1.48209601641 -1.34862163663 --1.46483793855 -1.34861072898 --1.44758027792 -1.34860295058 --1.4303226471 -1.34859830141 --1.41306531429 -1.34859681129 --1.39580783248 -1.34859845042 --1.37855052948 -1.3486032784 --1.36129298806 -1.34861126542 --1.34403550625 -1.34862241149 --1.32677769661 -1.3486366868 --1.30951982736 -1.34865412116 --1.29226142168 -1.34867468476 --1.27500283718 -1.34869834781 --1.25774359703 -1.3487251699 --1.24048405886 -1.34873831272 --1.22127571702 -1.34872329235 --1.20206576586 -1.34869670868 --1.18480610848 -1.34867322445 --1.16754710674 -1.34865286946 --1.15028840303 -1.34863564372 --1.13303017616 -1.34862160682 --1.1157720983 -1.34861066937 --1.09851446748 -1.34860292077 --1.08125680685 -1.34859830141 --1.06399947405 -1.34859684109 --1.04674199224 -1.34859851002 --1.02948468924 -1.348603338 --1.01222717762 -1.34861129523 --0.994969695807 -1.34862241149 --0.977711826563 -1.3486366868 --0.960453927517 -1.34865409136 --0.943195521832 -1.34867465496 --0.925936937332 -1.34869834781 --0.908677756787 -1.3487251699 --0.891418263316 -1.34873831272 --0.872209891677 -1.34872326255 --0.852999895812 -1.34869667888 --0.835740238428 -1.34867319465 --0.818481236696 -1.34865283966 --0.801222503185 -1.34863564372 --0.783964306116 -1.34862160682 --0.766706243158 -1.34861066937 --0.749448612332 -1.34860289097 --0.732190951705 -1.34859827161 --0.714933589101 -1.34859684109 --0.697676122189 -1.34859853983 --0.680418848991 -1.34860336781 --0.663161322474 -1.34861129523 --0.645903855562 -1.34862241149 --0.62864600122 -1.3486367166 --0.611388087273 -1.34865415096 --0.594129681587 -1.34867468476 --0.576871082187 -1.34869834781 --0.559611871839 -1.3487251699 --0.542352363467 -1.34873828292 --0.52314402163 -1.34872326255 --0.503934055567 -1.34869670868 --0.486674398184 -1.34867322445 --0.469415403903 -1.34865286946 --0.45215665549 -1.34863564372 --0.434898458421 -1.34862163663 --0.417640395462 -1.34861069917 --0.400382749736 -1.34860289097 --0.383125089109 -1.34859827161 --0.365867748856 -1.34859684109 --0.348610289395 -1.34859848022 --0.331352993846 -1.3486033082 --0.314095467329 -1.34861129523 --0.296837992966 -1.34862241149 --0.279580146074 -1.3486366868 --0.262322232127 -1.34865412116 --0.245063826442 -1.34867468476 --0.227805245668 -1.34869834781 --0.210546046495 -1.3487251699 --0.193286530673 -1.34873831272 --0.174078177661 -1.36584368348 --0.15486618504 -1.3658169806 --0.137606520206 -1.36579337716 --0.120347516611 -1.36577296257 --0.103088766337 -1.36575570703 --0.0858305618167 -1.36574158072 --0.0685724820942 -1.36573058367 --0.0513148261234 -1.36572280526 --0.0340571678244 -1.3657181561 --0.0167998147663 -1.36571669579 -0.00045766076073 -1.36571839452 -0.0177149574738 -1.36572322249 -0.034972500056 -1.36573123932 -0.0522299809381 -1.36574241519 -0.0694878315553 -1.3657567203 -0.086745750159 -1.36577421427 -0.104004163295 -1.36579486728 -0.121262762695 -1.36581864953 -0.138521973044 -1.36584559083 -0.155781492591 -1.36585879326 -0.174989763648 -1.36584368348 -0.194199658931 -1.3658169806 -0.211459327489 -1.36579343676 -0.228718325496 -1.36577305198 -0.245977081358 -1.36575570703 -0.263235293329 -1.36574158072 -0.280493378639 -1.36573061347 -0.297751039267 -1.36572277546 -0.315008684993 -1.3657181263 -0.332266032696 -1.36571666598 -0.349523514509 -1.36571833491 -0.366780802608 -1.36572319269 -0.384038344026 -1.36573120952 -0.40129584074 -1.36574238539 -0.418553695083 -1.36575675011 -0.43581161648 -1.36577424407 -0.453070022166 -1.36579486728 -0.470328614116 -1.36581864953 -0.487587831915 -1.36584559083 -0.504847332836 -1.36585879326 -0.524055615067 -1.36584368348 -0.543265521526 -1.3658169806 -0.560525193811 -1.36579340696 -0.577784195542 -1.36577299237 -0.595042914152 -1.36575570703 -0.612301111221 -1.36574158072 -0.629559203982 -1.36573058367 -0.64681686461 -1.36572280526 -0.664074510336 -1.3657181561 -0.681331858039 -1.36571669579 -0.698589369655 -1.36571836472 -0.715846687555 -1.36572319269 -0.733104214072 -1.36573120952 -0.750361680984 -1.36574238539 -0.767619535327 -1.36575675011 -0.784877464175 -1.36577424407 -0.80213585496 -1.36579486728 -0.819394439459 -1.36581864953 -0.836653664708 -1.36584559083 -0.853913187981 -1.36585879326 -0.873121455312 -1.36584368348 -0.89233134687 -1.3658169806 -0.909591004253 -1.36579340696 -0.926850005984 -1.36577299237 -0.944108769297 -1.36575570703 -0.961366981268 -1.36574161053 -0.978625059128 -1.36573061347 -0.995882719757 -1.36572280526 -1.01314038038 -1.3657181561 -1.03039774299 -1.36571666598 -1.0476552248 -1.36571833491 -1.06491249799 -1.36572319269 -1.08217003941 -1.36573120952 -1.09942755103 -1.36574238539 -1.11668542027 -1.3657567203 -1.13394331932 -1.36577421427 -1.151201725 -1.36579486728 -1.16846033931 -1.36581864953 -1.18571954965 -1.36584559083 -1.20297902822 -1.36585879326 -1.22218731046 -1.36584368348 -1.24139720201 -1.3658169806 -1.2586568594 -1.36579340696 -1.27591586113 -1.36577299237 -1.29317462444 -1.36575570703 -1.31043285131 -1.36574158072 -1.32769089937 -1.36573058367 -1.34494856 -1.36572280526 -1.36220625043 -1.3657181263 -1.37946361303 -1.36571669579 -1.39672106504 -1.36571842432 -1.41397833824 -1.36572322249 -1.43123587966 -1.36573120952 -1.44849336147 -1.36574238539 -1.46575123072 -1.36575675011 -1.48300915956 -1.36577424407 -1.50026756525 -1.36579483748 -1.51752614975 -1.36581861972 -1.5347853601 -1.36584559083 -1.55204489827 -1.36585879326 -1.5712531507 -1.36584374309 -1.59046304226 -1.3658170402 -1.60772272945 -1.36579337716 -1.62498173118 -1.36577299237 -1.64224046469 -1.36575573683 -1.65949869156 -1.36574161053 -1.67675679922 -1.36573061347 -1.69401443004 -1.36572283507 -1.71127209067 -1.3657181859 -1.72852945328 -1.36571666598 -1.74578690529 -1.36571833491 -1.76304420829 -1.36572319269 -1.7803017497 -1.36573120952 -1.79755923152 -1.36574238539 -1.81481710076 -1.3657567203 -1.83207502961 -1.36577421427 -1.8493334651 -1.36579486728 -1.8665920496 -1.36581864953 -1.88385123014 -1.36584559083 -1.90111073852 -1.36585879326 -1.92031902075 -1.36584368348 -1.93952891231 -1.3658169806 -1.95678856969 -1.36579340696 -1.97404757142 -1.36577299237 -1.99130633473 -1.36575567723 -2.0085645318 -1.36574155092 -2.02582257986 -1.36573058367 -2.04308027029 -1.36572280526 -2.06033796072 -1.3657181561 -2.07759529352 -1.36571669579 -2.09485274553 -1.36571839452 -2.11211001873 -1.36572322249 -2.12936758995 -1.36573120952 -2.14662510156 -1.36574238539 -2.16388297081 -1.3657567203 -2.18114089966 -1.36577421427 -2.19839930535 -1.36579486728 -2.21565788985 -1.36581864953 -2.23291707039 -1.36584559083 -2.25017654896 -1.36585876346 -2.26938486099 -1.36584365368 -2.28859478236 -1.3658169806 -2.30585438013 -1.36579340696 -2.32311338186 -1.36577299237 -2.34037214517 -1.36575570703 -2.35763037205 -1.36574161053 -2.37488842011 -1.36573061347 -2.39214605093 -1.36572277546 -2.40940374136 -1.3657181263 -2.42666107416 -1.36571669579 -2.44391858578 -1.36571839452 -2.46117591858 -1.36572322249 -2.47843343019 -1.36573120952 -2.4956908822 -1.36574238539 -2.51294875145 -1.36575675011 -2.5302066803 -1.36577424407 -2.54746508599 -1.36579486728 -2.56472373009 -1.36581864953 -2.58198297024 -1.36584559083 -2.59924244881 -1.36585879326 -2.61845070124 -1.36584368348 -2.63766056299 -1.3658169806 -2.65492027998 -1.36579340696 -2.67217928171 -1.36577299237 -2.68943804503 -1.36575570703 -2.7066963315 -1.36574164033 -2.72395437956 -1.36573064327 -2.74121195078 -1.36572277546 -2.7584695816 -1.3657181263 -2.77572697401 -1.36571666598 -2.79298448563 -1.36571833491 -2.81024175882 -1.36572319269 -2.82749927044 -1.36573120952 -2.84475678206 -1.36574238539 -2.8620146513 -1.3657567203 -2.87927258015 -1.36577421427 -2.89653098583 -1.36579486728 -2.91378957033 -1.36581864953 -2.93104875088 -1.36584559083 -2.94830828905 -1.36585879326 -2.96751654148 -1.36584368348 -2.98672646284 -1.3658169806 -3.00398617983 -1.36579337716 -3.02124518156 -1.36577296257 -3.03850394487 -1.36575570703 -3.05576211214 -1.36574158072 -3.0730201602 -1.36573058367 -3.09027785063 -1.36572280526 -3.10753554106 -1.3657181561 -3.12479287386 -1.36571669579 --3.14113494952 -1.36571839452 --3.12387770415 -1.36572322249 --3.10662019253 -1.36573123932 --3.08936268091 -1.36574241519 --3.07210481167 -1.3657567203 --3.05484688282 -1.36577421427 --3.03758847714 -1.36579486728 --3.02032989263 -1.36581864953 --3.00307071209 -1.36584559083 --2.98581117391 -1.36585879326 --2.96660292148 -1.36584368348 --2.94739300012 -1.3658169806 --2.93013328314 -1.36579343676 --2.91287428141 -1.36577305198 --2.89561551809 -1.36575570703 --2.87835735083 -1.36574158072 --2.86109930277 -1.36573061347 --2.84384161234 -1.36572277546 --2.82658392191 -1.3657181263 --2.8093265891 -1.36571666598 --2.79206913709 -1.36571833491 --2.7748118639 -1.36572319269 --2.75755429268 -1.36573120952 --2.74029678107 -1.36574238539 --2.72303897142 -1.36575675011 --2.70578104257 -1.36577424407 --2.68852263689 -1.36579486728 --2.67126405239 -1.36581864953 --2.65400481224 -1.36584559083 --2.63674533367 -1.36585879326 --2.61753702164 -1.36584368348 --2.59832710028 -1.3658169806 --2.5810675025 -1.36579340696 --2.56380850077 -1.36577299237 --2.54654973745 -1.36575570703 --2.52929157019 -1.36574158072 --2.51203352213 -1.36573058367 --2.4947758317 -1.36572280526 --2.47751814127 -1.3657181561 --2.46026080847 -1.36571669579 --2.44300329685 -1.36571836472 --2.42574596405 -1.36572319269 --2.40848845243 -1.36573120952 --2.39123100042 -1.36574238539 --2.37397313118 -1.36575675011 --2.35671520233 -1.36577424407 --2.33945679664 -1.36579486728 --2.32219821214 -1.36581864953 --2.3049390316 -1.36584559083 --2.28767949343 -1.36585879326 --2.26847118139 -1.36584368348 --2.24926131963 -1.3658169806 --2.23200172186 -1.36579340696 --2.21474272013 -1.36577299237 --2.19748395682 -1.36575570703 --2.18022567034 -1.36574161053 --2.16296750307 -1.36573061347 --2.14570987225 -1.36572280526 --2.12845224142 -1.3657181561 --2.11119490862 -1.36571666598 --2.0939374566 -1.36571833491 --2.07668018341 -1.36572319269 --2.05942261219 -1.36573120952 --2.04216510058 -1.36574238539 --2.02490723133 -1.3657567203 --2.00764933229 -1.36577421427 --1.9903909564 -1.36579486728 --1.9731323421 -1.36581864953 --1.95587310195 -1.36584559083 --1.93861359358 -1.36585879326 --1.91940534115 -1.36584368348 --1.90019544959 -1.3658169806 --1.88293576241 -1.36579340696 --1.86567676067 -1.36577299237 --1.84841802716 -1.36575570703 --1.83115980029 -1.36574158072 --1.81390172243 -1.36573058367 --1.79664409161 -1.36572280526 --1.77938643098 -1.3657181263 --1.76212906838 -1.36571669579 --1.74487158656 -1.36571842432 --1.72761428356 -1.36572322249 --1.71035674214 -1.36573120952 --1.69309926033 -1.36574238539 --1.67584142089 -1.36575675011 --1.65858349204 -1.36577424407 --1.64132505655 -1.36579483748 --1.62406647205 -1.36581861972 --1.60680729151 -1.36584559083 --1.58954775333 -1.36585879326 --1.5703394711 -1.36584374309 --1.55112957954 -1.3658170402 --1.53386992216 -1.36579337716 --1.51661092043 -1.36577299237 --1.49935215712 -1.36575573683 --1.48209398985 -1.36574161053 --1.46483588219 -1.36573061347 --1.44757819176 -1.36572283507 --1.43032056093 -1.3657181859 --1.41306322813 -1.36571666598 --1.39580574632 -1.36571833491 --1.37854844332 -1.36572319269 --1.3612909019 -1.36573120952 --1.34403342008 -1.36574238539 --1.32677558064 -1.3657567203 --1.3095176816 -1.36577421427 --1.29225927591 -1.36579486728 --1.27500066161 -1.36581864953 --1.25774142146 -1.36584559083 --1.24048191309 -1.36585879326 --1.22127363086 -1.36584368348 --1.2020637393 -1.3658169806 --1.18480408192 -1.36579340696 --1.16754508019 -1.36577299237 --1.15028634667 -1.36575567723 --1.1330281198 -1.36574155092 --1.11577004194 -1.36573058367 --1.09851241112 -1.36572280526 --1.08125475049 -1.3657181561 --1.06399738789 -1.36571669579 --1.04673990608 -1.36571839452 --1.02948260307 -1.36572322249 --1.01222506166 -1.36573120952 --0.994967564941 -1.36574238539 --0.977709695697 -1.3657567203 --0.96045178175 -1.36577421427 --0.943193376064 -1.36579486728 --0.925934791565 -1.36581864953 --0.908675596118 -1.36584559083 --0.891416072846 -1.36585876346 --0.872207790613 -1.36584365368 --0.852997884155 -1.3658169806 --0.83573821187 -1.36579340696 --0.818479210139 -1.36577299237 --0.801220461726 -1.36575570703 --0.783962249756 -1.36574161053 --0.766704186797 -1.36573061347 --0.749446555972 -1.36572277546 --0.732188880443 -1.3657181263 --0.714931502938 -1.36571669579 --0.697674021125 -1.36571839452 --0.680416733027 -1.36572322249 --0.663159221411 -1.36573120952 --0.645901754499 -1.36574238539 --0.628643870354 -1.36575675011 --0.611385941506 -1.36577424407 --0.59412753582 -1.36579486728 --0.576868936419 -1.36581864953 --0.559609726072 -1.36584559083 --0.542350202799 -1.36585879326 --0.523141920566 -1.36584368348 --0.503932029009 -1.3658169806 --0.486672371626 -1.36579340696 --0.469413362443 -1.36577299237 --0.45215460658 -1.36575570703 --0.434896416962 -1.36574164033 --0.417638346553 -1.36573064327 --0.400380685925 -1.36572277546 --0.383123017848 -1.3657181263 --0.365865670145 -1.36571666598 --0.348608195782 -1.36571833491 --0.331350892782 -1.36572319269 --0.314093351364 -1.36573120952 --0.2968358621 -1.36574238539 --0.279578015208 -1.3657567203 --0.262320101261 -1.36577421427 --0.2450616844 -1.36579486728 --0.227803088725 -1.36581864953 --0.210543874651 -1.36584559083 --0.193284355104 -1.36585879326 --0.174076080322 -1.38293898106 --0.15486419946 -1.38291215896 --0.13760452345 -1.38288846612 --0.12034550868 -1.38286793232 --0.103086749092 -1.38285058737 --0.0858285389841 -1.38283643127 --0.0685704508796 -1.3828253746 --0.051312783733 -1.38281750679 --0.034055117052 -1.38281282783 --0.0167977560777 -1.38281136752 -0.000459727132692 -1.38281306625 -0.017717031762 -1.38281795383 -0.034974584356 -1.38282600045 -0.0522320726886 -1.38283720613 -0.0694899316877 -1.38285163045 -0.086747860536 -1.38286924362 -0.104006282985 -1.38288995624 -0.121264891699 -1.38291382789 -0.13852411136 -1.38294091821 -0.155783638358 -1.38295418024 -0.174991831184 -1.38293898106 -0.194201648236 -1.38291215896 -0.21146132797 -1.38288849592 -0.228720333427 -1.38286796212 -0.245979093015 -1.38285055757 -0.263237319887 -1.38283640146 -0.280495412648 -1.38282540441 -0.297753073275 -1.38281756639 -0.315010726452 -1.38281288743 -0.332268096507 -1.38281139732 -0.349525585771 -1.38281306625 -0.36678288132 -1.38281795383 -0.384040437639 -1.38282600045 -0.401297934353 -1.38283723593 -0.418555796146 -1.38285166025 -0.435813724995 -1.38286921382 -0.453072138131 -1.38288992643 -0.470330737531 -1.38291382789 -0.48758996278 -1.38294088841 -0.504849471152 -1.38295415044 -0.524057671428 -1.38293898106 -0.543267518282 -1.38291215896 -0.560527205467 -1.38288849592 -0.577786192298 -1.38286799192 -0.59504494071 -1.38285061717 -0.612303152681 -1.38283643127 -0.629561245442 -1.3828253746 -0.646818935871 -1.38281756639 -0.664076581597 -1.38281291723 -0.681333944201 -1.38281142712 -0.698591440916 -1.38281309605 -0.715848729015 -1.38281795383 -0.733106285334 -1.38282600045 -0.750363782048 -1.38283723593 -0.76762163639 -1.38285163045 -0.784879565239 -1.38286918402 -0.802137970925 -1.38288992643 -0.819396570325 -1.38291382789 -0.836655795574 -1.38294088841 -0.853915333748 -1.38295415044 -0.873123541474 -1.38293901086 -0.892333343625 -1.38291218877 -0.909593015909 -1.38288849592 -0.926852032542 -1.38286799192 -0.944110795855 -1.38285061717 -0.961369007826 -1.38283643127 -0.978627100587 -1.38282540441 -0.995884761217 -1.38281756639 -1.01314240694 -1.38281285763 -1.03039979935 -1.38281136752 -1.04765731096 -1.38281306625 -1.06491458416 -1.38281795383 -1.08217212558 -1.38282600045 -1.09942963719 -1.38283723593 -1.11668750643 -1.38285166025 -1.13394540548 -1.38286924362 -1.15120381117 -1.38288995624 -1.16846242547 -1.38291382789 -1.18572166562 -1.38294088841 -1.20298117399 -1.38295415044 -1.22218936682 -1.38293898106 -1.24139919877 -1.38291215896 -1.25865885616 -1.38288849592 -1.27591785789 -1.38286796212 -1.2931766212 -1.38285058737 -1.31043484807 -1.38283643127 -1.32769292593 -1.38282540441 -1.34495061636 -1.38281756639 -1.36220830679 -1.38281285763 -1.37946563959 -1.38281139732 -1.3967230916 -1.38281309605 -1.4139803946 -1.38281795383 -1.43123796582 -1.38282600045 -1.44849547744 -1.38283723593 -1.46575334668 -1.38285163045 -1.48301127553 -1.38286918402 -1.50026971102 -1.38288992643 -1.51752829552 -1.38291382789 -1.53478750587 -1.38294091821 -1.55204704404 -1.38295418024 -1.57125523686 -1.38293901086 -1.59046506882 -1.38291218877 -1.6077247262 -1.38288846612 -1.62498372793 -1.38286793232 -1.64224249124 -1.38285058737 -1.65950071811 -1.38283643127 -1.67675882578 -1.38282540441 -1.6940164566 -1.38281756639 -1.71127411723 -1.38281285763 -1.72853150964 -1.38281139732 -1.74578899145 -1.38281309605 -1.76304626465 -1.38281795383 -1.78030380607 -1.38282600045 -1.79756131768 -1.38283723593 -1.81481918692 -1.38285166025 -1.83207711577 -1.38286921382 -1.84933555126 -1.38288992643 -1.86659416557 -1.38291382789 -1.88385337591 -1.38294091821 -1.90111291409 -1.38295418024 -1.92032110691 -1.38293898106 -1.93953087926 -1.38291215896 -1.95679056645 -1.38288846612 -1.97404962778 -1.38286793232 -1.99130836129 -1.38285055757 -2.00856652856 -1.38283640146 -2.02582460642 -1.38282540441 -2.04308229685 -1.38281753659 -2.06033998728 -1.38281285763 -2.07759732008 -1.38281142712 -2.09485477209 -1.38281309605 -2.11211210489 -1.38281795383 -2.12936967611 -1.38282600045 -2.14662712812 -1.38283723593 -2.16388505697 -1.38285163045 -2.18114298582 -1.38286921382 -2.19840139151 -1.38288995624 -2.21566003561 -1.38291382789 -2.23291921616 -1.38294091821 -2.25017875433 -1.38295415044 -2.26938694715 -1.38293895125 -2.28859674931 -1.38291215896 -2.30585640669 -1.38288849592 -2.32311540842 -1.38286796212 -2.34037417174 -1.38285058737 -2.357632339 -1.38283646107 -2.37489038706 -1.38282540441 -2.39214807749 -1.38281753659 -2.40940576792 -1.38281285763 -2.42666310072 -1.38281136752 -2.44392067194 -1.38281306625 -2.46117800474 -1.38281795383 -2.47843551636 -1.38282600045 -2.49569302797 -1.38283723593 -2.51295089722 -1.38285166025 -2.53020882606 -1.38286921382 -2.54746723175 -1.38288992643 -2.56472581625 -1.38291382789 -2.5819850564 -1.38294088841 -2.59924459457 -1.38295415044 -2.6184527874 -1.38293898106 -2.63766258955 -1.38291215896 -2.65492224694 -1.38288849592 -2.67218124866 -1.38286796212 -2.68944001198 -1.38285058737 -2.70669829846 -1.38283646107 -2.72395640612 -1.38282543421 -2.74121403694 -1.38281756639 -2.75847172737 -1.38281288743 -2.77572911977 -1.38281139732 -2.79298657179 -1.38281306625 -2.81024384499 -1.38281795383 -2.82750141621 -1.38282600045 -2.84475892782 -1.38283723593 -2.86201673746 -1.38285166025 -2.87927466631 -1.38286921382 -2.89653307199 -1.38288992643 -2.91379165649 -1.38291382789 -2.93105089664 -1.38294088841 -2.94831043482 -1.38295415044 -2.96751862764 -1.38293898106 -2.98672842979 -1.38291215896 -3.00398814678 -1.38288846612 -3.02124720812 -1.38286793232 -3.03850597143 -1.38285058737 -3.0557641387 -1.38283643127 -3.07302218675 -1.3828253746 -3.09027987718 -1.38281750679 -3.10753756762 -1.38281282783 -3.12479490041 -1.38281136752 --3.14113292297 -1.38281306625 --3.12387561798 -1.38281795383 --3.10661804676 -1.38282600045 --3.08936053515 -1.38283720613 --3.07210272551 -1.38285163045 --3.05484479666 -1.38286924362 --3.03758639097 -1.38288995624 --3.02032780647 -1.38291382789 --3.00306856632 -1.38294091821 --2.98580902815 -1.38295418024 --2.96660083532 -1.38293898106 --2.94739103317 -1.38291215896 --2.93013131618 -1.38288849592 --2.91287225485 -1.38286796212 --2.89561349154 -1.38285055757 --2.87835532427 -1.38283640146 --2.86109727621 -1.38282540441 --2.84383958578 -1.38281756639 --2.82658189535 -1.38281288743 --2.80932456255 -1.38281139732 --2.79206711054 -1.38281306625 --2.77480977774 -1.38281795383 --2.75755220652 -1.38282600045 --2.74029475451 -1.38283723593 --2.72303688526 -1.38285166025 --2.70577895641 -1.38286921382 --2.68852055073 -1.38288992643 --2.67126190662 -1.38291382789 --2.65400266647 -1.38294088841 --2.6367431879 -1.38295415044 --2.61753499508 -1.38293898106 --2.59832513332 -1.38291215896 --2.58106547594 -1.38288849592 --2.56380647421 -1.38286799192 --2.5465477109 -1.38285061717 --2.52928954363 -1.38283643127 --2.51203143597 -1.3828253746 --2.49477374554 -1.38281756639 --2.47751611471 -1.38281291723 --2.4602587223 -1.38281142712 --2.44300121069 -1.38281309605 --2.42574393749 -1.38281795383 --2.40848642588 -1.38282600045 --2.39122891426 -1.38283723593 --2.37397098542 -1.38285163045 --2.35671305656 -1.38286918402 --2.33945465088 -1.38288992643 --2.32219606638 -1.38291382789 --2.30493688583 -1.38294088841 --2.28767734766 -1.38295415044 --2.26846909523 -1.38293901086 --2.24925929308 -1.38291218877 --2.2319996953 -1.38288849592 --2.21474069357 -1.38286799192 --2.19748193025 -1.38285061717 --2.18022364378 -1.38283643127 --2.16296547652 -1.38282540441 --2.14570784569 -1.38281756639 --2.12845021486 -1.38281285763 --2.11119282246 -1.38281136752 --2.09393531084 -1.38281306625 --2.07667803764 -1.38281795383 --2.05942046642 -1.38282600045 --2.04216295481 -1.38283723593 --2.02490514517 -1.38285166025 --2.00764724612 -1.38286924362 --1.99038881063 -1.38288995624 --1.97313019633 -1.38291382789 --1.95587098598 -1.38294088841 --1.93861147762 -1.38295415044 --1.91940328479 -1.38293898106 --1.90019345283 -1.38291215896 --1.88293376565 -1.38288849592 --1.86567476392 -1.38286796212 --1.8484160304 -1.38285058737 --1.83115780354 -1.38283643127 --1.81389969587 -1.38282540441 --1.79664203525 -1.38281756639 --1.77938434482 -1.38281285763 --1.76212698221 -1.38281139732 --1.7448695302 -1.38281309605 --1.7276122272 -1.38281795383 --1.71035465598 -1.38282600045 --1.69309717417 -1.38283723593 --1.67583933473 -1.38285163045 --1.65858140588 -1.38286918402 --1.64132297039 -1.38288992643 --1.62406435609 -1.38291382789 --1.60680514574 -1.38294091821 --1.58954560757 -1.38295418024 --1.57033741474 -1.38293901086 --1.55112761259 -1.38291218877 --1.53386792541 -1.38288846612 --1.51660889387 -1.38286793232 --1.49935013056 -1.38285058737 --1.48209196329 -1.38283643127 --1.46483385563 -1.38282540441 --1.4475761652 -1.38281756639 --1.43031853438 -1.38281285763 --1.41306117177 -1.38281139732 --1.39580366016 -1.38281309605 --1.37854635715 -1.38281795383 --1.36128881574 -1.38282600045 --1.34403133392 -1.38283723593 --1.32677349448 -1.38285166025 --1.30951556563 -1.38286921382 --1.29225713015 -1.38288992643 --1.27499851585 -1.38291382789 --1.2577393055 -1.38294091821 --1.24047979713 -1.38295418024 --1.2212715745 -1.38293898106 --1.20206174255 -1.38291215896 --1.18480208516 -1.38288846612 --1.16754308343 -1.38286793232 --1.15028432011 -1.38285055757 --1.13302609324 -1.38283640146 --1.11576801539 -1.38282540441 --1.09851035476 -1.38281753659 --1.08125266433 -1.38281285763 --1.06399530172 -1.38281142712 --1.04673781991 -1.38281309605 --1.02948051691 -1.38281795383 --1.01222297549 -1.38282600045 --0.994965478779 -1.38283723593 --0.977707609534 -1.38285163045 --0.960449680686 -1.38286921382 --0.9431912601 -1.38288995624 --0.925932660699 -1.38291382789 --0.90867343545 -1.38294091821 --0.891413897276 -1.38295415044 --0.872205719352 -1.38293895125 --0.8529959023 -1.38291215896 --0.835736215115 -1.38288849592 --0.818477198482 -1.38286796212 --0.80121845007 -1.38285058737 --0.783960253 -1.38283646107 --0.76670217514 -1.38282540441 --0.749444514513 -1.38281753659 --0.732186824083 -1.38281285763 --0.714929461479 -1.38281136752 --0.697671979665 -1.38281306625 --0.680414661765 -1.38281795383 --0.663157120347 -1.38282600045 --0.645899638534 -1.38283723593 --0.628641754389 -1.38285166025 --0.61138382554 -1.38286921382 --0.594125419855 -1.38288992643 --0.576866820454 -1.38291382789 --0.559607595205 -1.38294088841 --0.542348057032 -1.38295415044 --0.523139849305 -1.38293898106 --0.503930032254 -1.38291215896 --0.486670374871 -1.38288849592 --0.469411358238 -1.38286796212 --0.452152602375 -1.38285058737 --0.434894405305 -1.38283646107 --0.417636319995 -1.38282543421 --0.400378644466 -1.38281756639 --0.383120961487 -1.38281288743 --0.365863598883 -1.38281139732 --0.34860612452 -1.38281306625 --0.331348828971 -1.38281795383 --0.314091265201 -1.38282600045 --0.296833761036 -1.38283723593 --0.279575906694 -1.38285166025 --0.262317985297 -1.38286921382 --0.245059568435 -1.38288992643 --0.227800961584 -1.38291382789 --0.21054174006 -1.38294088841 --0.193282213062 -1.38295415044 --0.174074016512 -1.40005147457 --0.154860433191 -1.40002453327 --0.137600738555 -1.40000072122 --0.120341708884 -1.39998006821 --0.103082930669 -1.39996266365 --0.0858247037977 -1.39994847774 --0.0685665970668 -1.39993736148 --0.051308915019 -1.39992949366 --0.0340512352995 -1.3999247849 --0.0167938573286 -1.39992323518 -0.00046364287846 -1.39992493391 -0.0177209626418 -1.3999298811 -0.0349785308354 -1.39993795753 -0.0522360373288 -1.3999492228 -0.069493914023 -1.39996370673 -0.0867518577725 -1.39998140931 -0.104010295123 -1.40000221133 -0.121268918738 -1.4000261724 -0.1385281533 -1.40005338192 -0.15578770265 -1.40006670356 -0.174995753914 -1.40005144477 -0.194205418229 -1.40002450347 -0.211465112865 -1.40000072122 -0.228724136948 -1.39998006821 -0.245982907713 -1.39996263385 -0.263241149485 -1.39994844794 -0.280499264598 -1.39993739128 -0.297756940127 -1.39992952347 -0.315014600754 -1.3999248147 -0.33227199316 -1.39992332459 -0.349529504776 -1.39992499351 -0.366786815226 -1.3999298811 -0.384044386446 -1.39993795753 -0.401301890612 -1.39994925261 -0.418559774756 -1.39996373653 -0.435817718506 -1.39998137951 -0.453076146543 -1.40000218153 -0.470334760845 -1.4000261724 -0.487593993545 -1.40005335212 -0.504853531718 -1.40006667376 -0.524061590433 -1.40005144477 -0.543271273374 -1.40002450347 -0.560530975461 -1.40000072122 -0.577789992094 -1.39998009801 -0.595048755407 -1.39996266365 -0.612306982279 -1.39994844794 -0.629565104842 -1.39993736148 -0.646822810173 -1.39992949367 -0.664080485702 -1.3999248147 -0.681337863207 -1.39992332459 -0.698595330119 -1.39992499351 -0.715852633119 -1.3999298811 -0.733110234142 -1.39993795753 -0.750367745757 -1.39994925261 -0.767625615 -1.39996370673 -0.784883543849 -1.3999813497 -0.802141964436 -1.40000218153 -0.81940060854 -1.4000261724 -0.836659863591 -1.40005335212 -0.853919401765 -1.40006664395 -0.873127445578 -1.40005144477 -0.89233712852 -1.40002453327 -0.909596830606 -1.40000072122 -0.926855847239 -1.39998009801 -0.944114610553 -1.39996266365 -0.961372837424 -1.39994847775 -0.978630959987 -1.39993742108 -0.995888620616 -1.39992952347 -1.01314628124 -1.3999247849 -1.03040367365 -1.39992329478 -1.04766118526 -1.39992499351 -1.06491851807 -1.3999298811 -1.08217608929 -1.39993795753 -1.0994336009 -1.39994925261 -1.11669147015 -1.39996373653 -1.13394939899 -1.39998140931 -1.15120783448 -1.40000221133 -1.16846644878 -1.4000261724 -1.18572568893 -1.40005335212 -1.20298522711 -1.40006664395 -1.22219327092 -1.40005141497 -1.24140298367 -1.40002450347 -1.25866267085 -1.40000072122 -1.27592167258 -1.39998006821 -1.2931804359 -1.39996263385 -1.31043866277 -1.39994844794 -1.32769680023 -1.39993739128 -1.34495449066 -1.39992952347 -1.36221218109 -1.3999248147 -1.37946954369 -1.39992332459 -1.39672702551 -1.39992499351 -1.41398435831 -1.3999298811 -1.43124192953 -1.39993795753 -1.44849944115 -1.39994925261 -1.46575731039 -1.39996370673 -1.48301526904 -1.3999813199 -1.50027373433 -1.40000218153 -1.51753234863 -1.4000261724 -1.53479155898 -1.40005335212 -1.55205109716 -1.40006670356 -1.57125917077 -1.40005144477 -1.59046885371 -1.40002450347 -1.6077285409 -1.40000075102 -1.62498757243 -1.39998009801 -1.64224633575 -1.39996263385 -1.65950456262 -1.39994844794 -1.67676267028 -1.39993739128 -1.69402033091 -1.39992952347 -1.71127799153 -1.3999247849 -1.72853538394 -1.39992329478 -1.74579289555 -1.39992499351 -1.76305019855 -1.3999298811 -1.78030776977 -1.39993795753 -1.79756528139 -1.39994925261 -1.81482318044 -1.39996373653 -1.83208110929 -1.39998137951 -1.84933951497 -1.40000218153 -1.86659815908 -1.4000261724 -1.88385742903 -1.40005338192 -1.901116997 -1.40006667376 -1.92032501101 -1.40005141497 -1.93953463435 -1.40002450347 -1.95679435134 -1.40000069142 -1.97405341268 -1.39998003841 -1.99131217599 -1.39996263385 -2.00857037306 -1.39994844794 -2.02582848072 -1.39993736148 -2.04308617115 -1.39992946386 -2.06034386158 -1.3999247849 -2.07760125399 -1.39992332459 -2.094858706 -1.39992499351 -2.1121160388 -1.3999298811 -2.12937361002 -1.39993795753 -2.14663106203 -1.39994925261 -2.16388899088 -1.39996370673 -2.18114691973 -1.39998137951 -2.19840532541 -1.40000221133 -2.21566396952 -1.4000261724 -2.23292320967 -1.40005338192 -2.25018280744 -1.40006667376 -2.26939088106 -1.40005141497 -2.288600564 -1.40002450347 -2.30586022139 -1.40000072122 -2.32311922312 -1.39998006821 -2.34037804604 -1.39996263385 -2.3576362133 -1.39994844794 -2.37489426136 -1.39993736148 -2.39215195179 -1.39992949367 -2.40940964222 -1.3999247849 -2.42666703463 -1.39992326498 -2.44392460585 -1.39992496371 -2.46118193865 -1.3999298811 -2.47843950987 -1.39993795753 -2.49569702148 -1.39994925261 -2.51295489073 -1.39996373653 -2.53021287918 -1.39998137951 -2.54747128487 -1.40000218153 -2.56472986937 -1.4000261724 -2.58198910952 -1.40005335212 -2.59924864769 -1.40006664395 -2.6184567213 -1.40005141497 -2.63766640425 -1.40002450347 -2.65492606163 -1.40000072122 -2.67218506336 -1.39998006821 -2.68944382667 -1.39996263385 -2.70670211315 -1.39994847775 -2.72396022081 -1.39993742108 -2.74121791125 -1.39992952347 -2.75847566128 -1.3999248147 -2.77573299408 -1.39992332459 -2.79299044609 -1.39992499351 -2.81024777889 -1.3999298811 -2.82750535011 -1.39993795753 -2.84476286173 -1.39994925261 -2.86202073097 -1.39996373653 -2.87927865982 -1.39998137951 -2.89653706551 -1.40000218153 -2.91379570961 -1.4000261724 -2.93105494976 -1.40005335212 -2.94831448793 -1.40006667376 -2.96752256155 -1.40005147457 -2.98673218489 -1.40002453327 -3.00399190188 -1.40000072122 -3.02125096321 -1.39998006821 -3.03850972652 -1.39996266365 -3.05576795339 -1.39994847774 -3.07302606106 -1.39993736148 -3.09028375149 -1.39992949366 -3.10754144192 -1.3999247849 -3.12479883432 -1.39992323518 --3.14112898906 -1.39992493391 --3.12387168408 -1.3999298811 --3.10661411285 -1.39993795753 --3.08935660124 -1.3999492228 --3.07209873199 -1.39996370673 --3.05484080315 -1.39998140931 --3.03758239746 -1.40000221133 --3.02032375336 -1.4000261724 --3.00306451321 -1.40005338192 --2.98580497503 -1.40006670356 --2.96659690141 -1.40005144477 --2.94738727808 -1.40002450347 --2.93012756109 -1.40000072122 --2.91286849975 -1.39998006821 --2.89560973644 -1.39996263385 --2.87835150957 -1.39994844794 --2.86109340191 -1.39993739128 --2.84383571148 -1.39992952347 --2.82657802105 -1.3999248147 --2.80932062864 -1.39992332459 --2.79206317663 -1.39992499351 --2.77480584383 -1.3999298811 --2.75754827261 -1.39993795753 --2.7402908206 -1.39994925261 --2.72303289175 -1.39996373653 --2.7057749629 -1.39998137951 --2.68851655722 -1.40000218153 --2.67125791311 -1.4000261724 --2.65399867296 -1.40005335212 --2.63673913479 -1.40006667376 --2.61753112078 -1.40005144477 --2.59832143784 -1.40002450347 --2.58106172085 -1.40000072122 --2.56380265951 -1.39998009801 --2.5465438962 -1.39996266365 --2.52928572893 -1.39994844794 --2.51202756167 -1.39993736148 --2.49476987123 -1.39992949367 --2.47751224041 -1.3999248147 --2.4602547884 -1.39992332459 --2.44299733639 -1.39992499351 --2.42574006319 -1.3999298811 --2.40848243237 -1.39993795753 --2.39122492075 -1.39994925261 --2.37396705151 -1.39996370673 --2.35670912266 -1.3999813497 --2.33945065737 -1.40000218153 --2.32219201326 -1.4000261724 --2.30493277311 -1.40005335212 --2.28767323494 -1.40006664395 --2.26846516132 -1.40005144477 --2.24925547838 -1.40002453327 --2.231995821 -1.40000072122 --2.21473681927 -1.39998009801 --2.19747805596 -1.39996266365 --2.18021976948 -1.39994847775 --2.16296166181 -1.39993742108 --2.14570403099 -1.39992952347 --2.12844640017 -1.3999247849 --2.11118900776 -1.39992329478 --2.09393143654 -1.39992499351 --2.07667410374 -1.3999298811 --2.05941653252 -1.39993795753 --2.0421590209 -1.39994925261 --2.02490115166 -1.39996373653 --2.00764322281 -1.39998140931 --1.99038478732 -1.40000221133 --1.97312617302 -1.4000261724 --1.95586696267 -1.40005335212 --1.9386074245 -1.40006664395 --1.91939935088 -1.40005141497 --1.90018966794 -1.40002450347 --1.88292998075 -1.40000072122 --1.86567094922 -1.39998006821 --1.84841218591 -1.39996263385 --1.83115395904 -1.39994844794 --1.81389585137 -1.39993739128 --1.79663816094 -1.39992952347 --1.77938047051 -1.3999248147 --1.76212310791 -1.39992332459 --1.7448656261 -1.39992499351 --1.72760829329 -1.3999298811 --1.71035069227 -1.39993795753 --1.69309321046 -1.39994925261 --1.67583534121 -1.39996370673 --1.65857738256 -1.3999813199 --1.64131894708 -1.40000218153 --1.62406033277 -1.4000261724 --1.60680109262 -1.40005335212 --1.58954152465 -1.40006670356 --1.57033351064 -1.40005144477 --1.5511238575 -1.40002450347 --1.53386414051 -1.40000075102 --1.51660510898 -1.39998009801 --1.49934631586 -1.39996263385 --1.48208808899 -1.39994844794 --1.46482998132 -1.39993739128 --1.4475722909 -1.39992952347 --1.43031463027 -1.3999247849 --1.41305726766 -1.39992329478 --1.39579975605 -1.39992499351 --1.37854245305 -1.3999298811 --1.36128488183 -1.39993795753 --1.34402734041 -1.39994925261 --1.32676950097 -1.39996373653 --1.30951157212 -1.39998137951 --1.29225310683 -1.40000218153 --1.27499449253 -1.4000261724 --1.25773528218 -1.40005338192 --1.24047574401 -1.40006667376 --1.2212676704 -1.40005141497 --1.20205798745 -1.40002450347 --1.18479830026 -1.40000069142 --1.16753926873 -1.39998003841 --1.15028050542 -1.39996263385 --1.13302227855 -1.39994844794 --1.11576417089 -1.39993736148 --1.09850648045 -1.39992946386 --1.08124876022 -1.3999247849 --1.06399139762 -1.39992332459 --1.0467339158 -1.39992499351 --1.029476583 -1.3999298811 --1.01221904158 -1.39993795753 --0.994961544871 -1.39994925261 --0.977703660727 -1.39996370673 --0.960445716977 -1.39998137951 --0.943187266588 -1.40000221133 --0.925928652287 -1.4000261724 --0.908669412136 -1.40005338192 --0.89140984416 -1.40006667376 --0.872201785445 -1.40005141497 --0.852992117405 -1.40002450347 --0.835732445121 -1.40000072122 --0.818473413587 -1.39998006821 --0.801214620471 -1.39996263385 --0.7839564085 -1.39994844794 --0.76669831574 -1.39993736148 --0.749440640211 -1.39992949367 --0.732182949782 -1.3999247849 --0.714925572276 -1.39992326498 --0.69766806066 -1.39992496371 --0.680410727858 -1.3999298811 --0.663153171539 -1.39993795753 --0.645895674824 -1.39994925261 --0.628637775779 -1.39996373653 --0.611379817128 -1.39998137951 --0.594121396541 -1.40000218153 --0.57686278224 -1.4000261724 --0.559603542089 -1.40005335212 --0.542343989014 -1.40006664395 --0.5231359303 -1.40005141497 --0.50392626226 -1.40002450347 --0.486666589975 -1.40000072122 --0.469407565892 -1.39998006821 --0.452148787677 -1.39996263385 --0.434890560806 -1.39994847775 --0.417632453144 -1.39993742108 --0.400374762714 -1.39992952347 --0.383117072284 -1.3999248147 --0.365859694779 -1.39992332459 --0.348602205515 -1.39992499351 --0.331344902515 -1.3999298811 --0.314087331295 -1.39993795753 --0.296829804778 -1.39994925261 --0.279571920633 -1.39996373653 --0.262313984335 -1.39998137951 --0.245055556298 -1.40000218153 --0.22779693082 -1.4000261724 --0.210537694395 -1.40005335212 --0.19327814877 -1.40006667376 --0.174070101232 -1.4172142148 --0.154856752604 -1.41718715429 --0.137597043067 -1.41716322303 --0.120338000357 -1.41714254022 --0.103079207242 -1.41712504625 --0.0858209636062 -1.41711077094 --0.0685628382489 -1.41709962487 --0.0513051413 -1.41709178686 --0.0340474476106 -1.41708707809 --0.016790052643 -1.41708549857 -0.000467464793475 -1.4170871973 -0.0177248001564 -1.41709214449 -0.0349823827855 -1.41710025072 -0.0522399079055 -1.4171115756 -0.0694978022948 -1.41712608933 -0.0867557562888 -1.41714379191 -0.104014204815 -1.41716468334 -0.121272845194 -1.41718879342 -0.138532094657 -1.41721612215 -0.155791662633 -1.41722947359 -0.174999576062 -1.41721415519 -0.194209098816 -1.41718709469 -0.211468808353 -1.41716319323 -0.228727851063 -1.41714251041 -0.245986636728 -1.41712501645 -0.263244882226 -1.41711074114 -0.28050301224 -1.41709962487 -0.297760717571 -1.41709172726 -0.31501840055 -1.41708701849 -0.332275800407 -1.41708552837 -0.349533326924 -1.4170872271 -0.366790652275 -1.41709214449 -0.384048238397 -1.41710025072 -0.401305757463 -1.4171115756 -0.418563656509 -1.41712611913 -0.43582162261 -1.41714385152 -0.453080065548 -1.41716471315 -0.470338687301 -1.41718879342 -0.487597934902 -1.41721612215 -0.504857510329 -1.41722947359 -0.524065420032 -1.41721415519 -0.54327493906 -1.41718712449 -0.560534656048 -1.41716322303 -0.577793702483 -1.41714251041 -0.595052480697 -1.41712498665 -0.61231072247 -1.41711071134 -0.629568845033 -1.41709962487 -0.646826550364 -1.41709172726 -0.664084270596 -1.41708701849 -0.681341663003 -1.41708552837 -0.698599144816 -1.4170871973 -0.715856477618 -1.41709211469 -0.733114078641 -1.41710025072 -0.750371590257 -1.4171115756 -0.767629489302 -1.41712611913 -0.784887433052 -1.41714385152 -0.802145883441 -1.41716471315 -0.819404557347 -1.41718876362 -0.836663812399 -1.41721609235 -0.853923350573 -1.41722944379 -0.873131260276 -1.41721412539 -0.892340809107 -1.41718709469 -0.909600511193 -1.41716319323 -0.926859557628 -1.41714251041 -0.944118350744 -1.41712501645 -0.961376592517 -1.41711077094 -0.978634700179 -1.41709965467 -0.995892360806 -1.41709175706 -1.01315006614 -1.41708704829 -1.03040745854 -1.41708552837 -1.04766499996 -1.4170872271 -1.06492239237 -1.41709214449 -1.08217996359 -1.41710025072 -1.09943747521 -1.4171115756 -1.11669534445 -1.41712611913 -1.13395327329 -1.41714385152 -1.15121173859 -1.41716474295 -1.16847038269 -1.41718882322 -1.18572962284 -1.41721612215 -1.20298919082 -1.41722944379 -1.22219711542 -1.41721412539 -1.24140667915 -1.41718709469 -1.25866639614 -1.41716319323 -1.27592542768 -1.41714251041 -1.29318419099 -1.41712501645 -1.31044241786 -1.41711074114 -1.32770058513 -1.41709962487 -1.34495827556 -1.41709172726 -1.36221596599 -1.41708701849 -1.37947335839 -1.41708552837 -1.39673087001 -1.4170872271 -1.41398820281 -1.41709214449 -1.43124577403 -1.41710025072 -1.44850331545 -1.4171115756 -1.4657612145 -1.41712611913 -1.48301917314 -1.41714382171 -1.50027763844 -1.41716471314 -1.51753628254 -1.41718879342 -1.53479552269 -1.41721609235 -1.55205506086 -1.41722947359 -1.57126295566 -1.41721415519 -1.59047248959 -1.41718709469 -1.60773220658 -1.41716322303 -1.62499126792 -1.41714254022 -1.64225006104 -1.41712501645 -1.65950828791 -1.41711074114 -1.67676639557 -1.41709962487 -1.6940241158 -1.41709178686 -1.71128180623 -1.41708707809 -1.72853919864 -1.41708552837 -1.74579671025 -1.4170872271 -1.76305404306 -1.41709214449 -1.78031164408 -1.41710025072 -1.7975691557 -1.4171115756 -1.81482705474 -1.41712611913 -1.83208501339 -1.41714385152 -1.84934344888 -1.41716474295 -1.86660209298 -1.41718882322 -1.88386136294 -1.41721612215 -1.90112093091 -1.41722944379 -1.92032882571 -1.41721412539 -1.93953832984 -1.41718709469 -1.95679804683 -1.41716319323 -1.97405710817 -1.41714251041 -1.99131590128 -1.41712501645 -2.00857409835 -1.41711074114 -2.02583223581 -1.41709959507 -2.04308998585 -1.41709169746 -2.06034767628 -1.41708701849 -2.07760506869 -1.41708552837 -2.0948625803 -1.4170872271 -2.1121199131 -1.41709214449 -2.12937748432 -1.41710025072 -2.14663499594 -1.4171115756 -2.16389286518 -1.41712608933 -2.18115079403 -1.41714382171 -2.19840925932 -1.41716474295 -2.21566790342 -1.41718882322 -2.23292714357 -1.41721612215 -2.25018674135 -1.41722944379 -2.26939469576 -1.41721412539 -2.28860425949 -1.41718712449 -2.30586391687 -1.41716322303 -2.32312291861 -1.41714251041 -2.34038180113 -1.41712501645 -2.357640028 -1.41711074114 -2.37489807606 -1.41709962487 -2.39215576649 -1.41709172726 -2.40941345692 -1.41708701849 -2.42667084932 -1.41708552837 -2.44392842055 -1.4170872271 -2.46118581295 -1.41709214449 -2.47844338417 -1.41710025072 -2.49570083618 -1.4171115756 -2.51295876503 -1.41712611913 -2.53021681309 -1.41714385152 -2.54747521877 -1.41716474295 -2.56473380327 -1.41718882322 -2.58199304342 -1.41721612215 -2.5992525816 -1.41722944379 -2.61846053601 -1.41721412539 -2.63767009973 -1.41718712449 -2.65492981672 -1.41716322303 -2.67218881846 -1.41714251041 -2.68944758177 -1.41712501645 -2.70670586824 -1.41711077094 -2.72396391631 -1.41709965467 -2.74122160673 -1.41709172726 -2.75847941637 -1.41708701849 -2.77573680878 -1.41708552837 -2.79299426079 -1.4170872271 -2.81025159359 -1.41709214449 -2.82750916481 -1.41710025072 -2.84476667643 -1.4171115756 -2.86202460528 -1.41712608933 -2.87928259373 -1.41714379191 -2.89654099941 -1.41716468334 -2.91379964352 -1.41718879342 -2.93105894327 -1.41721609235 -2.94831848144 -1.41722944379 -2.96752637625 -1.4172142148 -2.98673588037 -1.41718715429 -3.00399559736 -1.41716322303 -3.0212546587 -1.41714254022 -3.03851342201 -1.41712504625 -3.05577164888 -1.41711077094 -3.07302981615 -1.41709962487 -3.09028750658 -1.41709178686 -3.10754519701 -1.41708707809 -3.12480264902 -1.41708549857 --3.14112517436 -1.4170871973 --3.12386786938 -1.41709214449 --3.10661029816 -1.41710025072 --3.08935278654 -1.4171115756 --3.07209485769 -1.41712608933 --3.05483686924 -1.41714379191 --3.03757846356 -1.41716468334 --3.02031981945 -1.41718879342 --3.0030605197 -1.41721612215 --2.98580098152 -1.41722947359 --2.96659308672 -1.41721415519 --2.9473835826 -1.41718709469 --2.93012386561 -1.41716319323 --2.91286480427 -1.41714251041 --2.89560604095 -1.41712501645 --2.87834781408 -1.41711074114 --2.86108964681 -1.41709962487 --2.84383189678 -1.41709172726 --2.82657420635 -1.41708701849 --2.80931681395 -1.41708552837 --2.79205936194 -1.4170872271 --2.77480202913 -1.41709214449 --2.75754439831 -1.41710025072 --2.74028688669 -1.4171115756 --2.72302901745 -1.41712611913 --2.7057710886 -1.41714385152 --2.68851262331 -1.41716471315 --2.67125397921 -1.41718879342 --2.65399473906 -1.41721612215 --2.63673514128 -1.41722947359 --2.61752724648 -1.41721415519 --2.59831774235 -1.41718712449 --2.58105802536 -1.41716322303 --2.56379896402 -1.41714251041 --2.54654020071 -1.41712498665 --2.52928197384 -1.41711071134 --2.51202380657 -1.41709962487 --2.49476611614 -1.41709172726 --2.47750842571 -1.41708701849 --2.46025103331 -1.41708552837 --2.44299352169 -1.4170871973 --2.42573618889 -1.41709211469 --2.40847855806 -1.41710025072 --2.39122104644 -1.4171115756 --2.3739631772 -1.41712611913 --2.35670524836 -1.41714385152 --2.33944678307 -1.41716471315 --2.32218807936 -1.41718876362 --2.30492883921 -1.41721609235 --2.28766930103 -1.41722944379 --2.26846140623 -1.41721412539 --2.2492518425 -1.41718709469 --2.23199212551 -1.41716319323 --2.21473312378 -1.41714251041 --2.19747430086 -1.41712501645 --2.18021601439 -1.41711077094 --2.16295796633 -1.41709965467 --2.14570027589 -1.41709175706 --2.12844258546 -1.41708704829 --2.11118519306 -1.41708552837 --2.09392762184 -1.4170872271 --2.07667028904 -1.41709214449 --2.05941271782 -1.41710025072 --2.0421552062 -1.4171115756 --2.02489727736 -1.41712611913 --2.00763931871 -1.41714385152 --1.99038088322 -1.41716474295 --1.97312223911 -1.41718882322 --1.95586299896 -1.41721612215 --1.93860343098 -1.41722944379 --1.91939553618 -1.41721412539 --1.90018600225 -1.41718709469 --1.88292628527 -1.41716319323 --1.86566725373 -1.41714251041 --1.84840846062 -1.41712501645 --1.83115020394 -1.41711074114 --1.81389209628 -1.41709962487 --1.79663440585 -1.41709172726 --1.77937668562 -1.41708701849 --1.76211929321 -1.41708552837 --1.7448617816 -1.4170872271 --1.7276044488 -1.41709214449 --1.71034684777 -1.41710025072 --1.69308933616 -1.4171115756 --1.67583146692 -1.41712611913 --1.65857347846 -1.41714382171 --1.64131501317 -1.41716471314 --1.62405639887 -1.41718879342 --1.60679712891 -1.41721609235 --1.58953756094 -1.41722947359 --1.57032969594 -1.41721415519 --1.55112016201 -1.41718709469 --1.53386044502 -1.41716322303 --1.51660141349 -1.41714254022 --1.49934259057 -1.41712501645 --1.4820843339 -1.41711074114 --1.46482622623 -1.41709962487 --1.4475685358 -1.41709178686 --1.43031084537 -1.41708707809 --1.41305348277 -1.41708552837 --1.39579597116 -1.4170872271 --1.37853860855 -1.41709214449 --1.36128100753 -1.41710025072 --1.34402346611 -1.4171115756 --1.32676559687 -1.41712611913 --1.30950766802 -1.41714385152 --1.29224920273 -1.41716474295 --1.27499055862 -1.41718882322 --1.25773131847 -1.41721612215 --1.2404717505 -1.41722944379 --1.22126382589 -1.41721412539 --1.20205429196 -1.41718709469 --1.18479457497 -1.41716319323 --1.16753554344 -1.41714251041 --1.15027678013 -1.41712501645 --1.13301852346 -1.41711074114 --1.11576041579 -1.41709959507 --1.09850272536 -1.41709169746 --1.08124497533 -1.41708701849 --1.06398758292 -1.41708552837 --1.04673010111 -1.4170872271 --1.02947276831 -1.41709214449 --1.01221519709 -1.41710025072 --0.99495767057 -1.4171115756 --0.977699771523 -1.41712608933 --0.960441827774 -1.41714382171 --0.943183362484 -1.41716474295 --0.92592471838 -1.41718882322 --0.90866547823 -1.41721612215 --0.891405895352 -1.41722944379 --0.872197955847 -1.41721412539 --0.852988421917 -1.41718712449 --0.835728749633 -1.41716322303 --0.818469718099 -1.41714251041 --0.801210910082 -1.41712501645 --0.78395268321 -1.41711074114 --0.766694545746 -1.41709962487 --0.749436840415 -1.41709172726 --0.732179149986 -1.41708701849 --0.714921757579 -1.41708552837 --0.697664216161 -1.4170872271 --0.680406868458 -1.41709214449 --0.66314932704 -1.41710025072 --0.645891815424 -1.4171115756 --0.628633886576 -1.41712611913 --0.611375898123 -1.41714385152 --0.594117462635 -1.41716474295 --0.576858863234 -1.41718882322 --0.559599623084 -1.41721612215 --0.542340040207 -1.41722944379 --0.523132115603 -1.41721412539 --0.503922589123 -1.41718712449 --0.486662894487 -1.41716322303 --0.469403855502 -1.41714251041 --0.452145054936 -1.41712501645 --0.434886805713 -1.41711077094 --0.41762868315 -1.41709965467 --0.400370985269 -1.41709172726 --0.383113287389 -1.41708701849 --0.365855894983 -1.41708552837 --0.348598390817 -1.4170872271 --0.331341058016 -1.41709214449 --0.314083471895 -1.41710025072 --0.296825945378 -1.4171115756 --0.279568046332 -1.41712608933 --0.262310087681 -1.41714379191 --0.245051633567 -1.41716468334 --0.227792993188 -1.41718879342 --0.210533745587 -1.41721609235 --0.193274181336 -1.41722944379 --0.174066275358 -1.43438190222 --0.15485496819 -1.4343547821 --0.137595254928 -1.43433079124 --0.120336204767 -1.43431004882 --0.103077402338 -1.43429243564 --0.0858191456646 -1.43427810073 --0.068561013788 -1.43426692486 --0.0513033112511 -1.43425899744 --0.0340456096455 -1.43425428867 --0.0167882079259 -1.43425279855 -0.000469316961245 -1.43425449729 -0.0177266595419 -1.43425941467 -0.0349842500873 -1.43426758051 -0.0522417826578 -1.43427893519 -0.0694996826351 -1.43429350853 -0.086757645011 -1.43431127071 -0.104016100988 -1.43433222175 -0.121274745092 -1.43435642123 -0.138534005731 -1.43438386917 -0.155793584883 -1.43439728022 -0.175001427531 -1.43438190222 -0.194210886955 -1.4343547523 -0.211470603943 -1.43433076143 -0.228729650378 -1.43431001901 -0.24598845467 -1.43429243564 -0.263246707618 -1.43427810073 -0.280504830182 -1.43426692486 -0.297762535513 -1.43425896764 -0.315020240843 -1.43425425887 -0.332277648151 -1.43425276875 -0.349535174668 -1.43425449729 -0.366792507469 -1.43425944447 -0.384050101042 -1.43426758051 -0.401307635009 -1.43427893519 -0.418565534055 -1.43429353833 -0.435823507607 -1.43431133032 -0.453081957996 -1.43433228135 -0.470340587199 -1.43435645103 -0.487599849701 -1.43438386917 -0.504859432578 -1.43439725041 -0.524067282677 -1.43438187242 -0.543276742101 -1.4343547821 -0.560536444187 -1.43433079124 -0.577795490623 -1.43431001901 -0.595054298639 -1.43429240584 -0.612312555313 -1.43427807093 -0.629570677876 -1.43426695466 -0.646828383207 -1.43425899744 -0.664086103439 -1.43425425887 -0.681343495846 -1.43425276875 -0.698601007462 -1.43425446749 -0.715858355165 -1.43425941467 -0.733115926385 -1.43426758051 -0.750373452902 -1.43427893519 -0.767631366849 -1.43429353833 -0.784889325499 -1.43431136012 -0.80214779079 -1.43433231115 -0.819406449795 -1.43435645103 -0.836665704846 -1.43438386917 -0.853925257921 -1.43439728022 -0.87313310802 -1.43438190222 -0.892342582345 -1.4343547523 -0.909602284432 -1.43433076143 -0.926861330867 -1.43431001901 -0.944120153785 -1.43429243564 -0.96137842536 -1.43427810073 -0.978636533022 -1.43426695466 -0.99589420855 -1.43425902724 -1.01315191388 -1.43425428867 -1.03040930629 -1.43425276875 -1.04766687751 -1.43425449729 -1.06492424012 -1.43425944447 -1.08218181133 -1.43426758051 -1.09943935275 -1.43427893519 -1.11669722199 -1.43429353833 -1.13395518064 -1.43431133032 -1.15121364593 -1.43433231115 -1.16847229004 -1.43435648084 -1.18573155999 -1.43438386917 -1.20299112797 -1.43439728022 -1.22219896317 -1.43438190222 -1.24140843749 -1.4343547523 -1.25866815448 -1.43433076143 -1.27592721582 -1.43431001901 -1.29318600893 -1.43429243564 -1.3104442358 -1.43427810073 -1.32770240307 -1.43426695466 -1.3449601233 -1.43425899744 -1.36221781373 -1.43425425887 -1.37947520613 -1.43425279855 -1.39673271775 -1.43425452709 -1.41399005056 -1.43425944447 -1.43124762178 -1.43426755071 -1.448505193 -1.43427890539 -1.46576312185 -1.43429356813 -1.48302105069 -1.43431138992 -1.50027951598 -1.43433231115 -1.51753816008 -1.43435648084 -1.53479740023 -1.43438392877 -1.55205696821 -1.43439731002 -1.57126480341 -1.43438190222 -1.59047427773 -1.4343547523 -1.60773399472 -1.43433076143 -1.62499305606 -1.43430998921 -1.64225187898 -1.43429240584 -1.65951010585 -1.43427810073 -1.67676821351 -1.43426695466 -1.69402593374 -1.43425902724 -1.71128362417 -1.43425428867 -1.72854101658 -1.43425276875 -1.74579855799 -1.43425449729 -1.7630559206 -1.43425944447 -1.78031352163 -1.43426758051 -1.79757103324 -1.43427893519 -1.81482893229 -1.43429353833 -1.83208692074 -1.43431133032 -1.84934535622 -1.43433231115 -1.86660400033 -1.43435648084 -1.88386327028 -1.43438386917 -1.90112280846 -1.43439728022 -1.92033067346 -1.43438190222 -1.93954014778 -1.4343547523 -1.95679986477 -1.43433076143 -1.97405892611 -1.43431001901 -1.99131768942 -1.43429243564 -2.00857591629 -1.43427810073 -2.02583408356 -1.43426692486 -2.04309183359 -1.43425896764 -2.06034952402 -1.43425428867 -2.07760685682 -1.43425279856 -2.09486442804 -1.43425449729 -2.11212182045 -1.43425944447 -2.12937939167 -1.43426758051 -2.14663690329 -1.43427893519 -2.16389477253 -1.43429350853 -2.18115276098 -1.43431130051 -2.19841122627 -1.43433231115 -2.21566987037 -1.43435651064 -2.23292911053 -1.43438389897 -2.2501886487 -1.43439728022 -2.2693964839 -1.43438190222 -2.28860598803 -1.4343547821 -2.30586570501 -1.43433079124 -2.32312470675 -1.43431001901 -2.34038352966 -1.43429243564 -2.35764181614 -1.43427810073 -2.3748999238 -1.43426695466 -2.39215761423 -1.43425899744 -2.40941530466 -1.43425428867 -2.42667269707 -1.43425279856 -2.44393026829 -1.43425449729 -2.46118766069 -1.43425944447 -2.47844523191 -1.43426758051 -2.49570274353 -1.43427896499 -2.51296067238 -1.43429359793 -2.53021866083 -1.43431136012 -2.54747706651 -1.43433231115 -2.56473565101 -1.43435648084 -2.58199495077 -1.43438386917 -2.59925454855 -1.43439725041 -2.61846238375 -1.43438187242 -2.63767182827 -1.4343547821 -2.65493154526 -1.43433079124 -2.6721906066 -1.43431001901 -2.68944942952 -1.43429243564 -2.70670765639 -1.43427810073 -2.72396570444 -1.43426692486 -2.74122345448 -1.43425896764 -2.75848120451 -1.43425425887 -2.77573859691 -1.43425276875 -2.79299610853 -1.43425449729 -2.81025344133 -1.43425944447 -2.82751101255 -1.43426758051 -2.84476852417 -1.43427896499 -2.86202645302 -1.43429353833 -2.87928444147 -1.43431127071 -2.89654290676 -1.43433225155 -2.91380155087 -1.43435648084 -2.93106085062 -1.43438386917 -2.94832038879 -1.43439722061 -2.967528224 -1.43438190222 -2.98673766851 -1.4343547821 -3.0039973855 -1.43433079124 -3.02125650644 -1.43431004882 -3.03851526975 -1.43429243564 -3.05577349663 -1.43427810073 -3.07303166389 -1.43426692486 -3.09028935432 -1.43425899744 -3.10754704475 -1.43425428867 -3.12480443716 -1.43425279855 --3.14112338622 -1.43425449729 --3.12386602163 -1.43425941467 --3.10660845041 -1.43426758051 --3.0893509388 -1.43427893519 --3.07209300995 -1.43429350853 --3.0548350215 -1.43431127071 --3.03757655621 -1.43433222175 --3.0203179121 -1.43435642123 --3.00305861235 -1.43438386917 --2.98579907417 -1.43439728022 --2.96659123897 -1.43438190222 --2.94738173485 -1.4343547523 --2.93012201786 -1.43433076143 --2.91286295652 -1.43431001901 --2.89560419321 -1.43429243564 --2.87834596634 -1.43427810073 --2.86108779907 -1.43426692486 --2.84383004904 -1.43425896764 --2.82657235861 -1.43425425887 --2.80931502581 -1.43425276875 --2.7920575738 -1.43425449729 --2.77480024099 -1.43425944447 --2.75754255056 -1.43426758051 --2.74028497934 -1.43427893519 --2.7230271101 -1.43429353833 --2.70576912165 -1.43431133032 --2.68851065636 -1.43433228135 --2.67125201225 -1.43435645103 --2.6539927721 -1.43438386917 --2.63673323393 -1.43439725041 --2.61752539873 -1.43438187242 --2.59831589461 -1.4343547821 --2.58105617762 -1.43433079124 --2.56379717588 -1.43431001901 --2.54653841257 -1.43429240584 --2.5292801261 -1.43427807093 --2.51202195883 -1.43426695466 --2.4947642684 -1.43425899744 --2.47750657797 -1.43425425887 --2.46024918556 -1.43425276875 --2.44299161434 -1.43425446749 --2.42573428154 -1.43425941467 --2.40847671032 -1.43426758051 --2.3912191391 -1.43427893519 --2.37396121025 -1.43429353833 --2.35670328141 -1.43431136012 --2.33944487572 -1.43433231115 --2.32218623161 -1.43435645103 --2.30492699146 -1.43438386917 --2.28766739368 -1.43439728022 --2.26845955849 -1.43438190222 --2.24925011397 -1.4343547523 --2.23199039698 -1.43433076143 --2.21473139524 -1.43431001901 --2.19747251272 -1.43429243564 --2.18021422624 -1.43427810073 --2.16295617819 -1.43426695466 --2.14569848776 -1.43425902724 --2.12844073772 -1.43425428867 --2.11118328571 -1.43425276875 --2.0939257741 -1.43425449729 --2.0766684413 -1.43425944447 --2.05941087008 -1.43426758051 --2.04215335846 -1.43427893519 --2.02489542961 -1.43429353833 --2.00763747096 -1.43431133032 --1.99037900567 -1.43433231115 --1.97312033177 -1.43435648084 --1.95586109162 -1.43438386917 --1.93860152364 -1.43439728022 --1.91939368844 -1.43438190222 --1.90018421412 -1.4343547523 --1.88292449713 -1.43433076143 --1.8656654656 -1.43431001901 --1.84840664268 -1.43429243564 --1.831148386 -1.43427810073 --1.81389027834 -1.43426695466 --1.79663258791 -1.43425899744 --1.77937483787 -1.43425425887 --1.76211741567 -1.43425279855 --1.74485990405 -1.43425452709 --1.72760257125 -1.43425944447 --1.71034500003 -1.43426755071 --1.69308748841 -1.43427890539 --1.67582958937 -1.43429356813 --1.65857160091 -1.43431138992 --1.64131313562 -1.43433231115 --1.62405449152 -1.43435648084 --1.60679522157 -1.43438392877 --1.58953565359 -1.43439731002 --1.57032781839 -1.43438190222 --1.55111837387 -1.4343547523 --1.53385865689 -1.43433076143 --1.51659959555 -1.43430998921 --1.49934080243 -1.43429240584 --1.48208254575 -1.43427810073 --1.46482440829 -1.43426695466 --1.44756671786 -1.43425902724 --1.43030902743 -1.43425428867 --1.41305163503 -1.43425276875 --1.39579412341 -1.43425449729 --1.37853676081 -1.43425944447 --1.36127912999 -1.43426758051 --1.34402158857 -1.43427893519 --1.32676371932 -1.43429353833 --1.30950576067 -1.43431133032 --1.29224729538 -1.43433231115 --1.27498865128 -1.43435648084 --1.25772938132 -1.43438386917 --1.24046981335 -1.43439728022 --1.22126197815 -1.43438190222 --1.20205250382 -1.4343547523 --1.18479278684 -1.43433076143 --1.16753375531 -1.43431001901 --1.15027496219 -1.43429243564 --1.13301670551 -1.43427810073 --1.11575859785 -1.43426692486 --1.09850087762 -1.43425896764 --1.08124312758 -1.43425428867 --1.06398573518 -1.43425279856 --1.04672822356 -1.43425449729 --1.02947089076 -1.43425944447 --1.01221328974 -1.43426758051 --0.994955763222 -1.43427893519 --0.977697879076 -1.43429350853 --0.960439920426 -1.43431130051 --0.943181470036 -1.43433231115 --0.925922811031 -1.43435651064 --0.90866355598 -1.43438389897 --0.891403988004 -1.43439728022 --0.872196123004 -1.43438190222 --0.852986648679 -1.4343547821 --0.835726946593 -1.43433079124 --0.818467900157 -1.43431001901 --0.801209107042 -1.43429243564 --0.78395088017 -1.43427810073 --0.766692727804 -1.43426695466 --0.749434992671 -1.43425899744 --0.732177302242 -1.43425428867 --0.714919909835 -1.43425279856 --0.697662368417 -1.43425449729 --0.680405005813 -1.43425944447 --0.663147434592 -1.43426758051 --0.645889922977 -1.43427896499 --0.628632009029 -1.43429359793 --0.611374020576 -1.43431136012 --0.594115570187 -1.43433231115 --0.576856970787 -1.43435648084 --0.559597715735 -1.43438386917 --0.542338117957 -1.43439725041 --0.523130267859 -1.43438187242 --0.503920815885 -1.4343547821 --0.486661106348 -1.43433079124 --0.469402052462 -1.43431001901 --0.452143244445 -1.43429243564 --0.434884987772 -1.43427810073 --0.417626865208 -1.43426692486 --0.400369159877 -1.43425896764 --0.383111454546 -1.43425425887 --0.365854054689 -1.43425276875 --0.348596535623 -1.43425449729 --0.33133918792 -1.43425944447 --0.314081594348 -1.43426758051 --0.296824067831 -1.43427896499 --0.279566168785 -1.43429353833 --0.262308202684 -1.43431127071 --0.245049733668 -1.43433225155 --0.227791089565 -1.43435648084 --0.210531838238 -1.43438386917 --0.193272262812 -1.43439722061 --0.174064420163 -1.45151856542 --0.154853206128 -1.4514913261 --0.13759348169 -1.45146724582 --0.120334425941 -1.45144644379 --0.103075614199 -1.45142877102 --0.0858173519373 -1.4514143467 --0.0685592163354 -1.45140314103 --0.0513015063479 -1.45139521361 --0.0340437968261 -1.45139047503 --0.0167863876559 -1.45138898492 -0.000471144216137 -1.45139065385 -0.0177284933161 -1.45139560103 -0.0349860922434 -1.45140385628 -0.0522436331958 -1.45141524076 -0.0695015396923 -1.4514298737 -0.086759513244 -1.45144772529 -0.104017974809 -1.45146876574 -0.121276626363 -1.45149305463 -0.138535901904 -1.45152056217 -0.155795481056 -1.45153400302 -0.175003249198 -1.45151859522 -0.194212645292 -1.4514913559 -0.211472373456 -1.45146727562 -0.228731423617 -1.45144644379 -0.245990235358 -1.45142877102 -0.263248503208 -1.4514143467 -0.280506633222 -1.45140314103 -0.297764338553 -1.45139521361 -0.315022051334 -1.45139047503 -0.332279466092 -1.45138895512 -0.349536992609 -1.45139068365 -0.366794332862 -1.45139563084 -0.384051941335 -1.45140382647 -0.401309490204 -1.45141524076 -0.41856738925 -1.4514298737 -0.435825355351 -1.45144772529 -0.453083820641 -1.45146879554 -0.470342472195 -1.45149305463 -0.487601742148 -1.45152053237 -0.504861325026 -1.45153397322 -0.524069100619 -1.45151856542 -0.543278500438 -1.4514913559 -0.560538217425 -1.45146727562 -0.577797263861 -1.45144644379 -0.595056086779 -1.45142877102 -0.612314358354 -1.4514143467 -0.629572495818 -1.45140317083 -0.646830201149 -1.45139521361 -0.66408790648 -1.45139047503 -0.681345313787 -1.45138898492 -0.698602840304 -1.45139068365 -0.715860188007 -1.45139563084 -0.733117789031 -1.45140382647 -0.75037534535 -1.45141524076 -0.767633229494 -1.4514298737 -0.784891188145 -1.4514477551 -0.802149668336 -1.45146882534 -0.81940831244 -1.45149308443 -0.836667582393 -1.45152053237 -0.85392716527 -1.45153397322 -0.873134940862 -1.45151859522 -0.892344340682 -1.4514913559 -0.90960405767 -1.45146727562 -0.926863104105 -1.45144644379 -0.944121912122 -1.45142877102 -0.961380198598 -1.4514143765 -0.978638350964 -1.45140320063 -0.995896026491 -1.45139524341 -1.01315373182 -1.45139050483 -1.03041115403 -1.45138898492 -1.04766872525 -1.45139068365 -1.06492605805 -1.45139563084 -1.08218362928 -1.45140382647 -1.0994412005 -1.45141524076 -1.11669909954 -1.4514298737 -1.13395708799 -1.4514477551 -1.15121552348 -1.45146885514 -1.16847416758 -1.45149308443 -1.18573346734 -1.45152053237 -1.20299300551 -1.45153400302 -1.22220078111 -1.45151859522 -1.24141019583 -1.4514913559 -1.25866991282 -1.45146727562 -1.27592897415 -1.45144644379 -1.29318779707 -1.45142877102 -1.31044605374 -1.4514143765 -1.32770419121 -1.45140320063 -1.34496191144 -1.45139521361 -1.36221963167 -1.45139047503 -1.37947702407 -1.45138901472 -1.39673453569 -1.45139071345 -1.4139918983 -1.45139563084 -1.43124946952 -1.45140379668 -1.44850701094 -1.45141521096 -1.46576493979 -1.4514299035 -1.48302289844 -1.4514477849 -1.50028136373 -1.45146882534 -1.51754000783 -1.45149311423 -1.53479927778 -1.45152062178 -1.55205887556 -1.45153403282 -1.57126665115 -1.45151859522 -1.59047606587 -1.4514913559 -1.60773578286 -1.45146727562 -1.6249948442 -1.45144641399 -1.64225366712 -1.45142874121 -1.65951189399 -1.4514143467 -1.67677003145 -1.45140317083 -1.69402775168 -1.45139524341 -1.71128544211 -1.45139047503 -1.72854283452 -1.45138895512 -1.74580040574 -1.45139068365 -1.76305776834 -1.45139563084 -1.78031533957 -1.45140382647 -1.79757288099 -1.45141524076 -1.81483080983 -1.4514298737 -1.83208879828 -1.45144772529 -1.84934723377 -1.45146879554 -1.86660587788 -1.45149305463 -1.88386514783 -1.45152053237 -1.9011247158 -1.45153400302 -1.9203325212 -1.45151859522 -1.93954190612 -1.4514913559 -1.95680162311 -1.45146727562 -1.97406068444 -1.45144644379 -1.99131947756 -1.45142877102 -2.00857776403 -1.4514143467 -2.0258359313 -1.45140314103 -2.04309362173 -1.4513951838 -2.06035131216 -1.45139050483 -2.07760870457 -1.45138901472 -2.09486627579 -1.45139068365 -2.11212366819 -1.45139563084 -2.12938123941 -1.45140382647 -2.14663875103 -1.45141527056 -2.16389667988 -1.4514299035 -2.18115466833 -1.45144772529 -2.19841307401 -1.45146879554 -2.21567171812 -1.45149308443 -2.23293101787 -1.45152056217 -2.25019055605 -1.45153400302 -2.26939833164 -1.45151859522 -2.28860777616 -1.4514913559 -2.30586749315 -1.45146727562 -2.32312649488 -1.45144644379 -2.3403852582 -1.45142877102 -2.35764354467 -1.4514143467 -2.37490171194 -1.45140317083 -2.39215940237 -1.45139524341 -2.4094170928 -1.45139053464 -2.42667454481 -1.45138901472 -2.44393211603 -1.45139068365 -2.46118944883 -1.45139563084 -2.47844702005 -1.45140382647 -2.49570459127 -1.45141527056 -2.51296252012 -1.45142993331 -2.53022044897 -1.4514477551 -2.54747885466 -1.45146879554 -2.56473749876 -1.45149305463 -2.58199685812 -1.45152053237 -2.59925651551 -1.45153397322 -2.61846423149 -1.45151856542 -2.6376735568 -1.4514913261 -2.65493327379 -1.45146724582 -2.67219239474 -1.45144644379 -2.68945121765 -1.45142877102 -2.70670944452 -1.4514143467 -2.72396755218 -1.45140314103 -2.74122530222 -1.45139521361 -2.75848305226 -1.45139050483 -2.77574038506 -1.45138898492 -2.79299789667 -1.45139068365 -2.81025528908 -1.45139563084 -2.82751286029 -1.45140382647 -2.84477037191 -1.45141527056 -2.86202830077 -1.4514299035 -2.87928628921 -1.45144772529 -2.89654481411 -1.45146879554 -2.91380345822 -1.45149308443 -2.93106269837 -1.45152056217 -2.94832229615 -1.45153397322 -2.96753007174 -1.45151856542 -2.98673945665 -1.4514913261 -3.00399917364 -1.45146724582 -3.02125823498 -1.45144644379 -3.0385170579 -1.45142877102 -3.05577534437 -1.4514143467 -3.07303351164 -1.45140314103 -3.09029120207 -1.45139521361 -3.1075488925 -1.45139047503 -3.12480628491 -1.45138898492 --3.14112153848 -1.45139065385 --3.12386417389 -1.45139560103 --3.10660660267 -1.45140385628 --3.08934909105 -1.45141524076 --3.07209116221 -1.4514298737 --3.05483317376 -1.45144772529 --3.03757464886 -1.45146876574 --3.02031600475 -1.45149305463 --3.0030567646 -1.45152056217 --2.98579716682 -1.45153400302 --2.96658939123 -1.45151859522 --2.94737994671 -1.4514913559 --2.93012022972 -1.45146727562 --2.91286122799 -1.45144644379 --2.89560240507 -1.45142877102 --2.87834411859 -1.4514143467 --2.86108601093 -1.45140314103 --2.8438283205 -1.45139521361 --2.82657057047 -1.45139047503 --2.80931317807 -1.45138895512 --2.79205572605 -1.45139068365 --2.77479839325 -1.45139563084 --2.75754070282 -1.45140382647 --2.7402831316 -1.45141524076 --2.72302526236 -1.4514298737 --2.70576727391 -1.45144772529 --2.68850880862 -1.45146879554 --2.67125016451 -1.45149305463 --2.65399092436 -1.45152053237 --2.63673138618 -1.45153397322 --2.61752361059 -1.45151856542 --2.59831416607 -1.4514913559 --2.58105438948 -1.45146727562 --2.56379538775 -1.45144644379 --2.54653662443 -1.45142877102 --2.52927833795 -1.4514143467 --2.51202017069 -1.45140317083 --2.49476248026 -1.45139521361 --2.47750478983 -1.45139047503 --2.46024733782 -1.45138898492 --2.4429897666 -1.45139068365 --2.42573243379 -1.45139563084 --2.40847486257 -1.45140382647 --2.39121729135 -1.45141524076 --2.3739593625 -1.4514298737 --2.35670143366 -1.4514477551 --2.33944302798 -1.45146882534 --2.32218438387 -1.45149308443 --2.30492508412 -1.45152053237 --2.28766548634 -1.45153397322 --2.26845771074 -1.45151859522 --2.24924832583 -1.4514913559 --2.23198860884 -1.45146727562 --2.2147295475 -1.45144644379 --2.19747072458 -1.45142877102 --2.1802124381 -1.4514143765 --2.16295433044 -1.45140320063 --2.14569664002 -1.45139524341 --2.12843888998 -1.45139050483 --2.11118149758 -1.45138898492 --2.09392398596 -1.45139068365 --2.07666659356 -1.45139563084 --2.05940902234 -1.45140382647 --2.04215151071 -1.45141524076 --2.02489358186 -1.4514298737 --2.00763562322 -1.4514477551 --1.99037715793 -1.45146885514 --1.97311845422 -1.45149308443 --1.95585918426 -1.45152053237 --1.93859964609 -1.45153400302 --1.9193918705 -1.45151859522 --1.90018245578 -1.4514913559 --1.88292273879 -1.45146727562 --1.86566367745 -1.45144644379 --1.84840485453 -1.45142877102 --1.83114662766 -1.4514143765 --1.8138884902 -1.45140320063 --1.79663076997 -1.45139521361 --1.77937304973 -1.45139047503 --1.76211562753 -1.45138901472 --1.74485808611 -1.45139071345 --1.72760072351 -1.45139563084 --1.71034315229 -1.45140379668 --1.69308564067 -1.45141521096 --1.67582771182 -1.4514299035 --1.65856972337 -1.4514477849 --1.64131125808 -1.45146882534 --1.62405261397 -1.45149311423 --1.60679337382 -1.45152062178 --1.58953377604 -1.45153403282 --1.57032597065 -1.45151859522 --1.55111661554 -1.4514913559 --1.53385689855 -1.45146727562 --1.51659783721 -1.45144641399 --1.49933904409 -1.45142874121 --1.48208075762 -1.4514143467 --1.46482262015 -1.45140317083 --1.44756489992 -1.45139524341 --1.43030717969 -1.45139047503 --1.41304978728 -1.45138895512 --1.39579227567 -1.45139068365 --1.37853494287 -1.45139563084 --1.36127731204 -1.45140382647 --1.34401974082 -1.45141524076 --1.32676187158 -1.4514298737 --1.30950388312 -1.45144772529 --1.29224541783 -1.45146879554 --1.27498677373 -1.45149305463 --1.25772747397 -1.45152053237 --1.2404679358 -1.45153400302 --1.22126019001 -1.45151859522 --1.20205077529 -1.4514913559 --1.1847910285 -1.45146727562 --1.16753196716 -1.45144644379 --1.15027317405 -1.45142877102 --1.13301491737 -1.4514143467 --1.11575677991 -1.45140314103 --1.09849905967 -1.4513951838 --1.08124133944 -1.45139050483 --1.06398391723 -1.45138901472 --1.04672637582 -1.45139068365 --1.02946904302 -1.45139563084 --1.01221144199 -1.45140382647 --0.994953915477 -1.45141527056 --0.977696016431 -1.4514299035 --0.960438042879 -1.45144772529 --0.94317959249 -1.45146879554 --0.925920948386 -1.45149308443 --0.908661663532 -1.45152056217 --0.891402080655 -1.45153400302 --0.872194305062 -1.45151859522 --0.852984905243 -1.4514913559 --0.835725173354 -1.45146727562 --0.818466112018 -1.45144644379 --0.801207318902 -1.45142877102 --0.78394907713 -1.4514143467 --0.766690939665 -1.45140317083 --0.749433204531 -1.45139524341 --0.732175499201 -1.45139053464 --0.714918091893 -1.45138901472 --0.697660565376 -1.45139068365 --0.680403202772 -1.45139563084 --0.663145586849 -1.45140382647 --0.645888060331 -1.45141527056 --0.628630161285 -1.45142993331 --0.611372187733 -1.4514477551 --0.594113722443 -1.45146879554 --0.57685509324 -1.45149305463 --0.559595808387 -1.45152053237 --0.542336210608 -1.45153397322 --0.523128449917 -1.45151856542 --0.503919057548 -1.4514913261 --0.486659333109 -1.45146724582 --0.469400271773 -1.45144644379 --0.452141463756 -1.45142877102 --0.434883199632 -1.4514143467 --0.417625062168 -1.45140314103 --0.400367349386 -1.45139521361 --0.383109636605 -1.45139050483 --0.365852236748 -1.45138898492 --0.348594710231 -1.45139068365 --0.331337355077 -1.45139563084 --0.314079754054 -1.45140382647 --0.296822212636 -1.45141527056 --0.27956430614 -1.4514299035 --0.262306340039 -1.45144772529 --0.245047871023 -1.45146879554 --0.227789212018 -1.45149308443 --0.210529945791 -1.45152056217 --0.19327037409 -1.45153397322 --0.174062602222 -1.46862792969 --0.154851470143 -1.46860054136 --0.137591738254 -1.46857637167 --0.120332673192 -1.46855551004 --0.103073855862 -1.46853777766 --0.0858155880124 -1.46852329374 --0.0685574458912 -1.46851208806 --0.0512997275218 -1.46850413084 --0.0340420091525 -1.46849933267 --0.0167845927645 -1.46849784255 -0.000472946558148 -1.46849954128 -0.0177303033415 -1.46850454807 -0.0349879092537 -1.46851280332 -0.0522454576567 -1.4685242176 -0.0695033753291 -1.46853891015 -0.0867613535374 -1.46855679154 -0.10401982069 -1.46857795119 -0.121278485283 -1.4686023593 -0.138537768275 -1.46862992644 -0.155797351152 -1.46864336729 -0.175005044788 -1.46862789989 -0.194214373827 -1.46860057116 -0.211474116892 -1.46857640147 -0.228733174503 -1.46855551004 -0.245991978794 -1.46853780746 -0.263250254095 -1.46852332354 -0.28050840646 -1.46851208806 -0.297766126692 -1.46850413084 -0.315023839474 -1.46849933267 -0.332281254232 -1.46849781275 -0.349538788199 -1.46849954128 -0.366796143353 -1.46850451827 -0.384053766728 -1.46851274371 -0.401311315596 -1.4685242176 -0.418569222093 -1.46853893995 -0.435827195645 -1.46855682134 -0.453085668385 -1.46857795119 -0.47034432739 -1.46860229969 -0.487603597343 -1.46862986684 -0.504863195122 -1.46864339709 -0.524070903659 -1.46862792969 -0.543280214071 -1.46860057116 -0.56053994596 -1.46857640147 -0.577799022198 -1.46855551004 -0.595057845116 -1.46853780746 -0.61231610179 -1.46852332354 -0.629574239254 -1.46851208806 -0.646831974387 -1.46850410104 -0.664089694619 -1.46849933266 -0.681347116828 -1.46849784255 -0.698604643345 -1.46849954128 -0.715861991048 -1.46850451827 -0.733119621873 -1.46851274371 -0.750377178192 -1.4685242176 -0.767635062337 -1.46853891015 -0.784893020988 -1.46855679154 -0.80215151608 -1.46857795119 -0.819410189986 -1.46860232949 -0.836669459939 -1.46862986684 -0.853929027915 -1.46864336729 -0.873136743903 -1.46862792969 -0.892346084118 -1.46860057116 -0.909605801105 -1.46857640147 -0.926864862442 -1.46855551004 -0.94412368536 -1.46853780746 -0.961381971836 -1.46852335334 -0.978640124202 -1.46851211787 -0.995897784827 -1.46850413084 -1.01315549016 -1.46849936247 -1.03041294217 -1.46849787235 -1.04767051339 -1.46849957108 -1.064927876 -1.46850451827 -1.08218547702 -1.46851274371 -1.09944301843 -1.4685242176 -1.11670091748 -1.46853891015 -1.13395890594 -1.46855685115 -1.15121737123 -1.4685780406 -1.16847604513 -1.4686023593 -1.18573531508 -1.46862989664 -1.20299488306 -1.46864339709 -1.22220262885 -1.46862792969 -1.24141195416 -1.46860054135 -1.25867167115 -1.46857637167 -1.27593073249 -1.46855551004 -1.29318955541 -1.46853780746 -1.31044784188 -1.46852335334 -1.32770594954 -1.46851211787 -1.34496363997 -1.46850410104 -1.36222139001 -1.46849933266 -1.37947881222 -1.46849784255 -1.39673632383 -1.46849954128 -1.41399368644 -1.46850448847 -1.43125128746 -1.46851268411 -1.44850882888 -1.4685241878 -1.46576675773 -1.46853893995 -1.48302474618 -1.46855682134 -1.50028321147 -1.46857795119 -1.51754185557 -1.4686023593 -1.53480115533 -1.46862992644 -1.55206075311 -1.46864339709 -1.57126843929 -1.46862792969 -1.59047779441 -1.46860057116 -1.6077375114 -1.46857640147 -1.62499657273 -1.46855551004 -1.64225539565 -1.46853777766 -1.65951362252 -1.46852329374 -1.67677178979 -1.46851208806 -1.69402953982 -1.46850416064 -1.71128726006 -1.46849936247 -1.72854465246 -1.46849781275 -1.74580219388 -1.46849954128 -1.76305955649 -1.46850451827 -1.78031715751 -1.46851274371 -1.79757472873 -1.4685242176 -1.81483265758 -1.46853891015 -1.83209064603 -1.46855682134 -1.84934911132 -1.46857798099 -1.86660775542 -1.46860232949 -1.88386699557 -1.46862989664 -1.90112659335 -1.46864339709 -1.92033433914 -1.46862792969 -1.93954363465 -1.46860057116 -1.95680335164 -1.46857640147 -1.97406241298 -1.46855551004 -1.9913212359 -1.46853780746 -2.00857952237 -1.46852332354 -2.02583765984 -1.46851205826 -2.04309535026 -1.46850407123 -2.0603531003 -1.46849933266 -2.07761055231 -1.46849784255 -2.09486806392 -1.46849954128 -2.11212539673 -1.46850451827 -2.12938302755 -1.46851274371 -2.14664059877 -1.46852424741 -2.16389852763 -1.46853893995 -2.18115651608 -1.46855682134 -2.19841492176 -1.46857798099 -2.21567356586 -1.46860229969 -2.23293286562 -1.46862986684 -2.2501924634 -1.46864339709 -2.26940017939 -1.46862792969 -2.2886095047 -1.46860057116 -2.30586922169 -1.46857640147 -2.32312822342 -1.46855551004 -2.34038704634 -1.46853780746 -2.35764533281 -1.46852332354 -2.37490350008 -1.46851208806 -2.39216125012 -1.46850413084 -2.40941894055 -1.46849936247 -2.42667633295 -1.46849784255 -2.44393390417 -1.46849954128 -2.46119129658 -1.46850451827 -2.4784488678 -1.46851274371 -2.49570637942 -1.4685242176 -2.51296430826 -1.46853891015 -2.53022229671 -1.46855679154 -2.547480762 -1.46857795119 -2.56473940611 -1.46860232949 -2.58199870586 -1.46862989664 -2.59925836325 -1.46864339709 -2.61846607924 -1.46862792969 -2.63767534494 -1.46860054136 -2.65493506193 -1.46857637167 -2.67219418287 -1.46855551004 -2.68945294619 -1.46853780746 -2.70671123266 -1.46852332354 -2.72396939993 -1.46851208806 -2.74122709036 -1.46850413084 -2.75848484039 -1.46849936247 -2.7757422328 -1.46849787235 -2.79299974441 -1.46849957108 -2.81025713682 -1.46850451827 -2.82751470804 -1.46851274371 -2.84477221966 -1.4685242176 -2.86203014851 -1.46853891015 -2.87928813696 -1.46855682134 -2.89654666185 -1.46857798099 -2.91380530596 -1.46860232949 -2.93106454611 -1.46862989664 -2.94832414389 -1.46864339709 -2.96753185987 -1.46862792969 -2.98674118519 -1.46860054136 -3.00400090218 -1.46857637167 -3.02125996351 -1.46855551004 -3.03851878643 -1.46853777766 -3.05577707291 -1.46852329374 -3.07303524018 -1.46851208806 -3.0902929306 -1.46850413084 -3.10755062104 -1.46849933267 -3.12480807305 -1.46849784255 --3.14111969073 -1.46849954128 --3.12386232614 -1.46850454807 --3.10660475492 -1.46851280332 --3.08934724331 -1.4685242176 --3.07208931446 -1.46853891015 --3.05483132601 -1.46855679154 --3.03757280111 -1.46857795119 --3.02031415701 -1.4686023593 --3.00305491686 -1.46862992644 --2.98579531908 -1.46864336729 --2.96658760309 -1.46862789989 --2.94737821817 -1.46860057116 --2.93011850118 -1.46857640147 --2.91285949946 -1.46855551004 --2.89560067653 -1.46853780746 --2.87834239006 -1.46852332354 --2.8610842824 -1.46851208806 --2.84382659197 -1.46850413084 --2.82656884193 -1.46849933267 --2.80931138992 -1.46849781275 --2.79205387831 -1.46849954128 --2.7747965455 -1.46850451827 --2.75753885507 -1.46851274371 --2.74028128385 -1.4685242176 --2.72302347422 -1.46853893995 --2.70576554537 -1.46855682134 --2.68850702047 -1.46857795119 --2.67124831676 -1.46860229969 --2.65398907661 -1.46862986684 --2.63672947883 -1.46864339709 --2.61752176285 -1.46862792969 --2.59831243753 -1.46860057116 --2.58105266094 -1.46857640147 --2.56379365921 -1.46855551004 --2.54653483629 -1.46853780746 --2.52927654982 -1.46852332354 --2.51201844216 -1.46851208806 --2.49476069212 -1.46850410104 --2.47750294209 -1.46849933266 --2.46024554968 -1.46849784255 --2.44298803806 -1.46849954128 --2.42573064565 -1.46850451827 --2.40847301483 -1.46851274371 --2.39121550322 -1.4685242176 --2.37395757436 -1.46853891015 --2.35669958591 -1.46855679154 --2.33944118023 -1.46857795119 --2.32218253613 -1.46860232949 --2.30492317677 -1.46862986684 --2.28766357899 -1.46864336729 --2.2684559226 -1.46862792969 --2.24924659729 -1.46860057116 --2.2319868803 -1.46857640147 --2.21472775936 -1.46855551004 --2.19746893644 -1.46853780746 --2.18021064997 -1.46852335334 --2.1629524827 -1.46851211787 --2.14569479227 -1.46850413084 --2.12843710184 -1.46849936247 --2.11117970943 -1.46849787235 --2.09392213821 -1.46849957108 --2.07666474581 -1.46850451827 --2.05940717459 -1.46851274371 --2.04214966297 -1.4685242176 --2.02489173412 -1.46853891015 --2.00763377547 -1.46855685115 --1.99037531018 -1.4685780406 --1.97311663627 -1.4686023593 --1.95585733652 -1.46862989664 --1.93859776854 -1.46864339709 --1.91939008236 -1.46862792969 --1.90018072724 -1.46860054135 --1.88292098045 -1.46857637167 --1.86566191911 -1.46855551004 --1.848403126 -1.46853780746 --1.83114486933 -1.46852335334 --1.81388670206 -1.46851211787 --1.79662898183 -1.46850410104 --1.7793712616 -1.46849933266 --1.76211383939 -1.46849784255 --1.74485629797 -1.46849954128 --1.72759893537 -1.46850448847 --1.71034133434 -1.46851268411 --1.69308379292 -1.4685241878 --1.67582586408 -1.46853893995 --1.65856787563 -1.46855682134 --1.64130941033 -1.46857795119 --1.62405076623 -1.4686023593 --1.60679149628 -1.46862992644 --1.5895318985 -1.46864339709 --1.57032418251 -1.46862792969 --1.551114887 -1.46860057116 --1.53385517001 -1.46857640147 --1.51659610867 -1.46855551004 --1.49933728576 -1.46853777766 --1.48207899928 -1.46852329374 --1.46482086181 -1.46851208806 --1.44756311178 -1.46850416064 --1.43030539155 -1.46849936247 --1.41304799914 -1.46849781275 --1.39579045772 -1.46849954128 --1.37853309512 -1.46850451827 --1.3612754941 -1.46851274371 --1.34401795268 -1.4685242176 --1.32676005363 -1.46853891015 --1.30950206518 -1.46855682134 --1.29224359989 -1.46857798099 --1.27498492599 -1.46860232949 --1.25772562623 -1.46862989664 --1.24046608806 -1.46864339709 --1.22125840187 -1.46862792969 --1.20204904676 -1.46860057116 --1.18478927016 -1.46857640147 --1.16753020882 -1.46855551004 --1.15027141571 -1.46853780746 --1.13301312924 -1.46852332354 --1.11575499177 -1.46851205826 --1.09849730134 -1.46850407123 --1.08123958111 -1.46849933266 --1.0639821291 -1.46849784255 --1.04672455787 -1.46849954128 --1.02946722508 -1.46850451827 --1.01220965386 -1.46851274371 --0.994952097534 -1.46852424741 --0.977694168687 -1.46853893995 --0.960436195135 -1.46855682134 --0.943177729845 -1.46857798099 --0.925919085741 -1.46860229969 --0.908659800887 -1.46862986684 --0.891400203109 -1.46864339709 --0.872192502022 -1.46862792969 --0.852983176708 -1.46860057116 --0.83572344482 -1.46857640147 --0.818464383483 -1.46855551004 --0.801205560565 -1.46853780746 --0.78394728899 -1.46852332354 --0.766689151525 -1.46851208806 --0.749431431293 -1.46850413084 --0.732173711061 -1.46849936247 --0.714916288853 -1.46849784255 --0.697658762336 -1.46849954128 --0.680401399731 -1.46850451827 --0.663143783808 -1.46851274371 --0.645886242389 -1.4685242176 --0.628628328442 -1.46853891015 --0.611370354891 -1.46855679154 --0.594111874699 -1.46857795119 --0.576853215694 -1.46860232949 --0.559593945742 -1.46862989664 --0.542334362865 -1.46864339709 --0.523126646877 -1.46862792969 --0.503917306662 -1.46860054136 --0.486657582223 -1.46857637167 --0.469398520887 -1.46855551004 --0.45213971287 -1.46853780746 --0.434881441295 -1.46852332354 --0.417623288929 -1.46851208806 --0.400365576148 -1.46850413084 --0.383107855916 -1.46849936247 --0.365850441158 -1.46849787235 --0.348592914641 -1.46849957108 --0.331335552037 -1.46850451827 --0.314077943563 -1.46851274371 --0.296820402145 -1.4685242176 --0.279562473297 -1.46853891015 --0.262304484844 -1.46855682134 --0.245046019554 -1.46857798099 --0.227787360549 -1.46860232949 --0.210528090596 -1.46862989664 --0.193268507719 -1.46864339709 --0.174060795456 --1.4000261724 --0.138748154044 --1.39998140931 --0.104230294004 --1.39994925261 --0.0697139166295 --1.3999299407 --0.0351985311136 --1.39992332459 --0.000683643389492 --1.39992946386 -0.0338312350214 --1.39994841814 -0.0683465991169 --1.39998009801 -0.102862929925 --1.40002447367 -0.137380741536 --1.40006664395 -0.173850100487 --1.4000261426 -0.210317693651 --1.3999813497 -0.244835559279 --1.39994928241 -0.279351934791 --1.3999299109 -0.313867323101 --1.39992332459 -0.348382197321 --1.39992949367 -0.382897078991 --1.39994844794 -0.417412444949 --1.39998009801 -0.451928786934 --1.40002447367 -0.486446589231 --1.40006661415 -0.522915944457 --1.4000262022 -0.559383556247 --1.39998137951 -0.593901410699 --1.39994931221 -0.628417789936 --1.3999299407 -0.662933170795 --1.39992332459 -0.697448059917 --1.39992949367 -0.731962949038 --1.39994844794 -0.766478314996 --1.39998009801 -0.800994604826 --1.40002444387 -0.835512444377 --1.40006661415 -0.871981799603 --1.40002611279 -0.908449411392 --1.39998137951 -0.942967250944 --1.39994928241 -0.977483645081 --1.3999299407 -1.01199901104 --1.39992332459 -1.04651388526 --1.39992952347 -1.08102875948 --1.39994841814 -1.11554414034 --1.39998009801 -1.15006047487 --1.40002447367 -1.18457829952 --1.40006661415 -1.22104763985 --1.4000261426 -1.25751525164 --1.39998137951 -1.29203310609 --1.39994928241 -1.32654950023 --1.3999299109 -1.36106488108 --1.39992332459 -1.39557978511 --1.39992952347 -1.43009462952 --1.39994847775 -1.46461001038 --1.39998009801 -1.49912634492 --1.40002447367 -1.53364413977 --1.40006664395 -1.57011350989 --1.4000261426 -1.60658109188 --1.39998137951 -1.64109894633 --1.39994925261 -1.67561534047 --1.3999299109 -1.71013075113 --1.39992329478 -1.74464559555 --1.39992949367 -1.77916046977 --1.39994841814 -1.81367582083 --1.39998009801 -1.84819215536 --1.40002447367 -1.88270998001 --1.40006661415 -1.91917937994 --1.4000261426 -1.95564693213 --1.3999813497 -1.99016481638 --1.39994928241 -2.02468121052 --1.3999299109 -2.05919659138 --1.39992332459 -2.09371137619 --1.39992952347 -2.12822639942 --1.39994841814 -2.16274178028 --1.39998009801 -2.19725805521 --1.40002444387 -2.23177582025 --1.40006661415 -2.26824522018 --1.40002611279 -2.30471283197 --1.3999813497 -2.33923071623 --1.39994928241 -2.37374705076 --1.3999298811 -2.40826249123 --1.39992332459 -2.44277733564 --1.39992949367 -2.47729218006 --1.39994844794 -2.51180756092 --1.39998009801 -2.54632389546 --1.40002447367 -2.5808416605 --1.40006661415 -2.61731106043 --1.4000261724 -2.65377867222 --1.39998137951 -2.68829649687 --1.39994928241 -2.72281289101 --1.3999298811 -2.75732827187 --1.39992332459 -2.79184317589 --1.39992949367 -2.8263579607 --1.39994841814 -2.86087334156 --1.39998009801 -2.8953897953 --1.40002444387 -2.92990756035 --1.40006664395 -2.96637690067 --1.4000261724 -3.00284451246 --1.39998140931 -3.03736233711 --1.39994925261 -3.07187873125 --1.3999299407 -3.10639411211 --1.39992332459 -3.14090898831 --1.39992946386 --3.10776150226 --1.39994841814 --3.0732460618 --1.39998009801 --3.03872966766 --1.40002447367 --3.00421190262 --1.40006664395 --2.96774256229 --1.4000261426 --2.93127495051 --1.3999813497 --2.89675712585 --1.39994928241 --2.86224073172 --1.3999299109 --2.82772535086 --1.39992332459 --2.79321050644 --1.39992949367 --2.75869554281 --1.39994844794 --2.72418028116 --1.39998009801 --2.68966388702 --1.40002447367 --2.65514606238 --1.40006661415 --2.61867672205 --1.4000262022 --2.58220905066 --1.39998137951 --2.54769122601 --1.39994931221 --2.51317483187 --1.3999299407 --2.47865945101 --1.39992332459 --2.44414460659 --1.39992949367 --2.40962970257 --1.39994844794 --2.37511432171 --1.39998009801 --2.34059804678 --1.40002444387 --2.30608022213 --1.40006661415 --2.2696108222 --1.40002611279 --2.23314321041 --1.39998137951 --2.19862538576 --1.39994928241 --2.16410905123 --1.3999299407 --2.12959367037 --1.39992332459 --2.09507870674 --1.39992952347 --2.06056392193 --1.39994841814 --2.02604854107 --1.39998009801 --1.99153217673 --1.40002447367 --1.95701438189 --1.40006661415 --1.92054501176 --1.4000261426 --1.88407739997 --1.39998137951 --1.84955954552 --1.39994928241 --1.81504315138 --1.3999299109 --1.78052777052 --1.39992332459 --1.7460128963 --1.39992952347 --1.71149802208 --1.39994847775 --1.67698264122 --1.39998009801 --1.64246630669 --1.40002447367 --1.60794851184 --1.40006664395 --1.57147914171 --1.4000261426 --1.53501155973 --1.39998137951 --1.50049367547 --1.39994925261 --1.46597734094 --1.3999299109 --1.43146193027 --1.39992329478 --1.39694705605 --1.39992949367 --1.36243215203 --1.39994841814 --1.32791683078 --1.39998009801 --1.29340046644 --1.40002447367 --1.25888267159 --1.40006661415 --1.22241333127 --1.4000261426 --1.18594568968 --1.3999813497 --1.15142786503 --1.39994928241 --1.11691144109 --1.3999299109 --1.08239609003 --1.39992332459 --1.04788121581 --1.39992952347 --1.01336631179 --1.39994841814 --0.97885094583 --1.39998009801 --0.944334611297 --1.40002444387 --0.909816861153 --1.40006661415 --0.873347446322 --1.40002611279 --0.836879864335 --1.3999813497 --0.80236196518 --1.39994928241 --0.767845585942 --1.3999298811 --0.733330234885 --1.39992332459 --0.698815345764 --1.39992949367 --0.664300471544 --1.39994844794 --0.629785120487 --1.39998009801 --0.595268756151 --1.40002447367 --0.560750961304 --1.40006661415 --0.524281591177 --1.4000261724 --0.487814001739 --1.39998137951 --0.453296139836 --1.39994928241 --0.4187797755 --1.3999298811 --0.38426437974 --1.39992332459 --0.34974950552 --1.39992949367 --0.315234608948 --1.39994841814 --0.280719250441 --1.39998009801 --0.246202912181 --1.40002444387 --0.211685117334 --1.40006664395 --0.175215750932 --1.31437250972 --0.138733718545 --1.31432878971 --0.104215977714 --1.31429737806 --0.069699715823 --1.31427845359 --0.0351844420657 --1.31427201629 --0.000669670756908 --1.31427806616 -0.03384509217 --1.3142965436 -0.0683603370562 --1.31432756782 -0.102876564488 --1.31437090039 -0.137394249439 --1.3144120872 -0.173864074051 --1.31437253952 -0.210332129151 --1.31432881951 -0.244849864394 --1.31429737806 -0.279366128147 --1.31427848339 -0.313881404698 --1.31427201629 -0.348396189511 --1.31427803635 -0.382910944521 --1.3142965734 -0.41742618382 --1.31432753802 -0.451942414045 --1.31437093019 -0.486460104585 --1.314412117 -0.522929921746 --1.31437253952 -0.559397980571 --1.31432878971 -0.593915700913 --1.31429737806 -0.628431975842 --1.31427848339 -0.662947252393 --1.31427201629 -0.697462037206 --1.31427803635 -0.731976792216 --1.3142965734 -0.766492053866 --1.31432753802 -0.801008284092 --1.31437096 -0.835525929928 --1.314412117 -0.871995776892 --1.31437253952 -0.908463835716 --1.31432875991 -0.94298158586 --1.31429737806 -0.977497845888 --1.31427848339 -1.01201310754 --1.31427201629 -1.04652792215 --1.31427803635 -1.08104261756 --1.3142965734 -1.11555790902 --1.31432753802 -1.15007412434 --1.31437096 -1.18459182978 --1.3144120872 -1.22106161714 --1.31437253952 -1.25752970576 --1.31432875991 -1.2920474112 --1.31429740787 -1.32656365633 --1.31427848339 -1.36107894778 --1.31427201629 -1.3955937326 --1.31427806616 -1.43010848761 --1.3142965436 -1.46462374925 --1.31432753802 -1.49913993478 --1.31437093019 -1.53365764022 --1.3144120872 -1.57012748718 --1.31437253952 -1.60659551621 --1.31432875991 -1.64111328125 --1.31429737806 -1.67562952637 --1.31427845359 -1.71014481783 --1.31427201629 -1.74465960264 --1.31427803635 -1.77917438745 --1.3142965734 -1.8136895895 --1.31432753802 -1.84820583463 --1.31437093019 -1.88272351027 --1.314412117 -1.91919329762 --1.31437250972 -1.95566138625 --1.31432878971 -1.99017912149 --1.31429737806 -2.02469539642 --1.3142785132 -2.05921065807 --1.31427201629 -2.09372544289 --1.31427803635 -2.12824016809 --1.3142965734 -2.16275537014 --1.31432756782 -2.19727158547 --1.31437096 -2.23178935051 --1.314412117 -2.26825916767 --1.31437253952 -2.3047272563 --1.31432878971 -2.33924496174 --1.31429737806 -2.37376123667 --1.31427848339 -2.40827643871 --1.31427201629 -2.44279128313 --1.31427806616 -2.47730606794 --1.3142965734 -2.51182132959 --1.31432756782 -2.54633760453 --1.31437096 -2.58085513115 --1.3144120872 -2.61732500792 --1.31437253952 -2.65379309654 --1.31432875991 -2.68831086159 --1.31429737806 -2.72282707691 --1.31427848339 -2.75734239817 --1.31427201629 -2.79185712338 --1.31427803635 -2.82637190819 --1.3142965734 -2.86088716984 --1.31432756782 -2.89540338516 --1.31437096 -2.9299210906 --1.314412117 -2.96639090776 --1.31437250972 -3.00285893679 --1.31432878971 -3.03737670183 --1.31429737806 -3.07189297676 --1.31427845359 -3.10640823841 --1.31427201629 -3.1409229358 --1.31427806616 --3.10774755478 --1.3142965436 --3.07323229313 --1.31432756782 --3.03871607781 --1.31437090039 --3.00419837236 --1.3144120872 --2.96772855521 --1.31437253952 --2.93126052618 --1.31432881951 --2.89674282074 --1.31429737806 --2.86222648621 --1.31427848339 --2.82771122456 --1.31427201629 --2.79319649935 --1.31427803635 --2.75868165493 --1.3142965734 --2.72416651249 --1.31432753802 --2.68965029717 --1.31437093019 --2.65513253212 --1.314412117 --2.61866271496 --1.31437253952 --2.58219462633 --1.31432878971 --2.5476769805 --1.31429737806 --2.51316070557 --1.31427848339 --2.47864544392 --1.31427201629 --2.4441305995 --1.31427803635 --2.40961587429 --1.3142965734 --2.37510061264 --1.31432753802 --2.3405842781 --1.31437096 --2.30606675148 --1.314412117 --2.26959687471 --1.31437253952 --2.23312884569 --1.31432875991 --2.19861108065 --1.31429737806 --2.16409480572 --1.31427848339 --2.12957948446 --1.31427201629 --2.09506475926 --1.31427803635 --2.06054997444 --1.3142965734 --2.02603471279 --1.31432753802 --1.99151852727 --1.31437096 --1.95700085163 --1.3144120872 --1.92053100467 --1.31437253952 --1.88406300545 --1.31432875991 --1.8495452106 --1.31429740787 --1.81502896547 --1.31427848339 --1.78051367402 --1.31427201629 --1.74599891901 --1.31427806616 --1.7114841342 --1.3142965436 --1.67696890235 --1.31432753802 --1.64245268702 --1.31437093019 --1.60793498159 --1.3144120872 --1.57146516442 --1.31437253952 --1.5349971056 --1.31432875991 --1.50047940016 --1.31429737806 --1.46596309542 --1.31427845359 --1.43144786358 --1.31427201629 --1.39693310857 --1.31427803635 --1.36241832375 --1.3142965734 --1.32790309191 --1.31432753802 --1.29338681698 --1.31437093019 --1.25886917114 --1.314412117 --1.22239932418 --1.31437250972 --1.18593132496 --1.31432878971 --1.15141353011 --1.31429737806 --1.11689728499 --1.3142785132 --1.08238199353 --1.31427201629 --1.04786723852 --1.31427803635 --1.01335245371 --1.3142965734 --0.978837221861 --1.31432756782 --0.944320991635 --1.31437096 --0.909803286195 --1.314412117 --0.873333498835 --1.31437253952 --0.83686542511 --1.31432878971 --0.802347674966 --1.31429737806 --0.767831400037 --1.31427848339 --0.733316138387 --1.31427201629 --0.698801383376 --1.31427806616 --0.664286598563 --1.3142965734 --0.629771351814 --1.31432756782 --0.59525513649 --1.31437096 --0.560737460851 --1.3144120872 --0.524267613888 --1.31437253952 --0.487799569965 --1.31432875991 --0.45328181982 --1.31429737806 --0.418765567243 --1.31427848339 --0.384250275791 --1.31427201629 --0.34973552078 --1.31427803635 --0.315220758319 --1.3142965734 --0.280705519021 --1.31432756782 --0.24618928507 --1.31437096 --0.211671598256 --1.314412117 --0.175201781094 --1.22873342037 --0.138718284667 --1.22869077325 --0.104200657457 --1.22866022587 --0.0696845166385 --1.22864174843 --0.0351693700068 --1.22863554955 --0.000654720468448 --1.2286414206 -0.0338599225506 --1.22865945101 -0.0683750445023 --1.22868961096 -0.102891148999 --1.22873187065 -0.137408722192 --1.22877189517 -0.173879027367 --1.22873336077 -0.210347566754 --1.22869074345 -0.244865193963 --1.22866025567 -0.279381327331 --1.22864177823 -0.313896477223 --1.22863551975 -0.348411120474 --1.22864145041 -0.382925763726 --1.22865945101 -0.417440898717 --1.22868961096 -0.451956994831 --1.22873187065 -0.486474566161 --1.22877189517 -0.522944867611 --1.22873339057 -0.559413433075 --1.22869077325 -0.59393106401 --1.22866025567 -0.628447160125 --1.22864177823 -0.662962347269 --1.22863551975 -0.69747698307 --1.22864145041 -0.731991618872 --1.22865945101 -0.766506776214 --1.22868961096 -0.801022857428 --1.22873187065 -0.835540398956 --1.22877189517 -0.872010737657 --1.22873339057 -0.90847928822 --1.22869077325 -0.942996904254 --1.22866025567 -0.977513030171 --1.22864177823 -1.01202818751 --1.22863554955 -1.04654282332 --1.22864145041 -1.08105748892 --1.2286594212 -1.11557260156 --1.22868961096 -1.15008869767 --1.22873187065 -1.1846062541 --1.22877189517 -1.2210766077 --1.22873339057 -1.25754511356 --1.22869077325 -1.2920627892 --1.22866025567 -1.32657888532 --1.22864177823 -1.36109402776 --1.22863554955 -1.39560869336 --1.2286414206 -1.43012329936 --1.2286594212 -1.464638412 --1.22868961096 -1.49915456772 --1.22873187065 -1.53367212415 --1.22877192497 -1.57014241815 --1.22873336077 -1.60661098361 --1.22869074345 -1.64112856984 --1.22866025567 -1.67564475536 --1.22864177823 -1.71015989781 --1.22863551975 -1.74467453361 --1.22864145041 -1.77918916941 --1.22865945101 -1.81370431185 --1.22868961096 -1.84822040796 --1.22873187065 -1.88273796439 --1.22877189517 -1.91920825839 --1.22873339057 -1.95567679405 --1.22869074345 -1.99019446969 --1.22866025567 -2.02471059561 --1.22864177823 -2.05922567845 --1.22863554955 -2.09374034405 --1.22864145041 -2.12825500965 --1.22865945101 -2.16277015209 --1.22868961096 -2.19728624821 --1.22873190045 -2.23180383444 --1.22877192497 -2.26827412844 --1.22873339057 -2.3047426343 --1.22869080305 -2.33926022053 --1.22866025567 -2.37377643585 --1.22864177823 -2.4082916379 --1.22863551975 -2.4428063035 --1.2286413908 -2.4773209095 --1.22865945101 -2.51183605194 --1.22868961096 -2.54635208845 --1.22873187065 -2.58086961508 --1.22877192497 -2.61733996868 --1.22873339057 -2.65380859375 --1.22869080305 -2.68832612037 --1.22866025567 -2.7228423357 --1.22864177823 -2.75735741854 --1.22863551975 -2.79187208414 --1.22864145041 -2.82638669014 --1.22865945101 -2.86090183258 --1.22868961096 -2.89541792869 --1.22873187065 -2.92993551492 --1.22877195478 -2.96640580893 --1.22873342037 -3.00287437439 --1.22869077325 -3.03739202022 --1.22866022587 -3.07190811634 --1.22864174843 -3.10642325878 --1.22863554955 -3.14093789657 --1.2286414206 --3.10773277283 --1.22865945101 --3.07321763039 --1.22868961096 --3.03870153427 --1.22873187065 --3.00418388843 --1.22877189517 --2.96771365404 --1.22873336077 --2.93124508858 --1.22869074345 --2.89672744274 --1.22866025567 --2.86221134663 --1.22864177823 --2.82769620419 --1.22863551975 --2.79318153858 --1.22864145041 --2.75866687298 --1.22865945101 --2.72415179014 --1.22868961096 --2.68963563442 --1.22873187065 --2.65511804819 --1.22877189517 --2.61864775419 --1.22873339057 --2.58217930794 --1.22869077325 --2.5476616621 --1.22866025567 --2.51314550638 --1.22864177823 --2.47863030434 --1.22863551975 --2.44411563873 --1.22864145041 --2.40960103273 --1.22865945101 --2.37508583069 --1.22868961096 --2.34056979418 --1.22873187065 --2.30605226755 --1.22877189517 --2.26958191395 --1.22873339057 --2.23311328888 --1.22869077325 --2.19859570265 --1.22866025567 --2.16407960654 --1.22864177823 --2.12956446409 --1.22863554955 --2.09504985809 --1.22864145041 --2.06053519249 --1.2286594212 --2.02602005005 --1.22868961096 --1.99150395393 --1.22873187065 --1.95698639751 --1.22877189517 --1.92051610351 --1.22873339057 --1.88404750824 --1.22869077325 --1.84952992201 --1.22866025567 --1.81501373649 --1.22864177823 --1.78049862385 --1.22863554955 --1.74598395825 --1.2286414206 --1.71146935224 --1.2286594212 --1.6769542098 --1.22868961096 --1.64243811369 --1.22873187065 --1.60792052746 --1.22877192497 --1.57145020365 --1.22873336077 --1.5349816978 --1.22869074345 --1.50046405196 --1.22866025567 --1.46594795585 --1.22864177823 --1.4314327538 --1.22863551975 --1.396918118 --1.22864145041 --1.3624034524 --1.22865945101 --1.32788833976 --1.22868961096 --1.29337224364 --1.22873187065 --1.25885465741 --1.22877189517 --1.22238436341 --1.22873339057 --1.18591582775 --1.22869074345 --1.15139818191 --1.22866025567 --1.116882056 --1.22864177823 --1.08236694336 --1.22863554955 --1.04785227776 --1.22864145041 --1.01333767176 --1.22865945101 --0.978822484612 --1.22868961096 --0.944306388498 --1.22873190045 --0.909788832068 --1.22877192497 --0.873318523169 --1.22873339057 --0.836849987507 --1.22869080305 --0.802332341671 --1.22866025567 --0.767816215754 --1.22864177823 --0.733301073313 --1.22863551975 --0.69878642261 --1.2286413908 --0.664271771907 --1.22865945101 --0.629756644368 --1.22868961096 --0.595240548253 --1.22873187065 --0.560723006725 --1.22877192497 --0.524252697825 --1.22873339057 --0.487784132361 --1.22869080305 --0.453266508877 --1.22866025567 --0.41875038296 --1.22864177823 --0.384235218167 --1.22863551975 --0.349720567465 --1.22864145041 --0.315205924213 --1.22865945101 --0.280690796673 --1.22868961096 --0.246174700558 --1.22873187065 --0.211657125503 --1.22877195478 --0.175186820328 --1.14048522711 --0.138700790703 --1.1404440403 --0.104183305055 --1.14041447639 --0.069667304866 --1.1403966248 --0.0351522923447 --1.14039066434 --0.00063778180629 --1.14039632678 -0.0338767222129 --1.14041376114 -0.0683917067945 --1.14044293761 -0.102907672524 --1.1404838264 -0.137425098568 --1.14052256942 -0.173895969987 --1.14048525691 -0.210365064442 --1.14044401049 -0.244882550091 --1.1404145062 -0.279398553074 --1.14039665461 -0.313913568855 --1.14039063454 -0.348428077996 --1.14039632678 -0.382942587137 --1.14041373134 -0.417457550764 --1.14044296741 -0.451973520219 --1.1404838264 -0.486490957439 --1.14052253962 -0.522961810231 --1.14048522711 -0.559430927038 --1.14044401049 -0.59394839406 --1.14041447639 -0.628464400768 --1.14039665461 -0.662979394197 --1.14039060474 -0.697493925691 --1.14039629698 -0.732008397579 --1.14041373134 -0.76652340591 --1.14044296741 -0.801039367914 --1.1404838264 -0.835556790233 --1.14052256942 -0.872027665377 --1.14048525691 -0.908496782183 --1.14044401049 -0.943014234305 --1.14041447639 -0.977530241012 --1.14039665461 -1.01204526425 --1.14039066434 -1.04655975103 --1.14039629698 -1.08107429743 --1.14041373134 -1.11558923125 --1.14044290781 -1.15010523796 --1.1404838562 -1.18462264538 --1.14052256942 -1.22109353543 --1.14048522711 -1.25756263733 --1.14044401049 -1.29208010435 --1.1404145062 -1.32659608126 --1.14039665461 -1.36111107469 --1.14039060474 -1.39562559128 --1.14039626718 -1.43014013767 --1.14041373134 -1.4646551013 --1.14044293761 -1.4991710484 --1.14048379659 -1.53368851542 --1.14052256942 -1.57015937567 --1.14048519731 -1.60662847757 --1.1404440403 -1.6411459446 --1.14041447639 -1.6756619513 --1.14039662481 -1.71017697453 --1.14039066434 -1.74469146132 --1.14039626718 -1.77920597792 --1.14041373134 -1.81372094154 --1.14044293761 -1.84823694825 --1.1404838562 -1.88275435567 --1.14052256942 -1.91922521591 --1.14048525691 -1.95569431782 --1.14044401049 -1.99021181464 --1.14041447639 -2.02472782135 --1.14039662481 -2.05924284458 --1.14039063454 -2.09375727177 --1.14039632678 -2.12827181816 --1.14041376114 -2.16278678179 --1.14044293761 -2.1973028183 --1.1404838264 -2.23182016611 --1.14052253962 -2.26829105616 --1.14048525691 -2.30476015806 --1.14044401049 -2.33927762508 --1.14041447639 -2.37379366159 --1.14039665461 -2.40830868483 --1.14039063454 -2.44282317162 --1.14039626718 -2.47733765841 --1.14041373134 -2.51185268164 --1.14044296741 -2.54636859894 --1.1404838264 -2.58088612556 --1.14052256942 -2.61735695601 --1.14048525691 -2.65382599831 --1.14044401049 -2.68834352493 --1.1404145062 -2.72285950184 --1.14039662481 -2.75737446547 --1.14039060474 -2.79188907146 --1.14039629698 -2.82640355825 --1.14041373134 -2.86091852188 --1.14044296741 -2.89543443918 --1.1404838562 -2.9299519062 --1.14052259922 -2.96642279625 --1.14048522711 -3.00289189816 --1.1404440403 -3.03740936517 --1.14041447639 -3.07192540169 --1.1403966248 -3.10644042492 --1.14039066434 -3.14095488389 --1.14039632678 --3.10771590471 --1.14041376114 --3.07320094109 --1.14044293761 --3.03868502378 --1.1404838264 --3.00416755676 --1.14052256942 --2.96769666672 --1.14048525691 --2.93122756481 --1.14044401049 --2.89671009779 --1.1404145062 --2.86219406128 --1.14039665461 --2.82767903805 --1.14039063454 --2.79316461086 --1.14039632678 --2.75865006447 --1.14041373134 --2.72413516045 --1.14044296741 --2.68961912394 --1.1404838264 --2.65510171652 --1.14052253962 --2.61863082647 --1.14048522711 --2.58216172457 --1.14044401049 --2.54764425755 --1.14041447639 --2.51312822104 --1.14039665461 --2.47861325741 --1.14039060474 --2.44409877062 --1.14039629698 --2.40958428383 --1.14041373134 --2.3750692606 --1.14044296741 --2.34055328369 --1.1404838264 --2.30603587627 --1.14052256942 --2.26956498623 --1.14048525691 --2.23309588432 --1.14044401049 --2.1985784173 --1.14041447639 --2.1640624404 --1.14039665461 --2.12954741716 --1.14039066434 --2.09503293037 --1.14039629698 --2.06051832437 --1.14041373134 --2.02600336075 --1.14044290781 --1.99148747325 --1.1404838562 --1.95696997642 --1.14052256942 --1.92049914598 --1.14048522711 --1.88403004408 --1.14044401049 --1.84951254725 --1.1404145062 --1.81499657035 --1.14039665461 --1.78048154712 --1.14039060474 --1.74596703052 --1.14039626718 --1.71145251393 --1.14041373134 --1.67693752051 --1.14044293761 --1.6424215734 --1.14048379659 --1.60790416598 --1.14052256942 --1.57143330574 --1.14048519731 --1.53496417403 --1.1404440403 --1.50044670701 --1.14041447639 --1.4659307003 --1.14039662481 --1.43141567707 --1.14039066434 --1.39690119028 --1.14039626718 --1.36238670349 --1.14041373134 --1.32787171006 --1.14044293761 --1.29335573315 --1.1404838562 --1.25883826613 --1.14052256942 --1.22236743569 --1.14048525691 --1.18589836359 --1.14044401049 --1.15138086677 --1.14041447639 --1.11686483025 --1.14039662481 --1.08234983683 --1.14039063454 --1.04783535004 --1.14039632678 --1.01332080364 --1.14041376114 --0.978805854916 --1.14044293761 --0.944289878011 --1.1404838264 --0.909772440791 --1.14052253962 --0.873301550746 --1.14048525691 --0.836832493544 --1.14044401049 --0.80231499672 --1.14041447639 --0.767798990011 --1.14039665461 --0.733283981681 --1.14039063454 --0.698769494891 --1.14039626718 --0.664254978299 --1.14041373134 --0.629739969969 --1.14044296741 --0.595224037766 --1.1404838264 --0.560706600547 --1.14052256942 --0.524235725403 --1.14048525691 --0.487766630947 --1.14044401049 --0.453249149025 --1.1404145062 --0.418733157218 --1.14039662481 --0.384218133986 --1.14039060474 --0.349703624845 --1.14039629698 --0.315189130604 --1.14041373134 --0.280674137175 --1.14044296741 --0.246158178896 --1.1404838562 --0.211640741676 --1.14052259922 --0.175169881433 --1.05216157436 --0.138681482524 --1.05212190748 --0.104164149612 --1.05209347606 --0.0696482984349 --1.05207639933 --0.0351334428414 --1.05207055807 --0.000619086902585 --1.0520760715 -0.0338952620514 --1.05209288001 -0.0684100948274 --1.052120924 -0.102925909683 --1.05216020346 -0.137443196028 --1.05219742656 -0.173914667219 --1.05216154456 -0.210384372622 --1.05212190748 -0.244901698083 --1.05209353566 -0.279417544603 --1.05207639933 -0.313932403922 --1.05207055807 -0.348446771502 --1.0520760417 -0.382961109281 --1.05209288001 -0.417475953698 --1.052120924 -0.45199175924 --1.05216020346 -0.486509039998 --1.05219742656 -0.52298052609 --1.05216157437 -0.559450224042 --1.05212190748 -0.593967527151 --1.05209350586 -0.62848341465 --1.05207639933 -0.662998244166 --1.05207055807 -0.697512596846 --1.0520760715 -0.732026949525 --1.05209288001 -0.766541793942 --1.052120924 -0.801057636738 --1.05216020346 -0.835574895144 --1.05219742656 -0.872046381235 --1.05216157437 -0.908516064286 --1.05212190748 -0.943033397198 --1.05209353566 -0.977549239993 --1.05207639933 -1.01206412912 --1.05207058787 -1.04657846689 --1.0520760417 -1.08109283447 --1.05209288001 -1.11560764909 --1.05212089419 -1.15012347698 --1.05216020346 -1.18464076519 --1.05219742656 -1.22111225128 --1.05216154456 -1.25758194923 --1.05212190748 -1.29209923744 --1.05209350586 -1.32661509514 --1.05207639933 -1.36112996936 --1.05207058787 -1.39564433694 --1.0520760119 -1.43015867472 --1.05209288001 -1.46467351913 --1.05212089419 -1.49918931723 --1.05216020346 -1.53370660544 --1.05219745636 -1.57017806172 --1.05216151476 -1.60664775967 --1.05212190748 -1.64116510748 --1.05209356547 -1.67568099499 --1.05207639933 -1.71019580961 --1.05207055807 -1.74471014738 --1.0520760417 -1.77922451496 --1.05209288001 -1.81373932958 --1.052120924 -1.84825515747 --1.05216020346 -1.88277244568 --1.05219742656 -1.91924393177 --1.05216160417 -1.95571362972 --1.05212190748 -1.99023094773 --1.05209353566 -2.02474683523 --1.05207639933 -2.05926162005 --1.05207055807 -2.09377598762 --1.0520760417 -2.12829041481 --1.05209288001 -2.16280519962 --1.05212089419 -2.19732105732 --1.05216020346 -2.23183828592 --1.05219742656 -2.26830977201 --1.05216157437 -2.30477946997 --1.05212190748 -2.33929681778 --1.05209350586 -2.37381261587 --1.05207639933 -2.40832751989 --1.05207055807 -2.44284188747 --1.0520760417 -2.47735625506 --1.05209288001 -2.51187109947 --1.05212089419 -2.54638689757 --1.05216020346 -2.58090412617 --1.05219742656 -2.61737561226 --1.05216154456 -2.65384531021 --1.05212190748 -2.68836265802 --1.05209353566 -2.72287851572 --1.05207639933 -2.75739336014 --1.05207058787 -2.79190766811 --1.0520760417 -2.8264220953 --1.05209288001 -2.86093693972 --1.05212089419 -2.8954526782 --1.05216020346 -2.92996996641 --1.05219742656 -2.96644151211 --1.05216157436 -3.00291115046 --1.05212190748 -3.03742849827 --1.05209347606 -3.07194429636 --1.05207639933 -3.10645920038 --1.05207055807 -3.14097354014 --1.0520760715 --3.10769736767 --1.05209288001 --3.07318252325 --1.052120924 --3.03866678476 --1.05216020346 --3.00414943695 --1.05219742656 --2.96767795086 --1.05216154456 --2.93120825291 --1.05212190748 --2.8966909647 --1.05209353566 --2.862175107 --1.05207639933 --2.82766026258 --1.05207055807 --2.793145895 --1.0520760417 --2.75863152742 --1.05209288001 --2.72411674261 --1.052120924 --2.68960088491 --1.05216020346 --2.65508365631 --1.05219742656 --2.61861211061 --1.05216157437 --2.58214241266 --1.05212190748 --2.54762512446 --1.05209350586 --2.51310926676 --1.05207639933 --2.47859442234 --1.05207055807 --2.44408005476 --1.0520760715 --2.40956568718 --1.05209288001 --2.37505090237 --1.052120924 --2.34053498507 --1.05216020346 --2.30601775646 --1.05219742656 --2.26954627037 --1.05216157437 --2.23307663202 --1.05212190748 --2.19855922461 --1.05209353566 --2.16404336691 --1.05207639933 --2.12952852249 --1.05207058787 --2.09501421452 --1.0520760417 --2.06049984693 --1.05209288001 --2.02598494291 --1.05212089419 --1.99146914482 --1.05216020346 --1.95695191622 --1.05219742656 --1.92048045993 --1.05216154456 --1.88401073217 --1.05212190748 --1.84949341416 --1.05209350586 --1.81497752666 --1.05207639933 --1.78046268225 --1.05207058787 --1.74594834447 --1.0520760119 --1.71143397689 --1.05209288001 --1.67691913247 --1.05212089419 --1.64240336418 --1.05216020346 --1.60788607598 --1.05219745636 --1.57141458988 --1.05216151476 --1.53494489193 --1.05212190748 --1.50042754412 --1.05209356547 --1.46591174603 --1.05207639933 --1.431396842 --1.05207055807 --1.39688247442 --1.0520760417 --1.36236816645 --1.05209288001 --1.32785332203 --1.052120924 --1.29333746433 --1.05216020346 --1.25882023573 --1.05219742656 --1.22234871984 --1.05216160417 --1.18587899208 --1.05212190748 --1.15136170387 --1.05209353566 --1.11684584618 --1.05207639933 --1.08233097196 --1.05207055807 --1.04781663418 --1.0520760417 --1.0133022666 --1.05209288001 --0.978787437082 --1.05212089419 --0.944271638989 --1.05216020346 --0.909754350782 --1.05219742656 --0.873282879591 --1.05216157437 --0.836813166738 --1.05212190748 --0.802295863629 --1.05209350586 --0.767780020833 --1.05207639933 --0.733265131712 --1.05207055807 --0.698750779033 --1.0520760417 --0.664236411452 --1.05209288001 --0.629721581936 --1.05212089419 --0.595205798745 --1.05216020346 --0.560688540339 --1.05219742656 --0.524217039347 --1.05216154456 --0.487747311592 --1.05212190748 --0.453230001032 --1.05209353566 --0.418714135885 --1.05207639933 --0.384199291468 --1.05207058787 --0.349684938788 --1.0520760417 --0.315170586109 --1.05209288001 --0.280655749142 --1.05212089419 --0.246139928699 --1.05216020346 --0.211622662842 --1.05219742656 --0.1751511693 --0.966538384557 --0.138660918921 --0.966500520706 --0.104143749923 --0.966473430395 --0.0696280635893 --0.96645706892 --0.0351133733056 --0.966451570392 --0.000599179416895 --0.966456770897 -0.0339150065556 --0.966472819448 -0.0684296805412 --0.966499596834 -0.102945324033 --0.966537177563 -0.137462440878 --0.966572672128 -0.173934582621 --0.966538354755 -0.210404932499 --0.966500520706 -0.244922094047 --0.966473445296 -0.27943778038 --0.966457113624 -0.313952490687 --0.966451570391 -0.348466679454 --0.966456770897 -0.382980845869 --0.966472804547 -0.417495526374 --0.966499611735 -0.452011175454 --0.966537207365 -0.486528292298 --0.966572672128 -0.523000434041 --0.966538354755 -0.559470772743 --0.966500535608 -0.593987956643 --0.966473415494 -0.628503620625 --0.966457098723 -0.66301831603 --0.966451555491 -0.697532534599 --0.966456800699 -0.732046738267 --0.966472804547 -0.766561374068 --0.966499626637 -0.80107703805 --0.966537132859 -0.835594132543 --0.966572672128 -0.872066274285 --0.966538354755 -0.90853664279 --0.966500535608 -0.943053781986 --0.966473430395 -0.977569490671 --0.966457083821 -1.01208418608 --0.966451570392 -1.04659837484 --0.966456800699 -1.08111256361 --0.966472804547 -1.11562719941 --0.966499626637 -1.15014284849 --0.966537177563 -1.18466001749 --0.96657268703 -1.22113209963 --0.966538354755 -1.25760248303 --0.966500520706 -1.29211962223 --0.966473445296 -1.32663530111 --0.96645706892 -1.36114999652 --0.966451525688 -1.39566421509 --0.966456800699 -1.43017840385 --0.966472804547 -1.46469309926 --0.966499611735 -1.49920874834 --0.96653714776 -1.53372582793 --0.96657268703 -1.57019799948 --0.966538354755 -1.60666832328 --0.966500535608 -1.64118549228 --0.966473460198 -1.67570120096 --0.966457083821 -1.71021589637 --0.966451555491 -1.74473008514 --0.966456800699 -1.7792442441 --0.966472834349 -1.81375893951 --0.966499626637 -1.84827458858 --0.966537222266 -1.88279169798 --0.966572657227 -1.91926380992 --0.966538354755 -1.95573419333 --0.966500535608 -1.99025136232 --0.966473430395 -2.02476704121 --0.966457054019 -2.05928170681 --0.966451555491 -2.09379589558 --0.966456800699 -2.12831014395 --0.966472804547 -2.16282480955 --0.966499656439 -2.19734048844 --0.966537177563 -2.23185753822 --0.966572672128 -2.26832967996 --0.966538384557 -2.30480009318 --0.966500535608 -2.33931720257 --0.966473445296 -2.37383288145 --0.96645706892 -2.40834760666 --0.966451555491 -2.44286185503 --0.966456800699 -2.47737592459 --0.966472804547 -2.51189059019 --0.966499596834 -2.54640626907 --0.966537177563 -2.58092343807 --0.966572672128 -2.61739546061 --0.966538384557 -2.65386587381 --0.966500535608 -2.68838304281 --0.966473445296 -2.7228987217 --0.96645706892 -2.7574134469 --0.966451555491 -2.79192763567 --0.966456800699 -2.82644182444 --0.96647284925 -2.86095649004 --0.966499611735 -2.89547210932 --0.966537177563 -2.92998927832 --0.966572672128 -2.96646142006 --0.966538384557 -3.00293171406 --0.966500520706 -3.03744888306 --0.966473430395 -3.07196462154 --0.96645706892 -3.10647928715 --0.966451570392 -3.14099344809 --0.966456770897 --3.10767763853 --0.966472819448 --3.07316291333 --0.966499596834 --3.03864735365 --0.966537177563 --3.00413018465 --0.966572672128 --2.96765804291 --0.966538354755 --2.93118774891 --0.966500520706 --2.89667057991 --0.966473445296 --2.86215490103 --0.966457113624 --2.82764017582 --0.966451570391 --2.79312598705 --0.966456770897 --2.75861173868 --0.966472804547 --2.72409707308 --0.966499611735 --2.6895814538 --0.966537207365 --2.65506434441 --0.966572672128 --2.61859220266 --0.966538354755 --2.58212184906 --0.966500535608 --2.54760468006 --0.966473415494 --2.51308906078 --0.966457098723 --2.47857439518 --0.966451555491 --2.4440600872 --0.966456800699 --2.40954595804 --0.966472804547 --2.37503129244 --0.966499626637 --2.34051561356 --0.966537132859 --2.30599856377 --0.966572672128 --2.26952642203 --0.966538354755 --2.23305600881 --0.966500535608 --2.19853883982 --0.966473430395 --2.16402316094 --0.966457083821 --2.12950849533 --0.966451570392 --2.09499424696 --0.966456800699 --2.0604801774 --0.966472804547 --2.02596539259 --0.966499626637 --1.99144974351 --0.966537177563 --1.95693266392 --0.96657268703 --1.92046052217 --0.966538354755 --1.88399016857 --0.966500520706 --1.84947299957 --0.966473445296 --1.81495732069 --0.96645706892 --1.78044262529 --0.966451525688 --1.74592843652 --0.966456800699 --1.71141421795 --0.966472804547 --1.67689955235 --0.966499611735 --1.64238390327 --0.96653714776 --1.60786679387 --0.96657268703 --1.57139465213 --0.966538354755 --1.53492432833 --0.966500535608 --1.50040712952 --0.966473460198 --1.46589145064 --0.966457083821 --1.43137675524 --0.966451555491 --1.39686256647 --0.966456800699 --1.36234840751 --0.966472834349 --1.3278337419 --0.966499626637 --1.29331806302 --0.966537222266 --1.25880092382 --0.966572657227 --1.22232881188 --0.966538354755 --1.18585848808 --0.966500535608 --1.15134131909 --0.966473430395 --1.1168256402 --0.966457054019 --1.0823109448 --0.966451555491 --1.04779672623 --0.966456800699 --1.01328250766 --0.966472804547 --0.978767871857 --0.966499656439 --0.944252222777 --0.966537177563 --0.909735113382 --0.966572672128 --0.873262971639 --0.966538384557 --0.836792588234 --0.966500535608 --0.802275463939 --0.966473445296 --0.767759785056 --0.96645706892 --0.73324508965 --0.966451555491 --0.698730885982 --0.966456800699 --0.664216697216 --0.966472804547 --0.62970200181 --0.966499596834 --0.595186367631 --0.966537177563 --0.560669243336 --0.966572672128 --0.524197116494 --0.966538384557 --0.487726770341 --0.966500535608 --0.453209586442 --0.966473445296 --0.41869392246 --0.96645706892 --0.384179219603 --0.966451555491 --0.349665038288 --0.966456800699 --0.31515083462 --0.96647284925 --0.280636161566 --0.966499611735 --0.246120516211 --0.966537177563 --0.211603403091 --0.966572672128 --0.175131268799 --0.880918979644 --0.138638980687 --0.880883187055 --0.104121992364 --0.880857557058 --0.0696064857766 --0.880842089653 --0.0350919673219 --0.880836904049 --0.000577948754653 --0.880841836333 -0.0339360632934 --0.880857020617 -0.0684505626559 --0.880882367492 -0.102966040373 --0.880917906761 -0.137482985854 --0.88095150888 -0.173955816776 --0.880919009447 -0.210426859558 --0.880883187055 -0.244943846017 --0.880857512355 -0.279459357262 --0.880842074752 -0.313973888755 --0.880836844444 -0.348487891257 --0.880841836333 -0.38300191611 --0.880857020617 -0.417516432702 --0.880882367492 -0.452031895518 --0.880917921662 -0.486548855901 --0.880951493978 -0.523021653295 --0.880918994546 -0.559492707253 --0.880883201956 -0.594009712338 --0.880857542157 -0.628525227308 --0.880842104554 -0.663039743901 --0.880836844444 -0.697553738952 --0.880841806531 -0.732067763805 --0.880856990814 -0.766582280397 --0.880882367492 -0.801097750663 --0.880917921662 -0.835614681244 --0.880951493978 -0.87208750844 --0.880918979644 -0.908558577299 --0.880883172154 -0.943075552583 --0.880857542157 -0.977591067553 --0.880842089653 -1.01210558414 --0.880836859345 -1.0466195941 --0.880841851234 -1.08113360405 --0.880857020617 -1.11564809084 --0.880882367492 -1.15016359091 --0.880917906761 -1.18468055129 --0.880951479077 -1.22115337849 --0.880918994546 -1.25762438774 --0.880883187055 -1.29214143753 --0.880857542157 -1.32665690779 --0.880842089653 -1.36117145419 --0.880836874247 -1.39568543434 --0.88084179163 -1.4301994741 --0.880857005716 -1.46471396088 --0.880882382393 -1.49922943115 --0.880917906761 -1.53374639153 --0.880951493978 -1.57021921873 --0.880918979645 -1.60669025779 --0.880883216858 -1.64120721817 --0.880857542157 -1.67572277784 --0.880842089653 -1.71023729443 --0.880836844444 -1.74475130439 --0.880841836333 -1.77926531434 --0.880856990814 -1.81377983093 --0.880882367492 -1.8482952714 --0.880917906761 -1.88281226158 --0.880951493978 -1.91928505897 --0.880918994546 -1.95575612783 --0.880883201956 -1.99027311802 --0.880857542157 -2.02478861809 --0.880842089653 -2.05930316448 --0.880836844444 -2.09381711483 --0.880841851234 -2.12833112478 --0.880857020617 -2.16284567117 --0.88088235259 -2.19736117124 --0.880917906761 -2.23187804222 --0.880951479077 -2.26835095882 --0.880918979645 -2.30482196808 --0.880883201956 -2.33933901786 --0.880857557058 -2.37385439872 --0.880842074752 -2.40836894512 --0.880836859345 -2.44288301468 --0.880841806531 -2.47739702463 --0.880856990814 -2.51191151142 --0.880882367492 -2.54642701149 --0.880917906761 -2.58094388247 --0.880951493978 -2.61741679907 --0.880919024348 -2.65388786793 --0.880883187055 -2.68840479851 --0.880857542157 -2.72292035818 --0.880842104554 -2.75743490457 --0.880836859345 -2.79194885493 --0.880841776728 -2.82646286488 --0.880856990814 -2.86097735166 --0.88088235259 -2.89549279213 --0.880917906761 -2.93000978231 --0.880951493978 -2.96648257971 --0.880918979644 -3.00295364857 --0.880883187055 -3.03747057915 --0.880857557058 -3.07198619842 --0.880842089653 -3.10650068521 --0.880836904049 -3.14101466735 --0.880841836333 --3.10765659809 --0.880857020617 --3.07314211131 --0.880882367492 --3.03862661123 --0.880917906761 --3.00410962105 --0.88095150888 --2.96763688326 --0.880919009447 --2.9311658144 --0.880883187055 --2.89664888382 --0.880857512355 --2.86213326454 --0.880842074752 --2.82761877776 --0.880836844444 --2.7931047678 --0.880841836333 --2.75859075784 --0.880857020617 --2.72407627106 --0.880882367492 --2.68956077099 --0.880917921662 --2.65504384041 --0.880951493978 --2.61857098341 --0.880918994546 --2.58209997415 --0.880883201956 --2.54758286476 --0.880857542157 --2.5130674839 --0.880842104554 --2.47855293751 --0.880836844444 --2.44403892755 --0.880841806531 --2.409524858 --0.880856990814 --2.37501037121 --0.880882367492 --2.34049487114 --0.880917921662 --2.30597800017 --0.880951493978 --2.26950508356 --0.880918979644 --2.2330340147 --0.880883172154 --2.19851708412 --0.880857542157 --2.16400158405 --0.880842089653 --2.12948709726 --0.880836859345 --2.09497302771 --0.880841851234 --2.06045901775 --0.880857020617 --2.02594453097 --0.880882367492 --1.9914290905 --0.880917906761 --1.95691213012 --0.880951479077 --1.92043927312 --0.880918994546 --1.88396826386 --0.880883187055 --1.84945124388 --0.880857542157 --1.81493571401 --0.880842089653 --1.78042122722 --0.880836874247 --1.74590718746 --0.88084179163 --1.71139320731 --0.880857005716 --1.67687866092 --0.880882382393 --1.64236322045 --0.880917906761 --1.60784628987 --0.880951493978 --1.57137346268 --0.880918979645 --1.53490236401 --0.880883216858 --1.50038540364 --0.880857542157 --1.46586990357 --0.880842089653 --1.43135538697 --0.880836844444 --1.39684134722 --0.880841836333 --1.36232733727 --0.880856990814 --1.32781285047 --0.880882367492 --1.29329735041 --0.880917906761 --1.25878041983 --0.880951493978 --1.22230759263 --0.880918994546 --1.18583655357 --0.880883201956 --1.15131950378 --0.880857542157 --1.11680403352 --0.880842089653 --1.08228951692 --0.880836844444 --1.04777553677 --0.880841851234 --1.01326149702 --0.880857020617 --0.978746980429 --0.88088235259 --0.94423148036 --0.880917906761 --0.909714579582 --0.880951479077 --0.873241722584 --0.880918979645 --0.836770683527 --0.880883201956 --0.802253693342 --0.880857557058 --0.767738193273 --0.880842074752 --0.733223661781 --0.880836859345 --0.698709651828 --0.880841806531 --0.664195656776 --0.880856990814 --0.629681140184 --0.880882367492 --0.595165669918 --0.880917906761 --0.560648724437 --0.880951493978 --0.524175897241 --0.880919024348 --0.487704835832 --0.880883187055 --0.453187853098 --0.880857542157 --0.418672330677 --0.880842104554 --0.384157814086 --0.880836859345 --0.349643804133 --0.880841776728 --0.31512978673 --0.880856990814 --0.28061529249 --0.88088235259 --0.246099807322 --0.880917906761 --0.211582873017 --0.880951493978 --0.17511003837 --0.792528688908 --0.138614024967 --0.792495280504 --0.104097232223 --0.792471304536 --0.0695819184184 --0.792456924915 --0.0350676011294 --0.792452022433 --0.000553778838367 --0.792456686497 -0.0339600369334 --0.792470872402 -0.0684743383899 --0.792494550348 -0.102989617735 --0.792527735233 -0.137506373227 --0.792559087277 -0.173979990184 --0.792528703809 -0.210451826453 --0.792495250702 -0.244968622923 --0.792471319437 -0.279483936727 --0.792456924915 -0.313998259604 --0.792451992631 -0.348512083292 --0.792456656694 -0.383025892079 --0.792470827699 -0.417540192604 --0.792494535446 -0.452055476605 --0.792527735233 -0.486572228372 --0.792559072375 -0.52304585278 --0.79252871871 -0.5595176965 --0.792495250702 -0.594034478068 --0.792471334338 -0.628549799323 --0.792456910014 -0.663064107299 --0.792451992631 -0.697577923536 --0.792456656694 -0.732091739774 --0.792470797896 -0.766606032848 --0.792494535446 -0.8011213094 --0.792527750134 -0.835638046265 --0.792559072375 -0.872111678124 --0.792528703809 -0.908583521843 --0.792495265603 -0.943100318313 --0.792471349239 -0.977615624666 --0.792456910014 -1.01212993264 --0.792451992631 -1.04664376378 --0.792456656694 -1.08115759492 --0.7924708426 -1.11567190289 --0.792494535446 -1.15018716455 --0.792527735233 -1.18470391631 --0.792559087277 -1.22117754817 --0.79252871871 -1.25764936209 --0.792495265603 -1.29216614365 --0.792471334338 -1.32668149471 --0.792456910014 -1.36119583249 --0.79245197773 -1.39570960402 --0.792456686497 -1.43022343516 --0.792470812798 -1.46473774314 --0.792494505644 -1.49925303459 --0.792527750134 -1.53376978636 --0.792559072375 -1.57024335861 --0.792528659105 -1.60671523214 --0.792495250702 -1.64123204351 --0.792471349239 -1.67574733496 --0.792456924915 -1.71026167273 --0.79245197773 -1.74477550387 --0.792456656694 -1.77928930521 --0.7924708426 -1.81380358338 --0.792494535446 -1.84831884504 --0.792527750134 -1.8828356266 --0.792559072375 -1.91930925846 --0.79252871871 -1.95578110218 --0.792495265603 -1.99029785395 --0.792471334338 -2.0248131156 --0.792456910014 -2.05932748318 --0.792451992631 -2.09384131432 --0.792456656694 -2.12835508585 --0.7924708426 -2.16286945343 --0.792494535446 -2.19738471508 --0.792527735233 -2.23190146684 --0.792559087277 -2.2683750987 --0.79252871871 -2.30484694242 --0.792495280504 -2.3393637538 --0.792471349239 -2.37387901545 --0.792456910014 -2.40839338302 --0.792451992631 -2.44290715456 --0.792456656694 -2.47742092609 --0.792470827699 -2.51193529368 --0.792494535446 -2.54645055533 --0.792527750134 -2.58096730709 --0.792559087277 -2.61744099855 --0.79252871871 -2.65391278267 --0.792495265603 -2.68842953443 --0.792471334338 -2.72294491529 --0.792456910014 -2.75745922327 --0.792451992631 -2.79197305441 --0.792456656694 -2.82648688555 --0.792470812798 -2.86100107432 --0.792494535446 -2.89551639557 --0.792527750134 -2.93003320694 --0.792559072375 -2.96650677919 --0.792528688908 -3.00297856331 --0.792495280504 -3.03749549389 --0.792471304536 -3.07201069593 --0.792456924915 -3.10652500391 --0.792452022433 -3.14103892644 --0.792456686497 --3.10763257742 --0.792470872402 --3.07311838865 --0.792494550348 --3.03860300779 --0.792527735233 --3.00408625603 --0.792559087277 --2.96761268378 --0.792528703809 --2.93114089966 --0.792495250702 --2.89662396908 --0.792471319437 --2.86210876703 --0.792456924915 --2.82759439945 --0.792451992631 --2.79308056832 --0.792456656694 --2.75856679678 --0.792470827699 --2.7240524292 --0.792494535446 --2.68953716755 --0.792527735233 --2.65502041578 --0.792559072375 --2.61854678392 --0.79252871871 --2.5820749402 --0.792495250702 --2.54755812883 --0.792471334338 --2.51304280758 --0.792456910014 --2.4785284996 --0.792451992631 --2.44401472807 --0.792456656694 --2.40950095654 --0.792470797896 --2.37498658895 --0.792494535446 --2.3404713273 --0.792527750134 --2.30595457554 --0.792559072375 --2.26948094368 --0.792528703809 --2.23300909996 --0.792495265603 --2.19849234819 --0.792471349239 --2.16397696734 --0.792456910014 --2.12946265936 --0.792451992631 --2.09494888782 --0.792456656694 --2.06043499708 --0.7924708426 --2.02592080831 --0.792494535446 --1.99140545726 --0.792527735233 --1.95688870549 --0.792559087277 --1.92041513324 --0.79252871871 --1.88394328952 --0.792495265603 --1.84942647815 --0.792471334338 --1.8149111867 --0.792456910014 --1.78039684892 --0.79245197773 --1.74588301778 --0.792456686497 --1.71136918664 --0.792470812798 --1.67685493827 --0.792494505644 --1.64233964681 --0.792527750134 --1.60782289505 --0.792559072375 --1.57134926319 --0.792528659105 --1.53487744928 --0.792495250702 --1.5003606379 --0.792471349239 --1.46584534645 --0.792456924915 --1.43133100867 --0.79245197773 --1.39681720734 --0.792456656694 --1.362303406 --0.7924708426 --1.32778903842 --0.792494535446 --1.29327377677 --0.792527750134 --1.258757025 --0.792559072375 --1.22228339315 --0.79252871871 --1.18581157923 --0.792495265603 --1.15129479766 --0.792471334338 --1.1167794466 --0.792456910014 --1.08226516843 --0.792451992631 --1.04775133729 --0.792456656694 --1.01323750615 --0.7924708426 --0.978723213077 --0.792494535446 --0.944207921624 --0.792527735233 --0.909691140056 --0.792559087277 --0.873217537999 --0.79252871871 --0.836745709181 --0.792495280504 --0.802228927612 --0.792471349239 --0.76771363616 --0.792456910014 --0.733199313283 --0.792451992631 --0.698685467243 --0.792456656694 --0.664171665907 --0.792470827699 --0.629657357931 --0.792494535446 --0.59514208138 --0.792527750134 --0.560625329614 --0.792559087277 --0.524151697755 --0.79252871871 --0.487679876387 --0.792495265603 --0.453163072467 --0.792471334338 --0.418647781015 --0.792456910014 --0.384133450687 --0.792451992631 --0.34961964935 --0.792456656694 --0.315105810762 --0.792470812798 --0.280591517687 --0.792494535446 --0.246076226235 --0.792527750134 --0.211559481919 --0.792559072375 --0.175085861236 --0.704288139939 --0.138586383313 --0.704257398844 --0.104069806636 --0.704235315323 --0.0695547107607 --0.704222068191 --0.0350406127982 --0.70421756804 --0.000527010764928 --0.704221859574 -0.0339865852148 --0.704234883189 -0.0685006668791 --0.704256743193 -0.103015726432 --0.704287305474 -0.13753226772 --0.704316139221 -0.174006767571 --0.704288139939 -0.210479468107 --0.704257383942 -0.244996037334 --0.704235315323 -0.279511131346 --0.704222038388 -0.314025238157 --0.70421756804 -0.348538838327 --0.704221859575 -0.383052431047 --0.704234912992 -0.417566522956 --0.704256758094 -0.452081568539 --0.704287320376 -0.486598111689 --0.70431612432 -0.523072615266 --0.704288154841 -0.559545308352 --0.70425735414 -0.594061911106 --0.704235330224 -0.62857696414 --0.704222038388 -0.663091093302 --0.704217538237 -0.697604700923 --0.704221844673 -0.732118293643 --0.704234912992 -0.766632348299 --0.704256758094 -0.801147431135 --0.704287320376 -0.835663959384 --0.704316139221 -0.872138485313 --0.704288154841 -0.908611178398 --0.704257369041 -0.94312773645 --0.704235330224 -0.977642849088 --0.704222053289 -1.01215690375 --0.704217553139 -1.04667052626 --0.704221844673 -1.08118414879 --0.704234912992 -1.11569821835 --0.704256743193 -1.15021327138 --0.704287320376 -1.18472981453 --0.704316139221 -1.22120431066 --0.704288154841 -1.25767704845 --0.704257369041 -1.2921935916 --0.704235330224 -1.32670870424 --0.704222053289 -1.36122280359 --0.704217538237 -1.39573639631 --0.704221889377 -1.43024995923 --0.704234912992 -1.46476405859 --0.704256772995 -1.49927914143 --0.704287335277 -1.53379565478 --0.704316154122 -1.5702701807 --0.704288125038 -1.60674285889 --0.704257383943 -1.64125949145 --0.704235330224 -1.67577454448 --0.70422205329 -1.71028864384 --0.704217538237 -1.74480223656 --0.704221844673 -1.77931582928 --0.704234912992 -1.81382992864 --0.704256772995 -1.84834498167 --0.704287305474 -1.88286149502 --0.704316154122 -1.91933602094 --0.704288169742 -1.95580872894 --0.704257369041 -1.99032527208 --0.704235345125 -2.02484041452 --0.70422205329 -2.05935448408 --0.70421756804 -2.0938680768 --0.704221844673 -2.12838166952 --0.704234898091 -2.16289579868 --0.704256758094 -2.19741082192 --0.704287320376 -2.23192739487 --0.70431612432 -2.26840180159 --0.704288139939 -2.30487459898 --0.704257383943 -2.33939111232 --0.704235330224 -2.37390619517 --0.704222038388 -2.40842032433 --0.70421756804 -2.44293391705 --0.704221859574 -2.47744756937 --0.704234912992 -2.51196163893 --0.704256743193 -2.54647666216 --0.704287320376 -2.58099323511 --0.704316139221 -2.61746770144 --0.704288125038 -2.65394037962 --0.704257383943 -2.68845707178 --0.704235345125 -2.72297215462 --0.704222068191 -2.75748622418 --0.704217553139 -2.7919998169 --0.704221844673 -2.82651335001 --0.704234898091 -2.86102741957 --0.704256758094 -2.8955425024 --0.704287320376 -2.93005907535 --0.704316154122 -2.96653360128 --0.704288139939 -3.00300627947 --0.704257398844 -3.03752285242 --0.704235315323 -3.07203799486 --0.704222068191 -3.10655200481 --0.70421756804 -3.14106562932 --0.704221859574 --3.10760611296 --0.704234883189 --3.0730920434 --0.704256743193 --3.03857696056 --0.704287305474 --3.00406038761 --0.704316139221 --2.96758586169 --0.704288139939 --2.9311131835 --0.704257383942 --2.89659661055 --0.704235315323 --2.8620814681 --0.704222038388 --2.82756745815 --0.70421756804 --2.79305380583 --0.704221859575 --2.75854021311 --0.704234912992 --2.72402614355 --0.704256758094 --2.68951106071 --0.704287320376 --2.65499454737 --0.70431612432 --2.61852002144 --0.704288154841 --2.58204728365 --0.70425735414 --2.5475307703 --0.704235330224 --2.51301568746 --0.704222038388 --2.4785015583 --0.704217538237 --2.44398796558 --0.704221844673 --2.40947437286 --0.704234912992 --2.37496030331 --0.704256758094 --2.34044522047 --0.704287320376 --2.30592870713 --0.704316139221 --2.26945418119 --0.704288154841 --2.23298150301 --0.704257369041 --2.19846487045 --0.704235330224 --2.16394972801 --0.704222053289 --2.12943571806 --0.704217553139 --2.09492218494 --0.704221844673 --2.06040853262 --0.704234912992 --2.02589446306 --0.704256743193 --1.99137935042 --0.704287320376 --1.95686283708 --0.704316139221 --1.92038834095 --0.704288154841 --1.88391563296 --0.704257369041 --1.84939903021 --0.704235330224 --1.81488397718 --0.704222053289 --1.78036984801 --0.704217538237 --1.74585622549 --0.704221889377 --1.71134269237 --0.704234912992 --1.67682859302 --0.704256772995 --1.64231353998 --0.704287335277 --1.60779696703 --0.704316154122 --1.5713224709 --0.704288125038 --1.53484976291 --0.704257383943 --1.50033321977 --0.704235330224 --1.46581813693 --0.70422205329 --1.43130403757 --0.704217538237 --1.39679044485 --0.704221844673 --1.36227682233 --0.704234912992 --1.32776272297 --0.704256772995 --1.29324766993 --0.704287305474 --1.25873112678 --0.704316154122 --1.22225663066 --0.704288169742 --1.18578395247 --0.704257369041 --1.15126734972 --0.704235345125 --1.11675223708 --0.70422205329 --1.08223816752 --0.70421756804 --1.047724545 --0.704221844673 --1.01321098208 --0.704234898091 --0.978696882725 --0.704256758094 --0.944181829691 --0.704287320376 --0.90966527164 --0.70431612432 --0.873190805316 --0.704288139939 --0.836718112231 --0.704257383943 --0.802201494574 --0.704235330224 --0.767686426639 --0.704222038388 --0.733172312379 --0.70421756804 --0.698658719659 --0.704221859574 --0.664145112037 --0.704234912992 --0.629631012678 --0.704256743193 --0.595115959644 --0.704287320376 --0.560599416495 --0.704316139221 --0.524124935269 --0.704288125038 --0.487652227283 --0.704257383943 --0.453135646879 --0.704235345125 --0.418620556593 --0.704222068191 --0.384106464684 --0.704217553139 --0.349592871964 --0.704221844673 --0.315079256892 --0.704234898091 --0.280565187335 --0.704256758094 --0.246050115675 --0.704287320376 --0.211533587426 --0.704316154122 --0.1750590913 --0.618687704206 --0.138557210565 --0.618659839034 --0.104040872305 --0.618639871478 --0.0695260176435 --0.618627846241 --0.0350121473893 --0.618623748422 --0.000498776789755 --0.618627622724 -0.0340145882219 --0.618639528751 -0.0685284389183 --0.618659287691 -0.103043265641 --0.618686974049 -0.137559577823 --0.61871317029 -0.174035008997 --0.618687793613 -0.21050862968 --0.618659839034 -0.245024975389 --0.618639871478 -0.279539845884 --0.618627846241 -0.314053691924 --0.618623748422 -0.348567068577 --0.618627652526 -0.383080430329 --0.618639498949 -0.41759429127 --0.618659317494 -0.452109120786 --0.618687033653 -0.486625425517 --0.618713140488 -0.523100838065 --0.61868776381 -0.559574455023 --0.618659839034 -0.594090819359 --0.618639871478 -0.628605678678 --0.618627846241 -0.663119569421 --0.618623763323 -0.697632923723 --0.618627682328 -0.732146278024 --0.618639498949 -0.766660138965 --0.618659317494 -0.801174998284 --0.618687033653 -0.835691273212 --0.618713140488 -0.872166708112 --0.618687793613 -0.908640339971 --0.618659839034 -0.943156674505 --0.618639841676 -0.977671518922 --0.618627846241 -1.01218539476 --0.618623748422 -1.04669877887 --0.618627652526 -1.08121213317 --0.618639498949 -1.11572599411 --0.618659317494 -1.15024083853 --0.618687033653 -1.18475714326 --0.61871317029 -1.22123256326 --0.618687793613 -1.25770619511 --0.618659839034 -1.29222252965 --0.618639871478 -1.32673737406 --0.618627846241 -1.36125126481 --0.618623748422 -1.39576461911 --0.618627682328 -1.43027797341 --0.618639528751 -1.46479183435 --0.618659332395 -1.49930667877 --0.618687003851 -1.5338229835 --0.618713140488 -1.5702983737 --0.618687793613 -1.60677203536 --0.618659839034 -1.6412883699 --0.618639841676 -1.67580324411 --0.618627816438 -1.71031707525 --0.618623748422 -1.74483048916 --0.618627652526 -1.77934384346 --0.618639558554 -1.8138577044 --0.618659317494 -1.84837251902 --0.618687033653 -1.88288882375 --0.618713140488 -1.91936427354 --0.618687734008 -1.95583790541 --0.618659839034 -1.99035423994 --0.618639871478 -2.02486908436 --0.618627846241 -2.0593829155 --0.618623748422 -2.09389632941 --0.618627682328 -2.1284096837 --0.618639498949 -2.16292351484 --0.618659317494 -2.19743829966 --0.618687033653 -2.23195463419 --0.618713140488 -2.26843011379 --0.61868776381 -2.30490374565 --0.618659839034 -2.33942008019 --0.618639841676 -2.3739349246 --0.618627846241 -2.40844887495 --0.618623748422 -2.44296211004 --0.618627652526 -2.47747552395 --0.618639528751 -2.51198935509 --0.618659317494 -2.54650425911 --0.618687033653 -2.58102053404 --0.618713140488 -2.61749595403 --0.61868776381 -2.65396952629 --0.618659839034 -2.68848592043 --0.618639871478 -2.72300082445 --0.618627846241 -2.75751465559 --0.618623748422 -2.7920280695 --0.618627682328 -2.8265413642 --0.618639498949 -2.86105525494 --0.618659317494 -2.89557009935 --0.618687033653 -2.93008637428 --0.618713140488 -2.96656179428 --0.618687704206 -3.00303542614 --0.618659839034 -3.03755176067 --0.618639871478 -3.07206660509 --0.618627846241 -3.10658043623 --0.618623748422 -3.14109394153 --0.618627622724 --3.10757809877 --0.618639528751 --3.07306414842 --0.618659287691 --3.03854936361 --0.618686974049 --3.00403308868 --0.61871317029 --2.96755766869 --0.618687793613 --2.93108397722 --0.618659839034 --2.89656770229 --0.618639871478 --2.86205285788 --0.618627846241 --2.82753902674 --0.618623748422 --2.79302555323 --0.618627652526 --2.75851225853 --0.618639498949 --2.72399836778 --0.618659317494 --2.68948358297 --0.618687033653 --2.65496724844 --0.618713140488 --2.61849176884 --0.61868776381 --2.58201813698 --0.618659839034 --2.54750180244 --0.618639871478 --2.51298701763 --0.618627846241 --2.47847300768 --0.618623763323 --2.44395977258 --0.618627682328 --2.40944635868 --0.618639498949 --2.37493252754 --0.618659317494 --2.34041768313 --0.618687033653 --2.3059014082 --0.618713140488 --2.2694259286 --0.618687793613 --2.23295235634 --0.618659839034 --2.1984359622 --0.618639841676 --2.16392105818 --0.618627846241 --2.12940722704 --0.618623748422 --2.09489387274 --0.618627652526 --2.06038051844 --0.618639498949 --2.02586662769 --0.618659317494 --1.99135178327 --0.618687033653 --1.95683550835 --0.61871317029 --1.92036011815 --0.618687793613 --1.88388648629 --0.618659839034 --1.84937015176 --0.618639871478 --1.81485524773 --0.618627846241 --1.78034138679 --0.618623748422 --1.74582803249 --0.618627682328 --1.71131467819 --0.618639528751 --1.67680081725 --0.618659332395 --1.64228600264 --0.618687003851 --1.6077696979 --0.618713140488 --1.57129424811 --0.618687793613 --1.53482061624 --0.618659839034 --1.50030425191 --0.618639841676 --1.46578940749 --0.618627816438 --1.43127554655 --0.618623748422 --1.39676216245 --0.618627652526 --1.36224880814 --0.618639558554 --1.32773497701 --0.618659317494 --1.29322010279 --0.618687033653 --1.25870382786 --0.618713140488 --1.22222837806 --0.618687734008 --1.185754776 --0.618659839034 --1.15123841167 --0.618639871478 --1.11672356725 --0.618627846241 --1.08220970631 --0.618623748422 --1.0476963222 --0.618627682328 --1.0131829381 --0.618639498949 --0.978669121862 --0.618659317494 --0.944154277444 --0.618687033653 --0.909637987614 --0.618713140488 --0.873162552714 --0.61868776381 --0.836688920856 --0.618659839034 --0.802172586322 --0.618639841676 --0.767657727003 --0.618627846241 --0.733143821359 --0.618623748422 --0.698630467057 --0.618627652526 --0.664117112756 --0.618639528751 --0.629603251815 --0.618659317494 --0.595088437199 --0.618687033653 --0.560572132468 --0.618713140488 --0.524096682667 --0.61868776381 --0.48762306571 --0.618659839034 --0.453106731177 --0.618639871478 --0.418591864407 --0.618627846241 --0.384077988565 --0.618623748422 --0.349564611912 --0.618627682328 --0.31505125761 --0.618639498949 --0.280537411571 --0.618659317494 --0.246022574604 --0.618687033653 --0.211506273598 --0.618713140488 --0.175030846149 --0.533080592751 --0.13852667436 --0.533055871725 --0.104010572657 --0.533038184047 --0.0694959582761 --0.533027485013 --0.0349823324941 --0.533023878932 --0.000469203805547 --0.533027350903 -0.0340439183638 --0.53303784132 -0.0685575269163 --0.53305542469 -0.103072123602 --0.533080041408 -0.137588184327 --0.53310315311 -0.174064576626 --0.533080622554 -0.21053917706 --0.533055871725 -0.245055273175 --0.533038154244 -0.279569886625 --0.533027485013 -0.314083516598 --0.53302384913 -0.348596639931 --0.533027350902 -0.383109770715 --0.533037871122 -0.417623378336 --0.53305542469 -0.452137976885 --0.533080041408 -0.486654028296 --0.53310315311 -0.523130446672 --0.533080622554 -0.559605017304 --0.533055871725 -0.594121128321 --0.533038124442 -0.628635764122 --0.53302745521 -0.663149371743 --0.53302384913 -0.697662502527 --0.533027380705 -0.73217561841 --0.533037871122 -0.76668921113 --0.53305542469 -0.801203802228 --0.533080041408 -0.835719898343 --0.53310315311 -0.872196286917 --0.533080622554 -0.908670857549 --0.533055871725 -0.943186953664 --0.533038124442 -0.977701574564 --0.533027485013 -1.01221522689 --0.533023878932 -1.04672834277 --0.533027350902 -1.08124145866 --0.533037871122 -1.11575505137 --0.53305542469 -1.15026968717 --0.533080041408 -1.18478575349 --0.53310315311 -1.22126212716 --0.533080592752 -1.2577367425 --0.533055871725 -1.29225286841 --0.533038154244 -1.32676744461 --0.53302745521 -1.36128106714 --0.53302384913 -1.39579418302 --0.533027350903 -1.4303073287 --0.533037856221 -1.46482095122 --0.533055394888 -1.49933552742 --0.533080041408 -1.53385156393 --0.533103182912 -1.57032799721 --0.533080592752 -1.60680258274 --0.533055856824 -1.64131864906 --0.533038154244 -1.67583331466 --0.533027485013 -1.71034693718 --0.53302384913 -1.74486005306 --0.533027350902 -1.77937316895 --0.533037871122 -1.81388679147 --0.533055394888 -1.84840136766 --0.533080041408 -1.88291743397 --0.53310315311 -1.91939380765 --0.533080622554 -1.95586842299 --0.533055871725 -1.9903845489 --0.533038154244 -2.0248991847 --0.533027485013 -2.05941277742 --0.53302384913 -2.09392589331 --0.533027350903 -2.12843900919 --0.533037871122 -2.16295266151 --0.53305542469 -2.19746726751 --0.533080041408 -2.23198330402 --0.53310315311 -2.26845967769 --0.533080622554 -2.30493426323 --0.533055871725 -2.33945035935 --0.533038154244 -2.37396496534 --0.533027485013 -2.40847855807 --0.53302384913 -2.44299179316 --0.533027380705 -2.47750484943 --0.533037856221 -2.51201850176 --0.53305542469 -2.54653304816 --0.533080041408 -2.58104914427 --0.533103182912 -2.61752557754 --0.533080592752 -2.65400016308 --0.533055871725 -2.68851619959 --0.533038184047 -2.72303080559 --0.53302745521 -2.75754451752 --0.533023878932 -2.79205757379 --0.533027350902 -2.82657074928 --0.533037871122 -2.8610842824 --0.53305542469 -2.8955988884 --0.533080041408 -2.93011492491 --0.533103182912 -2.96659135819 --0.533080592751 -3.00306594372 --0.533055871725 -3.03758209944 --0.533038184047 -3.07209676504 --0.533027485013 -3.10661035776 --0.533023878932 -3.14112344582 --0.533027350903 --3.10754871368 --0.53303784132 --3.07303518057 --0.53305542469 --3.03852051497 --0.533080041408 --3.00400453806 --0.53310315311 --2.96752810478 --0.533080622554 --2.93105351925 --0.533055871725 --2.89653736353 --0.533038154244 --2.86202269793 --0.533027485013 --2.8275091052 --0.53302384913 --2.79299604893 --0.533027350902 --2.75848287344 --0.533037871122 --2.72396922111 --0.53305542469 --2.68945461511 --0.533080041408 --2.65493857861 --0.53310315311 --2.61846226454 --0.533080622554 --2.581987679 --0.533055871725 --2.54747152328 --0.533038124442 --2.51295691728 --0.53302745521 --2.47844332457 --0.53302384913 --2.44393008947 --0.533027380705 --2.4094170332 --0.533037871122 --2.37490338087 --0.53305542469 --2.34038883448 --0.533080041408 --2.30587273836 --0.53310315311 --2.26939636469 --0.533080622554 --2.23292171955 --0.533055871725 --2.19840574264 --0.533038124442 --2.16389113665 --0.533027485013 --2.12937742472 --0.533023878932 --2.09486430883 --0.533027350902 --2.06035113334 --0.533037871122 --2.02583760023 --0.53305542469 --1.99132299423 --0.533080041408 --1.95680689812 --0.53310315311 --1.92033049464 --0.533080592752 --1.88385590911 --0.533055871725 --1.8493398726 --0.533038154244 --1.81482520699 --0.53302745521 --1.78031155467 --0.53302384913 --1.74579846859 --0.533027350903 --1.71128535271 --0.533037856221 --1.67677173019 --0.533055394888 --1.64225712418 --0.533080041408 --1.60774108768 --0.533103182912 --1.571264714 --0.533080592752 --1.53479009867 --0.533055856824 --1.50027397275 --0.533038154244 --1.46575936675 --0.533027485013 --1.43124574423 --0.53302384913 --1.39673259854 --0.533027350902 --1.36221948266 --0.533037871122 --1.32770586014 --0.533055394888 --1.29319125414 --0.533080041408 --1.25867518783 --0.53310315311 --1.22219881415 --0.533080622554 --1.18572422862 --0.533055871725 --1.1512081027 --0.533038154244 --1.11669352651 --0.533027485013 --1.08217987418 --0.53302384913 --1.0476667583 --0.533027350903 --1.01315361262 --0.533037871122 --0.978640034795 --0.53305542469 --0.944125428796 --0.533080041408 --0.909609377384 --0.53310315311 --0.873132973909 --0.533080622554 --0.836658388376 --0.533055871725 --0.802142262459 --0.533038154244 --0.767627641559 --0.533027485013 --0.733114033937 --0.53302384913 --0.698600888252 --0.533027380705 --0.66408778727 --0.533037856221 --0.629574179649 --0.53305542469 --0.595059558749 --0.533080041408 --0.56054353714 --0.533103182912 --0.524067133665 --0.533080592752 --0.487592510879 --0.533055871725 --0.453076414764 --0.533038184047 --0.418561793864 --0.53302745521 --0.384048171341 --0.533023878932 --0.349535048008 --0.533027350902 --0.315021932125 --0.533037871122 --0.280508324504 --0.53305542469 --0.245993729681 --0.533080041408 --0.211477655918 --0.533103182912 --0.175001271069 --0.444497652352 --0.138493999839 --0.444476462901 --0.103978158906 --0.444461300969 --0.0694637997076 --0.444452166558 --0.0349504328333 --0.444449074567 --0.0004375660792 --0.444452047348 -0.0340752960183 --0.444461047649 -0.068588649854 --0.444476135075 -0.103102982044 --0.444497197866 -0.137618795038 --0.444516979158 -0.174096226692 --0.44449763 -0.210571851582 --0.444476462901 -0.245087690651 --0.444461300969 -0.27960203588 --0.444452166558 -0.314115419984 --0.444449074567 -0.348628282547 --0.444452047348 -0.38314114511 --0.444461092353 -0.417654499412 --0.444476112723 -0.452168829739 --0.444497197866 -0.486684657633 --0.44451700151 -0.523162081838 --0.44449763 -0.559637710452 --0.444476440549 -0.594153553247 --0.444461300969 -0.628667905927 --0.444452166558 -0.663181245327 --0.444449074567 -0.697694137692 --0.4444520697 -0.732206970453 --0.444461092353 -0.766720324755 --0.444476112723 -0.801234692336 --0.444497197866 -0.835750490427 --0.444516979158 -0.872227922082 --0.444497652351 -0.908703550696 --0.444476485252 -0.943219423294 --0.444461300969 -0.977733746171 --0.444452166558 -1.01224711537 --0.444449074567 -1.04675999284 --0.4444520697 -1.0812728405 --0.444461070001 -1.1157861948 --0.444476157427 -1.15030050278 --0.444497197866 -1.18481639027 --0.444516979158 -1.22129377723 --0.444497674703 -1.25776943564 --0.444476485252 -1.29228520393 --0.444461300969 -1.32679960132 --0.444452166558 -1.36131298542 --0.444449074567 -1.39582580328 --0.4444520697 -1.43033868075 --0.444461070001 -1.46485206485 --0.444476135075 -1.49936640262 --0.444497197866 -1.53388217091 --0.444516979158 -1.57035964728 --0.44449763 -1.60683524609 --0.444476462901 -1.64135110378 --0.444461300969 -1.67586547136 --0.44445219636 -1.71037879586 --0.444449074567 -1.74489170313 --0.444452047348 -1.77940455079 --0.444461070001 -1.81391787529 --0.444476112723 -1.84843221307 --0.444497197866 -1.88294807076 --0.444516979158 -1.91942545772 --0.444497607648 -1.95590111614 --0.444476485252 -1.99041694403 --0.444461300969 -2.02493131161 --0.444452166558 -2.05944466591 --0.444449074567 -2.09395754337 --0.444452047348 -2.12847042084 --0.444461070001 -2.16298371553 --0.444476135075 -2.19749808311 --0.444497197866 -2.23201394081 --0.44451700151 -2.26849132777 --0.444497652352 -2.30496692658 --0.444476462901 -2.33948284388 --0.444461300969 -2.37399721145 --0.444452166558 -2.40851056576 --0.444449074567 -2.44302332401 --0.4444520697 -2.47753626108 --0.444461070001 -2.51204961539 --0.444476135075 -2.54656392336 --0.444497197866 -2.58107972145 --0.444516979158 -2.61755716801 --0.444497652351 -2.65403282642 --0.444476440549 -2.68854868412 --0.444461300969 -2.7230629921 --0.444452166558 -2.7575763464 --0.444449074567 -2.79208922386 --0.4444520697 -2.82660210132 --0.444461070001 -2.86111545563 --0.444476112723 -2.89562982321 --0.444497197866 -2.93014556169 --0.444516979158 -2.96662306786 --0.444497652352 -3.00309872627 --0.444476462901 -3.03761446476 --0.444461300969 -3.07212889195 --0.444452166558 -3.10664218665 --0.444449074567 -3.14115503629 --0.444452047348 --3.10751736164 --0.444461047649 --3.07300400734 --0.444476135075 --3.03848963976 --0.444497197866 --3.00397390128 --0.444516979158 --2.96749639511 --0.44449763 --2.93102073669 --0.444476462901 --2.8965049982 --0.444461300969 --2.86199057102 --0.444452166558 --2.82747721672 --0.444449074567 --2.79296433926 --0.444452047348 --2.7584515214 --0.444461092353 --2.7239381671 --0.444476112723 --2.68942379951 --0.444497197866 --2.65490800142 --0.44451700151 --2.61843061447 --0.44449763 --2.58195495606 --0.444476440549 --2.54743909835 --0.444461300969 --2.51292473078 --0.444452166558 --2.47841137647 --0.444449074567 --2.44389855862 --0.4444520697 --2.40938568115 --0.444461092353 --2.37487232685 --0.444476112723 --2.34035795927 --0.444497197866 --2.30584216118 --0.444516979158 --2.26936477423 --0.444497652351 --2.23288917541 --0.444476485252 --2.19837319851 --0.444461300969 --2.16385889054 --0.444452166558 --2.12934553623 --0.444449074567 --2.09483271838 --0.4444520697 --2.06031984091 --0.444461070001 --2.025806427 --0.444476157427 --1.99129211903 --0.444497197866 --1.95677632093 --0.444516979158 --1.92029887438 --0.444497674703 --1.88382327557 --0.444476485252 --1.84930741787 --0.444461300969 --1.81479305029 --0.444452166558 --1.78027966618 --0.444449074567 --1.74576681852 --0.4444520697 --1.71125394106 --0.444461070001 --1.67674058676 --0.444476135075 --1.64222627878 --0.444497197866 --1.60771045089 --0.444516979158 --1.57123306394 --0.44449763 --1.53475740552 --0.444476462901 --1.50024154782 --0.444461300969 --1.46572721004 --0.44445219636 --1.43121382594 --0.444449074567 --1.39670094848 --0.444452047348 --1.36218810081 --0.444461070001 --1.32767474652 --0.444476112723 --1.29316043854 --0.444497197866 --1.25864461064 --0.444516979158 --1.22216716409 --0.444497607648 --1.18569156528 --0.444476485252 --1.15117573739 --0.444461300969 --1.1166613698 --0.444452166558 --1.08214795589 --0.444449074567 --1.04763510823 --0.444452047348 --1.01312226057 --0.444461070001 --0.978608906269 --0.444476135075 --0.944094568491 --0.444497197866 --0.909578740597 --0.44451700151 --0.873101323843 --0.444497652352 --0.836625695229 --0.444476462901 --0.802109852433 --0.444461300969 --0.767595484853 --0.444452166558 --0.733082130551 --0.444449074567 --0.698569282889 --0.4444520697 --0.664056405425 --0.444461070001 --0.629543051124 --0.444476135075 --0.595028713346 --0.444497197866 --0.560512900353 --0.444516979158 --0.524035483599 --0.444497652351 --0.487559847534 --0.444476440549 --0.453043997288 --0.444461300969 --0.41852966696 --0.444452166558 --0.384016275406 --0.444449074567 --0.349503405392 --0.4444520697 --0.31499055773 --0.444461070001 --0.280477181077 --0.444476112723 --0.245962865651 --0.444497197866 --0.211447056383 --0.444516979158 --0.174969621003 --0.355318836868 --0.138458169996 --0.355301506818 --0.103942602873 --0.355289109051 --0.0694285277277 --0.355281628668 --0.0349154528231 --0.355279162526 --0.00040286965668 --0.355281569064 -0.0341097088531 --0.355288945138 -0.0686227818951 --0.3553012833 -0.103136831895 --0.355318494141 -0.137652371079 --0.355334654451 -0.174130927771 --0.355318836868 -0.210607681424 --0.355301506818 -0.245123241097 --0.355289109051 -0.279637329281 --0.355281628668 -0.314150393009 --0.355279162526 -0.348662987351 --0.355281569064 -0.383175566793 --0.355288945138 -0.417688630522 --0.355301260948 -0.452202685177 --0.355318471789 -0.48671822995 --0.355334624648 -0.523196771741 --0.355318814516 -0.559673547744 --0.355301506818 -0.594189092517 --0.355289109051 -0.628703191877 --0.355281628668 -0.663216233253 --0.355279162526 -0.697728842497 --0.355281591415 -0.732241407037 --0.355288945138 -0.766754493117 --0.3553012833 -0.801268517971 --0.355318471789 -0.835784062743 --0.355334639549 -0.872262611985 --0.355318836868 -0.908739387989 --0.355301484466 -0.943254962564 --0.355289109051 -0.97776901722 --0.35528165102 -1.0122820735 --0.355279162526 -1.04679468274 --0.355281569064 -1.08130729198 --0.355288945138 -1.11582031846 --0.3553012833 -1.15033438802 --0.355318471789 -1.18484991789 --0.355334639549 -1.22132846713 --0.355318836868 -1.25780522824 --0.355301506818 -1.29232078791 --0.355289109051 -1.32683485746 --0.35528165102 -1.36134791374 --0.355279162526 -1.39586052299 --0.355281591415 -1.43037310243 --0.355288945138 -1.4648861587 --0.3553012833 -1.49940025806 --0.355318471789 -1.53391578794 --0.355334639549 -1.57039430738 --0.355318814516 -1.60687109828 --0.355301484466 -1.64138665795 --0.355289109051 -1.67590072751 --0.35528165102 -1.71041381359 --0.355279162526 -1.74492639303 --0.355281569064 -1.77943897247 --0.35528896749 -1.81395202875 --0.3553012833 -1.84846606851 --0.355318471789 -1.88298159838 --0.355334639549 -1.91946020722 --0.355318836868 -1.95593693853 --0.355301506818 -1.9904524684 --0.355289109051 -2.02496653796 --0.35528165102 -2.05947965383 --0.355279162526 -2.09399223327 --0.355281591415 -2.12850487232 --0.355288922786 -2.16301786899 --0.3553012833 -2.19753187895 --0.355318471789 -2.23204743862 --0.355334639549 -2.26852601766 --0.355318836868 -2.30500274897 --0.355301506818 -2.33951830864 --0.355289109051 -2.3740323782 --0.35528165102 -2.40854543447 --0.355279162526 -2.44305807352 --0.355281569064 -2.47757065296 --0.35528896749 -2.51208370924 --0.355301260948 -2.5465977788 --0.355318471789 -2.58111333847 --0.355334639549 -2.61759185791 --0.355318836868 -2.65406864881 --0.355301506818 -2.68858420849 --0.355289109051 -2.72309827805 --0.355281628668 -2.75761133432 --0.355279162526 -2.79212397337 --0.355281569064 -2.8266364336 --0.355288945138 -2.86114960909 --0.3553012833 -2.89566361904 --0.355318471789 -2.93017917871 --0.355334661901 -2.96665775776 --0.355318836868 -3.00313448906 --0.355301506818 -3.03765004873 --0.355289109051 -3.07216411829 --0.355281628668 -3.10667717457 --0.355279162526 -3.1411898454 --0.355281569064 --3.10748302936 --0.355288945138 --3.07296985388 --0.3553012833 --3.03845584393 --0.355318494141 --3.00394028425 --0.355334654451 --2.96746170521 --0.355318836868 --2.9309849739 --0.355301506818 --2.89646947384 --0.355289109051 --2.86195534468 --0.355281628668 --2.82744222879 --0.355279162526 --2.79292964935 --0.355281569064 --2.75841701031 --0.355288945138 --2.72390401363 --0.355301260948 --2.68939000368 --0.355318471789 --2.65487444401 --0.355334624648 --2.61839586496 --0.355318814516 --2.58191913366 --0.355301506818 --2.54740357399 --0.355289109051 --2.51288944483 --0.355281628668 --2.47837644815 --0.355279162526 --2.44386386871 --0.355281591415 --2.40935122966 --0.355288945138 --2.37483817339 --0.3553012833 --2.34032410383 --0.355318471789 --2.30580866337 --0.355334639549 --2.26933008433 --0.355318836868 --2.23285323381 --0.355301484466 --2.19833767414 --0.355289109051 --2.16382360458 --0.35528165102 --2.12931054831 --0.355279162526 --2.09479796887 --0.355281569064 --2.06028544903 --0.355288945138 --2.02577227354 --0.3553012833 --1.99125826359 --0.355318471789 --1.95674273372 --0.355334639549 --1.92026415467 --0.355318836868 --1.88378742337 --0.355301506818 --1.8492718339 --0.355289109051 --1.81475776434 --0.35528165102 --1.78024470806 --0.355279162526 --1.74573212862 --0.355281591415 --1.71121954918 --0.355288945138 --1.6767064631 --0.3553012833 --1.64219242335 --0.355318471789 --1.60767689348 --0.355334639549 --1.57119831443 --0.355318814516 --1.53472155333 --0.355301484466 --1.50020602346 --0.355289109051 --1.46569192409 --0.35528165102 --1.43117886782 --0.355279162526 --1.39666625857 --0.355281569064 --1.36215370893 --0.35528896749 --1.32764062285 --0.3553012833 --1.2931265831 --0.355318471789 --1.25861102343 --0.355334639549 --1.22213247418 --0.355318836868 --1.18565571308 --0.355301506818 --1.15114015341 --0.355289109051 --1.11662608385 --0.35528165102 --1.08211302757 --0.355279162526 --1.04760041833 --0.355281591415 --1.01308783889 --0.355288922786 --0.978574737906 --0.3553012833 --0.944060727954 --0.355318471789 --0.909545168281 --0.355334639549 --0.87306663394 --0.355318836868 --0.836589872837 --0.355301506818 --0.802074328065 --0.355289109051 --0.767560243607 --0.35528165102 --0.733047157526 --0.355279162526 --0.698534563184 --0.355281569064 --0.664021968842 --0.35528896749 --0.629508927465 --0.355301260948 --0.594994872808 --0.355318471789 --0.560479328036 --0.355334639549 --0.524000793696 --0.355318836868 --0.487524025142 --0.355301506818 --0.453008458018 --0.355289109051 --0.418494403362 --0.355281628668 --0.38398129493 --0.355279162526 --0.34946872294 --0.355281569064 --0.314956136048 --0.355288945138 --0.28044307977 --0.3553012833 --0.245929017663 --0.355318471789 --0.211413487792 --0.355334661901 --0.174934923649 --0.268557786942 --0.138420257717 --0.268544405699 --0.103905001655 --0.26853492111 --0.0693912282586 --0.268529176712 --0.0348784504458 --0.268527254462 --0.000366169493642 --0.268529109657 -0.0341461091302 --0.26853479445 -0.0686588771641 --0.268544256687 -0.103172631934 --0.268557533622 -0.137687858194 --0.268569931388 -0.174167636782 --0.268557749688 -0.210645586252 --0.268544450402 -0.245160840452 --0.26853492111 -0.279674626887 --0.268529176712 -0.314187400043 --0.268527254462 -0.348699681461 --0.268529109657 -0.383211947978 --0.26853479445 -0.417724713683 --0.268544256687 -0.452238485217 --0.268557555974 -0.486753717065 --0.268569931388 -0.523233488202 --0.268557749688 -0.559711456299 --0.268544405699 -0.594226703048 --0.26853492111 -0.628740459681 --0.268529176712 -0.663253262639 --0.268527254462 -0.697765529156 --0.268529109657 -0.732277795672 --0.268534772098 -0.766790568828 --0.268544256687 -0.801304340362 --0.268557533622 -0.835819587112 --0.268569931388 -0.872299343348 --0.268557749688 -0.908777296543 --0.268544450402 -0.943292558193 --0.26853492111 -0.977806314826 --0.268529161811 -1.01231914758 --0.268527254462 -1.0468313992 --0.268529109657 -1.08134365082 --0.268534772098 -1.11585643888 --0.268544256687 -1.1503701806 --0.268557555974 -1.18488544225 --0.268569931388 -1.22136518359 --0.268557749688 -1.25784313679 --0.268544428051 -1.29235839843 --0.26853492111 -1.32687216997 --0.268529176712 -1.36138492822 --0.268527254462 -1.39589723944 --0.268529109657 -1.43040952087 --0.26853479445 -1.46492227912 --0.268544256687 -1.49943605065 --0.268557555973 -1.5339512825 --0.268569931388 -1.57043102384 --0.26855776459 -1.60690900684 --0.268544450402 -1.64142426848 --0.26853492111 -1.67593804002 --0.268529176712 -1.71045082808 --0.268527254462 -1.74496307969 --0.268529109657 -1.77947533131 --0.268534772098 -1.81398811936 --0.268544256687 -1.84850186109 --0.268557533622 -1.88301709294 --0.268569931388 -1.91949692368 --0.268557749688 -1.95597484708 --0.26854442805 -1.99049007892 --0.26853492111 -2.02500385046 --0.268529161811 -2.05951660871 --0.268527254462 -2.09402889013 --0.268529109657 -2.12854117155 --0.268534772098 -2.16305392981 --0.268544256687 -2.19756776094 --0.268557533622 -2.23208290338 --0.268569931388 -2.26856279373 --0.268557749688 -2.30504071713 --0.268544405699 -2.33955591917 --0.26853492111 -2.37406975031 --0.268529176712 -2.40858250856 --0.268527254462 -2.44309478998 --0.268529109657 -2.4776070118 --0.268534816802 -2.51211988926 --0.268544256687 -2.54663354158 --0.268557533622 -2.58114880324 --0.268569931388 -2.61762857437 --0.268557749688 -2.65410649776 --0.26854442805 -2.68862175941 --0.26853492111 -2.72313553095 --0.268529176712 -2.75764840842 --0.268527254462 -2.79216063023 --0.268529109657 -2.82667297125 --0.268534772098 -2.8611857295 --0.268544256687 -2.89569938183 --0.268557533622 -2.93021470308 --0.268569931388 -2.96669441462 --0.268557786942 -3.00317245722 --0.268544405699 -3.03768765926 --0.26853492111 -3.0722014308 --0.268529176712 -3.10671418906 --0.268527254462 -3.14122650226 --0.268529109657 --3.10744649172 --0.26853479445 --3.07293373347 --0.268544256687 --3.03841996193 --0.268557533622 --3.00390475988 --0.268569931388 --2.96742504835 --0.268557749688 --2.93094706535 --0.268544450402 --2.89643180371 --0.26853492111 --2.86191803217 --0.268529176712 --2.82740527391 --0.268527254462 --2.7928929925 --0.268529109657 --2.75838071108 --0.26853479445 --2.72386795283 --0.268544256687 --2.68935412169 --0.268557555974 --2.65483897925 --0.268569931388 --2.6183590889 --0.268557749688 --2.58188122511 --0.268544405699 --2.54736596346 --0.26853492111 --2.51285213232 --0.268529176712 --2.47833943367 --0.268527254462 --2.44382715225 --0.268529109657 --2.40931487083 --0.268534772098 --2.37480211258 --0.268544256687 --2.34028834104 --0.268557533622 --2.3057730794 --0.268569931388 --2.26929330826 --0.268557749688 --2.23281538486 --0.268544450402 --2.19830006361 --0.26853492111 --2.16378635168 --0.268529161811 --2.12927347422 --0.268527254462 --2.0947612524 --0.268529109657 --2.06024897099 --0.268534772098 --2.02573615313 --0.268544256687 --1.991222471 --0.268557555974 --1.95670723915 --0.268569931388 --1.92022749782 --0.268557749688 --1.88374951482 --0.268544428051 --1.84923425317 --0.26853492111 --1.81472048163 --0.268529176712 --1.78020769357 --0.268527254462 --1.74569544196 --0.268529109657 --1.71118313074 --0.26853479445 --1.67667037249 --0.268544256687 --1.64215666056 --0.268557555973 --1.60764139891 --0.268569931388 --1.57116159797 --0.26855776459 --1.53468364477 --0.268544450402 --1.50016841292 --0.26853492111 --1.46565461159 --0.268529176712 --1.43114182353 --0.268527254462 --1.39662954211 --0.268529109657 --1.3621172905 --0.268534772098 --1.32760456204 --0.268544256687 --1.29309076071 --0.268557533622 --1.25857552886 --0.268569931388 --1.22209578753 --0.268557749688 --1.18561780453 --0.26854442805 --1.15110254287 --0.26853492111 --1.11658880115 --0.268529161811 --1.08207601309 --0.268527254462 --1.04756373167 --0.268529109657 --1.01305145025 --0.268534772098 --0.978538662195 --0.268544256687 --0.944024920464 --0.268557533622 --0.909509718418 --0.268569931388 --0.873029902578 --0.268557749688 --0.836551949382 --0.268544405699 --0.802036702633 --0.26853492111 --0.767522931099 --0.268529176712 --0.733010143042 --0.268527254462 --0.698497876525 --0.268529109657 --0.663985624909 --0.268534816802 --0.629472821951 --0.268544256687 --0.594959080219 --0.268557533622 --0.560443848371 --0.268569931388 --0.523964077234 --0.268557749688 --0.487486109138 --0.26854442805 --0.452970862389 --0.26853492111 --0.418457090855 --0.268529176712 --0.383944302797 --0.268527254462 --0.34943202883 --0.268529109657 --0.314919732511 --0.268534772098 --0.280406974256 --0.268544256687 --0.245893217623 --0.268557533622 --0.211377985775 --0.268569931388 --0.174898214638 --0.181822847575 --0.138381261378 --0.181813709438 --0.103866308927 --0.18180718273 --0.0693528456613 --0.181803248823 --0.0348403728567 --0.18180193007 --0.000328402500603 --0.18180321902 -0.0341835664585 --0.181807097048 -0.0686960266903 --0.181813586503 -0.103209473193 --0.181822720915 -0.137724403292 --0.181831214577 -0.1742054075 --0.181822847575 -0.210684597492 --0.181813709438 -0.245199538767 --0.18180718273 -0.279713012278 --0.181803248823 -0.314225487411 --0.18180193007 -0.348737448454 --0.181803200394 -0.383249409497 --0.181807111949 -0.417761877179 --0.181813601404 -0.452275335789 --0.181822720915 -0.486790239811 --0.181831214577 -0.523271262646 --0.181822847575 -0.559750452638 --0.181813709438 -0.594265386462 --0.18180718273 -0.628778845072 --0.181803248823 -0.663291320205 --0.18180193007 -0.697803273797 --0.181803200394 -0.732315272093 --0.181807111949 -0.766827717423 --0.181813601404 -0.801341176033 --0.181822720915 -0.835856094956 --0.181831214577 -0.87233710289 --0.181822847575 -0.908816307783 --0.181813709438 -0.943331256509 --0.181807164103 -0.977844700217 --0.181803248823 -1.01235720515 --0.18180193007 -1.04686915875 --0.181803200394 -1.08138114214 --0.181807111949 -1.11589357257 --0.181813601404 -1.15040701628 --0.181822720915 -1.1849219799 --0.181831214577 -1.22140294313 --0.181822847575 -1.25788214802 --0.181813728064 -1.29239708185 --0.18180718273 -1.32691058516 --0.181803248823 -1.36142304539 --0.18180193007 -1.39593496918 --0.181803200394 -1.43044695258 --0.181807097048 -1.46495944262 --0.181813601404 -1.49947288632 --0.181822720915 -1.53398779035 --0.181831214577 -1.57046878338 --0.181822847575 -1.60694798827 --0.181813728064 -1.6414629817 --0.181807164103 -1.67597639561 --0.181803248823 -1.71048888564 --0.18180193007 -1.74500086904 --0.18180321902 -1.77951285243 --0.181807111949 -1.81402525306 --0.181813601404 -1.84853872657 --0.181822720915 -1.88305366039 --0.181831214577 -1.91953468323 --0.181822847575 -1.95601385832 --0.181813709438 -1.99052876234 --0.181807164103 -2.02504217624 --0.181803248823 -2.05955475569 --0.18180193007 -2.09406673908 --0.181803200394 -2.12857866287 --0.181807111949 -2.16309112311 --0.181813601404 -2.19760459662 --0.181822720915 -2.23211950064 --0.181831214577 -2.26860058308 --0.181822847575 -2.30507969856 --0.181813728064 -2.33959466219 --0.181807164103 -2.3741081357 --0.181803248823 -2.40862053633 --0.18180193007 -2.44313257932 --0.18180321902 -2.47764450312 --0.181807111949 -2.51215696335 --0.181813601404 -2.54667049646 --0.181822720915 -2.58118534088 --0.181831214577 -2.61766636372 --0.181822847575 -2.6541454792 --0.181813728064 -2.68866050243 --0.18180718273 -2.72317397594 --0.181803248823 -2.75768643618 --0.18180193007 -2.79219835996 --0.181803200394 -2.82671040297 --0.181807097048 -2.86122280359 --0.181813601404 -2.89573627711 --0.181822720915 -2.93025118112 --0.181831214577 -2.96673214436 --0.181822847575 -3.00321143866 --0.181813709438 -3.03772628308 --0.18180718273 -3.07223975658 --0.181803248823 -3.10675233603 --0.18180193007 -3.14126423199 --0.18180321902 --3.10740906 --0.181807097048 --3.07289654016 --0.181813586503 --3.03838318586 --0.181822720915 --3.00386828184 --0.181831214577 --2.96738731861 --0.181822847575 --2.93090802431 --0.181813709438 --2.89639317989 --0.18180718273 --2.86187964678 --0.181803248823 --2.82736712694 --0.18180193007 --2.79285520315 --0.181803200394 --2.75834327936 --0.181807111949 --2.72383075952 --0.181813601404 --2.68931740523 --0.181822720915 --2.65480238199 --0.181831214577 --2.61832135916 --0.181822847575 --2.58184218407 --0.181813709438 --2.54732728004 --0.18180718273 --2.51281374693 --0.181803248823 --2.4783013463 --0.18180193007 --2.44378936291 --0.181803200394 --2.40927737952 --0.181807111949 --2.37476497889 --0.181813601404 --2.34025144577 --0.181822720915 --2.30573654175 --0.181831214577 --2.26925551891 --0.181822847575 --2.23277640343 --0.181813709438 --2.19826138019 --0.181807164103 --2.16374796629 --0.181803248823 --2.12923550606 --0.18180193007 --2.09472352267 --0.181803200394 --2.06021153927 --0.181807111949 --2.02569913864 --0.181813601404 --1.99118563533 --0.181822720915 --1.9566707015 --0.181831214577 --1.92018970847 --0.181822847575 --1.88371053338 --0.181813728064 --1.84919553995 --0.18180718273 --1.81468206644 --0.181803248823 --1.78016963601 --0.18180193007 --1.74565765262 --0.181803200394 --1.71114566922 --0.181807097048 --1.67663323879 --0.181813601404 --1.64211976528 --0.181822720915 --1.60760483145 --0.181831214577 --1.57112383842 --0.181822847575 --1.53464463353 --0.181813728064 --1.5001296997 --0.181807164103 --1.465616256 --0.181803248823 --1.43110379577 --0.18180193007 --1.39659178257 --0.18180321902 --1.36207982898 --0.181807111949 --1.32756736875 --0.181813601404 --1.29305392504 --0.181822720915 --1.25853902102 --0.181831214577 --1.22205799818 --0.181822847575 --1.18557885289 --0.181813709438 --1.15106385946 --0.181807164103 --1.11655035615 --0.181803248823 --1.08203789592 --0.18180193007 --1.04752597213 --0.181803200394 --1.01301398873 --0.181807111949 --0.9785015136 --0.181813601404 --0.943988069892 --0.181822720915 --0.909473150969 --0.181831214577 --0.872992128134 --0.181822847575 --0.836512953043 --0.181813728064 --0.801998019218 --0.181807164103 --0.767484545707 --0.181803248823 --0.732972070575 --0.18180193007 --0.698460102082 --0.18180321902 --0.663948148489 --0.181807111949 --0.629435673356 --0.181813601404 --0.594922229648 --0.181822720915 --0.560407295823 --0.181831214577 --0.523926287889 --0.181822847575 --0.487447120249 --0.181813728064 --0.452932156623 --0.18180718273 --0.418418705464 --0.181803248823 --0.38390622288 --0.18180193007 --0.349394254387 --0.181803200394 --0.314882285893 --0.181807097048 --0.280369825661 --0.181813601404 --0.245856378228 --0.181822720915 --0.211341455579 --0.181831214577 --0.174860440194 --0.0948065780102 --0.138344243169 --0.0948017761112 --0.103829585016 --0.0947983488439 --0.0693164188415 --0.0947962850332 --0.0348042435944 --0.0947955604643 --0.000292564043775 --0.0947962477802 -0.0342191094533 --0.0947983153164 -0.0687312800437 --0.0948017239571 -0.103244433179 --0.0948065295814 -0.137759067118 --0.0948110055179 -0.174241259694 --0.0948065780102 -0.210721608251 --0.0948017761112 -0.245236262679 --0.0947983488439 -0.279749438167 --0.0947962850332 -0.314261607826 --0.0947955604643 -0.348773270845 --0.0947962477802 -0.383284948766 --0.0947983153164 -0.417797118425 --0.0948017239571 -0.452310293913 --0.0948065295814 -0.486824929714 --0.0948110055179 -0.523307099938 --0.0948065780102 -0.559787467122 --0.0948017761112 -0.594302132726 --0.0947983320802 -0.628815293312 --0.0947962850332 -0.663327440619 --0.0947955772283 -0.697839140892 --0.0947962477802 -0.732350826263 --0.0947983153164 -0.766862973571 --0.0948017239571 -0.801376134157 --0.0948065295814 -0.835890769958 --0.0948110055179 -0.872372955084 --0.0948065780102 -0.908853307366 --0.0948017761112 -0.943367958069 --0.0947983320802 -0.977881148458 --0.0947962850332 -1.01239335537 --0.0947955604643 -1.04690495133 --0.0947962477802 -1.08141666651 --0.0947983153164 -1.11592882871 --0.0948017239571 -1.1504419744 --0.0948065295814 -1.1849566102 --0.0948110055179 -1.22143879533 --0.0948065780102 -1.25791919232 --0.0948017761112 -1.29243382812 --0.0947983488439 -1.3269469738 --0.0947962850332 -1.36145913601 --0.0947955604643 -1.39597082138 --0.0947962477802 -1.43048250675 --0.0947983153164 -1.46499466896 --0.0948017239571 -1.49950784445 --0.0948065295814 -1.53402248025 --0.0948110055179 -1.57050466538 --0.0948065780102 -1.60698500276 --0.0948017761112 -1.64149966836 --0.0947983488439 -1.67601284385 --0.0947962850332 -1.71052503586 --0.0947955772283 -1.74503672123 --0.0947962477802 -1.7795483768 --0.0947983153164 -1.81406053901 --0.0948017239571 -1.84857368469 --0.0948065295814 -1.88308829069 --0.0948110055179 -1.91957053542 --0.0948065780102 -1.95605087281 --0.0948017761112 -1.9905655086 --0.0947983320802 -2.02507865429 --0.0947962850332 -2.0595908761 --0.0947955772283 -2.09410250187 --0.0947962477802 -2.12861418724 --0.0947983153164 -2.16312640905 --0.0948017239571 -2.19763952494 --0.0948065295814 -2.23215419054 --0.0948110055179 -2.26863634586 --0.0948065780102 -2.30511671305 --0.0948017761112 -2.33963137865 --0.0947983488439 -2.37414461374 --0.0947962850332 -2.40865671635 --0.0947955604643 -2.44316846132 --0.0947962477802 -2.47768008709 --0.0947983153164 -2.5121922493 --0.0948017239571 -2.54670536518 --0.0948065295814 -2.58122003079 --0.0948110055179 -2.61770224571 --0.0948065780102 -2.6541826129 --0.0948017761112 -2.68869715929 --0.0947983488439 -2.72321039438 --0.0947962850332 -2.75772255659 --0.0947955604643 -2.79223424196 --0.0947962477802 -2.82674592733 --0.0947983153164 -2.86125808954 --0.0948017239571 -2.89577126503 --0.0948065295814 -2.93028587103 --0.0948110055179 -2.96676808596 --0.0948065780102 -3.00324839353 --0.0948017761112 -3.03776305914 --0.0947983488439 -3.07227623463 --0.0947962850332 -3.10678839684 --0.0947955604643 -3.14130005439 --0.0947962477802 --3.10737353563 --0.0947983153164 --3.07286137342 --0.0948017239571 --3.03834819793 --0.0948065295814 --3.00383359194 --0.0948110055179 --2.96735137701 --0.0948065780102 --2.93087106943 --0.0948017761112 --2.89635634422 --0.0947983488439 --2.86184322834 --0.0947962850332 --2.82733106613 --0.0947955604643 --2.79281932116 --0.0947962477802 --2.75830769539 --0.0947983153164 --2.72379547358 --0.0948017239571 --2.68928229809 --0.0948065295814 --2.65476775169 --0.0948110055179 --2.61828559637 --0.0948065780102 --2.58180516958 --0.0948017761112 --2.54729050398 --0.0947983320802 --2.51277732849 --0.0947962850332 --2.47826522589 --0.0947955772283 --2.44375354052 --0.0947962477802 --2.40924179554 --0.0947983153164 --2.37472969294 --0.0948017239571 --2.34021651745 --0.0948065295814 --2.30570185184 --0.0948110055179 --2.26921969652 --0.0948065780102 --2.23273932934 --0.0948017761112 --2.19822472334 --0.0947983320802 --2.16371148825 --0.0947962850332 --2.12919932604 --0.0947955604643 --2.09468770027 --0.0947962477802 --2.0601759553 --0.0947983153164 --2.02566379309 --0.0948017239571 --1.9911506772 --0.0948065295814 --1.9566360116 --0.0948110055179 --1.92015382647 --0.0948065780102 --1.88367348909 --0.0948017761112 --1.84915882349 --0.0947983488439 --1.814645648 --0.0947962850332 --1.78013348579 --0.0947955604643 --1.74562180042 --0.0947962477802 --1.71111014485 --0.0947983153164 --1.67659798265 --0.0948017239571 --1.64208480716 --0.0948065295814 --1.60757020116 --0.0948110055179 --1.57108798623 --0.0948065780102 --1.53460764885 --0.0948017761112 --1.50009301305 --0.0947983488439 --1.46557983756 --0.0947962850332 --1.43106761575 --0.0947955772283 --1.39655596018 --0.0947962477802 --1.36204427481 --0.0947983153164 --1.3275321126 --0.0948017239571 --1.29301899672 --0.0948065295814 --1.25850433111 --0.0948110055179 --1.22202214599 --0.0948065780102 --1.18554177881 --0.0948017761112 --1.1510271132 --0.0947983320802 --1.11651396751 --0.0947962850332 --1.08200180531 --0.0947955772283 --1.04749011993 --0.0947962477802 --1.01297846437 --0.0947983153164 --0.978466272354 --0.0948017239571 --0.943953096866 --0.0948065295814 --0.909438461065 --0.0948110055179 --0.87295627594 --0.0948065780102 --0.836475938559 --0.0948017761112 --0.801961287856 --0.0947983488439 --0.767448112369 --0.0947962850332 --0.732935920358 --0.0947955604643 --0.698424234986 --0.0947962477802 --0.663912594318 --0.0947983153164 --0.62940043211 --0.0948017239571 --0.594887241721 --0.0948065295814 --0.560372620821 --0.0948110055179 --0.523890420794 --0.0948065780102 --0.487410083413 --0.0948017761112 --0.45289543271 --0.0947983488439 --0.418382264674 --0.0947962850332 --0.383870102465 --0.0947955604643 --0.349358409643 --0.0947962477802 --0.314846731722 --0.0947983153164 --0.280334576964 --0.0948017239571 --0.245821412653 --0.0948065295814 --0.211306773126 --0.0948110055179 --0.174824599177 --1.74623000001e-08 --0.138161104172 -1.88592750002e-08 --0.103646596894 --5.35509999972e-09 --0.069133576937 --2.79400000011e-09 --0.0346215399913 --1.16414999992e-09 --0.000110000139105 --1.69966250002e-08 -0.0344015406445 --5.35510000016e-09 -0.0689135706052 -1.88592749997e-08 -0.103426605463 --2.09550000008e-09 -0.137941110879 --2.35158749999e-08 -0.174422927201 --1.74623000001e-08 -0.210904743522 -1.88592750002e-08 -0.245419248938 --5.35509999972e-09 -0.279932282865 --2.79400000011e-09 -0.314444310963 --1.16414999992e-09 -0.348955839872 --1.69966250002e-08 -0.383467391133 --5.35510000016e-09 -0.417979419232 -1.88592749997e-08 -0.452492453158 --2.09550000008e-09 -0.487006954849 --2.35158749999e-08 -0.523488774895 --1.74623000001e-08 -0.559970587492 -1.88592750002e-08 -0.594485104084 --5.35509999972e-09 -0.62899813056 --2.79400000011e-09 -0.663510143757 --1.16414999992e-09 -0.698021709919 --1.69966250002e-08 -0.732533216476 --5.35510000016e-09 -0.767045259475 -1.88592749997e-08 -0.801558285952 --2.09550000008e-09 -0.836072802544 --2.35158749999e-08 -0.872554630041 --1.74623000001e-08 -0.909036427737 -1.88592750002e-08 -0.943550929427 --5.35509999972e-09 -0.978064000607 --2.79400000011e-09 -1.0125760138 --1.16414999992e-09 -1.04708752036 --1.69966250002e-08 -1.08159905672 --5.35510000016e-09 -1.11611112952 -1.88592749997e-08 -1.1506241262 --2.09550000008e-09 -1.18513867259 --2.35158749999e-08 -1.22162050009 --1.74623000001e-08 -1.25810232759 -1.88592750002e-08 -1.29261678457 --5.35509999972e-09 -1.32712981104 --2.79400000011e-09 -1.36164185405 --1.16414999992e-09 -1.39615339041 --1.69966250002e-08 -1.43066495657 --5.35510000016e-09 -1.46517699957 -1.88592749997e-08 -1.49968999624 --2.09550000008e-09 -1.53420451284 --2.35158749999e-08 -1.57068634033 --1.74623000001e-08 -1.60716810823 -1.88592750002e-08 -1.64168265462 --5.35509999972e-09 -1.67619568109 --2.79400000011e-09 -1.71070772409 --1.16414999992e-09 -1.74521929026 --1.69966250002e-08 -1.77973073721 --5.35510000016e-09 -1.81424278021 -1.88592749997e-08 -1.84875583649 --2.09550000008e-09 -1.88327035308 --2.35158749999e-08 -1.91975218058 --1.74623000001e-08 -1.95623400808 -1.88592750002e-08 -1.99074852467 --5.35509999972e-09 -2.02526152134 --2.79400000011e-09 -2.05977356434 --1.16414999992e-09 -2.0942851305 --1.69966250002e-08 -2.12879663706 --5.35510000016e-09 -2.16330868006 -1.88592749997e-08 -2.19782173634 --2.09550000008e-09 -2.23233622312 --2.35158749999e-08 -2.26881802082 --1.74623000001e-08 -2.30529981851 -1.88592750002e-08 -2.33981430531 --5.35509999972e-09 -2.37432742119 --2.79400000011e-09 -2.40883946419 --1.16414999992e-09 -2.44335091114 --1.69966250002e-08 -2.4778624773 --5.35510000016e-09 -2.5123745203 -1.88592749997e-08 -2.54688751698 --2.09550000008e-09 -2.58140206337 --2.35158749999e-08 -2.61788386107 --1.74623000001e-08 -2.65436565876 -1.88592750002e-08 -2.68888020515 --5.35509999972e-09 -2.72339320183 --2.79400000011e-09 -2.75790524483 --1.16414999992e-09 -2.79241681099 --1.69966250002e-08 -2.82692837715 --5.35510000016e-09 -2.86144042015 -1.88592749997e-08 -2.89595341682 --2.09550000008e-09 -2.93046784401 --2.35158749999e-08 -2.96694970131 --1.74623000001e-08 -3.00343155861 -1.88592750002e-08 -3.037946105 --5.35509999972e-09 -3.07245910168 --2.79400000011e-09 -3.10697114468 --1.16414999992e-09 -3.14148274262 --1.69966250002e-08 --3.10719108582 --5.35510000016e-09 --3.07267904282 -1.88592749997e-08 --3.03816604614 --2.09550000008e-09 --3.00365161896 --2.35158749999e-08 --2.96716976166 --1.74623000001e-08 --2.93068790436 -1.88592750002e-08 --2.89617335796 --5.35509999972e-09 --2.86166036129 --2.79400000011e-09 --2.82714831829 --1.16414999992e-09 --2.79263681174 --1.69966250002e-08 --2.75812530518 --5.35510000016e-09 --2.72361326218 -1.88592749997e-08 --2.6891002059 --2.09550000008e-09 --2.6545856595 --2.35158749999e-08 --2.61810392141 --1.74623000001e-08 --2.58162212372 -1.88592750002e-08 --2.54710757732 --5.35509999972e-09 --2.51259452105 --2.79400000011e-09 --2.47808247805 --1.16414999992e-09 --2.44357097149 --1.69966250002e-08 --2.40905940533 --5.35510000016e-09 --2.37454742193 -1.88592749997e-08 --2.34003436565 --2.09550000008e-09 --2.30551981926 --2.35158749999e-08 --2.26903802156 --1.74623000001e-08 --2.23255628348 -1.88592750002e-08 --2.19804173708 --5.35509999972e-09 --2.1635286808 --2.79400000011e-09 --2.1290166378 --1.16414999992e-09 --2.09450507164 --1.69966250002e-08 --2.05999350548 --5.35510000016e-09 --2.02548158169 -1.88592749997e-08 --1.99096849561 --2.09550000008e-09 --1.95645397901 --2.35158749999e-08 --1.91997218132 --1.74623000001e-08 --1.88349038362 -1.88592750002e-08 --1.84897586703 --5.35509999972e-09 --1.81446284056 --2.79400000011e-09 --1.77995079756 --1.16414999992e-09 --1.74543923139 --1.69966250002e-08 --1.71092769503 --5.35510000016e-09 --1.67641565204 -1.88592749997e-08 --1.64190262556 --2.09550000008e-09 --1.60738816857 --2.35158749999e-08 --1.57090634107 --1.74623000001e-08 --1.53442451358 -1.88592750002e-08 --1.49990996719 --5.35509999972e-09 --1.46539694071 --2.79400000011e-09 --1.43088489771 --1.16414999992e-09 --1.39637342095 --1.69966250002e-08 --1.36186188459 --5.35510000016e-09 --1.32734984159 -1.88592749997e-08 --1.29283681512 --2.09550000008e-09 --1.25832226873 --2.35158749999e-08 --1.22184047103 --1.74623000001e-08 --1.18535864353 -1.88592750002e-08 --1.15084415674 --5.35509999972e-09 --1.11633113026 --2.79400000011e-09 --1.08181911707 --1.16414999992e-09 --1.04730755091 --1.69966250002e-08 --1.01279601455 --5.35510000016e-09 --0.978283986449 -1.88592749997e-08 --0.943770959973 --2.09550000008e-09 --0.909256443382 --2.35158749999e-08 --0.872774630785 --1.74623000001e-08 --0.836292788386 -1.88592750002e-08 --0.801778301597 --5.35509999972e-09 --0.767265275121 --2.79400000011e-09 --0.732753232122 --1.16414999992e-09 --0.698241695762 --1.69966250002e-08 --0.663730159402 --5.35510000016e-09 --0.629218146205 -1.88592749997e-08 --0.594705089927 --2.09550000008e-09 --0.560190603137 --2.35158749999e-08 --0.52370877564 --1.74623000001e-08 --0.487226948142 -1.88592750002e-08 --0.452712461352 --5.35509999972e-09 --0.418199427426 --2.79400000011e-09 --0.383687384426 --1.16414999992e-09 --0.349175848067 --1.69966250002e-08 --0.314664319158 --5.35510000016e-09 --0.280152276158 -1.88592749997e-08 --0.245639242232 --2.09550000008e-09 --0.211124733091 --2.35158749999e-08 --0.174642927945 -0.0948065463454 --0.137979071587 -0.0948017239571 --0.103464432061 -0.0947983115913 --0.0689512798562 -0.0947962533685 --0.0344391111284 -0.0947956033051 -7.2564464065e-05 -0.0947962794452 -0.0345842400566 -0.0947983674704 -0.0690964153037 -0.0948017798365 -0.103609587997 -0.0948065463452 -0.1381242387 -0.0948109868913 -0.174604598433 -0.0948065463454 -0.211086783558 -0.0948017239571 -0.245601423085 -0.0947983115913 -0.28011456877 -0.0947962533685 -0.314626738429 -0.0947956033051 -0.349138408899 -0.0947962794452 -0.383650094271 -0.0947983674704 -0.418162278831 -0.0948017798365 -0.452675424517 -0.0948065724224 -0.48719009012 -0.0948109868913 -0.523670434952 -0.0948065463454 -0.560152605176 -0.0948017239571 -0.594667270779 -0.0947983115913 -0.629180416465 -0.0947962533685 -0.663692578673 -0.0947956033051 -0.698204264045 -0.0947962794452 -0.732715949416 -0.0947983674704 -0.767228141427 -0.0948017798365 -0.801741287112 -0.0948065463452 -0.836255937815 -0.0948109868913 -0.872736275196 -0.0948065463454 -0.909218475223 -0.0948017239571 -0.943733096123 -0.0947983115913 -0.978246286512 -0.0947962533685 -1.01275846362 -0.0947956033051 -1.04727008939 -0.0947962794452 -1.08178180456 -0.0947983674704 -1.11629396677 -0.0948017798365 -1.15080717206 -0.0948065463452 -1.18532177806 -0.0948109868913 -1.22180214524 -0.0948065463454 -1.25828430057 -0.0948017239571 -1.29279893637 -0.0947983115913 -1.32731211185 -0.0947962533685 -1.36182430387 -0.0947956033051 -1.39633595943 -0.0947962794452 -1.43084764481 -0.0947983674704 -1.46535980701 -0.0948017798365 -1.4998729825 -0.0948065463452 -1.53438764811 -0.0948109868913 -1.57086801529 -0.0948065463454 -1.60735017061 -0.0948017239571 -1.64186483622 -0.0947983115913 -1.6763779521 -0.0947962533685 -1.71089017391 -0.0947956033051 -1.74540185928 -0.0947962533682 -1.77991351485 -0.0947983674704 -1.81442567706 -0.0948017798365 -1.84893885255 -0.0948065463452 -1.88345348835 -0.0948109868913 -1.91993382573 -0.0948065184057 -1.95641601086 -0.0948017239571 -1.99093067646 -0.0947983115913 -2.02544385195 -0.0947962533685 -2.05995601416 -0.0947956033051 -2.09446769953 -0.0947962794452 -2.1289793849 -0.0947983674704 -2.1634914875 -0.0948017798365 -2.19800466299 -0.0948065463452 -2.2325193286 -0.0948109868913 -2.26899969578 -0.0948065184057 -2.3054819107 -0.0948017239571 -2.3399965167 -0.0947983115913 -2.37450969219 -0.0947962533685 -2.4090218544 -0.0947956033051 -2.44353348017 -0.0947962794452 -2.47804522514 -0.0947983674704 -2.51255744696 -0.0948017798365 -2.54707056284 -0.0948065463452 -2.58158522844 -0.0948109868913 -2.61806553602 -0.0948065463454 -2.65454775095 -0.0948017239571 -2.68906235695 -0.0947983115913 -2.72357553244 -0.0947962533685 -2.75808769464 -0.0947956033051 -2.79259938002 -0.0947962794452 -2.82711106539 -0.0947983674704 -2.86162322759 -0.0948017798365 -2.89613640309 -0.0948065463452 -2.93065100908 -0.0948109868913 -2.96713137627 -0.0948065463454 -3.00361359119 -0.0948017239571 -3.0381282568 -0.0947983115913 -3.07264137268 -0.0947962533685 -3.10715353489 -0.0947956033051 --3.14152011473 -0.0947962794452 --3.10700839758 -0.0947983674704 --3.07249623537 -0.0948017798365 --3.03798305988 -0.0948065463452 --3.00346845388 -0.0948109868913 --2.9669880867 -0.0948065463454 --2.93050587177 -0.0948017239571 --2.89599120617 -0.0947983115913 --2.86147809028 -0.0947962533685 --2.82696592808 -0.0947956033051 --2.79245424271 -0.0947962794452 --2.75794261694 -0.0947983674704 --2.72343039513 -0.0948017798365 --2.68891721964 -0.0948065724224 --2.65440261364 -0.0948109868913 --2.61792218685 -0.0948065463454 --2.58144003153 -0.0948017239571 --2.54692536592 -0.0947983115913 --2.51241225004 -0.0947962533685 --2.47790008783 -0.0947956033051 --2.44338840246 -0.0947962794452 --2.40887671709 -0.0947983674704 --2.37436449528 -0.0948017798365 --2.339851439 -0.0948065463452 --2.30533665419 -0.0948109868913 --2.26885634661 -0.0948065463454 --2.23237419129 -0.0948017239571 --2.19785952568 -0.0947983115913 --2.16334635019 -0.0947962533685 --2.12883418798 -0.0947956033051 --2.09432250261 -0.0947962794452 --2.05981081724 -0.0947983674704 --2.02529865503 -0.0948017798365 --1.99078550935 -0.0948065463452 --1.95627084375 -0.0948109868913 --1.91979050636 -0.0948065463454 --1.88330835104 -0.0948017239571 --1.84879368544 -0.0947983115913 --1.81428050995 -0.0947962533685 --1.77976834774 -0.0947956033051 --1.74525666237 -0.0947962794452 --1.710744977 -0.0947983674704 --1.67623281479 -0.0948017798365 --1.6417196691 -0.0948065463452 --1.60720503331 -0.0948109868913 --1.57072463632 -0.0948065463454 --1.53424245119 -0.0948017239571 --1.49972784519 -0.0947983115913 --1.4652146697 -0.0947962533685 --1.43070250749 -0.0947956033051 --1.39619085193 -0.0947962533682 --1.36167916656 -0.0947983674704 --1.32716700435 -0.0948017798365 --1.29265382886 -0.0948065463452 --1.25813916326 -0.0948109868913 --1.22165882587 -0.0948065184057 --1.18517664075 -0.0948017239571 --1.15066200495 -0.0947983115913 --1.11614882946 -0.0947962533685 --1.08163666725 -0.0947956033051 --1.04712498188 -0.0947962794452 --1.01261329651 -0.0947983674704 --0.9781011343 -0.0948017798365 --0.943587958813 -0.0948065463452 --0.909073323011 -0.0948109868913 --0.872592955828 -0.0948065184057 --0.836110755801 -0.0948017239571 --0.801596134901 -0.0947983115913 --0.767082989216 -0.0947962533685 --0.732570797205 -0.0947956033051 --0.698059141636 -0.0947962794452 --0.663547471166 -0.0947983674704 --0.629035264254 -0.0948017798365 --0.594522118568 -0.0948065463452 --0.560007452964 -0.0948109868913 --0.523527100682 -0.0948065463454 --0.487044930458 -0.0948017239571 --0.452530294657 -0.0947983115913 --0.418017111719 -0.0947962533685 --0.383504964411 -0.0947956033051 --0.34899328649 -0.0947962794452 --0.314481601119 -0.0947983674704 --0.27996943146 -0.0948017798365 --0.245456263423 -0.0948065463452 --0.21094161272 -0.0948109868913 --0.174461260438 -0.181822739541 --0.137944396585 -0.181813623756 --0.103429475799 -0.181807111949 --0.0689160292968 -0.18180321902 --0.0344035653397 -0.181801922619 -0.000108402222395 -0.181803241372 -0.0346203744411 -0.181807164103 -0.0691328430548 -0.181813701987 -0.103646304458 -0.181822866201 -0.138161249459 -0.181831233203 -0.174640435726 -0.181822739541 -0.211121454835 -0.181813623756 -0.245636377484 -0.181807111949 -0.280149817467 -0.18180321902 -0.314662277699 -0.181801922619 -0.349174246192 -0.181803241372 -0.383686222136 -0.181807164103 -0.418198682368 -0.181813701987 -0.452712155878 -0.181822866201 -0.487227104604 -0.181831207126 -0.523706272244 -0.181822739541 -0.56018730998 -0.181813597679 -0.594702214003 -0.181807111949 -0.629215657711 -0.18180321902 -0.663728132844 -0.181801922619 -0.698240101337 -0.181803241372 -0.732752084732 -0.181807164103 -0.767264515162 -0.181813701987 -0.801778018475 -0.181822866201 -0.836292937398 -0.181831233203 -0.87277212739 -0.181822739541 -0.909253150225 -0.181813597679 -0.943768084049 -0.181807111949 -0.978281527758 -0.18180321902 -1.01279401779 -0.181801922619 -1.04730594158 -0.181803241372 -1.08181792498 -0.181807164103 -1.11633041501 -0.181813701987 -1.15084388852 -0.181822866201 -1.18535879254 -0.181831233203 -1.22183799744 -0.181822739541 -1.25831899047 -0.181813597679 -1.29283389449 -0.181807111949 -1.327347368 -0.18180321902 -1.36185982823 -0.181801922619 -1.39637181163 -0.181803241372 -1.43088379502 -0.181807164103 -1.46539622545 -0.181813701987 -1.49990969896 -0.181822866201 -1.53442469239 -0.181831233203 -1.57090383768 -0.181822739541 -1.60738486052 -0.181813597679 -1.64189979434 -0.181807111949 -1.67641320825 -0.18180321902 -1.71092569828 -0.181801922619 -1.74543765187 -0.181803241372 -1.77994963527 -0.181807164103 -1.8144620955 -0.181813701987 -1.84897556901 -0.181822866201 -1.88349047303 -0.181831233203 -1.91996967792 -0.181822739541 -1.95645067096 -0.181813623756 -1.99096566439 -0.181807111949 -2.0254791379 -0.18180321902 -2.05999153852 -0.181801922619 -2.09450352192 -0.181803241372 -2.12901550531 -0.181807164103 -2.16352790594 -0.181813701987 -2.19804137945 -0.181822866201 -2.23255634308 -0.181831207126 -2.26903551817 -0.181822739541 -2.305516541 -0.181813597679 -2.34003150463 -0.181807111949 -2.37454491854 -0.18180321902 -2.40905737877 -0.181801922619 -2.44356936216 -0.181803241372 -2.47808128595 -0.181807164103 -2.51259386539 -0.181813701987 -2.54710721969 -0.181822866201 -2.58162218332 -0.181831233203 -2.61810147762 -0.181822739541 -2.65458244085 -0.181813597679 -2.68909734487 -0.181807111949 -2.72361069918 -0.18180321902 -2.75812321901 -0.181801922619 -2.79263526201 -0.181803241372 -2.8271471262 -0.181807164103 -2.86165964604 -0.181813701987 -2.89617311954 -0.181822866201 -2.93068808318 -0.181831207126 -2.96716725826 -0.181822739541 -3.0036482811 -0.181813623756 -3.03816312552 -0.181807111949 -3.07267665863 -0.18180321902 -3.10718911887 -0.181801922619 --3.14148423274 -0.181803241372 --3.10697233677 -0.181807164103 --3.07245981693 -0.181813701987 --3.03794634342 -0.181822866201 --3.00343137979 -0.181831233203 --2.96695220471 -0.181822739541 --2.93047118187 -0.181813623756 --2.89595627785 -0.181807111949 --2.86144280434 -0.18180321902 --2.8269303441 -0.181801922619 --2.79241842032 -0.181803241372 --2.75790637731 -0.181807164103 --2.72339397669 -0.181813701987 --2.68888056279 -0.181822866201 --2.65436553955 -0.181831207126 --2.61788642407 -0.181822739541 --2.58140534163 -0.181813597679 --2.5468904376 -0.181807111949 --2.51237696409 -0.18180321902 --2.47786450386 -0.181801922619 --2.44335258007 -0.181803241372 --2.40884059667 -0.181807164103 --2.37432819605 -0.181813701987 --2.33981460333 -0.181822866201 --2.30529969931 -0.181831233203 --2.26882052422 -0.181822739541 --2.23233944178 -0.181813597679 --2.19782453776 -0.181807111949 --2.16331118345 -0.18180321902 --2.12879866362 -0.181801922619 --2.09428668022 -0.181803241372 --2.05977475643 -0.181807164103 --2.0252622366 -0.181813701987 --1.99074882269 -0.181822866201 --1.95623382926 -0.181831233203 --1.91975468397 -0.181822739541 --1.88327363134 -0.181813597679 --1.84875872731 -0.181807111949 --1.8142452836 -0.18180321902 --1.77973282337 -0.181801922619 --1.74522086978 -0.181803241372 --1.71070888639 -0.181807164103 --1.67619642615 -0.181813701987 --1.64168292284 -0.181822866201 --1.60716801881 -0.181831233203 --1.57068884373 -0.181822739541 --1.53420782089 -0.181813597679 --1.49969285726 -0.181807111949 --1.46517941356 -0.18180321902 --1.43066698313 -0.181801922619 --1.39615502954 -0.181803241372 --1.36164301634 -0.181807164103 --1.3271305263 -0.181813701987 --1.2926171422 -0.181822866201 --1.25810214877 -0.181831233203 --1.22162294388 -0.181822739541 --1.18514195085 -0.181813623756 --1.15062704682 -0.181807111949 --1.11611360312 -0.18180321902 --1.08160114288 -0.181801922619 --1.04708912969 -0.181803241372 --1.01257717609 -0.181807164103 --0.978064715862 -0.181813701987 --0.943551257253 -0.181822866201 --0.909036308527 -0.181831207126 --0.872557103634 -0.181822739541 --0.836076095701 -0.181813597679 --0.801561176777 -0.181807111949 --0.767047718167 -0.18180321902 --0.732535287738 -0.181801922619 --0.698023274541 -0.181803241372 --0.66351133585 -0.181807164103 --0.628998860717 -0.181813701987 --0.594485402108 -0.181822866201 --0.55997043848 -0.181831233203 --0.52349126339 -0.181822739541 --0.487010262907 -0.181813597679 --0.452495321632 -0.181807111949 --0.417981863022 -0.18180321902 --0.383469425142 -0.181801922619 --0.348957449198 -0.181803241372 --0.314445480704 -0.181807164103 --0.27993299067 -0.181813701987 --0.245419558138 -0.181822866201 --0.210904594511 -0.181831207126 --0.174425408244 -0.268557541072 --0.137907858938 -0.268544249236 --0.103392634541 -0.268534786999 --0.0688788797706 -0.268529102206 --0.0343661108054 -0.268527232111 -0.00014616874978 -0.268529176712 -0.0346584497019 -0.268534898758 -0.06917123124 -0.268544450402 -0.103685010225 -0.26855776459 -0.138200268149 -0.26856996119 -0.174678210169 -0.268557541072 -0.211157973856 -0.268544249236 -0.24567322433 -0.268534786999 -0.280186973512 -0.268529102206 -0.314699754119 -0.268527209759 -0.349212028086 -0.268529199064 -0.383724294603 -0.268534898758 -0.41823707521 -0.268544450402 -0.452750854194 -0.268557742238 -0.487266123295 -0.268569938838 -0.52374406159 -0.268557541072 -0.560223847627 -0.268544249236 -0.594739079476 -0.268534786999 -0.629252851009 -0.268529102206 -0.663765594363 -0.268527209759 -0.698277845979 -0.268529176712 -0.732790157199 -0.268534898758 -0.767302945256 -0.26854442805 -0.801816701889 -0.268557742238 -0.83633197844 -0.26856996119 -0.872809931636 -0.268557541072 -0.90928965807 -0.268544226885 -0.943804949522 -0.268534786999 -0.978318691254 -0.268529102206 -1.01283144951 -0.268527209759 -1.04734370112 -0.268529176712 -1.08185598254 -0.268534898758 -1.1163687706 -0.26854442805 -1.15088257193 -0.268557742238 -1.18539780378 -0.26856996119 -1.22187575698 -0.268557541072 -1.25835549831 -0.268544249236 -1.29287075996 -0.268534786999 -1.32738450169 -0.268529102206 -1.36189728975 -0.268527209759 -1.39640957117 -0.268529176712 -1.43092185259 -0.268534898758 -1.46543464064 -0.268544450402 -1.49994841218 -0.268557742238 -1.53446367383 -0.26856996119 -1.57094165683 -0.268557541072 -1.60742139816 -0.268544226885 -1.64193663001 -0.268534809351 -1.67645040154 -0.268529102206 -1.71096313 -0.268527209759 -1.74547541141 -0.268529176712 -1.77998769283 -0.268534898758 -1.81450051069 -0.268544450402 -1.84901428222 -0.268557742238 -1.88352951408 -0.26856996119 -1.92000743747 -0.268557541072 -1.9564871788 -0.268544226885 -1.99100247025 -0.268534786999 -2.02551627159 -0.268529124558 -2.06002897024 -0.268527209759 -2.09454125166 -0.268529176712 -2.12905365229 -0.268534898758 -2.16356629133 -0.26854442805 -2.19808006287 -0.268557742238 -2.23259538412 -0.26856996119 -2.26907330751 -0.268557541072 -2.30555313826 -0.268544249236 -2.3400682807 -0.268534786999 -2.37458211184 -0.268529102206 -2.40909487009 -0.268527209759 -2.44360715151 -0.268529176712 -2.47811943293 -0.268534898758 -2.51263219118 -0.26854442805 -2.54714596271 -0.268557742238 -2.58166122436 -0.26856996119 -2.61813920737 -0.268557541072 -2.6546189189 -0.268544271588 -2.68913412094 -0.268534786999 -2.72364789248 -0.268529124558 -2.75816065073 -0.268527209759 -2.79267293215 -0.268529199064 -2.82718521356 -0.268534898758 -2.86169809103 -0.268544450402 -2.89621180296 -0.268557742238 -2.93072706461 -0.26856996119 -2.96720504761 -0.268557541072 -3.00368481874 -0.268544249236 -3.03820008039 -0.268534786999 -3.07271373272 -0.268529102206 -3.10722655058 -0.268527232111 --3.141446503 -0.268529176712 --3.1069342494 -0.268534898758 --3.07242137194 -0.268544450402 --3.03790766001 -0.26855776459 --3.00339239836 -0.26856996119 --2.96691441536 -0.268557541072 --2.93043470383 -0.268544249236 --2.89591938257 -0.268534786999 --2.86140567064 -0.268529102206 --2.82689291239 -0.268527209759 --2.79238063097 -0.268529199064 --2.75786840916 -0.268534898758 --2.7233555913 -0.268544450402 --2.68884181976 -0.268557742238 --2.65432649851 -0.268569938838 --2.61784863472 -0.268557541072 --2.58136880398 -0.268544249236 --2.54685360193 -0.268534786999 --2.51233977079 -0.268529102206 --2.47782707214 -0.268527209759 --2.44331479073 -0.268529176712 --2.40880244971 -0.268534898758 --2.37428969145 -0.26854442805 --2.33977597952 -0.268557742238 --2.30526071787 -0.26856996119 --2.26878267527 -0.268557541072 --2.23230296374 -0.268544226885 --2.19778776169 -0.268534786999 --2.16327399015 -0.268529102206 --2.1287612319 -0.268527209759 --2.09424895048 -0.268529176712 --2.05973666906 -0.268534898758 --2.0252238512 -0.26854442805 --1.99071010947 -0.268557742238 --1.95619484782 -0.26856996119 --1.91971686482 -0.268557541072 --1.88323712349 -0.268544249236 --1.84872189164 -0.268534786999 --1.81420812011 -0.268529102206 --1.77969536185 -0.268527209759 --1.74518311024 -0.268529176712 --1.71067076921 -0.268534898758 --1.67615801096 -0.268544450402 --1.64164423943 -0.268557742238 --1.60712897778 -0.26856996119 --1.57065105438 -0.268557541072 --1.53417125344 -0.268544226885 --1.49965602159 -0.268534809351 --1.46514227986 -0.268529102206 --1.43062949181 -0.268527209759 --1.39611724019 -0.268529176712 --1.36160495877 -0.268534898758 --1.32709217071 -0.268544450402 --1.29257842898 -0.268557742238 --1.25806316734 -0.26856996119 --1.22158518433 -0.268557541072 --1.185105443 -0.268544226885 --1.15059021115 -0.268534786999 --1.11607640982 -0.268529124558 --1.08156368137 -0.268527209759 --1.04705139995 -0.268529176712 --1.01253908872 -0.268534898758 --0.978026330471 -0.26854442805 --0.943512573838 -0.268557742238 --0.908997282386 -0.26856996119 --0.87251932919 -0.268557541072 --0.836039572954 -0.268544249236 --0.801524326205 -0.268534786999 --0.767010599375 -0.268529102206 --0.732497826219 -0.268527209759 --0.697985544801 -0.268529176712 --0.663473248482 -0.268534898758 --0.628960460425 -0.26854442805 --0.59444668889 -0.268557742238 --0.559931427241 -0.26856996119 --0.523453488946 -0.268557541072 --0.486973725259 -0.268544271588 --0.452458500862 -0.268534786999 --0.417944729328 -0.268529124558 --0.383431963622 -0.268527209759 --0.348919674754 -0.268529199064 --0.314407400787 -0.268534898758 --0.279894627631 -0.268544450402 --0.245380856097 -0.268557742238 --0.210865583271 -0.26856996119 --0.174387637525 -0.355318494141 --0.137872356922 -0.355301231146 --0.103356825188 -0.355288952589 --0.0688427779824 -0.355281569064 --0.0343297086656 -0.355279147625 -0.000182869145648 -0.355281665921 -0.0346954525448 -0.355289101601 -0.0692085344344 -0.355301514268 -0.103722605854 -0.355318821966 -0.138238161802 -0.355334639549 -0.174714922905 -0.355318494141 -0.211193490773 -0.355301231146 -0.245709016919 -0.355288952589 -0.280223071575 -0.355281569064 -0.314736157656 -0.355279125273 -0.349248714745 -0.355281665921 -0.383761286736 -0.355289101601 -0.418274372816 -0.355301514268 -0.452788449824 -0.355318821966 -0.487304016948 -0.355334639549 -0.523780763149 -0.355318494141 -0.560259357095 -0.355301253498 -0.594774886966 -0.355288952589 -0.629288911819 -0.355281569064 -0.6638019979 -0.355279125273 -0.698314607143 -0.355281665921 -0.732827141881 -0.355289123952 -0.767340242863 -0.355301514268 -0.80185431242 -0.355318844318 -0.836369857192 -0.355334661901 -0.872846633196 -0.355318494141 -0.90932521224 -0.355301253498 -0.943840712309 -0.355288952589 -0.978354766965 -0.355281569064 -1.01286786795 -0.355279125273 -1.04738041758 -0.355281665921 -1.08189299702 -0.355289123952 -1.11640611291 -0.355301514268 -1.15092012286 -0.355318807066 -1.18543571234 -0.355334639549 -1.22191247344 -0.355318494141 -1.25839105248 -0.355301231146 -1.29290658236 -0.355288952589 -1.32742062211 -0.355281569064 -1.36193370819 -0.355279147625 -1.39644625783 -0.355281665921 -1.43095886707 -0.355289101601 -1.46547192335 -0.355301514268 -1.49998599291 -0.355318829417 -1.53450158238 -0.355334661901 -1.57097834349 -0.355318494141 -1.60745689273 -0.355301275849 -1.6419724226 -0.355288952589 -1.67648646235 -0.355281569064 -1.71099954844 -0.355279125273 -1.74551209807 -0.355281665921 -1.78002470732 -0.355289123952 -1.8145377934 -0.355301514268 -1.84905189276 -0.355318821966 -1.88356742263 -0.355334639549 -1.92004418373 -0.355318494141 -1.95652276278 -0.355301231146 -1.99103826284 -0.355288952589 -2.0255523324 -0.355281569064 -2.06006538868 -0.355279125273 -2.09457796812 -0.355281665921 -2.12909054756 -0.355289101601 -2.16360366344 -0.355301514268 -2.198117733 -0.355318821966 -2.23263329268 -0.355334639549 -2.26911002398 -0.355318494141 -2.30558860302 -0.355301231146 -2.34010410309 -0.355288952589 -2.37461817264 -0.355281591415 -2.40913116932 -0.355279147625 -2.44364380837 -0.355281665921 -2.47815638781 -0.355289123952 -2.51266950369 -0.355301491916 -2.54718351364 -0.355318807066 -2.58169913292 -0.355334661901 -2.61817580462 -0.355318494141 -2.65465438366 -0.355301231146 -2.68917000294 -0.355288930237 -2.72368401289 -0.355281591415 -2.75819712877 -0.355279147625 -2.79270964861 -0.355281665921 -2.82722222805 -0.355289101601 -2.86173534393 -0.355301514268 -2.89624941349 -0.355318807066 -2.93076491356 -0.355334639549 -2.96724170447 -0.355318494141 -3.00372028351 -0.355301231146 -3.03823584318 -0.355288952589 -3.07274991274 -0.355281569064 -3.10726296901 -0.355279147625 --3.14140978654 -0.355281665921 --3.10689717531 -0.355289101601 --3.07238411903 -0.355301514268 --3.03787004947 -0.355318821966 --3.0033544898 -0.355334639549 --2.9668776989 -0.355318494141 --2.93039917946 -0.355301231146 --2.89588361978 -0.355288952589 --2.86136955023 -0.355281569064 --2.82685649395 -0.355279125273 --2.79234391451 -0.355281665921 --2.75783139467 -0.355289101601 --2.72331827879 -0.355301514268 --2.68880426883 -0.355318821966 --2.65428864956 -0.355334639549 --2.61781185865 -0.355318494141 --2.58133327961 -0.355301253498 --2.54681777954 -0.355288952589 --2.51230370999 -0.355281569064 --2.47779071331 -0.355279125273 --2.44327807427 -0.355281665921 --2.40876549482 -0.355289123952 --2.37425243854 -0.355301514268 --2.33973836899 -0.355318844318 --2.30522274971 -0.355334661901 --2.26874601841 -0.355318494141 --2.23226743937 -0.355301253498 --2.1977519393 -0.355288952589 --2.16323792935 -0.355281569064 --2.12872481346 -0.355279125273 --2.09421229363 -0.355281665921 --2.05969965458 -0.355289123952 --2.0251865387 -0.355301514268 --1.99067252875 -0.355318807066 --1.95615690946 -0.355334639549 --1.91968014836 -0.355318494141 --1.88320159912 -0.355301231146 --1.84868606925 -0.355288952589 --1.81417202949 -0.355281569064 --1.77965897322 -0.355279147625 --1.74514636397 -0.355281665921 --1.71063381433 -0.355289101601 --1.67612069846 -0.355301514268 --1.64160662889 -0.355318829417 --1.60709109902 -0.355334661901 --1.57061433792 -0.355318494141 --1.53413575888 -0.355301275849 --1.49962022901 -0.355288952589 --1.46510615945 -0.355281569064 --1.43059313297 -0.355279125273 --1.39608052373 -0.355281665921 --1.36156797409 -0.355289123952 --1.32705488801 -0.355301514268 --1.29254081845 -0.355318821966 --1.25802522898 -0.355334639549 --1.22154846787 -0.355318494141 --1.18506988883 -0.355301231146 --1.15055435896 -0.355288952589 --1.1160403192 -0.355281569064 --1.08152726293 -0.355279125273 --1.04701465368 -0.355281665921 --1.01250210404 -0.355289101601 --0.977989003062 -0.355301514268 --0.943474933505 -0.355318821966 --0.908959373832 -0.355334639549 --0.872482642531 -0.355318494141 --0.836004063487 -0.355301231146 --0.801488548517 -0.355288952589 --0.76697447896 -0.355281591415 --0.732461392879 -0.355279147625 --0.69794884324 -0.355281665921 --0.663436248898 -0.355289123952 --0.628923177719 -0.355301491916 --0.594409108162 -0.355318807066 --0.559893518686 -0.355334661901 --0.523416787386 -0.355318494141 --0.486938208341 -0.355301231146 --0.45242267102 -0.355288930237 --0.417908623815 -0.355281591415 --0.383395560086 -0.355279147625 --0.348882973194 -0.355281665921 --0.314370401204 -0.355289101601 --0.279857322574 -0.355301514268 --0.24534324184 -0.355318807066 --0.210827678442 -0.355334639549 --0.174350932241 -0.444497182965 --0.137838795781 -0.444476120174 --0.103322982788 -0.444461084903 --0.0688086515292 -0.444452084601 --0.0342952972278 -0.444449111819 -0.000217566033825 -0.444452188909 -0.0347304334864 -0.444461278617 -0.0692437980324 -0.444476462901 -0.103758158162 -0.44449763 -0.13827399537 -0.444516971708 -0.174749627709 -0.444497190416 -0.211227055639 -0.444476135075 -0.245742868632 -0.444461084903 -0.280257202685 -0.444452062249 -0.314770556986 -0.444449111819 -0.34928341955 -0.444452188909 -0.383796297014 -0.44446131587 -0.418309651315 -0.444476462901 -0.452824011445 -0.444497652352 -0.487339839339 -0.444516971708 -0.523815482855 -0.444497168064 -0.560292899608 -0.444476135075 -0.594808727503 -0.444461107254 -0.629323065281 -0.444452062249 -0.663836419582 -0.444449111819 -0.698349237442 -0.444452188909 -0.732862114906 -0.444461300969 -0.76737549901 -0.444476462901 -0.801889851689 -0.444497652352 -0.836405694485 -0.444516971708 -0.872881308198 -0.444497190416 -0.909358754754 -0.444476135075 -0.943874567747 -0.444461062551 -0.978388890624 -0.444452084601 -1.01290225982 -0.444449111819 -1.04741510749 -0.444452188909 -1.08192798496 -0.444461300969 -1.11644133926 -0.444476440549 -1.15095570684 -0.44449763 -1.18547153473 -0.444516971708 -1.22194716334 -0.444497190416 -1.2584246099 -0.444476135075 -1.29294037819 -0.444461107254 -1.32745474577 -0.444452062249 -1.36196810007 -0.444449111819 -1.39648097754 -0.444452188909 -1.430993855 -0.444461300969 -1.4655072093 -0.44447645545 -1.50002157689 -0.444497652352 -1.53453743458 -0.444516971708 -1.57101303339 -0.444497190416 -1.60749045014 -0.444476082921 -1.64200627804 -0.444461084902 -1.67652058601 -0.444452084601 -1.71103397012 -0.444449089468 -1.74554678798 -0.444452188909 -1.78005966544 -0.444461300969 -1.81457307935 -0.444476440549 -1.84908741713 -0.44449763 -1.88360324502 -0.444516971708 -1.92007890343 -0.444497190416 -1.95655629039 -0.444476135075 -1.99107214808 -0.444461084903 -2.02558642626 -0.444452062249 -2.06009984016 -0.444449111819 -2.09461271763 -0.444452188909 -2.12912553549 -0.444461300969 -2.1636389494 -0.444476462901 -2.19815331697 -0.444497652352 -2.23266911507 -0.444516949356 -2.26914471388 -0.444497168064 -2.30562216044 -0.444476135075 -2.34013795853 -0.444461084903 -2.37465232611 -0.444452062249 -2.40916562081 -0.444449111819 -2.44367849827 -0.444452188909 -2.47819137573 -0.44446131587 -2.51270473004 -0.444476440549 -2.54721915722 -0.44449763 -2.58173489571 -0.444516949356 -2.61821055412 -0.444497190416 -2.65468806028 -0.444476135075 -2.68920379877 -0.444461084903 -2.72371816635 -0.444452062249 -2.75823152065 -0.444449111819 -2.79274439812 -0.444452188909 -2.82725721598 -0.444461300969 -2.86177057028 -0.444476462901 -2.89628493785 -0.444497652352 -2.93080079556 -0.444516971708 -2.96727639436 -0.444497182965 -3.00375390053 -0.444476120174 -3.03826969862 -0.444461084903 -3.07278400659 -0.444452084601 -3.1072974205 -0.444449111819 --3.14137509664 -0.444452188909 --3.10686224699 -0.444461278617 --3.07234889269 -0.444476462901 --3.03783452511 -0.44449763 --3.00331866741 -0.444516971708 --2.9668430686 -0.444497190416 --2.93036556244 -0.444476135075 --2.89584976434 -0.444461084903 --2.86133545637 -0.444452062249 --2.82682204246 -0.444449111819 --2.7923092246 -0.444452188909 --2.75779640675 -0.44446131587 --2.72328299284 -0.444476462901 --2.68876868486 -0.444497652352 --2.65425276756 -0.444516971708 --2.61777716875 -0.444497168064 --2.5812997818 -0.444476135075 --2.5467839241 -0.444461107254 --2.51226961612 -0.444452062249 --2.47775626183 -0.444449111819 --2.44324338436 -0.444452188909 --2.4087305069 -0.444461300969 --2.37421715259 -0.444476462901 --2.33970278501 -0.444497652352 --2.30518698692 -0.444516971708 --2.26871132851 -0.444497190416 --2.23223388195 -0.444476135075 --2.19771808386 -0.444461062551 --2.16320377588 -0.444452084601 --2.12869036197 -0.444449111819 --2.09417760372 -0.444452188909 --2.05966466665 -0.444461300969 --2.02515131235 -0.444476440549 --1.99063694477 -0.44449763 --1.95612108708 -0.444516971708 --1.91964548827 -0.444497190416 --1.8831680417 -0.444476135075 --1.84865224361 -0.444461107254 --1.81413790584 -0.444452062249 --1.77962452173 -0.444449111819 --1.74511170387 -0.444452188909 --1.71059882641 -0.444461300969 --1.67608544231 -0.44447645545 --1.64157107473 -0.444497652352 --1.60705527663 -0.444516971708 --1.57057961822 -0.444497190416 --1.53410223126 -0.444476082921 --1.49958637357 -0.444461084902 --1.46507203579 -0.444452084601 --1.4305587411 -0.444449089468 --1.39604583383 -0.444452188909 --1.36153295636 -0.444461300969 --1.32701963186 -0.444476440549 --1.29250526428 -0.44449763 --1.25798940659 -0.444516971708 --1.22151380778 -0.444497190416 --1.18503633141 -0.444476135075 --1.15052056312 -0.444461084903 --1.11600622535 -0.444452062249 --1.08149284125 -0.444449111819 --1.04697996378 -0.444452188909 --1.01246711612 -0.444461300969 --0.977953776717 -0.444476462901 --0.943439394236 -0.444497652352 --0.908923566341 -0.444516949356 --0.872447937727 -0.444497168064 --0.83597047627 -0.444476135075 --0.801454678178 -0.444461084903 --0.766940355301 -0.444452062249 --0.732426986098 -0.444449111819 --0.697914168239 -0.444452188909 --0.663401275873 -0.44446131587 --0.62888790667 -0.444476440549 --0.594373568892 -0.44449763 --0.559857711196 -0.444516949356 --0.523382082581 -0.444497190416 --0.486904650926 -0.444476135075 --0.452388845384 -0.444461084903 --0.417874507606 -0.444452062249 --0.383361130953 -0.444449111819 --0.348848298192 -0.444452188909 --0.314335420728 -0.444461300969 --0.279822051525 -0.444476462901 --0.245307695121 -0.444497652352 --0.210791852325 -0.444516971708 --0.174316227436 -0.533080026507 --0.137808188796 -0.53305542469 --0.103292118758 -0.533037856221 --0.0687775267288 -0.533027350903 --0.0342639167793 -0.533023893833 -0.000249203993007 -0.53302745521 -0.034762328025 -0.533038124442 -0.0692759538069 -0.533055856824 -0.103790573776 -0.533080607653 -0.138306673616 -0.533103138208 -0.174781270325 -0.533080026507 -0.211257666349 -0.53305542469 -0.245773732662 -0.533037856221 -0.280288308859 -0.533027350903 -0.314801931381 -0.533023893833 -0.349315054714 -0.533027470112 -0.383828170598 -0.533038154244 -0.41834179312 -0.533055871725 -0.452856428922 -0.533080607653 -0.487372539937 -0.533103168011 -0.52384711802 -0.533080026507 -0.560323506594 -0.53305542469 -0.594839602709 -0.533037871123 -0.629354164004 -0.533027365804 -0.663867786527 -0.533023864031 -0.69838090241 -0.533027470112 -0.732894018293 -0.533038139343 -0.767407655716 -0.533055871725 -0.801922276616 -0.533080607653 -0.836438372731 -0.533103138208 -0.872912973166 -0.533080041408 -0.909389346838 -0.53305542469 -0.943905428052 -0.533037856221 -0.97842001915 -0.533027365804 -1.01293364167 -0.533023878932 -1.04744675755 -0.533027499914 -1.08195987344 -0.533038154244 -1.11647349596 -0.533055886626 -1.15098813176 -0.533080607653 -1.18550419807 -0.533103138208 -1.22197884321 -0.533080026507 -1.25845521688 -0.53305542469 -1.2929712832 -0.533037871123 -1.3274858892 -0.533027365804 -1.36199951172 -0.533023893833 -1.3965125978 -0.533027470112 -1.43102571368 -0.533038154244 -1.46553936601 -0.533055886626 -1.500053972 -0.533080607653 -1.53457006812 -0.533103138208 -1.57104465365 -0.533080041408 -1.60752105713 -0.53305542469 -1.64203715324 -0.53303784132 -1.67655172944 -0.533027380705 -1.71106535197 -0.53302384913 -1.74557846784 -0.533027499914 -1.78009158373 -0.533038154245 -1.81460520625 -0.533055871725 -1.84911981225 -0.533080607653 -1.88363593817 -0.533103138208 -1.9201105237 -0.533080026507 -1.95658692718 -0.53305542469 -1.99110299349 -0.533037871123 -2.02561753988 -0.533027365804 -2.06013119221 -0.533023893833 -2.09464430809 -0.53302745521 -2.12915748358 -0.533038139343 -2.1636710763 -0.533055886626 -2.1981856823 -0.533080607653 -2.23270177841 -0.533103168011 -2.26917642355 -0.533080026507 -2.30565273762 -0.53305542469 -2.34016877413 -0.533037871123 -2.37468338013 -0.533027365804 -2.40919703245 -0.533023893833 -2.44371008873 -0.533027470112 -2.47822326422 -0.533038139343 -2.51273685694 -0.533055871725 -2.54725146294 -0.533080607653 -2.58176767826 -0.533103138208 -2.61824220419 -0.533080041408 -2.65471869707 -0.53305542469 -2.68923473358 -0.533037856221 -2.72374927998 -0.533027365804 -2.7582628727 -0.533023893833 -2.79277604818 -0.533027499914 -2.82728910446 -0.533038154244 -2.86180275678 -0.533055886626 -2.89631736278 -0.533080607653 -2.9308334589 -0.533103138208 -2.96730804443 -0.533080026507 -3.00378447771 -0.53305542469 -3.03830057382 -0.533037856221 -3.07281512022 -0.533027350903 -3.10732871294 -0.533023893833 --3.14134344657 -0.53302745521 --3.1068303585 -0.533038124442 --3.07231664658 -0.533055856824 --3.03780210018 -0.533080607653 --3.00328600407 -0.533103138208 --2.96681141854 -0.533080026507 --2.93033498526 -0.53305542469 --2.89581888914 -0.533037856221 --2.86130434275 -0.533027350903 --2.82679069042 -0.533023893833 --2.79227763414 -0.533027470112 --2.75776445866 -0.533038154244 --2.72325080633 -0.533055871725 --2.68873620033 -0.533080607653 --2.65422010422 -0.533103168011 --2.61774551869 -0.533080026507 --2.58126920462 -0.53305542469 --2.5467531085 -0.533037871123 --2.5122385025 -0.533027365804 --2.47772485018 -0.533023864031 --2.4432117343 -0.533027470112 --2.40869861841 -0.533038139343 --2.37418502569 -0.533055871725 --2.33967036009 -0.533080607653 --2.30515426398 -0.533103138208 --2.26867967844 -0.533080041408 --2.23220336437 -0.53305542469 --2.19768726826 -0.533037856221 --2.16317260265 -0.533027365804 --2.12865900994 -0.533023878932 --2.09414589405 -0.533027499914 --2.05963277817 -0.533038154244 --2.02511918545 -0.533055886626 --1.99060451984 -0.533080607653 --1.95608845353 -0.533103138208 --1.919613868 -0.533080026507 --1.88313740492 -0.53305542469 --1.84862136841 -0.533037871123 --1.81410679221 -0.533027365804 --1.77959316969 -0.533023893833 --1.745080024 -0.533027470112 --1.71056690812 -0.533038154244 --1.6760533154 -0.533055886626 --1.64153870941 -0.533080607653 --1.60702258349 -0.533103138208 --1.57054796815 -0.533080041408 --1.53407159447 -0.53305542469 --1.49955552817 -0.53303784132 --1.46504095197 -0.533027380705 --1.43052732945 -0.53302384913 --1.39601421356 -0.533027499914 --1.36150103808 -0.533038154245 --1.32698741555 -0.533055871725 --1.29247280955 -0.533080607653 --1.25795674324 -0.533103138208 --1.22148215771 -0.533080026507 --1.18500572443 -0.53305542469 --1.15048965812 -0.533037871123 --1.11597508192 -0.533027365804 --1.0814614594 -0.533023893833 --1.04694834351 -0.53302745521 --1.01243522764 -0.533038139343 --0.977921575308 -0.533055886626 --0.94340698421 -0.533080607653 --0.908890843391 -0.533103168011 --0.872416272759 -0.533080026507 --0.835939899087 -0.53305542469 --0.801423817873 -0.533037871123 --0.766909211874 -0.533027365804 --0.732395589352 -0.533023893833 --0.697882503271 -0.533027470112 --0.663369372487 -0.533038139343 --0.628855735064 -0.533055871725 --0.594341143966 -0.533080607653 --0.559825047851 -0.533103138208 --0.523350432515 -0.533080041408 --0.486874036491 -0.53305542469 --0.452357970178 -0.533037856221 --0.417843386531 -0.533027365804 --0.383329771459 -0.533023893833 --0.348816648126 -0.533027499914 --0.314303517341 -0.533038154244 --0.27978990227 -0.533055886626 --0.245275285095 -0.533080607653 --0.210759174079 -0.533103138208 --0.17428458482 -0.618687048554 --0.137779582292 -0.618659302592 --0.10326327756 -0.618639528751 --0.0687484377995 -0.618627652526 --0.0342345880345 -0.618623748422 -0.00027877674438 -0.618627861142 -0.0347921466455 -0.618639871478 -0.069306017831 -0.618659853935 -0.103820871562 -0.618687734008 -0.138337213546 -0.618713140488 -0.174810852856 -0.618687048554 -0.211286276579 -0.618659302592 -0.245802577585 -0.61863951385 -0.280317410827 -0.618627652526 -0.314831256867 -0.618623763323 -0.349344611167 -0.618627816439 -0.383857995271 -0.618639871478 -0.418371863663 -0.618659868836 -0.452886722982 -0.61868776381 -0.487403064966 -0.618713140488 -0.523876696825 -0.618687048554 -0.560352131724 -0.618659317493 -0.594868436456 -0.618639528751 -0.629383251071 -0.618627667427 -0.663897112012 -0.618623763323 -0.698410481214 -0.618627816439 -0.732923865318 -0.618639871478 -0.767437711358 -0.618659868836 -0.801952600479 -0.61868776381 -0.83646889031 -0.618713140488 -0.87294253707 -0.618687048554 -0.909417971969 -0.618659317493 -0.943934291601 -0.61863951385 -0.978449091315 -0.618627667427 -1.01296293736 -0.618623763323 -1.04747632146 -0.61862783134 -1.08198970556 -0.618639871478 -1.1165035367 -0.618659868836 -1.15101841092 -0.618687734008 -1.18553477525 -0.618713140488 -1.22200840712 -0.618687048554 -1.25848385691 -0.618659317493 -1.29300013184 -0.61863951385 -1.32751497627 -0.618627667427 -1.36202883721 -0.618623763323 -1.39654219151 -0.61862783134 -1.43105551601 -0.618639856577 -1.46556940675 -0.618659853935 -1.50008431077 -0.618687748909 -1.5346006453 -0.618713125587 -1.57107421756 -0.618687033653 -1.60754966736 -0.618659302592 -1.64206597209 -0.618639498949 -1.67658081651 -0.618627637625 -1.71109464764 -0.618623748422 -1.74560803175 -0.618627846241 -1.78012141585 -0.618639871478 -1.8146353066 -0.618659868836 -1.84915012122 -0.618687734008 -1.88366645574 -0.618713140488 -1.92014008761 -0.618687033653 -1.9566155374 -0.618659317493 -1.99113184214 -0.61863951385 -2.02564668655 -0.618627667427 -2.06016045809 -0.618623763323 -2.0946739316 -0.618627846241 -2.1291872263 -0.618639886379 -2.16370117664 -0.618659868836 -2.19821596146 -0.61868776381 -2.23273229599 -0.618713140488 -2.26920592785 -0.618687033653 -2.30568140745 -0.618659302592 -2.34019774198 -0.61863951385 -2.3747125268 -0.618627652526 -2.40922635794 -0.618623763323 -2.44373971224 -0.618627846241 -2.47825318575 -0.618639871478 -2.51276701689 -0.618659868836 -2.5472818613 -0.618687734008 -2.58179819584 -0.618713140488 -2.6182718277 -0.618687048554 -2.65474718809 -0.618659317493 -2.68926352263 -0.61863951385 -2.72377830744 -0.618627667427 -2.75829225778 -0.618623748422 -2.79280555248 -0.618627846241 -2.82731896639 -0.618639871478 -2.86183279753 -0.618659868836 -2.89634764194 -0.61868776381 -2.93086403608 -0.618713125587 -2.96733766794 -0.618687048554 -3.00381302834 -0.618659302592 -3.03832930326 -0.618639528751 -3.07284426689 -0.618627652526 -3.10735803842 -0.618623748422 --3.14131382306 -0.618627861142 --3.10680049658 -0.618639871478 --3.07228666544 -0.618659853935 --3.03777182102 -0.618687734008 --3.00325536728 -0.618713140488 --2.96678179503 -0.618687048554 --2.93030643463 -0.618659302592 --2.8957901001 -0.61863951385 --2.86127519607 -0.618627652526 --2.82676142454 -0.618623763323 --2.79224801063 -0.618627816439 --2.75773471594 -0.618639871478 --2.72322082519 -0.618659868836 --2.68870592117 -0.61868776381 --2.65418958664 -0.618713140488 --2.61771595478 -0.618687048554 --2.58124047518 -0.618659317493 --2.54672414064 -0.618639528751 --2.51220935583 -0.618627667427 --2.4776955247 -0.618623763323 --2.44318217039 -0.618627816439 --2.40866875649 -0.618639871478 --2.37415492535 -0.618659868836 --2.33964002133 -0.61868776381 --2.305123806 -0.618713140488 --2.26865011453 -0.618687048554 --2.23217469454 -0.618659317493 --2.19765836001 -0.61863951385 --2.16314357519 -0.618627667427 --2.12862968445 -0.618623763323 --2.09411633015 -0.61862783134 --2.05960291624 -0.618639871478 --2.0250890851 -0.618659868836 --1.99057421088 -0.618687734008 --1.95605787635 -0.618713140488 --1.91958421468 -0.618687048554 --1.8831088543 -0.618659317493 --1.84859254956 -0.61863951385 --1.81407770514 -0.618627667427 --1.7795638442 -0.618623763323 --1.7450504601 -0.61862783134 --1.7105371058 -0.618639856577 --1.67602321506 -0.618659853935 --1.64150840044 -0.618687748909 --1.6069920361 -0.618713125587 --1.57051840424 -0.618687033653 --1.53404298425 -0.618659302592 --1.49952667951 -0.618639498949 --1.4650118649 -0.618627637625 --1.43049800396 -0.618623748422 --1.39598464966 -0.618627846241 --1.36147123575 -0.618639871478 --1.32695740461 -0.618659868836 --1.2924425304 -0.618687734008 --1.25792619586 -0.618713140488 --1.22145253419 -0.618687033653 --1.1849771142 -0.618659317493 --1.15046083927 -0.61863951385 --1.11594602466 -0.618627667427 --1.08143210411 -0.618623763323 --1.04691877961 -0.618627846241 --1.01240539551 -0.618639886379 --0.977891519666 -0.618659868836 --0.943376675248 -0.61868776381 --0.908860325813 -0.618713140488 --0.872386708856 -0.618687033653 --0.835911273956 -0.618659302592 --0.801394969225 -0.61863951385 --0.766880169511 -0.618627652526 --0.732366278767 -0.618623763323 --0.697852909565 -0.618627846241 --0.663339540362 -0.618639871478 --0.628825679422 -0.618659868836 --0.594310805202 -0.618687734008 --0.559794470668 -0.618713140488 --0.523320838809 -0.618687048554 --0.486845433712 -0.618659317493 --0.45232912153 -0.61863951385 --0.417814284563 -0.618627667427 --0.383300438523 -0.618623748422 --0.348787069321 -0.618627846241 --0.314273700118 -0.618639871478 --0.279759846628 -0.618659868836 --0.245244968683 -0.61868776381 --0.210728630424 -0.618713125587 --0.174254998564 -0.704287335276 --0.137752261013 -0.704256787896 --0.103235736489 -0.704234868288 --0.0687206638977 -0.704221844673 --0.0342065840959 -0.70421756804 -0.000307010719552 -0.704222068191 -0.0348206120543 -0.704235345125 -0.0693347118795 -0.704257383942 -0.103849809617 -0.704288125038 -0.138366378844 -0.70431612432 -0.174839086831 -0.704287335276 -0.211313594133 -0.704256758094 -0.245830111206 -0.704234927893 -0.28034517169 -0.704221814871 -0.314859263599 -0.70421756804 -0.349372863769 -0.704222068191 -0.383886471391 -0.704235345125 -0.418400578201 -0.70425735414 -0.452915631235 -0.704288125038 -0.487432233989 -0.70431612432 -0.523904919625 -0.704287305474 -0.560379430652 -0.704256758094 -0.594895973802 -0.704234927893 -0.629411041737 -0.704221814871 -0.663925111294 -0.704217597842 -0.698438704014 -0.704222068191 -0.732952311635 -0.704235345125 -0.767466425896 -0.70425735414 -0.801981508732 -0.704288125038 -0.836498081684 -0.70431612432 -0.872970804572 -0.704287305474 -0.909445270896 -0.704256758094 -0.943961828947 -0.70423489809 -0.978476896882 -0.704221844673 -1.01299095154 -0.70421756804 -1.04750457406 -0.704222068191 -1.08201816678 -0.704235345125 -1.11653229594 -0.70425735414 -1.15104737878 -0.704288125038 -1.18556392193 -0.70431612432 -1.22203662991 -0.704287305474 -1.25851112604 -0.704256787896 -1.29302769899 -0.70423489809 -1.32754275203 -0.704221814871 -1.36205685139 -0.704217538237 -1.3965703845 -0.704222068191 -1.43108400702 -0.704235315323 -1.46559813619 -0.704257383942 -1.50011318922 -0.70428815484 -1.53462979198 -0.704316154122 -1.57110249996 -0.704287305474 -1.60757699609 -0.704256728291 -1.64209350943 -0.70423489809 -1.67660856247 -0.704221814871 -1.71112266183 -0.70421756804 -1.74563628435 -0.704222097993 -1.78014987707 -0.704235345125 -1.81466397643 -0.70425735414 -1.84917908907 -0.704288125038 -1.88369566202 -0.70431612432 -1.92016837001 -0.704287305474 -1.95664280653 -0.704256758094 -1.99115937948 -0.70423489809 -2.02567440271 -0.704221844673 -2.06018853188 -0.704217538237 -2.09470212459 -0.704222068191 -2.12921571731 -0.704235345125 -2.16372984648 -0.70425735414 -2.19824492931 -0.704288125038 -2.23276144266 -0.704316094518 -2.26923412084 -0.704287305474 -2.30570870638 -0.704256758094 -2.34022521973 -0.704234927893 -2.37474030256 -0.704221844673 -2.40925437212 -0.704217538237 -2.44376790524 -0.704222068191 -2.47828155756 -0.704235345125 -2.51279568672 -0.704257383942 -2.54731076956 -0.704288125038 -2.5818272829 -0.70431612432 -2.6183000803 -0.704287305474 -2.65477454663 -0.704256758094 -2.68929111958 -0.70423489809 -2.7238060832 -0.704221844673 -2.75832021236 -0.70421756804 -2.79283386469 -0.704222068191 -2.82734739781 -0.704235345125 -2.86186146736 -0.70425735414 -2.8963765502 -0.704288125038 -2.93089324236 -0.70431612432 -2.96736592055 -0.704287335276 -3.00384038687 -0.704256787896 -3.03835690021 -0.704234868288 -3.07287198305 -0.704221844673 -3.10738605261 -0.70421756804 --3.14128563006 -0.704222068191 --3.10677206516 -0.704235345125 --3.07225799561 -0.704257383942 --3.03774291277 -0.704288125038 --3.00322622061 -0.70431612432 --2.96675354242 -0.704287335276 --2.93027901649 -0.704256758094 --2.89576250315 -0.704234927893 --2.86124747992 -0.704221814871 --2.82673335075 -0.70421756804 --2.79221975803 -0.704222068191 --2.75770616531 -0.704235345125 --2.72319203615 -0.70425735414 --2.68867695332 -0.704288125038 --2.65416043997 -0.70431612432 --2.61768776179 -0.704287305474 --2.58121323586 -0.704256758094 --2.5466966629 -0.704234927893 --2.51218163967 -0.704221814871 --2.47766751051 -0.704217597842 --2.44315391779 -0.704222068191 --2.40864032507 -0.704235345125 --2.37412625551 -0.70425735414 --2.33961111307 -0.704288125038 --2.30509454012 -0.70431612432 --2.26862186194 -0.704287305474 --2.23214739561 -0.704256758094 --2.19763082266 -0.70423489809 --2.16311579943 -0.704221844673 --2.12860172987 -0.70421756804 --2.09408813715 -0.704222068191 --2.05957448483 -0.704235345125 --2.02506041527 -0.70425735414 --1.99054533243 -0.704288125038 --1.95602872968 -0.70431612432 --1.91955602169 -0.704287305474 --1.88308152556 -0.704256787896 --1.84856501222 -0.70423489809 --1.81404995918 -0.704221814871 --1.77953585983 -0.704217538237 --1.7450222373 -0.704222068191 --1.71050864458 -0.704235315323 --1.67599454522 -0.704257383942 --1.64147943258 -0.70428815484 --1.60696285963 -0.704316154122 --1.57049015164 -0.704287305474 --1.53401565552 -0.704256728291 --1.49949914217 -0.70423489809 --1.46498405933 -0.704221814871 --1.43046998978 -0.70421756804 --1.39595636726 -0.704222097993 --1.36144280433 -0.704235345125 --1.32692867518 -0.70425735414 --1.29241356254 -0.704288125038 --1.25789701939 -0.70431612432 --1.2214243412 -0.704287305474 --1.18494981527 -0.704256758094 --1.15043324232 -0.70423489809 --1.11591821909 -0.704221844673 --1.08140414953 -0.704217538237 --1.04689055681 -0.704222068191 --1.01237693429 -0.704235345125 --0.97786283493 -0.70425735414 --0.943347752094 -0.704288125038 --0.90883114934 -0.704316094518 --0.872358486056 -0.704287305474 --0.835883945227 -0.704256758094 --0.801367402077 -0.704234927893 --0.766852378845 -0.704221844673 --0.732338294387 -0.704217538237 --0.697824701667 -0.704222068191 --0.663311108947 -0.704235345125 --0.628796964884 -0.704257383942 --0.594281882048 -0.704288125038 --0.559765338898 -0.70431612432 --0.52329261601 -0.704287305474 --0.486818127334 -0.704256758094 --0.452301584184 -0.70423489809 --0.417786516249 -0.704221844673 --0.38327242434 -0.70421756804 --0.34875882417 -0.704222068191 --0.3142452389 -0.704235345125 --0.279731124639 -0.70425735414 --0.245216034353 -0.704288125038 --0.210699480027 -0.70431612432 --0.174226764589 -0.792527735233 --0.137726370245 -0.792494550348 --0.103209614754 -0.792470827698 --0.0686943344772 -0.792456686497 --0.034180036746 -0.792452037335 -0.000333779025825 -0.792456910014 -0.0348476013168 -0.792471289634 -0.0693619186059 -0.792495310307 -0.103877235204 -0.792528688908 -0.138394027948 -0.792559087276 -0.174865867943 -0.792527735233 -0.21133947745 -0.792494520545 -0.245856236666 -0.792470812797 -0.280371509493 -0.792456641793 -0.314885817468 -0.792452007532 -0.349399633705 -0.792456895113 -0.383913457394 -0.792471289634 -0.41842777282 -0.792495250702 -0.452943071723 -0.792528688908 -0.487459868193 -0.792559057474 -0.523931711912 -0.792527735233 -0.56040532887 -0.792494550348 -0.594922080636 -0.792470812797 -0.629437357188 -0.792456671596 -0.663951650262 -0.792452037334 -0.6984654814 -0.792456865311 -0.732979297638 -0.792471289634 -0.767493620515 -0.7924952209 -0.802008911967 -0.79252871871 -0.836525723338 -0.792559087276 -0.872997567058 -0.792527735233 -0.909471198916 -0.792494550348 -0.94398792088 -0.792470827698 -0.978503212333 -0.792456656694 -1.01301750541 -0.792452007532 -1.04753133655 -0.792456910014 -1.08204513788 -0.792471289634 -1.11655944586 -0.792495250702 -1.15107473731 -0.79252871871 -1.18559157848 -0.792559087276 -1.2220634222 -0.792527735233 -1.25853702426 -0.792494550348 -1.29305380583 -0.792470827698 -1.32756909728 -0.792456641793 -1.36208334565 -0.79245197773 -1.39659717679 -0.792456895113 -1.43111100793 -0.792471319437 -1.46562531591 -0.792495280504 -1.50014063716 -0.792528688908 -1.53465741873 -0.792559087276 -1.57112923265 -0.792527735233 -1.60760286451 -0.792494520545 -1.64211961627 -0.792470812797 -1.67663487792 -0.792456641793 -1.7111492455 -0.792452007532 -1.74566304684 -0.792456895113 -1.78017684817 -0.792471289634 -1.81469118595 -0.792495250702 -1.8492064476 -0.792528688908 -1.88372328878 -0.792559057474 -1.92019510269 -0.792527735233 -1.95666873455 -0.792494550348 -1.99118551612 -0.792470827698 -2.02570074797 -0.792456641793 -2.06021511555 -0.79245197773 -2.09472888708 -0.792456895113 -2.12924265862 -0.792471349239 -2.16375702619 -0.792495250702 -2.19827228785 -0.79252871871 -2.23278909922 -0.792559087276 -2.26926094294 -0.792527735233 -2.3057345748 -0.792494550348 -2.34025132656 -0.792470812797 -2.37476664782 -0.792456686497 -2.40928089619 -0.792452007532 -2.44379472733 -0.792456865311 -2.47830855846 -0.792471289634 -2.51282292605 -0.792495250702 -2.54733812809 -0.79252871871 -2.58185499906 -0.792559057474 -2.61832684279 -0.792527735233 -2.65480041504 -0.792494550348 -2.6893171668 -0.792470827698 -2.72383254766 -0.792456641793 -2.75834673643 -0.792452037335 -2.79286056757 -0.792456865311 -2.82737439871 -0.792471289634 -2.86188870668 -0.792495250702 -2.89640408754 -0.79252871871 -2.93092083931 -0.792559087276 -2.96739262343 -0.792527735233 -3.00386631489 -0.792494550348 -3.03838306665 -0.792470827698 -3.0728983283 -0.792456686497 -3.10741263628 -0.792452037335 --3.14125886758 -0.792456910014 --3.10674506426 -0.792471289634 --3.07223075628 -0.792495310307 --3.03771537542 -0.792528688908 --3.00319862365 -0.792559087276 --2.96672683954 -0.792527735233 --2.93025314808 -0.792494520545 --2.89573639631 -0.792470812797 --2.86122113466 -0.792456641793 --2.82670676708 -0.792452007532 --2.79219299555 -0.792456895113 --2.75767922401 -0.792471289634 --2.72316491604 -0.792495250702 --2.68864959478 -0.792528688908 --2.65413284301 -0.792559057474 --2.61766093969 -0.792527735233 --2.58118730783 -0.792494550348 --2.54667055607 -0.792470812797 --2.51215529442 -0.792456671596 --2.47764098644 -0.792452037334 --2.4431271553 -0.792456865311 --2.40861332416 -0.792471289634 --2.37409895658 -0.7924952209 --2.33958375454 -0.79252871871 --2.30506688356 -0.792559087276 --2.26859503984 -0.792527735233 --2.23212152719 -0.792494550348 --2.19760471583 -0.792470827698 --2.16308939457 -0.792456656694 --2.1285751462 -0.792452007532 --2.09406131506 -0.792456910014 --2.05954748392 -0.792471289634 --2.02503317594 -0.792495250702 --1.99051788449 -0.79252871871 --1.95600107312 -0.792559087276 --1.9195291996 -0.792527735233 --1.88305562735 -0.792494550348 --1.84853890538 -0.792470827698 --1.81402361393 -0.792456641793 --1.77950927615 -0.79245197773 --1.74499547482 -0.792456895113 --1.71048167348 -0.792471319437 --1.6759673357 -0.792495280504 --1.64145198464 -0.792528688908 --1.60693523288 -0.792559087276 --1.57046341896 -0.792527735233 --1.5339897573 -0.792494520545 --1.49947300554 -0.792470812797 --1.46495774389 -0.792456641793 --1.43044343591 -0.792452007532 --1.39592963457 -0.792456895113 --1.36141577363 -0.792471289634 --1.32690149546 -0.792495250702 --1.29238620401 -0.792528688908 --1.25786939263 -0.792559057474 --1.22139751911 -0.792527735233 --1.18492394686 -0.792494550348 --1.15040716529 -0.792470827698 --1.11589190364 -0.792456641793 --1.08137759566 -0.79245197773 --1.04686376452 -0.792456895113 --1.01234993338 -0.792471349239 --0.97783562541 -0.792495250702 --0.943320319057 -0.79252871871 --0.908803522587 -0.792559087276 --0.872331678867 -0.792527735233 --0.835858076811 -0.792494550348 --0.801341310144 -0.792470812797 --0.76682600379 -0.792456686497 --0.732311755419 -0.792452007532 --0.697797954082 -0.792456865311 --0.66328407824 -0.792471289634 --0.628769770265 -0.792495250702 --0.594254463911 -0.79252871871 --0.559737697244 -0.792559057474 --0.523265823722 -0.792527735233 --0.486792214215 -0.792494550348 --0.45227547735 -0.792470827698 --0.417760193348 -0.792456641793 --0.383245892823 -0.792452037335 --0.348732069135 -0.792456865311 --0.314218245447 -0.792471289634 --0.27970393002 -0.792495250702 --0.245188612491 -0.79252871871 --0.210671827197 -0.792559087276 --0.174199994654 -0.880917936564 --0.137702986598 -0.88088235259 --0.103186037391 -0.880857050419 --0.0686705652624 -0.880841836333 --0.0341560635716 -0.880836859346 -0.000357948476447 -0.880842119455 -0.0348719679751 -0.880857542157 -0.0693864868954 -0.880883187056 -0.103901999071 -0.880919024349 -0.138418994844 -0.880951493978 -0.174890037626 -0.880917936564 -0.211362868547 -0.88088235259 -0.245879802853 -0.880857005715 -0.280395269394 -0.880841836333 -0.314909785986 -0.880836829543 -0.349423803389 -0.880842074752 -0.383937813342 -0.880857557058 -0.418452337384 -0.880883201957 -0.452967852354 -0.880918994546 -0.487484820187 -0.880951523781 -0.523955896497 -0.880917936564 -0.560428708792 -0.88088235259 -0.594945639372 -0.880857005715 -0.629461124539 -0.880841836333 -0.66397562623 -0.880836814642 -0.698489680886 -0.880842104554 -0.733003675938 -0.880857512355 -0.76751819253 -0.880883172155 -0.802033692598 -0.880918994546 -0.836550667882 -0.880951493978 -0.873021751642 -0.880917936564 -0.909494563937 -0.880882397294 -0.944011524319 -0.880857005715 -0.978526979685 -0.880841836333 -1.01304149628 -0.880836814642 -1.04755547642 -0.880842104554 -1.08206954598 -0.880857527256 -1.11658406258 -0.880883201957 -1.15109956265 -0.880918994546 -1.18561652302 -0.880951493978 -1.22208759189 -0.880917936564 -1.25856041908 -0.880882382393 -1.29307737946 -0.880857005715 -1.32759281993 -0.880841836333 -1.36210736633 -0.880836814642 -1.39662134647 -0.880842074752 -1.43113532662 -0.880857557058 -1.46564987302 -0.880883187056 -1.50016537309 -0.880919024349 -1.53468239307 -0.880951523781 -1.57115343213 -0.880917906761 -1.60762625933 -0.880882367492 -1.64214318991 -0.880857005715 -1.67665868998 -0.880841806531 -1.71117317677 -0.880836859346 -1.74568721652 -0.880842074752 -1.78020122647 -0.880857557058 -1.81471574307 -0.880883172155 -1.84923124314 -0.880918994546 -1.88374823332 -0.880951493978 -1.92021930218 -0.880917936564 -1.95669212937 -0.88088235259 -1.99120908975 -0.880857005715 -2.02572453022 -0.880841836333 -2.06023901701 -0.880836814642 -2.09475308656 -0.880842074752 -2.12926709652 -0.880857527256 -2.16378164292 -0.880883187056 -2.19829702377 -0.880918994546 -2.23281413317 -0.880951493978 -2.26928514242 -0.880917936564 -2.30575799942 -0.880882382393 -2.34027493 -0.880856975913 -2.37479031086 -0.880841836333 -2.40930491686 -0.880836814642 -2.44381886721 -0.880842104554 -2.47833293676 -0.880857512355 -2.51284742356 -0.880883201957 -2.54736304283 -0.880918994546 -2.58187997341 -0.880951523781 -2.61835098267 -0.880917936564 -2.65482378006 -0.880882382393 -2.68934082985 -0.880857005715 -2.72385621071 -0.880841836333 -2.7583707571 -0.880836814642 -2.79288476706 -0.880842074752 -2.8273987174 -0.880857557058 -2.8619132638 -0.880883157253 -2.89642882347 -0.880918994546 -2.93094575405 -0.880951493978 -2.96741682291 -0.880917936564 -3.00388962031 -0.88088235259 -3.03840661049 -0.880857050419 -3.07292211056 -0.880841836333 -3.10743659734 -0.880836859346 --3.1412347277 -0.880842119455 --3.10672074557 -0.880857542157 --3.07220619917 -0.880883187056 --3.0376906395 -0.880919024349 --3.00317370892 -0.880951493978 --2.96670264005 -0.880917936564 --2.93022984266 -0.88088235259 --2.89571285248 -0.880857005715 --2.86119735241 -0.880841836333 --2.82668292522 -0.880836829543 --2.79216891527 -0.880842074752 --2.75765478611 -0.880857557058 --2.72314023971 -0.880883201957 --2.68862485886 -0.880918994546 --2.65410786867 -0.880951523781 --2.61763674021 -0.880917936564 --2.58116388321 -0.88088235259 --2.54664707184 -0.880857005715 --2.51213157177 -0.880841836333 --2.47761702537 -0.880836814642 --2.44310295582 -0.880842104554 --2.40858900547 -0.880857512355 --2.37407445908 -0.880883172155 --2.33955895901 -0.880918994546 --2.30504190922 -0.880951493978 --2.26857084036 -0.880917936564 --2.23209810257 -0.880882397294 --2.19758111238 -0.880857005715 --2.16306567192 -0.880841836333 --2.12855118514 -0.880836814642 --2.09403717518 -0.880842104554 --2.05952316522 -0.880857527256 --2.02500867843 -0.880883201957 --1.99049308896 -0.880918994546 --1.95597609878 -0.880951493978 --1.91950508952 -0.880917936564 --1.88303223252 -0.880882382393 --1.84851527214 -0.880857005715 --1.81399980187 -0.880841836333 --1.77948534489 -0.880836814642 --1.74497127533 -0.880842074752 --1.71045729518 -0.880857557058 --1.67594277859 -0.880883187056 --1.64142727852 -0.880919024349 --1.60691025853 -0.880951523781 --1.57043921947 -0.880917906761 --1.53396639228 -0.880882367492 --1.4994494319 -0.880857005715 --1.46493396163 -0.880841806531 --1.43041947484 -0.880836859346 --1.39590546489 -0.880842074752 --1.36139142513 -0.880857557058 --1.32687690854 -0.880883172155 --1.29236137867 -0.880918994546 --1.25784441829 -0.880951493978 --1.22137337923 -0.880917936564 --1.18490052223 -0.88088235259 --1.15038362145 -0.880857005715 --1.11586812138 -0.880841836333 --1.08135360479 -0.880836814642 --1.04683959484 -0.880842074752 --1.01232561469 -0.880857527256 --0.977811068296 -0.880883187056 --0.943295553326 -0.880918994546 --0.908778548241 -0.880951493978 --0.872307509184 -0.880917936564 --0.83583471179 -0.880882382393 --0.801317736506 -0.880856975913 --0.766802281142 -0.880841836333 --0.732287764549 -0.880836814642 --0.697773769498 -0.880842104554 --0.663259744644 -0.880857512355 --0.62874519825 -0.880883201957 --0.594229698181 -0.880918994546 --0.559712693095 -0.880951523781 --0.523241683841 -0.880917936564 --0.486768826842 -0.880882382393 --0.452251881361 -0.880857005715 --0.417736418545 -0.880841836333 --0.383221909404 -0.880836814642 --0.348707914353 -0.880842074752 --0.314193874598 -0.880857557058 --0.279679365456 -0.880883157253 --0.245163846761 -0.880918994546 --0.210646856576 -0.880951493978 --0.174175813794 -0.966537177563 --0.137682452798 -0.966499641538 --0.103165334091 -0.96647284925 --0.0686496831476 -0.966456800699 --0.0341350068338 -0.966451525688 -0.00037917890586 -0.966457098722 -0.0348933725618 -0.966473415494 -0.0694080665707 -0.966500550508 -0.103923751041 -0.966538399458 -0.138440921903 -0.966572657227 -0.174911275506 -0.966537162662 -0.211383394897 -0.966499626637 -0.245900522917 -0.966472804547 -0.280416175723 -0.966456785798 -0.314930841327 -0.966451525688 -0.349445030093 -0.966457098722 -0.38395922631 -0.966473415494 -0.418473921716 -0.966500550509 -0.452989600599 -0.966538369656 -0.487506762147 -0.96657268703 -0.52397711575 -0.966537162662 -0.560449257493 -0.966499626637 -0.594966381788 -0.966472804547 -0.629482015967 -0.966456770897 -0.663996696472 -0.966451525688 -0.69851090014 -0.96645706892 -0.733025074005 -0.966473415494 -0.767539769411 -0.966500550509 -0.802055463195 -0.966538399458 -0.836572632193 -0.96657268703 -0.873042985797 -0.966537162662 -0.909515112639 -0.966499626637 -0.944032222033 -0.966472804547 -0.978547871113 -0.966456800699 -1.01306253672 -0.966451525688 -1.04757675528 -0.96645706892 -1.08209091425 -0.966473445296 -1.11660560965 -0.966500550509 -1.15112128854 -0.966538339854 -1.18563848734 -0.966572657227 -1.22210881114 -0.966537192464 -1.25858098269 -0.966499656439 -1.29309803248 -0.966472804547 -1.32761371136 -0.966456800699 -1.36212837696 -0.966451525688 -1.39664259553 -0.966457128525 -1.4311567843 -0.966473415494 -1.4656714797 -0.966500550509 -1.50018715858 -0.966538339854 -1.53470432758 -0.966572657227 -1.57117468119 -0.966537207365 -1.60764676333 -0.966499656439 -1.64216393232 -0.966472789646 -1.6766795814 -0.966456755996 -1.71119424701 -0.966451525688 -1.74570843577 -0.96645706892 -1.78022259474 -0.966473415494 -1.81473731994 -0.966500550509 -1.84925296902 -0.966538399458 -1.88377013803 -0.96657268703 -1.92024049163 -0.966537192464 -1.95671263337 -0.966499641538 -1.99122977257 -0.966472804547 -2.02574545145 -0.966456785798 -2.06026011705 -0.966451525688 -2.09477424622 -0.966457098722 -2.12928855419 -0.966473415494 -2.16380316019 -0.966500550509 -2.19831883907 -0.966538369656 -2.23283594847 -0.966572657227 -2.26930636167 -0.966537162662 -2.30577850342 -0.966499626637 -2.34029567241 -0.966472834349 -2.37481129169 -0.966456785798 -2.4093258977 -0.966451525688 -2.44384014606 -0.96645706892 -2.47835433483 -0.966473445296 -2.51286900043 -0.966500550509 -2.54738473892 -0.966538354755 -2.58190190792 -0.96657268703 -2.61837214232 -0.966537192464 -2.65484434366 -0.966499626637 -2.68936151266 -0.966472804547 -2.72387707234 -0.966456800699 -2.75839179754 -0.966451525688 -2.79290598631 -0.96645706892 -2.82742017508 -0.966473415494 -2.86193490029 -0.966500550509 -2.89645057917 -0.966538339854 -2.93096774817 -0.966572657227 -2.96743816137 -0.966537177563 -3.00391018391 -0.966499641538 -3.0384273529 -0.96647284925 -3.07294303179 -0.966456800699 -3.10745769739 -0.966451525688 --3.14121350844 -0.966457098722 --3.10669928789 -0.966473415494 --3.07218456268 -0.966500550508 --3.0376688838 -0.966538399458 --3.0031517148 -0.966572657227 --2.96668130159 -0.966537162662 --2.93020927906 -0.966499626637 --2.89569211006 -0.966472804547 --2.86117643118 -0.966456785798 --2.82666176557 -0.966451525688 --2.79214769602 -0.966457098722 --2.75763344765 -0.966473415494 --2.72311878205 -0.966500550509 --2.68860304356 -0.966538369656 --2.65408593416 -0.96657268703 --2.61761552095 -0.966537162662 --2.58114337921 -0.966499626637 --2.54662626982 -0.966472804547 --2.51211065054 -0.966456770897 --2.47759598494 -0.966451525688 --2.44308173656 -0.96645706892 --2.4085675478 -0.966473415494 --2.37405288219 -0.966500550509 --2.33953720331 -0.966538399458 --2.30501997471 -0.96657268703 --2.26854968071 -0.966537162662 --2.23207753897 -0.966499626637 --2.19756042958 -0.966472804547 --2.1630448103 -0.966456800699 --2.12853014469 -0.966451525688 --2.09401589632 -0.96645706892 --2.05950176716 -0.966473445296 --2.02498704195 -0.966500550509 --1.99047133326 -0.966538339854 --1.95595416427 -0.966572657227 --1.91948381066 -0.966537192464 --1.88301166892 -0.966499656439 --1.84849458933 -0.966472804547 --1.81397894025 -0.966456800699 --1.77946427465 -0.966451525688 --1.74495005607 -0.966457128525 --1.71043589711 -0.966473415494 --1.6759211421 -0.966500550509 --1.64140552282 -0.966538339854 --1.60688835383 -0.966572657227 --1.57041797042 -0.966537207365 --1.53394585848 -0.966499656439 --1.49942871928 -0.966472789646 --1.4649130702 -0.966456755996 --1.4303984046 -0.966451525688 --1.39588424564 -0.96645706892 --1.36137002706 -0.966473415494 --1.32685536146 -0.966500550509 --1.29233965277 -0.966538399458 --1.25782248378 -0.96657268703 --1.22135213017 -0.966537192464 --1.18487998843 -0.966499641538 --1.15036287904 -0.966472804547 --1.11584725976 -0.966456785798 --1.08133256435 -0.966451525688 --1.04681834578 -0.966457098722 --1.01230415702 -0.966473415494 --0.977789476514 -0.966500550509 --0.94327378273 -0.966538369656 --0.908756643534 -0.966572657227 --0.872286275029 -0.966537162662 --0.835814163089 -0.966499626637 --0.801297008992 -0.966472834349 --0.766781389713 -0.966456785798 --0.732266709209 -0.966451525688 --0.697752505541 -0.96645706892 --0.663238331675 -0.966473445296 --0.628723651171 -0.966500550509 --0.594207942486 -0.966538354755 --0.559690788388 -0.96657268703 --0.523220419884 -0.966537192464 --0.486748307943 -0.966499626637 --0.452231176197 -0.966472804547 --0.417715542019 -0.966456800699 --0.383200854063 -0.966451525688 --0.348686680198 -0.96645706892 --0.314172461629 -0.966473415494 --0.279657788575 -0.966500550509 --0.245142091066 -0.966538339854 --0.210624933243 -0.966572657227 --0.174154579639 -1.05216023326 --0.137663185597 -1.05212089419 --0.103145906702 -1.05209285021 --0.0686300965026 -1.0520760715 --0.0341152637266 -1.05207058787 -0.000399086857215 -1.05207639933 -0.0349134430289 -1.05209347606 -0.0694282995537 -1.05212190748 -0.103944150731 -1.05216154456 -0.138461474329 -1.05219742656 -0.174931179732 -1.05216023326 -0.211402665824 -1.05212089419 -0.245919939131 -1.05209288001 -0.280435755849 -1.0520760715 -0.314950592816 -1.05207058787 -0.349464930594 -1.05207636952 -0.383979298174 -1.05209347606 -0.418494150043 -1.05212190748 -0.453009992838 -1.05216151476 -0.487527325749 -1.05219745636 -0.523997038603 -1.05216023326 -0.560468509793 -1.05212089419 -0.594985812903 -1.05209288001 -0.629501596093 -1.0520760417 -0.664016455412 -1.05207058787 -0.698530763388 -1.05207636952 -0.73304516077 -1.05209350586 -0.767560020089 -1.05212190748 -0.802075847983 -1.05216154456 -0.836593195796 -1.05219742656 -0.873062923551 -1.05216023326 -0.909534364939 -1.05212089419 -0.944051623344 -1.05209288001 -0.978567436338 -1.0520760417 -1.01308229566 -1.05207061768 -1.04759663343 -1.05207639933 -1.08211097122 -1.05209350586 -1.11662587524 -1.05212190748 -1.15114170313 -1.05216151476 -1.18565905094 -1.05219745636 -1.22212871909 -1.05216023326 -1.25860020519 -1.05212089419 -1.29311749339 -1.05209288001 -1.32763329148 -1.0520760417 -1.3621481061 -1.05207058787 -1.39666250348 -1.05207639933 -1.43117684126 -1.05209347606 -1.46569168568 -1.05212190748 -1.50020757317 -1.05216154456 -1.53472486138 -1.05219742656 -1.57119458914 -1.05216023326 -1.60766607523 -1.05212089419 -1.64218330383 -1.05209285021 -1.67669916153 -1.0520760417 -1.71121400595 -1.05207064748 -1.74572831392 -1.05207636952 -1.7802426815 -1.05209350586 -1.81475758553 -1.05212190748 -1.84927341342 -1.05216154456 -1.88379073143 -1.05219745636 -1.92026042938 -1.05216023326 -1.95673191548 -1.05212089419 -1.99124920368 -1.05209285021 -2.02576500177 -1.0520760417 -2.06027984619 -1.05207058787 -2.09479415417 -1.05207639933 -2.12930858135 -1.05209347606 -2.16382342577 -1.05212190748 -2.19833922386 -1.05216154456 -2.23285657167 -1.05219745636 -2.26932626963 -1.05216023326 -2.30579775572 -1.052120924 -2.34031504393 -1.0520928204 -2.37483084202 -1.0520760715 -2.40934568643 -1.05207061768 -2.44386005402 -1.05207639933 -2.47837442159 -1.05209350586 -2.51288932562 -1.05212193728 -2.54740512371 -1.05216151476 -2.58192241192 -1.05219742656 -2.61839210987 -1.05216023326 -2.65486365557 -1.052120924 -2.68938094377 -1.05209285021 -2.72389668226 -1.0520760417 -2.75841152668 -1.05207061768 -2.79292589426 -1.05207636952 -2.82744026184 -1.05209347606 -2.86195510626 -1.05212187767 -2.89647096396 -1.05216151476 -2.93098831177 -1.05219745636 -2.96745795011 -1.05216023326 -3.00392949581 -1.05212089419 -3.03844672441 -1.05209285021 -3.07296252251 -1.0520760715 -3.10747736692 -1.05207058787 --3.14119354089 -1.05207639933 --3.10667920112 -1.05209347606 --3.07216435671 -1.05212190748 --3.03764849901 -1.05216154456 --3.0031312108 -1.05219742656 --2.96666145324 -1.05216023326 --2.93019002676 -1.05212089419 --2.89567273855 -1.05209288001 --2.86115694046 -1.0520760715 --2.82664203644 -1.05207058787 --2.79212772846 -1.05207636952 --2.75761336088 -1.05209347606 --2.72309845686 -1.05212190748 --2.68858271837 -1.05216151476 --2.65406531096 -1.05219745636 --2.617595613 -1.05216023326 --2.58112412691 -1.05212089419 --2.5466068387 -1.05209288001 --2.51209104061 -1.0520760417 --2.47757619619 -1.05207058787 --2.44306188822 -1.05207636952 --2.40854746103 -1.05209350586 --2.37403261662 -1.05212190748 --2.33951681852 -1.05216154456 --2.30499947071 -1.05219742656 --2.26852971315 -1.05216023326 --2.23205828667 -1.05212089419 --2.19754099846 -1.05209288001 --2.16302520037 -1.0520760417 --2.12851035595 -1.05207061768 --2.09399604797 -1.05207639933 --2.05948168039 -1.05209350586 --2.02496677637 -1.05212190748 --1.99045094847 -1.05216151476 --1.95593363047 -1.05219745636 --1.91946393252 -1.05216023326 --1.88299244642 -1.05212089419 --1.84847518802 -1.05209288001 --1.81395936012 -1.0520760417 --1.77944451571 -1.05207058787 --1.74493017793 -1.05207639933 --1.71041581035 -1.05209347606 --1.67590093613 -1.05212190748 --1.64138510823 -1.05216154456 --1.60686779022 -1.05219742656 --1.57039809227 -1.05216023326 --1.53392660618 -1.05212089419 --1.49940931797 -1.05209285021 --1.46489349008 -1.0520760417 --1.43037867546 -1.05207064748 --1.39586430788 -1.05207636952 --1.3613499403 -1.05209350586 --1.32683515549 -1.05212190748 --1.29231926798 -1.05216154456 --1.25780192017 -1.05219745636 --1.22133222222 -1.05216023326 --1.18486070633 -1.05212089419 --1.15034344793 -1.05209285021 --1.11582767963 -1.0520760417 --1.08131283522 -1.05207058787 --1.04679843783 -1.05207639933 --1.01228410006 -1.05209347606 --0.977769255638 -1.05212190748 --0.943253397942 -1.05216154456 --0.90873606503 -1.05219745636 --0.872266352177 -1.05216023326 --0.835794910789 -1.052120924 --0.801277622581 -1.0520928204 --0.766761809587 -1.0520760715 --0.73224696517 -1.05207061768 --0.697732627392 -1.05207639933 --0.66321824491 -1.05209350586 --0.628703385592 -1.05212193728 --0.594187557697 -1.05216151476 --0.559670224786 -1.05219742656 --0.523200526834 -1.05216023326 --0.486729040742 -1.052120924 --0.452211767435 -1.05209285021 --0.417695946991 -1.0520760417 --0.383181102574 -1.05207061768 --0.348666772247 -1.05207636952 --0.314152404666 -1.05209347606 --0.279637545347 -1.05212187767 --0.245121695101 -1.05216151476 --0.210604373366 -1.05219745636 --0.174134675414 -1.1404838264 --0.137645099312 -1.14044290781 --0.103127673268 -1.14041379094 --0.0686117084697 -1.14039632678 --0.0340967234224 -1.14039063454 -0.000417781993747 -1.14039668441 -0.0349322929979 -1.14041447639 -0.0694473059848 -1.14044401049 -0.103963306174 -1.14048525691 -0.138480789959 -1.14052253961 -0.17494988069 -1.1404838562 -0.211420744657 -1.14044290781 -0.245938185602 -1.14041376114 -0.280454136431 -1.14039626717 -0.314969137311 -1.14039060473 -0.349483624101 -1.14039665461 -0.383998140693 -1.14041447639 -0.418513156474 -1.14044398069 -0.453029148281 -1.14048528671 -0.487546637654 -1.14052253961 -0.524015709758 -1.1404838562 -0.560486599803 -1.14044290781 -0.595004037023 -1.14041373134 -0.629519999027 -1.14039626717 -0.664035007358 -1.14039060473 -0.698549494147 -1.14039665461 -0.733063980937 -1.14041444659 -0.767579004169 -1.14044398069 -0.802094995976 -1.14048525691 -0.8366124928 -1.14052256942 -0.873081594705 -1.1404838562 -0.909552410245 -1.14044290781 -0.944069877267 -1.14041373134 -0.978585854173 -1.14039626717 -1.0131008327 -1.14039063454 -1.04761531949 -1.14039665461 -1.08212983608 -1.14041447639 -1.11664485932 -1.1404440403 -1.15116086602 -1.14048528671 -1.18567833304 -1.14052253961 -1.22214743495 -1.1404838264 -1.25861829519 -1.14044296742 -1.29313573241 -1.14041376114 -1.32765167952 -1.14039626717 -1.36216667294 -1.14039060473 -1.39668118954 -1.14039665461 -1.43119570613 -1.14041444659 -1.46571069956 -1.14044401049 -1.50022673607 -1.14048528671 -1.53474420309 -1.14052253961 -1.57121327519 -1.1404838562 -1.60768413543 -1.14044290781 -1.64220160246 -1.14041373134 -1.67671754956 -1.14039626717 -1.71123254299 -1.14039063454 -1.74574702978 -1.14039665461 -1.78026154638 -1.14041444659 -1.8147765398 -1.14044401049 -1.84929254651 -1.14048522711 -1.88381004334 -1.14052253961 -1.92027914524 -1.1404838562 -1.95675000548 -1.14044293761 -1.9912674427 -1.14041376114 -2.02578336 -1.14039626717 -2.06029844284 -1.14039063454 -2.09481287003 -1.14039665461 -2.12932741642 -1.14041444659 -2.16384238005 -1.14044401049 -2.19835841656 -1.14048528671 -2.23287588358 -1.14052253961 -2.26934498548 -1.1404838264 -2.30581593514 -1.14044290781 -2.34033322334 -1.14041376114 -2.37484925985 -1.14039626717 -2.40936422348 -1.14039063454 -2.44387876987 -1.14039665461 -2.47839319706 -1.14041447639 -2.51290827989 -1.14044398069 -2.5474242568 -1.14048525691 -2.58194172382 -1.14052253961 -2.61841082573 -1.1404838264 -2.65488171577 -1.14044293761 -2.6893991828 -1.14041373134 -2.7239151001 -1.14039626717 -2.75843006373 -1.14039063454 -2.79294455051 -1.14039665461 -2.82745915651 -1.14041444659 -2.86197412014 -1.14044401049 -2.89649009705 -1.14048525691 -2.93100762367 -1.14052256942 -2.96747666597 -1.1404838264 -3.00394749641 -1.14044290781 -3.03846502304 -1.14041379094 -3.07298094034 -1.14039632678 -3.10749596358 -1.14039063454 --3.14117494424 -1.14039668441 --3.10666030645 -1.14041447639 --3.07214534283 -1.14044401049 --3.03762936592 -1.14048525691 --3.00311183929 -1.14052253961 --2.96664279699 -1.1404838562 --2.93017196656 -1.14044290781 --2.89565443993 -1.14041376114 --2.86113852262 -1.14039626717 --2.82662343979 -1.14039060473 --2.7921090126 -1.14039665461 --2.75759446621 -1.14041447639 --2.72307950258 -1.14044398069 --2.68856346607 -1.14048528671 --2.65404599905 -1.14052253961 --2.61757689714 -1.1404838562 --2.5811060071 -1.14044290781 --2.54658865929 -1.14041373134 --2.51207268238 -1.14039626717 --2.47755765915 -1.14039060473 --2.44304311275 -1.14039665461 --2.40852868557 -1.14041444659 --2.37401366234 -1.14044398069 --2.33949768543 -1.14048525691 --2.3049801588 -1.14052256942 --2.2685110569 -1.1404838562 --2.23204016685 -1.14044290781 --2.19752275944 -1.14041373134 --2.16300678253 -1.14039626717 --2.12849187851 -1.14039063454 --2.09397733212 -1.14039665461 --2.05946278572 -1.14041447639 --2.02494776249 -1.1404440403 --1.99043178559 -1.14048528671 --1.95591431856 -1.14052253961 --1.91944521666 -1.1404838264 --1.88297435641 -1.14044296742 --1.84845691919 -1.14041376114 --1.81394094229 -1.14039626717 --1.77942594886 -1.14039060473 --1.74491146207 -1.14039665461 --1.71039694548 -1.14041444659 --1.67588195205 -1.14044401049 --1.64136597514 -1.14048528671 --1.60684847832 -1.14052253961 --1.57037937641 -1.1404838562 --1.53390851617 -1.14044290781 --1.49939110875 -1.14041373134 --1.46487510204 -1.14039626717 --1.43036010861 -1.14039063454 --1.39584562182 -1.14039665461 --1.36133113503 -1.14041444659 --1.3268161118 -1.14044401049 --1.2923001051 -1.14048522711 --1.25778263807 -1.14052253961 --1.22131353617 -1.1404838562 --1.18484261632 -1.14044293761 --1.1503252089 -1.14041376114 --1.1158092618 -1.14039626717 --1.08129426837 -1.14039063454 --1.04677975178 -1.14039665461 --1.01226523519 -1.14041444659 --0.977750241756 -1.14044401049 --0.943234249949 -1.14048528671 --0.908716768026 -1.14052253961 --0.872247695923 -1.1404838264 --0.835776805878 -1.14044290781 --0.80125939846 -1.14041376114 --0.766743406653 -1.14039626717 --0.732228413225 -1.14039063454 --0.697713926435 -1.14039665461 --0.663199394942 -1.14041447639 --0.628684386611 -1.14044398069 --0.594168409705 -1.14048525691 --0.559650912881 -1.14052253961 --0.523181810975 -1.1404838264 --0.486710958183 -1.14044293761 --0.452193520963 -1.14041373134 --0.417677551508 -1.14039626717 --0.38316257298 -1.14039063454 --0.348648048938 -1.14039665461 --0.314133547247 -1.14041444659 --0.279618553817 -1.14044401049 --0.245102550834 -1.14048525691 --0.21058506146 -1.14052256942 --0.174115970731 -1.22873190046 --0.137628715485 -1.22868961096 --0.103111147881 -1.2286594212 --0.0685950489715 -1.2286414504 --0.0340799218975 -1.22863554955 -0.000434721121565 -1.22864180803 -0.0349493697286 -1.22866025567 -0.0694645196199 -1.22869080305 -0.103980664164 -1.22873342037 -0.138498287648 -1.22877192497 -0.174966815859 -1.22873187065 -0.211437128484 -1.22868964076 -0.245954692364 -1.22865945101 -0.28047081083 -1.2286413908 -0.31498593092 -1.22863551975 -0.349500566721 -1.22864180803 -0.384015232325 -1.22866022587 -0.418530374765 -1.22869077325 -0.453046523034 -1.22873342037 -0.487564139068 -1.22877195478 -0.524032682181 -1.22873193026 -0.56050299108 -1.22868961096 -0.595020547509 -1.2286594212 -0.629536643625 -1.2286413908 -0.664051771164 -1.22863557935 -0.698566392064 -1.22864180803 -0.73308108747 -1.22866025567 -0.76759621501 -1.22869077325 -0.802112340927 -1.22873339057 -0.836629986763 -1.22877189517 -0.873098537326 -1.22873187065 -0.909568846226 -1.22868964076 -0.944086402654 -1.2286594212 -0.97860249877 -1.2286413908 -1.01311761141 -1.22863557935 -1.04763227701 -1.22864180803 -1.08214691281 -1.22866025567 -1.11666202545 -1.22869074345 -1.15117821097 -1.22873345017 -1.18569585681 -1.22877195478 -1.22216436267 -1.22873187065 -1.25863468647 -1.22868964076 -1.2931522727 -1.2286594212 -1.32766836881 -1.2286413908 -1.36218348146 -1.22863557935 -1.39669811726 -1.22864180803 -1.43121278286 -1.22866025567 -1.4657278955 -1.22869077325 -1.50024408102 -1.22873342037 -1.53476166725 -1.22877192497 -1.57123023272 -1.22873184085 -1.60770055652 -1.22868961096 -1.64221808314 -1.22865945101 -1.67673420906 -1.2286414206 -1.7112492919 -1.22863554955 -1.74576398731 -1.22864180803 -1.7802785933 -1.22866025567 -1.81479379535 -1.22869077325 -1.84930989146 -1.22873339057 -1.88382750749 -1.22877195478 -1.92029604316 -1.22873190046 -1.95676639676 -1.22868964076 -1.99128398299 -1.2286594212 -2.0258000493 -1.2286413908 -2.06031519174 -1.22863554955 -2.09482985735 -1.22864177823 -2.12934440374 -1.22866022587 -2.16385960579 -1.22869077325 -2.19837582111 -1.22873339057 -2.23289340734 -1.22877195478 -2.2693618536 -1.22873187065 -2.30583220721 -1.22868964076 -2.34034979344 -1.22865945101 -2.37486588955 -1.2286414206 -2.40938103199 -1.22863557935 -2.44389569759 -1.22864180803 -2.47841030359 -1.22866025567 -2.51292544603 -1.22869077325 -2.54744160175 -1.22873342037 -2.58195924759 -1.22877195478 -2.61842781305 -1.22873187065 -2.65489804745 -1.22868964076 -2.68941563368 -1.22865945101 -2.7239317894 -1.2286413908 -2.75844693184 -1.22863554955 -2.79296153784 -1.22864180803 -2.82747620344 -1.22866025567 -2.86199128628 -1.22869077325 -2.89650738239 -1.22873339057 -2.93102502823 -1.22877192497 -2.9674936533 -1.22873190046 -3.0039639473 -1.22868961096 -3.03848153353 -1.2286594212 -3.07299757004 -1.2286414504 -3.10751271248 -1.22863554955 --3.14115795691 -1.22864180803 --3.10664325952 -1.22866025567 --3.07212817669 -1.22869080305 --3.03761208058 -1.22873342037 --3.00309443474 -1.22877192497 --2.96662580967 -1.22873187065 --2.93015551567 -1.22868964076 --2.89563792944 -1.22865945101 --2.86112189293 -1.2286413908 --2.82660675049 -1.22863551975 --2.79209208488 -1.22864180803 --2.75757747888 -1.22866022587 --2.72306221723 -1.22869077325 --2.68854612112 -1.22873342037 --2.65402853489 -1.22877195478 --2.61756002903 -1.22873193026 --2.58108967542 -1.22868961096 --2.5465720892 -1.2286594212 --2.51205599308 -1.2286413908 --2.47754091025 -1.22863557935 --2.44302624464 -1.22864180803 --2.40851157904 -1.22866025567 --2.3739964366 -1.22869077325 --2.33948028087 -1.22873339057 --2.30496263504 -1.22877189517 --2.26849406958 -1.22873187065 --2.23202377558 -1.22868964076 --2.19750624895 -1.2286594212 --2.16299015284 -1.2286413908 --2.12847507 -1.22863557935 --2.0939604044 -1.22864180803 --2.05944567919 -1.22866025567 --2.02493059635 -1.22869074345 --1.99041441083 -1.22873345017 --1.9558968246 -1.22877195478 --1.91942828894 -1.22873187065 --1.88295796514 -1.22868964076 --1.84844040871 -1.2286594212 --1.81392428279 -1.2286413908 --1.77940917015 -1.22863557935 --1.74489453435 -1.22864180803 --1.71037986875 -1.22866025567 --1.6758647263 -1.22869077325 --1.64134860039 -1.22873342037 --1.60683095455 -1.22877192497 --1.57036241889 -1.22873184085 --1.53389212489 -1.22868961096 --1.49937453866 -1.22865945101 --1.46485844254 -1.2286414206 --1.43034332991 -1.22863554955 --1.3958286941 -1.22864180803 --1.3613140285 -1.22866025567 --1.32679888606 -1.22869077325 --1.29228273034 -1.22873339057 --1.25776511431 -1.22877195478 --1.22129657865 -1.22873190046 --1.18482625484 -1.22868964076 --1.15030872822 -1.2286594212 --1.1157925725 -1.2286413908 --1.08127745986 -1.22863554955 --1.04676279426 -1.22864177823 --1.01224818826 -1.22866022587 --0.977733045817 -1.22869077325 --0.943216875196 -1.22873339057 --0.908699259162 -1.22877195478 --0.872230738402 -1.22873187065 --0.8357604146 -1.22868964076 --0.801242828369 -1.22865945101 --0.766726732254 -1.2286414206 --0.732211604714 -1.22863557935 --0.697696968913 -1.22864180803 --0.663182333112 -1.22866025567 --0.62866717577 -1.22869077325 --0.59415102005 -1.22873342037 --0.559633418918 -1.22877195478 --0.523164883256 -1.22873187065 --0.486694574356 -1.22868964076 --0.452177003026 -1.22865945101 --0.41766089946 -1.2286413908 --0.38314576447 -1.22863554955 --0.348631136119 -1.22864180803 --0.314116485417 -1.22866025567 --0.279601335525 -1.22869077325 --0.245085194707 -1.22873339057 --0.210567571223 -1.22877192497 --0.174099024385 -1.31437096 --0.137614253908 -1.31432756782 --0.103096567095 -1.3142965734 --0.0685803415254 -1.31427803635 --0.0340650924481 -1.31427204609 -0.000449671410022 -1.31427845359 -0.0349644431845 -1.31429737806 -0.0694797132164 -1.31432875991 -0.103995975107 -1.31437250972 -0.138513725251 -1.31441214681 -0.174981769175 -1.31437096 -0.211451597512 -1.31432756782 -0.2459692806 -1.3142965734 -0.280485503375 -1.31427806616 -0.315000765026 -1.31427201629 -0.349515512586 -1.31427845359 -0.384030297398 -1.31429731846 -0.418545559049 -1.31432875991 -0.453061833977 -1.31437256932 -0.487579576671 -1.31441214681 -0.524047598243 -1.31437093019 -0.560517460108 -1.31432753801 -0.595035135746 -1.3142965734 -0.629551365971 -1.31427806616 -0.664066612721 -1.31427204609 -0.698581382632 -1.31427845359 -0.733096152544 -1.31429737806 -0.767611429095 -1.31432875991 -0.802127674222 -1.31437250972 -0.836645409465 -1.31441214681 -0.873113468289 -1.31437093019 -0.909583285451 -1.31432753802 -0.944100990891 -1.3142965734 -0.978617206216 -1.31427806616 -1.01313248277 -1.31427204609 -1.04764720797 -1.31427845359 -1.08216199279 -1.31429740787 -1.11667725444 -1.31432875991 -1.15119355917 -1.31437253952 -1.18571126461 -1.314412117 -1.22217935324 -1.31437096 -1.2586491406 -1.31432753802 -1.29316684604 -1.3142965734 -1.32768306136 -1.31427806616 -1.36219829321 -1.31427201629 -1.39671304822 -1.31427845359 -1.43122783303 -1.31429740787 -1.46574312449 -1.31432881951 -1.50025936961 -1.31437250972 -1.53477713466 -1.314412117 -1.57124516368 -1.3143709898 -1.60771501064 -1.31432753802 -1.64223265648 -1.3142965734 -1.67674893141 -1.31427806616 -1.71126419306 -1.31427198649 -1.74577894807 -1.31427848339 -1.78029370308 -1.31429740787 -1.81480899453 -1.31432875991 -1.84932523966 -1.31437253952 -1.8838429749 -1.31441214681 -1.92031106353 -1.31437096 -1.95678085089 -1.31432756782 -1.99129852653 -1.3142965734 -2.02581477165 -1.31427806616 -2.0603300333 -1.31427204609 -2.09484475851 -1.31427845359 -2.12935960293 -1.31429734826 -2.16387486458 -1.31432875991 -2.19839113951 -1.31437253952 -2.23290878534 -1.31441214681 -2.26937687397 -1.31437093019 -2.30584669113 -1.31432756782 -2.34036445617 -1.3142965734 -2.3748806119 -1.31427806616 -2.40939593315 -1.31427201629 -2.44391065836 -1.31427845359 -2.47842538357 -1.31429740787 -2.51294064522 -1.31432875991 -2.54745692015 -1.31437250972 -2.58197468519 -1.31441214681 -2.61844271421 -1.31437096 -2.65491253138 -1.31432756782 -2.68943023681 -1.3142965734 -2.72394645214 -1.31427806616 -2.75846171379 -1.31427201629 -2.7929764986 -1.31427848339 -2.82749122381 -1.31429740787 -2.86200654507 -1.31432875991 -2.89652276039 -1.31437253952 -2.93104052543 -1.31441214681 -2.96750861407 -1.31437096 -3.00397849083 -1.31432756782 -3.03849601745 -1.3142965734 -3.07301223278 -1.31427803635 -3.10752755404 -1.31427204609 --3.14114299615 -1.31427845359 --3.10662823916 -1.31429737806 --3.0721129179 -1.31432875991 --3.03759670258 -1.31437250972 --3.00307893753 -1.31441214681 --2.9666108489 -1.31437096 --2.93014103174 -1.31432756782 --2.89562344551 -1.3142965734 --2.86110711098 -1.31427806616 --2.82659190893 -1.31427201629 --2.79207712412 -1.31427845359 --2.7575622797 -1.31429731846 --2.72304707766 -1.31432875991 --2.68853080273 -1.31437256932 --2.65401309729 -1.31441214681 --2.61754506826 -1.31437093019 --2.5810751915 -1.31432753801 --2.54655748606 -1.3142965734 --2.51204121113 -1.31427806616 --2.47752606869 -1.31427204609 --2.44301128387 -1.31427845359 --2.40849649906 -1.31429737806 --2.37398123741 -1.31432875991 --2.33946496248 -1.31437250972 --2.30494731665 -1.31441214681 --2.26847922802 -1.31437093019 --2.23200941086 -1.31432753802 --2.19749164582 -1.3142965734 --2.16297543049 -1.31427806616 --2.12846016884 -1.31427204609 --2.09394538402 -1.31427845359 --2.05943071842 -1.31429740787 --2.02491545677 -1.31432875991 --1.99039912224 -1.31437253952 --1.95588138699 -1.314412117 --1.91941332817 -1.31437096 --1.88294348121 -1.31432753802 --1.84842583537 -1.3142965734 --1.81390959024 -1.31427806616 --1.77939432859 -1.31427201629 --1.74487957358 -1.31427845359 --1.71036478877 -1.31429740787 --1.67584952712 -1.31432881951 --1.64133328199 -1.31437250972 --1.60681554675 -1.314412117 --1.57034745812 -1.3143709898 --1.53387767077 -1.31432753802 --1.49935996533 -1.3142965734 --1.46484375 -1.31427806616 --1.43032851815 -1.31427198649 --1.39581373334 -1.31427848339 --1.36129897833 -1.31429740787 --1.32678368688 -1.31432875991 --1.29226744175 -1.31437253952 --1.25774967671 -1.31441214681 --1.22128164768 -1.31437096 --1.18481180072 -1.31432756782 --1.15029409528 -1.3142965734 --1.11577787995 -1.31427806616 --1.08126264811 -1.31427204609 --1.04674786329 -1.31427845359 --1.01223310828 -1.31429734826 --0.977717816829 -1.31432875991 --0.943201556802 -1.31437253952 --0.908683806658 -1.31441214681 --0.872215762734 -1.31437093019 --0.835745930672 -1.31432756782 --0.801228240133 -1.3142965734 --0.766712039709 -1.31427806616 --0.73219679296 -1.31427201629 --0.697682023048 -1.31427845359 --0.663167253137 -1.31429740787 --0.628652006388 -1.31432875991 --0.59413574636 -1.31437250972 --0.559617966414 -1.31441214681 --0.523149937391 -1.31437096 --0.486680090427 -1.31432756782 --0.452162414789 -1.3142965734 --0.417646199465 -1.31427806616 --0.383130952716 -1.31427201629 --0.348616175353 -1.31427848339 --0.314101412892 -1.31429740787 --0.279586143792 -1.31432875991 --0.245069868863 -1.31437253952 --0.210552129894 -1.31441214681 --0.174084085971 -1.40002453327 --0.137600738555 -1.39998006821 --0.103082930669 -1.39994847774 --0.0685665970668 -1.39992949366 --0.0340512352995 -1.39992323518 -0.00046364287846 -1.3999298811 -0.0349785308354 -1.3999492228 -0.069493914023 -1.39998140931 -0.104010295123 -1.4000261724 -0.1385281533 -1.40006670356 -0.174995753914 -1.40002450347 -0.211465112865 -1.39998006821 -0.245982907713 -1.39994844794 -0.280499264598 -1.39992952347 -0.315014600754 -1.39992332459 -0.349529504776 -1.3999298811 -0.384044386446 -1.39994925261 -0.418559774756 -1.39998137951 -0.453076146543 -1.4000261724 -0.487593993545 -1.40006667376 -0.524061590433 -1.40002450347 -0.560530975461 -1.39998009801 -0.595048755407 -1.39994844794 -0.629565104842 -1.39992949367 -0.664080485702 -1.39992332459 -0.698595330119 -1.3999298811 -0.733110234142 -1.39994925261 -0.767625615 -1.3999813497 -0.802141964436 -1.4000261724 -0.836659863591 -1.40006664395 -0.873127445578 -1.40002453327 -0.909596830606 -1.39998009801 -0.944114610553 -1.39994847775 -0.978630959987 -1.39992952347 -1.01314628124 -1.39992329478 -1.04766118526 -1.3999298811 -1.08217608929 -1.39994925261 -1.11669147015 -1.39998140931 -1.15120783448 -1.4000261724 -1.18572568893 -1.40006664395 -1.22219327092 -1.40002450347 -1.25866267085 -1.39998006821 -1.2931804359 -1.39994844794 -1.32769680023 -1.39992952347 -1.36221218109 -1.39992332459 -1.39672702551 -1.3999298811 -1.43124192953 -1.39994925261 -1.46575731039 -1.3999813199 -1.50027373433 -1.4000261724 -1.53479155898 -1.40006670356 -1.57125917077 -1.40002450347 -1.6077285409 -1.39998009801 -1.64224633575 -1.39994844794 -1.67676267028 -1.39992952347 -1.71127799153 -1.39992329478 -1.74579289555 -1.3999298811 -1.78030776977 -1.39994925261 -1.81482318044 -1.39998137951 -1.84933951497 -1.4000261724 -1.88385742903 -1.40006667376 -1.92032501101 -1.40002450347 -1.95679435134 -1.39998003841 -1.99131217599 -1.39994844794 -2.02582848072 -1.39992946386 -2.06034386158 -1.39992332459 -2.094858706 -1.3999298811 -2.12937361002 -1.39994925261 -2.16388899088 -1.39998137951 -2.19840532541 -1.4000261724 -2.23292320967 -1.40006667376 -2.26939088106 -1.40002450347 -2.30586022139 -1.39998006821 -2.34037804604 -1.39994844794 -2.37489426136 -1.39992949367 -2.40940964222 -1.39992326498 -2.44392460585 -1.3999298811 -2.47843950987 -1.39994925261 -2.51295489073 -1.39998137951 -2.54747128487 -1.4000261724 -2.58198910952 -1.40006664395 -2.6184567213 -1.40002450347 -2.65492606163 -1.39998006821 -2.68944382667 -1.39994847775 -2.72396022081 -1.39992952347 -2.75847566128 -1.39992332459 -2.79299044609 -1.3999298811 -2.82750535011 -1.39994925261 -2.86202073097 -1.39998137951 -2.89653706551 -1.4000261724 -2.93105494976 -1.40006667376 -2.96752256155 -1.40002453327 -3.00399190188 -1.39998006821 -3.03850972652 -1.39994847774 -3.07302606106 -1.39992949366 -3.10754144192 -1.39992323518 --3.14112898906 -1.3999298811 --3.10661411285 -1.3999492228 --3.07209873199 -1.39998140931 --3.03758239746 -1.4000261724 --3.00306451321 -1.40006670356 --2.96659690141 -1.40002450347 --2.93012756109 -1.39998006821 --2.89560973644 -1.39994844794 --2.86109340191 -1.39992952347 --2.82657802105 -1.39992332459 --2.79206317663 -1.3999298811 --2.75754827261 -1.39994925261 --2.72303289175 -1.39998137951 --2.68851655722 -1.4000261724 --2.65399867296 -1.40006667376 --2.61753112078 -1.40002450347 --2.58106172085 -1.39998009801 --2.5465438962 -1.39994844794 --2.51202756167 -1.39992949367 --2.47751224041 -1.39992332459 --2.44299733639 -1.3999298811 --2.40848243237 -1.39994925261 --2.37396705151 -1.3999813497 --2.33945065737 -1.4000261724 --2.30493277311 -1.40006664395 --2.26846516132 -1.40002453327 --2.231995821 -1.39998009801 --2.19747805596 -1.39994847775 --2.16296166181 -1.39992952347 --2.12844640017 -1.39992329478 --2.09393143654 -1.3999298811 --2.05941653252 -1.39994925261 --2.02490115166 -1.39998140931 --1.99038478732 -1.4000261724 --1.95586696267 -1.40006664395 --1.91939935088 -1.40002450347 --1.88292998075 -1.39998006821 --1.84841218591 -1.39994844794 --1.81389585137 -1.39992952347 --1.77938047051 -1.39992332459 --1.7448656261 -1.3999298811 --1.71035069227 -1.39994925261 --1.67583534121 -1.3999813199 --1.64131894708 -1.4000261724 --1.60680109262 -1.40006670356 --1.57033351064 -1.40002450347 --1.53386414051 -1.39998009801 --1.49934631586 -1.39994844794 --1.46482998132 -1.39992952347 --1.43031463027 -1.39992329478 --1.39579975605 -1.3999298811 --1.36128488183 -1.39994925261 --1.32676950097 -1.39998137951 --1.29225310683 -1.4000261724 --1.25773528218 -1.40006667376 --1.2212676704 -1.40002450347 --1.18479830026 -1.39998003841 --1.15028050542 -1.39994844794 --1.11576417089 -1.39992946386 --1.08124876022 -1.39992332459 --1.0467339158 -1.3999298811 --1.01221904158 -1.39994925261 --0.977703660727 -1.39998137951 --0.943187266588 -1.4000261724 --0.908669412136 -1.40006667376 --0.872201785445 -1.40002450347 --0.835732445121 -1.39998006821 --0.801214620471 -1.39994844794 --0.76669831574 -1.39992949367 --0.732182949782 -1.39992326498 --0.69766806066 -1.3999298811 --0.663153171539 -1.39994925261 --0.628637775779 -1.39998137951 --0.594121396541 -1.4000261724 --0.559603542089 -1.40006664395 --0.5231359303 -1.40002450347 --0.486666589975 -1.39998006821 --0.452148787677 -1.39994847775 --0.417632453144 -1.39992952347 --0.383117072284 -1.39992332459 --0.348602205515 -1.3999298811 --0.314087331295 -1.39994925261 --0.279571920633 -1.39998137951 --0.245055556298 -1.4000261724 --0.210537694395 -1.40006667376 --0.174070101232 --1.14052256942 -0.173895969987 --1.14052253962 -0.522961810231 --1.14052256942 -0.872027665377 --1.14052256942 -1.22109353543 --1.14052256942 -1.57015937567 --1.14052256942 -1.91922521591 --1.14052253962 -2.26829105616 --1.14052256942 -2.61735695601 --1.14052259922 -2.96642279625 --1.14052256942 --2.96769666672 --1.14052253962 --2.61863082647 --1.14052256942 --2.26956498623 --1.14052256942 --1.92049914598 --1.14052256942 --1.57143330574 --1.14052256942 --1.22236743569 --1.14052253962 --0.873301550746 --1.14052256942 --0.524235725403 --1.14052259922 --0.175169881433 --0.792559087277 -0.173979990184 --0.792559072375 -0.52304585278 --0.792559072375 -0.872111678124 --0.792559087277 -1.22117754817 --0.792559072375 -1.57024335861 --0.792559072375 -1.91930925846 --0.792559087277 -2.2683750987 --0.792559087277 -2.61744099855 --0.792559072375 -2.96650677919 --0.792559087277 --2.96761268378 --0.792559072375 --2.61854678392 --0.792559072375 --2.26948094368 --0.792559087277 --1.92041513324 --0.792559072375 --1.57134926319 --0.792559072375 --1.22228339315 --0.792559087277 --0.873217537999 --0.792559087277 --0.524151697755 --0.792559072375 --0.175085861236 --0.444516979158 -0.174096226692 --0.44451700151 -0.523162081838 --0.444516979158 -0.872227922082 --0.444516979158 -1.22129377723 --0.444516979158 -1.57035964728 --0.444516979158 -1.91942545772 --0.44451700151 -2.26849132777 --0.444516979158 -2.61755716801 --0.444516979158 -2.96662306786 --0.444516979158 --2.96749639511 --0.44451700151 --2.61843061447 --0.444516979158 --2.26936477423 --0.444516979158 --1.92029887438 --0.444516979158 --1.57123306394 --0.444516979158 --1.22216716409 --0.44451700151 --0.873101323843 --0.444516979158 --0.524035483599 --0.444516979158 --0.174969621003 --2.35158749999e-08 -0.174422927201 --2.35158749999e-08 -0.523488774895 --2.35158749999e-08 -0.872554630041 --2.35158749999e-08 -1.22162050009 --2.35158749999e-08 -1.57068634033 --2.35158749999e-08 -1.91975218058 --2.35158749999e-08 -2.26881802082 --2.35158749999e-08 -2.61788386107 --2.35158749999e-08 -2.96694970131 --2.35158749999e-08 --2.96716976166 --2.35158749999e-08 --2.61810392141 --2.35158749999e-08 --2.26903802156 --2.35158749999e-08 --1.91997218132 --2.35158749999e-08 --1.57090634107 --2.35158749999e-08 --1.22184047103 --2.35158749999e-08 --0.872774630785 --2.35158749999e-08 --0.52370877564 --2.35158749999e-08 --0.174642927945 -0.444516971708 -0.174749627709 -0.444516971708 -0.523815482855 -0.444516971708 -0.872881308198 -0.444516971708 -1.22194716334 -0.444516971708 -1.57101303339 -0.444516971708 -1.92007890343 -0.444516949356 -2.26914471388 -0.444516949356 -2.61821055412 -0.444516971708 -2.96727639436 -0.444516971708 --2.9668430686 -0.444516971708 --2.61777716875 -0.444516971708 --2.26871132851 -0.444516971708 --1.91964548827 -0.444516971708 --1.57057961822 -0.444516971708 --1.22151380778 -0.444516949356 --0.872447937727 -0.444516949356 --0.523382082581 -0.444516971708 --0.174316227436 -0.792559087276 -0.174865867943 -0.792559057474 -0.523931711912 -0.792559087276 -0.872997567058 -0.792559087276 -1.2220634222 -0.792559087276 -1.57112923265 -0.792559057474 -1.92019510269 -0.792559087276 -2.26926094294 -0.792559057474 -2.61832684279 -0.792559087276 -2.96739262343 -0.792559087276 --2.96672683954 -0.792559057474 --2.61766093969 -0.792559087276 --2.26859503984 -0.792559087276 --1.9195291996 -0.792559087276 --1.57046341896 -0.792559057474 --1.22139751911 -0.792559087276 --0.872331678867 -0.792559057474 --0.523265823722 -0.792559087276 --0.174199994654 -1.14052253961 -0.17494988069 -1.14052253961 -0.524015709758 -1.14052256942 -0.873081594705 -1.14052253961 -1.22214743495 -1.14052253961 -1.57121327519 -1.14052253961 -1.92027914524 -1.14052253961 -2.26934498548 -1.14052253961 -2.61841082573 -1.14052256942 -2.96747666597 -1.14052253961 --2.96664279699 -1.14052253961 --2.61757689714 -1.14052256942 --2.2685110569 -1.14052253961 --1.91944521666 -1.14052253961 --1.57037937641 -1.14052253961 --1.22131353617 -1.14052253961 --0.872247695923 -1.14052253961 --0.523181810975 -1.14052256942 --0.174115970731 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 --0.445734696637 --0.0828902302899 --0.445692247811 --0.0737967733504 --0.445649417478 --0.064703695363 --0.445606239297 --0.0556114589397 --0.445679863006 --0.0461776751127 --0.445773675836 --0.0367384257144 --0.445770527198 --0.0276353019696 --0.445766983934 --0.0185314209562 --0.445763067015 --0.00942725128817 --0.445761023272 --2.16840434497e-19 --0.445763067015 -0.00942725128817 --0.445766983934 -0.0185314209562 --0.445770527198 -0.0276353019696 --0.445773675836 -0.0367384257144 --0.445679863006 -0.0461776751127 --0.445606239297 -0.0556114589397 --0.445649417478 -0.064703695363 --0.445692247811 -0.0737967733504 --0.445734696637 -0.0828902302899 --0.436720068262 --0.082671904706 --0.436680371294 --0.0736024313247 --0.436640325593 --0.0645333515411 --0.436599952455 --0.0554651263885 --0.436668843324 --0.046055883989 --0.436756690748 --0.0366412029928 --0.43675387234 --0.0275621570739 --0.436750703022 --0.0184823674286 --0.436747182825 --0.00940229597992 --0.436745332885 --2.16840434497e-19 --0.436747182825 -0.00940229597992 --0.436750703022 -0.0184823674286 --0.43675387234 -0.0275621570739 --0.436756690748 -0.0366412029928 --0.436668843324 -0.046055883989 --0.436599952455 -0.0554651263885 --0.436640325593 -0.0645333515411 --0.436680371294 -0.0736024313247 --0.436720068262 -0.082671904706 --0.42772069843 --0.0824546304453 --0.427683726166 --0.0734090328885 --0.427646457882 --0.0643638472548 --0.427608883285 --0.0553195257678 --0.427673082379 --0.0459346749945 --0.427754997919 --0.0365444136292 --0.427752498045 --0.0274893383098 --0.42774968085 --0.0184335323263 --0.427746526053 --0.00937745141073 --0.427744848909 -0 --0.427746526053 -0.00937745141073 --0.42774968085 -0.0184335323263 --0.427752498045 -0.0274893383098 --0.427754997919 -0.0365444136292 --0.427673082379 -0.0459346749945 --0.427608883285 -0.0553195257678 --0.427646457882 -0.0643638472548 --0.427683726166 -0.0734090328885 --0.42772069843 -0.0824546304453 --0.418705039499 --0.127909580671 --0.418638860928 --0.118899858163 --0.418572459355 --0.109891750727 --0.418505804701 --0.100885679196 --0.4186131322 --0.09156627982 --0.418736800937 --0.0822383873074 --0.418702567301 --0.0732165620209 --0.418668057162 --0.0641951679709 --0.418633263362 --0.0551746470402 --0.418692781454 --0.0458140397756 --0.418768778522 --0.0364480489219 --0.418766607157 --0.0274168396857 --0.418764121024 --0.0183849116393 --0.4187613401 --0.00935271598039 --0.41875986503 -0 --0.4187613401 -0.00935271598039 --0.418764121024 -0.0183849116393 --0.418766607157 -0.0274168396857 --0.418768778522 -0.0364480489219 --0.418692781454 -0.0458140397756 --0.418633263362 -0.0551746470402 --0.418668057162 -0.0641951679709 --0.418702567301 -0.0732165620209 --0.418736800937 -0.0822383873074 --0.4186131322 -0.09156627982 --0.418505804701 -0.100885679196 --0.418572459355 -0.109891750727 --0.418638860928 -0.118899858163 --0.418705039499 -0.127909580671 --0.41009473881 --0.128419202349 --0.41002329297 --0.119373218514 --0.409951595521 --0.110328863448 --0.409879658335 --0.101286573382 --0.409995416794 --0.0919313066824 --0.410128726126 --0.082567521339 --0.41009165461 --0.0735094386816 --0.41005428615 --0.0644517834241 --0.410016600788 --0.0553950085828 --0.410080974771 --0.0459975507229 --0.410163077344 --0.0365946809162 --0.410160491999 --0.0275271548648 --0.410157558615 --0.0184588914283 --0.410154317665 --0.00939035198173 --0.410152613004 -0 --0.410154317665 -0.00939035198173 --0.410157558615 -0.0184588914283 --0.410160491999 -0.0275271548648 --0.410163077344 -0.0365946809162 --0.410080974771 -0.0459975507229 --0.410016600788 -0.0553950085828 --0.41005428615 -0.0644517834241 --0.41009165461 -0.0735094386816 --0.410128726126 -0.082567521339 --0.409995416794 -0.0919313066824 --0.409879658335 -0.101286573382 --0.409951595521 -0.110328863448 --0.41002329297 -0.119373218514 --0.41009473881 -0.128419202349 --0.401384384469 --0.220459013968 --0.401234732054 --0.211406673167 --0.401085068122 --0.202358568892 --0.400935382782 --0.193315118551 --0.401168387605 --0.184069972977 --0.401419637028 --0.174810222373 --0.401306369068 --0.165741345623 --0.401192940599 --0.156675375937 --0.401079363821 --0.147612748826 --0.401258088386 --0.138284288904 --0.401455364036 --0.12894422573 --0.40137870232 --0.119860883797 --0.401301770995 --0.110779181101 --0.401224602254 --0.1016995729 --0.401348708507 --0.0923073740248 --0.401491576065 --0.0829066222285 --0.401451684586 --0.0738111722517 --0.401411475598 --0.0647161484081 --0.40137093684 --0.0556220151431 --0.401440139158 --0.0461866258209 --0.401528278013 --0.036745791605 --0.401525270531 --0.0276408390871 --0.401521902204 --0.0185351313067 --0.401518186144 --0.00942913730454 --0.401516244302 -2.16840434497e-19 --0.401518186144 -0.00942913730454 --0.401521902204 -0.0185351313067 --0.401525270531 -0.0276408390871 --0.401528278013 -0.036745791605 --0.401440139158 -0.0461866258209 --0.40137093684 -0.0556220151431 --0.401411475598 -0.0647161484081 --0.401451684586 -0.0738111722517 --0.401491576065 -0.0829066222285 --0.401348708507 -0.0923073740248 --0.401224602254 -0.1016995729 --0.401301770995 -0.110779181101 --0.40137870232 -0.119860883797 --0.401455364036 -0.12894422573 --0.401258088386 -0.138284288904 --0.401079363821 -0.147612748826 --0.401192940599 -0.156675375937 --0.401306369068 -0.165741345623 --0.401419637028 -0.174810222373 --0.401168387605 -0.184069972977 --0.400935382782 -0.193315118551 --0.401085068122 -0.202358568892 --0.401234732054 -0.211406673167 --0.401384384469 -0.220459013968 --0.392363274975 --0.219947418843 --0.39222371765 --0.210916108398 --0.392084157409 --0.201889065689 --0.391944581046 --0.192866684998 --0.392161978041 --0.183641637913 --0.39239642204 --0.174402052928 --0.392290845697 --0.165354384606 --0.392185098316 --0.156309644438 --0.392079211827 --0.147268258916 --0.392245936562 --0.137960719094 --0.392429962702 --0.128641624053 --0.39235852524 --0.119579633309 --0.392286863721 --0.110519304829 --0.392214961513 --0.101461081062 --0.392330654308 --0.0920904165832 --0.392463894915 --0.0827112382306 --0.392426800465 --0.0736372594136 --0.392389393632 --0.0645637212255 --0.392351686004 --0.0554910821289 --0.392416110506 --0.0460776293857 --0.392498204654 --0.0366587576456 --0.392495539043 --0.0275753608312 --0.392492532618 --0.0184912192771 --0.392489196252 --0.00940679729692 --0.392487459181 -0 --0.392489196252 -0.00940679729692 --0.392492532618 -0.0184912192771 --0.392495539043 -0.0275753608312 --0.392498204654 -0.0366587576456 --0.392416110506 -0.0460776293857 --0.392351686004 -0.0554910821289 --0.392389393632 -0.0645637212255 --0.392426800465 -0.0736372594136 --0.392463894915 -0.0827112382306 --0.392330654308 -0.0920904165832 --0.392214961513 -0.101461081062 --0.392286863721 -0.110519304829 --0.39235852524 -0.119579633309 --0.392429962702 -0.128641624053 --0.392245936562 -0.137960719094 --0.392079211827 -0.147268258916 --0.392185098316 -0.156309644438 --0.392290845697 -0.165354384606 --0.39239642204 -0.174402052928 --0.392161978041 -0.183641637913 --0.391944581046 -0.192866684998 --0.392084157409 -0.201889065689 --0.39222371765 -0.210916108398 --0.392363274975 -0.219947418843 --0.383355461543 --0.219438023249 --0.38322598326 --0.210427672928 --0.383096493354 --0.201421605927 --0.382966998103 --0.192420217166 --0.383168841328 --0.183215170602 --0.383386507335 --0.173995643974 --0.383288582201 --0.164969108557 --0.383190506714 --0.155945517498 --0.383092307232 --0.146925298748 --0.383247037372 --0.137638564792 --0.383417844867 --0.128340320544 --0.383351636319 --0.11929960232 --0.383285225747 --0.110260565943 --0.383218585458 --0.101223648672 --0.383325880794 --0.0918743940199 --0.38344949406 --0.0825166692656 --0.383415194709 --0.0734640849346 --0.383380581515 --0.0644119505479 --0.383345688702 --0.0553607250209 --0.383405351719 --0.0459690863836 --0.383481428044 --0.0365720523 --0.383479100254 --0.0275101287792 --0.383476463485 --0.0184474725428 --0.383473514929 --0.00938454192642 --0.383471967669 -0 --0.383473514929 -0.00938454192642 --0.383476463485 -0.0184474725428 --0.383479100254 -0.0275101287792 --0.383481428044 -0.0365720523 --0.383405351719 -0.0459690863836 --0.383345688702 -0.0553607250209 --0.383380581515 -0.0644119505479 --0.383415194709 -0.0734640849346 --0.38344949406 -0.0825166692656 --0.383325880794 -0.0918743940199 --0.383218585458 -0.101223648672 --0.383285225747 -0.110260565943 --0.383351636319 -0.11929960232 --0.383417844867 -0.128340320544 --0.383247037372 -0.137638564792 --0.383092307232 -0.146925298748 --0.383190506714 -0.155945517498 --0.383288582201 -0.164969108557 --0.383386507335 -0.173995643974 --0.383168841328 -0.183215170602 --0.382966998103 -0.192420217166 --0.383096493354 -0.201421605927 --0.38322598326 -0.210427672928 --0.383355461543 -0.219438023249 --0.374332491483 --0.264019018376 --0.374184158405 --0.255047225491 --0.374035977857 --0.24608114617 --0.373887933071 --0.237121126334 --0.374117425826 --0.228034613887 --0.374361208534 --0.218930795129 --0.374241797176 --0.209941335889 --0.374122359763 --0.200956169136 --0.374002919455 --0.191975700187 --0.374189228512 --0.182790547081 --0.37439014371 --0.173590971459 --0.374299859429 --0.16458549304 --0.374209439952 --0.155582971909 --0.374118911154 --0.146583840399 --0.374261676892 --0.137317799952 --0.374419289896 --0.128040293551 --0.374358299386 --0.119020772734 --0.374297109072 --0.110002950991 --0.374235725275 --0.100987260166 --0.374334658445 --0.0916592998842 --0.374448639351 --0.0823229048267 --0.374417114723 --0.0732916314001 --0.374385308886 --0.0642608234907 --0.374353239451 --0.055230933862 --0.374408147872 --0.0458609887878 --0.374478212158 --0.0364856706291 --0.374476212559 --0.0274451395804 --0.374473935986 --0.0184038883802 --0.374471362461 --0.00936236887826 --0.374470001464 -0 --0.374471362461 -0.00936236887826 --0.374473935986 -0.0184038883802 --0.374476212559 -0.0274451395804 --0.374478212158 -0.0364856706291 --0.374408147872 -0.0458609887878 --0.374353239451 -0.055230933862 --0.374385308886 -0.0642608234907 --0.374417114723 -0.0732916314001 --0.374448639351 -0.0823229048267 --0.374334658445 -0.0916592998842 --0.374235725275 -0.100987260166 --0.374297109072 -0.110002950991 --0.374358299386 -0.119020772734 --0.374419289896 -0.128040293551 --0.374261676892 -0.137317799952 --0.374118911154 -0.146583840399 --0.374209439952 -0.155582971909 --0.374299859429 -0.16458549304 --0.37439014371 -0.173590971459 --0.374189228512 -0.182790547081 --0.374002919455 -0.191975700187 --0.374122359763 -0.200956169136 --0.374241797176 -0.209941335889 --0.374361208534 -0.218930795129 --0.374117425826 -0.228034613887 --0.373887933071 -0.237121126334 --0.374035977857 -0.24608114617 --0.374184158405 -0.255047225491 --0.374332491483 -0.264019018376 --0.365558020549 --0.264943758707 --0.365397583892 --0.255939063157 --0.36523732978 --0.246940150083 --0.365077222806 --0.237947376881 --0.365325227778 --0.228834052091 --0.36558865133 --0.219703411783 --0.365459442912 --0.210681225743 --0.365330226782 --0.201663384125 --0.36520101215 --0.192650299689 --0.365402401283 --0.183436129649 --0.365619562785 --0.174207529989 --0.365521816454 --0.165169444582 --0.365423935166 --0.156134350958 --0.365325939383 --0.147102683202 --0.36548034851 --0.137805844793 --0.365650791603 --0.128497527761 --0.365584685136 --0.119445459288 --0.365518366329 --0.110395102485 --0.36545183331 --0.101346897892 --0.365558986982 --0.0919867945877 --0.365682367799 --0.082618230146 --0.365648055553 --0.0735544083387 --0.365613468096 --0.0644910541512 --0.365578594795 --0.0554286234186 --0.365638219399 --0.0460256520825 --0.365714208647 --0.0366172837493 --0.365711782521 --0.0275441556661 --0.365709058302 --0.018470290165 --0.365706027653 --0.0093961491204 --0.365704432274 --2.16840434497e-19 --0.365706027653 -0.0093961491204 --0.365709058302 -0.018470290165 --0.365711782521 -0.0275441556661 --0.365714208647 -0.0366172837493 --0.365638219399 -0.0460256520825 --0.365578594795 -0.0554286234186 --0.365613468096 -0.0644910541512 --0.365648055553 -0.0735544083387 --0.365682367799 -0.082618230146 --0.365558986982 -0.0919867945877 --0.36545183331 -0.101346897892 --0.365518366329 -0.110395102485 --0.365584685136 -0.119445459288 --0.365650791603 -0.128497527761 --0.36548034851 -0.137805844793 --0.365325939383 -0.147102683202 --0.365423935166 -0.156134350958 --0.365521816454 -0.165169444582 --0.365619562785 -0.174207529989 --0.365402401283 -0.183436129649 --0.36520101215 -0.192650299689 --0.365330226782 -0.201663384125 --0.365459442912 -0.210681225743 --0.36558865133 -0.219703411783 --0.365325227778 -0.228834052091 --0.365077222806 -0.237947376881 --0.36523732978 -0.246940150083 --0.365397583892 -0.255939063157 --0.365558020549 -0.264943758707 --0.356757272612 --0.265901351667 --0.356584843314 --0.256862623039 --0.356412612381 --0.247829744844 --0.356240558698 --0.238803080246 --0.356506902586 --0.229661935363 --0.356789789123 --0.220503450041 --0.356650878702 --0.211447396948 --0.356511964604 --0.202395739977 --0.356373072656 --0.193348896545 --0.35658942496 --0.184104660017 --0.356822691648 --0.174845970541 --0.356717548508 --0.165774126621 --0.356612272987 --0.15670530976 --0.356506869373 --0.147639950532 --0.356672822428 --0.138311214439 --0.356855993565 --0.128970984432 --0.356784817075 --0.119885210856 --0.356713407676 --0.110801160721 --0.356641758066 --0.101719285577 --0.356757053482 --0.0923259130888 --0.356889777888 --0.082924052366 --0.356852708126 --0.0738265172616 --0.356815343795 --0.064729450801 --0.356777682982 --0.055633316069 --0.35684198265 --0.0461961756694 --0.356923852338 --0.0367536113825 --0.356921015885 --0.0276467191689 --0.35691785532 --0.018539071498 --0.356914370689 --0.00943113994673 --0.35691254249 -0 --0.356914370689 -0.00943113994673 --0.35691785532 -0.018539071498 --0.356921015885 -0.0276467191689 --0.356923852338 -0.0367536113825 --0.35684198265 -0.0461961756694 --0.356777682982 -0.055633316069 --0.356815343795 -0.064729450801 --0.356852708126 -0.0738265172616 --0.356889777888 -0.082924052366 --0.356757053482 -0.0923259130888 --0.356641758066 -0.101719285577 --0.356713407676 -0.110801160721 --0.356784817075 -0.119885210856 --0.356855993565 -0.128970984432 --0.356672822428 -0.138311214439 --0.356506869373 -0.147639950532 --0.356612272987 -0.15670530976 --0.356717548508 -0.165774126621 --0.356822691648 -0.174845970541 --0.35658942496 -0.184104660017 --0.356373072656 -0.193348896545 --0.356511964604 -0.202395739977 --0.356650878702 -0.211447396948 --0.356789789123 -0.220503450041 --0.356506902586 -0.229661935363 --0.356240558698 -0.238803080246 --0.356412612381 -0.247829744844 --0.356584843314 -0.256862623039 --0.356757272612 -0.265901351667 --0.347724920797 --0.265362069175 --0.347565159292 --0.256341718324 --0.347405566427 --0.247327223388 --0.347246145816 --0.238318962132 --0.347493098433 --0.229194608313 --0.347755388682 --0.220052972594 --0.34762670284 --0.211015467292 --0.347498020556 --0.201982380141 --0.347369351937 --0.192954103975 --0.347569923768 --0.183727541225 --0.347786179708 --0.174486579335 --0.347688810028 --0.165433421408 --0.347591304042 --0.156383309829 --0.34749367377 --0.14733666834 --0.347647489938 --0.138026327653 --0.347817266305 --0.128704531188 --0.347751392539 --0.119637576193 --0.347685300148 --0.110572356777 --0.347618968734 --0.101509318134 --0.347725757499 --0.092134880176 --0.347848732234 --0.0827519901685 --0.347814492404 --0.0736733723203 --0.347779973698 --0.0645952351695 --0.347745171925 --0.0555180372583 --0.347804630133 --0.0461001865651 --0.347880394608 --0.036676936049 --0.347877899475 --0.0275890336959 --0.347875101387 --0.0185003855727 --0.34787199702 --0.0094114587918 --0.347870366031 --2.16840434497e-19 --0.34787199702 -0.0094114587918 --0.347875101387 -0.0185003855727 --0.347877899475 -0.0275890336959 --0.347880394608 -0.036676936049 --0.347804630133 -0.0461001865651 --0.347745171925 -0.0555180372583 --0.347779973698 -0.0645952351695 --0.347814492404 -0.0736733723203 --0.347848732234 -0.0827519901685 --0.347725757499 -0.092134880176 --0.347618968734 -0.101509318134 --0.347685300148 -0.110572356777 --0.347751392539 -0.119637576193 --0.347817266305 -0.128704531188 --0.347647489938 -0.138026327653 --0.34749367377 -0.14733666834 --0.347591304042 -0.156383309829 --0.347688810028 -0.165433421408 --0.347786179708 -0.174486579335 --0.347569923768 -0.183727541225 --0.347369351937 -0.192954103975 --0.347498020556 -0.201982380141 --0.34762670284 -0.211015467292 --0.347755388682 -0.220052972594 --0.347493098433 -0.229194608313 --0.347246145816 -0.238318962132 --0.347405566427 -0.247327223388 --0.347565159292 -0.256341718324 --0.347724920797 -0.265362069175 --0.338703945726 --0.264824761986 --0.338556832642 --0.255822731636 --0.338409872532 --0.246826574177 --0.338263060245 --0.237836669818 --0.338490645655 --0.228729026973 --0.338732371129 --0.219604160402 --0.338613901838 --0.210585148594 --0.338495435498 --0.201570571817 --0.338376958897 --0.19256080853 --0.338561772823 --0.183351828441 --0.338761052942 --0.174128505518 --0.338671434022 --0.165093982099 --0.338581693448 --0.156062521305 --0.338491830368 --0.14703454261 --0.338633511217 --0.137742504225 --0.338789904079 --0.128439048974 --0.338729322595 --0.119390853644 --0.338668539411 --0.110344406028 --0.338607534028 --0.101300149366 --0.338705832705 --0.0919445511326 --0.33881904894 --0.0825805322156 --0.338787642224 --0.07352077647 --0.338755962601 --0.0644615102707 --0.338724017988 --0.0554031914221 --0.338778656972 --0.046004532305 --0.338848321817 --0.0366004946955 --0.338846159198 --0.0275315237623 --0.338843717411 --0.0184618172168 --0.338840995161 --0.00939183773559 --0.338839561169 -2.16840434497e-19 --0.338840995161 -0.00939183773559 --0.338843717411 -0.0184618172168 --0.338846159198 -0.0275315237623 --0.338848321817 -0.0366004946955 --0.338778656972 -0.046004532305 --0.338724017988 -0.0554031914221 --0.338755962601 -0.0644615102707 --0.338787642224 -0.07352077647 --0.33881904894 -0.0825805322156 --0.338705832705 -0.0919445511326 --0.338607534028 -0.101300149366 --0.338668539411 -0.110344406028 --0.338729322595 -0.119390853644 --0.338789904079 -0.128439048974 --0.338633511217 -0.137742504225 --0.338491830368 -0.14703454261 --0.338581693448 -0.156062521305 --0.338671434022 -0.165093982099 --0.338761052942 -0.174128505518 --0.338561772823 -0.183351828441 --0.338376958897 -0.19256080853 --0.338495435498 -0.201570571817 --0.338613901838 -0.210585148594 --0.338732371129 -0.219604160402 --0.338490645655 -0.228729026973 --0.338263060245 -0.237836669818 --0.338409872532 -0.246826574177 --0.338556832642 -0.255822731636 --0.338703945726 -0.264824761986 --0.329668467414 --0.309133374479 --0.329508027268 --0.300167561665 --0.329347889606 --0.291209159149 --0.329188037071 --0.282258495016 --0.329435055643 --0.273283920838 --0.329694652245 --0.26428938609 --0.329560171692 --0.255305631414 --0.329425827107 --0.246327772219 --0.329291615245 --0.237356178995 --0.329499866398 --0.228265173503 --0.329721050949 --0.219156996323 --0.329612780628 --0.210156419488 --0.329504510411 --0.201160289646 --0.329396216656 --0.192168993279 --0.32956529162 --0.1829775173 --0.329747604651 --0.173771741456 --0.329665713586 --0.164755793686 --0.329583725599 --0.155742926683 --0.329501631894 --0.146733560644 --0.329631200074 --0.137459727479 --0.329774234646 --0.128174515674 --0.3297189285 --0.119145022145 --0.329663424504 --0.110117291454 --0.329607736431 --0.101091767582 --0.329697577919 --0.0917549152772 --0.329801055354 --0.0824096693039 --0.329772452306 --0.0733687174489 --0.32974360883 --0.0643282677537 --0.32971452015 --0.0552887718434 --0.329764341224 --0.045909206179 --0.32982791569 --0.0365242821668 --0.329826091023 --0.02747418586 --0.32982401459 --0.0184233647268 --0.329821673566 --0.00937227570326 --0.329820434085 -0 --0.329821673566 -0.00937227570326 --0.32982401459 -0.0184233647268 --0.329826091023 -0.02747418586 --0.32982791569 -0.0365242821668 --0.329764341224 -0.045909206179 --0.32971452015 -0.0552887718434 --0.32974360883 -0.0643282677537 --0.329772452306 -0.0733687174489 --0.329801055354 -0.0824096693039 --0.329697577919 -0.0917549152772 --0.329607736431 -0.101091767582 --0.329663424504 -0.110117291454 --0.3297189285 -0.119145022145 --0.329774234646 -0.128174515674 --0.329631200074 -0.137459727479 --0.329501631894 -0.146733560644 --0.329583725599 -0.155742926683 --0.329665713586 -0.164755793686 --0.329747604651 -0.173771741456 --0.32956529162 -0.1829775173 --0.329396216656 -0.192168993279 --0.329504510411 -0.201160289646 --0.329612780628 -0.210156419488 --0.329721050949 -0.219156996323 --0.329499866398 -0.228265173503 --0.329291615245 -0.237356178995 --0.329425827107 -0.246327772219 --0.329560171692 -0.255305631414 --0.329694652245 -0.26428938609 --0.329435055643 -0.273283920838 --0.329188037071 -0.282258495016 --0.329347889606 -0.291209159149 --0.329508027268 -0.300167561665 --0.329668467414 -0.309133374479 --0.320744955908 --0.310080821199 --0.320570485259 --0.301085709411 --0.320396332273 --0.292098067262 --0.320222487522 --0.283118241017 --0.320490865517 --0.274122269059 --0.320772909737 --0.2651063449 --0.320626629035 --0.256093511333 --0.320480492706 --0.247086616645 --0.320334508839 --0.238086049007 --0.32056082163 --0.228971393051 --0.3208011786 --0.219839568269 --0.320683364054 --0.210810061716 --0.320565546099 --0.201785038709 --0.320447710867 --0.192764909758 --0.320631492654 --0.183547841764 --0.320829647041 --0.174316461301 --0.320740481599 --0.165271688566 --0.320651204451 --0.156230017577 --0.320561825459 --0.147191889691 --0.320702765438 --0.137890886196 --0.32085832212 --0.128578484254 --0.320798018684 --0.119520217596 --0.320737505199 --0.110463727342 --0.32067678822 --0.101409461806 --0.320774623818 --0.0920442467726 --0.320887269369 --0.082670622224 --0.320855943618 --0.0736008989086 --0.320824374503 --0.0645316776622 --0.320792536323 --0.0554634155629 --0.320846982601 --0.046054709568 --0.320916368318 --0.0366406242064 --0.320914123314 --0.0275617125442 --0.320911616353 --0.0184820628573 --0.320908825258 --0.00940213754122 --0.320907354095 -2.16840434497e-19 --0.320908825258 -0.00940213754122 --0.320911616353 -0.0184820628573 --0.320914123314 -0.0275617125442 --0.320916368318 -0.0366406242064 --0.320846982601 -0.046054709568 --0.320792536323 -0.0554634155629 --0.320824374503 -0.0645316776622 --0.320855943618 -0.0736008989086 --0.320887269369 -0.082670622224 --0.320774623818 -0.0920442467726 --0.32067678822 -0.101409461806 --0.320737505199 -0.110463727342 --0.320798018684 -0.119520217596 --0.32085832212 -0.128578484254 --0.320702765438 -0.137890886196 --0.320561825459 -0.147191889691 --0.320651204451 -0.156230017577 --0.320740481599 -0.165271688566 --0.320829647041 -0.174316461301 --0.320631492654 -0.183547841764 --0.320447710867 -0.192764909758 --0.320565546099 -0.201785038709 --0.320683364054 -0.210810061716 --0.3208011786 -0.219839568269 --0.32056082163 -0.228971393051 --0.320334508839 -0.238086049007 --0.320480492706 -0.247086616645 --0.320626629035 -0.256093511333 --0.320772909737 -0.2651063449 --0.320490865517 -0.274122269059 --0.320222487522 -0.283118241017 --0.320396332273 -0.292098067262 --0.320570485259 -0.301085709411 --0.320744955908 -0.310080821199 --0.311114723926 --0.328856158238 --0.311449232147 --0.319973503456 --0.311797981005 --0.31106817986 --0.311609576738 --0.30204258283 --0.311421518281 --0.293024526883 --0.311233804985 --0.284014382781 --0.311523386256 --0.274996024057 --0.311827700487 --0.26595770441 --0.31166971783 --0.256914602091 --0.311511898693 --0.247877492559 --0.311354240764 --0.238846764529 --0.31159846641 --0.229707402238 --0.311857843131 --0.220550864197 --0.311730550875 --0.211491228355 --0.311603258882 --0.202436122224 --0.31147596671 --0.193385958687 --0.311674345544 --0.184142189101 --0.311888223853 --0.174884095487 --0.311791851552 --0.165809300296 --0.311695354516 --0.156737627306 --0.311598735632 --0.147669521559 --0.311750947083 --0.138340195759 --0.311918924971 --0.128999456353 --0.311853663607 --0.119911201227 --0.311788188873 --0.110824740835 --0.311722492926 --0.101740524498 --0.311828242874 --0.0923457631941 --0.31194996713 --0.0829425714879 --0.311915959117 --0.0738428572914 --0.31188167856 --0.064743643803 --0.311847114613 --0.0556453983994 --0.311906162326 --0.0462063543326 --0.311981312639 --0.036761905193 --0.311978656937 --0.0276529557015 --0.311975712602 --0.0185432527489 --0.311972466663 --0.0094332665196 --0.311970766771 -0 --0.311972466663 -0.0094332665196 --0.311975712602 -0.0185432527489 --0.311978656937 -0.0276529557015 --0.311981312639 -0.036761905193 --0.311906162326 -0.0462063543326 --0.311847114613 -0.0556453983994 --0.31188167856 -0.064743643803 --0.311915959117 -0.0738428572914 --0.31194996713 -0.0829425714879 --0.311828242874 -0.0923457631941 --0.311722492926 -0.101740524498 --0.311788188873 -0.110824740835 --0.311853663607 -0.119911201227 --0.311918924971 -0.128999456353 --0.311750947083 -0.138340195759 --0.311598735632 -0.147669521559 --0.311695354516 -0.156737627306 --0.311791851552 -0.165809300296 --0.311888223853 -0.174884095487 --0.311674345544 -0.184142189101 --0.31147596671 -0.193385958687 --0.311603258882 -0.202436122224 --0.311730550875 -0.211491228355 --0.311857843131 -0.220550864197 --0.31159846641 -0.229707402238 --0.311354240764 -0.238846764529 --0.311511898693 -0.247877492559 --0.31166971783 -0.256914602091 --0.311827700487 -0.26595770441 --0.311523386256 -0.274996024057 --0.311233804985 -0.284014382781 --0.311421518281 -0.293024526883 --0.311609576738 -0.30204258283 --0.311797981005 -0.31106817986 --0.311449232147 -0.319973503456 --0.311114723926 -0.328856158238 --0.302125836538 --0.328291634425 --0.302433525987 --0.319421559786 --0.302754310621 --0.310528889449 --0.302581158781 --0.301519011118 --0.302408323783 --0.292516681467 --0.302235817967 --0.283522281028 --0.302502184569 --0.274517504472 --0.30278208936 --0.265492815763 --0.30263691053 --0.256465573218 --0.302491882951 --0.247444343963 --0.302346996219 --0.238429501994 --0.302571624784 --0.229304587546 --0.302810180541 --0.220162547137 --0.302693216298 --0.21111891548 --0.302576257459 --0.202079828633 --0.302459292134 --0.193045684199 --0.302641726059 --0.183817124118 --0.302838409123 --0.174574281554 --0.302749888846 --0.165515614066 --0.302661260454 --0.156460089553 --0.302572498385 --0.147408126096 --0.302712419601 --0.138094624245 --0.302866863534 --0.128769753946 --0.30280695806 --0.119697730505 --0.302746850428 --0.110627514483 --0.302686545731 --0.101559554414 --0.302783699683 --0.0921810880424 --0.302895547776 --0.0827942164954 --0.302864399137 --0.0737108225267 --0.302832994055 --0.0646279402388 --0.302801320423 --0.0555460313023 --0.302855480935 --0.0461235884241 --0.302924455399 --0.036695758815 --0.302922148736 --0.0276031916988 --0.30291957004 --0.0185098789931 --0.302916707961 --0.00941628774828 --0.302915206788 -0 --0.302916707961 -0.00941628774828 --0.30291957004 -0.0185098789931 --0.302922148736 -0.0276031916988 --0.302924455399 -0.036695758815 --0.302855480935 -0.0461235884241 --0.302801320423 -0.0555460313023 --0.302832994055 -0.0646279402388 --0.302864399137 -0.0737108225267 --0.302895547776 -0.0827942164954 --0.302783699683 -0.0921810880424 --0.302686545731 -0.101559554414 --0.302746850428 -0.110627514483 --0.30280695806 -0.119697730505 --0.302866863534 -0.128769753946 --0.302712419601 -0.138094624245 --0.302572498385 -0.147408126096 --0.302661260454 -0.156460089553 --0.302749888846 -0.165515614066 --0.302838409123 -0.174574281554 --0.302641726059 -0.183817124118 --0.302459292134 -0.193045684199 --0.302576257459 -0.202079828633 --0.302693216298 -0.21111891548 --0.302810180541 -0.220162547137 --0.302571624784 -0.229304587546 --0.302346996219 -0.238429501994 --0.302491882951 -0.247444343963 --0.30263691053 -0.256465573218 --0.30278208936 -0.265492815763 --0.302502184569 -0.274517504472 --0.302235817967 -0.283522281028 --0.302408323783 -0.292516681467 --0.302581158781 -0.301519011118 --0.302754310621 -0.310528889449 --0.302433525987 -0.319421559786 --0.302125836538 -0.328291634425 --0.29314643865 --0.327728855145 --0.293427325558 --0.318871312022 --0.293720169091 --0.309991229175 --0.293562264739 --0.300997033758 --0.293404642568 --0.292010411142 --0.293247313591 --0.283031715637 --0.293490483838 --0.274040456003 --0.293746000929 --0.265029333695 --0.293613598777 --0.256017906715 --0.293481340678 --0.247012524896 --0.293349211326 --0.238013547422 --0.293554259896 --0.228903017001 --0.293772017929 --0.219775404749 --0.293665376869 --0.210747742834 --0.293558740235 --0.201724640336 --0.293452095477 --0.192706489384 --0.293618591561 --0.183493068299 --0.293798088144 --0.17426540047 --0.293717404946 --0.165222823118 --0.293636628613 --0.156183402794 --0.293555727237 --0.14714755589 --0.2936833818 --0.137849811617 --0.29382429695 --0.128540731022 --0.293769736876 --0.119484906426 --0.29371499581 --0.110430896087 --0.293660067826 --0.10137914843 --0.293748646038 --0.0920169045105 --0.293850646981 --0.0826462825828 --0.293822336078 --0.0735791704675 --0.293793790503 --0.0645125811023 --0.293765009486 --0.0554469706399 --0.293814287108 --0.0460410494009 --0.293877098597 --0.0366297619252 --0.293875140272 --0.0275535403926 --0.293872927117 --0.018476580657 --0.293870448761 --0.00939934751652 --0.293869139014 -2.16840434497e-19 --0.293870448761 -0.00939934751652 --0.293872927117 -0.018476580657 --0.293875140272 -0.0275535403926 --0.293877098597 -0.0366297619252 --0.293814287108 -0.0460410494009 --0.293765009486 -0.0554469706399 --0.293793790503 -0.0645125811023 --0.293822336078 -0.0735791704675 --0.293850646981 -0.0826462825828 --0.293748646038 -0.0920169045105 --0.293660067826 -0.10137914843 --0.29371499581 -0.110430896087 --0.293769736876 -0.119484906426 --0.29382429695 -0.128540731022 --0.2936833818 -0.137849811617 --0.293555727237 -0.14714755589 --0.293636628613 -0.156183402794 --0.293717404946 -0.165222823118 --0.293798088144 -0.17426540047 --0.293618591561 -0.183493068299 --0.293452095477 -0.192706489384 --0.293558740235 -0.201724640336 --0.293665376869 -0.210747742834 --0.293772017929 -0.219775404749 --0.293554259896 -0.228903017001 --0.293349211326 -0.238013547422 --0.293481340678 -0.247012524896 --0.293613598777 -0.256017906715 --0.293746000929 -0.265029333695 --0.293490483838 -0.274040456003 --0.293247313591 -0.283031715637 --0.293404642568 -0.292010411142 --0.293562264739 -0.300997033758 --0.293720169091 -0.309991229175 --0.293427325558 -0.318871312022 --0.29314643865 -0.327728855145 --0.284176859091 --0.327167778104 --0.28443097868 --0.318322716535 --0.284695904457 --0.309455167689 --0.284553221241 --0.300476629955 --0.284410797702 --0.29150568456 --0.28426862633 --0.282542669054 --0.284488611393 --0.273564850113 --0.284719764582 --0.264567223434 --0.28460013555 --0.25557159808 --0.284480635905 --0.246582025975 --0.284361246234 --0.237598874944 --0.284546729397 --0.228502671046 --0.284743712645 --0.219389428457 --0.284647379993 --0.210377692649 --0.284551051944 --0.201370535053 --0.284454715117 --0.192368351861 --0.284605283363 --0.18316999699 --0.284767618683 --0.173957439498 --0.284694761086 --0.164930917307 --0.284621819624 --0.155907562849 --0.284548769609 --0.146887801775 --0.284664176057 --0.137605736971 --0.284791570058 --0.128312364824 --0.284742341517 --0.119272701278 --0.284692961016 --0.110234870222 --0.284643409613 --0.101199308241 --0.284723413626 --0.0918532043858 --0.284815572242 --0.0824987536413 --0.284790101687 --0.0734478900564 --0.284764410932 --0.0643975562849 --0.284738525489 --0.0553482114243 --0.28478293923 --0.0459587369183 --0.284839594095 --0.0365639119206 --0.284837971153 --0.0275039987135 --0.284836118021 --0.0184433563703 --0.284834022761 --0.00938244496082 --0.284832910131 -2.16840434497e-19 --0.284834022761 -0.00938244496082 --0.284836118021 -0.0184433563703 --0.284837971153 -0.0275039987135 --0.284839594095 -0.0365639119206 --0.28478293923 -0.0459587369183 --0.284738525489 -0.0553482114243 --0.284764410932 -0.0643975562849 --0.284790101687 -0.0734478900564 --0.284815572242 -0.0824987536413 --0.284723413626 -0.0918532043858 --0.284643409613 -0.101199308241 --0.284692961016 -0.110234870222 --0.284742341517 -0.119272701278 --0.284791570058 -0.128312364824 --0.284664176057 -0.137605736971 --0.284548769609 -0.146887801775 --0.284621819624 -0.155907562849 --0.284694761086 -0.164930917307 --0.284767618683 -0.173957439498 --0.284605283363 -0.18316999699 --0.284454715117 -0.192368351861 --0.284551051944 -0.201370535053 --0.284647379993 -0.210377692649 --0.284743712645 -0.219389428457 --0.284546729397 -0.228502671046 --0.284361246234 -0.237598874944 --0.284480635905 -0.246582025975 --0.28460013555 -0.25557159808 --0.284719764582 -0.264567223434 --0.284488611393 -0.273564850113 --0.28426862633 -0.282542669054 --0.284410797702 -0.29150568456 --0.284553221241 -0.300476629955 --0.284695904457 -0.309455167689 --0.28443097868 -0.318322716535 --0.284176859091 -0.327167778104 --0.275069696207 --0.32802076568 --0.275347961655 --0.319159413297 --0.27563805029 --0.310275554138 --0.275481596181 --0.301271611763 --0.27532544883 --0.292275331642 --0.275169582419 --0.283287047536 --0.275410476556 --0.27429072797 --0.275663610449 --0.265274603837 --0.275532422884 --0.256253778465 --0.27540136729 --0.24723904213 --0.275270436511 --0.238230778675 --0.275473603745 --0.229114122226 --0.275689364234 --0.219980426346 --0.275583680425 --0.210943619606 --0.275477992612 --0.201911421839 --0.275372300884 --0.192884249624 --0.275537310898 --0.183663770114 --0.27571520061 --0.174429080312 --0.275635211471 --0.165377578693 --0.275555126561 --0.156329268619 --0.275474929424 --0.147284586451 --0.2756014848 --0.1379790344 --0.275741156471 --0.1286621608 --0.275687035827 --0.119597566138 --0.275632733326 --0.110534813151 --0.275578248208 --0.101474346538 --0.275666089959 --0.0921037267273 --0.275767223797 --0.0827247425563 --0.275739104616 --0.0736489508499 --0.275710744018 --0.064573688736 --0.275682160731 --0.0554994190123 --0.275731100507 --0.0460847562483 --0.275793436609 --0.0366647230362 --0.275791397737 --0.0275798412575 --0.275789106002 --0.0184942186436 --0.275786566269 --0.00940832041669 --0.27578523136 -0 --0.275786566269 -0.00940832041669 --0.275789106002 -0.0184942186436 --0.275791397737 -0.0275798412575 --0.275793436609 -0.0366647230362 --0.275731100507 -0.0460847562483 --0.275682160731 -0.0554994190123 --0.275710744018 -0.064573688736 --0.275739104616 -0.0736489508499 --0.275767223797 -0.0827247425563 --0.275666089959 -0.0921037267273 --0.275578248208 -0.101474346538 --0.275632733326 -0.110534813151 --0.275687035827 -0.119597566138 --0.275741156471 -0.1286621608 --0.2756014848 -0.1379790344 --0.275474929424 -0.147284586451 --0.275555126561 -0.156329268619 --0.275635211471 -0.165377578693 --0.27571520061 -0.174429080312 --0.275537310898 -0.183663770114 --0.275372300884 -0.192884249624 --0.275477992612 -0.201911421839 --0.275583680425 -0.210943619606 --0.275689364234 -0.219980426346 --0.275473603745 -0.229114122226 --0.275270436511 -0.238230778675 --0.27540136729 -0.24723904213 --0.275532422884 -0.256253778465 --0.275663610449 -0.265274603837 --0.275410476556 -0.27429072797 --0.275169582419 -0.283287047536 --0.27532544883 -0.292275331642 --0.275481596181 -0.301271611763 --0.27563805029 -0.310275554138 --0.275347961655 -0.319159413297 --0.275069696207 -0.32802076568 --0.265835698426 --0.373411774802 --0.266177956481 --0.364682933089 --0.26653254893 --0.355928961386 --0.266335276732 --0.346915553692 --0.266138532803 --0.337911547528 --0.265942307909 --0.328917250362 --0.266244553571 --0.320038643355 --0.266559633489 --0.311137530782 --0.266389510055 --0.302106948793 --0.26621972196 --0.293084102499 --0.26605025587 --0.284069337336 --0.266311930036 --0.275053487281 --0.266586890731 --0.266017831502 --0.266444217657 --0.256970560325 --0.266301685546 --0.247929429822 --0.266159305883 --0.238894834789 --0.266380051245 --0.229756630092 --0.266614456726 --0.22060136464 --0.266499479508 --0.211538241337 --0.266384501534 --0.202479767561 --0.266269522967 --0.19342635438 --0.266448887389 --0.184182603364 --0.26664222367 --0.174924621342 --0.266555149775 --0.165846884457 --0.266467968736 --0.156772363419 --0.266380669848 --0.147701492821 --0.266518299074 --0.138371257307 --0.266670159756 --0.129029686623 --0.266611182675 --0.119938897097 --0.266552005148 --0.110849957544 --0.266492621864 --0.101763320972 --0.266588251646 --0.0923669585861 --0.266698301529 --0.0829622057646 --0.266667540043 --0.0738602090719 --0.266636528383 --0.0647587474214 --0.266605265536 --0.0556582813833 --0.266658699579 --0.0462171781477 --0.266726671979 --0.0367706828153 --0.266724225018 --0.0276595573363 --0.266721501469 --0.0185476783533 --0.266718507691 --0.00943551714935 --0.266716946307 -2.16840434497e-19 --0.266718507691 -0.00943551714935 --0.266721501469 -0.0185476783533 --0.266724225018 -0.0276595573363 --0.266726671979 -0.0367706828153 --0.266658699579 -0.0462171781477 --0.266605265536 -0.0556582813833 --0.266636528383 -0.0647587474214 --0.266667540043 -0.0738602090719 --0.266698301529 -0.0829622057646 --0.266588251646 -0.0923669585861 --0.266492621864 -0.101763320972 --0.266552005148 -0.110849957544 --0.266611182675 -0.119938897097 --0.266670159756 -0.129029686623 --0.266518299074 -0.138371257307 --0.266380669848 -0.147701492821 --0.266467968736 -0.156772363419 --0.266555149775 -0.165846884457 --0.26664222367 -0.174924621342 --0.266448887389 -0.184182603364 --0.266269522967 -0.19342635438 --0.266384501534 -0.202479767561 --0.266499479508 -0.211538241337 --0.266614456726 -0.22060136464 --0.266380051245 -0.229756630092 --0.266159305883 -0.238894834789 --0.266301685546 -0.247929429822 --0.266444217657 -0.256970560325 --0.266586890731 -0.266017831502 --0.266311930036 -0.275053487281 --0.26605025587 -0.284069337336 --0.26621972196 -0.293084102499 --0.266389510055 -0.302106948793 --0.266559633489 -0.311137530782 --0.266244553571 -0.320038643355 --0.265942307909 -0.328917250362 --0.266138532803 -0.337911547528 --0.266335276732 -0.346915553692 --0.26653254893 -0.355928961386 --0.266177956481 -0.364682933089 --0.265835698426 -0.373411774802 --0.256843421781 --0.372880595957 --0.257155007289 --0.36416138265 --0.257477805431 --0.355417091688 --0.257298396159 --0.3464167442 --0.257119466541 --0.33742581245 --0.256941014122 --0.328444591038 --0.257216182568 --0.319576498446 --0.257503022997 --0.310685962434 --0.257348301974 --0.301668563295 --0.257193874445 --0.292658909373 --0.257039745308 --0.28365734543 --0.257277976479 --0.274652829833 --0.257528290573 --0.26562856627 --0.257398547393 --0.256594604071 --0.257268924679 --0.247566782164 --0.257139440741 --0.238545505432 --0.25734040131 --0.229419379175 --0.257553781186 --0.220276227174 --0.25744922762 --0.21122651492 --0.25734467829 --0.202181475109 --0.257240133263 --0.193141501148 --0.257403391127 --0.183910453894 --0.257579371662 --0.174665210721 --0.257500231225 --0.165600993337 --0.257420975799 --0.156540005282 --0.257341617204 --0.147482669911 --0.25746685232 --0.138165657456 --0.257605031929 --0.128837342054 --0.257551451243 --0.119760156431 --0.257497704831 --0.1106848343 --0.257443770025 --0.101611825279 --0.25753072048 --0.0922290734265 --0.2576308004 --0.0828379535489 --0.257602913149 --0.0737496354662 --0.257574802903 --0.0646618612348 --0.257546463706 --0.0555750888329 --0.257594968005 --0.0461478534607 --0.257656703538 --0.0367152422213 --0.257654595294 --0.0276178472825 --0.257652246569 --0.0185197058216 --0.257649639957 --0.00942128641518 --0.257648272323 -0 --0.257649639957 -0.00942128641518 --0.257652246569 -0.0185197058216 --0.257654595294 -0.0276178472825 --0.257656703538 -0.0367152422213 --0.257594968005 -0.0461478534607 --0.257546463706 -0.0555750888329 --0.257574802903 -0.0646618612348 --0.257602913149 -0.0737496354662 --0.2576308004 -0.0828379535489 --0.25753072048 -0.0922290734265 --0.257443770025 -0.101611825279 --0.257497704831 -0.1106848343 --0.257551451243 -0.119760156431 --0.257605031929 -0.128837342054 --0.25746685232 -0.138165657456 --0.257341617204 -0.147482669911 --0.257420975799 -0.156540005282 --0.257500231225 -0.165600993337 --0.257579371662 -0.174665210721 --0.257403391127 -0.183910453894 --0.257240133263 -0.193141501148 --0.25734467829 -0.202181475109 --0.25744922762 -0.21122651492 --0.257553781186 -0.220276227174 --0.25734040131 -0.229419379175 --0.257139440741 -0.238545505432 --0.257268924679 -0.247566782164 --0.257398547393 -0.256594604071 --0.257528290573 -0.26562856627 --0.257277976479 -0.274652829833 --0.257039745308 -0.28365734543 --0.257193874445 -0.292658909373 --0.257348301974 -0.301668563295 --0.257503022997 -0.310685962434 --0.257216182568 -0.319576498446 --0.256941014122 -0.328444591038 --0.257119466541 -0.33742581245 --0.257298396159 -0.3464167442 --0.257477805431 -0.355417091688 --0.257155007289 -0.36416138265 --0.256843421781 -0.372880595957 --0.247858830684 --0.372350682429 --0.248139748072 --0.36364105674 --0.248430763083 --0.354906400577 --0.248269207727 --0.345919098863 --0.248108077683 --0.336941221707 --0.247947377225 --0.327973061263 --0.248195494053 --0.319115453985 --0.248454115439 --0.310235439298 --0.248314778814 --0.30123120773 --0.248175705427 --0.292234737742 --0.248036906388 --0.283246360049 --0.248251707179 --0.274253144337 --0.248477387284 --0.26524021369 --0.248360551802 --0.256219532139 --0.24824383448 --0.247205014174 --0.248127241492 --0.238197039265 --0.248308409796 --0.229082930015 --0.248500769484 --0.21995184157 --0.248406648761 --0.210915533416 --0.248312530916 --0.201883909558 --0.248218405357 --0.192857355537 --0.248365559114 --0.183638953896 --0.248524193066 --0.174406395508 --0.248452968328 --0.16535568232 --0.248381632033 --0.156308202787 --0.248310225241 --0.147264398477 --0.248423066874 --0.137960555697 --0.248547572599 --0.128645426521 --0.248499390129 --0.119581829515 --0.248451058799 --0.110520106659 --0.248402562051 --0.101460702741 --0.248480838287 --0.092091500013 --0.248570959733 --0.0827139545225 --0.248545949998 --0.0736392980185 --0.248520733324 --0.0645651926218 --0.2484953156 --0.055492096413 --0.248538892737 --0.0460786675632 --0.248594401221 --0.03665987857 --0.248592631649 --0.0275761953393 --0.248590651279 --0.0184917720928 --0.248588437081 --0.0094070755878 --0.248587262899 -0 --0.248588437081 -0.0094070755878 --0.248590651279 -0.0184917720928 --0.248592631649 -0.0275761953393 --0.248594401221 -0.03665987857 --0.248538892737 -0.0460786675632 --0.2484953156 -0.055492096413 --0.248520733324 -0.0645651926218 --0.248545949998 -0.0736392980185 --0.248570959733 -0.0827139545225 --0.248480838287 -0.092091500013 --0.248402562051 -0.101460702741 --0.248451058799 -0.110520106659 --0.248499390129 -0.119581829515 --0.248547572599 -0.128645426521 --0.248423066874 -0.137960555697 --0.248310225241 -0.147264398477 --0.248381632033 -0.156308202787 --0.248452968328 -0.16535568232 --0.248524193066 -0.174406395508 --0.248365559114 -0.183638953896 --0.248218405357 -0.192857355537 --0.248312530916 -0.201883909558 --0.248406648761 -0.210915533416 --0.248500769484 -0.21995184157 --0.248308409796 -0.229082930015 --0.248127241492 -0.238197039265 --0.24824383448 -0.247205014174 --0.248360551802 -0.256219532139 --0.248477387284 -0.26524021369 --0.248251707179 -0.274253144337 --0.248036906388 -0.283246360049 --0.248175705427 -0.292234737742 --0.248314778814 -0.30123120773 --0.248454115439 -0.310235439298 --0.248195494053 -0.319115453985 --0.247947377225 -0.327973061263 --0.248108077683 -0.336941221707 --0.248269207727 -0.345919098863 --0.248430763083 -0.354906400577 --0.248139748072 -0.36364105674 --0.247858830684 -0.372350682429 --0.238882287023 --0.371822026727 --0.239132569721 --0.363121940147 --0.23939182484 --0.354396880892 --0.239248099843 --0.345422616533 --0.239104751569 --0.336457773771 --0.238961790726 --0.32750266724 --0.239182858065 --0.318655488508 --0.239413269513 --0.309785951408 --0.239289307422 --0.300794878531 --0.239165589885 --0.291811572629 --0.239042111586 --0.282836367078 --0.239233481465 --0.273854392205 --0.239434545483 --0.264852747826 --0.239330604819 --0.255845331518 --0.239226779567 --0.246844107646 --0.239123059229 --0.237849435776 --0.239284449974 --0.228747282459 --0.239455822079 --0.219628201687 --0.239372118069 --0.210605281392 --0.239288415559 --0.201587050865 --0.239204704207 --0.192573903105 --0.239335771486 --0.183368096643 --0.239477060543 --0.174148168886 --0.23941373178 --0.165110938684 --0.239350318113 --0.156076955185 --0.239286849167 --0.147046658371 --0.239387300514 --0.13775591985 --0.239498154068 --0.128453921435 --0.239455375927 --0.119403898574 --0.239412448761 --0.110355763173 --0.239369373251 --0.101309945732 --0.23943898742 --0.0919542342762 --0.239519163653 --0.0825902078698 --0.239497028518 --0.0735291935104 --0.239474696873 --0.0644687369172 --0.239452191847 --0.0554092970245 --0.239490851569 --0.0460096154687 --0.239540143606 --0.0366045886723 --0.239538712155 --0.0275345987278 --0.239537082624 --0.0184638753228 --0.239535266169 --0.009392883356 --0.239534308316 --2.16840434497e-19 --0.239535266169 -0.009392883356 --0.239537082624 -0.0184638753228 --0.239538712155 -0.0275345987278 --0.239540143606 -0.0366045886723 --0.239490851569 -0.0460096154687 --0.239452191847 -0.0554092970245 --0.239474696873 -0.0644687369172 --0.239497028518 -0.0735291935104 --0.239519163653 -0.0825902078698 --0.23943898742 -0.0919542342762 --0.239369373251 -0.101309945732 --0.239412448761 -0.110355763173 --0.239455375927 -0.119403898574 --0.239498154068 -0.128453921435 --0.239387300514 -0.13775591985 --0.239286849167 -0.147046658371 --0.239350318113 -0.156076955185 --0.23941373178 -0.165110938684 --0.239477060543 -0.174148168886 --0.239335771486 -0.183368096643 --0.239204704207 -0.192573903105 --0.239288415559 -0.201587050865 --0.239372118069 -0.210605281392 --0.239455822079 -0.219628201687 --0.239284449974 -0.228747282459 --0.239123059229 -0.237849435776 --0.239226779567 -0.246844107646 --0.239330604819 -0.255845331518 --0.239434545483 -0.264852747826 --0.239233481465 -0.273854392205 --0.239042111586 -0.282836367078 --0.239165589885 -0.291811572629 --0.239289307422 -0.300794878531 --0.239413269513 -0.309785951408 --0.239182858065 -0.318655488508 --0.238961790726 -0.32750266724 --0.239104751569 -0.336457773771 --0.239248099843 -0.345422616533 --0.23939182484 -0.354396880892 --0.239132569721 -0.363121940147 --0.238882287023 -0.371822026727 --0.229651167689 --0.372628618266 --0.229927860609 --0.363916788693 --0.230214468241 --0.355179988105 --0.230055333409 --0.346184117298 --0.2298966246 --0.337197725325 --0.229738346453 --0.328221156938 --0.229982731598 --0.319360229871 --0.230237451662 --0.310476932009 --0.230100199264 --0.30146445936 --0.22996322397 --0.292459811701 --0.229826493489 --0.283463316686 --0.230038115602 --0.274465747101 --0.23026046152 --0.2654485128 --0.230145343804 --0.256419856395 --0.230030355863 --0.247397424641 --0.229915487123 --0.238381597951 --0.230093957864 --0.229262238546 --0.230283455294 --0.220125947072 --0.230190695811 --0.211081897015 --0.230097941071 --0.202042560598 --0.230005198313 --0.193008350415 --0.230150239999 --0.183783935068 --0.230306567083 --0.174545389225 --0.230236349911 --0.165487105809 --0.230166042246 --0.156432092014 --0.230095645653 --0.147380778756 --0.230206862782 --0.138070291722 --0.230329579231 --0.128748540587 --0.230282053326 --0.119677497547 --0.230234371529 --0.110608351528 --0.230186529656 --0.101541539237 --0.230263735966 --0.0921652269094 --0.230352597881 --0.0827805859827 --0.230327886942 --0.073698558281 --0.23030296403 --0.0646170846254 --0.230277841296 --0.0555366273984 --0.230320897489 --0.046115781938 --0.230375702657 --0.0366895767916 --0.230373864722 --0.027598537392 --0.230371805377 --0.0185067546307 --0.230369547691 --0.00941469741526 --0.230368369429 --2.16840434497e-19 --0.230369547691 -0.00941469741526 --0.230371805377 -0.0185067546307 --0.230373864722 -0.027598537392 --0.230375702657 -0.0366895767916 --0.230320897489 -0.046115781938 --0.230277841296 -0.0555366273984 --0.23030296403 -0.0646170846254 --0.230327886942 -0.073698558281 --0.230352597881 -0.0827805859827 --0.230263735966 -0.0921652269094 --0.230186529656 -0.101541539237 --0.230234371529 -0.110608351528 --0.230282053326 -0.119677497547 --0.230329579231 -0.128748540587 --0.230206862782 -0.138070291722 --0.230095645653 -0.147380778756 --0.230166042246 -0.156432092014 --0.230236349911 -0.165487105809 --0.230306567083 -0.174545389225 --0.230150239999 -0.183783935068 --0.230005198313 -0.193008350415 --0.230097941071 -0.202042560598 --0.230190695811 -0.211081897015 --0.230283455294 -0.220125947072 --0.230093957864 -0.229262238546 --0.229915487123 -0.238381597951 --0.230030355863 -0.247397424641 --0.230145343804 -0.256419856395 --0.23026046152 -0.2654485128 --0.230038115602 -0.274465747101 --0.229826493489 -0.283463316686 --0.22996322397 -0.292459811701 --0.230100199264 -0.30146445936 --0.230237451662 -0.310476932009 --0.229982731598 -0.319360229871 --0.229738346453 -0.328221156938 --0.2298966246 -0.337197725325 --0.230055333409 -0.346184117298 --0.230214468241 -0.355179988105 --0.229927860609 -0.363916788693 --0.229651167689 -0.372628618266 --0.220994941014 --0.400457983381 --0.220796836909 --0.391455670622 --0.220599417687 --0.382464710489 --0.220402670336 --0.373485369837 --0.220705604405 --0.364760912175 --0.221019400392 --0.356011476985 --0.220844961006 --0.34699275816 --0.220670996657 --0.337983585591 --0.220497494956 --0.32898430237 --0.220765061248 --0.32010864618 --0.221043957073 --0.311210616228 --0.220893494423 --0.302175487323 --0.22074332497 --0.293148232322 --0.220593438842 --0.284129195963 --0.220825206628 --0.275114992477 --0.221068699281 --0.266081105443 --0.220942476341 --0.257029940099 --0.220816391706 --0.247985036323 --0.220690446453 --0.238946784032 --0.220885894279 --0.229809097373 --0.221093401456 --0.220654458361 --0.22099166152 --0.211588003408 --0.220889918757 --0.202526285822 --0.220788180227 --0.193469716226 --0.220947119109 --0.184225513209 --0.221118405658 --0.174967171159 --0.221041332835 --0.165886546205 --0.220964158444 --0.156809203509 --0.220886889677 --0.147735582409 --0.221008816149 --0.13840411933 --0.221143314275 --0.129061381095 --0.221091069823 --0.119968022118 --0.221038658411 --0.110876563039 --0.220986086113 --0.10178745969 --0.221070837132 --0.0923892806869 --0.221168330313 --0.0829827519957 --0.221141064697 --0.0738784041023 --0.221113566533 --0.0647746071628 --0.221085836768 --0.0556718287884 --0.221133262967 --0.0462285315435 --0.221193547048 --0.0367798557533 --0.221191309234 --0.0276664571392 --0.221188838454 --0.0185523046805 --0.221186125082 --0.0094378701392 --0.221184705469 -2.16840434497e-19 --0.221186125082 -0.0094378701392 --0.221188838454 -0.0185523046805 --0.221191309234 -0.0276664571392 --0.221193547048 -0.0367798557533 --0.221133262967 -0.0462285315435 --0.221085836768 -0.0556718287884 --0.221113566533 -0.0647746071628 --0.221141064697 -0.0738784041023 --0.221168330313 -0.0829827519957 --0.221070837132 -0.0923892806869 --0.220986086113 -0.10178745969 --0.221038658411 -0.110876563039 --0.221091069823 -0.119968022118 --0.221143314275 -0.129061381095 --0.221008816149 -0.13840411933 --0.220886889677 -0.147735582409 --0.220964158444 -0.156809203509 --0.221041332835 -0.165886546205 --0.221118405658 -0.174967171159 --0.220947119109 -0.184225513209 --0.220788180227 -0.193469716226 --0.220889918757 -0.202526285822 --0.22099166152 -0.211588003408 --0.221093401456 -0.220654458361 --0.220885894279 -0.229809097373 --0.220690446453 -0.238946784032 --0.220816391706 -0.247985036323 --0.220942476341 -0.257029940099 --0.221068699281 -0.266081105443 --0.220825206628 -0.275114992477 --0.220593438842 -0.284129195963 --0.22074332497 -0.293148232322 --0.220893494423 -0.302175487323 --0.221043957073 -0.311210616228 --0.220765061248 -0.32010864618 --0.220497494956 -0.32898430237 --0.220670996657 -0.337983585591 --0.220844961006 -0.34699275816 --0.221019400392 -0.356011476985 --0.220705604405 -0.364760912175 --0.220402670336 -0.373485369837 --0.220599417687 -0.382464710489 --0.220796836909 -0.391455670622 --0.220994941014 -0.400457983381 --0.211929408244 --0.399999319146 --0.211751793079 --0.39100744775 --0.211574780327 --0.382026933176 --0.21139836404 --0.373058041213 --0.21167034609 --0.364341306795 --0.211952070531 --0.355599650025 --0.211795652689 --0.346591475106 --0.211639660596 --0.337592847107 --0.211484083012 --0.32860411117 --0.211724326634 --0.319736889812 --0.211974732804 --0.310847347977 --0.21183981023 --0.301822857459 --0.211705145467 --0.292806240557 --0.211570739127 --0.28379784984 --0.211778851458 --0.274792743143 --0.211997480275 --0.265767993907 --0.211884303243 --0.256727559079 --0.211771239254 --0.247693388863 --0.211658295184 --0.238665871547 --0.211833774344 --0.229537859639 --0.21202007853 --0.22039293282 --0.211928863532 --0.211337296931 --0.211837644478 --0.202286407591 --0.211746422996 --0.193240662038 --0.21188910613 --0.184006642681 --0.212042871266 --0.174758515221 --0.211973788066 --0.165688783762 --0.211904618555 --0.156622346806 --0.21183536442 --0.147559632178 --0.211944782363 --0.138238765243 --0.212065490439 --0.128906651972 --0.212018699959 --0.119824259214 --0.211971749216 --0.110743768751 --0.211924654823 --0.10166564037 --0.212000658816 --0.0922783718241 --0.212088108523 --0.0828827715483 --0.212063735827 --0.073789441513 --0.212039157795 --0.0646966714358 --0.21201437672 --0.055604924832 --0.212056834501 --0.0461727422766 --0.212110842781 --0.0367351943393 --0.212108951366 --0.0276328569974 --0.212106845778 --0.0185297711111 --0.21210451682 --0.00942640638465 --0.212103292735 -0 --0.21210451682 -0.00942640638465 --0.212106845778 -0.0185297711111 --0.212108951366 -0.0276328569974 --0.212110842781 -0.0367351943393 --0.212056834501 -0.0461727422766 --0.21201437672 -0.055604924832 --0.212039157795 -0.0646966714358 --0.212063735827 -0.073789441513 --0.212088108523 -0.0828827715483 --0.212000658816 -0.0922783718241 --0.211924654823 -0.10166564037 --0.211971749216 -0.110743768751 --0.212018699959 -0.119824259214 --0.212065490439 -0.128906651972 --0.211944782363 -0.138238765243 --0.21183536442 -0.147559632178 --0.211904618555 -0.156622346806 --0.211973788066 -0.165688783762 --0.212042871266 -0.174758515221 --0.21188910613 -0.184006642681 --0.211746422996 -0.193240662038 --0.211837644478 -0.202286407591 --0.211928863532 -0.211337296931 --0.21202007853 -0.22039293282 --0.211833774344 -0.229537859639 --0.211658295184 -0.238665871547 --0.211771239254 -0.247693388863 --0.211884303243 -0.256727559079 --0.211997480275 -0.265767993907 --0.211778851458 -0.274792743143 --0.211570739127 -0.28379784984 --0.211705145467 -0.292806240557 --0.21183981023 -0.301822857459 --0.211974732804 -0.310847347977 --0.211724326634 -0.319736889812 --0.211484083012 -0.32860411117 --0.211639660596 -0.337592847107 --0.211795652689 -0.346591475106 --0.211952070531 -0.355599650025 --0.21167034609 -0.364341306795 --0.21139836404 -0.373058041213 --0.211574780327 -0.382026933176 --0.211751793079 -0.39100744775 --0.211929408244 -0.399999319146 --0.202869849478 --0.399541376814 --0.202712696236 --0.390559947777 --0.202556090028 --0.381589886262 --0.202400010611 --0.372631439127 --0.202641047395 --0.363922402073 --0.202890702501 --0.355188478546 --0.202752291936 --0.3461908379 --0.202614256673 --0.337202764084 --0.202476594184 --0.328224573762 --0.202689532236 --0.319365760649 --0.202911449756 --0.310484665841 --0.202792054323 --0.301470798791 --0.202672891877 --0.292464819335 --0.202553951438 --0.283467077735 --0.202738412805 --0.274471036891 --0.202932189177 --0.265455388782 --0.202832046461 --0.256425676115 --0.202731996348 --0.247402231082 --0.202632051945 --0.238385446136 --0.202787567151 --0.229267075752 --0.202952668451 --0.220131822758 --0.202871962478 --0.211086992288 --0.202791262101 --0.202046922709 --0.202710563058 --0.193012011593 --0.202836993681 --0.183788138023 --0.202973247156 --0.174550180993 --0.202912160297 --0.165491340874 --0.202850991874 --0.156435800269 --0.202789731884 --0.147383991006 --0.202886638407 --0.138073680215 --0.202993566323 --0.128752143435 --0.202952227409 --0.119680710324 --0.202910744758 --0.110611190482 --0.202869125949 --0.101544030597 --0.202936374374 --0.0921676246675 --0.203013782019 --0.0827829122403 --0.202992306606 --0.073700596384 --0.202970653262 --0.0646188490147 --0.202948824242 --0.055538130142 --0.202986309406 --0.0461170163846 --0.203034043512 --0.0366905511087 --0.203032493904 --0.027599268893 --0.203030743714 --0.0185072445957 --0.203028809091 --0.00941494645388 --0.203027790372 -0 --0.203028809091 -0.00941494645388 --0.203030743714 -0.0185072445957 --0.203032493904 -0.027599268893 --0.203034043512 -0.0366905511087 --0.202986309406 -0.0461170163846 --0.202948824242 -0.055538130142 --0.202970653262 -0.0646188490147 --0.202992306606 -0.073700596384 --0.203013782019 -0.0827829122403 --0.202936374374 -0.0921676246675 --0.202869125949 -0.101544030597 --0.202910744758 -0.110611190482 --0.202952227409 -0.119680710324 --0.202993566323 -0.128752143435 --0.202886638407 -0.138073680215 --0.202789731884 -0.147383991006 --0.202850991874 -0.156435800269 --0.202912160297 -0.165491340874 --0.202973247156 -0.174550180993 --0.202836993681 -0.183788138023 --0.202710563058 -0.193012011593 --0.202791262101 -0.202046922709 --0.202871962478 -0.211086992288 --0.202952668451 -0.220131822758 --0.202787567151 -0.229267075752 --0.202632051945 -0.238385446136 --0.202731996348 -0.247402231082 --0.202832046461 -0.256425676115 --0.202932189177 -0.265455388782 --0.202738412805 -0.274471036891 --0.202553951438 -0.283467077735 --0.202672891877 -0.292464819335 --0.202792054323 -0.301470798791 --0.202911449756 -0.310484665841 --0.202689532236 -0.319365760649 --0.202476594184 -0.328224573762 --0.202614256673 -0.337202764084 --0.202752291936 -0.3461908379 --0.202890702501 -0.355188478546 --0.202641047395 -0.363922402073 --0.202400010611 -0.372631439127 --0.202556090028 -0.381589886262 --0.202712696236 -0.390559947777 --0.202869849478 -0.399541376814 --0.193816669683 --0.399084150057 --0.193679970036 --0.390113163736 --0.193543750859 --0.381153545649 --0.193407984364 --0.372205530615 --0.193618092154 --0.363504165726 --0.19383569087 --0.354777958162 --0.193715277464 --0.345790850687 --0.193595187158 --0.33681332743 --0.193475423828 --0.327845681384 --0.193661067429 --0.31899523736 --0.19385451456 --0.310122550317 --0.193750635067 --0.301119310803 --0.193646955019 --0.29212396702 --0.19354346817 --0.283136860594 --0.193704289638 --0.274149843134 --0.193873220845 --0.265143254504 --0.193786095732 --0.256124256421 --0.193699050538 --0.247111546254 --0.193612101273 --0.238105509093 --0.193747656403 --0.22899673106 --0.193891566952 --0.219871107867 --0.193821370413 --0.210837080052 --0.193751175306 --0.201807822089 --0.193680987977 --0.192783745865 --0.193791181787 --0.183569977782 --0.193909937307 --0.17434215083 --0.193856833418 --0.165294198528 --0.193803654443 --0.156249551513 --0.193750400989 --0.147208651932 --0.193834807372 --0.137908852317 --0.193927945427 --0.128597840687 --0.193892054462 --0.119537364191 --0.193856034114 --0.110478812303 --0.19381989188 --0.10142262301 --0.193878398944 --0.0920570388636 --0.193945758688 --0.0826831656357 --0.193927183781 --0.0736118622871 --0.193908452826 --0.0645411342544 --0.193889561672 --0.0554714407577 --0.193922074895 --0.0460613506434 --0.193963525911 --0.0366459203568 --0.193962319758 --0.0275656911195 --0.193960935561 --0.0184847256548 --0.193959395881 --0.00940349007319 --0.193958586007 -2.16840434497e-19 --0.193959395881 -0.00940349007319 --0.193960935561 -0.0184847256548 --0.193962319758 -0.0275656911195 --0.193963525911 -0.0366459203568 --0.193922074895 -0.0460613506434 --0.193889561672 -0.0554714407577 --0.193908452826 -0.0645411342544 --0.193927183781 -0.0736118622871 --0.193945758688 -0.0826831656357 --0.193878398944 -0.0920570388636 --0.19381989188 -0.10142262301 --0.193856034114 -0.110478812303 --0.193892054462 -0.119537364191 --0.193927945427 -0.128597840687 --0.193834807372 -0.137908852317 --0.193750400989 -0.147208651932 --0.193803654443 -0.156249551513 --0.193856833418 -0.165294198528 --0.193909937307 -0.17434215083 --0.193791181787 -0.183569977782 --0.193680987977 -0.192783745865 --0.193751175306 -0.201807822089 --0.193821370413 -0.210837080052 --0.193891566952 -0.219871107867 --0.193747656403 -0.22899673106 --0.193612101273 -0.238105509093 --0.193699050538 -0.247111546254 --0.193786095732 -0.256124256421 --0.193873220845 -0.265143254504 --0.193704289638 -0.274149843134 --0.19354346817 -0.283136860594 --0.193646955019 -0.29212396702 --0.193750635067 -0.301119310803 --0.19385451456 -0.310122550317 --0.193661067429 -0.31899523736 --0.193475423828 -0.327845681384 --0.193595187158 -0.33681332743 --0.193715277464 -0.345790850687 --0.19383569087 -0.354777958162 --0.193618092154 -0.363504165726 --0.193407984364 -0.372205530615 --0.193543750859 -0.381153545649 --0.193679970036 -0.390113163736 --0.193816669683 -0.399084150057 --0.184536095083 --0.399791760233 --0.18438243249 --0.39080304667 --0.184229301156 --0.381825770986 --0.18407668424 --0.372860167999 --0.184312414879 --0.364149190855 --0.184556555681 --0.355413379335 --0.184421202468 --0.346408754758 --0.184286216235 --0.337413758579 --0.184151593234 --0.328428703154 --0.184359883854 --0.319567068605 --0.184576943899 --0.310683180505 --0.18446016209 --0.301662573015 --0.184343610141 --0.292649912316 --0.184227276272 --0.283645523972 --0.184407704205 --0.2746458293 --0.184597241586 --0.265626570356 --0.184499269809 --0.25659033096 --0.184401389821 --0.24756040742 --0.184303626608 --0.238537199784 --0.184455805558 --0.229414469402 --0.184617350671 --0.220274891097 --0.184538375633 --0.211223706949 --0.184459408813 --0.202177318673 --0.184380448158 --0.19313614139 --0.184504155454 --0.183907292043 --0.184637467527 --0.174664383101 --0.184577667752 --0.165599332999 --0.184517790403 --0.156537606445 --0.184457833221 --0.147479643297 --0.184552712161 --0.138163870005 --0.184657372746 --0.128836875895 --0.184616870586 --0.11975932269 --0.184576234396 --0.110683701134 --0.184535467653 --0.101610461124 --0.184601359408 --0.092228216202 --0.184677168169 --0.0828376658569 --0.184656083289 --0.073749289985 --0.184634819786 --0.064661485892 --0.184613383669 --0.0555747193085 --0.184650171111 --0.0461475222188 --0.1846969619 --0.0367149696546 --0.18469535584 --0.0276176393027 --0.184693559443 --0.0185195645832 --0.184691571597 --0.00942121338044 --0.184690531942 -0 --0.184691571597 -0.00942121338044 --0.184693559443 -0.0185195645832 --0.18469535584 -0.0276176393027 --0.1846969619 -0.0367149696546 --0.184650171111 -0.0461475222188 --0.184613383669 -0.0555747193085 --0.184634819786 -0.064661485892 --0.184656083289 -0.073749289985 --0.184677168169 -0.0828376658569 --0.184601359408 -0.092228216202 --0.184535467653 -0.101610461124 --0.184576234396 -0.110683701134 --0.184616870586 -0.11975932269 --0.184657372746 -0.128836875895 --0.184552712161 -0.138163870005 --0.184457833221 -0.147479643297 --0.184517790403 -0.156537606445 --0.184577667752 -0.165599332999 --0.184637467527 -0.174664383101 --0.184504155454 -0.183907292043 --0.184380448158 -0.19313614139 --0.184459408813 -0.202177318673 --0.184538375633 -0.211223706949 --0.184617350671 -0.220274891097 --0.184455805558 -0.229414469402 --0.184303626608 -0.238537199784 --0.184401389821 -0.24756040742 --0.184499269809 -0.25659033096 --0.184597241586 -0.265626570356 --0.184407704205 -0.2746458293 --0.184227276272 -0.283645523972 --0.184343610141 -0.292649912316 --0.18446016209 -0.301662573015 --0.184576943899 -0.310683180505 --0.184359883854 -0.319567068605 --0.184151593234 -0.328428703154 --0.184286216235 -0.337413758579 --0.184421202468 -0.346408754758 --0.184556555681 -0.355413379335 --0.184312414879 -0.364149190855 --0.18407668424 -0.372860167999 --0.184229301156 -0.381825770986 --0.18438243249 -0.39080304667 --0.184536095083 -0.399791760233 --0.175240732684 --0.40055438716 --0.17507019179 --0.391546694451 --0.174900243171 --0.382550500892 --0.174730881469 --0.373566071868 --0.174992110234 --0.364844592519 --0.175262662119 --0.356098261693 --0.175112442917 --0.347074833573 --0.174962637467 --0.338061088573 --0.174813237595 --0.329057349738 --0.17504406042 --0.320183529647 --0.175284615088 --0.311287458753 --0.175154997597 --0.302248198228 --0.175025637668 --0.293216915158 --0.174896532377 --0.284193963706 --0.17509648187 --0.275180540967 --0.175306519064 --0.266147536976 --0.175197759093 --0.257092758295 --0.175089106865 --0.248044328867 --0.17498058047 --0.239002639679 --0.17514929982 --0.229864819712 --0.175328389176 --0.22071013379 --0.175240682461 --0.211640484108 --0.175152992268 --0.202575656767 --0.175065304896 --0.193516058486 --0.175202463147 --0.184270932352 --0.175350261117 --0.175011735907 --0.175283804127 --0.165928268591 --0.175217256762 --0.15684813549 --0.175150623788 --0.14777178117 --0.175255923292 --0.138438776311 --0.175372052109 --0.129094541814 --0.175326971495 --0.119998589666 --0.175281745053 --0.11090457521 --0.175236372287 --0.101812952527 --0.175309603248 --0.0924127498898 --0.175393821881 --0.0830042261062 --0.175370249807 --0.0738974401623 --0.175346472345 --0.0647912239719 --0.175322502933 --0.0556860479417 --0.175363542903 --0.0462404256762 --0.175415658965 --0.0367894324019 --0.175413646912 --0.0276736601027 --0.175411432099 --0.0185571339248 --0.175409006049 --0.00944032634276 --0.175407737569 --2.16840434497e-19 --0.175409006049 -0.00944032634276 --0.175411432099 -0.0185571339248 --0.175413646912 -0.0276736601027 --0.175415658965 -0.0367894324019 --0.175363542903 -0.0462404256762 --0.175322502933 -0.0556860479417 --0.175346472345 -0.0647912239719 --0.175370249807 -0.0738974401623 --0.175393821881 -0.0830042261062 --0.175309603248 -0.0924127498898 --0.175236372287 -0.101812952527 --0.175281745053 -0.11090457521 --0.175326971495 -0.119998589666 --0.175372052109 -0.129094541814 --0.175255923292 -0.138438776311 --0.175150623788 -0.14777178117 --0.175217256762 -0.15684813549 --0.175283804127 -0.165928268591 --0.175350261117 -0.175011735907 --0.175202463147 -0.184270932352 --0.175065304896 -0.193516058486 --0.175152992268 -0.202575656767 --0.175240682461 -0.211640484108 --0.175328389176 -0.22071013379 --0.17514929982 -0.229864819712 --0.17498058047 -0.239002639679 --0.175089106865 -0.248044328867 --0.175197759093 -0.257092758295 --0.175306519064 -0.266147536976 --0.17509648187 -0.275180540967 --0.174896532377 -0.284193963706 --0.175025637668 -0.293216915158 --0.175154997597 -0.302248198228 --0.175284615088 -0.311287458753 --0.17504406042 -0.320183529647 --0.174813237595 -0.329057349738 --0.174962637467 -0.338061088573 --0.175112442917 -0.347074833573 --0.175262662119 -0.356098261693 --0.174992110234 -0.364844592519 --0.174730881469 -0.373566071868 --0.174900243171 -0.382550500892 --0.17507019179 -0.391546694451 --0.175240732684 -0.40055438716 --0.166163309336 --0.40020770746 --0.166013401131 --0.391207949743 --0.165864003486 --0.382219674363 --0.165715128616 --0.37324317409 --0.165945181307 --0.364527542217 --0.166183419369 --0.355787082926 --0.166051350978 --0.346771641064 --0.165919641918 --0.337765890371 --0.165788293073 --0.328770151464 --0.16599159513 --0.319902693298 --0.166203449188 --0.311013023521 --0.166089483029 --0.301981823942 --0.165975738911 --0.292958600829 --0.16586222241 --0.283943726364 --0.166038345709 --0.2749371556 --0.16622333301 --0.265911023028 --0.1661277029 --0.256864372876 --0.166032171795 --0.247824078816 --0.165936744737 --0.238790524387 --0.166085342904 --0.229659977294 --0.166243072633 --0.220512593128 --0.166165968602 --0.211451147776 --0.166088868634 --0.20239451607 --0.166011773299 --0.193343112805 --0.16613256929 --0.184105653442 --0.166262725869 --0.17485413661 --0.166204315216 --0.165778914449 --0.166145824814 --0.156707043069 --0.166087264332 --0.147638952681 --0.16617995925 --0.138313906048 --0.16628218463 --0.12897765 --0.16624260197 --0.119890003977 --0.16620288652 --0.110804299226 --0.166163030963 --0.10172098528 --0.166227453157 --0.0923289779151 --0.166301551047 --0.082928662512 --0.166280896504 --0.073830219489 --0.166260066163 --0.064732353353 --0.16623906417 --0.0556355322075 --0.166275091359 --0.0461982549913 --0.166320882689 --0.0367556163956 --0.166319216259 --0.0276482195234 --0.166317364487 --0.0185400719976 --0.166315333287 --0.0094316463763 --0.166314267836 -0 --0.166315333287 -0.0094316463763 --0.166317364487 -0.0185400719976 --0.166319216259 -0.0276482195234 --0.166320882689 -0.0367556163956 --0.166275091359 -0.0461982549913 --0.16623906417 -0.0556355322075 --0.166260066163 -0.064732353353 --0.166280896504 -0.073830219489 --0.166301551047 -0.082928662512 --0.166227453157 -0.0923289779151 --0.166163030963 -0.10172098528 --0.16620288652 -0.110804299226 --0.16624260197 -0.119890003977 --0.16628218463 -0.12897765 --0.16617995925 -0.138313906048 --0.166087264332 -0.147638952681 --0.166145824814 -0.156707043069 --0.166204315216 -0.165778914449 --0.166262725869 -0.17485413661 --0.16613256929 -0.184105653442 --0.166011773299 -0.193343112805 --0.166088868634 -0.20239451607 --0.166165968602 -0.211451147776 --0.166243072633 -0.220512593128 --0.166085342904 -0.229659977294 --0.165936744737 -0.238790524387 --0.166032171795 -0.247824078816 --0.1661277029 -0.256864372876 --0.16622333301 -0.265911023028 --0.166038345709 -0.2749371556 --0.16586222241 -0.283943726364 --0.165975738911 -0.292958600829 --0.166089483029 -0.301981823942 --0.166203449188 -0.311013023521 --0.16599159513 -0.319902693298 --0.165788293073 -0.328770151464 --0.165919641918 -0.337765890371 --0.166051350978 -0.346771641064 --0.166183419369 -0.355787082926 --0.165945181307 -0.364527542217 --0.165715128616 -0.37324317409 --0.165864003486 -0.382219674363 --0.166013401131 -0.391207949743 --0.166163309336 -0.40020770746 --0.157090171366 --0.399861310595 --0.156960884852 --0.390869480144 --0.156832040161 --0.381889140602 --0.156703643338 --0.372920563836 --0.156902517256 --0.364210753244 --0.157108441436 --0.355476137205 --0.156994519837 --0.346468695762 --0.156880905075 --0.3374709583 --0.156767599154 --0.328483220299 --0.156943377587 --0.319622094795 --0.157126528546 --0.31073878611 --0.157028212865 --0.301715656173 --0.156930086049 --0.292700515383 --0.156832149477 --0.28369372078 --0.156984433759 --0.274693966045 --0.157144372391 --0.265674676156 --0.157061875285 --0.25663616342 --0.156979458517 --0.247604007428 --0.156897131791 --0.238578601948 --0.157025611146 --0.229455309213 --0.157161977225 --0.220315196853 --0.157095472409 --0.211261953364 --0.157028963629 --0.202213525456 --0.156962457917 --0.193170331557 --0.157066886004 --0.183940497773 --0.157179397575 --0.174696626946 --0.157129031873 --0.165629664247 --0.157078602696 --0.156566060031 --0.157028106787 --0.147506244839 --0.157108196639 --0.138189127797 --0.157196528282 --0.128860815682 --0.157162428353 --0.119781478555 --0.157128215856 --0.110704088766 --0.157093887435 --0.101629095732 --0.157149503182 --0.0922452484018 --0.157213479993 --0.0828531090943 --0.157195739292 --0.0737630186006 --0.157177849225 --0.0646735106128 --0.157159816834 --0.0555850524271 --0.157190838138 --0.0461560870593 --0.157230294115 --0.0367217674091 --0.157228976235 --0.027622753572 --0.157227494253 --0.018522993938 --0.157225850468 --0.00942295775856 --0.157224988809 -0 --0.157225850468 -0.00942295775856 --0.157227494253 -0.018522993938 --0.157228976235 -0.027622753572 --0.157230294115 -0.0367217674091 --0.157190838138 -0.0461560870593 --0.157159816834 -0.0555850524271 --0.157177849225 -0.0646735106128 --0.157195739292 -0.0737630186006 --0.157213479993 -0.0828531090943 --0.157149503182 -0.0922452484018 --0.157093887435 -0.101629095732 --0.157128215856 -0.110704088766 --0.157162428353 -0.119781478555 --0.157196528282 -0.128860815682 --0.157108196639 -0.138189127797 --0.157028106787 -0.147506244839 --0.157078602696 -0.156566060031 --0.157129031873 -0.165629664247 --0.157179397575 -0.174696626946 --0.157066886004 -0.183940497773 --0.156962457917 -0.193170331557 --0.157028963629 -0.202213525456 --0.157095472409 -0.211261953364 --0.157161977225 -0.220315196853 --0.157025611146 -0.229455309213 --0.156897131791 -0.238578601948 --0.156979458517 -0.247604007428 --0.157061875285 -0.25663616342 --0.157144372391 -0.265674676156 --0.156984433759 -0.274693966045 --0.156832149477 -0.28369372078 --0.156930086049 -0.292700515383 --0.157028212865 -0.301715656173 --0.157126528546 -0.31073878611 --0.156943377587 -0.319622094795 --0.156767599154 -0.328483220299 --0.156880905075 -0.3374709583 --0.156994519837 -0.346468695762 --0.157108441436 -0.355476137205 --0.156902517256 -0.364210753244 --0.156703643338 -0.372920563836 --0.156832040161 -0.381889140602 --0.156960884852 -0.390869480144 --0.157090171366 -0.399861310595 --0.148021741802 --0.399515178262 --0.147913067952 --0.390531278698 --0.147804767163 --0.381558884054 --0.147696839525 --0.372598256307 --0.147864541885 --0.363894230132 --0.148038160684 --0.355165428496 --0.14794237423 --0.346165994135 --0.147846844812 --0.33717627066 --0.147751577519 --0.328196544473 --0.147899836163 --0.319341724329 --0.148054282151 --0.31046474239 --0.147971606895 --0.301449689558 --0.147889092998 --0.292442640016 --0.147806728367 --0.283443922006 --0.147935180191 --0.274450954981 --0.148070074138 --0.265438485553 --0.148000700696 --0.25640811315 --0.14793139339 --0.247384115789 --0.147862158522 --0.238366874082 --0.147970522318 --0.229250800434 --0.148085528135 --0.220117930726 --0.148029614316 --0.211072886989 --0.147973695899 --0.202032676437 --0.14791777984 --0.19299771542 --0.148005838696 --0.183775469424 --0.148100703632 --0.174539205519 --0.148058386117 --0.165480514854 --0.14801601442 --0.156425183573 --0.147973579744 --0.147373648878 --0.148041069652 --0.138064427349 --0.148115506282 --0.128744024631 --0.148086890461 --0.119673007722 --0.148058182281 --0.110603946926 --0.148029375804 --0.101537284382 --0.148076179606 --0.0921615627694 --0.148130036271 --0.0827775639457 --0.148115215237 --0.073695833127 --0.148100264278 --0.0646146917318 --0.148085192456 --0.0555346020663 --0.148111211592 --0.0461139163221 --0.148144341182 --0.0366878853622 --0.148143364993 --0.0275972623986 --0.148142249303 --0.0185058982738 --0.148141003202 --0.00941426067545 --0.148140351512 -0 --0.148141003202 -0.00941426067545 --0.148142249303 -0.0185058982738 --0.148143364993 -0.0275972623986 --0.148144341182 -0.0366878853622 --0.148111211592 -0.0461139163221 --0.148085192456 -0.0555346020663 --0.148100264278 -0.0646146917318 --0.148115215237 -0.073695833127 --0.148130036271 -0.0827775639457 --0.148076179606 -0.0921615627694 --0.148029375804 -0.101537284382 --0.148058182281 -0.110603946926 --0.148086890461 -0.119673007722 --0.148115506282 -0.128744024631 --0.148041069652 -0.138064427349 --0.147973579744 -0.147373648878 --0.14801601442 -0.156425183573 --0.148058386117 -0.165480514854 --0.148100703632 -0.174539205519 --0.148005838696 -0.183775469424 --0.14791777984 -0.19299771542 --0.147973695899 -0.202032676437 --0.148029614316 -0.211072886989 --0.148085528135 -0.220117930726 --0.147970522318 -0.229250800434 --0.147862158522 -0.238366874082 --0.14793139339 -0.247384115789 --0.148000700696 -0.25640811315 --0.148070074138 -0.265438485553 --0.147935180191 -0.274450954981 --0.147806728367 -0.283443922006 --0.147889092998 -0.292442640016 --0.147971606895 -0.301449689558 --0.148054282151 -0.31046474239 --0.147899836163 -0.319341724329 --0.147751577519 -0.328196544473 --0.147846844812 -0.33717627066 --0.14794237423 -0.346165994135 --0.148038160684 -0.355165428496 --0.147864541885 -0.363894230132 --0.147696839525 -0.372598256307 --0.147804767163 -0.381558884054 --0.147913067952 -0.390531278698 --0.148021741802 -0.399515178262 --0.138655752718 --0.400057603499 --0.13853018942 --0.391060148805 --0.138405063077 --0.382074236836 --0.138280368022 --0.373100153449 --0.138473557614 --0.364388681188 --0.138673583427 --0.355652433186 --0.138562920197 --0.34663957184 --0.138452563237 --0.337636461064 --0.138342510224 --0.328643408719 --0.138513313019 --0.31977994704 --0.138691256863 --0.310894308549 --0.138595733437 --0.30186593878 --0.13850040628 --0.292845611136 --0.138405258435 --0.283833656867 --0.138553251839 --0.274830965635 --0.138708670846 --0.265808766229 --0.138628498471 --0.256765174971 --0.1385484118 --0.247727982916 --0.138468407261 --0.238697573195 --0.138593296902 --0.229570807397 --0.138725847247 --0.220427244751 --0.138661199865 --0.211369046182 --0.138596551001 --0.202315699689 --0.13853190047 --0.193267616849 --0.138633440187 --0.184033852045 --0.138742828483 --0.174786067454 --0.138693844253 --0.165714250407 --0.138644794154 --0.156645806264 --0.138595681254 --0.147581172463 --0.138673595607 --0.138259757174 --0.138759508247 --0.128927158157 --0.138726308609 --0.119843036563 --0.13869300197 --0.110760872583 --0.138659579287 --0.101681113329 --0.138713734231 --0.0922926921845 --0.138776012537 --0.0828959864539 --0.13875869377 --0.0738011462425 --0.138741229841 --0.0647068930894 --0.138723627146 --0.0556136938764 --0.138753863098 --0.0461799762757 --0.138792288988 --0.0367409053761 --0.138790909047 --0.0276371515107 --0.138789369423 --0.0185326486928 --0.138787686229 --0.00942786953707 --0.13878681032 -0 --0.138787686229 -0.00942786953707 --0.138789369423 -0.0185326486928 --0.138790909047 -0.0276371515107 --0.138792288988 -0.0367409053761 --0.138753863098 -0.0461799762757 --0.138723627146 -0.0556136938764 --0.138741229841 -0.0647068930894 --0.13875869377 -0.0738011462425 --0.138776012537 -0.0828959864539 --0.138713734231 -0.0922926921845 --0.138659579287 -0.101681113329 --0.13869300197 -0.110760872583 --0.138726308609 -0.119843036563 --0.138759508247 -0.128927158157 --0.138673595607 -0.138259757174 --0.138595681254 -0.147581172463 --0.138644794154 -0.156645806264 --0.138693844253 -0.165714250407 --0.138742828483 -0.174786067454 --0.138633440187 -0.184033852045 --0.13853190047 -0.193267616849 --0.138596551001 -0.202315699689 --0.138661199865 -0.211369046182 --0.138725847247 -0.220427244751 --0.138593296902 -0.229570807397 --0.138468407261 -0.238697573195 --0.1385484118 -0.247727982916 --0.138628498471 -0.256765174971 --0.138708670846 -0.265808766229 --0.138553251839 -0.274830965635 --0.138405258435 -0.283833656867 --0.13850040628 -0.292845611136 --0.138595733437 -0.30186593878 --0.138691256863 -0.310894308549 --0.138513313019 -0.31977994704 --0.138342510224 -0.328643408719 --0.138452563237 -0.337636461064 --0.138562920197 -0.34663957184 --0.138673583427 -0.355652433186 --0.138473557614 -0.364388681188 --0.138280368022 -0.373100153449 --0.138405063077 -0.382074236836 --0.13853018942 -0.391060148805 --0.138655752718 -0.400057603499 --0.128783405269 --0.417795715428 --0.129027031361 --0.409239779378 --0.129278027418 --0.400656523148 --0.129135647531 --0.391644213004 --0.128993768039 --0.38264350287 --0.128852371657 --0.37365466268 --0.129070949202 --0.364934820232 --0.129297281399 --0.356190193664 --0.129171808691 --0.347162611324 --0.129046688231 --0.338144818663 --0.128921909598 --0.329137117903 --0.129115172345 --0.320263998444 --0.129316529452 --0.311368700284 --0.129208220247 --0.302325708416 --0.129100129106 --0.293290781227 --0.128992243709 --0.284264266087 --0.129159706902 --0.275250749426 --0.129335575453 --0.26621771439 --0.129244654182 --0.257159577389 --0.129153831491 --0.248107856452 --0.12906310132 --0.239062937798 --0.129204463545 --0.229924319466 --0.129354488673 --0.220768887501 --0.129281140154 --0.211696184089 --0.129207795486 --0.202628351886 --0.129134448653 --0.193565791762 --0.129249428209 --0.184319277849 --0.129373282422 --0.175058732587 --0.129317655145 --0.165972436547 --0.129261956192 --0.156889523297 --0.129206186175 --0.147810426522 --0.129294484369 --0.138475528451 --0.129391830871 --0.129129437914 --0.129354062313 --0.120030847319 --0.129316178051 --0.110934217972 --0.129278163593 --0.101839997578 --0.129339644298 --0.0924375477471 --0.129410311394 --0.0830268006765 --0.129390504826 --0.0739174798733 --0.129370537898 --0.0648087441234 --0.1293504141 --0.0557010635273 --0.129384853798 --0.0462529579613 --0.129428554744 --0.0367994862255 --0.129426771942 --0.0276812233729 --0.129424816111 --0.0185622051166 --0.129422693648 --0.00944290602232 --0.129421587797 -0 --0.129422693648 -0.00944290602232 --0.129424816111 -0.0185622051166 --0.129426771942 -0.0276812233729 --0.129428554744 -0.0367994862255 --0.129384853798 -0.0462529579613 --0.1293504141 -0.0557010635273 --0.129370537898 -0.0648087441234 --0.129390504826 -0.0739174798733 --0.129410311394 -0.0830268006765 --0.129339644298 -0.0924375477471 --0.129278163593 -0.101839997578 --0.129316178051 -0.110934217972 --0.129354062313 -0.120030847319 --0.129391830871 -0.129129437914 --0.129294484369 -0.138475528451 --0.129206186175 -0.147810426522 --0.129261956192 -0.156889523297 --0.129317655145 -0.165972436547 --0.129373282422 -0.175058732587 --0.129249428209 -0.184319277849 --0.129134448653 -0.193565791762 --0.129207795486 -0.202628351886 --0.129281140154 -0.211696184089 --0.129354488673 -0.220768887501 --0.129204463545 -0.229924319466 --0.12906310132 -0.239062937798 --0.129153831491 -0.248107856452 --0.129244654182 -0.257159577389 --0.129335575453 -0.26621771439 --0.129159706902 -0.275250749426 --0.128992243709 -0.284264266087 --0.129100129106 -0.293290781227 --0.129208220247 -0.302325708416 --0.129316529452 -0.311368700284 --0.129115172345 -0.320263998444 --0.128921909598 -0.329137117903 --0.129046688231 -0.338144818663 --0.129171808691 -0.347162611324 --0.129297281399 -0.356190193664 --0.129070949202 -0.364934820232 --0.128852371657 -0.37365466268 --0.128993768039 -0.38264350287 --0.129135647531 -0.391644213004 --0.129278027418 -0.400656523148 --0.129027031361 -0.409239779378 --0.128783405269 -0.417795715428 --0.119766262407 --0.417555499135 --0.119974885274 --0.409003148501 --0.120189781202 --0.400423487838 --0.120068151997 --0.391416533986 --0.11994694742 --0.382421190785 --0.119826154123 --0.373437718621 --0.120013366477 --0.364721791389 --0.120207192594 --0.355981107083 --0.120099980048 --0.346958939993 --0.119993062919 --0.337946555365 --0.119886440228 --0.328944258994 --0.120052018349 --0.320075402375 --0.120224501981 --0.311184382842 --0.120131933109 --0.302146841114 --0.120039547321 --0.293117366971 --0.119947341396 --0.284096307594 --0.120090831902 --0.275087363604 --0.120241501656 --0.266058917218 --0.120163787217 --0.257006267279 --0.120086155975 --0.247960037592 --0.120008605437 --0.238920613875 --0.120129733187 --0.229786845378 --0.120258268358 --0.220636283847 --0.120195574268 --0.211569110069 --0.120132885097 --0.202506817159 --0.120070198996 --0.193449793239 --0.120168713121 --0.184208369208 --0.120274816413 --0.174952929749 --0.12022728667 --0.165872202036 --0.120179697443 --0.156794867476 --0.120132040599 --0.147721345948 --0.120207656592 --0.138391734483 --0.120291023043 --0.129050944463 --0.120258779905 --0.119957955015 --0.12022643518 --0.110866933694 --0.120193977907 --0.101778324247 --0.120246595312 --0.0923813106566 --0.120307076178 --0.0829760084906 --0.120290210515 --0.0738723200174 --0.120273204204 --0.0647692185448 --0.120256054547 --0.0556671727486 --0.12028545944 --0.0462246045372 --0.120322798552 --0.0367766736493 --0.12032136235 --0.0276640601106 --0.120319778041 --0.0185506950764 --0.120318051361 --0.00943705050459 --0.120317149359 -2.16840434497e-19 --0.120318051361 -0.00943705050459 --0.120319778041 -0.0185506950764 --0.12032136235 -0.0276640601106 --0.120322798552 -0.0367766736493 --0.12028545944 -0.0462246045372 --0.120256054547 -0.0556671727486 --0.120273204204 -0.0647692185448 --0.120290210515 -0.0738723200174 --0.120307076178 -0.0829760084906 --0.120246595312 -0.0923813106566 --0.120193977907 -0.101778324247 --0.12022643518 -0.110866933694 --0.120258779905 -0.119957955015 --0.120291023043 -0.129050944463 --0.120207656592 -0.138391734483 --0.120132040599 -0.147721345948 --0.120179697443 -0.156794867476 --0.12022728667 -0.165872202036 --0.120274816413 -0.174952929749 --0.120168713121 -0.184208369208 --0.120070198996 -0.193449793239 --0.120132885097 -0.202506817159 --0.120195574268 -0.211569110069 --0.120258268358 -0.220636283847 --0.120129733187 -0.229786845378 --0.120008605437 -0.238920613875 --0.120086155975 -0.247960037592 --0.120163787217 -0.257006267279 --0.120241501656 -0.266058917218 --0.120090831902 -0.275087363604 --0.119947341396 -0.284096307594 --0.120039547321 -0.293117366971 --0.120131933109 -0.302146841114 --0.120224501981 -0.311184382842 --0.120052018349 -0.320075402375 --0.119886440228 -0.328944258994 --0.119993062919 -0.337946555365 --0.120099980048 -0.346958939993 --0.120207192594 -0.355981107083 --0.120013366477 -0.364721791389 --0.119826154123 -0.373437718621 --0.11994694742 -0.382421190785 --0.120068151997 -0.391416533986 --0.120189781202 -0.400423487838 --0.119974885274 -0.409003148501 --0.119766262407 -0.417555499135 --0.110751742117 --0.417315274808 --0.110925346472 --0.408766473353 --0.111104129904 --0.400190379352 --0.111003249053 --0.391188812813 --0.110902717626 --0.38219883531 --0.110802533973 --0.373220741868 --0.110958378702 --0.364508730072 --0.111119688201 --0.355771971531 --0.111030727986 --0.346755219899 --0.11094201474 --0.337748253919 --0.11085354599 --0.328751378553 --0.110991427167 --0.319886760459 --0.111135027779 --0.310999991612 --0.111058196668 --0.301967909787 --0.110981519736 --0.29294390528 --0.110904994658 --0.283928312964 --0.111024504259 --0.27492392456 --0.111149966571 --0.265900050138 --0.111085459482 --0.256852903861 --0.111021020619 --0.247812176647 --0.110956647439 --0.238778270164 --0.111057536223 --0.229649334423 --0.111164577364 --0.220503609295 --0.111112538766 --0.211441981182 --0.111060506347 --0.202385238698 --0.111008478192 --0.193333776206 --0.111090514781 --0.184097418811 --0.111178864744 --0.174847055736 --0.111139435575 --0.165771919152 --0.11109995065 --0.156700173227 --0.111060410628 --0.147632250175 --0.111123348847 --0.138307904754 --0.111192734136 --0.128972385464 --0.11116601402 --0.119885011115 --0.111139200726 --0.110799609235 --0.111112295065 --0.10171662909 --0.111156048584 --0.0923250296629 --0.111206345944 --0.0829251490813 --0.111192418614 --0.073827107581 --0.111178370131 --0.0647296568895 --0.111164200718 --0.0556332629377 --0.111188569053 --0.0461962057708 --0.111219538784 --0.0367537926475 --0.111218452367 --0.0276468463017 --0.111217242109 --0.0185391506386 --0.111215902743 --0.0094311772543 --0.111215199413 --2.16840434497e-19 --0.111215902743 -0.0094311772543 --0.111217242109 -0.0185391506386 --0.111218452367 -0.0276468463017 --0.111219538784 -0.0367537926475 --0.111188569053 -0.0461962057708 --0.111164200718 -0.0556332629377 --0.111178370131 -0.0647296568895 --0.111192418614 -0.073827107581 --0.111206345944 -0.0829251490813 --0.111156048584 -0.0923250296629 --0.111112295065 -0.10171662909 --0.111139200726 -0.110799609235 --0.11116601402 -0.119885011115 --0.111192734136 -0.128972385464 --0.111123348847 -0.138307904754 --0.111060410628 -0.147632250175 --0.11109995065 -0.156700173227 --0.111139435575 -0.165771919152 --0.111178864744 -0.174847055736 --0.111090514781 -0.184097418811 --0.111008478192 -0.193333776206 --0.111060506347 -0.202385238698 --0.111112538766 -0.211441981182 --0.111164577364 -0.220503609295 --0.111057536223 -0.229649334423 --0.110956647439 -0.238778270164 --0.111021020619 -0.247812176647 --0.111085459482 -0.256852903861 --0.111149966571 -0.265900050138 --0.111024504259 -0.27492392456 --0.110904994658 -0.283928312964 --0.110981519736 -0.29294390528 --0.111058196668 -0.301967909787 --0.111135027779 -0.310999991612 --0.110991427167 -0.319886760459 --0.11085354599 -0.328751378553 --0.11094201474 -0.337748253919 --0.111030727986 -0.346755219899 --0.111119688201 -0.355771971531 --0.110958378702 -0.364508730072 --0.110802533973 -0.373220741868 --0.110902717626 -0.38219883531 --0.111003249053 -0.391188812813 --0.111104129904 -0.400190379352 --0.110925346472 -0.408766473353 --0.110751742117 -0.417315274808 --0.101740268009 --0.417075024135 --0.101878848481 --0.40852974668 --0.102021515647 --0.399957183718 --0.101941382425 --0.390961010158 --0.101861523164 --0.381976429451 --0.101781943502 --0.373003731274 --0.101906412091 --0.364295613117 --0.102035197213 --0.355562756113 --0.101964488118 --0.346551428763 --0.101893977724 --0.33754989285 --0.101823659292 --0.328558462833 --0.10193383571 --0.319698053951 --0.102048551503 --0.31081551924 --0.101987466715 --0.301788934149 --0.101926498104 --0.292770404466 --0.101865646554 --0.28376029 --0.101961167607 --0.274760428032 --0.102061418492 --0.265741102446 --0.102010119565 --0.256699488419 --0.101958873434 --0.24766429203 --0.101907675643 --0.238635913778 --0.101988318244 --0.229511771275 --0.102073858792 --0.220370859758 --0.102032479475 --0.211314793669 --0.101991103365 --0.202263612654 --0.101949729949 --0.193217731339 --0.102015290236 --0.183986420294 --0.102085880732 --0.174741109331 --0.1020545479 --0.165671580743 --0.102023168528 --0.156605441374 --0.101991742782 --0.147543127287 --0.10204200199 --0.138224021463 --0.10209740021 --0.128893749833 --0.102076196545 --0.119812010379 --0.102054918687 --0.110732248155 --0.102033569895 --0.101654910329 --0.102068458358 --0.0922687017979 --0.102108568505 --0.0828742195417 --0.102097577341 --0.0737818407737 --0.102086488746 --0.0646900595381 --0.102075305023 --0.0555993343987 --0.102075305023 -0.0555993343987 --0.102086488746 -0.0646900595381 --0.102097577341 -0.0737818407737 --0.102108568505 -0.0828742195417 --0.102068458358 -0.0922687017979 --0.102033569895 -0.101654910329 --0.102054918687 -0.110732248155 --0.102076196545 -0.119812010379 --0.10209740021 -0.128893749833 --0.10204200199 -0.138224021463 --0.101991742782 -0.147543127287 --0.102023168528 -0.156605441374 --0.1020545479 -0.165671580743 --0.102085880732 -0.174741109331 --0.102015290236 -0.183986420294 --0.101949729949 -0.193217731339 --0.101991103365 -0.202263612654 --0.102032479475 -0.211314793669 --0.102073858792 -0.220370859758 --0.101988318244 -0.229511771275 --0.101907675643 -0.238635913778 --0.101958873434 -0.24766429203 --0.102010119565 -0.256699488419 --0.102061418492 -0.265741102446 --0.101961167607 -0.274760428032 --0.101865646554 -0.28376029 --0.101926498104 -0.292770404466 --0.101987466715 -0.301788934149 --0.102048551503 -0.31081551924 --0.10193383571 -0.319698053951 --0.101823659292 -0.328558462833 --0.101893977724 -0.33754989285 --0.101964488118 -0.346551428763 --0.102035197213 -0.355562756113 --0.101906412091 -0.364295613117 --0.101781943502 -0.373003731274 --0.101861523164 -0.381976429451 --0.101941382425 -0.390961010158 --0.102021515647 -0.399957183718 --0.101878848481 -0.40852974668 --0.101740268009 -0.417075024135 --0.0922537343406 --0.417458490499 --0.0924201889105 --0.408908734125 --0.0925915939695 --0.400331690901 --0.0924949021761 --0.391326199114 --0.0923985445397 --0.382332332636 --0.0923025238947 --0.373350384764 --0.0924520380861 --0.364636962394 --0.0926067758041 --0.355898801859 --0.0925214855042 --0.346878247463 --0.0924364308875 --0.337867500016 --0.0923516105586 --0.328866891038 --0.0924838952309 --0.32000042577 --0.0926216592094 --0.311111837185 --0.0925479817193 --0.302076088723 --0.0924744452754 --0.29304840787 --0.0924010525133 --0.284029155575 --0.0925157491421 --0.275022537825 --0.0926361432899 --0.265996458547 --0.0925742523447 --0.256945714984 --0.0925124326817 --0.247901414743 --0.0924506765735 --0.238863936581 --0.092547514989 --0.22973241045 --0.092650243628 --0.22058412784 --0.0926002963861 --0.211518970489 --0.0925503529797 --0.202458704639 --0.0925004129478 --0.193403752543 --0.0925791915423 --0.184164531586 --0.0926640157322 --0.174911312263 --0.0926261432862 --0.165832707397 --0.0925882196675 --0.156757493019 --0.0925502448466 --0.147686115163 --0.0926107364696 --0.138358665631 --0.092677399614 --0.129020046872 --0.0926517005361 --0.119929241049 --0.0926259140767 --0.110840410919 --0.092600040865 --0.10175400501 --0.092642115436 --0.0923591238643 --0.0926904510311 --0.0829559626843 --0.0926770069137 --0.0738545053553 --0.0926770069137 -0.0738545053553 --0.0926904510311 -0.0829559626843 --0.092642115436 -0.0923591238643 --0.092600040865 -0.10175400501 --0.0926259140767 -0.110840410919 --0.0926517005361 -0.119929241049 --0.092677399614 -0.129020046872 --0.0926107364696 -0.138358665631 --0.0925502448466 -0.147686115163 --0.0925882196675 -0.156757493019 --0.0926261432862 -0.165832707397 --0.0926640157322 -0.174911312263 --0.0925791915423 -0.184164531586 --0.0925004129478 -0.193403752543 --0.0925503529797 -0.202458704639 --0.0926002963861 -0.211518970489 --0.092650243628 -0.22058412784 --0.092547514989 -0.22973241045 --0.0924506765735 -0.238863936581 --0.0925124326817 -0.247901414743 --0.0925742523447 -0.256945714984 --0.0926361432899 -0.265996458547 --0.0925157491421 -0.275022537825 --0.0924010525133 -0.284029155575 --0.0924744452754 -0.29304840787 --0.0925479817193 -0.302076088723 --0.0926216592094 -0.311111837185 --0.0924838952309 -0.32000042577 --0.0923516105586 -0.328866891038 --0.0924364308875 -0.337867500016 --0.0925214855042 -0.346878247463 --0.0926067758041 -0.355898801859 --0.0924520380861 -0.364636962394 --0.0923025238947 -0.373350384764 --0.0923985445397 -0.382332332636 --0.0924949021761 -0.391326199114 --0.0925915939695 -0.400331690901 --0.0924201889105 -0.408908734125 --0.0922537343406 -0.417458490499 --0.0831360819065 --0.444864786105 --0.0830097557356 --0.435863151256 --0.0828839553109 --0.426875073677 --0.0827586696219 --0.417900803494 --0.0829529327818 --0.40934574628 --0.0831530070509 --0.400763398109 --0.0830398035615 --0.391747276122 --0.0829269949742 --0.382742817399 --0.0828145767893 --0.373750301423 --0.0829890837175 --0.365030649936 --0.0831697154336 --0.356286260706 --0.0830698817986 --0.347255154174 --0.0829703264907 --0.338233884983 --0.0828710405418 --0.329222755778 --0.0830253816348 --0.320349213875 --0.0831861382175 --0.311453548296 --0.0830998988897 --0.302407278824 --0.0830138314486 --0.293369114078 --0.0829279320157 --0.284339396241 --0.0830617604436 --0.275324922774 --0.0832022518303 --0.266290973342 --0.0831298015087 --0.257229744328 --0.0830574366452 --0.248174989053 --0.082985148556 --0.239127064589 --0.0830981490933 --0.229986981733 --0.0832180278687 --0.220830133126 --0.08315953593 --0.211754522301 --0.0831010480192 --0.20268380939 --0.0830425630793 --0.193618414852 --0.083134528955 --0.184370031669 --0.0832335552826 --0.175107644823 --0.083189162574 --0.16601859676 --0.0831447108639 --0.15693293639 --0.0831002033439 --0.147851119968 --0.0831709070601 --0.138514021432 --0.0832488095964 --0.129165741075 --0.0832186265684 --0.120064483798 --0.0831883463521 --0.11096520576 --0.0831579580829 --0.101868352484 --0.0832071973084 --0.0924634507146 --0.0832637432598 --0.0830502591578 --0.0832637432598 -0.0830502591578 --0.0832071973084 -0.0924634507146 --0.0831579580829 -0.101868352484 --0.0831883463521 -0.11096520576 --0.0832186265684 -0.120064483798 --0.0832488095964 -0.129165741075 --0.0831709070601 -0.138514021432 --0.0831002033439 -0.147851119968 --0.0831447108639 -0.15693293639 --0.083189162574 -0.16601859676 --0.0832335552826 -0.175107644823 --0.083134528955 -0.184370031669 --0.0830425630793 -0.193618414852 --0.0831010480192 -0.20268380939 --0.08315953593 -0.211754522301 --0.0832180278687 -0.220830133126 --0.0830981490933 -0.229986981733 --0.082985148556 -0.239127064589 --0.0830574366452 -0.248174989053 --0.0831298015087 -0.257229744328 --0.0832022518303 -0.266290973342 --0.0830617604436 -0.275324922774 --0.0829279320157 -0.284339396241 --0.0830138314486 -0.293369114078 --0.0830998988897 -0.302407278824 --0.0831861382175 -0.311453548296 --0.0830253816348 -0.320349213875 --0.0828710405418 -0.329222755778 --0.0829703264907 -0.338233884983 --0.0830698817986 -0.347255154174 --0.0831697154336 -0.356286260706 --0.0829890837175 -0.365030649936 --0.0828145767893 -0.373750301423 --0.0829269949742 -0.382742817399 --0.0830398035615 -0.391747276122 --0.0831530070509 -0.400763398109 --0.0829529327818 -0.40934574628 --0.0827586696219 -0.417900803494 --0.0828839553109 -0.426875073677 --0.0830097557356 -0.435863151256 --0.0831360819065 -0.444864786105 --0.0740398926542 --0.444733770196 --0.0739368860898 --0.435734894127 --0.0738343073975 --0.426749587291 --0.0737321519524 --0.417778095852 --0.073891248985 --0.409224896145 --0.07405505717 --0.400644414755 --0.0739626953606 --0.391631086696 --0.0738706551116 --0.382629422609 --0.0737789319562 --0.373639684434 --0.0739219318863 --0.364922044921 --0.0740699086105 --0.356179689102 --0.0739884104076 --0.347151384697 --0.0739071390621 --0.338132913561 --0.0738260862094 --0.329124589097 --0.0739526131508 --0.320253205352 --0.0740843646237 --0.311359705125 --0.0740139364482 --0.302316256323 --0.0739436477834 --0.293280907556 --0.0738734949336 --0.284254019576 --0.0739832374021 --0.275241846171 --0.0740984154472 --0.26621019123 --0.0740392341972 --0.257151807762 --0.0739801191999 --0.248099894397 --0.0739210660009 --0.239054807683 --0.0740137403275 --0.229917139443 --0.0741120305748 --0.220762711541 --0.0740642439376 --0.211689964427 --0.0740164609969 --0.202622117609 --0.0739686791366 --0.193559579294 --0.0740441031978 --0.1843137122 --0.0741252983994 --0.175053845762 --0.0740890341906 --0.165967668926 --0.0740527259947 --0.156884899471 --0.0740163692637 --0.14780596262 --0.0740743384203 --0.13847146244 --0.0741381991675 --0.129125795272 --0.0741135598928 --0.120027428907 --0.0740888407372 --0.110931043975 --0.0740640331129 --0.101837085375 --0.0741043681447 --0.0924348551487 --0.0741043681447 -0.0924348551487 --0.0740640331129 -0.101837085375 --0.0740888407372 -0.110931043975 --0.0741135598928 -0.120027428907 --0.0741381991675 -0.129125795272 --0.0740743384203 -0.13847146244 --0.0740163692637 -0.14780596262 --0.0740527259947 -0.156884899471 --0.0740890341906 -0.165967668926 --0.0741252983994 -0.175053845762 --0.0740441031978 -0.1843137122 --0.0739686791366 -0.193559579294 --0.0740164609969 -0.202622117609 --0.0740642439376 -0.211689964427 --0.0741120305748 -0.220762711541 --0.0740137403275 -0.229917139443 --0.0739210660009 -0.239054807683 --0.0739801191999 -0.248099894397 --0.0740392341972 -0.257151807762 --0.0740984154472 -0.26621019123 --0.0739832374021 -0.275241846171 --0.0738734949336 -0.284254019576 --0.0739436477834 -0.293280907556 --0.0740139364482 -0.302316256323 --0.0740843646237 -0.311359705125 --0.0739526131508 -0.320253205352 --0.0738260862094 -0.329124589097 --0.0739071390621 -0.338132913561 --0.0739884104076 -0.347151384697 --0.0740699086105 -0.356179689102 --0.0739219318863 -0.364922044921 --0.0737789319562 -0.373639684434 --0.0738706551116 -0.382629422609 --0.0739626953606 -0.391631086696 --0.07405505717 -0.400644414755 --0.073891248985 -0.409224896145 --0.0737321519524 -0.417778095852 --0.0738343073975 -0.426749587291 --0.0739368860898 -0.435734894127 --0.0740398926542 -0.444733770196 --0.0649446695436 --0.44460242984 --0.0648649941562 --0.435606375044 --0.0647856455047 --0.426623858592 --0.0647066262548 --0.417655146386 --0.0648305371547 --0.409103780532 --0.0649580586285 --0.400525149941 --0.0648865415777 --0.391514639249 --0.064815273704 --0.382515781935 --0.0647442521486 --0.373528848719 --0.0648557210988 --0.364813190687 --0.0649710229278 --0.35607283238 --0.0649078686906 --0.347047360011 --0.0648448864062 --0.338031714149 --0.0647820754375 --0.32902622344 --0.064880772978 --0.320156978728 --0.0649834990886 --0.3112656103 --0.0649288859383 --0.302225003903 --0.0648743829544 --0.293192506582 --0.0648199839881 --0.284168470872 --0.0649056252757 --0.275158571797 --0.064995472156 --0.266129185857 --0.0649495610531 --0.257073663839 --0.0649037015841 --0.248024614146 --0.0648578875923 --0.238982392823 --0.0649302205342 --0.229847120712 --0.0650069092844 --0.220695089525 --0.0649698309855 --0.21162522257 --0.0649327564162 --0.202560262928 --0.0648956829273 --0.193500616283 --0.0649545566728 --0.18425724797 --0.065017908699 --0.17499987908 --0.0649897758901 --0.16591659288 --0.0649616115858 --0.156836727189 --0.0649334082625 --0.147760698565 --0.0649786355164 --0.138428778744 --0.0650284463669 --0.129085700049 --0.0650093546011 --0.119990250175 --0.0649901968987 --0.110896780752 --0.0649709703147 --0.101805736261 --0.0649709703147 -0.101805736261 --0.0649901968987 -0.110896780752 --0.0650093546011 -0.119990250175 --0.0650284463669 -0.129085700049 --0.0649786355164 -0.138428778744 --0.0649334082625 -0.147760698565 --0.0649616115858 -0.156836727189 --0.0649897758901 -0.16591659288 --0.065017908699 -0.17499987908 --0.0649545566728 -0.18425724797 --0.0648956829273 -0.193500616283 --0.0649327564162 -0.202560262928 --0.0649698309855 -0.21162522257 --0.0650069092844 -0.220695089525 --0.0649302205342 -0.229847120712 --0.0648578875923 -0.238982392823 --0.0649037015841 -0.248024614146 --0.0649495610531 -0.257073663839 --0.064995472156 -0.266129185857 --0.0649056252757 -0.275158571797 --0.0648199839881 -0.284168470872 --0.0648743829544 -0.293192506582 --0.0649288859383 -0.302225003903 --0.0649834990886 -0.3112656103 --0.064880772978 -0.320156978728 --0.0647820754375 -0.32902622344 --0.0648448864062 -0.338031714149 --0.0649078686906 -0.347047360011 --0.0649710229278 -0.35607283238 --0.0648557210988 -0.364813190687 --0.0647442521486 -0.373528848719 --0.064815273704 -0.382515781935 --0.0648865415777 -0.391514639249 --0.0649580586285 -0.400525149941 --0.0648305371547 -0.409103780532 --0.0647066262548 -0.417655146386 --0.0647856455047 -0.426623858592 --0.0648649941562 -0.435606375044 --0.0649446695436 -0.44460242984 --0.0558508757184 --0.444470808283 --0.0557945312859 --0.435477564862 --0.0557384173564 --0.426497847967 --0.0556825343015 --0.417531957678 --0.055771244458 --0.408982422497 --0.0558624628286 --0.400405597914 --0.0558117946622 --0.391397909161 --0.055761300715 --0.382401885636 --0.0557109793387 --0.373417775588 --0.0557909086642 --0.364704088099 --0.0558735221554 --0.355965708128 --0.0558287131825 --0.346943088985 --0.0557840245722 --0.337930303215 --0.0557394535916 --0.32892765996 --0.0558103095256 --0.32006052185 --0.0558840043279 --0.311171267591 --0.0558452074467 --0.30213352408 --0.055806487117 --0.293103892763 --0.0557678421198 --0.284082725673 --0.0558293732053 --0.27507507552 --0.0558938810371 --0.26604795177 --0.0558612423967 --0.256995313358 --0.0558286396918 --0.247949154839 --0.0557960662871 --0.238909832267 --0.0558480482459 --0.229776926249 --0.0559031277629 --0.220627267794 --0.0558767607998 --0.211560297414 --0.0558503942285 --0.202498236695 --0.0558240268154 --0.1934415024 --0.0558663419254 --0.18420062191 --0.0559118479094 --0.174945736548 --0.0558918495084 --0.165865363296 --0.0558718280842 --0.156788417117 --0.0558517788059 --0.147715319 --0.0558842614978 --0.138385967868 --0.0559200161528 --0.129045453336 --0.0559064706546 --0.119952939134 --0.0558928780134 --0.110862410538 --0.0558792345882 --0.101774305473 --0.0558792345882 -0.101774305473 --0.0558928780134 -0.110862410538 --0.0559064706546 -0.119952939134 --0.0559200161528 -0.129045453336 --0.0558842614978 -0.138385967868 --0.0558517788059 -0.147715319 --0.0558718280842 -0.156788417117 --0.0558918495084 -0.165865363296 --0.0559118479094 -0.174945736548 --0.0558663419254 -0.18420062191 --0.0558240268154 -0.1934415024 --0.0558503942285 -0.202498236695 --0.0558767607998 -0.211560297414 --0.0559031277629 -0.220627267794 --0.0558480482459 -0.229776926249 --0.0557960662871 -0.238909832267 --0.0558286396918 -0.247949154839 --0.0558612423967 -0.256995313358 --0.0558938810371 -0.26604795177 --0.0558293732053 -0.27507507552 --0.0557678421198 -0.284082725673 --0.055806487117 -0.293103892763 --0.0558452074467 -0.30213352408 --0.0558840043279 -0.311171267591 --0.0558103095256 -0.32006052185 --0.0557394535916 -0.32892765996 --0.0557840245722 -0.337930303215 --0.0558287131825 -0.346943088985 --0.0558735221554 -0.355965708128 --0.0557909086642 -0.364704088099 --0.0557109793387 -0.373417775588 --0.055761300715 -0.382401885636 --0.0558117946622 -0.391397909161 --0.0558624628286 -0.400405597914 --0.055771244458 -0.408982422497 --0.0556825343015 -0.417531957678 --0.0557384173564 -0.426497847967 --0.0557945312859 -0.435477564862 --0.0558508757184 -0.444470808283 --0.046376121769 --0.444697368755 --0.0463015019339 --0.435699046697 --0.0462271935633 --0.42671427198 --0.0461531901581 --0.417743336845 --0.04626946149 --0.409191016344 --0.0463890961608 --0.400611405805 --0.0463220847688 --0.391598666486 --0.0462553051202 --0.382597607606 --0.0461887546874 --0.373608477694 --0.0462933838906 --0.364891673266 --0.0464015870842 --0.356150166079 --0.0463423811938 --0.347122510394 --0.0462833397026 --0.338104703199 --0.0462244547054 --0.329097054416 --0.0463171279016 --0.320226443793 --0.0464135690272 --0.311333722299 --0.0463623439017 --0.302290975139 --0.0463112181243 --0.293256337796 --0.0462601913479 --0.284230163991 --0.0463406467448 --0.27521873629 --0.0464250349706 --0.266187844466 --0.0463819472917 --0.257130204592 --0.0463389060857 --0.248079036004 --0.0462959063285 --0.239034718864 --0.0463639046393 --0.229897766748 --0.0464359783408 --0.220744048667 --0.0464011531855 --0.21167207546 --0.0463663312799 --0.202605010092 --0.0463315094147 --0.193543270418 --0.0463868831823 --0.184298105837 --0.0464464506427 --0.175038931467 --0.0464199993117 --0.165953546009 --0.0463935152564 --0.156871584243 --0.0463669965927 --0.147793478353 --0.0464095786505 --0.13845965595 --0.046456448993 --0.129114659711 --0.0464384600951 --0.120017127268 --0.0464204108961 --0.110921576904 --0.0464204108961 -0.110921576904 --0.0464384600951 -0.120017127268 --0.046456448993 -0.129114659711 --0.0464095786505 -0.13845965595 --0.0463669965927 -0.147793478353 --0.0463935152564 -0.156871584243 --0.0464199993117 -0.165953546009 --0.0464464506427 -0.175038931467 --0.0463868831823 -0.184298105837 --0.0463315094147 -0.193543270418 --0.0463663312799 -0.202605010092 --0.0464011531855 -0.21167207546 --0.0464359783408 -0.220744048667 --0.0463639046393 -0.229897766748 --0.0462959063285 -0.239034718864 --0.0463389060857 -0.248079036004 --0.0463819472917 -0.257130204592 --0.0464250349706 -0.266187844466 --0.0463406467448 -0.27521873629 --0.0462601913479 -0.284230163991 --0.0463112181243 -0.293256337796 --0.0463623439017 -0.302290975139 --0.0464135690272 -0.311333722299 --0.0463171279016 -0.320226443793 --0.0462244547054 -0.329097054416 --0.0462833397026 -0.338104703199 --0.0463423811938 -0.347122510394 --0.0464015870842 -0.356150166079 --0.0462933838906 -0.364891673266 --0.0461887546874 -0.373608477694 --0.0462553051202 -0.382597607606 --0.0463220847688 -0.391598666486 --0.0463890961608 -0.400611405805 --0.04626946149 -0.409191016344 --0.0461531901581 -0.417743336845 --0.0462271935633 -0.42671427198 --0.0463015019339 -0.435699046697 --0.046376121769 -0.444697368755 --0.0368957865161 --0.444987171929 --0.0368029213202 --0.435982459336 --0.0367104437487 --0.426991327578 --0.0366183450522 --0.418014027912 --0.0367621529761 --0.409458087731 --0.0369101772962 --0.400874872524 --0.0368268439654 --0.391855762187 --0.0367438017397 --0.382848344741 --0.0366610464797 --0.373852880195 --0.0367903502607 --0.36513201548 --0.0369241197068 --0.356386434688 --0.0368505382855 --0.347352409638 --0.0367771604939 --0.338328237088 --0.03670398221 --0.329314244085 --0.0368184553891 --0.320439156118 --0.0369376182664 --0.311541938433 --0.0368739805433 --0.302492833222 --0.0368104708014 --0.293451847212 --0.0367470831325 --0.284419322647 --0.0368464434403 --0.275403003566 --0.0369506908377 --0.266367212757 --0.0368971665135 --0.25730321024 --0.0368437013147 --0.248245675022 --0.0367902919329 --0.239194999809 --0.0368742888211 --0.230052803869 --0.0369633398847 --0.220893823109 --0.0369200695187 --0.211815473574 --0.0368768042488 --0.202742037724 --0.036833540927 --0.193673923463 --0.036901960387 --0.184423196968 --0.0369755745669 --0.175158460905 --0.0369426795739 --0.166066696507 --0.0369097426344 --0.156978340929 --0.0368767633164 --0.147893834856 --0.0369294345967 --0.138554219433 --0.036987410967 --0.129203425953 --0.0369649854024 --0.120099482013 --0.0369424848681 --0.110997515554 --0.0369424848681 -0.110997515554 --0.0369649854024 -0.120099482013 --0.036987410967 -0.129203425953 --0.0369294345967 -0.138554219433 --0.0368767633164 -0.147893834856 --0.0369097426344 -0.156978340929 --0.0369426795739 -0.166066696507 --0.0369755745669 -0.175158460905 --0.036901960387 -0.184423196968 --0.036833540927 -0.193673923463 --0.0368768042488 -0.202742037724 --0.0369200695187 -0.211815473574 --0.0369633398847 -0.220893823109 --0.0368742888211 -0.230052803869 --0.0367902919329 -0.239194999809 --0.0368437013147 -0.248245675022 --0.0368971665135 -0.25730321024 --0.0369506908377 -0.266367212757 --0.0368464434403 -0.275403003566 --0.0367470831325 -0.284419322647 --0.0368104708014 -0.293451847212 --0.0368739805433 -0.302492833222 --0.0369376182664 -0.311541938433 --0.0368184553891 -0.320439156118 --0.03670398221 -0.329314244085 --0.0367771604939 -0.338328237088 --0.0368505382855 -0.347352409638 --0.0369241197068 -0.356386434688 --0.0367903502607 -0.36513201548 --0.0366610464797 -0.373852880195 --0.0367438017397 -0.382848344741 --0.0368268439654 -0.391855762187 --0.0369101772962 -0.400874872524 --0.0367621529761 -0.409458087731 --0.0366183450522 -0.418014027912 --0.0367104437487 -0.426991327578 --0.0368029213202 -0.435982459336 --0.0368957865161 -0.444987171929 --0.0277912250248 --0.444981660384 --0.027721749714 --0.435977150736 --0.0276525625647 --0.426986243338 --0.0275836585003 --0.418009156848 --0.0276921931922 --0.409453356029 --0.0278038398448 --0.400870286991 --0.0277414079634 --0.391851381448 --0.0276791925915 --0.382844168581 --0.027617191548 --0.373848908368 --0.0277148895948 --0.365128133693 --0.0278159020838 --0.356382633697 --0.027760709745 --0.347348805515 --0.0277056687862 --0.338324835287 --0.0276507779811 --0.329311038806 --0.0277373525843 --0.320436002876 --0.027827422261 --0.311538833841 --0.0277796408375 --0.302489911341 --0.0277319545704 --0.29344911385 --0.0276843593895 --0.284416784772 --0.0277595591647 --0.275400464113 --0.0278384142699 --0.266364669017 --0.0277981943046 --0.257300850773 --0.0277580182275 --0.248243505453 --0.0277178837535 --0.239193014049 --0.0277814887559 --0.230050781339 --0.0278488851862 --0.220891766843 --0.0278163521898 --0.21181359598 --0.0277838210296 --0.202740345144 --0.0277512912181 --0.193672411395 --0.02780311733 --0.1844216154 --0.0278588482642 --0.175156813672 --0.027834108017 --0.166065227905 --0.0278093348 --0.156977049877 --0.0277845292075 --0.14789271653 --0.0278244276328 --0.138553018196 --0.0278683193791 --0.129202140184 --0.0278514545012 --0.120098365966 --0.0278345321638 --0.110996574977 --0.0278345321638 -0.110996574977 --0.0278514545012 -0.120098365966 --0.0278683193791 -0.129202140184 --0.0278244276328 -0.138553018196 --0.0277845292075 -0.14789271653 --0.0278093348 -0.156977049877 --0.027834108017 -0.166065227905 --0.0278588482642 -0.175156813672 --0.02780311733 -0.1844216154 --0.0277512912181 -0.193672411395 --0.0277838210296 -0.202740345144 --0.0278163521898 -0.21181359598 --0.0278488851862 -0.220891766843 --0.0277814887559 -0.230050781339 --0.0277178837535 -0.239193014049 --0.0277580182275 -0.248243505453 --0.0277981943046 -0.257300850773 --0.0278384142699 -0.266364669017 --0.0277595591647 -0.275400464113 --0.0276843593895 -0.284416784772 --0.0277319545704 -0.29344911385 --0.0277796408375 -0.302489911341 --0.027827422261 -0.311538833841 --0.0277373525843 -0.320436002876 --0.0276507779811 -0.329311038806 --0.0277056687862 -0.338324835287 --0.027760709745 -0.347348805515 --0.0278159020838 -0.356382633697 --0.0277148895948 -0.365128133693 --0.027617191548 -0.373848908368 --0.0276791925915 -0.382844168581 --0.0277414079634 -0.391851381448 --0.0278038398448 -0.400870286991 --0.0276921931922 -0.409453356029 --0.0275836585003 -0.418009156848 --0.0276525625647 -0.426986243338 --0.027721749714 -0.435977150736 --0.0277912250248 -0.444981660384 --0.0186860156002 --0.444975735568 --0.0186399405574 --0.435971473683 --0.0185940556291 --0.426980802862 --0.0185483586657 --0.418003952611 --0.0186215906088 --0.409448268772 --0.0186968292818 --0.400865311073 --0.0186553099206 --0.391846657033 --0.0186139331806 --0.382839671933 --0.01857269769 --0.373844624903 --0.0186387637773 --0.365123921895 --0.0187069911061 --0.356378487586 --0.0186701973657 --0.347344871746 --0.0186335042161 --0.338321129606 --0.0185969102985 --0.329307566403 --0.0186555612554 --0.320432544145 --0.0187165128832 --0.311535391593 --0.0186845969581 --0.302486682971 --0.018652742191 --0.293446104948 --0.0186209476571 --0.28441400088 --0.0186719669805 --0.275397667502 --0.0187254081458 --0.266361850744 --0.0186984998286 --0.25729823443 --0.0186716199759 --0.24824109151 --0.0186447663391 --0.239190802694 --0.0186879639425 --0.230048521631 --0.0187336882482 --0.220889456341 --0.018711899098 --0.211811494058 --0.0186901087876 --0.2027384469 --0.0186683171263 --0.193670711886 --0.0187035376386 --0.184419844137 --0.0187413701699 --0.175154968587 --0.0187247877332 --0.166063571675 --0.0187081826038 --0.156975585883 --0.018691555676 --0.147891459142 --0.0187186706924 --0.138551661498 --0.0187484646371 --0.129200676265 --0.0187371633819 --0.120097099211 --0.0187258231465 --0.110995505425 --0.0187258231465 -0.110995505425 --0.0187371633819 -0.120097099211 --0.0187484646371 -0.129200676265 --0.0187186706924 -0.138551661498 --0.018691555676 -0.147891459142 --0.0187081826038 -0.156975585883 --0.0187247877332 -0.166063571675 --0.0187413701699 -0.175154968587 --0.0187035376386 -0.184419844137 --0.0186683171263 -0.193670711886 --0.0186901087876 -0.2027384469 --0.018711899098 -0.211811494058 --0.0187336882482 -0.220889456341 --0.0186879639425 -0.230048521631 --0.0186447663391 -0.239190802694 --0.0186716199759 -0.24824109151 --0.0186984998286 -0.25729823443 --0.0187254081458 -0.266361850744 --0.0186719669805 -0.275397667502 --0.0186209476571 -0.28441400088 --0.018652742191 -0.293446104948 --0.0186845969581 -0.302486682971 --0.0187165128832 -0.311535391593 --0.0186555612554 -0.320432544145 --0.0185969102985 -0.329307566403 --0.0186335042161 -0.338321129606 --0.0186701973657 -0.347344871746 --0.0187069911061 -0.356378487586 --0.0186387637773 -0.365123921895 --0.01857269769 -0.373844624903 --0.0186139331806 -0.382839671933 --0.0186553099206 -0.391846657033 --0.0186968292818 -0.400865311073 --0.0186215906088 -0.409448268772 --0.0185483586657 -0.418003952611 --0.0185940556291 -0.426980802862 --0.0186399405574 -0.435971473683 --0.0186860156002 -0.444975735568 --0.00958062196408 --0.444969430065 --0.0095579563547 --0.435965417381 --0.0095353820167 --0.426974995376 --0.009512897692 --0.417998415256 --0.00955080404256 --0.409442844546 --0.0095896128528 --0.400859974234 --0.00956901262582 --0.391841565928 --0.0095484809934 --0.38283483178 --0.00952801706145 --0.373840035392 --0.00956242999499 --0.365119380352 --0.00959785233905 --0.356373985478 --0.0095794645274 --0.347340621864 --0.00956112471446 --0.33831712389 --0.00954283230263 --0.329303796754 --0.0095735426091 --0.320428783779 --0.00960535796275 --0.311531637523 --0.0095893127628 --0.302483166655 --0.00957329636066 --0.293442820542 --0.00955730796401 --0.284410954667 --0.00958413043115 --0.275394590435 --0.0096121416731 --0.26635873958 --0.00959855065346 --0.25729536125 --0.0095849713247 --0.248238444782 --0.00957140282504 --0.2391883825 --0.00959418036852 --0.230046029952 --0.00961821854386 --0.220886891636 --0.0096071759025 --0.211809157131 --0.00959613008312 --0.202736332311 --0.00958508140349 --0.193668824959 --0.0096036849819 --0.184417867519 --0.00962360683561 --0.175152892004 --0.00961518686925 --0.166061716617 --0.00960675382589 --0.156973956393 --0.0095983071859 --0.147890053645 --0.00961263044987 --0.138550130531 --0.00962831896545 --0.129199025118 --0.00962258422045 --0.12009567309 --0.00961682696756 --0.110994298675 --0.00961682696756 -0.110994298675 --0.00962258422045 -0.12009567309 --0.00962831896545 -0.129199025118 --0.00961263044987 -0.138550130531 --0.0095983071859 -0.147890053645 --0.00960675382589 -0.156973956393 --0.00961518686925 -0.166061716617 --0.00962360683561 -0.175152892004 --0.0096036849819 -0.184417867519 --0.00958508140349 -0.193668824959 --0.00959613008312 -0.202736332311 --0.0096071759025 -0.211809157131 --0.00961821854386 -0.220886891636 --0.00959418036852 -0.230046029952 --0.00957140282504 -0.2391883825 --0.0095849713247 -0.248238444782 --0.00959855065346 -0.25729536125 --0.0096121416731 -0.26635873958 --0.00958413043115 -0.275394590435 --0.00955730796401 -0.284410954667 --0.00957329636066 -0.293442820542 --0.0095893127628 -0.302483166655 --0.00960535796275 -0.311531637523 --0.0095735426091 -0.320428783779 --0.00954283230263 -0.329303796754 --0.00956112471446 -0.33831712389 --0.0095794645274 -0.347340621864 --0.00959785233905 -0.356373985478 --0.00956242999499 -0.365119380352 --0.00952801706145 -0.373840035392 --0.0095484809934 -0.38283483178 --0.00956901262582 -0.391841565928 --0.0095896128528 -0.400859974234 --0.00955080404256 -0.409442844546 --0.009512897692 -0.417998415256 --0.0095353820167 -0.426974995376 --0.0095579563547 -0.435965417381 --0.00958062196408 -0.444969430065 -0 --0.444966181715 -0 --0.435962284222 -0 --0.426971997728 -0 --0.417995562543 -0 --0.409440046984 -0 --0.400857220697 -0 --0.391838914927 -0 --0.382832312153 -0 --0.373837661282 -0 --0.365117029911 -0 --0.356371646096 -0 --0.347338418464 -0 --0.338315048497 -0 --0.329301835773 -0 --0.320426830896 -0 --0.311529691168 -0 --0.302481338043 -0 --0.293441104106 -0 --0.284409363878 -0 --0.275392978581 -0 --0.266357104707 -0 --0.257293854453 -0 --0.248237060256 -0 --0.239187114396 -0 --0.230044720345 -0 --0.220885545925 -0 --0.211807931325 -0 --0.202735225647 -0 --0.19366783814 -0 --0.184416826485 -0 --0.175151793255 -0 --0.166060737452 -0 --0.156973099541 -0 --0.147889311661 -0 --0.138549320014 -0 --0.129198151999 -0 --0.120094917391 -0 --0.110993660426 -0 -0.110993660426 -0 -0.120094917391 -0 -0.129198151999 -0 -0.138549320014 -0 -0.147889311661 -0 -0.156973099541 -0 -0.166060737452 -0 -0.175151793255 -0 -0.184416826485 -0 -0.19366783814 -0 -0.202735225647 -0 -0.211807931325 -0 -0.220885545925 -0 -0.230044720345 -0 -0.239187114396 -0 -0.248237060256 -0 -0.257293854453 -0 -0.266357104707 -0 -0.275392978581 -0 -0.284409363878 -0 -0.293441104106 -0 -0.302481338043 -0 -0.311529691168 -0 -0.320426830896 -0 -0.329301835773 -0 -0.338315048497 -0 -0.347338418464 -0 -0.356371646096 -0 -0.365117029911 -0 -0.373837661282 -0 -0.382832312153 -0 -0.391838914927 -0 -0.400857220697 -0 -0.409440046984 -0 -0.417995562543 -0 -0.426971997728 -0 -0.435962284222 -0 -0.444966181715 -0.00958062196408 --0.444969430065 -0.0095579563547 --0.435965417381 -0.0095353820167 --0.426974995376 -0.009512897692 --0.417998415256 -0.00955080404256 --0.409442844546 -0.0095896128528 --0.400859974234 -0.00956901262582 --0.391841565928 -0.0095484809934 --0.38283483178 -0.00952801706145 --0.373840035392 -0.00956242999499 --0.365119380352 -0.00959785233905 --0.356373985478 -0.0095794645274 --0.347340621864 -0.00956112471446 --0.33831712389 -0.00954283230263 --0.329303796754 -0.0095735426091 --0.320428783779 -0.00960535796275 --0.311531637523 -0.0095893127628 --0.302483166655 -0.00957329636066 --0.293442820542 -0.00955730796401 --0.284410954667 -0.00958413043115 --0.275394590435 -0.0096121416731 --0.26635873958 -0.00959855065346 --0.25729536125 -0.0095849713247 --0.248238444782 -0.00957140282504 --0.2391883825 -0.00959418036852 --0.230046029952 -0.00961821854386 --0.220886891636 -0.0096071759025 --0.211809157131 -0.00959613008312 --0.202736332311 -0.00958508140349 --0.193668824959 -0.0096036849819 --0.184417867519 -0.00962360683561 --0.175152892004 -0.00961518686925 --0.166061716617 -0.00960675382589 --0.156973956393 -0.0095983071859 --0.147890053645 -0.00961263044987 --0.138550130531 -0.00962831896545 --0.129199025118 -0.00962258422045 --0.12009567309 -0.00961682696756 --0.110994298675 -0.00961682696756 -0.110994298675 -0.00962258422045 -0.12009567309 -0.00962831896545 -0.129199025118 -0.00961263044987 -0.138550130531 -0.0095983071859 -0.147890053645 -0.00960675382589 -0.156973956393 -0.00961518686925 -0.166061716617 -0.00962360683561 -0.175152892004 -0.0096036849819 -0.184417867519 -0.00958508140349 -0.193668824959 -0.00959613008312 -0.202736332311 -0.0096071759025 -0.211809157131 -0.00961821854386 -0.220886891636 -0.00959418036852 -0.230046029952 -0.00957140282504 -0.2391883825 -0.0095849713247 -0.248238444782 -0.00959855065346 -0.25729536125 -0.0096121416731 -0.26635873958 -0.00958413043115 -0.275394590435 -0.00955730796401 -0.284410954667 -0.00957329636066 -0.293442820542 -0.0095893127628 -0.302483166655 -0.00960535796275 -0.311531637523 -0.0095735426091 -0.320428783779 -0.00954283230263 -0.329303796754 -0.00956112471446 -0.33831712389 -0.0095794645274 -0.347340621864 -0.00959785233905 -0.356373985478 -0.00956242999499 -0.365119380352 -0.00952801706145 -0.373840035392 -0.0095484809934 -0.38283483178 -0.00956901262582 -0.391841565928 -0.0095896128528 -0.400859974234 -0.00955080404256 -0.409442844546 -0.009512897692 -0.417998415256 -0.0095353820167 -0.426974995376 -0.0095579563547 -0.435965417381 -0.00958062196408 -0.444969430065 -0.0186860156002 --0.444975735568 -0.0186399405574 --0.435971473683 -0.0185940556291 --0.426980802862 -0.0185483586657 --0.418003952611 -0.0186215906088 --0.409448268772 -0.0186968292818 --0.400865311073 -0.0186553099206 --0.391846657033 -0.0186139331806 --0.382839671933 -0.01857269769 --0.373844624903 -0.0186387637773 --0.365123921895 -0.0187069911061 --0.356378487586 -0.0186701973657 --0.347344871746 -0.0186335042161 --0.338321129606 -0.0185969102985 --0.329307566403 -0.0186555612554 --0.320432544145 -0.0187165128832 --0.311535391593 -0.0186845969581 --0.302486682971 -0.018652742191 --0.293446104948 -0.0186209476571 --0.28441400088 -0.0186719669805 --0.275397667502 -0.0187254081458 --0.266361850744 -0.0186984998286 --0.25729823443 -0.0186716199759 --0.24824109151 -0.0186447663391 --0.239190802694 -0.0186879639425 --0.230048521631 -0.0187336882482 --0.220889456341 -0.018711899098 --0.211811494058 -0.0186901087876 --0.2027384469 -0.0186683171263 --0.193670711886 -0.0187035376386 --0.184419844137 -0.0187413701699 --0.175154968587 -0.0187247877332 --0.166063571675 -0.0187081826038 --0.156975585883 -0.018691555676 --0.147891459142 -0.0187186706924 --0.138551661498 -0.0187484646371 --0.129200676265 -0.0187371633819 --0.120097099211 -0.0187258231465 --0.110995505425 -0.0187258231465 -0.110995505425 -0.0187371633819 -0.120097099211 -0.0187484646371 -0.129200676265 -0.0187186706924 -0.138551661498 -0.018691555676 -0.147891459142 -0.0187081826038 -0.156975585883 -0.0187247877332 -0.166063571675 -0.0187413701699 -0.175154968587 -0.0187035376386 -0.184419844137 -0.0186683171263 -0.193670711886 -0.0186901087876 -0.2027384469 -0.018711899098 -0.211811494058 -0.0187336882482 -0.220889456341 -0.0186879639425 -0.230048521631 -0.0186447663391 -0.239190802694 -0.0186716199759 -0.24824109151 -0.0186984998286 -0.25729823443 -0.0187254081458 -0.266361850744 -0.0186719669805 -0.275397667502 -0.0186209476571 -0.28441400088 -0.018652742191 -0.293446104948 -0.0186845969581 -0.302486682971 -0.0187165128832 -0.311535391593 -0.0186555612554 -0.320432544145 -0.0185969102985 -0.329307566403 -0.0186335042161 -0.338321129606 -0.0186701973657 -0.347344871746 -0.0187069911061 -0.356378487586 -0.0186387637773 -0.365123921895 -0.01857269769 -0.373844624903 -0.0186139331806 -0.382839671933 -0.0186553099206 -0.391846657033 -0.0186968292818 -0.400865311073 -0.0186215906088 -0.409448268772 -0.0185483586657 -0.418003952611 -0.0185940556291 -0.426980802862 -0.0186399405574 -0.435971473683 -0.0186860156002 -0.444975735568 -0.0277912250248 --0.444981660384 -0.027721749714 --0.435977150736 -0.0276525625647 --0.426986243338 -0.0275836585003 --0.418009156848 -0.0276921931922 --0.409453356029 -0.0278038398448 --0.400870286991 -0.0277414079634 --0.391851381448 -0.0276791925915 --0.382844168581 -0.027617191548 --0.373848908368 -0.0277148895948 --0.365128133693 -0.0278159020838 --0.356382633697 -0.027760709745 --0.347348805515 -0.0277056687862 --0.338324835287 -0.0276507779811 --0.329311038806 -0.0277373525843 --0.320436002876 -0.027827422261 --0.311538833841 -0.0277796408375 --0.302489911341 -0.0277319545704 --0.29344911385 -0.0276843593895 --0.284416784772 -0.0277595591647 --0.275400464113 -0.0278384142699 --0.266364669017 -0.0277981943046 --0.257300850773 -0.0277580182275 --0.248243505453 -0.0277178837535 --0.239193014049 -0.0277814887559 --0.230050781339 -0.0278488851862 --0.220891766843 -0.0278163521898 --0.21181359598 -0.0277838210296 --0.202740345144 -0.0277512912181 --0.193672411395 -0.02780311733 --0.1844216154 -0.0278588482642 --0.175156813672 -0.027834108017 --0.166065227905 -0.0278093348 --0.156977049877 -0.0277845292075 --0.14789271653 -0.0278244276328 --0.138553018196 -0.0278683193791 --0.129202140184 -0.0278514545012 --0.120098365966 -0.0278345321638 --0.110996574977 -0.0278345321638 -0.110996574977 -0.0278514545012 -0.120098365966 -0.0278683193791 -0.129202140184 -0.0278244276328 -0.138553018196 -0.0277845292075 -0.14789271653 -0.0278093348 -0.156977049877 -0.027834108017 -0.166065227905 -0.0278588482642 -0.175156813672 -0.02780311733 -0.1844216154 -0.0277512912181 -0.193672411395 -0.0277838210296 -0.202740345144 -0.0278163521898 -0.21181359598 -0.0278488851862 -0.220891766843 -0.0277814887559 -0.230050781339 -0.0277178837535 -0.239193014049 -0.0277580182275 -0.248243505453 -0.0277981943046 -0.257300850773 -0.0278384142699 -0.266364669017 -0.0277595591647 -0.275400464113 -0.0276843593895 -0.284416784772 -0.0277319545704 -0.29344911385 -0.0277796408375 -0.302489911341 -0.027827422261 -0.311538833841 -0.0277373525843 -0.320436002876 -0.0276507779811 -0.329311038806 -0.0277056687862 -0.338324835287 -0.027760709745 -0.347348805515 -0.0278159020838 -0.356382633697 -0.0277148895948 -0.365128133693 -0.027617191548 -0.373848908368 -0.0276791925915 -0.382844168581 -0.0277414079634 -0.391851381448 -0.0278038398448 -0.400870286991 -0.0276921931922 -0.409453356029 -0.0275836585003 -0.418009156848 -0.0276525625647 -0.426986243338 -0.027721749714 -0.435977150736 -0.0277912250248 -0.444981660384 -0.0368957865161 --0.444987171929 -0.0368029213202 --0.435982459336 -0.0367104437487 --0.426991327578 -0.0366183450522 --0.418014027912 -0.0367621529761 --0.409458087731 -0.0369101772962 --0.400874872524 -0.0368268439654 --0.391855762187 -0.0367438017397 --0.382848344741 -0.0366610464797 --0.373852880195 -0.0367903502607 --0.36513201548 -0.0369241197068 --0.356386434688 -0.0368505382855 --0.347352409638 -0.0367771604939 --0.338328237088 -0.03670398221 --0.329314244085 -0.0368184553891 --0.320439156118 -0.0369376182664 --0.311541938433 -0.0368739805433 --0.302492833222 -0.0368104708014 --0.293451847212 -0.0367470831325 --0.284419322647 -0.0368464434403 --0.275403003566 -0.0369506908377 --0.266367212757 -0.0368971665135 --0.25730321024 -0.0368437013147 --0.248245675022 -0.0367902919329 --0.239194999809 -0.0368742888211 --0.230052803869 -0.0369633398847 --0.220893823109 -0.0369200695187 --0.211815473574 -0.0368768042488 --0.202742037724 -0.036833540927 --0.193673923463 -0.036901960387 --0.184423196968 -0.0369755745669 --0.175158460905 -0.0369426795739 --0.166066696507 -0.0369097426344 --0.156978340929 -0.0368767633164 --0.147893834856 -0.0369294345967 --0.138554219433 -0.036987410967 --0.129203425953 -0.0369649854024 --0.120099482013 -0.0369424848681 --0.110997515554 -0.0369424848681 -0.110997515554 -0.0369649854024 -0.120099482013 -0.036987410967 -0.129203425953 -0.0369294345967 -0.138554219433 -0.0368767633164 -0.147893834856 -0.0369097426344 -0.156978340929 -0.0369426795739 -0.166066696507 -0.0369755745669 -0.175158460905 -0.036901960387 -0.184423196968 -0.036833540927 -0.193673923463 -0.0368768042488 -0.202742037724 -0.0369200695187 -0.211815473574 -0.0369633398847 -0.220893823109 -0.0368742888211 -0.230052803869 -0.0367902919329 -0.239194999809 -0.0368437013147 -0.248245675022 -0.0368971665135 -0.25730321024 -0.0369506908377 -0.266367212757 -0.0368464434403 -0.275403003566 -0.0367470831325 -0.284419322647 -0.0368104708014 -0.293451847212 -0.0368739805433 -0.302492833222 -0.0369376182664 -0.311541938433 -0.0368184553891 -0.320439156118 -0.03670398221 -0.329314244085 -0.0367771604939 -0.338328237088 -0.0368505382855 -0.347352409638 -0.0369241197068 -0.356386434688 -0.0367903502607 -0.36513201548 -0.0366610464797 -0.373852880195 -0.0367438017397 -0.382848344741 -0.0368268439654 -0.391855762187 -0.0369101772962 -0.400874872524 -0.0367621529761 -0.409458087731 -0.0366183450522 -0.418014027912 -0.0367104437487 -0.426991327578 -0.0368029213202 -0.435982459336 -0.0368957865161 -0.444987171929 -0.046376121769 --0.444697368755 -0.0463015019339 --0.435699046697 -0.0462271935633 --0.42671427198 -0.0461531901581 --0.417743336845 -0.04626946149 --0.409191016344 -0.0463890961608 --0.400611405805 -0.0463220847688 --0.391598666486 -0.0462553051202 --0.382597607606 -0.0461887546874 --0.373608477694 -0.0462933838906 --0.364891673266 -0.0464015870842 --0.356150166079 -0.0463423811938 --0.347122510394 -0.0462833397026 --0.338104703199 -0.0462244547054 --0.329097054416 -0.0463171279016 --0.320226443793 -0.0464135690272 --0.311333722299 -0.0463623439017 --0.302290975139 -0.0463112181243 --0.293256337796 -0.0462601913479 --0.284230163991 -0.0463406467448 --0.27521873629 -0.0464250349706 --0.266187844466 -0.0463819472917 --0.257130204592 -0.0463389060857 --0.248079036004 -0.0462959063285 --0.239034718864 -0.0463639046393 --0.229897766748 -0.0464359783408 --0.220744048667 -0.0464011531855 --0.21167207546 -0.0463663312799 --0.202605010092 -0.0463315094147 --0.193543270418 -0.0463868831823 --0.184298105837 -0.0464464506427 --0.175038931467 -0.0464199993117 --0.165953546009 -0.0463935152564 --0.156871584243 -0.0463669965927 --0.147793478353 -0.0464095786505 --0.13845965595 -0.046456448993 --0.129114659711 -0.0464384600951 --0.120017127268 -0.0464204108961 --0.110921576904 -0.0464204108961 -0.110921576904 -0.0464384600951 -0.120017127268 -0.046456448993 -0.129114659711 -0.0464095786505 -0.13845965595 -0.0463669965927 -0.147793478353 -0.0463935152564 -0.156871584243 -0.0464199993117 -0.165953546009 -0.0464464506427 -0.175038931467 -0.0463868831823 -0.184298105837 -0.0463315094147 -0.193543270418 -0.0463663312799 -0.202605010092 -0.0464011531855 -0.21167207546 -0.0464359783408 -0.220744048667 -0.0463639046393 -0.229897766748 -0.0462959063285 -0.239034718864 -0.0463389060857 -0.248079036004 -0.0463819472917 -0.257130204592 -0.0464250349706 -0.266187844466 -0.0463406467448 -0.27521873629 -0.0462601913479 -0.284230163991 -0.0463112181243 -0.293256337796 -0.0463623439017 -0.302290975139 -0.0464135690272 -0.311333722299 -0.0463171279016 -0.320226443793 -0.0462244547054 -0.329097054416 -0.0462833397026 -0.338104703199 -0.0463423811938 -0.347122510394 -0.0464015870842 -0.356150166079 -0.0462933838906 -0.364891673266 -0.0461887546874 -0.373608477694 -0.0462553051202 -0.382597607606 -0.0463220847688 -0.391598666486 -0.0463890961608 -0.400611405805 -0.04626946149 -0.409191016344 -0.0461531901581 -0.417743336845 -0.0462271935633 -0.42671427198 -0.0463015019339 -0.435699046697 -0.046376121769 -0.444697368755 -0.0558508757184 --0.444470808283 -0.0557945312859 --0.435477564862 -0.0557384173564 --0.426497847967 -0.0556825343015 --0.417531957678 -0.055771244458 --0.408982422497 -0.0558624628286 --0.400405597914 -0.0558117946622 --0.391397909161 -0.055761300715 --0.382401885636 -0.0557109793387 --0.373417775588 -0.0557909086642 --0.364704088099 -0.0558735221554 --0.355965708128 -0.0558287131825 --0.346943088985 -0.0557840245722 --0.337930303215 -0.0557394535916 --0.32892765996 -0.0558103095256 --0.32006052185 -0.0558840043279 --0.311171267591 -0.0558452074467 --0.30213352408 -0.055806487117 --0.293103892763 -0.0557678421198 --0.284082725673 -0.0558293732053 --0.27507507552 -0.0558938810371 --0.26604795177 -0.0558612423967 --0.256995313358 -0.0558286396918 --0.247949154839 -0.0557960662871 --0.238909832267 -0.0558480482459 --0.229776926249 -0.0559031277629 --0.220627267794 -0.0558767607998 --0.211560297414 -0.0558503942285 --0.202498236695 -0.0558240268154 --0.1934415024 -0.0558663419254 --0.18420062191 -0.0559118479094 --0.174945736548 -0.0558918495084 --0.165865363296 -0.0558718280842 --0.156788417117 -0.0558517788059 --0.147715319 -0.0558842614978 --0.138385967868 -0.0559200161528 --0.129045453336 -0.0559064706546 --0.119952939134 -0.0558928780134 --0.110862410538 -0.0558792345882 --0.101774305473 -0.0558792345882 -0.101774305473 -0.0558928780134 -0.110862410538 -0.0559064706546 -0.119952939134 -0.0559200161528 -0.129045453336 -0.0558842614978 -0.138385967868 -0.0558517788059 -0.147715319 -0.0558718280842 -0.156788417117 -0.0558918495084 -0.165865363296 -0.0559118479094 -0.174945736548 -0.0558663419254 -0.18420062191 -0.0558240268154 -0.1934415024 -0.0558503942285 -0.202498236695 -0.0558767607998 -0.211560297414 -0.0559031277629 -0.220627267794 -0.0558480482459 -0.229776926249 -0.0557960662871 -0.238909832267 -0.0558286396918 -0.247949154839 -0.0558612423967 -0.256995313358 -0.0558938810371 -0.26604795177 -0.0558293732053 -0.27507507552 -0.0557678421198 -0.284082725673 -0.055806487117 -0.293103892763 -0.0558452074467 -0.30213352408 -0.0558840043279 -0.311171267591 -0.0558103095256 -0.32006052185 -0.0557394535916 -0.32892765996 -0.0557840245722 -0.337930303215 -0.0558287131825 -0.346943088985 -0.0558735221554 -0.355965708128 -0.0557909086642 -0.364704088099 -0.0557109793387 -0.373417775588 -0.055761300715 -0.382401885636 -0.0558117946622 -0.391397909161 -0.0558624628286 -0.400405597914 -0.055771244458 -0.408982422497 -0.0556825343015 -0.417531957678 -0.0557384173564 -0.426497847967 -0.0557945312859 -0.435477564862 -0.0558508757184 -0.444470808283 -0.0649446695436 --0.44460242984 -0.0648649941562 --0.435606375044 -0.0647856455047 --0.426623858592 -0.0647066262548 --0.417655146386 -0.0648305371547 --0.409103780532 -0.0649580586285 --0.400525149941 -0.0648865415777 --0.391514639249 -0.064815273704 --0.382515781935 -0.0647442521486 --0.373528848719 -0.0648557210988 --0.364813190687 -0.0649710229278 --0.35607283238 -0.0649078686906 --0.347047360011 -0.0648448864062 --0.338031714149 -0.0647820754375 --0.32902622344 -0.064880772978 --0.320156978728 -0.0649834990886 --0.3112656103 -0.0649288859383 --0.302225003903 -0.0648743829544 --0.293192506582 -0.0648199839881 --0.284168470872 -0.0649056252757 --0.275158571797 -0.064995472156 --0.266129185857 -0.0649495610531 --0.257073663839 -0.0649037015841 --0.248024614146 -0.0648578875923 --0.238982392823 -0.0649302205342 --0.229847120712 -0.0650069092844 --0.220695089525 -0.0649698309855 --0.21162522257 -0.0649327564162 --0.202560262928 -0.0648956829273 --0.193500616283 -0.0649545566728 --0.18425724797 -0.065017908699 --0.17499987908 -0.0649897758901 --0.16591659288 -0.0649616115858 --0.156836727189 -0.0649334082625 --0.147760698565 -0.0649786355164 --0.138428778744 -0.0650284463669 --0.129085700049 -0.0650093546011 --0.119990250175 -0.0649901968987 --0.110896780752 -0.0649709703147 --0.101805736261 -0.0649709703147 -0.101805736261 -0.0649901968987 -0.110896780752 -0.0650093546011 -0.119990250175 -0.0650284463669 -0.129085700049 -0.0649786355164 -0.138428778744 -0.0649334082625 -0.147760698565 -0.0649616115858 -0.156836727189 -0.0649897758901 -0.16591659288 -0.065017908699 -0.17499987908 -0.0649545566728 -0.18425724797 -0.0648956829273 -0.193500616283 -0.0649327564162 -0.202560262928 -0.0649698309855 -0.21162522257 -0.0650069092844 -0.220695089525 -0.0649302205342 -0.229847120712 -0.0648578875923 -0.238982392823 -0.0649037015841 -0.248024614146 -0.0649495610531 -0.257073663839 -0.064995472156 -0.266129185857 -0.0649056252757 -0.275158571797 -0.0648199839881 -0.284168470872 -0.0648743829544 -0.293192506582 -0.0649288859383 -0.302225003903 -0.0649834990886 -0.3112656103 -0.064880772978 -0.320156978728 -0.0647820754375 -0.32902622344 -0.0648448864062 -0.338031714149 -0.0649078686906 -0.347047360011 -0.0649710229278 -0.35607283238 -0.0648557210988 -0.364813190687 -0.0647442521486 -0.373528848719 -0.064815273704 -0.382515781935 -0.0648865415777 -0.391514639249 -0.0649580586285 -0.400525149941 -0.0648305371547 -0.409103780532 -0.0647066262548 -0.417655146386 -0.0647856455047 -0.426623858592 -0.0648649941562 -0.435606375044 -0.0649446695436 -0.44460242984 -0.0740398926542 --0.444733770196 -0.0739368860898 --0.435734894127 -0.0738343073975 --0.426749587291 -0.0737321519524 --0.417778095852 -0.073891248985 --0.409224896145 -0.07405505717 --0.400644414755 -0.0739626953606 --0.391631086696 -0.0738706551116 --0.382629422609 -0.0737789319562 --0.373639684434 -0.0739219318863 --0.364922044921 -0.0740699086105 --0.356179689102 -0.0739884104076 --0.347151384697 -0.0739071390621 --0.338132913561 -0.0738260862094 --0.329124589097 -0.0739526131508 --0.320253205352 -0.0740843646237 --0.311359705125 -0.0740139364482 --0.302316256323 -0.0739436477834 --0.293280907556 -0.0738734949336 --0.284254019576 -0.0739832374021 --0.275241846171 -0.0740984154472 --0.26621019123 -0.0740392341972 --0.257151807762 -0.0739801191999 --0.248099894397 -0.0739210660009 --0.239054807683 -0.0740137403275 --0.229917139443 -0.0741120305748 --0.220762711541 -0.0740642439376 --0.211689964427 -0.0740164609969 --0.202622117609 -0.0739686791366 --0.193559579294 -0.0740441031978 --0.1843137122 -0.0741252983994 --0.175053845762 -0.0740890341906 --0.165967668926 -0.0740527259947 --0.156884899471 -0.0740163692637 --0.14780596262 -0.0740743384203 --0.13847146244 -0.0741381991675 --0.129125795272 -0.0741135598928 --0.120027428907 -0.0740888407372 --0.110931043975 -0.0740640331129 --0.101837085375 -0.0741043681447 --0.0924348551487 -0.0741043681447 -0.0924348551487 -0.0740640331129 -0.101837085375 -0.0740888407372 -0.110931043975 -0.0741135598928 -0.120027428907 -0.0741381991675 -0.129125795272 -0.0740743384203 -0.13847146244 -0.0740163692637 -0.14780596262 -0.0740527259947 -0.156884899471 -0.0740890341906 -0.165967668926 -0.0741252983994 -0.175053845762 -0.0740441031978 -0.1843137122 -0.0739686791366 -0.193559579294 -0.0740164609969 -0.202622117609 -0.0740642439376 -0.211689964427 -0.0741120305748 -0.220762711541 -0.0740137403275 -0.229917139443 -0.0739210660009 -0.239054807683 -0.0739801191999 -0.248099894397 -0.0740392341972 -0.257151807762 -0.0740984154472 -0.26621019123 -0.0739832374021 -0.275241846171 -0.0738734949336 -0.284254019576 -0.0739436477834 -0.293280907556 -0.0740139364482 -0.302316256323 -0.0740843646237 -0.311359705125 -0.0739526131508 -0.320253205352 -0.0738260862094 -0.329124589097 -0.0739071390621 -0.338132913561 -0.0739884104076 -0.347151384697 -0.0740699086105 -0.356179689102 -0.0739219318863 -0.364922044921 -0.0737789319562 -0.373639684434 -0.0738706551116 -0.382629422609 -0.0739626953606 -0.391631086696 -0.07405505717 -0.400644414755 -0.073891248985 -0.409224896145 -0.0737321519524 -0.417778095852 -0.0738343073975 -0.426749587291 -0.0739368860898 -0.435734894127 -0.0740398926542 -0.444733770196 -0.0831360819065 --0.444864786105 -0.0830097557356 --0.435863151256 -0.0828839553109 --0.426875073677 -0.0827586696219 --0.417900803494 -0.0829529327818 --0.40934574628 -0.0831530070509 --0.400763398109 -0.0830398035615 --0.391747276122 -0.0829269949742 --0.382742817399 -0.0828145767893 --0.373750301423 -0.0829890837175 --0.365030649936 -0.0831697154336 --0.356286260706 -0.0830698817986 --0.347255154174 -0.0829703264907 --0.338233884983 -0.0828710405418 --0.329222755778 -0.0830253816348 --0.320349213875 -0.0831861382175 --0.311453548296 -0.0830998988897 --0.302407278824 -0.0830138314486 --0.293369114078 -0.0829279320157 --0.284339396241 -0.0830617604436 --0.275324922774 -0.0832022518303 --0.266290973342 -0.0831298015087 --0.257229744328 -0.0830574366452 --0.248174989053 -0.082985148556 --0.239127064589 -0.0830981490933 --0.229986981733 -0.0832180278687 --0.220830133126 -0.08315953593 --0.211754522301 -0.0831010480192 --0.20268380939 -0.0830425630793 --0.193618414852 -0.083134528955 --0.184370031669 -0.0832335552826 --0.175107644823 -0.083189162574 --0.16601859676 -0.0831447108639 --0.15693293639 -0.0831002033439 --0.147851119968 -0.0831709070601 --0.138514021432 -0.0832488095964 --0.129165741075 -0.0832186265684 --0.120064483798 -0.0831883463521 --0.11096520576 -0.0831579580829 --0.101868352484 -0.0832071973084 --0.0924634507146 -0.0832637432598 --0.0830502591578 -0.0832637432598 -0.0830502591578 -0.0832071973084 -0.0924634507146 -0.0831579580829 -0.101868352484 -0.0831883463521 -0.11096520576 -0.0832186265684 -0.120064483798 -0.0832488095964 -0.129165741075 -0.0831709070601 -0.138514021432 -0.0831002033439 -0.147851119968 -0.0831447108639 -0.15693293639 -0.083189162574 -0.16601859676 -0.0832335552826 -0.175107644823 -0.083134528955 -0.184370031669 -0.0830425630793 -0.193618414852 -0.0831010480192 -0.20268380939 -0.08315953593 -0.211754522301 -0.0832180278687 -0.220830133126 -0.0830981490933 -0.229986981733 -0.082985148556 -0.239127064589 -0.0830574366452 -0.248174989053 -0.0831298015087 -0.257229744328 -0.0832022518303 -0.266290973342 -0.0830617604436 -0.275324922774 -0.0829279320157 -0.284339396241 -0.0830138314486 -0.293369114078 -0.0830998988897 -0.302407278824 -0.0831861382175 -0.311453548296 -0.0830253816348 -0.320349213875 -0.0828710405418 -0.329222755778 -0.0829703264907 -0.338233884983 -0.0830698817986 -0.347255154174 -0.0831697154336 -0.356286260706 -0.0829890837175 -0.365030649936 -0.0828145767893 -0.373750301423 -0.0829269949742 -0.382742817399 -0.0830398035615 -0.391747276122 -0.0831530070509 -0.400763398109 -0.0829529327818 -0.40934574628 -0.0827586696219 -0.417900803494 -0.0828839553109 -0.426875073677 -0.0830097557356 -0.435863151256 -0.0831360819065 -0.444864786105 -0.0922537343406 --0.417458490499 -0.0924201889105 --0.408908734125 -0.0925915939695 --0.400331690901 -0.0924949021761 --0.391326199114 -0.0923985445397 --0.382332332636 -0.0923025238947 --0.373350384764 -0.0924520380861 --0.364636962394 -0.0926067758041 --0.355898801859 -0.0925214855042 --0.346878247463 -0.0924364308875 --0.337867500016 -0.0923516105586 --0.328866891038 -0.0924838952309 --0.32000042577 -0.0926216592094 --0.311111837185 -0.0925479817193 --0.302076088723 -0.0924744452754 --0.29304840787 -0.0924010525133 --0.284029155575 -0.0925157491421 --0.275022537825 -0.0926361432899 --0.265996458547 -0.0925742523447 --0.256945714984 -0.0925124326817 --0.247901414743 -0.0924506765735 --0.238863936581 -0.092547514989 --0.22973241045 -0.092650243628 --0.22058412784 -0.0926002963861 --0.211518970489 -0.0925503529797 --0.202458704639 -0.0925004129478 --0.193403752543 -0.0925791915423 --0.184164531586 -0.0926640157322 --0.174911312263 -0.0926261432862 --0.165832707397 -0.0925882196675 --0.156757493019 -0.0925502448466 --0.147686115163 -0.0926107364696 --0.138358665631 -0.092677399614 --0.129020046872 -0.0926517005361 --0.119929241049 -0.0926259140767 --0.110840410919 -0.092600040865 --0.10175400501 -0.092642115436 --0.0923591238643 -0.0926904510311 --0.0829559626843 -0.0926770069137 --0.0738545053553 -0.0926770069137 -0.0738545053553 -0.0926904510311 -0.0829559626843 -0.092642115436 -0.0923591238643 -0.092600040865 -0.10175400501 -0.0926259140767 -0.110840410919 -0.0926517005361 -0.119929241049 -0.092677399614 -0.129020046872 -0.0926107364696 -0.138358665631 -0.0925502448466 -0.147686115163 -0.0925882196675 -0.156757493019 -0.0926261432862 -0.165832707397 -0.0926640157322 -0.174911312263 -0.0925791915423 -0.184164531586 -0.0925004129478 -0.193403752543 -0.0925503529797 -0.202458704639 -0.0926002963861 -0.211518970489 -0.092650243628 -0.22058412784 -0.092547514989 -0.22973241045 -0.0924506765735 -0.238863936581 -0.0925124326817 -0.247901414743 -0.0925742523447 -0.256945714984 -0.0926361432899 -0.265996458547 -0.0925157491421 -0.275022537825 -0.0924010525133 -0.284029155575 -0.0924744452754 -0.29304840787 -0.0925479817193 -0.302076088723 -0.0926216592094 -0.311111837185 -0.0924838952309 -0.32000042577 -0.0923516105586 -0.328866891038 -0.0924364308875 -0.337867500016 -0.0925214855042 -0.346878247463 -0.0926067758041 -0.355898801859 -0.0924520380861 -0.364636962394 -0.0923025238947 -0.373350384764 -0.0923985445397 -0.382332332636 -0.0924949021761 -0.391326199114 -0.0925915939695 -0.400331690901 -0.0924201889105 -0.408908734125 -0.0922537343406 -0.417458490499 -0.101740268009 --0.417075024135 -0.101878848481 --0.40852974668 -0.102021515647 --0.399957183718 -0.101941382425 --0.390961010158 -0.101861523164 --0.381976429451 -0.101781943502 --0.373003731274 -0.101906412091 --0.364295613117 -0.102035197213 --0.355562756113 -0.101964488118 --0.346551428763 -0.101893977724 --0.33754989285 -0.101823659292 --0.328558462833 -0.10193383571 --0.319698053951 -0.102048551503 --0.31081551924 -0.101987466715 --0.301788934149 -0.101926498104 --0.292770404466 -0.101865646554 --0.28376029 -0.101961167607 --0.274760428032 -0.102061418492 --0.265741102446 -0.102010119565 --0.256699488419 -0.101958873434 --0.24766429203 -0.101907675643 --0.238635913778 -0.101988318244 --0.229511771275 -0.102073858792 --0.220370859758 -0.102032479475 --0.211314793669 -0.101991103365 --0.202263612654 -0.101949729949 --0.193217731339 -0.102015290236 --0.183986420294 -0.102085880732 --0.174741109331 -0.1020545479 --0.165671580743 -0.102023168528 --0.156605441374 -0.101991742782 --0.147543127287 -0.10204200199 --0.138224021463 -0.10209740021 --0.128893749833 -0.102076196545 --0.119812010379 -0.102054918687 --0.110732248155 -0.102033569895 --0.101654910329 -0.102068458358 --0.0922687017979 -0.102108568505 --0.0828742195417 -0.102097577341 --0.0737818407737 -0.102086488746 --0.0646900595381 -0.102075305023 --0.0555993343987 -0.102075305023 -0.0555993343987 -0.102086488746 -0.0646900595381 -0.102097577341 -0.0737818407737 -0.102108568505 -0.0828742195417 -0.102068458358 -0.0922687017979 -0.102033569895 -0.101654910329 -0.102054918687 -0.110732248155 -0.102076196545 -0.119812010379 -0.10209740021 -0.128893749833 -0.10204200199 -0.138224021463 -0.101991742782 -0.147543127287 -0.102023168528 -0.156605441374 -0.1020545479 -0.165671580743 -0.102085880732 -0.174741109331 -0.102015290236 -0.183986420294 -0.101949729949 -0.193217731339 -0.101991103365 -0.202263612654 -0.102032479475 -0.211314793669 -0.102073858792 -0.220370859758 -0.101988318244 -0.229511771275 -0.101907675643 -0.238635913778 -0.101958873434 -0.24766429203 -0.102010119565 -0.256699488419 -0.102061418492 -0.265741102446 -0.101961167607 -0.274760428032 -0.101865646554 -0.28376029 -0.101926498104 -0.292770404466 -0.101987466715 -0.301788934149 -0.102048551503 -0.31081551924 -0.10193383571 -0.319698053951 -0.101823659292 -0.328558462833 -0.101893977724 -0.33754989285 -0.101964488118 -0.346551428763 -0.102035197213 -0.355562756113 -0.101906412091 -0.364295613117 -0.101781943502 -0.373003731274 -0.101861523164 -0.381976429451 -0.101941382425 -0.390961010158 -0.102021515647 -0.399957183718 -0.101878848481 -0.40852974668 -0.101740268009 -0.417075024135 -0.110751742117 --0.417315274808 -0.110925346472 --0.408766473353 -0.111104129904 --0.400190379352 -0.111003249053 --0.391188812813 -0.110902717626 --0.38219883531 -0.110802533973 --0.373220741868 -0.110958378702 --0.364508730072 -0.111119688201 --0.355771971531 -0.111030727986 --0.346755219899 -0.11094201474 --0.337748253919 -0.11085354599 --0.328751378553 -0.110991427167 --0.319886760459 -0.111135027779 --0.310999991612 -0.111058196668 --0.301967909787 -0.110981519736 --0.29294390528 -0.110904994658 --0.283928312964 -0.111024504259 --0.27492392456 -0.111149966571 --0.265900050138 -0.111085459482 --0.256852903861 -0.111021020619 --0.247812176647 -0.110956647439 --0.238778270164 -0.111057536223 --0.229649334423 -0.111164577364 --0.220503609295 -0.111112538766 --0.211441981182 -0.111060506347 --0.202385238698 -0.111008478192 --0.193333776206 -0.111090514781 --0.184097418811 -0.111178864744 --0.174847055736 -0.111139435575 --0.165771919152 -0.11109995065 --0.156700173227 -0.111060410628 --0.147632250175 -0.111123348847 --0.138307904754 -0.111192734136 --0.128972385464 -0.11116601402 --0.119885011115 -0.111139200726 --0.110799609235 -0.111112295065 --0.10171662909 -0.111156048584 --0.0923250296629 -0.111206345944 --0.0829251490813 -0.111192418614 --0.073827107581 -0.111178370131 --0.0647296568895 -0.111164200718 --0.0556332629377 -0.111188569053 --0.0461962057708 -0.111219538784 --0.0367537926475 -0.111218452367 --0.0276468463017 -0.111217242109 --0.0185391506386 -0.111215902743 --0.0094311772543 -0.111215199413 --2.16840434497e-19 -0.111215902743 -0.0094311772543 -0.111217242109 -0.0185391506386 -0.111218452367 -0.0276468463017 -0.111219538784 -0.0367537926475 -0.111188569053 -0.0461962057708 -0.111164200718 -0.0556332629377 -0.111178370131 -0.0647296568895 -0.111192418614 -0.073827107581 -0.111206345944 -0.0829251490813 -0.111156048584 -0.0923250296629 -0.111112295065 -0.10171662909 -0.111139200726 -0.110799609235 -0.11116601402 -0.119885011115 -0.111192734136 -0.128972385464 -0.111123348847 -0.138307904754 -0.111060410628 -0.147632250175 -0.11109995065 -0.156700173227 -0.111139435575 -0.165771919152 -0.111178864744 -0.174847055736 -0.111090514781 -0.184097418811 -0.111008478192 -0.193333776206 -0.111060506347 -0.202385238698 -0.111112538766 -0.211441981182 -0.111164577364 -0.220503609295 -0.111057536223 -0.229649334423 -0.110956647439 -0.238778270164 -0.111021020619 -0.247812176647 -0.111085459482 -0.256852903861 -0.111149966571 -0.265900050138 -0.111024504259 -0.27492392456 -0.110904994658 -0.283928312964 -0.110981519736 -0.29294390528 -0.111058196668 -0.301967909787 -0.111135027779 -0.310999991612 -0.110991427167 -0.319886760459 -0.11085354599 -0.328751378553 -0.11094201474 -0.337748253919 -0.111030727986 -0.346755219899 -0.111119688201 -0.355771971531 -0.110958378702 -0.364508730072 -0.110802533973 -0.373220741868 -0.110902717626 -0.38219883531 -0.111003249053 -0.391188812813 -0.111104129904 -0.400190379352 -0.110925346472 -0.408766473353 -0.110751742117 -0.417315274808 -0.119766262407 --0.417555499135 -0.119974885274 --0.409003148501 -0.120189781202 --0.400423487838 -0.120068151997 --0.391416533986 -0.11994694742 --0.382421190785 -0.119826154123 --0.373437718621 -0.120013366477 --0.364721791389 -0.120207192594 --0.355981107083 -0.120099980048 --0.346958939993 -0.119993062919 --0.337946555365 -0.119886440228 --0.328944258994 -0.120052018349 --0.320075402375 -0.120224501981 --0.311184382842 -0.120131933109 --0.302146841114 -0.120039547321 --0.293117366971 -0.119947341396 --0.284096307594 -0.120090831902 --0.275087363604 -0.120241501656 --0.266058917218 -0.120163787217 --0.257006267279 -0.120086155975 --0.247960037592 -0.120008605437 --0.238920613875 -0.120129733187 --0.229786845378 -0.120258268358 --0.220636283847 -0.120195574268 --0.211569110069 -0.120132885097 --0.202506817159 -0.120070198996 --0.193449793239 -0.120168713121 --0.184208369208 -0.120274816413 --0.174952929749 -0.12022728667 --0.165872202036 -0.120179697443 --0.156794867476 -0.120132040599 --0.147721345948 -0.120207656592 --0.138391734483 -0.120291023043 --0.129050944463 -0.120258779905 --0.119957955015 -0.12022643518 --0.110866933694 -0.120193977907 --0.101778324247 -0.120246595312 --0.0923813106566 -0.120307076178 --0.0829760084906 -0.120290210515 --0.0738723200174 -0.120273204204 --0.0647692185448 -0.120256054547 --0.0556671727486 -0.12028545944 --0.0462246045372 -0.120322798552 --0.0367766736493 -0.12032136235 --0.0276640601106 -0.120319778041 --0.0185506950764 -0.120318051361 --0.00943705050459 -0.120317149359 -2.16840434497e-19 -0.120318051361 -0.00943705050459 -0.120319778041 -0.0185506950764 -0.12032136235 -0.0276640601106 -0.120322798552 -0.0367766736493 -0.12028545944 -0.0462246045372 -0.120256054547 -0.0556671727486 -0.120273204204 -0.0647692185448 -0.120290210515 -0.0738723200174 -0.120307076178 -0.0829760084906 -0.120246595312 -0.0923813106566 -0.120193977907 -0.101778324247 -0.12022643518 -0.110866933694 -0.120258779905 -0.119957955015 -0.120291023043 -0.129050944463 -0.120207656592 -0.138391734483 -0.120132040599 -0.147721345948 -0.120179697443 -0.156794867476 -0.12022728667 -0.165872202036 -0.120274816413 -0.174952929749 -0.120168713121 -0.184208369208 -0.120070198996 -0.193449793239 -0.120132885097 -0.202506817159 -0.120195574268 -0.211569110069 -0.120258268358 -0.220636283847 -0.120129733187 -0.229786845378 -0.120008605437 -0.238920613875 -0.120086155975 -0.247960037592 -0.120163787217 -0.257006267279 -0.120241501656 -0.266058917218 -0.120090831902 -0.275087363604 -0.119947341396 -0.284096307594 -0.120039547321 -0.293117366971 -0.120131933109 -0.302146841114 -0.120224501981 -0.311184382842 -0.120052018349 -0.320075402375 -0.119886440228 -0.328944258994 -0.119993062919 -0.337946555365 -0.120099980048 -0.346958939993 -0.120207192594 -0.355981107083 -0.120013366477 -0.364721791389 -0.119826154123 -0.373437718621 -0.11994694742 -0.382421190785 -0.120068151997 -0.391416533986 -0.120189781202 -0.400423487838 -0.119974885274 -0.409003148501 -0.119766262407 -0.417555499135 -0.128783405269 --0.417795715428 -0.129027031361 --0.409239779378 -0.129278027418 --0.400656523148 -0.129135647531 --0.391644213004 -0.128993768039 --0.38264350287 -0.128852371657 --0.37365466268 -0.129070949202 --0.364934820232 -0.129297281399 --0.356190193664 -0.129171808691 --0.347162611324 -0.129046688231 --0.338144818663 -0.128921909598 --0.329137117903 -0.129115172345 --0.320263998444 -0.129316529452 --0.311368700284 -0.129208220247 --0.302325708416 -0.129100129106 --0.293290781227 -0.128992243709 --0.284264266087 -0.129159706902 --0.275250749426 -0.129335575453 --0.26621771439 -0.129244654182 --0.257159577389 -0.129153831491 --0.248107856452 -0.12906310132 --0.239062937798 -0.129204463545 --0.229924319466 -0.129354488673 --0.220768887501 -0.129281140154 --0.211696184089 -0.129207795486 --0.202628351886 -0.129134448653 --0.193565791762 -0.129249428209 --0.184319277849 -0.129373282422 --0.175058732587 -0.129317655145 --0.165972436547 -0.129261956192 --0.156889523297 -0.129206186175 --0.147810426522 -0.129294484369 --0.138475528451 -0.129391830871 --0.129129437914 -0.129354062313 --0.120030847319 -0.129316178051 --0.110934217972 -0.129278163593 --0.101839997578 -0.129339644298 --0.0924375477471 -0.129410311394 --0.0830268006765 -0.129390504826 --0.0739174798733 -0.129370537898 --0.0648087441234 -0.1293504141 --0.0557010635273 -0.129384853798 --0.0462529579613 -0.129428554744 --0.0367994862255 -0.129426771942 --0.0276812233729 -0.129424816111 --0.0185622051166 -0.129422693648 --0.00944290602232 -0.129421587797 -0 -0.129422693648 -0.00944290602232 -0.129424816111 -0.0185622051166 -0.129426771942 -0.0276812233729 -0.129428554744 -0.0367994862255 -0.129384853798 -0.0462529579613 -0.1293504141 -0.0557010635273 -0.129370537898 -0.0648087441234 -0.129390504826 -0.0739174798733 -0.129410311394 -0.0830268006765 -0.129339644298 -0.0924375477471 -0.129278163593 -0.101839997578 -0.129316178051 -0.110934217972 -0.129354062313 -0.120030847319 -0.129391830871 -0.129129437914 -0.129294484369 -0.138475528451 -0.129206186175 -0.147810426522 -0.129261956192 -0.156889523297 -0.129317655145 -0.165972436547 -0.129373282422 -0.175058732587 -0.129249428209 -0.184319277849 -0.129134448653 -0.193565791762 -0.129207795486 -0.202628351886 -0.129281140154 -0.211696184089 -0.129354488673 -0.220768887501 -0.129204463545 -0.229924319466 -0.12906310132 -0.239062937798 -0.129153831491 -0.248107856452 -0.129244654182 -0.257159577389 -0.129335575453 -0.26621771439 -0.129159706902 -0.275250749426 -0.128992243709 -0.284264266087 -0.129100129106 -0.293290781227 -0.129208220247 -0.302325708416 -0.129316529452 -0.311368700284 -0.129115172345 -0.320263998444 -0.128921909598 -0.329137117903 -0.129046688231 -0.338144818663 -0.129171808691 -0.347162611324 -0.129297281399 -0.356190193664 -0.129070949202 -0.364934820232 -0.128852371657 -0.37365466268 -0.128993768039 -0.38264350287 -0.129135647531 -0.391644213004 -0.129278027418 -0.400656523148 -0.129027031361 -0.409239779378 -0.128783405269 -0.417795715428 -0.138655752718 --0.400057603499 -0.13853018942 --0.391060148805 -0.138405063077 --0.382074236836 -0.138280368022 --0.373100153449 -0.138473557614 --0.364388681188 -0.138673583427 --0.355652433186 -0.138562920197 --0.34663957184 -0.138452563237 --0.337636461064 -0.138342510224 --0.328643408719 -0.138513313019 --0.31977994704 -0.138691256863 --0.310894308549 -0.138595733437 --0.30186593878 -0.13850040628 --0.292845611136 -0.138405258435 --0.283833656867 -0.138553251839 --0.274830965635 -0.138708670846 --0.265808766229 -0.138628498471 --0.256765174971 -0.1385484118 --0.247727982916 -0.138468407261 --0.238697573195 -0.138593296902 --0.229570807397 -0.138725847247 --0.220427244751 -0.138661199865 --0.211369046182 -0.138596551001 --0.202315699689 -0.13853190047 --0.193267616849 -0.138633440187 --0.184033852045 -0.138742828483 --0.174786067454 -0.138693844253 --0.165714250407 -0.138644794154 --0.156645806264 -0.138595681254 --0.147581172463 -0.138673595607 --0.138259757174 -0.138759508247 --0.128927158157 -0.138726308609 --0.119843036563 -0.13869300197 --0.110760872583 -0.138659579287 --0.101681113329 -0.138713734231 --0.0922926921845 -0.138776012537 --0.0828959864539 -0.13875869377 --0.0738011462425 -0.138741229841 --0.0647068930894 -0.138723627146 --0.0556136938764 -0.138753863098 --0.0461799762757 -0.138792288988 --0.0367409053761 -0.138790909047 --0.0276371515107 -0.138789369423 --0.0185326486928 -0.138787686229 --0.00942786953707 -0.13878681032 -0 -0.138787686229 -0.00942786953707 -0.138789369423 -0.0185326486928 -0.138790909047 -0.0276371515107 -0.138792288988 -0.0367409053761 -0.138753863098 -0.0461799762757 -0.138723627146 -0.0556136938764 -0.138741229841 -0.0647068930894 -0.13875869377 -0.0738011462425 -0.138776012537 -0.0828959864539 -0.138713734231 -0.0922926921845 -0.138659579287 -0.101681113329 -0.13869300197 -0.110760872583 -0.138726308609 -0.119843036563 -0.138759508247 -0.128927158157 -0.138673595607 -0.138259757174 -0.138595681254 -0.147581172463 -0.138644794154 -0.156645806264 -0.138693844253 -0.165714250407 -0.138742828483 -0.174786067454 -0.138633440187 -0.184033852045 -0.13853190047 -0.193267616849 -0.138596551001 -0.202315699689 -0.138661199865 -0.211369046182 -0.138725847247 -0.220427244751 -0.138593296902 -0.229570807397 -0.138468407261 -0.238697573195 -0.1385484118 -0.247727982916 -0.138628498471 -0.256765174971 -0.138708670846 -0.265808766229 -0.138553251839 -0.274830965635 -0.138405258435 -0.283833656867 -0.13850040628 -0.292845611136 -0.138595733437 -0.30186593878 -0.138691256863 -0.310894308549 -0.138513313019 -0.31977994704 -0.138342510224 -0.328643408719 -0.138452563237 -0.337636461064 -0.138562920197 -0.34663957184 -0.138673583427 -0.355652433186 -0.138473557614 -0.364388681188 -0.138280368022 -0.373100153449 -0.138405063077 -0.382074236836 -0.13853018942 -0.391060148805 -0.138655752718 -0.400057603499 -0.148021741802 --0.399515178262 -0.147913067952 --0.390531278698 -0.147804767163 --0.381558884054 -0.147696839525 --0.372598256307 -0.147864541885 --0.363894230132 -0.148038160684 --0.355165428496 -0.14794237423 --0.346165994135 -0.147846844812 --0.33717627066 -0.147751577519 --0.328196544473 -0.147899836163 --0.319341724329 -0.148054282151 --0.31046474239 -0.147971606895 --0.301449689558 -0.147889092998 --0.292442640016 -0.147806728367 --0.283443922006 -0.147935180191 --0.274450954981 -0.148070074138 --0.265438485553 -0.148000700696 --0.25640811315 -0.14793139339 --0.247384115789 -0.147862158522 --0.238366874082 -0.147970522318 --0.229250800434 -0.148085528135 --0.220117930726 -0.148029614316 --0.211072886989 -0.147973695899 --0.202032676437 -0.14791777984 --0.19299771542 -0.148005838696 --0.183775469424 -0.148100703632 --0.174539205519 -0.148058386117 --0.165480514854 -0.14801601442 --0.156425183573 -0.147973579744 --0.147373648878 -0.148041069652 --0.138064427349 -0.148115506282 --0.128744024631 -0.148086890461 --0.119673007722 -0.148058182281 --0.110603946926 -0.148029375804 --0.101537284382 -0.148076179606 --0.0921615627694 -0.148130036271 --0.0827775639457 -0.148115215237 --0.073695833127 -0.148100264278 --0.0646146917318 -0.148085192456 --0.0555346020663 -0.148111211592 --0.0461139163221 -0.148144341182 --0.0366878853622 -0.148143364993 --0.0275972623986 -0.148142249303 --0.0185058982738 -0.148141003202 --0.00941426067545 -0.148140351512 -0 -0.148141003202 -0.00941426067545 -0.148142249303 -0.0185058982738 -0.148143364993 -0.0275972623986 -0.148144341182 -0.0366878853622 -0.148111211592 -0.0461139163221 -0.148085192456 -0.0555346020663 -0.148100264278 -0.0646146917318 -0.148115215237 -0.073695833127 -0.148130036271 -0.0827775639457 -0.148076179606 -0.0921615627694 -0.148029375804 -0.101537284382 -0.148058182281 -0.110603946926 -0.148086890461 -0.119673007722 -0.148115506282 -0.128744024631 -0.148041069652 -0.138064427349 -0.147973579744 -0.147373648878 -0.14801601442 -0.156425183573 -0.148058386117 -0.165480514854 -0.148100703632 -0.174539205519 -0.148005838696 -0.183775469424 -0.14791777984 -0.19299771542 -0.147973695899 -0.202032676437 -0.148029614316 -0.211072886989 -0.148085528135 -0.220117930726 -0.147970522318 -0.229250800434 -0.147862158522 -0.238366874082 -0.14793139339 -0.247384115789 -0.148000700696 -0.25640811315 -0.148070074138 -0.265438485553 -0.147935180191 -0.274450954981 -0.147806728367 -0.283443922006 -0.147889092998 -0.292442640016 -0.147971606895 -0.301449689558 -0.148054282151 -0.31046474239 -0.147899836163 -0.319341724329 -0.147751577519 -0.328196544473 -0.147846844812 -0.33717627066 -0.14794237423 -0.346165994135 -0.148038160684 -0.355165428496 -0.147864541885 -0.363894230132 -0.147696839525 -0.372598256307 -0.147804767163 -0.381558884054 -0.147913067952 -0.390531278698 -0.148021741802 -0.399515178262 -0.157090171366 --0.399861310595 -0.156960884852 --0.390869480144 -0.156832040161 --0.381889140602 -0.156703643338 --0.372920563836 -0.156902517256 --0.364210753244 -0.157108441436 --0.355476137205 -0.156994519837 --0.346468695762 -0.156880905075 --0.3374709583 -0.156767599154 --0.328483220299 -0.156943377587 --0.319622094795 -0.157126528546 --0.31073878611 -0.157028212865 --0.301715656173 -0.156930086049 --0.292700515383 -0.156832149477 --0.28369372078 -0.156984433759 --0.274693966045 -0.157144372391 --0.265674676156 -0.157061875285 --0.25663616342 -0.156979458517 --0.247604007428 -0.156897131791 --0.238578601948 -0.157025611146 --0.229455309213 -0.157161977225 --0.220315196853 -0.157095472409 --0.211261953364 -0.157028963629 --0.202213525456 -0.156962457917 --0.193170331557 -0.157066886004 --0.183940497773 -0.157179397575 --0.174696626946 -0.157129031873 --0.165629664247 -0.157078602696 --0.156566060031 -0.157028106787 --0.147506244839 -0.157108196639 --0.138189127797 -0.157196528282 --0.128860815682 -0.157162428353 --0.119781478555 -0.157128215856 --0.110704088766 -0.157093887435 --0.101629095732 -0.157149503182 --0.0922452484018 -0.157213479993 --0.0828531090943 -0.157195739292 --0.0737630186006 -0.157177849225 --0.0646735106128 -0.157159816834 --0.0555850524271 -0.157190838138 --0.0461560870593 -0.157230294115 --0.0367217674091 -0.157228976235 --0.027622753572 -0.157227494253 --0.018522993938 -0.157225850468 --0.00942295775856 -0.157224988809 -0 -0.157225850468 -0.00942295775856 -0.157227494253 -0.018522993938 -0.157228976235 -0.027622753572 -0.157230294115 -0.0367217674091 -0.157190838138 -0.0461560870593 -0.157159816834 -0.0555850524271 -0.157177849225 -0.0646735106128 -0.157195739292 -0.0737630186006 -0.157213479993 -0.0828531090943 -0.157149503182 -0.0922452484018 -0.157093887435 -0.101629095732 -0.157128215856 -0.110704088766 -0.157162428353 -0.119781478555 -0.157196528282 -0.128860815682 -0.157108196639 -0.138189127797 -0.157028106787 -0.147506244839 -0.157078602696 -0.156566060031 -0.157129031873 -0.165629664247 -0.157179397575 -0.174696626946 -0.157066886004 -0.183940497773 -0.156962457917 -0.193170331557 -0.157028963629 -0.202213525456 -0.157095472409 -0.211261953364 -0.157161977225 -0.220315196853 -0.157025611146 -0.229455309213 -0.156897131791 -0.238578601948 -0.156979458517 -0.247604007428 -0.157061875285 -0.25663616342 -0.157144372391 -0.265674676156 -0.156984433759 -0.274693966045 -0.156832149477 -0.28369372078 -0.156930086049 -0.292700515383 -0.157028212865 -0.301715656173 -0.157126528546 -0.31073878611 -0.156943377587 -0.319622094795 -0.156767599154 -0.328483220299 -0.156880905075 -0.3374709583 -0.156994519837 -0.346468695762 -0.157108441436 -0.355476137205 -0.156902517256 -0.364210753244 -0.156703643338 -0.372920563836 -0.156832040161 -0.381889140602 -0.156960884852 -0.390869480144 -0.157090171366 -0.399861310595 -0.166163309336 --0.40020770746 -0.166013401131 --0.391207949743 -0.165864003486 --0.382219674363 -0.165715128616 --0.37324317409 -0.165945181307 --0.364527542217 -0.166183419369 --0.355787082926 -0.166051350978 --0.346771641064 -0.165919641918 --0.337765890371 -0.165788293073 --0.328770151464 -0.16599159513 --0.319902693298 -0.166203449188 --0.311013023521 -0.166089483029 --0.301981823942 -0.165975738911 --0.292958600829 -0.16586222241 --0.283943726364 -0.166038345709 --0.2749371556 -0.16622333301 --0.265911023028 -0.1661277029 --0.256864372876 -0.166032171795 --0.247824078816 -0.165936744737 --0.238790524387 -0.166085342904 --0.229659977294 -0.166243072633 --0.220512593128 -0.166165968602 --0.211451147776 -0.166088868634 --0.20239451607 -0.166011773299 --0.193343112805 -0.16613256929 --0.184105653442 -0.166262725869 --0.17485413661 -0.166204315216 --0.165778914449 -0.166145824814 --0.156707043069 -0.166087264332 --0.147638952681 -0.16617995925 --0.138313906048 -0.16628218463 --0.12897765 -0.16624260197 --0.119890003977 -0.16620288652 --0.110804299226 -0.166163030963 --0.10172098528 -0.166227453157 --0.0923289779151 -0.166301551047 --0.082928662512 -0.166280896504 --0.073830219489 -0.166260066163 --0.064732353353 -0.16623906417 --0.0556355322075 -0.166275091359 --0.0461982549913 -0.166320882689 --0.0367556163956 -0.166319216259 --0.0276482195234 -0.166317364487 --0.0185400719976 -0.166315333287 --0.0094316463763 -0.166314267836 -0 -0.166315333287 -0.0094316463763 -0.166317364487 -0.0185400719976 -0.166319216259 -0.0276482195234 -0.166320882689 -0.0367556163956 -0.166275091359 -0.0461982549913 -0.16623906417 -0.0556355322075 -0.166260066163 -0.064732353353 -0.166280896504 -0.073830219489 -0.166301551047 -0.082928662512 -0.166227453157 -0.0923289779151 -0.166163030963 -0.10172098528 -0.16620288652 -0.110804299226 -0.16624260197 -0.119890003977 -0.16628218463 -0.12897765 -0.16617995925 -0.138313906048 -0.166087264332 -0.147638952681 -0.166145824814 -0.156707043069 -0.166204315216 -0.165778914449 -0.166262725869 -0.17485413661 -0.16613256929 -0.184105653442 -0.166011773299 -0.193343112805 -0.166088868634 -0.20239451607 -0.166165968602 -0.211451147776 -0.166243072633 -0.220512593128 -0.166085342904 -0.229659977294 -0.165936744737 -0.238790524387 -0.166032171795 -0.247824078816 -0.1661277029 -0.256864372876 -0.16622333301 -0.265911023028 -0.166038345709 -0.2749371556 -0.16586222241 -0.283943726364 -0.165975738911 -0.292958600829 -0.166089483029 -0.301981823942 -0.166203449188 -0.311013023521 -0.16599159513 -0.319902693298 -0.165788293073 -0.328770151464 -0.165919641918 -0.337765890371 -0.166051350978 -0.346771641064 -0.166183419369 -0.355787082926 -0.165945181307 -0.364527542217 -0.165715128616 -0.37324317409 -0.165864003486 -0.382219674363 -0.166013401131 -0.391207949743 -0.166163309336 -0.40020770746 -0.175240732684 --0.40055438716 -0.17507019179 --0.391546694451 -0.174900243171 --0.382550500892 -0.174730881469 --0.373566071868 -0.174992110234 --0.364844592519 -0.175262662119 --0.356098261693 -0.175112442917 --0.347074833573 -0.174962637467 --0.338061088573 -0.174813237595 --0.329057349738 -0.17504406042 --0.320183529647 -0.175284615088 --0.311287458753 -0.175154997597 --0.302248198228 -0.175025637668 --0.293216915158 -0.174896532377 --0.284193963706 -0.17509648187 --0.275180540967 -0.175306519064 --0.266147536976 -0.175197759093 --0.257092758295 -0.175089106865 --0.248044328867 -0.17498058047 --0.239002639679 -0.17514929982 --0.229864819712 -0.175328389176 --0.22071013379 -0.175240682461 --0.211640484108 -0.175152992268 --0.202575656767 -0.175065304896 --0.193516058486 -0.175202463147 --0.184270932352 -0.175350261117 --0.175011735907 -0.175283804127 --0.165928268591 -0.175217256762 --0.15684813549 -0.175150623788 --0.14777178117 -0.175255923292 --0.138438776311 -0.175372052109 --0.129094541814 -0.175326971495 --0.119998589666 -0.175281745053 --0.11090457521 -0.175236372287 --0.101812952527 -0.175309603248 --0.0924127498898 -0.175393821881 --0.0830042261062 -0.175370249807 --0.0738974401623 -0.175346472345 --0.0647912239719 -0.175322502933 --0.0556860479417 -0.175363542903 --0.0462404256762 -0.175415658965 --0.0367894324019 -0.175413646912 --0.0276736601027 -0.175411432099 --0.0185571339248 -0.175409006049 --0.00944032634276 -0.175407737569 --2.16840434497e-19 -0.175409006049 -0.00944032634276 -0.175411432099 -0.0185571339248 -0.175413646912 -0.0276736601027 -0.175415658965 -0.0367894324019 -0.175363542903 -0.0462404256762 -0.175322502933 -0.0556860479417 -0.175346472345 -0.0647912239719 -0.175370249807 -0.0738974401623 -0.175393821881 -0.0830042261062 -0.175309603248 -0.0924127498898 -0.175236372287 -0.101812952527 -0.175281745053 -0.11090457521 -0.175326971495 -0.119998589666 -0.175372052109 -0.129094541814 -0.175255923292 -0.138438776311 -0.175150623788 -0.14777178117 -0.175217256762 -0.15684813549 -0.175283804127 -0.165928268591 -0.175350261117 -0.175011735907 -0.175202463147 -0.184270932352 -0.175065304896 -0.193516058486 -0.175152992268 -0.202575656767 -0.175240682461 -0.211640484108 -0.175328389176 -0.22071013379 -0.17514929982 -0.229864819712 -0.17498058047 -0.239002639679 -0.175089106865 -0.248044328867 -0.175197759093 -0.257092758295 -0.175306519064 -0.266147536976 -0.17509648187 -0.275180540967 -0.174896532377 -0.284193963706 -0.175025637668 -0.293216915158 -0.175154997597 -0.302248198228 -0.175284615088 -0.311287458753 -0.17504406042 -0.320183529647 -0.174813237595 -0.329057349738 -0.174962637467 -0.338061088573 -0.175112442917 -0.347074833573 -0.175262662119 -0.356098261693 -0.174992110234 -0.364844592519 -0.174730881469 -0.373566071868 -0.174900243171 -0.382550500892 -0.17507019179 -0.391546694451 -0.175240732684 -0.40055438716 -0.184536095083 --0.399791760233 -0.18438243249 --0.39080304667 -0.184229301156 --0.381825770986 -0.18407668424 --0.372860167999 -0.184312414879 --0.364149190855 -0.184556555681 --0.355413379335 -0.184421202468 --0.346408754758 -0.184286216235 --0.337413758579 -0.184151593234 --0.328428703154 -0.184359883854 --0.319567068605 -0.184576943899 --0.310683180505 -0.18446016209 --0.301662573015 -0.184343610141 --0.292649912316 -0.184227276272 --0.283645523972 -0.184407704205 --0.2746458293 -0.184597241586 --0.265626570356 -0.184499269809 --0.25659033096 -0.184401389821 --0.24756040742 -0.184303626608 --0.238537199784 -0.184455805558 --0.229414469402 -0.184617350671 --0.220274891097 -0.184538375633 --0.211223706949 -0.184459408813 --0.202177318673 -0.184380448158 --0.19313614139 -0.184504155454 --0.183907292043 -0.184637467527 --0.174664383101 -0.184577667752 --0.165599332999 -0.184517790403 --0.156537606445 -0.184457833221 --0.147479643297 -0.184552712161 --0.138163870005 -0.184657372746 --0.128836875895 -0.184616870586 --0.11975932269 -0.184576234396 --0.110683701134 -0.184535467653 --0.101610461124 -0.184601359408 --0.092228216202 -0.184677168169 --0.0828376658569 -0.184656083289 --0.073749289985 -0.184634819786 --0.064661485892 -0.184613383669 --0.0555747193085 -0.184650171111 --0.0461475222188 -0.1846969619 --0.0367149696546 -0.18469535584 --0.0276176393027 -0.184693559443 --0.0185195645832 -0.184691571597 --0.00942121338044 -0.184690531942 -0 -0.184691571597 -0.00942121338044 -0.184693559443 -0.0185195645832 -0.18469535584 -0.0276176393027 -0.1846969619 -0.0367149696546 -0.184650171111 -0.0461475222188 -0.184613383669 -0.0555747193085 -0.184634819786 -0.064661485892 -0.184656083289 -0.073749289985 -0.184677168169 -0.0828376658569 -0.184601359408 -0.092228216202 -0.184535467653 -0.101610461124 -0.184576234396 -0.110683701134 -0.184616870586 -0.11975932269 -0.184657372746 -0.128836875895 -0.184552712161 -0.138163870005 -0.184457833221 -0.147479643297 -0.184517790403 -0.156537606445 -0.184577667752 -0.165599332999 -0.184637467527 -0.174664383101 -0.184504155454 -0.183907292043 -0.184380448158 -0.19313614139 -0.184459408813 -0.202177318673 -0.184538375633 -0.211223706949 -0.184617350671 -0.220274891097 -0.184455805558 -0.229414469402 -0.184303626608 -0.238537199784 -0.184401389821 -0.24756040742 -0.184499269809 -0.25659033096 -0.184597241586 -0.265626570356 -0.184407704205 -0.2746458293 -0.184227276272 -0.283645523972 -0.184343610141 -0.292649912316 -0.18446016209 -0.301662573015 -0.184576943899 -0.310683180505 -0.184359883854 -0.319567068605 -0.184151593234 -0.328428703154 -0.184286216235 -0.337413758579 -0.184421202468 -0.346408754758 -0.184556555681 -0.355413379335 -0.184312414879 -0.364149190855 -0.18407668424 -0.372860167999 -0.184229301156 -0.381825770986 -0.18438243249 -0.39080304667 -0.184536095083 -0.399791760233 -0.193816669683 --0.399084150057 -0.193679970036 --0.390113163736 -0.193543750859 --0.381153545649 -0.193407984364 --0.372205530615 -0.193618092154 --0.363504165726 -0.19383569087 --0.354777958162 -0.193715277464 --0.345790850687 -0.193595187158 --0.33681332743 -0.193475423828 --0.327845681384 -0.193661067429 --0.31899523736 -0.19385451456 --0.310122550317 -0.193750635067 --0.301119310803 -0.193646955019 --0.29212396702 -0.19354346817 --0.283136860594 -0.193704289638 --0.274149843134 -0.193873220845 --0.265143254504 -0.193786095732 --0.256124256421 -0.193699050538 --0.247111546254 -0.193612101273 --0.238105509093 -0.193747656403 --0.22899673106 -0.193891566952 --0.219871107867 -0.193821370413 --0.210837080052 -0.193751175306 --0.201807822089 -0.193680987977 --0.192783745865 -0.193791181787 --0.183569977782 -0.193909937307 --0.17434215083 -0.193856833418 --0.165294198528 -0.193803654443 --0.156249551513 -0.193750400989 --0.147208651932 -0.193834807372 --0.137908852317 -0.193927945427 --0.128597840687 -0.193892054462 --0.119537364191 -0.193856034114 --0.110478812303 -0.19381989188 --0.10142262301 -0.193878398944 --0.0920570388636 -0.193945758688 --0.0826831656357 -0.193927183781 --0.0736118622871 -0.193908452826 --0.0645411342544 -0.193889561672 --0.0554714407577 -0.193922074895 --0.0460613506434 -0.193963525911 --0.0366459203568 -0.193962319758 --0.0275656911195 -0.193960935561 --0.0184847256548 -0.193959395881 --0.00940349007319 -0.193958586007 -2.16840434497e-19 -0.193959395881 -0.00940349007319 -0.193960935561 -0.0184847256548 -0.193962319758 -0.0275656911195 -0.193963525911 -0.0366459203568 -0.193922074895 -0.0460613506434 -0.193889561672 -0.0554714407577 -0.193908452826 -0.0645411342544 -0.193927183781 -0.0736118622871 -0.193945758688 -0.0826831656357 -0.193878398944 -0.0920570388636 -0.19381989188 -0.10142262301 -0.193856034114 -0.110478812303 -0.193892054462 -0.119537364191 -0.193927945427 -0.128597840687 -0.193834807372 -0.137908852317 -0.193750400989 -0.147208651932 -0.193803654443 -0.156249551513 -0.193856833418 -0.165294198528 -0.193909937307 -0.17434215083 -0.193791181787 -0.183569977782 -0.193680987977 -0.192783745865 -0.193751175306 -0.201807822089 -0.193821370413 -0.210837080052 -0.193891566952 -0.219871107867 -0.193747656403 -0.22899673106 -0.193612101273 -0.238105509093 -0.193699050538 -0.247111546254 -0.193786095732 -0.256124256421 -0.193873220845 -0.265143254504 -0.193704289638 -0.274149843134 -0.19354346817 -0.283136860594 -0.193646955019 -0.29212396702 -0.193750635067 -0.301119310803 -0.19385451456 -0.310122550317 -0.193661067429 -0.31899523736 -0.193475423828 -0.327845681384 -0.193595187158 -0.33681332743 -0.193715277464 -0.345790850687 -0.19383569087 -0.354777958162 -0.193618092154 -0.363504165726 -0.193407984364 -0.372205530615 -0.193543750859 -0.381153545649 -0.193679970036 -0.390113163736 -0.193816669683 -0.399084150057 -0.202869849478 --0.399541376814 -0.202712696236 --0.390559947777 -0.202556090028 --0.381589886262 -0.202400010611 --0.372631439127 -0.202641047395 --0.363922402073 -0.202890702501 --0.355188478546 -0.202752291936 --0.3461908379 -0.202614256673 --0.337202764084 -0.202476594184 --0.328224573762 -0.202689532236 --0.319365760649 -0.202911449756 --0.310484665841 -0.202792054323 --0.301470798791 -0.202672891877 --0.292464819335 -0.202553951438 --0.283467077735 -0.202738412805 --0.274471036891 -0.202932189177 --0.265455388782 -0.202832046461 --0.256425676115 -0.202731996348 --0.247402231082 -0.202632051945 --0.238385446136 -0.202787567151 --0.229267075752 -0.202952668451 --0.220131822758 -0.202871962478 --0.211086992288 -0.202791262101 --0.202046922709 -0.202710563058 --0.193012011593 -0.202836993681 --0.183788138023 -0.202973247156 --0.174550180993 -0.202912160297 --0.165491340874 -0.202850991874 --0.156435800269 -0.202789731884 --0.147383991006 -0.202886638407 --0.138073680215 -0.202993566323 --0.128752143435 -0.202952227409 --0.119680710324 -0.202910744758 --0.110611190482 -0.202869125949 --0.101544030597 -0.202936374374 --0.0921676246675 -0.203013782019 --0.0827829122403 -0.202992306606 --0.073700596384 -0.202970653262 --0.0646188490147 -0.202948824242 --0.055538130142 -0.202986309406 --0.0461170163846 -0.203034043512 --0.0366905511087 -0.203032493904 --0.027599268893 -0.203030743714 --0.0185072445957 -0.203028809091 --0.00941494645388 -0.203027790372 -0 -0.203028809091 -0.00941494645388 -0.203030743714 -0.0185072445957 -0.203032493904 -0.027599268893 -0.203034043512 -0.0366905511087 -0.202986309406 -0.0461170163846 -0.202948824242 -0.055538130142 -0.202970653262 -0.0646188490147 -0.202992306606 -0.073700596384 -0.203013782019 -0.0827829122403 -0.202936374374 -0.0921676246675 -0.202869125949 -0.101544030597 -0.202910744758 -0.110611190482 -0.202952227409 -0.119680710324 -0.202993566323 -0.128752143435 -0.202886638407 -0.138073680215 -0.202789731884 -0.147383991006 -0.202850991874 -0.156435800269 -0.202912160297 -0.165491340874 -0.202973247156 -0.174550180993 -0.202836993681 -0.183788138023 -0.202710563058 -0.193012011593 -0.202791262101 -0.202046922709 -0.202871962478 -0.211086992288 -0.202952668451 -0.220131822758 -0.202787567151 -0.229267075752 -0.202632051945 -0.238385446136 -0.202731996348 -0.247402231082 -0.202832046461 -0.256425676115 -0.202932189177 -0.265455388782 -0.202738412805 -0.274471036891 -0.202553951438 -0.283467077735 -0.202672891877 -0.292464819335 -0.202792054323 -0.301470798791 -0.202911449756 -0.310484665841 -0.202689532236 -0.319365760649 -0.202476594184 -0.328224573762 -0.202614256673 -0.337202764084 -0.202752291936 -0.3461908379 -0.202890702501 -0.355188478546 -0.202641047395 -0.363922402073 -0.202400010611 -0.372631439127 -0.202556090028 -0.381589886262 -0.202712696236 -0.390559947777 -0.202869849478 -0.399541376814 -0.211929408244 --0.399999319146 -0.211751793079 --0.39100744775 -0.211574780327 --0.382026933176 -0.21139836404 --0.373058041213 -0.21167034609 --0.364341306795 -0.211952070531 --0.355599650025 -0.211795652689 --0.346591475106 -0.211639660596 --0.337592847107 -0.211484083012 --0.32860411117 -0.211724326634 --0.319736889812 -0.211974732804 --0.310847347977 -0.21183981023 --0.301822857459 -0.211705145467 --0.292806240557 -0.211570739127 --0.28379784984 -0.211778851458 --0.274792743143 -0.211997480275 --0.265767993907 -0.211884303243 --0.256727559079 -0.211771239254 --0.247693388863 -0.211658295184 --0.238665871547 -0.211833774344 --0.229537859639 -0.21202007853 --0.22039293282 -0.211928863532 --0.211337296931 -0.211837644478 --0.202286407591 -0.211746422996 --0.193240662038 -0.21188910613 --0.184006642681 -0.212042871266 --0.174758515221 -0.211973788066 --0.165688783762 -0.211904618555 --0.156622346806 -0.21183536442 --0.147559632178 -0.211944782363 --0.138238765243 -0.212065490439 --0.128906651972 -0.212018699959 --0.119824259214 -0.211971749216 --0.110743768751 -0.211924654823 --0.10166564037 -0.212000658816 --0.0922783718241 -0.212088108523 --0.0828827715483 -0.212063735827 --0.073789441513 -0.212039157795 --0.0646966714358 -0.21201437672 --0.055604924832 -0.212056834501 --0.0461727422766 -0.212110842781 --0.0367351943393 -0.212108951366 --0.0276328569974 -0.212106845778 --0.0185297711111 -0.21210451682 --0.00942640638465 -0.212103292735 -0 -0.21210451682 -0.00942640638465 -0.212106845778 -0.0185297711111 -0.212108951366 -0.0276328569974 -0.212110842781 -0.0367351943393 -0.212056834501 -0.0461727422766 -0.21201437672 -0.055604924832 -0.212039157795 -0.0646966714358 -0.212063735827 -0.073789441513 -0.212088108523 -0.0828827715483 -0.212000658816 -0.0922783718241 -0.211924654823 -0.10166564037 -0.211971749216 -0.110743768751 -0.212018699959 -0.119824259214 -0.212065490439 -0.128906651972 -0.211944782363 -0.138238765243 -0.21183536442 -0.147559632178 -0.211904618555 -0.156622346806 -0.211973788066 -0.165688783762 -0.212042871266 -0.174758515221 -0.21188910613 -0.184006642681 -0.211746422996 -0.193240662038 -0.211837644478 -0.202286407591 -0.211928863532 -0.211337296931 -0.21202007853 -0.22039293282 -0.211833774344 -0.229537859639 -0.211658295184 -0.238665871547 -0.211771239254 -0.247693388863 -0.211884303243 -0.256727559079 -0.211997480275 -0.265767993907 -0.211778851458 -0.274792743143 -0.211570739127 -0.28379784984 -0.211705145467 -0.292806240557 -0.21183981023 -0.301822857459 -0.211974732804 -0.310847347977 -0.211724326634 -0.319736889812 -0.211484083012 -0.32860411117 -0.211639660596 -0.337592847107 -0.211795652689 -0.346591475106 -0.211952070531 -0.355599650025 -0.21167034609 -0.364341306795 -0.21139836404 -0.373058041213 -0.211574780327 -0.382026933176 -0.211751793079 -0.39100744775 -0.211929408244 -0.399999319146 -0.220994941014 --0.400457983381 -0.220796836909 --0.391455670622 -0.220599417687 --0.382464710489 -0.220402670336 --0.373485369837 -0.220705604405 --0.364760912175 -0.221019400392 --0.356011476985 -0.220844961006 --0.34699275816 -0.220670996657 --0.337983585591 -0.220497494956 --0.32898430237 -0.220765061248 --0.32010864618 -0.221043957073 --0.311210616228 -0.220893494423 --0.302175487323 -0.22074332497 --0.293148232322 -0.220593438842 --0.284129195963 -0.220825206628 --0.275114992477 -0.221068699281 --0.266081105443 -0.220942476341 --0.257029940099 -0.220816391706 --0.247985036323 -0.220690446453 --0.238946784032 -0.220885894279 --0.229809097373 -0.221093401456 --0.220654458361 -0.22099166152 --0.211588003408 -0.220889918757 --0.202526285822 -0.220788180227 --0.193469716226 -0.220947119109 --0.184225513209 -0.221118405658 --0.174967171159 -0.221041332835 --0.165886546205 -0.220964158444 --0.156809203509 -0.220886889677 --0.147735582409 -0.221008816149 --0.13840411933 -0.221143314275 --0.129061381095 -0.221091069823 --0.119968022118 -0.221038658411 --0.110876563039 -0.220986086113 --0.10178745969 -0.221070837132 --0.0923892806869 -0.221168330313 --0.0829827519957 -0.221141064697 --0.0738784041023 -0.221113566533 --0.0647746071628 -0.221085836768 --0.0556718287884 -0.221133262967 --0.0462285315435 -0.221193547048 --0.0367798557533 -0.221191309234 --0.0276664571392 -0.221188838454 --0.0185523046805 -0.221186125082 --0.0094378701392 -0.221184705469 -2.16840434497e-19 -0.221186125082 -0.0094378701392 -0.221188838454 -0.0185523046805 -0.221191309234 -0.0276664571392 -0.221193547048 -0.0367798557533 -0.221133262967 -0.0462285315435 -0.221085836768 -0.0556718287884 -0.221113566533 -0.0647746071628 -0.221141064697 -0.0738784041023 -0.221168330313 -0.0829827519957 -0.221070837132 -0.0923892806869 -0.220986086113 -0.10178745969 -0.221038658411 -0.110876563039 -0.221091069823 -0.119968022118 -0.221143314275 -0.129061381095 -0.221008816149 -0.13840411933 -0.220886889677 -0.147735582409 -0.220964158444 -0.156809203509 -0.221041332835 -0.165886546205 -0.221118405658 -0.174967171159 -0.220947119109 -0.184225513209 -0.220788180227 -0.193469716226 -0.220889918757 -0.202526285822 -0.22099166152 -0.211588003408 -0.221093401456 -0.220654458361 -0.220885894279 -0.229809097373 -0.220690446453 -0.238946784032 -0.220816391706 -0.247985036323 -0.220942476341 -0.257029940099 -0.221068699281 -0.266081105443 -0.220825206628 -0.275114992477 -0.220593438842 -0.284129195963 -0.22074332497 -0.293148232322 -0.220893494423 -0.302175487323 -0.221043957073 -0.311210616228 -0.220765061248 -0.32010864618 -0.220497494956 -0.32898430237 -0.220670996657 -0.337983585591 -0.220844961006 -0.34699275816 -0.221019400392 -0.356011476985 -0.220705604405 -0.364760912175 -0.220402670336 -0.373485369837 -0.220599417687 -0.382464710489 -0.220796836909 -0.391455670622 -0.220994941014 -0.400457983381 -0.229651167689 --0.372628618266 -0.229927860609 --0.363916788693 -0.230214468241 --0.355179988105 -0.230055333409 --0.346184117298 -0.2298966246 --0.337197725325 -0.229738346453 --0.328221156938 -0.229982731598 --0.319360229871 -0.230237451662 --0.310476932009 -0.230100199264 --0.30146445936 -0.22996322397 --0.292459811701 -0.229826493489 --0.283463316686 -0.230038115602 --0.274465747101 -0.23026046152 --0.2654485128 -0.230145343804 --0.256419856395 -0.230030355863 --0.247397424641 -0.229915487123 --0.238381597951 -0.230093957864 --0.229262238546 -0.230283455294 --0.220125947072 -0.230190695811 --0.211081897015 -0.230097941071 --0.202042560598 -0.230005198313 --0.193008350415 -0.230150239999 --0.183783935068 -0.230306567083 --0.174545389225 -0.230236349911 --0.165487105809 -0.230166042246 --0.156432092014 -0.230095645653 --0.147380778756 -0.230206862782 --0.138070291722 -0.230329579231 --0.128748540587 -0.230282053326 --0.119677497547 -0.230234371529 --0.110608351528 -0.230186529656 --0.101541539237 -0.230263735966 --0.0921652269094 -0.230352597881 --0.0827805859827 -0.230327886942 --0.073698558281 -0.23030296403 --0.0646170846254 -0.230277841296 --0.0555366273984 -0.230320897489 --0.046115781938 -0.230375702657 --0.0366895767916 -0.230373864722 --0.027598537392 -0.230371805377 --0.0185067546307 -0.230369547691 --0.00941469741526 -0.230368369429 --2.16840434497e-19 -0.230369547691 -0.00941469741526 -0.230371805377 -0.0185067546307 -0.230373864722 -0.027598537392 -0.230375702657 -0.0366895767916 -0.230320897489 -0.046115781938 -0.230277841296 -0.0555366273984 -0.23030296403 -0.0646170846254 -0.230327886942 -0.073698558281 -0.230352597881 -0.0827805859827 -0.230263735966 -0.0921652269094 -0.230186529656 -0.101541539237 -0.230234371529 -0.110608351528 -0.230282053326 -0.119677497547 -0.230329579231 -0.128748540587 -0.230206862782 -0.138070291722 -0.230095645653 -0.147380778756 -0.230166042246 -0.156432092014 -0.230236349911 -0.165487105809 -0.230306567083 -0.174545389225 -0.230150239999 -0.183783935068 -0.230005198313 -0.193008350415 -0.230097941071 -0.202042560598 -0.230190695811 -0.211081897015 -0.230283455294 -0.220125947072 -0.230093957864 -0.229262238546 -0.229915487123 -0.238381597951 -0.230030355863 -0.247397424641 -0.230145343804 -0.256419856395 -0.23026046152 -0.2654485128 -0.230038115602 -0.274465747101 -0.229826493489 -0.283463316686 -0.22996322397 -0.292459811701 -0.230100199264 -0.30146445936 -0.230237451662 -0.310476932009 -0.229982731598 -0.319360229871 -0.229738346453 -0.328221156938 -0.2298966246 -0.337197725325 -0.230055333409 -0.346184117298 -0.230214468241 -0.355179988105 -0.229927860609 -0.363916788693 -0.229651167689 -0.372628618266 -0.238882287023 --0.371822026727 -0.239132569721 --0.363121940147 -0.23939182484 --0.354396880892 -0.239248099843 --0.345422616533 -0.239104751569 --0.336457773771 -0.238961790726 --0.32750266724 -0.239182858065 --0.318655488508 -0.239413269513 --0.309785951408 -0.239289307422 --0.300794878531 -0.239165589885 --0.291811572629 -0.239042111586 --0.282836367078 -0.239233481465 --0.273854392205 -0.239434545483 --0.264852747826 -0.239330604819 --0.255845331518 -0.239226779567 --0.246844107646 -0.239123059229 --0.237849435776 -0.239284449974 --0.228747282459 -0.239455822079 --0.219628201687 -0.239372118069 --0.210605281392 -0.239288415559 --0.201587050865 -0.239204704207 --0.192573903105 -0.239335771486 --0.183368096643 -0.239477060543 --0.174148168886 -0.23941373178 --0.165110938684 -0.239350318113 --0.156076955185 -0.239286849167 --0.147046658371 -0.239387300514 --0.13775591985 -0.239498154068 --0.128453921435 -0.239455375927 --0.119403898574 -0.239412448761 --0.110355763173 -0.239369373251 --0.101309945732 -0.23943898742 --0.0919542342762 -0.239519163653 --0.0825902078698 -0.239497028518 --0.0735291935104 -0.239474696873 --0.0644687369172 -0.239452191847 --0.0554092970245 -0.239490851569 --0.0460096154687 -0.239540143606 --0.0366045886723 -0.239538712155 --0.0275345987278 -0.239537082624 --0.0184638753228 -0.239535266169 --0.009392883356 -0.239534308316 --2.16840434497e-19 -0.239535266169 -0.009392883356 -0.239537082624 -0.0184638753228 -0.239538712155 -0.0275345987278 -0.239540143606 -0.0366045886723 -0.239490851569 -0.0460096154687 -0.239452191847 -0.0554092970245 -0.239474696873 -0.0644687369172 -0.239497028518 -0.0735291935104 -0.239519163653 -0.0825902078698 -0.23943898742 -0.0919542342762 -0.239369373251 -0.101309945732 -0.239412448761 -0.110355763173 -0.239455375927 -0.119403898574 -0.239498154068 -0.128453921435 -0.239387300514 -0.13775591985 -0.239286849167 -0.147046658371 -0.239350318113 -0.156076955185 -0.23941373178 -0.165110938684 -0.239477060543 -0.174148168886 -0.239335771486 -0.183368096643 -0.239204704207 -0.192573903105 -0.239288415559 -0.201587050865 -0.239372118069 -0.210605281392 -0.239455822079 -0.219628201687 -0.239284449974 -0.228747282459 -0.239123059229 -0.237849435776 -0.239226779567 -0.246844107646 -0.239330604819 -0.255845331518 -0.239434545483 -0.264852747826 -0.239233481465 -0.273854392205 -0.239042111586 -0.282836367078 -0.239165589885 -0.291811572629 -0.239289307422 -0.300794878531 -0.239413269513 -0.309785951408 -0.239182858065 -0.318655488508 -0.238961790726 -0.32750266724 -0.239104751569 -0.336457773771 -0.239248099843 -0.345422616533 -0.23939182484 -0.354396880892 -0.239132569721 -0.363121940147 -0.238882287023 -0.371822026727 -0.247858830684 --0.372350682429 -0.248139748072 --0.36364105674 -0.248430763083 --0.354906400577 -0.248269207727 --0.345919098863 -0.248108077683 --0.336941221707 -0.247947377225 --0.327973061263 -0.248195494053 --0.319115453985 -0.248454115439 --0.310235439298 -0.248314778814 --0.30123120773 -0.248175705427 --0.292234737742 -0.248036906388 --0.283246360049 -0.248251707179 --0.274253144337 -0.248477387284 --0.26524021369 -0.248360551802 --0.256219532139 -0.24824383448 --0.247205014174 -0.248127241492 --0.238197039265 -0.248308409796 --0.229082930015 -0.248500769484 --0.21995184157 -0.248406648761 --0.210915533416 -0.248312530916 --0.201883909558 -0.248218405357 --0.192857355537 -0.248365559114 --0.183638953896 -0.248524193066 --0.174406395508 -0.248452968328 --0.16535568232 -0.248381632033 --0.156308202787 -0.248310225241 --0.147264398477 -0.248423066874 --0.137960555697 -0.248547572599 --0.128645426521 -0.248499390129 --0.119581829515 -0.248451058799 --0.110520106659 -0.248402562051 --0.101460702741 -0.248480838287 --0.092091500013 -0.248570959733 --0.0827139545225 -0.248545949998 --0.0736392980185 -0.248520733324 --0.0645651926218 -0.2484953156 --0.055492096413 -0.248538892737 --0.0460786675632 -0.248594401221 --0.03665987857 -0.248592631649 --0.0275761953393 -0.248590651279 --0.0184917720928 -0.248588437081 --0.0094070755878 -0.248587262899 -0 -0.248588437081 -0.0094070755878 -0.248590651279 -0.0184917720928 -0.248592631649 -0.0275761953393 -0.248594401221 -0.03665987857 -0.248538892737 -0.0460786675632 -0.2484953156 -0.055492096413 -0.248520733324 -0.0645651926218 -0.248545949998 -0.0736392980185 -0.248570959733 -0.0827139545225 -0.248480838287 -0.092091500013 -0.248402562051 -0.101460702741 -0.248451058799 -0.110520106659 -0.248499390129 -0.119581829515 -0.248547572599 -0.128645426521 -0.248423066874 -0.137960555697 -0.248310225241 -0.147264398477 -0.248381632033 -0.156308202787 -0.248452968328 -0.16535568232 -0.248524193066 -0.174406395508 -0.248365559114 -0.183638953896 -0.248218405357 -0.192857355537 -0.248312530916 -0.201883909558 -0.248406648761 -0.210915533416 -0.248500769484 -0.21995184157 -0.248308409796 -0.229082930015 -0.248127241492 -0.238197039265 -0.24824383448 -0.247205014174 -0.248360551802 -0.256219532139 -0.248477387284 -0.26524021369 -0.248251707179 -0.274253144337 -0.248036906388 -0.283246360049 -0.248175705427 -0.292234737742 -0.248314778814 -0.30123120773 -0.248454115439 -0.310235439298 -0.248195494053 -0.319115453985 -0.247947377225 -0.327973061263 -0.248108077683 -0.336941221707 -0.248269207727 -0.345919098863 -0.248430763083 -0.354906400577 -0.248139748072 -0.36364105674 -0.247858830684 -0.372350682429 -0.256843421781 --0.372880595957 -0.257155007289 --0.36416138265 -0.257477805431 --0.355417091688 -0.257298396159 --0.3464167442 -0.257119466541 --0.33742581245 -0.256941014122 --0.328444591038 -0.257216182568 --0.319576498446 -0.257503022997 --0.310685962434 -0.257348301974 --0.301668563295 -0.257193874445 --0.292658909373 -0.257039745308 --0.28365734543 -0.257277976479 --0.274652829833 -0.257528290573 --0.26562856627 -0.257398547393 --0.256594604071 -0.257268924679 --0.247566782164 -0.257139440741 --0.238545505432 -0.25734040131 --0.229419379175 -0.257553781186 --0.220276227174 -0.25744922762 --0.21122651492 -0.25734467829 --0.202181475109 -0.257240133263 --0.193141501148 -0.257403391127 --0.183910453894 -0.257579371662 --0.174665210721 -0.257500231225 --0.165600993337 -0.257420975799 --0.156540005282 -0.257341617204 --0.147482669911 -0.25746685232 --0.138165657456 -0.257605031929 --0.128837342054 -0.257551451243 --0.119760156431 -0.257497704831 --0.1106848343 -0.257443770025 --0.101611825279 -0.25753072048 --0.0922290734265 -0.2576308004 --0.0828379535489 -0.257602913149 --0.0737496354662 -0.257574802903 --0.0646618612348 -0.257546463706 --0.0555750888329 -0.257594968005 --0.0461478534607 -0.257656703538 --0.0367152422213 -0.257654595294 --0.0276178472825 -0.257652246569 --0.0185197058216 -0.257649639957 --0.00942128641518 -0.257648272323 -0 -0.257649639957 -0.00942128641518 -0.257652246569 -0.0185197058216 -0.257654595294 -0.0276178472825 -0.257656703538 -0.0367152422213 -0.257594968005 -0.0461478534607 -0.257546463706 -0.0555750888329 -0.257574802903 -0.0646618612348 -0.257602913149 -0.0737496354662 -0.2576308004 -0.0828379535489 -0.25753072048 -0.0922290734265 -0.257443770025 -0.101611825279 -0.257497704831 -0.1106848343 -0.257551451243 -0.119760156431 -0.257605031929 -0.128837342054 -0.25746685232 -0.138165657456 -0.257341617204 -0.147482669911 -0.257420975799 -0.156540005282 -0.257500231225 -0.165600993337 -0.257579371662 -0.174665210721 -0.257403391127 -0.183910453894 -0.257240133263 -0.193141501148 -0.25734467829 -0.202181475109 -0.25744922762 -0.21122651492 -0.257553781186 -0.220276227174 -0.25734040131 -0.229419379175 -0.257139440741 -0.238545505432 -0.257268924679 -0.247566782164 -0.257398547393 -0.256594604071 -0.257528290573 -0.26562856627 -0.257277976479 -0.274652829833 -0.257039745308 -0.28365734543 -0.257193874445 -0.292658909373 -0.257348301974 -0.301668563295 -0.257503022997 -0.310685962434 -0.257216182568 -0.319576498446 -0.256941014122 -0.328444591038 -0.257119466541 -0.33742581245 -0.257298396159 -0.3464167442 -0.257477805431 -0.355417091688 -0.257155007289 -0.36416138265 -0.256843421781 -0.372880595957 -0.265835698426 --0.373411774802 -0.266177956481 --0.364682933089 -0.26653254893 --0.355928961386 -0.266335276732 --0.346915553692 -0.266138532803 --0.337911547528 -0.265942307909 --0.328917250362 -0.266244553571 --0.320038643355 -0.266559633489 --0.311137530782 -0.266389510055 --0.302106948793 -0.26621972196 --0.293084102499 -0.26605025587 --0.284069337336 -0.266311930036 --0.275053487281 -0.266586890731 --0.266017831502 -0.266444217657 --0.256970560325 -0.266301685546 --0.247929429822 -0.266159305883 --0.238894834789 -0.266380051245 --0.229756630092 -0.266614456726 --0.22060136464 -0.266499479508 --0.211538241337 -0.266384501534 --0.202479767561 -0.266269522967 --0.19342635438 -0.266448887389 --0.184182603364 -0.26664222367 --0.174924621342 -0.266555149775 --0.165846884457 -0.266467968736 --0.156772363419 -0.266380669848 --0.147701492821 -0.266518299074 --0.138371257307 -0.266670159756 --0.129029686623 -0.266611182675 --0.119938897097 -0.266552005148 --0.110849957544 -0.266492621864 --0.101763320972 -0.266588251646 --0.0923669585861 -0.266698301529 --0.0829622057646 -0.266667540043 --0.0738602090719 -0.266636528383 --0.0647587474214 -0.266605265536 --0.0556582813833 -0.266658699579 --0.0462171781477 -0.266726671979 --0.0367706828153 -0.266724225018 --0.0276595573363 -0.266721501469 --0.0185476783533 -0.266718507691 --0.00943551714935 -0.266716946307 -2.16840434497e-19 -0.266718507691 -0.00943551714935 -0.266721501469 -0.0185476783533 -0.266724225018 -0.0276595573363 -0.266726671979 -0.0367706828153 -0.266658699579 -0.0462171781477 -0.266605265536 -0.0556582813833 -0.266636528383 -0.0647587474214 -0.266667540043 -0.0738602090719 -0.266698301529 -0.0829622057646 -0.266588251646 -0.0923669585861 -0.266492621864 -0.101763320972 -0.266552005148 -0.110849957544 -0.266611182675 -0.119938897097 -0.266670159756 -0.129029686623 -0.266518299074 -0.138371257307 -0.266380669848 -0.147701492821 -0.266467968736 -0.156772363419 -0.266555149775 -0.165846884457 -0.26664222367 -0.174924621342 -0.266448887389 -0.184182603364 -0.266269522967 -0.19342635438 -0.266384501534 -0.202479767561 -0.266499479508 -0.211538241337 -0.266614456726 -0.22060136464 -0.266380051245 -0.229756630092 -0.266159305883 -0.238894834789 -0.266301685546 -0.247929429822 -0.266444217657 -0.256970560325 -0.266586890731 -0.266017831502 -0.266311930036 -0.275053487281 -0.26605025587 -0.284069337336 -0.26621972196 -0.293084102499 -0.266389510055 -0.302106948793 -0.266559633489 -0.311137530782 -0.266244553571 -0.320038643355 -0.265942307909 -0.328917250362 -0.266138532803 -0.337911547528 -0.266335276732 -0.346915553692 -0.26653254893 -0.355928961386 -0.266177956481 -0.364682933089 -0.265835698426 -0.373411774802 -0.275069696207 --0.32802076568 -0.275347961655 --0.319159413297 -0.27563805029 --0.310275554138 -0.275481596181 --0.301271611763 -0.27532544883 --0.292275331642 -0.275169582419 --0.283287047536 -0.275410476556 --0.27429072797 -0.275663610449 --0.265274603837 -0.275532422884 --0.256253778465 -0.27540136729 --0.24723904213 -0.275270436511 --0.238230778675 -0.275473603745 --0.229114122226 -0.275689364234 --0.219980426346 -0.275583680425 --0.210943619606 -0.275477992612 --0.201911421839 -0.275372300884 --0.192884249624 -0.275537310898 --0.183663770114 -0.27571520061 --0.174429080312 -0.275635211471 --0.165377578693 -0.275555126561 --0.156329268619 -0.275474929424 --0.147284586451 -0.2756014848 --0.1379790344 -0.275741156471 --0.1286621608 -0.275687035827 --0.119597566138 -0.275632733326 --0.110534813151 -0.275578248208 --0.101474346538 -0.275666089959 --0.0921037267273 -0.275767223797 --0.0827247425563 -0.275739104616 --0.0736489508499 -0.275710744018 --0.064573688736 -0.275682160731 --0.0554994190123 -0.275731100507 --0.0460847562483 -0.275793436609 --0.0366647230362 -0.275791397737 --0.0275798412575 -0.275789106002 --0.0184942186436 -0.275786566269 --0.00940832041669 -0.27578523136 -0 -0.275786566269 -0.00940832041669 -0.275789106002 -0.0184942186436 -0.275791397737 -0.0275798412575 -0.275793436609 -0.0366647230362 -0.275731100507 -0.0460847562483 -0.275682160731 -0.0554994190123 -0.275710744018 -0.064573688736 -0.275739104616 -0.0736489508499 -0.275767223797 -0.0827247425563 -0.275666089959 -0.0921037267273 -0.275578248208 -0.101474346538 -0.275632733326 -0.110534813151 -0.275687035827 -0.119597566138 -0.275741156471 -0.1286621608 -0.2756014848 -0.1379790344 -0.275474929424 -0.147284586451 -0.275555126561 -0.156329268619 -0.275635211471 -0.165377578693 -0.27571520061 -0.174429080312 -0.275537310898 -0.183663770114 -0.275372300884 -0.192884249624 -0.275477992612 -0.201911421839 -0.275583680425 -0.210943619606 -0.275689364234 -0.219980426346 -0.275473603745 -0.229114122226 -0.275270436511 -0.238230778675 -0.27540136729 -0.24723904213 -0.275532422884 -0.256253778465 -0.275663610449 -0.265274603837 -0.275410476556 -0.27429072797 -0.275169582419 -0.283287047536 -0.27532544883 -0.292275331642 -0.275481596181 -0.301271611763 -0.27563805029 -0.310275554138 -0.275347961655 -0.319159413297 -0.275069696207 -0.32802076568 -0.284176859091 --0.327167778104 -0.28443097868 --0.318322716535 -0.284695904457 --0.309455167689 -0.284553221241 --0.300476629955 -0.284410797702 --0.29150568456 -0.28426862633 --0.282542669054 -0.284488611393 --0.273564850113 -0.284719764582 --0.264567223434 -0.28460013555 --0.25557159808 -0.284480635905 --0.246582025975 -0.284361246234 --0.237598874944 -0.284546729397 --0.228502671046 -0.284743712645 --0.219389428457 -0.284647379993 --0.210377692649 -0.284551051944 --0.201370535053 -0.284454715117 --0.192368351861 -0.284605283363 --0.18316999699 -0.284767618683 --0.173957439498 -0.284694761086 --0.164930917307 -0.284621819624 --0.155907562849 -0.284548769609 --0.146887801775 -0.284664176057 --0.137605736971 -0.284791570058 --0.128312364824 -0.284742341517 --0.119272701278 -0.284692961016 --0.110234870222 -0.284643409613 --0.101199308241 -0.284723413626 --0.0918532043858 -0.284815572242 --0.0824987536413 -0.284790101687 --0.0734478900564 -0.284764410932 --0.0643975562849 -0.284738525489 --0.0553482114243 -0.28478293923 --0.0459587369183 -0.284839594095 --0.0365639119206 -0.284837971153 --0.0275039987135 -0.284836118021 --0.0184433563703 -0.284834022761 --0.00938244496082 -0.284832910131 -2.16840434497e-19 -0.284834022761 -0.00938244496082 -0.284836118021 -0.0184433563703 -0.284837971153 -0.0275039987135 -0.284839594095 -0.0365639119206 -0.28478293923 -0.0459587369183 -0.284738525489 -0.0553482114243 -0.284764410932 -0.0643975562849 -0.284790101687 -0.0734478900564 -0.284815572242 -0.0824987536413 -0.284723413626 -0.0918532043858 -0.284643409613 -0.101199308241 -0.284692961016 -0.110234870222 -0.284742341517 -0.119272701278 -0.284791570058 -0.128312364824 -0.284664176057 -0.137605736971 -0.284548769609 -0.146887801775 -0.284621819624 -0.155907562849 -0.284694761086 -0.164930917307 -0.284767618683 -0.173957439498 -0.284605283363 -0.18316999699 -0.284454715117 -0.192368351861 -0.284551051944 -0.201370535053 -0.284647379993 -0.210377692649 -0.284743712645 -0.219389428457 -0.284546729397 -0.228502671046 -0.284361246234 -0.237598874944 -0.284480635905 -0.246582025975 -0.28460013555 -0.25557159808 -0.284719764582 -0.264567223434 -0.284488611393 -0.273564850113 -0.28426862633 -0.282542669054 -0.284410797702 -0.29150568456 -0.284553221241 -0.300476629955 -0.284695904457 -0.309455167689 -0.28443097868 -0.318322716535 -0.284176859091 -0.327167778104 -0.29314643865 --0.327728855145 -0.293427325558 --0.318871312022 -0.293720169091 --0.309991229175 -0.293562264739 --0.300997033758 -0.293404642568 --0.292010411142 -0.293247313591 --0.283031715637 -0.293490483838 --0.274040456003 -0.293746000929 --0.265029333695 -0.293613598777 --0.256017906715 -0.293481340678 --0.247012524896 -0.293349211326 --0.238013547422 -0.293554259896 --0.228903017001 -0.293772017929 --0.219775404749 -0.293665376869 --0.210747742834 -0.293558740235 --0.201724640336 -0.293452095477 --0.192706489384 -0.293618591561 --0.183493068299 -0.293798088144 --0.17426540047 -0.293717404946 --0.165222823118 -0.293636628613 --0.156183402794 -0.293555727237 --0.14714755589 -0.2936833818 --0.137849811617 -0.29382429695 --0.128540731022 -0.293769736876 --0.119484906426 -0.29371499581 --0.110430896087 -0.293660067826 --0.10137914843 -0.293748646038 --0.0920169045105 -0.293850646981 --0.0826462825828 -0.293822336078 --0.0735791704675 -0.293793790503 --0.0645125811023 -0.293765009486 --0.0554469706399 -0.293814287108 --0.0460410494009 -0.293877098597 --0.0366297619252 -0.293875140272 --0.0275535403926 -0.293872927117 --0.018476580657 -0.293870448761 --0.00939934751652 -0.293869139014 -2.16840434497e-19 -0.293870448761 -0.00939934751652 -0.293872927117 -0.018476580657 -0.293875140272 -0.0275535403926 -0.293877098597 -0.0366297619252 -0.293814287108 -0.0460410494009 -0.293765009486 -0.0554469706399 -0.293793790503 -0.0645125811023 -0.293822336078 -0.0735791704675 -0.293850646981 -0.0826462825828 -0.293748646038 -0.0920169045105 -0.293660067826 -0.10137914843 -0.29371499581 -0.110430896087 -0.293769736876 -0.119484906426 -0.29382429695 -0.128540731022 -0.2936833818 -0.137849811617 -0.293555727237 -0.14714755589 -0.293636628613 -0.156183402794 -0.293717404946 -0.165222823118 -0.293798088144 -0.17426540047 -0.293618591561 -0.183493068299 -0.293452095477 -0.192706489384 -0.293558740235 -0.201724640336 -0.293665376869 -0.210747742834 -0.293772017929 -0.219775404749 -0.293554259896 -0.228903017001 -0.293349211326 -0.238013547422 -0.293481340678 -0.247012524896 -0.293613598777 -0.256017906715 -0.293746000929 -0.265029333695 -0.293490483838 -0.274040456003 -0.293247313591 -0.283031715637 -0.293404642568 -0.292010411142 -0.293562264739 -0.300997033758 -0.293720169091 -0.309991229175 -0.293427325558 -0.318871312022 -0.29314643865 -0.327728855145 -0.302125836538 --0.328291634425 -0.302433525987 --0.319421559786 -0.302754310621 --0.310528889449 -0.302581158781 --0.301519011118 -0.302408323783 --0.292516681467 -0.302235817967 --0.283522281028 -0.302502184569 --0.274517504472 -0.30278208936 --0.265492815763 -0.30263691053 --0.256465573218 -0.302491882951 --0.247444343963 -0.302346996219 --0.238429501994 -0.302571624784 --0.229304587546 -0.302810180541 --0.220162547137 -0.302693216298 --0.21111891548 -0.302576257459 --0.202079828633 -0.302459292134 --0.193045684199 -0.302641726059 --0.183817124118 -0.302838409123 --0.174574281554 -0.302749888846 --0.165515614066 -0.302661260454 --0.156460089553 -0.302572498385 --0.147408126096 -0.302712419601 --0.138094624245 -0.302866863534 --0.128769753946 -0.30280695806 --0.119697730505 -0.302746850428 --0.110627514483 -0.302686545731 --0.101559554414 -0.302783699683 --0.0921810880424 -0.302895547776 --0.0827942164954 -0.302864399137 --0.0737108225267 -0.302832994055 --0.0646279402388 -0.302801320423 --0.0555460313023 -0.302855480935 --0.0461235884241 -0.302924455399 --0.036695758815 -0.302922148736 --0.0276031916988 -0.30291957004 --0.0185098789931 -0.302916707961 --0.00941628774828 -0.302915206788 -0 -0.302916707961 -0.00941628774828 -0.30291957004 -0.0185098789931 -0.302922148736 -0.0276031916988 -0.302924455399 -0.036695758815 -0.302855480935 -0.0461235884241 -0.302801320423 -0.0555460313023 -0.302832994055 -0.0646279402388 -0.302864399137 -0.0737108225267 -0.302895547776 -0.0827942164954 -0.302783699683 -0.0921810880424 -0.302686545731 -0.101559554414 -0.302746850428 -0.110627514483 -0.30280695806 -0.119697730505 -0.302866863534 -0.128769753946 -0.302712419601 -0.138094624245 -0.302572498385 -0.147408126096 -0.302661260454 -0.156460089553 -0.302749888846 -0.165515614066 -0.302838409123 -0.174574281554 -0.302641726059 -0.183817124118 -0.302459292134 -0.193045684199 -0.302576257459 -0.202079828633 -0.302693216298 -0.21111891548 -0.302810180541 -0.220162547137 -0.302571624784 -0.229304587546 -0.302346996219 -0.238429501994 -0.302491882951 -0.247444343963 -0.30263691053 -0.256465573218 -0.30278208936 -0.265492815763 -0.302502184569 -0.274517504472 -0.302235817967 -0.283522281028 -0.302408323783 -0.292516681467 -0.302581158781 -0.301519011118 -0.302754310621 -0.310528889449 -0.302433525987 -0.319421559786 -0.302125836538 -0.328291634425 -0.311114723926 --0.328856158238 -0.311449232147 --0.319973503456 -0.311797981005 --0.31106817986 -0.311609576738 --0.30204258283 -0.311421518281 --0.293024526883 -0.311233804985 --0.284014382781 -0.311523386256 --0.274996024057 -0.311827700487 --0.26595770441 -0.31166971783 --0.256914602091 -0.311511898693 --0.247877492559 -0.311354240764 --0.238846764529 -0.31159846641 --0.229707402238 -0.311857843131 --0.220550864197 -0.311730550875 --0.211491228355 -0.311603258882 --0.202436122224 -0.31147596671 --0.193385958687 -0.311674345544 --0.184142189101 -0.311888223853 --0.174884095487 -0.311791851552 --0.165809300296 -0.311695354516 --0.156737627306 -0.311598735632 --0.147669521559 -0.311750947083 --0.138340195759 -0.311918924971 --0.128999456353 -0.311853663607 --0.119911201227 -0.311788188873 --0.110824740835 -0.311722492926 --0.101740524498 -0.311828242874 --0.0923457631941 -0.31194996713 --0.0829425714879 -0.311915959117 --0.0738428572914 -0.31188167856 --0.064743643803 -0.311847114613 --0.0556453983994 -0.311906162326 --0.0462063543326 -0.311981312639 --0.036761905193 -0.311978656937 --0.0276529557015 -0.311975712602 --0.0185432527489 -0.311972466663 --0.0094332665196 -0.311970766771 -0 -0.311972466663 -0.0094332665196 -0.311975712602 -0.0185432527489 -0.311978656937 -0.0276529557015 -0.311981312639 -0.036761905193 -0.311906162326 -0.0462063543326 -0.311847114613 -0.0556453983994 -0.31188167856 -0.064743643803 -0.311915959117 -0.0738428572914 -0.31194996713 -0.0829425714879 -0.311828242874 -0.0923457631941 -0.311722492926 -0.101740524498 -0.311788188873 -0.110824740835 -0.311853663607 -0.119911201227 -0.311918924971 -0.128999456353 -0.311750947083 -0.138340195759 -0.311598735632 -0.147669521559 -0.311695354516 -0.156737627306 -0.311791851552 -0.165809300296 -0.311888223853 -0.174884095487 -0.311674345544 -0.184142189101 -0.31147596671 -0.193385958687 -0.311603258882 -0.202436122224 -0.311730550875 -0.211491228355 -0.311857843131 -0.220550864197 -0.31159846641 -0.229707402238 -0.311354240764 -0.238846764529 -0.311511898693 -0.247877492559 -0.31166971783 -0.256914602091 -0.311827700487 -0.26595770441 -0.311523386256 -0.274996024057 -0.311233804985 -0.284014382781 -0.311421518281 -0.293024526883 -0.311609576738 -0.30204258283 -0.311797981005 -0.31106817986 -0.311449232147 -0.319973503456 -0.311114723926 -0.328856158238 -0.320744955908 --0.310080821199 -0.320570485259 --0.301085709411 -0.320396332273 --0.292098067262 -0.320222487522 --0.283118241017 -0.320490865517 --0.274122269059 -0.320772909737 --0.2651063449 -0.320626629035 --0.256093511333 -0.320480492706 --0.247086616645 -0.320334508839 --0.238086049007 -0.32056082163 --0.228971393051 -0.3208011786 --0.219839568269 -0.320683364054 --0.210810061716 -0.320565546099 --0.201785038709 -0.320447710867 --0.192764909758 -0.320631492654 --0.183547841764 -0.320829647041 --0.174316461301 -0.320740481599 --0.165271688566 -0.320651204451 --0.156230017577 -0.320561825459 --0.147191889691 -0.320702765438 --0.137890886196 -0.32085832212 --0.128578484254 -0.320798018684 --0.119520217596 -0.320737505199 --0.110463727342 -0.32067678822 --0.101409461806 -0.320774623818 --0.0920442467726 -0.320887269369 --0.082670622224 -0.320855943618 --0.0736008989086 -0.320824374503 --0.0645316776622 -0.320792536323 --0.0554634155629 -0.320846982601 --0.046054709568 -0.320916368318 --0.0366406242064 -0.320914123314 --0.0275617125442 -0.320911616353 --0.0184820628573 -0.320908825258 --0.00940213754122 -0.320907354095 -2.16840434497e-19 -0.320908825258 -0.00940213754122 -0.320911616353 -0.0184820628573 -0.320914123314 -0.0275617125442 -0.320916368318 -0.0366406242064 -0.320846982601 -0.046054709568 -0.320792536323 -0.0554634155629 -0.320824374503 -0.0645316776622 -0.320855943618 -0.0736008989086 -0.320887269369 -0.082670622224 -0.320774623818 -0.0920442467726 -0.32067678822 -0.101409461806 -0.320737505199 -0.110463727342 -0.320798018684 -0.119520217596 -0.32085832212 -0.128578484254 -0.320702765438 -0.137890886196 -0.320561825459 -0.147191889691 -0.320651204451 -0.156230017577 -0.320740481599 -0.165271688566 -0.320829647041 -0.174316461301 -0.320631492654 -0.183547841764 -0.320447710867 -0.192764909758 -0.320565546099 -0.201785038709 -0.320683364054 -0.210810061716 -0.3208011786 -0.219839568269 -0.32056082163 -0.228971393051 -0.320334508839 -0.238086049007 -0.320480492706 -0.247086616645 -0.320626629035 -0.256093511333 -0.320772909737 -0.2651063449 -0.320490865517 -0.274122269059 -0.320222487522 -0.283118241017 -0.320396332273 -0.292098067262 -0.320570485259 -0.301085709411 -0.320744955908 -0.310080821199 -0.329668467414 --0.309133374479 -0.329508027268 --0.300167561665 -0.329347889606 --0.291209159149 -0.329188037071 --0.282258495016 -0.329435055643 --0.273283920838 -0.329694652245 --0.26428938609 -0.329560171692 --0.255305631414 -0.329425827107 --0.246327772219 -0.329291615245 --0.237356178995 -0.329499866398 --0.228265173503 -0.329721050949 --0.219156996323 -0.329612780628 --0.210156419488 -0.329504510411 --0.201160289646 -0.329396216656 --0.192168993279 -0.32956529162 --0.1829775173 -0.329747604651 --0.173771741456 -0.329665713586 --0.164755793686 -0.329583725599 --0.155742926683 -0.329501631894 --0.146733560644 -0.329631200074 --0.137459727479 -0.329774234646 --0.128174515674 -0.3297189285 --0.119145022145 -0.329663424504 --0.110117291454 -0.329607736431 --0.101091767582 -0.329697577919 --0.0917549152772 -0.329801055354 --0.0824096693039 -0.329772452306 --0.0733687174489 -0.32974360883 --0.0643282677537 -0.32971452015 --0.0552887718434 -0.329764341224 --0.045909206179 -0.32982791569 --0.0365242821668 -0.329826091023 --0.02747418586 -0.32982401459 --0.0184233647268 -0.329821673566 --0.00937227570326 -0.329820434085 -0 -0.329821673566 -0.00937227570326 -0.32982401459 -0.0184233647268 -0.329826091023 -0.02747418586 -0.32982791569 -0.0365242821668 -0.329764341224 -0.045909206179 -0.32971452015 -0.0552887718434 -0.32974360883 -0.0643282677537 -0.329772452306 -0.0733687174489 -0.329801055354 -0.0824096693039 -0.329697577919 -0.0917549152772 -0.329607736431 -0.101091767582 -0.329663424504 -0.110117291454 -0.3297189285 -0.119145022145 -0.329774234646 -0.128174515674 -0.329631200074 -0.137459727479 -0.329501631894 -0.146733560644 -0.329583725599 -0.155742926683 -0.329665713586 -0.164755793686 -0.329747604651 -0.173771741456 -0.32956529162 -0.1829775173 -0.329396216656 -0.192168993279 -0.329504510411 -0.201160289646 -0.329612780628 -0.210156419488 -0.329721050949 -0.219156996323 -0.329499866398 -0.228265173503 -0.329291615245 -0.237356178995 -0.329425827107 -0.246327772219 -0.329560171692 -0.255305631414 -0.329694652245 -0.26428938609 -0.329435055643 -0.273283920838 -0.329188037071 -0.282258495016 -0.329347889606 -0.291209159149 -0.329508027268 -0.300167561665 -0.329668467414 -0.309133374479 -0.338703945726 --0.264824761986 -0.338556832642 --0.255822731636 -0.338409872532 --0.246826574177 -0.338263060245 --0.237836669818 -0.338490645655 --0.228729026973 -0.338732371129 --0.219604160402 -0.338613901838 --0.210585148594 -0.338495435498 --0.201570571817 -0.338376958897 --0.19256080853 -0.338561772823 --0.183351828441 -0.338761052942 --0.174128505518 -0.338671434022 --0.165093982099 -0.338581693448 --0.156062521305 -0.338491830368 --0.14703454261 -0.338633511217 --0.137742504225 -0.338789904079 --0.128439048974 -0.338729322595 --0.119390853644 -0.338668539411 --0.110344406028 -0.338607534028 --0.101300149366 -0.338705832705 --0.0919445511326 -0.33881904894 --0.0825805322156 -0.338787642224 --0.07352077647 -0.338755962601 --0.0644615102707 -0.338724017988 --0.0554031914221 -0.338778656972 --0.046004532305 -0.338848321817 --0.0366004946955 -0.338846159198 --0.0275315237623 -0.338843717411 --0.0184618172168 -0.338840995161 --0.00939183773559 -0.338839561169 -2.16840434497e-19 -0.338840995161 -0.00939183773559 -0.338843717411 -0.0184618172168 -0.338846159198 -0.0275315237623 -0.338848321817 -0.0366004946955 -0.338778656972 -0.046004532305 -0.338724017988 -0.0554031914221 -0.338755962601 -0.0644615102707 -0.338787642224 -0.07352077647 -0.33881904894 -0.0825805322156 -0.338705832705 -0.0919445511326 -0.338607534028 -0.101300149366 -0.338668539411 -0.110344406028 -0.338729322595 -0.119390853644 -0.338789904079 -0.128439048974 -0.338633511217 -0.137742504225 -0.338491830368 -0.14703454261 -0.338581693448 -0.156062521305 -0.338671434022 -0.165093982099 -0.338761052942 -0.174128505518 -0.338561772823 -0.183351828441 -0.338376958897 -0.19256080853 -0.338495435498 -0.201570571817 -0.338613901838 -0.210585148594 -0.338732371129 -0.219604160402 -0.338490645655 -0.228729026973 -0.338263060245 -0.237836669818 -0.338409872532 -0.246826574177 -0.338556832642 -0.255822731636 -0.338703945726 -0.264824761986 -0.347724920797 --0.265362069175 -0.347565159292 --0.256341718324 -0.347405566427 --0.247327223388 -0.347246145816 --0.238318962132 -0.347493098433 --0.229194608313 -0.347755388682 --0.220052972594 -0.34762670284 --0.211015467292 -0.347498020556 --0.201982380141 -0.347369351937 --0.192954103975 -0.347569923768 --0.183727541225 -0.347786179708 --0.174486579335 -0.347688810028 --0.165433421408 -0.347591304042 --0.156383309829 -0.34749367377 --0.14733666834 -0.347647489938 --0.138026327653 -0.347817266305 --0.128704531188 -0.347751392539 --0.119637576193 -0.347685300148 --0.110572356777 -0.347618968734 --0.101509318134 -0.347725757499 --0.092134880176 -0.347848732234 --0.0827519901685 -0.347814492404 --0.0736733723203 -0.347779973698 --0.0645952351695 -0.347745171925 --0.0555180372583 -0.347804630133 --0.0461001865651 -0.347880394608 --0.036676936049 -0.347877899475 --0.0275890336959 -0.347875101387 --0.0185003855727 -0.34787199702 --0.0094114587918 -0.347870366031 --2.16840434497e-19 -0.34787199702 -0.0094114587918 -0.347875101387 -0.0185003855727 -0.347877899475 -0.0275890336959 -0.347880394608 -0.036676936049 -0.347804630133 -0.0461001865651 -0.347745171925 -0.0555180372583 -0.347779973698 -0.0645952351695 -0.347814492404 -0.0736733723203 -0.347848732234 -0.0827519901685 -0.347725757499 -0.092134880176 -0.347618968734 -0.101509318134 -0.347685300148 -0.110572356777 -0.347751392539 -0.119637576193 -0.347817266305 -0.128704531188 -0.347647489938 -0.138026327653 -0.34749367377 -0.14733666834 -0.347591304042 -0.156383309829 -0.347688810028 -0.165433421408 -0.347786179708 -0.174486579335 -0.347569923768 -0.183727541225 -0.347369351937 -0.192954103975 -0.347498020556 -0.201982380141 -0.34762670284 -0.211015467292 -0.347755388682 -0.220052972594 -0.347493098433 -0.229194608313 -0.347246145816 -0.238318962132 -0.347405566427 -0.247327223388 -0.347565159292 -0.256341718324 -0.347724920797 -0.265362069175 -0.356757272612 --0.265901351667 -0.356584843314 --0.256862623039 -0.356412612381 --0.247829744844 -0.356240558698 --0.238803080246 -0.356506902586 --0.229661935363 -0.356789789123 --0.220503450041 -0.356650878702 --0.211447396948 -0.356511964604 --0.202395739977 -0.356373072656 --0.193348896545 -0.35658942496 --0.184104660017 -0.356822691648 --0.174845970541 -0.356717548508 --0.165774126621 -0.356612272987 --0.15670530976 -0.356506869373 --0.147639950532 -0.356672822428 --0.138311214439 -0.356855993565 --0.128970984432 -0.356784817075 --0.119885210856 -0.356713407676 --0.110801160721 -0.356641758066 --0.101719285577 -0.356757053482 --0.0923259130888 -0.356889777888 --0.082924052366 -0.356852708126 --0.0738265172616 -0.356815343795 --0.064729450801 -0.356777682982 --0.055633316069 -0.35684198265 --0.0461961756694 -0.356923852338 --0.0367536113825 -0.356921015885 --0.0276467191689 -0.35691785532 --0.018539071498 -0.356914370689 --0.00943113994673 -0.35691254249 -0 -0.356914370689 -0.00943113994673 -0.35691785532 -0.018539071498 -0.356921015885 -0.0276467191689 -0.356923852338 -0.0367536113825 -0.35684198265 -0.0461961756694 -0.356777682982 -0.055633316069 -0.356815343795 -0.064729450801 -0.356852708126 -0.0738265172616 -0.356889777888 -0.082924052366 -0.356757053482 -0.0923259130888 -0.356641758066 -0.101719285577 -0.356713407676 -0.110801160721 -0.356784817075 -0.119885210856 -0.356855993565 -0.128970984432 -0.356672822428 -0.138311214439 -0.356506869373 -0.147639950532 -0.356612272987 -0.15670530976 -0.356717548508 -0.165774126621 -0.356822691648 -0.174845970541 -0.35658942496 -0.184104660017 -0.356373072656 -0.193348896545 -0.356511964604 -0.202395739977 -0.356650878702 -0.211447396948 -0.356789789123 -0.220503450041 -0.356506902586 -0.229661935363 -0.356240558698 -0.238803080246 -0.356412612381 -0.247829744844 -0.356584843314 -0.256862623039 -0.356757272612 -0.265901351667 -0.365558020549 --0.264943758707 -0.365397583892 --0.255939063157 -0.36523732978 --0.246940150083 -0.365077222806 --0.237947376881 -0.365325227778 --0.228834052091 -0.36558865133 --0.219703411783 -0.365459442912 --0.210681225743 -0.365330226782 --0.201663384125 -0.36520101215 --0.192650299689 -0.365402401283 --0.183436129649 -0.365619562785 --0.174207529989 -0.365521816454 --0.165169444582 -0.365423935166 --0.156134350958 -0.365325939383 --0.147102683202 -0.36548034851 --0.137805844793 -0.365650791603 --0.128497527761 -0.365584685136 --0.119445459288 -0.365518366329 --0.110395102485 -0.36545183331 --0.101346897892 -0.365558986982 --0.0919867945877 -0.365682367799 --0.082618230146 -0.365648055553 --0.0735544083387 -0.365613468096 --0.0644910541512 -0.365578594795 --0.0554286234186 -0.365638219399 --0.0460256520825 -0.365714208647 --0.0366172837493 -0.365711782521 --0.0275441556661 -0.365709058302 --0.018470290165 -0.365706027653 --0.0093961491204 -0.365704432274 --2.16840434497e-19 -0.365706027653 -0.0093961491204 -0.365709058302 -0.018470290165 -0.365711782521 -0.0275441556661 -0.365714208647 -0.0366172837493 -0.365638219399 -0.0460256520825 -0.365578594795 -0.0554286234186 -0.365613468096 -0.0644910541512 -0.365648055553 -0.0735544083387 -0.365682367799 -0.082618230146 -0.365558986982 -0.0919867945877 -0.36545183331 -0.101346897892 -0.365518366329 -0.110395102485 -0.365584685136 -0.119445459288 -0.365650791603 -0.128497527761 -0.36548034851 -0.137805844793 -0.365325939383 -0.147102683202 -0.365423935166 -0.156134350958 -0.365521816454 -0.165169444582 -0.365619562785 -0.174207529989 -0.365402401283 -0.183436129649 -0.36520101215 -0.192650299689 -0.365330226782 -0.201663384125 -0.365459442912 -0.210681225743 -0.36558865133 -0.219703411783 -0.365325227778 -0.228834052091 -0.365077222806 -0.237947376881 -0.36523732978 -0.246940150083 -0.365397583892 -0.255939063157 -0.365558020549 -0.264943758707 -0.374332491483 --0.264019018376 -0.374184158405 --0.255047225491 -0.374035977857 --0.24608114617 -0.373887933071 --0.237121126334 -0.374117425826 --0.228034613887 -0.374361208534 --0.218930795129 -0.374241797176 --0.209941335889 -0.374122359763 --0.200956169136 -0.374002919455 --0.191975700187 -0.374189228512 --0.182790547081 -0.37439014371 --0.173590971459 -0.374299859429 --0.16458549304 -0.374209439952 --0.155582971909 -0.374118911154 --0.146583840399 -0.374261676892 --0.137317799952 -0.374419289896 --0.128040293551 -0.374358299386 --0.119020772734 -0.374297109072 --0.110002950991 -0.374235725275 --0.100987260166 -0.374334658445 --0.0916592998842 -0.374448639351 --0.0823229048267 -0.374417114723 --0.0732916314001 -0.374385308886 --0.0642608234907 -0.374353239451 --0.055230933862 -0.374408147872 --0.0458609887878 -0.374478212158 --0.0364856706291 -0.374476212559 --0.0274451395804 -0.374473935986 --0.0184038883802 -0.374471362461 --0.00936236887826 -0.374470001464 -0 -0.374471362461 -0.00936236887826 -0.374473935986 -0.0184038883802 -0.374476212559 -0.0274451395804 -0.374478212158 -0.0364856706291 -0.374408147872 -0.0458609887878 -0.374353239451 -0.055230933862 -0.374385308886 -0.0642608234907 -0.374417114723 -0.0732916314001 -0.374448639351 -0.0823229048267 -0.374334658445 -0.0916592998842 -0.374235725275 -0.100987260166 -0.374297109072 -0.110002950991 -0.374358299386 -0.119020772734 -0.374419289896 -0.128040293551 -0.374261676892 -0.137317799952 -0.374118911154 -0.146583840399 -0.374209439952 -0.155582971909 -0.374299859429 -0.16458549304 -0.37439014371 -0.173590971459 -0.374189228512 -0.182790547081 -0.374002919455 -0.191975700187 -0.374122359763 -0.200956169136 -0.374241797176 -0.209941335889 -0.374361208534 -0.218930795129 -0.374117425826 -0.228034613887 -0.373887933071 -0.237121126334 -0.374035977857 -0.24608114617 -0.374184158405 -0.255047225491 -0.374332491483 -0.264019018376 -0.383355461543 --0.219438023249 -0.38322598326 --0.210427672928 -0.383096493354 --0.201421605927 -0.382966998103 --0.192420217166 -0.383168841328 --0.183215170602 -0.383386507335 --0.173995643974 -0.383288582201 --0.164969108557 -0.383190506714 --0.155945517498 -0.383092307232 --0.146925298748 -0.383247037372 --0.137638564792 -0.383417844867 --0.128340320544 -0.383351636319 --0.11929960232 -0.383285225747 --0.110260565943 -0.383218585458 --0.101223648672 -0.383325880794 --0.0918743940199 -0.38344949406 --0.0825166692656 -0.383415194709 --0.0734640849346 -0.383380581515 --0.0644119505479 -0.383345688702 --0.0553607250209 -0.383405351719 --0.0459690863836 -0.383481428044 --0.0365720523 -0.383479100254 --0.0275101287792 -0.383476463485 --0.0184474725428 -0.383473514929 --0.00938454192642 -0.383471967669 -0 -0.383473514929 -0.00938454192642 -0.383476463485 -0.0184474725428 -0.383479100254 -0.0275101287792 -0.383481428044 -0.0365720523 -0.383405351719 -0.0459690863836 -0.383345688702 -0.0553607250209 -0.383380581515 -0.0644119505479 -0.383415194709 -0.0734640849346 -0.38344949406 -0.0825166692656 -0.383325880794 -0.0918743940199 -0.383218585458 -0.101223648672 -0.383285225747 -0.110260565943 -0.383351636319 -0.11929960232 -0.383417844867 -0.128340320544 -0.383247037372 -0.137638564792 -0.383092307232 -0.146925298748 -0.383190506714 -0.155945517498 -0.383288582201 -0.164969108557 -0.383386507335 -0.173995643974 -0.383168841328 -0.183215170602 -0.382966998103 -0.192420217166 -0.383096493354 -0.201421605927 -0.38322598326 -0.210427672928 -0.383355461543 -0.219438023249 -0.392363274975 --0.219947418843 -0.39222371765 --0.210916108398 -0.392084157409 --0.201889065689 -0.391944581046 --0.192866684998 -0.392161978041 --0.183641637913 -0.39239642204 --0.174402052928 -0.392290845697 --0.165354384606 -0.392185098316 --0.156309644438 -0.392079211827 --0.147268258916 -0.392245936562 --0.137960719094 -0.392429962702 --0.128641624053 -0.39235852524 --0.119579633309 -0.392286863721 --0.110519304829 -0.392214961513 --0.101461081062 -0.392330654308 --0.0920904165832 -0.392463894915 --0.0827112382306 -0.392426800465 --0.0736372594136 -0.392389393632 --0.0645637212255 -0.392351686004 --0.0554910821289 -0.392416110506 --0.0460776293857 -0.392498204654 --0.0366587576456 -0.392495539043 --0.0275753608312 -0.392492532618 --0.0184912192771 -0.392489196252 --0.00940679729692 -0.392487459181 -0 -0.392489196252 -0.00940679729692 -0.392492532618 -0.0184912192771 -0.392495539043 -0.0275753608312 -0.392498204654 -0.0366587576456 -0.392416110506 -0.0460776293857 -0.392351686004 -0.0554910821289 -0.392389393632 -0.0645637212255 -0.392426800465 -0.0736372594136 -0.392463894915 -0.0827112382306 -0.392330654308 -0.0920904165832 -0.392214961513 -0.101461081062 -0.392286863721 -0.110519304829 -0.39235852524 -0.119579633309 -0.392429962702 -0.128641624053 -0.392245936562 -0.137960719094 -0.392079211827 -0.147268258916 -0.392185098316 -0.156309644438 -0.392290845697 -0.165354384606 -0.39239642204 -0.174402052928 -0.392161978041 -0.183641637913 -0.391944581046 -0.192866684998 -0.392084157409 -0.201889065689 -0.39222371765 -0.210916108398 -0.392363274975 -0.219947418843 -0.401384384469 --0.220459013968 -0.401234732054 --0.211406673167 -0.401085068122 --0.202358568892 -0.400935382782 --0.193315118551 -0.401168387605 --0.184069972977 -0.401419637028 --0.174810222373 -0.401306369068 --0.165741345623 -0.401192940599 --0.156675375937 -0.401079363821 --0.147612748826 -0.401258088386 --0.138284288904 -0.401455364036 --0.12894422573 -0.40137870232 --0.119860883797 -0.401301770995 --0.110779181101 -0.401224602254 --0.1016995729 -0.401348708507 --0.0923073740248 -0.401491576065 --0.0829066222285 -0.401451684586 --0.0738111722517 -0.401411475598 --0.0647161484081 -0.40137093684 --0.0556220151431 -0.401440139158 --0.0461866258209 -0.401528278013 --0.036745791605 -0.401525270531 --0.0276408390871 -0.401521902204 --0.0185351313067 -0.401518186144 --0.00942913730454 -0.401516244302 -2.16840434497e-19 -0.401518186144 -0.00942913730454 -0.401521902204 -0.0185351313067 -0.401525270531 -0.0276408390871 -0.401528278013 -0.036745791605 -0.401440139158 -0.0461866258209 -0.40137093684 -0.0556220151431 -0.401411475598 -0.0647161484081 -0.401451684586 -0.0738111722517 -0.401491576065 -0.0829066222285 -0.401348708507 -0.0923073740248 -0.401224602254 -0.1016995729 -0.401301770995 -0.110779181101 -0.40137870232 -0.119860883797 -0.401455364036 -0.12894422573 -0.401258088386 -0.138284288904 -0.401079363821 -0.147612748826 -0.401192940599 -0.156675375937 -0.401306369068 -0.165741345623 -0.401419637028 -0.174810222373 -0.401168387605 -0.184069972977 -0.400935382782 -0.193315118551 -0.401085068122 -0.202358568892 -0.401234732054 -0.211406673167 -0.401384384469 -0.220459013968 -0.41009473881 --0.128419202349 -0.41002329297 --0.119373218514 -0.409951595521 --0.110328863448 -0.409879658335 --0.101286573382 -0.409995416794 --0.0919313066824 -0.410128726126 --0.082567521339 -0.41009165461 --0.0735094386816 -0.41005428615 --0.0644517834241 -0.410016600788 --0.0553950085828 -0.410080974771 --0.0459975507229 -0.410163077344 --0.0365946809162 -0.410160491999 --0.0275271548648 -0.410157558615 --0.0184588914283 -0.410154317665 --0.00939035198173 -0.410152613004 -0 -0.410154317665 -0.00939035198173 -0.410157558615 -0.0184588914283 -0.410160491999 -0.0275271548648 -0.410163077344 -0.0365946809162 -0.410080974771 -0.0459975507229 -0.410016600788 -0.0553950085828 -0.41005428615 -0.0644517834241 -0.41009165461 -0.0735094386816 -0.410128726126 -0.082567521339 -0.409995416794 -0.0919313066824 -0.409879658335 -0.101286573382 -0.409951595521 -0.110328863448 -0.41002329297 -0.119373218514 -0.41009473881 -0.128419202349 -0.418705039499 --0.127909580671 -0.418638860928 --0.118899858163 -0.418572459355 --0.109891750727 -0.418505804701 --0.100885679196 -0.4186131322 --0.09156627982 -0.418736800937 --0.0822383873074 -0.418702567301 --0.0732165620209 -0.418668057162 --0.0641951679709 -0.418633263362 --0.0551746470402 -0.418692781454 --0.0458140397756 -0.418768778522 --0.0364480489219 -0.418766607157 --0.0274168396857 -0.418764121024 --0.0183849116393 -0.4187613401 --0.00935271598039 -0.41875986503 -0 -0.4187613401 -0.00935271598039 -0.418764121024 -0.0183849116393 -0.418766607157 -0.0274168396857 -0.418768778522 -0.0364480489219 -0.418692781454 -0.0458140397756 -0.418633263362 -0.0551746470402 -0.418668057162 -0.0641951679709 -0.418702567301 -0.0732165620209 -0.418736800937 -0.0822383873074 -0.4186131322 -0.09156627982 -0.418505804701 -0.100885679196 -0.418572459355 -0.109891750727 -0.418638860928 -0.118899858163 -0.418705039499 -0.127909580671 -0.42772069843 --0.0824546304453 -0.427683726166 --0.0734090328885 -0.427646457882 --0.0643638472548 -0.427608883285 --0.0553195257678 -0.427673082379 --0.0459346749945 -0.427754997919 --0.0365444136292 -0.427752498045 --0.0274893383098 -0.42774968085 --0.0184335323263 -0.427746526053 --0.00937745141073 -0.427744848909 -0 -0.427746526053 -0.00937745141073 -0.42774968085 -0.0184335323263 -0.427752498045 -0.0274893383098 -0.427754997919 -0.0365444136292 -0.427673082379 -0.0459346749945 -0.427608883285 -0.0553195257678 -0.427646457882 -0.0643638472548 -0.427683726166 -0.0734090328885 -0.42772069843 -0.0824546304453 -0.436720068262 --0.082671904706 -0.436680371294 --0.0736024313247 -0.436640325593 --0.0645333515411 -0.436599952455 --0.0554651263885 -0.436668843324 --0.046055883989 -0.436756690748 --0.0366412029928 -0.43675387234 --0.0275621570739 -0.436750703022 --0.0184823674286 -0.436747182825 --0.00940229597992 -0.436745332885 --2.16840434497e-19 -0.436747182825 -0.00940229597992 -0.436750703022 -0.0184823674286 -0.43675387234 -0.0275621570739 -0.436756690748 -0.0366412029928 -0.436668843324 -0.046055883989 -0.436599952455 -0.0554651263885 -0.436640325593 -0.0645333515411 -0.436680371294 -0.0736024313247 -0.436720068262 -0.082671904706 -0.445734696637 --0.0828902302899 -0.445692247811 --0.0737967733504 -0.445649417478 --0.064703695363 -0.445606239297 --0.0556114589397 -0.445679863006 --0.0461776751127 -0.445773675836 --0.0367384257144 -0.445770527198 --0.0276353019696 -0.445766983934 --0.0185314209562 -0.445763067015 --0.00942725128817 -0.445761023272 --2.16840434497e-19 -0.445763067015 -0.00942725128817 -0.445766983934 -0.0185314209562 -0.445770527198 -0.0276353019696 -0.445773675836 -0.0367384257144 -0.445679863006 -0.0461776751127 -0.445606239297 -0.0556114589397 -0.445649417478 -0.064703695363 -0.445692247811 -0.0737967733504 -0.445734696637 -0.0828902302899 --0.445734696637 --0.0828902302899 --0.445692247811 --0.0737967733504 --0.445649417478 --0.064703695363 --0.445606239297 --0.0556114589397 --0.445679863006 --0.0461776751127 --0.445773675836 --0.0367384257144 --0.445770527198 --0.0276353019696 --0.445766983934 --0.0185314209562 --0.445763067015 --0.00942725128817 --0.445761023272 --2.16840434497e-19 --0.445763067015 -0.00942725128817 --0.445766983934 -0.0185314209562 --0.445770527198 -0.0276353019696 --0.445773675836 -0.0367384257144 --0.445679863006 -0.0461776751127 --0.445606239297 -0.0556114589397 --0.445649417478 -0.064703695363 --0.445692247811 -0.0737967733504 --0.445734696637 -0.0828902302899 --0.436720068262 --0.082671904706 --0.436680371294 --0.0736024313247 --0.436640325593 --0.0645333515411 --0.436599952455 --0.0554651263885 --0.436668843324 --0.046055883989 --0.436756690748 --0.0366412029928 --0.43675387234 --0.0275621570739 --0.436750703022 --0.0184823674286 --0.436747182825 --0.00940229597992 --0.436745332885 --2.16840434497e-19 --0.436747182825 -0.00940229597992 --0.436750703022 -0.0184823674286 --0.43675387234 -0.0275621570739 --0.436756690748 -0.0366412029928 --0.436668843324 -0.046055883989 --0.436599952455 -0.0554651263885 --0.436640325593 -0.0645333515411 --0.436680371294 -0.0736024313247 --0.436720068262 -0.082671904706 --0.42772069843 --0.0824546304453 --0.427683726166 --0.0734090328885 --0.427646457882 --0.0643638472548 --0.427608883285 --0.0553195257678 --0.427673082379 --0.0459346749945 --0.427754997919 --0.0365444136292 --0.427752498045 --0.0274893383098 --0.42774968085 --0.0184335323263 --0.427746526053 --0.00937745141073 --0.427744848909 -0 --0.427746526053 -0.00937745141073 --0.42774968085 -0.0184335323263 --0.427752498045 -0.0274893383098 --0.427754997919 -0.0365444136292 --0.427673082379 -0.0459346749945 --0.427608883285 -0.0553195257678 --0.427646457882 -0.0643638472548 --0.427683726166 -0.0734090328885 --0.42772069843 -0.0824546304453 --0.418705039499 --0.127909580671 --0.418638860928 --0.118899858163 --0.418572459355 --0.109891750727 --0.418505804701 --0.100885679196 --0.4186131322 --0.09156627982 --0.418736800937 --0.0822383873074 --0.418702567301 --0.0732165620209 --0.418668057162 --0.0641951679709 --0.418633263362 --0.0551746470402 --0.418692781454 --0.0458140397756 --0.418768778522 --0.0364480489219 --0.418766607157 --0.0274168396857 --0.418764121024 --0.0183849116393 --0.4187613401 --0.00935271598039 --0.41875986503 -0 --0.4187613401 -0.00935271598039 --0.418764121024 -0.0183849116393 --0.418766607157 -0.0274168396857 --0.418768778522 -0.0364480489219 --0.418692781454 -0.0458140397756 --0.418633263362 -0.0551746470402 --0.418668057162 -0.0641951679709 --0.418702567301 -0.0732165620209 --0.418736800937 -0.0822383873074 --0.4186131322 -0.09156627982 --0.418505804701 -0.100885679196 --0.418572459355 -0.109891750727 --0.418638860928 -0.118899858163 --0.418705039499 -0.127909580671 --0.41009473881 --0.128419202349 --0.41002329297 --0.119373218514 --0.409951595521 --0.110328863448 --0.409879658335 --0.101286573382 --0.409995416794 --0.0919313066824 --0.410128726126 --0.082567521339 --0.41009165461 --0.0735094386816 --0.41005428615 --0.0644517834241 --0.410016600788 --0.0553950085828 --0.410080974771 --0.0459975507229 --0.410163077344 --0.0365946809162 --0.410160491999 --0.0275271548648 --0.410157558615 --0.0184588914283 --0.410154317665 --0.00939035198173 --0.410152613004 -0 --0.410154317665 -0.00939035198173 --0.410157558615 -0.0184588914283 --0.410160491999 -0.0275271548648 --0.410163077344 -0.0365946809162 --0.410080974771 -0.0459975507229 --0.410016600788 -0.0553950085828 --0.41005428615 -0.0644517834241 --0.41009165461 -0.0735094386816 --0.410128726126 -0.082567521339 --0.409995416794 -0.0919313066824 --0.409879658335 -0.101286573382 --0.409951595521 -0.110328863448 --0.41002329297 -0.119373218514 --0.41009473881 -0.128419202349 --0.401384384469 --0.220459013968 --0.401234732054 --0.211406673167 --0.401085068122 --0.202358568892 --0.400935382782 --0.193315118551 --0.401168387605 --0.184069972977 --0.401419637028 --0.174810222373 --0.401306369068 --0.165741345623 --0.401192940599 --0.156675375937 --0.401079363821 --0.147612748826 --0.401258088386 --0.138284288904 --0.401455364036 --0.12894422573 --0.40137870232 --0.119860883797 --0.401301770995 --0.110779181101 --0.401224602254 --0.1016995729 --0.401348708507 --0.0923073740248 --0.401491576065 --0.0829066222285 --0.401451684586 --0.0738111722517 --0.401411475598 --0.0647161484081 --0.40137093684 --0.0556220151431 --0.401440139158 --0.0461866258209 --0.401528278013 --0.036745791605 --0.401525270531 --0.0276408390871 --0.401521902204 --0.0185351313067 --0.401518186144 --0.00942913730454 --0.401516244302 -2.16840434497e-19 --0.401518186144 -0.00942913730454 --0.401521902204 -0.0185351313067 --0.401525270531 -0.0276408390871 --0.401528278013 -0.036745791605 --0.401440139158 -0.0461866258209 --0.40137093684 -0.0556220151431 --0.401411475598 -0.0647161484081 --0.401451684586 -0.0738111722517 --0.401491576065 -0.0829066222285 --0.401348708507 -0.0923073740248 --0.401224602254 -0.1016995729 --0.401301770995 -0.110779181101 --0.40137870232 -0.119860883797 --0.401455364036 -0.12894422573 --0.401258088386 -0.138284288904 --0.401079363821 -0.147612748826 --0.401192940599 -0.156675375937 --0.401306369068 -0.165741345623 --0.401419637028 -0.174810222373 --0.401168387605 -0.184069972977 --0.400935382782 -0.193315118551 --0.401085068122 -0.202358568892 --0.401234732054 -0.211406673167 --0.401384384469 -0.220459013968 --0.392363274975 --0.219947418843 --0.39222371765 --0.210916108398 --0.392084157409 --0.201889065689 --0.391944581046 --0.192866684998 --0.392161978041 --0.183641637913 --0.39239642204 --0.174402052928 --0.392290845697 --0.165354384606 --0.392185098316 --0.156309644438 --0.392079211827 --0.147268258916 --0.392245936562 --0.137960719094 --0.392429962702 --0.128641624053 --0.39235852524 --0.119579633309 --0.392286863721 --0.110519304829 --0.392214961513 --0.101461081062 --0.392330654308 --0.0920904165832 --0.392463894915 --0.0827112382306 --0.392426800465 --0.0736372594136 --0.392389393632 --0.0645637212255 --0.392351686004 --0.0554910821289 --0.392416110506 --0.0460776293857 --0.392498204654 --0.0366587576456 --0.392495539043 --0.0275753608312 --0.392492532618 --0.0184912192771 --0.392489196252 --0.00940679729692 --0.392487459181 -0 --0.392489196252 -0.00940679729692 --0.392492532618 -0.0184912192771 --0.392495539043 -0.0275753608312 --0.392498204654 -0.0366587576456 --0.392416110506 -0.0460776293857 --0.392351686004 -0.0554910821289 --0.392389393632 -0.0645637212255 --0.392426800465 -0.0736372594136 --0.392463894915 -0.0827112382306 --0.392330654308 -0.0920904165832 --0.392214961513 -0.101461081062 --0.392286863721 -0.110519304829 --0.39235852524 -0.119579633309 --0.392429962702 -0.128641624053 --0.392245936562 -0.137960719094 --0.392079211827 -0.147268258916 --0.392185098316 -0.156309644438 --0.392290845697 -0.165354384606 --0.39239642204 -0.174402052928 --0.392161978041 -0.183641637913 --0.391944581046 -0.192866684998 --0.392084157409 -0.201889065689 --0.39222371765 -0.210916108398 --0.392363274975 -0.219947418843 --0.383355461543 --0.219438023249 --0.38322598326 --0.210427672928 --0.383096493354 --0.201421605927 --0.382966998103 --0.192420217166 --0.383168841328 --0.183215170602 --0.383386507335 --0.173995643974 --0.383288582201 --0.164969108557 --0.383190506714 --0.155945517498 --0.383092307232 --0.146925298748 --0.383247037372 --0.137638564792 --0.383417844867 --0.128340320544 --0.383351636319 --0.11929960232 --0.383285225747 --0.110260565943 --0.383218585458 --0.101223648672 --0.383325880794 --0.0918743940199 --0.38344949406 --0.0825166692656 --0.383415194709 --0.0734640849346 --0.383380581515 --0.0644119505479 --0.383345688702 --0.0553607250209 --0.383405351719 --0.0459690863836 --0.383481428044 --0.0365720523 --0.383479100254 --0.0275101287792 --0.383476463485 --0.0184474725428 --0.383473514929 --0.00938454192642 --0.383471967669 -0 --0.383473514929 -0.00938454192642 --0.383476463485 -0.0184474725428 --0.383479100254 -0.0275101287792 --0.383481428044 -0.0365720523 --0.383405351719 -0.0459690863836 --0.383345688702 -0.0553607250209 --0.383380581515 -0.0644119505479 --0.383415194709 -0.0734640849346 --0.38344949406 -0.0825166692656 --0.383325880794 -0.0918743940199 --0.383218585458 -0.101223648672 --0.383285225747 -0.110260565943 --0.383351636319 -0.11929960232 --0.383417844867 -0.128340320544 --0.383247037372 -0.137638564792 --0.383092307232 -0.146925298748 --0.383190506714 -0.155945517498 --0.383288582201 -0.164969108557 --0.383386507335 -0.173995643974 --0.383168841328 -0.183215170602 --0.382966998103 -0.192420217166 --0.383096493354 -0.201421605927 --0.38322598326 -0.210427672928 --0.383355461543 -0.219438023249 --0.374332491483 --0.264019018376 --0.374184158405 --0.255047225491 --0.374035977857 --0.24608114617 --0.373887933071 --0.237121126334 --0.374117425826 --0.228034613887 --0.374361208534 --0.218930795129 --0.374241797176 --0.209941335889 --0.374122359763 --0.200956169136 --0.374002919455 --0.191975700187 --0.374189228512 --0.182790547081 --0.37439014371 --0.173590971459 --0.374299859429 --0.16458549304 --0.374209439952 --0.155582971909 --0.374118911154 --0.146583840399 --0.374261676892 --0.137317799952 --0.374419289896 --0.128040293551 --0.374358299386 --0.119020772734 --0.374297109072 --0.110002950991 --0.374235725275 --0.100987260166 --0.374334658445 --0.0916592998842 --0.374448639351 --0.0823229048267 --0.374417114723 --0.0732916314001 --0.374385308886 --0.0642608234907 --0.374353239451 --0.055230933862 --0.374408147872 --0.0458609887878 --0.374478212158 --0.0364856706291 --0.374476212559 --0.0274451395804 --0.374473935986 --0.0184038883802 --0.374471362461 --0.00936236887826 --0.374470001464 -0 --0.374471362461 -0.00936236887826 --0.374473935986 -0.0184038883802 --0.374476212559 -0.0274451395804 --0.374478212158 -0.0364856706291 --0.374408147872 -0.0458609887878 --0.374353239451 -0.055230933862 --0.374385308886 -0.0642608234907 --0.374417114723 -0.0732916314001 --0.374448639351 -0.0823229048267 --0.374334658445 -0.0916592998842 --0.374235725275 -0.100987260166 --0.374297109072 -0.110002950991 --0.374358299386 -0.119020772734 --0.374419289896 -0.128040293551 --0.374261676892 -0.137317799952 --0.374118911154 -0.146583840399 --0.374209439952 -0.155582971909 --0.374299859429 -0.16458549304 --0.37439014371 -0.173590971459 --0.374189228512 -0.182790547081 --0.374002919455 -0.191975700187 --0.374122359763 -0.200956169136 --0.374241797176 -0.209941335889 --0.374361208534 -0.218930795129 --0.374117425826 -0.228034613887 --0.373887933071 -0.237121126334 --0.374035977857 -0.24608114617 --0.374184158405 -0.255047225491 --0.374332491483 -0.264019018376 --0.365558020549 --0.264943758707 --0.365397583892 --0.255939063157 --0.36523732978 --0.246940150083 --0.365077222806 --0.237947376881 --0.365325227778 --0.228834052091 --0.36558865133 --0.219703411783 --0.365459442912 --0.210681225743 --0.365330226782 --0.201663384125 --0.36520101215 --0.192650299689 --0.365402401283 --0.183436129649 --0.365619562785 --0.174207529989 --0.365521816454 --0.165169444582 --0.365423935166 --0.156134350958 --0.365325939383 --0.147102683202 --0.36548034851 --0.137805844793 --0.365650791603 --0.128497527761 --0.365584685136 --0.119445459288 --0.365518366329 --0.110395102485 --0.36545183331 --0.101346897892 --0.365558986982 --0.0919867945877 --0.365682367799 --0.082618230146 --0.365648055553 --0.0735544083387 --0.365613468096 --0.0644910541512 --0.365578594795 --0.0554286234186 --0.365638219399 --0.0460256520825 --0.365714208647 --0.0366172837493 --0.365711782521 --0.0275441556661 --0.365709058302 --0.018470290165 --0.365706027653 --0.0093961491204 --0.365704432274 --2.16840434497e-19 --0.365706027653 -0.0093961491204 --0.365709058302 -0.018470290165 --0.365711782521 -0.0275441556661 --0.365714208647 -0.0366172837493 --0.365638219399 -0.0460256520825 --0.365578594795 -0.0554286234186 --0.365613468096 -0.0644910541512 --0.365648055553 -0.0735544083387 --0.365682367799 -0.082618230146 --0.365558986982 -0.0919867945877 --0.36545183331 -0.101346897892 --0.365518366329 -0.110395102485 --0.365584685136 -0.119445459288 --0.365650791603 -0.128497527761 --0.36548034851 -0.137805844793 --0.365325939383 -0.147102683202 --0.365423935166 -0.156134350958 --0.365521816454 -0.165169444582 --0.365619562785 -0.174207529989 --0.365402401283 -0.183436129649 --0.36520101215 -0.192650299689 --0.365330226782 -0.201663384125 --0.365459442912 -0.210681225743 --0.36558865133 -0.219703411783 --0.365325227778 -0.228834052091 --0.365077222806 -0.237947376881 --0.36523732978 -0.246940150083 --0.365397583892 -0.255939063157 --0.365558020549 -0.264943758707 --0.356757272612 --0.265901351667 --0.356584843314 --0.256862623039 --0.356412612381 --0.247829744844 --0.356240558698 --0.238803080246 --0.356506902586 --0.229661935363 --0.356789789123 --0.220503450041 --0.356650878702 --0.211447396948 --0.356511964604 --0.202395739977 --0.356373072656 --0.193348896545 --0.35658942496 --0.184104660017 --0.356822691648 --0.174845970541 --0.356717548508 --0.165774126621 --0.356612272987 --0.15670530976 --0.356506869373 --0.147639950532 --0.356672822428 --0.138311214439 --0.356855993565 --0.128970984432 --0.356784817075 --0.119885210856 --0.356713407676 --0.110801160721 --0.356641758066 --0.101719285577 --0.356757053482 --0.0923259130888 --0.356889777888 --0.082924052366 --0.356852708126 --0.0738265172616 --0.356815343795 --0.064729450801 --0.356777682982 --0.055633316069 --0.35684198265 --0.0461961756694 --0.356923852338 --0.0367536113825 --0.356921015885 --0.0276467191689 --0.35691785532 --0.018539071498 --0.356914370689 --0.00943113994673 --0.35691254249 -0 --0.356914370689 -0.00943113994673 --0.35691785532 -0.018539071498 --0.356921015885 -0.0276467191689 --0.356923852338 -0.0367536113825 --0.35684198265 -0.0461961756694 --0.356777682982 -0.055633316069 --0.356815343795 -0.064729450801 --0.356852708126 -0.0738265172616 --0.356889777888 -0.082924052366 --0.356757053482 -0.0923259130888 --0.356641758066 -0.101719285577 --0.356713407676 -0.110801160721 --0.356784817075 -0.119885210856 --0.356855993565 -0.128970984432 --0.356672822428 -0.138311214439 --0.356506869373 -0.147639950532 --0.356612272987 -0.15670530976 --0.356717548508 -0.165774126621 --0.356822691648 -0.174845970541 --0.35658942496 -0.184104660017 --0.356373072656 -0.193348896545 --0.356511964604 -0.202395739977 --0.356650878702 -0.211447396948 --0.356789789123 -0.220503450041 --0.356506902586 -0.229661935363 --0.356240558698 -0.238803080246 --0.356412612381 -0.247829744844 --0.356584843314 -0.256862623039 --0.356757272612 -0.265901351667 --0.347724920797 --0.265362069175 --0.347565159292 --0.256341718324 --0.347405566427 --0.247327223388 --0.347246145816 --0.238318962132 --0.347493098433 --0.229194608313 --0.347755388682 --0.220052972594 --0.34762670284 --0.211015467292 --0.347498020556 --0.201982380141 --0.347369351937 --0.192954103975 --0.347569923768 --0.183727541225 --0.347786179708 --0.174486579335 --0.347688810028 --0.165433421408 --0.347591304042 --0.156383309829 --0.34749367377 --0.14733666834 --0.347647489938 --0.138026327653 --0.347817266305 --0.128704531188 --0.347751392539 --0.119637576193 --0.347685300148 --0.110572356777 --0.347618968734 --0.101509318134 --0.347725757499 --0.092134880176 --0.347848732234 --0.0827519901685 --0.347814492404 --0.0736733723203 --0.347779973698 --0.0645952351695 --0.347745171925 --0.0555180372583 --0.347804630133 --0.0461001865651 --0.347880394608 --0.036676936049 --0.347877899475 --0.0275890336959 --0.347875101387 --0.0185003855727 --0.34787199702 --0.0094114587918 --0.347870366031 --2.16840434497e-19 --0.34787199702 -0.0094114587918 --0.347875101387 -0.0185003855727 --0.347877899475 -0.0275890336959 --0.347880394608 -0.036676936049 --0.347804630133 -0.0461001865651 --0.347745171925 -0.0555180372583 --0.347779973698 -0.0645952351695 --0.347814492404 -0.0736733723203 --0.347848732234 -0.0827519901685 --0.347725757499 -0.092134880176 --0.347618968734 -0.101509318134 --0.347685300148 -0.110572356777 --0.347751392539 -0.119637576193 --0.347817266305 -0.128704531188 --0.347647489938 -0.138026327653 --0.34749367377 -0.14733666834 --0.347591304042 -0.156383309829 --0.347688810028 -0.165433421408 --0.347786179708 -0.174486579335 --0.347569923768 -0.183727541225 --0.347369351937 -0.192954103975 --0.347498020556 -0.201982380141 --0.34762670284 -0.211015467292 --0.347755388682 -0.220052972594 --0.347493098433 -0.229194608313 --0.347246145816 -0.238318962132 --0.347405566427 -0.247327223388 --0.347565159292 -0.256341718324 --0.347724920797 -0.265362069175 --0.338703945726 --0.264824761986 --0.338556832642 --0.255822731636 --0.338409872532 --0.246826574177 --0.338263060245 --0.237836669818 --0.338490645655 --0.228729026973 --0.338732371129 --0.219604160402 --0.338613901838 --0.210585148594 --0.338495435498 --0.201570571817 --0.338376958897 --0.19256080853 --0.338561772823 --0.183351828441 --0.338761052942 --0.174128505518 --0.338671434022 --0.165093982099 --0.338581693448 --0.156062521305 --0.338491830368 --0.14703454261 --0.338633511217 --0.137742504225 --0.338789904079 --0.128439048974 --0.338729322595 --0.119390853644 --0.338668539411 --0.110344406028 --0.338607534028 --0.101300149366 --0.338705832705 --0.0919445511326 --0.33881904894 --0.0825805322156 --0.338787642224 --0.07352077647 --0.338755962601 --0.0644615102707 --0.338724017988 --0.0554031914221 --0.338778656972 --0.046004532305 --0.338848321817 --0.0366004946955 --0.338846159198 --0.0275315237623 --0.338843717411 --0.0184618172168 --0.338840995161 --0.00939183773559 --0.338839561169 -2.16840434497e-19 --0.338840995161 -0.00939183773559 --0.338843717411 -0.0184618172168 --0.338846159198 -0.0275315237623 --0.338848321817 -0.0366004946955 --0.338778656972 -0.046004532305 --0.338724017988 -0.0554031914221 --0.338755962601 -0.0644615102707 --0.338787642224 -0.07352077647 --0.33881904894 -0.0825805322156 --0.338705832705 -0.0919445511326 --0.338607534028 -0.101300149366 --0.338668539411 -0.110344406028 --0.338729322595 -0.119390853644 --0.338789904079 -0.128439048974 --0.338633511217 -0.137742504225 --0.338491830368 -0.14703454261 --0.338581693448 -0.156062521305 --0.338671434022 -0.165093982099 --0.338761052942 -0.174128505518 --0.338561772823 -0.183351828441 --0.338376958897 -0.19256080853 --0.338495435498 -0.201570571817 --0.338613901838 -0.210585148594 --0.338732371129 -0.219604160402 --0.338490645655 -0.228729026973 --0.338263060245 -0.237836669818 --0.338409872532 -0.246826574177 --0.338556832642 -0.255822731636 --0.338703945726 -0.264824761986 --0.329668467414 --0.309133374479 --0.329508027268 --0.300167561665 --0.329347889606 --0.291209159149 --0.329188037071 --0.282258495016 --0.329435055643 --0.273283920838 --0.329694652245 --0.26428938609 --0.329560171692 --0.255305631414 --0.329425827107 --0.246327772219 --0.329291615245 --0.237356178995 --0.329499866398 --0.228265173503 --0.329721050949 --0.219156996323 --0.329612780628 --0.210156419488 --0.329504510411 --0.201160289646 --0.329396216656 --0.192168993279 --0.32956529162 --0.1829775173 --0.329747604651 --0.173771741456 --0.329665713586 --0.164755793686 --0.329583725599 --0.155742926683 --0.329501631894 --0.146733560644 --0.329631200074 --0.137459727479 --0.329774234646 --0.128174515674 --0.3297189285 --0.119145022145 --0.329663424504 --0.110117291454 --0.329607736431 --0.101091767582 --0.329697577919 --0.0917549152772 --0.329801055354 --0.0824096693039 --0.329772452306 --0.0733687174489 --0.32974360883 --0.0643282677537 --0.32971452015 --0.0552887718434 --0.329764341224 --0.045909206179 --0.32982791569 --0.0365242821668 --0.329826091023 --0.02747418586 --0.32982401459 --0.0184233647268 --0.329821673566 --0.00937227570326 --0.329820434085 -0 --0.329821673566 -0.00937227570326 --0.32982401459 -0.0184233647268 --0.329826091023 -0.02747418586 --0.32982791569 -0.0365242821668 --0.329764341224 -0.045909206179 --0.32971452015 -0.0552887718434 --0.32974360883 -0.0643282677537 --0.329772452306 -0.0733687174489 --0.329801055354 -0.0824096693039 --0.329697577919 -0.0917549152772 --0.329607736431 -0.101091767582 --0.329663424504 -0.110117291454 --0.3297189285 -0.119145022145 --0.329774234646 -0.128174515674 --0.329631200074 -0.137459727479 --0.329501631894 -0.146733560644 --0.329583725599 -0.155742926683 --0.329665713586 -0.164755793686 --0.329747604651 -0.173771741456 --0.32956529162 -0.1829775173 --0.329396216656 -0.192168993279 --0.329504510411 -0.201160289646 --0.329612780628 -0.210156419488 --0.329721050949 -0.219156996323 --0.329499866398 -0.228265173503 --0.329291615245 -0.237356178995 --0.329425827107 -0.246327772219 --0.329560171692 -0.255305631414 --0.329694652245 -0.26428938609 --0.329435055643 -0.273283920838 --0.329188037071 -0.282258495016 --0.329347889606 -0.291209159149 --0.329508027268 -0.300167561665 --0.329668467414 -0.309133374479 --0.320744955908 --0.310080821199 --0.320570485259 --0.301085709411 --0.320396332273 --0.292098067262 --0.320222487522 --0.283118241017 --0.320490865517 --0.274122269059 --0.320772909737 --0.2651063449 --0.320626629035 --0.256093511333 --0.320480492706 --0.247086616645 --0.320334508839 --0.238086049007 --0.32056082163 --0.228971393051 --0.3208011786 --0.219839568269 --0.320683364054 --0.210810061716 --0.320565546099 --0.201785038709 --0.320447710867 --0.192764909758 --0.320631492654 --0.183547841764 --0.320829647041 --0.174316461301 --0.320740481599 --0.165271688566 --0.320651204451 --0.156230017577 --0.320561825459 --0.147191889691 --0.320702765438 --0.137890886196 --0.32085832212 --0.128578484254 --0.320798018684 --0.119520217596 --0.320737505199 --0.110463727342 --0.32067678822 --0.101409461806 --0.320774623818 --0.0920442467726 --0.320887269369 --0.082670622224 --0.320855943618 --0.0736008989086 --0.320824374503 --0.0645316776622 --0.320792536323 --0.0554634155629 --0.320846982601 --0.046054709568 --0.320916368318 --0.0366406242064 --0.320914123314 --0.0275617125442 --0.320911616353 --0.0184820628573 --0.320908825258 --0.00940213754122 --0.320907354095 -2.16840434497e-19 --0.320908825258 -0.00940213754122 --0.320911616353 -0.0184820628573 --0.320914123314 -0.0275617125442 --0.320916368318 -0.0366406242064 --0.320846982601 -0.046054709568 --0.320792536323 -0.0554634155629 --0.320824374503 -0.0645316776622 --0.320855943618 -0.0736008989086 --0.320887269369 -0.082670622224 --0.320774623818 -0.0920442467726 --0.32067678822 -0.101409461806 --0.320737505199 -0.110463727342 --0.320798018684 -0.119520217596 --0.32085832212 -0.128578484254 --0.320702765438 -0.137890886196 --0.320561825459 -0.147191889691 --0.320651204451 -0.156230017577 --0.320740481599 -0.165271688566 --0.320829647041 -0.174316461301 --0.320631492654 -0.183547841764 --0.320447710867 -0.192764909758 --0.320565546099 -0.201785038709 --0.320683364054 -0.210810061716 --0.3208011786 -0.219839568269 --0.32056082163 -0.228971393051 --0.320334508839 -0.238086049007 --0.320480492706 -0.247086616645 --0.320626629035 -0.256093511333 --0.320772909737 -0.2651063449 --0.320490865517 -0.274122269059 --0.320222487522 -0.283118241017 --0.320396332273 -0.292098067262 --0.320570485259 -0.301085709411 --0.320744955908 -0.310080821199 --0.311114723926 --0.328856158238 --0.311449232147 --0.319973503456 --0.311797981005 --0.31106817986 --0.311609576738 --0.30204258283 --0.311421518281 --0.293024526883 --0.311233804985 --0.284014382781 --0.311523386256 --0.274996024057 --0.311827700487 --0.26595770441 --0.31166971783 --0.256914602091 --0.311511898693 --0.247877492559 --0.311354240764 --0.238846764529 --0.31159846641 --0.229707402238 --0.311857843131 --0.220550864197 --0.311730550875 --0.211491228355 --0.311603258882 --0.202436122224 --0.31147596671 --0.193385958687 --0.311674345544 --0.184142189101 --0.311888223853 --0.174884095487 --0.311791851552 --0.165809300296 --0.311695354516 --0.156737627306 --0.311598735632 --0.147669521559 --0.311750947083 --0.138340195759 --0.311918924971 --0.128999456353 --0.311853663607 --0.119911201227 --0.311788188873 --0.110824740835 --0.311722492926 --0.101740524498 --0.311828242874 --0.0923457631941 --0.31194996713 --0.0829425714879 --0.311915959117 --0.0738428572914 --0.31188167856 --0.064743643803 --0.311847114613 --0.0556453983994 --0.311906162326 --0.0462063543326 --0.311981312639 --0.036761905193 --0.311978656937 --0.0276529557015 --0.311975712602 --0.0185432527489 --0.311972466663 --0.0094332665196 --0.311970766771 -0 --0.311972466663 -0.0094332665196 --0.311975712602 -0.0185432527489 --0.311978656937 -0.0276529557015 --0.311981312639 -0.036761905193 --0.311906162326 -0.0462063543326 --0.311847114613 -0.0556453983994 --0.31188167856 -0.064743643803 --0.311915959117 -0.0738428572914 --0.31194996713 -0.0829425714879 --0.311828242874 -0.0923457631941 --0.311722492926 -0.101740524498 --0.311788188873 -0.110824740835 --0.311853663607 -0.119911201227 --0.311918924971 -0.128999456353 --0.311750947083 -0.138340195759 --0.311598735632 -0.147669521559 --0.311695354516 -0.156737627306 --0.311791851552 -0.165809300296 --0.311888223853 -0.174884095487 --0.311674345544 -0.184142189101 --0.31147596671 -0.193385958687 --0.311603258882 -0.202436122224 --0.311730550875 -0.211491228355 --0.311857843131 -0.220550864197 --0.31159846641 -0.229707402238 --0.311354240764 -0.238846764529 --0.311511898693 -0.247877492559 --0.31166971783 -0.256914602091 --0.311827700487 -0.26595770441 --0.311523386256 -0.274996024057 --0.311233804985 -0.284014382781 --0.311421518281 -0.293024526883 --0.311609576738 -0.30204258283 --0.311797981005 -0.31106817986 --0.311449232147 -0.319973503456 --0.311114723926 -0.328856158238 --0.302125836538 --0.328291634425 --0.302433525987 --0.319421559786 --0.302754310621 --0.310528889449 --0.302581158781 --0.301519011118 --0.302408323783 --0.292516681467 --0.302235817967 --0.283522281028 --0.302502184569 --0.274517504472 --0.30278208936 --0.265492815763 --0.30263691053 --0.256465573218 --0.302491882951 --0.247444343963 --0.302346996219 --0.238429501994 --0.302571624784 --0.229304587546 --0.302810180541 --0.220162547137 --0.302693216298 --0.21111891548 --0.302576257459 --0.202079828633 --0.302459292134 --0.193045684199 --0.302641726059 --0.183817124118 --0.302838409123 --0.174574281554 --0.302749888846 --0.165515614066 --0.302661260454 --0.156460089553 --0.302572498385 --0.147408126096 --0.302712419601 --0.138094624245 --0.302866863534 --0.128769753946 --0.30280695806 --0.119697730505 --0.302746850428 --0.110627514483 --0.302686545731 --0.101559554414 --0.302783699683 --0.0921810880424 --0.302895547776 --0.0827942164954 --0.302864399137 --0.0737108225267 --0.302832994055 --0.0646279402388 --0.302801320423 --0.0555460313023 --0.302855480935 --0.0461235884241 --0.302924455399 --0.036695758815 --0.302922148736 --0.0276031916988 --0.30291957004 --0.0185098789931 --0.302916707961 --0.00941628774828 --0.302915206788 -0 --0.302916707961 -0.00941628774828 --0.30291957004 -0.0185098789931 --0.302922148736 -0.0276031916988 --0.302924455399 -0.036695758815 --0.302855480935 -0.0461235884241 --0.302801320423 -0.0555460313023 --0.302832994055 -0.0646279402388 --0.302864399137 -0.0737108225267 --0.302895547776 -0.0827942164954 --0.302783699683 -0.0921810880424 --0.302686545731 -0.101559554414 --0.302746850428 -0.110627514483 --0.30280695806 -0.119697730505 --0.302866863534 -0.128769753946 --0.302712419601 -0.138094624245 --0.302572498385 -0.147408126096 --0.302661260454 -0.156460089553 --0.302749888846 -0.165515614066 --0.302838409123 -0.174574281554 --0.302641726059 -0.183817124118 --0.302459292134 -0.193045684199 --0.302576257459 -0.202079828633 --0.302693216298 -0.21111891548 --0.302810180541 -0.220162547137 --0.302571624784 -0.229304587546 --0.302346996219 -0.238429501994 --0.302491882951 -0.247444343963 --0.30263691053 -0.256465573218 --0.30278208936 -0.265492815763 --0.302502184569 -0.274517504472 --0.302235817967 -0.283522281028 --0.302408323783 -0.292516681467 --0.302581158781 -0.301519011118 --0.302754310621 -0.310528889449 --0.302433525987 -0.319421559786 --0.302125836538 -0.328291634425 --0.29314643865 --0.327728855145 --0.293427325558 --0.318871312022 --0.293720169091 --0.309991229175 --0.293562264739 --0.300997033758 --0.293404642568 --0.292010411142 --0.293247313591 --0.283031715637 --0.293490483838 --0.274040456003 --0.293746000929 --0.265029333695 --0.293613598777 --0.256017906715 --0.293481340678 --0.247012524896 --0.293349211326 --0.238013547422 --0.293554259896 --0.228903017001 --0.293772017929 --0.219775404749 --0.293665376869 --0.210747742834 --0.293558740235 --0.201724640336 --0.293452095477 --0.192706489384 --0.293618591561 --0.183493068299 --0.293798088144 --0.17426540047 --0.293717404946 --0.165222823118 --0.293636628613 --0.156183402794 --0.293555727237 --0.14714755589 --0.2936833818 --0.137849811617 --0.29382429695 --0.128540731022 --0.293769736876 --0.119484906426 --0.29371499581 --0.110430896087 --0.293660067826 --0.10137914843 --0.293748646038 --0.0920169045105 --0.293850646981 --0.0826462825828 --0.293822336078 --0.0735791704675 --0.293793790503 --0.0645125811023 --0.293765009486 --0.0554469706399 --0.293814287108 --0.0460410494009 --0.293877098597 --0.0366297619252 --0.293875140272 --0.0275535403926 --0.293872927117 --0.018476580657 --0.293870448761 --0.00939934751652 --0.293869139014 -2.16840434497e-19 --0.293870448761 -0.00939934751652 --0.293872927117 -0.018476580657 --0.293875140272 -0.0275535403926 --0.293877098597 -0.0366297619252 --0.293814287108 -0.0460410494009 --0.293765009486 -0.0554469706399 --0.293793790503 -0.0645125811023 --0.293822336078 -0.0735791704675 --0.293850646981 -0.0826462825828 --0.293748646038 -0.0920169045105 --0.293660067826 -0.10137914843 --0.29371499581 -0.110430896087 --0.293769736876 -0.119484906426 --0.29382429695 -0.128540731022 --0.2936833818 -0.137849811617 --0.293555727237 -0.14714755589 --0.293636628613 -0.156183402794 --0.293717404946 -0.165222823118 --0.293798088144 -0.17426540047 --0.293618591561 -0.183493068299 --0.293452095477 -0.192706489384 --0.293558740235 -0.201724640336 --0.293665376869 -0.210747742834 --0.293772017929 -0.219775404749 --0.293554259896 -0.228903017001 --0.293349211326 -0.238013547422 --0.293481340678 -0.247012524896 --0.293613598777 -0.256017906715 --0.293746000929 -0.265029333695 --0.293490483838 -0.274040456003 --0.293247313591 -0.283031715637 --0.293404642568 -0.292010411142 --0.293562264739 -0.300997033758 --0.293720169091 -0.309991229175 --0.293427325558 -0.318871312022 --0.29314643865 -0.327728855145 --0.284176859091 --0.327167778104 --0.28443097868 --0.318322716535 --0.284695904457 --0.309455167689 --0.284553221241 --0.300476629955 --0.284410797702 --0.29150568456 --0.28426862633 --0.282542669054 --0.284488611393 --0.273564850113 --0.284719764582 --0.264567223434 --0.28460013555 --0.25557159808 --0.284480635905 --0.246582025975 --0.284361246234 --0.237598874944 --0.284546729397 --0.228502671046 --0.284743712645 --0.219389428457 --0.284647379993 --0.210377692649 --0.284551051944 --0.201370535053 --0.284454715117 --0.192368351861 --0.284605283363 --0.18316999699 --0.284767618683 --0.173957439498 --0.284694761086 --0.164930917307 --0.284621819624 --0.155907562849 --0.284548769609 --0.146887801775 --0.284664176057 --0.137605736971 --0.284791570058 --0.128312364824 --0.284742341517 --0.119272701278 --0.284692961016 --0.110234870222 --0.284643409613 --0.101199308241 --0.284723413626 --0.0918532043858 --0.284815572242 --0.0824987536413 --0.284790101687 --0.0734478900564 --0.284764410932 --0.0643975562849 --0.284738525489 --0.0553482114243 --0.28478293923 --0.0459587369183 --0.284839594095 --0.0365639119206 --0.284837971153 --0.0275039987135 --0.284836118021 --0.0184433563703 --0.284834022761 --0.00938244496082 --0.284832910131 -2.16840434497e-19 --0.284834022761 -0.00938244496082 --0.284836118021 -0.0184433563703 --0.284837971153 -0.0275039987135 --0.284839594095 -0.0365639119206 --0.28478293923 -0.0459587369183 --0.284738525489 -0.0553482114243 --0.284764410932 -0.0643975562849 --0.284790101687 -0.0734478900564 --0.284815572242 -0.0824987536413 --0.284723413626 -0.0918532043858 --0.284643409613 -0.101199308241 --0.284692961016 -0.110234870222 --0.284742341517 -0.119272701278 --0.284791570058 -0.128312364824 --0.284664176057 -0.137605736971 --0.284548769609 -0.146887801775 --0.284621819624 -0.155907562849 --0.284694761086 -0.164930917307 --0.284767618683 -0.173957439498 --0.284605283363 -0.18316999699 --0.284454715117 -0.192368351861 --0.284551051944 -0.201370535053 --0.284647379993 -0.210377692649 --0.284743712645 -0.219389428457 --0.284546729397 -0.228502671046 --0.284361246234 -0.237598874944 --0.284480635905 -0.246582025975 --0.28460013555 -0.25557159808 --0.284719764582 -0.264567223434 --0.284488611393 -0.273564850113 --0.28426862633 -0.282542669054 --0.284410797702 -0.29150568456 --0.284553221241 -0.300476629955 --0.284695904457 -0.309455167689 --0.28443097868 -0.318322716535 --0.284176859091 -0.327167778104 --0.275069696207 --0.32802076568 --0.275347961655 --0.319159413297 --0.27563805029 --0.310275554138 --0.275481596181 --0.301271611763 --0.27532544883 --0.292275331642 --0.275169582419 --0.283287047536 --0.275410476556 --0.27429072797 --0.275663610449 --0.265274603837 --0.275532422884 --0.256253778465 --0.27540136729 --0.24723904213 --0.275270436511 --0.238230778675 --0.275473603745 --0.229114122226 --0.275689364234 --0.219980426346 --0.275583680425 --0.210943619606 --0.275477992612 --0.201911421839 --0.275372300884 --0.192884249624 --0.275537310898 --0.183663770114 --0.27571520061 --0.174429080312 --0.275635211471 --0.165377578693 --0.275555126561 --0.156329268619 --0.275474929424 --0.147284586451 --0.2756014848 --0.1379790344 --0.275741156471 --0.1286621608 --0.275687035827 --0.119597566138 --0.275632733326 --0.110534813151 --0.275578248208 --0.101474346538 --0.275666089959 --0.0921037267273 --0.275767223797 --0.0827247425563 --0.275739104616 --0.0736489508499 --0.275710744018 --0.064573688736 --0.275682160731 --0.0554994190123 --0.275731100507 --0.0460847562483 --0.275793436609 --0.0366647230362 --0.275791397737 --0.0275798412575 --0.275789106002 --0.0184942186436 --0.275786566269 --0.00940832041669 --0.27578523136 -0 --0.275786566269 -0.00940832041669 --0.275789106002 -0.0184942186436 --0.275791397737 -0.0275798412575 --0.275793436609 -0.0366647230362 --0.275731100507 -0.0460847562483 --0.275682160731 -0.0554994190123 --0.275710744018 -0.064573688736 --0.275739104616 -0.0736489508499 --0.275767223797 -0.0827247425563 --0.275666089959 -0.0921037267273 --0.275578248208 -0.101474346538 --0.275632733326 -0.110534813151 --0.275687035827 -0.119597566138 --0.275741156471 -0.1286621608 --0.2756014848 -0.1379790344 --0.275474929424 -0.147284586451 --0.275555126561 -0.156329268619 --0.275635211471 -0.165377578693 --0.27571520061 -0.174429080312 --0.275537310898 -0.183663770114 --0.275372300884 -0.192884249624 --0.275477992612 -0.201911421839 --0.275583680425 -0.210943619606 --0.275689364234 -0.219980426346 --0.275473603745 -0.229114122226 --0.275270436511 -0.238230778675 --0.27540136729 -0.24723904213 --0.275532422884 -0.256253778465 --0.275663610449 -0.265274603837 --0.275410476556 -0.27429072797 --0.275169582419 -0.283287047536 --0.27532544883 -0.292275331642 --0.275481596181 -0.301271611763 --0.27563805029 -0.310275554138 --0.275347961655 -0.319159413297 --0.275069696207 -0.32802076568 --0.265835698426 --0.373411774802 --0.266177956481 --0.364682933089 --0.26653254893 --0.355928961386 --0.266335276732 --0.346915553692 --0.266138532803 --0.337911547528 --0.265942307909 --0.328917250362 --0.266244553571 --0.320038643355 --0.266559633489 --0.311137530782 --0.266389510055 --0.302106948793 --0.26621972196 --0.293084102499 --0.26605025587 --0.284069337336 --0.266311930036 --0.275053487281 --0.266586890731 --0.266017831502 --0.266444217657 --0.256970560325 --0.266301685546 --0.247929429822 --0.266159305883 --0.238894834789 --0.266380051245 --0.229756630092 --0.266614456726 --0.22060136464 --0.266499479508 --0.211538241337 --0.266384501534 --0.202479767561 --0.266269522967 --0.19342635438 --0.266448887389 --0.184182603364 --0.26664222367 --0.174924621342 --0.266555149775 --0.165846884457 --0.266467968736 --0.156772363419 --0.266380669848 --0.147701492821 --0.266518299074 --0.138371257307 --0.266670159756 --0.129029686623 --0.266611182675 --0.119938897097 --0.266552005148 --0.110849957544 --0.266492621864 --0.101763320972 --0.266588251646 --0.0923669585861 --0.266698301529 --0.0829622057646 --0.266667540043 --0.0738602090719 --0.266636528383 --0.0647587474214 --0.266605265536 --0.0556582813833 --0.266658699579 --0.0462171781477 --0.266726671979 --0.0367706828153 --0.266724225018 --0.0276595573363 --0.266721501469 --0.0185476783533 --0.266718507691 --0.00943551714935 --0.266716946307 -2.16840434497e-19 --0.266718507691 -0.00943551714935 --0.266721501469 -0.0185476783533 --0.266724225018 -0.0276595573363 --0.266726671979 -0.0367706828153 --0.266658699579 -0.0462171781477 --0.266605265536 -0.0556582813833 --0.266636528383 -0.0647587474214 --0.266667540043 -0.0738602090719 --0.266698301529 -0.0829622057646 --0.266588251646 -0.0923669585861 --0.266492621864 -0.101763320972 --0.266552005148 -0.110849957544 --0.266611182675 -0.119938897097 --0.266670159756 -0.129029686623 --0.266518299074 -0.138371257307 --0.266380669848 -0.147701492821 --0.266467968736 -0.156772363419 --0.266555149775 -0.165846884457 --0.26664222367 -0.174924621342 --0.266448887389 -0.184182603364 --0.266269522967 -0.19342635438 --0.266384501534 -0.202479767561 --0.266499479508 -0.211538241337 --0.266614456726 -0.22060136464 --0.266380051245 -0.229756630092 --0.266159305883 -0.238894834789 --0.266301685546 -0.247929429822 --0.266444217657 -0.256970560325 --0.266586890731 -0.266017831502 --0.266311930036 -0.275053487281 --0.26605025587 -0.284069337336 --0.26621972196 -0.293084102499 --0.266389510055 -0.302106948793 --0.266559633489 -0.311137530782 --0.266244553571 -0.320038643355 --0.265942307909 -0.328917250362 --0.266138532803 -0.337911547528 --0.266335276732 -0.346915553692 --0.26653254893 -0.355928961386 --0.266177956481 -0.364682933089 --0.265835698426 -0.373411774802 --0.256843421781 --0.372880595957 --0.257155007289 --0.36416138265 --0.257477805431 --0.355417091688 --0.257298396159 --0.3464167442 --0.257119466541 --0.33742581245 --0.256941014122 --0.328444591038 --0.257216182568 --0.319576498446 --0.257503022997 --0.310685962434 --0.257348301974 --0.301668563295 --0.257193874445 --0.292658909373 --0.257039745308 --0.28365734543 --0.257277976479 --0.274652829833 --0.257528290573 --0.26562856627 --0.257398547393 --0.256594604071 --0.257268924679 --0.247566782164 --0.257139440741 --0.238545505432 --0.25734040131 --0.229419379175 --0.257553781186 --0.220276227174 --0.25744922762 --0.21122651492 --0.25734467829 --0.202181475109 --0.257240133263 --0.193141501148 --0.257403391127 --0.183910453894 --0.257579371662 --0.174665210721 --0.257500231225 --0.165600993337 --0.257420975799 --0.156540005282 --0.257341617204 --0.147482669911 --0.25746685232 --0.138165657456 --0.257605031929 --0.128837342054 --0.257551451243 --0.119760156431 --0.257497704831 --0.1106848343 --0.257443770025 --0.101611825279 --0.25753072048 --0.0922290734265 --0.2576308004 --0.0828379535489 --0.257602913149 --0.0737496354662 --0.257574802903 --0.0646618612348 --0.257546463706 --0.0555750888329 --0.257594968005 --0.0461478534607 --0.257656703538 --0.0367152422213 --0.257654595294 --0.0276178472825 --0.257652246569 --0.0185197058216 --0.257649639957 --0.00942128641518 --0.257648272323 -0 --0.257649639957 -0.00942128641518 --0.257652246569 -0.0185197058216 --0.257654595294 -0.0276178472825 --0.257656703538 -0.0367152422213 --0.257594968005 -0.0461478534607 --0.257546463706 -0.0555750888329 --0.257574802903 -0.0646618612348 --0.257602913149 -0.0737496354662 --0.2576308004 -0.0828379535489 --0.25753072048 -0.0922290734265 --0.257443770025 -0.101611825279 --0.257497704831 -0.1106848343 --0.257551451243 -0.119760156431 --0.257605031929 -0.128837342054 --0.25746685232 -0.138165657456 --0.257341617204 -0.147482669911 --0.257420975799 -0.156540005282 --0.257500231225 -0.165600993337 --0.257579371662 -0.174665210721 --0.257403391127 -0.183910453894 --0.257240133263 -0.193141501148 --0.25734467829 -0.202181475109 --0.25744922762 -0.21122651492 --0.257553781186 -0.220276227174 --0.25734040131 -0.229419379175 --0.257139440741 -0.238545505432 --0.257268924679 -0.247566782164 --0.257398547393 -0.256594604071 --0.257528290573 -0.26562856627 --0.257277976479 -0.274652829833 --0.257039745308 -0.28365734543 --0.257193874445 -0.292658909373 --0.257348301974 -0.301668563295 --0.257503022997 -0.310685962434 --0.257216182568 -0.319576498446 --0.256941014122 -0.328444591038 --0.257119466541 -0.33742581245 --0.257298396159 -0.3464167442 --0.257477805431 -0.355417091688 --0.257155007289 -0.36416138265 --0.256843421781 -0.372880595957 --0.247858830684 --0.372350682429 --0.248139748072 --0.36364105674 --0.248430763083 --0.354906400577 --0.248269207727 --0.345919098863 --0.248108077683 --0.336941221707 --0.247947377225 --0.327973061263 --0.248195494053 --0.319115453985 --0.248454115439 --0.310235439298 --0.248314778814 --0.30123120773 --0.248175705427 --0.292234737742 --0.248036906388 --0.283246360049 --0.248251707179 --0.274253144337 --0.248477387284 --0.26524021369 --0.248360551802 --0.256219532139 --0.24824383448 --0.247205014174 --0.248127241492 --0.238197039265 --0.248308409796 --0.229082930015 --0.248500769484 --0.21995184157 --0.248406648761 --0.210915533416 --0.248312530916 --0.201883909558 --0.248218405357 --0.192857355537 --0.248365559114 --0.183638953896 --0.248524193066 --0.174406395508 --0.248452968328 --0.16535568232 --0.248381632033 --0.156308202787 --0.248310225241 --0.147264398477 --0.248423066874 --0.137960555697 --0.248547572599 --0.128645426521 --0.248499390129 --0.119581829515 --0.248451058799 --0.110520106659 --0.248402562051 --0.101460702741 --0.248480838287 --0.092091500013 --0.248570959733 --0.0827139545225 --0.248545949998 --0.0736392980185 --0.248520733324 --0.0645651926218 --0.2484953156 --0.055492096413 --0.248538892737 --0.0460786675632 --0.248594401221 --0.03665987857 --0.248592631649 --0.0275761953393 --0.248590651279 --0.0184917720928 --0.248588437081 --0.0094070755878 --0.248587262899 -0 --0.248588437081 -0.0094070755878 --0.248590651279 -0.0184917720928 --0.248592631649 -0.0275761953393 --0.248594401221 -0.03665987857 --0.248538892737 -0.0460786675632 --0.2484953156 -0.055492096413 --0.248520733324 -0.0645651926218 --0.248545949998 -0.0736392980185 --0.248570959733 -0.0827139545225 --0.248480838287 -0.092091500013 --0.248402562051 -0.101460702741 --0.248451058799 -0.110520106659 --0.248499390129 -0.119581829515 --0.248547572599 -0.128645426521 --0.248423066874 -0.137960555697 --0.248310225241 -0.147264398477 --0.248381632033 -0.156308202787 --0.248452968328 -0.16535568232 --0.248524193066 -0.174406395508 --0.248365559114 -0.183638953896 --0.248218405357 -0.192857355537 --0.248312530916 -0.201883909558 --0.248406648761 -0.210915533416 --0.248500769484 -0.21995184157 --0.248308409796 -0.229082930015 --0.248127241492 -0.238197039265 --0.24824383448 -0.247205014174 --0.248360551802 -0.256219532139 --0.248477387284 -0.26524021369 --0.248251707179 -0.274253144337 --0.248036906388 -0.283246360049 --0.248175705427 -0.292234737742 --0.248314778814 -0.30123120773 --0.248454115439 -0.310235439298 --0.248195494053 -0.319115453985 --0.247947377225 -0.327973061263 --0.248108077683 -0.336941221707 --0.248269207727 -0.345919098863 --0.248430763083 -0.354906400577 --0.248139748072 -0.36364105674 --0.247858830684 -0.372350682429 --0.238882287023 --0.371822026727 --0.239132569721 --0.363121940147 --0.23939182484 --0.354396880892 --0.239248099843 --0.345422616533 --0.239104751569 --0.336457773771 --0.238961790726 --0.32750266724 --0.239182858065 --0.318655488508 --0.239413269513 --0.309785951408 --0.239289307422 --0.300794878531 --0.239165589885 --0.291811572629 --0.239042111586 --0.282836367078 --0.239233481465 --0.273854392205 --0.239434545483 --0.264852747826 --0.239330604819 --0.255845331518 --0.239226779567 --0.246844107646 --0.239123059229 --0.237849435776 --0.239284449974 --0.228747282459 --0.239455822079 --0.219628201687 --0.239372118069 --0.210605281392 --0.239288415559 --0.201587050865 --0.239204704207 --0.192573903105 --0.239335771486 --0.183368096643 --0.239477060543 --0.174148168886 --0.23941373178 --0.165110938684 --0.239350318113 --0.156076955185 --0.239286849167 --0.147046658371 --0.239387300514 --0.13775591985 --0.239498154068 --0.128453921435 --0.239455375927 --0.119403898574 --0.239412448761 --0.110355763173 --0.239369373251 --0.101309945732 --0.23943898742 --0.0919542342762 --0.239519163653 --0.0825902078698 --0.239497028518 --0.0735291935104 --0.239474696873 --0.0644687369172 --0.239452191847 --0.0554092970245 --0.239490851569 --0.0460096154687 --0.239540143606 --0.0366045886723 --0.239538712155 --0.0275345987278 --0.239537082624 --0.0184638753228 --0.239535266169 --0.009392883356 --0.239534308316 --2.16840434497e-19 --0.239535266169 -0.009392883356 --0.239537082624 -0.0184638753228 --0.239538712155 -0.0275345987278 --0.239540143606 -0.0366045886723 --0.239490851569 -0.0460096154687 --0.239452191847 -0.0554092970245 --0.239474696873 -0.0644687369172 --0.239497028518 -0.0735291935104 --0.239519163653 -0.0825902078698 --0.23943898742 -0.0919542342762 --0.239369373251 -0.101309945732 --0.239412448761 -0.110355763173 --0.239455375927 -0.119403898574 --0.239498154068 -0.128453921435 --0.239387300514 -0.13775591985 --0.239286849167 -0.147046658371 --0.239350318113 -0.156076955185 --0.23941373178 -0.165110938684 --0.239477060543 -0.174148168886 --0.239335771486 -0.183368096643 --0.239204704207 -0.192573903105 --0.239288415559 -0.201587050865 --0.239372118069 -0.210605281392 --0.239455822079 -0.219628201687 --0.239284449974 -0.228747282459 --0.239123059229 -0.237849435776 --0.239226779567 -0.246844107646 --0.239330604819 -0.255845331518 --0.239434545483 -0.264852747826 --0.239233481465 -0.273854392205 --0.239042111586 -0.282836367078 --0.239165589885 -0.291811572629 --0.239289307422 -0.300794878531 --0.239413269513 -0.309785951408 --0.239182858065 -0.318655488508 --0.238961790726 -0.32750266724 --0.239104751569 -0.336457773771 --0.239248099843 -0.345422616533 --0.23939182484 -0.354396880892 --0.239132569721 -0.363121940147 --0.238882287023 -0.371822026727 --0.229651167689 --0.372628618266 --0.229927860609 --0.363916788693 --0.230214468241 --0.355179988105 --0.230055333409 --0.346184117298 --0.2298966246 --0.337197725325 --0.229738346453 --0.328221156938 --0.229982731598 --0.319360229871 --0.230237451662 --0.310476932009 --0.230100199264 --0.30146445936 --0.22996322397 --0.292459811701 --0.229826493489 --0.283463316686 --0.230038115602 --0.274465747101 --0.23026046152 --0.2654485128 --0.230145343804 --0.256419856395 --0.230030355863 --0.247397424641 --0.229915487123 --0.238381597951 --0.230093957864 --0.229262238546 --0.230283455294 --0.220125947072 --0.230190695811 --0.211081897015 --0.230097941071 --0.202042560598 --0.230005198313 --0.193008350415 --0.230150239999 --0.183783935068 --0.230306567083 --0.174545389225 --0.230236349911 --0.165487105809 --0.230166042246 --0.156432092014 --0.230095645653 --0.147380778756 --0.230206862782 --0.138070291722 --0.230329579231 --0.128748540587 --0.230282053326 --0.119677497547 --0.230234371529 --0.110608351528 --0.230186529656 --0.101541539237 --0.230263735966 --0.0921652269094 --0.230352597881 --0.0827805859827 --0.230327886942 --0.073698558281 --0.23030296403 --0.0646170846254 --0.230277841296 --0.0555366273984 --0.230320897489 --0.046115781938 --0.230375702657 --0.0366895767916 --0.230373864722 --0.027598537392 --0.230371805377 --0.0185067546307 --0.230369547691 --0.00941469741526 --0.230368369429 --2.16840434497e-19 --0.230369547691 -0.00941469741526 --0.230371805377 -0.0185067546307 --0.230373864722 -0.027598537392 --0.230375702657 -0.0366895767916 --0.230320897489 -0.046115781938 --0.230277841296 -0.0555366273984 --0.23030296403 -0.0646170846254 --0.230327886942 -0.073698558281 --0.230352597881 -0.0827805859827 --0.230263735966 -0.0921652269094 --0.230186529656 -0.101541539237 --0.230234371529 -0.110608351528 --0.230282053326 -0.119677497547 --0.230329579231 -0.128748540587 --0.230206862782 -0.138070291722 --0.230095645653 -0.147380778756 --0.230166042246 -0.156432092014 --0.230236349911 -0.165487105809 --0.230306567083 -0.174545389225 --0.230150239999 -0.183783935068 --0.230005198313 -0.193008350415 --0.230097941071 -0.202042560598 --0.230190695811 -0.211081897015 --0.230283455294 -0.220125947072 --0.230093957864 -0.229262238546 --0.229915487123 -0.238381597951 --0.230030355863 -0.247397424641 --0.230145343804 -0.256419856395 --0.23026046152 -0.2654485128 --0.230038115602 -0.274465747101 --0.229826493489 -0.283463316686 --0.22996322397 -0.292459811701 --0.230100199264 -0.30146445936 --0.230237451662 -0.310476932009 --0.229982731598 -0.319360229871 --0.229738346453 -0.328221156938 --0.2298966246 -0.337197725325 --0.230055333409 -0.346184117298 --0.230214468241 -0.355179988105 --0.229927860609 -0.363916788693 --0.229651167689 -0.372628618266 --0.220994941014 --0.400457983381 --0.220796836909 --0.391455670622 --0.220599417687 --0.382464710489 --0.220402670336 --0.373485369837 --0.220705604405 --0.364760912175 --0.221019400392 --0.356011476985 --0.220844961006 --0.34699275816 --0.220670996657 --0.337983585591 --0.220497494956 --0.32898430237 --0.220765061248 --0.32010864618 --0.221043957073 --0.311210616228 --0.220893494423 --0.302175487323 --0.22074332497 --0.293148232322 --0.220593438842 --0.284129195963 --0.220825206628 --0.275114992477 --0.221068699281 --0.266081105443 --0.220942476341 --0.257029940099 --0.220816391706 --0.247985036323 --0.220690446453 --0.238946784032 --0.220885894279 --0.229809097373 --0.221093401456 --0.220654458361 --0.22099166152 --0.211588003408 --0.220889918757 --0.202526285822 --0.220788180227 --0.193469716226 --0.220947119109 --0.184225513209 --0.221118405658 --0.174967171159 --0.221041332835 --0.165886546205 --0.220964158444 --0.156809203509 --0.220886889677 --0.147735582409 --0.221008816149 --0.13840411933 --0.221143314275 --0.129061381095 --0.221091069823 --0.119968022118 --0.221038658411 --0.110876563039 --0.220986086113 --0.10178745969 --0.221070837132 --0.0923892806869 --0.221168330313 --0.0829827519957 --0.221141064697 --0.0738784041023 --0.221113566533 --0.0647746071628 --0.221085836768 --0.0556718287884 --0.221133262967 --0.0462285315435 --0.221193547048 --0.0367798557533 --0.221191309234 --0.0276664571392 --0.221188838454 --0.0185523046805 --0.221186125082 --0.0094378701392 --0.221184705469 -2.16840434497e-19 --0.221186125082 -0.0094378701392 --0.221188838454 -0.0185523046805 --0.221191309234 -0.0276664571392 --0.221193547048 -0.0367798557533 --0.221133262967 -0.0462285315435 --0.221085836768 -0.0556718287884 --0.221113566533 -0.0647746071628 --0.221141064697 -0.0738784041023 --0.221168330313 -0.0829827519957 --0.221070837132 -0.0923892806869 --0.220986086113 -0.10178745969 --0.221038658411 -0.110876563039 --0.221091069823 -0.119968022118 --0.221143314275 -0.129061381095 --0.221008816149 -0.13840411933 --0.220886889677 -0.147735582409 --0.220964158444 -0.156809203509 --0.221041332835 -0.165886546205 --0.221118405658 -0.174967171159 --0.220947119109 -0.184225513209 --0.220788180227 -0.193469716226 --0.220889918757 -0.202526285822 --0.22099166152 -0.211588003408 --0.221093401456 -0.220654458361 --0.220885894279 -0.229809097373 --0.220690446453 -0.238946784032 --0.220816391706 -0.247985036323 --0.220942476341 -0.257029940099 --0.221068699281 -0.266081105443 --0.220825206628 -0.275114992477 --0.220593438842 -0.284129195963 --0.22074332497 -0.293148232322 --0.220893494423 -0.302175487323 --0.221043957073 -0.311210616228 --0.220765061248 -0.32010864618 --0.220497494956 -0.32898430237 --0.220670996657 -0.337983585591 --0.220844961006 -0.34699275816 --0.221019400392 -0.356011476985 --0.220705604405 -0.364760912175 --0.220402670336 -0.373485369837 --0.220599417687 -0.382464710489 --0.220796836909 -0.391455670622 --0.220994941014 -0.400457983381 --0.211929408244 --0.399999319146 --0.211751793079 --0.39100744775 --0.211574780327 --0.382026933176 --0.21139836404 --0.373058041213 --0.21167034609 --0.364341306795 --0.211952070531 --0.355599650025 --0.211795652689 --0.346591475106 --0.211639660596 --0.337592847107 --0.211484083012 --0.32860411117 --0.211724326634 --0.319736889812 --0.211974732804 --0.310847347977 --0.21183981023 --0.301822857459 --0.211705145467 --0.292806240557 --0.211570739127 --0.28379784984 --0.211778851458 --0.274792743143 --0.211997480275 --0.265767993907 --0.211884303243 --0.256727559079 --0.211771239254 --0.247693388863 --0.211658295184 --0.238665871547 --0.211833774344 --0.229537859639 --0.21202007853 --0.22039293282 --0.211928863532 --0.211337296931 --0.211837644478 --0.202286407591 --0.211746422996 --0.193240662038 --0.21188910613 --0.184006642681 --0.212042871266 --0.174758515221 --0.211973788066 --0.165688783762 --0.211904618555 --0.156622346806 --0.21183536442 --0.147559632178 --0.211944782363 --0.138238765243 --0.212065490439 --0.128906651972 --0.212018699959 --0.119824259214 --0.211971749216 --0.110743768751 --0.211924654823 --0.10166564037 --0.212000658816 --0.0922783718241 --0.212088108523 --0.0828827715483 --0.212063735827 --0.073789441513 --0.212039157795 --0.0646966714358 --0.21201437672 --0.055604924832 --0.212056834501 --0.0461727422766 --0.212110842781 --0.0367351943393 --0.212108951366 --0.0276328569974 --0.212106845778 --0.0185297711111 --0.21210451682 --0.00942640638465 --0.212103292735 -0 --0.21210451682 -0.00942640638465 --0.212106845778 -0.0185297711111 --0.212108951366 -0.0276328569974 --0.212110842781 -0.0367351943393 --0.212056834501 -0.0461727422766 --0.21201437672 -0.055604924832 --0.212039157795 -0.0646966714358 --0.212063735827 -0.073789441513 --0.212088108523 -0.0828827715483 --0.212000658816 -0.0922783718241 --0.211924654823 -0.10166564037 --0.211971749216 -0.110743768751 --0.212018699959 -0.119824259214 --0.212065490439 -0.128906651972 --0.211944782363 -0.138238765243 --0.21183536442 -0.147559632178 --0.211904618555 -0.156622346806 --0.211973788066 -0.165688783762 --0.212042871266 -0.174758515221 --0.21188910613 -0.184006642681 --0.211746422996 -0.193240662038 --0.211837644478 -0.202286407591 --0.211928863532 -0.211337296931 --0.21202007853 -0.22039293282 --0.211833774344 -0.229537859639 --0.211658295184 -0.238665871547 --0.211771239254 -0.247693388863 --0.211884303243 -0.256727559079 --0.211997480275 -0.265767993907 --0.211778851458 -0.274792743143 --0.211570739127 -0.28379784984 --0.211705145467 -0.292806240557 --0.21183981023 -0.301822857459 --0.211974732804 -0.310847347977 --0.211724326634 -0.319736889812 --0.211484083012 -0.32860411117 --0.211639660596 -0.337592847107 --0.211795652689 -0.346591475106 --0.211952070531 -0.355599650025 --0.21167034609 -0.364341306795 --0.21139836404 -0.373058041213 --0.211574780327 -0.382026933176 --0.211751793079 -0.39100744775 --0.211929408244 -0.399999319146 --0.202869849478 --0.399541376814 --0.202712696236 --0.390559947777 --0.202556090028 --0.381589886262 --0.202400010611 --0.372631439127 --0.202641047395 --0.363922402073 --0.202890702501 --0.355188478546 --0.202752291936 --0.3461908379 --0.202614256673 --0.337202764084 --0.202476594184 --0.328224573762 --0.202689532236 --0.319365760649 --0.202911449756 --0.310484665841 --0.202792054323 --0.301470798791 --0.202672891877 --0.292464819335 --0.202553951438 --0.283467077735 --0.202738412805 --0.274471036891 --0.202932189177 --0.265455388782 --0.202832046461 --0.256425676115 --0.202731996348 --0.247402231082 --0.202632051945 --0.238385446136 --0.202787567151 --0.229267075752 --0.202952668451 --0.220131822758 --0.202871962478 --0.211086992288 --0.202791262101 --0.202046922709 --0.202710563058 --0.193012011593 --0.202836993681 --0.183788138023 --0.202973247156 --0.174550180993 --0.202912160297 --0.165491340874 --0.202850991874 --0.156435800269 --0.202789731884 --0.147383991006 --0.202886638407 --0.138073680215 --0.202993566323 --0.128752143435 --0.202952227409 --0.119680710324 --0.202910744758 --0.110611190482 --0.202869125949 --0.101544030597 --0.202936374374 --0.0921676246675 --0.203013782019 --0.0827829122403 --0.202992306606 --0.073700596384 --0.202970653262 --0.0646188490147 --0.202948824242 --0.055538130142 --0.202986309406 --0.0461170163846 --0.203034043512 --0.0366905511087 --0.203032493904 --0.027599268893 --0.203030743714 --0.0185072445957 --0.203028809091 --0.00941494645388 --0.203027790372 -0 --0.203028809091 -0.00941494645388 --0.203030743714 -0.0185072445957 --0.203032493904 -0.027599268893 --0.203034043512 -0.0366905511087 --0.202986309406 -0.0461170163846 --0.202948824242 -0.055538130142 --0.202970653262 -0.0646188490147 --0.202992306606 -0.073700596384 --0.203013782019 -0.0827829122403 --0.202936374374 -0.0921676246675 --0.202869125949 -0.101544030597 --0.202910744758 -0.110611190482 --0.202952227409 -0.119680710324 --0.202993566323 -0.128752143435 --0.202886638407 -0.138073680215 --0.202789731884 -0.147383991006 --0.202850991874 -0.156435800269 --0.202912160297 -0.165491340874 --0.202973247156 -0.174550180993 --0.202836993681 -0.183788138023 --0.202710563058 -0.193012011593 --0.202791262101 -0.202046922709 --0.202871962478 -0.211086992288 --0.202952668451 -0.220131822758 --0.202787567151 -0.229267075752 --0.202632051945 -0.238385446136 --0.202731996348 -0.247402231082 --0.202832046461 -0.256425676115 --0.202932189177 -0.265455388782 --0.202738412805 -0.274471036891 --0.202553951438 -0.283467077735 --0.202672891877 -0.292464819335 --0.202792054323 -0.301470798791 --0.202911449756 -0.310484665841 --0.202689532236 -0.319365760649 --0.202476594184 -0.328224573762 --0.202614256673 -0.337202764084 --0.202752291936 -0.3461908379 --0.202890702501 -0.355188478546 --0.202641047395 -0.363922402073 --0.202400010611 -0.372631439127 --0.202556090028 -0.381589886262 --0.202712696236 -0.390559947777 --0.202869849478 -0.399541376814 --0.193816669683 --0.399084150057 --0.193679970036 --0.390113163736 --0.193543750859 --0.381153545649 --0.193407984364 --0.372205530615 --0.193618092154 --0.363504165726 --0.19383569087 --0.354777958162 --0.193715277464 --0.345790850687 --0.193595187158 --0.33681332743 --0.193475423828 --0.327845681384 --0.193661067429 --0.31899523736 --0.19385451456 --0.310122550317 --0.193750635067 --0.301119310803 --0.193646955019 --0.29212396702 --0.19354346817 --0.283136860594 --0.193704289638 --0.274149843134 --0.193873220845 --0.265143254504 --0.193786095732 --0.256124256421 --0.193699050538 --0.247111546254 --0.193612101273 --0.238105509093 --0.193747656403 --0.22899673106 --0.193891566952 --0.219871107867 --0.193821370413 --0.210837080052 --0.193751175306 --0.201807822089 --0.193680987977 --0.192783745865 --0.193791181787 --0.183569977782 --0.193909937307 --0.17434215083 --0.193856833418 --0.165294198528 --0.193803654443 --0.156249551513 --0.193750400989 --0.147208651932 --0.193834807372 --0.137908852317 --0.193927945427 --0.128597840687 --0.193892054462 --0.119537364191 --0.193856034114 --0.110478812303 --0.19381989188 --0.10142262301 --0.193878398944 --0.0920570388636 --0.193945758688 --0.0826831656357 --0.193927183781 --0.0736118622871 --0.193908452826 --0.0645411342544 --0.193889561672 --0.0554714407577 --0.193922074895 --0.0460613506434 --0.193963525911 --0.0366459203568 --0.193962319758 --0.0275656911195 --0.193960935561 --0.0184847256548 --0.193959395881 --0.00940349007319 --0.193958586007 -2.16840434497e-19 --0.193959395881 -0.00940349007319 --0.193960935561 -0.0184847256548 --0.193962319758 -0.0275656911195 --0.193963525911 -0.0366459203568 --0.193922074895 -0.0460613506434 --0.193889561672 -0.0554714407577 --0.193908452826 -0.0645411342544 --0.193927183781 -0.0736118622871 --0.193945758688 -0.0826831656357 --0.193878398944 -0.0920570388636 --0.19381989188 -0.10142262301 --0.193856034114 -0.110478812303 --0.193892054462 -0.119537364191 --0.193927945427 -0.128597840687 --0.193834807372 -0.137908852317 --0.193750400989 -0.147208651932 --0.193803654443 -0.156249551513 --0.193856833418 -0.165294198528 --0.193909937307 -0.17434215083 --0.193791181787 -0.183569977782 --0.193680987977 -0.192783745865 --0.193751175306 -0.201807822089 --0.193821370413 -0.210837080052 --0.193891566952 -0.219871107867 --0.193747656403 -0.22899673106 --0.193612101273 -0.238105509093 --0.193699050538 -0.247111546254 --0.193786095732 -0.256124256421 --0.193873220845 -0.265143254504 --0.193704289638 -0.274149843134 --0.19354346817 -0.283136860594 --0.193646955019 -0.29212396702 --0.193750635067 -0.301119310803 --0.19385451456 -0.310122550317 --0.193661067429 -0.31899523736 --0.193475423828 -0.327845681384 --0.193595187158 -0.33681332743 --0.193715277464 -0.345790850687 --0.19383569087 -0.354777958162 --0.193618092154 -0.363504165726 --0.193407984364 -0.372205530615 --0.193543750859 -0.381153545649 --0.193679970036 -0.390113163736 --0.193816669683 -0.399084150057 --0.184536095083 --0.399791760233 --0.18438243249 --0.39080304667 --0.184229301156 --0.381825770986 --0.18407668424 --0.372860167999 --0.184312414879 --0.364149190855 --0.184556555681 --0.355413379335 --0.184421202468 --0.346408754758 --0.184286216235 --0.337413758579 --0.184151593234 --0.328428703154 --0.184359883854 --0.319567068605 --0.184576943899 --0.310683180505 --0.18446016209 --0.301662573015 --0.184343610141 --0.292649912316 --0.184227276272 --0.283645523972 --0.184407704205 --0.2746458293 --0.184597241586 --0.265626570356 --0.184499269809 --0.25659033096 --0.184401389821 --0.24756040742 --0.184303626608 --0.238537199784 --0.184455805558 --0.229414469402 --0.184617350671 --0.220274891097 --0.184538375633 --0.211223706949 --0.184459408813 --0.202177318673 --0.184380448158 --0.19313614139 --0.184504155454 --0.183907292043 --0.184637467527 --0.174664383101 --0.184577667752 --0.165599332999 --0.184517790403 --0.156537606445 --0.184457833221 --0.147479643297 --0.184552712161 --0.138163870005 --0.184657372746 --0.128836875895 --0.184616870586 --0.11975932269 --0.184576234396 --0.110683701134 --0.184535467653 --0.101610461124 --0.184601359408 --0.092228216202 --0.184677168169 --0.0828376658569 --0.184656083289 --0.073749289985 --0.184634819786 --0.064661485892 --0.184613383669 --0.0555747193085 --0.184650171111 --0.0461475222188 --0.1846969619 --0.0367149696546 --0.18469535584 --0.0276176393027 --0.184693559443 --0.0185195645832 --0.184691571597 --0.00942121338044 --0.184690531942 -0 --0.184691571597 -0.00942121338044 --0.184693559443 -0.0185195645832 --0.18469535584 -0.0276176393027 --0.1846969619 -0.0367149696546 --0.184650171111 -0.0461475222188 --0.184613383669 -0.0555747193085 --0.184634819786 -0.064661485892 --0.184656083289 -0.073749289985 --0.184677168169 -0.0828376658569 --0.184601359408 -0.092228216202 --0.184535467653 -0.101610461124 --0.184576234396 -0.110683701134 --0.184616870586 -0.11975932269 --0.184657372746 -0.128836875895 --0.184552712161 -0.138163870005 --0.184457833221 -0.147479643297 --0.184517790403 -0.156537606445 --0.184577667752 -0.165599332999 --0.184637467527 -0.174664383101 --0.184504155454 -0.183907292043 --0.184380448158 -0.19313614139 --0.184459408813 -0.202177318673 --0.184538375633 -0.211223706949 --0.184617350671 -0.220274891097 --0.184455805558 -0.229414469402 --0.184303626608 -0.238537199784 --0.184401389821 -0.24756040742 --0.184499269809 -0.25659033096 --0.184597241586 -0.265626570356 --0.184407704205 -0.2746458293 --0.184227276272 -0.283645523972 --0.184343610141 -0.292649912316 --0.18446016209 -0.301662573015 --0.184576943899 -0.310683180505 --0.184359883854 -0.319567068605 --0.184151593234 -0.328428703154 --0.184286216235 -0.337413758579 --0.184421202468 -0.346408754758 --0.184556555681 -0.355413379335 --0.184312414879 -0.364149190855 --0.18407668424 -0.372860167999 --0.184229301156 -0.381825770986 --0.18438243249 -0.39080304667 --0.184536095083 -0.399791760233 --0.175240732684 --0.40055438716 --0.17507019179 --0.391546694451 --0.174900243171 --0.382550500892 --0.174730881469 --0.373566071868 --0.174992110234 --0.364844592519 --0.175262662119 --0.356098261693 --0.175112442917 --0.347074833573 --0.174962637467 --0.338061088573 --0.174813237595 --0.329057349738 --0.17504406042 --0.320183529647 --0.175284615088 --0.311287458753 --0.175154997597 --0.302248198228 --0.175025637668 --0.293216915158 --0.174896532377 --0.284193963706 --0.17509648187 --0.275180540967 --0.175306519064 --0.266147536976 --0.175197759093 --0.257092758295 --0.175089106865 --0.248044328867 --0.17498058047 --0.239002639679 --0.17514929982 --0.229864819712 --0.175328389176 --0.22071013379 --0.175240682461 --0.211640484108 --0.175152992268 --0.202575656767 --0.175065304896 --0.193516058486 --0.175202463147 --0.184270932352 --0.175350261117 --0.175011735907 --0.175283804127 --0.165928268591 --0.175217256762 --0.15684813549 --0.175150623788 --0.14777178117 --0.175255923292 --0.138438776311 --0.175372052109 --0.129094541814 --0.175326971495 --0.119998589666 --0.175281745053 --0.11090457521 --0.175236372287 --0.101812952527 --0.175309603248 --0.0924127498898 --0.175393821881 --0.0830042261062 --0.175370249807 --0.0738974401623 --0.175346472345 --0.0647912239719 --0.175322502933 --0.0556860479417 --0.175363542903 --0.0462404256762 --0.175415658965 --0.0367894324019 --0.175413646912 --0.0276736601027 --0.175411432099 --0.0185571339248 --0.175409006049 --0.00944032634276 --0.175407737569 --2.16840434497e-19 --0.175409006049 -0.00944032634276 --0.175411432099 -0.0185571339248 --0.175413646912 -0.0276736601027 --0.175415658965 -0.0367894324019 --0.175363542903 -0.0462404256762 --0.175322502933 -0.0556860479417 --0.175346472345 -0.0647912239719 --0.175370249807 -0.0738974401623 --0.175393821881 -0.0830042261062 --0.175309603248 -0.0924127498898 --0.175236372287 -0.101812952527 --0.175281745053 -0.11090457521 --0.175326971495 -0.119998589666 --0.175372052109 -0.129094541814 --0.175255923292 -0.138438776311 --0.175150623788 -0.14777178117 --0.175217256762 -0.15684813549 --0.175283804127 -0.165928268591 --0.175350261117 -0.175011735907 --0.175202463147 -0.184270932352 --0.175065304896 -0.193516058486 --0.175152992268 -0.202575656767 --0.175240682461 -0.211640484108 --0.175328389176 -0.22071013379 --0.17514929982 -0.229864819712 --0.17498058047 -0.239002639679 --0.175089106865 -0.248044328867 --0.175197759093 -0.257092758295 --0.175306519064 -0.266147536976 --0.17509648187 -0.275180540967 --0.174896532377 -0.284193963706 --0.175025637668 -0.293216915158 --0.175154997597 -0.302248198228 --0.175284615088 -0.311287458753 --0.17504406042 -0.320183529647 --0.174813237595 -0.329057349738 --0.174962637467 -0.338061088573 --0.175112442917 -0.347074833573 --0.175262662119 -0.356098261693 --0.174992110234 -0.364844592519 --0.174730881469 -0.373566071868 --0.174900243171 -0.382550500892 --0.17507019179 -0.391546694451 --0.175240732684 -0.40055438716 --0.166163309336 --0.40020770746 --0.166013401131 --0.391207949743 --0.165864003486 --0.382219674363 --0.165715128616 --0.37324317409 --0.165945181307 --0.364527542217 --0.166183419369 --0.355787082926 --0.166051350978 --0.346771641064 --0.165919641918 --0.337765890371 --0.165788293073 --0.328770151464 --0.16599159513 --0.319902693298 --0.166203449188 --0.311013023521 --0.166089483029 --0.301981823942 --0.165975738911 --0.292958600829 --0.16586222241 --0.283943726364 --0.166038345709 --0.2749371556 --0.16622333301 --0.265911023028 --0.1661277029 --0.256864372876 --0.166032171795 --0.247824078816 --0.165936744737 --0.238790524387 --0.166085342904 --0.229659977294 --0.166243072633 --0.220512593128 --0.166165968602 --0.211451147776 --0.166088868634 --0.20239451607 --0.166011773299 --0.193343112805 --0.16613256929 --0.184105653442 --0.166262725869 --0.17485413661 --0.166204315216 --0.165778914449 --0.166145824814 --0.156707043069 --0.166087264332 --0.147638952681 --0.16617995925 --0.138313906048 --0.16628218463 --0.12897765 --0.16624260197 --0.119890003977 --0.16620288652 --0.110804299226 --0.166163030963 --0.10172098528 --0.166227453157 --0.0923289779151 --0.166301551047 --0.082928662512 --0.166280896504 --0.073830219489 --0.166260066163 --0.064732353353 --0.16623906417 --0.0556355322075 --0.166275091359 --0.0461982549913 --0.166320882689 --0.0367556163956 --0.166319216259 --0.0276482195234 --0.166317364487 --0.0185400719976 --0.166315333287 --0.0094316463763 --0.166314267836 -0 --0.166315333287 -0.0094316463763 --0.166317364487 -0.0185400719976 --0.166319216259 -0.0276482195234 --0.166320882689 -0.0367556163956 --0.166275091359 -0.0461982549913 --0.16623906417 -0.0556355322075 --0.166260066163 -0.064732353353 --0.166280896504 -0.073830219489 --0.166301551047 -0.082928662512 --0.166227453157 -0.0923289779151 --0.166163030963 -0.10172098528 --0.16620288652 -0.110804299226 --0.16624260197 -0.119890003977 --0.16628218463 -0.12897765 --0.16617995925 -0.138313906048 --0.166087264332 -0.147638952681 --0.166145824814 -0.156707043069 --0.166204315216 -0.165778914449 --0.166262725869 -0.17485413661 --0.16613256929 -0.184105653442 --0.166011773299 -0.193343112805 --0.166088868634 -0.20239451607 --0.166165968602 -0.211451147776 --0.166243072633 -0.220512593128 --0.166085342904 -0.229659977294 --0.165936744737 -0.238790524387 --0.166032171795 -0.247824078816 --0.1661277029 -0.256864372876 --0.16622333301 -0.265911023028 --0.166038345709 -0.2749371556 --0.16586222241 -0.283943726364 --0.165975738911 -0.292958600829 --0.166089483029 -0.301981823942 --0.166203449188 -0.311013023521 --0.16599159513 -0.319902693298 --0.165788293073 -0.328770151464 --0.165919641918 -0.337765890371 --0.166051350978 -0.346771641064 --0.166183419369 -0.355787082926 --0.165945181307 -0.364527542217 --0.165715128616 -0.37324317409 --0.165864003486 -0.382219674363 --0.166013401131 -0.391207949743 --0.166163309336 -0.40020770746 --0.157090171366 --0.399861310595 --0.156960884852 --0.390869480144 --0.156832040161 --0.381889140602 --0.156703643338 --0.372920563836 --0.156902517256 --0.364210753244 --0.157108441436 --0.355476137205 --0.156994519837 --0.346468695762 --0.156880905075 --0.3374709583 --0.156767599154 --0.328483220299 --0.156943377587 --0.319622094795 --0.157126528546 --0.31073878611 --0.157028212865 --0.301715656173 --0.156930086049 --0.292700515383 --0.156832149477 --0.28369372078 --0.156984433759 --0.274693966045 --0.157144372391 --0.265674676156 --0.157061875285 --0.25663616342 --0.156979458517 --0.247604007428 --0.156897131791 --0.238578601948 --0.157025611146 --0.229455309213 --0.157161977225 --0.220315196853 --0.157095472409 --0.211261953364 --0.157028963629 --0.202213525456 --0.156962457917 --0.193170331557 --0.157066886004 --0.183940497773 --0.157179397575 --0.174696626946 --0.157129031873 --0.165629664247 --0.157078602696 --0.156566060031 --0.157028106787 --0.147506244839 --0.157108196639 --0.138189127797 --0.157196528282 --0.128860815682 --0.157162428353 --0.119781478555 --0.157128215856 --0.110704088766 --0.157093887435 --0.101629095732 --0.157149503182 --0.0922452484018 --0.157213479993 --0.0828531090943 --0.157195739292 --0.0737630186006 --0.157177849225 --0.0646735106128 --0.157159816834 --0.0555850524271 --0.157190838138 --0.0461560870593 --0.157230294115 --0.0367217674091 --0.157228976235 --0.027622753572 --0.157227494253 --0.018522993938 --0.157225850468 --0.00942295775856 --0.157224988809 -0 --0.157225850468 -0.00942295775856 --0.157227494253 -0.018522993938 --0.157228976235 -0.027622753572 --0.157230294115 -0.0367217674091 --0.157190838138 -0.0461560870593 --0.157159816834 -0.0555850524271 --0.157177849225 -0.0646735106128 --0.157195739292 -0.0737630186006 --0.157213479993 -0.0828531090943 --0.157149503182 -0.0922452484018 --0.157093887435 -0.101629095732 --0.157128215856 -0.110704088766 --0.157162428353 -0.119781478555 --0.157196528282 -0.128860815682 --0.157108196639 -0.138189127797 --0.157028106787 -0.147506244839 --0.157078602696 -0.156566060031 --0.157129031873 -0.165629664247 --0.157179397575 -0.174696626946 --0.157066886004 -0.183940497773 --0.156962457917 -0.193170331557 --0.157028963629 -0.202213525456 --0.157095472409 -0.211261953364 --0.157161977225 -0.220315196853 --0.157025611146 -0.229455309213 --0.156897131791 -0.238578601948 --0.156979458517 -0.247604007428 --0.157061875285 -0.25663616342 --0.157144372391 -0.265674676156 --0.156984433759 -0.274693966045 --0.156832149477 -0.28369372078 --0.156930086049 -0.292700515383 --0.157028212865 -0.301715656173 --0.157126528546 -0.31073878611 --0.156943377587 -0.319622094795 --0.156767599154 -0.328483220299 --0.156880905075 -0.3374709583 --0.156994519837 -0.346468695762 --0.157108441436 -0.355476137205 --0.156902517256 -0.364210753244 --0.156703643338 -0.372920563836 --0.156832040161 -0.381889140602 --0.156960884852 -0.390869480144 --0.157090171366 -0.399861310595 --0.148021741802 --0.399515178262 --0.147913067952 --0.390531278698 --0.147804767163 --0.381558884054 --0.147696839525 --0.372598256307 --0.147864541885 --0.363894230132 --0.148038160684 --0.355165428496 --0.14794237423 --0.346165994135 --0.147846844812 --0.33717627066 --0.147751577519 --0.328196544473 --0.147899836163 --0.319341724329 --0.148054282151 --0.31046474239 --0.147971606895 --0.301449689558 --0.147889092998 --0.292442640016 --0.147806728367 --0.283443922006 --0.147935180191 --0.274450954981 --0.148070074138 --0.265438485553 --0.148000700696 --0.25640811315 --0.14793139339 --0.247384115789 --0.147862158522 --0.238366874082 --0.147970522318 --0.229250800434 --0.148085528135 --0.220117930726 --0.148029614316 --0.211072886989 --0.147973695899 --0.202032676437 --0.14791777984 --0.19299771542 --0.148005838696 --0.183775469424 --0.148100703632 --0.174539205519 --0.148058386117 --0.165480514854 --0.14801601442 --0.156425183573 --0.147973579744 --0.147373648878 --0.148041069652 --0.138064427349 --0.148115506282 --0.128744024631 --0.148086890461 --0.119673007722 --0.148058182281 --0.110603946926 --0.148029375804 --0.101537284382 --0.148076179606 --0.0921615627694 --0.148130036271 --0.0827775639457 --0.148115215237 --0.073695833127 --0.148100264278 --0.0646146917318 --0.148085192456 --0.0555346020663 --0.148111211592 --0.0461139163221 --0.148144341182 --0.0366878853622 --0.148143364993 --0.0275972623986 --0.148142249303 --0.0185058982738 --0.148141003202 --0.00941426067545 --0.148140351512 -0 --0.148141003202 -0.00941426067545 --0.148142249303 -0.0185058982738 --0.148143364993 -0.0275972623986 --0.148144341182 -0.0366878853622 --0.148111211592 -0.0461139163221 --0.148085192456 -0.0555346020663 --0.148100264278 -0.0646146917318 --0.148115215237 -0.073695833127 --0.148130036271 -0.0827775639457 --0.148076179606 -0.0921615627694 --0.148029375804 -0.101537284382 --0.148058182281 -0.110603946926 --0.148086890461 -0.119673007722 --0.148115506282 -0.128744024631 --0.148041069652 -0.138064427349 --0.147973579744 -0.147373648878 --0.14801601442 -0.156425183573 --0.148058386117 -0.165480514854 --0.148100703632 -0.174539205519 --0.148005838696 -0.183775469424 --0.14791777984 -0.19299771542 --0.147973695899 -0.202032676437 --0.148029614316 -0.211072886989 --0.148085528135 -0.220117930726 --0.147970522318 -0.229250800434 --0.147862158522 -0.238366874082 --0.14793139339 -0.247384115789 --0.148000700696 -0.25640811315 --0.148070074138 -0.265438485553 --0.147935180191 -0.274450954981 --0.147806728367 -0.283443922006 --0.147889092998 -0.292442640016 --0.147971606895 -0.301449689558 --0.148054282151 -0.31046474239 --0.147899836163 -0.319341724329 --0.147751577519 -0.328196544473 --0.147846844812 -0.33717627066 --0.14794237423 -0.346165994135 --0.148038160684 -0.355165428496 --0.147864541885 -0.363894230132 --0.147696839525 -0.372598256307 --0.147804767163 -0.381558884054 --0.147913067952 -0.390531278698 --0.148021741802 -0.399515178262 --0.138655752718 --0.400057603499 --0.13853018942 --0.391060148805 --0.138405063077 --0.382074236836 --0.138280368022 --0.373100153449 --0.138473557614 --0.364388681188 --0.138673583427 --0.355652433186 --0.138562920197 --0.34663957184 --0.138452563237 --0.337636461064 --0.138342510224 --0.328643408719 --0.138513313019 --0.31977994704 --0.138691256863 --0.310894308549 --0.138595733437 --0.30186593878 --0.13850040628 --0.292845611136 --0.138405258435 --0.283833656867 --0.138553251839 --0.274830965635 --0.138708670846 --0.265808766229 --0.138628498471 --0.256765174971 --0.1385484118 --0.247727982916 --0.138468407261 --0.238697573195 --0.138593296902 --0.229570807397 --0.138725847247 --0.220427244751 --0.138661199865 --0.211369046182 --0.138596551001 --0.202315699689 --0.13853190047 --0.193267616849 --0.138633440187 --0.184033852045 --0.138742828483 --0.174786067454 --0.138693844253 --0.165714250407 --0.138644794154 --0.156645806264 --0.138595681254 --0.147581172463 --0.138673595607 --0.138259757174 --0.138759508247 --0.128927158157 --0.138726308609 --0.119843036563 --0.13869300197 --0.110760872583 --0.138659579287 --0.101681113329 --0.138713734231 --0.0922926921845 --0.138776012537 --0.0828959864539 --0.13875869377 --0.0738011462425 --0.138741229841 --0.0647068930894 --0.138723627146 --0.0556136938764 --0.138753863098 --0.0461799762757 --0.138792288988 --0.0367409053761 --0.138790909047 --0.0276371515107 --0.138789369423 --0.0185326486928 --0.138787686229 --0.00942786953707 --0.13878681032 -0 --0.138787686229 -0.00942786953707 --0.138789369423 -0.0185326486928 --0.138790909047 -0.0276371515107 --0.138792288988 -0.0367409053761 --0.138753863098 -0.0461799762757 --0.138723627146 -0.0556136938764 --0.138741229841 -0.0647068930894 --0.13875869377 -0.0738011462425 --0.138776012537 -0.0828959864539 --0.138713734231 -0.0922926921845 --0.138659579287 -0.101681113329 --0.13869300197 -0.110760872583 --0.138726308609 -0.119843036563 --0.138759508247 -0.128927158157 --0.138673595607 -0.138259757174 --0.138595681254 -0.147581172463 --0.138644794154 -0.156645806264 --0.138693844253 -0.165714250407 --0.138742828483 -0.174786067454 --0.138633440187 -0.184033852045 --0.13853190047 -0.193267616849 --0.138596551001 -0.202315699689 --0.138661199865 -0.211369046182 --0.138725847247 -0.220427244751 --0.138593296902 -0.229570807397 --0.138468407261 -0.238697573195 --0.1385484118 -0.247727982916 --0.138628498471 -0.256765174971 --0.138708670846 -0.265808766229 --0.138553251839 -0.274830965635 --0.138405258435 -0.283833656867 --0.13850040628 -0.292845611136 --0.138595733437 -0.30186593878 --0.138691256863 -0.310894308549 --0.138513313019 -0.31977994704 --0.138342510224 -0.328643408719 --0.138452563237 -0.337636461064 --0.138562920197 -0.34663957184 --0.138673583427 -0.355652433186 --0.138473557614 -0.364388681188 --0.138280368022 -0.373100153449 --0.138405063077 -0.382074236836 --0.13853018942 -0.391060148805 --0.138655752718 -0.400057603499 --0.128783405269 --0.417795715428 --0.129027031361 --0.409239779378 --0.129278027418 --0.400656523148 --0.129135647531 --0.391644213004 --0.128993768039 --0.38264350287 --0.128852371657 --0.37365466268 --0.129070949202 --0.364934820232 --0.129297281399 --0.356190193664 --0.129171808691 --0.347162611324 --0.129046688231 --0.338144818663 --0.128921909598 --0.329137117903 --0.129115172345 --0.320263998444 --0.129316529452 --0.311368700284 --0.129208220247 --0.302325708416 --0.129100129106 --0.293290781227 --0.128992243709 --0.284264266087 --0.129159706902 --0.275250749426 --0.129335575453 --0.26621771439 --0.129244654182 --0.257159577389 --0.129153831491 --0.248107856452 --0.12906310132 --0.239062937798 --0.129204463545 --0.229924319466 --0.129354488673 --0.220768887501 --0.129281140154 --0.211696184089 --0.129207795486 --0.202628351886 --0.129134448653 --0.193565791762 --0.129249428209 --0.184319277849 --0.129373282422 --0.175058732587 --0.129317655145 --0.165972436547 --0.129261956192 --0.156889523297 --0.129206186175 --0.147810426522 --0.129294484369 --0.138475528451 --0.129391830871 --0.129129437914 --0.129354062313 --0.120030847319 --0.129316178051 --0.110934217972 --0.129278163593 --0.101839997578 --0.129339644298 --0.0924375477471 --0.129410311394 --0.0830268006765 --0.129390504826 --0.0739174798733 --0.129370537898 --0.0648087441234 --0.1293504141 --0.0557010635273 --0.129384853798 --0.0462529579613 --0.129428554744 --0.0367994862255 --0.129426771942 --0.0276812233729 --0.129424816111 --0.0185622051166 --0.129422693648 --0.00944290602232 --0.129421587797 -0 --0.129422693648 -0.00944290602232 --0.129424816111 -0.0185622051166 --0.129426771942 -0.0276812233729 --0.129428554744 -0.0367994862255 --0.129384853798 -0.0462529579613 --0.1293504141 -0.0557010635273 --0.129370537898 -0.0648087441234 --0.129390504826 -0.0739174798733 --0.129410311394 -0.0830268006765 --0.129339644298 -0.0924375477471 --0.129278163593 -0.101839997578 --0.129316178051 -0.110934217972 --0.129354062313 -0.120030847319 --0.129391830871 -0.129129437914 --0.129294484369 -0.138475528451 --0.129206186175 -0.147810426522 --0.129261956192 -0.156889523297 --0.129317655145 -0.165972436547 --0.129373282422 -0.175058732587 --0.129249428209 -0.184319277849 --0.129134448653 -0.193565791762 --0.129207795486 -0.202628351886 --0.129281140154 -0.211696184089 --0.129354488673 -0.220768887501 --0.129204463545 -0.229924319466 --0.12906310132 -0.239062937798 --0.129153831491 -0.248107856452 --0.129244654182 -0.257159577389 --0.129335575453 -0.26621771439 --0.129159706902 -0.275250749426 --0.128992243709 -0.284264266087 --0.129100129106 -0.293290781227 --0.129208220247 -0.302325708416 --0.129316529452 -0.311368700284 --0.129115172345 -0.320263998444 --0.128921909598 -0.329137117903 --0.129046688231 -0.338144818663 --0.129171808691 -0.347162611324 --0.129297281399 -0.356190193664 --0.129070949202 -0.364934820232 --0.128852371657 -0.37365466268 --0.128993768039 -0.38264350287 --0.129135647531 -0.391644213004 --0.129278027418 -0.400656523148 --0.129027031361 -0.409239779378 --0.128783405269 -0.417795715428 --0.119766262407 --0.417555499135 --0.119974885274 --0.409003148501 --0.120189781202 --0.400423487838 --0.120068151997 --0.391416533986 --0.11994694742 --0.382421190785 --0.119826154123 --0.373437718621 --0.120013366477 --0.364721791389 --0.120207192594 --0.355981107083 --0.120099980048 --0.346958939993 --0.119993062919 --0.337946555365 --0.119886440228 --0.328944258994 --0.120052018349 --0.320075402375 --0.120224501981 --0.311184382842 --0.120131933109 --0.302146841114 --0.120039547321 --0.293117366971 --0.119947341396 --0.284096307594 --0.120090831902 --0.275087363604 --0.120241501656 --0.266058917218 --0.120163787217 --0.257006267279 --0.120086155975 --0.247960037592 --0.120008605437 --0.238920613875 --0.120129733187 --0.229786845378 --0.120258268358 --0.220636283847 --0.120195574268 --0.211569110069 --0.120132885097 --0.202506817159 --0.120070198996 --0.193449793239 --0.120168713121 --0.184208369208 --0.120274816413 --0.174952929749 --0.12022728667 --0.165872202036 --0.120179697443 --0.156794867476 --0.120132040599 --0.147721345948 --0.120207656592 --0.138391734483 --0.120291023043 --0.129050944463 --0.120258779905 --0.119957955015 --0.12022643518 --0.110866933694 --0.120193977907 --0.101778324247 --0.120246595312 --0.0923813106566 --0.120307076178 --0.0829760084906 --0.120290210515 --0.0738723200174 --0.120273204204 --0.0647692185448 --0.120256054547 --0.0556671727486 --0.12028545944 --0.0462246045372 --0.120322798552 --0.0367766736493 --0.12032136235 --0.0276640601106 --0.120319778041 --0.0185506950764 --0.120318051361 --0.00943705050459 --0.120317149359 -2.16840434497e-19 --0.120318051361 -0.00943705050459 --0.120319778041 -0.0185506950764 --0.12032136235 -0.0276640601106 --0.120322798552 -0.0367766736493 --0.12028545944 -0.0462246045372 --0.120256054547 -0.0556671727486 --0.120273204204 -0.0647692185448 --0.120290210515 -0.0738723200174 --0.120307076178 -0.0829760084906 --0.120246595312 -0.0923813106566 --0.120193977907 -0.101778324247 --0.12022643518 -0.110866933694 --0.120258779905 -0.119957955015 --0.120291023043 -0.129050944463 --0.120207656592 -0.138391734483 --0.120132040599 -0.147721345948 --0.120179697443 -0.156794867476 --0.12022728667 -0.165872202036 --0.120274816413 -0.174952929749 --0.120168713121 -0.184208369208 --0.120070198996 -0.193449793239 --0.120132885097 -0.202506817159 --0.120195574268 -0.211569110069 --0.120258268358 -0.220636283847 --0.120129733187 -0.229786845378 --0.120008605437 -0.238920613875 --0.120086155975 -0.247960037592 --0.120163787217 -0.257006267279 --0.120241501656 -0.266058917218 --0.120090831902 -0.275087363604 --0.119947341396 -0.284096307594 --0.120039547321 -0.293117366971 --0.120131933109 -0.302146841114 --0.120224501981 -0.311184382842 --0.120052018349 -0.320075402375 --0.119886440228 -0.328944258994 --0.119993062919 -0.337946555365 --0.120099980048 -0.346958939993 --0.120207192594 -0.355981107083 --0.120013366477 -0.364721791389 --0.119826154123 -0.373437718621 --0.11994694742 -0.382421190785 --0.120068151997 -0.391416533986 --0.120189781202 -0.400423487838 --0.119974885274 -0.409003148501 --0.119766262407 -0.417555499135 --0.110751742117 --0.417315274808 --0.110925346472 --0.408766473353 --0.111104129904 --0.400190379352 --0.111003249053 --0.391188812813 --0.110902717626 --0.38219883531 --0.110802533973 --0.373220741868 --0.110958378702 --0.364508730072 --0.111119688201 --0.355771971531 --0.111030727986 --0.346755219899 --0.11094201474 --0.337748253919 --0.11085354599 --0.328751378553 --0.110991427167 --0.319886760459 --0.111135027779 --0.310999991612 --0.111058196668 --0.301967909787 --0.110981519736 --0.29294390528 --0.110904994658 --0.283928312964 --0.111024504259 --0.27492392456 --0.111149966571 --0.265900050138 --0.111085459482 --0.256852903861 --0.111021020619 --0.247812176647 --0.110956647439 --0.238778270164 --0.111057536223 --0.229649334423 --0.111164577364 --0.220503609295 --0.111112538766 --0.211441981182 --0.111060506347 --0.202385238698 --0.111008478192 --0.193333776206 --0.111090514781 --0.184097418811 --0.111178864744 --0.174847055736 --0.111139435575 --0.165771919152 --0.11109995065 --0.156700173227 --0.111060410628 --0.147632250175 --0.111123348847 --0.138307904754 --0.111192734136 --0.128972385464 --0.11116601402 --0.119885011115 --0.111139200726 --0.110799609235 --0.111112295065 --0.10171662909 --0.111156048584 --0.0923250296629 --0.111206345944 --0.0829251490813 --0.111192418614 --0.073827107581 --0.111178370131 --0.0647296568895 --0.111164200718 --0.0556332629377 --0.111188569053 --0.0461962057708 --0.111219538784 --0.0367537926475 --0.111218452367 --0.0276468463017 --0.111217242109 --0.0185391506386 --0.111215902743 --0.0094311772543 --0.111215199413 --2.16840434497e-19 --0.111215902743 -0.0094311772543 --0.111217242109 -0.0185391506386 --0.111218452367 -0.0276468463017 --0.111219538784 -0.0367537926475 --0.111188569053 -0.0461962057708 --0.111164200718 -0.0556332629377 --0.111178370131 -0.0647296568895 --0.111192418614 -0.073827107581 --0.111206345944 -0.0829251490813 --0.111156048584 -0.0923250296629 --0.111112295065 -0.10171662909 --0.111139200726 -0.110799609235 --0.11116601402 -0.119885011115 --0.111192734136 -0.128972385464 --0.111123348847 -0.138307904754 --0.111060410628 -0.147632250175 --0.11109995065 -0.156700173227 --0.111139435575 -0.165771919152 --0.111178864744 -0.174847055736 --0.111090514781 -0.184097418811 --0.111008478192 -0.193333776206 --0.111060506347 -0.202385238698 --0.111112538766 -0.211441981182 --0.111164577364 -0.220503609295 --0.111057536223 -0.229649334423 --0.110956647439 -0.238778270164 --0.111021020619 -0.247812176647 --0.111085459482 -0.256852903861 --0.111149966571 -0.265900050138 --0.111024504259 -0.27492392456 --0.110904994658 -0.283928312964 --0.110981519736 -0.29294390528 --0.111058196668 -0.301967909787 --0.111135027779 -0.310999991612 --0.110991427167 -0.319886760459 --0.11085354599 -0.328751378553 --0.11094201474 -0.337748253919 --0.111030727986 -0.346755219899 --0.111119688201 -0.355771971531 --0.110958378702 -0.364508730072 --0.110802533973 -0.373220741868 --0.110902717626 -0.38219883531 --0.111003249053 -0.391188812813 --0.111104129904 -0.400190379352 --0.110925346472 -0.408766473353 --0.110751742117 -0.417315274808 --0.101740268009 --0.417075024135 --0.101878848481 --0.40852974668 --0.102021515647 --0.399957183718 --0.101941382425 --0.390961010158 --0.101861523164 --0.381976429451 --0.101781943502 --0.373003731274 --0.101906412091 --0.364295613117 --0.102035197213 --0.355562756113 --0.101964488118 --0.346551428763 --0.101893977724 --0.33754989285 --0.101823659292 --0.328558462833 --0.10193383571 --0.319698053951 --0.102048551503 --0.31081551924 --0.101987466715 --0.301788934149 --0.101926498104 --0.292770404466 --0.101865646554 --0.28376029 --0.101961167607 --0.274760428032 --0.102061418492 --0.265741102446 --0.102010119565 --0.256699488419 --0.101958873434 --0.24766429203 --0.101907675643 --0.238635913778 --0.101988318244 --0.229511771275 --0.102073858792 --0.220370859758 --0.102032479475 --0.211314793669 --0.101991103365 --0.202263612654 --0.101949729949 --0.193217731339 --0.102015290236 --0.183986420294 --0.102085880732 --0.174741109331 --0.1020545479 --0.165671580743 --0.102023168528 --0.156605441374 --0.101991742782 --0.147543127287 --0.10204200199 --0.138224021463 --0.10209740021 --0.128893749833 --0.102076196545 --0.119812010379 --0.102054918687 --0.110732248155 --0.102033569895 --0.101654910329 --0.102068458358 --0.0922687017979 --0.102108568505 --0.0828742195417 --0.102097577341 --0.0737818407737 --0.102086488746 --0.0646900595381 --0.102075305023 --0.0555993343987 --0.102075305023 -0.0555993343987 --0.102086488746 -0.0646900595381 --0.102097577341 -0.0737818407737 --0.102108568505 -0.0828742195417 --0.102068458358 -0.0922687017979 --0.102033569895 -0.101654910329 --0.102054918687 -0.110732248155 --0.102076196545 -0.119812010379 --0.10209740021 -0.128893749833 --0.10204200199 -0.138224021463 --0.101991742782 -0.147543127287 --0.102023168528 -0.156605441374 --0.1020545479 -0.165671580743 --0.102085880732 -0.174741109331 --0.102015290236 -0.183986420294 --0.101949729949 -0.193217731339 --0.101991103365 -0.202263612654 --0.102032479475 -0.211314793669 --0.102073858792 -0.220370859758 --0.101988318244 -0.229511771275 --0.101907675643 -0.238635913778 --0.101958873434 -0.24766429203 --0.102010119565 -0.256699488419 --0.102061418492 -0.265741102446 --0.101961167607 -0.274760428032 --0.101865646554 -0.28376029 --0.101926498104 -0.292770404466 --0.101987466715 -0.301788934149 --0.102048551503 -0.31081551924 --0.10193383571 -0.319698053951 --0.101823659292 -0.328558462833 --0.101893977724 -0.33754989285 --0.101964488118 -0.346551428763 --0.102035197213 -0.355562756113 --0.101906412091 -0.364295613117 --0.101781943502 -0.373003731274 --0.101861523164 -0.381976429451 --0.101941382425 -0.390961010158 --0.102021515647 -0.399957183718 --0.101878848481 -0.40852974668 --0.101740268009 -0.417075024135 --0.0922537343406 --0.417458490499 --0.0924201889105 --0.408908734125 --0.0925915939695 --0.400331690901 --0.0924949021761 --0.391326199114 --0.0923985445397 --0.382332332636 --0.0923025238947 --0.373350384764 --0.0924520380861 --0.364636962394 --0.0926067758041 --0.355898801859 --0.0925214855042 --0.346878247463 --0.0924364308875 --0.337867500016 --0.0923516105586 --0.328866891038 --0.0924838952309 --0.32000042577 --0.0926216592094 --0.311111837185 --0.0925479817193 --0.302076088723 --0.0924744452754 --0.29304840787 --0.0924010525133 --0.284029155575 --0.0925157491421 --0.275022537825 --0.0926361432899 --0.265996458547 --0.0925742523447 --0.256945714984 --0.0925124326817 --0.247901414743 --0.0924506765735 --0.238863936581 --0.092547514989 --0.22973241045 --0.092650243628 --0.22058412784 --0.0926002963861 --0.211518970489 --0.0925503529797 --0.202458704639 --0.0925004129478 --0.193403752543 --0.0925791915423 --0.184164531586 --0.0926640157322 --0.174911312263 --0.0926261432862 --0.165832707397 --0.0925882196675 --0.156757493019 --0.0925502448466 --0.147686115163 --0.0926107364696 --0.138358665631 --0.092677399614 --0.129020046872 --0.0926517005361 --0.119929241049 --0.0926259140767 --0.110840410919 --0.092600040865 --0.10175400501 --0.092642115436 --0.0923591238643 --0.0926904510311 --0.0829559626843 --0.0926770069137 --0.0738545053553 --0.0926770069137 -0.0738545053553 --0.0926904510311 -0.0829559626843 --0.092642115436 -0.0923591238643 --0.092600040865 -0.10175400501 --0.0926259140767 -0.110840410919 --0.0926517005361 -0.119929241049 --0.092677399614 -0.129020046872 --0.0926107364696 -0.138358665631 --0.0925502448466 -0.147686115163 --0.0925882196675 -0.156757493019 --0.0926261432862 -0.165832707397 --0.0926640157322 -0.174911312263 --0.0925791915423 -0.184164531586 --0.0925004129478 -0.193403752543 --0.0925503529797 -0.202458704639 --0.0926002963861 -0.211518970489 --0.092650243628 -0.22058412784 --0.092547514989 -0.22973241045 --0.0924506765735 -0.238863936581 --0.0925124326817 -0.247901414743 --0.0925742523447 -0.256945714984 --0.0926361432899 -0.265996458547 --0.0925157491421 -0.275022537825 --0.0924010525133 -0.284029155575 --0.0924744452754 -0.29304840787 --0.0925479817193 -0.302076088723 --0.0926216592094 -0.311111837185 --0.0924838952309 -0.32000042577 --0.0923516105586 -0.328866891038 --0.0924364308875 -0.337867500016 --0.0925214855042 -0.346878247463 --0.0926067758041 -0.355898801859 --0.0924520380861 -0.364636962394 --0.0923025238947 -0.373350384764 --0.0923985445397 -0.382332332636 --0.0924949021761 -0.391326199114 --0.0925915939695 -0.400331690901 --0.0924201889105 -0.408908734125 --0.0922537343406 -0.417458490499 --0.0831360819065 --0.444864786105 --0.0830097557356 --0.435863151256 --0.0828839553109 --0.426875073677 --0.0827586696219 --0.417900803494 --0.0829529327818 --0.40934574628 --0.0831530070509 --0.400763398109 --0.0830398035615 --0.391747276122 --0.0829269949742 --0.382742817399 --0.0828145767893 --0.373750301423 --0.0829890837175 --0.365030649936 --0.0831697154336 --0.356286260706 --0.0830698817986 --0.347255154174 --0.0829703264907 --0.338233884983 --0.0828710405418 --0.329222755778 --0.0830253816348 --0.320349213875 --0.0831861382175 --0.311453548296 --0.0830998988897 --0.302407278824 --0.0830138314486 --0.293369114078 --0.0829279320157 --0.284339396241 --0.0830617604436 --0.275324922774 --0.0832022518303 --0.266290973342 --0.0831298015087 --0.257229744328 --0.0830574366452 --0.248174989053 --0.082985148556 --0.239127064589 --0.0830981490933 --0.229986981733 --0.0832180278687 --0.220830133126 --0.08315953593 --0.211754522301 --0.0831010480192 --0.20268380939 --0.0830425630793 --0.193618414852 --0.083134528955 --0.184370031669 --0.0832335552826 --0.175107644823 --0.083189162574 --0.16601859676 --0.0831447108639 --0.15693293639 --0.0831002033439 --0.147851119968 --0.0831709070601 --0.138514021432 --0.0832488095964 --0.129165741075 --0.0832186265684 --0.120064483798 --0.0831883463521 --0.11096520576 --0.0831579580829 --0.101868352484 --0.0832071973084 --0.0924634507146 --0.0832637432598 --0.0830502591578 --0.0832637432598 -0.0830502591578 --0.0832071973084 -0.0924634507146 --0.0831579580829 -0.101868352484 --0.0831883463521 -0.11096520576 --0.0832186265684 -0.120064483798 --0.0832488095964 -0.129165741075 --0.0831709070601 -0.138514021432 --0.0831002033439 -0.147851119968 --0.0831447108639 -0.15693293639 --0.083189162574 -0.16601859676 --0.0832335552826 -0.175107644823 --0.083134528955 -0.184370031669 --0.0830425630793 -0.193618414852 --0.0831010480192 -0.20268380939 --0.08315953593 -0.211754522301 --0.0832180278687 -0.220830133126 --0.0830981490933 -0.229986981733 --0.082985148556 -0.239127064589 --0.0830574366452 -0.248174989053 --0.0831298015087 -0.257229744328 --0.0832022518303 -0.266290973342 --0.0830617604436 -0.275324922774 --0.0829279320157 -0.284339396241 --0.0830138314486 -0.293369114078 --0.0830998988897 -0.302407278824 --0.0831861382175 -0.311453548296 --0.0830253816348 -0.320349213875 --0.0828710405418 -0.329222755778 --0.0829703264907 -0.338233884983 --0.0830698817986 -0.347255154174 --0.0831697154336 -0.356286260706 --0.0829890837175 -0.365030649936 --0.0828145767893 -0.373750301423 --0.0829269949742 -0.382742817399 --0.0830398035615 -0.391747276122 --0.0831530070509 -0.400763398109 --0.0829529327818 -0.40934574628 --0.0827586696219 -0.417900803494 --0.0828839553109 -0.426875073677 --0.0830097557356 -0.435863151256 --0.0831360819065 -0.444864786105 --0.0740398926542 --0.444733770196 --0.0739368860898 --0.435734894127 --0.0738343073975 --0.426749587291 --0.0737321519524 --0.417778095852 --0.073891248985 --0.409224896145 --0.07405505717 --0.400644414755 --0.0739626953606 --0.391631086696 --0.0738706551116 --0.382629422609 --0.0737789319562 --0.373639684434 --0.0739219318863 --0.364922044921 --0.0740699086105 --0.356179689102 --0.0739884104076 --0.347151384697 --0.0739071390621 --0.338132913561 --0.0738260862094 --0.329124589097 --0.0739526131508 --0.320253205352 --0.0740843646237 --0.311359705125 --0.0740139364482 --0.302316256323 --0.0739436477834 --0.293280907556 --0.0738734949336 --0.284254019576 --0.0739832374021 --0.275241846171 --0.0740984154472 --0.26621019123 --0.0740392341972 --0.257151807762 --0.0739801191999 --0.248099894397 --0.0739210660009 --0.239054807683 --0.0740137403275 --0.229917139443 --0.0741120305748 --0.220762711541 --0.0740642439376 --0.211689964427 --0.0740164609969 --0.202622117609 --0.0739686791366 --0.193559579294 --0.0740441031978 --0.1843137122 --0.0741252983994 --0.175053845762 --0.0740890341906 --0.165967668926 --0.0740527259947 --0.156884899471 --0.0740163692637 --0.14780596262 --0.0740743384203 --0.13847146244 --0.0741381991675 --0.129125795272 --0.0741135598928 --0.120027428907 --0.0740888407372 --0.110931043975 --0.0740640331129 --0.101837085375 --0.0741043681447 --0.0924348551487 --0.0741043681447 -0.0924348551487 --0.0740640331129 -0.101837085375 --0.0740888407372 -0.110931043975 --0.0741135598928 -0.120027428907 --0.0741381991675 -0.129125795272 --0.0740743384203 -0.13847146244 --0.0740163692637 -0.14780596262 --0.0740527259947 -0.156884899471 --0.0740890341906 -0.165967668926 --0.0741252983994 -0.175053845762 --0.0740441031978 -0.1843137122 --0.0739686791366 -0.193559579294 --0.0740164609969 -0.202622117609 --0.0740642439376 -0.211689964427 --0.0741120305748 -0.220762711541 --0.0740137403275 -0.229917139443 --0.0739210660009 -0.239054807683 --0.0739801191999 -0.248099894397 --0.0740392341972 -0.257151807762 --0.0740984154472 -0.26621019123 --0.0739832374021 -0.275241846171 --0.0738734949336 -0.284254019576 --0.0739436477834 -0.293280907556 --0.0740139364482 -0.302316256323 --0.0740843646237 -0.311359705125 --0.0739526131508 -0.320253205352 --0.0738260862094 -0.329124589097 --0.0739071390621 -0.338132913561 --0.0739884104076 -0.347151384697 --0.0740699086105 -0.356179689102 --0.0739219318863 -0.364922044921 --0.0737789319562 -0.373639684434 --0.0738706551116 -0.382629422609 --0.0739626953606 -0.391631086696 --0.07405505717 -0.400644414755 --0.073891248985 -0.409224896145 --0.0737321519524 -0.417778095852 --0.0738343073975 -0.426749587291 --0.0739368860898 -0.435734894127 --0.0740398926542 -0.444733770196 --0.0649446695436 --0.44460242984 --0.0648649941562 --0.435606375044 --0.0647856455047 --0.426623858592 --0.0647066262548 --0.417655146386 --0.0648305371547 --0.409103780532 --0.0649580586285 --0.400525149941 --0.0648865415777 --0.391514639249 --0.064815273704 --0.382515781935 --0.0647442521486 --0.373528848719 --0.0648557210988 --0.364813190687 --0.0649710229278 --0.35607283238 --0.0649078686906 --0.347047360011 --0.0648448864062 --0.338031714149 --0.0647820754375 --0.32902622344 --0.064880772978 --0.320156978728 --0.0649834990886 --0.3112656103 --0.0649288859383 --0.302225003903 --0.0648743829544 --0.293192506582 --0.0648199839881 --0.284168470872 --0.0649056252757 --0.275158571797 --0.064995472156 --0.266129185857 --0.0649495610531 --0.257073663839 --0.0649037015841 --0.248024614146 --0.0648578875923 --0.238982392823 --0.0649302205342 --0.229847120712 --0.0650069092844 --0.220695089525 --0.0649698309855 --0.21162522257 --0.0649327564162 --0.202560262928 --0.0648956829273 --0.193500616283 --0.0649545566728 --0.18425724797 --0.065017908699 --0.17499987908 --0.0649897758901 --0.16591659288 --0.0649616115858 --0.156836727189 --0.0649334082625 --0.147760698565 --0.0649786355164 --0.138428778744 --0.0650284463669 --0.129085700049 --0.0650093546011 --0.119990250175 --0.0649901968987 --0.110896780752 --0.0649709703147 --0.101805736261 --0.0649709703147 -0.101805736261 --0.0649901968987 -0.110896780752 --0.0650093546011 -0.119990250175 --0.0650284463669 -0.129085700049 --0.0649786355164 -0.138428778744 --0.0649334082625 -0.147760698565 --0.0649616115858 -0.156836727189 --0.0649897758901 -0.16591659288 --0.065017908699 -0.17499987908 --0.0649545566728 -0.18425724797 --0.0648956829273 -0.193500616283 --0.0649327564162 -0.202560262928 --0.0649698309855 -0.21162522257 --0.0650069092844 -0.220695089525 --0.0649302205342 -0.229847120712 --0.0648578875923 -0.238982392823 --0.0649037015841 -0.248024614146 --0.0649495610531 -0.257073663839 --0.064995472156 -0.266129185857 --0.0649056252757 -0.275158571797 --0.0648199839881 -0.284168470872 --0.0648743829544 -0.293192506582 --0.0649288859383 -0.302225003903 --0.0649834990886 -0.3112656103 --0.064880772978 -0.320156978728 --0.0647820754375 -0.32902622344 --0.0648448864062 -0.338031714149 --0.0649078686906 -0.347047360011 --0.0649710229278 -0.35607283238 --0.0648557210988 -0.364813190687 --0.0647442521486 -0.373528848719 --0.064815273704 -0.382515781935 --0.0648865415777 -0.391514639249 --0.0649580586285 -0.400525149941 --0.0648305371547 -0.409103780532 --0.0647066262548 -0.417655146386 --0.0647856455047 -0.426623858592 --0.0648649941562 -0.435606375044 --0.0649446695436 -0.44460242984 --0.0558508757184 --0.444470808283 --0.0557945312859 --0.435477564862 --0.0557384173564 --0.426497847967 --0.0556825343015 --0.417531957678 --0.055771244458 --0.408982422497 --0.0558624628286 --0.400405597914 --0.0558117946622 --0.391397909161 --0.055761300715 --0.382401885636 --0.0557109793387 --0.373417775588 --0.0557909086642 --0.364704088099 --0.0558735221554 --0.355965708128 --0.0558287131825 --0.346943088985 --0.0557840245722 --0.337930303215 --0.0557394535916 --0.32892765996 --0.0558103095256 --0.32006052185 --0.0558840043279 --0.311171267591 --0.0558452074467 --0.30213352408 --0.055806487117 --0.293103892763 --0.0557678421198 --0.284082725673 --0.0558293732053 --0.27507507552 --0.0558938810371 --0.26604795177 --0.0558612423967 --0.256995313358 --0.0558286396918 --0.247949154839 --0.0557960662871 --0.238909832267 --0.0558480482459 --0.229776926249 --0.0559031277629 --0.220627267794 --0.0558767607998 --0.211560297414 --0.0558503942285 --0.202498236695 --0.0558240268154 --0.1934415024 --0.0558663419254 --0.18420062191 --0.0559118479094 --0.174945736548 --0.0558918495084 --0.165865363296 --0.0558718280842 --0.156788417117 --0.0558517788059 --0.147715319 --0.0558842614978 --0.138385967868 --0.0559200161528 --0.129045453336 --0.0559064706546 --0.119952939134 --0.0558928780134 --0.110862410538 --0.0558792345882 --0.101774305473 --0.0558792345882 -0.101774305473 --0.0558928780134 -0.110862410538 --0.0559064706546 -0.119952939134 --0.0559200161528 -0.129045453336 --0.0558842614978 -0.138385967868 --0.0558517788059 -0.147715319 --0.0558718280842 -0.156788417117 --0.0558918495084 -0.165865363296 --0.0559118479094 -0.174945736548 --0.0558663419254 -0.18420062191 --0.0558240268154 -0.1934415024 --0.0558503942285 -0.202498236695 --0.0558767607998 -0.211560297414 --0.0559031277629 -0.220627267794 --0.0558480482459 -0.229776926249 --0.0557960662871 -0.238909832267 --0.0558286396918 -0.247949154839 --0.0558612423967 -0.256995313358 --0.0558938810371 -0.26604795177 --0.0558293732053 -0.27507507552 --0.0557678421198 -0.284082725673 --0.055806487117 -0.293103892763 --0.0558452074467 -0.30213352408 --0.0558840043279 -0.311171267591 --0.0558103095256 -0.32006052185 --0.0557394535916 -0.32892765996 --0.0557840245722 -0.337930303215 --0.0558287131825 -0.346943088985 --0.0558735221554 -0.355965708128 --0.0557909086642 -0.364704088099 --0.0557109793387 -0.373417775588 --0.055761300715 -0.382401885636 --0.0558117946622 -0.391397909161 --0.0558624628286 -0.400405597914 --0.055771244458 -0.408982422497 --0.0556825343015 -0.417531957678 --0.0557384173564 -0.426497847967 --0.0557945312859 -0.435477564862 --0.0558508757184 -0.444470808283 --0.046376121769 --0.444697368755 --0.0463015019339 --0.435699046697 --0.0462271935633 --0.42671427198 --0.0461531901581 --0.417743336845 --0.04626946149 --0.409191016344 --0.0463890961608 --0.400611405805 --0.0463220847688 --0.391598666486 --0.0462553051202 --0.382597607606 --0.0461887546874 --0.373608477694 --0.0462933838906 --0.364891673266 --0.0464015870842 --0.356150166079 --0.0463423811938 --0.347122510394 --0.0462833397026 --0.338104703199 --0.0462244547054 --0.329097054416 --0.0463171279016 --0.320226443793 --0.0464135690272 --0.311333722299 --0.0463623439017 --0.302290975139 --0.0463112181243 --0.293256337796 --0.0462601913479 --0.284230163991 --0.0463406467448 --0.27521873629 --0.0464250349706 --0.266187844466 --0.0463819472917 --0.257130204592 --0.0463389060857 --0.248079036004 --0.0462959063285 --0.239034718864 --0.0463639046393 --0.229897766748 --0.0464359783408 --0.220744048667 --0.0464011531855 --0.21167207546 --0.0463663312799 --0.202605010092 --0.0463315094147 --0.193543270418 --0.0463868831823 --0.184298105837 --0.0464464506427 --0.175038931467 --0.0464199993117 --0.165953546009 --0.0463935152564 --0.156871584243 --0.0463669965927 --0.147793478353 --0.0464095786505 --0.13845965595 --0.046456448993 --0.129114659711 --0.0464384600951 --0.120017127268 --0.0464204108961 --0.110921576904 --0.0464204108961 -0.110921576904 --0.0464384600951 -0.120017127268 --0.046456448993 -0.129114659711 --0.0464095786505 -0.13845965595 --0.0463669965927 -0.147793478353 --0.0463935152564 -0.156871584243 --0.0464199993117 -0.165953546009 --0.0464464506427 -0.175038931467 --0.0463868831823 -0.184298105837 --0.0463315094147 -0.193543270418 --0.0463663312799 -0.202605010092 --0.0464011531855 -0.21167207546 --0.0464359783408 -0.220744048667 --0.0463639046393 -0.229897766748 --0.0462959063285 -0.239034718864 --0.0463389060857 -0.248079036004 --0.0463819472917 -0.257130204592 --0.0464250349706 -0.266187844466 --0.0463406467448 -0.27521873629 --0.0462601913479 -0.284230163991 --0.0463112181243 -0.293256337796 --0.0463623439017 -0.302290975139 --0.0464135690272 -0.311333722299 --0.0463171279016 -0.320226443793 --0.0462244547054 -0.329097054416 --0.0462833397026 -0.338104703199 --0.0463423811938 -0.347122510394 --0.0464015870842 -0.356150166079 --0.0462933838906 -0.364891673266 --0.0461887546874 -0.373608477694 --0.0462553051202 -0.382597607606 --0.0463220847688 -0.391598666486 --0.0463890961608 -0.400611405805 --0.04626946149 -0.409191016344 --0.0461531901581 -0.417743336845 --0.0462271935633 -0.42671427198 --0.0463015019339 -0.435699046697 --0.046376121769 -0.444697368755 --0.0368957865161 --0.444987171929 --0.0368029213202 --0.435982459336 --0.0367104437487 --0.426991327578 --0.0366183450522 --0.418014027912 --0.0367621529761 --0.409458087731 --0.0369101772962 --0.400874872524 --0.0368268439654 --0.391855762187 --0.0367438017397 --0.382848344741 --0.0366610464797 --0.373852880195 --0.0367903502607 --0.36513201548 --0.0369241197068 --0.356386434688 --0.0368505382855 --0.347352409638 --0.0367771604939 --0.338328237088 --0.03670398221 --0.329314244085 --0.0368184553891 --0.320439156118 --0.0369376182664 --0.311541938433 --0.0368739805433 --0.302492833222 --0.0368104708014 --0.293451847212 --0.0367470831325 --0.284419322647 --0.0368464434403 --0.275403003566 --0.0369506908377 --0.266367212757 --0.0368971665135 --0.25730321024 --0.0368437013147 --0.248245675022 --0.0367902919329 --0.239194999809 --0.0368742888211 --0.230052803869 --0.0369633398847 --0.220893823109 --0.0369200695187 --0.211815473574 --0.0368768042488 --0.202742037724 --0.036833540927 --0.193673923463 --0.036901960387 --0.184423196968 --0.0369755745669 --0.175158460905 --0.0369426795739 --0.166066696507 --0.0369097426344 --0.156978340929 --0.0368767633164 --0.147893834856 --0.0369294345967 --0.138554219433 --0.036987410967 --0.129203425953 --0.0369649854024 --0.120099482013 --0.0369424848681 --0.110997515554 --0.0369424848681 -0.110997515554 --0.0369649854024 -0.120099482013 --0.036987410967 -0.129203425953 --0.0369294345967 -0.138554219433 --0.0368767633164 -0.147893834856 --0.0369097426344 -0.156978340929 --0.0369426795739 -0.166066696507 --0.0369755745669 -0.175158460905 --0.036901960387 -0.184423196968 --0.036833540927 -0.193673923463 --0.0368768042488 -0.202742037724 --0.0369200695187 -0.211815473574 --0.0369633398847 -0.220893823109 --0.0368742888211 -0.230052803869 --0.0367902919329 -0.239194999809 --0.0368437013147 -0.248245675022 --0.0368971665135 -0.25730321024 --0.0369506908377 -0.266367212757 --0.0368464434403 -0.275403003566 --0.0367470831325 -0.284419322647 --0.0368104708014 -0.293451847212 --0.0368739805433 -0.302492833222 --0.0369376182664 -0.311541938433 --0.0368184553891 -0.320439156118 --0.03670398221 -0.329314244085 --0.0367771604939 -0.338328237088 --0.0368505382855 -0.347352409638 --0.0369241197068 -0.356386434688 --0.0367903502607 -0.36513201548 --0.0366610464797 -0.373852880195 --0.0367438017397 -0.382848344741 --0.0368268439654 -0.391855762187 --0.0369101772962 -0.400874872524 --0.0367621529761 -0.409458087731 --0.0366183450522 -0.418014027912 --0.0367104437487 -0.426991327578 --0.0368029213202 -0.435982459336 --0.0368957865161 -0.444987171929 --0.0277912250248 --0.444981660384 --0.027721749714 --0.435977150736 --0.0276525625647 --0.426986243338 --0.0275836585003 --0.418009156848 --0.0276921931922 --0.409453356029 --0.0278038398448 --0.400870286991 --0.0277414079634 --0.391851381448 --0.0276791925915 --0.382844168581 --0.027617191548 --0.373848908368 --0.0277148895948 --0.365128133693 --0.0278159020838 --0.356382633697 --0.027760709745 --0.347348805515 --0.0277056687862 --0.338324835287 --0.0276507779811 --0.329311038806 --0.0277373525843 --0.320436002876 --0.027827422261 --0.311538833841 --0.0277796408375 --0.302489911341 --0.0277319545704 --0.29344911385 --0.0276843593895 --0.284416784772 --0.0277595591647 --0.275400464113 --0.0278384142699 --0.266364669017 --0.0277981943046 --0.257300850773 --0.0277580182275 --0.248243505453 --0.0277178837535 --0.239193014049 --0.0277814887559 --0.230050781339 --0.0278488851862 --0.220891766843 --0.0278163521898 --0.21181359598 --0.0277838210296 --0.202740345144 --0.0277512912181 --0.193672411395 --0.02780311733 --0.1844216154 --0.0278588482642 --0.175156813672 --0.027834108017 --0.166065227905 --0.0278093348 --0.156977049877 --0.0277845292075 --0.14789271653 --0.0278244276328 --0.138553018196 --0.0278683193791 --0.129202140184 --0.0278514545012 --0.120098365966 --0.0278345321638 --0.110996574977 --0.0278345321638 -0.110996574977 --0.0278514545012 -0.120098365966 --0.0278683193791 -0.129202140184 --0.0278244276328 -0.138553018196 --0.0277845292075 -0.14789271653 --0.0278093348 -0.156977049877 --0.027834108017 -0.166065227905 --0.0278588482642 -0.175156813672 --0.02780311733 -0.1844216154 --0.0277512912181 -0.193672411395 --0.0277838210296 -0.202740345144 --0.0278163521898 -0.21181359598 --0.0278488851862 -0.220891766843 --0.0277814887559 -0.230050781339 --0.0277178837535 -0.239193014049 --0.0277580182275 -0.248243505453 --0.0277981943046 -0.257300850773 --0.0278384142699 -0.266364669017 --0.0277595591647 -0.275400464113 --0.0276843593895 -0.284416784772 --0.0277319545704 -0.29344911385 --0.0277796408375 -0.302489911341 --0.027827422261 -0.311538833841 --0.0277373525843 -0.320436002876 --0.0276507779811 -0.329311038806 --0.0277056687862 -0.338324835287 --0.027760709745 -0.347348805515 --0.0278159020838 -0.356382633697 --0.0277148895948 -0.365128133693 --0.027617191548 -0.373848908368 --0.0276791925915 -0.382844168581 --0.0277414079634 -0.391851381448 --0.0278038398448 -0.400870286991 --0.0276921931922 -0.409453356029 --0.0275836585003 -0.418009156848 --0.0276525625647 -0.426986243338 --0.027721749714 -0.435977150736 --0.0277912250248 -0.444981660384 --0.0186860156002 --0.444975735568 --0.0186399405574 --0.435971473683 --0.0185940556291 --0.426980802862 --0.0185483586657 --0.418003952611 --0.0186215906088 --0.409448268772 --0.0186968292818 --0.400865311073 --0.0186553099206 --0.391846657033 --0.0186139331806 --0.382839671933 --0.01857269769 --0.373844624903 --0.0186387637773 --0.365123921895 --0.0187069911061 --0.356378487586 --0.0186701973657 --0.347344871746 --0.0186335042161 --0.338321129606 --0.0185969102985 --0.329307566403 --0.0186555612554 --0.320432544145 --0.0187165128832 --0.311535391593 --0.0186845969581 --0.302486682971 --0.018652742191 --0.293446104948 --0.0186209476571 --0.28441400088 --0.0186719669805 --0.275397667502 --0.0187254081458 --0.266361850744 --0.0186984998286 --0.25729823443 --0.0186716199759 --0.24824109151 --0.0186447663391 --0.239190802694 --0.0186879639425 --0.230048521631 --0.0187336882482 --0.220889456341 --0.018711899098 --0.211811494058 --0.0186901087876 --0.2027384469 --0.0186683171263 --0.193670711886 --0.0187035376386 --0.184419844137 --0.0187413701699 --0.175154968587 --0.0187247877332 --0.166063571675 --0.0187081826038 --0.156975585883 --0.018691555676 --0.147891459142 --0.0187186706924 --0.138551661498 --0.0187484646371 --0.129200676265 --0.0187371633819 --0.120097099211 --0.0187258231465 --0.110995505425 --0.0187258231465 -0.110995505425 --0.0187371633819 -0.120097099211 --0.0187484646371 -0.129200676265 --0.0187186706924 -0.138551661498 --0.018691555676 -0.147891459142 --0.0187081826038 -0.156975585883 --0.0187247877332 -0.166063571675 --0.0187413701699 -0.175154968587 --0.0187035376386 -0.184419844137 --0.0186683171263 -0.193670711886 --0.0186901087876 -0.2027384469 --0.018711899098 -0.211811494058 --0.0187336882482 -0.220889456341 --0.0186879639425 -0.230048521631 --0.0186447663391 -0.239190802694 --0.0186716199759 -0.24824109151 --0.0186984998286 -0.25729823443 --0.0187254081458 -0.266361850744 --0.0186719669805 -0.275397667502 --0.0186209476571 -0.28441400088 --0.018652742191 -0.293446104948 --0.0186845969581 -0.302486682971 --0.0187165128832 -0.311535391593 --0.0186555612554 -0.320432544145 --0.0185969102985 -0.329307566403 --0.0186335042161 -0.338321129606 --0.0186701973657 -0.347344871746 --0.0187069911061 -0.356378487586 --0.0186387637773 -0.365123921895 --0.01857269769 -0.373844624903 --0.0186139331806 -0.382839671933 --0.0186553099206 -0.391846657033 --0.0186968292818 -0.400865311073 --0.0186215906088 -0.409448268772 --0.0185483586657 -0.418003952611 --0.0185940556291 -0.426980802862 --0.0186399405574 -0.435971473683 --0.0186860156002 -0.444975735568 --0.00958062196408 --0.444969430065 --0.0095579563547 --0.435965417381 --0.0095353820167 --0.426974995376 --0.009512897692 --0.417998415256 --0.00955080404256 --0.409442844546 --0.0095896128528 --0.400859974234 --0.00956901262582 --0.391841565928 --0.0095484809934 --0.38283483178 --0.00952801706145 --0.373840035392 --0.00956242999499 --0.365119380352 --0.00959785233905 --0.356373985478 --0.0095794645274 --0.347340621864 --0.00956112471446 --0.33831712389 --0.00954283230263 --0.329303796754 --0.0095735426091 --0.320428783779 --0.00960535796275 --0.311531637523 --0.0095893127628 --0.302483166655 --0.00957329636066 --0.293442820542 --0.00955730796401 --0.284410954667 --0.00958413043115 --0.275394590435 --0.0096121416731 --0.26635873958 --0.00959855065346 --0.25729536125 --0.0095849713247 --0.248238444782 --0.00957140282504 --0.2391883825 --0.00959418036852 --0.230046029952 --0.00961821854386 --0.220886891636 --0.0096071759025 --0.211809157131 --0.00959613008312 --0.202736332311 --0.00958508140349 --0.193668824959 --0.0096036849819 --0.184417867519 --0.00962360683561 --0.175152892004 --0.00961518686925 --0.166061716617 --0.00960675382589 --0.156973956393 --0.0095983071859 --0.147890053645 --0.00961263044987 --0.138550130531 --0.00962831896545 --0.129199025118 --0.00962258422045 --0.12009567309 --0.00961682696756 --0.110994298675 --0.00961682696756 -0.110994298675 --0.00962258422045 -0.12009567309 --0.00962831896545 -0.129199025118 --0.00961263044987 -0.138550130531 --0.0095983071859 -0.147890053645 --0.00960675382589 -0.156973956393 --0.00961518686925 -0.166061716617 --0.00962360683561 -0.175152892004 --0.0096036849819 -0.184417867519 --0.00958508140349 -0.193668824959 --0.00959613008312 -0.202736332311 --0.0096071759025 -0.211809157131 --0.00961821854386 -0.220886891636 --0.00959418036852 -0.230046029952 --0.00957140282504 -0.2391883825 --0.0095849713247 -0.248238444782 --0.00959855065346 -0.25729536125 --0.0096121416731 -0.26635873958 --0.00958413043115 -0.275394590435 --0.00955730796401 -0.284410954667 --0.00957329636066 -0.293442820542 --0.0095893127628 -0.302483166655 --0.00960535796275 -0.311531637523 --0.0095735426091 -0.320428783779 --0.00954283230263 -0.329303796754 --0.00956112471446 -0.33831712389 --0.0095794645274 -0.347340621864 --0.00959785233905 -0.356373985478 --0.00956242999499 -0.365119380352 --0.00952801706145 -0.373840035392 --0.0095484809934 -0.38283483178 --0.00956901262582 -0.391841565928 --0.0095896128528 -0.400859974234 --0.00955080404256 -0.409442844546 --0.009512897692 -0.417998415256 --0.0095353820167 -0.426974995376 --0.0095579563547 -0.435965417381 --0.00958062196408 -0.444969430065 -0 --0.444966181715 -0 --0.435962284222 -0 --0.426971997728 -0 --0.417995562543 -0 --0.409440046984 -0 --0.400857220697 -0 --0.391838914927 -0 --0.382832312153 -0 --0.373837661282 -0 --0.365117029911 -0 --0.356371646096 -0 --0.347338418464 -0 --0.338315048497 -0 --0.329301835773 -0 --0.320426830896 -0 --0.311529691168 -0 --0.302481338043 -0 --0.293441104106 -0 --0.284409363878 -0 --0.275392978581 -0 --0.266357104707 -0 --0.257293854453 -0 --0.248237060256 -0 --0.239187114396 -0 --0.230044720345 -0 --0.220885545925 -0 --0.211807931325 -0 --0.202735225647 -0 --0.19366783814 -0 --0.184416826485 -0 --0.175151793255 -0 --0.166060737452 -0 --0.156973099541 -0 --0.147889311661 -0 --0.138549320014 -0 --0.129198151999 -0 --0.120094917391 -0 --0.110993660426 -0 -0.110993660426 -0 -0.120094917391 -0 -0.129198151999 -0 -0.138549320014 -0 -0.147889311661 -0 -0.156973099541 -0 -0.166060737452 -0 -0.175151793255 -0 -0.184416826485 -0 -0.19366783814 -0 -0.202735225647 -0 -0.211807931325 -0 -0.220885545925 -0 -0.230044720345 -0 -0.239187114396 -0 -0.248237060256 -0 -0.257293854453 -0 -0.266357104707 -0 -0.275392978581 -0 -0.284409363878 -0 -0.293441104106 -0 -0.302481338043 -0 -0.311529691168 -0 -0.320426830896 -0 -0.329301835773 -0 -0.338315048497 -0 -0.347338418464 -0 -0.356371646096 -0 -0.365117029911 -0 -0.373837661282 -0 -0.382832312153 -0 -0.391838914927 -0 -0.400857220697 -0 -0.409440046984 -0 -0.417995562543 -0 -0.426971997728 -0 -0.435962284222 -0 -0.444966181715 -0.00958062196408 --0.444969430065 -0.0095579563547 --0.435965417381 -0.0095353820167 --0.426974995376 -0.009512897692 --0.417998415256 -0.00955080404256 --0.409442844546 -0.0095896128528 --0.400859974234 -0.00956901262582 --0.391841565928 -0.0095484809934 --0.38283483178 -0.00952801706145 --0.373840035392 -0.00956242999499 --0.365119380352 -0.00959785233905 --0.356373985478 -0.0095794645274 --0.347340621864 -0.00956112471446 --0.33831712389 -0.00954283230263 --0.329303796754 -0.0095735426091 --0.320428783779 -0.00960535796275 --0.311531637523 -0.0095893127628 --0.302483166655 -0.00957329636066 --0.293442820542 -0.00955730796401 --0.284410954667 -0.00958413043115 --0.275394590435 -0.0096121416731 --0.26635873958 -0.00959855065346 --0.25729536125 -0.0095849713247 --0.248238444782 -0.00957140282504 --0.2391883825 -0.00959418036852 --0.230046029952 -0.00961821854386 --0.220886891636 -0.0096071759025 --0.211809157131 -0.00959613008312 --0.202736332311 -0.00958508140349 --0.193668824959 -0.0096036849819 --0.184417867519 -0.00962360683561 --0.175152892004 -0.00961518686925 --0.166061716617 -0.00960675382589 --0.156973956393 -0.0095983071859 --0.147890053645 -0.00961263044987 --0.138550130531 -0.00962831896545 --0.129199025118 -0.00962258422045 --0.12009567309 -0.00961682696756 --0.110994298675 -0.00961682696756 -0.110994298675 -0.00962258422045 -0.12009567309 -0.00962831896545 -0.129199025118 -0.00961263044987 -0.138550130531 -0.0095983071859 -0.147890053645 -0.00960675382589 -0.156973956393 -0.00961518686925 -0.166061716617 -0.00962360683561 -0.175152892004 -0.0096036849819 -0.184417867519 -0.00958508140349 -0.193668824959 -0.00959613008312 -0.202736332311 -0.0096071759025 -0.211809157131 -0.00961821854386 -0.220886891636 -0.00959418036852 -0.230046029952 -0.00957140282504 -0.2391883825 -0.0095849713247 -0.248238444782 -0.00959855065346 -0.25729536125 -0.0096121416731 -0.26635873958 -0.00958413043115 -0.275394590435 -0.00955730796401 -0.284410954667 -0.00957329636066 -0.293442820542 -0.0095893127628 -0.302483166655 -0.00960535796275 -0.311531637523 -0.0095735426091 -0.320428783779 -0.00954283230263 -0.329303796754 -0.00956112471446 -0.33831712389 -0.0095794645274 -0.347340621864 -0.00959785233905 -0.356373985478 -0.00956242999499 -0.365119380352 -0.00952801706145 -0.373840035392 -0.0095484809934 -0.38283483178 -0.00956901262582 -0.391841565928 -0.0095896128528 -0.400859974234 -0.00955080404256 -0.409442844546 -0.009512897692 -0.417998415256 -0.0095353820167 -0.426974995376 -0.0095579563547 -0.435965417381 -0.00958062196408 -0.444969430065 -0.0186860156002 --0.444975735568 -0.0186399405574 --0.435971473683 -0.0185940556291 --0.426980802862 -0.0185483586657 --0.418003952611 -0.0186215906088 --0.409448268772 -0.0186968292818 --0.400865311073 -0.0186553099206 --0.391846657033 -0.0186139331806 --0.382839671933 -0.01857269769 --0.373844624903 -0.0186387637773 --0.365123921895 -0.0187069911061 --0.356378487586 -0.0186701973657 --0.347344871746 -0.0186335042161 --0.338321129606 -0.0185969102985 --0.329307566403 -0.0186555612554 --0.320432544145 -0.0187165128832 --0.311535391593 -0.0186845969581 --0.302486682971 -0.018652742191 --0.293446104948 -0.0186209476571 --0.28441400088 -0.0186719669805 --0.275397667502 -0.0187254081458 --0.266361850744 -0.0186984998286 --0.25729823443 -0.0186716199759 --0.24824109151 -0.0186447663391 --0.239190802694 -0.0186879639425 --0.230048521631 -0.0187336882482 --0.220889456341 -0.018711899098 --0.211811494058 -0.0186901087876 --0.2027384469 -0.0186683171263 --0.193670711886 -0.0187035376386 --0.184419844137 -0.0187413701699 --0.175154968587 -0.0187247877332 --0.166063571675 -0.0187081826038 --0.156975585883 -0.018691555676 --0.147891459142 -0.0187186706924 --0.138551661498 -0.0187484646371 --0.129200676265 -0.0187371633819 --0.120097099211 -0.0187258231465 --0.110995505425 -0.0187258231465 -0.110995505425 -0.0187371633819 -0.120097099211 -0.0187484646371 -0.129200676265 -0.0187186706924 -0.138551661498 -0.018691555676 -0.147891459142 -0.0187081826038 -0.156975585883 -0.0187247877332 -0.166063571675 -0.0187413701699 -0.175154968587 -0.0187035376386 -0.184419844137 -0.0186683171263 -0.193670711886 -0.0186901087876 -0.2027384469 -0.018711899098 -0.211811494058 -0.0187336882482 -0.220889456341 -0.0186879639425 -0.230048521631 -0.0186447663391 -0.239190802694 -0.0186716199759 -0.24824109151 -0.0186984998286 -0.25729823443 -0.0187254081458 -0.266361850744 -0.0186719669805 -0.275397667502 -0.0186209476571 -0.28441400088 -0.018652742191 -0.293446104948 -0.0186845969581 -0.302486682971 -0.0187165128832 -0.311535391593 -0.0186555612554 -0.320432544145 -0.0185969102985 -0.329307566403 -0.0186335042161 -0.338321129606 -0.0186701973657 -0.347344871746 -0.0187069911061 -0.356378487586 -0.0186387637773 -0.365123921895 -0.01857269769 -0.373844624903 -0.0186139331806 -0.382839671933 -0.0186553099206 -0.391846657033 -0.0186968292818 -0.400865311073 -0.0186215906088 -0.409448268772 -0.0185483586657 -0.418003952611 -0.0185940556291 -0.426980802862 -0.0186399405574 -0.435971473683 -0.0186860156002 -0.444975735568 -0.0277912250248 --0.444981660384 -0.027721749714 --0.435977150736 -0.0276525625647 --0.426986243338 -0.0275836585003 --0.418009156848 -0.0276921931922 --0.409453356029 -0.0278038398448 --0.400870286991 -0.0277414079634 --0.391851381448 -0.0276791925915 --0.382844168581 -0.027617191548 --0.373848908368 -0.0277148895948 --0.365128133693 -0.0278159020838 --0.356382633697 -0.027760709745 --0.347348805515 -0.0277056687862 --0.338324835287 -0.0276507779811 --0.329311038806 -0.0277373525843 --0.320436002876 -0.027827422261 --0.311538833841 -0.0277796408375 --0.302489911341 -0.0277319545704 --0.29344911385 -0.0276843593895 --0.284416784772 -0.0277595591647 --0.275400464113 -0.0278384142699 --0.266364669017 -0.0277981943046 --0.257300850773 -0.0277580182275 --0.248243505453 -0.0277178837535 --0.239193014049 -0.0277814887559 --0.230050781339 -0.0278488851862 --0.220891766843 -0.0278163521898 --0.21181359598 -0.0277838210296 --0.202740345144 -0.0277512912181 --0.193672411395 -0.02780311733 --0.1844216154 -0.0278588482642 --0.175156813672 -0.027834108017 --0.166065227905 -0.0278093348 --0.156977049877 -0.0277845292075 --0.14789271653 -0.0278244276328 --0.138553018196 -0.0278683193791 --0.129202140184 -0.0278514545012 --0.120098365966 -0.0278345321638 --0.110996574977 -0.0278345321638 -0.110996574977 -0.0278514545012 -0.120098365966 -0.0278683193791 -0.129202140184 -0.0278244276328 -0.138553018196 -0.0277845292075 -0.14789271653 -0.0278093348 -0.156977049877 -0.027834108017 -0.166065227905 -0.0278588482642 -0.175156813672 -0.02780311733 -0.1844216154 -0.0277512912181 -0.193672411395 -0.0277838210296 -0.202740345144 -0.0278163521898 -0.21181359598 -0.0278488851862 -0.220891766843 -0.0277814887559 -0.230050781339 -0.0277178837535 -0.239193014049 -0.0277580182275 -0.248243505453 -0.0277981943046 -0.257300850773 -0.0278384142699 -0.266364669017 -0.0277595591647 -0.275400464113 -0.0276843593895 -0.284416784772 -0.0277319545704 -0.29344911385 -0.0277796408375 -0.302489911341 -0.027827422261 -0.311538833841 -0.0277373525843 -0.320436002876 -0.0276507779811 -0.329311038806 -0.0277056687862 -0.338324835287 -0.027760709745 -0.347348805515 -0.0278159020838 -0.356382633697 -0.0277148895948 -0.365128133693 -0.027617191548 -0.373848908368 -0.0276791925915 -0.382844168581 -0.0277414079634 -0.391851381448 -0.0278038398448 -0.400870286991 -0.0276921931922 -0.409453356029 -0.0275836585003 -0.418009156848 -0.0276525625647 -0.426986243338 -0.027721749714 -0.435977150736 -0.0277912250248 -0.444981660384 -0.0368957865161 --0.444987171929 -0.0368029213202 --0.435982459336 -0.0367104437487 --0.426991327578 -0.0366183450522 --0.418014027912 -0.0367621529761 --0.409458087731 -0.0369101772962 --0.400874872524 -0.0368268439654 --0.391855762187 -0.0367438017397 --0.382848344741 -0.0366610464797 --0.373852880195 -0.0367903502607 --0.36513201548 -0.0369241197068 --0.356386434688 -0.0368505382855 --0.347352409638 -0.0367771604939 --0.338328237088 -0.03670398221 --0.329314244085 -0.0368184553891 --0.320439156118 -0.0369376182664 --0.311541938433 -0.0368739805433 --0.302492833222 -0.0368104708014 --0.293451847212 -0.0367470831325 --0.284419322647 -0.0368464434403 --0.275403003566 -0.0369506908377 --0.266367212757 -0.0368971665135 --0.25730321024 -0.0368437013147 --0.248245675022 -0.0367902919329 --0.239194999809 -0.0368742888211 --0.230052803869 -0.0369633398847 --0.220893823109 -0.0369200695187 --0.211815473574 -0.0368768042488 --0.202742037724 -0.036833540927 --0.193673923463 -0.036901960387 --0.184423196968 -0.0369755745669 --0.175158460905 -0.0369426795739 --0.166066696507 -0.0369097426344 --0.156978340929 -0.0368767633164 --0.147893834856 -0.0369294345967 --0.138554219433 -0.036987410967 --0.129203425953 -0.0369649854024 --0.120099482013 -0.0369424848681 --0.110997515554 -0.0369424848681 -0.110997515554 -0.0369649854024 -0.120099482013 -0.036987410967 -0.129203425953 -0.0369294345967 -0.138554219433 -0.0368767633164 -0.147893834856 -0.0369097426344 -0.156978340929 -0.0369426795739 -0.166066696507 -0.0369755745669 -0.175158460905 -0.036901960387 -0.184423196968 -0.036833540927 -0.193673923463 -0.0368768042488 -0.202742037724 -0.0369200695187 -0.211815473574 -0.0369633398847 -0.220893823109 -0.0368742888211 -0.230052803869 -0.0367902919329 -0.239194999809 -0.0368437013147 -0.248245675022 -0.0368971665135 -0.25730321024 -0.0369506908377 -0.266367212757 -0.0368464434403 -0.275403003566 -0.0367470831325 -0.284419322647 -0.0368104708014 -0.293451847212 -0.0368739805433 -0.302492833222 -0.0369376182664 -0.311541938433 -0.0368184553891 -0.320439156118 -0.03670398221 -0.329314244085 -0.0367771604939 -0.338328237088 -0.0368505382855 -0.347352409638 -0.0369241197068 -0.356386434688 -0.0367903502607 -0.36513201548 -0.0366610464797 -0.373852880195 -0.0367438017397 -0.382848344741 -0.0368268439654 -0.391855762187 -0.0369101772962 -0.400874872524 -0.0367621529761 -0.409458087731 -0.0366183450522 -0.418014027912 -0.0367104437487 -0.426991327578 -0.0368029213202 -0.435982459336 -0.0368957865161 -0.444987171929 -0.046376121769 --0.444697368755 -0.0463015019339 --0.435699046697 -0.0462271935633 --0.42671427198 -0.0461531901581 --0.417743336845 -0.04626946149 --0.409191016344 -0.0463890961608 --0.400611405805 -0.0463220847688 --0.391598666486 -0.0462553051202 --0.382597607606 -0.0461887546874 --0.373608477694 -0.0462933838906 --0.364891673266 -0.0464015870842 --0.356150166079 -0.0463423811938 --0.347122510394 -0.0462833397026 --0.338104703199 -0.0462244547054 --0.329097054416 -0.0463171279016 --0.320226443793 -0.0464135690272 --0.311333722299 -0.0463623439017 --0.302290975139 -0.0463112181243 --0.293256337796 -0.0462601913479 --0.284230163991 -0.0463406467448 --0.27521873629 -0.0464250349706 --0.266187844466 -0.0463819472917 --0.257130204592 -0.0463389060857 --0.248079036004 -0.0462959063285 --0.239034718864 -0.0463639046393 --0.229897766748 -0.0464359783408 --0.220744048667 -0.0464011531855 --0.21167207546 -0.0463663312799 --0.202605010092 -0.0463315094147 --0.193543270418 -0.0463868831823 --0.184298105837 -0.0464464506427 --0.175038931467 -0.0464199993117 --0.165953546009 -0.0463935152564 --0.156871584243 -0.0463669965927 --0.147793478353 -0.0464095786505 --0.13845965595 -0.046456448993 --0.129114659711 -0.0464384600951 --0.120017127268 -0.0464204108961 --0.110921576904 -0.0464204108961 -0.110921576904 -0.0464384600951 -0.120017127268 -0.046456448993 -0.129114659711 -0.0464095786505 -0.13845965595 -0.0463669965927 -0.147793478353 -0.0463935152564 -0.156871584243 -0.0464199993117 -0.165953546009 -0.0464464506427 -0.175038931467 -0.0463868831823 -0.184298105837 -0.0463315094147 -0.193543270418 -0.0463663312799 -0.202605010092 -0.0464011531855 -0.21167207546 -0.0464359783408 -0.220744048667 -0.0463639046393 -0.229897766748 -0.0462959063285 -0.239034718864 -0.0463389060857 -0.248079036004 -0.0463819472917 -0.257130204592 -0.0464250349706 -0.266187844466 -0.0463406467448 -0.27521873629 -0.0462601913479 -0.284230163991 -0.0463112181243 -0.293256337796 -0.0463623439017 -0.302290975139 -0.0464135690272 -0.311333722299 -0.0463171279016 -0.320226443793 -0.0462244547054 -0.329097054416 -0.0462833397026 -0.338104703199 -0.0463423811938 -0.347122510394 -0.0464015870842 -0.356150166079 -0.0462933838906 -0.364891673266 -0.0461887546874 -0.373608477694 -0.0462553051202 -0.382597607606 -0.0463220847688 -0.391598666486 -0.0463890961608 -0.400611405805 -0.04626946149 -0.409191016344 -0.0461531901581 -0.417743336845 -0.0462271935633 -0.42671427198 -0.0463015019339 -0.435699046697 -0.046376121769 -0.444697368755 -0.0558508757184 --0.444470808283 -0.0557945312859 --0.435477564862 -0.0557384173564 --0.426497847967 -0.0556825343015 --0.417531957678 -0.055771244458 --0.408982422497 -0.0558624628286 --0.400405597914 -0.0558117946622 --0.391397909161 -0.055761300715 --0.382401885636 -0.0557109793387 --0.373417775588 -0.0557909086642 --0.364704088099 -0.0558735221554 --0.355965708128 -0.0558287131825 --0.346943088985 -0.0557840245722 --0.337930303215 -0.0557394535916 --0.32892765996 -0.0558103095256 --0.32006052185 -0.0558840043279 --0.311171267591 -0.0558452074467 --0.30213352408 -0.055806487117 --0.293103892763 -0.0557678421198 --0.284082725673 -0.0558293732053 --0.27507507552 -0.0558938810371 --0.26604795177 -0.0558612423967 --0.256995313358 -0.0558286396918 --0.247949154839 -0.0557960662871 --0.238909832267 -0.0558480482459 --0.229776926249 -0.0559031277629 --0.220627267794 -0.0558767607998 --0.211560297414 -0.0558503942285 --0.202498236695 -0.0558240268154 --0.1934415024 -0.0558663419254 --0.18420062191 -0.0559118479094 --0.174945736548 -0.0558918495084 --0.165865363296 -0.0558718280842 --0.156788417117 -0.0558517788059 --0.147715319 -0.0558842614978 --0.138385967868 -0.0559200161528 --0.129045453336 -0.0559064706546 --0.119952939134 -0.0558928780134 --0.110862410538 -0.0558792345882 --0.101774305473 -0.0558792345882 -0.101774305473 -0.0558928780134 -0.110862410538 -0.0559064706546 -0.119952939134 -0.0559200161528 -0.129045453336 -0.0558842614978 -0.138385967868 -0.0558517788059 -0.147715319 -0.0558718280842 -0.156788417117 -0.0558918495084 -0.165865363296 -0.0559118479094 -0.174945736548 -0.0558663419254 -0.18420062191 -0.0558240268154 -0.1934415024 -0.0558503942285 -0.202498236695 -0.0558767607998 -0.211560297414 -0.0559031277629 -0.220627267794 -0.0558480482459 -0.229776926249 -0.0557960662871 -0.238909832267 -0.0558286396918 -0.247949154839 -0.0558612423967 -0.256995313358 -0.0558938810371 -0.26604795177 -0.0558293732053 -0.27507507552 -0.0557678421198 -0.284082725673 -0.055806487117 -0.293103892763 -0.0558452074467 -0.30213352408 -0.0558840043279 -0.311171267591 -0.0558103095256 -0.32006052185 -0.0557394535916 -0.32892765996 -0.0557840245722 -0.337930303215 -0.0558287131825 -0.346943088985 -0.0558735221554 -0.355965708128 -0.0557909086642 -0.364704088099 -0.0557109793387 -0.373417775588 -0.055761300715 -0.382401885636 -0.0558117946622 -0.391397909161 -0.0558624628286 -0.400405597914 -0.055771244458 -0.408982422497 -0.0556825343015 -0.417531957678 -0.0557384173564 -0.426497847967 -0.0557945312859 -0.435477564862 -0.0558508757184 -0.444470808283 -0.0649446695436 --0.44460242984 -0.0648649941562 --0.435606375044 -0.0647856455047 --0.426623858592 -0.0647066262548 --0.417655146386 -0.0648305371547 --0.409103780532 -0.0649580586285 --0.400525149941 -0.0648865415777 --0.391514639249 -0.064815273704 --0.382515781935 -0.0647442521486 --0.373528848719 -0.0648557210988 --0.364813190687 -0.0649710229278 --0.35607283238 -0.0649078686906 --0.347047360011 -0.0648448864062 --0.338031714149 -0.0647820754375 --0.32902622344 -0.064880772978 --0.320156978728 -0.0649834990886 --0.3112656103 -0.0649288859383 --0.302225003903 -0.0648743829544 --0.293192506582 -0.0648199839881 --0.284168470872 -0.0649056252757 --0.275158571797 -0.064995472156 --0.266129185857 -0.0649495610531 --0.257073663839 -0.0649037015841 --0.248024614146 -0.0648578875923 --0.238982392823 -0.0649302205342 --0.229847120712 -0.0650069092844 --0.220695089525 -0.0649698309855 --0.21162522257 -0.0649327564162 --0.202560262928 -0.0648956829273 --0.193500616283 -0.0649545566728 --0.18425724797 -0.065017908699 --0.17499987908 -0.0649897758901 --0.16591659288 -0.0649616115858 --0.156836727189 -0.0649334082625 --0.147760698565 -0.0649786355164 --0.138428778744 -0.0650284463669 --0.129085700049 -0.0650093546011 --0.119990250175 -0.0649901968987 --0.110896780752 -0.0649709703147 --0.101805736261 -0.0649709703147 -0.101805736261 -0.0649901968987 -0.110896780752 -0.0650093546011 -0.119990250175 -0.0650284463669 -0.129085700049 -0.0649786355164 -0.138428778744 -0.0649334082625 -0.147760698565 -0.0649616115858 -0.156836727189 -0.0649897758901 -0.16591659288 -0.065017908699 -0.17499987908 -0.0649545566728 -0.18425724797 -0.0648956829273 -0.193500616283 -0.0649327564162 -0.202560262928 -0.0649698309855 -0.21162522257 -0.0650069092844 -0.220695089525 -0.0649302205342 -0.229847120712 -0.0648578875923 -0.238982392823 -0.0649037015841 -0.248024614146 -0.0649495610531 -0.257073663839 -0.064995472156 -0.266129185857 -0.0649056252757 -0.275158571797 -0.0648199839881 -0.284168470872 -0.0648743829544 -0.293192506582 -0.0649288859383 -0.302225003903 -0.0649834990886 -0.3112656103 -0.064880772978 -0.320156978728 -0.0647820754375 -0.32902622344 -0.0648448864062 -0.338031714149 -0.0649078686906 -0.347047360011 -0.0649710229278 -0.35607283238 -0.0648557210988 -0.364813190687 -0.0647442521486 -0.373528848719 -0.064815273704 -0.382515781935 -0.0648865415777 -0.391514639249 -0.0649580586285 -0.400525149941 -0.0648305371547 -0.409103780532 -0.0647066262548 -0.417655146386 -0.0647856455047 -0.426623858592 -0.0648649941562 -0.435606375044 -0.0649446695436 -0.44460242984 -0.0740398926542 --0.444733770196 -0.0739368860898 --0.435734894127 -0.0738343073975 --0.426749587291 -0.0737321519524 --0.417778095852 -0.073891248985 --0.409224896145 -0.07405505717 --0.400644414755 -0.0739626953606 --0.391631086696 -0.0738706551116 --0.382629422609 -0.0737789319562 --0.373639684434 -0.0739219318863 --0.364922044921 -0.0740699086105 --0.356179689102 -0.0739884104076 --0.347151384697 -0.0739071390621 --0.338132913561 -0.0738260862094 --0.329124589097 -0.0739526131508 --0.320253205352 -0.0740843646237 --0.311359705125 -0.0740139364482 --0.302316256323 -0.0739436477834 --0.293280907556 -0.0738734949336 --0.284254019576 -0.0739832374021 --0.275241846171 -0.0740984154472 --0.26621019123 -0.0740392341972 --0.257151807762 -0.0739801191999 --0.248099894397 -0.0739210660009 --0.239054807683 -0.0740137403275 --0.229917139443 -0.0741120305748 --0.220762711541 -0.0740642439376 --0.211689964427 -0.0740164609969 --0.202622117609 -0.0739686791366 --0.193559579294 -0.0740441031978 --0.1843137122 -0.0741252983994 --0.175053845762 -0.0740890341906 --0.165967668926 -0.0740527259947 --0.156884899471 -0.0740163692637 --0.14780596262 -0.0740743384203 --0.13847146244 -0.0741381991675 --0.129125795272 -0.0741135598928 --0.120027428907 -0.0740888407372 --0.110931043975 -0.0740640331129 --0.101837085375 -0.0741043681447 --0.0924348551487 -0.0741043681447 -0.0924348551487 -0.0740640331129 -0.101837085375 -0.0740888407372 -0.110931043975 -0.0741135598928 -0.120027428907 -0.0741381991675 -0.129125795272 -0.0740743384203 -0.13847146244 -0.0740163692637 -0.14780596262 -0.0740527259947 -0.156884899471 -0.0740890341906 -0.165967668926 -0.0741252983994 -0.175053845762 -0.0740441031978 -0.1843137122 -0.0739686791366 -0.193559579294 -0.0740164609969 -0.202622117609 -0.0740642439376 -0.211689964427 -0.0741120305748 -0.220762711541 -0.0740137403275 -0.229917139443 -0.0739210660009 -0.239054807683 -0.0739801191999 -0.248099894397 -0.0740392341972 -0.257151807762 -0.0740984154472 -0.26621019123 -0.0739832374021 -0.275241846171 -0.0738734949336 -0.284254019576 -0.0739436477834 -0.293280907556 -0.0740139364482 -0.302316256323 -0.0740843646237 -0.311359705125 -0.0739526131508 -0.320253205352 -0.0738260862094 -0.329124589097 -0.0739071390621 -0.338132913561 -0.0739884104076 -0.347151384697 -0.0740699086105 -0.356179689102 -0.0739219318863 -0.364922044921 -0.0737789319562 -0.373639684434 -0.0738706551116 -0.382629422609 -0.0739626953606 -0.391631086696 -0.07405505717 -0.400644414755 -0.073891248985 -0.409224896145 -0.0737321519524 -0.417778095852 -0.0738343073975 -0.426749587291 -0.0739368860898 -0.435734894127 -0.0740398926542 -0.444733770196 -0.0831360819065 --0.444864786105 -0.0830097557356 --0.435863151256 -0.0828839553109 --0.426875073677 -0.0827586696219 --0.417900803494 -0.0829529327818 --0.40934574628 -0.0831530070509 --0.400763398109 -0.0830398035615 --0.391747276122 -0.0829269949742 --0.382742817399 -0.0828145767893 --0.373750301423 -0.0829890837175 --0.365030649936 -0.0831697154336 --0.356286260706 -0.0830698817986 --0.347255154174 -0.0829703264907 --0.338233884983 -0.0828710405418 --0.329222755778 -0.0830253816348 --0.320349213875 -0.0831861382175 --0.311453548296 -0.0830998988897 --0.302407278824 -0.0830138314486 --0.293369114078 -0.0829279320157 --0.284339396241 -0.0830617604436 --0.275324922774 -0.0832022518303 --0.266290973342 -0.0831298015087 --0.257229744328 -0.0830574366452 --0.248174989053 -0.082985148556 --0.239127064589 -0.0830981490933 --0.229986981733 -0.0832180278687 --0.220830133126 -0.08315953593 --0.211754522301 -0.0831010480192 --0.20268380939 -0.0830425630793 --0.193618414852 -0.083134528955 --0.184370031669 -0.0832335552826 --0.175107644823 -0.083189162574 --0.16601859676 -0.0831447108639 --0.15693293639 -0.0831002033439 --0.147851119968 -0.0831709070601 --0.138514021432 -0.0832488095964 --0.129165741075 -0.0832186265684 --0.120064483798 -0.0831883463521 --0.11096520576 -0.0831579580829 --0.101868352484 -0.0832071973084 --0.0924634507146 -0.0832637432598 --0.0830502591578 -0.0832637432598 -0.0830502591578 -0.0832071973084 -0.0924634507146 -0.0831579580829 -0.101868352484 -0.0831883463521 -0.11096520576 -0.0832186265684 -0.120064483798 -0.0832488095964 -0.129165741075 -0.0831709070601 -0.138514021432 -0.0831002033439 -0.147851119968 -0.0831447108639 -0.15693293639 -0.083189162574 -0.16601859676 -0.0832335552826 -0.175107644823 -0.083134528955 -0.184370031669 -0.0830425630793 -0.193618414852 -0.0831010480192 -0.20268380939 -0.08315953593 -0.211754522301 -0.0832180278687 -0.220830133126 -0.0830981490933 -0.229986981733 -0.082985148556 -0.239127064589 -0.0830574366452 -0.248174989053 -0.0831298015087 -0.257229744328 -0.0832022518303 -0.266290973342 -0.0830617604436 -0.275324922774 -0.0829279320157 -0.284339396241 -0.0830138314486 -0.293369114078 -0.0830998988897 -0.302407278824 -0.0831861382175 -0.311453548296 -0.0830253816348 -0.320349213875 -0.0828710405418 -0.329222755778 -0.0829703264907 -0.338233884983 -0.0830698817986 -0.347255154174 -0.0831697154336 -0.356286260706 -0.0829890837175 -0.365030649936 -0.0828145767893 -0.373750301423 -0.0829269949742 -0.382742817399 -0.0830398035615 -0.391747276122 -0.0831530070509 -0.400763398109 -0.0829529327818 -0.40934574628 -0.0827586696219 -0.417900803494 -0.0828839553109 -0.426875073677 -0.0830097557356 -0.435863151256 -0.0831360819065 -0.444864786105 -0.0922537343406 --0.417458490499 -0.0924201889105 --0.408908734125 -0.0925915939695 --0.400331690901 -0.0924949021761 --0.391326199114 -0.0923985445397 --0.382332332636 -0.0923025238947 --0.373350384764 -0.0924520380861 --0.364636962394 -0.0926067758041 --0.355898801859 -0.0925214855042 --0.346878247463 -0.0924364308875 --0.337867500016 -0.0923516105586 --0.328866891038 -0.0924838952309 --0.32000042577 -0.0926216592094 --0.311111837185 -0.0925479817193 --0.302076088723 -0.0924744452754 --0.29304840787 -0.0924010525133 --0.284029155575 -0.0925157491421 --0.275022537825 -0.0926361432899 --0.265996458547 -0.0925742523447 --0.256945714984 -0.0925124326817 --0.247901414743 -0.0924506765735 --0.238863936581 -0.092547514989 --0.22973241045 -0.092650243628 --0.22058412784 -0.0926002963861 --0.211518970489 -0.0925503529797 --0.202458704639 -0.0925004129478 --0.193403752543 -0.0925791915423 --0.184164531586 -0.0926640157322 --0.174911312263 -0.0926261432862 --0.165832707397 -0.0925882196675 --0.156757493019 -0.0925502448466 --0.147686115163 -0.0926107364696 --0.138358665631 -0.092677399614 --0.129020046872 -0.0926517005361 --0.119929241049 -0.0926259140767 --0.110840410919 -0.092600040865 --0.10175400501 -0.092642115436 --0.0923591238643 -0.0926904510311 --0.0829559626843 -0.0926770069137 --0.0738545053553 -0.0926770069137 -0.0738545053553 -0.0926904510311 -0.0829559626843 -0.092642115436 -0.0923591238643 -0.092600040865 -0.10175400501 -0.0926259140767 -0.110840410919 -0.0926517005361 -0.119929241049 -0.092677399614 -0.129020046872 -0.0926107364696 -0.138358665631 -0.0925502448466 -0.147686115163 -0.0925882196675 -0.156757493019 -0.0926261432862 -0.165832707397 -0.0926640157322 -0.174911312263 -0.0925791915423 -0.184164531586 -0.0925004129478 -0.193403752543 -0.0925503529797 -0.202458704639 -0.0926002963861 -0.211518970489 -0.092650243628 -0.22058412784 -0.092547514989 -0.22973241045 -0.0924506765735 -0.238863936581 -0.0925124326817 -0.247901414743 -0.0925742523447 -0.256945714984 -0.0926361432899 -0.265996458547 -0.0925157491421 -0.275022537825 -0.0924010525133 -0.284029155575 -0.0924744452754 -0.29304840787 -0.0925479817193 -0.302076088723 -0.0926216592094 -0.311111837185 -0.0924838952309 -0.32000042577 -0.0923516105586 -0.328866891038 -0.0924364308875 -0.337867500016 -0.0925214855042 -0.346878247463 -0.0926067758041 -0.355898801859 -0.0924520380861 -0.364636962394 -0.0923025238947 -0.373350384764 -0.0923985445397 -0.382332332636 -0.0924949021761 -0.391326199114 -0.0925915939695 -0.400331690901 -0.0924201889105 -0.408908734125 -0.0922537343406 -0.417458490499 -0.101740268009 --0.417075024135 -0.101878848481 --0.40852974668 -0.102021515647 --0.399957183718 -0.101941382425 --0.390961010158 -0.101861523164 --0.381976429451 -0.101781943502 --0.373003731274 -0.101906412091 --0.364295613117 -0.102035197213 --0.355562756113 -0.101964488118 --0.346551428763 -0.101893977724 --0.33754989285 -0.101823659292 --0.328558462833 -0.10193383571 --0.319698053951 -0.102048551503 --0.31081551924 -0.101987466715 --0.301788934149 -0.101926498104 --0.292770404466 -0.101865646554 --0.28376029 -0.101961167607 --0.274760428032 -0.102061418492 --0.265741102446 -0.102010119565 --0.256699488419 -0.101958873434 --0.24766429203 -0.101907675643 --0.238635913778 -0.101988318244 --0.229511771275 -0.102073858792 --0.220370859758 -0.102032479475 --0.211314793669 -0.101991103365 --0.202263612654 -0.101949729949 --0.193217731339 -0.102015290236 --0.183986420294 -0.102085880732 --0.174741109331 -0.1020545479 --0.165671580743 -0.102023168528 --0.156605441374 -0.101991742782 --0.147543127287 -0.10204200199 --0.138224021463 -0.10209740021 --0.128893749833 -0.102076196545 --0.119812010379 -0.102054918687 --0.110732248155 -0.102033569895 --0.101654910329 -0.102068458358 --0.0922687017979 -0.102108568505 --0.0828742195417 -0.102097577341 --0.0737818407737 -0.102086488746 --0.0646900595381 -0.102075305023 --0.0555993343987 -0.102075305023 -0.0555993343987 -0.102086488746 -0.0646900595381 -0.102097577341 -0.0737818407737 -0.102108568505 -0.0828742195417 -0.102068458358 -0.0922687017979 -0.102033569895 -0.101654910329 -0.102054918687 -0.110732248155 -0.102076196545 -0.119812010379 -0.10209740021 -0.128893749833 -0.10204200199 -0.138224021463 -0.101991742782 -0.147543127287 -0.102023168528 -0.156605441374 -0.1020545479 -0.165671580743 -0.102085880732 -0.174741109331 -0.102015290236 -0.183986420294 -0.101949729949 -0.193217731339 -0.101991103365 -0.202263612654 -0.102032479475 -0.211314793669 -0.102073858792 -0.220370859758 -0.101988318244 -0.229511771275 -0.101907675643 -0.238635913778 -0.101958873434 -0.24766429203 -0.102010119565 -0.256699488419 -0.102061418492 -0.265741102446 -0.101961167607 -0.274760428032 -0.101865646554 -0.28376029 -0.101926498104 -0.292770404466 -0.101987466715 -0.301788934149 -0.102048551503 -0.31081551924 -0.10193383571 -0.319698053951 -0.101823659292 -0.328558462833 -0.101893977724 -0.33754989285 -0.101964488118 -0.346551428763 -0.102035197213 -0.355562756113 -0.101906412091 -0.364295613117 -0.101781943502 -0.373003731274 -0.101861523164 -0.381976429451 -0.101941382425 -0.390961010158 -0.102021515647 -0.399957183718 -0.101878848481 -0.40852974668 -0.101740268009 -0.417075024135 -0.110751742117 --0.417315274808 -0.110925346472 --0.408766473353 -0.111104129904 --0.400190379352 -0.111003249053 --0.391188812813 -0.110902717626 --0.38219883531 -0.110802533973 --0.373220741868 -0.110958378702 --0.364508730072 -0.111119688201 --0.355771971531 -0.111030727986 --0.346755219899 -0.11094201474 --0.337748253919 -0.11085354599 --0.328751378553 -0.110991427167 --0.319886760459 -0.111135027779 --0.310999991612 -0.111058196668 --0.301967909787 -0.110981519736 --0.29294390528 -0.110904994658 --0.283928312964 -0.111024504259 --0.27492392456 -0.111149966571 --0.265900050138 -0.111085459482 --0.256852903861 -0.111021020619 --0.247812176647 -0.110956647439 --0.238778270164 -0.111057536223 --0.229649334423 -0.111164577364 --0.220503609295 -0.111112538766 --0.211441981182 -0.111060506347 --0.202385238698 -0.111008478192 --0.193333776206 -0.111090514781 --0.184097418811 -0.111178864744 --0.174847055736 -0.111139435575 --0.165771919152 -0.11109995065 --0.156700173227 -0.111060410628 --0.147632250175 -0.111123348847 --0.138307904754 -0.111192734136 --0.128972385464 -0.11116601402 --0.119885011115 -0.111139200726 --0.110799609235 -0.111112295065 --0.10171662909 -0.111156048584 --0.0923250296629 -0.111206345944 --0.0829251490813 -0.111192418614 --0.073827107581 -0.111178370131 --0.0647296568895 -0.111164200718 --0.0556332629377 -0.111188569053 --0.0461962057708 -0.111219538784 --0.0367537926475 -0.111218452367 --0.0276468463017 -0.111217242109 --0.0185391506386 -0.111215902743 --0.0094311772543 -0.111215199413 --2.16840434497e-19 -0.111215902743 -0.0094311772543 -0.111217242109 -0.0185391506386 -0.111218452367 -0.0276468463017 -0.111219538784 -0.0367537926475 -0.111188569053 -0.0461962057708 -0.111164200718 -0.0556332629377 -0.111178370131 -0.0647296568895 -0.111192418614 -0.073827107581 -0.111206345944 -0.0829251490813 -0.111156048584 -0.0923250296629 -0.111112295065 -0.10171662909 -0.111139200726 -0.110799609235 -0.11116601402 -0.119885011115 -0.111192734136 -0.128972385464 -0.111123348847 -0.138307904754 -0.111060410628 -0.147632250175 -0.11109995065 -0.156700173227 -0.111139435575 -0.165771919152 -0.111178864744 -0.174847055736 -0.111090514781 -0.184097418811 -0.111008478192 -0.193333776206 -0.111060506347 -0.202385238698 -0.111112538766 -0.211441981182 -0.111164577364 -0.220503609295 -0.111057536223 -0.229649334423 -0.110956647439 -0.238778270164 -0.111021020619 -0.247812176647 -0.111085459482 -0.256852903861 -0.111149966571 -0.265900050138 -0.111024504259 -0.27492392456 -0.110904994658 -0.283928312964 -0.110981519736 -0.29294390528 -0.111058196668 -0.301967909787 -0.111135027779 -0.310999991612 -0.110991427167 -0.319886760459 -0.11085354599 -0.328751378553 -0.11094201474 -0.337748253919 -0.111030727986 -0.346755219899 -0.111119688201 -0.355771971531 -0.110958378702 -0.364508730072 -0.110802533973 -0.373220741868 -0.110902717626 -0.38219883531 -0.111003249053 -0.391188812813 -0.111104129904 -0.400190379352 -0.110925346472 -0.408766473353 -0.110751742117 -0.417315274808 -0.119766262407 --0.417555499135 -0.119974885274 --0.409003148501 -0.120189781202 --0.400423487838 -0.120068151997 --0.391416533986 -0.11994694742 --0.382421190785 -0.119826154123 --0.373437718621 -0.120013366477 --0.364721791389 -0.120207192594 --0.355981107083 -0.120099980048 --0.346958939993 -0.119993062919 --0.337946555365 -0.119886440228 --0.328944258994 -0.120052018349 --0.320075402375 -0.120224501981 --0.311184382842 -0.120131933109 --0.302146841114 -0.120039547321 --0.293117366971 -0.119947341396 --0.284096307594 -0.120090831902 --0.275087363604 -0.120241501656 --0.266058917218 -0.120163787217 --0.257006267279 -0.120086155975 --0.247960037592 -0.120008605437 --0.238920613875 -0.120129733187 --0.229786845378 -0.120258268358 --0.220636283847 -0.120195574268 --0.211569110069 -0.120132885097 --0.202506817159 -0.120070198996 --0.193449793239 -0.120168713121 --0.184208369208 -0.120274816413 --0.174952929749 -0.12022728667 --0.165872202036 -0.120179697443 --0.156794867476 -0.120132040599 --0.147721345948 -0.120207656592 --0.138391734483 -0.120291023043 --0.129050944463 -0.120258779905 --0.119957955015 -0.12022643518 --0.110866933694 -0.120193977907 --0.101778324247 -0.120246595312 --0.0923813106566 -0.120307076178 --0.0829760084906 -0.120290210515 --0.0738723200174 -0.120273204204 --0.0647692185448 -0.120256054547 --0.0556671727486 -0.12028545944 --0.0462246045372 -0.120322798552 --0.0367766736493 -0.12032136235 --0.0276640601106 -0.120319778041 --0.0185506950764 -0.120318051361 --0.00943705050459 -0.120317149359 -2.16840434497e-19 -0.120318051361 -0.00943705050459 -0.120319778041 -0.0185506950764 -0.12032136235 -0.0276640601106 -0.120322798552 -0.0367766736493 -0.12028545944 -0.0462246045372 -0.120256054547 -0.0556671727486 -0.120273204204 -0.0647692185448 -0.120290210515 -0.0738723200174 -0.120307076178 -0.0829760084906 -0.120246595312 -0.0923813106566 -0.120193977907 -0.101778324247 -0.12022643518 -0.110866933694 -0.120258779905 -0.119957955015 -0.120291023043 -0.129050944463 -0.120207656592 -0.138391734483 -0.120132040599 -0.147721345948 -0.120179697443 -0.156794867476 -0.12022728667 -0.165872202036 -0.120274816413 -0.174952929749 -0.120168713121 -0.184208369208 -0.120070198996 -0.193449793239 -0.120132885097 -0.202506817159 -0.120195574268 -0.211569110069 -0.120258268358 -0.220636283847 -0.120129733187 -0.229786845378 -0.120008605437 -0.238920613875 -0.120086155975 -0.247960037592 -0.120163787217 -0.257006267279 -0.120241501656 -0.266058917218 -0.120090831902 -0.275087363604 -0.119947341396 -0.284096307594 -0.120039547321 -0.293117366971 -0.120131933109 -0.302146841114 -0.120224501981 -0.311184382842 -0.120052018349 -0.320075402375 -0.119886440228 -0.328944258994 -0.119993062919 -0.337946555365 -0.120099980048 -0.346958939993 -0.120207192594 -0.355981107083 -0.120013366477 -0.364721791389 -0.119826154123 -0.373437718621 -0.11994694742 -0.382421190785 -0.120068151997 -0.391416533986 -0.120189781202 -0.400423487838 -0.119974885274 -0.409003148501 -0.119766262407 -0.417555499135 -0.128783405269 --0.417795715428 -0.129027031361 --0.409239779378 -0.129278027418 --0.400656523148 -0.129135647531 --0.391644213004 -0.128993768039 --0.38264350287 -0.128852371657 --0.37365466268 -0.129070949202 --0.364934820232 -0.129297281399 --0.356190193664 -0.129171808691 --0.347162611324 -0.129046688231 --0.338144818663 -0.128921909598 --0.329137117903 -0.129115172345 --0.320263998444 -0.129316529452 --0.311368700284 -0.129208220247 --0.302325708416 -0.129100129106 --0.293290781227 -0.128992243709 --0.284264266087 -0.129159706902 --0.275250749426 -0.129335575453 --0.26621771439 -0.129244654182 --0.257159577389 -0.129153831491 --0.248107856452 -0.12906310132 --0.239062937798 -0.129204463545 --0.229924319466 -0.129354488673 --0.220768887501 -0.129281140154 --0.211696184089 -0.129207795486 --0.202628351886 -0.129134448653 --0.193565791762 -0.129249428209 --0.184319277849 -0.129373282422 --0.175058732587 -0.129317655145 --0.165972436547 -0.129261956192 --0.156889523297 -0.129206186175 --0.147810426522 -0.129294484369 --0.138475528451 -0.129391830871 --0.129129437914 -0.129354062313 --0.120030847319 -0.129316178051 --0.110934217972 -0.129278163593 --0.101839997578 -0.129339644298 --0.0924375477471 -0.129410311394 --0.0830268006765 -0.129390504826 --0.0739174798733 -0.129370537898 --0.0648087441234 -0.1293504141 --0.0557010635273 -0.129384853798 --0.0462529579613 -0.129428554744 --0.0367994862255 -0.129426771942 --0.0276812233729 -0.129424816111 --0.0185622051166 -0.129422693648 --0.00944290602232 -0.129421587797 -0 -0.129422693648 -0.00944290602232 -0.129424816111 -0.0185622051166 -0.129426771942 -0.0276812233729 -0.129428554744 -0.0367994862255 -0.129384853798 -0.0462529579613 -0.1293504141 -0.0557010635273 -0.129370537898 -0.0648087441234 -0.129390504826 -0.0739174798733 -0.129410311394 -0.0830268006765 -0.129339644298 -0.0924375477471 -0.129278163593 -0.101839997578 -0.129316178051 -0.110934217972 -0.129354062313 -0.120030847319 -0.129391830871 -0.129129437914 -0.129294484369 -0.138475528451 -0.129206186175 -0.147810426522 -0.129261956192 -0.156889523297 -0.129317655145 -0.165972436547 -0.129373282422 -0.175058732587 -0.129249428209 -0.184319277849 -0.129134448653 -0.193565791762 -0.129207795486 -0.202628351886 -0.129281140154 -0.211696184089 -0.129354488673 -0.220768887501 -0.129204463545 -0.229924319466 -0.12906310132 -0.239062937798 -0.129153831491 -0.248107856452 -0.129244654182 -0.257159577389 -0.129335575453 -0.26621771439 -0.129159706902 -0.275250749426 -0.128992243709 -0.284264266087 -0.129100129106 -0.293290781227 -0.129208220247 -0.302325708416 -0.129316529452 -0.311368700284 -0.129115172345 -0.320263998444 -0.128921909598 -0.329137117903 -0.129046688231 -0.338144818663 -0.129171808691 -0.347162611324 -0.129297281399 -0.356190193664 -0.129070949202 -0.364934820232 -0.128852371657 -0.37365466268 -0.128993768039 -0.38264350287 -0.129135647531 -0.391644213004 -0.129278027418 -0.400656523148 -0.129027031361 -0.409239779378 -0.128783405269 -0.417795715428 -0.138655752718 --0.400057603499 -0.13853018942 --0.391060148805 -0.138405063077 --0.382074236836 -0.138280368022 --0.373100153449 -0.138473557614 --0.364388681188 -0.138673583427 --0.355652433186 -0.138562920197 --0.34663957184 -0.138452563237 --0.337636461064 -0.138342510224 --0.328643408719 -0.138513313019 --0.31977994704 -0.138691256863 --0.310894308549 -0.138595733437 --0.30186593878 -0.13850040628 --0.292845611136 -0.138405258435 --0.283833656867 -0.138553251839 --0.274830965635 -0.138708670846 --0.265808766229 -0.138628498471 --0.256765174971 -0.1385484118 --0.247727982916 -0.138468407261 --0.238697573195 -0.138593296902 --0.229570807397 -0.138725847247 --0.220427244751 -0.138661199865 --0.211369046182 -0.138596551001 --0.202315699689 -0.13853190047 --0.193267616849 -0.138633440187 --0.184033852045 -0.138742828483 --0.174786067454 -0.138693844253 --0.165714250407 -0.138644794154 --0.156645806264 -0.138595681254 --0.147581172463 -0.138673595607 --0.138259757174 -0.138759508247 --0.128927158157 -0.138726308609 --0.119843036563 -0.13869300197 --0.110760872583 -0.138659579287 --0.101681113329 -0.138713734231 --0.0922926921845 -0.138776012537 --0.0828959864539 -0.13875869377 --0.0738011462425 -0.138741229841 --0.0647068930894 -0.138723627146 --0.0556136938764 -0.138753863098 --0.0461799762757 -0.138792288988 --0.0367409053761 -0.138790909047 --0.0276371515107 -0.138789369423 --0.0185326486928 -0.138787686229 --0.00942786953707 -0.13878681032 -0 -0.138787686229 -0.00942786953707 -0.138789369423 -0.0185326486928 -0.138790909047 -0.0276371515107 -0.138792288988 -0.0367409053761 -0.138753863098 -0.0461799762757 -0.138723627146 -0.0556136938764 -0.138741229841 -0.0647068930894 -0.13875869377 -0.0738011462425 -0.138776012537 -0.0828959864539 -0.138713734231 -0.0922926921845 -0.138659579287 -0.101681113329 -0.13869300197 -0.110760872583 -0.138726308609 -0.119843036563 -0.138759508247 -0.128927158157 -0.138673595607 -0.138259757174 -0.138595681254 -0.147581172463 -0.138644794154 -0.156645806264 -0.138693844253 -0.165714250407 -0.138742828483 -0.174786067454 -0.138633440187 -0.184033852045 -0.13853190047 -0.193267616849 -0.138596551001 -0.202315699689 -0.138661199865 -0.211369046182 -0.138725847247 -0.220427244751 -0.138593296902 -0.229570807397 -0.138468407261 -0.238697573195 -0.1385484118 -0.247727982916 -0.138628498471 -0.256765174971 -0.138708670846 -0.265808766229 -0.138553251839 -0.274830965635 -0.138405258435 -0.283833656867 -0.13850040628 -0.292845611136 -0.138595733437 -0.30186593878 -0.138691256863 -0.310894308549 -0.138513313019 -0.31977994704 -0.138342510224 -0.328643408719 -0.138452563237 -0.337636461064 -0.138562920197 -0.34663957184 -0.138673583427 -0.355652433186 -0.138473557614 -0.364388681188 -0.138280368022 -0.373100153449 -0.138405063077 -0.382074236836 -0.13853018942 -0.391060148805 -0.138655752718 -0.400057603499 -0.148021741802 --0.399515178262 -0.147913067952 --0.390531278698 -0.147804767163 --0.381558884054 -0.147696839525 --0.372598256307 -0.147864541885 --0.363894230132 -0.148038160684 --0.355165428496 -0.14794237423 --0.346165994135 -0.147846844812 --0.33717627066 -0.147751577519 --0.328196544473 -0.147899836163 --0.319341724329 -0.148054282151 --0.31046474239 -0.147971606895 --0.301449689558 -0.147889092998 --0.292442640016 -0.147806728367 --0.283443922006 -0.147935180191 --0.274450954981 -0.148070074138 --0.265438485553 -0.148000700696 --0.25640811315 -0.14793139339 --0.247384115789 -0.147862158522 --0.238366874082 -0.147970522318 --0.229250800434 -0.148085528135 --0.220117930726 -0.148029614316 --0.211072886989 -0.147973695899 --0.202032676437 -0.14791777984 --0.19299771542 -0.148005838696 --0.183775469424 -0.148100703632 --0.174539205519 -0.148058386117 --0.165480514854 -0.14801601442 --0.156425183573 -0.147973579744 --0.147373648878 -0.148041069652 --0.138064427349 -0.148115506282 --0.128744024631 -0.148086890461 --0.119673007722 -0.148058182281 --0.110603946926 -0.148029375804 --0.101537284382 -0.148076179606 --0.0921615627694 -0.148130036271 --0.0827775639457 -0.148115215237 --0.073695833127 -0.148100264278 --0.0646146917318 -0.148085192456 --0.0555346020663 -0.148111211592 --0.0461139163221 -0.148144341182 --0.0366878853622 -0.148143364993 --0.0275972623986 -0.148142249303 --0.0185058982738 -0.148141003202 --0.00941426067545 -0.148140351512 -0 -0.148141003202 -0.00941426067545 -0.148142249303 -0.0185058982738 -0.148143364993 -0.0275972623986 -0.148144341182 -0.0366878853622 -0.148111211592 -0.0461139163221 -0.148085192456 -0.0555346020663 -0.148100264278 -0.0646146917318 -0.148115215237 -0.073695833127 -0.148130036271 -0.0827775639457 -0.148076179606 -0.0921615627694 -0.148029375804 -0.101537284382 -0.148058182281 -0.110603946926 -0.148086890461 -0.119673007722 -0.148115506282 -0.128744024631 -0.148041069652 -0.138064427349 -0.147973579744 -0.147373648878 -0.14801601442 -0.156425183573 -0.148058386117 -0.165480514854 -0.148100703632 -0.174539205519 -0.148005838696 -0.183775469424 -0.14791777984 -0.19299771542 -0.147973695899 -0.202032676437 -0.148029614316 -0.211072886989 -0.148085528135 -0.220117930726 -0.147970522318 -0.229250800434 -0.147862158522 -0.238366874082 -0.14793139339 -0.247384115789 -0.148000700696 -0.25640811315 -0.148070074138 -0.265438485553 -0.147935180191 -0.274450954981 -0.147806728367 -0.283443922006 -0.147889092998 -0.292442640016 -0.147971606895 -0.301449689558 -0.148054282151 -0.31046474239 -0.147899836163 -0.319341724329 -0.147751577519 -0.328196544473 -0.147846844812 -0.33717627066 -0.14794237423 -0.346165994135 -0.148038160684 -0.355165428496 -0.147864541885 -0.363894230132 -0.147696839525 -0.372598256307 -0.147804767163 -0.381558884054 -0.147913067952 -0.390531278698 -0.148021741802 -0.399515178262 -0.157090171366 --0.399861310595 -0.156960884852 --0.390869480144 -0.156832040161 --0.381889140602 -0.156703643338 --0.372920563836 -0.156902517256 --0.364210753244 -0.157108441436 --0.355476137205 -0.156994519837 --0.346468695762 -0.156880905075 --0.3374709583 -0.156767599154 --0.328483220299 -0.156943377587 --0.319622094795 -0.157126528546 --0.31073878611 -0.157028212865 --0.301715656173 -0.156930086049 --0.292700515383 -0.156832149477 --0.28369372078 -0.156984433759 --0.274693966045 -0.157144372391 --0.265674676156 -0.157061875285 --0.25663616342 -0.156979458517 --0.247604007428 -0.156897131791 --0.238578601948 -0.157025611146 --0.229455309213 -0.157161977225 --0.220315196853 -0.157095472409 --0.211261953364 -0.157028963629 --0.202213525456 -0.156962457917 --0.193170331557 -0.157066886004 --0.183940497773 -0.157179397575 --0.174696626946 -0.157129031873 --0.165629664247 -0.157078602696 --0.156566060031 -0.157028106787 --0.147506244839 -0.157108196639 --0.138189127797 -0.157196528282 --0.128860815682 -0.157162428353 --0.119781478555 -0.157128215856 --0.110704088766 -0.157093887435 --0.101629095732 -0.157149503182 --0.0922452484018 -0.157213479993 --0.0828531090943 -0.157195739292 --0.0737630186006 -0.157177849225 --0.0646735106128 -0.157159816834 --0.0555850524271 -0.157190838138 --0.0461560870593 -0.157230294115 --0.0367217674091 -0.157228976235 --0.027622753572 -0.157227494253 --0.018522993938 -0.157225850468 --0.00942295775856 -0.157224988809 -0 -0.157225850468 -0.00942295775856 -0.157227494253 -0.018522993938 -0.157228976235 -0.027622753572 -0.157230294115 -0.0367217674091 -0.157190838138 -0.0461560870593 -0.157159816834 -0.0555850524271 -0.157177849225 -0.0646735106128 -0.157195739292 -0.0737630186006 -0.157213479993 -0.0828531090943 -0.157149503182 -0.0922452484018 -0.157093887435 -0.101629095732 -0.157128215856 -0.110704088766 -0.157162428353 -0.119781478555 -0.157196528282 -0.128860815682 -0.157108196639 -0.138189127797 -0.157028106787 -0.147506244839 -0.157078602696 -0.156566060031 -0.157129031873 -0.165629664247 -0.157179397575 -0.174696626946 -0.157066886004 -0.183940497773 -0.156962457917 -0.193170331557 -0.157028963629 -0.202213525456 -0.157095472409 -0.211261953364 -0.157161977225 -0.220315196853 -0.157025611146 -0.229455309213 -0.156897131791 -0.238578601948 -0.156979458517 -0.247604007428 -0.157061875285 -0.25663616342 -0.157144372391 -0.265674676156 -0.156984433759 -0.274693966045 -0.156832149477 -0.28369372078 -0.156930086049 -0.292700515383 -0.157028212865 -0.301715656173 -0.157126528546 -0.31073878611 -0.156943377587 -0.319622094795 -0.156767599154 -0.328483220299 -0.156880905075 -0.3374709583 -0.156994519837 -0.346468695762 -0.157108441436 -0.355476137205 -0.156902517256 -0.364210753244 -0.156703643338 -0.372920563836 -0.156832040161 -0.381889140602 -0.156960884852 -0.390869480144 -0.157090171366 -0.399861310595 -0.166163309336 --0.40020770746 -0.166013401131 --0.391207949743 -0.165864003486 --0.382219674363 -0.165715128616 --0.37324317409 -0.165945181307 --0.364527542217 -0.166183419369 --0.355787082926 -0.166051350978 --0.346771641064 -0.165919641918 --0.337765890371 -0.165788293073 --0.328770151464 -0.16599159513 --0.319902693298 -0.166203449188 --0.311013023521 -0.166089483029 --0.301981823942 -0.165975738911 --0.292958600829 -0.16586222241 --0.283943726364 -0.166038345709 --0.2749371556 -0.16622333301 --0.265911023028 -0.1661277029 --0.256864372876 -0.166032171795 --0.247824078816 -0.165936744737 --0.238790524387 -0.166085342904 --0.229659977294 -0.166243072633 --0.220512593128 -0.166165968602 --0.211451147776 -0.166088868634 --0.20239451607 -0.166011773299 --0.193343112805 -0.16613256929 --0.184105653442 -0.166262725869 --0.17485413661 -0.166204315216 --0.165778914449 -0.166145824814 --0.156707043069 -0.166087264332 --0.147638952681 -0.16617995925 --0.138313906048 -0.16628218463 --0.12897765 -0.16624260197 --0.119890003977 -0.16620288652 --0.110804299226 -0.166163030963 --0.10172098528 -0.166227453157 --0.0923289779151 -0.166301551047 --0.082928662512 -0.166280896504 --0.073830219489 -0.166260066163 --0.064732353353 -0.16623906417 --0.0556355322075 -0.166275091359 --0.0461982549913 -0.166320882689 --0.0367556163956 -0.166319216259 --0.0276482195234 -0.166317364487 --0.0185400719976 -0.166315333287 --0.0094316463763 -0.166314267836 -0 -0.166315333287 -0.0094316463763 -0.166317364487 -0.0185400719976 -0.166319216259 -0.0276482195234 -0.166320882689 -0.0367556163956 -0.166275091359 -0.0461982549913 -0.16623906417 -0.0556355322075 -0.166260066163 -0.064732353353 -0.166280896504 -0.073830219489 -0.166301551047 -0.082928662512 -0.166227453157 -0.0923289779151 -0.166163030963 -0.10172098528 -0.16620288652 -0.110804299226 -0.16624260197 -0.119890003977 -0.16628218463 -0.12897765 -0.16617995925 -0.138313906048 -0.166087264332 -0.147638952681 -0.166145824814 -0.156707043069 -0.166204315216 -0.165778914449 -0.166262725869 -0.17485413661 -0.16613256929 -0.184105653442 -0.166011773299 -0.193343112805 -0.166088868634 -0.20239451607 -0.166165968602 -0.211451147776 -0.166243072633 -0.220512593128 -0.166085342904 -0.229659977294 -0.165936744737 -0.238790524387 -0.166032171795 -0.247824078816 -0.1661277029 -0.256864372876 -0.16622333301 -0.265911023028 -0.166038345709 -0.2749371556 -0.16586222241 -0.283943726364 -0.165975738911 -0.292958600829 -0.166089483029 -0.301981823942 -0.166203449188 -0.311013023521 -0.16599159513 -0.319902693298 -0.165788293073 -0.328770151464 -0.165919641918 -0.337765890371 -0.166051350978 -0.346771641064 -0.166183419369 -0.355787082926 -0.165945181307 -0.364527542217 -0.165715128616 -0.37324317409 -0.165864003486 -0.382219674363 -0.166013401131 -0.391207949743 -0.166163309336 -0.40020770746 -0.175240732684 --0.40055438716 -0.17507019179 --0.391546694451 -0.174900243171 --0.382550500892 -0.174730881469 --0.373566071868 -0.174992110234 --0.364844592519 -0.175262662119 --0.356098261693 -0.175112442917 --0.347074833573 -0.174962637467 --0.338061088573 -0.174813237595 --0.329057349738 -0.17504406042 --0.320183529647 -0.175284615088 --0.311287458753 -0.175154997597 --0.302248198228 -0.175025637668 --0.293216915158 -0.174896532377 --0.284193963706 -0.17509648187 --0.275180540967 -0.175306519064 --0.266147536976 -0.175197759093 --0.257092758295 -0.175089106865 --0.248044328867 -0.17498058047 --0.239002639679 -0.17514929982 --0.229864819712 -0.175328389176 --0.22071013379 -0.175240682461 --0.211640484108 -0.175152992268 --0.202575656767 -0.175065304896 --0.193516058486 -0.175202463147 --0.184270932352 -0.175350261117 --0.175011735907 -0.175283804127 --0.165928268591 -0.175217256762 --0.15684813549 -0.175150623788 --0.14777178117 -0.175255923292 --0.138438776311 -0.175372052109 --0.129094541814 -0.175326971495 --0.119998589666 -0.175281745053 --0.11090457521 -0.175236372287 --0.101812952527 -0.175309603248 --0.0924127498898 -0.175393821881 --0.0830042261062 -0.175370249807 --0.0738974401623 -0.175346472345 --0.0647912239719 -0.175322502933 --0.0556860479417 -0.175363542903 --0.0462404256762 -0.175415658965 --0.0367894324019 -0.175413646912 --0.0276736601027 -0.175411432099 --0.0185571339248 -0.175409006049 --0.00944032634276 -0.175407737569 --2.16840434497e-19 -0.175409006049 -0.00944032634276 -0.175411432099 -0.0185571339248 -0.175413646912 -0.0276736601027 -0.175415658965 -0.0367894324019 -0.175363542903 -0.0462404256762 -0.175322502933 -0.0556860479417 -0.175346472345 -0.0647912239719 -0.175370249807 -0.0738974401623 -0.175393821881 -0.0830042261062 -0.175309603248 -0.0924127498898 -0.175236372287 -0.101812952527 -0.175281745053 -0.11090457521 -0.175326971495 -0.119998589666 -0.175372052109 -0.129094541814 -0.175255923292 -0.138438776311 -0.175150623788 -0.14777178117 -0.175217256762 -0.15684813549 -0.175283804127 -0.165928268591 -0.175350261117 -0.175011735907 -0.175202463147 -0.184270932352 -0.175065304896 -0.193516058486 -0.175152992268 -0.202575656767 -0.175240682461 -0.211640484108 -0.175328389176 -0.22071013379 -0.17514929982 -0.229864819712 -0.17498058047 -0.239002639679 -0.175089106865 -0.248044328867 -0.175197759093 -0.257092758295 -0.175306519064 -0.266147536976 -0.17509648187 -0.275180540967 -0.174896532377 -0.284193963706 -0.175025637668 -0.293216915158 -0.175154997597 -0.302248198228 -0.175284615088 -0.311287458753 -0.17504406042 -0.320183529647 -0.174813237595 -0.329057349738 -0.174962637467 -0.338061088573 -0.175112442917 -0.347074833573 -0.175262662119 -0.356098261693 -0.174992110234 -0.364844592519 -0.174730881469 -0.373566071868 -0.174900243171 -0.382550500892 -0.17507019179 -0.391546694451 -0.175240732684 -0.40055438716 -0.184536095083 --0.399791760233 -0.18438243249 --0.39080304667 -0.184229301156 --0.381825770986 -0.18407668424 --0.372860167999 -0.184312414879 --0.364149190855 -0.184556555681 --0.355413379335 -0.184421202468 --0.346408754758 -0.184286216235 --0.337413758579 -0.184151593234 --0.328428703154 -0.184359883854 --0.319567068605 -0.184576943899 --0.310683180505 -0.18446016209 --0.301662573015 -0.184343610141 --0.292649912316 -0.184227276272 --0.283645523972 -0.184407704205 --0.2746458293 -0.184597241586 --0.265626570356 -0.184499269809 --0.25659033096 -0.184401389821 --0.24756040742 -0.184303626608 --0.238537199784 -0.184455805558 --0.229414469402 -0.184617350671 --0.220274891097 -0.184538375633 --0.211223706949 -0.184459408813 --0.202177318673 -0.184380448158 --0.19313614139 -0.184504155454 --0.183907292043 -0.184637467527 --0.174664383101 -0.184577667752 --0.165599332999 -0.184517790403 --0.156537606445 -0.184457833221 --0.147479643297 -0.184552712161 --0.138163870005 -0.184657372746 --0.128836875895 -0.184616870586 --0.11975932269 -0.184576234396 --0.110683701134 -0.184535467653 --0.101610461124 -0.184601359408 --0.092228216202 -0.184677168169 --0.0828376658569 -0.184656083289 --0.073749289985 -0.184634819786 --0.064661485892 -0.184613383669 --0.0555747193085 -0.184650171111 --0.0461475222188 -0.1846969619 --0.0367149696546 -0.18469535584 --0.0276176393027 -0.184693559443 --0.0185195645832 -0.184691571597 --0.00942121338044 -0.184690531942 -0 -0.184691571597 -0.00942121338044 -0.184693559443 -0.0185195645832 -0.18469535584 -0.0276176393027 -0.1846969619 -0.0367149696546 -0.184650171111 -0.0461475222188 -0.184613383669 -0.0555747193085 -0.184634819786 -0.064661485892 -0.184656083289 -0.073749289985 -0.184677168169 -0.0828376658569 -0.184601359408 -0.092228216202 -0.184535467653 -0.101610461124 -0.184576234396 -0.110683701134 -0.184616870586 -0.11975932269 -0.184657372746 -0.128836875895 -0.184552712161 -0.138163870005 -0.184457833221 -0.147479643297 -0.184517790403 -0.156537606445 -0.184577667752 -0.165599332999 -0.184637467527 -0.174664383101 -0.184504155454 -0.183907292043 -0.184380448158 -0.19313614139 -0.184459408813 -0.202177318673 -0.184538375633 -0.211223706949 -0.184617350671 -0.220274891097 -0.184455805558 -0.229414469402 -0.184303626608 -0.238537199784 -0.184401389821 -0.24756040742 -0.184499269809 -0.25659033096 -0.184597241586 -0.265626570356 -0.184407704205 -0.2746458293 -0.184227276272 -0.283645523972 -0.184343610141 -0.292649912316 -0.18446016209 -0.301662573015 -0.184576943899 -0.310683180505 -0.184359883854 -0.319567068605 -0.184151593234 -0.328428703154 -0.184286216235 -0.337413758579 -0.184421202468 -0.346408754758 -0.184556555681 -0.355413379335 -0.184312414879 -0.364149190855 -0.18407668424 -0.372860167999 -0.184229301156 -0.381825770986 -0.18438243249 -0.39080304667 -0.184536095083 -0.399791760233 -0.193816669683 --0.399084150057 -0.193679970036 --0.390113163736 -0.193543750859 --0.381153545649 -0.193407984364 --0.372205530615 -0.193618092154 --0.363504165726 -0.19383569087 --0.354777958162 -0.193715277464 --0.345790850687 -0.193595187158 --0.33681332743 -0.193475423828 --0.327845681384 -0.193661067429 --0.31899523736 -0.19385451456 --0.310122550317 -0.193750635067 --0.301119310803 -0.193646955019 --0.29212396702 -0.19354346817 --0.283136860594 -0.193704289638 --0.274149843134 -0.193873220845 --0.265143254504 -0.193786095732 --0.256124256421 -0.193699050538 --0.247111546254 -0.193612101273 --0.238105509093 -0.193747656403 --0.22899673106 -0.193891566952 --0.219871107867 -0.193821370413 --0.210837080052 -0.193751175306 --0.201807822089 -0.193680987977 --0.192783745865 -0.193791181787 --0.183569977782 -0.193909937307 --0.17434215083 -0.193856833418 --0.165294198528 -0.193803654443 --0.156249551513 -0.193750400989 --0.147208651932 -0.193834807372 --0.137908852317 -0.193927945427 --0.128597840687 -0.193892054462 --0.119537364191 -0.193856034114 --0.110478812303 -0.19381989188 --0.10142262301 -0.193878398944 --0.0920570388636 -0.193945758688 --0.0826831656357 -0.193927183781 --0.0736118622871 -0.193908452826 --0.0645411342544 -0.193889561672 --0.0554714407577 -0.193922074895 --0.0460613506434 -0.193963525911 --0.0366459203568 -0.193962319758 --0.0275656911195 -0.193960935561 --0.0184847256548 -0.193959395881 --0.00940349007319 -0.193958586007 -2.16840434497e-19 -0.193959395881 -0.00940349007319 -0.193960935561 -0.0184847256548 -0.193962319758 -0.0275656911195 -0.193963525911 -0.0366459203568 -0.193922074895 -0.0460613506434 -0.193889561672 -0.0554714407577 -0.193908452826 -0.0645411342544 -0.193927183781 -0.0736118622871 -0.193945758688 -0.0826831656357 -0.193878398944 -0.0920570388636 -0.19381989188 -0.10142262301 -0.193856034114 -0.110478812303 -0.193892054462 -0.119537364191 -0.193927945427 -0.128597840687 -0.193834807372 -0.137908852317 -0.193750400989 -0.147208651932 -0.193803654443 -0.156249551513 -0.193856833418 -0.165294198528 -0.193909937307 -0.17434215083 -0.193791181787 -0.183569977782 -0.193680987977 -0.192783745865 -0.193751175306 -0.201807822089 -0.193821370413 -0.210837080052 -0.193891566952 -0.219871107867 -0.193747656403 -0.22899673106 -0.193612101273 -0.238105509093 -0.193699050538 -0.247111546254 -0.193786095732 -0.256124256421 -0.193873220845 -0.265143254504 -0.193704289638 -0.274149843134 -0.19354346817 -0.283136860594 -0.193646955019 -0.29212396702 -0.193750635067 -0.301119310803 -0.19385451456 -0.310122550317 -0.193661067429 -0.31899523736 -0.193475423828 -0.327845681384 -0.193595187158 -0.33681332743 -0.193715277464 -0.345790850687 -0.19383569087 -0.354777958162 -0.193618092154 -0.363504165726 -0.193407984364 -0.372205530615 -0.193543750859 -0.381153545649 -0.193679970036 -0.390113163736 -0.193816669683 -0.399084150057 -0.202869849478 --0.399541376814 -0.202712696236 --0.390559947777 -0.202556090028 --0.381589886262 -0.202400010611 --0.372631439127 -0.202641047395 --0.363922402073 -0.202890702501 --0.355188478546 -0.202752291936 --0.3461908379 -0.202614256673 --0.337202764084 -0.202476594184 --0.328224573762 -0.202689532236 --0.319365760649 -0.202911449756 --0.310484665841 -0.202792054323 --0.301470798791 -0.202672891877 --0.292464819335 -0.202553951438 --0.283467077735 -0.202738412805 --0.274471036891 -0.202932189177 --0.265455388782 -0.202832046461 --0.256425676115 -0.202731996348 --0.247402231082 -0.202632051945 --0.238385446136 -0.202787567151 --0.229267075752 -0.202952668451 --0.220131822758 -0.202871962478 --0.211086992288 -0.202791262101 --0.202046922709 -0.202710563058 --0.193012011593 -0.202836993681 --0.183788138023 -0.202973247156 --0.174550180993 -0.202912160297 --0.165491340874 -0.202850991874 --0.156435800269 -0.202789731884 --0.147383991006 -0.202886638407 --0.138073680215 -0.202993566323 --0.128752143435 -0.202952227409 --0.119680710324 -0.202910744758 --0.110611190482 -0.202869125949 --0.101544030597 -0.202936374374 --0.0921676246675 -0.203013782019 --0.0827829122403 -0.202992306606 --0.073700596384 -0.202970653262 --0.0646188490147 -0.202948824242 --0.055538130142 -0.202986309406 --0.0461170163846 -0.203034043512 --0.0366905511087 -0.203032493904 --0.027599268893 -0.203030743714 --0.0185072445957 -0.203028809091 --0.00941494645388 -0.203027790372 -0 -0.203028809091 -0.00941494645388 -0.203030743714 -0.0185072445957 -0.203032493904 -0.027599268893 -0.203034043512 -0.0366905511087 -0.202986309406 -0.0461170163846 -0.202948824242 -0.055538130142 -0.202970653262 -0.0646188490147 -0.202992306606 -0.073700596384 -0.203013782019 -0.0827829122403 -0.202936374374 -0.0921676246675 -0.202869125949 -0.101544030597 -0.202910744758 -0.110611190482 -0.202952227409 -0.119680710324 -0.202993566323 -0.128752143435 -0.202886638407 -0.138073680215 -0.202789731884 -0.147383991006 -0.202850991874 -0.156435800269 -0.202912160297 -0.165491340874 -0.202973247156 -0.174550180993 -0.202836993681 -0.183788138023 -0.202710563058 -0.193012011593 -0.202791262101 -0.202046922709 -0.202871962478 -0.211086992288 -0.202952668451 -0.220131822758 -0.202787567151 -0.229267075752 -0.202632051945 -0.238385446136 -0.202731996348 -0.247402231082 -0.202832046461 -0.256425676115 -0.202932189177 -0.265455388782 -0.202738412805 -0.274471036891 -0.202553951438 -0.283467077735 -0.202672891877 -0.292464819335 -0.202792054323 -0.301470798791 -0.202911449756 -0.310484665841 -0.202689532236 -0.319365760649 -0.202476594184 -0.328224573762 -0.202614256673 -0.337202764084 -0.202752291936 -0.3461908379 -0.202890702501 -0.355188478546 -0.202641047395 -0.363922402073 -0.202400010611 -0.372631439127 -0.202556090028 -0.381589886262 -0.202712696236 -0.390559947777 -0.202869849478 -0.399541376814 -0.211929408244 --0.399999319146 -0.211751793079 --0.39100744775 -0.211574780327 --0.382026933176 -0.21139836404 --0.373058041213 -0.21167034609 --0.364341306795 -0.211952070531 --0.355599650025 -0.211795652689 --0.346591475106 -0.211639660596 --0.337592847107 -0.211484083012 --0.32860411117 -0.211724326634 --0.319736889812 -0.211974732804 --0.310847347977 -0.21183981023 --0.301822857459 -0.211705145467 --0.292806240557 -0.211570739127 --0.28379784984 -0.211778851458 --0.274792743143 -0.211997480275 --0.265767993907 -0.211884303243 --0.256727559079 -0.211771239254 --0.247693388863 -0.211658295184 --0.238665871547 -0.211833774344 --0.229537859639 -0.21202007853 --0.22039293282 -0.211928863532 --0.211337296931 -0.211837644478 --0.202286407591 -0.211746422996 --0.193240662038 -0.21188910613 --0.184006642681 -0.212042871266 --0.174758515221 -0.211973788066 --0.165688783762 -0.211904618555 --0.156622346806 -0.21183536442 --0.147559632178 -0.211944782363 --0.138238765243 -0.212065490439 --0.128906651972 -0.212018699959 --0.119824259214 -0.211971749216 --0.110743768751 -0.211924654823 --0.10166564037 -0.212000658816 --0.0922783718241 -0.212088108523 --0.0828827715483 -0.212063735827 --0.073789441513 -0.212039157795 --0.0646966714358 -0.21201437672 --0.055604924832 -0.212056834501 --0.0461727422766 -0.212110842781 --0.0367351943393 -0.212108951366 --0.0276328569974 -0.212106845778 --0.0185297711111 -0.21210451682 --0.00942640638465 -0.212103292735 -0 -0.21210451682 -0.00942640638465 -0.212106845778 -0.0185297711111 -0.212108951366 -0.0276328569974 -0.212110842781 -0.0367351943393 -0.212056834501 -0.0461727422766 -0.21201437672 -0.055604924832 -0.212039157795 -0.0646966714358 -0.212063735827 -0.073789441513 -0.212088108523 -0.0828827715483 -0.212000658816 -0.0922783718241 -0.211924654823 -0.10166564037 -0.211971749216 -0.110743768751 -0.212018699959 -0.119824259214 -0.212065490439 -0.128906651972 -0.211944782363 -0.138238765243 -0.21183536442 -0.147559632178 -0.211904618555 -0.156622346806 -0.211973788066 -0.165688783762 -0.212042871266 -0.174758515221 -0.21188910613 -0.184006642681 -0.211746422996 -0.193240662038 -0.211837644478 -0.202286407591 -0.211928863532 -0.211337296931 -0.21202007853 -0.22039293282 -0.211833774344 -0.229537859639 -0.211658295184 -0.238665871547 -0.211771239254 -0.247693388863 -0.211884303243 -0.256727559079 -0.211997480275 -0.265767993907 -0.211778851458 -0.274792743143 -0.211570739127 -0.28379784984 -0.211705145467 -0.292806240557 -0.21183981023 -0.301822857459 -0.211974732804 -0.310847347977 -0.211724326634 -0.319736889812 -0.211484083012 -0.32860411117 -0.211639660596 -0.337592847107 -0.211795652689 -0.346591475106 -0.211952070531 -0.355599650025 -0.21167034609 -0.364341306795 -0.21139836404 -0.373058041213 -0.211574780327 -0.382026933176 -0.211751793079 -0.39100744775 -0.211929408244 -0.399999319146 -0.220994941014 --0.400457983381 -0.220796836909 --0.391455670622 -0.220599417687 --0.382464710489 -0.220402670336 --0.373485369837 -0.220705604405 --0.364760912175 -0.221019400392 --0.356011476985 -0.220844961006 --0.34699275816 -0.220670996657 --0.337983585591 -0.220497494956 --0.32898430237 -0.220765061248 --0.32010864618 -0.221043957073 --0.311210616228 -0.220893494423 --0.302175487323 -0.22074332497 --0.293148232322 -0.220593438842 --0.284129195963 -0.220825206628 --0.275114992477 -0.221068699281 --0.266081105443 -0.220942476341 --0.257029940099 -0.220816391706 --0.247985036323 -0.220690446453 --0.238946784032 -0.220885894279 --0.229809097373 -0.221093401456 --0.220654458361 -0.22099166152 --0.211588003408 -0.220889918757 --0.202526285822 -0.220788180227 --0.193469716226 -0.220947119109 --0.184225513209 -0.221118405658 --0.174967171159 -0.221041332835 --0.165886546205 -0.220964158444 --0.156809203509 -0.220886889677 --0.147735582409 -0.221008816149 --0.13840411933 -0.221143314275 --0.129061381095 -0.221091069823 --0.119968022118 -0.221038658411 --0.110876563039 -0.220986086113 --0.10178745969 -0.221070837132 --0.0923892806869 -0.221168330313 --0.0829827519957 -0.221141064697 --0.0738784041023 -0.221113566533 --0.0647746071628 -0.221085836768 --0.0556718287884 -0.221133262967 --0.0462285315435 -0.221193547048 --0.0367798557533 -0.221191309234 --0.0276664571392 -0.221188838454 --0.0185523046805 -0.221186125082 --0.0094378701392 -0.221184705469 -2.16840434497e-19 -0.221186125082 -0.0094378701392 -0.221188838454 -0.0185523046805 -0.221191309234 -0.0276664571392 -0.221193547048 -0.0367798557533 -0.221133262967 -0.0462285315435 -0.221085836768 -0.0556718287884 -0.221113566533 -0.0647746071628 -0.221141064697 -0.0738784041023 -0.221168330313 -0.0829827519957 -0.221070837132 -0.0923892806869 -0.220986086113 -0.10178745969 -0.221038658411 -0.110876563039 -0.221091069823 -0.119968022118 -0.221143314275 -0.129061381095 -0.221008816149 -0.13840411933 -0.220886889677 -0.147735582409 -0.220964158444 -0.156809203509 -0.221041332835 -0.165886546205 -0.221118405658 -0.174967171159 -0.220947119109 -0.184225513209 -0.220788180227 -0.193469716226 -0.220889918757 -0.202526285822 -0.22099166152 -0.211588003408 -0.221093401456 -0.220654458361 -0.220885894279 -0.229809097373 -0.220690446453 -0.238946784032 -0.220816391706 -0.247985036323 -0.220942476341 -0.257029940099 -0.221068699281 -0.266081105443 -0.220825206628 -0.275114992477 -0.220593438842 -0.284129195963 -0.22074332497 -0.293148232322 -0.220893494423 -0.302175487323 -0.221043957073 -0.311210616228 -0.220765061248 -0.32010864618 -0.220497494956 -0.32898430237 -0.220670996657 -0.337983585591 -0.220844961006 -0.34699275816 -0.221019400392 -0.356011476985 -0.220705604405 -0.364760912175 -0.220402670336 -0.373485369837 -0.220599417687 -0.382464710489 -0.220796836909 -0.391455670622 -0.220994941014 -0.400457983381 -0.229651167689 --0.372628618266 -0.229927860609 --0.363916788693 -0.230214468241 --0.355179988105 -0.230055333409 --0.346184117298 -0.2298966246 --0.337197725325 -0.229738346453 --0.328221156938 -0.229982731598 --0.319360229871 -0.230237451662 --0.310476932009 -0.230100199264 --0.30146445936 -0.22996322397 --0.292459811701 -0.229826493489 --0.283463316686 -0.230038115602 --0.274465747101 -0.23026046152 --0.2654485128 -0.230145343804 --0.256419856395 -0.230030355863 --0.247397424641 -0.229915487123 --0.238381597951 -0.230093957864 --0.229262238546 -0.230283455294 --0.220125947072 -0.230190695811 --0.211081897015 -0.230097941071 --0.202042560598 -0.230005198313 --0.193008350415 -0.230150239999 --0.183783935068 -0.230306567083 --0.174545389225 -0.230236349911 --0.165487105809 -0.230166042246 --0.156432092014 -0.230095645653 --0.147380778756 -0.230206862782 --0.138070291722 -0.230329579231 --0.128748540587 -0.230282053326 --0.119677497547 -0.230234371529 --0.110608351528 -0.230186529656 --0.101541539237 -0.230263735966 --0.0921652269094 -0.230352597881 --0.0827805859827 -0.230327886942 --0.073698558281 -0.23030296403 --0.0646170846254 -0.230277841296 --0.0555366273984 -0.230320897489 --0.046115781938 -0.230375702657 --0.0366895767916 -0.230373864722 --0.027598537392 -0.230371805377 --0.0185067546307 -0.230369547691 --0.00941469741526 -0.230368369429 --2.16840434497e-19 -0.230369547691 -0.00941469741526 -0.230371805377 -0.0185067546307 -0.230373864722 -0.027598537392 -0.230375702657 -0.0366895767916 -0.230320897489 -0.046115781938 -0.230277841296 -0.0555366273984 -0.23030296403 -0.0646170846254 -0.230327886942 -0.073698558281 -0.230352597881 -0.0827805859827 -0.230263735966 -0.0921652269094 -0.230186529656 -0.101541539237 -0.230234371529 -0.110608351528 -0.230282053326 -0.119677497547 -0.230329579231 -0.128748540587 -0.230206862782 -0.138070291722 -0.230095645653 -0.147380778756 -0.230166042246 -0.156432092014 -0.230236349911 -0.165487105809 -0.230306567083 -0.174545389225 -0.230150239999 -0.183783935068 -0.230005198313 -0.193008350415 -0.230097941071 -0.202042560598 -0.230190695811 -0.211081897015 -0.230283455294 -0.220125947072 -0.230093957864 -0.229262238546 -0.229915487123 -0.238381597951 -0.230030355863 -0.247397424641 -0.230145343804 -0.256419856395 -0.23026046152 -0.2654485128 -0.230038115602 -0.274465747101 -0.229826493489 -0.283463316686 -0.22996322397 -0.292459811701 -0.230100199264 -0.30146445936 -0.230237451662 -0.310476932009 -0.229982731598 -0.319360229871 -0.229738346453 -0.328221156938 -0.2298966246 -0.337197725325 -0.230055333409 -0.346184117298 -0.230214468241 -0.355179988105 -0.229927860609 -0.363916788693 -0.229651167689 -0.372628618266 -0.238882287023 --0.371822026727 -0.239132569721 --0.363121940147 -0.23939182484 --0.354396880892 -0.239248099843 --0.345422616533 -0.239104751569 --0.336457773771 -0.238961790726 --0.32750266724 -0.239182858065 --0.318655488508 -0.239413269513 --0.309785951408 -0.239289307422 --0.300794878531 -0.239165589885 --0.291811572629 -0.239042111586 --0.282836367078 -0.239233481465 --0.273854392205 -0.239434545483 --0.264852747826 -0.239330604819 --0.255845331518 -0.239226779567 --0.246844107646 -0.239123059229 --0.237849435776 -0.239284449974 --0.228747282459 -0.239455822079 --0.219628201687 -0.239372118069 --0.210605281392 -0.239288415559 --0.201587050865 -0.239204704207 --0.192573903105 -0.239335771486 --0.183368096643 -0.239477060543 --0.174148168886 -0.23941373178 --0.165110938684 -0.239350318113 --0.156076955185 -0.239286849167 --0.147046658371 -0.239387300514 --0.13775591985 -0.239498154068 --0.128453921435 -0.239455375927 --0.119403898574 -0.239412448761 --0.110355763173 -0.239369373251 --0.101309945732 -0.23943898742 --0.0919542342762 -0.239519163653 --0.0825902078698 -0.239497028518 --0.0735291935104 -0.239474696873 --0.0644687369172 -0.239452191847 --0.0554092970245 -0.239490851569 --0.0460096154687 -0.239540143606 --0.0366045886723 -0.239538712155 --0.0275345987278 -0.239537082624 --0.0184638753228 -0.239535266169 --0.009392883356 -0.239534308316 --2.16840434497e-19 -0.239535266169 -0.009392883356 -0.239537082624 -0.0184638753228 -0.239538712155 -0.0275345987278 -0.239540143606 -0.0366045886723 -0.239490851569 -0.0460096154687 -0.239452191847 -0.0554092970245 -0.239474696873 -0.0644687369172 -0.239497028518 -0.0735291935104 -0.239519163653 -0.0825902078698 -0.23943898742 -0.0919542342762 -0.239369373251 -0.101309945732 -0.239412448761 -0.110355763173 -0.239455375927 -0.119403898574 -0.239498154068 -0.128453921435 -0.239387300514 -0.13775591985 -0.239286849167 -0.147046658371 -0.239350318113 -0.156076955185 -0.23941373178 -0.165110938684 -0.239477060543 -0.174148168886 -0.239335771486 -0.183368096643 -0.239204704207 -0.192573903105 -0.239288415559 -0.201587050865 -0.239372118069 -0.210605281392 -0.239455822079 -0.219628201687 -0.239284449974 -0.228747282459 -0.239123059229 -0.237849435776 -0.239226779567 -0.246844107646 -0.239330604819 -0.255845331518 -0.239434545483 -0.264852747826 -0.239233481465 -0.273854392205 -0.239042111586 -0.282836367078 -0.239165589885 -0.291811572629 -0.239289307422 -0.300794878531 -0.239413269513 -0.309785951408 -0.239182858065 -0.318655488508 -0.238961790726 -0.32750266724 -0.239104751569 -0.336457773771 -0.239248099843 -0.345422616533 -0.23939182484 -0.354396880892 -0.239132569721 -0.363121940147 -0.238882287023 -0.371822026727 -0.247858830684 --0.372350682429 -0.248139748072 --0.36364105674 -0.248430763083 --0.354906400577 -0.248269207727 --0.345919098863 -0.248108077683 --0.336941221707 -0.247947377225 --0.327973061263 -0.248195494053 --0.319115453985 -0.248454115439 --0.310235439298 -0.248314778814 --0.30123120773 -0.248175705427 --0.292234737742 -0.248036906388 --0.283246360049 -0.248251707179 --0.274253144337 -0.248477387284 --0.26524021369 -0.248360551802 --0.256219532139 -0.24824383448 --0.247205014174 -0.248127241492 --0.238197039265 -0.248308409796 --0.229082930015 -0.248500769484 --0.21995184157 -0.248406648761 --0.210915533416 -0.248312530916 --0.201883909558 -0.248218405357 --0.192857355537 -0.248365559114 --0.183638953896 -0.248524193066 --0.174406395508 -0.248452968328 --0.16535568232 -0.248381632033 --0.156308202787 -0.248310225241 --0.147264398477 -0.248423066874 --0.137960555697 -0.248547572599 --0.128645426521 -0.248499390129 --0.119581829515 -0.248451058799 --0.110520106659 -0.248402562051 --0.101460702741 -0.248480838287 --0.092091500013 -0.248570959733 --0.0827139545225 -0.248545949998 --0.0736392980185 -0.248520733324 --0.0645651926218 -0.2484953156 --0.055492096413 -0.248538892737 --0.0460786675632 -0.248594401221 --0.03665987857 -0.248592631649 --0.0275761953393 -0.248590651279 --0.0184917720928 -0.248588437081 --0.0094070755878 -0.248587262899 -0 -0.248588437081 -0.0094070755878 -0.248590651279 -0.0184917720928 -0.248592631649 -0.0275761953393 -0.248594401221 -0.03665987857 -0.248538892737 -0.0460786675632 -0.2484953156 -0.055492096413 -0.248520733324 -0.0645651926218 -0.248545949998 -0.0736392980185 -0.248570959733 -0.0827139545225 -0.248480838287 -0.092091500013 -0.248402562051 -0.101460702741 -0.248451058799 -0.110520106659 -0.248499390129 -0.119581829515 -0.248547572599 -0.128645426521 -0.248423066874 -0.137960555697 -0.248310225241 -0.147264398477 -0.248381632033 -0.156308202787 -0.248452968328 -0.16535568232 -0.248524193066 -0.174406395508 -0.248365559114 -0.183638953896 -0.248218405357 -0.192857355537 -0.248312530916 -0.201883909558 -0.248406648761 -0.210915533416 -0.248500769484 -0.21995184157 -0.248308409796 -0.229082930015 -0.248127241492 -0.238197039265 -0.24824383448 -0.247205014174 -0.248360551802 -0.256219532139 -0.248477387284 -0.26524021369 -0.248251707179 -0.274253144337 -0.248036906388 -0.283246360049 -0.248175705427 -0.292234737742 -0.248314778814 -0.30123120773 -0.248454115439 -0.310235439298 -0.248195494053 -0.319115453985 -0.247947377225 -0.327973061263 -0.248108077683 -0.336941221707 -0.248269207727 -0.345919098863 -0.248430763083 -0.354906400577 -0.248139748072 -0.36364105674 -0.247858830684 -0.372350682429 -0.256843421781 --0.372880595957 -0.257155007289 --0.36416138265 -0.257477805431 --0.355417091688 -0.257298396159 --0.3464167442 -0.257119466541 --0.33742581245 -0.256941014122 --0.328444591038 -0.257216182568 --0.319576498446 -0.257503022997 --0.310685962434 -0.257348301974 --0.301668563295 -0.257193874445 --0.292658909373 -0.257039745308 --0.28365734543 -0.257277976479 --0.274652829833 -0.257528290573 --0.26562856627 -0.257398547393 --0.256594604071 -0.257268924679 --0.247566782164 -0.257139440741 --0.238545505432 -0.25734040131 --0.229419379175 -0.257553781186 --0.220276227174 -0.25744922762 --0.21122651492 -0.25734467829 --0.202181475109 -0.257240133263 --0.193141501148 -0.257403391127 --0.183910453894 -0.257579371662 --0.174665210721 -0.257500231225 --0.165600993337 -0.257420975799 --0.156540005282 -0.257341617204 --0.147482669911 -0.25746685232 --0.138165657456 -0.257605031929 --0.128837342054 -0.257551451243 --0.119760156431 -0.257497704831 --0.1106848343 -0.257443770025 --0.101611825279 -0.25753072048 --0.0922290734265 -0.2576308004 --0.0828379535489 -0.257602913149 --0.0737496354662 -0.257574802903 --0.0646618612348 -0.257546463706 --0.0555750888329 -0.257594968005 --0.0461478534607 -0.257656703538 --0.0367152422213 -0.257654595294 --0.0276178472825 -0.257652246569 --0.0185197058216 -0.257649639957 --0.00942128641518 -0.257648272323 -0 -0.257649639957 -0.00942128641518 -0.257652246569 -0.0185197058216 -0.257654595294 -0.0276178472825 -0.257656703538 -0.0367152422213 -0.257594968005 -0.0461478534607 -0.257546463706 -0.0555750888329 -0.257574802903 -0.0646618612348 -0.257602913149 -0.0737496354662 -0.2576308004 -0.0828379535489 -0.25753072048 -0.0922290734265 -0.257443770025 -0.101611825279 -0.257497704831 -0.1106848343 -0.257551451243 -0.119760156431 -0.257605031929 -0.128837342054 -0.25746685232 -0.138165657456 -0.257341617204 -0.147482669911 -0.257420975799 -0.156540005282 -0.257500231225 -0.165600993337 -0.257579371662 -0.174665210721 -0.257403391127 -0.183910453894 -0.257240133263 -0.193141501148 -0.25734467829 -0.202181475109 -0.25744922762 -0.21122651492 -0.257553781186 -0.220276227174 -0.25734040131 -0.229419379175 -0.257139440741 -0.238545505432 -0.257268924679 -0.247566782164 -0.257398547393 -0.256594604071 -0.257528290573 -0.26562856627 -0.257277976479 -0.274652829833 -0.257039745308 -0.28365734543 -0.257193874445 -0.292658909373 -0.257348301974 -0.301668563295 -0.257503022997 -0.310685962434 -0.257216182568 -0.319576498446 -0.256941014122 -0.328444591038 -0.257119466541 -0.33742581245 -0.257298396159 -0.3464167442 -0.257477805431 -0.355417091688 -0.257155007289 -0.36416138265 -0.256843421781 -0.372880595957 -0.265835698426 --0.373411774802 -0.266177956481 --0.364682933089 -0.26653254893 --0.355928961386 -0.266335276732 --0.346915553692 -0.266138532803 --0.337911547528 -0.265942307909 --0.328917250362 -0.266244553571 --0.320038643355 -0.266559633489 --0.311137530782 -0.266389510055 --0.302106948793 -0.26621972196 --0.293084102499 -0.26605025587 --0.284069337336 -0.266311930036 --0.275053487281 -0.266586890731 --0.266017831502 -0.266444217657 --0.256970560325 -0.266301685546 --0.247929429822 -0.266159305883 --0.238894834789 -0.266380051245 --0.229756630092 -0.266614456726 --0.22060136464 -0.266499479508 --0.211538241337 -0.266384501534 --0.202479767561 -0.266269522967 --0.19342635438 -0.266448887389 --0.184182603364 -0.26664222367 --0.174924621342 -0.266555149775 --0.165846884457 -0.266467968736 --0.156772363419 -0.266380669848 --0.147701492821 -0.266518299074 --0.138371257307 -0.266670159756 --0.129029686623 -0.266611182675 --0.119938897097 -0.266552005148 --0.110849957544 -0.266492621864 --0.101763320972 -0.266588251646 --0.0923669585861 -0.266698301529 --0.0829622057646 -0.266667540043 --0.0738602090719 -0.266636528383 --0.0647587474214 -0.266605265536 --0.0556582813833 -0.266658699579 --0.0462171781477 -0.266726671979 --0.0367706828153 -0.266724225018 --0.0276595573363 -0.266721501469 --0.0185476783533 -0.266718507691 --0.00943551714935 -0.266716946307 -2.16840434497e-19 -0.266718507691 -0.00943551714935 -0.266721501469 -0.0185476783533 -0.266724225018 -0.0276595573363 -0.266726671979 -0.0367706828153 -0.266658699579 -0.0462171781477 -0.266605265536 -0.0556582813833 -0.266636528383 -0.0647587474214 -0.266667540043 -0.0738602090719 -0.266698301529 -0.0829622057646 -0.266588251646 -0.0923669585861 -0.266492621864 -0.101763320972 -0.266552005148 -0.110849957544 -0.266611182675 -0.119938897097 -0.266670159756 -0.129029686623 -0.266518299074 -0.138371257307 -0.266380669848 -0.147701492821 -0.266467968736 -0.156772363419 -0.266555149775 -0.165846884457 -0.26664222367 -0.174924621342 -0.266448887389 -0.184182603364 -0.266269522967 -0.19342635438 -0.266384501534 -0.202479767561 -0.266499479508 -0.211538241337 -0.266614456726 -0.22060136464 -0.266380051245 -0.229756630092 -0.266159305883 -0.238894834789 -0.266301685546 -0.247929429822 -0.266444217657 -0.256970560325 -0.266586890731 -0.266017831502 -0.266311930036 -0.275053487281 -0.26605025587 -0.284069337336 -0.26621972196 -0.293084102499 -0.266389510055 -0.302106948793 -0.266559633489 -0.311137530782 -0.266244553571 -0.320038643355 -0.265942307909 -0.328917250362 -0.266138532803 -0.337911547528 -0.266335276732 -0.346915553692 -0.26653254893 -0.355928961386 -0.266177956481 -0.364682933089 -0.265835698426 -0.373411774802 -0.275069696207 --0.32802076568 -0.275347961655 --0.319159413297 -0.27563805029 --0.310275554138 -0.275481596181 --0.301271611763 -0.27532544883 --0.292275331642 -0.275169582419 --0.283287047536 -0.275410476556 --0.27429072797 -0.275663610449 --0.265274603837 -0.275532422884 --0.256253778465 -0.27540136729 --0.24723904213 -0.275270436511 --0.238230778675 -0.275473603745 --0.229114122226 -0.275689364234 --0.219980426346 -0.275583680425 --0.210943619606 -0.275477992612 --0.201911421839 -0.275372300884 --0.192884249624 -0.275537310898 --0.183663770114 -0.27571520061 --0.174429080312 -0.275635211471 --0.165377578693 -0.275555126561 --0.156329268619 -0.275474929424 --0.147284586451 -0.2756014848 --0.1379790344 -0.275741156471 --0.1286621608 -0.275687035827 --0.119597566138 -0.275632733326 --0.110534813151 -0.275578248208 --0.101474346538 -0.275666089959 --0.0921037267273 -0.275767223797 --0.0827247425563 -0.275739104616 --0.0736489508499 -0.275710744018 --0.064573688736 -0.275682160731 --0.0554994190123 -0.275731100507 --0.0460847562483 -0.275793436609 --0.0366647230362 -0.275791397737 --0.0275798412575 -0.275789106002 --0.0184942186436 -0.275786566269 --0.00940832041669 -0.27578523136 -0 -0.275786566269 -0.00940832041669 -0.275789106002 -0.0184942186436 -0.275791397737 -0.0275798412575 -0.275793436609 -0.0366647230362 -0.275731100507 -0.0460847562483 -0.275682160731 -0.0554994190123 -0.275710744018 -0.064573688736 -0.275739104616 -0.0736489508499 -0.275767223797 -0.0827247425563 -0.275666089959 -0.0921037267273 -0.275578248208 -0.101474346538 -0.275632733326 -0.110534813151 -0.275687035827 -0.119597566138 -0.275741156471 -0.1286621608 -0.2756014848 -0.1379790344 -0.275474929424 -0.147284586451 -0.275555126561 -0.156329268619 -0.275635211471 -0.165377578693 -0.27571520061 -0.174429080312 -0.275537310898 -0.183663770114 -0.275372300884 -0.192884249624 -0.275477992612 -0.201911421839 -0.275583680425 -0.210943619606 -0.275689364234 -0.219980426346 -0.275473603745 -0.229114122226 -0.275270436511 -0.238230778675 -0.27540136729 -0.24723904213 -0.275532422884 -0.256253778465 -0.275663610449 -0.265274603837 -0.275410476556 -0.27429072797 -0.275169582419 -0.283287047536 -0.27532544883 -0.292275331642 -0.275481596181 -0.301271611763 -0.27563805029 -0.310275554138 -0.275347961655 -0.319159413297 -0.275069696207 -0.32802076568 -0.284176859091 --0.327167778104 -0.28443097868 --0.318322716535 -0.284695904457 --0.309455167689 -0.284553221241 --0.300476629955 -0.284410797702 --0.29150568456 -0.28426862633 --0.282542669054 -0.284488611393 --0.273564850113 -0.284719764582 --0.264567223434 -0.28460013555 --0.25557159808 -0.284480635905 --0.246582025975 -0.284361246234 --0.237598874944 -0.284546729397 --0.228502671046 -0.284743712645 --0.219389428457 -0.284647379993 --0.210377692649 -0.284551051944 --0.201370535053 -0.284454715117 --0.192368351861 -0.284605283363 --0.18316999699 -0.284767618683 --0.173957439498 -0.284694761086 --0.164930917307 -0.284621819624 --0.155907562849 -0.284548769609 --0.146887801775 -0.284664176057 --0.137605736971 -0.284791570058 --0.128312364824 -0.284742341517 --0.119272701278 -0.284692961016 --0.110234870222 -0.284643409613 --0.101199308241 -0.284723413626 --0.0918532043858 -0.284815572242 --0.0824987536413 -0.284790101687 --0.0734478900564 -0.284764410932 --0.0643975562849 -0.284738525489 --0.0553482114243 -0.28478293923 --0.0459587369183 -0.284839594095 --0.0365639119206 -0.284837971153 --0.0275039987135 -0.284836118021 --0.0184433563703 -0.284834022761 --0.00938244496082 -0.284832910131 -2.16840434497e-19 -0.284834022761 -0.00938244496082 -0.284836118021 -0.0184433563703 -0.284837971153 -0.0275039987135 -0.284839594095 -0.0365639119206 -0.28478293923 -0.0459587369183 -0.284738525489 -0.0553482114243 -0.284764410932 -0.0643975562849 -0.284790101687 -0.0734478900564 -0.284815572242 -0.0824987536413 -0.284723413626 -0.0918532043858 -0.284643409613 -0.101199308241 -0.284692961016 -0.110234870222 -0.284742341517 -0.119272701278 -0.284791570058 -0.128312364824 -0.284664176057 -0.137605736971 -0.284548769609 -0.146887801775 -0.284621819624 -0.155907562849 -0.284694761086 -0.164930917307 -0.284767618683 -0.173957439498 -0.284605283363 -0.18316999699 -0.284454715117 -0.192368351861 -0.284551051944 -0.201370535053 -0.284647379993 -0.210377692649 -0.284743712645 -0.219389428457 -0.284546729397 -0.228502671046 -0.284361246234 -0.237598874944 -0.284480635905 -0.246582025975 -0.28460013555 -0.25557159808 -0.284719764582 -0.264567223434 -0.284488611393 -0.273564850113 -0.28426862633 -0.282542669054 -0.284410797702 -0.29150568456 -0.284553221241 -0.300476629955 -0.284695904457 -0.309455167689 -0.28443097868 -0.318322716535 -0.284176859091 -0.327167778104 -0.29314643865 --0.327728855145 -0.293427325558 --0.318871312022 -0.293720169091 --0.309991229175 -0.293562264739 --0.300997033758 -0.293404642568 --0.292010411142 -0.293247313591 --0.283031715637 -0.293490483838 --0.274040456003 -0.293746000929 --0.265029333695 -0.293613598777 --0.256017906715 -0.293481340678 --0.247012524896 -0.293349211326 --0.238013547422 -0.293554259896 --0.228903017001 -0.293772017929 --0.219775404749 -0.293665376869 --0.210747742834 -0.293558740235 --0.201724640336 -0.293452095477 --0.192706489384 -0.293618591561 --0.183493068299 -0.293798088144 --0.17426540047 -0.293717404946 --0.165222823118 -0.293636628613 --0.156183402794 -0.293555727237 --0.14714755589 -0.2936833818 --0.137849811617 -0.29382429695 --0.128540731022 -0.293769736876 --0.119484906426 -0.29371499581 --0.110430896087 -0.293660067826 --0.10137914843 -0.293748646038 --0.0920169045105 -0.293850646981 --0.0826462825828 -0.293822336078 --0.0735791704675 -0.293793790503 --0.0645125811023 -0.293765009486 --0.0554469706399 -0.293814287108 --0.0460410494009 -0.293877098597 --0.0366297619252 -0.293875140272 --0.0275535403926 -0.293872927117 --0.018476580657 -0.293870448761 --0.00939934751652 -0.293869139014 -2.16840434497e-19 -0.293870448761 -0.00939934751652 -0.293872927117 -0.018476580657 -0.293875140272 -0.0275535403926 -0.293877098597 -0.0366297619252 -0.293814287108 -0.0460410494009 -0.293765009486 -0.0554469706399 -0.293793790503 -0.0645125811023 -0.293822336078 -0.0735791704675 -0.293850646981 -0.0826462825828 -0.293748646038 -0.0920169045105 -0.293660067826 -0.10137914843 -0.29371499581 -0.110430896087 -0.293769736876 -0.119484906426 -0.29382429695 -0.128540731022 -0.2936833818 -0.137849811617 -0.293555727237 -0.14714755589 -0.293636628613 -0.156183402794 -0.293717404946 -0.165222823118 -0.293798088144 -0.17426540047 -0.293618591561 -0.183493068299 -0.293452095477 -0.192706489384 -0.293558740235 -0.201724640336 -0.293665376869 -0.210747742834 -0.293772017929 -0.219775404749 -0.293554259896 -0.228903017001 -0.293349211326 -0.238013547422 -0.293481340678 -0.247012524896 -0.293613598777 -0.256017906715 -0.293746000929 -0.265029333695 -0.293490483838 -0.274040456003 -0.293247313591 -0.283031715637 -0.293404642568 -0.292010411142 -0.293562264739 -0.300997033758 -0.293720169091 -0.309991229175 -0.293427325558 -0.318871312022 -0.29314643865 -0.327728855145 -0.302125836538 --0.328291634425 -0.302433525987 --0.319421559786 -0.302754310621 --0.310528889449 -0.302581158781 --0.301519011118 -0.302408323783 --0.292516681467 -0.302235817967 --0.283522281028 -0.302502184569 --0.274517504472 -0.30278208936 --0.265492815763 -0.30263691053 --0.256465573218 -0.302491882951 --0.247444343963 -0.302346996219 --0.238429501994 -0.302571624784 --0.229304587546 -0.302810180541 --0.220162547137 -0.302693216298 --0.21111891548 -0.302576257459 --0.202079828633 -0.302459292134 --0.193045684199 -0.302641726059 --0.183817124118 -0.302838409123 --0.174574281554 -0.302749888846 --0.165515614066 -0.302661260454 --0.156460089553 -0.302572498385 --0.147408126096 -0.302712419601 --0.138094624245 -0.302866863534 --0.128769753946 -0.30280695806 --0.119697730505 -0.302746850428 --0.110627514483 -0.302686545731 --0.101559554414 -0.302783699683 --0.0921810880424 -0.302895547776 --0.0827942164954 -0.302864399137 --0.0737108225267 -0.302832994055 --0.0646279402388 -0.302801320423 --0.0555460313023 -0.302855480935 --0.0461235884241 -0.302924455399 --0.036695758815 -0.302922148736 --0.0276031916988 -0.30291957004 --0.0185098789931 -0.302916707961 --0.00941628774828 -0.302915206788 -0 -0.302916707961 -0.00941628774828 -0.30291957004 -0.0185098789931 -0.302922148736 -0.0276031916988 -0.302924455399 -0.036695758815 -0.302855480935 -0.0461235884241 -0.302801320423 -0.0555460313023 -0.302832994055 -0.0646279402388 -0.302864399137 -0.0737108225267 -0.302895547776 -0.0827942164954 -0.302783699683 -0.0921810880424 -0.302686545731 -0.101559554414 -0.302746850428 -0.110627514483 -0.30280695806 -0.119697730505 -0.302866863534 -0.128769753946 -0.302712419601 -0.138094624245 -0.302572498385 -0.147408126096 -0.302661260454 -0.156460089553 -0.302749888846 -0.165515614066 -0.302838409123 -0.174574281554 -0.302641726059 -0.183817124118 -0.302459292134 -0.193045684199 -0.302576257459 -0.202079828633 -0.302693216298 -0.21111891548 -0.302810180541 -0.220162547137 -0.302571624784 -0.229304587546 -0.302346996219 -0.238429501994 -0.302491882951 -0.247444343963 -0.30263691053 -0.256465573218 -0.30278208936 -0.265492815763 -0.302502184569 -0.274517504472 -0.302235817967 -0.283522281028 -0.302408323783 -0.292516681467 -0.302581158781 -0.301519011118 -0.302754310621 -0.310528889449 -0.302433525987 -0.319421559786 -0.302125836538 -0.328291634425 -0.311114723926 --0.328856158238 -0.311449232147 --0.319973503456 -0.311797981005 --0.31106817986 -0.311609576738 --0.30204258283 -0.311421518281 --0.293024526883 -0.311233804985 --0.284014382781 -0.311523386256 --0.274996024057 -0.311827700487 --0.26595770441 -0.31166971783 --0.256914602091 -0.311511898693 --0.247877492559 -0.311354240764 --0.238846764529 -0.31159846641 --0.229707402238 -0.311857843131 --0.220550864197 -0.311730550875 --0.211491228355 -0.311603258882 --0.202436122224 -0.31147596671 --0.193385958687 -0.311674345544 --0.184142189101 -0.311888223853 --0.174884095487 -0.311791851552 --0.165809300296 -0.311695354516 --0.156737627306 -0.311598735632 --0.147669521559 -0.311750947083 --0.138340195759 -0.311918924971 --0.128999456353 -0.311853663607 --0.119911201227 -0.311788188873 --0.110824740835 -0.311722492926 --0.101740524498 -0.311828242874 --0.0923457631941 -0.31194996713 --0.0829425714879 -0.311915959117 --0.0738428572914 -0.31188167856 --0.064743643803 -0.311847114613 --0.0556453983994 -0.311906162326 --0.0462063543326 -0.311981312639 --0.036761905193 -0.311978656937 --0.0276529557015 -0.311975712602 --0.0185432527489 -0.311972466663 --0.0094332665196 -0.311970766771 -0 -0.311972466663 -0.0094332665196 -0.311975712602 -0.0185432527489 -0.311978656937 -0.0276529557015 -0.311981312639 -0.036761905193 -0.311906162326 -0.0462063543326 -0.311847114613 -0.0556453983994 -0.31188167856 -0.064743643803 -0.311915959117 -0.0738428572914 -0.31194996713 -0.0829425714879 -0.311828242874 -0.0923457631941 -0.311722492926 -0.101740524498 -0.311788188873 -0.110824740835 -0.311853663607 -0.119911201227 -0.311918924971 -0.128999456353 -0.311750947083 -0.138340195759 -0.311598735632 -0.147669521559 -0.311695354516 -0.156737627306 -0.311791851552 -0.165809300296 -0.311888223853 -0.174884095487 -0.311674345544 -0.184142189101 -0.31147596671 -0.193385958687 -0.311603258882 -0.202436122224 -0.311730550875 -0.211491228355 -0.311857843131 -0.220550864197 -0.31159846641 -0.229707402238 -0.311354240764 -0.238846764529 -0.311511898693 -0.247877492559 -0.31166971783 -0.256914602091 -0.311827700487 -0.26595770441 -0.311523386256 -0.274996024057 -0.311233804985 -0.284014382781 -0.311421518281 -0.293024526883 -0.311609576738 -0.30204258283 -0.311797981005 -0.31106817986 -0.311449232147 -0.319973503456 -0.311114723926 -0.328856158238 -0.320744955908 --0.310080821199 -0.320570485259 --0.301085709411 -0.320396332273 --0.292098067262 -0.320222487522 --0.283118241017 -0.320490865517 --0.274122269059 -0.320772909737 --0.2651063449 -0.320626629035 --0.256093511333 -0.320480492706 --0.247086616645 -0.320334508839 --0.238086049007 -0.32056082163 --0.228971393051 -0.3208011786 --0.219839568269 -0.320683364054 --0.210810061716 -0.320565546099 --0.201785038709 -0.320447710867 --0.192764909758 -0.320631492654 --0.183547841764 -0.320829647041 --0.174316461301 -0.320740481599 --0.165271688566 -0.320651204451 --0.156230017577 -0.320561825459 --0.147191889691 -0.320702765438 --0.137890886196 -0.32085832212 --0.128578484254 -0.320798018684 --0.119520217596 -0.320737505199 --0.110463727342 -0.32067678822 --0.101409461806 -0.320774623818 --0.0920442467726 -0.320887269369 --0.082670622224 -0.320855943618 --0.0736008989086 -0.320824374503 --0.0645316776622 -0.320792536323 --0.0554634155629 -0.320846982601 --0.046054709568 -0.320916368318 --0.0366406242064 -0.320914123314 --0.0275617125442 -0.320911616353 --0.0184820628573 -0.320908825258 --0.00940213754122 -0.320907354095 -2.16840434497e-19 -0.320908825258 -0.00940213754122 -0.320911616353 -0.0184820628573 -0.320914123314 -0.0275617125442 -0.320916368318 -0.0366406242064 -0.320846982601 -0.046054709568 -0.320792536323 -0.0554634155629 -0.320824374503 -0.0645316776622 -0.320855943618 -0.0736008989086 -0.320887269369 -0.082670622224 -0.320774623818 -0.0920442467726 -0.32067678822 -0.101409461806 -0.320737505199 -0.110463727342 -0.320798018684 -0.119520217596 -0.32085832212 -0.128578484254 -0.320702765438 -0.137890886196 -0.320561825459 -0.147191889691 -0.320651204451 -0.156230017577 -0.320740481599 -0.165271688566 -0.320829647041 -0.174316461301 -0.320631492654 -0.183547841764 -0.320447710867 -0.192764909758 -0.320565546099 -0.201785038709 -0.320683364054 -0.210810061716 -0.3208011786 -0.219839568269 -0.32056082163 -0.228971393051 -0.320334508839 -0.238086049007 -0.320480492706 -0.247086616645 -0.320626629035 -0.256093511333 -0.320772909737 -0.2651063449 -0.320490865517 -0.274122269059 -0.320222487522 -0.283118241017 -0.320396332273 -0.292098067262 -0.320570485259 -0.301085709411 -0.320744955908 -0.310080821199 -0.329668467414 --0.309133374479 -0.329508027268 --0.300167561665 -0.329347889606 --0.291209159149 -0.329188037071 --0.282258495016 -0.329435055643 --0.273283920838 -0.329694652245 --0.26428938609 -0.329560171692 --0.255305631414 -0.329425827107 --0.246327772219 -0.329291615245 --0.237356178995 -0.329499866398 --0.228265173503 -0.329721050949 --0.219156996323 -0.329612780628 --0.210156419488 -0.329504510411 --0.201160289646 -0.329396216656 --0.192168993279 -0.32956529162 --0.1829775173 -0.329747604651 --0.173771741456 -0.329665713586 --0.164755793686 -0.329583725599 --0.155742926683 -0.329501631894 --0.146733560644 -0.329631200074 --0.137459727479 -0.329774234646 --0.128174515674 -0.3297189285 --0.119145022145 -0.329663424504 --0.110117291454 -0.329607736431 --0.101091767582 -0.329697577919 --0.0917549152772 -0.329801055354 --0.0824096693039 -0.329772452306 --0.0733687174489 -0.32974360883 --0.0643282677537 -0.32971452015 --0.0552887718434 -0.329764341224 --0.045909206179 -0.32982791569 --0.0365242821668 -0.329826091023 --0.02747418586 -0.32982401459 --0.0184233647268 -0.329821673566 --0.00937227570326 -0.329820434085 -0 -0.329821673566 -0.00937227570326 -0.32982401459 -0.0184233647268 -0.329826091023 -0.02747418586 -0.32982791569 -0.0365242821668 -0.329764341224 -0.045909206179 -0.32971452015 -0.0552887718434 -0.32974360883 -0.0643282677537 -0.329772452306 -0.0733687174489 -0.329801055354 -0.0824096693039 -0.329697577919 -0.0917549152772 -0.329607736431 -0.101091767582 -0.329663424504 -0.110117291454 -0.3297189285 -0.119145022145 -0.329774234646 -0.128174515674 -0.329631200074 -0.137459727479 -0.329501631894 -0.146733560644 -0.329583725599 -0.155742926683 -0.329665713586 -0.164755793686 -0.329747604651 -0.173771741456 -0.32956529162 -0.1829775173 -0.329396216656 -0.192168993279 -0.329504510411 -0.201160289646 -0.329612780628 -0.210156419488 -0.329721050949 -0.219156996323 -0.329499866398 -0.228265173503 -0.329291615245 -0.237356178995 -0.329425827107 -0.246327772219 -0.329560171692 -0.255305631414 -0.329694652245 -0.26428938609 -0.329435055643 -0.273283920838 -0.329188037071 -0.282258495016 -0.329347889606 -0.291209159149 -0.329508027268 -0.300167561665 -0.329668467414 -0.309133374479 -0.338703945726 --0.264824761986 -0.338556832642 --0.255822731636 -0.338409872532 --0.246826574177 -0.338263060245 --0.237836669818 -0.338490645655 --0.228729026973 -0.338732371129 --0.219604160402 -0.338613901838 --0.210585148594 -0.338495435498 --0.201570571817 -0.338376958897 --0.19256080853 -0.338561772823 --0.183351828441 -0.338761052942 --0.174128505518 -0.338671434022 --0.165093982099 -0.338581693448 --0.156062521305 -0.338491830368 --0.14703454261 -0.338633511217 --0.137742504225 -0.338789904079 --0.128439048974 -0.338729322595 --0.119390853644 -0.338668539411 --0.110344406028 -0.338607534028 --0.101300149366 -0.338705832705 --0.0919445511326 -0.33881904894 --0.0825805322156 -0.338787642224 --0.07352077647 -0.338755962601 --0.0644615102707 -0.338724017988 --0.0554031914221 -0.338778656972 --0.046004532305 -0.338848321817 --0.0366004946955 -0.338846159198 --0.0275315237623 -0.338843717411 --0.0184618172168 -0.338840995161 --0.00939183773559 -0.338839561169 -2.16840434497e-19 -0.338840995161 -0.00939183773559 -0.338843717411 -0.0184618172168 -0.338846159198 -0.0275315237623 -0.338848321817 -0.0366004946955 -0.338778656972 -0.046004532305 -0.338724017988 -0.0554031914221 -0.338755962601 -0.0644615102707 -0.338787642224 -0.07352077647 -0.33881904894 -0.0825805322156 -0.338705832705 -0.0919445511326 -0.338607534028 -0.101300149366 -0.338668539411 -0.110344406028 -0.338729322595 -0.119390853644 -0.338789904079 -0.128439048974 -0.338633511217 -0.137742504225 -0.338491830368 -0.14703454261 -0.338581693448 -0.156062521305 -0.338671434022 -0.165093982099 -0.338761052942 -0.174128505518 -0.338561772823 -0.183351828441 -0.338376958897 -0.19256080853 -0.338495435498 -0.201570571817 -0.338613901838 -0.210585148594 -0.338732371129 -0.219604160402 -0.338490645655 -0.228729026973 -0.338263060245 -0.237836669818 -0.338409872532 -0.246826574177 -0.338556832642 -0.255822731636 -0.338703945726 -0.264824761986 -0.347724920797 --0.265362069175 -0.347565159292 --0.256341718324 -0.347405566427 --0.247327223388 -0.347246145816 --0.238318962132 -0.347493098433 --0.229194608313 -0.347755388682 --0.220052972594 -0.34762670284 --0.211015467292 -0.347498020556 --0.201982380141 -0.347369351937 --0.192954103975 -0.347569923768 --0.183727541225 -0.347786179708 --0.174486579335 -0.347688810028 --0.165433421408 -0.347591304042 --0.156383309829 -0.34749367377 --0.14733666834 -0.347647489938 --0.138026327653 -0.347817266305 --0.128704531188 -0.347751392539 --0.119637576193 -0.347685300148 --0.110572356777 -0.347618968734 --0.101509318134 -0.347725757499 --0.092134880176 -0.347848732234 --0.0827519901685 -0.347814492404 --0.0736733723203 -0.347779973698 --0.0645952351695 -0.347745171925 --0.0555180372583 -0.347804630133 --0.0461001865651 -0.347880394608 --0.036676936049 -0.347877899475 --0.0275890336959 -0.347875101387 --0.0185003855727 -0.34787199702 --0.0094114587918 -0.347870366031 --2.16840434497e-19 -0.34787199702 -0.0094114587918 -0.347875101387 -0.0185003855727 -0.347877899475 -0.0275890336959 -0.347880394608 -0.036676936049 -0.347804630133 -0.0461001865651 -0.347745171925 -0.0555180372583 -0.347779973698 -0.0645952351695 -0.347814492404 -0.0736733723203 -0.347848732234 -0.0827519901685 -0.347725757499 -0.092134880176 -0.347618968734 -0.101509318134 -0.347685300148 -0.110572356777 -0.347751392539 -0.119637576193 -0.347817266305 -0.128704531188 -0.347647489938 -0.138026327653 -0.34749367377 -0.14733666834 -0.347591304042 -0.156383309829 -0.347688810028 -0.165433421408 -0.347786179708 -0.174486579335 -0.347569923768 -0.183727541225 -0.347369351937 -0.192954103975 -0.347498020556 -0.201982380141 -0.34762670284 -0.211015467292 -0.347755388682 -0.220052972594 -0.347493098433 -0.229194608313 -0.347246145816 -0.238318962132 -0.347405566427 -0.247327223388 -0.347565159292 -0.256341718324 -0.347724920797 -0.265362069175 -0.356757272612 --0.265901351667 -0.356584843314 --0.256862623039 -0.356412612381 --0.247829744844 -0.356240558698 --0.238803080246 -0.356506902586 --0.229661935363 -0.356789789123 --0.220503450041 -0.356650878702 --0.211447396948 -0.356511964604 --0.202395739977 -0.356373072656 --0.193348896545 -0.35658942496 --0.184104660017 -0.356822691648 --0.174845970541 -0.356717548508 --0.165774126621 -0.356612272987 --0.15670530976 -0.356506869373 --0.147639950532 -0.356672822428 --0.138311214439 -0.356855993565 --0.128970984432 -0.356784817075 --0.119885210856 -0.356713407676 --0.110801160721 -0.356641758066 --0.101719285577 -0.356757053482 --0.0923259130888 -0.356889777888 --0.082924052366 -0.356852708126 --0.0738265172616 -0.356815343795 --0.064729450801 -0.356777682982 --0.055633316069 -0.35684198265 --0.0461961756694 -0.356923852338 --0.0367536113825 -0.356921015885 --0.0276467191689 -0.35691785532 --0.018539071498 -0.356914370689 --0.00943113994673 -0.35691254249 -0 -0.356914370689 -0.00943113994673 -0.35691785532 -0.018539071498 -0.356921015885 -0.0276467191689 -0.356923852338 -0.0367536113825 -0.35684198265 -0.0461961756694 -0.356777682982 -0.055633316069 -0.356815343795 -0.064729450801 -0.356852708126 -0.0738265172616 -0.356889777888 -0.082924052366 -0.356757053482 -0.0923259130888 -0.356641758066 -0.101719285577 -0.356713407676 -0.110801160721 -0.356784817075 -0.119885210856 -0.356855993565 -0.128970984432 -0.356672822428 -0.138311214439 -0.356506869373 -0.147639950532 -0.356612272987 -0.15670530976 -0.356717548508 -0.165774126621 -0.356822691648 -0.174845970541 -0.35658942496 -0.184104660017 -0.356373072656 -0.193348896545 -0.356511964604 -0.202395739977 -0.356650878702 -0.211447396948 -0.356789789123 -0.220503450041 -0.356506902586 -0.229661935363 -0.356240558698 -0.238803080246 -0.356412612381 -0.247829744844 -0.356584843314 -0.256862623039 -0.356757272612 -0.265901351667 -0.365558020549 --0.264943758707 -0.365397583892 --0.255939063157 -0.36523732978 --0.246940150083 -0.365077222806 --0.237947376881 -0.365325227778 --0.228834052091 -0.36558865133 --0.219703411783 -0.365459442912 --0.210681225743 -0.365330226782 --0.201663384125 -0.36520101215 --0.192650299689 -0.365402401283 --0.183436129649 -0.365619562785 --0.174207529989 -0.365521816454 --0.165169444582 -0.365423935166 --0.156134350958 -0.365325939383 --0.147102683202 -0.36548034851 --0.137805844793 -0.365650791603 --0.128497527761 -0.365584685136 --0.119445459288 -0.365518366329 --0.110395102485 -0.36545183331 --0.101346897892 -0.365558986982 --0.0919867945877 -0.365682367799 --0.082618230146 -0.365648055553 --0.0735544083387 -0.365613468096 --0.0644910541512 -0.365578594795 --0.0554286234186 -0.365638219399 --0.0460256520825 -0.365714208647 --0.0366172837493 -0.365711782521 --0.0275441556661 -0.365709058302 --0.018470290165 -0.365706027653 --0.0093961491204 -0.365704432274 --2.16840434497e-19 -0.365706027653 -0.0093961491204 -0.365709058302 -0.018470290165 -0.365711782521 -0.0275441556661 -0.365714208647 -0.0366172837493 -0.365638219399 -0.0460256520825 -0.365578594795 -0.0554286234186 -0.365613468096 -0.0644910541512 -0.365648055553 -0.0735544083387 -0.365682367799 -0.082618230146 -0.365558986982 -0.0919867945877 -0.36545183331 -0.101346897892 -0.365518366329 -0.110395102485 -0.365584685136 -0.119445459288 -0.365650791603 -0.128497527761 -0.36548034851 -0.137805844793 -0.365325939383 -0.147102683202 -0.365423935166 -0.156134350958 -0.365521816454 -0.165169444582 -0.365619562785 -0.174207529989 -0.365402401283 -0.183436129649 -0.36520101215 -0.192650299689 -0.365330226782 -0.201663384125 -0.365459442912 -0.210681225743 -0.36558865133 -0.219703411783 -0.365325227778 -0.228834052091 -0.365077222806 -0.237947376881 -0.36523732978 -0.246940150083 -0.365397583892 -0.255939063157 -0.365558020549 -0.264943758707 -0.374332491483 --0.264019018376 -0.374184158405 --0.255047225491 -0.374035977857 --0.24608114617 -0.373887933071 --0.237121126334 -0.374117425826 --0.228034613887 -0.374361208534 --0.218930795129 -0.374241797176 --0.209941335889 -0.374122359763 --0.200956169136 -0.374002919455 --0.191975700187 -0.374189228512 --0.182790547081 -0.37439014371 --0.173590971459 -0.374299859429 --0.16458549304 -0.374209439952 --0.155582971909 -0.374118911154 --0.146583840399 -0.374261676892 --0.137317799952 -0.374419289896 --0.128040293551 -0.374358299386 --0.119020772734 -0.374297109072 --0.110002950991 -0.374235725275 --0.100987260166 -0.374334658445 --0.0916592998842 -0.374448639351 --0.0823229048267 -0.374417114723 --0.0732916314001 -0.374385308886 --0.0642608234907 -0.374353239451 --0.055230933862 -0.374408147872 --0.0458609887878 -0.374478212158 --0.0364856706291 -0.374476212559 --0.0274451395804 -0.374473935986 --0.0184038883802 -0.374471362461 --0.00936236887826 -0.374470001464 -0 -0.374471362461 -0.00936236887826 -0.374473935986 -0.0184038883802 -0.374476212559 -0.0274451395804 -0.374478212158 -0.0364856706291 -0.374408147872 -0.0458609887878 -0.374353239451 -0.055230933862 -0.374385308886 -0.0642608234907 -0.374417114723 -0.0732916314001 -0.374448639351 -0.0823229048267 -0.374334658445 -0.0916592998842 -0.374235725275 -0.100987260166 -0.374297109072 -0.110002950991 -0.374358299386 -0.119020772734 -0.374419289896 -0.128040293551 -0.374261676892 -0.137317799952 -0.374118911154 -0.146583840399 -0.374209439952 -0.155582971909 -0.374299859429 -0.16458549304 -0.37439014371 -0.173590971459 -0.374189228512 -0.182790547081 -0.374002919455 -0.191975700187 -0.374122359763 -0.200956169136 -0.374241797176 -0.209941335889 -0.374361208534 -0.218930795129 -0.374117425826 -0.228034613887 -0.373887933071 -0.237121126334 -0.374035977857 -0.24608114617 -0.374184158405 -0.255047225491 -0.374332491483 -0.264019018376 -0.383355461543 --0.219438023249 -0.38322598326 --0.210427672928 -0.383096493354 --0.201421605927 -0.382966998103 --0.192420217166 -0.383168841328 --0.183215170602 -0.383386507335 --0.173995643974 -0.383288582201 --0.164969108557 -0.383190506714 --0.155945517498 -0.383092307232 --0.146925298748 -0.383247037372 --0.137638564792 -0.383417844867 --0.128340320544 -0.383351636319 --0.11929960232 -0.383285225747 --0.110260565943 -0.383218585458 --0.101223648672 -0.383325880794 --0.0918743940199 -0.38344949406 --0.0825166692656 -0.383415194709 --0.0734640849346 -0.383380581515 --0.0644119505479 -0.383345688702 --0.0553607250209 -0.383405351719 --0.0459690863836 -0.383481428044 --0.0365720523 -0.383479100254 --0.0275101287792 -0.383476463485 --0.0184474725428 -0.383473514929 --0.00938454192642 -0.383471967669 -0 -0.383473514929 -0.00938454192642 -0.383476463485 -0.0184474725428 -0.383479100254 -0.0275101287792 -0.383481428044 -0.0365720523 -0.383405351719 -0.0459690863836 -0.383345688702 -0.0553607250209 -0.383380581515 -0.0644119505479 -0.383415194709 -0.0734640849346 -0.38344949406 -0.0825166692656 -0.383325880794 -0.0918743940199 -0.383218585458 -0.101223648672 -0.383285225747 -0.110260565943 -0.383351636319 -0.11929960232 -0.383417844867 -0.128340320544 -0.383247037372 -0.137638564792 -0.383092307232 -0.146925298748 -0.383190506714 -0.155945517498 -0.383288582201 -0.164969108557 -0.383386507335 -0.173995643974 -0.383168841328 -0.183215170602 -0.382966998103 -0.192420217166 -0.383096493354 -0.201421605927 -0.38322598326 -0.210427672928 -0.383355461543 -0.219438023249 -0.392363274975 --0.219947418843 -0.39222371765 --0.210916108398 -0.392084157409 --0.201889065689 -0.391944581046 --0.192866684998 -0.392161978041 --0.183641637913 -0.39239642204 --0.174402052928 -0.392290845697 --0.165354384606 -0.392185098316 --0.156309644438 -0.392079211827 --0.147268258916 -0.392245936562 --0.137960719094 -0.392429962702 --0.128641624053 -0.39235852524 --0.119579633309 -0.392286863721 --0.110519304829 -0.392214961513 --0.101461081062 -0.392330654308 --0.0920904165832 -0.392463894915 --0.0827112382306 -0.392426800465 --0.0736372594136 -0.392389393632 --0.0645637212255 -0.392351686004 --0.0554910821289 -0.392416110506 --0.0460776293857 -0.392498204654 --0.0366587576456 -0.392495539043 --0.0275753608312 -0.392492532618 --0.0184912192771 -0.392489196252 --0.00940679729692 -0.392487459181 -0 -0.392489196252 -0.00940679729692 -0.392492532618 -0.0184912192771 -0.392495539043 -0.0275753608312 -0.392498204654 -0.0366587576456 -0.392416110506 -0.0460776293857 -0.392351686004 -0.0554910821289 -0.392389393632 -0.0645637212255 -0.392426800465 -0.0736372594136 -0.392463894915 -0.0827112382306 -0.392330654308 -0.0920904165832 -0.392214961513 -0.101461081062 -0.392286863721 -0.110519304829 -0.39235852524 -0.119579633309 -0.392429962702 -0.128641624053 -0.392245936562 -0.137960719094 -0.392079211827 -0.147268258916 -0.392185098316 -0.156309644438 -0.392290845697 -0.165354384606 -0.39239642204 -0.174402052928 -0.392161978041 -0.183641637913 -0.391944581046 -0.192866684998 -0.392084157409 -0.201889065689 -0.39222371765 -0.210916108398 -0.392363274975 -0.219947418843 -0.401384384469 --0.220459013968 -0.401234732054 --0.211406673167 -0.401085068122 --0.202358568892 -0.400935382782 --0.193315118551 -0.401168387605 --0.184069972977 -0.401419637028 --0.174810222373 -0.401306369068 --0.165741345623 -0.401192940599 --0.156675375937 -0.401079363821 --0.147612748826 -0.401258088386 --0.138284288904 -0.401455364036 --0.12894422573 -0.40137870232 --0.119860883797 -0.401301770995 --0.110779181101 -0.401224602254 --0.1016995729 -0.401348708507 --0.0923073740248 -0.401491576065 --0.0829066222285 -0.401451684586 --0.0738111722517 -0.401411475598 --0.0647161484081 -0.40137093684 --0.0556220151431 -0.401440139158 --0.0461866258209 -0.401528278013 --0.036745791605 -0.401525270531 --0.0276408390871 -0.401521902204 --0.0185351313067 -0.401518186144 --0.00942913730454 -0.401516244302 -2.16840434497e-19 -0.401518186144 -0.00942913730454 -0.401521902204 -0.0185351313067 -0.401525270531 -0.0276408390871 -0.401528278013 -0.036745791605 -0.401440139158 -0.0461866258209 -0.40137093684 -0.0556220151431 -0.401411475598 -0.0647161484081 -0.401451684586 -0.0738111722517 -0.401491576065 -0.0829066222285 -0.401348708507 -0.0923073740248 -0.401224602254 -0.1016995729 -0.401301770995 -0.110779181101 -0.40137870232 -0.119860883797 -0.401455364036 -0.12894422573 -0.401258088386 -0.138284288904 -0.401079363821 -0.147612748826 -0.401192940599 -0.156675375937 -0.401306369068 -0.165741345623 -0.401419637028 -0.174810222373 -0.401168387605 -0.184069972977 -0.400935382782 -0.193315118551 -0.401085068122 -0.202358568892 -0.401234732054 -0.211406673167 -0.401384384469 -0.220459013968 -0.41009473881 --0.128419202349 -0.41002329297 --0.119373218514 -0.409951595521 --0.110328863448 -0.409879658335 --0.101286573382 -0.409995416794 --0.0919313066824 -0.410128726126 --0.082567521339 -0.41009165461 --0.0735094386816 -0.41005428615 --0.0644517834241 -0.410016600788 --0.0553950085828 -0.410080974771 --0.0459975507229 -0.410163077344 --0.0365946809162 -0.410160491999 --0.0275271548648 -0.410157558615 --0.0184588914283 -0.410154317665 --0.00939035198173 -0.410152613004 -0 -0.410154317665 -0.00939035198173 -0.410157558615 -0.0184588914283 -0.410160491999 -0.0275271548648 -0.410163077344 -0.0365946809162 -0.410080974771 -0.0459975507229 -0.410016600788 -0.0553950085828 -0.41005428615 -0.0644517834241 -0.41009165461 -0.0735094386816 -0.410128726126 -0.082567521339 -0.409995416794 -0.0919313066824 -0.409879658335 -0.101286573382 -0.409951595521 -0.110328863448 -0.41002329297 -0.119373218514 -0.41009473881 -0.128419202349 -0.418705039499 --0.127909580671 -0.418638860928 --0.118899858163 -0.418572459355 --0.109891750727 -0.418505804701 --0.100885679196 -0.4186131322 --0.09156627982 -0.418736800937 --0.0822383873074 -0.418702567301 --0.0732165620209 -0.418668057162 --0.0641951679709 -0.418633263362 --0.0551746470402 -0.418692781454 --0.0458140397756 -0.418768778522 --0.0364480489219 -0.418766607157 --0.0274168396857 -0.418764121024 --0.0183849116393 -0.4187613401 --0.00935271598039 -0.41875986503 -0 -0.4187613401 -0.00935271598039 -0.418764121024 -0.0183849116393 -0.418766607157 -0.0274168396857 -0.418768778522 -0.0364480489219 -0.418692781454 -0.0458140397756 -0.418633263362 -0.0551746470402 -0.418668057162 -0.0641951679709 -0.418702567301 -0.0732165620209 -0.418736800937 -0.0822383873074 -0.4186131322 -0.09156627982 -0.418505804701 -0.100885679196 -0.418572459355 -0.109891750727 -0.418638860928 -0.118899858163 -0.418705039499 -0.127909580671 -0.42772069843 --0.0824546304453 -0.427683726166 --0.0734090328885 -0.427646457882 --0.0643638472548 -0.427608883285 --0.0553195257678 -0.427673082379 --0.0459346749945 -0.427754997919 --0.0365444136292 -0.427752498045 --0.0274893383098 -0.42774968085 --0.0184335323263 -0.427746526053 --0.00937745141073 -0.427744848909 -0 -0.427746526053 -0.00937745141073 -0.42774968085 -0.0184335323263 -0.427752498045 -0.0274893383098 -0.427754997919 -0.0365444136292 -0.427673082379 -0.0459346749945 -0.427608883285 -0.0553195257678 -0.427646457882 -0.0643638472548 -0.427683726166 -0.0734090328885 -0.42772069843 -0.0824546304453 -0.436720068262 --0.082671904706 -0.436680371294 --0.0736024313247 -0.436640325593 --0.0645333515411 -0.436599952455 --0.0554651263885 -0.436668843324 --0.046055883989 -0.436756690748 --0.0366412029928 -0.43675387234 --0.0275621570739 -0.436750703022 --0.0184823674286 -0.436747182825 --0.00940229597992 -0.436745332885 --2.16840434497e-19 -0.436747182825 -0.00940229597992 -0.436750703022 -0.0184823674286 -0.43675387234 -0.0275621570739 -0.436756690748 -0.0366412029928 -0.436668843324 -0.046055883989 -0.436599952455 -0.0554651263885 -0.436640325593 -0.0645333515411 -0.436680371294 -0.0736024313247 -0.436720068262 -0.082671904706 -0.445734696637 --0.0828902302899 -0.445692247811 --0.0737967733504 -0.445649417478 --0.064703695363 -0.445606239297 --0.0556114589397 -0.445679863006 --0.0461776751127 -0.445773675836 --0.0367384257144 -0.445770527198 --0.0276353019696 -0.445766983934 --0.0185314209562 -0.445763067015 --0.00942725128817 -0.445761023272 --2.16840434497e-19 -0.445763067015 -0.00942725128817 -0.445766983934 -0.0185314209562 -0.445770527198 -0.0276353019696 -0.445773675836 -0.0367384257144 -0.445679863006 -0.0461776751127 -0.445606239297 -0.0556114589397 -0.445649417478 -0.064703695363 -0.445692247811 -0.0737967733504 -0.445734696637 -0.0828902302899 --0.409995416794 --0.0919313066824 --0.410080974771 --0.0459975507229 --0.410152613004 -0 --0.410080974771 -0.0459975507229 --0.409995416794 -0.0919313066824 --0.365325227778 --0.228834052091 --0.365402401283 --0.183436129649 --0.36548034851 --0.137805844793 --0.365558986982 --0.0919867945877 --0.365638219399 --0.0460256520825 --0.365704432274 --2.16840434497e-19 --0.365638219399 -0.0460256520825 --0.365558986982 -0.0919867945877 --0.36548034851 -0.137805844793 --0.365402401283 -0.183436129649 --0.365325227778 -0.228834052091 --0.320490865517 --0.274122269059 --0.32056082163 --0.228971393051 --0.320631492654 --0.183547841764 --0.320702765438 --0.137890886196 --0.320774623818 --0.0920442467726 --0.320846982601 --0.046054709568 --0.320907354095 -2.16840434497e-19 --0.320846982601 -0.046054709568 --0.320774623818 -0.0920442467726 --0.320702765438 -0.137890886196 --0.320631492654 -0.183547841764 --0.32056082163 -0.228971393051 --0.320490865517 -0.274122269059 --0.275347961655 --0.319159413297 --0.275410476556 --0.27429072797 --0.275473603745 --0.229114122226 --0.275537310898 --0.183663770114 --0.2756014848 --0.1379790344 --0.275666089959 --0.0921037267273 --0.275731100507 --0.0460847562483 --0.27578523136 -0 --0.275731100507 -0.0460847562483 --0.275666089959 -0.0921037267273 --0.2756014848 -0.1379790344 --0.275537310898 -0.183663770114 --0.275473603745 -0.229114122226 --0.275410476556 -0.27429072797 --0.275347961655 -0.319159413297 --0.229927860609 --0.363916788693 --0.229982731598 --0.319360229871 --0.230038115602 --0.274465747101 --0.230093957864 --0.229262238546 --0.230150239999 --0.183783935068 --0.230206862782 --0.138070291722 --0.230263735966 --0.0921652269094 --0.230320897489 --0.046115781938 --0.230368369429 --2.16840434497e-19 --0.230320897489 -0.046115781938 --0.230263735966 -0.0921652269094 --0.230206862782 -0.138070291722 --0.230150239999 -0.183783935068 --0.230093957864 -0.229262238546 --0.230038115602 -0.274465747101 --0.229982731598 -0.319360229871 --0.229927860609 -0.363916788693 --0.184312414879 --0.364149190855 --0.184359883854 --0.319567068605 --0.184407704205 --0.2746458293 --0.184455805558 --0.229414469402 --0.184504155454 --0.183907292043 --0.184552712161 --0.138163870005 --0.184601359408 --0.092228216202 --0.184650171111 --0.0461475222188 --0.184690531942 -0 --0.184650171111 -0.0461475222188 --0.184601359408 -0.092228216202 --0.184552712161 -0.138163870005 --0.184504155454 -0.183907292043 --0.184455805558 -0.229414469402 --0.184407704205 -0.2746458293 --0.184359883854 -0.319567068605 --0.184312414879 -0.364149190855 --0.138473557614 --0.364388681188 --0.138513313019 --0.31977994704 --0.138553251839 --0.274830965635 --0.138593296902 --0.229570807397 --0.138633440187 --0.184033852045 --0.138673595607 --0.138259757174 --0.138713734231 --0.0922926921845 --0.138753863098 --0.0461799762757 --0.13878681032 -0 --0.138753863098 -0.0461799762757 --0.138713734231 -0.0922926921845 --0.138673595607 -0.138259757174 --0.138633440187 -0.184033852045 --0.138593296902 -0.229570807397 --0.138553251839 -0.274830965635 --0.138513313019 -0.31977994704 --0.138473557614 -0.364388681188 --0.0924201889105 --0.408908734125 --0.0924520380861 --0.364636962394 --0.0924838952309 --0.32000042577 --0.0925157491421 --0.275022537825 --0.092547514989 --0.22973241045 --0.0925791915423 --0.184164531586 --0.0926107364696 --0.138358665631 --0.092642115436 --0.0923591238643 --0.092642115436 -0.0923591238643 --0.0926107364696 -0.138358665631 --0.0925791915423 -0.184164531586 --0.092547514989 -0.22973241045 --0.0925157491421 -0.275022537825 --0.0924838952309 -0.32000042577 --0.0924520380861 -0.364636962394 --0.0924201889105 -0.408908734125 --0.04626946149 --0.409191016344 --0.0462933838906 --0.364891673266 --0.0463171279016 --0.320226443793 --0.0463406467448 --0.27521873629 --0.0463639046393 --0.229897766748 --0.0463868831823 --0.184298105837 --0.0464095786505 --0.13845965595 --0.0464095786505 -0.13845965595 --0.0463868831823 -0.184298105837 --0.0463639046393 -0.229897766748 --0.0463406467448 -0.27521873629 --0.0463171279016 -0.320226443793 --0.0462933838906 -0.364891673266 --0.04626946149 -0.409191016344 -0 --0.409440046984 -0 --0.365117029911 -0 --0.320426830896 -0 --0.275392978581 -0 --0.230044720345 -0 --0.184416826485 -0 --0.138549320014 -0 -0.138549320014 -0 -0.184416826485 -0 -0.230044720345 -0 -0.275392978581 -0 -0.320426830896 -0 -0.365117029911 -0 -0.409440046984 -0.04626946149 --0.409191016344 -0.0462933838906 --0.364891673266 -0.0463171279016 --0.320226443793 -0.0463406467448 --0.27521873629 -0.0463639046393 --0.229897766748 -0.0463868831823 --0.184298105837 -0.0464095786505 --0.13845965595 -0.0464095786505 -0.13845965595 -0.0463868831823 -0.184298105837 -0.0463639046393 -0.229897766748 -0.0463406467448 -0.27521873629 -0.0463171279016 -0.320226443793 -0.0462933838906 -0.364891673266 -0.04626946149 -0.409191016344 -0.0924201889105 --0.408908734125 -0.0924520380861 --0.364636962394 -0.0924838952309 --0.32000042577 -0.0925157491421 --0.275022537825 -0.092547514989 --0.22973241045 -0.0925791915423 --0.184164531586 -0.0926107364696 --0.138358665631 -0.092642115436 --0.0923591238643 -0.092642115436 -0.0923591238643 -0.0926107364696 -0.138358665631 -0.0925791915423 -0.184164531586 -0.092547514989 -0.22973241045 -0.0925157491421 -0.275022537825 -0.0924838952309 -0.32000042577 -0.0924520380861 -0.364636962394 -0.0924201889105 -0.408908734125 -0.138473557614 --0.364388681188 -0.138513313019 --0.31977994704 -0.138553251839 --0.274830965635 -0.138593296902 --0.229570807397 -0.138633440187 --0.184033852045 -0.138673595607 --0.138259757174 -0.138713734231 --0.0922926921845 -0.138753863098 --0.0461799762757 -0.13878681032 -0 -0.138753863098 -0.0461799762757 -0.138713734231 -0.0922926921845 -0.138673595607 -0.138259757174 -0.138633440187 -0.184033852045 -0.138593296902 -0.229570807397 -0.138553251839 -0.274830965635 -0.138513313019 -0.31977994704 -0.138473557614 -0.364388681188 -0.184312414879 --0.364149190855 -0.184359883854 --0.319567068605 -0.184407704205 --0.2746458293 -0.184455805558 --0.229414469402 -0.184504155454 --0.183907292043 -0.184552712161 --0.138163870005 -0.184601359408 --0.092228216202 -0.184650171111 --0.0461475222188 -0.184690531942 -0 -0.184650171111 -0.0461475222188 -0.184601359408 -0.092228216202 -0.184552712161 -0.138163870005 -0.184504155454 -0.183907292043 -0.184455805558 -0.229414469402 -0.184407704205 -0.2746458293 -0.184359883854 -0.319567068605 -0.184312414879 -0.364149190855 -0.229927860609 --0.363916788693 -0.229982731598 --0.319360229871 -0.230038115602 --0.274465747101 -0.230093957864 --0.229262238546 -0.230150239999 --0.183783935068 -0.230206862782 --0.138070291722 -0.230263735966 --0.0921652269094 -0.230320897489 --0.046115781938 -0.230368369429 --2.16840434497e-19 -0.230320897489 -0.046115781938 -0.230263735966 -0.0921652269094 -0.230206862782 -0.138070291722 -0.230150239999 -0.183783935068 -0.230093957864 -0.229262238546 -0.230038115602 -0.274465747101 -0.229982731598 -0.319360229871 -0.229927860609 -0.363916788693 -0.275347961655 --0.319159413297 -0.275410476556 --0.27429072797 -0.275473603745 --0.229114122226 -0.275537310898 --0.183663770114 -0.2756014848 --0.1379790344 -0.275666089959 --0.0921037267273 -0.275731100507 --0.0460847562483 -0.27578523136 -0 -0.275731100507 -0.0460847562483 -0.275666089959 -0.0921037267273 -0.2756014848 -0.1379790344 -0.275537310898 -0.183663770114 -0.275473603745 -0.229114122226 -0.275410476556 -0.27429072797 -0.275347961655 -0.319159413297 -0.320490865517 --0.274122269059 -0.32056082163 --0.228971393051 -0.320631492654 --0.183547841764 -0.320702765438 --0.137890886196 -0.320774623818 --0.0920442467726 -0.320846982601 --0.046054709568 -0.320907354095 -2.16840434497e-19 -0.320846982601 -0.046054709568 -0.320774623818 -0.0920442467726 -0.320702765438 -0.137890886196 -0.320631492654 -0.183547841764 -0.32056082163 -0.228971393051 -0.320490865517 -0.274122269059 -0.365325227778 --0.228834052091 -0.365402401283 --0.183436129649 -0.36548034851 --0.137805844793 -0.365558986982 --0.0919867945877 -0.365638219399 --0.0460256520825 -0.365704432274 --2.16840434497e-19 -0.365638219399 -0.0460256520825 -0.365558986982 -0.0919867945877 -0.36548034851 -0.137805844793 -0.365402401283 -0.183436129649 -0.365325227778 -0.228834052091 -0.409995416794 --0.0919313066824 -0.410080974771 --0.0459975507229 -0.410152613004 -0 -0.410080974771 -0.0459975507229 -0.409995416794 -0.0919313066824 --0.409995416794 --0.0919313066824 --0.410080974771 --0.0459975507229 --0.410152613004 -0 --0.410080974771 -0.0459975507229 --0.409995416794 -0.0919313066824 --0.365325227778 --0.228834052091 --0.365402401283 --0.183436129649 --0.36548034851 --0.137805844793 --0.365558986982 --0.0919867945877 --0.365638219399 --0.0460256520825 --0.365704432274 --2.16840434497e-19 --0.365638219399 -0.0460256520825 --0.365558986982 -0.0919867945877 --0.36548034851 -0.137805844793 --0.365402401283 -0.183436129649 --0.365325227778 -0.228834052091 --0.320490865517 --0.274122269059 --0.32056082163 --0.228971393051 --0.320631492654 --0.183547841764 --0.320702765438 --0.137890886196 --0.320774623818 --0.0920442467726 --0.320846982601 --0.046054709568 --0.320907354095 -2.16840434497e-19 --0.320846982601 -0.046054709568 --0.320774623818 -0.0920442467726 --0.320702765438 -0.137890886196 --0.320631492654 -0.183547841764 --0.32056082163 -0.228971393051 --0.320490865517 -0.274122269059 --0.275347961655 --0.319159413297 --0.275410476556 --0.27429072797 --0.275473603745 --0.229114122226 --0.275537310898 --0.183663770114 --0.2756014848 --0.1379790344 --0.275666089959 --0.0921037267273 --0.275731100507 --0.0460847562483 --0.27578523136 -0 --0.275731100507 -0.0460847562483 --0.275666089959 -0.0921037267273 --0.2756014848 -0.1379790344 --0.275537310898 -0.183663770114 --0.275473603745 -0.229114122226 --0.275410476556 -0.27429072797 --0.275347961655 -0.319159413297 --0.229927860609 --0.363916788693 --0.229982731598 --0.319360229871 --0.230038115602 --0.274465747101 --0.230093957864 --0.229262238546 --0.230150239999 --0.183783935068 --0.230206862782 --0.138070291722 --0.230263735966 --0.0921652269094 --0.230320897489 --0.046115781938 --0.230368369429 --2.16840434497e-19 --0.230320897489 -0.046115781938 --0.230263735966 -0.0921652269094 --0.230206862782 -0.138070291722 --0.230150239999 -0.183783935068 --0.230093957864 -0.229262238546 --0.230038115602 -0.274465747101 --0.229982731598 -0.319360229871 --0.229927860609 -0.363916788693 --0.184312414879 --0.364149190855 --0.184359883854 --0.319567068605 --0.184407704205 --0.2746458293 --0.184455805558 --0.229414469402 --0.184504155454 --0.183907292043 --0.184552712161 --0.138163870005 --0.184601359408 --0.092228216202 --0.184650171111 --0.0461475222188 --0.184690531942 -0 --0.184650171111 -0.0461475222188 --0.184601359408 -0.092228216202 --0.184552712161 -0.138163870005 --0.184504155454 -0.183907292043 --0.184455805558 -0.229414469402 --0.184407704205 -0.2746458293 --0.184359883854 -0.319567068605 --0.184312414879 -0.364149190855 --0.138473557614 --0.364388681188 --0.138513313019 --0.31977994704 --0.138553251839 --0.274830965635 --0.138593296902 --0.229570807397 --0.138633440187 --0.184033852045 --0.138673595607 --0.138259757174 --0.138713734231 --0.0922926921845 --0.138753863098 --0.0461799762757 --0.13878681032 -0 --0.138753863098 -0.0461799762757 --0.138713734231 -0.0922926921845 --0.138673595607 -0.138259757174 --0.138633440187 -0.184033852045 --0.138593296902 -0.229570807397 --0.138553251839 -0.274830965635 --0.138513313019 -0.31977994704 --0.138473557614 -0.364388681188 --0.0924201889105 --0.408908734125 --0.0924520380861 --0.364636962394 --0.0924838952309 --0.32000042577 --0.0925157491421 --0.275022537825 --0.092547514989 --0.22973241045 --0.0925791915423 --0.184164531586 --0.0926107364696 --0.138358665631 --0.092642115436 --0.0923591238643 --0.092642115436 -0.0923591238643 --0.0926107364696 -0.138358665631 --0.0925791915423 -0.184164531586 --0.092547514989 -0.22973241045 --0.0925157491421 -0.275022537825 --0.0924838952309 -0.32000042577 --0.0924520380861 -0.364636962394 --0.0924201889105 -0.408908734125 --0.04626946149 --0.409191016344 --0.0462933838906 --0.364891673266 --0.0463171279016 --0.320226443793 --0.0463406467448 --0.27521873629 --0.0463639046393 --0.229897766748 --0.0463868831823 --0.184298105837 --0.0464095786505 --0.13845965595 --0.0464095786505 -0.13845965595 --0.0463868831823 -0.184298105837 --0.0463639046393 -0.229897766748 --0.0463406467448 -0.27521873629 --0.0463171279016 -0.320226443793 --0.0462933838906 -0.364891673266 --0.04626946149 -0.409191016344 -0 --0.409440046984 -0 --0.365117029911 -0 --0.320426830896 -0 --0.275392978581 -0 --0.230044720345 -0 --0.184416826485 -0 --0.138549320014 -0 -0.138549320014 -0 -0.184416826485 -0 -0.230044720345 -0 -0.275392978581 -0 -0.320426830896 -0 -0.365117029911 -0 -0.409440046984 -0.04626946149 --0.409191016344 -0.0462933838906 --0.364891673266 -0.0463171279016 --0.320226443793 -0.0463406467448 --0.27521873629 -0.0463639046393 --0.229897766748 -0.0463868831823 --0.184298105837 -0.0464095786505 --0.13845965595 -0.0464095786505 -0.13845965595 -0.0463868831823 -0.184298105837 -0.0463639046393 -0.229897766748 -0.0463406467448 -0.27521873629 -0.0463171279016 -0.320226443793 -0.0462933838906 -0.364891673266 -0.04626946149 -0.409191016344 -0.0924201889105 --0.408908734125 -0.0924520380861 --0.364636962394 -0.0924838952309 --0.32000042577 -0.0925157491421 --0.275022537825 -0.092547514989 --0.22973241045 -0.0925791915423 --0.184164531586 -0.0926107364696 --0.138358665631 -0.092642115436 --0.0923591238643 -0.092642115436 -0.0923591238643 -0.0926107364696 -0.138358665631 -0.0925791915423 -0.184164531586 -0.092547514989 -0.22973241045 -0.0925157491421 -0.275022537825 -0.0924838952309 -0.32000042577 -0.0924520380861 -0.364636962394 -0.0924201889105 -0.408908734125 -0.138473557614 --0.364388681188 -0.138513313019 --0.31977994704 -0.138553251839 --0.274830965635 -0.138593296902 --0.229570807397 -0.138633440187 --0.184033852045 -0.138673595607 --0.138259757174 -0.138713734231 --0.0922926921845 -0.138753863098 --0.0461799762757 -0.13878681032 -0 -0.138753863098 -0.0461799762757 -0.138713734231 -0.0922926921845 -0.138673595607 -0.138259757174 -0.138633440187 -0.184033852045 -0.138593296902 -0.229570807397 -0.138553251839 -0.274830965635 -0.138513313019 -0.31977994704 -0.138473557614 -0.364388681188 -0.184312414879 --0.364149190855 -0.184359883854 --0.319567068605 -0.184407704205 --0.2746458293 -0.184455805558 --0.229414469402 -0.184504155454 --0.183907292043 -0.184552712161 --0.138163870005 -0.184601359408 --0.092228216202 -0.184650171111 --0.0461475222188 -0.184690531942 -0 -0.184650171111 -0.0461475222188 -0.184601359408 -0.092228216202 -0.184552712161 -0.138163870005 -0.184504155454 -0.183907292043 -0.184455805558 -0.229414469402 -0.184407704205 -0.2746458293 -0.184359883854 -0.319567068605 -0.184312414879 -0.364149190855 -0.229927860609 --0.363916788693 -0.229982731598 --0.319360229871 -0.230038115602 --0.274465747101 -0.230093957864 --0.229262238546 -0.230150239999 --0.183783935068 -0.230206862782 --0.138070291722 -0.230263735966 --0.0921652269094 -0.230320897489 --0.046115781938 -0.230368369429 --2.16840434497e-19 -0.230320897489 -0.046115781938 -0.230263735966 -0.0921652269094 -0.230206862782 -0.138070291722 -0.230150239999 -0.183783935068 -0.230093957864 -0.229262238546 -0.230038115602 -0.274465747101 -0.229982731598 -0.319360229871 -0.229927860609 -0.363916788693 -0.275347961655 --0.319159413297 -0.275410476556 --0.27429072797 -0.275473603745 --0.229114122226 -0.275537310898 --0.183663770114 -0.2756014848 --0.1379790344 -0.275666089959 --0.0921037267273 -0.275731100507 --0.0460847562483 -0.27578523136 -0 -0.275731100507 -0.0460847562483 -0.275666089959 -0.0921037267273 -0.2756014848 -0.1379790344 -0.275537310898 -0.183663770114 -0.275473603745 -0.229114122226 -0.275410476556 -0.27429072797 -0.275347961655 -0.319159413297 -0.320490865517 --0.274122269059 -0.32056082163 --0.228971393051 -0.320631492654 --0.183547841764 -0.320702765438 --0.137890886196 -0.320774623818 --0.0920442467726 -0.320846982601 --0.046054709568 -0.320907354095 -2.16840434497e-19 -0.320846982601 -0.046054709568 -0.320774623818 -0.0920442467726 -0.320702765438 -0.137890886196 -0.320631492654 -0.183547841764 -0.32056082163 -0.228971393051 -0.320490865517 -0.274122269059 -0.365325227778 --0.228834052091 -0.365402401283 --0.183436129649 -0.36548034851 --0.137805844793 -0.365558986982 --0.0919867945877 -0.365638219399 --0.0460256520825 -0.365704432274 --2.16840434497e-19 -0.365638219399 -0.0460256520825 -0.365558986982 -0.0919867945877 -0.36548034851 -0.137805844793 -0.365402401283 -0.183436129649 -0.365325227778 -0.228834052091 -0.409995416794 --0.0919313066824 -0.410080974771 --0.0459975507229 -0.410152613004 -0 -0.410080974771 -0.0459975507229 -0.409995416794 -0.0919313066824 -0 -0 -0 -0 diff --git a/HiggsAnalysis/Skimming/BuildFile.xml b/HiggsAnalysis/Skimming/BuildFile.xml deleted file mode 100644 index c7d15503d12cd..0000000000000 --- a/HiggsAnalysis/Skimming/BuildFile.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/HiggsAnalysis/Skimming/interface/HeavyChHiggsToTauNuSkim.h b/HiggsAnalysis/Skimming/interface/HeavyChHiggsToTauNuSkim.h deleted file mode 100644 index a2b4cd3ad112a..0000000000000 --- a/HiggsAnalysis/Skimming/interface/HeavyChHiggsToTauNuSkim.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef HeavyChHiggsToTauNuSkim_h -#define HeavyChHiggsToTauNuSkim_h - -/** \class HeavyChHiggsToTauNuSkim - * - * - * Filter to select events passing - * L1 single tau - * HLT tau+MET - * 3 offline jets - * - * \author Sami Lehti - HIP Helsinki - * - */ - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/BTauReco/interface/IsolatedTauTagInfo.h" -#include "DataFormats/JetReco/interface/CaloJetCollection.h" - -#include - -class HeavyChHiggsToTauNuSkim : public edm::EDFilter { -public: - explicit HeavyChHiggsToTauNuSkim(const edm::ParameterSet&); - ~HeavyChHiggsToTauNuSkim() override; - - bool filter(edm::Event&, const edm::EventSetup&) override; - -private: - double deltaPhi(double phi1, double phi2) { - const double PI = 3.1415926535; - // in ORCA phi = [0,2pi], in TLorentzVector phi = [-pi,pi]. - // With the conversion below deltaPhi works ok despite the - // 2*pi difference in phi definitions. - if (phi1 < 0) - phi1 += 2 * PI; - if (phi2 < 0) - phi2 += 2 * PI; - - double dphi = fabs(phi1 - phi2); - - if (dphi > PI) - dphi = 2 * PI - dphi; - return dphi; - } - - double deltaR(double eta1, double eta2, double phi1, double phi2) { - double dphi = deltaPhi(phi1, phi2); - double deta = fabs(eta1 - eta2); - return sqrt(dphi * dphi + deta * deta); - } - - bool debug; - - edm::EDGetTokenT hltTauToken; - edm::EDGetTokenT jetToken; - int minNumberOfjets; - double jetEtMin; - double jetEtaMin; - double jetEtaMax; - double minDRFromTau; - - int nEvents, nSelectedEvents; -}; -#endif diff --git a/HiggsAnalysis/Skimming/interface/HiggsTo2GammaSkim.h b/HiggsAnalysis/Skimming/interface/HiggsTo2GammaSkim.h deleted file mode 100644 index e2cd2d2218ed1..0000000000000 --- a/HiggsAnalysis/Skimming/interface/HiggsTo2GammaSkim.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef HiggsAnalysis_HiggsTo2GammaSkim -#define HiggsAnalysis_HiggsTo2GammaSkim - -/* \class HiggsTo2GammaSkim - * - * - * Filter to select 2 photon events based on the - * 1 or 2 photon HLT trigger, - * - * \author Kati Lassila-Perini - Helsinki Institute of Physics - * - */ - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include - -class HiggsTo2GammaSkim : public edm::EDFilter { -public: - // Constructor - explicit HiggsTo2GammaSkim(const edm::ParameterSet&); - - // Destructor - ~HiggsTo2GammaSkim() override; - - /// Get event properties to send to builder to fill seed collection - bool filter(edm::Event&, const edm::EventSetup&) override; - -private: - int nEvents, nSelectedEvents; - - bool debug; - float photon1MinPt; - float photon2MinPt; - int nPhotonMin; - - // Reco samples - edm::EDGetTokenT thePhotonToken; -}; - -#endif diff --git a/HiggsAnalysis/Skimming/interface/HiggsToWW2LeptonsSkim.h b/HiggsAnalysis/Skimming/interface/HiggsToWW2LeptonsSkim.h deleted file mode 100644 index 28f0464b4e674..0000000000000 --- a/HiggsAnalysis/Skimming/interface/HiggsToWW2LeptonsSkim.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef HiggsToWW2LeptonsSkim_h -#define HiggsToWW2LeptonsSkim_h - -/** \class HWWFilter - * - * - * This class is an EDFilter choosing reconstructed di-tracks - * - * - * \author Ezio Torassa - INFN Padova - * - */ - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" - -class HiggsToWW2LeptonsSkim : public edm::EDFilter { -public: - explicit HiggsToWW2LeptonsSkim(const edm::ParameterSet&); - ~HiggsToWW2LeptonsSkim() override; - void endJob() override; - - bool filter(edm::Event&, const edm::EventSetup&) override; - -private: - double singleTrackPtMin_; - double diTrackPtMin_; - double etaMin_; - double etaMax_; - unsigned int nEvents_; - unsigned int nAccepted_; - - // Reco samples - edm::EDGetTokenT theGLBMuonToken; - edm::EDGetTokenT theGsfEToken; -}; -#endif diff --git a/HiggsAnalysis/Skimming/interface/HiggsToZZ4LeptonsPreFilter.h b/HiggsAnalysis/Skimming/interface/HiggsToZZ4LeptonsPreFilter.h deleted file mode 100644 index 496f32f91e303..0000000000000 --- a/HiggsAnalysis/Skimming/interface/HiggsToZZ4LeptonsPreFilter.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef HiggsAnalysis_HiggsToZZ4LeptonsPreFilter -#define HiggsAnalysis_HiggsToZZ4LeptonsPreFilter - -/* \class HiggsTo4LeptonsSkim - * - * - * Filter to select 4 lepton events (4e, 4mu, 2e2mu) within - * fiducial volume (|eta| < 2.4) - * - * \author Dominique Fortin - UC Riverside - * - */ - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" - -class HiggsToZZ4LeptonsPreFilter : public edm::EDFilter { -public: - // Constructor - explicit HiggsToZZ4LeptonsPreFilter(const edm::ParameterSet&); - - // Destructor - ~HiggsToZZ4LeptonsPreFilter() override; - - /// Get event properties to send to builder to fill seed collection - bool filter(edm::Event&, const edm::EventSetup&) override; - -private: - int evt, ikept; - - bool debug; - int leptonFlavour; - - edm::EDGetTokenT genToken; -}; - -#endif diff --git a/HiggsAnalysis/Skimming/interface/HiggsToZZ4LeptonsSkim.h b/HiggsAnalysis/Skimming/interface/HiggsToZZ4LeptonsSkim.h deleted file mode 100644 index 31afae4f7640c..0000000000000 --- a/HiggsAnalysis/Skimming/interface/HiggsToZZ4LeptonsSkim.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef HiggsAnalysis_HiggsToZZ4LeptonsSkim -#define HiggsAnalysis_HiggsToZZ4LeptonsSkim - -/* \class HiggsTo4LeptonsSkim - * - * - * Filter to select 4 lepton events based on the - * 1 or 2 electron or 1 or 2 muon HLT trigger, - * and four leptons (no flavour requirement). - * No charge requirements are applied on event. - * - * \author Dominique Fortin - UC Riverside - * - */ - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" - -class HiggsToZZ4LeptonsSkim : public edm::EDFilter { -public: - // Constructor - explicit HiggsToZZ4LeptonsSkim(const edm::ParameterSet&); - - // Destructor - ~HiggsToZZ4LeptonsSkim() override; - - /// Get event properties to send to builder to fill seed collection - bool filter(edm::Event&, const edm::EventSetup&) override; - -private: - int nEvents, nSelectedEvents; - - bool debug; - float stiffMinPt; - float softMinPt; - int nStiffLeptonMin; - int nLeptonMin; - - // Reco samples - edm::EDGetTokenT theGLBMuonToken; - edm::EDGetTokenT theGsfEToken; -}; - -#endif diff --git a/HiggsAnalysis/Skimming/interface/HiggsToZZ4LeptonsSkimEff.h b/HiggsAnalysis/Skimming/interface/HiggsToZZ4LeptonsSkimEff.h deleted file mode 100644 index 6c196d97a7d13..0000000000000 --- a/HiggsAnalysis/Skimming/interface/HiggsToZZ4LeptonsSkimEff.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef HiggsAnalysis_HiggsToZZ4LeptonsSkimEff -#define HiggsAnalysis_HiggsToZZ4LeptonsSkimEff - -/* \class HiggsTo4LeptonsSkimEff - * - * EDAnalyzer to study the HLT and skim efficiency for signal - * A preselection on the generaged event is built in - * - * \author Dominique Fortin - UC Riverside - * - */ - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" - -class HiggsToZZ4LeptonsSkimEff : public edm::EDAnalyzer { -public: - // Constructor - explicit HiggsToZZ4LeptonsSkimEff(const edm::ParameterSet&); - - // Destructor - ~HiggsToZZ4LeptonsSkimEff() override; - - /// Get event properties to send to builder to fill seed collection - void analyze(const edm::Event&, const edm::EventSetup&) override; - -private: - bool debug; - float stiffMinPt; - float softMinPt; - int nStiffLeptonMin; - int nLeptonMin; - - int nEvents, nSelFourE, nSelFourM, nSelTwoETwoM, nSelFourL, nSelTau; - int nFourE, nFourM, nTwoETwoM, nFourL, nTau; - - // Reco samples - edm::EDGetTokenT theGLBMuonToken; - edm::EDGetTokenT theGsfEToken; - edm::EDGetTokenT genToken; -}; - -#endif diff --git a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNuOutputModuleAODSIM_cfi.py b/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNuOutputModuleAODSIM_cfi.py deleted file mode 100644 index 57a808cba757c..0000000000000 --- a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNuOutputModuleAODSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.heavyChHiggsToTauNu_EventContent_cff import * -heavyChHiggsToTauNuOutputModuleAODSIM = cms.OutputModule("PoolOutputModule", - AODSIMEventContent, - heavyChHiggsToTauNuEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('heavyChHiggsToTauNuAODSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('heavyChHiggsToTauNu_AODSIM.root') -) - - diff --git a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNuOutputModuleRECOSIM_cfi.py b/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNuOutputModuleRECOSIM_cfi.py deleted file mode 100644 index ea9b22c6873b1..0000000000000 --- a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNuOutputModuleRECOSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.heavyChHiggsToTauNu_EventContent_cff import * -heavyChHiggsToTauNuOutputModuleRECOSIM = cms.OutputModule("PoolOutputModule", - RECOSIMEventContent, - heavyChHiggsToTauNuEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('heavyChHiggsToTauNuRECOSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('heavyChHiggsToTauNu_RECOSIM.root') -) - - diff --git a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_AODSIM_cff.py b/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_AODSIM_cff.py deleted file mode 100644 index f10460683e027..0000000000000 --- a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_AODSIM_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.heavyChHiggsToTauNu_EventContent_cff import * -heavyChHiggsToTauNuEventContentAODSIM = cms.PSet( - outputCommands = cms.untracked.vstring() -) -heavyChHiggsToTauNuEventContentAODSIM.outputCommands.extend(AODSIMEventContent.outputCommands) -heavyChHiggsToTauNuEventContentAODSIM.outputCommands.extend(heavyChHiggsToTauNuEventContent.outputCommands) - diff --git a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_EventContent_cff.py b/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_EventContent_cff.py deleted file mode 100644 index 08abe77396901..0000000000000 --- a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_EventContent_cff.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Can insert block to customize what goes inside root file on top of AOD/RECO -heavyChHiggsToTauNuEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -heavyChHiggsToTauNuEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('heavyChHiggsToTauNuFilterPath') - ) -) - diff --git a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_Filter_cfi.py b/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_Filter_cfi.py deleted file mode 100644 index f93202ba81842..0000000000000 --- a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_Filter_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -heavyChHiggsToTauNuFilter = cms.EDFilter("HeavyChHiggsToTauNuSkim", - # Collection to be accessed - HLTTauCollection = cms.InputTag("isolatedL3SingleTau"), - minDRFromTau = cms.double(0.5), - DebugHeavyChHiggsToTauNuSkim = cms.bool(False), - jetEtaMin = cms.double(-2.5), - jetEtaMax = cms.double(2.5), - minNumberOfJets = cms.int32(3), - jetEtMin = cms.double(20.0), - JetTagCollection = cms.InputTag("iterativeCone5CaloJets") -) - - diff --git a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_HLTPaths_cfi.py b/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_HLTPaths_cfi.py deleted file mode 100644 index 7d44dc0a55de9..0000000000000 --- a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_HLTPaths_cfi.py +++ /dev/null @@ -1,7 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -heavyChHiggsToTauNuHLTFilter = copy.deepcopy(hltHighLevel) -heavyChHiggsToTauNuHLTFilter.HLTPaths = ['HLT_IsoTau_MET65_Trk20'] - diff --git a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_OutputModule_cff.py b/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_OutputModule_cff.py deleted file mode 100644 index 63f359e07da49..0000000000000 --- a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_OutputModule_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.heavyChHiggsToTauNuOutputModuleAODSIM_cfi import * -from HiggsAnalysis.Skimming.heavyChHiggsToTauNuOutputModuleRECOSIM_cfi import * - diff --git a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_RECOSIM_cff.py b/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_RECOSIM_cff.py deleted file mode 100644 index 04b4fc8241c38..0000000000000 --- a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_RECOSIM_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.heavyChHiggsToTauNu_EventContent_cff import * -heavyChHiggsToTauNuEventContentRECOSIM = cms.PSet( - outputCommands = cms.untracked.vstring() -) -heavyChHiggsToTauNuEventContentRECOSIM.outputCommands.extend(RECOSIMEventContent.outputCommands) -heavyChHiggsToTauNuEventContentRECOSIM.outputCommands.extend(heavyChHiggsToTauNuEventContent.outputCommands) - diff --git a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_Sequences_cff.py b/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_Sequences_cff.py deleted file mode 100644 index 3948f449c9172..0000000000000 --- a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_Sequences_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.heavyChHiggsToTauNu_HLTPaths_cfi import * -from HiggsAnalysis.Skimming.heavyChHiggsToTauNu_Filter_cfi import * -heavyChHiggsToTauNuHLTrigReport = cms.EDAnalyzer("HLTrigReport", - HLTriggerResults = cms.InputTag("TriggerResults") -) - -heavyChHiggsToTauNuSequence = cms.Sequence(heavyChHiggsToTauNuHLTrigReport+heavyChHiggsToTauNuHLTFilter+heavyChHiggsToTauNuFilter) - diff --git a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_SkimPaths_cff.py b/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_SkimPaths_cff.py deleted file mode 100644 index 5fa0ff131508b..0000000000000 --- a/HiggsAnalysis/Skimming/python/heavyChHiggsToTauNu_SkimPaths_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.heavyChHiggsToTauNu_Sequences_cff import * -heavyChHiggsToTauNuFilterPath = cms.Path(heavyChHiggsToTauNuSequence) - diff --git a/HiggsAnalysis/Skimming/python/higgsTo2GammaOutputModuleAODSIM_cfi.py b/HiggsAnalysis/Skimming/python/higgsTo2GammaOutputModuleAODSIM_cfi.py deleted file mode 100644 index 9d329639b9491..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsTo2GammaOutputModuleAODSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsTo2Gamma_EventContent_cff import * -higgsTo2GammaOutputModuleAODSIM = cms.OutputModule("PoolOutputModule", - higgsTo2GammaEventSelection, - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('higgsTo2GammaAODSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('hgg_AODSIM.root') -) - - diff --git a/HiggsAnalysis/Skimming/python/higgsTo2GammaOutputModuleRECOSIM_cfi.py b/HiggsAnalysis/Skimming/python/higgsTo2GammaOutputModuleRECOSIM_cfi.py deleted file mode 100644 index 698692ce574e0..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsTo2GammaOutputModuleRECOSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsTo2Gamma_EventContent_cff import * -higgsTo2GammaOutputModuleRECOSIM = cms.OutputModule("PoolOutputModule", - RECOSIMEventContent, - higgsTo2GammaEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('higgsTo2Gamma_RECOSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('hgg_RECOSIM.root') -) - - diff --git a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_AODSIM_cff.py b/HiggsAnalysis/Skimming/python/higgsTo2Gamma_AODSIM_cff.py deleted file mode 100644 index 53f48ffc703ef..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_AODSIM_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsTo2Gamma_EventContent_cff import * -higgsTo2GammaEventContentAODSIM = cms.PSet( - outputCommands = cms.untracked.vstring() -) -higgsTo2GammaEventContentAODSIM.outputCommands.extend(AODSIMEventContent.outputCommands) -higgsTo2GammaEventContentAODSIM.outputCommands.extend(higgsTo2GammaEventContent.outputCommands) - diff --git a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_EventContent_cff.py b/HiggsAnalysis/Skimming/python/higgsTo2Gamma_EventContent_cff.py deleted file mode 100644 index fc15b19381eb5..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_EventContent_cff.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Can insert block to customize what goes inside root file on top of AOD/RECO -higgsTo2GammaEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -higgsTo2GammaEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('HggFilterPath') - ) -) - diff --git a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_Filter_cfi.py b/HiggsAnalysis/Skimming/python/higgsTo2Gamma_Filter_cfi.py deleted file mode 100644 index dadbe9ade7c2b..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_Filter_cfi.py +++ /dev/null @@ -1,17 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Entries for H2g skim -# -# Kati Lassila-Perini - Helsinki Institute of Physics -# -higgsTo2GammaFilter = cms.EDFilter("HiggsTo2GammaSkim", - # Collection to be accessed - PhotonCollectionLabel = cms.InputTag("correctedPhotons"), - DebugHiggsTo2GammaSkim = cms.bool(False), - # Minimum number of identified photons above pt threshold - nPhotonMinimum = cms.int32(2), - # Pt threshold for photons - photon1MinimumPt = cms.double(15.0) -) - - diff --git a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_HLTPaths_cfi.py b/HiggsAnalysis/Skimming/python/higgsTo2Gamma_HLTPaths_cfi.py deleted file mode 100644 index 81d8cc45eaabe..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_HLTPaths_cfi.py +++ /dev/null @@ -1,7 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -higgsTo2GammaHLTFilter = copy.deepcopy(hltHighLevel) -higgsTo2GammaHLTFilter.HLTPaths = ['HLT_IsoPhoton30_L1I', 'HLT_IsoPhoton40_L1R', 'HLT_DoubleIsoPhoton20_L1I', 'HLT_DoubleIsoPhoton20_L1R'] - diff --git a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_OutputModule_cff.py b/HiggsAnalysis/Skimming/python/higgsTo2Gamma_OutputModule_cff.py deleted file mode 100644 index 7356a642f995b..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_OutputModule_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsTo2GammaOutputModuleAODSIM_cfi import * -from HiggsAnalysis.Skimming.higgsTo2GammaOutputModuleRECOSIM_cfi import * - diff --git a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_RECOSIM_cff.py b/HiggsAnalysis/Skimming/python/higgsTo2Gamma_RECOSIM_cff.py deleted file mode 100644 index f9b166bb1a86b..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_RECOSIM_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsTo2Gamma_EventContent_cff import * -higgsTo2GammaEventContentRECOSIM = cms.PSet( - outputCommands = cms.untracked.vstring() -) -higgsTo2GammaEventContentRECOSIM.outputCommands.extend(RECOSIMEventContent.outputCommands) -higgsTo2GammaEventContentRECOSIM.outputCommands.extend(higgsTo2GammaEventContent.outputCommands) - diff --git a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_Sequences_cff.py b/HiggsAnalysis/Skimming/python/higgsTo2Gamma_Sequences_cff.py deleted file mode 100644 index f285c5a69c4d1..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_Sequences_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsTo2Gamma_HLTPaths_cfi import * -from HiggsAnalysis.Skimming.higgsTo2Gamma_Filter_cfi import * -higgsTo2GammaHLTrigReport = cms.EDAnalyzer("HLTrigReport", - HLTriggerResults = cms.InputTag("TriggerResults") -) - -higgsTo2GammaSequence = cms.Sequence(higgsTo2GammaHLTrigReport+higgsTo2GammaHLTFilter+higgsTo2GammaFilter) - diff --git a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_SkimPaths_cff.py b/HiggsAnalysis/Skimming/python/higgsTo2Gamma_SkimPaths_cff.py deleted file mode 100644 index a35f362bb411e..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsTo2Gamma_SkimPaths_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsTo2Gamma_Sequences_cff import * -HggFilterPath = cms.Path(higgsTo2GammaSequence) - diff --git a/HiggsAnalysis/Skimming/python/higgsToInvisibleOutputModuleAODSIM_cfi.py b/HiggsAnalysis/Skimming/python/higgsToInvisibleOutputModuleAODSIM_cfi.py deleted file mode 100644 index 01c5e880f7aa9..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToInvisibleOutputModuleAODSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToInvisible_EventContent_cff import * -higgsToInvisibleOutputModuleAODSIM = cms.OutputModule("PoolOutputModule", - higgsToInvisibleEventSelection, - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('higgsToInvisibleAODSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('hToInvis_AODSIM.root') -) - - diff --git a/HiggsAnalysis/Skimming/python/higgsToInvisibleOutputModuleRECOSIM_cfi.py b/HiggsAnalysis/Skimming/python/higgsToInvisibleOutputModuleRECOSIM_cfi.py deleted file mode 100644 index 0310a165770f3..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToInvisibleOutputModuleRECOSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToInvisible_EventContent_cff import * -higgsToInvisibleOutputModuleRECOSIM = cms.OutputModule("PoolOutputModule", - RECOSIMEventContent, - higgsToInvisibleEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('higgsToInvisibleRECOSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('hToInvis_RECOSIM.root') -) - - diff --git a/HiggsAnalysis/Skimming/python/higgsToInvisible_AODSIM_cff.py b/HiggsAnalysis/Skimming/python/higgsToInvisible_AODSIM_cff.py deleted file mode 100644 index b7a258db15948..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToInvisible_AODSIM_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToInvisible_EventContent_cff import * -higgsToInvisibleEventContentAODSIM = cms.PSet( - outputCommands = cms.untracked.vstring() -) -higgsToInvisibleEventContentAODSIM.outputCommands.extend(AODSIMEventContent.outputCommands) -higgsToInvisibleEventContentAODSIM.outputCommands.extend(higgsToInvisibleEventContent.outputCommands) - diff --git a/HiggsAnalysis/Skimming/python/higgsToInvisible_EventContent_cff.py b/HiggsAnalysis/Skimming/python/higgsToInvisible_EventContent_cff.py deleted file mode 100644 index 8dbadc83cc1ff..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToInvisible_EventContent_cff.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Can insert block to customize what goes inside root file on top of AOD/RECOSIM -higgsToInvisibleEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -higgsToInvisibleEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('HToInvisFilterPath') - ) -) - diff --git a/HiggsAnalysis/Skimming/python/higgsToInvisible_HLTPaths_cfi.py b/HiggsAnalysis/Skimming/python/higgsToInvisible_HLTPaths_cfi.py deleted file mode 100644 index 42b21a45337d0..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToInvisible_HLTPaths_cfi.py +++ /dev/null @@ -1,7 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -higgsToInvisibleHLTFilter = copy.deepcopy(hltHighLevel) -higgsToInvisibleHLTFilter.HLTPaths = ['HLT_DoubleFwdJet40_MET60'] - diff --git a/HiggsAnalysis/Skimming/python/higgsToInvisible_OutputModule_cff.py b/HiggsAnalysis/Skimming/python/higgsToInvisible_OutputModule_cff.py deleted file mode 100644 index 51162a5fc56f4..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToInvisible_OutputModule_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsToInvisibleOutputModuleAODSIM_cfi import * -from HiggsAnalysis.Skimming.higgsToInvisibleOutputModuleRECOSIM_cfi import * - diff --git a/HiggsAnalysis/Skimming/python/higgsToInvisible_RECOSIM_cff.py b/HiggsAnalysis/Skimming/python/higgsToInvisible_RECOSIM_cff.py deleted file mode 100644 index 35c604a241a89..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToInvisible_RECOSIM_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToInvisible_EventContent_cff import * -higgsToInvisibleEventContentRECOSIM = cms.PSet( - outputCommands = cms.untracked.vstring() -) -higgsToInvisibleEventContentRECOSIM.outputCommands.extend(RECOSIMEventContent.outputCommands) -higgsToInvisibleEventContentRECOSIM.outputCommands.extend(higgsToInvisibleEventContent.outputCommands) - diff --git a/HiggsAnalysis/Skimming/python/higgsToInvisible_Sequences_cff.py b/HiggsAnalysis/Skimming/python/higgsToInvisible_Sequences_cff.py deleted file mode 100644 index b0debe941da19..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToInvisible_Sequences_cff.py +++ /dev/null @@ -1,9 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsToInvisible_HLTPaths_cfi import * -higgsToInvisibleTrigReport = cms.EDAnalyzer("HLTrigReport", - HLTriggerResults = cms.InputTag("TriggerResults") -) - -higgsToInvisibleSequence = cms.Sequence(higgsToInvisibleTrigReport+higgsToInvisibleHLTFilter) - diff --git a/HiggsAnalysis/Skimming/python/higgsToInvisible_SkimPaths_cff.py b/HiggsAnalysis/Skimming/python/higgsToInvisible_SkimPaths_cff.py deleted file mode 100644 index b953d5f604351..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToInvisible_SkimPaths_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsToInvisible_Sequences_cff import * -HToInvisFilterPath = cms.Path(higgsToInvisibleSequence) - diff --git a/HiggsAnalysis/Skimming/python/higgsToTauTauLeptonTauOutputModuleAODSIM_cfi.py b/HiggsAnalysis/Skimming/python/higgsToTauTauLeptonTauOutputModuleAODSIM_cfi.py deleted file mode 100644 index 8592b778cac34..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToTauTauLeptonTauOutputModuleAODSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsToTauTau_LeptonTau_EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToTauTau_LeptonTau_EventContent_AODSIM_cff import * -higgsToTauTauLeptonTauOutputModuleAODSIM = cms.OutputModule("PoolOutputModule", - higgsToTauTauLeptonTauEventSelection, - higgsToTauTauLeptonTauEventContentAODSIM, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('higgsToTauTauLeptonTauAODSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('higgsToTauTauLeptonTauAODSIM.root') -) - - diff --git a/HiggsAnalysis/Skimming/python/higgsToTauTauLeptonTauOutputModuleRECOSIM_cfi.py b/HiggsAnalysis/Skimming/python/higgsToTauTauLeptonTauOutputModuleRECOSIM_cfi.py deleted file mode 100644 index 923bb7b03b108..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToTauTauLeptonTauOutputModuleRECOSIM_cfi.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsToTauTau_LeptonTau_EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToTauTau_LeptonTau_EventContent_AODSIM_cff import * -from HiggsAnalysis.Skimming.higgsToTauTau_LeptonTau_EventContent_RECOSIM_cff import * -higgsToTauTauLeptonTauOutputModuleRECOSIM = cms.OutputModule("PoolOutputModule", - higgsToTauTauLeptonTauEventSelection, - higgsToTauTauLeptonTauEventContentRECOSIM, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('higgsToTauTauLeptonTauRECOSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('higgsToTauTauLeptonTauRECOSIM.root') -) - - diff --git a/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_EventContent_AODSIM_cff.py b/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_EventContent_AODSIM_cff.py deleted file mode 100644 index f1031cea1170d..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_EventContent_AODSIM_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToTauTau_LeptonTau_EventContent_cff import * -higgsToTauTauLeptonTauEventContentAODSIM = cms.PSet( - outputCommands = cms.untracked.vstring() -) -higgsToTauTauLeptonTauEventContentAODSIM.outputCommands.extend(AODSIMEventContent.outputCommands) -higgsToTauTauLeptonTauEventContentAODSIM.outputCommands.extend(higgsToTauTauLeptonTauEventContentAODSIM.outputCommands) - diff --git a/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_EventContent_RECOSIM_cff.py b/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_EventContent_RECOSIM_cff.py deleted file mode 100644 index 4ed1c2799f819..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_EventContent_RECOSIM_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToTauTau_LeptonTau_EventContent_cff import * -higgsToTauTauLeptonTauEventContentRECOSIM = cms.PSet( - outputCommands = cms.untracked.vstring() -) -higgsToTauTauLeptonTauEventContentRECOSIM.outputCommands.extend(RECOSIMEventContent.outputCommands) -higgsToTauTauLeptonTauEventContentRECOSIM.outputCommands.extend(higgsToTauTauLeptonTauEventContentRECOSIM.outputCommands) - diff --git a/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_EventContent_cff.py b/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_EventContent_cff.py deleted file mode 100644 index 2422a73c1b9e0..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_EventContent_cff.py +++ /dev/null @@ -1,11 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -higgsToTauTauLeptonTauEventContent = cms.PSet( - outputCommands = cms.untracked.vstring('keep *') -) -higgsToTauTauLeptonTauEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('higgsToTauTauLeptonTauPath') - ) -) - diff --git a/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_HLTPaths_cfi.py b/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_HLTPaths_cfi.py deleted file mode 100644 index 2064f2788f5a9..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_HLTPaths_cfi.py +++ /dev/null @@ -1,7 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -higgsToTauTauLeptonTauHLTFilter = copy.deepcopy(hltHighLevel) -higgsToTauTauLeptonTauHLTFilter.HLTPaths = ['HLT_IsoEle15_L1I', 'HLT_IsoEle12_IsoTau_Trk3', 'HLT_IsoMu11', 'HLT_IsoMu14_IsoTau_Trk3'] - diff --git a/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_OutputModule_cff.py b/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_OutputModule_cff.py deleted file mode 100644 index f1e77c04d4e00..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_OutputModule_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsToTauTauLeptonTauOutputModuleAODSIM_cfi import * -from HiggsAnalysis.Skimming.higgsToTauTauLeptonTauOutputModuleRECOSIM_cfi import * - diff --git a/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_Sequences_cff.py b/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_Sequences_cff.py deleted file mode 100644 index 3caeab4539332..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_Sequences_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsToTauTau_LeptonTau_HLTPaths_cfi import * -higgsToTauTauLeptonTauSequence = cms.Sequence(higgsToTauTauLeptonTauHLTFilter) - diff --git a/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_SkimPaths_cff.py b/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_SkimPaths_cff.py deleted file mode 100644 index fae454485d67d..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToTauTau_LeptonTau_SkimPaths_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsToTauTau_LeptonTau_Sequences_cff import * -higgsToTauTauLeptonTauPath = cms.Path(higgsToTauTauLeptonTauSequence) - diff --git a/HiggsAnalysis/Skimming/python/higgsToWW2LeptonsOutputModuleAODSIM_cfi.py b/HiggsAnalysis/Skimming/python/higgsToWW2LeptonsOutputModuleAODSIM_cfi.py deleted file mode 100644 index 1f27ec7c750c0..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToWW2LeptonsOutputModuleAODSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToWW2Leptons_EventContent_cff import * -higgsToWW2LeptonsOutputModuleAODSIM = cms.OutputModule("PoolOutputModule", - AODSIMEventContent, - higgsToWW2LeptonsEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('higgsToWW2LeptonsAODSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('hww2l_AODSIM.root') -) - - diff --git a/HiggsAnalysis/Skimming/python/higgsToWW2LeptonsOutputModuleRECOSIM_cfi.py b/HiggsAnalysis/Skimming/python/higgsToWW2LeptonsOutputModuleRECOSIM_cfi.py deleted file mode 100644 index d4b02f9bda10e..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToWW2LeptonsOutputModuleRECOSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToWW2Leptons_EventContent_cff import * -higgsToWW2LeptonsOutputModuleRECOSIM = cms.OutputModule("PoolOutputModule", - RECOSIMEventContent, - higgsToWW2LeptonsEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('higgsToWW2LeptonsRECOSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('hww2l_RECOSIM.root') -) - - diff --git a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_AODSIM_cff.py b/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_AODSIM_cff.py deleted file mode 100644 index 2c560ba6fd7fc..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_AODSIM_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToWW2Leptons_EventContent_cff import * -higgsToWW2LeptonsEventContentAODSIM = cms.PSet( - outputCommands = cms.untracked.vstring() -) -higgsToWW2LeptonsEventContentAODSIM.outputCommands.extend(AODSIMEventContent.outputCommands) -higgsToWW2LeptonsEventContentAODSIM.outputCommands.extend(higgsToWW2LeptonsEventContent.outputCommands) - diff --git a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_EventContent_cff.py b/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_EventContent_cff.py deleted file mode 100644 index 72e64c924b959..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_EventContent_cff.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Can insert block to customize what goes inside root file on top of AOD/RECO -higgsToWW2LeptonsEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -higgsToWW2LeptonsEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('HWWFilterPath') - ) -) - diff --git a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_Filter_cfi.py b/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_Filter_cfi.py deleted file mode 100644 index 13187b9e562c1..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_Filter_cfi.py +++ /dev/null @@ -1,13 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -higgsToWW2LeptonsFilter = cms.EDFilter("HiggsToWW2LeptonsSkim", - ElectronCollectionLabel = cms.InputTag("pixelMatchGsfElectrons"), - RecoTrackLabel = cms.InputTag("recoTracks"), - SingleTrackPtMin = cms.double(20.0), - etaMin = cms.double(-2.4), - GlobalMuonCollectionLabel = cms.InputTag("globalMuons"), - DiTrackPtMin = cms.double(10.0), - etaMax = cms.double(2.4) -) - - diff --git a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_HLTPaths_cfi.py b/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_HLTPaths_cfi.py deleted file mode 100644 index 652f4cf340ffe..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_HLTPaths_cfi.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -higgsToWW2LeptonsHLTFilter = copy.deepcopy(hltHighLevel) -higgsToWW2LeptonsHLTFilter.HLTPaths = ['HLT_IsoMu11', 'HLT_Mu15_L1Mu7', 'HLT_IsoEle15_L1I', 'HLT_IsoEle18_L1R', 'HLT_DoubleMu3', - 'HLT_DoubleIsoEle10_L1I', 'HLT_DoubleIsoEle12_L1R', 'HLT_IsoEle8_IsoMu7', 'HLT_IsoEle10_Mu10_L1R'] - diff --git a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_OutputModule_cff.py b/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_OutputModule_cff.py deleted file mode 100644 index 10304265f5af4..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_OutputModule_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsToWW2LeptonsOutputModuleAODSIM_cfi import * -from HiggsAnalysis.Skimming.higgsToWW2LeptonsOutputModuleRECOSIM_cfi import * - diff --git a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_RECOSIM_cff.py b/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_RECOSIM_cff.py deleted file mode 100644 index 5ae14873a061f..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_RECOSIM_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToWW2Leptons_EventContent_cff import * -higgsToWW2LeptonsEventContentRECOSIM = cms.PSet( - outputCommands = cms.untracked.vstring() -) -higgsToWW2LeptonsEventContentRECOSIM.outputCommands.extend(RECOSIMEventContent.outputCommands) -higgsToWW2LeptonsEventContentRECOSIM.outputCommands.extend(higgsToWW2LeptonsEventContent.outputCommands) - diff --git a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_Sequences_cff.py b/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_Sequences_cff.py deleted file mode 100644 index 05a5480322bc3..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_Sequences_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsToWW2Leptons_HLTPaths_cfi import * -from HiggsAnalysis.Skimming.higgsToWW2Leptons_Filter_cfi import * -higgsToWWTrigReport = cms.EDAnalyzer("HLTrigReport", - HLTriggerResults = cms.InputTag("TriggerResults") -) - -higgsToWW2LeptonsSequence = cms.Sequence(higgsToWWTrigReport+higgsToWW2LeptonsHLTFilter+higgsToWW2LeptonsFilter) - diff --git a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_SkimPaths_cff.py b/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_SkimPaths_cff.py deleted file mode 100644 index 12abc034c5b89..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToWW2Leptons_SkimPaths_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsToWW2Leptons_Sequences_cff import * -HWWFilterPath = cms.Path(higgsToWW2LeptonsSequence) - diff --git a/HiggsAnalysis/Skimming/python/higgsToZZ4LeptonsOutputModuleAODSIM_cfi.py b/HiggsAnalysis/Skimming/python/higgsToZZ4LeptonsOutputModuleAODSIM_cfi.py deleted file mode 100644 index 798fea02c475b..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToZZ4LeptonsOutputModuleAODSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToZZ4Leptons_EventContent_cff import * -higgsToZZ4LeptonsOutputModuleAODSIM = cms.OutputModule("PoolOutputModule", - higgsToZZ4LeptonsEventSelection, - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('higgsToZZ4LeptonsAODSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('hzz4l_AODSIM.root') -) - - diff --git a/HiggsAnalysis/Skimming/python/higgsToZZ4LeptonsOutputModuleRECOSIM_cfi.py b/HiggsAnalysis/Skimming/python/higgsToZZ4LeptonsOutputModuleRECOSIM_cfi.py deleted file mode 100644 index b334b7e5ddb62..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToZZ4LeptonsOutputModuleRECOSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToZZ4Leptons_EventContent_cff import * -higgsToZZ4LeptonsOutputModuleRECOSIM = cms.OutputModule("PoolOutputModule", - RECOSIMEventContent, - higgsToZZ4LeptonsEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('higgsToZZ4LeptonsRECOSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('hzz4l_RECOSIM.root') -) - - diff --git a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_AODSIM_cff.py b/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_AODSIM_cff.py deleted file mode 100644 index 4b19e8cdfe6fe..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_AODSIM_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToZZ4Leptons_EventContent_cff import * -higgsToZZ4LeptonsEventContentAODSIM = cms.PSet( - outputCommands = cms.untracked.vstring() -) -higgsToZZ4LeptonsEventContentAODSIM.outputCommands.extend(AODSIMEventContent.outputCommands) -higgsToZZ4LeptonsEventContentAODSIM.outputCommands.extend(higgsToZZ4LeptonsEventContent.outputCommands) - diff --git a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_EventContent_cff.py b/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_EventContent_cff.py deleted file mode 100644 index af2e45b354ac9..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_EventContent_cff.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Can insert block to customize what goes inside root file on top of AOD/RECO -higgsToZZ4LeptonsEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -higgsToZZ4LeptonsEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('HZZFilterPath') - ) -) - diff --git a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_Filter_cfi.py b/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_Filter_cfi.py deleted file mode 100644 index e4286ec1b17da..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_Filter_cfi.py +++ /dev/null @@ -1,20 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Entries for HZZ skim -# -# Dominique Fortin - UC Riverside -# -higgsToZZ4LeptonsFilter = cms.EDFilter("HiggsToZZ4LeptonsSkim", - electronMinimumEt = cms.double(5.0), - DebugHiggsToZZ4LeptonsSkim = cms.bool(False), - ElectronCollectionLabel = cms.InputTag("pixelMatchGsfElectrons"), - # Minimum number of identified leptons above pt threshold - nLeptonMinimum = cms.int32(3), - GlobalMuonCollectionLabel = cms.InputTag("globalMuons"), - # Collection to be accessed - RecoTrackLabel = cms.InputTag("recoTracks"), - # Pt threshold for leptons - muonMinimumPt = cms.double(5.0) -) - - diff --git a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_HLTPaths_cfi.py b/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_HLTPaths_cfi.py deleted file mode 100644 index d83c92c86a7de..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_HLTPaths_cfi.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -higgsToZZ4LeptonsHLTFilter = copy.deepcopy(hltHighLevel) -higgsToZZ4LeptonsHLTFilter.HLTPaths = ['HLT_IsoMu11', 'HLT_Mu15_L1Mu7', 'HLT_DoubleMu3', 'HLT_IsoEle15_L1I', 'HLT_IsoEle18_L1R', - 'HLT_DoubleIsoEle10_L1I', 'HLT_DoubleIsoEle12_L1R'] - diff --git a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_OutputModule_cff.py b/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_OutputModule_cff.py deleted file mode 100644 index b6a2b2215ec3f..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_OutputModule_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsToZZ4LeptonsOutputModuleAODSIM_cfi import * -from HiggsAnalysis.Skimming.higgsToZZ4LeptonsOutputModuleRECOSIM_cfi import * - diff --git a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_RECOSIM_cff.py b/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_RECOSIM_cff.py deleted file mode 100644 index 81c589e4b1499..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_RECOSIM_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.higgsToZZ4Leptons_EventContent_cff import * -higgsToZZ4LeptonsEventContentRECOSIM = cms.PSet( - outputCommands = cms.untracked.vstring() -) -higgsToZZ4LeptonsEventContentRECOSIM.outputCommands.extend(RECOSIMEventContent.outputCommands) -higgsToZZ4LeptonsEventContentRECOSIM.outputCommands.extend(higgsToZZ4LeptonsEventContent.outputCommands) - diff --git a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_Sequences_cff.py b/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_Sequences_cff.py deleted file mode 100644 index 4ac86902900c4..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_Sequences_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsToZZ4Leptons_HLTPaths_cfi import * -from HiggsAnalysis.Skimming.higgsToZZ4Leptons_Filter_cfi import * -higgsToZZ4HLTrigReport = cms.EDFilter("HLTrigReport", - HLTriggerResults = cms.InputTag("TriggerResults") -) - -higgsToZZ4LeptonsSequence = cms.Sequence(higgsToZZ4HLTrigReport+higgsToZZ4LeptonsHLTFilter+higgsToZZ4LeptonsFilter) - diff --git a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_SkimPaths_cff.py b/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_SkimPaths_cff.py deleted file mode 100644 index 7d293119fc877..0000000000000 --- a/HiggsAnalysis/Skimming/python/higgsToZZ4Leptons_SkimPaths_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.higgsToZZ4Leptons_Sequences_cff import * -HZZFilterPath = cms.Path(higgsToZZ4LeptonsSequence) - diff --git a/HiggsAnalysis/Skimming/python/rsTo2GammaOutputModuleAODSIM_cfi.py b/HiggsAnalysis/Skimming/python/rsTo2GammaOutputModuleAODSIM_cfi.py deleted file mode 100644 index 03a280d3e12cd..0000000000000 --- a/HiggsAnalysis/Skimming/python/rsTo2GammaOutputModuleAODSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.rsTo2Gamma_EventContent_cff import * -rsTo2GammaOutputModuleAODSIM = cms.OutputModule("PoolOutputModule", - rsTo2GammaEventSelection, - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('rsTo2GammaAODSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('rsgg_AODSIM.root') -) - - diff --git a/HiggsAnalysis/Skimming/python/rsTo2GammaOutputModuleRECOSIM_cfi.py b/HiggsAnalysis/Skimming/python/rsTo2GammaOutputModuleRECOSIM_cfi.py deleted file mode 100644 index 85732374c1cfb..0000000000000 --- a/HiggsAnalysis/Skimming/python/rsTo2GammaOutputModuleRECOSIM_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.rsTo2Gamma_EventContent_cff import * -rsTo2GammaOutputModuleRECOSIM = cms.OutputModule("PoolOutputModule", - RECOSIMEventContent, - rsTo2GammaEventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('rsTo2Gamma_RECOSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('rsgg_RECOSIM.root') -) - - diff --git a/HiggsAnalysis/Skimming/python/rsTo2Gamma_AODSIM_cff.py b/HiggsAnalysis/Skimming/python/rsTo2Gamma_AODSIM_cff.py deleted file mode 100644 index b9ae6989425d7..0000000000000 --- a/HiggsAnalysis/Skimming/python/rsTo2Gamma_AODSIM_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.rsTo2Gamma_EventContent_cff import * -rsTo2GammaEventContentAODSIM = cms.PSet( - outputCommands = cms.untracked.vstring() -) -rsTo2GammaEventContentAODSIM.outputCommands.extend(AODSIMEventContent.outputCommands) -rsTo2GammaEventContentAODSIM.outputCommands.extend(rsTo2GammaEventContent.outputCommands) - diff --git a/HiggsAnalysis/Skimming/python/rsTo2Gamma_EventContent_cff.py b/HiggsAnalysis/Skimming/python/rsTo2Gamma_EventContent_cff.py deleted file mode 100644 index 12a7d06efbbc7..0000000000000 --- a/HiggsAnalysis/Skimming/python/rsTo2Gamma_EventContent_cff.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Can insert block to customize what goes inside root file on top of AOD/RECO -rsTo2GammaEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -rsTo2GammaEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('RSggFilterPath') - ) -) - diff --git a/HiggsAnalysis/Skimming/python/rsTo2Gamma_Filter_cfi.py b/HiggsAnalysis/Skimming/python/rsTo2Gamma_Filter_cfi.py deleted file mode 100644 index b3949c29e8816..0000000000000 --- a/HiggsAnalysis/Skimming/python/rsTo2Gamma_Filter_cfi.py +++ /dev/null @@ -1,14 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Entries for RS2g skim -rsTo2GammaFilter = cms.EDFilter("HiggsTo2GammaSkim", - # Collection to be accessed - PhotonCollectionLabel = cms.InputTag("correctedPhotons"), - DebugHiggsTo2GammaSkim = cms.bool(False), - # Minimum number of identified photons above pt threshold - nPhotonMinimum = cms.int32(1), - # Pt threshold for photons - photon1MinimumPt = cms.double(50.0) -) - - diff --git a/HiggsAnalysis/Skimming/python/rsTo2Gamma_HLTPaths_cfi.py b/HiggsAnalysis/Skimming/python/rsTo2Gamma_HLTPaths_cfi.py deleted file mode 100644 index fcb9f7346719a..0000000000000 --- a/HiggsAnalysis/Skimming/python/rsTo2Gamma_HLTPaths_cfi.py +++ /dev/null @@ -1,7 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -rsTo2GammaHLTFilter = copy.deepcopy(hltHighLevel) -rsTo2GammaHLTFilter.HLTPaths = ['HLT_EM80', 'HLT_EM200'] - diff --git a/HiggsAnalysis/Skimming/python/rsTo2Gamma_OutputModule_cff.py b/HiggsAnalysis/Skimming/python/rsTo2Gamma_OutputModule_cff.py deleted file mode 100644 index f611064817981..0000000000000 --- a/HiggsAnalysis/Skimming/python/rsTo2Gamma_OutputModule_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.rsTo2GammaOutputModuleAODSIM_cfi import * -from HiggsAnalysis.Skimming.rsTo2GammaOutputModuleRECOSIM_cfi import * - diff --git a/HiggsAnalysis/Skimming/python/rsTo2Gamma_RECOSIM_cff.py b/HiggsAnalysis/Skimming/python/rsTo2Gamma_RECOSIM_cff.py deleted file mode 100644 index 6d7ce7a4b8f3a..0000000000000 --- a/HiggsAnalysis/Skimming/python/rsTo2Gamma_RECOSIM_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from HiggsAnalysis.Skimming.rsTo2Gamma_EventContent_cff import * -rsTo2GammaEventContentRECOSIM = cms.PSet( - outputCommands = cms.untracked.vstring() -) -rsTo2GammaEventContentRECOSIM.outputCommands.extend(RECOSIMEventContent.outputCommands) -rsTo2GammaEventContentRECOSIM.outputCommands.extend(rsTo2GammaEventContent.outputCommands) - diff --git a/HiggsAnalysis/Skimming/python/rsTo2Gamma_Sequences_cff.py b/HiggsAnalysis/Skimming/python/rsTo2Gamma_Sequences_cff.py deleted file mode 100644 index baa0fc29f0504..0000000000000 --- a/HiggsAnalysis/Skimming/python/rsTo2Gamma_Sequences_cff.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.rsTo2Gamma_HLTPaths_cfi import * -from HiggsAnalysis.Skimming.rsTo2Gamma_Filter_cfi import * -rsTo2GammaHLTrigReport = cms.EDAnalyzer("HLTrigReport", - HLTriggerResults = cms.InputTag("TriggerResults") -) - -rsTo2GammaSequence = cms.Sequence(rsTo2GammaHLTrigReport+rsTo2GammaHLTFilter+rsTo2GammaFilter) - diff --git a/HiggsAnalysis/Skimming/python/rsTo2Gamma_SkimPaths_cff.py b/HiggsAnalysis/Skimming/python/rsTo2Gamma_SkimPaths_cff.py deleted file mode 100644 index b019abdd96d8e..0000000000000 --- a/HiggsAnalysis/Skimming/python/rsTo2Gamma_SkimPaths_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from HiggsAnalysis.Skimming.rsTo2Gamma_Sequences_cff import * -RSggFilterPath = cms.Path(rsTo2GammaSequence) - diff --git a/HiggsAnalysis/Skimming/src/HeavyChHiggsToTauNuSkim.cc b/HiggsAnalysis/Skimming/src/HeavyChHiggsToTauNuSkim.cc deleted file mode 100644 index 6eb1f3c0b9fbe..0000000000000 --- a/HiggsAnalysis/Skimming/src/HeavyChHiggsToTauNuSkim.cc +++ /dev/null @@ -1,102 +0,0 @@ -/** \class HeavyChHiggsToTauNuSkim - * - * - * This class is an EDFilter for heavy H+->taunu events - * - * \author Sami Lehti - HIP Helsinki - * - */ - -#include "HiggsAnalysis/Skimming/interface/HeavyChHiggsToTauNuSkim.h" - -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" -#include "DataFormats/BTauReco/interface/JetTag.h" -//#include "DataFormats/BTauReco/interface/JetTagFwd.h" -#include "DataFormats/JetReco/interface/Jet.h" - -#include - -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -using namespace edm; -using namespace std; -using namespace reco; - -HeavyChHiggsToTauNuSkim::HeavyChHiggsToTauNuSkim(const edm::ParameterSet& iConfig) { - // Local Debug flag - debug = iConfig.getParameter("DebugHeavyChHiggsToTauNuSkim"); - - hltTauToken = consumes(iConfig.getParameter("HLTTauCollection")); - jetToken = consumes(iConfig.getParameter("JetTagCollection")); - minNumberOfjets = iConfig.getParameter("minNumberOfJets"); - jetEtMin = iConfig.getParameter("jetEtMin"); - jetEtaMin = iConfig.getParameter("jetEtaMin"); - jetEtaMax = iConfig.getParameter("jetEtaMax"); - minDRFromTau = iConfig.getParameter("minDRFromTau"); - - nEvents = 0; - nSelectedEvents = 0; -} - -HeavyChHiggsToTauNuSkim::~HeavyChHiggsToTauNuSkim() { - edm::LogVerbatim("HeavyChHiggsToTauNuSkim") - << " Number_events_read " << nEvents << " Number_events_kept " << nSelectedEvents << " Efficiency " - << ((double)nSelectedEvents) / ((double)nEvents + 0.01) << std::endl; -} - -bool HeavyChHiggsToTauNuSkim::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) { - nEvents++; - - Handle tauTagL3Handle; - iEvent.getByToken(hltTauToken, tauTagL3Handle); - - if (!tauTagL3Handle.isValid()) - return false; - - Jet theTau; - double maxEt = 0; - if (tauTagL3Handle.isValid()) { - const IsolatedTauTagInfoCollection& L3Taus = *(tauTagL3Handle.product()); - IsolatedTauTagInfoCollection::const_iterator i; - for (i = L3Taus.begin(); i != L3Taus.end(); i++) { - if (i->discriminator() == 0) - continue; - Jet taujet = *(i->jet().get()); - if (taujet.et() > maxEt) { - maxEt = taujet.et(); - theTau = taujet; - } - } - } - - if (maxEt == 0) - return false; - - // jets - - Handle jetHandle; - iEvent.getByToken(jetToken, jetHandle); - - if (!jetHandle.isValid()) - return false; - - bool accepted = false; - - if (jetHandle.isValid()) { - int nJets = 0; - const reco::CaloJetCollection& jets = *(jetHandle.product()); - CaloJetCollection::const_iterator iJet; - for (iJet = jets.begin(); iJet != jets.end(); iJet++) { - if (iJet->et() > jetEtMin && iJet->eta() > jetEtaMin && iJet->eta() < jetEtaMax) { - double DR = deltaR(theTau.eta(), iJet->eta(), theTau.phi(), iJet->phi()); - if (DR > minDRFromTau) - nJets++; - } - } - if (nJets >= minNumberOfjets) { - accepted = true; - nSelectedEvents++; - } - } - return accepted; -} diff --git a/HiggsAnalysis/Skimming/src/HiggsTo2GammaSkim.cc b/HiggsAnalysis/Skimming/src/HiggsTo2GammaSkim.cc deleted file mode 100644 index e12f5447050aa..0000000000000 --- a/HiggsAnalysis/Skimming/src/HiggsTo2GammaSkim.cc +++ /dev/null @@ -1,94 +0,0 @@ - -/* \class HiggsTo2GammaSkim - * - * Consult header file for description - * - * author: Kati Lassila-Perini Helsinki Institute of Physics - * - */ - -// system include files -#include - -// User include files -#include - -// Message logger -#include - -// Photons: -#include - -// C++ -#include -#include - -using namespace std; -using namespace edm; -using namespace reco; - -// Constructor -HiggsTo2GammaSkim::HiggsTo2GammaSkim(const edm::ParameterSet& pset) { - // Local Debug flag - debug = pset.getParameter("DebugHiggsTo2GammaSkim"); - - // Reconstructed objects - thePhotonToken = consumes(pset.getParameter("PhotonCollectionLabel")); - - // Minimum Pt for photons for skimming - photon1MinPt = pset.getParameter("photon1MinimumPt"); - nPhotonMin = pset.getParameter("nPhotonMinimum"); - - nEvents = 0; - nSelectedEvents = 0; -} - -// Destructor -HiggsTo2GammaSkim::~HiggsTo2GammaSkim() { - edm::LogVerbatim("HiggsTo2GammaSkim") << " Number_events_read " << nEvents << " Number_events_kept " - << nSelectedEvents << " Efficiency " - << ((double)nSelectedEvents) / ((double)nEvents + 0.01) << std::endl; -} - -// Filter event -bool HiggsTo2GammaSkim::filter(edm::Event& event, const edm::EventSetup& setup) { - nEvents++; - - using reco::PhotonCollection; - - bool keepEvent = false; - int nPhotons = 0; - - // Look at photons: - - // Get the photon collection from the event - edm::Handle photonHandle; - - event.getByToken(thePhotonToken, photonHandle); - - if (photonHandle.isValid()) { - const reco::PhotonCollection* phoCollection = photonHandle.product(); - - reco::PhotonCollection::const_iterator photons; - - // Loop over photon collections and count how many photons there are, - // and how many are above the thresholds - - // Question: do we need to take the reconstructed primary vertex at this point? - // Here, I assume that the et is taken with respect to the nominal vertex (0,0,0). - for (photons = phoCollection->begin(); photons != phoCollection->end(); ++photons) { - float et_p = photons->et(); - if (et_p > photon1MinPt) - nPhotons++; - } - } - - // Make decision: - if (nPhotons >= nPhotonMin) - keepEvent = true; - - if (keepEvent) - nSelectedEvents++; - - return keepEvent; -} diff --git a/HiggsAnalysis/Skimming/src/HiggsToWW2LeptonsSkim.cc b/HiggsAnalysis/Skimming/src/HiggsToWW2LeptonsSkim.cc deleted file mode 100644 index 87e0a0afa4eca..0000000000000 --- a/HiggsAnalysis/Skimming/src/HiggsToWW2LeptonsSkim.cc +++ /dev/null @@ -1,110 +0,0 @@ -/** \class HiggsToWW2LeptonsSkim - * - * - * This class is an EDFilter for HWW events - * - * - * \author Ezio Torassa - INFN Padova - * - */ - -#include "HiggsAnalysis/Skimming/interface/HiggsToWW2LeptonsSkim.h" - -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" - -// Muons: -#include - -// Electrons -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" - -#include "DataFormats/Candidate/interface/Candidate.h" - -#include - -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -using namespace edm; -using namespace std; -using namespace reco; - -HiggsToWW2LeptonsSkim::HiggsToWW2LeptonsSkim(const edm::ParameterSet& iConfig) : nEvents_(0), nAccepted_(0) { - // Reconstructed objects - theGLBMuonToken = consumes(iConfig.getParameter("GlobalMuonCollectionLabel")); - theGsfEToken = consumes(iConfig.getParameter("ElectronCollectionLabel")); - - singleTrackPtMin_ = iConfig.getParameter("SingleTrackPtMin"); - diTrackPtMin_ = iConfig.getParameter("DiTrackPtMin"); - etaMin_ = iConfig.getParameter("etaMin"); - etaMax_ = iConfig.getParameter("etaMax"); -} - -HiggsToWW2LeptonsSkim::~HiggsToWW2LeptonsSkim() {} - -void HiggsToWW2LeptonsSkim::endJob() { - edm::LogVerbatim("HiggsToWW2LeptonsSkim") - << "Events read " << nEvents_ << " Events accepted " << nAccepted_ << "\nEfficiency " - << ((double)nAccepted_) / ((double)nEvents_) << std::endl; -} - -bool HiggsToWW2LeptonsSkim::filter(edm::Event& event, const edm::EventSetup& iSetup) { - nEvents_++; - bool accepted = false; - bool accepted1 = false; - int nTrackOver2ndCut = 0; - - // Handle tracks; - - using reco::TrackCollection; - - // Get the muon track collection from the event - edm::Handle muTracks; - event.getByToken(theGLBMuonToken, muTracks); - - if (muTracks.isValid()) { - reco::TrackCollection::const_iterator muons; - - // Loop over muon collections and count how many muons there are, - // and how many are above threshold - for (muons = muTracks->begin(); muons != muTracks->end(); ++muons) { - if (muons->eta() > etaMin_ && muons->eta() < etaMax_) { - if (muons->pt() > singleTrackPtMin_) - accepted1 = true; - if (muons->pt() > diTrackPtMin_) - nTrackOver2ndCut++; - } - } - } - - // Now look at electrons: - - // Get the electron track collection from the event - edm::Handle pTracks; - - event.getByToken(theGsfEToken, pTracks); - - if (pTracks.isValid()) { - const reco::GsfElectronCollection* eTracks = pTracks.product(); - - reco::GsfElectronCollection::const_iterator electrons; - - // Loop over electron collections and count how many muons there are, - // and how many are above threshold - for (electrons = eTracks->begin(); electrons != eTracks->end(); ++electrons) { - if (electrons->eta() > etaMin_ && electrons->eta() < etaMax_) { - if (electrons->pt() > singleTrackPtMin_) - accepted1 = true; - if (electrons->pt() > diTrackPtMin_) - nTrackOver2ndCut++; - } - } - } - - if (accepted1 && nTrackOver2ndCut >= 2) - accepted = true; - - if (accepted) - nAccepted_++; - - return accepted; -} diff --git a/HiggsAnalysis/Skimming/src/HiggsToZZ4LeptonsPreFilter.cc b/HiggsAnalysis/Skimming/src/HiggsToZZ4LeptonsPreFilter.cc deleted file mode 100644 index 65b7e19ac1eb0..0000000000000 --- a/HiggsAnalysis/Skimming/src/HiggsToZZ4LeptonsPreFilter.cc +++ /dev/null @@ -1,118 +0,0 @@ - -/* \class HiggsTo4LeptonsPreFilter - * - * Consult header file for description - * - * author: Dominique Fortin - UC Riverside - * - */ - -// system include files -#include - -// User include files -#include - -// Candidate handling -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "DataFormats/Common/interface/AssociationVector.h" - -// C++ -#include -#include - -using namespace std; -using namespace edm; -using namespace reco; - -// Constructor -HiggsToZZ4LeptonsPreFilter::HiggsToZZ4LeptonsPreFilter(const edm::ParameterSet& pset) { - // LeptonFlavour - // 0 = no tau - // 1 = 4 mu - // 2 = 4 e - // 3 = 2e 2mu - - // Local Debug flag - debug = pset.getParameter("DebugHiggsToZZ4LeptonsPreFilter"); - leptonFlavour = pset.getParameter("HiggsToZZ4LeptonsPreFilterLeptonFlavour"); - genToken = consumes(edm::InputTag("genParticles")); - - ikept = 0; - evt = 0; -} - -// Destructor -HiggsToZZ4LeptonsPreFilter::~HiggsToZZ4LeptonsPreFilter() { - std::cout << "number of events processed: " << evt << std::endl; - std::cout << "number of events kept: " << ikept << std::endl; -} - -// Filter event -bool HiggsToZZ4LeptonsPreFilter::filter(edm::Event& event, const edm::EventSetup& setup) { - bool keepEvent = false; - evt++; - - bool FourL = false; - bool FourE = false; - bool FourM = false; - bool TwoETwoM = false; - - // get gen particle candidates - Handle genParticles; - event.getByToken(genToken, genParticles); - - if (genParticles.isValid()) { - int nElec = 0; - int nMuon = 0; - - for (GenParticleCollection::const_iterator mcIter = genParticles->begin(); mcIter != genParticles->end(); - ++mcIter) { - // Muons: - if (mcIter->pdgId() == 13 || mcIter->pdgId() == -13) { - // Mother is a Z - if (mcIter->mother()->pdgId() == 23) { - // In fiducial volume: - if (mcIter->pt() < 3) - continue; - if (mcIter->eta() > -2.4 && mcIter->eta() < 2.4) - nMuon++; - } - } - // Electrons: - if (mcIter->pdgId() == 11 || mcIter->pdgId() == -11) - // Mother is a Z - if (mcIter->mother()->pdgId() == 23) { - // In fiducial volume: - if (mcIter->pt() < 3) - continue; - if (mcIter->eta() > -2.5 && mcIter->eta() < 2.5) - nElec++; - } - } - - if (nElec > 3) - FourE = true; - if (nMuon > 3) - FourM = true; - if (nMuon > 1 && nElec > 1) - TwoETwoM = true; - if (FourE || FourM || TwoETwoM) - FourL = true; - - if (leptonFlavour == 0 && FourL) - keepEvent = true; - if (leptonFlavour == 1 && FourM) - keepEvent = true; - if (leptonFlavour == 2 && FourE) - keepEvent = true; - if (leptonFlavour == 3 && TwoETwoM) - keepEvent = true; - } - - if (keepEvent) - ikept++; - - return keepEvent; -} diff --git a/HiggsAnalysis/Skimming/src/HiggsToZZ4LeptonsSkim.cc b/HiggsAnalysis/Skimming/src/HiggsToZZ4LeptonsSkim.cc deleted file mode 100644 index a0e506016a33e..0000000000000 --- a/HiggsAnalysis/Skimming/src/HiggsToZZ4LeptonsSkim.cc +++ /dev/null @@ -1,115 +0,0 @@ - -/* \class HiggsTo4LeptonsSkim - * - * Consult header file for description - * - * author: Dominique Fortin - UC Riverside - * - */ - -// system include files -#include - -// User include files -#include - -// Muons: -#include - -// Electrons -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" - -// C++ -#include -#include - -using namespace std; -using namespace edm; -using namespace reco; - -// Constructor -HiggsToZZ4LeptonsSkim::HiggsToZZ4LeptonsSkim(const edm::ParameterSet& pset) { - // Local Debug flag - debug = pset.getParameter("DebugHiggsToZZ4LeptonsSkim"); - - // Reconstructed objects - theGLBMuonToken = consumes(pset.getParameter("GlobalMuonCollectionLabel")); - theGsfEToken = consumes(pset.getParameter("ElectronCollectionLabel")); - - // Minimum Pt for leptons for skimming - stiffMinPt = pset.getParameter("stiffMinimumPt"); - softMinPt = pset.getParameter("softMinimumPt"); - nStiffLeptonMin = pset.getParameter("nStiffLeptonMinimum"); - nLeptonMin = pset.getParameter("nLeptonMinimum"); - - nEvents = 0; - nSelectedEvents = 0; -} - -// Destructor -HiggsToZZ4LeptonsSkim::~HiggsToZZ4LeptonsSkim() { - edm::LogVerbatim("HiggsToZZ4LeptonsSkim") - << " Number_events_read " << nEvents << " Number_events_kept " << nSelectedEvents << " Efficiency " - << ((double)nSelectedEvents) / ((double)nEvents + 0.01) << std::endl; -} - -// Filter event -bool HiggsToZZ4LeptonsSkim::filter(edm::Event& event, const edm::EventSetup& setup) { - nEvents++; - - using reco::TrackCollection; - - bool keepEvent = false; - int nStiffLeptons = 0; - int nLeptons = 0; - - // First look at muons: - - // Get the muon track collection from the event - edm::Handle muTracks; - event.getByToken(theGLBMuonToken, muTracks); - - if (muTracks.isValid()) { - reco::TrackCollection::const_iterator muons; - - // Loop over muon collections and count how many muons there are, - // and how many are above threshold - for (muons = muTracks->begin(); muons != muTracks->end(); ++muons) { - if (muons->pt() > stiffMinPt) - nStiffLeptons++; - if (muons->pt() > softMinPt) - nLeptons++; - } - } - - // Now look at electrons: - - // Get the electron track collection from the event - edm::Handle pTracks; - event.getByToken(theGsfEToken, pTracks); - - if (pTracks.isValid()) { - const reco::GsfElectronCollection* eTracks = pTracks.product(); - - reco::GsfElectronCollection::const_iterator electrons; - - // Loop over electron collections and count how many muons there are, - // and how many are above threshold - for (electrons = eTracks->begin(); electrons != eTracks->end(); ++electrons) { - float pt_e = electrons->pt(); - if (pt_e > stiffMinPt) - nStiffLeptons++; - if (pt_e > softMinPt) - nLeptons++; - } - } - - // Make decision: - if (nStiffLeptons >= nStiffLeptonMin && nLeptons >= nLeptonMin) - keepEvent = true; - - if (keepEvent) - nSelectedEvents++; - - return keepEvent; -} diff --git a/HiggsAnalysis/Skimming/src/HiggsToZZ4LeptonsSkimEff.cc b/HiggsAnalysis/Skimming/src/HiggsToZZ4LeptonsSkimEff.cc deleted file mode 100644 index 8cccc06ab88ef..0000000000000 --- a/HiggsAnalysis/Skimming/src/HiggsToZZ4LeptonsSkimEff.cc +++ /dev/null @@ -1,223 +0,0 @@ - -/* \class HiggsTo4LeptonsSkimEff - * - * Consult header file for description - * - * author: Dominique Fortin - UC Riverside - * - */ - -// system include files -#include - -// User include files -#include - -// Muons: -#include - -// Electrons -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" - -// Candidate handling -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "DataFormats/Common/interface/AssociationVector.h" - -// C++ -#include -#include - -using namespace std; -using namespace edm; -using namespace reco; - -// Constructor -HiggsToZZ4LeptonsSkimEff::HiggsToZZ4LeptonsSkimEff(const edm::ParameterSet& pset) { - // Local Debug flag - debug = pset.getParameter("DebugHiggsToZZ4LeptonsSkim"); - - // Reconstructed objects - theGLBMuonToken = consumes(pset.getParameter("GlobalMuonCollectionLabel")); - theGsfEToken = consumes(pset.getParameter("ElectronCollectionLabel")); - genToken = consumes(edm::InputTag("genParticles")); - - // Minimum Pt for leptons for skimming - // Minimum Pt for leptons for skimming - stiffMinPt = pset.getParameter("stiffMinimumPt"); - softMinPt = pset.getParameter("softMinimumPt"); - nStiffLeptonMin = pset.getParameter("nStiffLeptonMinimum"); - nLeptonMin = pset.getParameter("nLeptonMinimum"); - - nEvents = 0; - nSelFourE = nSelFourM = nSelTwoETwoM = nSelFourL = nSelTau = 0; - nFourE = nFourM = nTwoETwoM = nFourL = nTau = 0; -} - -// Destructor -HiggsToZZ4LeptonsSkimEff::~HiggsToZZ4LeptonsSkimEff() { - std::cout << "Number of events read " << nEvents << std::endl; - std::cout << "*** Efficiency for the various subsamples *** " << endl; - - std::cout << "Four leptons: " - << " pres " << nFourL << " kept " << nSelFourL << " eff " - << ((double)nSelFourL) / ((double)nFourL + 0.0001) << std::endl; - std::cout << "Four muons: " - << " pres " << nFourM << " kept " << nSelFourM << " eff " - << ((double)nSelFourM) / ((double)nFourM + 0.0001) << std::endl; - std::cout << "Four elecs: " - << " pres " << nFourE << " kept " << nSelFourE << " eff " - << ((double)nSelFourE) / ((double)nFourE + 0.0001) << std::endl; - std::cout << "2 elec 2 mu: " - << " pres " << nTwoETwoM << " kept " << nSelTwoETwoM << " eff " - << ((double)nSelTwoETwoM) / ((double)nTwoETwoM + 0.0001) << std::endl; - std::cout << "with taus: " - << " pres " << nTau << " kept " << nSelTau << " eff " << ((double)nSelTau) / ((double)nTau + 0.0001) - << std::endl; -} - -// Filter event -void HiggsToZZ4LeptonsSkimEff::analyze(const edm::Event& event, const edm::EventSetup& setup) { - nEvents++; - - using reco::TrackCollection; - - bool keepEvent = false; - - // First, pre-selection: - int nMuon = 0; - int nElec = 0; - int nTau = 0; - - bool isFourE = false; - bool isFourM = false; - bool isTwoETwoM = false; - bool isFourL = false; - bool isTau = false; - - // get gen particle candidates - edm::Handle genCandidates; - event.getByToken(genToken, genCandidates); - - for (CandidateCollection::const_iterator mcIter = genCandidates->begin(); mcIter != genCandidates->end(); ++mcIter) { - // Muons: - if (mcIter->pdgId() == 13 || mcIter->pdgId() == -13) { - // Mother is a Z - if (mcIter->mother()->pdgId() == 23) { - // In fiducial volume: - if (mcIter->eta() > -2.4 && mcIter->eta() < 2.4) - nMuon++; - } - } - // Electrons: - if (mcIter->pdgId() == 11 || mcIter->pdgId() == -11) { - // Mother is a Z - if (mcIter->mother()->pdgId() == 23) { - // In fiducial volume: - if (mcIter->eta() > -2.5 && mcIter->eta() < 2.5) - nElec++; - } - } - // Taus: - if (mcIter->pdgId() == 15 || mcIter->pdgId() == -15) { - // Mother is a Z - if (mcIter->mother()->pdgId() == 23) { - // In fiducial volume: - if (mcIter->eta() > -2.5 && mcIter->eta() < 2.5) - nTau++; - } - } - } - - if (nElec > 3) { - isFourE = true; - nFourE++; - } - if (nMuon > 3) { - isFourM = true; - nFourM++; - } - if (nMuon > 1 && nElec > 1) { - isTwoETwoM = true; - nTwoETwoM++; - } - if (isFourE || isFourM || isTwoETwoM) { - isFourL = true; - nFourL++; - } - if (nTau > 1) { - isTau = true; - nTau++; - } - - if (isFourL) { - keepEvent = true; - } else { - return; - } - - int nStiffLeptons = 0; - int nLeptons = 0; - - // First look at muons: - - // Get the muon track collection from the event - edm::Handle muTracks; - event.getByToken(theGLBMuonToken, muTracks); - - if (muTracks.isValid()) { - reco::TrackCollection::const_iterator muons; - - // Loop over muon collections and count how many muons there are, - // and how many are above threshold - for (muons = muTracks->begin(); muons != muTracks->end(); ++muons) { - float pt_mu = muons->pt(); - if (pt_mu > stiffMinPt) - nStiffLeptons++; - if (pt_mu > softMinPt) - nLeptons++; - } - } - - // Now look at electrons: - - // Get the electron track collection from the event - edm::Handle pTracks; - event.getByToken(theGsfEToken, pTracks); - - if (pTracks.isValid()) { - const reco::GsfElectronCollection* eTracks = pTracks.product(); - - reco::GsfElectronCollection::const_iterator electrons; - - // Loop over electron collections and count how many muons there are, - // and how many are above threshold - for (electrons = eTracks->begin(); electrons != eTracks->end(); ++electrons) { - float pt_e = electrons->pt(); - if (pt_e > stiffMinPt) - nStiffLeptons++; - if (pt_e > softMinPt) - nLeptons++; - } - } - - // Make decision: - if (nStiffLeptons >= nStiffLeptonMin && nLeptons >= nLeptonMin) { - keepEvent = true; - } else { - keepEvent = false; - } - - if (keepEvent) { - if (isFourE) - nSelFourE++; - if (isFourM) - nSelFourM++; - if (isTwoETwoM) - nSelTwoETwoM++; - if (isFourL) - nSelFourL++; - if (isTau) - nSelTau++; - } -} diff --git a/HiggsAnalysis/Skimming/src/SealModule.cc b/HiggsAnalysis/Skimming/src/SealModule.cc deleted file mode 100644 index ebc94ace9f523..0000000000000 --- a/HiggsAnalysis/Skimming/src/SealModule.cc +++ /dev/null @@ -1,15 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include - -DEFINE_FWK_MODULE(HiggsToZZ4LeptonsSkim); -DEFINE_FWK_MODULE(HiggsToZZ4LeptonsSkimEff); -DEFINE_FWK_MODULE(HiggsToZZ4LeptonsPreFilter); -DEFINE_FWK_MODULE(HiggsToWW2LeptonsSkim); -DEFINE_FWK_MODULE(HeavyChHiggsToTauNuSkim); -DEFINE_FWK_MODULE(HiggsTo2GammaSkim); diff --git a/IOMC/EventVertexGenerators/BuildFile.xml b/IOMC/EventVertexGenerators/BuildFile.xml index 0df3f926b33b4..670198eab3bc5 100644 --- a/IOMC/EventVertexGenerators/BuildFile.xml +++ b/IOMC/EventVertexGenerators/BuildFile.xml @@ -1,13 +1,12 @@ + - - diff --git a/IOMC/EventVertexGenerators/test/BuildFile.xml b/IOMC/EventVertexGenerators/test/BuildFile.xml index 376fdd38766e9..72c69ccee7276 100644 --- a/IOMC/EventVertexGenerators/test/BuildFile.xml +++ b/IOMC/EventVertexGenerators/test/BuildFile.xml @@ -1,7 +1,6 @@ - diff --git a/IOMC/Input/test/testWriter_cfg.py b/IOMC/Input/test/testWriter_cfg.py index f9c593b44ad49..7961c875b260b 100644 --- a/IOMC/Input/test/testWriter_cfg.py +++ b/IOMC/Input/test/testWriter_cfg.py @@ -16,8 +16,8 @@ # The following three lines reduce the clutter of repeated printouts # of the same exception message. process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] + + process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(5)) diff --git a/IOMC/RandomEngine/src/RandomNumberGeneratorService.cc b/IOMC/RandomEngine/src/RandomNumberGeneratorService.cc index b9809ff3afad5..49017f5bcead9 100644 --- a/IOMC/RandomEngine/src/RandomNumberGeneratorService.cc +++ b/IOMC/RandomEngine/src/RandomNumberGeneratorService.cc @@ -87,7 +87,7 @@ namespace edm { // The saveFileName must correspond to a file name without any path specification. // Throw if that is not true. - if (!saveFileName_.empty() && (saveFileName_.find("/") != std::string::npos)) { + if (!saveFileName_.empty() && (saveFileName_.find('/') != std::string::npos)) { throw Exception(errors::Configuration) << "The saveFileName parameter must be a simple file name with no path\n" << "specification. In the configuration, it was given the value \"" << saveFileName_ << "\"\n"; @@ -187,6 +187,7 @@ namespace edm { } } activityRegistry.watchPreModuleConstruction(this, &RandomNumberGeneratorService::preModuleConstruction); + activityRegistry.watchPreModuleDestruction(this, &RandomNumberGeneratorService::preModuleDestruction); activityRegistry.watchPreallocate(this, &RandomNumberGeneratorService::preallocate); @@ -382,6 +383,13 @@ namespace edm { } } + void RandomNumberGeneratorService::preModuleDestruction(ModuleDescription const& description) { + std::map::iterator iter = seedsAndNameMap_.find(description.moduleLabel()); + if (iter != seedsAndNameMap_.end()) { + iter->second.setModuleID(SeedsAndName::kInvalid); + } + } + void RandomNumberGeneratorService::preallocate(SystemBounds const& sb) { nStreams_ = sb.maxNumberOfStreams(); assert(nStreams_ >= 1); diff --git a/IOMC/RandomEngine/src/RandomNumberGeneratorService.h b/IOMC/RandomEngine/src/RandomNumberGeneratorService.h index 98de89c375be6..d0778ad3a1657 100644 --- a/IOMC/RandomEngine/src/RandomNumberGeneratorService.h +++ b/IOMC/RandomEngine/src/RandomNumberGeneratorService.h @@ -54,6 +54,9 @@ namespace edm { RandomNumberGeneratorService(ParameterSet const& pset, ActivityRegistry& activityRegistry); ~RandomNumberGeneratorService() override; + RandomNumberGeneratorService(RandomNumberGeneratorService const&) = delete; + RandomNumberGeneratorService const& operator=(RandomNumberGeneratorService const&) = delete; + /// Use the next 2 functions to get the random number engine. /// These are the only functions most modules should call. @@ -81,6 +84,7 @@ namespace edm { static void fillDescriptions(ConfigurationDescriptions& descriptions); void preModuleConstruction(ModuleDescription const& description); + void preModuleDestruction(ModuleDescription const& description); void preallocate(SystemBounds const&); void preBeginLumi(LuminosityBlock const& lumi) override; @@ -160,9 +164,6 @@ namespace edm { unsigned int moduleID_; }; - RandomNumberGeneratorService(RandomNumberGeneratorService const&) = delete; - RandomNumberGeneratorService const& operator=(RandomNumberGeneratorService const&) = delete; - void preModuleStreamCheck(StreamContext const& sc, ModuleCallingContext const& mcc); void postModuleStreamCheck(StreamContext const& sc, ModuleCallingContext const& mcc); @@ -234,8 +235,10 @@ namespace edm { // It is left as max unsigned if the module is never constructed and not in the process class SeedsAndName { public: + static constexpr unsigned int kInvalid = std::numeric_limits::max(); + SeedsAndName(VUint32 const& theSeeds, std::string const& theEngineName) - : seeds_(theSeeds), engineName_(theEngineName), moduleID_(std::numeric_limits::max()) {} + : seeds_(theSeeds), engineName_(theEngineName), moduleID_(kInvalid) {} VUint32 const& seeds() const { return seeds_; } std::string const& engineName() const { return engineName_; } unsigned int moduleID() const { return moduleID_; } diff --git a/IOPool/Input/src/RootEmbeddedFileSequence.cc b/IOPool/Input/src/RootEmbeddedFileSequence.cc index d2b08d26a0a07..d31b7589da78a 100644 --- a/IOPool/Input/src/RootEmbeddedFileSequence.cc +++ b/IOPool/Input/src/RootEmbeddedFileSequence.cc @@ -15,10 +15,18 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "CLHEP/Random/RandFlat.h" #include +#include +#include + +namespace { + std::atomic badFilesSkipped_{0}; + auto operator"" _uz(unsigned long long i) -> std::size_t { return std::size_t{i}; } // uz will be in C++23 +} // namespace namespace edm { class EventPrincipal; @@ -43,7 +51,8 @@ namespace edm { initialNumberOfEventsToSkip_(pset.getUntrackedParameter("skipEvents", 0U)), treeCacheSize_(pset.getUntrackedParameter("cacheSize", roottree::defaultCacheSize)), enablePrefetching_(false), - enforceGUIDInFileName_(pset.getUntrackedParameter("enforceGUIDInFileName", false)) { + enforceGUIDInFileName_(pset.getUntrackedParameter("enforceGUIDInFileName", false)), + maxFileSkips_(pset.getUntrackedParameter("maxFileSkips", std::min(3_uz, numberOfFiles()))) { if (noFiles()) { throw Exception(errors::NoSecondaryFiles) << "RootEmbeddedFileSequence no input files specified for secondary input source.\n"; @@ -92,17 +101,21 @@ namespace edm { unsigned int seed; f.read(reinterpret_cast(&seed), sizeof(seed)); std::default_random_engine dre(seed); - size_t count = numberOfFiles(); - std::uniform_int_distribution distribution(0, count - 1); - while (!rootFile() && count != 0) { - --count; + std::uniform_int_distribution distribution(0, numberOfFiles() - 1); + while (!rootFile() && badFilesSkipped_ < maxFileSkips_) { int offset = distribution(dre); setAtFileSequenceNumber(offset); initFile(input_.skipBadFiles()); + if (not rootFile()) { + ++badFilesSkipped_; + } } } if (rootFile()) { input_.productRegistryUpdate().updateFromInput(rootFile()->productRegistry()->productList()); + } else { + throw Exception(errors::FileOpenError) << "RootEmbeddedFileSequence::RootEmbeddedFileSequence(): " + << " input file retries exhausted.\n"; } } @@ -229,7 +242,7 @@ namespace edm { if (!found) { throw Exception(errors::NotFound) << "RootEmbeddedFileSequence::readOneSpecified(): Secondary Input files" << " do not contain specified event:\n" - << id << "\n"; + << id << " in file id " << idx.fileNameHash() << "\n"; } assert(rootFile()); found = rootFile()->readCurrentEvent(cache); @@ -246,16 +259,36 @@ namespace edm { assert(engine); unsigned int currentSeqNumber = sequenceNumberOfFile(); while (eventsRemainingInFile_ == 0) { - unsigned int newSeqNumber = CLHEP::RandFlat::shootInt(engine, fileCatalogItems().size()); - setAtFileSequenceNumber(newSeqNumber); - if (newSeqNumber != currentSeqNumber) { - initFile(false); - currentSeqNumber = newSeqNumber; + bool opened{false}; + while (!opened && badFilesSkipped_ < maxFileSkips_) { + unsigned int newSeqNumber = CLHEP::RandFlat::shootInt(engine, fileCatalogItems().size()); + setAtFileSequenceNumber(newSeqNumber); + if (newSeqNumber != currentSeqNumber) { + initFile(input_.skipBadFiles()); + currentSeqNumber = newSeqNumber; + } + if (rootFile()) { + eventsRemainingInFile_ = rootFile()->eventTree().entries(); + if (eventsRemainingInFile_ == 0) { + if (!input_.skipBadFiles()) { + throw Exception(errors::NotFound) << "RootEmbeddedFileSequence::readOneRandom(): Secondary Input file " + << fileNames()[0] << " contains no events.\n"; + } + LogWarning("RootEmbeddedFileSequence") << "RootEmbeddedFileSequence::readOneRandom(): Secondary Input file " + << fileNames()[0] << " contains no events and will be skipped.\n"; + ++badFilesSkipped_; + } else { + opened = true; + } + } else { + if (newSeqNumber != currentSeqNumber) { + ++badFilesSkipped_; + } + } } - eventsRemainingInFile_ = rootFile()->eventTree().entries(); - if (eventsRemainingInFile_ == 0) { - throw Exception(errors::NotFound) << "RootEmbeddedFileSequence::readOneRandom(): Secondary Input file " - << fileNames()[0] << " contains no events.\n"; + if (not opened) { + throw Exception(errors::FileOpenError) << "RootEmbeddedFileSequence::readOneRandom(): " + << " input file retries exhausted.\n"; } rootFile()->setAtEventEntry(CLHEP::RandFlat::shootInt(engine, eventsRemainingInFile_) - 1); } @@ -336,6 +369,10 @@ namespace edm { desc.addUntracked("skipEvents", 0U) ->setComment( "Skip the first 'skipEvents' events. Used only if 'sequential' is True and 'sameLumiBlock' is False"); + desc.addUntracked("maxFileSkips") + ->setComment( + "How many files to try if 'sequential' is False and 'skipBadFiles' is True.\n" + "Defaults to 3 (or # of files if smaller)."); desc.addUntracked("cacheSize", roottree::defaultCacheSize) ->setComment("Size of ROOT TTree prefetch cache. Affects performance."); desc.addUntracked("enforceGUIDInFileName", false) diff --git a/IOPool/Input/src/RootEmbeddedFileSequence.h b/IOPool/Input/src/RootEmbeddedFileSequence.h index 2480ef8e19d43..39bb3bb6e8c1b 100644 --- a/IOPool/Input/src/RootEmbeddedFileSequence.h +++ b/IOPool/Input/src/RootEmbeddedFileSequence.h @@ -71,6 +71,7 @@ namespace edm { unsigned int treeCacheSize_; bool enablePrefetching_; bool enforceGUIDInFileName_; + unsigned int maxFileSkips_; }; // class RootEmbeddedFileSequence } // namespace edm #endif diff --git a/IOPool/Input/src/RootFile.cc b/IOPool/Input/src/RootFile.cc index 31959b677cffd..2283f88e8cd68 100644 --- a/IOPool/Input/src/RootFile.cc +++ b/IOPool/Input/src/RootFile.cc @@ -1883,7 +1883,7 @@ namespace edm { std::set readProvenance(unsigned int) const override; private: - void readProvenanceAsync(WaitingTask* task, + void readProvenanceAsync(WaitingTaskHolder task, ModuleCallingContext const* moduleCallingContext, unsigned int transitionIndex, std::atomic*>& writeTo) const override; @@ -1917,7 +1917,7 @@ namespace edm { template void readProvenanceAsyncImpl(R const* iThis, SerialTaskQueueChain& chain, - WaitingTask* task, + WaitingTaskHolder task, unsigned int transitionIndex, std::atomic*>& writeTo, ModuleCallingContext const* iContext, @@ -1930,47 +1930,49 @@ namespace edm { auto serviceToken = ServiceRegistry::instance().presentToken(); - chain.push([holder = std::move(taskHolder), - pWriteTo, - iThis, - transitionIndex, - iContext, - pre, - post, - serviceToken]() mutable { - if (nullptr == pWriteTo->load()) { - ServiceRegistry::Operate operate(serviceToken); - std::unique_ptr> prov; - try { - if (pre) { - pre->emit(*(iContext->getStreamContext()), *iContext); + chain.push( + *taskHolder.group(), + [holder = std::move(taskHolder), + pWriteTo, + iThis, + transitionIndex, + iContext, + pre, + post, + serviceToken]() mutable { + if (nullptr == pWriteTo->load()) { + ServiceRegistry::Operate operate(serviceToken); + std::unique_ptr> prov; + try { + if (pre) { + pre->emit(*(iContext->getStreamContext()), *iContext); + } + prov = std::make_unique>(iThis->readProvenance(transitionIndex)); + if (post) { + post->emit(*(iContext->getStreamContext()), *iContext); + } + + } catch (...) { + if (post) { + post->emit(*(iContext->getStreamContext()), *iContext); + } + + holder.doneWaiting(std::current_exception()); + return; + } + const std::set* expected = nullptr; + + if (pWriteTo->compare_exchange_strong(expected, prov.get())) { + prov.release(); + } } - prov = std::make_unique>(iThis->readProvenance(transitionIndex)); - if (post) { - post->emit(*(iContext->getStreamContext()), *iContext); - } - - } catch (...) { - if (post) { - post->emit(*(iContext->getStreamContext()), *iContext); - } - - holder.doneWaiting(std::current_exception()); - return; - } - const std::set* expected = nullptr; - - if (pWriteTo->compare_exchange_strong(expected, prov.get())) { - prov.release(); - } - } - holder.doneWaiting(std::exception_ptr()); - }); + holder.doneWaiting(std::exception_ptr()); + }); } } } // namespace - void ReducedProvenanceReader::readProvenanceAsync(WaitingTask* task, + void ReducedProvenanceReader::readProvenanceAsync(WaitingTaskHolder task, ModuleCallingContext const* moduleCallingContext, unsigned int transitionIndex, std::atomic*>& writeTo) const { @@ -2021,7 +2023,7 @@ namespace edm { std::set readProvenance(unsigned int transitionIndex) const override; private: - void readProvenanceAsync(WaitingTask* task, + void readProvenanceAsync(WaitingTaskHolder task, ModuleCallingContext const* moduleCallingContext, unsigned int transitionIndex, std::atomic*>& writeTo) const override; @@ -2044,7 +2046,7 @@ namespace edm { mutex_(SharedResourcesRegistry::instance()->createAcquirerForSourceDelayedReader().second), acquirer_(SharedResourcesRegistry::instance()->createAcquirerForSourceDelayedReader().first) {} - void FullProvenanceReader::readProvenanceAsync(WaitingTask* task, + void FullProvenanceReader::readProvenanceAsync(WaitingTaskHolder task, ModuleCallingContext const* moduleCallingContext, unsigned int transitionIndex, std::atomic*>& writeTo) const { @@ -2087,7 +2089,7 @@ namespace edm { std::set readProvenance(unsigned int transitionIndex) const override; private: - void readProvenanceAsync(WaitingTask* task, + void readProvenanceAsync(WaitingTaskHolder task, ModuleCallingContext const* moduleCallingContext, unsigned int transitionIndex, std::atomic*>& writeTo) const override; @@ -2114,7 +2116,7 @@ namespace edm { mutex_(SharedResourcesRegistry::instance()->createAcquirerForSourceDelayedReader().second), acquirer_(SharedResourcesRegistry::instance()->createAcquirerForSourceDelayedReader().first) {} - void OldProvenanceReader::readProvenanceAsync(WaitingTask* task, + void OldProvenanceReader::readProvenanceAsync(WaitingTaskHolder task, ModuleCallingContext const* moduleCallingContext, unsigned int transitionIndex, std::atomic*>& writeTo) const { @@ -2156,7 +2158,7 @@ namespace edm { private: std::set readProvenance(unsigned int) const override; - void readProvenanceAsync(WaitingTask* task, + void readProvenanceAsync(WaitingTaskHolder task, ModuleCallingContext const* moduleCallingContext, unsigned int transitionIndex, std::atomic*>& writeTo) const override; @@ -2168,7 +2170,7 @@ namespace edm { // Not providing parentage!!! return std::set{}; } - void DummyProvenanceReader::readProvenanceAsync(WaitingTask* task, + void DummyProvenanceReader::readProvenanceAsync(WaitingTaskHolder task, ModuleCallingContext const* moduleCallingContext, unsigned int transitionIndex, std::atomic*>& writeTo) const { diff --git a/IOPool/Input/src/RootInputFileSequence.cc b/IOPool/Input/src/RootInputFileSequence.cc index 1b1c24042345d..cdde0c54cd4d2 100644 --- a/IOPool/Input/src/RootInputFileSequence.cc +++ b/IOPool/Input/src/RootInputFileSequence.cc @@ -253,10 +253,10 @@ namespace edm { if (filePtr) { size_t currentIndexIntoFile = fileIter_ - fileIterBegin_; rootFile_ = makeRootFile(filePtr); + assert(rootFile_); if (input) { rootFile_->setSignals(&(input->preEventReadFromSourceSignal_), &(input->postEventReadFromSourceSignal_)); } - assert(rootFile_); fileIterLastOpened_ = fileIter_; setIndexIntoFile(currentIndexIntoFile); rootFile_->reportOpened(inputTypeName); diff --git a/IOPool/Input/src/RootInputFileSequence.h b/IOPool/Input/src/RootInputFileSequence.h index 905f2af1a41de..ded82ffec8964 100644 --- a/IOPool/Input/src/RootInputFileSequence.h +++ b/IOPool/Input/src/RootInputFileSequence.h @@ -3,7 +3,10 @@ /*---------------------------------------------------------------------- -RootInputFileSequence: This is an InputSource. initTheFile tries to open a file using a list of PFN names constructed from multiple data catalogs in site-local-config.xml. These are accessed via FileCatalogItem iterator fileIter_. +RootInputFileSequence: This is an InputSource. initTheFile tries to open +a file using a list of PFN names constructed from multiple data catalogs +in site-local-config.xml. These are accessed via FileCatalogItem iterator +fileIter_. ----------------------------------------------------------------------*/ diff --git a/IOPool/Input/src/RootPrimaryFileSequence.cc b/IOPool/Input/src/RootPrimaryFileSequence.cc index de0e09b95ede4..a08b15cb4b7cf 100644 --- a/IOPool/Input/src/RootPrimaryFileSequence.cc +++ b/IOPool/Input/src/RootPrimaryFileSequence.cc @@ -80,7 +80,9 @@ namespace edm { } } else { if (!nextFile()) { - assert(0); + // handle case with last file bad and + // skipBadFiles true + return std::unique_ptr(); } } if (!rootFile()) { @@ -144,13 +146,21 @@ namespace edm { } bool RootPrimaryFileSequence::nextFile() { - if (!noMoreFiles()) - setAtNextFile(); - if (noMoreFiles()) { - return false; - } + do { + if (!noMoreFiles()) + setAtNextFile(); + if (noMoreFiles()) { + return false; + } - initFile(input_.skipBadFiles()); + initFile(input_.skipBadFiles()); + if (rootFile()) { + break; + } + // If we are not skipping bad files and the file + // open failed, then initFile should have thrown + assert(input_.skipBadFiles()); + } while (true); if (not rootFile()) { return false; diff --git a/IOPool/Input/test/PoolEmptyTest_cfg.py b/IOPool/Input/test/PoolEmptyTest_cfg.py index 02d38ab8094ac..a0f813d7402df 100644 --- a/IOPool/Input/test/PoolEmptyTest_cfg.py +++ b/IOPool/Input/test/PoolEmptyTest_cfg.py @@ -1,5 +1,3 @@ -# The following comments couldn't be translated into the new config version: - # Configuration file for PoolInputTest import FWCore.ParameterSet.Config as cms @@ -7,18 +5,20 @@ process = cms.Process("WRITEEMPTY") process.load("FWCore.Framework.test.cmsExceptionsFatal_cff") -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(0) -) process.Thing = cms.EDProducer("ThingProducer") process.output = cms.OutputModule("PoolOutputModule", fileName = cms.untracked.string('PoolEmptyTest.root') ) -process.source = cms.Source("EmptySource") +# Select lumis that we know are not in the input file so +# that the output file is empty (contains no Runs, Lumis, +# or Events, but it does have metadata) +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring('file:PoolInputTest.root'), + lumisToProcess = cms.untracked.VLuminosityBlockRange('1:1') +) process.p = cms.Path(process.Thing) process.ep = cms.EndPath(process.output) - diff --git a/IOPool/Input/test/PoolInputTest_skipBadFiles_cfg.py b/IOPool/Input/test/PoolInputTest_skipBadFiles_cfg.py new file mode 100644 index 0000000000000..8d31140aa8912 --- /dev/null +++ b/IOPool/Input/test/PoolInputTest_skipBadFiles_cfg.py @@ -0,0 +1,35 @@ +# Test the skipBadFiles option of PoolSource +import FWCore.ParameterSet.Config as cms + +process = cms.Process("TESTRECO") +process.load("FWCore.Framework.test.cmsExceptionsFatal_cff") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(-1) +) + +process.intProducer = cms.EDProducer("IntProducer", ivalue = cms.int32(3)) + +process.a1 = cms.EDAnalyzer("TestFindProduct", + inputTags = cms.untracked.VInputTag( cms.InputTag("intProducer") ), + expectedSum = cms.untracked.int32(54) +) + +process.source = cms.Source("PoolSource", + duplicateCheckMode = cms.untracked.string("noDuplicateCheck"), + skipBadFiles = cms.untracked.bool(True), + skipEvents = cms.untracked.uint32(15), #skips all events in first file + fileNames = cms.untracked.vstring('file:PoolInputTest.root', + 'file:this_file_doesnt_exist.root', + 'file:this_file_doesnt_exist.root', + 'file:PoolInputTest.root', + 'file:this_file_doesnt_exist.root', + 'file:this_file_doesnt_exist.root', + 'file:PoolInputTest.root', + 'file:this_file_doesnt_exist.root', + 'file:this_file_doesnt_exist.root') +) + +process.p = cms.Path(process.intProducer * process.a1) + + diff --git a/IOPool/Input/test/TestPoolInput.sh b/IOPool/Input/test/TestPoolInput.sh index 63c141e580bb8..a3d1bb2a0c5a4 100755 --- a/IOPool/Input/test/TestPoolInput.sh +++ b/IOPool/Input/test/TestPoolInput.sh @@ -23,6 +23,7 @@ cmsRun --parameter-set ${LOCAL_TEST_DIR}/PoolInputTest_cfg.py || die 'Failure us cmsRun ${LOCAL_TEST_DIR}/PoolInputTest_noDelay_cfg.py >& ${LOCAL_TMP_DIR}/PoolInputTest_noDelay_cfg.txt || die 'Failure using PoolInputTest_noDelay_cfg.py' $? grep 'event delayed read from source' ${LOCAL_TMP_DIR}/PoolInputTest_noDelay_cfg.txt && die 'Failure in PoolInputTest_noDelay_cfg.py, found delay reads from source' 1 cmsRun --parameter-set ${LOCAL_TEST_DIR}/PoolInputTest_skip_with_failure_cfg.py || die 'Failure using PoolInputTest_skip_with_failure_cfg.py' $? +cmsRun --parameter-set ${LOCAL_TEST_DIR}/PoolInputTest_skipBadFiles_cfg.py || die 'Failure using PoolInputTest_skipBadFiles_cfg.py ' $? cmsRun ${LOCAL_TEST_DIR}/PrePool2FileInputTest_cfg.py || die 'Failure using PrePool2FileInputTest_cfg.py' $? cmsRun ${LOCAL_TEST_DIR}/Pool2FileInputTest_cfg.py || die 'Failure using Pool2FileInputTest_cfg.py' $? diff --git a/IOPool/Output/interface/PoolOutputModule.h b/IOPool/Output/interface/PoolOutputModule.h index 3fda9aff33816..21f02a3d3362a 100644 --- a/IOPool/Output/interface/PoolOutputModule.h +++ b/IOPool/Output/interface/PoolOutputModule.h @@ -45,20 +45,22 @@ namespace edm { PoolOutputModule& operator=(PoolOutputModule const&) = delete; // Disallow copying and moving std::string const& fileName() const { return fileName_; } std::string const& logicalFileName() const { return logicalFileName_; } - int const& compressionLevel() const { return compressionLevel_; } + int compressionLevel() const { return compressionLevel_; } std::string const& compressionAlgorithm() const { return compressionAlgorithm_; } - int const& basketSize() const { return basketSize_; } + int basketSize() const { return basketSize_; } + int eventAuxiliaryBasketSize() const { return eventAuxBasketSize_; } int eventAutoFlushSize() const { return eventAutoFlushSize_; } - int const& splitLevel() const { return splitLevel_; } + int splitLevel() const { return splitLevel_; } std::string const& basketOrder() const { return basketOrder_; } - int const& treeMaxVirtualSize() const { return treeMaxVirtualSize_; } - bool const& overrideInputFileSplitLevels() const { return overrideInputFileSplitLevels_; } + int treeMaxVirtualSize() const { return treeMaxVirtualSize_; } + bool overrideInputFileSplitLevels() const { return overrideInputFileSplitLevels_; } + bool compactEventAuxiliary() const { return compactEventAuxiliary_; } DropMetaData const& dropMetaData() const { return dropMetaData_; } std::string const& catalog() const { return catalog_; } std::string const& moduleLabel() const { return moduleLabel_; } - unsigned int const& maxFileSize() const { return maxFileSize_; } - int const& inputFileCount() const { return inputFileCount_; } - int const& whyNotFastClonable() const { return whyNotFastClonable_; } + unsigned int maxFileSize() const { return maxFileSize_; } + int inputFileCount() const { return inputFileCount_; } + int whyNotFastClonable() const { return whyNotFastClonable_; } std::string const& currentFileName() const; @@ -143,7 +145,7 @@ namespace edm { virtual void doExtrasAfterCloseFile(); private: - void preActionBeforeRunEventAsync(WaitingTask* iTask, + void preActionBeforeRunEventAsync(WaitingTaskHolder iTask, ModuleCallingContext const& iModuleCallingContext, Principal const& iPrincipal) const override; @@ -176,6 +178,7 @@ namespace edm { void writeBranchIDListRegistry(); void writeThinnedAssociationsHelper(); void writeProductDependencies(); + void writeEventAuxiliary(); void finishEndFile(); void fillSelectedItemList(BranchType branchtype, TTree* theInputTree); @@ -192,6 +195,7 @@ namespace edm { int const compressionLevel_; std::string const compressionAlgorithm_; int const basketSize_; + int const eventAuxBasketSize_; int const eventAutoFlushSize_; int const splitLevel_; std::string basketOrder_; @@ -206,6 +210,7 @@ namespace edm { BranchChildren branchChildren_; std::vector producedBranches_; bool overrideInputFileSplitLevels_; + bool compactEventAuxiliary_; edm::propagate_const> rootOutputFile_; std::string statusFileName_; std::vector processesWithSelectedMergeableRunProducts_; diff --git a/IOPool/Output/src/PoolOutputModule.cc b/IOPool/Output/src/PoolOutputModule.cc index 44c7cbfc504fe..389e460dd2e1c 100644 --- a/IOPool/Output/src/PoolOutputModule.cc +++ b/IOPool/Output/src/PoolOutputModule.cc @@ -46,6 +46,7 @@ namespace edm { compressionLevel_(pset.getUntrackedParameter("compressionLevel")), compressionAlgorithm_(pset.getUntrackedParameter("compressionAlgorithm")), basketSize_(pset.getUntrackedParameter("basketSize")), + eventAuxBasketSize_(pset.getUntrackedParameter("eventAuxiliaryBasketSize")), eventAutoFlushSize_(pset.getUntrackedParameter("eventAutoFlushCompressedSize")), splitLevel_(std::min(pset.getUntrackedParameter("splitLevel") + 1, 99)), basketOrder_(pset.getUntrackedParameter("sortBaskets")), @@ -60,6 +61,7 @@ namespace edm { branchParents_(), branchChildren_(), overrideInputFileSplitLevels_(pset.getUntrackedParameter("overrideInputFileSplitLevels")), + compactEventAuxiliary_(pset.getUntrackedParameter("compactEventAuxiliary")), rootOutputFile_(), statusFileName_() { if (pset.getUntrackedParameter("writeStatusFile")) { @@ -178,16 +180,18 @@ namespace edm { OutputItemList& outputItemList = selectedOutputItemList_[branchType]; AuxItem& auxItem = auxItems_[branchType]; + auto basketSize = (InEvent == branchType) ? eventAuxBasketSize_ : basketSize_; + // Fill AuxItem if (theInputTree != nullptr && !overrideInputFileSplitLevels_) { TBranch* auxBranch = theInputTree->GetBranch(BranchTypeToAuxiliaryBranchName(branchType).c_str()); if (auxBranch) { auxItem.basketSize_ = auxBranch->GetBasketSize(); } else { - auxItem.basketSize_ = basketSize_; + auxItem.basketSize_ = basketSize; } } else { - auxItem.basketSize_ = basketSize_; + auxItem.basketSize_ = basketSize; } // Fill outputItemList with an entry for each branch. @@ -287,6 +291,7 @@ namespace edm { void PoolOutputModule::writeRun(RunForOutput const& r) { rootOutputFile_->writeRun(r); } void PoolOutputModule::reallyCloseFile() { + writeEventAuxiliary(); fillDependencyGraph(); branchParents_.clear(); startEndFile(); @@ -323,6 +328,7 @@ namespace edm { void PoolOutputModule::writeBranchIDListRegistry() { rootOutputFile_->writeBranchIDListRegistry(); } void PoolOutputModule::writeThinnedAssociationsHelper() { rootOutputFile_->writeThinnedAssociationsHelper(); } void PoolOutputModule::writeProductDependencies() { rootOutputFile_->writeProductDependencies(); } + void PoolOutputModule::writeEventAuxiliary() { rootOutputFile_->writeEventAuxiliary(); } void PoolOutputModule::finishEndFile() { rootOutputFile_->finishEndFile(); rootOutputFile_ = nullptr; @@ -392,7 +398,7 @@ namespace edm { } } - void PoolOutputModule::preActionBeforeRunEventAsync(WaitingTask* iTask, + void PoolOutputModule::preActionBeforeRunEventAsync(WaitingTaskHolder iTask, ModuleCallingContext const& iModuleCallingContext, Principal const& iPrincipal) const { if (DropAll != dropMetaData_) { @@ -438,6 +444,8 @@ namespace edm { desc.addUntracked("compressionAlgorithm", "ZLIB") ->setComment("Algorithm used to compress data in the ROOT output file, allowed values are ZLIB and LZMA"); desc.addUntracked("basketSize", 16384)->setComment("Default ROOT basket size in output file."); + desc.addUntracked("eventAuxiliaryBasketSize", 16384) + ->setComment("Default ROOT basket size in output file for EventAuxiliary branch."); desc.addUntracked("eventAutoFlushCompressedSize", 20 * 1024 * 1024) ->setComment( "Set ROOT auto flush stored data size (in bytes) for event TTree. The value sets how large the compressed " @@ -455,6 +463,11 @@ namespace edm { ->setComment( "True: Allow fast copying, if possible.\n" "False: Disable fast copying."); + desc.addUntracked("compactEventAuxiliary", false) + ->setComment( + "False: Write EventAuxiliary as we go like any other event metadata branch.\n" + "True: Optimize the file layout be deferring writing the EventAuxiliary branch until the output file is " + "closed."); desc.addUntracked("overrideInputFileSplitLevels", false) ->setComment( "False: Use branch split levels and basket sizes from input file, if possible.\n" diff --git a/IOPool/Output/src/RootOutputFile.cc b/IOPool/Output/src/RootOutputFile.cc index 284437150a343..fa9e1e7911f2c 100644 --- a/IOPool/Output/src/RootOutputFile.cc +++ b/IOPool/Output/src/RootOutputFile.cc @@ -129,8 +129,16 @@ namespace edm { if (-1 != om->eventAutoFlushSize()) { eventTree_.setAutoFlush(-1 * om->eventAutoFlushSize()); } - eventTree_.addAuxiliary( - BranchTypeToAuxiliaryBranchName(InEvent), pEventAux_, om_->auxItems()[InEvent].basketSize_); + if (om_->compactEventAuxiliary()) { + eventTree_.addAuxiliary( + BranchTypeToAuxiliaryBranchName(InEvent), pEventAux_, om_->auxItems()[InEvent].basketSize_, false); + eventTree_.tree()->SetBranchStatus(BranchTypeToAuxiliaryBranchName(InEvent).c_str(), + false); // see writeEventAuxiliary + } else { + eventTree_.addAuxiliary( + BranchTypeToAuxiliaryBranchName(InEvent), pEventAux_, om_->auxItems()[InEvent].basketSize_); + } + eventTree_.addAuxiliary(BranchTypeToProductProvenanceBranchName(InEvent), pEventEntryInfoVector(), om_->auxItems()[InEvent].basketSize_); @@ -384,10 +392,25 @@ namespace edm { if (fb.tree() != nullptr && whyNotFastClonable_ != FileBlock::CanFastClone) { maybeIssueWarning(whyNotFastClonable_, fb.fileName(), file_); } + + if (om_->compactEventAuxiliary() && + (whyNotFastClonable_ & (FileBlock::EventsOrLumisSelectedByID | FileBlock::InitialEventsSkipped | + FileBlock::EventSelectionUsed)) == 0) { + long long int reserve = remainingEvents; + if (fb.tree() != nullptr) { + reserve = reserve > 0 ? std::min(fb.tree()->GetEntries(), reserve) : fb.tree()->GetEntries(); + } + if (reserve > 0) { + compactEventAuxiliary_.reserve(compactEventAuxiliary_.size() + reserve); + } + } } void RootOutputFile::respondToCloseInputFile(FileBlock const&) { - eventTree_.setEntries(); + // We can't do setEntries() on the event tree if the EventAuxiliary branch is empty & disabled + if (not om_->compactEventAuxiliary()) { + eventTree_.setEntries(); + } lumiTree_.setEntries(); runTree_.setEntries(); } @@ -441,6 +464,10 @@ namespace edm { reducedPHID, pEventAux_->run(), pEventAux_->luminosityBlock(), pEventAux_->event(), eventEntryNumber_); ++eventEntryNumber_; + if (om_->compactEventAuxiliary()) { + compactEventAuxiliary_.push_back(*pEventAux_); + } + // Report event written Service reportSvc; reportSvc->eventWrittenToFile(reportToken_, e.id().run(), e.id().event()); @@ -616,6 +643,43 @@ namespace edm { b->Fill(); } + // For duplicate removal and to determine if fast cloning is possible, the input + // module by default reads the entire EventAuxiliary branch when it opens the + // input files. If EventAuxiliary is written in the usual way, this results + // in many small reads scattered throughout the file, which can have very poor + // performance characteristics on some filesystems. As a workaround, we save + // EventAuxiliary and write it at the end of the file. + + void RootOutputFile::writeEventAuxiliary() { + constexpr std::size_t maxEaBasketSize = 4 * 1024 * 1024; + + if (om_->compactEventAuxiliary()) { + auto tree = eventTree_.tree(); + auto const& bname = BranchTypeToAuxiliaryBranchName(InEvent).c_str(); + + tree->SetBranchStatus(bname, true); + auto basketsize = + std::min(maxEaBasketSize, + compactEventAuxiliary_.size() * (sizeof(EventAuxiliary) + 26)); // 26 is an empirical fudge factor + tree->SetBasketSize(bname, basketsize); + auto b = tree->GetBranch(bname); + + assert(b); + + LogDebug("writeEventAuxiliary") << "EventAuxiliary ratio extras/GUIDs/all = " + << compactEventAuxiliary_.extrasSize() << "/" + << compactEventAuxiliary_.guidsSize() << "/" << compactEventAuxiliary_.size(); + + for (auto const& aux : compactEventAuxiliary_) { + const auto ea = aux.eventAuxiliary(); + pEventAux_ = &ea; + // Fill EventAuxiliary branch + b->Fill(); + } + eventTree_.setEntries(); + } + } + void RootOutputFile::finishEndFile() { metaDataTree_->SetEntries(-1); RootOutputTree::writeTTree(metaDataTree_); diff --git a/IOPool/Output/src/RootOutputFile.h b/IOPool/Output/src/RootOutputFile.h index 0e912bd5e45fa..8a9a8565862c4 100644 --- a/IOPool/Output/src/RootOutputFile.h +++ b/IOPool/Output/src/RootOutputFile.h @@ -31,6 +31,7 @@ #include "DataFormats/Provenance/interface/StoredMergeableRunProductMetadata.h" #include "DataFormats/Provenance/interface/RunAuxiliary.h" #include "DataFormats/Provenance/interface/SelectedProducts.h" +#include "DataFormats/Provenance/interface/CompactEventAuxiliaryVector.h" #include "IOPool/Output/interface/PoolOutputModule.h" #include "IOPool/Output/src/RootOutputTree.h" @@ -67,6 +68,7 @@ namespace edm { void writeBranchIDListRegistry(); void writeThinnedAssociationsHelper(); void writeProductDependencies(); + void writeEventAuxiliary(); void finishEndFile(); void beginInputFile(FileBlock const& fb, int remainingEvents); @@ -143,6 +145,7 @@ namespace edm { std::map parentageIDs_; std::set branchesWithStoredHistory_; edm::propagate_const wrapperBaseTClass_; + CompactEventAuxiliaryVector compactEventAuxiliary_; }; } // namespace edm diff --git a/IOPool/SecondaryInput/test/SecondaryInputTestSkip_cfg.py b/IOPool/SecondaryInput/test/SecondaryInputTestSkip_cfg.py new file mode 100644 index 0000000000000..e2beb6bf63e08 --- /dev/null +++ b/IOPool/SecondaryInput/test/SecondaryInputTestSkip_cfg.py @@ -0,0 +1,42 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("PROD") +process.load("FWCore.Framework.test.cmsExceptionsFatal_cff") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(75) +) +process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService", + Thing = cms.PSet( + initialSeed = cms.untracked.uint32(12345) + ) +) + +process.source = cms.Source("PoolSource", + skipBadFiles = cms.untracked.bool(True), + fileNames = cms.untracked.vstring( + 'file:SecondaryInputTest.root', + 'file:SecondaryInputTest.root', + 'file:SecondaryInputTest.root' + ) +) + +process.Thing = cms.EDProducer("SecondaryProducer", + input = cms.SecSource("EmbeddedRootSource", + skipBadFiles = cms.untracked.bool(True), + maxFileSkips = cms.untracked.uint32(100), + fileNames = cms.untracked.vstring( + 'file:SecondaryInputTest2.root', + 'file:missing.root', + 'file:SecondaryInputTest2.root' + ) + ) +) + +process.Analysis = cms.EDAnalyzer("EventContentAnalyzer", + verbose = cms.untracked.bool(False) +) + +process.p = cms.Path(process.Thing*process.Analysis) + + diff --git a/IORawData/SiPixelInputSources/test/slinktoraw_cfg.py b/IORawData/SiPixelInputSources/test/slinktoraw_cfg.py index 4ec66d8183984..87122461d6206 100644 --- a/IORawData/SiPixelInputSources/test/slinktoraw_cfg.py +++ b/IORawData/SiPixelInputSources/test/slinktoraw_cfg.py @@ -7,10 +7,13 @@ input = cms.untracked.int32(10000) ) process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('DEBUG') - ), - destinations = cms.untracked.vstring('cout') + ) ) process.out = cms.OutputModule("PoolOutputModule", diff --git a/JetMETCorrections/JetCorrector/plugins/BuildFile.xml b/JetMETCorrections/JetCorrector/plugins/BuildFile.xml new file mode 100644 index 0000000000000..7837b77b09baa --- /dev/null +++ b/JetMETCorrections/JetCorrector/plugins/BuildFile.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/CommonTools/RecoAlgos/plugins/JetTracksAssociationToTrackRefs.cc b/JetMETCorrections/JetCorrector/plugins/JetTracksAssociationToTrackRefs.cc similarity index 100% rename from CommonTools/RecoAlgos/plugins/JetTracksAssociationToTrackRefs.cc rename to JetMETCorrections/JetCorrector/plugins/JetTracksAssociationToTrackRefs.cc diff --git a/JetMETCorrections/Type1MET/BuildFile.xml b/JetMETCorrections/Type1MET/BuildFile.xml index 50661ba8759b3..4e6f225ba46f2 100644 --- a/JetMETCorrections/Type1MET/BuildFile.xml +++ b/JetMETCorrections/Type1MET/BuildFile.xml @@ -7,6 +7,7 @@ + diff --git a/JetMETCorrections/Type1MET/plugins/MultShiftMETcorrInputProducer.cc b/JetMETCorrections/Type1MET/plugins/MultShiftMETcorrInputProducer.cc index 0577b76f367e9..21d588ac4a7ca 100644 --- a/JetMETCorrections/Type1MET/plugins/MultShiftMETcorrInputProducer.cc +++ b/JetMETCorrections/Type1MET/plugins/MultShiftMETcorrInputProducer.cc @@ -6,6 +6,7 @@ #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" #include "DataFormats/Common/interface/View.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include diff --git a/JetMETCorrections/Type1MET/plugins/Type1PFMET.cc b/JetMETCorrections/Type1MET/plugins/Type1PFMET.cc new file mode 100644 index 0000000000000..3b30ef2543be7 --- /dev/null +++ b/JetMETCorrections/Type1MET/plugins/Type1PFMET.cc @@ -0,0 +1,157 @@ +/**\class Type1PFMET +\brief Computes the Type-1 corrections for pfMET. A specific version of the Type1MET class from the JetMETCorrections/Type1MET package. + +\todo Unify with the Type1MET class from the JetMETCorrections/Type1MET package + +\author Michal Bluj +\date February 2009 +*/ + +#include "DataFormats/METReco/interface/MET.h" +#include "DataFormats/METReco/interface/CaloMET.h" +#include "DataFormats/JetReco/interface/PFJet.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/JetReco/interface/PFJetCollection.h" +#include "DataFormats/METReco/interface/METFwd.h" +#include "JetMETCorrections/JetCorrector/interface/JetCorrector.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +#include +#include + +class Type1PFMET : public edm::EDProducer { +public: + explicit Type1PFMET(const edm::ParameterSet&); + explicit Type1PFMET(); + ~Type1PFMET() override; + void produce(edm::Event&, const edm::EventSetup&) override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + edm::EDGetTokenT tokenUncorMet; + edm::EDGetTokenT tokenUncorJets; + edm::EDGetTokenT correctorToken; + double jetPTthreshold; + double jetEMfracLimit; + double jetMufracLimit; + void run(const reco::METCollection& uncorMET, + const reco::JetCorrector& corrector, + const reco::PFJetCollection& uncorJet, + double jetPTthreshold, + double jetEMfracLimit, + double jetMufracLimit, + reco::METCollection* corMET); +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(Type1PFMET); + +void Type1PFMET::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + // pfType1MET + // Type-1 met corrections (AK4PFJets) + // remember about including ES producer definition e.g. JetMETCorrections.Configuration.L2L3Corrections_Summer08Redigi_cff + edm::ParameterSetDescription desc; + desc.add("inputUncorJetsTag", edm::InputTag("ak4PFJets")); + desc.add("jetEMfracLimit", 0.95); // to remove electron which give rise to jets + desc.add("jetMufracLimit", 0.95); // to remove muon which give rise to jets + desc.add("metType", "PFMET"); + desc.add("jetPTthreshold", 20.0); + // pfMET should be not corrected for HF 0.7 + desc.add("inputUncorMetLabel", edm::InputTag("pfMET")); + desc.add("corrector", edm::InputTag("ak4PFL2L3Corrector")); + descriptions.add("pfType1MET", desc); +} + +using namespace reco; + +// PRODUCER CONSTRUCTORS ------------------------------------------ +Type1PFMET::Type1PFMET(const edm::ParameterSet& iConfig) { + tokenUncorMet = consumes(iConfig.getParameter("inputUncorMetLabel")); + tokenUncorJets = consumes(iConfig.getParameter("inputUncorJetsTag")); + correctorToken = consumes(iConfig.getParameter("corrector")); + jetPTthreshold = iConfig.getParameter("jetPTthreshold"); + jetEMfracLimit = iConfig.getParameter("jetEMfracLimit"); + jetMufracLimit = iConfig.getParameter("jetMufracLimit"); + produces(); +} +Type1PFMET::Type1PFMET() {} + +// PRODUCER DESTRUCTORS ------------------------------------------- +Type1PFMET::~Type1PFMET() {} + +// PRODUCER METHODS ----------------------------------------------- +void Type1PFMET::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + using namespace edm; + Handle inputUncorJets; + iEvent.getByToken(tokenUncorJets, inputUncorJets); + Handle corrector; + iEvent.getByToken(correctorToken, corrector); + Handle inputUncorMet; //Define Inputs + iEvent.getByToken(tokenUncorMet, inputUncorMet); //Get Inputs + std::unique_ptr output(new METCollection()); //Create empty output + run(*(inputUncorMet.product()), + *(corrector.product()), + *(inputUncorJets.product()), + jetPTthreshold, + jetEMfracLimit, + jetMufracLimit, + &*output); //Invoke the algorithm + iEvent.put(std::move(output)); //Put output into Event +} + +void Type1PFMET::run(const METCollection& uncorMET, + const reco::JetCorrector& corrector, + const PFJetCollection& uncorJet, + double jetPTthreshold, + double jetEMfracLimit, + double jetMufracLimit, + METCollection* corMET) { + if (!corMET) { + std::cerr << "Type1METAlgo_run-> undefined output MET collection. Stop. " << std::endl; + return; + } + + double DeltaPx = 0.0; + double DeltaPy = 0.0; + double DeltaSumET = 0.0; + // ---------------- Calculate jet corrections, but only for those uncorrected jets + // ---------------- which are above the given threshold. This requires that the + // ---------------- uncorrected jets be matched with the corrected jets. + for (PFJetCollection::const_iterator jet = uncorJet.begin(); jet != uncorJet.end(); ++jet) { + if (jet->pt() > jetPTthreshold) { + double emEFrac = jet->chargedEmEnergyFraction() + jet->neutralEmEnergyFraction(); + double muEFrac = jet->chargedMuEnergyFraction(); + if (emEFrac < jetEMfracLimit && muEFrac < jetMufracLimit) { + double corr = corrector.correction(*jet) - 1.; // correction itself + DeltaPx += jet->px() * corr; + DeltaPy += jet->py() * corr; + DeltaSumET += jet->et() * corr; + } + } + } + //----------------- Calculate and set deltas for new MET correction + CorrMETData delta; + delta.mex = -DeltaPx; //correction to MET (from Jets) is negative, + delta.mey = -DeltaPy; //since MET points in direction opposite of jets + delta.sumet = DeltaSumET; + //----------------- Fill holder with corrected MET (= uncorrected + delta) values + const MET* u = &(uncorMET.front()); + double corrMetPx = u->px() + delta.mex; + double corrMetPy = u->py() + delta.mey; + MET::LorentzVector correctedMET4vector(corrMetPx, corrMetPy, 0., sqrt(corrMetPx * corrMetPx + corrMetPy * corrMetPy)); + //----------------- get previous corrections and push into new corrections + std::vector corrections = u->mEtCorr(); + corrections.push_back(delta); + //----------------- Push onto MET Collection + MET result = MET(u->sumEt() + delta.sumet, corrections, correctedMET4vector, u->vertex(), u->isWeighted()); + corMET->push_back(result); + + return; +} diff --git a/L1Trigger/CSCTriggerPrimitives/interface/CSCBaseboard.h b/L1Trigger/CSCTriggerPrimitives/interface/CSCBaseboard.h index 6aaeef5d2bc2e..678ca2eada614 100644 --- a/L1Trigger/CSCTriggerPrimitives/interface/CSCBaseboard.h +++ b/L1Trigger/CSCTriggerPrimitives/interface/CSCBaseboard.h @@ -9,7 +9,6 @@ #include "DataFormats/L1TMuon/interface/CSCConstants.h" #include "L1Trigger/CSCTriggerPrimitives/interface/CSCPatternBank.h" #include "L1Trigger/CSCTriggerPrimitives/interface/CSCUpgradeMotherboardLUT.h" -#include "L1Trigger/CSCTriggerPrimitives/interface/CSCUpgradeMotherboardLUTGenerator.h" #include "CondFormats/CSCObjects/interface/CSCDBL1TPParameters.h" class CSCBaseboard { diff --git a/L1Trigger/CSCTriggerPrimitives/interface/CSCGEMMotherboard.h b/L1Trigger/CSCTriggerPrimitives/interface/CSCGEMMotherboard.h index 40a3a06ab2643..67beceaddeb5a 100644 --- a/L1Trigger/CSCTriggerPrimitives/interface/CSCGEMMotherboard.h +++ b/L1Trigger/CSCTriggerPrimitives/interface/CSCGEMMotherboard.h @@ -203,8 +203,6 @@ class CSCGEMMotherboard : public CSCUpgradeMotherboard { bool isPadInOverlap(int roll) const; - void setupGeometry(); - /** Chamber id (trigger-type labels). */ unsigned gemId; int maxPads() const; diff --git a/L1Trigger/CSCTriggerPrimitives/interface/CSCUpgradeMotherboard.h b/L1Trigger/CSCTriggerPrimitives/interface/CSCUpgradeMotherboard.h index d1dc5516e6d56..028a4487176c9 100644 --- a/L1Trigger/CSCTriggerPrimitives/interface/CSCUpgradeMotherboard.h +++ b/L1Trigger/CSCTriggerPrimitives/interface/CSCUpgradeMotherboard.h @@ -71,10 +71,6 @@ class CSCUpgradeMotherboard : public CSCMotherboard { /** get CSCPart from HS, station, ring number **/ enum CSCPart getCSCPart(int keystrip) const; - // functions to setup geometry and LUTs - void setupGeometry(); - void debugLUTs(); - // run TMB with GEM pad clusters as input void run(const CSCWireDigiCollection* wiredc, const CSCComparatorDigiCollection* compdc) override; @@ -97,8 +93,6 @@ class CSCUpgradeMotherboard : public CSCMotherboard { maximum match window = 15 */ LCTContainer allLCTs; - std::unique_ptr generator_; - /** "preferential" index array in matching window for cross-BX sorting */ int pref[CSCConstants::MAX_LCT_TBINS]; diff --git a/L1Trigger/CSCTriggerPrimitives/interface/CSCUpgradeMotherboardLUTGenerator.h b/L1Trigger/CSCTriggerPrimitives/interface/CSCUpgradeMotherboardLUTGenerator.h deleted file mode 100644 index 3d9166c419614..0000000000000 --- a/L1Trigger/CSCTriggerPrimitives/interface/CSCUpgradeMotherboardLUTGenerator.h +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef L1Trigger_CSCTriggerPrimitives_CSCUpgradeMotherboardLUTGenerator_h -#define L1Trigger_CSCTriggerPrimitives_CSCUpgradeMotherboardLUTGenerator_h - -#include "DataFormats/MuonDetId/interface/CSCTriggerNumbering.h" -#include "DataFormats/MuonDetId/interface/CSCDetId.h" -#include "Geometry/CSCGeometry/interface/CSCGeometry.h" -#include "Geometry/GEMGeometry/interface/GEMGeometry.h" - -#include - -class CSCUpgradeMotherboardLUTGenerator { -public: - CSCUpgradeMotherboardLUTGenerator() {} - ~CSCUpgradeMotherboardLUTGenerator() {} - - /// set CSC and GEM geometries for the matching needs - void setCSCGeometry(const CSCGeometry* g) { csc_g = g; } - void setGEMGeometry(const GEMGeometry* g) { gem_g = g; } - - /// generate and print LUT - void generateLUTs(unsigned e, unsigned s, unsigned se, unsigned sb, unsigned c) const; - void generateLUTsME11(unsigned e, unsigned se, unsigned sb, unsigned c) const; - void generateLUTsME21(unsigned e, unsigned se, unsigned sb, unsigned c) const; - int assignRoll(const std::vector >&, double eta) const; - -private: - // create LUT: roll->(etaMin,etaMax) - void gemRollToEtaLimitsLUT(const GEMChamber* c, std::vector >&) const; - - // create LUT: WG->(rollMin,rollMax) - void cscWgToRollLUT(const std::vector >&, - const std::vector >&, - std::vector >&) const; - - // create LUT: WG->(etaMin,etaMax) - void cscWgToEtaLimitsLUT(const CSCLayer*, std::vector >&) const; - - // create LUT: HS->pad - void cscHsToGemPadLUT( - const CSCLayer*, const GEMEtaPartition*, int minH, int maxH, std::vector >&) const; - - // create LUT: pad->HS - void gemPadToCscHsLUT(const CSCLayer*, const GEMEtaPartition*, std::vector&) const; - - // create LUT: roll-> center wg - void gemRollToCscWgLUT(const CSCLayer*, const GEMChamber*, std::vector&) const; - - const CSCGeometry* csc_g; - const GEMGeometry* gem_g; -}; - -template -std::ostream& operator<<(std::ostream& os, const std::vector >& v) { - int i = 0; - os << "{" << std::endl; - for (const auto& p : v) { - os << " {" << p.first << ", " << p.second << "}, "; - if (i % 8 == 0) - os << std::endl; - i++; - } - os << "}" << std::endl; - os << std::endl; - - return os; -} - -template -std::ostream& operator<<(std::ostream& os, const std::vector& v) { - int i = 0; - os << "{" << std::endl; - for (const auto& p : v) { - os << " " << p << ","; - if (i % 10 == 0) - os << std::endl; - i++; - } - os << "}" << std::endl; - os << std::endl; - - return os; -} - -#endif diff --git a/L1Trigger/CSCTriggerPrimitives/python/params/clctParams.py b/L1Trigger/CSCTriggerPrimitives/python/params/clctParams.py index 4db809d8f7fe2..454bee88d3402 100644 --- a/L1Trigger/CSCTriggerPrimitives/python/params/clctParams.py +++ b/L1Trigger/CSCTriggerPrimitives/python/params/clctParams.py @@ -15,9 +15,6 @@ # BX to start CLCT finding (poor man's dead-time shortening): clctStartBxShift = cms.int32(0), - - useRun3Patterns = cms.bool(False), - useComparatorCodes = cms.bool(False), ) # Parameters for upgrade CLCT processors diff --git a/L1Trigger/CSCTriggerPrimitives/src/CSCCathodeLCTProcessor.cc b/L1Trigger/CSCTriggerPrimitives/src/CSCCathodeLCTProcessor.cc index 0e76750479ffe..cd73f8d0dea5e 100644 --- a/L1Trigger/CSCTriggerPrimitives/src/CSCCathodeLCTProcessor.cc +++ b/L1Trigger/CSCTriggerPrimitives/src/CSCCathodeLCTProcessor.cc @@ -1400,7 +1400,7 @@ void CSCCathodeLCTProcessor::runCCLUT(CSCCLCTDigi& digi) const { // look-up the unsigned values const unsigned positionCC(lutpos_[pattern]->lookup(comparatorCode)); const unsigned slopeCC(lutslope_[pattern]->lookup(comparatorCode)); - unsigned run2PatternCC(lutpatconv_[pattern]->lookup(comparatorCode)); + const unsigned run2PatternCC(convertSlopeToRun2Pattern(slopeCC)); // if the slope is negative, set bending to 0 const bool slopeCCSign((slopeCC >> 4) & 0x1); @@ -1422,9 +1422,6 @@ void CSCCathodeLCTProcessor::runCCLUT(CSCCLCTDigi& digi) const { digi.setSlope(slopeCCValue); // set the quasi Run-2 pattern - to accommodate integration with EMTF/OMTF - if (run2PatternCC == 0) { - run2PatternCC = convertSlopeToRun2Pattern(slopeCC); - } digi.setPattern(run2PatternCC); // now print out the new CLCT for debugging @@ -1443,7 +1440,7 @@ void CSCCathodeLCTProcessor::runCCLUT(CSCCLCTDigi& digi) const { } unsigned CSCCathodeLCTProcessor::convertSlopeToRun2Pattern(const unsigned slope) const { - const unsigned slopeList[32] = {2, 2, 2, 4, 4, 4, 6, 6, 6, 6, 8, 8, 8, 8, 10, 10, - 10, 10, 9, 9, 9, 9, 7, 7, 7, 7, 5, 5, 5, 3, 3, 3}; + const unsigned slopeList[32] = {10, 10, 8, 8, 8, 8, 6, 6, 6, 6, 4, 4, 4, 2, 2, 2, + 10, 10, 9, 9, 9, 9, 7, 7, 7, 7, 5, 5, 5, 3, 3, 3}; return slopeList[slope]; } diff --git a/L1Trigger/CSCTriggerPrimitives/src/CSCGEMMotherboard.cc b/L1Trigger/CSCTriggerPrimitives/src/CSCGEMMotherboard.cc index b6a9e42d1f584..8eb194e38e681 100644 --- a/L1Trigger/CSCTriggerPrimitives/src/CSCGEMMotherboard.cc +++ b/L1Trigger/CSCTriggerPrimitives/src/CSCGEMMotherboard.cc @@ -145,6 +145,14 @@ CSCCorrelatedLCTDigi CSCGEMMotherboard::constructLCTsGEM(const CSCALCTDigi& alct thisLCT.setGEM1(gem1); thisLCT.setType(CSCCorrelatedLCTDigi::ALCTCLCTGEM); valid = doesWiregroupCrossStrip(keyWG, keyStrip) ? 1 : 0; + if (runCCLUT_) { + thisLCT.setRun3(true); + // 4-bit slope value derived with the CCLUT algorithm + thisLCT.setSlope(clct.getSlope()); + thisLCT.setQuartStrip(clct.getQuartStrip()); + thisLCT.setEightStrip(clct.getEightStrip()); + thisLCT.setRun3Pattern(clct.getRun3Pattern()); + } } else if (alct.isValid() and clct.isValid() and not gem1.isValid() and gem2.isValid()) { pattern = encodePattern(clct.getPattern()); if (runCCLUT_) { @@ -162,6 +170,14 @@ CSCCorrelatedLCTDigi CSCGEMMotherboard::constructLCTsGEM(const CSCALCTDigi& alct thisLCT.setGEM2(gem2.second()); thisLCT.setType(CSCCorrelatedLCTDigi::ALCTCLCT2GEM); valid = doesWiregroupCrossStrip(keyWG, keyStrip) ? 1 : 0; + if (runCCLUT_) { + thisLCT.setRun3(true); + // 4-bit slope value derived with the CCLUT algorithm + thisLCT.setSlope(clct.getSlope()); + thisLCT.setQuartStrip(clct.getQuartStrip()); + thisLCT.setEightStrip(clct.getEightStrip()); + thisLCT.setRun3Pattern(clct.getRun3Pattern()); + } } else if (alct.isValid() and gem2.isValid() and not clct.isValid()) { //in ME11 //ME1b: keyWG >15, @@ -228,6 +244,14 @@ CSCCorrelatedLCTDigi CSCGEMMotherboard::constructLCTsGEM(const CSCALCTDigi& alct thisLCT.setGEM2(gem2.second()); thisLCT.setType(CSCCorrelatedLCTDigi::CLCT2GEM); valid = true; + if (runCCLUT_) { + thisLCT.setRun3(true); + // 4-bit slope value derived with the CCLUT algorithm + thisLCT.setSlope(clct.getSlope()); + thisLCT.setQuartStrip(clct.getQuartStrip()); + thisLCT.setEightStrip(clct.getEightStrip()); + thisLCT.setRun3Pattern(clct.getRun3Pattern()); + } } if (valid == 0) @@ -249,7 +273,6 @@ CSCCorrelatedLCTDigi CSCGEMMotherboard::constructLCTsGEM(const CSCALCTDigi& alct // Not used in Run-2. Will not be assigned in Run-3 thisLCT.setSyncErr(0); thisLCT.setCSCID(theTrigChamber); - thisLCT.setRun3(true); // in Run-3 we plan to denote the presence of exotic signatures in the chamber if (useHighMultiplicityBits_) thisLCT.setHMT(highMultiplicityBits_); @@ -307,11 +330,6 @@ float CSCGEMMotherboard::getPad(const CSCCLCTDigi& clct, enum CSCPart part) cons return 0.5 * (mymap.at(keyStrip).first + mymap.at(keyStrip).second); } -void CSCGEMMotherboard::setupGeometry() { - CSCUpgradeMotherboard::setupGeometry(); - generator_->setGEMGeometry(gem_g); -} - int CSCGEMMotherboard::maxPads() const { return gem_g->superChamber(gemId)->chamber(1)->etaPartition(1)->npads(); } int CSCGEMMotherboard::maxRolls() const { return gem_g->superChamber(gemId)->chamber(1)->nEtaPartitions(); } diff --git a/L1Trigger/CSCTriggerPrimitives/src/CSCGEMMotherboardME11.cc b/L1Trigger/CSCTriggerPrimitives/src/CSCGEMMotherboardME11.cc index ee84c7b869d7c..7d5275100c7df 100644 --- a/L1Trigger/CSCTriggerPrimitives/src/CSCGEMMotherboardME11.cc +++ b/L1Trigger/CSCTriggerPrimitives/src/CSCGEMMotherboardME11.cc @@ -58,8 +58,6 @@ void CSCGEMMotherboardME11::run(const CSCWireDigiCollection* wiredc, const CSCComparatorDigiCollection* compdc, const GEMPadDigiClusterCollection* gemClusters) { CSCGEMMotherboard::clear(); - setupGeometry(); - debugLUTs(); // encode high multiplicity bits unsigned alctBits = alctProc->getHighMultiplictyBits(); diff --git a/L1Trigger/CSCTriggerPrimitives/src/CSCGEMMotherboardME21.cc b/L1Trigger/CSCTriggerPrimitives/src/CSCGEMMotherboardME21.cc index 683183b9b0fa2..8d2e6d114a38f 100644 --- a/L1Trigger/CSCTriggerPrimitives/src/CSCGEMMotherboardME21.cc +++ b/L1Trigger/CSCTriggerPrimitives/src/CSCGEMMotherboardME21.cc @@ -41,8 +41,6 @@ void CSCGEMMotherboardME21::run(const CSCWireDigiCollection* wiredc, const CSCComparatorDigiCollection* compdc, const GEMPadDigiClusterCollection* gemClusters) { CSCGEMMotherboard::clear(); - setupGeometry(); - debugLUTs(); // encode high multiplicity bits unsigned alctBits = alctProc->getHighMultiplictyBits(); diff --git a/L1Trigger/CSCTriggerPrimitives/src/CSCMotherboard.cc b/L1Trigger/CSCTriggerPrimitives/src/CSCMotherboard.cc index f2a8cca1d6c26..305dcf71ea968 100644 --- a/L1Trigger/CSCTriggerPrimitives/src/CSCMotherboard.cc +++ b/L1Trigger/CSCTriggerPrimitives/src/CSCMotherboard.cc @@ -489,9 +489,6 @@ CSCCorrelatedLCTDigi CSCMotherboard::constructLCTs(const CSCALCTDigi& aLCT, int trknmb) const { // CLCT pattern number unsigned int pattern = encodePattern(cLCT.getPattern()); - if (runCCLUT_) { - pattern = cLCT.getSlope(); - } // LCT quality number unsigned int quality; @@ -524,6 +521,11 @@ CSCCorrelatedLCTDigi CSCMotherboard::constructLCTs(const CSCALCTDigi& aLCT, if (runCCLUT_) { thisLCT.setRun3(true); + // 4-bit slope value derived with the CCLUT algorithm + thisLCT.setSlope(cLCT.getSlope()); + thisLCT.setQuartStrip(cLCT.getQuartStrip()); + thisLCT.setEightStrip(cLCT.getEightStrip()); + thisLCT.setRun3Pattern(cLCT.getRun3Pattern()); } // in Run-3 we plan to denote the presence of exotic signatures in the chamber diff --git a/L1Trigger/CSCTriggerPrimitives/src/CSCUpgradeMotherboard.cc b/L1Trigger/CSCTriggerPrimitives/src/CSCUpgradeMotherboard.cc index c0459dbbc326d..b050da3aadfcb 100644 --- a/L1Trigger/CSCTriggerPrimitives/src/CSCUpgradeMotherboard.cc +++ b/L1Trigger/CSCTriggerPrimitives/src/CSCUpgradeMotherboard.cc @@ -27,9 +27,6 @@ CSCUpgradeMotherboard::CSCUpgradeMotherboard(unsigned endcap, theParity = theChamber % 2 == 0 ? Parity::Even : Parity::Odd; - // generate the LUTs - generator_ = std::make_unique(); - // enable the upgrade processors if (runPhase2_ and theRing == 1) { clctProc = std::make_unique(endcap, station, sector, subsector, chamber, conf); @@ -299,11 +296,6 @@ enum CSCPart CSCUpgradeMotherboard::getCSCPart(int keystrip) const { } } -void CSCUpgradeMotherboard::debugLUTs() { - if (debug_luts) - generator_->generateLUTs(theEndcap, theStation, theSector, theSubsector, theTrigChamber); -} - bool CSCUpgradeMotherboard::sortLCTsByQuality(const CSCCorrelatedLCTDigi& lct1, const CSCCorrelatedLCTDigi& lct2) { return lct1.getQuality() > lct2.getQuality(); } @@ -319,8 +311,6 @@ void CSCUpgradeMotherboard::sortLCTs(std::vector& lcts, lcts.erase(lcts.begin() + max_lcts, lcts.end()); } -void CSCUpgradeMotherboard::setupGeometry() { generator_->setCSCGeometry(cscGeometry_); } - void CSCUpgradeMotherboard::setPrefIndex() { pref[0] = match_trig_window_size / 2; for (unsigned int m = 2; m < match_trig_window_size; m += 2) { diff --git a/L1Trigger/CSCTriggerPrimitives/src/CSCUpgradeMotherboardLUTGenerator.cc b/L1Trigger/CSCTriggerPrimitives/src/CSCUpgradeMotherboardLUTGenerator.cc deleted file mode 100644 index b06d2a205c821..0000000000000 --- a/L1Trigger/CSCTriggerPrimitives/src/CSCUpgradeMotherboardLUTGenerator.cc +++ /dev/null @@ -1,298 +0,0 @@ -#include "L1Trigger/CSCTriggerPrimitives/interface/CSCUpgradeMotherboardLUTGenerator.h" -#include "Geometry/CSCGeometry/interface/CSCChamber.h" -#include "Geometry/GEMGeometry/interface/GEMEtaPartitionSpecs.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include - -void CSCUpgradeMotherboardLUTGenerator::generateLUTs( - unsigned theEndcap, unsigned theStation, unsigned theSector, unsigned theSubsector, unsigned theTrigChamber) const { - if (theStation == 1) - generateLUTsME11(theEndcap, theSector, theSubsector, theTrigChamber); - if (theStation == 2) - generateLUTsME21(theEndcap, theSector, theSubsector, theTrigChamber); -} - -void CSCUpgradeMotherboardLUTGenerator::generateLUTsME11(unsigned theEndcap, - unsigned theSector, - unsigned theSubsector, - unsigned theTrigChamber) const { - bool gemGeometryAvailable(false); - if (gem_g != nullptr) { - LogTrace("CSCUpgradeMotherboardLUTGenerator") << "+++ generateLUTsME11() called for ME11 chamber! +++ \n"; - gemGeometryAvailable = true; - } - - // check for GEM geometry - if (not gemGeometryAvailable) { - LogTrace("CSCUpgradeMotherboardLUTGenerator") - << "+++ generateLUTsME11() called for ME11 chamber without valid GEM geometry! +++ \n"; - return; - } - - // CSC trigger geometry - const int chid = CSCTriggerNumbering::chamberFromTriggerLabels(theSector, theSubsector, 1, theTrigChamber); - const CSCDetId me1bId(theEndcap, 1, 1, chid, 0); - const CSCDetId me1aId(theEndcap, 1, 4, chid, 0); - const CSCChamber* cscChamberME1b(csc_g->chamber(me1bId)); - const CSCChamber* cscChamberME1a(csc_g->chamber(me1aId)); - const CSCLayer* keyLayerME1b(cscChamberME1b->layer(3)); - const CSCLayer* keyLayerME1a(cscChamberME1a->layer(3)); - - // GEM trigger geometry - const int region((theEndcap == 1) ? 1 : -1); - const GEMDetId gem_id_l1(region, 1, 1, 1, me1bId.chamber(), 0); - const GEMDetId gem_id_l2(region, 1, 1, 2, me1bId.chamber(), 0); - const GEMChamber* gemChamber_l1(gem_g->chamber(gem_id_l1)); - const GEMChamber* gemChamber_l2(gem_g->chamber(gem_id_l2)); - const GEMEtaPartition* randRoll(gemChamber_l1->etaPartition(4)); - - // LUTs - std::vector > gemRollEtaLimits_l1; - std::vector > gemRollEtaLimits_l2; - std::vector > cscWGToEtaLimits; - std::vector > cscWgToGemRoll_l1; - std::vector > cscWgToGemRoll_l2; - std::vector > cscHsToGemPadME1a; - std::vector > cscHsToGemPadME1b; - std::vector gemPadToCscHsME1a; - std::vector gemPadToCscHsME1b; - std::vector gemRollToCscWg1b; - - gemRollToEtaLimitsLUT(gemChamber_l1, gemRollEtaLimits_l1); - gemRollToEtaLimitsLUT(gemChamber_l2, gemRollEtaLimits_l2); - cscWgToEtaLimitsLUT(keyLayerME1b, cscWGToEtaLimits); - cscWgToRollLUT(cscWGToEtaLimits, gemRollEtaLimits_l1, cscWgToGemRoll_l1); - cscWgToRollLUT(cscWGToEtaLimits, gemRollEtaLimits_l2, cscWgToGemRoll_l2); - cscHsToGemPadLUT(keyLayerME1a, randRoll, 2, 94, cscHsToGemPadME1a); - cscHsToGemPadLUT(keyLayerME1b, randRoll, 4, 124, cscHsToGemPadME1b); - gemPadToCscHsLUT(keyLayerME1a, randRoll, gemPadToCscHsME1a); - gemPadToCscHsLUT(keyLayerME1b, randRoll, gemPadToCscHsME1b); - gemRollToCscWgLUT(keyLayerME1b, gemChamber_l1, gemRollToCscWg1b); - - // print LUTs - std::stringstream os; - os << "ME11 " << me1bId << std::endl; - - os << "GEM L1 roll to eta limits" << std::endl; - os << gemRollEtaLimits_l1; - - os << "GEM L2 roll to eta limits" << std::endl; - os << gemRollEtaLimits_l2; - - os << "ME1b " << me1bId << std::endl; - os << "WG roll to eta limits" << std::endl; - os << cscWGToEtaLimits; - - os << "WG to Roll L1" << std::endl; - os << cscWgToGemRoll_l1; - - os << "WG to Roll L2" << std::endl; - os << cscWgToGemRoll_l2; - - os << "CSC HS to GEM pad LUT in ME1a" << std::endl; - os << cscHsToGemPadME1a; - - os << "CSC HS to GEM pad LUT in ME1b" << std::endl; - os << cscHsToGemPadME1b; - - os << "GEM pad to CSC HS LUT in ME1a" << std::endl; - os << gemPadToCscHsME1a; - - os << "GEM pad to CSC HS LUT in ME1b" << std::endl; - os << gemPadToCscHsME1b; - - os << "GEM roll to CSC WG" << std::endl; - os << gemRollToCscWg1b; - - // print LUTs - LogTrace("CSCUpgradeMotherboardLUTGenerator") << os.str(); -} - -void CSCUpgradeMotherboardLUTGenerator::generateLUTsME21(unsigned theEndcap, - unsigned theSector, - unsigned theSubsector, - unsigned theTrigChamber) const { - bool gemGeometryAvailable(false); - if (gem_g != nullptr) { - LogTrace("CSCUpgradeMotherboardLUTGenerator") << "+++ generateLUTsME11() called for ME21 chamber! +++ \n"; - gemGeometryAvailable = true; - } - - // check for GEM geometry - if (not gemGeometryAvailable) { - LogTrace("CSCUpgradeMotherboardLUTGenerator") - << "+++ generateLUTsME21() called for ME21 chamber without valid GEM geometry! +++ \n"; - return; - } - - // CSC trigger geometry - const int chid = CSCTriggerNumbering::chamberFromTriggerLabels(theSector, theSubsector, 2, theTrigChamber); - const CSCDetId csc_id(theEndcap, 2, 1, chid, 0); - const CSCChamber* cscChamber(csc_g->chamber(csc_id)); - const CSCLayer* keyLayer(cscChamber->layer(3)); - - // GEM trigger geometry - const int region((theEndcap == 1) ? 1 : -1); - const GEMDetId gem_id_l1(region, 1, 2, 1, csc_id.chamber(), 0); - const GEMDetId gem_id_l2(region, 1, 2, 2, csc_id.chamber(), 0); - const GEMChamber* gemChamber_l1(gem_g->chamber(gem_id_l1)); - const GEMChamber* gemChamber_l2(gem_g->chamber(gem_id_l2)); - const GEMEtaPartition* randRoll(gemChamber_l1->etaPartition(4)); - - // LUTs - std::vector > gemRollEtaLimits_l1; - std::vector > gemRollEtaLimits_l2; - std::vector > cscWGToEtaLimits; - std::vector > cscWgToGemRoll_l1; - std::vector > cscWgToGemRoll_l2; - std::vector > cscHsToGemPad; - std::vector gemPadToCscHs; - std::vector gemRollToCscWg; - - gemRollToEtaLimitsLUT(gemChamber_l1, gemRollEtaLimits_l1); - gemRollToEtaLimitsLUT(gemChamber_l2, gemRollEtaLimits_l2); - cscWgToEtaLimitsLUT(keyLayer, cscWGToEtaLimits); - cscWgToRollLUT(cscWGToEtaLimits, gemRollEtaLimits_l1, cscWgToGemRoll_l1); - cscWgToRollLUT(cscWGToEtaLimits, gemRollEtaLimits_l2, cscWgToGemRoll_l2); - cscHsToGemPadLUT(keyLayer, randRoll, 4, 155, cscHsToGemPad); - gemPadToCscHsLUT(keyLayer, randRoll, gemPadToCscHs); - gemRollToCscWgLUT(keyLayer, gemChamber_l1, gemRollToCscWg); - - std::stringstream os; - os << "ME21 " << csc_id << std::endl; - - os << "GEM roll to eta limits L1" << std::endl; - os << gemRollEtaLimits_l1; - - os << "GEM roll to eta limits L2" << std::endl; - os << gemRollEtaLimits_l2; - - os << "WG to eta limits" << std::endl; - os << cscWGToEtaLimits; - - os << "WG to Roll L1" << std::endl; - os << cscWgToGemRoll_l1; - - os << "WG to Roll L2" << std::endl; - os << cscWgToGemRoll_l2; - - os << "CSC HS to GEM pad LUT in ME21" << std::endl; - os << cscHsToGemPad; - - os << "GEM pad to CSC HS LUT in ME21" << std::endl; - os << gemPadToCscHs; - - os << "GEM roll to CSC WG" << std::endl; - os << gemRollToCscWg; - - // print LUTs - LogTrace("CSCUpgradeMotherboardLUTGenerator") << os.str(); -} - -int CSCUpgradeMotherboardLUTGenerator::assignRoll(const std::vector >& lut, - double eta) const { - int result = -99; - int iRoll = 0; - for (const auto& p : lut) { - iRoll++; - const float minEta(p.first); - const float maxEta(p.second); - if (minEta <= std::abs(eta) and std::abs(eta) < maxEta) { - result = iRoll; - break; - } - } - return result; -} - -void CSCUpgradeMotherboardLUTGenerator::gemRollToEtaLimitsLUT(const GEMChamber* gemChamber, - std::vector >& lut) const { - for (const auto& roll : gemChamber->etaPartitions()) { - const float half_striplength(roll->specs()->specificTopology().stripLength() / 2.); - const LocalPoint lp_top(0., half_striplength, 0.); - const LocalPoint lp_bottom(0., -half_striplength, 0.); - const GlobalPoint gp_top(roll->toGlobal(lp_top)); - const GlobalPoint gp_bottom(roll->toGlobal(lp_bottom)); - const double bottom_eta(std::abs(gp_bottom.eta())); - const double top_eta(std::abs(gp_top.eta())); - lut.emplace_back(std::min(bottom_eta, top_eta), std::max(bottom_eta, top_eta)); - } -} - -void CSCUpgradeMotherboardLUTGenerator::cscWgToRollLUT(const std::vector >& inLUT1, - const std::vector >& inLUT2, - std::vector >& outLUT) const { - for (const auto& p : inLUT1) { - double etaMin(p.first); - double etaMax(p.second); - outLUT.emplace_back(assignRoll(inLUT2, etaMin), assignRoll(inLUT2, etaMax)); - } -} - -void CSCUpgradeMotherboardLUTGenerator::cscWgToEtaLimitsLUT(const CSCLayer* keyLayer, - std::vector >& lut) const { - const CSCLayerGeometry* keyLayerGeometry(keyLayer->geometry()); - const int numberOfWG(keyLayerGeometry->numberOfWireGroups()); - for (int i = 0; i < numberOfWG; ++i) { - const float middle_wire(keyLayerGeometry->middleWireOfGroup(i)); - const std::pair wire_ends(keyLayerGeometry->wireTopology()->wireEnds(middle_wire)); - const GlobalPoint gp_top(keyLayer->toGlobal(wire_ends.first)); - const GlobalPoint gp_bottom(keyLayer->toGlobal(wire_ends.second)); - const double bottom_eta(std::abs(gp_bottom.eta())); - const double top_eta(std::abs(gp_top.eta())); - lut.emplace_back(std::min(bottom_eta, top_eta), std::max(bottom_eta, top_eta)); - } -} - -void CSCUpgradeMotherboardLUTGenerator::cscHsToGemPadLUT(const CSCLayer* keyLayer, - const GEMEtaPartition* randRoll, - int minH, - int maxH, - std::vector >& lut) const { - const CSCLayerGeometry* keyLayerGeometry(keyLayer->geometry()); - auto nStrips(keyLayerGeometry->numberOfStrips()); - for (float i = 0; i < nStrips; i = i + 0.5) { - const LocalPoint lpCSC(keyLayerGeometry->topology()->localPosition(i)); - const GlobalPoint gp(keyLayer->toGlobal(lpCSC)); - const LocalPoint lpGEM(randRoll->toLocal(gp)); - const float pad(randRoll->pad(lpGEM)); - lut.emplace_back(std::floor(pad), std::ceil(pad)); - } -} - -void CSCUpgradeMotherboardLUTGenerator::gemPadToCscHsLUT(const CSCLayer* keyLayer, - const GEMEtaPartition* randRoll, - std::vector& lut) const { - const int nGEMPads(randRoll->npads()); - const CSCLayerGeometry* keyLayerGeometry(keyLayer->geometry()); - for (int i = 0; i < nGEMPads; ++i) { - const LocalPoint lpGEM(randRoll->centreOfPad(i)); - const GlobalPoint gp(randRoll->toGlobal(lpGEM)); - const LocalPoint lpCSC(keyLayer->toLocal(gp)); - const float strip(keyLayerGeometry->strip(lpCSC)); - lut.push_back(int(strip * 2)); - } -} - -void CSCUpgradeMotherboardLUTGenerator::gemRollToCscWgLUT(const CSCLayer* keyLayer, - const GEMChamber* gemChamber, - std::vector& lut) const { - const CSCLayerGeometry* keyLayerGeometry(keyLayer->geometry()); - for (const auto& roll : gemChamber->etaPartitions()) { - const float half_striplength(roll->specs()->specificTopology().stripLength() / 2.); - const LocalPoint lp_top(0., half_striplength, 0.); - const LocalPoint lp_bottom(0., -half_striplength, 0.); - const GlobalPoint gp_top(roll->toGlobal(lp_top)); - const GlobalPoint gp_bottom(roll->toGlobal(lp_bottom)); - float x, y, z; - x = (gp_top.x() + gp_bottom.x()) / 2.; - y = (gp_top.y() + gp_bottom.y()) / 2.; - z = (gp_top.z() + gp_bottom.z()) / 2.; - const GlobalPoint gp_ave(x, y, z); - const LocalPoint lp_ave(keyLayer->toLocal(gp_ave)); - const int wire(keyLayerGeometry->nearestWire(lp_ave)); - const int wg(keyLayerGeometry->wireGroup(wire)); - lut.emplace_back(wg); - } -} diff --git a/L1Trigger/CSCTriggerPrimitives/test/BuildFile.xml b/L1Trigger/CSCTriggerPrimitives/test/BuildFile.xml new file mode 100644 index 0000000000000..31bb9be6c7f7c --- /dev/null +++ b/L1Trigger/CSCTriggerPrimitives/test/BuildFile.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/L1Trigger/CSCTriggerPrimitives/test/GEMCSCLUTAnalyzer.cc b/L1Trigger/CSCTriggerPrimitives/test/GEMCSCLUTAnalyzer.cc new file mode 100644 index 0000000000000..1c4a19470c5bc --- /dev/null +++ b/L1Trigger/CSCTriggerPrimitives/test/GEMCSCLUTAnalyzer.cc @@ -0,0 +1,374 @@ +#ifndef L1Trigger_CSCTriggerPrimitives_GEMCSCLUTAnalyzer_h +#define L1Trigger_CSCTriggerPrimitives_GEMCSCLUTAnalyzer_h + +/** \class GEMCSCLUTAnalyzer + * + * Makes the lookup tables for the GEM-CSC integrated local trigger + * in simulation and firmware + * + * authors: Sven Dildick (Rice University) + */ + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/MuonDetId/interface/CSCTriggerNumbering.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" +#include "Geometry/GEMGeometry/interface/GEMGeometry.h" +#include "Geometry/CSCGeometry/interface/CSCGeometry.h" +#include "Geometry/GEMGeometry/interface/GEMEtaPartitionSpecs.h" +#include "Geometry/CommonTopologies/interface/StripTopology.h" + +#include +#include +#include + +class GEMCSCLUTAnalyzer : public edm::one::EDAnalyzer<> { +public: + explicit GEMCSCLUTAnalyzer(const edm::ParameterSet&); + ~GEMCSCLUTAnalyzer() override; + + void analyze(const edm::Event&, const edm::EventSetup&) override; + +private: + /// generate and print LUT + void generateLUTs(const CSCDetId& id) const; + void generateLUTsME11(const CSCDetId& id) const; + void generateLUTsME21(const CSCDetId& id) const; + int assignRoll(const std::vector>&, double eta) const; + + void gemRollToEtaLimitsLUT(const GEMChamber* gemChamber, std::vector>& lut) const; + + // create LUT: WG->(rollMin,rollMax) + void cscWgToRollLUT(const std::vector>&, + const std::vector>&, + std::vector>&) const; + + // create LUT: WG->(etaMin,etaMax) + void cscWgToEtaLimitsLUT(const CSCLayer*, std::vector>&) const; + + // create LUT: ES->pad + void cscEsToGemPadLUT( + const CSCLayer*, const GEMEtaPartition*, int minH, int maxH, std::vector>&) const; + + // create LUT: pad->ES + void gemPadToCscEsLUT(const CSCLayer*, const GEMEtaPartition*, std::vector&) const; + + // create LUT: roll-> center wg + void gemRollToCscWgLUT(const CSCLayer*, const GEMChamber*, std::vector>&) const; + + edm::ESGetToken gemToken_; + edm::ESGetToken cscToken_; + + const GEMGeometry* gemGeometry_; + const CSCGeometry* cscGeometry_; +}; + +#endif + +GEMCSCLUTAnalyzer::GEMCSCLUTAnalyzer(const edm::ParameterSet& conf) { + gemToken_ = esConsumes(); + cscToken_ = esConsumes(); +} + +GEMCSCLUTAnalyzer::~GEMCSCLUTAnalyzer() {} + +void GEMCSCLUTAnalyzer::analyze(const edm::Event& ev, const edm::EventSetup& setup) { + edm::ESHandle h_gem = setup.getHandle(gemToken_); + edm::ESHandle h_csc = setup.getHandle(cscToken_); + + gemGeometry_ = &*h_gem; + cscGeometry_ = &*h_csc; + + // LUTs are made for ME1/1 and ME2/1, for even/odd + + // ME+1/1/1 (odd) + generateLUTs(CSCDetId(1, 1, 1, 1)); + + // ME+1/1/2 (even) + generateLUTs(CSCDetId(1, 1, 1, 2)); + + // ME+2/1/1 (odd) + generateLUTs(CSCDetId(1, 2, 1, 1)); + + // ME+2/1/2 (even) + generateLUTs(CSCDetId(1, 2, 1, 2)); +} + +void GEMCSCLUTAnalyzer::generateLUTs(const CSCDetId& id) const { + if (id.station() == 1) + generateLUTsME11(id); + if (id.station() == 2) + generateLUTsME21(id); +} + +void GEMCSCLUTAnalyzer::generateLUTsME11(const CSCDetId& id) const { + // CSC trigger geometry + const CSCDetId me1bId(id); + const CSCDetId me1aId(id.endcap(), 1, 4, id.chamber()); + const CSCChamber* cscChamberME1b(cscGeometry_->chamber(me1bId)); + const CSCChamber* cscChamberME1a(cscGeometry_->chamber(me1aId)); + const CSCLayer* keyLayerME1b(cscChamberME1b->layer(3)); + const CSCLayer* keyLayerME1a(cscChamberME1a->layer(3)); + + // GEM trigger geometry + const GEMDetId gem_id_l1(id.zendcap(), 1, 1, 1, me1bId.chamber(), 0); + const GEMDetId gem_id_l2(id.zendcap(), 1, 1, 2, me1bId.chamber(), 0); + const GEMChamber* gemChamber_l1(gemGeometry_->chamber(gem_id_l1)); + const GEMChamber* gemChamber_l2(gemGeometry_->chamber(gem_id_l2)); + const GEMEtaPartition* randRoll(gemChamber_l1->etaPartition(4)); + + // LUTs + std::vector> gemRollEtaLimits_l1; + std::vector> gemRollEtaLimits_l2; + std::vector> cscWGToEtaLimits; + std::vector> cscWgToGemRoll_l1; + std::vector> cscWgToGemRoll_l2; + std::vector> cscEsToGemPadME1a; + std::vector> cscEsToGemPadME1b; + std::vector gemPadToCscEsME1a; + std::vector gemPadToCscEsME1b; + std::vector> gemRollToCscWg; + + gemRollToEtaLimitsLUT(gemChamber_l1, gemRollEtaLimits_l1); + gemRollToEtaLimitsLUT(gemChamber_l2, gemRollEtaLimits_l2); + cscWgToEtaLimitsLUT(keyLayerME1b, cscWGToEtaLimits); + cscWgToRollLUT(cscWGToEtaLimits, gemRollEtaLimits_l1, cscWgToGemRoll_l1); + cscWgToRollLUT(cscWGToEtaLimits, gemRollEtaLimits_l2, cscWgToGemRoll_l2); + cscEsToGemPadLUT(keyLayerME1a, randRoll, 2, 94, cscEsToGemPadME1a); + cscEsToGemPadLUT(keyLayerME1b, randRoll, 4, 124, cscEsToGemPadME1b); + gemPadToCscEsLUT(keyLayerME1a, randRoll, gemPadToCscEsME1a); + gemPadToCscEsLUT(keyLayerME1b, randRoll, gemPadToCscEsME1b); + gemRollToCscWgLUT(keyLayerME1b, gemChamber_l1, gemRollToCscWg); + + const std::string oddeven(id.chamber() % 2 == 0 ? "_even" : "_odd"); + + std::ofstream ofos; + // simulation LUTs + ofos.open("GEMCSCLUT_pad_es_ME1a" + oddeven + ".txt"); + for (const auto& p : gemPadToCscEsME1a) + ofos << p << std::endl; + ofos.close(); + + ofos.open("GEMCSCLUT_pad_es_ME1b" + oddeven + ".txt"); + for (const auto& p : gemPadToCscEsME1b) + ofos << p << std::endl; + ofos.close(); + + ofos.open("GEMCSCLUT_roll_min_wg_ME11" + oddeven + ".txt"); + for (const auto& p : gemRollToCscWg) + ofos << p.first << std::endl; + ofos.close(); + + ofos.open("GEMCSCLUT_roll_max_wg_ME11" + oddeven + ".txt"); + for (const auto& p : gemRollToCscWg) + ofos << p.second << std::endl; + ofos.close(); + + // firmware LUTs + ofos.open("GEMCSCLUT_pad_es_ME1a" + oddeven + ".mem"); + for (const auto& p : gemPadToCscEsME1a) + ofos << std::hex << p << std::endl; + ofos.close(); + + ofos.open("GEMCSCLUT_pad_es_ME1b" + oddeven + ".mem"); + for (const auto& p : gemPadToCscEsME1b) + ofos << std::hex << p << std::endl; + ofos.close(); + + ofos.open("GEMCSCLUT_roll_min_wg_ME11" + oddeven + ".mem"); + for (const auto& p : gemRollToCscWg) + ofos << std::hex << p.first << std::endl; + ofos.close(); + + ofos.open("GEMCSCLUT_roll_max_wg_ME11" + oddeven + ".mem"); + for (const auto& p : gemRollToCscWg) + ofos << std::hex << p.second << std::endl; + ofos.close(); +} + +void GEMCSCLUTAnalyzer::generateLUTsME21(const CSCDetId& csc_id) const { + const CSCChamber* cscChamber(cscGeometry_->chamber(csc_id)); + const CSCLayer* keyLayer(cscChamber->layer(3)); + + // GEM trigger geometry + const GEMDetId gem_id_l1(csc_id.zendcap(), 1, 2, 1, csc_id.chamber(), 0); + const GEMDetId gem_id_l2(csc_id.zendcap(), 1, 2, 2, csc_id.chamber(), 0); + const GEMChamber* gemChamber_l1(gemGeometry_->chamber(gem_id_l1)); + const GEMChamber* gemChamber_l2(gemGeometry_->chamber(gem_id_l2)); + const GEMEtaPartition* randRoll(gemChamber_l1->etaPartition(4)); + + // LUTs + std::vector> gemRollEtaLimits_l1; + std::vector> gemRollEtaLimits_l2; + std::vector> cscWGToEtaLimits; + std::vector> cscWgToGemRoll_l1; + std::vector> cscWgToGemRoll_l2; + std::vector> cscEsToGemPad; + std::vector gemPadToCscEs; + std::vector> gemRollToCscWg; + + gemRollToEtaLimitsLUT(gemChamber_l1, gemRollEtaLimits_l1); + gemRollToEtaLimitsLUT(gemChamber_l2, gemRollEtaLimits_l2); + cscWgToEtaLimitsLUT(keyLayer, cscWGToEtaLimits); + cscWgToRollLUT(cscWGToEtaLimits, gemRollEtaLimits_l1, cscWgToGemRoll_l1); + cscWgToRollLUT(cscWGToEtaLimits, gemRollEtaLimits_l2, cscWgToGemRoll_l2); + cscEsToGemPadLUT(keyLayer, randRoll, 4, 155, cscEsToGemPad); + gemPadToCscEsLUT(keyLayer, randRoll, gemPadToCscEs); + gemRollToCscWgLUT(keyLayer, gemChamber_l1, gemRollToCscWg); + + const std::string oddeven(csc_id.chamber() % 2 == 0 ? "_even" : "_odd"); + + std::ofstream ofos; + // simulation LUTs + ofos.open("GEMCSCLUT_pad_es_ME21" + oddeven + ".txt"); + for (const auto& p : gemPadToCscEs) + ofos << p << std::endl; + ofos.close(); + + ofos.open("GEMCSCLUT_roll_min_wg_ME21" + oddeven + ".txt"); + for (const auto& p : gemRollToCscWg) + ofos << p.first << std::endl; + ofos.close(); + + ofos.open("GEMCSCLUT_roll_max_wg_ME21" + oddeven + ".txt"); + for (const auto& p : gemRollToCscWg) + ofos << p.second << std::endl; + ofos.close(); + + // firmware LUTs + ofos.open("GEMCSCLUT_pad_es_ME21" + oddeven + ".mem"); + for (const auto& p : gemPadToCscEs) + ofos << std::hex << p << std::endl; + ofos.close(); + + ofos.open("GEMCSCLUT_roll_min_wg_ME21" + oddeven + ".mem"); + for (const auto& p : gemRollToCscWg) + ofos << std::hex << p.first << std::endl; + ofos.close(); + + ofos.open("GEMCSCLUT_roll_max_wg_ME21" + oddeven + ".mem"); + for (const auto& p : gemRollToCscWg) + ofos << std::hex << p.second << std::endl; + ofos.close(); +} + +int GEMCSCLUTAnalyzer::assignRoll(const std::vector>& lut, double eta) const { + int result = -99; + int iRoll = 0; + for (const auto& p : lut) { + iRoll++; + const float minEta(p.first); + const float maxEta(p.second); + if (minEta <= std::abs(eta) and std::abs(eta) < maxEta) { + result = iRoll; + break; + } + } + return result; +} + +void GEMCSCLUTAnalyzer::gemRollToEtaLimitsLUT(const GEMChamber* gemChamber, + std::vector>& lut) const { + for (const auto& roll : gemChamber->etaPartitions()) { + const float half_striplength(roll->specs()->specificTopology().stripLength() / 2.); + const LocalPoint lp_top(0., half_striplength, 0.); + const LocalPoint lp_bottom(0., -half_striplength, 0.); + const GlobalPoint gp_top(roll->toGlobal(lp_top)); + const GlobalPoint gp_bottom(roll->toGlobal(lp_bottom)); + const double bottom_eta(std::abs(gp_bottom.eta())); + const double top_eta(std::abs(gp_top.eta())); + lut.emplace_back(std::min(bottom_eta, top_eta), std::max(bottom_eta, top_eta)); + } +} + +void GEMCSCLUTAnalyzer::cscWgToRollLUT(const std::vector>& inLUT1, + const std::vector>& inLUT2, + std::vector>& outLUT) const { + for (const auto& p : inLUT1) { + double etaMin(p.first); + double etaMax(p.second); + outLUT.emplace_back(assignRoll(inLUT2, etaMin), assignRoll(inLUT2, etaMax)); + } +} + +void GEMCSCLUTAnalyzer::cscWgToEtaLimitsLUT(const CSCLayer* keyLayer, + std::vector>& lut) const { + const CSCLayerGeometry* keyLayerGeometry(keyLayer->geometry()); + const int numberOfWG(keyLayerGeometry->numberOfWireGroups()); + for (int i = 0; i < numberOfWG; ++i) { + const float middle_wire(keyLayerGeometry->middleWireOfGroup(i)); + const std::pair wire_ends(keyLayerGeometry->wireTopology()->wireEnds(middle_wire)); + const GlobalPoint gp_top(keyLayer->toGlobal(wire_ends.first)); + const GlobalPoint gp_bottom(keyLayer->toGlobal(wire_ends.second)); + const double bottom_eta(std::abs(gp_bottom.eta())); + const double top_eta(std::abs(gp_top.eta())); + lut.emplace_back(std::min(bottom_eta, top_eta), std::max(bottom_eta, top_eta)); + } +} + +void GEMCSCLUTAnalyzer::cscEsToGemPadLUT(const CSCLayer* keyLayer, + const GEMEtaPartition* randRoll, + int minH, + int maxH, + std::vector>& lut) const { + const CSCLayerGeometry* keyLayerGeometry(keyLayer->geometry()); + auto nStrips(keyLayerGeometry->numberOfStrips()); + for (float i = 0; i < nStrips; i = i + 0.125) { + const LocalPoint lpCSC(keyLayerGeometry->topology()->localPosition(i)); + const GlobalPoint gp(keyLayer->toGlobal(lpCSC)); + const LocalPoint lpGEM(randRoll->toLocal(gp)); + const float pad(randRoll->pad(lpGEM)); + lut.emplace_back(std::floor(pad), std::ceil(pad)); + } +} + +void GEMCSCLUTAnalyzer::gemPadToCscEsLUT(const CSCLayer* keyLayer, + const GEMEtaPartition* randRoll, + std::vector& lut) const { + int offset(0); + if (keyLayer->id().ring() == 4) + offset = 64; + const int nGEMPads(randRoll->npads()); + const CSCLayerGeometry* keyLayerGeometry(keyLayer->geometry()); + for (int i = 0; i < nGEMPads; ++i) { + const LocalPoint lpGEM(randRoll->centreOfPad(i)); + const GlobalPoint gp(randRoll->toGlobal(lpGEM)); + const LocalPoint lpCSC(keyLayer->toLocal(gp)); + const float strip(keyLayerGeometry->strip(lpCSC)); + lut.push_back(int((strip + offset) * 8)); + } +} + +void GEMCSCLUTAnalyzer::gemRollToCscWgLUT(const CSCLayer* keyLayer, + const GEMChamber* gemChamber, + std::vector>& lut) const { + const CSCLayerGeometry* keyLayerGeometry(keyLayer->geometry()); + for (const auto& roll : gemChamber->etaPartitions()) { + const float half_striplength(roll->specs()->specificTopology().stripLength() / 2.); + const LocalPoint lp_top(0., half_striplength, 0.); + const LocalPoint lp_bottom(0., -half_striplength, 0.); + + const GlobalPoint gp_top(roll->toGlobal(lp_top)); + const GlobalPoint gp_bottom(roll->toGlobal(lp_bottom)); + + const LocalPoint lp_csc_top(keyLayer->toLocal(gp_top)); + const LocalPoint lp_csc_bottom(keyLayer->toLocal(gp_bottom)); + + const int wire_top(keyLayerGeometry->nearestWire(lp_csc_top)); + const int wg_top(keyLayerGeometry->wireGroup(wire_top)); + + const int wire_bottom(keyLayerGeometry->nearestWire(lp_csc_bottom)); + const int wg_bottom(keyLayerGeometry->wireGroup(wire_bottom)); + + lut.emplace_back(wg_bottom, wg_top); + } +} + +//define this as a plug-in +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(GEMCSCLUTAnalyzer); diff --git a/L1Trigger/CSCTriggerPrimitives/test/runGEMCSCLUTAnalyzer_cfg.py b/L1Trigger/CSCTriggerPrimitives/test/runGEMCSCLUTAnalyzer_cfg.py new file mode 100644 index 0000000000000..ab9a7f8718b0f --- /dev/null +++ b/L1Trigger/CSCTriggerPrimitives/test/runGEMCSCLUTAnalyzer_cfg.py @@ -0,0 +1,20 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Phase2C12_cff import Phase2C12 +process = cms.Process("GEMCSCLUT", Phase2C12) + +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +process.load('Configuration.Geometry.GeometryExtended2026D74Reco_cff') +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic', '') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +process.source = cms.Source("EmptySource") + +process.GEMCSCLUTAnalyzer = cms.EDAnalyzer("GEMCSCLUTAnalyzer") + +process.p = cms.Path(process.GEMCSCLUTAnalyzer) diff --git a/L1Trigger/Configuration/python/L1Trigger_EventContent_cff.py b/L1Trigger/Configuration/python/L1Trigger_EventContent_cff.py index 4f58a0548cc30..9556312d0d146 100644 --- a/L1Trigger/Configuration/python/L1Trigger_EventContent_cff.py +++ b/L1Trigger/Configuration/python/L1Trigger_EventContent_cff.py @@ -199,6 +199,8 @@ def _appendPhase2Digis(obj): 'keep *_l1PFMetCalo_*_*', 'keep *_l1PFMetPF_*_*', 'keep *_l1PFMetPuppi_*_*', + 'keep *_l1NNTauProducer_*_*', + 'keep *_l1NNTauProducerPuppi_*_*', 'keep *_TTStubsFromPhase2TrackerDigis_*_*', 'keep *_TTClustersFromPhase2TrackerDigis_*_*', 'keep *_TTTracksFromExtendedTrackletEmulation_*_*', diff --git a/L1Trigger/Configuration/python/SimL1Emulator_cff.py b/L1Trigger/Configuration/python/SimL1Emulator_cff.py index 1fd62b988edfc..cb9198b37320e 100644 --- a/L1Trigger/Configuration/python/SimL1Emulator_cff.py +++ b/L1Trigger/Configuration/python/SimL1Emulator_cff.py @@ -138,6 +138,18 @@ l1PFMetsTask = cms.Task(l1PFMetCalo , l1PFMetPF , l1PFMetPuppi) _phase2_siml1emulator.add(l1PFMetsTask) +# NNTaus +# ######################################################################## +from L1Trigger.Phase2L1ParticleFlow.L1NNTauProducer_cff import * +l1NNTauProducer = L1NNTauProducer.clone( + L1PFObjects = cms.InputTag("l1pfCandidates","PF") +) +l1NNTauProducerPuppi = L1NNTauProducerPuppi.clone( + L1PFObjects = cms.InputTag("l1pfCandidates","Puppi") +) +_phase2_siml1emulator.add(l1NNTauProducer) +_phase2_siml1emulator.add(l1NNTauProducerPuppi) + # --> add modules from Configuration.Eras.Modifier_phase2_trigger_cff import phase2_trigger phase2_trigger.toReplaceWith( SimL1EmulatorTask , _phase2_siml1emulator) diff --git a/L1Trigger/Configuration/python/customiseUtils.py b/L1Trigger/Configuration/python/customiseUtils.py index bf313e618e870..d938fc9797d61 100644 --- a/L1Trigger/Configuration/python/customiseUtils.py +++ b/L1Trigger/Configuration/python/customiseUtils.py @@ -142,3 +142,9 @@ def L1TGtStage2ComparisonRAWvsEMU(process): process.l1tgtstage2comparison = cms.Path(process.l1tComparisonGtStage2RAWvsEMU) process.schedule.append(process.l1tgtstage2comparison) return process + +def L1TStage2SetPrefireVetoBit(process): + process.load('L1Trigger.L1TGlobal.simGtExtFakeProd_cfi') + process.l1tstage2gtext = cms.Path(process.simGtExtUnprefireable) + process.schedule.insert(0,process.l1tstage2gtext) + return process diff --git a/L1Trigger/DTTrackFinder/src/L1MuDTTrackSegPhi.cc b/L1Trigger/DTTrackFinder/src/L1MuDTTrackSegPhi.cc index 99ba199d8f164..9f42a1468a1c5 100644 --- a/L1Trigger/DTTrackFinder/src/L1MuDTTrackSegPhi.cc +++ b/L1Trigger/DTTrackFinder/src/L1MuDTTrackSegPhi.cc @@ -41,7 +41,8 @@ using namespace std; // Constructors -- //---------------- -L1MuDTTrackSegPhi::L1MuDTTrackSegPhi() : m_location(), m_phi(0), m_phib(0), m_quality(Null), m_bx(0) {} +L1MuDTTrackSegPhi::L1MuDTTrackSegPhi() + : m_location(), m_phi(0), m_phib(0), m_quality(Null), m_tag(false), m_bx(0), m_etaFlag(false) {} L1MuDTTrackSegPhi::L1MuDTTrackSegPhi( int wheel_id, int sector_id, int station_id, int phi, int phib, TSQuality quality, bool tag, int bx, bool etaFlag) @@ -49,6 +50,7 @@ L1MuDTTrackSegPhi::L1MuDTTrackSegPhi( m_phi(phi), m_phib(phib), m_quality(quality), + m_tag(false), m_bx(bx), m_etaFlag(etaFlag) { if (phi < -2048 || phi > 2047) { diff --git a/L1Trigger/DTTriggerPhase2/BuildFile.xml b/L1Trigger/DTTriggerPhase2/BuildFile.xml index 123994e1aa1c1..3a70f5d1f62e5 100644 --- a/L1Trigger/DTTriggerPhase2/BuildFile.xml +++ b/L1Trigger/DTTriggerPhase2/BuildFile.xml @@ -9,7 +9,6 @@ - diff --git a/L1Trigger/DTTriggerPhase2/plugins/DTTrigPhase2Prod.cc b/L1Trigger/DTTriggerPhase2/plugins/DTTrigPhase2Prod.cc index 23c4d6363e9ca..0d9925a8cd08c 100644 --- a/L1Trigger/DTTriggerPhase2/plugins/DTTrigPhase2Prod.cc +++ b/L1Trigger/DTTriggerPhase2/plugins/DTTrigPhase2Prod.cc @@ -155,7 +155,7 @@ namespace { bool operator()(std::pair a, std::pair b) const { return (a.second.time() < b.second.time()); } - } DigiTimeOrdering; + } const DigiTimeOrdering; } // namespace DTTrigPhase2Prod::DTTrigPhase2Prod(const ParameterSet& pset) diff --git a/L1Trigger/DTTriggerPhase2/src/HoughGrouping.cc b/L1Trigger/DTTriggerPhase2/src/HoughGrouping.cc index d4cdccb1ad514..8c8afe661472e 100644 --- a/L1Trigger/DTTriggerPhase2/src/HoughGrouping.cc +++ b/L1Trigger/DTTriggerPhase2/src/HoughGrouping.cc @@ -46,7 +46,7 @@ namespace { else return (sumdista < sumdistb); // abs. dist. to digis } - } HoughOrdering; + } const HoughOrdering; } // namespace // ============================================================================ // Constructors and destructor diff --git a/L1Trigger/GlobalMuonTrigger/test/writeLUTsAndRegs_cfg.py b/L1Trigger/GlobalMuonTrigger/test/writeLUTsAndRegs_cfg.py index 42cce20447cff..354f447ab0907 100644 --- a/L1Trigger/GlobalMuonTrigger/test/writeLUTsAndRegs_cfg.py +++ b/L1Trigger/GlobalMuonTrigger/test/writeLUTsAndRegs_cfg.py @@ -4,7 +4,7 @@ process = cms.Process("LUTgen") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtAnalyzer_cfg.py b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtAnalyzer_cfg.py index 46099d86d7fb0..766f2f072ebcf 100644 --- a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtAnalyzer_cfg.py +++ b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtAnalyzer_cfg.py @@ -156,20 +156,13 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['l1GtAnalyzer'] -process.MessageLogger.categories.append('L1GtAnalyzer') -process.MessageLogger.categories.append('L1GtUtils') -process.MessageLogger.categories.append('L1GtTrigReport') -process.MessageLogger.destinations = ['L1GtAnalyzer_error', - 'L1GtAnalyzer_warning', - 'L1GtAnalyzer_info', - 'L1GtAnalyzer_debug' - ] +process.MessageLogger.cerr.enable = False process.MessageLogger.cerr.default.limit = 0 process.MessageLogger.cerr.FwkReport.limit = 0 process.MessageLogger.cerr.FwkSummary.limit = 0 -process.MessageLogger.L1GtAnalyzer_debug = cms.untracked.PSet( +process.MessageLogger.files.L1GtAnalyzer_debug = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(0) ), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -180,7 +173,7 @@ L1GtTrigReport = cms.untracked.PSet( limit = cms.untracked.int32(0) ) ) -process.MessageLogger.L1GtAnalyzer_info = cms.untracked.PSet( +process.MessageLogger.files.L1GtAnalyzer_info = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -190,7 +183,7 @@ L1GtTrigReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtAnalyzer_warning = cms.untracked.PSet( +process.MessageLogger.files.L1GtAnalyzer_warning = cms.untracked.PSet( threshold = cms.untracked.string('WARNING'), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -199,7 +192,7 @@ L1GtTrigReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtAnalyzer_error = cms.untracked.PSet( +process.MessageLogger.files.L1GtAnalyzer_error = cms.untracked.PSet( threshold = cms.untracked.string('ERROR'), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), L1GtAnalyzer = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtBeamModeFilter_cfg.py b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtBeamModeFilter_cfg.py index 7ca794f0a8a81..023970ad4e7c6 100644 --- a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtBeamModeFilter_cfg.py +++ b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtBeamModeFilter_cfg.py @@ -95,9 +95,8 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['gtEvmDigis', 'l1GtBeamModeFilter'] -process.MessageLogger.categories.append('L1GlobalTriggerEvmRawToDigi') -process.MessageLogger.categories.append('L1GtBeamModeFilter') -#process.MessageLogger.destinations = ['cerr'] +process.MessageLogger.L1GlobalTriggerEvmRawToDigi=dict() +process.MessageLogger.L1GtBeamModeFilter=dict() process.MessageLogger.cerr.threshold = 'DEBUG' #process.MessageLogger.cerr.threshold = 'INFO' diff --git a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtDataEmulAnalyzer_cfg.py b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtDataEmulAnalyzer_cfg.py index 8f222b7cedfe2..ca9be397b6595 100644 --- a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtDataEmulAnalyzer_cfg.py +++ b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtDataEmulAnalyzer_cfg.py @@ -194,9 +194,10 @@ # Message Logger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories = ['*'] -process.MessageLogger.destinations = ['cout'] + +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO'), INFO = cms.untracked.PSet( #limit = cms.untracked.int32(-1) diff --git a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtDataFromRawEmulAnalyzer_cfg.py b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtDataFromRawEmulAnalyzer_cfg.py index 74b599f3196dd..e8f34e607a643 100644 --- a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtDataFromRawEmulAnalyzer_cfg.py +++ b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtDataFromRawEmulAnalyzer_cfg.py @@ -250,9 +250,10 @@ # Message Logger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories = ['*'] -process.MessageLogger.destinations = ['cout'] + +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO'), INFO = cms.untracked.PSet( #limit = cms.untracked.int32(-1) diff --git a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtEmulTrigReport_cfg.py b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtEmulTrigReport_cfg.py index 1c17583ea64f1..356e990b315a6 100644 --- a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtEmulTrigReport_cfg.py +++ b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtEmulTrigReport_cfg.py @@ -213,29 +213,22 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['l1GtEmulDigis', 'l1GtTrigReport'] -process.MessageLogger.categories.append('L1GlobalTrigger') -process.MessageLogger.categories.append('L1GtTrigReport') -process.MessageLogger.destinations = ['L1GtEmulTrigReport_errors', - 'L1GtEmulTrigReport_warnings', - 'L1GtEmulTrigReport_info', - 'L1GtEmulTrigReport' - ] -process.MessageLogger.statistics = [] - -process.MessageLogger.L1GtEmulTrigReport_errors = cms.untracked.PSet( +process.MessageLogger.cerr.enable = False + +process.MessageLogger.files.L1GtEmulTrigReport_errors = cms.untracked.PSet( threshold = cms.untracked.string('ERROR'), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), L1GlobalTrigger = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtEmulTrigReport_warnings = cms.untracked.PSet( +process.MessageLogger.files.L1GtEmulTrigReport_warnings = cms.untracked.PSet( threshold = cms.untracked.string('WARNING'), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(0) ), L1GlobalTrigger = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtEmulTrigReport_info = cms.untracked.PSet( +process.MessageLogger.files.L1GtEmulTrigReport_info = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -243,7 +236,7 @@ L1GtTrigReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtEmulTrigReport = cms.untracked.PSet( +process.MessageLogger.files.L1GtEmulTrigReport = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(0) ), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtPackUnpackAnalyzer_cfg.py b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtPackUnpackAnalyzer_cfg.py index 9894e55664da2..347179ad9629d 100644 --- a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtPackUnpackAnalyzer_cfg.py +++ b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtPackUnpackAnalyzer_cfg.py @@ -221,8 +221,8 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = [ 'l1GtPack', 'l1GtUnpack', 'l1GtPackUnpackAnalyzer'] -process.MessageLogger.destinations = ['L1GtPackUnpackAnalyzer'] -process.MessageLogger.L1GtPackUnpackAnalyzer = cms.untracked.PSet( +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.L1GtPackUnpackAnalyzer = cms.untracked.PSet( threshold=cms.untracked.string('DEBUG'), #threshold = cms.untracked.string('INFO'), #threshold = cms.untracked.string('ERROR'), diff --git a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtPatternGenerator_overrideL1Menu_cfg.py b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtPatternGenerator_overrideL1Menu_cfg.py index e94db476a37a4..21405d9b1e5a6 100644 --- a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtPatternGenerator_overrideL1Menu_cfg.py +++ b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtPatternGenerator_overrideL1Menu_cfg.py @@ -256,19 +256,13 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['l1GtPatternGenerator', 'gtDigis'] -process.MessageLogger.categories.append('L1GtPatternGenerator') -process.MessageLogger.categories.append('L1GtTrigReport') -process.MessageLogger.destinations = ['L1GtPatternGenerator_error', - 'L1GtPatternGenerator_warning', - 'L1GtPatternGenerator_info', - 'L1GtPatternGenerator_debug' - ] +process.MessageLogger.cerr.enable = False process.MessageLogger.cerr.default.limit = 0 process.MessageLogger.cerr.FwkReport.limit = 0 process.MessageLogger.cerr.FwkSummary.limit = 0 -process.MessageLogger.L1GtPatternGenerator_debug = cms.untracked.PSet( +process.MessageLogger.files.L1GtPatternGenerator_debug = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(0) ), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -278,7 +272,7 @@ L1GtTrigReport = cms.untracked.PSet( limit = cms.untracked.int32(0) ) ) -process.MessageLogger.L1GtPatternGenerator_info = cms.untracked.PSet( +process.MessageLogger.files.L1GtPatternGenerator_info = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -287,7 +281,7 @@ L1GtTrigReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtPatternGenerator_warning = cms.untracked.PSet( +process.MessageLogger.files.L1GtPatternGenerator_warning = cms.untracked.PSet( threshold = cms.untracked.string('WARNING'), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -295,7 +289,7 @@ L1GtTrigReport = cms.untracked.PSet( limit = cms.untracked.int32(0) ) ) -process.MessageLogger.L1GtPatternGenerator_error = cms.untracked.PSet( +process.MessageLogger.files.L1GtPatternGenerator_error = cms.untracked.PSet( threshold = cms.untracked.string('ERROR'), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), L1GtPatternGenerator = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtTechTrigL1GtEmulTrigReport_cfg.py b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtTechTrigL1GtEmulTrigReport_cfg.py index 3db588528b51b..ca49a74904434 100644 --- a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtTechTrigL1GtEmulTrigReport_cfg.py +++ b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtTechTrigL1GtEmulTrigReport_cfg.py @@ -274,7 +274,6 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['l1GtEmulDigis', 'l1GtTrigReport'] -process.MessageLogger.categories.append('L1GtTrigReport') process.MessageLogger.cerr.threshold = 'DEBUG' #process.MessageLogger.cerr.threshold = 'INFO' diff --git a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtTrigReport_cfg.py b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtTrigReport_cfg.py index e388714b5634a..0d2e85b944137 100644 --- a/L1Trigger/GlobalTriggerAnalyzer/test/L1GtTrigReport_cfg.py +++ b/L1Trigger/GlobalTriggerAnalyzer/test/L1GtTrigReport_cfg.py @@ -78,7 +78,6 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['l1GtTrigReport'] -process.MessageLogger.categories.append('L1GtTrigReport') #process.MessageLogger.cerr.threshold = 'DEBUG' process.MessageLogger.cerr.threshold = 'INFO' diff --git a/L1Trigger/L1CaloTrigger/plugins/BuildFile.xml b/L1Trigger/L1CaloTrigger/plugins/BuildFile.xml index c4d970df01ac5..a732a86066576 100644 --- a/L1Trigger/L1CaloTrigger/plugins/BuildFile.xml +++ b/L1Trigger/L1CaloTrigger/plugins/BuildFile.xml @@ -2,6 +2,7 @@ + diff --git a/L1Trigger/L1CaloTrigger/plugins/L1EGammaCrystalsEmulatorProducer.cc b/L1Trigger/L1CaloTrigger/plugins/L1EGammaCrystalsEmulatorProducer.cc index 2781e7b15d7bd..fc5693620355a 100644 --- a/L1Trigger/L1CaloTrigger/plugins/L1EGammaCrystalsEmulatorProducer.cc +++ b/L1Trigger/L1CaloTrigger/plugins/L1EGammaCrystalsEmulatorProducer.cc @@ -78,6 +78,7 @@ static constexpr int n_GCTcards = 3; static constexpr float ECAL_eta_range = 1.4841; static constexpr float half_crystal_size = 0.00873; static constexpr float slideIsoPtThreshold = 80; +static constexpr float plateau_ss = 130.0; static constexpr float a0_80 = 0.85, a1_80 = 0.0080, a0 = 0.21; // passes_iso static constexpr float b0 = 0.38, b1 = 1.9, b2 = 0.05; //passes_looseTkiso static constexpr float c0_ss = 0.94, c1_ss = 0.052, c2_ss = 0.044; //passes_ss @@ -1176,28 +1177,45 @@ void L1EGCrystalClusterEmulatorProducer::produce(edm::Event& iEvent, const edm:: } bool L1EGCrystalClusterEmulatorProducer::passes_iso(float pt, float iso) { + bool is_iso = true; if (pt < slideIsoPtThreshold) { if (!((a0_80 - a1_80 * pt) > iso)) - return false; + is_iso = false; } else { if (iso > a0) - return false; + is_iso = false; } - return true; + if (pt > plateau_ss) + is_iso = true; + return is_iso; } bool L1EGCrystalClusterEmulatorProducer::passes_looseTkiso(float pt, float iso) { - return (b0 + b1 * std::exp(-b2 * pt) > iso); + bool is_iso = (b0 + b1 * std::exp(-b2 * pt) > iso); + if (pt > plateau_ss) + is_iso = true; + return is_iso; } bool L1EGCrystalClusterEmulatorProducer::passes_ss(float pt, float ss) { - return ((c0_ss + c1_ss * std::exp(-c2_ss * pt)) <= ss); + bool is_ss = ((c0_ss + c1_ss * std::exp(-c2_ss * pt)) <= ss); + if (pt > plateau_ss) + is_ss = true; + return is_ss; } -bool L1EGCrystalClusterEmulatorProducer::passes_photon(float pt, float pss) { return (pss > d0 - d1 * pt); } +bool L1EGCrystalClusterEmulatorProducer::passes_photon(float pt, float pss) { + bool is_ss = (pss > d0 - d1 * pt); + if (pt > plateau_ss) + is_ss = true; + return is_ss; +} bool L1EGCrystalClusterEmulatorProducer::passes_looseTkss(float pt, float ss) { - return ((e0_looseTkss - e1_looseTkss * std::exp(-e2_looseTkss * pt)) <= ss); + bool is_ss = ((e0_looseTkss - e1_looseTkss * std::exp(-e2_looseTkss * pt)) <= ss); + if (pt > plateau_ss) + is_ss = true; + return is_ss; } //define this as a plug-in diff --git a/L1Trigger/L1CaloTrigger/python/test_L1EGCrystalClusterEmulator_cfg.py b/L1Trigger/L1CaloTrigger/python/test_L1EGCrystalClusterEmulator_cfg.py index 12d320d1ee80b..b5e480ae9fda2 100644 --- a/L1Trigger/L1CaloTrigger/python/test_L1EGCrystalClusterEmulator_cfg.py +++ b/L1Trigger/L1CaloTrigger/python/test_L1EGCrystalClusterEmulator_cfg.py @@ -7,7 +7,7 @@ process.load('Configuration.StandardSequences.Services_cff') process.load("FWCore.MessageService.MessageLogger_cfi") process.load('Configuration.EventContent.EventContent_cff') -process.MessageLogger.categories = cms.untracked.vstring('L1EGRateStudies', 'FwkReport') +process.MessageLogger.L1EGRateStudies = dict() process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( reportEvery = cms.untracked.int32(1) ) diff --git a/L1Trigger/L1GctAnalyzer/test/gctErrorFilter_cfg.py b/L1Trigger/L1GctAnalyzer/test/gctErrorFilter_cfg.py index 2ff58be768dbf..251ad41668021 100644 --- a/L1Trigger/L1GctAnalyzer/test/gctErrorFilter_cfg.py +++ b/L1Trigger/L1GctAnalyzer/test/gctErrorFilter_cfg.py @@ -9,7 +9,7 @@ process = cms.Process('GctErrorFilter') process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('WARNING') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1Trigger/L1GctAnalyzer/test/gctLUTGenerator_cfg.py b/L1Trigger/L1GctAnalyzer/test/gctLUTGenerator_cfg.py index 1420f7deca7ba..4d65d97e660f5 100644 --- a/L1Trigger/L1GctAnalyzer/test/gctLUTGenerator_cfg.py +++ b/L1Trigger/L1GctAnalyzer/test/gctLUTGenerator_cfg.py @@ -20,7 +20,7 @@ # CMSSW config process = cms.Process("GctLUTGen") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('l1GctConfigDump') diff --git a/L1Trigger/L1GctAnalyzer/test/gctPatternTester_cfg.py b/L1Trigger/L1GctAnalyzer/test/gctPatternTester_cfg.py index 86fdb9478c494..cdebe945c79a1 100644 --- a/L1Trigger/L1GctAnalyzer/test/gctPatternTester_cfg.py +++ b/L1Trigger/L1GctAnalyzer/test/gctPatternTester_cfg.py @@ -7,7 +7,7 @@ process = cms.Process('GctPatternTester') process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1Trigger/L1TCalorimeter/test/generatePattern-Stage2MP.py b/L1Trigger/L1TCalorimeter/test/generatePattern-Stage2MP.py index 8f3e7e5e685e8..da2a143c541fa 100644 --- a/L1Trigger/L1TCalorimeter/test/generatePattern-Stage2MP.py +++ b/L1Trigger/L1TCalorimeter/test/generatePattern-Stage2MP.py @@ -143,16 +143,14 @@ # enable debug message logging for our modules -process.MessageLogger.categories.append('L1TCaloEvents') +process.MessageLogger.L1TCaloEvents=dict() process.MessageLogger.suppressInfo = cms.untracked.vstring('Geometry', 'AfterSource') if (options.dump): - process.MessageLogger.destinations.append('infos') - process.MessageLogger.infos = cms.untracked.PSet( + process.MessageLogger.files.infos = cms.untracked.PSet( INFO = cms.untracked.PSet(limit = cms.untracked.int32(0)), L1TCaloEvents = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), limit = cms.untracked.int32(10000) ) ) diff --git a/L1Trigger/L1TCommon/test/reEmul.py b/L1Trigger/L1TCommon/test/reEmul.py index 43e7ebca9fa0f..00c198576d793 100644 --- a/L1Trigger/L1TCommon/test/reEmul.py +++ b/L1Trigger/L1TCommon/test/reEmul.py @@ -142,9 +142,10 @@ # enable debug message logging for our modules -process.MessageLogger.categories.append('L1TCaloEvents') -process.MessageLogger.categories.append('L1TGlobalEvents') -process.MessageLogger.categories.append('l1t|Global') +process.MessageLogger.L1TCaloEvents=dict() +process.MessageLogger.L1TGlobalEvents=dict() +process.MessageLogger.l1t=dict() +process.MessageLogger.Global=dict() process.MessageLogger.suppressInfo = cms.untracked.vstring('Geometry', 'AfterSource') # gt analyzer diff --git a/L1Trigger/L1TCommon/test/runL1T.py b/L1Trigger/L1TCommon/test/runL1T.py index 8954c5608c262..24f95f75fef26 100644 --- a/L1Trigger/L1TCommon/test/runL1T.py +++ b/L1Trigger/L1TCommon/test/runL1T.py @@ -43,9 +43,10 @@ process.TFileService.fileName = cms.string('l1t_debug.root') # enable debug message logging for our modules -process.MessageLogger.categories.append('L1TCaloEvents') -process.MessageLogger.categories.append('L1TGlobalEvents') -process.MessageLogger.categories.append('l1t|Global') +process.MessageLogger.L1TCaloEvents=dict() +process.MessageLogger.L1TGlobalEvents=dict() +process.MessageLogger.l1t=dict() +process.MessageLogger.Global=dict() process.MessageLogger.suppressInfo = cms.untracked.vstring('Geometry', 'AfterSource') diff --git a/L1Trigger/L1TGlobal/interface/ConditionEvaluation.h b/L1Trigger/L1TGlobal/interface/ConditionEvaluation.h index e8e04e107509e..0d41adebb6eb5 100644 --- a/L1Trigger/L1TGlobal/interface/ConditionEvaluation.h +++ b/L1Trigger/L1TGlobal/interface/ConditionEvaluation.h @@ -91,6 +91,17 @@ namespace l1t { const Type2& value, bool condGEqValue) const; + /// check if a value is greater than a threshold or + /// greater-or-equal depending on the value of the condGEqValue flag + /// Added by Rick Cavanaugh for Displaced Muons: + /// Above checkThreshold fails when value overflows or threshold window is invalid + /// Below checkUnconstrainedPt allows value to overflow and only evaluates cut if threshold window is valid + template + const bool checkUnconstrainedPt(const Type1& thresholdL, + const Type1& thresholdH, + const Type2& value, + bool condGEqValue) const; + /// check if a index is in a given range template const bool checkIndex(const Type1& indexLo, const Type1& indexHi, const unsigned int index) const; @@ -184,6 +195,39 @@ namespace l1t { } } + // check if a value is greater than a threshold or + // greater-or-equal depending on the value of the condGEqValue flag + /// Added by Rick Cavanaugh for Displaced Muons: + /// Above checkThreshold fails when value overflows or threshold window is invalid + /// Below checkUnconstrainedPt allows value to overflow and only evaluates cut if threshold window is valid + template + const bool ConditionEvaluation::checkUnconstrainedPt(const Type1& thresholdL, + const Type1& thresholdH, + const Type2& value, + const bool condGEqValue) const { + if (value > 0) { + LogTrace("L1GlobalTrigger") << " checkUnconstrainedPt check for condGEqValue = " << condGEqValue + << "\n hex: " << std::hex << "threshold = " << thresholdL << " - " << thresholdH + << " value = " << value << "\n dec: " << std::dec << "threshold = " << thresholdL + << " - " << thresholdH << " value = " << value << std::endl; + } + if (thresholdH > 0) // Only evaluate cut if threshold window is valid + { + if (condGEqValue) { + if (value >= (Type2)thresholdL && (Type1)value <= thresholdH) { + return true; + } + return false; + } else { + if (value == (Type2)thresholdL) { + return true; + } + return false; + } + } else // If invalid threshold window, do not evaluate cut (ie. pass through) + return true; + } + // check if a index in a given range template const bool ConditionEvaluation::checkIndex(const Type1& indexLo, diff --git a/L1Trigger/L1TGlobal/interface/GlobalBoard.h b/L1Trigger/L1TGlobal/interface/GlobalBoard.h index 3b8272649a104..90d2089ee5774 100644 --- a/L1Trigger/L1TGlobal/interface/GlobalBoard.h +++ b/L1Trigger/L1TGlobal/interface/GlobalBoard.h @@ -106,7 +106,7 @@ namespace l1t { const int iBxInEvent, const int totalBxInEvent, const unsigned int numberPhysTriggers, - const std::vector& prescaleFactorsAlgoTrig, + const std::vector& prescaleFactorsAlgoTrig, const std::vector& triggerMaskAlgoTrig, const std::vector& triggerMaskVetoAlgoTrig, const bool algorithmTriggersUnprescaled, @@ -226,7 +226,7 @@ namespace l1t { std::vector m_conditionResultMaps; /// prescale counters: NumberPhysTriggers counters per bunch cross in event - std::vector> m_prescaleCounterAlgoTrig; + std::vector> m_prescaleCounterAlgoTrig; bool m_firstEv; bool m_firstEvLumiSegment; diff --git a/L1Trigger/L1TGlobal/interface/L1TGlobalUtil.h b/L1Trigger/L1TGlobal/interface/L1TGlobalUtil.h index 61960e8dd6c3f..d86eba8bbd664 100644 --- a/L1Trigger/L1TGlobal/interface/L1TGlobalUtil.h +++ b/L1Trigger/L1TGlobal/interface/L1TGlobalUtil.h @@ -4,13 +4,15 @@ #define L1TGlobal_L1TGlobalUtil_h // system include files +#include + #include #include "CondFormats/DataRecord/interface/L1TUtmTriggerMenuRcd.h" #include "CondFormats/L1TObjects/interface/L1TUtmTriggerMenu.h" -#include "CondFormats/DataRecord/interface/L1TGlobalPrescalesVetosRcd.h" -#include "CondFormats/L1TObjects/interface/L1TGlobalPrescalesVetos.h" +#include "CondFormats/DataRecord/interface/L1TGlobalPrescalesVetosFractRcd.h" +#include "CondFormats/L1TObjects/interface/L1TGlobalPrescalesVetosFract.h" // Objects to produce for the output record. #include "DataFormats/L1TGlobal/interface/GlobalAlgBlk.h" @@ -26,7 +28,7 @@ #include "L1Trigger/L1TGlobal/interface/L1TGlobalUtilHelper.h" -#include "L1Trigger/L1TGlobal/interface/PrescalesVetosHelper.h" +#include "L1Trigger/L1TGlobal/interface/PrescalesVetosFractHelper.h" // forward declarations @@ -102,7 +104,7 @@ namespace l1t { // It is provided only until prescales and masks are available as CondFormats... // Most users should simply ignore this method and use the default ctor only! // Will look for prescale csv file in L1Trigger/L1TGlobal/data/Luminosity/startup/ - void OverridePrescalesAndMasks(std::string filename, unsigned int psColumn = 1); + void OverridePrescalesAndMasks(std::string filename, unsigned int psColumn = 1.); /// initialize the class (mainly reserve) void retrieveL1(const edm::Event& iEvent, const edm::EventSetup& evSetup); // using helper @@ -127,7 +129,7 @@ namespace l1t { const bool getFinalDecisionByBit(int& bit, bool& decision) const; // Access Prescale - const bool getPrescaleByBit(int& bit, int& prescale) const; + const bool getPrescaleByBit(int& bit, double& prescale) const; // Access Masks: // follows logic of uGT board: @@ -143,7 +145,7 @@ namespace l1t { const bool getFinalDecisionByName(const std::string& algName, bool& decision) const; // Access Prescales - const bool getPrescaleByName(const std::string& algName, int& prescale) const; + const bool getPrescaleByName(const std::string& algName, double& prescale) const; // Access Masks (see note) above const bool getMaskByName(const std::string& algName, std::vector& mask) const; @@ -154,7 +156,7 @@ namespace l1t { inline const std::vector>& decisionsFinal() { return m_decisionsFinal; } // Access all prescales - inline const std::vector>& prescales() { return m_prescales; } + inline const std::vector>& prescales() { return m_prescales; } // Access Masks (see note) above inline const std::vector>>& masks() { return m_masks; } @@ -186,7 +188,7 @@ namespace l1t { // prescale factors bool m_readPrescalesFromFile; - const l1t::PrescalesVetosHelper* m_l1GtPrescalesVetoes; + const l1t::PrescalesVetosFractHelper* m_l1GtPrescalesVetoes; unsigned long long m_l1GtPfAlgoCacheID; // prescales and masks @@ -205,8 +207,8 @@ namespace l1t { unsigned int m_PreScaleColumn; unsigned int m_numberOfPreScaleColumns; - std::vector> m_initialPrescaleFactorsAlgoTrig; - const std::vector>* m_prescaleFactorsAlgoTrig; + std::vector> m_initialPrescaleFactorsAlgoTrig; + const std::vector>* m_prescaleFactorsAlgoTrig; const std::map> m_initialTriggerMaskAlgoTrig; const std::map>* m_triggerMaskAlgoTrig; // vector stores the BX @@ -220,7 +222,7 @@ namespace l1t { std::vector> m_decisionsInitial; std::vector> m_decisionsInterm; std::vector> m_decisionsFinal; - std::vector> m_prescales; + std::vector> m_prescales; std::vector>> m_masks; // vector stores the bx's that are mask for given algo /// verbosity level @@ -229,10 +231,12 @@ namespace l1t { std::unique_ptr m_l1tGlobalUtilHelper; edm::ESGetToken m_L1TUtmTriggerMenuRunToken; - edm::ESGetToken m_L1TGlobalPrescalesVetosRunToken; + edm::ESGetToken + m_L1TGlobalPrescalesVetosFractRunToken; edm::ESGetToken m_L1TUtmTriggerMenuEventToken; - edm::ESGetToken m_L1TGlobalPrescalesVetosEventToken; + edm::ESGetToken + m_L1TGlobalPrescalesVetosFractEventToken; }; template @@ -248,7 +252,7 @@ namespace l1t { T& module, UseEventSetupIn useEventSetupIn) : L1TGlobalUtil() { - m_l1tGlobalUtilHelper.reset(new L1TGlobalUtilHelper(pset, iC, module)); + m_l1tGlobalUtilHelper = std::make_unique(pset, iC, module); m_readPrescalesFromFile = m_l1tGlobalUtilHelper->readPrescalesFromFile(); eventSetupConsumes(iC, useEventSetupIn); } @@ -270,7 +274,8 @@ namespace l1t { edm::InputTag const& l1tExtBlkInputTag, UseEventSetupIn useEventSetupIn) : L1TGlobalUtil() { - m_l1tGlobalUtilHelper.reset(new L1TGlobalUtilHelper(pset, iC, module, l1tAlgBlkInputTag, l1tExtBlkInputTag)); + m_l1tGlobalUtilHelper = + std::make_unique(pset, iC, module, l1tAlgBlkInputTag, l1tExtBlkInputTag); m_readPrescalesFromFile = m_l1tGlobalUtilHelper->readPrescalesFromFile(); eventSetupConsumes(iC, useEventSetupIn); } diff --git a/L1Trigger/L1TGlobal/interface/MuonTemplate.h b/L1Trigger/L1TGlobal/interface/MuonTemplate.h index 8a68486b9981c..4b04285f4d8d1 100644 --- a/L1Trigger/L1TGlobal/interface/MuonTemplate.h +++ b/L1Trigger/L1TGlobal/interface/MuonTemplate.h @@ -53,6 +53,10 @@ class MuonTemplate : public GlobalCondition { public: // typedef for a single object template struct ObjectParameter { + unsigned int unconstrainedPtHigh; + unsigned int unconstrainedPtLow; + unsigned int impactParameterHigh; + unsigned int impactParameterLow; unsigned int ptHighThreshold; unsigned int ptLowThreshold; unsigned int indexHigh; @@ -62,6 +66,7 @@ class MuonTemplate : public GlobalCondition { bool requestIso; unsigned int qualityLUT; unsigned int isolationLUT; + unsigned int impactParameterLUT; unsigned long long etaRange; unsigned int phiHigh; unsigned int phiLow; diff --git a/L1Trigger/L1TGlobal/plugins/GtRecordDump.cc b/L1Trigger/L1TGlobal/plugins/GtRecordDump.cc index eac6f851fcfe3..501e39290dd4c 100644 --- a/L1Trigger/L1TGlobal/plugins/GtRecordDump.cc +++ b/L1Trigger/L1TGlobal/plugins/GtRecordDump.cc @@ -195,7 +195,7 @@ namespace l1t { const std::vector> initialDecisions = m_gtUtil->decisionsInitial(); const std::vector> intermDecisions = m_gtUtil->decisionsInterm(); const std::vector> finalDecisions = m_gtUtil->decisionsFinal(); - const std::vector> prescales = m_gtUtil->prescales(); + const std::vector> prescales = m_gtUtil->prescales(); const std::vector>> masks = m_gtUtil->masks(); LogDebug("GtRecordDump") << "retrieved all event vectors " << endl; @@ -232,7 +232,7 @@ namespace l1t { (m_algoSummary.find(name)->second).at(2) += 1; // get the prescale and mask (needs some error checking here) - int prescale = (prescales.at(i)).second; + double prescale = (prescales.at(i)).second; std::vector mask = (masks.at(i)).second; if (m_dumpTriggerResults && name != "NULL") diff --git a/L1Trigger/L1TGlobal/plugins/L1TGlobalProducer.cc b/L1Trigger/L1TGlobal/plugins/L1TGlobalProducer.cc index eed14fe8d73c5..3584ee55f4355 100644 --- a/L1Trigger/L1TGlobal/plugins/L1TGlobalProducer.cc +++ b/L1Trigger/L1TGlobal/plugins/L1TGlobalProducer.cc @@ -117,7 +117,7 @@ L1TGlobalProducer::L1TGlobalProducer(const edm::ParameterSet& parSet) m_l1GtStableParToken = esConsumes(); m_l1GtMenuToken = esConsumes(); if (!(m_algorithmTriggersUnprescaled && m_algorithmTriggersUnmasked)) { - m_l1GtPrescaleVetosToken = esConsumes(); + m_l1GtPrescaleVetosToken = esConsumes(); } if (m_getPrescaleColumnFromData || m_requireMenuToMatchAlgoBlkInput) { m_algoblkInputToken = consumes>(m_algoblkInputTag); @@ -225,9 +225,9 @@ L1TGlobalProducer::L1TGlobalProducer(const edm::ParameterSet& parSet) m_currentLumi = 0; // Set default, initial, dummy prescale factor table - std::vector> temp_prescaleTable; + std::vector> temp_prescaleTable; - temp_prescaleTable.push_back(std::vector()); + temp_prescaleTable.push_back(std::vector()); m_initialPrescaleFactorsAlgoTrig = temp_prescaleTable; } @@ -385,15 +385,16 @@ void L1TGlobalProducer::produce(edm::Event& iEvent, const edm::EventSetup& evSet // Only get event record if not unprescaled and not unmasked if (!(m_algorithmTriggersUnprescaled && m_algorithmTriggersUnmasked)) { - unsigned long long l1GtPfAlgoCacheID = evSetup.get().cacheIdentifier(); + unsigned long long l1GtPfAlgoCacheID = evSetup.get().cacheIdentifier(); if (m_l1GtPfAlgoCacheID != l1GtPfAlgoCacheID) { - edm::ESHandle l1GtPrescalesVetoes = evSetup.getHandle(m_l1GtPrescaleVetosToken); - const L1TGlobalPrescalesVetos* es = l1GtPrescalesVetoes.product(); - m_l1GtPrescalesVetoes = PrescalesVetosHelper::readFromEventSetup(es); + edm::ESHandle l1GtPrescalesFractVetoes = + evSetup.getHandle(m_l1GtPrescaleVetosToken); + const L1TGlobalPrescalesVetosFract* es = l1GtPrescalesFractVetoes.product(); + m_l1GtPrescalesVetosFract = PrescalesVetosFractHelper::readFromEventSetup(es); - m_prescaleFactorsAlgoTrig = &(m_l1GtPrescalesVetoes->prescaleTable()); - m_triggerMaskVetoAlgoTrig = &(m_l1GtPrescalesVetoes->triggerMaskVeto()); + m_prescaleFactorsAlgoTrig = &(m_l1GtPrescalesVetosFract->prescaleTable()); + m_triggerMaskVetoAlgoTrig = &(m_l1GtPrescalesVetosFract->triggerMaskVeto()); m_l1GtPfAlgoCacheID = l1GtPfAlgoCacheID; } @@ -539,7 +540,7 @@ void L1TGlobalProducer::produce(edm::Event& iEvent, const edm::EventSetup& evSet pfAlgoSetIndex = max; } - const std::vector& prescaleFactorsAlgoTrig = (*m_prescaleFactorsAlgoTrig).at(pfAlgoSetIndex); + const std::vector& prescaleFactorsAlgoTrig = (*m_prescaleFactorsAlgoTrig).at(pfAlgoSetIndex); // For now, set masks according to prescale value of 0 m_initialTriggerMaskAlgoTrig.clear(); diff --git a/L1Trigger/L1TGlobal/plugins/L1TGlobalProducer.h b/L1Trigger/L1TGlobal/plugins/L1TGlobalProducer.h index b61162d8eb520..b8e58777dba81 100644 --- a/L1Trigger/L1TGlobal/plugins/L1TGlobalProducer.h +++ b/L1Trigger/L1TGlobal/plugins/L1TGlobalProducer.h @@ -21,13 +21,13 @@ #include "CondFormats/L1TObjects/interface/L1TGlobalParameters.h" #include "L1Trigger/L1TGlobal/interface/GlobalParamsHelper.h" -#include "L1Trigger/L1TGlobal/interface/PrescalesVetosHelper.h" +#include "L1Trigger/L1TGlobal/interface/PrescalesVetosFractHelper.h" #include "CondFormats/L1TObjects/interface/L1TUtmTriggerMenu.h" #include "CondFormats/DataRecord/interface/L1TUtmTriggerMenuRcd.h" #include "CondFormats/L1TObjects/interface/L1TGlobalParameters.h" #include "CondFormats/DataRecord/interface/L1TGlobalParametersRcd.h" -#include "CondFormats/L1TObjects/interface/L1TGlobalPrescalesVetos.h" -#include "CondFormats/DataRecord/interface/L1TGlobalPrescalesVetosRcd.h" +#include "CondFormats/L1TObjects/interface/L1TGlobalPrescalesVetosFract.h" +#include "CondFormats/DataRecord/interface/L1TGlobalPrescalesVetosFractRcd.h" class L1TGlobalParameters; class L1GtParameters; @@ -91,11 +91,11 @@ class L1TGlobalProducer : public edm::stream::EDProducer<> { unsigned long long m_l1GtBMCacheID; /// prescale factors - const l1t::PrescalesVetosHelper* m_l1GtPrescalesVetoes; + const l1t::PrescalesVetosFractHelper* m_l1GtPrescalesVetosFract; unsigned long long m_l1GtPfAlgoCacheID; - const std::vector>* m_prescaleFactorsAlgoTrig; - std::vector> m_initialPrescaleFactorsAlgoTrig; + const std::vector>* m_prescaleFactorsAlgoTrig; + std::vector> m_initialPrescaleFactorsAlgoTrig; /// CSV file for prescales std::string m_prescalesFile; @@ -184,7 +184,7 @@ class L1TGlobalProducer : public edm::stream::EDProducer<> { edm::ESGetToken m_l1GtStableParToken; edm::ESGetToken m_l1GtMenuToken; - edm::ESGetToken m_l1GtPrescaleVetosToken; + edm::ESGetToken m_l1GtPrescaleVetosToken; }; #endif /*L1TGlobalProducer_h*/ diff --git a/L1Trigger/L1TGlobal/plugins/L1TGlobalSummary.cc b/L1Trigger/L1TGlobal/plugins/L1TGlobalSummary.cc index 05d5d070c2133..52c61e8d5f8ef 100644 --- a/L1Trigger/L1TGlobal/plugins/L1TGlobalSummary.cc +++ b/L1Trigger/L1TGlobal/plugins/L1TGlobalSummary.cc @@ -143,7 +143,7 @@ void L1TGlobalSummary::endRun(Run const&, EventSetup const&) { auto const& name = prescales.at(i).first; if (name != "NULL") { - int prescale = prescales.at(i).second; + double prescale = prescales.at(i).second; auto const& mask = masks.at(i).second; out << std::dec << setfill(' ') << " " << setw(5) << i << " " << setw(40) << name << " " << setw(7) << resultInit << setw(7) << resultPre << setw(7) << resultFin << setw(10) << prescale << setw(11) @@ -180,7 +180,7 @@ void L1TGlobalSummary::analyze(const edm::Event& iEvent, const edm::EventSetup& const std::vector> initialDecisions = gtUtil_->decisionsInitial(); const std::vector> intermDecisions = gtUtil_->decisionsInterm(); const std::vector> finalDecisions = gtUtil_->decisionsFinal(); - const std::vector> prescales = gtUtil_->prescales(); + const std::vector> prescales = gtUtil_->prescales(); const std::vector>> masks = gtUtil_->masks(); if ((decisionCount_.size() != gtUtil_->decisionsInitial().size()) || @@ -214,7 +214,7 @@ void L1TGlobalSummary::analyze(const edm::Event& iEvent, const edm::EventSetup& bool resultFin = (finalDecisions.at(i)).second; // get the prescale and mask (needs some error checking here) - int prescale = (prescales.at(i)).second; + double prescale = (prescales.at(i)).second; std::vector mask = (masks.at(i)).second; if (resultInit) diff --git a/L1Trigger/L1TGlobal/plugins/TriggerMenuParser.cc b/L1Trigger/L1TGlobal/plugins/TriggerMenuParser.cc index 793955295d825..099d05ec48eb1 100644 --- a/L1Trigger/L1TGlobal/plugins/TriggerMenuParser.cc +++ b/L1Trigger/L1TGlobal/plugins/TriggerMenuParser.cc @@ -1068,6 +1068,10 @@ bool l1t::TriggerMenuParser::parseMuon(tmeventsetup::esCondition condMu, unsigne relativeBx = object.getBxOffset(); // Loop over the cuts for this object + int upperUnconstrainedPtInd = -1; + int lowerUnconstrainedPtInd = 0; + int upperImpactParameterInd = -1; + int lowerImpactParameterInd = 0; int upperThresholdInd = -1; int lowerThresholdInd = 0; int upperIndexInd = -1; @@ -1076,15 +1080,27 @@ bool l1t::TriggerMenuParser::parseMuon(tmeventsetup::esCondition condMu, unsigne unsigned int etaWindow1Lower = -1, etaWindow1Upper = -1, etaWindow2Lower = -1, etaWindow2Upper = -1; int cntPhi = 0; unsigned int phiWindow1Lower = -1, phiWindow1Upper = -1, phiWindow2Lower = -1, phiWindow2Upper = -1; - int isolationLUT = 0xF; //default is to ignore unless specified. - int charge = -1; //default value is to ignore unless specified - int qualityLUT = 0xFFFF; //default is to ignore unless specified. + int isolationLUT = 0xF; //default is to ignore unless specified. + int impactParameterLUT = 0xF; //default is to ignore unless specified + int charge = -1; //default value is to ignore unless specified + int qualityLUT = 0xFFFF; //default is to ignore unless specified. const std::vector& cuts = object.getCuts(); for (size_t kk = 0; kk < cuts.size(); kk++) { const esCut cut = cuts.at(kk); switch (cut.getCutType()) { + case esCutType::UnconstrainedPt: + lowerUnconstrainedPtInd = cut.getMinimum().index; + upperUnconstrainedPtInd = cut.getMaximum().index; + break; + + case esCutType::ImpactParameter: + lowerImpactParameterInd = cut.getMinimum().index; + upperImpactParameterInd = cut.getMaximum().index; + impactParameterLUT = l1tstr2int(cut.getData()); + break; + case esCutType::Threshold: lowerThresholdInd = cut.getMinimum().index; upperThresholdInd = cut.getMaximum().index; @@ -1151,6 +1167,12 @@ bool l1t::TriggerMenuParser::parseMuon(tmeventsetup::esCondition condMu, unsigne } //end loop over cuts // Set the parameter cuts + objParameter[cnt].unconstrainedPtHigh = upperUnconstrainedPtInd; + objParameter[cnt].unconstrainedPtLow = lowerUnconstrainedPtInd; + objParameter[cnt].impactParameterHigh = upperImpactParameterInd; + objParameter[cnt].impactParameterLow = lowerImpactParameterInd; + objParameter[cnt].impactParameterLUT = impactParameterLUT; + objParameter[cnt].ptHighThreshold = upperThresholdInd; objParameter[cnt].ptLowThreshold = lowerThresholdInd; diff --git a/L1Trigger/L1TGlobal/python/simGtExtFakeProd_cfi.py b/L1Trigger/L1TGlobal/python/simGtExtFakeProd_cfi.py index 8e8ad3772ff97..fa89c31c5a692 100644 --- a/L1Trigger/L1TGlobal/python/simGtExtFakeProd_cfi.py +++ b/L1Trigger/L1TGlobal/python/simGtExtFakeProd_cfi.py @@ -12,3 +12,7 @@ ## tcdsRecordLabel= cms.InputTag("tcdsDigis","tcdsRecord") ## use this tag to trigger fetching the tcds record and set the Prefire veto bit ) +simGtExtUnprefireable = simGtExtFakeProd.clone( + tcdsRecordLabel = cms.InputTag("tcdsDigis","tcdsRecord") +) + diff --git a/L1Trigger/L1TGlobal/src/GlobalBoard.cc b/L1Trigger/L1TGlobal/src/GlobalBoard.cc index 9b3bbc8402d5a..c21d7544d718d 100644 --- a/L1Trigger/L1TGlobal/src/GlobalBoard.cc +++ b/L1Trigger/L1TGlobal/src/GlobalBoard.cc @@ -9,7 +9,8 @@ * * \author: M. Fierro - HEPHY Vienna - ORCA version * \author: Vasile Mihai Ghete - HEPHY Vienna - CMSSW version - * \author: Vladimir Rekovic - add correlation with overlap removal cases + * \author: Vladimir Rekovic - add correlation with overlap removal cases + * - fractional prescales * * $Date$ * $Revision$ @@ -830,7 +831,7 @@ void l1t::GlobalBoard::runFDL(edm::Event& iEvent, const int iBxInEvent, const int totalBxInEvent, const unsigned int numberPhysTriggers, - const std::vector& prescaleFactorsAlgoTrig, + const std::vector& prescaleFactorsAlgoTrig, const std::vector& triggerMaskAlgoTrig, const std::vector& triggerMaskVetoAlgoTrig, const bool algorithmTriggersUnprescaled, diff --git a/L1Trigger/L1TGlobal/src/L1TGlobalUtil.cc b/L1Trigger/L1TGlobal/src/L1TGlobalUtil.cc index 2bb6b1c0da9ee..e5daaf9d81c58 100644 --- a/L1Trigger/L1TGlobal/src/L1TGlobalUtil.cc +++ b/L1Trigger/L1TGlobal/src/L1TGlobalUtil.cc @@ -109,7 +109,7 @@ void l1t::L1TGlobalUtil::retrieveL1Setup(const edm::EventSetup& evSetup, bool is } if (!m_readPrescalesFromFile) { - auto vetosRcd = evSetup.get(); + auto vetosRcd = evSetup.get(); unsigned long long l1GtPfAlgoCacheID = vetosRcd.cacheIdentifier(); if (m_l1GtPfAlgoCacheID != l1GtPfAlgoCacheID) { @@ -122,13 +122,13 @@ void l1t::L1TGlobalUtil::retrieveL1Setup(const edm::EventSetup& evSetup, bool is m_numberOfPreScaleColumns = 0; m_numberPhysTriggers = 0; - const L1TGlobalPrescalesVetos* es = nullptr; + const L1TGlobalPrescalesVetosFract* es = nullptr; if (isRun) { - es = &vetosRcd.get(m_L1TGlobalPrescalesVetosRunToken); + es = &vetosRcd.get(m_L1TGlobalPrescalesVetosFractRunToken); } else { - es = &vetosRcd.get(m_L1TGlobalPrescalesVetosEventToken); + es = &vetosRcd.get(m_L1TGlobalPrescalesVetosFractEventToken); } - m_l1GtPrescalesVetoes = PrescalesVetosHelper::readFromEventSetup(es); + m_l1GtPrescalesVetoes = PrescalesVetosFractHelper::readFromEventSetup(es); m_prescaleFactorsAlgoTrig = &(m_l1GtPrescalesVetoes->prescaleTable()); m_numberOfPreScaleColumns = m_prescaleFactorsAlgoTrig->size(); @@ -163,7 +163,7 @@ void l1t::L1TGlobalUtil::retrieveL1Setup(const edm::EventSetup& evSetup, bool is m_PreScaleColumn = 0; } //std::cout << "Using prescale column: " << m_PreScaleColumn << std::endl; - const std::vector& prescaleSet = (*m_prescaleFactorsAlgoTrig)[m_PreScaleColumn]; + const std::vector& prescaleSet = (*m_prescaleFactorsAlgoTrig)[m_PreScaleColumn]; for (std::map::const_iterator itAlgo = m_algorithmMap->begin(); itAlgo != m_algorithmMap->end(); @@ -240,7 +240,7 @@ void l1t::L1TGlobalUtil::retrieveL1Event(const edm::Event& iEvent, m_PreScaleColumn = 0; } } - const std::vector& prescaleSet = (*m_prescaleFactorsAlgoTrig)[m_PreScaleColumn]; + const std::vector& prescaleSet = (*m_prescaleFactorsAlgoTrig)[m_PreScaleColumn]; // Grab the final OR from the AlgBlk, m_finalOR = algBlk->getFinalOR(); @@ -285,7 +285,7 @@ void l1t::L1TGlobalUtil::loadPrescalesAndMasks() { inputPrescaleFile.open(m_preScaleFileName); std::vector > vec; - std::vector > prescale_vec; + std::vector > prescale_vec; if (inputPrescaleFile) { std::string prefix1("#"); @@ -339,7 +339,7 @@ void l1t::L1TGlobalUtil::loadPrescalesAndMasks() { if (NumPrescaleSets > 0) { // Fill default prescale set for (int iSet = 0; iSet < NumPrescaleSets; iSet++) { - prescale_vec.push_back(std::vector()); + prescale_vec.push_back(std::vector()); for (unsigned int iBit = 0; iBit < m_numberPhysTriggers; ++iBit) { int inputDefaultPrescale = 1; prescale_vec[iSet].push_back(inputDefaultPrescale); @@ -380,7 +380,7 @@ void l1t::L1TGlobalUtil::loadPrescalesAndMasks() { m_PreScaleColumn = 0; for (int col = 0; col < 1; col++) { - prescale_vec.push_back(std::vector()); + prescale_vec.push_back(std::vector()); for (unsigned int iBit = 0; iBit < m_numberPhysTriggers; ++iBit) { int inputDefaultPrescale = 0; prescale_vec[col].push_back(inputDefaultPrescale); @@ -399,14 +399,15 @@ void l1t::L1TGlobalUtil::eventSetupConsumes(edm::ConsumesCollector& iC, UseEvent if (useEventSetupIn == UseEventSetupIn::Run || useEventSetupIn == UseEventSetupIn::RunAndEvent) { m_L1TUtmTriggerMenuRunToken = iC.esConsumes(); if (!m_readPrescalesFromFile) { - m_L1TGlobalPrescalesVetosRunToken = - iC.esConsumes(); + m_L1TGlobalPrescalesVetosFractRunToken = + iC.esConsumes(); } } if (useEventSetupIn == UseEventSetupIn::Event || useEventSetupIn == UseEventSetupIn::RunAndEvent) { m_L1TUtmTriggerMenuEventToken = iC.esConsumes(); if (!m_readPrescalesFromFile) { - m_L1TGlobalPrescalesVetosEventToken = iC.esConsumes(); + m_L1TGlobalPrescalesVetosFractEventToken = + iC.esConsumes(); } } } @@ -505,7 +506,7 @@ const bool l1t::L1TGlobalUtil::getFinalDecisionByBit(int& bit, bool& decision) c return false; //couldn't get the information requested. } -const bool l1t::L1TGlobalUtil::getPrescaleByBit(int& bit, int& prescale) const { +const bool l1t::L1TGlobalUtil::getPrescaleByBit(int& bit, double& prescale) const { // Need some check that this is a valid bit if ((m_prescales[bit]).first != "NULL") { prescale = (m_prescales[bit]).second; @@ -553,7 +554,7 @@ const bool l1t::L1TGlobalUtil::getFinalDecisionByName(const std::string& algName return false; //trigger name was not the menu. } -const bool l1t::L1TGlobalUtil::getPrescaleByName(const std::string& algName, int& prescale) const { +const bool l1t::L1TGlobalUtil::getPrescaleByName(const std::string& algName, double& prescale) const { int bit = -1; if (getAlgBitFromName(algName, bit)) { prescale = (m_prescales[bit]).second; diff --git a/L1Trigger/L1TGlobal/src/MuCondition.cc b/L1Trigger/L1TGlobal/src/MuCondition.cc index c1e16a39bfd24..f89256dfe454b 100644 --- a/L1Trigger/L1TGlobal/src/MuCondition.cc +++ b/L1Trigger/L1TGlobal/src/MuCondition.cc @@ -9,7 +9,7 @@ * * \author: Vasile Mihai Ghete - HEPHY Vienna * Vladimir Rekovic - extend for indexing - * + * Rick Cavanaugh - include displaced muons * */ @@ -382,6 +382,33 @@ const bool l1t::MuCondition::checkObjectParameter(const int iCondition, << "\n\t hwQual = 0x " << cand.hwQual() << "\n\t hwIso = 0x " << cand.hwIso() << std::dec << std::endl; + if (objPar.unconstrainedPtHigh > 0) // Check if unconstrained pT cut-window is valid + { + if (!checkUnconstrainedPt(objPar.unconstrainedPtLow, + objPar.unconstrainedPtHigh, + cand.hwPtUnconstrained(), + m_gtMuonTemplate->condGEq())) { + LogDebug("L1TGlobal") << "\t\t Muon Failed unconstrainedPt checkThreshold; iCondition = " << iCondition + << std::endl; + return false; + } + } + + if (objPar.impactParameterLUT != 0) // Check if impact parameter LUT is valid. 0xF is default; 0x0 is invalid + { + // check impact parameter ( bit check ) with impact parameter LUT + // sanity check on candidate impact parameter + if (cand.hwDXY() > 3) { + LogDebug("L1TGlobal") << "\t\t l1t::Candidate has out of range hwDXY = " << cand.hwDXY() << std::endl; + return false; + } + bool passImpactParameterLUT = ((objPar.impactParameterLUT >> cand.hwDXY()) & 1); + if (!passImpactParameterLUT) { + LogDebug("L1TGlobal") << "\t\t l1t::Candidate failed impact parameter requirement" << std::endl; + return false; + } + } + if (!checkThreshold(objPar.ptLowThreshold, objPar.ptHighThreshold, cand.hwPt(), m_gtMuonTemplate->condGEq())) { LogDebug("L1TGlobal") << "\t\t Muon Failed checkThreshold " << std::endl; return false; diff --git a/L1Trigger/L1TGlobal/test/Raw2Digi_uGTEmulation.py b/L1Trigger/L1TGlobal/test/Raw2Digi_uGTEmulation.py index 246542ff5cae8..16d6d4209139d 100644 --- a/L1Trigger/L1TGlobal/test/Raw2Digi_uGTEmulation.py +++ b/L1Trigger/L1TGlobal/test/Raw2Digi_uGTEmulation.py @@ -75,17 +75,16 @@ # enable debug message logging for our modules -process.MessageLogger.categories.append('L1TCaloEvents') -process.MessageLogger.categories.append('L1TGlobalEvents') + +process.MessageLogger.L1TCaloEvents=dict() +process.MessageLogger.L1TGlobalEvents=dict() process.MessageLogger.suppressInfo = cms.untracked.vstring('Geometry', 'AfterSource') if (options.dump): - process.MessageLogger.destinations.append('infos') - process.MessageLogger.infos = cms.untracked.PSet( + process.MessageLogger.files.infos = cms.untracked.PSet( INFO = cms.untracked.PSet(limit = cms.untracked.int32(0)), L1TCaloEvents = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), limit = cms.untracked.int32(10000) ) ) diff --git a/L1Trigger/L1TGlobal/test/l1tGlobalEmulation_FromDigi.py b/L1Trigger/L1TGlobal/test/l1tGlobalEmulation_FromDigi.py index 6ad85e35b6bb8..ed8e7f15121f2 100644 --- a/L1Trigger/L1TGlobal/test/l1tGlobalEmulation_FromDigi.py +++ b/L1Trigger/L1TGlobal/test/l1tGlobalEmulation_FromDigi.py @@ -68,9 +68,9 @@ # enable debug message logging for our modules -#process.MessageLogger.categories.append('L1TCaloEvents') -#process.MessageLogger.categories.append('L1TGlobalEvents') -#process.MessageLogger.categories.append('l1t|Global') +# +# +# process.MessageLogger.debugModules = cms.untracked.vstring('simGlobalStage2Digis') process.MessageLogger.cerr.threshold = cms.untracked.string('DEBUG') diff --git a/L1Trigger/L1TGlobal/test/l1tGlobalEmulation_FromRAW.py b/L1Trigger/L1TGlobal/test/l1tGlobalEmulation_FromRAW.py index 63fc991f6c63d..ed10b57dd5e62 100644 --- a/L1Trigger/L1TGlobal/test/l1tGlobalEmulation_FromRAW.py +++ b/L1Trigger/L1TGlobal/test/l1tGlobalEmulation_FromRAW.py @@ -130,16 +130,14 @@ process.TFileService.fileName = cms.string('l1tCalo_2016_histos.root') # enable debug message logging for our modules -process.MessageLogger.categories.append('L1TCaloEvents') +process.MessageLogger.L1TCaloEvents=dict() process.MessageLogger.suppressInfo = cms.untracked.vstring('Geometry', 'AfterSource') if (options.dumpRaw): - process.MessageLogger.destinations.append('infos') - process.MessageLogger.infos = cms.untracked.PSet( + process.MessageLogger.files.infos = cms.untracked.PSet( INFO = cms.untracked.PSet(limit = cms.untracked.int32(0)), L1TCaloEvents = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), limit = cms.untracked.int32(10000) ) ) diff --git a/L1Trigger/L1TGlobal/test/raw2l1.py b/L1Trigger/L1TGlobal/test/raw2l1.py index d0d3228f674f5..3e9123b19cb43 100644 --- a/L1Trigger/L1TGlobal/test/raw2l1.py +++ b/L1Trigger/L1TGlobal/test/raw2l1.py @@ -61,7 +61,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 1 else: process.MessageLogger.cerr.FwkReport.reportEvery = 100 -process.MessageLogger.categories.append('L1GtTrigReport') +process.MessageLogger.L1GtTrigReport=dict() process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(n)) diff --git a/L1Trigger/L1TGlobal/test/runGTSummary.py b/L1Trigger/L1TGlobal/test/runGTSummary.py index 80d793ab9866a..7648746913cd6 100644 --- a/L1Trigger/L1TGlobal/test/runGTSummary.py +++ b/L1Trigger/L1TGlobal/test/runGTSummary.py @@ -15,7 +15,7 @@ ##process.load('L1Trigger/L1TGlobal/debug_messages_cfi') ## process.MessageLogger.l1t_debug.l1t.limit = cms.untracked.int32(100000) -#process.MessageLogger.categories.append('l1t|Global') +# #process.MessageLogger.debugModules = cms.untracked.vstring('*') #process.MessageLogger.cerr.threshold = cms.untracked.string('DEBUG') diff --git a/L1Trigger/L1TGlobal/test/runGlobalFakeInputProducer.py b/L1Trigger/L1TGlobal/test/runGlobalFakeInputProducer.py index 2010bb6b04e07..8ef6cc094340d 100644 --- a/L1Trigger/L1TGlobal/test/runGlobalFakeInputProducer.py +++ b/L1Trigger/L1TGlobal/test/runGlobalFakeInputProducer.py @@ -65,7 +65,7 @@ process.load('L1Trigger/L1TGlobal/debug_messages_cfi') process.MessageLogger.l1t_debug.l1t.limit = cms.untracked.int32(100000) -#process.MessageLogger.categories.append('l1t|Global') +# #process.MessageLogger.debugModules = cms.untracked.vstring('*') #process.MessageLogger.cerr.threshold = cms.untracked.string('DEBUG') @@ -292,7 +292,7 @@ process.l1GtTrigReport.PrintVerbosity = 2 process.report = cms.Path(process.l1GtTrigReport) -process.MessageLogger.categories.append("MuConditon") +process.MessageLogger.MuConditon=cms.untracked.PSet() if useMCtoGT: process.gtInput = process.mcL1GTinput.clone() diff --git a/L1Trigger/L1TGlobal/test/unpackBuffers-CaloStage2_uGTEmulation.py b/L1Trigger/L1TGlobal/test/unpackBuffers-CaloStage2_uGTEmulation.py index f1fca870b2895..658b5dd6117de 100644 --- a/L1Trigger/L1TGlobal/test/unpackBuffers-CaloStage2_uGTEmulation.py +++ b/L1Trigger/L1TGlobal/test/unpackBuffers-CaloStage2_uGTEmulation.py @@ -148,18 +148,16 @@ # enable debug message logging for our modules -process.MessageLogger.categories.append('L1TCaloEvents') -process.MessageLogger.categories.append('L1TGlobalEvents') -process.MessageLogger.categories.append('Global') +process.MessageLogger.L1TCaloEvents=dict() +process.MessageLogger.L1TGlobalEvents=dict() +process.MessageLogger.Global=dict() process.MessageLogger.suppressInfo = cms.untracked.vstring('Geometry', 'AfterSource') if (options.dump): - process.MessageLogger.destinations.append('infos') - process.MessageLogger.infos = cms.untracked.PSet( + process.MessageLogger.files.infos = cms.untracked.PSet( INFO = cms.untracked.PSet(limit = cms.untracked.int32(0)), L1TCaloEvents = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), limit = cms.untracked.int32(10000) ) ) diff --git a/L1Trigger/L1THGCal/BuildFile.xml b/L1Trigger/L1THGCal/BuildFile.xml index 7b13987c4ffa0..4880fd3454af2 100644 --- a/L1Trigger/L1THGCal/BuildFile.xml +++ b/L1Trigger/L1THGCal/BuildFile.xml @@ -3,7 +3,6 @@ - diff --git a/L1Trigger/L1THGCal/plugins/BuildFile.xml b/L1Trigger/L1THGCal/plugins/BuildFile.xml index 63ea8c6be6049..5a0c82f26c6a3 100644 --- a/L1Trigger/L1THGCal/plugins/BuildFile.xml +++ b/L1Trigger/L1THGCal/plugins/BuildFile.xml @@ -1,16 +1,10 @@ - - - - - - @@ -18,13 +12,9 @@ - - - - diff --git a/L1Trigger/L1THGCal/test/BuildFile.xml b/L1Trigger/L1THGCal/test/BuildFile.xml index 711a14b7988e2..2ac017b6b45d1 100644 --- a/L1Trigger/L1THGCal/test/BuildFile.xml +++ b/L1Trigger/L1THGCal/test/BuildFile.xml @@ -1,11 +1,7 @@ - - - - diff --git a/L1Trigger/L1THGCalUtilities/BuildFile.xml b/L1Trigger/L1THGCalUtilities/BuildFile.xml index 0dbfa9cb6a44a..573e369a2271f 100644 --- a/L1Trigger/L1THGCalUtilities/BuildFile.xml +++ b/L1Trigger/L1THGCalUtilities/BuildFile.xml @@ -1,7 +1,6 @@ - diff --git a/L1Trigger/L1THGCalUtilities/plugins/BuildFile.xml b/L1Trigger/L1THGCalUtilities/plugins/BuildFile.xml index 412e5a217a64f..756a5db602dad 100644 --- a/L1Trigger/L1THGCalUtilities/plugins/BuildFile.xml +++ b/L1Trigger/L1THGCalUtilities/plugins/BuildFile.xml @@ -4,12 +4,10 @@ - - @@ -26,7 +24,6 @@ - diff --git a/L1Trigger/L1TMuon/interface/RegionalMuonRawDigiTranslator.h b/L1Trigger/L1TMuon/interface/RegionalMuonRawDigiTranslator.h index 89e38d00345d9..1bb1377411be3 100644 --- a/L1Trigger/L1TMuon/interface/RegionalMuonRawDigiTranslator.h +++ b/L1Trigger/L1TMuon/interface/RegionalMuonRawDigiTranslator.h @@ -7,13 +7,13 @@ namespace l1t { class RegionalMuonRawDigiTranslator { public: static void fillRegionalMuonCand( - RegionalMuonCand& mu, uint32_t raw_data_00_31, uint32_t raw_data_32_63, int proc, tftype tf, bool isKalman); - static void fillRegionalMuonCand(RegionalMuonCand& mu, uint64_t dataword, int proc, tftype tf, bool isKalman); + RegionalMuonCand& mu, uint32_t raw_data_00_31, uint32_t raw_data_32_63, int proc, tftype tf, bool isRun3); + static void fillRegionalMuonCand(RegionalMuonCand& mu, uint64_t dataword, int proc, tftype tf, bool isRun3); static void generatePackedDataWords(const RegionalMuonCand& mu, uint32_t& raw_data_00_31, uint32_t& raw_data_32_63, - bool isKalman); - static uint64_t generate64bitDataWord(const RegionalMuonCand& mu, bool isKalman); + bool isRun3); + static uint64_t generate64bitDataWord(const RegionalMuonCand& mu, bool isRun3); static int generateRawTrkAddress(const RegionalMuonCand&, bool isKalman); static constexpr unsigned ptMask_ = 0x1FF; @@ -31,9 +31,11 @@ namespace l1t { static constexpr unsigned signShift_ = 0; static constexpr unsigned signValidShift_ = 1; static constexpr unsigned dxyMask_ = 0x3; - static constexpr unsigned dxyShift_ = 2; + static constexpr unsigned bmtfDxyShift_ = 2; + static constexpr unsigned emtfDxyShift_ = 29; static constexpr unsigned ptUnconstrainedMask_ = 0xFF; - static constexpr unsigned ptUnconstrainedShift_ = 23; + static constexpr unsigned bmtfPtUnconstrainedShift_ = 23; + static constexpr unsigned emtfPtUnconstrainedShift_ = 20; static constexpr unsigned trackAddressMask_ = 0x1FFFFFFF; static constexpr unsigned trackAddressShift_ = 2; // relative shifts within track address diff --git a/L1Trigger/L1TMuon/plugins/L1TMuonProducer.cc b/L1Trigger/L1TMuon/plugins/L1TMuonProducer.cc index 041629377682e..62ee1100a83a3 100644 --- a/L1Trigger/L1TMuon/plugins/L1TMuonProducer.cc +++ b/L1Trigger/L1TMuon/plugins/L1TMuonProducer.cc @@ -355,8 +355,10 @@ void L1TMuonProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) // Set displacement information int hwPtUnconstrained{mu->hwPtUnconstrained()}; - outMu.setPtUnconstrained(hwPtUnconstrained == 0 ? 0 - : (hwPtUnconstrained - 1) * 0.5); // Don't want negative pT. + outMu.setPtUnconstrained( + hwPtUnconstrained == 0 + ? 0 + : (hwPtUnconstrained - 1)); // Don't want negative pT, unconstr. pT has LSB of 1 GeV. outMu.setHwPtUnconstrained(hwPtUnconstrained); outMu.setHwDXY(mu->hwDXY()); @@ -454,7 +456,9 @@ void L1TMuonProducer::addMuonsToCollections(MicroGMTConfiguration::InterMuonList mu->hwRank()}; int hwPtUnconstrained{mu->hwPtUnconstrained()}; - outMu.setPtUnconstrained(hwPtUnconstrained == 0 ? 0 : (hwPtUnconstrained - 1) * 0.5); // Don't want negative pT. + outMu.setPtUnconstrained(hwPtUnconstrained == 0 + ? 0 + : (hwPtUnconstrained - 1)); // Don't want negative pT, unconstr. pT has LSB of 1 GeV. outMu.setHwPtUnconstrained(hwPtUnconstrained); outMu.setHwDXY(mu->hwDXY()); diff --git a/L1Trigger/L1TMuon/src/MuonRawDigiTranslator.cc b/L1Trigger/L1TMuon/src/MuonRawDigiTranslator.cc index 2d947ba54b218..f5f8bf468401e 100644 --- a/L1Trigger/L1TMuon/src/MuonRawDigiTranslator.cc +++ b/L1Trigger/L1TMuon/src/MuonRawDigiTranslator.cc @@ -76,7 +76,8 @@ void l1t::MuonRawDigiTranslator::fillMuonStableQuantities(Muon& mu, uint32_t raw mu.setPhiAtVtx(muAtVtx.phi()); int hwPtUnconstrained{mu.hwPtUnconstrained()}; - mu.setPtUnconstrained(hwPtUnconstrained == 0 ? 0 : (hwPtUnconstrained - 1) * 0.5); // Don't want negative pT. + mu.setPtUnconstrained( + hwPtUnconstrained == 0 ? 0 : (hwPtUnconstrained - 1)); // Don't want negative pT, unconstr. pT has LSB of 1 GeV. } void l1t::MuonRawDigiTranslator::fillMuon( diff --git a/L1Trigger/L1TMuon/src/RegionalMuonRawDigiTranslator.cc b/L1Trigger/L1TMuon/src/RegionalMuonRawDigiTranslator.cc index dae2fd06445f4..482ee4fa754d9 100644 --- a/L1Trigger/L1TMuon/src/RegionalMuonRawDigiTranslator.cc +++ b/L1Trigger/L1TMuon/src/RegionalMuonRawDigiTranslator.cc @@ -1,8 +1,12 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "L1Trigger/L1TMuon/interface/RegionalMuonRawDigiTranslator.h" -void l1t::RegionalMuonRawDigiTranslator::fillRegionalMuonCand( - RegionalMuonCand& mu, uint32_t raw_data_00_31, uint32_t raw_data_32_63, int proc, tftype tf, bool isKalman) { +void l1t::RegionalMuonRawDigiTranslator::fillRegionalMuonCand(RegionalMuonCand& mu, + const uint32_t raw_data_00_31, + const uint32_t raw_data_32_63, + const int proc, + const tftype tf, + const bool isRun3) { // translations as defined in DN-15-017 mu.setHwPt((raw_data_00_31 >> ptShift_) & ptMask_); mu.setHwQual((raw_data_00_31 >> qualShift_) & qualMask_); @@ -40,7 +44,7 @@ void l1t::RegionalMuonRawDigiTranslator::fillRegionalMuonCand( mu.setTrackSubAddress(RegionalMuonCand::kWheelSide, detSide); mu.setTrackSubAddress(RegionalMuonCand::kWheelNum, wheelNum); - if (!isKalman) { // The Run-2 standard configuration + if (!isRun3) { // The Run-2 standard configuration mu.setTrackSubAddress(RegionalMuonCand::kStat1, statAddr1); mu.setTrackSubAddress(RegionalMuonCand::kStat2, statAddr2); mu.setTrackSubAddress(RegionalMuonCand::kStat3, statAddr3); @@ -54,8 +58,8 @@ void l1t::RegionalMuonRawDigiTranslator::fillRegionalMuonCand( mu.setTrackSubAddress(RegionalMuonCand::kStat3, statAddr2); mu.setTrackSubAddress(RegionalMuonCand::kStat4, statAddr1); // Additionally we now have displacement information from the BMTF - mu.setHwPtUnconstrained((raw_data_32_63 >> ptUnconstrainedShift_) & ptUnconstrainedMask_); - mu.setHwDXY((raw_data_32_63 >> dxyShift_) & dxyMask_); + mu.setHwPtUnconstrained((raw_data_32_63 >> bmtfPtUnconstrainedShift_) & ptUnconstrainedMask_); + mu.setHwDXY((raw_data_32_63 >> bmtfDxyShift_) & dxyMask_); } mu.setTrackSubAddress(RegionalMuonCand::kSegSelStat1, 0); mu.setTrackSubAddress(RegionalMuonCand::kSegSelStat2, 0); @@ -74,6 +78,10 @@ void l1t::RegionalMuonRawDigiTranslator::fillRegionalMuonCand( mu.setTrackSubAddress(RegionalMuonCand::kTrkNum, (rawTrackAddress >> emtfTrAddrTrkNumShift_) & emtfTrAddrTrkNumMask_); mu.setTrackSubAddress(RegionalMuonCand::kBX, (rawTrackAddress >> emtfTrAddrBxShift_) & emtfTrAddrBxMask_); + if (isRun3) { // In Run-3 we receive displaced muon information from EMTF + mu.setHwPtUnconstrained((raw_data_32_63 >> emtfPtUnconstrainedShift_) & ptUnconstrainedMask_); + mu.setHwDXY((raw_data_32_63 >> emtfDxyShift_) & dxyMask_); + } } else if (tf == omtf_neg || tf == omtf_pos) { mu.setTrackSubAddress(RegionalMuonCand::kLayers, (rawTrackAddress >> omtfTrAddrLayersShift_) & omtfTrAddrLayersMask_); @@ -91,15 +99,15 @@ void l1t::RegionalMuonRawDigiTranslator::fillRegionalMuonCand( } void l1t::RegionalMuonRawDigiTranslator::fillRegionalMuonCand( - RegionalMuonCand& mu, uint64_t dataword, int proc, tftype tf, bool isKalman) { + RegionalMuonCand& mu, const uint64_t dataword, const int proc, const tftype tf, const bool isRun3) { fillRegionalMuonCand( - mu, (uint32_t)(dataword & 0xFFFFFFFF), (uint32_t)((dataword >> 32) & 0xFFFFFFFF), proc, tf, isKalman); + mu, (uint32_t)(dataword & 0xFFFFFFFF), (uint32_t)((dataword >> 32) & 0xFFFFFFFF), proc, tf, isRun3); } void l1t::RegionalMuonRawDigiTranslator::generatePackedDataWords(const RegionalMuonCand& mu, uint32_t& raw_data_00_31, uint32_t& raw_data_32_63, - const bool isKalman) { + const bool isRun3) { int abs_eta = mu.hwEta(); if (abs_eta < 0) { abs_eta += (1 << (etaSignShift_ - absEtaShift_)); @@ -114,21 +122,24 @@ void l1t::RegionalMuonRawDigiTranslator::generatePackedDataWords(const RegionalM (mu.hwPhi() < 0) << phiSignShift_; // generate the raw track address from the subaddresses - int rawTrkAddr = generateRawTrkAddress(mu, isKalman); + int rawTrkAddr = generateRawTrkAddress(mu, isRun3); raw_data_32_63 = mu.hwSign() << signShift_ | mu.hwSignValid() << signValidShift_ | (rawTrkAddr & trackAddressMask_) << trackAddressShift_; - if (isKalman) { - raw_data_32_63 |= (mu.hwPtUnconstrained() & ptUnconstrainedMask_) << ptUnconstrainedShift_ | (mu.hwDXY() & dxyMask_) - << dxyShift_; + if (isRun3 && mu.trackFinderType() == bmtf) { + raw_data_32_63 |= (mu.hwPtUnconstrained() & ptUnconstrainedMask_) << bmtfPtUnconstrainedShift_ | + (mu.hwDXY() & dxyMask_) << bmtfDxyShift_; + } else if (isRun3 && (mu.trackFinderType() == emtf_pos || mu.trackFinderType() == emtf_neg)) { + raw_data_32_63 |= (mu.hwPtUnconstrained() & ptUnconstrainedMask_) << emtfPtUnconstrainedShift_ | + (mu.hwDXY() & dxyMask_) << emtfDxyShift_; } } -uint64_t l1t::RegionalMuonRawDigiTranslator::generate64bitDataWord(const RegionalMuonCand& mu, const bool isKalman) { +uint64_t l1t::RegionalMuonRawDigiTranslator::generate64bitDataWord(const RegionalMuonCand& mu, const bool isRun3) { uint32_t lsw; uint32_t msw; - generatePackedDataWords(mu, lsw, msw, isKalman); + generatePackedDataWords(mu, lsw, msw, isRun3); return (((uint64_t)msw) << 32) + lsw; } diff --git a/L1Trigger/L1TMuonEndCap/BuildFile.xml b/L1Trigger/L1TMuonEndCap/BuildFile.xml index b0e1ace8a2804..21810b917c9a9 100644 --- a/L1Trigger/L1TMuonEndCap/BuildFile.xml +++ b/L1Trigger/L1TMuonEndCap/BuildFile.xml @@ -7,3 +7,4 @@ + diff --git a/L1Trigger/L1TMuonEndCap/interface/Common.h b/L1Trigger/L1TMuonEndCap/interface/Common.h index 94c5795bab458..a2eea8d0bdd3a 100644 --- a/L1Trigger/L1TMuonEndCap/interface/Common.h +++ b/L1Trigger/L1TMuonEndCap/interface/Common.h @@ -64,6 +64,13 @@ namespace emtf { template using zone_array = std::array; + // NN features and predictions + constexpr int NUM_FEATURES = 23; // NN features + constexpr int NUM_PREDICTIONS = 2; // NN outputs + + using Feature = std::array; + using Prediction = std::array; + } // namespace emtf #endif diff --git a/L1Trigger/L1TMuonEndCap/interface/EMTFSetup.h b/L1Trigger/L1TMuonEndCap/interface/EMTFSetup.h index 086d89ccf46e4..4765f8d447aab 100644 --- a/L1Trigger/L1TMuonEndCap/interface/EMTFSetup.h +++ b/L1Trigger/L1TMuonEndCap/interface/EMTFSetup.h @@ -15,6 +15,7 @@ #include "L1Trigger/L1TMuonEndCap/interface/VersionControl.h" #include "L1Trigger/L1TMuonEndCap/interface/SectorProcessorLUT.h" #include "L1Trigger/L1TMuonEndCap/interface/PtAssignmentEngine.h" +#include "L1Trigger/L1TMuonEndCap/interface/PtAssignmentEngineDxy.h" class EMTFSetup { public: @@ -35,6 +36,8 @@ class EMTFSetup { PtAssignmentEngine* getPtAssignmentEngine() const { return pt_assign_engine_.get(); } + PtAssignmentEngineDxy* getPtAssignmentEngineDxy() const { return pt_assign_engine_dxy_.get(); } + // Setters //void set_fw_version(unsigned version) { fw_ver_ = version; } //void set_pt_lut_version(unsigned version) { pt_lut_ver_ = version; } @@ -62,6 +65,8 @@ class EMTFSetup { // Polymorphic class std::unique_ptr pt_assign_engine_; + // Displaced muon pT assignment + std::unique_ptr pt_assign_engine_dxy_; // Version numbers. Note: may be different from those in ConditionHelper unsigned fw_ver_; diff --git a/L1Trigger/L1TMuonEndCap/interface/PtAssignment.h b/L1Trigger/L1TMuonEndCap/interface/PtAssignment.h index f499f604f2db9..0faa20f4c0c58 100644 --- a/L1Trigger/L1TMuonEndCap/interface/PtAssignment.h +++ b/L1Trigger/L1TMuonEndCap/interface/PtAssignment.h @@ -4,11 +4,13 @@ #include "L1Trigger/L1TMuonEndCap/interface/Common.h" class PtAssignmentEngine; +class PtAssignmentEngineDxy; class PtAssignmentEngineAux; class PtAssignment { public: void configure(PtAssignmentEngine* pt_assign_engine, + PtAssignmentEngineDxy* pt_assign_engine_dxy, int verbose, int endcap, int sector, @@ -20,7 +22,8 @@ class PtAssignment { bool bugNegPt, bool bugGMTPhi, bool promoteMode7, - int modeQualVer); + int modeQualVer, + std::string pbFileName); void process(EMTFTrackCollection& best_tracks); @@ -29,6 +32,8 @@ class PtAssignment { private: PtAssignmentEngine* pt_assign_engine_; + PtAssignmentEngineDxy* pt_assign_engine_dxy_; + int verbose_, endcap_, sector_, bx_; bool bugGMTPhi_, promoteMode7_; diff --git a/L1Trigger/L1TMuonEndCap/interface/PtAssignmentEngineAux.h b/L1Trigger/L1TMuonEndCap/interface/PtAssignmentEngineAux.h index feeb826ade0c1..d05cfaf807a1f 100644 --- a/L1Trigger/L1TMuonEndCap/interface/PtAssignmentEngineAux.h +++ b/L1Trigger/L1TMuonEndCap/interface/PtAssignmentEngineAux.h @@ -14,8 +14,10 @@ class PtAssignmentEngineAux { public: // Functions for GMT quantities int getGMTPt(float pt) const; + int getGMTPtDxy(float pt) const; float getPtFromGMTPt(int gmt_pt) const; + float getPtFromGMTPtDxy(int gmt_pt_dxy) const; int getGMTPhi(int phi) const; int getGMTPhiV2(int phi) const; @@ -25,6 +27,8 @@ class PtAssignmentEngineAux { int getGMTQuality(int mode, int theta, bool promoteMode7, int version) const; std::pair getGMTCharge(int mode, const std::vector& phidiffs) const; + + int getGMTDxy(float dxy) const; }; #endif diff --git a/L1Trigger/L1TMuonEndCap/interface/PtAssignmentEngineDxy.h b/L1Trigger/L1TMuonEndCap/interface/PtAssignmentEngineDxy.h new file mode 100644 index 0000000000000..ead89ac7bebe9 --- /dev/null +++ b/L1Trigger/L1TMuonEndCap/interface/PtAssignmentEngineDxy.h @@ -0,0 +1,42 @@ +#ifndef L1TMuonEndCap_PtAssignmentEngineDxy_h +#define L1TMuonEndCap_PtAssignmentEngineDxy_h + +#include +#include +#include +#include +#include +#include + +#include "L1Trigger/L1TMuonEndCap/interface/Common.h" +#include "L1Trigger/L1TMuonEndCap/interface/PtAssignmentEngineAux2017.h" +#include "PhysicsTools/TensorFlow/interface/TensorFlow.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" + +class PtAssignmentEngineDxy { +public: + explicit PtAssignmentEngineDxy(); + virtual ~PtAssignmentEngineDxy(); + + void configure(int verbose, const std::string pbFileNameDxy); + + const PtAssignmentEngineAux2017& aux() const; + + virtual void calculate_pt_dxy(const EMTFTrack& track, emtf::Feature& feature, emtf::Prediction& prediction) const; + + virtual void preprocessing_dxy(const EMTFTrack& track, emtf::Feature& feature) const; + + virtual void call_tensorflow_dxy(const emtf::Feature& feature, emtf::Prediction& prediction) const; + +protected: + int verbose_; + + tensorflow::GraphDef* graphDefDxy_; + tensorflow::Session* sessionDxy_; + std::string pbFileNameDxy_; + std::string pbFilePathDxy_; + std::string inputNameDxy_; + std::vector outputNamesDxy_; +}; + +#endif \ No newline at end of file diff --git a/L1Trigger/L1TMuonEndCap/interface/VersionControl.h b/L1Trigger/L1TMuonEndCap/interface/VersionControl.h index 468a5865c636a..a782008114ffb 100644 --- a/L1Trigger/L1TMuonEndCap/interface/VersionControl.h +++ b/L1Trigger/L1TMuonEndCap/interface/VersionControl.h @@ -56,6 +56,7 @@ class VersionControl { bool readPtLUTFile_, fixMode15HighPt_; bool bug9BitDPhi_, bugMode7CLCT_, bugNegPt_, bugGMTPhi_, promoteMode7_; int modeQualVer_; + std::string pbFileName_; }; #endif diff --git a/L1Trigger/L1TMuonEndCap/python/simEmtfDigis_cfi.py b/L1Trigger/L1TMuonEndCap/python/simEmtfDigis_cfi.py index 48826260ea81a..aab3459047547 100644 --- a/L1Trigger/L1TMuonEndCap/python/simEmtfDigis_cfi.py +++ b/L1Trigger/L1TMuonEndCap/python/simEmtfDigis_cfi.py @@ -121,6 +121,8 @@ BugGMTPhi = cms.bool(False), # Some drift in uGMT phi conversion, off by up to a few degrees PromoteMode7 = cms.bool(False), # Assign station 2-3-4 tracks with |eta| > 1.6 SingleMu quality ModeQualVer = cms.int32(2), # Version 2 contains modified mode-quality mapping for 2018 + + ProtobufFileName = cms.string('model_graph.displ.5.pb'), # Protobuf file name to be used by NN based pT assignment ), ) diff --git a/L1Trigger/L1TMuonEndCap/src/EMTFSetup.cc b/L1Trigger/L1TMuonEndCap/src/EMTFSetup.cc index 7cdbb8fcdfe3b..711f94e75838d 100644 --- a/L1Trigger/L1TMuonEndCap/src/EMTFSetup.cc +++ b/L1Trigger/L1TMuonEndCap/src/EMTFSetup.cc @@ -13,6 +13,7 @@ EMTFSetup::EMTFSetup(const edm::ParameterSet& iConfig) version_control_(iConfig), sector_processor_lut_(), pt_assign_engine_(nullptr), + pt_assign_engine_dxy_(nullptr), fw_ver_(0), pt_lut_ver_(0), pc_lut_ver_(0) { @@ -27,7 +28,11 @@ EMTFSetup::EMTFSetup(const edm::ParameterSet& iConfig) throw cms::Exception("L1TMuonEndCap") << "Cannot recognize the era option: " << era(); } + // No era setup for displaced pT assignment engine + pt_assign_engine_dxy_ = std::make_unique(); + emtf_assert(pt_assign_engine_ != nullptr); + emtf_assert(pt_assign_engine_dxy_ != nullptr); } EMTFSetup::~EMTFSetup() {} diff --git a/L1Trigger/L1TMuonEndCap/src/MicroGMTConverter.cc b/L1Trigger/L1TMuonEndCap/src/MicroGMTConverter.cc index cdfc1e1e77d4d..92dd50fe199c5 100644 --- a/L1Trigger/L1TMuonEndCap/src/MicroGMTConverter.cc +++ b/L1Trigger/L1TMuonEndCap/src/MicroGMTConverter.cc @@ -11,6 +11,8 @@ void MicroGMTConverter::convert(const int global_event_BX, int sector = in_track.Sector() - 1; out_cand.setHwPt(in_track.GMT_pt()); + out_cand.setHwPtUnconstrained(in_track.GMT_pt_dxy()); + out_cand.setHwDXY(in_track.GMT_dxy()); out_cand.setHwPhi(in_track.GMT_phi()); out_cand.setHwEta(in_track.GMT_eta()); out_cand.setHwSign(in_track.GMT_charge()); diff --git a/L1Trigger/L1TMuonEndCap/src/PtAssignment.cc b/L1Trigger/L1TMuonEndCap/src/PtAssignment.cc index ae38ae9d55365..a17bcaea4791d 100644 --- a/L1Trigger/L1TMuonEndCap/src/PtAssignment.cc +++ b/L1Trigger/L1TMuonEndCap/src/PtAssignment.cc @@ -1,8 +1,10 @@ #include "L1Trigger/L1TMuonEndCap/interface/PtAssignment.h" #include "L1Trigger/L1TMuonEndCap/interface/PtAssignmentEngine.h" +#include "L1Trigger/L1TMuonEndCap/interface/PtAssignmentEngineDxy.h" void PtAssignment::configure(PtAssignmentEngine* pt_assign_engine, + PtAssignmentEngineDxy* pt_assign_engine_dxy, int verbose, int endcap, int sector, @@ -14,11 +16,15 @@ void PtAssignment::configure(PtAssignmentEngine* pt_assign_engine, bool bugNegPt, bool bugGMTPhi, bool promoteMode7, - int modeQualVer) { + int modeQualVer, + std::string pbFileName) { emtf_assert(pt_assign_engine != nullptr); + emtf_assert(pt_assign_engine_dxy != nullptr); pt_assign_engine_ = pt_assign_engine; + pt_assign_engine_dxy_ = pt_assign_engine_dxy; + verbose_ = verbose; endcap_ = endcap; sector_ = sector; @@ -26,6 +32,8 @@ void PtAssignment::configure(PtAssignmentEngine* pt_assign_engine, pt_assign_engine_->configure(verbose_, readPtLUTFile, fixMode15HighPt, bug9BitDPhi, bugMode7CLCT, bugNegPt); + pt_assign_engine_dxy_->configure(verbose_, pbFileName); + bugGMTPhi_ = bugGMTPhi; promoteMode7_ = promoteMode7; modeQualVer_ = modeQualVer; @@ -61,11 +69,17 @@ void PtAssignment::process(EMTFTrackCollection& best_tracks) { gmt_eta = (gmt_eta < 0) ? ~(-gmt_eta) : gmt_eta; } - // Assign pT + // Assign prompt & displaced pT address_t address = 0; float xmlpt = 0.; float pt = 0.; int gmt_pt = 0; + + float pt_dxy = 0.; + float dxy = 0.; + int gmt_pt_dxy = 0; + int gmt_dxy = 0; + if (track.Mode() != 1) { address = pt_assign_engine_->calculate_address(track); xmlpt = pt_assign_engine_->calculate_pt(address); @@ -90,6 +104,23 @@ void PtAssignment::process(EMTFTrackCollection& best_tracks) { pt = (gmt_pt <= 0) ? 0 : (gmt_pt - 1) * 0.5; // Decode integer pT (result is in 0.5 GeV step) + // Calculate displaced pT and d0 using NN + emtf::Feature feature; + emtf::Prediction prediction; + + feature.fill(0); + prediction.fill(0); + + pt_assign_engine_dxy_->calculate_pt_dxy(track, feature, prediction); + + pt_dxy = std::abs(1.0 / prediction.at(0)); + dxy = prediction.at(1); + + gmt_pt_dxy = aux().getGMTPtDxy(pt_dxy); + gmt_dxy = aux().getGMTDxy(dxy); + + pt_dxy = aux().getPtFromGMTPtDxy(gmt_pt_dxy); + int gmt_quality = 0; if (track.Mode() != 1) { gmt_quality = aux().getGMTQuality(track.Mode(), track.Theta_fp(), promoteMode7_, modeQualVer_); @@ -124,9 +155,13 @@ void PtAssignment::process(EMTFTrackCollection& best_tracks) { track.set_PtLUT(tmp_LUT); track.set_pt_XML(xmlpt); track.set_pt(pt); + track.set_pt_dxy(pt_dxy); + track.set_dxy(dxy); track.set_charge((gmt_charge.second == 1) ? ((gmt_charge.first == 1) ? -1 : +1) : 0); track.set_gmt_pt(gmt_pt); + track.set_gmt_pt_dxy(gmt_pt_dxy); + track.set_gmt_dxy(gmt_dxy); track.set_gmt_phi(gmt_phi); track.set_gmt_eta(gmt_eta); track.set_gmt_quality(gmt_quality); diff --git a/L1Trigger/L1TMuonEndCap/src/PtAssignmentEngineAux.cc b/L1Trigger/L1TMuonEndCap/src/PtAssignmentEngineAux.cc index aa97d91970417..02c8e5834305d 100644 --- a/L1Trigger/L1TMuonEndCap/src/PtAssignmentEngineAux.cc +++ b/L1Trigger/L1TMuonEndCap/src/PtAssignmentEngineAux.cc @@ -16,11 +16,37 @@ int PtAssignmentEngineAux::getGMTPt(float pt) const { return gmt_pt; } +int PtAssignmentEngineAux::getGMTPtDxy(float pt) const { + // compressed pt = pt*1 (scale) + 1 (pt = 0 is empty candidate) + int gmt_pt_dxy = (pt * 1) + 1; + gmt_pt_dxy = (gmt_pt_dxy > 255) ? 255 : gmt_pt_dxy; + return gmt_pt_dxy; +} + +int PtAssignmentEngineAux::getGMTDxy(float dxy) const { + int gmt_dxy = 0; + if (std::abs(dxy) < 25.) { + gmt_dxy = 0; + } else if (std::abs(dxy) < 50.) { + gmt_dxy = 1; + } else if (std::abs(dxy) < 75.) { + gmt_dxy = 2; + } else { + gmt_dxy = 3; + } + return gmt_dxy; +} + float PtAssignmentEngineAux::getPtFromGMTPt(int gmt_pt) const { float pt = (gmt_pt <= 0) ? 0 : 0.5 * (gmt_pt - 1); return pt; } +float PtAssignmentEngineAux::getPtFromGMTPtDxy(int gmt_pt_dxy) const { + float pt = (gmt_pt_dxy <= 0) ? 0 : 1.0 * (gmt_pt_dxy - 1); + return pt; +} + int PtAssignmentEngineAux::getGMTPhi(int phi) const { // convert phi into gmt scale according to DN15-017 // full scale is -16 to 100, or 116 values, covers range -10 to 62.5 deg diff --git a/L1Trigger/L1TMuonEndCap/src/PtAssignmentEngineDxy.cc b/L1Trigger/L1TMuonEndCap/src/PtAssignmentEngineDxy.cc new file mode 100644 index 0000000000000..3d6a249537e38 --- /dev/null +++ b/L1Trigger/L1TMuonEndCap/src/PtAssignmentEngineDxy.cc @@ -0,0 +1,262 @@ +#include "L1Trigger/L1TMuonEndCap/interface/PtAssignmentEngineDxy.h" + +#include +#include +#include + +#include "helper.h" // assert_no_abort + +PtAssignmentEngineDxy::PtAssignmentEngineDxy() : graphDefDxy_(nullptr), sessionDxy_(nullptr) {} + +PtAssignmentEngineDxy::~PtAssignmentEngineDxy() { + if (sessionDxy_ != nullptr) { + tensorflow::closeSession(sessionDxy_); + } + delete graphDefDxy_; +} + +void PtAssignmentEngineDxy::configure(int verbose, const std::string pbFileNameDxy) { + verbose_ = verbose; + + pbFileNameDxy_ = pbFileNameDxy; + std::string pbFilePathDxy_ = "L1Trigger/L1TMuon/data/emtf_luts/" + pbFileNameDxy_; + + inputNameDxy_ = "batch_normalization_1_input"; + outputNamesDxy_ = {"dense_4/BiasAdd"}; + + if (graphDefDxy_ == nullptr) { + graphDefDxy_ = tensorflow::loadGraphDef(edm::FileInPath(pbFilePathDxy_).fullPath()); + } + emtf_assert(graphDefDxy_ != nullptr); + + if (sessionDxy_ == nullptr) { + sessionDxy_ = tensorflow::createSession(graphDefDxy_); + } + + emtf_assert(sessionDxy_ != nullptr); +} + +const PtAssignmentEngineAux2017& PtAssignmentEngineDxy::aux() const { + static const PtAssignmentEngineAux2017 instance; + return instance; +} + +void PtAssignmentEngineDxy::calculate_pt_dxy(const EMTFTrack& track, + emtf::Feature& feature, + emtf::Prediction& prediction) const { + // This is called for each track instead of for entire track collection as was done in Phase-2 implementation + preprocessing_dxy(track, feature); + call_tensorflow_dxy(feature, prediction); + return; +} + +void PtAssignmentEngineDxy::preprocessing_dxy(const EMTFTrack& track, emtf::Feature& feature) const { + // Mimic Phase-1 EMTF input calculations + // 6 delta Phis: S1-S2, S1-S3, S1-S4, S2-S3, S2-S4, S3-S4 + // 6 delta Thetas: S1-S2, S1-S3, S1-S4, S2-S3, S2-S4, S3-S4 + // 4 bends : set to zero if no CSC hit and thus RPC hit is used + // 1 FR bit: for ME1 only + // 1 Ring bit: for ME1 only + // 1 track Theta taken from stub coordinate in ME2, ME3, ME4 (in this priority) + // 4 RPC bits indicating if ME or RE hit was used in each station (S1, S2, S3, S4) + // Total: 23 variables + std::array x_dphi; + std::array x_dtheta; + std::array x_bend_emtf; + std::array x_fr_emtf; + std::array x_trk_theta; + std::array x_me11ring; + std::array x_rpcbit; + + // Initialize to zeros + x_dphi.fill(0); + x_dtheta.fill(0); + // + x_bend_emtf.fill(0); + x_fr_emtf.fill(0); + x_trk_theta.fill(0); + x_me11ring.fill(0); + x_rpcbit.fill(0); + + EMTFPtLUT data = track.PtLUT(); + + const int invalid_dtheta = 127; + const int invalid_dphi = 8191; + + // // Variables to extract from the PtLUT + int dPhi_12, dPhi_13, dPhi_14, dPhi_23, dPhi_24, dPhi_34; + int dTh_12, dTh_13, dTh_14, dTh_23, dTh_24, dTh_34; + int fr_1; + int bend_1, bend_2, bend_3, bend_4; + int rpc_1, rpc_2, rpc_3, rpc_4; + int St1_ring2 = data.st1_ring2; + + int pat1 = -99, pat2 = -99, pat3 = -99, pat4 = -99; + + // // Which stations have hits + int st1 = (track.Mode() >= 8); + int st2 = ((track.Mode() % 8) >= 4); + int st3 = ((track.Mode() % 4) >= 2); + int st4 = ((track.Mode() % 2) == 1); + + // Get valid pattern values + if (st1) + pat1 = data.cpattern[0]; + if (st2) + pat2 = data.cpattern[1]; + if (st3) + pat3 = data.cpattern[2]; + if (st4) + pat4 = data.cpattern[3]; + + // F/R bit + fr_1 = data.fr[0]; + + // RPC hit in station + rpc_1 = (st1 ? (pat1 == 0) : 0); + rpc_2 = (st2 ? (pat2 == 0) : 0); + rpc_3 = (st3 ? (pat3 == 0) : 0); + rpc_4 = (st4 ? (pat4 == 0) : 0); + + // Calculate bends from patterns + bend_1 = aux().calcBendFromPattern(pat1, track.Endcap()); + bend_2 = aux().calcBendFromPattern(pat2, track.Endcap()); + bend_3 = aux().calcBendFromPattern(pat3, track.Endcap()); + bend_4 = aux().calcBendFromPattern(pat4, track.Endcap()); + + // Invalid bend value is 0 in the NN + if (bend_1 == -99) + bend_1 = 0; + if (bend_2 == -99) + bend_2 = 0; + if (bend_3 == -99) + bend_3 = 0; + if (bend_4 == -99) + bend_4 = 0; + + // In the emulator RPCs get assigned abs(bend) = 5. This needs to be 0 for the NN. + if (std::abs(bend_1) == 5 && rpc_1 == 1) + bend_1 = 0; + if (std::abs(bend_2) == 5 && rpc_2 == 1) + bend_2 = 0; + if (std::abs(bend_3) == 5 && rpc_3 == 1) + bend_3 = 0; + if (std::abs(bend_4) == 5 && rpc_4 == 1) + bend_4 = 0; + + // Calculate delta phi + dPhi_12 = (data.delta_ph[0] != invalid_dphi) ? data.delta_ph[0] * (data.sign_ph[0] ? 1 : -1) : 0; + dPhi_13 = (data.delta_ph[1] != invalid_dphi) ? data.delta_ph[1] * (data.sign_ph[1] ? 1 : -1) : 0; + dPhi_14 = (data.delta_ph[2] != invalid_dphi) ? data.delta_ph[2] * (data.sign_ph[2] ? 1 : -1) : 0; + dPhi_23 = (data.delta_ph[3] != invalid_dphi) ? data.delta_ph[3] * (data.sign_ph[3] ? 1 : -1) : 0; + dPhi_24 = (data.delta_ph[4] != invalid_dphi) ? data.delta_ph[4] * (data.sign_ph[4] ? 1 : -1) : 0; + dPhi_34 = (data.delta_ph[5] != invalid_dphi) ? data.delta_ph[5] * (data.sign_ph[5] ? 1 : -1) : 0; + + // Calculate delta theta + dTh_12 = (data.delta_th[0] != invalid_dtheta) ? data.delta_th[0] * (data.sign_th[0] ? 1 : -1) : 0; + dTh_13 = (data.delta_th[1] != invalid_dtheta) ? data.delta_th[1] * (data.sign_th[1] ? 1 : -1) : 0; + dTh_14 = (data.delta_th[2] != invalid_dtheta) ? data.delta_th[2] * (data.sign_th[2] ? 1 : -1) : 0; + dTh_23 = (data.delta_th[3] != invalid_dtheta) ? data.delta_th[3] * (data.sign_th[3] ? 1 : -1) : 0; + dTh_24 = (data.delta_th[4] != invalid_dtheta) ? data.delta_th[4] * (data.sign_th[4] ? 1 : -1) : 0; + dTh_34 = (data.delta_th[5] != invalid_dtheta) ? data.delta_th[5] * (data.sign_th[5] ? 1 : -1) : 0; + + // Set dPhi and dTheta values to 0 if there was no hit in the station + if (!st1) { + dPhi_12 = 0; + dPhi_13 = 0; + dPhi_14 = 0; + + dTh_12 = 0; + dTh_13 = 0; + dTh_14 = 0; + } + if (!st2) { + dPhi_12 = 0; + dPhi_23 = 0; + dPhi_24 = 0; + + dTh_12 = 0; + dTh_23 = 0; + dTh_24 = 0; + } + if (!st3) { + dPhi_13 = 0; + dPhi_23 = 0; + dPhi_34 = 0; + + dTh_13 = 0; + dTh_23 = 0; + dTh_34 = 0; + } + if (!st4) { + dPhi_14 = 0; + dPhi_24 = 0; + dPhi_34 = 0; + + dTh_14 = 0; + dTh_24 = 0; + dTh_34 = 0; + } + + // Set NN inputs + + // NN was trained with the wrong sign convention. TO BE CHANGED LATER! + x_dphi[0] = dPhi_12; + x_dphi[1] = dPhi_13; + x_dphi[2] = dPhi_14; + x_dphi[3] = dPhi_23; + x_dphi[4] = dPhi_24; + x_dphi[5] = dPhi_34; + + // NN was trained with the wrong sign convention. TO BE CHANGED LATER! + x_dtheta[0] = dTh_12; + x_dtheta[1] = dTh_13; + x_dtheta[2] = dTh_14; + x_dtheta[3] = dTh_23; + x_dtheta[4] = dTh_24; + x_dtheta[5] = dTh_34; + + // NN was trained with the wrong sign convention. TO BE CHANGED LATER! + x_bend_emtf[0] = bend_1; + x_bend_emtf[1] = bend_2; + x_bend_emtf[2] = bend_3; + x_bend_emtf[3] = bend_4; + + x_fr_emtf[0] = fr_1; + x_trk_theta[0] = track.Theta_fp(); + x_me11ring[0] = St1_ring2; + + x_rpcbit[0] = rpc_1; + x_rpcbit[1] = rpc_2; + x_rpcbit[2] = rpc_3; + x_rpcbit[3] = rpc_4; + + feature = {{x_dphi[0], x_dphi[1], x_dphi[2], x_dphi[3], x_dphi[4], x_dphi[5], + x_dtheta[0], x_dtheta[1], x_dtheta[2], x_dtheta[3], x_dtheta[4], x_dtheta[5], + x_bend_emtf[0], x_bend_emtf[1], x_bend_emtf[2], x_bend_emtf[3], x_fr_emtf[0], x_trk_theta[0], + x_me11ring[0], x_rpcbit[0], x_rpcbit[1], x_rpcbit[2], x_rpcbit[3]}}; + return; +} + +void PtAssignmentEngineDxy::call_tensorflow_dxy(const emtf::Feature& feature, emtf::Prediction& prediction) const { + tensorflow::Tensor input(tensorflow::DT_FLOAT, {1, emtf::NUM_FEATURES}); + std::vector outputs; + emtf_assert(feature.size() == emtf::NUM_FEATURES); + + float* d = input.flat().data(); + std::copy(feature.begin(), feature.end(), d); + tensorflow::run(sessionDxy_, {{inputNameDxy_, input}}, outputNamesDxy_, &outputs); + emtf_assert(outputs.size() == 1); + emtf_assert(prediction.size() == emtf::NUM_PREDICTIONS); + + const float reg_pt_scale = 100.0; // a scale factor applied to regression during training + const float reg_dxy_scale = 1.0; // a scale factor applied to regression during training + + prediction.at(0) = outputs[0].matrix()(0, 0); + prediction.at(1) = outputs[0].matrix()(0, 1); + + // Remove scale factor used during training + prediction.at(0) /= reg_pt_scale; + prediction.at(1) /= reg_dxy_scale; + return; +} diff --git a/L1Trigger/L1TMuonEndCap/src/SectorProcessor.cc b/L1Trigger/L1TMuonEndCap/src/SectorProcessor.cc index ba9159d808150..a06e6e5e3e48a 100644 --- a/L1Trigger/L1TMuonEndCap/src/SectorProcessor.cc +++ b/L1Trigger/L1TMuonEndCap/src/SectorProcessor.cc @@ -70,6 +70,7 @@ void SectorProcessor::process_single_bx(int bx, auto tp_geom_ = &(setup_->getGeometryTranslator()); auto pc_lut_ = &(setup_->getSectorProcessorLUT()); auto pt_assign_engine_ = setup_->getPtAssignmentEngine(); + auto pt_assign_engine_dxy_ = setup_->getPtAssignmentEngineDxy(); // ___________________________________________________________________________ // Configure @@ -150,6 +151,7 @@ void SectorProcessor::process_single_bx(int bx, PtAssignment pt_assign; pt_assign.configure(pt_assign_engine_, + pt_assign_engine_dxy_, verbose_, endcap_, sector_, @@ -161,7 +163,8 @@ void SectorProcessor::process_single_bx(int bx, cfg.bugNegPt_, cfg.bugGMTPhi_, cfg.promoteMode7_, - cfg.modeQualVer_); + cfg.modeQualVer_, + cfg.pbFileName_); std::map selected_dt_map; std::map selected_csc_map; diff --git a/L1Trigger/L1TMuonEndCap/src/VersionControl.cc b/L1Trigger/L1TMuonEndCap/src/VersionControl.cc index a518296cbd1ad..0e902b8d6b8ce 100644 --- a/L1Trigger/L1TMuonEndCap/src/VersionControl.cc +++ b/L1Trigger/L1TMuonEndCap/src/VersionControl.cc @@ -60,6 +60,7 @@ VersionControl::VersionControl(const edm::ParameterSet& iConfig) : config_(iConf bugGMTPhi_ = spPAParams16.getParameter("BugGMTPhi"); promoteMode7_ = spPAParams16.getParameter("PromoteMode7"); modeQualVer_ = spPAParams16.getParameter("ModeQualVer"); + pbFileName_ = spPAParams16.getParameter("ProtobufFileName"); } VersionControl::~VersionControl() {} diff --git a/L1Trigger/L1TTrackMatch/plugins/L1TkFastVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/L1TkFastVertexProducer.cc index 1d06ecd7bde7f..a01dcfe847661 100644 --- a/L1Trigger/L1TTrackMatch/plugins/L1TkFastVertexProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/L1TkFastVertexProducer.cc @@ -69,6 +69,7 @@ class L1TkFastVertexProducer : public edm::global::EDProducer<> { float pTMax_; // in GeV, saturation / truncation value int highPtTracks_; // saturate or truncate + int nVtx_; // the number of vertices to return int nStubsmin_; // minimum number of stubs int nStubsPSmin_; // minimum number of stubs in PS modules @@ -116,6 +117,7 @@ L1TkFastVertexProducer::L1TkFastVertexProducer(const edm::ParameterSet& iConfig) pTMax_ = (float)iConfig.getParameter("PTMAX"); highPtTracks_ = iConfig.getParameter("HighPtTracks"); + nVtx_ = iConfig.getParameter("nVtx"); nStubsmin_ = iConfig.getParameter("nStubsmin"); nStubsPSmin_ = iConfig.getParameter("nStubsPSmin"); nBinning_ = iConfig.getParameter("nBinning"); @@ -309,6 +311,7 @@ void L1TkFastVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const ed float zvtx_sliding = -999; float sigma_max = -999; + int imax = -999; int nb = htmp.GetNbinsX(); for (int i = 2; i <= nb - 1; i++) { float a0 = htmp.GetBinContent(i - 1); @@ -317,6 +320,7 @@ void L1TkFastVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const ed float sigma = a0 + a1 + a2; if (sigma > sigma_max) { sigma_max = sigma; + imax = i; float z0 = htmp.GetBinCenter(i - 1); float z1 = htmp.GetBinCenter(i); float z2 = htmp.GetBinCenter(i + 1); @@ -324,26 +328,31 @@ void L1TkFastVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const ed } } - zvtx_sliding = -999; - sigma_max = -999; - for (int i = 2; i <= nb - 1; i++) { - float a0 = htmp_weight.GetBinContent(i - 1); - float a1 = htmp_weight.GetBinContent(i); - float a2 = htmp_weight.GetBinContent(i + 1); - float sigma = a0 + a1 + a2; - if (sigma > sigma_max) { - sigma_max = sigma; - float z0 = htmp_weight.GetBinCenter(i - 1); - float z1 = htmp_weight.GetBinCenter(i); - float z2 = htmp_weight.GetBinCenter(i + 1); - zvtx_sliding = (a0 * z0 + a1 * z1 + a2 * z2) / sigma; + std::vector found; + found.reserve(nVtx_); + for (int ivtx = 0; ivtx < nVtx_; ivtx++) { + zvtx_sliding = -999; + sigma_max = -999; + imax = -999; + for (int i = 2; i <= nb - 1; i++) { + float a0 = htmp_weight.GetBinContent(i - 1); + float a1 = htmp_weight.GetBinContent(i); + float a2 = htmp_weight.GetBinContent(i + 1); + float sigma = a0 + a1 + a2; + if ((sigma > sigma_max) && (find(found.begin(), found.end(), i) == found.end())) { + sigma_max = sigma; + imax = i; + float z0 = htmp_weight.GetBinCenter(i - 1); + float z1 = htmp_weight.GetBinCenter(i); + float z2 = htmp_weight.GetBinCenter(i + 1); + zvtx_sliding = (a0 * z0 + a1 * z1 + a2 * z2) / sigma; + } } + found.push_back(imax); + TkPrimaryVertex vtx4(zvtx_sliding, sigma_max); + result->push_back(vtx4); } - TkPrimaryVertex vtx4(zvtx_sliding, sigma_max); - - result->push_back(vtx4); - iEvent.put(std::move(result)); } diff --git a/L1Trigger/L1TTrackMatch/plugins/L1TkMuonProducer.cc b/L1Trigger/L1TTrackMatch/plugins/L1TkMuonProducer.cc index 3030438648824..8199d7ac45315 100644 --- a/L1Trigger/L1TTrackMatch/plugins/L1TkMuonProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/L1TkMuonProducer.cc @@ -89,6 +89,12 @@ class L1TkMuonProducer : public edm::stream::EDProducer<> { const edm::Handle& muonH, int detector) const; + void build_tkMuons_from_idxs(TkMuonCollection& tkMuons, + const std::vector& matches, + const edm::Handle& l1tksH, + const edm::Handle& emtfTksH, + int detector) const; + // dump and convert tracks to the format needed for the MAnTra correlator std::vector product_to_trkvec(const L1TTTrackCollectionType& l1tks) const; // tracks // regional muon finder @@ -98,6 +104,9 @@ class L1TkMuonProducer : public edm::stream::EDProducer<> { float etaMin_; float etaMax_; + float etaBO_; //eta value for barrel-overlap fontier + float etaOE_; //eta value for overlap-endcap fontier + bool useRegionEtaMatching_; float zMax_; // |z_track| < zMax_ in cm float chi2Max_; float pTMinTra_; @@ -106,6 +115,7 @@ class L1TkMuonProducer : public edm::stream::EDProducer<> { bool correctGMTPropForTkZ_; bool use5ParameterFit_; bool useTPMatchWindows_; + bool applyQuality_; AlgoType bmtfMatchAlgoVersion_; AlgoType omtfMatchAlgoVersion_; @@ -129,11 +139,16 @@ class L1TkMuonProducer : public edm::stream::EDProducer<> { L1TkMuonProducer::L1TkMuonProducer(const edm::ParameterSet& iConfig) : etaMin_((float)iConfig.getParameter("ETAMIN")), etaMax_((float)iConfig.getParameter("ETAMAX")), + etaBO_(iConfig.exists("ETABARRELOVERLAP") ? (float)iConfig.getParameter("ETABARRELOVERLAP") : 0.83), + etaOE_(iConfig.exists("ETAOVERLAPENDCAP") ? (float)iConfig.getParameter("ETAOVERLAPENDCAP") : 1.24), + useRegionEtaMatching_(iConfig.exists("useRegionEtaMatching") ? iConfig.getParameter("useRegionEtaMatching") + : true), zMax_((float)iConfig.getParameter("ZMAX")), chi2Max_((float)iConfig.getParameter("CHI2MAX")), pTMinTra_((float)iConfig.getParameter("PTMINTRA")), dRMax_((float)iConfig.getParameter("DRmax")), nStubsmin_(iConfig.getParameter("nStubsmin")), + // --- mantra corr params mantra_n_trk_par_(iConfig.getParameter("mantra_n_trk_par")), bmtfToken_(consumes(iConfig.getParameter("L1BMTFInputTag"))), @@ -192,6 +207,8 @@ L1TkMuonProducer::L1TkMuonProducer(const edm::ParameterSet& iConfig) use5ParameterFit_ = iConfig.getParameter("use5ParameterFit"); useTPMatchWindows_ = iConfig.getParameter("useTPMatchWindows"); + applyQuality_ = iConfig.exists("applyQualityCuts") ? iConfig.getParameter("applyQualityCuts") : false; + produces(); // initializations @@ -324,9 +341,11 @@ void L1TkMuonProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup const auto& muons = product_to_muvec(*l1bmtfH.product()); const auto& match_idx = mantracorr_barr_->find_match(mantradf_tracks, muons); build_tkMuons_from_idxs(oc_bmtf_tkmuon, match_idx, l1tksH, l1bmtfH, barrel_MTF_region); - } else + } else { throw cms::Exception("TkMuAlgoConfig") << " barrel : trying to run an invalid algorithm version " << bmtfMatchAlgoVersion_ << " (this should never happen)\n"; + return; + } // ----------------------------------------------------- overlap if (omtfMatchAlgoVersion_ == kTP) @@ -335,9 +354,11 @@ void L1TkMuonProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup const auto& muons = product_to_muvec(*l1omtfH.product()); const auto& match_idx = mantracorr_ovrl_->find_match(mantradf_tracks, muons); build_tkMuons_from_idxs(oc_omtf_tkmuon, match_idx, l1tksH, l1omtfH, overlap_MTF_region); - } else + } else { throw cms::Exception("TkMuAlgoConfig") << " overlap : trying to run an invalid algorithm version " << omtfMatchAlgoVersion_ << " (this should never happen)\n"; + return; + } // ----------------------------------------------------- endcap if (emtfMatchAlgoVersion_ == kTP) @@ -347,12 +368,13 @@ void L1TkMuonProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup else if (emtfMatchAlgoVersion_ == kMantra) { const auto& muons = product_to_muvec(*l1emtfTCH.product()); const auto& match_idx = mantracorr_endc_->find_match(mantradf_tracks, muons); - //for the TkMu that were built from a EMTFCollection - do not produce a valid muon ref - edm::Handle invalidMuonH; - build_tkMuons_from_idxs(oc_emtf_tkmuon, match_idx, l1tksH, invalidMuonH, endcap_MTF_region); - } else + //for the TkMu that were built from a EMTFCollection - pass the emtf track as ref + build_tkMuons_from_idxs(oc_emtf_tkmuon, match_idx, l1tksH, l1emtfTCH, endcap_MTF_region); + } else { throw cms::Exception("TkMuAlgoConfig") << "endcap : trying to run an invalid algorithm version " << emtfMatchAlgoVersion_ << " (this should never happen)\n"; + return; + } // now combine all trk muons into a single output collection! auto oc_tkmuon = std::make_unique(); @@ -468,11 +490,26 @@ void L1TkMuonProducer::runOnMTFCollection_v1(const edm::Handle etaBO_) + continue; + } else if (detector == overlap_MTF_region) { + if (std::abs(l1tkmu.eta()) < etaBO_) + continue; + if (std::abs(l1tkmu.eta()) > etaOE_) + continue; + } else if (detector == endcap_MTF_region) { + if (std::abs(l1tkmu.eta()) < etaOE_) + continue; + } + } l1tkmu.setTrackCurvature(matchTk.rInv()); l1tkmu.setTrkzVtx((float)tkv3.z()); l1tkmu.setdR(drmin); l1tkmu.setNTracksMatched(nTracksMatch); l1tkmu.setMuonDetector(detector); + l1tkmu.setQuality(l1muRef->hwQual()); tkMuons.push_back(l1tkmu); } } @@ -509,6 +546,11 @@ void L1TkMuonProducer::runOnMTFCollection_v2(const edm::Handle l1tkPtr(l1tksH, il1ttrack); float trkisol = -999; // now doing as in the TP algo TkMuon l1tkmu(l1tkp4, l1muRef, l1tkPtr, trkisol); + + // avoid leaking of candidates to overlap region... + if (useRegionEtaMatching_ && std::abs(l1tkmu.eta()) < etaOE_) + continue; + l1tkmu.setTrackCurvature(matchTk.rInv()); l1tkmu.setTrkzVtx((float)tkv3.z()); l1tkmu.setMuonDetector(endcap_MTF_region); @@ -635,6 +677,12 @@ std::vector L1TkMuonProducer::product_to_muvec(const EM std::vector result(l1mus.size()); for (uint imu = 0; imu < l1mus.size(); ++imu) { auto& mu = l1mus[imu]; + + // dropping the emtf tracks with certain quality... + int emtfQual = (mu.Mode() == 11 || mu.Mode() == 13 || mu.Mode() == 14 || mu.Mode() == 15); + if (applyQuality_ && !emtfQual) + continue; + result[imu].pt = mu.Pt(); result[imu].eta = mu.Eta(); result[imu].theta = L1TkMuMantra::to_mpio2_pio2(L1TkMuMantra::eta_to_theta(mu.Eta())); @@ -670,6 +718,61 @@ void L1TkMuonProducer::build_tkMuons_from_idxs(TkMuonCollection& tkMuons, l1tkmu.setTrackCurvature(matchTk.rInv()); l1tkmu.setTrkzVtx((float)tkv3.z()); l1tkmu.setMuonDetector(detector); + l1tkmu.setQuality(l1muRef->hwQual()); + + // apply region cleaning (probably this is not the best way, but since this is going to + // be a patch and temporary, it is OK) + if (useRegionEtaMatching_) { + if (detector == barrel_MTF_region) { + if (std::abs(l1tkmu.eta()) > etaBO_) + continue; + } else if (detector == overlap_MTF_region) { + if (std::abs(l1tkmu.eta()) < etaBO_) + continue; + if (std::abs(l1tkmu.eta()) > etaOE_) + continue; + } else if (detector == endcap_MTF_region) { + if (std::abs(l1tkmu.eta()) < etaOE_) + continue; + } + } + tkMuons.push_back(l1tkmu); + } + return; +} + +void L1TkMuonProducer::build_tkMuons_from_idxs(TkMuonCollection& tkMuons, + const std::vector& matches, + const edm::Handle& l1tksH, + const edm::Handle& emtfTksH, + int detector) const { + for (uint imatch = 0; imatch < matches.size(); ++imatch) { + int match_trk_idx = matches[imatch]; + if (match_trk_idx < 0) + continue; // this muon was not matched to any candidate + + // take properties of the track + const L1TTTrackType& matchTk = (*l1tksH.product())[match_trk_idx]; + const auto& p3 = matchTk.momentum(); + const auto& tkv3 = matchTk.POCA(); + float p4e = sqrt(mu_mass * mu_mass + p3.mag2()); + math::XYZTLorentzVector l1tkp4(p3.x(), p3.y(), p3.z(), p4e); + + edm::Ptr l1tkPtr(l1tksH, match_trk_idx); + + auto l1emtfTrk = + emtfTksH.isValid() ? edm::Ref(emtfTksH, imatch) : edm::Ref(); + + float trkisol = -999; + TkMuon l1tkmu(l1tkp4, l1emtfTrk, l1tkPtr, trkisol); + l1tkmu.setTrackCurvature(matchTk.rInv()); + l1tkmu.setTrkzVtx((float)tkv3.z()); + l1tkmu.setMuonDetector(detector); + l1tkmu.setQuality(l1emtfTrk->Mode()); + + if (useRegionEtaMatching_ && std::abs(l1tkmu.eta()) < etaOE_) + continue; + tkMuons.push_back(l1tkmu); } return; diff --git a/L1Trigger/L1TTrackMatch/python/L1TkMuonProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/L1TkMuonProducer_cfi.py index cad1428502d4c..c04c75a90c4d6 100644 --- a/L1Trigger/L1TTrackMatch/python/L1TkMuonProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/L1TkMuonProducer_cfi.py @@ -16,6 +16,9 @@ ############################################### TP algo ETAMIN = cms.double(0), ETAMAX = cms.double(5.), # no cut + ETABARRELOVERLAP = cms.double(0.83), + ETAOVERLAPENDCAP = cms.double(1.24), + useRegionEtaMatching = cms.bool(True), ZMAX = cms.double( 25. ), # in cm CHI2MAX = cms.double( 100. ), PTMINTRA = cms.double( 2. ), # in GeV diff --git a/L1Trigger/L1TTrackMatch/python/L1TkPrimaryVertexProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/L1TkPrimaryVertexProducer_cfi.py index 4b929f74e9f0e..9755d0bd3a57a 100644 --- a/L1Trigger/L1TTrackMatch/python/L1TkPrimaryVertexProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/L1TkPrimaryVertexProducer_cfi.py @@ -11,6 +11,7 @@ ZMAX = cms.double ( 25. ) , # in cm CHI2MAX = cms.double( 100. ), PTMINTRA = cms.double( 2.), # PTMIN of L1Tracks, in GeV + nVtx = cms.int32( 1 ), # number of vertices to return nStubsmin = cms.int32( 4 ) , # minimum number of stubs nStubsPSmin = cms.int32( 3 ), # minimum number of stubs in PS modules nBinning = cms.int32( 601 ), # number of bins for the temp histo (from -30 cm to + 30 cm) diff --git a/L1Trigger/Phase2L1ParticleFlow/BuildFile.xml b/L1Trigger/Phase2L1ParticleFlow/BuildFile.xml index b383e31d3f3fe..abb7c1bbd93ba 100644 --- a/L1Trigger/Phase2L1ParticleFlow/BuildFile.xml +++ b/L1Trigger/Phase2L1ParticleFlow/BuildFile.xml @@ -8,6 +8,8 @@ + + diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/TauNNId.h b/L1Trigger/Phase2L1ParticleFlow/interface/TauNNId.h new file mode 100644 index 0000000000000..c26d4abf3b07a --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/TauNNId.h @@ -0,0 +1,32 @@ +#ifndef L1TRIGGER_PHASE2L1PARTICLEFLOWS_TAUNNID_H +#define L1TRIGGER_PHASE2L1PARTICLEFLOWS_TAUNNID_H + +#include +#include "PhysicsTools/TensorFlow/interface/TensorFlow.h" +#include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" + +struct TauNNTFCache { + TauNNTFCache() : graphDef(nullptr) {} + std::atomic graphDef; +}; + +class TauNNId { +public: + TauNNId(const std::string &iInput, const TauNNTFCache *cache, const std::string &iWeightFile, int iNParticles); + ~TauNNId(); + + void setNNVectorVar(); + float EvaluateNN(); + float compute(const l1t::PFCandidate &iSeed, l1t::PFCandidateCollection &iParts); + +private: + tensorflow::Session *session_; + std::vector NNvectorVar_; + std::string fInput_; + int fNParticles_; + unique_ptr fPt_; + unique_ptr fEta_; + unique_ptr fPhi_; + unique_ptr fId_; +}; +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc new file mode 100644 index 0000000000000..474986195d7fc --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc @@ -0,0 +1,162 @@ +#include "DataFormats/Math/interface/deltaR.h" +#include +#include + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/L1TParticleFlow/interface/PFTau.h" +#include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/TauNNId.h" + +using namespace l1t; + +class L1NNTauProducer : public edm::stream::EDProducer> { +public: + explicit L1NNTauProducer(const edm::ParameterSet&, const TauNNTFCache*); + ~L1NNTauProducer() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + static std::unique_ptr initializeGlobalCache(const edm::ParameterSet&); + static void globalEndJob(const TauNNTFCache*); + +private: + std::unique_ptr fTauNNId_; + void addTau(const l1t::PFCandidate& iCand, + const l1t::PFCandidateCollection& iParts, + std::unique_ptr& outputTaus); + void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; + + double fSeedPt_; + double fConeSize_; + double fTauSize_; + int fMaxTaus_; + int fNParticles_; + edm::EDGetTokenT> fL1PFToken_; +}; + +static constexpr float track_trigger_eta_max = 2.5; + +L1NNTauProducer::L1NNTauProducer(const edm::ParameterSet& cfg, const TauNNTFCache* cache) + : fSeedPt_(cfg.getParameter("seedpt")), + fConeSize_(cfg.getParameter("conesize")), + fTauSize_(cfg.getParameter("tausize")), + fMaxTaus_(cfg.getParameter("maxtaus")), + fNParticles_(cfg.getParameter("nparticles")), + fL1PFToken_(consumes>(cfg.getParameter("L1PFObjects"))) { + std::string lNNFile = cfg.getParameter("NNFileName"); //,"L1Trigger/Phase2L1Taus/data/tau_3layer.pb"); + fTauNNId_ = std::make_unique( + lNNFile.find("v0") == std::string::npos ? "input_1:0" : "dense_1_input:0", cache, lNNFile, fNParticles_); + produces("L1PFTausNN"); +} +std::unique_ptr L1NNTauProducer::initializeGlobalCache(const edm::ParameterSet& cfg) { + tensorflow::setLogging("3"); + std::string lNNFile = cfg.getParameter("NNFileName"); + edm::FileInPath fp(lNNFile); + TauNNTFCache* cache = new TauNNTFCache(); + cache->graphDef = tensorflow::loadGraphDef(fp.fullPath()); + return std::unique_ptr(cache); +} +void L1NNTauProducer::globalEndJob(const TauNNTFCache* cache) { + if (cache->graphDef != nullptr) { + delete cache->graphDef; + } +} +void L1NNTauProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + edm::Handle l1PFCandidates; + iEvent.getByToken(fL1PFToken_, l1PFCandidates); + + std::vector> pfChargedHadrons_sort_v; + std::vector> pfChargedHadrons_seeds_v; + for (const auto& l1PFCand : *l1PFCandidates) + if ((l1PFCand.id() == l1t::PFCandidate::ChargedHadron || l1PFCand.id() == l1t::PFCandidate::Electron) && + std::abs(l1PFCand.eta()) < track_trigger_eta_max) + pfChargedHadrons_sort_v.push_back(std::make_unique(l1PFCand)); + + std::sort( + pfChargedHadrons_sort_v.begin(), + pfChargedHadrons_sort_v.end(), + [](std::unique_ptr& i, std::unique_ptr& j) { return (i->pt() > j->pt()); }); + + auto lTaus = std::make_unique(); + if (pfChargedHadrons_sort_v.empty()) { + if (lTaus->empty()) { + PFTau dummy; + lTaus->push_back(dummy); + } + iEvent.put(std::move(lTaus), "L1PFTausNN"); + return; + } + pfChargedHadrons_seeds_v.push_back(std::move(pfChargedHadrons_sort_v[0])); + for (unsigned int i0 = 1; i0 < pfChargedHadrons_sort_v.size(); i0++) { + bool pMatch = false; + for (unsigned int i1 = 0; i1 < pfChargedHadrons_seeds_v.size(); i1++) { + if (reco::deltaR2(*(pfChargedHadrons_seeds_v[i1]), *(pfChargedHadrons_sort_v[i0])) < fConeSize_ * fConeSize_) + pMatch = true; + } + if (pMatch) + continue; + pfChargedHadrons_seeds_v.push_back(std::move(pfChargedHadrons_sort_v[i0])); + if (int(pfChargedHadrons_seeds_v.size()) > fMaxTaus_ - 1) + break; + } + for (unsigned int i0 = 0; i0 < pfChargedHadrons_seeds_v.size(); i0++) { + addTau(*(pfChargedHadrons_seeds_v[i0]), (*l1PFCandidates), lTaus); + } + if (lTaus->empty()) { + PFTau dummy; + lTaus->push_back(dummy); + } + std::sort(lTaus->begin(), lTaus->end(), [](l1t::PFTau i, l1t::PFTau j) { return (i.pt() > j.pt()); }); + iEvent.put(std::move(lTaus), "L1PFTausNN"); +} + +// create taus based on grid structure +void L1NNTauProducer::addTau(const l1t::PFCandidate& iCand, + const l1t::PFCandidateCollection& iParts, + std::unique_ptr& outputTaus) { + l1t::PFCandidateCollection pfTauCands; + math::PtEtaPhiMLorentzVector lTot(0, 0, 0, 0); + math::PtEtaPhiMLorentzVector lCand(0, 0, 0, 0); + int lId = 0; + for (const auto& l1PFCand : iParts) { + if (reco::deltaR2(iCand, l1PFCand) > fConeSize_ * fConeSize_) + continue; + math::PtEtaPhiMLorentzVector pVec(l1PFCand.pt(), l1PFCand.eta(), l1PFCand.phi(), 0); + lTot += pVec; + if (reco::deltaR2(iCand, l1PFCand) < fTauSize_ * fTauSize_ && + (l1PFCand.id() == l1t::PFCandidate::Electron || l1PFCand.id() == l1t::PFCandidate::ChargedHadron || + l1PFCand.id() == l1t::PFCandidate::Photon)) { + lId++; + lCand += pVec; + } + pfTauCands.push_back(l1PFCand); + } + if (lTot.Pt() < fSeedPt_) + return; + std::sort( + pfTauCands.begin(), pfTauCands.end(), [](l1t::PFCandidate i, l1t::PFCandidate j) { return (i.pt() > j.pt()); }); + float NN = fTauNNId_->compute(iCand, pfTauCands); + math::PtEtaPhiMLorentzVector tempP4(lCand.Pt(), lCand.Eta(), lCand.Phi(), lCand.M()); + l1t::PFTau l1PFTau(tempP4, NN, 0, lId); + outputTaus->push_back(l1PFTau); +} +void L1NNTauProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + // L1NNTauProducer + edm::ParameterSetDescription desc; + desc.add("NNFileName", "L1Trigger/Phase2L1ParticleFlow/data/tau_3layer.pb"); + desc.add("tausize", 0.1); + desc.add("maxtaus", 5); + desc.add("nparticles", 10); + desc.add("conesize", 0.4); + desc.add("seedpt", 20); + desc.add("L1PFObjects", edm::InputTag("L1PFProducer", "l1pfCandidates")); + descriptions.add("L1NNTauProducer", desc); +} +L1NNTauProducer::~L1NNTauProducer() {} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(L1NNTauProducer); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc index 0f1d42917f09b..0f1df6946a646 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc @@ -11,6 +11,7 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/FileInPath.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/Common/interface/View.h" #include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" diff --git a/L1Trigger/Phase2L1ParticleFlow/python/L1NNTauProducer_cff.py b/L1Trigger/Phase2L1ParticleFlow/python/L1NNTauProducer_cff.py new file mode 100644 index 0000000000000..c1ffa1b4d2f1f --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/python/L1NNTauProducer_cff.py @@ -0,0 +1,7 @@ +import FWCore.ParameterSet.Config as cms + +from L1Trigger.Phase2L1ParticleFlow.L1NNTauProducer_cfi import * + +L1NNTauProducerPuppi = L1NNTauProducer.clone( + NNFileName = cms.string("L1Trigger/Phase2L1ParticleFlow/data/tau_3layer_puppi.pb") + ) diff --git a/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc b/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc index 570d899939449..cf937b3c0acdd 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc @@ -29,7 +29,6 @@ BitwisePFAlgo::BitwisePFAlgo(const edm::ParameterSet &iConfig) : PFAlgoBase(iCon bitwiseConfig.getParameter("DR2MAX_TK_CALO"), bitwiseConfig.getParameter("TK_MAXINVPT_LOOSE"), bitwiseConfig.getParameter("TK_MAXINVPT_TIGHT")); - pfalgo3_ref_set_debug(debug_); } else if (algo == "pfalgo2hgc") { algo_ = AlgoChoice::algo2hgc; config_ = std::make_shared(bitwiseConfig.getParameter("NTRACK"), @@ -40,7 +39,6 @@ BitwisePFAlgo::BitwisePFAlgo(const edm::ParameterSet &iConfig) : PFAlgoBase(iCon bitwiseConfig.getParameter("DR2MAX_TK_CALO"), bitwiseConfig.getParameter("TK_MAXINVPT_LOOSE"), bitwiseConfig.getParameter("TK_MAXINVPT_TIGHT")); - pfalgo2hgc_ref_set_debug(debug_); } else { throw cms::Exception("Configuration", "Unsupported bitwiseAlgo " + algo); } @@ -157,14 +155,15 @@ void BitwisePFAlgo::runPF(Region &r) const { outch.get(), outpho.get(), outne.get(), - outmu.get()); + outmu.get(), + debug_); fw2dpf::convert(config3->nTRACK, outch.get(), r.track, r.pf); // FIXME works only with a 1-1 mapping fw2dpf::convert(config3->nPHOTON, outpho.get(), r.pf); fw2dpf::convert(config3->nSELCALO, outne.get(), r.pf); } break; case AlgoChoice::algo2hgc: { - pfalgo2hgc_ref(*config_, calo.get(), track.get(), mu.get(), outch.get(), outne.get(), outmu.get()); + pfalgo2hgc_ref(*config_, calo.get(), track.get(), mu.get(), outch.get(), outne.get(), outmu.get(), debug_); fw2dpf::convert(config_->nTRACK, outch.get(), r.track, r.pf); // FIXME works only with a 1-1 mapping fw2dpf::convert(config_->nSELCALO, outne.get(), r.pf); } break; diff --git a/L1Trigger/Phase2L1ParticleFlow/src/TauNNId.cc b/L1Trigger/Phase2L1ParticleFlow/src/TauNNId.cc new file mode 100644 index 0000000000000..2458abe181816 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/TauNNId.cc @@ -0,0 +1,69 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/TauNNId.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" +#include "DataFormats/Math/interface/deltaPhi.h" +#include + +static constexpr unsigned int n_particles_max = 10; + +TauNNId::TauNNId(const std::string &iInput, const TauNNTFCache *cache, const std::string &iWeightFile, int iNParticles) { + NNvectorVar_.clear(); + edm::FileInPath fp(iWeightFile); + session_ = tensorflow::createSession(cache->graphDef); + fNParticles_ = iNParticles; + + fPt_ = std::make_unique(fNParticles_); + fEta_ = std::make_unique(fNParticles_); + fPhi_ = std::make_unique(fNParticles_); + fId_ = std::make_unique(fNParticles_); + fInput_ = iInput; +} + +TauNNId::~TauNNId() { tensorflow::closeSession(session_); } +void TauNNId::setNNVectorVar() { + NNvectorVar_.clear(); + for (int i0 = 0; i0 < fNParticles_; i0++) { + NNvectorVar_.push_back(fPt_.get()[i0]); //pT + NNvectorVar_.push_back(fEta_.get()[i0]); //dEta from jet axis + NNvectorVar_.push_back(fPhi_.get()[i0]); //dPhi from jet axis + if (fPt_.get()[i0] == 0) { + for (int i1 = 0; i1 < 5; i1++) + NNvectorVar_.push_back(0); + continue; + } + NNvectorVar_.push_back(fId_.get()[i0] == l1t::PFCandidate::Photon); // Photon + NNvectorVar_.push_back(fId_.get()[i0] == l1t::PFCandidate::Electron); // Electron + NNvectorVar_.push_back(fId_.get()[i0] == l1t::PFCandidate::Muon); // Muon + NNvectorVar_.push_back(fId_.get()[i0] == l1t::PFCandidate::NeutralHadron); // Neutral Had + NNvectorVar_.push_back(fId_.get()[i0] == l1t::PFCandidate::ChargedHadron); // Charged Had + } +} +float TauNNId::EvaluateNN() { + tensorflow::Tensor input(tensorflow::DT_FLOAT, + {1, (unsigned int)NNvectorVar_.size()}); //was {1,35} but get size mismatch, CHECK + for (unsigned int i = 0; i < NNvectorVar_.size(); i++) { + input.matrix()(0, i) = float(NNvectorVar_[i]); + } + std::vector outputs; + tensorflow::run(session_, {{fInput_, input}}, {"dense_4/Sigmoid:0"}, &outputs); + return outputs[0].matrix()(0, 0); +} //end EvaluateNN + +float TauNNId::compute(const l1t::PFCandidate &iSeed, l1t::PFCandidateCollection &iParts) { + for (int i0 = 0; i0 < fNParticles_; i0++) { + fPt_.get()[i0] = 0; + fEta_.get()[i0] = 0; + fPhi_.get()[i0] = 0; + fId_.get()[i0] = 0; + } + std::sort(iParts.begin(), iParts.end(), [](l1t::PFCandidate i, l1t::PFCandidate j) { return (i.pt() > j.pt()); }); + for (unsigned int i0 = 0; i0 < iParts.size(); i0++) { + if (i0 > n_particles_max || i0 >= (unsigned int)fNParticles_) + break; + fPt_.get()[i0] = iParts[i0].pt(); + fEta_.get()[i0] = iSeed.eta() - iParts[i0].eta(); + fPhi_.get()[i0] = deltaPhi(iSeed.phi(), iParts[i0].phi()); + fId_.get()[i0] = iParts[i0].id(); + } + setNNVectorVar(); + return EvaluateNN(); +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.cpp b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.cpp index 7d407a60ef7a8..5954b906ad51d 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.cpp +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.cpp @@ -12,18 +12,15 @@ #include #include -int g_pfalgo2hgc_debug_ref_ = 0; - -void pfalgo2hgc_ref_set_debug(int debug) { g_pfalgo2hgc_debug_ref_ = debug; } - void pfalgo2hgc_ref(const pfalgo_config &cfg, const HadCaloObj calo[/*cfg.nCALO*/], const TkObj track[/*cfg.nTRACK*/], const MuObj mu[/*cfg.nMU*/], PFChargedObj outch[/*cfg.nTRACK*/], PFNeutralObj outne[/*cfg.nSELCALO*/], - PFChargedObj outmu[/*cfg.nMU*/]) { - if (g_pfalgo2hgc_debug_ref_) { + PFChargedObj outmu[/*cfg.nMU*/], + bool debug) { + if (debug) { #ifdef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE for (unsigned int i = 0; i < cfg.nTRACK; ++i) { if (track[i].hwPt == 0) @@ -88,7 +85,7 @@ void pfalgo2hgc_ref(const pfalgo_config &cfg, //////////////////////////////////////////////////// // TK-MU Linking std::unique_ptr isMu(new bool[cfg.nTRACK]); - pfalgo_mu_ref(cfg, track, mu, &isMu[0], outmu, g_pfalgo2hgc_debug_ref_); + pfalgo_mu_ref(cfg, track, mu, &isMu[0], outmu, debug); //////////////////////////////////////////////////// // TK-HAD Linking @@ -120,7 +117,7 @@ void pfalgo2hgc_ref(const pfalgo_config &cfg, if (track[it].hwPt > 0 && !isMu[it]) { int ibest = best_match_with_pt_ref(cfg.nCALO, DR2MAX, calo, track[it]); if (ibest != -1) { - if (g_pfalgo2hgc_debug_ref_) + if (debug) printf("FW \t track %3d pt %7d matched to calo' %3d pt %7d\n", it, int(track[it].hwPt), @@ -139,7 +136,7 @@ void pfalgo2hgc_ref(const pfalgo_config &cfg, pt_t ptdiff = calo[ic].hwPt - calo_sumtk[ic]; int sigmamult = calo_sumtkErr2[ic]; // + (calo_sumtkErr2[ic] >> 1)); // this multiplies by 1.5 = sqrt(1.5)^2 ~ (1.2)^2 - if (g_pfalgo2hgc_debug_ref_ && (calo[ic].hwPt > 0)) { + if (debug && (calo[ic].hwPt > 0)) { #ifdef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE l1tpf_impl::CaloCluster floatcalo; fw2dpf::convert(calo[ic], floatcalo); @@ -163,7 +160,7 @@ void pfalgo2hgc_ref(const pfalgo_config &cfg, } else { calo_subpt[ic] = calo[ic].hwPt; } - if (g_pfalgo2hgc_debug_ref_ && (calo[ic].hwPt > 0)) + if (debug && (calo[ic].hwPt > 0)) printf("FW \t calo' %3d pt %7d ---> %7d \n", ic, int(calo[ic].hwPt), int(calo_subpt[ic])); } diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.h b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.h index c24af621fa28d..e33f611f768ac 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.h +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.h @@ -4,14 +4,13 @@ #include "../firmware/pfalgo2hgc.h" #include "pfalgo_common_ref.h" -void pfalgo2hgc_ref_set_debug(int debug); - void pfalgo2hgc_ref(const pfalgo_config &cfg, const HadCaloObj calo[/*cfg.nCALO*/], const TkObj track[/*cfg.nTRACK*/], const MuObj mu[/*cfg.nMU*/], PFChargedObj outch[/*cfg.nTRACK*/], PFNeutralObj outne[/*cfg.nSELCALO*/], - PFChargedObj outmu[/*cfg.nMU*/]); + PFChargedObj outmu[/*cfg.nMU*/], + bool debug); #endif diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.cpp b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.cpp index 6a2d06a9551ef..5021b4bbd0d83 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.cpp +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.cpp @@ -13,10 +13,6 @@ #include #include -int g_pfalgo3_debug_ref_ = 0; - -void pfalgo3_ref_set_debug(int debug) { g_pfalgo3_debug_ref_ = debug; } - template int tk_best_match_ref(unsigned int nCAL, unsigned int dR2MAX, const CO_t calo[/*nCAL*/], const TkObj &track) { pt_t caloPtMin = track.hwPt - 2 * (track.hwPtErr); @@ -58,7 +54,8 @@ void pfalgo3_em_ref(const pfalgo3_config &cfg, const bool isMu[/*cfg.nTRACK*/], bool isEle[/*cfg.nTRACK*/], PFNeutralObj outpho[/*cfg.nPHOTON*/], - HadCaloObj hadcalo_out[/*cfg.nCALO*/]) { + HadCaloObj hadcalo_out[/*cfg.nCALO*/], + bool debug) { // constants const int DR2MAX_TE = cfg.dR2MAX_TK_EM; const int DR2MAX_EH = cfg.dR2MAX_EM_CALO; @@ -75,7 +72,7 @@ void pfalgo3_em_ref(const pfalgo3_config &cfg, if (track[it].hwPt > 0 && !isMu[it]) { tk2em[it] = tk_best_match_ref(cfg.nEMCALO, DR2MAX_TE, emcalo, track[it]); if (tk2em[it] != -1) { - if (g_pfalgo3_debug_ref_) + if (debug) printf("FW \t track %3d pt %7d matched to em calo %3d pt %7d\n", it, int(track[it].hwPt), @@ -88,7 +85,7 @@ void pfalgo3_em_ref(const pfalgo3_config &cfg, } } - if (g_pfalgo3_debug_ref_) { + if (debug) { for (unsigned int ic = 0; ic < cfg.nEMCALO; ++ic) { if (emcalo[ic].hwPt > 0) printf("FW \t emcalo %3d pt %7d has sumtk %7d\n", ic, int(emcalo[ic].hwPt), int(calo_sumtk[ic])); @@ -107,7 +104,7 @@ void pfalgo3_em_ref(const pfalgo3_config &cfg, // electron photonPt = 0; isEM[ic] = true; - if (g_pfalgo3_debug_ref_) + if (debug) printf("FW \t emcalo %3d pt %7d ptdiff %7d [match window: -%.2f / +%.2f] flagged as electron\n", ic, int(emcalo[ic].hwPt), @@ -118,7 +115,7 @@ void pfalgo3_em_ref(const pfalgo3_config &cfg, // electron + photon photonPt = ptdiff; isEM[ic] = true; - if (g_pfalgo3_debug_ref_) + if (debug) printf( "FW \t emcalo %3d pt %7d ptdiff %7d [match window: -%.2f / +%.2f] flagged as electron + photon of pt " "%7d\n", @@ -132,7 +129,7 @@ void pfalgo3_em_ref(const pfalgo3_config &cfg, // pion photonPt = 0; isEM[ic] = false; - if (g_pfalgo3_debug_ref_) + if (debug) printf("FW \t emcalo %3d pt %7d ptdiff %7d [match window: -%.2f / +%.2f] flagged as pion\n", ic, int(emcalo[ic].hwPt), @@ -144,7 +141,7 @@ void pfalgo3_em_ref(const pfalgo3_config &cfg, // photon isEM[ic] = true; photonPt = emcalo[ic].hwPt; - if (g_pfalgo3_debug_ref_ && emcalo[ic].hwPt > 0) + if (debug && emcalo[ic].hwPt > 0) printf("FW \t emcalo %3d pt %7d flagged as photon\n", ic, int(emcalo[ic].hwPt)); } outpho[ic].hwPt = photonPt; @@ -155,14 +152,14 @@ void pfalgo3_em_ref(const pfalgo3_config &cfg, for (unsigned int it = 0; it < cfg.nTRACK; ++it) { isEle[it] = (tk2em[it] != -1) && isEM[tk2em[it]]; - if (g_pfalgo3_debug_ref_ && isEle[it]) + if (debug && isEle[it]) printf("FW \t track %3d pt %7d flagged as electron.\n", it, int(track[it].hwPt)); } std::vector em2calo(cfg.nEMCALO); for (unsigned int ic = 0; ic < cfg.nEMCALO; ++ic) { em2calo[ic] = em_best_match_ref(cfg.nCALO, DR2MAX_EH, hadcalo, emcalo[ic]); - if (g_pfalgo3_debug_ref_ && (emcalo[ic].hwPt > 0)) { + if (debug && (emcalo[ic].hwPt > 0)) { printf("FW \t emcalo %3d pt %7d isEM %d matched to hadcalo %7d pt %7d emPt %7d isEM %d\n", ic, int(emcalo[ic].hwPt), @@ -188,7 +185,7 @@ void pfalgo3_em_ref(const pfalgo3_config &cfg, } pt_t emdiff = hadcalo[ih].hwEmPt - sub; pt_t alldiff = hadcalo[ih].hwPt - sub; - if (g_pfalgo3_debug_ref_ && (hadcalo[ih].hwPt > 0)) { + if (debug && (hadcalo[ih].hwPt > 0)) { printf("FW \t calo %3d pt %7d has a subtracted pt of %7d, empt %7d -> %7d isem %d mustkeep %d \n", ih, int(hadcalo[ih].hwPt), @@ -201,12 +198,12 @@ void pfalgo3_em_ref(const pfalgo3_config &cfg, if (alldiff <= (hadcalo[ih].hwPt >> 4)) { hadcalo_out[ih].hwPt = 0; // kill hadcalo_out[ih].hwEmPt = 0; // kill - if (g_pfalgo3_debug_ref_ && (hadcalo[ih].hwPt > 0)) + if (debug && (hadcalo[ih].hwPt > 0)) printf("FW \t calo %3d pt %7d --> discarded (zero pt)\n", ih, int(hadcalo[ih].hwPt)); } else if ((hadcalo[ih].hwIsEM && emdiff <= (hadcalo[ih].hwEmPt >> 3)) && !keep) { hadcalo_out[ih].hwPt = 0; // kill hadcalo_out[ih].hwEmPt = 0; // kill - if (g_pfalgo3_debug_ref_ && (hadcalo[ih].hwPt > 0)) + if (debug && (hadcalo[ih].hwPt > 0)) printf("FW \t calo %3d pt %7d --> discarded (zero em)\n", ih, int(hadcalo[ih].hwPt)); } else { hadcalo_out[ih].hwPt = alldiff; @@ -223,8 +220,9 @@ void pfalgo3_ref(const pfalgo3_config &cfg, PFChargedObj outch[/*cfg.nTRACK*/], PFNeutralObj outpho[/*cfg.nPHOTON*/], PFNeutralObj outne[/*cfg.nSELCALO*/], - PFChargedObj outmu[/*cfg.nMU*/]) { - if (g_pfalgo3_debug_ref_) { + PFChargedObj outmu[/*cfg.nMU*/], + bool debug) { + if (debug) { #ifdef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE for (unsigned int i = 0; i < cfg.nTRACK; ++i) { if (track[i].hwPt == 0) @@ -308,13 +306,13 @@ void pfalgo3_ref(const pfalgo3_config &cfg, // TK-MU Linking // // we can't use std::vector here because it's specialized std::unique_ptr isMu(new bool[cfg.nTRACK]); - pfalgo_mu_ref(cfg, track, mu, &isMu[0], outmu, g_pfalgo3_debug_ref_); + pfalgo_mu_ref(cfg, track, mu, &isMu[0], outmu, debug); //////////////////////////////////////////////////// // TK-EM Linking std::unique_ptr isEle(new bool[cfg.nTRACK]); std::vector hadcalo_subem(cfg.nCALO); - pfalgo3_em_ref(cfg, emcalo, hadcalo, track, &isMu[0], &isEle[0], outpho, &hadcalo_subem[0]); + pfalgo3_em_ref(cfg, emcalo, hadcalo, track, &isMu[0], &isEle[0], outpho, &hadcalo_subem[0], debug); //////////////////////////////////////////////////// // TK-HAD Linking @@ -348,7 +346,7 @@ void pfalgo3_ref(const pfalgo3_config &cfg, int ibest = best_match_with_pt_ref(cfg.nCALO, DR2MAX, &hadcalo_subem[0], track[it]); //int ibest = tk_best_match_ref(cfg.nCALO, DR2MAX, &hadcalo_subem[0], track[it]); if (ibest != -1) { - if (g_pfalgo3_debug_ref_) + if (debug) printf("FW \t track %3d pt %7d matched to calo %3d pt %7d\n", it, int(track[it].hwPt), @@ -366,7 +364,7 @@ void pfalgo3_ref(const pfalgo3_config &cfg, pt_t ptdiff = hadcalo_subem[ic].hwPt - calo_sumtk[ic]; int sigmamult = calo_sumtkErr2 [ic]; // before we did (calo_sumtkErr2[ic] + (calo_sumtkErr2[ic] >> 1)); to multiply by 1.5 = sqrt(1.5)^2 ~ (1.2)^2 - if (g_pfalgo3_debug_ref_ && (hadcalo_subem[ic].hwPt > 0)) { + if (debug && (hadcalo_subem[ic].hwPt > 0)) { #ifdef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE l1tpf_impl::CaloCluster floatcalo; fw2dpf::convert(hadcalo_subem[ic], floatcalo); @@ -390,7 +388,7 @@ void pfalgo3_ref(const pfalgo3_config &cfg, } else { calo_subpt[ic] = hadcalo_subem[ic].hwPt; } - if (g_pfalgo3_debug_ref_ && (hadcalo_subem[ic].hwPt > 0)) + if (debug && (hadcalo_subem[ic].hwPt > 0)) printf("FW \t calo %3d pt %7d ---> %7d \n", ic, int(hadcalo_subem[ic].hwPt), int(calo_subpt[ic])); } @@ -421,7 +419,7 @@ void pfalgo3_ref(const pfalgo3_config &cfg, ptsort_ref(cfg.nCALO, cfg.nSELCALO, outne_all, outne); - if (g_pfalgo3_debug_ref_) { + if (debug) { #ifdef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE std::vector tmp; for (unsigned int i = 0; i < cfg.nTRACK; ++i) { diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h index 43fb37ef40509..be1b82bbbce3a 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h @@ -31,8 +31,6 @@ struct pfalgo3_config : public pfalgo_config { ~pfalgo3_config() override {} }; -void pfalgo3_ref_set_debug(int debug); - void pfalgo3_em_ref(const pfalgo3_config &cfg, const EmCaloObj emcalo[/*cfg.nEMCALO*/], const HadCaloObj hadcalo[/*cfg.nCALO*/], @@ -40,7 +38,8 @@ void pfalgo3_em_ref(const pfalgo3_config &cfg, const bool isMu[/*cfg.nTRACK*/], bool isEle[/*cfg.nTRACK*/], PFNeutralObj outpho[/*cfg.nPHOTON*/], - HadCaloObj hadcalo_out[/*cfg.nCALO*/]); + HadCaloObj hadcalo_out[/*cfg.nCALO*/], + bool debug); void pfalgo3_ref(const pfalgo3_config &cfg, const EmCaloObj emcalo[/*cfg.nEMCALO*/], const HadCaloObj hadcalo[/*cfg.nCALO*/], @@ -49,7 +48,8 @@ void pfalgo3_ref(const pfalgo3_config &cfg, PFChargedObj outch[/*cfg.nTRACK*/], PFNeutralObj outpho[/*cfg.nPHOTON*/], PFNeutralObj outne[/*cfg.nSELCALO*/], - PFChargedObj outmu[/*cfg.nMU*/]); + PFChargedObj outmu[/*cfg.nMU*/], + bool debug); void pfalgo3_merge_neutrals_ref(const pfalgo3_config &cfg, const PFNeutralObj pho[/*cfg.nPHOTON*/], diff --git a/L1Trigger/RPCTechnicalTrigger/interface/TTUTrackingAlg.h b/L1Trigger/RPCTechnicalTrigger/interface/TTUTrackingAlg.h index 6463de3278806..514a867e40f1a 100644 --- a/L1Trigger/RPCTechnicalTrigger/interface/TTUTrackingAlg.h +++ b/L1Trigger/RPCTechnicalTrigger/interface/TTUTrackingAlg.h @@ -2,6 +2,7 @@ #define TTUTRACKINGALG_H 1 // Include files +#include #include "L1Trigger/RPCTechnicalTrigger/interface/TTULogic.h" #include "L1Trigger/RPCTechnicalTrigger/interface/TTUInput.h" diff --git a/L1Trigger/RPCTechnicalTrigger/test/rpcTechnicalTriggerCosmics_cfg.py b/L1Trigger/RPCTechnicalTrigger/test/rpcTechnicalTriggerCosmics_cfg.py index ae438262e6f51..e01697852c595 100644 --- a/L1Trigger/RPCTechnicalTrigger/test/rpcTechnicalTriggerCosmics_cfg.py +++ b/L1Trigger/RPCTechnicalTrigger/test/rpcTechnicalTriggerCosmics_cfg.py @@ -9,9 +9,10 @@ process = cms.Process("RPCTechnicalTrigger") process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.categories = ['*'] -process.MessageLogger.destinations = ['cout'] + +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('DEBUG'), INFO = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) diff --git a/L1Trigger/RPCTechnicalTrigger/test/rpcTechnicalTriggerData_cfg.py b/L1Trigger/RPCTechnicalTrigger/test/rpcTechnicalTriggerData_cfg.py index 6e58b7af4d81e..ffda9058be254 100644 --- a/L1Trigger/RPCTechnicalTrigger/test/rpcTechnicalTriggerData_cfg.py +++ b/L1Trigger/RPCTechnicalTrigger/test/rpcTechnicalTriggerData_cfg.py @@ -9,9 +9,10 @@ process = cms.Process("RPCTechnicalTrigger") process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.categories = ['*'] -process.MessageLogger.destinations = ['cout'] + +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('DEBUG'), INFO = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) diff --git a/L1Trigger/RPCTechnicalTrigger/test/rpcTechnicalTrigger_cfg.py b/L1Trigger/RPCTechnicalTrigger/test/rpcTechnicalTrigger_cfg.py index 0e2f6a65c930e..b40d4948e9b0e 100644 --- a/L1Trigger/RPCTechnicalTrigger/test/rpcTechnicalTrigger_cfg.py +++ b/L1Trigger/RPCTechnicalTrigger/test/rpcTechnicalTrigger_cfg.py @@ -9,9 +9,10 @@ process = cms.Process("RPCTechnicalTrigger") process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.categories = ['*'] -process.MessageLogger.destinations = ['cout'] + +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('DEBUG'), INFO = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) diff --git a/L1Trigger/TrackFindingTMTT/interface/Array2D.h b/L1Trigger/TrackFindingTMTT/interface/Array2D.h new file mode 100644 index 0000000000000..4655caac3e4ea --- /dev/null +++ b/L1Trigger/TrackFindingTMTT/interface/Array2D.h @@ -0,0 +1,43 @@ +#ifndef L1Trigger_TrackFindingTMTT_Array2D_h +#define L1Trigger_TrackFindingTMTT_Array2D_h + +#include "FWCore/Utilities/interface/Exception.h" + +#include +#include + +//=== Generic 2D array class. + +// (Replaced boost::numeric::ublas::matrix when boost library +// became too big). + +// Author: Lucas Camolezi + +namespace tmtt { + + template + class Array2D { + public: + //for a mxn matrix - row major + Array2D(unsigned int m, unsigned int n) : array2D_(m * n), m_{m}, n_{n} {} + + const T& operator()(unsigned int i, unsigned int j) const { + if (i >= m_ || j >= n_) + throw cms::Exception("LogicError") + << "Array2D: indices out of range " << i << " " << j << " " << m_ << " " << n_; + return array2D_[i * n_ + j]; + } + + T& operator()(unsigned int i, unsigned int j) { + // Non-const version of operator, without needing to duplicate code. + // (Scott Meyers trick). + return const_cast(std::as_const(*this)(i, j)); + } + + private: + std::vector array2D_; + unsigned int m_, n_; + }; +} // namespace tmtt + +#endif diff --git a/L1Trigger/TrackFindingTMTT/interface/HTbase.h b/L1Trigger/TrackFindingTMTT/interface/HTbase.h index 26ee4c83a1c61..058e6df51f063 100644 --- a/L1Trigger/TrackFindingTMTT/interface/HTbase.h +++ b/L1Trigger/TrackFindingTMTT/interface/HTbase.h @@ -1,36 +1,17 @@ - #ifndef L1Trigger_TrackFindingTMTT_HTbase_h #define L1Trigger_TrackFindingTMTT_HTbase_h #include "L1Trigger/TrackFindingTMTT/interface/HTcell.h" #include "L1Trigger/TrackFindingTMTT/interface/L1track2D.h" +#include "L1Trigger/TrackFindingTMTT/interface/Array2D.h" #include #include #include #include -namespace tmtt { - template - class matrix { - public: - //for a mxn matrix - row major - matrix(unsigned int m, unsigned int n) : _n{n}, _m{m} { _matrix.resize(m * n); } - const T& operator()(unsigned int i, unsigned int j) const { return _matrix.at(i * _n + j); } - T& operator()(unsigned int i, unsigned int j) { - if (i >= _m || j >= _n) - throw std::out_of_range("matrix access out of bounds"); - - return _matrix[i * _n + j]; - } - - private: - std::vector _matrix; - unsigned int _n, _m; - }; -} // namespace tmtt - //=== Base class for Hough Transform array for a single (eta,phi) sector. + namespace tmtt { class Settings; @@ -61,7 +42,7 @@ namespace tmtt { // Get all the cells that make up the array, which in turn give access to the stubs inside them. // N.B. You can use allCells().size1() and allCells().size2() to get the dimensions ofthe array. - virtual const matrix>& allCells() const { return htArray_; } + virtual const Array2D>& allCells() const { return htArray_; } //=== Info about track candidates found. @@ -148,7 +129,7 @@ namespace tmtt { // Hough transform array. // This has two dimensions, representing the two track helix parameters being varied. - matrix> htArray_; + Array2D> htArray_; unsigned int optoLinkID_; // ID of opto-link from HT to Track Fitter. diff --git a/L1Trigger/TrackFindingTMTT/interface/Histos.h b/L1Trigger/TrackFindingTMTT/interface/Histos.h index 0de6583b059e8..e23887a531d8f 100644 --- a/L1Trigger/TrackFindingTMTT/interface/Histos.h +++ b/L1Trigger/TrackFindingTMTT/interface/Histos.h @@ -6,6 +6,7 @@ #include "L1Trigger/TrackFindingTMTT/interface/Settings.h" #include "L1Trigger/TrackFindingTMTT/interface/L1track3D.h" #include "L1Trigger/TrackFindingTMTT/interface/TrackerModule.h" +#include "L1Trigger/TrackFindingTMTT/interface/Array2D.h" #include #include @@ -41,9 +42,9 @@ namespace tmtt { // Book & fill all histograms. virtual void book(); virtual void fill(const InputData& inputData, - const matrix>& mSectors, - const matrix>& mHtPhis, - const matrix>& mGet3Dtrks, + const Array2D>& mSectors, + const Array2D>& mHtPhis, + const Array2D>& mGet3Dtrks, const std::map>& mapFinalTracks); // Print tracking performance summary & make tracking efficiency histograms. @@ -69,11 +70,11 @@ namespace tmtt { // Fill histograms for specific topics. virtual void fillInputData(const InputData& inputData); - virtual void fillEtaPhiSectors(const InputData& inputData, const matrix>& mSectors); - virtual void fillRphiHT(const matrix>& mHtRphis); - virtual void fillRZfilters(const matrix>& mMake3Dtrks); + virtual void fillEtaPhiSectors(const InputData& inputData, const Array2D>& mSectors); + virtual void fillRphiHT(const Array2D>& mHtRphis); + virtual void fillRZfilters(const Array2D>& mMake3Dtrks); virtual void fillTrackCands(const InputData& inputData, - const matrix>& mMake3Dtrks, + const Array2D>& mMake3Dtrks, const std::string& tName); virtual void fillTrackCands(const InputData& inputData, const std::vector& tracks, diff --git a/L1Trigger/TrackFindingTMTT/interface/MiniHTstage.h b/L1Trigger/TrackFindingTMTT/interface/MiniHTstage.h index 889cded4658d1..c6ff84d05d362 100644 --- a/L1Trigger/TrackFindingTMTT/interface/MiniHTstage.h +++ b/L1Trigger/TrackFindingTMTT/interface/MiniHTstage.h @@ -3,6 +3,7 @@ #include "L1Trigger/TrackFindingTMTT/interface/HTrphi.h" #include "L1Trigger/TrackFindingTMTT/interface/MuxHToutputs.h" +#include "L1Trigger/TrackFindingTMTT/interface/Array2D.h" #include @@ -14,7 +15,7 @@ namespace tmtt { public: MiniHTstage(const Settings* settings); - void exec(matrix>& mHtRphis); + void exec(Array2D>& mHtRphis); private: // Do load balancing diff --git a/L1Trigger/TrackFindingTMTT/interface/MuxHToutputs.h b/L1Trigger/TrackFindingTMTT/interface/MuxHToutputs.h index 327ff1c0b61ee..b7d9e2cbc4c76 100644 --- a/L1Trigger/TrackFindingTMTT/interface/MuxHToutputs.h +++ b/L1Trigger/TrackFindingTMTT/interface/MuxHToutputs.h @@ -2,6 +2,7 @@ #define L1Trigger_TrackFindingTMTT_MuxHToutputs_h #include "L1Trigger/TrackFindingTMTT/interface/HTrphi.h" +#include "L1Trigger/TrackFindingTMTT/interface/Array2D.h" #include #include @@ -34,7 +35,7 @@ namespace tmtt { // of multiple (eta,phi) sectors onto single links and the truncation of the tracks caused by the requirement // to output all the tracks within the time-multiplexed period. // This function replaces the 2D track collection in the r-phi HT with the subset surviving the TM cut. - void exec(matrix>& mHtRphis) const; + void exec(Array2D>& mHtRphis) const; // Determine number of optical links used to output tracks from each phi nonant // (where "link" refers to a pair of links in the hardware). diff --git a/L1Trigger/TrackFindingTMTT/interface/Settings.h b/L1Trigger/TrackFindingTMTT/interface/Settings.h index 123e3e6aa0f4b..c757798c83609 100644 --- a/L1Trigger/TrackFindingTMTT/interface/Settings.h +++ b/L1Trigger/TrackFindingTMTT/interface/Settings.h @@ -308,6 +308,8 @@ namespace tmtt { unsigned int kalmanMaxSkipLayersEasy() const { return kalmanMaxSkipLayersEasy_; } // Max #stubs an input track can have to be defined "easy". unsigned int kalmanMaxStubsEasy() const { return kalmanMaxStubsEasy_; } + // Enable "maybe layer" + bool kfUseMaybeLayers() const { return kfUseMaybeLayers_; } // Cuts applied to KF states as a function of the last KF tracker layer they had a stub in. // (If "4" or "5" in name, cut only applies to 4 or 5 param helix fit). const std::vector& kfLayerVsPtToler() const { return kfLayerVsPtToler_; } @@ -593,6 +595,7 @@ namespace tmtt { unsigned int kalmanMaxSkipLayersHard_; unsigned int kalmanMaxSkipLayersEasy_; unsigned int kalmanMaxStubsEasy_; + bool kfUseMaybeLayers_; std::vector kfLayerVsPtToler_; std::vector kfLayerVsD0Cut5_; diff --git a/L1Trigger/TrackFindingTMTT/plugins/TMTrackProducer.cc b/L1Trigger/TrackFindingTMTT/plugins/TMTrackProducer.cc index ca0ba73fb187e..95515b3594aef 100644 --- a/L1Trigger/TrackFindingTMTT/plugins/TMTrackProducer.cc +++ b/L1Trigger/TrackFindingTMTT/plugins/TMTrackProducer.cc @@ -10,6 +10,7 @@ #include "L1Trigger/TrackFindingTMTT/interface/HTcell.h" #include "L1Trigger/TrackFindingTMTT/interface/MuxHToutputs.h" #include "L1Trigger/TrackFindingTMTT/interface/MiniHTstage.h" +#include "L1Trigger/TrackFindingTMTT/interface/Array2D.h" #include "L1Trigger/TrackFindingTMTT/interface/PrintL1trk.h" #include "FWCore/MessageService/interface/MessageLogger.h" @@ -170,13 +171,13 @@ namespace tmtt { const list& vStubs = inputData.stubs(); // Creates matrix of Sector objects, which decide which stubs are in which (eta,phi) sector - matrix> mSectors(settings_.numPhiSectors(), settings_.numEtaRegions()); + Array2D> mSectors(settings_.numPhiSectors(), settings_.numEtaRegions()); // Create matrix of r-phi Hough-Transform arrays, with one-to-one correspondence to sectors. - matrix> mHtRphis(settings_.numPhiSectors(), settings_.numEtaRegions()); + Array2D> mHtRphis(settings_.numPhiSectors(), settings_.numEtaRegions()); // Create matrix of Make3Dtracks objects, to run optional r-z track filter, with one-to-one correspondence to sectors. - matrix> mMake3Dtrks(settings_.numPhiSectors(), settings_.numEtaRegions()); + Array2D> mMake3Dtrks(settings_.numPhiSectors(), settings_.numEtaRegions()); // Create matrix of tracks from each fitter in each sector - matrix>> mapmFitTrks(settings_.numPhiSectors(), settings_.numEtaRegions()); + Array2D>> mapmFitTrks(settings_.numPhiSectors(), settings_.numEtaRegions()); // Final tracks after duplicate removal from each track fitter in entire tracker. map> mapFinalTracks; diff --git a/L1Trigger/TrackFindingTMTT/python/TMTrackProducer_Defaults_cfi.py b/L1Trigger/TrackFindingTMTT/python/TMTrackProducer_Defaults_cfi.py index 9e52fe7f1fdba..83d6d3763bdda 100644 --- a/L1Trigger/TrackFindingTMTT/python/TMTrackProducer_Defaults_cfi.py +++ b/L1Trigger/TrackFindingTMTT/python/TMTrackProducer_Defaults_cfi.py @@ -371,6 +371,7 @@ KalmanMaxSkipLayersHard = cms.uint32(1), # For HT tracks with many stubs KalmanMaxSkipLayersEasy = cms.uint32(2), # For HT tracks with few stubs KalmanMaxStubsEasy = cms.uint32(10), # Max stubs an HT track can have to be "easy". + KFUseMaybeLayers = cms.bool(False), # Disable "maybe layer" to match with firmware #--- Cuts applied to KF states as a function of the last KF tracker layer they had a stub in. # (If "4" or "5" in name, cut only applies to 4 or 5 param helix fit). KFLayerVsPtToler = cms.vdouble(999., 999., 0.1 , 0.1 , 0.05, 0.05, 0.05), diff --git a/L1Trigger/TrackFindingTMTT/python/TMTrackProducer_Ultimate_cff.py b/L1Trigger/TrackFindingTMTT/python/TMTrackProducer_Ultimate_cff.py index 626399a8f8915..21f1a7387d0a5 100644 --- a/L1Trigger/TrackFindingTMTT/python/TMTrackProducer_Ultimate_cff.py +++ b/L1Trigger/TrackFindingTMTT/python/TMTrackProducer_Ultimate_cff.py @@ -53,6 +53,7 @@ TMTrackProducer.TrackFitSettings.KalmanHOalpha = 1 TMTrackProducer.TrackFitSettings.KalmanHOprojZcorr = 1 TMTrackProducer.TrackFitSettings.KalmanHOfw = False +TMTrackProducer.TrackFitSettings.KFUseMaybeLayers = True #--- Switch on 2nd stage Mini HT with 2 GeV Pt threshold & allow it to find tracks with stubs in as few as 4 layers. diff --git a/L1Trigger/TrackFindingTMTT/src/Histos.cc b/L1Trigger/TrackFindingTMTT/src/Histos.cc index eb2e0e749527e..c02a889982db9 100644 --- a/L1Trigger/TrackFindingTMTT/src/Histos.cc +++ b/L1Trigger/TrackFindingTMTT/src/Histos.cc @@ -81,9 +81,9 @@ namespace tmtt { //=== Fill all histograms void Histos::fill(const InputData& inputData, - const matrix>& mSectors, - const matrix>& mHtRphis, - const matrix>& mMake3Dtrks, + const Array2D>& mSectors, + const Array2D>& mHtRphis, + const Array2D>& mMake3Dtrks, const std::map>& mapFinalTracks) { // Each function here protected by a mytex lock, so only one thread can run it at a time. @@ -383,7 +383,7 @@ namespace tmtt { //=== Fill histograms checking if (eta,phi) sector definition choices are good. - void Histos::fillEtaPhiSectors(const InputData& inputData, const matrix>& mSectors) { + void Histos::fillEtaPhiSectors(const InputData& inputData, const Array2D>& mSectors) { // Allow only one thread to run this function at a time static std::mutex myMutex; std::lock_guard myGuard(myMutex); @@ -442,7 +442,7 @@ namespace tmtt { //=== Fill histograms checking filling of r-phi HT array. - void Histos::fillRphiHT(const matrix>& mHtRphis) { + void Histos::fillRphiHT(const Array2D>& mHtRphis) { //--- Loop over (eta,phi) sectors, counting the number of stubs in the HT array of each. // Allow only one thread to run this function at a time (UNCOMMENT IF YOU ADD HISTOS HERE) @@ -460,7 +460,7 @@ namespace tmtt { //=== Fill histograms about r-z track filters. - void Histos::fillRZfilters(const matrix>& mMake3Dtrks) { + void Histos::fillRZfilters(const Array2D>& mMake3Dtrks) { // Allow only one thread to run this function at a time (UNCOMMENT IF YOU ADD HISTOS HERE) //static std::mutex myMutex; //std::lock_guard myGuard(myMutex); @@ -585,7 +585,7 @@ namespace tmtt { //=== Fill histograms studying track candidates found before track fit is run. void Histos::fillTrackCands(const InputData& inputData, - const matrix>& mMake3Dtrks, + const Array2D>& mMake3Dtrks, const string& tName) { // Allow only one thread to run this function at a time static std::mutex myMutex; diff --git a/L1Trigger/TrackFindingTMTT/src/KFbase.cc b/L1Trigger/TrackFindingTMTT/src/KFbase.cc index f0f20e2c0ada1..e6c1875f4227a 100644 --- a/L1Trigger/TrackFindingTMTT/src/KFbase.cc +++ b/L1Trigger/TrackFindingTMTT/src/KFbase.cc @@ -699,19 +699,14 @@ namespace tmtt { // In cases where identical GP encoded layer ID present in this sector from both barrel & endcap, this array filled considering barrel. The endcap is fixed by subsequent code. constexpr unsigned layerMap[nEta / 2][nGPlayID + 1] = { - {7, 0, 1, 5, 4, 3, 7, 2}, // B1 B2 B3 B4 B5 B6 + {7, 0, 1, 5, 4, 3, 7, 2}, // B1 B2 B3 B4 B5 B6 -- current FW {7, 0, 1, 5, 4, 3, 7, 2}, // B1 B2 B3 B4 B5 B6 {7, 0, 1, 5, 4, 3, 7, 2}, // B1 B2 B3 B4 B5 B6 {7, 0, 1, 5, 4, 3, 7, 2}, // B1 B2 B3 B4 B5 B6 {7, 0, 1, 5, 4, 3, 7, 2}, // B1 B2 B3 B4(/D3) B5(/D2) B6(/D1) - - {7, 0, 1, 3, 4, 2, 6, 2}, // B1 B2 B3(/D5)+B4(/D3) D1 D2 X D4 -- current FW - //{ 7, 0, 1, 3, 4, 3, 6, 2 }, // B1 B2 B3(/D5) D1+B4(/D3) D2 X D4 -- for use with "Fix cases" below. - + {7, 0, 1, 3, 4, 2, 6, 2}, // B1 B2 B3(/D5)+B4(/D3) D1 D2 X D4 {7, 0, 1, 1, 2, 3, 4, 5}, // B1 B2+D1 D2 D3 D5 D6 - - //{ 7, 0, 7, 1, 2, 3, 4, 5 }, // B1 D1 D2 D3 D4 D5 = current FW (or when Ambiguous function used) - {7, 0, 7, 0, 1, 2, 3, 4}, // Avoid effi loss for eta > 2.3 when Ambiguous function not used. + {7, 0, 7, 1, 2, 3, 4, 5}, // B1 D1 D2 D3 D4 D5 }; unsigned int kfEtaReg; // KF VHDL eta sector def: small in barrel & large in endcap. @@ -723,6 +718,24 @@ namespace tmtt { unsigned int kalmanLay = layerMap[kfEtaReg][layerIDreduced]; + // Fixes to layermap when "maybe layer" used + if (settings_->kfUseMaybeLayers()) { + switch (kfEtaReg) { + case 5: //case 5: B1 B2 (B3+B4)* D1 D2 D3+D4 D5+D6 -- B3 is combined with B4 and is flagged as "maybe layer" + if (layerIDreduced == 6) { + kalmanLay = 5; + } + break; + case 6: //case 6: B1* B2* D1 D2 D3 D4 D5 -- B1 and B2 are flagged as "maybe layer" + if (layerIDreduced > 2) { + kalmanLay++; + } + break; + default: + break; + } + } + // Fixes to endcap stubs, for cases where identical GP encoded layer ID present in this sector from both barrel & endcap. if (not barrel) { @@ -791,32 +804,30 @@ namespace tmtt { // Only helps in extreme forward sector, and there not significantly. // UNDERSTAND IF CAN BE USED ELSEWHERE. - /* - const unsigned int nEta = 16; - const unsigned int nKFlayer = 7; - constexpr bool ambiguityMap[nEta/2][nKFlayer] = - { - {false, false, false, false, false, false, false}, - {false, false, false, false, false, false, false}, - {false, false, false, false, false, false, false}, - {false, false, false, false, false, false, false}, - {false, false, false, false, false, false, false}, - {false, false, false, false, false, false, false}, - {false, false, false, false, false, false, false}, - {true , false, false, false, false, false, false}, - }; - - unsigned int kfEtaReg; // KF VHDL eta sector def: small in barrel & large in endcap. - if (iEtaReg < numEtaRegions_/2) { - kfEtaReg = numEtaRegions_/2 - 1 - iEtaReg; - } else { - kfEtaReg = iEtaReg - numEtaRegions_/2; - } + const unsigned int nEta = 16; + const unsigned int nKFlayer = 7; + constexpr bool ambiguityMap[nEta / 2][nKFlayer] = { + {false, false, false, false, false, false, false}, + {false, false, false, false, false, false, false}, + {false, false, false, false, false, false, false}, + {false, false, false, false, false, false, false}, + {false, false, false, false, false, false, false}, + {false, false, true, false, false, false, false}, + {true, true, false, false, false, false, false}, + {true, false, false, false, false, false, false}, + }; - bool ambiguous = ambiguityMap[kfEtaReg][kfLayer]; - */ + unsigned int kfEtaReg; // KF VHDL eta sector def: small in barrel & large in endcap. + if (iEtaReg < numEtaRegions_ / 2) { + kfEtaReg = numEtaRegions_ / 2 - 1 - iEtaReg; + } else { + kfEtaReg = iEtaReg - numEtaRegions_ / 2; + } bool ambiguous = false; + if (settings_->kfUseMaybeLayers()) + ambiguous = ambiguityMap[kfEtaReg][kfLayer]; + return ambiguous; } diff --git a/L1Trigger/TrackFindingTMTT/src/MiniHTstage.cc b/L1Trigger/TrackFindingTMTT/src/MiniHTstage.cc index 625b1305841e5..c4ff16a6a6da0 100644 --- a/L1Trigger/TrackFindingTMTT/src/MiniHTstage.cc +++ b/L1Trigger/TrackFindingTMTT/src/MiniHTstage.cc @@ -42,7 +42,7 @@ namespace tmtt { } } - void MiniHTstage::exec(matrix>& mHtRphis) { + void MiniHTstage::exec(Array2D>& mHtRphis) { for (unsigned int iPhiNon = 0; iPhiNon < numPhiNonants_; iPhiNon++) { // Indices are ([link ID, MHT cell], #stubs). map, unsigned int> numStubsPerLinkStage1; diff --git a/L1Trigger/TrackFindingTMTT/src/MuxHToutputs.cc b/L1Trigger/TrackFindingTMTT/src/MuxHToutputs.cc index 4e627d3ab9468..09b3cacf4bee9 100644 --- a/L1Trigger/TrackFindingTMTT/src/MuxHToutputs.cc +++ b/L1Trigger/TrackFindingTMTT/src/MuxHToutputs.cc @@ -54,7 +54,7 @@ namespace tmtt { //=== to output all the tracks within the time-multiplexed period. //=== This function replaces the 2D track collection in the r-phi HT with the subset surviving the TM cut. - void MuxHToutputs::exec(matrix>& mHtRphis) const { + void MuxHToutputs::exec(Array2D>& mHtRphis) const { // As this loops over sectors in order of increasing sector number, this MUX algorithm always transmits tracks // from the lowest sector numbers on each link first. So the highest sector numbers are more likely to be // truncated by the TM period. The algorithm assumes that two or more m-bin ranges from the same sector will never diff --git a/L1Trigger/TrackFindingTMTT/src/Settings.cc b/L1Trigger/TrackFindingTMTT/src/Settings.cc index bc95f65268a1c..0fa32cbd6c11f 100644 --- a/L1Trigger/TrackFindingTMTT/src/Settings.cc +++ b/L1Trigger/TrackFindingTMTT/src/Settings.cc @@ -46,6 +46,7 @@ namespace tmtt { kalmanMaxSkipLayersHard_(1), // On "hard" input tracks kalmanMaxSkipLayersEasy_(2), // On "easy" input tracks kalmanMaxStubsEasy_(10), // Max. #stubs an input track can have to be defined "easy" + kfUseMaybeLayers_(true), kfLayerVsPtToler_({999., 999., 0.1, 0.1, 0.05, 0.05, 0.05}), kfLayerVsD0Cut5_({999., 999., 999., 10., 10., 10., 10.}), kfLayerVsZ0Cut5_({999., 999., 25.5, 25.5, 25.5, 25.5, 25.5}), @@ -273,6 +274,7 @@ namespace tmtt { kalmanMaxSkipLayersHard_(trackFitSettings_.getParameter("KalmanMaxSkipLayersHard")), kalmanMaxSkipLayersEasy_(trackFitSettings_.getParameter("KalmanMaxSkipLayersEasy")), kalmanMaxStubsEasy_(trackFitSettings_.getParameter("KalmanMaxStubsEasy")), + kfUseMaybeLayers_(trackFitSettings_.getParameter("KFUseMaybeLayers")), kfLayerVsPtToler_(trackFitSettings_.getParameter>("KFLayerVsPtToler")), kfLayerVsD0Cut5_(trackFitSettings_.getParameter>("KFLayerVsD0Cut5")), diff --git a/L1Trigger/TrackFindingTMTT/src/StubFEWindows.cc b/L1Trigger/TrackFindingTMTT/src/StubFEWindows.cc index 29301fe732d79..85a12f2f354e2 100644 --- a/L1Trigger/TrackFindingTMTT/src/StubFEWindows.cc +++ b/L1Trigger/TrackFindingTMTT/src/StubFEWindows.cc @@ -4,6 +4,7 @@ #include "DataFormats/SiStripDetId/interface/StripSubdetector.h" #include +#include using namespace std; @@ -70,9 +71,8 @@ namespace tmtt { double* StubFEWindows::storedWindowSize(const TrackerTopology* trackerTopo, const DetId& detId) { // Code accessing geometry inspired by L1Trigger/TrackTrigger/src/TTStubAlgorithm_official.cc - - // Scott Meyers's solution to give const & non-const versions of same function, without - // code duplication. - return const_cast((static_cast(this))->storedWindowSize(trackerTopo, detId)); + // Non-const version of operator, without needing to duplicate code. + // (Scott Meyers trick). + return const_cast(std::as_const(*this).storedWindowSize(trackerTopo, detId)); } } // namespace tmtt diff --git a/L1Trigger/TrackFindingTMTT/test/L1TrackNtupleMaker_cfg.py b/L1Trigger/TrackFindingTMTT/test/L1TrackNtupleMaker_cfg.py deleted file mode 100644 index 733453e741bbc..0000000000000 --- a/L1Trigger/TrackFindingTMTT/test/L1TrackNtupleMaker_cfg.py +++ /dev/null @@ -1,211 +0,0 @@ -############################################################ -# define basic process -############################################################ - -import FWCore.ParameterSet.Config as cms -import FWCore.Utilities.FileUtils as FileUtils -import os -process = cms.Process("L1TrackNtuple") - - -############################################################ -# edit options here -############################################################ - -GEOMETRY = "D49" - -# Specify L1 tracking algo ('HYBRID', 'HYBRID_DISPLACED', 'TMTT','HYBRID_FLOAT', 'TRACKLET_FLOAT'), -# (To run Tracklet, set L1TRKALGO='HYBRID', and set USEHYBRID in TrackFindingTracklet/interface/Settings.h) -L1TRKALGO = 'TMTT' - -# Write output dataset? -WRITE_DATA = False - -if (L1TRKALGO == 'HYBRID_FLOAT'): - if ( not os.path.exists( os.environ['CMSSW_BASE']+'/src/L1Trigger/HybridFloat' ) ): - print "=== ERROR: Please checkout HybridFloat code from git before using this option ==="; exit - - -############################################################ -# import standard configurations -############################################################ - -process.load('Configuration.StandardSequences.Services_cff') -process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append('L1track') -process.MessageLogger.categories.append('Tracklet') -process.load('Configuration.EventContent.EventContent_cff') -process.load('Configuration.StandardSequences.MagneticField_cff') - -if GEOMETRY == "D49": - print "using geometry " + GEOMETRY + " (tilted)" - process.load('Configuration.Geometry.GeometryExtended2026D49Reco_cff') - process.load('Configuration.Geometry.GeometryExtended2026D49_cff') -else: - print "this is not a valid geometry!!!" - exit - -process.load('Configuration.StandardSequences.EndOfProcess_cff') -process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') - -from Configuration.AlCa.GlobalTag import GlobalTag -process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic', '') - - -############################################################ -# input and output -############################################################ - -process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(50)) - -# Get list of MC datasets from repo, or specify yourself. - -def getTxtFile(txtFileName): - return FileUtils.loadListFromFile(os.environ['CMSSW_BASE']+'/src/L1Trigger/TrackFindingTMTT/data/MCsamples/'+txtFileName) - -# MC txt files are in https://github.com/cms-data/L1Trigger-TrackFindingTMTT. -if GEOMETRY == "D49": - inputMC = getTxtFile('1110/RelVal/TTbar/PU200.txt') - -else: - print "this is not a valid geometry!!!" - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring(*inputMC), - inputCommands = cms.untracked.vstring( - 'keep *_*_*_*', - 'drop l1tEMTFHit2016*_*_*_*', - 'drop l1tEMTFTrack2016*_*_*_*' - ) - ) - -process.TFileService = cms.Service("TFileService", fileName = cms.string('TTbar_PU200_'+L1TRKALGO+'.root'), closeFileFast = cms.untracked.bool(True)) - -process.Timing = cms.Service("Timing", summaryOnly = cms.untracked.bool(True)) - - -############################################################ -# L1 tracking -############################################################ - -# remake stubs ? -process.load('L1Trigger.TrackTrigger.TrackTrigger_cff') -from L1Trigger.TrackTrigger.TTStubAlgorithmRegister_cfi import * -process.load("SimTracker.TrackTriggerAssociation.TrackTriggerAssociator_cff") - -if GEOMETRY != "TkOnly": - from SimTracker.TrackTriggerAssociation.TTClusterAssociation_cfi import * - TTClusterAssociatorFromPixelDigis.digiSimLinks = cms.InputTag("simSiPixelDigis","Tracker") - -process.TTClusterStub = cms.Path(process.TrackTriggerClustersStubs) -process.TTClusterStubTruth = cms.Path(process.TrackTriggerAssociatorClustersStubs) - -NHELIXPAR = 4 -if (L1TRKALGO == 'HYBRID'): - process.load("L1Trigger.TrackFindingTracklet.Tracklet_cfi") - L1TRK_PROC = process.TTTracksFromTrackletEmulation - L1TRK_NAME = "TTTracksFromTrackletEmulation" - L1TRK_LABEL = "Level1TTTracks" -elif (L1TRKALGO == 'HYBRID_DISPLACED'): - process.load("L1Trigger.TrackFindingTracklet.Tracklet_cfi") - L1TRK_PROC = process.TTTracksFromExtendedTrackletEmulation - L1TRK_NAME = "TTTracksFromExtendedTrackletEmulation" - L1TRK_LABEL = "Level1TTTracks" - NHELIXPAR = 5 -elif (L1TRKALGO == 'TMTT'): - process.load("L1Trigger.TrackFindingTMTT.TMTrackProducer_Ultimate_cff") - L1TRK_PROC = process.TMTrackProducer - L1TRK_NAME = "TMTrackProducer" - L1TRK_LABEL = "TML1TracksKF4ParamsComb" - L1TRK_PROC.EnableMCtruth = cms.bool(False) # Reduce CPU use by disabling internal histos. - L1TRK_PROC.EnableHistos = cms.bool(False) -elif (L1TRKALGO == 'HYBRID_FLOAT'): - process.load("L1Trigger.HybridFloat.HybridTrackProducer_cff") - L1TRK_PROC = process.HybridTrackProducer - L1TRK_NAME = "HybridTrackProducer" - L1TRK_LABEL = "HybridL1TracksKF4ParamsComb" - L1TRK_PROC.EnableMCtruth = cms.bool(False) # Reduce CPU use by disabling internal histos. - L1TRK_PROC.EnableHistos = cms.bool(False) -elif (L1TRKALGO == 'TRACKLET_FLOAT'): - process.load("L1Trigger.TrackFindingTracklet.L1TrackletTracks_cff") - L1TRK_PROC = process.TTTracksFromTracklet - L1TRK_NAME = "TTTracksFromTracklet" - L1TRK_LABEL = "Level1TTTracks" -else: - print "ERROR: Unknown L1TRKALGO option" - exit(1) - -process.load("RecoVertex.BeamSpotProducer.BeamSpot_cfi") -process.load("SimTracker.TrackTriggerAssociation.TrackTriggerAssociator_cff") -process.TTTrackAssociatorFromPixelDigis.TTTracks = cms.VInputTag( cms.InputTag(L1TRK_NAME, L1TRK_LABEL) ) - -## emulation -process.TTTracksEmulation = cms.Path(process.offlineBeamSpot*L1TRK_PROC) -process.TTTracksEmulationWithTruth = cms.Path(process.offlineBeamSpot*L1TRK_PROC*process.TrackTriggerAssociatorTracks) - - -############################################################ -# Define the track ntuple process, MyProcess is the (unsigned) PDGID corresponding to the process which is run -# e.g. single electron/positron = 11 -# single pion+/pion- = 211 -# single muon+/muon- = 13 -# pions in jets = 6 -# taus = 15 -# all TPs = 1 -############################################################ - -process.L1TrackNtuple = cms.EDAnalyzer('L1TrackNtupleMaker', - MyProcess = cms.int32(1), - DebugMode = cms.bool(False), # printout lots of debug statements - SaveAllTracks = cms.bool(True), # save *all* L1 tracks, not just truth matched to primary particle - SaveStubs = cms.bool(False), # save some info for *all* stubs - L1Tk_nPar = cms.int32(NHELIXPAR), # use 4 or 5-parameter L1 tracking? - L1Tk_minNStub = cms.int32(4), # L1 tracks with >= 4 stubs - TP_minNStub = cms.int32(4), # require TP to have >= X number of stubs associated with it - TP_minNStubLayer = cms.int32(4), # require TP to have stubs in >= X layers/disks - TP_minPt = cms.double(2.0), # only save TPs with pt > X GeV - TP_maxEta = cms.double(2.5), # only save TPs with |eta| < X - TP_maxZ0 = cms.double(30.0), # only save TPs with |z0| < X cm - L1TrackInputTag = cms.InputTag(L1TRK_NAME, L1TRK_LABEL), # TTTrack input - MCTruthTrackInputTag = cms.InputTag("TTTrackAssociatorFromPixelDigis", L1TRK_LABEL), ## MCTruth input - # other input collections - L1StubInputTag = cms.InputTag("TTStubsFromPhase2TrackerDigis","StubAccepted"), - MCTruthClusterInputTag = cms.InputTag("TTClusterAssociatorFromPixelDigis", "ClusterAccepted"), - MCTruthStubInputTag = cms.InputTag("TTStubAssociatorFromPixelDigis", "StubAccepted"), - TrackingParticleInputTag = cms.InputTag("mix", "MergedTrackTruth"), - TrackingVertexInputTag = cms.InputTag("mix", "MergedTrackTruth"), - ## tracking in jets stuff (--> requires AK4 genjet collection present!) - TrackingInJets = cms.bool(True), - GenJetInputTag = cms.InputTag("ak4GenJets", ""), - ) - -process.ana = cms.Path(process.L1TrackNtuple) - -# use this if you want to re-run the stub making -# process.schedule = cms.Schedule(process.TTClusterStub,process.TTClusterStubTruth,process.TTTracksEmulationWithTruth,process.ana) - -# use this if cluster/stub associators not available -# process.schedule = cms.Schedule(process.TTClusterStubTruth,process.TTTracksEmulationWithTruth,process.ana) - -# use this to only run tracking + track associator -process.schedule = cms.Schedule(process.TTTracksEmulationWithTruth,process.ana) - -if (WRITE_DATA): - - process.writeDataset = cms.OutputModule("PoolOutputModule", - splitLevel = cms.untracked.int32(0), - eventAutoFlushCompressedSize = cms.untracked.int32(5242880), - outputCommands = process.RAWSIMEventContent.outputCommands, - fileName = cms.untracked.string('output_dataset.root'), ## ADAPT IT ## - dataset = cms.untracked.PSet( - filterName = cms.untracked.string(''), - dataTier = cms.untracked.string('GEN-SIM') - ) - ) - # Include TMTT L1 tracks & associators + stubs. - process.writeDataset.outputCommands.append('keep *TTTrack*_*_*_*') - process.writeDataset.outputCommands.append('keep *TTStub*_*_*_*') - - process.pd = cms.EndPath(process.writeDataset) - process.schedule.append(process.pd) - diff --git a/L1Trigger/TrackFindingTMTT/test/tmtt_tf_analysis_cfg.py b/L1Trigger/TrackFindingTMTT/test/tmtt_tf_analysis_cfg.py index 60807b026a2f4..706b9b5c3ff5f 100644 --- a/L1Trigger/TrackFindingTMTT/test/tmtt_tf_analysis_cfg.py +++ b/L1Trigger/TrackFindingTMTT/test/tmtt_tf_analysis_cfg.py @@ -26,23 +26,33 @@ process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic', '') process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append('L1track') process.MessageLogger.L1track = cms.untracked.PSet(limit = cms.untracked.int32(-1)) options = VarParsing.VarParsing ('analysis') -def getTxtFile(txtFileName): - return os.environ['CMSSW_BASE']+'/src/L1Trigger/TrackFindingTMTT/data/'+txtFileName - #--- Specify input MC -# MC txt files are in https://github.com/cms-data/L1Trigger-TrackFindingTMTT. + +#--- To use MCsamples scripts, defining functions get*data*(), +#--- follow instructions https://cernbox.cern.ch/index.php/s/enCnnfUZ4cpK7mT + +#from MCsamples.Scripts.getCMSdata_cfi import * +#from MCsamples.Scripts.getCMSlocaldata_cfi import * + if GEOMETRY == "D49": - inputMCtxt = getTxtFile('MCsamples/1110/RelVal/TTbar/PU200.txt') + # Read data from card files (defines getCMSdataFromCards()): + #from MCsamples.RelVal_1120.PU200_TTbar_14TeV_cfi import * + #inputMC = getCMSdataFromCards() + + # Or read .root files from directory on local computer: + #dirName = "$myDir/whatever/" + #inputMC=getCMSlocaldata(dirName) -# Fastest to use a local copy ... -#inputMCtxt = getTxtFile('MCsamples/1110/RelVal/TTbar/localRAL/PU200.txt') + # Or read specified dataset (accesses CMS DB, so use this method only occasionally): + #dataName="/RelValTTbar_14TeV/CMSSW_11_2_0_pre5-PU25ns_110X_mcRun4_realistic_v3_2026D49PU200-v1/GEN-SIM-DIGI-RAW" + #inputMC=getCMSdata(dataName) -options.register('inputMC', inputMCtxt, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, "Files to be processed") + # Or read specified .root file: + inputMC = ["/store/relval/CMSSW_11_2_0_pre5/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v3_2026D49PU200-v1/20000/FDFA00CE-FA93-0142-B187-99CBD4A43944.root"] #--- Specify number of events to process. options.register('Events',100,VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.int,"Number of Events to analyze") @@ -61,34 +71,16 @@ def getTxtFile(txtFileName): #--- input and output -list = FileUtils.loadListFromFile(options.inputMC) -readFiles = cms.untracked.vstring(*list) -secFiles = cms.untracked.vstring() +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(options.Events) ) -# Override input dataset. -#readFiles = cms.untracked.vstring('/store/user/abhijith/DisplacedMuPlus.root') +process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring(*inputMC)) outputHistFile = options.histFile -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(False) ) - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(options.Events) ) - if outputHistFile != "": process.TFileService = cms.Service("TFileService", fileName = cms.string(outputHistFile)) -process.source = cms.Source ("PoolSource", - fileNames = readFiles, - secondaryFileNames = secFiles, - duplicateCheckMode = cms.untracked.string('noDuplicateCheck'), - # Following needed to read CMSSW 9 datasets with CMSSW 10 - inputCommands = cms.untracked.vstring( - 'keep *_*_*_*', - 'drop l1tEMTFHit2016*_*_*_*', - 'drop l1tEMTFTrack2016*_*_*_*' - ) - ) - +process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(False) ) process.Timing = cms.Service("Timing", summaryOnly = cms.untracked.bool(True)) #--- Load code that produces our L1 tracks and makes corresponding histograms. diff --git a/L1Trigger/TrackFindingTracklet/interface/CircularBuffer.h b/L1Trigger/TrackFindingTracklet/interface/CircularBuffer.h index 50ed9aeae58f9..3d0832f56dc5e 100644 --- a/L1Trigger/TrackFindingTracklet/interface/CircularBuffer.h +++ b/L1Trigger/TrackFindingTracklet/interface/CircularBuffer.h @@ -31,14 +31,14 @@ namespace trklet { //Empty buffer is write ptr is same as read ptr bool empty() const { return wptr_ == rptr_; } - T read() { + const T& read() { assert(!empty()); unsigned int oldrptr = rptr_; rptr_ = (rptr_ + 1) % size_; return buffer_[oldrptr]; } - T peek() const { + const T& peek() const { assert(!empty()); return buffer_[rptr_]; } diff --git a/L1Trigger/TrackFindingTracklet/interface/LayerProjection.h b/L1Trigger/TrackFindingTracklet/interface/LayerProjection.h index 1b55b4e0b5f8c..b31854c5adcd2 100644 --- a/L1Trigger/TrackFindingTracklet/interface/LayerProjection.h +++ b/L1Trigger/TrackFindingTracklet/interface/LayerProjection.h @@ -27,7 +27,8 @@ namespace trklet { double phiprojapprox, double zprojapprox, double phiprojderapprox, - double zprojderapprox); + double zprojderapprox, + bool isPSseed = false); bool valid() const { return valid_; } diff --git a/L1Trigger/TrackFindingTracklet/interface/MatchEngine.h b/L1Trigger/TrackFindingTracklet/interface/MatchEngine.h index 2457be5a0c09a..4d935e87322c1 100644 --- a/L1Trigger/TrackFindingTracklet/interface/MatchEngine.h +++ b/L1Trigger/TrackFindingTracklet/interface/MatchEngine.h @@ -33,6 +33,10 @@ namespace trklet { int layer_; int disk_; + bool barrel_; + int nvm_; + int nvmbits_; + //used in the layers std::vector table_; diff --git a/L1Trigger/TrackFindingTracklet/interface/MatchEngineUnit.h b/L1Trigger/TrackFindingTracklet/interface/MatchEngineUnit.h index b8bd055564db7..cb84945be1865 100644 --- a/L1Trigger/TrackFindingTracklet/interface/MatchEngineUnit.h +++ b/L1Trigger/TrackFindingTracklet/interface/MatchEngineUnit.h @@ -26,6 +26,7 @@ namespace trklet { int projrinv, int projfinerz, int projfinephi, + bool usesecond, bool isPSseed, Tracklet* proj); @@ -39,6 +40,8 @@ namespace trklet { bool idle() const { return idle_; } + void reset(); + void step(); private: @@ -52,6 +55,7 @@ namespace trklet { int projrinv_; int projfinerz_; int projfinephi_; + bool usesecond_; bool isPSseed_; Tracklet* proj_; diff --git a/L1Trigger/TrackFindingTracklet/interface/MatchProcessor.h b/L1Trigger/TrackFindingTracklet/interface/MatchProcessor.h index 1ecdaa08ac872..5758957ec555b 100644 --- a/L1Trigger/TrackFindingTracklet/interface/MatchProcessor.h +++ b/L1Trigger/TrackFindingTracklet/interface/MatchProcessor.h @@ -37,6 +37,7 @@ namespace trklet { private: int layer_; int disk_; + unsigned int layerdisk_; bool barrel_; unsigned int phiregion_; diff --git a/L1Trigger/TrackFindingTracklet/interface/MemoryBase.h b/L1Trigger/TrackFindingTracklet/interface/MemoryBase.h index fc2d77ea8ce04..2c92d3606d5c7 100644 --- a/L1Trigger/TrackFindingTracklet/interface/MemoryBase.h +++ b/L1Trigger/TrackFindingTracklet/interface/MemoryBase.h @@ -35,7 +35,7 @@ namespace trklet { //Used for a hack below due to MAC OS case sensitiviy problem for files void findAndReplaceAll(std::string& data, std::string toSearch, std::string replaceStr); - void openFile(bool first, std::string filebase); + void openFile(bool first, std::string dirName, std::string filebase); static size_t find_nth(const std::string& haystack, size_t pos, const std::string& needle, size_t nth); diff --git a/L1Trigger/TrackFindingTracklet/interface/ProcessBase.h b/L1Trigger/TrackFindingTracklet/interface/ProcessBase.h index 7482d24b21768..4033b6ca025cf 100644 --- a/L1Trigger/TrackFindingTracklet/interface/ProcessBase.h +++ b/L1Trigger/TrackFindingTracklet/interface/ProcessBase.h @@ -32,7 +32,7 @@ namespace trklet { //This function processes the name of a TE module to determine the layerdisks and iseed void initLayerDisksandISeed(unsigned int& layerdisk1, unsigned int& layerdisk2, unsigned int& iSeed); - unsigned int getISeed(std::string name); + unsigned int getISeed(const std::string& name); protected: std::string name_; diff --git a/L1Trigger/TrackFindingTracklet/interface/ProjectionTemp.h b/L1Trigger/TrackFindingTracklet/interface/ProjectionTemp.h index 65970995ce7da..4b8a445146d96 100644 --- a/L1Trigger/TrackFindingTracklet/interface/ProjectionTemp.h +++ b/L1Trigger/TrackFindingTracklet/interface/ProjectionTemp.h @@ -14,6 +14,7 @@ namespace trklet { int projfinerz, unsigned int projfinephi, unsigned int iphi, + bool usesecond, bool isPSseed); ProjectionTemp(); @@ -26,6 +27,7 @@ namespace trklet { int projfinerz() const { return projfinerz_; } unsigned int projfinephi() const { return projfinephi_; } unsigned int iphi() const { return iphi_; } + bool usesecond() const { return usesecond_; } bool isPSseed() const { return isPSseed_; } private: @@ -35,6 +37,7 @@ namespace trklet { unsigned int projfinerz_; unsigned int projfinephi_; unsigned int iphi_; + bool usesecond_; bool isPSseed_; }; }; // namespace trklet diff --git a/L1Trigger/TrackFindingTracklet/interface/Sector.h b/L1Trigger/TrackFindingTracklet/interface/Sector.h index 5d25f2996afd0..fdddb08af0055 100644 --- a/L1Trigger/TrackFindingTracklet/interface/Sector.h +++ b/L1Trigger/TrackFindingTracklet/interface/Sector.h @@ -40,6 +40,7 @@ namespace trklet { //Processing modules class VMRouter; + class VMRouterCM; class TrackletEngine; class TrackletEngineDisplaced; class TripletEngine; @@ -114,17 +115,17 @@ namespace trklet { double phimin() const { return phimin_; } double phimax() const { return phimax_; } - template - void addMemToVec(std::vector& memvec, TV* mem, const std::string& memName) { - memvec.push_back(mem); - Memories_[memName].reset(mem); - MemoriesV_.push_back(mem); + template + void addMemToVec(std::vector >& memvec, const std::string& memName, Args&... args) { + memvec.push_back(std::make_unique(memName, std::forward(args)...)); + Memories_[memName] = memvec.back().get(); + MemoriesV_.push_back(memvec.back().get()); } - template - void addProcToVec(std::vector& procvec, TV* proc, const std::string& procName) { - procvec.push_back(proc); - Processes_[procName].reset(proc); + template + void addProcToVec(std::vector >& procvec, const std::string& procName, Args&... args) { + procvec.push_back(std::make_unique(procName, std::forward(args)...)); + Processes_[procName] = procvec.back().get(); } private: @@ -134,37 +135,38 @@ namespace trklet { double phimin_; double phimax_; - std::map > Memories_; + std::map Memories_; std::vector MemoriesV_; - std::vector IL_; - std::vector AS_; - std::vector VMSTE_; - std::vector VMSME_; - std::vector SP_; - std::vector ST_; - std::vector TPAR_; - std::vector TPROJ_; - std::vector AP_; - std::vector VMPROJ_; - std::vector CM_; - std::vector FM_; - std::vector TF_; - std::vector CT_; - - std::map > Processes_; - std::vector VMR_; - std::vector TE_; - std::vector TED_; - std::vector TRE_; - std::vector TP_; - std::vector TC_; - std::vector TCD_; - std::vector PR_; - std::vector ME_; - std::vector MC_; - std::vector MP_; - std::vector FT_; - std::vector PD_; + std::vector > IL_; + std::vector > AS_; + std::vector > VMSTE_; + std::vector > VMSME_; + std::vector > SP_; + std::vector > ST_; + std::vector > TPAR_; + std::vector > TPROJ_; + std::vector > AP_; + std::vector > VMPROJ_; + std::vector > CM_; + std::vector > FM_; + std::vector > TF_; + std::vector > CT_; + + std::map Processes_; + std::vector > VMR_; + std::vector > VMRCM_; + std::vector > TE_; + std::vector > TED_; + std::vector > TRE_; + std::vector > TP_; + std::vector > TC_; + std::vector > TCD_; + std::vector > PR_; + std::vector > ME_; + std::vector > MC_; + std::vector > MP_; + std::vector > FT_; + std::vector > PD_; }; }; // namespace trklet #endif diff --git a/L1Trigger/TrackFindingTracklet/interface/Settings.h b/L1Trigger/TrackFindingTracklet/interface/Settings.h index 6516fa77bee95..e1b70d10fbb16 100644 --- a/L1Trigger/TrackFindingTracklet/interface/Settings.h +++ b/L1Trigger/TrackFindingTracklet/interface/Settings.h @@ -23,13 +23,18 @@ namespace trklet { constexpr unsigned int N_DSS_MOD = 5; // # of rings with 2S modules per disk + constexpr unsigned int NRINVBITS = 5; //number of bit for rinv in bend match table + constexpr unsigned int NFINERZBITS = 3; //number of bit for r or z within a r/z bin + + constexpr double sixth = 1.0 / 6.0; //Commonly used factor + class Settings { public: Settings() { //Comment out to run tracklet-only algorithm #ifdef CMSSW_GIT_HASH #ifndef USEHYBRID -#error USEHYBRID is not defined +#pragma message "USEHYBRID is undefined, so Hybrid L1 tracking disabled." #endif #endif } @@ -74,8 +79,13 @@ namespace trklet { unsigned int nbendbitsmedisk() const { return nbendbitsmedisk_; } bool useSeed(unsigned int iSeed) const { return useseeding_.find(iSeed) != useseeding_.end(); } - unsigned int nbitsvmte(unsigned int inner, unsigned int iSeed) const { return nbitsvmte_[inner][iSeed]; } - unsigned int nvmte(unsigned int inner, unsigned int iSeed) const { return (1 << nbitsvmte_[inner][iSeed]); } + unsigned int nbitsvmte(unsigned int inner, unsigned int iSeed) const { + if (combined_) { + return nbitsvmtecm_[inner][iSeed]; + } + return nbitsvmte_[inner][iSeed]; + } + unsigned int nvmte(unsigned int inner, unsigned int iSeed) const { return (1 << nbitsvmte(inner, iSeed)); } unsigned int nbitsvmme(unsigned int layerdisk) const { return nbitsvmme_[layerdisk]; } unsigned int nvmme(unsigned int layerdisk) const { return (1 << nbitsvmme_[layerdisk]); } @@ -109,8 +119,13 @@ namespace trklet { double bendcutte(unsigned int inner, unsigned int iSeed) const { return bendcutte_[inner][iSeed]; } double bendcutme(unsigned int layerdisk) const { return bendcutme_[layerdisk]; } - double nfinephi(unsigned int inner, unsigned int iSeed) const { return nfinephi_[inner][iSeed]; } - double nphireg(unsigned int inner, unsigned int iSeed) const { return nphireg_[inner][iSeed]; } + int nfinephi(unsigned int inner, unsigned int iSeed) const { return nfinephi_[inner][iSeed]; } + double nphireg(unsigned int inner, unsigned int iSeed) const { + if (combined_) { + return nphiregcm_[inner][iSeed]; + } + return nphireg_[inner][iSeed]; + } double lutwidthtab(unsigned int inner, unsigned int iSeed) const { return lutwidthtab_[inner][iSeed]; } double lutwidthtabextended(unsigned int inner, unsigned int iSeed) const { return lutwidthtabextended_[inner][iSeed]; @@ -151,6 +166,8 @@ namespace trklet { bool writeMem() const { return writeMem_; } bool writeTable() const { return writeTable_; } + std::string const& memPath() const { return memPath_; } + std::string const& tablePath() const { return tablePath_; } bool writeVerilog() const { return writeVerilog_; } bool writeHLS() const { return writeHLS_; } @@ -159,6 +176,7 @@ namespace trklet { unsigned int writememsect() const { return writememsect_; } + bool enableTripletTables() const { return enableTripletTables_; } bool writeTripletTables() const { return writeTripletTables_; } bool writeoutReal() const { return writeoutReal_; } @@ -227,6 +245,9 @@ namespace trklet { std::string skimfile() const { return skimfile_; } void setSkimfile(std::string skimfile) { skimfile_ = skimfile; } + unsigned int nbitstrackletindex() const { return nbitstrackletindex_; } + void setNbitstrackletindex(unsigned int nbitstrackletindex) { nbitstrackletindex_ = nbitstrackletindex; } + double dphisectorHG() const { return 2 * M_PI / N_SECTOR + 2 * std::max(std::abs(asin(0.5 * rinvmax() * rmean(0)) - asin(0.5 * rinvmax() * rcrit_)), @@ -268,10 +289,12 @@ namespace trklet { double z0cut() const { return z0cut_; } + double disp_z0cut() const { return disp_z0cut_; } + unsigned int NLONGVMBITS() const { return NLONGVMBITS_; } unsigned int NLONGVMBINS() const { return (1 << NLONGVMBITS_); } - unsigned int ntrackletmax() const { return ntrackletmax_; } + unsigned int ntrackletmax() const { return ((1 << nbitstrackletindex_) - 1); } //Bits used to store track parameter in tracklet int nbitsrinv() const { return nbitsrinv_; } @@ -384,6 +407,11 @@ namespace trklet { {{3, 2, 3, 3, 2, 2, 2, 2, 3, 3, 2, 2}}, {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1}}}}; + std::array, 3> nbitsvmtecm_{ + {{{2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 3, 2}}, // (3 = #stubs/triplet, only row 1+2 used for tracklet) + {{3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2}}, + {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1}}}}; + std::array, 2> bendcutte_{ {{{1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25}}, //inner (2 = #stubs/tracklet) {{1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25}}}}; //outer @@ -401,6 +429,8 @@ namespace trklet { double z0cut_{15.0}; + double disp_z0cut_{27.0}; + unsigned int NLONGVMBITS_{3}; double zlength_{120.0}; @@ -418,7 +448,7 @@ namespace trklet { double ptcutte_{1.8}; //Minimum pt in TE - unsigned int ntrackletmax_{127}; //maximum number of tracklets that can be stored + unsigned int nbitstrackletindex_{7}; //Bits used to store the tracklet index //Bits used to store track parameter in tracklet int nbitsrinv_{14}; @@ -481,11 +511,18 @@ namespace trklet { {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3}}}}; //outermost (triplets only) //These are the number of bits used for the VM regions in the TE by seedindex + //FIXME not independed nbitsvmte std::array, 3> nphireg_{ {{{5, 4, 4, 4, 4, 4, 4, 3, 4, 4, 5, 4}}, //inner {{5, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4}}, //outer {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4}}}}; //outermost (triplets only) + //For combined modules + std::array, 3> nphiregcm_{ + {{{5, 4, 4, 4, 4, 4, 4, 3, 4, 4, 5, 4}}, //inner + {{5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4}}, //outer + {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4}}}}; //outermost (triplets only) + std::array, 3> lutwidthtab_{{{{10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 11, 0}}, {{6, 6, 6, 6, 10, 10, 10, 10, 0, 0, 6, 0}}, {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6}}}}; @@ -573,21 +610,22 @@ namespace trklet { {{3.6, 3.8, 0.0, 0.0, 3.6, 0.0, 3.5, 3.8, 0.0, 0.0, 3.0, 3.0}}, //disk 4 {{0.0, 0.0, 0.0, 0.0, 3.6, 3.4, 3.7, 0.0, 0.0, 0.0, 0.0, 3.0}}}}; //disk 5 - //Offset to the maximum number of steps in each processing step. Set to 0 for standard - //trunction. Set to large value, e.g. 10000 to remove truncation - unsigned int maxstepoffset_{10000}; + // Offset to the maximum number of steps in each processing step: + // Set to 0 (default) means standard trunction + // Set to large value, e.g. 10000, to disable truncation + unsigned int maxstepoffset_{0}; //Default number of processing steps for one event std::unordered_map maxstep_{{"Link", 108}, - {"MC", 108}, - {"ME", 108}, + {"MC", 107}, + {"ME", 101}, {"MP", 108}, - {"PR", 108}, - {"TC", 108}, - {"TE", 108}, + {"PR", 107}, + {"TC", 107}, + {"TE", 101}, {"TP", 108}, {"TRE", 108}, - {"VMR", 108}}; + {"VMR", 101}}; // If set to true this will generate debub printout in text files std::unordered_map writeMonitorData_{{"IL", false}, @@ -599,6 +637,7 @@ namespace trklet { {"FT", false}, {"Residuals", false}, {"MC", false}, + {"MP", false}, {"ME", false}, {"AP", false}, {"VMP", false}, @@ -635,8 +674,11 @@ namespace trklet { bool warnNoMem_{false}; //If true will print out warnings about missing projection memories bool warnNoDer_{false}; //If true will print out warnings about missing track fit derivatives - bool writeMem_{false}; //If true will print out content of memories to files - bool writeTable_{false}; //IF true will print out content of LUTs to files + //--- These used to create files needed by HLS code. + bool writeMem_{false}; //If true will print out content of memories (between algo steps) to files + bool writeTable_{false}; //If true will print out content of LUTs to files + std::string memPath_{"../data/MemPrints/"}; //path for writing memories + std::string tablePath_{"../data/LUTs/"}; //path for writing LUTs // Write various lookup tables and autogenerated code (from iMath) bool writeVerilog_{false}; //Write out auto-generated Verilog mudules used by TCs @@ -646,10 +688,13 @@ namespace trklet { unsigned int writememsect_{3}; //writemem only for this sector (note that the files will have _4 extension) - bool writeTripletTables_{false}; //Train and write the TED and TRE tables. N.B.: the tables - //cannot be applied while they are being trained, i.e., - //this flag effectively turns off the cuts in - //TrackletEngineDisplaced and TripletEngine + bool enableTripletTables_{false}; //Enable the application of the TED and + //TRE tables; when this flag is false, + //the tables will not be read from disk + bool writeTripletTables_{false}; //Train and write the TED and TRE tables. N.B.: the tables + //cannot be applied while they are being trained, i.e., + //this flag effectively turns off the cuts in + //TrackletEngineDisplaced and TripletEngine bool writeoutReal_{false}; diff --git a/L1Trigger/TrackFindingTracklet/interface/Tracklet.h b/L1Trigger/TrackFindingTracklet/interface/Tracklet.h index 41899ba349500..6137a600b2ac1 100644 --- a/L1Trigger/TrackFindingTracklet/interface/Tracklet.h +++ b/L1Trigger/TrackFindingTracklet/interface/Tracklet.h @@ -489,7 +489,7 @@ namespace trklet { bool isOverlap() const { return overlap_; } int isDisk() const { return disk_; } - void setTrackletIndex(int index); + void setTrackletIndex(unsigned int index); int trackletIndex() const { return trackletIndex_; } @@ -497,7 +497,7 @@ namespace trklet { int TCIndex() const { return TCIndex_; } - int TCID() const { return TCIndex_ * (1 << 7) + trackletIndex_; } + int TCID() const { return TCIndex_ * (1 << settings_.nbitstrackletindex()) + trackletIndex_; } int getISeed() const; int getITC() const; diff --git a/L1Trigger/TrackFindingTracklet/interface/TrackletCalculator.h b/L1Trigger/TrackFindingTracklet/interface/TrackletCalculator.h index cb1fb663b2978..16d65ae9518b8 100644 --- a/L1Trigger/TrackFindingTracklet/interface/TrackletCalculator.h +++ b/L1Trigger/TrackFindingTracklet/interface/TrackletCalculator.h @@ -14,6 +14,8 @@ namespace trklet { class MemoryBase; class AllStubsMemory; class StubPairsMemory; + class VarInv; + class VarBase; class TrackletCalculator : public TrackletCalculatorBase { public: @@ -33,6 +35,9 @@ namespace trklet { std::vector innerallstubs_; std::vector outerallstubs_; std::vector stubpairs_; + + void writeInvTable(void (*writeLUT)(const VarInv&, const std::string&)); + void writeFirmwareDesign(void (*writeDesign)(const std::vector&, const std::string&)); }; }; // namespace trklet #endif diff --git a/L1Trigger/TrackFindingTracklet/interface/TrackletCalculatorBase.h b/L1Trigger/TrackFindingTracklet/interface/TrackletCalculatorBase.h index 46bc10760ac1c..e58c5eb340adb 100644 --- a/L1Trigger/TrackFindingTracklet/interface/TrackletCalculatorBase.h +++ b/L1Trigger/TrackFindingTracklet/interface/TrackletCalculatorBase.h @@ -131,11 +131,6 @@ namespace trklet { int TCIndex_; - double phioffset_; - - int layer_; - int disk_; - TrackletParametersMemory* trackletpars_; //First index is layer/disk second is phi region diff --git a/L1Trigger/TrackFindingTracklet/interface/TrackletCalculatorDisplaced.h b/L1Trigger/TrackFindingTracklet/interface/TrackletCalculatorDisplaced.h index 4d86e7a98310b..541d7043dfc60 100644 --- a/L1Trigger/TrackFindingTracklet/interface/TrackletCalculatorDisplaced.h +++ b/L1Trigger/TrackFindingTracklet/interface/TrackletCalculatorDisplaced.h @@ -104,6 +104,57 @@ namespace trklet { double phiderdisk[N_DISK], double rderdisk[N_DISK]); + void approxproj(double halfRinv, + double phi0, + double d0, + double t, + double z0, + double halfRinv_0, + double d0_0, // zeroeth order result for higher order terms calculation + double rmean, + double& phiproj, + double& phiprojder, + double& zproj, + double& zprojder); + + void approxprojdisk(double halfRinv, + double phi0, + double d0, + double t, + double z0, + double halfRinv_0, + double d0_0, // zeroeth order result for higher order terms calculation + double zmean, + double& phiproj, + double& phiprojder, + double& rproj, + double& rprojder); + + void approxtracklet(double r1, + double z1, + double phi1, + double r2, + double z2, + double phi2, + double r3, + double z3, + double phi3, + bool take3, + unsigned ndisks, + double& rinv, + double& phi0, + double& d0, + double& t, + double& z0, + double phiproj[4], + double zproj[4], + double phider[4], + double zder[4], + double phiprojdisk[5], + double rprojdisk[5], + double phiderdisk[5], + double rderdisk[5]); + private: int TCIndex_; int layer_; @@ -112,6 +163,7 @@ namespace trklet { int lproj_[N_LAYER - 2]; double zproj_[N_DISK - 2]; int dproj_[N_DISK - 2]; + double rzmeanInv_[N_DISK - 2]; std::vector toR_; std::vector toZ_; diff --git a/L1Trigger/TrackFindingTracklet/interface/TrackletEngineDisplaced.h b/L1Trigger/TrackFindingTracklet/interface/TrackletEngineDisplaced.h index 6affb50111dfb..79eadb944b67e 100644 --- a/L1Trigger/TrackFindingTracklet/interface/TrackletEngineDisplaced.h +++ b/L1Trigger/TrackFindingTracklet/interface/TrackletEngineDisplaced.h @@ -30,6 +30,8 @@ namespace trklet { void readTables(); + const short memNameToIndex(const std::string& name); + private: int layer1_; int layer2_; @@ -41,7 +43,7 @@ namespace trklet { std::vector stubpairs_; - std::vector > table_; + std::vector > table_; int firstphibits_; int secondphibits_; diff --git a/L1Trigger/TrackFindingTracklet/interface/TrackletEngineUnit.h b/L1Trigger/TrackFindingTracklet/interface/TrackletEngineUnit.h new file mode 100644 index 0000000000000..120e8891e9c2e --- /dev/null +++ b/L1Trigger/TrackFindingTracklet/interface/TrackletEngineUnit.h @@ -0,0 +1,83 @@ +#ifndef L1Trigger_TrackFindingTracklet_interface_TrackletEngineUnit_h +#define L1Trigger_TrackFindingTracklet_interface_TrackletEngineUnit_h + +#include "L1Trigger/TrackFindingTracklet/interface/VMStubsTEMemory.h" +#include "L1Trigger/TrackFindingTracklet/interface/CircularBuffer.h" + +#include +#include + +namespace trklet { + + class Settings; + class Stub; + class L1TStub; + class FPGAWord; + + struct TEData { + const Stub* stub_; + int start_; + int rzbinfirst_; + int rzdiffmax_; + int innerfinephi_; + FPGAWord innerbend_; + std::vector > regions_; // next z/r bin; phi-region; nstub + }; + + class TrackletEngineUnit { + public: + TrackletEngineUnit(const Settings* const settings, + unsigned int nbitsfinephi, + unsigned int layerdisk2, + unsigned int iSeed, + unsigned int nbitsfinephiediff, + unsigned int iAllStub, + std::vector const& pttableinner, + std::vector const& pttableouter, + VMStubsTEMemory* outervmstubs); + + ~TrackletEngineUnit() = default; + + void init(const TEData& tedata); + + bool empty() const { return candpairs_.empty(); } + + const std::pair& read() { return candpairs_.read(); } + + const std::pair& peek() const { return candpairs_.peek(); } + + bool idle() const { return idle_; } + + void reset(); + + void step(); + + private: + VMStubsTEMemory* outervmstubs_; + TEData tedata_; + const Settings* settings_; + unsigned int nbitsfinephi_; + unsigned int layerdisk2_; + unsigned int iSeed_; + unsigned int nbitsfinephidiff_; + + unsigned int iAllStub_; + + //unsigned int memory slot + unsigned int nreg_; + unsigned int istub_; + unsigned int ireg_; + unsigned int next_; + unsigned int nstub_; + + bool idle_; + + std::vector pttableinner_; + std::vector pttableouter_; + + //save the candidate matches + CircularBuffer > candpairs_; + }; // TrackletEngineUnit + +}; // namespace trklet +#endif diff --git a/L1Trigger/TrackFindingTracklet/interface/TrackletEventProcessor.h b/L1Trigger/TrackFindingTracklet/interface/TrackletEventProcessor.h index b22e775b89a07..e46685eaf563c 100644 --- a/L1Trigger/TrackFindingTracklet/interface/TrackletEventProcessor.h +++ b/L1Trigger/TrackFindingTracklet/interface/TrackletEventProcessor.h @@ -52,6 +52,7 @@ namespace trklet { Timer TETimer_; Timer TEDTimer_; Timer TRETimer_; + Timer TPTimer_; Timer TCTimer_; Timer TCDTimer_; Timer PRTimer_; diff --git a/L1Trigger/TrackFindingTracklet/interface/TrackletProcessor.h b/L1Trigger/TrackFindingTracklet/interface/TrackletProcessor.h index b8cb5601cf8c0..d740b26b8ff35 100644 --- a/L1Trigger/TrackFindingTracklet/interface/TrackletProcessor.h +++ b/L1Trigger/TrackFindingTracklet/interface/TrackletProcessor.h @@ -4,12 +4,12 @@ #define L1Trigger_TrackFindingTracklet_interface_TrackletProcessor_h #include "L1Trigger/TrackFindingTracklet/interface/TrackletCalculatorBase.h" -#include "L1Trigger/TrackFindingTracklet/interface/VMStubsTEMemory.h" -#include "L1Trigger/TrackFindingTracklet/interface/StubPairsMemory.h" -#include "L1Trigger/TrackFindingTracklet/interface/TrackletProjectionsMemory.h" -#include "L1Trigger/TrackFindingTracklet/interface/AllStubsMemory.h" +#include "L1Trigger/TrackFindingTracklet/interface/VMRouterTable.h" +#include "L1Trigger/TrackFindingTracklet/interface/CircularBuffer.h" +#include "L1Trigger/TrackFindingTracklet/interface/TrackletEngineUnit.h" #include +#include #include namespace trklet { @@ -17,6 +17,8 @@ namespace trklet { class Settings; class Globals; class MemoryBase; + class AllStubsMemory; + class VMStubsTEMemory; class TrackletProcessor : public TrackletCalculatorBase { public: @@ -32,27 +34,48 @@ namespace trklet { void execute(); - void setVMPhiBin(); - void writeTETable(); + void buildLUT(); + private: int iTC_; + int iAllStub_; + + VMStubsTEMemory* outervmstubs_; - std::vector innervmstubs_; - std::vector outervmstubs_; + // The use of a std::tuple here is awkward and should be fixed. This code is slotted for a significant + // overhaul to allign with the HLS implementation. At that point the use fo the tuple should be + // eliminated + // istub imem start imem end imem + std::vector, unsigned int, unsigned int, unsigned int, unsigned int> > + tedatabuffers_; + + std::vector teunits_; std::vector innerallstubs_; std::vector outerallstubs_; - bool extra_; - - std::map > phitable_; std::map > pttableinner_; std::map > pttableouter_; + std::vector pttableinnernew_; + std::vector pttableouternew_; + + std::vector > useregion_; + + int nbitsfinephi_; + int nbitsfinephidiff_; + int innerphibits_; int outerphibits_; + + unsigned int nbitszfinebintable_; + unsigned int nbitsrfinebintable_; + + unsigned int nbitsrzbin_; + + VMRouterTable vmrtable_; }; }; // namespace trklet diff --git a/L1Trigger/TrackFindingTracklet/interface/Util.h b/L1Trigger/TrackFindingTracklet/interface/Util.h index 6d448d3109bff..818b548880d98 100644 --- a/L1Trigger/TrackFindingTracklet/interface/Util.h +++ b/L1Trigger/TrackFindingTracklet/interface/Util.h @@ -4,6 +4,7 @@ #include #include #include +#include #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" @@ -12,21 +13,26 @@ namespace trklet { //Converts string in binary to hex (used in writing out memory content) inline std::string hexFormat(const std::string& binary) { - std::string tmp = ""; - - unsigned int value = 0; + std::stringstream ss; - for (unsigned int i = 0; i < binary.size(); i++) { - unsigned int slot = binary.size() - i - 1; - if (!(binary[slot] == '0' || binary[slot] == '1')) + unsigned int radix = 1, value = 0; + for (int i = binary.length() - 1; i >= 0; i--) { + if (binary.at(i) != '0' && binary.at(i) != '1') continue; - value = value + (binary[slot] - '0'); + value += (binary.at(i) - '0') * radix; + if (radix == 8) { + ss << std::hex << value; + radix = 1; + value = 0; + } else + radix <<= 1; } + if (radix != 1) + ss << std::hex << value; - std::stringstream ss; - ss << "0x" << std::hex << value; - - return ss.str(); + std::string str = ss.str() + "x0"; + std::reverse(str.begin(), str.end()); + return str; } //Should be optimized by layer - now first implementation to make sure it works OK diff --git a/L1Trigger/TrackFindingTracklet/interface/VMRouterCM.h b/L1Trigger/TrackFindingTracklet/interface/VMRouterCM.h new file mode 100644 index 0000000000000..a360351aafe84 --- /dev/null +++ b/L1Trigger/TrackFindingTracklet/interface/VMRouterCM.h @@ -0,0 +1,71 @@ +// VMRouter: sorts input stubs into smaller units in phi (and possibly z), referred to as "Virtual Modules" (VMs) - implementation for combined modules +#ifndef L1Trigger_TrackFindingTracklet_interface_VMRouterCM_h +#define L1Trigger_TrackFindingTracklet_interface_VMRouterCM_h + +#include "L1Trigger/TrackFindingTracklet/interface/ProcessBase.h" +#include "L1Trigger/TrackFindingTracklet/interface/FPGAWord.h" +#include "L1Trigger/TrackFindingTracklet/interface/VMRouterTable.h" + +#include +#include +#include + +namespace trklet { + + class Settings; + class Globals; + class MemoryBase; + class InputLinkMemory; + class AllStubsMemory; + class VMStubsMEMemory; + class VMStubsTEMemory; + + struct VMStubsTEPHICM { + VMStubsTEPHICM(unsigned int seednumber_, std::vector vmstubmem_) + : seednumber(seednumber_), vmstubmem(vmstubmem_){}; + + unsigned int seednumber; //seed number [0,11] + std::vector vmstubmem; // m_vmstubmem[n] is the VMStubsTEMemory for the nth copy + }; + + class VMRouterCM : public ProcessBase { + public: + VMRouterCM(std::string name, Settings const& settings, Globals* global, unsigned int iSector); + + ~VMRouterCM() override = default; + + void addOutput(MemoryBase* memory, std::string output) override; + void addInput(MemoryBase* memory, std::string input) override; + + void execute(); + + private: + //0-5 are the layers and 6-10 are the disks + unsigned int layerdisk_; + + //overlapbits_ is the top bits of phicorr used to add or subtract one to see if stub should be added to + //two VMs. nextrabits_ is the number of bits beyond the bits for the phivm that is used by overlapbits_ + unsigned int overlapbits_; + unsigned int nextrabits_; + + int nbitszfinebintable_; + int nbitsrfinebintable_; + + unsigned int nvmmebins_; //number of long z/r bins in VM + + VMRouterTable vmrtable_; + + //The input stub memories + std::vector stubinputs_; + + //The all stub memories + std::vector > allstubs_; + + //The VM stubs memories used by the MEs + std::vector vmstubsMEPHI_; + + //The VM stubs memories used by the TEs (using structure defined above) + std::vector vmstubsTEPHI_; + }; +}; // namespace trklet +#endif diff --git a/L1Trigger/TrackFindingTracklet/interface/VMRouterTable.h b/L1Trigger/TrackFindingTracklet/interface/VMRouterTable.h index 1f6e3a660c6e4..08a1ecd198fe2 100644 --- a/L1Trigger/TrackFindingTracklet/interface/VMRouterTable.h +++ b/L1Trigger/TrackFindingTracklet/interface/VMRouterTable.h @@ -16,11 +16,11 @@ namespace trklet { class VMRouterTable { public: VMRouterTable(Settings const& settings); - VMRouterTable(Settings const& settings, unsigned int layerdisk); + VMRouterTable(Settings const& settings, unsigned int layerdisk, std::string const& name); ~VMRouterTable() = default; - void init(unsigned int layerdisk); + void init(unsigned int layerdisk, std::string const& name); // negative return means that seed can not be formed int getLookup(unsigned int layerdisk, double z, double r, int iseed = -1); @@ -30,6 +30,7 @@ namespace trklet { int lookupinner(int zbin, int rbin); int lookupinneroverlap(int zbin, int rbin); int lookupinnerThird(int zbin, int rbin); + void writeVMTable(std::string const& name, std::vector const& table); private: Settings const& settings_; diff --git a/L1Trigger/TrackFindingTracklet/interface/VMStubsMEMemory.h b/L1Trigger/TrackFindingTracklet/interface/VMStubsMEMemory.h index 57e7dcf085d41..8c231f2909352 100644 --- a/L1Trigger/TrackFindingTracklet/interface/VMStubsMEMemory.h +++ b/L1Trigger/TrackFindingTracklet/interface/VMStubsMEMemory.h @@ -25,6 +25,8 @@ namespace trklet { } } + void resize(int nbins) { binnedstubs_.resize(nbins); } + unsigned int nStubsBin(unsigned int bin) const { assert(bin < binnedstubs_.size()); return binnedstubs_[bin].size(); diff --git a/L1Trigger/TrackFindingTracklet/interface/VMStubsTEMemory.h b/L1Trigger/TrackFindingTracklet/interface/VMStubsTEMemory.h index f16a0a35a10c4..b494573c7de79 100644 --- a/L1Trigger/TrackFindingTracklet/interface/VMStubsTEMemory.h +++ b/L1Trigger/TrackFindingTracklet/interface/VMStubsTEMemory.h @@ -19,6 +19,8 @@ namespace trklet { ~VMStubsTEMemory() override = default; + void resize(int nbins) { stubsbinnedvm_.resize(nbins); } + bool addVMStub(VMStubTE vmstub, int bin); bool addVMStub(VMStubTE vmstub); @@ -27,6 +29,8 @@ namespace trklet { unsigned int nVMStubsBinned(unsigned int bin) const { return stubsbinnedvm_[bin].size(); } + unsigned int nBin() const { return stubsbinnedvm_.size(); } + const VMStubTE& getVMStubTE(unsigned int i) const { return stubsvm_[i]; } const VMStubTE& getVMStubTEBinned(unsigned int bin, unsigned int i) const { return stubsbinnedvm_[bin][i]; } diff --git a/L1Trigger/TrackFindingTracklet/interface/imath.h b/L1Trigger/TrackFindingTracklet/interface/imath.h index 3db657cda0ed6..6938182025482 100644 --- a/L1Trigger/TrackFindingTracklet/interface/imath.h +++ b/L1Trigger/TrackFindingTracklet/interface/imath.h @@ -271,10 +271,10 @@ namespace trklet { void pipe_increment() { pipe_counter_++; } void add_delay(int i) { pipe_delays_.push_back(i); } bool has_delay(int i); //returns true if already have this variable delayed. - static void verilog_print(std::vector v, std::ofstream &fs) { design_print(v, fs, verilog); } - static void hls_print(std::vector v, std::ofstream &fs) { design_print(v, fs, hls); } - static void design_print(std::vector v, std::ofstream &fs, Verilog); - static void design_print(std::vector v, std::ofstream &fs, HLS); + static void verilog_print(const std::vector &v, std::ofstream &fs) { design_print(v, fs, verilog); } + static void hls_print(const std::vector &v, std::ofstream &fs) { design_print(v, fs, hls); } + static void design_print(const std::vector &v, std::ofstream &fs, Verilog); + static void design_print(const std::vector &v, std::ofstream &fs, HLS); static std::string pipe_delay(VarBase *v, int nbits, int delay); std::string pipe_delays(const int step); static std::string pipe_delay_wire(VarBase *v, std::string name_delayed, int nbits, int delay); diff --git a/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc b/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc index 88f050ea6271b..aa6b5f30f9860 100644 --- a/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc +++ b/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc @@ -93,6 +93,7 @@ #include "DataFormats/GeometrySurface/interface/BoundPlane.h" #include "L1Trigger/TrackTrigger/interface/StubPtConsistency.h" +#include "L1Trigger/TrackTrigger/interface/TrackQuality.h" ////////////// // STD HEADERS @@ -170,6 +171,9 @@ class L1FPGATrackProducer : public edm::one::EDProducer { unsigned int nHelixPar_; bool extended_; + bool trackQuality_; + std::unique_ptr trackQualityModel_; + std::map> dtclayerdisk; edm::ESHandle tTopoHandle; @@ -261,6 +265,11 @@ L1FPGATrackProducer::L1FPGATrackProducer(edm::ParameterSet const& iConfig) if (extended_) { settings.setTableTEDFile(tableTEDFile.fullPath()); settings.setTableTREFile(tableTREFile.fullPath()); + + //FIXME: The TED and TRE tables are currently disabled by default, so we + //need to allow for the additional tracklets that will eventually be + //removed by these tables, once they are finalized + settings.setNbitstrackletindex(10); } eventnum = 0; @@ -281,6 +290,11 @@ L1FPGATrackProducer::L1FPGATrackProducer(edm::ParameterSet const& iConfig) << "\n table_TRE : " << tableTREFile.fullPath(); } } + + trackQuality_ = iConfig.getParameter("TrackQuality"); + if (trackQuality_) { + trackQualityModel_ = std::make_unique(iConfig.getParameter("TrackQualityPSet")); + } } ///////////// @@ -684,6 +698,10 @@ void L1FPGATrackProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe // set TTTrack word aTrack.setTrackWordBits(); + if (trackQuality_) { + trackQualityModel_->setTrackQuality(aTrack); + } + // test track word //aTrack.testTrackWordBits(); diff --git a/L1Trigger/TrackFindingTracklet/python/Tracklet_cfi.py b/L1Trigger/TrackFindingTracklet/python/Tracklet_cfi.py index 998ca97e35fed..cab518307ffb2 100644 --- a/L1Trigger/TrackFindingTracklet/python/Tracklet_cfi.py +++ b/L1Trigger/TrackFindingTracklet/python/Tracklet_cfi.py @@ -1,4 +1,5 @@ import FWCore.ParameterSet.Config as cms +from L1Trigger.TrackTrigger.TrackQualityParams_cfi import * TTTracksFromTrackletEmulation = cms.EDProducer("L1FPGATrackProducer", TTStubSource = cms.InputTag("TTStubsFromPhase2TrackerDigis","StubAccepted"), @@ -18,7 +19,10 @@ wiresFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/wires_hourglass.dat'), DTCLinkFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/calcNumDTCLinks.txt'), DTCLinkLayerDiskFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/dtclinklayerdisk.dat'), - moduleCablingFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/modules_T5v3_27SP_nonant_tracklet.dat') + moduleCablingFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/modules_T5v3_27SP_nonant_tracklet.dat'), + # Quality Flag and Quality params + TrackQuality =cms.bool(True), + TrackQualityPSet = cms.PSet(TrackQualityParams) ) TTTracksFromExtendedTrackletEmulation = TTTracksFromTrackletEmulation.clone( @@ -29,6 +33,9 @@ wiresFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/wires_hourglassExtended.dat'), # specifying where the TrackletEngineDisplaced(TED)/TripletEngine(TRE) tables are located tableTEDFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/table_TED/table_TED_D1PHIA1_D2PHIA1.txt'), - tableTREFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/table_TRE/table_TRE_D1AD2A_1.txt') + tableTREFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/table_TRE/table_TRE_D1AD2A_1.txt'), + # Quality Flag and Quality params + TrackQuality =cms.bool(False), + TrackQualityPSet = cms.PSet(TrackQualityParams) ) diff --git a/L1Trigger/TrackFindingTracklet/src/AllProjectionsMemory.cc b/L1Trigger/TrackFindingTracklet/src/AllProjectionsMemory.cc index 7f4af45f7cadf..2aef2b74ef8ca 100644 --- a/L1Trigger/TrackFindingTracklet/src/AllProjectionsMemory.cc +++ b/L1Trigger/TrackFindingTracklet/src/AllProjectionsMemory.cc @@ -1,9 +1,11 @@ #include "L1Trigger/TrackFindingTracklet/interface/AllProjectionsMemory.h" #include "L1Trigger/TrackFindingTracklet/interface/Tracklet.h" #include "L1Trigger/TrackFindingTracklet/interface/Settings.h" -#include #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include +#include + using namespace trklet; using namespace std; @@ -13,17 +15,27 @@ AllProjectionsMemory::AllProjectionsMemory(string name, Settings const& settings } void AllProjectionsMemory::writeAP(bool first) { + const string dirTP = settings_.memPath() + "TrackletProjections/"; + std::ostringstream oss; - oss << "../data/MemPrints/TrackletProjections/AllProj_" << getName() << "_" << std::setfill('0') << std::setw(2) - << (iSector_ + 1) << ".dat"; + oss << dirTP << "AllProj_" << getName() << "_" << std::setfill('0') << std::setw(2) << (iSector_ + 1) << ".dat"; auto const& fname = oss.str(); if (first) { bx_ = 0; event_ = 1; - out_.open(fname.c_str()); + + if (not std::filesystem::exists(dirTP)) { + int fail = system((string("mkdir -p ") + dirTP).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " << dirTP; + } + out_.open(fname); + if (out_.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; + } else - out_.open(fname.c_str(), std::ofstream::app); + out_.open(fname, std::ofstream::app); out_ << "BX = " << (bitset<3>)bx_ << " Event : " << event_ << endl; diff --git a/L1Trigger/TrackFindingTracklet/src/AllStubsMemory.cc b/L1Trigger/TrackFindingTracklet/src/AllStubsMemory.cc index 9fab053a55905..315b7f668fbc9 100644 --- a/L1Trigger/TrackFindingTracklet/src/AllStubsMemory.cc +++ b/L1Trigger/TrackFindingTracklet/src/AllStubsMemory.cc @@ -10,7 +10,8 @@ AllStubsMemory::AllStubsMemory(string name, Settings const& settings, unsigned i : MemoryBase(name, settings, iSector) {} void AllStubsMemory::writeStubs(bool first) { - openFile(first, "../data/MemPrints/Stubs/AllStubs_"); + const string dirS = settings_.memPath() + "Stubs/"; + openFile(first, dirS, "AllStubs_"); for (unsigned int j = 0; j < stubs_.size(); j++) { string stub = stubs_[j]->str(); diff --git a/L1Trigger/TrackFindingTracklet/src/CandidateMatchMemory.cc b/L1Trigger/TrackFindingTracklet/src/CandidateMatchMemory.cc index 6c535de1c93c2..41b0326f7e5f0 100644 --- a/L1Trigger/TrackFindingTracklet/src/CandidateMatchMemory.cc +++ b/L1Trigger/TrackFindingTracklet/src/CandidateMatchMemory.cc @@ -2,10 +2,12 @@ #include "L1Trigger/TrackFindingTracklet/interface/Settings.h" #include "L1Trigger/TrackFindingTracklet/interface/Tracklet.h" #include "L1Trigger/TrackFindingTracklet/interface/Stub.h" -#include #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" +#include +#include + using namespace std; using namespace trklet; @@ -27,17 +29,28 @@ void CandidateMatchMemory::addMatch(std::pair tracklet, const St } void CandidateMatchMemory::writeCM(bool first) { + const string dirM = settings_.memPath() + "Matches/"; + std::ostringstream oss; - oss << "../data/MemPrints/Matches/CandidateMatches_" << getName() << "_" << std::setfill('0') << std::setw(2) - << (iSector_ + 1) << ".dat"; + oss << dirM << "CandidateMatches_" << getName() << "_" << std::setfill('0') << std::setw(2) << (iSector_ + 1) + << ".dat"; auto const& fname = oss.str(); if (first) { bx_ = 0; event_ = 1; - out_.open(fname.c_str()); + + if (not std::filesystem::exists(dirM)) { + int fail = system((string("mkdir -p ") + dirM).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " << dirM; + } + out_.open(fname); + if (out_.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; + } else - out_.open(fname.c_str(), std::ofstream::app); + out_.open(fname, std::ofstream::app); out_ << "BX = " << (bitset<3>)bx_ << " Event : " << event_ << endl; diff --git a/L1Trigger/TrackFindingTracklet/src/CleanTrackMemory.cc b/L1Trigger/TrackFindingTracklet/src/CleanTrackMemory.cc index 209c66431a5be..9c90b757e7225 100644 --- a/L1Trigger/TrackFindingTracklet/src/CleanTrackMemory.cc +++ b/L1Trigger/TrackFindingTracklet/src/CleanTrackMemory.cc @@ -2,6 +2,7 @@ #include "L1Trigger/TrackFindingTracklet/interface/Tracklet.h" #include "L1Trigger/TrackFindingTracklet/interface/SLHCEvent.h" #include +#include using namespace std; using namespace trklet; @@ -14,17 +15,27 @@ CleanTrackMemory::CleanTrackMemory( } void CleanTrackMemory::writeCT(bool first) { + const string dirCT = settings_.memPath() + "CleanTrack/"; + std::ostringstream oss; - oss << "../data/MemPrints/CleanTrack/CleanTrack_" << getName() << "_" << std::setfill('0') << std::setw(2) - << (iSector_ + 1) << ".dat"; + oss << dirCT << "CleanTrack_" << getName() << "_" << std::setfill('0') << std::setw(2) << (iSector_ + 1) << ".dat"; auto const& fname = oss.str(); if (first) { bx_ = 0; event_ = 1; - out_.open(fname.c_str()); + + if (not std::filesystem::exists(dirCT)) { + int fail = system((string("mkdir -p ") + dirCT).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " << dirCT; + } + out_.open(fname); + if (out_.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; + } else - out_.open(fname.c_str(), std::ofstream::app); + out_.open(fname, std::ofstream::app); out_ << "BX = " << (bitset<3>)bx_ << " Event : " << event_ << endl; @@ -42,9 +53,9 @@ void CleanTrackMemory::writeCT(bool first) { if (settings_.writeMonitorData("CT")) { std::string fnameAll = "CleanTracksAll.dat"; if (first && getName() == "CT_L1L2" && iSector_ == 0) - out_.open(fnameAll.c_str()); + out_.open(fnameAll); else - out_.open(fnameAll.c_str(), std::ofstream::app); + out_.open(fnameAll, std::ofstream::app); if (!tracks_.empty()) out_ << "BX= " << (bitset<3>)bx_ << " event= " << event_ << " seed= " << getName() diff --git a/L1Trigger/TrackFindingTracklet/src/FitTrack.cc b/L1Trigger/TrackFindingTracklet/src/FitTrack.cc index 4182fca50f7e3..440174026b1ac 100644 --- a/L1Trigger/TrackFindingTracklet/src/FitTrack.cc +++ b/L1Trigger/TrackFindingTracklet/src/FitTrack.cc @@ -826,7 +826,7 @@ std::vector FitTrack::orderedMatches(vector& fullma int bestIndex = -1; do { - int bestTCID = (1 << 16); + int bestTCID = -1; bestIndex = -1; for (unsigned int i = 0; i < fullmatch.size(); i++) { if (indexArray[i] >= fullmatch[i]->nMatches()) { @@ -834,7 +834,7 @@ std::vector FitTrack::orderedMatches(vector& fullma continue; } int TCID = fullmatch[i]->getTracklet(indexArray[i])->TCID(); - if (TCID < bestTCID) { + if (TCID < bestTCID || bestTCID < 0) { bestTCID = TCID; bestIndex = i; } diff --git a/L1Trigger/TrackFindingTracklet/src/FullMatchMemory.cc b/L1Trigger/TrackFindingTracklet/src/FullMatchMemory.cc index 6a8b239ee93a9..1f43b6a1f0439 100644 --- a/L1Trigger/TrackFindingTracklet/src/FullMatchMemory.cc +++ b/L1Trigger/TrackFindingTracklet/src/FullMatchMemory.cc @@ -2,8 +2,9 @@ #include "L1Trigger/TrackFindingTracklet/interface/Tracklet.h" #include "L1Trigger/TrackFindingTracklet/interface/Stub.h" #include "L1Trigger/TrackFindingTracklet/interface/L1TStub.h" -#include #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include +#include using namespace std; using namespace trklet; @@ -39,17 +40,27 @@ void FullMatchMemory::addMatch(Tracklet* tracklet, const Stub* stub) { } void FullMatchMemory::writeMC(bool first) { + const string dirM = settings_.memPath() + "Matches/"; + std::ostringstream oss; - oss << "../data/MemPrints/Matches/FullMatches_" << getName() << "_" << std::setfill('0') << std::setw(2) - << (iSector_ + 1) << ".dat"; + oss << dirM << "FullMatches_" << getName() << "_" << std::setfill('0') << std::setw(2) << (iSector_ + 1) << ".dat"; auto const& fname = oss.str(); if (first) { bx_ = 0; event_ = 1; - out_.open(fname.c_str()); + + if (not std::filesystem::exists(dirM)) { + int fail = system((string("mkdir -p ") + dirM).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " << dirM; + } + out_.open(fname); + if (out_.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; + } else - out_.open(fname.c_str(), std::ofstream::app); + out_.open(fname, std::ofstream::app); out_ << "BX = " << (bitset<3>)bx_ << " Event : " << event_ << endl; diff --git a/L1Trigger/TrackFindingTracklet/src/HybridFit.cc b/L1Trigger/TrackFindingTracklet/src/HybridFit.cc index 2867bb70a0dbd..5690cfbe8eaa9 100644 --- a/L1Trigger/TrackFindingTracklet/src/HybridFit.cc +++ b/L1Trigger/TrackFindingTracklet/src/HybridFit.cc @@ -17,6 +17,11 @@ HybridFit::HybridFit(unsigned int iSector, Settings const& settings, Globals* gl void HybridFit::Fit(Tracklet* tracklet, std::vector& trackstublist) { if (settings_.fakefit()) { + vector l1stubsFromFitTrack; + for (unsigned int k = 0; k < trackstublist.size(); k++) { + const L1TStub* L1stub = trackstublist[k]->l1tstub(); + l1stubsFromFitTrack.push_back(L1stub); + } tracklet->setFitPars(tracklet->rinvapprox(), tracklet->phi0approx(), tracklet->d0approx(), @@ -38,7 +43,8 @@ void HybridFit::Fit(Tracklet* tracklet, std::vector& trackstublist) tracklet->fpgaz0().value(), 0, 0, - 0); + 0, + l1stubsFromFitTrack); return; } diff --git a/L1Trigger/TrackFindingTracklet/src/InputLinkMemory.cc b/L1Trigger/TrackFindingTracklet/src/InputLinkMemory.cc index de31792a719ea..ddfd115a53fcf 100644 --- a/L1Trigger/TrackFindingTracklet/src/InputLinkMemory.cc +++ b/L1Trigger/TrackFindingTracklet/src/InputLinkMemory.cc @@ -86,7 +86,8 @@ bool InputLinkMemory::addStub( } void InputLinkMemory::writeStubs(bool first) { - openFile(first, "../data/MemPrints/InputStubs/InputStubs_"); + const string dirIS = settings_.memPath() + "InputStubs/"; + openFile(first, dirIS, "InputStubs_"); for (unsigned int j = 0; j < stubs_.size(); j++) { string stub = stubs_[j]->str(); diff --git a/L1Trigger/TrackFindingTracklet/src/LayerProjection.cc b/L1Trigger/TrackFindingTracklet/src/LayerProjection.cc index e6480bc930f7d..83cb116eacb6a 100644 --- a/L1Trigger/TrackFindingTracklet/src/LayerProjection.cc +++ b/L1Trigger/TrackFindingTracklet/src/LayerProjection.cc @@ -20,7 +20,8 @@ void LayerProjection::init(Settings const& settings, double phiprojapprox, double zprojapprox, double phiprojderapprox, - double zprojderapprox) { + double zprojderapprox, + bool isPSseed) { assert(projlayer > 0); assert(projlayer <= N_LAYER); @@ -62,12 +63,17 @@ void LayerProjection::init(Settings const& settings, ////This determines the central bin: ////int zbin=4+(zproj.value()>>(zproj.nbits()-3)); ////But we need some range (particularly for L5L6 seed projecting to L1-L3): + int offset = 4; + if (isPSseed) { + offset = 1; + } unsigned int zbin1 = (1 << (settings.MEBinsBits() - 1)) + - (((fpgazproj_.value() >> (fpgazproj_.nbits() - settings.MEBinsBits() - 2)) - 2) >> 2); + (((fpgazproj_.value() >> (fpgazproj_.nbits() - settings.MEBinsBits() - 3)) - offset) >> 3); unsigned int zbin2 = (1 << (settings.MEBinsBits() - 1)) + - (((fpgazproj_.value() >> (fpgazproj_.nbits() - settings.MEBinsBits() - 2)) + 2) >> 2); - if (zbin1 >= settings.MEBins()) + (((fpgazproj_.value() >> (fpgazproj_.nbits() - settings.MEBinsBits() - 3)) + offset) >> 3); + if (zbin1 >= settings.MEBins()) { zbin1 = 0; //note that zbin1 is unsigned + } if (zbin2 >= settings.MEBins()) zbin2 = settings.MEBins() - 1; assert(zbin1 <= zbin2); @@ -83,7 +89,7 @@ void LayerProjection::init(Settings const& settings, (fpgazproj_.value() >> (fpgazproj_.nbits() - (settings.MEBinsBits() + 3)))) - (zbin1 << 3); - fpgafinezvm_.set(finez, 4, true, __LINE__, __FILE__); // fine z postions starting at zbin1 + fpgafinezvm_.set(finez, 4, true, __LINE__, __FILE__); // fine z postions starting at zbin1 //FIXME using 3 bits phiproj_ = phiproj; zproj_ = zproj; diff --git a/L1Trigger/TrackFindingTracklet/src/MatchCalculator.cc b/L1Trigger/TrackFindingTracklet/src/MatchCalculator.cc index 7e43c32886922..be1fdd992fea2 100644 --- a/L1Trigger/TrackFindingTracklet/src/MatchCalculator.cc +++ b/L1Trigger/TrackFindingTracklet/src/MatchCalculator.cc @@ -13,6 +13,8 @@ #include "FWCore/Utilities/interface/Exception.h" #include "DataFormats/Math/interface/deltaPhi.h" +#include + using namespace std; using namespace trklet; @@ -57,8 +59,18 @@ MatchCalculator::MatchCalculator(string name, Settings const& settings, Globals* } if (iSector_ == 0 && layerdisk_ < N_LAYER && settings_.writeTable()) { - ofstream outphicut; - outphicut.open(getName() + "_phicut.tab"); + if (not std::filesystem::exists(settings_.tablePath())) { + int fail = system((string("mkdir -p ") + settings_.tablePath()).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " + << settings_.tablePath(); + } + + const string filephicut = settings_.tablePath() + getName() + "_phicut.tab"; + ofstream outphicut(filephicut); + if (outphicut.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << filephicut; + outphicut << "{" << endl; for (unsigned int seedindex = 0; seedindex < N_SEED; seedindex++) { if (seedindex != 0) @@ -68,8 +80,11 @@ MatchCalculator::MatchCalculator(string name, Settings const& settings, Globals* outphicut << endl << "};" << endl; outphicut.close(); - ofstream outzcut; - outzcut.open(getName() + "_zcut.tab"); + const string filezcut = settings_.tablePath() + getName() + "_zcut.tab"; + ofstream outzcut(filezcut); + if (outzcut.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << filezcut; + outzcut << "{" << endl; for (unsigned int seedindex = 0; seedindex < N_SEED; seedindex++) { if (seedindex != 0) @@ -81,47 +96,64 @@ MatchCalculator::MatchCalculator(string name, Settings const& settings, Globals* } if (iSector_ == 0 && layerdisk_ >= N_LAYER && settings_.writeTable()) { - ofstream outphicut; - outphicut.open(getName() + "_PSphicut.tab"); - outphicut << "{" << endl; + if (not std::filesystem::exists(settings_.tablePath())) { + int fail = system((string("mkdir -p ") + settings_.tablePath()).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " + << settings_.tablePath(); + } + + const string filePSphicut = settings_.tablePath() + getName() + "_PSphicut.tab"; + ofstream outPSphicut(filePSphicut); + if (outPSphicut.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << filePSphicut; + outPSphicut << "{" << endl; for (unsigned int seedindex = 0; seedindex < N_SEED; seedindex++) { if (seedindex != 0) - outphicut << "," << endl; - outphicut << rphicutPS_[seedindex]; + outPSphicut << "," << endl; + outPSphicut << rphicutPS_[seedindex]; } - outphicut << endl << "};" << endl; - outphicut.close(); - - outphicut.open(getName() + "_2Sphicut.tab"); - outphicut << "{" << endl; + outPSphicut << endl << "};" << endl; + outPSphicut.close(); + + const string file2Sphicut = settings_.tablePath() + getName() + "_2Sphicut.tab"; + ofstream out2Sphicut(file2Sphicut); + if (out2Sphicut.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << file2Sphicut; + out2Sphicut << "{" << endl; for (unsigned int seedindex = 0; seedindex < N_SEED; seedindex++) { if (seedindex != 0) - outphicut << "," << endl; - outphicut << rphicut2S_[seedindex]; + out2Sphicut << "," << endl; + out2Sphicut << rphicut2S_[seedindex]; } - outphicut << endl << "};" << endl; - outphicut.close(); - - ofstream outzcut; - outzcut.open(getName() + "_PSrcut.tab"); - outzcut << "{" << endl; + out2Sphicut << endl << "};" << endl; + out2Sphicut.close(); + + const string filePSrcut = settings_.tablePath() + getName() + "_PSrcut.tab"; + ofstream outPSrcut(filePSrcut); + if (outPSrcut.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << filePSrcut; + outPSrcut << "{" << endl; for (unsigned int seedindex = 0; seedindex < N_SEED; seedindex++) { if (seedindex != 0) - outzcut << "," << endl; - outzcut << rcutPS_[seedindex]; + outPSrcut << "," << endl; + outPSrcut << rcutPS_[seedindex]; } - outzcut << endl << "};" << endl; - outzcut.close(); - - outzcut.open(getName() + "_2Srcut.tab"); - outzcut << "{" << endl; + outPSrcut << endl << "};" << endl; + outPSrcut.close(); + + const string file2Srcut = settings_.tablePath() + getName() + "_2Srcut.tab"; + ofstream out2Srcut(file2Srcut); + if (out2Srcut.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << file2Srcut; + out2Srcut << "{" << endl; for (unsigned int seedindex = 0; seedindex < N_SEED; seedindex++) { if (seedindex != 0) - outzcut << "," << endl; - outzcut << rcut2S_[seedindex]; + out2Srcut << "," << endl; + out2Srcut << rcut2S_[seedindex]; } - outzcut << endl << "};" << endl; - outzcut.close(); + out2Srcut << endl << "};" << endl; + out2Srcut.close(); } for (unsigned int i = 0; i < N_DSS_MOD * 2; i++) { @@ -268,23 +300,23 @@ void MatchCalculator::execute() { edm::LogProblem("Tracklet") << "WARNING dphi and/or dphiapprox too large : " << dphi << " " << dphiapprox << endl; } - assert(std::abs(dphi) < 0.2); - assert(std::abs(dphiapprox) < 0.2); - - if (settings_.writeMonitorData("Residuals")) { - double pt = 0.01 * settings_.c() * settings_.bfield() / std::abs(tracklet->rinv()); - - globals_->ofstream("layerresiduals.txt") - << layerdisk_ + 1 << " " << seedindex << " " << pt << " " - << ideltaphi * settings_.kphi1() * settings_.rmean(layerdisk_) << " " - << dphiapprox * settings_.rmean(layerdisk_) << " " - << phimatchcut_[seedindex] * settings_.kphi1() * settings_.rmean(layerdisk_) << " " - << ideltaz * fact_ * settings_.kz() << " " << dz << " " << zmatchcut_[seedindex] * settings_.kz() << endl; - } - bool imatch = (std::abs(ideltaphi) <= (int)phimatchcut_[seedindex]) && - (std::abs(ideltaz * fact_) <= (int)zmatchcut_[seedindex]); + bool imatch = false; + if (std::abs(dphi) < 0.2 && std::abs(dphiapprox) < 0.2) { //Changed the Asserts into if statements + if (settings_.writeMonitorData("Residuals")) { + double pt = 0.01 * settings_.c() * settings_.bfield() / std::abs(tracklet->rinv()); + + globals_->ofstream("layerresiduals.txt") + << layerdisk_ + 1 << " " << seedindex << " " << pt << " " + << ideltaphi * settings_.kphi1() * settings_.rmean(layerdisk_) << " " + << dphiapprox * settings_.rmean(layerdisk_) << " " + << phimatchcut_[seedindex] * settings_.kphi1() * settings_.rmean(layerdisk_) << " " + << ideltaz * fact_ * settings_.kz() << " " << dz << " " << zmatchcut_[seedindex] * settings_.kz() << endl; + } + imatch = (std::abs(ideltaphi) <= (int)phimatchcut_[seedindex]) && + (std::abs(ideltaz * fact_) <= (int)zmatchcut_[seedindex]); + } if (settings_.debugTracklet()) { edm::LogVerbatim("Tracklet") << getName() << " imatch = " << imatch << " ideltaphi cut " << ideltaphi << " " << phimatchcut_[seedindex] << " ideltaz*fact cut " << ideltaz * fact_ << " " @@ -428,19 +460,26 @@ void MatchCalculator::execute() { double drphicut = idrphicut * settings_.kphi() * settings_.kr(); double drcut = idrcut * settings_.krprojshiftdisk(); - if (settings_.writeMonitorData("Residuals")) { - double pt = 0.01 * settings_.c() * settings_.bfield() / std::abs(tracklet->rinv()); - - globals_->ofstream("diskresiduals.txt") - << disk << " " << stub->isPSmodule() << " " << tracklet->layer() << " " << abs(tracklet->disk()) << " " - << pt << " " << ideltaphi * settings_.kphi() * stub->r() << " " << drphiapprox << " " << drphicut << " " - << ideltar * settings_.krprojshiftdisk() << " " << deltar << " " << drcut << " " << endl; - } + bool match, imatch; + if (std::abs(dphi) < 0.25 && std::abs(dphiapprox) < 0.25) { //Changed the Asserts into if statements + if (settings_.writeMonitorData("Residuals")) { + double pt = 0.01 * settings_.c() * settings_.bfield() / std::abs(tracklet->rinv()); - bool match = (std::abs(drphi) < drphicut) && (std::abs(deltar) < drcut); + globals_->ofstream("diskresiduals.txt") + << disk << " " << stub->isPSmodule() << " " << tracklet->layer() << " " << abs(tracklet->disk()) << " " + << pt << " " << ideltaphi * settings_.kphi() * stub->r() << " " << drphiapprox << " " << drphicut << " " + << ideltar * settings_.krprojshiftdisk() << " " << deltar << " " << drcut << " " << endl; + } - bool imatch = (std::abs(ideltaphi * irstub) < idrphicut) && (std::abs(ideltar) < idrcut); + match = (std::abs(drphi) < drphicut) && (std::abs(deltar) < drcut); + imatch = (std::abs(ideltaphi * irstub) < idrphicut) && (std::abs(ideltar) < idrcut); + } else { + edm::LogProblem("Tracklet") << "WARNING dphi and/or dphiapprox too large : " << dphi << " " << dphiapprox + << "dphi " << dphi << " Seed / ISeed " << tracklet->getISeed() << endl; + match = false; + imatch = false; + } if (settings_.debugTracklet()) { edm::LogVerbatim("Tracklet") << "imatch match disk: " << imatch << " " << match << " " << std::abs(ideltaphi) << " " << drphicut / (settings_.kphi() * stub->r()) << " " << std::abs(ideltar) @@ -454,12 +493,6 @@ void MatchCalculator::execute() { edm::LogVerbatim("Tracklet") << "MatchCalculator found match in disk " << getName(); } - if (std::abs(dphi) >= 0.25) { - edm::LogVerbatim("Tracklet") << "dphi " << dphi << " Seed / ISeed " << tracklet->getISeed(); - } - assert(std::abs(dphi) < 0.25); - assert(std::abs(dphiapprox) < 0.25); - tracklet->addMatchDisk(disk, ideltaphi, ideltar, @@ -501,7 +534,7 @@ std::vector, const Stub*> > MatchCalculator: int bestIndex = -1; do { int bestSector = 100; - int bestTCID = (1 << 16); + int bestTCID = -1; bestIndex = -1; for (unsigned int i = 0; i < candmatch.size(); i++) { if (indexArray[i] >= candmatch[i]->nMatches()) { @@ -523,7 +556,7 @@ std::vector, const Stub*> > MatchCalculator: bestIndex = i; } if (dSector == bestSector) { - if (TCID < bestTCID) { + if (TCID < bestTCID || bestTCID < 0) { bestTCID = TCID; bestIndex = i; } diff --git a/L1Trigger/TrackFindingTracklet/src/MatchEngine.cc b/L1Trigger/TrackFindingTracklet/src/MatchEngine.cc index 417e43c24f8f7..0e528803e2747 100644 --- a/L1Trigger/TrackFindingTracklet/src/MatchEngine.cc +++ b/L1Trigger/TrackFindingTracklet/src/MatchEngine.cc @@ -10,6 +10,8 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" +#include + using namespace std; using namespace trklet; @@ -26,6 +28,16 @@ MatchEngine::MatchEngine(string name, Settings const& settings, Globals* global, throw cms::Exception("BadConfig") << __FILE__ << " " << __LINE__ << " " << name << " subname = " << subname << " " << layer_ << " " << disk_; + barrel_ = layer_ > 0; + + nvm_ = barrel_ ? settings_.nvmme(layer_ - 1) * settings_.nallstubs(layer_ - 1) + : settings_.nvmme(disk_ + N_LAYER - 1) * settings_.nallstubs(disk_ + N_LAYER - 1); + + if (nvm_ == 32) + nvmbits_ = 5; + else if (nvm_ == 16) + nvmbits_ = 4; + if (layer_ > 0) { unsigned int nbits = 3; if (layer_ >= 4) @@ -45,12 +57,23 @@ MatchEngine::MatchEngine(string name, Settings const& settings, Globals* global, } if (settings_.writeTable()) { - ofstream out; + if (not std::filesystem::exists(settings_.tablePath())) { + int fail = system((string("mkdir -p ") + settings_.tablePath()).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " + << settings_.tablePath(); + } + char layer = '0' + layer_; string fname = "METable_L"; fname += layer; fname += ".tab"; - out.open(fname.c_str()); + + const string full_fname = settings_.tablePath() + fname; + ofstream out(full_fname); + if (out.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << full_fname; + out << "{" << endl; for (unsigned int i = 0; i < table_.size(); i++) { if (i != 0) { @@ -115,8 +138,6 @@ void MatchEngine::addInput(MemoryBase* memory, string input) { } void MatchEngine::execute() { - bool barrel = layer_ > 0; - unsigned int countall = 0; unsigned int countpass = 0; @@ -135,6 +156,7 @@ void MatchEngine::execute() { int rzbin = 0; int projfinerz = 0; int projfinerzadj = 0; + unsigned int projfinephi = 0; int projindex = 0; int projrinv = 0; @@ -173,9 +195,9 @@ void MatchEngine::execute() { iproj++; moreproj = iproj < nproj; - unsigned int rzfirst = barrel ? proj->zbin1projvm(layer_) : proj->rbin1projvm(disk_); + unsigned int rzfirst = barrel_ ? proj->zbin1projvm(layer_) : proj->rbin1projvm(disk_); unsigned int rzlast = rzfirst; - bool second = (barrel ? proj->zbin2projvm(layer_) : proj->rbin2projvm(disk_)) == 1; + bool second = (barrel_ ? proj->zbin2projvm(layer_) : proj->rbin2projvm(disk_)) == 1; if (second) rzlast += 1; @@ -225,12 +247,15 @@ void MatchEngine::execute() { Tracklet* proj = vmprojs_->getTracklet(projindex); + FPGAWord fpgaphi = barrel_ ? proj->fpgaphiproj(layer_) : proj->fpgaphiprojdisk(disk_); + projfinephi = (fpgaphi.value() >> (fpgaphi.nbits() - (nvmbits_ + 3))) & 7; + nstubs = vmstubs_->nStubsBin(rzbin); - projfinerz = barrel ? proj->finezvm(layer_) : proj->finervm(disk_); + projfinerz = barrel_ ? proj->finezvm(layer_) : proj->finervm(disk_); projrinv = - barrel + barrel_ ? (16 + (((-2) * proj->fpgaphiprojder(layer_).value()) >> (proj->fpgaphiprojder(layer_).nbits() - 4))) : proj->getBendIndex(disk_).value(); assert(projrinv >= 0); @@ -275,31 +300,33 @@ void MatchEngine::execute() { int nbits = isPSmodule ? 3 : 4; - //TODO - should use finephi information to reduce combinatorics + int deltaphi = projfinephi - vmstub.finephi().value(); + + bool passphi = (abs(deltaphi) < 3) || (abs(deltaphi) > 5); unsigned int index = (projrinv << nbits) + vmstub.bend().value(); //Check if stub z position consistent int idrz = stubfinerz - projfinerzadj; - bool pass; + bool passz; - if (barrel) { + if (barrel_) { if (isPSseed) { - pass = idrz >= -2 && idrz <= 2; + passz = idrz >= -2 && idrz <= 2; } else { - pass = idrz >= -5 && idrz <= 5; + passz = idrz >= -5 && idrz <= 5; } } else { if (isPSmodule) { - pass = idrz >= -1 && idrz <= 1; + passz = idrz >= -1 && idrz <= 1; } else { - pass = idrz >= -5 && idrz <= 5; + passz = idrz >= -5 && idrz <= 5; } } //Check if stub bend and proj rinv consistent - if (pass) { - if (barrel ? table_[index] : (isPSmodule ? tablePS_[index] : table2S_[index])) { + if (passz && passphi) { + if (barrel_ ? table_[index] : (isPSmodule ? tablePS_[index] : table2S_[index])) { Tracklet* proj = vmprojs_->getTracklet(projindex); std::pair tmp(proj, vmprojs_->getAllProjIndex(projindex)); if (settings_.writeMonitorData("Seeds")) { diff --git a/L1Trigger/TrackFindingTracklet/src/MatchEngineUnit.cc b/L1Trigger/TrackFindingTracklet/src/MatchEngineUnit.cc index c4b9a1275e6f0..47d621adcaec6 100644 --- a/L1Trigger/TrackFindingTracklet/src/MatchEngineUnit.cc +++ b/L1Trigger/TrackFindingTracklet/src/MatchEngineUnit.cc @@ -18,6 +18,7 @@ void MatchEngineUnit::init(VMStubsMEMemory* vmstubsmemory, int projrinv, int projfinerz, int projfinephi, + bool usesecond, bool isPSseed, Tracklet* proj) { vmstubsmemory_ = vmstubsmemory; @@ -27,6 +28,7 @@ void MatchEngineUnit::init(VMStubsMEMemory* vmstubsmemory, projrinv_ = projrinv; projfinerz_ = projfinerz; projfinephi_ = projfinephi; + usesecond_ = usesecond; isPSseed_ = isPSseed; proj_ = proj; } @@ -37,10 +39,6 @@ void MatchEngineUnit::step() { const VMStubME& vmstub = vmstubsmemory_->getVMStubMEBin(slot_, istub_); - istub_++; - if (istub_ >= vmstubsmemory_->nStubsBin(slot_)) - idle_ = true; - bool isPSmodule = vmstub.isPSmodule(); int stubfinerz = vmstub.finerz().value(); int stubfinephi = vmstub.finephi().value(); @@ -48,10 +46,6 @@ void MatchEngineUnit::step() { int deltaphi = stubfinephi - projfinephi_; bool dphicut = (abs(deltaphi) < 3) || (abs(deltaphi) > 5); //TODO - need better implementations - dphicut = true; //Not used until cuts cleaned up - - if (!barrel_) - dphicut = true; int nbits = isPSmodule ? 3 : 4; @@ -63,7 +57,7 @@ void MatchEngineUnit::step() { if (barrel_) { if (isPSseed_) { - pass = idrz >= -2 && idrz <= 2; + pass = idrz >= -1 && idrz <= 1; } else { pass = idrz >= -5 && idrz <= 5; } @@ -71,7 +65,7 @@ void MatchEngineUnit::step() { if (isPSmodule) { pass = idrz >= -1 && idrz <= 1; } else { - pass = idrz >= -5 && idrz <= 5; + pass = idrz >= -3 && idrz <= 3; } } @@ -80,4 +74,22 @@ void MatchEngineUnit::step() { std::pair tmp(proj_, vmstub.stub()); candmatches_.store(tmp); } + + istub_++; + if (istub_ >= vmstubsmemory_->nStubsBin(slot_)) { + if (usesecond_) { + usesecond_ = false; + istub_ = 0; + slot_++; + projfinerz_ -= (1 << NFINERZBITS); + } else { + idle_ = true; + } + } +} + +void MatchEngineUnit::reset() { + candmatches_.reset(); + idle_ = true; + istub_ = 0; } diff --git a/L1Trigger/TrackFindingTracklet/src/MatchProcessor.cc b/L1Trigger/TrackFindingTracklet/src/MatchProcessor.cc index ff57ae646421b..2a977a963cc00 100644 --- a/L1Trigger/TrackFindingTracklet/src/MatchProcessor.cc +++ b/L1Trigger/TrackFindingTracklet/src/MatchProcessor.cc @@ -8,6 +8,8 @@ #include "FWCore/Utilities/interface/Exception.h" #include "DataFormats/Math/interface/deltaPhi.h" +#include + using namespace std; using namespace trklet; @@ -18,6 +20,7 @@ MatchProcessor::MatchProcessor(string name, Settings const& settings, Globals* g phiregion_ = name[8] - 'A'; initLayerDisk(3, layer_, disk_); + layerdisk_ = initLayerDisk(3); //TODO should sort out constants here icorrshift_ = 7; @@ -59,8 +62,18 @@ MatchProcessor::MatchProcessor(string name, Settings const& settings, Globals* g } if (iSector_ == 0 && layer_ > 0 && settings_.writeTable()) { - ofstream outphicut; - outphicut.open(getName() + "_phicut.tab"); + if (not std::filesystem::exists(settings_.tablePath())) { + int fail = system((string("mkdir -p ") + settings_.tablePath()).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " + << settings_.tablePath(); + } + + const string filephicut = settings_.tablePath() + getName() + "_phicut.tab"; + ofstream outphicut(filephicut); + if (outphicut.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << filephicut; + outphicut << "{" << endl; for (unsigned int seedindex = 0; seedindex < 12; seedindex++) { if (seedindex != 0) @@ -70,8 +83,11 @@ MatchProcessor::MatchProcessor(string name, Settings const& settings, Globals* g outphicut << endl << "};" << endl; outphicut.close(); - ofstream outzcut; - outzcut.open(getName() + "_zcut.tab"); + const string filezcut = settings_.tablePath() + getName() + "_zcut.tab"; + ofstream outzcut(filezcut); + if (outzcut.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << filezcut; + outzcut << "{" << endl; for (unsigned int seedindex = 0; seedindex < N_SEED; seedindex++) { if (seedindex != 0) @@ -100,12 +116,22 @@ MatchProcessor::MatchProcessor(string name, Settings const& settings, Globals* g } if (settings_.writeTable()) { - ofstream out; + if (not std::filesystem::exists(settings_.tablePath())) { + int fail = system((string("mkdir -p ") + settings_.tablePath()).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " + << settings_.tablePath(); + } + char layer = '0' + layer_; string fname = "METable_L"; fname += layer; fname += ".tab"; - out.open(fname.c_str()); + const string full_fname = settings_.tablePath() + fname; + ofstream out(full_fname); + if (out.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << full_fname; + out << "{" << endl; for (unsigned int i = 0; i < table_.size(); i++) { if (i != 0) { @@ -206,6 +232,8 @@ void MatchProcessor::addInput(MemoryBase* memory, string input) { } void MatchProcessor::execute() { + assert(vmstubs_.size() == 1); + if (globals_->projectionRouterBendTable() == nullptr) { // move to constructor?! auto* bendTablePtr = new ProjectionRouterBendTable(); bendTablePtr->init(settings_, globals_, nrbits_, nphiderbits_); @@ -228,150 +256,194 @@ void MatchProcessor::execute() { Tracklet* oldTracklet = nullptr; + unsigned int countme = 0; unsigned int countall = 0; unsigned int countsel = 0; + unsigned int countinputproj = 0; unsigned int iprojmem = 0; unsigned int iproj = 0; inputProjBuffer_.reset(); - for (unsigned int istep = 0; istep < settings_.maxStep("MP"); istep++) { - //Step 1 - //First step here checks if we have more input projections to put into - //the input puffer for projections - if (iprojmem < inputprojs_.size()) { - TrackletProjectionsMemory* projMem = inputprojs_[iprojmem]; - if (projMem->nTracklets() == 0) { - iprojmem++; - } else if (iproj < projMem->nTracklets()) { - if (!inputProjBuffer_.almostfull()) { - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") << getName() << " have projection in memory : " << projMem->getName(); - } - - Tracklet* proj = projMem->getTracklet(iproj); - FPGAWord fpgaphi = barrel_ ? proj->fpgaphiproj(layer_) : proj->fpgaphiprojdisk(disk_); - - int iphi = (fpgaphi.value() >> (fpgaphi.nbits() - nvmbits_)) & (nvmbins_ - 1); - - int projrinv = -1; - if (barrel_) { - projrinv = 16 + (proj->fpgarinv().value() >> (proj->fpgarinv().nbits() - 5)); - } else { - //The next lines looks up the predicted bend based on: - // 1 - r projections - // 2 - phi derivative - // 3 - the sign - i.e. if track is forward or backward - int rindex = (proj->fpgarprojdisk(disk_).value() >> (proj->fpgarprojdisk(disk_).nbits() - nrbits_)) & - ((1 << nrbits_) - 1); - - int phiderindex = - (proj->fpgaphiprojderdisk(disk_).value() >> (proj->fpgaphiprojderdisk(disk_).nbits() - nphiderbits_)) & - ((1 << nphiderbits_) - 1); - - int signindex = (proj->fpgarprojderdisk(disk_).value() < 0); - - int bendindex = (signindex << (nphiderbits_ + nrbits_)) + (rindex << (nphiderbits_)) + phiderindex; - - projrinv = globals_->projectionRouterBendTable()->bendLoookup(abs(disk_) - 1, bendindex); - - proj->setBendIndex(projrinv, disk_); - } - assert(projrinv >= 0); + for (unsigned int i = 0; i < inputprojs_.size(); i++) { + countinputproj += inputprojs_[i]->nTracklets(); + } - unsigned int slot = barrel_ ? proj->zbin1projvm(layer_) : proj->rbin1projvm(disk_); - bool second = (barrel_ ? proj->zbin2projvm(layer_) : proj->rbin2projvm(disk_)) == 1; + for (unsigned int iME = 0; iME < nMatchEngines_; iME++) { + matchengines_[iME].reset(); + } - unsigned int projfinephi = fpgaphi.value() >> (fpgaphi.nbits() - (nvmbits_ + 3)) & 7; - int projfinerz = barrel_ ? proj->finezvm(layer_) : proj->finervm(disk_); + unsigned int step2delay = 0; + unsigned int step3delay = 0; - bool isPSseed = proj->PSseed() == 1; + for (unsigned int istep = 0; istep < settings_.maxStep("MP") + step3delay; istep++) { + bool projdone = false; + bool medone = true; + //Step 1 + //First step here checks if we have more input projections to put into + //the input puffer for projections - VMStubsMEMemory* stubmem = vmstubs_[iphi]; - if (stubmem->nStubsBin(slot) != 0) { - ProjectionTemp tmpProj(proj, slot, projrinv, projfinerz, projfinephi, iphi, isPSseed); - inputProjBuffer_.store(tmpProj); - } - if (second && (stubmem->nStubsBin(slot + 1) != 0)) { - ProjectionTemp tmpProj(proj, slot + 1, projrinv, projfinerz - 8, projfinephi, iphi, isPSseed); - inputProjBuffer_.store(tmpProj); - } - iproj++; - if (iproj == projMem->nTracklets()) { - iproj = 0; - iprojmem++; + if (istep < settings_.maxStep("MP")) { + if (iprojmem < inputprojs_.size()) { + TrackletProjectionsMemory* projMem = inputprojs_[iprojmem]; + if (projMem->nTracklets() == 0) { + iprojmem++; + } else if (iproj < projMem->nTracklets()) { + if (!inputProjBuffer_.almostfull()) { + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << getName() << " have projection in memory : " << projMem->getName(); + } + + Tracklet* proj = projMem->getTracklet(iproj); + FPGAWord fpgaphi = barrel_ ? proj->fpgaphiproj(layer_) : proj->fpgaphiprojdisk(disk_); + + int iphi = (fpgaphi.value() >> (fpgaphi.nbits() - nvmbits_)) & (nvmbins_ - 1); + + int projrinv = -1; + if (barrel_) { + projrinv = (1 << (NRINVBITS - 1)) + (proj->fpgarinv().value() >> (proj->fpgarinv().nbits() - NRINVBITS)); + } else { + //The next lines looks up the predicted bend based on: + // 1 - r projections + // 2 - phi derivative + // 3 - the sign - i.e. if track is forward or backward + int rindex = (proj->fpgarprojdisk(disk_).value() >> (proj->fpgarprojdisk(disk_).nbits() - nrbits_)) & + ((1 << nrbits_) - 1); + + int phiderindex = (proj->fpgaphiprojderdisk(disk_).value() >> + (proj->fpgaphiprojderdisk(disk_).nbits() - nphiderbits_)) & + ((1 << nphiderbits_) - 1); + + int signindex = (proj->fpgarprojderdisk(disk_).value() < 0); + + int bendindex = (signindex << (nphiderbits_ + nrbits_)) + (rindex << (nphiderbits_)) + phiderindex; + + projrinv = globals_->projectionRouterBendTable()->bendLoookup(abs(disk_) - 1, bendindex); + + proj->setBendIndex(projrinv, disk_); + } + assert(projrinv >= 0); + + unsigned int slot = barrel_ ? proj->zbin1projvm(layer_) : proj->rbin1projvm(disk_); + bool second = (barrel_ ? proj->zbin2projvm(layer_) : proj->rbin2projvm(disk_)); + + int nfinephi = 3; + unsigned int projfinephi = + (fpgaphi.value() >> (fpgaphi.nbits() - (nvmbits_ + nfinephi))) & ((1 << nfinephi) - 1); + int projfinerz = barrel_ ? proj->finezvm(layer_) : proj->finervm(disk_); + + bool isPSseed = proj->PSseed() == 1; + + int nbins = 8; + if (layerdisk_ >= 6) + nbins = 16; + + VMStubsMEMemory* stubmem = vmstubs_[0]; + bool usefirst = stubmem->nStubsBin(iphi * nbins + slot) != 0; + bool usesecond = (second && (stubmem->nStubsBin(iphi * nbins + slot + 1) != 0)); + + if (usefirst) { + ProjectionTemp tmpProj(proj, slot, projrinv, projfinerz, projfinephi, iphi, usesecond, isPSseed); + inputProjBuffer_.store(tmpProj); + } else if (usesecond) { + ProjectionTemp tmpProj(proj, slot + 1, projrinv, projfinerz - 8, projfinephi, iphi, false, isPSseed); + inputProjBuffer_.store(tmpProj); + } + iproj++; + if (iproj == projMem->nTracklets()) { + iproj = 0; + iprojmem++; + } } } + } else { + projdone = true; } } //Step 2 //Check if we have ME that can process projection - bool addedProjection = false; - for (unsigned int iME = 0; iME < nMatchEngines_; iME++) { - matchengines_[iME].step(); - //if match engine empty and we have queued projections add to match engine - if ((!addedProjection) && matchengines_[iME].idle() && (!inputProjBuffer_.empty())) { - ProjectionTemp tmpProj = inputProjBuffer_.read(); - VMStubsMEMemory* stubmem = vmstubs_[tmpProj.iphi()]; + if (istep >= step2delay && istep < settings_.maxStep("MP") + step2delay) { + bool addedProjection = false; + for (unsigned int iME = 0; iME < nMatchEngines_; iME++) { + if (!matchengines_[iME].idle()) + countme++; + matchengines_[iME].step(); + //if match engine empty and we have queued projections add to match engine + if ((!addedProjection) && matchengines_[iME].idle() && (!inputProjBuffer_.empty())) { + ProjectionTemp tmpProj = inputProjBuffer_.read(); + VMStubsMEMemory* stubmem = vmstubs_[0]; - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") << getName() << " adding projection to match engine"; - } + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << getName() << " adding projection to match engine"; + } - matchengines_[iME].init(stubmem, - tmpProj.slot(), - tmpProj.projrinv(), - tmpProj.projfinerz(), - tmpProj.projfinephi(), - tmpProj.isPSseed(), - tmpProj.proj()); - addedProjection = true; + int nbins = 8; + if (layerdisk_ >= 6) + nbins = 16; + + matchengines_[iME].init(stubmem, + tmpProj.iphi() * nbins + tmpProj.slot(), + tmpProj.projrinv(), + tmpProj.projfinerz(), + tmpProj.projfinephi(), + tmpProj.usesecond(), + tmpProj.isPSseed(), + tmpProj.proj()); + addedProjection = true; + } } } //Step 3 //Check if we have candidate match to process - unsigned int iMEbest = nMatchEngines_; - int bestTCID = -1; - bool bestInPipeline = false; - for (unsigned int iME = 0; iME < nMatchEngines_; iME++) { - bool empty = matchengines_[iME].empty(); - if (empty && matchengines_[iME].idle()) - continue; - int currentTCID = empty ? matchengines_[iME].currentProj()->TCID() : matchengines_[iME].peek().first->TCID(); - if ((iMEbest == nMatchEngines_) || (currentTCID < bestTCID)) { - iMEbest = iME; - bestTCID = currentTCID; - bestInPipeline = empty; + if (istep >= step3delay) { + unsigned int iMEbest = nMatchEngines_; + int bestTCID = -1; + bool bestInPipeline = false; + for (unsigned int iME = 0; iME < nMatchEngines_; iME++) { + bool empty = matchengines_[iME].empty(); + medone = medone && (empty && matchengines_[iME].idle()); + if (empty && matchengines_[iME].idle()) + continue; + int currentTCID = empty ? matchengines_[iME].currentProj()->TCID() : matchengines_[iME].peek().first->TCID(); + if ((iMEbest == nMatchEngines_) || (currentTCID < bestTCID)) { + iMEbest = iME; + bestTCID = currentTCID; + bestInPipeline = empty; + } } - } - if (iMEbest != nMatchEngines_ && (!bestInPipeline)) { - std::pair candmatch = matchengines_[iMEbest].read(); + if (iMEbest != nMatchEngines_ && (!bestInPipeline)) { + const std::pair& candmatch = matchengines_[iMEbest].read(); - const Stub* fpgastub = candmatch.second; - Tracklet* tracklet = candmatch.first; + const Stub* fpgastub = candmatch.second; + Tracklet* tracklet = candmatch.first; - if (oldTracklet != nullptr) { - //allow equal here since we can have more than one cadidate match per tracklet projection - assert(oldTracklet->TCID() <= tracklet->TCID()); - } - oldTracklet = tracklet; + if (oldTracklet != nullptr) { + //allow equal here since we can have more than one cadidate match per tracklet projection + assert(oldTracklet->TCID() <= tracklet->TCID()); + } + oldTracklet = tracklet; - bool match = matchCalculator(tracklet, fpgastub); + bool match = matchCalculator(tracklet, fpgastub); - if (settings_.debugTracklet() && match) { - edm::LogVerbatim("Tracklet") << getName() << " have match"; - } + if (settings_.debugTracklet() && match) { + edm::LogVerbatim("Tracklet") << getName() << " have match"; + } - countall++; - if (match) - countsel++; - ; + countall++; + if (match) + countsel++; + } + } + if ((projdone && medone) || (istep == settings_.maxStep("MP") + step3delay - 1)) { + globals_->ofstream("matchprocessor.txt") << getName() << " " << istep << " " << countall << " " << countsel << " " + << countme << " " << countinputproj << endl; + break; } } diff --git a/L1Trigger/TrackFindingTracklet/src/MemoryBase.cc b/L1Trigger/TrackFindingTracklet/src/MemoryBase.cc index 6a6f167d66eea..e7c0ee7b241ec 100644 --- a/L1Trigger/TrackFindingTracklet/src/MemoryBase.cc +++ b/L1Trigger/TrackFindingTracklet/src/MemoryBase.cc @@ -4,6 +4,7 @@ #include "FWCore/Utilities/interface/Exception.h" #include +#include using namespace trklet; using namespace std; @@ -69,8 +70,14 @@ void MemoryBase::findAndReplaceAll(std::string& data, std::string toSearch, std: } } -void MemoryBase::openFile(bool first, std::string filebase) { - std::string fname = filebase; +void MemoryBase::openFile(bool first, std::string dirName, std::string filebase) { + if (not std::filesystem::exists(dirName)) { + int fail = system((string("mkdir -p ") + dirName).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " << dirName; + } + + std::string fname = dirName + filebase; fname += getName(); findAndReplaceAll(fname, "PHIa", "PHIaa"); @@ -92,9 +99,12 @@ void MemoryBase::openFile(bool first, std::string filebase) { if (first) { bx_ = 0; event_ = 1; - out_.open(fname.c_str()); + out_.open(fname); + if (out_.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; + } else { - out_.open(fname.c_str(), std::ofstream::app); + out_.open(fname, std::ofstream::app); } out_ << "BX = " << (bitset<3>)bx_ << " Event : " << event_ << endl; diff --git a/L1Trigger/TrackFindingTracklet/src/ProcessBase.cc b/L1Trigger/TrackFindingTracklet/src/ProcessBase.cc index e41bf7b7f44ef..b0a478f962424 100644 --- a/L1Trigger/TrackFindingTracklet/src/ProcessBase.cc +++ b/L1Trigger/TrackFindingTracklet/src/ProcessBase.cc @@ -128,7 +128,7 @@ void ProcessBase::initLayerDisksandISeed(unsigned int& layerdisk1, unsigned int& } } -unsigned int ProcessBase::getISeed(std::string name) { +unsigned int ProcessBase::getISeed(const std::string& name) { std::size_t pos = name.find('_'); std::string name1 = name.substr(pos + 1); pos = name1.find('_'); diff --git a/L1Trigger/TrackFindingTracklet/src/ProjectionTemp.cc b/L1Trigger/TrackFindingTracklet/src/ProjectionTemp.cc index 5287ffacceb7b..e8f902f1dd27d 100644 --- a/L1Trigger/TrackFindingTracklet/src/ProjectionTemp.cc +++ b/L1Trigger/TrackFindingTracklet/src/ProjectionTemp.cc @@ -9,6 +9,7 @@ ProjectionTemp::ProjectionTemp(Tracklet* proj, int projfinerz, unsigned int projfinephi, unsigned int iphi, + bool usesecond, bool isPSseed) { proj_ = proj; slot_ = slot; @@ -16,6 +17,7 @@ ProjectionTemp::ProjectionTemp(Tracklet* proj, projfinerz_ = projfinerz; projfinephi_ = projfinephi; iphi_ = iphi; + usesecond_ = usesecond; isPSseed_ = isPSseed; } @@ -26,5 +28,6 @@ ProjectionTemp::ProjectionTemp() { projfinerz_ = 0; projfinephi_ = 0; iphi_ = 0; + usesecond_ = false; isPSseed_ = false; } diff --git a/L1Trigger/TrackFindingTracklet/src/PurgeDuplicate.cc b/L1Trigger/TrackFindingTracklet/src/PurgeDuplicate.cc index 7f66f5d53329e..8c3e3f76ae02f 100644 --- a/L1Trigger/TrackFindingTracklet/src/PurgeDuplicate.cc +++ b/L1Trigger/TrackFindingTracklet/src/PurgeDuplicate.cc @@ -241,7 +241,7 @@ void PurgeDuplicate::execute(std::vector& outputtracks_) { int i = stubsTrk2[stcount].first; int reg = (i > 0 && i < 10) * (i - 1) + (i > 10) * (i - 5) - (i < 0) * i; double nres = getPhiRes(inputtracklets_[jtrk], fullStubslistsTrk2[stcount]); - double ores; + double ores = 0; if (URStubidsTrk2[reg] != -1) ores = getPhiRes(inputtracklets_[jtrk], fullStubslistsTrk2[URStubidsTrk2[reg]]); if (URStubidsTrk2[reg] == -1 || nres < ores) { diff --git a/L1Trigger/TrackFindingTracklet/src/Sector.cc b/L1Trigger/TrackFindingTracklet/src/Sector.cc index 0c383ed147360..9ecef0c857f3e 100644 --- a/L1Trigger/TrackFindingTracklet/src/Sector.cc +++ b/L1Trigger/TrackFindingTracklet/src/Sector.cc @@ -18,6 +18,7 @@ #include "L1Trigger/TrackFindingTracklet/interface/TrackFitMemory.h" #include "L1Trigger/TrackFindingTracklet/interface/CleanTrackMemory.h" +#include "L1Trigger/TrackFindingTracklet/interface/VMRouterCM.h" #include "L1Trigger/TrackFindingTracklet/interface/VMRouter.h" #include "L1Trigger/TrackFindingTracklet/interface/TrackletEngine.h" #include "L1Trigger/TrackFindingTracklet/interface/TrackletEngineDisplaced.h" @@ -92,33 +93,33 @@ bool Sector::addStub(L1TStub stub, string dtc) { void Sector::addMem(string memType, string memName) { if (memType == "InputLink:") { - addMemToVec(IL_, new InputLinkMemory(memName, settings_, isector_, phimin_, phimax_), memName); + addMemToVec(IL_, memName, settings_, isector_, phimin_, phimax_); } else if (memType == "AllStubs:") { - addMemToVec(AS_, new AllStubsMemory(memName, settings_, isector_), memName); + addMemToVec(AS_, memName, settings_, isector_); } else if (memType == "VMStubsTE:") { - addMemToVec(VMSTE_, new VMStubsTEMemory(memName, settings_, isector_), memName); + addMemToVec(VMSTE_, memName, settings_, isector_); } else if (memType == "VMStubsME:") { - addMemToVec(VMSME_, new VMStubsMEMemory(memName, settings_, isector_), memName); + addMemToVec(VMSME_, memName, settings_, isector_); } else if (memType == "StubPairs:" || memType == "StubPairsDisplaced:") { - addMemToVec(SP_, new StubPairsMemory(memName, settings_, isector_), memName); + addMemToVec(SP_, memName, settings_, isector_); } else if (memType == "StubTriplets:") { - addMemToVec(ST_, new StubTripletsMemory(memName, settings_, isector_), memName); + addMemToVec(ST_, memName, settings_, isector_); } else if (memType == "TrackletParameters:") { - addMemToVec(TPAR_, new TrackletParametersMemory(memName, settings_, isector_), memName); + addMemToVec(TPAR_, memName, settings_, isector_); } else if (memType == "TrackletProjections:") { - addMemToVec(TPROJ_, new TrackletProjectionsMemory(memName, settings_, isector_), memName); + addMemToVec(TPROJ_, memName, settings_, isector_); } else if (memType == "AllProj:") { - addMemToVec(AP_, new AllProjectionsMemory(memName, settings_, isector_), memName); + addMemToVec(AP_, memName, settings_, isector_); } else if (memType == "VMProjections:") { - addMemToVec(VMPROJ_, new VMProjectionsMemory(memName, settings_, isector_), memName); + addMemToVec(VMPROJ_, memName, settings_, isector_); } else if (memType == "CandidateMatch:") { - addMemToVec(CM_, new CandidateMatchMemory(memName, settings_, isector_), memName); + addMemToVec(CM_, memName, settings_, isector_); } else if (memType == "FullMatch:") { - addMemToVec(FM_, new FullMatchMemory(memName, settings_, isector_), memName); + addMemToVec(FM_, memName, settings_, isector_); } else if (memType == "TrackFit:") { - addMemToVec(TF_, new TrackFitMemory(memName, settings_, isector_, phimin_, phimax_), memName); + addMemToVec(TF_, memName, settings_, isector_, phimin_, phimax_); } else if (memType == "CleanTrack:") { - addMemToVec(CT_, new CleanTrackMemory(memName, settings_, isector_, phimin_, phimax_), memName); + addMemToVec(CT_, memName, settings_, isector_, phimin_, phimax_); } else { edm::LogPrint("Tracklet") << "Don't know of memory type: " << memType; exit(0); @@ -127,32 +128,34 @@ void Sector::addMem(string memType, string memName) { void Sector::addProc(string procType, string procName) { if (procType == "VMRouter:") { - addProcToVec(VMR_, new VMRouter(procName, settings_, globals_, isector_), procName); + addProcToVec(VMR_, procName, settings_, globals_, isector_); + } else if (procType == "VMRouterCM:") { + addProcToVec(VMRCM_, procName, settings_, globals_, isector_); } else if (procType == "TrackletEngine:") { - addProcToVec(TE_, new TrackletEngine(procName, settings_, globals_, isector_), procName); + addProcToVec(TE_, procName, settings_, globals_, isector_); } else if (procType == "TrackletEngineDisplaced:") { - addProcToVec(TED_, new TrackletEngineDisplaced(procName, settings_, globals_, isector_), procName); + addProcToVec(TED_, procName, settings_, globals_, isector_); } else if (procType == "TripletEngine:") { - addProcToVec(TRE_, new TripletEngine(procName, settings_, globals_, isector_), procName); + addProcToVec(TRE_, procName, settings_, globals_, isector_); } else if (procType == "TrackletCalculator:") { - addProcToVec(TC_, new TrackletCalculator(procName, settings_, globals_, isector_), procName); + addProcToVec(TC_, procName, settings_, globals_, isector_); } else if (procType == "TrackletProcessor:") { - addProcToVec(TP_, new TrackletProcessor(procName, settings_, globals_, isector_), procName); + addProcToVec(TP_, procName, settings_, globals_, isector_); } else if (procType == "TrackletCalculatorDisplaced:") { - addProcToVec(TCD_, new TrackletCalculatorDisplaced(procName, settings_, globals_, isector_), procName); + addProcToVec(TCD_, procName, settings_, globals_, isector_); } else if (procType == "ProjectionRouter:") { - addProcToVec(PR_, new ProjectionRouter(procName, settings_, globals_, isector_), procName); + addProcToVec(PR_, procName, settings_, globals_, isector_); } else if (procType == "MatchEngine:") { - addProcToVec(ME_, new MatchEngine(procName, settings_, globals_, isector_), procName); + addProcToVec(ME_, procName, settings_, globals_, isector_); } else if (procType == "MatchCalculator:" || procType == "DiskMatchCalculator:") { //TODO should not be used in configurations - addProcToVec(MC_, new MatchCalculator(procName, settings_, globals_, isector_), procName); + addProcToVec(MC_, procName, settings_, globals_, isector_); } else if (procType == "MatchProcessor:") { - addProcToVec(MP_, new MatchProcessor(procName, settings_, globals_, isector_), procName); + addProcToVec(MP_, procName, settings_, globals_, isector_); } else if (procType == "FitTrack:") { - addProcToVec(FT_, new FitTrack(procName, settings_, globals_, isector_), procName); + addProcToVec(FT_, procName, settings_, globals_, isector_); } else if (procType == "PurgeDuplicate:") { - addProcToVec(PD_, new PurgeDuplicate(procName, settings_, globals_, isector_), procName); + addProcToVec(PD_, procName, settings_, globals_, isector_); } else { edm::LogPrint("Tracklet") << "Don't know of processing type: " << procType; exit(0); @@ -187,9 +190,9 @@ ProcessBase* Sector::getProc(string procName) { auto it = Processes_.find(procName); if (it != Processes_.end()) { - return it->second.get(); + return it->second; } - throw cms::Exception("BadConfig") << __FILE__ << " " << __LINE__ << " Could not find process : " << procName; + throw cms::Exception("BadConfig") << __FILE__ << " " << __LINE__ << " Could not find process : " << procName << endl; return nullptr; } @@ -197,7 +200,7 @@ MemoryBase* Sector::getMem(string memName) { auto it = Memories_.find(memName); if (it != Memories_.end()) { - return it->second.get(); + return it->second; } throw cms::Exception("BadConfig") << __FILE__ << " " << __LINE__ << " Could not find memory : " << memName; return nullptr; @@ -313,6 +316,9 @@ void Sector::executeVMR() { for (auto& i : VMR_) { i->execute(); } + for (auto& i : VMRCM_) { + i->execute(); + } } void Sector::executeTE() { @@ -396,7 +402,7 @@ void Sector::executePD(std::vector& tracks) { std::vector Sector::getAllTracklets() const { std::vector tmp; - for (auto tpar : TPAR_) { + for (auto& tpar : TPAR_) { for (unsigned int j = 0; j < tpar->nTracklets(); j++) { tmp.push_back(tpar->getTracklet(j)); } @@ -407,7 +413,7 @@ std::vector Sector::getAllTracklets() const { std::vector Sector::getStubs() const { std::vector tmp; - for (auto imem : IL_) { + for (auto& imem : IL_) { for (unsigned int istub = 0; istub < imem->nStubs(); istub++) { tmp.push_back(imem->getStub(istub)); } @@ -418,7 +424,7 @@ std::vector Sector::getStubs() const { std::unordered_set Sector::seedMatch(int itp) const { std::unordered_set tmpSeeds; - for (auto i : TPAR_) { + for (auto& i : TPAR_) { unsigned int nTracklet = i->nTracklets(); for (unsigned int j = 0; j < nTracklet; j++) { if (i->getTracklet(j)->tpseed() == itp) { diff --git a/L1Trigger/TrackFindingTracklet/src/Stub.cc b/L1Trigger/TrackFindingTracklet/src/Stub.cc index 6fa8dc5b85753..449b17fe79238 100644 --- a/L1Trigger/TrackFindingTracklet/src/Stub.cc +++ b/L1Trigger/TrackFindingTracklet/src/Stub.cc @@ -211,6 +211,12 @@ double Stub::rapprox() const { int lr = 1 << (8 - settings_.nrbitsstub(layer_.value())); return r_.value() * settings_.kr() * lr + settings_.rmean(layer_.value()); } + if (!l1tstub_->isPSmodule()) { + if (abs(disk_.value()) <= 2) + return settings_.rDSSinner(r_.value()); + else + return settings_.rDSSouter(r_.value()); + } return r_.value() * settings_.kr(); } diff --git a/L1Trigger/TrackFindingTracklet/src/StubPairsMemory.cc b/L1Trigger/TrackFindingTracklet/src/StubPairsMemory.cc index 4f5e496ee1b94..4e882c62789c8 100644 --- a/L1Trigger/TrackFindingTracklet/src/StubPairsMemory.cc +++ b/L1Trigger/TrackFindingTracklet/src/StubPairsMemory.cc @@ -1,6 +1,7 @@ #include "L1Trigger/TrackFindingTracklet/interface/StubPairsMemory.h" #include "L1Trigger/TrackFindingTracklet/interface/VMStubTE.h" #include +#include using namespace std; using namespace trklet; @@ -9,17 +10,27 @@ StubPairsMemory::StubPairsMemory(string name, Settings const& settings, unsigned : MemoryBase(name, settings, iSector) {} void StubPairsMemory::writeSP(bool first) { + const string dirSP = settings_.memPath() + "StubPairs/"; + std::ostringstream oss; - oss << "../data/MemPrints/StubPairs/StubPairs_" << getName() << "_" << std::setfill('0') << std::setw(2) - << (iSector_ + 1) << ".dat"; + oss << dirSP << "StubPairs_" << getName() << "_" << std::setfill('0') << std::setw(2) << (iSector_ + 1) << ".dat"; auto const& fname = oss.str(); if (first) { bx_ = 0; event_ = 1; - out_.open(fname.c_str()); + + if (not std::filesystem::exists(dirSP)) { + int fail = system((string("mkdir -p ") + dirSP).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " << dirSP; + } + out_.open(fname); + if (out_.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; + } else - out_.open(fname.c_str(), std::ofstream::app); + out_.open(fname, std::ofstream::app); out_ << "BX = " << (bitset<3>)bx_ << " Event : " << event_ << endl; diff --git a/L1Trigger/TrackFindingTracklet/src/StubTripletsMemory.cc b/L1Trigger/TrackFindingTracklet/src/StubTripletsMemory.cc index e9a03d0546e9c..cd6f8dcbb1cf1 100644 --- a/L1Trigger/TrackFindingTracklet/src/StubTripletsMemory.cc +++ b/L1Trigger/TrackFindingTracklet/src/StubTripletsMemory.cc @@ -2,6 +2,7 @@ #include "L1Trigger/TrackFindingTracklet/interface/L1TStub.h" #include "L1Trigger/TrackFindingTracklet/interface/Stub.h" #include +#include using namespace std; using namespace trklet; @@ -10,17 +11,27 @@ StubTripletsMemory::StubTripletsMemory(string name, Settings const& settings, un : MemoryBase(name, settings, iSector) {} void StubTripletsMemory::writeST(bool first) { + const string dirSP = settings_.memPath() + "StubPairs/"; + std::ostringstream oss; - oss << "../data/MemPrints/StubPairs/StubTriplets_" << getName() << "_" << std::setfill('0') << std::setw(2) - << (iSector_ + 1) << ".dat"; + oss << dirSP << "StubTriplets_" << getName() << "_" << std::setfill('0') << std::setw(2) << (iSector_ + 1) << ".dat"; auto const& fname = oss.str(); if (first) { bx_ = 0; event_ = 1; - out_.open(fname.c_str()); + + if (not std::filesystem::exists(dirSP)) { + int fail = system((string("mkdir -p ") + dirSP).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " << dirSP; + } + out_.open(fname); + if (out_.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; + } else - out_.open(fname.c_str(), std::ofstream::app); + out_.open(fname, std::ofstream::app); out_ << "BX = " << (bitset<3>)bx_ << " Event : " << event_ << endl; diff --git a/L1Trigger/TrackFindingTracklet/src/TETableBase.cc b/L1Trigger/TrackFindingTracklet/src/TETableBase.cc index b28334bdf63ef..6ece1f83d3b35 100644 --- a/L1Trigger/TrackFindingTracklet/src/TETableBase.cc +++ b/L1Trigger/TrackFindingTracklet/src/TETableBase.cc @@ -6,8 +6,12 @@ using namespace trklet; TETableBase::TETableBase(Settings const& settings) : settings_(settings) {} void TETableBase::writeVMTable(std::string name, bool positive) { - ofstream out; - out.open(name.c_str()); + // Write LUT table. + + ofstream out(name); + if (out.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << name; + out << "{" << endl; for (unsigned int i = 0; i < table_.size(); i++) { if (i != 0) { diff --git a/L1Trigger/TrackFindingTracklet/src/TrackDerTable.cc b/L1Trigger/TrackFindingTracklet/src/TrackDerTable.cc index a5d6668de19c1..03cac8804cbd3 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackDerTable.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackDerTable.cc @@ -4,6 +4,8 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include + using namespace std; using namespace trklet; @@ -357,91 +359,126 @@ void TrackDerTable::fillTable() { } if (settings_.writeTable()) { - ofstream outL("FitDerTableNew_LayerMem.txt"); + if (not std::filesystem::exists(settings_.tablePath())) { + int fail = system((string("mkdir -p ") + settings_.tablePath()).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " + << settings_.tablePath(); + } + + const string fnameL = settings_.tablePath() + "FitDerTableNew_LayerMem.tab"; + ofstream outL(fnameL); + if (outL.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fnameL; + + int nbits = 6; for (unsigned int i = 0; i < LayerMem_.size(); i++) { FPGAWord tmp; int tmp1 = LayerMem_[i]; if (tmp1 < 0) - tmp1 = (1 << 6) - 1; - edm::LogVerbatim("Tracklet") << "i LayerMem_ : " << i << " " << tmp1; - tmp.set(tmp1, 6, true, __LINE__, __FILE__); + tmp1 = (1 << nbits) - 1; + tmp.set(tmp1, nbits, true, __LINE__, __FILE__); outL << tmp.str() << endl; } outL.close(); - ofstream outD("FitDerTableNew_DiskMem.txt"); + const string fnameD = settings_.tablePath() + "FitDerTableNew_DiskMem.tab"; + ofstream outD(fnameD); + if (outD.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fnameD; + + nbits = 7; for (int tmp1 : DiskMem_) { if (tmp1 < 0) - tmp1 = (1 << 7) - 1; + tmp1 = (1 << nbits) - 1; FPGAWord tmp; - tmp.set(tmp1, 7, true, __LINE__, __FILE__); + tmp.set(tmp1, nbits, true, __LINE__, __FILE__); outD << tmp.str() << endl; } outD.close(); - ofstream outLD("FitDerTableNew_LayerDiskMem.txt"); + const string fnameLD = settings_.tablePath() + "FitDerTableNew_LayerDiskMem.tab"; + ofstream outLD(fnameLD); + if (outLD.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fnameLD; + + nbits = 15; for (int tmp1 : LayerDiskMem_) { if (tmp1 < 0) - tmp1 = (1 << 10) - 1; + tmp1 = (1 << nbits) - 1; FPGAWord tmp; - tmp.set(tmp1, 10, true, __LINE__, __FILE__); + tmp.set(tmp1, nbits, true, __LINE__, __FILE__); outLD << tmp.str() << endl; } outLD.close(); - unsigned int nderivatives = derivatives_.size(); - edm::LogVerbatim("Tracklet") << "nderivatives = " << nderivatives; - const std::array seedings = {{"L1L2", "L3L4", "L5L6", "D1D2", "D3D4", "D1L1", "D1L2"}}; - const string prefix = "FitDerTableNew_"; + const string prefix = settings_.tablePath() + "FitDerTableNew_"; // open files for derivative tables + ofstream outrinvdphi[N_TRKLSEED]; for (unsigned int i = 0; i < N_TRKLSEED; ++i) { - const string fname = prefix + "Rinvdphi_" + seedings[i] + ".txt"; - outrinvdphi[i].open(fname.c_str()); + const string fname = prefix + "Rinvdphi_" + seedings[i] + ".tab"; + outrinvdphi[i].open(fname); + if (outrinvdphi[i].fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; } ofstream outrinvdzordr[N_TRKLSEED]; for (unsigned int i = 0; i < N_TRKLSEED; ++i) { - const string fname = prefix + "Rinvdzordr_" + seedings[i] + ".txt"; - outrinvdzordr[i].open(fname.c_str()); + const string fname = prefix + "Rinvdzordr_" + seedings[i] + ".tab"; + outrinvdzordr[i].open(fname); + if (outrinvdzordr[i].fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; } ofstream outphi0dphi[N_TRKLSEED]; for (unsigned int i = 0; i < N_TRKLSEED; ++i) { - const string fname = prefix + "Phi0dphi_" + seedings[i] + ".txt"; - outphi0dphi[i].open(fname.c_str()); + const string fname = prefix + "Phi0dphi_" + seedings[i] + ".tab"; + outphi0dphi[i].open(fname); + if (outphi0dphi[i].fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; } ofstream outphi0dzordr[N_TRKLSEED]; for (unsigned int i = 0; i < N_TRKLSEED; ++i) { - const string fname = prefix + "Phi0dzordr_" + seedings[i] + ".txt"; - outphi0dzordr[i].open(fname.c_str()); + const string fname = prefix + "Phi0dzordr_" + seedings[i] + ".tab"; + outphi0dzordr[i].open(fname); + if (outphi0dzordr[i].fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; } ofstream outtdphi[N_TRKLSEED]; for (unsigned int i = 0; i < N_TRKLSEED; ++i) { - const string fname = prefix + "Tdphi_" + seedings[i] + ".txt"; - outtdphi[i].open(fname.c_str()); + const string fname = prefix + "Tdphi_" + seedings[i] + ".tab"; + outtdphi[i].open(fname); + if (outtdphi[i].fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; } ofstream outtdzordr[N_TRKLSEED]; for (unsigned int i = 0; i < N_TRKLSEED; ++i) { - const string fname = prefix + "Tdzordr_" + seedings[i] + ".txt"; - outtdzordr[i].open(fname.c_str()); + const string fname = prefix + "Tdzordr_" + seedings[i] + ".tab"; + outtdzordr[i].open(fname); + if (outtdzordr[i].fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; } ofstream outz0dphi[N_TRKLSEED]; for (unsigned int i = 0; i < N_TRKLSEED; ++i) { - const string fname = prefix + "Z0dphi_" + seedings[i] + ".txt"; - outz0dphi[i].open(fname.c_str()); + const string fname = prefix + "Z0dphi_" + seedings[i] + ".tab"; + outz0dphi[i].open(fname); + if (outz0dphi[i].fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; } ofstream outz0dzordr[N_TRKLSEED]; for (unsigned int i = 0; i < N_TRKLSEED; ++i) { - string fname = prefix + "Z0dzordr_" + seedings[i] + ".txt"; - outz0dzordr[i].open(fname.c_str()); + string fname = prefix + "Z0dzordr_" + seedings[i] + ".tab"; + outz0dzordr[i].open(fname); + if (outz0dzordr[i].fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; } for (auto& der : derivatives_) { @@ -594,71 +631,79 @@ void TrackDerTable::fillTable() { } // if (goodseed) FPGAWord tmprinvdphi[N_PROJ]; + int nbits = 16; for (unsigned int j = 0; j < N_PROJ; ++j) { - if (itmprinvdphi[j] > (1 << 13)) - itmprinvdphi[j] = (1 << 13) - 1; - tmprinvdphi[j].set(itmprinvdphi[j], 14, false, __LINE__, __FILE__); + if (itmprinvdphi[j] > (1 << nbits)) + itmprinvdphi[j] = (1 << nbits) - 1; + tmprinvdphi[j].set(itmprinvdphi[j], nbits + 1, false, __LINE__, __FILE__); } outrinvdphi[i] << tmprinvdphi[0].str() << tmprinvdphi[1].str() << tmprinvdphi[2].str() << tmprinvdphi[3].str() << endl; FPGAWord tmprinvdzordr[N_PROJ]; + nbits = 15; for (unsigned int j = 0; j < N_PROJ; ++j) { - if (itmprinvdzordr[j] > (1 << 15)) - itmprinvdzordr[j] = (1 << 15) - 1; - tmprinvdzordr[j].set(itmprinvdzordr[j], 16, false, __LINE__, __FILE__); + if (itmprinvdzordr[j] > (1 << nbits)) + itmprinvdzordr[j] = (1 << nbits) - 1; + tmprinvdzordr[j].set(itmprinvdzordr[j], nbits + 1, false, __LINE__, __FILE__); } outrinvdzordr[i] << tmprinvdzordr[0].str() << tmprinvdzordr[1].str() << tmprinvdzordr[2].str() << tmprinvdzordr[3].str() << endl; FPGAWord tmpphi0dphi[N_PROJ]; + nbits = 13; for (unsigned int j = 0; j < N_PROJ; ++j) { - if (itmpphi0dphi[j] > (1 << 13)) - itmpphi0dphi[j] = (1 << 13) - 1; - tmpphi0dphi[j].set(itmpphi0dphi[j], 14, false, __LINE__, __FILE__); + if (itmpphi0dphi[j] > (1 << nbits)) + itmpphi0dphi[j] = (1 << nbits) - 1; + tmpphi0dphi[j].set(itmpphi0dphi[j], nbits + 1, false, __LINE__, __FILE__); } outphi0dphi[i] << tmpphi0dphi[0].str() << tmpphi0dphi[1].str() << tmpphi0dphi[2].str() << tmpphi0dphi[3].str() << endl; FPGAWord tmpphi0dzordr[N_PROJ]; + nbits = 15; for (unsigned int j = 0; j < N_PROJ; ++j) { - if (itmpphi0dzordr[j] > (1 << 15)) - itmpphi0dzordr[j] = (1 << 15) - 1; - tmpphi0dzordr[j].set(itmpphi0dzordr[j], 16, false, __LINE__, __FILE__); + if (itmpphi0dzordr[j] > (1 << nbits)) + itmpphi0dzordr[j] = (1 << nbits) - 1; + tmpphi0dzordr[j].set(itmpphi0dzordr[j], nbits + 1, false, __LINE__, __FILE__); } outphi0dzordr[i] << tmpphi0dzordr[0].str() << tmpphi0dzordr[1].str() << tmpphi0dzordr[2].str() << tmpphi0dzordr[3].str() << endl; FPGAWord tmptdphi[N_PROJ]; + nbits = 14; for (unsigned int j = 0; j < N_PROJ; ++j) { - if (itmptdphi[j] > (1 << 13)) - itmptdphi[j] = (1 << 13) - 1; - tmptdphi[j].set(itmptdphi[j], 14, false, __LINE__, __FILE__); + if (itmptdphi[j] > (1 << nbits)) + itmptdphi[j] = (1 << nbits) - 1; + tmptdphi[j].set(itmptdphi[j], nbits + 1, false, __LINE__, __FILE__); } outtdphi[i] << tmptdphi[0].str() << tmptdphi[1].str() << tmptdphi[2].str() << tmptdphi[3].str() << endl; FPGAWord tmptdzordr[N_PROJ]; + nbits = 15; for (unsigned int j = 0; j < N_PROJ; ++j) { - if (itmptdzordr[j] > (1 << 15)) - itmptdzordr[j] = (1 << 15) - 1; - tmptdzordr[j].set(itmptdzordr[j], 16, false, __LINE__, __FILE__); + if (itmptdzordr[j] > (1 << nbits)) + itmptdzordr[j] = (1 << nbits) - 1; + tmptdzordr[j].set(itmptdzordr[j], nbits + 1, false, __LINE__, __FILE__); } outtdzordr[i] << tmptdzordr[0].str() << tmptdzordr[1].str() << tmptdzordr[2].str() << tmptdzordr[3].str() << endl; FPGAWord tmpz0dphi[N_PROJ]; + nbits = 13; for (unsigned int j = 0; j < N_PROJ; ++j) { - if (itmpz0dphi[j] > (1 << 13)) - itmpz0dphi[j] = (1 << 13) - 1; - tmpz0dphi[j].set(itmpz0dphi[j], 14, false, __LINE__, __FILE__); + if (itmpz0dphi[j] > (1 << nbits)) + itmpz0dphi[j] = (1 << nbits) - 1; + tmpz0dphi[j].set(itmpz0dphi[j], nbits + 1, false, __LINE__, __FILE__); } outz0dphi[i] << tmpz0dphi[0].str() << tmpz0dphi[1].str() << tmpz0dphi[2].str() << tmpz0dphi[3].str() << endl; FPGAWord tmpz0dzordr[N_PROJ]; + nbits = 15; for (unsigned int j = 0; j < N_PROJ; ++j) { - if (itmpz0dzordr[j] > (1 << 15)) - itmpz0dzordr[j] = (1 << 15) - 1; - tmpz0dzordr[j].set(itmpz0dzordr[j], 16, false, __LINE__, __FILE__); + if (itmpz0dzordr[j] > (1 << nbits)) + itmpz0dzordr[j] = (1 << nbits) - 1; + tmpz0dzordr[j].set(itmpz0dzordr[j], nbits + 1, false, __LINE__, __FILE__); } outz0dzordr[i] << tmpz0dzordr[0].str() << tmpz0dzordr[1].str() << tmpz0dzordr[2].str() << tmpz0dzordr[3].str() << endl; diff --git a/L1Trigger/TrackFindingTracklet/src/TrackFitMemory.cc b/L1Trigger/TrackFindingTracklet/src/TrackFitMemory.cc index 83f046180274d..63505b224f8a1 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackFitMemory.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackFitMemory.cc @@ -2,6 +2,7 @@ #include "L1Trigger/TrackFindingTracklet/interface/SLHCEvent.h" #include "L1Trigger/TrackFindingTracklet/interface/Tracklet.h" #include +#include using namespace std; using namespace trklet; @@ -13,17 +14,27 @@ TrackFitMemory::TrackFitMemory(string name, Settings const& settings, unsigned i } void TrackFitMemory::writeTF(bool first) { + const string dirFT = settings_.memPath() + "FitTrack/"; + std::ostringstream oss; - oss << "../data/MemPrints/FitTrack/TrackFit_" << getName() << "_" << std::setfill('0') << std::setw(2) - << (iSector_ + 1) << ".dat"; + oss << dirFT << "TrackFit_" << getName() << "_" << std::setfill('0') << std::setw(2) << (iSector_ + 1) << ".dat"; auto const& fname = oss.str(); if (first) { bx_ = 0; event_ = 1; - out_.open(fname.c_str()); + + if (not std::filesystem::exists(dirFT)) { + int fail = system((string("mkdir -p ") + dirFT).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " << dirFT; + } + out_.open(fname); + if (out_.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; + } else - out_.open(fname.c_str(), std::ofstream::app); + out_.open(fname, std::ofstream::app); out_ << "BX = " << (bitset<3>)bx_ << " Event : " << event_ << endl; diff --git a/L1Trigger/TrackFindingTracklet/src/Tracklet.cc b/L1Trigger/TrackFindingTracklet/src/Tracklet.cc index 6488b8bc8a820..8340f44957cb7 100644 --- a/L1Trigger/TrackFindingTracklet/src/Tracklet.cc +++ b/L1Trigger/TrackFindingTracklet/src/Tracklet.cc @@ -274,7 +274,7 @@ std::string Tracklet::trackletprojstr(int layer) const { if (trackletIndex_ < 0 || trackletIndex_ > (int)settings_.ntrackletmax()) { throw cms::Exception("BadConfig") << __FILE__ << " " << __LINE__ << " trackletIndex_ = " << trackletIndex_; } - tmp.set(trackletIndex_, 7, true, __LINE__, __FILE__); + tmp.set(trackletIndex_, settings_.nbitstrackletindex(), true, __LINE__, __FILE__); FPGAWord tcid; if (settings_.extended()) { tcid.set(TCIndex_, 8, true, __LINE__, __FILE__); @@ -294,7 +294,7 @@ std::string Tracklet::trackletprojstrD(int disk) const { if (trackletIndex_ < 0 || trackletIndex_ > (int)settings_.ntrackletmax()) { throw cms::Exception("BadConfig") << __FILE__ << " " << __LINE__ << " trackletIndex_ = " << trackletIndex_; } - tmp.set(trackletIndex_, 7, true, __LINE__, __FILE__); + tmp.set(trackletIndex_, settings_.nbitstrackletindex(), true, __LINE__, __FILE__); FPGAWord tcid; if (settings_.extended()) { tcid.set(TCIndex_, 8, true, __LINE__, __FILE__); @@ -379,7 +379,7 @@ std::string Tracklet::fullmatchstr(int layer) { if (trackletIndex_ < 0 || trackletIndex_ > (int)settings_.ntrackletmax()) { throw cms::Exception("BadConfig") << __FILE__ << " " << __LINE__ << " trackletIndex_ = " << trackletIndex_; } - tmp.set(trackletIndex_, 7, true, __LINE__, __FILE__); + tmp.set(trackletIndex_, settings_.nbitstrackletindex(), true, __LINE__, __FILE__); FPGAWord tcid; if (settings_.extended()) { tcid.set(TCIndex_, 8, true, __LINE__, __FILE__); @@ -398,7 +398,7 @@ std::string Tracklet::fullmatchdiskstr(int disk) { if (trackletIndex_ < 0 || trackletIndex_ > (int)settings_.ntrackletmax()) { throw cms::Exception("BadConfig") << __FILE__ << " " << __LINE__ << " trackletIndex_ = " << trackletIndex_; } - tmp.set(trackletIndex_, 7, true, __LINE__, __FILE__); + tmp.set(trackletIndex_, settings_.nbitstrackletindex(), true, __LINE__, __FILE__); FPGAWord tcid; if (settings_.extended()) { tcid.set(TCIndex_, 8, true, __LINE__, __FILE__); @@ -841,9 +841,9 @@ int Tracklet::disk2() const { return innerStub_->disk() - 1; } -void Tracklet::setTrackletIndex(int index) { +void Tracklet::setTrackletIndex(unsigned int index) { trackletIndex_ = index; - assert(index < 128); + assert(index <= settings_.ntrackletmax()); } int Tracklet::getISeed() const { diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletCalculator.cc b/L1Trigger/TrackFindingTracklet/src/TrackletCalculator.cc index c7946901b6e2a..edf75772c4758 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackletCalculator.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackletCalculator.cc @@ -5,6 +5,8 @@ #include "L1Trigger/TrackFindingTracklet/interface/AllStubsMemory.h" #include "L1Trigger/TrackFindingTracklet/interface/StubPairsMemory.h" #include "L1Trigger/TrackFindingTracklet/interface/IMATH_TrackletCalculator.h" +#include "L1Trigger/TrackFindingTracklet/interface/IMATH_TrackletCalculatorDisk.h" +#include "L1Trigger/TrackFindingTracklet/interface/IMATH_TrackletCalculatorOverlap.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" @@ -14,8 +16,6 @@ using namespace trklet; TrackletCalculator::TrackletCalculator(string name, Settings const& settings, Globals* globals, unsigned int iSector) : TrackletCalculatorBase(name, settings, globals, iSector) { - phioffset_ = phimin_; - for (unsigned int ilayer = 0; ilayer < N_LAYER; ilayer++) { vector tmp(settings.nallstubs(ilayer), nullptr); trackletprojlayers_.push_back(tmp); @@ -41,6 +41,41 @@ TrackletCalculator::TrackletCalculator(string name, Settings const& settings, Gl edm::LogPrint("Tracklet") << "TrackletCalculator::TrackletCalculator phicrit approximation may be invalid! Please check."; } + + // write the drinv and invt inverse tables + if ((settings_.writeInvTable() || settings_.writeHLSInvTable()) && iTC_ == 0 && iSector_ == 0) { + void (*writeLUT)(const VarInv&, const string&) = nullptr; + if (settings.writeInvTable()) { // Verilog version + writeLUT = [](const VarInv& x, const string& basename) -> void { + ofstream fs(basename + ".tab"); + return x.writeLUT(fs, VarBase::verilog); + }; + } else { // HLS version + writeLUT = [](const VarInv& x, const string& basename) -> void { + ofstream fs(basename + ".tab"); + return x.writeLUT(fs, VarBase::hls); + }; + } + writeInvTable(writeLUT); + } + + // write the firmware design for the calculation of the tracklet parameters + // and projections + if ((settings_.writeVerilog() || settings_.writeHLS()) && iTC_ == 0 && iSector_ == 0) { + void (*writeDesign)(const vector&, const string&) = nullptr; + if (settings.writeVerilog()) { // Verilog version + writeDesign = [](const vector& v, const string& basename) -> void { + ofstream fs(basename + ".v"); + return VarBase::verilog_print(v, fs); + }; + } else { // HLS version + writeDesign = [](const vector& v, const string& basename) -> void { + ofstream fs(basename + ".cpp"); + return VarBase::hls_print(v, fs); + }; + } + writeFirmwareDesign(writeDesign); + } } void TrackletCalculator::addOutputProjection(TrackletProjectionsMemory*& outputProj, MemoryBase* memory) { @@ -190,3 +225,237 @@ void TrackletCalculator::execute() { globals_->ofstream("trackletcalculator.txt") << getName() << " " << countall << " " << countsel << endl; } } + +void TrackletCalculator::writeInvTable(void (*writeLUT)(const VarInv&, const string&)) { + switch (iSeed_) { + case 0: // L1L2 + writeLUT(globals_->ITC_L1L2()->drinv, settings_.tablePath() + "TC_L1L2_drinv"); + writeLUT(globals_->ITC_L1L2()->invt, settings_.tablePath() + "TC_L1L2_invt"); + break; + case 1: // L2L3 + writeLUT(globals_->ITC_L2L3()->drinv, settings_.tablePath() + "TC_L2L3_drinv"); + writeLUT(globals_->ITC_L2L3()->invt, settings_.tablePath() + "TC_L2L3_invt"); + break; + case 2: // L3L4 + writeLUT(globals_->ITC_L3L4()->drinv, settings_.tablePath() + "TC_L3L4_drinv"); + writeLUT(globals_->ITC_L3L4()->invt, settings_.tablePath() + "TC_L3L4_invt"); + break; + case 3: // L5L6 + writeLUT(globals_->ITC_L5L6()->drinv, settings_.tablePath() + "TC_L5L6_drinv"); + writeLUT(globals_->ITC_L5L6()->invt, settings_.tablePath() + "TC_L5L6_invt"); + break; + case 4: // D1D2 + writeLUT(globals_->ITC_F1F2()->drinv, settings_.tablePath() + "TC_F1F2_drinv"); + writeLUT(globals_->ITC_F1F2()->invt, settings_.tablePath() + "TC_F1F2_invt"); + writeLUT(globals_->ITC_B1B2()->drinv, settings_.tablePath() + "TC_B1B2_drinv"); + writeLUT(globals_->ITC_B1B2()->invt, settings_.tablePath() + "TC_B1B2_invt"); + break; + case 5: // D3D4 + writeLUT(globals_->ITC_F3F4()->drinv, settings_.tablePath() + "TC_F3F4_drinv"); + writeLUT(globals_->ITC_F3F4()->invt, settings_.tablePath() + "TC_F3F4_invt"); + writeLUT(globals_->ITC_B3B4()->drinv, settings_.tablePath() + "TC_B3B4_drinv"); + writeLUT(globals_->ITC_B3B4()->invt, settings_.tablePath() + "TC_B3B4_invt"); + break; + case 6: // L1D1 + writeLUT(globals_->ITC_L1F1()->drinv, settings_.tablePath() + "TC_L1F1_drinv"); + writeLUT(globals_->ITC_L1F1()->invt, settings_.tablePath() + "TC_L1F1_invt"); + writeLUT(globals_->ITC_L1B1()->drinv, settings_.tablePath() + "TC_L1B1_drinv"); + writeLUT(globals_->ITC_L1B1()->invt, settings_.tablePath() + "TC_L1B1_invt"); + break; + case 7: // L2D1 + writeLUT(globals_->ITC_L2F1()->drinv, settings_.tablePath() + "TC_L2F1_drinv"); + writeLUT(globals_->ITC_L2F1()->invt, settings_.tablePath() + "TC_L2F1_invt"); + writeLUT(globals_->ITC_L2B1()->drinv, settings_.tablePath() + "TC_L2B1_drinv"); + writeLUT(globals_->ITC_L2B1()->invt, settings_.tablePath() + "TC_L2B1_invt"); + break; + } +} + +void TrackletCalculator::writeFirmwareDesign(void (*writeDesign)(const vector&, const string&)) { + switch (iSeed_) { + case 0: // L1L2 + { + const vector v = {&globals_->ITC_L1L2()->rinv_final, &globals_->ITC_L1L2()->phi0_final, + &globals_->ITC_L1L2()->t_final, &globals_->ITC_L1L2()->z0_final, + &globals_->ITC_L1L2()->phiL_0_final, &globals_->ITC_L1L2()->phiL_1_final, + &globals_->ITC_L1L2()->phiL_2_final, &globals_->ITC_L1L2()->phiL_3_final, + &globals_->ITC_L1L2()->zL_0_final, &globals_->ITC_L1L2()->zL_1_final, + &globals_->ITC_L1L2()->zL_2_final, &globals_->ITC_L1L2()->zL_3_final, + &globals_->ITC_L1L2()->der_phiL_final, &globals_->ITC_L1L2()->der_zL_final, + &globals_->ITC_L1L2()->phiD_0_final, &globals_->ITC_L1L2()->phiD_1_final, + &globals_->ITC_L1L2()->phiD_2_final, &globals_->ITC_L1L2()->phiD_3_final, + &globals_->ITC_L1L2()->phiD_4_final, &globals_->ITC_L1L2()->rD_0_final, + &globals_->ITC_L1L2()->rD_1_final, &globals_->ITC_L1L2()->rD_2_final, + &globals_->ITC_L1L2()->rD_3_final, &globals_->ITC_L1L2()->rD_4_final, + &globals_->ITC_L1L2()->der_phiD_final, &globals_->ITC_L1L2()->der_rD_final}; + writeDesign(v, "TC_L1L2"); + } break; + case 1: // L2L3 + { + const vector v = {&globals_->ITC_L2L3()->rinv_final, &globals_->ITC_L2L3()->phi0_final, + &globals_->ITC_L2L3()->t_final, &globals_->ITC_L2L3()->z0_final, + &globals_->ITC_L2L3()->phiL_0_final, &globals_->ITC_L2L3()->phiL_1_final, + &globals_->ITC_L2L3()->phiL_2_final, &globals_->ITC_L2L3()->phiL_3_final, + &globals_->ITC_L2L3()->zL_0_final, &globals_->ITC_L2L3()->zL_1_final, + &globals_->ITC_L2L3()->zL_2_final, &globals_->ITC_L2L3()->zL_3_final, + &globals_->ITC_L2L3()->der_phiL_final, &globals_->ITC_L2L3()->der_zL_final, + &globals_->ITC_L2L3()->phiD_0_final, &globals_->ITC_L2L3()->phiD_1_final, + &globals_->ITC_L2L3()->phiD_2_final, &globals_->ITC_L2L3()->phiD_3_final, + &globals_->ITC_L2L3()->phiD_4_final, &globals_->ITC_L2L3()->rD_0_final, + &globals_->ITC_L2L3()->rD_1_final, &globals_->ITC_L2L3()->rD_2_final, + &globals_->ITC_L2L3()->rD_3_final, &globals_->ITC_L2L3()->rD_4_final, + &globals_->ITC_L2L3()->der_phiD_final, &globals_->ITC_L2L3()->der_rD_final}; + writeDesign(v, "TC_L2L3"); + } break; + case 2: // L3L4 + { + const vector v = {&globals_->ITC_L3L4()->rinv_final, &globals_->ITC_L3L4()->phi0_final, + &globals_->ITC_L3L4()->t_final, &globals_->ITC_L3L4()->z0_final, + &globals_->ITC_L3L4()->phiL_0_final, &globals_->ITC_L3L4()->phiL_1_final, + &globals_->ITC_L3L4()->phiL_2_final, &globals_->ITC_L3L4()->phiL_3_final, + &globals_->ITC_L3L4()->zL_0_final, &globals_->ITC_L3L4()->zL_1_final, + &globals_->ITC_L3L4()->zL_2_final, &globals_->ITC_L3L4()->zL_3_final, + &globals_->ITC_L3L4()->der_phiL_final, &globals_->ITC_L3L4()->der_zL_final, + &globals_->ITC_L3L4()->phiD_0_final, &globals_->ITC_L3L4()->phiD_1_final, + &globals_->ITC_L3L4()->phiD_2_final, &globals_->ITC_L3L4()->phiD_3_final, + &globals_->ITC_L3L4()->phiD_4_final, &globals_->ITC_L3L4()->rD_0_final, + &globals_->ITC_L3L4()->rD_1_final, &globals_->ITC_L3L4()->rD_2_final, + &globals_->ITC_L3L4()->rD_3_final, &globals_->ITC_L3L4()->rD_4_final, + &globals_->ITC_L3L4()->der_phiD_final, &globals_->ITC_L3L4()->der_rD_final}; + writeDesign(v, "TC_L3L4"); + } break; + case 3: // L5L6 + { + const vector v = {&globals_->ITC_L5L6()->rinv_final, &globals_->ITC_L5L6()->phi0_final, + &globals_->ITC_L5L6()->t_final, &globals_->ITC_L5L6()->z0_final, + &globals_->ITC_L5L6()->phiL_0_final, &globals_->ITC_L5L6()->phiL_1_final, + &globals_->ITC_L5L6()->phiL_2_final, &globals_->ITC_L5L6()->phiL_3_final, + &globals_->ITC_L5L6()->zL_0_final, &globals_->ITC_L5L6()->zL_1_final, + &globals_->ITC_L5L6()->zL_2_final, &globals_->ITC_L5L6()->zL_3_final, + &globals_->ITC_L5L6()->der_phiL_final, &globals_->ITC_L5L6()->der_zL_final, + &globals_->ITC_L5L6()->phiD_0_final, &globals_->ITC_L5L6()->phiD_1_final, + &globals_->ITC_L5L6()->phiD_2_final, &globals_->ITC_L5L6()->phiD_3_final, + &globals_->ITC_L5L6()->phiD_4_final, &globals_->ITC_L5L6()->rD_0_final, + &globals_->ITC_L5L6()->rD_1_final, &globals_->ITC_L5L6()->rD_2_final, + &globals_->ITC_L5L6()->rD_3_final, &globals_->ITC_L5L6()->rD_4_final, + &globals_->ITC_L5L6()->der_phiD_final, &globals_->ITC_L5L6()->der_rD_final}; + writeDesign(v, "TC_L5L6"); + } break; + case 4: // D1D2 + { + const vector v = {&globals_->ITC_F1F2()->rinv_final, &globals_->ITC_F1F2()->phi0_final, + &globals_->ITC_F1F2()->t_final, &globals_->ITC_F1F2()->z0_final, + &globals_->ITC_F1F2()->phiL_0_final, &globals_->ITC_F1F2()->phiL_1_final, + &globals_->ITC_F1F2()->phiL_2_final, &globals_->ITC_F1F2()->zL_0_final, + &globals_->ITC_F1F2()->zL_1_final, &globals_->ITC_F1F2()->zL_2_final, + &globals_->ITC_F1F2()->der_phiL_final, &globals_->ITC_F1F2()->der_zL_final, + &globals_->ITC_F1F2()->phiD_0_final, &globals_->ITC_F1F2()->phiD_1_final, + &globals_->ITC_F1F2()->phiD_2_final, &globals_->ITC_F1F2()->rD_0_final, + &globals_->ITC_F1F2()->rD_1_final, &globals_->ITC_F1F2()->rD_2_final, + &globals_->ITC_F1F2()->der_phiD_final, &globals_->ITC_F1F2()->der_rD_final}; + writeDesign(v, "TC_F1F2"); + } + { + const vector v = {&globals_->ITC_B1B2()->rinv_final, &globals_->ITC_B1B2()->phi0_final, + &globals_->ITC_B1B2()->t_final, &globals_->ITC_B1B2()->z0_final, + &globals_->ITC_B1B2()->phiL_0_final, &globals_->ITC_B1B2()->phiL_1_final, + &globals_->ITC_B1B2()->phiL_2_final, &globals_->ITC_B1B2()->zL_0_final, + &globals_->ITC_B1B2()->zL_1_final, &globals_->ITC_B1B2()->zL_2_final, + &globals_->ITC_B1B2()->der_phiL_final, &globals_->ITC_B1B2()->der_zL_final, + &globals_->ITC_B1B2()->phiD_0_final, &globals_->ITC_B1B2()->phiD_1_final, + &globals_->ITC_B1B2()->phiD_2_final, &globals_->ITC_B1B2()->rD_0_final, + &globals_->ITC_B1B2()->rD_1_final, &globals_->ITC_B1B2()->rD_2_final, + &globals_->ITC_B1B2()->der_phiD_final, &globals_->ITC_B1B2()->der_rD_final}; + writeDesign(v, "TC_B1B2"); + } + break; + case 5: // D3D4 + { + const vector v = {&globals_->ITC_F3F4()->rinv_final, &globals_->ITC_F3F4()->phi0_final, + &globals_->ITC_F3F4()->t_final, &globals_->ITC_F3F4()->z0_final, + &globals_->ITC_F3F4()->phiL_0_final, &globals_->ITC_F3F4()->phiL_1_final, + &globals_->ITC_F3F4()->phiL_2_final, &globals_->ITC_F3F4()->zL_0_final, + &globals_->ITC_F3F4()->zL_1_final, &globals_->ITC_F3F4()->zL_2_final, + &globals_->ITC_F3F4()->der_phiL_final, &globals_->ITC_F3F4()->der_zL_final, + &globals_->ITC_F3F4()->phiD_0_final, &globals_->ITC_F3F4()->phiD_1_final, + &globals_->ITC_F3F4()->phiD_2_final, &globals_->ITC_F3F4()->rD_0_final, + &globals_->ITC_F3F4()->rD_1_final, &globals_->ITC_F3F4()->rD_2_final, + &globals_->ITC_F3F4()->der_phiD_final, &globals_->ITC_F3F4()->der_rD_final}; + writeDesign(v, "TC_F3F4"); + } + { + const vector v = {&globals_->ITC_B3B4()->rinv_final, &globals_->ITC_B3B4()->phi0_final, + &globals_->ITC_B3B4()->t_final, &globals_->ITC_B3B4()->z0_final, + &globals_->ITC_B3B4()->phiL_0_final, &globals_->ITC_B3B4()->phiL_1_final, + &globals_->ITC_B3B4()->phiL_2_final, &globals_->ITC_B3B4()->zL_0_final, + &globals_->ITC_B3B4()->zL_1_final, &globals_->ITC_B3B4()->zL_2_final, + &globals_->ITC_B3B4()->der_phiL_final, &globals_->ITC_B3B4()->der_zL_final, + &globals_->ITC_B3B4()->phiD_0_final, &globals_->ITC_B3B4()->phiD_1_final, + &globals_->ITC_B3B4()->phiD_2_final, &globals_->ITC_B3B4()->rD_0_final, + &globals_->ITC_B3B4()->rD_1_final, &globals_->ITC_B3B4()->rD_2_final, + &globals_->ITC_B3B4()->der_phiD_final, &globals_->ITC_B3B4()->der_rD_final}; + writeDesign(v, "TC_B3B4"); + } + break; + case 6: // L1D1 + { + const vector v = {&globals_->ITC_L1F1()->rinv_final, &globals_->ITC_L1F1()->phi0_final, + &globals_->ITC_L1F1()->t_final, &globals_->ITC_L1F1()->z0_final, + &globals_->ITC_L1F1()->phiL_0_final, &globals_->ITC_L1F1()->phiL_1_final, + &globals_->ITC_L1F1()->phiL_2_final, &globals_->ITC_L1F1()->zL_0_final, + &globals_->ITC_L1F1()->zL_1_final, &globals_->ITC_L1F1()->zL_2_final, + &globals_->ITC_L1F1()->der_phiL_final, &globals_->ITC_L1F1()->der_zL_final, + &globals_->ITC_L1F1()->phiD_0_final, &globals_->ITC_L1F1()->phiD_1_final, + &globals_->ITC_L1F1()->phiD_2_final, &globals_->ITC_L1F1()->phiD_3_final, + &globals_->ITC_L1F1()->rD_0_final, &globals_->ITC_L1F1()->rD_1_final, + &globals_->ITC_L1F1()->rD_2_final, &globals_->ITC_L1F1()->rD_3_final, + &globals_->ITC_L1F1()->der_phiD_final, &globals_->ITC_L1F1()->der_rD_final}; + writeDesign(v, "TC_L1F1"); + } + { + const vector v = {&globals_->ITC_L1B1()->rinv_final, &globals_->ITC_L1B1()->phi0_final, + &globals_->ITC_L1B1()->t_final, &globals_->ITC_L1B1()->z0_final, + &globals_->ITC_L1B1()->phiL_0_final, &globals_->ITC_L1B1()->phiL_1_final, + &globals_->ITC_L1B1()->phiL_2_final, &globals_->ITC_L1B1()->zL_0_final, + &globals_->ITC_L1B1()->zL_1_final, &globals_->ITC_L1B1()->zL_2_final, + &globals_->ITC_L1B1()->der_phiL_final, &globals_->ITC_L1B1()->der_zL_final, + &globals_->ITC_L1B1()->phiD_0_final, &globals_->ITC_L1B1()->phiD_1_final, + &globals_->ITC_L1B1()->phiD_2_final, &globals_->ITC_L1B1()->phiD_3_final, + &globals_->ITC_L1B1()->rD_0_final, &globals_->ITC_L1B1()->rD_1_final, + &globals_->ITC_L1B1()->rD_2_final, &globals_->ITC_L1B1()->rD_3_final, + &globals_->ITC_L1B1()->der_phiD_final, &globals_->ITC_L1B1()->der_rD_final}; + writeDesign(v, "TC_L1B1"); + } + break; + case 7: // L2D1 + { + const vector v = {&globals_->ITC_L2F1()->rinv_final, &globals_->ITC_L2F1()->phi0_final, + &globals_->ITC_L2F1()->t_final, &globals_->ITC_L2F1()->z0_final, + &globals_->ITC_L2F1()->phiL_0_final, &globals_->ITC_L2F1()->phiL_1_final, + &globals_->ITC_L2F1()->phiL_2_final, &globals_->ITC_L2F1()->zL_0_final, + &globals_->ITC_L2F1()->zL_1_final, &globals_->ITC_L2F1()->zL_2_final, + &globals_->ITC_L2F1()->der_phiL_final, &globals_->ITC_L2F1()->der_zL_final, + &globals_->ITC_L2F1()->phiD_0_final, &globals_->ITC_L2F1()->phiD_1_final, + &globals_->ITC_L2F1()->phiD_2_final, &globals_->ITC_L2F1()->phiD_3_final, + &globals_->ITC_L2F1()->rD_0_final, &globals_->ITC_L2F1()->rD_1_final, + &globals_->ITC_L2F1()->rD_2_final, &globals_->ITC_L2F1()->rD_3_final, + &globals_->ITC_L2F1()->der_phiD_final, &globals_->ITC_L2F1()->der_rD_final}; + writeDesign(v, "TC_L2F1"); + } + { + const vector v = {&globals_->ITC_L2B1()->rinv_final, &globals_->ITC_L2B1()->phi0_final, + &globals_->ITC_L2B1()->t_final, &globals_->ITC_L2B1()->z0_final, + &globals_->ITC_L2B1()->phiL_0_final, &globals_->ITC_L2B1()->phiL_1_final, + &globals_->ITC_L2B1()->phiL_2_final, &globals_->ITC_L2B1()->zL_0_final, + &globals_->ITC_L2B1()->zL_1_final, &globals_->ITC_L2B1()->zL_2_final, + &globals_->ITC_L2B1()->der_phiL_final, &globals_->ITC_L2B1()->der_zL_final, + &globals_->ITC_L2B1()->phiD_0_final, &globals_->ITC_L2B1()->phiD_1_final, + &globals_->ITC_L2B1()->phiD_2_final, &globals_->ITC_L2B1()->phiD_3_final, + &globals_->ITC_L2B1()->rD_0_final, &globals_->ITC_L2B1()->rD_1_final, + &globals_->ITC_L2B1()->rD_2_final, &globals_->ITC_L2B1()->rD_3_final, + &globals_->ITC_L2B1()->der_phiD_final, &globals_->ITC_L2B1()->der_rD_final}; + writeDesign(v, "TC_L2B1"); + } + break; + } +} diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletCalculatorBase.cc b/L1Trigger/TrackFindingTracklet/src/TrackletCalculatorBase.cc index 687ff3fdfac82..86299e4ce3293 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackletCalculatorBase.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackletCalculatorBase.cc @@ -403,8 +403,8 @@ bool TrackletCalculatorBase::barrelSeeding(const Stub* innerFPGAStub, ITC->r2.set_fval(r2 - settings_.rmean(layerdisk2_)); ITC->z1.set_fval(z1); ITC->z2.set_fval(z2); - double sphi1 = angle0to2pi::make0To2pi(phi1 - phioffset_); - double sphi2 = angle0to2pi::make0To2pi(phi2 - phioffset_); + double sphi1 = angle0to2pi::make0To2pi(phi1 - phimin_); + double sphi2 = angle0to2pi::make0To2pi(phi2 - phimin_); ITC->phi1.set_fval(sphi1); ITC->phi2.set_fval(sphi2); @@ -560,8 +560,9 @@ bool TrackletCalculatorBase::barrelSeeding(const Stub* innerFPGAStub, izproj[2] = ITC->zL_2_final.ival(); izproj[3] = ITC->zL_3_final.ival(); - if (!goodTrackPars(ITC->rinv_final.local_passes(), ITC->z0_final.local_passes())) + if (!goodTrackPars(ITC->rinv_final.local_passes(), ITC->z0_final.local_passes())) { return false; + } if (!inSector(iphi0, irinv, phi0approx, rinvapprox)) return false; @@ -600,7 +601,8 @@ bool TrackletCalculatorBase::barrelSeeding(const Stub* innerFPGAStub, phiprojapprox[i], zprojapprox[i], ITC->der_phiL_final.fval(), - ITC->der_zL_final.fval()); + ITC->der_zL_final.fval(), + !(iSeed_ == 1 || iSeed_ == 2)); } iphiprojdisk[0] = ITC->phiD_0_final.ival(); @@ -835,8 +837,8 @@ bool TrackletCalculatorBase::diskSeeding(const Stub* innerFPGAStub, int signt = t > 0 ? 1 : -1; ITC->z1.set_fval(z1 - signt * settings_.zmean(layerdisk1_ - N_LAYER)); ITC->z2.set_fval(z2 - signt * settings_.zmean(layerdisk2_ - N_LAYER)); - double sphi1 = angle0to2pi::make0To2pi(phi1 - phioffset_); - double sphi2 = angle0to2pi::make0To2pi(phi2 - phioffset_); + double sphi1 = angle0to2pi::make0To2pi(phi1 - phimin_); + double sphi2 = angle0to2pi::make0To2pi(phi2 - phimin_); ITC->phi1.set_fval(sphi1); ITC->phi2.set_fval(sphi2); @@ -1001,7 +1003,8 @@ bool TrackletCalculatorBase::diskSeeding(const Stub* innerFPGAStub, phiprojapprox[i], zprojapprox[i], ITC->der_phiL_final.fval(), - ITC->der_zL_final.fval()); + ITC->der_zL_final.fval(), + true); } iphiprojdisk[0] = ITC->phiD_0_final.ival(); @@ -1191,8 +1194,8 @@ bool TrackletCalculatorBase::overlapSeeding(const Stub* innerFPGAStub, int signt = t > 0 ? 1 : -1; ITC->z1.set_fval(z2); ITC->z2.set_fval(z1 - signt * settings_.zmean(layerdisk2_ - N_LAYER)); - double sphi1 = angle0to2pi::make0To2pi(phi1 - phioffset_); - double sphi2 = angle0to2pi::make0To2pi(phi2 - phioffset_); + double sphi1 = angle0to2pi::make0To2pi(phi1 - phimin_); + double sphi2 = angle0to2pi::make0To2pi(phi2 - phimin_); ITC->phi1.set_fval(sphi2); ITC->phi2.set_fval(sphi1); @@ -1374,7 +1377,8 @@ bool TrackletCalculatorBase::overlapSeeding(const Stub* innerFPGAStub, phiprojapprox[i], zprojapprox[i], ITC->der_phiL_final.fval(), - ITC->der_zL_final.fval()); + ITC->der_zL_final.fval(), + true); } for (int i = 0; i < 4; ++i) { diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletCalculatorDisplaced.cc b/L1Trigger/TrackFindingTracklet/src/TrackletCalculatorDisplaced.cc index de2f0910c6697..5c99dfd6238a4 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackletCalculatorDisplaced.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackletCalculatorDisplaced.cc @@ -63,6 +63,10 @@ TrackletCalculatorDisplaced::TrackletCalculatorDisplaced(string name, if (iSeed == 8 || iSeed == 9) { if (layer_ == 3) { + rzmeanInv_[0] = 1.0 / settings_.rmean(2 - 1); + rzmeanInv_[1] = 1.0 / settings_.rmean(3 - 1); + rzmeanInv_[2] = 1.0 / settings_.rmean(4 - 1); + rproj_[0] = settings_.rmean(0); rproj_[1] = settings_.rmean(4); rproj_[2] = settings_.rmean(5); @@ -77,6 +81,10 @@ TrackletCalculatorDisplaced::TrackletCalculatorDisplaced(string name, toZ_.push_back(settings_.zmean(1)); } if (layer_ == 5) { + rzmeanInv_[0] = 1.0 / settings_.rmean(4 - 1); + rzmeanInv_[1] = 1.0 / settings_.rmean(5 - 1); + rzmeanInv_[2] = 1.0 / settings_.rmean(6 - 1); + rproj_[0] = settings_.rmean(0); rproj_[1] = settings_.rmean(1); rproj_[2] = settings_.rmean(2); @@ -94,6 +102,10 @@ TrackletCalculatorDisplaced::TrackletCalculatorDisplaced(string name, if (iSeed == 10 || iSeed == 11) { if (layer_ == 2) { + rzmeanInv_[0] = 1.0 / settings_.rmean(2 - 1); + rzmeanInv_[1] = 1.0 / settings_.rmean(3 - 1); + rzmeanInv_[2] = 1.0 / settings_.zmean(1 - 1); + rproj_[0] = settings_.rmean(0); lproj_[0] = 1; lproj_[1] = -1; @@ -107,6 +119,10 @@ TrackletCalculatorDisplaced::TrackletCalculatorDisplaced(string name, dproj_[2] = 4; } if (disk_ == 1) { + rzmeanInv_[0] = 1.0 / settings_.rmean(2 - 1); + rzmeanInv_[1] = 1.0 / settings_.zmean(1 - 1); + rzmeanInv_[2] = 1.0 / settings_.zmean(2 - 1); + rproj_[0] = settings_.rmean(0); lproj_[0] = 1; lproj_[1] = -1; @@ -225,9 +241,8 @@ void TrackletCalculatorDisplaced::execute() { const Stub* outerFPGAStub = stubtriplet->getFPGAStub3(i); const L1TStub* outerStub = outerFPGAStub->l1tstub(); - if (settings_.debugTracklet()) { + if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "TrackletCalculatorDisplaced execute " << getName() << "[" << iSector_ << "]"; - } if (innerFPGAStub->isBarrel() && middleFPGAStub->isBarrel() && outerFPGAStub->isBarrel()) { //barrel+barrel seeding @@ -261,9 +276,8 @@ void TrackletCalculatorDisplaced::execute() { edm::LogVerbatim("Tracklet") << "Will break on MAXTC 1"; break; } - if (settings_.debugTracklet()) { + if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "TrackletCalculatorDisplaced execute done"; - } } if (countall >= settings_.maxStep("TC")) { if (settings_.debugTracklet()) @@ -342,9 +356,8 @@ void TrackletCalculatorDisplaced::addProjectionDisk(int disk, return; } assert(trackletprojs != nullptr); - if (settings_.debugTracklet()) { + if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << getName() << " adding projection to " << trackletprojs->getName(); - } trackletprojs->addProj(tracklet); } @@ -354,11 +367,10 @@ bool TrackletCalculatorDisplaced::LLLSeeding(const Stub* innerFPGAStub, const L1TStub* middleStub, const Stub* outerFPGAStub, const L1TStub* outerStub) { - if (settings_.debugTracklet()) { + if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "TrackletCalculatorDisplaced " << getName() << " " << layer_ << " trying stub triplet in layer (L L L): " << innerFPGAStub->layer().value() << " " << middleFPGAStub->layer().value() << " " << outerFPGAStub->layer().value(); - } assert(outerFPGAStub->isBarrel()); @@ -377,6 +389,7 @@ bool TrackletCalculatorDisplaced::LLLSeeding(const Stub* innerFPGAStub, int take3 = 0; if (layer_ == 5) take3 = 1; + unsigned ndisks = 0; double rinv, phi0, d0, t, z0; @@ -409,43 +422,119 @@ bool TrackletCalculatorDisplaced::LLLSeeding(const Stub* innerFPGAStub, zder, phiderdisk, rderdisk); + if (settings_.debugTracklet()) + edm::LogVerbatim("Tracklet") << __LINE__ << ":" << __FILE__ << "LLL Exact values " << innerFPGAStub->isBarrel() + << middleFPGAStub->isBarrel() << outerFPGAStub->isBarrel() << " " << phi1 << ", " << z1 + << ", " << r1 << ", " << phi2 << ", " << z2 << ", " << r2 << ", " << phi3 << ", " << z3 + << ", " << r3 << endl; if (settings_.useapprox()) { phi1 = innerFPGAStub->phiapprox(phimin_, phimax_); z1 = innerFPGAStub->zapprox(); r1 = innerFPGAStub->rapprox(); - phi2 = outerFPGAStub->phiapprox(phimin_, phimax_); - z2 = outerFPGAStub->zapprox(); - r2 = outerFPGAStub->rapprox(); + phi2 = middleFPGAStub->phiapprox(phimin_, phimax_); + z2 = middleFPGAStub->zapprox(); + r2 = middleFPGAStub->rapprox(); + + phi3 = outerFPGAStub->phiapprox(phimin_, phimax_); + z3 = outerFPGAStub->zapprox(); + r3 = outerFPGAStub->rapprox(); } + if (settings_.debugTracklet()) + edm::LogVerbatim("Tracklet") << __LINE__ << ":" << __FILE__ << "LLL Approx values " << innerFPGAStub->isBarrel() + << middleFPGAStub->isBarrel() << outerFPGAStub->isBarrel() << " " << phi1 << ", " << z1 + << ", " << r1 << ", " << phi2 << ", " << z2 << ", " << r2 << ", " << phi3 << ", " << z3 + << ", " << r3 << endl; + double rinvapprox, phi0approx, d0approx, tapprox, z0approx; double phiprojapprox[N_LAYER - 2], zprojapprox[N_LAYER - 2], phiderapprox[N_LAYER - 2], zderapprox[N_LAYER - 2]; double phiprojdiskapprox[N_DISK], rprojdiskapprox[N_DISK]; double phiderdiskapprox[N_DISK], rderdiskapprox[N_DISK]; //TODO: implement the actual integer calculation + if (settings_.useapprox()) { + approxtracklet(r1, + z1, + phi1, + r2, + z2, + phi2, + r3, + z3, + phi3, + take3, + ndisks, + rinvapprox, + phi0approx, + d0approx, + tapprox, + z0approx, + phiprojapprox, + zprojapprox, + phiderapprox, + zderapprox, + phiprojdiskapprox, + rprojdiskapprox, + phiderdiskapprox, + rderdiskapprox); + } else { + rinvapprox = rinv; + phi0approx = phi0; + d0approx = d0; + tapprox = t; + z0approx = z0; + + for (unsigned int i = 0; i < toR_.size(); ++i) { + phiprojapprox[i] = phiproj[i]; + zprojapprox[i] = zproj[i]; + phiderapprox[i] = phider[i]; + zderapprox[i] = zder[i]; + } + + for (unsigned int i = 0; i < toZ_.size(); ++i) { + phiprojdiskapprox[i] = phiprojdisk[i]; + rprojdiskapprox[i] = rprojdisk[i]; + phiderdiskapprox[i] = phiderdisk[i]; + rderdiskapprox[i] = rderdisk[i]; + } + } //store the approcximate results - rinvapprox = rinv; - phi0approx = phi0; - d0approx = d0; - tapprox = t; - z0approx = z0; + + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << "rinvapprox: " << rinvapprox << " rinv: " << rinv << endl; + edm::LogVerbatim("Tracklet") << "phi0approx: " << phi0approx << " phi0: " << phi0 << endl; + edm::LogVerbatim("Tracklet") << "d0approx: " << d0approx << " d0: " << d0 << endl; + edm::LogVerbatim("Tracklet") << "tapprox: " << tapprox << " t: " << t << endl; + edm::LogVerbatim("Tracklet") << "z0approx: " << z0approx << " z0: " << z0 << endl; + } for (unsigned int i = 0; i < toR_.size(); ++i) { - phiprojapprox[i] = phiproj[i]; - zprojapprox[i] = zproj[i]; - phiderapprox[i] = phider[i]; - zderapprox[i] = zder[i]; + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << "phiprojapprox[" << i << "]: " << phiprojapprox[i] << " phiproj[" << i + << "]: " << phiproj[i] << endl; + edm::LogVerbatim("Tracklet") << "zprojapprox[" << i << "]: " << zprojapprox[i] << " zproj[" << i + << "]: " << zproj[i] << endl; + edm::LogVerbatim("Tracklet") << "phiderapprox[" << i << "]: " << phiderapprox[i] << " phider[" << i + << "]: " << phider[i] << endl; + edm::LogVerbatim("Tracklet") << "zderapprox[" << i << "]: " << zderapprox[i] << " zder[" << i << "]: " << zder[i] + << endl; + } } for (unsigned int i = 0; i < toZ_.size(); ++i) { - phiprojdiskapprox[i] = phiprojdisk[i]; - rprojdiskapprox[i] = rprojdisk[i]; - phiderdiskapprox[i] = phiderdisk[i]; - rderdiskapprox[i] = rderdisk[i]; + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << "phiprojdiskapprox[" << i << "]: " << phiprojdiskapprox[i] << " phiprojdisk[" << i + << "]: " << phiprojdisk[i] << endl; + edm::LogVerbatim("Tracklet") << "rprojdiskapprox[" << i << "]: " << rprojdiskapprox[i] << " rprojdisk[" << i + << "]: " << rprojdisk[i] << endl; + edm::LogVerbatim("Tracklet") << "phiderdiskapprox[" << i << "]: " << phiderdiskapprox[i] << " phiderdisk[" << i + << "]: " << phiderdisk[i] << endl; + edm::LogVerbatim("Tracklet") << "rderdiskapprox[" << i << "]: " << rderdiskapprox[i] << " rderdisk[" << i + << "]: " << rderdisk[i] << endl; + } } //now binary @@ -480,7 +569,7 @@ bool TrackletCalculatorDisplaced::LLLSeeding(const Stub* innerFPGAStub, << ")"; success = false; } - if (std::abs(z0approx) > 1.8 * settings_.z0cut()) { + if (std::abs(z0approx) > settings_.disp_z0cut()) { if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "Failed tracklet z0 cut " << z0approx << " in layer " << layer_; success = false; @@ -615,9 +704,8 @@ bool TrackletCalculatorDisplaced::LLLSeeding(const Stub* innerFPGAStub, if (settings_.writeMonitorData("TrackletPars")) { globals_->ofstream("trackletpars.txt") - << "Trackpars " << layer_ << " " << rinv << " " << rinvapprox << " " << rinvapprox << " " << phi0 << " " - << phi0approx << " " << phi0approx << " " << t << " " << tapprox << " " << tapprox << " " << z0 << " " - << z0approx << " " << z0approx << endl; + << layer_ << " , " << rinv << " , " << rinvapprox << " , " << phi0 << " , " << phi0approx << " , " << t << " , " + << tapprox << " , " << z0 << " , " << z0approx << " , " << d0 << " , " << d0approx << endl; } Tracklet* tracklet = new Tracklet(settings_, @@ -646,10 +734,9 @@ bool TrackletCalculatorDisplaced::LLLSeeding(const Stub* innerFPGAStub, diskprojs, false); - if (settings_.debugTracklet()) { + if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "TrackletCalculatorDisplaced " << getName() << " Found LLL tracklet in sector = " << iSector_ << " phi0 = " << phi0; - } tracklet->setTrackletIndex(trackletpars_->nTracklets()); tracklet->setTCIndex(TCIndex_); @@ -702,13 +789,13 @@ bool TrackletCalculatorDisplaced::DDLSeeding(const Stub* innerFPGAStub, const L1TStub* middleStub, const Stub* outerFPGAStub, const L1TStub* outerStub) { - if (settings_.debugTracklet()) { + if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "TrackletCalculatorDisplaced " << getName() << " " << layer_ << " trying stub triplet in (L2 D1 D2): " << innerFPGAStub->layer().value() << " " << middleFPGAStub->disk().value() << " " << outerFPGAStub->disk().value(); - } int take3 = 1; //D1D2L2 + unsigned ndisks = 2; double r1 = innerStub->r(); double z1 = innerStub->z(); @@ -751,42 +838,118 @@ bool TrackletCalculatorDisplaced::DDLSeeding(const Stub* innerFPGAStub, phiderdisk, rderdisk); + if (settings_.debugTracklet()) + edm::LogVerbatim("Tracklet") << __LINE__ << ":" << __FILE__ << " DLL Exact values " << innerFPGAStub->isBarrel() + << middleFPGAStub->isBarrel() << outerFPGAStub->isBarrel() << " " << phi1 << ", " << z1 + << ", " << r1 << ", " << phi2 << ", " << z2 << ", " << r2 << ", " << phi3 << ", " << z3 + << ", " << r3 << endl; + if (settings_.useapprox()) { phi1 = innerFPGAStub->phiapprox(phimin_, phimax_); z1 = innerFPGAStub->zapprox(); r1 = innerFPGAStub->rapprox(); - phi2 = outerFPGAStub->phiapprox(phimin_, phimax_); - z2 = outerFPGAStub->zapprox(); - r2 = outerFPGAStub->rapprox(); + phi2 = middleFPGAStub->phiapprox(phimin_, phimax_); + z2 = middleFPGAStub->zapprox(); + r2 = middleFPGAStub->rapprox(); + + phi3 = outerFPGAStub->phiapprox(phimin_, phimax_); + z3 = outerFPGAStub->zapprox(); + r3 = outerFPGAStub->rapprox(); } + if (settings_.debugTracklet()) + edm::LogVerbatim("Tracklet") << __LINE__ << ":" << __FILE__ << "DLL Approx values " << innerFPGAStub->isBarrel() + << middleFPGAStub->isBarrel() << outerFPGAStub->isBarrel() << " " << phi1 << ", " << z1 + << ", " << r1 << ", " << phi2 << ", " << z2 << ", " << r2 << ", " << phi3 << ", " << z3 + << ", " << r3 << endl; + double rinvapprox, phi0approx, d0approx, tapprox, z0approx; double phiprojapprox[N_LAYER - 2], zprojapprox[N_LAYER - 2], phiderapprox[N_LAYER - 2], zderapprox[N_LAYER - 2]; double phiprojdiskapprox[N_DISK], rprojdiskapprox[N_DISK]; double phiderdiskapprox[N_DISK], rderdiskapprox[N_DISK]; //TODO: implement the actual integer calculation + if (settings_.useapprox()) { + approxtracklet(r1, + z1, + phi1, + r2, + z2, + phi2, + r3, + z3, + phi3, + take3, + ndisks, + rinvapprox, + phi0approx, + d0approx, + tapprox, + z0approx, + phiprojapprox, + zprojapprox, + phiderapprox, + zderapprox, + phiprojdiskapprox, + rprojdiskapprox, + phiderdiskapprox, + rderdiskapprox); + } else { + rinvapprox = rinv; + phi0approx = phi0; + d0approx = d0; + tapprox = t; + z0approx = z0; + + for (unsigned int i = 0; i < toR_.size(); ++i) { + phiprojapprox[i] = phiproj[i]; + zprojapprox[i] = zproj[i]; + phiderapprox[i] = phider[i]; + zderapprox[i] = zder[i]; + } + + for (unsigned int i = 0; i < toZ_.size(); ++i) { + phiprojdiskapprox[i] = phiprojdisk[i]; + rprojdiskapprox[i] = rprojdisk[i]; + phiderdiskapprox[i] = phiderdisk[i]; + rderdiskapprox[i] = rderdisk[i]; + } + } //store the approcximate results - rinvapprox = rinv; - phi0approx = phi0; - d0approx = d0; - tapprox = t; - z0approx = z0; + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << "rinvapprox: " << rinvapprox << " rinv: " << rinv << endl; + edm::LogVerbatim("Tracklet") << "phi0approx: " << phi0approx << " phi0: " << phi0 << endl; + edm::LogVerbatim("Tracklet") << "d0approx: " << d0approx << " d0: " << d0 << endl; + edm::LogVerbatim("Tracklet") << "tapprox: " << tapprox << " t: " << t << endl; + edm::LogVerbatim("Tracklet") << "z0approx: " << z0approx << " z0: " << z0 << endl; + } for (unsigned int i = 0; i < toR_.size(); ++i) { - phiprojapprox[i] = phiproj[i]; - zprojapprox[i] = zproj[i]; - phiderapprox[i] = phider[i]; - zderapprox[i] = zder[i]; + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << "phiprojapprox[" << i << "]: " << phiprojapprox[i] << " phiproj[" << i + << "]: " << phiproj[i] << endl; + edm::LogVerbatim("Tracklet") << "zprojapprox[" << i << "]: " << zprojapprox[i] << " zproj[" << i + << "]: " << zproj[i] << endl; + edm::LogVerbatim("Tracklet") << "phiderapprox[" << i << "]: " << phiderapprox[i] << " phider[" << i + << "]: " << phider[i] << endl; + edm::LogVerbatim("Tracklet") << "zderapprox[" << i << "]: " << zderapprox[i] << " zder[" << i << "]: " << zder[i] + << endl; + } } for (unsigned int i = 0; i < toZ_.size(); ++i) { - phiprojdiskapprox[i] = phiprojdisk[i]; - rprojdiskapprox[i] = rprojdisk[i]; - phiderdiskapprox[i] = phiderdisk[i]; - rderdiskapprox[i] = rderdisk[i]; + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << "phiprojdiskapprox[" << i << "]: " << phiprojdiskapprox[i] << " phiprojdisk[" << i + << "]: " << phiprojdisk[i] << endl; + edm::LogVerbatim("Tracklet") << "rprojdiskapprox[" << i << "]: " << rprojdiskapprox[i] << " rprojdisk[" << i + << "]: " << rprojdisk[i] << endl; + edm::LogVerbatim("Tracklet") << "phiderdiskapprox[" << i << "]: " << phiderdiskapprox[i] << " phiderdisk[" << i + << "]: " << phiderdisk[i] << endl; + edm::LogVerbatim("Tracklet") << "rderdiskapprox[" << i << "]: " << rderdiskapprox[i] << " rderdisk[" << i + << "]: " << rderdisk[i] << endl; + } } //now binary @@ -821,7 +984,7 @@ bool TrackletCalculatorDisplaced::DDLSeeding(const Stub* innerFPGAStub, << ")"; success = false; } - if (std::abs(z0approx) > 1.8 * settings_.z0cut()) { + if (std::abs(z0approx) > settings_.disp_z0cut()) { if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "Failed tracklet z0 cut " << z0approx; success = false; @@ -950,9 +1113,8 @@ bool TrackletCalculatorDisplaced::DDLSeeding(const Stub* innerFPGAStub, if (settings_.writeMonitorData("TrackletPars")) { globals_->ofstream("trackletpars.txt") - << "Trackpars " << layer_ << " " << rinv << " " << rinvapprox << " " << rinvapprox << " " << phi0 << " " - << phi0approx << " " << phi0approx << " " << t << " " << tapprox << " " << tapprox << " " << z0 << " " - << z0approx << " " << z0approx << endl; + << layer_ << " , " << rinv << " , " << rinvapprox << " , " << phi0 << " , " << phi0approx << " , " << t << " , " + << tapprox << " , " << z0 << " , " << z0approx << " , " << d0 << " , " << d0approx << endl; } Tracklet* tracklet = new Tracklet(settings_, @@ -981,10 +1143,9 @@ bool TrackletCalculatorDisplaced::DDLSeeding(const Stub* innerFPGAStub, diskprojs, true); - if (settings_.debugTracklet()) { + if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "TrackletCalculatorDisplaced " << getName() << " Found DDL tracklet in sector = " << iSector_ << " phi0 = " << phi0; - } tracklet->setTrackletIndex(trackletpars_->nTracklets()); tracklet->setTCIndex(TCIndex_); @@ -1028,13 +1189,13 @@ bool TrackletCalculatorDisplaced::LLDSeeding(const Stub* innerFPGAStub, const L1TStub* middleStub, const Stub* outerFPGAStub, const L1TStub* outerStub) { - if (settings_.debugTracklet()) { + if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "TrackletCalculatorDisplaced " << getName() << " " << layer_ << " trying stub triplet in (L2L3D1): " << middleFPGAStub->layer().value() << " " << outerFPGAStub->layer().value() << " " << innerFPGAStub->disk().value(); - } int take3 = 0; //L2L3D1 + unsigned ndisks = 1; double r3 = innerStub->r(); double z3 = innerStub->z(); @@ -1077,42 +1238,118 @@ bool TrackletCalculatorDisplaced::LLDSeeding(const Stub* innerFPGAStub, phiderdisk, rderdisk); + if (settings_.debugTracklet()) + edm::LogVerbatim("Tracklet") << __LINE__ << ":" << __FILE__ << "LLD Exact values " << innerFPGAStub->isBarrel() + << middleFPGAStub->isBarrel() << outerFPGAStub->isBarrel() << " " << phi3 << ", " << z3 + << ", " << r3 << ", " << phi1 << ", " << z1 << ", " << r1 << ", " << phi2 << ", " << z2 + << ", " << r2 << endl; + if (settings_.useapprox()) { - phi1 = innerFPGAStub->phiapprox(phimin_, phimax_); - z1 = innerFPGAStub->zapprox(); - r1 = innerFPGAStub->rapprox(); + phi3 = innerFPGAStub->phiapprox(phimin_, phimax_); + z3 = innerFPGAStub->zapprox(); + r3 = innerFPGAStub->rapprox(); + + phi1 = middleFPGAStub->phiapprox(phimin_, phimax_); + z1 = middleFPGAStub->zapprox(); + r1 = middleFPGAStub->rapprox(); phi2 = outerFPGAStub->phiapprox(phimin_, phimax_); z2 = outerFPGAStub->zapprox(); r2 = outerFPGAStub->rapprox(); } + if (settings_.debugTracklet()) + edm::LogVerbatim("Tracklet") << __LINE__ << ":" << __FILE__ << "LLD approx values " << innerFPGAStub->isBarrel() + << middleFPGAStub->isBarrel() << outerFPGAStub->isBarrel() << " " << phi3 << ", " << z3 + << ", " << r3 << ", " << phi1 << ", " << z1 << ", " << r1 << ", " << phi2 << ", " << z2 + << ", " << r2 << endl; + double rinvapprox, phi0approx, d0approx, tapprox, z0approx; double phiprojapprox[N_LAYER - 2], zprojapprox[N_LAYER - 2], phiderapprox[N_LAYER - 2], zderapprox[N_LAYER - 2]; double phiprojdiskapprox[N_DISK], rprojdiskapprox[N_DISK]; double phiderdiskapprox[N_DISK], rderdiskapprox[N_DISK]; //TODO: implement the actual integer calculation + if (settings_.useapprox()) { + approxtracklet(r1, + z1, + phi1, + r2, + z2, + phi2, + r3, + z3, + phi3, + take3, + ndisks, + rinvapprox, + phi0approx, + d0approx, + tapprox, + z0approx, + phiprojapprox, + zprojapprox, + phiderapprox, + zderapprox, + phiprojdiskapprox, + rprojdiskapprox, + phiderdiskapprox, + rderdiskapprox); + } else { + rinvapprox = rinv; + phi0approx = phi0; + d0approx = d0; + tapprox = t; + z0approx = z0; + + for (unsigned int i = 0; i < toR_.size(); ++i) { + phiprojapprox[i] = phiproj[i]; + zprojapprox[i] = zproj[i]; + phiderapprox[i] = phider[i]; + zderapprox[i] = zder[i]; + } + + for (unsigned int i = 0; i < toZ_.size(); ++i) { + phiprojdiskapprox[i] = phiprojdisk[i]; + rprojdiskapprox[i] = rprojdisk[i]; + phiderdiskapprox[i] = phiderdisk[i]; + rderdiskapprox[i] = rderdisk[i]; + } + } //store the approcximate results - rinvapprox = rinv; - phi0approx = phi0; - d0approx = d0; - tapprox = t; - z0approx = z0; + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << "rinvapprox: " << rinvapprox << " rinv: " << rinv << endl; + edm::LogVerbatim("Tracklet") << "phi0approx: " << phi0approx << " phi0: " << phi0 << endl; + edm::LogVerbatim("Tracklet") << "d0approx: " << d0approx << " d0: " << d0 << endl; + edm::LogVerbatim("Tracklet") << "tapprox: " << tapprox << " t: " << t << endl; + edm::LogVerbatim("Tracklet") << "z0approx: " << z0approx << " z0: " << z0 << endl; + } for (unsigned int i = 0; i < toR_.size(); ++i) { - phiprojapprox[i] = phiproj[i]; - zprojapprox[i] = zproj[i]; - phiderapprox[i] = phider[i]; - zderapprox[i] = zder[i]; + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << "phiprojapprox[" << i << "]: " << phiprojapprox[i] << " phiproj[" << i + << "]: " << phiproj[i] << endl; + edm::LogVerbatim("Tracklet") << "zprojapprox[" << i << "]: " << zprojapprox[i] << " zproj[" << i + << "]: " << zproj[i] << endl; + edm::LogVerbatim("Tracklet") << "phiderapprox[" << i << "]: " << phiderapprox[i] << " phider[" << i + << "]: " << phider[i] << endl; + edm::LogVerbatim("Tracklet") << "zderapprox[" << i << "]: " << zderapprox[i] << " zder[" << i << "]: " << zder[i] + << endl; + } } for (unsigned int i = 0; i < toZ_.size(); ++i) { - phiprojdiskapprox[i] = phiprojdisk[i]; - rprojdiskapprox[i] = rprojdisk[i]; - phiderdiskapprox[i] = phiderdisk[i]; - rderdiskapprox[i] = rderdisk[i]; + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << "phiprojdiskapprox[" << i << "]: " << phiprojdiskapprox[i] << " phiprojdisk[" << i + << "]: " << phiprojdisk[i] << endl; + edm::LogVerbatim("Tracklet") << "rprojdiskapprox[" << i << "]: " << rprojdiskapprox[i] << " rprojdisk[" << i + << "]: " << rprojdisk[i] << endl; + edm::LogVerbatim("Tracklet") << "phiderdiskapprox[" << i << "]: " << phiderdiskapprox[i] << " phiderdisk[" << i + << "]: " << phiderdisk[i] << endl; + edm::LogVerbatim("Tracklet") << "rderdiskapprox[" << i << "]: " << rderdiskapprox[i] << " rderdisk[" << i + << "]: " << rderdisk[i] << endl; + } } //now binary @@ -1147,7 +1384,7 @@ bool TrackletCalculatorDisplaced::LLDSeeding(const Stub* innerFPGAStub, << ")"; success = false; } - if (std::abs(z0approx) > 1.8 * settings_.z0cut()) { + if (std::abs(z0approx) > settings_.disp_z0cut()) { if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "Failed tracklet z0 cut " << z0approx; success = false; @@ -1277,9 +1514,8 @@ bool TrackletCalculatorDisplaced::LLDSeeding(const Stub* innerFPGAStub, if (settings_.writeMonitorData("TrackletPars")) { globals_->ofstream("trackletpars.txt") - << "Trackpars " << layer_ << " " << rinv << " " << rinvapprox << " " << rinvapprox << " " << phi0 << " " - << phi0approx << " " << phi0approx << " " << t << " " << tapprox << " " << tapprox << " " << z0 << " " - << z0approx << " " << z0approx << endl; + << layer_ << " , " << rinv << " , " << rinvapprox << " , " << phi0 << " , " << phi0approx << " , " << t << " , " + << tapprox << " , " << z0 << " , " << z0approx << " , " << d0 << " , " << d0approx << endl; } Tracklet* tracklet = new Tracklet(settings_, @@ -1308,10 +1544,9 @@ bool TrackletCalculatorDisplaced::LLDSeeding(const Stub* innerFPGAStub, diskprojs, false); - if (settings_.debugTracklet()) { + if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "TrackletCalculatorDisplaced " << getName() << " Found LLD tracklet in sector = " << iSector_ << " phi0 = " << phi0; - } tracklet->setTrackletIndex(trackletpars_->nTracklets()); tracklet->setTCIndex(TCIndex_); @@ -1370,9 +1605,8 @@ void TrackletCalculatorDisplaced::exactproj(double rproj, phider = -0.5 * rinv / sqrt(1 - pow(0.5 * rproj * rinv, 2)) + d0 / (rproj * rproj); zder = t / sqrt(1 - pow(0.5 * rproj * rinv, 2)); - if (settings_.debugTracklet()) { + if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "exact proj layer at " << rproj << " : " << phiproj << " " << zproj; - } } void TrackletCalculatorDisplaced::exactprojdisk(double zproj, @@ -1409,9 +1643,8 @@ void TrackletCalculatorDisplaced::exactprojdisk(double zproj, phider = c / t / (x * x + y * y) * (rho + x0 * cos(phiV + c * beta) + y0 * sin(phiV + c * beta)); rder = c / t / rproj * (y0 * cos(phiV + c * beta) - x0 * sin(phiV + c * beta)); - if (settings_.debugTracklet()) { + if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "exact proj disk at" << zproj << " : " << phiproj << " " << rproj; - } } void TrackletCalculatorDisplaced::exacttracklet(double r1, @@ -1463,6 +1696,8 @@ void TrackletCalculatorDisplaced::exacttracklet(double r1, if (eps1 > 1e-10 || eps2 > 1e-10) edm::LogVerbatim("Tracklet") << "&&&&&&&&&&&& bad circle! " << R1 << "\t" << R2 << "\t" << R3; + if (settings_.debugTracklet()) + edm::LogVerbatim("Tracklet") << "phimin_: " << phimin_ << " phimax_: " << phimax_; //results rinv = 1. / R1; phi0 = 0.5 * M_PI + atan2(y0, x0); @@ -1500,9 +1735,6 @@ void TrackletCalculatorDisplaced::exacttracklet(double r1, z0 = z12; } - if (settings_.debugTracklet()) - edm::LogVerbatim("Tracklet") << "exact tracklet: " << rinv << " " << phi0 << " " << d0 << " " << t << " " << z0; - for (unsigned int i = 0; i < toR_.size(); i++) { exactproj(toR_[i], rinv, phi0, d0, t, z0, sqrt(x0 * x0 + y0 * y0), phiproj[i], zproj[i], phider[i], zder[i]); } @@ -1510,4 +1742,195 @@ void TrackletCalculatorDisplaced::exacttracklet(double r1, for (unsigned int i = 0; i < toZ_.size(); i++) { exactprojdisk(toZ_[i], rinv, phi0, d0, t, z0, x0, y0, phiprojdisk[i], rprojdisk[i], phiderdisk[i], rderdisk[i]); } + + if (settings_.debugTracklet()) + edm::LogVerbatim("Tracklet") << "exact tracklet: " << rinv << " " << phi0 << " " << t << " " << z0 << " " << d0; +} + +void TrackletCalculatorDisplaced::approxproj(double halfRinv, + double phi0, + double d0, + double t, + double z0, + double halfRinv_0, + double d0_0, // zeroeth order result for higher order terms calculation + double rmean, + double& phiproj, + double& phiprojder, + double& zproj, + double& zprojder) { + if (std::abs(2.0 * halfRinv) > settings_.rinvcut() || std::abs(z0) > settings_.disp_z0cut() || + std::abs(d0) > settings_.maxd0()) { + phiproj = 0.0; + return; + } + double rmeanInv = 1.0 / rmean; + + phiproj = phi0 + rmean * (-halfRinv + 2.0 * d0_0 * halfRinv_0 * halfRinv_0) + + rmeanInv * (-d0 + halfRinv_0 * d0_0 * d0_0) + sixth * pow(-rmean * halfRinv_0 - rmeanInv * d0_0, 3); + phiprojder = -halfRinv + d0 * rmeanInv * rmeanInv; //removed all high terms + + zproj = z0 + t * rmean - 0.5 * rmeanInv * t * d0_0 * d0_0 - t * rmean * halfRinv * d0 + + sixth * pow(rmean, 3) * t * halfRinv_0 * halfRinv_0; + zprojder = t; // removed all high terms + + phiproj = angle0to2pi::make0To2pi(phiproj); + + if (settings_.debugTracklet()) + edm::LogVerbatim("Tracklet") << "approx proj layer at " << rmean << " : " << phiproj << " " << zproj << endl; +} + +void TrackletCalculatorDisplaced::approxprojdisk(double halfRinv, + double phi0, + double d0, + double t, + double z0, + double halfRinv_0, + double d0_0, // zeroeth order result for higher order terms calculation + double zmean, + double& phiproj, + double& phiprojder, + double& rproj, + double& rprojder) { + if (std::abs(2.0 * halfRinv) > settings_.rinvcut() || std::abs(z0) > settings_.disp_z0cut() || + std::abs(d0) > settings_.maxd0()) { + phiproj = 0.0; + return; + } + + if (t < 0) + zmean = -zmean; + + double zmeanInv = 1.0 / zmean, rstar = (zmean - z0) / t, + epsilon = 0.5 * zmeanInv * zmeanInv * d0_0 * d0_0 * t * t + halfRinv * d0 - + sixth * rstar * rstar * halfRinv_0 * halfRinv_0; + + rproj = rstar * (1 + epsilon); + rprojder = 1 / t; + + double A = rproj * halfRinv; + double B = -d0 * t * zmeanInv * (1 + z0 * zmeanInv) * (1 - epsilon); + double C = -d0 * halfRinv; + double A_0 = rproj * halfRinv_0; + double B_0 = -d0_0 * t * zmeanInv * (1 + z0 * zmeanInv) * (1 - epsilon); + // double C_0 = -d0_0 * halfRinv_0; + + phiproj = phi0 - A + B * (1 + C - 2 * A_0 * A_0) + sixth * pow(-A_0 + B_0, 3); + phiprojder = -halfRinv / t - d0 * t * t * zmeanInv * zmeanInv; + + phiproj = angle0to2pi::make0To2pi(phiproj); + + if (settings_.debugTracklet()) + edm::LogVerbatim("Tracklet") << "approx proj disk at" << zmean << " : " << phiproj << " " << rproj << endl; +} + +void TrackletCalculatorDisplaced::approxtracklet(double r1, + double z1, + double phi1, + double r2, + double z2, + double phi2, + double r3, + double z3, + double phi3, + bool take3, + unsigned ndisks, + double& rinv, + double& phi0, + double& d0, + double& t, + double& z0, + double phiproj[4], + double zproj[4], + double phider[4], + double zder[4], + double phiprojdisk[5], + double rprojdisk[5], + double phiderdisk[5], + double rderdisk[5]) { + double a = 1.0 / ((r1 - r2) * (r1 - r3)); + double b = 1.0 / ((r1 - r2) * (r2 - r3)); + double c = 1.0 / ((r1 - r3) * (r2 - r3)); + + // first iteration in r-phi plane + double halfRinv_0 = -phi1 * r1 * a + phi2 * r2 * b - phi3 * r3 * c; + double d0_0 = r1 * r2 * r3 * (-phi1 * a + phi2 * b - phi3 * c); + + // corrections to phi1, phi2, and phi3 + double r = r2, z = z2; + if (take3) + r = r3, z = z3; + + double d0OverR1 = d0_0 * rzmeanInv_[0] * (ndisks > 2 ? std::abs((z - z1) / (r - r1)) : 1.0); + double d0OverR2 = d0_0 * rzmeanInv_[1] * (ndisks > 1 ? std::abs((z - z1) / (r - r1)) : 1.0); + double d0OverR3 = d0_0 * rzmeanInv_[2] * (ndisks > 0 ? std::abs((z - z1) / (r - r1)) : 1.0); + + double d0OverR = d0OverR2; + if (take3) + d0OverR = d0OverR3; + + double c1 = d0_0 * halfRinv_0 * d0OverR1 + 2.0 * d0_0 * halfRinv_0 * r1 * halfRinv_0 + + sixth * pow(-r1 * halfRinv_0 - d0OverR1, 3); + double c2 = d0_0 * halfRinv_0 * d0OverR2 + 2.0 * d0_0 * halfRinv_0 * r2 * halfRinv_0 + + sixth * pow(-r2 * halfRinv_0 - d0OverR2, 3); + double c3 = d0_0 * halfRinv_0 * d0OverR3 + 2.0 * d0_0 * halfRinv_0 * r3 * halfRinv_0 + + sixth * pow(-r3 * halfRinv_0 - d0OverR3, 3); + + double phi1c = phi1 - c1; + double phi2c = phi2 - c2; + double phi3c = phi3 - c3; + + // second iteration in r-phi plane + double halfRinv = -phi1c * r1 * a + phi2c * r2 * b - phi3c * r3 * c; + phi0 = -phi1c * r1 * (r2 + r3) * a + phi2c * r2 * (r1 + r3) * b - phi3c * r3 * (r1 + r2) * c; + d0 = r1 * r2 * r3 * (-phi1c * a + phi2c * b - phi3c * c); + + t = ((z - z1) / (r - r1)) * + (1. + d0 * halfRinv - 0.5 * d0OverR1 * d0OverR - sixth * (r1 * r1 + r2 * r2 + r1 * r2) * halfRinv_0 * halfRinv_0); + z0 = z1 - t * r1 * (1.0 - d0_0 * halfRinv_0 - 0.5 * d0OverR1 * d0OverR1 + sixth * r1 * r1 * halfRinv_0 * halfRinv_0); + + rinv = 2.0 * halfRinv; + phi0 += -phimin_; + + phi0 = angle0to2pi::make0To2pi(phi0); + + for (unsigned int i = 0; i < toR_.size(); i++) { + approxproj(halfRinv, + phi0, + d0, + t, + z0, + halfRinv_0, + d0_0, // added _0 version for high term calculations + toR_.at(i), + phiproj[i], + phider[i], + zproj[i], + zder[i]); + } + + for (unsigned int i = 0; i < toZ_.size(); i++) { + approxprojdisk(halfRinv, + phi0, + d0, + t, + z0, + halfRinv_0, + d0_0, // added _0 version for high term calculations + toZ_.at(i), + phiprojdisk[i], + phiderdisk[i], + rprojdisk[i], + rderdisk[i]); + } + + if (std::abs(rinv) > settings_.rinvcut() || std::abs(z0) > settings_.disp_z0cut() || + std::abs(d0) > settings_.maxd0()) { + phi0 = 0.0; + return; + } + + if (settings_.debugTracklet()) + edm::LogVerbatim("Tracklet") << "TCD approx tracklet: " << rinv << " " << phi0 << " " << t << " " << z0 << " " << d0 + << endl; } diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletEngine.cc b/L1Trigger/TrackFindingTracklet/src/TrackletEngine.cc index dbc5bb62835f3..3119888246b09 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackletEngine.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackletEngine.cc @@ -8,6 +8,8 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" +#include + using namespace trklet; using namespace std; @@ -265,8 +267,18 @@ void TrackletEngine::setVMPhiBin() { } void TrackletEngine::writeTETable() { - ofstream outstubptinnercut; - outstubptinnercut.open(getName() + "_stubptinnercut.tab"); + if (not std::filesystem::exists(settings_.tablePath())) { + int fail = system((string("mkdir -p ") + settings_.tablePath()).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " + << settings_.tablePath(); + } + + const string fnameI = settings_.tablePath() + getName() + "_stubptinnercut.tab"; + ofstream outstubptinnercut(fnameI); + if (outstubptinnercut.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fnameI; + outstubptinnercut << "{" << endl; for (unsigned int i = 0; i < pttableinner_.size(); i++) { if (i != 0) @@ -276,8 +288,11 @@ void TrackletEngine::writeTETable() { outstubptinnercut << endl << "};" << endl; outstubptinnercut.close(); - ofstream outstubptoutercut; - outstubptoutercut.open(getName() + "_stubptoutercut.tab"); + const string fnameO = settings_.tablePath() + getName() + "_stubptoutercut.tab"; + ofstream outstubptoutercut(fnameO); + if (outstubptoutercut.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fnameI; + outstubptoutercut << "{" << endl; for (unsigned int i = 0; i < pttableouter_.size(); i++) { if (i != 0) diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletEngineDisplaced.cc b/L1Trigger/TrackFindingTracklet/src/TrackletEngineDisplaced.cc index 145e84cb06164..201b0b9b99723 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackletEngineDisplaced.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackletEngineDisplaced.cc @@ -56,8 +56,6 @@ TrackletEngineDisplaced::TrackletEngineDisplaced(string name, firstphibits_ = settings_.nfinephi(0, iSeed_); secondphibits_ = settings_.nfinephi(1, iSeed_); - - readTables(); } TrackletEngineDisplaced::~TrackletEngineDisplaced() { table_.clear(); } @@ -100,6 +98,9 @@ void TrackletEngineDisplaced::execute() { if (!settings_.useSeed(iSeed_)) return; + if (table_.empty() && (settings_.enableTripletTables() && !settings_.writeTripletTables())) + readTables(); + unsigned int countall = 0; unsigned int countpass = 0; unsigned int nInnerStubs = 0; @@ -170,23 +171,21 @@ void TrackletEngineDisplaced::execute() { index = (index << firstbend.nbits()) + firstbend.value(); index = (index << secondbend.nbits()) + secondbend.value(); - if (index >= table_.size()) - table_.resize(index + 1); - - if (table_.at(index).empty()) { + if ((settings_.enableTripletTables() && !settings_.writeTripletTables()) && + (index >= table_.size() || table_.at(index).empty())) { if (settings_.debugTracklet()) { edm::LogVerbatim("Tracklet") << "Stub pair rejected because of stub pt cut bends : " << benddecode(firstvmstub.bend().value(), firstvmstub.isPSmodule()) << " " << benddecode(secondvmstub.bend().value(), secondvmstub.isPSmodule()); } - if (!settings_.writeTripletTables()) - continue; + continue; } if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "Adding layer-layer pair in " << getName(); for (unsigned int isp = 0; isp < stubpairs_.size(); ++isp) { - if (settings_.writeTripletTables() || table_.at(index).count(stubpairs_.at(isp)->getName())) { + if ((!settings_.enableTripletTables() || settings_.writeTripletTables()) || + (index < table_.size() && table_.at(index).count(isp))) { if (settings_.writeMonitorData("Seeds")) { ofstream fout("seeds.txt", ofstream::app); fout << __FILE__ << ":" << __LINE__ << " " << name_ << "_" << iSector_ << " " << iSeed_ << endl; @@ -252,21 +251,21 @@ void TrackletEngineDisplaced::execute() { index = (index << firstbend.nbits()) + firstbend.value(); index = (index << secondbend.nbits()) + secondbend.value(); - if (index >= table_.size()) - table_.resize(index + 1); - - if (table_.at(index).empty()) { + if ((settings_.enableTripletTables() && !settings_.writeTripletTables()) && + (index >= table_.size() || table_.at(index).empty())) { if (settings_.debugTracklet()) { edm::LogVerbatim("Tracklet") << "Stub pair rejected because of stub pt cut bends : " << benddecode(firstvmstub.bend().value(), firstvmstub.isPSmodule()) << " " << benddecode(secondvmstub.bend().value(), secondvmstub.isPSmodule()); } + continue; } if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "Adding layer-layer pair in " << getName(); for (unsigned int isp = 0; isp < stubpairs_.size(); ++isp) { - if (settings_.writeTripletTables() || table_.at(index).count(stubpairs_.at(isp)->getName()) || true) { + if ((!settings_.enableTripletTables() || settings_.writeTripletTables()) || + (index < table_.size() && table_.at(index).count(isp))) { if (settings_.writeMonitorData("Seeds")) { ofstream fout("seeds.txt", ofstream::app); fout << __FILE__ << ":" << __LINE__ << " " << name_ << "_" << iSector_ << " " << iSeed_ << endl; @@ -332,22 +331,22 @@ void TrackletEngineDisplaced::execute() { index = (index << firstbend.nbits()) + firstbend.value(); index = (index << secondbend.nbits()) + secondbend.value(); - if (index >= table_.size()) - table_.resize(index + 1); - - if (table_.at(index).empty()) { + if ((settings_.enableTripletTables() && !settings_.writeTripletTables()) && + (index >= table_.size() || table_.at(index).empty())) { if (settings_.debugTracklet()) { edm::LogVerbatim("Tracklet") << "Stub pair rejected because of stub pt cut bends : " << benddecode(firstvmstub.bend().value(), firstvmstub.isPSmodule()) << " " << benddecode(secondvmstub.bend().value(), secondvmstub.isPSmodule()); } + continue; } if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "Adding disk-disk pair in " << getName(); for (unsigned int isp = 0; isp < stubpairs_.size(); ++isp) { - if (settings_.writeTripletTables() || table_.at(index).count(stubpairs_.at(isp)->getName()) || true) { + if ((!settings_.enableTripletTables() || settings_.writeTripletTables()) || + (index < table_.size() && table_.at(index).count(isp))) { if (settings_.writeMonitorData("Seeds")) { ofstream fout("seeds.txt", ofstream::app); fout << __FILE__ << ":" << __LINE__ << " " << name_ << "_" << iSector_ << " " << iSeed_ << endl; @@ -408,7 +407,14 @@ void TrackletEngineDisplaced::readTables() { table_.resize(table_.size() + 1); while (iss >> word) - table_[table_.size() - 1].insert(word); + table_[table_.size() - 1].insert(memNameToIndex(word)); } fin.close(); } + +const short TrackletEngineDisplaced::memNameToIndex(const string& name) { + for (unsigned int isp = 0; isp < stubpairs_.size(); ++isp) + if (stubpairs_.at(isp)->getName() == name) + return isp; + return -1; +} diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletEngineUnit.cc b/L1Trigger/TrackFindingTracklet/src/TrackletEngineUnit.cc new file mode 100644 index 0000000000000..10bc49cad08a9 --- /dev/null +++ b/L1Trigger/TrackFindingTracklet/src/TrackletEngineUnit.cc @@ -0,0 +1,110 @@ +#include "L1Trigger/TrackFindingTracklet/interface/TrackletEngineUnit.h" +#include "L1Trigger/TrackFindingTracklet/interface/VMStubsTEMemory.h" +#include "L1Trigger/TrackFindingTracklet/interface/Settings.h" + +using namespace std; +using namespace trklet; + +TrackletEngineUnit::TrackletEngineUnit(const Settings* const settings, + unsigned int nbitsfinephi, + unsigned int layerdisk2, + unsigned int iSeed, + unsigned int nbitsfinephidiff, + unsigned int iAllStub, + std::vector const& pttableinner, + std::vector const& pttableouter, + VMStubsTEMemory* outervmstubs) + : settings_(settings), candpairs_(5) { + idle_ = true; + nbitsfinephi_ = nbitsfinephi; + layerdisk2_ = layerdisk2; + iSeed_ = iSeed; + nbitsfinephidiff_ = nbitsfinephidiff; + iAllStub_ = iAllStub; + pttableinner_ = pttableinner; + pttableouter_ = pttableouter; + outervmstubs_ = outervmstubs; +} + +void TrackletEngineUnit::init(const TEData& tedata) { + tedata_ = tedata; + nreg_ = 0; + istub_ = 0; + idle_ = false; + assert(!tedata_.regions_.empty()); + std::tie(next_, ireg_, nstub_) = tedata_.regions_[0]; +} + +void TrackletEngineUnit::reset() { + idle_ = true; + candpairs_.reset(); +} + +void TrackletEngineUnit::step() { + if (candpairs_.full()) + return; + + int ibin = tedata_.start_ + next_; + + int nbins = (1 << NFINERZBITS); + + assert(istub_ < outervmstubs_->nVMStubsBinned(ireg_ * nbins + ibin)); + + const VMStubTE& outervmstub = outervmstubs_->getVMStubTEBinned(ireg_ * nbins + ibin, istub_); + int rzbin = (outervmstub.vmbits().value() & (nbins - 1)); + + FPGAWord iphiouterbin = outervmstub.finephi(); + + assert(iphiouterbin == outervmstub.finephi()); + + //New code to calculate lut value + int outerfinephi = iAllStub_ * (1 << (nbitsfinephi_ - settings_->nbitsallstubs(layerdisk2_))) + + ireg_ * (1 << settings_->nfinephi(1, iSeed_)) + iphiouterbin.value(); + int idphi = outerfinephi - tedata_.innerfinephi_; + bool inrange = (idphi < (1 << (nbitsfinephidiff_ - 1))) && (idphi >= -(1 << (nbitsfinephidiff_ - 1))); + if (idphi < 0) + idphi = idphi + (1 << nbitsfinephidiff_); + + unsigned int firstDiskSeed = 4; + if (iSeed_ >= firstDiskSeed) { //Also use r-position + int ibinMask = 3; //Get two least sign. bits + int ir = ((ibin & ibinMask) << 1) + (rzbin >> (NFINERZBITS - 1)); + int nrbits = 3; + idphi = (idphi << nrbits) + ir; + } + + if (next_ != 0) + rzbin += (1 << NFINERZBITS); + if ((rzbin < tedata_.rzbinfirst_) || (rzbin - tedata_.rzbinfirst_ > tedata_.rzdiffmax_)) { + if (settings_->debugTracklet()) { + edm::LogVerbatim("Tracklet") << " layer-disk stub pair rejected because rbin cut : " << rzbin << " " + << tedata_.rzbinfirst_ << " " << tedata_.rzdiffmax_; + } + } else { + FPGAWord outerbend = outervmstub.bend(); + + int ptinnerindex = (idphi << tedata_.innerbend_.nbits()) + tedata_.innerbend_.value(); + int ptouterindex = (idphi << outerbend.nbits()) + outerbend.value(); + + if (!(inrange && pttableinner_[ptinnerindex] && pttableouter_[ptouterindex])) { + if (settings_->debugTracklet()) { + edm::LogVerbatim("Tracklet") << " Stub pair rejected because of stub pt cut bends : " + << benddecode(tedata_.innerbend_.value(), tedata_.stub_->isPSmodule()) << " " + << benddecode(outerbend.value(), outervmstub.isPSmodule()); + } + } else { + candpairs_.store(pair(tedata_.stub_, outervmstub.stub())); + } + } + istub_++; + if (istub_ >= nstub_) { + istub_ = 0; + nreg_++; + if (nreg_ >= tedata_.regions_.size()) { + nreg_ = 0; + idle_ = true; + } else { + std::tie(next_, ireg_, nstub_) = tedata_.regions_[nreg_]; + } + } +} diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletEventProcessor.cc b/L1Trigger/TrackFindingTracklet/src/TrackletEventProcessor.cc index 8cbd7db3408ca..2e4fc31bd3d7a 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackletEventProcessor.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackletEventProcessor.cc @@ -10,6 +10,7 @@ #include "DataFormats/Math/interface/deltaPhi.h" #include +#include using namespace trklet; using namespace std; @@ -59,17 +60,6 @@ void TrackletEventProcessor::init(Settings const& theSettings) { << "========================================================="; } - //option to write out tables for HLS code, not used in production - /* - const Settings& settings = *settings_; - Globals* globals = globals_; - - if (settings_->writeVerilog() || settings_->writeHLS()) { -#include "../test/WriteInvTables.icc" -#include "../test/WriteDesign.icc" - } - */ - if (settings_->bookHistos()) { histbase_ = new HistBase; histbase_->open(); @@ -245,22 +235,34 @@ void TrackletEventProcessor::event(SLHCEvent& ev) { dtcbase = dtc.substr(0, 4) + dtc.substr(6, dtc.size() - 6); } - string fname = "../data/MemPrints/InputStubs/Link_"; + const string dirIS = settings_->memPath() + "InputStubs/"; + string fname = dirIS + "Link_"; fname += dtcbase; if (dtcstubs.find(dtcbase + "A") != dtcstubs.end()) continue; fname += "_A.dat"; + + if (not std::filesystem::exists(dirIS)) { + int fail = system((string("mkdir -p ") + dirIS).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " << dirIS; + } + ofstream* out = new ofstream; - out->open(fname.c_str()); + out->open(fname); + if (out->fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; dtcstubs[dtcbase + "A"] = out; - fname = "../data/MemPrints/InputStubs/Link_"; + fname = dirIS + "Link_"; fname += dtcbase; if (dtcstubs.find(dtcbase + "B") != dtcstubs.end()) continue; fname += "_B.dat"; out = new ofstream; - out->open(fname.c_str()); + out->open(fname); + if (out->fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; dtcstubs[dtcbase + "B"] = out; } @@ -297,7 +299,7 @@ void TrackletEventProcessor::event(SLHCEvent& ev) { assert(layerdiskcode < 4); FPGAWord ldcode; ldcode.set(layerdiskcode, 2); - string dataword = "1|" + ldcode.str() + "|" + fpgastub.str(); + string dataword = fpgastub.str() + "|" + ldcode.str() + "|1"; if (topbit == 0) { (*dtcstubs[dtcbase + "A"]) << dataword << " " << trklet::hexFormat(dataword) << endl; } else { @@ -307,13 +309,6 @@ void TrackletEventProcessor::event(SLHCEvent& ev) { } } - if (settings_->writeMem()) { - for (unsigned int k = 0; k < N_SECTOR; k++) { - if (k == settings_->writememsect()) - sectors_[k]->writeInputStubs(first); - } - } - addStubTimer_.stop(); // ---------------------------------------------------------------------------------------- @@ -357,9 +352,11 @@ void TrackletEventProcessor::event(SLHCEvent& ev) { TRETimer_.stop(); // tracklet processor (alternative implementation to TE+TC) + TPTimer_.start(); for (unsigned int k = 0; k < N_SECTOR; k++) { sectors_[k]->executeTP(); } + TPTimer_.stop(); for (unsigned int k = 0; k < N_SECTOR; k++) { if (settings_->writeMem() && k == settings_->writememsect()) { @@ -507,34 +504,47 @@ void TrackletEventProcessor::printSummary() { globals_->histograms()->close(); } - edm::LogVerbatim("Tracklet") - << "Process Times called Average time (ms) Total time (s) \n" - << "Cleaning " << setw(10) << cleanTimer_.ntimes() << setw(20) << setprecision(3) - << cleanTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << cleanTimer_.tottime() << "\n" - << "Add Stubs " << setw(10) << addStubTimer_.ntimes() << setw(20) << setprecision(3) - << addStubTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << addStubTimer_.tottime() << "\n" - << "VMRouter " << setw(10) << VMRouterTimer_.ntimes() << setw(20) << setprecision(3) - << VMRouterTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << VMRouterTimer_.tottime() << "\n" - << "TrackletEngine " << setw(10) << TETimer_.ntimes() << setw(20) << setprecision(3) - << TETimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << TETimer_.tottime() << "\n" - << "TrackletEngineDisplaced" << setw(10) << TEDTimer_.ntimes() << setw(20) << setprecision(3) - << TEDTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << TEDTimer_.tottime() << "\n" - << "TripletEngine " << setw(10) << TRETimer_.ntimes() << setw(20) << setprecision(3) - << TRETimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << TRETimer_.tottime() << "\n" - << "TrackletCalculator " << setw(10) << TCTimer_.ntimes() << setw(20) << setprecision(3) - << TCTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << TCTimer_.tottime() << "\n" - << "TrackletCalculatorDisplaced" << setw(10) << TCDTimer_.ntimes() << setw(20) << setprecision(3) - << TCDTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << TCDTimer_.tottime() << "\n" - << "ProjectionRouter " << setw(10) << PRTimer_.ntimes() << setw(20) << setprecision(3) - << PRTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << PRTimer_.tottime() << "\n" - << "MatchEngine " << setw(10) << METimer_.ntimes() << setw(20) << setprecision(3) - << METimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << METimer_.tottime() << "\n" - << "MatchCalculator " << setw(10) << MCTimer_.ntimes() << setw(20) << setprecision(3) - << MCTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << MCTimer_.tottime() << "\n" - << "MatchProcessor " << setw(10) << MPTimer_.ntimes() << setw(20) << setprecision(3) - << MPTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << MPTimer_.tottime() << "\n" - << "FitTrack " << setw(10) << FTTimer_.ntimes() << setw(20) << setprecision(3) - << FTTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << FTTimer_.tottime() << "\n" - << "PurgeDuplicate " << setw(10) << PDTimer_.ntimes() << setw(20) << setprecision(3) - << PDTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << PDTimer_.tottime(); + edm::LogVerbatim("Tracklet") << "Process Times called Average time (ms) Total time (s)" + << "\n" + << "Cleaning " << setw(10) << cleanTimer_.ntimes() << setw(20) + << setprecision(3) << cleanTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) + << cleanTimer_.tottime() << "\n" + << "Add Stubs " << setw(10) << addStubTimer_.ntimes() << setw(20) + << setprecision(3) << addStubTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) + << addStubTimer_.tottime() << "\n" + << "VMRouter " << setw(10) << VMRouterTimer_.ntimes() << setw(20) + << setprecision(3) << VMRouterTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) + << VMRouterTimer_.tottime(); + if (settings_->combined()) { + edm::LogVerbatim("Tracklet") << "TrackletProcessor " << setw(10) << TPTimer_.ntimes() << setw(20) + << setprecision(3) << TPTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) + << TPTimer_.tottime() << "\n" + << "MatchProcessor " << setw(10) << MPTimer_.ntimes() << setw(20) + << setprecision(3) << MPTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) + << MPTimer_.tottime(); + } else { + edm::LogVerbatim("Tracklet") + << "TrackletEngine " << setw(10) << TETimer_.ntimes() << setw(20) << setprecision(3) + << TETimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << TETimer_.tottime() << "\n" + << "TrackletEngineDisplaced" << setw(10) << TEDTimer_.ntimes() << setw(20) << setprecision(3) + << TEDTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << TEDTimer_.tottime() << "\n" + << "TripletEngine " << setw(10) << TRETimer_.ntimes() << setw(20) << setprecision(3) + << TRETimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << TRETimer_.tottime() << "\n" + << "TrackletCalculator " << setw(10) << TCTimer_.ntimes() << setw(20) << setprecision(3) + << TCTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << TCTimer_.tottime() << "\n" + << "TrackletCalculatorDisplaced" << setw(10) << TCDTimer_.ntimes() << setw(20) << setprecision(3) + << TCDTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << TCDTimer_.tottime() << "\n" + << "ProjectionRouter " << setw(10) << PRTimer_.ntimes() << setw(20) << setprecision(3) + << PRTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << PRTimer_.tottime() << "\n" + << "MatchEngine " << setw(10) << METimer_.ntimes() << setw(20) << setprecision(3) + << METimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << METimer_.tottime() << "\n" + << "MatchCalculator " << setw(10) << MCTimer_.ntimes() << setw(20) << setprecision(3) + << MCTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) << MCTimer_.tottime(); + } + edm::LogVerbatim("Tracklet") << "FitTrack " << setw(10) << FTTimer_.ntimes() << setw(20) + << setprecision(3) << FTTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) + << FTTimer_.tottime() << "\n" + << "PurgeDuplicate " << setw(10) << PDTimer_.ntimes() << setw(20) + << setprecision(3) << PDTimer_.avgtime() * 1000.0 << setw(20) << setprecision(3) + << PDTimer_.tottime(); } diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletParametersMemory.cc b/L1Trigger/TrackFindingTracklet/src/TrackletParametersMemory.cc index ff2e3eea03c40..dbba44f2b361a 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackletParametersMemory.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackletParametersMemory.cc @@ -3,6 +3,7 @@ #include "L1Trigger/TrackFindingTracklet/interface/Globals.h" #include "L1Trigger/TrackFindingTracklet/interface/Tracklet.h" #include +#include using namespace std; using namespace trklet; @@ -34,17 +35,28 @@ void TrackletParametersMemory::writeMatches(Globals* globals, int& matchesL1, in } void TrackletParametersMemory::writeTPAR(bool first) { + const string dirTP = settings_.memPath() + "TrackletParameters/"; + std::ostringstream oss; - oss << "../data/MemPrints/TrackletParameters/TrackletParameters_" << getName() << "_" << std::setfill('0') - << std::setw(2) << (iSector_ + 1) << ".dat"; + oss << dirTP << "TrackletParameters_" << getName() << "_" << std::setfill('0') << std::setw(2) << (iSector_ + 1) + << ".dat"; auto const& fname = oss.str(); if (first) { bx_ = 0; event_ = 1; - out_.open(fname.c_str()); + + if (not std::filesystem::exists(dirTP)) { + int fail = system((string("mkdir -p ") + dirTP).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " << dirTP; + } + out_.open(fname); + if (out_.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; + } else - out_.open(fname.c_str(), std::ofstream::app); + out_.open(fname, std::ofstream::app); out_ << "BX = " << (bitset<3>)bx_ << " Event : " << event_ << endl; diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletProcessor.cc b/L1Trigger/TrackFindingTracklet/src/TrackletProcessor.cc index 17525fe60f085..de95f8c19bedf 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackletProcessor.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackletProcessor.cc @@ -1,6 +1,8 @@ + #include "L1Trigger/TrackFindingTracklet/interface/TrackletProcessor.h" #include "L1Trigger/TrackFindingTracklet/interface/Settings.h" #include "L1Trigger/TrackFindingTracklet/interface/Globals.h" +#include "L1Trigger/TrackFindingTracklet/interface/AllStubsMemory.h" #include "L1Trigger/TrackFindingTracklet/interface/Util.h" #include "L1Trigger/TrackFindingTracklet/interface/IMATH_TrackletCalculator.h" @@ -8,22 +10,15 @@ #include "FWCore/Utilities/interface/Exception.h" #include "DataFormats/Math/interface/deltaPhi.h" +#include +#include + using namespace std; using namespace trklet; TrackletProcessor::TrackletProcessor(string name, Settings const& settings, Globals* globals, unsigned int iSector) - : TrackletCalculatorBase(name, settings, globals, iSector) { - double dphi = 2 * M_PI / N_SECTOR; - double dphiHG = 0.5 * settings_.dphisectorHG() - M_PI / N_SECTOR; - phimin_ = iSector_ * dphi - dphiHG; - phimax_ = phimin_ + dphi + 2 * dphiHG; - phimin_ -= M_PI / N_SECTOR; - phimax_ -= M_PI / N_SECTOR; - phimin_ = reco::reduceRange(phimin_); - phimax_ = reco::reduceRange(phimax_); - if (phimin_ > phimax_) - phimin_ -= 2 * M_PI; - phioffset_ = phimin_; + : TrackletCalculatorBase(name, settings, globals, iSector), vmrtable_(settings) { + iAllStub_ = -1; for (unsigned int ilayer = 0; ilayer < N_LAYER; ilayer++) { vector tmp(settings_.nallstubs(ilayer), nullptr); @@ -35,91 +30,28 @@ TrackletProcessor::TrackletProcessor(string name, Settings const& settings, Glob trackletprojdisks_.push_back(tmp); } + outervmstubs_ = nullptr; + initLayerDisksandISeed(layerdisk1_, layerdisk2_, iSeed_); - layer_ = 0; - disk_ = 0; + nbitszfinebintable_ = settings_.vmrlutzbits(layerdisk1_); + nbitsrfinebintable_ = settings_.vmrlutrbits(layerdisk1_); - if (name_[3] == 'L') { - layer_ = name_[4] - '0'; - if (name_[5] == 'D') - disk_ = name_[6] - '0'; - } - if (name_[3] == 'D') - disk_ = name_[4] - '0'; + vmrtable_.init(layerdisk1_, getName()); - extra_ = (layer_ == 2 && disk_ == 0); + nbitsrzbin_ = NFINERZBITS; + if (iSeed_ == 4 || iSeed_ == 5) + nbitsrzbin_ = 2; + + innerphibits_ = settings_.nfinephi(0, iSeed_); + outerphibits_ = settings_.nfinephi(1, iSeed_); // set TC index - if (name_[7] == 'A') - iTC_ = 0; - else if (name_[7] == 'B') - iTC_ = 1; - else if (name_[7] == 'C') - iTC_ = 2; - else if (name_[7] == 'D') - iTC_ = 3; - else if (name_[7] == 'E') - iTC_ = 4; - else if (name_[7] == 'F') - iTC_ = 5; - else if (name_[7] == 'G') - iTC_ = 6; - else if (name_[7] == 'H') - iTC_ = 7; - else if (name_[7] == 'I') - iTC_ = 8; - else if (name_[7] == 'J') - iTC_ = 9; - else if (name_[7] == 'K') - iTC_ = 10; - else if (name_[7] == 'L') - iTC_ = 11; - else if (name_[7] == 'M') - iTC_ = 12; - else if (name_[7] == 'N') - iTC_ = 13; - else if (name_[7] == 'O') - iTC_ = 14; - - assert(iTC_ != -1); - - iSeed_ = 99; - if (name_.substr(3, 4) == "L1L2") - iSeed_ = 0; - else if (name_.substr(3, 4) == "L3L4") - iSeed_ = 2; - else if (name_.substr(3, 4) == "L5L6") - iSeed_ = 3; - else if (name_.substr(3, 4) == "D1D2") - iSeed_ = 4; - else if (name_.substr(3, 4) == "D3D4") - iSeed_ = 5; - else if (name_.substr(3, 4) == "D1L1") - iSeed_ = 6; - else if (name_.substr(3, 4) == "D1L2") - iSeed_ = 7; - else if (name_.substr(3, 4) == "L1D1") - iSeed_ = 6; - else if (name_.substr(3, 4) == "L2D1") - iSeed_ = 7; - else if (name_.substr(3, 4) == "L2L3") - iSeed_ = 1; - - assert(iSeed_ != 99); + iTC_ = name_[7] - 'A'; + assert(iTC_ >= 0 && iTC_ < 14); TCIndex_ = (iSeed_ << 4) + iTC_; assert(TCIndex_ >= 0 && TCIndex_ <= (int)settings_.ntrackletmax()); - - assert((layer_ != 0) || (disk_ != 0)); - - if (settings_.usephicritapprox()) { - double phicritFactor = - 0.5 * settings_.rcrit() * globals_->ITC_L1L2()->rinv_final.K() / globals_->ITC_L1L2()->phi0_final.K(); - if (std::abs(phicritFactor - 2.) > 0.25) - edm::LogPrint("Tracklet") - << "TrackletProcessor::TrackletProcessor phicrit approximation may be invalid! Please check."; - } } void TrackletProcessor::addOutputProjection(TrackletProjectionsMemory*& outputProj, MemoryBase* memory) { @@ -175,24 +107,57 @@ void TrackletProcessor::addInput(MemoryBase* memory, string input) { << input; } - if (input == "innervmstubin") { - auto* tmp = dynamic_cast(memory); - assert(tmp != nullptr); - innervmstubs_.push_back(tmp); - setVMPhiBin(); - return; - } if (input == "outervmstubin") { auto* tmp = dynamic_cast(memory); assert(tmp != nullptr); - outervmstubs_.push_back(tmp); - setVMPhiBin(); + outervmstubs_ = tmp; + iAllStub_ = tmp->getName()[11] - 'A'; + if (iSeed_ == 1) + iAllStub_ = tmp->getName()[11] - 'I'; + if (iSeed_ == 6 || iSeed_ == 7) { + if (tmp->getName()[11] == 'X') + iAllStub_ = 0; + if (tmp->getName()[11] == 'Y') + iAllStub_ = 1; + if (tmp->getName()[11] == 'Z') + iAllStub_ = 2; + if (tmp->getName()[11] == 'W') + iAllStub_ = 3; + } + buildLUT(); //need iAllStub_ set before building the table //FIXME should be in initiall + + TrackletEngineUnit teunit(&settings_, + nbitsfinephi_, + layerdisk2_, + iSeed_, + nbitsfinephidiff_, + iAllStub_, + pttableinnernew_, + pttableouternew_, + outervmstubs_); + teunits_.resize(6, teunit); + return; } + if (input == "innerallstubin") { auto* tmp = dynamic_cast(memory); assert(tmp != nullptr); - innerallstubs_.push_back(tmp); + if (innerallstubs_.size() == 2) { //FIXME this should be done with better logic with reading the input stubs + innerallstubs_.insert(innerallstubs_.begin(), tmp); + } else { + innerallstubs_.push_back(tmp); + } + + //FIXME should be done once after all inputs are added + tedatabuffers_.clear(); + CircularBuffer tedatabuffertmp(5); + tedatabuffertmp.reset(); + + tedatabuffers_.emplace_back(tedatabuffertmp, 0, 0, 0, (innerallstubs_.size() + 1) / 2); + tedatabuffers_.emplace_back( + tedatabuffertmp, 0, (innerallstubs_.size() + 1) / 2, (innerallstubs_.size() + 1) / 2, innerallstubs_.size()); + return; } if (input == "outerallstubin") { @@ -205,743 +170,419 @@ void TrackletProcessor::addInput(MemoryBase* memory, string input) { } void TrackletProcessor::execute() { - unsigned int countall = 0; - unsigned int countsel = 0; - - unsigned int countteall = 0; - unsigned int counttepass = 0; - - StubPairsMemory stubpairs("tmp", settings_, iSector_); //dummy arguments for now - - bool print = false; - - assert(innervmstubs_.size() == outervmstubs_.size()); - if (!settings_.useSeed(iSeed_)) return; - for (unsigned int ivmmem = 0; ivmmem < innervmstubs_.size(); ivmmem++) { - unsigned int innerphibin = innervmstubs_[ivmmem]->phibin(); - unsigned int outerphibin = outervmstubs_[ivmmem]->phibin(); - - unsigned phiindex = 32 * innerphibin + outerphibin; + //Consistency checks + assert(iAllStub_ >= 0); + assert(iAllStub_ < (int)settings_.nallstubs(layerdisk2_)); + assert(outervmstubs_ != nullptr); - //overlap seeding - if (disk_ == 1 && (layer_ == 1 || layer_ == 2)) { - for (unsigned int i = 0; i < innervmstubs_[ivmmem]->nVMStubs(); i++) { - const VMStubTE& innervmstub = innervmstubs_[ivmmem]->getVMStubTE(i); + //used to collect performance data + unsigned int countall = 0; + unsigned int countsel = 0; - int lookupbits = innervmstub.vmbits().value(); + unsigned int countteall = 0; + unsigned int stubpairs = 0; - int rdiffmax = (lookupbits >> 7); - int newbin = (lookupbits & 127); - int bin = newbin / 8; + unsigned int ntedata = 0; - int rbinfirst = newbin & 7; + unsigned int ninnerstubs = 0; - int start = (bin >> 1); - int last = start + (bin & 1); + //Actual implemenation starts here - for (int ibin = start; ibin <= last; ibin++) { - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") << getName() << " looking for matching stub in bin " << ibin << " with " - << outervmstubs_[ivmmem]->nVMStubsBinned(ibin) << " stubs"; - } - for (unsigned int j = 0; j < outervmstubs_[ivmmem]->nVMStubsBinned(ibin); j++) { - countall++; - countteall++; - - const VMStubTE& outervmstub = outervmstubs_[ivmmem]->getVMStubTEBinned(ibin, j); - int rbin = (outervmstub.vmbits().value() & 7); - if (start != ibin) - rbin += 8; - if ((rbin < rbinfirst) || (rbin - rbinfirst > rdiffmax)) { - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") - << getName() << " layer-disk stub pair rejected because rbin cut : " << rbin << " " << rbinfirst - << " " << rdiffmax; - } - continue; - } - - int ir = ((start & 3) << 3) + rbinfirst; + //Reset the tebuffers + for (auto& tebuffer : tedatabuffers_) { + std::get<0>(tebuffer).reset(); + std::get<1>(tebuffer) = 0; + std::get<2>(tebuffer) = std::get<3>(tebuffer); + } - assert(innerphibits_ != -1); - assert(outerphibits_ != -1); + //Reset the teunits + for (auto& teunit : teunits_) { + teunit.reset(); + } - FPGAWord iphiinnerbin = innervmstub.finephi(); - FPGAWord iphiouterbin = outervmstub.finephi(); + for (unsigned int istep = 0; istep < settings_.maxStep("TP"); istep++) { + for (auto& tebuffer : tedatabuffers_) { + CircularBuffer& tedatabuffer = std::get<0>(tebuffer); + unsigned int& istub = std::get<1>(tebuffer); + unsigned int& imem = std::get<2>(tebuffer); + unsigned int imemend = std::get<4>(tebuffer); - assert(iphiouterbin == outervmstub.finephi()); + if ((!tedatabuffer.full()) && imem < imemend && istub < innerallstubs_[imem]->nStubs()) { + ninnerstubs++; - unsigned int index = (((iphiinnerbin.value() << outerphibits_) + iphiouterbin.value()) << 5) + ir; + const Stub* stub = innerallstubs_[imem]->getStub(istub); - assert(index < phitable_[phiindex].size()); + bool negdisk = (stub->disk().value() < 0); //FIXME stub needs to contain bit for +/- z disk - if (!phitable_[phiindex][index]) { - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") << "Stub pair rejected because of tracklet pt cut"; - } - continue; - } + FPGAWord phicorr = stub->phicorr(); + int innerfinephi = phicorr.bits(phicorr.nbits() - nbitsfinephi_, nbitsfinephi_); + FPGAWord innerbend = stub->bend(); - FPGAWord innerbend = innervmstub.bend(); - FPGAWord outerbend = outervmstub.bend(); - - int ptinnerindex = (index << innerbend.nbits()) + innerbend.value(); - int ptouterindex = (index << outerbend.nbits()) + outerbend.value(); - - if (!(pttableinner_[phiindex][ptinnerindex] && pttableouter_[phiindex][ptouterindex])) { - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") << "Stub pair rejected because of stub pt cut bends : " - << benddecode(innervmstub.bend().value(), innervmstub.isPSmodule()) << " " - << benddecode(outervmstub.bend().value(), outervmstub.isPSmodule()); - } - continue; - } - - if (settings_.debugTracklet()) - edm::LogVerbatim("Tracklet") << "Adding layer-disk pair in " << getName(); - if (settings_.writeMonitorData("Seeds")) { - ofstream fout("seeds.txt", ofstream::app); - fout << __FILE__ << ":" << __LINE__ << " " << name_ << "_" << iSector_ << " " << iSeed_ << endl; - fout.close(); - } - stubpairs.addStubPair( - innervmstub, outervmstub, 0, innervmstubs_[ivmmem]->getName() + " " + outervmstubs_[ivmmem]->getName()); - counttepass++; - countall++; + //Take the top nbitszfinebintable_ bits of the z coordinate + int indexz = + (((1 << (stub->z().nbits() - 1)) + stub->z().value()) >> (stub->z().nbits() - nbitszfinebintable_)); + int indexr = -1; + if (layerdisk1_ > (N_LAYER - 1)) { + if (negdisk) { + indexz = (1 << nbitszfinebintable_) - indexz; + } + indexr = stub->r().value(); + if (stub->isPSmodule()) { + indexr = stub->r().value() >> (stub->r().nbits() - nbitsrfinebintable_); } + } else { + //Take the top nbitsfinebintable_ bits of the z coordinate + indexr = (((1 << (stub->r().nbits() - 1)) + stub->r().value()) >> (stub->r().nbits() - nbitsrfinebintable_)); } - } - } else { - for (unsigned int i = 0; i < innervmstubs_[ivmmem]->nVMStubs(); i++) { - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") << "In " << getName() << " have inner stub"; + int lutval = -1; + if (iSeed_ < 6) { //FIXME should only be one table... + lutval = vmrtable_.lookupinner(indexz, indexr); + } else { + lutval = vmrtable_.lookupinneroverlap(indexz, indexr); } - if ((layer_ == 1 && disk_ == 0) || (layer_ == 2 && disk_ == 0) || (layer_ == 3 && disk_ == 0) || - (layer_ == 5 && disk_ == 0)) { - const VMStubTE& innervmstub = innervmstubs_[ivmmem]->getVMStubTE(i); + if (lutval != -1) { + unsigned int lutwidth = settings_.lutwidthtab(0, iSeed_); + FPGAWord lookupbits(lutval, lutwidth, true, __LINE__, __FILE__); - int lookupbits = (int)innervmstub.vmbits().value(); - int zdiffmax = (lookupbits >> 7); - int newbin = (lookupbits & 127); - int bin = newbin / 8; + int rzfinebinfirst = lookupbits.bits(0, 3); //finephi + int next = lookupbits.bits(3, 1); //next r/z bin + int start = lookupbits.bits(4, nbitsrzbin_); + int rzdiffmax = lookupbits.bits(lookupbits.nbits() - 3, 3); - int zbinfirst = newbin & 7; - - int start = (bin >> 1); - int last = start + (bin & 1); - - if (print) { - edm::LogVerbatim("Tracklet") << "start last : " << start << " " << last; - } - - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") << "Will look in zbins " << start << " to " << last; + if ((iSeed_ == 4 || iSeed_ == 5) && negdisk) { //TODO - need to store negative disk + start += 4; } - for (int ibin = start; ibin <= last; ibin++) { - for (unsigned int j = 0; j < outervmstubs_[ivmmem]->nVMStubsBinned(ibin); j++) { - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") << "In " << getName() << " have outer stub"; - } + int last = start + next; - countteall++; - countall++; + int nbins = 8; - const VMStubTE& outervmstub = outervmstubs_[ivmmem]->getVMStubTEBinned(ibin, j); - - int zbin = (outervmstub.vmbits().value() & 7); - - if (start != ibin) - zbin += 8; - - if (zbin < zbinfirst || zbin - zbinfirst > zdiffmax) { - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") << "Stubpair rejected because of wrong fine z"; - } - continue; - } - - if (print) { - edm::LogVerbatim("Tracklet") << "ibin j " << ibin << " " << j; - } - - assert(innerphibits_ != -1); - assert(outerphibits_ != -1); - - FPGAWord iphiinnerbin = innervmstub.finephi(); - FPGAWord iphiouterbin = outervmstub.finephi(); - - int index = (iphiinnerbin.value() << outerphibits_) + iphiouterbin.value(); + unsigned int useregindex = (innerfinephi << innerbend.nbits()) + innerbend.value(); + if (iSeed_ >= 4) { + //FIXME If the lookupbits were rationally organized this would be much simpler + int ir = ((start & 3) << 1) + (rzfinebinfirst >> 2); + useregindex = (useregindex << 3) + ir; + } - assert(index < (int)phitable_[phiindex].size()); + assert(useregindex < useregion_.size()); + vector usereg = useregion_[useregindex]; - if (!phitable_[phiindex][index]) { - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") << "Stub pair rejected because of tracklet pt cut"; - } - continue; - } + TEData tedata; + tedata.stub_ = stub; + tedata.rzbinfirst_ = rzfinebinfirst; + tedata.start_ = start; + tedata.innerfinephi_ = innerfinephi; + tedata.rzdiffmax_ = rzdiffmax; + tedata.innerbend_ = innerbend; - FPGAWord innerbend = innervmstub.bend(); - FPGAWord outerbend = outervmstub.bend(); - - int ptinnerindex = (index << innerbend.nbits()) + innerbend.value(); - int ptouterindex = (index << outerbend.nbits()) + outerbend.value(); + for (unsigned int ireg = 0; ireg < settings_.nvmte(1, iSeed_); ireg++) { + assert(ireg < usereg.size()); + if (!usereg[ireg]) + continue; - if (!(pttableinner_[phiindex][ptinnerindex] && pttableouter_[phiindex][ptouterindex])) { - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") - << "Stub pair rejected because of stub pt cut bends : " - << benddecode(innervmstub.bend().value(), innervmstub.isPSmodule()) << " " - << benddecode(outervmstub.bend().value(), outervmstub.isPSmodule()); - } - continue; + for (int ibin = start; ibin <= last; ibin++) { + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << getName() << " looking for matching stub in bin " << ibin << " with " + << outervmstubs_->nVMStubsBinned(ireg * nbins + ibin) << " stubs"; } - - if (settings_.debugTracklet()) - edm::LogVerbatim("Tracklet") << "Adding layer-layer pair in " << getName(); - if (settings_.writeMonitorData("Seeds")) { - ofstream fout("seeds.txt", ofstream::app); - fout << __FILE__ << ":" << __LINE__ << " " << name_ << "_" << iSector_ << " " << iSeed_ << endl; - fout.close(); + assert(ireg * nbins + ibin < outervmstubs_->nBin()); + int nstubs = outervmstubs_->nVMStubsBinned(ireg * nbins + ibin); + if (nstubs > 0) { + tedata.regions_.emplace_back(tuple(ibin - start, ireg, nstubs)); + countteall += nstubs; } - stubpairs.addStubPair(innervmstub, - outervmstub, - 0, - innervmstubs_[ivmmem]->getName() + " " + outervmstubs_[ivmmem]->getName()); - counttepass++; - countall++; } } - } else if ((disk_ == 1 && layer_ == 0) || (disk_ == 3 && layer_ == 0)) { - if (settings_.debugTracklet()) - edm::LogVerbatim("Tracklet") << getName() << "[" << iSector_ << "] Disk-disk pair"; - - const VMStubTE& innervmstub = innervmstubs_[ivmmem]->getVMStubTE(i); - - int lookupbits = (int)innervmstub.vmbits().value(); - bool negdisk = innervmstub.stub()->disk().value() < 0; //TODO - need to store negative disk - int rdiffmax = (lookupbits >> 6); - int newbin = (lookupbits & 63); - int bin = newbin / 8; - - int rbinfirst = newbin & 7; - - int start = (bin >> 1); - if (negdisk) - start += 4; - int last = start + (bin & 1); - for (int ibin = start; ibin <= last; ibin++) { - if (settings_.debugTracklet()) - edm::LogVerbatim("Tracklet") << getName() << " looking for matching stub in bin " << ibin << " with " - << outervmstubs_[ivmmem]->nVMStubsBinned(ibin) << " stubs"; - for (unsigned int j = 0; j < outervmstubs_[ivmmem]->nVMStubsBinned(ibin); j++) { - countall++; - countteall++; - - const VMStubTE& outervmstub = outervmstubs_[ivmmem]->getVMStubTEBinned(ibin, j); - - int vmbits = (int)outervmstub.vmbits().value(); - int rbin = (vmbits & 7); - if (start != ibin) - rbin += 8; - if (rbin < rbinfirst) - continue; - if (rbin - rbinfirst > rdiffmax) - continue; - - int rzbin = outervmstub.vmbits().bits(0, 3); - - FPGAWord iphiinnerbin = innervmstub.finephi(); - FPGAWord iphiouterbin = outervmstub.finephi(); - - unsigned int index = (iphiinnerbin.value() << outerphibits_) + iphiouterbin.value(); - - constexpr unsigned int n_barrelseed = 3; - if (iSeed_ > n_barrelseed) { //Also use r-position for disk/overlap seeds - int ir = ((ibin & n_barrelseed) << 1) + (rzbin >> 2); - index = (index << n_barrelseed) + ir; - } - - FPGAWord innerbend = innervmstub.bend(); - FPGAWord outerbend = outervmstub.bend(); - - unsigned int ptinnerindex = (index << innerbend.nbits()) + innerbend.value(); - unsigned int ptouterindex = (index << outerbend.nbits()) + outerbend.value(); - - assert(ptinnerindex < pttableinner_[phiindex].size()); - assert(ptouterindex < pttableouter_[phiindex].size()); - - if (!(pttableinner_[phiindex][ptinnerindex] && pttableouter_[phiindex][ptouterindex])) { - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") - << "Stub pair rejected because of stub pt cut bends : " - << benddecode(innervmstub.bend().value(), innervmstub.isPSmodule()) << " " - << benddecode(outervmstub.bend().value(), outervmstub.isPSmodule()) - << " pass : " << pttableinner_[phiindex][ptinnerindex] << " " - << pttableouter_[phiindex][ptouterindex]; - } - } - - if (settings_.debugTracklet()) - edm::LogVerbatim("Tracklet") << "Adding disk-disk pair in " << getName(); - - if (settings_.writeMonitorData("Seeds")) { - ofstream fout("seeds.txt", ofstream::app); - fout << __FILE__ << ":" << __LINE__ << " " << name_ << "_" << iSector_ << " " << iSeed_ << endl; - fout.close(); - } - stubpairs.addStubPair(innervmstub, - outervmstub, - 0, - innervmstubs_[ivmmem]->getName() + " " + outervmstubs_[ivmmem]->getName()); - countall++; - counttepass++; - } + if (!tedata.regions_.empty()) { + ntedata++; + //cout << getName() << " adding TE data" << endl; + tedatabuffer.store(tedata); } } + istub++; + if (istub >= innerallstubs_[imem]->nStubs()) { + istub = 0; + imem++; + } } } - } - if (settings_.writeMonitorData("TE")) { - globals_->ofstream("trackletprocessor.txt") << getName() << " " << countteall << " " << counttepass << endl; - } + bool tedatabuffersdone = true; + for (auto& tebuffer : tedatabuffers_) { + CircularBuffer& tedatabuffer = std::get<0>(tebuffer); + tedatabuffersdone &= tedatabuffer.empty(); //buffer empty + tedatabuffersdone &= (std::get<2>(tebuffer) == std::get<4>(tebuffer)); //buffer processed all stubs + if (!tedatabuffer.empty()) { + for (auto& teunit : teunits_) { + if (teunit.empty() && teunit.idle()) { + teunit.init(tedatabuffer.read()); + break; + } + } + } + } - for (unsigned int i = 0; i < stubpairs.nStubPairs(); i++) { - if (trackletpars_->nTracklets() >= settings_.ntrackletmax()) { - edm::LogVerbatim("Tracklet") << "Will break on too many tracklets in " << getName(); - break; + bool teunitsdone = true; + TrackletEngineUnit* teunitptr = nullptr; + for (auto& teunit : teunits_) { + if (!teunit.idle()) { + teunit.step(); + teunitsdone = false; + } + if (!teunit.empty()) { + teunitptr = &teunit; + teunitsdone = false; + } } - countall++; - const Stub* innerFPGAStub = stubpairs.getVMStub1(i).stub(); - const L1TStub* innerStub = innerFPGAStub->l1tstub(); - const Stub* outerFPGAStub = stubpairs.getVMStub2(i).stub(); - const L1TStub* outerStub = outerFPGAStub->l1tstub(); + if (teunitptr != nullptr) { + auto stubpair = teunitptr->read(); + stubpairs++; - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") << "TrackletProcessor execute " << getName() << "[" << iSector_ << "]"; - } + if (trackletpars_->nTracklets() >= settings_.ntrackletmax()) { + edm::LogVerbatim("Tracklet") << "Will break on too many tracklets in " << getName(); + break; + } + countall++; + const Stub* innerFPGAStub = stubpair.first; + const L1TStub* innerStub = innerFPGAStub->l1tstub(); - bool accept = false; + const Stub* outerFPGAStub = stubpair.second; + const L1TStub* outerStub = outerFPGAStub->l1tstub(); - if (innerFPGAStub->isBarrel() && (getName() != "TC_D1L2A" && getName() != "TC_D1L2B")) { - if (outerFPGAStub->isDisk()) { - //overlap seeding - accept = overlapSeeding(outerFPGAStub, outerStub, innerFPGAStub, innerStub); - } else { - //barrel+barrel seeding - accept = barrelSeeding(innerFPGAStub, innerStub, outerFPGAStub, outerStub); + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << "TrackletProcessor execute " << getName() << "[" << iSector_ << "]"; } - } else { - if (outerFPGAStub->isDisk()) { - //disk+disk seeding + + bool accept = false; + + if (iSeed_ < 4) { + accept = barrelSeeding(innerFPGAStub, innerStub, outerFPGAStub, outerStub); + } else if (iSeed_ < 6) { accept = diskSeeding(innerFPGAStub, innerStub, outerFPGAStub, outerStub); - } else if (innerFPGAStub->isDisk()) { - //layer+disk seeding - accept = overlapSeeding(innerFPGAStub, innerStub, outerFPGAStub, outerStub); } else { - throw cms::Exception("LogicError") << __FILE__ << " " << __LINE__ << " Invalid seeding!"; + accept = overlapSeeding(outerFPGAStub, outerStub, innerFPGAStub, innerStub); } - } - if (accept) - countsel++; + if (accept) + countsel++; - if (settings_.writeMonitorData("TP")) { - globals_->ofstream("tc_seedpairs.txt") << stubpairs.getTEDName(i) << " " << accept << endl; + if (trackletpars_->nTracklets() >= settings_.ntrackletmax()) { + edm::LogVerbatim("Tracklet") << "Will break on number of tracklets in " << getName(); + break; + } + + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << "TrackletProcessor execute done"; + } } - if (trackletpars_->nTracklets() >= settings_.ntrackletmax()) { - edm::LogVerbatim("Tracklet") << "Will break on number of tracklets in " << getName(); - break; + if (settings_.writeMonitorData("TP")) { + globals_->ofstream("trackletprocessor.txt") << getName() << " " << ninnerstubs //# inner stubs + << " " << outervmstubs_->nVMStubs() //# outer stubs + << " " << countteall //# pairs tried in TE + << " " << stubpairs //# stubs pairs + << " " << countsel //# tracklets found + << endl; } - if (countall >= settings_.maxStep("TP")) { - if (settings_.debugTracklet()) - edm::LogVerbatim("Tracklet") << "Will break on MAXTC 1"; + if (teunitsdone && tedatabuffersdone) { break; } - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") << "TrackletProcessor execute done"; - } - } - if (countall >= settings_.maxStep("TP")) { - if (settings_.debugTracklet()) - edm::LogVerbatim("Tracklet") << "Will break on MAXTC 2"; - //break; - } - - if (settings_.writeMonitorData("TP")) { - globals_->ofstream("trackletcalculator.txt") << getName() << " " << countall << " " << countsel << endl; } } -void TrackletProcessor::setVMPhiBin() { - if (innervmstubs_.size() != outervmstubs_.size()) - return; - - for (unsigned int ivmmem = 0; ivmmem < innervmstubs_.size(); ivmmem++) { - unsigned int innerphibin = innervmstubs_[ivmmem]->phibin(); - unsigned int outerphibin = outervmstubs_[ivmmem]->phibin(); - - unsigned phiindex = 32 * innerphibin + outerphibin; - - if (phitable_.find(phiindex) != phitable_.end()) - continue; - - innervmstubs_[ivmmem]->setother(outervmstubs_[ivmmem]); - outervmstubs_[ivmmem]->setother(innervmstubs_[ivmmem]); - - if ((layer_ == 1 && disk_ == 0) || (layer_ == 2 && disk_ == 0) || (layer_ == 3 && disk_ == 0) || - (layer_ == 5 && disk_ == 0)) { - innerphibits_ = settings_.nfinephi(0, iSeed_); - outerphibits_ = settings_.nfinephi(1, iSeed_); - - int innerphibins = (1 << innerphibits_); - int outerphibins = (1 << outerphibits_); - - double innerphimin, innerphimax; - innervmstubs_[ivmmem]->getPhiRange(innerphimin, innerphimax, iSeed_, 0); - double rinner = settings_.rmean(layer_ - 1); - - double outerphimin, outerphimax; - outervmstubs_[ivmmem]->getPhiRange(outerphimin, outerphimax, iSeed_, 1); - double router = settings_.rmean(layer_); - - double phiinner[2]; - double phiouter[2]; - - std::vector vmbendinner; - std::vector vmbendouter; - unsigned int nbins1 = 8; - if (layer_ >= 4) - nbins1 = 16; - for (unsigned int i = 0; i < nbins1; i++) { - vmbendinner.push_back(false); - } - - unsigned int nbins2 = 8; - if (layer_ >= 3) - nbins2 = 16; - for (unsigned int i = 0; i < nbins2; i++) { - vmbendouter.push_back(false); - } - - for (int iphiinnerbin = 0; iphiinnerbin < innerphibins; iphiinnerbin++) { - phiinner[0] = innerphimin + iphiinnerbin * (innerphimax - innerphimin) / innerphibins; - phiinner[1] = innerphimin + (iphiinnerbin + 1) * (innerphimax - innerphimin) / innerphibins; - for (int iphiouterbin = 0; iphiouterbin < outerphibins; iphiouterbin++) { - phiouter[0] = outerphimin + iphiouterbin * (outerphimax - outerphimin) / outerphibins; - phiouter[1] = outerphimin + (iphiouterbin + 1) * (outerphimax - outerphimin) / outerphibins; - - double bendinnermin = 20.0; - double bendinnermax = -20.0; - double bendoutermin = 20.0; - double bendoutermax = -20.0; - double rinvmin = 1.0; - for (int i1 = 0; i1 < 2; i1++) { - for (int i2 = 0; i2 < 2; i2++) { - double rinv1 = rinv(phiinner[i1], phiouter[i2], rinner, router); - double pitchinner = - (rinner < settings_.rcrit()) ? settings_.stripPitch(true) : settings_.stripPitch(false); - double pitchouter = - (router < settings_.rcrit()) ? settings_.stripPitch(true) : settings_.stripPitch(false); - double abendinner = -bend(rinner, rinv1, pitchinner); - double abendouter = -bend(router, rinv1, pitchouter); - if (abendinner < bendinnermin) - bendinnermin = abendinner; - if (abendinner > bendinnermax) - bendinnermax = abendinner; - if (abendouter < bendoutermin) - bendoutermin = abendouter; - if (abendouter > bendoutermax) - bendoutermax = abendouter; - if (std::abs(rinv1) < rinvmin) { - rinvmin = std::abs(rinv1); - } - } - } - - phitable_[phiindex].push_back(rinvmin < settings_.rinvcutte()); - - int nbins1 = 8; - if (layer_ >= 4) - nbins1 = 16; - for (int ibend = 0; ibend < nbins1; ibend++) { - double bend = benddecode(ibend, layer_ <= 3); +void TrackletProcessor::writeTETable() { + ofstream outstubptinnercut; + outstubptinnercut.open(getName() + "_stubptinnercut.tab"); + outstubptinnercut << "{" << endl; + // the below is outcommented as the writing of these tables are currently not implemented, to be adressed + //for(unsigned int i=0;i -settings_.bendcutte(0, iSeed_) && - bend - bendinnermax < settings_.bendcutte(0, iSeed_); - if (passinner) - vmbendinner[ibend] = true; - pttableinner_[phiindex].push_back(passinner); - } + ofstream outstubptoutercut; + outstubptoutercut.open(getName() + "_stubptoutercut.tab"); + outstubptoutercut << "{" << endl; + // the below is outcommented as the writing of these tables are currently not implemented, to be adressed + //for(unsigned int i=0;i= 3) - nbins2 = 16; - for (int ibend = 0; ibend < nbins2; ibend++) { - double bend = benddecode(ibend, layer_ <= 2); - - bool passouter = bend - bendoutermin > -settings_.bendcutte(1, iSeed_) && - bend - bendoutermax < settings_.bendcutte(1, iSeed_); - if (passouter) - vmbendouter[ibend] = true; - pttableouter_[phiindex].push_back(passouter); - } - } +void TrackletProcessor::buildLUT() { + //number of fine phi bins in sector + int nfinephibins = + settings_.nallstubs(layerdisk2_) * settings_.nvmte(1, iSeed_) * (1 << settings_.nfinephi(1, iSeed_)); + double dfinephi = settings_.dphisectorHG() / nfinephibins; + + double rmin = -1.0; + double rmax = -1.0; + + if (iSeed_ < 4) { + rmin = settings_.rmean(layerdisk1_); + rmax = settings_.rmean(layerdisk2_); + } else { + if (iSeed_ > 5) { + if (iSeed_ == 6) { + rmax = settings_.rmaxdiskl1overlapvm(); + } else if (iSeed_ == 7) { + rmax = settings_.rmaxdiskvm(); } - - innervmstubs_[ivmmem]->setbendtable(vmbendinner); - outervmstubs_[ivmmem]->setbendtable(vmbendouter); - - if (iSector_ == 0 && settings_.writeTable()) - writeTETable(); + rmin = settings_.rmean(layerdisk1_); + } else { + rmax = settings_.rmaxdiskvm(); + rmin = rmax * settings_.zmean(layerdisk2_ - 6 - 1) / settings_.zmean(layerdisk2_ - 6); } + } - if ((disk_ == 1 && layer_ == 0) || (disk_ == 3 && layer_ == 0)) { - innerphibits_ = settings_.nfinephi(0, iSeed_); - outerphibits_ = settings_.nfinephi(1, iSeed_); + double dphimax = asin(0.5 * settings_.maxrinv() * rmax) - asin(0.5 * settings_.maxrinv() * rmin); - int outerrbits = 3; + int nbins = 2.0 * (dphimax / dfinephi + 1.0); - int outerrbins = (1 << outerrbits); - int innerphibins = (1 << innerphibits_); - int outerphibins = (1 << outerphibits_); + nbitsfinephidiff_ = log(nbins) / log(2.0) + 1; - double innerphimin, innerphimax; - innervmstubs_[ivmmem]->getPhiRange(innerphimin, innerphimax, iSeed_, 0); + nbitsfinephi_ = settings_.nbitsallstubs(layerdisk2_) + settings_.nbitsvmte(1, iSeed_) + settings_.nfinephi(1, iSeed_); - double outerphimin, outerphimax; - outervmstubs_[ivmmem]->getPhiRange(outerphimin, outerphimax, iSeed_, 1); + int outerrbits = 3; + if (iSeed_ < 4) { + outerrbits = 0; + } - double phiinner[2]; - double phiouter[2]; - double router[2]; + int outerrbins = (1 << outerrbits); - std::vector vmbendinner; - std::vector vmbendouter; + double dphi[2]; + double router[2]; - for (unsigned int i = 0; i < 8; i++) { - vmbendinner.push_back(false); - vmbendouter.push_back(false); - } + unsigned int nbendbitsinner = 3; + unsigned int nbendbitsouter = 3; + if (iSeed_ == 2) { + nbendbitsouter = 4; + } else if (iSeed_ == 3) { + nbendbitsinner = 4; + nbendbitsouter = 4; + } + + int nbinsfinephidiff = (1 << nbitsfinephidiff_); - for (int irouterbin = 0; irouterbin < outerrbins; irouterbin++) { + for (int iphibin = 0; iphibin < nbinsfinephidiff; iphibin++) { + int iphidiff = iphibin; + if (iphibin >= nbinsfinephidiff / 2) { + iphidiff = iphibin - nbinsfinephidiff; + } + //min and max dphi + dphi[0] = (iphidiff - 1.5) * dfinephi; + dphi[1] = (iphidiff + 1.5) * dfinephi; + for (int irouterbin = 0; irouterbin < outerrbins; irouterbin++) { + if (iSeed_ >= 4) { router[0] = settings_.rmindiskvm() + irouterbin * (settings_.rmaxdiskvm() - settings_.rmindiskvm()) / outerrbins; router[1] = settings_.rmindiskvm() + (irouterbin + 1) * (settings_.rmaxdiskvm() - settings_.rmindiskvm()) / outerrbins; - for (int iphiinnerbin = 0; iphiinnerbin < innerphibins; iphiinnerbin++) { - phiinner[0] = innerphimin + iphiinnerbin * (innerphimax - innerphimin) / innerphibins; - phiinner[1] = innerphimin + (iphiinnerbin + 1) * (innerphimax - innerphimin) / innerphibins; - for (int iphiouterbin = 0; iphiouterbin < outerphibins; iphiouterbin++) { - phiouter[0] = outerphimin + iphiouterbin * (outerphimax - outerphimin) / outerphibins; - phiouter[1] = outerphimin + (iphiouterbin + 1) * (outerphimax - outerphimin) / outerphibins; - - double bendinnermin = 20.0; - double bendinnermax = -20.0; - double bendoutermin = 20.0; - double bendoutermax = -20.0; - double rinvmin = 1.0; - double rinvmax = -1.0; - for (int i1 = 0; i1 < 2; i1++) { - for (int i2 = 0; i2 < 2; i2++) { - for (int i3 = 0; i3 < 2; i3++) { - double rinner = router[i3] * settings_.zmean(disk_ - 1) / settings_.zmean(disk_); - double rinv1 = rinv(phiinner[i1], phiouter[i2], rinner, router[i3]); - double pitchinner = - (rinner < settings_.rcrit()) ? settings_.stripPitch(true) : settings_.stripPitch(false); - double pitchouter = - (router[i3] < settings_.rcrit()) ? settings_.stripPitch(true) : settings_.stripPitch(false); - double abendinner = bend(rinner, rinv1, pitchinner); - double abendouter = bend(router[i3], rinv1, pitchouter); - if (abendinner < bendinnermin) - bendinnermin = abendinner; - if (abendinner > bendinnermax) - bendinnermax = abendinner; - if (abendouter < bendoutermin) - bendoutermin = abendouter; - if (abendouter > bendoutermax) - bendoutermax = abendouter; - if (std::abs(rinv1) < rinvmin) { - rinvmin = std::abs(rinv1); - } - if (std::abs(rinv1) > rinvmax) { - rinvmax = std::abs(rinv1); - } - } - } - } - - phitable_[phiindex].push_back(rinvmin < settings_.rinvcutte()); - - for (int ibend = 0; ibend < 8; ibend++) { - double bend = benddecode(ibend, true); - - bool passinner = bend - bendinnermin > -settings_.bendcutte(0, iSeed_) && - bend - bendinnermax < settings_.bendcutte(0, iSeed_); - if (passinner) - vmbendinner[ibend] = true; - pttableinner_[phiindex].push_back(passinner); - } - - for (int ibend = 0; ibend < 8; ibend++) { - double bend = benddecode(ibend, true); + } else { + router[0] = settings_.rmean(layerdisk2_); + router[1] = settings_.rmean(layerdisk2_); + } - bool passouter = bend - bendoutermin > -settings_.bendcutte(1, iSeed_) && - bend - bendoutermax < settings_.bendcutte(1, iSeed_); - if (passouter) - vmbendouter[ibend] = true; - pttableouter_[phiindex].push_back(passouter); - } + double bendinnermin = 20.0; + double bendinnermax = -20.0; + double bendoutermin = 20.0; + double bendoutermax = -20.0; + double rinvmin = 1.0; + for (int i2 = 0; i2 < 2; i2++) { + for (int i3 = 0; i3 < 2; i3++) { + double rinner = 0.0; + if (iSeed_ == 4 || iSeed_ == 5) { + rinner = router[i3] * settings_.zmean(layerdisk1_ - N_LAYER) / settings_.zmean(layerdisk2_ - N_LAYER); + } else { + rinner = settings_.rmean(layerdisk1_); + } + double rinv1 = rinv(0.0, dphi[i2], rinner, router[i3]); + double pitchinner = (rinner < settings_.rcrit()) ? settings_.stripPitch(true) : settings_.stripPitch(false); + double pitchouter = + (router[i3] < settings_.rcrit()) ? settings_.stripPitch(true) : settings_.stripPitch(false); + double abendinner = -bend(rinner, rinv1, pitchinner); + double abendouter = -bend(router[i3], rinv1, pitchouter); + if (abendinner < bendinnermin) + bendinnermin = abendinner; + if (abendinner > bendinnermax) + bendinnermax = abendinner; + if (abendouter < bendoutermin) + bendoutermin = abendouter; + if (abendouter > bendoutermax) + bendoutermax = abendouter; + if (std::abs(rinv1) < rinvmin) { + rinvmin = std::abs(rinv1); } } } - innervmstubs_[ivmmem]->setbendtable(vmbendinner); - outervmstubs_[ivmmem]->setbendtable(vmbendouter); - - if (iSector_ == 0 && settings_.writeTable()) - writeTETable(); + bool passptcut = rinvmin < settings_.rinvcutte(); - } else if (disk_ == 1 && (layer_ == 1 || layer_ == 2)) { - innerphibits_ = settings_.nfinephi(0, iSeed_); - outerphibits_ = settings_.nfinephi(1, iSeed_); - unsigned int nrbits = 5; + for (int ibend = 0; ibend < (1 << nbendbitsinner); ibend++) { + double bend = benddecode(ibend, nbendbitsinner == 3); - int innerphibins = (1 << innerphibits_); - int outerphibins = (1 << outerphibits_); - - double innerphimin, innerphimax; - innervmstubs_[ivmmem]->getPhiRange(innerphimin, innerphimax, iSeed_, 0); - - double outerphimin, outerphimax; - outervmstubs_[ivmmem]->getPhiRange(outerphimin, outerphimax, iSeed_, 1); - - double phiinner[2]; - double phiouter[2]; - double router[2]; - - std::vector vmbendinner; - std::vector vmbendouter; - - for (unsigned int i = 0; i < 8; i++) { - vmbendinner.push_back(false); - vmbendouter.push_back(false); + bool passinner = bend - bendinnermin > -settings_.bendcutte(0, iSeed_) && + bend - bendinnermax < settings_.bendcutte(0, iSeed_); + pttableinnernew_.push_back(passinner && passptcut); } - double dr = (settings_.rmaxdiskvm() - settings_.rmindiskvm()) / (1 << nrbits); - - for (int iphiinnerbin = 0; iphiinnerbin < innerphibins; iphiinnerbin++) { - phiinner[0] = innerphimin + iphiinnerbin * (innerphimax - innerphimin) / innerphibins; - phiinner[1] = innerphimin + (iphiinnerbin + 1) * (innerphimax - innerphimin) / innerphibins; - for (int iphiouterbin = 0; iphiouterbin < outerphibins; iphiouterbin++) { - phiouter[0] = outerphimin + iphiouterbin * (outerphimax - outerphimin) / outerphibins; - phiouter[1] = outerphimin + (iphiouterbin + 1) * (outerphimax - outerphimin) / outerphibins; - for (int irbin = 0; irbin < (1 << nrbits); irbin++) { - router[0] = settings_.rmindiskvm() + dr * irbin; - router[1] = router[0] + dr; - double bendinnermin = 20.0; - double bendinnermax = -20.0; - double bendoutermin = 20.0; - double bendoutermax = -20.0; - double rinvmin = 1.0; - for (int i1 = 0; i1 < 2; i1++) { - for (int i2 = 0; i2 < 2; i2++) { - for (int i3 = 0; i3 < 2; i3++) { - double rinner = settings_.rmean(layer_ - 1); - double rinv1 = rinv(phiinner[i1], phiouter[i2], rinner, router[i3]); - double pitchinner = - (rinner < settings_.rcrit()) ? settings_.stripPitch(true) : settings_.stripPitch(false); - double pitchouter = - (router[i3] < settings_.rcrit()) ? settings_.stripPitch(true) : settings_.stripPitch(false); - double abendinner = bend(rinner, rinv1, pitchinner); - double abendouter = bend(router[i3], rinv1, pitchouter); - if (abendinner < bendinnermin) - bendinnermin = abendinner; - if (abendinner > bendinnermax) - bendinnermax = abendinner; - if (abendouter < bendoutermin) - bendoutermin = abendouter; - if (abendouter > bendoutermax) - bendoutermax = abendouter; - if (std::abs(rinv1) < rinvmin) { - rinvmin = std::abs(rinv1); - } - } - } - } - - phitable_[phiindex].push_back(rinvmin < settings_.rinvcutte()); - - for (int ibend = 0; ibend < 8; ibend++) { - double bend = benddecode(ibend, true); - - bool passinner = bend - bendinnermin > -settings_.bendcutte(0, iSeed_) && - bend - bendinnermax < settings_.bendcutte(0, iSeed_); - if (passinner) - vmbendinner[ibend] = true; - pttableinner_[phiindex].push_back(passinner); - } + for (int ibend = 0; ibend < (1 << nbendbitsouter); ibend++) { + double bend = benddecode(ibend, nbendbitsouter == 3); - for (int ibend = 0; ibend < 8; ibend++) { - double bend = benddecode(ibend, true); + bool passouter = bend - bendoutermin > -settings_.bendcutte(1, iSeed_) && + bend - bendoutermax < settings_.bendcutte(1, iSeed_); + pttableouternew_.push_back(passouter && passptcut); + } + } + } - bool passouter = bend - bendoutermin > -settings_.bendcutte(1, iSeed_) && - bend - bendoutermax < settings_.bendcutte(1, iSeed_); - if (passouter) - vmbendouter[ibend] = true; - pttableouter_[phiindex].push_back(passouter); - } + int nirbits = 0; + if (iSeed_ >= 4) + nirbits = 3; + + int nregmax = 0; + + for (int innerfinephi = 0; innerfinephi < (1 << nbitsfinephi_); innerfinephi++) { + for (int innerbend = 0; innerbend < (1 << nbendbitsinner); innerbend++) { + for (int ir = 0; ir < (1 << nirbits); ir++) { + int nreg = 0; + vector usereg; + for (unsigned int ireg = 0; ireg < settings_.nvmte(1, iSeed_); ireg++) { + bool match = false; + for (int ifinephiouter = 0; ifinephiouter < (1 << settings_.nfinephi(1, iSeed_)); ifinephiouter++) { + int outerfinephi = iAllStub_ * (1 << (nbitsfinephi_ - settings_.nbitsallstubs(layerdisk2_))) + + ireg * (1 << settings_.nfinephi(1, iSeed_)) + ifinephiouter; + int idphi = outerfinephi - innerfinephi; + bool inrange = (idphi < (1 << (nbitsfinephidiff_ - 1))) && (idphi >= -(1 << (nbitsfinephidiff_ - 1))); + if (idphi < 0) + idphi = idphi + (1 << nbitsfinephidiff_); + int idphi1 = idphi; + if (iSeed_ >= 4) + idphi1 = (idphi << 3) + ir; + int ptinnerindexnew = (idphi1 << nbendbitsinner) + innerbend; + match = match || (inrange && pttableinnernew_[ptinnerindexnew]); } + if (match && ir < 3) + nreg++; + usereg.push_back(match); } - } - innervmstubs_[ivmmem]->setbendtable(vmbendinner); - outervmstubs_[ivmmem]->setbendtable(vmbendouter); - - if (iSector_ == 0 && settings_.writeTable()) - writeTETable(); + useregion_.push_back(usereg); + if (nreg > nregmax) + nregmax = nreg; + } } } } - -void TrackletProcessor::writeTETable() { - ofstream outptcut; - outptcut.open(getName() + "_ptcut.tab"); - outptcut << "{" << endl; - //for(unsigned int i=0;i #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include +#include using namespace std; using namespace trklet; @@ -34,17 +35,24 @@ void TrackletProjectionsMemory::addProj(Tracklet* tracklet) { void TrackletProjectionsMemory::clean() { tracklets_.clear(); } void TrackletProjectionsMemory::writeTPROJ(bool first) { + const string dirTP = settings_.memPath() + "TrackletProjections/"; + if (not std::filesystem::exists(dirTP)) { + int fail = system((string("mkdir -p ") + dirTP).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " << dirTP; + } + std::ostringstream oss; - oss << "../data/MemPrints/TrackletProjections/TrackletProjections_" << getName() << "_" << std::setfill('0') - << std::setw(2) << (iSector_ + 1) << ".dat"; + oss << dirTP << "TrackletProjections_" << getName() << "_" << std::setfill('0') << std::setw(2) << (iSector_ + 1) + << ".dat"; auto const& fname = oss.str(); if (first) { bx_ = 0; event_ = 1; - out_.open(fname.c_str()); + out_.open(fname); } else - out_.open(fname.c_str(), std::ofstream::app); + out_.open(fname, std::ofstream::app); out_ << "BX = " << (bitset<3>)bx_ << " Event : " << event_ << endl; diff --git a/L1Trigger/TrackFindingTracklet/src/TripletEngine.cc b/L1Trigger/TrackFindingTracklet/src/TripletEngine.cc index 403bf8f02ef48..a7ef1821f3273 100644 --- a/L1Trigger/TrackFindingTracklet/src/TripletEngine.cc +++ b/L1Trigger/TrackFindingTracklet/src/TripletEngine.cc @@ -65,7 +65,8 @@ TripletEngine::TripletEngine(string name, Settings const &settings, Globals *glo secondphibits_ = settings_.nfinephi(1, iSeed_); thirdphibits_ = settings_.nfinephi(2, iSeed_); } - readTables(); + if (settings_.enableTripletTables() && !settings_.writeTripletTables()) + readTables(); } TripletEngine::~TripletEngine() { @@ -201,29 +202,29 @@ void TripletEngine::execute() { index = (index << secondbend.nbits()) + secondbend.value(); index = (index << thirdbend.nbits()) + thirdbend.value(); - if (index >= table_.size()) - table_.resize(index + 1, false); - - if (!table_[index]) { + if ((settings_.enableTripletTables() && !settings_.writeTripletTables()) && + (index >= table_.size() || !table_[index])) { if (settings_.debugTracklet()) { edm::LogVerbatim("Tracklet") << "Stub pair rejected because of stub pt cut bends : " << benddecode(secondvmstub.bend().value(), secondvmstub.isPSmodule()) << " " << benddecode(thirdvmstub.bend().value(), thirdvmstub.isPSmodule()); } - if (!settings_.writeTripletTables()) - continue; + continue; } - if (settings_.writeTripletTables()) + if (settings_.writeTripletTables()) { + if (index >= table_.size()) + table_.resize(index + 1, false); table_[index] = true; - const unsigned spIndex = stubpairs_.at(i)->getIndex(j); - const string &tedName = stubpairs_.at(i)->getTEDName(j); - if (!tmpSPTable_.count(tedName)) - tmpSPTable_[tedName]; - if (spIndex >= tmpSPTable_.at(tedName).size()) - tmpSPTable_.at(tedName).resize(spIndex + 1); - tmpSPTable_.at(tedName).at(spIndex).push_back(stubpairs_.at(i)->getName()); + const unsigned spIndex = stubpairs_.at(i)->getIndex(j); + const string &tedName = stubpairs_.at(i)->getTEDName(j); + if (!tmpSPTable_.count(tedName)) + tmpSPTable_[tedName]; + if (spIndex >= tmpSPTable_.at(tedName).size()) + tmpSPTable_.at(tedName).resize(spIndex + 1); + tmpSPTable_.at(tedName).at(spIndex).push_back(stubpairs_.at(i)->getName()); + } if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "Adding layer-layer pair in " << getName(); @@ -284,27 +285,29 @@ void TripletEngine::execute() { index = (index << secondbend.nbits()) + secondbend.value(); index = (index << thirdbend.nbits()) + thirdbend.value(); - if (index >= table_.size()) - table_.resize(index + 1, false); - - if (!table_[index]) { + if ((settings_.enableTripletTables() && !settings_.writeTripletTables()) && + (index >= table_.size() || !table_[index])) { if (settings_.debugTracklet()) { edm::LogVerbatim("Tracklet") << "Stub triplet rejected because of stub pt cut bends : " << benddecode(secondvmstub.bend().value(), secondvmstub.isPSmodule()) << " " << benddecode(thirdvmstub.bend().value(), thirdvmstub.isPSmodule()); } + continue; } - if (settings_.writeTripletTables()) + if (settings_.writeTripletTables()) { + if (index >= table_.size()) + table_.resize(index + 1, false); table_[index] = true; - const unsigned spIndex = stubpairs_.at(i)->getIndex(j); - const string &tedName = stubpairs_.at(i)->getTEDName(j); - if (!tmpSPTable_.count(tedName)) - tmpSPTable_[tedName]; - if (spIndex >= tmpSPTable_.at(tedName).size()) - tmpSPTable_.at(tedName).resize(spIndex + 1); - tmpSPTable_.at(tedName).at(spIndex).push_back(stubpairs_.at(i)->getName()); + const unsigned spIndex = stubpairs_.at(i)->getIndex(j); + const string &tedName = stubpairs_.at(i)->getTEDName(j); + if (!tmpSPTable_.count(tedName)) + tmpSPTable_[tedName]; + if (spIndex >= tmpSPTable_.at(tedName).size()) + tmpSPTable_.at(tedName).resize(spIndex + 1); + tmpSPTable_.at(tedName).at(spIndex).push_back(stubpairs_.at(i)->getName()); + } if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "Adding layer-disk pair in " << getName(); @@ -366,27 +369,29 @@ void TripletEngine::execute() { index = (index << secondbend.nbits()) + secondbend.value(); index = (index << thirdbend.nbits()) + thirdbend.value(); - if (index >= table_.size()) - table_.resize(index + 1, false); - - if (!table_[index]) { + if ((settings_.enableTripletTables() && !settings_.writeTripletTables()) && + (index >= table_.size() || !table_[index])) { if (settings_.debugTracklet()) { edm::LogVerbatim("Tracklet") << "Stub pair rejected because of stub pt cut bends : " << benddecode(secondvmstub.bend().value(), secondvmstub.isPSmodule()) << " " << benddecode(thirdvmstub.bend().value(), thirdvmstub.isPSmodule()); } + continue; } - if (settings_.writeTripletTables()) + if (settings_.writeTripletTables()) { + if (index >= table_.size()) + table_.resize(index + 1, false); table_[index] = true; - const unsigned spIndex = stubpairs_.at(i)->getIndex(j); - const string &tedName = stubpairs_.at(i)->getTEDName(j); - if (!tmpSPTable_.count(tedName)) - tmpSPTable_[tedName]; - if (spIndex >= tmpSPTable_.at(tedName).size()) - tmpSPTable_.at(tedName).resize(spIndex + 1); - tmpSPTable_.at(tedName).at(spIndex).push_back(stubpairs_.at(i)->getName()); + const unsigned spIndex = stubpairs_.at(i)->getIndex(j); + const string &tedName = stubpairs_.at(i)->getTEDName(j); + if (!tmpSPTable_.count(tedName)) + tmpSPTable_[tedName]; + if (spIndex >= tmpSPTable_.at(tedName).size()) + tmpSPTable_.at(tedName).resize(spIndex + 1); + tmpSPTable_.at(tedName).at(spIndex).push_back(stubpairs_.at(i)->getName()); + } if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "Adding layer-disk pair in " << getName(); diff --git a/L1Trigger/TrackFindingTracklet/src/VMProjectionsMemory.cc b/L1Trigger/TrackFindingTracklet/src/VMProjectionsMemory.cc index ff4c8f2be7191..9ff195063fb54 100644 --- a/L1Trigger/TrackFindingTracklet/src/VMProjectionsMemory.cc +++ b/L1Trigger/TrackFindingTracklet/src/VMProjectionsMemory.cc @@ -1,7 +1,8 @@ #include "L1Trigger/TrackFindingTracklet/interface/VMProjectionsMemory.h" #include "L1Trigger/TrackFindingTracklet/interface/Tracklet.h" -#include #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include +#include using namespace std; using namespace trklet; @@ -21,8 +22,10 @@ void VMProjectionsMemory::addTracklet(Tracklet* tracklet, unsigned int allprojin } void VMProjectionsMemory::writeVMPROJ(bool first) { + const string dirVM = settings_.memPath() + "VMProjections/"; + std::ostringstream oss; - oss << "../data/MemPrints/VMProjections/VMProjections_" << getName(); + oss << dirVM + "VMProjections_" << getName(); //get rid of duplicates auto const& tmp = oss.str(); int len = tmp.size(); @@ -34,9 +37,18 @@ void VMProjectionsMemory::writeVMPROJ(bool first) { if (first) { bx_ = 0; event_ = 1; - out_.open(fname.c_str()); + + if (not std::filesystem::exists(dirVM)) { + int fail = system((string("mkdir -p ") + dirVM).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " << dirVM; + } + out_.open(fname); + if (out_.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; + } else - out_.open(fname.c_str(), std::ofstream::app); + out_.open(fname, std::ofstream::app); out_ << "BX = " << (bitset<3>)bx_ << " Event : " << event_ << endl; diff --git a/L1Trigger/TrackFindingTracklet/src/VMRouter.cc b/L1Trigger/TrackFindingTracklet/src/VMRouter.cc index 52aa1d099a32b..dd3015ea1e75f 100644 --- a/L1Trigger/TrackFindingTracklet/src/VMRouter.cc +++ b/L1Trigger/TrackFindingTracklet/src/VMRouter.cc @@ -22,7 +22,7 @@ VMRouter::VMRouter(string name, Settings const& settings, Globals* global, unsig overlapbits_ = 7; nextrabits_ = overlapbits_ - (settings_.nbitsallstubs(layerdisk_) + settings_.nbitsvmme(layerdisk_)); - vmrtable_.init(layerdisk_); + vmrtable_.init(layerdisk_, getName()); nbitszfinebintable_ = settings_.vmrlutzbits(layerdisk_); nbitsrfinebintable_ = settings_.vmrlutrbits(layerdisk_); @@ -227,13 +227,11 @@ void VMRouter::execute() { if (layerdisk_ >= N_LAYER) nbendbits = settings_.nbendbitsmedisk(); - VMStubME vmstub( - stub, - stub->iphivmFineBins(iphi.nbits() - (settings_.nbitsallstubs(layerdisk_) + settings_.nbitsvmme(layerdisk_)), - settings_.nbitsvmme(layerdisk_)), - FPGAWord(rzfine, 3, true, __LINE__, __FILE__), - FPGAWord(stub->bend().value(), nbendbits, true, __LINE__, __FILE__), - allStubIndex); + VMStubME vmstub(stub, + stub->iphivmFineBins(settings_.nbitsallstubs(layerdisk_) + settings_.nbitsvmme(layerdisk_), 3), + FPGAWord(rzfine, 3, true, __LINE__, __FILE__), + FPGAWord(stub->bend().value(), nbendbits, true, __LINE__, __FILE__), + allStubIndex); assert(vmstubsMEPHI_[ivmPlus] != nullptr); vmstubsMEPHI_[ivmPlus]->addStub(vmstub, vmbin); diff --git a/L1Trigger/TrackFindingTracklet/src/VMRouterCM.cc b/L1Trigger/TrackFindingTracklet/src/VMRouterCM.cc new file mode 100644 index 0000000000000..f6ce34e3badc6 --- /dev/null +++ b/L1Trigger/TrackFindingTracklet/src/VMRouterCM.cc @@ -0,0 +1,272 @@ +#include "L1Trigger/TrackFindingTracklet/interface/VMRouterCM.h" +#include "L1Trigger/TrackFindingTracklet/interface/Settings.h" +#include "L1Trigger/TrackFindingTracklet/interface/Globals.h" +#include "L1Trigger/TrackFindingTracklet/interface/VMStubTE.h" +#include "L1Trigger/TrackFindingTracklet/interface/InputLinkMemory.h" +#include "L1Trigger/TrackFindingTracklet/interface/AllStubsMemory.h" +#include "L1Trigger/TrackFindingTracklet/interface/VMStubsMEMemory.h" +#include "L1Trigger/TrackFindingTracklet/interface/VMStubsTEMemory.h" + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Utilities/interface/Exception.h" + +using namespace std; +using namespace trklet; + +VMRouterCM::VMRouterCM(string name, Settings const& settings, Globals* global, unsigned int iSector) + : ProcessBase(name, settings, global, iSector), vmrtable_(settings) { + layerdisk_ = initLayerDisk(4); + + vmstubsMEPHI_.resize(1, nullptr); + + overlapbits_ = 7; + nextrabits_ = overlapbits_ - (settings_.nbitsallstubs(layerdisk_) + settings_.nbitsvmme(layerdisk_)); + + vmrtable_.init(layerdisk_, getName()); + + nbitszfinebintable_ = settings_.vmrlutzbits(layerdisk_); + nbitsrfinebintable_ = settings_.vmrlutrbits(layerdisk_); + + nvmmebins_ = settings_.NLONGVMBINS() * ((layerdisk_ >= 6) ? 2 : 1); //number of long z/r bins in VM +} + +void VMRouterCM::addOutput(MemoryBase* memory, string output) { + if (settings_.writetrace()) { + edm::LogVerbatim("Tracklet") << "In " << name_ << " adding output to " << memory->getName() << " to output " + << output; + } + + if (output.substr(0, 10) == "allstubout") { + AllStubsMemory* tmp = dynamic_cast(memory); + assert(tmp != nullptr); + char memtype = 0; + if (output.size() > 10) { + memtype = output[11]; + } + allstubs_.emplace_back(memtype, tmp); + return; + } + + if (output.substr(0, 9) == "vmstubout") { + unsigned int pos = 12; + int vmbin = memory->getName().substr(pos, 1)[0] - '0'; + pos++; + if (pos < memory->getName().size()) { + if (memory->getName().substr(pos, 1)[0] != 'n') { + vmbin = vmbin * 10 + memory->getName().substr(pos, 1)[0] - '0'; + pos++; + } + } + if (memory->getName().substr(3, 2) == "TE") { + VMStubsTEMemory* tmp = dynamic_cast(memory); + int iseed = output[output.size() - 1] - '0'; + assert(iseed >= 0); + assert(iseed < 8); + + int seedindex = -1; + for (unsigned int k = 0; k < vmstubsTEPHI_.size(); k++) { + if (vmstubsTEPHI_[k].seednumber == (unsigned int)iseed) { + seedindex = k; + } + } + if (seedindex == -1) { + seedindex = vmstubsTEPHI_.size(); + vector vectmp; + VMStubsTEPHICM atmp(iseed, vectmp); + vmstubsTEPHI_.push_back(atmp); + } + tmp->resize(settings_.NLONGVMBINS() * settings_.nvmte(1, iseed)); + vmstubsTEPHI_[seedindex].vmstubmem.push_back(tmp); + + } else if (memory->getName().substr(3, 2) == "ME") { + VMStubsMEMemory* tmp = dynamic_cast(memory); + assert(tmp != nullptr); + tmp->resize(nvmmebins_ * settings_.nvmme(layerdisk_)); + assert(vmstubsMEPHI_[0] == nullptr); + vmstubsMEPHI_[0] = tmp; + } else { + throw cms::Exception("LogicError") << __FILE__ << " " << __LINE__ << " memory: " << memory->getName() + << " => should never get here!"; + } + + return; + } + + throw cms::Exception("BadConfig") << __FILE__ << " " << __LINE__ << " Could not find output : " << output; +} + +void VMRouterCM::addInput(MemoryBase* memory, string input) { + if (settings_.writetrace()) { + edm::LogVerbatim("Tracklet") << "In " << name_ << " adding input from " << memory->getName() << " to input " + << input; + } + if (input == "stubin") { + InputLinkMemory* tmp1 = dynamic_cast(memory); + assert(tmp1 != nullptr); + if (tmp1 != nullptr) { + stubinputs_.push_back(tmp1); + } + return; + } + throw cms::Exception("BadConfig") << __FILE__ << " " << __LINE__ << " Could not find input : " << input; +} + +void VMRouterCM::execute() { + unsigned int allStubCounter = 0; + + //Loop over the input stubs + for (auto& stubinput : stubinputs_) { + for (unsigned int i = 0; i < stubinput->nStubs(); i++) { + if (allStubCounter > settings_.maxStep("VMR")) + continue; + if (allStubCounter > 127) + continue; + + Stub* stub = stubinput->getStub(i); + + //Note - below information is not part of the stub, but rather from which input memory + //we are reading + bool negdisk = (stub->disk().value() < 0); + + //use &127 to make sure we fit into the number of bits - + //though we should have protected against overflows above + FPGAWord allStubIndex(allStubCounter & 127, 7, true, __LINE__, __FILE__); + + //TODO - should not be needed - but need to migrate some other pieces of code before removing + stub->setAllStubIndex(allStubCounter); + //TODO - should not be needed - but need to migrate some other pieces of code before removing + stub->l1tstub()->setAllStubIndex(allStubCounter); + + allStubCounter++; + + FPGAWord iphi = stub->phicorr(); + unsigned int iphipos = iphi.bits(iphi.nbits() - (settings_.nbitsallstubs(layerdisk_) + 3), 3); + + //Fill allstubs memories - in HLS this is the same write to multiple memories + for (auto& allstub : allstubs_) { + char memtype = allstub.first; + if ((memtype == 'R' && iphipos < 5) || (memtype == 'L' && iphipos >= 3) || (memtype == 'A' && iphipos < 4) || + (memtype == 'B' && iphipos >= 4) || (memtype == 'E' && iphipos >= 4) || (memtype == 'F' && iphipos < 4) || + (memtype == 'C' && iphipos >= 4) || (memtype == 'D' && iphipos < 4)) + continue; + allstub.second->addStub(stub); + } + + //Fill all the ME VM memories + unsigned int ivm = + iphi.bits(iphi.nbits() - (settings_.nbitsallstubs(layerdisk_) + settings_.nbitsvmme(layerdisk_)), + settings_.nbitsvmme(layerdisk_)); + unsigned int extrabits = iphi.bits(iphi.nbits() - overlapbits_, nextrabits_); + + unsigned int ivmPlus = ivm; + + if (extrabits == ((1U << nextrabits_) - 1) && ivm != ((1U << settings_.nbitsvmme(layerdisk_)) - 1)) + ivmPlus++; + unsigned int ivmMinus = ivm; + if (extrabits == 0 && ivm != 0) + ivmMinus--; + + //Calculate the z and r position for the vmstub + + //Take the top nbitszfinebintable_ bits of the z coordinate + int indexz = (((1 << (stub->z().nbits() - 1)) + stub->z().value()) >> (stub->z().nbits() - nbitszfinebintable_)); + int indexr = -1; + if (layerdisk_ > (N_LAYER - 1)) { + if (negdisk) { + indexz = (1 << nbitszfinebintable_) - indexz; + } + indexr = stub->r().value(); + if (stub->isPSmodule()) { + indexr = stub->r().value() >> (stub->r().nbits() - nbitsrfinebintable_); + } + } else { + //Take the top nbitsfinebintable_ bits of the z coordinate. The & is to handle the negative z values. + indexr = (((1 << (stub->r().nbits() - 1)) + stub->r().value()) >> (stub->r().nbits() - nbitsrfinebintable_)); + } + + assert(indexz >= 0); + assert(indexr >= 0); + assert(indexz < (1 << nbitszfinebintable_)); + assert(indexr < (1 << nbitsrfinebintable_)); + + int melut = vmrtable_.lookup(indexz, indexr); + + assert(melut >= 0); + + int vmbin = melut >> NFINERZBITS; + if (negdisk) + vmbin += (1 << NFINERZBITS); + int rzfine = melut & ((1 << NFINERZBITS) - 1); + + // pad disk PS bend word with a '0' in MSB so that all disk bends have 4 bits (for HLS compatibility) + int nbendbits = stub->bend().nbits(); + if (layerdisk_ >= N_LAYER) + nbendbits = settings_.nbendbitsmedisk(); + + VMStubME vmstub( + stub, + stub->iphivmFineBins(settings_.nbitsallstubs(layerdisk_) + settings_.nbitsvmme(layerdisk_), NFINERZBITS), + FPGAWord(rzfine, NFINERZBITS, true, __LINE__, __FILE__), + FPGAWord(stub->bend().value(), nbendbits, true, __LINE__, __FILE__), + allStubIndex); + + assert(vmstubsMEPHI_[0] != nullptr); + vmstubsMEPHI_[0]->addStub(vmstub, ivmPlus * nvmmebins_ + vmbin); + + if (ivmMinus != ivmPlus) { + vmstubsMEPHI_[0]->addStub(vmstub, ivmMinus * nvmmebins_ + vmbin); + } + + //Fill the TE VM memories + if (layerdisk_ >= 6 && (!stub->isPSmodule())) + continue; + + for (auto& ivmstubTEPHI : vmstubsTEPHI_) { + unsigned int iseed = ivmstubTEPHI.seednumber; + unsigned int lutwidth = settings_.lutwidthtab(1, iseed); + + int lutval = -999; + + if (layerdisk_ < N_LAYER) { + lutval = melut; + } else { + lutval = vmrtable_.lookupdisk(indexz, indexr); + } + if (lutval == -1) + continue; + + assert(lutval >= 0); + + FPGAWord binlookup(lutval, lutwidth, true, __LINE__, __FILE__); + + if (binlookup.value() < 0) + continue; + + unsigned int ivmte = + iphi.bits(iphi.nbits() - (settings_.nbitsallstubs(layerdisk_) + settings_.nbitsvmte(1, iseed)), + settings_.nbitsvmte(1, iseed)); + + int bin = binlookup.value() / 8; + unsigned int tmp = binlookup.value() & 7; //three bits in outer layers - this could be coded cleaner... + binlookup.set(tmp, 3, true, __LINE__, __FILE__); + + FPGAWord finephi = stub->iphivmFineBins(settings_.nphireg(1, iseed), settings_.nfinephi(1, iseed)); + + VMStubTE tmpstub(stub, finephi, stub->bend(), binlookup, allStubIndex); + + unsigned int nmem = ivmstubTEPHI.vmstubmem.size(); + assert(nmem > 0); + + for (unsigned int l = 0; l < nmem; l++) { + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << getName() << " try adding stub to " << ivmstubTEPHI.vmstubmem[l]->getName() + << " bin=" << bin << " ivmte " << ivmte << " finephi " << finephi.value() + << " regions bits " << settings_.nphireg(1, iseed) << " finephibits " + << settings_.nfinephi(1, iseed); + } + ivmstubTEPHI.vmstubmem[l]->addVMStub(tmpstub, ivmte * settings_.NLONGVMBINS() + bin); + } + } + } + } +} diff --git a/L1Trigger/TrackFindingTracklet/src/VMRouterPhiCorrTable.cc b/L1Trigger/TrackFindingTracklet/src/VMRouterPhiCorrTable.cc index 3ec4838e0adb0..257843cd5c49b 100644 --- a/L1Trigger/TrackFindingTracklet/src/VMRouterPhiCorrTable.cc +++ b/L1Trigger/TrackFindingTracklet/src/VMRouterPhiCorrTable.cc @@ -2,6 +2,8 @@ #include "L1Trigger/TrackFindingTracklet/interface/Settings.h" #include "L1Trigger/TrackFindingTracklet/interface/Util.h" +#include + using namespace std; using namespace trklet; @@ -31,7 +33,14 @@ void VMRouterPhiCorrTable::init(int layer, int bendbits, int rbits) { } if (settings_.writeTable()) { - writeVMTable("VMPhiCorrL" + std::to_string(layer_) + ".txt", false); + if (not std::filesystem::exists(settings_.tablePath())) { + int fail = system((string("mkdir -p ") + settings_.tablePath()).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " + << settings_.tablePath(); + } + + writeVMTable(settings_.tablePath() + "VMPhiCorrL" + std::to_string(layer_) + ".tab", false); } } diff --git a/L1Trigger/TrackFindingTracklet/src/VMRouterTable.cc b/L1Trigger/TrackFindingTracklet/src/VMRouterTable.cc index f1bcab0a26469..3605f8aadbae0 100644 --- a/L1Trigger/TrackFindingTracklet/src/VMRouterTable.cc +++ b/L1Trigger/TrackFindingTracklet/src/VMRouterTable.cc @@ -1,19 +1,20 @@ // VMRouterTable: Lookup table used by the VMRouter to route stubs and provide information about which VMStubs are needed by the TrackletEngine #include "L1Trigger/TrackFindingTracklet/interface/VMRouterTable.h" #include "L1Trigger/TrackFindingTracklet/interface/Settings.h" - #include +#include using namespace std; using namespace trklet; VMRouterTable::VMRouterTable(Settings const& settings) : settings_(settings) {} -VMRouterTable::VMRouterTable(Settings const& settings, unsigned int layerdisk) : settings_(settings) { - init(layerdisk); +VMRouterTable::VMRouterTable(Settings const& settings, unsigned int layerdisk, std::string const& name) + : settings_(settings) { + init(layerdisk, name); } -void VMRouterTable::init(unsigned int layerdisk) { +void VMRouterTable::init(unsigned int layerdisk, std::string const& name) { zbits_ = settings_.vmrlutzbits(layerdisk); rbits_ = settings_.vmrlutrbits(layerdisk); @@ -98,6 +99,43 @@ void VMRouterTable::init(unsigned int layerdisk) { } } } + + if (settings_.writeTable()) { + if (not std::filesystem::exists(settings_.tablePath())) { + int fail = system((string("mkdir -p ") + settings_.tablePath()).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " + << settings_.tablePath(); + } + + // write finebin tables + writeVMTable(settings_.tablePath() + name + "_finebin.tab", vmrtable_); + // write barrel seed teinner tables (L1L2, L2L3, L3L4, L5L6) + if (layerdisk == 0 || layerdisk == 1 || layerdisk == 2 || layerdisk == 4) { + std::string fnamesuffix = "L" + to_string(layerdisk + 1) + "L" + std::to_string(layerdisk + 2); + writeVMTable(settings_.tablePath() + "VMTableInner" + fnamesuffix + ".tab", vmrtableteinner_); + } + // write disk seed teinner tables (D1D2, D3D4) + if (layerdisk == 6 || layerdisk == 8) { + std::string fnamesuffix = "D" + to_string(layerdisk - N_LAYER + 1) + "D" + to_string(layerdisk - N_LAYER + 2); + writeVMTable(settings_.tablePath() + "VMTableInner" + fnamesuffix + ".tab", vmrtableteinner_); + } + // write overlap seed teinner tables (L1D1, L2D1) + if (layerdisk == 0 || layerdisk == 1) { + std::string fnamesuffix = "L" + to_string(layerdisk + 1) + "D1"; + writeVMTable(settings_.tablePath() + "VMTableInner" + fnamesuffix + ".tab", vmrtableteinneroverlap_); + } + // write barrel teouter tables (L2, L3, L4, L6, same as finebin tables) + if (layerdisk == 1 || layerdisk == 2 || layerdisk == 3 || layerdisk == 5) { + std::string fnamesuffix = "L" + to_string(layerdisk + 1); + writeVMTable(settings_.tablePath() + "VMTableOuter" + fnamesuffix + ".tab", vmrtable_); + } + // write disk teouter tables (D1, D2, D4) + if (layerdisk == 6 || layerdisk == 7 || layerdisk == 9) { + std::string fnamesuffix = "D" + to_string(layerdisk - N_LAYER + 1); + writeVMTable(settings_.tablePath() + "VMTableOuter" + fnamesuffix + ".tab", vmrtabletedisk_); + } + } } int VMRouterTable::getLookup(unsigned int layerdisk, double z, double r, int iseed) { @@ -286,3 +324,20 @@ int VMRouterTable::lookupinnerThird(int zbin, int rbin) { assert(index >= 0 && index < (int)vmrtableteinnerThird_.size()); return vmrtableteinnerThird_[index]; } + +void VMRouterTable::writeVMTable(std::string const& name, std::vector const& table) { + ofstream out(name); + if (out.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << name; + + out << "{" << endl; + for (unsigned int i = 0; i < table.size(); i++) { + if (i != 0) { + out << "," << endl; + } + int itable = table[i]; + out << itable; + } + out << endl << "};" << endl; + out.close(); +} diff --git a/L1Trigger/TrackFindingTracklet/src/VMStubsMEMemory.cc b/L1Trigger/TrackFindingTracklet/src/VMStubsMEMemory.cc index 59418f445c5f5..275a73aca4213 100644 --- a/L1Trigger/TrackFindingTracklet/src/VMStubsMEMemory.cc +++ b/L1Trigger/TrackFindingTracklet/src/VMStubsMEMemory.cc @@ -1,6 +1,7 @@ #include "L1Trigger/TrackFindingTracklet/interface/VMStubsMEMemory.h" #include "L1Trigger/TrackFindingTracklet/interface/Settings.h" #include +#include using namespace std; using namespace trklet; @@ -17,8 +18,10 @@ VMStubsMEMemory::VMStubsMEMemory(string name, Settings const& settings, unsigned } void VMStubsMEMemory::writeStubs(bool first) { + const string dirVM = settings_.memPath() + "VMStubsME/"; + std::ostringstream oss; - oss << "../data/MemPrints/VMStubsME/VMStubs_" << getName(); + oss << dirVM << "VMStubs_" << getName(); //get rid of duplicates auto const& tmp = oss.str(); int len = tmp.size(); @@ -30,9 +33,18 @@ void VMStubsMEMemory::writeStubs(bool first) { if (first) { bx_ = 0; event_ = 1; - out_.open(fname.c_str()); + + if (not std::filesystem::exists(dirVM)) { + int fail = system((string("mkdir -p ") + dirVM).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " << dirVM; + } + out_.open(fname); + if (out_.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; + } else - out_.open(fname.c_str(), std::ofstream::app); + out_.open(fname, std::ofstream::app); out_ << "BX = " << (bitset<3>)bx_ << " Event : " << event_ << endl; diff --git a/L1Trigger/TrackFindingTracklet/src/VMStubsTEMemory.cc b/L1Trigger/TrackFindingTracklet/src/VMStubsTEMemory.cc index 523af7ebdc242..be05d40c9536a 100644 --- a/L1Trigger/TrackFindingTracklet/src/VMStubsTEMemory.cc +++ b/L1Trigger/TrackFindingTracklet/src/VMStubsTEMemory.cc @@ -1,6 +1,7 @@ #include "L1Trigger/TrackFindingTracklet/interface/VMStubsTEMemory.h" -#include #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include +#include using namespace std; using namespace trklet; @@ -61,6 +62,20 @@ VMStubsTEMemory::VMStubsTEMemory(string name, Settings const& settings, unsigned bool VMStubsTEMemory::addVMStub(VMStubTE vmstub, int bin) { //If the pt of the stub is consistent with the allowed pt of tracklets //in that can be formed in this VM and the other VM used in the TE. + + if (settings_.combined()) { + if (disk_ > 0) { + assert(vmstub.stub()->isPSmodule()); + } + bool negdisk = vmstub.stub()->disk().value() < 0.0; + if (negdisk) + bin += 4; + assert(bin < (int)stubsbinnedvm_.size()); + stubsbinnedvm_[bin].push_back(vmstub); + stubsvm_.push_back(vmstub); + return true; + } + bool pass = passbend(vmstub.bend().value()); if (!pass) { @@ -194,13 +209,14 @@ bool VMStubsTEMemory::addVMStub(VMStubTE vmstub) { void VMStubsTEMemory::clean() { stubsvm_.clear(); - for (unsigned int i = 0; i < settings_.NLONGVMBINS(); i++) { - stubsbinnedvm_[i].clear(); + for (auto& stubsbinnedvm : stubsbinnedvm_) { + stubsbinnedvm.clear(); } } void VMStubsTEMemory::writeStubs(bool first) { - openFile(first, "../data/MemPrints/VMStubsTE/VMStubs_"); + const string dirVM = settings_.memPath() + "VMStubsTE/"; + openFile(first, dirVM, "VMStubs_"); if (isinner_) { // inner VM for TE purpose for (unsigned int j = 0; j < stubsvm_.size(); j++) { @@ -262,8 +278,18 @@ void VMStubsTEMemory::setbendtable(std::vector vmbendtable) { } void VMStubsTEMemory::writeVMBendTable() { - ofstream outvmbendcut; - outvmbendcut.open(getName() + "_vmbendcut.tab"); + if (not std::filesystem::exists(settings_.tablePath())) { + int fail = system((string("mkdir -p ") + settings_.tablePath()).c_str()); + if (fail) + throw cms::Exception("BadDir") << __FILE__ << " " << __LINE__ << " could not create directory " + << settings_.tablePath(); + } + + const string fname = settings_.tablePath() + getName() + "_vmbendcut.tab"; + ofstream outvmbendcut(fname); + if (outvmbendcut.fail()) + throw cms::Exception("BadFile") << __FILE__ << " " << __LINE__ << " could not create file " << fname; + outvmbendcut << "{" << endl; unsigned int vmbendtableSize = vmbendtable_.size(); assert(vmbendtableSize == 16 || vmbendtableSize == 8); diff --git a/L1Trigger/TrackFindingTracklet/src/imath_HLS.cc b/L1Trigger/TrackFindingTracklet/src/imath_HLS.cc index 48cd864389a43..c3f5b3d1268ec 100644 --- a/L1Trigger/TrackFindingTracklet/src/imath_HLS.cc +++ b/L1Trigger/TrackFindingTracklet/src/imath_HLS.cc @@ -352,7 +352,7 @@ void VarBase::print_all(std::ofstream& fs, HLS) { } } -void VarBase::design_print(std::vector v, std::ofstream& fs, HLS) { +void VarBase::design_print(const std::vector& v, std::ofstream& fs, HLS) { //header of the module //inputs diff --git a/L1Trigger/TrackFindingTracklet/src/imath_Verilog.cc b/L1Trigger/TrackFindingTracklet/src/imath_Verilog.cc index e2e4d77463d4e..b5707da78929a 100644 --- a/L1Trigger/TrackFindingTracklet/src/imath_Verilog.cc +++ b/L1Trigger/TrackFindingTracklet/src/imath_Verilog.cc @@ -463,7 +463,7 @@ void VarBase::print_all(std::ofstream& fs, Verilog) { } } -void VarBase::design_print(std::vector v, std::ofstream& fs, Verilog) { +void VarBase::design_print(const std::vector& v, std::ofstream& fs, Verilog) { //step at which all the outputs should be valid int maxstep = 0; diff --git a/L1Trigger/TrackFindingTracklet/test/HybridTracks_cfg.py b/L1Trigger/TrackFindingTracklet/test/HybridTracks_cfg.py index 7ef38f91d0194..7b355253cc4e5 100644 --- a/L1Trigger/TrackFindingTracklet/test/HybridTracks_cfg.py +++ b/L1Trigger/TrackFindingTracklet/test/HybridTracks_cfg.py @@ -23,7 +23,7 @@ # input process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(10)) Source_Files = cms.untracked.vstring( - "/store/relval/CMSSW_11_0_0/RelValSingleMuFlatPt2To100/GEN-SIM-DIGI-RAW/110X_mcRun4_realistic_v2_2026D49noPU-v1/20000/F5E783E4-CF4A-4745-B4ED-6F1AA5E5C16F.root" + "/store/relval/CMSSW_11_2_0_pre5/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v3_2026D49PU200-v1/20000/FDFA00CE-FA93-0142-B187-99CBD4A43944.root" ) process.source = cms.Source("PoolSource", fileNames = Source_Files) diff --git a/L1Trigger/TrackFindingTracklet/test/INTERNAL/HistImp.cc b/L1Trigger/TrackFindingTracklet/test/INTERNAL/HistImp.cc index c2ddd60745a4f..1c8ab091724ba 100644 --- a/L1Trigger/TrackFindingTracklet/test/INTERNAL/HistImp.cc +++ b/L1Trigger/TrackFindingTracklet/test/INTERNAL/HistImp.cc @@ -1,4 +1,4 @@ -#include "L1Trigger/TrackFindingTracklet/interface/HistImp.h" +#include "L1Trigger/TrackFindingTracklet/test/INTERNAL/HistImp.h" #include "L1Trigger/TrackFindingTracklet/interface/slhcevent.h" #include "L1Trigger/TrackFindingTracklet/interface/Globals.h" @@ -6,29 +6,29 @@ using namespace std; using namespace trklet; HistImp::HistImp() { - h_file_ = 0; - h_layerresid_phi_L3_L1L2_ = 0; - h_layerresid_phi_L3_L1L2_match_ = 0; - h_layerresid_phif_L3_L1L2_ = 0; - h_layerresid_phif_L3_L1L2_match_ = 0; - h_layerresid_z_L3_L1L2_ = 0; - h_layerresid_z_L3_L1L2_match_ = 0; - h_layerresid_zf_L3_L1L2_ = 0; - h_layerresid_zf_L3_L1L2_match_ = 0; + h_file_ = nullptr; + h_layerresid_phi_L3_L1L2_ = nullptr; + h_layerresid_phi_L3_L1L2_match_ = nullptr; + h_layerresid_phif_L3_L1L2_ = nullptr; + h_layerresid_phif_L3_L1L2_match_ = nullptr; + h_layerresid_z_L3_L1L2_ = nullptr; + h_layerresid_z_L3_L1L2_match_ = nullptr; + h_layerresid_zf_L3_L1L2_ = nullptr; + h_layerresid_zf_L3_L1L2_match_ = nullptr; - h_diskresid_phi_D1_L1L2_ = 0; - h_diskresid_phi_D1_L1L2_match_ = 0; - h_diskresid_phif_D1_L1L2_ = 0; - h_diskresid_phif_D1_L1L2_match_ = 0; - h_diskresid_r_D1_L1L2_ = 0; - h_diskresid_r_D1_L1L2_match_ = 0; - h_diskresid_rf_D1_L1L2_ = 0; - h_diskresid_rf_D1_L1L2_match_ = 0; + h_diskresid_phi_D1_L1L2_ = nullptr; + h_diskresid_phi_D1_L1L2_match_ = nullptr; + h_diskresid_phif_D1_L1L2_ = nullptr; + h_diskresid_phif_D1_L1L2_match_ = nullptr; + h_diskresid_r_D1_L1L2_ = nullptr; + h_diskresid_r_D1_L1L2_match_ = nullptr; + h_diskresid_rf_D1_L1L2_ = nullptr; + h_diskresid_rf_D1_L1L2_match_ = nullptr; - h_rinv_L1L2_ = 0; - h_irinv_L1L2_ = 0; - h_rinvres_L1L2_ = 0; - h_irinvres_L1L2_ = 0; + h_rinv_L1L2_ = nullptr; + h_irinv_L1L2_ = nullptr; + h_rinvres_L1L2_ = nullptr; + h_irinvres_L1L2_ = nullptr; } void HistImp::open() { h_file_ = new TFile("fpgahist.root", "RECREATE"); } @@ -37,14 +37,14 @@ void HistImp::close() { if (h_file_) { h_file_->Write(); h_file_->Close(); - h_file_ = 0; + h_file_ = nullptr; } } void HistImp::bookLayerResidual() { TH1::AddDirectory(kTRUE); - assert(h_file_ != 0); + assert(h_file_ != nullptr); h_file_->cd(); h_layerresid_phi_L3_L1L2_ = new TH1F("L3 phiresid L1L2", "L3 phiresid L1L2", 100, -0.5, 0.5); @@ -62,7 +62,7 @@ void HistImp::bookLayerResidual() { void HistImp::bookDiskResidual() { TH1::AddDirectory(kTRUE); - assert(h_file_ != 0); + assert(h_file_ != nullptr); h_file_->cd(); h_diskresid_phi_D1_L1L2_ = new TH1F("D1 phiresid L1L2", "D1 phiresid L1L2", 100, -0.5, 0.5); @@ -80,7 +80,7 @@ void HistImp::bookDiskResidual() { void HistImp::bookTrackletParams() { TH1::AddDirectory(kTRUE); - assert(h_file_ != 0); + assert(h_file_ != nullptr); h_file_->cd(); h_rinv_L1L2_ = new TH1F("Tracklet rinv in L1L2", "Tracklet rinv in L1L2", 140, -0.007, 0.007); @@ -229,7 +229,7 @@ void HistImp::FillDiskResidual( void HistImp::bookSeedEff() { TH1::AddDirectory(kTRUE); - assert(h_file_ != 0); + assert(h_file_ != nullptr); h_file_->cd(); h_eff_eta_L1L2seed_ = diff --git a/L1Trigger/TrackFindingTracklet/test/INTERNAL/HistImp.h b/L1Trigger/TrackFindingTracklet/test/INTERNAL/HistImp.h index 25957724a05db..0e77ee1be017f 100644 --- a/L1Trigger/TrackFindingTracklet/test/INTERNAL/HistImp.h +++ b/L1Trigger/TrackFindingTracklet/test/INTERNAL/HistImp.h @@ -16,7 +16,7 @@ namespace trklet { public: HistImp(); - ~HistImp() = default; + ~HistImp() override = default; void open() override; void close() override; diff --git a/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker.cc b/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker.cc index d86c90494b1e6..d71e9c50f5072 100644 --- a/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker.cc +++ b/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker.cc @@ -165,6 +165,7 @@ class L1TrackNtupleMaker : public edm::EDAnalyzer { std::vector* m_trk_unknown; std::vector* m_trk_combinatoric; std::vector* m_trk_fake; //0 fake, 1 track from primary interaction, 2 secondary track + std::vector* m_trk_MVA1; std::vector* m_trk_matchtp_pdgid; std::vector* m_trk_matchtp_pt; std::vector* m_trk_matchtp_eta; @@ -203,6 +204,7 @@ class L1TrackNtupleMaker : public edm::EDAnalyzer { std::vector* m_matchtrk_chi2rphi; std::vector* m_matchtrk_chi2rz; std::vector* m_matchtrk_bendchi2; + std::vector* m_matchtrk_MVA1; std::vector* m_matchtrk_nstub; std::vector* m_matchtrk_lhits; std::vector* m_matchtrk_dhits; @@ -331,6 +333,7 @@ void L1TrackNtupleMaker::beginJob() { m_trk_unknown = new std::vector; m_trk_combinatoric = new std::vector; m_trk_fake = new std::vector; + m_trk_MVA1 = new std::vector; m_trk_matchtp_pdgid = new std::vector; m_trk_matchtp_pt = new std::vector; m_trk_matchtp_eta = new std::vector; @@ -367,6 +370,7 @@ void L1TrackNtupleMaker::beginJob() { m_matchtrk_chi2rphi = new std::vector; m_matchtrk_chi2rz = new std::vector; m_matchtrk_bendchi2 = new std::vector; + m_matchtrk_MVA1 = new std::vector; m_matchtrk_nstub = new std::vector; m_matchtrk_dhits = new std::vector; m_matchtrk_lhits = new std::vector; @@ -426,6 +430,7 @@ void L1TrackNtupleMaker::beginJob() { eventTree->Branch("trk_unknown", &m_trk_unknown); eventTree->Branch("trk_combinatoric", &m_trk_combinatoric); eventTree->Branch("trk_fake", &m_trk_fake); + eventTree->Branch("trk_MVA1", &m_trk_MVA1); eventTree->Branch("trk_matchtp_pdgid", &m_trk_matchtp_pdgid); eventTree->Branch("trk_matchtp_pt", &m_trk_matchtp_pt); eventTree->Branch("trk_matchtp_eta", &m_trk_matchtp_eta); @@ -467,6 +472,7 @@ void L1TrackNtupleMaker::beginJob() { eventTree->Branch("matchtrk_chi2rphi", &m_matchtrk_chi2rphi); eventTree->Branch("matchtrk_chi2rz", &m_matchtrk_chi2rz); eventTree->Branch("matchtrk_bendchi2", &m_matchtrk_bendchi2); + eventTree->Branch("matchtrk_MVA1", &m_matchtrk_MVA1); eventTree->Branch("matchtrk_nstub", &m_matchtrk_nstub); eventTree->Branch("matchtrk_lhits", &m_matchtrk_lhits); eventTree->Branch("matchtrk_dhits", &m_matchtrk_dhits); @@ -550,6 +556,7 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup m_trk_unknown->clear(); m_trk_combinatoric->clear(); m_trk_fake->clear(); + m_trk_MVA1->clear(); m_trk_matchtp_pdgid->clear(); m_trk_matchtp_pt->clear(); m_trk_matchtp_eta->clear(); @@ -587,6 +594,7 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup m_matchtrk_chi2rphi->clear(); m_matchtrk_chi2rz->clear(); m_matchtrk_bendchi2->clear(); + m_matchtrk_MVA1->clear(); m_matchtrk_nstub->clear(); m_matchtrk_lhits->clear(); m_matchtrk_dhits->clear(); @@ -860,6 +868,7 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup float tmp_trk_chi2rphi = iterL1Track->chi2XY(); float tmp_trk_chi2rz = iterL1Track->chi2Z(); float tmp_trk_bendchi2 = iterL1Track->stubPtConsistency(); + float tmp_trk_MVA1 = iterL1Track->trkMVA1(); std::vector >, TTStub > > stubRefs = iterL1Track->getStubRefs(); @@ -952,6 +961,7 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup m_trk_chi2rphi->push_back(tmp_trk_chi2rphi); m_trk_chi2rz->push_back(tmp_trk_chi2rz); m_trk_bendchi2->push_back(tmp_trk_bendchi2); + m_trk_MVA1->push_back(tmp_trk_MVA1); m_trk_nstub->push_back(tmp_trk_nstub); m_trk_dhits->push_back(tmp_trk_dhits); m_trk_lhits->push_back(tmp_trk_lhits); @@ -1320,6 +1330,7 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup float tmp_matchtrk_chi2rphi = -999; float tmp_matchtrk_chi2rz = -999; float tmp_matchtrk_bendchi2 = -999; + float tmp_matchtrk_MVA1 = -999; int tmp_matchtrk_nstub = -999; int tmp_matchtrk_dhits = -999; int tmp_matchtrk_lhits = -999; @@ -1345,6 +1356,7 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup tmp_matchtrk_chi2rphi = matchedTracks.at(i_track)->chi2XY(); tmp_matchtrk_chi2rz = matchedTracks.at(i_track)->chi2Z(); tmp_matchtrk_bendchi2 = matchedTracks.at(i_track)->stubPtConsistency(); + tmp_matchtrk_MVA1 = matchedTracks.at(i_track)->trkMVA1(); tmp_matchtrk_nstub = (int)matchedTracks.at(i_track)->getStubRefs().size(); tmp_matchtrk_seed = (int)matchedTracks.at(i_track)->trackSeedType(); tmp_matchtrk_hitpattern = (int)matchedTracks.at(i_track)->hitPattern(); @@ -1404,6 +1416,7 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup m_matchtrk_chi2rphi->push_back(tmp_matchtrk_chi2rphi); m_matchtrk_chi2rz->push_back(tmp_matchtrk_chi2rz); m_matchtrk_bendchi2->push_back(tmp_matchtrk_bendchi2); + m_matchtrk_MVA1->push_back(tmp_matchtrk_MVA1); m_matchtrk_nstub->push_back(tmp_matchtrk_nstub); m_matchtrk_dhits->push_back(tmp_matchtrk_dhits); m_matchtrk_lhits->push_back(tmp_matchtrk_lhits); diff --git a/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker_cfg.py b/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker_cfg.py index c7f6f3786a354..eb7cc7721df8f 100644 --- a/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker_cfg.py +++ b/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker_cfg.py @@ -12,7 +12,10 @@ ############################################################ GEOMETRY = "D49" -L1TRKALGO = 'HYBRID' # L1 tracking algorithm: 'HYBRID' (baseline, 4par fit) or 'HYBRID_DISPLACED' (extended, 5par fit) +# Set L1 tracking algorithm: +# 'HYBRID' (baseline, 4par fit) or 'HYBRID_DISPLACED' (extended, 5par fit). +# (Or legacy algos 'TMTT' or 'TRACKLET'). +L1TRKALGO = 'HYBRID' WRITE_DATA = False @@ -25,8 +28,7 @@ process.load('Configuration.StandardSequences.MagneticField_cff') process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.categories.append('Tracklet') -process.MessageLogger.categories.append('L1track') +process.MessageLogger.L1track=dict() process.MessageLogger.Tracklet = cms.untracked.PSet(limit = cms.untracked.int32(-1)) if GEOMETRY == "D49": @@ -47,18 +49,32 @@ # input and output ############################################################ -process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(10)) +process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(100)) -# Get list of MC datasets from repo, or specify yourself. +#--- To use MCsamples scripts, defining functions get*data*(), +#--- follow instructions https://cernbox.cern.ch/index.php/s/enCnnfUZ4cpK7mT -def getTxtFile(txtFileName): - return FileUtils.loadListFromFile(os.environ['CMSSW_BASE']+'/src/'+txtFileName) +#from MCsamples.Scripts.getCMSdata_cfi import * +#from MCsamples.Scripts.getCMSlocaldata_cfi import * if GEOMETRY == "D49": - inputMC = ["/store/relval/CMSSW_11_1_0_pre2/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200-v1/20000/F7BF4AED-51F1-9D47-B86D-6C3DDA134AB9.root"] - + # Read data from card files (defines getCMSdataFromCards()): + #from MCsamples.RelVal_1120.PU200_TTbar_14TeV_cfi import * + #inputMC = getCMSdataFromCards() + + # Or read .root files from directory on local computer: + #dirName = "$myDir/whatever/" + #inputMC=getCMSlocaldata(dirName) + + # Or read specified dataset (accesses CMS DB, so use this method only occasionally): + #dataName="/RelValTTbar_14TeV/CMSSW_11_2_0_pre5-PU25ns_110X_mcRun4_realistic_v3_2026D49PU200-v1/GEN-SIM-DIGI-RAW" + #inputMC=getCMSdata(dataName) + + # Or read specified .root file: + inputMC = ["/store/relval/CMSSW_11_2_0_pre5/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v3_2026D49PU200-v1/20000/FDFA00CE-FA93-0142-B187-99CBD4A43944.root"] + else: - print "this is not a valid geometry!!!" + print "this is not a valid geometry!!!" process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring(*inputMC)) @@ -106,8 +122,8 @@ def getTxtFile(txtFileName): # LEGACY ALGORITHM (EXPERTS ONLY): TRACKLET elif (L1TRKALGO == 'TRACKLET'): - print "\n WARNING - this is not a recommended algorithm! Please use HYBRID (HYBRID_DISPLACED)!" - print "\n To run the tracklet-only algorithm, please ensure you have commented out #define USEHYBRID in interface/Settings.h + recompiled! \n" + print "\n WARNING: This is not the baseline algorithm! Prefer HYBRID or HYBRID_DISPLACED!" + print "\n To run the Tracklet-only algorithm, ensure you have commented out 'CXXFLAGS=-DUSEHYBRID' in BuildFile.xml & recompiled! \n" process.TTTracksEmulation = cms.Path(process.L1HybridTracks) process.TTTracksEmulationWithTruth = cms.Path(process.L1HybridTracksWithAssociators) NHELIXPAR = 4 @@ -117,7 +133,7 @@ def getTxtFile(txtFileName): # LEGACY ALGORITHM (EXPERTS ONLY): TMTT elif (L1TRKALGO == 'TMTT'): - print "\n WARNING - this is not a recommended algorithm! Please use HYBRID (HYBRID_DISPLACED)! \n" + print "\n WARNING: This is not the baseline algorithm! Prefer HYBRID or HYBRID_DISPLACED! \n" process.load("L1Trigger.TrackFindingTMTT.TMTrackProducer_Ultimate_cff") L1TRK_PROC = process.TMTrackProducer L1TRK_NAME = "TMTrackProducer" @@ -168,7 +184,7 @@ def getTxtFile(txtFileName): TrackingVertexInputTag = cms.InputTag("mix", "MergedTrackTruth"), # tracking in jets (--> requires AK4 genjet collection present!) TrackingInJets = cms.bool(False), - GenJetInputTag = cms.InputTag("ak4GenJets", ""), + GenJetInputTag = cms.InputTag("ak4GenJets", "") ) process.ana = cms.Path(process.L1TrackNtuple) diff --git a/L1Trigger/TrackFindingTracklet/test/L1TrackNtuplePlot.C b/L1Trigger/TrackFindingTracklet/test/L1TrackNtuplePlot.C index b3ab4660b0bd4..6643d69673e39 100644 --- a/L1Trigger/TrackFindingTracklet/test/L1TrackNtuplePlot.C +++ b/L1Trigger/TrackFindingTracklet/test/L1TrackNtuplePlot.C @@ -23,6 +23,7 @@ #include "TProfile2D.h" #include "TMath.h" #include +#include "TSystem.h" #include #include @@ -2022,6 +2023,7 @@ void L1TrackNtuplePlot(TString type, TH1F* h3_resVsEta_ptRel_L = new TH1F("resVsEta_ptRel_L_gaus", ";|#eta|; #sigma(p_{T}) / p_{T}", nETARANGE, 0, 2.4); TH1F* h3_resVsEta_ptRel_H = new TH1F("resVsEta_ptRel_H_gaus", ";|#eta|; #sigma(p_{T}) / p_{T}", nETARANGE, 0, 2.4); + gSystem->mkdir("FitResults"); TString fitdir = "FitResults/"; for (int i = 0; i < nETARANGE; i++) { @@ -2409,6 +2411,7 @@ void L1TrackNtuplePlot(TString type, char ctxt[500]; TCanvas c; + gSystem->mkdir("TrkPlots"); TString DIR = "TrkPlots/"; // plots overlaying 68, 90, 99% confidence levels] diff --git a/L1Trigger/TrackFindingTracklet/test/L1TrackQualityPlot.C b/L1Trigger/TrackFindingTracklet/test/L1TrackQualityPlot.C new file mode 100644 index 0000000000000..0fa4aef25f682 --- /dev/null +++ b/L1Trigger/TrackFindingTracklet/test/L1TrackQualityPlot.C @@ -0,0 +1,680 @@ +// ---------------------------------------------------------------------------------------------------------------- +// Basic example ROOT script for making tracking performance plots using the ntuples produced by L1TrackNtupleMaker.cc +// +// e.g. in ROOT do: [0] .L L1TrackQualityPlot.C++ +// [1] L1TrackQualityPlot("TTbar_PU200_D49") +// +// By Claire Savard, July 2020 +// Based off of L1TrackNtuplePlot.C +// ---------------------------------------------------------------------------------------------------------------- + +#include "TROOT.h" +#include "TStyle.h" +#include "TLatex.h" +#include "TFile.h" +#include "TTree.h" +#include "TChain.h" +#include "TBranch.h" +#include "TLeaf.h" +#include "TCanvas.h" +#include "TLegend.h" +#include "TH1.h" +#include "TH2.h" +#include "TF1.h" +#include "TProfile.h" +#include "TProfile2D.h" +#include "TMath.h" +#include "TGraph.h" +#include "TError.h" +#include "TGraphErrors.h" +#include "TGraphPainter.h" +#include "TSystem.h" + +#include +#include +#include +#include +#include + +using namespace std; + +void SetPlotStyle(); + +// ---------------------------------------------------------------------------------------------------------------- +// Main script +// ---------------------------------------------------------------------------------------------------------------- + +void L1TrackQualityPlot(TString type, TString type_dir = "", TString treeName = "") { + // type: this is the name of the input file you want to process (minus ".root" extension) + // type_dir: this is the directory containing the input file you want to process. Note that this must end with a "/", as in "EventSets/" + + gROOT->SetBatch(); + gErrorIgnoreLevel = kWarning; + + SetPlotStyle(); + gSystem->mkdir("MVA_plots"); + + // ---------------------------------------------------------------------------------------------------------------- + // define input options + + // these are the LOOSE cuts, baseline scenario for efficiency and rate plots ==> configure as appropriate + int L1Tk_minNstub = 4; + float L1Tk_maxChi2 = 999999; + float L1Tk_maxChi2dof = 999999.; + + // ---------------------------------------------------------------------------------------------------------------- + // read ntuples + TChain* tree = new TChain("L1TrackNtuple" + treeName + "/eventTree"); + tree->Add(type_dir + type + ".root"); + + if (tree->GetEntries() == 0) { + cout << "File doesn't exist or is empty, returning..." + << endl; //cout's kept in this file as it is an example standalone plotting script, not running in central CMSSW + return; + } + + // ---------------------------------------------------------------------------------------------------------------- + // define leafs & branches + // all L1 tracks + vector* trk_pt; + vector* trk_eta; + vector* trk_phi; + vector* trk_chi2; + vector* trk_chi2rphi; + vector* trk_chi2rz; + vector* trk_nstub; + vector* trk_lhits; + vector* trk_dhits; + vector* trk_seed; + vector* trk_hitpattern; + vector* trk_phiSector; + vector* trk_fake; + vector* trk_genuine; + vector* trk_loose; + vector* trk_MVA1; + vector* trk_matchtp_pdgid; + + TBranch* b_trk_pt; + TBranch* b_trk_eta; + TBranch* b_trk_phi; + TBranch* b_trk_chi2; + TBranch* b_trk_chi2rphi; + TBranch* b_trk_chi2rz; + TBranch* b_trk_nstub; + TBranch* b_trk_lhits; + TBranch* b_trk_dhits; + TBranch* b_trk_phiSector; + TBranch* b_trk_seed; + TBranch* b_trk_hitpattern; + TBranch* b_trk_fake; + TBranch* b_trk_genuine; + TBranch* b_trk_loose; + TBranch* b_trk_MVA1; + TBranch* b_trk_matchtp_pdgid; + + trk_pt = 0; + trk_eta = 0; + trk_phi = 0; + trk_chi2 = 0; + trk_chi2rphi = 0; + trk_chi2rz = 0; + trk_nstub = 0; + trk_lhits = 0; + trk_dhits = 0; + trk_phiSector = 0; + trk_seed = 0; + trk_hitpattern = 0; + trk_fake = 0; + trk_genuine = 0; + trk_loose = 0; + trk_MVA1 = 0; + trk_matchtp_pdgid = 0; + + tree->SetBranchAddress("trk_pt", &trk_pt, &b_trk_pt); + tree->SetBranchAddress("trk_eta", &trk_eta, &b_trk_eta); + tree->SetBranchAddress("trk_phi", &trk_phi, &b_trk_phi); + tree->SetBranchAddress("trk_chi2", &trk_chi2, &b_trk_chi2); + tree->SetBranchAddress("trk_chi2rphi", &trk_chi2rphi, &b_trk_chi2rphi); + tree->SetBranchAddress("trk_chi2rz", &trk_chi2rz, &b_trk_chi2rz); + tree->SetBranchAddress("trk_nstub", &trk_nstub, &b_trk_nstub); + tree->SetBranchAddress("trk_lhits", &trk_lhits, &b_trk_lhits); + tree->SetBranchAddress("trk_dhits", &trk_dhits, &b_trk_dhits); + tree->SetBranchAddress("trk_phiSector", &trk_phiSector, &b_trk_phiSector); + tree->SetBranchAddress("trk_seed", &trk_seed, &b_trk_seed); + tree->SetBranchAddress("trk_hitpattern", &trk_hitpattern, &b_trk_hitpattern); + tree->SetBranchAddress("trk_fake", &trk_fake, &b_trk_fake); + tree->SetBranchAddress("trk_genuine", &trk_genuine, &b_trk_genuine); + tree->SetBranchAddress("trk_loose", &trk_loose, &b_trk_loose); + tree->SetBranchAddress("trk_MVA1", &trk_MVA1, &b_trk_MVA1); + tree->SetBranchAddress("trk_matchtp_pdgid", &trk_matchtp_pdgid, &b_trk_matchtp_pdgid); + + // ---------------------------------------------------------------------------------------------------------------- + // histograms + // ---------------------------------------------------------------------------------------------------------------- + + TH1F* h_trk_MVA1 = new TH1F("trk_MVA1", "; MVA1; L1 tracks", 50, 0, 1); + + TH1F* h_trk_MVA1_real = new TH1F("trk_MVA1_real", ";MVA1; L1 tracks", 50, 0, 1); + h_trk_MVA1_real->SetLineColor(3); + TH1F* h_trk_MVA1_fake = new TH1F("trk_MVA1_fake", ";MVA1; L1 tracks", 50, 0, 1); + h_trk_MVA1_fake->SetLineColor(4); + + // ---------------------------------------------------------------------------------------------------------------- + // * * * * * S T A R T O F A C T U A L R U N N I N G O N E V E N T S * * * * * + // ---------------------------------------------------------------------------------------------------------------- + + int nevt = tree->GetEntries(); + cout << "number of events = " << nevt << endl; + + // ---------------------------------------------------------------------------------------------------------------- + // event loop + vector MVA1s; + vector fakes; + vector etas; + vector pts; + vector pdgids; + for (int i = 0; i < nevt; i++) { + tree->GetEntry(i, 0); + + for (int it = 0; it < (int)trk_pt->size(); it++) { + // ---------------------------------------------------------------------------------------------------------------- + // track properties + + float MVA1 = trk_MVA1->at(it); + float fake = trk_fake->at(it); + float eta = trk_eta->at(it); + float pt = trk_pt->at(it); + float pdgid = trk_matchtp_pdgid->at(it); + + MVA1s.push_back(MVA1); + fakes.push_back(fake); + etas.push_back(eta); + pts.push_back(pt); + pdgids.push_back(pdgid); + + h_trk_MVA1->Fill(MVA1); + if (fake == 1.) + h_trk_MVA1_real->Fill(MVA1); + else if (fake == 0.) + h_trk_MVA1_fake->Fill(MVA1); + } + } + + // ------------------------------------------------------------------------------------------- + // create ROC curve + // ROC = Receiver Operating Characteristic Curve, a plot of True Positive Rate vs False Positive Rate + // TPR = True Positive Rate or Identification efficiency, fraction of real tracks correctly identified as real + // FPR = False Positive Rate or Fake Rate, fraction of fake tracks incorrectly identified as real + // dt = Decision Threshold or cut on the MVA output, below this identify track as fake, above identify as real + // ------------------------------------------------------------------------------------------- + + vector TPR, TPR_mu, TPR_el, TPR_had; + vector FPR; + vector dec_thresh; + int n = 100; //num of entries on ROC curve + for (int i = 0; i < n; i++) { + float dt = (float)i / (n - 1); //make sure it starts at (0,0) and ends at (1,1) + float TP = 0, TP_mu = 0, TP_el = 0, TP_had = 0; //True Positives + float FP = 0; //False Positives + float P = 0, P_mu = 0, P_el = 0, P_had = 0; //Total Positives + float N = 0; //Total Negatives + for (int k = 0; k < (int)MVA1s.size(); k++) { + if (fakes.at(k)) { + P++; + if (MVA1s.at(k) > dt) + TP++; + if (abs(pdgids.at(k)) == 13) { //muons + P_mu++; + if (MVA1s.at(k) > dt) + TP_mu++; + } else if (abs(pdgids.at(k)) == 11) { //electrons + P_el++; + if (MVA1s.at(k) > dt) + TP_el++; + } else if (abs(pdgids.at(k)) > 37 && abs(pdgids.at(k)) != 999) { //hadrons + P_had++; + if (MVA1s.at(k) > dt) + TP_had++; + } + } else { + N++; + if (MVA1s.at(k) > dt) + FP++; + } + } + TPR.push_back((float)TP / P); + TPR_mu.push_back((float)TP_mu / P_mu); + TPR_el.push_back((float)TP_el / P_el); + TPR_had.push_back((float)TP_had / P_had); + FPR.push_back((float)FP / N); + dec_thresh.push_back(dt); + } + + // calculate AUC (Area under the ROC curve) + float AUC = 0., AUC_mu = 0., AUC_el = 0., AUC_had = 0.; + for (int i = 0; i < n - 1; i++) { + AUC += (TPR[i] + TPR[i + 1]) / 2 * (FPR[i] - FPR[i + 1]); + AUC_mu += (TPR_mu[i] + TPR_mu[i + 1]) / 2 * (FPR[i] - FPR[i + 1]); + AUC_el += (TPR_el[i] + TPR_el[i + 1]) / 2 * (FPR[i] - FPR[i + 1]); + AUC_had += (TPR_had[i] + TPR_had[i + 1]) / 2 * (FPR[i] - FPR[i + 1]); + } + + TGraph* ROC = new TGraph(n, FPR.data(), TPR.data()); + ROC->SetName("ROC"); + ROC->SetTitle(("ROC curve (AUC = " + to_string(AUC) + "); FPR; TPR").c_str()); + ROC->SetLineWidth(4); + + TGraph* ROC_mu = new TGraph(n, FPR.data(), TPR_mu.data()); + ROC_mu->SetName("ROC_mu"); + ROC_mu->SetTitle(("ROC curve (muons, AUC = " + to_string(AUC_mu) + "); FPR; TPR").c_str()); + ROC_mu->SetLineWidth(4); + + TGraph* ROC_el = new TGraph(n, FPR.data(), TPR_el.data()); + ROC_el->SetName("ROC_el"); + ROC_el->SetTitle(("ROC curve (electrons, AUC = " + to_string(AUC_el) + "); FPR; TPR").c_str()); + ROC_el->SetLineWidth(4); + + TGraph* ROC_had = new TGraph(n, FPR.data(), TPR_had.data()); + ROC_had->SetName("ROC_had"); + ROC_had->SetTitle(("ROC curve (hadrons, AUC = " + to_string(AUC_had) + "); FPR; TPR").c_str()); + ROC_had->SetLineWidth(4); + + TGraph* TPR_vs_dt = new TGraph(n, dec_thresh.data(), TPR.data()); + TPR_vs_dt->SetName("TPR_vs_dt"); + TPR_vs_dt->SetTitle("TPR vs decision threshold; decision thresh.; TPR"); + TPR_vs_dt->SetLineColor(3); + TPR_vs_dt->SetLineWidth(4); + + TGraph* FPR_vs_dt = new TGraph(n, dec_thresh.data(), FPR.data()); + FPR_vs_dt->SetName("FPR_vs_dt"); + FPR_vs_dt->SetTitle("FPR vs decision threshold; decision thresh.; FPR"); + FPR_vs_dt->SetLineColor(4); + FPR_vs_dt->SetLineWidth(4); + + TGraph* TPR_vs_dt_mu = new TGraph(n, dec_thresh.data(), TPR_mu.data()); + TPR_vs_dt_mu->SetName("TPR_vs_dt_mu"); + TPR_vs_dt_mu->SetTitle("TPR vs decision threshold (muons); decision thresh.; TPR"); + TPR_vs_dt_mu->SetLineColor(3); + TPR_vs_dt_mu->SetLineWidth(4); + + TGraph* TPR_vs_dt_el = new TGraph(n, dec_thresh.data(), TPR_el.data()); + TPR_vs_dt_el->SetName("TPR_vs_dt_el"); + TPR_vs_dt_el->SetTitle("TPR vs decision threshold (electrons); decision thresh.; TPR"); + TPR_vs_dt_el->SetLineColor(3); + TPR_vs_dt_el->SetLineWidth(4); + + TGraph* TPR_vs_dt_had = new TGraph(n, dec_thresh.data(), TPR_had.data()); + TPR_vs_dt_had->SetName("TPR_vs_dt_had"); + TPR_vs_dt_had->SetTitle("TPR vs decision threshold (hadrons); decision thresh.; TPR"); + TPR_vs_dt_had->SetLineColor(3); + TPR_vs_dt_had->SetLineWidth(4); + + // ------------------------------------------------------------------------------------------- + // create TPR vs. eta and FPR vs. eta + // ------------------------------------------------------------------------------------------- + + vector TPR_eta, TPR_eta_mu, TPR_eta_el, TPR_eta_had; + vector TPR_eta_err, TPR_eta_err_mu, TPR_eta_err_el, TPR_eta_err_had; + vector FPR_eta, FPR_eta_err; + vector eta_range, eta_range_err; + n = 20; + float eta_low = -2.4; + float eta_high = 2.4; + float eta_temp = eta_low; + float eta_step = (eta_high - eta_low) / n; + float dt = .5; + for (int ct = 0; ct < n; ct++) { + float TP = 0, TP_mu = 0, TP_el = 0, TP_had = 0; + float FP = 0; + float P = 0, P_mu = 0, P_el = 0, P_had = 0; + float N = 0; + for (int k = 0; k < (int)etas.size(); k++) { + if (etas.at(k) > eta_temp && etas.at(k) <= (eta_temp + eta_step)) { + if (fakes.at(k)) { + P++; + if (MVA1s.at(k) > dt) + TP++; + if (abs(pdgids.at(k)) == 13) { //muons + P_mu++; + if (MVA1s.at(k) > dt) + TP_mu++; + } else if (abs(pdgids.at(k)) == 11) { //electrons + P_el++; + if (MVA1s.at(k) > dt) + TP_el++; + } else if (abs(pdgids.at(k)) > 37 && abs(pdgids.at(k)) != 999) { //hadrons + P_had++; + if (MVA1s.at(k) > dt) + TP_had++; + } + } else { + N++; + if (MVA1s.at(k) > dt) + FP++; + } + } + } + + //use min function to return 0 if no data filled + TPR_eta.push_back(min(TP / P, P)); + TPR_eta_mu.push_back(min(TP_mu / P_mu, P_mu)); + TPR_eta_el.push_back(min(TP_el / P_el, P_el)); + TPR_eta_had.push_back(min(TP_had / P_had, P_had)); + TPR_eta_err.push_back(min((float)sqrt(TP * (P - TP) / pow(P, 3)), P)); + TPR_eta_err_mu.push_back(min((float)sqrt(TP_mu * (P_mu - TP_mu) / pow(P_mu, 3)), P_mu)); + TPR_eta_err_el.push_back(min((float)sqrt(TP_mu * (P_el - TP_el) / pow(P_el, 3)), P_el)); + TPR_eta_err_had.push_back(min((float)sqrt(TP_had * (P_had - TP_had) / pow(P_had, 3)), P_had)); + + FPR_eta.push_back(min(FP / N, N)); + FPR_eta_err.push_back(min((float)sqrt(FP * (N - FP) / pow(N, 3)), N)); + + //fill eta range + eta_range.push_back(eta_temp + eta_step / 2); + eta_range_err.push_back(eta_step / 2); + + eta_temp += eta_step; + } + + TGraphErrors* TPR_vs_eta = + new TGraphErrors(n, eta_range.data(), TPR_eta.data(), eta_range_err.data(), TPR_eta_err.data()); + TPR_vs_eta->SetName("TPR_vs_eta"); + TPR_vs_eta->SetTitle("TPR vs. #eta; #eta; TPR"); + + TGraphErrors* FPR_vs_eta = + new TGraphErrors(n, eta_range.data(), FPR_eta.data(), eta_range_err.data(), FPR_eta_err.data()); + FPR_vs_eta->SetName("FPR_vs_eta"); + FPR_vs_eta->SetTitle("FPR vs. #eta; #eta; FPR"); + + TGraphErrors* TPR_vs_eta_mu = + new TGraphErrors(n, eta_range.data(), TPR_eta_mu.data(), eta_range_err.data(), TPR_eta_err_mu.data()); + TPR_vs_eta_mu->SetName("TPR_vs_eta_mu"); + TPR_vs_eta_mu->SetTitle("TPR vs. #eta (muons); #eta; TPR"); + + TGraphErrors* TPR_vs_eta_el = + new TGraphErrors(n, eta_range.data(), TPR_eta_el.data(), eta_range_err.data(), TPR_eta_err_el.data()); + TPR_vs_eta_el->SetName("TPR_vs_eta_el"); + TPR_vs_eta_el->SetTitle("TPR vs. #eta (electrons); #eta; TPR"); + + TGraphErrors* TPR_vs_eta_had = + new TGraphErrors(n, eta_range.data(), TPR_eta_had.data(), eta_range_err.data(), TPR_eta_err_had.data()); + TPR_vs_eta_had->SetName("TPR_vs_eta_had"); + TPR_vs_eta_had->SetTitle("TPR vs. #eta (hadrons); #eta; TPR"); + + // ------------------------------------------------------------------------------------------- + // create TPR vs. pt and FPR vs. pt + // ------------------------------------------------------------------------------------------- + + vector TPR_pt, TPR_pt_mu, TPR_pt_el, TPR_pt_had; + vector TPR_pt_err, TPR_pt_err_mu, TPR_pt_err_el, TPR_pt_err_had; + vector FPR_pt, FPR_pt_err; + vector pt_range, pt_range_err; + n = 10; + float logpt_low = log10(2); //set low pt in log + float logpt_high = log10(100); //set high pt in log + float logpt_temp = logpt_low; + float logpt_step = (logpt_high - logpt_low) / n; + dt = .5; + for (int ct = 0; ct < n; ct++) { + float TP = 0, TP_mu = 0, TP_el = 0, TP_had = 0; + float FP = 0; + float P = 0, P_mu = 0, P_el = 0, P_had = 0; + float N = 0; + for (int k = 0; k < (int)pts.size(); k++) { + if (pts.at(k) > pow(10, logpt_temp) && pts.at(k) <= (pow(10, logpt_temp + logpt_step))) { + if (fakes.at(k)) { + P++; + if (MVA1s.at(k) > dt) + TP++; + if (abs(pdgids.at(k)) == 13) { //muons + P_mu++; + if (MVA1s.at(k) > dt) + TP_mu++; + } else if (abs(pdgids.at(k)) == 11) { //electrons + P_el++; + if (MVA1s.at(k) > dt) + TP_el++; + } else if (abs(pdgids.at(k)) > 37 && abs(pdgids.at(k)) != 999) { //hadrons + P_had++; + if (MVA1s.at(k) > dt) + TP_had++; + } + } else { + N++; + if (MVA1s.at(k) > dt) + FP++; + } + } + } + + //use min function to return 0 if no data filled + TPR_pt.push_back(min(TP / P, P)); + TPR_pt_mu.push_back(min(TP_mu / P_mu, P_mu)); + TPR_pt_el.push_back(min(TP_el / P_el, P_el)); + TPR_pt_had.push_back(min(TP_had / P_had, P_had)); + TPR_pt_err.push_back(min((float)sqrt(TP * (P - TP) / pow(P, 3)), P)); + TPR_pt_err_mu.push_back(min((float)sqrt(TP_mu * (P_mu - TP_mu) / pow(P_mu, 3)), P_mu)); + TPR_pt_err_el.push_back(min((float)sqrt(TP_el * (P_el - TP_el) / pow(P_el, 3)), P_el)); + TPR_pt_err_had.push_back(min((float)sqrt(TP_had * (P_had - TP_had) / pow(P_had, 3)), P_had)); + + FPR_pt.push_back(min(FP / N, N)); + FPR_pt_err.push_back(min((float)sqrt(FP * (N - FP) / pow(N, 3)), N)); + + //fill pt range + pt_range.push_back((pow(10, logpt_temp) + pow(10, logpt_temp + logpt_step)) / 2); //halfway in bin + pt_range_err.push_back((pow(10, logpt_temp + logpt_step) - pow(10, logpt_temp)) / 2); + + logpt_temp += logpt_step; + } + + TGraphErrors* TPR_vs_pt = new TGraphErrors(n, pt_range.data(), TPR_pt.data(), pt_range_err.data(), TPR_pt_err.data()); + TPR_vs_pt->SetName("TPR_vs_pt"); + TPR_vs_pt->SetTitle("TPR vs. p_{T}; p_{T}; TPR"); + + TGraphErrors* FPR_vs_pt = new TGraphErrors(n, pt_range.data(), FPR_pt.data(), pt_range_err.data(), FPR_pt_err.data()); + FPR_vs_pt->SetName("FPR_vs_pt"); + FPR_vs_pt->SetTitle("FPR vs. p_{T}; p_{T}; FPR"); + + TGraphErrors* TPR_vs_pt_mu = + new TGraphErrors(n, pt_range.data(), TPR_pt_mu.data(), pt_range_err.data(), TPR_pt_err_mu.data()); + TPR_vs_pt_mu->SetName("TPR_vs_pt_mu"); + TPR_vs_pt_mu->SetTitle("TPR vs. p_{T} (muons); p_{T}; TPR"); + + TGraphErrors* TPR_vs_pt_el = + new TGraphErrors(n, pt_range.data(), TPR_pt_el.data(), pt_range_err.data(), TPR_pt_err_el.data()); + TPR_vs_pt_el->SetName("TPR_vs_pt_el"); + TPR_vs_pt_el->SetTitle("TPR vs. p_{T} (electrons); p_{T}; TPR"); + + TGraphErrors* TPR_vs_pt_had = + new TGraphErrors(n, pt_range.data(), TPR_pt_had.data(), pt_range_err.data(), TPR_pt_err_had.data()); + TPR_vs_pt_had->SetName("TPR_vs_pt_had"); + TPR_vs_pt_had->SetTitle("TPR vs. p_{T} (hadrons); p_{T}; TPR"); + + // ------------------------------------------------------------------------------------------- + // output file for histograms and graphs + // ------------------------------------------------------------------------------------------- + + TFile* fout = new TFile(type_dir + "MVAoutput_" + type + treeName + ".root", "recreate"); + TCanvas c; + + // ------------------------------------------------------------------------------------------- + // draw and save plots + // ------------------------------------------------------------------------------------------- + + h_trk_MVA1->Draw(); + h_trk_MVA1->Write(); + c.SaveAs("MVA_plots/trk_MVA.pdf"); + + h_trk_MVA1_real->Draw(); + h_trk_MVA1_fake->Draw("same"); + h_trk_MVA1_fake->SetTitle("Performance vs. decision threshold; decision thresh.; performance measure"); + TLegend* leg1 = new TLegend(); + leg1->AddEntry(h_trk_MVA1_real, "real", "l"); + leg1->AddEntry(h_trk_MVA1_fake, "fake", "l"); + leg1->Draw("same"); + c.Write("trk_MVA_rf"); + c.SaveAs("MVA_plots/trk_MVA_rf.pdf"); + + ROC->Draw("AL"); + ROC->Write(); + c.SaveAs("MVA_plots/ROC.pdf"); + + ROC_mu->Draw("AL"); + ROC_mu->Write(); + c.SaveAs("MVA_plots/ROC_mu.pdf"); + + ROC_el->Draw("AL"); + ROC_el->Write(); + c.SaveAs("MVA_plots/ROC_el.pdf"); + + ROC_had->Draw("AL"); + ROC_had->Write(); + c.SaveAs("MVA_plots/ROC_had.pdf"); + c.Clear(); + + TPR_vs_dt->Draw(); + FPR_vs_dt->Draw("same"); + TPR_vs_dt->SetTitle("Performance vs. decision threshold; decision thresh.; performance measure"); + TLegend* leg2 = new TLegend(); + leg2->AddEntry(TPR_vs_dt, "TPR", "l"); + leg2->AddEntry(FPR_vs_dt, "FPR", "l"); + leg2->Draw("same"); + c.Write("TPR_FPR_vs_dt"); + c.SaveAs("MVA_plots/TPR_FPR_vs_dt.pdf"); + c.Clear(); + + TPR_vs_dt_mu->Draw(); + FPR_vs_dt->Draw("same"); + TPR_vs_dt_mu->SetTitle("Performance vs. decision threshold (muons); decision thresh.; performance measure"); + TLegend* leg3 = new TLegend(); + leg3->AddEntry(TPR_vs_dt_mu, "TPR", "l"); + leg3->AddEntry(FPR_vs_dt, "FPR", "l"); + leg3->Draw("same"); + c.Write("TPR_FPR_vs_dt_mu"); + c.SaveAs("MVA_plots/TPR_FPR_vs_dt_mu.pdf"); + c.Clear(); + + TPR_vs_dt_el->Draw(); + FPR_vs_dt->Draw("same"); + TPR_vs_dt_el->SetTitle("Performance vs. decision threshold (electrons); decision thresh.; performance measure"); + TLegend* leg4 = new TLegend(); + leg4->AddEntry(TPR_vs_dt_el, "TPR", "l"); + leg4->AddEntry(FPR_vs_dt, "FPR", "l"); + leg4->Draw("same"); + c.Write("TPR_FPR_vs_dt_el"); + c.SaveAs("MVA_plots/TPR_FPR_vs_dt_el.pdf"); + c.Clear(); + + TPR_vs_dt_had->Draw(); + FPR_vs_dt->Draw("same"); + TPR_vs_dt_had->SetTitle("Performance vs. decision threshold (hadrons); decision thresh.; performance measure"); + TLegend* leg5 = new TLegend(); + leg5->AddEntry(TPR_vs_dt_had, "TPR", "l"); + leg5->AddEntry(FPR_vs_dt, "FPR", "l"); + leg5->Draw("same"); + c.Write("TPR_FPR_vs_dt_had"); + c.SaveAs("MVA_plots/TPR_FPR_vs_dt_had.pdf"); + c.Clear(); + + TPR_vs_eta->Draw("ap"); + TPR_vs_eta->Write(); + c.SaveAs("MVA_plots/TPR_vs_eta.pdf"); + + TPR_vs_eta_mu->Draw("ap"); + TPR_vs_eta_mu->Write(); + c.SaveAs("MVA_plots/TPR_vs_eta_mu.pdf"); + + TPR_vs_eta_el->Draw("ap"); + TPR_vs_eta_el->Write(); + c.SaveAs("MVA_plots/TPR_vs_eta_el.pdf"); + + TPR_vs_eta_had->Draw("ap"); + TPR_vs_eta_had->Write(); + c.SaveAs("MVA_plots/TPR_vs_eta_had.pdf"); + + FPR_vs_eta->Draw("ap"); + FPR_vs_eta->Write(); + c.SaveAs("MVA_plots/FPR_vs_eta.pdf"); + + TPR_vs_pt->Draw("ap"); + TPR_vs_pt->Write(); + c.SaveAs("MVA_plots/TPR_vs_pt.pdf"); + + TPR_vs_pt_mu->Draw("ap"); + TPR_vs_pt_mu->Write(); + c.SaveAs("MVA_plots/TPR_vs_pt_mu.pdf"); + + TPR_vs_pt_el->Draw("ap"); + TPR_vs_pt_el->Write(); + c.SaveAs("MVA_plots/TPR_vs_pt_el.pdf"); + + TPR_vs_pt_had->Draw("ap"); + TPR_vs_pt_had->Write(); + c.SaveAs("MVA_plots/TPR_vs_pt_had.pdf"); + + FPR_vs_pt->Draw("ap"); + FPR_vs_pt->Write(); + c.SaveAs("MVA_plots/FPR_vs_pt.pdf"); + + fout->Close(); +} + +void SetPlotStyle() { + // from ATLAS plot style macro + + // use plain black on white colors + gStyle->SetFrameBorderMode(0); + gStyle->SetFrameFillColor(0); + gStyle->SetCanvasBorderMode(0); + gStyle->SetCanvasColor(0); + gStyle->SetPadBorderMode(0); + gStyle->SetPadColor(0); + gStyle->SetStatColor(0); + gStyle->SetHistLineColor(1); + + gStyle->SetPalette(1); + + // set the paper & margin sizes + gStyle->SetPaperSize(20, 26); + gStyle->SetPadTopMargin(0.05); + gStyle->SetPadRightMargin(0.05); + gStyle->SetPadBottomMargin(0.16); + gStyle->SetPadLeftMargin(0.16); + + // set title offsets (for axis label) + gStyle->SetTitleXOffset(1.4); + gStyle->SetTitleYOffset(1.4); + + // use large fonts + gStyle->SetTextFont(42); + gStyle->SetTextSize(0.05); + gStyle->SetLabelFont(42, "x"); + gStyle->SetTitleFont(42, "x"); + gStyle->SetLabelFont(42, "y"); + gStyle->SetTitleFont(42, "y"); + gStyle->SetLabelFont(42, "z"); + gStyle->SetTitleFont(42, "z"); + gStyle->SetLabelSize(0.05, "x"); + gStyle->SetTitleSize(0.05, "x"); + gStyle->SetLabelSize(0.05, "y"); + gStyle->SetTitleSize(0.05, "y"); + gStyle->SetLabelSize(0.05, "z"); + gStyle->SetTitleSize(0.05, "z"); + + // use bold lines and markers + //gStyle->SetMarkerStyle(20); + gStyle->SetMarkerSize(1.2); + gStyle->SetHistLineWidth(4.); + gStyle->SetLineStyleString(4, "[12 12]"); + + // get rid of error bar caps + gStyle->SetEndErrorSize(0.); + + // do not display any of the standard histogram decorations + gStyle->SetOptTitle(0); + gStyle->SetOptStat(0); + gStyle->SetOptFit(0); + + // put tick marks on top and RHS of plots + gStyle->SetPadTickX(1); + gStyle->SetPadTickY(1); +} \ No newline at end of file diff --git a/L1Trigger/TrackFindingTracklet/test/Makefile b/L1Trigger/TrackFindingTracklet/test/Makefile index 634405731eac9..263ae484f31ac 100644 --- a/L1Trigger/TrackFindingTracklet/test/Makefile +++ b/L1Trigger/TrackFindingTracklet/test/Makefile @@ -242,4 +242,7 @@ clean: @rm -rf lib/ @rm -rf dummyIncl/ @rm -rf .deps/ + @rm -f *.pdf *.png + @rm -f allprojections.txt matchcalculator.txt matcheff.txt matchengine.txt matchprocessor.txt trackletcalculator.txt trackletengine.txt trackletprocessor.txt + diff --git a/L1Trigger/TrackFindingTracklet/test/WriteDesign.icc b/L1Trigger/TrackFindingTracklet/test/WriteDesign.icc deleted file mode 100644 index 740265c09a856..0000000000000 --- a/L1Trigger/TrackFindingTracklet/test/WriteDesign.icc +++ /dev/null @@ -1,648 +0,0 @@ -std::map > v; - -//////////////////////////////////////////////////////////////////////////// -// L1L2 -//////////////////////////////////////////////////////////////////////////// -v["L1L2"]; - -v.at("L1L2").push_back(&globals->ITC_L1L2()->rinv_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->phi0_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->t_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->z0_final); - -v.at("L1L2").push_back(&globals->ITC_L1L2()->phiL_0_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->phiL_1_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->phiL_2_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->phiL_3_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->zL_0_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->zL_1_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->zL_2_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->zL_3_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->der_phiL_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->der_zL_final); - -v.at("L1L2").push_back(&globals->ITC_L1L2()->phiD_0_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->phiD_1_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->phiD_2_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->phiD_3_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->phiD_4_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->rD_0_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->rD_1_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->rD_2_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->rD_3_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->rD_4_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->der_phiD_final); -v.at("L1L2").push_back(&globals->ITC_L1L2()->der_rD_final); - -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_trackpar); - -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_phiL_0); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_phiL_1); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_phiL_2); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_phiL_3); - -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_zL_0); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_zL_1); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_zL_2); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_zL_3); - -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_der_phiL); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_der_zL); - -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_phiD_0); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_phiD_1); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_phiD_2); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_phiD_3); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_phiD_4); - -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_rD_0); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_rD_1); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_rD_2); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_rD_3); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_rD_4); - -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_der_phiD); -v.at("L1L2").push_back(&globals->ITC_L1L2()->valid_der_rD); -//////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////// -// L3L4 -//////////////////////////////////////////////////////////////////////////// -v["L3L4"]; - -v.at("L3L4").push_back(&globals->ITC_L3L4()->rinv_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->phi0_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->t_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->z0_final); - -v.at("L3L4").push_back(&globals->ITC_L3L4()->phiL_0_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->phiL_1_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->phiL_2_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->phiL_3_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->zL_0_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->zL_1_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->zL_2_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->zL_3_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->der_phiL_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->der_zL_final); - -v.at("L3L4").push_back(&globals->ITC_L3L4()->phiD_0_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->phiD_1_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->phiD_2_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->phiD_3_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->phiD_4_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->rD_0_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->rD_1_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->rD_2_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->rD_3_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->rD_4_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->der_phiD_final); -v.at("L3L4").push_back(&globals->ITC_L3L4()->der_rD_final); - -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_trackpar); - -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_phiL_0); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_phiL_1); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_phiL_2); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_phiL_3); - -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_zL_0); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_zL_1); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_zL_2); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_zL_3); - -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_der_phiL); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_der_zL); - -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_phiD_0); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_phiD_1); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_phiD_2); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_phiD_3); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_phiD_4); - -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_rD_0); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_rD_1); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_rD_2); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_rD_3); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_rD_4); - -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_der_phiD); -v.at("L3L4").push_back(&globals->ITC_L3L4()->valid_der_rD); -//////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////// -// L5L6 -//////////////////////////////////////////////////////////////////////////// -v["L5L6"]; - -v.at("L5L6").push_back(&globals->ITC_L5L6()->rinv_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->phi0_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->t_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->z0_final); - -v.at("L5L6").push_back(&globals->ITC_L5L6()->phiL_0_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->phiL_1_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->phiL_2_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->phiL_3_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->zL_0_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->zL_1_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->zL_2_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->zL_3_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->der_phiL_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->der_zL_final); - -v.at("L5L6").push_back(&globals->ITC_L5L6()->phiD_0_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->phiD_1_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->phiD_2_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->phiD_3_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->phiD_4_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->rD_0_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->rD_1_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->rD_2_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->rD_3_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->rD_4_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->der_phiD_final); -v.at("L5L6").push_back(&globals->ITC_L5L6()->der_rD_final); - -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_trackpar); - -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_phiL_0); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_phiL_1); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_phiL_2); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_phiL_3); - -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_zL_0); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_zL_1); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_zL_2); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_zL_3); - -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_der_phiL); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_der_zL); - -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_phiD_0); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_phiD_1); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_phiD_2); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_phiD_3); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_phiD_4); - -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_rD_0); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_rD_1); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_rD_2); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_rD_3); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_rD_4); - -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_der_phiD); -v.at("L5L6").push_back(&globals->ITC_L5L6()->valid_der_rD); -//////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////// -// F1F2 -//////////////////////////////////////////////////////////////////////////// -v["F1F2"]; - -v.at("F1F2").push_back(&globals->ITC_F1F2()->rinv_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->phi0_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->t_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->z0_final); - -v.at("F1F2").push_back(&globals->ITC_F1F2()->phiL_0_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->phiL_1_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->phiL_2_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->zL_0_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->zL_1_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->zL_2_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->der_phiL_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->der_zL_final); - -v.at("F1F2").push_back(&globals->ITC_F1F2()->phiD_0_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->phiD_1_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->phiD_2_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->rD_0_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->rD_1_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->rD_2_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->der_phiD_final); -v.at("F1F2").push_back(&globals->ITC_F1F2()->der_rD_final); - -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_trackpar); - -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_phiL_0); -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_phiL_1); -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_phiL_2); - -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_zL_0); -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_zL_1); -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_zL_2); - -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_der_phiL); -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_der_zL); - -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_phiD_0); -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_phiD_1); -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_phiD_2); - -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_rD_0); -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_rD_1); -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_rD_2); - -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_der_phiD); -v.at("F1F2").push_back(&globals->ITC_F1F2()->valid_der_rD); -//////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////// -// B1B2 -//////////////////////////////////////////////////////////////////////////// -v["B1B2"]; - -v.at("B1B2").push_back(&globals->ITC_B1B2()->rinv_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->phi0_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->t_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->z0_final); - -v.at("B1B2").push_back(&globals->ITC_B1B2()->phiL_0_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->phiL_1_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->phiL_2_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->zL_0_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->zL_1_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->zL_2_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->der_phiL_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->der_zL_final); - -v.at("B1B2").push_back(&globals->ITC_B1B2()->phiD_0_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->phiD_1_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->phiD_2_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->rD_0_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->rD_1_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->rD_2_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->der_phiD_final); -v.at("B1B2").push_back(&globals->ITC_B1B2()->der_rD_final); - -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_trackpar); - -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_phiL_0); -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_phiL_1); -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_phiL_2); - -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_zL_0); -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_zL_1); -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_zL_2); - -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_der_phiL); -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_der_zL); - -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_phiD_0); -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_phiD_1); -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_phiD_2); - -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_rD_0); -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_rD_1); -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_rD_2); - -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_der_phiD); -v.at("B1B2").push_back(&globals->ITC_B1B2()->valid_der_rD); -//////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////// -// F3F4 -//////////////////////////////////////////////////////////////////////////// -v["F3F4"]; - -v.at("F3F4").push_back(&globals->ITC_F3F4()->rinv_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->phi0_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->t_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->z0_final); - -v.at("F3F4").push_back(&globals->ITC_F3F4()->phiL_0_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->phiL_1_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->phiL_2_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->zL_0_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->zL_1_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->zL_2_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->der_phiL_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->der_zL_final); - -v.at("F3F4").push_back(&globals->ITC_F3F4()->phiD_0_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->phiD_1_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->phiD_2_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->rD_0_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->rD_1_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->rD_2_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->der_phiD_final); -v.at("F3F4").push_back(&globals->ITC_F3F4()->der_rD_final); - -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_trackpar); - -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_phiL_0); -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_phiL_1); -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_phiL_2); - -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_zL_0); -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_zL_1); -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_zL_2); - -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_der_phiL); -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_der_zL); - -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_phiD_0); -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_phiD_1); -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_phiD_2); - -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_rD_0); -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_rD_1); -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_rD_2); - -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_der_phiD); -v.at("F3F4").push_back(&globals->ITC_F3F4()->valid_der_rD); -//////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////// -// B3B4 -//////////////////////////////////////////////////////////////////////////// -v["B3B4"]; - -v.at("B3B4").push_back(&globals->ITC_B3B4()->rinv_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->phi0_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->t_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->z0_final); - -v.at("B3B4").push_back(&globals->ITC_B3B4()->phiL_0_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->phiL_1_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->phiL_2_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->zL_0_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->zL_1_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->zL_2_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->der_phiL_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->der_zL_final); - -v.at("B3B4").push_back(&globals->ITC_B3B4()->phiD_0_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->phiD_1_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->phiD_2_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->rD_0_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->rD_1_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->rD_2_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->der_phiD_final); -v.at("B3B4").push_back(&globals->ITC_B3B4()->der_rD_final); - -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_trackpar); - -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_phiL_0); -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_phiL_1); -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_phiL_2); - -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_zL_0); -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_zL_1); -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_zL_2); - -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_der_phiL); -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_der_zL); - -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_phiD_0); -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_phiD_1); -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_phiD_2); - -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_rD_0); -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_rD_1); -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_rD_2); - -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_der_phiD); -v.at("B3B4").push_back(&globals->ITC_B3B4()->valid_der_rD); -//////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////// -// L1F1 -//////////////////////////////////////////////////////////////////////////// -v["L1F1"]; - -v.at("L1F1").push_back(&globals->ITC_L1F1()->rinv_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->phi0_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->t_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->z0_final); - -v.at("L1F1").push_back(&globals->ITC_L1F1()->phiL_0_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->phiL_1_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->phiL_2_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->zL_0_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->zL_1_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->zL_2_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->der_phiL_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->der_zL_final); - -v.at("L1F1").push_back(&globals->ITC_L1F1()->phiD_0_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->phiD_1_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->phiD_2_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->phiD_3_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->rD_0_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->rD_1_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->rD_2_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->rD_3_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->der_phiD_final); -v.at("L1F1").push_back(&globals->ITC_L1F1()->der_rD_final); - -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_trackpar); - -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_phiL_0); -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_phiL_1); -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_phiL_2); - -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_zL_0); -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_zL_1); -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_zL_2); - -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_der_phiL); -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_der_zL); - -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_phiD_0); -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_phiD_1); -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_phiD_2); -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_phiD_3); - -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_rD_0); -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_rD_1); -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_rD_2); -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_rD_3); - -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_der_phiD); -v.at("L1F1").push_back(&globals->ITC_L1F1()->valid_der_rD); -//////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////// -// L1B1 -//////////////////////////////////////////////////////////////////////////// -v["L1B1"]; - -v.at("L1B1").push_back(&globals->ITC_L1B1()->rinv_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->phi0_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->t_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->z0_final); - -v.at("L1B1").push_back(&globals->ITC_L1B1()->phiL_0_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->phiL_1_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->phiL_2_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->zL_0_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->zL_1_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->zL_2_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->der_phiL_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->der_zL_final); - -v.at("L1B1").push_back(&globals->ITC_L1B1()->phiD_0_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->phiD_1_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->phiD_2_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->phiD_3_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->rD_0_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->rD_1_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->rD_2_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->rD_3_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->der_phiD_final); -v.at("L1B1").push_back(&globals->ITC_L1B1()->der_rD_final); - -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_trackpar); - -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_phiL_0); -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_phiL_1); -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_phiL_2); - -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_zL_0); -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_zL_1); -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_zL_2); - -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_der_phiL); -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_der_zL); - -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_phiD_0); -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_phiD_1); -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_phiD_2); -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_phiD_3); - -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_rD_0); -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_rD_1); -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_rD_2); -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_rD_3); - -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_der_phiD); -v.at("L1B1").push_back(&globals->ITC_L1B1()->valid_der_rD); -//////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////// -// L2F1 -//////////////////////////////////////////////////////////////////////////// -v["L2F1"]; - -v.at("L2F1").push_back(&globals->ITC_L2F1()->rinv_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->phi0_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->t_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->z0_final); - -v.at("L2F1").push_back(&globals->ITC_L2F1()->phiL_0_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->phiL_1_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->phiL_2_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->zL_0_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->zL_1_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->zL_2_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->der_phiL_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->der_zL_final); - -v.at("L2F1").push_back(&globals->ITC_L2F1()->phiD_0_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->phiD_1_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->phiD_2_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->phiD_3_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->rD_0_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->rD_1_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->rD_2_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->rD_3_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->der_phiD_final); -v.at("L2F1").push_back(&globals->ITC_L2F1()->der_rD_final); - -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_trackpar); - -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_phiL_0); -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_phiL_1); -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_phiL_2); - -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_zL_0); -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_zL_1); -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_zL_2); - -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_der_phiL); -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_der_zL); - -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_phiD_0); -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_phiD_1); -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_phiD_2); -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_phiD_3); - -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_rD_0); -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_rD_1); -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_rD_2); -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_rD_3); - -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_der_phiD); -v.at("L2F1").push_back(&globals->ITC_L2F1()->valid_der_rD); -//////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////// -// L2B1 -//////////////////////////////////////////////////////////////////////////// -v["L2B1"]; - -v.at("L2B1").push_back(&globals->ITC_L2B1()->rinv_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->phi0_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->t_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->z0_final); - -v.at("L2B1").push_back(&globals->ITC_L2B1()->phiL_0_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->phiL_1_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->phiL_2_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->zL_0_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->zL_1_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->zL_2_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->der_phiL_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->der_zL_final); - -v.at("L2B1").push_back(&globals->ITC_L2B1()->phiD_0_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->phiD_1_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->phiD_2_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->phiD_3_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->rD_0_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->rD_1_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->rD_2_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->rD_3_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->der_phiD_final); -v.at("L2B1").push_back(&globals->ITC_L2B1()->der_rD_final); - -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_trackpar); - -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_phiL_0); -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_phiL_1); -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_phiL_2); - -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_zL_0); -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_zL_1); -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_zL_2); - -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_der_phiL); -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_der_zL); - -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_phiD_0); -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_phiD_1); -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_phiD_2); -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_phiD_3); - -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_rD_0); -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_rD_1); -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_rD_2); -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_rD_3); - -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_der_phiD); -v.at("L2B1").push_back(&globals->ITC_L2B1()->valid_der_rD); -//////////////////////////////////////////////////////////////////////////// - -for (const auto &calculator : v) { - const std::string &layer = calculator.first; - const std::vector v = calculator.second; - ofstream fv("TC_" + layer + (settings.writeVerilog() ? ".v" : ".cpp")); - - if (settings.writeVerilog()) - VarBase::design_print(v, fv, VarBase::verilog); - else - VarBase::design_print(v, fv, VarBase::hls); - fv.close(); -} diff --git a/L1Trigger/TrackFindingTracklet/test/WriteInvTables.icc b/L1Trigger/TrackFindingTracklet/test/WriteInvTables.icc deleted file mode 100644 index 6c1b3fcaf7ff4..0000000000000 --- a/L1Trigger/TrackFindingTracklet/test/WriteInvTables.icc +++ /dev/null @@ -1,83 +0,0 @@ -edm::LogVerbatim("Tracklet") << " Writing Inverse Tables"; - -ofstream finv; -void (*writeLUT)(const VarInv&, ofstream&) = NULL; -string extension = ""; -if (settings.writeInvTable()) { - writeLUT = [](const VarInv& x, ofstream& fs) -> void { return x.writeLUT(fs, VarBase::verilog); }; - extension = "h"; -} else { - writeLUT = [](const VarInv& x, ofstream& fs) -> void { return x.writeLUT(fs, VarBase::hls); }; - extension = "tab"; -} - -finv.open("TC_L1L2_drinv." + extension); -writeLUT(globals->ITC_L1L2()->drinv, finv); -finv.close(); -finv.open("TC_L1L2_invt." + extension); -writeLUT(globals->ITC_L1L2()->invt, finv); -finv.close(); -finv.open("TC_L3L4_drinv." + extension); -writeLUT(globals->ITC_L3L4()->drinv, finv); -finv.close(); -finv.open("TC_L3L4_invt." + extension); -writeLUT(globals->ITC_L3L4()->invt, finv); -finv.close(); -finv.open("TC_L5L6_drinv." + extension); -writeLUT(globals->ITC_L5L6()->drinv, finv); -finv.close(); -finv.open("TC_L5L6_invt." + extension); -writeLUT(globals->ITC_L5L6()->invt, finv); -finv.close(); - -finv.open("F1F2_drinv." + extension); -writeLUT(globals->ITC_F1F2()->drinv, finv); -finv.close(); -finv.open("F1F2_invt." + extension); -writeLUT(globals->ITC_F1F2()->invt, finv); -finv.close(); -finv.open("B1B2_drinv." + extension); -writeLUT(globals->ITC_B1B2()->drinv, finv); -finv.close(); -finv.open("B1B2_invt." + extension); -writeLUT(globals->ITC_B1B2()->invt, finv); -finv.close(); - -finv.open("F3F4_drinv." + extension); -writeLUT(globals->ITC_F3F4()->drinv, finv); -finv.close(); -finv.open("F3F4_invt." + extension); -writeLUT(globals->ITC_F3F4()->invt, finv); -finv.close(); -finv.open("B3B4_drinv." + extension); -writeLUT(globals->ITC_B3B4()->drinv, finv); -finv.close(); -finv.open("B3B4_invt." + extension); -writeLUT(globals->ITC_B3B4()->invt, finv); -finv.close(); - -finv.open("L1F1_drinv." + extension); -writeLUT(globals->ITC_L1F1()->drinv, finv); -finv.close(); -finv.open("L1F1_invt." + extension); -writeLUT(globals->ITC_L1F1()->invt, finv); -finv.close(); -finv.open("L1B1_drinv." + extension); -writeLUT(globals->ITC_L1B1()->drinv, finv); -finv.close(); -finv.open("L1B1_invt." + extension); -writeLUT(globals->ITC_L1B1()->invt, finv); -finv.close(); - -finv.open("L2F1_drinv." + extension); -writeLUT(globals->ITC_L2F1()->drinv, finv); -finv.close(); -finv.open("L2F1_invt." + extension); -writeLUT(globals->ITC_L2F1()->invt, finv); -finv.close(); -finv.open("L2B1_drinv." + extension); -writeLUT(globals->ITC_L2B1()->drinv, finv); -finv.close(); -finv.open("L2B1_invt." + extension); -writeLUT(globals->ITC_L2B1()->invt, finv); -finv.close(); diff --git a/L1Trigger/TrackFindingTracklet/test/fpga.cc b/L1Trigger/TrackFindingTracklet/test/fpga.cc index eb435ceea7057..b9c1786f4549f 100644 --- a/L1Trigger/TrackFindingTracklet/test/fpga.cc +++ b/L1Trigger/TrackFindingTracklet/test/fpga.cc @@ -62,6 +62,11 @@ int main(const int argc, const char **argv) { settings.setMemoryModulesFile("../data/memorymodules_" + settings.geomext() + ".dat"); settings.setWiresFile("../data/wires_" + settings.geomext() + ".dat"); + if (settings.extended()) { + settings.setTableTEDFile("../data/table_TED/table_TED_Dummy.txt"); + settings.setTableTREFile("../data/table_TRE/table_TRE_Dummy.txt"); + } + edm::LogVerbatim("Tracklet") << "cabling DTC links : " << settings.DTCLinkFile(); edm::LogVerbatim("Tracklet") << "module cabling : " << settings.moduleCablingFile(); edm::LogVerbatim("Tracklet") << "DTC link layer disk : " << settings.DTCLinkLayerDiskFile(); diff --git a/L1Trigger/TrackFindingTracklet/test/makeHists.csh b/L1Trigger/TrackFindingTracklet/test/makeHists.csh new file mode 100755 index 0000000000000..6ad4919784a6b --- /dev/null +++ b/L1Trigger/TrackFindingTracklet/test/makeHists.csh @@ -0,0 +1,51 @@ +#!/bin/tcsh +########################################################################### +# Create L1 track histograms & print summary of tracking performance, # +# by running ROOT macro L1TrackNtuplePlot.C on .root file # +# from L1TrackNtupleMaker_cfg.py # +# # +# To use: # +# makeHists.csh rootFileName # +# # +# (where rootFileName is the name of the input .root file, # +# including its directory name, if its not in the current one. # +# If rootFileName not specified, it defaults to TTbar_PU200_hybrid.root) # +########################################################################### + +if ($#argv == 0) then + set inputFullFileName = "TTbar_PU200_D49.root" +else + set inputFullFileName = $1 +endif + +if ( -e $inputFullFileName) then + echo "Processing $inputFullFileName" +else + echo "ERROR: Input file $inputFullFileName not found" + exit(1) +endif + +# Get directory name +set dirName = `dirname $inputFullFileName`/ +# Get file name without directory name +set fileName = `basename $inputFullFileName` +# Get stem of filename, removing ".root". +set inputFileStem = `echo $fileName | awk -F . '{print $1;}'` + +# Find plotting macro +eval `scramv1 runtime -csh` +set plotMacro = $CMSSW_BASE/src/L1Trigger/TrackFindingTracklet/test/L1TrackNtuplePlot.C +if ( -e $plotMacro ) then + # Run plotting macro + if (-e TrkPlots) rm -r TrkPlots + \root -b -q ${plotMacro}'("'${inputFileStem}'","'${dirName}'")' | tail -n 19 >! results.out + cat results.out + echo "Tracking performance summary written to results.out" + echo "Histograms written to TrkPlots/" +else if ( -e ../L1TrackNtuplePlot.C ) then +else + echo "ERROR: $plotMacro not found" + exit(2) +endif + +exit diff --git a/L1Trigger/TrackTrigger/BuildFile.xml b/L1Trigger/TrackTrigger/BuildFile.xml index 0a83e6f47fcdb..65f7dde7a9ba9 100644 --- a/L1Trigger/TrackTrigger/BuildFile.xml +++ b/L1Trigger/TrackTrigger/BuildFile.xml @@ -12,6 +12,7 @@ + diff --git a/L1Trigger/TrackTrigger/interface/TrackQuality.h b/L1Trigger/TrackTrigger/interface/TrackQuality.h new file mode 100644 index 0000000000000..4e241c607acb5 --- /dev/null +++ b/L1Trigger/TrackTrigger/interface/TrackQuality.h @@ -0,0 +1,77 @@ +/* +Track Quality Header file + +C.Brown 28/07/20 +*/ + +#ifndef L1Trigger_TrackTrigger_interface_TrackQuality_h +#define L1Trigger_TrackTrigger_interface_TrackQuality_h + +#include +#include +#include +#include +#include + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDProducer.h" + +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/ESHandle.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/L1TrackTrigger/interface/TTTrack.h" +#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" + +class TrackQuality { +public: + // Enum class used for determining prediction behaviour in setTrackQuality + enum class QualityAlgorithm { Cut, GBDT, NN, None }; + + //Default Constructor + TrackQuality(); + + TrackQuality(const edm::ParameterSet& qualityParams); + + //Default Destructor + ~TrackQuality() = default; + + // Controls the conversion between TTTrack features and ML model training features + std::vector featureTransform(TTTrack& aTrack, + std::vector const& featureNames); + + // Passed by reference a track without MVA filled, method fills the track's MVA field + void setTrackQuality(TTTrack& aTrack); + + // To set private member data + void setCutParameters(std::string const& AlgorithmString, + float maxZ0, + float maxEta, + float chi2dofMax, + float bendchi2Max, + float minPt, + int nStubmin); + + void setONNXModel(std::string const& AlgorithmString, + edm::FileInPath const& ONNXmodel, + std::string const& ONNXInputName, + std::vector const& featureNames); + +private: + // Private Member Data + QualityAlgorithm qualityAlgorithm_ = QualityAlgorithm::None; + edm::FileInPath ONNXmodel_; + std::string ONNXInputName_; + std::vector featureNames_; + float maxZ0_; + float maxEta_; + float chi2dofMax_; + float bendchi2Max_; + float minPt_; + int nStubsmin_; + float ONNXInvRScaling_; +}; +#endif diff --git a/L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py b/L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py new file mode 100644 index 0000000000000..6b19f0ede10af --- /dev/null +++ b/L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py @@ -0,0 +1,21 @@ +import FWCore.ParameterSet.Config as cms + +TrackQualityParams = cms.PSet(qualityAlgorithm = cms.string("GBDT"), #None, Cut, NN, GBDT + ONNXmodel = cms.FileInPath("L1Trigger/TrackTrigger/data/GBDT_default.onnx"), + # The ONNX model should be found at this path, if you want a local version of the model: + # git clone https://github.com/cms-data/L1Trigger-TrackTrigger.git L1Trigger/TrackTrigger/data + ONNXInputName = cms.string("feature_input"), + #Vector of strings of training features, in the order that the model was trained with + featureNames = cms.vstring(["phi", "eta", "z0", "bendchi2_bin", "nstub", + "nlaymiss_interior", "chi2rphi_bin", "chi2rz_bin"]), + # Parameters for cut based classifier, optimized for L1 Track MET + # (Table 3.7 The Phase-2 Upgrade of the CMS Level-1 Trigger http://cds.cern.ch/record/2714892) + maxZ0 = cms.double ( 15. ) , # in cm + maxEta = cms.double ( 2.4 ) , + chi2dofMax = cms.double( 40. ), + bendchi2Max = cms.double( 2.4 ), + minPt = cms.double( 2. ), # in GeV + nStubsmin = cms.int32( 4 ), + + ONNXInvRScale = cms.double(500) # Scaling InvR to same order of magnitude as other variables for ML models + ) diff --git a/L1Trigger/TrackTrigger/src/TrackQuality.cc b/L1Trigger/TrackTrigger/src/TrackQuality.cc new file mode 100644 index 0000000000000..2f2615ce1608b --- /dev/null +++ b/L1Trigger/TrackTrigger/src/TrackQuality.cc @@ -0,0 +1,306 @@ +/* +Track Quality Body file + +C.Brown & C.Savard 07/2020 +*/ + +#include "L1Trigger/TrackTrigger/interface/TrackQuality.h" +#include "PhysicsTools/ONNXRuntime/interface/ONNXRuntime.h" + +//Constructors + +TrackQuality::TrackQuality() {} + +TrackQuality::TrackQuality(const edm::ParameterSet& qualityParams) { + std::string AlgorithmString = qualityParams.getParameter("qualityAlgorithm"); + // Unpacks EDM parameter set itself to save unecessary processing within TrackProducers + if (AlgorithmString == "Cut") { + setCutParameters(AlgorithmString, + (float)qualityParams.getParameter("maxZ0"), + (float)qualityParams.getParameter("maxEta"), + (float)qualityParams.getParameter("chi2dofMax"), + (float)qualityParams.getParameter("bendchi2Max"), + (float)qualityParams.getParameter("minPt"), + qualityParams.getParameter("nStubsmin")); + } + + else { + setONNXModel(AlgorithmString, + qualityParams.getParameter("ONNXmodel"), + qualityParams.getParameter("ONNXInputName"), + qualityParams.getParameter>("featureNames")); + ONNXInvRScaling_ = qualityParams.getParameter("ONNXInvRScale"); + } +} + +std::vector TrackQuality::featureTransform(TTTrack& aTrack, + std::vector const& featureNames) { + // List input features for MVA in proper order below, the features options are + // {"log_chi2","log_chi2rphi","log_chi2rz","log_bendchi2","nstubs","lay1_hits","lay2_hits", + // "lay3_hits","lay4_hits","lay5_hits","lay6_hits","disk1_hits","disk2_hits","disk3_hits", + // "disk4_hits","disk5_hits","rinv","tanl","z0","dtot","ltot","chi2","chi2rz","chi2rphi", + // "bendchi2","pt","eta","nlaymiss_interior","phi","bendchi2_bin","chi2rz_bin","chi2rphi_bin"} + + std::vector transformedFeatures; + + // Define feature map, filled as features are generated + std::map feature_map; + + // The following converts the 7 bit hitmask in the TTTrackword to an expected + // 11 bit hitmask based on the eta of the track + std::vector hitpattern_binary = {0, 0, 0, 0, 0, 0, 0}; + std::vector hitpattern_expanded_binary = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + std::vector eta_bins = {0.0, 0.2, 0.41, 0.62, 0.9, 1.26, 1.68, 2.08, 2.4}; + + // Expected hitmap table, each row corresponds to an eta bin, each value corresponds to + // the expected layer in the expanded hit pattern. The expanded hit pattern should be + // 11 bits but contains a 12th element so this hitmap table is symmetric + int hitmap[8][7] = {{0, 1, 2, 3, 4, 5, 11}, + {0, 1, 2, 3, 4, 5, 11}, + {0, 1, 2, 3, 4, 5, 11}, + {0, 1, 2, 3, 4, 5, 11}, + {0, 1, 2, 3, 4, 5, 11}, + {0, 1, 2, 6, 7, 8, 9}, + {0, 1, 7, 8, 9, 10, 11}, + {0, 6, 7, 8, 9, 10, 11}}; + + // iterate through bits of the hitpattern and compare to 1 filling the hitpattern binary vector + int tmp_trk_hitpattern = aTrack.hitPattern(); + for (int i = 6; i >= 0; i--) { + int k = tmp_trk_hitpattern >> i; + if (k & 1) + hitpattern_binary[i] = 1; + } + + // calculate number of missed interior layers from hitpattern + int nbits = floor(log2(tmp_trk_hitpattern)) + 1; + int lay_i = 0; + int tmp_trk_nlaymiss_interior = 0; + bool seq = false; + for (int i = 0; i < nbits; i++) { + lay_i = ((1 << i) & tmp_trk_hitpattern) >> i; //0 or 1 in ith bit (right to left) + + if (lay_i && !seq) + seq = true; //sequence starts when first 1 found + if (!lay_i && seq) + tmp_trk_nlaymiss_interior++; + } + + float eta = abs(aTrack.eta()); + int eta_size = static_cast(eta_bins.size()); + // First iterate through eta bins + + for (int j = 1; j < eta_size; j++) { + if (eta < eta_bins[j] && eta >= eta_bins[j - 1]) // if track in eta bin + { + // Iterate through hitpattern binary + for (int k = 0; k <= 6; k++) + // Fill expanded binary entries using the expected hitmap table positions + hitpattern_expanded_binary[hitmap[j - 1][k]] = hitpattern_binary[k]; + break; + } + } + + int tmp_trk_ltot = 0; + //calculate number of layer hits + for (int i = 0; i < 6; ++i) { + tmp_trk_ltot += hitpattern_expanded_binary[i]; + } + + int tmp_trk_dtot = 0; + //calculate number of disk hits + for (int i = 6; i < 11; ++i) { + tmp_trk_dtot += hitpattern_expanded_binary[i]; + } + + // bin bendchi2 variable (bins from https://twiki.cern.ch/twiki/bin/viewauth/CMS/HybridDataFormat#Fitted_Tracks_written_by_KalmanF) + float tmp_trk_bendchi2 = aTrack.stubPtConsistency(); + std::array bendchi2_bins{{0, 0.5, 1.25, 2, 3, 5, 10, 50}}; + int n_bendchi2 = static_cast(bendchi2_bins.size()); + float tmp_trk_bendchi2_bin = -1; + for (int i = 0; i < n_bendchi2; i++) { + if (tmp_trk_bendchi2 >= bendchi2_bins[i] && tmp_trk_bendchi2 < bendchi2_bins[i + 1]) { + tmp_trk_bendchi2_bin = i; + break; + } + } + if (tmp_trk_bendchi2_bin < 0) + tmp_trk_bendchi2_bin = n_bendchi2; + + // bin chi2rphi variable (bins from https://twiki.cern.ch/twiki/bin/viewauth/CMS/HybridDataFormat#Fitted_Tracks_written_by_KalmanF) + float tmp_trk_chi2rphi = aTrack.chi2XY(); + std::array chi2rphi_bins{{0, 0.25, 0.5, 1, 2, 3, 5, 7, 10, 20, 40, 100, 200, 500, 1000, 3000}}; + int n_chi2rphi = static_cast(chi2rphi_bins.size()); + float tmp_trk_chi2rphi_bin = -1; + for (int i = 0; i < n_chi2rphi; i++) { + if (tmp_trk_chi2rphi >= chi2rphi_bins[i] && tmp_trk_chi2rphi < chi2rphi_bins[i + 1]) { + tmp_trk_chi2rphi_bin = i; + break; + } + } + if (tmp_trk_chi2rphi_bin < 0) + tmp_trk_chi2rphi_bin = n_chi2rphi; + + // bin chi2rz variable (bins from https://twiki.cern.ch/twiki/bin/viewauth/CMS/HybridDataFormat#Fitted_Tracks_written_by_KalmanF) + float tmp_trk_chi2rz = aTrack.chi2Z(); + std::array chi2rz_bins{{0, 0.25, 0.5, 1, 2, 3, 5, 7, 10, 20, 40, 100, 200, 500, 1000, 3000}}; + int n_chi2rz = static_cast(chi2rz_bins.size()); + float tmp_trk_chi2rz_bin = -1; + for (int i = 0; i < n_chi2rz; i++) { + if (tmp_trk_chi2rz >= chi2rz_bins[i] && tmp_trk_chi2rz < chi2rz_bins[i + 1]) { + tmp_trk_chi2rz_bin = i; + break; + } + } + if (tmp_trk_chi2rz_bin < 0) + tmp_trk_chi2rz_bin = n_chi2rz; + + // get the nstub + std::vector>, TTStub>> stubRefs = + aTrack.getStubRefs(); + + // fill the feature map + feature_map["nstub"] = stubRefs.size(); + feature_map["rinv"] = ONNXInvRScaling_ * abs(aTrack.rInv()); + feature_map["tanl"] = abs(aTrack.tanL()); + feature_map["z0"] = aTrack.z0(); + feature_map["phi"] = aTrack.phi(); + feature_map["pt"] = aTrack.momentum().perp(); + feature_map["eta"] = aTrack.eta(); + + float tmp_trk_chi2 = aTrack.chi2(); + feature_map["chi2"] = tmp_trk_chi2; + feature_map["log_chi2"] = log(tmp_trk_chi2); + + feature_map["chi2rphi"] = tmp_trk_chi2rphi; + feature_map["log_chi2rphi"] = log(tmp_trk_chi2rphi); + + feature_map["chi2rz"] = tmp_trk_chi2rz; + feature_map["log_chi2rz"] = log(tmp_trk_chi2rz); + + feature_map["chi2rz"] = tmp_trk_chi2rz; + feature_map["log_chi2rz"] = log(tmp_trk_chi2rz); + + feature_map["bendchi2"] = tmp_trk_bendchi2; + feature_map["log_bendchi2"] = log(tmp_trk_bendchi2); + + feature_map["lay1_hits"] = float(hitpattern_expanded_binary[0]); + feature_map["lay2_hits"] = float(hitpattern_expanded_binary[1]); + feature_map["lay3_hits"] = float(hitpattern_expanded_binary[2]); + feature_map["lay4_hits"] = float(hitpattern_expanded_binary[3]); + feature_map["lay5_hits"] = float(hitpattern_expanded_binary[4]); + feature_map["lay6_hits"] = float(hitpattern_expanded_binary[5]); + feature_map["disk1_hits"] = float(hitpattern_expanded_binary[6]); + feature_map["disk2_hits"] = float(hitpattern_expanded_binary[7]); + feature_map["disk3_hits"] = float(hitpattern_expanded_binary[8]); + feature_map["disk4_hits"] = float(hitpattern_expanded_binary[9]); + feature_map["disk5_hits"] = float(hitpattern_expanded_binary[10]); + + feature_map["dtot"] = float(tmp_trk_dtot); + feature_map["ltot"] = float(tmp_trk_ltot); + + feature_map["nlaymiss_interior"] = float(tmp_trk_nlaymiss_interior); + feature_map["bendchi2_bin"] = tmp_trk_bendchi2_bin; + feature_map["chi2rphi_bin"] = tmp_trk_chi2rphi_bin; + feature_map["chi2rz_bin"] = tmp_trk_chi2rz_bin; + + // fill tensor with track params + transformedFeatures.reserve(featureNames.size()); + for (const std::string& feature : featureNames) + transformedFeatures.push_back(feature_map[feature]); + + return transformedFeatures; +} + +void TrackQuality::setTrackQuality(TTTrack& aTrack) { + if (this->qualityAlgorithm_ == QualityAlgorithm::Cut) { + // Get Track parameters + float trk_pt = aTrack.momentum().perp(); + float trk_bend_chi2 = aTrack.stubPtConsistency(); + float trk_z0 = aTrack.z0(); + float trk_eta = aTrack.momentum().eta(); + float trk_chi2 = aTrack.chi2(); + const auto& stubRefs = aTrack.getStubRefs(); + int nStubs = stubRefs.size(); + + float classification = 0.0; // Default classification is 0 + + if (trk_pt >= this->minPt_ && abs(trk_z0) < this->maxZ0_ && abs(trk_eta) < this->maxEta_ && + trk_chi2 < this->chi2dofMax_ && trk_bend_chi2 < this->bendchi2Max_ && nStubs >= this->nStubsmin_) + classification = 1.0; + // Classification updated to 1 if conditions are met + + aTrack.settrkMVA1(classification); + } + + if ((this->qualityAlgorithm_ == QualityAlgorithm::NN) || (this->qualityAlgorithm_ == QualityAlgorithm::GBDT)) { + // Setup ONNX input and output names and arrays + std::vector ortinput_names; + std::vector ortoutput_names; + + cms::Ort::FloatArrays ortinput; + cms::Ort::FloatArrays ortoutputs; + + std::vector Transformed_features = featureTransform(aTrack, this->featureNames_); + cms::Ort::ONNXRuntime Runtime(this->ONNXmodel_.fullPath()); //Setup ONNX runtime + + ortinput_names.push_back(this->ONNXInputName_); + ortoutput_names = Runtime.getOutputNames(); + + //ONNX runtime recieves a vector of vectors of floats so push back the input + // vector of float to create a 1,1,21 ortinput + ortinput.push_back(Transformed_features); + + // batch_size 1 as only one set of transformed features is being processed + int batch_size = 1; + // Run classification + ortoutputs = Runtime.run(ortinput_names, ortinput, {}, ortoutput_names, batch_size); + + if (this->qualityAlgorithm_ == QualityAlgorithm::NN) { + aTrack.settrkMVA1(ortoutputs[0][0]); + } + + else if (this->qualityAlgorithm_ == QualityAlgorithm::GBDT) { + aTrack.settrkMVA1(ortoutputs[1][1]); + } + // Slight differences in the ONNX models of the GBDTs and NNs mean different + // indices of the ortoutput need to be accessed + } + + else { + aTrack.settrkMVA1(-999); + } +} + +void TrackQuality::setCutParameters(std::string const& AlgorithmString, + float maxZ0, + float maxEta, + float chi2dofMax, + float bendchi2Max, + float minPt, + int nStubmin) { + qualityAlgorithm_ = QualityAlgorithm::Cut; + maxZ0_ = maxZ0; + maxEta_ = maxEta; + chi2dofMax_ = chi2dofMax; + bendchi2Max_ = bendchi2Max; + minPt_ = minPt; + nStubsmin_ = nStubmin; +} + +void TrackQuality::setONNXModel(std::string const& AlgorithmString, + edm::FileInPath const& ONNXmodel, + std::string const& ONNXInputName, + std::vector const& featureNames) { + //Convert algorithm string to Enum class for track by track comparison + if (AlgorithmString == "NN") { + qualityAlgorithm_ = QualityAlgorithm::NN; + } else if (AlgorithmString == "GBDT") { + qualityAlgorithm_ = QualityAlgorithm::GBDT; + } else { + qualityAlgorithm_ = QualityAlgorithm::None; + } + ONNXmodel_ = ONNXmodel; + ONNXInputName_ = ONNXInputName; + featureNames_ = featureNames; +} diff --git a/L1Trigger/TrackerDTC/python/ProducerES_cfi.py b/L1Trigger/TrackerDTC/python/ProducerES_cfi.py index f0b867a42e09d..7aab7c7432d5c 100644 --- a/L1Trigger/TrackerDTC/python/ProducerES_cfi.py +++ b/L1Trigger/TrackerDTC/python/ProducerES_cfi.py @@ -7,7 +7,7 @@ XMLLabel = cms.string ("geomXMLFiles" ), # label of ESProducer/ESSource XMLPath = cms.string ("Geometry/TrackerCommonData/data/PhaseII/" ), # compared path XMLFile = cms.string ("tracker.xml" ), # compared filen ame - XMLVersions = cms.vstring("TiltedTracker613", "TiltedTracker613_MB_2019_04", "OuterTracker616_2020_04", "OuterTracker800_2020_07" ) # list of supported versions + XMLVersions = cms.vstring("TiltedTracker613", "TiltedTracker613_MB_2019_04", "OuterTracker616_2020_04", "OuterTracker800_2020_07", "Tracker_DD4hep_compatible_2021_02" ) # list of supported versions ), # Parameter to check if Process History is consistent with process configuration diff --git a/L1Trigger/TrackerDTC/src/Stub.cc b/L1Trigger/TrackerDTC/src/Stub.cc index 187c81bc20638..73b23f4a7be38 100644 --- a/L1Trigger/TrackerDTC/src/Stub.cc +++ b/L1Trigger/TrackerDTC/src/Stub.cc @@ -76,7 +76,8 @@ namespace trackerDTC { } // stub r w.r.t. chosenRofPhi in cm - r_ = digi(r_ - setup.chosenRofPhi(), setup.baseR()); + static const double chosenRofPhi = hybrid_ ? setup.hybridChosenRofPhi() : setup.chosenRofPhi(); + r_ = digi(r_ - chosenRofPhi, setup.baseR()); // radial (cylindrical) component of sensor separation const double dr = sm->sep() / (sm->cos() - sm->sin() * z_ / d_); @@ -119,7 +120,7 @@ namespace trackerDTC { return; // stub r w.r.t. an offset in cm - r_ -= sm->offsetR() - setup.chosenRofPhi(); + r_ -= sm->offsetR() - chosenRofPhi; // stub z w.r.t. an offset in cm z_ -= sm->offsetZ(); if (sm->type() == SensorModule::Disk2S) { diff --git a/L1Trigger/TrackerDTC/test/test_cfg.py b/L1Trigger/TrackerDTC/test/test_cfg.py index 157a57b48ff21..3a08d88cf0bee 100644 --- a/L1Trigger/TrackerDTC/test/test_cfg.py +++ b/L1Trigger/TrackerDTC/test/test_cfg.py @@ -35,26 +35,7 @@ options = VarParsing.VarParsing( 'analysis' ) # specify input MC Samples = { - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/0330453B-9B8E-CA41-88B0-A047B68D1AF9.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/02180D14-024D-ED46-9899-B275EADB82CE.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/0207F436-9BAC-904D-B86A-C2CE18CC2A46.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/01323A12-1A0B-AE43-B7AB-BAAE294E4EFA.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/D87319E3-F541-5840-AA58-10F84ACE1523.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/D7384F02-54C2-AB49-AEF3-E4E7303541CA.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/D3629C85-EA34-C147-AC4D-939C41DEC68A.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/D253E174-69A1-A544-9719-0D9BFDAD5320.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/D0D41CBC-08BA-E14E-8FE9-BD982CC6CA95.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/CD22CEB0-26EE-3147-8076-82926A26FAD4.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/CB67FBC0-0BF9-BE4E-A6D6-1388B2B2D2BF.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/CB36BB1A-67D7-C04D-ADB9-50DEB9B49E73.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/C9DEB7AA-E520-8C4C-AE74-A482BF59B048.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/C8ABAD54-6291-FA44-92E1-5BEECB1D6793.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/C74CD357-330E-E442-8F9F-C060CA44964A.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/C6BD36D2-79B9-2142-9A17-1CCC4FA2DDF1.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/C5DE1FC8-F963-7641-8020-451DB641C609.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/C57720E8-F837-0448-8483-D06474BB316B.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/C41FF339-435A-EC4A-A830-3D9DB7630B0A.root', - '/store/relval/CMSSW_11_1_0_pre1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU25ns_110X_mcRun4_realistic_v2_2026D49PU200_ext1-v1/20000/C38AE82D-587E-C34B-89DC-FBAE92696270.root' + '/store/relval/CMSSW_11_2_0_pre6/RelValSingleMuFlatPt1p5To8/GEN-SIM-DIGI-RAW/112X_mcRun4_realistic_v2_2026D49noPU_L1T-v1/20000/4E15C795-152F-A040-8AF4-5AF5F97EB996.root' } options.register( 'inputMC', Samples, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, "Files to be processed" ) # specify number of events to process. @@ -66,6 +47,7 @@ process.source = cms.Source( "PoolSource", fileNames = cms.untracked.vstring( options.inputMC ), + #skipEvents = cms.untracked.uint32( 47 ), secondaryFileNames = cms.untracked.vstring(), duplicateCheckMode = cms.untracked.string( 'noDuplicateCheck' ) ) diff --git a/L1TriggerConfig/CSCTFConfigProducers/test/analyzerFakeProducer.py b/L1TriggerConfig/CSCTFConfigProducers/test/analyzerFakeProducer.py index f97b96c6ffd14..c1f82962963be 100644 --- a/L1TriggerConfig/CSCTFConfigProducers/test/analyzerFakeProducer.py +++ b/L1TriggerConfig/CSCTFConfigProducers/test/analyzerFakeProducer.py @@ -6,7 +6,7 @@ process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/CSCTFConfigProducers/test/testEmulator.py b/L1TriggerConfig/CSCTFConfigProducers/test/testEmulator.py index 4a9b293f481ea..8ebf3b9c182ac 100644 --- a/L1TriggerConfig/CSCTFConfigProducers/test/testEmulator.py +++ b/L1TriggerConfig/CSCTFConfigProducers/test/testEmulator.py @@ -32,9 +32,10 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['*'] -process.MessageLogger.categories = ['*'] -process.MessageLogger.destinations = ['cout'] + +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO'), DEBUG=cms.untracked.PSet( limit=cms.untracked.int32(-1) diff --git a/L1TriggerConfig/CSCTFConfigProducers/test/testEmulatorFromSQLite.py b/L1TriggerConfig/CSCTFConfigProducers/test/testEmulatorFromSQLite.py index 12d5faba41325..cc3f744b709f1 100644 --- a/L1TriggerConfig/CSCTFConfigProducers/test/testEmulatorFromSQLite.py +++ b/L1TriggerConfig/CSCTFConfigProducers/test/testEmulatorFromSQLite.py @@ -66,9 +66,10 @@ # Message Logger process.load('FWCore.MessageService.MessageLogger_cfi') process.MessageLogger.debugModules = ['*'] -process.MessageLogger.categories = ['*'] -process.MessageLogger.destinations = ['cout'] + +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('INFO'), DEBUG=cms.untracked.PSet( limit=cms.untracked.int32(-1) diff --git a/L1TriggerConfig/CSCTFConfigProducers/test/testO2O_csctf_cfg.py b/L1TriggerConfig/CSCTFConfigProducers/test/testO2O_csctf_cfg.py index 209f150f2e7c1..6dc4092c260dd 100644 --- a/L1TriggerConfig/CSCTFConfigProducers/test/testO2O_csctf_cfg.py +++ b/L1TriggerConfig/CSCTFConfigProducers/test/testO2O_csctf_cfg.py @@ -3,7 +3,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/CSCTFConfigProducers/test/testO2O_ptlut_cfg.py b/L1TriggerConfig/CSCTFConfigProducers/test/testO2O_ptlut_cfg.py index 9086fdc78816f..29689015f5d18 100644 --- a/L1TriggerConfig/CSCTFConfigProducers/test/testO2O_ptlut_cfg.py +++ b/L1TriggerConfig/CSCTFConfigProducers/test/testO2O_ptlut_cfg.py @@ -3,7 +3,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/CSCTFConfigProducers/test/writeCSCTFPayload.py b/L1TriggerConfig/CSCTFConfigProducers/test/writeCSCTFPayload.py index f6421a8b0465d..7cb9ef8b06606 100644 --- a/L1TriggerConfig/CSCTFConfigProducers/test/writeCSCTFPayload.py +++ b/L1TriggerConfig/CSCTFConfigProducers/test/writeCSCTFPayload.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/DTTrackFinder/test/testOnlineProdMasks_cfg.py b/L1TriggerConfig/DTTrackFinder/test/testOnlineProdMasks_cfg.py index bca1557f12958..c1bdeac679de7 100644 --- a/L1TriggerConfig/DTTrackFinder/test/testOnlineProdMasks_cfg.py +++ b/L1TriggerConfig/DTTrackFinder/test/testOnlineProdMasks_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/DTTrackFinder/test/testOnlineProdParameters_cfg.py b/L1TriggerConfig/DTTrackFinder/test/testOnlineProdParameters_cfg.py index 777436654adb2..388c8cf1698a2 100644 --- a/L1TriggerConfig/DTTrackFinder/test/testOnlineProdParameters_cfg.py +++ b/L1TriggerConfig/DTTrackFinder/test/testOnlineProdParameters_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/GMTConfigProducers/test/minitestRS_cfg.py b/L1TriggerConfig/GMTConfigProducers/test/minitestRS_cfg.py index 977ab00ae6df0..4a18afd3a9192 100644 --- a/L1TriggerConfig/GMTConfigProducers/test/minitestRS_cfg.py +++ b/L1TriggerConfig/GMTConfigProducers/test/minitestRS_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/GMTConfigProducers/test/minitest_cfg.py b/L1TriggerConfig/GMTConfigProducers/test/minitest_cfg.py index 12c13f00c2c82..e82f77555eb5d 100644 --- a/L1TriggerConfig/GMTConfigProducers/test/minitest_cfg.py +++ b/L1TriggerConfig/GMTConfigProducers/test/minitest_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/GMTConfigProducers/test/writeLUTsAndRegs_cfg.py b/L1TriggerConfig/GMTConfigProducers/test/writeLUTsAndRegs_cfg.py index df8a68ef5dcdc..6505785493ec2 100644 --- a/L1TriggerConfig/GMTConfigProducers/test/writeLUTsAndRegs_cfg.py +++ b/L1TriggerConfig/GMTConfigProducers/test/writeLUTsAndRegs_cfg.py @@ -27,7 +27,7 @@ #) process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/GctConfigProducers/test/test-config-print.py b/L1TriggerConfig/GctConfigProducers/test/test-config-print.py index 1beb01f16c31e..8dc00ba6ff3c0 100644 --- a/L1TriggerConfig/GctConfigProducers/test/test-config-print.py +++ b/L1TriggerConfig/GctConfigProducers/test/test-config-print.py @@ -30,7 +30,7 @@ # the job process = cms.Process("L1GctConfigDump") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('l1GctConfigDump') diff --git a/L1TriggerConfig/GctConfigProducers/test/test-o2o-print.py b/L1TriggerConfig/GctConfigProducers/test/test-o2o-print.py index 2711f66989915..271440555b065 100644 --- a/L1TriggerConfig/GctConfigProducers/test/test-o2o-print.py +++ b/L1TriggerConfig/GctConfigProducers/test/test-o2o-print.py @@ -12,7 +12,7 @@ # CMSSW config process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('l1GctConfigDump') diff --git a/L1TriggerConfig/GctConfigProducers/test/test-o2o-rs.py b/L1TriggerConfig/GctConfigProducers/test/test-o2o-rs.py index 3076a50b09a81..0dbc9af996bd3 100644 --- a/L1TriggerConfig/GctConfigProducers/test/test-o2o-rs.py +++ b/L1TriggerConfig/GctConfigProducers/test/test-o2o-rs.py @@ -11,7 +11,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/L1GtConfigProducers/test/L1GtOnlineWriteSqlTest_cfg.py b/L1TriggerConfig/L1GtConfigProducers/test/L1GtOnlineWriteSqlTest_cfg.py index 13407aca036d2..57935a6762912 100644 --- a/L1TriggerConfig/L1GtConfigProducers/test/L1GtOnlineWriteSqlTest_cfg.py +++ b/L1TriggerConfig/L1GtConfigProducers/test/L1GtOnlineWriteSqlTest_cfg.py @@ -44,7 +44,7 @@ # Message Logger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/L1GtConfigProducers/test/L1GtParametersOnlineTest_cfg.py b/L1TriggerConfig/L1GtConfigProducers/test/L1GtParametersOnlineTest_cfg.py index 432584184350d..4a54cfae4c595 100644 --- a/L1TriggerConfig/L1GtConfigProducers/test/L1GtParametersOnlineTest_cfg.py +++ b/L1TriggerConfig/L1GtConfigProducers/test/L1GtParametersOnlineTest_cfg.py @@ -42,7 +42,7 @@ # Message Logger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/L1GtConfigProducers/test/L1GtPrescaleFactorsAlgoTrigOnlineTest_cfg.py b/L1TriggerConfig/L1GtConfigProducers/test/L1GtPrescaleFactorsAlgoTrigOnlineTest_cfg.py index ced9626751280..dc980c210589d 100644 --- a/L1TriggerConfig/L1GtConfigProducers/test/L1GtPrescaleFactorsAlgoTrigOnlineTest_cfg.py +++ b/L1TriggerConfig/L1GtConfigProducers/test/L1GtPrescaleFactorsAlgoTrigOnlineTest_cfg.py @@ -37,6 +37,6 @@ # Message Logger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/L1GtConfigProducers/test/L1GtPrescaleFactorsTechTrigOnlineTest_cfg.py b/L1TriggerConfig/L1GtConfigProducers/test/L1GtPrescaleFactorsTechTrigOnlineTest_cfg.py index c3a0fd53d8987..6f976f560fad4 100644 --- a/L1TriggerConfig/L1GtConfigProducers/test/L1GtPrescaleFactorsTechTrigOnlineTest_cfg.py +++ b/L1TriggerConfig/L1GtConfigProducers/test/L1GtPrescaleFactorsTechTrigOnlineTest_cfg.py @@ -37,6 +37,6 @@ # Message Logger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/L1GtConfigProducers/test/L1GtPsbSetupOnlineTest_cfg.py b/L1TriggerConfig/L1GtConfigProducers/test/L1GtPsbSetupOnlineTest_cfg.py index f021c3666d9d7..ac498382cc02d 100644 --- a/L1TriggerConfig/L1GtConfigProducers/test/L1GtPsbSetupOnlineTest_cfg.py +++ b/L1TriggerConfig/L1GtConfigProducers/test/L1GtPsbSetupOnlineTest_cfg.py @@ -42,7 +42,7 @@ # Message Logger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/L1GtConfigProducers/test/L1GtTester_cfg.py b/L1TriggerConfig/L1GtConfigProducers/test/L1GtTester_cfg.py index 8ed6a6774c397..96f9d2474b13d 100644 --- a/L1TriggerConfig/L1GtConfigProducers/test/L1GtTester_cfg.py +++ b/L1TriggerConfig/L1GtConfigProducers/test/L1GtTester_cfg.py @@ -128,28 +128,22 @@ # services # Message Logger -process.MessageLogger.categories.append('L1GtPrescaleFactorsAndMasksTester') -process.MessageLogger.destinations = ['L1GtTester_errors', - 'L1GtTester_warnings', - 'L1GtTester_info', - 'L1GtTester_debug' - ] -process.MessageLogger.statistics = [] - -process.MessageLogger.L1GtTester_errors = cms.untracked.PSet( +process.MessageLogger.cerr.enable = False + +process.MessageLogger.files.L1GtTester_errors = cms.untracked.PSet( threshold = cms.untracked.string('ERROR'), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), L1GtPrescaleFactorsAndMasksTester = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtTester_warnings = cms.untracked.PSet( +process.MessageLogger.files.L1GtTester_warnings = cms.untracked.PSet( threshold = cms.untracked.string('WARNING'), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(0) ), L1GtPrescaleFactorsAndMasksTester = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtTester_info = cms.untracked.PSet( +process.MessageLogger.files.L1GtTester_info = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -157,7 +151,7 @@ L1GtPrescaleFactorsAndMasksTester = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtTester_debug = cms.untracked.PSet( +process.MessageLogger.files.L1GtTester_debug = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(0) ), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMaskAlgoTrigOnlineTest_cfg.py b/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMaskAlgoTrigOnlineTest_cfg.py index 9abcb25b2b49f..760cdb3d173ab 100644 --- a/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMaskAlgoTrigOnlineTest_cfg.py +++ b/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMaskAlgoTrigOnlineTest_cfg.py @@ -41,6 +41,6 @@ # Message Logger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMaskTechTrigOnlineTest_cfg.py b/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMaskTechTrigOnlineTest_cfg.py index 3767ec980324c..a531a0ccc005f 100644 --- a/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMaskTechTrigOnlineTest_cfg.py +++ b/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMaskTechTrigOnlineTest_cfg.py @@ -41,6 +41,6 @@ # Message Logger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMaskVetoTechTrigOnlineTest_cfg.py b/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMaskVetoTechTrigOnlineTest_cfg.py index 8b7be1d11ddff..7ad0f64a94ce7 100644 --- a/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMaskVetoTechTrigOnlineTest_cfg.py +++ b/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMaskVetoTechTrigOnlineTest_cfg.py @@ -41,6 +41,6 @@ # Message Logger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMenuOnlineTest_cfg.py b/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMenuOnlineTest_cfg.py index 1cb47fc283c10..c5b3dc060e8af 100644 --- a/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMenuOnlineTest_cfg.py +++ b/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMenuOnlineTest_cfg.py @@ -80,7 +80,7 @@ # Message Logger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMenuTester_cfg.py b/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMenuTester_cfg.py index 7703a055b38d3..37d877e4107f6 100644 --- a/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMenuTester_cfg.py +++ b/L1TriggerConfig/L1GtConfigProducers/test/L1GtTriggerMenuTester_cfg.py @@ -110,30 +110,22 @@ # Message Logger process.MessageLogger.debugModules = ['l1GtTriggerMenuTester'] -process.MessageLogger.categories.append('L1GtTriggerMenuTester') -process.MessageLogger.categories.append('L1GtTriggerMenuTesterWiki') -process.MessageLogger.destinations = ['L1GtTriggerMenuTester_errors', - 'L1GtTriggerMenuTester_warnings', - 'L1GtTriggerMenuTester_info', - 'L1GtTriggerMenuTester_wiki', - 'L1GtTriggerMenuTester_debug' - ] -process.MessageLogger.statistics = [] - -process.MessageLogger.L1GtTriggerMenuTester_errors = cms.untracked.PSet( +process.MessageLogger.cerr.enable = False + +process.MessageLogger.files.L1GtTriggerMenuTester_errors = cms.untracked.PSet( threshold = cms.untracked.string('ERROR'), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), L1GtTriggerMenuTester = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtTriggerMenuTester_warnings = cms.untracked.PSet( +process.MessageLogger.files.L1GtTriggerMenuTester_warnings = cms.untracked.PSet( threshold = cms.untracked.string('WARNING'), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), ERROR = cms.untracked.PSet( limit = cms.untracked.int32(0) ), L1GtTriggerMenuTester = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtTriggerMenuTester_info = cms.untracked.PSet( +process.MessageLogger.files.L1GtTriggerMenuTester_info = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -141,7 +133,7 @@ L1GtTriggerMenuTester = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtTriggerMenuTester_wiki = cms.untracked.PSet( +process.MessageLogger.files.L1GtTriggerMenuTester_wiki = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), WARNING = cms.untracked.PSet( limit = cms.untracked.int32(0) ), @@ -149,7 +141,7 @@ L1GtTriggerMenuTesterWiki = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) ) -process.MessageLogger.L1GtTriggerMenuTester_debug = cms.untracked.PSet( +process.MessageLogger.files.L1GtTriggerMenuTester_debug = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), DEBUG = cms.untracked.PSet( limit = cms.untracked.int32(0) ), INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/L1TriggerConfig/L1ScalesProducers/test/minitest_cfg.py b/L1TriggerConfig/L1ScalesProducers/test/minitest_cfg.py index c75ffa3d1de64..9d86a1048d0f8 100644 --- a/L1TriggerConfig/L1ScalesProducers/test/minitest_cfg.py +++ b/L1TriggerConfig/L1ScalesProducers/test/minitest_cfg.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/RCTConfigProducers/test/L1RCT_RunSettings.py b/L1TriggerConfig/RCTConfigProducers/test/L1RCT_RunSettings.py index 97a48b52ebdca..7b0fbe931a810 100644 --- a/L1TriggerConfig/RCTConfigProducers/test/L1RCT_RunSettings.py +++ b/L1TriggerConfig/RCTConfigProducers/test/L1RCT_RunSettings.py @@ -3,7 +3,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/RCTConfigProducers/test/test-tsc-o2o.py b/L1TriggerConfig/RCTConfigProducers/test/test-tsc-o2o.py index 5fbcfb6eaa1a3..cd4d9f391960b 100644 --- a/L1TriggerConfig/RCTConfigProducers/test/test-tsc-o2o.py +++ b/L1TriggerConfig/RCTConfigProducers/test/test-tsc-o2o.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/dumpAll.py b/L1TriggerConfig/Utilities/test/dumpAll.py index 37d40f1f89305..e08f4f08e1d7a 100644 --- a/L1TriggerConfig/Utilities/test/dumpAll.py +++ b/L1TriggerConfig/Utilities/test/dumpAll.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/dumpECpar.py b/L1TriggerConfig/Utilities/test/dumpECpar.py index 87b2006c37d7c..3ddf08cee5c86 100644 --- a/L1TriggerConfig/Utilities/test/dumpECpar.py +++ b/L1TriggerConfig/Utilities/test/dumpECpar.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/dumpL1TCaloParams.py b/L1TriggerConfig/Utilities/test/dumpL1TCaloParams.py index f1020097cb8d9..a80881e3529ea 100644 --- a/L1TriggerConfig/Utilities/test/dumpL1TCaloParams.py +++ b/L1TriggerConfig/Utilities/test/dumpL1TCaloParams.py @@ -4,7 +4,7 @@ process = cms.Process("QWE") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/dumpL1TGlobalPrescalesVetos.py b/L1TriggerConfig/Utilities/test/dumpL1TGlobalPrescalesVetos.py index 40e6a9fcf8b77..cefd2493675e1 100644 --- a/L1TriggerConfig/Utilities/test/dumpL1TGlobalPrescalesVetos.py +++ b/L1TriggerConfig/Utilities/test/dumpL1TGlobalPrescalesVetos.py @@ -4,7 +4,7 @@ process = cms.Process("QWE") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/dumpL1TMuonBarrelParams.py b/L1TriggerConfig/Utilities/test/dumpL1TMuonBarrelParams.py index 13cdd7283ba1a..4bd078392d42d 100644 --- a/L1TriggerConfig/Utilities/test/dumpL1TMuonBarrelParams.py +++ b/L1TriggerConfig/Utilities/test/dumpL1TMuonBarrelParams.py @@ -4,7 +4,7 @@ process = cms.Process("QWE") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/dumpL1TMuonEndCapParams.py b/L1TriggerConfig/Utilities/test/dumpL1TMuonEndCapParams.py index 655eb0e3abc88..43db60d9b4284 100644 --- a/L1TriggerConfig/Utilities/test/dumpL1TMuonEndCapParams.py +++ b/L1TriggerConfig/Utilities/test/dumpL1TMuonEndCapParams.py @@ -4,7 +4,7 @@ process = cms.Process("QWE") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/dumpL1TMuonGlobalParams.py b/L1TriggerConfig/Utilities/test/dumpL1TMuonGlobalParams.py index 0c609ff20deb4..4cddfa87f517c 100644 --- a/L1TriggerConfig/Utilities/test/dumpL1TMuonGlobalParams.py +++ b/L1TriggerConfig/Utilities/test/dumpL1TMuonGlobalParams.py @@ -4,7 +4,7 @@ process = cms.Process("QWE") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/dumpL1TMuonOverlapParams.py b/L1TriggerConfig/Utilities/test/dumpL1TMuonOverlapParams.py index 48350a74750ce..f850fb45d7f29 100644 --- a/L1TriggerConfig/Utilities/test/dumpL1TMuonOverlapParams.py +++ b/L1TriggerConfig/Utilities/test/dumpL1TMuonOverlapParams.py @@ -4,7 +4,7 @@ process = cms.Process("QWE") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/dumpL1TUtmTriggerMenu.py b/L1TriggerConfig/Utilities/test/dumpL1TUtmTriggerMenu.py index 056fef6a6568a..744812e3eac3a 100644 --- a/L1TriggerConfig/Utilities/test/dumpL1TUtmTriggerMenu.py +++ b/L1TriggerConfig/Utilities/test/dumpL1TUtmTriggerMenu.py @@ -4,7 +4,7 @@ process = cms.Process("QWE") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/dumpMenu.py b/L1TriggerConfig/Utilities/test/dumpMenu.py index 53113256b5696..a9c4bb6781cd2 100644 --- a/L1TriggerConfig/Utilities/test/dumpMenu.py +++ b/L1TriggerConfig/Utilities/test/dumpMenu.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/dumpOverPar.py b/L1TriggerConfig/Utilities/test/dumpOverPar.py index e9b7bec010e87..b429053e94e33 100644 --- a/L1TriggerConfig/Utilities/test/dumpOverPar.py +++ b/L1TriggerConfig/Utilities/test/dumpOverPar.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/fetchMenu.py b/L1TriggerConfig/Utilities/test/fetchMenu.py index 97a42e0ac145e..1d70fb95372c3 100644 --- a/L1TriggerConfig/Utilities/test/fetchMenu.py +++ b/L1TriggerConfig/Utilities/test/fetchMenu.py @@ -2,7 +2,7 @@ process = cms.Process("L1ConfigWritePayloadDummy") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/fetchMenuKeyList.py b/L1TriggerConfig/Utilities/test/fetchMenuKeyList.py index 01f43e824b6ad..82584f36b6051 100644 --- a/L1TriggerConfig/Utilities/test/fetchMenuKeyList.py +++ b/L1TriggerConfig/Utilities/test/fetchMenuKeyList.py @@ -2,7 +2,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/updateCaloParams.py b/L1TriggerConfig/Utilities/test/updateCaloParams.py index d8a3b75769778..f45a2b25cf5b6 100644 --- a/L1TriggerConfig/Utilities/test/updateCaloParams.py +++ b/L1TriggerConfig/Utilities/test/updateCaloParams.py @@ -2,7 +2,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/uploadBmtfParams.py b/L1TriggerConfig/Utilities/test/uploadBmtfParams.py index 555f12287cb57..ab38f340ebed5 100644 --- a/L1TriggerConfig/Utilities/test/uploadBmtfParams.py +++ b/L1TriggerConfig/Utilities/test/uploadBmtfParams.py @@ -2,7 +2,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/uploadCaloParams.py b/L1TriggerConfig/Utilities/test/uploadCaloParams.py index ccc738fb1bdab..4fce53a24f888 100644 --- a/L1TriggerConfig/Utilities/test/uploadCaloParams.py +++ b/L1TriggerConfig/Utilities/test/uploadCaloParams.py @@ -2,7 +2,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/uploadEmtfForest.py b/L1TriggerConfig/Utilities/test/uploadEmtfForest.py index f3d597e9396ab..0126a34c74ff0 100644 --- a/L1TriggerConfig/Utilities/test/uploadEmtfForest.py +++ b/L1TriggerConfig/Utilities/test/uploadEmtfForest.py @@ -2,7 +2,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/uploadEmtfParams.py b/L1TriggerConfig/Utilities/test/uploadEmtfParams.py index ce49b57b6a651..408340a5fe087 100644 --- a/L1TriggerConfig/Utilities/test/uploadEmtfParams.py +++ b/L1TriggerConfig/Utilities/test/uploadEmtfParams.py @@ -2,7 +2,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/uploadGmtParams.py b/L1TriggerConfig/Utilities/test/uploadGmtParams.py index 22eff0c514db4..1f1897dd8e413 100644 --- a/L1TriggerConfig/Utilities/test/uploadGmtParams.py +++ b/L1TriggerConfig/Utilities/test/uploadGmtParams.py @@ -2,7 +2,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/viewAll.py b/L1TriggerConfig/Utilities/test/viewAll.py index 1b9e0dc47add2..bdf112e77bedc 100644 --- a/L1TriggerConfig/Utilities/test/viewAll.py +++ b/L1TriggerConfig/Utilities/test/viewAll.py @@ -2,7 +2,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/viewCaloParams.py b/L1TriggerConfig/Utilities/test/viewCaloParams.py index ab8020c2ff6b6..20f6f36888109 100644 --- a/L1TriggerConfig/Utilities/test/viewCaloParams.py +++ b/L1TriggerConfig/Utilities/test/viewCaloParams.py @@ -3,7 +3,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/viewECpar.py b/L1TriggerConfig/Utilities/test/viewECpar.py index b30e5e0ea0058..7ab215bf5524b 100644 --- a/L1TriggerConfig/Utilities/test/viewECpar.py +++ b/L1TriggerConfig/Utilities/test/viewECpar.py @@ -3,7 +3,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/viewGlobalMuon.py b/L1TriggerConfig/Utilities/test/viewGlobalMuon.py index 69edef4867bfc..306590483fbbf 100644 --- a/L1TriggerConfig/Utilities/test/viewGlobalMuon.py +++ b/L1TriggerConfig/Utilities/test/viewGlobalMuon.py @@ -3,7 +3,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/viewMenu.py b/L1TriggerConfig/Utilities/test/viewMenu.py index 75fa64e7a936b..0eab96ce70816 100644 --- a/L1TriggerConfig/Utilities/test/viewMenu.py +++ b/L1TriggerConfig/Utilities/test/viewMenu.py @@ -3,7 +3,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/viewOverPar.py b/L1TriggerConfig/Utilities/test/viewOverPar.py index 6494f758259e8..145282241e26f 100644 --- a/L1TriggerConfig/Utilities/test/viewOverPar.py +++ b/L1TriggerConfig/Utilities/test/viewOverPar.py @@ -3,7 +3,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/viewPrescalesVetos.py b/L1TriggerConfig/Utilities/test/viewPrescalesVetos.py index 66ae144dc5fc2..61a4a46f49b5e 100644 --- a/L1TriggerConfig/Utilities/test/viewPrescalesVetos.py +++ b/L1TriggerConfig/Utilities/test/viewPrescalesVetos.py @@ -3,7 +3,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/viewTKE.py b/L1TriggerConfig/Utilities/test/viewTKE.py index f2f923c00ddb7..b9becc392030b 100644 --- a/L1TriggerConfig/Utilities/test/viewTKE.py +++ b/L1TriggerConfig/Utilities/test/viewTKE.py @@ -3,7 +3,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/viewTKEonline.py b/L1TriggerConfig/Utilities/test/viewTKEonline.py index 2443521f022b1..70690c52e56b8 100644 --- a/L1TriggerConfig/Utilities/test/viewTKEonline.py +++ b/L1TriggerConfig/Utilities/test/viewTKEonline.py @@ -3,7 +3,7 @@ process = cms.Process("QWE") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('INFO') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/L1TriggerConfig/Utilities/test/viewTKLE.py b/L1TriggerConfig/Utilities/test/viewTKLE.py index 368b7d6508690..f20105361001a 100644 --- a/L1TriggerConfig/Utilities/test/viewTKLE.py +++ b/L1TriggerConfig/Utilities/test/viewTKLE.py @@ -3,7 +3,7 @@ process = cms.Process("tester") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/MagneticField/GeomBuilder/BuildFile.xml b/MagneticField/GeomBuilder/BuildFile.xml index ad850340cc8d6..b1547e5b28c07 100644 --- a/MagneticField/GeomBuilder/BuildFile.xml +++ b/MagneticField/GeomBuilder/BuildFile.xml @@ -9,6 +9,7 @@ + diff --git a/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducerFromDB.cc b/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducerFromDB.cc index 871fafcc38c08..e1f27f537d449 100644 --- a/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducerFromDB.cc +++ b/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducerFromDB.cc @@ -150,7 +150,8 @@ std::unique_ptr DD4hep_VolumeBasedMagneticFieldESProducerFromDB:: std::unique_ptr paramField = ParametrizedMagneticFieldFactory::get(conf->slaveFieldVersion, conf->slaveFieldParameters); - edm::LogInfo("MagneticField") << "Version: " << conf->version << " geometryVersion: " << conf->geometryVersion + edm::LogInfo("MagneticField") << "(DD4hep) Version: " << conf->version + << " geometryVersion: " << conf->geometryVersion << " slaveFieldVersion: " << conf->slaveFieldVersion; if (conf->version == "parametrizedMagneticField") { @@ -182,7 +183,7 @@ std::unique_ptr DD4hep_VolumeBasedMagneticFieldESProducerFromDB:: ""); - auto ddet = make_unique("", sblob, true); + auto ddet = make_unique("cmsMagneticField:MAGF", sblob, true); builder.build(ddet.get()); diff --git a/MagneticField/GeomBuilder/src/DD4hep_volumeHandle.cc b/MagneticField/GeomBuilder/src/DD4hep_volumeHandle.cc index 9f7b623c2c424..05b6bba15567a 100644 --- a/MagneticField/GeomBuilder/src/DD4hep_volumeHandle.cc +++ b/MagneticField/GeomBuilder/src/DD4hep_volumeHandle.cc @@ -14,6 +14,8 @@ #include "DataFormats/Math/interface/Vector3D.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include + #include #include @@ -33,7 +35,9 @@ volumeHandle::volumeHandle(const cms::DDFilteredView &fv, bool expand2Pi, bool d name = fv.name(); copyno = fv.copyNum(); const auto *const transArray = fv.trans(); - center_ = GlobalPoint(transArray[0], transArray[1], transArray[2]); + + // Convert from DD4hep units to cm + center_ = GlobalPoint(transArray[0] / dd4hep::cm, transArray[1] / dd4hep::cm, transArray[2] / dd4hep::cm); // ASSUMPTION: volume names ends with "_NUM" where NUM is the volume number string volName = name; @@ -47,23 +51,23 @@ volumeHandle::volumeHandle(const cms::DDFilteredView &fv, bool expand2Pi, bool d switch (theShape) { case DDSolidShape::ddbox: { DDBox box(solid.solid()); - // DD4hep returns units in cm, no conversion needed. - double halfX = box.x(); - double halfY = box.y(); - double halfZ = box.z(); + // Convert from DD4hep units to cm + double halfX = box.x() / dd4hep::cm; + double halfY = box.y() / dd4hep::cm; + double halfZ = box.z() / dd4hep::cm; buildBox(halfX, halfY, halfZ); } break; case DDSolidShape::ddtrap: { DDTrap trap(solid.solid()); - double x1 = trap.bottomLow1(); - double x2 = trap.topLow1(); - double x3 = trap.bottomLow2(); - double x4 = trap.topLow2(); - double y1 = trap.high1(); - double y2 = trap.high2(); + double x1 = trap.bottomLow1() / dd4hep::cm; + double x2 = trap.topLow1() / dd4hep::cm; + double x3 = trap.bottomLow2() / dd4hep::cm; + double x4 = trap.topLow2() / dd4hep::cm; + double y1 = trap.high1() / dd4hep::cm; + double y2 = trap.high2() / dd4hep::cm; double theta = trap.theta(); double phi = trap.phi(); - double halfZ = trap.dZ(); + double halfZ = trap.dZ() / dd4hep::cm; double alpha1 = trap.alpha1(); double alpha2 = trap.alpha2(); buildTrap(x1, x2, x3, x4, y1, y2, theta, phi, halfZ, alpha1, alpha2); @@ -71,38 +75,61 @@ volumeHandle::volumeHandle(const cms::DDFilteredView &fv, bool expand2Pi, bool d case DDSolidShape::ddcons: { DDCons cons(solid.solid()); - double zhalf = cons.dZ(); - double rInMinusZ = cons.rMin1(); - double rOutMinusZ = cons.rMax1(); - double rInPlusZ = cons.rMin2(); - double rOutPlusZ = cons.rMax2(); + double zhalf = cons.dZ() / dd4hep::cm; + double rInMinusZ = cons.rMin1() / dd4hep::cm; + double rOutMinusZ = cons.rMax1() / dd4hep::cm; + double rInPlusZ = cons.rMin2() / dd4hep::cm; + double rOutPlusZ = cons.rMax2() / dd4hep::cm; double startPhi = cons.startPhi(); double deltaPhi = reco::deltaPhi(cons.endPhi(), startPhi); buildCons(zhalf, rInMinusZ, rOutMinusZ, rInPlusZ, rOutPlusZ, startPhi, deltaPhi); } break; case DDSolidShape::ddtubs: { DDTubs tubs(solid.solid()); - double zhalf = tubs.dZ(); - double rIn = tubs.rMin(); - double rOut = tubs.rMax(); + double zhalf = tubs.dZ() / dd4hep::cm; + double rIn = tubs.rMin() / dd4hep::cm; + double rOut = tubs.rMax() / dd4hep::cm; double startPhi = tubs.startPhi(); double deltaPhi = tubs.endPhi() - startPhi; buildTubs(zhalf, rIn, rOut, startPhi, deltaPhi); } break; case DDSolidShape::ddpseudotrap: { vector d = solid.parameters(); - buildPseudoTrap(d[0], d[1], d[2], d[3], d[4], d[5], d[6]); + + // The pseudo-trapezoid parameters are: + // d[0] -- x1 + // d[1] -- x2 + // d[2] -- y1 + // d[3] -- y2 + // d[4] -- halfZ + // d[5] -- radius + // d[6] -- atMinusZ (0 or 1) + // Note all are lengths except for the last one. The lengths come from + // DD4hep in DD4hep units and must be converted to cm for use. + + if (d.size() >= 7) + LogTrace("MagGeoBuilder") << " Pseudo trap params raw = " << d[0] << ", " << d[1] << ", " << d[2] << ", " + << d[3] << ", " << d[4] << ", " << d[5] << ", " << d[6]; + + // Convert all but last parameter to cm (last one is a boolean). + transform(d.begin(), --(d.end()), d.begin(), [](double val) { return val / dd4hep::cm; }); + + if (d.size() >= 7) + LogTrace("MagGeoBuilder") << " Pseudo trap params converted = " << d[0] << ", " << d[1] << ", " << d[2] << ", " + << d[3] << ", " << d[4] << ", " << d[5] << ", " << d[6]; + + buildPseudoTrap(d[0], d[1], d[2], d[3], d[4], d[5], static_cast(d[6])); } break; case DDSolidShape::ddtrunctubs: { DDTruncTubs tubs(solid.solid()); - double zhalf = tubs.dZ(); // half of the z-Axis - double rIn = tubs.rMin(); // inner radius - double rOut = tubs.rMax(); // outer radius - double startPhi = tubs.startPhi(); // angular start of the tube-section - double deltaPhi = tubs.deltaPhi(); // angular span of the tube-section - double cutAtStart = tubs.cutAtStart(); // truncation at begin of the tube-section - double cutAtDelta = tubs.cutAtDelta(); // truncation at end of the tube-section - bool cutInside = tubs.cutInside(); // true, if truncation is on the inner side of the tube-section + double zhalf = tubs.dZ() / dd4hep::cm; // half of the z-Axis + double rIn = tubs.rMin() / dd4hep::cm; // inner radius + double rOut = tubs.rMax() / dd4hep::cm; // outer radius + double startPhi = tubs.startPhi(); // angular start of the tube-section + double deltaPhi = tubs.deltaPhi(); // angular span of the tube-section + double cutAtStart = tubs.cutAtStart() / dd4hep::cm; // truncation at begin of the tube-section + double cutAtDelta = tubs.cutAtDelta() / dd4hep::cm; // truncation at end of the tube-section + bool cutInside = tubs.cutInside(); // true, if truncation is on the inner side of the tube-section buildTruncTubs(zhalf, rIn, rOut, startPhi, deltaPhi, cutAtStart, cutAtDelta, cutInside); } break; default: diff --git a/Mixing/Base/src/SecondaryEventProvider.cc b/Mixing/Base/src/SecondaryEventProvider.cc index 6c9b50922162e..a220c1065f0ee 100644 --- a/Mixing/Base/src/SecondaryEventProvider.cc +++ b/Mixing/Base/src/SecondaryEventProvider.cc @@ -1,3 +1,4 @@ +#include "FWCore/Concurrency/interface/include_first_syncWait.h" #include "Mixing/Base/src/SecondaryEventProvider.h" #include "FWCore/Framework/interface/ExceptionActions.h" #include "FWCore/Framework/src/PreallocationConfiguration.h" @@ -5,6 +6,45 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/StreamID.h" #include "DataFormats/Provenance/interface/ProductRegistry.h" +#include "tbb/task_arena.h" + +namespace { + template + void processOneOccurrence(edm::WorkerManager& manager, + typename T::TransitionInfoType& info, + edm::StreamID streamID, + typename T::Context const* topContext, + U const* context, + bool cleaningUpAfterException = false) { + manager.resetAll(); + + if (manager.allWorkers().empty()) + return; + + auto token = edm::ServiceRegistry::instance().presentToken(); + //we need the arena to guarantee that the syncWait will return to this thread + // and not cause this callstack to possibly be moved to a new thread + tbb::task_arena localArena{tbb::this_task_arena::max_concurrency()}; + std::exception_ptr exceptPtr = localArena.execute([&]() { + return edm::syncWait([&](edm::WaitingTaskHolder&& iHolder) { + manager.processOneOccurrenceAsync(std::move(iHolder), info, token, streamID, topContext, context); + }); + }); + + if (exceptPtr) { + try { + edm::convertException::wrap([&]() { std::rethrow_exception(exceptPtr); }); + } catch (cms::Exception& ex) { + if (ex.context().empty()) { + edm::addContextAndPrintException("Calling SecondaryEventProvider", ex, cleaningUpAfterException); + } else { + edm::addContextAndPrintException("", ex, cleaningUpAfterException); + } + throw; + } + } + } +} // namespace namespace edm { SecondaryEventProvider::SecondaryEventProvider(std::vector& psets, @@ -37,10 +77,10 @@ namespace edm { ModuleCallingContext const* mcc, StreamContext& sContext) { RunTransitionInfo info(run, setup); - workerManager_.processOneOccurrence >( - info, StreamID::invalidStreamID(), nullptr, mcc); - workerManager_.processOneOccurrence >( - info, sContext.streamID(), &sContext, mcc); + processOneOccurrence >( + workerManager_, info, StreamID::invalidStreamID(), nullptr, mcc); + processOneOccurrence >( + workerManager_, info, sContext.streamID(), &sContext, mcc); } void SecondaryEventProvider::beginLuminosityBlock(LuminosityBlockPrincipal& lumi, @@ -48,10 +88,10 @@ namespace edm { ModuleCallingContext const* mcc, StreamContext& sContext) { LumiTransitionInfo info(lumi, setup); - workerManager_.processOneOccurrence >( - info, StreamID::invalidStreamID(), nullptr, mcc); - workerManager_.processOneOccurrence >( - info, sContext.streamID(), &sContext, mcc); + processOneOccurrence >( + workerManager_, info, StreamID::invalidStreamID(), nullptr, mcc); + processOneOccurrence >( + workerManager_, info, sContext.streamID(), &sContext, mcc); } void SecondaryEventProvider::endRun(RunPrincipal& run, @@ -59,10 +99,10 @@ namespace edm { ModuleCallingContext const* mcc, StreamContext& sContext) { RunTransitionInfo info(run, setup); - workerManager_.processOneOccurrence >( - info, sContext.streamID(), &sContext, mcc); - workerManager_.processOneOccurrence >( - info, StreamID::invalidStreamID(), nullptr, mcc); + processOneOccurrence >( + workerManager_, info, sContext.streamID(), &sContext, mcc); + processOneOccurrence >( + workerManager_, info, StreamID::invalidStreamID(), nullptr, mcc); } void SecondaryEventProvider::endLuminosityBlock(LuminosityBlockPrincipal& lumi, @@ -70,10 +110,10 @@ namespace edm { ModuleCallingContext const* mcc, StreamContext& sContext) { LumiTransitionInfo info(lumi, setup); - workerManager_.processOneOccurrence >( - info, sContext.streamID(), &sContext, mcc); - workerManager_.processOneOccurrence >( - info, StreamID::invalidStreamID(), nullptr, mcc); + processOneOccurrence >( + workerManager_, info, sContext.streamID(), &sContext, mcc); + processOneOccurrence >( + workerManager_, info, StreamID::invalidStreamID(), nullptr, mcc); } void SecondaryEventProvider::setupPileUpEvent(EventPrincipal& ep, diff --git a/MuonAnalysis/Configuration/python/MuonAnalysis_OutputModules_cff.py b/MuonAnalysis/Configuration/python/MuonAnalysis_OutputModules_cff.py deleted file mode 100644 index 7d43e59fc2bce..0000000000000 --- a/MuonAnalysis/Configuration/python/MuonAnalysis_OutputModules_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from MuonAnalysis.Configuration.muonL1OutputModule_cfi import * -MuonAnalysisOutput = cms.Sequence(muonL1OutputModuleAODSIM+muonL1OutputModuleRECOSIM) - diff --git a/MuonAnalysis/Configuration/python/MuonAnalysis_SkimPaths_cff.py b/MuonAnalysis/Configuration/python/MuonAnalysis_SkimPaths_cff.py deleted file mode 100644 index 7079b2c9c5db4..0000000000000 --- a/MuonAnalysis/Configuration/python/MuonAnalysis_SkimPaths_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Muon POG standard sequence -from MuonAnalysis.Configuration.muonL1_SkimPath_cff import * - diff --git a/MuonAnalysis/Configuration/python/muonL1OutputModuleAODSIM_cfi.py b/MuonAnalysis/Configuration/python/muonL1OutputModuleAODSIM_cfi.py deleted file mode 100644 index ded73bd7db787..0000000000000 --- a/MuonAnalysis/Configuration/python/muonL1OutputModuleAODSIM_cfi.py +++ /dev/null @@ -1,14 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from MuonAnalysis.Configuration.muonL1_EventContent_cff import * -muonL1OutputModuleAODSIM = cms.OutputModule("PoolOutputModule", - muonL1EventSelection, - AODSIMmuonL1EventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('muonL1AODSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('muonL1-AODSIM.root') -) - - diff --git a/MuonAnalysis/Configuration/python/muonL1OutputModuleRECOSIM_cfi.py b/MuonAnalysis/Configuration/python/muonL1OutputModuleRECOSIM_cfi.py deleted file mode 100644 index 1308b0d920862..0000000000000 --- a/MuonAnalysis/Configuration/python/muonL1OutputModuleRECOSIM_cfi.py +++ /dev/null @@ -1,14 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from MuonAnalysis.Configuration.muonL1_EventContent_cff import * -muonL1OutputModuleRECOSIM = cms.OutputModule("PoolOutputModule", - muonL1EventSelection, - RECOSIMmuonL1EventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('muonL1RECOSIM'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('muonL1-RECOSIM.root') -) - - diff --git a/MuonAnalysis/Configuration/python/muonL1OutputModule_cfi.py b/MuonAnalysis/Configuration/python/muonL1OutputModule_cfi.py deleted file mode 100644 index 88bb5916ce6be..0000000000000 --- a/MuonAnalysis/Configuration/python/muonL1OutputModule_cfi.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from MuonAnalysis.Configuration.muonL1OutputModuleAODSIM_cfi import * -from MuonAnalysis.Configuration.muonL1OutputModuleRECOSIM_cfi import * - diff --git a/MuonAnalysis/Configuration/python/muonL1_EventContent_cff.py b/MuonAnalysis/Configuration/python/muonL1_EventContent_cff.py deleted file mode 100644 index 508fa745d7b77..0000000000000 --- a/MuonAnalysis/Configuration/python/muonL1_EventContent_cff.py +++ /dev/null @@ -1,22 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -muonL1EventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -muonL1EventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('muonL1Path') - ) -) -RECOSIMmuonL1EventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -AODSIMmuonL1EventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -RECOSIMmuonL1EventContent.outputCommands.extend(RECOSIMEventContent.outputCommands) -RECOSIMmuonL1EventContent.outputCommands.extend(muonL1EventContent.outputCommands) -AODSIMmuonL1EventContent.outputCommands.extend(AODSIMEventContent.outputCommands) -AODSIMmuonL1EventContent.outputCommands.extend(muonL1EventContent.outputCommands) - diff --git a/MuonAnalysis/Configuration/python/muonL1_SkimPath_cff.py b/MuonAnalysis/Configuration/python/muonL1_SkimPath_cff.py deleted file mode 100644 index 75bbcc8c5f081..0000000000000 --- a/MuonAnalysis/Configuration/python/muonL1_SkimPath_cff.py +++ /dev/null @@ -1,6 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# this is just Juan's sequence to select l1 muons -from MuonAnalysis.Configuration.muonL1_cfi import * -muonL1Path = cms.Path(muonL1) - diff --git a/MuonAnalysis/Configuration/python/muonL1_cfi.py b/MuonAnalysis/Configuration/python/muonL1_cfi.py deleted file mode 100644 index e48fa840e7bf8..0000000000000 --- a/MuonAnalysis/Configuration/python/muonL1_cfi.py +++ /dev/null @@ -1,9 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -muonL1 = cms.EDFilter("HLTHighLevel", - HLTPaths = cms.vstring('CandHLT1MuonLevel1'), - andOr = cms.bool(True), - TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") -) - - diff --git a/MuonAnalysis/MomentumScaleCalibration/test/tree_production/miniAODVBTFMuonsOnlyTreeMC_CRAB_cfg.py b/MuonAnalysis/MomentumScaleCalibration/test/tree_production/miniAODVBTFMuonsOnlyTreeMC_CRAB_cfg.py index b2e3a79d5f904..7e4cc5b4271af 100644 --- a/MuonAnalysis/MomentumScaleCalibration/test/tree_production/miniAODVBTFMuonsOnlyTreeMC_CRAB_cfg.py +++ b/MuonAnalysis/MomentumScaleCalibration/test/tree_production/miniAODVBTFMuonsOnlyTreeMC_CRAB_cfg.py @@ -42,7 +42,6 @@ # Messages process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['cout', 'cerr'] process.MessageLogger.cerr.FwkReport.reportEvery = 500 from CondCore.DBCommon.CondDBSetup_cfi import * diff --git a/MuonAnalysis/MuonAssociators/test/L1MuonMatcher/test.py b/MuonAnalysis/MuonAssociators/test/L1MuonMatcher/test.py index 576f3d5447840..7d6a2293f4de2 100644 --- a/MuonAnalysis/MuonAssociators/test/L1MuonMatcher/test.py +++ b/MuonAnalysis/MuonAssociators/test/L1MuonMatcher/test.py @@ -5,7 +5,6 @@ # initialize MessageLogger and output report process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('PATSummaryTables') process.MessageLogger.cerr.INFO = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), PATSummaryTables = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/MuonAnalysis/MuonAssociators/test/L1MuonMatcher/testAnyBX.py b/MuonAnalysis/MuonAssociators/test/L1MuonMatcher/testAnyBX.py index c05f91dd7818f..104b6f4c0d8d7 100644 --- a/MuonAnalysis/MuonAssociators/test/L1MuonMatcher/testAnyBX.py +++ b/MuonAnalysis/MuonAssociators/test/L1MuonMatcher/testAnyBX.py @@ -5,7 +5,6 @@ # initialize MessageLogger and output report process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('PATSummaryTables') process.MessageLogger.cerr.INFO = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), PATSummaryTables = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/MuonAnalysis/MuonAssociators/test/L1MuonMatcher/testCRAFT.py b/MuonAnalysis/MuonAssociators/test/L1MuonMatcher/testCRAFT.py index b0a1d8ea0c2c7..f57690774253b 100644 --- a/MuonAnalysis/MuonAssociators/test/L1MuonMatcher/testCRAFT.py +++ b/MuonAnalysis/MuonAssociators/test/L1MuonMatcher/testCRAFT.py @@ -5,7 +5,6 @@ # initialize MessageLogger and output report process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('PATSummaryTables') process.MessageLogger.cerr.INFO = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), PATSummaryTables = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/MuonAnalysis/MuonAssociators/test/MuonMCClassifier/debugMuonsClassByHits_cfg.py b/MuonAnalysis/MuonAssociators/test/MuonMCClassifier/debugMuonsClassByHits_cfg.py index 3508cbfb87a95..e53d0b19093f8 100644 --- a/MuonAnalysis/MuonAssociators/test/MuonMCClassifier/debugMuonsClassByHits_cfg.py +++ b/MuonAnalysis/MuonAssociators/test/MuonMCClassifier/debugMuonsClassByHits_cfg.py @@ -63,9 +63,8 @@ process.classByHits ) -process.MessageLogger.categories += [ 'MuonMCClassifier' ] + process.MessageLogger.cerr.MuonMCClassifier = cms.untracked.PSet( - optionalPSet = cms.untracked.bool(True), limit = cms.untracked.int32(10000000) ) diff --git a/MuonAnalysis/MuonAssociators/test/MuonMCClassifier/testClassByHitsTP_cfg.py b/MuonAnalysis/MuonAssociators/test/MuonMCClassifier/testClassByHitsTP_cfg.py index b435c21af2842..6e7533fe693d6 100644 --- a/MuonAnalysis/MuonAssociators/test/MuonMCClassifier/testClassByHitsTP_cfg.py +++ b/MuonAnalysis/MuonAssociators/test/MuonMCClassifier/testClassByHitsTP_cfg.py @@ -63,10 +63,6 @@ process = setCrossingFrameOn(process) ###### -process.MessageLogger.categories = cms.untracked.vstring('MuonToTrackingParticleAssociatorEDProducer', -'MuonToTrackingParticleAssociatorByHits','MuonAssociatorByHitsHelper','MuonToTrackingParticleAssociatorByHitsImpl', -'TrackerMuonHitExtractor','MuonMCClassifier', -'FwkJob','FwkReport','FwkSummary','Root_NoDictionary') process.MessageLogger.cerr = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(True), @@ -91,6 +87,7 @@ ) process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), noTimeStamps = cms.untracked.bool(True), threshold = cms.untracked.string('INFO'), diff --git a/PhysicsTools/CondLiteIO/plugins/FWLiteESRecordWriterAnalyzer.cc b/PhysicsTools/CondLiteIO/plugins/FWLiteESRecordWriterAnalyzer.cc index 4f86b3c06a252..52eacf33365d3 100644 --- a/PhysicsTools/CondLiteIO/plugins/FWLiteESRecordWriterAnalyzer.cc +++ b/PhysicsTools/CondLiteIO/plugins/FWLiteESRecordWriterAnalyzer.cc @@ -75,10 +75,11 @@ namespace edm { const ComponentDescription*& iDesc, bool iTransientAccessOnly, std::shared_ptr& whyFailedFactory, - edm::EventSetupImpl const*) const { + ESParentContext const& iParent, + edm::EventSetupImpl const* iEventSetupImpl) const { DataKey dataKey(*(iData->m_tag), iName, DataKey::kDoNotCopyMemory); - const void* pValue = this->getFromProxy(dataKey, iDesc, iTransientAccessOnly); + const void* pValue = this->getFromProxy(dataKey, iDesc, iTransientAccessOnly, iParent, iEventSetupImpl); if (nullptr == pValue) { throw cms::Exception("NoProxyException") << "No data of type \"" << iData->m_tag->name() << "\" with label \"" << iName << "\" in record \"" << this->key().name() << "\""; @@ -94,7 +95,7 @@ namespace edm { const fwliteeswriter::DummyType* value = &t; const ComponentDescription* desc = nullptr; std::shared_ptr dummy; - impl_->getImplementation(value, iName.c_str(), desc, true, dummy, nullptr); + impl_->getImplementation(value, iName.c_str(), desc, true, dummy, *context_, eventSetupImpl_); iHolder.m_data = t.m_data; iHolder.m_desc = desc; return true; diff --git a/PhysicsTools/FWLite/test/BuildFile.xml b/PhysicsTools/FWLite/test/BuildFile.xml index 7f45775f915ef..ab6db39c7f240 100644 --- a/PhysicsTools/FWLite/test/BuildFile.xml +++ b/PhysicsTools/FWLite/test/BuildFile.xml @@ -8,7 +8,7 @@ - + diff --git a/PhysicsTools/HepMCCandAlgos/plugins/GenParticleProducer.cc b/PhysicsTools/HepMCCandAlgos/plugins/GenParticleProducer.cc index 0dd7f21af6f2c..00338ca2ef8a5 100644 --- a/PhysicsTools/HepMCCandAlgos/plugins/GenParticleProducer.cc +++ b/PhysicsTools/HepMCCandAlgos/plugins/GenParticleProducer.cc @@ -10,6 +10,7 @@ #include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Utilities/interface/InputTag.h" #include "FWCore/Utilities/interface/ESGetToken.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/Candidate/interface/CandidateFwd.h" #include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" diff --git a/PhysicsTools/HepMCCandAlgos/test/testFlavorHistoryProducer.py b/PhysicsTools/HepMCCandAlgos/test/testFlavorHistoryProducer.py index 4abda8ef92453..d333fd260541a 100644 --- a/PhysicsTools/HepMCCandAlgos/test/testFlavorHistoryProducer.py +++ b/PhysicsTools/HepMCCandAlgos/test/testFlavorHistoryProducer.py @@ -16,7 +16,7 @@ # initialize MessageLogger and output report process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('PATLayer0Summary') +process.MessageLogger.PATLayer0Summary=dict() process.MessageLogger.cerr.INFO = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) ) ) diff --git a/PhysicsTools/HepMCCandAlgos/test/testParticleTreeDrawer.py b/PhysicsTools/HepMCCandAlgos/test/testParticleTreeDrawer.py index 832d1b2511a44..ce4b3019ee0ca 100644 --- a/PhysicsTools/HepMCCandAlgos/test/testParticleTreeDrawer.py +++ b/PhysicsTools/HepMCCandAlgos/test/testParticleTreeDrawer.py @@ -29,6 +29,5 @@ process.p = cms.Path(process.printTree1*process.printTree2) process.outpath = cms.EndPath(process.printEventNumber) -process.MessageLogger.destinations = cms.untracked.vstring('cout','cerr') diff --git a/PhysicsTools/JetExamples/test/printGenJetRatio.py b/PhysicsTools/JetExamples/test/printGenJetRatio.py index 020c356cc193d..daf4acc2acf88 100644 --- a/PhysicsTools/JetExamples/test/printGenJetRatio.py +++ b/PhysicsTools/JetExamples/test/printGenJetRatio.py @@ -54,7 +54,7 @@ process.p = cms.Path(process.generator*process.pgen*process.printList*process.BCRatio*process.printEvent) -process.MessageLogger.destinations = cms.untracked.vstring('cout','cerr') #process.MessageLogger.cout = cms.PSet( +# enable = cms.untracked.bool(True), # threshold = cms.untracked.string('ERROR') #) diff --git a/PhysicsTools/JetExamples/test/printJetFlavour.py b/PhysicsTools/JetExamples/test/printJetFlavour.py index 571894d50690e..7616f27ca3610 100644 --- a/PhysicsTools/JetExamples/test/printJetFlavour.py +++ b/PhysicsTools/JetExamples/test/printJetFlavour.py @@ -50,9 +50,6 @@ process.p = cms.Path(process.printList*process.myPartons*process.flavourByRef*process.flavourByVal*process.printEvent) -process.MessageLogger.destinations = cms.untracked.vstring('cout','cerr') -#process.MessageLogger.cout = cms.PSet( -# threshold = cms.untracked.string('ERROR') -#) +#process.MessageLogger.cout = dict(enable = True, threshold = 'ERROR') diff --git a/PhysicsTools/JetExamples/test/printJetFlavourInfo.py b/PhysicsTools/JetExamples/test/printJetFlavourInfo.py index f92c43e1a9608..fc8265fbb8fe0 100644 --- a/PhysicsTools/JetExamples/test/printJetFlavourInfo.py +++ b/PhysicsTools/JetExamples/test/printJetFlavourInfo.py @@ -133,7 +133,4 @@ *(process.ca15PFJets+process.caHEPTopTagJets)*process.jetFlavourInfosCA15PFJets*process.printEventCA15PFJets ) -process.MessageLogger.destinations = cms.untracked.vstring('cout','cerr') -#process.MessageLogger.cout = cms.PSet( -# threshold = cms.untracked.string('ERROR') -#) +#process.MessageLogger.cout = dict( enable = True, threshold = 'ERROR') diff --git a/PhysicsTools/JetMCAlgos/plugins/HadronAndPartonSelector.cc b/PhysicsTools/JetMCAlgos/plugins/HadronAndPartonSelector.cc index 1e1a01abb2b0c..4fd7b9f6e7b47 100644 --- a/PhysicsTools/JetMCAlgos/plugins/HadronAndPartonSelector.cc +++ b/PhysicsTools/JetMCAlgos/plugins/HadronAndPartonSelector.cc @@ -140,7 +140,7 @@ void HadronAndPartonSelector::produce(edm::Event& iEvent, const edm::EventSetup& std::string moduleName = ""; if (genEvtInfoProduct.isValid()) { - const edm::Provenance& prov = iEvent.getProvenance(genEvtInfoProduct.id()); + const edm::StableProvenance& prov = iEvent.getStableProvenance(genEvtInfoProduct.id()); moduleName = edm::moduleName(prov, iEvent.processHistory()); } diff --git a/PhysicsTools/MXNet/test/BuildFile.xml b/PhysicsTools/MXNet/test/BuildFile.xml index ab61cc8808a70..793f02af45f59 100644 --- a/PhysicsTools/MXNet/test/BuildFile.xml +++ b/PhysicsTools/MXNet/test/BuildFile.xml @@ -2,7 +2,6 @@ - diff --git a/PhysicsTools/NanoAOD/interface/SimpleFlatTableProducer.h b/PhysicsTools/NanoAOD/interface/SimpleFlatTableProducer.h index 92b704a89bef4..087fa85bdb3b9 100644 --- a/PhysicsTools/NanoAOD/interface/SimpleFlatTableProducer.h +++ b/PhysicsTools/NanoAOD/interface/SimpleFlatTableProducer.h @@ -18,7 +18,10 @@ class SimpleFlatTableProducerBase : public edm::stream::EDProducer<> { : name_(params.getParameter("name")), doc_(params.existsAs("doc") ? params.getParameter("doc") : ""), extension_(params.existsAs("extension") ? params.getParameter("extension") : false), - src_(consumes(params.getParameter("src"))) { + skipNonExistingSrc_( + params.existsAs("skipNonExistingSrc") ? params.getParameter("skipNonExistingSrc") : false), + src_(skipNonExistingSrc_ ? mayConsume(params.getParameter("src")) + : consumes(params.getParameter("src"))) { edm::ParameterSet const &varsPSet = params.getParameter("variables"); for (const std::string &vname : varsPSet.getParameterNamesForType()) { const auto &varPSet = varsPSet.getParameter(vname); @@ -58,6 +61,7 @@ class SimpleFlatTableProducerBase : public edm::stream::EDProducer<> { const std::string name_; const std::string doc_; const bool extension_; + const bool skipNonExistingSrc_; const edm::EDGetTokenT src_; class VariableBase { @@ -135,15 +139,20 @@ class SimpleFlatTableProducer : public SimpleFlatTableProducerBase(vname); const std::string &type = varPSet.getParameter("type"); if (type == "int") - extvars_.push_back(std::make_unique(vname, varPSet, this->consumesCollector())); + extvars_.push_back( + std::make_unique(vname, varPSet, this->consumesCollector(), this->skipNonExistingSrc_)); else if (type == "float") - extvars_.push_back(std::make_unique(vname, varPSet, this->consumesCollector())); + extvars_.push_back( + std::make_unique(vname, varPSet, this->consumesCollector(), this->skipNonExistingSrc_)); else if (type == "double") - extvars_.push_back(std::make_unique(vname, varPSet, this->consumesCollector())); + extvars_.push_back( + std::make_unique(vname, varPSet, this->consumesCollector(), this->skipNonExistingSrc_)); else if (type == "uint8") - extvars_.push_back(std::make_unique(vname, varPSet, this->consumesCollector())); + extvars_.push_back( + std::make_unique(vname, varPSet, this->consumesCollector(), this->skipNonExistingSrc_)); else if (type == "bool") - extvars_.push_back(std::make_unique(vname, varPSet, this->consumesCollector())); + extvars_.push_back( + std::make_unique(vname, varPSet, this->consumesCollector(), this->skipNonExistingSrc_)); else throw cms::Exception("Configuration", "unsupported type " + type + " for variable " + vname); } @@ -156,21 +165,23 @@ class SimpleFlatTableProducer : public SimpleFlatTableProducerBase> &prod) const override { std::vector selobjs; std::vector> selptrs; // for external variables - if (singleton_) { - assert(prod->size() == 1); - selobjs.push_back(&(*prod)[0]); - if (!extvars_.empty()) - selptrs.emplace_back(prod->ptrAt(0)); - } else { - for (unsigned int i = 0, n = prod->size(); i < n; ++i) { - const auto &obj = (*prod)[i]; - if (cut_(obj)) { - selobjs.push_back(&obj); - if (!extvars_.empty()) - selptrs.emplace_back(prod->ptrAt(i)); + if (prod.isValid() || !(this->skipNonExistingSrc_)) { + if (singleton_) { + assert(prod->size() == 1); + selobjs.push_back(&(*prod)[0]); + if (!extvars_.empty()) + selptrs.emplace_back(prod->ptrAt(0)); + } else { + for (unsigned int i = 0, n = prod->size(); i < n; ++i) { + const auto &obj = (*prod)[i]; + if (cut_(obj)) { + selobjs.push_back(&obj); + if (!extvars_.empty()) + selptrs.emplace_back(prod->ptrAt(i)); + } + if (selobjs.size() >= maxLen_) + break; } - if (selobjs.size() >= maxLen_) - break; } } auto out = std::make_unique(selobjs.size(), this->name_, singleton_, this->extension_); @@ -194,19 +205,29 @@ class SimpleFlatTableProducer : public SimpleFlatTableProducerBase class ValueMapVariable : public ExtVariable { public: - ValueMapVariable(const std::string &aname, const edm::ParameterSet &cfg, edm::ConsumesCollector &&cc) - : ExtVariable(aname, cfg), token_(cc.consumes>(cfg.getParameter("src"))) {} + ValueMapVariable(const std::string &aname, + const edm::ParameterSet &cfg, + edm::ConsumesCollector &&cc, + bool skipNonExistingSrc = false) + : ExtVariable(aname, cfg), + skipNonExistingSrc_(skipNonExistingSrc), + token_(skipNonExistingSrc_ ? cc.mayConsume>(cfg.getParameter("src")) + : cc.consumes>(cfg.getParameter("src"))) {} void fill(const edm::Event &iEvent, std::vector> selptrs, nanoaod::FlatTable &out) const override { edm::Handle> vmap; iEvent.getByToken(token_, vmap); - std::vector vals(selptrs.size()); - for (unsigned int i = 0, n = vals.size(); i < n; ++i) { - vals[i] = (*vmap)[selptrs[i]]; + std::vector vals; + if (vmap.isValid() || !skipNonExistingSrc_) { + vals.resize(selptrs.size()); + for (unsigned int i = 0, n = vals.size(); i < n; ++i) { + vals[i] = (*vmap)[selptrs[i]]; + } } out.template addColumn(this->name_, vals, this->doc_, this->precision_); } protected: + const bool skipNonExistingSrc_; edm::EDGetTokenT> token_; }; typedef ValueMapVariable IntExtVar; diff --git a/PhysicsTools/NanoAOD/plugins/BuildFile.xml b/PhysicsTools/NanoAOD/plugins/BuildFile.xml index cb5d60c779e54..b66dea70dbb0e 100644 --- a/PhysicsTools/NanoAOD/plugins/BuildFile.xml +++ b/PhysicsTools/NanoAOD/plugins/BuildFile.xml @@ -16,6 +16,11 @@ + + + + + diff --git a/PhysicsTools/NanoAOD/plugins/LHCInfoProducer.cc b/PhysicsTools/NanoAOD/plugins/LHCInfoProducer.cc new file mode 100644 index 0000000000000..ffc6ffa734dad --- /dev/null +++ b/PhysicsTools/NanoAOD/plugins/LHCInfoProducer.cc @@ -0,0 +1,80 @@ +// -*- C++ -*- +// +// Package: PhysicsTools/NanoAOD +// Class: LHCInfoProducer +// +/**\class LHCInfoProducer LHCInfoProducer.cc PhysicsTools/NanoAOD/plugins/LHCInfoProducer.cc + Description: [one line class summary] + Implementation: + [Notes on implementation] +*/ +// +// Original Author: Justin Williams +// Created: 05 Jul 2019 14:06:12 GMT +// +// + +// System include files +#include +#include +#include +#include +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/global/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h" +#include "FWCore/Framework/interface/SourceFactory.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/StreamID.h" + +#include "CommonTools/Egamma/interface/EffectiveAreas.h" + +#include "DataFormats/NanoAOD/interface/FlatTable.h" +#include "DataFormats/Common/interface/ValueMap.h" +#include "DataFormats/NanoAOD/interface/MergeableCounterTable.h" + +#include "FWCore/Utilities/interface/transform.h" + +#include "CondFormats/RunInfo/interface/LHCInfo.h" +#include "CondFormats/DataRecord/interface/LHCInfoRcd.h" + +class LHCInfoProducer : public edm::global::EDProducer { +public: + LHCInfoProducer(edm::ParameterSet const&) { + produces(); + } + ~LHCInfoProducer() override {} + + // ------------ method called to produce the data ------------ + void produce(edm::StreamID id, edm::Event& iEvent, const edm::EventSetup& iSetup) const override {} + + void globalBeginLuminosityBlockProduce(edm::LuminosityBlock& iLumi, edm::EventSetup const& iSetup) const override { + edm::ESHandle lhcInfo; + iSetup.get().get(lhcInfo); + const LHCInfo* info = lhcInfo.product(); + auto out = std::make_unique(); + out->addFloat("crossingAngle", "LHC crossing angle", info->crossingAngle()); + out->addFloat("betaStar", "LHC beta star", info->betaStar()); + out->addFloat("energy", "LHC beam energy", info->energy()); + iLumi.put(std::move(out)); + } + + // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); + } +}; + +DEFINE_FWK_MODULE(LHCInfoProducer); diff --git a/PhysicsTools/NanoAOD/plugins/NPUTablesProducer.cc b/PhysicsTools/NanoAOD/plugins/NPUTablesProducer.cc index aebb3ac83b200..9431eeed72bc1 100644 --- a/PhysicsTools/NanoAOD/plugins/NPUTablesProducer.cc +++ b/PhysicsTools/NanoAOD/plugins/NPUTablesProducer.cc @@ -70,7 +70,9 @@ class NPUTablesProducer : public edm::global::EDProducer<> { gpudensity /= (20.0 * (*(zbin) - *(zbin - 1))); if (savePtHatMax_) { - pthatmax = *max_element(npuProd[ibx].getPU_pT_hats().begin(), npuProd[ibx].getPU_pT_hats().end()); + if (!npuProd[ibx].getPU_pT_hats().empty()) { + pthatmax = *max_element(npuProd[ibx].getPU_pT_hats().begin(), npuProd[ibx].getPU_pT_hats().end()); + } } } } diff --git a/PhysicsTools/NanoAOD/plugins/NanoAODOutputModule.cc b/PhysicsTools/NanoAOD/plugins/NanoAODOutputModule.cc index 02198c149c17c..6cff1fb221bd8 100644 --- a/PhysicsTools/NanoAOD/plugins/NanoAODOutputModule.cc +++ b/PhysicsTools/NanoAOD/plugins/NanoAODOutputModule.cc @@ -125,6 +125,7 @@ class NanoAODOutputModule : public edm::one::OutputModule<> { std::vector m_evstrings; std::vector m_runTables; + std::vector m_lumiTables; std::vector> m_nanoMetadata; }; @@ -224,6 +225,10 @@ void NanoAODOutputModule::writeLuminosityBlock(edm::LuminosityBlockForOutput con jr->reportLumiSection(m_jrToken, iLumi.id().run(), iLumi.id().value()); m_commonLumiBranches.fill(iLumi.id()); + + for (auto& t : m_lumiTables) + t.fill(iLumi, *m_lumiTree); + m_lumiTree->Fill(); m_processHistoryRegistry.registerProcessHistory(iLumi.processHistory()); @@ -287,6 +292,7 @@ void NanoAODOutputModule::openFile(edm::FileBlock const&) { m_triggers_areSorted = false; m_evstrings.clear(); m_runTables.clear(); + m_lumiTables.clear(); const auto& keeps = keptProducts(); for (const auto& keep : keeps[edm::InEvent]) { if (keep.first->className() == "nanoaod::FlatTable") @@ -300,6 +306,17 @@ void NanoAODOutputModule::openFile(edm::FileBlock const&) { throw cms::Exception("Configuration", "NanoAODOutputModule cannot handle class " + keep.first->className()); } + for (const auto& keep : keeps[edm::InLumi]) { + if (keep.first->className() == "nanoaod::MergeableCounterTable") + m_lumiTables.push_back(SummaryTableOutputBranches(keep.first, keep.second)); + else if (keep.first->className() == "nanoaod::UniqueString" && keep.first->moduleLabel() == "nanoMetadata") + m_nanoMetadata.emplace_back(keep.first->productInstanceName(), keep.second); + else + throw cms::Exception( + "Configuration", + "NanoAODOutputModule cannot handle class " + keep.first->className() + " in LuminosityBlock branch"); + } + for (const auto& keep : keeps[edm::InRun]) { if (keep.first->className() == "nanoaod::MergeableCounterTable") m_runTables.push_back(SummaryTableOutputBranches(keep.first, keep.second)); diff --git a/PhysicsTools/NanoAOD/plugins/ProtonProducer.cc b/PhysicsTools/NanoAOD/plugins/ProtonProducer.cc new file mode 100644 index 0000000000000..4769073b5549a --- /dev/null +++ b/PhysicsTools/NanoAOD/plugins/ProtonProducer.cc @@ -0,0 +1,219 @@ +// -*- C++ -*- +// +// Package: PhysicsTools/NanoAOD +// Class: ProtonProducer +// +/**\class ProtonProducer ProtonProducer.cc PhysicsTools/NanoAOD/plugins/ProtonProducer.cc + Description: Realavent proton variables for analysis usage + Implementation: +*/ +// +// Original Author: Justin Williams +// Created: 04 Jul 2019 15:27:53 GMT +// +// + +// system include files +#include +#include +#include +#include +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/global/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/StreamID.h" + +#include "CommonTools/Egamma/interface/EffectiveAreas.h" + +#include "DataFormats/NanoAOD/interface/FlatTable.h" +#include "DataFormats/Common/interface/ValueMap.h" + +#include "DataFormats/CTPPSDetId/interface/CTPPSDetId.h" +#include "DataFormats/CTPPSReco/interface/CTPPSLocalTrackLite.h" +#include "DataFormats/ProtonReco/interface/ForwardProton.h" +#include "DataFormats/ProtonReco/interface/ForwardProtonFwd.h" +#include "DataFormats/CTPPSReco/interface/CTPPSPixelLocalTrack.h" + +class ProtonProducer : public edm::global::EDProducer<> { +public: + ProtonProducer(edm::ParameterSet const &ps) + : tokenRecoProtonsMultiRP_( + mayConsume(ps.getParameter("tagRecoProtonsMulti"))), + tokenRecoProtonsSingleRP_( + mayConsume(ps.getParameter("tagRecoProtonsSingle"))), + tokenTracksLite_(mayConsume>(ps.getParameter("tagTrackLite"))), + storeSingleRPProtons_(ps.getParameter("storeSingleRPProtons")) { + produces>("arm"); + produces("ppsTrackTable"); + if (storeSingleRPProtons_) + produces>("protonRPId"); + } + ~ProtonProducer() override {} + + // ------------ method called to produce the data ------------ + void produce(edm::StreamID id, edm::Event &iEvent, const edm::EventSetup &iSetup) const override { + // Get Forward Proton handle + edm::Handle hRecoProtonsMultiRP; + iEvent.getByToken(tokenRecoProtonsMultiRP_, hRecoProtonsMultiRP); + + edm::Handle hRecoProtonsSingleRP; + iEvent.getByToken(tokenRecoProtonsSingleRP_, hRecoProtonsSingleRP); + + // Get PPS Local Track handle + edm::Handle> ppsTracksLite; + iEvent.getByToken(tokenTracksLite_, ppsTracksLite); + + // book output variables for protons + std::vector multiRP_arm; + + // book output variables for tracks + std::vector trackX, trackY, trackTime, trackTimeUnc; + std::vector multiRPProtonIdx, decRPId, rpType; + std::vector singleRPProtonIdx, singleRP_protonRPId; + + if (storeSingleRPProtons_) { + // process single-RP protons + { + const auto &num_proton = hRecoProtonsSingleRP->size(); + singleRP_protonRPId.reserve(num_proton); + + for (const auto &proton : *hRecoProtonsSingleRP) { + CTPPSDetId rpId((*proton.contributingLocalTracks().begin())->rpId()); + unsigned int rpDecId = rpId.arm() * 100 + rpId.station() * 10 + rpId.rp(); + singleRP_protonRPId.push_back(rpDecId); + } + } + + // process multi-RP protons + { + const auto &num_proton = hRecoProtonsMultiRP->size(); + multiRP_arm.reserve(num_proton); + + for (const auto &proton : *hRecoProtonsMultiRP) { + multiRP_arm.push_back((proton.pz() < 0.) ? 1 : 0); + } + } + + // process local tracks + for (unsigned int tr_idx = 0; tr_idx < ppsTracksLite->size(); ++tr_idx) { + const auto &tr = ppsTracksLite->at(tr_idx); + + bool found = false; + + CTPPSDetId rpId(tr.rpId()); + unsigned int rpDecId = rpId.arm() * 100 + rpId.station() * 10 + rpId.rp(); + + signed int singleRP_idx = -1; + for (unsigned int p_idx = 0; p_idx < hRecoProtonsSingleRP->size(); ++p_idx) { + const auto &proton = hRecoProtonsSingleRP->at(p_idx); + + for (const auto &ref : proton.contributingLocalTracks()) { + if (ref.key() == tr_idx) { + singleRP_idx = p_idx; + found = true; + } + } + } + + signed int multiRP_idx = -1; + for (unsigned int p_idx = 0; p_idx < hRecoProtonsMultiRP->size(); ++p_idx) { + const auto &proton = hRecoProtonsMultiRP->at(p_idx); + + for (const auto &ref : proton.contributingLocalTracks()) { + if (ref.key() == tr_idx) { + multiRP_idx = p_idx; + found = true; + } + } + } + + if (found) { + singleRPProtonIdx.push_back(singleRP_idx); + multiRPProtonIdx.push_back(multiRP_idx); + decRPId.push_back(rpDecId); + rpType.push_back(rpId.subdetId()); + trackX.push_back(tr.x()); + trackY.push_back(tr.y()); + trackTime.push_back(tr.time()); + trackTimeUnc.push_back(tr.timeUnc()); + } + } + } + + else { + for (unsigned int p_idx = 0; p_idx < hRecoProtonsMultiRP->size(); ++p_idx) { + const auto &proton = hRecoProtonsMultiRP->at(p_idx); + multiRP_arm.push_back((proton.pz() < 0.) ? 1 : 0); + + for (const auto &ref : proton.contributingLocalTracks()) { + multiRPProtonIdx.push_back(p_idx); + CTPPSDetId rpId(ref->rpId()); + unsigned int rpDecId = rpId.arm() * 100 + rpId.station() * 10 + rpId.rp(); + decRPId.push_back(rpDecId); + rpType.push_back(rpId.subdetId()); + trackX.push_back(ref->x()); + trackY.push_back(ref->y()); + trackTime.push_back(ref->time()); + trackTimeUnc.push_back(ref->timeUnc()); + } + } + } + + // update proton tables + std::unique_ptr> multiRP_armV(new edm::ValueMap()); + edm::ValueMap::Filler fillermultiArm(*multiRP_armV); + fillermultiArm.insert(hRecoProtonsMultiRP, multiRP_arm.begin(), multiRP_arm.end()); + fillermultiArm.fill(); + + std::unique_ptr> protonRPIdV(new edm::ValueMap()); + edm::ValueMap::Filler fillerID(*protonRPIdV); + if (storeSingleRPProtons_) { + fillerID.insert(hRecoProtonsSingleRP, singleRP_protonRPId.begin(), singleRP_protonRPId.end()); + fillerID.fill(); + } + + // build track table + auto ppsTab = std::make_unique(trackX.size(), "PPSLocalTrack", false); + ppsTab->addColumn("multiRPProtonIdx", multiRPProtonIdx, "local track - proton correspondence"); + if (storeSingleRPProtons_) + ppsTab->addColumn("singleRPProtonIdx", singleRPProtonIdx, "local track - proton correspondence"); + ppsTab->addColumn("x", trackX, "local track x", 16); + ppsTab->addColumn("y", trackY, "local track y", 13); + ppsTab->addColumn("time", trackTime, "local track time", 16); + ppsTab->addColumn("timeUnc", trackTimeUnc, "local track time uncertainty", 13); + ppsTab->addColumn("decRPId", decRPId, "local track detector dec id"); + ppsTab->addColumn("rpType", rpType, "strip=3, pixel=4, diamond=5, timing=6"); + ppsTab->setDoc("ppsLocalTrack variables"); + + // save output + iEvent.put(std::move(multiRP_armV), "arm"); + iEvent.put(std::move(ppsTab), "ppsTrackTable"); + if (storeSingleRPProtons_) + iEvent.put(std::move(protonRPIdV), "protonRPId"); + } + + // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ + static void fillDescriptions(edm::ConfigurationDescriptions &descriptions) { + edm::ParameterSetDescription desc; + desc.add("tagRecoProtonsMulti")->setComment("multiRP proton collection"); + desc.add("tagRecoProtonsSingle")->setComment("singleRP proton collection"); + desc.add("tagTrackLite")->setComment("pps local tracks lite collection"); + desc.add("storeSingleRPProtons")->setComment("flag to store singleRP protons and associated tracks"); + descriptions.add("ProtonProducer", desc); + } + +protected: + const edm::EDGetTokenT tokenRecoProtonsMultiRP_; + const edm::EDGetTokenT tokenRecoProtonsSingleRP_; + const edm::EDGetTokenT> tokenTracksLite_; + const bool storeSingleRPProtons_; +}; + +DEFINE_FWK_MODULE(ProtonProducer); diff --git a/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc b/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc index e86bd5ba33b48..1207a565c8a40 100644 --- a/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc +++ b/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc @@ -9,6 +9,12 @@ typedef EventSingletonSimpleFlatTableProducer SimpleGenEven #include "SimDataFormats/HTXS/interface/HiggsTemplateCrossSections.h" typedef EventSingletonSimpleFlatTableProducer SimpleHTXSFlatTableProducer; +#include "DataFormats/ProtonReco/interface/ForwardProton.h" +typedef SimpleFlatTableProducer SimpleProtonTrackFlatTableProducer; + +#include "DataFormats/CTPPSReco/interface/CTPPSLocalTrackLite.h" +typedef SimpleFlatTableProducer SimpleLocalTrackFlatTableProducer; + #include "DataFormats/Math/interface/Point3D.h" typedef EventSingletonSimpleFlatTableProducer SimpleXYZPointFlatTableProducer; @@ -16,4 +22,6 @@ typedef EventSingletonSimpleFlatTableProducer SimpleXYZPointFla DEFINE_FWK_MODULE(SimpleCandidateFlatTableProducer); DEFINE_FWK_MODULE(SimpleGenEventFlatTableProducer); DEFINE_FWK_MODULE(SimpleHTXSFlatTableProducer); -DEFINE_FWK_MODULE(SimpleXYZPointFlatTableProducer); +DEFINE_FWK_MODULE(SimpleProtonTrackFlatTableProducer); +DEFINE_FWK_MODULE(SimpleLocalTrackFlatTableProducer); +DEFINE_FWK_MODULE(SimpleXYZPointFlatTableProducer); \ No newline at end of file diff --git a/PhysicsTools/NanoAOD/plugins/VertexTableProducer.cc b/PhysicsTools/NanoAOD/plugins/VertexTableProducer.cc index 415e0846d93d6..ca776d47ae56c 100644 --- a/PhysicsTools/NanoAOD/plugins/VertexTableProducer.cc +++ b/PhysicsTools/NanoAOD/plugins/VertexTableProducer.cc @@ -143,6 +143,7 @@ void VertexTableProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe iEvent.getByToken(svs_, svsIn); auto selCandSv = std::make_unique>(); std::vector dlen, dlenSig, pAngle, dxy, dxySig; + std::vector charge; VertexDistance3D vdist; VertexDistanceXY vdistXY; @@ -164,6 +165,13 @@ void VertexTableProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe PV0, VertexState(RecoVertex::convertPos(sv.position()), RecoVertex::convertError(sv.error()))); dxy.push_back(d2d.value()); dxySig.push_back(d2d.significance()); + + int sum_charge = 0; + for (unsigned int id = 0; id < sv.numberOfDaughters(); ++id) { + const reco::Candidate* daughter = sv.daughter(id); + sum_charge += daughter->charge(); + } + charge.push_back(sum_charge); } } i++; @@ -176,6 +184,7 @@ void VertexTableProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe svsTable->addColumn("dxy", dxy, "2D decay length in cm", 10); svsTable->addColumn("dxySig", dxySig, "2D decay length significance", 10); svsTable->addColumn("pAngle", pAngle, "pointing angle, i.e. acos(p_SV * (SV - PV)) ", 10); + svsTable->addColumn("charge", charge, "sum of the charge of the SV tracks", 10); iEvent.put(std::move(pvTable), "pv"); iEvent.put(std::move(otherPVsTable), "otherPVs"); diff --git a/PhysicsTools/NanoAOD/python/custom_jme_cff.py b/PhysicsTools/NanoAOD/python/custom_jme_cff.py index fc69f609339ca..9d590b575fe8a 100644 --- a/PhysicsTools/NanoAOD/python/custom_jme_cff.py +++ b/PhysicsTools/NanoAOD/python/custom_jme_cff.py @@ -1,7 +1,6 @@ import FWCore.ParameterSet.Config as cms -from Configuration.Eras.Modifier_run2_jme_2016_cff import run2_jme_2016 -from Configuration.Eras.Modifier_run2_jme_2017_cff import run2_jme_2017 +from PhysicsTools.NanoAOD.nano_eras_cff import * from CommonTools.PileupAlgos.Puppi_cff import puppi @@ -18,8 +17,8 @@ import copy -bTagCSVV2 = ['pfDeepCSVJetTags:probb','pfDeepCSVJetTags:probbb','pfDeepCSVJetTags:probc'] -bTagDeepCSV = ['pfCombinedInclusiveSecondaryVertexV2BJetTags'] +bTagCSVV2 = ['pfCombinedInclusiveSecondaryVertexV2BJetTags'] +bTagDeepCSV = ['pfDeepCSVJetTags:probb','pfDeepCSVJetTags:probbb','pfDeepCSVJetTags:probc'] bTagDeepJet = [ 'pfDeepFlavourJetTags:probb','pfDeepFlavourJetTags:probbb','pfDeepFlavourJetTags:problepb', 'pfDeepFlavourJetTags:probc','pfDeepFlavourJetTags:probuds','pfDeepFlavourJetTags:probg' @@ -27,66 +26,81 @@ from RecoBTag.ONNXRuntime.pfParticleNetAK4_cff import _pfParticleNetAK4JetTagsAll bTagDiscriminatorsForAK4 = bTagCSVV2+bTagDeepCSV+bTagDeepJet+_pfParticleNetAK4JetTagsAll +from RecoBTag.ONNXRuntime.pfDeepBoostedJet_cff import _pfDeepBoostedJetTagsAll +from RecoBTag.ONNXRuntime.pfParticleNet_cff import _pfParticleNetJetTagsAll + +btagHbb = ['pfBoostedDoubleSecondaryVertexAK8BJetTags'] +btagDDX = [ + 'pfDeepDoubleBvLJetTags:probHbb', + 'pfDeepDoubleCvLJetTags:probHcc', + 'pfDeepDoubleCvBJetTags:probHcc', + 'pfMassIndependentDeepDoubleBvLJetTags:probHbb', + 'pfMassIndependentDeepDoubleCvLJetTags:probHcc', + 'pfMassIndependentDeepDoubleCvBJetTags:probHcc' +] +btagDDXV2 = [ + 'pfMassIndependentDeepDoubleBvLV2JetTags:probHbb', + 'pfMassIndependentDeepDoubleCvLV2JetTags:probHcc', + 'pfMassIndependentDeepDoubleCvBV2JetTags:probHcc' +] + # # By default, these collections are saved in NanoAODs: -# - ak4gen (GenJet in NanoAOD), slimmedGenJets in MiniAOD -# - ak8gen (GenJetAK8 in NanoAOD), slimmedGenJetsAK8 in MiniAOD -# Below is a list of genjets that we can save in NanoAOD. Set +# - ak4gen (GenJet in NanoAOD), slimmedGenJets in MiniAOD +# - ak8gen (GenJetAK8 in NanoAOD), slimmedGenJetsAK8 in MiniAOD +# Below is a list of genjets that we can save in NanoAOD. Set # "enabled" to true if you want to store the jet collection config_genjets = [ - { - "jet" : "ak8gen", - "enabled" : False, - }, + { + "jet" : "ak6gen", + "enabled" : False, + }, ] config_genjets = list(filter(lambda k: k['enabled'], config_genjets)) # # GenJets info in NanoAOD # nanoInfo_genjets = { - "ak8gen" : { - "name" : "GenJetAK8", - "doc" : "AK8 Gen jets", + "ak6gen" : { + "name" : "GenJetAK6", + "doc" : "AK6 Gen jets (made with visible genparticles) with pt > 3 GeV", # default genjets pt cut after clustering is 3 GeV }, } # # By default, these collections are saved in the main NanoAODs: -# - ak4pfchs (Jet in NanoAOD), slimmedJets in MiniAOD -# - ak8pfpuppi (FatJet in NanoAOD), slimmedJetsAK8 in MiniAOD -# Below is a list of recojets that we can save in NanoAOD. Set +# - ak4pfchs (Jet in NanoAOD), slimmedJets in MiniAOD +# - ak8pfpuppi (FatJet in NanoAOD), slimmedJetsAK8 in MiniAOD +# Below is a list of recojets that we can save in NanoAOD. Set # "enabled" to true if you want to store the recojet collection. # config_recojets = [ { - "jet" : "ak4calo", - "enabled" : True, + "jet" : "ak4calo", + "enabled" : True, "inputCollection" : "slimmedCaloJets", #Exist in MiniAOD - "genJetsCollection": "AK4GenJetsNoNu", + "genJetsCollection": "AK4GenJetsNoNu", }, { - "jet" : "ak4pf", - "enabled" : True, + "jet" : "ak4pf", + "enabled" : False, "inputCollection" : "", - "genJetsCollection": "AK4GenJetsNoNu", + "genJetsCollection": "AK4GenJetsNoNu", + "minPtFastjet" : 0., }, { - "jet" : "ak4pfpuppi", - "enabled" : True, - "inputCollection" : "", - "genJetsCollection": "AK4GenJetsNoNu", - "bTagDiscriminators": bTagDiscriminatorsForAK4 + "jet" : "ak4pfpuppi", + "enabled" : True, + "inputCollection" : "", + "genJetsCollection": "AK4GenJetsNoNu", + "bTagDiscriminators": bTagDiscriminatorsForAK4, + "minPtFastjet" : 0., }, { - "jet" : "ak8pf", - "enabled" : True, - "inputCollection" : "", - "genJetsCollection": "slimmedGenJetsAK8", - }, - { - "jet" : "ak8pfchs", - "enabled" : True, - "inputCollection" : "", - "genJetsCollection": "slimmedGenJetsAK8", + "jet" : "ak8pf", + "enabled" : False, + "inputCollection" : "", + "genJetsCollection": "AK8GenJetsNoNu", + "minPtFastjet" : 0., }, ] config_recojets = list(filter(lambda k: k['enabled'], config_recojets)) @@ -94,42 +108,35 @@ # RecoJets info in NanoAOD # nanoInfo_recojets = { + "ak4calo" : { + "name": "JetCalo", + "doc" : "AK4 Calo jets with JECs applied", + }, + "ak4pf" : { + "name" : "JetPF", + "doc" : "AK4 PF jets", + "ptcut" : "", + }, "ak4pfpuppi" : { "name" : "JetPuppi", - "doc" : "AK4 PF Puppi jets with JECs applied, after basic selection (pt > 2)", - "ptcut" : "pt > 2", + "doc" : "AK4 PF Puppi", + "ptcut" : "", "doQGL" : True, "doPUIDVar": True, "doBTag": True, }, - "ak4pf" : { - "name" : "JetPF", - "doc" : "AK4 PF jets with JECs applied, after basic selection (pt > 2)", - "ptcut" : "pt > 2", - }, - "ak4calo" : { - "name": "JetCalo", - "doc" : "AK4 Calo jets with JECs applied", - }, - "ak8pfchs" : { - "name" : "FatJetCHS", - "doc" : "AK8 PF CHS jets with JECs applied, after basic selection (pt > 100)", - "ptcut" : "pt > 100" - }, "ak8pf" : { "name" : "FatJetPF", - "doc" : "AK8 PF jets with JECs applied, after basic selection (pt > 100)", - "ptcut" : "pt > 100", + "doc" : "AK8 PF jets", + "ptcut" : "", }, } - - GENJETVARS = cms.PSet(P4Vars, nConstituents = jetTable.variables.nConstituents, ) PFJETVARS = cms.PSet(P4Vars, - rawFactor = jetTable.variables.rawFactor, + rawFactor = Var("1.-jecFactor('Uncorrected')",float,doc="1 - Factor to get back to raw pT",precision=6), area = jetTable.variables.area, chHEF = jetTable.variables.chHEF, neHEF = jetTable.variables.neHEF, @@ -150,42 +157,46 @@ nConstPhotons = Var("photonMultiplicity()",int,doc="number of photons in the jet"), ) PUIDVARS = cms.PSet( - puId_dR2Mean = Var("userFloat('puId_dR2Mean')",float,doc="pT^2-weighted average square distance of jet constituents from the jet axis (PileUp ID BDT input variable)", precision= 6), - puId_majW = Var("userFloat('puId_majW')",float,doc="major axis of jet ellipsoid in eta-phi plane (PileUp ID BDT input variable)", precision= 6) , - puId_minW = Var("userFloat('puId_minW')",float,doc="minor axis of jet ellipsoid in eta-phi plane (PileUp ID BDT input variable)", precision= 6) , - puId_frac01 = Var("userFloat('puId_frac01')",float,doc="fraction of constituents' pT contained within dR <0.1 (PileUp ID BDT input variable)", precision= 6) , - puId_frac02 = Var("userFloat('puId_frac02')",float,doc="fraction of constituents' pT contained within 0.1< dR <0.2 (PileUp ID BDT input variable)", precision= 6) , - puId_frac03 = Var("userFloat('puId_frac03')",float,doc="fraction of constituents' pT contained within 0.2< dR <0.3 (PileUp ID BDT input variable)", precision= 6) , - puId_frac04 = Var("userFloat('puId_frac04')",float,doc="fraction of constituents' pT contained within 0.3< dR <0.4 (PileUp ID BDT input variable)", precision= 6) , - puId_ptD = Var("userFloat('puId_ptD')",float,doc="pT-weighted average pT of constituents (PileUp ID BDT input variable)", precision= 6) , - puId_beta = Var("userFloat('puId_beta')",float,doc="fraction of pT of charged constituents associated to PV (PileUp ID BDT input variable)", precision= 6) , - puId_pull = Var("userFloat('puId_pull')",float,doc="magnitude of pull vector (PileUp ID BDT input variable)", precision= 6) , - puId_jetR = Var("userFloat('puId_jetR')",float,doc="fraction of jet pT carried by the leading constituent (PileUp ID BDT input variable)", precision= 6) , - puId_jetRchg = Var("userFloat('puId_jetRchg')",float,doc="fraction of jet pT carried by the leading charged constituent (PileUp ID BDT input variable)", precision= 6) , - puId_nCharged = Var("userInt('puId_nCharged')",int,doc="number of charged constituents (PileUp ID BDT input variable)"), + puId_dR2Mean = Var("?(pt>10)?userFloat('puId_dR2Mean'):-1",float,doc="pT^2-weighted average square distance of jet constituents from the jet axis (PileUp ID BDT input variable)", precision= 6), + puId_majW = Var("?(pt>10)?userFloat('puId_majW'):-1",float,doc="major axis of jet ellipsoid in eta-phi plane (PileUp ID BDT input variable)", precision= 6), + puId_minW = Var("?(pt>10)?userFloat('puId_minW'):-1",float,doc="minor axis of jet ellipsoid in eta-phi plane (PileUp ID BDT input variable)", precision= 6), + puId_frac01 = Var("?(pt>10)?userFloat('puId_frac01'):-1",float,doc="fraction of constituents' pT contained within dR <0.1 (PileUp ID BDT input variable)", precision= 6), + puId_frac02 = Var("?(pt>10)?userFloat('puId_frac02'):-1",float,doc="fraction of constituents' pT contained within 0.1< dR <0.2 (PileUp ID BDT input variable)", precision= 6), + puId_frac03 = Var("?(pt>10)?userFloat('puId_frac03'):-1",float,doc="fraction of constituents' pT contained within 0.2< dR <0.3 (PileUp ID BDT input variable)", precision= 6), + puId_frac04 = Var("?(pt>10)?userFloat('puId_frac04'):-1",float,doc="fraction of constituents' pT contained within 0.3< dR <0.4 (PileUp ID BDT input variable)", precision= 6), + puId_ptD = Var("?(pt>10)?userFloat('puId_ptD'):-1",float,doc="pT-weighted average pT of constituents (PileUp ID BDT input variable)", precision= 6), + puId_beta = Var("?(pt>10)?userFloat('puId_beta'):-1",float,doc="fraction of pT of charged constituents associated to PV (PileUp ID BDT input variable)", precision= 6), + puId_pull = Var("?(pt>10)?userFloat('puId_pull'):-1",float,doc="magnitude of pull vector (PileUp ID BDT input variable)", precision= 6), + puId_jetR = Var("?(pt>10)?userFloat('puId_jetR'):-1",float,doc="fraction of jet pT carried by the leading constituent (PileUp ID BDT input variable)", precision= 6), + puId_jetRchg = Var("?(pt>10)?userFloat('puId_jetRchg'):-1",float,doc="fraction of jet pT carried by the leading charged constituent (PileUp ID BDT input variable)", precision= 6), + puId_nCharged = Var("?(pt>10)?userInt('puId_nCharged'):-1",int,doc="number of charged constituents (PileUp ID BDT input variable)"), ) QGLVARS = cms.PSet( - qgl_axis2 = Var("userFloat('qgl_axis2')",float,doc="ellipse minor jet axis (Quark vs Gluon likelihood input variable)", precision= 6), - qgl_ptD = Var("userFloat('qgl_ptD')",float,doc="pT-weighted average pT of constituents (Quark vs Gluon likelihood input variable)", precision= 6), - qgl_mult = Var("userInt('qgl_mult')", int,doc="PF candidates multiplicity (Quark vs Gluon likelihood input variable)"), + qgl_axis2 = Var("?(pt>10)?userFloat('qgl_axis2'):-1",float,doc="ellipse minor jet axis (Quark vs Gluon likelihood input variable)", precision= 6), + qgl_ptD = Var("?(pt>10)?userFloat('qgl_ptD'):-1",float,doc="pT-weighted average pT of constituents (Quark vs Gluon likelihood input variable)", precision= 6), + qgl_mult = Var("?(pt>10)?userInt('qgl_mult'):-1", int,doc="PF candidates multiplicity (Quark vs Gluon likelihood input variable)"), ) BTAGVARS = cms.PSet( - btagDeepB = jetTable.variables.btagDeepB, - btagCSVV2 = jetTable.variables.btagCSVV2, - btagDeepCvL = jetTable.variables.btagDeepCvL, + btagDeepB = Var("?(pt>15)&&((bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb'))>=0)?bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb'):-1",float,doc="DeepCSV b+bb tag discriminator",precision=10), + btagCSVV2 = Var("?pt>15?bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags'):-1",float,doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10), + btagDeepCvL = Var("?(pt>15)&&(bDiscriminator('pfDeepCSVJetTags:probc')>=0)?bDiscriminator('pfDeepCSVJetTags:probc')/(bDiscriminator('pfDeepCSVJetTags:probc')+bDiscriminator('pfDeepCSVJetTags:probudsg')):-1", float,doc="DeepCSV c vs udsg discriminator",precision=10), + btagDeepCvB = Var("?(pt>15)&&bDiscriminator('pfDeepCSVJetTags:probc')>=0?bDiscriminator('pfDeepCSVJetTags:probc')/(bDiscriminator('pfDeepCSVJetTags:probc')+bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')):-1",float,doc="DeepCSV c vs b+bb discriminator",precision=10), ) DEEPJETVARS = cms.PSet( - btagDeepFlavB = jetTable.variables.btagDeepFlavB, - btagDeepFlavC = Var("bDiscriminator('pfDeepFlavourJetTags:probc')",float,doc="DeepFlavour charm tag raw score",precision=10), - btagDeepFlavG = Var("bDiscriminator('pfDeepFlavourJetTags:probg')",float,doc="DeepFlavour gluon tag raw score",precision=10), - btagDeepFlavUDS = Var("bDiscriminator('pfDeepFlavourJetTags:probuds')",float,doc="DeepFlavour uds tag raw score",precision=10) + btagDeepFlavB = Var("?pt>15?bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb'):-1",float,doc="DeepJet b+bb+lepb tag discriminator",precision=10), + btagDeepFlavC = Var("?pt>15?bDiscriminator('pfDeepFlavourJetTags:probc'):-1",float,doc="DeepFlavour charm tag raw score",precision=10), + btagDeepFlavG = Var("?pt>15?bDiscriminator('pfDeepFlavourJetTags:probg'):-1",float,doc="DeepFlavour gluon tag raw score",precision=10), + btagDeepFlavUDS = Var("?pt>15?bDiscriminator('pfDeepFlavourJetTags:probuds'):-1",float,doc="DeepFlavour uds tag raw score",precision=10), + btagDeepFlavCvL = Var("?(pt>15)&&(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probuds')+bDiscriminator('pfDeepFlavourJetTags:probg'))>0?bDiscriminator('pfDeepFlavourJetTags:probc')/(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probuds')+bDiscriminator('pfDeepFlavourJetTags:probg')):-1",float,doc="DeepJet c vs uds+g discriminator",precision=10), + btagDeepFlavCvB = Var("?(pt>15)&&(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb'))>0?bDiscriminator('pfDeepFlavourJetTags:probc')/(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb')):-1",float,doc="DeepJet c vs b+bb+lepb discriminator",precision=10), + btagDeepFlavQG = Var("?(pt>15)&&(bDiscriminator('pfDeepFlavourJetTags:probg')+bDiscriminator('pfDeepFlavourJetTags:probuds'))>0?bDiscriminator('pfDeepFlavourJetTags:probg')/(bDiscriminator('pfDeepFlavourJetTags:probg')+bDiscriminator('pfDeepFlavourJetTags:probuds')):-1",float,doc="DeepJet g vs uds discriminator",precision=10), ) PARTICLENETAK4VARS = cms.PSet( - particleNetAK4_B = Var("bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:BvsAll')",float,doc="ParticleNetAK4 tagger b vs all (udsg, c) discriminator",precision=10), - particleNetAK4_CvsL = Var("bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:CvsL')",float,doc="ParticleNetAK4 tagger c vs udsg discriminator",precision=10), - particleNetAK4_CvsB = Var("bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:CvsB')",float,doc="ParticleNetAK4 tagger c vs b discriminator",precision=10), - particleNetAK4_QvsG = Var("bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:QvsG')",float,doc="ParticleNetAK4 tagger uds vs g discriminator",precision=10), - particleNetAK4_puIdDisc = Var("1-bDiscriminator('pfParticleNetAK4JetTags:probpu')",float,doc="ParticleNetAK4 tagger pileup jet discriminator",precision=10), + particleNetAK4_B = Var("?pt>15?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:BvsAll'):-1",float,doc="ParticleNetAK4 tagger b vs all (udsg, c) discriminator",precision=10), + particleNetAK4_CvsL = Var("?pt>15?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:CvsL'):-1",float,doc="ParticleNetAK4 tagger c vs udsg discriminator",precision=10), + particleNetAK4_CvsB = Var("?pt>15?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:CvsB'):-1",float,doc="ParticleNetAK4 tagger c vs b discriminator",precision=10), + particleNetAK4_QvsG = Var("?pt>15?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:QvsG'):-1",float,doc="ParticleNetAK4 tagger uds vs g discriminator",precision=10), + particleNetAK4_puIdDisc = Var("?pt>15?1-bDiscriminator('pfParticleNetAK4JetTags:probpu'):-1",float,doc="ParticleNetAK4 tagger pileup jet discriminator",precision=10), ) CALOJETVARS = cms.PSet(P4Vars, @@ -204,7 +215,7 @@ #****************************************** def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetSequenceName=""): """ - Setup modules to calculate PF jet ID + Setup modules to calculate PF jet ID """ isPUPPIJet = True if "Puppi" in jetName else False @@ -212,8 +223,8 @@ def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetSequenceName=""): looseJetId = "looseJetId{}".format(jetName) setattr(proc, looseJetId, proc.looseJetId.clone( src = jetSrc, - filterParams=proc.looseJetId.filterParams.clone( - version ="WINTER16" + filterParams = proc.looseJetId.filterParams.clone( + version = "WINTER16" ), ) ) @@ -221,8 +232,8 @@ def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetSequenceName=""): tightJetId = "tightJetId{}".format(jetName) setattr(proc, tightJetId, proc.tightJetId.clone( src = jetSrc, - filterParams=proc.tightJetId.filterParams.clone( - version = "SUMMER18{}".format("PUPPI" if isPUPPIJet else "") + filterParams = proc.tightJetId.filterParams.clone( + version = "RUN2UL{}".format("PUPPI" if isPUPPIJet else "CHS") ), ) ) @@ -230,15 +241,20 @@ def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetSequenceName=""): tightJetIdLepVeto = "tightJetIdLepVeto{}".format(jetName) setattr(proc, tightJetIdLepVeto, proc.tightJetIdLepVeto.clone( src = jetSrc, - filterParams=proc.tightJetIdLepVeto.filterParams.clone( - version = "SUMMER18{}".format("PUPPI" if isPUPPIJet else "") + filterParams = proc.tightJetIdLepVeto.filterParams.clone( + version = "RUN2UL{}".format("PUPPI" if isPUPPIJet else "CHS") ), ) ) - run2_jme_2016.toModify(getattr(proc, tightJetId) .filterParams, version = "WINTER16" ) - run2_jme_2016.toModify(getattr(proc, tightJetIdLepVeto) .filterParams, version = "WINTER16" ) - run2_jme_2017.toModify(getattr(proc, tightJetId) .filterParams, version = "WINTER17{}".format("PUPPI" if isPUPPIJet else "")) - run2_jme_2017.toModify(getattr(proc, tightJetIdLepVeto) .filterParams, version = "WINTER17{}".format("PUPPI" if isPUPPIJet else "")) + + for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016: + modifier.toModify(getattr(proc, tightJetId).filterParams, version = "WINTER16" ) + modifier.toModify(getattr(proc, tightJetIdLepVeto).filterParams, version = "WINTER16" ) + for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2: + modifier.toModify(getattr(proc, tightJetId).filterParams, version = "WINTER17{}".format("PUPPI" if isPUPPIJet else "")) + modifier.toModify(getattr(proc, tightJetIdLepVeto).filterParams, version = "WINTER17{}".format("PUPPI" if isPUPPIJet else "")) + run2_nanoAOD_102Xv1.toModify(getattr(proc, tightJetId).filterParams, version = "SUMMER18{}".format("PUPPI" if isPUPPIJet else "") ) + run2_nanoAOD_102Xv1.toModify(getattr(proc, tightJetIdLepVeto).filterParams, version = "SUMMER18{}".format("PUPPI" if isPUPPIJet else "") ) # # Save variables as userInts in each jet @@ -246,20 +262,24 @@ def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetSequenceName=""): patJetWithUserData = "{}WithUserData".format(jetSrc) getattr(proc, patJetWithUserData).userInts.tightId = cms.InputTag(tightJetId) getattr(proc, patJetWithUserData).userInts.tightIdLepVeto = cms.InputTag(tightJetIdLepVeto) - run2_jme_2016.toModify(getattr(proc, patJetWithUserData).userInts, looseId = cms.InputTag(looseJetId)) + for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016: + modifier.toModify(getattr(proc, patJetWithUserData).userInts, looseId = cms.InputTag(looseJetId)) # # Specfiy variables in the jetTable to save in NanoAOD # getattr(proc, jetTableName).variables.jetId = Var("userInt('tightId')*2+4*userInt('tightIdLepVeto')",int,doc="Jet ID flags bit1 is loose (always false in 2017 since it does not exist), bit2 is tight, bit3 is tightLepVeto") - run2_jme_2016.toModify(getattr(proc, jetTableName).variables, jetId = Var("userInt('tightIdLepVeto')*4+userInt('tightId')*2+userInt('looseId')",int, doc="Jet ID flags bit1 is loose, bit2 is tight, bit3 is tightLepVeto")) + for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016: + modifier.toModify(getattr(proc, jetTableName).variables, jetId = Var("userInt('tightIdLepVeto')*4+userInt('tightId')*2+userInt('looseId')",int, doc="Jet ID flags bit1 is loose, bit2 is tight, bit3 is tightLepVeto")) + getattr(proc,jetSequenceName).insert(getattr(proc,jetSequenceName).index(getattr(proc, jetSrc))+1, getattr(proc, tightJetId)) getattr(proc,jetSequenceName).insert(getattr(proc,jetSequenceName).index(getattr(proc, tightJetId))+1, getattr(proc, tightJetIdLepVeto)) setattr(proc,"_"+jetSequenceName+"_2016", getattr(proc,jetSequenceName).copy()) getattr(proc,"_"+jetSequenceName+"_2016").insert(getattr(proc, "_"+jetSequenceName+"_2016").index(getattr(proc, tightJetId)), getattr(proc, looseJetId)) - run2_jme_2016.toReplaceWith(getattr(proc,jetSequenceName), getattr(proc, "_"+jetSequenceName+"_2016")) + for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016: + modifier.toReplaceWith(getattr(proc,jetSequenceName), getattr(proc, "_"+jetSequenceName+"_2016")) return proc @@ -271,7 +291,7 @@ def AddPileUpJetIDVars(proc, jetName="", jetSrc="", jetTableName="", jetSequence # # Calculate pileup jet ID variables # - puJetIdVarsCalculator = "puJetIdCalculator{}".format(jetName) + puJetIdVarsCalculator = "puJetIdCalculator{}".format(jetName) setattr(proc, puJetIdVarsCalculator, pileupJetIdCalculator.clone( jets = jetSrc, vertexes = "offlineSlimmedPrimaryVertices", @@ -287,7 +307,7 @@ def AddPileUpJetIDVars(proc, jetName="", jetSrc="", jetTableName="", jetSequence # puJetIDVar = "puJetIDVar{}".format(jetName) setattr(proc, puJetIDVar, cms.EDProducer("PileupJetIDVarProducer", - srcJet = cms.InputTag(jetSrc), + srcJet = cms.InputTag(jetSrc), srcPileupJetId = cms.InputTag(puJetIdVarsCalculator) ) ) @@ -314,25 +334,25 @@ def AddPileUpJetIDVars(proc, jetName="", jetSrc="", jetTableName="", jetSequence # # Specfiy variables in the jet table to save in NanoAOD # - getattr(proc,jetTableName).variables.puId_dR2Mean = PUIDVARS.puId_dR2Mean - getattr(proc,jetTableName).variables.puId_majW = PUIDVARS.puId_majW - getattr(proc,jetTableName).variables.puId_minW = PUIDVARS.puId_minW - getattr(proc,jetTableName).variables.puId_frac01 = PUIDVARS.puId_frac01 - getattr(proc,jetTableName).variables.puId_frac02 = PUIDVARS.puId_frac02 - getattr(proc,jetTableName).variables.puId_frac03 = PUIDVARS.puId_frac03 - getattr(proc,jetTableName).variables.puId_frac04 = PUIDVARS.puId_frac04 - getattr(proc,jetTableName).variables.puId_ptD = PUIDVARS.puId_ptD - getattr(proc,jetTableName).variables.puId_beta = PUIDVARS.puId_beta - getattr(proc,jetTableName).variables.puId_pull = PUIDVARS.puId_pull - getattr(proc,jetTableName).variables.puId_jetR = PUIDVARS.puId_jetR - getattr(proc,jetTableName).variables.puId_jetRchg = PUIDVARS.puId_jetRchg - getattr(proc,jetTableName).variables.puId_nCharged = PUIDVARS.puId_nCharged + getattr(proc,jetTableName).variables.puId_dR2Mean = PUIDVARS.puId_dR2Mean + getattr(proc,jetTableName).variables.puId_majW = PUIDVARS.puId_majW + getattr(proc,jetTableName).variables.puId_minW = PUIDVARS.puId_minW + getattr(proc,jetTableName).variables.puId_frac01 = PUIDVARS.puId_frac01 + getattr(proc,jetTableName).variables.puId_frac02 = PUIDVARS.puId_frac02 + getattr(proc,jetTableName).variables.puId_frac03 = PUIDVARS.puId_frac03 + getattr(proc,jetTableName).variables.puId_frac04 = PUIDVARS.puId_frac04 + getattr(proc,jetTableName).variables.puId_ptD = PUIDVARS.puId_ptD + getattr(proc,jetTableName).variables.puId_beta = PUIDVARS.puId_beta + getattr(proc,jetTableName).variables.puId_pull = PUIDVARS.puId_pull + getattr(proc,jetTableName).variables.puId_jetR = PUIDVARS.puId_jetR + getattr(proc,jetTableName).variables.puId_jetRchg = PUIDVARS.puId_jetRchg + getattr(proc,jetTableName).variables.puId_nCharged = PUIDVARS.puId_nCharged return proc def AddQGLTaggerVars(proc, jetName="", jetSrc="", jetTableName="", jetSequenceName="", calculateQGLVars=False): """ - Schedule the QGTagger module to calculate input variables to the QG likelihood + Schedule the QGTagger module to calculate input variables to the QG likelihood """ QGLTagger="qgtagger{}".format(jetName) @@ -340,7 +360,7 @@ def AddQGLTaggerVars(proc, jetName="", jetSrc="", jetTableName="", jetSequenceNa if calculateQGLVars: setattr(proc, QGLTagger, qgtagger.clone( - srcJets=jetSrc + srcJets = jetSrc ) ) @@ -368,11 +388,13 @@ def AddBTaggingScores(proc, jetTableName=""): Store b-tagging scores from various algortihm """ - getattr(proc, jetTableName).variables.btagDeepB = jetTable.variables.btagDeepB - getattr(proc, jetTableName).variables.btagCSVV2 = jetTable.variables.btagCSVV2 - getattr(proc, jetTableName).variables.btagDeepCvL = jetTable.variables.btagDeepCvL - getattr(proc, jetTableName).variables.btagDeepFlavB = jetTable.variables.btagDeepFlavB - getattr(proc, jetTableName).variables.btagDeepFlavCvL = jetTable.variables.btagDeepFlavCvL + getattr(proc, jetTableName).variables.btagDeepB = BTAGVARS.btagDeepB + getattr(proc, jetTableName).variables.btagCSVV2 = BTAGVARS.btagCSVV2 + getattr(proc, jetTableName).variables.btagDeepCvL = BTAGVARS.btagDeepCvL + getattr(proc, jetTableName).variables.btagDeepCvB = BTAGVARS.btagDeepCvB + getattr(proc, jetTableName).variables.btagDeepFlavB = DEEPJETVARS.btagDeepFlavB + getattr(proc, jetTableName).variables.btagDeepFlavCvL = DEEPJETVARS.btagDeepFlavCvL + getattr(proc, jetTableName).variables.btagDeepFlavCvB = DEEPJETVARS.btagDeepFlavCvB return proc @@ -381,8 +403,9 @@ def AddDeepJetGluonLQuarkScores(proc, jetTableName=""): Store DeepJet raw score in jetTable for gluon and light quark """ - getattr(proc, jetTableName).variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG + getattr(proc, jetTableName).variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG getattr(proc, jetTableName).variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS + getattr(proc, jetTableName).variables.btagDeepFlavQG = DEEPJETVARS.btagDeepFlavQG return proc @@ -395,7 +418,7 @@ def AddParticleNetAK4Scores(proc, jetTableName=""): getattr(proc, jetTableName).variables.particleNetAK4_CvsL = PARTICLENETAK4VARS.particleNetAK4_CvsL getattr(proc, jetTableName).variables.particleNetAK4_CvsB = PARTICLENETAK4VARS.particleNetAK4_CvsB getattr(proc, jetTableName).variables.particleNetAK4_QvsG = PARTICLENETAK4VARS.particleNetAK4_QvsG - getattr(proc, jetTableName).variables.particleNetAK4_puIdDisc = PARTICLENETAK4VARS.particleNetAK4_puIdDisc + getattr(proc, jetTableName).variables.particleNetAK4_puIdDisc = PARTICLENETAK4VARS.particleNetAK4_puIdDisc return proc @@ -405,17 +428,10 @@ def AddNewPatJets(proc, recoJetInfo, runOnMC): """ jetName = recoJetInfo.jetUpper - payload = recoJetInfo.jetCorrPayload + payload = recoJetInfo.jetCorrPayload doPF = recoJetInfo.doPF doCalo = recoJetInfo.doCalo - - if recoJetInfo.inputCollection != "": - patJetFinalColl = recoJetInfo.inputCollection - else: - patJetFinalColl = "selectedUpdatedPatJets{}Final".format(jetName) - - if doCalo: - patJetFinalColl = "selectedPatJets{}".format(jetName) + patJetFinalColl = recoJetInfo.patJetFinalCollection nanoInfoForJet = nanoInfo_recojets[recoJetInfo.jet] jetTablePrefix = nanoInfoForJet["name"] @@ -425,14 +441,14 @@ def AddNewPatJets(proc, recoJetInfo, runOnMC): doQGL = nanoInfoForJet["doQGL"] if "doQGL" in nanoInfoForJet else False doBTag = nanoInfoForJet["doBTag"] if "doBTag" in nanoInfoForJet else False - SavePatJets(proc, - jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF, doCalo, + SavePatJets(proc, + jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF, doCalo, ptcut=ptcut, doPUIDVar=doPUIDVar, doQGL=doQGL, doBTag=doBTag, runOnMC=runOnMC ) return proc -def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, +def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF, doCalo, ptcut="", doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=False): """ Schedule modules for a given patJet collection and save its variables into custom NanoAOD @@ -454,7 +470,7 @@ def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTabl srcJets = "updatedJets{}".format(jetName) setattr(proc, srcJets, updatedJets.clone( jetSource = patJetFinalColl, - jetCorrFactorsSource=[jetCorrFactors], + jetCorrFactorsSource = [jetCorrFactors], ) ) @@ -464,7 +480,7 @@ def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTabl srcJetsWithUserData = "updatedJets{}WithUserData".format(jetName) setattr(proc, srcJetsWithUserData, cms.EDProducer("PATJetUserDataEmbedder", src = cms.InputTag(srcJets), - userFloats = cms.PSet(), + userFloats = cms.PSet(), userInts = cms.PSet(), ) ) @@ -472,10 +488,14 @@ def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTabl # # Filter jets with pt cut # + finalJetsCutDefault = "(pt >= 8)" + if runOnMC: + finalJetsCutDefault = "(pt >= 8) || ((pt < 8) && (genJetFwdRef().backRef().isNonnull()))" + finalJetsForTable = "finalJets{}".format(jetName) setattr(proc, finalJetsForTable, finalJets.clone( src = srcJetsWithUserData, - cut = ptcut + cut = ptcut if ptcut != "" else finalJetsCutDefault ) ) @@ -484,14 +504,20 @@ def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTabl # tableContent = PFJETVARS if doCalo: - tableContent = CALOJETVARS + tableContent = CALOJETVARS + + jetTableCutDefault = "" #Don't apply any cuts for the table. + + jetTableDocDefault = jetTableDoc + " with JECs applied. Jets with pt > 8 GeV are stored." + if runOnMC: + jetTableDocDefault += "For jets with pt < 8 GeV, only those matched to gen jets are stored." jetTable = "jet{}Table".format(jetName) setattr(proc,jetTable, cms.EDProducer("SimpleCandidateFlatTableProducer", src = cms.InputTag(finalJetsForTable), - cut = cms.string(""), # Don't specify cuts here + cut = cms.string(jetTableCutDefault), name = cms.string(jetTablePrefix), - doc = cms.string(jetTableDoc), + doc = cms.string(jetTableDocDefault), singleton = cms.bool(False), # the number of entries is variable extension = cms.bool(False), # this is the main table for the jets variables = cms.PSet(tableContent) @@ -530,7 +556,7 @@ def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTabl ) # - # Define the jet table sequences + # Define the jet table sequences # jetTableSequenceName = "jet{}TablesSequence".format(jetName) setattr(proc, jetTableSequenceName, cms.Sequence(getattr(proc,jetTable))) @@ -557,9 +583,9 @@ def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTabl proc = AddQGLTaggerVars(proc,jetName=jetName, jetSrc=srcJets, jetTableName=jetTable, jetSequenceName=jetSequenceName, calculateQGLVars=True) # - # Save b-tagging algorithm scores. Should only be done for jet collection with b-tagging + # Save b-tagging algorithm scores. Should only be done for jet collection with b-tagging # calculated when reclustered or collection saved with b-tagging info in MiniAOD - # + # if doBTag: AddBTaggingScores(proc,jetTableName=jetTable) AddDeepJetGluonLQuarkScores(proc,jetTableName=jetTable) @@ -579,18 +605,19 @@ def ReclusterAK4CHSJets(proc, recoJA, runOnMC): # Recluster AK4 CHS jets # cfg = { - "jet" : "ak4pfchs", - "inputCollection" : "", + "jet" : "ak4pfchs", + "inputCollection" : "", "genJetsCollection": "AK4GenJetsNoNu", - "bTagDiscriminators": bTagDiscriminatorsForAK4 + "bTagDiscriminators": bTagDiscriminatorsForAK4, + "minPtFastjet" : 0., } - recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg) + recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg) jetName = recoJetInfo.jetUpper - patJetFinalColl = "selectedUpdatedPatJets{}Final".format(jetName) + patJetFinalColl = recoJetInfo.patJetFinalCollection # - # Change the input jet source for jetCorrFactorsNano + # Change the input jet source for jetCorrFactorsNano # and updatedJets # proc.jetCorrFactorsNano.src=patJetFinalColl @@ -599,11 +626,35 @@ def ReclusterAK4CHSJets(proc, recoJA, runOnMC): # # Change pt cut # - proc.finalJets.cut = "pt > 2" - proc.simpleCleanerTable.jetSel = "pt > 10" # Change this from 15 -> 10 + finalJetsCut = "" + if runOnMC: + finalJetsCut = "(pt >= 8) || ((pt < 8) && (genJetFwdRef().backRef().isNonnull()))" + else: + finalJetsCut = "(pt >= 8)" + + proc.finalJets.cut = finalJetsCut + # + # Add a minimum pt cut for corrT1METJets. + # + proc.corrT1METJetTable.cut = "pt>=8 && pt<15 && abs(eta)<9.9" # - # Add variables + # Jet table cut + # + jetTableCut = "" # must not have any cut at the jetTable for AK4 CHS as it has been cross-cleaned + proc.jetTable.cut = jetTableCut + proc.jetMCTable.cut = jetTableCut + + # + # Jet table documentation + # + jetTableDoc = "AK4 PF CHS jets with JECs applied. Jets with pt > 8 GeV are stored." + if runOnMC: + jetTableDoc += "For jets with pt < 8 GeV, only those matched to AK4 Gen jets are stored." + proc.jetTable.doc = jetTableDoc + + # + # Add variables # proc.jetTable.variables.hfHEF = PFJETVARS.hfHEF proc.jetTable.variables.hfEmEF = PFJETVARS.hfEmEF @@ -615,21 +666,19 @@ def ReclusterAK4CHSJets(proc, recoJA, runOnMC): proc.jetTable.variables.nConstElecs = PFJETVARS.nConstElecs proc.jetTable.variables.nConstPhotons = PFJETVARS.nConstPhotons - proc.jetTable.doc = cms.string("AK4 PF CHS Jets with JECs applied, after basic selection (pt > 2)") - # # Setup pileup jet ID with 80X training. - # + # pileupJetId80X = "pileupJetId80X" setattr(proc, pileupJetId80X, pileupJetId.clone( - jets="updatedJets", - algos=cms.VPSet(_chsalgos_81x), - inputIsCorrected=True, - applyJec=False, - vertexes="offlineSlimmedPrimaryVertices" + jets = "updatedJets", + algos = cms.VPSet(_chsalgos_81x), + inputIsCorrected = True, + applyJec = False, + vertexes = "offlineSlimmedPrimaryVertices" ) ) - proc.jetSequence.insert(proc.jetSequence.index(proc.pileupJetId94X), getattr(proc, pileupJetId80X)) + proc.jetSequence.insert(proc.jetSequence.index(proc.pileupJetId94X), getattr(proc, pileupJetId80X)) proc.updatedJetsWithUserData.userInts.puId80XfullId = cms.InputTag('pileupJetId80X:fullId') run2_jme_2016.toModify(proc.updatedJetsWithUserData.userFloats, puId80XDisc = cms.InputTag("pileupJetId80X:fullDiscriminant")) @@ -641,10 +690,10 @@ def ReclusterAK4CHSJets(proc, recoJA, runOnMC): # Add variables for pileup jet ID studies. # proc = AddPileUpJetIDVars(proc, - jetName="", - jetSrc="updatedJets", - jetTableName="jetTable", - jetSequenceName="jetSequence" + jetName = "", + jetSrc = "updatedJets", + jetTableName = "jetTable", + jetSequenceName = "jetSequence" ) # # Add variables for quark guon likelihood tagger studies. @@ -654,16 +703,30 @@ def ReclusterAK4CHSJets(proc, recoJA, runOnMC): proc.updatedJetsWithUserData.userFloats.qgl_ptD = cms.InputTag("qgtagger:ptD") proc.updatedJetsWithUserData.userInts.qgl_mult = cms.InputTag("qgtagger:mult") # - # Specfiy variables in the jetTable to save in NanoAOD + # Save quark gluon likelihood input variables variables # proc.jetTable.variables.qgl_axis2 = QGLVARS.qgl_axis2 proc.jetTable.variables.qgl_ptD = QGLVARS.qgl_ptD proc.jetTable.variables.qgl_mult = QGLVARS.qgl_mult # + # Save standard b-tagging and c-tagging variables + # + proc.jetTable.variables.btagDeepB = BTAGVARS.btagDeepB + proc.jetTable.variables.btagCSVV2 = BTAGVARS.btagCSVV2 + proc.jetTable.variables.btagDeepCvL = BTAGVARS.btagDeepCvL + proc.jetTable.variables.btagDeepCvB = BTAGVARS.btagDeepCvB + # + # Save DeepJet b-tagging and c-tagging variables + # + proc.jetTable.variables.btagDeepFlavB = DEEPJETVARS.btagDeepFlavB + proc.jetTable.variables.btagDeepFlavCvL = DEEPJETVARS.btagDeepFlavCvL + proc.jetTable.variables.btagDeepFlavCvB = DEEPJETVARS.btagDeepFlavCvB + # # Save DeepJet raw score for gluon and light quarks # - proc.jetTable.variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG + proc.jetTable.variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG proc.jetTable.variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS + proc.jetTable.variables.btagDeepFlavQG = DEEPJETVARS.btagDeepFlavQG # # Add ParticleNetAK4 scores # @@ -689,13 +752,78 @@ def ReclusterAK4CHSJets(proc, recoJA, runOnMC): return proc +def AddNewAK8PuppiJetsForJEC(proc, recoJA, runOnMC): + """ + Store a separate AK8 Puppi jet collection for JEC studies. + Only minimal info are stored + """ + print("custom_jme_cff::AddNewAK8PuppiJetsForJEC: Make a new AK8 PF Puppi jet collection for JEC studies") + + # + # Recluster AK8 Puppi jets + # + cfg = { + "jet" : "ak8pfpuppi", + "inputCollection" : "", + "genJetsCollection": "AK8GenJetsNoNu", + "minPtFastjet" : 0., # Remove any pt threshold at the jet clustering stage. + } + recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg) + + jetName = recoJetInfo.jetUpper + payload = recoJetInfo.jetCorrPayload + + patJetFinalColl = recoJetInfo.patJetFinalCollection + jetTablePrefix = "FatJetForJEC" + jetTableDoc = "AK8 PF Puppi jets with JECs applied. Reclustered for JEC studies so only minimal info stored." + ptcut = ""# No need to specify ptcut. Use default in SavePatJets function + + SavePatJets(proc, + jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF=True, + doCalo=False, ptcut=ptcut, doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=runOnMC + ) + + return proc + +def AddNewAK8CHSJets(proc, recoJA, runOnMC): + """ + Store an AK8 CHS jet collection for JEC studies. + """ + print("custom_jme_cff::AddNewAK8CHSJets: Make a new AK8 PF CHS jet collection for JEC studies") + + # + # Recluster AK8 CHS jets + # + cfg = { + "jet" : "ak8pfchs", + "inputCollection" : "", + "genJetsCollection": "AK8GenJetsNoNu", + "minPtFastjet" : 0., # Remove any pt threshold at the jet clustering stage. + } + recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg) + + jetName = recoJetInfo.jetUpper + payload = recoJetInfo.jetCorrPayload + + patJetFinalColl = recoJetInfo.patJetFinalCollection + jetTablePrefix = "FatJetCHS" + jetTableDoc = "AK8 PF CHS jets with JECs applied. Reclustered for JEC studies so only minimal info stored." + ptcut = ""# No need to specify ptcut. Use default in SavePatJets function + + SavePatJets(proc, + jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF=True, + doCalo=False, ptcut=ptcut, doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=runOnMC + ) + + return proc + def AddVariablesForAK8PuppiJets(proc): """ Add more variables for AK8 PFPUPPI jets """ # - # These variables are not stored for AK8PFCHS (slimmedJetsAK8) + # These variables are not stored for AK8PFPUPPI (slimmedJetsAK8) # in MiniAOD if their pt < 170 GeV. Hence the conditional fill. # proc.fatJetTable.variables.chHEF = Var("?isPFJet()?chargedHadronEnergyFraction():-1", float, doc="charged Hadron Energy Fraction", precision = 6) @@ -746,7 +874,7 @@ def SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, gen genJetTableThisJet = "jet{}Table".format(genJetName) setattr(proc, genJetTableThisJet, genJetTable.clone( src = genJetFinalColl, - cut = "pt > 1", + cut = "", # No cut specified here. Save all gen jets after clustering name = genJetTablePrefix, doc = genJetTableDoc, variables = GENJETVARS @@ -777,15 +905,15 @@ def SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, gen getattr(proc,genJetFlavourTableThisJet) ) ) - proc.nanoSequenceMC.insert(proc.nanoSequenceMC.index(proc.jetMC)+1, getattr(proc,genJetSequenceName)) + proc.nanoSequenceMC.insert(proc.nanoSequenceMC.index(proc.jetMC)+1, getattr(proc,genJetSequenceName)) return proc def ReclusterAK4GenJets(proc, genJA): """ - Recluster AK4 Gen jets and replace - slimmedGenJets that is used as default - to save AK4 Gen jets in NanoAODs. + Recluster AK4 Gen jets and replace + slimmedGenJets that is used as default + to save AK4 Gen jets in NanoAODs. """ print("custom_jme_cff::ReclusterAK4GenJets: Recluster AK4 Gen jets") @@ -797,19 +925,19 @@ def ReclusterAK4GenJets(proc, genJA): } genJetInfo = genJA.addGenJetCollection(proc, **cfg) - genJetName = genJetInfo.jetUpper - genJetAlgo = genJetInfo.jetAlgo - genJetSize = genJetInfo.jetSize - genJetSizeNr = genJetInfo.jetSizeNr - selectedPatGenJets = "{}{}{}".format(genJetAlgo.upper(), genJetSize, "GenJetsNoNu") - + genJetName = genJetInfo.jetUpper + genJetAlgo = genJetInfo.jetAlgo + genJetSize = genJetInfo.jetSize + genJetSizeNr = genJetInfo.jetSizeNr + selectedGenJets = "{}{}{}".format(genJetAlgo.upper(), genJetSize, "GenJetsNoNu") + # - # Change jet source to the newly clustered jet collection. Set very low pt cut for jets + # Change jet source to the newly clustered jet collection. Set very low pt cut for jets # to be stored in the GenJet Table # - proc.genJetTable.src = selectedPatGenJets - proc.genJetTable.cut = "pt > 1" - proc.genJetTable.doc ="AK4 Gen jets (made with visible genparticles)" + proc.genJetTable.src = selectedGenJets + proc.genJetTable.cut = "" # No cut specified here. Save all gen jets after clustering + proc.genJetTable.doc = "AK4 Gen jets (made with visible genparticles) with pt > 3 GeV" # default pt cut after clustering is 3 GeV genJetFlavourAssociationThisJet = "genJet{}FlavourAssociation".format(genJetName) setattr(proc, genJetFlavourAssociationThisJet, genJetFlavourAssociation.clone( @@ -818,7 +946,33 @@ def ReclusterAK4GenJets(proc, genJA): rParam = genJetSizeNr, ) ) - proc.jetMC.insert(proc.jetMC.index(proc.genJetFlavourTable), getattr(proc, genJetFlavourAssociationThisJet)) + proc.jetMC.insert(proc.jetMC.index(proc.genJetFlavourTable), getattr(proc, genJetFlavourAssociationThisJet)) + return proc + +def AddNewAK8GenJetsForJEC(proc, genJA): + """ + Make a separate AK8 Gen jet collection for JEC studies. + """ + print("custom_jme_cff::AddNewAK8GenJetsForJEC: Add new AK8 Gen jets for JEC studies") + + # + # Recluster AK8 Gen jet + # + cfg = { + "jet" : "ak8gen", + } + genJetInfo = genJA.addGenJetCollection(proc, **cfg) + + genJetName = genJetInfo.jetUpper + genJetAlgo = genJetInfo.jetAlgo + genJetSize = genJetInfo.jetSize + genJetSizeNr = genJetInfo.jetSizeNr + genJetFinalColl = "{}{}{}".format(genJetAlgo.upper(), genJetSize, "GenJetsNoNu") + genJetTablePrefix = "GenJetAK8ForJEC" + genJetTableDoc = "AK8 Gen jets (made with visible genparticles) with pt > 3 GeV. Reclustered for JEC studies." + + SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=False) + return proc def AddVariablesForAK4GenJets(proc): @@ -836,7 +990,7 @@ def AddVariablesForAK8GenJets(proc): #=========================================================================== def RemoveAllJetPtCuts(proc): """ - Remove default pt cuts for all jets set in jets_cff.py + Remove default pt cuts for all jets set in jets_cff.py """ proc.finalJets.cut = "" # 15 -> 10 @@ -854,7 +1008,7 @@ def RemoveAllJetPtCuts(proc): # #=========================================================================== def PrepJMECustomNanoAOD(process,runOnMC): - + ############################################################################ # Remove all default jet pt cuts from jets_cff.py ############################################################################ @@ -871,6 +1025,10 @@ def PrepJMECustomNanoAOD(process,runOnMC): # Save additional variables for AK8 GEN jets ############################################################################ process = AddVariablesForAK8GenJets(process) + ############################################################################ + # Recluster AK8 GEN jets + ############################################################################ + process = AddNewAK8GenJetsForJEC(process, genJA) ########################################################################### # Recluster AK4 GEN jets ########################################################################### @@ -895,6 +1053,14 @@ def PrepJMECustomNanoAOD(process,runOnMC): ########################################################################### process = AddVariablesForAK8PuppiJets(process) ########################################################################### + # Build a separate AK8Puppi jet collection for JEC studies + ########################################################################### + process = AddNewAK8PuppiJetsForJEC(process, recoJA, runOnMC) + ########################################################################### + # Build a AK8CHS jet collection for JEC studies + ########################################################################### + process = AddNewAK8CHSJets(process, recoJA, runOnMC) + ########################################################################### # Recluster AK4 CHS jets and replace "slimmedJets" ########################################################################### process = ReclusterAK4CHSJets(process, recoJA, runOnMC) @@ -911,6 +1077,12 @@ def PrepJMECustomNanoAOD(process,runOnMC): ########################################################################### if runOnMC: process.puTable.savePtHatMax = True + + ########################################################################### + # Save all Parton-Shower weights + ########################################################################### + if runOnMC: + process.genWeightsTable.keepAllPSWeights = True return process diff --git a/PhysicsTools/NanoAOD/python/electrons_cff.py b/PhysicsTools/NanoAOD/python/electrons_cff.py index 3ebc6d6d510cd..4ae862884e9fd 100644 --- a/PhysicsTools/NanoAOD/python/electrons_cff.py +++ b/PhysicsTools/NanoAOD/python/electrons_cff.py @@ -1,14 +1,6 @@ import FWCore.ParameterSet.Config as cms -from Configuration.Eras.Modifier_run2_egamma_2016_cff import run2_egamma_2016 -from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy -from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv1_cff import run2_nanoAOD_94XMiniAODv1 -from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv2_cff import run2_nanoAOD_94XMiniAODv2 -from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016 -from Configuration.Eras.Modifier_run2_nanoAOD_102Xv1_cff import run2_nanoAOD_102Xv1 -from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff import run2_nanoAOD_106Xv1 -from Configuration.Eras.Modifier_run2_egamma_2017_cff import run2_egamma_2017 -from Configuration.Eras.Modifier_run2_egamma_2018_cff import run2_egamma_2018 +from PhysicsTools.NanoAOD.nano_eras_cff import * from PhysicsTools.NanoAOD.common_cff import * import PhysicsTools.PatAlgos.producersLayer1.electronProducer_cfi from math import ceil,log diff --git a/PhysicsTools/NanoAOD/python/jets_cff.py b/PhysicsTools/NanoAOD/python/jets_cff.py index 327f4eb4a1d7e..fd5e00b2695b5 100644 --- a/PhysicsTools/NanoAOD/python/jets_cff.py +++ b/PhysicsTools/NanoAOD/python/jets_cff.py @@ -1,13 +1,6 @@ import FWCore.ParameterSet.Config as cms -from Configuration.Eras.Modifier_run2_jme_2016_cff import run2_jme_2016 -from Configuration.Eras.Modifier_run2_jme_2017_cff import run2_jme_2017 -from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy -from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016 -from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv1_cff import run2_nanoAOD_94XMiniAODv1 -from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv2_cff import run2_nanoAOD_94XMiniAODv2 -from Configuration.Eras.Modifier_run2_nanoAOD_102Xv1_cff import run2_nanoAOD_102Xv1 -from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff import run2_nanoAOD_106Xv1 +from PhysicsTools.NanoAOD.nano_eras_cff import * from PhysicsTools.NanoAOD.common_cff import * from RecoJets.JetProducers.ak4PFJetsBetaStar_cfi import * @@ -155,6 +148,7 @@ puId94XDisc = cms.InputTag('pileupJetId94X:fullDiscriminant'), puId102XDisc = cms.InputTag('pileupJetId102X:fullDiscriminant'), puId106XUL17Disc = cms.InputTag('pileupJetId106XUL17:fullDiscriminant'), + puId106XUL18Disc = cms.InputTag('pileupJetId106XUL18:fullDiscriminant'), chFPV0EF = cms.InputTag("jercVars:chargedFromPV0EnergyFraction"), chFPV1EF = cms.InputTag("jercVars:chargedFromPV1EnergyFraction"), chFPV2EF = cms.InputTag("jercVars:chargedFromPV2EnergyFraction"), @@ -166,6 +160,7 @@ vtxNtrk = cms.InputTag("bJetVars:vtxNtrk"), leptonPdgId = cms.InputTag("bJetVars:leptonPdgId"), puId106XUL17Id = cms.InputTag('pileupJetId106XUL17:fullId'), + puId106XUL18Id = cms.InputTag('pileupJetId106XUL18:fullId'), ), ) for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016: @@ -237,15 +232,15 @@ btagDeepFlavCvL = Var("?(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probuds')+bDiscriminator('pfDeepFlavourJetTags:probg'))>0?bDiscriminator('pfDeepFlavourJetTags:probc')/(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probuds')+bDiscriminator('pfDeepFlavourJetTags:probg')):-1",float,doc="DeepJet c vs uds+g discriminator",precision=10), btagDeepFlavCvB = Var("?(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb'))>0?bDiscriminator('pfDeepFlavourJetTags:probc')/(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb')):-1",float,doc="DeepJet c vs b+bb+lepb discriminator",precision=10), btagDeepFlavQG = Var("?(bDiscriminator('pfDeepFlavourJetTags:probg')+bDiscriminator('pfDeepFlavourJetTags:probuds'))>0?bDiscriminator('pfDeepFlavourJetTags:probg')/(bDiscriminator('pfDeepFlavourJetTags:probg')+bDiscriminator('pfDeepFlavourJetTags:probuds')):-1",float,doc="DeepJet g vs uds discriminator",precision=10), - puIdDisc = Var("userFloat('puId102XDisc')",float,doc="Pileup ID discriminant with 102X (2018) training",precision=10), - puId = Var("userInt('pileupJetId:fullId')",int,doc="Pileup ID flags for pre-UL trainings"), + puIdDisc = Var("userFloat('puId106XUL18Disc')", float,doc="Pileup ID discriminant with 106X (2018) training",precision=10), + puId = Var("userInt('puId106XUL18Id')", int,doc="Pileup ID flags with 106X (2018) training"), jetId = Var("userInt('tightId')*2+4*userInt('tightIdLepVeto')",int,doc="Jet ID flags bit1 is loose (always false in 2017 since it does not exist), bit2 is tight, bit3 is tightLepVeto"), qgl = Var("userFloat('qgl')",float,doc="Quark vs Gluon likelihood discriminator",precision=10), hfsigmaEtaEta = Var("userFloat('hfJetShowerShape:sigmaEtaEta')",float,doc="sigmaEtaEta for HF jets (noise discriminating variable)",precision=10), hfsigmaPhiPhi = Var("userFloat('hfJetShowerShape:sigmaPhiPhi')",float,doc="sigmaPhiPhi for HF jets (noise discriminating variable)",precision=10), hfcentralEtaStripSize = Var("userInt('hfJetShowerShape:centralEtaStripSize')", int, doc="eta size of the central tower strip in HF (noise discriminating variable) "), hfadjacentEtaStripsSize = Var("userInt('hfJetShowerShape:adjacentEtaStripsSize')", int, doc="eta size of the strips next to the central tower strip in HF (noise discriminating variable) "), - nConstituents = Var("numberOfDaughters()",int,doc="Number of particles in the jet"), + nConstituents = Var("numberOfDaughters()","uint8",doc="Number of particles in the jet"), rawFactor = Var("1.-jecFactor('Uncorrected')",float,doc="1 - Factor to get back to raw pT",precision=6), chHEF = Var("chargedHadronEnergyFraction()", float, doc="charged Hadron Energy Fraction", precision= 6), neHEF = Var("neutralHadronEnergyFraction()", float, doc="neutral Hadron Energy Fraction", precision= 6), @@ -272,7 +267,10 @@ ) for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016: modifier.toModify( jetTable.variables, jetId = Var("userInt('tightIdLepVeto')*4+userInt('tightId')*2+userInt('looseId')",int,doc="Jet ID flags bit1 is loose, bit2 is tight, bit3 is tightLepVeto")) +run2_nanoAOD_102Xv1.toModify( jetTable.variables, puIdDisc = Var("userFloat('puId102XDisc')",float,doc="Pileup ID discriminant with 102X (2018) training",precision=10) ) +run2_nanoAOD_102Xv1.toModify( jetTable.variables, puId = Var("userInt('pileupJetId:fullId')",int,doc="Pileup ID flags for pre-UL trainings") ) run2_jme_2016.toModify( jetTable.variables, puIdDisc = Var("userFloat('pileupJetId:fullDiscriminant')",float,doc="Pileup ID discriminant with 80X (2016) training",precision=10)) +run2_jme_2016.toModify( jetTable.variables, puId = Var("userInt('pileupJetId:fullId')",int,doc="Pileup ID flags for pre-UL trainings")) run2_jme_2017.toModify( jetTable.variables, puId = Var("userInt('puId106XUL17Id')", int,doc="Pileup ID flags with 106X (2017) training")) run2_jme_2017.toModify( jetTable.variables, puIdDisc = Var("userFloat('puId106XUL17Disc')", float,doc="Pileup ID discriminant with 106X (2017) training",precision=10)) for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2: @@ -478,8 +476,7 @@ # btagDeepC = Var("bDiscriminator('pfDeepCSVJetTags:probc')",float,doc="CMVA V2 btag discriminator",precision=10), #puIdDisc = Var("userFloat('pileupJetId:fullDiscriminant')",float,doc="Pileup ID discriminant",precision=10), -# nConstituents = Var("numberOfDaughters()",int,doc="Number of particles in the jet"), -# rawFactor = Var("1.-jecFactor('Uncorrected')",float,doc="1 - Factor to get back to raw pT",precision=6), + nConstituents = Var("numberOfDaughters()","uint8",doc="Number of particles in the jet"), ), externalVariables = cms.PSet( lsf3 = ExtVar(cms.InputTag("lepInJetVars:lsf3"),float, doc="Lepton Subjet Fraction (3 subjets)",precision=10), @@ -705,13 +702,14 @@ qgtagger=QGTagger.clone(srcJets="updatedJets",srcVertexCollection="offlineSlimmedPrimaryVertices") -from RecoJets.JetProducers.PileupJetID_cfi import pileupJetId, _chsalgos_94x, _chsalgos_102x, _chsalgos_106X_UL17 +from RecoJets.JetProducers.PileupJetID_cfi import pileupJetId, _chsalgos_94x, _chsalgos_102x, _chsalgos_106X_UL17, _chsalgos_106X_UL18 pileupJetId94X=pileupJetId.clone(jets="updatedJets",algos = cms.VPSet(_chsalgos_94x),inputIsCorrected=True,applyJec=False,vertexes="offlineSlimmedPrimaryVertices") pileupJetId102X=pileupJetId.clone(jets="updatedJets",algos = cms.VPSet(_chsalgos_102x),inputIsCorrected=True,applyJec=False,vertexes="offlineSlimmedPrimaryVertices") pileupJetId106XUL17=pileupJetId.clone(jets="updatedJets",algos = cms.VPSet(_chsalgos_106X_UL17),inputIsCorrected=True,applyJec=False,vertexes="offlineSlimmedPrimaryVertices") +pileupJetId106XUL18=pileupJetId.clone(jets="updatedJets",algos = cms.VPSet(_chsalgos_106X_UL18),inputIsCorrected=True,applyJec=False,vertexes="offlineSlimmedPrimaryVertices") #before cross linking -jetSequence = cms.Sequence(jetCorrFactorsNano+updatedJets+tightJetId+tightJetIdLepVeto+bJetVars+qgtagger+jercVars+pileupJetId94X+pileupJetId102X+pileupJetId106XUL17+updatedJetsWithUserData+jetCorrFactorsAK8+updatedJetsAK8+tightJetIdAK8+tightJetIdLepVetoAK8+updatedJetsAK8WithUserData+chsForSATkJets+softActivityJets+softActivityJets2+softActivityJets5+softActivityJets10+finalJets+finalJetsAK8) +jetSequence = cms.Sequence(jetCorrFactorsNano+updatedJets+tightJetId+tightJetIdLepVeto+bJetVars+qgtagger+jercVars+pileupJetId94X+pileupJetId102X+pileupJetId106XUL17+pileupJetId106XUL18+updatedJetsWithUserData+jetCorrFactorsAK8+updatedJetsAK8+tightJetIdAK8+tightJetIdLepVetoAK8+updatedJetsAK8WithUserData+chsForSATkJets+softActivityJets+softActivityJets2+softActivityJets5+softActivityJets10+finalJets+finalJetsAK8) _jetSequence_2016 = jetSequence.copy() diff --git a/PhysicsTools/NanoAOD/python/met_cff.py b/PhysicsTools/NanoAOD/python/met_cff.py index 5014bee5059cb..67d4ee111c4ce 100644 --- a/PhysicsTools/NanoAOD/python/met_cff.py +++ b/PhysicsTools/NanoAOD/python/met_cff.py @@ -1,8 +1,7 @@ import FWCore.ParameterSet.Config as cms from PhysicsTools.NanoAOD.common_cff import * +from PhysicsTools.NanoAOD.nano_eras_cff import * -from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv1_cff import run2_nanoAOD_94XMiniAODv1 -from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv2_cff import run2_nanoAOD_94XMiniAODv2 ##################### Tables for final output and docs ########################## metTable = cms.EDProducer("SimpleCandidateFlatTableProducer", diff --git a/PhysicsTools/NanoAOD/python/muons_cff.py b/PhysicsTools/NanoAOD/python/muons_cff.py index 00b761684d295..4ba4893755fb1 100644 --- a/PhysicsTools/NanoAOD/python/muons_cff.py +++ b/PhysicsTools/NanoAOD/python/muons_cff.py @@ -1,10 +1,6 @@ import FWCore.ParameterSet.Config as cms -from Configuration.Eras.Modifier_run2_muon_2016_cff import run2_muon_2016 -from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy -from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016 -from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv1_cff import run2_nanoAOD_94XMiniAODv1 -from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv2_cff import run2_nanoAOD_94XMiniAODv2 -from Configuration.Eras.Modifier_run2_nanoAOD_102Xv1_cff import run2_nanoAOD_102Xv1 + +from PhysicsTools.NanoAOD.nano_eras_cff import * from PhysicsTools.NanoAOD.common_cff import * import PhysicsTools.PatAlgos.producersLayer1.muonProducer_cfi diff --git a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py index 3975bc350388b..fd7601b6aa136 100644 --- a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py +++ b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py @@ -162,6 +162,7 @@ NoPlot('muonIdx3SJ'), Plot1D('n2b1', 'n2b1', 20, 0, 1, 'N2 (beta=1)'), Plot1D('n3b1', 'n3b1', 20, 0, 5, 'N3 (beta=1)'), + Plot1D('nConstituents', 'nConstituents', 20, 0, 80, 'Number of particles in the jet'), Plot1D('nBHadrons', 'nBHadrons', 4, -0.5, 3.5, 'number of b-hadrons'), Plot1D('nCHadrons', 'nCHadrons', 4, -0.5, 3.5, 'number of c-hadrons'), Plot1D('particleNetMD_QCD', 'particleNetMD_QCD', 20, 0, 1, 'Mass-decorrelated ParticleNet tagger raw QCD score'), @@ -512,6 +513,19 @@ Plot1D('z', 'z', 20, -20, 20, 'Z position of other primary vertices, excluding the main PV'), ) ), + PPSLocalTrack = cms.PSet( + sels = cms.PSet(), + plots = cms.VPSet( + Count1D('_size', 26, -0.5, 25.5, 'ppsLocalTrack variables'), + Plot1D('decRPId', 'decRPId', 20, 0, 200, 'local track detector dec id'), + NoPlot('multiRPProtonIdx'), + Plot1D('rpType', 'rpType', 2, 3.5, 5.5, 'strip=3, pixel=4, diamond=5, timing=6'), + Plot1D('time', 'time', 20, -2, 2, 'local track time'), + Plot1D('timeUnc', 'timeUnc', 20, 0, 0.3, 'local track time uncertainty'), + Plot1D('x', 'x', 20, 2, 30, 'local track x'), + Plot1D('y', 'y', 20, -20, 20, 'local track y'), + ) + ), PSWeight = cms.PSet( sels = cms.PSet(), plots = cms.VPSet( @@ -568,6 +582,28 @@ NoPlot('vidNestedWPBitmap'), ) ), + Proton_multiRP = cms.PSet( + sels = cms.PSet(), + plots = cms.VPSet( + Count1D('_size', 3, -0.5, 2.5, 'bon'), + Plot1D('arm', 'arm', 2, -0.5, 1.5, '0 = sector45, 1 = sector56'), + Plot1D('t', 't', 20, -500, -0.003, 'Mandelstam variable t'), + Plot1D('thetaX', 'thetaX', 20, -0.0004, 0.0004, 'scattering angle in the y direction'), + Plot1D('thetaY', 'thetaY', 20, -0.001, 0.001, 'scattering angle in the x direction'), + Plot1D('time', 'time', 20, -1000, -1000, 'time'), + Plot1D('timeUnc', 'timeUnc', 20, 0, 0, 'time uncertainty'), + Plot1D('xi', 'xi', 20, 0, 0.3, 'fractional momentum loss'), + ) + ), + Proton_singleRP = cms.PSet( + sels = cms.PSet(), + plots = cms.VPSet( + Count1D('_size', 3, -0.5, 2.5, 'bon'), + Plot1D('xi', 'xi', 20, 0, 0.3, 'fractional momentum loss'), + Plot1D('thetaY', 'thetaY', 20, -0.001, 0.001, 'scattering angle in the x direction'), + Plot1D('decRPId', 'decRPId', 20, 0, 200, 'Detector ID'), + ) + ), Pileup = cms.PSet( sels = cms.PSet(), plots = cms.VPSet( @@ -634,6 +670,7 @@ Plot1D('y', 'y', 20, -0.5, 0.5, 'secondary vertex Y position, in cm'), Plot1D('z', 'z', 20, -10, 10, 'secondary vertex Z position, in cm'), Plot1D('ntracks', 'ntracks', 11, -0.5, 10.5, 'number of tracks'), + Plot1D('charge', 'charge', 11 , -0.5, 10.5, 'sum of the charge of the SV tracks'), ) ), SoftActivityJet = cms.PSet( diff --git a/PhysicsTools/NanoAOD/python/nano_cff.py b/PhysicsTools/NanoAOD/python/nano_cff.py index 89fbe3b2ca22f..0ebe6d9e66061 100644 --- a/PhysicsTools/NanoAOD/python/nano_cff.py +++ b/PhysicsTools/NanoAOD/python/nano_cff.py @@ -1,6 +1,7 @@ from __future__ import print_function import FWCore.ParameterSet.Config as cms from PhysicsTools.NanoAOD.common_cff import * +from PhysicsTools.NanoAOD.nano_eras_cff import * from PhysicsTools.NanoAOD.jets_cff import * from PhysicsTools.NanoAOD.muons_cff import * from PhysicsTools.NanoAOD.taus_cff import * @@ -17,18 +18,9 @@ from PhysicsTools.NanoAOD.met_cff import * from PhysicsTools.NanoAOD.triggerObjects_cff import * from PhysicsTools.NanoAOD.isotracks_cff import * +from PhysicsTools.NanoAOD.protons_cff import * from PhysicsTools.NanoAOD.NanoAODEDMEventContent_cff import * -from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy -from Configuration.Eras.Modifier_run2_nanoAOD_92X_cff import run2_nanoAOD_92X -from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016 -from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv1_cff import run2_nanoAOD_94XMiniAODv1 -from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv2_cff import run2_nanoAOD_94XMiniAODv2 -from Configuration.Eras.Modifier_run2_nanoAOD_102Xv1_cff import run2_nanoAOD_102Xv1 -from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff import run2_nanoAOD_106Xv1 -from Configuration.Eras.Modifier_run2_egamma_2017_cff import run2_egamma_2017 -from Configuration.Eras.Modifier_run2_egamma_2018_cff import run2_egamma_2018 - nanoMetadata = cms.EDProducer("UniqueStringProducer", strings = cms.PSet( @@ -98,6 +90,9 @@ ) ) +lhcInfoTable = cms.EDProducer("LHCInfoProducer", + precision = cms.int32(10), +) lheInfoTable = cms.EDProducer("LHETablesProducer", lheInfo = cms.VInputTag(cms.InputTag("externalLHEProducer"), cms.InputTag("source")), @@ -116,8 +111,9 @@ jetTables + muonTables + tauTables + electronTables + photonTables + globalTables +vertexTables+ metTables+simpleCleanerTable + isoTrackTables ) nanoSequenceOnlyFullSim = cms.Sequence(triggerObjectTables + l1bits) +nanoSequenceOnlyData = cms.Sequence(protonTables + lhcInfoTable) -nanoSequence = cms.Sequence(nanoSequenceCommon + nanoSequenceOnlyFullSim) +nanoSequence = cms.Sequence(nanoSequenceCommon + nanoSequenceOnlyData + nanoSequenceOnlyFullSim) nanoSequenceFS = cms.Sequence(genParticleSequence + genVertexTables + particleLevelSequence + nanoSequenceCommon + jetMC + muonMC + electronMC + photonMC + tauMC + metMC + ttbarCatMCProducers + globalTablesMC + btagWeightTable + genWeightsTable + genVertexTable + genParticleTables + particleLevelTables + lheInfoTable + ttbarCategoryTable ) @@ -223,7 +219,6 @@ def nanoAOD_recalibrateMETs(process,isData): reclusterJets = cms.untracked.bool(False), ) run2_nanoAOD_106Xv1.toModify(nanoAOD_PuppiV15_switch,recoMetFromPFCs=True,reclusterJets=True) - runMetCorAndUncFromMiniAOD(process,isData=isData,metType="Puppi",postfix="Puppi",jetFlavor="AK4PFPuppi", recoMetFromPFCs=bool(nanoAOD_PuppiV15_switch.recoMetFromPFCs), reclusterJets=bool(nanoAOD_PuppiV15_switch.reclusterJets)) if nanoAOD_PuppiV15_switch.reclusterJets: from RecoJets.JetProducers.ak4PFJets_cfi import ak4PFJets from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask, addToProcessAndTask @@ -242,11 +237,13 @@ def nanoAOD_recalibrateMETs(process,isData): muSource =cms.InputTag( 'slimmedMuons'), elSource = cms.InputTag('slimmedElectrons'), genParticles= cms.InputTag('prunedGenParticles'), - getJetMCFlavour=False + getJetMCFlavour= False ) process.patJetsPuppi.addGenPartonMatch = cms.bool(False) process.patJetsPuppi.addGenJetMatch = cms.bool(False) + + runMetCorAndUncFromMiniAOD(process,isData=isData,metType="Puppi",postfix="Puppi",jetFlavor="AK4PFPuppi", recoMetFromPFCs=bool(nanoAOD_PuppiV15_switch.recoMetFromPFCs), reclusterJets=bool(nanoAOD_PuppiV15_switch.reclusterJets)) process.nanoSequenceCommon.insert(process.nanoSequenceCommon.index(process.jetSequence),cms.Sequence(process.puppiMETSequence+process.fullPatMetSequencePuppi)) return process diff --git a/PhysicsTools/NanoAOD/python/nano_eras_cff.py b/PhysicsTools/NanoAOD/python/nano_eras_cff.py new file mode 100644 index 0000000000000..9f3723cbae97a --- /dev/null +++ b/PhysicsTools/NanoAOD/python/nano_eras_cff.py @@ -0,0 +1,18 @@ +from Configuration.Eras.Modifier_run2_egamma_2016_cff import run2_egamma_2016 +from Configuration.Eras.Modifier_run2_egamma_2017_cff import run2_egamma_2017 +from Configuration.Eras.Modifier_run2_egamma_2018_cff import run2_egamma_2018 +from Configuration.Eras.Modifier_run2_jme_2016_cff import run2_jme_2016 +from Configuration.Eras.Modifier_run2_jme_2017_cff import run2_jme_2017 +from Configuration.Eras.Modifier_run2_muon_2016_cff import run2_muon_2016 + +from Configuration.Eras.Modifier_run2_HLTconditions_2016_cff import run2_HLTconditions_2016 +from Configuration.Eras.Modifier_run2_HLTconditions_2017_cff import run2_HLTconditions_2017 + +from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy +from Configuration.Eras.Modifier_run2_nanoAOD_92X_cff import run2_nanoAOD_92X +from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv1_cff import run2_nanoAOD_94XMiniAODv1 +from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv2_cff import run2_nanoAOD_94XMiniAODv2 +from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016 +from Configuration.Eras.Modifier_run2_nanoAOD_102Xv1_cff import run2_nanoAOD_102Xv1 +from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff import run2_nanoAOD_106Xv1 +from Configuration.Eras.Modifier_run2_nanoAOD_106Xv2_cff import run2_nanoAOD_106Xv2 diff --git a/PhysicsTools/NanoAOD/python/nanogen_cff.py b/PhysicsTools/NanoAOD/python/nanogen_cff.py index 8bb4f31e9322a..1bf13f9310b23 100644 --- a/PhysicsTools/NanoAOD/python/nanogen_cff.py +++ b/PhysicsTools/NanoAOD/python/nanogen_cff.py @@ -8,6 +8,7 @@ from PhysicsTools.NanoAOD.genWeightsTable_cfi import * from PhysicsTools.NanoAOD.genVertex_cff import * from PhysicsTools.NanoAOD.common_cff import Var,CandVars +from PhysicsTools.NanoAOD.nano_eras_cff import * nanoMetadata = cms.EDProducer("UniqueStringProducer", strings = cms.PSet( @@ -63,13 +64,6 @@ def customizeNanoGENFromMini(process): process.nanogenSequence.insert(0, process.genParticles2HepMC) process.nanogenSequence.insert(0, process.mergedGenParticles) - from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy - from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016 - from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv1_cff import run2_nanoAOD_94XMiniAODv1 - from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv2_cff import run2_nanoAOD_94XMiniAODv2 - from Configuration.Eras.Modifier_run2_nanoAOD_102Xv1_cff import run2_nanoAOD_102Xv1 - from Configuration.Eras.Modifier_run2_nanoAOD_92X_cff import run2_nanoAOD_92X - (run2_nanoAOD_92X | run2_miniAOD_80XLegacy | run2_nanoAOD_94X2016 | run2_nanoAOD_94X2016 | \ run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94XMiniAODv2 | \ run2_nanoAOD_102Xv1).toReplaceWith(nanogenSequence, nanogenSequence.copyAndExclude([genVertexTable, genVertexT0Table])) @@ -116,9 +110,8 @@ def customizeNanoGEN(process): # Prune gen particles with tight conditions applied in usual NanoAOD def pruneGenParticlesNano(process): - process.finalGenParticles = finalGenParticles.clone() - process.genParticleTable.src = "prunedGenParticles" - process.patJetPartons.particles = "prunedGenParticles" + process.finalGenParticles.src = process.genParticleTable.src.getModuleLabel() + process.genParticleTable.src = "finalGenParticles" process.nanogenSequence.insert(0, process.finalGenParticles) return process @@ -129,8 +122,9 @@ def pruneGenParticlesMini(process): "Use a different customization.") from PhysicsTools.PatAlgos.slimming.prunedGenParticles_cfi import prunedGenParticles process.prunedGenParticles = prunedGenParticles.clone() + process.prunedGenParticles.src = "genParticles" process.genParticleTable.src = "prunedGenParticles" - process.patJetPartons.particles = "prunedGenParticles" + process.nanogenSequence.insert(0, process.prunedGenParticles) return process diff --git a/PhysicsTools/NanoAOD/python/photons_cff.py b/PhysicsTools/NanoAOD/python/photons_cff.py index 1b570ced93e7b..321ab7e3ca25c 100644 --- a/PhysicsTools/NanoAOD/python/photons_cff.py +++ b/PhysicsTools/NanoAOD/python/photons_cff.py @@ -1,15 +1,9 @@ import FWCore.ParameterSet.Config as cms -from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy +from PhysicsTools.NanoAOD.nano_eras_cff import * from PhysicsTools.NanoAOD.common_cff import * + from math import ceil,log -from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy -from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv1_cff import run2_nanoAOD_94XMiniAODv1 -from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv2_cff import run2_nanoAOD_94XMiniAODv2 -from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016 -from Configuration.Eras.Modifier_run2_nanoAOD_102Xv1_cff import run2_nanoAOD_102Xv1 -from Configuration.Eras.Modifier_run2_egamma_2017_cff import run2_egamma_2017 -from Configuration.Eras.Modifier_run2_egamma_2018_cff import run2_egamma_2018 photon_id_modules_WorkingPoints_nanoAOD = cms.PSet( modules = cms.vstring( diff --git a/PhysicsTools/NanoAOD/python/protons_cff.py b/PhysicsTools/NanoAOD/python/protons_cff.py new file mode 100644 index 0000000000000..95a017cdac2a9 --- /dev/null +++ b/PhysicsTools/NanoAOD/python/protons_cff.py @@ -0,0 +1,73 @@ +import FWCore.ParameterSet.Config as cms +from PhysicsTools.NanoAOD.common_cff import * +from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy +from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv1_cff import run2_nanoAOD_94XMiniAODv1 +from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv2_cff import run2_nanoAOD_94XMiniAODv2 +from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016 +from Configuration.Eras.Modifier_run2_nanoAOD_102Xv1_cff import run2_nanoAOD_102Xv1 +from RecoPPS.ProtonReconstruction.ppsFilteredProtonProducer_cfi import * + +singleRPProtons = True + +filteredProtons = ppsFilteredProtonProducer.clone( + protons_single_rp = cms.PSet( + include = cms.bool(singleRPProtons) + ) +) + +protonTable = cms.EDProducer("ProtonProducer", + tagRecoProtonsMulti = cms.InputTag("filteredProtons", "multiRP"), + tagTrackLite = cms.InputTag("ctppsLocalTrackLiteProducer"), + storeSingleRPProtons = cms.bool(singleRPProtons) +) +protonTable.tagRecoProtonsSingle = cms.InputTag("filteredProtons" if singleRPProtons else "ctppsProtons","singleRP") + + +multiRPTable = cms.EDProducer("SimpleProtonTrackFlatTableProducer", + src = cms.InputTag("filteredProtons","multiRP"), + cut = cms.string(""), + name = cms.string("Proton_multiRP"), + doc = cms.string("bon"), + singleton = cms.bool(False), + extension = cms.bool(False), + skipNonExistingSrc = cms.bool(True), + variables = cms.PSet( + xi = Var("xi",float,doc="xi or dp/p",precision=12), + thetaX = Var("thetaX",float,doc="theta x",precision=13), + thetaY = Var("thetaY",float,doc="theta y",precision=13), + t = Var("t",float,doc="Mandelstam variable t",precision=13), + time = Var("time()",float,doc="time",precision=16), + timeUnc = Var("timeError",float,doc="time uncertainty",precision=13), + ), + externalVariables = cms.PSet( + arm = ExtVar("protonTable:arm",int,doc="0 = sector45, 1 = sector56"), + ), +) + +singleRPTable = cms.EDProducer("SimpleProtonTrackFlatTableProducer", + src = cms.InputTag("filteredProtons","singleRP"), + cut = cms.string(""), + name = cms.string("Proton_singleRP"), + doc = cms.string("bon"), + singleton = cms.bool(False), + extension = cms.bool(False), + skipNonExistingSrc = cms.bool(True), + variables = cms.PSet( + xi = Var("xi",float,doc="xi or dp/p",precision=12), + thetaY = Var("thetaY",float,doc="th y",precision=10), + ), + externalVariables = cms.PSet( + decRPId = ExtVar("protonTable:protonRPId",int,doc="Detector ID",precision=8), + ), +) + +protonTables = cms.Sequence( + filteredProtons + +protonTable + +multiRPTable +) + +if singleRPProtons: protonTables.insert(protonTables.index(multiRPTable),singleRPTable) + +for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_94X2016, run2_nanoAOD_102Xv1: + modifier.toReplaceWith(protonTables, cms.Sequence()) diff --git a/PhysicsTools/NanoAOD/python/taus_updatedMVAIds_cff.py b/PhysicsTools/NanoAOD/python/taus_updatedMVAIds_cff.py index 7bd46c486e2c5..633f9b73794e1 100644 --- a/PhysicsTools/NanoAOD/python/taus_updatedMVAIds_cff.py +++ b/PhysicsTools/NanoAOD/python/taus_updatedMVAIds_cff.py @@ -5,13 +5,8 @@ from RecoTauTag.Configuration.loadRecoTauTagMVAsFromPrepDB_cfi import * from RecoTauTag.RecoTau.PATTauDiscriminationByMVAIsolationRun2_cff import * from RecoTauTag.RecoTau.TauDiscriminatorTools import noPrediscriminants -from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy -from Configuration.Eras.Modifier_run2_nanoAOD_92X_cff import run2_nanoAOD_92X -from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv1_cff import run2_nanoAOD_94XMiniAODv1 -from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv2_cff import run2_nanoAOD_94XMiniAODv2 -from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016 -from Configuration.Eras.Modifier_run2_nanoAOD_102Xv1_cff import run2_nanoAOD_102Xv1 -from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff import run2_nanoAOD_106Xv1 + +from PhysicsTools.NanoAOD.nano_eras_cff import * ### MVAIso 2017v2 ## DBoldDM diff --git a/PhysicsTools/NanoAOD/python/triggerObjects_cff.py b/PhysicsTools/NanoAOD/python/triggerObjects_cff.py index 735ed63562bb9..6c56743440c09 100644 --- a/PhysicsTools/NanoAOD/python/triggerObjects_cff.py +++ b/PhysicsTools/NanoAOD/python/triggerObjects_cff.py @@ -1,8 +1,6 @@ import FWCore.ParameterSet.Config as cms -from Configuration.Eras.Modifier_run2_HLTconditions_2016_cff import run2_HLTconditions_2016 -from Configuration.Eras.Modifier_run2_HLTconditions_2017_cff import run2_HLTconditions_2017 -from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy -from PhysicsTools.NanoAOD.common_cff import ExtVar +from PhysicsTools.NanoAOD.nano_eras_cff import * +from PhysicsTools.NanoAOD.common_cff import * import copy unpackedPatTrigger = cms.EDProducer("PATTriggerObjectStandAloneUnpacker", @@ -219,7 +217,17 @@ ) from PhysicsTools.PatUtils.L1ECALPrefiringWeightProducer_cff import prefiringweight -run2_HLTconditions_2016.toModify(prefiringweight, DataEra = cms.string("2016BtoH")) +#Next line will be updated once we get UL2016 maps +run2_jme_2016.toModify( prefiringweight, DataEra = cms.string("2016BtoH")) +#Next line is for UL2017 maps +run2_jme_2017.toModify( prefiringweight, DataEra = cms.string("UL2017BtoF")) +#For pre-UL 2017 reprocessing, one should use the original maps and no muon jet protection +for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2: + modifier.toModify( prefiringweight, DataEra = cms.string("2017BtoF")) + modifier.toModify( prefiringweight, JetMaxMuonFraction = cms.double(-1.) ) +#For pre-UL 2016 reprocessing, same thing +run2_nanoAOD_94X2016.toModify( prefiringweight, DataEra = cms.string("2016BtoH") ) +run2_nanoAOD_94X2016.toModify( prefiringweight, JetMaxMuonFraction = cms.double(-1.) ) l1PreFiringEventWeightTable = cms.EDProducer("GlobalVariablesTableProducer", variables = cms.PSet( diff --git a/PhysicsTools/ONNXRuntime/test/BuildFile.xml b/PhysicsTools/ONNXRuntime/test/BuildFile.xml index 86eeda01a7820..b8af87ffa32de 100644 --- a/PhysicsTools/ONNXRuntime/test/BuildFile.xml +++ b/PhysicsTools/ONNXRuntime/test/BuildFile.xml @@ -2,7 +2,6 @@ - diff --git a/PhysicsTools/PatAlgos/plugins/BuildFile.xml b/PhysicsTools/PatAlgos/plugins/BuildFile.xml index 957b468c99b10..d17868f1629ff 100644 --- a/PhysicsTools/PatAlgos/plugins/BuildFile.xml +++ b/PhysicsTools/PatAlgos/plugins/BuildFile.xml @@ -9,6 +9,7 @@ + diff --git a/PhysicsTools/PatAlgos/plugins/LeptonUpdater.cc b/PhysicsTools/PatAlgos/plugins/LeptonUpdater.cc index 7a454341e3d72..3cda27184130a 100644 --- a/PhysicsTools/PatAlgos/plugins/LeptonUpdater.cc +++ b/PhysicsTools/PatAlgos/plugins/LeptonUpdater.cc @@ -4,6 +4,7 @@ #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "PhysicsTools/PatUtils/interface/MiniIsolation.h" #include "DataFormats/Common/interface/View.h" diff --git a/PhysicsTools/PatAlgos/plugins/LowPtGSFToPackedCandidateLinker.cc b/PhysicsTools/PatAlgos/plugins/LowPtGSFToPackedCandidateLinker.cc index 3ca2e5c385b12..a82b2fd3ac561 100644 --- a/PhysicsTools/PatAlgos/plugins/LowPtGSFToPackedCandidateLinker.cc +++ b/PhysicsTools/PatAlgos/plugins/LowPtGSFToPackedCandidateLinker.cc @@ -1,10 +1,11 @@ #include #include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/Common/interface/RefToPtr.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" #include "DataFormats/GsfTrackReco/interface/GsfTrack.h" #include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" +#include "DataFormats/PatCandidates/interface/Electron.h" #include "DataFormats/PatCandidates/interface/PackedCandidate.h" #include "DataFormats/Common/interface/Association.h" #include "FWCore/Framework/interface/global/EDProducer.h" @@ -19,6 +20,9 @@ #include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" #include "FWCore/Framework/interface/MakerMacros.h" +typedef edm::Ptr PackedCandidatePtr; +typedef std::vector PackedCandidatePtrCollection; + class LowPtGSFToPackedCandidateLinker : public edm::global::EDProducer<> { public: explicit LowPtGSFToPackedCandidateLinker(const edm::ParameterSet&); @@ -36,6 +40,7 @@ class LowPtGSFToPackedCandidateLinker : public edm::global::EDProducer<> { const edm::EDGetTokenT > lost2trk_; const edm::EDGetTokenT > gsf2trk_; const edm::EDGetTokenT > gsftracks_; + const edm::EDGetTokenT > electrons_; }; LowPtGSFToPackedCandidateLinker::LowPtGSFToPackedCandidateLinker(const edm::ParameterSet& iConfig) @@ -48,37 +53,26 @@ LowPtGSFToPackedCandidateLinker::LowPtGSFToPackedCandidateLinker(const edm::Para lost2trk_{consumes >( iConfig.getParameter("lostTracks"))}, gsf2trk_{consumes >(iConfig.getParameter("gsfToTrack"))}, - gsftracks_{consumes >(iConfig.getParameter("gsfTracks"))} { - produces >("packedCandidates"); - produces >("lostTracks"); + gsftracks_{consumes >(iConfig.getParameter("gsfTracks"))}, + electrons_{consumes >(iConfig.getParameter("electrons"))} { + produces >("gsf2packed"); + produces >("gsf2lost"); + produces >("ele2packed"); + produces >("ele2lost"); } LowPtGSFToPackedCandidateLinker::~LowPtGSFToPackedCandidateLinker() {} void LowPtGSFToPackedCandidateLinker::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { - edm::Handle pfcands; - iEvent.getByToken(pfcands_, pfcands); - - edm::Handle packed; - iEvent.getByToken(packed_, packed); - - edm::Handle lost_tracks; - iEvent.getByToken(lost_tracks_, lost_tracks); - - edm::Handle > pf2packed; - iEvent.getByToken(pf2packed_, pf2packed); - - edm::Handle > lost2trk_assoc; - iEvent.getByToken(lost2trk_, lost2trk_assoc); - - edm::Handle > gsftracks; - iEvent.getByToken(gsftracks_, gsftracks); - - edm::Handle tracks; - iEvent.getByToken(tracks_, tracks); - - edm::Handle > gsf2trk; - iEvent.getByToken(gsf2trk_, gsf2trk); + auto pfcands = iEvent.getHandle(pfcands_); + auto packed = iEvent.getHandle(packed_); + auto lost_tracks = iEvent.getHandle(lost_tracks_); + auto pf2packed = iEvent.getHandle(pf2packed_); + auto lost2trk_assoc = iEvent.getHandle(lost2trk_); + auto gsftracks = iEvent.getHandle(gsftracks_); + auto tracks = iEvent.getHandle(tracks_); + auto gsf2trk = iEvent.getHandle(gsf2trk_); + auto electrons = iEvent.getHandle(electrons_); // collection sizes, for reference const size_t npf = pfcands->size(); @@ -86,6 +80,7 @@ void LowPtGSFToPackedCandidateLinker::produce(edm::StreamID, edm::Event& iEvent, const size_t nlost = lost_tracks->size(); const size_t ntracks = tracks->size(); const size_t ngsf = gsftracks->size(); + const size_t nele = electrons->size(); //store index mapping in vectors for easy and fast access std::vector trk2packed(ntracks, npacked); @@ -94,6 +89,8 @@ void LowPtGSFToPackedCandidateLinker::produce(edm::StreamID, edm::Event& iEvent, //store auxiliary mappings for association std::vector gsf2pack(ngsf, -1); std::vector gsf2lost(ngsf, -1); + PackedCandidatePtrCollection ele2packedptr(nele, PackedCandidatePtr(packed, -1)); + PackedCandidatePtrCollection ele2lostptr(nele, PackedCandidatePtr(lost_tracks, -1)); //electrons will never store their track (they store the Gsf track) //map PackedPF <--> Track @@ -103,8 +100,7 @@ void LowPtGSFToPackedCandidateLinker::produce(edm::StreamID, edm::Event& iEvent, auto packed_ref = (*pf2packed)[pf_ref]; if (cand.charge() && packed_ref.isNonnull() && cand.trackRef().isNonnull() && cand.trackRef().id() == tracks.id()) { size_t trkid = cand.trackRef().index(); - size_t packid = packed_ref.index(); - trk2packed[trkid] = packid; + trk2packed[trkid] = packed_ref.index(); } } @@ -113,22 +109,20 @@ void LowPtGSFToPackedCandidateLinker::produce(edm::StreamID, edm::Event& iEvent, reco::TrackRef key(tracks, itrk); pat::PackedCandidateRef lostTrack = (*lost2trk_assoc)[key]; if (lostTrack.isNonnull()) { - size_t ilost = lostTrack.index(); //assumes that LostTracks are all made from the same track collection - trk2lost[itrk] = ilost; + trk2lost[itrk] = lostTrack.index(); // assumes that LostTracks are all made from the same track collection } } //map Track --> GSF and fill GSF --> PackedCandidates and GSF --> Lost associations for (unsigned int igsf = 0; igsf < ngsf; ++igsf) { - reco::GsfTrackRef gref(gsftracks, igsf); - reco::TrackRef trk = (*gsf2trk)[gref]; - if (trk.id() != tracks.id()) { + reco::GsfTrackRef gsf_ref(gsftracks, igsf); + reco::TrackRef trk_ref = (*gsf2trk)[gsf_ref]; + if (trk_ref.id() != tracks.id()) { throw cms::Exception( "WrongCollection", "The reco::Track collection used to match against the GSF Tracks was not used to produce such tracks"); } - size_t trkid = trk.index(); - + size_t trkid = trk_ref.index(); if (trk2packed[trkid] != npacked) { gsf2pack[igsf] = trk2packed[trkid]; } @@ -137,18 +131,51 @@ void LowPtGSFToPackedCandidateLinker::produce(edm::StreamID, edm::Event& iEvent, } } + //map Electron-->pat::PFCandidatePtr via Electron-->GsfTrack-->Track and Track-->pat::PFCandidatePtr + for (unsigned int iele = 0; iele < nele; ++iele) { + auto const& ele = (*electrons)[iele]; + reco::GsfTrackRef gsf_ref = ele.core()->gsfTrack(); + reco::TrackRef trk_ref = (*gsf2trk)[gsf_ref]; + if (trk_ref.id() != tracks.id()) { + throw cms::Exception( + "WrongCollection", + "The reco::Track collection used to match against the GSF Tracks was not used to produce such tracks"); + } + size_t trkid = trk_ref.index(); + auto packedIdx = trk2packed[trkid]; + if (packedIdx != npacked) { + ele2packedptr[iele] = PackedCandidatePtr(packed, packedIdx); + } + auto lostIdx = trk2lost[trkid]; + if (lostIdx != nlost) { + ele2lostptr[iele] = PackedCandidatePtr(lost_tracks, lostIdx); + } + } + // create output collections from the mappings auto assoc_gsf2pack = std::make_unique >(packed); edm::Association::Filler gsf2pack_filler(*assoc_gsf2pack); gsf2pack_filler.insert(gsftracks, gsf2pack.begin(), gsf2pack.end()); gsf2pack_filler.fill(); - iEvent.put(std::move(assoc_gsf2pack), "packedCandidates"); + iEvent.put(std::move(assoc_gsf2pack), "gsf2packed"); auto assoc_gsf2lost = std::make_unique >(lost_tracks); edm::Association::Filler gsf2lost_filler(*assoc_gsf2lost); gsf2lost_filler.insert(gsftracks, gsf2lost.begin(), gsf2lost.end()); gsf2lost_filler.fill(); - iEvent.put(std::move(assoc_gsf2lost), "lostTracks"); + iEvent.put(std::move(assoc_gsf2lost), "gsf2lost"); + + auto map_ele2packedptr = std::make_unique >(); + edm::ValueMap::Filler ele2packedptr_filler(*map_ele2packedptr); + ele2packedptr_filler.insert(electrons, ele2packedptr.begin(), ele2packedptr.end()); + ele2packedptr_filler.fill(); + iEvent.put(std::move(map_ele2packedptr), "ele2packed"); + + auto map_ele2lostptr = std::make_unique >(); + edm::ValueMap::Filler ele2lostptr_filler(*map_ele2lostptr); + ele2lostptr_filler.insert(electrons, ele2lostptr.begin(), ele2lostptr.end()); + ele2lostptr_filler.fill(); + iEvent.put(std::move(map_ele2lostptr), "ele2lost"); } void LowPtGSFToPackedCandidateLinker::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { @@ -159,6 +186,7 @@ void LowPtGSFToPackedCandidateLinker::fillDescriptions(edm::ConfigurationDescrip desc.add("tracks", edm::InputTag("generalTracks")); desc.add("gsfToTrack", edm::InputTag("lowPtGsfToTrackLinks")); desc.add("gsfTracks", edm::InputTag("lowPtGsfEleGsfTracks")); + desc.add("electrons", edm::InputTag("selectedPatLowPtElectrons")); descriptions.add("lowPtGsfLinksDefault", desc); } diff --git a/PhysicsTools/PatAlgos/plugins/PATElectronProducer.cc b/PhysicsTools/PatAlgos/plugins/PATElectronProducer.cc index c7e13d69917f3..d27001ad46947 100644 --- a/PhysicsTools/PatAlgos/plugins/PATElectronProducer.cc +++ b/PhysicsTools/PatAlgos/plugins/PATElectronProducer.cc @@ -383,10 +383,8 @@ void PATElectronProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe if (itElectron->gsfTrack() == i->gsfTrackRef()) { Matched = true; } else { - for (reco::GsfTrackRefVector::const_iterator it = itElectron->ambiguousGsfTracksBegin(); - it != itElectron->ambiguousGsfTracksEnd(); - it++) { - MatchedToAmbiguousGsfTrack |= (bool)(i->gsfTrackRef() == (*it)); + for (auto const& it : itElectron->ambiguousGsfTracks()) { + MatchedToAmbiguousGsfTrack |= (bool)(i->gsfTrackRef() == it); } } diff --git a/PhysicsTools/PatAlgos/plugins/PATJetUpdater.cc b/PhysicsTools/PatAlgos/plugins/PATJetUpdater.cc index 52e313290e93b..78a3d23a2b43d 100644 --- a/PhysicsTools/PatAlgos/plugins/PATJetUpdater.cc +++ b/PhysicsTools/PatAlgos/plugins/PATJetUpdater.cc @@ -26,6 +26,7 @@ PATJetUpdater::PATJetUpdater(const edm::ParameterSet& iConfig) : useUserData_(iConfig.exists("userData")), printWarning_(iConfig.getParameter("printWarning")) { // initialize configurables jetsToken_ = consumes>(iConfig.getParameter("jetSource")); + sort_ = iConfig.getParameter("sort"); addJetCorrFactors_ = iConfig.getParameter("addJetCorrFactors"); if (addJetCorrFactors_) { jetCorrFactorsTokens_ = edm::vector_transform( @@ -216,7 +217,9 @@ void PATJetUpdater::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { } // sort jets in pt - std::sort(patJets->begin(), patJets->end(), pTComparator_); + if (sort_) { + std::sort(patJets->begin(), patJets->end(), pTComparator_); + } // put genEvt in Event iEvent.put(std::move(patJets)); @@ -232,6 +235,9 @@ void PATJetUpdater::fillDescriptions(edm::ConfigurationDescriptions& description // input source iDesc.add("jetSource", edm::InputTag("no default"))->setComment("input collection"); + // sort inputs (by pt) + iDesc.add("sort", true); + // tag info iDesc.add("addTagInfos", true); std::vector emptyVInputTags; diff --git a/PhysicsTools/PatAlgos/plugins/PATJetUpdater.h b/PhysicsTools/PatAlgos/plugins/PATJetUpdater.h index ff8fcf25152ba..344cbb6e4e852 100644 --- a/PhysicsTools/PatAlgos/plugins/PATJetUpdater.h +++ b/PhysicsTools/PatAlgos/plugins/PATJetUpdater.h @@ -42,6 +42,7 @@ namespace pat { private: // configurables edm::EDGetTokenT > jetsToken_; + bool sort_; bool addJetCorrFactors_; std::vector > > jetCorrFactorsTokens_; diff --git a/PhysicsTools/PatAlgos/plugins/PATLostTracks.cc b/PhysicsTools/PatAlgos/plugins/PATLostTracks.cc index fc8f02c417651..d2d61a179e928 100644 --- a/PhysicsTools/PatAlgos/plugins/PATLostTracks.cc +++ b/PhysicsTools/PatAlgos/plugins/PATLostTracks.cc @@ -1,28 +1,15 @@ -#include - -#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" #include "DataFormats/PatCandidates/interface/PackedCandidate.h" -#include "DataFormats/PatCandidates/interface/Jet.h" #include "DataFormats/Common/interface/Association.h" +#include "DataFormats/MuonReco/interface/Muon.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" #include "FWCore/Framework/interface/global/EDProducer.h" -#include "DataFormats/Common/interface/View.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/Exception.h" -#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "DataFormats/PatCandidates/interface/Jet.h" -#include "DataFormats/Common/interface/Association.h" -#include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" #include "CommonTools/Utils/interface/StringCutObjectSelector.h" namespace { @@ -50,9 +37,11 @@ namespace pat { const reco::TrackRef& trk, const reco::VertexRef& pvSlimmed, const reco::VertexRefProd& pvSlimmedColl, - const reco::Vertex& pvOrig, - const TrkStatus trkStatus, + const TrkStatus& trkStatus, + const pat::PackedCandidate::PVAssociationQuality& pvAssocQuality, edm::Handle muons) const; + std::pair associateTrkToVtx(const reco::VertexCollection& vertices, + const reco::TrackRef& trk) const; private: const edm::EDGetTokenT cands_; @@ -68,10 +57,16 @@ namespace pat { const double minPixelHits_; const double minPtToStoreProps_; const int covarianceVersion_; - const int covarianceSchema_; + const std::vector covariancePackingSchemas_; std::vector qualsToAutoAccept_; const edm::EDGetTokenT muons_; StringCutObjectSelector passThroughCut_; + const double maxDzForPrimaryAssignment_; + const double maxDzSigForPrimaryAssignment_; + const double maxDzErrorForPrimaryAssignment_; + const double maxDxyForNotReconstructedPrimary_; + const double maxDxySigForNotReconstructedPrimary_; + const bool useLegacySetup_; }; } // namespace pat @@ -90,9 +85,20 @@ pat::PATLostTracks::PATLostTracks(const edm::ParameterSet& iConfig) minPixelHits_(iConfig.getParameter("minPixelHits")), minPtToStoreProps_(iConfig.getParameter("minPtToStoreProps")), covarianceVersion_(iConfig.getParameter("covarianceVersion")), - covarianceSchema_(iConfig.getParameter("covarianceSchema")), + covariancePackingSchemas_(iConfig.getParameter>("covariancePackingSchemas")), muons_(consumes(iConfig.getParameter("muons"))), - passThroughCut_(iConfig.getParameter("passThroughCut")) { + passThroughCut_(iConfig.getParameter("passThroughCut")), + maxDzForPrimaryAssignment_( + iConfig.getParameter("pvAssignment").getParameter("maxDzForPrimaryAssignment")), + maxDzSigForPrimaryAssignment_( + iConfig.getParameter("pvAssignment").getParameter("maxDzSigForPrimaryAssignment")), + maxDzErrorForPrimaryAssignment_(iConfig.getParameter("pvAssignment") + .getParameter("maxDzErrorForPrimaryAssignment")), + maxDxyForNotReconstructedPrimary_(iConfig.getParameter("pvAssignment") + .getParameter("maxDxyForNotReconstructedPrimary")), + maxDxySigForNotReconstructedPrimary_(iConfig.getParameter("pvAssignment") + .getParameter("maxDxySigForNotReconstructedPrimary")), + useLegacySetup_(iConfig.getParameter("useLegacySetup")) { std::vector trkQuals(iConfig.getParameter>("qualsToAutoAccept")); std::transform( trkQuals.begin(), trkQuals.end(), std::back_inserter(qualsToAutoAccept_), reco::TrackBase::qualityByName); @@ -140,12 +146,8 @@ void pat::PATLostTracks::produce(edm::StreamID, edm::Event& iEvent, const edm::E iEvent.getByToken(pv_, pvs); reco::VertexRef pv(pvs.id()); reco::VertexRefProd pvRefProd(pvs); - if (!pvs->empty()) { - pv = reco::VertexRef(pvs, 0); - } edm::Handle pvOrigs; iEvent.getByToken(pvOrigs_, pvOrigs); - const reco::Vertex& pvOrig = (*pvOrigs)[0]; auto outPtrTrks = std::make_unique>(); auto outPtrTrksAsCands = std::make_unique>(); @@ -198,7 +200,15 @@ void pat::PATLostTracks::produce(edm::StreamID, edm::Event& iEvent, const edm::E reco::TrackRef trk(tracks, trkIndx); if (trkStatus[trkIndx] == TrkStatus::VTX || (trkStatus[trkIndx] == TrkStatus::NOTUSED && passTrkCuts(*trk))) { outPtrTrks->emplace_back(*trk); - addPackedCandidate(*outPtrTrksAsCands, trk, pv, pvRefProd, pvOrig, trkStatus[trkIndx], muons); + //association to PV + std::pair pvAsso = associateTrkToVtx(*pvOrigs, trk); + const reco::VertexRef& pvOrigRef = reco::VertexRef(pvOrigs, pvAsso.first); + if (pvOrigRef.isNonnull()) { + pv = reco::VertexRef(pvs, pvOrigRef.key()); // WARNING: assume the PV slimmer is keeping same order + } else if (!pvs->empty()) { + pv = reco::VertexRef(pvs, 0); + } + addPackedCandidate(*outPtrTrksAsCands, trk, pv, pvRefProd, trkStatus[trkIndx], pvAsso.second, muons); //for creating the reco::Track -> pat::PackedCandidate map //not done for the lostTrack:eleTracks collection @@ -206,7 +216,15 @@ void pat::PATLostTracks::produce(edm::StreamID, edm::Event& iEvent, const edm::E lostTrkIndx++; } else if ((trkStatus[trkIndx] == TrkStatus::PFELECTRON || trkStatus[trkIndx] == TrkStatus::PFPOSITRON) && passTrkCuts(*trk)) { - addPackedCandidate(*outPtrEleTrksAsCands, trk, pv, pvRefProd, pvOrig, trkStatus[trkIndx], muons); + //association to PV + std::pair pvAsso = associateTrkToVtx(*pvOrigs, trk); + const reco::VertexRef& pvOrigRef = reco::VertexRef(pvOrigs, pvAsso.first); + if (pvOrigRef.isNonnull()) { + pv = reco::VertexRef(pvs, pvOrigRef.key()); // WARNING: assume the PV slimmer is keeping same order + } else if (!pvs->empty()) { + pv = reco::VertexRef(pvs, 0); + } + addPackedCandidate(*outPtrEleTrksAsCands, trk, pv, pvRefProd, trkStatus[trkIndx], pvAsso.second, muons); } } @@ -232,8 +250,8 @@ void pat::PATLostTracks::addPackedCandidate(std::vector& c const reco::TrackRef& trk, const reco::VertexRef& pvSlimmed, const reco::VertexRefProd& pvSlimmedColl, - const reco::Vertex& pvOrig, - const pat::PATLostTracks::TrkStatus trkStatus, + const pat::PATLostTracks::TrkStatus& trkStatus, + const pat::PackedCandidate::PVAssociationQuality& pvAssocQuality, edm::Handle muons) const { const float mass = 0.13957018; @@ -251,20 +269,116 @@ void pat::PATLostTracks::addPackedCandidate(std::vector& c } } + pat::PackedCandidate::LostInnerHits lostHits = pat::PackedCandidate::noLostInnerHits; + int nlost = trk->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS); + if (nlost == 0) { + if (trk->hitPattern().hasValidHitInPixelLayer(PixelSubdetector::SubDetector::PixelBarrel, 1)) { + lostHits = pat::PackedCandidate::validHitInFirstPixelBarrelLayer; + } + } else { + lostHits = (nlost == 1 ? pat::PackedCandidate::oneLostInnerHit : pat::PackedCandidate::moreLostInnerHits); + } + reco::Candidate::PolarLorentzVector p4(trk->pt(), trk->eta(), trk->phi(), mass); cands.emplace_back( pat::PackedCandidate(p4, trk->vertex(), trk->pt(), trk->eta(), trk->phi(), id, pvSlimmedColl, pvSlimmed.key())); - if (trk->quality(reco::TrackBase::highPurity)) - cands.back().setTrackHighPurity(true); - else - cands.back().setTrackHighPurity(false); + cands.back().setTrackHighPurity(trk->quality(reco::TrackBase::highPurity)); - if (trk->pt() > minPtToStoreProps_ || trkStatus == TrkStatus::VTX) - cands.back().setTrackProperties(*trk, covarianceSchema_, covarianceVersion_); - if (pvOrig.trackWeight(trk) > 0.5) { - cands.back().setAssociationQuality(pat::PackedCandidate::UsedInFitTight); + cands.back().setLostInnerHits(lostHits); + if (trk->pt() > minPtToStoreProps_ || trkStatus == TrkStatus::VTX) { + if (useLegacySetup_ || std::abs(id) == 11 || trkStatus == TrkStatus::VTX) { + cands.back().setTrackProperties(*trk, covariancePackingSchemas_[4], covarianceVersion_); + } else { + if (trk->hitPattern().numberOfValidPixelHits() > 0) { + cands.back().setTrackProperties( + *trk, covariancePackingSchemas_[0], covarianceVersion_); // high quality with pixels + } else { + cands.back().setTrackProperties( + *trk, covariancePackingSchemas_[1], covarianceVersion_); // high quality without pixels + } + } + } else if (!useLegacySetup_ && trk->pt() > 0.5) { + if (trk->hitPattern().numberOfValidPixelHits() > 0) { + cands.back().setTrackProperties( + *trk, covariancePackingSchemas_[2], covarianceVersion_); // low quality with pixels + } else { + cands.back().setTrackProperties( + *trk, covariancePackingSchemas_[3], covarianceVersion_); // low quality without pixels + } + } + cands.back().setAssociationQuality(pvAssocQuality); +} + +std::pair pat::PATLostTracks::associateTrkToVtx( + const reco::VertexCollection& vertices, const reco::TrackRef& trk) const { + //For legacy setup check only if the track is used in fit of the PV, i.e. vertices[0], + //and associate quality if weight > 0.5. Otherwise return invalid vertex index (-1) + //and default quality flag (NotReconstructedPrimary = 0) + if (useLegacySetup_) { + float w = vertices[0].trackWeight(trk); + if (w > 0.5) { + return std::pair(0, pat::PackedCandidate::UsedInFitTight); + } else if (w > 0.) { + return std::pair(0, + pat::PackedCandidate::NotReconstructedPrimary); + } else { + return std::pair(-1, + pat::PackedCandidate::NotReconstructedPrimary); + } + } + + //Inspired by CommonTools/RecoAlgos/interface/PrimaryVertexAssignment.h + //but without specific association for secondaries in jets and option to use timing + + int iVtxMaxWeight = -1; + int iVtxMinDzDist = -1; + size_t idx = 0; + float maxWeight = 0; + double minDz = std::numeric_limits::max(); + double minDzSig = std::numeric_limits::max(); + for (auto const& vtx : vertices) { + float w = vtx.trackWeight(trk); + double dz = std::abs(trk->dz(vtx.position())); + double dzSig = dz / trk->dzError(); + if (w > maxWeight) { + maxWeight = w; + iVtxMaxWeight = idx; + } + if (dzSig < minDzSig) { + minDzSig = dzSig; + minDz = dz; + iVtxMinDzDist = idx; + } + idx++; + } + // vertex in which fit the track was used + if (iVtxMaxWeight >= 0) { + if (maxWeight > 0.5) { + return std::pair(iVtxMaxWeight, + pat::PackedCandidate::UsedInFitTight); + } else { + return std::pair(iVtxMaxWeight, + pat::PackedCandidate::UsedInFitLoose); + } + } + // vertex "closest in Z" with tight cuts (targetting primary particles) + if (minDz < maxDzForPrimaryAssignment_) { + const double add_cov = vertices[iVtxMinDzDist].covariance(2, 2); + const double dzErr = sqrt(trk->dzError() * trk->dzError() + add_cov); + if (minDz / dzErr < maxDzSigForPrimaryAssignment_ && trk->dzError() < maxDzErrorForPrimaryAssignment_) { + return std::pair(iVtxMinDzDist, + pat::PackedCandidate::CompatibilityDz); + } } + // if the track is not compatible with other PVs but is compatible with the BeamSpot, we may simply have not reco'ed the PV! + // we still point it to the closest in Z, but flag it as possible orphan-primary + if (!vertices.empty() && std::abs(trk->dxy(vertices[0].position())) < maxDxyForNotReconstructedPrimary_ && + std::abs(trk->dxy(vertices[0].position()) / trk->dxyError()) < maxDxySigForNotReconstructedPrimary_) + return std::pair(iVtxMinDzDist, + pat::PackedCandidate::NotReconstructedPrimary); + // for tracks not associated to any PV return the closest in dz + return std::pair(iVtxMinDzDist, pat::PackedCandidate::OtherDeltaZ); } using pat::PATLostTracks; diff --git a/PhysicsTools/PatAlgos/plugins/PATTauProducer.cc b/PhysicsTools/PatAlgos/plugins/PATTauProducer.cc index 120d8815f28f9..e11c478eecf26 100644 --- a/PhysicsTools/PatAlgos/plugins/PATTauProducer.cc +++ b/PhysicsTools/PatAlgos/plugins/PATTauProducer.cc @@ -386,7 +386,7 @@ void PATTauProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) bool found = false; if (prov_cfg_label == "rawValues" || prov_cfg_label == "workingPoints") { const std::vector psetsFromProvenance = - edm::parameterSet(*prov, iEvent.processHistory()) + edm::parameterSet(prov->stable(), iEvent.processHistory()) .getParameter>(prov_cfg_label); for (size_t i = 0; i < psetsFromProvenance.size(); ++i) { if (psetsFromProvenance[i] == prov_ID_label) { @@ -400,7 +400,7 @@ void PATTauProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) } } else if (prov_cfg_label == "IDdefinitions" || prov_cfg_label == "IDWPdefinitions") { const std::vector psetsFromProvenance = - edm::parameterSet(*prov, iEvent.processHistory()) + edm::parameterSet(prov->stable(), iEvent.processHistory()) .getParameter>(prov_cfg_label); for (size_t i = 0; i < psetsFromProvenance.size(); ++i) { if (psetsFromProvenance[i].getParameter("IDname") == prov_ID_label) { diff --git a/PhysicsTools/PatAlgos/plugins/PATTriggerMatchEmbedder.cc b/PhysicsTools/PatAlgos/plugins/PATTriggerMatchEmbedder.cc index c706fc3145e0e..eb61e87fa0c56 100644 --- a/PhysicsTools/PatAlgos/plugins/PATTriggerMatchEmbedder.cc +++ b/PhysicsTools/PatAlgos/plugins/PATTriggerMatchEmbedder.cc @@ -23,6 +23,7 @@ #include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/InputTag.h" #include "DataFormats/Common/interface/Handle.h" #include "DataFormats/Common/interface/RefToBase.h" diff --git a/PhysicsTools/PatAlgos/plugins/PATTriggerProducer.h b/PhysicsTools/PatAlgos/plugins/PATTriggerProducer.h index 6638d6ee726bb..657a197afb4a7 100644 --- a/PhysicsTools/PatAlgos/plugins/PATTriggerProducer.h +++ b/PhysicsTools/PatAlgos/plugins/PATTriggerProducer.h @@ -142,7 +142,7 @@ namespace pat { map_[filter].push_back(PathAndFlags(path, pathIndex, lastFilter, l3Filter)); } std::map > map_; - const std::vector empty_; + const std::vector empty_ = {}; }; ModuleLabelToPathAndFlags moduleLabelToPathAndFlags_; }; diff --git a/PhysicsTools/PatAlgos/plugins/PackedGenParticleSignalProducer.cc b/PhysicsTools/PatAlgos/plugins/PackedGenParticleSignalProducer.cc new file mode 100644 index 0000000000000..b367fcd11b26e --- /dev/null +++ b/PhysicsTools/PatAlgos/plugins/PackedGenParticleSignalProducer.cc @@ -0,0 +1,65 @@ +#include +#include "DataFormats/HepMCCandidate/interface/GenParticle.h" +#include "DataFormats/PatCandidates/interface/PackedGenParticle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" + +namespace pat { + + class PackedGenParticleSignalProducer : public edm::global::EDProducer<> { + public: + explicit PackedGenParticleSignalProducer(const edm::ParameterSet& iConfig) + : genParticleToken_(consumes(iConfig.getParameter("genParticles"))), + assoToken_(consumes>>( + iConfig.getParameter("packedGenParticles"))) { + produces(); + } + ~PackedGenParticleSignalProducer() override = default; + + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + + static void fillDescriptions(edm::ConfigurationDescriptions&); + + private: + const edm::EDGetTokenT genParticleToken_; + const edm::EDGetTokenT>> assoToken_; + }; + +} // namespace pat + +void pat::PackedGenParticleSignalProducer::produce(edm::StreamID iID, + edm::Event& iEvent, + const edm::EventSetup& iSetup) const { + const auto& genParticles = iEvent.getHandle(genParticleToken_); + const auto& orig2packed = iEvent.get(assoToken_); + + auto signalGenParticleRefs = std::make_unique(); + + for (auto it = genParticles->begin(); it != genParticles->end(); ++it) { + const auto& orig = reco::GenParticleRef(genParticles, it - genParticles->begin()); + if (orig->collisionId() != 0) + continue; + const auto& packed = orig2packed[orig]; + if (packed.isNonnull()) { + signalGenParticleRefs->push_back(packed); + } + } + + iEvent.put(std::move(signalGenParticleRefs)); +} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ +void pat::PackedGenParticleSignalProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("genParticles", edm::InputTag("genParticles"))->setComment("genParticles input collection"); + desc.add("packedGenParticles", edm::InputTag("packedGenParticles")) + ->setComment("packedGenParticles input collection"); + descriptions.add("packedGenParticlesSignal", desc); +} + +#include "FWCore/Framework/interface/MakerMacros.h" +using namespace pat; +DEFINE_FWK_MODULE(PackedGenParticleSignalProducer); diff --git a/PhysicsTools/PatAlgos/python/producersLayer1/jetUpdater_cfi.py b/PhysicsTools/PatAlgos/python/producersLayer1/jetUpdater_cfi.py index 3db422b69dc86..b32a10ede5ac5 100644 --- a/PhysicsTools/PatAlgos/python/producersLayer1/jetUpdater_cfi.py +++ b/PhysicsTools/PatAlgos/python/producersLayer1/jetUpdater_cfi.py @@ -25,6 +25,8 @@ userFunctions = cms.vstring(), userFunctionLabels = cms.vstring() ), + # sort + sort = cms.bool(True), # jet energy corrections addJetCorrFactors = cms.bool(True), jetCorrFactorsSource = cms.VInputTag(cms.InputTag("updatedPatJetCorrFactors") ), diff --git a/PhysicsTools/PatAlgos/python/producersLayer1/lowPtElectronProducer_cff.py b/PhysicsTools/PatAlgos/python/producersLayer1/lowPtElectronProducer_cff.py index b64a33f7a3e3f..a61cf8bd999e6 100644 --- a/PhysicsTools/PatAlgos/python/producersLayer1/lowPtElectronProducer_cff.py +++ b/PhysicsTools/PatAlgos/python/producersLayer1/lowPtElectronProducer_cff.py @@ -11,42 +11,47 @@ ) patLowPtElectrons = patElectrons.clone( - # input collections + + # Input collection electronSource = sourceElectrons, - genParticleMatch = cms.InputTag("lowPtElectronMatch"), - # overrides - addElectronID = cms.bool(False), - addGenMatch = cms.bool(True), - addMVAVariables = cms.bool(False), - addPFClusterIso = cms.bool(False), - electronIDSources = cms.PSet(), - computeMiniIso = cms.bool(False), - isoDeposits = cms.PSet(), - isolationValues = cms.PSet(), - isolationValuesNoPFId = cms.PSet(), - miniIsoParamsB = cms.vdouble(), - miniIsoParamsE = cms.vdouble(), - usePfCandidateMultiMap = cms.bool(False), - # embedding - embedBasicClusters = cms.bool(False), - embedGenMatch = cms.bool(False), - embedGsfElectronCore = cms.bool(False), - embedGsfTrack = cms.bool(False), - embedHighLevelSelection = cms.bool(False), - embedPFCandidate = cms.bool(False), - embedPflowBasicClusters = cms.bool(False), - embedPflowPreshowerClusters = cms.bool(False), - embedPflowSuperCluster = cms.bool(False), - embedPreshowerClusters = cms.bool(False), - embedRecHits = cms.bool(False), - embedSeedCluster = cms.bool(False), - embedSuperCluster = cms.bool(False), - embedTrack = cms.bool(True), - ) + + # MC matching + genParticleMatch = "lowPtElectronMatch", + + # Electron ID + addElectronID = True, + electronIDSources = dict( + unbiased = cms.InputTag("rekeyLowPtGsfElectronSeedValueMaps:unbiased"), + ptbiased = cms.InputTag("rekeyLowPtGsfElectronSeedValueMaps:ptbiased"), + ID = cms.InputTag("lowPtGsfElectronID"), + ), + + # Embedding of RECO/AOD items + embedTrack = True, + embedGsfElectronCore = True, + embedGsfTrack = True, + embedSuperCluster = True, + embedSeedCluster = True, + embedBasicClusters = True, + embedPreshowerClusters = False, + embedRecHits = False, + embedPflowSuperCluster = False, + embedPflowBasicClusters = False, + embedPflowPreshowerClusters = False, + embedPFCandidate = False, + + # Miscellaneous flags + addMVAVariables = False, + embedHighLevelSelection = False, + isoDeposits = cms.PSet(), + isolationValues = cms.PSet(), + isolationValuesNoPFId = cms.PSet(), + +) makePatLowPtElectronsTask = cms.Task( lowPtElectronMatch, - patLowPtElectrons + patLowPtElectrons, ) makePatLowPtElectrons = cms.Sequence(makePatLowPtElectronsTask) @@ -61,3 +66,23 @@ electronSource = "gedGsfElectrons", genParticleMatch = "electronMatch" ) + +# For run2_miniAOD_UL ... +from Configuration.ProcessModifiers.run2_miniAOD_UL_cff import run2_miniAOD_UL +_makePatLowPtElectronsTask = makePatLowPtElectronsTask.copy() + +# (1) rekey seed BDT ValueMaps by reco::GsfElectron +from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronSeedValueMaps_cff import rekeyLowPtGsfElectronSeedValueMaps +_makePatLowPtElectronsTask.add(rekeyLowPtGsfElectronSeedValueMaps) + +# (2) rerun ID +from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronID_cfi import lowPtGsfElectronID +_makePatLowPtElectronsTask.add(lowPtGsfElectronID) + +# (3) apply energy regression +from RecoEgamma.EgammaElectronProducers.lowPtGsfElectrons_cfi import lowPtGsfElectrons +_makePatLowPtElectronsTask.add(lowPtGsfElectrons) + +# Append to Task +run2_miniAOD_UL.toReplaceWith(makePatLowPtElectronsTask,_makePatLowPtElectronsTask) + diff --git a/PhysicsTools/PatAlgos/python/producersLayer1/patCandidates_cff.py b/PhysicsTools/PatAlgos/python/producersLayer1/patCandidates_cff.py index c8e9e1177acd3..6f40251875909 100644 --- a/PhysicsTools/PatAlgos/python/producersLayer1/patCandidates_cff.py +++ b/PhysicsTools/PatAlgos/python/producersLayer1/patCandidates_cff.py @@ -38,8 +38,16 @@ _patCandidatesTask = patCandidatesTask.copy() _patCandidatesTask.remove(makePatOOTPhotonsTask) from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA -pp_on_AA.toReplaceWith(patCandidatesTask, _patCandidatesTask) +pp_on_AA.toReplaceWith(patCandidatesTask, _patCandidatesTask) pp_on_AA.toModify(patCandidateSummary.candidates, func = lambda list: list.remove(cms.InputTag("patOOTPhotons")) ) +from Configuration.Eras.Modifier_run2_miniAOD_94XFall17_cff import run2_miniAOD_94XFall17 +from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy +_mAOD = (run2_miniAOD_94XFall17 | run2_miniAOD_80XLegacy) +(pp_on_AA | _mAOD).toReplaceWith(patCandidatesTask, + patCandidatesTask.copyAndExclude([makePatLowPtElectronsTask])) +(pp_on_AA | _mAOD).toModify(patCandidateSummary.candidates, + func = lambda list: list.remove(cms.InputTag("patLowPtElectrons")) ) + patCandidates = cms.Sequence(patCandidateSummary, patCandidatesTask) diff --git a/PhysicsTools/PatAlgos/python/selectionLayer1/lowPtElectronSelector_cfi.py b/PhysicsTools/PatAlgos/python/selectionLayer1/lowPtElectronSelector_cfi.py index 17b510bf0b51b..0ef6e859e5be7 100644 --- a/PhysicsTools/PatAlgos/python/selectionLayer1/lowPtElectronSelector_cfi.py +++ b/PhysicsTools/PatAlgos/python/selectionLayer1/lowPtElectronSelector_cfi.py @@ -6,9 +6,13 @@ # selectedPatLowPtElectrons = cms.EDFilter("PATElectronSelector", src = cms.InputTag("patLowPtElectrons"), - cut = cms.string("") + cut = cms.string("pt > 1. && electronID('ID') > -0.25"), ) +# Modifier for bParking (fully open selection) +from Configuration.Eras.Modifier_bParking_cff import bParking +bParking.toModify(selectedPatLowPtElectrons,cut = "") + # Modifiers for legacy AOD from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy from Configuration.Eras.Modifier_run2_miniAOD_94XFall17_cff import run2_miniAOD_94XFall17 diff --git a/PhysicsTools/PatAlgos/python/selectionLayer1/selectedPatCandidates_cff.py b/PhysicsTools/PatAlgos/python/selectionLayer1/selectedPatCandidates_cff.py index 3431fa77972cd..50381daef2318 100644 --- a/PhysicsTools/PatAlgos/python/selectionLayer1/selectedPatCandidates_cff.py +++ b/PhysicsTools/PatAlgos/python/selectionLayer1/selectedPatCandidates_cff.py @@ -38,3 +38,11 @@ from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA pp_on_AA.toReplaceWith(selectedPatCandidatesTask, selectedPatCandidatesTask.copyAndExclude([selectedPatOOTPhotons])) pp_on_AA.toModify(selectedPatCandidateSummary.candidates, func = lambda list: list.remove(cms.InputTag("selectedPatOOTPhotons")) ) + +from Configuration.Eras.Modifier_run2_miniAOD_94XFall17_cff import run2_miniAOD_94XFall17 +from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy +_mAOD = (run2_miniAOD_94XFall17 | run2_miniAOD_80XLegacy) +(pp_on_AA | _mAOD).toReplaceWith(selectedPatCandidatesTask, + selectedPatCandidatesTask.copyAndExclude([selectedPatLowPtElectrons])) +(pp_on_AA | _mAOD).toModify(selectedPatCandidateSummary.candidates, + func = lambda list: list.remove(cms.InputTag("selectedPatLowPtElectrons")) ) diff --git a/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py b/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py index af0676cdd8ed1..10535f4b18506 100644 --- a/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py @@ -66,7 +66,8 @@ 'keep *_l1extraParticles_*_*', 'keep L1GlobalTriggerReadoutRecord_gtDigis_*_*', # stage 2 L1 trigger - 'keep *_gtStage2Digis__*', + 'keep GlobalExtBlkBXVector_simGtExtUnprefireable_*_*', + 'keep *_gtStage2Digis__*', 'keep *_gmtStage2Digis_Muon_*', 'keep *_caloStage2Digis_Jet_*', 'keep *_caloStage2Digis_Tau_*', @@ -88,6 +89,9 @@ 'keep recoTracks_displacedStandAloneMuons__*', # L1 prefiring weights 'keep *_prefiringweight_*_*', + # patLowPtElectrons + 'keep *_slimmedLowPtElectrons_*_*', + 'keep *_gsfTracksOpenConversions_*_*', ) ) @@ -114,20 +118,6 @@ ) ) -# Only add low pT electrons for bParking era -from Configuration.Eras.Modifier_bParking_cff import bParking -_bParking_extraCommands = ['keep *_slimmedLowPtElectrons_*_*', - 'keep recoGsfElectronCores_lowPtGsfElectronCores_*_*', - 'keep recoSuperClusters_lowPtGsfElectronSuperClusters_*_*', - 'keep recoCaloClusters_lowPtGsfElectronSuperClusters_*_*', - 'keep recoGsfTracks_lowPtGsfEleGsfTracks_*_*', - 'keep floatedmValueMap_lowPtGsfElectronSeedValueMaps_*_*', - 'keep floatedmValueMap_lowPtGsfElectronID_*_*', - 'keep *_lowPtGsfLinks_*_*', - 'keep *_gsfTracksOpenConversions_*_*', - ] -bParking.toModify(MicroEventContent, outputCommands = MicroEventContent.outputCommands + _bParking_extraCommands) - # --- Only for 2018 data & MC _run2_HCAL_2018_extraCommands = ["keep *_packedPFCandidates_hcalDepthEnergyFractions_*"] from Configuration.Eras.Modifier_run2_HCAL_2018_cff import run2_HCAL_2018 @@ -154,6 +144,7 @@ 'keep *_hiEvtPlaneFlat_*_*', 'keep QIE10DataFrameHcalDataFrameContainer_hcalDigis_ZDC_*', ] + from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA pp_on_AA.toModify(MicroEventContent, outputCommands = MicroEventContent.outputCommands + _pp_on_AA_extraCommands) @@ -166,6 +157,8 @@ # RUN 'keep L1GtTriggerMenuLite_l1GtTriggerMenuLite__*' ] +_pp_on_AA_MC_extraCommands = ['keep *_packedGenParticlesSignal_*_*'] +pp_on_AA.toModify(MicroEventContentMC, outputCommands = MicroEventContentMC.outputCommands + _pp_on_AA_MC_extraCommands) from Configuration.Eras.Modifier_strips_vfp30_2016_cff import strips_vfp30_2016 strips_vfp30_2016.toModify(MicroEventContentMC, outputCommands = MicroEventContentMC.outputCommands + [ diff --git a/PhysicsTools/PatAlgos/python/slimming/genParticles_cff.py b/PhysicsTools/PatAlgos/python/slimming/genParticles_cff.py index 56d41892fc358..cc72554287bef 100644 --- a/PhysicsTools/PatAlgos/python/slimming/genParticles_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/genParticles_cff.py @@ -16,3 +16,11 @@ packedGenParticles, prunedGenParticlesWithStatusOne ) + +from PhysicsTools.PatAlgos.packedGenParticlesSignal_cfi import * + +_genParticlesHITask = genParticlesTask.copy() +_genParticlesHITask.add(packedGenParticlesSignal) + +from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA +pp_on_AA.toReplaceWith(genParticlesTask, _genParticlesHITask) diff --git a/PhysicsTools/PatAlgos/python/slimming/lostTracks_cfi.py b/PhysicsTools/PatAlgos/python/slimming/lostTracks_cfi.py index 1b6a851d8ea22..39464ecfb0742 100644 --- a/PhysicsTools/PatAlgos/python/slimming/lostTracks_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/lostTracks_cfi.py @@ -1,4 +1,6 @@ import FWCore.ParameterSet.Config as cms +from PhysicsTools.PatAlgos.slimming.primaryVertexAssociation_cfi import primaryVertexAssociation +from PhysicsTools.PatAlgos.slimming.packedPFCandidates_cfi import packedPFCandidates lostTracks = cms.EDProducer("PATLostTracks", inputCandidates = cms.InputTag("particleFlow"), @@ -10,14 +12,16 @@ primaryVertices = cms.InputTag("offlineSlimmedPrimaryVertices"), originalVertices = cms.InputTag("offlinePrimaryVertices"), muons = cms.InputTag("muons"), - minPt = cms.double(0.95), - minHits = cms.uint32(8), - minPixelHits = cms.uint32(1), - covarianceVersion = cms.int32(0), #so far: 0 is Phase0, 1 is Phase1 - covarianceSchema = cms.int32(0), #old miniaod like + minPt = cms.double(0.95), + minHits = cms.uint32(8), + minPixelHits = cms.uint32(1), + covarianceVersion = cms.int32(0), #so far: 0 is Phase0, 1 is Phase1 + covariancePackingSchemas = packedPFCandidates.covariancePackingSchemas, qualsToAutoAccept = cms.vstring("highPurity"), minPtToStoreProps = cms.double(0.95), - passThroughCut = cms.string("pt>2") + passThroughCut = cms.string("pt>2"), + pvAssignment = primaryVertexAssociation.assignment, + useLegacySetup = cms.bool(False) #When True: check only if track used to fit vertex[0] and do not store track detailed info for Pt between 0.5 and minPtToStoreProps GeV ) from Configuration.Eras.Modifier_phase1Pixel_cff import phase1Pixel phase1Pixel.toModify(lostTracks, covarianceVersion =1 ) diff --git a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py index f652b14bbbf4e..c074770bb506c 100644 --- a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py +++ b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py @@ -626,10 +626,13 @@ def miniAOD_customizeData(process): process.load("RecoPPS.Local.ctppsLocalTrackLiteProducer_cff") process.load("RecoPPS.ProtonReconstruction.ctppsProtons_cff") process.load("Geometry.VeryForwardGeometry.geometryRPFromDB_cfi") + process.load('L1Trigger.L1TGlobal.simGtExtFakeProd_cfi') task = getPatAlgosToolsTask(process) from Configuration.Eras.Modifier_ctpps_2016_cff import ctpps_2016 ctpps_2016.toModify(task, func=lambda t: t.add(process.ctppsLocalTrackLiteProducer)) ctpps_2016.toModify(task, func=lambda t: t.add(process.ctppsProtons)) + from Configuration.ProcessModifiers.run2_miniAOD_UL_cff import run2_miniAOD_UL + run2_miniAOD_UL.toModify(task, func=lambda t: t.add(process.simGtExtUnprefireable)) def miniAOD_customizeAllData(process): miniAOD_customizeCommon(process) diff --git a/PhysicsTools/PatAlgos/python/slimming/slimmedLowPtElectrons_cff.py b/PhysicsTools/PatAlgos/python/slimming/slimmedLowPtElectrons_cff.py new file mode 100644 index 0000000000000..ab4d571e45864 --- /dev/null +++ b/PhysicsTools/PatAlgos/python/slimming/slimmedLowPtElectrons_cff.py @@ -0,0 +1,10 @@ +import FWCore.ParameterSet.Config as cms + +from PhysicsTools.PatAlgos.slimming.slimmedLowPtElectrons_cfi import slimmedLowPtElectrons +from PhysicsTools.PatAlgos.slimming.lowPtGsfLinks_cfi import lowPtGsfLinks + +# Task +slimmedLowPtElectronsTask = cms.Task( + lowPtGsfLinks, + slimmedLowPtElectrons, +) diff --git a/PhysicsTools/PatAlgos/python/slimming/slimmedLowPtElectrons_cfi.py b/PhysicsTools/PatAlgos/python/slimming/slimmedLowPtElectrons_cfi.py index 1095a37703ca2..684512a4ce0fd 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimmedLowPtElectrons_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimmedLowPtElectrons_cfi.py @@ -20,7 +20,26 @@ saveNonZSClusterShapes = cms.string("1"), # save additional user floats: (sigmaIetaIeta,sigmaIphiIphi,sigmaIetaIphi,r9,e1x5_over_e5x5)_NoZS reducedBarrelRecHitCollection = cms.InputTag("reducedEcalRecHitsEB"), reducedEndcapRecHitCollection = cms.InputTag("reducedEcalRecHitsEE"), - modifyElectrons = cms.bool(False), - modifierConfig = cms.PSet( modifications = cms.VPSet() ) + modifyElectrons = cms.bool(True), + modifierConfig = cms.PSet( + modifications = cms.VPSet( + cms.PSet( + electron_config = cms.PSet( + ele2packed = cms.InputTag("lowPtGsfLinks:ele2packed"), + electronSrc = cms.InputTag("selectedPatLowPtElectrons"), + ), + modifierName = cms.string('EGExtraInfoModifierFromPackedCandPtrValueMaps'), + photon_config = cms.PSet() + ), + cms.PSet( + electron_config = cms.PSet( + ele2lost = cms.InputTag("lowPtGsfLinks:ele2lost"), + electronSrc = cms.InputTag("selectedPatLowPtElectrons"), + ), + modifierName = cms.string('EGExtraInfoModifierFromPackedCandPtrValueMaps'), + photon_config = cms.PSet() + ), + ) + ) ) diff --git a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py index 4b97dbfae42ff..454ed98e007c7 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py @@ -13,8 +13,7 @@ from PhysicsTools.PatAlgos.slimming.slimmedCaloJets_cfi import * from PhysicsTools.PatAlgos.slimming.slimmedGenJets_cfi import * from PhysicsTools.PatAlgos.slimming.slimmedElectrons_cfi import * -from PhysicsTools.PatAlgos.slimming.slimmedLowPtElectrons_cfi import * -from PhysicsTools.PatAlgos.slimming.lowPtGsfLinks_cfi import * +from PhysicsTools.PatAlgos.slimming.slimmedLowPtElectrons_cff import * from PhysicsTools.PatAlgos.slimming.slimmedTrackExtras_cff import * from PhysicsTools.PatAlgos.slimming.slimmedMuons_cfi import * from PhysicsTools.PatAlgos.slimming.slimmedPhotons_cfi import * @@ -45,8 +44,7 @@ slimmedGenJets, slimmedGenJetsAK8, slimmedElectrons, - slimmedLowPtElectrons, - lowPtGsfLinks, + slimmedLowPtElectronsTask, slimmedMuonTrackExtras, slimmedMuons, slimmedPhotons, @@ -65,6 +63,13 @@ from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA pp_on_AA.toReplaceWith(slimmingTask, slimmingTask.copyAndExclude([slimmedOOTPhotons])) + +from Configuration.Eras.Modifier_run2_miniAOD_94XFall17_cff import run2_miniAOD_94XFall17 +from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy +_mAOD = (run2_miniAOD_94XFall17 | run2_miniAOD_80XLegacy) +(pp_on_AA | _mAOD).toReplaceWith(slimmingTask, + slimmingTask.copyAndExclude([slimmedLowPtElectronsTask])) + from PhysicsTools.PatAlgos.slimming.hiPixelTracks_cfi import hiPixelTracks from RecoHI.HiEvtPlaneAlgos.HiEvtPlane_cfi import hiEvtPlane from RecoHI.HiEvtPlaneAlgos.hiEvtPlaneFlat_cfi import hiEvtPlaneFlat diff --git a/PhysicsTools/PatAlgos/python/tools/jetCollectionTools.py b/PhysicsTools/PatAlgos/python/tools/jetCollectionTools.py index 0cf58f8f751c2..e327f3d46fb0d 100644 --- a/PhysicsTools/PatAlgos/python/tools/jetCollectionTools.py +++ b/PhysicsTools/PatAlgos/python/tools/jetCollectionTools.py @@ -7,6 +7,7 @@ from RecoJets.JetProducers.PFJetParameters_cfi import PFJetParameters from RecoJets.JetProducers.GenJetParameters_cfi import GenJetParameters +from RecoJets.JetProducers.GenJetParameters_cfi import GenJetParameters from RecoJets.JetProducers.AnomalousCellParameters_cfi import AnomalousCellParameters from RecoJets.JetProducers.ak4GenJets_cfi import ak4GenJets @@ -76,17 +77,16 @@ def addGenJetCollection(self, proc, jet, inputCollection = "", - genName = "", + minPtFastjet = None, ): print("jetCollectionTools::GenJetAdder::addGenJetCollection: Adding Gen Jet Collection: {}".format(jet)) # # Decide which genJet collection we are dealing with # - jetLower = jet.lower() - jetUpper = jet.upper() - tagName = jetUpper genJetInfo = GenJetInfo(jet,inputCollection) + jetLower = genJetInfo.jetLower + jetUpper = genJetInfo.jetUpper #======================================================= # @@ -117,10 +117,14 @@ def addGenJetCollection(self, rParam = cms.double(genJetInfo.jetSizeNr), ) ) + # + # Set minimum pt threshold of gen jets to be saved after fastjet clustering + # + if minPtFastjet != None: + getattr(proc, genJetsCollection).jetPtMin = minPtFastjet self.prerequisites.append(genJetsCollection) return genJetInfo - #============================================ # # RecoJetInfo @@ -176,6 +180,8 @@ def __init__(self, jet, inputCollection): self.jetCorrPayload += "chs" else: self.jetCorrPayload += self.jetPUMethod.lower() + + self.patJetFinalCollection = "" #============================================ # @@ -206,6 +212,7 @@ def addRecoJetCollection(self, proc, jet, inputCollection = "", + minPtFastjet = None, genJetsCollection = "", bTagDiscriminators = ["None"], JETCorrLevels = ["L1FastJet", "L2Relative", "L3Absolute", "L2L3Residual"], @@ -345,6 +352,11 @@ def addRecoJetCollection(self, ) getattr(proc, jetCollection).jetAlgorithm = supportedJetAlgos[recoJetInfo.jetAlgo] getattr(proc, jetCollection).rParam = recoJetInfo.jetSizeNr + # + # Set minimum pt threshold of reco jets to be saved after fastjet clustering + # + if minPtFastjet != None: + getattr(proc, jetCollection).jetPtMin = minPtFastjet currentTasks.append(jetCollection) else: jetCollection = inputCollection @@ -398,16 +410,16 @@ def addRecoJetCollection(self, # Need to set this explicitly for PUPPI jets # if recoJetInfo.jetPUMethod == "puppi": - getattr(proc, "patJetFlavourAssociation{}{}".format(tagName,postfix)).weights = cms.InputTag(pfCand) + getattr(proc, "patJetFlavourAssociation{}{}".format(jetUpper,postfix)).weights = cms.InputTag(pfCand) getJetMCFlavour = not recoJetInfo.doCalo and recoJetInfo.jetPUMethod != "cs" if not self.runOnMC: #Remove modules for Gen-level object matching - delattr(proc, 'patJetGenJetMatch{}{}'.format(tagName,postfix)) - delattr(proc, 'patJetPartonMatch{}{}'.format(tagName,postfix)) + delattr(proc, 'patJetGenJetMatch{}{}'.format(jetUpper,postfix)) + delattr(proc, 'patJetPartonMatch{}{}'.format(jetUpper,postfix)) getJetMCFlavour = False - setattr(getattr(proc, "patJets{}{}".format(tagName,postfix)), "getJetMCFlavour", cms.bool(getJetMCFlavour)) + setattr(getattr(proc, "patJets{}{}".format(jetUpper,postfix)), "getJetMCFlavour", cms.bool(getJetMCFlavour)) - selectedPatJetCollection = "selectedPatJets{}{}".format(tagName,postfix) + selectedPatJets = "selectedPatJets{}{}".format(jetUpper,postfix) #============================================= # # Update the patJet collection. @@ -420,14 +432,14 @@ def addRecoJetCollection(self, proc, labelName = jetUpper, postfix = "Final", - jetSource = cms.InputTag(selectedPatJetCollection), + jetSource = cms.InputTag(selectedPatJets), jetCorrections = jetCorrections, btagDiscriminators = bTagDiscriminators, ) - patJetFinalCollection="selectedUpdatedPatJets{}{}".format(tagName,"Final") + recoJetInfo.patJetFinalCollection = "selectedUpdatedPatJets{}{}".format(jetUpper,"Final") else: - patJetFinalCollection = inputCollection + recoJetInfo.patJetFinalCollection = inputCollection self.main.extend(currentTasks) diff --git a/PhysicsTools/PatAlgos/python/tools/jetTools.py b/PhysicsTools/PatAlgos/python/tools/jetTools.py index 25def6d8d1bc3..30d6af17dd1d7 100644 --- a/PhysicsTools/PatAlgos/python/tools/jetTools.py +++ b/PhysicsTools/PatAlgos/python/tools/jetTools.py @@ -1558,6 +1558,7 @@ def __init__(self): self.addParameter(self._defaultParameters,'groomedFatJets', cms.InputTag(''), "Groomed fat jet collection used for secondary vertex clustering", cms.InputTag) self.addParameter(self._defaultParameters,'algo', 'AK', "Jet algorithm of the input collection from which the new patJet collection should be created") self.addParameter(self._defaultParameters,'rParam', 0.4, "Jet size (distance parameter R used in jet clustering)") + self.addParameter(self._defaultParameters,'sortByPt', True, "Set to False to not modify incoming jet order") self.addParameter(self._defaultParameters,'printWarning', True, "To be use as False in production to reduce log size") self.addParameter(self._defaultParameters,'jetCorrections',None, "Add all relevant information about jet energy corrections that you want to be added to your new patJet \ collection. The format has to be given in a python tuple of type: (\'AK4Calo\',[\'L2Relative\', \'L3Absolute\'], patMet). Here the first argument corresponds to the payload \ @@ -1591,7 +1592,7 @@ def getDefaultParameters(self): """ return self._defaultParameters - def __call__(self,process,labelName=None,postfix=None,btagPrefix=None,jetSource=None,pfCandidates=None,explicitJTA=None,pvSource=None,svSource=None,elSource=None,muSource=None,runIVF=None,tightBTagNTkHits=None,loadStdRecoBTag=None,svClustering=None,fatJets=None,groomedFatJets=None,algo=None,rParam=None,printWarning=None,jetCorrections=None,btagDiscriminators=None,btagInfos=None): + def __call__(self,process,labelName=None,postfix=None,btagPrefix=None,jetSource=None,pfCandidates=None,explicitJTA=None,pvSource=None,svSource=None,elSource=None,muSource=None,runIVF=None,tightBTagNTkHits=None,loadStdRecoBTag=None,svClustering=None,fatJets=None,groomedFatJets=None,algo=None,rParam=None,sortByPt=None,printWarning=None,jetCorrections=None,btagDiscriminators=None,btagInfos=None): """ Function call wrapper. This will check the parameters and call the actual implementation that can be found in toolCode via the base class function apply. @@ -1650,6 +1651,9 @@ def __call__(self,process,labelName=None,postfix=None,btagPrefix=None,jetSource= if rParam is None: rParam=self._defaultParameters['rParam'].value self.setParameter('rParam', rParam) + if sortByPt is None: + sortByPt=self._defaultParameters['sortByPt'].value + self.setParameter('sortByPt', sortByPt) if printWarning is None: printWarning=self._defaultParameters['printWarning'].value self.setParameter('printWarning', printWarning) @@ -1687,6 +1691,7 @@ def toolCode(self, process): groomedFatJets=self._parameters['groomedFatJets'].value algo=self._parameters['algo'].value rParam=self._parameters['rParam'].value + sortByPt=self._parameters['sortByPt'].value printWarning=self._parameters['printWarning'].value jetCorrections=self._parameters['jetCorrections'].value btagDiscriminators=list(self._parameters['btagDiscriminators'].value) @@ -1719,6 +1724,8 @@ def toolCode(self, process): ## add new updatedPatJets to process (keep instance for later further modifications) from PhysicsTools.PatAlgos.producersLayer1.jetUpdater_cfi import updatedPatJets + if not sortByPt: # default is True + updatedPatJets.sort = cms.bool(False) if 'updatedPatJets'+_labelName+postfix in knownModules : _newPatJets=getattr(process, 'updatedPatJets'+_labelName+postfix) _newPatJets.jetSource=jetSource @@ -1785,9 +1792,12 @@ def toolCode(self, process): _newPatJets.addTagInfos = False ## add jet correction factors if required by user - if (jetCorrections != None or bTagging): + if (jetCorrections is not None or bTagging): ## check the jet corrections format - checkJetCorrectionsFormat(jetCorrections) + if jetCorrections is None and bTagging: + raise ValueError("Passing jetCorrections = None while running bTagging is likely not intended.") + else: + checkJetCorrectionsFormat(jetCorrections) ## reset MET corrrection if jetCorrections[2].lower() != 'none' and jetCorrections[2] != '': sys.stderr.write("-------------------------------------------------------------------\n") diff --git a/PhysicsTools/PatAlgos/test/IntegrationTest_cfg.py b/PhysicsTools/PatAlgos/test/IntegrationTest_cfg.py index 4808105fcf8fa..fa1bd5897bfd7 100644 --- a/PhysicsTools/PatAlgos/test/IntegrationTest_cfg.py +++ b/PhysicsTools/PatAlgos/test/IntegrationTest_cfg.py @@ -22,6 +22,7 @@ process.selectedPatCandidates ) +process.patLowPtElectrons.addElectronID = False process.patLowPtElectrons.electronSource = "gedGsfElectrons" process.patLowPtElectrons.genParticleMatch = "electronMatch" process.selectedPatLowPtElectrons.cut = "pt>99999." diff --git a/PhysicsTools/PatAlgos/test/corMETFromMiniAOD.py b/PhysicsTools/PatAlgos/test/corMETFromMiniAOD.py index 18c933c971117..7e5fbf43386e0 100644 --- a/PhysicsTools/PatAlgos/test/corMETFromMiniAOD.py +++ b/PhysicsTools/PatAlgos/test/corMETFromMiniAOD.py @@ -15,7 +15,6 @@ # Message Logger settings process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['cout', 'cerr'] process.MessageLogger.cerr.FwkReport.reportEvery = 1 # Set the process options -- Display summary at the end, enable unscheduled execution diff --git a/PhysicsTools/PatAlgos/test/patTuple_addTriggerInfo_cfg.py b/PhysicsTools/PatAlgos/test/patTuple_addTriggerInfo_cfg.py index 313f0465bb950..9e7c2fe6ffa7e 100644 --- a/PhysicsTools/PatAlgos/test/patTuple_addTriggerInfo_cfg.py +++ b/PhysicsTools/PatAlgos/test/patTuple_addTriggerInfo_cfg.py @@ -18,6 +18,7 @@ process.selectedPatCandidates ) +process.patLowPtElectrons.addElectronID = False process.patLowPtElectrons.electronSource = "gedGsfElectrons" process.patLowPtElectrons.genParticleMatch = "electronMatch" process.selectedPatLowPtElectrons.cut = "pt>99999." diff --git a/PhysicsTools/PatAlgos/test/private/patLayer1_fromAOD-minimal.cfg.py b/PhysicsTools/PatAlgos/test/private/patLayer1_fromAOD-minimal.cfg.py index 3c250eb4d4398..cfdba54955f94 100755 --- a/PhysicsTools/PatAlgos/test/private/patLayer1_fromAOD-minimal.cfg.py +++ b/PhysicsTools/PatAlgos/test/private/patLayer1_fromAOD-minimal.cfg.py @@ -5,7 +5,6 @@ # initialize MessageLogger and output report process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('PATLayer0Summary') process.MessageLogger.cerr.INFO = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), PATLayer0Summary = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/PhysicsTools/PatAlgos/test/private/testPATUserDataExternal.py b/PhysicsTools/PatAlgos/test/private/testPATUserDataExternal.py index 7092d81f70cf7..b5b93352bb7e8 100644 --- a/PhysicsTools/PatAlgos/test/private/testPATUserDataExternal.py +++ b/PhysicsTools/PatAlgos/test/private/testPATUserDataExternal.py @@ -5,7 +5,6 @@ # initialize MessageLogger and output report process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('PATLayer0Summary') process.MessageLogger.cerr.INFO = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), PATLayer0Summary = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/PhysicsTools/PatExamples/test/analyzePatBJetTags_cfg.py b/PhysicsTools/PatExamples/test/analyzePatBJetTags_cfg.py index dd4a24d353b46..76879a3ced9fa 100644 --- a/PhysicsTools/PatExamples/test/analyzePatBJetTags_cfg.py +++ b/PhysicsTools/PatExamples/test/analyzePatBJetTags_cfg.py @@ -5,7 +5,6 @@ # initialize MessageLogger and output report process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('PATSummaryTables') process.MessageLogger.cerr.INFO = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), PATSummaryTables = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/PhysicsTools/PatExamples/test/analyzePatBJetTracks_cfg.py b/PhysicsTools/PatExamples/test/analyzePatBJetTracks_cfg.py index 20e498b8e4333..9588b686fd711 100644 --- a/PhysicsTools/PatExamples/test/analyzePatBJetTracks_cfg.py +++ b/PhysicsTools/PatExamples/test/analyzePatBJetTracks_cfg.py @@ -5,7 +5,6 @@ # initialize MessageLogger and output report process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('PATSummaryTables') process.MessageLogger.cerr.INFO = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), PATSummaryTables = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/PhysicsTools/PatExamples/test/analyzePatBJetVertex_cfg.py b/PhysicsTools/PatExamples/test/analyzePatBJetVertex_cfg.py index e4c85785ccb75..5c504455bf6fd 100644 --- a/PhysicsTools/PatExamples/test/analyzePatBJetVertex_cfg.py +++ b/PhysicsTools/PatExamples/test/analyzePatBJetVertex_cfg.py @@ -5,7 +5,6 @@ # initialize MessageLogger and output report process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('PATSummaryTables') process.MessageLogger.cerr.INFO = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), PATSummaryTables = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/PhysicsTools/PatExamples/test/analyzePatElectron_cfg.py b/PhysicsTools/PatExamples/test/analyzePatElectron_cfg.py index 3fe1d9d94a6a3..b54df7e79bdde 100644 --- a/PhysicsTools/PatExamples/test/analyzePatElectron_cfg.py +++ b/PhysicsTools/PatExamples/test/analyzePatElectron_cfg.py @@ -5,7 +5,6 @@ # initialize MessageLogger and output report process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('PATSummaryTables') process.MessageLogger.cerr.INFO = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), PATSummaryTables = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/PhysicsTools/PatExamples/test/analyzePatTracks_cfg.py b/PhysicsTools/PatExamples/test/analyzePatTracks_cfg.py index bc119d62fb72a..bd87288a50afa 100644 --- a/PhysicsTools/PatExamples/test/analyzePatTracks_cfg.py +++ b/PhysicsTools/PatExamples/test/analyzePatTracks_cfg.py @@ -5,7 +5,6 @@ # initialize MessageLogger and output report process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('PATSummaryTables') process.MessageLogger.cerr.INFO = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), PATSummaryTables = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/PhysicsTools/PatExamples/test/analyzePatVertex_cfg.py b/PhysicsTools/PatExamples/test/analyzePatVertex_cfg.py index 34e32a0444311..b3d2431b3a911 100644 --- a/PhysicsTools/PatExamples/test/analyzePatVertex_cfg.py +++ b/PhysicsTools/PatExamples/test/analyzePatVertex_cfg.py @@ -5,7 +5,6 @@ # initialize MessageLogger and output report process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('PATSummaryTables') process.MessageLogger.cerr.INFO = cms.untracked.PSet( default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), PATSummaryTables = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/PhysicsTools/PatUtils/plugins/L1ECALPrefiringWeightProducer.cc b/PhysicsTools/PatUtils/plugins/L1ECALPrefiringWeightProducer.cc index 425ac65f879af..b67c0c4837326 100644 --- a/PhysicsTools/PatUtils/plugins/L1ECALPrefiringWeightProducer.cc +++ b/PhysicsTools/PatUtils/plugins/L1ECALPrefiringWeightProducer.cc @@ -55,6 +55,7 @@ class L1ECALPrefiringWeightProducer : public edm::global::EDProducer<> { std::string dataera_; bool useEMpt_; double prefiringRateSystUnc_; + double jetMaxMuonFraction_; bool skipwarnings_; }; @@ -65,6 +66,7 @@ L1ECALPrefiringWeightProducer::L1ECALPrefiringWeightProducer(const edm::Paramete dataera_ = iConfig.getParameter("DataEra"); useEMpt_ = iConfig.getParameter("UseJetEMPt"); prefiringRateSystUnc_ = iConfig.getParameter("PrefiringRateSystematicUncty"); + jetMaxMuonFraction_ = iConfig.getParameter("JetMaxMuonFraction"); skipwarnings_ = iConfig.getParameter("SkipWarnings"); TFile* file_prefiringmaps_; @@ -135,7 +137,8 @@ void L1ECALPrefiringWeightProducer::produce(edm::StreamID, edm::Event& iEvent, c continue; if (fabs(eta_jet) > 3.) continue; - + if (jetMaxMuonFraction_ > 0 && jet.muonEnergyFraction() > jetMaxMuonFraction_) + continue; //Loop over photons to remove overlap double nonprefiringprobfromoverlappingphotons = 1.; for (const auto& photon : *thePhotons) { @@ -219,6 +222,7 @@ void L1ECALPrefiringWeightProducer::fillDescriptions(edm::ConfigurationDescripti desc.add("DataEra", "2017BtoF"); desc.add("UseJetEMPt", false); desc.add("PrefiringRateSystematicUncty", 0.2); + desc.add("JetMaxMuonFraction", 0.5); desc.add("SkipWarnings", true); descriptions.add("l1ECALPrefiringWeightProducer", desc); } diff --git a/PhysicsTools/PythonAnalysis/test/BuildFile.xml b/PhysicsTools/PythonAnalysis/test/BuildFile.xml index 4e468e3ba3ee4..3d3fcfd2894c6 100644 --- a/PhysicsTools/PythonAnalysis/test/BuildFile.xml +++ b/PhysicsTools/PythonAnalysis/test/BuildFile.xml @@ -13,6 +13,7 @@ + @@ -24,7 +25,7 @@ - + @@ -34,7 +35,7 @@ - + @@ -132,7 +133,7 @@ - + @@ -153,7 +154,8 @@ - - - - + + + + + diff --git a/PhysicsTools/PythonAnalysis/test/testTheano.py b/PhysicsTools/PythonAnalysis/test/testTheano.py index 618150d78ffa4..47bdd20297567 100755 --- a/PhysicsTools/PythonAnalysis/test/testTheano.py +++ b/PhysicsTools/PythonAnalysis/test/testTheano.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 from __future__ import print_function import keras import theano diff --git a/PhysicsTools/PythonAnalysis/test/testTheano.sh b/PhysicsTools/PythonAnalysis/test/testTheano.sh index 0357ecd302c07..287a516b26d01 100755 --- a/PhysicsTools/PythonAnalysis/test/testTheano.sh +++ b/PhysicsTools/PythonAnalysis/test/testTheano.sh @@ -14,7 +14,7 @@ echo ">>> Cleaning compile cache" theano-cache clear || ERR=1 if [ "$1" != "" ] ; then - python ${CMSSW_BASE}/src/PhysicsTools/PythonAnalysis/test/$1 || ERR=1 + ${CMSSW_BASE}/src/PhysicsTools/PythonAnalysis/test/$1 || ERR=1 fi echo ">>> Cleaning compile cache" diff --git a/PhysicsTools/PythonAnalysis/test/test_correctionlib.py b/PhysicsTools/PythonAnalysis/test/test_correctionlib.py new file mode 100755 index 0000000000000..f2a3754ebbd97 --- /dev/null +++ b/PhysicsTools/PythonAnalysis/test/test_correctionlib.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python3 +# from https://github.com/nsmith-/correctionlib/blob/master/tests/test_core.py + +import json +import math + +import pytest + +import correctionlib._core as core +from correctionlib import schemav1 + + +def test_evaluator_v1(): + with pytest.raises(RuntimeError): + cset = core.CorrectionSet.from_string("{") + + with pytest.raises(RuntimeError): + cset = core.CorrectionSet.from_string("{}") + + with pytest.raises(RuntimeError): + cset = core.CorrectionSet.from_string('{"schema_version": "blah"}') + + def wrap(*corrs): + cset = schemav1.CorrectionSet( + schema_version=1, + corrections=list(corrs), + ) + return core.CorrectionSet.from_string(cset.json()) + + cset = wrap( + schemav1.Correction( + name="test corr", + version=2, + inputs=[], + output=schemav1.Variable(name="a scale", type="real"), + data=1.234, + ) + ) + assert set(cset) == {"test corr"} + sf = cset["test corr"] + assert sf.version == 2 + assert sf.description == "" + + with pytest.raises(RuntimeError): + sf.evaluate(0, 1.2, 35.0, 0.01) + + assert sf.evaluate() == 1.234 + + cset = wrap( + schemav1.Correction( + name="test corr", + version=2, + inputs=[ + schemav1.Variable(name="pt", type="real"), + schemav1.Variable(name="syst", type="string"), + ], + output=schemav1.Variable(name="a scale", type="real"), + data=schemav1.Binning.parse_obj( + { + "nodetype": "binning", + "edges": [0, 20, 40], + "content": [ + { + "nodetype": "category", + "keys": ["blah", "blah2"], + "content": [1.1, 2.2], + }, + { + "nodetype": "category", + "keys": ["blah2", "blah3"], + "content": [ + 1.3, + { + "expression": "0.25*x + exp(3.1)", + "parser": "TFormula", + "parameters": [0], + }, + ], + }, + ], + } + ), + ) + ) + assert set(cset) == {"test corr"} + sf = cset["test corr"] + assert sf.version == 2 + assert sf.description == "" + + with pytest.raises(RuntimeError): + # too many inputs + sf.evaluate(0, 1.2, 35.0, 0.01) + + with pytest.raises(RuntimeError): + # not enough inputs + sf.evaluate(1.2) + + with pytest.raises(RuntimeError): + # wrong type + sf.evaluate(5) + + with pytest.raises(RuntimeError): + # wrong type + sf.evaluate("asdf") + + assert sf.evaluate(12.0, "blah") == 1.1 + # Do we need pytest.approx? Maybe not + assert sf.evaluate(31.0, "blah3") == 0.25 * 31.0 + math.exp(3.1) + + +def test_tformula(): + formulas = [ + ("23.*x", lambda x: 23.0 * x), + ("23.*log(max(x, 0.1))", lambda x: 23.0 * math.log(max(x, 0.1))), + ] + cset = { + "schema_version": 1, + "corrections": [ + { + "name": "test", + "version": 1, + "inputs": [ + {"name": "index", "type": "int"}, + {"name": "x", "type": "real"}, + ], + "output": {"name": "f", "type": "real"}, + "data": { + "nodetype": "category", + "keys": list(range(len(formulas))), + "content": [ + {"expression": expr, "parser": "TFormula", "parameters": [1]} + for expr, _ in formulas + ], + }, + } + ], + } + schemav1.CorrectionSet.parse_obj(cset) + corr = core.CorrectionSet.from_string(json.dumps(cset))["test"] + test_values = [1.0, 32.0, -3.0, 1550.0] + for i, (_, expected) in enumerate(formulas): + for x in test_values: + assert corr.evaluate(i, x) == expected(x) diff --git a/PhysicsTools/PythonAnalysis/test/testhep_ml.py b/PhysicsTools/PythonAnalysis/test/testhep_ml.py index 42aa11f23d4cc..d8f3563e7647a 100755 --- a/PhysicsTools/PythonAnalysis/test/testhep_ml.py +++ b/PhysicsTools/PythonAnalysis/test/testhep_ml.py @@ -8,7 +8,7 @@ from builtins import range import numpy -from sklearn.linear_model.logistic import LogisticRegression +from sklearn.linear_model import LogisticRegression from sklearn.datasets import make_blobs from sklearn.metrics import roc_auc_score diff --git a/PhysicsTools/SelectorUtils/BuildFile.xml b/PhysicsTools/SelectorUtils/BuildFile.xml index 34bb8031fc34e..1f653a0de02bf 100644 --- a/PhysicsTools/SelectorUtils/BuildFile.xml +++ b/PhysicsTools/SelectorUtils/BuildFile.xml @@ -1,15 +1,21 @@ - + + + + + + + @@ -26,11 +32,5 @@ - - - - - - diff --git a/PhysicsTools/SelectorUtils/interface/VersionedSelector.h b/PhysicsTools/SelectorUtils/interface/VersionedSelector.h index 808c55fa3ed7a..004bc0693aee2 100644 --- a/PhysicsTools/SelectorUtils/interface/VersionedSelector.h +++ b/PhysicsTools/SelectorUtils/interface/VersionedSelector.h @@ -29,6 +29,7 @@ #include "PhysicsTools/SelectorUtils/interface/Selector.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "PhysicsTools/SelectorUtils/interface/CandidateCut.h" #include "PhysicsTools/SelectorUtils/interface/CutApplicatorBase.h" #include "PhysicsTools/SelectorUtils/interface/CutApplicatorWithEventContentBase.h" diff --git a/PhysicsTools/TagAndProbe/BuildFile.xml b/PhysicsTools/TagAndProbe/BuildFile.xml index 8c71fc20e1a04..647af3520d516 100644 --- a/PhysicsTools/TagAndProbe/BuildFile.xml +++ b/PhysicsTools/TagAndProbe/BuildFile.xml @@ -1,4 +1,4 @@ - + diff --git a/PhysicsTools/TagAndProbe/plugins/BuildFile.xml b/PhysicsTools/TagAndProbe/plugins/BuildFile.xml index 6e7459f93065b..c0ec42915ab3e 100644 --- a/PhysicsTools/TagAndProbe/plugins/BuildFile.xml +++ b/PhysicsTools/TagAndProbe/plugins/BuildFile.xml @@ -2,7 +2,6 @@ - diff --git a/PhysicsTools/TagAndProbe/test/testTagProbeFitTreeAnalyzer_Zee.py b/PhysicsTools/TagAndProbe/test/testTagProbeFitTreeAnalyzer_Zee.py index 701e51f80d8ae..8bea886cc7f3b 100644 --- a/PhysicsTools/TagAndProbe/test/testTagProbeFitTreeAnalyzer_Zee.py +++ b/PhysicsTools/TagAndProbe/test/testTagProbeFitTreeAnalyzer_Zee.py @@ -5,7 +5,6 @@ process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) ) process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.destinations = ['cout', 'cerr'] process.MessageLogger.cerr.FwkReport.reportEvery = 1000 diff --git a/PhysicsTools/TensorFlow/interface/TensorFlow.h b/PhysicsTools/TensorFlow/interface/TensorFlow.h index b43a1cd8bc578..2ffffd4832024 100644 --- a/PhysicsTools/TensorFlow/interface/TensorFlow.h +++ b/PhysicsTools/TensorFlow/interface/TensorFlow.h @@ -76,24 +76,26 @@ namespace tensorflow { // given in order to load and initialize the variables, sessionOptions are predefined // an error is thrown when metaGraphDef is a nullptr or when the graph has no nodes // transfers ownership - Session* createSession(MetaGraphDef* metaGraphDef, const std::string& exportDir, SessionOptions& sessionOptions); + Session* createSession(const MetaGraphDef* metaGraphDef, + const std::string& exportDir, + SessionOptions& sessionOptions); // return a new session that will contain an already loaded meta graph whose exportDir must be given // in order to load and initialize the variables, threading options are inferred from nThreads // an error is thrown when metaGraphDef is a nullptr or when the graph has no nodes // transfers ownership - Session* createSession(MetaGraphDef* metaGraphDef, const std::string& exportDir, int nThreads = 1); + Session* createSession(const MetaGraphDef* metaGraphDef, const std::string& exportDir, int nThreads = 1); // return a new session that will contain an already loaded graph def, sessionOptions are predefined - // an error is thrown when graphDef is a nullptr or when the grah has no nodes + // an error is thrown when graphDef is a nullptr or when the graph has no nodes // transfers ownership - Session* createSession(GraphDef* graphDef, SessionOptions& sessionOptions); + Session* createSession(const GraphDef* graphDef, SessionOptions& sessionOptions); // return a new session that will contain an already loaded graph def, threading options are // inferred from nThreads - // an error is thrown when graphDef is a nullptr or when the grah has no nodes + // an error is thrown when graphDef is a nullptr or when the graph has no nodes // transfers ownership - Session* createSession(GraphDef* graphDef, int nThreads = 1); + Session* createSession(const GraphDef* graphDef, int nThreads = 1); // closes a session, calls its destructor, resets the pointer, and returns true on success bool closeSession(Session*& session); diff --git a/PhysicsTools/TensorFlow/python/tools.py b/PhysicsTools/TensorFlow/python/tools.py deleted file mode 100644 index b05ffbbf63ef2..0000000000000 --- a/PhysicsTools/TensorFlow/python/tools.py +++ /dev/null @@ -1,221 +0,0 @@ -# coding: utf-8 - -""" -TensorFlow tools and helpers. -""" - - -__all__ = ["TF1", "TF2", "read_constant_graph", "write_constant_graph", "visualize_graph"] - - -import os -import sys -import shutil -import tempfile -import signal -import subprocess - -import six -import tensorflow as tf - - -# version flags -TF1 = tf.__version__.startswith("1.") -TF2 = tf.__version__.startswith("2.") - -# complain when the version is not yet covered -if not TF1 and not TF2: - raise NotImplementedError("TensorFlow version {} is not yet supported".format(tf.__version__)) - -# keep a reference to the v1 API as long as v2 provides compatibility -tf1 = None -if TF1: - tf1 = tf -elif getattr(tf, "compat", None) and getattr(tf.compat, "v1"): - tf1 = tf.compat.v1 - - -def read_constant_graph(graph_path, create_session=None, as_text=None): - """ - Reads a saved TensorFlow graph from *graph_path* and returns it. When *create_session* is - *True*, a session object (compatible with the v1 API) is created and returned as well as the - second value of a 2-tuple. The default value of *create_session* is *True* when TensorFlow v1 - is detected, and *False* otherwise. When *as_text* is *True*, or *None* and the file extension - is ``".pbtxt"`` or ``".pb.txt"``, the content of the file at *graph_path* is expected to be a - human-readable text file. Otherwise, it is expected to be a binary protobuf file. Example: - - .. code-block:: python - - graph = read_constant_graph("path/to/model.pb", create_session=False) - - graph, session = read_constant_graph("path/to/model.pb", create_session=True) - """ - if as_text is None: - as_text = graph_path.endswith((".pbtxt", ".pb.txt")) - - graph = tf.Graph() - with graph.as_default(): - graph_def = graph.as_graph_def() - - if as_text: - # use a simple pb reader to load the file into graph_def - from google.protobuf import text_format - with open(graph_path, "r") as f: - text_format.Merge(f.read(), graph_def) - - else: - # use the gfile api depending on the TF version - if TF1: - from tensorflow.python.platform import gfile - with gfile.FastGFile(graph_path, "rb") as f: - graph_def.ParseFromString(f.read()) - else: - with tf.io.gfile.GFile(graph_path, "rb") as f: - graph_def.ParseFromString(f.read()) - - # import the graph_def (pb object) into the actual graph - tf.import_graph_def(graph_def, name="") - - # determine the create_session default - if create_session is None: - create_session = TF1 - - if create_session: - if not tf1: - raise NotImplementedError("the v1 compatibility layer of TensorFlow v2 (tf.compat.v1) " - "is required by read_constant_graph when create_session is True, but missing") - session = tf1.Session(graph=graph) - return graph, session - else: - return graph - - -def write_constant_graph(session, output_names, graph_path, **kwargs): - """ - Takes a TensorFlow *session* object (compatible with the v1 API), converts its contained graph - into a simpler version with variables translated into constant tensors, and saves it to a pb - file defined by *graph_path*. *output_numes* must be a list of names of output tensors to save. - In turn, TensorFlow internally determines which subgraph(s) to convert and save. All *kwargs* - are forwarded to :py:func:`tf.compat.v1.train.write_graph`. Intermediate output directories are - created, the output file is removed when already existing, and the absolute and normalized - output path is returned. - - .. note:: - - When used with TensorFlow v2, this function requires the v1 API compatibility layer. When - :py:attr:`tf.compat.v1` is not available, a *NotImplementedError* is raised. - """ - # complain when the v1 compatibility layer is not existing - if not tf1: - raise NotImplementedError("the v1 compatibility layer of TensorFlow v2 (tf.compat.v1) is " - "required by write_constant_graph, but missing") - - # convert the graph - constant_graph = tf1.graph_util.convert_variables_to_constants(session, - session.graph.as_graph_def(), output_names) - - # prepare the output path - graph_path = os.path.normpath(os.path.abspath(graph_path)) - graph_dir, graph_name = os.path.split(graph_path) - if not os.path.exists(graph_dir): - os.makedirs(graph_dir) - if os.path.exists(graph_path): - os.remove(graph_path) - - # write the graph - kwargs.setdefault("as_text", False) - tf1.train.write_graph(constant_graph, graph_dir, graph_name, **kwargs) - - return graph_path - - -def visualize_graph(graph, log_dir=None, start_tensorboard=False, tensorboard_args="", **kwargs): - """ - Visualizes a TensorFlow *graph* by adding it to a ``tf.summary.FileWriter``. *graph* can be - either a graph object or a path to a pb file. In the latter case, :py:func:`read_constant_graph` - is used and all *kwargs* are forwarded. The file writer object is instantiated with a *log_dir* - which, when empty, defaults to a temporary directory. This is especially usefull when - *start_tensorboard* is *True*, in which case a subprocesses is started to run a *tensorboard* - instance with additional arguments given as a string *tensorboard_args*. The subprocess is - terminated on keyboard interrupt. - - .. note:: - - When used with TensorFlow v2, this function requires the v1 API compatibility layer. When - :py:attr:`tf.compat.v1` is not available, a *NotImplementedError* is raised. - """ - # complain when the v1 compatibility layer is not existing - if not tf1: - raise NotImplementedError("the v1 compatibility layer of TensorFlow v2 (tf.compat.v1) is " - "required by visualize_graph, but missing") - - # prepare the log_dir - is_tmp = not log_dir - if is_tmp: - log_dir = tempfile.mkdtemp() - elif not os.path.exists(log_dir): - os.makedirs(log_dir) - - # read the graph when a string is passed - if isinstance(graph, six.string_types): - graph = read_constant_graph(graph, create_session=False, **kwargs) - - # switch to non-eager mode for the FileWriter to work - eager = getattr(tf1, "executing_eagerly", lambda: False)() - if eager: - tf1.disable_eager_execution() - - # write to file - writer = tf1.summary.FileWriter(log_dir) - writer.add_graph(graph) - - # reset the eager mode - if eager: - tf1.enable_eager_execution() - - # optionally start a tensorboard process - if start_tensorboard: - print("starting tensorboard with logdir {}".format(log_dir)) - cmd = "tensorboard --logdir '{}' {}".format(log_dir, tensorboard_args) - p = subprocess.Popen(cmd, shell=True, executable="/bin/bash", preexec_fn=os.setsid) - try: - p.communicate() - except (Exception, KeyboardInterrupt): - print("tensorboard terminated") - os.killpg(os.getpgid(p.pid), signal.SIGTERM) - pass - - # cleanup when log_dir is temporary - if is_tmp: - shutil.rmtree(log_dir) - - -def _test(): - """ - Internal test of the above functions based on the deepjet model. - """ - deepjet_model = "/cvmfs/cms.cern.ch/slc7_amd64_gcc820/cms/data-RecoBTag-Combined/V01-02-01/" \ - "RecoBTag/Combined/data/DeepFlavourV03_10X_training/constant_graph.pb" - deepjet_output = "ID_pred/Softmax" - - if not os.path.exists(deepjet_model): - print("cannot run tests as deepjet model '{}' does not exist".format(deepjet_model)) - sys.exit(1) - - # load the graph - read_constant_graph(deepjet_model, create_session=False) - if tf1: - g, s = read_constant_graph(deepjet_model, create_session=True) - - # write the graph - if tf1: - with tempfile.NamedTemporaryFile(suffix=".pb") as ntf: - write_constant_graph(s, [deepjet_output], ntf.name) - - # visualize the graph - if tf1: - visualize_graph(g) - - -if __name__ == "__main__": - _test() diff --git a/PhysicsTools/TensorFlow/src/TensorFlow.cc b/PhysicsTools/TensorFlow/src/TensorFlow.cc index d08e000d00586..522e9ef4dadcb 100644 --- a/PhysicsTools/TensorFlow/src/TensorFlow.cc +++ b/PhysicsTools/TensorFlow/src/TensorFlow.cc @@ -104,7 +104,9 @@ namespace tensorflow { return createSession(sessionOptions); } - Session* createSession(MetaGraphDef* metaGraphDef, const std::string& exportDir, SessionOptions& sessionOptions) { + Session* createSession(const MetaGraphDef* metaGraphDef, + const std::string& exportDir, + SessionOptions& sessionOptions) { // check for valid pointer if (metaGraphDef == nullptr) { throw cms::Exception("InvalidMetaGraphDef") << "error while creating session: metaGraphDef is nullptr"; @@ -151,7 +153,7 @@ namespace tensorflow { return session; } - Session* createSession(MetaGraphDef* metaGraphDef, const std::string& exportDir, int nThreads) { + Session* createSession(const MetaGraphDef* metaGraphDef, const std::string& exportDir, int nThreads) { // create session options and set thread options SessionOptions sessionOptions; setThreading(sessionOptions, nThreads); @@ -159,7 +161,7 @@ namespace tensorflow { return createSession(metaGraphDef, exportDir, sessionOptions); } - Session* createSession(GraphDef* graphDef, SessionOptions& sessionOptions) { + Session* createSession(const GraphDef* graphDef, SessionOptions& sessionOptions) { // check for valid pointer if (graphDef == nullptr) { throw cms::Exception("InvalidGraphDef") << "error while creating session: graphDef is nullptr"; @@ -185,7 +187,7 @@ namespace tensorflow { return session; } - Session* createSession(GraphDef* graphDef, int nThreads) { + Session* createSession(const GraphDef* graphDef, int nThreads) { // create session options and set thread options SessionOptions sessionOptions; setThreading(sessionOptions, nThreads); diff --git a/PhysicsTools/TensorFlow/test/createconstantgraph.py b/PhysicsTools/TensorFlow/test/createconstantgraph.py index 4b88bb3b24c81..7eecc62d9bccc 100644 --- a/PhysicsTools/TensorFlow/test/createconstantgraph.py +++ b/PhysicsTools/TensorFlow/test/createconstantgraph.py @@ -7,17 +7,15 @@ https://www.tensorflow.org/api_docs/python/tf/graph_util/convert_variables_to_constants """ - import os import sys -import tensorflow as tf -from PhysicsTools.TensorFlow.tools import TF2, write_constant_graph +import cmsml -# go into v1 compatibility mode -if TF2: - tf = tf.compat.v1 +# get tensorflow and work with the v1 compatibility layer +tf, tf1, tf_version = cmsml.tensorflow.import_tf() +tf = tf1 tf.disable_eager_execution() # prepare the datadir @@ -42,5 +40,6 @@ print(sess.run(y, feed_dict={scale_: 1.0, x_: [range(10)]})[0][0]) # write it +graph_path = os.path.join(datadir, "constantgraph.pb") outputs = ["output"] -write_constant_graph(sess, ["output"], os.path.join(datadir, "constantgraph.pb")) +cmsml.tensorflow.save_graph(graph_path, sess, output_names=outputs, variables_to_constants=True) diff --git a/PhysicsTools/TensorFlow/test/creategraph.py b/PhysicsTools/TensorFlow/test/creategraph.py index 9865c1f65a87e..b9b5352c2a422 100644 --- a/PhysicsTools/TensorFlow/test/creategraph.py +++ b/PhysicsTools/TensorFlow/test/creategraph.py @@ -7,17 +7,15 @@ https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/saved_model/README.md """ - import os import sys -import tensorflow as tf -from PhysicsTools.TensorFlow.tools import TF2 +import cmsml -# go into v1 compatibility mode -if TF2: - tf = tf.compat.v1 +# get tensorflow and work with the v1 compatibility layer +tf, tf1, tf_version = cmsml.tensorflow.import_tf() +tf = tf1 tf.disable_eager_execution() # prepare the datadir diff --git a/PhysicsTools/TensorFlow/test/readconstantgraph.py b/PhysicsTools/TensorFlow/test/readconstantgraph.py index 47da5b0d741ca..94138e723caa3 100644 --- a/PhysicsTools/TensorFlow/test/readconstantgraph.py +++ b/PhysicsTools/TensorFlow/test/readconstantgraph.py @@ -4,17 +4,15 @@ Test script that reads the constant graph created by "createconstantgraph.py". """ - import os import sys -import tensorflow as tf -from PhysicsTools.TensorFlow.tools import TF2, read_constant_graph +import cmsml -# go into v1 compatibility mode -if TF2: - tf = tf.compat.v1 +# get tensorflow and work with the v1 compatibility layer +tf, tf1, tf_version = cmsml.tensorflow.import_tf() +tf = tf1 tf.disable_eager_execution() # prepare the datadir @@ -25,5 +23,6 @@ datadir = os.path.join(os.path.dirname(thisdir), "bin", "data") # read and evaluate the graph -graph, sess = read_constant_graph(os.path.join(datadir, "constantgraph.pb"), create_session=True) +graph_path = os.path.join(datadir, "constantgraph.pb") +graph, sess = cmsml.tensorflow.load_graph(graph_path, create_session=True) print(sess.run("output:0", feed_dict={"scale:0": 1.0, "input:0": [range(10)]})[0][0]) diff --git a/PhysicsTools/TensorFlow/test/testBase.h b/PhysicsTools/TensorFlow/test/testBase.h index f4c6a9c5a7fcf..3b16724fb4ca8 100644 --- a/PhysicsTools/TensorFlow/test/testBase.h +++ b/PhysicsTools/TensorFlow/test/testBase.h @@ -8,6 +8,7 @@ #define PHYSICSTOOLS_TENSORFLOW_TEST_TESTBASE_H #include +#include #include #include @@ -29,7 +30,7 @@ void testBase::setUp() { // create the graph std::string testPath = cmsswPath("/src/PhysicsTools/TensorFlow/test"); - std::string cmd = "python " + testPath + "/" + pyScript() + " " + dataPath_; + std::string cmd = "python3 " + testPath + "/" + pyScript() + " " + dataPath_; std::array buffer; std::string result; std::shared_ptr pipe(popen(cmd.c_str(), "r"), pclose); @@ -45,8 +46,8 @@ void testBase::setUp() { } void testBase::tearDown() { - if (boost::filesystem::exists(dataPath_)) { - boost::filesystem::remove_all(dataPath_); + if (std::filesystem::exists(dataPath_)) { + std::filesystem::remove_all(dataPath_); } } @@ -58,7 +59,7 @@ std::string testBase::cmsswPath(std::string path) { std::string base = std::string(std::getenv("CMSSW_BASE")); std::string releaseBase = std::string(std::getenv("CMSSW_RELEASE_BASE")); - return (boost::filesystem::exists(base.c_str()) ? base : releaseBase) + path; + return (std::filesystem::exists(base.c_str()) ? base : releaseBase) + path; } #endif // PHYSICSTOOLS_TENSORFLOW_TEST_TESTBASE_H diff --git a/PhysicsTools/UtilAlgos/plugins/ErrorSummaryFilter.cc b/PhysicsTools/UtilAlgos/plugins/ErrorSummaryFilter.cc index 965e9abcfb98d..6b62343ef56f8 100644 --- a/PhysicsTools/UtilAlgos/plugins/ErrorSummaryFilter.cc +++ b/PhysicsTools/UtilAlgos/plugins/ErrorSummaryFilter.cc @@ -28,7 +28,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/MessageLogger/interface/ErrorSummaryEntry.h" +#include "DataFormats/Common/interface/ErrorSummaryEntry.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" // diff --git a/PhysicsTools/Utilities/BuildFile.xml b/PhysicsTools/Utilities/BuildFile.xml index e26f95c7ef3b0..64423a3d2a45e 100644 --- a/PhysicsTools/Utilities/BuildFile.xml +++ b/PhysicsTools/Utilities/BuildFile.xml @@ -3,7 +3,7 @@ - + diff --git a/PhysicsTools/Utilities/test/BuildFile.xml b/PhysicsTools/Utilities/test/BuildFile.xml index 075a554d936a2..1c355e4a4a7b7 100644 --- a/PhysicsTools/Utilities/test/BuildFile.xml +++ b/PhysicsTools/Utilities/test/BuildFile.xml @@ -34,7 +34,7 @@ - + diff --git a/QCDAnalysis/Configuration/python/QCDAnalysis_EventContent_cff.py b/QCDAnalysis/Configuration/python/QCDAnalysis_EventContent_cff.py deleted file mode 100644 index be26e7d1e0cb6..0000000000000 --- a/QCDAnalysis/Configuration/python/QCDAnalysis_EventContent_cff.py +++ /dev/null @@ -1,23 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# -# Collection of all Skim Paths for QCD Analysis -# -# -# -# -# Added by D. Mason 8/7/07 -# -# Pulled out single jet skims -- brought in -# Andreas Oehler's 3 skims + 2 more from UE 8/21/07 -# -# -# Andreas Oehler's skims -from QCDAnalysis.Skimming.qcdJetFilterStreamHi_EventContent_cff import * -from QCDAnalysis.Skimming.qcdJetFilterStreamMed_EventContent_cff import * -from QCDAnalysis.Skimming.qcdJetFilterStreamLo_EventContent_cff import * -# QCD UE analysis skims -from QCDAnalysis.Skimming.diMuonEventContent_cfi import * -from QCDAnalysis.Skimming.softJetsEventContent_cfi import * - diff --git a/QCDAnalysis/Configuration/python/QCDAnalysis_OutputModules_cff.py b/QCDAnalysis/Configuration/python/QCDAnalysis_OutputModules_cff.py deleted file mode 100644 index eb9147043e18a..0000000000000 --- a/QCDAnalysis/Configuration/python/QCDAnalysis_OutputModules_cff.py +++ /dev/null @@ -1,23 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# -# Collection of all outputModules for QCD Analysis -# -# -# -# -# Added by D. Mason 8/7/07 -# -# Pulled out single jet skims -- brought in -# Andreas Oehler's 3 skims + 2 more from UE 8/21/07 -# -# -# Andreas Oehler's skims -from QCDAnalysis.Skimming.qcdJetFilterStreamHiOutputModule_cfi import * -from QCDAnalysis.Skimming.qcdJetFilterStreamMedOutputModule_cfi import * -from QCDAnalysis.Skimming.qcdJetFilterStreamLoOutputModule_cfi import * -# UE analysis QCD skims -from QCDAnalysis.Skimming.softJetsOutputModule_cfi import * -from QCDAnalysis.Skimming.diMuonOutputModule_cfi import * - diff --git a/QCDAnalysis/Configuration/python/QCDAnalysis_SkimPaths_cff.py b/QCDAnalysis/Configuration/python/QCDAnalysis_SkimPaths_cff.py deleted file mode 100644 index ed8a333fdb4b2..0000000000000 --- a/QCDAnalysis/Configuration/python/QCDAnalysis_SkimPaths_cff.py +++ /dev/null @@ -1,23 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# -# Collection of all Skim Paths for QCD Analysis -# -# -# -# -# Added by D. Mason 8/7/07 -# -# Pulled out single jet skims -- brought in -# Andreas Oehler's 3 skims + 2 more from UE 8/21/07 -# -# -# Andreas Oehler's skims -- apparently requires random numbers... -from QCDAnalysis.Skimming.qcdJetFilterStreamHiPath_cff import * -from QCDAnalysis.Skimming.qcdJetFilterStreamMedPath_cff import * -from QCDAnalysis.Skimming.qcdJetFilterStreamLoPath_cff import * -# QCD UE analysis Skims -from QCDAnalysis.Skimming.softJetsPath_cff import * -from QCDAnalysis.Skimming.diMuonPath_cff import * - diff --git a/QCDAnalysis/Skimming/BuildFile.xml b/QCDAnalysis/Skimming/BuildFile.xml deleted file mode 100644 index d141dcb9bd34b..0000000000000 --- a/QCDAnalysis/Skimming/BuildFile.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/QCDAnalysis/Skimming/interface/QCDSingleJetFilter.h b/QCDAnalysis/Skimming/interface/QCDSingleJetFilter.h deleted file mode 100644 index 8314de06c7285..0000000000000 --- a/QCDAnalysis/Skimming/interface/QCDSingleJetFilter.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef __QCDSingleJetFilter__H__ -#define __QCDSingleJetFilter__H__ - -/* \class QCDSingleJetFilter for CSA07 Excercise - * by Andreas Oehler (andreas.oehler@cern.ch) - * - Filter to select on pt of the jet with hightest Pt - can do a random prescale (requires RandomNumber Service)[deactivated] - - */ - -// user include files -#include - -#include - -#include -#include -#include "FWCore/Utilities/interface/InputTag.h" - -#include - -//RandomGenerator Service taken out -//namespace CLHEP { -// class RandFlat; -//} - -class QCDSingleJetFilter : public edm::EDFilter { -public: - // Constructor - QCDSingleJetFilter(const edm::ParameterSet&); - - // Destructor - ~QCDSingleJetFilter() override; - - /// Get event properties to send to builder to fill seed collection - bool filter(edm::Event&, const edm::EventSetup&) override; - -private: - bool debug; - //CLHEP::RandFlat *theFlatDistrib; - double theMinPt; - //,thePreScale; - edm::EDGetTokenT theTriggerJetCollectionAToken; - edm::EDGetTokenT theTrigCollBToken; -}; - -#endif diff --git a/QCDAnalysis/Skimming/plugins/BuildFile.xml b/QCDAnalysis/Skimming/plugins/BuildFile.xml deleted file mode 100644 index 8397360261c4d..0000000000000 --- a/QCDAnalysis/Skimming/plugins/BuildFile.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/QCDAnalysis/Skimming/plugins/module.cc b/QCDAnalysis/Skimming/plugins/module.cc deleted file mode 100644 index 8a1bc598327d3..0000000000000 --- a/QCDAnalysis/Skimming/plugins/module.cc +++ /dev/null @@ -1,7 +0,0 @@ -// Framework-stuff - -#include - -#include "QCDAnalysis/Skimming/interface/QCDSingleJetFilter.h" - -DEFINE_FWK_MODULE(QCDSingleJetFilter); diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetEventContent_cff.py b/QCDAnalysis/Skimming/python/QCDHLT1jetEventContent_cff.py deleted file mode 100644 index 23f8dc27a591b..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetEventContent_cff.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Can insert block to customize what goes inside root file on top of AOD/RECO -QCDHLT1jetEventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -QCDHLT1jetEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('QCDHLT1jetSkimpath') - ) -) - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetOutputModule_cfi.py b/QCDAnalysis/Skimming/python/QCDHLT1jetOutputModule_cfi.py deleted file mode 100644 index 62e8becf6ece9..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetOutputModule_cfi.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from QCDAnalysis.Skimming.QCDHLT1jetEventContent_cff import * -QCDHLT1jetOutputModule = cms.OutputModule("PoolOutputModule", - #using QCDHLT1jetEventContent - QCDHLT1jetEventSelection, - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('QCDHLT1jet'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('QCDHLT1jet.root') -) - - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE1EventContent_cff.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE1EventContent_cff.py deleted file mode 100644 index 17fc7a78646d0..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE1EventContent_cff.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Can insert block to customize what goes inside root file on top of AOD/RECO -QCDHLT1jetPE1EventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -QCDHLT1jetPE1EventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('QCDHLT1jetPE1Skimpath') - ) -) - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE1OutputModule_cfi.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE1OutputModule_cfi.py deleted file mode 100644 index 828e3da253524..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE1OutputModule_cfi.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from QCDAnalysis.Skimming.QCDHLT1jetPE1EventContent_cff import * -QCDHLT1jetPE1OutputModule = cms.OutputModule("PoolOutputModule", - AODSIMEventContent, - #using QCDHLT1jetPE1EventContent - QCDHLT1jetPE1EventSelection, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('QCDHLT1jetPE1'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('QCDHLT1jetPE1.root') -) - - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE1Path_cff.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE1Path_cff.py deleted file mode 100644 index 16113e14ce603..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE1Path_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from QCDAnalysis.Skimming.QCDHLT1jetPE1Skim_cfi import * -QCDHLT1jetPE1Skimpath = cms.Path(QCDHLT1jetPE1Trigger) - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE1Skim_cfi.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE1Skim_cfi.py deleted file mode 100644 index a0da2c2d8bd0b..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE1Skim_cfi.py +++ /dev/null @@ -1,13 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# Module for Jet trigger skim -- HLT1jetPE1 trigger -# -QCDHLT1jetPE1Trigger = cms.EDFilter("HLTHighLevel", - HLTPaths = cms.vstring('HLT1jetPE1'), - byName = cms.bool(True), - andOr = cms.bool(True), - TriggerResultsTag = cms.InputTag("TriggerResults") -) - - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE3EventContent_cff.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE3EventContent_cff.py deleted file mode 100644 index 9d2e94730819c..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE3EventContent_cff.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Can insert block to customize what goes inside root file on top of AOD/RECO -QCDHLT1jetPE3EventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -QCDHLT1jetPE3EventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('QCDHLT1jetPE3Skimpath') - ) -) - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE3OutputModule_cfi.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE3OutputModule_cfi.py deleted file mode 100644 index 05eee187863b7..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE3OutputModule_cfi.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from QCDAnalysis.Skimming.QCDHLT1jetPE3EventContent_cff import * -QCDHLT1jetPE3OutputModule = cms.OutputModule("PoolOutputModule", - #using QCDHLT1jetPE3EventContent - QCDHLT1jetPE3EventSelection, - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('QCDHLT1jetPE3'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('QCDHLT1jetPE3.root') -) - - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE3Path_cff.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE3Path_cff.py deleted file mode 100644 index cc54b5b902311..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE3Path_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from QCDAnalysis.Skimming.QCDHLT1jetPE3Skim_cfi import * -QCDHLT1jetPE3Skimpath = cms.Path(QCDHLT1jetPE3Trigger) - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE3Skim_cfi.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE3Skim_cfi.py deleted file mode 100644 index a04616959f197..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE3Skim_cfi.py +++ /dev/null @@ -1,13 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# Module for Jet trigger skim -- HLT1jetPE3 trigger -# -QCDHLT1jetPE3Trigger = cms.EDFilter("HLTHighLevel", - HLTPaths = cms.vstring('HLT1jetPE3'), - byName = cms.bool(True), - andOr = cms.bool(True), - TriggerResultsTag = cms.InputTag("TriggerResults") -) - - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE5EventContent_cff.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE5EventContent_cff.py deleted file mode 100644 index 0d1e5d90019e1..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE5EventContent_cff.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Can insert block to customize what goes inside root file on top of AOD/RECO -QCDHLT1jetPE5EventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -QCDHLT1jetPE5EventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('QCDHLT1jetPE5Skimpath') - ) -) - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE5OutputModule_cfi.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE5OutputModule_cfi.py deleted file mode 100644 index ee6f23186aa1a..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE5OutputModule_cfi.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from QCDAnalysis.Skimming.QCDHLT1jetPE5EventContent_cff import * -QCDHLT1jetPE5OutputModule = cms.OutputModule("PoolOutputModule", - #using QCDHLT1jetPE5EventContent - QCDHLT1jetPE5EventSelection, - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('QCDHLT1jetPE5'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('QCDHLT1jetPE5.root') -) - - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE5Path_cff.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE5Path_cff.py deleted file mode 100644 index 10c902dedfa7a..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE5Path_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from QCDAnalysis.Skimming.QCDHLT1jetPE5Skim_cfi import * -QCDHLT1jetPE5Skimpath = cms.Path(QCDHLT1jetPE5Trigger) - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE5Skim_cfi.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE5Skim_cfi.py deleted file mode 100644 index 617fb2b86cd9e..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE5Skim_cfi.py +++ /dev/null @@ -1,13 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# Module for Jet trigger skim -- HLT1jetPE5 trigger -# -QCDHLT1jetPE5Trigger = cms.EDFilter("HLTHighLevel", - HLTPaths = cms.vstring('HLT1jetPE5'), - byName = cms.bool(True), - andOr = cms.bool(True), - TriggerResultsTag = cms.InputTag("TriggerResults") -) - - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE7EventContent_cff.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE7EventContent_cff.py deleted file mode 100644 index 1f35fa575c02e..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE7EventContent_cff.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Can insert block to customize what goes inside root file on top of AOD/RECO -QCDHLT1jetPE7EventContent = cms.PSet( - outputCommands = cms.untracked.vstring() -) -QCDHLT1jetPE7EventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('QCDHLT1jetPE7Skimpath') - ) -) - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE7OutputModule_cfi.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE7OutputModule_cfi.py deleted file mode 100644 index adb6726d36222..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE7OutputModule_cfi.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from QCDAnalysis.Skimming.QCDHLT1jetPE7EventContent_cff import * -QCDHLT1jetPE7OutputModule = cms.OutputModule("PoolOutputModule", - #using QCDHLT1jetPE7EventContent - QCDHLT1jetPE7EventSelection, - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('QCDHLT1jetPE7'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('QCDHLT1jetPE7.root') -) - - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE7Path_cff.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE7Path_cff.py deleted file mode 100644 index d389ebc8150be..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE7Path_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from QCDAnalysis.Skimming.QCDHLT1jetPE7Skim_cfi import * -QCDHLT1jetPE7Skimpath = cms.Path(QCDHLT1jetPE7Trigger) - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPE7Skim_cfi.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPE7Skim_cfi.py deleted file mode 100644 index fc25d000c6808..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPE7Skim_cfi.py +++ /dev/null @@ -1,13 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# Module for Jet trigger skim -- HLT1jetPE7 trigger -# -QCDHLT1jetPE7Trigger = cms.EDFilter("HLTHighLevel", - HLTPaths = cms.vstring('HLT1jetPE7'), - byName = cms.bool(True), - andOr = cms.bool(True), - TriggerResultsTag = cms.InputTag("TriggerResults") -) - - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetPath_cff.py b/QCDAnalysis/Skimming/python/QCDHLT1jetPath_cff.py deleted file mode 100644 index 3c254cf982c77..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetPath_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from QCDAnalysis.Skimming.QCDHLT1jetSkim_cfi import * -QCDHLT1jetSkimpath = cms.Path(QCDHLT1jetTrigger) - diff --git a/QCDAnalysis/Skimming/python/QCDHLT1jetSkim_cfi.py b/QCDAnalysis/Skimming/python/QCDHLT1jetSkim_cfi.py deleted file mode 100644 index bcbb62d7298fb..0000000000000 --- a/QCDAnalysis/Skimming/python/QCDHLT1jetSkim_cfi.py +++ /dev/null @@ -1,13 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# Module for Jet trigger skim -- HLT1jet trigger -# -QCDHLT1jetTrigger = cms.EDFilter("HLTHighLevel", - HLTPaths = cms.vstring('HLT1jet'), - byName = cms.bool(True), - andOr = cms.bool(True), - TriggerResultsTag = cms.InputTag("TriggerResults") -) - - diff --git a/QCDAnalysis/Skimming/python/diMuonEventContent_cfi.py b/QCDAnalysis/Skimming/python/diMuonEventContent_cfi.py deleted file mode 100644 index ea3cdf920aeda..0000000000000 --- a/QCDAnalysis/Skimming/python/diMuonEventContent_cfi.py +++ /dev/null @@ -1,22 +0,0 @@ -# The following comments couldn't be translated into the new config version: - -# "keep *_genParticles_*_*", - -import FWCore.ParameterSet.Config as cms - -from SimG4Core.Configuration.SimG4Core_EventContent_cff import * -diMuonEventContent = cms.PSet( - outputCommands = cms.untracked.vstring('keep *_ctfWithMaterialTracks_*_*', - 'keep *_globalMuons_*_*', - 'keep edmTriggerResults_*_*_*', - 'keep *_l1extraParticles_*_*') -) -#include "Configuration/EventContent/data/EventContent.cff" -#replace diMuonEventContent.outputCommands += AODSIMEventContent.outputCommands -diMuonEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('diMuonPath') - ) -) -diMuonEventContent.outputCommands.extend(SimG4CoreAOD.outputCommands) - diff --git a/QCDAnalysis/Skimming/python/diMuonOutputModule_cfi.py b/QCDAnalysis/Skimming/python/diMuonOutputModule_cfi.py deleted file mode 100644 index f752bbb7746f5..0000000000000 --- a/QCDAnalysis/Skimming/python/diMuonOutputModule_cfi.py +++ /dev/null @@ -1,14 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from QCDAnalysis.Skimming.diMuonEventContent_cfi import * -diMuonOutputModule = cms.OutputModule("PoolOutputModule", - diMuonEventSelection, - diMuonEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('diMuons'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('diMuons.root') -) - - diff --git a/QCDAnalysis/Skimming/python/diMuonPath_cff.py b/QCDAnalysis/Skimming/python/diMuonPath_cff.py deleted file mode 100644 index d00928f429b1d..0000000000000 --- a/QCDAnalysis/Skimming/python/diMuonPath_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from QCDAnalysis.Skimming.diMuonSkim_cfi import * -diMuonPath = cms.Path(diMuonTrigger) - diff --git a/QCDAnalysis/Skimming/python/diMuonSkim_cfi.py b/QCDAnalysis/Skimming/python/diMuonSkim_cfi.py deleted file mode 100644 index dded3bc9412e7..0000000000000 --- a/QCDAnalysis/Skimming/python/diMuonSkim_cfi.py +++ /dev/null @@ -1,14 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# -# Modules for soft di-muon trigger skim. -# -diMuonTrigger = cms.EDFilter("HLTHighLevel", - HLTPaths = cms.vstring('HLT_DoubleMu3'), - byName = cms.bool(True), - andOr = cms.bool(True), - TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") -) - - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStreamHiOutputModule_cfi.py b/QCDAnalysis/Skimming/python/qcdJetFilterStreamHiOutputModule_cfi.py deleted file mode 100644 index 4165b36124608..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStreamHiOutputModule_cfi.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.EventContent.EventContent_cff import * -from QCDAnalysis.Skimming.qcdJetFilterStreamHi_EventContent_cff import * -qcdJetFilterStreamHiOutputModule = cms.OutputModule("PoolOutputModule", - qcdJetFilterStreamHiEventSelection, - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('qcdJetFilterStreamHiPath'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('qcdJetFilterStreamHi.root') -) - - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStreamHiPath_cff.py b/QCDAnalysis/Skimming/python/qcdJetFilterStreamHiPath_cff.py deleted file mode 100644 index c60be546bc5bb..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStreamHiPath_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from QCDAnalysis.Skimming.qcdJetFilterStreamHiSkim_cff import * -qcdJetFilterStreamHiPath = cms.Path(cms.SequencePlaceholder("qcdSingleJetFilterStreamHi")) - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStreamHiSkim_cff.py b/QCDAnalysis/Skimming/python/qcdJetFilterStreamHiSkim_cff.py deleted file mode 100644 index 93dff235f969b..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStreamHiSkim_cff.py +++ /dev/null @@ -1,9 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -qcdSingleJetFilterHi = cms.EDFilter("QCDSingleJetFilter", - TriggerJetCollectionB = cms.InputTag("fastjet6CaloJets"), - MinPt = cms.double(1000.0), - TriggerJetCollectionA = cms.InputTag("midPointCone7CaloJets") -) - - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStreamHi_EventContent_cff.py b/QCDAnalysis/Skimming/python/qcdJetFilterStreamHi_EventContent_cff.py deleted file mode 100644 index 0fae61d9c6964..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStreamHi_EventContent_cff.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -qcdJetFilterStreamHiEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('qcdJetFilterStreamHiPath') - ) -) - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStreamHi_cff.py b/QCDAnalysis/Skimming/python/qcdJetFilterStreamHi_cff.py deleted file mode 100644 index 1361636def947..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStreamHi_cff.py +++ /dev/null @@ -1,4 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -qcdJetFilterStreamHi = cms.Sequence(cms.SequencePlaceholder("qcdSingleJetFilterHi")) - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStreamLoOutputModule_cfi.py b/QCDAnalysis/Skimming/python/qcdJetFilterStreamLoOutputModule_cfi.py deleted file mode 100644 index 3cbfd23ad4e2b..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStreamLoOutputModule_cfi.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from QCDAnalysis.Skimming.qcdJetFilterStreamLo_EventContent_cff import * -from Configuration.EventContent.EventContent_cff import * - -qcdJetFilterStreamLoOutputModule = cms.OutputModule("PoolOutputModule", - qcdJetFilterStreamLoEventSelection, - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('qcdJetFilterStreamLoPath'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('qcdJetFilterStreamLo.root') -) - - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStreamLoPath_cff.py b/QCDAnalysis/Skimming/python/qcdJetFilterStreamLoPath_cff.py deleted file mode 100644 index d42034c8a4d47..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStreamLoPath_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from QCDAnalysis.Skimming.qcdJetFilterStreamLoSkim_cff import * -qcdJetFilterStreamLoPath = cms.Path(cms.SequencePlaceholder("qcdSingleJetFilterStreamLo")) - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStreamLoSkim_cff.py b/QCDAnalysis/Skimming/python/qcdJetFilterStreamLoSkim_cff.py deleted file mode 100644 index a23b55092b4de..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStreamLoSkim_cff.py +++ /dev/null @@ -1,9 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -qcdSingleJetFilterLo = cms.EDFilter("QCDSingleJetFilter", - TriggerJetCollectionB = cms.InputTag("fastjet6CaloJets"), - MinPt = cms.double(140.0), - TriggerJetCollectionA = cms.InputTag("midPointCone7CaloJets") -) - - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStreamLo_EventContent_cff.py b/QCDAnalysis/Skimming/python/qcdJetFilterStreamLo_EventContent_cff.py deleted file mode 100644 index 430b514e87c08..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStreamLo_EventContent_cff.py +++ /dev/null @@ -1,9 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -qcdJetFilterStreamLoEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('qcdJetFilterStreamLoPath', - 'HLT1jet:HLT') - ) -) - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStreamLo_cff.py b/QCDAnalysis/Skimming/python/qcdJetFilterStreamLo_cff.py deleted file mode 100644 index 3397d066f87e8..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStreamLo_cff.py +++ /dev/null @@ -1,4 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -qcdJetFilterStreamLo = cms.Sequence(~cms.SequencePlaceholder("qcdSingleJetFilterHi")*~cms.SequencePlaceholder("qcdSingleJetFilterMed")*cms.SequencePlaceholder("qcdSingleJetFilterLo")) - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStreamMedOutputModule_cfi.py b/QCDAnalysis/Skimming/python/qcdJetFilterStreamMedOutputModule_cfi.py deleted file mode 100644 index 272719529bb7d..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStreamMedOutputModule_cfi.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from QCDAnalysis.Skimming.qcdJetFilterStreamMed_EventContent_cff import * -from Configuration.EventContent.EventContent_cff import * - -qcdJetFilterStreamMedOutputModule = cms.OutputModule("PoolOutputModule", - qcdJetFilterStreamMedEventSelection, - AODSIMEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('qcdJetFilterStreamMedPath'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('qcdJetFilterStreamMed.root') -) - - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStreamMedPath_cff.py b/QCDAnalysis/Skimming/python/qcdJetFilterStreamMedPath_cff.py deleted file mode 100644 index 280743dc437d7..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStreamMedPath_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from QCDAnalysis.Skimming.qcdJetFilterStreamMedSkim_cff import * -qcdJetFilterStreamMedPath = cms.Path(cms.SequencePlaceholder("qcdSingleJetFilterStreamMed")) - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStreamMedSkim_cff.py b/QCDAnalysis/Skimming/python/qcdJetFilterStreamMedSkim_cff.py deleted file mode 100644 index 7659ac29459b5..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStreamMedSkim_cff.py +++ /dev/null @@ -1,9 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -qcdSingleJetFilterMed = cms.EDFilter("QCDSingleJetFilter", - TriggerJetCollectionB = cms.InputTag("fastjet6CaloJets"), - MinPt = cms.double(500.0), - TriggerJetCollectionA = cms.InputTag("midPointCone7CaloJets") -) - - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStreamMed_EventContent_cff.py b/QCDAnalysis/Skimming/python/qcdJetFilterStreamMed_EventContent_cff.py deleted file mode 100644 index 514d9c17ef9f5..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStreamMed_EventContent_cff.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -qcdJetFilterStreamMedEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('qcdJetFilterStreamMedPath') - ) -) - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStreamMed_cff.py b/QCDAnalysis/Skimming/python/qcdJetFilterStreamMed_cff.py deleted file mode 100644 index 444561a75588e..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStreamMed_cff.py +++ /dev/null @@ -1,4 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -qcdJetFilterStreamMed = cms.Sequence(~cms.SequencePlaceholder("qcdSingleJetFilterHi")*cms.SequencePlaceholder("qcdSingleJetFilterMed")) - diff --git a/QCDAnalysis/Skimming/python/qcdJetFilterStream_EventContent_cff.py b/QCDAnalysis/Skimming/python/qcdJetFilterStream_EventContent_cff.py deleted file mode 100644 index 4809104ad3fef..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdJetFilterStream_EventContent_cff.py +++ /dev/null @@ -1,18 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -qcdJetFilterStreamHiEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('qcdJetFilterStreamHiPath') - ) -) -qcdJetFilterStreamMedEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('qcdJetFilterStreamMedPath') - ) -) -qcdJetFilterStreamLoEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('qcdJetFilterStreamLoPath') - ) -) - diff --git a/QCDAnalysis/Skimming/python/qcdSingleJetFilterRandBlock_cff.py b/QCDAnalysis/Skimming/python/qcdSingleJetFilterRandBlock_cff.py deleted file mode 100644 index 8d9f21b334f22..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdSingleJetFilterRandBlock_cff.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -qcdSingleJetFilterRandSeeds = cms.PSet( - qcdSingleJetFilterMed = cms.untracked.uint32(14821), - qcdSingleJetFilterLo = cms.untracked.uint32(3214), - qcdSingleJetFilterHi = cms.untracked.uint32(9821) -) - diff --git a/QCDAnalysis/Skimming/python/qcdSingleJetFilter_cfi.py b/QCDAnalysis/Skimming/python/qcdSingleJetFilter_cfi.py deleted file mode 100644 index 91edc1f4ab2f3..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdSingleJetFilter_cfi.py +++ /dev/null @@ -1,9 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -qcdSingleJetFilter = cms.EDFilter("QCDSingleJetFilter", - TriggerJetCollectionB = cms.InputTag("fastjet6CaloJets"), - MinPt = cms.double(3000.0), - TriggerJetCollectionA = cms.InputTag("midPointCone7CaloJets") -) - - diff --git a/QCDAnalysis/Skimming/python/qcdSingleJetFilters_cff.py b/QCDAnalysis/Skimming/python/qcdSingleJetFilters_cff.py deleted file mode 100644 index 38b4afed67081..0000000000000 --- a/QCDAnalysis/Skimming/python/qcdSingleJetFilters_cff.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import copy -from QCDAnalysis.Skimming.qcdSingleJetFilter_cfi import * -qcdSingleJetFilterHi = copy.deepcopy(qcdSingleJetFilter) -import copy -from QCDAnalysis.Skimming.qcdSingleJetFilter_cfi import * -qcdSingleJetFilterMed = copy.deepcopy(qcdSingleJetFilter) -import copy -from QCDAnalysis.Skimming.qcdSingleJetFilter_cfi import * -qcdSingleJetFilterLo = copy.deepcopy(qcdSingleJetFilter) -qcdSingleJetFilterHi.MinPt = 1000 -qcdSingleJetFilterMed.MinPt = 500 -qcdSingleJetFilterLo.MinPt = 200 - diff --git a/QCDAnalysis/Skimming/python/softJetsEventContent_cfi.py b/QCDAnalysis/Skimming/python/softJetsEventContent_cfi.py deleted file mode 100644 index 6aa9f4d8dfe8d..0000000000000 --- a/QCDAnalysis/Skimming/python/softJetsEventContent_cfi.py +++ /dev/null @@ -1,24 +0,0 @@ -# The following comments couldn't be translated into the new config version: - -# "keep *_genParticles_*_*", - -import FWCore.ParameterSet.Config as cms - -from RecoJets.Configuration.RecoJets_EventContent_cff import * -from SimG4Core.Configuration.SimG4Core_EventContent_cff import * -softJetsEventContent = cms.PSet( - outputCommands = cms.untracked.vstring('keep *_ctfWithMaterialTracks_*_*', - 'keep *_globalMuons_*_*', - 'keep edmTriggerResults_*_*_*', - 'keep *_l1extraParticles_*_*') -) -#include "Configuration/EventContent/data/EventContent.cff" -#replace softJetsEventContent.outputCommands += AODSIMEventContent.outputCommands -softJetsEventSelection = cms.PSet( - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('softJetsPath') - ) -) -softJetsEventContent.outputCommands.extend(RecoJetsAOD.outputCommands) -softJetsEventContent.outputCommands.extend(SimG4CoreAOD.outputCommands) - diff --git a/QCDAnalysis/Skimming/python/softJetsOutputModule_cfi.py b/QCDAnalysis/Skimming/python/softJetsOutputModule_cfi.py deleted file mode 100644 index 60f34d3ea16ad..0000000000000 --- a/QCDAnalysis/Skimming/python/softJetsOutputModule_cfi.py +++ /dev/null @@ -1,14 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from QCDAnalysis.Skimming.softJetsEventContent_cfi import * -softJetsOutputModule = cms.OutputModule("PoolOutputModule", - softJetsEventSelection, - softJetsEventContent, - dataset = cms.untracked.PSet( - filterName = cms.untracked.string('softJets'), - dataTier = cms.untracked.string('USER') - ), - fileName = cms.untracked.string('softJets.root') -) - - diff --git a/QCDAnalysis/Skimming/python/softJetsPath_cff.py b/QCDAnalysis/Skimming/python/softJetsPath_cff.py deleted file mode 100644 index e20cecf38ed2e..0000000000000 --- a/QCDAnalysis/Skimming/python/softJetsPath_cff.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from QCDAnalysis.Skimming.softJetsSkim_cff import * -softJetsPath = cms.Path(singleJetTrigger*~muonTrigger*~electronTrigger*~photonTrigger) - diff --git a/QCDAnalysis/Skimming/python/softJetsSkim_cff.py b/QCDAnalysis/Skimming/python/softJetsSkim_cff.py deleted file mode 100644 index 5a33acfc72ab3..0000000000000 --- a/QCDAnalysis/Skimming/python/softJetsSkim_cff.py +++ /dev/null @@ -1,38 +0,0 @@ -# The following comments couldn't be translated into the new config version: - -# -# -# Modules for soft Jet trigger skim. Designed for CSA07 only. -# Should be used in veto mode and kill dominant samples of other physics -# - -import FWCore.ParameterSet.Config as cms - -singleJetTrigger = cms.EDFilter("QCDSingleJetFilter", - TriggerJetCollectionB = cms.InputTag("midPointCone7CaloJets"), - MinPt = cms.double(20.0), - TriggerJetCollectionA = cms.InputTag("midPointCone7CaloJets") -) - -muonTrigger = cms.EDFilter("HLTHighLevel", - HLTPaths = cms.vstring('HLT_Mu15_L1Mu7'), - byName = cms.bool(True), - andOr = cms.bool(True), - TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") -) - -electronTrigger = cms.EDFilter("HLTHighLevel", - HLTPaths = cms.vstring('HLT_IsoEle18_L1R'), - byName = cms.bool(True), - andOr = cms.bool(True), - TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") -) - -photonTrigger = cms.EDFilter("HLTHighLevel", - HLTPaths = cms.vstring('HLT_IsoPhoton40_L1R'), - byName = cms.bool(True), - andOr = cms.bool(True), - TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") -) - - diff --git a/QCDAnalysis/Skimming/src/QCDSingleJetFilter.cc b/QCDAnalysis/Skimming/src/QCDSingleJetFilter.cc deleted file mode 100644 index de1f2e6c5627d..0000000000000 --- a/QCDAnalysis/Skimming/src/QCDSingleJetFilter.cc +++ /dev/null @@ -1,108 +0,0 @@ -/* \class QCDSingleJetFilter - * - * QCDSingleJetFilter for CSA07 Excercise - * - * author: Andreas Oehler (andreas.oehler@cern.ch) - * see header - */ - -//MyHeadeR: -#include - -// User include files - -#include -#include -#include -#include -#include - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/JetReco/interface/GenJet.h" - -//rand: -//#include -//#include -//#include - -// C++ -#include -#include -#include -#include - -using namespace std; -using namespace edm; -//using namespace reco; - -//detruktor -QCDSingleJetFilter::~QCDSingleJetFilter() { - //delete theFlatDistrib; -} - -// Constructor -//QCDSingleJetFilter::QCDSingleJetFilter(const edm::ParameterSet& pset):theFlatDistrib(0),theTriggerJetCollectionA(pset.getParameter("TriggerJetCollectionA")),theTrigCollB(pset.getParameter("TriggerJetCollectionB")){ -QCDSingleJetFilter::QCDSingleJetFilter(const edm::ParameterSet& pset) - : theTriggerJetCollectionAToken( - consumes(pset.getParameter("TriggerJetCollectionA"))), - theTrigCollBToken(consumes(pset.getParameter("TriggerJetCollectionB"))) { - // Local Debug flag - //debug = pset.getParameter("DebugHiggsToZZ4LeptonsSkim"); - - //getConfigParameter: - theMinPt = pset.getParameter("MinPt"); - //prescale taken out for convenience - //thePreScale = pset.getParameter("PreScale"); - //thePreScale=fabs(thePreScale); - //if (thePreScale<1) thePreScale=0; - - // Eventually, HLT objects: - - //get Random-Service running: - //edm::Service rng; - //if (!rng.isAvailable()) { - // throw cms::Exception("QCDSingleJetFilter")<<"QCDSingleJetFilter requires RandomNumberGeneratorService\n" - // "--borked setup\n"; - //} - //CLHEP::HepRandomEngine& engine = rng->getEngine(); - //theFlatDistrib = new CLHEP::RandFlat(engine,0.0,1.0); -} - -// Filter event -bool QCDSingleJetFilter::filter(edm::Event& event, const edm::EventSetup& setup) { - bool keepEvent = false; - using namespace edm; - using namespace std; - - //now get right Jet-Collection: - edm::Handle theTriggerCollectionJetsA; - edm::Handle theTrigCollJetsB; - - event.getByToken(theTriggerJetCollectionAToken, theTriggerCollectionJetsA); - event.getByToken(theTrigCollBToken, theTrigCollJetsB); - - for (reco::CaloJetCollection::const_iterator iter = theTriggerCollectionJetsA->begin(); - iter != theTriggerCollectionJetsA->end(); - ++iter) { - if ((*iter).pt() >= theMinPt) { - keepEvent = true; - break; - } - } - - for (reco::CaloJetCollection::const_iterator iter = theTrigCollJetsB->begin(); iter != theTrigCollJetsB->end(); - ++iter) { - if ((*iter).pt() >= theMinPt) { - keepEvent = true; - break; - } - } - - //double randval = theFlatDistrib->fire(); - //if (thePreScale<1) keepEvent=false; - //else if ((randval>(1.0/thePreScale))&&keepEvent) keepEvent=false; - // cout<<"KeepEvent?: "< - - - - - - - - - - - - diff --git a/QCDAnalysis/UEAnalysis/interface/AnalysisRootpleProducer.h b/QCDAnalysis/UEAnalysis/interface/AnalysisRootpleProducer.h deleted file mode 100644 index 79fdd8b483ae2..0000000000000 --- a/QCDAnalysis/UEAnalysis/interface/AnalysisRootpleProducer.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef AnalysisRootpleProducer_H -#define AnalysisRootpleProducer_H - -#include - -#include -#include -#include -#include -#include -#include - -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" - -#include -#include - -#include -#include -#include -#include -#include -#include - -#include "DataFormats/JetReco/interface/Jet.h" -#include "DataFormats/JetReco/interface/GenJet.h" -#include "DataFormats/JetReco/interface/GenJetCollection.h" -#include "DataFormats/JetReco/interface/CaloJetCollection.h" -#include "DataFormats/JetReco/interface/BasicJet.h" -#include "DataFormats/JetReco/interface/BasicJetCollection.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" - -// access trigger results -#include -#include -#include - -class AnalysisRootpleProducer : public edm::EDAnalyzer { -public: - // - explicit AnalysisRootpleProducer(const edm::ParameterSet&); - ~AnalysisRootpleProducer() override {} // no need to delete ROOT stuff - // as it'll be deleted upon closing TFile - - void analyze(const edm::Event&, const edm::EventSetup&) override; - void beginJob() override; - void endJob() override; - - void fillEventInfo(int); - void fillMCParticles(float, float, float, float); - void fillTracks(float, float, float, float); - void fillInclusiveJet(float, float, float, float); - void fillChargedJet(float, float, float, float); - void fillTracksJet(float, float, float, float); - void fillCaloJet(float, float, float, float); - void store(); - -private: - bool onlyRECO; - - edm::EDGetTokenT mcEventToken; // label of MC event - edm::EDGetTokenT genJetCollToken; // label of Jet made with MC particles - edm::EDGetTokenT chgJetCollToken; // label of Jet made with only charged MC particles - edm::EDGetTokenT > chgGenPartCollToken; // label of charged MC particles - edm::EDGetTokenT tracksJetCollToken; - edm::EDGetTokenT recoCaloJetCollToken; - edm::EDGetTokenT tracksCollToken; - edm::EDGetTokenT triggerResultsToken; - - edm::Handle EvtHandle; - edm::Handle > CandHandleMC; - edm::Handle GenJetsHandle; - edm::Handle ChgGenJetsHandle; - edm::Handle CandHandleRECO; - edm::Handle TracksJetsHandle; - edm::Handle RecoCaloJetsHandle; - edm::Handle triggerResults; - // edm::Handle hltFilter; // not used at the moment: can access objects that fired the trigger - - edm::Service fs; - - float piG; - - TTree* AnalysisTree; - - static const int NMCPMAX = 10000; - static const int NTKMAX = 10000; - static const int NIJMAX = 10000; - static const int NCJMAX = 10000; - static const int NTJMAX = 10000; - static const int NEHJMAX = 10000; - - int EventKind, NumberMCParticles, NumberTracks, NumberInclusiveJet, NumberChargedJet, NumberTracksJet, NumberCaloJet; - - float MomentumMC[NMCPMAX], TransverseMomentumMC[NMCPMAX], EtaMC[NMCPMAX], PhiMC[NMCPMAX]; - float MomentumTK[NTKMAX], TransverseMomentumTK[NTKMAX], EtaTK[NTKMAX], PhiTK[NTKMAX]; - float MomentumIJ[NIJMAX], TransverseMomentumIJ[NIJMAX], EtaIJ[NIJMAX], PhiIJ[NIJMAX]; - float MomentumCJ[NCJMAX], TransverseMomentumCJ[NCJMAX], EtaCJ[NCJMAX], PhiCJ[NCJMAX]; - float MomentumTJ[NTJMAX], TransverseMomentumTJ[NTJMAX], EtaTJ[NTJMAX], PhiTJ[NTJMAX]; - float MomentumEHJ[NEHJMAX], TransverseMomentumEHJ[NEHJMAX], EtaEHJ[NEHJMAX], PhiEHJ[NEHJMAX]; - - TClonesArray* MonteCarlo; - TClonesArray* InclusiveJet; - TClonesArray* ChargedJet; - TClonesArray* Track; - TClonesArray* TracksJet; - TClonesArray* CalorimeterJet; - TClonesArray* acceptedTriggers; -}; - -#endif diff --git a/QCDAnalysis/UEAnalysis/interface/AnalysisRootpleProducerOnlyMC.h b/QCDAnalysis/UEAnalysis/interface/AnalysisRootpleProducerOnlyMC.h deleted file mode 100644 index 45472f7f7b9b1..0000000000000 --- a/QCDAnalysis/UEAnalysis/interface/AnalysisRootpleProducerOnlyMC.h +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef AnalysisRootpleProducerOnlyMC_H -#define AnalysisRootpleProducerOnlyMC_H - -#include - -#include -#include -#include -#include -#include -#include - -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" - -#include -#include - -#include -#include -#include -#include -#include - -#include "DataFormats/JetReco/interface/Jet.h" -#include "DataFormats/JetReco/interface/GenJet.h" -#include "DataFormats/JetReco/interface/GenJetCollection.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" - -class AnalysisRootpleProducerOnlyMC : public edm::EDAnalyzer { -public: - explicit AnalysisRootpleProducerOnlyMC(const edm::ParameterSet&); - ~AnalysisRootpleProducerOnlyMC() override {} - - void analyze(const edm::Event&, const edm::EventSetup&) override; - void beginJob() override; - void endJob() override; - - void fillEventInfo(int); - void fillMCParticles(float, float, float, float); - void fillInclusiveJet(float, float, float, float); - void fillChargedJet(float, float, float, float); - void store(); - -private: - edm::EDGetTokenT mcEventToken; // label of MC event - edm::EDGetTokenT genJetCollToken; // label of Jet made with MC particles - edm::EDGetTokenT chgJetCollToken; // label of Jet made with only charged MC particles - edm::EDGetTokenT > chgGenPartCollToken; // label of charged MC particles - - edm::Handle EvtHandle; - edm::Handle > CandHandleMC; - edm::Handle GenJetsHandle; - edm::Handle ChgGenJetsHandle; - - float piG; - - edm::Service fs; - - TTree* AnalysisTree; - - static const int NMCPMAX = 10000; - static const int NTKMAX = 10000; - static const int NIJMAX = 10000; - static const int NCJMAX = 10000; - static const int NTJMAX = 10000; - static const int NEHJMAX = 10000; - - int EventKind, NumberMCParticles, NumberTracks, NumberInclusiveJet, NumberChargedJet, NumberTracksJet, NumberCaloJet; - - float MomentumMC[NMCPMAX], TransverseMomentumMC[NMCPMAX], EtaMC[NMCPMAX], PhiMC[NMCPMAX]; - float MomentumTK[NTKMAX], TransverseMomentumTK[NTKMAX], EtaTK[NTKMAX], PhiTK[NTKMAX]; - float MomentumIJ[NIJMAX], TransverseMomentumIJ[NIJMAX], EtaIJ[NIJMAX], PhiIJ[NIJMAX]; - float MomentumCJ[NCJMAX], TransverseMomentumCJ[NCJMAX], EtaCJ[NCJMAX], PhiCJ[NCJMAX]; - float MomentumTJ[NTJMAX], TransverseMomentumTJ[NTJMAX], EtaTJ[NTJMAX], PhiTJ[NTJMAX]; - float MomentumEHJ[NEHJMAX], TransverseMomentumEHJ[NEHJMAX], EtaEHJ[NEHJMAX], PhiEHJ[NEHJMAX]; - - TClonesArray* MonteCarlo; - TClonesArray* InclusiveJet; - TClonesArray* ChargedJet; -}; - -#endif diff --git a/QCDAnalysis/UEAnalysis/python/UEAnalysisJets_cfi.py b/QCDAnalysis/UEAnalysis/python/UEAnalysisJets_cfi.py deleted file mode 100644 index d00381f57847a..0000000000000 --- a/QCDAnalysis/UEAnalysis/python/UEAnalysisJets_cfi.py +++ /dev/null @@ -1,70 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -UEAnalysisIconeJetParameters = cms.PSet( - verbose = cms.untracked.bool(False), - jetPtMin = cms.double(5.0), - inputEtMin = cms.double(0.9), - coneRadius = cms.double(0.5), - seedThreshold = cms.double(1.0), - debugLevel = cms.untracked.int32(0), - jetType = cms.untracked.string('GenJet'), - inputEMin = cms.double(0.0) -) -IC5GenJet = cms.EDProducer("IterativeConeJetProducer", - UEAnalysisIconeJetParameters, - src = cms.InputTag("goodParticles") -) - -IC5ChgGenJet = cms.EDProducer("IterativeConeJetProducer", - UEAnalysisIconeJetParameters, - src = cms.InputTag("chargeParticles") -) - -IC5TracksJet = cms.EDProducer("IterativeConeJetProducer", - UEAnalysisIconeJetParameters, - src = cms.InputTag("goodTracks") -) -IC5TracksJet.jetType = 'BasicJet' -IC5GenJet500 = cms.EDProducer("IterativeConeJetProducer", - UEAnalysisIconeJetParameters, - src = cms.InputTag("goodParticles") -) - -IC5ChgGenJet500 = cms.EDProducer("IterativeConeJetProducer", - UEAnalysisIconeJetParameters, - src = cms.InputTag("chargeParticles") -) - -IC5TracksJet500 = cms.EDProducer("IterativeConeJetProducer", - UEAnalysisIconeJetParameters, - src = cms.InputTag("goodTracks") -) -IC5GenJet500.inputEtMin = 0.5 -IC5ChgGenJet500.inputEtMin = 0.5 -IC5TracksJet500.jetType = 'BasicJet' -IC5TracksJet500.inputEtMin = 0.5 - -IC5GenJet1500 = cms.EDProducer("IterativeConeJetProducer", - UEAnalysisIconeJetParameters, - src = cms.InputTag("goodParticles") - ) -IC5ChgGenJet1500 = cms.EDProducer("IterativeConeJetProducer", - UEAnalysisIconeJetParameters, - src = cms.InputTag("chargeParticles") - ) -IC5TracksJet1500 = cms.EDProducer("IterativeConeJetProducer", - UEAnalysisIconeJetParameters, - src = cms.InputTag("goodTracks") - ) -IC5GenJet1500.inputEtMin = 1.5 -IC5ChgGenJet1500.inputEtMin = 1.5 -IC5TracksJet1500.jetType = 'BasicJet' -IC5TracksJet1500.inputEtMin = 1.5 - - -UEAnalysisJetsOnlyMC = cms.Sequence(IC5GenJet*IC5ChgGenJet*IC5GenJet500*IC5ChgGenJet500*IC5GenJet1500*IC5ChgGenJet1500) -UEAnalysisJetsOnlyReco = cms.Sequence(IC5TracksJet*IC5TracksJet500*IC5TracksJet1500) -UEAnalysisJets = cms.Sequence(UEAnalysisJetsOnlyMC*UEAnalysisJetsOnlyReco) - - - diff --git a/QCDAnalysis/UEAnalysis/python/UEAnalysisParticles_cfi.py b/QCDAnalysis/UEAnalysis/python/UEAnalysisParticles_cfi.py deleted file mode 100644 index 9a6f806923596..0000000000000 --- a/QCDAnalysis/UEAnalysis/python/UEAnalysisParticles_cfi.py +++ /dev/null @@ -1,24 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from SimGeneral.HepPDTESSource.pythiapdt_cfi import * -from RecoJets.Configuration.GenJetParticles_cff import * -# select charged GenParticles with pt > 0.29 -# -# (threshold used to be 0.89, but tracking in 2_0_0 -# saves tracks with pT > 0.29) -goodParticles = cms.EDFilter("GenParticleSelector", - filter = cms.bool(False), - src = cms.InputTag("genParticles"), - cut = cms.string('pt > 0.0'), - stableOnly = cms.bool(True) -) - -chargeParticles = cms.EDFilter("GenParticleSelector", - filter = cms.bool(False), - src = cms.InputTag("genParticles"), - cut = cms.string('charge != 0 & pt > 0.29'), - stableOnly = cms.bool(True) -) - -UEAnalysisParticles = cms.Sequence(genJetParticles*goodParticles*chargeParticles) - diff --git a/QCDAnalysis/UEAnalysis/python/UEAnalysisRootpleOnlyMC_cfi.py b/QCDAnalysis/UEAnalysis/python/UEAnalysisRootpleOnlyMC_cfi.py deleted file mode 100644 index 20faa87392d09..0000000000000 --- a/QCDAnalysis/UEAnalysis/python/UEAnalysisRootpleOnlyMC_cfi.py +++ /dev/null @@ -1,14 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -ueAnalysisRootple = cms.EDFilter("AnalysisRootpleProducerOnlyMC", - #label of Jet made with only charged MC particles - ChgGenJetCollectionName = cms.untracked.InputTag("iterativeCone5ChgGenJetsSeed10"), - #label of MC event - MCEvent = cms.untracked.InputTag("source"), - #label of charged MC particles - ChgGenPartCollectionName = cms.untracked.InputTag("chargeParticles"), - #label of Jet made with MC particles - GenJetCollectionName = cms.untracked.InputTag("iterativeCone5GenJetsSeed10") -) - - diff --git a/QCDAnalysis/UEAnalysis/python/UEAnalysisRootple_cfi.py b/QCDAnalysis/UEAnalysis/python/UEAnalysisRootple_cfi.py deleted file mode 100644 index bf0c04ae94a9d..0000000000000 --- a/QCDAnalysis/UEAnalysis/python/UEAnalysisRootple_cfi.py +++ /dev/null @@ -1,23 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -ueAnalysisRootple = cms.EDProducer("AnalysisRootpleProducer", - #label of selected tracks - TracksCollectionName = cms.untracked.InputTag("goodTracks"), - #label of Jet made with Tracks - TracksJetCollectionName = cms.untracked.InputTag("iterativeCone5BasicJetsSeed10"), - #label of Jet made with only charged MC particles - ChgGenJetCollectionName = cms.untracked.InputTag("iterativeCone5ChgGenJetsSeed10"), - #lable of MC event - MCEvent = cms.untracked.InputTag("source"), - #label of charged MC particles - ChgGenPartCollectionName = cms.untracked.InputTag("chargeParticles"), - OnlyRECO = cms.untracked.bool(True), - #label of standard Calo Jet - RecoCaloJetCollectionName = cms.untracked.InputTag("iterativeCone5CaloJets"), - #label of Jet made with MC particles - GenJetCollectionName = cms.untracked.InputTag("iterativeCone5GenJetsSeed10"), - #label of trigger results - triggerResults = cms.InputTag("TriggerResults") -) - - diff --git a/QCDAnalysis/UEAnalysis/python/UEAnalysisTracks_cfi.py b/QCDAnalysis/UEAnalysis/python/UEAnalysisTracks_cfi.py deleted file mode 100644 index 497eafd09f57e..0000000000000 --- a/QCDAnalysis/UEAnalysis/python/UEAnalysisTracks_cfi.py +++ /dev/null @@ -1,34 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# old ( < CMSSW_2_x) cuts: -# -# select tracks with -# pt > 0.89 -# at least 8 valid hits -# distance of closest approach to the primary vertex <= 3.5 -# z-difference to primary vertex <= 30 -# new ( >= CMSSW_2_x) cuts (under investigation): -# -# select tracks with -# pt > 0.29 -# at least 4 valid hits -> moved back to 8 -# distance of closest approach to the primary vertex <= 3.5 -# z-difference to primary vertex <= 30 -selectTracks = cms.EDFilter("TrackSelector", - src = cms.InputTag("generalTracks"), - cut = cms.string('pt > 0.29 & numberOfValidHits > 7 & d0 <= 3.5 & dz <= 30') -) - -allTracks = cms.EDProducer("ChargedCandidateProducer", - src = cms.InputTag("selectTracks"), - particleType = cms.string('pi+') -) - -goodTracks = cms.EDFilter("CandSelector", - filter = cms.bool(False), - src = cms.InputTag("allTracks"), - cut = cms.string('pt > 0.29') -) - -UEAnalysisTracks = cms.Sequence(selectTracks*allTracks*goodTracks) - diff --git a/QCDAnalysis/UEAnalysis/root/Makefile b/QCDAnalysis/UEAnalysis/root/Makefile deleted file mode 100644 index e21ff63567fa1..0000000000000 --- a/QCDAnalysis/UEAnalysis/root/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -objects = UEAnalysis.o UEAnalysisOnRootple.o -source1 = UEAnalysis.cpp -source2 = UEAnalysisOnRootple.C - -CXX = g++ -CXXFLAGS = -O -Wall -fPIC -LD = g++ -ROOTCFLAGS := $(shell root-config --cflags) -ROOTLIBS := $(shell root-config --libs) -ROOTGLIBS := $(shell $(ROOTSYS)/bin/root-config --glibs) -CXXFLAGS += $(ROOTCFLAGS) -LIBS = $(ROOTLIBS) -lEG -SHARE = -shared -NAMELIB = $(CMSSW_BASE)/src/QCDAnalysis/UEAnalysis/root/UE.o -BINFILE = UEAnalysis -lib : - $(LD) -g $(ROOTCFLAGS) -c $(source1) - $(LD) -g $(ROOTCFLAGS) -c $(source2) - $(LD) -g $(objects) $(LIBS) $(SHARE) -o $(NAMELIB) - -bin: - $(LD) -g $(LIBS) $(NAMELIB) -o $(BINFILE) - - -clean: - rm $(objects) $(BINFILE) $(NAMELIB) G__a* diff --git a/QCDAnalysis/UEAnalysis/root/RunUE.sh b/QCDAnalysis/UEAnalysis/root/RunUE.sh deleted file mode 100755 index 9af1ab18b2f66..0000000000000 --- a/QCDAnalysis/UEAnalysis/root/RunUE.sh +++ /dev/null @@ -1,18 +0,0 @@ -// Compilation instructions: -// make lib -// make bin -// -//Examples for use the analysis macro -//List of parameter to be passed -// 1) file that contain th elist of root file to be analyzed -// 2) output file name -// 3) kind of Analysis possible option are UE, Jet, MPI that respectively means -// analysis of Underlying Event, study on charged jet properties, study on counting the MPI via MiniJets -// 4) trigger stream, possibel otion are MB, Jet20, Jet60, Jet120 -// 5) luminosity scenario in pb -// 6) eta region -// 7) Pt of Calo Jet for trigger selection -// 8) cuts on the minimu pt of the tracks in MeV -// 9) cuts on the minimum pt of MiniJet to be used only in case you are running the MPI scheme - -./UEAnalysis listMB_09.dat StreamMB_900_lumi1pb.root UE MB 1 2 0 900 0 diff --git a/QCDAnalysis/UEAnalysis/root/UEAnalysis.cpp b/QCDAnalysis/UEAnalysis/root/UEAnalysis.cpp deleted file mode 100644 index 7b31f25436119..0000000000000 --- a/QCDAnalysis/UEAnalysis/root/UEAnalysis.cpp +++ /dev/null @@ -1,104 +0,0 @@ -#include - -#include "Riostream.h" -#include "TROOT.h" -#include "TTree.h" -#include "TChain.h" -#include "TMath.h" -#include "TRef.h" -#include "TRefArray.h" -#include "TH1.h" -#include "TH2.h" -#include "TDatabasePDG.h" - -#include -#include -#include -#include -#include "UEAnalysisOnRootple.h" -using namespace std; - -int main(int argc, char* argv[]) { - - char* filelist = argv[1]; - char* outname = argv[2]; - char* type = argv[3]; - char* jetStream = argv[4]; - Float_t lumi=atof(argv[5]); - Float_t eta=atof(argv[6]); - Float_t triggerPt=atof(argv[7]); - char* tkCut= argv[8]; - Float_t ptCut = atof(argv[9]); - - string Trigger(jetStream); - string AnalysisType(type); - string TracksPt(tkCut); - - Float_t weight[7]; - - Float_t Jet20_900[7]={1.000000,0.254008,0.027852,0.011589,0.002788,0.000531,0.000071}; - Float_t Jet20GlobalWeight_900=9.95; - Float_t Jet60_900[7]={1.000000,0.416103,0.100088,0.019064,0.002536,0.0,0.0}; - Float_t Jet60GlobalWeight_900=1.86; - Float_t Jet120_900[7]={1.000000,0.190474,0.025338,0.0,0.0,0.0,0.0}; - Float_t Jet120GlobalWeight_900=23.43; - Float_t MB_900[7]={1.0,0.0,0.0,0.0,0.0,0.0,0.0}; - Float_t MBGlobalWeight_900=0.104; - - Float_t Jet20_500[7]={1.000000,0.263501,0.026244,0.010588,0.002454,0.000493,0.000067}; - Float_t Jet20GlobalWeight_500=11.32; - Float_t Jet60_500[7]={1.000000,0.403430,0.093489,0.018767,0.002535,0.0,0.0}; - Float_t Jet60GlobalWeight_500=1.99; - Float_t Jet120_500[7]={1.000000,0.200737,0.027111,0.0,0.0,0.0,0.0}; - Float_t Jet120GlobalWeight_500=23.43; - Float_t MB_500[7]={1.0,0.0,0.0,0.0,0.0,0.0,0.0}; - Float_t MBGlobalWeight_500=0.276; - - if(TracksPt=="900"){ - if(Trigger=="Jet20"){ - for(int i=0;i<7;i++){ - weight[i]=Jet20_900[i]*Jet20GlobalWeight_900*lumi*0.1; - } - }else if(Trigger=="Jet60"){ - for(int i=0;i<7;i++) - weight[i]=Jet60_900[i]*Jet60GlobalWeight_900*lumi*0.1; - }else if(Trigger=="Jet120"){ - for(int i=0;i<7;i++) - weight[i]=Jet120_900[i]*Jet120GlobalWeight_900*lumi*0.1; - }else if(Trigger=="MB"){ - for(int i=0;i<7;i++) - weight[i]=MB_900[i]*MBGlobalWeight_900*lumi*0.1; - }else{ - cout<<"Select an undefinde Jet Stream "< -#include -#include -#include - -#include -#include - -UEAnalysisCorrCali::UEAnalysisCorrCali() -{ - std::cout << "UEAnalysisCorrCali constructor " < -#include -#include -#include - -class UEAnalysisCorrCali{ - public : - - UEAnalysisCorrCali(); - ~UEAnalysisCorrCali(){} - - float calibrationPt(float ptReco,std::string tkpt); - float correctionPtTrans(float ptReco,std::string tkpt); - float correctionPtToward(float ptReco,std::string tkpt); - float correctionPtAway(float ptReco,std::string tkpt); - - float correctionNTrans(float ptReco,std::string tkpt); - float correctionNToward(float ptReco,std::string tkpt); - float correctionNAway(float ptReco,std::string tkpt); -}; - -#endif diff --git a/QCDAnalysis/UEAnalysis/root/UEAnalysisJets.C b/QCDAnalysis/UEAnalysis/root/UEAnalysisJets.C deleted file mode 100644 index 6833eb423875d..0000000000000 --- a/QCDAnalysis/UEAnalysis/root/UEAnalysisJets.C +++ /dev/null @@ -1,269 +0,0 @@ -#include "UEAnalysisJets.h" -#include -#include - -UEAnalysisJets::UEAnalysisJets() -{ - std::cout << "UEAnalysisJets constructor " <cd(); - - dr_chgcalo = new TH1F("dr_chgcalo","#Delta R Charged RECO vs Calorimeter",100,0.,10.); - dr_chginc = new TH1F("dr_chginc","#Delta R Charged RECO vs Inclusive",100,0.,10.); - dr_chgmcreco = new TH1F("dr_chgmcreco","#Delta R Charged RECO vs Charged MC",100,0.,10.); - dr_caloinc = new TH1F("dr_caloinc","#Delta R Calorimeter vs Inclusive",100,0.,10.); - numb_cal = new TH1F("numb_cal","Number calo Jet",30,0.,30.); - pT_cal = new TH1F("pT_cal","P_{T} calo",50,0.,50.); - eta_cal = new TH1F("eta_cal","#eta Calo",100,-3.,3.); - eta_cal_res = new TH1F("eta_cal_res","#eta_{calo} - #eta_{inc}",100,-3.,3.); - phi_cal = new TH1F("phi_cal","#phi Calo",50,-3.14,3.14); - phi_cal_res = new TH1F("phi_cal_res","#phi_{calo} - #phi_{inc}",100,-3.,3.); - numb_chgmc = new TH1F("numb_chgmc","Number Charged MC Jet",30,0.,30.); - pT_chgmc = new TH1F("pT_chgmc","P_{T} Charged MC",50,0.,50.); - eta_chgmc = new TH1F("eta_chgmc","#eta Charged MC",100,-3.,3.); - eta_chgmc_res = new TH1F("eta_chgmc_res","#eta_{chg MC} - #eta_{inc}",100,-3.,3.); - phi_chgmc = new TH1F("phi_chgmc","#phi Charged MC",50,-3.14,3.14); - phi_chgmc_res = new TH1F("phi_chgmc_res","#phi_{chg MC} - #phi_{inc}",100,-3.,3.); - numb_chgreco = new TH1F("numb_chgreco","Number Charged RECO Jet",30,0.,30.); - pT_chgreco = new TH1F("pT_chgreco","P_{T} Charged RECO",50,0.,50.); - eta_chgreco = new TH1F("eta_chgreco","#eta Charged RECO",100,-3.,3.); - eta_chgreco_res = new TH1F("eta_chgreco_res","#eta_{chg RECO} - #eta_{inc}",100,-3.,3.); - phi_chgreco = new TH1F("phi_chgreco","#phi Charged RECO",50,-3.14,3.14); - phi_chgreco_res = new TH1F("phi_chgreco_res","#phi_{chg RECO} - #phi_{inc}",100,-3.,3.); - numb_inc = new TH1F("numb_inc","Number Inclusive Jet",30,0.,30.); - pT_inc = new TH1F("pT_inc","P_{T} Inclusive",50,0.,50.); - eta_inc = new TH1F("eta_inc","#eta Inclusive",100,-3.,3.); - phi_inc = new TH1F("phi_inc","#phi Inclusive",50,-3.14,3.14); - calib_chgcalo = new TProfile("calib_chgcalo","#frac{P_{T}^{Chg RECO}}{P_{T}^{Calo}} vs P_{T}^{Calo}",100,0,200,-4,4); - calib_chginc = new TProfile("calib_chginc","#frac{P_{T}^{Chg RECO}}{P_{T}^{Inc}} vs P_{T}^{Inc}",100,0,200,-4,4); - calib_chgmcreco = new TProfile("calib_chgmcreco","#frac{P_{T}^{Chg MC}}{P_{T}^{Chg RECO}} vs P_{T}^{Chg RECO}",100,0,200,-4,4); - calib_caloinc = new TProfile("calib_caloinc","#frac{P_{T}^{Calo}}{P_{T}^{Inc}} vs P_{T}^{Inc}",100,0,200,-4,4); - calib_chgcalo_eta = new TProfile("calib_chgcalo_eta","#frac{P_{T}^{Chg RECO}}{P_{T}^{Calo}} vs #eta^{Calo}",100,-3,3,-4,4); - calib_chginc_eta = new TProfile("calib_chginc_eta","#frac{P_{T}^{Chg RECO}}{P_{T}^{Inc}} vs #eta^{Inc}",100,-3,3,-4,4); - calib_chgmcreco_eta = new TProfile("calib_chgmcreco_eta","#frac{P_{T}^{Chg MC}}{P_{T}^{Chg RECO}} vs #eta^{Chg RECO}",100,-3,3,-4,4); - calib_caloinc_eta = new TProfile("calib_caloinc_eta","#frac{P_{T}^{Calo}}{P_{T}^{Inc}} vs #eta^{Inc}",100,-3,3,-4,4); - calib_chgcalo_phi = new TProfile("calib_chgcalo_phi","#frac{P_{T}^{Chg RECO}}{P_{T}^{Calo}} vs #phi^{Calo}",100,-3,3,-4,4); - calib_chginc_phi = new TProfile("calib_chginc_phi","#frac{P_{T}^{Chg RECO}}{P_{T}^{Inc}} vs #phi^{Inc}",100,-3,3,-4,4); - calib_chgmcreco_phi = new TProfile("calib_chgmcreco_phi","#frac{P_{T}^{Chg MC}}{P_{T}^{Chg RECO}} vs #phi^{Chg RECO}",100,-3,3,-4,4); - calib_caloinc_phi = new TProfile("calib_caloinc_phi","#frac{P_{T}^{Calo}}{P_{T}^{Inc}} vs #phi^{Inc}",100,-3,3,-4,4); - -} - -void UEAnalysisJets::jetCalibAnalysis(float weight,float etaRegion,TClonesArray * InclusiveJet,TClonesArray * ChargedJet,TClonesArray * TracksJet,TClonesArray * CalorimeterJet) -{ - if(InclusiveJet->GetEntries()!=0 && ChargedJet->GetEntries()!=0 && TracksJet->GetEntries()!=0 && CalorimeterJet->GetEntries()!=0){ - - float phiEHJ = -666; - float phiTJ = -666; - float phiIJ = -666; - float phiCJ = -666; - - float ptEHJ = -666; - float ptTJ = -666; - float ptIJ = -666; - float ptCJ = -666; - - float etaEHJ = -666; - float etaTJ = -666; - float etaIJ = -666; - float etaCJ = -666; - - TLorentzVector *m=0; - - int nIncJet=0; - - for(int i=0;iGetSize();++i) { - TLorentzVector *v = (TLorentzVector*)InclusiveJet->At(i); - if(fabs(v->Eta())GetSize();++i) - { - TLorentzVector *v = (TLorentzVector*)TracksJet->At(i); - if(fabs(v->Eta())GetSize();++i) - { - TLorentzVector *v = (TLorentzVector*)ChargedJet->At(i); - if(fabs(v->Eta())GetSize();++i) - { - TLorentzVector *v = (TLorentzVector*)CalorimeterJet->At(i); - if(fabs(v->Eta())Fill(nCaloJet); - numb_chgmc->Fill(nChgMCJet); - numb_chgreco->Fill(nChgRECOJet); - numb_inc->Fill(nIncJet); - - TLorentzVector *IJ0 = (TLorentzVector*)InclusiveJet->At(0); - TLorentzVector *TJ0 = (TLorentzVector*)TracksJet->At(0); - TLorentzVector *CJ0 = (TLorentzVector*)CalorimeterJet->At(0); - - if(fabs(IJ0->Eta())Eta())Fill(IJ0->Eta()-TJ0->Eta()); - phi_chgreco_res->Fill(IJ0->Phi()-TJ0->Phi()); - } - - if(fabs(IJ0->Eta())Eta())Fill(IJ0->Eta()-CJ0->Eta()); - phi_chgreco_res->Fill(IJ0->Phi()-CJ0->Phi()); - } - - for(int i=0;iGetSize();++i) - { - TLorentzVector *v = (TLorentzVector*)InclusiveJet->At(i); - if(fabs(v->Eta())Eta(); - ptIJ = v->Pt(); - phiIJ = v->Phi(); - break; - } - } - - for(int i=0;iGetSize();++i) - { - TLorentzVector *v = (TLorentzVector*)TracksJet->At(i); - if(fabs(v->Eta())Eta(); - ptTJ = v->Pt(); - phiTJ = v->Phi(); - break; - } - } - - for(int i=0;iGetSize();++i) - { - TLorentzVector *v = (TLorentzVector*)ChargedJet->At(i); - if(fabs(v->Eta())Eta(); - ptCJ = v->Pt(); - phiCJ = v->Phi(); - break; - } - } - - for(int i=0;iGetSize();i++) - { - TLorentzVector *v = (TLorentzVector*)CalorimeterJet->At(i); - if(fabs(v->Eta())Eta(); - ptEHJ = v->Pt(); - phiEHJ = v->Phi(); - break; - } - } - - - if(etaEHJ!=-666&&etaTJ!=-666){ - float dPhiEHJTJ = fabs(phiEHJ-phiTJ); - if(dPhiEHJTJ>piG) - dPhiEHJTJ=2*piG-dPhiEHJTJ; - float delR_chgcalo=sqrt((etaEHJ-etaTJ)*(etaEHJ-etaTJ)+dPhiEHJTJ*dPhiEHJTJ); - dr_chgcalo->Fill(delR_chgcalo,weight); - if(ptEHJ>0) - { - calib_chgcalo->Fill(ptEHJ,ptTJ/ptEHJ,weight); - calib_chgcalo_eta->Fill(etaEHJ,ptTJ/ptEHJ,weight); - calib_chgcalo_phi->Fill(phiEHJ,ptTJ/ptEHJ,weight); - } - } - - if(etaIJ!=-666&&etaTJ!=-666){ - float dPhiIJTJ = fabs(phiIJ-phiTJ); - if(dPhiIJTJ>piG) - dPhiIJTJ=2*piG-dPhiIJTJ; - float delR_chginc=sqrt((etaIJ-etaTJ)*(etaIJ-etaTJ)+dPhiIJTJ*dPhiIJTJ); - dr_chginc->Fill(delR_chginc,weight); - if(ptIJ>0) - { - calib_chginc->Fill(ptIJ,ptTJ/ptIJ,weight); - calib_chginc_eta->Fill(etaIJ,ptTJ/ptIJ,weight); - calib_chginc_phi->Fill(phiIJ,ptTJ/ptIJ,weight); - } - } - - if(etaIJ!=-666&&etaCJ!=-666){ - eta_chgmc_res->Fill((etaIJ-etaCJ)); - phi_chgmc_res->Fill((phiIJ-phiCJ)); - } - - if(etaCJ!=-666&&etaTJ!=-666){ - float dPhiCJTJ = fabs(phiCJ-phiTJ); - if(dPhiCJTJ>piG) - dPhiCJTJ=2*piG-dPhiCJTJ; - float delR_chgmcreco=sqrt((etaCJ-etaTJ)*(etaCJ-etaTJ)+dPhiCJTJ*dPhiCJTJ); - dr_chgmcreco->Fill(delR_chgmcreco,weight); - if(ptTJ>0) - { - calib_chgmcreco->Fill(ptTJ,ptCJ/ptTJ,weight); - calib_chgmcreco_eta->Fill(etaTJ,ptCJ/ptTJ,weight); - calib_chgmcreco_phi->Fill(phiTJ,ptCJ/ptTJ,weight); - } - } - - if(etaEHJ!=-666&&etaIJ!=-666){ - float dPhiIJEHJ = fabs(phiEHJ-phiIJ); - if(dPhiIJEHJ>piG) - dPhiIJEHJ=2*piG-dPhiIJEHJ; - float delR_caloinc=sqrt((etaIJ-etaEHJ)*(etaIJ-etaEHJ)+dPhiIJEHJ*dPhiIJEHJ); - dr_caloinc->Fill(delR_caloinc,weight); - if(ptIJ>0) - { - calib_caloinc->Fill(ptIJ,ptEHJ/ptIJ,weight); - calib_caloinc_eta->Fill(etaIJ,ptEHJ/ptIJ,weight); - calib_caloinc_phi->Fill(phiIJ,ptEHJ/ptIJ,weight); - } - } - - if(etaEHJ!=-666){ - pT_cal->Fill(ptEHJ,weight); - eta_cal->Fill(etaEHJ,weight); - phi_cal->Fill(phiEHJ,weight); - } - - if(etaTJ!=-666){ - pT_chgreco->Fill(ptTJ,weight); - eta_chgreco->Fill(etaTJ,weight); - phi_chgreco->Fill(phiTJ,weight); - } - - if(etaCJ!=-666){ - pT_chgmc->Fill(ptCJ,weight); - eta_chgmc->Fill(etaCJ,weight); - phi_chgmc->Fill(phiCJ,weight); - } - - if(etaIJ!=-666){ - pT_inc->Fill(ptIJ,weight); - eta_inc->Fill(etaIJ,weight); - phi_inc->Fill(phiIJ,weight); - } - - } - -} - -void UEAnalysisJets::writeToFile(TFile * file){ - file->Write(); -} diff --git a/QCDAnalysis/UEAnalysis/root/UEAnalysisJets.h b/QCDAnalysis/UEAnalysis/root/UEAnalysisJets.h deleted file mode 100644 index e2f93bc99911a..0000000000000 --- a/QCDAnalysis/UEAnalysis/root/UEAnalysisJets.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef UEAnalysisJets_h -#define UEAnalysisJets_h - -#include -#include -#include -#include -#include - -#include - -#include -#include - -#include - -class UEAnalysisJets { - public : - - UEAnalysisJets(); - ~UEAnalysisJets(){} - void jetCalibAnalysis(float ,float,TClonesArray *,TClonesArray *,TClonesArray *,TClonesArray *); - void writeToFile(TFile *); - - void Begin(TFile *); - - //Charged Jet caharacterization - TH1F* dr_chgcalo; - TH1F* dr_chginc; - TH1F* dr_chgmcreco; - TH1F* dr_caloinc; - TH1F* numb_cal; - TH1F* pT_cal; - TH1F* eta_cal; - TH1F* eta_cal_res; - TH1F* phi_cal; - TH1F* phi_cal_res; - TH1F* numb_chgmc; - TH1F* pT_chgmc; - TH1F* eta_chgmc; - TH1F* eta_chgmc_res; - TH1F* phi_chgmc; - TH1F* phi_chgmc_res; - TH1F* numb_chgreco; - TH1F* pT_chgreco; - TH1F* eta_chgreco; - TH1F* eta_chgreco_res; - TH1F* phi_chgreco; - TH1F* phi_chgreco_res; - TH1F* numb_inc; - TH1F* pT_inc; - TH1F* eta_inc; - TH1F* phi_inc; - TProfile* calib_chgcalo; - TProfile* calib_chginc; - TProfile* calib_chgmcreco; - TProfile* calib_caloinc; - TProfile* calib_chgcalo_eta; - TProfile* calib_chginc_eta; - TProfile* calib_chgmcreco_eta; - TProfile* calib_caloinc_eta; - TProfile* calib_chgcalo_phi; - TProfile* calib_chginc_phi; - TProfile* calib_chgmcreco_phi; - TProfile* calib_caloinc_phi; - - float piG; -}; - -#endif diff --git a/QCDAnalysis/UEAnalysis/root/UEAnalysisMPI.C b/QCDAnalysis/UEAnalysis/root/UEAnalysisMPI.C deleted file mode 100644 index eb899a0d7f9a9..0000000000000 --- a/QCDAnalysis/UEAnalysis/root/UEAnalysisMPI.C +++ /dev/null @@ -1,157 +0,0 @@ -#include "UEAnalysisMPI.h" -#include -#include - -typedef std::pair AssociatedObject; - -UEAnalysisMPI::UEAnalysisMPI() -{ - std::cout << "UEAnalysisMPI constructor " <cd(); - - //MPI Analysis - - fNumbMPIMC = new TH1D("NumbMPIMC","Number of MPI",20,0.5,20.5); - fdEtaLeadingPairMC = new TH1D("dEtaLeadingPairMC","#Delta #eta Jet in the pair",100,-5,5); - fdPhiLeadingPairMC = new TH1D("dPhiLeadingPairMC","#Delta #phi Jet in the pair",40,120,200); - fptRatioLeadingPairMC = new TH1D("ptRatioLeadingPairMC","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet}",100,0,1.2); - pPtRatio_vs_PtJleadMC = new TProfile("PtRation_vs_PtJleadMC","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet} vs P_{T}^{1^{o} Jet}", 100,0.,50.); - pPtRatio_vs_EtaJleadMC = new TProfile("PtRation_vs_EtaJleadMC","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet} vs #eta^{1^{o} Jet}", 100,0.,5.); - pPtRatio_vs_PhiJleadMC = new TProfile("PtRation_vs_PhiJleadMC","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet} vs #phi^{1^{o} Jet}", 101,-4.,4.); - - fNumbMPIRECO = new TH1D("NumbMPIRECO","Number of MPI",20,0.5,20.5); - fdEtaLeadingPairRECO = new TH1D("dEtaLeadingPairRECO","#Delta #eta Jet in the pair",100,-5,5); - fdPhiLeadingPairRECO = new TH1D("dPhiLeadingPairRECO","#Delta #phi Jet in the pair",40,120,200); - fptRatioLeadingPairRECO = new TH1D("ptRatioLeadingPairRECO","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet}",100,0,1.2); - pPtRatio_vs_PtJleadRECO = new TProfile("PtRation_vs_PtJleadRECO","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet} vs P_{T}^{1^{o} Jet}", 100,0.,50.); - pPtRatio_vs_EtaJleadRECO = new TProfile("PtRation_vs_EtaJleadRECO","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet} vs #eta^{1^{o} Jet}", 100,0.,5.); - pPtRatio_vs_PhiJleadRECO = new TProfile("PtRation_vs_PhiJleadRECO","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet} vs #phi^{1^{o} Jet}", 101,-4.,4.); - -} - -void UEAnalysisMPI::mpiAnalysisMC(float weight,float etaRegion,float ptThreshold, TClonesArray* ChargedJet) -{ - std::vector JetMC; - JetMC.clear(); - - for(int j=0;jGetSize();++j){ - TLorentzVector *v = (TLorentzVector*)ChargedJet->At(j); - if(fabs(v->Eta()) assoJetMC; - assoJetMC.clear(); - - while(JetMC.size()>1){ - int oldSize = JetMC.size(); - std::vector::iterator itH = JetMC.begin(); - if((*itH)->Pt()>=ptThreshold){ - for(std::vector::iterator it=JetMC.begin();it!=JetMC.end();it++){ - float azimuthDistanceJet = fabs( (*itH)->Phi() - (*it)->Phi() ); - if((*it)->Pt()/(*itH)->Pt()>=0.3){ - if( (piG - rangePhi) < azimuthDistanceJet && azimuthDistanceJet < (piG + rangePhi)) { - AssociatedObject tmpPair((*itH),(*it)); - assoJetMC.push_back(tmpPair); - JetMC.erase(it); - int newSize = oldSize -1; - oldSize = newSize; - JetMC.resize(newSize); - break; - } - } - } - } - JetMC.erase(itH); - int newSize = oldSize -1; - JetMC.resize(newSize); - } - - if(assoJetMC.size()){ - fNumbMPIMC->Fill(assoJetMC.size()); - std::vector::iterator at= assoJetMC.begin(); - - const TLorentzVector* leadingJet((*at).first); - const TLorentzVector* secondJet((*at).second); - - pPtRatio_vs_PtJleadMC->Fill(leadingJet->Pt(),(secondJet->Pt()/leadingJet->Pt())); - pPtRatio_vs_EtaJleadMC->Fill(fabs(leadingJet->Eta()),(secondJet->Pt()/leadingJet->Pt())); - pPtRatio_vs_PhiJleadMC->Fill(leadingJet->Phi(),(secondJet->Pt()/leadingJet->Pt())); - - fdEtaLeadingPairMC->Fill(leadingJet->Eta()-secondJet->Eta()); - float dPhiJet = fabs(leadingJet->Phi()-secondJet->Phi()); - if(dPhiJet> piG) dPhiJet = 2*piG -dPhiJet; - dPhiJet = (180*dPhiJet)/piG; - fdPhiLeadingPairMC->Fill(dPhiJet); - fptRatioLeadingPairMC->Fill(secondJet->Pt()/leadingJet->Pt()); - } -} - -void UEAnalysisMPI::mpiAnalysisRECO(float weight,float etaRegion,float ptThreshold,TClonesArray * TracksJet) -{ - std::vector JetRECO; - JetRECO.clear(); - - for(int j=0;jGetSize();++j){ - TLorentzVector *v = (TLorentzVector*)TracksJet->At(j); - if(fabs(v->Eta()) assoJetRECO; - assoJetRECO.clear(); - - while(JetRECO.size()>1){ - int oldSize = JetRECO.size(); - std::vector::iterator itH = JetRECO.begin(); - if((*itH)->Pt()>=ptThreshold){ - for(std::vector::iterator it=JetRECO.begin();it!=JetRECO.end();it++){ - float azimuthDistanceJet = fabs( (*itH)->Phi() - (*it)->Phi() ); - if((*it)->Pt()/(*itH)->Pt()>=0.3){ - if( (piG - rangePhi) < azimuthDistanceJet && azimuthDistanceJet < (piG + rangePhi)) { - AssociatedObject tmpPair((*itH),(*it)); - assoJetRECO.push_back(tmpPair); - JetRECO.erase(it); - int newSize = oldSize -1; - oldSize = newSize; - JetRECO.resize(newSize); - break; - } - } - } - } - JetRECO.erase(itH); - int newSize = oldSize -1; - JetRECO.resize(newSize); - } - - if(assoJetRECO.size()){ - fNumbMPIRECO->Fill(assoJetRECO.size()); - std::vector::iterator at= assoJetRECO.begin(); - - const TLorentzVector* leadingJet((*at).first); - const TLorentzVector* secondJet((*at).second); - - pPtRatio_vs_PtJleadRECO->Fill(leadingJet->Pt(),(secondJet->Pt()/leadingJet->Pt())); - pPtRatio_vs_EtaJleadRECO->Fill(fabs(leadingJet->Eta()),(secondJet->Pt()/leadingJet->Pt())); - pPtRatio_vs_PhiJleadRECO->Fill(leadingJet->Phi(),(secondJet->Pt()/leadingJet->Pt())); - - fdEtaLeadingPairRECO->Fill(leadingJet->Eta()-secondJet->Eta()); - float dPhiJet = fabs(leadingJet->Phi()-secondJet->Phi()); - if(dPhiJet> piG) dPhiJet = 2*piG -dPhiJet; - dPhiJet = (180*dPhiJet)/piG; - fdPhiLeadingPairRECO->Fill(dPhiJet); - fptRatioLeadingPairRECO->Fill(secondJet->Pt()/leadingJet->Pt()); - } -} - -void UEAnalysisMPI::writeToFile(TFile * file){ - file->Write(); -} diff --git a/QCDAnalysis/UEAnalysis/root/UEAnalysisMPI.h b/QCDAnalysis/UEAnalysis/root/UEAnalysisMPI.h deleted file mode 100644 index 32737c0573458..0000000000000 --- a/QCDAnalysis/UEAnalysis/root/UEAnalysisMPI.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef UEAnalysisMPI_h -#define UEAnalysisMPI_h - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -class UEAnalysisMPI { - public : - - UEAnalysisMPI(); - ~UEAnalysisMPI(){} - - void mpiAnalysisMC(float,float,float,TClonesArray*); - void mpiAnalysisRECO(float,float,float,TClonesArray*); - - void Begin(TFile *); - - void writeToFile(TFile *); - - TH1D* fNumbMPIMC; - TH1D* fdEtaLeadingPairMC; - TH1D* fdPhiLeadingPairMC; - TH1D* fptRatioLeadingPairMC; - TProfile* pPtRatio_vs_PtJleadMC; - TProfile* pPtRatio_vs_EtaJleadMC; - TProfile* pPtRatio_vs_PhiJleadMC; - - TH1D* fNumbMPIRECO; - TH1D* fdEtaLeadingPairRECO; - TH1D* fdPhiLeadingPairRECO; - TH1D* fptRatioLeadingPairRECO; - TProfile* pPtRatio_vs_PtJleadRECO; - TProfile* pPtRatio_vs_EtaJleadRECO; - TProfile* pPtRatio_vs_PhiJleadRECO; - - float piG; - float rangePhi; -}; - -#endif diff --git a/QCDAnalysis/UEAnalysis/root/UEAnalysisOnRootple.C b/QCDAnalysis/UEAnalysis/root/UEAnalysisOnRootple.C deleted file mode 100644 index ed34de609eb03..0000000000000 --- a/QCDAnalysis/UEAnalysis/root/UEAnalysisOnRootple.C +++ /dev/null @@ -1,1052 +0,0 @@ -#define UEAnalysisOnRootple_cxx -#include "UEAnalysisOnRootple.h" -#include -#include -#include -#include - -#include -#include - -// -#include -#include -// - -typedef std::pair AssociatedObject; - -void UEAnalysisOnRootple::MultiAnalysis(char* filelist,char* outname,Float_t weight[7],Float_t eta, - Float_t triggerPt,std::string type,std::string trigger,std::string tkpt,Float_t ptCut) -{ - BeginJob(outname); - etaRegion = eta; - ptThreshold = ptCut/1000.; - char RootTupleName[255]; - char RootListFileName[255]; - strcpy(RootListFileName,filelist); - ifstream inFile(RootListFileName); - int filenumber = 0; - while(inFile.getline(RootTupleName,255)) { - if (RootTupleName[0] != '#') { - std::cout<<"I'm analyzing file "<cd("ueAnalysisRootple"); - - TTree * tree = (TTree*)gDirectory->Get("AnalysisTree"); - Init(tree); - - Loop(weight[filenumber],triggerPt,type,trigger,tkpt); - - f->Close(); - - } else { - if (RootTupleName[1] == '#') break; - } - filenumber++; - } - - EndJob(); - -} - - -void UEAnalysisOnRootple::Loop(Float_t we,Float_t triggerPt,std::string type,std::string trigger,std::string tkpt) -{ - if (fChain == 0) - { - std::cout << "fChain == 0 return." << std::endl; - return; - } - - Long64_t nentries = fChain->GetEntriesFast(); - - std::cout << "number of entries: " << nentries << std::endl; - - - Long64_t nbytes = 0, nb = 0; - for (Long64_t jentry=0; jentryGetEntry(jentry); nbytes += nb; - - -// int nAcceptedTriggers( acceptedTriggers->GetSize() ); -// if (nAcceptedTriggers) std::cout << std::endl << "Event has been accepted by " << acceptedTriggers->GetSize() << std::endl; -// for ( int iAcceptedTrigger(0); iAcceptedTriggerAt(iAcceptedTrigger))->GetName() << std::endl; -// } - - if(type=="Jet"){ - if(trigger=="MB"){ - if( EventKind != 92 && EventKind != 93 && EventKind != 94 ){ - JetCalibAnalysis(we,tkpt); - } - }else{ - if(TrasverseMomentumEHJ[0]>=triggerPt) - JetCalibAnalysis(we,tkpt); - } - } - if(type=="MPI"){ - if(trigger=="MB"){ - if( EventKind != 92 && EventKind != 93 && EventKind != 94 ){ - MPIAnalysisMC(we,tkpt); - MPIAnalysisRECO(we,tkpt); - } - }else{ - if(TrasverseMomentumEHJ[0]>=triggerPt){ - MPIAnalysisMC(we,tkpt); - MPIAnalysisRECO(we,tkpt); - } - } - } - if(type=="UE"){ - if(trigger=="MB"){ - if( EventKind != 92 && EventKind != 93 && EventKind != 94 ){ - UEAnalysisMC(we,tkpt); - UEAnalysisRECO(we,tkpt); - } - }else{ - if(TrasverseMomentumEHJ[0]>=triggerPt){ - UEAnalysisMC(we,tkpt); - UEAnalysisRECO(we,tkpt); - } - } - } - } -} - -void UEAnalysisOnRootple::UEAnalysisMC(Float_t weight,std::string tkpt) -{ - - for(int i=0;i=ptThreshold){ - fHistPtDistMC->Fill(TransverseMomentumMC[i],weight); - fHistEtaDistMC->Fill(EtaMC[i],weight); - fHistPhiDistMC->Fill(PhiMC[i],weight); - temp3MC->Fill(fabs(EtaMC[i])); - temp4MC->Fill(fabs(TransverseMomentumMC[i])); - } - } - - - for(int i=0;i<100;i++){ - pdN_vs_etaMC->Fill((i*0.05)+0.025,temp3MC->GetBinContent(i+1)/0.1,weight); - } - for(int i=0;i<1000;i++){ - pdN_vs_ptMC->Fill((i*0.1)+0.05,temp4MC->GetBinContent(i+1)/0.1,weight); - } - - temp3MC->Reset(); - temp4MC->Reset(); - - // get 3-vector of jet - TVector3 * jetvector = new TVector3; - Float_t PTLeadingCJ = -10; - for(int j=0;jSetPtEtaPhi(TrasverseMomentumCJ[j], EtaCJ[j], PhiCJ[j]); - PTLeadingCJ= TrasverseMomentumCJ[j]; - break; - } - } - - for(int i=0;i=ptThreshold){ - // get 3-vector of particle - TVector3 * particlevector = new TVector3; - particlevector->SetPtEtaPhi(TransverseMomentumMC[i], EtaMC[i], PhiMC[i]); - - // use ROOT method to calculate dphi - // convert dphi from radiants to degrees - Float_t conv = 180/piG; - Float_t Dphi_mc = conv * jetvector->DeltaPhi(*particlevector); - - temp1MC->Fill(Dphi_mc); - temp2MC->Fill(Dphi_mc,TransverseMomentumMC[i]); - } - } - - Float_t transN1=0; - Float_t transN2=0; - Float_t transP1=0; - Float_t transP2=0; - Float_t towardN=0; - Float_t towardP=0; - Float_t awayN=0; - Float_t awayP=0; - - for(int i=0;i<100;i++){ - if(i<=14){ - awayN += temp1MC->GetBinContent(i+1); - awayP += temp2MC->GetBinContent(i+1); - } - if(i>14 && i<33 ){ - transN1 += temp1MC->GetBinContent(i+1); - transP1 += temp2MC->GetBinContent(i+1); - } - if(i>=33 && i<=64 ){ - towardN += temp1MC->GetBinContent(i+1); - towardP += temp2MC->GetBinContent(i+1); - } - if(i>64 && i<83 ){ - transN2 += temp1MC->GetBinContent(i+1); - transP2 += temp2MC->GetBinContent(i+1); - } - if(i>=83){ - awayN += temp1MC->GetBinContent(i+1); - awayP += temp2MC->GetBinContent(i+1); - } - - Float_t bincont1_mc=temp1MC->GetBinContent(i+1); - pdN_vs_dphiMC->Fill(-180.+i*3.6+1.8,bincont1_mc/(3.6*2*etaRegion*(piG/180.)),weight); - - Float_t bincont2_mc=temp2MC->GetBinContent(i+1); - pdPt_vs_dphiMC->Fill(-180.+i*3.6+1.8,bincont2_mc/(3.6*2*etaRegion*(piG/180.)),weight); - - } - - bool orderedN = false; - bool orderedP = false; - - pdN_vs_ptJTowardMC->Fill(PTLeadingCJ,(towardN)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTowardMC->Fill(PTLeadingCJ,(towardP)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJAwayMC->Fill(PTLeadingCJ,(awayN)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJAwayMC->Fill(PTLeadingCJ,(awayP)/(120.*(2*etaRegion)*(piG/180.)),weight); - - if( transN1>=transN2 ) orderedN = true; - if( transP1>=transP2 ) orderedP = true; - - // add histo for ue fluctuation - h2d_dN_vs_ptJTransMC->Fill(PTLeadingCJ,(transN1+transN2)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJTransMC->Fill(PTLeadingCJ,(transN1+transN2)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransMC->Fill(PTLeadingCJ,(transP1+transP2)/(120.*(2*etaRegion)*(piG/180.)),weight); - - if(orderedN){ - pdN_vs_ptJTransMinMC->Fill(PTLeadingCJ,transN2/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJTransMaxMC->Fill(PTLeadingCJ,transN1/(60.*(2*etaRegion)*(piG/180.)),weight); - }else{ - pdN_vs_ptJTransMinMC->Fill(PTLeadingCJ,transN1/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJTransMaxMC->Fill(PTLeadingCJ,transN2/(60.*(2.*etaRegion)*(piG/180.)),weight); - } - - if(orderedP){ - pdPt_vs_ptJTransMinMC->Fill(PTLeadingCJ,transP2/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransMaxMC->Fill(PTLeadingCJ,transP1/(60.*(2.*etaRegion)*(piG/180.)),weight); - }else{ - pdPt_vs_ptJTransMinMC->Fill(PTLeadingCJ,transP1/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransMaxMC->Fill(PTLeadingCJ,transP2/(60.*(2.*etaRegion)*(piG/180.)),weight); - } - temp1MC->Reset(); - temp2MC->Reset(); - -} - -void UEAnalysisOnRootple::UEAnalysisRECO(Float_t weight,std::string tkpt) -{ - - for(int i=0;iptThreshold){ - fHistPtDistRECO->Fill(TrasverseMomentumTK[i],weight); - fHistEtaDistRECO->Fill(EtaTK[i],weight); - fHistPhiDistRECO->Fill(PhiTK[i],weight); - temp3RECO->Fill(fabs(EtaTK[i])); - temp4RECO->Fill(fabs(TrasverseMomentumTK[i])); - } - } - - - for(int i=0;i<100;i++){ - pdN_vs_etaRECO->Fill((i*0.05)+0.025,temp3RECO->GetBinContent(i+1)/0.1,weight); - } - for(int i=0;i<1000;i++){ - pdN_vs_ptRECO->Fill((i*0.1)+0.05,temp4RECO->GetBinContent(i+1)/0.1,weight); - } - - temp3RECO->Reset(); - temp4RECO->Reset(); - - // get 3-vector of jet - TVector3 * jetvector = new TVector3; - Float_t PTLeadingTJ = -10; - for(int j=0;jSetPtEtaPhi(TrasverseMomentumTJ[j], EtaTJ[j], PhiTJ[j]); - PTLeadingTJ= TrasverseMomentumTJ[j]; - break; - } - } - - Float_t PTLeadingCJ = CalibrationPt(PTLeadingTJ,tkpt)*PTLeadingTJ; - - /* - Float_t PTLeadingCJ = -10; - if(NumberChargedJet>0) - PTLeadingCJ=TrasverseMomentumCJ[0]; - */ - - for(int i=0;i=ptThreshold){ - TVector3 * particlevector = new TVector3; - particlevector->SetPtEtaPhi(TrasverseMomentumTK[i], EtaTK[i], PhiTK[i]); - - // use ROOT method to calculate dphi - // convert dphi from radiants to degrees - Float_t conv = 180/piG; - Float_t Dphi_reco = conv * jetvector->DeltaPhi(*particlevector); - - temp1RECO->Fill(Dphi_reco); - temp2RECO->Fill(Dphi_reco,TrasverseMomentumTK[i]); - } - } - - Float_t transN1=0; - Float_t transN2=0; - Float_t transP1=0; - Float_t transP2=0; - Float_t towardN=0; - Float_t towardP=0; - Float_t awayN=0; - Float_t awayP=0; - - for(int i=0;i<100;i++){ - if(i<=14){ - awayN += temp1RECO->GetBinContent(i+1); - awayP += temp2RECO->GetBinContent(i+1); - } - if(i>14 && i<33 ){ - transN1 += temp1RECO->GetBinContent(i+1); - transP1 += temp2RECO->GetBinContent(i+1); - } - if(i>=33 && i<=64 ){ - towardN += temp1RECO->GetBinContent(i+1); - towardP += temp2RECO->GetBinContent(i+1); - } - if(i>64 && i<83 ){ - transN2 += temp1RECO->GetBinContent(i+1); - transP2 += temp2RECO->GetBinContent(i+1); - } - if(i>=83){ - awayN += temp1RECO->GetBinContent(i+1); - awayP += temp2RECO->GetBinContent(i+1); - } - - Float_t bincont1_reco=temp1RECO->GetBinContent(i+1); - pdN_vs_dphiRECO->Fill(-180.+i*3.6+1.8,bincont1_reco/(3.6*2*etaRegion*(piG/180.)),weight); - - Float_t bincont2_reco=temp2RECO->GetBinContent(i+1); - pdPt_vs_dphiRECO->Fill(-180.+i*3.6+1.8,bincont2_reco/(3.6*2*etaRegion*(piG/180.)),weight); - - } - - bool orderedN = false; - bool orderedP = false; - - pdN_vs_ptJTowardRECO->Fill(PTLeadingTJ,(towardN)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTowardRECO->Fill(PTLeadingTJ,(towardP)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJAwayRECO->Fill(PTLeadingTJ,(awayN)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJAwayRECO->Fill(PTLeadingTJ,(awayP)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTowardRECO->Fill(PTLeadingCJ,(towardN*CorrectionNToward(PTLeadingTJ,tkpt))/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTowardRECO->Fill(PTLeadingCJ,(towardP*CorrectionPtToward(PTLeadingTJ,tkpt))/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJAwayRECO->Fill(PTLeadingCJ,(awayN*CorrectionNAway(PTLeadingTJ,tkpt))/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJAwayRECO->Fill(PTLeadingCJ,(awayP*CorrectionPtAway(PTLeadingTJ,tkpt))/(120.*(2*etaRegion)*(piG/180.)),weight); - - /* - pdN_vs_ptCJTowardRECO->Fill(PTLeadingCJ,(towardN)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTowardRECO->Fill(PTLeadingCJ,(towardP)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJAwayRECO->Fill(PTLeadingCJ,(awayN)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJAwayRECO->Fill(PTLeadingCJ,(awayP)/(120.*(2*etaRegion)*(piG/180.)),weight); - */ - - if( transN1>=transN2 ) orderedN = true; - if( transP1>=transP2 ) orderedP = true; - - pdN_vs_ptJTransRECO->Fill(PTLeadingTJ,(transN1+transN2)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransRECO->Fill(PTLeadingTJ,(transP1+transP2)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransRECO->Fill(PTLeadingCJ,((transN1+transN2)*CorrectionNTrans(PTLeadingTJ,tkpt))/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransRECO->Fill(PTLeadingCJ,((transP1+transP2)*CorrectionPtTrans(PTLeadingTJ,tkpt))/(120.*(2*etaRegion)*(piG/180.)),weight); - - /* - pdN_vs_ptCJTransRECO->Fill(PTLeadingCJ,((transN1+transN2))/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransRECO->Fill(PTLeadingCJ,((transP1+transP2))/(120.*(2*etaRegion)*(piG/180.)),weight); - */ - - if(orderedN){ - - pdN_vs_ptJTransMinRECO->Fill(PTLeadingTJ,transN2/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJTransMaxRECO->Fill(PTLeadingTJ,transN1/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transN2*CorrectionNTrans(PTLeadingTJ,tkpt))/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transN1*CorrectionNTrans(PTLeadingTJ,tkpt))/(60.*(2*etaRegion)*(piG/180.)),weight); - - /* - pdN_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transN2)/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transN1)/(60.*(2*etaRegion)*(piG/180.)),weight); - */ - - }else{ - - pdN_vs_ptJTransMinRECO->Fill(PTLeadingTJ,transN1/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJTransMaxRECO->Fill(PTLeadingTJ,transN2/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transN1*CorrectionNTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transN2*CorrectionNTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - /* - pdN_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transN1)/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transN2)/(60.*(2*etaRegion)*(piG/180.)),weight); - */ - - } - - if(orderedP){ - - pdPt_vs_ptJTransMinRECO->Fill(PTLeadingTJ,transP2/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransMaxRECO->Fill(PTLeadingTJ,transP1/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transP2*CorrectionPtTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transP1*CorrectionPtTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - /* - pdPt_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transP2)/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transP1)/(60.*(2.*etaRegion)*(piG/180.)),weight); - */ - - }else{ - - pdPt_vs_ptJTransMinRECO->Fill(PTLeadingTJ,transP1/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransMaxRECO->Fill(PTLeadingTJ,transP2/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transP1*CorrectionPtTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transP2*CorrectionPtTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - /* - pdPt_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transP1)/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transP2)/(60.*(2.*etaRegion)*(piG/180.)),weight); - */ - } - temp1RECO->Reset(); - temp2RECO->Reset(); - -} - -void UEAnalysisOnRootple::MPIAnalysisMC(Float_t weight,std::string tkpt) -{ - std::vector JetMC; - JetMC.clear(); - - for(int j=0;jSetPtEtaPhi(TrasverseMomentumCJ[j], EtaCJ[j], PhiCJ[j]); - JetMC.push_back(jetvector); - } - } - - std::vector assoJetMC; - assoJetMC.clear(); - - while(JetMC.size()>1){ - int oldSize = JetMC.size(); - std::vector::iterator itH = JetMC.begin(); - if((*itH)->Pt()>=ptThreshold){ - for(std::vector::iterator it=JetMC.begin();it!=JetMC.end();it++){ - float azimuthDistanceJet = fabs( (*itH)->Phi() - (*it)->Phi() ); - if((*it)->Pt()/(*itH)->Pt()>=0.3){ - if( (piG - rangePhi) < azimuthDistanceJet && azimuthDistanceJet < (piG + rangePhi)) { - AssociatedObject tmpPair((*itH),(*it)); - assoJetMC.push_back(tmpPair); - JetMC.erase(it); - int newSize = oldSize -1; - oldSize = newSize; - JetMC.resize(newSize); - break; - } - } - } - } - JetMC.erase(itH); - int newSize = oldSize -1; - JetMC.resize(newSize); - } - - if(assoJetMC.size()){ - fNumbMPIMC->Fill(assoJetMC.size()); - std::vector::iterator at= assoJetMC.begin(); - - const TVector3* leadingJet((*at).first); - const TVector3* secondJet((*at).second); - - pPtRatio_vs_PtJleadMC->Fill(leadingJet->Pt(),(secondJet->Pt()/leadingJet->Pt())); - pPtRatio_vs_EtaJleadMC->Fill(fabs(leadingJet->Eta()),(secondJet->Pt()/leadingJet->Pt())); - pPtRatio_vs_PhiJleadMC->Fill(leadingJet->Phi(),(secondJet->Pt()/leadingJet->Pt())); - - fdEtaLeadingPairMC->Fill(leadingJet->Eta()-secondJet->Eta()); - float dPhiJet = fabs(leadingJet->Phi()-secondJet->Phi()); - if(dPhiJet> piG) dPhiJet = 2*piG -dPhiJet; - dPhiJet = (180*dPhiJet)/piG; - fdPhiLeadingPairMC->Fill(dPhiJet); - fptRatioLeadingPairMC->Fill(secondJet->Pt()/leadingJet->Pt()); - } -} - -void UEAnalysisOnRootple::MPIAnalysisRECO(Float_t weight,std::string tkpt) -{ - std::vector JetRECO; - JetRECO.clear(); - - for(int j=0;jSetPtEtaPhi(CalibrationPt(TrasverseMomentumTJ[j],tkpt)*TrasverseMomentumTJ[j], EtaTJ[j], PhiTJ[j]); - jetvector->SetPtEtaPhi(TrasverseMomentumTJ[j], EtaTJ[j], PhiTJ[j]); - JetRECO.push_back(jetvector); - } - } - - std::vector assoJetRECO; - assoJetRECO.clear(); - - while(JetRECO.size()>1){ - int oldSize = JetRECO.size(); - std::vector::iterator itH = JetRECO.begin(); - if((*itH)->Pt()>=ptThreshold){ - for(std::vector::iterator it=JetRECO.begin();it!=JetRECO.end();it++){ - float azimuthDistanceJet = fabs( (*itH)->Phi() - (*it)->Phi() ); - if((*it)->Pt()/(*itH)->Pt()>=0.3){ - if( (piG - rangePhi) < azimuthDistanceJet && azimuthDistanceJet < (piG + rangePhi)) { - AssociatedObject tmpPair((*itH),(*it)); - assoJetRECO.push_back(tmpPair); - JetRECO.erase(it); - int newSize = oldSize -1; - oldSize = newSize; - JetRECO.resize(newSize); - break; - } - } - } - } - JetRECO.erase(itH); - int newSize = oldSize -1; - JetRECO.resize(newSize); - } - - if(assoJetRECO.size()){ - fNumbMPIRECO->Fill(assoJetRECO.size()); - std::vector::iterator at= assoJetRECO.begin(); - - const TVector3* leadingJet((*at).first); - const TVector3* secondJet((*at).second); - - pPtRatio_vs_PtJleadRECO->Fill(leadingJet->Pt(),(secondJet->Pt()/leadingJet->Pt())); - pPtRatio_vs_EtaJleadRECO->Fill(fabs(leadingJet->Eta()),(secondJet->Pt()/leadingJet->Pt())); - pPtRatio_vs_PhiJleadRECO->Fill(leadingJet->Phi(),(secondJet->Pt()/leadingJet->Pt())); - - fdEtaLeadingPairRECO->Fill(leadingJet->Eta()-secondJet->Eta()); - float dPhiJet = fabs(leadingJet->Phi()-secondJet->Phi()); - if(dPhiJet> piG) dPhiJet = 2*piG -dPhiJet; - dPhiJet = (180*dPhiJet)/piG; - fdPhiLeadingPairRECO->Fill(dPhiJet); - fptRatioLeadingPairRECO->Fill(secondJet->Pt()/leadingJet->Pt()); - } -} - -void UEAnalysisOnRootple::JetCalibAnalysis(Float_t weight,std::string tkpt) -{ - - if(NumberCaloJet!=0&&NumberChargedJet!=0&&NumberTracksJet!=0&&NumberInclusiveJet!=0){ - - float phiEHJ = -666; - float phiTJ = -666; - float phiIJ = -666; - float phiCJ = -666; - - float ptEHJ = -666; - float ptTJ = -666; - float ptIJ = -666; - float ptCJ = -666; - - float etaEHJ = -666; - float etaTJ = -666; - float etaIJ = -666; - float etaCJ = -666; - - int nIncJet=0; - for(int i=0;iFill(nCaloJet); - numb_chgmc->Fill(nChgMCJet); - numb_chgreco->Fill(nChgRECOJet); - numb_inc->Fill(nIncJet); - - if(fabs(EtaIJ[0])Fill((EtaIJ[0]-EtaTJ[0])); - phi_chgreco_res->Fill((PhiIJ[0]-PhiTJ[0])); - } - - if(fabs(EtaIJ[0])Fill((EtaIJ[0]-EtaEHJ[0])); - phi_cal_res->Fill((PhiIJ[0]-PhiEHJ[0])); - } - - for(int i=0;ipiG) - dPhiEHJTJ=2*piG-dPhiEHJTJ; - float delR_chgcalo=sqrt((etaEHJ-etaTJ)*(etaEHJ-etaTJ)+dPhiEHJTJ*dPhiEHJTJ); - dr_chgcalo->Fill(delR_chgcalo,weight); - if(ptEHJ>0) - { - calib_chgcalo->Fill(ptEHJ,ptTJ/ptEHJ,weight); - calib_chgcalo_eta->Fill(etaEHJ,ptTJ/ptEHJ,weight); - calib_chgcalo_phi->Fill(phiEHJ,ptTJ/ptEHJ,weight); - } - } - - if(etaIJ!=-666&&etaTJ!=-666){ - float dPhiIJTJ = fabs(phiIJ-phiTJ); - if(dPhiIJTJ>piG) - dPhiIJTJ=2*piG-dPhiIJTJ; - float delR_chginc=sqrt((etaIJ-etaTJ)*(etaIJ-etaTJ)+dPhiIJTJ*dPhiIJTJ); - dr_chginc->Fill(delR_chginc,weight); - if(ptIJ>0) - { - calib_chginc->Fill(ptIJ,ptTJ/ptIJ,weight); - calib_chginc_eta->Fill(etaIJ,ptTJ/ptIJ,weight); - calib_chginc_phi->Fill(phiIJ,ptTJ/ptIJ,weight); - } - } - - if(etaIJ!=-666&&etaCJ!=-666){ - eta_chgmc_res->Fill((etaIJ-etaCJ)); - phi_chgmc_res->Fill((phiIJ-phiCJ)); - } - - if(etaCJ!=-666&&etaTJ!=-666){ - float dPhiCJTJ = fabs(phiCJ-phiTJ); - if(dPhiCJTJ>piG) - dPhiCJTJ=2*piG-dPhiCJTJ; - float delR_chgmcreco=sqrt((etaCJ-etaTJ)*(etaCJ-etaTJ)+dPhiCJTJ*dPhiCJTJ); - dr_chgmcreco->Fill(delR_chgmcreco,weight); - if(ptTJ>0) - { - calib_chgmcreco->Fill(ptTJ,ptCJ/ptTJ,weight); - calib_chgmcreco_eta->Fill(etaTJ,ptCJ/ptTJ,weight); - calib_chgmcreco_phi->Fill(phiTJ,ptCJ/ptTJ,weight); - } - } - - if(etaEHJ!=-666&&etaIJ!=-666){ - float dPhiIJEHJ = fabs(phiEHJ-phiIJ); - if(dPhiIJEHJ>piG) - dPhiIJEHJ=2*piG-dPhiIJEHJ; - float delR_caloinc=sqrt((etaIJ-etaEHJ)*(etaIJ-etaEHJ)+dPhiIJEHJ*dPhiIJEHJ); - dr_caloinc->Fill(delR_caloinc,weight); - if(ptIJ>0) - { - calib_caloinc->Fill(ptIJ,ptEHJ/ptIJ,weight); - calib_caloinc_eta->Fill(etaIJ,ptEHJ/ptIJ,weight); - calib_caloinc_phi->Fill(phiIJ,ptEHJ/ptIJ,weight); - } - } - - if(etaEHJ!=-666){ - pT_cal->Fill(ptEHJ,weight); - eta_cal->Fill(etaEHJ,weight); - phi_cal->Fill(phiEHJ,weight); - } - - if(etaTJ!=-666){ - pT_chgreco->Fill(ptTJ,weight); - eta_chgreco->Fill(etaTJ,weight); - phi_chgreco->Fill(phiTJ,weight); - } - - if(etaCJ!=-666){ - pT_chgmc->Fill(ptCJ,weight); - eta_chgmc->Fill(etaCJ,weight); - phi_chgmc->Fill(phiCJ,weight); - } - - if(etaIJ!=-666){ - pT_inc->Fill(ptIJ,weight); - eta_inc->Fill(etaIJ,weight); - phi_inc->Fill(phiIJ,weight); - } - - } - -} - - - -void UEAnalysisOnRootple::BeginJob(char* outname) -{ - - hFile = new TFile(outname, "RECREATE" ); - //Charged Jet caharacterization - dr_chgcalo = new TH1F("dr_chgcalo","#Delta R Charged RECO vs Calorimeter",100,0.,10.); - dr_chginc = new TH1F("dr_chginc","#Delta R Charged RECO vs Inclusive",100,0.,10.); - dr_chgmcreco = new TH1F("dr_chgmcreco","#Delta R Charged RECO vs Charged MC",100,0.,10.); - dr_caloinc = new TH1F("dr_caloinc","#Delta R Calorimeter vs Inclusive",100,0.,10.); - numb_cal = new TH1F("numb_cal","Number calo Jet",30,0.,30.); - pT_cal = new TH1F("pT_cal","P_{T} calo",50,0.,50.); - eta_cal = new TH1F("eta_cal","#eta Calo",100,-3.,3.); - eta_cal_res = new TH1F("eta_cal_res","#eta_{calo} - #eta_{inc}",100,-3.,3.); - phi_cal = new TH1F("phi_cal","#phi Calo",50,-3.14,3.14); - phi_cal_res = new TH1F("phi_cal_res","#phi_{calo} - #phi_{inc}",100,-3.,3.); - numb_chgmc = new TH1F("numb_chgmc","Number Charged MC Jet",30,0.,30.); - pT_chgmc = new TH1F("pT_chgmc","P_{T} Charged MC",50,0.,50.); - eta_chgmc = new TH1F("eta_chgmc","#eta Charged MC",100,-3.,3.); - eta_chgmc_res = new TH1F("eta_chgmc_res","#eta_{chg MC} - #eta_{inc}",100,-3.,3.); - phi_chgmc = new TH1F("phi_chgmc","#phi Charged MC",50,-3.14,3.14); - phi_chgmc_res = new TH1F("phi_chgmc_res","#phi_{chg MC} - #phi_{inc}",100,-3.,3.); - numb_chgreco = new TH1F("numb_chgreco","Number Charged RECO Jet",30,0.,30.); - pT_chgreco = new TH1F("pT_chgreco","P_{T} Charged RECO",50,0.,50.); - eta_chgreco = new TH1F("eta_chgreco","#eta Charged RECO",100,-3.,3.); - eta_chgreco_res = new TH1F("eta_chgreco_res","#eta_{chg RECO} - #eta_{inc}",100,-3.,3.); - phi_chgreco = new TH1F("phi_chgreco","#phi Charged RECO",50,-3.14,3.14); - phi_chgreco_res = new TH1F("phi_chgreco_res","#phi_{chg RECO} - #phi_{inc}",100,-3.,3.); - numb_inc = new TH1F("numb_inc","Number Inclusive Jet",30,0.,30.); - pT_inc = new TH1F("pT_inc","P_{T} Inclusive",50,0.,50.); - eta_inc = new TH1F("eta_inc","#eta Inclusive",100,-3.,3.); - phi_inc = new TH1F("phi_inc","#phi Inclusive",50,-3.14,3.14); - calib_chgcalo = new TProfile("calib_chgcalo","#frac{P_{T}^{Chg RECO}}{P_{T}^{Calo}} vs P_{T}^{Calo}",100,0,200,-4,4); - calib_chginc = new TProfile("calib_chginc","#frac{P_{T}^{Chg RECO}}{P_{T}^{Inc}} vs P_{T}^{Inc}",100,0,200,-4,4); - calib_chgmcreco = new TProfile("calib_chgmcreco","#frac{P_{T}^{Chg MC}}{P_{T}^{Chg RECO}} vs P_{T}^{Chg RECO}",100,0,200,-4,4); - calib_caloinc = new TProfile("calib_caloinc","#frac{P_{T}^{Calo}}{P_{T}^{Inc}} vs P_{T}^{Inc}",100,0,200,-4,4); - calib_chgcalo_eta = new TProfile("calib_chgcalo_eta","#frac{P_{T}^{Chg RECO}}{P_{T}^{Calo}} vs #eta^{Calo}",100,-3,3,-4,4); - calib_chginc_eta = new TProfile("calib_chginc_eta","#frac{P_{T}^{Chg RECO}}{P_{T}^{Inc}} vs #eta^{Inc}",100,-3,3,-4,4); - calib_chgmcreco_eta = new TProfile("calib_chgmcreco_eta","#frac{P_{T}^{Chg MC}}{P_{T}^{Chg RECO}} vs #eta^{Chg RECO}",100,-3,3,-4,4); - calib_caloinc_eta = new TProfile("calib_caloinc_eta","#frac{P_{T}^{Calo}}{P_{T}^{Inc}} vs #eta^{Inc}",100,-3,3,-4,4); - calib_chgcalo_phi = new TProfile("calib_chgcalo_phi","#frac{P_{T}^{Chg RECO}}{P_{T}^{Calo}} vs #phi^{Calo}",100,-3,3,-4,4); - calib_chginc_phi = new TProfile("calib_chginc_phi","#frac{P_{T}^{Chg RECO}}{P_{T}^{Inc}} vs #phi^{Inc}",100,-3,3,-4,4); - calib_chgmcreco_phi = new TProfile("calib_chgmcreco_phi","#frac{P_{T}^{Chg MC}}{P_{T}^{Chg RECO}} vs #phi^{Chg RECO}",100,-3,3,-4,4); - calib_caloinc_phi = new TProfile("calib_caloinc_phi","#frac{P_{T}^{Calo}}{P_{T}^{Inc}} vs #phi^{Inc}",100,-3,3,-4,4); - - //Underlying Event analysis - fHistPtDistMC = new TH1F( "HistPtDistMC" , "Pt Spectra", 100, 0., 4. ) ; - fHistEtaDistMC = new TH1F( "HistEtaDistMC" , "#eta Spectra", 100, -5., 5. ) ; - fHistPhiDistMC = new TH1F( "HistPhiDistMC" , "#phi Spectra", 100, -4., 4. ) ; - - pdN_vs_etaMC = new TProfile("dN_vs_etaMC","#delta N vs #eta",100,0.,5.); - pdN_vs_ptMC = new TProfile("dN_vs_ptMC","#delta N vs P_{T}",1000,0.,100.); - - pdN_vs_dphiMC = new TProfile("dN_vs_dphiMC","#frac{dN}{d#phid#eta} vs #delta #phi",100,-180.,180.,0,100); - pdPt_vs_dphiMC = new TProfile("dPt_vs_dphiMC","#frac{dP_{T}^{sum}}{d#phid#eta} vs #delta #phi",100,-180.,180.,0,100); - - // add histo for ue fluctuation - h2d_dN_vs_ptJTransMC = new TH2D("h2d_dN_vs_ptJTransMC","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans''",100,0.,200,100,0.,20.); - - pdN_vs_ptJTransMC = new TProfile("dN_vs_ptJTransMC","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans''",100,0.,200); - pdN_vs_ptJTransMaxMC = new TProfile("dN_vs_ptJTransMaxMC","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Max''",100,0.,200); - pdN_vs_ptJTransMinMC = new TProfile("dN_vs_ptJTransMinMC","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Min''",100,0.,200); - - pdPt_vs_ptJTransMC = new TProfile("dPt_vs_ptJTransMC","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans''",100,0.,200); - pdPt_vs_ptJTransMaxMC = new TProfile("dPt_vs_ptJTransMaxMC","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Max''",100,0.,200); - pdPt_vs_ptJTransMinMC = new TProfile("dPt_vs_ptJTransMinMC","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Min''",100,0.,200); - - pdN_vs_ptJTowardMC = new TProfile("dN_vs_ptJTowardMC","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Toward''",100,0.,200); - pdN_vs_ptJAwayMC = new TProfile("dN_vs_ptJAwayMC","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Away''",100,0.,200); - - pdPt_vs_ptJTowardMC = new TProfile("dPt_vs_ptJTowardMC","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Toward''",100,0.,200); - pdPt_vs_ptJAwayMC = new TProfile("dPt_vs_ptJAwayMC","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Away''",100,0.,200); - - temp1MC = new TH1F("temp1MC","temp",100,-180.,180.); - temp2MC = new TH1F("temp2MC","temp",100,-180.,180.); - temp3MC = new TH1F("temp3MC","temp",100,0.,5.); - temp4MC = new TH1F("temp4MC","temp",1000,0.,100.); - - fHistPtDistRECO = new TH1F( "HistPtDistRECO" , "Pt Spectra", 100, 0., 4. ) ; - fHistEtaDistRECO = new TH1F( "HistEtaDistRECO" , "#eta Spectra", 100, -5., 5. ) ; - fHistPhiDistRECO = new TH1F( "HistPhiDistRECO" , "#phi Spectra", 100, -4., 4. ) ; - - pdN_vs_etaRECO = new TProfile("dN_vs_etaRECO","#delta N vs #eta",100,0.,5.); - pdN_vs_ptRECO = new TProfile("dN_vs_ptRECO","#delta N vs P_{T}",1000,0.,100.); - - pdN_vs_dphiRECO = new TProfile("dN_vs_dphiRECO","#frac{dN}{d#phid#eta} vs #delta #phi",100,-180.,180.,0,100); - pdPt_vs_dphiRECO = new TProfile("dPt_vs_dphiRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs #delta #phi",100,-180.,180.,0,100); - - pdN_vs_ptJTransRECO = new TProfile("dN_vs_ptJTransRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans''",100,0.,200); - pdN_vs_ptJTransMaxRECO = new TProfile("dN_vs_ptJTransMaxRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Max''",100,0.,200); - pdN_vs_ptJTransMinRECO = new TProfile("dN_vs_ptJTransMinRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Min''",100,0.,200); - - pdPt_vs_ptJTransRECO = new TProfile("dPt_vs_ptJTransRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans''",100,0.,200); - pdPt_vs_ptJTransMaxRECO = new TProfile("dPt_vs_ptJTransMaxRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Max''",100,0.,200); - pdPt_vs_ptJTransMinRECO = new TProfile("dPt_vs_ptJTransMinRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Min''",100,0.,200); - - pdN_vs_ptJTowardRECO = new TProfile("dN_vs_ptJTowardRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Toward''",100,0.,200); - pdN_vs_ptJAwayRECO = new TProfile("dN_vs_ptJAwayRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Away''",100,0.,200); - - pdPt_vs_ptJTowardRECO = new TProfile("dPt_vs_ptJTowardRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Toward''",100,0.,200); - pdPt_vs_ptJAwayRECO = new TProfile("dPt_vs_ptJAwayRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Away''",100,0.,200); - - pdN_vs_ptCJTransRECO = new TProfile("dN_vs_ptCJTransRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Trans''",100,0.,200); - pdN_vs_ptCJTransMaxRECO = new TProfile("dN_vs_ptCJTransMaxRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Trans Max''",100,0.,200); - pdN_vs_ptCJTransMinRECO = new TProfile("dN_vs_ptCJTransMinRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Trans Min''",100,0.,200); - - pdPt_vs_ptCJTransRECO = new TProfile("dPt_vs_ptCJTransRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Trans''",100,0.,200); - pdPt_vs_ptCJTransMaxRECO = new TProfile("dPt_vs_ptCJTransMaxRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Trans Max''",100,0.,200); - pdPt_vs_ptCJTransMinRECO = new TProfile("dPt_vs_ptCJTransMinRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Trans Min''",100,0.,200); - - pdN_vs_ptCJTowardRECO = new TProfile("dN_vs_ptCJTowardRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Toward''",100,0.,200); - pdN_vs_ptCJAwayRECO = new TProfile("dN_vs_ptCJAwayRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Away''",100,0.,200); - - pdPt_vs_ptCJTowardRECO = new TProfile("dPt_vs_ptCJTowardRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Toward''",100,0.,200); - pdPt_vs_ptCJAwayRECO = new TProfile("dPt_vs_ptCJAwayRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Away''",100,0.,200); - - temp1RECO = new TH1F("temp1RECO","temp",100,-180.,180.); - temp2RECO = new TH1F("temp2RECO","temp",100,-180.,180.); - temp3RECO = new TH1F("temp3RECO","temp",100,0.,5.); - temp4RECO = new TH1F("temp4RECO","temp",1000,0.,100.); - - fNumbMPIMC = new TH1D("NumbMPIMC","Number of MPI",20,0.5,20.5); - fdEtaLeadingPairMC = new TH1D("dEtaLeadingPairMC","#Delta #eta Jet in the pair",100,-5,5); - fdPhiLeadingPairMC = new TH1D("dPhiLeadingPairMC","#Delta #phi Jet in the pair",40,120,200); - fptRatioLeadingPairMC = new TH1D("ptRatioLeadingPairMC","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet}",100,0,1.2); - pPtRatio_vs_PtJleadMC = new TProfile("PtRation_vs_PtJleadMC","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet} vs P_{T}^{1^{o} Jet}", 100,0.,50.); - pPtRatio_vs_EtaJleadMC = new TProfile("PtRation_vs_EtaJleadMC","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet} vs #eta^{1^{o} Jet}", 100,0.,5.); - pPtRatio_vs_PhiJleadMC = new TProfile("PtRation_vs_PhiJleadMC","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet} vs #phi^{1^{o} Jet}", 101,-4.,4.); - - fNumbMPIRECO = new TH1D("NumbMPIRECO","Number of MPI",20,0.5,20.5); - fdEtaLeadingPairRECO = new TH1D("dEtaLeadingPairRECO","#Delta #eta Jet in the pair",100,-5,5); - fdPhiLeadingPairRECO = new TH1D("dPhiLeadingPairRECO","#Delta #phi Jet in the pair",40,120,200); - fptRatioLeadingPairRECO = new TH1D("ptRatioLeadingPairRECO","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet}",100,0,1.2); - pPtRatio_vs_PtJleadRECO = new TProfile("PtRation_vs_PtJleadRECO","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet} vs P_{T}^{1^{o} Jet}", 100,0.,50.); - pPtRatio_vs_EtaJleadRECO = new TProfile("PtRation_vs_EtaJleadRECO","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet} vs #eta^{1^{o} Jet}", 100,0.,5.); - pPtRatio_vs_PhiJleadRECO = new TProfile("PtRation_vs_PhiJleadRECO","P_{T}^{2^{o} Jet}/P_{T}^{1^{o} Jet} vs #phi^{1^{o} Jet}", 101,-4.,4.); - - piG = acos(-1.); - rangePhi = acos(-1.)/180*50; -} - -void UEAnalysisOnRootple::EndJob() -{ - hFile->Write(); - hFile->Close(); -} - -Float_t UEAnalysisOnRootple::CalibrationPt(Float_t ptReco,std::string tkpt){ - if(tkpt=="900"){ - Float_t corr = 0.1122*exp(-(0.2251*ptReco))+1.086-0.0005408*ptReco; - return corr; - } - if(tkpt=="500"){ - Float_t corr = 0.1389*exp(-(0.2364*ptReco))+1.048-0.0001663*ptReco; - return corr; - } -} - -Float_t UEAnalysisOnRootple::CorrectionPtTrans(Float_t ptReco,std::string tkpt){ - if(tkpt=="900"){ - // Float_t corr = 2.80452*exp(-(0.278432*ptReco))+1.30988-0.000869106*ptReco; - Float_t corr = 1.214*exp(-(0.9637*ptReco))+1.204-0.0003461*ptReco; - return corr; - } - if(tkpt=="500"){ - // Float_t corr = 1.18227*exp(-(0.184019*ptReco))+1.21637-0.000416840*ptReco; - Float_t corr = 0.4174*exp(-(0.537*ptReco))+1.136-0.0001166*ptReco; - return corr; - } -} - -Float_t UEAnalysisOnRootple::CorrectionPtToward(Float_t ptReco,std::string tkpt){ - if(tkpt=="900"){ - /* - Float_t arg = (ptReco-(-248.6))/-355.7; - Float_t corr = 1.396*exp(-(0.281*ptReco))-28.13+0.06122*ptReco+37.61*exp(-0.5*arg*arg); - */ - Float_t corr = 0.1037*exp(-(0.1382*ptReco))+1.117-0.0006322*ptReco; - return corr; - } - if(tkpt=="500"){ - /* - Float_t arg = (ptReco-(-73.4))/-35.53; - Float_t corr = 9.206*exp(-(0.07078*ptReco))+1.196+0.0008953*ptReco-69.16*exp(-0.5*arg*arg); - */ - Float_t corr = 0.166*exp(-(0.1989*ptReco))+1.073-0.000245*ptReco; - return corr; - } -} - -Float_t UEAnalysisOnRootple::CorrectionPtAway(Float_t ptReco,std::string tkpt){ - if(tkpt=="900"){ - /* - Float_t arg = (ptReco-(-1015))/-1235; - Float_t corr = 3.635*exp(-(0.4059*ptReco))-53.26+0.03661*ptReco+76.71*exp(-0.5*arg*arg); - */ - Float_t corr = 0.2707*exp(-(0.2685*ptReco))+1.169-0.000411*ptReco; - return corr; - } - if(tkpt=="500"){ - /* - Float_t arg = (ptReco-(-35.38))/-148.1; - Float_t corr = 1.553*exp(-(0.2515*ptReco))-0.8953+0.009215*ptReco+2.178*exp(-0.5*arg*arg); - */ - Float_t corr = 0.2835*exp(-(0.2665*ptReco))+1.1-0.0001659*ptReco; - return corr; - } -} - -Float_t UEAnalysisOnRootple::CorrectionNTrans(Float_t ptReco,std::string tkpt){ - if(tkpt=="900"){ - // Float_t corr = 2.41052*exp(-(0.268028*ptReco))+1.26675-0.000509399*ptReco; - Float_t corr = 1.101*exp(-(0.9939*ptReco))+1.198-0.0001467*ptReco; - return corr; - } - if(tkpt=="500"){ - // Float_t corr = 0.970339*exp(-(0.178862*ptReco))+1.19788-0.000293722*ptReco; - Float_t corr = 0.3322*exp(-(0.445*ptReco))+1.146+0.00002659*ptReco; - return corr; - } -} - -Float_t UEAnalysisOnRootple::CorrectionNToward(Float_t ptReco,std::string tkpt){ - if(tkpt=="900"){ - /* - Float_t arg = (ptReco-(-701.9))/-763.1; - Float_t corr = 1.366*exp(-(0.288*ptReco))-29.98+0.03649*ptReco+47.78*exp(-0.5*arg*arg); - */ - Float_t corr = 0.9264*exp(-(1.053*ptReco))+1.16-0.0005176*ptReco; - return corr; - } - if(tkpt=="500"){ - /* - Float_t arg = (ptReco-6.429)/-7.393; - Float_t corr = 1.155*exp(-(0.1146*ptReco))+1.208-0.0005325*ptReco-0.312*exp(-0.5*arg*arg); - */ - Float_t corr = 0.2066*exp(-(0.3254*ptReco))+1.109-0.00006666*ptReco; - return corr; - } -} - -Float_t UEAnalysisOnRootple::CorrectionNAway(Float_t ptReco,std::string tkpt){ - if(tkpt=="900"){ - /* - Float_t arg = (ptReco-(-1512))/-1517; - Float_t corr = 3.094*exp(-(0.3886*ptReco))-44.83+0.02965*ptReco+75.99*exp(-0.5*arg*arg); - */ - Float_t corr = 0.2663*exp(-(0.342*ptReco))+1.178-0.0004006*ptReco; - return corr; - } - if(tkpt=="500"){ - /* - Float_t arg = (ptReco-(-170.4))/-281.4; - Float_t corr = 1.232*exp(-(0.2355*ptReco))-7.733+0.02271*ptReco+10.74*exp(-0.5*arg*arg); - */ - Float_t corr = 0.316*exp(-(0.3741*ptReco))+1.136-0.0002407*ptReco; - return corr; - } -} diff --git a/QCDAnalysis/UEAnalysis/root/UEAnalysisOnRootple.h b/QCDAnalysis/UEAnalysis/root/UEAnalysisOnRootple.h deleted file mode 100644 index e8a19e999fa4e..0000000000000 --- a/QCDAnalysis/UEAnalysis/root/UEAnalysisOnRootple.h +++ /dev/null @@ -1,389 +0,0 @@ -////////////////////////////////////////////////////////// -// This class has been automatically generated on -// Tue Sep 11 11:54:39 2007 by ROOT version 5.14/00b -// from TTree UEAnalysisTree/UE Analysis Tree -// found on file: MB_Pt05/UnderlyingEvent_RootFile_Result.root -////////////////////////////////////////////////////////// - -#ifndef UEAnalysisOnRootple_h -#define UEAnalysisOnRootple_h - -#include -#include -#include -#include -#include -#include -#include -#include - -// -#include -#include -// - -class UEAnalysisOnRootple { -public : - - // declare file handle here - TFile *f; - - TTree *fChain; //!pointer to the analyzed TTree or TChain - Int_t fCurrent; //!current Tree number in a TChain - - // Declaration of leave types - Int_t EventKind; - Int_t NumberMCParticles; - Float_t MomentumMC[1000]; //[NumberMCParticles] - Float_t TransverseMomentumMC[1000]; //[NumberMCParticles] - Float_t EtaMC[1000]; //[NumberMCParticles] - Float_t PhiMC[1000]; //[NumberMCParticles] - Int_t NumberTracks; - Float_t MomentumTK[1000]; //[NumberTracks] - Float_t TrasverseMomentumTK[1000]; //[NumberTracks] - Float_t EtaTK[1000]; //[NumberTracks] - Float_t PhiTK[1000]; //[NumberTracks] - Int_t NumberInclusiveJet; - Float_t MomentumIJ[1000]; //[NumberInclusiveJet] - Float_t TrasverseMomentumIJ[1000]; //[NumberInclusiveJet] - Float_t EtaIJ[1000]; //[NumberInclusiveJet] - Float_t PhiIJ[1000]; //[NumberInclusiveJet] - Int_t NumberChargedJet; - Float_t MomentumCJ[1000]; //[NumberChargedJet] - Float_t TrasverseMomentumCJ[1000]; //[NumberChargedJet] - Float_t EtaCJ[1000]; //[NumberChargedJet] - Float_t PhiCJ[1000]; //[NumberChargedJet] - Int_t NumberTracksJet; - Float_t MomentumTJ[1000]; //[NumberTracksJet] - Float_t TrasverseMomentumTJ[1000]; //[NumberTracksJet] - Float_t EtaTJ[1000]; //[NumberTracksJet] - Float_t PhiTJ[1000]; //[NumberTracksJet] - Int_t NumberCaloJet; - Float_t MomentumEHJ[1000]; //[NumberCaloJet] - Float_t TrasverseMomentumEHJ[1000]; //[NumberCaloJet] - Float_t EtaEHJ[1000]; //[NumberCaloJet] - Float_t PhiEHJ[1000]; //[NumberCaloJet] - - // - TClonesArray *acceptedTriggers; - // - - // List of branches - TBranch *b_EventKind; //! - TBranch *b_NumberMCParticles; //! - TBranch *b_MomentumMC; //! - TBranch *b_TransverseMomentumMC; //! - TBranch *b_EtaMC; //! - TBranch *b_PhiMC; //! - TBranch *b_NumberTracks; //! - TBranch *b_MomentumTK; //! - TBranch *b_TrasverseMomentumTK; //! - TBranch *b_EtaTK; //! - TBranch *b_PhiTK; //! - TBranch *b_NumberInclusiveJet; //! - TBranch *b_MomentumIJ; //! - TBranch *b_TrasverseMomentumIJ; //! - TBranch *b_EtaIJ; //! - TBranch *b_PhiIJ; //! - TBranch *b_NumberChargedJet; //! - TBranch *b_MomentumCJ; //! - TBranch *b_TrasverseMomentumCJ; //! - TBranch *b_EtaCJ; //! - TBranch *b_PhiCJ; //! - TBranch *b_NumberTracksJet; //! - TBranch *b_MomentumTJ; //! - TBranch *b_TrasverseMomentumTJ; //! - TBranch *b_EtaTJ; //! - TBranch *b_PhiTJ; //! - TBranch *b_NumberCaloJet; //! - TBranch *b_MomentumEHJ; //! - TBranch *b_TrasverseMomentumEHJ; //! - TBranch *b_EtaEHJ; //! - TBranch *b_PhiEHJ; //! - - // - TBranch *b_acceptedTriggers; - // - - - //Charged Jet caharacterization - TH1F* dr_chgcalo; - TH1F* dr_chginc; - TH1F* dr_chgmcreco; - TH1F* dr_caloinc; - TH1F* numb_cal; - TH1F* pT_cal; - TH1F* eta_cal; - TH1F* eta_cal_res; - TH1F* phi_cal; - TH1F* phi_cal_res; - TH1F* numb_chgmc; - TH1F* pT_chgmc; - TH1F* eta_chgmc; - TH1F* eta_chgmc_res; - TH1F* phi_chgmc; - TH1F* phi_chgmc_res; - TH1F* numb_chgreco; - TH1F* pT_chgreco; - TH1F* eta_chgreco; - TH1F* eta_chgreco_res; - TH1F* phi_chgreco; - TH1F* phi_chgreco_res; - TH1F* numb_inc; - TH1F* pT_inc; - TH1F* eta_inc; - TH1F* phi_inc; - TProfile* calib_chgcalo; - TProfile* calib_chginc; - TProfile* calib_chgmcreco; - TProfile* calib_caloinc; - TProfile* calib_chgcalo_eta; - TProfile* calib_chginc_eta; - TProfile* calib_chgmcreco_eta; - TProfile* calib_caloinc_eta; - TProfile* calib_chgcalo_phi; - TProfile* calib_chginc_phi; - TProfile* calib_chgmcreco_phi; - TProfile* calib_caloinc_phi; - - //Underlying Event analysis - TH1F* fHistPtDistMC; - TH1F* fHistEtaDistMC; - TH1F* fHistPhiDistMC; - - TProfile* pdN_vs_etaMC; - TProfile* pdN_vs_ptMC; - - TProfile* pdN_vs_dphiMC; - TProfile* pdPt_vs_dphiMC; - - // add histo on fluctuation in UE - TH2D* h2d_dN_vs_ptJTransMC; - - - TProfile* pdN_vs_ptJTransMC; - TProfile* pdN_vs_ptJTransMaxMC; - TProfile* pdN_vs_ptJTransMinMC; - TProfile* pdPt_vs_ptJTransMC; - TProfile* pdPt_vs_ptJTransMaxMC; - TProfile* pdPt_vs_ptJTransMinMC; - TProfile* pdN_vs_ptJTowardMC; - TProfile* pdN_vs_ptJAwayMC; - TProfile* pdPt_vs_ptJTowardMC; - TProfile* pdPt_vs_ptJAwayMC; - - TH1F* temp1MC; - TH1F* temp2MC; - TH1F* temp3MC; - TH1F* temp4MC; - - TH1F* fHistPtDistRECO; - TH1F* fHistEtaDistRECO; - TH1F* fHistPhiDistRECO; - - TProfile* pdN_vs_etaRECO; - TProfile* pdN_vs_ptRECO; - - TProfile* pdN_vs_dphiRECO; - TProfile* pdPt_vs_dphiRECO; - - TProfile* pdN_vs_ptJTransRECO; - TProfile* pdN_vs_ptJTransMaxRECO; - TProfile* pdN_vs_ptJTransMinRECO; - TProfile* pdPt_vs_ptJTransRECO; - TProfile* pdPt_vs_ptJTransMaxRECO; - TProfile* pdPt_vs_ptJTransMinRECO; - TProfile* pdN_vs_ptJTowardRECO; - TProfile* pdN_vs_ptJAwayRECO; - TProfile* pdPt_vs_ptJTowardRECO; - TProfile* pdPt_vs_ptJAwayRECO; - - TProfile* pdN_vs_ptCJTransRECO; - TProfile* pdN_vs_ptCJTransMaxRECO; - TProfile* pdN_vs_ptCJTransMinRECO; - TProfile* pdPt_vs_ptCJTransRECO; - TProfile* pdPt_vs_ptCJTransMaxRECO; - TProfile* pdPt_vs_ptCJTransMinRECO; - TProfile* pdN_vs_ptCJTowardRECO; - TProfile* pdN_vs_ptCJAwayRECO; - TProfile* pdPt_vs_ptCJTowardRECO; - TProfile* pdPt_vs_ptCJAwayRECO; - - TH1F* temp1RECO; - TH1F* temp2RECO; - TH1F* temp3RECO; - TH1F* temp4RECO; - - TH1D* fNumbMPIMC; - TH1D* fdEtaLeadingPairMC; - TH1D* fdPhiLeadingPairMC; - TH1D* fptRatioLeadingPairMC; - TProfile* pPtRatio_vs_PtJleadMC; - TProfile* pPtRatio_vs_EtaJleadMC; - TProfile* pPtRatio_vs_PhiJleadMC; - - TH1D* fNumbMPIRECO; - TH1D* fdEtaLeadingPairRECO; - TH1D* fdPhiLeadingPairRECO; - TH1D* fptRatioLeadingPairRECO; - TProfile* pPtRatio_vs_PtJleadRECO; - TProfile* pPtRatio_vs_EtaJleadRECO; - TProfile* pPtRatio_vs_PhiJleadRECO; - - - - Float_t etaRegion; - Float_t piG; - Float_t rangePhi; - Float_t ptThreshold; - - UEAnalysisOnRootple(); - virtual ~UEAnalysisOnRootple(); - virtual Int_t Cut(Long64_t entry); - virtual Int_t GetEntry(Long64_t entry); - virtual Long64_t LoadTree(Long64_t entry); - virtual void MultiAnalysis(char* filelist,char* outname,Float_t weight[13],Float_t eta,Float_t triggerPt,std::string type,std::string trigger,std::string tkpt,Float_t ptCut); - virtual void Init(TTree *tree); - virtual void BeginJob(char* outname); - virtual void EndJob(); - virtual void Loop(Float_t we,Float_t triggerPt,std::string type,std::string trigger,std::string tkpt); - virtual Bool_t Notify(); - virtual void Show(Long64_t entry = -1); - virtual void UEAnalysisMC(Float_t weight,std::string tkpt); - virtual void UEAnalysisRECO(Float_t weight,std::string tkpt); - virtual void JetCalibAnalysis(Float_t weight,std::string tkpt); - virtual void MPIAnalysisMC(Float_t weight,std::string tkpt); - virtual void MPIAnalysisRECO(Float_t weight,std::string tkpt); - Float_t CalibrationPt(Float_t ptReco,std::string tkpt); - Float_t CorrectionPtTrans(Float_t ptReco,std::string tkpt); - Float_t CorrectionPtToward(Float_t ptReco,std::string tkpt); - Float_t CorrectionPtAway(Float_t ptReco,std::string tkpt); - Float_t CorrectionNTrans(Float_t ptReco,std::string tkpt); - Float_t CorrectionNToward(Float_t ptReco,std::string tkpt); - Float_t CorrectionNAway(Float_t ptReco,std::string tkpt); - - TFile* hFile; - -}; - -#endif - -#ifdef UEAnalysisOnRootple_cxx - -UEAnalysisOnRootple::UEAnalysisOnRootple() -{ - std::cout << "UEAnalysisOnRootple constructor " <GetCurrentFile(); -} - -Int_t UEAnalysisOnRootple::GetEntry(Long64_t entry) -{ -// Read contents of entry. - if (!fChain) return 0; - return fChain->GetEntry(entry); -} -Long64_t UEAnalysisOnRootple::LoadTree(Long64_t entry) -{ -// Set the environment to read one entry - if (!fChain) return -5; - Long64_t centry = fChain->LoadTree(entry); - if (centry < 0) return centry; - if (!fChain->InheritsFrom(TChain::Class())) return centry; - TChain *chain = (TChain*)fChain; - if (chain->GetTreeNumber() != fCurrent) { - fCurrent = chain->GetTreeNumber(); - Notify(); - } - return centry; -} - -void UEAnalysisOnRootple::Init(TTree *tree) -{ - // The Init() function is called when the selector needs to initialize - // a new tree or chain. Typically here the branch addresses and branch - // pointers of the tree will be set. - // It is normaly not necessary to make changes to the generated - // code, but the routine can be extended by the user if needed. - // Init() will be called many times when running on PROOF - // (once per file to be processed). - - // allocate space for file handle here - f = new TFile; - - // Set branch addresses and branch pointers - if (!tree) return; - fChain = tree; - fCurrent = -1; - fChain->SetMakeClass(1); - - // - acceptedTriggers = 0; - fChain->SetBranchAddress("acceptedTriggers", &acceptedTriggers, &b_acceptedTriggers); - // - - fChain->SetBranchAddress("EventKind", &EventKind, &b_EventKind); - fChain->SetBranchAddress("NumberMCParticles", &NumberMCParticles, &b_NumberMCParticles); - fChain->SetBranchAddress("MomentumMC", MomentumMC, &b_MomentumMC); - fChain->SetBranchAddress("TransverseMomentumMC", TransverseMomentumMC, &b_TransverseMomentumMC); - fChain->SetBranchAddress("EtaMC", EtaMC, &b_EtaMC); - fChain->SetBranchAddress("PhiMC", PhiMC, &b_PhiMC); - fChain->SetBranchAddress("NumberTracks", &NumberTracks, &b_NumberTracks); - fChain->SetBranchAddress("MomentumTK", MomentumTK, &b_MomentumTK); - fChain->SetBranchAddress("TrasverseMomentumTK", TrasverseMomentumTK, &b_TrasverseMomentumTK); - fChain->SetBranchAddress("EtaTK", EtaTK, &b_EtaTK); - fChain->SetBranchAddress("PhiTK", PhiTK, &b_PhiTK); - fChain->SetBranchAddress("NumberInclusiveJet", &NumberInclusiveJet, &b_NumberInclusiveJet); - fChain->SetBranchAddress("MomentumIJ", MomentumIJ, &b_MomentumIJ); - fChain->SetBranchAddress("TrasverseMomentumIJ", TrasverseMomentumIJ, &b_TrasverseMomentumIJ); - fChain->SetBranchAddress("EtaIJ", EtaIJ, &b_EtaIJ); - fChain->SetBranchAddress("PhiIJ", PhiIJ, &b_PhiIJ); - fChain->SetBranchAddress("NumberChargedJet", &NumberChargedJet, &b_NumberChargedJet); - fChain->SetBranchAddress("MomentumCJ", MomentumCJ, &b_MomentumCJ); - fChain->SetBranchAddress("TrasverseMomentumCJ", TrasverseMomentumCJ, &b_TrasverseMomentumCJ); - fChain->SetBranchAddress("EtaCJ", EtaCJ, &b_EtaCJ); - fChain->SetBranchAddress("PhiCJ", PhiCJ, &b_PhiCJ); - fChain->SetBranchAddress("NumberTracksJet", &NumberTracksJet, &b_NumberTracksJet); - fChain->SetBranchAddress("MomentumTJ", MomentumTJ, &b_MomentumTJ); - fChain->SetBranchAddress("TrasverseMomentumTJ", TrasverseMomentumTJ, &b_TrasverseMomentumTJ); - fChain->SetBranchAddress("EtaTJ", EtaTJ, &b_EtaTJ); - fChain->SetBranchAddress("PhiTJ", PhiTJ, &b_PhiTJ); - fChain->SetBranchAddress("NumberCaloJet", &NumberCaloJet, &b_NumberCaloJet); - fChain->SetBranchAddress("MomentumEHJ", MomentumEHJ, &b_MomentumEHJ); - fChain->SetBranchAddress("TrasverseMomentumEHJ", TrasverseMomentumEHJ, &b_TrasverseMomentumEHJ); - fChain->SetBranchAddress("EtaEHJ", EtaEHJ, &b_EtaEHJ); - fChain->SetBranchAddress("PhiEHJ", PhiEHJ, &b_PhiEHJ); - Notify(); -} - -Bool_t UEAnalysisOnRootple::Notify() -{ - // The Notify() function is called when a new file is opened. This - // can be either for a new TTree in a TChain or when when a new TTree - // is started when using PROOF. It is normaly not necessary to make changes - // to the generated code, but the routine can be extended by the - // user if needed. The return value is currently not used. - - return kTRUE; -} - -void UEAnalysisOnRootple::Show(Long64_t entry) -{ -// Print contents of entry. -// If entry is not specified, print current entry - if (!fChain) return; - fChain->Show(entry); -} - -Int_t UEAnalysisOnRootple::Cut(Long64_t entry) -{ -// This function may be called from Loop. -// returns 1 if entry is accepted. -// returns -1 otherwise. - return 1; -} -#endif diff --git a/QCDAnalysis/UEAnalysis/root/UEAnalysisSelectorRootple.C b/QCDAnalysis/UEAnalysis/root/UEAnalysisSelectorRootple.C deleted file mode 100644 index e0bc7f0023926..0000000000000 --- a/QCDAnalysis/UEAnalysis/root/UEAnalysisSelectorRootple.C +++ /dev/null @@ -1,93 +0,0 @@ -#define UEAnalysisSelectorRootple_cxx -// The class definition in UEAnalysisSelectorRootple.h has been generated automatically -// by the ROOT utility TTree::MakeSelector(). This class is derived -// from the ROOT class TSelector. For more information on the TSelector -// framework see $ROOTSYS/README/README.SELECTOR or the ROOT User Manual. - -// The following methods are defined in this file: -// Begin(): called every time a loop on the tree starts, -// a convenient place to create your histograms. -// SlaveBegin(): called after Begin(), when on PROOF called only on the -// slave servers. -// Process(): called for each event, in this function you decide what -// to read and fill your histograms. -// SlaveTerminate: called at the end of the loop on the tree, when on PROOF -// called only on the slave servers. -// Terminate(): called at the end of the loop on the tree, -// a convenient place to draw/fit your histograms. -// -// To use this file, try the following session on your Tree T: -// -// Root > T->Process("UEAnalysisSelectorRootple.C") -// Root > T->Process("UEAnalysisSelectorRootple.C","some options") -// Root > T->Process("UEAnalysisSelectorRootple.C+") -// - -#include "UEAnalysisSelectorRootple.h" -#include -#include - - -void UEAnalysisSelectorRootple::Begin(TTree * /*tree*/) -{ - // The Begin() function is called at the start of the query. - // When running with PROOF Begin() is only called on the client. - // The tree argument is deprecated (on PROOF 0 is passed). - - TString option = GetOption(); - - std::cout << "UEAnalysisSelectorRootple Begin " < -#include -#include -#include - - -#include "UEAnalysisUE.h" -#include "UEAnalysisJets.h" -#include "UEAnalysisMPI.h" - -// -#include -#include -// - -class UEAnalysisSelectorRootple : public TSelector { -public : - TTree *fChain; //!pointer to the analyzed TTree or TChain - - // Declaration of leaf types - Int_t EventKind; - TClonesArray *MonteCarlo; - TClonesArray *Track; - TClonesArray *InclusiveJet; - TClonesArray *ChargedJet; - TClonesArray *TracksJet; - TClonesArray *CalorimeterJet; - TClonesArray *acceptedTriggers; - - // List of branches - TBranch *b_EventKind; //! - TBranch *b_MonteCarlo; //! - TBranch *b_Track; //! - TBranch *b_InclusiveJet; //! - TBranch *b_ChargedJet; //! - TBranch *b_TracksJet; //! - TBranch *b_CalorimeterJet; //! - TBranch *b_acceptedTriggers; //! - - UEAnalysisSelectorRootple(TTree * /*tree*/ =0) { } - virtual ~UEAnalysisSelectorRootple() { } - virtual Int_t Version() const { return 2; } - virtual void Begin(TTree *tree); - virtual void SlaveBegin(TTree *tree); - virtual void Init(TTree *tree); - virtual Bool_t Notify(); - virtual Bool_t Process(Long64_t entry); - virtual Int_t GetEntry(Long64_t entry, Int_t getall = 0) { return fChain ? fChain->GetTree()->GetEntry(entry, getall) : 0; } - virtual void SetOption(const char *option) { fOption = option; } - virtual void SetObject(TObject *obj) { fObject = obj; } - virtual void SetInputList(TList *input) { fInput = input; } - virtual TList *GetOutputList() const { return fOutput; } - virtual void SlaveTerminate(); - virtual void Terminate(); - - ClassDef(UEAnalysisSelectorRootple,0); - - TFile* hFile; - - float etaRegion; - float ptThreshold; - - UEAnalysisUE * ue; - UEAnalysisJets* jets; - UEAnalysisMPI* mpi; - -}; - -#endif - -#ifdef UEAnalysisSelectorRootple_cxx -void UEAnalysisSelectorRootple::Init(TTree *tree) -{ - // The Init() function is called when the selector needs to initialize - // a new tree or chain. Typically here the branch addresses and branch - // pointers of the tree will be set. - // It is normally not necessary to make changes to the generated - // code, but the routine can be extended by the user if needed. - // Init() will be called many times when running on PROOF - // (once per file to be processed). - - // Set object pointer - MonteCarlo = 0; - Track = 0; - InclusiveJet = 0; - ChargedJet = 0; - TracksJet = 0; - CalorimeterJet = 0; - acceptedTriggers = 0; - // Set branch addresses and branch pointers - if (!tree) return; - fChain = tree; - fChain->SetMakeClass(1); - - fChain->SetBranchAddress("EventKind", &EventKind, &b_EventKind); - fChain->SetBranchAddress("MonteCarlo", &MonteCarlo, &b_MonteCarlo); - fChain->SetBranchAddress("Track", &Track, &b_Track); - fChain->SetBranchAddress("InclusiveJet", &InclusiveJet, &b_InclusiveJet); - fChain->SetBranchAddress("ChargedJet", &ChargedJet, &b_ChargedJet); - fChain->SetBranchAddress("TracksJet", &TracksJet, &b_TracksJet); - fChain->SetBranchAddress("CalorimeterJet", &CalorimeterJet, &b_CalorimeterJet); - fChain->SetBranchAddress("acceptedTriggers", &acceptedTriggers, &b_acceptedTriggers); - -} - -Bool_t UEAnalysisSelectorRootple::Notify() -{ - // The Notify() function is called when a new file is opened. This - // can be either for a new TTree in a TChain or when when a new TTree - // is started when using PROOF. It is normally not necessary to make changes - // to the generated code, but the routine can be extended by the - // user if needed. The return value is currently not used. - - return kTRUE; -} - -#endif // #ifdef UEAnalysisSelectorRootple_cxx diff --git a/QCDAnalysis/UEAnalysis/root/UEAnalysisUE.C b/QCDAnalysis/UEAnalysis/root/UEAnalysisUE.C deleted file mode 100644 index 62a47acd70d85..0000000000000 --- a/QCDAnalysis/UEAnalysis/root/UEAnalysisUE.C +++ /dev/null @@ -1,542 +0,0 @@ -#include "UEAnalysisUE.h" -#include -#include - -UEAnalysisUE::UEAnalysisUE() -{ - std::cout << "UEAnalysisUE constructor " <cd(); - - //Underlying Event analysis - fHistPtDistMC = new TH1F( "HistPtDistMC" , "Pt Spectra", 100, 0., 4. ) ; - fHistEtaDistMC = new TH1F( "HistEtaDistMC" , "#eta Spectra", 100, -5., 5. ) ; - fHistPhiDistMC = new TH1F( "HistPhiDistMC" , "#phi Spectra", 100, -4., 4. ) ; - - pdN_vs_etaMC = new TProfile("dN_vs_etaMC","#delta N vs #eta",100,0.,5.); - pdN_vs_ptMC = new TProfile("dN_vs_ptMC","#delta N vs P_{T}",1000,0.,100.); - pdN_vs_dphiMC = new TProfile("dN_vs_dphiMC","#frac{dN}{d#phid#eta} vs #delta #phi",100,-180.,180.,0,100); - pdPt_vs_dphiMC = new TProfile("dPt_vs_dphiMC","#frac{dP_{T}^{sum}}{d#phid#eta} vs #delta #phi",100,-180.,180.,0,100); - - // add histo for ue fluctuation - h2d_dN_vs_ptJTransMC = new TH2D("h2d_dN_vs_ptJTransMC","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans''",100,0.,200,100,0.,20.); - - pdN_vs_ptJTransMC = new TProfile("dN_vs_ptJTransMC","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans''",100,0.,200); - pdN_vs_ptJTransMaxMC = new TProfile("dN_vs_ptJTransMaxMC","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Max''",100,0.,200); - pdN_vs_ptJTransMinMC = new TProfile("dN_vs_ptJTransMinMC","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Min''",100,0.,200); - - pdPt_vs_ptJTransMC = new TProfile("dPt_vs_ptJTransMC","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans''",100,0.,200); - pdPt_vs_ptJTransMaxMC = new TProfile("dPt_vs_ptJTransMaxMC","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Max''",100,0.,200); - pdPt_vs_ptJTransMinMC = new TProfile("dPt_vs_ptJTransMinMC","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Min''",100,0.,200); - - pdN_vs_ptJTowardMC = new TProfile("dN_vs_ptJTowardMC","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Toward''",100,0.,200); - pdN_vs_ptJAwayMC = new TProfile("dN_vs_ptJAwayMC","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Away''",100,0.,200); - - pdPt_vs_ptJTowardMC = new TProfile("dPt_vs_ptJTowardMC","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Toward''",100,0.,200); - pdPt_vs_ptJAwayMC = new TProfile("dPt_vs_ptJAwayMC","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Away''",100,0.,200); - - temp1MC = new TH1F("temp1MC","temp",100,-180.,180.); - temp2MC = new TH1F("temp2MC","temp",100,-180.,180.); - temp3MC = new TH1F("temp3MC","temp",100,0.,5.); - temp4MC = new TH1F("temp4MC","temp",1000,0.,100.); - - fHistPtDistRECO = new TH1F( "HistPtDistRECO" , "Pt Spectra", 100, 0., 4. ) ; - fHistEtaDistRECO = new TH1F( "HistEtaDistRECO" , "#eta Spectra", 100, -5., 5. ) ; - fHistPhiDistRECO = new TH1F( "HistPhiDistRECO" , "#phi Spectra", 100, -4., 4. ) ; - - pdN_vs_etaRECO = new TProfile("dN_vs_etaRECO","#delta N vs #eta",100,0.,5.); - pdN_vs_ptRECO = new TProfile("dN_vs_ptRECO","#delta N vs P_{T}",1000,0.,100.); - - pdN_vs_dphiRECO = new TProfile("dN_vs_dphiRECO","#frac{dN}{d#phid#eta} vs #delta #phi",100,-180.,180.,0,100); - pdPt_vs_dphiRECO = new TProfile("dPt_vs_dphiRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs #delta #phi",100,-180.,180.,0,100); - - pdN_vs_ptJTransRECO = new TProfile("dN_vs_ptJTransRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans''",100,0.,200); - pdN_vs_ptJTransMaxRECO = new TProfile("dN_vs_ptJTransMaxRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Max''",100,0.,200); - pdN_vs_ptJTransMinRECO = new TProfile("dN_vs_ptJTransMinRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Min''",100,0.,200); - - pdPt_vs_ptJTransRECO = new TProfile("dPt_vs_ptJTransRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans''",100,0.,200); - pdPt_vs_ptJTransMaxRECO = new TProfile("dPt_vs_ptJTransMaxRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Max''",100,0.,200); - pdPt_vs_ptJTransMinRECO = new TProfile("dPt_vs_ptJTransMinRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Trans Min''",100,0.,200); - - pdN_vs_ptJTowardRECO = new TProfile("dN_vs_ptJTowardRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Toward''",100,0.,200); - pdN_vs_ptJAwayRECO = new TProfile("dN_vs_ptJAwayRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet} ''Away''",100,0.,200); - - pdPt_vs_ptJTowardRECO = new TProfile("dPt_vs_ptJTowardRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Toward''",100,0.,200); - pdPt_vs_ptJAwayRECO = new TProfile("dPt_vs_ptJAwayRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet} ''Away''",100,0.,200); - - pdN_vs_ptCJTransRECO = new TProfile("dN_vs_ptCJTransRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Trans''",100,0.,200); - pdN_vs_ptCJTransMaxRECO = new TProfile("dN_vs_ptCJTransMaxRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Trans Max''",100,0.,200); - pdN_vs_ptCJTransMinRECO = new TProfile("dN_vs_ptCJTransMinRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Trans Min''",100,0.,200); - - pdPt_vs_ptCJTransRECO = new TProfile("dPt_vs_ptCJTransRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Trans''",100,0.,200); - pdPt_vs_ptCJTransMaxRECO = new TProfile("dPt_vs_ptCJTransMaxRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Trans Max''",100,0.,200); - pdPt_vs_ptCJTransMinRECO = new TProfile("dPt_vs_ptCJTransMinRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Trans Min''",100,0.,200); - - pdN_vs_ptCJTowardRECO = new TProfile("dN_vs_ptCJTowardRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Toward''",100,0.,200); - pdN_vs_ptCJAwayRECO = new TProfile("dN_vs_ptCJAwayRECO","#frac{dN}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Away''",100,0.,200); - - pdPt_vs_ptCJTowardRECO = new TProfile("dPt_vs_ptCJTowardRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Toward''",100,0.,200); - pdPt_vs_ptCJAwayRECO = new TProfile("dPt_vs_ptCJAwayRECO","#frac{dP_{T}^{sum}}{d#phid#eta} vs P_{T}^{Chg Jet MC} ''Away''",100,0.,200); - - temp1RECO = new TH1F("temp1RECO","temp",100,-180.,180.); - temp2RECO = new TH1F("temp2RECO","temp",100,-180.,180.); - temp3RECO = new TH1F("temp3RECO","temp",100,0.,5.); - temp4RECO = new TH1F("temp4RECO","temp",1000,0.,100.); - -} - -void UEAnalysisUE::ueAnalysisMC(float weight,std::string tkpt,float etaRegion, float ptThreshold, TClonesArray* MonteCarlo, TClonesArray* ChargedJet) -{ - - //std::cout << "UEAnalysisUE::ueAnalysisMC(...)" << std::endl; - - TLorentzVector* leadingJet; - Float_t PTLeadingCJ = -10; - for(int j=0;jGetSize();++j){ - TLorentzVector *v = (TLorentzVector*)ChargedJet->At(j); - if(fabs(v->Eta())Pt(); - break; - } - } - - - //std::cout << "PTLeadingCJ " << PTLeadingCJ << std::endl; - - if ( PTLeadingCJ == -10. ) - { - //std::cout << "return" << std::endl; - return; - } - - //std::cout << "for(int i=0;iGetSize();i++){" << std::endl; - - for(int i=0;iGetSize();i++){ - TLorentzVector *v = (TLorentzVector*)MonteCarlo->At(i); - - if(v->Pt()>=ptThreshold){ - fHistPtDistMC->Fill(v->Pt(),weight); - fHistEtaDistMC->Fill(v->Eta(),weight); - fHistPhiDistMC->Fill(v->Phi(),weight); - temp3MC->Fill(fabs(v->Eta())); - temp4MC->Fill(fabs(v->Pt())); - } - - if(fabs(v->Eta())Pt()>=ptThreshold){ - Float_t conv = 180/piG; - Float_t Dphi_mc = conv * leadingJet->DeltaPhi(*v); - temp1MC->Fill(Dphi_mc); - temp2MC->Fill(Dphi_mc,v->Pt()); - } - } - - //std::cout << "for(int i=0;i<100;i++){" << std::endl; - - for(int i=0;i<100;i++){ - pdN_vs_etaMC->Fill((i*0.05)+0.025,temp3MC->GetBinContent(i+1)/0.1,weight); - } - for(int i=0;i<1000;i++){ - pdN_vs_ptMC->Fill((i*0.1)+0.05,temp4MC->GetBinContent(i+1)/0.1,weight); - } - - temp3MC->Reset(); - temp4MC->Reset(); - - Float_t transN1=0; - Float_t transN2=0; - Float_t transP1=0; - Float_t transP2=0; - Float_t towardN=0; - Float_t towardP=0; - Float_t awayN=0; - Float_t awayP=0; - - for(int i=0;i<100;i++){ - if(i<=14){ - awayN += temp1MC->GetBinContent(i+1); - awayP += temp2MC->GetBinContent(i+1); - } - if(i>14 && i<33 ){ - transN1 += temp1MC->GetBinContent(i+1); - transP1 += temp2MC->GetBinContent(i+1); - } - if(i>=33 && i<=64 ){ - towardN += temp1MC->GetBinContent(i+1); - towardP += temp2MC->GetBinContent(i+1); - } - if(i>64 && i<83 ){ - transN2 += temp1MC->GetBinContent(i+1); - transP2 += temp2MC->GetBinContent(i+1); - } - if(i>=83){ - awayN += temp1MC->GetBinContent(i+1); - awayP += temp2MC->GetBinContent(i+1); - } - - Float_t bincont1_mc=temp1MC->GetBinContent(i+1); - pdN_vs_dphiMC->Fill(-180.+i*3.6+1.8,bincont1_mc/(3.6*2*etaRegion*(piG/180.)),weight); - - Float_t bincont2_mc=temp2MC->GetBinContent(i+1); - pdPt_vs_dphiMC->Fill(-180.+i*3.6+1.8,bincont2_mc/(3.6*2*etaRegion*(piG/180.)),weight); - - } - - //std::cout << "bool orderedN = false;" << std::endl; - - bool orderedN = false; - // bool orderedP = false; - - pdN_vs_ptJTowardMC->Fill(PTLeadingCJ,(towardN)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTowardMC->Fill(PTLeadingCJ,(towardP)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJAwayMC->Fill(PTLeadingCJ,(awayN)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJAwayMC->Fill(PTLeadingCJ,(awayP)/(120.*(2*etaRegion)*(piG/180.)),weight); - - if( transN1>=transN2 ) orderedN = true; - // if( transP1>=transP2 ) orderedP = true; - - // add histo for ue fluctuation - h2d_dN_vs_ptJTransMC->Fill(PTLeadingCJ,(transN1+transN2)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJTransMC->Fill(PTLeadingCJ,(transN1+transN2)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransMC->Fill(PTLeadingCJ,(transP1+transP2)/(120.*(2*etaRegion)*(piG/180.)),weight); - - if(orderedN){ - //dN - pdN_vs_ptJTransMinMC->Fill(PTLeadingCJ,transN2/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJTransMaxMC->Fill(PTLeadingCJ,transN1/(60.*(2*etaRegion)*(piG/180.)),weight); - //dP - pdPt_vs_ptJTransMinMC->Fill(PTLeadingCJ,transP2/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransMaxMC->Fill(PTLeadingCJ,transP1/(60.*(2.*etaRegion)*(piG/180.)),weight); - }else{ - //dN - pdN_vs_ptJTransMinMC->Fill(PTLeadingCJ,transN1/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJTransMaxMC->Fill(PTLeadingCJ,transN2/(60.*(2.*etaRegion)*(piG/180.)),weight); - //dP - pdPt_vs_ptJTransMinMC->Fill(PTLeadingCJ,transP1/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransMaxMC->Fill(PTLeadingCJ,transP2/(60.*(2.*etaRegion)*(piG/180.)),weight); - } - /* - if(orderedP){ - //dN - pdN_vs_ptJTransMinMC->Fill(PTLeadingCJ,transN2/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJTransMaxMC->Fill(PTLeadingCJ,transN1/(60.*(2*etaRegion)*(piG/180.)),weight); - //dP - pdPt_vs_ptJTransMinMC->Fill(PTLeadingCJ,transP2/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransMaxMC->Fill(PTLeadingCJ,transP1/(60.*(2.*etaRegion)*(piG/180.)),weight); - }else{ - //dN - pdN_vs_ptJTransMinMC->Fill(PTLeadingCJ,transN1/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJTransMaxMC->Fill(PTLeadingCJ,transN2/(60.*(2.*etaRegion)*(piG/180.)),weight); - //dP - pdPt_vs_ptJTransMinMC->Fill(PTLeadingCJ,transP1/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransMaxMC->Fill(PTLeadingCJ,transP2/(60.*(2.*etaRegion)*(piG/180.)),weight); - } - */ - temp1MC->Reset(); - temp2MC->Reset(); - - //std::cout << "done" << std::endl; - -} - -void UEAnalysisUE::ueAnalysisRECO(float weight,std::string tkpt,float etaRegion,float ptThreshold, TClonesArray* Track, TClonesArray* TracksJet) -{ - - TLorentzVector* leadingJet; - Float_t PTLeadingTJ = -10; - for(int j=0;jGetSize();++j){ - TLorentzVector *v = (TLorentzVector*)TracksJet->At(j); - if(fabs(v->Eta())Pt(); - break; - } - } - - Float_t PTLeadingCJ = cc->calibrationPt(PTLeadingTJ,tkpt)*PTLeadingTJ; - - for(int i=0;iGetSize();++i){ - TLorentzVector *v = (TLorentzVector*)Track->At(i); - - if(v->Pt()>ptThreshold){ - fHistPtDistRECO->Fill(v->Pt(),weight); - fHistEtaDistRECO->Fill(v->Eta(),weight); - fHistPhiDistRECO->Fill(v->Phi(),weight); - temp3RECO->Fill(fabs(v->Eta())); - temp4RECO->Fill(fabs(v->Pt())); - } - - if(fabs(v->Eta())Pt()>=ptThreshold){ - - // use ROOT method to calculate dphi - // convert dphi from radiants to degrees - Float_t conv = 180/piG; - Float_t Dphi_reco = conv * leadingJet->DeltaPhi(*v); - - temp1RECO->Fill(Dphi_reco); - temp2RECO->Fill(Dphi_reco,v->Pt()); - } - } - - - for(int i=0;i<100;i++){ - pdN_vs_etaRECO->Fill((i*0.05)+0.025,temp3RECO->GetBinContent(i+1)/0.1,weight); - } - for(int i=0;i<1000;i++){ - pdN_vs_ptRECO->Fill((i*0.1)+0.05,temp4RECO->GetBinContent(i+1)/0.1,weight); - } - - temp3RECO->Reset(); - temp4RECO->Reset(); - - Float_t transN1=0; - Float_t transN2=0; - Float_t transP1=0; - Float_t transP2=0; - Float_t towardN=0; - Float_t towardP=0; - Float_t awayN=0; - Float_t awayP=0; - - for(int i=0;i<100;i++){ - if(i<=14){ - awayN += temp1RECO->GetBinContent(i+1); - awayP += temp2RECO->GetBinContent(i+1); - } - if(i>14 && i<33 ){ - transN1 += temp1RECO->GetBinContent(i+1); - transP1 += temp2RECO->GetBinContent(i+1); - } - if(i>=33 && i<=64 ){ - towardN += temp1RECO->GetBinContent(i+1); - towardP += temp2RECO->GetBinContent(i+1); - } - if(i>64 && i<83 ){ - transN2 += temp1RECO->GetBinContent(i+1); - transP2 += temp2RECO->GetBinContent(i+1); - } - if(i>=83){ - awayN += temp1RECO->GetBinContent(i+1); - awayP += temp2RECO->GetBinContent(i+1); - } - - Float_t bincont1_reco=temp1RECO->GetBinContent(i+1); - pdN_vs_dphiRECO->Fill(-180.+i*3.6+1.8,bincont1_reco/(3.6*2*etaRegion*(piG/180.)),weight); - - Float_t bincont2_reco=temp2RECO->GetBinContent(i+1); - pdPt_vs_dphiRECO->Fill(-180.+i*3.6+1.8,bincont2_reco/(3.6*2*etaRegion*(piG/180.)),weight); - - } - - bool orderedN = false; - // bool orderedP = false; - - pdN_vs_ptJTowardRECO->Fill(PTLeadingTJ,(towardN)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTowardRECO->Fill(PTLeadingTJ,(towardP)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJAwayRECO->Fill(PTLeadingTJ,(awayN)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJAwayRECO->Fill(PTLeadingTJ,(awayP)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTowardRECO->Fill(PTLeadingCJ,(towardN*cc->correctionNToward(PTLeadingTJ,tkpt))/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTowardRECO->Fill(PTLeadingCJ,(towardP*cc->correctionPtToward(PTLeadingTJ,tkpt))/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJAwayRECO->Fill(PTLeadingCJ,(awayN*cc->correctionNAway(PTLeadingTJ,tkpt))/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJAwayRECO->Fill(PTLeadingCJ,(awayP*cc->correctionPtAway(PTLeadingTJ,tkpt))/(120.*(2*etaRegion)*(piG/180.)),weight); - - /* - pdN_vs_ptCJTowardRECO->Fill(PTLeadingCJ,(towardN)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTowardRECO->Fill(PTLeadingCJ,(towardP)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJAwayRECO->Fill(PTLeadingCJ,(awayN)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJAwayRECO->Fill(PTLeadingCJ,(awayP)/(120.*(2*etaRegion)*(piG/180.)),weight); - */ - - if( transN1>=transN2 ) orderedN = true; - // if( transP1>=transP2 ) orderedP = true; - - pdN_vs_ptJTransRECO->Fill(PTLeadingTJ,(transN1+transN2)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransRECO->Fill(PTLeadingTJ,(transP1+transP2)/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransRECO->Fill(PTLeadingCJ,((transN1+transN2)*cc->correctionNTrans(PTLeadingTJ,tkpt))/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransRECO->Fill(PTLeadingCJ,((transP1+transP2)*cc->correctionPtTrans(PTLeadingTJ,tkpt))/(120.*(2*etaRegion)*(piG/180.)),weight); - - /* - pdN_vs_ptCJTransRECO->Fill(PTLeadingCJ,((transN1+transN2))/(120.*(2*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransRECO->Fill(PTLeadingCJ,((transP1+transP2))/(120.*(2*etaRegion)*(piG/180.)),weight); - */ - - if(orderedN){ - - //dN - - pdN_vs_ptJTransMinRECO->Fill(PTLeadingTJ,transN2/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJTransMaxRECO->Fill(PTLeadingTJ,transN1/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transN2*cc->correctionNTrans(PTLeadingTJ,tkpt))/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transN1*cc->correctionNTrans(PTLeadingTJ,tkpt))/(60.*(2*etaRegion)*(piG/180.)),weight); - - /* - pdN_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transN2)/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transN1)/(60.*(2*etaRegion)*(piG/180.)),weight); - */ - - //dP - - pdPt_vs_ptJTransMinRECO->Fill(PTLeadingTJ,transP2/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransMaxRECO->Fill(PTLeadingTJ,transP1/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transP2*cc->correctionPtTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transP1*cc->correctionPtTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - /* - pdPt_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transP2)/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transP1)/(60.*(2.*etaRegion)*(piG/180.)),weight); - */ - - }else{ - - //dN - - pdN_vs_ptJTransMinRECO->Fill(PTLeadingTJ,transN1/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJTransMaxRECO->Fill(PTLeadingTJ,transN2/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transN1*cc->correctionNTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transN2*cc->correctionNTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - /* - pdN_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transN1)/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transN2)/(60.*(2*etaRegion)*(piG/180.)),weight); - */ - - //dP - - pdPt_vs_ptJTransMinRECO->Fill(PTLeadingTJ,transP1/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransMaxRECO->Fill(PTLeadingTJ,transP2/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transP1*cc->correctionPtTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transP2*cc->correctionPtTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - /* - pdPt_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transP1)/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transP2)/(60.*(2.*etaRegion)*(piG/180.)),weight); - */ - } - - /* - if(orderedP){ - - //dN - - pdN_vs_ptJTransMinRECO->Fill(PTLeadingTJ,transN2/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJTransMaxRECO->Fill(PTLeadingTJ,transN1/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transN2*cc->correctionNTrans(PTLeadingTJ,tkpt))/(60.*(2*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transN1*cc->correctionNTrans(PTLeadingTJ,tkpt))/(60.*(2*etaRegion)*(piG/180.)),weight); - - - //pdN_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transN2)/(60.*(2*etaRegion)*(piG/180.)),weight); - - //pdN_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transN1)/(60.*(2*etaRegion)*(piG/180.)),weight); - - - //dP - - pdPt_vs_ptJTransMinRECO->Fill(PTLeadingTJ,transP2/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransMaxRECO->Fill(PTLeadingTJ,transP1/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transP2*cc->correctionPtTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transP1*cc->correctionPtTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - - //pdPt_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transP2)/(60.*(2.*etaRegion)*(piG/180.)),weight); - - //pdPt_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transP1)/(60.*(2.*etaRegion)*(piG/180.)),weight); - - - }else{ - - //dN - - pdN_vs_ptJTransMinRECO->Fill(PTLeadingTJ,transN1/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptJTransMaxRECO->Fill(PTLeadingTJ,transN2/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transN1*cc->correctionNTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdN_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transN2*cc->correctionNTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - - //pdN_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transN1)/(60.*(2*etaRegion)*(piG/180.)),weight); - - //pdN_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transN2)/(60.*(2*etaRegion)*(piG/180.)),weight); - - - //dP - - pdPt_vs_ptJTransMinRECO->Fill(PTLeadingTJ,transP1/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptJTransMaxRECO->Fill(PTLeadingTJ,transP2/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transP1*cc->correctionPtTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - pdPt_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transP2*cc->correctionPtTrans(PTLeadingTJ,tkpt))/(60.*(2.*etaRegion)*(piG/180.)),weight); - - - //pdPt_vs_ptCJTransMinRECO->Fill(PTLeadingCJ,(transP1)/(60.*(2.*etaRegion)*(piG/180.)),weight); - - //pdPt_vs_ptCJTransMaxRECO->Fill(PTLeadingCJ,(transP2)/(60.*(2.*etaRegion)*(piG/180.)),weight); - - } - */ - temp1RECO->Reset(); - temp2RECO->Reset(); - -} - -void UEAnalysisUE::writeToFile(TFile * file){ - file->Write(); -} diff --git a/QCDAnalysis/UEAnalysis/root/UEAnalysisUE.h b/QCDAnalysis/UEAnalysis/root/UEAnalysisUE.h deleted file mode 100644 index 5787098413d36..0000000000000 --- a/QCDAnalysis/UEAnalysis/root/UEAnalysisUE.h +++ /dev/null @@ -1,106 +0,0 @@ -#ifndef UEAnalysisUE_h -#define UEAnalysisUE_h - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include "UEAnalysisCorrCali.h" - -class UEAnalysisUE { - public : - - UEAnalysisUE(); - ~UEAnalysisUE(){} - - void ueAnalysisMC(float,std::string,float,float,TClonesArray*,TClonesArray*); - void ueAnalysisRECO(float,std::string,float,float,TClonesArray*,TClonesArray*); - - void Begin(TFile *); - - void writeToFile(TFile *); - - //Underlying Event analysis - TH1F* fHistPtDistMC; - TH1F* fHistEtaDistMC; - TH1F* fHistPhiDistMC; - - TProfile* pdN_vs_etaMC; - TProfile* pdN_vs_ptMC; - - TProfile* pdN_vs_dphiMC; - TProfile* pdPt_vs_dphiMC; - - // add histo on fluctuation in UE - TH2D* h2d_dN_vs_ptJTransMC; - - - TProfile* pdN_vs_ptJTransMC; - TProfile* pdN_vs_ptJTransMaxMC; - TProfile* pdN_vs_ptJTransMinMC; - TProfile* pdPt_vs_ptJTransMC; - TProfile* pdPt_vs_ptJTransMaxMC; - TProfile* pdPt_vs_ptJTransMinMC; - TProfile* pdN_vs_ptJTowardMC; - TProfile* pdN_vs_ptJAwayMC; - TProfile* pdPt_vs_ptJTowardMC; - TProfile* pdPt_vs_ptJAwayMC; - - TH1F* temp1MC; - TH1F* temp2MC; - TH1F* temp3MC; - TH1F* temp4MC; - - TH1F* fHistPtDistRECO; - TH1F* fHistEtaDistRECO; - TH1F* fHistPhiDistRECO; - - TProfile* pdN_vs_etaRECO; - TProfile* pdN_vs_ptRECO; - - TProfile* pdN_vs_dphiRECO; - TProfile* pdPt_vs_dphiRECO; - - TProfile* pdN_vs_ptJTransRECO; - TProfile* pdN_vs_ptJTransMaxRECO; - TProfile* pdN_vs_ptJTransMinRECO; - TProfile* pdPt_vs_ptJTransRECO; - TProfile* pdPt_vs_ptJTransMaxRECO; - TProfile* pdPt_vs_ptJTransMinRECO; - TProfile* pdN_vs_ptJTowardRECO; - TProfile* pdN_vs_ptJAwayRECO; - TProfile* pdPt_vs_ptJTowardRECO; - TProfile* pdPt_vs_ptJAwayRECO; - - TProfile* pdN_vs_ptCJTransRECO; - TProfile* pdN_vs_ptCJTransMaxRECO; - TProfile* pdN_vs_ptCJTransMinRECO; - TProfile* pdPt_vs_ptCJTransRECO; - TProfile* pdPt_vs_ptCJTransMaxRECO; - TProfile* pdPt_vs_ptCJTransMinRECO; - TProfile* pdN_vs_ptCJTowardRECO; - TProfile* pdN_vs_ptCJAwayRECO; - TProfile* pdPt_vs_ptCJTowardRECO; - TProfile* pdPt_vs_ptCJAwayRECO; - - TH1F* temp1RECO; - TH1F* temp2RECO; - TH1F* temp3RECO; - TH1F* temp4RECO; - - float piG; - - UEAnalysisCorrCali* cc; - -}; - -#endif diff --git a/QCDAnalysis/UEAnalysis/root/UEAnalysisWeight.C b/QCDAnalysis/UEAnalysis/root/UEAnalysisWeight.C deleted file mode 100644 index 8bf89e2605b37..0000000000000 --- a/QCDAnalysis/UEAnalysis/root/UEAnalysisWeight.C +++ /dev/null @@ -1,23 +0,0 @@ -#include "UEAnalysisWeight.h" -#include -#include - -UEAnalysisWeight::UEAnalysisWeight() -{ - std::cout << "UEAnalysisWeight constructor " < UEAnalysisWeight::calculate(string tkPt, std::string trigger, float lumi) -{ - //This method will be filled once we start analyze the data -} - - -std::vector UEAnalysisWeight::calculate() -{ - for(int i=0;i<30;++i) - fakeTable.push_back(1.0); - return fakeTable; -} - diff --git a/QCDAnalysis/UEAnalysis/root/UEAnalysisWeight.h b/QCDAnalysis/UEAnalysis/root/UEAnalysisWeight.h deleted file mode 100644 index 4c2ca35a16603..0000000000000 --- a/QCDAnalysis/UEAnalysis/root/UEAnalysisWeight.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef UEAnalysisWeight_h -#define UEAnalysisWeight_h - -#include -#include -#include -#include - -class UEAnalysisWeight { - public : - - UEAnalysisWeight(); - ~UEAnalysisWeight(){} - std::vector calculate(std::string,std::string,float); - std::vector calculate(); - - private: - - std::vector fakeTable; - //Once we have access to teh date we have to define - //the relative table that we must use in order to merge - //toghether the differen stream - -}; - -#endif diff --git a/QCDAnalysis/UEAnalysis/src/AnalysisRootpleProducer.cc b/QCDAnalysis/UEAnalysis/src/AnalysisRootpleProducer.cc deleted file mode 100644 index 3f042e9b90b0f..0000000000000 --- a/QCDAnalysis/UEAnalysis/src/AnalysisRootpleProducer.cc +++ /dev/null @@ -1,365 +0,0 @@ -// Authors: F. Ambroglini, L. Fano' -#include -#include "FWCore/Common/interface/TriggerNames.h" - -using namespace edm; -using namespace std; -using namespace reco; - -class GreaterPt { -public: - bool operator()(const math::XYZTLorentzVector& a, const math::XYZTLorentzVector& b) { return a.pt() > b.pt(); } -}; - -class GenJetSort { -public: - bool operator()(const GenJet& a, const GenJet& b) { return a.pt() > b.pt(); } -}; - -class BasicJetSort { -public: - bool operator()(const BasicJet& a, const BasicJet& b) { return a.pt() > b.pt(); } -}; - -class CaloJetSort { -public: - bool operator()(const CaloJet& a, const CaloJet& b) { return a.pt() > b.pt(); } -}; - -void AnalysisRootpleProducer::store() { - AnalysisTree->Fill(); - - NumberMCParticles = 0; - NumberTracks = 0; - NumberInclusiveJet = 0; - NumberChargedJet = 0; - NumberTracksJet = 0; - NumberCaloJet = 0; -} - -void AnalysisRootpleProducer::fillEventInfo(int e) { EventKind = e; } - -void AnalysisRootpleProducer::fillMCParticles(float p, float pt, float eta, float phi) { - MomentumMC[NumberMCParticles] = p; - TransverseMomentumMC[NumberMCParticles] = pt; - EtaMC[NumberMCParticles] = eta; - PhiMC[NumberMCParticles] = phi; - NumberMCParticles++; -} - -void AnalysisRootpleProducer::fillTracks(float p, float pt, float eta, float phi) { - MomentumTK[NumberTracks] = p; - TransverseMomentumTK[NumberTracks] = pt; - EtaTK[NumberTracks] = eta; - PhiTK[NumberTracks] = phi; - NumberTracks++; -} - -void AnalysisRootpleProducer::fillInclusiveJet(float p, float pt, float eta, float phi) { - MomentumIJ[NumberInclusiveJet] = p; - TransverseMomentumIJ[NumberInclusiveJet] = pt; - EtaIJ[NumberInclusiveJet] = eta; - PhiIJ[NumberInclusiveJet] = phi; - NumberInclusiveJet++; -} - -void AnalysisRootpleProducer::fillChargedJet(float p, float pt, float eta, float phi) { - MomentumCJ[NumberChargedJet] = p; - TransverseMomentumCJ[NumberChargedJet] = pt; - EtaCJ[NumberChargedJet] = eta; - PhiCJ[NumberChargedJet] = phi; - NumberChargedJet++; -} - -void AnalysisRootpleProducer::fillTracksJet(float p, float pt, float eta, float phi) { - MomentumTJ[NumberTracksJet] = p; - TransverseMomentumTJ[NumberTracksJet] = pt; - EtaTJ[NumberTracksJet] = eta; - PhiTJ[NumberTracksJet] = phi; - NumberTracksJet++; -} - -void AnalysisRootpleProducer::fillCaloJet(float p, float pt, float eta, float phi) { - MomentumEHJ[NumberCaloJet] = p; - TransverseMomentumEHJ[NumberCaloJet] = pt; - EtaEHJ[NumberCaloJet] = eta; - PhiEHJ[NumberCaloJet] = phi; - NumberCaloJet++; -} - -AnalysisRootpleProducer::AnalysisRootpleProducer(const ParameterSet& pset) { - // flag to ignore gen-level analysis - onlyRECO = pset.getUntrackedParameter("OnlyRECO", false); - - // particle, track and jet collections - mcEventToken = mayConsume(pset.getUntrackedParameter("MCEvent", std::string(""))); - genJetCollToken = - mayConsume(pset.getUntrackedParameter("GenJetCollectionName", std::string(""))); - chgJetCollToken = mayConsume( - pset.getUntrackedParameter("ChgGenJetCollectionName", std::string(""))); - tracksJetCollToken = consumes( - pset.getUntrackedParameter("TracksJetCollectionName", std::string(""))); - recoCaloJetCollToken = consumes( - pset.getUntrackedParameter("RecoCaloJetCollectionName", std::string(""))); - chgGenPartCollToken = mayConsume >( - pset.getUntrackedParameter("ChgGenPartCollectionName", std::string(""))); - tracksCollToken = consumes( - pset.getUntrackedParameter("TracksCollectionName", std::string(""))); - - // trigger results - triggerResultsToken = consumes(pset.getParameter("triggerResults")); - // hltFilterTag = pset.getParameter("hltFilter"); - // triggerName = pset.getParameter("triggerName"); - - piG = acos(-1.); - NumberMCParticles = 0; - NumberTracks = 0; - NumberInclusiveJet = 0; - NumberChargedJet = 0; - NumberTracksJet = 0; - NumberCaloJet = 0; -} - -void AnalysisRootpleProducer::beginJob() { - // use TFileService for output to root file - AnalysisTree = fs->make("AnalysisTree", "MBUE Analysis Tree "); - - AnalysisTree->Branch("EventKind", &EventKind, "EventKind/I"); - - // store p, pt, eta, phi for particles and jets - - // GenParticles at hadron level - AnalysisTree->Branch("NumberMCParticles", &NumberMCParticles, "NumberMCParticles/I"); - AnalysisTree->Branch("MomentumMC", MomentumMC, "MomentumMC[NumberMCParticles]/F"); - AnalysisTree->Branch("TransverseMomentumMC", TransverseMomentumMC, "TransverseMomentumMC[NumberMCParticles]/F"); - AnalysisTree->Branch("EtaMC", EtaMC, "EtaMC[NumberMCParticles]/F"); - AnalysisTree->Branch("PhiMC", PhiMC, "PhiMC[NumberMCParticles]/F"); - - // tracks - AnalysisTree->Branch("NumberTracks", &NumberTracks, "NumberTracks/I"); - AnalysisTree->Branch("MomentumTK", MomentumTK, "MomentumTK[NumberTracks]/F"); - AnalysisTree->Branch("TrasverseMomentumTK", TransverseMomentumTK, "TransverseMomentumTK[NumberTracks]/F"); - AnalysisTree->Branch("EtaTK", EtaTK, "EtaTK[NumberTracks]/F"); - AnalysisTree->Branch("PhiTK", PhiTK, "PhiTK[NumberTracks]/F"); - - // GenJets - AnalysisTree->Branch("NumberInclusiveJet", &NumberInclusiveJet, "NumberInclusiveJet/I"); - AnalysisTree->Branch("MomentumIJ", MomentumIJ, "MomentumIJ[NumberInclusiveJet]/F"); - AnalysisTree->Branch("TrasverseMomentumIJ", TransverseMomentumIJ, "TransverseMomentumIJ[NumberInclusiveJet]/F"); - AnalysisTree->Branch("EtaIJ", EtaIJ, "EtaIJ[NumberInclusiveJet]/F"); - AnalysisTree->Branch("PhiIJ", PhiIJ, "PhiIJ[NumberInclusiveJet]/F"); - - // jets from charged GenParticles - AnalysisTree->Branch("NumberChargedJet", &NumberChargedJet, "NumberChargedJet/I"); - AnalysisTree->Branch("MomentumCJ", MomentumCJ, "MomentumCJ[NumberChargedJet]/F"); - AnalysisTree->Branch("TrasverseMomentumCJ", TransverseMomentumCJ, "TransverseMomentumCJ[NumberChargedJet]/F"); - AnalysisTree->Branch("EtaCJ", EtaCJ, "EtaCJ[NumberChargedJet]/F"); - AnalysisTree->Branch("PhiCJ", PhiCJ, "PhiCJ[NumberChargedJet]/F"); - - // jets from tracks - AnalysisTree->Branch("NumberTracksJet", &NumberTracksJet, "NumberTracksJet/I"); - AnalysisTree->Branch("MomentumTJ", MomentumTJ, "MomentumTJ[NumberTracksJet]/F"); - AnalysisTree->Branch("TrasverseMomentumTJ", TransverseMomentumTJ, "TransverseMomentumTJ[NumberTracksJet]/F"); - AnalysisTree->Branch("EtaTJ", EtaTJ, "EtaTJ[NumberTracksJet]/F"); - AnalysisTree->Branch("PhiTJ", PhiTJ, "PhiTJ[NumberTracksJet]/F"); - - // jets from calorimeter towers - AnalysisTree->Branch("NumberCaloJet", &NumberCaloJet, "NumberCaloJet/I"); - AnalysisTree->Branch("MomentumEHJ", MomentumEHJ, "MomentumEHJ[NumberCaloJet]/F"); - AnalysisTree->Branch("TrasverseMomentumEHJ", TransverseMomentumEHJ, "TransverseMomentumEHJ[NumberCaloJet]/F"); - AnalysisTree->Branch("EtaEHJ", EtaEHJ, "EtaEHJ[NumberCaloJet]/F"); - AnalysisTree->Branch("PhiEHJ", PhiEHJ, "PhiEHJ[NumberCaloJet]/F"); - - // alternative storage method: - // save TClonesArrays of TLorentzVectors - // i.e. store 4-vectors of particles and jets - - MonteCarlo = new TClonesArray("TLorentzVector", 10000); - AnalysisTree->Branch("MonteCarlo", "TClonesArray", &MonteCarlo, 128000, 0); - - Track = new TClonesArray("TLorentzVector", 10000); - AnalysisTree->Branch("Track", "TClonesArray", &Track, 128000, 0); - - InclusiveJet = new TClonesArray("TLorentzVector", 10000); - AnalysisTree->Branch("InclusiveJet", "TClonesArray", &InclusiveJet, 128000, 0); - - ChargedJet = new TClonesArray("TLorentzVector", 10000); - AnalysisTree->Branch("ChargedJet", "TClonesArray", &ChargedJet, 128000, 0); - - TracksJet = new TClonesArray("TLorentzVector", 10000); - AnalysisTree->Branch("TracksJet", "TClonesArray", &TracksJet, 128000, 0); - - CalorimeterJet = new TClonesArray("TLorentzVector", 10000); - AnalysisTree->Branch("CalorimeterJet", "TClonesArray", &CalorimeterJet, 128000, 0); - - acceptedTriggers = new TClonesArray("TObjString", 10000); - AnalysisTree->Branch("acceptedTriggers", "TClonesArray", &acceptedTriggers, 128000, 0); -} - -void AnalysisRootpleProducer::analyze(const Event& e, const EventSetup&) { - e.getByToken(triggerResultsToken, triggerResults); - const edm::TriggerNames& triggerNames = e.triggerNames(*triggerResults); - - acceptedTriggers->Clear(); - unsigned int iAcceptedTriggers(0); - if (triggerResults.product()->wasrun()) { - //cout << "at least one path out of " << triggerResults.product()->size() << " ran? " << triggerResults.product()->wasrun() << endl; - - if (triggerResults.product()->accept()) { - //cout << endl << "at least one path accepted? " << triggerResults.product()->accept() << endl; - - const unsigned int n_TriggerResults(triggerResults.product()->size()); - for (unsigned int itrig(0); itrig < n_TriggerResults; ++itrig) { - if (triggerResults.product()->accept(itrig)) { - //cout << "path " << triggerNames.triggerName( itrig ); - //cout << ", module index " << triggerResults.product()->index( itrig ); - //cout << ", state (Ready = 0, Pass = 1, Fail = 2, Exception = 3) " << triggerResults.product()->state( itrig ); - //cout << ", accept " << triggerResults.product()->accept( itrig ); - //cout << endl; - - // save name of accepted trigger path - new ((*acceptedTriggers)[iAcceptedTriggers]) TObjString((triggerNames.triggerName(itrig)).c_str()); - ++iAcceptedTriggers; - } - } - } - } - - // gen level analysis - // skipped, if onlyRECO flag set to true - - if (!onlyRECO) { - e.getByToken(mcEventToken, EvtHandle); - e.getByToken(chgGenPartCollToken, CandHandleMC); - e.getByToken(chgJetCollToken, ChgGenJetsHandle); - e.getByToken(genJetCollToken, GenJetsHandle); - - const HepMC::GenEvent* Evt = EvtHandle->GetEvent(); - - EventKind = Evt->signal_process_id(); - - std::vector GenPart; - std::vector ChgGenJetContainer; - std::vector GenJetContainer; - - GenPart.clear(); - ChgGenJetContainer.clear(); - GenJetContainer.clear(); - MonteCarlo->Clear(); - InclusiveJet->Clear(); - ChargedJet->Clear(); - - // jets from charged particles at hadron level - if (!ChgGenJetsHandle->empty()) { - for (GenJetCollection::const_iterator it(ChgGenJetsHandle->begin()), itEnd(ChgGenJetsHandle->end()); it != itEnd; - ++it) { - ChgGenJetContainer.push_back(*it); - } - - std::stable_sort(ChgGenJetContainer.begin(), ChgGenJetContainer.end(), GenJetSort()); - - std::vector::const_iterator it(ChgGenJetContainer.begin()), itEnd(ChgGenJetContainer.end()); - for (int iChargedJet(0); it != itEnd; ++it, ++iChargedJet) { - fillChargedJet(it->p(), it->pt(), it->eta(), it->phi()); - new ((*ChargedJet)[iChargedJet]) TLorentzVector(it->px(), it->py(), it->pz(), it->energy()); - } - } - - // GenJets - if (!GenJetsHandle->empty()) { - for (GenJetCollection::const_iterator it(GenJetsHandle->begin()), itEnd(GenJetsHandle->end()); it != itEnd; - ++it) { - GenJetContainer.push_back(*it); - } - - std::stable_sort(GenJetContainer.begin(), GenJetContainer.end(), GenJetSort()); - - std::vector::const_iterator it(GenJetContainer.begin()), itEnd(GenJetContainer.end()); - for (int iInclusiveJet(0); it != itEnd; ++it, ++iInclusiveJet) { - fillInclusiveJet(it->p(), it->pt(), it->eta(), it->phi()); - new ((*InclusiveJet)[iInclusiveJet]) TLorentzVector(it->px(), it->py(), it->pz(), it->energy()); - } - } - - // hadron level particles - if (!CandHandleMC->empty()) { - for (vector::const_iterator it(CandHandleMC->begin()), itEnd(CandHandleMC->end()); it != itEnd; - it++) { - GenPart.push_back(it->p4()); - } - - std::stable_sort(GenPart.begin(), GenPart.end(), GreaterPt()); - - std::vector::const_iterator it(GenPart.begin()), itEnd(GenPart.end()); - for (int iMonteCarlo(0); it != itEnd; ++it, ++iMonteCarlo) { - fillMCParticles(it->P(), it->Pt(), it->Eta(), it->Phi()); - new ((*MonteCarlo)[iMonteCarlo]) TLorentzVector(it->Px(), it->Py(), it->Pz(), it->E()); - } - } - } - - // reco level analysis - - e.getByToken(tracksCollToken, CandHandleRECO); - e.getByToken(recoCaloJetCollToken, RecoCaloJetsHandle); - e.getByToken(tracksJetCollToken, TracksJetsHandle); - - std::vector Tracks; - std::vector TracksJetContainer; - std::vector RecoCaloJetContainer; - - Tracks.clear(); - TracksJetContainer.clear(); - RecoCaloJetContainer.clear(); - - Track->Clear(); - TracksJet->Clear(); - CalorimeterJet->Clear(); - - if (!RecoCaloJetsHandle->empty()) { - for (CaloJetCollection::const_iterator it(RecoCaloJetsHandle->begin()), itEnd(RecoCaloJetsHandle->end()); - it != itEnd; - ++it) { - RecoCaloJetContainer.push_back(*it); - } - std::stable_sort(RecoCaloJetContainer.begin(), RecoCaloJetContainer.end(), CaloJetSort()); - - std::vector::const_iterator it(RecoCaloJetContainer.begin()), itEnd(RecoCaloJetContainer.end()); - for (int iCalorimeterJet(0); it != itEnd; ++it, ++iCalorimeterJet) { - fillCaloJet(it->p(), it->pt(), it->eta(), it->phi()); - new ((*CalorimeterJet)[iCalorimeterJet]) TLorentzVector(it->px(), it->py(), it->pz(), it->energy()); - } - } - - if (!TracksJetsHandle->empty()) { - for (BasicJetCollection::const_iterator it(TracksJetsHandle->begin()), itEnd(TracksJetsHandle->end()); it != itEnd; - ++it) { - TracksJetContainer.push_back(*it); - } - std::stable_sort(TracksJetContainer.begin(), TracksJetContainer.end(), BasicJetSort()); - - std::vector::const_iterator it(TracksJetContainer.begin()), itEnd(TracksJetContainer.end()); - for (int iTracksJet(0); it != itEnd; ++it, ++iTracksJet) { - fillTracksJet(it->p(), it->pt(), it->eta(), it->phi()); - new ((*TracksJet)[iTracksJet]) TLorentzVector(it->px(), it->py(), it->pz(), it->energy()); - } - } - - if (!CandHandleRECO->empty()) { - for (CandidateCollection::const_iterator it(CandHandleRECO->begin()), itEnd(CandHandleRECO->end()); it != itEnd; - ++it) { - Tracks.push_back(it->p4()); - } - std::stable_sort(Tracks.begin(), Tracks.end(), GreaterPt()); - - std::vector::const_iterator it(Tracks.begin()), itEnd(Tracks.end()); - for (int iTracks(0); it != itEnd; ++it, ++iTracks) { - fillTracks(it->P(), it->Pt(), it->Eta(), it->Phi()); - new ((*Track)[iTracks]) TLorentzVector(it->Px(), it->Py(), it->Pz(), it->E()); - } - } - - store(); -} - -void AnalysisRootpleProducer::endJob() {} diff --git a/QCDAnalysis/UEAnalysis/src/AnalysisRootpleProducerOnlyMC.cc b/QCDAnalysis/UEAnalysis/src/AnalysisRootpleProducerOnlyMC.cc deleted file mode 100644 index 59c0ac3330e28..0000000000000 --- a/QCDAnalysis/UEAnalysis/src/AnalysisRootpleProducerOnlyMC.cc +++ /dev/null @@ -1,179 +0,0 @@ -// Authors: F. Ambroglini, L. Fano' -#include - -using namespace edm; -using namespace std; -using namespace reco; - -class GreaterPt { -public: - bool operator()(const math::XYZTLorentzVector& a, const math::XYZTLorentzVector& b) { return a.pt() > b.pt(); } -}; - -class GenJetSort { -public: - bool operator()(const GenJet& a, const GenJet& b) { return a.pt() > b.pt(); } -}; - -void AnalysisRootpleProducerOnlyMC::store() { - AnalysisTree->Fill(); - - NumberMCParticles = 0; - NumberInclusiveJet = 0; - NumberChargedJet = 0; -} - -void AnalysisRootpleProducerOnlyMC::fillEventInfo(int e) { EventKind = e; } - -void AnalysisRootpleProducerOnlyMC::fillMCParticles(float p, float pt, float eta, float phi) { - MomentumMC[NumberMCParticles] = p; - TransverseMomentumMC[NumberMCParticles] = pt; - EtaMC[NumberMCParticles] = eta; - PhiMC[NumberMCParticles] = phi; - NumberMCParticles++; -} - -void AnalysisRootpleProducerOnlyMC::fillInclusiveJet(float p, float pt, float eta, float phi) { - MomentumIJ[NumberInclusiveJet] = p; - TransverseMomentumIJ[NumberInclusiveJet] = pt; - EtaIJ[NumberInclusiveJet] = eta; - PhiIJ[NumberInclusiveJet] = phi; - NumberInclusiveJet++; -} - -void AnalysisRootpleProducerOnlyMC::fillChargedJet(float p, float pt, float eta, float phi) { - MomentumCJ[NumberChargedJet] = p; - TransverseMomentumCJ[NumberChargedJet] = pt; - EtaCJ[NumberChargedJet] = eta; - PhiCJ[NumberChargedJet] = phi; - NumberChargedJet++; -} - -AnalysisRootpleProducerOnlyMC::AnalysisRootpleProducerOnlyMC(const ParameterSet& pset) { - mcEventToken = consumes(pset.getUntrackedParameter("MCEvent", std::string(""))); - genJetCollToken = - consumes(pset.getUntrackedParameter("GenJetCollectionName", std::string(""))); - chgJetCollToken = consumes( - pset.getUntrackedParameter("ChgGenJetCollectionName", std::string(""))); - chgGenPartCollToken = consumes >( - pset.getUntrackedParameter("ChgGenPartCollectionName", std::string(""))); - - piG = acos(-1.); - NumberMCParticles = 0; - NumberInclusiveJet = 0; - NumberChargedJet = 0; -} - -void AnalysisRootpleProducerOnlyMC::beginJob() { - // use TFileService for output to root file - AnalysisTree = fs->make("AnalysisTree", "MBUE Analysis Tree "); - - // process type - AnalysisTree->Branch("EventKind", &EventKind, "EventKind/I"); - - // store p, pt, eta, phi for particles and jets - - // GenParticles at hadron level - AnalysisTree->Branch("NumberMCParticles", &NumberMCParticles, "NumberMCParticles/I"); - AnalysisTree->Branch("MomentumMC", MomentumMC, "MomentumMC[NumberMCParticles]/F"); - AnalysisTree->Branch("TransverseMomentumMC", TransverseMomentumMC, "TransverseMomentumMC[NumberMCParticles]/F"); - AnalysisTree->Branch("EtaMC", EtaMC, "EtaMC[NumberMCParticles]/F"); - AnalysisTree->Branch("PhiMC", PhiMC, "PhiMC[NumberMCParticles]/F"); - - // GenJets - AnalysisTree->Branch("NumberInclusiveJet", &NumberInclusiveJet, "NumberInclusiveJet/I"); - AnalysisTree->Branch("MomentumIJ", MomentumIJ, "MomentumIJ[NumberInclusiveJet]/F"); - AnalysisTree->Branch("TrasverseMomentumIJ", TransverseMomentumIJ, "TransverseMomentumIJ[NumberInclusiveJet]/F"); - AnalysisTree->Branch("EtaIJ", EtaIJ, "EtaIJ[NumberInclusiveJet]/F"); - AnalysisTree->Branch("PhiIJ", PhiIJ, "PhiIJ[NumberInclusiveJet]/F"); - - // jets from charged GenParticles - AnalysisTree->Branch("NumberChargedJet", &NumberChargedJet, "NumberChargedJet/I"); - AnalysisTree->Branch("MomentumCJ", MomentumCJ, "MomentumCJ[NumberChargedJet]/F"); - AnalysisTree->Branch("TrasverseMomentumCJ", TransverseMomentumCJ, "TransverseMomentumCJ[NumberChargedJet]/F"); - AnalysisTree->Branch("EtaCJ", EtaCJ, "EtaCJ[NumberChargedJet]/F"); - AnalysisTree->Branch("PhiCJ", PhiCJ, "PhiCJ[NumberChargedJet]/F"); - - // alternative storage method: - // save TClonesArrays of TLorentzVectors - // i.e. store 4-vectors of particles and jets - - MonteCarlo = new TClonesArray("TLorentzVector", 10000); - AnalysisTree->Branch("MonteCarlo", "TClonesArray", &MonteCarlo, 128000, 0); - - InclusiveJet = new TClonesArray("TLorentzVector", 10000); - AnalysisTree->Branch("InclusiveJet", "TClonesArray", &InclusiveJet, 128000, 0); - - ChargedJet = new TClonesArray("TLorentzVector", 10000); - AnalysisTree->Branch("ChargedJet", "TClonesArray", &ChargedJet, 128000, 0); -} - -void AnalysisRootpleProducerOnlyMC::analyze(const Event& e, const EventSetup&) { - e.getByToken(mcEventToken, EvtHandle); - e.getByToken(chgGenPartCollToken, CandHandleMC); - e.getByToken(chgJetCollToken, ChgGenJetsHandle); - e.getByToken(genJetCollToken, GenJetsHandle); - - const HepMC::GenEvent* Evt = EvtHandle->GetEvent(); - - EventKind = Evt->signal_process_id(); - - std::vector GenPart; - std::vector ChgGenJetContainer; - std::vector GenJetContainer; - - GenPart.clear(); - ChgGenJetContainer.clear(); - GenJetContainer.clear(); - - ChargedJet->Clear(); - InclusiveJet->Clear(); - MonteCarlo->Clear(); - - if (!ChgGenJetsHandle->empty()) { - for (GenJetCollection::const_iterator it(ChgGenJetsHandle->begin()), itEnd(ChgGenJetsHandle->end()); it != itEnd; - ++it) { - ChgGenJetContainer.push_back(*it); - } - - std::stable_sort(ChgGenJetContainer.begin(), ChgGenJetContainer.end(), GenJetSort()); - - std::vector::const_iterator it(ChgGenJetContainer.begin()), itEnd(ChgGenJetContainer.end()); - for (int iChargedJet(0); it != itEnd; ++it, ++iChargedJet) { - fillChargedJet(it->p(), it->pt(), it->eta(), it->phi()); - new ((*ChargedJet)[iChargedJet]) TLorentzVector(it->px(), it->py(), it->pz(), it->energy()); - } - } - - if (!GenJetsHandle->empty()) { - for (GenJetCollection::const_iterator it(GenJetsHandle->begin()), itEnd(GenJetsHandle->end()); it != itEnd; ++it) { - GenJetContainer.push_back(*it); - } - - std::stable_sort(GenJetContainer.begin(), GenJetContainer.end(), GenJetSort()); - - std::vector::const_iterator it(GenJetContainer.begin()), itEnd(GenJetContainer.end()); - for (int iInclusiveJet(0); it != itEnd; ++it, ++iInclusiveJet) { - fillInclusiveJet(it->p(), it->pt(), it->eta(), it->phi()); - new ((*InclusiveJet)[iInclusiveJet]) TLorentzVector(it->px(), it->py(), it->pz(), it->energy()); - } - } - - if (!CandHandleMC->empty()) { - for (vector::const_iterator it(CandHandleMC->begin()), itEnd(CandHandleMC->end()); it != itEnd; it++) { - GenPart.push_back(it->p4()); - } - - std::stable_sort(GenPart.begin(), GenPart.end(), GreaterPt()); - - std::vector::const_iterator it(GenPart.begin()), itEnd(GenPart.end()); - for (int iMonteCarlo(0); it != itEnd; ++it, ++iMonteCarlo) { - fillMCParticles(it->P(), it->Pt(), it->Eta(), it->Phi()); - new ((*MonteCarlo)[iMonteCarlo]) TLorentzVector(it->Px(), it->Py(), it->Pz(), it->E()); - } - } - - store(); -} - -void AnalysisRootpleProducerOnlyMC::endJob() {} diff --git a/QCDAnalysis/UEAnalysis/src/SealModule.cc b/QCDAnalysis/UEAnalysis/src/SealModule.cc deleted file mode 100644 index 30f7ba663a232..0000000000000 --- a/QCDAnalysis/UEAnalysis/src/SealModule.cc +++ /dev/null @@ -1,8 +0,0 @@ -#include "FWCore/PluginManager/interface/ModuleDef.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "QCDAnalysis/UEAnalysis/interface/AnalysisRootpleProducer.h" -#include "QCDAnalysis/UEAnalysis/interface/AnalysisRootpleProducerOnlyMC.h" - -DEFINE_FWK_MODULE(AnalysisRootpleProducer); -DEFINE_FWK_MODULE(AnalysisRootpleProducerOnlyMC); diff --git a/RecoBTag/Combined/src/HeavyIonCSVTagger.cc b/RecoBTag/Combined/src/HeavyIonCSVTagger.cc index 08ea2795f8fc9..789eb574d9842 100644 --- a/RecoBTag/Combined/src/HeavyIonCSVTagger.cc +++ b/RecoBTag/Combined/src/HeavyIonCSVTagger.cc @@ -76,11 +76,8 @@ float HeavyIonCSVTagger::discriminator(const TagInfoHelper &tagInfo) const { // Loop over input variables std::map inputs; - - bool notTaggable = false; std::vector tagValList = vars.getList(reco::btau::trackSip3dSig, false); bool noTrack = (tagValList.empty()); - bool noVertex = (vars.get(reco::btau::vertexCategory, -1.0) == 2); for (auto &mva_var : variables_) { //vectorial tagging variable @@ -91,17 +88,15 @@ float HeavyIonCSVTagger::discriminator(const TagInfoHelper &tagInfo) const { //single value tagging var else { inputs[mva_var.name] = vars.get(mva_var.id, mva_var.default_value); + if (noTrack) { + if (mva_var.name == "TagVarCSV_vertexMass") { + if (inputs[mva_var.name] < 0) + return -1; + noTrack = false; + } + } } } - if (noTrack && noVertex) - notTaggable = true; - - //get the MVA output - float tag = (mvaID_->evaluate(inputs) + 1.) / 2.; - - if (notTaggable) - tag = -1; - - return tag; + return (mvaID_->evaluate(inputs) + 1.) / 2.; } diff --git a/RecoBTag/FeatureTools/plugins/DeepFlavourTagInfoProducer.cc b/RecoBTag/FeatureTools/plugins/DeepFlavourTagInfoProducer.cc index e73cf8f2eba4c..08a53fa3fbee1 100644 --- a/RecoBTag/FeatureTools/plugins/DeepFlavourTagInfoProducer.cc +++ b/RecoBTag/FeatureTools/plugins/DeepFlavourTagInfoProducer.cc @@ -48,6 +48,8 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "RecoBTag/TrackProbability/interface/HistogramProbabilityEstimator.h" class HistogramProbabilityEstimator; +#include + #include #include "CondFormats/BTauObjects/interface/TrackProbabilityCalibration.h" #include "CondFormats/DataRecord/interface/BTagTrackProbability2DRcd.h" @@ -201,7 +203,7 @@ void DeepFlavourTagInfoProducer::produce(edm::Event& iEvent, const edm::EventSet double negative_cut = 0; //used only with flip_ if (flip_) { //FIXME: Check if can do even less often than once per event const edm::Provenance* prov = shallow_tag_infos.provenance(); - const edm::ParameterSet& psetFromProvenance = edm::parameterSet(*prov, iEvent.processHistory()); + const edm::ParameterSet& psetFromProvenance = edm::parameterSet(prov->stable(), iEvent.processHistory()); negative_cut = ((psetFromProvenance.getParameter("computer")) .getParameter("trackSelection")) .getParameter("sip3dSigMax"); @@ -470,7 +472,8 @@ void DeepFlavourTagInfoProducer::checkEventSetup(const edm::EventSetup& iSetup) { ESHandle calib2DHandle = iSetup.getHandle(calib2d_token_); ESHandle calib3DHandle = iSetup.getHandle(calib3d_token_); - probabilityEstimator_.reset(new HistogramProbabilityEstimator(calib3DHandle.product(), calib2DHandle.product())); + probabilityEstimator_ = + std::make_unique(calib3DHandle.product(), calib2DHandle.product()); } calibrationCacheId3D_ = cacheId3D; diff --git a/RecoBTag/ONNXRuntime/BuildFile.xml b/RecoBTag/ONNXRuntime/BuildFile.xml index f75e71b863efd..c9b2daa7fe264 100644 --- a/RecoBTag/ONNXRuntime/BuildFile.xml +++ b/RecoBTag/ONNXRuntime/BuildFile.xml @@ -1,5 +1,4 @@ - diff --git a/RecoBTag/SecondaryVertex/interface/CombinedSVSoftLeptonComputer.h b/RecoBTag/SecondaryVertex/interface/CombinedSVSoftLeptonComputer.h index 11926923f7978..42bcf34520458 100644 --- a/RecoBTag/SecondaryVertex/interface/CombinedSVSoftLeptonComputer.h +++ b/RecoBTag/SecondaryVertex/interface/CombinedSVSoftLeptonComputer.h @@ -1,14 +1,15 @@ #ifndef RecoBTag_SecondaryVertex_CombinedSVSoftLeptonComputer_h #define RecoBTag_SecondaryVertex_CombinedSVSoftLeptonComputer_h -#include "DataFormats/BTauReco/interface/SoftLeptonTagInfo.h" +#include "DataFormats/BTauReco/interface/CandSoftLeptonTagInfo.h" +#include "DataFormats/BTauReco/interface/TaggingVariable.h" +#include "DataFormats/BTauReco/interface/TemplatedSoftLeptonTagInfo.h" +#include "DataFormats/BTauReco/interface/VertexTypes.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "RecoBTag/SecondaryVertex/interface/CombinedSVComputer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" -//(z) -#include "DataFormats/BTauReco/interface/CandSoftLeptonTagInfo.h" -#include "DataFormats/BTauReco/src/classes.h" -#include "DataFormats/PatCandidates/interface/Jet.h" +#include "RecoBTag/SecondaryVertex/interface/CombinedSVComputer.h" class CombinedSVSoftLeptonComputer : public CombinedSVComputer { public: diff --git a/RecoEcal/EgammaClusterAlgos/BuildFile.xml b/RecoEcal/EgammaClusterAlgos/BuildFile.xml index bf1e15aefd279..96c07a84ee312 100644 --- a/RecoEcal/EgammaClusterAlgos/BuildFile.xml +++ b/RecoEcal/EgammaClusterAlgos/BuildFile.xml @@ -3,12 +3,15 @@ + + - + + diff --git a/RecoEcal/EgammaClusterAlgos/interface/EgammaSCEnergyCorrectionAlgo.h b/RecoEcal/EgammaClusterAlgos/interface/EgammaSCEnergyCorrectionAlgo.h index 0cfb127397ed1..decde7587b136 100644 --- a/RecoEcal/EgammaClusterAlgos/interface/EgammaSCEnergyCorrectionAlgo.h +++ b/RecoEcal/EgammaClusterAlgos/interface/EgammaSCEnergyCorrectionAlgo.h @@ -1,27 +1,26 @@ #ifndef RecoECAL_ECALClusters_EgammaSCEnergyCorrectionAlgo_h_ #define RecoECAL_ECALClusters_EgammaSCEnergyCorrectionAlgo_h_ -#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" #include "DataFormats/EgammaReco/interface/BasicCluster.h" #include "DataFormats/CaloRecHit/interface/CaloCluster.h" -#include "DataFormats/EcalRecHit/interface/EcalRecHit.h" #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" #include "DataFormats/EcalDetId/interface/EcalSubdetector.h" #include "DataFormats/DetId/interface/DetId.h" #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" #include "RecoEcal/EgammaCoreTools/interface/EcalClusterFunctionBaseClass.h" -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterFunctionFactory.h" +#include #include #include class EgammaSCEnergyCorrectionAlgo { public: + using BasicClusterFunction = std::function; + // public member functions - EgammaSCEnergyCorrectionAlgo(float noise, reco::CaloCluster::AlgoId theAlgo, const edm::ParameterSet& pset); - ~EgammaSCEnergyCorrectionAlgo() {} + EgammaSCEnergyCorrectionAlgo(float noise); // take a SuperCluster and return a corrected SuperCluster reco::SuperCluster applyCorrection(const reco::SuperCluster& cl, @@ -34,13 +33,13 @@ class EgammaSCEnergyCorrectionAlgo { int modeEE_); // take a SuperCluster and return a crack-corrected SuperCluster - reco::SuperCluster applyCrackCorrection(const reco::SuperCluster& cl, - EcalClusterFunctionBaseClass* crackCorrectionFunction); + static reco::SuperCluster applyCrackCorrection(const reco::SuperCluster& cl, + EcalClusterFunctionBaseClass* crackCorrectionFunction); // take a SuperCluster and return a local containment corrected SuperCluster - reco::SuperCluster applyLocalContCorrection(const reco::SuperCluster& cl, - EcalClusterFunctionBaseClass* localContCorrectionFunction); + static reco::SuperCluster applyLocalContCorrection(const reco::SuperCluster& cl, + BasicClusterFunction localContCorrectionFunction); private: // correction factor as a function of number of crystals, @@ -52,8 +51,6 @@ class EgammaSCEnergyCorrectionAlgo { int nCrystalsGT2Sigma(reco::BasicCluster const& seed, EcalRecHitCollection const& rhc) const; float sigmaElectronicNoise_; - - reco::CaloCluster::AlgoId theAlgo_; }; #endif /*RecoECAL_ECALClusters_EgammaSCEnergyCorrectionAlgo_h_*/ diff --git a/RecoEcal/EgammaClusterAlgos/interface/SCEnergyCorrectorSemiParm.h b/RecoEcal/EgammaClusterAlgos/interface/SCEnergyCorrectorSemiParm.h index 75778337ad787..7625731f35f53 100644 --- a/RecoEcal/EgammaClusterAlgos/interface/SCEnergyCorrectorSemiParm.h +++ b/RecoEcal/EgammaClusterAlgos/interface/SCEnergyCorrectorSemiParm.h @@ -5,80 +5,176 @@ // // Helper Class for applying regression-based energy corrections with optimized BDT implementation // -// Authors: J.Bendavid +// Original Author: J.Bendavid +// +// Refactored, modernised and extended to HGCAL by S. Harper (RAL/CERN) +// with input from S. Bhattacharya (DESY) //-------------------------------------------------------------------------------------------------- #ifndef RecoEcal_EgammaClusterAlgos_SCEnergyCorrectorSemiParm_h #define RecoEcal_EgammaClusterAlgos_SCEnergyCorrectorSemiParm_h +#include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" - -#include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "CondFormats/EgammaObjects/interface/GBRForestD.h" -#include "DataFormats/EcalRecHit/interface/EcalRecHit.h" -#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" #include "Geometry/CaloTopology/interface/CaloTopology.h" #include "Geometry/Records/interface/CaloGeometryRecord.h" #include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/ESGetToken.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHit.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" +#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" +#include "DataFormats/ParticleFlowReco/interface/PFRecHit.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" +#include "CondFormats/GBRForest/interface/GBRForestD.h" #include "CondFormats/DataRecord/interface/GBRDWrapperRcd.h" +#include "RecoEgamma/EgammaTools/interface/EgammaBDTOutputTransformer.h" +#include "RecoEgamma/EgammaTools/interface/HGCalShowerShapeHelper.h" class SCEnergyCorrectorSemiParm { public: SCEnergyCorrectorSemiParm(); - ~SCEnergyCorrectorSemiParm(); + //if you want override the default on where conditions are consumed, you need to use + //the other constructor and then call setTokens approprately + SCEnergyCorrectorSemiParm(const edm::ParameterSet& iConfig, edm::ConsumesCollector cc); + + static void fillPSetDescription(edm::ParameterSetDescription& desc); + static edm::ParameterSetDescription makePSetDescription(); + + template + void setTokens(const edm::ParameterSet& iConfig, edm::ConsumesCollector cc); + + void setEventSetup(const edm::EventSetup& es); + void setEvent(const edm::Event& e); + + std::pair getCorrections(const reco::SuperCluster& sc) const; + void modifyObject(reco::SuperCluster& sc) const; + + std::vector getRegData(const reco::SuperCluster& sc) const; + +private: + class RegParam { + public: + RegParam(std::string meanKey = "", + float meanLow = 0, + float meanHigh = 0, + std::string sigmaKey = "", + float sigmaLow = 0, + float sigmaHigh = 0) + : meanKey_(std::move(meanKey)), + sigmaKey_(std::move(sigmaKey)), + meanOutTrans_(meanLow, meanHigh), + sigmaOutTrans_(sigmaLow, sigmaHigh) {} + RegParam(edm::ConsumesCollector cc, + std::string meanKey = "", + float meanLow = 0, + float meanHigh = 0, + std::string sigmaKey = "", + float sigmaLow = 0, + float sigmaHigh = 0) + : RegParam(meanKey, meanLow, meanHigh, sigmaKey, sigmaLow, sigmaHigh) { + setTokens(cc); + } + template + void setTokens(edm::ConsumesCollector cc); + void setForests(const edm::EventSetup& setup); - void setTokens(const edm::ParameterSet &iConfig, edm::ConsumesCollector &cc); + double mean(const std::vector& data) const; + double sigma(const std::vector& data) const; - std::pair getCorrections(const reco::SuperCluster &sc) const; - void modifyObject(reco::SuperCluster &sc); + private: + std::string meanKey_; + std::string sigmaKey_; + EgammaBDTOutputTransformer meanOutTrans_; + EgammaBDTOutputTransformer sigmaOutTrans_; + const GBRForestD* meanForest_; + const GBRForestD* sigmaForest_; + edm::ESGetToken meanForestToken_; + edm::ESGetToken sigmaForestToken_; + }; - void setEventSetup(const edm::EventSetup &es); - void setEvent(const edm::Event &e); + //returns barrel for ecal barrel, otherwise returns endcap + const RegParam& getRegParam(const DetId& detId) const { + return detId.det() == DetId::Ecal && detId.subdetId() == EcalBarrel ? regParamBarrel_ : regParamEndcap_; + } -protected: - const GBRForestD *foresteb_; - const GBRForestD *forestee_; - const GBRForestD *forestsigmaeb_; - const GBRForestD *forestsigmaee_; + std::vector getRegDataECALV1(const reco::SuperCluster& sc) const; + std::vector getRegDataECALHLTV1(const reco::SuperCluster& sc) const; + std::vector getRegDataHGCALV1(const reco::SuperCluster& sc) const; + std::vector getRegDataHGCALHLTV1(const reco::SuperCluster& sc) const; - edm::ESHandle calotopo_; - edm::ESHandle calogeom_; + //barrel = always ecal barrel, endcap may be ECAL or HGCAL + RegParam regParamBarrel_; + RegParam regParamEndcap_; - edm::ESGetToken tokenCaloTopo_; - edm::ESGetToken tokenCaloGeom_; - edm::ESGetToken tokenRegressionKeyEB_; - edm::ESGetToken tokenUncertaintyKeyEB_; - edm::ESGetToken tokenRegressionKeyEE_; - edm::ESGetToken tokenUncertaintyKeyEE_; + const CaloTopology* caloTopo_; + const CaloGeometry* caloGeom_; + edm::ESGetToken caloTopoToken_; + edm::ESGetToken caloGeomToken_; edm::EDGetTokenT tokenEBRecHits_; edm::EDGetTokenT tokenEERecHits_; + edm::EDGetTokenT tokenHgcalRecHits_; edm::EDGetTokenT tokenVertices_; + edm::Handle recHitsEB_; + edm::Handle recHitsEE_; + edm::Handle recHitsHgcal_; edm::Handle vertices_; - edm::Handle rechitsEB_; - edm::Handle rechitsEE_; - - edm::InputTag ecalHitsEBInputTag_; - edm::InputTag ecalHitsEEInputTag_; - edm::InputTag vertexInputTag_; - std::string regressionKeyEB_; - std::string uncertaintyKeyEB_; - std::string regressionKeyEE_; - std::string uncertaintyKeyEE_; - -private: bool isHLT_; + bool isPhaseII_; bool applySigmaIetaIphiBug_; //there was a bug in sigmaIetaIphi for the 74X application - int nHitsAboveThreshold_; - float eThreshold_; + int nHitsAboveThresholdEB_; + int nHitsAboveThresholdEE_; + int nHitsAboveThresholdHG_; + float hitsEnergyThreshold_; + float hgcalCylinderR_; + HGCalShowerShapeHelper hgcalShowerShapes_; }; + +template +void SCEnergyCorrectorSemiParm::RegParam::setTokens(edm::ConsumesCollector cc) { + meanForestToken_ = cc.esConsumes(edm::ESInputTag("", meanKey_)); + sigmaForestToken_ = cc.esConsumes(edm::ESInputTag("", sigmaKey_)); +} + +template +void SCEnergyCorrectorSemiParm::setTokens(const edm::ParameterSet& iConfig, edm::ConsumesCollector cc) { + isHLT_ = iConfig.getParameter("isHLT"); + isPhaseII_ = iConfig.getParameter("isPhaseII"); + applySigmaIetaIphiBug_ = iConfig.getParameter("applySigmaIetaIphiBug"); + tokenEBRecHits_ = cc.consumes(iConfig.getParameter("ecalRecHitsEB")); + if (not isPhaseII_) { + tokenEERecHits_ = cc.consumes(iConfig.getParameter("ecalRecHitsEE")); + } else { + tokenHgcalRecHits_ = cc.consumes(iConfig.getParameter("hgcalRecHits")); + hgcalCylinderR_ = iConfig.getParameter("hgcalCylinderR"); + hgcalShowerShapes_.setTokens(cc); + } + caloGeomToken_ = cc.esConsumes(); + caloTopoToken_ = cc.esConsumes(); + + regParamBarrel_ = RegParam(iConfig.getParameter("regressionKeyEB"), + iConfig.getParameter("regressionMinEB"), + iConfig.getParameter("regressionMaxEB"), + iConfig.getParameter("uncertaintyKeyEB"), + iConfig.getParameter("uncertaintyMinEB"), + iConfig.getParameter("uncertaintyMaxEB")); + regParamBarrel_.setTokens(cc); + regParamEndcap_ = RegParam(iConfig.getParameter("regressionKeyEE"), + iConfig.getParameter("regressionMinEE"), + iConfig.getParameter("regressionMaxEE"), + iConfig.getParameter("uncertaintyKeyEE"), + iConfig.getParameter("uncertaintyMinEE"), + iConfig.getParameter("uncertaintyMaxEE")); + regParamEndcap_.setTokens(cc); + hitsEnergyThreshold_ = iConfig.getParameter("eRecHitThreshold"); + if (not isHLT_) { + tokenVertices_ = cc.consumes(iConfig.getParameter("vertexCollection")); + } +} #endif diff --git a/RecoEcal/EgammaClusterAlgos/src/EgammaSCEnergyCorrectionAlgo.cc b/RecoEcal/EgammaClusterAlgos/src/EgammaSCEnergyCorrectionAlgo.cc index 20b548a26f438..efacf64fc5ce7 100644 --- a/RecoEcal/EgammaClusterAlgos/src/EgammaSCEnergyCorrectionAlgo.cc +++ b/RecoEcal/EgammaClusterAlgos/src/EgammaSCEnergyCorrectionAlgo.cc @@ -1,20 +1,16 @@ // // Author: David Evans, Bristol // + +#include "DataFormats/EcalRecHit/interface/EcalRecHit.h" #include "RecoEcal/EgammaClusterAlgos/interface/EgammaSCEnergyCorrectionAlgo.h" #include "RecoEcal/EgammaCoreTools/interface/SuperClusterShapeAlgo.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include + #include #include -EgammaSCEnergyCorrectionAlgo::EgammaSCEnergyCorrectionAlgo(float noise, - reco::CaloCluster::AlgoId theAlgo, - const edm::ParameterSet& pset) - -{ - sigmaElectronicNoise_ = noise; -} +EgammaSCEnergyCorrectionAlgo::EgammaSCEnergyCorrectionAlgo(float noise) : sigmaElectronicNoise_{noise} {} reco::SuperCluster EgammaSCEnergyCorrectionAlgo::applyCorrection(const reco::SuperCluster& cl, const EcalRecHitCollection& rhc, @@ -235,12 +231,12 @@ reco::SuperCluster EgammaSCEnergyCorrectionAlgo::applyCrackCorrection( // Assume that the correction function provides correction for the seed Basic Cluster reco::SuperCluster EgammaSCEnergyCorrectionAlgo::applyLocalContCorrection( - const reco::SuperCluster& cl, EcalClusterFunctionBaseClass* localContCorrectionFunction) { + reco::SuperCluster const& cl, BasicClusterFunction localContCorrectionFunction) { const EcalRecHitCollection dummy; const reco::CaloClusterPtr& seedBC = cl.seed(); float seedBCene = seedBC->energy(); - float correctedSeedBCene = localContCorrectionFunction->getValue(*seedBC, dummy) * seedBCene; + float correctedSeedBCene = localContCorrectionFunction(*seedBC, dummy) * seedBCene; reco::SuperCluster correctedSC = cl; correctedSC.setEnergy(cl.energy() - seedBCene + correctedSeedBCene); diff --git a/RecoEcal/EgammaClusterAlgos/src/PFECALSuperClusterAlgo.cc b/RecoEcal/EgammaClusterAlgos/src/PFECALSuperClusterAlgo.cc index 24c9cb9cf5093..579cf9cd35e0c 100644 --- a/RecoEcal/EgammaClusterAlgos/src/PFECALSuperClusterAlgo.cc +++ b/RecoEcal/EgammaClusterAlgos/src/PFECALSuperClusterAlgo.cc @@ -122,8 +122,13 @@ void PFECALSuperClusterAlgo::setTokens(const edm::ParameterSet& iConfig, edm::Co esEEInterCalibToken_ = cc.esConsumes(); esChannelStatusToken_ = cc.esConsumes(); - ecalMustacheSCParametersToken_ = cc.esConsumes(); - ecalSCDynamicDPhiParametersToken_ = cc.esConsumes(); + + if (_clustype == PFECALSuperClusterAlgo::kMustache) { + ecalMustacheSCParametersToken_ = cc.esConsumes(); + } + if (useDynamicDPhi_) { + ecalSCDynamicDPhiParametersToken_ = cc.esConsumes(); + } if (useRegression_) { const edm::ParameterSet& regconf = iConfig.getParameter("regressionConfig"); @@ -151,8 +156,12 @@ void PFECALSuperClusterAlgo::update(const edm::EventSetup& setup) { } void PFECALSuperClusterAlgo::updateSCParams(const edm::EventSetup& setup) { - mustacheSCParams_ = &setup.getData(ecalMustacheSCParametersToken_); - scDynamicDPhiParams_ = &setup.getData(ecalSCDynamicDPhiParametersToken_); + if (_clustype == PFECALSuperClusterAlgo::kMustache) { + mustacheSCParams_ = &setup.getData(ecalMustacheSCParametersToken_); + } + if (useDynamicDPhi_) { + scDynamicDPhiParams_ = &setup.getData(ecalSCDynamicDPhiParametersToken_); + } } void PFECALSuperClusterAlgo::loadAndSortPFClusters(const edm::Event& iEvent) { diff --git a/RecoEcal/EgammaClusterAlgos/src/SCEnergyCorrectorSemiParm.cc b/RecoEcal/EgammaClusterAlgos/src/SCEnergyCorrectorSemiParm.cc index 68eeb5594a77c..edbbb9f10582e 100644 --- a/RecoEcal/EgammaClusterAlgos/src/SCEnergyCorrectorSemiParm.cc +++ b/RecoEcal/EgammaClusterAlgos/src/SCEnergyCorrectorSemiParm.cc @@ -1,324 +1,381 @@ #include "RecoEcal/EgammaClusterAlgos/interface/SCEnergyCorrectorSemiParm.h" -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h" -#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "RecoEcal/EgammaCoreTools/interface/EcalTools.h" #include "FWCore/Utilities/interface/isFinite.h" +#include "FWCore/Utilities/interface/Transition.h" +#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" +#include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/Math/interface/deltaPhi.h" +#include "RecoEcal/EgammaCoreTools/interface/EcalTools.h" +#include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h" +#include "RecoEgamma/EgammaTools/interface/EgammaHGCALIDParamDefaults.h" #include using namespace reco; -//-------------------------------------------------------------------------------------------------- -SCEnergyCorrectorSemiParm::SCEnergyCorrectorSemiParm() - : foresteb_(nullptr), - forestee_(nullptr), - forestsigmaeb_(nullptr), - forestsigmaee_(nullptr), - calotopo_(nullptr), - calogeom_(nullptr) {} - -//-------------------------------------------------------------------------------------------------- -SCEnergyCorrectorSemiParm::~SCEnergyCorrectorSemiParm() {} - -//-------------------------------------------------------------------------------------------------- -void SCEnergyCorrectorSemiParm::setTokens(const edm::ParameterSet &iConfig, edm::ConsumesCollector &cc) { - isHLT_ = iConfig.getParameter("isHLT"); - applySigmaIetaIphiBug_ = iConfig.getParameter("applySigmaIetaIphiBug"); - tokenEBRecHits_ = cc.consumes(iConfig.getParameter("ecalRecHitsEB")); - tokenEERecHits_ = cc.consumes(iConfig.getParameter("ecalRecHitsEE")); - - regressionKeyEB_ = iConfig.getParameter("regressionKeyEB"); - uncertaintyKeyEB_ = iConfig.getParameter("uncertaintyKeyEB"); - regressionKeyEE_ = iConfig.getParameter("regressionKeyEE"); - uncertaintyKeyEE_ = iConfig.getParameter("uncertaintyKeyEE"); - - tokenCaloTopo_ = cc.esConsumes(); - tokenCaloGeom_ = cc.esConsumes(); - tokenRegressionKeyEB_ = cc.esConsumes( - edm::ESInputTag("", regressionKeyEB_)); - tokenUncertaintyKeyEB_ = cc.esConsumes( - edm::ESInputTag("", uncertaintyKeyEB_)); - tokenRegressionKeyEE_ = cc.esConsumes( - edm::ESInputTag("", regressionKeyEE_)); - tokenUncertaintyKeyEE_ = cc.esConsumes( - edm::ESInputTag("", uncertaintyKeyEE_)); - - if (not isHLT_) { - tokenVertices_ = cc.consumes(iConfig.getParameter("vertexCollection")); - } else { - eThreshold_ = iConfig.getParameter("eRecHitThreshold"); - } -} - -//-------------------------------------------------------------------------------------------------- -void SCEnergyCorrectorSemiParm::setEventSetup(const edm::EventSetup &es) { - calotopo_ = es.getHandle(tokenCaloTopo_); - calogeom_ = es.getHandle(tokenCaloGeom_); - - edm::ESHandle readereb = es.getHandle(tokenRegressionKeyEB_); - edm::ESHandle readerebvar = es.getHandle(tokenUncertaintyKeyEB_); - edm::ESHandle readeree = es.getHandle(tokenRegressionKeyEE_); - edm::ESHandle readereevar = es.getHandle(tokenUncertaintyKeyEE_); +namespace { + //bool is if a valid dr was found, float is the dr + std::pair getMaxDRNonSeedCluster(const reco::SuperCluster& sc) { + float maxDR2 = 0.; + const edm::Ptr& seedClus = sc.seed(); - foresteb_ = readereb.product(); - forestsigmaeb_ = readerebvar.product(); - forestee_ = readeree.product(); - forestsigmaee_ = readereevar.product(); -} + for (const auto& clus : sc.clusters()) { + if (clus == seedClus) { + continue; + } -//-------------------------------------------------------------------------------------------------- -void SCEnergyCorrectorSemiParm::setEvent(const edm::Event &e) { - e.getByToken(tokenEBRecHits_, rechitsEB_); - e.getByToken(tokenEERecHits_, rechitsEE_); - - if (not isHLT_) - e.getByToken(tokenVertices_, vertices_); - else { - nHitsAboveThreshold_ = 0; - const EcalRecHitCollection *recHitsEB = (rechitsEB_.isValid() ? rechitsEB_.product() : nullptr); - const EcalRecHitCollection *recHitsEE = (rechitsEE_.isValid() ? rechitsEE_.product() : nullptr); - - if (nullptr != recHitsEB) { - for (EcalRecHitCollection::const_iterator it = recHitsEB->begin(); it != recHitsEB->end(); ++it) { - if (it->energy() > eThreshold_) - nHitsAboveThreshold_++; + // find cluster with max dR + const double dr2 = reco::deltaR2(*clus, *seedClus); + if (dr2 > maxDR2) { + maxDR2 = dr2; } } - - if (nullptr != recHitsEE) { - for (EcalRecHitCollection::const_iterator it = recHitsEE->begin(); it != recHitsEE->end(); ++it) { - if (it->energy() > eThreshold_) - nHitsAboveThreshold_++; + return {sc.clustersSize() != 1, sc.clustersSize() != 1 ? std::sqrt(maxDR2) : 999.}; + } + template + int countRecHits(const T& recHitHandle, float threshold) { + int count = 0; + if (recHitHandle.isValid()) { + for (const auto& recHit : *recHitHandle) { + if (recHit.energy() > threshold) { + count++; + } } } + return count; } +} // namespace + +SCEnergyCorrectorSemiParm::SCEnergyCorrectorSemiParm() + : caloTopo_(nullptr), + caloGeom_(nullptr), + isHLT_(false), + isPhaseII_(false), + applySigmaIetaIphiBug_(false), + nHitsAboveThresholdEB_(0), + nHitsAboveThresholdEE_(0), + nHitsAboveThresholdHG_(0), + hitsEnergyThreshold_(-1.), + hgcalCylinderR_(0.) {} + +SCEnergyCorrectorSemiParm::SCEnergyCorrectorSemiParm(const edm::ParameterSet& iConfig, edm::ConsumesCollector cc) + : SCEnergyCorrectorSemiParm() { + setTokens(iConfig, cc); } -//-------------------------------------------------------------------------------------------------- -std::pair SCEnergyCorrectorSemiParm::getCorrections(const reco::SuperCluster &sc) const { - std::pair p; - p.first = -1; - p.second = -1; +void SCEnergyCorrectorSemiParm::fillPSetDescription(edm::ParameterSetDescription& desc) { + desc.add("isHLT", false); + desc.add("isPhaseII", false); + desc.add("applySigmaIetaIphiBug", false); + desc.add("ecalRecHitsEE", edm::InputTag("ecalRecHit", "EcalRecHitsEE")); + desc.add("ecalRecHitsEB", edm::InputTag("ecalRecHit", "EcalRecHitsEB")); + desc.add("regressionKeyEB", "pfscecal_EBCorrection_offline_v2"); + desc.add("regressionKeyEE", "pfscecal_EECorrection_offline_v2"); + desc.add("uncertaintyKeyEB", "pfscecal_EBUncertainty_offline_v2"); + desc.add("uncertaintyKeyEE", "pfscecal_EEUncertainty_offline_v2"); + desc.add("regressionMinEB", 0.2); + desc.add("regressionMaxEB", 2.0); + desc.add("regressionMinEE", 0.2); + desc.add("regressionMaxEE", 2.0); + desc.add("uncertaintyMinEB", 0.0002); + desc.add("uncertaintyMaxEB", 0.5); + desc.add("uncertaintyMinEE", 0.0002); + desc.add("uncertaintyMaxEE", 0.5); + desc.add("vertexCollection", edm::InputTag("offlinePrimaryVertices")); + desc.add("eRecHitThreshold", 1.); + desc.add("hgcalRecHits", edm::InputTag()); + desc.add("hgcalCylinderR", EgammaHGCALIDParamDefaults::kRCylinder); +} - // protect against HGCal, don't mod the object - if (EcalTools::isHGCalDet(sc.seed()->seed().det())) - return p; +edm::ParameterSetDescription SCEnergyCorrectorSemiParm::makePSetDescription() { + edm::ParameterSetDescription desc; + fillPSetDescription(desc); + return desc; +} - const reco::CaloCluster &seedCluster = *(sc.seed()); - const bool iseb = seedCluster.hitsAndFractions()[0].first.subdetId() == EcalBarrel; - const EcalRecHitCollection *recHits = iseb ? rechitsEB_.product() : rechitsEE_.product(); +void SCEnergyCorrectorSemiParm::setEventSetup(const edm::EventSetup& es) { + caloTopo_ = &es.getData(caloTopoToken_); + caloGeom_ = &es.getData(caloGeomToken_); - const CaloTopology *topo = calotopo_.product(); + regParamBarrel_.setForests(es); + regParamEndcap_.setForests(es); - const double raw_energy = sc.rawEnergy(); - const int numberOfClusters = sc.clusters().size(); + if (isPhaseII_) { + hgcalShowerShapes_.initPerSetup(es); + } +} - std::vector localCovariances = EcalClusterTools::localCovariances(seedCluster, recHits, topo); +void SCEnergyCorrectorSemiParm::setEvent(const edm::Event& event) { + event.getByToken(tokenEBRecHits_, recHitsEB_); + if (!isPhaseII_) { + event.getByToken(tokenEERecHits_, recHitsEE_); + } else { + event.getByToken(tokenHgcalRecHits_, recHitsHgcal_); + hgcalShowerShapes_.initPerEvent(*recHitsHgcal_); + } + if (isHLT_ || isPhaseII_) { + //note countRecHits checks the validity of the handle and returns 0 + //if invalid so its okay to call on all rec-hit collections here + nHitsAboveThresholdEB_ = countRecHits(recHitsEB_, hitsEnergyThreshold_); + nHitsAboveThresholdEE_ = countRecHits(recHitsEE_, hitsEnergyThreshold_); + nHitsAboveThresholdHG_ = countRecHits(recHitsHgcal_, hitsEnergyThreshold_); + } + if (!isHLT_) { + event.getByToken(tokenVertices_, vertices_); + } +} - if (not isHLT_) { - std::array eval; +std::pair SCEnergyCorrectorSemiParm::getCorrections(const reco::SuperCluster& sc) const { + std::pair corrEnergyAndRes = {-1, -1}; - const float eLeft = EcalClusterTools::eLeft(seedCluster, recHits, topo); - const float eRight = EcalClusterTools::eRight(seedCluster, recHits, topo); - const float eTop = EcalClusterTools::eTop(seedCluster, recHits, topo); - const float eBottom = EcalClusterTools::eBottom(seedCluster, recHits, topo); + const auto regData = getRegData(sc); + if (regData.empty()) { + //supercluster has no valid regression, return default values + return corrEnergyAndRes; + } + DetId seedId = sc.seed()->seed(); + const auto& regParam = getRegParam(seedId); - float sigmaIetaIeta = sqrt(localCovariances[0]); - float sigmaIetaIphi = std::numeric_limits::max(); - float sigmaIphiIphi = std::numeric_limits::max(); + double mean = regParam.mean(regData); + double sigma = regParam.sigma(regData); - if (!edm::isNotFinite(localCovariances[2])) - sigmaIphiIphi = sqrt(localCovariances[2]); + double energyCorr = mean * sc.rawEnergy(); + if (isHLT_ && sc.seed()->seed().det() == DetId::Ecal && seedId.subdetId() == EcalEndcap) { + energyCorr += sc.preshowerEnergy(); + } + double resolutionEst = sigma * energyCorr; - // extra shower shapes - const float see_by_spp = - sigmaIetaIeta * (applySigmaIetaIphiBug_ ? std::numeric_limits::max() : sigmaIphiIphi); - if (see_by_spp > 0) { - sigmaIetaIphi = localCovariances[1] / see_by_spp; - } else if (localCovariances[1] > 0) { - sigmaIetaIphi = 1.f; - } else { - sigmaIetaIphi = -1.f; - } + corrEnergyAndRes.first = energyCorr; + corrEnergyAndRes.second = resolutionEst; - // calculate sub-cluster variables - std::vector clusterRawEnergy; - clusterRawEnergy.resize(std::max(3, numberOfClusters), 0); - std::vector clusterDEtaToSeed; - clusterDEtaToSeed.resize(std::max(3, numberOfClusters), 0); - std::vector clusterDPhiToSeed; - clusterDPhiToSeed.resize(std::max(3, numberOfClusters), 0); - float clusterMaxDR = 999.; - float clusterMaxDRDPhi = 999.; - float clusterMaxDRDEta = 999.; - float clusterMaxDRRawEnergy = 0.; - - size_t iclus = 0; - float maxDR = 0; - edm::Ptr pclus; - const edm::Ptr &theseed = sc.seed(); - // loop over all clusters that aren't the seed - auto clusend = sc.clustersEnd(); - for (auto clus = sc.clustersBegin(); clus != clusend; ++clus) { - pclus = *clus; - - if (theseed == pclus) - continue; - clusterRawEnergy[iclus] = pclus->energy(); - clusterDPhiToSeed[iclus] = reco::deltaPhi(pclus->phi(), theseed->phi()); - clusterDEtaToSeed[iclus] = pclus->eta() - theseed->eta(); + return corrEnergyAndRes; +} - // find cluster with max dR - const auto the_dr = reco::deltaR(*pclus, *theseed); - if (the_dr > maxDR) { - maxDR = the_dr; - clusterMaxDR = maxDR; - clusterMaxDRDPhi = clusterDPhiToSeed[iclus]; - clusterMaxDRDEta = clusterDEtaToSeed[iclus]; - clusterMaxDRRawEnergy = clusterRawEnergy[iclus]; - } - ++iclus; - } +void SCEnergyCorrectorSemiParm::modifyObject(reco::SuperCluster& sc) const { + std::pair cor = getCorrections(sc); + if (cor.first < 0) + return; + sc.setEnergy(cor.first); + sc.setCorrectedEnergy(cor.first); + if (cor.second >= 0) { + sc.setCorrectedEnergyUncertainty(cor.second); + } +} - // SET INPUTS - eval[0] = vertices_->size(); - eval[1] = raw_energy; - eval[2] = sc.etaWidth(); - eval[3] = sc.phiWidth(); - eval[4] = EcalClusterTools::e3x3(seedCluster, recHits, topo) / raw_energy; - eval[5] = seedCluster.energy() / raw_energy; - eval[6] = EcalClusterTools::eMax(seedCluster, recHits) / raw_energy; - eval[7] = EcalClusterTools::e2nd(seedCluster, recHits) / raw_energy; - eval[8] = (eLeft + eRight != 0.f ? (eLeft - eRight) / (eLeft + eRight) : 0.f); - eval[9] = (eTop + eBottom != 0.f ? (eTop - eBottom) / (eTop + eBottom) : 0.f); - eval[10] = sigmaIetaIeta; - eval[11] = sigmaIetaIphi; - eval[12] = sigmaIphiIphi; - eval[13] = std::max(0, numberOfClusters - 1); - eval[14] = clusterMaxDR; - eval[15] = clusterMaxDRDPhi; - eval[16] = clusterMaxDRDEta; - eval[17] = clusterMaxDRRawEnergy / raw_energy; - eval[18] = clusterRawEnergy[0] / raw_energy; - eval[19] = clusterRawEnergy[1] / raw_energy; - eval[20] = clusterRawEnergy[2] / raw_energy; - eval[21] = clusterDPhiToSeed[0]; - eval[22] = clusterDPhiToSeed[1]; - eval[23] = clusterDPhiToSeed[2]; - eval[24] = clusterDEtaToSeed[0]; - eval[25] = clusterDEtaToSeed[1]; - eval[26] = clusterDEtaToSeed[2]; - if (iseb) { - EBDetId ebseedid(seedCluster.seed()); - eval[27] = ebseedid.ieta(); - eval[28] = ebseedid.iphi(); - } else { - EEDetId eeseedid(seedCluster.seed()); - eval[27] = eeseedid.ix(); - eval[28] = eeseedid.iy(); - //seed cluster eta is only needed for the 106X Ultra Legacy regressions - //and was not used in the 74X regression however as its just an extra varaible - //at the end, its harmless to add for the 74X regression - eval[29] = seedCluster.eta(); - } +std::vector SCEnergyCorrectorSemiParm::getRegData(const reco::SuperCluster& sc) const { + switch (sc.seed()->seed().det()) { + case DetId::Ecal: + if (isPhaseII_ && sc.seed()->seed().subdetId() == EcalEndcap) { + throw cms::Exception("ConfigError") << " Error in SCEnergyCorrectorSemiParm: " + << " running over events with EcalEndcap clusters while enabling " + "isPhaseII, please set isPhaseII = False in regression config"; + } + return isHLT_ ? getRegDataECALHLTV1(sc) : getRegDataECALV1(sc); + case DetId::HGCalEE: + if (!isPhaseII_) { + throw cms::Exception("ConfigError") << " Error in SCEnergyCorrectorSemiParm: " + << " running over PhaseII events without enabling isPhaseII, please set " + "isPhaseII = True in regression config"; + } + return isHLT_ ? getRegDataHGCALHLTV1(sc) : getRegDataHGCALV1(sc); + default: + return std::vector(); + } +} - //magic numbers for MINUIT-like transformation of BDT output onto limited range - //(These should be stored inside the conditions object in the future as well) - constexpr double meanlimlow = 0.2; - constexpr double meanlimhigh = 2.0; - constexpr double meanoffset = meanlimlow + 0.5 * (meanlimhigh - meanlimlow); - constexpr double meanscale = 0.5 * (meanlimhigh - meanlimlow); +void SCEnergyCorrectorSemiParm::RegParam::setForests(const edm::EventSetup& setup) { + meanForest_ = &setup.getData(meanForestToken_); + sigmaForest_ = &setup.getData(sigmaForestToken_); +} - constexpr double sigmalimlow = 0.0002; - constexpr double sigmalimhigh = 0.5; - constexpr double sigmaoffset = sigmalimlow + 0.5 * (sigmalimhigh - sigmalimlow); - constexpr double sigmascale = 0.5 * (sigmalimhigh - sigmalimlow); +double SCEnergyCorrectorSemiParm::RegParam::mean(const std::vector& data) const { + return meanForest_ ? meanOutTrans_(meanForest_->GetResponse(data.data())) : -1; +} - const GBRForestD *forestmean = iseb ? foresteb_ : forestee_; - const GBRForestD *forestsigma = iseb ? forestsigmaeb_ : forestsigmaee_; +double SCEnergyCorrectorSemiParm::RegParam::sigma(const std::vector& data) const { + return sigmaForest_ ? sigmaOutTrans_(sigmaForest_->GetResponse(data.data())) : -1; +} - //these are the actual BDT responses - double rawmean = forestmean->GetResponse(eval.data()); - double rawsigma = forestsigma->GetResponse(eval.data()); +std::vector SCEnergyCorrectorSemiParm::getRegDataECALV1(const reco::SuperCluster& sc) const { + std::vector eval(30, 0.); - //apply transformation to limited output range (matching the training) - double mean = meanoffset + meanscale * vdt::fast_sin(rawmean); - double sigma = sigmaoffset + sigmascale * vdt::fast_sin(rawsigma); + const reco::CaloCluster& seedCluster = *(sc.seed()); + const bool iseb = seedCluster.hitsAndFractions()[0].first.subdetId() == EcalBarrel; + const EcalRecHitCollection* recHits = iseb ? recHitsEB_.product() : recHitsEE_.product(); - double ecor = mean * (eval[1]); - const double sigmacor = sigma * ecor; + const double raw_energy = sc.rawEnergy(); + const int numberOfClusters = sc.clusters().size(); - p.first = ecor; - p.second = sigmacor; + std::vector localCovariances = EcalClusterTools::localCovariances(seedCluster, recHits, caloTopo_); - } else { - std::array eval; - float clusterMaxDR = 999.; + const float eLeft = EcalClusterTools::eLeft(seedCluster, recHits, caloTopo_); + const float eRight = EcalClusterTools::eRight(seedCluster, recHits, caloTopo_); + const float eTop = EcalClusterTools::eTop(seedCluster, recHits, caloTopo_); + const float eBottom = EcalClusterTools::eBottom(seedCluster, recHits, caloTopo_); - size_t iclus = 0; - float maxDR = 0; - edm::Ptr pclus; - const edm::Ptr &theseed = sc.seed(); + float sigmaIetaIeta = sqrt(localCovariances[0]); + float sigmaIetaIphi = std::numeric_limits::max(); + float sigmaIphiIphi = std::numeric_limits::max(); - // loop over all clusters that aren't the seed - auto clusend = sc.clustersEnd(); - for (auto clus = sc.clustersBegin(); clus != clusend; ++clus) { - pclus = *clus; + if (!edm::isNotFinite(localCovariances[2])) + sigmaIphiIphi = sqrt(localCovariances[2]); - if (theseed == pclus) - continue; + // extra shower shapes + const float see_by_spp = sigmaIetaIeta * (applySigmaIetaIphiBug_ ? std::numeric_limits::max() : sigmaIphiIphi); + if (see_by_spp > 0) { + sigmaIetaIphi = localCovariances[1] / see_by_spp; + } else if (localCovariances[1] > 0) { + sigmaIetaIphi = 1.f; + } else { + sigmaIetaIphi = -1.f; + } - // find cluster with max dR - const auto the_dr = reco::deltaR(*pclus, *theseed); - if (the_dr > maxDR) { - maxDR = the_dr; - clusterMaxDR = maxDR; - } - ++iclus; + // calculate sub-cluster variables + std::vector clusterRawEnergy; + clusterRawEnergy.resize(std::max(3, numberOfClusters), 0); + std::vector clusterDEtaToSeed; + clusterDEtaToSeed.resize(std::max(3, numberOfClusters), 0); + std::vector clusterDPhiToSeed; + clusterDPhiToSeed.resize(std::max(3, numberOfClusters), 0); + float clusterMaxDR = 999.; + float clusterMaxDRDPhi = 999.; + float clusterMaxDRDEta = 999.; + float clusterMaxDRRawEnergy = 0.; + + size_t iclus = 0; + float maxDR = 0; + edm::Ptr pclus; + const edm::Ptr& theseed = sc.seed(); + // loop over all clusters that aren't the seed + auto clusend = sc.clustersEnd(); + for (auto clus = sc.clustersBegin(); clus != clusend; ++clus) { + pclus = *clus; + + if (theseed == pclus) + continue; + clusterRawEnergy[iclus] = pclus->energy(); + clusterDPhiToSeed[iclus] = reco::deltaPhi(pclus->phi(), theseed->phi()); + clusterDEtaToSeed[iclus] = pclus->eta() - theseed->eta(); + + // find cluster with max dR + const auto the_dr = reco::deltaR(*pclus, *theseed); + if (the_dr > maxDR) { + maxDR = the_dr; + clusterMaxDR = maxDR; + clusterMaxDRDPhi = clusterDPhiToSeed[iclus]; + clusterMaxDRDEta = clusterDEtaToSeed[iclus]; + clusterMaxDRRawEnergy = clusterRawEnergy[iclus]; } + ++iclus; + } - // SET INPUTS - eval[0] = nHitsAboveThreshold_; - eval[1] = sc.eta(); - eval[2] = sc.phiWidth(); - eval[3] = EcalClusterTools::e3x3(seedCluster, recHits, topo) / raw_energy; - eval[4] = std::max(0, numberOfClusters - 1); - eval[5] = clusterMaxDR; - eval[6] = raw_energy; - - //magic numbers for MINUIT-like transformation of BDT output onto limited range - //(These should be stored inside the conditions object in the future as well) - constexpr double meanlimlow = 0.2; - constexpr double meanlimhigh = 2.0; - constexpr double meanoffset = meanlimlow + 0.5 * (meanlimhigh - meanlimlow); - constexpr double meanscale = 0.5 * (meanlimhigh - meanlimlow); - - const GBRForestD *forestmean = iseb ? foresteb_ : forestee_; - - double rawmean = forestmean->GetResponse(eval.data()); - double mean = meanoffset + meanscale * vdt::fast_sin(rawmean); - - double ecor = mean * eval[6]; - if (!iseb) - ecor = mean * eval[6] + sc.preshowerEnergy(); - - p.first = ecor; - //p.second unchanged + eval[0] = vertices_->size(); + eval[1] = raw_energy; + eval[2] = sc.etaWidth(); + eval[3] = sc.phiWidth(); + eval[4] = EcalClusterTools::e3x3(seedCluster, recHits, caloTopo_) / raw_energy; + eval[5] = seedCluster.energy() / raw_energy; + eval[6] = EcalClusterTools::eMax(seedCluster, recHits) / raw_energy; + eval[7] = EcalClusterTools::e2nd(seedCluster, recHits) / raw_energy; + eval[8] = (eLeft + eRight != 0.f ? (eLeft - eRight) / (eLeft + eRight) : 0.f); + eval[9] = (eTop + eBottom != 0.f ? (eTop - eBottom) / (eTop + eBottom) : 0.f); + eval[10] = sigmaIetaIeta; + eval[11] = sigmaIetaIphi; + eval[12] = sigmaIphiIphi; + eval[13] = std::max(0, numberOfClusters - 1); + eval[14] = clusterMaxDR; + eval[15] = clusterMaxDRDPhi; + eval[16] = clusterMaxDRDEta; + eval[17] = clusterMaxDRRawEnergy / raw_energy; + eval[18] = clusterRawEnergy[0] / raw_energy; + eval[19] = clusterRawEnergy[1] / raw_energy; + eval[20] = clusterRawEnergy[2] / raw_energy; + eval[21] = clusterDPhiToSeed[0]; + eval[22] = clusterDPhiToSeed[1]; + eval[23] = clusterDPhiToSeed[2]; + eval[24] = clusterDEtaToSeed[0]; + eval[25] = clusterDEtaToSeed[1]; + eval[26] = clusterDEtaToSeed[2]; + if (iseb) { + EBDetId ebseedid(seedCluster.seed()); + eval[27] = ebseedid.ieta(); + eval[28] = ebseedid.iphi(); + } else { + EEDetId eeseedid(seedCluster.seed()); + eval[27] = eeseedid.ix(); + eval[28] = eeseedid.iy(); + //seed cluster eta is only needed for the 106X Ultra Legacy regressions + //and was not used in the 74X regression however as its just an extra varaible + //at the end, its harmless to add for the 74X regression + eval[29] = seedCluster.eta(); } + return eval; +} - return p; +std::vector SCEnergyCorrectorSemiParm::getRegDataECALHLTV1(const reco::SuperCluster& sc) const { + std::vector eval(7, 0.); + auto maxDRNonSeedClus = getMaxDRNonSeedCluster(sc); + const float clusterMaxDR = maxDRNonSeedClus.first ? maxDRNonSeedClus.second : 999.; + + const reco::CaloCluster& seedCluster = *(sc.seed()); + const bool iseb = seedCluster.hitsAndFractions()[0].first.subdetId() == EcalBarrel; + const EcalRecHitCollection* recHits = iseb ? recHitsEB_.product() : recHitsEE_.product(); + + eval[0] = nHitsAboveThresholdEB_ + nHitsAboveThresholdEE_; + eval[1] = sc.eta(); + eval[2] = sc.phiWidth(); + eval[3] = EcalClusterTools::e3x3(seedCluster, recHits, caloTopo_) / sc.rawEnergy(); + eval[4] = std::max(0, static_cast(sc.clusters().size()) - 1); + eval[5] = clusterMaxDR; + eval[6] = sc.rawEnergy(); + + return eval; } -//-------------------------------------------------------------------------------------------------- -void SCEnergyCorrectorSemiParm::modifyObject(reco::SuperCluster &sc) { - std::pair cor = getCorrections(sc); - if (cor.first < 0) - return; - sc.setEnergy(cor.first); - sc.setCorrectedEnergy(cor.first); - if (!isHLT_ && cor.second >= 0.) - sc.setCorrectedEnergyUncertainty(cor.second); +std::vector SCEnergyCorrectorSemiParm::getRegDataHGCALV1(const reco::SuperCluster& sc) const { + std::vector eval(17, 0.); + + auto ssCalc = hgcalShowerShapes_.createCalc(sc); + auto pcaWidths = ssCalc.getPCAWidths(hgcalCylinderR_); + auto energyHighestHits = ssCalc.getEnergyHighestHits(2); + + auto maxDRNonSeedClus = getMaxDRNonSeedCluster(sc); + const float clusterMaxDR = maxDRNonSeedClus.first ? maxDRNonSeedClus.second : 999.; + + eval[0] = sc.rawEnergy(); + eval[1] = sc.eta(); + eval[2] = sc.etaWidth(); + eval[3] = sc.phiWidth(); + eval[4] = sc.clusters().size(); + eval[5] = sc.hitsAndFractions().size(); + eval[6] = clusterMaxDR; + eval[7] = sc.eta() - sc.seed()->eta(); + eval[8] = reco::deltaPhi(sc.phi(), sc.seed()->phi()); + eval[9] = energyHighestHits[0] / sc.rawEnergy(); + eval[10] = energyHighestHits[1] / sc.rawEnergy(); + eval[11] = std::sqrt(pcaWidths.sigma2uu); + eval[12] = std::sqrt(pcaWidths.sigma2vv); + eval[13] = std::sqrt(pcaWidths.sigma2ww); + eval[14] = ssCalc.getRvar(hgcalCylinderR_, sc.rawEnergy()); + eval[15] = sc.seed()->energy() / sc.rawEnergy(); + eval[16] = nHitsAboveThresholdEB_ + nHitsAboveThresholdHG_; + + return eval; +} + +std::vector SCEnergyCorrectorSemiParm::getRegDataHGCALHLTV1(const reco::SuperCluster& sc) const { + std::vector eval(7, 0.); + const float clusterMaxDR = getMaxDRNonSeedCluster(sc).second; + + auto ssCalc = hgcalShowerShapes_.createCalc(sc); + + eval[0] = sc.rawEnergy(); + eval[1] = sc.eta(); + eval[2] = sc.phiWidth(); + eval[3] = std::max(0, static_cast(sc.clusters().size()) - 1); + eval[4] = ssCalc.getRvar(hgcalCylinderR_); + eval[5] = clusterMaxDR; + eval[6] = nHitsAboveThresholdEB_ + nHitsAboveThresholdHG_; + + return eval; } diff --git a/RecoEcal/EgammaClusterProducers/BuildFile.xml b/RecoEcal/EgammaClusterProducers/BuildFile.xml index 4986f26bbdd2f..755900bc4d8c4 100644 --- a/RecoEcal/EgammaClusterProducers/BuildFile.xml +++ b/RecoEcal/EgammaClusterProducers/BuildFile.xml @@ -4,7 +4,7 @@ - + diff --git a/RecoEcal/EgammaClusterProducers/interface/EcalBasicClusterLocalContCorrection.h b/RecoEcal/EgammaClusterProducers/interface/EcalBasicClusterLocalContCorrection.h new file mode 100644 index 0000000000000..0a712add911f6 --- /dev/null +++ b/RecoEcal/EgammaClusterProducers/interface/EcalBasicClusterLocalContCorrection.h @@ -0,0 +1,45 @@ +#ifndef RecoEcal_EgammaClusterProducers_EcalBasicClusterLocalContCorrection_h_ +#define RecoEcal_EgammaClusterProducers_EcalBasicClusterLocalContCorrection_h_ + +/** \class EcalBasicClusterLocalContCorrection + * Function to correct em object energy for energy not contained in a 5x5 crystal area in the calorimeter + * + * $Id: EcalBasicClusterLocalContCorrection.h + * $Date: + * $Revision: + * \author Federico Ferri, CEA Saclay, November 2008 + */ + +#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" +#include "DataFormats/EgammaReco/interface/BasicCluster.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "CondFormats/DataRecord/interface/EcalClusterLocalContCorrParametersRcd.h" +#include "CondFormats/EcalObjects/interface/EcalClusterLocalContCorrParameters.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Framework/interface/EventSetup.h" + +class EcalBasicClusterLocalContCorrection { +public: + EcalBasicClusterLocalContCorrection(edm::ConsumesCollector &&cc); + + // check initialization + void checkInit() const; + + // compute the correction + float operator()(const reco::BasicCluster &, const EcalRecHitCollection &) const; + + // set parameters + void init(const edm::EventSetup &es); + +private: + int getEcalModule(DetId id) const; + + const edm::ESGetToken paramsToken_; + const edm::ESGetToken caloGeometryToken_; + + EcalClusterLocalContCorrParameters const *params_; + CaloGeometry const *caloGeometry_; +}; + +#endif diff --git a/RecoEcal/EgammaClusterProducers/interface/EgammaSCCorrectionMaker.h b/RecoEcal/EgammaClusterProducers/interface/EgammaSCCorrectionMaker.h index 37bbda22fe243..88614b84638cc 100644 --- a/RecoEcal/EgammaClusterProducers/interface/EgammaSCCorrectionMaker.h +++ b/RecoEcal/EgammaClusterProducers/interface/EgammaSCCorrectionMaker.h @@ -34,16 +34,17 @@ #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" +#include "RecoEcal/EgammaClusterProducers/interface/EcalBasicClusterLocalContCorrection.h" + class EgammaSCCorrectionMaker : public edm::stream::EDProducer<> { public: explicit EgammaSCCorrectionMaker(const edm::ParameterSet&); - ~EgammaSCCorrectionMaker() override; void produce(edm::Event&, const edm::EventSetup&) override; private: std::unique_ptr energyCorrectionFunction_; std::unique_ptr crackCorrectionFunction_; - std::unique_ptr localContCorrectionFunction_; + std::unique_ptr localContCorrectionFunction_; // pointer to the correction algo object std::unique_ptr energyCorrector_; @@ -55,7 +56,6 @@ class EgammaSCCorrectionMaker : public edm::stream::EDProducer<> { std::string energyCorrectorName_; std::string crackCorrectorName_; - std::string localContCorrectorName_; int modeEB_; int modeEE_; diff --git a/RecoEcal/EgammaClusterProducers/python/correctedHybridSuperClusters_cfi.py b/RecoEcal/EgammaClusterProducers/python/correctedHybridSuperClusters_cfi.py index 3da9fa4f11c96..af68c2b51ee1f 100644 --- a/RecoEcal/EgammaClusterProducers/python/correctedHybridSuperClusters_cfi.py +++ b/RecoEcal/EgammaClusterProducers/python/correctedHybridSuperClusters_cfi.py @@ -14,7 +14,6 @@ applyCrackCorrection = cms.bool(True), crackCorrectorName = cms.string('EcalClusterCrackCorrection'), applyLocalContCorrection= cms.bool(True), - localContCorrectorName = cms.string('EcalBasicClusterLocalContCorrection'), # energy correction hyb_fCorrPset = cms.PSet( diff --git a/RecoEcal/EgammaClusterProducers/python/correctedMulti5x5SuperClustersWithPreshower_cfi.py b/RecoEcal/EgammaClusterProducers/python/correctedMulti5x5SuperClustersWithPreshower_cfi.py index f614a744e5b32..207946862d9a4 100644 --- a/RecoEcal/EgammaClusterProducers/python/correctedMulti5x5SuperClustersWithPreshower_cfi.py +++ b/RecoEcal/EgammaClusterProducers/python/correctedMulti5x5SuperClustersWithPreshower_cfi.py @@ -14,7 +14,6 @@ applyCrackCorrection = cms.bool(True), crackCorrectorName = cms.string('EcalClusterCrackCorrection'), applyLocalContCorrection= cms.bool(False), - localContCorrectorName = cms.string('EcalBasicClusterLocalContCorrection'), # energy correction fix_fCorrPset = cms.PSet( brLinearLowThr = cms.double(0.9), diff --git a/RecoEcal/EgammaClusterProducers/python/particleFlowSuperClusterECAL_cfi.py b/RecoEcal/EgammaClusterProducers/python/particleFlowSuperClusterECAL_cfi.py index 873adaa6a756e..2c81cf48e0e4f 100644 --- a/RecoEcal/EgammaClusterProducers/python/particleFlowSuperClusterECAL_cfi.py +++ b/RecoEcal/EgammaClusterProducers/python/particleFlowSuperClusterECAL_cfi.py @@ -2,18 +2,13 @@ from RecoEcal.EgammaClusterProducers.particleFlowSuperClusterECALMustache_cfi import particleFlowSuperClusterECALMustache as _particleFlowSuperClusterECALMustache -# create the EcalMustacheSCParameters record on the fly -from RecoEcal.EgammaCoreTools.EcalMustacheSCParametersESProducer_cff import * -# create the EcalSCDynamicDPhiParameters record on the fly -from RecoEcal.EgammaCoreTools.EcalSCDynamicDPhiParametersESProducer_cff import * - # define the default ECAL clustering (Mustache or Box) particleFlowSuperClusterECAL = _particleFlowSuperClusterECALMustache.clone() from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA -pp_on_AA.toModify(particleFlowSuperClusterECAL, useDynamicDPhiWindow = False) -pp_on_AA.toModify(particleFlowSuperClusterECAL, phiwidth_SuperClusterBarrel = 0.20) -pp_on_AA.toModify(particleFlowSuperClusterECAL, phiwidth_SuperClusterEndcap = 0.20) +pp_on_AA.toModify(particleFlowSuperClusterECAL, useDynamicDPhiWindow = False, + phiwidth_SuperClusterBarrel = 0.20, + phiwidth_SuperClusterEndcap = 0.20) from Configuration.ProcessModifiers.egamma_lowPt_exclusive_cff import egamma_lowPt_exclusive egamma_lowPt_exclusive.toModify(particleFlowSuperClusterECAL, diff --git a/RecoEcal/EgammaClusterProducers/python/particleFlowSuperClusteringSequence_cff.py b/RecoEcal/EgammaClusterProducers/python/particleFlowSuperClusteringSequence_cff.py index 716c5afbf9c76..793fed92e2861 100644 --- a/RecoEcal/EgammaClusterProducers/python/particleFlowSuperClusteringSequence_cff.py +++ b/RecoEcal/EgammaClusterProducers/python/particleFlowSuperClusteringSequence_cff.py @@ -28,7 +28,15 @@ particleFlowSuperClusterHGCalFromMultiCl = particleFlowSuperClusterHGCal.clone() phase2_hgcal.toModify( particleFlowSuperClusterHGCalFromMultiCl, - PFClusters = 'particleFlowClusterHGCalFromMultiCl' + PFClusters = 'particleFlowClusterHGCalFromMultiCl', + useRegression = True, +) +phase2_hgcal.toModify( particleFlowSuperClusterHGCalFromMultiCl.regressionConfig, + regressionKeyEE = "superclus_hgcal_mean_offline", + uncertaintyKeyEE = "superclus_hgcal_sigma_offline", + isPhaseII = True, + hgcalRecHits = "particleFlowRecHitHGC" + ) _phase2_hgcal_particleFlowSuperClusteringTask = particleFlowSuperClusteringTask.copy() _phase2_hgcal_particleFlowSuperClusteringTask.add(particleFlowSuperClusterHGCal) diff --git a/RecoEcal/EgammaClusterProducers/src/EcalBasicClusterLocalContCorrection.cc b/RecoEcal/EgammaClusterProducers/src/EcalBasicClusterLocalContCorrection.cc new file mode 100644 index 0000000000000..3991aecc818e8 --- /dev/null +++ b/RecoEcal/EgammaClusterProducers/src/EcalBasicClusterLocalContCorrection.cc @@ -0,0 +1,171 @@ +#include "DataFormats/EcalDetId/interface/EBDetId.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" +#include "RecoEcal/EgammaClusterProducers/interface/EcalBasicClusterLocalContCorrection.h" + +#include "TVector2.h" + +EcalBasicClusterLocalContCorrection::EcalBasicClusterLocalContCorrection(edm::ConsumesCollector &&cc) + : paramsToken_{cc.esConsumes()}, caloGeometryToken_{cc.esConsumes()} {} + +void EcalBasicClusterLocalContCorrection::init(const edm::EventSetup &es) { + params_ = &es.getData(paramsToken_); + caloGeometry_ = &es.getData(caloGeometryToken_); +} + +void EcalBasicClusterLocalContCorrection::checkInit() const { + if (!params_) { + // non-initialized function parameters: throw exception + throw cms::Exception("EcalBasicClusterLocalContCorrection::checkInit()") + << "Trying to access an uninitialized crack correction function.\n" + "Please call `init( edm::EventSetup &)' before any use of the function.\n"; + } +} + +using namespace std; +using namespace edm; + +float EcalBasicClusterLocalContCorrection::operator()(const reco::BasicCluster &basicCluster, + const EcalRecHitCollection &recHit) const { + checkInit(); + + // number of parameters needed by this parametrization + constexpr size_t nparams = 24; + + //correction factor to be returned, and to be calculated in this present function: + double correction_factor = 1.; + double fetacor = 1.; //eta dependent part of the correction factor + double fphicor = 1.; //phi dependent part of the correction factor + + //--------------if barrel calculate local position wrt xtal center ------------------- + const CaloSubdetectorGeometry *geom = + caloGeometry_->getSubdetectorGeometry(DetId::Ecal, EcalBarrel); //EcalBarrel = 1 + + const math::XYZPoint &position_ = basicCluster.position(); + double Theta = -position_.theta() + 0.5 * M_PI; + double Eta = position_.eta(); + double Phi = TVector2::Phi_mpi_pi(position_.phi()); + + //Calculate expected depth of the maximum shower from energy (like in PositionCalc::Calculate_Location()): + // The parameters X0 and T0 are hardcoded here because these values were used to calculate the corrections: + constexpr float X0 = 0.89; + constexpr float T0 = 7.4; + double depth = X0 * (T0 + log(basicCluster.energy())); + + //search which crystal is closest to the cluster position and call it crystalseed: + //std::vector crystals_vector = *scRef.getHitsByDetId(); //deprecated + std::vector > crystals_vector = basicCluster.hitsAndFractions(); + float dphimin = 999.; + float detamin = 999.; + int ietaclosest = 0; + int iphiclosest = 0; + + for (unsigned int icry = 0; icry != crystals_vector.size(); ++icry) { + EBDetId crystal(crystals_vector[icry].first); + auto cell = geom->getGeometry(crystal); // problema qui + GlobalPoint center_pos = cell->getPosition(depth); + double EtaCentr = center_pos.eta(); + double PhiCentr = TVector2::Phi_mpi_pi(center_pos.phi()); + if (std::abs(EtaCentr - Eta) < detamin) { + detamin = std::abs(EtaCentr - Eta); + ietaclosest = crystal.ieta(); + } + if (std::abs(TVector2::Phi_mpi_pi(PhiCentr - Phi)) < dphimin) { + dphimin = std::abs(TVector2::Phi_mpi_pi(PhiCentr - Phi)); + iphiclosest = crystal.iphi(); + } + } + + EBDetId crystalseed(ietaclosest, iphiclosest); + + // Get center cell position from shower depth + auto cell = geom->getGeometry(crystalseed); + GlobalPoint center_pos = cell->getPosition(depth); + + //PHI + double PhiCentr = TVector2::Phi_mpi_pi(center_pos.phi()); + double PhiWidth = (M_PI / 180.); + double PhiCry = (TVector2::Phi_mpi_pi(Phi - PhiCentr)) / PhiWidth; + if (PhiCry > 0.5) + PhiCry = 0.5; + if (PhiCry < -0.5) + PhiCry = -0.5; + //flip to take into account ECAL barrel symmetries: + if (ietaclosest < 0) + PhiCry *= -1.; + + //ETA + double ThetaCentr = -center_pos.theta() + 0.5 * M_PI; + double ThetaWidth = (M_PI / 180.) * std::cos(ThetaCentr); + double EtaCry = (Theta - ThetaCentr) / ThetaWidth; + if (EtaCry > 0.5) + EtaCry = 0.5; + if (EtaCry < -0.5) + EtaCry = -0.5; + //flip to take into account ECAL barrel symmetries: + if (ietaclosest < 0) + EtaCry *= -1.; + + //-------------- end calculate local position ------------- + + size_t payloadsize = params_->params().size(); + + if (payloadsize < nparams) + edm::LogError("Invalid Payload") << "Parametrization requires " << nparams << " parameters but only " << payloadsize + << " are found in DB. Perhaps incompatible Global Tag" << std::endl; + + if (payloadsize > nparams) + edm::LogWarning("Size mismatch ") << "Parametrization requires " << nparams << " parameters but " << payloadsize + << " are found in DB. Perhaps incompatible Global Tag" << std::endl; + + std::pair localPosition(EtaCry, PhiCry); + + //--- local cluster coordinates + float localEta = localPosition.first; + float localPhi = localPosition.second; + + //--- ecal module + int imod = getEcalModule(basicCluster.seed()); + + //-- corrections parameters + float pe[3], pp[3]; + pe[0] = (params_->params())[0 + imod * 3]; + pe[1] = (params_->params())[1 + imod * 3]; + pe[2] = (params_->params())[2 + imod * 3]; + pp[0] = (params_->params())[12 + imod * 3]; + pp[1] = (params_->params())[13 + imod * 3]; + pp[2] = (params_->params())[14 + imod * 3]; + + //--- correction vs local eta + fetacor = pe[0] + pe[1] * localEta + pe[2] * localEta * localEta; + + //--- correction vs local phi + fphicor = pp[0] + pp[1] * localPhi + pp[2] * localPhi * localPhi; + + //if the seed crystal is neighbourgh of a supermodule border, don't apply the phi dependent containment corrections, but use the larger crack corrections instead. + int iphimod20 = std::abs(iphiclosest % 20); + if (iphimod20 <= 1) + fphicor = 1.; + + correction_factor = (1. / fetacor) * (1. / fphicor); + + //return the correction factor. Use it to multiply the cluster energy. + return correction_factor; +} + +//------------------------------------------------------------------------------------------------------ +int EcalBasicClusterLocalContCorrection::getEcalModule(DetId id) const { + int mod = 0; + int ieta = (EBDetId(id)).ieta(); + + if (fabs(ieta) <= 25) + mod = 0; + if (fabs(ieta) > 25 && fabs(ieta) <= 45) + mod = 1; + if (fabs(ieta) > 45 && fabs(ieta) <= 65) + mod = 2; + if (fabs(ieta) > 65 && fabs(ieta) <= 85) + mod = 3; + + return (mod); +} diff --git a/RecoEcal/EgammaClusterProducers/src/EgammaSCCorrectionMaker.cc b/RecoEcal/EgammaClusterProducers/src/EgammaSCCorrectionMaker.cc index 0a0f414910f28..3bfa2391ec30e 100644 --- a/RecoEcal/EgammaClusterProducers/src/EgammaSCCorrectionMaker.cc +++ b/RecoEcal/EgammaClusterProducers/src/EgammaSCCorrectionMaker.cc @@ -58,9 +58,6 @@ EgammaSCCorrectionMaker::EgammaSCCorrectionMaker(const edm::ParameterSet& ps) { crackCorrectorName_ = ps.existsAs("crackCorrectorName") ? ps.getParameter("crackCorrectorName") : std::string("EcalClusterCrackCorrection"); - localContCorrectorName_ = ps.existsAs("localContCorrectorName") - ? ps.getParameter("localContCorrectorName") - : std::string("EcalBasicClusterLocalContCorrection"); modeEB_ = ps.getParameter("modeEB"); modeEE_ = ps.getParameter("modeEE"); @@ -74,7 +71,7 @@ EgammaSCCorrectionMaker::EgammaSCCorrectionMaker(const edm::ParameterSet& ps) { produces(outputCollection_); // instanciate the correction algo object - energyCorrector_ = std::make_unique(sigmaElectronicNoise_, sCAlgo_, fCorrPset); + energyCorrector_ = std::make_unique(sigmaElectronicNoise_); // energy correction class if (applyEnergyCorrection_) @@ -85,11 +82,9 @@ EgammaSCCorrectionMaker::EgammaSCCorrectionMaker(const edm::ParameterSet& ps) { crackCorrectionFunction_ = EcalClusterFunctionFactory::get()->create(crackCorrectorName_, ps); if (applyLocalContCorrection_) - localContCorrectionFunction_ = EcalClusterFunctionFactory::get()->create(localContCorrectorName_, ps); + localContCorrectionFunction_ = std::make_unique(consumesCollector()); } -EgammaSCCorrectionMaker::~EgammaSCCorrectionMaker() = default; - void EgammaSCCorrectionMaker::produce(edm::Event& evt, const edm::EventSetup& es) { using namespace edm; @@ -160,12 +155,13 @@ void EgammaSCCorrectionMaker::produce(edm::Event& evt, const edm::EventSetup& es enecorrClus = *aClus; if (applyCrackCorrection_) - crackcorrClus = energyCorrector_->applyCrackCorrection(enecorrClus, crackCorrectionFunction_.get()); + crackcorrClus = EgammaSCEnergyCorrectionAlgo::applyCrackCorrection(enecorrClus, crackCorrectionFunction_.get()); else crackcorrClus = enecorrClus; if (applyLocalContCorrection_) - localContCorrClus = energyCorrector_->applyLocalContCorrection(crackcorrClus, localContCorrectionFunction_.get()); + localContCorrClus = + EgammaSCEnergyCorrectionAlgo::applyLocalContCorrection(crackcorrClus, *localContCorrectionFunction_); else localContCorrClus = crackcorrClus; diff --git a/RecoEcal/EgammaClusterProducers/src/PFECALSuperClusterProducer.cc b/RecoEcal/EgammaClusterProducers/src/PFECALSuperClusterProducer.cc index 4ab57e1d1bf29..64946dfcc2ffa 100644 --- a/RecoEcal/EgammaClusterProducers/src/PFECALSuperClusterProducer.cc +++ b/RecoEcal/EgammaClusterProducers/src/PFECALSuperClusterProducer.cc @@ -3,6 +3,7 @@ #include #include "RecoEcal/EgammaClusterAlgos/interface/PFECALSuperClusterAlgo.h" +#include "RecoEcal/EgammaClusterAlgos/interface/SCEnergyCorrectorSemiParm.h" #include "DataFormats/ParticleFlowReco/interface/PFRecHit.h" @@ -21,7 +22,7 @@ #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "CondFormats/DataRecord/interface/GBRWrapperRcd.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/EcalRecHit/interface/EcalRecHit.h" @@ -51,8 +52,6 @@ PFECALSuperClusterProducer::PFECALSuperClusterProducer(const edm::ParameterSet& isOOTCollection_ = iConfig.getParameter("isOOTCollection"); superClusterAlgo_.setIsOOTCollection(isOOTCollection_); - superClusterAlgo_.setTokens(iConfig, consumesCollector()); - std::string _typename = iConfig.getParameter("ClusteringType"); if (_typename == ClusterType__BOX) { _theclusteringtype = PFECALSuperClusterAlgo::kBOX; @@ -62,6 +61,10 @@ PFECALSuperClusterProducer::PFECALSuperClusterProducer(const edm::ParameterSet& throw cms::Exception("InvalidClusteringType") << "You have not chosen a valid clustering type," << " please choose from \"Box\" or \"Mustache\"!"; } + superClusterAlgo_.setClusteringType(_theclusteringtype); + superClusterAlgo_.setUseDynamicDPhi(iConfig.getParameter("useDynamicDPhiWindow")); + // clusteringType and useDynamicDPhi need to be defined before setting the tokens in order to esConsume only the necessary records + superClusterAlgo_.setTokens(iConfig, consumesCollector()); std::string _weightname = iConfig.getParameter("EnergyWeight"); if (_weightname == EnergyWeight__Raw) { @@ -79,8 +82,6 @@ PFECALSuperClusterProducer::PFECALSuperClusterProducer(const edm::ParameterSet& // parameters for clustering bool seedThresholdIsET = iConfig.getParameter("seedThresholdIsET"); - bool useDynamicDPhi = iConfig.getParameter("useDynamicDPhiWindow"); - double threshPFClusterSeedBarrel = iConfig.getParameter("thresh_PFClusterSeedBarrel"); double threshPFClusterBarrel = iConfig.getParameter("thresh_PFClusterBarrel"); @@ -102,10 +103,8 @@ PFECALSuperClusterProducer::PFECALSuperClusterProducer(const edm::ParameterSet& bool dropUnseedable = iConfig.getParameter("dropUnseedable"); superClusterAlgo_.setVerbosityLevel(verbose_); - superClusterAlgo_.setClusteringType(_theclusteringtype); superClusterAlgo_.setEnergyWeighting(_theenergyweight); superClusterAlgo_.setUseETForSeeding(seedThresholdIsET); - superClusterAlgo_.setUseDynamicDPhi(useDynamicDPhi); superClusterAlgo_.setThreshSuperClusterEt(iConfig.getParameter("thresh_SCEt")); @@ -306,20 +305,7 @@ void PFECALSuperClusterProducer::fillDescriptions(edm::ConfigurationDescriptions desc.add("phiwidth_SuperClusterEndcap", 0.6); desc.add("useDynamicDPhiWindow", true); desc.add("PFSuperClusterCollectionBarrel", "particleFlowSuperClusterECALBarrel"); - { - edm::ParameterSetDescription psd0; - psd0.add("isHLT", false); - psd0.add("applySigmaIetaIphiBug", false); - psd0.add("ecalRecHitsEE", edm::InputTag("ecalRecHit", "EcalRecHitsEE")); - psd0.add("ecalRecHitsEB", edm::InputTag("ecalRecHit", "EcalRecHitsEB")); - psd0.add("regressionKeyEB", "pfscecal_EBCorrection_offline_v2"); - psd0.add("regressionKeyEE", "pfscecal_EECorrection_offline_v2"); - psd0.add("uncertaintyKeyEB", "pfscecal_EBUncertainty_offline_v2"); - psd0.add("uncertaintyKeyEE", "pfscecal_EEUncertainty_offline_v2"); - psd0.add("vertexCollection", edm::InputTag("offlinePrimaryVertices")); - psd0.add("eRecHitThreshold", 1.); - desc.add("regressionConfig", psd0); - } + desc.add("regressionConfig", SCEnergyCorrectorSemiParm::makePSetDescription()); desc.add("applyCrackCorrections", false); desc.add("satelliteClusterSeedThreshold", 50.0); desc.add("etawidth_SuperClusterBarrel", 0.04); diff --git a/RecoEcal/EgammaClusterProducers/src/SCEnergyCorrectorProducer.cc b/RecoEcal/EgammaClusterProducers/src/SCEnergyCorrectorProducer.cc new file mode 100644 index 0000000000000..8ff299aa0dee7 --- /dev/null +++ b/RecoEcal/EgammaClusterProducers/src/SCEnergyCorrectorProducer.cc @@ -0,0 +1,79 @@ +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/Common/interface/ValueMap.h" +#include "RecoEcal/EgammaClusterAlgos/interface/SCEnergyCorrectorSemiParm.h" + +#include + +//A simple producer which produces a set of corrected superclusters +//Note this is more for testing and development and is not really meant for production +//although its perfectly possible somebody could use it in some prod workflow +//author S. Harper (RAL/CERN) + +class SCEnergyCorrectorProducer : public edm::stream::EDProducer<> { +public: + explicit SCEnergyCorrectorProducer(const edm::ParameterSet& iConfig); + + void beginLuminosityBlock(const edm::LuminosityBlock& iLumi, const edm::EventSetup& iSetup) override; + void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + SCEnergyCorrectorSemiParm energyCorrector_; + const edm::EDGetTokenT inputSCToken_; + const bool writeFeatures_; +}; + +SCEnergyCorrectorProducer::SCEnergyCorrectorProducer(const edm::ParameterSet& iConfig) + : energyCorrector_(iConfig.getParameterSet("correctorCfg"), consumesCollector()), + inputSCToken_(consumes(iConfig.getParameter("inputSCs"))), + writeFeatures_(iConfig.getParameter("writeFeatures")) { + produces(); + if (writeFeatures_) { + produces>>("features"); + } +} + +void SCEnergyCorrectorProducer::beginLuminosityBlock(const edm::LuminosityBlock& iLumi, const edm::EventSetup& iSetup) { + energyCorrector_.setEventSetup(iSetup); +} + +void SCEnergyCorrectorProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + energyCorrector_.setEvent(iEvent); + + auto inputSCs = iEvent.get(inputSCToken_); + auto corrSCs = std::make_unique(); + std::vector> scFeatures; + for (const auto& inputSC : inputSCs) { + corrSCs->push_back(inputSC); + energyCorrector_.modifyObject(corrSCs->back()); + if (writeFeatures_) { + scFeatures.emplace_back(energyCorrector_.getRegData(corrSCs->back())); + } + } + + auto scHandle = iEvent.put(std::move(corrSCs)); + + if (writeFeatures_) { + auto valMap = std::make_unique>>(); + edm::ValueMap>::Filler filler(*valMap); + filler.insert(scHandle, scFeatures.begin(), scFeatures.end()); + filler.fill(); + iEvent.put(std::move(valMap), "features"); + } +} + +void SCEnergyCorrectorProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("correctorCfg", SCEnergyCorrectorSemiParm::makePSetDescription()); + desc.add("writeFeatures", false); + desc.add("inputSCs", edm::InputTag("particleFlowSuperClusterECAL")); + descriptions.add("scEnergyCorrectorProducer", desc); +} + +DEFINE_FWK_MODULE(SCEnergyCorrectorProducer); diff --git a/RecoEcal/EgammaCoreTools/plugins/EcalBasicClusterLocalContCorrection.cc b/RecoEcal/EgammaCoreTools/plugins/EcalBasicClusterLocalContCorrection.cc deleted file mode 100644 index 134c928e4eae3..0000000000000 --- a/RecoEcal/EgammaCoreTools/plugins/EcalBasicClusterLocalContCorrection.cc +++ /dev/null @@ -1,219 +0,0 @@ -/** \class EcalBasicClusterLocalContCorrection - * Function to correct em object energy for energy not contained in a 5x5 crystal area in the calorimeter - * - * $Id: EcalBasicClusterLocalContCorrection.h - * $Date: - * $Revision: - * \author Federico Ferri, CEA Saclay, November 2008 - */ - -#include "DataFormats/EcalDetId/interface/EBDetId.h" -#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "CondFormats/DataRecord/interface/EcalClusterLocalContCorrParametersRcd.h" -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterFunctionBaseClass.h" -#include "CondFormats/EcalObjects/interface/EcalClusterLocalContCorrParameters.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/EventSetup.h" - -#include "TVector2.h" - -class EcalBasicClusterLocalContCorrection : public EcalClusterFunctionBaseClass { -public: - EcalBasicClusterLocalContCorrection(const edm::ParameterSet &){}; - - // get/set explicit methods for parameters - const EcalClusterLocalContCorrParameters *getParameters() const { return params_; } - // check initialization - void checkInit() const; - - // compute the correction - float getValue(const reco::BasicCluster &, const EcalRecHitCollection &) const override; - float getValue(const reco::SuperCluster &, const int mode) const override; - - // set parameters - void init(const edm::EventSetup &es) override; - -private: - int getEcalModule(DetId id) const; - - edm::ESHandle esParams_; - const EcalClusterLocalContCorrParameters *params_; - const edm::EventSetup *es_; //needed to access the ECAL geometry -}; - -void EcalBasicClusterLocalContCorrection::init(const edm::EventSetup &es) { - es.get().get(esParams_); - params_ = esParams_.product(); - es_ = &es; //needed to access the ECAL geometry -} - -void EcalBasicClusterLocalContCorrection::checkInit() const { - if (!params_) { - // non-initialized function parameters: throw exception - throw cms::Exception("EcalBasicClusterLocalContCorrection::checkInit()") - << "Trying to access an uninitialized crack correction function.\n" - "Please call `init( edm::EventSetup &)' before any use of the function.\n"; - } -} - -using namespace std; -using namespace edm; - -float EcalBasicClusterLocalContCorrection::getValue(const reco::SuperCluster &superCluster, const int mode) const { - //checkInit(); - return 1; -} - -float EcalBasicClusterLocalContCorrection::getValue(const reco::BasicCluster &basicCluster, - const EcalRecHitCollection &recHit) const { - checkInit(); - - // number of parameters needed by this parametrization - size_t nparams = 24; - - //correction factor to be returned, and to be calculated in this present function: - double correction_factor = 1.; - double fetacor = 1.; //eta dependent part of the correction factor - double fphicor = 1.; //phi dependent part of the correction factor - - //--------------if barrel calculate local position wrt xtal center ------------------- - edm::ESHandle caloGeometry; - es_->get().get(caloGeometry); - const CaloSubdetectorGeometry *geom = caloGeometry->getSubdetectorGeometry(DetId::Ecal, EcalBarrel); //EcalBarrel = 1 - - const math::XYZPoint &position_ = basicCluster.position(); - double Theta = -position_.theta() + 0.5 * M_PI; - double Eta = position_.eta(); - double Phi = TVector2::Phi_mpi_pi(position_.phi()); - - //Calculate expected depth of the maximum shower from energy (like in PositionCalc::Calculate_Location()): - // The parameters X0 and T0 are hardcoded here because these values were used to calculate the corrections: - const float X0 = 0.89; - const float T0 = 7.4; - double depth = X0 * (T0 + log(basicCluster.energy())); - - //search which crystal is closest to the cluster position and call it crystalseed: - //std::vector crystals_vector = *scRef.getHitsByDetId(); //deprecated - std::vector > crystals_vector = basicCluster.hitsAndFractions(); - float dphimin = 999.; - float detamin = 999.; - int ietaclosest = 0; - int iphiclosest = 0; - - for (unsigned int icry = 0; icry != crystals_vector.size(); ++icry) { - EBDetId crystal(crystals_vector[icry].first); - auto cell = geom->getGeometry(crystal); // problema qui - GlobalPoint center_pos = cell->getPosition(depth); - double EtaCentr = center_pos.eta(); - double PhiCentr = TVector2::Phi_mpi_pi(center_pos.phi()); - if (std::abs(EtaCentr - Eta) < detamin) { - detamin = std::abs(EtaCentr - Eta); - ietaclosest = crystal.ieta(); - } - if (std::abs(TVector2::Phi_mpi_pi(PhiCentr - Phi)) < dphimin) { - dphimin = std::abs(TVector2::Phi_mpi_pi(PhiCentr - Phi)); - iphiclosest = crystal.iphi(); - } - } - - EBDetId crystalseed(ietaclosest, iphiclosest); - - // Get center cell position from shower depth - auto cell = geom->getGeometry(crystalseed); - GlobalPoint center_pos = cell->getPosition(depth); - - //PHI - double PhiCentr = TVector2::Phi_mpi_pi(center_pos.phi()); - double PhiWidth = (M_PI / 180.); - double PhiCry = (TVector2::Phi_mpi_pi(Phi - PhiCentr)) / PhiWidth; - if (PhiCry > 0.5) - PhiCry = 0.5; - if (PhiCry < -0.5) - PhiCry = -0.5; - //flip to take into account ECAL barrel symmetries: - if (ietaclosest < 0) - PhiCry *= -1.; - - //ETA - double ThetaCentr = -center_pos.theta() + 0.5 * M_PI; - double ThetaWidth = (M_PI / 180.) * std::cos(ThetaCentr); - double EtaCry = (Theta - ThetaCentr) / ThetaWidth; - if (EtaCry > 0.5) - EtaCry = 0.5; - if (EtaCry < -0.5) - EtaCry = -0.5; - //flip to take into account ECAL barrel symmetries: - if (ietaclosest < 0) - EtaCry *= -1.; - - //-------------- end calculate local position ------------- - - size_t payloadsize = params_->params().size(); - - if (payloadsize < nparams) - edm::LogError("Invalid Payload") << "Parametrization requires " << nparams << " parameters but only " << payloadsize - << " are found in DB. Perhaps incompatible Global Tag" << std::endl; - - if (payloadsize > nparams) - edm::LogWarning("Size mismatch ") << "Parametrization requires " << nparams << " parameters but " << payloadsize - << " are found in DB. Perhaps incompatible Global Tag" << std::endl; - - std::pair localPosition(EtaCry, PhiCry); - - //--- local cluster coordinates - float localEta = localPosition.first; - float localPhi = localPosition.second; - - //--- ecal module - int imod = getEcalModule(basicCluster.seed()); - - //-- corrections parameters - float pe[3], pp[3]; - pe[0] = (params_->params())[0 + imod * 3]; - pe[1] = (params_->params())[1 + imod * 3]; - pe[2] = (params_->params())[2 + imod * 3]; - pp[0] = (params_->params())[12 + imod * 3]; - pp[1] = (params_->params())[13 + imod * 3]; - pp[2] = (params_->params())[14 + imod * 3]; - - //--- correction vs local eta - fetacor = pe[0] + pe[1] * localEta + pe[2] * localEta * localEta; - - //--- correction vs local phi - fphicor = pp[0] + pp[1] * localPhi + pp[2] * localPhi * localPhi; - - //if the seed crystal is neighbourgh of a supermodule border, don't apply the phi dependent containment corrections, but use the larger crack corrections instead. - int iphimod20 = std::abs(iphiclosest % 20); - if (iphimod20 <= 1) - fphicor = 1.; - - correction_factor = (1. / fetacor) * (1. / fphicor); - - //return the correction factor. Use it to multiply the cluster energy. - return correction_factor; -} - -//------------------------------------------------------------------------------------------------------ -int EcalBasicClusterLocalContCorrection::getEcalModule(DetId id) const { - int mod = 0; - int ieta = (EBDetId(id)).ieta(); - - if (fabs(ieta) <= 25) - mod = 0; - if (fabs(ieta) > 25 && fabs(ieta) <= 45) - mod = 1; - if (fabs(ieta) > 45 && fabs(ieta) <= 65) - mod = 2; - if (fabs(ieta) > 65 && fabs(ieta) <= 85) - mod = 3; - - return (mod); -} -//------------------------------------------------------------------------------------------------------ - -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterFunctionFactory.h" -DEFINE_EDM_PLUGIN(EcalClusterFunctionFactory, - EcalBasicClusterLocalContCorrection, - "EcalBasicClusterLocalContCorrection"); diff --git a/RecoEcal/EgammaCoreTools/plugins/EcalClusterEnergyUncertaintyObjectSpecific.cc b/RecoEcal/EgammaCoreTools/plugins/EcalClusterEnergyUncertaintyObjectSpecific.cc deleted file mode 100644 index 5465089f96f4c..0000000000000 --- a/RecoEcal/EgammaCoreTools/plugins/EcalClusterEnergyUncertaintyObjectSpecific.cc +++ /dev/null @@ -1,280 +0,0 @@ -/** \class EcalClusterEnergyUncertainty - * Function that provides uncertainty on supercluster energy measurement - * Available numbers: total effective uncertainty (in GeV) - * assymetric uncertainties (positive and negative) - * - * $Id: EcalClusterEnergyUncertainty.h - * $Date: - * $Revision: - * \author Nicolas Chanon, December 2011 - */ - -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterFunctionBaseClass.h" -#include "CondFormats/EcalObjects/interface/EcalClusterEnergyUncertaintyParameters.h" -#include "FWCore/Framework/interface/EventSetup.h" - -class EcalClusterEnergyUncertaintyObjectSpecific : public EcalClusterFunctionBaseClass { -public: - EcalClusterEnergyUncertaintyObjectSpecific(const edm::ParameterSet &){}; - - // check initialization - void checkInit() const {} - - // compute the correction - float getValue(const reco::SuperCluster &, const int mode) const override; - float getValue(const reco::BasicCluster &, const EcalRecHitCollection &) const override { return 0.; }; - - // set parameters - void init(const edm::EventSetup &es) override {} -}; - -float EcalClusterEnergyUncertaintyObjectSpecific::getValue(const reco::SuperCluster &superCluster, - const int mode) const { - checkInit(); - - // mode = 0 returns electron energy uncertainty - - float en = superCluster.energy(); - float eta = fabs(superCluster.eta()); - float et = en / cosh(eta); - float brem = superCluster.etaWidth() != 0 ? superCluster.phiWidth() / superCluster.etaWidth() : 0; - - const int nBinsEta = 6; - const float EtaBins[nBinsEta + 1] = {0.0, 0.7, 1.15, 1.44, 1.56, 2.0, 2.5}; - - const int nBinsBrem = 6; - const float BremBins[nBinsBrem + 1] = {0.8, 1.0, 2.0, 3.0, 4.0, 5.0, 10.0}; - - float par0[nBinsEta][nBinsBrem]; - float par1[nBinsEta][nBinsBrem]; - float par2[nBinsEta][nBinsBrem]; - float par3[nBinsEta][nBinsBrem]; - - par0[0][0] = 0.00640519; - par1[0][0] = 0.257578; - par2[0][0] = 1.72437; - par3[0][0] = 4.04686e-06; - - par0[0][1] = 0.00709569; - par1[0][1] = 0.279844; - par2[0][1] = 1.13789; - par3[0][1] = 1.16239e-05; - - par0[0][2] = 0.0075544; - par1[0][2] = 0.341346; - par2[0][2] = 0.513396; - par3[0][2] = 2.90054e-06; - - par0[0][3] = 0.00659365; - par1[0][3] = 0.517649; - par2[0][3] = -3.1847; - par3[0][3] = 7.37152e-07; - - par0[0][4] = 0.00771696; - par1[0][4] = 0.492897; - par2[0][4] = -1.42222; - par3[0][4] = 0.000358677; - - par0[0][5] = 0.00561532; - par1[0][5] = 0.655138; - par2[0][5] = -3.29839; - par3[0][5] = 6.25898e-07; - - par0[1][0] = 0.00273646; - par1[1][0] = 0.714568; - par2[1][0] = -4.82956; - par3[1][0] = 4.45878e-07; - - par0[1][1] = 0.00679797; - par1[1][1] = 0.472856; - par2[1][1] = -0.281699; - par3[1][1] = 5.46479e-05; - - par0[1][2] = 0.00845532; - par1[1][2] = 0.611624; - par2[1][2] = -1.10104; - par3[1][2] = 1.16803e-05; - - par0[1][3] = 0.00831068; - par1[1][3] = 0.853653; - par2[1][3] = -4.23761; - par3[1][3] = 2.61247e-05; - - par0[1][4] = 0.00845457; - par1[1][4] = 0.984985; - par2[1][4] = -5.19548; - par3[1][4] = 2.05044e-07; - - par0[1][5] = 0.0110227; - par1[1][5] = 1.00356; - par2[1][5] = -4.31936; - par3[1][5] = 0.14384; - - par0[2][0] = -0.00192618; - par1[2][0] = 1.69986; - par2[2][0] = -16.4355; - par3[2][0] = 1.94946e-06; - - par0[2][1] = 0.0067622; - par1[2][1] = 0.792209; - par2[2][1] = -1.18521; - par3[2][1] = 0.066577; - - par0[2][2] = 0.00761595; - par1[2][2] = 1.03058; - par2[2][2] = -4.17237; - par3[2][2] = 0.168543; - - par0[2][3] = 0.0119179; - par1[2][3] = 0.910145; - par2[2][3] = -2.14122; - par3[2][3] = 0.00342264; - - par0[2][4] = 0.0139921; - par1[2][4] = 1.01488; - par2[2][4] = -2.46637; - par3[2][4] = 0.0458434; - - par0[2][5] = 0.013724; - par1[2][5] = 1.49078; - par2[2][5] = -6.60661; - par3[2][5] = 0.297821; - - par0[3][0] = -0.00197909; - par1[3][0] = 4.40696; - par2[3][0] = -4.88737; - par3[3][0] = 4.99999; - - par0[3][1] = 0.0340196; - par1[3][1] = 3.86278; - par2[3][1] = -10.899; - par3[3][1] = 0.130098; - - par0[3][2] = 0.0102397; - par1[3][2] = 8.99643; - par2[3][2] = -31.5122; - par3[3][2] = 0.00118335; - - par0[3][3] = 0.0110891; - par1[3][3] = 8.01794; - par2[3][3] = -21.9038; - par3[3][3] = 0.000245975; - - par0[3][4] = 0.0328931; - par1[3][4] = 4.73441; - par2[3][4] = -12.1148; - par3[3][4] = 3.01721e-05; - - par0[3][5] = 0.0395614; - par1[3][5] = 3.54327; - par2[3][5] = -12.6514; - par3[3][5] = 0.119761; - - par0[4][0] = 0.0121809; - par1[4][0] = 0.965608; - par2[4][0] = -4.19667; - par3[4][0] = 0.129896; - - par0[4][1] = 0.0168951; - par1[4][1] = 1.0218; - par2[4][1] = -4.03078; - par3[4][1] = 0.374291; - - par0[4][2] = 0.0213549; - par1[4][2] = 1.29613; - par2[4][2] = -4.89024; - par3[4][2] = 0.0297165; - - par0[4][3] = 0.0262602; - par1[4][3] = 1.41674; - par2[4][3] = -5.94928; - par3[4][3] = 0.19298; - - par0[4][4] = 0.0334892; - par1[4][4] = 1.48572; - par2[4][4] = -5.3175; - par3[4][4] = 0.0157013; - - par0[4][5] = 0.0347093; - par1[4][5] = 1.63127; - par2[4][5] = -7.27426; - par3[4][5] = 0.201164; - - par0[5][0] = 0.0185321; - par1[5][0] = 0.255205; - par2[5][0] = 1.56798; - par3[5][0] = 5.07655e-11; - - par0[5][1] = 0.0182718; - par1[5][1] = 0.459086; - par2[5][1] = -0.48198; - par3[5][1] = 0.00114946; - - par0[5][2] = 0.0175505; - par1[5][2] = 0.92848; - par2[5][2] = -4.52737; - par3[5][2] = 0.154827; - - par0[5][3] = 0.0233833; - par1[5][3] = 0.804105; - par2[5][3] = -3.75131; - par3[5][3] = 2.84172; - - par0[5][4] = 0.0334892; - par1[5][4] = 1.48572; - par2[5][4] = -5.3175; - par3[5][4] = 0.0157013; - - par0[5][5] = 0.0347093; - par1[5][5] = 1.63127; - par2[5][5] = -7.27426; - par3[5][5] = 0.201164; - - int iEtaSl = -1; - for (int iEta = 0; iEta < nBinsEta; ++iEta) { - if (EtaBins[iEta] <= eta && eta < EtaBins[iEta + 1]) { - iEtaSl = iEta; - } - } - - int iBremSl = -1; - for (int iBrem = 0; iBrem < nBinsBrem; ++iBrem) { - if (BremBins[iBrem] <= brem && brem < BremBins[iBrem + 1]) { - iBremSl = iBrem; - } - } - - //this code is confusing as it has no concept of under and overflow bins - //we will use Et as an example but also applies to eta - //underflow is 1st bin (naively currently labeled as 0 to 0.7, its really <0.7) - //overflow is the final bin (naviely currently labeled as 5 to 10, its really >=5) - //logic: if brem is 0<=brem <0.7 it will be already set to the 1st bin, this checks if its <0 - //logic: if brem is 5<=brem<10 it will be set to the last bin so this then checks if its >5 at which point - //it also assigns it to the last bin. The value of 5 will have already been assigned in the for - //loop above to the last bin so its okay that its a >5 test - if (eta > EtaBins[nBinsEta - 1]) - iEtaSl = nBinsEta - 1; - if (brem < BremBins[0]) - iBremSl = 0; - if (brem > BremBins[nBinsBrem - 1]) - iBremSl = nBinsBrem - 1; - - float uncertainty = 0; - if (et <= 5) - uncertainty = par0[iEtaSl][iBremSl] + par1[iEtaSl][iBremSl] / (5 - par2[iEtaSl][iBremSl]) + - par3[iEtaSl][iBremSl] / ((5 - par2[iEtaSl][iBremSl]) * (5 - par2[iEtaSl][iBremSl])); - if (et >= 200) - uncertainty = par0[iEtaSl][iBremSl] + par1[iEtaSl][iBremSl] / (200 - par2[iEtaSl][iBremSl]) + - par3[iEtaSl][iBremSl] / ((200 - par2[iEtaSl][iBremSl]) * (200 - par2[iEtaSl][iBremSl])); - - if (et > 5 && et < 200) - uncertainty = par0[iEtaSl][iBremSl] + par1[iEtaSl][iBremSl] / (et - par2[iEtaSl][iBremSl]) + - par3[iEtaSl][iBremSl] / ((et - par2[iEtaSl][iBremSl]) * (et - par2[iEtaSl][iBremSl])); - - return (uncertainty * en); -} - -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterFunctionFactory.h" -DEFINE_EDM_PLUGIN(EcalClusterFunctionFactory, - EcalClusterEnergyUncertaintyObjectSpecific, - "EcalClusterEnergyUncertaintyObjectSpecific"); diff --git a/RecoEgamma/Configuration/python/RecoEgamma_EventContent_cff.py b/RecoEgamma/Configuration/python/RecoEgamma_EventContent_cff.py index 42358054685bf..f14d59c228b0f 100644 --- a/RecoEgamma/Configuration/python/RecoEgamma_EventContent_cff.py +++ b/RecoEgamma/Configuration/python/RecoEgamma_EventContent_cff.py @@ -46,7 +46,8 @@ 'keep *_lowPtGsfToTrackLinks_*_*', 'keep recoSuperClusters_lowPtGsfElectronSuperClusters_*_*', 'keep floatedmValueMap_lowPtGsfElectronSeedValueMaps_*_*', - 'keep floatedmValueMap_lowPtGsfElectronID_*_*') + 'keep floatedmValueMap_rekeyLowPtGsfElectronSeedValueMaps_*_*', + 'keep floatedmValueMap_lowPtGsfElectronID_*_*') ) # mods for HGCAL _phase2_hgcal_RecoEgamma_tokeep = [ 'keep *_ecalDrivenGsfElectronCores_*_*', diff --git a/RecoEgamma/EgammaElectronAlgos/BuildFile.xml b/RecoEgamma/EgammaElectronAlgos/BuildFile.xml index f17c884a74b73..5f317a9fc5f8b 100644 --- a/RecoEgamma/EgammaElectronAlgos/BuildFile.xml +++ b/RecoEgamma/EgammaElectronAlgos/BuildFile.xml @@ -22,7 +22,7 @@ - + diff --git a/RecoEgamma/EgammaElectronAlgos/interface/GsfElectronAlgo.h b/RecoEgamma/EgammaElectronAlgos/interface/GsfElectronAlgo.h index 5a866e3c6675d..d1c7d16d9a4d4 100644 --- a/RecoEgamma/EgammaElectronAlgos/interface/GsfElectronAlgo.h +++ b/RecoEgamma/EgammaElectronAlgos/interface/GsfElectronAlgo.h @@ -176,7 +176,6 @@ class GsfElectronAlgo { const ElectronHcalHelper::Configuration& hcalCfg, const IsolationConfiguration&, const EcalRecHitsConfiguration&, - std::unique_ptr&& superClusterErrorFunction, std::unique_ptr&& crackCorrectionFunction, const RegressionHelper::Configuration& regCfg, const edm::ParameterSet& tkIsol03Cfg, @@ -251,7 +250,6 @@ class GsfElectronAlgo { // additional configuration and helpers ElectronHcalHelper hcalHelper_; - std::unique_ptr superClusterErrorFunction_; std::unique_ptr crackCorrectionFunction_; RegressionHelper regHelper_; }; diff --git a/RecoEgamma/EgammaElectronAlgos/interface/RegressionHelper.h b/RecoEgamma/EgammaElectronAlgos/interface/RegressionHelper.h index 7ceb0dc608374..b25ae2e85c0ef 100644 --- a/RecoEgamma/EgammaElectronAlgos/interface/RegressionHelper.h +++ b/RecoEgamma/EgammaElectronAlgos/interface/RegressionHelper.h @@ -7,7 +7,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Framework/interface/ConsumesCollector.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "Geometry/CaloTopology/interface/CaloTopology.h" #include "Geometry/CaloGeometry/interface/CaloGeometry.h" diff --git a/RecoEgamma/EgammaElectronAlgos/interface/ecalClusterEnergyUncertaintyElectronSpecific.h b/RecoEgamma/EgammaElectronAlgos/interface/ecalClusterEnergyUncertaintyElectronSpecific.h new file mode 100644 index 0000000000000..6c861c73cb454 --- /dev/null +++ b/RecoEgamma/EgammaElectronAlgos/interface/ecalClusterEnergyUncertaintyElectronSpecific.h @@ -0,0 +1,25 @@ +#ifndef RecoEgamma_EgammaElectronAlgos_ecalClusterEnergyUncertaintyElectronSpecific_h +#define RecoEgamma_EgammaElectronAlgos_ecalClusterEnergyUncertaintyElectronSpecific_h + +/** ecalClusterEnergyUncertaintyElectronSpecific + * Function that provides uncertainty on supercluster energy measurement + * Available numbers: total effective uncertainty (in GeV) + * assymetric uncertainties (positive and negative) + * + * $Id: ecalClusterEnergyUncertaintyElectronSpecific.h + * $Date: + * $Revision: + * \author Nicolas Chanon, December 2011 + */ + +namespace reco { + class SuperCluster; +} + +namespace egamma { + + float ecalClusterEnergyUncertaintyElectronSpecific(reco::SuperCluster const& superCluster); + +} + +#endif diff --git a/RecoEgamma/EgammaElectronAlgos/src/ElectronClassification.cc b/RecoEgamma/EgammaElectronAlgos/src/ElectronClassification.cc index 63f8c566dc0dd..4026a8dfad4b6 100644 --- a/RecoEgamma/EgammaElectronAlgos/src/ElectronClassification.cc +++ b/RecoEgamma/EgammaElectronAlgos/src/ElectronClassification.cc @@ -1,5 +1,6 @@ #include "RecoEgamma/EgammaElectronAlgos/interface/ElectronClassification.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" //=================================================================== // Author: Federico Ferri - INFN Milano, Bicocca university diff --git a/RecoEgamma/EgammaElectronAlgos/src/ElectronEnergyCorrector.cc b/RecoEgamma/EgammaElectronAlgos/src/ElectronEnergyCorrector.cc index 1148ab2e2f65e..59ef1578c377e 100644 --- a/RecoEgamma/EgammaElectronAlgos/src/ElectronEnergyCorrector.cc +++ b/RecoEgamma/EgammaElectronAlgos/src/ElectronEnergyCorrector.cc @@ -3,6 +3,7 @@ #include "RecoEgamma/EgammaElectronAlgos/interface/ElectronUtilities.h" #include "RecoEcal/EgammaCoreTools/interface/EcalClusterFunctionBaseClass.h" #include "DataFormats/EcalDetId/interface/EcalSubdetector.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "TMath.h" /**************************************************************************** diff --git a/RecoEgamma/EgammaElectronAlgos/src/EnergyUncertaintyElectronSpecific.cc b/RecoEgamma/EgammaElectronAlgos/src/EnergyUncertaintyElectronSpecific.cc index 30009e9a6e3ba..a56a59a6fc9be 100644 --- a/RecoEgamma/EgammaElectronAlgos/src/EnergyUncertaintyElectronSpecific.cc +++ b/RecoEgamma/EgammaElectronAlgos/src/EnergyUncertaintyElectronSpecific.cc @@ -1,4 +1,5 @@ #include "RecoEgamma/EgammaElectronAlgos/interface/EnergyUncertaintyElectronSpecific.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" namespace { diff --git a/RecoEgamma/EgammaElectronAlgos/src/GsfElectronAlgo.cc b/RecoEgamma/EgammaElectronAlgos/src/GsfElectronAlgo.cc index 0b42010176ce5..c2f6b5c4736ce 100644 --- a/RecoEgamma/EgammaElectronAlgos/src/GsfElectronAlgo.cc +++ b/RecoEgamma/EgammaElectronAlgos/src/GsfElectronAlgo.cc @@ -23,6 +23,7 @@ #include "RecoEgamma/EgammaElectronAlgos/interface/ElectronMomentumCorrector.h" #include "RecoEgamma/EgammaElectronAlgos/interface/ElectronUtilities.h" #include "RecoEgamma/EgammaElectronAlgos/interface/GsfElectronAlgo.h" +#include "RecoEgamma/EgammaElectronAlgos/interface/ecalClusterEnergyUncertaintyElectronSpecific.h" #include "CommonTools/Egamma/interface/ConversionTools.h" #include @@ -370,7 +371,6 @@ GsfElectronAlgo::GsfElectronAlgo(const Tokens& input, const ElectronHcalHelper::Configuration& hcal, const IsolationConfiguration& iso, const EcalRecHitsConfiguration& recHits, - std::unique_ptr&& superClusterErrorFunction, std::unique_ptr&& crackCorrectionFunction, const RegressionHelper::Configuration& reg, const edm::ParameterSet& tkIsol03, @@ -389,8 +389,6 @@ GsfElectronAlgo::GsfElectronAlgo(const Tokens& input, trackerGeometryToken_{cc.esConsumes()}, ecalSeveretyLevelAlgoToken_{cc.esConsumes()}, hcalHelper_{hcal, std::move(cc)}, - superClusterErrorFunction_{ - std::forward>(superClusterErrorFunction)}, crackCorrectionFunction_{std::forward>(crackCorrectionFunction)}, regHelper_{reg, cfg_.strategy.useEcalRegression, cfg_.strategy.useCombinationRegression, cc} @@ -400,9 +398,6 @@ void GsfElectronAlgo::checkSetup(const edm::EventSetup& es) { if (cfg_.strategy.useEcalRegression || cfg_.strategy.useCombinationRegression) regHelper_.checkSetup(es); - if (superClusterErrorFunction_) { - superClusterErrorFunction_->init(es); - } if (crackCorrectionFunction_) { crackCorrectionFunction_->init(es); } @@ -923,7 +918,7 @@ void GsfElectronAlgo::createElectron(reco::GsfElectronCollection& electrons, saturationInfo); auto& ele = electrons.back(); // Will be overwritten later in the case of the regression - ele.setCorrectedEcalEnergyError(superClusterErrorFunction_->getValue(*(ele.superCluster()), 0)); + ele.setCorrectedEcalEnergyError(egamma::ecalClusterEnergyUncertaintyElectronSpecific(*(ele.superCluster()))); ele.setP4(GsfElectron::P4_FROM_SUPER_CLUSTER, momentum, 0, true); //==================================================== diff --git a/RecoEgamma/EgammaElectronAlgos/src/ecalClusterEnergyUncertaintyElectronSpecific.cc b/RecoEgamma/EgammaElectronAlgos/src/ecalClusterEnergyUncertaintyElectronSpecific.cc new file mode 100644 index 0000000000000..462e77ae030f9 --- /dev/null +++ b/RecoEgamma/EgammaElectronAlgos/src/ecalClusterEnergyUncertaintyElectronSpecific.cc @@ -0,0 +1,243 @@ +#include "RecoEgamma/EgammaElectronAlgos/interface/ecalClusterEnergyUncertaintyElectronSpecific.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" + +float egamma::ecalClusterEnergyUncertaintyElectronSpecific(reco::SuperCluster const& superCluster) { + float en = superCluster.energy(); + float eta = fabs(superCluster.eta()); + float et = en / cosh(eta); + float brem = superCluster.etaWidth() != 0 ? superCluster.phiWidth() / superCluster.etaWidth() : 0; + + const int nBinsEta = 6; + const float EtaBins[nBinsEta + 1] = {0.0, 0.7, 1.15, 1.44, 1.56, 2.0, 2.5}; + + const int nBinsBrem = 6; + const float BremBins[nBinsBrem + 1] = {0.8, 1.0, 2.0, 3.0, 4.0, 5.0, 10.0}; + + float par0[nBinsEta][nBinsBrem]; + float par1[nBinsEta][nBinsBrem]; + float par2[nBinsEta][nBinsBrem]; + float par3[nBinsEta][nBinsBrem]; + + par0[0][0] = 0.00640519; + par1[0][0] = 0.257578; + par2[0][0] = 1.72437; + par3[0][0] = 4.04686e-06; + + par0[0][1] = 0.00709569; + par1[0][1] = 0.279844; + par2[0][1] = 1.13789; + par3[0][1] = 1.16239e-05; + + par0[0][2] = 0.0075544; + par1[0][2] = 0.341346; + par2[0][2] = 0.513396; + par3[0][2] = 2.90054e-06; + + par0[0][3] = 0.00659365; + par1[0][3] = 0.517649; + par2[0][3] = -3.1847; + par3[0][3] = 7.37152e-07; + + par0[0][4] = 0.00771696; + par1[0][4] = 0.492897; + par2[0][4] = -1.42222; + par3[0][4] = 0.000358677; + + par0[0][5] = 0.00561532; + par1[0][5] = 0.655138; + par2[0][5] = -3.29839; + par3[0][5] = 6.25898e-07; + + par0[1][0] = 0.00273646; + par1[1][0] = 0.714568; + par2[1][0] = -4.82956; + par3[1][0] = 4.45878e-07; + + par0[1][1] = 0.00679797; + par1[1][1] = 0.472856; + par2[1][1] = -0.281699; + par3[1][1] = 5.46479e-05; + + par0[1][2] = 0.00845532; + par1[1][2] = 0.611624; + par2[1][2] = -1.10104; + par3[1][2] = 1.16803e-05; + + par0[1][3] = 0.00831068; + par1[1][3] = 0.853653; + par2[1][3] = -4.23761; + par3[1][3] = 2.61247e-05; + + par0[1][4] = 0.00845457; + par1[1][4] = 0.984985; + par2[1][4] = -5.19548; + par3[1][4] = 2.05044e-07; + + par0[1][5] = 0.0110227; + par1[1][5] = 1.00356; + par2[1][5] = -4.31936; + par3[1][5] = 0.14384; + + par0[2][0] = -0.00192618; + par1[2][0] = 1.69986; + par2[2][0] = -16.4355; + par3[2][0] = 1.94946e-06; + + par0[2][1] = 0.0067622; + par1[2][1] = 0.792209; + par2[2][1] = -1.18521; + par3[2][1] = 0.066577; + + par0[2][2] = 0.00761595; + par1[2][2] = 1.03058; + par2[2][2] = -4.17237; + par3[2][2] = 0.168543; + + par0[2][3] = 0.0119179; + par1[2][3] = 0.910145; + par2[2][3] = -2.14122; + par3[2][3] = 0.00342264; + + par0[2][4] = 0.0139921; + par1[2][4] = 1.01488; + par2[2][4] = -2.46637; + par3[2][4] = 0.0458434; + + par0[2][5] = 0.013724; + par1[2][5] = 1.49078; + par2[2][5] = -6.60661; + par3[2][5] = 0.297821; + + par0[3][0] = -0.00197909; + par1[3][0] = 4.40696; + par2[3][0] = -4.88737; + par3[3][0] = 4.99999; + + par0[3][1] = 0.0340196; + par1[3][1] = 3.86278; + par2[3][1] = -10.899; + par3[3][1] = 0.130098; + + par0[3][2] = 0.0102397; + par1[3][2] = 8.99643; + par2[3][2] = -31.5122; + par3[3][2] = 0.00118335; + + par0[3][3] = 0.0110891; + par1[3][3] = 8.01794; + par2[3][3] = -21.9038; + par3[3][3] = 0.000245975; + + par0[3][4] = 0.0328931; + par1[3][4] = 4.73441; + par2[3][4] = -12.1148; + par3[3][4] = 3.01721e-05; + + par0[3][5] = 0.0395614; + par1[3][5] = 3.54327; + par2[3][5] = -12.6514; + par3[3][5] = 0.119761; + + par0[4][0] = 0.0121809; + par1[4][0] = 0.965608; + par2[4][0] = -4.19667; + par3[4][0] = 0.129896; + + par0[4][1] = 0.0168951; + par1[4][1] = 1.0218; + par2[4][1] = -4.03078; + par3[4][1] = 0.374291; + + par0[4][2] = 0.0213549; + par1[4][2] = 1.29613; + par2[4][2] = -4.89024; + par3[4][2] = 0.0297165; + + par0[4][3] = 0.0262602; + par1[4][3] = 1.41674; + par2[4][3] = -5.94928; + par3[4][3] = 0.19298; + + par0[4][4] = 0.0334892; + par1[4][4] = 1.48572; + par2[4][4] = -5.3175; + par3[4][4] = 0.0157013; + + par0[4][5] = 0.0347093; + par1[4][5] = 1.63127; + par2[4][5] = -7.27426; + par3[4][5] = 0.201164; + + par0[5][0] = 0.0185321; + par1[5][0] = 0.255205; + par2[5][0] = 1.56798; + par3[5][0] = 5.07655e-11; + + par0[5][1] = 0.0182718; + par1[5][1] = 0.459086; + par2[5][1] = -0.48198; + par3[5][1] = 0.00114946; + + par0[5][2] = 0.0175505; + par1[5][2] = 0.92848; + par2[5][2] = -4.52737; + par3[5][2] = 0.154827; + + par0[5][3] = 0.0233833; + par1[5][3] = 0.804105; + par2[5][3] = -3.75131; + par3[5][3] = 2.84172; + + par0[5][4] = 0.0334892; + par1[5][4] = 1.48572; + par2[5][4] = -5.3175; + par3[5][4] = 0.0157013; + + par0[5][5] = 0.0347093; + par1[5][5] = 1.63127; + par2[5][5] = -7.27426; + par3[5][5] = 0.201164; + + int iEtaSl = -1; + for (int iEta = 0; iEta < nBinsEta; ++iEta) { + if (EtaBins[iEta] <= eta && eta < EtaBins[iEta + 1]) { + iEtaSl = iEta; + } + } + + int iBremSl = -1; + for (int iBrem = 0; iBrem < nBinsBrem; ++iBrem) { + if (BremBins[iBrem] <= brem && brem < BremBins[iBrem + 1]) { + iBremSl = iBrem; + } + } + + //this code is confusing as it has no concept of under and overflow bins + //we will use Et as an example but also applies to eta + //underflow is 1st bin (naively currently labeled as 0 to 0.7, its really <0.7) + //overflow is the final bin (naviely currently labeled as 5 to 10, its really >=5) + //logic: if brem is 0<=brem <0.7 it will be already set to the 1st bin, this checks if its <0 + //logic: if brem is 5<=brem<10 it will be set to the last bin so this then checks if its >5 at which point + //it also assigns it to the last bin. The value of 5 will have already been assigned in the for + //loop above to the last bin so its okay that its a >5 test + if (eta > EtaBins[nBinsEta - 1]) + iEtaSl = nBinsEta - 1; + if (brem < BremBins[0]) + iBremSl = 0; + if (brem > BremBins[nBinsBrem - 1]) + iBremSl = nBinsBrem - 1; + + float uncertainty = 0; + if (et <= 5) + uncertainty = par0[iEtaSl][iBremSl] + par1[iEtaSl][iBremSl] / (5 - par2[iEtaSl][iBremSl]) + + par3[iEtaSl][iBremSl] / ((5 - par2[iEtaSl][iBremSl]) * (5 - par2[iEtaSl][iBremSl])); + if (et >= 200) + uncertainty = par0[iEtaSl][iBremSl] + par1[iEtaSl][iBremSl] / (200 - par2[iEtaSl][iBremSl]) + + par3[iEtaSl][iBremSl] / ((200 - par2[iEtaSl][iBremSl]) * (200 - par2[iEtaSl][iBremSl])); + + if (et > 5 && et < 200) + uncertainty = par0[iEtaSl][iBremSl] + par1[iEtaSl][iBremSl] / (et - par2[iEtaSl][iBremSl]) + + par3[iEtaSl][iBremSl] / ((et - par2[iEtaSl][iBremSl]) * (et - par2[iEtaSl][iBremSl])); + + return (uncertainty * en); +} diff --git a/RecoEgamma/EgammaElectronAlgos/test/testGsfElectronConversionFinder_cff.py b/RecoEgamma/EgammaElectronAlgos/test/testGsfElectronConversionFinder_cff.py index eba21d42de050..405efded72e31 100644 --- a/RecoEgamma/EgammaElectronAlgos/test/testGsfElectronConversionFinder_cff.py +++ b/RecoEgamma/EgammaElectronAlgos/test/testGsfElectronConversionFinder_cff.py @@ -17,10 +17,15 @@ process.testGsfElectronConversionFinder = cms.EDAnalyzer("TestGsfElectronConversionFinder") -process.MessageLogger = cms.Service( - "MessageLogger", - destinations=cms.untracked.vstring("conversions"), - conversions=cms.untracked.PSet(threshold=cms.untracked.string("INFO")), +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + files = cms.untracked.PSet( + conversions = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) process.p = cms.Path(process.testGsfElectronConversionFinder) diff --git a/RecoEgamma/EgammaElectronProducers/interface/LowPtGsfElectronFeatures.h b/RecoEgamma/EgammaElectronProducers/interface/LowPtGsfElectronFeatures.h index f2d64aff698ba..89e81b2b60d17 100644 --- a/RecoEgamma/EgammaElectronProducers/interface/LowPtGsfElectronFeatures.h +++ b/RecoEgamma/EgammaElectronProducers/interface/LowPtGsfElectronFeatures.h @@ -23,11 +23,29 @@ namespace lowptgsfeleseed { namespace lowptgsfeleid { - std::vector features(edm::Ptr const& ele, float rho, float unbiased); - - std::vector features(edm::Ref > const& ele, float rho, float unbiased); - - std::vector features(edm::Ref > const& ele, float rho, float unbiased); + // feature list for new model (2019Sept15) + std::vector features_V1(reco::GsfElectron const& ele, float rho, float unbiased, float field_z); + + // feature list for original models (2019Aug07 and earlier) + std::vector features_V0(reco::GsfElectron const& ele, float rho, float unbiased); + + // Find most energetic clusters + void findEnergeticClusters(reco::SuperCluster const&, int&, float&, float&, int&, int&); + + // Track-cluster matching for most energetic clusters + void trackClusterMatching(reco::SuperCluster const&, + reco::GsfTrack const&, + bool const&, + GlobalPoint const&, + float&, + float&, + float&, + float&, + float&, + float&, + float&, + float&, + float&); } // namespace lowptgsfeleid diff --git a/RecoEgamma/EgammaElectronProducers/plugins/BuildFile.xml b/RecoEgamma/EgammaElectronProducers/plugins/BuildFile.xml index dd6603c1f6a81..12d72e6b58257 100644 --- a/RecoEgamma/EgammaElectronProducers/plugins/BuildFile.xml +++ b/RecoEgamma/EgammaElectronProducers/plugins/BuildFile.xml @@ -4,6 +4,7 @@ + diff --git a/RecoEgamma/EgammaElectronProducers/plugins/GEDGsfElectronCoreProducer.cc b/RecoEgamma/EgammaElectronProducers/plugins/GEDGsfElectronCoreProducer.cc index 9833cd8c2a910..74da203a3a280 100644 --- a/RecoEgamma/EgammaElectronProducers/plugins/GEDGsfElectronCoreProducer.cc +++ b/RecoEgamma/EgammaElectronProducers/plugins/GEDGsfElectronCoreProducer.cc @@ -2,6 +2,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/EgammaCandidates/interface/GsfElectronCore.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateEGammaExtra.h" diff --git a/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronCoreEcalDrivenProducer.cc b/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronCoreEcalDrivenProducer.cc index 5db44a1eae35d..524aa21efdaf7 100644 --- a/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronCoreEcalDrivenProducer.cc +++ b/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronCoreEcalDrivenProducer.cc @@ -2,6 +2,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/EgammaCandidates/interface/GsfElectronCore.h" #include "DataFormats/ParticleFlowReco/interface/GsfPFRecTrack.h" #include "DataFormats/GsfTrackReco/interface/GsfTrack.h" diff --git a/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronProducer.cc b/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronProducer.cc index 6658d8f110189..65028e4630ac6 100644 --- a/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronProducer.cc +++ b/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronProducer.cc @@ -212,7 +212,6 @@ void GsfElectronProducer::fillDescriptions(edm::ConfigurationDescriptions& descr } // Corrections - desc.add("superClusterErrorFunction", "EcalClusterEnergyUncertaintyObjectSpecific"); desc.add("crackCorrectionFunction", "EcalClusterCrackCorrection"); desc.add("ecalWeightsFromDB", true); @@ -375,7 +374,6 @@ GsfElectronProducer::GsfElectronProducer(const edm::ParameterSet& cfg, const Gsf hcalCfg_, isoCfg, recHitsCfg, - EcalClusterFunctionFactory::get()->create(cfg.getParameter("superClusterErrorFunction"), cfg), EcalClusterFunctionFactory::get()->create(cfg.getParameter("crackCorrectionFunction"), cfg), regressionCfg, cfg.getParameter("trkIsol03Cfg"), @@ -547,7 +545,7 @@ void GsfElectronProducer::produce(edm::Event& event, const edm::EventSetup& setu << "Cannot check consistency of parameters with ecal seeding ones," << " because the original collection of seeds is not any more available."; } else { - checkEcalSeedingParameters(edm::parameterSet(*seeds.provenance(), event.processHistory())); + checkEcalSeedingParameters(edm::parameterSet(seeds.provenance()->stable(), event.processHistory())); } } diff --git a/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronFinalizer.cc b/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronFinalizer.cc new file mode 100644 index 0000000000000..9274afeb5e901 --- /dev/null +++ b/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronFinalizer.cc @@ -0,0 +1,65 @@ +#include "CommonTools/CandAlgos/interface/ModifyObjectValueBase.h" +#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +class LowPtGsfElectronFinalizer : public edm::stream::EDProducer<> { +public: + explicit LowPtGsfElectronFinalizer(const edm::ParameterSet&); + + void produce(edm::Event&, const edm::EventSetup&) override; + + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + const edm::EDGetTokenT previousGsfElectrons_; + std::unique_ptr regression_; + + const edm::EDPutTokenT putToken_; +}; + +using edm::InputTag; +using reco::GsfElectronCollection; + +LowPtGsfElectronFinalizer::LowPtGsfElectronFinalizer(const edm::ParameterSet& cfg) + : previousGsfElectrons_{consumes(cfg.getParameter("previousGsfElectronsTag"))}, + putToken_{produces()} { + auto const& iconf = cfg.getParameterSet("regressionConfig"); + auto const& mname = iconf.getParameter("modifierName"); + auto cc = consumesCollector(); + regression_ = ModifyObjectValueFactory::get()->create(mname, iconf, cc); +} + +void LowPtGsfElectronFinalizer::produce(edm::Event& event, const edm::EventSetup& setup) { + // Setup regression for event + regression_->setEvent(event); + regression_->setEventContent(setup); + + // Create new modified electron collection + reco::GsfElectronCollection outputElectrons; + for (auto const& electron : event.get(previousGsfElectrons_)) { + outputElectrons.emplace_back(electron); + auto& newElectron = outputElectrons.back(); + regression_->modifyObject(newElectron); + } + + // Emplace modified electrons to event + event.emplace(putToken_, std::move(outputElectrons)); +} + +void LowPtGsfElectronFinalizer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("previousGsfElectronsTag", {}); + edm::ParameterSetDescription psd; + psd.setUnknown(); + desc.add("regressionConfig", psd); + descriptions.addWithDefaultLabel(desc); +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(LowPtGsfElectronFinalizer); diff --git a/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronIDProducer.cc b/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronIDProducer.cc index 8eba1d052f8d0..bba7853345515 100644 --- a/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronIDProducer.cc +++ b/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronIDProducer.cc @@ -11,11 +11,14 @@ #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "CommonTools/MVAUtils/interface/GBRForestTools.h" #include "DataFormats/EgammaCandidates/interface/GsfElectron.h" +#include "DataFormats/PatCandidates/interface/Electron.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" #include "DataFormats/GsfTrackReco/interface/GsfTrack.h" #include "DataFormats/TrackReco/interface/Track.h" #include "DataFormats/Math/interface/LorentzVector.h" #include "FWCore/Framework/interface/Event.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include "RecoEgamma/EgammaElectronProducers/interface/LowPtGsfElectronFeatures.h" #include #include @@ -31,9 +34,10 @@ class LowPtGsfElectronIDProducer final : public edm::global::EDProducer<> { static void fillDescriptions(edm::ConfigurationDescriptions&); private: - double eval(const std::string& name, const edm::Ptr&, double rho, float unbiased) const; + double eval( + const std::string& name, const edm::Ptr&, double rho, float unbiased, float field_z) const; - const edm::EDGetTokenT > gsfElectrons_; + const edm::EDGetTokenT > electrons_; const edm::EDGetTokenT rho_; const edm::EDGetTokenT > unbiased_; const std::vector names_; @@ -42,19 +46,21 @@ class LowPtGsfElectronIDProducer final : public edm::global::EDProducer<> { const double maxPtThreshold_; std::vector > models_; const std::vector thresholds_; + const std::string version_; }; //////////////////////////////////////////////////////////////////////////////// // LowPtGsfElectronIDProducer::LowPtGsfElectronIDProducer(const edm::ParameterSet& conf) - : gsfElectrons_(consumes >(conf.getParameter("electrons"))), + : electrons_(consumes >(conf.getParameter("electrons"))), rho_(consumes(conf.getParameter("rho"))), unbiased_(consumes >(conf.getParameter("unbiased"))), names_(conf.getParameter >("ModelNames")), passThrough_(conf.getParameter("PassThrough")), minPtThreshold_(conf.getParameter("MinPtThreshold")), maxPtThreshold_(conf.getParameter("MaxPtThreshold")), - thresholds_(conf.getParameter >("ModelThresholds")) { + thresholds_(conf.getParameter >("ModelThresholds")), + version_(conf.getParameter("Version")) { for (auto& weights : conf.getParameter >("ModelWeights")) { models_.push_back(createGBRForest(edm::FileInPath(weights))); } @@ -66,6 +72,9 @@ LowPtGsfElectronIDProducer::LowPtGsfElectronIDProducer(const edm::ParameterSet& throw cms::Exception("Incorrect configuration") << "'ModelWeights' size (" << models_.size() << ") != 'ModelThresholds' size (" << thresholds_.size() << ").\n"; } + if (version_ != "V0" && version_ != "V1") { + throw cms::Exception("Incorrect configuration") << "Unknown Version: " << version_ << "\n"; + } for (const auto& name : names_) { produces >(name); } @@ -73,44 +82,41 @@ LowPtGsfElectronIDProducer::LowPtGsfElectronIDProducer(const edm::ParameterSet& //////////////////////////////////////////////////////////////////////////////// // -void LowPtGsfElectronIDProducer::produce(edm::StreamID, edm::Event& event, const edm::EventSetup&) const { +void LowPtGsfElectronIDProducer::produce(edm::StreamID, edm::Event& event, const edm::EventSetup& setup) const { + // Get z-component of B field + edm::ESHandle field; + setup.get().get(field); + math::XYZVector zfield(field->inTesla(GlobalPoint(0, 0, 0))); + // Pileup edm::Handle rho; event.getByToken(rho_, rho); if (!rho.isValid()) { std::ostringstream os; os << "Problem accessing rho collection for low-pT electrons" << std::endl; - edm::LogError("InvalidHandle") << os.str(); throw cms::Exception("InvalidHandle", os.str()); } // Retrieve GsfElectrons from Event - edm::Handle > gsfElectrons; - event.getByToken(gsfElectrons_, gsfElectrons); - if (!gsfElectrons.isValid()) { + edm::Handle > electrons; + event.getByToken(electrons_, electrons); + if (!electrons.isValid()) { std::ostringstream os; - os << "Problem accessing low-pT gsfElectrons collection" << std::endl; - edm::LogError("InvalidHandle") << os.str(); + os << "Problem accessing low-pT electrons collection" << std::endl; throw cms::Exception("InvalidHandle", os.str()); } // ElectronSeed unbiased BDT edm::Handle > unbiasedH; event.getByToken(unbiased_, unbiasedH); - if (!unbiasedH.isValid()) { - std::ostringstream os; - os << "Problem accessing low-pT 'unbiased' ElectronSeed collection" << std::endl; - edm::LogError("InvalidHandle") << os.str(); - throw cms::Exception("InvalidHandle", os.str()); - } // Iterate through Electrons, evaluate BDT, and store result std::vector > output; for (unsigned int iname = 0; iname < names_.size(); ++iname) { - output.emplace_back(gsfElectrons->size(), -999.); + output.emplace_back(electrons->size(), -999.); } - for (unsigned int iele = 0; iele < gsfElectrons->size(); iele++) { - edm::Ptr ele(gsfElectrons, iele); + for (unsigned int iele = 0; iele < electrons->size(); iele++) { + edm::Ptr ele(electrons, iele); if (ele->core().isNull()) { continue; @@ -123,7 +129,7 @@ void LowPtGsfElectronIDProducer::produce(edm::StreamID, edm::Event& event, const //if ( !passThrough_ && ( ele->pt() < minPtThreshold_ ) ) { continue; } for (unsigned int iname = 0; iname < names_.size(); ++iname) { - output[iname][iele] = eval(names_[iname], ele, *rho, unbiased); + output[iname][iele] = eval(names_[iname], ele, *rho, unbiased, zfield.z()); } } @@ -131,7 +137,7 @@ void LowPtGsfElectronIDProducer::produce(edm::StreamID, edm::Event& event, const for (unsigned int iname = 0; iname < names_.size(); ++iname) { auto ptr = std::make_unique >(edm::ValueMap()); edm::ValueMap::Filler filler(*ptr); - filler.insert(gsfElectrons, output[iname].begin(), output[iname].end()); + filler.insert(electrons, output[iname].begin(), output[iname].end()); filler.fill(); event.put(std::move(ptr), names_[iname]); } @@ -139,14 +145,17 @@ void LowPtGsfElectronIDProducer::produce(edm::StreamID, edm::Event& event, const ////////////////////////////////////////////////////////////////////////////////////////// // -double LowPtGsfElectronIDProducer::eval(const std::string& name, - const edm::Ptr& ele, - double rho, - float unbiased) const { +double LowPtGsfElectronIDProducer::eval( + const std::string& name, const edm::Ptr& ele, double rho, float unbiased, float field_z) const { auto iter = std::find(names_.begin(), names_.end(), name); if (iter != names_.end()) { int index = std::distance(names_.begin(), iter); - std::vector inputs = lowptgsfeleid::features(ele, rho, unbiased); + std::vector inputs; + if (version_ == "V0") { + inputs = lowptgsfeleid::features_V0(*ele, rho, unbiased); + } else if (version_ == "V1") { + inputs = lowptgsfeleid::features_V1(*ele, rho, unbiased, field_z); + } return models_.at(index)->GetResponse(inputs.data()); } else { throw cms::Exception("Unknown model name") << "'Name given: '" << name << "'. Check against configuration file.\n"; @@ -160,15 +169,15 @@ void LowPtGsfElectronIDProducer::fillDescriptions(edm::ConfigurationDescriptions edm::ParameterSetDescription desc; desc.add("electrons", edm::InputTag("lowPtGsfElectrons")); desc.add("unbiased", edm::InputTag("lowPtGsfElectronSeedValueMaps:unbiased")); - desc.add("rho", edm::InputTag("fixedGridRhoFastjetAllTmp")); + desc.add("rho", edm::InputTag("fixedGridRhoFastjetAll")); desc.add >("ModelNames", {""}); desc.add >( - "ModelWeights", - {"RecoEgamma/ElectronIdentification/data/LowPtElectrons/RunII_Autumn18_LowPtElectrons_mva_id.xml.gz"}); - desc.add >("ModelThresholds", {-10.}); + "ModelWeights", {"RecoEgamma/ElectronIdentification/data/LowPtElectrons/LowPtElectrons_ID_2020Nov28.root"}); + desc.add >("ModelThresholds", {-99.}); desc.add("PassThrough", false); desc.add("MinPtThreshold", 0.5); desc.add("MaxPtThreshold", 15.); + desc.add("Version", "V1"); descriptions.add("lowPtGsfElectronID", desc); } diff --git a/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedHeavyObjectCache.h b/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedHeavyObjectCache.h index 32af215f87c38..5baeb06472f65 100644 --- a/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedHeavyObjectCache.h +++ b/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedHeavyObjectCache.h @@ -1,7 +1,7 @@ #ifndef RecoEgamma_EgammaElectronProducers_LowPtGsfElectronSeedHeavyObjectCache_h #define RecoEgamma_EgammaElectronProducers_LowPtGsfElectronSeedHeavyObjectCache_h -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h" #include diff --git a/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedProducer.cc b/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedProducer.cc index 5b2c463e5cc55..26d8d7d9d245f 100644 --- a/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedProducer.cc +++ b/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedProducer.cc @@ -340,6 +340,9 @@ void LowPtGsfElectronSeedProducer::loop(const edm::Handle >& hand // Create ElectronSeed reco::ElectronSeed seed(*(trackRef->seedRef())); + if (seed.nHits() == 0) { //if DeepCore is used in jetCore iteration the seed are hitless, in case skip + continue; + } seed.setCtfTrack(trackRef); // Create PreIds diff --git a/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedValueMapsProducer.cc b/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedValueMapsProducer.cc index 94340b6592a48..876b71a6a143b 100644 --- a/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedValueMapsProducer.cc +++ b/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedValueMapsProducer.cc @@ -1,4 +1,5 @@ #include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" #include "DataFormats/EgammaReco/interface/ElectronSeed.h" #include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" #include "DataFormats/GsfTrackReco/interface/GsfTrack.h" @@ -14,6 +15,7 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/Utilities/interface/transform.h" #include #include @@ -27,66 +29,112 @@ class LowPtGsfElectronSeedValueMapsProducer : public edm::stream::EDProducer<> { static void fillDescriptions(edm::ConfigurationDescriptions&); private: - const edm::EDGetTokenT gsfTracks_; - const edm::EDGetTokenT > preIdsValueMap_; - const std::vector names_; + edm::EDGetTokenT gsfTracks_; + edm::EDGetTokenT > preIdsValueMap_; + std::vector names_; + const bool rekey_; + edm::EDGetTokenT gsfElectrons_; + std::vector > > floatValueMaps_; }; //////////////////////////////////////////////////////////////////////////////// // LowPtGsfElectronSeedValueMapsProducer::LowPtGsfElectronSeedValueMapsProducer(const edm::ParameterSet& conf) - : gsfTracks_(consumes(conf.getParameter("gsfTracks"))), - preIdsValueMap_(consumes >(conf.getParameter("preIdsValueMap"))), - names_(conf.getParameter >("ModelNames")) { - for (const auto& name : names_) { - produces >(name); + : gsfTracks_(), + preIdsValueMap_(), + names_(), + rekey_(conf.getParameter("rekey")), + gsfElectrons_(), + floatValueMaps_() { + if (rekey_) { + gsfElectrons_ = consumes(conf.getParameter("gsfElectrons")); + std::vector tags = conf.getParameter >("floatValueMaps"); + for (const auto& tag : tags) { + floatValueMaps_ = edm::vector_transform( + tags, [this](edm::InputTag const& tag) { return consumes >(tag); }); + names_.push_back(tag.instance()); + produces >(tag.instance()); + } + } else { + gsfTracks_ = consumes(conf.getParameter("gsfTracks")); + preIdsValueMap_ = consumes >(conf.getParameter("preIdsValueMap")); + names_ = conf.getParameter >("ModelNames"); + for (const auto& name : names_) { + produces >(name); + } } } //////////////////////////////////////////////////////////////////////////////// // void LowPtGsfElectronSeedValueMapsProducer::produce(edm::Event& event, const edm::EventSetup&) { - // Retrieve GsfTracks from Event - edm::Handle gsfTracks; - event.getByToken(gsfTracks_, gsfTracks); - if (!gsfTracks.isValid()) { - edm::LogError("Problem with gsfTracks handle"); - } + if (rekey_ == false) { + // TRANSFORM VALUEMAP OF PREID OBJECTS KEYED BY KF TRACK ... + // .. INTO VALUEMAP OF FLOATS (BDT SCORE) KEYED BY GSF TRACK ... - // Retrieve PreIds from Event - edm::Handle > preIdsValueMap; - event.getByToken(preIdsValueMap_, preIdsValueMap); - if (!preIdsValueMap.isValid()) { - edm::LogError("Problem with preIdsValueMap handle"); - } + // Retrieve GsfTracks from Event + auto gsfTracks = event.getHandle(gsfTracks_); - // Iterate through GsfTracks, extract BDT output, and store result in ValueMap for each model - std::vector > output; - for (unsigned int iname = 0; iname < names_.size(); ++iname) { - output.push_back(std::vector(gsfTracks->size(), -999.)); - } - for (unsigned int igsf = 0; igsf < gsfTracks->size(); igsf++) { - reco::GsfTrackRef gsf(gsfTracks, igsf); - if (gsf.isNonnull() && gsf->extra().isNonnull() && gsf->extra()->seedRef().isNonnull()) { - reco::ElectronSeedRef seed = gsf->extra()->seedRef().castTo(); - if (seed.isNonnull() && seed->ctfTrack().isNonnull()) { - const reco::PreIdRef preid = (*preIdsValueMap)[seed->ctfTrack()]; - if (preid.isNonnull()) { - for (unsigned int iname = 0; iname < names_.size(); ++iname) { - output[iname][igsf] = preid->mva(iname); + // Retrieve PreIds from Event + auto preIdsValueMap = event.getHandle(preIdsValueMap_); + + // Iterate through GsfTracks, extract BDT output, and store result in ValueMap for each model + std::vector > output; + for (unsigned int iname = 0; iname < names_.size(); ++iname) { + output.push_back(std::vector(gsfTracks->size(), -999.)); + } + auto const& gsfTracksV = *gsfTracks; + for (unsigned int igsf = 0; igsf < gsfTracksV.size(); igsf++) { + const reco::GsfTrack& gsf = gsfTracksV[igsf]; + if (gsf.extra().isNonnull() && gsf.extra()->seedRef().isNonnull()) { + reco::ElectronSeedRef seed = gsf.extra()->seedRef().castTo(); + if (seed.isNonnull() && seed->ctfTrack().isNonnull()) { + const reco::PreIdRef preid = (*preIdsValueMap)[seed->ctfTrack()]; + if (preid.isNonnull()) { + for (unsigned int iname = 0; iname < names_.size(); ++iname) { + output[iname][igsf] = preid->mva(iname); + } } } } } - } - // Create and put ValueMap in Event - for (unsigned int iname = 0; iname < names_.size(); ++iname) { - auto ptr = std::make_unique >(edm::ValueMap()); - edm::ValueMap::Filler filler(*ptr); - filler.insert(gsfTracks, output[iname].begin(), output[iname].end()); - filler.fill(); - event.put(std::move(ptr), names_[iname]); + // Create and put ValueMap in Event + for (unsigned int iname = 0; iname < names_.size(); ++iname) { + auto ptr = std::make_unique >(edm::ValueMap()); + edm::ValueMap::Filler filler(*ptr); + filler.insert(gsfTracks, output[iname].begin(), output[iname].end()); + filler.fill(); + event.put(std::move(ptr), names_[iname]); + } + + } else { + // TRANSFORM VALUEMAP OF FLOATS (BDT SCORE) KEYED BY GSF TRACK ... + // .. INTO VALUEMAP OF FLOATS (BDT SCORE) KEYED BY GSF ELECTRON ... + + // Retrieve GsfElectrons from Event + auto gsfElectrons = event.getHandle(gsfElectrons_); + + // Retrieve float ValueMaps from Event + for (unsigned int idx = 0; idx < names_.size(); ++idx) { + // Extract ValueMap from Event + auto const& floatValueMap = event.get(floatValueMaps_[idx]); + + // Store BDT scores in vector + std::vector output(gsfElectrons->size(), -99.); + auto const& gsfElectronsV = *gsfElectrons; + for (unsigned int iele = 0; iele < gsfElectronsV.size(); iele++) { + const reco::GsfElectron& ele = gsfElectronsV[iele]; + reco::GsfTrackRef gsf = ele.gsfTrack(); + output[iele] = floatValueMap[gsf]; + } + // Create and put ValueMap in Event + auto ptr = std::make_unique >(edm::ValueMap()); + edm::ValueMap::Filler filler(*ptr); + filler.insert(gsfElectrons, output.begin(), output.end()); + filler.fill(); + event.put(std::move(ptr), names_[idx]); + } } } @@ -97,6 +145,9 @@ void LowPtGsfElectronSeedValueMapsProducer::fillDescriptions(edm::ConfigurationD desc.add("gsfTracks", edm::InputTag("lowPtGsfEleGsfTracks")); desc.add("preIdsValueMap", edm::InputTag("lowPtGsfElectronSeeds")); desc.add >("ModelNames", {"unbiased", "ptbiased"}); + desc.add("rekey", false); + desc.add("gsfElectrons", edm::InputTag()); + desc.add >("floatValueMaps", std::vector()); descriptions.add("lowPtGsfElectronSeedValueMaps", desc); } diff --git a/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronCores_cff.py b/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronCores_cff.py index 4469cccba62d5..9f498a5dc73f4 100644 --- a/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronCores_cff.py +++ b/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronCores_cff.py @@ -3,4 +3,4 @@ from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronCores_cfi import lowPtGsfElectronCores from Configuration.Eras.Modifier_fastSim_cff import fastSim -fastSim.toModify(lowPtGsfElectronCores,ctfTracks = cms.InputTag("generalTracksBeforeMixing")) +fastSim.toModify(lowPtGsfElectronCores,ctfTracks = "generalTracksBeforeMixing") diff --git a/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronSeedValueMaps_cff.py b/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronSeedValueMaps_cff.py new file mode 100644 index 0000000000000..4ee7a8a749796 --- /dev/null +++ b/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronSeedValueMaps_cff.py @@ -0,0 +1,11 @@ +import FWCore.ParameterSet.Config as cms +# Low pT Electron value maps +from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronSeedValueMaps_cfi import lowPtGsfElectronSeedValueMaps + +# Low pT Electron value maps, rekeyed by reco::GsfElectron +rekeyLowPtGsfElectronSeedValueMaps = lowPtGsfElectronSeedValueMaps.clone( + rekey=True, + gsfElectrons="lowPtGsfElectrons", + floatValueMaps=["lowPtGsfElectronSeedValueMaps:unbiased", + "lowPtGsfElectronSeedValueMaps:ptbiased"], +) diff --git a/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronSeeds_cfi.py b/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronSeeds_cfi.py index 95f6a87da6091..25fb120484d2d 100644 --- a/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronSeeds_cfi.py +++ b/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronSeeds_cfi.py @@ -46,5 +46,7 @@ def thresholds( wp ) : # Modifiers for BParking from Configuration.Eras.Modifier_bParking_cff import bParking -bParking.toModify(lowPtGsfElectronSeeds, ModelThresholds = thresholds("VL") ) -bParking.toModify(lowPtGsfElectronSeeds, MinPtThreshold = 0.5) +bParking.toModify(lowPtGsfElectronSeeds, + ModelThresholds = thresholds("VL"), + MinPtThreshold = 0.5 +) diff --git a/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronSequence_cff.py b/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronSequence_cff.py index f8c021ce25f8d..dc35cd98556fb 100644 --- a/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronSequence_cff.py +++ b/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronSequence_cff.py @@ -66,15 +66,16 @@ from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronCores_cff import lowPtGsfElectronCores # Low pT electrons +from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronsPreRegression_cfi import * from RecoEgamma.EgammaElectronProducers.lowPtGsfElectrons_cfi import * # Low pT Electron value maps -from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronSeedValueMaps_cfi import lowPtGsfElectronSeedValueMaps +from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronSeedValueMaps_cff import lowPtGsfElectronSeedValueMaps +from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronSeedValueMaps_cff import rekeyLowPtGsfElectronSeedValueMaps # Low pT Electron ID from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronID_cfi import lowPtGsfElectronID - # Full sequence lowPtGsfElectronTask = cms.Task(lowPtGsfElePfTracks, lowPtGsfElectronSeeds, @@ -84,8 +85,10 @@ lowPtGsfElePfGsfTracks, lowPtGsfElectronSuperClusters, lowPtGsfElectronCores, + lowPtGsfElectronsPreRegression, lowPtGsfElectrons, lowPtGsfElectronSeedValueMaps, + rekeyLowPtGsfElectronSeedValueMaps, lowPtGsfElectronID ) lowPtGsfElectronSequence = cms.Sequence(lowPtGsfElectronTask) diff --git a/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronsPreRegression_cfi.py b/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronsPreRegression_cfi.py new file mode 100644 index 0000000000000..2b73f9e0f4d58 --- /dev/null +++ b/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectronsPreRegression_cfi.py @@ -0,0 +1,6 @@ +from RecoEgamma.EgammaElectronProducers.gsfElectrons_cfi import ecalDrivenGsfElectrons + +lowPtGsfElectronsPreRegression = ecalDrivenGsfElectrons.clone(gsfElectronCoresTag = "lowPtGsfElectronCores") + +from Configuration.Eras.Modifier_fastSim_cff import fastSim +fastSim.toModify(lowPtGsfElectronsPreRegression,ctfTracksTag = "generalTracksBeforeMixing") diff --git a/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectrons_cfi.py b/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectrons_cfi.py index 5b8cc16ea5376..272a416aa6cf2 100644 --- a/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectrons_cfi.py +++ b/RecoEgamma/EgammaElectronProducers/python/lowPtGsfElectrons_cfi.py @@ -1,10 +1,49 @@ -from RecoEgamma.EgammaElectronProducers.gsfElectrons_cfi import ecalDrivenGsfElectrons +import FWCore.ParameterSet.Config as cms -lowPtGsfElectrons = ecalDrivenGsfElectrons.clone(gsfElectronCoresTag = "lowPtGsfElectronCores") +from RecoEgamma.EgammaTools.regressionModifier_cfi import regressionModifier106XUL -from Configuration.Eras.Modifier_fastSim_cff import fastSim -fastSim.toModify(lowPtGsfElectrons,ctfTracksTag = "generalTracksBeforeMixing") +_lowPtRegressionModifier = regressionModifier106XUL.clone( + modifierName = 'EGRegressionModifierV3', + rhoTag = 'fixedGridRhoFastjetAll', + eleRegs = dict( + ecalOnlyMean = dict( + lowEtHighEtBoundary = 20., + ebLowEtForestName = ":lowPtElectron_eb_ecalOnly_05To50_mean", + ebHighEtForestName = ":lowPtElectron_eb_ecalOnly_05To50_mean", + eeLowEtForestName = ":lowPtElectron_ee_ecalOnly_05To50_mean", + eeHighEtForestName = ":lowPtElectron_ee_ecalOnly_05To50_mean", + ), + ecalOnlySigma = dict( + lowEtHighEtBoundary = 20., + ebLowEtForestName = ":lowPtElectron_eb_ecalOnly_05To50_sigma", + ebHighEtForestName = ":lowPtElectron_eb_ecalOnly_05To50_sigma", + eeLowEtForestName = ":lowPtElectron_ee_ecalOnly_05To50_sigma", + eeHighEtForestName = ":lowPtElectron_ee_ecalOnly_05To50_sigma", + ), + epComb = dict( + ecalTrkRegressionConfig = dict( + lowEtHighEtBoundary = 20., + ebLowEtForestName = ":lowPtElectron_eb_ecalTrk_05To50_mean", + ebHighEtForestName = ":lowPtElectron_eb_ecalTrk_05To50_mean", + eeLowEtForestName = ":lowPtElectron_ee_ecalTrk_05To50_mean", + eeHighEtForestName = ":lowPtElectron_ee_ecalTrk_05To50_mean", + ), + ecalTrkRegressionUncertConfig = dict( + lowEtHighEtBoundary = 20., + ebLowEtForestName = ":lowPtElectron_eb_ecalTrk_05To50_sigma", + ebHighEtForestName = ":lowPtElectron_eb_ecalTrk_05To50_sigma", + eeLowEtForestName = ":lowPtElectron_ee_ecalTrk_05To50_sigma", + eeHighEtForestName = ":lowPtElectron_ee_ecalTrk_05To50_sigma", + ), + ) + ), +) -from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA -pp_on_AA.toModify(lowPtGsfElectrons.preselection, minSCEtBarrel = 15.0) -pp_on_AA.toModify(lowPtGsfElectrons.preselection, minSCEtEndcaps = 15.0) +from RecoEgamma.EgammaElectronProducers.lowPtGsfElectronFinalizer_cfi import lowPtGsfElectronFinalizer +lowPtGsfElectrons = lowPtGsfElectronFinalizer.clone( + previousGsfElectronsTag = "lowPtGsfElectronsPreRegression", + regressionConfig = _lowPtRegressionModifier, +) + +from Configuration.ProcessModifiers.run2_miniAOD_UL_cff import run2_miniAOD_UL +run2_miniAOD_UL.toModify(lowPtGsfElectrons, previousGsfElectronsTag = "lowPtGsfElectrons::@skipCurrentProcess") diff --git a/RecoEgamma/EgammaElectronProducers/python/uncleanedOnlyElectronSequence_cff.py b/RecoEgamma/EgammaElectronProducers/python/uncleanedOnlyElectronSequence_cff.py index a160ed1977f5f..a71676e76e8b1 100644 --- a/RecoEgamma/EgammaElectronProducers/python/uncleanedOnlyElectronSequence_cff.py +++ b/RecoEgamma/EgammaElectronProducers/python/uncleanedOnlyElectronSequence_cff.py @@ -28,7 +28,7 @@ # Conversions # -from RecoEgamma.EgammaPhotonProducers.conversionTrackCandidates_cfi import * +from RecoEgamma.EgammaPhotonProducers.conversionTrackCandidates_cff import * uncleanedOnlyConversionTrackCandidates = conversionTrackCandidates.clone( scHybridBarrelProducer = "uncleanedOnlyCorrectedHybridSuperClusters", bcBarrelCollection = "hybridSuperClusters:uncleanOnlyHybridSuperClusters", diff --git a/RecoEgamma/EgammaElectronProducers/src/LowPtGsfElectronFeatures.cc b/RecoEgamma/EgammaElectronProducers/src/LowPtGsfElectronFeatures.cc index a346367b7900f..b09f7037b16cf 100644 --- a/RecoEgamma/EgammaElectronProducers/src/LowPtGsfElectronFeatures.cc +++ b/RecoEgamma/EgammaElectronProducers/src/LowPtGsfElectronFeatures.cc @@ -6,6 +6,8 @@ #include "DataFormats/TrackReco/interface/Track.h" #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "TVector3.h" +#include +#include namespace lowptgsfeleseed { @@ -129,7 +131,7 @@ namespace lowptgsfeleseed { namespace lowptgsfeleid { - std::vector features(edm::Ptr const& ele, float rho, float unbiased) { + std::vector features_V1(reco::GsfElectron const& ele, float rho, float unbiased, float field_z) { float eid_rho = -999.; float eid_sc_eta = -999.; float eid_shape_full5x5_r9 = -999.; @@ -165,8 +167,8 @@ namespace lowptgsfeleid { float sc_clus2_E_ov_p = -999.; // KF tracks - if (ele->core().isNonnull()) { - const auto& trk = ele->closestCtfTrackRef(); // reco::TrackRef + if (ele.core().isNonnull()) { + reco::TrackRef trk = ele.closestCtfTrackRef(); if (trk.isNonnull()) { eid_trk_p = (float)trk->p(); eid_trk_nhits = (float)trk->found(); @@ -174,14 +176,14 @@ namespace lowptgsfeleid { TVector3 trkTV3(0, 0, 0); trkTV3.SetPtEtaPhi(trk->pt(), trk->eta(), trk->phi()); TVector3 eleTV3(0, 0, 0); - eleTV3.SetPtEtaPhi(ele->pt(), ele->eta(), ele->phi()); + eleTV3.SetPtEtaPhi(ele.pt(), ele.eta(), ele.phi()); trk_dr = eleTV3.DeltaR(trkTV3); } } // GSF tracks - if (ele->core().isNonnull()) { - const auto& gsf = ele->core()->gsfTrack(); // reco::GsfTrackRef + if (ele.core().isNonnull()) { + reco::GsfTrackRef gsf = ele.core()->gsfTrack(); if (gsf.isNonnull()) { gsf_mode_p = gsf->pMode(); eid_gsf_nhits = (float)gsf->found(); @@ -189,59 +191,282 @@ namespace lowptgsfeleid { TVector3 gsfTV3(0, 0, 0); gsfTV3.SetPtEtaPhi(gsf->ptMode(), gsf->etaMode(), gsf->phiMode()); TVector3 eleTV3(0, 0, 0); - eleTV3.SetPtEtaPhi(ele->pt(), ele->eta(), ele->phi()); + eleTV3.SetPtEtaPhi(ele.pt(), ele.eta(), ele.phi()); gsf_dr = eleTV3.DeltaR(gsfTV3); } } // Super clusters - if (ele->core().isNonnull()) { - const auto& sc = ele->core()->superCluster(); // reco::SuperClusterRef + if (ele.core().isNonnull()) { + reco::SuperClusterRef sc = ele.core()->superCluster(); if (sc.isNonnull()) { eid_sc_E = sc->energy(); eid_sc_eta = sc->eta(); eid_sc_etaWidth = sc->etaWidth(); eid_sc_phiWidth = sc->phiWidth(); - sc_Nclus = (float)sc->clustersSize(); + sc_Nclus = sc->clustersSize(); } } // Track-cluster matching - if (ele.isNonnull()) { - eid_match_seed_dEta = ele->deltaEtaSeedClusterTrackAtCalo(); - eid_match_eclu_EoverP = (1. / ele->ecalEnergy()) - (1. / ele->p()); - eid_match_SC_EoverP = ele->eSuperClusterOverP(); - eid_match_SC_dEta = ele->deltaEtaSuperClusterTrackAtVtx(); - eid_match_SC_dPhi = ele->deltaPhiSuperClusterTrackAtVtx(); - } + eid_match_seed_dEta = ele.deltaEtaSeedClusterTrackAtCalo(); + eid_match_eclu_EoverP = (1. / ele.ecalEnergy()) - (1. / ele.p()); + eid_match_SC_EoverP = ele.eSuperClusterOverP(); + eid_match_SC_dEta = ele.deltaEtaSuperClusterTrackAtVtx(); + eid_match_SC_dPhi = ele.deltaPhiSuperClusterTrackAtVtx(); // Shower shape vars - if (ele.isNonnull()) { - eid_shape_full5x5_HoverE = ele->full5x5_hcalOverEcal(); - eid_shape_full5x5_r9 = ele->full5x5_r9(); - } + eid_shape_full5x5_HoverE = ele.full5x5_hcalOverEcal(); + eid_shape_full5x5_r9 = ele.full5x5_r9(); // Misc eid_rho = rho; - if (ele.isNonnull()) { - eid_brem_frac = ele->fbrem(); - core_shFracHits = (float)ele->shFracInnerHits(); + eid_brem_frac = ele.fbrem(); + core_shFracHits = ele.shFracInnerHits(); + + // Unbiased BDT from ElectronSeed + gsf_bdtout1 = unbiased; + + // Clusters + if (ele.core().isNonnull()) { + reco::GsfTrackRef gsf = ele.core()->gsfTrack(); + if (gsf.isNonnull()) { + reco::SuperClusterRef sc = ele.core()->superCluster(); + if (sc.isNonnull()) { + // Propagate electron track to ECAL surface + double mass2 = 0.000511 * 0.000511; + float p2 = pow(gsf->p(), 2); + float energy = sqrt(mass2 + p2); + XYZTLorentzVector mom = XYZTLorentzVector(gsf->px(), gsf->py(), gsf->pz(), energy); + XYZTLorentzVector pos = XYZTLorentzVector(gsf->vx(), gsf->vy(), gsf->vz(), 0.); + BaseParticlePropagator propagator(RawParticle(mom, pos, gsf->charge()), 0, 0, field_z); + propagator.propagateToEcalEntrance(true); // true only first half loop , false more than one loop + bool reach_ECAL = propagator.getSuccess(); // 0 does not reach ECAL, 1 yes barrel, 2 yes endcaps + // ECAL entry point for track + GlobalPoint ecal_pos(propagator.particle().x(), propagator.particle().y(), propagator.particle().z()); + + // Track-cluster matching for most energetic clusters + sc_clus1_nxtal = -999; + sc_clus1_dphi = -999.; + sc_clus2_dphi = -999.; + sc_clus1_deta = -999.; + sc_clus2_deta = -999.; + sc_clus1_E = -999.; + sc_clus2_E = -999.; + sc_clus1_E_ov_p = -999.; + sc_clus2_E_ov_p = -999.; + trackClusterMatching(*sc, + *gsf, + reach_ECAL, + ecal_pos, + sc_clus1_nxtal, + sc_clus1_dphi, + sc_clus2_dphi, + sc_clus1_deta, + sc_clus2_deta, + sc_clus1_E, + sc_clus2_E, + sc_clus1_E_ov_p, + sc_clus2_E_ov_p); + sc_clus1_nxtal = (int)sc_clus1_nxtal; + + } // sc.isNonnull() + } // gsf.isNonnull() + } // clusters + + // Out-of-range + eid_rho = std::clamp(eid_rho, 0.f, 100.f); + eid_sc_eta = std::clamp(eid_sc_eta, -5.f, 5.f); + eid_shape_full5x5_r9 = std::clamp(eid_shape_full5x5_r9, 0.f, 2.f); + eid_sc_etaWidth = std::clamp(eid_sc_etaWidth, 0.f, 3.14f); + eid_sc_phiWidth = std::clamp(eid_sc_phiWidth, 0.f, 3.14f); + eid_shape_full5x5_HoverE = std::clamp(eid_shape_full5x5_HoverE, 0.f, 50.f); + eid_trk_nhits = std::clamp(eid_trk_nhits, -1.f, 50.f); + eid_trk_chi2red = std::clamp(eid_trk_chi2red, -1.f, 50.f); + eid_gsf_chi2red = std::clamp(eid_gsf_chi2red, -1.f, 100.f); + if (eid_brem_frac < 0.) + eid_brem_frac = -1.; // + if (eid_brem_frac > 1.) + eid_brem_frac = 1.; // + eid_gsf_nhits = std::clamp(eid_gsf_nhits, -1.f, 50.f); + eid_match_SC_EoverP = std::clamp(eid_match_SC_EoverP, 0.f, 100.f); + eid_match_eclu_EoverP = std::clamp(eid_match_eclu_EoverP, -1.f, 1.f); + eid_match_SC_dEta = std::clamp(eid_match_SC_dEta, -10.f, 10.f); + eid_match_SC_dPhi = std::clamp(eid_match_SC_dPhi, -3.14f, 3.14f); + eid_match_seed_dEta = std::clamp(eid_match_seed_dEta, -10.f, 10.f); + eid_sc_E = std::clamp(eid_sc_E, 0.f, 1000.f); + eid_trk_p = std::clamp(eid_trk_p, -1.f, 1000.f); + gsf_mode_p = std::clamp(gsf_mode_p, 0.f, 1000.f); + core_shFracHits = std::clamp(core_shFracHits, 0.f, 1.f); + gsf_bdtout1 = std::clamp(gsf_bdtout1, -20.f, 20.f); + if (gsf_dr < 0.) + gsf_dr = 5.; // + if (gsf_dr > 5.) + gsf_dr = 5.; // + if (trk_dr < 0.) + trk_dr = 5.; // + if (trk_dr > 5.) + trk_dr = 5.; // + sc_Nclus = std::clamp(sc_Nclus, 0.f, 20.f); + sc_clus1_nxtal = std::clamp(sc_clus1_nxtal, 0.f, 100.f); + sc_clus1_dphi = std::clamp(sc_clus1_dphi, -3.14f, 3.14f); + sc_clus2_dphi = std::clamp(sc_clus2_dphi, -3.14f, 3.14f); + sc_clus1_deta = std::clamp(sc_clus1_deta, -5.f, 5.f); + sc_clus2_deta = std::clamp(sc_clus2_deta, -5.f, 5.f); + sc_clus1_E = std::clamp(sc_clus1_E, 0.f, 1000.f); + sc_clus2_E = std::clamp(sc_clus2_E, 0.f, 1000.f); + if (sc_clus1_E_ov_p < 0.) + sc_clus1_E_ov_p = -1.; // + if (sc_clus2_E_ov_p < 0.) + sc_clus2_E_ov_p = -1.; // + + // Set contents of vector + std::vector output = {eid_rho, + eid_sc_eta, + eid_shape_full5x5_r9, + eid_sc_etaWidth, + eid_sc_phiWidth, + eid_shape_full5x5_HoverE, + eid_trk_nhits, + eid_trk_chi2red, + eid_gsf_chi2red, + eid_brem_frac, + eid_gsf_nhits, + eid_match_SC_EoverP, + eid_match_eclu_EoverP, + eid_match_SC_dEta, + eid_match_SC_dPhi, + eid_match_seed_dEta, + eid_sc_E, + eid_trk_p, + gsf_mode_p, + core_shFracHits, + gsf_bdtout1, + gsf_dr, + trk_dr, + sc_Nclus, + sc_clus1_nxtal, + sc_clus1_dphi, + sc_clus2_dphi, + sc_clus1_deta, + sc_clus2_deta, + sc_clus1_E, + sc_clus2_E, + sc_clus1_E_ov_p, + sc_clus2_E_ov_p}; + return output; + } + + //////////////////////////////////////////////////////////////////////////////// + // feature list for original models (2019Aug07 and earlier) + std::vector features_V0(reco::GsfElectron const& ele, float rho, float unbiased) { + float eid_rho = -999.; + float eid_sc_eta = -999.; + float eid_shape_full5x5_r9 = -999.; + float eid_sc_etaWidth = -999.; + float eid_sc_phiWidth = -999.; + float eid_shape_full5x5_HoverE = -999.; + float eid_trk_nhits = -999.; + float eid_trk_chi2red = -999.; + float eid_gsf_chi2red = -999.; + float eid_brem_frac = -999.; + float eid_gsf_nhits = -999.; + float eid_match_SC_EoverP = -999.; + float eid_match_eclu_EoverP = -999.; + float eid_match_SC_dEta = -999.; + float eid_match_SC_dPhi = -999.; + float eid_match_seed_dEta = -999.; + float eid_sc_E = -999.; + float eid_trk_p = -999.; + float gsf_mode_p = -999.; + float core_shFracHits = -999.; + float gsf_bdtout1 = -999.; + float gsf_dr = -999.; + float trk_dr = -999.; + float sc_Nclus = -999.; + float sc_clus1_nxtal = -999.; + float sc_clus1_dphi = -999.; + float sc_clus2_dphi = -999.; + float sc_clus1_deta = -999.; + float sc_clus2_deta = -999.; + float sc_clus1_E = -999.; + float sc_clus2_E = -999.; + float sc_clus1_E_ov_p = -999.; + float sc_clus2_E_ov_p = -999.; + + // KF tracks + if (ele.core().isNonnull()) { + const auto& trk = ele.closestCtfTrackRef(); // reco::TrackRef + if (trk.isNonnull()) { + eid_trk_p = (float)trk->p(); + eid_trk_nhits = (float)trk->found(); + eid_trk_chi2red = (float)trk->normalizedChi2(); + TVector3 trkTV3(0, 0, 0); + trkTV3.SetPtEtaPhi(trk->pt(), trk->eta(), trk->phi()); + TVector3 eleTV3(0, 0, 0); + eleTV3.SetPtEtaPhi(ele.pt(), ele.eta(), ele.phi()); + trk_dr = eleTV3.DeltaR(trkTV3); + } + } + + // GSF tracks + if (ele.core().isNonnull()) { + const auto& gsf = ele.core()->gsfTrack(); // reco::GsfTrackRef + if (gsf.isNonnull()) { + gsf_mode_p = gsf->pMode(); + eid_gsf_nhits = (float)gsf->found(); + eid_gsf_chi2red = gsf->normalizedChi2(); + TVector3 gsfTV3(0, 0, 0); + gsfTV3.SetPtEtaPhi(gsf->ptMode(), gsf->etaMode(), gsf->phiMode()); + TVector3 eleTV3(0, 0, 0); + eleTV3.SetPtEtaPhi(ele.pt(), ele.eta(), ele.phi()); + gsf_dr = eleTV3.DeltaR(gsfTV3); + } + } + + // Super clusters + if (ele.core().isNonnull()) { + const auto& sc = ele.core()->superCluster(); // reco::SuperClusterRef + if (sc.isNonnull()) { + eid_sc_E = sc->energy(); + eid_sc_eta = sc->eta(); + eid_sc_etaWidth = sc->etaWidth(); + eid_sc_phiWidth = sc->phiWidth(); + sc_Nclus = (float)sc->clustersSize(); + } } + // Track-cluster matching + eid_match_seed_dEta = ele.deltaEtaSeedClusterTrackAtCalo(); + eid_match_eclu_EoverP = (1. / ele.ecalEnergy()) - (1. / ele.p()); + eid_match_SC_EoverP = ele.eSuperClusterOverP(); + eid_match_SC_dEta = ele.deltaEtaSuperClusterTrackAtVtx(); + eid_match_SC_dPhi = ele.deltaPhiSuperClusterTrackAtVtx(); + + // Shower shape vars + eid_shape_full5x5_HoverE = ele.full5x5_hcalOverEcal(); + eid_shape_full5x5_r9 = ele.full5x5_r9(); + + // Misc + eid_rho = rho; + + eid_brem_frac = ele.fbrem(); + core_shFracHits = (float)ele.shFracInnerHits(); + // Unbiased BDT from ElectronSeed gsf_bdtout1 = unbiased; // Clusters - if (ele->core().isNonnull()) { - const auto& gsf = ele->core()->gsfTrack(); // reco::GsfTrackRef + if (ele.core().isNonnull()) { + const auto& gsf = ele.core()->gsfTrack(); // reco::GsfTrackRef if (gsf.isNonnull()) { - const auto& sc = ele->core()->superCluster(); // reco::SuperClusterRef + const auto& sc = ele.core()->superCluster(); // reco::SuperClusterRef if (sc.isNonnull()) { // Propagate electron track to ECAL surface - double mass_ = 0.000511 * 0.000511; + double mass2 = 0.000511 * 0.000511; float p2 = pow(gsf->p(), 2); - float energy = sqrt(mass_ + p2); + float energy = sqrt(mass2 + p2); math::XYZTLorentzVector mom = math::XYZTLorentzVector(gsf->px(), gsf->py(), gsf->pz(), energy); math::XYZTLorentzVector pos = math::XYZTLorentzVector(gsf->vx(), gsf->vy(), gsf->vz(), 0.); float field_z = 3.8; @@ -253,41 +478,7 @@ namespace lowptgsfeleid { GlobalPoint ecal_pos( mypart.particle().vertex().x(), mypart.particle().vertex().y(), mypart.particle().vertex().z()); - // Iterate through ECAL clusters and sort in energy - int clusNum = 0; - float maxEne1 = -1; - float maxEne2 = -1; - int i1 = -1; - int i2 = -1; - try { - if (sc->clustersSize() > 0 && sc->clustersBegin() != sc->clustersEnd()) { - for (const auto& cluster : sc->clusters()) { - if (cluster->energy() > maxEne1) { - maxEne1 = cluster->energy(); - i1 = clusNum; - } - clusNum++; - } - if (sc->clustersSize() > 1) { - clusNum = 0; - for (const auto& cluster : sc->clusters()) { - if (clusNum != i1) { - if (cluster->energy() > maxEne2) { - maxEne2 = cluster->energy(); - i2 = clusNum; - } - } - clusNum++; - } - } - } // loop over clusters - } catch (...) { - edm::LogError("SuperClusters") << "Problem accessing SC constituent clusters:" - << " clusNum=" << clusNum << " clustersSize=" << sc->clustersSize() - << " energy=" << sc->energy() << std::endl; - } - - // Initializations + // Track-cluster matching for most energetic clusters sc_clus1_nxtal = -999.; sc_clus1_dphi = -999.; sc_clus2_dphi = -999.; @@ -297,178 +488,74 @@ namespace lowptgsfeleid { sc_clus2_E = -999.; sc_clus1_E_ov_p = -999.; sc_clus2_E_ov_p = -999.; + trackClusterMatching(*sc, + *gsf, + reach_ECAL, + ecal_pos, + sc_clus1_nxtal, + sc_clus1_dphi, + sc_clus2_dphi, + sc_clus1_deta, + sc_clus2_deta, + sc_clus1_E, + sc_clus2_E, + sc_clus1_E_ov_p, + sc_clus2_E_ov_p); - // track-clusters match - clusNum = 0; - try { - if (sc->clustersSize() > 0 && sc->clustersBegin() != sc->clustersEnd()) { - for (const auto& cluster : sc->clusters()) { - float deta = std::fabs(ecal_pos.eta() - cluster->eta()); - float dphi = std::fabs(ecal_pos.phi() - cluster->phi()); - if (dphi > M_PI) - dphi -= 2 * M_PI; - if (ecal_pos.phi() - cluster->phi() < 0) - dphi = -dphi; - if (ecal_pos.eta() - cluster->eta() < 0) - deta = -deta; - - if (clusNum == i1) { - sc_clus1_E = cluster->energy(); - if (gsf->pMode() > 0) - sc_clus1_E_ov_p = cluster->energy() / gsf->pMode(); - sc_clus1_nxtal = (float)cluster->size(); - if (reach_ECAL > 0) { - sc_clus1_deta = deta; - sc_clus1_dphi = dphi; - } - } else if (clusNum == i2) { - sc_clus2_E = cluster->energy(); - if (gsf->pMode() > 0) - sc_clus2_E_ov_p = cluster->energy() / gsf->pMode(); - if (reach_ECAL > 0) { - sc_clus2_deta = deta; - sc_clus2_dphi = dphi; - } - } - clusNum++; - } - } - } catch (...) { - edm::LogError("SuperClusters") << "Problem with track-cluster matching" << std::endl; - } - } - } - } // clusters + } // sc.isNonnull() + } // gsf.isNonnull() + } // clusters // Out-of-range - if (eid_rho < 0) - eid_rho = 0; - if (eid_rho > 100) - eid_rho = 100; - if (eid_sc_eta < -5) - eid_sc_eta = -5; - if (eid_sc_eta > 5) - eid_sc_eta = 5; - if (eid_shape_full5x5_r9 < 0) - eid_shape_full5x5_r9 = 0; - if (eid_shape_full5x5_r9 > 2) - eid_shape_full5x5_r9 = 2; - if (eid_sc_etaWidth < 0) - eid_sc_etaWidth = 0; - if (eid_sc_etaWidth > 3.14) - eid_sc_etaWidth = 3.14; - if (eid_sc_phiWidth < 0) - eid_sc_phiWidth = 0; - if (eid_sc_phiWidth > 3.14) - eid_sc_phiWidth = 3.14; - if (eid_shape_full5x5_HoverE < 0) - eid_shape_full5x5_HoverE = 0; - if (eid_shape_full5x5_HoverE > 50) - eid_shape_full5x5_HoverE = 50; - if (eid_trk_nhits < -1) - eid_trk_nhits = -1; - if (eid_trk_nhits > 50) - eid_trk_nhits = 50; - if (eid_trk_chi2red < -1) - eid_trk_chi2red = -1; - if (eid_trk_chi2red > 50) - eid_trk_chi2red = 50; - if (eid_gsf_chi2red < -1) - eid_gsf_chi2red = -1; - if (eid_gsf_chi2red > 100) - eid_gsf_chi2red = 100; - if (eid_brem_frac < 0) - eid_brem_frac = -1; - if (eid_brem_frac > 1) - eid_brem_frac = 1; - if (eid_gsf_nhits < -1) - eid_gsf_nhits = -1; - if (eid_gsf_nhits > 50) - eid_gsf_nhits = 50; - if (eid_match_SC_EoverP < 0) - eid_match_SC_EoverP = 0; - if (eid_match_SC_EoverP > 100) - eid_match_SC_EoverP = 100; - if (eid_match_eclu_EoverP < -1.) - eid_match_eclu_EoverP = -1.; - if (eid_match_eclu_EoverP > 1.) - eid_match_eclu_EoverP = 1.; - if (eid_match_SC_dEta < -10) - eid_match_SC_dEta = -10; - if (eid_match_SC_dEta > 10) - eid_match_SC_dEta = 10; - if (eid_match_SC_dPhi < -3.14) - eid_match_SC_dPhi = -3.14; - if (eid_match_SC_dPhi > 3.14) - eid_match_SC_dPhi = 3.14; - if (eid_match_seed_dEta < -10) - eid_match_seed_dEta = -10; - if (eid_match_seed_dEta > 10) - eid_match_seed_dEta = 10; - if (eid_sc_E < 0) - eid_sc_E = 0; - if (eid_sc_E > 1000) - eid_sc_E = 1000; - if (eid_trk_p < -1) - eid_trk_p = -1; - if (eid_trk_p > 1000) - eid_trk_p = 1000; - if (gsf_mode_p < 0) - gsf_mode_p = 0; - if (gsf_mode_p > 1000) - gsf_mode_p = 1000; - if (core_shFracHits < 0) - core_shFracHits = 0; - if (core_shFracHits > 1) - core_shFracHits = 1; - if (gsf_bdtout1 < -20) - gsf_bdtout1 = -20; - if (gsf_bdtout1 > 20) - gsf_bdtout1 = 20; - if (gsf_dr < 0) - gsf_dr = 5; - if (gsf_dr > 5) - gsf_dr = 5; - if (trk_dr < 0) - trk_dr = 5; - if (trk_dr > 5) - trk_dr = 5; - if (sc_Nclus < 0) - sc_Nclus = 0; - if (sc_Nclus > 20) - sc_Nclus = 20; - if (sc_clus1_nxtal < 0) - sc_clus1_nxtal = 0; - if (sc_clus1_nxtal > 100) - sc_clus1_nxtal = 100; + eid_sc_eta = std::clamp(eid_sc_eta, -5.f, 5.f); + eid_shape_full5x5_r9 = std::clamp(eid_shape_full5x5_r9, 0.f, 2.f); + eid_sc_etaWidth = std::clamp(eid_sc_etaWidth, 0.f, 3.14f); + eid_sc_phiWidth = std::clamp(eid_sc_phiWidth, 0.f, 3.14f); + eid_shape_full5x5_HoverE = std::clamp(eid_shape_full5x5_HoverE, 0.f, 50.f); + eid_trk_nhits = std::clamp(eid_trk_nhits, -1.f, 50.f); + eid_trk_chi2red = std::clamp(eid_trk_chi2red, -1.f, 50.f); + eid_gsf_chi2red = std::clamp(eid_gsf_chi2red, -1.f, 100.f); + if (eid_brem_frac < 0.) + eid_brem_frac = -1.; // + if (eid_brem_frac > 1.) + eid_brem_frac = 1.; // + eid_gsf_nhits = std::clamp(eid_gsf_nhits, -1.f, 50.f); + eid_match_SC_EoverP = std::clamp(eid_match_SC_EoverP, 0.f, 100.f); + eid_match_eclu_EoverP = std::clamp(eid_match_eclu_EoverP, -1.f, 1.f); + eid_match_SC_dEta = std::clamp(eid_match_SC_dEta, -10.f, 10.f); + eid_match_SC_dPhi = std::clamp(eid_match_SC_dPhi, -3.14f, 3.14f); + eid_match_seed_dEta = std::clamp(eid_match_seed_dEta, -10.f, 10.f); + eid_sc_E = std::clamp(eid_sc_E, 0.f, 1000.f); + eid_trk_p = std::clamp(eid_trk_p, -1.f, 1000.f); + gsf_mode_p = std::clamp(gsf_mode_p, 0.f, 1000.f); + core_shFracHits = std::clamp(core_shFracHits, 0.f, 1.f); + gsf_bdtout1 = std::clamp(gsf_bdtout1, -20.f, 20.f); + if (gsf_dr < 0.) + gsf_dr = 5.; // + if (gsf_dr > 5.) + gsf_dr = 5.; // + if (trk_dr < 0.) + trk_dr = 5.; // + if (trk_dr > 5.) + trk_dr = 5.; // + sc_Nclus = std::clamp(sc_Nclus, 0.f, 20.f); + sc_clus1_nxtal = std::clamp(sc_clus1_nxtal, 0.f, 100.f); if (sc_clus1_dphi < -3.14) - sc_clus1_dphi = -5; + sc_clus1_dphi = -5.; // if (sc_clus1_dphi > 3.14) - sc_clus1_dphi = 5; + sc_clus1_dphi = 5.; // if (sc_clus2_dphi < -3.14) - sc_clus2_dphi = -5; + sc_clus2_dphi = -5.; // if (sc_clus2_dphi > 3.14) - sc_clus2_dphi = 5; - if (sc_clus1_deta < -5) - sc_clus1_deta = -5; - if (sc_clus1_deta > 5) - sc_clus1_deta = 5; - if (sc_clus2_deta < -5) - sc_clus2_deta = -5; - if (sc_clus2_deta > 5) - sc_clus2_deta = 5; - if (sc_clus1_E < 0) - sc_clus1_E = 0; - if (sc_clus1_E > 1000) - sc_clus1_E = 1000; - if (sc_clus2_E < 0) - sc_clus2_E = 0; - if (sc_clus2_E > 1000) - sc_clus2_E = 1000; - if (sc_clus1_E_ov_p < 0) - sc_clus1_E_ov_p = -1; - if (sc_clus2_E_ov_p < 0) - sc_clus2_E_ov_p = -1; + sc_clus2_dphi = 5.; // + sc_clus1_deta = std::clamp(sc_clus1_deta, -5.f, 5.f); + sc_clus2_deta = std::clamp(sc_clus2_deta, -5.f, 5.f); + sc_clus1_E = std::clamp(sc_clus1_E, 0.f, 1000.f); + sc_clus2_E = std::clamp(sc_clus2_E, 0.f, 1000.f); + if (sc_clus1_E_ov_p < 0.) + sc_clus1_E_ov_p = -1.; // + if (sc_clus2_E_ov_p < 0.) + sc_clus2_E_ov_p = -1.; // // Set contents of vector std::vector output = {eid_rho, @@ -508,15 +595,82 @@ namespace lowptgsfeleid { } //////////////////////////////////////////////////////////////////////////////// - // - std::vector features(edm::Ref > const& ele, float rho, float unbiased) { - return features(edm::refToPtr(ele), rho, unbiased); + // Find most energetic clusters + void findEnergeticClusters( + reco::SuperCluster const& sc, int& clusNum, float& maxEne1, float& maxEne2, int& i1, int& i2) { + if (sc.clustersSize() > 0 && sc.clustersBegin() != sc.clustersEnd()) { + for (auto const& cluster : sc.clusters()) { + if (cluster->energy() > maxEne1) { + maxEne1 = cluster->energy(); + i1 = clusNum; + } + clusNum++; + } + if (sc.clustersSize() > 1) { + clusNum = 0; + for (auto const& cluster : sc.clusters()) { + if (clusNum != i1) { + if (cluster->energy() > maxEne2) { + maxEne2 = cluster->energy(); + i2 = clusNum; + } + } + clusNum++; + } + } + } // loop over clusters } //////////////////////////////////////////////////////////////////////////////// - // - std::vector features(edm::Ref > const& ele, float rho, float unbiased) { - return features(edm::refToPtr(ele), rho, unbiased); + // Track-cluster matching for most energetic clusters + void trackClusterMatching(reco::SuperCluster const& sc, + reco::GsfTrack const& gsf, + bool const& reach_ECAL, + GlobalPoint const& ecal_pos, + float& sc_clus1_nxtal, + float& sc_clus1_dphi, + float& sc_clus2_dphi, + float& sc_clus1_deta, + float& sc_clus2_deta, + float& sc_clus1_E, + float& sc_clus2_E, + float& sc_clus1_E_ov_p, + float& sc_clus2_E_ov_p) { + // Iterate through ECAL clusters and sort in energy + int clusNum = 0; + float maxEne1 = -1; + float maxEne2 = -1; + int i1 = -1; + int i2 = -1; + findEnergeticClusters(sc, clusNum, maxEne1, maxEne2, i1, i2); + + // track-clusters match + clusNum = 0; + if (sc.clustersSize() > 0 && sc.clustersBegin() != sc.clustersEnd()) { + for (auto const& cluster : sc.clusters()) { + float deta = ecal_pos.eta() - cluster->eta(); + float dphi = reco::deltaPhi(ecal_pos.phi(), cluster->phi()); + if (clusNum == i1) { + sc_clus1_E = cluster->energy(); + if (gsf.pMode() > 0) + sc_clus1_E_ov_p = cluster->energy() / gsf.pMode(); + sc_clus1_nxtal = (float)cluster->size(); + if (reach_ECAL > 0) { + sc_clus1_deta = deta; + sc_clus1_dphi = dphi; + } + } else if (clusNum == i2) { + sc_clus2_E = cluster->energy(); + if (gsf.pMode() > 0) + sc_clus2_E_ov_p = cluster->energy() / gsf.pMode(); + if (reach_ECAL > 0) { + sc_clus2_deta = deta; + sc_clus2_dphi = dphi; + } + } + clusNum++; + } + } } } // namespace lowptgsfeleid diff --git a/RecoEgamma/EgammaHFProducers/plugins/HFClusterAlgo.cc b/RecoEgamma/EgammaHFProducers/plugins/HFClusterAlgo.cc index 9238096fb4eaf..e37477c1fd0c0 100644 --- a/RecoEgamma/EgammaHFProducers/plugins/HFClusterAlgo.cc +++ b/RecoEgamma/EgammaHFProducers/plugins/HFClusterAlgo.cc @@ -1,12 +1,9 @@ -#include "HFClusterAlgo.h" -#include -#include -#include -#include #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/METReco/interface/HcalCaloFlagLabels.h" #include "Geometry/CaloGeometry/interface/CaloCellGeometry.h" +#include "HFClusterAlgo.h" + using namespace std; using namespace reco; /** \class HFClusterAlgo diff --git a/RecoEgamma/EgammaHFProducers/plugins/HFClusterAlgo.h b/RecoEgamma/EgammaHFProducers/plugins/HFClusterAlgo.h index 160d135c89d89..c85e07c53c523 100644 --- a/RecoEgamma/EgammaHFProducers/plugins/HFClusterAlgo.h +++ b/RecoEgamma/EgammaHFProducers/plugins/HFClusterAlgo.h @@ -4,14 +4,10 @@ #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" #include "Geometry/CaloGeometry/interface/CaloGeometry.h" #include "DataFormats/EgammaReco/interface/HFEMClusterShape.h" -#include "DataFormats/EgammaReco/interface/BasicCluster.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" #include "DataFormats/EgammaReco/interface/HFEMClusterShapeAssociation.h" #include "DataFormats/EgammaReco/interface/HFEMClusterShape.h" -#include "DataFormats/EgammaReco/interface/BasicClusterFwd.h" #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include -#include /** \class HFClusterAlgo diff --git a/RecoEgamma/EgammaHFProducers/plugins/HFEGammaSLCorrector.cc b/RecoEgamma/EgammaHFProducers/plugins/HFEGammaSLCorrector.cc index 6b0181192dbd9..647e283ceccf0 100644 --- a/RecoEgamma/EgammaHFProducers/plugins/HFEGammaSLCorrector.cc +++ b/RecoEgamma/EgammaHFProducers/plugins/HFEGammaSLCorrector.cc @@ -1,10 +1,11 @@ #include "HFEGammaSLCorrector.h" -#include "CLHEP/Vector/LorentzVector.h" + +#include namespace hf_egamma { double eSeLCorrected(double es, double el, double pc, double px, double py) { - double x = log(el / 100); + double x = std::log(el / 100); double y = es / el; return pc + px * x + py * y; } diff --git a/RecoEgamma/EgammaHFProducers/plugins/HFEMClusterProducer.cc b/RecoEgamma/EgammaHFProducers/plugins/HFEMClusterProducer.cc index dcdce56c4ad22..b7685860ccae4 100644 --- a/RecoEgamma/EgammaHFProducers/plugins/HFEMClusterProducer.cc +++ b/RecoEgamma/EgammaHFProducers/plugins/HFEMClusterProducer.cc @@ -5,14 +5,34 @@ // $Id: HFEMClusterProducer.cc,v 1.2 2007/09/19 Kevin Klapoetke // -#include #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "DataFormats/EgammaReco/interface/BasicClusterFwd.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "RecoEgamma/EgammaHFProducers/plugins/HFEMClusterProducer.h" + +#include "HFClusterAlgo.h" + +class HFEMClusterProducer : public edm::stream::EDProducer<> { +public: + explicit HFEMClusterProducer(edm::ParameterSet const& conf); + void produce(edm::Event& e, edm::EventSetup const& iSetup) override; + void beginRun(edm::Run const&, edm::EventSetup const&) final { algo_.resetForRun(); } + +private: + const edm::EDGetTokenT hfreco_; + const edm::ESGetToken geometryToken_; + HFClusterAlgo algo_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(HFEMClusterProducer); + using namespace reco; HFEMClusterProducer::HFEMClusterProducer(edm::ParameterSet const& conf) - : hfreco_(consumes(conf.getParameter("hits"))) { + : hfreco_(consumes(conf.getParameter("hits"))), geometryToken_{esConsumes()} { produces(); produces(); produces(); @@ -28,12 +48,8 @@ HFEMClusterProducer::HFEMClusterProducer(edm::ParameterSet const& conf) } void HFEMClusterProducer::produce(edm::Event& e, edm::EventSetup const& iSetup) { - edm::Handle hf_hits; - - e.getByToken(hfreco_, hf_hits); - - edm::ESHandle geometry; - iSetup.get().get(geometry); + auto const& hf_hits = e.get(hfreco_); + auto const& geometry = iSetup.getData(geometryToken_); // create return data auto retdata1 = std::make_unique(); @@ -41,7 +57,7 @@ void HFEMClusterProducer::produce(edm::Event& e, edm::EventSetup const& iSetup) algo_.isMC(!e.isRealData()); - algo_.clusterize(*hf_hits, *geometry, *retdata1, *retdata2); + algo_.clusterize(hf_hits, geometry, *retdata1, *retdata2); edm::OrphanHandle SupHandle; edm::OrphanHandle ShapeHandle; diff --git a/RecoEgamma/EgammaHFProducers/plugins/HFEMClusterProducer.h b/RecoEgamma/EgammaHFProducers/plugins/HFEMClusterProducer.h deleted file mode 100644 index 20e9e0b1aff0e..0000000000000 --- a/RecoEgamma/EgammaHFProducers/plugins/HFEMClusterProducer.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef EgammaElectronProducers_HFEMClusterProducer_h -#define EgammaElectronProducers_HFEMClusterProducer_h -//Package: EgammaHFProdcers -// Class : HFClusterProducer -// Original Author: Kevin Klapoetke (minnesota) -// -// $Id: HFClusterProducer.h,v 1.2 2007/09/19 Kevin Klapoetke -// -#include "HFClusterAlgo.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/Event.h" - -class HFEMClusterProducer : public edm::stream::EDProducer<> { -public: - explicit HFEMClusterProducer(edm::ParameterSet const& conf); - void produce(edm::Event& e, edm::EventSetup const& iSetup) override; - void beginRun(edm::Run const&, edm::EventSetup const&) final { algo_.resetForRun(); } - -private: - edm::EDGetToken hfreco_; - HFClusterAlgo algo_; -}; -#endif diff --git a/RecoEgamma/EgammaHFProducers/plugins/HFRecoEcalCandidateProducer.cc b/RecoEgamma/EgammaHFProducers/plugins/HFRecoEcalCandidateProducer.cc index b818994b9b239..d11184a3e2b7c 100644 --- a/RecoEgamma/EgammaHFProducers/plugins/HFRecoEcalCandidateProducer.cc +++ b/RecoEgamma/EgammaHFProducers/plugins/HFRecoEcalCandidateProducer.cc @@ -1,32 +1,53 @@ -/** \class HFRecoEcalCandidateProducers - * - * \author Kevin Klapoetke (Minnesota) - * - * $Id: - * - */ - -#include -#include -#include +// +// Package: EgammaHFProducers +// Class: HFRecoEcalCandidateProducers +// +/**\class HFRecoEcalCandidateProducers.cc +*/ +// +// Original Author: Kevin Klapoetke University of Minnesota +// Created: Wed 26 Sept 2007 +// $Id: +// +// -// Framework -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Utilities/interface/Exception.h" -// #include "DataFormats/EgammaReco/interface/HFEMClusterShape.h" #include "DataFormats/EgammaReco/interface/HFEMClusterShapeAssociation.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" #include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" -#include "DataFormats/RecoCandidate/interface/RecoEcalCandidateFwd.h" - -#include "RecoEgamma/EgammaHFProducers/plugins/HFRecoEcalCandidateProducer.h" #include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/Exception.h" + +#include "HFRecoEcalCandidateAlgo.h" +#include "HFValueStruct.h" + +#include +#include + +class HFRecoEcalCandidateProducer : public edm::stream::EDProducer<> { +public: + explicit HFRecoEcalCandidateProducer(edm::ParameterSet const& conf); + void produce(edm::Event& e, edm::EventSetup const& iSetup) override; + +private: + std::vector defaultDB_; + edm::EDGetToken hfclustersSC_, hfclustersHFEM_, vertices_; + int HFDBversion_; + std::vector HFDBvector_; + bool doPU_; + double Cut2D_; + double defaultSlope2D_; + reco::HFValueStruct hfvars_; + HFRecoEcalCandidateAlgo algo_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(HFRecoEcalCandidateProducer); HFRecoEcalCandidateProducer::HFRecoEcalCandidateProducer(edm::ParameterSet const& conf) : defaultDB_(std::vector()), diff --git a/RecoEgamma/EgammaHFProducers/plugins/HFRecoEcalCandidateProducer.h b/RecoEgamma/EgammaHFProducers/plugins/HFRecoEcalCandidateProducer.h deleted file mode 100644 index 2018b7767477e..0000000000000 --- a/RecoEgamma/EgammaHFProducers/plugins/HFRecoEcalCandidateProducer.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef RECOLOCALCALO_HFCLUSTERPRODUCER_HFRECOECALCANDIDATEPRODUCER_H -#define RECOLOCALCALO_HFCLUSTERPRODUCER_HFRECOECALCANDIDATEPRODUCER_H 1 // -*- C++ -*- -// -// Package: EgammaHFProducers -// Class: HFRecoEcalCandidateProducers -// -/**\class HFRecoEcalCandidateProducers.h HFRecoEcalCandidateProducers.cc -*/ -// -// Original Author: Kevin Klapoetke University of Minnesota -// Created: Wed 26 Sept 2007 -// $Id: -// -// - -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "HFRecoEcalCandidateAlgo.h" -#include "HFValueStruct.h" - -class HFRecoEcalCandidateProducer : public edm::stream::EDProducer<> { -public: - explicit HFRecoEcalCandidateProducer(edm::ParameterSet const& conf); - void produce(edm::Event& e, edm::EventSetup const& iSetup) override; - -private: - std::vector defaultDB_; - edm::EDGetToken hfclustersSC_, hfclustersHFEM_, vertices_; - int HFDBversion_; - std::vector HFDBvector_; - bool doPU_; - double Cut2D_; - double defaultSlope2D_; - reco::HFValueStruct hfvars_; - HFRecoEcalCandidateAlgo algo_; -}; - -#endif diff --git a/RecoEgamma/EgammaHFProducers/plugins/HFValueStruct.cc b/RecoEgamma/EgammaHFProducers/plugins/HFValueStruct.cc index ab4f58bd642dd..75758a1d7292c 100644 --- a/RecoEgamma/EgammaHFProducers/plugins/HFValueStruct.cc +++ b/RecoEgamma/EgammaHFProducers/plugins/HFValueStruct.cc @@ -1,7 +1,5 @@ - #include "HFValueStruct.h" -#include -#include + //version -1 will take information from DB (NOT DONE YET) //version 0 has energy corrections on, everything else off //version 1 has energy correction, and pile up slope and interceept on @@ -26,7 +24,7 @@ reco::HFValueStruct::HFValueStruct(const int& version, const std::vector doPU_ = false; } -int reco::HFValueStruct::indexByIeta(int& ieta) const { return (ieta > 0) ? (abs(ieta) - 29 + 13) : (41 - abs(ieta)); } +int reco::HFValueStruct::indexByIeta(int& ieta) const { return (ieta > 0) ? (ieta - 29 + 13) : (41 + ieta); } int reco::HFValueStruct::ietaByIndex(int& indx) const { return (indx > 13) ? (indx + 29 - 13) : (indx - 41); } //version 0 // EnCor=energy corrections,default 1.0, 26 slots diff --git a/RecoEgamma/EgammaHFProducers/plugins/HFValueStruct.h b/RecoEgamma/EgammaHFProducers/plugins/HFValueStruct.h index 3cfa9531c1763..a39a07f85b8ae 100644 --- a/RecoEgamma/EgammaHFProducers/plugins/HFValueStruct.h +++ b/RecoEgamma/EgammaHFProducers/plugins/HFValueStruct.h @@ -1,9 +1,7 @@ #ifndef _HFVALUESTRUCT_H #define _HFVALUESTRUCT_H -#include #include -#include namespace reco { diff --git a/RecoEgamma/EgammaHFProducers/plugins/HLTHFRecoEcalCandidateProducer.cc b/RecoEgamma/EgammaHFProducers/plugins/HLTHFRecoEcalCandidateProducer.cc index 31e963ec6095e..51d1977491212 100644 --- a/RecoEgamma/EgammaHFProducers/plugins/HLTHFRecoEcalCandidateProducer.cc +++ b/RecoEgamma/EgammaHFProducers/plugins/HLTHFRecoEcalCandidateProducer.cc @@ -1,32 +1,48 @@ -/** \class HFRecoEcalCandidateProducers - * - * \author Kevin Klapoetke (Minnesota) - * - * $Id: - * - */ - -#include -#include -#include +// +// Package: EgammaHFProducers +// Class: HFRecoEcalCandidateProducers +// +/**\class HFRecoEcalCandidateProducers.cc +*/ +// +// Original Author: Kevin Klapoetke University of Minnesota +// Created: Wed 26 Sept 2007 +// $Id: +// +// -// Framework -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Utilities/interface/Exception.h" -// #include "DataFormats/EgammaReco/interface/HFEMClusterShape.h" #include "DataFormats/EgammaReco/interface/HFEMClusterShapeAssociation.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" #include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" -#include "DataFormats/RecoCandidate/interface/RecoEcalCandidateFwd.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/Exception.h" + +#include "HFRecoEcalCandidateAlgo.h" +#include "HFValueStruct.h" + +#include +#include + +class HLTHFRecoEcalCandidateProducer : public edm::global::EDProducer<> { +public: + explicit HLTHFRecoEcalCandidateProducer(edm::ParameterSet const& conf); + void produce(edm::StreamID, edm::Event&, edm::EventSetup const&) const override; -#include "RecoEgamma/EgammaHFProducers/plugins/HLTHFRecoEcalCandidateProducer.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" +private: + const edm::InputTag hfclusters_, vertices_; + const int HFDBversion_; + const std::vector HFDBvector_; + const double Cut2D_; + const double defaultSlope2D_; + const reco::HFValueStruct hfvars_; + const HFRecoEcalCandidateAlgo algo_; +}; HLTHFRecoEcalCandidateProducer::HLTHFRecoEcalCandidateProducer(edm::ParameterSet const& conf) : hfclusters_(conf.getParameter("hfclusters")), diff --git a/RecoEgamma/EgammaHFProducers/plugins/HLTHFRecoEcalCandidateProducer.h b/RecoEgamma/EgammaHFProducers/plugins/HLTHFRecoEcalCandidateProducer.h deleted file mode 100644 index 90882ed7b5dcc..0000000000000 --- a/RecoEgamma/EgammaHFProducers/plugins/HLTHFRecoEcalCandidateProducer.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef RECOLOCALCALO_HFCLUSTERPRODUCER_HLTHFRECOECALCANDIDATEPRODUCER_H -#define RECOLOCALCALO_HFCLUSTERPRODUCER_HLTHFRECOECALCANDIDATEPRODUCER_H 1 // -*- C++ -*- -// -// Package: EgammaHFProducers -// Class: HFRecoEcalCandidateProducers -// -/**\class HFRecoEcalCandidateProducers.h HFRecoEcalCandidateProducers.cc -*/ -// -// Original Author: Kevin Klapoetke University of Minnesota -// Created: Wed 26 Sept 2007 -// $Id: -// -// - -#include "FWCore/Framework/interface/global/EDProducer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "HFRecoEcalCandidateAlgo.h" -#include "HFValueStruct.h" - -class HLTHFRecoEcalCandidateProducer : public edm::global::EDProducer<> { -public: - explicit HLTHFRecoEcalCandidateProducer(edm::ParameterSet const& conf); - void produce(edm::StreamID, edm::Event&, edm::EventSetup const&) const override; - -private: - const edm::InputTag hfclusters_, vertices_; - const int HFDBversion_; - const std::vector HFDBvector_; - const double Cut2D_; - const double defaultSlope2D_; - const reco::HFValueStruct hfvars_; - const HFRecoEcalCandidateAlgo algo_; -}; - -#endif diff --git a/RecoEgamma/EgammaHFProducers/plugins/SealModule.cc b/RecoEgamma/EgammaHFProducers/plugins/SealModule.cc deleted file mode 100644 index dc912d3950b6d..0000000000000 --- a/RecoEgamma/EgammaHFProducers/plugins/SealModule.cc +++ /dev/null @@ -1,9 +0,0 @@ - -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ModuleFactory.h" - -#include "HFEMClusterProducer.h" -#include "HFRecoEcalCandidateProducer.h" - -DEFINE_FWK_MODULE(HFEMClusterProducer); -DEFINE_FWK_MODULE(HFRecoEcalCandidateProducer); diff --git a/RecoEgamma/EgammaHLTProducers/plugins/BuildFile.xml b/RecoEgamma/EgammaHLTProducers/plugins/BuildFile.xml index 7ccea71c41574..7cc4346fe1660 100644 --- a/RecoEgamma/EgammaHLTProducers/plugins/BuildFile.xml +++ b/RecoEgamma/EgammaHLTProducers/plugins/BuildFile.xml @@ -4,6 +4,7 @@ + @@ -12,6 +13,9 @@ + + + diff --git a/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTClusterShapeProducer.cc b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTClusterShapeProducer.cc index 3f52dbe33e98e..bdcbc7935fa7c 100644 --- a/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTClusterShapeProducer.cc +++ b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTClusterShapeProducer.cc @@ -12,7 +12,6 @@ // // -// user include files #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Framework/interface/Event.h" @@ -83,6 +82,11 @@ void EgammaHLTClusterShapeProducer::produce(edm::StreamID sid, for (unsigned int iRecoEcalCand = 0; iRecoEcalCand < recoecalcandHandle->size(); iRecoEcalCand++) { reco::RecoEcalCandidateRef recoecalcandref(recoecalcandHandle, iRecoEcalCand); + if (recoecalcandref->superCluster()->seed()->seed().det() != DetId::Ecal) { //HGCAL, skip for now + clshMap.insert(recoecalcandref, 0); + clsh5x5Map.insert(recoecalcandref, 0); + continue; + } std::vector vCov; double sigmaee; diff --git a/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTEleL1TrackIsolProducer.cc b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTEleL1TrackIsolProducer.cc new file mode 100644 index 0000000000000..611ea49c506a5 --- /dev/null +++ b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTEleL1TrackIsolProducer.cc @@ -0,0 +1,93 @@ +// Author: Sam Harper (RAL/CERN) +// L1 track isolation producer for the HLT +// A quick primer on how the E/gamma HLT works w.r.t to ID variables +// 1. the supercluster is the primary object +// 2. superclusters get id variables associated to them via association maps keyed +// to the supercluster +// However here we also need to read in electron objects as we need to solve for which +// GsfTrack associated to the supercluster to use for the isolation +// The electron producer solves for this and assigns the electron the best GsfTrack +// which we will use for the vz of the electron +// One thing which Swagata Mukherjee pointed out is that we have to be careful of +// is getting a bad GsfTrack with a bad vertex which will give us a fake vz which then +// leads to a perfectly isolated electron as that random vz is not a vertex + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +#include "DataFormats/EgammaCandidates/interface/Electron.h" +#include "DataFormats/EgammaCandidates/interface/ElectronFwd.h" +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidateFwd.h" +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidateIsolation.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/TrackReco/interface/Track.h" + +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaL1TkIsolation.h" + +#include + +class EgammaHLTEleL1TrackIsolProducer : public edm::global::EDProducer<> { +public: + explicit EgammaHLTEleL1TrackIsolProducer(const edm::ParameterSet&); + ~EgammaHLTEleL1TrackIsolProducer() override = default; + void produce(edm::StreamID sid, edm::Event&, const edm::EventSetup&) const override; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + const edm::EDGetTokenT ecalCandsToken_; + const edm::EDGetTokenT elesToken_; + const edm::EDGetTokenT l1TrksToken_; + EgammaL1TkIsolation isolAlgo_; +}; + +EgammaHLTEleL1TrackIsolProducer::EgammaHLTEleL1TrackIsolProducer(const edm::ParameterSet& config) + : ecalCandsToken_(consumes(config.getParameter("ecalCands"))), + elesToken_(consumes(config.getParameter("eles"))), + l1TrksToken_(consumes(config.getParameter("l1Tracks"))), + isolAlgo_(config.getParameter("isolCfg")) { + produces(); +} + +void EgammaHLTEleL1TrackIsolProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("ecalCands", edm::InputTag("hltEgammaCandidates")); + desc.add("eles", edm::InputTag("hltEgammaGsfElectrons")); + desc.add("l1Tracks", edm::InputTag("TTTracksFromTrackletEmulation", "Level1TTTracks")); + desc.add("isolCfg", EgammaL1TkIsolation::makePSetDescription()); + descriptions.add("hltEgammaHLTEleL1TrackIsolProducer", desc); +} +void EgammaHLTEleL1TrackIsolProducer::produce(edm::StreamID sid, + edm::Event& iEvent, + const edm::EventSetup& iSetup) const { + auto ecalCands = iEvent.getHandle(ecalCandsToken_); + auto eles = iEvent.getHandle(elesToken_); + auto l1Trks = iEvent.getHandle(l1TrksToken_); + + auto recoEcalCandMap = std::make_unique(ecalCands); + + for (size_t candNr = 0; candNr < ecalCands->size(); candNr++) { + reco::RecoEcalCandidateRef recoEcalCandRef(ecalCands, candNr); + reco::ElectronRef eleRef; + for (size_t eleNr = 0; eleNr < eles->size(); eleNr++) { + if ((*eles)[eleNr].superCluster() == recoEcalCandRef->superCluster()) { + eleRef = reco::ElectronRef(eles, eleNr); + break; + } + } + + float isol = + eleRef.isNonnull() ? isolAlgo_.calIsol(*eleRef->gsfTrack(), *l1Trks).second : std::numeric_limits::max(); + + recoEcalCandMap->insert(recoEcalCandRef, isol); + } + iEvent.put(std::move(recoEcalCandMap)); +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(EgammaHLTEleL1TrackIsolProducer); diff --git a/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTExtraProducer.cc b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTExtraProducer.cc new file mode 100644 index 0000000000000..15b60e8fddc15 --- /dev/null +++ b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTExtraProducer.cc @@ -0,0 +1,531 @@ + +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +#include "DataFormats/HLTReco/interface/EgammaObject.h" +#include "DataFormats/HLTReco/interface/EgammaObjectFwd.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/EgammaReco/interface/ElectronSeed.h" +#include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidateFwd.h" +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidateIsolation.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" +#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" +#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" +#include "DataFormats/ParticleFlowReco/interface/PFClusterFwd.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/Math/interface/deltaR.h" + +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" + +#include +#include + +namespace { + //changes double to string for product name + //ie "." is replaced with "p" and for -ve vals, string is M instead so -28 is M28 + //has a fixed precision of precision although it removes trailing zeros and the . + std::string convertToProdNameStr(double val, int precision = 3) { + std::ostringstream valOStr; + valOStr << std::fixed << std::setprecision(precision) << val; + std::string valStr = valOStr.str(); + while (valStr.size() > 1 && valStr.back() == '0') { + valStr.pop_back(); + } + if (valStr.size() > 1 && valStr.back() == '.') { + valStr.pop_back(); + } + auto decPoint = valStr.find('.'); + if (decPoint != std::string::npos) { + valStr.replace(decPoint, 1, "p"); + } + if (val < 0) + valStr.replace(0, 1, "M"); + return valStr; + } + + template + std::vector> countRecHits(const T& recHitHandle, const std::vector& thresholds) { + std::vector> counts(thresholds.size()); + for (auto& count : counts) + count = std::make_unique(0); + if (recHitHandle.isValid()) { + for (const auto& recHit : *recHitHandle) { + for (size_t thresNr = 0; thresNr < thresholds.size(); thresNr++) { + if (recHit.energy() >= thresholds[thresNr]) { + (*counts[thresNr])++; + } + } + } + } + return counts; + } +} // namespace + +class EgammaHLTExtraProducer : public edm::global::EDProducer<> { +public: + explicit EgammaHLTExtraProducer(const edm::ParameterSet& pset); + ~EgammaHLTExtraProducer() override {} + + void produce(edm::StreamID streamID, edm::Event& event, const edm::EventSetup& eventSetup) const override; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + static void setVars(trigger::EgammaObject& egTrigObj, + const reco::RecoEcalCandidateRef& ecalCandRef, + const std::vector>& valueMapHandles); + static reco::GsfTrackRefVector matchingGsfTrks(const reco::SuperClusterRef& scRef, + const edm::Handle& gsfTrksHandle); + static void setGsfTracks(trigger::EgammaObject& egTrigObj, + const edm::Handle& gsfTrksHandle); + static void setSeeds(trigger::EgammaObject& egTrigObj, edm::Handle& eleSeedsHandle); + + //these three filter functions are overly similar but with annoying differences + //eg rechits needs to access geometry, trk dr is also w.r.t the track eta/phi + //still could collapse into a single function + template + std::unique_ptr filterRecHits( + const std::vector>& egTrigObjs, + const edm::Handle& recHits, + const CaloGeometry& geom, + float maxDR2 = 0.4 * 0.4) const; + + std::unique_ptr filterTrks( + const std::vector>& egTrigObjs, + const edm::Handle& trks, + float maxDR2 = 0.4 * 0.4) const; + + std::unique_ptr filterPFClusIso( + const std::vector>& egTrigObjs, + const edm::Handle& pfClus, + float maxDR2 = 0.4 * 0.4) const; + + struct Tokens { + //these are the tokens which comprise the E/gamma candidate (eg cand,gsf track, pixel seeds) + struct EgObjTokens { + edm::EDGetTokenT ecalCands; + edm::EDGetTokenT gsfTracks; + edm::EDGetTokenT pixelSeeds; + }; + std::vector> egCands; + + std::vector, std::string>> ecal; + std::vector, std::string>> hcal; + std::vector, std::string>> trks; + std::vector, std::string>> pfClusIso; + + template + static void setToken(edm::EDGetTokenT& token, + edm::ConsumesCollector& cc, + const edm::ParameterSet& pset, + const std::string& tagname) { + token = cc.consumes(pset.getParameter(tagname)); + } + template + static void setToken(std::vector>& tokens, + edm::ConsumesCollector& cc, + const edm::ParameterSet& pset, + const std::string& tagname) { + auto inputTags = pset.getParameter>(tagname); + tokens.resize(inputTags.size()); + for (size_t tagNr = 0; tagNr < inputTags.size(); tagNr++) { + tokens[tagNr] = cc.consumes(inputTags[tagNr]); + } + } + template + static void setToken(std::vector, std::string>>& tokens, + edm::ConsumesCollector& cc, + const edm::ParameterSet& pset, + const std::string& tagname) { + const auto& collectionPSets = pset.getParameter>(tagname); + for (const auto& collPSet : collectionPSets) { + edm::EDGetTokenT token = cc.consumes(collPSet.getParameter("src")); + std::string label = collPSet.getParameter("label"); + tokens.emplace_back(token, std::move(label)); + } + } + + static void setToken(std::vector>& tokens, + edm::ConsumesCollector& cc, + const edm::ParameterSet& pset, + const std::string& tagname) { + const auto& collectionPSets = pset.getParameter>(tagname); + for (const auto& collPSet : collectionPSets) { + EgObjTokens objTokens; + setToken(objTokens.ecalCands, cc, collPSet, "ecalCands"); + setToken(objTokens.gsfTracks, cc, collPSet, "gsfTracks"); + setToken(objTokens.pixelSeeds, cc, collPSet, "pixelSeeds"); + std::string label = collPSet.getParameter("label"); + tokens.emplace_back(objTokens, std::move(label)); + } + } + Tokens(const edm::ParameterSet& pset, edm::ConsumesCollector&& cc); + }; + + const Tokens tokens_; + + float minPtToSaveHits_; + bool saveHitsPlusPi_; + bool saveHitsPlusHalfPi_; + std::vector recHitCountThresholds_; +}; + +EgammaHLTExtraProducer::Tokens::Tokens(const edm::ParameterSet& pset, edm::ConsumesCollector&& cc) { + setToken(egCands, cc, pset, "egCands"); + setToken(ecal, cc, pset, "ecal"); + setToken(hcal, cc, pset, "hcal"); + setToken(trks, cc, pset, "trks"); + setToken(pfClusIso, cc, pset, "pfClusIso"); +} + +EgammaHLTExtraProducer::EgammaHLTExtraProducer(const edm::ParameterSet& pset) + : tokens_(pset, consumesCollector()), + minPtToSaveHits_(pset.getParameter("minPtToSaveHits")), + saveHitsPlusPi_(pset.getParameter("saveHitsPlusPi")), + saveHitsPlusHalfPi_(pset.getParameter("saveHitsPlusHalfPi")), + recHitCountThresholds_(pset.getParameter>("recHitCountThresholds")) { + consumesMany(); + + for (auto& tokenLabel : tokens_.egCands) { + produces(tokenLabel.second); + } + for (auto& tokenLabel : tokens_.ecal) { + produces(tokenLabel.second); + for (const auto& thres : recHitCountThresholds_) { + produces("countEcalRecHits" + tokenLabel.second + "Thres" + convertToProdNameStr(thres) + "GeV"); + } + } + for (auto& tokenLabel : tokens_.hcal) { + produces(tokenLabel.second); + for (const auto& thres : recHitCountThresholds_) { + produces("countHcalRecHits" + tokenLabel.second + "Thres" + convertToProdNameStr(thres) + "GeV"); + } + } + for (auto& tokenLabel : tokens_.trks) { + produces(tokenLabel.second); + } + for (auto& tokenLabel : tokens_.pfClusIso) { + produces(tokenLabel.second); + } +} + +void EgammaHLTExtraProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("minPtToSaveHits", 0.); + desc.add("saveHitsPlusPi", false); + desc.add("saveHitsPlusHalfPi", true); + desc.add>("recHitCountThresholds", std::vector{0., 0.5, 1.0, 1.5, 2.0}); + + edm::ParameterSetDescription egCandsDesc; + egCandsDesc.add("ecalCands", edm::InputTag("")); + egCandsDesc.add("pixelSeeds", edm::InputTag("")); + egCandsDesc.add("gsfTracks", edm::InputTag("")); + egCandsDesc.add("label", ""); + std::vector egCandsDefaults(1); + egCandsDefaults[0].addParameter("ecalCands", edm::InputTag("hltEgammaCandidates")); + egCandsDefaults[0].addParameter("pixelSeeds", edm::InputTag("hltEgammaElectronPixelSeeds")); + egCandsDefaults[0].addParameter("gsfTracks", edm::InputTag("hltEgammaGsfTracks")); + egCandsDefaults[0].addParameter("label", std::string("")); + + edm::ParameterSetDescription tokenLabelDesc; + tokenLabelDesc.add("src", edm::InputTag("")); + tokenLabelDesc.add("label", ""); + std::vector ecalDefaults(2); + ecalDefaults[0].addParameter("src", edm::InputTag("hltEcalRecHit", "EcalRecHitsEB")); + ecalDefaults[0].addParameter("label", std::string("EcalRecHitsEB")); + ecalDefaults[1].addParameter("src", edm::InputTag("hltEcalRecHit", "EcalRecHitsEE")); + ecalDefaults[1].addParameter("label", std::string("EcalRecHitsEE")); + std::vector hcalDefaults(1); + hcalDefaults[0].addParameter("src", edm::InputTag("hltHbhereco")); + hcalDefaults[0].addParameter("label", std::string("")); + std::vector trksDefaults(1); + trksDefaults[0].addParameter("src", edm::InputTag("generalTracks")); + trksDefaults[0].addParameter("label", std::string("")); + std::vector pfClusIsoDefaults(3); + pfClusIsoDefaults[0].addParameter("src", edm::InputTag("hltParticleFlowClusterECALL1Seeded")); + pfClusIsoDefaults[0].addParameter("label", std::string("Ecal")); + pfClusIsoDefaults[1].addParameter("src", edm::InputTag("hltParticleFlowClusterECALUnseeded")); + pfClusIsoDefaults[1].addParameter("label", std::string("EcalUnseeded")); + pfClusIsoDefaults[2].addParameter("src", edm::InputTag("hltParticleFlowClusterHCAL")); + pfClusIsoDefaults[2].addParameter("label", std::string("Hcal")); + + desc.addVPSet("egCands", egCandsDesc, egCandsDefaults); + desc.addVPSet("ecal", tokenLabelDesc, ecalDefaults); + desc.addVPSet("hcal", tokenLabelDesc, hcalDefaults); + desc.addVPSet("trks", tokenLabelDesc, trksDefaults); + desc.addVPSet("pfClusIso", tokenLabelDesc, pfClusIsoDefaults); + + descriptions.add(("hltEgammaHLTExtraProducer"), desc); +} + +void EgammaHLTExtraProducer::produce(edm::StreamID streamID, + edm::Event& event, + const edm::EventSetup& eventSetup) const { + std::vector> valueMapHandles; + event.getManyByType(valueMapHandles); + + std::vector> egTrigObjColls; + for (const auto& egCandsToken : tokens_.egCands) { + auto ecalCandsHandle = event.getHandle(egCandsToken.first.ecalCands); + auto gsfTrksHandle = event.getHandle(egCandsToken.first.gsfTracks); + auto pixelSeedsHandle = event.getHandle(egCandsToken.first.pixelSeeds); + + auto egTrigObjs = std::make_unique(); + for (size_t candNr = 0; ecalCandsHandle.isValid() && candNr < ecalCandsHandle->size(); candNr++) { + reco::RecoEcalCandidateRef candRef(ecalCandsHandle, candNr); + egTrigObjs->push_back(*candRef); + auto& egTrigObj = egTrigObjs->back(); + setVars(egTrigObj, candRef, valueMapHandles); + setGsfTracks(egTrigObj, gsfTrksHandle); + setSeeds(egTrigObj, pixelSeedsHandle); + } + egTrigObjColls.emplace_back(std::move(egTrigObjs)); + } + + edm::ESHandle caloGeomHandle; + eventSetup.get().get(caloGeomHandle); + + auto filterAndStoreRecHits = [caloGeomHandle, &event, this](const auto& egTrigObjs, const auto& tokenLabels) { + for (const auto& tokenLabel : tokenLabels) { + auto handle = event.getHandle(tokenLabel.first); + auto recHits = filterRecHits(egTrigObjs, handle, *caloGeomHandle); + event.put(std::move(recHits), tokenLabel.second); + } + }; + + auto storeCountRecHits = [&event](const auto& tokenLabels, const auto& thresholds, const std::string& prefixLabel) { + for (const auto& tokenLabel : tokenLabels) { + auto handle = event.getHandle(tokenLabel.first); + auto count = countRecHits(handle, thresholds); + for (size_t thresNr = 0; thresNr < thresholds.size(); thresNr++) { + const auto& thres = thresholds[thresNr]; + event.put(std::move(count[thresNr]), + prefixLabel + tokenLabel.second + "Thres" + convertToProdNameStr(thres) + "GeV"); + } + } + }; + + auto filterAndStore = [&event, this](const auto& egTrigObjs, const auto& tokenLabels, auto filterFunc) { + for (const auto& tokenLabel : tokenLabels) { + auto handle = event.getHandle(tokenLabel.first); + auto filtered = (this->*filterFunc)(egTrigObjs, handle, 0.4 * 0.4); + event.put(std::move(filtered), tokenLabel.second); + } + }; + + filterAndStoreRecHits(egTrigObjColls, tokens_.ecal); + filterAndStoreRecHits(egTrigObjColls, tokens_.hcal); + storeCountRecHits(tokens_.ecal, recHitCountThresholds_, "countEcalRecHits"); + storeCountRecHits(tokens_.hcal, recHitCountThresholds_, "countHcalRecHits"); + filterAndStore(egTrigObjColls, tokens_.pfClusIso, &EgammaHLTExtraProducer::filterPFClusIso); + filterAndStore(egTrigObjColls, tokens_.trks, &EgammaHLTExtraProducer::filterTrks); + + for (size_t collNr = 0; collNr < egTrigObjColls.size(); collNr++) { + event.put(std::move(egTrigObjColls[collNr]), tokens_.egCands[collNr].second); + } +} + +void EgammaHLTExtraProducer::setVars( + trigger::EgammaObject& egTrigObj, + const reco::RecoEcalCandidateRef& ecalCandRef, + const std::vector>& valueMapHandles) { + std::vector> vars; + for (auto& valueMapHandle : valueMapHandles) { + auto mapIt = valueMapHandle->find(ecalCandRef); + if (mapIt != valueMapHandle->end()) { + std::string name = valueMapHandle.provenance()->moduleLabel(); + if (!valueMapHandle.provenance()->productInstanceName().empty()) { + name += "_" + valueMapHandle.provenance()->productInstanceName(); + } + vars.emplace_back(std::move(name), mapIt->val); + } + } + egTrigObj.setVars(std::move(vars)); +} + +reco::GsfTrackRefVector EgammaHLTExtraProducer::matchingGsfTrks( + const reco::SuperClusterRef& scRef, const edm::Handle& gsfTrksHandle) { + if (!gsfTrksHandle.isValid()) { + return reco::GsfTrackRefVector(); + } + + reco::GsfTrackRefVector gsfTrkRefs(gsfTrksHandle.id()); + for (size_t trkNr = 0; gsfTrksHandle.isValid() && trkNr < gsfTrksHandle->size(); trkNr++) { + reco::GsfTrackRef trkRef(gsfTrksHandle, trkNr); + edm::RefToBase seed = trkRef->extra()->seedRef(); + reco::ElectronSeedRef eleSeed = seed.castTo(); + edm::RefToBase caloCluster = eleSeed->caloCluster(); + reco::SuperClusterRef scRefFromTrk = caloCluster.castTo(); + if (scRefFromTrk == scRef) { + gsfTrkRefs.push_back(trkRef); + } + } + return gsfTrkRefs; +} + +void EgammaHLTExtraProducer::setGsfTracks(trigger::EgammaObject& egTrigObj, + const edm::Handle& gsfTrksHandle) { + egTrigObj.setGsfTracks(matchingGsfTrks(egTrigObj.superCluster(), gsfTrksHandle)); +} + +void EgammaHLTExtraProducer::setSeeds(trigger::EgammaObject& egTrigObj, + edm::Handle& eleSeedsHandle) { + if (!eleSeedsHandle.isValid()) { + egTrigObj.setSeeds(reco::ElectronSeedRefVector()); + } else { + reco::ElectronSeedRefVector trigObjSeeds(eleSeedsHandle.id()); + + for (size_t seedNr = 0; eleSeedsHandle.isValid() && seedNr < eleSeedsHandle->size(); seedNr++) { + reco::ElectronSeedRef eleSeed(eleSeedsHandle, seedNr); + edm::RefToBase caloCluster = eleSeed->caloCluster(); + reco::SuperClusterRef scRefFromSeed = caloCluster.castTo(); + + if (scRefFromSeed == egTrigObj.superCluster()) { + trigObjSeeds.push_back(eleSeed); + } + } + egTrigObj.setSeeds(std::move(trigObjSeeds)); + } +} + +template +std::unique_ptr EgammaHLTExtraProducer::filterRecHits( + const std::vector>& egTrigObjColls, + const edm::Handle& recHits, + const CaloGeometry& geom, + float maxDR2) const { + auto filteredHits = std::make_unique(); + if (!recHits.isValid()) + return filteredHits; + + std::vector> etaPhis; + for (const auto& egTrigObjs : egTrigObjColls) { + for (const auto& egTrigObj : *egTrigObjs) { + if (egTrigObj.pt() >= minPtToSaveHits_) { + etaPhis.push_back({egTrigObj.eta(), egTrigObj.phi()}); + if (saveHitsPlusPi_) + etaPhis.push_back({egTrigObj.eta(), egTrigObj.phi() + 3.14159}); + if (saveHitsPlusHalfPi_) + etaPhis.push_back({egTrigObj.eta(), egTrigObj.phi() + 3.14159 / 2.}); + } + } + } + auto deltaR2Match = [&etaPhis, &maxDR2](const GlobalPoint& pos) { + float eta = pos.eta(); + float phi = pos.phi(); + for (auto& etaPhi : etaPhis) { + if (reco::deltaR2(eta, phi, etaPhi.first, etaPhi.second) < maxDR2) + return true; + } + return false; + }; + + for (auto& hit : *recHits) { + const CaloSubdetectorGeometry* subDetGeom = geom.getSubdetectorGeometry(hit.id()); + if (subDetGeom) { + auto cellGeom = subDetGeom->getGeometry(hit.id()); + if (deltaR2Match(cellGeom->getPosition())) + filteredHits->push_back(hit); + } else { + throw cms::Exception("GeomError") << "could not get geometry for det id " << hit.id().rawId(); + } + } + return filteredHits; +} + +std::unique_ptr EgammaHLTExtraProducer::filterTrks( + const std::vector>& egTrigObjColls, + const edm::Handle& trks, + float maxDR2) const { + auto filteredTrks = std::make_unique(); + if (!trks.isValid()) + return filteredTrks; + + //so because each egamma object can have multiple eta/phi pairs + //easier to just make a temp vector and then copy that in with the +pi and +pi/2 + std::vector> etaPhisTmp; + for (const auto& egTrigObjs : egTrigObjColls) { + for (const auto& egTrigObj : *egTrigObjs) { + if (egTrigObj.pt() >= minPtToSaveHits_) { + etaPhisTmp.push_back({egTrigObj.eta(), egTrigObj.phi()}); + //also save the eta /phi of all gsf tracks with the object + for (const auto& gsfTrk : egTrigObj.gsfTracks()) { + etaPhisTmp.push_back({gsfTrk->eta(), gsfTrk->phi()}); + } + } + } + } + std::vector> etaPhis; + for (const auto& etaPhi : etaPhisTmp) { + etaPhis.push_back(etaPhi); + if (saveHitsPlusPi_) + etaPhis.push_back({etaPhi.first, etaPhi.second + 3.14159}); + if (saveHitsPlusHalfPi_) + etaPhis.push_back({etaPhi.first, etaPhi.second + 3.14159 / 2.}); + } + + auto deltaR2Match = [&etaPhis, &maxDR2](float eta, float phi) { + for (auto& etaPhi : etaPhis) { + if (reco::deltaR2(eta, phi, etaPhi.first, etaPhi.second) < maxDR2) + return true; + } + return false; + }; + + for (auto& trk : *trks) { + if (deltaR2Match(trk.eta(), trk.phi())) + filteredTrks->push_back(trk); + } + return filteredTrks; +} + +std::unique_ptr EgammaHLTExtraProducer::filterPFClusIso( + const std::vector>& egTrigObjColls, + const edm::Handle& pfClus, + float maxDR2) const { + auto filteredPFClus = std::make_unique(); + if (!pfClus.isValid()) + return filteredPFClus; + + std::vector> etaPhis; + for (const auto& egTrigObjs : egTrigObjColls) { + for (const auto& egTrigObj : *egTrigObjs) { + if (egTrigObj.pt() >= minPtToSaveHits_) { + etaPhis.push_back({egTrigObj.eta(), egTrigObj.phi()}); + if (saveHitsPlusPi_) + etaPhis.push_back({egTrigObj.eta(), egTrigObj.phi() + 3.14159}); + if (saveHitsPlusHalfPi_) + etaPhis.push_back({egTrigObj.eta(), egTrigObj.phi() + 3.14159 / 2.}); + } + } + } + auto deltaR2Match = [&etaPhis, &maxDR2](float eta, float phi) { + for (auto& etaPhi : etaPhis) { + if (reco::deltaR2(eta, phi, etaPhi.first, etaPhi.second) < maxDR2) + return true; + } + return false; + }; + + for (auto& clus : *pfClus) { + if (deltaR2Match(clus.eta(), clus.phi())) + filteredPFClus->push_back(clus); + } + return filteredPFClus; +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(EgammaHLTExtraProducer); diff --git a/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTHGCalIDVarProducer.cc b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTHGCalIDVarProducer.cc new file mode 100644 index 0000000000000..dd3a679b4f8de --- /dev/null +++ b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTHGCalIDVarProducer.cc @@ -0,0 +1,131 @@ +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidateIsolation.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "DataFormats/CaloRecHit/interface/CaloCluster.h" +#include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidateFwd.h" +#include "DataFormats/ParticleFlowReco/interface/PFRecHit.h" +#include "RecoEgamma/EgammaTools/interface/HGCalShowerShapeHelper.h" +#include "RecoEgamma/EgammaTools/interface/HGCalClusterTools.h" +#include "RecoEgamma/EgammaTools/interface/EgammaHGCALIDParamDefaults.h" + +class EgammaHLTHGCalIDVarProducer : public edm::stream::EDProducer<> { +public: + explicit EgammaHLTHGCalIDVarProducer(const edm::ParameterSet&); + ~EgammaHLTHGCalIDVarProducer() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + void produce(edm::Event&, const edm::EventSetup&) override; + + class PCAAssocMap { + public: + PCAAssocMap(double HGCalShowerShapeHelper::ShowerWidths::*var, const std::string& name) : var_(var), name_(name) {} + + void initMap(const edm::Handle& candHandle) { + assocMap_ = std::make_unique(candHandle); + } + + void insert(reco::RecoEcalCandidateRef& ref, const HGCalShowerShapeHelper::ShowerWidths& showerWidths) { + assocMap_->insert(ref, showerWidths.*var_); + } + + std::unique_ptr releaseMap() { return std::move(assocMap_); } + const std::string& name() const { return name_; } + + private: + double HGCalShowerShapeHelper::ShowerWidths::*var_; + std::string name_; + std::unique_ptr assocMap_; + }; + +private: + // ----------member data --------------------------- + float rCylinder_; + float hOverECone_; + std::vector pcaAssocMaps_; + const edm::EDGetTokenT recoEcalCandidateToken_; + const edm::EDGetTokenT hgcalRecHitToken_; + const edm::EDGetTokenT layerClusterToken_; + HGCalShowerShapeHelper ssHelper_; +}; + +EgammaHLTHGCalIDVarProducer::EgammaHLTHGCalIDVarProducer(const edm::ParameterSet& config) + : rCylinder_(config.getParameter("rCylinder")), + hOverECone_(config.getParameter("hOverECone")), + recoEcalCandidateToken_( + consumes(config.getParameter("recoEcalCandidateProducer"))), + hgcalRecHitToken_(consumes(config.getParameter("hgcalRecHits"))), + layerClusterToken_(consumes(config.getParameter("layerClusters"))), + ssHelper_(consumesCollector()) { + pcaAssocMaps_.emplace_back(PCAAssocMap(&HGCalShowerShapeHelper::ShowerWidths::sigma2xx, "sigma2xx")); + pcaAssocMaps_.emplace_back(PCAAssocMap(&HGCalShowerShapeHelper::ShowerWidths::sigma2yy, "sigma2yy")); + pcaAssocMaps_.emplace_back(PCAAssocMap(&HGCalShowerShapeHelper::ShowerWidths::sigma2zz, "sigma2zz")); + pcaAssocMaps_.emplace_back(PCAAssocMap(&HGCalShowerShapeHelper::ShowerWidths::sigma2xy, "sigma2xy")); + pcaAssocMaps_.emplace_back(PCAAssocMap(&HGCalShowerShapeHelper::ShowerWidths::sigma2yz, "sigma2yz")); + pcaAssocMaps_.emplace_back(PCAAssocMap(&HGCalShowerShapeHelper::ShowerWidths::sigma2zx, "sigma2zx")); + pcaAssocMaps_.emplace_back(PCAAssocMap(&HGCalShowerShapeHelper::ShowerWidths::sigma2uu, "sigma2uu")); + pcaAssocMaps_.emplace_back(PCAAssocMap(&HGCalShowerShapeHelper::ShowerWidths::sigma2vv, "sigma2vv")); + pcaAssocMaps_.emplace_back(PCAAssocMap(&HGCalShowerShapeHelper::ShowerWidths::sigma2ww, "sigma2ww")); + + produces("rVar"); + produces("hForHOverE"); + for (auto& var : pcaAssocMaps_) { + produces(var.name()); + } +} + +EgammaHLTHGCalIDVarProducer::~EgammaHLTHGCalIDVarProducer() {} + +void EgammaHLTHGCalIDVarProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("recoEcalCandidateProducer", edm::InputTag("hltL1SeededRecoEcalCandidate")); + desc.add("hgcalRecHits", edm::InputTag("hgcalRecHits")); + desc.add("layerClusters", edm::InputTag("layerClusters")); + desc.add("rCylinder", EgammaHGCALIDParamDefaults::kRCylinder); + desc.add("hOverECone", 0.15); + descriptions.add(("hltEgammaHLTHGCalIDVarProducer"), desc); +} + +void EgammaHLTHGCalIDVarProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + auto recoEcalCandHandle = iEvent.getHandle(recoEcalCandidateToken_); + const auto& hgcalRecHits = iEvent.get(hgcalRecHitToken_); + const auto& layerClusters = iEvent.get(layerClusterToken_); + + ssHelper_.initPerEvent(iSetup, hgcalRecHits); + + auto rVarMap = std::make_unique(recoEcalCandHandle); + auto hForHoverEMap = std::make_unique(recoEcalCandHandle); + for (auto& pcaMap : pcaAssocMaps_) { + pcaMap.initMap(recoEcalCandHandle); + } + + for (size_t candNr = 0; candNr < recoEcalCandHandle->size(); candNr++) { + reco::RecoEcalCandidateRef candRef(recoEcalCandHandle, candNr); + auto ssCalc = ssHelper_.createCalc(*candRef->superCluster()); + rVarMap->insert(candRef, ssCalc.getRvar(rCylinder_)); + + float hForHoverE = HGCalClusterTools::hadEnergyInCone( + candRef->superCluster()->eta(), candRef->superCluster()->phi(), layerClusters, 0., hOverECone_, 0., 0.); + hForHoverEMap->insert(candRef, hForHoverE); + auto pcaWidths = ssCalc.getPCAWidths(rCylinder_); + for (auto& pcaMap : pcaAssocMaps_) { + pcaMap.insert(candRef, pcaWidths); + } + } + iEvent.put(std::move(rVarMap), "rVar"); + iEvent.put(std::move(hForHoverEMap), "hForHOverE"); + for (auto& pcaMap : pcaAssocMaps_) { + iEvent.put(pcaMap.releaseMap(), pcaMap.name()); + } +} + +DEFINE_FWK_MODULE(EgammaHLTHGCalIDVarProducer); diff --git a/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTPhase2ExtraProducer.cc b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTPhase2ExtraProducer.cc new file mode 100644 index 0000000000000..20fe50d39ce60 --- /dev/null +++ b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTPhase2ExtraProducer.cc @@ -0,0 +1,400 @@ + +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +#include "DataFormats/HLTReco/interface/EgammaObject.h" +#include "DataFormats/HLTReco/interface/EgammaObjectFwd.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/L1TrackTrigger/interface/L1Track.h" +#include "DataFormats/L1TrackTrigger/interface/L1TrackTruthPair.h" +#include "DataFormats/Math/interface/deltaR.h" +#include "DataFormats/Common/interface/RefToPtr.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHit.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHitCollections.h" +#include "DataFormats/Common/interface/ValueMap.h" + +#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" +#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" +#include "SimTracker/TrackTriggerAssociation/interface/TTTrackAssociationMap.h" + +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" + +#include +#include + +//class compliments EgammaHLTExtraProducer and adds all the phase-II specific E/g HLT debug information to the event +//this allows phase-II to be factorised from the standard class rather than having to extend EgammaHLTExtraProducer to deal with it +//although to be fair, given all the phase-II code is now in the release, the need for this factorisation is not as great +//and ultimately it could be merged into EgammaHLTExtraProducer + +namespace { + //changes double to string for product name + //ie "." is replaced with "p" and for -ve vals, string is M instead so -28 is M28 + //has a fixed precision of precision although it removes trailing zeros and the . + std::string convertToProdNameStr(double val, int precision = 3) { + std::ostringstream valOStr; + valOStr << std::fixed << std::setprecision(precision) << val; + std::string valStr = valOStr.str(); + while (valStr.size() > 1 && valStr.back() == '0') { + valStr.pop_back(); + } + if (valStr.size() > 1 && valStr.back() == '.') { + valStr.pop_back(); + } + auto decPoint = valStr.find('.'); + if (decPoint != std::string::npos) { + valStr.replace(decPoint, 1, "p"); + } + if (val < 0) + valStr.replace(0, 1, "M"); + return valStr; + } + + template + std::vector> countRecHits(const T& recHitHandle, const std::vector& thresholds) { + std::vector> counts(thresholds.size()); + for (auto& count : counts) + count = std::make_unique(0); + if (recHitHandle.isValid()) { + for (const auto& recHit : *recHitHandle) { + for (size_t thresNr = 0; thresNr < thresholds.size(); thresNr++) { + if (recHit.energy() >= thresholds[thresNr]) { + (*counts[thresNr])++; + } + } + } + } + return counts; + } +} // namespace + +class EgammaHLTPhase2ExtraProducer : public edm::global::EDProducer<> { +public: + explicit EgammaHLTPhase2ExtraProducer(const edm::ParameterSet& pset); + ~EgammaHLTPhase2ExtraProducer() override {} + + void produce(edm::StreamID streamID, edm::Event& event, const edm::EventSetup& eventSetup) const override; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + template + std::unique_ptr filterObjs(const trigger::EgammaObjectCollection& egTrigObjs, + const edm::Handle& objs, + std::vector& orgRefs, + float maxDR2 = 0.4 * 0.4) const; + + //these three filter functions are overly similar but with annoying differences + //eg rechits needs to access geometry, trk dr is also w.r.t the track eta/phi + //still could collapse into a single function + template + std::unique_ptr filterRecHits(const trigger::EgammaObjectCollection& egTrigObjs, + const edm::Handle& recHits, + const CaloGeometry& geom, + float maxDR2 = 0.4 * 0.4) const; + + struct Tokens { + edm::EDGetTokenT egTrigObjs; + edm::EDGetTokenT l1Trks; + edm::EDGetTokenT trkParts; + edm::EDGetTokenT> l1TrkToTrkPartMap; + edm::EDGetTokenT hgcalLayerClusters; + edm::EDGetTokenT>> hgcalLayerClustersTime; + std::vector, std::string>> hgcal; + + template + static void setToken(edm::EDGetTokenT& token, + edm::ConsumesCollector& cc, + const edm::ParameterSet& pset, + const std::string& tagname) { + token = cc.consumes(pset.getParameter(tagname)); + } + template + static void setToken(std::vector>& tokens, + edm::ConsumesCollector& cc, + const edm::ParameterSet& pset, + const std::string& tagname) { + auto inputTags = pset.getParameter>(tagname); + tokens.resize(inputTags.size()); + for (size_t tagNr = 0; tagNr < inputTags.size(); tagNr++) { + tokens[tagNr] = cc.consumes(inputTags[tagNr]); + } + } + template + static void setToken(std::vector, std::string>>& tokens, + edm::ConsumesCollector& cc, + const edm::ParameterSet& pset, + const std::string& tagname) { + const auto& collectionPSets = pset.getParameter>(tagname); + for (const auto& collPSet : collectionPSets) { + edm::EDGetTokenT token = cc.consumes(collPSet.getParameter("src")); + std::string label = collPSet.getParameter("label"); + tokens.emplace_back(std::make_pair(token, label)); + } + } + Tokens(const edm::ParameterSet& pset, edm::ConsumesCollector&& cc); + }; + template + static std::unique_ptr> makeValueMap(const H& handle, const std::vector& values) { + auto valueMap = std::make_unique>(); + typename edm::ValueMap::Filler filler(*valueMap); + filler.insert(handle, values.begin(), values.end()); + filler.fill(); + return valueMap; + } + + const Tokens tokens_; + + float minPtToSaveHits_; + bool saveHitsPlusPi_; + bool saveHitsPlusHalfPi_; + std::vector recHitCountThresholds_; +}; + +EgammaHLTPhase2ExtraProducer::Tokens::Tokens(const edm::ParameterSet& pset, edm::ConsumesCollector&& cc) { + setToken(egTrigObjs, cc, pset, "egTrigObjs"); + setToken(l1Trks, cc, pset, "l1Trks"); + setToken(trkParts, cc, pset, "trkParts"); + setToken(l1TrkToTrkPartMap, cc, pset, "l1TrkToTrkPartMap"); + setToken(hgcalLayerClusters, cc, pset, "hgcalLayerClusters"); + setToken(hgcalLayerClustersTime, cc, pset, "hgcalLayerClustersTime"); + setToken(hgcal, cc, pset, "hgcal"); +} + +EgammaHLTPhase2ExtraProducer::EgammaHLTPhase2ExtraProducer(const edm::ParameterSet& pset) + : tokens_(pset, consumesCollector()), + minPtToSaveHits_(pset.getParameter("minPtToSaveHits")), + saveHitsPlusPi_(pset.getParameter("saveHitsPlusPi")), + saveHitsPlusHalfPi_(pset.getParameter("saveHitsPlusHalfPi")), + recHitCountThresholds_(pset.getParameter>("recHitCountThresholds")) { + produces(); + produces(); + produces(); + produces("hgcalLayerClusters"); + produces>>("hgcalLayerClustersTime"); + for (auto& tokenLabel : tokens_.hgcal) { + produces(tokenLabel.second); + for (const auto& thres : recHitCountThresholds_) { + produces("countHgcalRecHits" + tokenLabel.second + "Thres" + convertToProdNameStr(thres) + "GeV"); + } + } +} + +void EgammaHLTPhase2ExtraProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("egTrigObjs", edm::InputTag("hltEgammaHLTExtra")); + desc.add("l1Trks", edm::InputTag("TTTracksFromTrackletEmulation", "Level1TTTracks")); + desc.add("trkParts", edm::InputTag("mix", "MergedTrackTruth")); + desc.add("l1TrkToTrkPartMap", edm::InputTag("TTTrackAssociatorFromPixelDigis", "Level1TTTracks")); + desc.add("hgcalLayerClusters", edm::InputTag("hgcalLayerClusters")); + desc.add("hgcalLayerClustersTime", edm::InputTag("hgcalLayerClusters", "timeLayerCluster")); + desc.add("minPtToSaveHits", 0.); + desc.add("saveHitsPlusPi", true); + desc.add("saveHitsPlusHalfPi", true); + desc.add>("recHitCountThresholds", std::vector{0., 0.5, 1.0, 1.5, 2.0}); + std::vector ecalDefaults(2); + edm::ParameterSetDescription tokenLabelDesc; + tokenLabelDesc.add("src", edm::InputTag("")); + tokenLabelDesc.add("label", ""); + std::vector hgcalDefaults(3); + hgcalDefaults[0].addParameter("src", edm::InputTag("HGCalRecHit", "HGCEERecHits")); + hgcalDefaults[0].addParameter("label", std::string("HGCEERecHits")); + hgcalDefaults[1].addParameter("src", edm::InputTag("HGCalRecHit", "HGCHEFRecHits")); + hgcalDefaults[1].addParameter("label", std::string("HGCHEFRecHits")); + hgcalDefaults[2].addParameter("src", edm::InputTag("HGCalRecHit", "HGCHEBRecHits")); + hgcalDefaults[2].addParameter("label", std::string("HGCHEBRecHits")); + desc.addVPSet("hgcal", tokenLabelDesc, hgcalDefaults); + descriptions.add(("hltEgammaHLTPhase2ExtraProducer"), desc); +} + +void EgammaHLTPhase2ExtraProducer::produce(edm::StreamID streamID, + edm::Event& event, + const edm::EventSetup& eventSetup) const { + auto egTrigObjs = event.getHandle(tokens_.egTrigObjs); + + auto trkParts = event.getHandle(tokens_.trkParts); + auto l1trks = event.getHandle(tokens_.l1Trks); + auto l1TrkToTrkPartMap = event.getHandle(tokens_.l1TrkToTrkPartMap); + + edm::ESHandle caloGeomHandle; + eventSetup.get().get(caloGeomHandle); + for (const auto& tokenLabel : tokens_.hgcal) { + auto handle = event.getHandle(tokenLabel.first); + auto recHits = filterRecHits(*egTrigObjs, handle, *caloGeomHandle); + event.put(std::move(recHits), tokenLabel.second); + } + auto storeCountRecHits = [&event](const auto& tokenLabels, const auto& thresholds, const std::string& prefixLabel) { + for (const auto& tokenLabel : tokenLabels) { + auto handle = event.getHandle(tokenLabel.first); + auto count = countRecHits(handle, thresholds); + for (size_t thresNr = 0; thresNr < thresholds.size(); thresNr++) { + const auto& thres = thresholds[thresNr]; + event.put(std::move(count[thresNr]), + prefixLabel + tokenLabel.second + "Thres" + convertToProdNameStr(thres) + "GeV"); + } + } + }; + storeCountRecHits(tokens_.hgcal, recHitCountThresholds_, "countHgcalRecHits"); + + auto hgcalLayerClusters = event.getHandle(tokens_.hgcalLayerClusters); + auto hgcalLayerClustersTime = event.getHandle(tokens_.hgcalLayerClustersTime); + std::vector> orgHGCalLayerClusterRefs; + auto hgcalLayerClustersFiltered = filterObjs(*egTrigObjs, hgcalLayerClusters, orgHGCalLayerClusterRefs); + std::vector> timesFiltered; + timesFiltered.reserve(orgHGCalLayerClusterRefs.size()); + for (auto& clusRef : orgHGCalLayerClusterRefs) { + timesFiltered.push_back((*hgcalLayerClustersTime)[clusRef]); + } + auto hgcalLayerClustersFilteredHandle = event.put(std::move(hgcalLayerClustersFiltered), "hgcalLayerClusters"); + event.put(makeValueMap(hgcalLayerClustersFilteredHandle, timesFiltered), "hgcalLayerClustersTime"); + + std::vector> orgL1TrkRefs; + auto l1TrksFiltered = filterObjs(*egTrigObjs, l1trks, orgL1TrkRefs); + std::vector> orgTPRefs; + auto trkPartsFiltered = filterObjs(*egTrigObjs, trkParts, orgTPRefs); + + //meh should make this edm::Ref::key_type + std::unordered_map orgTPIndxToNewIndx; + for (size_t refNr = 0; refNr < orgTPRefs.size(); refNr++) { + orgTPIndxToNewIndx.insert(std::make_pair(orgTPRefs[refNr].key(), refNr)); + } + + edm::OrphanHandle l1TrksFiltHandle = event.put(std::move(l1TrksFiltered)); + edm::OrphanHandle trkPartsFiltHandle = event.put(std::move(trkPartsFiltered)); + + auto l1TrkExtraColl = std::make_unique(); + + for (size_t l1TrkNr = 0; l1TrkNr < orgL1TrkRefs.size(); l1TrkNr++) { + auto orgTrkRef = orgL1TrkRefs[l1TrkNr]; + auto orgTrkPtr = edm::refToPtr(orgTrkRef); + int flags = 0; + if (l1TrkToTrkPartMap->isGenuine(orgTrkPtr)) + flags |= L1TrackTruthPair::StatusFlags::IsGenuine; + if (l1TrkToTrkPartMap->isLooselyGenuine(orgTrkPtr)) + flags |= L1TrackTruthPair::StatusFlags::IsLooselyGenuine; + if (l1TrkToTrkPartMap->isCombinatoric(orgTrkPtr)) + flags |= L1TrackTruthPair::StatusFlags::IsCombinatoric; + if (l1TrkToTrkPartMap->isUnknown(orgTrkPtr)) + flags |= L1TrackTruthPair::StatusFlags::IsUnknown; + + auto orgTPRef = l1TrkToTrkPartMap->findTrackingParticlePtr(orgTrkPtr); + auto getNewTPRef = [&orgTPIndxToNewIndx, &orgTPRef, &trkPartsFiltHandle]() { + auto newIndexPair = orgTPIndxToNewIndx.find(orgTPRef.key()); + if (newIndexPair != orgTPIndxToNewIndx.end()) { + return edm::Ref(trkPartsFiltHandle, newIndexPair->second); + } else + return edm::Ref(trkPartsFiltHandle.id()); + }; + auto newTPRef = getNewTPRef(); + edm::Ref newL1TrkRef(l1TrksFiltHandle, l1TrkNr); + + L1TrackTruthPair l1TrkExtra(newL1TrkRef, newTPRef, flags); + l1TrkExtraColl->push_back(l1TrkExtra); + } + event.put(std::move(l1TrkExtraColl)); +} + +template +std::unique_ptr EgammaHLTPhase2ExtraProducer::filterObjs(const trigger::EgammaObjectCollection& egTrigObjs, + const edm::Handle& objs, + std::vector& orgRefs, + float maxDR2) const { + auto filteredObjs = std::make_unique(); + orgRefs.clear(); + if (!objs.isValid()) + return filteredObjs; + + //so because each egamma object can have multiple eta/phi pairs + //easier to just make a temp vector and then copy that in with the +pi and +pi/2 + std::vector> etaPhisTmp; + for (const auto& egTrigObj : egTrigObjs) { + if (egTrigObj.pt() >= minPtToSaveHits_) { + etaPhisTmp.push_back({egTrigObj.eta(), egTrigObj.phi()}); + //also save the eta /phi of all gsf tracks with the object + for (const auto& gsfTrk : egTrigObj.gsfTracks()) { + etaPhisTmp.push_back({gsfTrk->eta(), gsfTrk->phi()}); + } + } + } + std::vector> etaPhis; + for (const auto& etaPhi : etaPhisTmp) { + etaPhis.push_back(etaPhi); + if (saveHitsPlusPi_) + etaPhis.push_back({etaPhi.first, etaPhi.second + 3.14159}); + if (saveHitsPlusHalfPi_) + etaPhis.push_back({etaPhi.first, etaPhi.second + 3.14159 / 2.}); + } + + auto deltaR2Match = [&etaPhis, &maxDR2](float eta, float phi) { + for (auto& etaPhi : etaPhis) { + if (reco::deltaR2(eta, phi, etaPhi.first, etaPhi.second) < maxDR2) + return true; + } + return false; + }; + + for (size_t objNr = 0; objNr < objs->size(); objNr++) { + RefType ref(objs, objNr); + if (deltaR2Match(ref->eta(), ref->phi())) { + filteredObjs->push_back(*ref); + orgRefs.push_back(ref); + } + } + return filteredObjs; +} + +template +std::unique_ptr EgammaHLTPhase2ExtraProducer::filterRecHits( + const trigger::EgammaObjectCollection& egTrigObjs, + const edm::Handle& recHits, + const CaloGeometry& geom, + float maxDR2) const { + auto filteredHits = std::make_unique(); + if (!recHits.isValid()) + return filteredHits; + + std::vector> etaPhis; + for (const auto& egTrigObj : egTrigObjs) { + if (egTrigObj.pt() >= minPtToSaveHits_) { + etaPhis.push_back({egTrigObj.eta(), egTrigObj.phi()}); + if (saveHitsPlusPi_) + etaPhis.push_back({egTrigObj.eta(), egTrigObj.phi() + 3.14159}); + if (saveHitsPlusHalfPi_) + etaPhis.push_back({egTrigObj.eta(), egTrigObj.phi() + 3.14159 / 2.}); + } + } + auto deltaR2Match = [&etaPhis, &maxDR2](const GlobalPoint& pos) { + float eta = pos.eta(); + float phi = pos.phi(); + for (auto& etaPhi : etaPhis) { + if (reco::deltaR2(eta, phi, etaPhi.first, etaPhi.second) < maxDR2) + return true; + } + return false; + }; + + for (auto& hit : *recHits) { + const CaloSubdetectorGeometry* subDetGeom = geom.getSubdetectorGeometry(hit.id()); + if (subDetGeom) { + auto cellGeom = subDetGeom->getGeometry(hit.id()); + if (deltaR2Match(cellGeom->getPosition())) + filteredHits->push_back(hit); + } else { + throw cms::Exception("GeomError") << "could not get geometry for det id " << hit.id().rawId(); + } + } + return filteredHits; +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(EgammaHLTPhase2ExtraProducer); diff --git a/RecoEgamma/EgammaHLTProducers/plugins/HLTCaloObjInRegionsProducer.cc b/RecoEgamma/EgammaHLTProducers/plugins/HLTCaloObjInRegionsProducer.cc index 17e7a3c953ad7..ad50363c7355b 100644 --- a/RecoEgamma/EgammaHLTProducers/plugins/HLTCaloObjInRegionsProducer.cc +++ b/RecoEgamma/EgammaHLTProducers/plugins/HLTCaloObjInRegionsProducer.cc @@ -331,3 +331,16 @@ DEFINE_FWK_MODULE(HLTEcalRecHitsInRegionsProducer); #include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h" using HLTEcalUnCalibRecHitsInRegionsProducer = HLTCaloObjInRegionsProducer; DEFINE_FWK_MODULE(HLTEcalUnCalibRecHitsInRegionsProducer); + +// HGCAL Digis +#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" +using HLTHGCalDigisInRegionsProducer = HLTCaloObjInRegionsProducer; +DEFINE_FWK_MODULE(HLTHGCalDigisInRegionsProducer); + +// HGCAL RecHits +#include "DataFormats/HGCRecHit/interface/HGCRecHit.h" +using HLTHGCalRecHitsInRegionsProducer = HLTCaloObjInRegionsProducer; +DEFINE_FWK_MODULE(HLTHGCalRecHitsInRegionsProducer); +#include "DataFormats/HGCRecHit/interface/HGCUncalibratedRecHit.h" +using HLTHGCalUncalibratedRecHitsInRegionsProducer = HLTCaloObjInRegionsProducer; +DEFINE_FWK_MODULE(HLTHGCalUncalibratedRecHitsInRegionsProducer); diff --git a/RecoEgamma/EgammaHLTProducers/plugins/HLTHGCalLayerClusterIsolationProducer.cc b/RecoEgamma/EgammaHLTProducers/plugins/HLTHGCalLayerClusterIsolationProducer.cc new file mode 100644 index 0000000000000..483c419b57db1 --- /dev/null +++ b/RecoEgamma/EgammaHLTProducers/plugins/HLTHGCalLayerClusterIsolationProducer.cc @@ -0,0 +1,197 @@ +#include +#include +#include + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "DataFormats/Common/interface/Handle.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +#include "DataFormats/Math/interface/deltaR.h" + +#include "HLTrigger/HLTcore/interface/defaultModuleLabel.h" + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidateIsolation.h" + +#include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" +#include "DataFormats/RecoCandidate/interface/RecoChargedCandidateIsolation.h" + +#include "DataFormats/CaloRecHit/interface/CaloCluster.h" +#include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h" + +#include "RecoEgamma/EgammaTools/interface/HGCalClusterTools.h" + +template +class HLTHGCalLayerClusterIsolationProducer : public edm::stream::EDProducer<> { + typedef std::vector T1Collection; + typedef edm::Ref T1Ref; + typedef edm::AssociationMap, float>> T1IsolationMap; + +public: + explicit HLTHGCalLayerClusterIsolationProducer(const edm::ParameterSet&); + ~HLTHGCalLayerClusterIsolationProducer() override = default; + + void produce(edm::Event&, const edm::EventSetup&) override; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + edm::EDGetTokenT recoCandidateProducer_; + const edm::EDGetTokenT layerClusterProducer_; + const edm::EDGetTokenT rhoProducer_; + + const double drMax_; + const double drVetoEM_; + const double drVetoHad_; + const double minEnergyEM_; + const double minEnergyHad_; + const double minEtEM_; + const double minEtHad_; + const bool useEt_; + const bool doRhoCorrection_; + const double rhoMax_; + const double rhoScale_; + const std::vector effectiveAreas_; +}; + +template +HLTHGCalLayerClusterIsolationProducer::HLTHGCalLayerClusterIsolationProducer(const edm::ParameterSet& config) + : layerClusterProducer_( + consumes(config.getParameter("layerClusterProducer"))), + rhoProducer_(consumes(config.getParameter("rhoProducer"))), + drMax_(config.getParameter("drMax")), + drVetoEM_(config.getParameter("drVetoEM")), + drVetoHad_(config.getParameter("drVetoHad")), + minEnergyEM_(config.getParameter("minEnergyEM")), + minEnergyHad_(config.getParameter("minEnergyHad")), + minEtEM_(config.getParameter("minEtEM")), + minEtHad_(config.getParameter("minEtHad")), + useEt_(config.getParameter("useEt")), + doRhoCorrection_(config.getParameter("doRhoCorrection")), + rhoMax_(config.getParameter("rhoMax")), + rhoScale_(config.getParameter("rhoScale")), + effectiveAreas_(config.getParameter>("effectiveAreas")) { + if (doRhoCorrection_) { + if (effectiveAreas_.size() != 2) + throw cms::Exception("IncompatibleVects") + << "effectiveAreas should have two elements for em and had components. \n"; + } + + std::string recoCandidateProducerName = "recoCandidateProducer"; + if ((typeid(HLTHGCalLayerClusterIsolationProducer) == + typeid(HLTHGCalLayerClusterIsolationProducer))) + recoCandidateProducerName = "recoEcalCandidateProducer"; + + recoCandidateProducer_ = consumes(config.getParameter(recoCandidateProducerName)); + produces(); + produces("em"); + produces("had"); +} + +template +void HLTHGCalLayerClusterIsolationProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + std::string recoCandidateProducerName = "recoCandidateProducer"; + if ((typeid(HLTHGCalLayerClusterIsolationProducer) == + typeid(HLTHGCalLayerClusterIsolationProducer))) + recoCandidateProducerName = "recoEcalCandidateProducer"; + + edm::ParameterSetDescription desc; + desc.add(recoCandidateProducerName, edm::InputTag("hltL1SeededRecoEcalCandidatePF")); + desc.add("layerClusterProducer", edm::InputTag("hltParticleFlowClusterECAL")); + desc.add("rhoProducer", edm::InputTag("fixedGridRhoFastjetAllCalo")); + desc.add("doRhoCorrection", false); + desc.add("useEt", false); + desc.add("rhoMax", 9.9999999E7); + desc.add("rhoScale", 1.0); + desc.add("drMax", 0.3); + desc.add("drVetoEM", 0.0); + desc.add("drVetoHad", 0.0); + desc.add("minEnergyEM", 0.0); + desc.add("minEnergyHad", 0.0); + desc.add("minEtEM", 0.0); + desc.add("minEtHad", 0.0); + desc.add>("effectiveAreas", {0.0, 0.0}); // for em and had components + descriptions.add(defaultModuleLabel>(), desc); +} + +template +void HLTHGCalLayerClusterIsolationProducer::produce(edm::Event& iEvent, const edm::EventSetup&) { + edm::Handle rhoHandle; + double rho = 0.0; + if (doRhoCorrection_) { + iEvent.getByToken(rhoProducer_, rhoHandle); + rho = *(rhoHandle.product()); + } + + rho = std::min(rho, rhoMax_); + rho = rho * rhoScale_; + + edm::Handle recoCandHandle; + edm::Handle clusterHandle; + + iEvent.getByToken(recoCandidateProducer_, recoCandHandle); + iEvent.getByToken(layerClusterProducer_, clusterHandle); + + const std::vector layerClusters = *(clusterHandle.product()); + + T1IsolationMap recoCandMap(recoCandHandle); + T1IsolationMap recoCandMapEm(recoCandHandle); + T1IsolationMap recoCandMapHad(recoCandHandle); + + for (unsigned int iReco = 0; iReco < recoCandHandle->size(); iReco++) { + T1Ref candRef(recoCandHandle, iReco); + + float sumEm = + HGCalClusterTools::emEnergyInCone(candRef->eta(), + candRef->phi(), + layerClusters, + drVetoEM_, + drMax_, + minEtEM_, + minEnergyEM_, + useEt_ ? HGCalClusterTools::EType::ET : HGCalClusterTools::EType::ENERGY); + + float sumHad = + HGCalClusterTools::hadEnergyInCone(candRef->eta(), + candRef->phi(), + layerClusters, + drVetoHad_, + drMax_, + minEtHad_, + minEnergyHad_, + useEt_ ? HGCalClusterTools::EType::ET : HGCalClusterTools::EType::ENERGY); + + if (doRhoCorrection_) { + sumEm = sumEm - rho * effectiveAreas_.at(0); + sumHad = sumHad - rho * effectiveAreas_.at(1); + } + + float sum = sumEm + sumHad; + + recoCandMap.insert(candRef, sum); + recoCandMapEm.insert(candRef, sumEm); + recoCandMapHad.insert(candRef, sumHad); + } + + iEvent.put(std::make_unique(recoCandMap)); + iEvent.put(std::make_unique(recoCandMapEm), "em"); + iEvent.put(std::make_unique(recoCandMapHad), "had"); +} + +typedef HLTHGCalLayerClusterIsolationProducer EgammaHLTHGCalLayerClusterIsolationProducer; +typedef HLTHGCalLayerClusterIsolationProducer MuonHLTHGCalLayerClusterIsolationProducer; + +DEFINE_FWK_MODULE(EgammaHLTHGCalLayerClusterIsolationProducer); +DEFINE_FWK_MODULE(MuonHLTHGCalLayerClusterIsolationProducer); diff --git a/RecoEgamma/EgammaHLTProducers/plugins/L1TEGammaFilteredCollectionProducer.cc b/RecoEgamma/EgammaHLTProducers/plugins/L1TEGammaFilteredCollectionProducer.cc new file mode 100644 index 0000000000000..b634ea3d4391e --- /dev/null +++ b/RecoEgamma/EgammaHLTProducers/plugins/L1TEGammaFilteredCollectionProducer.cc @@ -0,0 +1,121 @@ +/* + Author: Swagata Mukherjee + + Date: Feb 2021 + + At the time of writing this new module, it is intended to be used mainly for + phase-2. Before feeding in the L1 e/g collection to + HLTEcalRecHitInAllL1RegionsProducer, it can pass through this module which + will filter the collection based on hardware quality and pT. + + The most generic L1 e/g phase-2 collections are: + TkEm, which is std::vector + & + StaEG, which is BXVector + + Despite this technical difference, the objects are almost identical, for all + practical purposes. So any of these two collections could have been used. + Currently, BXVector is recognised by the next step + HLTEcalRecHitInAllL1RegionsProducer, while std::vector is not. So + using BXVector is straightforward. If for some reason one need to + use std::vector, changes in HLTEcalRecHitInAllL1RegionsProducer + would also be necesary. +*/ + +#include "DataFormats/L1TCorrelator/interface/TkEm.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/EventSetupRecord.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +class L1TEGammaFilteredCollectionProducer : public edm::global::EDProducer<> { +public: + explicit L1TEGammaFilteredCollectionProducer(const edm::ParameterSet&); + ~L1TEGammaFilteredCollectionProducer() override; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + void produce(edm::StreamID sid, edm::Event& iEvent, const edm::EventSetup& iSetup) const override; + +private: + edm::InputTag l1EgTag_; + edm::EDGetTokenT> l1EgToken_; + int quality_; + bool qualIsMask_; + bool applyQual_; + int minBX_; + int maxBX_; + double minPt_; + std::vector scalings_; // pT scaling factors + double getOfflineEt(double et) const; +}; + +L1TEGammaFilteredCollectionProducer::L1TEGammaFilteredCollectionProducer(const edm::ParameterSet& iConfig) + : l1EgTag_(iConfig.getParameter("inputTag")), l1EgToken_(consumes>(l1EgTag_)) { + quality_ = iConfig.getParameter("quality"); + qualIsMask_ = iConfig.getParameter("qualIsMask"); + applyQual_ = iConfig.getParameter("applyQual"); + minBX_ = iConfig.getParameter("minBX"); + maxBX_ = iConfig.getParameter("maxBX"); + minPt_ = iConfig.getParameter("minPt"); + scalings_ = iConfig.getParameter>("scalings"); + + produces>(); +} + +L1TEGammaFilteredCollectionProducer::~L1TEGammaFilteredCollectionProducer() = default; + +void L1TEGammaFilteredCollectionProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("inputTag", edm::InputTag("L1EGammaClusterEmuProducer")); + desc.add("quality", 0x2); + desc.add("qualIsMask", true); + desc.add("applyQual", true); + desc.add("minBX", -1); + desc.add("maxBX", 1); + desc.add("minPt", 5.0); + desc.add>("scalings", {2.6604, 1.06077, 0.0}); + descriptions.add("L1TEGammaFilteredCollectionProducer", desc); +} + +void L1TEGammaFilteredCollectionProducer::produce(edm::StreamID sid, + edm::Event& iEvent, + const edm::EventSetup& iSetup) const { + auto outEgs = std::make_unique>(); + auto l1Egs = iEvent.getHandle(l1EgToken_); + + int startBX = std::max((*l1Egs).getFirstBX(), minBX_); + int endBX = std::min((*l1Egs).getLastBX(), maxBX_); + + for (int bx = startBX; bx <= endBX; bx++) { + // Loop over all L1 e/gamma objects + for (BXVector::const_iterator iEg = (*l1Egs).begin(bx); iEg != (*l1Egs).end(bx); iEg++) { + double offlineEt = this->getOfflineEt((*iEg).pt()); + bool passQuality(false); + if (applyQual_) { + if (qualIsMask_) + passQuality = ((*iEg).hwQual() & quality_); + else + passQuality = ((*iEg).hwQual() == quality_); + } else + passQuality = true; + + // if quality is passed, put the object in filtered collection + if (passQuality && (offlineEt > minPt_)) { + outEgs->push_back(bx, *iEg); + } + } // l1EG loop ends + } // BX loop ends + iEvent.put(std::move(outEgs)); +} + +double L1TEGammaFilteredCollectionProducer::getOfflineEt(double et) const { + return (scalings_.at(0) + et * scalings_.at(1) + et * et * scalings_.at(2)); +} + +DEFINE_FWK_MODULE(L1TEGammaFilteredCollectionProducer); diff --git a/RecoEgamma/EgammaHLTProducers/python/HLTEgPhaseIITestSequence_cff.py b/RecoEgamma/EgammaHLTProducers/python/HLTEgPhaseIITestSequence_cff.py new file mode 100644 index 0000000000000..5e89cb289b4d1 --- /dev/null +++ b/RecoEgamma/EgammaHLTProducers/python/HLTEgPhaseIITestSequence_cff.py @@ -0,0 +1,2656 @@ +import FWCore.ParameterSet.Config as cms + +#this is solely to meet reco convenor requirements and does not necessarily represent the E/gamma Phase-II HLT +#it is not supported by the TSG + +hltBunchSpacingProducer = cms.EDProducer("BunchSpacingProducer") + + +hltEcalBarrelClusterFastTimer = cms.EDProducer("EcalBarrelClusterFastTimer", + ebClusters = cms.InputTag("hltParticleFlowClusterECALUncorrectedUnseeded"), + ebTimeHits = cms.InputTag("hltEcalDetailedTimeRecHit","EcalRecHitsEB"), + ecalDepth = cms.double(7.0), + minEnergyToConsider = cms.double(0.0), + minFractionToConsider = cms.double(0.1), + resolutionModels = cms.VPSet(cms.PSet( + modelName = cms.string('PerfectResolutionModel') + )), + timedVertices = cms.InputTag("offlinePrimaryVertices4D") +) + + +hltEcalDetIdToBeRecovered = cms.EDProducer("EcalDetIdToBeRecoveredProducer", + ebDetIdToBeRecovered = cms.string('ebDetId'), + ebFEToBeRecovered = cms.string('ebFE'), + ebIntegrityChIdErrors = cms.InputTag("hltEcalDigis","EcalIntegrityChIdErrors"), + ebIntegrityGainErrors = cms.InputTag("hltEcalDigis","EcalIntegrityGainErrors"), + ebIntegrityGainSwitchErrors = cms.InputTag("hltEcalDigis","EcalIntegrityGainSwitchErrors"), + ebSrFlagCollection = cms.InputTag("hltEcalDigis"), + eeDetIdToBeRecovered = cms.string('eeDetId'), + eeFEToBeRecovered = cms.string('eeFE'), + eeIntegrityChIdErrors = cms.InputTag("hltEcalDigis","EcalIntegrityChIdErrors"), + eeIntegrityGainErrors = cms.InputTag("hltEcalDigis","EcalIntegrityGainErrors"), + eeIntegrityGainSwitchErrors = cms.InputTag("hltEcalDigis","EcalIntegrityGainSwitchErrors"), + eeSrFlagCollection = cms.InputTag("hltEcalDigis"), + integrityBlockSizeErrors = cms.InputTag("hltEcalDigis","EcalIntegrityBlockSizeErrors"), + integrityTTIdErrors = cms.InputTag("hltEcalDigis","EcalIntegrityTTIdErrors") +) + + +hltEcalDetailedTimeRecHit = cms.EDProducer("EcalDetailedTimeRecHitProducer", + EBDetailedTimeRecHitCollection = cms.string('EcalRecHitsEB'), + EBRecHitCollection = cms.InputTag("hltEcalRecHit","EcalRecHitsEB"), + EBTimeDigiCollection = cms.InputTag("mix","EBTimeDigi"), + EBTimeLayer = cms.int32(7), + EEDetailedTimeRecHitCollection = cms.string('EcalRecHitsEE'), + EERecHitCollection = cms.InputTag("hltEcalRecHit","EcalRecHitsEE"), + EETimeDigiCollection = cms.InputTag("mix","EETimeDigi"), + EETimeLayer = cms.int32(3), + correctForVertexZPosition = cms.bool(False), + recoVertex = cms.InputTag("offlinePrimaryVerticesWithBS"), + simVertex = cms.InputTag("g4SimHits"), + useMCTruthVertex = cms.bool(False) +) + + +hltEcalDigis = cms.EDProducer("EcalRawToDigi", + DoRegional = cms.bool(False), + FEDs = cms.vint32( + 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, + 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, + 646, 647, 648, 649, 650, + 651, 652, 653, 654 + ), + FedLabel = cms.InputTag("listfeds"), + InputLabel = cms.InputTag("rawDataCollector"), + eventPut = cms.bool(True), + feIdCheck = cms.bool(True), + feUnpacking = cms.bool(True), + forceToKeepFRData = cms.bool(False), + headerUnpacking = cms.bool(True), + memUnpacking = cms.bool(True), + mightGet = cms.optional.untracked.vstring, + numbTriggerTSamples = cms.int32(1), + numbXtalTSamples = cms.int32(10), + orderedDCCIdList = cms.vint32( + 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, + 51, 52, 53, 54 + ), + orderedFedList = cms.vint32( + 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, + 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, + 646, 647, 648, 649, 650, + 651, 652, 653, 654 + ), + silentMode = cms.untracked.bool(True), + srpUnpacking = cms.bool(True), + syncCheck = cms.bool(True), + tccUnpacking = cms.bool(True) +) + + +hltEcalPreshowerDigis = cms.EDProducer("ESRawToDigi", + ESdigiCollection = cms.string(''), + InstanceES = cms.string(''), + LookupTable = cms.FileInPath('EventFilter/ESDigiToRaw/data/ES_lookup_table.dat'), + debugMode = cms.untracked.bool(False), + mightGet = cms.optional.untracked.vstring, + sourceTag = cms.InputTag("rawDataCollector") +) + + +hltEcalPreshowerRecHit = cms.EDProducer("ESRecHitProducer", + ESRecoAlgo = cms.int32(0), + ESdigiCollection = cms.InputTag("hltEcalPreshowerDigis"), + ESrechitCollection = cms.string('EcalRecHitsES'), + algo = cms.string('ESRecHitWorker') +) + + +hltEcalRecHit = cms.EDProducer("EcalRecHitProducer", + ChannelStatusToBeExcluded = cms.vstring( + 'kDAC', + 'kNoisy', + 'kNNoisy', + 'kFixedG6', + 'kFixedG1', + 'kFixedG0', + 'kNonRespondingIsolated', + 'kDeadVFE', + 'kDeadFE', + 'kNoDataNoTP' + ), + EBLaserMAX = cms.double(3.0), + EBLaserMIN = cms.double(0.5), + EBrechitCollection = cms.string('EcalRecHitsEB'), + EBuncalibRecHitCollection = cms.InputTag("hltEcalUncalibRecHit","EcalUncalibRecHitsEB"), + EELaserMAX = cms.double(8.0), + EELaserMIN = cms.double(0.5), + EErechitCollection = cms.string('EcalRecHitsEE'), + EEuncalibRecHitCollection = cms.InputTag("hltEcalUncalibRecHit","EcalUncalibRecHitsEE"), + algo = cms.string('EcalRecHitWorkerSimple'), + algoRecover = cms.string('EcalRecHitWorkerRecover'), + bdtWeightFileCracks = cms.FileInPath('RecoLocalCalo/EcalDeadChannelRecoveryAlgos/data/BDTWeights/bdtgAllRH_8GT700MeV_onlyCracks_ZskimData2017_v1.xml'), + bdtWeightFileNoCracks = cms.FileInPath('RecoLocalCalo/EcalDeadChannelRecoveryAlgos/data/BDTWeights/bdtgAllRH_8GT700MeV_noCracks_ZskimData2017_v1.xml'), + cleaningConfig = cms.PSet( + cThreshold_barrel = cms.double(4), + cThreshold_double = cms.double(10), + cThreshold_endcap = cms.double(15), + e4e1Threshold_barrel = cms.double(0.08), + e4e1Threshold_endcap = cms.double(0.3), + e4e1_a_barrel = cms.double(0.02), + e4e1_a_endcap = cms.double(0.02), + e4e1_b_barrel = cms.double(0.02), + e4e1_b_endcap = cms.double(-0.0125), + e6e2thresh = cms.double(0.04), + ignoreOutOfTimeThresh = cms.double(1000000000.0), + tightenCrack_e1_double = cms.double(2), + tightenCrack_e1_single = cms.double(1), + tightenCrack_e4e1_single = cms.double(2.5), + tightenCrack_e6e2_double = cms.double(3) + ), + dbStatusToBeExcludedEB = cms.vint32(14, 78, 142), + dbStatusToBeExcludedEE = cms.vint32(14, 78, 142), + ebDetIdToBeRecovered = cms.InputTag("hltEcalDetIdToBeRecovered","ebDetId"), + ebFEToBeRecovered = cms.InputTag("hltEcalDetIdToBeRecovered","ebFE"), + eeDetIdToBeRecovered = cms.InputTag("hltEcalDetIdToBeRecovered","eeDetId"), + eeFEToBeRecovered = cms.InputTag("hltEcalDetIdToBeRecovered","eeFE"), + flagsMapDBReco = cms.PSet( + kDead = cms.vstring('kNoDataNoTP'), + kGood = cms.vstring( + 'kOk', + 'kDAC', + 'kNoLaser', + 'kNoisy' + ), + kNeighboursRecovered = cms.vstring( + 'kFixedG0', + 'kNonRespondingIsolated', + 'kDeadVFE' + ), + kNoisy = cms.vstring( + 'kNNoisy', + 'kFixedG6', + 'kFixedG1' + ), + kTowerRecovered = cms.vstring('kDeadFE') + ), + killDeadChannels = cms.bool(True), + laserCorrection = cms.bool(True), + logWarningEtThreshold_EB_FE = cms.double(50), + logWarningEtThreshold_EE_FE = cms.double(50), + recoverEBFE = cms.bool(True), + recoverEBIsolatedChannels = cms.bool(False), + recoverEBVFE = cms.bool(False), + recoverEEFE = cms.bool(True), + recoverEEIsolatedChannels = cms.bool(False), + recoverEEVFE = cms.bool(False), + singleChannelRecoveryMethod = cms.string('BDTG'), + singleChannelRecoveryThreshold = cms.double(0.7), + skipTimeCalib = cms.bool(False), + sum8ChannelRecoveryThreshold = cms.double(0.0), + triggerPrimitiveDigiCollection = cms.InputTag("hltEcalDigis","EcalTriggerPrimitives") +) + + +hltEcalUncalibRecHit = cms.EDProducer("EcalUncalibRecHitProducer", + EBdigiCollection = cms.InputTag("hltEcalDigis","ebDigis"), + EBhitCollection = cms.string('EcalUncalibRecHitsEB'), + EEdigiCollection = cms.InputTag("hltEcalDigis","eeDigis"), + EEhitCollection = cms.string('EcalUncalibRecHitsEE'), + algo = cms.string('EcalUncalibRecHitWorkerMultiFit'), + algoPSet = cms.PSet( + EBamplitudeFitParameters = cms.vdouble(1.138, 1.652), + EBtimeConstantTerm = cms.double(0.6), + EBtimeFitLimits_Lower = cms.double(0.2), + EBtimeFitLimits_Upper = cms.double(1.4), + EBtimeFitParameters = cms.vdouble( + -2.015452, 3.130702, -12.3473, 41.88921, -82.83944, + 91.01147, -50.35761, 11.05621 + ), + EBtimeNconst = cms.double(28.5), + EEamplitudeFitParameters = cms.vdouble(1.89, 1.4), + EEtimeConstantTerm = cms.double(1.0), + EEtimeFitLimits_Lower = cms.double(0.2), + EEtimeFitLimits_Upper = cms.double(1.4), + EEtimeFitParameters = cms.vdouble( + -2.390548, 3.553628, -17.62341, 67.67538, -133.213, + 140.7432, -75.41106, 16.20277 + ), + EEtimeNconst = cms.double(31.8), + EcalPulseShapeParameters = cms.PSet( + EBCorrNoiseMatrixG01 = cms.vdouble( + 1.0, 0.73354, 0.64442, 0.58851, 0.55425, + 0.53082, 0.51916, 0.51097, 0.50732, 0.50409 + ), + EBCorrNoiseMatrixG06 = cms.vdouble( + 1.0, 0.70946, 0.58021, 0.49846, 0.45006, + 0.41366, 0.39699, 0.38478, 0.37847, 0.37055 + ), + EBCorrNoiseMatrixG12 = cms.vdouble( + 1.0, 0.71073, 0.55721, 0.46089, 0.40449, + 0.35931, 0.33924, 0.32439, 0.31581, 0.30481 + ), + EBPulseShapeCovariance = cms.vdouble( + 3.001e-06, 1.233e-05, 0.0, -4.416e-06, -4.571e-06, + -3.614e-06, -2.636e-06, -1.286e-06, -8.41e-07, -5.296e-07, + 0.0, 0.0, 1.233e-05, 6.154e-05, 0.0, + -2.2e-05, -2.309e-05, -1.838e-05, -1.373e-05, -7.334e-06, + -5.088e-06, -3.745e-06, -2.428e-06, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, -4.416e-06, -2.2e-05, 0.0, 8.319e-06, + 8.545e-06, 6.792e-06, 5.059e-06, 2.678e-06, 1.816e-06, + 1.223e-06, 8.245e-07, 5.589e-07, -4.571e-06, -2.309e-05, + 0.0, 8.545e-06, 9.182e-06, 7.219e-06, 5.388e-06, + 2.853e-06, 1.944e-06, 1.324e-06, 9.083e-07, 6.335e-07, + -3.614e-06, -1.838e-05, 0.0, 6.792e-06, 7.219e-06, + 6.016e-06, 4.437e-06, 2.385e-06, 1.636e-06, 1.118e-06, + 7.754e-07, 5.556e-07, -2.636e-06, -1.373e-05, 0.0, + 5.059e-06, 5.388e-06, 4.437e-06, 3.602e-06, 1.917e-06, + 1.322e-06, 9.079e-07, 6.529e-07, 4.752e-07, -1.286e-06, + -7.334e-06, 0.0, 2.678e-06, 2.853e-06, 2.385e-06, + 1.917e-06, 1.375e-06, 9.1e-07, 6.455e-07, 4.693e-07, + 3.657e-07, -8.41e-07, -5.088e-06, 0.0, 1.816e-06, + 1.944e-06, 1.636e-06, 1.322e-06, 9.1e-07, 9.115e-07, + 6.062e-07, 4.436e-07, 3.422e-07, -5.296e-07, -3.745e-06, + 0.0, 1.223e-06, 1.324e-06, 1.118e-06, 9.079e-07, + 6.455e-07, 6.062e-07, 7.217e-07, 4.862e-07, 3.768e-07, + 0.0, -2.428e-06, 0.0, 8.245e-07, 9.083e-07, + 7.754e-07, 6.529e-07, 4.693e-07, 4.436e-07, 4.862e-07, + 6.509e-07, 4.418e-07, 0.0, 0.0, 0.0, + 5.589e-07, 6.335e-07, 5.556e-07, 4.752e-07, 3.657e-07, + 3.422e-07, 3.768e-07, 4.418e-07, 6.142e-07 + ), + EBPulseShapeTemplate = cms.vdouble( + 0.0113979, 0.758151, 1.0, 0.887744, 0.673548, + 0.474332, 0.319561, 0.215144, 0.147464, 0.101087, + 0.0693181, 0.0475044 + ), + EBdigiCollection = cms.string(''), + EECorrNoiseMatrixG01 = cms.vdouble( + 1.0, 0.72698, 0.62048, 0.55691, 0.51848, + 0.49147, 0.47813, 0.47007, 0.46621, 0.46265 + ), + EECorrNoiseMatrixG06 = cms.vdouble( + 1.0, 0.71217, 0.47464, 0.34056, 0.26282, + 0.20287, 0.17734, 0.16256, 0.15618, 0.14443 + ), + EECorrNoiseMatrixG12 = cms.vdouble( + 1.0, 0.71373, 0.44825, 0.30152, 0.21609, + 0.14786, 0.11772, 0.10165, 0.09465, 0.08098 + ), + EEPulseShapeCovariance = cms.vdouble( + 3.941e-05, 3.333e-05, 0.0, -1.449e-05, -1.661e-05, + -1.424e-05, -1.183e-05, -6.842e-06, -4.915e-06, -3.411e-06, + 0.0, 0.0, 3.333e-05, 2.862e-05, 0.0, + -1.244e-05, -1.431e-05, -1.233e-05, -1.032e-05, -5.883e-06, + -4.154e-06, -2.902e-06, -2.128e-06, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, -1.449e-05, -1.244e-05, 0.0, 5.84e-06, + 6.649e-06, 5.72e-06, 4.812e-06, 2.708e-06, 1.869e-06, + 1.33e-06, 9.186e-07, 6.446e-07, -1.661e-05, -1.431e-05, + 0.0, 6.649e-06, 7.966e-06, 6.898e-06, 5.794e-06, + 3.157e-06, 2.184e-06, 1.567e-06, 1.084e-06, 7.575e-07, + -1.424e-05, -1.233e-05, 0.0, 5.72e-06, 6.898e-06, + 6.341e-06, 5.347e-06, 2.859e-06, 1.991e-06, 1.431e-06, + 9.839e-07, 6.886e-07, -1.183e-05, -1.032e-05, 0.0, + 4.812e-06, 5.794e-06, 5.347e-06, 4.854e-06, 2.628e-06, + 1.809e-06, 1.289e-06, 9.02e-07, 6.146e-07, -6.842e-06, + -5.883e-06, 0.0, 2.708e-06, 3.157e-06, 2.859e-06, + 2.628e-06, 1.863e-06, 1.296e-06, 8.882e-07, 6.108e-07, + 4.283e-07, -4.915e-06, -4.154e-06, 0.0, 1.869e-06, + 2.184e-06, 1.991e-06, 1.809e-06, 1.296e-06, 1.217e-06, + 8.669e-07, 5.751e-07, 3.882e-07, -3.411e-06, -2.902e-06, + 0.0, 1.33e-06, 1.567e-06, 1.431e-06, 1.289e-06, + 8.882e-07, 8.669e-07, 9.522e-07, 6.717e-07, 4.293e-07, + 0.0, -2.128e-06, 0.0, 9.186e-07, 1.084e-06, + 9.839e-07, 9.02e-07, 6.108e-07, 5.751e-07, 6.717e-07, + 7.911e-07, 5.493e-07, 0.0, 0.0, 0.0, + 6.446e-07, 7.575e-07, 6.886e-07, 6.146e-07, 4.283e-07, + 3.882e-07, 4.293e-07, 5.493e-07, 7.027e-07 + ), + EEPulseShapeTemplate = cms.vdouble( + 0.116442, 0.756246, 1.0, 0.897182, 0.686831, + 0.491506, 0.344111, 0.245731, 0.174115, 0.123361, + 0.0874288, 0.061957 + ), + EEdigiCollection = cms.string(''), + ESdigiCollection = cms.string(''), + EcalPreMixStage1 = cms.bool(False), + EcalPreMixStage2 = cms.bool(False), + UseLCcorrection = cms.untracked.bool(True) + ), + activeBXs = cms.vint32( + -5, -4, -3, -2, -1, + 0, 1, 2, 3, 4 + ), + addPedestalUncertaintyEB = cms.double(0.0), + addPedestalUncertaintyEE = cms.double(0.0), + ampErrorCalculation = cms.bool(True), + amplitudeThresholdEB = cms.double(10), + amplitudeThresholdEE = cms.double(10), + chi2ThreshEB_ = cms.double(65.0), + chi2ThreshEE_ = cms.double(50.0), + doPrefitEB = cms.bool(False), + doPrefitEE = cms.bool(False), + dynamicPedestalsEB = cms.bool(False), + dynamicPedestalsEE = cms.bool(False), + ebPulseShape = cms.vdouble( + 5.2e-05, -5.26e-05, 6.66e-05, 0.1168, 0.7575, + 1.0, 0.8876, 0.6732, 0.4741, 0.3194 + ), + ebSpikeThreshold = cms.double(1.042), + eePulseShape = cms.vdouble( + 5.2e-05, -5.26e-05, 6.66e-05, 0.1168, 0.7575, + 1.0, 0.8876, 0.6732, 0.4741, 0.3194 + ), + gainSwitchUseMaxSampleEB = cms.bool(True), + gainSwitchUseMaxSampleEE = cms.bool(False), + kPoorRecoFlagEB = cms.bool(True), + kPoorRecoFlagEE = cms.bool(False), + mitigateBadSamplesEB = cms.bool(False), + mitigateBadSamplesEE = cms.bool(False), + outOfTimeThresholdGain12mEB = cms.double(5), + outOfTimeThresholdGain12mEE = cms.double(1000), + outOfTimeThresholdGain12pEB = cms.double(5), + outOfTimeThresholdGain12pEE = cms.double(1000), + outOfTimeThresholdGain61mEB = cms.double(5), + outOfTimeThresholdGain61mEE = cms.double(1000), + outOfTimeThresholdGain61pEB = cms.double(5), + outOfTimeThresholdGain61pEE = cms.double(1000), + prefitMaxChiSqEB = cms.double(25.0), + prefitMaxChiSqEE = cms.double(10.0), + selectiveBadSampleCriteriaEB = cms.bool(False), + selectiveBadSampleCriteriaEE = cms.bool(False), + simplifiedNoiseModelForGainSwitch = cms.bool(True), + timealgo = cms.string('RatioMethod'), + useLumiInfoRunHeader = cms.bool(True) + ) +) + + +hltEgammaBestGsfTrackVarsUnseeded = cms.EDProducer("EgammaHLTGsfTrackVarProducer", + beamSpotProducer = cms.InputTag("hltOnlineBeamSpot"), + inputCollection = cms.InputTag("hltEgammaGsfElectronsUnseeded"), + lowerTrackNrToRemoveCut = cms.int32(-1), + recoEcalCandidateProducer = cms.InputTag("hltEgammaCandidatesUnseeded"), + upperTrackNrToRemoveCut = cms.int32(9999), + useDefaultValuesForBarrel = cms.bool(False), + useDefaultValuesForEndcap = cms.bool(False) +) + + +hltEgammaCandidatesUnseeded = cms.EDProducer("EgammaHLTRecoEcalCandidateProducers", + recoEcalCandidateCollection = cms.string(''), + scHybridBarrelProducer = cms.InputTag("hltParticleFlowSuperClusterECALUnseeded","hltParticleFlowSuperClusterECALBarrel"), + scIslandEndcapProducer = cms.InputTag("hltParticleFlowSuperClusterHGCalFromTICL") +) + + +hltEgammaCkfTrackCandidatesForGSFUnseeded = cms.EDProducer("CkfTrackCandidateMaker", + MeasurementTrackerEvent = cms.InputTag("hltMeasurementTrackerEvent"), + NavigationSchool = cms.string('SimpleNavigationSchool'), + RedundantSeedCleaner = cms.string('CachingSeedCleanerBySharedInput'), + SimpleMagneticField = cms.string(''), + TrajectoryBuilder = cms.string(''), + TrajectoryBuilderPSet = cms.PSet( + refToPSet_ = cms.string('HLTPSetTrajectoryBuilderForGsfElectrons') + ), + TrajectoryCleaner = cms.string('hltESPTrajectoryCleanerBySharedHits'), + TransientInitialStateEstimatorParameters = cms.PSet( + numberMeasurementsForFit = cms.int32(4), + propagatorAlongTISE = cms.string('PropagatorWithMaterial'), + propagatorOppositeTISE = cms.string('PropagatorWithMaterialOpposite') + ), + cleanTrajectoryAfterInOut = cms.bool(True), + doSeedingRegionRebuilding = cms.bool(True), + maxNSeeds = cms.uint32(1000000), + maxSeedsBeforeCleaning = cms.uint32(1000), + reverseTrajectories = cms.bool(False), + src = cms.InputTag("hltEgammaElectronPixelSeedsUnseeded"), + useHitsSplitting = cms.bool(True) +) + +hltEgammaElectronPixelSeedsUnseeded = cms.EDProducer("ElectronNHitSeedProducer", + beamSpot = cms.InputTag("hltOnlineBeamSpot"), + initialSeeds = cms.InputTag("hltElePixelSeedsCombinedUnseeded"), + matcherConfig = cms.PSet( + detLayerGeom = cms.ESInputTag("","GlobalDetLayerGeometry"), + enableHitSkipping = cms.bool(True), + matchingCuts = cms.VPSet( + cms.PSet( + dPhiMaxHighEt = cms.vdouble(0.05), + dPhiMaxHighEtThres = cms.vdouble(20.0), + dPhiMaxLowEtGrad = cms.vdouble(-0.002), + dRZMaxHighEt = cms.vdouble(9999.0), + dRZMaxHighEtThres = cms.vdouble(0.0), + dRZMaxLowEtGrad = cms.vdouble(0.0), + version = cms.int32(2) + ), + cms.PSet( + dPhiMaxHighEt = cms.vdouble(0.003), + dPhiMaxHighEtThres = cms.vdouble(0.0), + dPhiMaxLowEtGrad = cms.vdouble(0.0), + dRZMaxHighEt = cms.vdouble(0.05), + dRZMaxHighEtThres = cms.vdouble(30.0), + dRZMaxLowEtGrad = cms.vdouble(-0.002), + etaBins = cms.vdouble(), + version = cms.int32(2) + ), + cms.PSet( + dPhiMaxHighEt = cms.vdouble(0.003), + dPhiMaxHighEtThres = cms.vdouble(0.0), + dPhiMaxLowEtGrad = cms.vdouble(0.0), + dRZMaxHighEt = cms.vdouble(0.05), + dRZMaxHighEtThres = cms.vdouble(30.0), + dRZMaxLowEtGrad = cms.vdouble(-0.002), + etaBins = cms.vdouble(), + version = cms.int32(2) + ) + ), + minNrHits = cms.vuint32(2, 3), + minNrHitsValidLayerBins = cms.vint32(4), + navSchool = cms.ESInputTag("","SimpleNavigationSchool"), + requireExactMatchCount = cms.bool(False), + useParamMagFieldIfDefined = cms.bool(True), + useRecoVertex = cms.bool(False) + ), + measTkEvt = cms.InputTag("hltMeasurementTrackerEvent"), + superClusters = cms.VInputTag("hltEgammaSuperClustersToPixelMatchUnseeded"), + vertices = cms.InputTag("") +) + + +hltEgammaGsfElectronsUnseeded = cms.EDProducer("EgammaHLTPixelMatchElectronProducers", + BSProducer = cms.InputTag("hltOnlineBeamSpot"), + GsfTrackProducer = cms.InputTag("hltEgammaGsfTracksUnseeded"), + TrackProducer = cms.InputTag(""), + UseGsfTracks = cms.bool(True) +) + + +hltEgammaGsfTrackVarsUnseeded = cms.EDProducer("EgammaHLTGsfTrackVarProducer", + beamSpotProducer = cms.InputTag("hltOnlineBeamSpot"), + inputCollection = cms.InputTag("hltEgammaGsfTracksUnseeded"), + lowerTrackNrToRemoveCut = cms.int32(-1), + recoEcalCandidateProducer = cms.InputTag("hltEgammaCandidatesUnseeded"), + upperTrackNrToRemoveCut = cms.int32(9999), + useDefaultValuesForBarrel = cms.bool(False), + useDefaultValuesForEndcap = cms.bool(False) +) + + +hltEgammaGsfTracksUnseeded = cms.EDProducer("GsfTrackProducer", + AlgorithmName = cms.string('gsf'), + Fitter = cms.string('GsfElectronFittingSmoother'), + GeometricInnerState = cms.bool(False), + MeasurementTracker = cms.string(''), + MeasurementTrackerEvent = cms.InputTag("hltMeasurementTrackerEvent"), + NavigationSchool = cms.string('SimpleNavigationSchool'), + Propagator = cms.string('fwdGsfElectronPropagator'), + TTRHBuilder = cms.string('WithTrackAngle'), + TrajectoryInEvent = cms.bool(False), + beamSpot = cms.InputTag("hltOnlineBeamSpot"), + producer = cms.string(''), + src = cms.InputTag("hltEgammaCkfTrackCandidatesForGSFUnseeded"), + useHitsSplitting = cms.bool(False) +) + + +hltEgammaHoverEUnseeded = cms.EDProducer("EgammaHLTBcHcalIsolationProducersRegional", + absEtaLowEdges = cms.vdouble(0.0, 1.479), + caloTowerProducer = cms.InputTag("hltTowerMakerForAll"), + depth = cms.int32(-1), + doEtSum = cms.bool(False), + doRhoCorrection = cms.bool(False), + effectiveAreas = cms.vdouble(0.105, 0.17), + etMin = cms.double(0.0), + innerCone = cms.double(0.0), + outerCone = cms.double(0.14), + recoEcalCandidateProducer = cms.InputTag("hltEgammaCandidatesUnseeded"), + rhoMax = cms.double(99999999.0), + rhoProducer = cms.InputTag("hltFixedGridRhoFastjetAllCaloForMuons"), + rhoScale = cms.double(1.0), + useSingleTower = cms.bool(False) +) + + +hltEgammaPixelMatchVarsUnseeded = cms.EDProducer("EgammaHLTPixelMatchVarProducer", + dPhi1SParams = cms.PSet( + bins = cms.VPSet( + cms.PSet( + binType = cms.string('AbsEtaClus'), + funcParams = cms.vdouble(0.00112, 0.000752, -0.00122, 0.00109), + funcType = cms.string('TF1:=pol3'), + xMax = cms.double(1.5), + xMin = cms.double(0.0), + yMax = cms.int32(1), + yMin = cms.int32(1) + ), + cms.PSet( + binType = cms.string('AbsEtaClus'), + funcParams = cms.vdouble(0.00222, 0.000196, -0.000203, 0.000447), + funcType = cms.string('TF1:=pol3'), + xMax = cms.double(1.5), + xMin = cms.double(0.0), + yMax = cms.int32(2), + yMin = cms.int32(2) + ), + cms.PSet( + binType = cms.string('AbsEtaClus'), + funcParams = cms.vdouble(0.00236, 0.000691, 0.000199, 0.000416), + funcType = cms.string('TF1:=pol3'), + xMax = cms.double(1.5), + xMin = cms.double(0.0), + yMax = cms.int32(99999), + yMin = cms.int32(3) + ), + cms.PSet( + binType = cms.string('AbsEtaClus'), + funcParams = cms.vdouble(0.00823, -0.0029), + funcType = cms.string('TF1:=pol1'), + xMax = cms.double(2.0), + xMin = cms.double(1.5), + yMax = cms.int32(1), + yMin = cms.int32(1) + ), + cms.PSet( + binType = cms.string('AbsEtaClus'), + funcParams = cms.vdouble(0.00282), + funcType = cms.string('TF1:=pol0'), + xMax = cms.double(3.0), + xMin = cms.double(2.0), + yMax = cms.int32(1), + yMin = cms.int32(1) + ), + cms.PSet( + binType = cms.string('AbsEtaClus'), + funcParams = cms.vdouble(0.010838, -0.00345), + funcType = cms.string('TF1:=pol1'), + xMax = cms.double(2.0), + xMin = cms.double(1.5), + yMax = cms.int32(2), + yMin = cms.int32(2) + ), + cms.PSet( + binType = cms.string('AbsEtaClus'), + funcParams = cms.vdouble(0.0043), + funcType = cms.string('TF1:=pol0'), + xMax = cms.double(3.0), + xMin = cms.double(2.0), + yMax = cms.int32(2), + yMin = cms.int32(2) + ), + cms.PSet( + binType = cms.string('AbsEtaClus'), + funcParams = cms.vdouble(0.0208, -0.0125, 0.00231), + funcType = cms.string('TF1:=pol2'), + xMax = cms.double(3.0), + xMin = cms.double(1.5), + yMax = cms.int32(99999), + yMin = cms.int32(3) + ) + ) + ), + dPhi2SParams = cms.PSet( + bins = cms.VPSet( + cms.PSet( + binType = cms.string('AbsEtaClus'), + funcParams = cms.vdouble(0.00013), + funcType = cms.string('TF1:=pol0'), + xMax = cms.double(1.6), + xMin = cms.double(0.0), + yMax = cms.int32(99999), + yMin = cms.int32(1) + ), + cms.PSet( + binType = cms.string('AbsEtaClus'), + funcParams = cms.vdouble(0.00045, -0.000199), + funcType = cms.string('TF1:=pol1'), + xMax = cms.double(1.9), + xMin = cms.double(1.5), + yMax = cms.int32(99999), + yMin = cms.int32(1) + ), + cms.PSet( + binType = cms.string('AbsEtaClus'), + funcParams = cms.vdouble(7.94e-05), + funcType = cms.string('TF1:=pol0'), + xMax = cms.double(3.0), + xMin = cms.double(1.9), + yMax = cms.int32(99999), + yMin = cms.int32(1) + ) + ) + ), + dRZ2SParams = cms.PSet( + bins = cms.VPSet( + cms.PSet( + binType = cms.string('AbsEtaClus'), + funcParams = cms.vdouble(0.00299, 0.000299, -4.13e-06, 0.00191), + funcType = cms.string('TF1:=pol3'), + xMax = cms.double(1.5), + xMin = cms.double(0.0), + yMax = cms.int32(99999), + yMin = cms.int32(1) + ), + cms.PSet( + binType = cms.string('AbsEtaClus'), + funcParams = cms.vdouble(0.248, -0.329, 0.148, -0.0222), + funcType = cms.string('TF1:=pol3'), + xMax = cms.double(3.0), + xMin = cms.double(1.5), + yMax = cms.int32(99999), + yMin = cms.int32(1) + ) + ) + ), + pixelSeedsProducer = cms.InputTag("hltEgammaElectronPixelSeedsUnseeded"), + productsToWrite = cms.int32(0), + recoEcalCandidateProducer = cms.InputTag("hltEgammaCandidatesUnseeded") +) + + +hltEgammaSuperClustersToPixelMatchUnseeded = cms.EDProducer("EgammaHLTFilteredSuperClusterProducer", + cands = cms.InputTag("hltEgammaCandidatesUnseeded"), + cuts = cms.VPSet(cms.PSet( + barrelCut = cms.PSet( + cutOverE = cms.double(0.2), + useEt = cms.bool(False) + ), + endcapCut = cms.PSet( + cutOverE = cms.double(0.2), + useEt = cms.bool(False) + ), + var = cms.InputTag("hltEgammaHoverEUnseeded") + )) +) + + +hltElePixelHitDoubletsForTripletsUnseeded = cms.EDProducer("HitPairEDProducer", + clusterCheck = cms.InputTag(""), + layerPairs = cms.vuint32(0, 1), + maxElement = cms.uint32(0), + maxElementTotal = cms.uint32(50000000), + produceIntermediateHitDoublets = cms.bool(True), + produceSeedingHitSets = cms.bool(True), + seedingLayers = cms.InputTag("hltPixelLayerTriplets"), + trackingRegions = cms.InputTag("hltEleSeedsTrackingRegionsUnseeded"), + trackingRegionsSeedingLayers = cms.InputTag("") +) + + +hltElePixelHitDoubletsUnseeded = cms.EDProducer("HitPairEDProducer", + clusterCheck = cms.InputTag(""), + layerPairs = cms.vuint32(0), + maxElement = cms.uint32(0), + maxElementTotal = cms.uint32(50000000), + produceIntermediateHitDoublets = cms.bool(True), + produceSeedingHitSets = cms.bool(True), + seedingLayers = cms.InputTag("hltPixelLayerPairs"), + trackingRegions = cms.InputTag("hltEleSeedsTrackingRegionsUnseeded"), + trackingRegionsSeedingLayers = cms.InputTag("") +) + + +hltElePixelHitTripletsClusterRemoverUnseeded = cms.EDProducer("SeedClusterRemoverPhase2", + phase2OTClusters = cms.InputTag("hltSiPhase2Clusters"), + pixelClusters = cms.InputTag("hltSiPixelClusters"), + trajectories = cms.InputTag("hltElePixelSeedsTripletsUnseeded") +) + + +hltElePixelHitTripletsUnseeded = cms.EDProducer("CAHitTripletEDProducer", + CAHardPtCut = cms.double(0.3), + CAPhiCut = cms.double(0.1), + CAThetaCut = cms.double(0.004), + SeedComparitorPSet = cms.PSet( + ComponentName = cms.string('none') + ), + doublets = cms.InputTag("hltElePixelHitDoubletsForTripletsUnseeded"), + extraHitRPhitolerance = cms.double(0.032), + maxChi2 = cms.PSet( + enabled = cms.bool(True), + pt1 = cms.double(0.8), + pt2 = cms.double(8.0), + value1 = cms.double(100.0), + value2 = cms.double(6.0) + ), + useBendingCorrection = cms.bool(True) +) + + +hltElePixelSeedsCombinedUnseeded = cms.EDProducer("SeedCombiner", + seedCollections = cms.VInputTag("hltElePixelSeedsDoubletsUnseeded", "hltElePixelSeedsTripletsUnseeded") +) + + +hltElePixelSeedsDoubletsUnseeded = cms.EDProducer("SeedCreatorFromRegionConsecutiveHitsEDProducer", + MinOneOverPtError = cms.double(1.0), + OriginTransverseErrorMultiplier = cms.double(1.0), + SeedComparitorPSet = cms.PSet( + ComponentName = cms.string('none') + ), + SeedMomentumForBOFF = cms.double(5.0), + TTRHBuilder = cms.string('WithTrackAngle'), + forceKinematicWithRegionDirection = cms.bool(False), + magneticField = cms.string('ParabolicMf'), + propagator = cms.string('PropagatorWithMaterialParabolicMf'), + seedingHitSets = cms.InputTag("hltElePixelHitDoubletsUnseeded") +) + + +hltElePixelSeedsTripletsUnseeded = cms.EDProducer("SeedCreatorFromRegionConsecutiveHitsEDProducer", + MinOneOverPtError = cms.double(1.0), + OriginTransverseErrorMultiplier = cms.double(1.0), + SeedComparitorPSet = cms.PSet( + ComponentName = cms.string('none') + ), + SeedMomentumForBOFF = cms.double(5.0), + TTRHBuilder = cms.string('WithTrackAngle'), + forceKinematicWithRegionDirection = cms.bool(False), + magneticField = cms.string('ParabolicMf'), + propagator = cms.string('PropagatorWithMaterialParabolicMf'), + seedingHitSets = cms.InputTag("hltElePixelHitTripletsUnseeded") +) + + +hltEleSeedsTrackingRegionsUnseeded = cms.EDProducer("TrackingRegionsFromSuperClustersEDProducer", + RegionPSet = cms.PSet( + beamSpot = cms.InputTag("hltOnlineBeamSpot"), + defaultZ = cms.double(0.0), + deltaEtaRegion = cms.double(0.1), + deltaPhiRegion = cms.double(0.4), + measurementTrackerEvent = cms.InputTag(""), + minBSDeltaZ = cms.double(0.0), + nrSigmaForBSDeltaZ = cms.double(4.0), + originHalfLength = cms.double(12.5), + originRadius = cms.double(0.2), + precise = cms.bool(True), + ptMin = cms.double(1.5), + superClusters = cms.VInputTag("hltEgammaSuperClustersToPixelMatchUnseeded"), + useZInBeamspot = cms.bool(False), + useZInVertex = cms.bool(False), + vertices = cms.InputTag(""), + whereToUseMeasTracker = cms.string('kNever') + ) +) + + +hltFilteredLayerClustersEM = cms.EDProducer("FilteredLayerClustersProducer", + LayerClusters = cms.InputTag("hltHgcalLayerClusters"), + LayerClustersInputMask = cms.InputTag("hltHgcalLayerClusters","InitialLayerClustersMask"), + algo_number = cms.int32(8), + clusterFilter = cms.string('ClusterFilterByAlgoAndSizeAndLayerRange'), + iteration_label = cms.string('EM'), + max_cluster_size = cms.int32(9999), + max_layerId = cms.int32(30), + mightGet = cms.optional.untracked.vstring, + min_cluster_size = cms.int32(3), + min_layerId = cms.int32(0) +) + + +hltFilteredLayerClustersHAD = cms.EDProducer("FilteredLayerClustersProducer", + LayerClusters = cms.InputTag("hltHgcalLayerClusters"), + LayerClustersInputMask = cms.InputTag("hltTiclTrackstersEM"), + algo_number = cms.int32(8), + clusterFilter = cms.string('ClusterFilterByAlgoAndSize'), + iteration_label = cms.string('HAD'), + max_cluster_size = cms.int32(9999), + max_layerId = cms.int32(9999), + mightGet = cms.optional.untracked.vstring, + min_cluster_size = cms.int32(3), + min_layerId = cms.int32(0) +) + + +hltFilteredLayerClustersTrk = cms.EDProducer("FilteredLayerClustersProducer", + LayerClusters = cms.InputTag("hltHgcalLayerClusters"), + LayerClustersInputMask = cms.InputTag("hltTiclTrackstersEM"), + algo_number = cms.int32(8), + clusterFilter = cms.string('ClusterFilterByAlgoAndSize'), + iteration_label = cms.string('Trk'), + max_cluster_size = cms.int32(9999), + max_layerId = cms.int32(9999), + mightGet = cms.optional.untracked.vstring, + min_cluster_size = cms.int32(3), + min_layerId = cms.int32(0) +) + + +hltFilteredLayerClustersTrkEM = cms.EDProducer("FilteredLayerClustersProducer", + LayerClusters = cms.InputTag("hltHgcalLayerClusters"), + LayerClustersInputMask = cms.InputTag("hltHgcalLayerClusters","InitialLayerClustersMask"), + algo_number = cms.int32(8), + clusterFilter = cms.string('ClusterFilterByAlgoAndSizeAndLayerRange'), + iteration_label = cms.string('TrkEM'), + max_cluster_size = cms.int32(9999), + max_layerId = cms.int32(30), + mightGet = cms.optional.untracked.vstring, + min_cluster_size = cms.int32(3), + min_layerId = cms.int32(0) +) + + +hltFixedGridRhoFastjetAllCaloForMuons = cms.EDProducer("FixedGridRhoProducerFastjet", + gridSpacing = cms.double(0.55), + maxRapidity = cms.double(2.5), + pfCandidatesTag = cms.InputTag("hltTowerMakerForAll") +) + + +hltHGCalRecHit = cms.EDProducer("HGCalRecHitProducer", + HGCEE_cce = cms.PSet( + refToPSet_ = cms.string('HGCAL_chargeCollectionEfficiencies') + ), + HGCEE_fCPerMIP = cms.vdouble(2.06, 3.43, 5.15), + HGCEE_isSiFE = cms.bool(True), + HGCEE_keV2DIGI = cms.double(0.044259), + HGCEE_noise_fC = cms.PSet( + refToPSet_ = cms.string('HGCAL_noise_fC') + ), + HGCEErechitCollection = cms.string('HGCEERecHits'), + HGCEEuncalibRecHitCollection = cms.InputTag("hltHGCalUncalibRecHit","HGCEEUncalibRecHits"), + HGCHEB_isSiFE = cms.bool(True), + HGCHEB_keV2DIGI = cms.double(0.00148148148148), + HGCHEB_noise_MIP = cms.PSet( + refToPSet_ = cms.string('HGCAL_noise_heback') + ), + HGCHEBrechitCollection = cms.string('HGCHEBRecHits'), + HGCHEBuncalibRecHitCollection = cms.InputTag("hltHGCalUncalibRecHit","HGCHEBUncalibRecHits"), + HGCHEF_cce = cms.PSet( + refToPSet_ = cms.string('HGCAL_chargeCollectionEfficiencies') + ), + HGCHEF_fCPerMIP = cms.vdouble(2.06, 3.43, 5.15), + HGCHEF_isSiFE = cms.bool(True), + HGCHEF_keV2DIGI = cms.double(0.044259), + HGCHEF_noise_fC = cms.PSet( + refToPSet_ = cms.string('HGCAL_noise_fC') + ), + HGCHEFrechitCollection = cms.string('HGCHEFRecHits'), + HGCHEFuncalibRecHitCollection = cms.InputTag("hltHGCalUncalibRecHit","HGCHEFUncalibRecHits"), + HGCHFNose_cce = cms.PSet( + refToPSet_ = cms.string('HGCAL_chargeCollectionEfficiencies') + ), + HGCHFNose_fCPerMIP = cms.vdouble(1.25, 2.57, 3.88), + HGCHFNose_isSiFE = cms.bool(False), + HGCHFNose_keV2DIGI = cms.double(0.044259), + HGCHFNose_noise_fC = cms.PSet( + refToPSet_ = cms.string('HGCAL_noise_fC') + ), + HGCHFNoserechitCollection = cms.string('HGCHFNoseRecHits'), + HGCHFNoseuncalibRecHitCollection = cms.InputTag("hltHGCalUncalibRecHit","HGCHFNoseUncalibRecHits"), + algo = cms.string('HGCalRecHitWorkerSimple'), + constSiPar = cms.double(0.02), + deltasi_index_regemfac = cms.int32(3), + layerNoseWeights = cms.vdouble( + 0.0, 39.500245, 39.756638, 39.756638, 39.756638, + 39.756638, 66.020266, 92.283895, 92.283895 + ), + layerWeights = cms.vdouble( + 0.0, 8.894541, 10.937907, 10.937907, 10.937907, + 10.937907, 10.937907, 10.937907, 10.937907, 10.937907, + 10.932882, 10.932882, 10.937907, 10.937907, 10.938169, + 10.938169, 10.938169, 10.938169, 10.938169, 10.938169, + 10.938169, 10.938169, 10.938169, 10.938169, 10.938169, + 10.938169, 10.938169, 10.938169, 32.332097, 51.574301, + 51.444192, 51.444192, 51.444192, 51.444192, 51.444192, + 51.444192, 51.444192, 51.444192, 51.444192, 51.444192, + 69.513118, 87.582044, 87.582044, 87.582044, 87.582044, + 87.582044, 87.214571, 86.888309, 86.92952, 86.92952, + 86.92952 + ), + maxValSiPar = cms.double(10000.0), + minValSiPar = cms.double(10.0), + noiseSiPar = cms.double(5.5), + rangeMask = cms.uint32(4294442496), + rangeMatch = cms.uint32(1161838592), + sciThicknessCorrection = cms.double(0.9), + thicknessCorrection = cms.vdouble( + 0.77, 0.77, 0.77, 0.84, 0.84, + 0.84 + ), + thicknessNoseCorrection = cms.vdouble(1.132, 1.092, 1.084) +) + + +hltHGCalUncalibRecHit = cms.EDProducer("HGCalUncalibRecHitProducer", + HGCEEConfig = cms.PSet( + adcNbits = cms.uint32(10), + adcSaturation = cms.double(100), + fCPerMIP = cms.vdouble(2.06, 3.43, 5.15), + isSiFE = cms.bool(True), + tdcNbits = cms.uint32(12), + tdcOnset = cms.double(60), + tdcSaturation = cms.double(10000), + toaLSB_ns = cms.double(0.0244) + ), + HGCEEdigiCollection = cms.InputTag("hltHgcalDigis","EE"), + HGCEEhitCollection = cms.string('HGCEEUncalibRecHits'), + HGCHEBConfig = cms.PSet( + adcNbits = cms.uint32(10), + adcSaturation = cms.double(68.75), + fCPerMIP = cms.vdouble(1.0, 1.0, 1.0), + isSiFE = cms.bool(True), + tdcNbits = cms.uint32(12), + tdcOnset = cms.double(55), + tdcSaturation = cms.double(1000), + toaLSB_ns = cms.double(0.0244) + ), + HGCHEBdigiCollection = cms.InputTag("hltHgcalDigis","HEback"), + HGCHEBhitCollection = cms.string('HGCHEBUncalibRecHits'), + HGCHEFConfig = cms.PSet( + adcNbits = cms.uint32(10), + adcSaturation = cms.double(100), + fCPerMIP = cms.vdouble(2.06, 3.43, 5.15), + isSiFE = cms.bool(True), + tdcNbits = cms.uint32(12), + tdcOnset = cms.double(60), + tdcSaturation = cms.double(10000), + toaLSB_ns = cms.double(0.0244) + ), + HGCHEFdigiCollection = cms.InputTag("hltHgcalDigis","HEfront"), + HGCHEFhitCollection = cms.string('HGCHEFUncalibRecHits'), + HGCHFNoseConfig = cms.PSet( + adcNbits = cms.uint32(10), + adcSaturation = cms.double(100), + fCPerMIP = cms.vdouble(1.25, 2.57, 3.88), + isSiFE = cms.bool(False), + tdcNbits = cms.uint32(12), + tdcOnset = cms.double(60), + tdcSaturation = cms.double(10000), + toaLSB_ns = cms.double(0.0244) + ), + HGCHFNosedigiCollection = cms.InputTag("hfnoseDigis","HFNose"), + HGCHFNosehitCollection = cms.string('HGCHFNoseUncalibRecHits'), + algo = cms.string('HGCalUncalibRecHitWorkerWeights') +) + + +hltHbhereco = cms.EDProducer("HBHEPhase1Reconstructor", + algoConfigClass = cms.string(''), + algorithm = cms.PSet( + Class = cms.string('SimpleHBHEPhase1Algo'), + activeBXs = cms.vint32( + -3, -2, -1, 0, 1, + 2, 3, 4 + ), + applyLegacyHBMCorrection = cms.bool(False), + applyPedConstraint = cms.bool(True), + applyPulseJitter = cms.bool(False), + applyTimeConstraint = cms.bool(True), + applyTimeSlew = cms.bool(True), + applyTimeSlewM3 = cms.bool(True), + calculateArrivalTime = cms.bool(True), + chiSqSwitch = cms.double(15.0), + correctForPhaseContainment = cms.bool(True), + correctionPhaseNS = cms.double(6.0), + deltaChiSqThresh = cms.double(0.001), + dynamicPed = cms.bool(False), + firstSampleShift = cms.int32(0), + fitTimes = cms.int32(1), + meanPed = cms.double(0.0), + meanTime = cms.double(0.0), + nMaxItersMin = cms.int32(500), + nMaxItersNNLS = cms.int32(500), + nnlsThresh = cms.double(1e-11), + pulseJitter = cms.double(1.0), + respCorrM3 = cms.double(1.0), + samplesToAdd = cms.int32(2), + tdcTimeShift = cms.double(0.0), + timeMax = cms.double(12.5), + timeMin = cms.double(-12.5), + timeSigmaHPD = cms.double(5.0), + timeSigmaSiPM = cms.double(2.5), + timeSlewParsType = cms.int32(3), + ts4Max = cms.vdouble(100.0, 20000.0, 30000.0), + ts4Min = cms.double(0.0), + ts4Thresh = cms.double(0.0), + ts4chi2 = cms.vdouble(15.0, 15.0), + useM2 = cms.bool(False), + useM3 = cms.bool(True), + useMahi = cms.bool(True) + ), + digiLabelQIE11 = cms.InputTag("hltHcalDigis"), + digiLabelQIE8 = cms.InputTag("hltHcalDigis"), + dropZSmarkedPassed = cms.bool(True), + flagParametersQIE11 = cms.PSet( + + ), + flagParametersQIE8 = cms.PSet( + hitEnergyMinimum = cms.double(1.0), + hitMultiplicityThreshold = cms.int32(17), + nominalPedestal = cms.double(3.0), + pulseShapeParameterSets = cms.VPSet( + cms.PSet( + pulseShapeParameters = cms.vdouble( + 0.0, 100.0, -50.0, 0.0, -15.0, + 0.15 + ) + ), + cms.PSet( + pulseShapeParameters = cms.vdouble( + 100.0, 2000.0, -50.0, 0.0, -5.0, + 0.05 + ) + ), + cms.PSet( + pulseShapeParameters = cms.vdouble( + 2000.0, 1000000.0, -50.0, 0.0, 95.0, + 0.0 + ) + ), + cms.PSet( + pulseShapeParameters = cms.vdouble( + -1000000.0, 1000000.0, 45.0, 0.1, 1000000.0, + 0.0 + ) + ) + ) + ), + makeRecHits = cms.bool(True), + processQIE11 = cms.bool(True), + processQIE8 = cms.bool(True), + pulseShapeParametersQIE11 = cms.PSet( + + ), + pulseShapeParametersQIE8 = cms.PSet( + LeftSlopeCut = cms.vdouble(5.0, 2.55, 2.55), + LeftSlopeThreshold = cms.vdouble(250.0, 500.0, 100000.0), + LinearCut = cms.vdouble(-3.0, -0.054, -0.054), + LinearThreshold = cms.vdouble(20.0, 100.0, 100000.0), + MinimumChargeThreshold = cms.double(20.0), + MinimumTS4TS5Threshold = cms.double(100.0), + R45MinusOneRange = cms.double(0.2), + R45PlusOneRange = cms.double(0.2), + RMS8MaxCut = cms.vdouble(-13.5, -11.5, -11.5), + RMS8MaxThreshold = cms.vdouble(20.0, 100.0, 100000.0), + RightSlopeCut = cms.vdouble(5.0, 4.15, 4.15), + RightSlopeSmallCut = cms.vdouble(1.08, 1.16, 1.16), + RightSlopeSmallThreshold = cms.vdouble(150.0, 200.0, 100000.0), + RightSlopeThreshold = cms.vdouble(250.0, 400.0, 100000.0), + TS3TS4ChargeThreshold = cms.double(70.0), + TS3TS4UpperChargeThreshold = cms.double(20.0), + TS4TS5ChargeThreshold = cms.double(70.0), + TS4TS5LowerCut = cms.vdouble( + -1.0, -0.7, -0.5, -0.4, -0.3, + 0.1 + ), + TS4TS5LowerThreshold = cms.vdouble( + 100.0, 120.0, 160.0, 200.0, 300.0, + 500.0 + ), + TS4TS5UpperCut = cms.vdouble(1.0, 0.8, 0.75, 0.72), + TS4TS5UpperThreshold = cms.vdouble(70.0, 90.0, 100.0, 400.0), + TS5TS6ChargeThreshold = cms.double(70.0), + TS5TS6UpperChargeThreshold = cms.double(20.0), + TriangleIgnoreSlow = cms.bool(False), + TrianglePeakTS = cms.uint32(10000), + UseDualFit = cms.bool(True) + ), + recoParamsFromDB = cms.bool(True), + saveDroppedInfos = cms.bool(False), + saveEffectivePedestal = cms.bool(True), + saveInfos = cms.bool(False), + setLegacyFlagsQIE11 = cms.bool(False), + setLegacyFlagsQIE8 = cms.bool(True), + setNegativeFlagsQIE11 = cms.bool(False), + setNegativeFlagsQIE8 = cms.bool(True), + setNoiseFlagsQIE11 = cms.bool(False), + setNoiseFlagsQIE8 = cms.bool(True), + setPulseShapeFlagsQIE11 = cms.bool(False), + setPulseShapeFlagsQIE8 = cms.bool(True), + sipmQNTStoSum = cms.int32(3), + sipmQTSShift = cms.int32(0), + tsFromDB = cms.bool(False), + use8ts = cms.bool(True) +) + + +hltHcalDigis = cms.EDProducer("HcalRawToDigi", + ComplainEmptyData = cms.untracked.bool(False), + ElectronicsMap = cms.string(''), + ExpectedOrbitMessageTime = cms.untracked.int32(-1), + FEDs = cms.untracked.vint32(), + FilterDataQuality = cms.bool(True), + HcalFirstFED = cms.untracked.int32(700), + InputLabel = cms.InputTag("rawDataCollector"), + UnpackCalib = cms.untracked.bool(True), + UnpackTTP = cms.untracked.bool(True), + UnpackUMNio = cms.untracked.bool(True), + UnpackZDC = cms.untracked.bool(True), + UnpackerMode = cms.untracked.int32(0), + firstSample = cms.int32(0), + lastSample = cms.int32(9), + mightGet = cms.optional.untracked.vstring, + saveQIE10DataNSamples = cms.untracked.vint32(), + saveQIE10DataTags = cms.untracked.vstring(), + saveQIE11DataNSamples = cms.untracked.vint32(), + saveQIE11DataTags = cms.untracked.vstring(), + silent = cms.untracked.bool(True) +) + + +hltHfprereco = cms.EDProducer("HFPreReconstructor", + digiLabel = cms.InputTag("hltHcalDigis"), + dropZSmarkedPassed = cms.bool(True), + forceSOI = cms.int32(-1), + soiShift = cms.int32(0), + sumAllTimeSlices = cms.bool(False), + tsFromDB = cms.bool(False) +) + + +hltHfreco = cms.EDProducer("HFPhase1Reconstructor", + HFStripFilter = cms.PSet( + gap = cms.int32(2), + lstrips = cms.int32(2), + maxStripTime = cms.double(10.0), + maxThreshold = cms.double(100.0), + seedHitIetaMax = cms.int32(35), + stripThreshold = cms.double(40.0), + timeMax = cms.double(6.0), + verboseLevel = cms.untracked.int32(10), + wedgeCut = cms.double(0.05) + ), + PETstat = cms.PSet( + HcalAcceptSeverityLevel = cms.int32(9), + longETParams = cms.vdouble( + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0 + ), + longEnergyParams = cms.vdouble( + 43.5, 45.7, 48.32, 51.36, 54.82, + 58.7, 63.0, 67.72, 72.86, 78.42, + 84.4, 90.8, 97.62 + ), + long_R = cms.vdouble(0.98), + long_R_29 = cms.vdouble(0.8), + shortETParams = cms.vdouble( + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0 + ), + shortEnergyParams = cms.vdouble( + 35.1773, 35.37, 35.7933, 36.4472, 37.3317, + 38.4468, 39.7925, 41.3688, 43.1757, 45.2132, + 47.4813, 49.98, 52.7093 + ), + short_R = cms.vdouble(0.8), + short_R_29 = cms.vdouble(0.8) + ), + S8S1stat = cms.PSet( + HcalAcceptSeverityLevel = cms.int32(9), + isS8S1 = cms.bool(True), + longETParams = cms.vdouble( + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0 + ), + longEnergyParams = cms.vdouble( + 40.0, 100.0, 100.0, 100.0, 100.0, + 100.0, 100.0, 100.0, 100.0, 100.0, + 100.0, 100.0, 100.0 + ), + long_optimumSlope = cms.vdouble( + 0.3, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1 + ), + shortETParams = cms.vdouble( + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0 + ), + shortEnergyParams = cms.vdouble( + 40.0, 100.0, 100.0, 100.0, 100.0, + 100.0, 100.0, 100.0, 100.0, 100.0, + 100.0, 100.0, 100.0 + ), + short_optimumSlope = cms.vdouble( + 0.3, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1 + ) + ), + S9S1stat = cms.PSet( + HcalAcceptSeverityLevel = cms.int32(9), + isS8S1 = cms.bool(False), + longETParams = cms.vdouble( + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0 + ), + longEnergyParams = cms.vdouble( + 43.5, 45.7, 48.32, 51.36, 54.82, + 58.7, 63.0, 67.72, 72.86, 78.42, + 84.4, 90.8, 97.62 + ), + long_optimumSlope = cms.vdouble( + -99999.0, 0.0164905, 0.0238698, 0.0321383, 0.041296, + 0.0513428, 0.0622789, 0.0741041, 0.0868186, 0.100422, + 0.135313, 0.136289, 0.0589927 + ), + shortETParams = cms.vdouble( + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0 + ), + shortEnergyParams = cms.vdouble( + 35.1773, 35.37, 35.7933, 36.4472, 37.3317, + 38.4468, 39.7925, 41.3688, 43.1757, 45.2132, + 47.4813, 49.98, 52.7093 + ), + short_optimumSlope = cms.vdouble( + -99999.0, 0.0164905, 0.0238698, 0.0321383, 0.041296, + 0.0513428, 0.0622789, 0.0741041, 0.0868186, 0.100422, + 0.135313, 0.136289, 0.0589927 + ) + ), + algoConfigClass = cms.string('HFPhase1PMTParams'), + algorithm = cms.PSet( + Class = cms.string('HFFlexibleTimeCheck'), + energyWeights = cms.vdouble( + 1.0, 1.0, 1.0, 0.0, 1.0, + 0.0, 2.0, 0.0, 2.0, 0.0, + 2.0, 0.0, 1.0, 0.0, 0.0, + 1.0, 0.0, 1.0, 0.0, 2.0, + 0.0, 2.0, 0.0, 2.0, 0.0, + 1.0 + ), + rejectAllFailures = cms.bool(True), + soiPhase = cms.uint32(1), + tfallIfNoTDC = cms.double(-101.0), + timeShift = cms.double(0.0), + tlimits = cms.vdouble(-1000.0, 1000.0, -1000.0, 1000.0), + triseIfNoTDC = cms.double(-100.0) + ), + checkChannelQualityForDepth3and4 = cms.bool(False), + inputLabel = cms.InputTag("hltHfprereco"), + runHFStripFilter = cms.bool(False), + setNoiseFlags = cms.bool(True), + useChannelQualityFromDB = cms.bool(False) +) + + +hltHgcalDigis = cms.EDProducer("HGCalRawToDigiFake", + bhDigis = cms.InputTag("simHGCalUnsuppressedDigis","HEback"), + eeDigis = cms.InputTag("simHGCalUnsuppressedDigis","EE"), + fhDigis = cms.InputTag("simHGCalUnsuppressedDigis","HEfront"), + mightGet = cms.optional.untracked.vstring +) + + +hltHgcalLayerClusters = cms.EDProducer("HGCalLayerClusterProducer", + HFNoseInput = cms.InputTag("hltHGCalRecHit","HGCHFNoseRecHits"), + HGCBHInput = cms.InputTag("hltHGCalRecHit","HGCHEBRecHits"), + HGCEEInput = cms.InputTag("hltHGCalRecHit","HGCEERecHits"), + HGCFHInput = cms.InputTag("hltHGCalRecHit","HGCHEFRecHits"), + detector = cms.string('all'), + doSharing = cms.bool(False), + mightGet = cms.optional.untracked.vstring, + nHitsTime = cms.uint32(3), + plugin = cms.PSet( + dEdXweights = cms.vdouble( + 0.0, 8.894541, 10.937907, 10.937907, 10.937907, + 10.937907, 10.937907, 10.937907, 10.937907, 10.937907, + 10.932882, 10.932882, 10.937907, 10.937907, 10.938169, + 10.938169, 10.938169, 10.938169, 10.938169, 10.938169, + 10.938169, 10.938169, 10.938169, 10.938169, 10.938169, + 10.938169, 10.938169, 10.938169, 32.332097, 51.574301, + 51.444192, 51.444192, 51.444192, 51.444192, 51.444192, + 51.444192, 51.444192, 51.444192, 51.444192, 51.444192, + 69.513118, 87.582044, 87.582044, 87.582044, 87.582044, + 87.582044, 87.214571, 86.888309, 86.92952, 86.92952, + 86.92952 + ), + deltac = cms.vdouble(1.3, 1.3, 5, 0.0315), + deltasi_index_regemfac = cms.int32(3), + dependSensor = cms.bool(True), + ecut = cms.double(3), + fcPerEle = cms.double(0.00016020506), + fcPerMip = cms.vdouble( + 2.06, 3.43, 5.15, 2.06, 3.43, + 5.15 + ), + kappa = cms.double(9), + maxNumberOfThickIndices = cms.uint32(6), + noiseMip = cms.PSet( + refToPSet_ = cms.string('HGCAL_noise_heback') + ), + noises = cms.vdouble( + 2000.0, 2400.0, 2000.0, 2000.0, 2400.0, + 2000.0 + ), + positionDeltaRho2 = cms.double(1.69), + sciThicknessCorrection = cms.double(0.9), + thicknessCorrection = cms.vdouble( + 0.77, 0.77, 0.77, 0.84, 0.84, + 0.84 + ), + thresholdW0 = cms.vdouble(2.9, 2.9, 2.9), + type = cms.string('CLUE'), + use2x2 = cms.bool(True), + verbosity = cms.untracked.uint32(3) + ), + timeClname = cms.string('timeLayerCluster'), + timeOffset = cms.double(5) +) + + +hltHoreco = cms.EDProducer("HcalHitReconstructor", + HFInWindowStat = cms.PSet( + + ), + PETstat = cms.PSet( + + ), + S8S1stat = cms.PSet( + + ), + S9S1stat = cms.PSet( + + ), + Subdetector = cms.string('HO'), + correctForPhaseContainment = cms.bool(True), + correctForTimeslew = cms.bool(True), + correctTiming = cms.bool(False), + correctionPhaseNS = cms.double(13.0), + dataOOTCorrectionCategory = cms.string('Data'), + dataOOTCorrectionName = cms.string(''), + digiLabel = cms.InputTag("hltHcalDigis"), + digiTimeFromDB = cms.bool(True), + digistat = cms.PSet( + + ), + dropZSmarkedPassed = cms.bool(True), + firstAuxTS = cms.int32(4), + firstSample = cms.int32(4), + hfTimingTrustParameters = cms.PSet( + + ), + mcOOTCorrectionCategory = cms.string('MC'), + mcOOTCorrectionName = cms.string(''), + recoParamsFromDB = cms.bool(True), + samplesToAdd = cms.int32(4), + saturationParameters = cms.PSet( + maxADCvalue = cms.int32(127) + ), + setHSCPFlags = cms.bool(False), + setNegativeFlags = cms.bool(False), + setNoiseFlags = cms.bool(False), + setPulseShapeFlags = cms.bool(False), + setSaturationFlags = cms.bool(False), + setTimingTrustFlags = cms.bool(False), + tsFromDB = cms.bool(True), + useLeakCorrection = cms.bool(False) +) + + +hltMeasurementTrackerEvent = cms.EDProducer("MeasurementTrackerEventProducer", + Phase2TrackerCluster1DProducer = cms.string('hltSiPhase2Clusters'), + badPixelFEDChannelCollectionLabels = cms.VInputTag("hltSiPixelDigis"), + inactivePixelDetectorLabels = cms.VInputTag(), + inactiveStripDetectorLabels = cms.VInputTag("hltSiStripDigis"), + measurementTracker = cms.string(''), + mightGet = cms.optional.untracked.vstring, + pixelCablingMapLabel = cms.string(''), + pixelClusterProducer = cms.string('hltSiPixelClusters'), + skipClusters = cms.InputTag(""), + stripClusterProducer = cms.string(''), + switchOffPixelsIfEmpty = cms.bool(True) +) + + +hltOfflineBeamSpot = cms.EDProducer("BeamSpotProducer") + + +hltParticleFlowClusterECALUncorrectedUnseeded = cms.EDProducer("PFClusterProducer", + energyCorrector = cms.PSet( + + ), + initialClusteringStep = cms.PSet( + algoName = cms.string('Basic2DGenericTopoClusterizer'), + thresholdsByDetector = cms.VPSet( + cms.PSet( + detector = cms.string('ECAL_BARREL'), + gatheringThreshold = cms.double(0.175), + gatheringThresholdPt = cms.double(0.0) + ), + cms.PSet( + detector = cms.string('ECAL_ENDCAP'), + gatheringThreshold = cms.double(0.3), + gatheringThresholdPt = cms.double(0.0) + ) + ), + useCornerCells = cms.bool(True) + ), + pfClusterBuilder = cms.PSet( + algoName = cms.string('Basic2DGenericPFlowClusterizer'), + allCellsPositionCalc = cms.PSet( + algoName = cms.string('Basic2DGenericPFlowPositionCalc'), + logWeightDenominator = cms.double(0.08), + minAllowedNormalization = cms.double(1e-09), + minFractionInCalc = cms.double(1e-09), + posCalcNCrystals = cms.int32(-1), + timeResolutionCalcBarrel = cms.PSet( + constantTerm = cms.double(0.428192), + constantTermLowE = cms.double(0.0), + corrTermLowE = cms.double(0.0510871), + noiseTerm = cms.double(1.10889), + noiseTermLowE = cms.double(1.31883), + threshHighE = cms.double(5.0), + threshLowE = cms.double(0.5) + ), + timeResolutionCalcEndcap = cms.PSet( + constantTerm = cms.double(0.0), + constantTermLowE = cms.double(0.0), + corrTermLowE = cms.double(0.0), + noiseTerm = cms.double(5.72489999999), + noiseTermLowE = cms.double(6.92683000001), + threshHighE = cms.double(10.0), + threshLowE = cms.double(1.0) + ) + ), + excludeOtherSeeds = cms.bool(True), + maxIterations = cms.uint32(50), + minFracTot = cms.double(1e-20), + minFractionToKeep = cms.double(1e-07), + positionCalc = cms.PSet( + algoName = cms.string('Basic2DGenericPFlowPositionCalc'), + logWeightDenominator = cms.double(0.08), + minAllowedNormalization = cms.double(1e-09), + minFractionInCalc = cms.double(1e-09), + posCalcNCrystals = cms.int32(9), + timeResolutionCalcBarrel = cms.PSet( + constantTerm = cms.double(0.428192), + constantTermLowE = cms.double(0.0), + corrTermLowE = cms.double(0.0510871), + noiseTerm = cms.double(1.10889), + noiseTermLowE = cms.double(1.31883), + threshHighE = cms.double(5.0), + threshLowE = cms.double(0.5) + ), + timeResolutionCalcEndcap = cms.PSet( + constantTerm = cms.double(0.0), + constantTermLowE = cms.double(0.0), + corrTermLowE = cms.double(0.0), + noiseTerm = cms.double(5.72489999999), + noiseTermLowE = cms.double(6.92683000001), + threshHighE = cms.double(10.0), + threshLowE = cms.double(1.0) + ) + ), + positionCalcForConvergence = cms.PSet( + T0_EB = cms.double(7.4), + T0_EE = cms.double(3.1), + T0_ES = cms.double(1.2), + W0 = cms.double(4.2), + X0 = cms.double(0.89), + algoName = cms.string('ECAL2DPositionCalcWithDepthCorr'), + minAllowedNormalization = cms.double(0.0), + minFractionInCalc = cms.double(0.0) + ), + recHitEnergyNorms = cms.VPSet( + cms.PSet( + detector = cms.string('ECAL_BARREL'), + recHitEnergyNorm = cms.double(0.08) + ), + cms.PSet( + detector = cms.string('ECAL_ENDCAP'), + recHitEnergyNorm = cms.double(0.3) + ) + ), + showerSigma = cms.double(1.5), + stoppingTolerance = cms.double(1e-08) + ), + positionReCalc = cms.PSet( + T0_EB = cms.double(7.4), + T0_EE = cms.double(3.1), + T0_ES = cms.double(1.2), + W0 = cms.double(4.2), + X0 = cms.double(0.89), + algoName = cms.string('ECAL2DPositionCalcWithDepthCorr'), + minAllowedNormalization = cms.double(0.0), + minFractionInCalc = cms.double(0.0) + ), + recHitCleaners = cms.VPSet(), + recHitsSource = cms.InputTag("hltParticleFlowRecHitECALUnseeded"), + seedCleaners = cms.VPSet(cms.PSet( + RecHitFlagsToBeExcluded = cms.vstring(), + algoName = cms.string('FlagsCleanerECAL') + )), + seedFinder = cms.PSet( + algoName = cms.string('LocalMaximumSeedFinder'), + nNeighbours = cms.int32(8), + thresholdsByDetector = cms.VPSet( + cms.PSet( + detector = cms.string('ECAL_ENDCAP'), + seedingThreshold = cms.double(0.6), + seedingThresholdPt = cms.double(0.15) + ), + cms.PSet( + detector = cms.string('ECAL_BARREL'), + seedingThreshold = cms.double(0.4375), + seedingThresholdPt = cms.double(0.0) + ) + ) + ) +) + + +hltParticleFlowClusterECALUnseeded = cms.EDProducer("CorrectedECALPFClusterProducer", + energyCorrector = cms.PSet( + applyCrackCorrections = cms.bool(False), + applyMVACorrections = cms.bool(True), + autoDetectBunchSpacing = cms.bool(True), + bunchSpacing = cms.int32(25), + ebSrFlagLabel = cms.InputTag("hltEcalDigis"), + eeSrFlagLabel = cms.InputTag("hltEcalDigis"), + maxPtForMVAEvaluation = cms.double(300.0), + recHitsEBLabel = cms.InputTag("hltEcalRecHit","EcalRecHitsEB"), + recHitsEELabel = cms.InputTag("hltEcalRecHit","EcalRecHitsEE"), + setEnergyUncertainty = cms.bool(False), + srfAwareCorrection = cms.bool(True) + ), + inputECAL = cms.InputTag("hltParticleFlowTimeAssignerECALUnseeded"), + inputPS = cms.InputTag("hltParticleFlowClusterPSUnseeded"), + mightGet = cms.optional.untracked.vstring, + minimumPSEnergy = cms.double(0) +) + + +hltParticleFlowClusterHGCalFromTICL = cms.EDProducer("PFClusterProducer", + energyCorrector = cms.PSet( + + ), + initialClusteringStep = cms.PSet( + algoName = cms.string('PFClusterFromHGCalMultiCluster'), + clusterSrc = cms.InputTag("hltTiclMultiClustersFromTrackstersMerge"), + filterByTracksterPID = cms.bool(False), + filter_on_categories = cms.vint32(0, 1), + pid_threshold = cms.double(0.8), + thresholdsByDetector = cms.VPSet(), + tracksterSrc = cms.InputTag("hltTiclTrackstersEM") + ), + pfClusterBuilder = cms.PSet( + + ), + positionReCalc = cms.PSet( + algoName = cms.string('Cluster3DPCACalculator'), + minFractionInCalc = cms.double(1e-09), + updateTiming = cms.bool(False) + ), + recHitCleaners = cms.VPSet(), + recHitsSource = cms.InputTag("hltParticleFlowRecHitHGC"), + seedCleaners = cms.VPSet(), + seedFinder = cms.PSet( + algoName = cms.string('PassThruSeedFinder'), + nNeighbours = cms.int32(8), + thresholdsByDetector = cms.VPSet() + ) +) + + +hltParticleFlowClusterHGCalFromTICLHAD = cms.EDProducer("PFClusterProducer", + energyCorrector = cms.PSet( + + ), + initialClusteringStep = cms.PSet( + algoName = cms.string('PFClusterFromHGCalMultiCluster'), + clusterSrc = cms.InputTag("hltTiclMultiClustersFromTrackstersHAD"), + filterByTracksterPID = cms.bool(False), + filter_on_categories = cms.vint32(0, 1), + pid_threshold = cms.double(0.8), + thresholdsByDetector = cms.VPSet(), + tracksterSrc = cms.InputTag("hltTiclTrackstersHAD") + ), + pfClusterBuilder = cms.PSet( + + ), + positionReCalc = cms.PSet( + algoName = cms.string('Cluster3DPCACalculator'), + minFractionInCalc = cms.double(1e-09), + updateTiming = cms.bool(False) + ), + recHitCleaners = cms.VPSet(), + recHitsSource = cms.InputTag("hltParticleFlowRecHitHGC"), + seedCleaners = cms.VPSet(), + seedFinder = cms.PSet( + algoName = cms.string('PassThruSeedFinder'), + nNeighbours = cms.int32(8), + thresholdsByDetector = cms.VPSet() + ) +) + + +hltParticleFlowClusterPSUnseeded = cms.EDProducer("PFClusterProducer", + energyCorrector = cms.PSet( + + ), + initialClusteringStep = cms.PSet( + algoName = cms.string('Basic2DGenericTopoClusterizer'), + thresholdsByDetector = cms.VPSet( + cms.PSet( + detector = cms.string('PS1'), + gatheringThreshold = cms.double(6e-05), + gatheringThresholdPt = cms.double(0.0) + ), + cms.PSet( + detector = cms.string('PS2'), + gatheringThreshold = cms.double(6e-05), + gatheringThresholdPt = cms.double(0.0) + ) + ), + useCornerCells = cms.bool(False) + ), + pfClusterBuilder = cms.PSet( + algoName = cms.string('Basic2DGenericPFlowClusterizer'), + excludeOtherSeeds = cms.bool(True), + maxIterations = cms.uint32(50), + minFracTot = cms.double(1e-20), + minFractionToKeep = cms.double(1e-07), + positionCalc = cms.PSet( + algoName = cms.string('Basic2DGenericPFlowPositionCalc'), + logWeightDenominator = cms.double(6e-05), + minAllowedNormalization = cms.double(1e-09), + minFractionInCalc = cms.double(1e-09), + posCalcNCrystals = cms.int32(-1) + ), + recHitEnergyNorms = cms.VPSet( + cms.PSet( + detector = cms.string('PS1'), + recHitEnergyNorm = cms.double(6e-05) + ), + cms.PSet( + detector = cms.string('PS2'), + recHitEnergyNorm = cms.double(6e-05) + ) + ), + showerSigma = cms.double(0.3), + stoppingTolerance = cms.double(1e-08) + ), + positionReCalc = cms.PSet( + + ), + recHitCleaners = cms.VPSet(), + recHitsSource = cms.InputTag("hltParticleFlowRecHitPSUnseeded"), + seedCleaners = cms.VPSet(), + seedFinder = cms.PSet( + algoName = cms.string('LocalMaximumSeedFinder'), + nNeighbours = cms.int32(4), + thresholdsByDetector = cms.VPSet( + cms.PSet( + detector = cms.string('PS1'), + seedingThreshold = cms.double(0.00012), + seedingThresholdPt = cms.double(0.0) + ), + cms.PSet( + detector = cms.string('PS2'), + seedingThreshold = cms.double(0.00012), + seedingThresholdPt = cms.double(0.0) + ) + ) + ) +) + + +hltParticleFlowRecHitECALUnseeded = cms.EDProducer("PFRecHitProducer", + navigator = cms.PSet( + barrel = cms.PSet( + + ), + endcap = cms.PSet( + + ), + name = cms.string('PFRecHitECALNavigator') + ), + producers = cms.VPSet( + cms.PSet( + name = cms.string('PFEBRecHitCreator'), + qualityTests = cms.VPSet( + cms.PSet( + applySelectionsToAllCrystals = cms.bool(True), + name = cms.string('PFRecHitQTestDBThreshold') + ), + cms.PSet( + cleaningThreshold = cms.double(2.0), + name = cms.string('PFRecHitQTestECAL'), + skipTTRecoveredHits = cms.bool(True), + timingCleaning = cms.bool(True), + topologicalCleaning = cms.bool(True) + ) + ), + srFlags = cms.InputTag(""), + src = cms.InputTag("hltEcalRecHit","EcalRecHitsEB") + ), + cms.PSet( + name = cms.string('PFEERecHitCreator'), + qualityTests = cms.VPSet( + cms.PSet( + applySelectionsToAllCrystals = cms.bool(True), + name = cms.string('PFRecHitQTestDBThreshold') + ), + cms.PSet( + cleaningThreshold = cms.double(2.0), + name = cms.string('PFRecHitQTestECAL'), + skipTTRecoveredHits = cms.bool(True), + timingCleaning = cms.bool(True), + topologicalCleaning = cms.bool(True) + ) + ), + srFlags = cms.InputTag(""), + src = cms.InputTag("hltEcalRecHit","EcalRecHitsEE") + ) + ) +) + + +hltParticleFlowRecHitHGC = cms.EDProducer("PFRecHitProducer", + navigator = cms.PSet( + hgcee = cms.PSet( + name = cms.string('PFRecHitHGCEENavigator'), + topologySource = cms.string('HGCalEESensitive') + ), + hgcheb = cms.PSet( + name = cms.string('PFRecHitHGCHENavigator'), + topologySource = cms.string('HGCalHEScintillatorSensitive') + ), + hgchef = cms.PSet( + name = cms.string('PFRecHitHGCHENavigator'), + topologySource = cms.string('HGCalHESiliconSensitive') + ), + name = cms.string('PFRecHitHGCNavigator') + ), + producers = cms.VPSet( + cms.PSet( + geometryInstance = cms.string('HGCalEESensitive'), + name = cms.string('PFHGCalEERecHitCreator'), + qualityTests = cms.VPSet(cms.PSet( + name = cms.string('PFRecHitQTestHGCalThresholdSNR'), + thresholdSNR = cms.double(5.0) + )), + src = cms.InputTag("hltHGCalRecHit","HGCEERecHits") + ), + cms.PSet( + geometryInstance = cms.string('HGCalHESiliconSensitive'), + name = cms.string('PFHGCalHSiRecHitCreator'), + qualityTests = cms.VPSet(cms.PSet( + name = cms.string('PFRecHitQTestHGCalThresholdSNR'), + thresholdSNR = cms.double(5.0) + )), + src = cms.InputTag("hltHGCalRecHit","HGCHEFRecHits") + ), + cms.PSet( + geometryInstance = cms.string(''), + name = cms.string('PFHGCalHScRecHitCreator'), + qualityTests = cms.VPSet(cms.PSet( + name = cms.string('PFRecHitQTestHGCalThresholdSNR'), + thresholdSNR = cms.double(5.0) + )), + src = cms.InputTag("hltHGCalRecHit","HGCHEBRecHits") + ) + ) +) + + +hltParticleFlowRecHitPSUnseeded = cms.EDProducer("PFRecHitProducer", + navigator = cms.PSet( + name = cms.string('PFRecHitPreshowerNavigator') + ), + producers = cms.VPSet(cms.PSet( + name = cms.string('PFPSRecHitCreator'), + qualityTests = cms.VPSet( + cms.PSet( + name = cms.string('PFRecHitQTestThreshold'), + threshold = cms.double(0.0) + ), + cms.PSet( + cleaningThreshold = cms.double(0.0), + name = cms.string('PFRecHitQTestES'), + topologicalCleaning = cms.bool(True) + ) + ), + src = cms.InputTag("hltEcalPreshowerRecHit","EcalRecHitsES") + )) +) + + +hltParticleFlowSuperClusterECALUnseeded = cms.EDProducer("PFECALSuperClusterProducer", + BeamSpot = cms.InputTag("hltOnlineBeamSpot"), + ClusteringType = cms.string('Mustache'), + ESAssociation = cms.InputTag("hltParticleFlowClusterECALUnseeded"), + EnergyWeight = cms.string('Raw'), + PFBasicClusterCollectionBarrel = cms.string('hltParticleFlowBasicClusterECALBarrel'), + PFBasicClusterCollectionEndcap = cms.string('hltParticleFlowBasicClusterECALEndcap'), + PFBasicClusterCollectionPreshower = cms.string('hltParticleFlowBasicClusterECALPreshower'), + PFClusters = cms.InputTag("hltParticleFlowClusterECALUnseeded"), + PFSuperClusterCollectionBarrel = cms.string('hltParticleFlowSuperClusterECALBarrel'), + PFSuperClusterCollectionEndcap = cms.string('hltParticleFlowSuperClusterECALEndcap'), + PFSuperClusterCollectionEndcapWithPreshower = cms.string('hltParticleFlowSuperClusterECALEndcapWithPreshower'), + applyCrackCorrections = cms.bool(False), + barrelRecHits = cms.InputTag("hltEcalRecHit","EcalRecHitsEE"), + doSatelliteClusterMerge = cms.bool(False), + dropUnseedable = cms.bool(False), + endcapRecHits = cms.InputTag("hltEcalRecHit","EcalRecHitsEB"), + etawidth_SuperClusterBarrel = cms.double(0.04), + etawidth_SuperClusterEndcap = cms.double(0.04), + isOOTCollection = cms.bool(False), + phiwidth_SuperClusterBarrel = cms.double(0.6), + phiwidth_SuperClusterEndcap = cms.double(0.6), + regressionConfig = cms.PSet( + ecalRecHitsEB = cms.InputTag("hltEcalRecHit","EcalRecHitsEB"), + ecalRecHitsEE = cms.InputTag("hltEcalRecHit","EcalRecHitsEE"), + isHLT = cms.bool(True), + regressionKeyEB = cms.string('pfscecal_EBCorrection_online'), + regressionKeyEE = cms.string('pfscecal_EECorrection_online'), + uncertaintyKeyEB = cms.string('pfscecal_EBUncertainty_online'), + uncertaintyKeyEE = cms.string('pfscecal_EEUncertainty_online') + ), + satelliteClusterSeedThreshold = cms.double(50.0), + satelliteMajorityFraction = cms.double(0.5), + seedThresholdIsET = cms.bool(True), + thresh_PFClusterBarrel = cms.double(0.5), + thresh_PFClusterES = cms.double(0.5), + thresh_PFClusterEndcap = cms.double(0.5), + thresh_PFClusterSeedBarrel = cms.double(1.0), + thresh_PFClusterSeedEndcap = cms.double(1.0), + thresh_SCEt = cms.double(4.0), + useDynamicDPhiWindow = cms.bool(True), + useRegression = cms.bool(True), + use_preshower = cms.bool(True), + verbose = cms.untracked.bool(False) +) + + +hltParticleFlowSuperClusterHGCalFromTICL = cms.EDProducer("PFECALSuperClusterProducer", + BeamSpot = cms.InputTag("hltOfflineBeamSpot"), + ClusteringType = cms.string('Mustache'), + ESAssociation = cms.InputTag("hltParticleFlowClusterECALUnseeded"), + EnergyWeight = cms.string('Raw'), + PFBasicClusterCollectionBarrel = cms.string('particleFlowBasicClusterECALBarrel'), + PFBasicClusterCollectionEndcap = cms.string(''), + PFBasicClusterCollectionPreshower = cms.string('particleFlowBasicClusterECALPreshower'), + PFClusters = cms.InputTag("hltParticleFlowClusterHGCalFromTICL"), + PFSuperClusterCollectionBarrel = cms.string('particleFlowSuperClusterECALBarrel'), + PFSuperClusterCollectionEndcap = cms.string(''), + PFSuperClusterCollectionEndcapWithPreshower = cms.string(''), + applyCrackCorrections = cms.bool(False), + barrelRecHits = cms.InputTag("hltEcalRecHit","EcalRecHitsEE"), + doSatelliteClusterMerge = cms.bool(False), + dropUnseedable = cms.bool(True), + endcapRecHits = cms.InputTag("hltEcalRecHit","EcalRecHitsEB"), + etawidth_SuperClusterBarrel = cms.double(0.04), + etawidth_SuperClusterEndcap = cms.double(0.04), + isOOTCollection = cms.bool(False), + mightGet = cms.optional.untracked.vstring, + phiwidth_SuperClusterBarrel = cms.double(0.6), + phiwidth_SuperClusterEndcap = cms.double(0.6), + regressionConfig = cms.PSet( + applySigmaIetaIphiBug = cms.bool(False), + eRecHitThreshold = cms.double(1), + ecalRecHitsEB = cms.InputTag("hltEcalRecHit","EcalRecHitsEB"), + ecalRecHitsEE = cms.InputTag("hltEcalRecHit","EcalRecHitsEE"), + isHLT = cms.bool(False), + regressionKeyEB = cms.string('pfscecal_EBCorrection_offline_v2'), + regressionKeyEE = cms.string('pfscecal_EECorrection_offline_v2'), + uncertaintyKeyEB = cms.string('pfscecal_EBUncertainty_offline_v2'), + uncertaintyKeyEE = cms.string('pfscecal_EEUncertainty_offline_v2'), + vertexCollection = cms.InputTag("") + ), + satelliteClusterSeedThreshold = cms.double(50), + satelliteMajorityFraction = cms.double(0.5), + seedThresholdIsET = cms.bool(True), + thresh_PFClusterBarrel = cms.double(0), + thresh_PFClusterES = cms.double(0), + thresh_PFClusterEndcap = cms.double(0.15), + thresh_PFClusterSeedBarrel = cms.double(1), + thresh_PFClusterSeedEndcap = cms.double(1), + thresh_SCEt = cms.double(4), + useDynamicDPhiWindow = cms.bool(True), + useRegression = cms.bool(False), + use_preshower = cms.bool(False), + verbose = cms.untracked.bool(False) +) + + +hltParticleFlowTimeAssignerECALUnseeded = cms.EDProducer("PFClusterTimeAssigner", + mightGet = cms.optional.untracked.vstring, + src = cms.InputTag("hltParticleFlowClusterECALUncorrectedUnseeded"), + timeResoSrc = cms.InputTag("hltEcalBarrelClusterFastTimer","PerfectResolutionModelResolution"), + timeSrc = cms.InputTag("hltEcalBarrelClusterFastTimer","PerfectResolutionModel") +) + + +hltPixelLayerPairs = cms.EDProducer("SeedingLayersEDProducer", + BPix = cms.PSet( + HitProducer = cms.string('hltSiPixelRecHits'), + TTRHBuilder = cms.string('TTRHBuilderWithoutAngle4PixelTriplets'), + skipClusters = cms.InputTag("hltElePixelHitTripletsClusterRemoverUnseeded") + ), + FPix = cms.PSet( + HitProducer = cms.string('hltSiPixelRecHits'), + TTRHBuilder = cms.string('TTRHBuilderWithoutAngle4PixelTriplets'), + skipClusters = cms.InputTag("hltElePixelHitTripletsClusterRemoverUnseeded") + ), + MTEC = cms.PSet( + + ), + MTIB = cms.PSet( + + ), + MTID = cms.PSet( + + ), + MTOB = cms.PSet( + + ), + TEC = cms.PSet( + + ), + TIB = cms.PSet( + + ), + TID = cms.PSet( + + ), + TOB = cms.PSet( + + ), + layerList = cms.vstring( + 'BPix1+BPix2', + 'BPix1+BPix3', + 'BPix1+BPix4', + 'BPix2+BPix3', + 'BPix2+BPix4', + 'BPix3+BPix4', + 'FPix1_pos+FPix2_pos', + 'FPix1_pos+FPix3_pos', + 'FPix2_pos+FPix3_pos', + 'BPix1+FPix1_pos', + 'BPix1+FPix2_pos', + 'BPix1+FPix3_pos', + 'BPix2+FPix1_pos', + 'BPix2+FPix2_pos', + 'BPix2+FPix3_pos', + 'BPix3+FPix1_pos', + 'BPix3+FPix2_pos', + 'BPix3+FPix3_pos', + 'BPix4+FPix1_pos', + 'BPix4+FPix2_pos', + 'BPix4+FPix3_pos', + 'FPix1_neg+FPix2_neg', + 'FPix1_neg+FPix3_neg', + 'FPix2_neg+FPix3_neg', + 'BPix1+FPix1_neg', + 'BPix1+FPix2_neg', + 'BPix1+FPix3_neg', + 'BPix2+FPix1_neg', + 'BPix2+FPix2_neg', + 'BPix2+FPix3_neg', + 'BPix3+FPix1_neg', + 'BPix3+FPix2_neg', + 'BPix3+FPix3_neg', + 'BPix4+FPix1_neg', + 'BPix4+FPix2_neg', + 'BPix4+FPix3_neg' + ) +) + + +hltPixelLayerTriplets = cms.EDProducer("SeedingLayersEDProducer", + BPix = cms.PSet( + HitProducer = cms.string('hltSiPixelRecHits'), + TTRHBuilder = cms.string('TTRHBuilderWithoutAngle4PixelTriplets') + ), + FPix = cms.PSet( + HitProducer = cms.string('hltSiPixelRecHits'), + TTRHBuilder = cms.string('TTRHBuilderWithoutAngle4PixelTriplets') + ), + MTEC = cms.PSet( + + ), + MTIB = cms.PSet( + + ), + MTID = cms.PSet( + + ), + MTOB = cms.PSet( + + ), + TEC = cms.PSet( + + ), + TIB = cms.PSet( + + ), + TID = cms.PSet( + + ), + TOB = cms.PSet( + + ), + layerList = cms.vstring( + 'BPix1+BPix2+BPix3', + 'BPix2+BPix3+BPix4', + 'BPix1+BPix3+BPix4', + 'BPix1+BPix2+BPix4', + 'BPix2+BPix3+FPix1_pos', + 'BPix2+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix1_pos', + 'BPix1+BPix2+FPix1_neg', + 'BPix2+FPix1_pos+FPix2_pos', + 'BPix2+FPix1_neg+FPix2_neg', + 'BPix1+FPix1_pos+FPix2_pos', + 'BPix1+FPix1_neg+FPix2_neg', + 'FPix1_pos+FPix2_pos+FPix3_pos', + 'FPix1_neg+FPix2_neg+FPix3_neg', + 'BPix1+BPix3+FPix1_pos', + 'BPix1+BPix2+FPix2_pos', + 'BPix1+BPix3+FPix1_neg', + 'BPix1+BPix2+FPix2_neg', + 'BPix1+FPix2_neg+FPix3_neg', + 'BPix1+FPix1_neg+FPix3_neg', + 'BPix1+FPix2_pos+FPix3_pos', + 'BPix1+FPix1_pos+FPix3_pos' + ) +) + + +hltSiPhase2Clusters = cms.EDProducer("Phase2TrackerClusterizer", + maxClusterSize = cms.uint32(0), + maxNumberClusters = cms.uint32(0), + src = cms.InputTag("mix","Tracker") +) + + +hltSiPixelClusters = cms.EDProducer("SiPixelClusterProducer", + ChannelThreshold = cms.int32(1000), + ClusterMode = cms.string('PixelThresholdClusterizer'), + ClusterThreshold = cms.int32(4000), + ClusterThreshold_L1 = cms.int32(4000), + ElectronPerADCGain = cms.double(600.0), + MissCalibrate = cms.bool(False), + Phase2Calibration = cms.bool(True), + Phase2DigiBaseline = cms.double(1200), + Phase2KinkADC = cms.int32(8), + Phase2ReadoutMode = cms.int32(-1), + SeedThreshold = cms.int32(1000), + SplitClusters = cms.bool(False), + VCaltoElectronGain = cms.int32(1), + VCaltoElectronGain_L1 = cms.int32(1), + VCaltoElectronOffset = cms.int32(0), + VCaltoElectronOffset_L1 = cms.int32(0), + maxNumberOfClusters = cms.int32(-1), + mightGet = cms.optional.untracked.vstring, + payloadType = cms.string('Offline'), + src = cms.InputTag("simSiPixelDigis","Pixel") +) + + +hltSiPixelRecHits = cms.EDProducer("SiPixelRecHitConverter", + CPE = cms.string('PixelCPEGeneric'), + VerboseLevel = cms.untracked.int32(0), + src = cms.InputTag("hltSiPixelClusters") +) + + +hltSiStripDigis = cms.EDProducer("SiStripRawToDigiModule", + AppendedBytes = cms.int32(0), + DoAPVEmulatorCheck = cms.bool(False), + DoAllCorruptBufferChecks = cms.bool(False), + ErrorThreshold = cms.uint32(7174), + LegacyUnpacker = cms.bool(False), + MarkModulesOnMissingFeds = cms.bool(True), + ProductLabel = cms.InputTag("rawDataCollector"), + TriggerFedId = cms.int32(0), + UnpackBadChannels = cms.bool(False), + UnpackCommonModeValues = cms.bool(False), + UseDaqRegister = cms.bool(False), + UseFedKey = cms.bool(False) +) + + +hltTiclLayerTileProducer = cms.EDProducer("TICLLayerTileProducer", + detector = cms.string('HGCAL'), + layer_HFNose_clusters = cms.InputTag("hgcalLayerClustersHFNose"), + layer_clusters = cms.InputTag("hltHgcalLayerClusters"), + mightGet = cms.optional.untracked.vstring +) + + +hltTiclMultiClustersFromTrackstersHAD = cms.EDProducer("MultiClustersFromTrackstersProducer", + LayerClusters = cms.InputTag("hltHgcalLayerClusters"), + Tracksters = cms.InputTag("hltTiclTrackstersHAD"), + mightGet = cms.optional.untracked.vstring, + verbosity = cms.untracked.uint32(3) +) + + +hltTiclMultiClustersFromTrackstersMerge = cms.EDProducer("MultiClustersFromTrackstersProducer", + LayerClusters = cms.InputTag("hltHgcalLayerClusters"), + Tracksters = cms.InputTag("hltTiclTrackstersEM"), + mightGet = cms.optional.untracked.vstring, + verbosity = cms.untracked.uint32(3) +) + + +hltTiclSeedingGlobal = cms.EDProducer("TICLSeedingRegionProducer", + algoId = cms.int32(2), + algo_verbosity = cms.int32(0), + cutTk = cms.string('1.48 < abs(eta) < 3.0 && pt > 1. && quality("highPurity") && hitPattern().numberOfLostHits("MISSING_OUTER_HITS") < 5'), + mightGet = cms.optional.untracked.vstring, + propagator = cms.string('PropagatorWithMaterial'), + tracks = cms.InputTag("generalTracks") +) + + +hltTiclSeedingTrk = cms.EDProducer("TICLSeedingRegionProducer", + algoId = cms.int32(1), + algo_verbosity = cms.int32(0), + cutTk = cms.string('1.48 < abs(eta) < 3.0 && pt > 1. && quality("highPurity") && hitPattern().numberOfLostHits("MISSING_OUTER_HITS") < 5'), + mightGet = cms.optional.untracked.vstring, + propagator = cms.string('PropagatorWithMaterial'), + tracks = cms.InputTag("generalTracks","","@skipCurrentProcess") +) + + +hltTiclTrackstersEM = cms.EDProducer("TrackstersProducer", + algo_verbosity = cms.int32(0), + detector = cms.string('HGCAL'), + eid_graph_path = cms.string('RecoHGCal/TICL/data/tf_models/energy_id_v0.pb'), + eid_input_name = cms.string('input'), + eid_min_cluster_energy = cms.double(1), + eid_n_clusters = cms.int32(10), + eid_n_layers = cms.int32(50), + eid_output_name_energy = cms.string('output/regressed_energy'), + eid_output_name_id = cms.string('output/id_probabilities'), + energy_em_over_total_threshold = cms.double(0.9), + etaLimitIncreaseWindow = cms.double(2.1), + filter_on_categories = cms.vint32(0, 1), + filtered_mask = cms.InputTag("hltFilteredLayerClustersEM","EM"), + itername = cms.string('EM'), + layer_clusters = cms.InputTag("hltHgcalLayerClusters"), + layer_clusters_hfnose_tiles = cms.InputTag("ticlLayerTileHFNose"), + layer_clusters_tiles = cms.InputTag("hltTiclLayerTileProducer"), + max_delta_time = cms.double(3), + max_longitudinal_sigmaPCA = cms.double(10), + max_missing_layers_in_trackster = cms.int32(1), + max_out_in_hops = cms.int32(1), + mightGet = cms.optional.untracked.vstring, + min_cos_pointing = cms.double(0.9), + min_cos_theta = cms.double(0.97), + min_layers_per_trackster = cms.int32(10), + oneTracksterPerTrackSeed = cms.bool(False), + original_mask = cms.InputTag("hltHgcalLayerClusters","InitialLayerClustersMask"), + out_in_dfs = cms.bool(True), + pid_threshold = cms.double(0.5), + promoteEmptyRegionToTrackster = cms.bool(False), + root_doublet_max_distance_from_seed_squared = cms.double(9999), + seeding_regions = cms.InputTag("hltTiclSeedingGlobal"), + shower_start_max_layer = cms.int32(5), + skip_layers = cms.int32(2), + time_layerclusters = cms.InputTag("hltHgcalLayerClusters","timeLayerCluster") +) + + +hltTiclTrackstersHAD = cms.EDProducer("TrackstersProducer", + algo_verbosity = cms.int32(0), + detector = cms.string('HGCAL'), + eid_graph_path = cms.string('RecoHGCal/TICL/data/tf_models/energy_id_v0.pb'), + eid_input_name = cms.string('input'), + eid_min_cluster_energy = cms.double(1), + eid_n_clusters = cms.int32(10), + eid_n_layers = cms.int32(50), + eid_output_name_energy = cms.string('output/regressed_energy'), + eid_output_name_id = cms.string('output/id_probabilities'), + energy_em_over_total_threshold = cms.double(-1), + etaLimitIncreaseWindow = cms.double(2.1), + filter_on_categories = cms.vint32(0), + filtered_mask = cms.InputTag("hltFilteredLayerClustersHAD","HAD"), + itername = cms.string('HADRONIC'), + layer_clusters = cms.InputTag("hltHgcalLayerClusters"), + layer_clusters_hfnose_tiles = cms.InputTag("ticlLayerTileHFNose"), + layer_clusters_tiles = cms.InputTag("hltTiclLayerTileProducer"), + max_delta_time = cms.double(-1), + max_longitudinal_sigmaPCA = cms.double(9999), + max_missing_layers_in_trackster = cms.int32(9999), + max_out_in_hops = cms.int32(10), + mightGet = cms.optional.untracked.vstring, + min_cos_pointing = cms.double(0.819), + min_cos_theta = cms.double(0.866), + min_layers_per_trackster = cms.int32(12), + oneTracksterPerTrackSeed = cms.bool(False), + original_mask = cms.InputTag("hltTiclTrackstersEM"), + out_in_dfs = cms.bool(True), + pid_threshold = cms.double(0), + promoteEmptyRegionToTrackster = cms.bool(False), + root_doublet_max_distance_from_seed_squared = cms.double(9999), + seeding_regions = cms.InputTag("hltTiclSeedingGlobal"), + shower_start_max_layer = cms.int32(9999), + skip_layers = cms.int32(1), + time_layerclusters = cms.InputTag("hltHgcalLayerClusters","timeLayerCluster") +) + + +hltTiclTrackstersMerge = cms.EDProducer("TrackstersMergeProducer", + cosangle_align = cms.double(0.9945), + debug = cms.bool(True), + e_over_h_threshold = cms.double(1), + eid_graph_path = cms.string('RecoHGCal/TICL/data/tf_models/energy_id_v0.pb'), + eid_input_name = cms.string('input'), + eid_min_cluster_energy = cms.double(1), + eid_n_clusters = cms.int32(10), + eid_n_layers = cms.int32(50), + eid_output_name_energy = cms.string('output/regressed_energy'), + eid_output_name_id = cms.string('output/id_probabilities'), + eta_bin_window = cms.int32(1), + halo_max_distance2 = cms.double(4), + layer_clusters = cms.InputTag("hltHgcalLayerClusters"), + mightGet = cms.optional.untracked.vstring, + optimiseAcrossTracksters = cms.bool(True), + phi_bin_window = cms.int32(1), + pt_neutral_threshold = cms.double(2), + pt_sigma_high = cms.double(2), + pt_sigma_low = cms.double(2), + resol_calo_offset_em = cms.double(1.5), + resol_calo_offset_had = cms.double(1.5), + resol_calo_scale_em = cms.double(0.15), + resol_calo_scale_had = cms.double(0.15), + seedingTrk = cms.InputTag("hltTiclSeedingTrk"), + track_max_eta = cms.double(3), + track_max_missing_outerhits = cms.int32(5), + track_min_eta = cms.double(1.48), + track_min_pt = cms.double(1), + tracks = cms.InputTag("generalTracks","","@skipCurrentProcess"), + trackstersem = cms.InputTag("hltTiclTrackstersEM"), + trackstershad = cms.InputTag("hltTiclTrackstersHAD"), + tracksterstrk = cms.InputTag(""), + tracksterstrkem = cms.InputTag("") +) + + +hltTiclTrackstersTrk = cms.EDProducer("TrackstersProducer", + algo_verbosity = cms.int32(2), + detector = cms.string('HGCAL'), + eid_graph_path = cms.string('RecoHGCal/TICL/data/tf_models/energy_id_v0.pb'), + eid_input_name = cms.string('input'), + eid_min_cluster_energy = cms.double(1), + eid_n_clusters = cms.int32(10), + eid_n_layers = cms.int32(50), + eid_output_name_energy = cms.string('output/regressed_energy'), + eid_output_name_id = cms.string('output/id_probabilities'), + energy_em_over_total_threshold = cms.double(-1), + etaLimitIncreaseWindow = cms.double(2.1), + filter_on_categories = cms.vint32(2, 4), + filtered_mask = cms.InputTag("hltFilteredLayerClustersTrk","Trk"), + itername = cms.string('TRK'), + layer_clusters = cms.InputTag("hltHgcalLayerClusters"), + layer_clusters_hfnose_tiles = cms.InputTag("ticlLayerTileHFNose"), + layer_clusters_tiles = cms.InputTag("hltTiclLayerTileProducer"), + max_delta_time = cms.double(-1.0), + max_longitudinal_sigmaPCA = cms.double(9999), + max_missing_layers_in_trackster = cms.int32(9999), + max_out_in_hops = cms.int32(10), + mightGet = cms.optional.untracked.vstring, + min_cos_pointing = cms.double(0.798), + min_cos_theta = cms.double(0.866), + min_layers_per_trackster = cms.int32(10), + oneTracksterPerTrackSeed = cms.bool(True), + original_mask = cms.InputTag("hltTiclTrackstersEM"), + out_in_dfs = cms.bool(True), + pid_threshold = cms.double(0), + promoteEmptyRegionToTrackster = cms.bool(True), + root_doublet_max_distance_from_seed_squared = cms.double(9999), + seeding_regions = cms.InputTag("hltTiclSeedingTrk"), + shower_start_max_layer = cms.int32(9999), + skip_layers = cms.int32(3), + time_layerclusters = cms.InputTag("hltHgcalLayerClusters","timeLayerCluster") +) + + +hltTiclTrackstersTrkEM = cms.EDProducer("TrackstersProducer", + algo_verbosity = cms.int32(0), + detector = cms.string('HGCAL'), + eid_graph_path = cms.string('RecoHGCal/TICL/data/tf_models/energy_id_v0.pb'), + eid_input_name = cms.string('input'), + eid_min_cluster_energy = cms.double(1), + eid_n_clusters = cms.int32(10), + eid_n_layers = cms.int32(50), + eid_output_name_energy = cms.string('output/regressed_energy'), + eid_output_name_id = cms.string('output/id_probabilities'), + energy_em_over_total_threshold = cms.double(0.9), + etaLimitIncreaseWindow = cms.double(2.1), + filter_on_categories = cms.vint32(0, 1), + filtered_mask = cms.InputTag("hltFilteredLayerClustersTrkEM","TrkEM"), + itername = cms.string('TrkEM'), + layer_clusters = cms.InputTag("hltHgcalLayerClusters"), + layer_clusters_hfnose_tiles = cms.InputTag("ticlLayerTileHFNose"), + layer_clusters_tiles = cms.InputTag("hltTiclLayerTileProducer"), + max_delta_time = cms.double(3), + max_longitudinal_sigmaPCA = cms.double(10), + max_missing_layers_in_trackster = cms.int32(2), + max_out_in_hops = cms.int32(1), + mightGet = cms.optional.untracked.vstring, + min_cos_pointing = cms.double(0.94), + min_cos_theta = cms.double(0.97), + min_layers_per_trackster = cms.int32(10), + oneTracksterPerTrackSeed = cms.bool(False), + original_mask = cms.InputTag("hltHgcalLayerClusters","InitialLayerClustersMask"), + out_in_dfs = cms.bool(True), + pid_threshold = cms.double(0.5), + promoteEmptyRegionToTrackster = cms.bool(False), + root_doublet_max_distance_from_seed_squared = cms.double(0.0025), + seeding_regions = cms.InputTag("hltTiclSeedingTrk"), + shower_start_max_layer = cms.int32(5), + skip_layers = cms.int32(2), + time_layerclusters = cms.InputTag("hltHgcalLayerClusters","timeLayerCluster") +) + + +hltTowerMakerForAll = cms.EDProducer("CaloTowersCreator", + AllowMissingInputs = cms.bool(False), + EBGrid = cms.vdouble(-1.0, 1.0, 10.0, 100.0, 1000.0), + EBSumThreshold = cms.double(0.2), + EBThreshold = cms.double(0.07), + EBWeight = cms.double(1.0), + EBWeights = cms.vdouble(1.0, 1.0, 1.0, 1.0, 1.0), + EEGrid = cms.vdouble(-1.0, 1.0, 10.0, 100.0, 1000.0), + EESumThreshold = cms.double(0.45), + EEThreshold = cms.double(0.3), + EEWeight = cms.double(1.0), + EEWeights = cms.vdouble(1.0, 1.0, 1.0, 1.0, 1.0), + EcalRecHitSeveritiesToBeExcluded = cms.vstring( + 'kTime', + 'kWeird', + 'kBad' + ), + EcalSeveritiesToBeUsedInBadTowers = cms.vstring(), + EcutTower = cms.double(-1000.0), + HBGrid = cms.vdouble(-1.0, 1.0, 10.0, 100.0, 1000.0), + HBThreshold = cms.double(0.3), + HBThreshold1 = cms.double(0.1), + HBThreshold2 = cms.double(0.2), + HBWeight = cms.double(1.0), + HBWeights = cms.vdouble(1.0, 1.0, 1.0, 1.0, 1.0), + HEDGrid = cms.vdouble(-1.0, 1.0, 10.0, 100.0, 1000.0), + HEDThreshold = cms.double(0.2), + HEDThreshold1 = cms.double(0.1), + HEDWeight = cms.double(1.0), + HEDWeights = cms.vdouble(1.0, 1.0, 1.0, 1.0, 1.0), + HESGrid = cms.vdouble(-1.0, 1.0, 10.0, 100.0, 1000.0), + HESThreshold = cms.double(0.2), + HESThreshold1 = cms.double(0.1), + HESWeight = cms.double(1.0), + HESWeights = cms.vdouble(1.0, 1.0, 1.0, 1.0, 1.0), + HF1Grid = cms.vdouble(-1.0, 1.0, 10.0, 100.0, 1000.0), + HF1Threshold = cms.double(0.5), + HF1Weight = cms.double(1.0), + HF1Weights = cms.vdouble(1.0, 1.0, 1.0, 1.0, 1.0), + HF2Grid = cms.vdouble(-1.0, 1.0, 10.0, 100.0, 1000.0), + HF2Threshold = cms.double(0.85), + HF2Weight = cms.double(1.0), + HF2Weights = cms.vdouble(1.0, 1.0, 1.0, 1.0, 1.0), + HOGrid = cms.vdouble(-1.0, 1.0, 10.0, 100.0, 1000.0), + HOThreshold0 = cms.double(1.1), + HOThresholdMinus1 = cms.double(3.5), + HOThresholdMinus2 = cms.double(3.5), + HOThresholdPlus1 = cms.double(3.5), + HOThresholdPlus2 = cms.double(3.5), + HOWeight = cms.double(1.0), + HOWeights = cms.vdouble(1.0, 1.0, 1.0, 1.0, 1.0), + HcalAcceptSeverityLevel = cms.uint32(9), + HcalAcceptSeverityLevelForRejectedHit = cms.uint32(9999), + HcalPhase = cms.int32(1), + HcalThreshold = cms.double(-1000.0), + MomConstrMethod = cms.int32(1), + MomEBDepth = cms.double(0.3), + MomEEDepth = cms.double(0.0), + MomHBDepth = cms.double(0.2), + MomHEDepth = cms.double(0.4), + UseEcalRecoveredHits = cms.bool(False), + UseEtEBTreshold = cms.bool(False), + UseEtEETreshold = cms.bool(False), + UseHO = cms.bool(False), + UseHcalRecoveredHits = cms.bool(True), + UseRejectedHitsOnly = cms.bool(False), + UseRejectedRecoveredEcalHits = cms.bool(False), + UseRejectedRecoveredHcalHits = cms.bool(True), + UseSymEBTreshold = cms.bool(True), + UseSymEETreshold = cms.bool(True), + ecalInputs = cms.VInputTag("hltEcalRecHit:EcalRecHitsEB", "hltEcalRecHit:EcalRecHitsEE"), + hbheInput = cms.InputTag("hltHbhereco"), + hfInput = cms.InputTag("hltHfreco"), + hoInput = cms.InputTag("hltHoreco"), + missingHcalRescaleFactorForEcal = cms.double(0) +) + + +hltEG5EtUnseededFilter = cms.EDFilter("HLTEgammaEtFilter", + etcutEB = cms.double(5.0), + etcutEE = cms.double(5.0), + inputTag = cms.InputTag("hltEgammaCandidatesWrapperUnseeded"), + l1EGCand = cms.InputTag("hltEgammaCandidatesUnseeded"), + ncandcut = cms.int32(1), + saveTags = cms.bool(True) +) + + +hltEgammaCandidatesWrapperUnseeded = cms.EDFilter("HLTEgammaTriggerFilterObjectWrapper", + candIsolatedTag = cms.InputTag("hltEgammaCandidatesUnseeded"), + candNonIsolatedTag = cms.InputTag(""), + doIsolated = cms.bool(True), + saveTags = cms.bool(True) +) + + +HLTPFClusteringForEgammaUnseeded = cms.Sequence(hltParticleFlowRecHitECALUnseeded+hltParticleFlowRecHitPSUnseeded+hltParticleFlowClusterPSUnseeded+hltParticleFlowClusterECALUncorrectedUnseeded+hltEcalBarrelClusterFastTimer+hltParticleFlowTimeAssignerECALUnseeded+hltParticleFlowClusterECALUnseeded+hltParticleFlowSuperClusterECALUnseeded) + + +HLTDoLocalPixelSequence = cms.Sequence(hltSiPixelClusters+hltSiPixelRecHits) + + +HLTDoLocalStripSequence = cms.Sequence(hltSiStripDigis+hltSiPhase2Clusters) + + +HLTDoLocalHcalSequence = cms.Sequence(hltHcalDigis+hltHbhereco+hltHfprereco+hltHfreco+hltHoreco) + + +HLTGsfElectronUnseededSequence = cms.Sequence(hltEgammaCkfTrackCandidatesForGSFUnseeded+hltEgammaGsfTracksUnseeded+hltEgammaGsfElectronsUnseeded+hltEgammaGsfTrackVarsUnseeded+hltEgammaBestGsfTrackVarsUnseeded) + + +HLTElePixelMatchUnseededSequence = cms.Sequence(HLTDoLocalPixelSequence+HLTDoLocalStripSequence+hltPixelLayerTriplets+hltEgammaHoverEUnseeded+hltEgammaSuperClustersToPixelMatchUnseeded+hltEleSeedsTrackingRegionsUnseeded+hltElePixelHitDoubletsForTripletsUnseeded+hltElePixelHitTripletsUnseeded+hltElePixelSeedsTripletsUnseeded+hltElePixelHitTripletsClusterRemoverUnseeded+hltPixelLayerPairs+hltElePixelHitDoubletsUnseeded+hltElePixelSeedsDoubletsUnseeded+hltElePixelSeedsCombinedUnseeded+hltMeasurementTrackerEvent+hltEgammaElectronPixelSeedsUnseeded+hltEgammaPixelMatchVarsUnseeded) + + +HLTDoFullUnpackingEgammaEcalSequence = cms.Sequence(hltBunchSpacingProducer+hltEcalDigis+hltEcalPreshowerDigis+hltEcalUncalibRecHit+hltEcalDetIdToBeRecovered+hltEcalRecHit+hltEcalPreshowerRecHit+hltEcalDetailedTimeRecHit) + + +HLTHgcalTiclPFClusteringForEgammaUnseeded = cms.Sequence(hltOfflineBeamSpot+hltHgcalDigis+hltHGCalUncalibRecHit+hltHGCalRecHit+hltParticleFlowRecHitHGC+hltHgcalLayerClusters+hltTiclLayerTileProducer+hltFilteredLayerClustersEM+hltTiclSeedingGlobal+hltTiclTrackstersEM+hltFilteredLayerClustersHAD+hltTiclTrackstersHAD+hltTiclMultiClustersFromTrackstersMerge+hltParticleFlowClusterHGCalFromTICL+hltParticleFlowSuperClusterHGCalFromTICL+hltTiclMultiClustersFromTrackstersHAD+hltParticleFlowClusterHGCalFromTICLHAD) + + +HLTHgcalTiclPFClusteringForEgamma = cms.Sequence(hltOfflineBeamSpot+hltHgcalDigis+hltHGCalUncalibRecHit+hltHGCalRecHit+hltParticleFlowRecHitHGC+hltHgcalLayerClusters+hltTiclLayerTileProducer+hltFilteredLayerClustersEM+hltTiclSeedingGlobal+hltTiclTrackstersEM+hltFilteredLayerClustersHAD+hltTiclTrackstersHAD+hltTiclMultiClustersFromTrackstersMerge+hltParticleFlowClusterHGCalFromTICL+hltParticleFlowSuperClusterHGCalFromTICL+hltTiclMultiClustersFromTrackstersHAD+hltParticleFlowClusterHGCalFromTICLHAD) + + +HLTFastJetForEgamma = cms.Sequence(hltTowerMakerForAll+hltTowerMakerForAll+hltTowerMakerForAll+hltFixedGridRhoFastjetAllCaloForMuons) + +hltEgammaHGCALIDVarsUnseeded = cms.EDProducer("EgammaHLTHGCalIDVarProducer", + hgcalRecHits = cms.InputTag("particleFlowRecHitHGC"), + layerClusters = cms.InputTag("hgcalLayerClusters"), + rCylinder = cms.double(2.8), + hOverECone = cms.double(0.15), + recoEcalCandidateProducer = cms.InputTag("hltEgammaCandidatesUnseeded") +) +hltEgammaHGCALIsolUnseeded = cms.EDProducer("EgammaHLTHGCalLayerClusterIsolationProducer", + layerClusterProducer = cms.InputTag("hgcalLayerClusters"), + recoEcalCandidateProducer = cms.InputTag("hltEgammaCandidatesUnseeded"), + drMax = cms.double(0.3), + drVetoEM = cms.double(0.15), + drVetoHad = cms.double(0.15), + minEnergyEM = cms.double(0.), + minEnergyHad = cms.double(0.), + minEtEM = cms.double(0.), + minEtHad = cms.double(0.), + useEt = cms.bool(True), + doRhoCorrection = cms.bool(False), +) + + +HLTEgPhaseIITestSequence = cms.Sequence(hltBunchSpacingProducer+hltEcalDigis+hltEcalPreshowerDigis+hltEcalUncalibRecHit+hltEcalDetIdToBeRecovered+hltEcalRecHit+hltEcalPreshowerRecHit+hltEcalDetailedTimeRecHit+HLTPFClusteringForEgammaUnseeded+hltOfflineBeamSpot+hltHgcalDigis+hltHGCalUncalibRecHit+hltHGCalRecHit+hltParticleFlowRecHitHGC+hltHgcalLayerClusters+hltTiclLayerTileProducer+hltFilteredLayerClustersEM+hltTiclSeedingGlobal+hltTiclTrackstersEM+hltFilteredLayerClustersHAD+hltTiclTrackstersHAD+hltTiclMultiClustersFromTrackstersMerge+hltParticleFlowClusterHGCalFromTICL+hltParticleFlowSuperClusterHGCalFromTICL+hltTiclMultiClustersFromTrackstersHAD+hltParticleFlowClusterHGCalFromTICLHAD+hltEgammaCandidatesUnseeded+hltEgammaCandidatesWrapperUnseeded+hltEG5EtUnseededFilter+HLTDoLocalHcalSequence+HLTFastJetForEgamma+hltEgammaHoverEUnseeded+hltEgammaHGCALIDVarsUnseeded+hltEgammaHGCALIsolUnseeded+hltSiPixelClusters+hltSiPixelRecHits+hltSiStripDigis+hltSiPhase2Clusters+hltPixelLayerTriplets+hltEgammaHoverEUnseeded+hltEgammaSuperClustersToPixelMatchUnseeded+hltEleSeedsTrackingRegionsUnseeded+hltElePixelHitDoubletsForTripletsUnseeded+hltElePixelHitTripletsUnseeded+hltElePixelSeedsTripletsUnseeded+hltElePixelHitTripletsClusterRemoverUnseeded+hltPixelLayerPairs+hltElePixelHitDoubletsUnseeded+hltElePixelSeedsDoubletsUnseeded+hltElePixelSeedsCombinedUnseeded+hltMeasurementTrackerEvent+hltEgammaElectronPixelSeedsUnseeded+hltEgammaPixelMatchVarsUnseeded+HLTGsfElectronUnseededSequence) + + +HLTPSetTrajectoryBuilderForGsfElectrons = cms.PSet( + ComponentType = cms.string('CkfTrajectoryBuilder'), + MeasurementTrackerName = cms.string('hltESPMeasurementTracker'), + TTRHBuilder = cms.string('hltESPTTRHBWithTrackAngle'), + alwaysUseInvalidHits = cms.bool(True), + estimator = cms.string('hltESPChi2ChargeMeasurementEstimator2000'), + intermediateCleaning = cms.bool(False), + lostHitPenalty = cms.double(90.0), + maxCand = cms.int32(5), + propagatorAlong = cms.string('hltESPFwdElectronPropagator'), + propagatorOpposite = cms.string('hltESPBwdElectronPropagator'), + seedAs5DHit = cms.bool(False), + trajectoryFilter = cms.PSet( + refToPSet_ = cms.string('HLTPSetTrajectoryFilterForElectrons') + ), + updator = cms.string('hltESPKFUpdator') +) + + + +HLTPSetTrajectoryFilterForElectrons = cms.PSet( + ComponentType = cms.string('CkfBaseTrajectoryFilter'), + chargeSignificance = cms.double(-1.0), + constantValueForLostHitsFractionFilter = cms.double(1.0), + extraNumberOfHitsBeforeTheFirstLoop = cms.int32(4), + maxCCCLostHits = cms.int32(9999), + maxConsecLostHits = cms.int32(1), + maxLostHits = cms.int32(1), + maxLostHitsFraction = cms.double(999.0), + maxNumberOfHits = cms.int32(-1), + minGoodStripCharge = cms.PSet( + refToPSet_ = cms.string('HLTSiStripClusterChargeCutNone') + ), + minHitsMinPt = cms.int32(-1), + minNumberOfHitsForLoopers = cms.int32(13), + minNumberOfHitsPerLoop = cms.int32(4), + minPt = cms.double(2.0), + minimumNumberOfHits = cms.int32(5), + nSigmaMinPt = cms.double(5.0), + pixelSeedExtension = cms.bool(False), + seedExtension = cms.int32(0), + seedPairPenalty = cms.int32(0), + strictSeedExtension = cms.bool(False) +) + +HLTSiStripClusterChargeCutNone = cms.PSet( + value = cms.double(-1.0) +) +hltESPTrajectoryCleanerBySharedHits = cms.ESProducer("TrajectoryCleanerESProducer", + ComponentName = cms.string('hltESPTrajectoryCleanerBySharedHits'), + ComponentType = cms.string('TrajectoryCleanerBySharedHits'), + MissingHitPenalty = cms.double(0.0), + ValidHitBonus = cms.double(100.0), + allowSharedFirstHit = cms.bool(False), + fractionShared = cms.double(0.5) +) +hltESPKFUpdator = cms.ESProducer("KFUpdatorESProducer", + ComponentName = cms.string('hltESPKFUpdator') +) +hltESPBwdElectronPropagator = cms.ESProducer("PropagatorWithMaterialESProducer", + ComponentName = cms.string('hltESPBwdElectronPropagator'), + Mass = cms.double(0.000511), + MaxDPhi = cms.double(1.6), + PropagationDirection = cms.string('oppositeToMomentum'), + SimpleMagneticField = cms.string(''), + ptMin = cms.double(-1.0), + useRungeKutta = cms.bool(False) +) + +hltESPFwdElectronPropagator = cms.ESProducer("PropagatorWithMaterialESProducer", + ComponentName = cms.string('hltESPFwdElectronPropagator'), + Mass = cms.double(0.000511), + MaxDPhi = cms.double(1.6), + PropagationDirection = cms.string('alongMomentum'), + SimpleMagneticField = cms.string(''), + ptMin = cms.double(-1.0), + useRungeKutta = cms.bool(False) +) + +hltESPGsfTrajectoryFitter = cms.ESProducer("GsfTrajectoryFitterESProducer", + ComponentName = cms.string('hltESPGsfTrajectoryFitter'), + GeometricalPropagator = cms.string('hltESPAnalyticalPropagator'), + MaterialEffectsUpdator = cms.string('hltESPElectronMaterialEffects'), + Merger = cms.string('hltESPCloseComponentsMerger5D'), + RecoGeometry = cms.string('hltESPGlobalDetLayerGeometry') +) + +hltESPGsfTrajectorySmoother = cms.ESProducer("GsfTrajectorySmootherESProducer", + ComponentName = cms.string('hltESPGsfTrajectorySmoother'), + ErrorRescaling = cms.double(100.0), + GeometricalPropagator = cms.string('hltESPBwdAnalyticalPropagator'), + MaterialEffectsUpdator = cms.string('hltESPElectronMaterialEffects'), + Merger = cms.string('hltESPCloseComponentsMerger5D'), + RecoGeometry = cms.string('hltESPGlobalDetLayerGeometry') +) + +hltESPElectronMaterialEffects = cms.ESProducer("GsfMaterialEffectsESProducer", + BetheHeitlerCorrection = cms.int32(2), + BetheHeitlerParametrization = cms.string('BetheHeitler_cdfmom_nC6_O5.par'), + ComponentName = cms.string('hltESPElectronMaterialEffects'), + EnergyLossUpdator = cms.string('GsfBetheHeitlerUpdator'), + Mass = cms.double(0.000511), + MultipleScatteringUpdator = cms.string('MultipleScatteringUpdator') +) + +hltESPChi2ChargeMeasurementEstimator2000 = cms.ESProducer("Chi2ChargeMeasurementEstimatorESProducer", + ComponentName = cms.string('hltESPChi2ChargeMeasurementEstimator2000'), + MaxChi2 = cms.double(2000.0), + MaxDisplacement = cms.double(100.0), + MaxSagitta = cms.double(-1.0), + MinPtForHitRecoveryInGluedDet = cms.double(1000000.0), + MinimalTolerance = cms.double(10.0), + appendToDataLabel = cms.string(''), + clusterChargeCut = cms.PSet( + refToPSet_ = cms.string('HLTSiStripClusterChargeCutNone') + ), + nSigma = cms.double(3.0), + pTChargeCutThreshold = cms.double(-1.0) +) + +hltTTRBWR = cms.ESProducer("TkTransientTrackingRecHitBuilderESProducer", + ComponentName = cms.string('hltESPTTRHBWithTrackAngle'), + ComputeCoarseLocalPositionFromDisk = cms.bool(False), + Matcher = cms.string('StandardMatcher'), + Phase2StripCPE = cms.string('Phase2StripCPE'), + PixelCPE = cms.string('PixelCPEGeneric'), + StripCPE = cms.string('StripCPEfromTrackAngle') +) diff --git a/RecoEgamma/EgammaHLTProducers/python/hltEgammaHLTExtra_cfi.py b/RecoEgamma/EgammaHLTProducers/python/hltEgammaHLTExtra_cfi.py new file mode 100644 index 0000000000000..753558088b2da --- /dev/null +++ b/RecoEgamma/EgammaHLTProducers/python/hltEgammaHLTExtra_cfi.py @@ -0,0 +1,49 @@ +import FWCore.ParameterSet.Config as cms + +hltEgammaHLTExtra = cms.EDProducer("EgammaHLTExtraProducer", + egCands = cms.VPSet( + cms.PSet( + pixelSeeds = cms.InputTag("hltEgammaElectronPixelSeeds"), + ecalCands = cms.InputTag("hltEgammaCandidates"), + gsfTracks = cms.InputTag("hltEgammaGsfTracks"), + label = cms.string('') + ), + cms.PSet( + pixelSeeds = cms.InputTag("hltEgammaElectronPixelSeedsUnseeded"), + ecalCands = cms.InputTag("hltEgammaCandidatesUnseeded"), + gsfTracks = cms.InputTag("hltEgammaGsfTracksUnseeded"), + label = cms.string('Unseeded') + ), + ), + ecal = cms.VPSet( + cms.PSet( + src= cms.InputTag("hltEcalRecHit","EcalRecHitsEB"), + label = cms.string("EcalRecHitsEB") + ), + cms.PSet( + src= cms.InputTag("hltEcalRecHit","EcalRecHitsEE"), + label = cms.string("EcalRecHitsEE") + ) + ), + pfClusIso = cms.VPSet( + cms.PSet( + src = cms.InputTag("hltParticleFlowClusterECALL1Seeded"), + label = cms.string("Ecal") + ), + cms.PSet( + src = cms.InputTag("hltParticleFlowClusterECALUnseeded"), + label = cms.string("EcalUnseeded") + ), + cms.PSet( + src = cms.InputTag("hltParticleFlowClusterHCAL"), + label = cms.string("Hcal") + ), + ), + hcal = cms.VPSet(cms.PSet(src=cms.InputTag("hltHbhereco"),label=cms.string(""))), + trks = cms.VPSet(cms.PSet(src=cms.InputTag("hltMergedTracks"),label=cms.string(""))), + minPtToSaveHits = cms.double(8.), + saveHitsPlusHalfPi = cms.bool(True), + saveHitsPlusPi = cms.bool(False) + +) + diff --git a/RecoEgamma/EgammaIsolationAlgos/interface/EgammaL1TkIsolation.h b/RecoEgamma/EgammaIsolationAlgos/interface/EgammaL1TkIsolation.h new file mode 100644 index 0000000000000..4ab686e5b9d2f --- /dev/null +++ b/RecoEgamma/EgammaIsolationAlgos/interface/EgammaL1TkIsolation.h @@ -0,0 +1,61 @@ +#ifndef RecoEgamma_EgammaIsolationAlgos_EgammaL1TkIsolation_h +#define RecoEgamma_EgammaIsolationAlgos_EgammaL1TkIsolation_h + +#include "DataFormats/L1TrackTrigger/interface/L1Track.h" +#include "DataFormats/TrackReco/interface/TrackBase.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +//author S. Harper (RAL/CERN) +//based on the work of Swagata Mukherjee and Giulia Sorrentino + +class EgammaL1TkIsolation { +public: + explicit EgammaL1TkIsolation(const edm::ParameterSet& para); + + static void fillPSetDescription(edm::ParameterSetDescription& desc); + static edm::ParameterSetDescription makePSetDescription() { + edm::ParameterSetDescription desc; + fillPSetDescription(desc); + return desc; + } + + std::pair calIsol(const reco::TrackBase& trk, const L1TrackCollection& l1Tks) const; + + std::pair calIsol(const double objEta, + const double objPhi, + const double objZ, + const L1TrackCollection& l1Tks) const; + + //little helper function for the two calIsol functions for it to directly return the pt + template + double calIsolPt(Args&&... args) const { + return calIsol(std::forward(args)...).second; + } + +private: + struct TrkCuts { + float minPt; + float minDR2; + float maxDR2; + float minDEta; + float maxDZ; + explicit TrkCuts(const edm::ParameterSet& para); + static edm::ParameterSetDescription makePSetDescription(); + }; + + size_t etaBinNr(double eta) const; + static bool passTrkSel(const L1Track& trk, + const double trkPt, + const TrkCuts& cuts, + const double objEta, + const double objPhi, + const double objZ); + + bool useAbsEta_; + std::vector etaBoundaries_; + std::vector trkCuts_; +}; + +#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/BuildFile.xml b/RecoEgamma/EgammaIsolationAlgos/plugins/BuildFile.xml index cec46e7807cd8..7216793702c17 100644 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/BuildFile.xml +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/BuildFile.xml @@ -7,14 +7,11 @@ - - - @@ -27,3 +24,7 @@ + + + + diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalExtractor.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalExtractor.cc deleted file mode 100644 index b4aa267590db2..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalExtractor.cc +++ /dev/null @@ -1,102 +0,0 @@ -//***************************************************************************** -// File: EgammaEcalExtractor.cc -// ---------------------------------------------------------------------------- -// OrigAuth: Gilles De Lentdecker -// Institute: IIHE-ULB -//============================================================================= -//***************************************************************************** - -//C++ includes -#include -#include - -//ROOT includes -#include - -//CMSSW includes -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalExtractor.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" - -using namespace egammaisolation; -using namespace reco::isodeposit; - -EgammaEcalExtractor::~EgammaEcalExtractor() {} - -reco::IsoDeposit EgammaEcalExtractor::deposit(const edm::Event &ev, - const edm::EventSetup &evSetup, - const reco::Candidate &candidate) const { - edm::Handle superClusterCollectionH; - edm::Handle basicClusterCollectionH; - ev.getByToken(superClusterToken_, superClusterCollectionH); - ev.getByToken(basicClusterToken_, basicClusterCollectionH); - - reco::SuperClusterRef sc = candidate.get(); - math::XYZPoint position = sc->position(); - // match the photon hybrid supercluster with those with Algo==0 (island) - double delta1 = 1000.; - double deltacur = 1000.; - const reco::SuperCluster *matchedsupercluster = nullptr; - bool MATCHEDSC = false; - - Direction candDir(position.eta(), position.phi()); - reco::IsoDeposit deposit(candDir); - deposit.setVeto(reco::IsoDeposit::Veto(candDir, 0)); // no veto is needed for this deposit - deposit.addCandEnergy(sc->energy() * sin(2 * atan(exp(-sc->eta())))); - - for (reco::SuperClusterCollection::const_iterator scItr = superClusterCollectionH->begin(); - scItr != superClusterCollectionH->end(); - ++scItr) { - const reco::SuperCluster *supercluster = &(*scItr); - - if (supercluster->seed()->algo() == 0) { - deltacur = ROOT::Math::VectorUtil::DeltaR(supercluster->position(), position); - if (deltacur < delta1) { - delta1 = deltacur; - matchedsupercluster = supercluster; - MATCHEDSC = true; - } - } - } - - const reco::BasicCluster *cluster = nullptr; - - //loop over basic clusters - for (reco::BasicClusterCollection::const_iterator cItr = basicClusterCollectionH->begin(); - cItr != basicClusterCollectionH->end(); - ++cItr) { - cluster = &(*cItr); - // double ebc_bcchi2 = cluster->chi2(); - int ebc_bcalgo = cluster->algo(); - double ebc_bce = cluster->energy(); - double ebc_bceta = cluster->eta(); - double ebc_bcet = ebc_bce * sin(2 * atan(exp(ebc_bceta))); - double newDelta = 0.; - - if (ebc_bcet > etMin_ && ebc_bcalgo == 0) { - // if (ebc_bcchi2 < 30.) { - - if (MATCHEDSC || !scmatch_) { //skip selection if user wants to fill all superclusters - bool inSuperCluster = false; - - if (scmatch_) { // only try the matching if needed - reco::CaloCluster_iterator theEclust = matchedsupercluster->clustersBegin(); - // loop over the basic clusters of the matched supercluster - for (; theEclust != matchedsupercluster->clustersEnd(); ++theEclust) { - if ((**theEclust) == (*cluster)) - inSuperCluster = true; - } - } - if (!inSuperCluster || !scmatch_) { //skip selection if user wants to fill all superclusters - newDelta = ROOT::Math::VectorUtil::DeltaR(cluster->position(), position); - if (newDelta < conesize_) { - deposit.addDeposit(Direction(cluster->eta(), cluster->phi()), ebc_bcet); - } - } - } - // } // matches ebc_bcchi2 - } // matches ebc_bcet && ebc_bcalgo - } - - // std::cout << "Will return ecalIsol = " << ecalIsol << std::endl; - return deposit; -} diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalExtractor.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalExtractor.h deleted file mode 100644 index 0c25feed9eda1..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalExtractor.h +++ /dev/null @@ -1,79 +0,0 @@ -#ifndef EgammaIsolationAlgos_EgammaEcalIsolation_h -#define EgammaIsolationAlgos_EgammaEcalIsolation_h - -//***************************************************************************** -// File: EgammaEcalExtractor.h -// ---------------------------------------------------------------------------- -// Type: Class implementation header -// Package: EgammaIsolationAlgos/EgammaIsolationAlgos -// Class: EgammaEcalExtractor -// Language: Standard C++ -// Project: CMS -// OrigAuth: Gilles De Lentdecker -// Institute: IIHE-ULB -//============================================================================= -//***************************************************************************** - -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaReco/interface/BasicCluster.h" -#include "DataFormats/EgammaReco/interface/BasicClusterFwd.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "DataFormats/Candidate/interface/Candidate.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" - -#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractor.h" -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" - -namespace egammaisolation { - - class EgammaEcalExtractor : public reco::isodeposit::IsoDepositExtractor { - public: - EgammaEcalExtractor(const edm::ParameterSet& par, edm::ConsumesCollector&& iC) : EgammaEcalExtractor(par, iC) {} - EgammaEcalExtractor(const edm::ParameterSet& par, edm::ConsumesCollector& iC) - : etMin_(par.getParameter("etMin")), - conesize_(par.getParameter("extRadius")), - scmatch_(par.getParameter("superClusterMatch")), - basicClusterToken_( - iC.consumes(par.getParameter("basicClusters"))), - superClusterToken_( - iC.consumes(par.getParameter("superClusters"))) {} - - ~EgammaEcalExtractor() override; - - void fillVetos(const edm::Event& ev, const edm::EventSetup& evSetup, const reco::TrackCollection& tracks) override { - } - reco::IsoDeposit deposit(const edm::Event& ev, - const edm::EventSetup& evSetup, - const reco::Track& track) const override { - throw cms::Exception("Configuration Error") - << "This extractor " << (typeid(this).name()) << " is not made for tracks"; - } - reco::IsoDeposit deposit(const edm::Event& ev, - const edm::EventSetup& evSetup, - const reco::Candidate& c) const override; - - private: - // ---------- member data -------------------------------- - - // Parameters of isolation cone geometry. - // Photon case - double etMin_; - double conesize_; - bool scmatch_; // true-> reject basic clusters matched to the superclsuter - // false-> fill all basic clusters - edm::EDGetTokenT basicClusterToken_; - edm::EDGetTokenT superClusterToken_; - }; - -} // namespace egammaisolation -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalPFClusterIsolationProducer.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalPFClusterIsolationProducer.cc index b87126ffe39e5..1d26d3064ab91 100644 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalPFClusterIsolationProducer.cc +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalPFClusterIsolationProducer.cc @@ -1,19 +1,47 @@ -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalPFClusterIsolationProducer.h" -#include "HLTrigger/HLTcore/interface/defaultModuleLabel.h" - -#include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/MakerMacros.h" +//***************************************************************************** +// File: EgammaEcalPFClusterIsolationProducer.cc +// ---------------------------------------------------------------------------- +// OrigAuth: Matteo Sani +// Institute: UCSD +//***************************************************************************** #include "DataFormats/Candidate/interface/CandAssociation.h" #include "DataFormats/EgammaCandidates/interface/GsfElectron.h" #include "DataFormats/EgammaCandidates/interface/Photon.h" - -#include "RecoEgamma/EgammaIsolationAlgos/interface/EcalPFClusterIsolation.h" - +#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" +#include "DataFormats/ParticleFlowReco/interface/PFClusterFwd.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "HLTrigger/HLTcore/interface/defaultModuleLabel.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EcalPFClusterIsolation.h" + +template +class EgammaEcalPFClusterIsolationProducer : public edm::global::EDProducer<> { +public: + typedef std::vector T1Collection; + typedef edm::Ref T1Ref; + explicit EgammaEcalPFClusterIsolationProducer(const edm::ParameterSet&); + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + +private: + const edm::EDGetTokenT emObjectProducer_; + const edm::EDGetTokenT pfClusterProducer_; + + const double drMax_; + const double drVetoBarrel_; + const double drVetoEndcap_; + const double etaStripBarrel_; + const double etaStripEndcap_; + const double energyBarrel_; + const double energyEndcap_; +}; template EgammaEcalPFClusterIsolationProducer::EgammaEcalPFClusterIsolationProducer(const edm::ParameterSet& config) @@ -31,9 +59,6 @@ EgammaEcalPFClusterIsolationProducer::EgammaEcalPFClusterIsolationProducer(c produces>(); } -template -EgammaEcalPFClusterIsolationProducer::~EgammaEcalPFClusterIsolationProducer() {} - template void EgammaEcalPFClusterIsolationProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; @@ -50,16 +75,16 @@ void EgammaEcalPFClusterIsolationProducer::fillDescriptions(edm::Configurati } template -void EgammaEcalPFClusterIsolationProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - edm::Handle emObjectHandle; - iEvent.getByToken(emObjectProducer_, emObjectHandle); +void EgammaEcalPFClusterIsolationProducer::produce(edm::StreamID, + edm::Event& iEvent, + const edm::EventSetup&) const { + auto emObjectHandle = iEvent.getHandle(emObjectProducer_); auto isoMap = std::make_unique>(); edm::ValueMap::Filler filler(*isoMap); std::vector retV(emObjectHandle->size(), 0); - edm::Handle clusterHandle; - iEvent.getByToken(pfClusterProducer_, clusterHandle); + auto clusterHandle = iEvent.getHandle(pfClusterProducer_); EcalPFClusterIsolation isoAlgo( drMax_, drVetoBarrel_, drVetoEndcap_, etaStripBarrel_, etaStripEndcap_, energyBarrel_, energyEndcap_); diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalPFClusterIsolationProducer.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalPFClusterIsolationProducer.h deleted file mode 100644 index 90fa875159695..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalPFClusterIsolationProducer.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef EgammaIsolationProducers_EgammaEcalPFClusterIsolationProducer_h -#define EgammaIsolationProducers_EgammaEcalPFClusterIsolationProducer_h - -//***************************************************************************** -// File: EgammaEcalPFClusterIsolationProducer.h -// ---------------------------------------------------------------------------- -// OrigAuth: Matteo Sani -// Institute: UCSD -//***************************************************************************** - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" -#include "DataFormats/ParticleFlowReco/interface/PFClusterFwd.h" - -template -class EgammaEcalPFClusterIsolationProducer : public edm::stream::EDProducer<> { -public: - typedef std::vector T1Collection; - typedef edm::Ref T1Ref; - explicit EgammaEcalPFClusterIsolationProducer(const edm::ParameterSet&); - ~EgammaEcalPFClusterIsolationProducer() override; - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - - void produce(edm::Event&, const edm::EventSetup&) override; - -private: - const edm::EDGetTokenT emObjectProducer_; - const edm::EDGetTokenT pfClusterProducer_; - - const double drMax_; - const double drVetoBarrel_; - const double drVetoEndcap_; - const double etaStripBarrel_; - const double etaStripEndcap_; - const double energyBarrel_; - const double energyEndcap_; -}; - -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.cc index 79d0d867cf48a..0537893cef3f3 100644 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.cc +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.cc @@ -1,51 +1,86 @@ //***************************************************************************** // File: EgammaEcalRecHitIsolationProducer.cc // ---------------------------------------------------------------------------- -// OrigAuth: Matthias Mozer -// Institute: IIHE-VUB +// OrigAuth: Matthias Mozer, adapted from EgammaHcalIsolationProducer by S. Harper +// Institute: IIHE-VUB, RAL //============================================================================= //***************************************************************************** -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.h" - -// Framework -#include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" - #include "DataFormats/Candidate/interface/Candidate.h" #include "DataFormats/Candidate/interface/CandAssociation.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" - -#include "DataFormats/DetId/interface/DetId.h" - -EgammaEcalRecHitIsolationProducer::EgammaEcalRecHitIsolationProducer(const edm::ParameterSet& config) : conf_(config) { - // use configuration file to setup input/output collection names - //inputs - emObjectProducer_ = conf_.getParameter("emObjectProducer"); - ecalBarrelRecHitProducer_ = conf_.getParameter("ecalBarrelRecHitProducer"); - ecalBarrelRecHitCollection_ = conf_.getParameter("ecalBarrelRecHitCollection"); - ecalEndcapRecHitProducer_ = conf_.getParameter("ecalEndcapRecHitProducer"); - ecalEndcapRecHitCollection_ = conf_.getParameter("ecalEndcapRecHitCollection"); - +#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/ESGetToken.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" + +class EgammaEcalRecHitIsolationProducer : public edm::global::EDProducer<> { +public: + explicit EgammaEcalRecHitIsolationProducer(const edm::ParameterSet&); + + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + +private: + const edm::EDGetTokenT> emObjectProducer_; + const edm::EDGetTokenT ecalBarrelRecHitCollection_; + const edm::EDGetTokenT ecalEndcapRecHitCollection_; + + double egIsoPtMinBarrel_; //minimum Et noise cut + double egIsoEMinBarrel_; //minimum E noise cut + double egIsoPtMinEndcap_; //minimum Et noise cut + double egIsoEMinEndcap_; //minimum E noise cut + double egIsoConeSizeOut_; //outer cone size + double egIsoConeSizeInBarrel_; //inner cone size + double egIsoConeSizeInEndcap_; //inner cone size + double egIsoJurassicWidth_; // exclusion strip width for jurassic veto + + bool useIsolEt_; //switch for isolEt rather than isolE + bool tryBoth_; // use rechits from barrel + endcap + bool subtract_; // subtract SC energy (allows veto cone of zero size) + + bool useNumCrystals_; // veto on number of crystals + bool vetoClustered_; // veto all clusterd rechits + + edm::ESGetToken sevLvToken_; + edm::ESGetToken caloGeometrytoken_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(EgammaEcalRecHitIsolationProducer); + +EgammaEcalRecHitIsolationProducer::EgammaEcalRecHitIsolationProducer(const edm::ParameterSet& config) + //inputs + : emObjectProducer_{consumes(config.getParameter("emObjectProducer"))}, + ecalBarrelRecHitCollection_{consumes(config.getParameter("ecalBarrelRecHitCollection"))}, + ecalEndcapRecHitCollection_{consumes(config.getParameter("ecalEndcapRecHitCollection"))} { //vetos - egIsoPtMinBarrel_ = conf_.getParameter("etMinBarrel"); - egIsoEMinBarrel_ = conf_.getParameter("eMinBarrel"); - egIsoPtMinEndcap_ = conf_.getParameter("etMinEndcap"); - egIsoEMinEndcap_ = conf_.getParameter("eMinEndcap"); - egIsoConeSizeInBarrel_ = conf_.getParameter("intRadiusBarrel"); - egIsoConeSizeInEndcap_ = conf_.getParameter("intRadiusEndcap"); - egIsoConeSizeOut_ = conf_.getParameter("extRadius"); - egIsoJurassicWidth_ = conf_.getParameter("jurassicWidth"); + egIsoPtMinBarrel_ = config.getParameter("etMinBarrel"); + egIsoEMinBarrel_ = config.getParameter("eMinBarrel"); + egIsoPtMinEndcap_ = config.getParameter("etMinEndcap"); + egIsoEMinEndcap_ = config.getParameter("eMinEndcap"); + egIsoConeSizeInBarrel_ = config.getParameter("intRadiusBarrel"); + egIsoConeSizeInEndcap_ = config.getParameter("intRadiusEndcap"); + egIsoConeSizeOut_ = config.getParameter("extRadius"); + egIsoJurassicWidth_ = config.getParameter("jurassicWidth"); // options - useIsolEt_ = conf_.getParameter("useIsolEt"); - tryBoth_ = conf_.getParameter("tryBoth"); - subtract_ = conf_.getParameter("subtract"); - useNumCrystals_ = conf_.getParameter("useNumCrystals"); - vetoClustered_ = conf_.getParameter("vetoClustered"); + useIsolEt_ = config.getParameter("useIsolEt"); + tryBoth_ = config.getParameter("tryBoth"); + subtract_ = config.getParameter("subtract"); + useNumCrystals_ = config.getParameter("useNumCrystals"); + vetoClustered_ = config.getParameter("vetoClustered"); //EventSetup Tokens sevLvToken_ = esConsumes(); @@ -55,25 +90,18 @@ EgammaEcalRecHitIsolationProducer::EgammaEcalRecHitIsolationProducer(const edm:: produces>(); } -EgammaEcalRecHitIsolationProducer::~EgammaEcalRecHitIsolationProducer() {} - -// -// member functions -// - // ------------ method called to produce the data ------------ -void EgammaEcalRecHitIsolationProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { +void EgammaEcalRecHitIsolationProducer::produce(edm::StreamID, + edm::Event& iEvent, + const edm::EventSetup& iSetup) const { // Get the filtered objects - edm::Handle> emObjectHandle; - iEvent.getByLabel(emObjectProducer_, emObjectHandle); + auto emObjectHandle = iEvent.getHandle(emObjectProducer_); // Next get Ecal hits barrel - edm::Handle ecalBarrelRecHitHandle; //EcalRecHitCollection is a typedef to - iEvent.getByLabel(ecalBarrelRecHitProducer_.label(), ecalBarrelRecHitCollection_.label(), ecalBarrelRecHitHandle); + auto ecalBarrelRecHitHandle = iEvent.getHandle(ecalBarrelRecHitCollection_); // Next get Ecal hits endcap - edm::Handle ecalEndcapRecHitHandle; - iEvent.getByLabel(ecalEndcapRecHitProducer_.label(), ecalEndcapRecHitCollection_.label(), ecalEndcapRecHitHandle); + auto ecalEndcapRecHitHandle = iEvent.getHandle(ecalEndcapRecHitCollection_); edm::ESHandle sevlv = iSetup.getHandle(sevLvToken_); const EcalSeverityLevelAlgo* sevLevel = sevlv.product(); diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.h deleted file mode 100644 index e09dfdc1894e2..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef EgammaIsolationProducers_EgammaEcalRecHitIsolationProducer_h -#define EgammaIsolationProducers_EgammaEcalRecHitIsolationProducer_h - -//***************************************************************************** -// File: EgammaRecHitIsolationProducer.h -// ---------------------------------------------------------------------------- -// OrigAuth: Matthias Mozer, adapted from EgammaHcalIsolationProducer by S. Harper -// Institute: IIHE-VUB, RAL -//============================================================================= -//***************************************************************************** - -// -*- C++ -*- -// - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/ESGetToken.h" - -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h" - -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" - -// -// class declaration -// - -class EgammaEcalRecHitIsolationProducer : public edm::stream::EDProducer<> { -public: - explicit EgammaEcalRecHitIsolationProducer(const edm::ParameterSet&); - ~EgammaEcalRecHitIsolationProducer() override; - - void produce(edm::Event&, const edm::EventSetup&) override; - -private: - // ----------member data --------------------------- - - edm::InputTag emObjectProducer_; - edm::InputTag ecalBarrelRecHitProducer_; - edm::InputTag ecalBarrelRecHitCollection_; - edm::InputTag ecalEndcapRecHitProducer_; - edm::InputTag ecalEndcapRecHitCollection_; - - double egIsoPtMinBarrel_; //minimum Et noise cut - double egIsoEMinBarrel_; //minimum E noise cut - double egIsoPtMinEndcap_; //minimum Et noise cut - double egIsoEMinEndcap_; //minimum E noise cut - double egIsoConeSizeOut_; //outer cone size - double egIsoConeSizeInBarrel_; //inner cone size - double egIsoConeSizeInEndcap_; //inner cone size - double egIsoJurassicWidth_; // exclusion strip width for jurassic veto - - bool useIsolEt_; //switch for isolEt rather than isolE - bool tryBoth_; // use rechits from barrel + endcap - bool subtract_; // subtract SC energy (allows veto cone of zero size) - - bool useNumCrystals_; // veto on number of crystals - bool vetoClustered_; // veto all clusterd rechits - - edm::ParameterSet conf_; - edm::ESGetToken sevLvToken_; - edm::ESGetToken caloGeometrytoken_; -}; - -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.cc index a9b5b9f374d21..32659c109adbd 100644 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.cc +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.cc @@ -6,63 +6,66 @@ //============================================================================= //***************************************************************************** -// Framework +#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Utilities/interface/Exception.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/ElectronTkIsolation.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/Candidate/interface/CandAssociation.h" +class EgammaElectronTkIsolationProducer : public edm::global::EDProducer<> { +public: + explicit EgammaElectronTkIsolationProducer(const edm::ParameterSet&); -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/ElectronTkIsolation.h" + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + +private: + const edm::EDGetTokenT electronProducer_; + const edm::EDGetTokenT trackProducer_; + const edm::EDGetTokenT beamspotProducer_; + + const double ptMin_; + const double intRadiusBarrel_; + const double intRadiusEndcap_; + const double stripBarrel_; + const double stripEndcap_; + const double extRadius_; + const double maxVtxDist_; + const double drb_; +}; -EgammaElectronTkIsolationProducer::EgammaElectronTkIsolationProducer(const edm::ParameterSet& config) : conf_(config) { - // use configuration file to setup input/output collection names - electronProducer_ = conf_.getParameter("electronProducer"); +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(EgammaElectronTkIsolationProducer); - trackProducer_ = conf_.getParameter("trackProducer"); - beamspotProducer_ = conf_.getParameter("BeamspotProducer"); +EgammaElectronTkIsolationProducer::EgammaElectronTkIsolationProducer(const edm::ParameterSet& config) + : electronProducer_{consumes(config.getParameter("electronProducer"))}, + trackProducer_{consumes(config.getParameter("trackProducer"))}, + beamspotProducer_{consumes(config.getParameter("BeamspotProducer"))}, - ptMin_ = conf_.getParameter("ptMin"); - intRadiusBarrel_ = conf_.getParameter("intRadiusBarrel"); - intRadiusEndcap_ = conf_.getParameter("intRadiusEndcap"); - stripBarrel_ = conf_.getParameter("stripBarrel"); - stripEndcap_ = conf_.getParameter("stripEndcap"); - extRadius_ = conf_.getParameter("extRadius"); - maxVtxDist_ = conf_.getParameter("maxVtxDist"); - drb_ = conf_.getParameter("maxVtxDistXY"); + ptMin_{config.getParameter("ptMin")}, + intRadiusBarrel_{config.getParameter("intRadiusBarrel")}, + intRadiusEndcap_{config.getParameter("intRadiusEndcap")}, + stripBarrel_{config.getParameter("stripBarrel")}, + stripEndcap_{config.getParameter("stripEndcap")}, + extRadius_{config.getParameter("extRadius")}, + maxVtxDist_{config.getParameter("maxVtxDist")}, + drb_{config.getParameter("maxVtxDistXY")} - //register your products +{ produces>(); } -EgammaElectronTkIsolationProducer::~EgammaElectronTkIsolationProducer() {} - -void EgammaElectronTkIsolationProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { +void EgammaElectronTkIsolationProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup&) const { // Get the filtered objects - edm::Handle electronHandle; - iEvent.getByLabel(electronProducer_, electronHandle); - - //get the tracks - edm::Handle tracks; - iEvent.getByLabel(trackProducer_, tracks); - const reco::TrackCollection* trackCollection = tracks.product(); + auto electronHandle = iEvent.getHandle(electronProducer_); //prepare product auto isoMap = std::make_unique>(); edm::ValueMap::Filler filler(*isoMap); std::vector retV(electronHandle->size(), 0); - edm::Handle beamSpotH; - iEvent.getByLabel(beamspotProducer_, beamSpotH); - reco::TrackBase::Point beamspot = beamSpotH->position(); - ElectronTkIsolation myTkIsolation(extRadius_, intRadiusBarrel_, intRadiusEndcap_, @@ -71,8 +74,8 @@ void EgammaElectronTkIsolationProducer::produce(edm::Event& iEvent, const edm::E ptMin_, maxVtxDist_, drb_, - trackCollection, - beamspot); + &iEvent.get(trackProducer_), + iEvent.get(beamspotProducer_).position()); for (unsigned int i = 0; i < electronHandle->size(); ++i) { double isoValue = myTkIsolation.getPtTracks(&(electronHandle->at(i))); diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.h deleted file mode 100644 index e6a4557a54638..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef EgammaIsolationProducers_EgammaElectronTkIsolationProducer_h -#define EgammaIsolationProducers_EgammaElectronTkIsolationProducer_h - -//***************************************************************************** -// File: EgammaElectronTkIsolationProducer.h -// ---------------------------------------------------------------------------- -// OrigAuth: Matthias Mozer -// Institute: IIHE-VUB -//============================================================================= -//***************************************************************************** - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -class EgammaElectronTkIsolationProducer : public edm::stream::EDProducer<> { -public: - explicit EgammaElectronTkIsolationProducer(const edm::ParameterSet&); - ~EgammaElectronTkIsolationProducer() override; - - void produce(edm::Event&, const edm::EventSetup&) override; - -private: - edm::InputTag electronProducer_; - edm::InputTag trackProducer_; - edm::InputTag beamspotProducer_; - - double ptMin_; - double intRadiusBarrel_; - double intRadiusEndcap_; - double stripBarrel_; - double stripEndcap_; - double extRadius_; - double maxVtxDist_; - double drb_; - - edm::ParameterSet conf_; -}; - -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.cc deleted file mode 100644 index 8411946d8b821..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.cc +++ /dev/null @@ -1,88 +0,0 @@ -//***************************************************************************** -// File: EgammaElectronTkNumIsolationProducer.cc -// ---------------------------------------------------------------------------- -// OrigAuth: Matthias Mozer -// Institute: IIHE-VUB -//============================================================================= -//***************************************************************************** - -// Framework -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Utilities/interface/Exception.h" - -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/Candidate/interface/CandAssociation.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" - -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/ElectronTkIsolation.h" - -EgammaElectronTkNumIsolationProducer::EgammaElectronTkNumIsolationProducer(const edm::ParameterSet& config) - : // use configuration file to setup input/output collection names - electronProducer_(config.getParameter("electronProducer")), - - trackProducer_(config.getParameter("trackProducer")), - beamspotProducer_(config.getParameter("BeamspotProducer")), - - ptMin_(config.getParameter("ptMin")), - intRadiusBarrel_(config.getParameter("intRadiusBarrel")), - intRadiusEndcap_(config.getParameter("intRadiusEndcap")), - stripBarrel_(config.getParameter("stripBarrel")), - stripEndcap_(config.getParameter("stripEndcap")), - extRadius_(config.getParameter("extRadius")), - maxVtxDist_(config.getParameter("maxVtxDist")), - drb_(config.getParameter("maxVtxDistXY")) { - //register your products - produces>(); -} - -EgammaElectronTkNumIsolationProducer::~EgammaElectronTkNumIsolationProducer() {} - -void EgammaElectronTkNumIsolationProducer::produce(edm::StreamID sid, - edm::Event& iEvent, - const edm::EventSetup& iSetup) const { - // Get the filtered objects - edm::Handle electronHandle; - iEvent.getByLabel(electronProducer_, electronHandle); - - //get the tracks - edm::Handle tracks; - iEvent.getByLabel(trackProducer_, tracks); - const reco::TrackCollection* trackCollection = tracks.product(); - - //prepare product - auto isoMap = std::make_unique>(); - edm::ValueMap::Filler filler(*isoMap); - std::vector retV(electronHandle->size(), 0); - - //get beamspot - edm::Handle beamSpotH; - iEvent.getByLabel(beamspotProducer_, beamSpotH); - reco::TrackBase::Point beamspot = beamSpotH->position(); - - ElectronTkIsolation myTkIsolation(extRadius_, - intRadiusBarrel_, - intRadiusEndcap_, - stripBarrel_, - stripEndcap_, - ptMin_, - maxVtxDist_, - drb_, - trackCollection, - beamspot); - - for (unsigned int i = 0; i < electronHandle->size(); ++i) { - int isoValue = myTkIsolation.getNumberTracks(&(electronHandle->at(i))); - retV[i] = isoValue; - } - - //fill and insert valuemap - filler.insert(electronHandle, retV.begin(), retV.end()); - filler.fill(); - iEvent.put(std::move(isoMap)); -} diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.h deleted file mode 100644 index c97345d80ea3b..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef EgammaIsolationProducers_EgammaElectronTkNumIsolationProducer_h -#define EgammaIsolationProducers_EgammaElectronTkNumIsolationProducer_h - -//***************************************************************************** -// File: EgammaElectronTkNumIsolationProducer.h -// ---------------------------------------------------------------------------- -// OrigAuth: Matthias Mozer -// Institute: IIHE-VUB -//============================================================================= -//***************************************************************************** - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/global/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -class EgammaElectronTkNumIsolationProducer : public edm::global::EDProducer<> { -public: - explicit EgammaElectronTkNumIsolationProducer(const edm::ParameterSet&); - ~EgammaElectronTkNumIsolationProducer() override; - - void produce(edm::StreamID sid, edm::Event&, const edm::EventSetup&) const override; - -private: - const edm::InputTag electronProducer_; - const edm::InputTag trackProducer_; - const edm::InputTag beamspotProducer_; - - const double ptMin_; - const double intRadiusBarrel_; - const double intRadiusEndcap_; - const double stripBarrel_; - const double stripEndcap_; - const double extRadius_; - const double maxVtxDist_; - const double drb_; -}; - -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaHcalExtractor.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaHcalExtractor.cc deleted file mode 100644 index fb6767b667b2e..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaHcalExtractor.cc +++ /dev/null @@ -1,78 +0,0 @@ -//***************************************************************************** -// File: EgammaHcalExtractor.cc -// ---------------------------------------------------------------------------- -// OrigAuth: Matthias Mozer -// Institute: IIHE-VUB -//============================================================================= -//***************************************************************************** -//C++ includes -#include -#include - -//ROOT includes -#include - -//CMSSW includes -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaHcalExtractor.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h" -#include "DataFormats/HcalDetId/interface/HcalDetId.h" -#include "Geometry/CommonDetUnit/interface/TrackingGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "DataFormats/GeometryVector/interface/GlobalPoint.h" -#include "DataFormats/GeometryVector/interface/GlobalVector.h" -#include "RecoCaloTools/Selectors/interface/CaloDualConeSelector.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" - -using namespace std; - -using namespace egammaisolation; -using namespace reco::isodeposit; - -EgammaHcalExtractor::EgammaHcalExtractor(const edm::ParameterSet& par, edm::ConsumesCollector& iC) - : extRadius_(par.getParameter("extRadius")), - intRadius_(par.getParameter("intRadius")), - etLow_(par.getParameter("etMin")), - hcalRecHitProducerToken_(iC.consumes(par.getParameter("hcalRecHits"))) {} - -EgammaHcalExtractor::~EgammaHcalExtractor() {} - -reco::IsoDeposit EgammaHcalExtractor::deposit(const edm::Event& iEvent, - const edm::EventSetup& iSetup, - const reco::Candidate& emObject) const { - //Get MetaRecHit collection - edm::Handle hcalRecHitHandle; - iEvent.getByToken(hcalRecHitProducerToken_, hcalRecHitHandle); - - //Get Calo Geometry - edm::ESHandle pG; - iSetup.get().get(pG); - const CaloGeometry* caloGeom = pG.product(); - CaloDualConeSelector coneSel(intRadius_, extRadius_, caloGeom, DetId::Hcal); - - //Take the SC position - reco::SuperClusterRef sc = emObject.get(); - math::XYZPoint caloPosition = sc->position(); - GlobalPoint point(caloPosition.x(), caloPosition.y(), caloPosition.z()); - // needed: coneSel.select(eta,phi,hits) is not the same! - - Direction candDir(caloPosition.eta(), caloPosition.phi()); - reco::IsoDeposit deposit(candDir); - deposit.setVeto(reco::IsoDeposit::Veto(candDir, intRadius_)); - double sinTheta = sin(2 * atan(exp(-sc->eta()))); - deposit.addCandEnergy(sc->energy() * sinTheta); - - //Compute the HCAL energy behind ECAL - coneSel.selectCallback(point, *hcalRecHitHandle, [&](const HBHERecHit& i) { - const GlobalPoint& hcalHit_position = caloGeom->getPosition(i.detid()); - double hcalHit_eta = hcalHit_position.eta(); - double hcalHit_Et = i.energy() * sin(2 * atan(exp(-hcalHit_eta))); - if (hcalHit_Et > etLow_) { - deposit.addDeposit(Direction(hcalHit_eta, hcalHit_position.phi()), hcalHit_Et); - } - }); - - return deposit; -} diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaHcalExtractor.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaHcalExtractor.h deleted file mode 100644 index 8d983afba461f..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaHcalExtractor.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef EgammaIsolationProducers_EgammaHcalIsolation_h -#define EgammaIsolationProducers_EgammaHcalIsolation_h -//***************************************************************************** -// File: EgammaHcalExtractor.h -// ---------------------------------------------------------------------------- -// OrigAuth: Matthias Mozer -// Institute: IIHE-VUB -//============================================================================= -//***************************************************************************** - -//C++ includes -#include -#include - -//CMSSW includes -#include "FWCore/Framework/interface/ESHandle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "RecoCaloTools/Selectors/interface/CaloDualConeSelector.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" - -#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractor.h" -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" - -namespace egammaisolation { - - class EgammaHcalExtractor : public reco::isodeposit::IsoDepositExtractor { - public: - EgammaHcalExtractor(const edm::ParameterSet& par, edm::ConsumesCollector&& iC) : EgammaHcalExtractor(par, iC) {} - EgammaHcalExtractor(const edm::ParameterSet& par, edm::ConsumesCollector& iC); - - ~EgammaHcalExtractor() override; - - void fillVetos(const edm::Event& ev, const edm::EventSetup& evSetup, const reco::TrackCollection& tracks) override { - } - reco::IsoDeposit deposit(const edm::Event& ev, - const edm::EventSetup& evSetup, - const reco::Track& track) const override { - throw cms::Exception("Configuration Error") - << "This extractor " << (typeid(this).name()) << " is not made for tracks"; - } - reco::IsoDeposit deposit(const edm::Event& ev, - const edm::EventSetup& evSetup, - const reco::Candidate& c) const override; - - private: - double extRadius_; - double intRadius_; - double etLow_; - - edm::EDGetTokenT hcalRecHitProducerToken_; - }; -} // namespace egammaisolation -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaHcalPFClusterIsolationProducer.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaHcalPFClusterIsolationProducer.cc index e141286463494..b9da6159ac443 100644 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaHcalPFClusterIsolationProducer.cc +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaHcalPFClusterIsolationProducer.cc @@ -1,35 +1,64 @@ -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaHcalPFClusterIsolationProducer.h" -#include "HLTrigger/HLTcore/interface/defaultModuleLabel.h" - -#include "FWCore/Utilities/interface/TypeID.h" - -#include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/MakerMacros.h" +//***************************************************************************** +// File: EgammaHcalPFClusterIsolationProducer.cc +// ---------------------------------------------------------------------------- +// OrigAuth: Matteo Sani +// Institute: UCSD +//***************************************************************************** #include "DataFormats/Candidate/interface/CandAssociation.h" +#include "DataFormats/Common/interface/Handle.h" #include "DataFormats/EgammaCandidates/interface/GsfElectron.h" #include "DataFormats/EgammaCandidates/interface/Photon.h" - -#include "RecoEgamma/EgammaIsolationAlgos/interface/HcalPFClusterIsolation.h" - +#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" +#include "DataFormats/ParticleFlowReco/interface/PFClusterFwd.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/TypeID.h" +#include "HLTrigger/HLTcore/interface/defaultModuleLabel.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/HcalPFClusterIsolation.h" #include +template +class EgammaHcalPFClusterIsolationProducer : public edm::global::EDProducer<> { +public: + typedef std::vector T1Collection; + typedef edm::Ref T1Ref; + explicit EgammaHcalPFClusterIsolationProducer(const edm::ParameterSet&); + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + +private: + const edm::EDGetTokenT emObjectProducer_; + const edm::EDGetTokenT pfClusterProducerHCAL_; + const edm::EDGetTokenT pfClusterProducerHFEM_; + const edm::EDGetTokenT pfClusterProducerHFHAD_; + + const bool useHF_; + const double drMax_; + const double drVetoBarrel_; + const double drVetoEndcap_; + const double etaStripBarrel_; + const double etaStripEndcap_; + const double energyBarrel_; + const double energyEndcap_; + const double useEt_; +}; + template EgammaHcalPFClusterIsolationProducer::EgammaHcalPFClusterIsolationProducer(const edm::ParameterSet& config) : - emObjectProducer_(consumes(config.getParameter("candidateProducer"))), - pfClusterProducerHCAL_( - consumes(config.getParameter("pfClusterProducerHCAL"))), - pfClusterProducerHFEM_( - consumes(config.getParameter("pfClusterProducerHFEM"))), - pfClusterProducerHFHAD_( - consumes(config.getParameter("pfClusterProducerHFHAD"))), + emObjectProducer_(consumes(config.getParameter("candidateProducer"))), + pfClusterProducerHCAL_(consumes(config.getParameter("pfClusterProducerHCAL"))), + pfClusterProducerHFEM_(consumes(config.getParameter("pfClusterProducerHFEM"))), + pfClusterProducerHFHAD_(consumes(config.getParameter("pfClusterProducerHFHAD"))), useHF_(config.getParameter("useHF")), drMax_(config.getParameter("drMax")), drVetoBarrel_(config.getParameter("drVetoBarrel")), @@ -42,22 +71,18 @@ EgammaHcalPFClusterIsolationProducer::EgammaHcalPFClusterIsolationProducer(c produces>(); } -template -EgammaHcalPFClusterIsolationProducer::~EgammaHcalPFClusterIsolationProducer() {} - template void EgammaHcalPFClusterIsolationProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; desc.add("candidateProducer", edm::InputTag("gedGsfElectrons")); desc.add("pfClusterProducerHCAL", edm::InputTag("particleFlowClusterHCAL")); - desc.ifValue( - edm::ParameterDescription("useHF", false, true), - true >> (edm::ParameterDescription( - "pfClusterProducerHFEM", edm::InputTag("hltParticleFlowClusterHFEM"), true) and - edm::ParameterDescription( - "pfClusterProducerHFHAD", edm::InputTag("hltParticleFlowClusterHFHAD"), true)) or - false >> (edm::ParameterDescription("pfClusterProducerHFEM", edm::InputTag(""), true) and - edm::ParameterDescription("pfClusterProducerHFHAD", edm::InputTag(""), true))); + desc.ifValue(edm::ParameterDescription("useHF", false, true), + true >> (edm::ParameterDescription( + "pfClusterProducerHFEM", {"hltParticleFlowClusterHFEM"}, true) and + edm::ParameterDescription( + "pfClusterProducerHFHAD", {"hltParticleFlowClusterHFHAD"}, true)) or + false >> (edm::ParameterDescription("pfClusterProducerHFEM", {""}, true) and + edm::ParameterDescription("pfClusterProducerHFHAD", {""}, true))); desc.add("drMax", 0.3); desc.add("drVetoBarrel", 0.0); desc.add("drVetoEndcap", 0.0); @@ -70,26 +95,20 @@ void EgammaHcalPFClusterIsolationProducer::fillDescriptions(edm::Configurati } template -void EgammaHcalPFClusterIsolationProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - edm::Handle emObjectHandle; - iEvent.getByToken(emObjectProducer_, emObjectHandle); +void EgammaHcalPFClusterIsolationProducer::produce(edm::StreamID, + edm::Event& iEvent, + const edm::EventSetup&) const { + auto emObjectHandle = iEvent.getHandle(emObjectProducer_); auto isoMap = std::make_unique>(); edm::ValueMap::Filler filler(*isoMap); std::vector retV(emObjectHandle->size(), 0); - std::vector> clusterHandles; - edm::Handle clusterHandle; - iEvent.getByToken(pfClusterProducerHCAL_, clusterHandle); - clusterHandles.push_back(clusterHandle); + std::vector> clusterHandles{iEvent.getHandle(pfClusterProducerHCAL_)}; if (useHF_) { - edm::Handle clusterHandle; - iEvent.getByToken(pfClusterProducerHFEM_, clusterHandle); - clusterHandles.push_back(clusterHandle); - - iEvent.getByToken(pfClusterProducerHFHAD_, clusterHandle); - clusterHandles.push_back(clusterHandle); + clusterHandles.push_back(iEvent.getHandle(pfClusterProducerHFEM_)); + clusterHandles.push_back(iEvent.getHandle(pfClusterProducerHFHAD_)); } HcalPFClusterIsolation isoAlgo( diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaHcalPFClusterIsolationProducer.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaHcalPFClusterIsolationProducer.h deleted file mode 100644 index 0aad7a6323db1..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaHcalPFClusterIsolationProducer.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef EgammaIsolationProducers_EgammaHcalPFClusterIsolationProducer_h -#define EgammaIsolationProducers_EgammaHcalPFClusterIsolationProducer_h - -//***************************************************************************** -// File: EgammaHcalPFClusterIsolationProducer.h -// ---------------------------------------------------------------------------- -// OrigAuth: Matteo Sani -// Institute: UCSD -//***************************************************************************** - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" -#include "DataFormats/ParticleFlowReco/interface/PFClusterFwd.h" - -template -class EgammaHcalPFClusterIsolationProducer : public edm::stream::EDProducer<> { -public: - typedef std::vector T1Collection; - typedef edm::Ref T1Ref; - explicit EgammaHcalPFClusterIsolationProducer(const edm::ParameterSet&); - ~EgammaHcalPFClusterIsolationProducer() override; - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - - void produce(edm::Event&, const edm::EventSetup&) override; - -private: - const edm::EDGetTokenT emObjectProducer_; - const edm::EDGetTokenT pfClusterProducerHCAL_; - const edm::EDGetTokenT pfClusterProducerHFEM_; - const edm::EDGetTokenT pfClusterProducerHFHAD_; - - const bool useHF_; - const double drMax_; - const double drVetoBarrel_; - const double drVetoEndcap_; - const double etaStripBarrel_; - const double etaStripEndcap_; - const double energyBarrel_; - const double energyEndcap_; - const double useEt_; -}; - -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoDetIdCollectionProducer.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoDetIdCollectionProducer.cc new file mode 100644 index 0000000000000..145623b7534f3 --- /dev/null +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoDetIdCollectionProducer.cc @@ -0,0 +1,192 @@ +// -*- C++ -*- +// +// Package: EgammaIsoDetIdCollectionProducer +// Class: EgammaIsoDetIdCollectionProducer +// +/**\class EgammaIsoDetIdCollectionProducer +Original author: Matthew LeBourgeois PH/CMG +Modified from : +RecoEcal/EgammaClusterProducers/{src,interface}/InterestingDetIdCollectionProducer.{h,cc} +by Paolo Meridiani PH/CMG + +Implementation: + +*/ + +#include "CommonTools/Utils/interface/StringToEnumValue.h" +#include "DataFormats/DetId/interface/DetIdCollection.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/GeometryVector/interface/GlobalPoint.h" +#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "RecoCaloTools/Selectors/interface/CaloDualConeSelector.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" + +template +class EgammaIsoDetIdCollectionProducer : public edm::global::EDProducer<> { +public: + typedef std::vector T1Collection; + //! ctor + explicit EgammaIsoDetIdCollectionProducer(const edm::ParameterSet&); + //! producer + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + +private: + // ----------member data --------------------------- + edm::EDGetTokenT recHitsToken_; + edm::EDGetTokenT emObjectToken_; + edm::ESGetToken caloGeometryToken_; + edm::ESGetToken sevLvToken_; + edm::InputTag recHitsLabel_; + edm::InputTag emObjectLabel_; + double energyCut_; + double etCut_; + double etCandCut_; + double outerRadius_; + double innerRadius_; + std::string interestingDetIdCollection_; + + std::vector severitiesexclEB_; + std::vector severitiesexclEE_; + std::vector flagsexclEB_; + std::vector flagsexclEE_; +}; + +template +EgammaIsoDetIdCollectionProducer::EgammaIsoDetIdCollectionProducer(const edm::ParameterSet& iConfig) + : recHitsToken_{consumes(iConfig.getParameter("recHitsLabel"))}, + emObjectToken_{consumes(iConfig.getParameter("emObjectLabel"))}, + caloGeometryToken_(esConsumes()), + sevLvToken_(esConsumes()), + recHitsLabel_(iConfig.getParameter("recHitsLabel")), + emObjectLabel_(iConfig.getParameter("emObjectLabel")), + energyCut_(iConfig.getParameter("energyCut")), + etCut_(iConfig.getParameter("etCut")), + etCandCut_(iConfig.getParameter("etCandCut")), + outerRadius_(iConfig.getParameter("outerRadius")), + innerRadius_(iConfig.getParameter("innerRadius")), + interestingDetIdCollection_(iConfig.getParameter("interestingDetIdCollection")) { + auto const& flagnamesEB = iConfig.getParameter>("RecHitFlagToBeExcludedEB"); + auto const& flagnamesEE = iConfig.getParameter>("RecHitFlagToBeExcludedEE"); + + flagsexclEB_ = StringToEnumValue(flagnamesEB); + flagsexclEE_ = StringToEnumValue(flagnamesEE); + + auto const& severitynamesEB = iConfig.getParameter>("RecHitSeverityToBeExcludedEB"); + + severitiesexclEB_ = StringToEnumValue(severitynamesEB); + + auto const& severitynamesEE = iConfig.getParameter>("RecHitSeverityToBeExcludedEE"); + + severitiesexclEE_ = StringToEnumValue(severitynamesEE); + + //register your products + produces(interestingDetIdCollection_); +} + +// ------------ method called to produce the data ------------ +template +void EgammaIsoDetIdCollectionProducer::produce(edm::StreamID, + edm::Event& iEvent, + const edm::EventSetup& iSetup) const { + using namespace edm; + using namespace std; + + auto const& emObjects = iEvent.get(emObjectToken_); + auto const& ecalRecHits = iEvent.get(recHitsToken_); + + edm::ESHandle pG = iSetup.getHandle(caloGeometryToken_); + const CaloGeometry* caloGeom = pG.product(); + + edm::ESHandle sevlv = iSetup.getHandle(sevLvToken_); + const EcalSeverityLevelAlgo* sevLevel = sevlv.product(); + + std::unique_ptr> doubleConeSel_ = nullptr; + if (recHitsLabel_.instance() == "EcalRecHitsEB") { + doubleConeSel_ = + std::make_unique>(innerRadius_, outerRadius_, &*pG, DetId::Ecal, EcalBarrel); + } else if (recHitsLabel_.instance() == "EcalRecHitsEE") { + doubleConeSel_ = + std::make_unique>(innerRadius_, outerRadius_, &*pG, DetId::Ecal, EcalEndcap); + } + + //Create empty output collections + auto detIdCollection = std::make_unique(); + + if (doubleConeSel_) { //if cone selector was created + for (auto const& emObj : emObjects) { //Loop over candidates + + if (emObj.et() < etCandCut_) + continue; //don't calculate if object hasn't enough energy + + GlobalPoint pclu(emObj.caloPosition().x(), emObj.caloPosition().y(), emObj.caloPosition().z()); + doubleConeSel_->selectCallback(pclu, ecalRecHits, [&](const EcalRecHit& recIt) { + if (recIt.energy() < energyCut_) + return; //dont fill if below E noise value + + double et = + recIt.energy() * caloGeom->getPosition(recIt.detid()).perp() / caloGeom->getPosition(recIt.detid()).mag(); + + if (et < etCut_) + return; //dont fill if below ET noise value + + bool isBarrel = false; + if (fabs(caloGeom->getPosition(recIt.detid()).eta() < 1.479)) + isBarrel = true; + + int severityFlag = sevLevel->severityLevel(recIt.detid(), ecalRecHits); + if (isBarrel) { + auto sit = std::find(severitiesexclEB_.begin(), severitiesexclEB_.end(), severityFlag); + if (sit != severitiesexclEB_.end()) + return; + } else { + auto sit = std::find(severitiesexclEE_.begin(), severitiesexclEE_.end(), severityFlag); + if (sit != severitiesexclEE_.end()) + return; + } + + if (isBarrel) { + // new rechit flag checks + if (!recIt.checkFlag(EcalRecHit::kGood)) { + if (recIt.checkFlags(flagsexclEB_)) { + return; + } + } + } else { + // new rechit flag checks + if (!recIt.checkFlag(EcalRecHit::kGood)) { + if (recIt.checkFlags(flagsexclEE_)) { + return; + } + } + } + + if (std::find(detIdCollection->begin(), detIdCollection->end(), recIt.detid()) == detIdCollection->end()) + detIdCollection->push_back(recIt.detid()); + }); //end rechits + + } //end candidates + + } //end if cone selector was created + + iEvent.put(std::move(detIdCollection), interestingDetIdCollection_); +} + +#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" +#include "DataFormats/EgammaCandidates/interface/Photon.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +using EleIsoDetIdCollectionProducer = EgammaIsoDetIdCollectionProducer; +using GamIsoDetIdCollectionProducer = EgammaIsoDetIdCollectionProducer; + +DEFINE_FWK_MODULE(GamIsoDetIdCollectionProducer); +DEFINE_FWK_MODULE(EleIsoDetIdCollectionProducer); diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoESDetIdCollectionProducer.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoESDetIdCollectionProducer.cc index c1cac8330b3aa..fbb654855feaf 100644 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoESDetIdCollectionProducer.cc +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoESDetIdCollectionProducer.cc @@ -1,24 +1,71 @@ -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoESDetIdCollectionProducer.h" +// -*- C++ -*- +// +// Package: EgammaIsoESDetIdCollectionProducer +// Class: EgammaIsoESDetIdCollectionProducer +// +/**\class EgammaIsoESDetIdCollectionProducer + +author: Sam Harper (inspired by InterestingDetIdProducer) + +Make a collection of detids to be kept in a AOD rechit collection +These are all the ES DetIds of ES PFClusters associated to all PF clusters within dR of ele/pho/sc +The aim is to save enough preshower info in the AOD to remake the PF clusters near an ele/pho/sc +*/ -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/EventSetup.h" - -#include "DataFormats/Math/interface/deltaR.h" #include "DataFormats/DetId/interface/DetIdCollection.h" - -EgammaIsoESDetIdCollectionProducer::EgammaIsoESDetIdCollectionProducer(const edm::ParameterSet& iConfig) { - eeClusToESMapToken_ = - consumes(iConfig.getParameter("eeClusToESMapLabel")); - - ecalPFClustersToken_ = - consumes(iConfig.getParameter("ecalPFClustersLabel")); - elesToken_ = consumes(iConfig.getParameter("elesLabel")); - - phosToken_ = consumes(iConfig.getParameter("phosLabel")); - - superClustersToken_ = - consumes(iConfig.getParameter("superClustersLabel")); - +#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" +#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" +#include "DataFormats/EgammaCandidates/interface/Photon.h" +#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/Math/interface/deltaR.h" +#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" +#include "DataFormats/ParticleFlowReco/interface/PFClusterFwd.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +class EgammaIsoESDetIdCollectionProducer : public edm::global::EDProducer<> { +public: + //! ctor + explicit EgammaIsoESDetIdCollectionProducer(const edm::ParameterSet&); + //! producer + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + +private: + void addDetIds(const reco::SuperCluster& superClus, + reco::PFClusterCollection clusters, + const reco::PFCluster::EEtoPSAssociation& eeClusToESMap, + std::vector& detIdsToStore) const; + + // ----------member data --------------------------- + edm::EDGetTokenT eeClusToESMapToken_; + edm::EDGetTokenT ecalPFClustersToken_; + edm::EDGetTokenT superClustersToken_; + edm::EDGetTokenT elesToken_; + edm::EDGetTokenT phosToken_; + + std::string interestingDetIdCollection_; + + float minSCEt_; + float minEleEt_; + float minPhoEt_; + + float maxDR_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(EgammaIsoESDetIdCollectionProducer); + +EgammaIsoESDetIdCollectionProducer::EgammaIsoESDetIdCollectionProducer(const edm::ParameterSet& iConfig) + : eeClusToESMapToken_{consumes(iConfig.getParameter("eeClusToESMapLabel"))}, + ecalPFClustersToken_{consumes(iConfig.getParameter("ecalPFClustersLabel"))}, + superClustersToken_{consumes(iConfig.getParameter("superClustersLabel"))}, + elesToken_{consumes(iConfig.getParameter("elesLabel"))}, + phosToken_{consumes(iConfig.getParameter("phosLabel"))} { minSCEt_ = iConfig.getParameter("minSCEt"); minEleEt_ = iConfig.getParameter("minEleEt"); minPhoEt_ = iConfig.getParameter("minPhoEt"); @@ -31,25 +78,13 @@ EgammaIsoESDetIdCollectionProducer::EgammaIsoESDetIdCollectionProducer(const edm produces(interestingDetIdCollection_); } -void EgammaIsoESDetIdCollectionProducer::beginRun(edm::Run const& run, const edm::EventSetup& iSetup) {} - // ------------ method called to produce the data ------------ -void EgammaIsoESDetIdCollectionProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - // take BasicClusters - edm::Handle superClusters; - iEvent.getByToken(superClustersToken_, superClusters); - - edm::Handle eles; - iEvent.getByToken(elesToken_, eles); - - edm::Handle phos; - iEvent.getByToken(phosToken_, phos); - - edm::Handle eeClusToESMap; - iEvent.getByToken(eeClusToESMapToken_, eeClusToESMap); - - edm::Handle ecalPFClusters; - iEvent.getByToken(ecalPFClustersToken_, ecalPFClusters); +void EgammaIsoESDetIdCollectionProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup&) const { + auto superClusters = iEvent.getHandle(superClustersToken_); + auto eles = iEvent.getHandle(elesToken_); + auto phos = iEvent.getHandle(phosToken_); + auto eeClusToESMap = iEvent.getHandle(eeClusToESMapToken_); + auto ecalPFClusters = iEvent.getHandle(ecalPFClustersToken_); //Create empty output collections std::vector indexToStore; @@ -90,7 +125,7 @@ void EgammaIsoESDetIdCollectionProducer::produce(edm::Event& iEvent, const edm:: void EgammaIsoESDetIdCollectionProducer::addDetIds(const reco::SuperCluster& superClus, reco::PFClusterCollection clusters, const reco::PFCluster::EEtoPSAssociation& eeClusToESMap, - std::vector& detIdsToStore) { + std::vector& detIdsToStore) const { const float scEta = superClus.eta(); // if(std::abs(scEta)+maxDR_<1.5) return; //not possible to have a endcap cluster, let alone one with preshower (eta>1.65) so exit without checking further const float scPhi = superClus.phi(); diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoESDetIdCollectionProducer.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoESDetIdCollectionProducer.h deleted file mode 100644 index 1213eefee19a0..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoESDetIdCollectionProducer.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef RECOEGAMMA_EGAMMAISOLATIONALGOS_EGAMMAISOESDETIDCOLLECTIONPRODUCER_H -#define RECOEGAMMA_EGAMMAISOLATIONALGOS_EGAMMAISOESDETIDCOLLECTIONPRODUCER_H - -// -*- C++ -*- -// -// Package: EgammaIsoESDetIdCollectionProducer -// Class: EgammaIsoESDetIdCollectionProducer -// -/**\class EgammaIsoESDetIdCollectionProducer - -author: Sam Harper (inspired by InterestingDetIdProducer) - -Make a collection of detids to be kept in a AOD rechit collection -These are all the ES DetIds of ES PFClusters associated to all PF clusters within dR of ele/pho/sc -The aim is to save enough preshower info in the AOD to remake the PF clusters near an ele/pho/sc -*/ - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" -#include "DataFormats/ParticleFlowReco/interface/PFClusterFwd.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" -#include "DataFormats/EgammaCandidates/interface/Photon.h" - -class EgammaIsoESDetIdCollectionProducer : public edm::stream::EDProducer<> { -public: - //! ctor - explicit EgammaIsoESDetIdCollectionProducer(const edm::ParameterSet&); - void beginRun(edm::Run const&, const edm::EventSetup&) final; - //! producer - void produce(edm::Event&, const edm::EventSetup&) override; - -private: - void addDetIds(const reco::SuperCluster& superClus, - reco::PFClusterCollection clusters, - const reco::PFCluster::EEtoPSAssociation& eeClusToESMap, - std::vector& detIdsToStore); - - // ----------member data --------------------------- - edm::EDGetTokenT eeClusToESMapToken_; - edm::EDGetTokenT ecalPFClustersToken_; - edm::EDGetTokenT superClustersToken_; - edm::EDGetTokenT elesToken_; - edm::EDGetTokenT phosToken_; - - std::string interestingDetIdCollection_; - - float minSCEt_; - float minEleEt_; - float minPhoEt_; - - float maxDR_; -}; - -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoHcalDetIdCollectionProducer.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoHcalDetIdCollectionProducer.cc index 319094a1bedb7..88af1bb46b23a 100644 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoHcalDetIdCollectionProducer.cc +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoHcalDetIdCollectionProducer.cc @@ -1,21 +1,65 @@ -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoHcalDetIdCollectionProducer.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/EventSetup.h" +// -*- C++ -*- +// +// Package: EgammaIsoHcalDetIdCollectionProducer +// Class: EgammaIsoHcalDetIdCollectionProducer +// +/**\class EgammaIsoHcalDetIdCollectionProducer +Original author: Sam Harper (RAL) + +Make a collection of detids to be kept tipically in a AOD rechit collection +Modified from the ECAL version "InterestingDetIdCollectionProducer" to be HCAL + +*/ #include "DataFormats/DetId/interface/DetIdCollection.h" +#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" +#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" +#include "DataFormats/EgammaCandidates/interface/Photon.h" +#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EGHcalRecHitSelector.h" -EgammaIsoHcalDetIdCollectionProducer::EgammaIsoHcalDetIdCollectionProducer(const edm::ParameterSet& iConfig) - : hcalHitSelector_(iConfig.getParameter("hitSelection"), consumesCollector()) { - recHitsToken_ = consumes(iConfig.getParameter("recHitsLabel")); - elesToken_ = consumes(iConfig.getParameter("elesLabel")); +class EgammaIsoHcalDetIdCollectionProducer : public edm::stream::EDProducer<> { +public: + explicit EgammaIsoHcalDetIdCollectionProducer(const edm::ParameterSet&); + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + void beginRun(edm::Run const&, const edm::EventSetup&) final; + void produce(edm::Event&, const edm::EventSetup&) override; + +private: + // ----------member data --------------------------- + const edm::EDGetTokenT recHitsToken_; + const edm::EDGetTokenT superClustersToken_; + const edm::EDGetTokenT elesToken_; + const edm::EDGetTokenT phosToken_; - phosToken_ = consumes(iConfig.getParameter("phosLabel")); + std::string interestingDetIdCollection_; - superClustersToken_ = - consumes(iConfig.getParameter("superClustersLabel")); + float minSCEt_; + float minEleEt_; + float minPhoEt_; + EGHcalRecHitSelector hcalHitSelector_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(EgammaIsoHcalDetIdCollectionProducer); + +EgammaIsoHcalDetIdCollectionProducer::EgammaIsoHcalDetIdCollectionProducer(const edm::ParameterSet& iConfig) + : recHitsToken_{consumes(iConfig.getParameter("recHitsLabel"))}, + superClustersToken_{consumes(iConfig.getParameter("superClustersLabel"))}, + elesToken_{consumes(iConfig.getParameter("elesLabel"))}, + phosToken_{consumes(iConfig.getParameter("phosLabel"))}, + hcalHitSelector_(iConfig.getParameter("hitSelection"), consumesCollector()) { minSCEt_ = iConfig.getParameter("minSCEt"); minEleEt_ = iConfig.getParameter("minEleEt"); minPhoEt_ = iConfig.getParameter("minPhoEt"); @@ -46,17 +90,10 @@ void EgammaIsoHcalDetIdCollectionProducer::beginRun(edm::Run const& run, const e // ------------ method called to produce the data ------------ void EgammaIsoHcalDetIdCollectionProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - edm::Handle superClusters; - iEvent.getByToken(superClustersToken_, superClusters); - - edm::Handle eles; - iEvent.getByToken(elesToken_, eles); - - edm::Handle phos; - iEvent.getByToken(phosToken_, phos); - - edm::Handle recHits; - iEvent.getByToken(recHitsToken_, recHits); + auto superClusters = iEvent.getHandle(superClustersToken_); + auto eles = iEvent.getHandle(elesToken_); + auto phos = iEvent.getHandle(phosToken_); + auto recHits = iEvent.getHandle(recHitsToken_); std::vector indexToStore; indexToStore.reserve(100); diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoHcalDetIdCollectionProducer.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoHcalDetIdCollectionProducer.h deleted file mode 100644 index a36f0c92aba42..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaIsoHcalDetIdCollectionProducer.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef RECOEGAMMA_EGAMMAISOLATIONALGOS_EGAMMAISOHCALDETIDCOLLECTIONPRODUCER_H -#define RECOEGAMMA_EGAMMAISOLATIONALGOS_EGAMMAISOHCALDETIDCOLLECTIONPRODUCER_H - -// -*- C++ -*- -// -// Package: EgammaIsoHcalDetIdCollectionProducer -// Class: EgammaIsoHcalDetIdCollectionProducer -// -/**\class EgammaIsoHcalDetIdCollectionProducer -Original author: Sam Harper (RAL) - -Make a collection of detids to be kept tipically in a AOD rechit collection -Modified from the ECAL version "InterestingDetIdCollectionProducer" to be HCAL - -*/ - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" -#include "DataFormats/EgammaCandidates/interface/Photon.h" - -#include "RecoEgamma/EgammaIsolationAlgos/interface/EGHcalRecHitSelector.h" - -class EgammaIsoHcalDetIdCollectionProducer : public edm::stream::EDProducer<> { -public: - explicit EgammaIsoHcalDetIdCollectionProducer(const edm::ParameterSet&); - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - - void beginRun(edm::Run const&, const edm::EventSetup&) final; - void produce(edm::Event&, const edm::EventSetup&) override; - -private: - // ----------member data --------------------------- - edm::EDGetTokenT recHitsToken_; - edm::EDGetTokenT superClustersToken_; - edm::EDGetTokenT elesToken_; - edm::EDGetTokenT phosToken_; - - std::string interestingDetIdCollection_; - - float minSCEt_; - float minEleEt_; - float minPhoEt_; - - EGHcalRecHitSelector hcalHitSelector_; -}; - -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.cc index 1520ac739a31e..6aafbb996d478 100644 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.cc +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.cc @@ -6,29 +6,50 @@ //============================================================================= //***************************************************************************** -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.h" - -// Framework -#include "DataFormats/Common/interface/Handle.h" - -#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" #include "DataFormats/Candidate/interface/CandAssociation.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/Common/interface/Handle.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" - +#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "RecoEgamma/EgammaIsolationAlgos/interface/PhotonTkIsolation.h" +class EgammaPhotonTkIsolationProducer : public edm::global::EDProducer<> { +public: + explicit EgammaPhotonTkIsolationProducer(const edm::ParameterSet&); + + void produce(edm::StreamID sid, edm::Event&, const edm::EventSetup&) const override; + +private: + const edm::EDGetTokenT> photonProducer_; + const edm::EDGetTokenT trackProducer_; + const edm::EDGetTokenT beamspotProducer_; + + const double ptMin_; + const double intRadiusBarrel_; + const double intRadiusEndcap_; + const double stripBarrel_; + const double stripEndcap_; + const double extRadius_; + const double maxVtxDist_; + const double drb_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(EgammaPhotonTkIsolationProducer); + EgammaPhotonTkIsolationProducer::EgammaPhotonTkIsolationProducer(const edm::ParameterSet& config) : - // use configuration file to setup input/output collection names - photonProducer_(config.getParameter("photonProducer")), + photonProducer_{consumes(config.getParameter("photonProducer"))}, - trackProducer_(config.getParameter("trackProducer")), - beamspotProducer_(config.getParameter("BeamspotProducer")), + trackProducer_{consumes(config.getParameter("trackProducer"))}, + beamspotProducer_{consumes(config.getParameter("BeamspotProducer"))}, ptMin_(config.getParameter("ptMin")), intRadiusBarrel_(config.getParameter("intRadiusBarrel")), @@ -42,28 +63,12 @@ EgammaPhotonTkIsolationProducer::EgammaPhotonTkIsolationProducer(const edm::Para produces>(); } -EgammaPhotonTkIsolationProducer::~EgammaPhotonTkIsolationProducer() {} - -// -// member functions -// - // ------------ method called to produce the data ------------ void EgammaPhotonTkIsolationProducer::produce(edm::StreamID sid, edm::Event& iEvent, const edm::EventSetup& iSetup) const { // Get the filtered objects - edm::Handle> photonHandle; - iEvent.getByLabel(photonProducer_, photonHandle); - - //get the tracks - edm::Handle tracks; - iEvent.getByLabel(trackProducer_, tracks); - const reco::TrackCollection* trackCollection = tracks.product(); - - edm::Handle beamSpotH; - iEvent.getByLabel(beamspotProducer_, beamSpotH); - reco::TrackBase::Point beamspot = beamSpotH->position(); + auto photonHandle = iEvent.getHandle(photonProducer_); //prepare product auto isoMap = std::make_unique>(); @@ -78,8 +83,8 @@ void EgammaPhotonTkIsolationProducer::produce(edm::StreamID sid, ptMin_, maxVtxDist_, drb_, - trackCollection, - beamspot); + &iEvent.get(trackProducer_), + iEvent.get(beamspotProducer_).position()); for (unsigned int i = 0; i < photonHandle->size(); ++i) { double isoValue = myTkIsolation.getIso(&(photonHandle->at(i))).second; diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.h deleted file mode 100644 index 06f361f6716c9..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef EgammaIsolationProducers_EgammaPhotonTkIsolationProducer_h -#define EgammaIsolationProducers_EgammaPhotonTkIsolationProducer_h - -//***************************************************************************** -// File: EgammaPhotonTkIsolationProducer.h -// ---------------------------------------------------------------------------- -// OrigAuth: Matthias Mozer -// Institute: IIHE-VUB -//============================================================================= -//***************************************************************************** - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/global/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -class EgammaPhotonTkIsolationProducer : public edm::global::EDProducer<> { -public: - explicit EgammaPhotonTkIsolationProducer(const edm::ParameterSet&); - ~EgammaPhotonTkIsolationProducer() override; - - void produce(edm::StreamID sid, edm::Event&, const edm::EventSetup&) const override; - -private: - const edm::InputTag photonProducer_; - const edm::InputTag trackProducer_; - const edm::InputTag beamspotProducer_; - - const double ptMin_; - const double intRadiusBarrel_; - const double intRadiusEndcap_; - const double stripBarrel_; - const double stripEndcap_; - const double extRadius_; - const double maxVtxDist_; - const double drb_; - - const edm::ParameterSet conf_; -}; - -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.cc index 4c2b0e11bdfb5..ac751e4de705c 100644 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.cc +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.cc @@ -6,26 +6,47 @@ //============================================================================= //***************************************************************************** -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.h" - -// Framework -#include "DataFormats/Common/interface/Handle.h" - -#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" #include "DataFormats/Candidate/interface/CandAssociation.h" +#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/Common/interface/Handle.h" #include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" - +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "RecoEgamma/EgammaIsolationAlgos/interface/PhotonTkIsolation.h" +class EgammaPhotonTkNumIsolationProducer : public edm::global::EDProducer<> { +public: + explicit EgammaPhotonTkNumIsolationProducer(const edm::ParameterSet&); + + void produce(edm::StreamID sid, edm::Event&, const edm::EventSetup&) const override; + +private: + const edm::EDGetTokenT> photonProducer_; + const edm::EDGetTokenT trackProducer_; + const edm::EDGetTokenT beamspotProducer_; + + const double ptMin_; + const double intRadiusBarrel_; + const double intRadiusEndcap_; + const double stripBarrel_; + const double stripEndcap_; + const double extRadius_; + const double maxVtxDist_; + const double drb_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(EgammaPhotonTkNumIsolationProducer); + EgammaPhotonTkNumIsolationProducer::EgammaPhotonTkNumIsolationProducer(const edm::ParameterSet& config) : - // use configuration file to setup input/output collection names - photonProducer_(config.getParameter("photonProducer")), + photonProducer_{consumes(config.getParameter("photonProducer"))}, - trackProducer_(config.getParameter("trackProducer")), - beamspotProducer_(config.getParameter("BeamspotProducer")), + trackProducer_{consumes(config.getParameter("trackProducer"))}, + beamspotProducer_{consumes(config.getParameter("BeamspotProducer"))}, ptMin_(config.getParameter("ptMin")), intRadiusBarrel_(config.getParameter("intRadiusBarrel")), @@ -41,29 +62,12 @@ EgammaPhotonTkNumIsolationProducer::EgammaPhotonTkNumIsolationProducer(const edm produces>(); } -EgammaPhotonTkNumIsolationProducer::~EgammaPhotonTkNumIsolationProducer() {} - -// -// member functions -// - // ------------ method called to produce the data ------------ void EgammaPhotonTkNumIsolationProducer::produce(edm::StreamID sid, edm::Event& iEvent, const edm::EventSetup& iSetup) const { // Get the filtered objects - edm::Handle> photonHandle; - iEvent.getByLabel(photonProducer_, photonHandle); - - //get the tracks - edm::Handle tracks; - iEvent.getByLabel(trackProducer_, tracks); - const reco::TrackCollection* trackCollection = tracks.product(); - - //get beamspot - edm::Handle beamSpotH; - iEvent.getByLabel(beamspotProducer_, beamSpotH); - reco::TrackBase::Point beamspot = beamSpotH->position(); + auto photonHandle = iEvent.getHandle(photonProducer_); //prepare product auto isoMap = std::make_unique>(); @@ -78,8 +82,8 @@ void EgammaPhotonTkNumIsolationProducer::produce(edm::StreamID sid, ptMin_, maxVtxDist_, drb_, - trackCollection, - beamspot); + &iEvent.get(trackProducer_), + iEvent.get(beamspotProducer_).position()); for (unsigned int i = 0; i < photonHandle->size(); ++i) { int isoValue = myTkIsolation.getIso(&(photonHandle->at(i))).first; diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.h deleted file mode 100644 index 3f70a81bdc0ce..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef EgammaIsolationProducers_EgammaPhotonTkNumIsolationProducer_h -#define EgammaIsolationProducers_EgammaPhotonTkNumIsolationProducer_h - -//***************************************************************************** -// File: EgammaPhotonTkNumIsolationProducer.h -// ---------------------------------------------------------------------------- -// OrigAuth: Matthias Mozer -// Institute: IIHE-VUB -//============================================================================= -//***************************************************************************** - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/global/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -class EgammaPhotonTkNumIsolationProducer : public edm::global::EDProducer<> { -public: - explicit EgammaPhotonTkNumIsolationProducer(const edm::ParameterSet&); - ~EgammaPhotonTkNumIsolationProducer() override; - - void produce(edm::StreamID sid, edm::Event&, const edm::EventSetup&) const override; - -private: - const edm::InputTag photonProducer_; - const edm::InputTag trackProducer_; - const edm::InputTag beamspotProducer_; - - const double ptMin_; - const double intRadiusBarrel_; - const double intRadiusEndcap_; - const double stripBarrel_; - const double stripEndcap_; - const double extRadius_; - const double maxVtxDist_; - const double drb_; -}; - -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaRecHitExtractor.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaRecHitExtractor.cc deleted file mode 100644 index 7a1fd6a760838..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaRecHitExtractor.cc +++ /dev/null @@ -1,242 +0,0 @@ -//***************************************************************************** -// File: EgammaRecHitExtractor.cc -// ---------------------------------------------------------------------------- -// OrigAuth: Matthias Mozer, hacked by Sam Harper (ie the ugly stuff is mine) -// Institute: IIHE-VUB, RAL -//============================================================================= -//***************************************************************************** -//C++ includes -#include -#include - -//ROOT includes -#include - -//CMSSW includes -#include "CommonTools/Utils/interface/StringToEnumValue.h" - -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaRecHitExtractor.h" -#include "DataFormats/DetId/interface/DetId.h" -#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "DataFormats/GeometryVector/interface/GlobalPoint.h" -#include "DataFormats/GeometryVector/interface/GlobalVector.h" -#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "DataFormats/Math/interface/deltaPhi.h" -#include "DataFormats/CaloRecHit/interface/CaloCluster.h" -#include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h" -#include "DataFormats/EgammaReco/interface/BasicCluster.h" -#include "DataFormats/EgammaReco/interface/BasicClusterFwd.h" - -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -using namespace std; -using namespace egammaisolation; -using namespace reco::isodeposit; - -EgammaRecHitExtractor::EgammaRecHitExtractor(const edm::ParameterSet& par, edm::ConsumesCollector& iC) - : etMin_(par.getParameter("etMin")), - energyMin_(par.getParameter("energyMin")), - extRadius_(par.getParameter("extRadius")), - intRadius_(par.getParameter("intRadius")), - intStrip_(par.getParameter("intStrip")), - barrelEcalHitsTag_(par.getParameter("barrelEcalHits")), - endcapEcalHitsTag_(par.getParameter("endcapEcalHits")), - barrelEcalHitsToken_(iC.consumes(barrelEcalHitsTag_)), - endcapEcalHitsToken_(iC.consumes(endcapEcalHitsTag_)), - fakeNegativeDeposit_(par.getParameter("subtractSuperClusterEnergy")), - tryBoth_(par.getParameter("tryBoth")), - vetoClustered_(par.getParameter("vetoClustered")), - sameTag_(false) -//severityLevelCut_(par.getParameter("severityLevelCut")) -//severityRecHitThreshold_(par.getParameter("severityRecHitThreshold")), -//spIdString_(par.getParameter("spikeIdString")), -//spIdThreshold_(par.getParameter("spikeIdThreshold")), -{ - const std::vector flagnamesEB = par.getParameter >("RecHitFlagToBeExcludedEB"); - - const std::vector flagnamesEE = par.getParameter >("RecHitFlagToBeExcludedEE"); - - flagsexclEB_ = StringToEnumValue(flagnamesEB); - - flagsexclEE_ = StringToEnumValue(flagnamesEE); - - const std::vector severitynamesEB = - par.getParameter >("RecHitSeverityToBeExcludedEB"); - - severitiesexclEB_ = StringToEnumValue(severitynamesEB); - - const std::vector severitynamesEE = - par.getParameter >("RecHitSeverityToBeExcludedEE"); - - severitiesexclEE_ = StringToEnumValue(severitynamesEE); - - if ((intRadius_ != 0.0) && (fakeNegativeDeposit_)) { - throw cms::Exception("Configuration Error") << "EgammaRecHitExtractor: " - << "If you use 'subtractSuperClusterEnergy', you *must* set " - "'intRadius' to ZERO; it does not make sense, otherwise."; - } - std::string isoVariable = par.getParameter("isolationVariable"); - if (isoVariable == "et") { - useEt_ = true; - } else if (isoVariable == "energy") { - useEt_ = false; - } else { - throw cms::Exception("Configuration Error") - << "EgammaRecHitExtractor: isolationVariable '" << isoVariable << "' not known. " - << " Supported values are 'et', 'energy'. "; - } - if (endcapEcalHitsTag_.encode() == barrelEcalHitsTag_.encode()) { - sameTag_ = true; - if (tryBoth_) { - edm::LogWarning("EgammaRecHitExtractor") - << "If you have configured 'barrelRecHits' == 'endcapRecHits', so I'm switching 'tryBoth' to FALSE."; - tryBoth_ = false; - } - } -} - -EgammaRecHitExtractor::~EgammaRecHitExtractor() {} - -reco::IsoDeposit EgammaRecHitExtractor::deposit(const edm::Event& iEvent, - const edm::EventSetup& iSetup, - const reco::Candidate& emObject) const { - edm::ESHandle pG; - iSetup.get().get(pG); - - //Get the channel status from the db - //edm::ESHandle chStatus; - //iSetup.get().get(chStatus); - - edm::ESHandle sevlv; - iSetup.get().get(sevlv); - const EcalSeverityLevelAlgo* sevLevel = sevlv.product(); - - const CaloGeometry* caloGeom = pG.product(); - const CaloSubdetectorGeometry* barrelgeom = caloGeom->getSubdetectorGeometry(DetId::Ecal, EcalBarrel); - const CaloSubdetectorGeometry* endcapgeom = caloGeom->getSubdetectorGeometry(DetId::Ecal, EcalEndcap); - - static const std::string metname = "EgammaIsolationAlgos|EgammaRecHitExtractor"; - - //Get barrel ECAL RecHits - edm::Handle barrelEcalRecHitsH; - iEvent.getByToken(barrelEcalHitsToken_, barrelEcalRecHitsH); - - //Get endcap ECAL RecHits - edm::Handle endcapEcalRecHitsH; - iEvent.getByToken(endcapEcalHitsToken_, endcapEcalRecHitsH); - - //define isodeposit starting from candidate - reco::SuperClusterRef sc = emObject.get(); - math::XYZPoint caloPosition = sc->position(); - - Direction candDir(caloPosition.eta(), caloPosition.phi()); - reco::IsoDeposit deposit(candDir); - deposit.setVeto(reco::IsoDeposit::Veto(candDir, intRadius_)); - double sinTheta = sin(2 * atan(exp(-sc->eta()))); - deposit.addCandEnergy(sc->energy() * (useEt_ ? sinTheta : 1.0)); - - // subtract supercluster if desired - double fakeEnergy = -sc->rawEnergy(); - if (fakeNegativeDeposit_) { - deposit.addDeposit(candDir, fakeEnergy * (useEt_ ? sinTheta : 1.0)); // not exactly clean... - } - - // fill rechits - bool inBarrel = sameTag_ || (abs(sc->eta()) < 1.479); //check for barrel. If only one collection is used, use barrel - if (inBarrel || tryBoth_) { - collect(deposit, sc, barrelgeom, caloGeom, *barrelEcalRecHitsH, sevLevel, true); - } - - if ((!inBarrel) || tryBoth_) { - collect(deposit, sc, endcapgeom, caloGeom, *endcapEcalRecHitsH, sevLevel, false); - } - - return deposit; -} - -void EgammaRecHitExtractor::collect(reco::IsoDeposit& deposit, - const reco::SuperClusterRef& sc, - const CaloSubdetectorGeometry* subdet, - const CaloGeometry* caloGeom, - const EcalRecHitCollection& hits, - //const EcalChannelStatus* chStatus, - const EcalSeverityLevelAlgo* sevLevel, - bool barrel) const { - GlobalPoint caloPosition(sc->position().x(), sc->position().y(), sc->position().z()); - CaloSubdetectorGeometry::DetIdSet chosen = subdet->getCells(caloPosition, extRadius_); - EcalRecHitCollection::const_iterator j = hits.end(); - double caloeta = caloPosition.eta(); - double calophi = caloPosition.phi(); - double r2 = intRadius_ * intRadius_; - - std::vector >::const_iterator rhIt; - - for (CaloSubdetectorGeometry::DetIdSet::const_iterator i = chosen.begin(), end = chosen.end(); i != end; ++i) { - j = hits.find(*i); - if (j != hits.end()) { - const GlobalPoint& position = caloGeom->getPosition(*i); - double eta = position.eta(); - double phi = position.phi(); - double energy = j->energy(); - double et = energy * position.perp() / position.mag(); - double phiDiff = reco::deltaPhi(phi, calophi); - - //check if we are supposed to veto clustered and then do so - if (vetoClustered_) { - //Loop over basic clusters: - bool isClustered = false; - for (reco::CaloCluster_iterator bcIt = sc->clustersBegin(); bcIt != sc->clustersEnd(); ++bcIt) { - for (rhIt = (*bcIt)->hitsAndFractions().begin(); rhIt != (*bcIt)->hitsAndFractions().end(); ++rhIt) { - if (rhIt->first == *i) - isClustered = true; - if (isClustered) - break; - } - if (isClustered) - break; - } //end loop over basic clusters - - if (isClustered) - continue; - } //end if removeClustered - - std::vector::const_iterator sit; - int severityFlag = sevLevel->severityLevel(j->detid(), hits); - if (barrel) { - sit = std::find(severitiesexclEB_.begin(), severitiesexclEB_.end(), severityFlag); - if (sit != severitiesexclEB_.end()) - continue; - } else { - sit = std::find(severitiesexclEE_.begin(), severitiesexclEE_.end(), severityFlag); - if (sit != severitiesexclEE_.end()) - continue; - } - - if (barrel) { - // new rechit flag checks - if (!j->checkFlag(EcalRecHit::kGood)) { - if (j->checkFlags(flagsexclEB_)) { - continue; - } - } - } else { - // new rechit flag checks - if (!j->checkFlag(EcalRecHit::kGood)) { - if (j->checkFlags(flagsexclEE_)) { - continue; - } - } - } - - if (et > etMin_ && energy > energyMin_ //Changed to fabs - then changed back to energy - && fabs(eta - caloeta) > intStrip_ && (eta - caloeta) * (eta - caloeta) + phiDiff * phiDiff > r2) { - deposit.addDeposit(Direction(eta, phi), (useEt_ ? et : energy)); - } - } - } -} diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaRecHitExtractor.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaRecHitExtractor.h deleted file mode 100644 index 467b157f21a75..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaRecHitExtractor.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef EgammaIsolationProducers_EgammaRecHitExtractor_h -#define EgammaIsolationProducers_EgammaRecHitExtractor_h -//***************************************************************************** -// File: EgammaRecHitExtractor.h -// ---------------------------------------------------------------------------- -// OrigAuth: Matthias Mozer, adapted from EgammaHcalExtractor by S. Harper -// Institute: IIHE-VUB, RAL -//============================================================================= -//***************************************************************************** - -//C++ includes -#include -#include - -//CMSSW includes -#include "FWCore/Framework/interface/ESHandle.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractor.h" -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" - -#include "CondFormats/EcalObjects/interface/EcalChannelStatus.h" -#include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h" - -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" - -namespace egammaisolation { - - class EgammaRecHitExtractor : public reco::isodeposit::IsoDepositExtractor { - public: - EgammaRecHitExtractor(const edm::ParameterSet& par, edm::ConsumesCollector&& iC) : EgammaRecHitExtractor(par, iC) {} - EgammaRecHitExtractor(const edm::ParameterSet& par, edm::ConsumesCollector& iC); - ~EgammaRecHitExtractor() override; - void fillVetos(const edm::Event& ev, const edm::EventSetup& evSetup, const reco::TrackCollection& tracks) override { - } - reco::IsoDeposit deposit(const edm::Event& ev, - const edm::EventSetup& evSetup, - const reco::Track& track) const override { - throw cms::Exception("Configuration Error") - << "This extractor " << (typeid(this).name()) << " is not made for tracks"; - } - reco::IsoDeposit deposit(const edm::Event& ev, - const edm::EventSetup& evSetup, - const reco::Candidate& c) const override; - - private: - void collect(reco::IsoDeposit& deposit, - const reco::SuperClusterRef& sc, - const CaloSubdetectorGeometry* subdet, - const CaloGeometry* caloGeom, - const EcalRecHitCollection& hits, - //const EcalChannelStatus* chStatus, - const EcalSeverityLevelAlgo* sevLevel, - bool barrel) const; - - double etMin_; - double energyMin_; - double extRadius_; - double intRadius_; - double intStrip_; - edm::InputTag barrelEcalHitsTag_; - edm::InputTag endcapEcalHitsTag_; - edm::EDGetTokenT barrelEcalHitsToken_; - edm::EDGetTokenT endcapEcalHitsToken_; - bool fakeNegativeDeposit_; - bool tryBoth_; - bool useEt_; - bool vetoClustered_; - bool sameTag_; - //int severityLevelCut_; - //float severityRecHitThreshold_; - //std::string spIdString_; - //float spIdThreshold_; - //EcalSeverityLevelAlgo::SpikeId spId_; - //std::vector v_chstatus_; - std::vector severitiesexclEB_; - std::vector severitiesexclEE_; - std::vector flagsexclEB_; - std::vector flagsexclEE_; - }; -} // namespace egammaisolation -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerExtractor.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerExtractor.cc deleted file mode 100644 index 40e5e6230957c..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerExtractor.cc +++ /dev/null @@ -1,79 +0,0 @@ -//***************************************************************************** -// File: EgammaTowerExtractor.cc -// ---------------------------------------------------------------------------- -// OrigAuth: Matthias Mozer -// Institute: IIHE-VUB -//============================================================================= -//***************************************************************************** -//C++ includes -#include -#include -#include - -//ROOT includes -#include - -//CMSSW includes -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerExtractor.h" -#include "DataFormats/GeometryVector/interface/GlobalPoint.h" -#include "DataFormats/GeometryVector/interface/GlobalVector.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include "DataFormats/CaloTowers/interface/CaloTower.h" - -using namespace ROOT::Math::VectorUtil; - -using namespace egammaisolation; -using namespace reco::isodeposit; - -EgammaTowerExtractor::~EgammaTowerExtractor() {} - -reco::IsoDeposit EgammaTowerExtractor::deposit(const edm::Event &iEvent, - const edm::EventSetup &iSetup, - const reco::Candidate &emObject) const { - edm::Handle towercollectionH; - iEvent.getByToken(caloTowerToken, towercollectionH); - - //Take the SC position - reco::SuperClusterRef sc = emObject.get(); - math::XYZPoint caloPosition = sc->position(); - - Direction candDir(caloPosition.eta(), caloPosition.phi()); - reco::IsoDeposit deposit(candDir); - deposit.setVeto(reco::IsoDeposit::Veto(candDir, intRadius_)); - deposit.addCandEnergy(sc->energy() * sin(2 * atan(exp(-sc->eta())))); - - //loop over tracks - for (CaloTowerCollection::const_iterator trItr = towercollectionH->begin(), trEnd = towercollectionH->end(); - trItr != trEnd; - ++trItr) { - double depEt = 0; - //the hcal can be seperated into different depths - //currently it is setup to check that the depth is valid in constructor - //if the depth is not valid it fails gracefully - //small bug fix, hadEnergyHeInnerLater returns zero for towers which are only depth 1 - //but we want Depth1 isolation to include these so we have to manually check for this - if (depth_ == AllDepths) - depEt = trItr->hadEt(); - else if (depth_ == Depth1) - depEt = trItr->ietaAbs() < 18 || trItr->ietaAbs() > 29 - ? trItr->hadEt() - : trItr->hadEnergyHeInnerLayer() * sin(trItr->p4().theta()); - else if (depth_ == Depth2) - depEt = trItr->hadEnergyHeOuterLayer() * sin(trItr->p4().theta()); - - if (depEt < etLow_) - continue; - - Direction towerDir(trItr->eta(), trItr->phi()); - double dR2 = candDir.deltaR2(towerDir); - - if (dR2 < extRadius2_) { - deposit.addDeposit(towerDir, depEt); - } - - } //end loop over tracks - - return deposit; -} diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerExtractor.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerExtractor.h deleted file mode 100644 index 3e0d82974f8ce..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerExtractor.h +++ /dev/null @@ -1,79 +0,0 @@ -#ifndef EgammaTowerIsolation_h -#define EgammaTowerIsolation_h - -//***************************************************************************** -// File: EgammaTowerExtractor.h -// ---------------------------------------------------------------------------- -// OrigAuth: Matthias Mozer -// Institute: IIHE-VUB -//============================================================================= -//***************************************************************************** - -//C++ includes -#include -#include - -//CMSSW includes -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" - -#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractor.h" -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" - -namespace egammaisolation { - - class EgammaTowerExtractor : public reco::isodeposit::IsoDepositExtractor { - public: - enum HcalDepth { AllDepths = -1, Undefined = 0, Depth1 = 1, Depth2 = 2 }; - - public: - EgammaTowerExtractor(const edm::ParameterSet& par, edm::ConsumesCollector&& iC) : EgammaTowerExtractor(par, iC) {} - EgammaTowerExtractor(const edm::ParameterSet& par, edm::ConsumesCollector& iC) - : extRadius2_(par.getParameter("extRadius")), - intRadius_(par.getParameter("intRadius")), - etLow_(par.getParameter("etMin")), - caloTowerToken(iC.consumes(par.getParameter("caloTowers"))), - depth_(par.getParameter("hcalDepth")) { - extRadius2_ *= extRadius2_; - //lets just check we have a valid depth - //should we throw an exception or just warn and then fail gracefully later? - if (depth_ != AllDepths && depth_ != Depth1 && depth_ != Depth2) { - throw cms::Exception("Configuration Error") - << "hcalDepth passed to EgammaTowerExtractor is invalid " << std::endl; - } - } - - ~EgammaTowerExtractor() override; - - void fillVetos(const edm::Event& ev, const edm::EventSetup& evSetup, const reco::TrackCollection& tracks) override { - } - reco::IsoDeposit deposit(const edm::Event& ev, - const edm::EventSetup& evSetup, - const reco::Track& track) const override { - throw cms::Exception("Configuration Error") - << "This extractor " << (typeid(this).name()) << " is not made for tracks"; - } - reco::IsoDeposit deposit(const edm::Event& ev, - const edm::EventSetup& evSetup, - const reco::Candidate& c) const override; - - private: - double extRadius2_; - double intRadius_; - double etLow_; - - edm::EDGetTokenT caloTowerToken; - int depth_; - //const CaloTowerCollection *towercollection_ ; - }; -} // namespace egammaisolation -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.cc index f19210fab8363..ccb414ae07344 100644 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.cc +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.cc @@ -6,57 +6,60 @@ //============================================================================= //***************************************************************************** -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.h" - -// Framework -#include "DataFormats/Common/interface/Handle.h" - -#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" #include "DataFormats/Candidate/interface/CandAssociation.h" +#include "DataFormats/Candidate/interface/Candidate.h" #include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h" -#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" +class EgammaTowerIsolationProducer : public edm::stream::EDProducer<> { +public: + explicit EgammaTowerIsolationProducer(const edm::ParameterSet&); -EgammaTowerIsolationProducer::EgammaTowerIsolationProducer(const edm::ParameterSet& config) : conf_(config) { - // use configuration file to setup input/output collection names - emObjectProducer_ = conf_.getParameter("emObjectProducer"); + void produce(edm::Event&, const edm::EventSetup&) override; - towerProducer_ = conf_.getParameter("towerProducer"); +private: + // ----------member data --------------------------- - egHcalIsoPtMin_ = conf_.getParameter("etMin"); - egHcalIsoConeSizeIn_ = conf_.getParameter("intRadius"); - egHcalIsoConeSizeOut_ = conf_.getParameter("extRadius"); - egHcalDepth_ = conf_.getParameter("Depth"); + const edm::EDGetTokenT> emObjectProducer_; + const edm::EDGetTokenT towerProducer_; - //register your products - produces>(); -} + const edm::EDPutTokenT> putToken_; -EgammaTowerIsolationProducer::~EgammaTowerIsolationProducer() {} + const double egHcalIsoPtMin_; + const double egHcalIsoConeSizeOut_; + const double egHcalIsoConeSizeIn_; + const signed int egHcalDepth_; +}; -// -// member functions -// +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(EgammaTowerIsolationProducer); + +EgammaTowerIsolationProducer::EgammaTowerIsolationProducer(const edm::ParameterSet& config) + : emObjectProducer_{consumes(config.getParameter("emObjectProducer"))}, + towerProducer_{consumes(config.getParameter("towerProducer"))}, + putToken_{produces>()}, + egHcalIsoPtMin_{config.getParameter("etMin")}, + egHcalIsoConeSizeOut_{config.getParameter("extRadius")}, + egHcalIsoConeSizeIn_{config.getParameter("intRadius")}, + egHcalDepth_{config.getParameter("Depth")} {} -// ------------ method called to produce the data ------------ void EgammaTowerIsolationProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { // Get the filtered objects - edm::Handle> emObjectHandle; - iEvent.getByLabel(emObjectProducer_, emObjectHandle); + auto emObjectHandle = iEvent.getHandle(emObjectProducer_); // Get the barrel hcal hits - edm::Handle towerHandle; - iEvent.getByLabel(towerProducer_, towerHandle); - const CaloTowerCollection* towers = towerHandle.product(); + auto const& towers = iEvent.get(towerProducer_); - auto isoMap = std::make_unique>(); - edm::ValueMap::Filler filler(*isoMap); + edm::ValueMap isoMap; + edm::ValueMap::Filler filler(isoMap); std::vector retV(emObjectHandle->size(), 0); EgammaTowerIsolation myHadIsolation( - egHcalIsoConeSizeOut_, egHcalIsoConeSizeIn_, egHcalIsoPtMin_, egHcalDepth_, towers); + egHcalIsoConeSizeOut_, egHcalIsoConeSizeIn_, egHcalIsoPtMin_, egHcalDepth_, &towers); for (size_t i = 0; i < emObjectHandle->size(); ++i) { double isoValue = myHadIsolation.getTowerEtSum(&(emObjectHandle->at(i))); @@ -65,8 +68,5 @@ void EgammaTowerIsolationProducer::produce(edm::Event& iEvent, const edm::EventS filler.insert(emObjectHandle, retV.begin(), retV.end()); filler.fill(); - iEvent.put(std::move(isoMap)); + iEvent.emplace(putToken_, std::move(isoMap)); } - -//define this as a plug-in -//DEFINE_FWK_MODULE(EgammaTowerIsolationProducer); diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.h deleted file mode 100644 index 4769b5f55d603..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef EgammaIsolationProducers_EgammaTowerIsolationProducer_h -#define EgammaIsolationProducers_EgammaTowerIsolationProducer_h - -//***************************************************************************** -// File: EgammaTowerIsolationProducer.h -// ---------------------------------------------------------------------------- -// OrigAuth: Matthias Mozer -// Institute: IIHE-VUB -//============================================================================= -//***************************************************************************** - -// -*- C++ -*- -// - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h" - -// -// class declaration -// - -class EgammaTowerIsolationProducer : public edm::stream::EDProducer<> { -public: - explicit EgammaTowerIsolationProducer(const edm::ParameterSet&); - ~EgammaTowerIsolationProducer() override; - - void produce(edm::Event&, const edm::EventSetup&) override; - -private: - // ----------member data --------------------------- - - edm::InputTag emObjectProducer_; - edm::InputTag towerProducer_; - - double egHcalIsoPtMin_; - double egHcalIsoConeSizeOut_; - double egHcalIsoConeSizeIn_; - signed int egHcalDepth_; - - edm::ParameterSet conf_; -}; - -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTrackExtractor.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTrackExtractor.cc deleted file mode 100644 index 16d871a7ed32b..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTrackExtractor.cc +++ /dev/null @@ -1,169 +0,0 @@ -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTrackExtractor.h" - -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h" -#include "DataFormats/RecoCandidate/interface/IsoDepositDirection.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTrackSelector.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" -#include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "CommonTools/Statistics/interface/ChiSquaredProbability.h" - -using namespace edm; -using namespace std; -using namespace reco; -using namespace egammaisolation; -using reco::isodeposit::Direction; - -EgammaTrackExtractor::EgammaTrackExtractor(const ParameterSet& par, edm::ConsumesCollector& iC) - : theTrackCollectionToken(iC.consumes >(par.getParameter("inputTrackCollection"))), - theDepositLabel(par.getUntrackedParameter("DepositLabel")), - theDiff_r(par.getParameter("Diff_r")), - theDiff_z(par.getParameter("Diff_z")), - theDR_Max(par.getParameter("DR_Max")), - theDR_Veto(par.getParameter("DR_Veto")), - theBeamlineOption(par.getParameter("BeamlineOption")), - theBeamSpotToken(iC.mayConsume(par.getParameter("BeamSpotLabel"))), - theNHits_Min(par.getParameter("NHits_Min")), - theChi2Ndof_Max(par.getParameter("Chi2Ndof_Max")), - theChi2Prob_Min(par.getParameter("Chi2Prob_Min")), - thePt_Min(par.getParameter("Pt_Min")), - dzOptionString(par.getParameter("dzOption")) { - if (!dzOptionString.compare("dz")) - dzOption = EgammaTrackSelector::dz; - else if (!dzOptionString.compare("vz")) - dzOption = EgammaTrackSelector::vz; - else if (!dzOptionString.compare("bs")) - dzOption = EgammaTrackSelector::bs; - else if (!dzOptionString.compare("vtx")) - dzOption = EgammaTrackSelector::vtx; - else - dzOption = EgammaTrackSelector::dz; -} - -reco::IsoDeposit::Vetos EgammaTrackExtractor::vetos(const edm::Event& ev, - const edm::EventSetup& evSetup, - const reco::Track& track) const { - reco::isodeposit::Direction dir(track.eta(), track.phi()); - return reco::IsoDeposit::Vetos(1, veto(dir)); -} - -reco::IsoDeposit::Veto EgammaTrackExtractor::veto(const reco::IsoDeposit::Direction& dir) const { - reco::IsoDeposit::Veto result; - result.vetoDir = dir; - result.dR = theDR_Veto; - return result; -} - -IsoDeposit EgammaTrackExtractor::deposit(const Event& event, - const EventSetup& eventSetup, - const Candidate& candTk) const { - static const std::string metname = "EgammaIsolationAlgos|EgammaTrackExtractor"; - - reco::isodeposit::Direction candDir; - double dzCut = 0; - - reco::TrackBase::Point beamPoint(0, 0, 0); - if (theBeamlineOption == "BeamSpotFromEvent") { - //pick beamSpot - reco::BeamSpot beamSpot; - edm::Handle beamSpotH; - - event.getByToken(theBeamSpotToken, beamSpotH); - - if (beamSpotH.isValid()) { - beamPoint = beamSpotH->position(); - } - } - - Handle > tracksH; - event.getByToken(theTrackCollectionToken, tracksH); - - if (candTk.isElectron()) { - const reco::GsfElectron* elec = dynamic_cast(&candTk); - candDir = reco::isodeposit::Direction(elec->gsfTrack()->eta(), elec->gsfTrack()->phi()); - } else { - candDir = reco::isodeposit::Direction(candTk.eta(), candTk.phi()); - } - - IsoDeposit deposit(candDir); - deposit.setVeto(veto(candDir)); - deposit.addCandEnergy(candTk.et()); - - View::const_iterator itrTr = tracksH->begin(); - View::const_iterator trEnd = tracksH->end(); - for (itrTr = tracksH->begin(); itrTr != trEnd; ++itrTr) { - if (candDir.deltaR(reco::isodeposit::Direction(itrTr->eta(), itrTr->phi())) > theDR_Max) - continue; - - if (itrTr->normalizedChi2() > theChi2Ndof_Max) - continue; - - if (itrTr->pt() < thePt_Min) - continue; - - if (theChi2Prob_Min > 0 && ChiSquaredProbability(itrTr->chi2(), itrTr->ndof()) < theChi2Prob_Min) - continue; - - if (theNHits_Min > 0 && itrTr->numberOfValidHits() < theNHits_Min) - continue; - - if (candTk.isElectron()) { - const reco::GsfElectron* elec = dynamic_cast(&candTk); - switch (dzOption) { - case EgammaTrackSelector::dz: - dzCut = elec->gsfTrack()->dz() - itrTr->dz(); - break; - case EgammaTrackSelector::vz: - dzCut = elec->gsfTrack()->vz() - itrTr->vz(); - break; - case EgammaTrackSelector::bs: - dzCut = elec->gsfTrack()->dz(beamPoint) - itrTr->dz(beamPoint); - break; - case EgammaTrackSelector::vtx: - dzCut = itrTr->dz(elec->gsfTrack()->vertex()); - break; - default: - dzCut = elec->gsfTrack()->vz() - itrTr->vz(); - break; - } - } else { - switch (dzOption) { - case EgammaTrackSelector::dz: - dzCut = (*itrTr).dz() - candTk.vertex().z(); - break; - case EgammaTrackSelector::vz: - dzCut = (*itrTr).vz() - candTk.vertex().z(); - break; - case EgammaTrackSelector::bs: - dzCut = (*itrTr).dz(beamPoint) - candTk.vertex().z(); - break; - case EgammaTrackSelector::vtx: - dzCut = (*itrTr).dz(candTk.vertex()); - break; - default: - dzCut = (*itrTr).vz() - candTk.vertex().z(); - break; - } - } - - if (fabs(dzCut) > theDiff_z) - continue; - - if (fabs(itrTr->dxy(beamPoint)) > theDiff_r) - continue; - - deposit.addDeposit(reco::isodeposit::Direction(itrTr->eta(), itrTr->phi()), itrTr->pt()); - } - - return deposit; -} diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTrackExtractor.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTrackExtractor.h deleted file mode 100644 index 4e6874e4e6775..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTrackExtractor.h +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef EgammaIsolationProducers_EgammaTrackExtractor_H -#define EgammaIsolationProducers_EgammaTrackExtractor_H - -#include -#include - -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "DataFormats/Common/interface/View.h" -#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractor.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -namespace egammaisolation { - - class EgammaTrackExtractor : public reco::isodeposit::IsoDepositExtractor { - public: - EgammaTrackExtractor(){}; - EgammaTrackExtractor(const edm::ParameterSet& par, edm::ConsumesCollector&& iC) : EgammaTrackExtractor(par, iC) {} - EgammaTrackExtractor(const edm::ParameterSet& par, edm::ConsumesCollector& iC); - - ~EgammaTrackExtractor() override {} - - void fillVetos(const edm::Event& ev, const edm::EventSetup& evSetup, const reco::TrackCollection& track) override {} - - virtual reco::IsoDeposit::Vetos vetos(const edm::Event& ev, - const edm::EventSetup& evSetup, - const reco::Track& track) const; - - reco::IsoDeposit deposit(const edm::Event& ev, - const edm::EventSetup& evSetup, - const reco::Track& muon) const override { - edm::LogWarning("EgammaIsolationAlgos|EgammaTrackExtractor") - << "This Function is not implemented, bad IsoDeposit Returned"; - return reco::IsoDeposit(reco::isodeposit::Direction(1, 1)); - } - - reco::IsoDeposit deposit(const edm::Event& ev, - const edm::EventSetup& evSetup, - const reco::Candidate& muon) const override; - - private: - reco::IsoDeposit::Veto veto(const reco::IsoDeposit::Direction& dir) const; - - private: - // Parameter set - edm::EDGetTokenT > theTrackCollectionToken; //! Track Collection Label - std::string theDepositLabel; //! name for deposit - double minCandEt_; //! minimum candidate et - double theDiff_r; //! transverse distance to vertex - double theDiff_z; //! z distance to vertex - double theDR_Max; //! Maximum cone angle for deposits - double theDR_Veto; //! Veto cone angle - std::string theBeamlineOption; //! "NONE", "BeamSpotFromEvent" - edm::InputTag barrelEcalHitsTag_; - edm::InputTag endcapEcalHitsTag_; - edm::EDGetTokenT theBeamSpotToken; //! BeamSpot name - unsigned int theNHits_Min; //! trk.numberOfValidHits >= theNHits_Min - double theChi2Ndof_Max; //! trk.normalizedChi2 < theChi2Ndof_Max - double theChi2Prob_Min; //! ChiSquaredProbability(trk.chi2,trk.ndof) > theChi2Prob_Min - double thePt_Min; //! min track pt to include into iso deposit - std::vector paramForIsolBarrel_; //! Barrel requirements to determine if isolated for selective filling - std::vector paramForIsolEndcap_; //! Endcap requirements to determine if isolated for selective filling - std::string dzOptionString; - int dzOption; - }; - -} // namespace egammaisolation - -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EleIsoDetIdCollectionProducer.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EleIsoDetIdCollectionProducer.cc deleted file mode 100644 index 0dd33d9d539a3..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EleIsoDetIdCollectionProducer.cc +++ /dev/null @@ -1,160 +0,0 @@ -#include "RecoEgamma/EgammaIsolationAlgos/plugins/EleIsoDetIdCollectionProducer.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "CommonTools/Utils/interface/StringToEnumValue.h" - -#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" - -#include "DataFormats/GeometryVector/interface/GlobalPoint.h" -#include "RecoCaloTools/Selectors/interface/CaloDualConeSelector.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" - -#include "DataFormats/EcalDetId/interface/EBDetId.h" -#include "DataFormats/EcalDetId/interface/EEDetId.h" - -#include "DataFormats/DetId/interface/DetIdCollection.h" - -#include "CondFormats/EcalObjects/interface/EcalChannelStatus.h" -#include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h" - -EleIsoDetIdCollectionProducer::EleIsoDetIdCollectionProducer(const edm::ParameterSet& iConfig) - : recHitsToken_(consumes(iConfig.getParameter("recHitsLabel"))), - emObjectToken_(consumes(iConfig.getParameter("emObjectLabel"))), - caloGeometryToken_(esConsumes()), - sevLvToken_(esConsumes()), - recHitsLabel_(iConfig.getParameter("recHitsLabel")), - emObjectLabel_(iConfig.getParameter("emObjectLabel")), - energyCut_(iConfig.getParameter("energyCut")), - etCut_(iConfig.getParameter("etCut")), - etCandCut_(iConfig.getParameter("etCandCut")), - outerRadius_(iConfig.getParameter("outerRadius")), - innerRadius_(iConfig.getParameter("innerRadius")), - interestingDetIdCollection_(iConfig.getParameter("interestingDetIdCollection")) { - const std::vector flagnamesEB = - iConfig.getParameter >("RecHitFlagToBeExcludedEB"); - - const std::vector flagnamesEE = - iConfig.getParameter >("RecHitFlagToBeExcludedEE"); - - flagsexclEB_ = StringToEnumValue(flagnamesEB); - - flagsexclEE_ = StringToEnumValue(flagnamesEE); - - const std::vector severitynamesEB = - iConfig.getParameter >("RecHitSeverityToBeExcludedEB"); - - severitiesexclEB_ = StringToEnumValue(severitynamesEB); - - const std::vector severitynamesEE = - iConfig.getParameter >("RecHitSeverityToBeExcludedEE"); - - severitiesexclEE_ = StringToEnumValue(severitynamesEE); - - //register your products - produces(interestingDetIdCollection_); -} - -EleIsoDetIdCollectionProducer::~EleIsoDetIdCollectionProducer() {} - -void EleIsoDetIdCollectionProducer::beginJob() {} - -// ------------ method called to produce the data ------------ -void EleIsoDetIdCollectionProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - using namespace std; - - //Get EM Object - Handle emObjectH; - iEvent.getByToken(emObjectToken_, emObjectH); - - // take EcalRecHits - Handle recHitsH; - iEvent.getByToken(recHitsToken_, recHitsH); - - edm::ESHandle pG = iSetup.getHandle(caloGeometryToken_); - const CaloGeometry* caloGeom = pG.product(); - - //Get the channel status from the db - //edm::ESHandle chStatus; - //iSetup.get().get(chStatus); - - edm::ESHandle sevlv = iSetup.getHandle(sevLvToken_); - const EcalSeverityLevelAlgo* sevLevel = sevlv.product(); - - CaloDualConeSelector* doubleConeSel_ = nullptr; - if (recHitsLabel_.instance() == "EcalRecHitsEB") - doubleConeSel_ = new CaloDualConeSelector(innerRadius_, outerRadius_, &*pG, DetId::Ecal, EcalBarrel); - else if (recHitsLabel_.instance() == "EcalRecHitsEE") - doubleConeSel_ = new CaloDualConeSelector(innerRadius_, outerRadius_, &*pG, DetId::Ecal, EcalEndcap); - - //Create empty output collections - auto detIdCollection = std::make_unique(); - - reco::GsfElectronCollection::const_iterator emObj; - if (doubleConeSel_) { //if cone selector was created - for (emObj = emObjectH->begin(); emObj != emObjectH->end(); emObj++) { //Loop over candidates - - if (emObj->et() < etCandCut_) - continue; //don't calculate if object hasn't enough energy - - GlobalPoint pclu(emObj->caloPosition().x(), emObj->caloPosition().y(), emObj->caloPosition().z()); - doubleConeSel_->selectCallback(pclu, *recHitsH, [&](const EcalRecHit& recIt) { - if (recIt.energy() < energyCut_) - return; //dont fill if below E noise value - - double et = - recIt.energy() * caloGeom->getPosition(recIt.detid()).perp() / caloGeom->getPosition(recIt.detid()).mag(); - - bool isBarrel = false; - if (fabs(caloGeom->getPosition(recIt.detid()).eta() < 1.479)) - isBarrel = true; - - if (et < etCut_) - return; //dont fill if below ET noise value - - std::vector::const_iterator sit; - int severityFlag = sevLevel->severityLevel(recIt.detid(), *recHitsH); - if (isBarrel) { - sit = std::find(severitiesexclEB_.begin(), severitiesexclEB_.end(), severityFlag); - if (sit != severitiesexclEB_.end()) - return; - } else { - sit = std::find(severitiesexclEE_.begin(), severitiesexclEE_.end(), severityFlag); - if (sit != severitiesexclEE_.end()) - return; - } - - if (isBarrel) { - // new rechit flag checks - if (!(recIt.checkFlag(EcalRecHit::kGood))) { - if (recIt.checkFlags(flagsexclEB_)) { - return; - } - } - } else { - // new rechit flag checks - if (!(recIt.checkFlag(EcalRecHit::kGood))) { - if (recIt.checkFlags(flagsexclEE_)) { - return; - } - } - } - - if (std::find(detIdCollection->begin(), detIdCollection->end(), recIt.detid()) == detIdCollection->end()) - detIdCollection->push_back(recIt.detid()); - }); //end rechits - - } //end candidates - - delete doubleConeSel_; - } //end if cone selector was created - - iEvent.put(std::move(detIdCollection), interestingDetIdCollection_); -} diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EleIsoDetIdCollectionProducer.h b/RecoEgamma/EgammaIsolationAlgos/plugins/EleIsoDetIdCollectionProducer.h deleted file mode 100644 index 113b2b29f5b3e..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EleIsoDetIdCollectionProducer.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef _ELEISODETIDCOLLECTIONPRODUCER_H -#define _ELEISODETIDCOLLECTIONPRODUCER_H - -// -*- C++ -*- -// -// Package: EleIsoDetIdCollectionProducer -// Class: EleIsoDetIdCollectionProducer -// -/**\class EleIsoDetIdCollectionProducer -Original author: Matthew LeBourgeois PH/CMG -Modified from : -RecoEcal/EgammaClusterProducers/{src,interface}/InterestingDetIdCollectionProducer.{h,cc} -by Paolo Meridiani PH/CMG - -Implementation: - -*/ - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Utilities/interface/ESGetToken.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" - -class CaloTopology; - -class EleIsoDetIdCollectionProducer : public edm::stream::EDProducer<> { -public: - //! ctor - explicit EleIsoDetIdCollectionProducer(const edm::ParameterSet &); - ~EleIsoDetIdCollectionProducer() override; - void beginJob(); - //! producer - void produce(edm::Event &, const edm::EventSetup &) override; - -private: - // ----------member data --------------------------- - edm::EDGetToken recHitsToken_; - edm::EDGetToken emObjectToken_; - edm::ESGetToken caloGeometryToken_; - edm::ESGetToken sevLvToken_; - edm::InputTag recHitsLabel_; - edm::InputTag emObjectLabel_; - double energyCut_; - double etCut_; - double etCandCut_; - double outerRadius_; - double innerRadius_; - std::string interestingDetIdCollection_; - - std::vector severitiesexclEB_; - std::vector severitiesexclEE_; - std::vector flagsexclEB_; - std::vector flagsexclEE_; -}; - -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/GamIsoDetIdCollectionProducer.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/GamIsoDetIdCollectionProducer.cc deleted file mode 100644 index 46e1847859271..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/GamIsoDetIdCollectionProducer.cc +++ /dev/null @@ -1,159 +0,0 @@ -#include "RecoEgamma/EgammaIsolationAlgos/plugins/GamIsoDetIdCollectionProducer.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "CommonTools/Utils/interface/StringToEnumValue.h" - -#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" - -#include "DataFormats/GeometryVector/interface/GlobalPoint.h" -#include "RecoCaloTools/Selectors/interface/CaloDualConeSelector.h" -#include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" - -#include "DataFormats/EcalDetId/interface/EBDetId.h" -#include "DataFormats/EcalDetId/interface/EEDetId.h" - -#include "DataFormats/DetId/interface/DetIdCollection.h" - -#include "CondFormats/EcalObjects/interface/EcalChannelStatus.h" -#include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h" - -GamIsoDetIdCollectionProducer::GamIsoDetIdCollectionProducer(const edm::ParameterSet& iConfig) - : recHitsToken_(consumes(iConfig.getParameter("recHitsLabel"))), - emObjectToken_(consumes(iConfig.getParameter("emObjectLabel"))), - caloGeometryToken_(esConsumes()), - sevLvToken_(esConsumes()), - //the labels are still used to decide if its endcap or barrel... - recHitsLabel_(iConfig.getParameter("recHitsLabel")), - emObjectLabel_(iConfig.getParameter("emObjectLabel")), - energyCut_(iConfig.getParameter("energyCut")), - etCut_(iConfig.getParameter("etCut")), - etCandCut_(iConfig.getParameter("etCandCut")), - outerRadius_(iConfig.getParameter("outerRadius")), - innerRadius_(iConfig.getParameter("innerRadius")), - interestingDetIdCollection_(iConfig.getParameter("interestingDetIdCollection")) { - const std::vector flagnamesEB = - iConfig.getParameter >("RecHitFlagToBeExcludedEB"); - - const std::vector flagnamesEE = - iConfig.getParameter >("RecHitFlagToBeExcludedEE"); - - flagsexclEB_ = StringToEnumValue(flagnamesEB); - - flagsexclEE_ = StringToEnumValue(flagnamesEE); - - const std::vector severitynamesEB = - iConfig.getParameter >("RecHitSeverityToBeExcludedEB"); - - severitiesexclEB_ = StringToEnumValue(severitynamesEB); - - const std::vector severitynamesEE = - iConfig.getParameter >("RecHitSeverityToBeExcludedEE"); - - severitiesexclEE_ = StringToEnumValue(severitynamesEE); - - //register your products - produces(interestingDetIdCollection_); -} - -GamIsoDetIdCollectionProducer::~GamIsoDetIdCollectionProducer() {} - -void GamIsoDetIdCollectionProducer::beginJob() {} - -// ------------ method called to produce the data ------------ -void GamIsoDetIdCollectionProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - using namespace std; - - //Get EM Object - Handle emObjectH; - iEvent.getByToken(emObjectToken_, emObjectH); - - // take EcalRecHits - Handle recHitsH; - iEvent.getByToken(recHitsToken_, recHitsH); - - edm::ESHandle pG = iSetup.getHandle(caloGeometryToken_); - const CaloGeometry* caloGeom = pG.product(); - - edm::ESHandle sevlv = iSetup.getHandle(sevLvToken_); - const EcalSeverityLevelAlgo* sevLevel = sevlv.product(); - - CaloDualConeSelector* doubleConeSel_ = nullptr; - if (recHitsLabel_.instance() == "EcalRecHitsEB") - doubleConeSel_ = new CaloDualConeSelector(innerRadius_, outerRadius_, &*pG, DetId::Ecal, EcalBarrel); - else if (recHitsLabel_.instance() == "EcalRecHitsEE") - doubleConeSel_ = new CaloDualConeSelector(innerRadius_, outerRadius_, &*pG, DetId::Ecal, EcalEndcap); - - //Create empty output collections - auto detIdCollection = std::make_unique(); - - reco::PhotonCollection::const_iterator emObj; - if (doubleConeSel_) { //if cone selector was created - for (emObj = emObjectH->begin(); emObj != emObjectH->end(); emObj++) { //Loop over candidates - - if (emObj->et() < etCandCut_) - continue; - - GlobalPoint pclu(emObj->caloPosition().x(), emObj->caloPosition().y(), emObj->caloPosition().z()); - doubleConeSel_->selectCallback(pclu, *recHitsH, [&](const EcalRecHit& recHitRef) { - const EcalRecHit* recIt = &recHitRef; - - if ((recIt->energy()) < energyCut_) - return; //dont fill if below E noise value - - double et = recIt->energy() * caloGeom->getPosition(recIt->detid()).perp() / - caloGeom->getPosition(recIt->detid()).mag(); - - if (et < etCut_) - return; //dont fill if below ET noise value - - bool isBarrel = false; - if (fabs(caloGeom->getPosition(recIt->detid()).eta() < 1.479)) - isBarrel = true; - - int severityFlag = sevLevel->severityLevel(recIt->detid(), *recHitsH); - std::vector::const_iterator sit; - if (isBarrel) { - sit = std::find(severitiesexclEB_.begin(), severitiesexclEB_.end(), severityFlag); - if (sit != severitiesexclEB_.end()) - return; - } else { - sit = std::find(severitiesexclEE_.begin(), severitiesexclEE_.end(), severityFlag); - if (sit != severitiesexclEE_.end()) - return; - } - - if (isBarrel) { - // new rechit flag checks - if (!recIt->checkFlag(EcalRecHit::kGood)) { - if (recIt->checkFlags(flagsexclEB_)) { - return; - } - } - } else { - // new rechit flag checks - if (!recIt->checkFlag(EcalRecHit::kGood)) { - if (recIt->checkFlags(flagsexclEE_)) { - return; - } - } - } - - if (std::find(detIdCollection->begin(), detIdCollection->end(), recIt->detid()) == detIdCollection->end()) - detIdCollection->push_back(recIt->detid()); - }); //end rechits - - } //end candidates - - delete doubleConeSel_; - } //end if cone selector was created - - iEvent.put(std::move(detIdCollection), interestingDetIdCollection_); -} diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/GamIsoDetIdCollectionProducer.h b/RecoEgamma/EgammaIsolationAlgos/plugins/GamIsoDetIdCollectionProducer.h deleted file mode 100644 index e764cd015cd1c..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/GamIsoDetIdCollectionProducer.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef _GAMISODETIDCOLLECTIONPRODUCER_H -#define _GAMISODETIDCOLLECTIONPRODUCER_H - -// -*- C++ -*- -// -// Package: GamIsoDetIdCollectionProducer -// Class: GamIsoDetIdCollectionProducer -// -/**\class GamIsoDetIdCollectionProducer -Original author: Matthew LeBourgeois PH/CMG -Modified from : -RecoEcal/EgammaClusterProducers/{src,interface}/InterestingDetIdCollectionProducer.{h,cc} -by Paolo Meridiani PH/CMG - -Implementation: - -*/ - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" -#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" -#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" - -class CaloTopology; - -class GamIsoDetIdCollectionProducer : public edm::stream::EDProducer<> { -public: - //! ctor - explicit GamIsoDetIdCollectionProducer(const edm::ParameterSet &); - ~GamIsoDetIdCollectionProducer() override; - void beginJob(); - //! producer - void produce(edm::Event &, const edm::EventSetup &) override; - -private: - // ----------member data --------------------------- - edm::EDGetTokenT recHitsToken_; - edm::EDGetTokenT emObjectToken_; - edm::ESGetToken caloGeometryToken_; - edm::ESGetToken sevLvToken_; - edm::InputTag recHitsLabel_; - edm::InputTag emObjectLabel_; - double energyCut_; - double etCut_; - double etCandCut_; - double outerRadius_; - double innerRadius_; - std::string interestingDetIdCollection_; - - std::vector severitiesexclEB_; - std::vector severitiesexclEE_; - std::vector flagsexclEB_; - std::vector flagsexclEE_; -}; - -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/ParticleBasedIsoProducer.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/ParticleBasedIsoProducer.cc index 5dc0f65428046..665e620718116 100644 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/ParticleBasedIsoProducer.cc +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/ParticleBasedIsoProducer.cc @@ -1,9 +1,57 @@ -#include "RecoEgamma/EgammaIsolationAlgos/plugins/ParticleBasedIsoProducer.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" -#include "DataFormats/EgammaCandidates/interface/Photon.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/ValueMap.h" #include "DataFormats/EgammaCandidates/interface/GsfElectron.h" +#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" +#include "DataFormats/EgammaCandidates/interface/Photon.h" +#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" #include "DataFormats/Math/interface/deltaR.h" -#include "DataFormats/Common/interface/ValueMap.h" +#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" +#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/PFBlockBasedIsolation.h" + +class ParticleBasedIsoProducer : public edm::stream::EDProducer<> { +public: + ParticleBasedIsoProducer(const edm::ParameterSet& conf); + + void beginRun(edm::Run const& r, edm::EventSetup const& es) override; + void produce(edm::Event& e, const edm::EventSetup& c) override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + edm::ParameterSet conf_; + std::string photonCollection_; + std::string electronCollection_; + + edm::InputTag photonProducer_; + edm::InputTag photonTmpProducer_; + + edm::InputTag electronProducer_; + edm::InputTag electronTmpProducer_; + + edm::EDGetTokenT photonProducerT_; + edm::EDGetTokenT photonTmpProducerT_; + edm::EDGetTokenT electronProducerT_; + edm::EDGetTokenT electronTmpProducerT_; + edm::EDGetTokenT pfEgammaCandidates_; + edm::EDGetTokenT pfCandidates_; + edm::EDGetTokenT> valMapPFCandToPhoton_; + edm::EDGetTokenT> valMapPFCandToEle_; + + std::string valueMapPFCandPhoton_; + std::string valueMapPhoPFCandIso_; + std::string valueMapPFCandEle_; + std::string valueMapElePFCandIso_; + + std::unique_ptr thePFBlockBasedIsolation_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(ParticleBasedIsoProducer); ParticleBasedIsoProducer::ParticleBasedIsoProducer(const edm::ParameterSet& conf) : conf_(conf) { photonTmpProducer_ = conf_.getParameter("photonTmpProducer"); @@ -38,48 +86,21 @@ ParticleBasedIsoProducer::ParticleBasedIsoProducer(const edm::ParameterSet& conf produces>>(valueMapElePFCandIso_); } -ParticleBasedIsoProducer::~ParticleBasedIsoProducer() {} - void ParticleBasedIsoProducer::beginRun(const edm::Run& run, const edm::EventSetup& c) { - thePFBlockBasedIsolation_ = new PFBlockBasedIsolation(); + thePFBlockBasedIsolation_ = std::make_unique(); edm::ParameterSet pfBlockBasedIsolationSetUp = conf_.getParameter("pfBlockBasedIsolationSetUp"); thePFBlockBasedIsolation_->setup(pfBlockBasedIsolationSetUp); } -void ParticleBasedIsoProducer::endRun(const edm::Run& run, const edm::EventSetup& c) { - delete thePFBlockBasedIsolation_; -} - void ParticleBasedIsoProducer::produce(edm::Event& theEvent, const edm::EventSetup& c) { - edm::Handle photonHandle; - theEvent.getByToken(photonProducerT_, photonHandle); - - edm::Handle photonTmpHandle; - theEvent.getByToken(photonTmpProducerT_, photonTmpHandle); - - edm::Handle electronTmpHandle; - theEvent.getByToken(electronTmpProducerT_, electronTmpHandle); - - edm::Handle electronHandle; - theEvent.getByToken(electronProducerT_, electronHandle); - - edm::Handle pfEGCandidateHandle; - // Get the PF refined cluster collection - theEvent.getByToken(pfEgammaCandidates_, pfEGCandidateHandle); - - edm::Handle pfCandidateHandle; - // Get the PF candidates collection - theEvent.getByToken(pfCandidates_, pfCandidateHandle); - - edm::ValueMap pfEGCandToPhotonMap; - edm::Handle> pfEGCandToPhotonMapHandle; - theEvent.getByToken(valMapPFCandToPhoton_, pfEGCandToPhotonMapHandle); - pfEGCandToPhotonMap = *(pfEGCandToPhotonMapHandle.product()); - - edm::ValueMap pfEGCandToElectronMap; - edm::Handle> pfEGCandToElectronMapHandle; - theEvent.getByToken(valMapPFCandToEle_, pfEGCandToElectronMapHandle); - pfEGCandToElectronMap = *(pfEGCandToElectronMapHandle.product()); + auto photonHandle = theEvent.getHandle(photonProducerT_); + auto photonTmpHandle = theEvent.getHandle(photonTmpProducerT_); + auto electronTmpHandle = theEvent.getHandle(electronTmpProducerT_); + auto electronHandle = theEvent.getHandle(electronProducerT_); + auto pfEGCandidateHandle = theEvent.getHandle(pfEgammaCandidates_); + auto pfCandidateHandle = theEvent.getHandle(pfCandidates_); + auto const& pfEGCandToPhotonMap = theEvent.get(valMapPFCandToPhoton_); + auto const& pfEGCandToElectronMap = theEvent.get(valMapPFCandToEle_); std::vector> pfCandIsoPairVecPho; @@ -167,3 +188,27 @@ void ParticleBasedIsoProducer::produce(edm::Event& theEvent, const edm::EventSet fillerElectrons.fill(); theEvent.put(std::move(eleToPFCandIsoMap_p), valueMapElePFCandIso_); } + +void ParticleBasedIsoProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + // particleBasedIsolation + edm::ParameterSetDescription desc; + desc.add("valueMapEleToEG", ""); + desc.add("valueMapPhoToEG", "valMapPFEgammaCandToPhoton"); + desc.add("electronTmpProducer", {"gedGsfElectronsTmp"}); + desc.add("pfCandidates", {"particleFlow"}); + desc.add("valueMapElePFblockIso", "gedGsfElectrons"); + desc.add("electronProducer", {"gedGsfElectrons"}); + desc.add("photonTmpProducer", {"gedPhotonsTmp"}); + desc.add("pfEgammaCandidates", {"particleFlowEGamma"}); + { + edm::ParameterSetDescription psd0; + psd0.add("ComponentName", "pfBlockBasedIsolation"); + psd0.add("coneSize", 9999999999.); + desc.add("pfBlockBasedIsolationSetUp", psd0); + } + desc.add("photonProducer", {"gedPhotons"}); + desc.add("valueMapPhoPFblockIso", "gedPhotons"); + descriptions.add("particleBasedIsolation", desc); + // or use the following to generate the label from the module's C++ type + //descriptions.addWithDefaultLabel(desc); +} diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/ParticleBasedIsoProducer.h b/RecoEgamma/EgammaIsolationAlgos/plugins/ParticleBasedIsoProducer.h deleted file mode 100644 index e824fd9494f45..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/ParticleBasedIsoProducer.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef ParticleBasedIsoProducer_h -#define ParticleBasedIsoProducer_h - -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/PFBlockBasedIsolation.h" -#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" - -#include "DataFormats/Common/interface/ValueMap.h" - -class ParticleBasedIsoProducer : public edm::stream::EDProducer<> { -public: - ParticleBasedIsoProducer(const edm::ParameterSet& conf); - ~ParticleBasedIsoProducer() override; - - void beginRun(edm::Run const& r, edm::EventSetup const& es) override; - void endRun(edm::Run const&, edm::EventSetup const&) override; - void produce(edm::Event& e, const edm::EventSetup& c) override; - -private: - edm::ParameterSet conf_; - std::string photonCollection_; - std::string electronCollection_; - - edm::InputTag photonProducer_; - edm::InputTag photonTmpProducer_; - - edm::InputTag electronProducer_; - edm::InputTag electronTmpProducer_; - - edm::EDGetTokenT photonProducerT_; - edm::EDGetTokenT photonTmpProducerT_; - edm::EDGetTokenT electronProducerT_; - edm::EDGetTokenT electronTmpProducerT_; - edm::EDGetTokenT pfEgammaCandidates_; - edm::EDGetTokenT pfCandidates_; - edm::EDGetTokenT > valMapPFCandToPhoton_; - edm::EDGetTokenT > valMapPFCandToEle_; - - std::string valueMapPFCandPhoton_; - std::string valueMapPhoPFCandIso_; - std::string valueMapPFCandEle_; - std::string valueMapElePFCandIso_; - - PFBlockBasedIsolation* thePFBlockBasedIsolation_; -}; - -#endif diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/iso_deposit_extractors/EgammaEcalExtractor.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/iso_deposit_extractors/EgammaEcalExtractor.cc new file mode 100644 index 0000000000000..537609d8047df --- /dev/null +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/iso_deposit_extractors/EgammaEcalExtractor.cc @@ -0,0 +1,155 @@ +//***************************************************************************** +// File: EgammaEcalExtractor.cc +// ---------------------------------------------------------------------------- +// Type: Class implementation header +// Package: EgammaIsolationAlgos/EgammaIsolationAlgos +// Class: EgammaEcalExtractor +// Language: Standard C++ +// Project: CMS +// OrigAuth: Gilles De Lentdecker +// Institute: IIHE-ULB +//============================================================================= +//***************************************************************************** + +#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/EgammaReco/interface/BasicCluster.h" +#include "DataFormats/EgammaReco/interface/BasicClusterFwd.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" +#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractor.h" + +#include + +#include +#include + +namespace egammaisolation { + + class EgammaEcalExtractor : public reco::isodeposit::IsoDepositExtractor { + public: + EgammaEcalExtractor(const edm::ParameterSet& par, edm::ConsumesCollector&& iC) : EgammaEcalExtractor(par, iC) {} + EgammaEcalExtractor(const edm::ParameterSet& par, edm::ConsumesCollector& iC) + : etMin_(par.getParameter("etMin")), + conesize_(par.getParameter("extRadius")), + scmatch_(par.getParameter("superClusterMatch")), + basicClusterToken_( + iC.consumes(par.getParameter("basicClusters"))), + superClusterToken_( + iC.consumes(par.getParameter("superClusters"))) {} + + ~EgammaEcalExtractor() override; + + void fillVetos(const edm::Event& ev, const edm::EventSetup& evSetup, const reco::TrackCollection& tracks) override { + } + reco::IsoDeposit deposit(const edm::Event& ev, + const edm::EventSetup& evSetup, + const reco::Track& track) const override { + throw cms::Exception("Configuration Error") + << "This extractor " << (typeid(this).name()) << " is not made for tracks"; + } + reco::IsoDeposit deposit(const edm::Event& ev, + const edm::EventSetup& evSetup, + const reco::Candidate& c) const override; + + private: + // ---------- member data -------------------------------- + + // Parameters of isolation cone geometry. + // Photon case + double etMin_; + double conesize_; + bool scmatch_; // true-> reject basic clusters matched to the superclsuter + // false-> fill all basic clusters + edm::EDGetTokenT basicClusterToken_; + edm::EDGetTokenT superClusterToken_; + }; + +} // namespace egammaisolation + +#include "FWCore/Framework/interface/MakerMacros.h" +#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractorFactory.h" +DEFINE_EDM_PLUGIN(IsoDepositExtractorFactory, egammaisolation::EgammaEcalExtractor, "EgammaEcalExtractor"); + +using namespace egammaisolation; +using namespace reco::isodeposit; + +EgammaEcalExtractor::~EgammaEcalExtractor() {} + +reco::IsoDeposit EgammaEcalExtractor::deposit(const edm::Event& ev, + const edm::EventSetup& evSetup, + const reco::Candidate& candidate) const { + reco::SuperClusterRef sc = candidate.get(); + math::XYZPoint position = sc->position(); + // match the photon hybrid supercluster with those with Algo==0 (island) + double delta1 = 1000.; + double deltacur = 1000.; + const reco::SuperCluster* matchedsupercluster = nullptr; + bool MATCHEDSC = false; + + Direction candDir(position.eta(), position.phi()); + reco::IsoDeposit deposit(candDir); + deposit.setVeto(reco::IsoDeposit::Veto(candDir, 0)); // no veto is needed for this deposit + deposit.addCandEnergy(sc->energy() * sin(2 * atan(exp(-sc->eta())))); + + for (auto const& scItr : ev.get(superClusterToken_)) { + const reco::SuperCluster* supercluster = &scItr; + + if (supercluster->seed()->algo() == 0) { + deltacur = ROOT::Math::VectorUtil::DeltaR(supercluster->position(), position); + if (deltacur < delta1) { + delta1 = deltacur; + matchedsupercluster = supercluster; + MATCHEDSC = true; + } + } + } + + const reco::BasicCluster* cluster = nullptr; + + //loop over basic clusters + for (auto const& cItr : ev.get(basicClusterToken_)) { + cluster = &cItr; + // double ebc_bcchi2 = cluster->chi2(); + int ebc_bcalgo = cluster->algo(); + double ebc_bce = cluster->energy(); + double ebc_bceta = cluster->eta(); + double ebc_bcet = ebc_bce * sin(2 * atan(exp(ebc_bceta))); + double newDelta = 0.; + + if (ebc_bcet > etMin_ && ebc_bcalgo == 0) { + // if (ebc_bcchi2 < 30.) { + + if (MATCHEDSC || !scmatch_) { //skip selection if user wants to fill all superclusters + bool inSuperCluster = false; + + if (scmatch_) { // only try the matching if needed + reco::CaloCluster_iterator theEclust = matchedsupercluster->clustersBegin(); + // loop over the basic clusters of the matched supercluster + for (; theEclust != matchedsupercluster->clustersEnd(); ++theEclust) { + if ((**theEclust) == (*cluster)) + inSuperCluster = true; + } + } + if (!inSuperCluster || !scmatch_) { //skip selection if user wants to fill all superclusters + newDelta = ROOT::Math::VectorUtil::DeltaR(cluster->position(), position); + if (newDelta < conesize_) { + deposit.addDeposit(Direction(cluster->eta(), cluster->phi()), ebc_bcet); + } + } + } + // } // matches ebc_bcchi2 + } // matches ebc_bcet && ebc_bcalgo + } + + // std::cout << "Will return ecalIsol = " << ecalIsol << std::endl; + return deposit; +} diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/iso_deposit_extractors/EgammaHcalExtractor.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/iso_deposit_extractors/EgammaHcalExtractor.cc new file mode 100644 index 0000000000000..dc3b4f2732593 --- /dev/null +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/iso_deposit_extractors/EgammaHcalExtractor.cc @@ -0,0 +1,121 @@ +//***************************************************************************** +// File: EgammaHcalExtractor.cc +// ---------------------------------------------------------------------------- +// OrigAuth: Matthias Mozer +// Institute: IIHE-VUB +//============================================================================= +//***************************************************************************** + +#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/GeometryVector/interface/GlobalPoint.h" +#include "DataFormats/GeometryVector/interface/GlobalVector.h" +#include "DataFormats/HcalDetId/interface/HcalDetId.h" +#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" +#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" +#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/CommonDetUnit/interface/TrackingGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractor.h" +#include "RecoCaloTools/Selectors/interface/CaloDualConeSelector.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h" + +#include + +#include +#include + +namespace egammaisolation { + + class EgammaHcalExtractor : public reco::isodeposit::IsoDepositExtractor { + public: + EgammaHcalExtractor(const edm::ParameterSet& par, edm::ConsumesCollector&& iC) : EgammaHcalExtractor(par, iC) {} + EgammaHcalExtractor(const edm::ParameterSet& par, edm::ConsumesCollector& iC); + + ~EgammaHcalExtractor() override; + + void fillVetos(const edm::Event& ev, const edm::EventSetup& evSetup, const reco::TrackCollection& tracks) override { + } + reco::IsoDeposit deposit(const edm::Event& ev, + const edm::EventSetup& evSetup, + const reco::Track& track) const override { + throw cms::Exception("Configuration Error") + << "This extractor " << (typeid(this).name()) << " is not made for tracks"; + } + reco::IsoDeposit deposit(const edm::Event& ev, + const edm::EventSetup& evSetup, + const reco::Candidate& c) const override; + + private: + double extRadius_; + double intRadius_; + double etLow_; + + edm::EDGetTokenT hcalRecHitProducerToken_; + }; +} // namespace egammaisolation + +#include "FWCore/Framework/interface/MakerMacros.h" +#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractorFactory.h" +DEFINE_EDM_PLUGIN(IsoDepositExtractorFactory, egammaisolation::EgammaHcalExtractor, "EgammaHcalExtractor"); + +using namespace std; + +using namespace egammaisolation; +using namespace reco::isodeposit; + +EgammaHcalExtractor::EgammaHcalExtractor(const edm::ParameterSet& par, edm::ConsumesCollector& iC) + : extRadius_(par.getParameter("extRadius")), + intRadius_(par.getParameter("intRadius")), + etLow_(par.getParameter("etMin")), + hcalRecHitProducerToken_(iC.consumes(par.getParameter("hcalRecHits"))) {} + +EgammaHcalExtractor::~EgammaHcalExtractor() {} + +reco::IsoDeposit EgammaHcalExtractor::deposit(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + const reco::Candidate& emObject) const { + //Get MetaRecHit collection + auto const& hcalRecHits = iEvent.get(hcalRecHitProducerToken_); + + //Get Calo Geometry + edm::ESHandle pG; + iSetup.get().get(pG); + const CaloGeometry* caloGeom = pG.product(); + CaloDualConeSelector coneSel(intRadius_, extRadius_, caloGeom, DetId::Hcal); + + //Take the SC position + reco::SuperClusterRef sc = emObject.get(); + math::XYZPoint caloPosition = sc->position(); + GlobalPoint point(caloPosition.x(), caloPosition.y(), caloPosition.z()); + // needed: coneSel.select(eta,phi,hits) is not the same! + + Direction candDir(caloPosition.eta(), caloPosition.phi()); + reco::IsoDeposit deposit(candDir); + deposit.setVeto(reco::IsoDeposit::Veto(candDir, intRadius_)); + double sinTheta = sin(2 * atan(exp(-sc->eta()))); + deposit.addCandEnergy(sc->energy() * sinTheta); + + //Compute the HCAL energy behind ECAL + coneSel.selectCallback(point, hcalRecHits, [&](const HBHERecHit& i) { + const GlobalPoint& hcalHit_position = caloGeom->getPosition(i.detid()); + double hcalHit_eta = hcalHit_position.eta(); + double hcalHit_Et = i.energy() * sin(2 * atan(exp(-hcalHit_eta))); + if (hcalHit_Et > etLow_) { + deposit.addDeposit(Direction(hcalHit_eta, hcalHit_position.phi()), hcalHit_Et); + } + }); + + return deposit; +} diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/iso_deposit_extractors/EgammaRecHitExtractor.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/iso_deposit_extractors/EgammaRecHitExtractor.cc new file mode 100644 index 0000000000000..364e6c2d74984 --- /dev/null +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/iso_deposit_extractors/EgammaRecHitExtractor.cc @@ -0,0 +1,299 @@ +//***************************************************************************** +// File: EgammaRecHitExtractor.cc +// ---------------------------------------------------------------------------- +// OrigAuth: Matthias Mozer, adapted from EgammaHcalExtractor by S. Harper +// Institute: IIHE-VUB, RAL +//============================================================================= +//***************************************************************************** + +#include "CommonTools/Utils/interface/StringToEnumValue.h" +#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/DetId/interface/DetId.h" +#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/GeometryVector/interface/GlobalPoint.h" +#include "DataFormats/GeometryVector/interface/GlobalVector.h" +#include "DataFormats/Math/interface/deltaPhi.h" +#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" +#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractor.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" + +#include + +#include +#include + +namespace egammaisolation { + + class EgammaRecHitExtractor : public reco::isodeposit::IsoDepositExtractor { + public: + EgammaRecHitExtractor(const edm::ParameterSet& par, edm::ConsumesCollector&& iC) : EgammaRecHitExtractor(par, iC) {} + EgammaRecHitExtractor(const edm::ParameterSet& par, edm::ConsumesCollector& iC); + ~EgammaRecHitExtractor() override; + void fillVetos(const edm::Event& ev, const edm::EventSetup& evSetup, const reco::TrackCollection& tracks) override { + } + reco::IsoDeposit deposit(const edm::Event& ev, + const edm::EventSetup& evSetup, + const reco::Track& track) const override { + throw cms::Exception("Configuration Error") + << "This extractor " << (typeid(this).name()) << " is not made for tracks"; + } + reco::IsoDeposit deposit(const edm::Event& ev, + const edm::EventSetup& evSetup, + const reco::Candidate& c) const override; + + private: + void collect(reco::IsoDeposit& deposit, + const reco::SuperClusterRef& sc, + const CaloSubdetectorGeometry* subdet, + const CaloGeometry* caloGeom, + const EcalRecHitCollection& hits, + //const EcalChannelStatus* chStatus, + const EcalSeverityLevelAlgo* sevLevel, + bool barrel) const; + + double etMin_; + double energyMin_; + double extRadius_; + double intRadius_; + double intStrip_; + edm::InputTag barrelEcalHitsTag_; + edm::InputTag endcapEcalHitsTag_; + edm::EDGetTokenT barrelEcalHitsToken_; + edm::EDGetTokenT endcapEcalHitsToken_; + bool fakeNegativeDeposit_; + bool tryBoth_; + bool useEt_; + bool vetoClustered_; + bool sameTag_; + //int severityLevelCut_; + //float severityRecHitThreshold_; + //std::string spIdString_; + //float spIdThreshold_; + //EcalSeverityLevelAlgo::SpikeId spId_; + //std::vector v_chstatus_; + std::vector severitiesexclEB_; + std::vector severitiesexclEE_; + std::vector flagsexclEB_; + std::vector flagsexclEE_; + }; +} // namespace egammaisolation + +#include "FWCore/Framework/interface/MakerMacros.h" +#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractorFactory.h" +DEFINE_EDM_PLUGIN(IsoDepositExtractorFactory, egammaisolation::EgammaRecHitExtractor, "EgammaRecHitExtractor"); + +using namespace std; +using namespace egammaisolation; +using namespace reco::isodeposit; + +EgammaRecHitExtractor::EgammaRecHitExtractor(const edm::ParameterSet& par, edm::ConsumesCollector& iC) + : etMin_(par.getParameter("etMin")), + energyMin_(par.getParameter("energyMin")), + extRadius_(par.getParameter("extRadius")), + intRadius_(par.getParameter("intRadius")), + intStrip_(par.getParameter("intStrip")), + barrelEcalHitsTag_(par.getParameter("barrelEcalHits")), + endcapEcalHitsTag_(par.getParameter("endcapEcalHits")), + barrelEcalHitsToken_(iC.consumes(barrelEcalHitsTag_)), + endcapEcalHitsToken_(iC.consumes(endcapEcalHitsTag_)), + fakeNegativeDeposit_(par.getParameter("subtractSuperClusterEnergy")), + tryBoth_(par.getParameter("tryBoth")), + vetoClustered_(par.getParameter("vetoClustered")), + sameTag_(false) +//severityLevelCut_(par.getParameter("severityLevelCut")) +//severityRecHitThreshold_(par.getParameter("severityRecHitThreshold")), +//spIdString_(par.getParameter("spikeIdString")), +//spIdThreshold_(par.getParameter("spikeIdThreshold")), +{ + const std::vector flagnamesEB = par.getParameter >("RecHitFlagToBeExcludedEB"); + + const std::vector flagnamesEE = par.getParameter >("RecHitFlagToBeExcludedEE"); + + flagsexclEB_ = StringToEnumValue(flagnamesEB); + + flagsexclEE_ = StringToEnumValue(flagnamesEE); + + const std::vector severitynamesEB = + par.getParameter >("RecHitSeverityToBeExcludedEB"); + + severitiesexclEB_ = StringToEnumValue(severitynamesEB); + + const std::vector severitynamesEE = + par.getParameter >("RecHitSeverityToBeExcludedEE"); + + severitiesexclEE_ = StringToEnumValue(severitynamesEE); + + if ((intRadius_ != 0.0) && (fakeNegativeDeposit_)) { + throw cms::Exception("Configuration Error") << "EgammaRecHitExtractor: " + << "If you use 'subtractSuperClusterEnergy', you *must* set " + "'intRadius' to ZERO; it does not make sense, otherwise."; + } + std::string isoVariable = par.getParameter("isolationVariable"); + if (isoVariable == "et") { + useEt_ = true; + } else if (isoVariable == "energy") { + useEt_ = false; + } else { + throw cms::Exception("Configuration Error") + << "EgammaRecHitExtractor: isolationVariable '" << isoVariable << "' not known. " + << " Supported values are 'et', 'energy'. "; + } + if (endcapEcalHitsTag_.encode() == barrelEcalHitsTag_.encode()) { + sameTag_ = true; + if (tryBoth_) { + edm::LogWarning("EgammaRecHitExtractor") + << "If you have configured 'barrelRecHits' == 'endcapRecHits', so I'm switching 'tryBoth' to FALSE."; + tryBoth_ = false; + } + } +} + +EgammaRecHitExtractor::~EgammaRecHitExtractor() {} + +reco::IsoDeposit EgammaRecHitExtractor::deposit(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + const reco::Candidate& emObject) const { + edm::ESHandle pG; + iSetup.get().get(pG); + + //Get the channel status from the db + //edm::ESHandle chStatus; + //iSetup.get().get(chStatus); + + edm::ESHandle sevlv; + iSetup.get().get(sevlv); + const EcalSeverityLevelAlgo* sevLevel = sevlv.product(); + + const CaloGeometry* caloGeom = pG.product(); + const CaloSubdetectorGeometry* barrelgeom = caloGeom->getSubdetectorGeometry(DetId::Ecal, EcalBarrel); + const CaloSubdetectorGeometry* endcapgeom = caloGeom->getSubdetectorGeometry(DetId::Ecal, EcalEndcap); + + static const std::string metname = "EgammaIsolationAlgos|EgammaRecHitExtractor"; + + //define isodeposit starting from candidate + reco::SuperClusterRef sc = emObject.get(); + math::XYZPoint caloPosition = sc->position(); + + Direction candDir(caloPosition.eta(), caloPosition.phi()); + reco::IsoDeposit deposit(candDir); + deposit.setVeto(reco::IsoDeposit::Veto(candDir, intRadius_)); + double sinTheta = sin(2 * atan(exp(-sc->eta()))); + deposit.addCandEnergy(sc->energy() * (useEt_ ? sinTheta : 1.0)); + + // subtract supercluster if desired + double fakeEnergy = -sc->rawEnergy(); + if (fakeNegativeDeposit_) { + deposit.addDeposit(candDir, fakeEnergy * (useEt_ ? sinTheta : 1.0)); // not exactly clean... + } + + // fill rechits + bool inBarrel = sameTag_ || (abs(sc->eta()) < 1.479); //check for barrel. If only one collection is used, use barrel + if (inBarrel || tryBoth_) { + collect(deposit, sc, barrelgeom, caloGeom, iEvent.get(barrelEcalHitsToken_), sevLevel, true); + } + + if ((!inBarrel) || tryBoth_) { + collect(deposit, sc, endcapgeom, caloGeom, iEvent.get(endcapEcalHitsToken_), sevLevel, false); + } + + return deposit; +} + +void EgammaRecHitExtractor::collect(reco::IsoDeposit& deposit, + const reco::SuperClusterRef& sc, + const CaloSubdetectorGeometry* subdet, + const CaloGeometry* caloGeom, + const EcalRecHitCollection& hits, + //const EcalChannelStatus* chStatus, + const EcalSeverityLevelAlgo* sevLevel, + bool barrel) const { + GlobalPoint caloPosition(sc->position().x(), sc->position().y(), sc->position().z()); + CaloSubdetectorGeometry::DetIdSet chosen = subdet->getCells(caloPosition, extRadius_); + EcalRecHitCollection::const_iterator j = hits.end(); + double caloeta = caloPosition.eta(); + double calophi = caloPosition.phi(); + double r2 = intRadius_ * intRadius_; + + std::vector >::const_iterator rhIt; + + for (CaloSubdetectorGeometry::DetIdSet::const_iterator i = chosen.begin(), end = chosen.end(); i != end; ++i) { + j = hits.find(*i); + if (j != hits.end()) { + const GlobalPoint& position = caloGeom->getPosition(*i); + double eta = position.eta(); + double phi = position.phi(); + double energy = j->energy(); + double et = energy * position.perp() / position.mag(); + double phiDiff = reco::deltaPhi(phi, calophi); + + //check if we are supposed to veto clustered and then do so + if (vetoClustered_) { + //Loop over basic clusters: + bool isClustered = false; + for (auto bcIt = sc->clustersBegin(); bcIt != sc->clustersEnd(); ++bcIt) { + for (rhIt = (*bcIt)->hitsAndFractions().begin(); rhIt != (*bcIt)->hitsAndFractions().end(); ++rhIt) { + if (rhIt->first == *i) + isClustered = true; + if (isClustered) + break; + } + if (isClustered) + break; + } //end loop over basic clusters + + if (isClustered) + continue; + } //end if removeClustered + + std::vector::const_iterator sit; + int severityFlag = sevLevel->severityLevel(j->detid(), hits); + if (barrel) { + sit = std::find(severitiesexclEB_.begin(), severitiesexclEB_.end(), severityFlag); + if (sit != severitiesexclEB_.end()) + continue; + } else { + sit = std::find(severitiesexclEE_.begin(), severitiesexclEE_.end(), severityFlag); + if (sit != severitiesexclEE_.end()) + continue; + } + + if (barrel) { + // new rechit flag checks + if (!j->checkFlag(EcalRecHit::kGood)) { + if (j->checkFlags(flagsexclEB_)) { + continue; + } + } + } else { + // new rechit flag checks + if (!j->checkFlag(EcalRecHit::kGood)) { + if (j->checkFlags(flagsexclEE_)) { + continue; + } + } + } + + if (et > etMin_ && energy > energyMin_ //Changed to fabs - then changed back to energy + && fabs(eta - caloeta) > intStrip_ && (eta - caloeta) * (eta - caloeta) + phiDiff * phiDiff > r2) { + deposit.addDeposit(Direction(eta, phi), (useEt_ ? et : energy)); + } + } + } +} diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/iso_deposit_extractors/EgammaTowerExtractor.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/iso_deposit_extractors/EgammaTowerExtractor.cc new file mode 100644 index 0000000000000..04535765d60d2 --- /dev/null +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/iso_deposit_extractors/EgammaTowerExtractor.cc @@ -0,0 +1,133 @@ +//***************************************************************************** +// File: EgammaTowerExtractor.cc +// ---------------------------------------------------------------------------- +// OrigAuth: Matthias Mozer +// Institute: IIHE-VUB +//============================================================================= +//***************************************************************************** + +#include "DataFormats/GeometryVector/interface/GlobalPoint.h" +#include "DataFormats/GeometryVector/interface/GlobalVector.h" +#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/CaloTowers/interface/CaloTower.h" +#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractor.h" +#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" + +#include + +#include +#include +#include + +namespace egammaisolation { + + class EgammaTowerExtractor : public reco::isodeposit::IsoDepositExtractor { + public: + enum HcalDepth { AllDepths = -1, Undefined = 0, Depth1 = 1, Depth2 = 2 }; + + public: + EgammaTowerExtractor(const edm::ParameterSet& par, edm::ConsumesCollector&& iC) : EgammaTowerExtractor(par, iC) {} + EgammaTowerExtractor(const edm::ParameterSet& par, edm::ConsumesCollector& iC) + : extRadius2_(par.getParameter("extRadius")), + intRadius_(par.getParameter("intRadius")), + etLow_(par.getParameter("etMin")), + caloTowerToken(iC.consumes(par.getParameter("caloTowers"))), + depth_(par.getParameter("hcalDepth")) { + extRadius2_ *= extRadius2_; + //lets just check we have a valid depth + //should we throw an exception or just warn and then fail gracefully later? + if (depth_ != AllDepths && depth_ != Depth1 && depth_ != Depth2) { + throw cms::Exception("Configuration Error") + << "hcalDepth passed to EgammaTowerExtractor is invalid " << std::endl; + } + } + + ~EgammaTowerExtractor() override; + + void fillVetos(const edm::Event& ev, const edm::EventSetup& evSetup, const reco::TrackCollection& tracks) override { + } + reco::IsoDeposit deposit(const edm::Event& ev, + const edm::EventSetup& evSetup, + const reco::Track& track) const override { + throw cms::Exception("Configuration Error") + << "This extractor " << (typeid(this).name()) << " is not made for tracks"; + } + reco::IsoDeposit deposit(const edm::Event& ev, + const edm::EventSetup& evSetup, + const reco::Candidate& c) const override; + + private: + double extRadius2_; + double intRadius_; + double etLow_; + + edm::EDGetTokenT caloTowerToken; + int depth_; + //const CaloTowerCollection *towercollection_ ; + }; +} // namespace egammaisolation + +#include "FWCore/Framework/interface/MakerMacros.h" +#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractorFactory.h" +DEFINE_EDM_PLUGIN(IsoDepositExtractorFactory, egammaisolation::EgammaTowerExtractor, "EgammaTowerExtractor"); + +using namespace ROOT::Math::VectorUtil; + +using namespace egammaisolation; +using namespace reco::isodeposit; + +EgammaTowerExtractor::~EgammaTowerExtractor() {} + +reco::IsoDeposit EgammaTowerExtractor::deposit(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + const reco::Candidate& emObject) const { + //Take the SC position + reco::SuperClusterRef sc = emObject.get(); + math::XYZPoint caloPosition = sc->position(); + + Direction candDir(caloPosition.eta(), caloPosition.phi()); + reco::IsoDeposit deposit(candDir); + deposit.setVeto(reco::IsoDeposit::Veto(candDir, intRadius_)); + deposit.addCandEnergy(sc->energy() * sin(2 * atan(exp(-sc->eta())))); + + //loop over tracks + for (auto const& trItr : iEvent.get(caloTowerToken)) { + double depEt = 0; + //the hcal can be seperated into different depths + //currently it is setup to check that the depth is valid in constructor + //if the depth is not valid it fails gracefully + //small bug fix, hadEnergyHeInnerLater returns zero for towers which are only depth 1 + //but we want Depth1 isolation to include these so we have to manually check for this + if (depth_ == AllDepths) + depEt = trItr.hadEt(); + else if (depth_ == Depth1) + depEt = trItr.ietaAbs() < 18 || trItr.ietaAbs() > 29 ? trItr.hadEt() + : trItr.hadEnergyHeInnerLayer() * sin(trItr.p4().theta()); + else if (depth_ == Depth2) + depEt = trItr.hadEnergyHeOuterLayer() * sin(trItr.p4().theta()); + + if (depEt < etLow_) + continue; + + Direction towerDir(trItr.eta(), trItr.phi()); + double dR2 = candDir.deltaR2(towerDir); + + if (dR2 < extRadius2_) { + deposit.addDeposit(towerDir, depEt); + } + + } //end loop over tracks + + return deposit; +} diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/iso_deposit_extractors/EgammaTrackExtractor.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/iso_deposit_extractors/EgammaTrackExtractor.cc new file mode 100644 index 0000000000000..ad4fae2cb97cb --- /dev/null +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/iso_deposit_extractors/EgammaTrackExtractor.cc @@ -0,0 +1,227 @@ +#include "CommonTools/Statistics/interface/ChiSquaredProbability.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/View.h" +#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" +#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" +#include "DataFormats/RecoCandidate/interface/IsoDeposit.h" +#include "DataFormats/RecoCandidate/interface/IsoDepositDirection.h" +#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractor.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTrackSelector.h" + +#include +#include + +namespace egammaisolation { + + class EgammaTrackExtractor : public reco::isodeposit::IsoDepositExtractor { + public: + EgammaTrackExtractor(){}; + EgammaTrackExtractor(const edm::ParameterSet& par, edm::ConsumesCollector&& iC) : EgammaTrackExtractor(par, iC) {} + EgammaTrackExtractor(const edm::ParameterSet& par, edm::ConsumesCollector& iC); + + ~EgammaTrackExtractor() override {} + + void fillVetos(const edm::Event& ev, const edm::EventSetup& evSetup, const reco::TrackCollection& track) override {} + + virtual reco::IsoDeposit::Vetos vetos(const edm::Event& ev, + const edm::EventSetup& evSetup, + const reco::Track& track) const; + + reco::IsoDeposit deposit(const edm::Event& ev, + const edm::EventSetup& evSetup, + const reco::Track& muon) const override { + edm::LogWarning("EgammaIsolationAlgos|EgammaTrackExtractor") + << "This Function is not implemented, bad IsoDeposit Returned"; + return reco::IsoDeposit(reco::isodeposit::Direction(1, 1)); + } + + reco::IsoDeposit deposit(const edm::Event& ev, + const edm::EventSetup& evSetup, + const reco::Candidate& muon) const override; + + private: + reco::IsoDeposit::Veto veto(const reco::IsoDeposit::Direction& dir) const; + + private: + // Parameter set + edm::EDGetTokenT > theTrackCollectionToken; //! Track Collection Label + std::string theDepositLabel; //! name for deposit + double minCandEt_; //! minimum candidate et + double theDiff_r; //! transverse distance to vertex + double theDiff_z; //! z distance to vertex + double theDR_Max; //! Maximum cone angle for deposits + double theDR_Veto; //! Veto cone angle + std::string theBeamlineOption; //! "NONE", "BeamSpotFromEvent" + edm::InputTag barrelEcalHitsTag_; + edm::InputTag endcapEcalHitsTag_; + edm::EDGetTokenT theBeamSpotToken; //! BeamSpot name + unsigned int theNHits_Min; //! trk.numberOfValidHits >= theNHits_Min + double theChi2Ndof_Max; //! trk.normalizedChi2 < theChi2Ndof_Max + double theChi2Prob_Min; //! ChiSquaredProbability(trk.chi2,trk.ndof) > theChi2Prob_Min + double thePt_Min; //! min track pt to include into iso deposit + std::vector paramForIsolBarrel_; //! Barrel requirements to determine if isolated for selective filling + std::vector paramForIsolEndcap_; //! Endcap requirements to determine if isolated for selective filling + std::string dzOptionString; + int dzOption; + }; + +} // namespace egammaisolation + +#include "FWCore/Framework/interface/MakerMacros.h" +#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractorFactory.h" +DEFINE_EDM_PLUGIN(IsoDepositExtractorFactory, egammaisolation::EgammaTrackExtractor, "EgammaTrackExtractor"); + +using namespace edm; +using namespace std; +using namespace reco; +using namespace egammaisolation; +using reco::isodeposit::Direction; + +EgammaTrackExtractor::EgammaTrackExtractor(const ParameterSet& par, edm::ConsumesCollector& iC) + : theTrackCollectionToken(iC.consumes >(par.getParameter("inputTrackCollection"))), + theDepositLabel(par.getUntrackedParameter("DepositLabel")), + theDiff_r(par.getParameter("Diff_r")), + theDiff_z(par.getParameter("Diff_z")), + theDR_Max(par.getParameter("DR_Max")), + theDR_Veto(par.getParameter("DR_Veto")), + theBeamlineOption(par.getParameter("BeamlineOption")), + theBeamSpotToken(iC.mayConsume(par.getParameter("BeamSpotLabel"))), + theNHits_Min(par.getParameter("NHits_Min")), + theChi2Ndof_Max(par.getParameter("Chi2Ndof_Max")), + theChi2Prob_Min(par.getParameter("Chi2Prob_Min")), + thePt_Min(par.getParameter("Pt_Min")), + dzOptionString(par.getParameter("dzOption")) { + if (!dzOptionString.compare("dz")) + dzOption = EgammaTrackSelector::dz; + else if (!dzOptionString.compare("vz")) + dzOption = EgammaTrackSelector::vz; + else if (!dzOptionString.compare("bs")) + dzOption = EgammaTrackSelector::bs; + else if (!dzOptionString.compare("vtx")) + dzOption = EgammaTrackSelector::vtx; + else + dzOption = EgammaTrackSelector::dz; +} + +reco::IsoDeposit::Vetos EgammaTrackExtractor::vetos(const edm::Event& ev, + const edm::EventSetup& evSetup, + const reco::Track& track) const { + reco::isodeposit::Direction dir(track.eta(), track.phi()); + return reco::IsoDeposit::Vetos(1, veto(dir)); +} + +reco::IsoDeposit::Veto EgammaTrackExtractor::veto(const reco::IsoDeposit::Direction& dir) const { + reco::IsoDeposit::Veto result; + result.vetoDir = dir; + result.dR = theDR_Veto; + return result; +} + +IsoDeposit EgammaTrackExtractor::deposit(const Event& event, + const EventSetup& eventSetup, + const Candidate& candTk) const { + static const std::string metname = "EgammaIsolationAlgos|EgammaTrackExtractor"; + + reco::isodeposit::Direction candDir; + double dzCut = 0; + + reco::TrackBase::Point beamPoint(0, 0, 0); + if (theBeamlineOption == "BeamSpotFromEvent") { + //pick beamSpot + auto beamSpotH = event.getHandle(theBeamSpotToken); + + if (beamSpotH.isValid()) { + beamPoint = beamSpotH->position(); + } + } + + if (candTk.isElectron()) { + const reco::GsfElectron* elec = dynamic_cast(&candTk); + candDir = reco::isodeposit::Direction(elec->gsfTrack()->eta(), elec->gsfTrack()->phi()); + } else { + candDir = reco::isodeposit::Direction(candTk.eta(), candTk.phi()); + } + + IsoDeposit deposit(candDir); + deposit.setVeto(veto(candDir)); + deposit.addCandEnergy(candTk.et()); + + for (auto const& itrTr : event.get(theTrackCollectionToken)) { + if (candDir.deltaR(reco::isodeposit::Direction(itrTr.eta(), itrTr.phi())) > theDR_Max) + continue; + + if (itrTr.normalizedChi2() > theChi2Ndof_Max) + continue; + + if (itrTr.pt() < thePt_Min) + continue; + + if (theChi2Prob_Min > 0 && ChiSquaredProbability(itrTr.chi2(), itrTr.ndof()) < theChi2Prob_Min) + continue; + + if (theNHits_Min > 0 && itrTr.numberOfValidHits() < theNHits_Min) + continue; + + if (candTk.isElectron()) { + const reco::GsfElectron* elec = dynamic_cast(&candTk); + switch (dzOption) { + case EgammaTrackSelector::dz: + dzCut = elec->gsfTrack()->dz() - itrTr.dz(); + break; + case EgammaTrackSelector::vz: + dzCut = elec->gsfTrack()->vz() - itrTr.vz(); + break; + case EgammaTrackSelector::bs: + dzCut = elec->gsfTrack()->dz(beamPoint) - itrTr.dz(beamPoint); + break; + case EgammaTrackSelector::vtx: + dzCut = itrTr.dz(elec->gsfTrack()->vertex()); + break; + default: + dzCut = elec->gsfTrack()->vz() - itrTr.vz(); + break; + } + } else { + switch (dzOption) { + case EgammaTrackSelector::dz: + dzCut = itrTr.dz() - candTk.vertex().z(); + break; + case EgammaTrackSelector::vz: + dzCut = itrTr.vz() - candTk.vertex().z(); + break; + case EgammaTrackSelector::bs: + dzCut = itrTr.dz(beamPoint) - candTk.vertex().z(); + break; + case EgammaTrackSelector::vtx: + dzCut = itrTr.dz(candTk.vertex()); + break; + default: + dzCut = itrTr.vz() - candTk.vertex().z(); + break; + } + } + + if (fabs(dzCut) > theDiff_z) + continue; + + if (fabs(itrTr.dxy(beamPoint)) > theDiff_r) + continue; + + deposit.addDeposit(reco::isodeposit::Direction(itrTr.eta(), itrTr.phi()), itrTr.pt()); + } + + return deposit; +} diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/module.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/module.cc deleted file mode 100644 index b7c578e8227c6..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/module.cc +++ /dev/null @@ -1,39 +0,0 @@ -#include "FWCore/PluginManager/interface/ModuleDef.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractor.h" -#include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractorFactory.h" -#include "EgammaTrackExtractor.h" -#include "EgammaEcalExtractor.h" -#include "EgammaHcalExtractor.h" -#include "EgammaTowerExtractor.h" -#include "EgammaRecHitExtractor.h" -DEFINE_EDM_PLUGIN(IsoDepositExtractorFactory, egammaisolation::EgammaTrackExtractor, "EgammaTrackExtractor"); -DEFINE_EDM_PLUGIN(IsoDepositExtractorFactory, egammaisolation::EgammaEcalExtractor, "EgammaEcalExtractor"); -DEFINE_EDM_PLUGIN(IsoDepositExtractorFactory, egammaisolation::EgammaHcalExtractor, "EgammaHcalExtractor"); -DEFINE_EDM_PLUGIN(IsoDepositExtractorFactory, egammaisolation::EgammaTowerExtractor, "EgammaTowerExtractor"); -DEFINE_EDM_PLUGIN(IsoDepositExtractorFactory, egammaisolation::EgammaRecHitExtractor, "EgammaRecHitExtractor"); - -#include "EgammaEcalRecHitIsolationProducer.h" -#include "EgammaElectronTkIsolationProducer.h" -#include "EgammaElectronTkNumIsolationProducer.h" -#include "EgammaPhotonTkIsolationProducer.h" -#include "EgammaPhotonTkNumIsolationProducer.h" -#include "EgammaTowerIsolationProducer.h" -#include "GamIsoDetIdCollectionProducer.h" -#include "EleIsoDetIdCollectionProducer.h" -#include "ParticleBasedIsoProducer.h" -#include "EgammaIsoHcalDetIdCollectionProducer.h" -#include "EgammaIsoESDetIdCollectionProducer.h" - -DEFINE_FWK_MODULE(ParticleBasedIsoProducer); -DEFINE_FWK_MODULE(EgammaElectronTkIsolationProducer); -DEFINE_FWK_MODULE(EgammaElectronTkNumIsolationProducer); -DEFINE_FWK_MODULE(EgammaPhotonTkIsolationProducer); -DEFINE_FWK_MODULE(EgammaPhotonTkNumIsolationProducer); -DEFINE_FWK_MODULE(EgammaTowerIsolationProducer); -DEFINE_FWK_MODULE(EgammaEcalRecHitIsolationProducer); -DEFINE_FWK_MODULE(EleIsoDetIdCollectionProducer); -DEFINE_FWK_MODULE(GamIsoDetIdCollectionProducer); -DEFINE_FWK_MODULE(EgammaIsoHcalDetIdCollectionProducer); -DEFINE_FWK_MODULE(EgammaIsoESDetIdCollectionProducer); diff --git a/RecoEgamma/EgammaIsolationAlgos/python/eleIsoDepositHcalFromTowers_cff.py b/RecoEgamma/EgammaIsolationAlgos/python/eleIsoDepositHcalFromTowers_cff.py index 38eed5f98c889..1bd69a6d38ca9 100644 --- a/RecoEgamma/EgammaIsolationAlgos/python/eleIsoDepositHcalFromTowers_cff.py +++ b/RecoEgamma/EgammaIsolationAlgos/python/eleIsoDepositHcalFromTowers_cff.py @@ -17,7 +17,7 @@ trackType = cms.string('candidate'), ExtractorPSet = cms.PSet( EleIsoHcalFromTowersExtractorBlock ) ) -eleIsoDepositHcalDepth1FromTowers.ExtractorPSet.hcalDepth = cms.int32(1) +eleIsoDepositHcalDepth1FromTowers.ExtractorPSet.hcalDepth = 1 eleIsoDepositHcalDepth2FromTowers = cms.EDProducer("CandIsoDepositProducer", src = cms.InputTag("gedGsfElectrons"), @@ -25,4 +25,4 @@ trackType = cms.string('candidate'), ExtractorPSet = cms.PSet( EleIsoHcalFromTowersExtractorBlock ) ) -eleIsoDepositHcalDepth2FromTowers.ExtractorPSet.hcalDepth = cms.int32(2) +eleIsoDepositHcalDepth2FromTowers.ExtractorPSet.hcalDepth = 2 diff --git a/RecoEgamma/EgammaIsolationAlgos/python/electronEcalRecHitIsolationLcone_cfi.py b/RecoEgamma/EgammaIsolationAlgos/python/electronEcalRecHitIsolationLcone_cfi.py index 2d9ff68bcfaac..421dbc617e9ea 100644 --- a/RecoEgamma/EgammaIsolationAlgos/python/electronEcalRecHitIsolationLcone_cfi.py +++ b/RecoEgamma/EgammaIsolationAlgos/python/electronEcalRecHitIsolationLcone_cfi.py @@ -2,10 +2,8 @@ electronEcalRecHitIsolationLcone = cms.EDProducer("EgammaEcalRecHitIsolationProducer", - ecalBarrelRecHitProducer = cms.InputTag("ecalRecHit"), - ecalBarrelRecHitCollection = cms.InputTag("EcalRecHitsEB"), - ecalEndcapRecHitProducer = cms.InputTag("ecalRecHit"), - ecalEndcapRecHitCollection = cms.InputTag("EcalRecHitsEE"), + ecalBarrelRecHitCollection = cms.InputTag("ecalRecHit", "EcalRecHitsEB"), + ecalEndcapRecHitCollection = cms.InputTag("ecalRecHit", "EcalRecHitsEE"), #useNumCrystals = cms.bool(False), #intRadiusBarrel = cms.double(0.045), diff --git a/RecoEgamma/EgammaIsolationAlgos/python/gamIsoDepositHcalFromTowers_cff.py b/RecoEgamma/EgammaIsolationAlgos/python/gamIsoDepositHcalFromTowers_cff.py index af38e48f397a6..e397a25adaf90 100644 --- a/RecoEgamma/EgammaIsolationAlgos/python/gamIsoDepositHcalFromTowers_cff.py +++ b/RecoEgamma/EgammaIsolationAlgos/python/gamIsoDepositHcalFromTowers_cff.py @@ -17,7 +17,7 @@ trackType = cms.string('candidate'), ExtractorPSet = cms.PSet( GamIsoHcalFromTowersExtractorBlock ) ) -gamIsoDepositHcalDepth1FromTowers.ExtractorPSet.hcalDepth = cms.int32(1) +gamIsoDepositHcalDepth1FromTowers.ExtractorPSet.hcalDepth = 1 gamIsoDepositHcalDepth2FromTowers = cms.EDProducer("CandIsoDepositProducer", src = cms.InputTag("photons"), @@ -25,5 +25,5 @@ trackType = cms.string('candidate'), ExtractorPSet = cms.PSet( GamIsoHcalFromTowersExtractorBlock ) ) -gamIsoDepositHcalDepth2FromTowers.ExtractorPSet.hcalDepth = cms.int32(2) +gamIsoDepositHcalDepth2FromTowers.ExtractorPSet.hcalDepth = 2 diff --git a/RecoEgamma/EgammaIsolationAlgos/python/particleBasedIsoProducer_cff.py b/RecoEgamma/EgammaIsolationAlgos/python/particleBasedIsoProducer_cff.py index 8520fbfaf158e..c1b3db87aadd9 100644 --- a/RecoEgamma/EgammaIsolationAlgos/python/particleBasedIsoProducer_cff.py +++ b/RecoEgamma/EgammaIsolationAlgos/python/particleBasedIsoProducer_cff.py @@ -1,7 +1,7 @@ import FWCore.ParameterSet.Config as cms -from RecoEgamma.EgammaIsolationAlgos.particleBasedIsoProducer_cfi import * +from RecoEgamma.EgammaIsolationAlgos.particleBasedIsolation_cfi import * particleBasedIsolationTask = cms.Task(particleBasedIsolation) particleBasedIsolationSequence = cms.Sequence(particleBasedIsolationTask) diff --git a/RecoEgamma/EgammaIsolationAlgos/python/particleBasedIsoProducer_cfi.py b/RecoEgamma/EgammaIsolationAlgos/python/particleBasedIsoProducer_cfi.py deleted file mode 100644 index f42595599b29f..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/python/particleBasedIsoProducer_cfi.py +++ /dev/null @@ -1,21 +0,0 @@ -import FWCore.ParameterSet.Config as cms -from RecoEgamma.EgammaIsolationAlgos.pfBlockBasedIsolation_cfi import * - -# -# particle based isolatio -# -particleBasedIsolation = cms.EDProducer("ParticleBasedIsoProducer", - photonTmpProducer = cms.InputTag("gedPhotonsTmp"), - photonProducer = cms.InputTag("gedPhotons"), - electronTmpProducer = cms.InputTag("gedGsfElectronsTmp"), - electronProducer = cms.InputTag("gedGsfElectrons"), - pfEgammaCandidates = cms.InputTag("particleFlowEGamma"), - pfCandidates = cms.InputTag("particleFlow"), - valueMapPhoToEG = cms.string("valMapPFEgammaCandToPhoton"), - valueMapPhoPFblockIso = cms.string("gedPhotons"), - valueMapEleToEG = cms.string(""), - valueMapElePFblockIso = cms.string("gedGsfElectrons"), - pfBlockBasedIsolationSetUp=cms.PSet(pfBlockBasedIsolation) -) - - diff --git a/RecoEgamma/EgammaIsolationAlgos/python/pfBlockBasedIsolation_cfi.py b/RecoEgamma/EgammaIsolationAlgos/python/pfBlockBasedIsolation_cfi.py deleted file mode 100644 index 795ae46ded125..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/python/pfBlockBasedIsolation_cfi.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - - -pfBlockBasedIsolation = cms.PSet( - #required inputs - ComponentName = cms.string('pfBlockBasedIsolation'), - coneSize = cms.double(9999999999) -) - - diff --git a/RecoEgamma/EgammaIsolationAlgos/src/EgammaL1TkIsolation.cc b/RecoEgamma/EgammaIsolationAlgos/src/EgammaL1TkIsolation.cc new file mode 100644 index 0000000000000..1fa0aef29b150 --- /dev/null +++ b/RecoEgamma/EgammaIsolationAlgos/src/EgammaL1TkIsolation.cc @@ -0,0 +1,99 @@ +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaL1TkIsolation.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/Math/interface/deltaR.h" + +#include + +EgammaL1TkIsolation::EgammaL1TkIsolation(const edm::ParameterSet& para) + : useAbsEta_(para.getParameter("useAbsEta")), + etaBoundaries_(para.getParameter>("etaBoundaries")) { + const auto& trkCutParams = para.getParameter>("trkCuts"); + for (const auto& params : trkCutParams) { + trkCuts_.emplace_back(TrkCuts(params)); + } + if (etaBoundaries_.size() + 1 != trkCuts_.size()) { + throw cms::Exception("ConfigError") << "EgammaL1TkIsolation: etaBoundaries parameters size (" + << etaBoundaries_.size() + << ") should be one less than the size of trkCuts VPSet (" << trkCuts_.size() + << ")"; + } + if (!std::is_sorted(etaBoundaries_.begin(), etaBoundaries_.end())) { + throw cms::Exception("ConfigError") + << "EgammaL1TkIsolation: etaBoundaries parameter's entries should be in increasing value"; + } +} + +void EgammaL1TkIsolation::fillPSetDescription(edm::ParameterSetDescription& desc) { + desc.add("useAbsEta", true); + desc.add("etaBoundaries", std::vector{1.5}); + desc.addVPSet("trkCuts", TrkCuts::makePSetDescription(), {edm::ParameterSet(), edm::ParameterSet()}); +} + +std::pair EgammaL1TkIsolation::calIsol(const reco::TrackBase& trk, const L1TrackCollection& tracks) const { + return calIsol(trk.eta(), trk.phi(), trk.vz(), tracks); +} + +std::pair EgammaL1TkIsolation::calIsol(const double objEta, + const double objPhi, + const double objZ, + const L1TrackCollection& tracks) const { + double ptSum = 0.; + int nrTrks = 0; + + const TrkCuts& cuts = trkCuts_[etaBinNr(objEta)]; + + for (const auto& trk : tracks) { + const float trkPt = trk.momentum().perp(); + if (passTrkSel(trk, trkPt, cuts, objEta, objPhi, objZ)) { + ptSum += trkPt; + nrTrks++; + } + } + return {nrTrks, ptSum}; +} + +EgammaL1TkIsolation::TrkCuts::TrkCuts(const edm::ParameterSet& para) { + minPt = para.getParameter("minPt"); + auto sq = [](double val) { return val * val; }; + minDR2 = sq(para.getParameter("minDR")); + maxDR2 = sq(para.getParameter("maxDR")); + minDEta = para.getParameter("minDEta"); + maxDZ = para.getParameter("maxDZ"); +} + +edm::ParameterSetDescription EgammaL1TkIsolation::TrkCuts::makePSetDescription() { + edm::ParameterSetDescription desc; + desc.add("minPt", 2.0); + desc.add("maxDR", 0.3); + desc.add("minDR", 0.01); + desc.add("minDEta", 0.003); + desc.add("maxDZ", 0.7); + return desc; +} + +//as we have verfied that trkCuts_ size is etaBoundaries_ size +1 +//then this is always a valid binnr for trkCuts_ +size_t EgammaL1TkIsolation::etaBinNr(double eta) const { + if (useAbsEta_) { + eta = std::abs(eta); + } + auto res = std::upper_bound(etaBoundaries_.begin(), etaBoundaries_.end(), eta); + size_t binNr = std::distance(etaBoundaries_.begin(), res); + return binNr; +} + +bool EgammaL1TkIsolation::passTrkSel(const L1Track& trk, + const double trkPt, + const TrkCuts& cuts, + const double objEta, + const double objPhi, + const double objZ) { + if (trkPt > cuts.minPt && std::abs(objZ - trk.z0()) < cuts.maxDZ) { + const float trkEta = trk.eta(); + const float dEta = trkEta - objEta; + const float dR2 = reco::deltaR2(objEta, objPhi, trkEta, trk.phi()); + return dR2 >= cuts.minDR2 && dR2 <= cuts.maxDR2 && std::abs(dEta) >= cuts.minDEta; + } + + return false; +} diff --git a/RecoEgamma/EgammaPhotonAlgos/src/PhotonEnergyCorrector.cc b/RecoEgamma/EgammaPhotonAlgos/src/PhotonEnergyCorrector.cc index f71889d291c92..e084a4740484e 100644 --- a/RecoEgamma/EgammaPhotonAlgos/src/PhotonEnergyCorrector.cc +++ b/RecoEgamma/EgammaPhotonAlgos/src/PhotonEnergyCorrector.cc @@ -144,7 +144,7 @@ void PhotonEnergyCorrector::calculate(edm::Event& evt, // if ((weightsfromDB_ && !gedRegression_) || (!weightsfromDB_ && !(w_file_ == "none"))) { std::pair cor = - regressionCorrector_->CorrectedEnergyWithError(thePhoton, vtxcol, lazyTools, iSetup); + regressionCorrector_->CorrectedEnergyWithError(thePhoton, vtxcol, lazyTools, *theCaloGeom_); phoRegr1Energy = cor.first; phoRegr1EnergyError = cor.second; // store the value in the Photon.h diff --git a/RecoEgamma/EgammaPhotonProducers/BuildFile.xml b/RecoEgamma/EgammaPhotonProducers/BuildFile.xml index bf15fe4512b9b..ea22fa15cd4a4 100644 --- a/RecoEgamma/EgammaPhotonProducers/BuildFile.xml +++ b/RecoEgamma/EgammaPhotonProducers/BuildFile.xml @@ -1,9 +1,7 @@ - - @@ -20,8 +18,6 @@ - - diff --git a/RecoEgamma/EgammaPhotonProducers/interface/ConversionProducer.h b/RecoEgamma/EgammaPhotonProducers/interface/ConversionProducer.h deleted file mode 100644 index d563b6547a2b4..0000000000000 --- a/RecoEgamma/EgammaPhotonProducers/interface/ConversionProducer.h +++ /dev/null @@ -1,203 +0,0 @@ -#ifndef RecoEgamma_EgammaPhotonProducers_ConversionProducer_h -#define RecoEgamma_EgammaPhotonProducers_ConversionProducer_h -/** \class ConversionProducer - ** - ** - ** $Id: - ** \authors H. Liu, UC of Riverside US, N. Marinelli Univ of Notre Dame - ** - ***/ -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Utilities/interface/ESGetToken.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -//ECAL clusters -#include "DataFormats/EgammaReco/interface/BasicCluster.h" -#include "DataFormats/EgammaReco/interface/BasicClusterFwd.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include "DataFormats/CaloRecHit/interface/CaloCluster.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/CommonDetUnit/interface/GeomDet.h" -#include "DataFormats/GeometrySurface/interface/BoundCylinder.h" -#include "DataFormats/GeometrySurface/interface/BoundDisk.h" -#include "DataFormats/GeometrySurface/interface/SimpleCylinderBounds.h" -#include "DataFormats/GeometrySurface/interface/SimpleDiskBounds.h" - -#include "DataFormats/GeometrySurface/interface/ReferenceCounted.h" -#include "RecoVertex/VertexPrimitives/interface/VertexState.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "RecoVertex/KinematicFitPrimitives/interface/KinematicVertex.h" -#include "RecoVertex/KinematicFitPrimitives/interface/KinematicParticle.h" -#include "RecoVertex/KinematicFitPrimitives/interface/KinematicTree.h" -#include "RecoVertex/KinematicFitPrimitives/interface/TransientTrackKinematicParticle.h" -#include "RecoVertex/KinematicFit/interface/KinematicParticleVertexFitter.h" - -//Tracker tracks -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "TrackingTools/TransientTrack/interface/TransientTrack.h" - -//photon data format -#include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" -#include "DataFormats/EgammaCandidates/interface/Conversion.h" -#include "DataFormats/EgammaCandidates/interface/ConversionFwd.h" -#include "DataFormats/EgammaTrackReco/interface/ConversionTrackFwd.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" - -#include "MagneticField/Engine/interface/MagneticField.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" -#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" -#include "TrackingTools/Records/interface/TransientTrackRecord.h" - -class TransientTrackBuilder; -class ConversionVertexFinder; - -class ConversionProducer : public edm::stream::EDProducer<> { -public: - explicit ConversionProducer(const edm::ParameterSet&); - ~ConversionProducer() override; - -private: - void produce(edm::Event&, const edm::EventSetup&) override; - - void buildSuperAndBasicClusterGeoMap(const edm::Event&, - std::multimap& basicClusterPtrs, - std::multimap& superClusterPtrs); - - // ----------member data --------------------------- - std::string algoName_; - - typedef math::XYZPointF Point; - typedef std::vector PointCollection; - - edm::EDGetTokenT > src_; - - edm::EDGetTokenT > scBarrelProducer_; - edm::EDGetTokenT > scEndcapProducer_; - edm::EDGetTokenT > bcBarrelCollection_; - edm::EDGetTokenT > bcEndcapCollection_; - std::string ConvertedPhotonCollection_; - - edm::ESGetToken transientTrackBuilder_; - edm::ESGetToken trackerGeometry_; - edm::ESGetToken magneticField_; - - bool allowD0_, allowDeltaPhi_, allowTrackBC_, allowDeltaCot_, allowMinApproach_, allowOppCharge_, allowVertex_; - - bool bypassPreselGsf_, bypassPreselEcal_, bypassPreselEcalEcal_; - - bool usePvtx_; //if use primary vertices - edm::EDGetTokenT vertexProducer_; - ConversionVertexFinder* theVertexFinder_; - - const TransientTrackBuilder* thettbuilder_; - - double deltaEta_; - - double halfWayEta_, halfWayPhi_; //halfway open angle to search in basic clusters - unsigned int maxNumOfTrackInPU_; - double maxTrackZ_; - double maxTrackRho_; - double minSCEt_; - double dEtacutForSCmatching_; - double dPhicutForSCmatching_; - double energyBC_; //1.5GeV for track BC selection - double energyTotalBC_; //5GeV for track pair BC selection - double d0Cut_; //0 for d0*charge cut - double dzCut_; //innerposition of z diff cut - double dEtaTkBC_, dPhiTkBC_; //0.06 0.6 for track and BC matching - - double maxChi2Left_, maxChi2Right_; //5. 5. for track chi2 quality - double minHitsLeft_, minHitsRight_; //5 2 for track hits quality - - double deltaCotTheta_, deltaPhi_, minApproachLow_, - minApproachHigh_; //0.02 0.2 for track pair open angle and > -0.1 cm - - double r_cut; //cross_r cut - double vtxChi2_; //vertex chi2 probablity cut - - bool allowSingleLeg_; //if single track conversion ? - bool rightBC_; //if right leg requires matching BC? - - void buildCollection(edm::Event& iEvent, - const edm::EventSetup& iSetup, - const std::multimap >& allTracks, - const std::multimap& superClusterPtrs, - const std::multimap& basicClusterPtrs, - const reco::Vertex& the_pvtx, - reco::ConversionCollection& outputConvPhotonCollection); - - //track quality cut, returns pass or no - inline bool trackQualityFilter(const edm::RefToBase& ref, bool isLeft); - inline bool trackD0Cut(const edm::RefToBase& ref); - inline bool trackD0Cut(const edm::RefToBase& ref, const reco::Vertex& the_pvtx); - - //track impact point at ECAL wall, returns validity to access position ew - bool getTrackImpactPosition(const reco::Track* tk_ref, - const TrackerGeometry* trackerGeom, - const MagneticField* magField, - math::XYZPointF& ew); - - //distance at min approaching point, returns distance - // double getMinApproach(const edm::RefToBase& ll, const edm::RefToBase& rr, - // const MagneticField* magField); - - bool preselectTrackPair(const reco::TransientTrack& ttk_l, const reco::TransientTrack& ttk_r, double& appDist); - - //cut-based selection, TODO remove global cut variables - bool checkTrackPair(const std::pair, reco::CaloClusterPtr>& ll, - const std::pair, reco::CaloClusterPtr>& rr); - - //kinematic vertex fitting, return true for valid vertex - bool checkVertex(const reco::TransientTrack& ttk_l, - const reco::TransientTrack& ttk_r, - const MagneticField* magField, - reco::Vertex& the_vertex); - bool checkPhi(const edm::RefToBase& tk_l, - const edm::RefToBase& tk_r, - const TrackerGeometry* trackerGeom, - const MagneticField* magField, - const reco::Vertex& the_vertex); - - //check the closest BC, returns true for found a BC - bool getMatchedBC(const std::multimap& bcMap, - const math::XYZPointF& trackImpactPosition, - reco::CaloClusterPtr& closestBC); - - // finds the super cluster matching with at least one track in the pair - bool matchingSC(const std::multimap& scMap, - reco::Conversion& conv, - reco::CaloClusterPtrVector& mSC); - - double etaTransformation(float EtaParticle, float Zvertex); - - math::XYZPointF toFConverterP(const math::XYZPoint& val) { return math::XYZPointF(val.x(), val.y(), val.z()); } - - math::XYZVectorF toFConverterV(const math::XYZVector& val) { return math::XYZVectorF(val.x(), val.y(), val.z()); } -}; - -inline const GeomDet* recHitDet(const TrackingRecHit& hit, const TrackingGeometry* geom) { - return geom->idToDet(hit.geographicalId()); -} - -inline const BoundPlane& recHitSurface(const TrackingRecHit& hit, const TrackingGeometry* geom) { - return recHitDet(hit, geom)->surface(); -} - -inline LocalVector toLocal(const reco::Track::Vector& v, const Surface& s) { - return s.toLocal(GlobalVector(v.x(), v.y(), v.z())); -} - -#endif diff --git a/RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackCandidateProducer.h b/RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackCandidateProducer.h deleted file mode 100644 index ed2d0b683bf6c..0000000000000 --- a/RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackCandidateProducer.h +++ /dev/null @@ -1,114 +0,0 @@ -#ifndef RecoEgamma_EgammaPhotonProducers_ConversionTrackCandidateProducer_h -#define RecoEgamma_EgammaPhotonProducers_ConversionTrackCandidateProducer_h -/** \class ConversionTrackCandidateProducer - ** - ** - ** \author Nancy Marinelli, U. of Notre Dame, US - ** - ***/ - -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "MagneticField/Engine/interface/MagneticField.h" -#include "RecoTracker/MeasurementDet/interface/MeasurementTracker.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "TrackingTools/MeasurementDet/interface/LayerMeasurements.h" -#include "TrackingTools/DetLayers/interface/NavigationSchool.h" -#include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h" -#include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h" -#include "DataFormats/CaloRecHit/interface/CaloCluster.h" -#include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h" -#include "DataFormats/Common/interface/View.h" -#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" -#include "RecoTracker/CkfPattern/interface/BaseCkfTrajectoryBuilder.h" - -class OutInConversionSeedFinder; -class InOutConversionSeedFinder; -class OutInConversionTrackFinder; -class InOutConversionTrackFinder; - -// ConversionTrackCandidateProducer inherits from EDProducer, so it can be a module: -class ConversionTrackCandidateProducer : public edm::stream::EDProducer<> { -public: - ConversionTrackCandidateProducer(const edm::ParameterSet& ps); - ~ConversionTrackCandidateProducer() override; - - void beginRun(edm::Run const&, edm::EventSetup const& es) final; - void produce(edm::Event& evt, const edm::EventSetup& es) override; - -private: - int nEvt_; - - /// Initialize EventSetup objects at each event - void setEventSetup(const edm::EventSetup& es); - - std::string OutInTrackCandidateCollection_; - std::string InOutTrackCandidateCollection_; - - std::string OutInTrackSuperClusterAssociationCollection_; - std::string InOutTrackSuperClusterAssociationCollection_; - - edm::EDGetTokenT > bcBarrelCollection_; - edm::EDGetTokenT > bcEndcapCollection_; - edm::EDGetTokenT > scHybridBarrelProducer_; - edm::EDGetTokenT > scIslandEndcapProducer_; - edm::EDGetTokenT hcalTowers_; - edm::EDGetTokenT barrelecalCollection_; - edm::EDGetTokenT endcapecalCollection_; - edm::EDGetTokenT measurementTrkEvtToken_; - - double hOverEConeSize_; - double maxHOverE_; - double minSCEt_; - double isoConeR_; - double isoInnerConeR_; - double isoEtaSlice_; - double isoEtMin_; - double isoEMin_; - bool vetoClusteredHits_; - bool useNumXtals_; - - std::vector flagsexclEB_; - std::vector flagsexclEE_; - std::vector severitiesexclEB_; - std::vector severitiesexclEE_; - - double ecalIsoCut_offset_; - double ecalIsoCut_slope_; - - edm::ESHandle theCaloGeom_; - - std::unique_ptr theTrajectoryBuilder_; - - std::unique_ptr theOutInSeedFinder_; - std::unique_ptr theOutInTrackFinder_; - std::unique_ptr theInOutSeedFinder_; - std::unique_ptr theInOutTrackFinder_; - - std::vector > caloPtrVecOutIn_; - std::vector > caloPtrVecInOut_; - - std::vector > vecOfSCRefForOutIn; - std::vector > vecOfSCRefForInOut; - - void buildCollections(bool detector, - const edm::Handle >& scHandle, - const edm::Handle >& bcHandle, - edm::Handle ecalRecHitHandle, - const EcalRecHitCollection& ecalRecHits, - const EcalSeverityLevelAlgo* sevLev, - //edm::ESHandle chStatus, - const edm::Handle& hcalTowersHandle, - TrackCandidateCollection& outInTracks, - TrackCandidateCollection& inOutTracks, - std::vector >& vecRecOI, - std::vector >& vecRecIO); -}; -#endif diff --git a/RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackMerger.h b/RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackMerger.h deleted file mode 100644 index a5f0a2f328987..0000000000000 --- a/RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackMerger.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef ConversionTrackMerger_h -#define ConversionTrackMerger_h - -// -// Package: RecoTracker/FinalTrackSelectors -// Class: ConversionTrackMerger -// -// Description: Hit Dumper -// -// Original Author: Steve Wagner, stevew@pizero.colorado.edu -// Created: Sat Jan 14 22:00:00 UTC 2006 -// -// - -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/EventSetup.h" - -#include "DataFormats/EgammaTrackReco/interface/ConversionTrack.h" -#include "DataFormats/EgammaTrackReco/interface/ConversionTrackFwd.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackBase.h" -#include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -class ConversionTrackMerger : public edm::stream::EDProducer<> { -public: - explicit ConversionTrackMerger(const edm::ParameterSet& conf); - - ~ConversionTrackMerger() override; - - void produce(edm::Event& e, const edm::EventSetup& c) override; - -private: - edm::ParameterSet conf_; - - edm::EDGetTokenT trackProducer1; - edm::EDGetTokenT trackProducer2; - - std::unique_ptr outputTrks; -}; - -#endif diff --git a/RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackProducer.h b/RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackProducer.h deleted file mode 100644 index fb470fd5eb2e4..0000000000000 --- a/RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackProducer.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef ConversionTrackProducer_h -#define ConversionTrackProducer_h - -// -// Package: RecoTracker/FinalTrackSelectors -// Class: ConversionTrackProducer -// -// Description: Hit Dumper -// -// Original Author: Steve Wagner, stevew@pizero.colorado.edu -// Created: Sat Jan 14 22:00:00 UTC 2006 -// -// - -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" - -#include "DataFormats/EgammaTrackReco/interface/ConversionTrack.h" -#include "DataFormats/EgammaTrackReco/interface/ConversionTrackFwd.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackBase.h" -#include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "MagneticField/Engine/interface/MagneticField.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" - -#include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" -#include "TrackingTools/GsfTracking/interface/TrajGsfTrackAssociation.h" - -namespace reco { - class BeamSpot; -} - -//-------------------------------------------------- -//Added by D. Giordano -// 2011/08/05 -// Reduction of the track sample based on geometric hypothesis for conversion tracks -#include "RecoTracker/ConversionSeedGenerators/interface/IdealHelixParameters.h" -//-------------------------------------------------- - -class ConversionTrackProducer : public edm::stream::EDProducer<> { - typedef edm::AssociationMap, reco::GsfTrackCollection, unsigned short> > - TrajGsfTrackAssociationCollection; - -public: - explicit ConversionTrackProducer(const edm::ParameterSet& conf); - - ~ConversionTrackProducer() override; - - void produce(edm::Event& e, const edm::EventSetup& c) override; - -private: - edm::EDGetTokenT > genericTracks; - edm::EDGetTokenT kfTrajectories; - edm::EDGetTokenT gsfTrajectories; - bool useTrajectory; - bool setTrackerOnly; - bool setIsGsfTrackOpen; - bool setArbitratedEcalSeeded; - bool setArbitratedMerged; - bool setArbitratedMergedEcalGeneral; - - //-------------------------------------------------- - //Added by D. Giordano - // 2011/08/05 - // Reduction of the track sample based on geometric hypothesis for conversion tracks - - edm::EDGetTokenT beamSpotInputTag; - edm::ESGetToken magFieldToken; - bool filterOnConvTrackHyp; - double minConvRadius; - IdealHelixParameters ConvTrackPreSelector; -}; -#endif diff --git a/RecoEgamma/EgammaPhotonProducers/interface/ConvertedPhotonProducer.h b/RecoEgamma/EgammaPhotonProducers/interface/ConvertedPhotonProducer.h deleted file mode 100644 index 5bc20e7e28285..0000000000000 --- a/RecoEgamma/EgammaPhotonProducers/interface/ConvertedPhotonProducer.h +++ /dev/null @@ -1,114 +0,0 @@ -#ifndef RecoEgamma_EgammaPhotonProducers_ConvertedPhotonProducer_h -#define RecoEgamma_EgammaPhotonProducers_ConvertedPhotonProducer_h -/** \class ConvertedPhotonProducer - ** - ** - ** \author Nancy Marinelli, U. of Notre Dame, US - ** - ***/ - -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Utilities/interface/ESGetToken.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "MagneticField/Engine/interface/MagneticField.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" -#include "RecoTracker/MeasurementDet/interface/MeasurementTracker.h" -#include "TrackingTools/TransientTrack/interface/TransientTrack.h" -#include "TrackingTools/MeasurementDet/interface/LayerMeasurements.h" -#include "TrackingTools/DetLayers/interface/NavigationSchool.h" -#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" -#include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h" -#include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h" -#include "DataFormats/Common/interface/View.h" -#include "RecoEgamma/EgammaTools/interface/ConversionLikelihoodCalculator.h" -#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" -#include "RecoEgamma/EgammaPhotonAlgos/interface/ConversionTrackPairFinder.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "DataFormats/EgammaTrackReco/interface/TrackCaloClusterAssociation.h" -#include "TrackingTools/Records/interface/TransientTrackRecord.h" - -class ConversionTrackEcalImpactPoint; -class ConversionTrackPairFinder; -class ConversionVertexFinder; -class ConvertedPhotonProducer : public edm::stream::EDProducer<> { -public: - ConvertedPhotonProducer(const edm::ParameterSet& ps); - ~ConvertedPhotonProducer() override; - - void beginRun(edm::Run const&, const edm::EventSetup& es) final; - void produce(edm::Event& evt, const edm::EventSetup& es) override; - -private: - void buildCollections( - edm::EventSetup const& es, - const edm::Handle >& scHandle, - const edm::Handle >& bcHandle, - const edm::Handle& hcalTowersHandle, - const edm::Handle& trkHandle, - std::map, reco::CaloClusterPtr, CompareTwoTracksVectors>& allPairs, - reco::ConversionCollection& outputConvPhotonCollection); - void cleanCollections(const edm::Handle >& scHandle, - const edm::OrphanHandle& conversionHandle, - reco::ConversionCollection& outputCollection); - - std::vector solveAmbiguity(const edm::OrphanHandle& conversionHandle, - reco::CaloClusterPtr const& sc); - - float calculateMinApproachDistance(const reco::TrackRef& track1, const reco::TrackRef& track2); - void getCircleCenter(const reco::TrackRef& tk, double r, double& x0, double& y0); - - edm::EDGetTokenT conversionOITrackProducer_; - edm::EDGetTokenT conversionIOTrackProducer_; - - edm::EDGetTokenT outInTrackSCAssociationCollection_; - edm::EDGetTokenT inOutTrackSCAssociationCollection_; - - edm::EDGetTokenT generalTrackProducer_; - - std::string ConvertedPhotonCollection_; - std::string CleanedConvertedPhotonCollection_; - - edm::EDGetTokenT > bcBarrelCollection_; - edm::EDGetTokenT > bcEndcapCollection_; - edm::EDGetTokenT > scHybridBarrelProducer_; - edm::EDGetTokenT > scIslandEndcapProducer_; - edm::ParameterSet conf_; - edm::EDGetTokenT hcalTowers_; - - edm::ESHandle theCaloGeom_; - edm::ESHandle theMF_; - edm::ESHandle theTransientTrackBuilder_; - - edm::ESGetToken caloGeomToken_; - edm::ESGetToken mFToken_; - edm::ESGetToken transientTrackToken_; - - ConversionTrackPairFinder* theTrackPairFinder_; - ConversionVertexFinder* theVertexFinder_; - ConversionTrackEcalImpactPoint* theEcalImpactPositionFinder_; - int nEvt_; - std::string algoName_; - - double hOverEConeSize_; - double maxHOverE_; - double minSCEt_; - bool recoverOneTrackCase_; - double dRForConversionRecovery_; - double deltaCotCut_; - double minApproachDisCut_; - int maxNumOfCandidates_; - bool risolveAmbiguity_; - - ConversionLikelihoodCalculator* theLikelihoodCalc_; - std::string likelihoodWeights_; - - math::XYZPointF toFConverterP(const math::XYZPoint& val) { return math::XYZPointF(val.x(), val.y(), val.z()); } - - math::XYZVectorF toFConverterV(const math::XYZVector& val) { return math::XYZVectorF(val.x(), val.y(), val.z()); } -}; -#endif diff --git a/RecoEgamma/EgammaPhotonProducers/interface/GEDPhotonCoreProducer.h b/RecoEgamma/EgammaPhotonProducers/interface/GEDPhotonCoreProducer.h deleted file mode 100644 index 534179d64d489..0000000000000 --- a/RecoEgamma/EgammaPhotonProducers/interface/GEDPhotonCoreProducer.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef RecoEgamma_EgammaPhotonProducers_GEDPhotonCoreProducer_h -#define RecoEgamma_EgammaPhotonProducers_GEDPhotonCoreProducer_h -/** \class GEDPhotonCoreProducer - ** - ** - ** \author Nancy Marinelli, U. of Notre Dame, US - ** - ***/ - -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "DataFormats/EgammaCandidates/interface/PhotonCore.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" - -// GEDPhotonCoreProducer inherits from EDProducer, so it can be a module: -class GEDPhotonCoreProducer : public edm::stream::EDProducer<> { -public: - GEDPhotonCoreProducer(const edm::ParameterSet& ps); - ~GEDPhotonCoreProducer() override; - - void produce(edm::Event& evt, const edm::EventSetup& es) override; - -private: - std::string GEDPhotonCoreCollection_; - edm::EDGetTokenT pfEgammaCandidates_; - edm::EDGetTokenT pixelSeedProducer_; - - double minSCEt_; - bool validConversions_; - edm::ParameterSet conf_; - bool validPixelSeeds_; -}; -#endif diff --git a/RecoEgamma/EgammaPhotonProducers/interface/GEDPhotonProducer.h b/RecoEgamma/EgammaPhotonProducers/interface/GEDPhotonProducer.h deleted file mode 100644 index 169d8b0c90903..0000000000000 --- a/RecoEgamma/EgammaPhotonProducers/interface/GEDPhotonProducer.h +++ /dev/null @@ -1,165 +0,0 @@ -#ifndef RecoEgamma_EgammaPhotonProducers_GEDPhotonProducer_h -#define RecoEgamma_EgammaPhotonProducers_GEDPhotonProducer_h -/** \class GEDPhotonProducer - ** - ** - ** \author Nancy Marinelli, U. of Notre Dame, US - ** - ***/ - -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/CaloTopology/interface/CaloTopology.h" -#include "DataFormats/EgammaCandidates/interface/Conversion.h" -#include "DataFormats/EgammaReco/interface/BasicCluster.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/EgammaCandidates/interface/PhotonCore.h" -#include "DataFormats/EgammaReco/interface/BasicClusterShapeAssociation.h" -#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" -#include "RecoEcal/EgammaCoreTools/interface/PositionCalc.h" -#include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h" -#include "RecoEgamma/PhotonIdentification/interface/PhotonIsolationCalculator.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" -#include "RecoEgamma/PhotonIdentification/interface/PhotonMIPHaloTagger.h" -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterFunctionBaseClass.h" -#include "CondFormats/EcalObjects/interface/EcalFunctionParameters.h" -#include "RecoEgamma/EgammaPhotonAlgos/interface/PhotonEnergyCorrector.h" - -#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" - -// GEDPhotonProducer inherits from EDProducer, so it can be a module: -class GEDPhotonProducer : public edm::stream::EDProducer<> { -public: - GEDPhotonProducer(const edm::ParameterSet& ps); - ~GEDPhotonProducer() override; - - void beginRun(edm::Run const& r, edm::EventSetup const& es) final; - void endRun(edm::Run const&, edm::EventSetup const&) final; - void produce(edm::Event& evt, const edm::EventSetup& es) override; - -private: - class RecoStepInfo { - public: - enum FlagBits { kOOT = 0x1, kFinal = 0x2 }; - explicit RecoStepInfo(const std::string& recoStep); - - bool isOOT() const { return flags_ & kOOT; } - bool isFinal() const { return flags_ & kFinal; } - - private: - unsigned int flags_; - }; - - void fillPhotonCollection(edm::Event& evt, - edm::EventSetup const& es, - const edm::Handle& photonCoreHandle, - const CaloTopology* topology, - const EcalRecHitCollection* ecalBarrelHits, - const EcalRecHitCollection* ecalEndcapHits, - const EcalRecHitCollection* preshowerHits, - CaloTowerCollection const* hcalTowers, - const reco::VertexCollection& pvVertices, - reco::PhotonCollection& outputCollection, - int& iSC); - - void fillPhotonCollection(edm::Event& evt, - edm::EventSetup const& es, - const edm::Handle& photonHandle, - const edm::Handle pfCandidateHandle, - const edm::Handle pfEGCandidateHandle, - edm::ValueMap pfEGCandToPhotonMap, - edm::Handle& pvVertices, - reco::PhotonCollection& outputCollection, - int& iSC, - const edm::Handle>& chargedHadrons, - const edm::Handle>& neutralHadrons, - const edm::Handle>& photons, - const edm::Handle>& chargedHadronsWorstVtx, - const edm::Handle>& chargedHadronsWorstVtxGeomVeto, - const edm::Handle>& chargedHadronsPFPV, - const edm::Handle>& pfEcalClusters, - const edm::Handle>& pfHcalClusters); - - // std::string PhotonCoreCollection_; - std::string photonCollection_; - edm::InputTag photonProducer_; - - edm::EDGetTokenT photonCoreProducerT_; - edm::EDGetTokenT photonProducerT_; - edm::EDGetTokenT barrelEcalHits_; - edm::EDGetTokenT endcapEcalHits_; - edm::EDGetTokenT preshowerHits_; - edm::EDGetTokenT pfEgammaCandidates_; - edm::EDGetTokenT pfCandidates_; - edm::EDGetTokenT hcalTowers_; - edm::EDGetTokenT vertexProducer_; - //for isolation with map-based veto - edm::EDGetTokenT>> particleBasedIsolationToken; - //photon isolation sums - edm::EDGetTokenT> phoChargedIsolationToken_; - edm::EDGetTokenT> phoNeutralHadronIsolationToken_; - edm::EDGetTokenT> phoPhotonIsolationToken_; - edm::EDGetTokenT> phoChargedWorstVtxIsoToken_; - edm::EDGetTokenT> phoChargedWorstVtxGeomVetoIsoToken_; - edm::EDGetTokenT> phoChargedPFPVIsoToken_; - - edm::EDGetTokenT> phoPFECALClusIsolationToken_; - edm::EDGetTokenT> phoPFHCALClusIsolationToken_; - - const EcalClusterLazyTools::ESGetTokens ecalClusterESGetTokens_; - - std::string conversionProducer_; - std::string conversionCollection_; - std::string valueMapPFCandPhoton_; - - PhotonIsolationCalculator* thePhotonIsolationCalculator_; - - //AA - //Flags and severities to be excluded from calculations - - std::vector flagsexclEB_; - std::vector flagsexclEE_; - std::vector severitiesexclEB_; - std::vector severitiesexclEE_; - - double hOverEConeSize_; - double maxHOverE_; - double minSCEt_; - double highEt_; - double minR9Barrel_; - double minR9Endcap_; - bool runMIPTagger_; - - bool validConversions_; - RecoStepInfo recoStep_; - - bool usePrimaryVertex_; - edm::ParameterSet conf_; - PositionCalc posCalculator_; - - edm::ESHandle theCaloGeom_; - edm::ESHandle theCaloTopo_; - - bool validPixelSeeds_; - - //MIP - PhotonMIPHaloTagger* thePhotonMIPHaloTagger_; - - std::vector preselCutValuesBarrel_; - std::vector preselCutValuesEndcap_; - - EcalClusterFunctionBaseClass* energyCorrectionF; - PhotonEnergyCorrector* thePhotonEnergyCorrector_; - std::string candidateP4type_; - - bool checkHcalStatus_; -}; -#endif diff --git a/RecoEgamma/EgammaPhotonProducers/interface/PhotonCoreProducer.h b/RecoEgamma/EgammaPhotonProducers/interface/PhotonCoreProducer.h deleted file mode 100644 index 547771b83bd38..0000000000000 --- a/RecoEgamma/EgammaPhotonProducers/interface/PhotonCoreProducer.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef RecoEgamma_EgammaPhotonProducers_PhotonCoreProducer_h -#define RecoEgamma_EgammaPhotonProducers_PhotonCoreProducer_h -/** \class PhotonCoreProducer - ** - ** - ** \author Nancy Marinelli, U. of Notre Dame, US - ** - ***/ - -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/CaloTopology/interface/CaloTopology.h" -#include "DataFormats/EgammaCandidates/interface/Conversion.h" -#include "DataFormats/EgammaReco/interface/BasicCluster.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaCandidates/interface/PhotonCore.h" -#include "DataFormats/EgammaReco/interface/BasicClusterShapeAssociation.h" -#include "RecoEcal/EgammaCoreTools/interface/PositionCalc.h" -#include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" -#include "RecoEgamma/EgammaTools/interface/HoECalculator.h" -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h" -#include "RecoEgamma/PhotonIdentification/interface/PhotonIsolationCalculator.h" - -// PhotonCoreProducer inherits from EDProducer, so it can be a module: -class PhotonCoreProducer : public edm::stream::EDProducer<> { -public: - PhotonCoreProducer(const edm::ParameterSet& ps); - ~PhotonCoreProducer() override; - - void produce(edm::Event& evt, const edm::EventSetup& es) override; - -private: - void fillPhotonCollection(edm::Event& evt, - edm::EventSetup const& es, - const edm::Handle& scHandle, - const edm::Handle& conversionHandle, - const edm::Handle& pixelSeeds, - reco::PhotonCoreCollection& outputCollection, - int& iSC); - - reco::ConversionRef solveAmbiguity(const edm::Handle& conversionHandle, - reco::SuperClusterRef& sc); - - std::string PhotonCoreCollection_; - edm::EDGetTokenT scHybridBarrelProducer_; - edm::EDGetTokenT scIslandEndcapProducer_; - edm::EDGetTokenT conversionProducer_; - edm::EDGetTokenT pixelSeedProducer_; - - double minSCEt_; - bool validConversions_; - edm::ParameterSet conf_; - bool validPixelSeeds_; - bool risolveAmbiguity_; -}; -#endif diff --git a/RecoEgamma/EgammaPhotonProducers/interface/PhotonProducer.h b/RecoEgamma/EgammaPhotonProducers/interface/PhotonProducer.h deleted file mode 100644 index d82a861d69796..0000000000000 --- a/RecoEgamma/EgammaPhotonProducers/interface/PhotonProducer.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef RecoEgamma_EgammaPhotonProducers_PhotonProducer_h -#define RecoEgamma_EgammaPhotonProducers_PhotonProducer_h -/** \class PhotonProducer - ** - ** - ** \author Nancy Marinelli, U. of Notre Dame, US - ** - ***/ - -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/CaloTopology/interface/CaloTopology.h" -#include "DataFormats/EgammaCandidates/interface/Conversion.h" -#include "DataFormats/EgammaReco/interface/BasicCluster.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/EgammaCandidates/interface/PhotonCore.h" -#include "DataFormats/EgammaReco/interface/BasicClusterShapeAssociation.h" -#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" -#include "RecoEcal/EgammaCoreTools/interface/PositionCalc.h" -#include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h" -#include "RecoEgamma/PhotonIdentification/interface/PhotonIsolationCalculator.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" -#include "RecoEgamma/PhotonIdentification/interface/PhotonMIPHaloTagger.h" -#include "CondFormats/EcalObjects/interface/EcalFunctionParameters.h" -#include "RecoEgamma/EgammaPhotonAlgos/interface/PhotonEnergyCorrector.h" - -// PhotonProducer inherits from EDProducer, so it can be a module: -class PhotonProducer : public edm::stream::EDProducer<> { -public: - PhotonProducer(const edm::ParameterSet& ps); - - void produce(edm::Event& evt, const edm::EventSetup& es) override; - -private: - void fillPhotonCollection(edm::Event& evt, - edm::EventSetup const& es, - const edm::Handle& photonCoreHandle, - const CaloTopology* topology, - const EcalRecHitCollection* ecalBarrelHits, - const EcalRecHitCollection* ecalEndcapHits, - CaloTowerCollection const& hcalTowers, - reco::VertexCollection& pvVertices, - reco::PhotonCollection& outputCollection, - int& iSC, - const EcalSeverityLevelAlgo* sevLv); - - // std::string PhotonCoreCollection_; - std::string PhotonCollection_; - edm::EDGetTokenT photonCoreProducer_; - edm::EDGetTokenT barrelEcalHits_; - edm::EDGetTokenT endcapEcalHits_; - edm::EDGetTokenT hcalTowers_; - edm::EDGetTokenT vertexProducer_; - - //AA - //Flags and severities to be excluded from calculations - - std::vector flagsexclEB_; - std::vector flagsexclEE_; - std::vector severitiesexclEB_; - std::vector severitiesexclEE_; - - double hOverEConeSize_; - double maxHOverE_; - double minSCEt_; - double highEt_; - double minR9Barrel_; - double minR9Endcap_; - bool runMIPTagger_; - - bool validConversions_; - - bool usePrimaryVertex_; - - PositionCalc posCalculator_; - - bool validPixelSeeds_; - PhotonIsolationCalculator photonIsolationCalculator_; - - //MIP - PhotonMIPHaloTagger photonMIPHaloTagger_; - - std::vector preselCutValuesBarrel_; - std::vector preselCutValuesEndcap_; - - PhotonEnergyCorrector photonEnergyCorrector_; - std::string candidateP4type_; -}; -#endif diff --git a/RecoEgamma/EgammaPhotonProducers/interface/ReducedEGProducer.h b/RecoEgamma/EgammaPhotonProducers/interface/ReducedEGProducer.h deleted file mode 100644 index 58f1bca78684d..0000000000000 --- a/RecoEgamma/EgammaPhotonProducers/interface/ReducedEGProducer.h +++ /dev/null @@ -1,218 +0,0 @@ -#ifndef RecoEgamma_EgammaPhotonProducers_ReducedEGProducer_h -#define RecoEgamma_EgammaPhotonProducers_ReducedEGProducer_h -/** \class ReducedEGProducer - ** - ** Select subset of electrons and photons from input collections and - ** produced consistently relinked output collections including - ** associated SuperClusters, CaloClusters and ecal RecHits - ** - ** \author J.Bendavid (CERN) - ** \edited: K. McDermott(Cornell) : refactored code + out of time photons - ***/ - -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Utilities/interface/ESGetToken.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/CaloTopology/interface/CaloTopology.h" -#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" -#include "DataFormats/EgammaCandidates/interface/Conversion.h" -#include "DataFormats/EgammaReco/interface/BasicCluster.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/EgammaCandidates/interface/PhotonCore.h" -#include "DataFormats/EgammaReco/interface/BasicClusterShapeAssociation.h" -#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" -#include "RecoEcal/EgammaCoreTools/interface/PositionCalc.h" -#include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" -#include "CondFormats/EcalObjects/interface/EcalFunctionParameters.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/EGHcalRecHitSelector.h" -#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" -#include "DataFormats/Common/interface/ValueMap.h" - -#include "CommonTools/UtilAlgos/interface/StringCutObjectSelector.h" - -// ReducedEGProducer inherits from EDProducer, so it can be a module: -class ReducedEGProducer : public edm::stream::EDProducer<> { -public: - ReducedEGProducer(const edm::ParameterSet& ps); - ~ReducedEGProducer() override; - - void beginRun(edm::Run const&, const edm::EventSetup&) final; - void produce(edm::Event& evt, const edm::EventSetup& es) final; - -private: - template - void linkCore(const T& core, U& cores, std::map& coreMap); - - void linkSuperCluster(const reco::SuperClusterRef& superCluster, - std::map& superClusterMap, - reco::SuperClusterCollection& superClusters, - const bool relink, - std::unordered_set& superClusterFullRelinkMap); - - void linkConversions(const reco::ConversionRefVector& convrefs, - reco::ConversionCollection& conversions, - std::map& conversionMap); - - void linkConversionsByTrackRef(const edm::Handle& conversionHandle, - const reco::GsfElectron& gsfElectron, - reco::ConversionCollection& conversions, - std::map& conversionMap); - - void linkConversionsByTrackRef(const edm::Handle& conversionHandle, - const reco::SuperCluster& superCluster, - reco::ConversionCollection& conversions, - std::map& conversionMap); - - void linkConversion(const reco::ConversionRef& convref, - reco::ConversionCollection& conversions, - std::map& conversionMap); - - void linkCaloCluster(const reco::CaloClusterPtr& caloCluster, - reco::CaloClusterCollection& caloClusters, - std::map& caloClusterMap); - - void linkCaloClusters(const reco::SuperCluster& superCluster, - reco::CaloClusterCollection& ebeeClusters, - std::map& ebeeClusterMap, - std::unordered_set& rechitMap, - const edm::Handle& barrelHitHandle, - const edm::Handle& endcapHitHandle, - const CaloTopology* caloTopology, - reco::CaloClusterCollection& esClusters, - std::map& esClusterMap); - - void linkHcalHits(const reco::SuperCluster& superClus, - const HBHERecHitCollection& recHits, - std::unordered_set& hcalDetIds); - - void relinkCaloClusters(reco::SuperCluster& superCluster, - const std::map& ebeeClusterMap, - const std::map& esClusterMap, - const edm::OrphanHandle& outEBEEClusterHandle, - const edm::OrphanHandle& outESClusterHandle); - - template - void relinkSuperCluster(T& core, - const std::map& superClusterMap, - const edm::OrphanHandle& outSuperClusterHandle); - - void relinkGsfTrack(reco::GsfElectronCore& electroncore, - const std::map& gsfTrackMap, - const edm::OrphanHandle& outGsfTrackHandle); - - void relinkConversions(reco::PhotonCore& photonCore, - const reco::ConversionRefVector& convrefs, - const std::map& conversionMap, - const edm::OrphanHandle& outConversionHandle); - - void relinkPhotonCore(reco::Photon& photon, - const std::map& photonCoreMap, - const edm::OrphanHandle& outPhotonCoreHandle); - - void relinkGsfElectronCore(reco::GsfElectron& gsfElectron, - const std::map& gsfElectronCoreMap, - const edm::OrphanHandle& outGsfElectronCoreHandle); - - static void calibratePhoton(reco::Photon& photon, - const reco::PhotonRef& oldPhoRef, - const edm::ValueMap& energyMap, - const edm::ValueMap& energyErrMap); - - static void calibrateElectron(reco::GsfElectron& gsfElectron, - const reco::GsfElectronRef& oldEleRef, - const edm::ValueMap& energyMap, - const edm::ValueMap& energyErrMap, - const edm::ValueMap& ecalEnergyMap, - const edm::ValueMap& ecalEnergyErrMap); - - template - void setToken(edm::EDGetTokenT& token, const edm::ParameterSet& config, const std::string& name) { - token = consumes(config.getParameter(name)); - } - - //tokens for input collections - const edm::EDGetTokenT photonT_; - edm::EDGetTokenT ootPhotonT_; - const edm::EDGetTokenT gsfElectronT_; - const edm::EDGetTokenT gsfTrackT_; - const edm::EDGetTokenT conversionT_; - const edm::EDGetTokenT singleConversionT_; - - const edm::EDGetTokenT barrelEcalHits_; - const edm::EDGetTokenT endcapEcalHits_; - const bool doPreshowerEcalHits_; - const edm::EDGetTokenT preshowerEcalHits_; - const edm::EDGetTokenT hbheHits_; - - const edm::EDGetTokenT > > photonPfCandMapT_; - const edm::EDGetTokenT > > gsfElectronPfCandMapT_; - - std::vector > > photonIdTs_; - std::vector > > gsfElectronIdTs_; - - std::vector > > photonFloatValueMapTs_; - std::vector > > ootPhotonFloatValueMapTs_; - std::vector > > gsfElectronFloatValueMapTs_; - - const bool applyPhotonCalibOnData_; - const bool applyPhotonCalibOnMC_; - const bool applyGsfElectronCalibOnData_; - const bool applyGsfElectronCalibOnMC_; - edm::EDGetTokenT > photonCalibEnergyT_; - edm::EDGetTokenT > photonCalibEnergyErrT_; - edm::EDGetTokenT > gsfElectronCalibEnergyT_; - edm::EDGetTokenT > gsfElectronCalibEnergyErrT_; - edm::EDGetTokenT > gsfElectronCalibEcalEnergyT_; - edm::EDGetTokenT > gsfElectronCalibEcalEnergyErrT_; - - edm::ESGetToken caloTopology_; - //names for output collections - const std::string outPhotons_; - const std::string outPhotonCores_; - const std::string outOOTPhotons_; - const std::string outOOTPhotonCores_; - const std::string outGsfElectrons_; - const std::string outGsfElectronCores_; - const std::string outGsfTracks_; - const std::string outConversions_; - const std::string outSingleConversions_; - const std::string outSuperClusters_; - const std::string outEBEEClusters_; - const std::string outESClusters_; - const std::string outOOTSuperClusters_; - const std::string outOOTEBEEClusters_; - const std::string outOOTESClusters_; - const std::string outEBRecHits_; - const std::string outEERecHits_; - const std::string outESRecHits_; - const std::string outHBHERecHits_; - const std::string outPhotonPfCandMap_; - const std::string outGsfElectronPfCandMap_; - const std::vector outPhotonIds_; - const std::vector outGsfElectronIds_; - const std::vector outPhotonFloatValueMaps_; - const std::vector outOOTPhotonFloatValueMaps_; - const std::vector outGsfElectronFloatValueMaps_; - - const StringCutObjectSelector keepPhotonSel_; - const StringCutObjectSelector slimRelinkPhotonSel_; - const StringCutObjectSelector relinkPhotonSel_; - const StringCutObjectSelector keepOOTPhotonSel_; - const StringCutObjectSelector slimRelinkOOTPhotonSel_; - const StringCutObjectSelector relinkOOTPhotonSel_; - const StringCutObjectSelector keepGsfElectronSel_; - const StringCutObjectSelector slimRelinkGsfElectronSel_; - const StringCutObjectSelector relinkGsfElectronSel_; - - EGHcalRecHitSelector hcalHitSel_; -}; -#endif diff --git a/RecoEgamma/EgammaPhotonProducers/interface/TrackProducerWithSCAssociation.h b/RecoEgamma/EgammaPhotonProducers/interface/TrackProducerWithSCAssociation.h deleted file mode 100644 index b69872cceebfd..0000000000000 --- a/RecoEgamma/EgammaPhotonProducers/interface/TrackProducerWithSCAssociation.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef TrackProducerWithSCAssociation_h -#define TrackProducerWithSCAssociation_h -/** \class TrackProducerWithSCAssociation - ** - ** - ** \author Nancy Marinelli, U. of Notre Dame, US - ** Modified version of TrackProducer by Giuseppe Cerati - ** to have super cluster - conversion track association - ** - ***/ - -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "RecoTracker/TrackProducer/interface/TrackProducerBase.h" -#include "RecoTracker/TrackProducer/interface/TrackProducerAlgorithm.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "TrackingTools/TransientTrack/interface/TransientTrack.h" -#include "DataFormats/EgammaTrackReco/interface/TrackCandidateCaloClusterAssociation.h" - -class TrackProducerWithSCAssociation : public TrackProducerBase, public edm::stream::EDProducer<> { -public: - explicit TrackProducerWithSCAssociation(const edm::ParameterSet& iConfig); - - void produce(edm::Event&, const edm::EventSetup&) override; - - std::vector getTransient(edm::Event&, const edm::EventSetup&); - -private: - std::string myname_; - TrackProducerAlgorithm theAlgo; - std::string conversionTrackCandidateProducer_; - std::string trackCSuperClusterAssociationCollection_; - std::string trackSuperClusterAssociationCollection_; - edm::EDGetTokenT assoc_token; - edm::OrphanHandle rTracks_; - edm::EDGetTokenT measurementTrkToken_; - bool myTrajectoryInEvent_; - bool validTrackCandidateSCAssociationInput_; - - //Same recipe as Ursula's for electrons. Copy this from TrackProducerBase to get the OrphanHandle - //ugly temporary solution!! I agree ! - void putInEvt(edm::Event& evt, - const Propagator* thePropagator, - const MeasurementTracker* theMeasTk, - std::unique_ptr selHits, - std::unique_ptr selTracks, - std::unique_ptr selTrackExtras, - std::unique_ptr> selTrajectories, - AlgoProductCollection& algoResults, - TransientTrackingRecHitBuilder const* hitBuilder, - const TrackerTopology* ttopo); -}; - -#endif diff --git a/RecoEgamma/EgammaPhotonProducers/python/allConversions_cfi.py b/RecoEgamma/EgammaPhotonProducers/python/allConversions_cfi.py index 3da3570428e0f..4ae902ff34b9b 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/allConversions_cfi.py +++ b/RecoEgamma/EgammaPhotonProducers/python/allConversions_cfi.py @@ -63,6 +63,6 @@ ) from Configuration.Eras.Modifier_phase2_hgcal_cff import phase2_hgcal -phase2_hgcal.toModify( allConversions, bypassPreselGsf = cms.bool(False) ) +phase2_hgcal.toModify( allConversions, bypassPreselGsf = False ) from Configuration.Eras.Modifier_fastSim_cff import fastSim fastSim.toModify(allConversions, src = 'gsfGeneralConversionTrackMerger') diff --git a/RecoEgamma/EgammaPhotonProducers/python/conversionTrackCandidates_cff.py b/RecoEgamma/EgammaPhotonProducers/python/conversionTrackCandidates_cff.py new file mode 100644 index 0000000000000..fdfa2bd002dce --- /dev/null +++ b/RecoEgamma/EgammaPhotonProducers/python/conversionTrackCandidates_cff.py @@ -0,0 +1,14 @@ +import FWCore.ParameterSet.Config as cms + +from RecoEgamma.EgammaPhotonProducers.conversionTrackCandidates_cfi import conversionTrackCandidates + +from RecoEcal.EgammaClusterProducers.hybridSuperClusters_cfi import * +from RecoEcal.EgammaClusterProducers.multi5x5BasicClusters_cfi import * + +from RecoEgamma.EgammaPhotonProducers.trajectoryBuilderForConversions_cfi import * + +conversionTrackCandidates.RecHitFlagToBeExcludedEB = cleanedHybridSuperClusters.RecHitFlagToBeExcluded +conversionTrackCandidates.RecHitSeverityToBeExcludedEB = cleanedHybridSuperClusters.RecHitSeverityToBeExcluded +conversionTrackCandidates.RecHitFlagToBeExcludedEE = multi5x5BasicClustersCleaned.RecHitFlagToBeExcluded +conversionTrackCandidates.RecHitSeverityToBeExcludedEE = cleanedHybridSuperClusters.RecHitSeverityToBeExcluded +conversionTrackCandidates.TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('TrajectoryBuilderForConversions')) diff --git a/RecoEgamma/EgammaPhotonProducers/python/conversionTrackCandidates_cfi.py b/RecoEgamma/EgammaPhotonProducers/python/conversionTrackCandidates_cfi.py deleted file mode 100644 index 9ef06e39053ac..0000000000000 --- a/RecoEgamma/EgammaPhotonProducers/python/conversionTrackCandidates_cfi.py +++ /dev/null @@ -1,84 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# configuration for producer of converted photons -# -# stripCPE -from RecoLocalTracker.SiStripRecHitConverter.StripCPEfromTrackAngle_cfi import * -from RecoLocalTracker.SiStripRecHitConverter.SiStripRecHitMatcher_cfi import * -#TransientTrackingBuilder -from RecoTracker.TransientTrackingRecHit.TransientTrackingRecHitBuilder_cfi import * -# MeasurementTracker -from RecoTracker.MeasurementDet.MeasurementTrackerESProducer_cfi import * -# TransientTracks -from TrackingTools.TransientTrack.TransientTrackBuilder_cfi import * -#TrajectoryFilter -from RecoEgamma.EgammaPhotonProducers.trajectoryFilterForConversions_cfi import * -#TrajectoryBuilder -from RecoEgamma.EgammaPhotonProducers.trajectoryBuilderForConversions_cfi import * -#TrajectoryCleaning -from RecoEgamma.EgammaPhotonProducers.trajectoryCleanerBySharedHitsForConversions_cfi import * -#Propagators -from RecoEgamma.EgammaPhotonProducers.propAlongMomentumWithMaterialForElectrons_cfi import * -from RecoEgamma.EgammaPhotonProducers.propOppoMomentumWithMaterialForElectrons_cfi import * - -from RecoEcal.EgammaClusterProducers.hybridSuperClusters_cfi import * -from RecoEcal.EgammaClusterProducers.multi5x5BasicClusters_cfi import * - -conversionTrackCandidates = cms.EDProducer("ConversionTrackCandidateProducer", -# beamSpot = cms.InputTag("offlineBeamSpot"), - bcBarrelCollection = cms.InputTag('particleFlowSuperClusterECAL:particleFlowBasicClusterECALBarrel'), - bcEndcapCollection = cms.InputTag('particleFlowSuperClusterECAL:particleFlowBasicClusterECALEndcap'), - scHybridBarrelProducer = cms.InputTag('particleFlowSuperClusterECAL:particleFlowSuperClusterECALBarrel'), - scIslandEndcapProducer = cms.InputTag('particleFlowSuperClusterECAL:particleFlowSuperClusterECALEndcapWithPreshower'), - outInTrackCandidateSCAssociationCollection = cms.string('outInTrackCandidateSCAssociationCollection'), - inOutTrackCandidateSCAssociationCollection = cms.string('inOutTrackCandidateSCAssociationCollection'), - inOutTrackCandidateCollection = cms.string('inOutTracksFromConversions'), - outInTrackCandidateCollection = cms.string('outInTracksFromConversions'), - barrelEcalRecHitCollection = cms.InputTag('ecalRecHit:EcalRecHitsEB'), - endcapEcalRecHitCollection = cms.InputTag('ecalRecHit:EcalRecHitsEE'), - MeasurementTrackerName = cms.string(''), - OutInRedundantSeedCleaner = cms.string('CachingSeedCleanerBySharedInput'), - InOutRedundantSeedCleaner = cms.string('CachingSeedCleanerBySharedInput'), - useHitsSplitting = cms.bool(False), - maxNumOfSeedsOutIn = cms.int32(50), - maxNumOfSeedsInOut = cms.int32(50), - bcEtCut = cms.double(1.5), - bcECut = cms.double(1.5), - useEtCut = cms.bool(True), - hcalTowers = cms.InputTag("towerMaker"), - minSCEt = cms.double(20.0), - hOverEConeSize = cms.double(0.15), - maxHOverE = cms.double(0.15), - isoInnerConeR = cms.double(3.5), - isoConeR = cms.double(0.4), - isoEtaSlice = cms.double(2.5), - isoEtMin = cms.double(0.0), - isoEMin = cms.double(0.08), - vetoClusteredHits = cms.bool(False), - useNumXstals = cms.bool(True), - ecalIsoCut_offset = cms.double(999999999), - ecalIsoCut_slope = cms.double(0.), -# ecalIsoCut_offset = cms.double(4.2), -# ecalIsoCut_slope = cms.double(0.003), - - RecHitFlagToBeExcludedEB = cleanedHybridSuperClusters.RecHitFlagToBeExcluded, - RecHitSeverityToBeExcludedEB = cleanedHybridSuperClusters.RecHitSeverityToBeExcluded, - RecHitFlagToBeExcludedEE = multi5x5BasicClustersCleaned.RecHitFlagToBeExcluded, - RecHitSeverityToBeExcludedEE = cleanedHybridSuperClusters.RecHitSeverityToBeExcluded, - - fractionShared = cms.double(0.5), - TrajectoryBuilder = cms.string('TrajectoryBuilderForConversions'), - TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('TrajectoryBuilderForConversions')), - TransientInitialStateEstimatorParameters = cms.PSet( - propagatorAlongTISE = cms.string('alongMomElePropagator'), - propagatorOppositeTISE = cms.string('oppositeToMomElePropagator'), - numberMeasurementsForFit = cms.int32(4) - ), - allowSharedFirstHit = cms.bool(True), - ValidHitBonus = cms.double(5.0), - MissingHitPenalty = cms.double(20.0) - - ) - - diff --git a/RecoEgamma/EgammaPhotonProducers/python/conversionTrackSequenceForReReco_cff.py b/RecoEgamma/EgammaPhotonProducers/python/conversionTrackSequenceForReReco_cff.py index a925642170f19..ed37805ac60ef 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/conversionTrackSequenceForReReco_cff.py +++ b/RecoEgamma/EgammaPhotonProducers/python/conversionTrackSequenceForReReco_cff.py @@ -4,7 +4,7 @@ import RecoEgamma.EgammaPhotonProducers.conversionTrackMerger_cfi # Conversion Track candidate producer -from RecoEgamma.EgammaPhotonProducers.conversionTrackCandidates_cfi import * +from RecoEgamma.EgammaPhotonProducers.conversionTrackCandidates_cff import * # Conversion Track producer ( final fit ) from RecoEgamma.EgammaPhotonProducers.ckfOutInTracksFromConversions_cfi import * from RecoEgamma.EgammaPhotonProducers.ckfInOutTracksFromConversions_cfi import * diff --git a/RecoEgamma/EgammaPhotonProducers/python/conversionTrackSequence_cff.py b/RecoEgamma/EgammaPhotonProducers/python/conversionTrackSequence_cff.py index 9ba3d62a36164..2638c2d0c6c7c 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/conversionTrackSequence_cff.py +++ b/RecoEgamma/EgammaPhotonProducers/python/conversionTrackSequence_cff.py @@ -4,7 +4,7 @@ import RecoEgamma.EgammaPhotonProducers.conversionTrackMerger_cfi # Conversion Track candidate producer -from RecoEgamma.EgammaPhotonProducers.conversionTrackCandidates_cfi import * +from RecoEgamma.EgammaPhotonProducers.conversionTrackCandidates_cff import * # Conversion Track producer ( final fit ) from RecoEgamma.EgammaPhotonProducers.ckfOutInTracksFromConversions_cfi import * from RecoEgamma.EgammaPhotonProducers.ckfInOutTracksFromConversions_cfi import * diff --git a/RecoEgamma/EgammaPhotonProducers/python/conversionTracks_cff.py b/RecoEgamma/EgammaPhotonProducers/python/conversionTracks_cff.py index d189294f1da21..4c6b105d76758 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/conversionTracks_cff.py +++ b/RecoEgamma/EgammaPhotonProducers/python/conversionTracks_cff.py @@ -3,7 +3,7 @@ # # # Conversion Track candidate producer -from RecoEgamma.EgammaPhotonProducers.conversionTrackCandidates_cfi import * +from RecoEgamma.EgammaPhotonProducers.conversionTrackCandidates_cff import * # Conversion Track producer ( final fit ) from RecoEgamma.EgammaPhotonProducers.ckfOutInTracksFromConversions_cfi import * from RecoEgamma.EgammaPhotonProducers.ckfInOutTracksFromConversions_cfi import * diff --git a/RecoEgamma/EgammaPhotonProducers/python/cosmicConversionSequence_cff.py b/RecoEgamma/EgammaPhotonProducers/python/cosmicConversionSequence_cff.py index 3ea49a14f2de0..d918279261e5e 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/cosmicConversionSequence_cff.py +++ b/RecoEgamma/EgammaPhotonProducers/python/cosmicConversionSequence_cff.py @@ -1,11 +1,11 @@ import FWCore.ParameterSet.Config as cms from RecoEgamma.EgammaPhotonProducers.conversionSequence_cff import * -conversions.scHybridBarrelProducer = cms.InputTag("cosmicSuperClusters","CosmicBarrelSuperClusters") -conversions.scIslandEndcapProducer = cms.InputTag("cosmicSuperClusters","CosmicEndcapSuperClusters") -conversions.bcBarrelCollection = cms.InputTag("cosmicBasicClusters","CosmicBarrelBasicClusters") -conversions.bcEndcapCollection = cms.InputTag("cosmicBasicClusters","CosmicEndcapBasicClusters") -conversions.recoverOneTrackCase = cms.bool(False) +conversions.scHybridBarrelProducer = "cosmicSuperClusters:CosmicBarrelSuperClusters" +conversions.scIslandEndcapProducer = "cosmicSuperClusters:CosmicEndcapSuperClusters" +conversions.bcBarrelCollection = "cosmicBasicClusters:CosmicBarrelBasicClusters" +conversions.bcEndcapCollection = "cosmicBasicClusters:CosmicEndcapBasicClusters" +conversions.recoverOneTrackCase = False cosmicConversionTask = cms.Task(conversionTask) cosmicConversionSequence = cms.Sequence(cosmicConversionTask) diff --git a/RecoEgamma/EgammaPhotonProducers/python/cosmicConversionTrackSequence_cff.py b/RecoEgamma/EgammaPhotonProducers/python/cosmicConversionTrackSequence_cff.py index cae72c0ff651f..41a44bc1e480f 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/cosmicConversionTrackSequence_cff.py +++ b/RecoEgamma/EgammaPhotonProducers/python/cosmicConversionTrackSequence_cff.py @@ -1,11 +1,12 @@ import FWCore.ParameterSet.Config as cms # Conversion Track candidate producer -from RecoEgamma.EgammaPhotonProducers.conversionTrackCandidates_cfi import * -conversionTrackCandidates.scHybridBarrelProducer = cms.InputTag("cosmicSuperClusters","CosmicBarrelSuperClusters") -conversionTrackCandidates.scIslandEndcapProducer = cms.InputTag("cosmicSuperClusters","CosmicEndcapSuperClusters") -conversionTrackCandidates.bcBarrelCollection = cms.InputTag("cosmicBasicClusters","CosmicBarrelBasicClusters") -conversionTrackCandidates.bcEndcapCollection = cms.InputTag("cosmicBasicClusters","CosmicEndcapBasicClusters") + +from RecoEgamma.EgammaPhotonProducers.conversionTrackCandidates_cff import * +conversionTrackCandidates.scHybridBarrelProducer = "cosmicSuperClusters:CosmicBarrelSuperClusters" +conversionTrackCandidates.scIslandEndcapProducer = "cosmicSuperClusters:CosmicEndcapSuperClusters" +conversionTrackCandidates.bcBarrelCollection = "cosmicBasicClusters:CosmicBarrelBasicClusters" +conversionTrackCandidates.bcEndcapCollection = "cosmicBasicClusters:CosmicEndcapBasicClusters" # Conversion Track producer ( final fit ) from RecoEgamma.EgammaPhotonProducers.ckfOutInTracksFromConversions_cfi import * diff --git a/RecoEgamma/EgammaPhotonProducers/python/cosmicPhotonSequence_cff.py b/RecoEgamma/EgammaPhotonProducers/python/cosmicPhotonSequence_cff.py index 21209b1565e3e..c79369717066c 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/cosmicPhotonSequence_cff.py +++ b/RecoEgamma/EgammaPhotonProducers/python/cosmicPhotonSequence_cff.py @@ -1,14 +1,14 @@ import FWCore.ParameterSet.Config as cms from RecoEgamma.EgammaPhotonProducers.photonSequence_cff import * -photonCore.scHybridBarrelProducer = cms.InputTag("cosmicSuperClusters","CosmicBarrelSuperClusters") -photonCore.scIslandEndcapProducer = cms.InputTag("cosmicSuperClusters","CosmicEndcapSuperClusters") -photonCore.minSCEt = cms.double(0.0) +photonCore.scHybridBarrelProducer = "cosmicSuperClusters:CosmicBarrelSuperClusters" +photonCore.scIslandEndcapProducer = "cosmicSuperClusters:CosmicEndcapSuperClusters" +photonCore.minSCEt = 0.0 -photons.usePrimaryVertex = cms.bool(False) -photons.minSCEtBarrel = cms.double(0.0) -photons.minSCEtEndcap = cms.double(0.0) +photons.usePrimaryVertex = False +photons.minSCEtBarrel = 0.0 +photons.minSCEtEndcap = 0.0 cosmicPhotonTask = cms.Task(photonCore,photons) cosmicPhotonSequence = cms.Sequence(cosmicPhotonTask) diff --git a/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py b/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py index f075f384c4e29..7c6964e437e9e 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py +++ b/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py @@ -32,6 +32,8 @@ photonFloatValueMapOutput = cms.vstring(), ootPhotonFloatValueMapSources = cms.VInputTag(), ootPhotonFloatValueMapOutput = cms.vstring(), + hiPhotonIsolationMapInput = cms.InputTag(""), + hiPhotonIsolationMapOutput = cms.string(""), gsfElectronFloatValueMapSources = cms.VInputTag(), gsfElectronFloatValueMapOutput = cms.vstring(), applyPhotonCalibOnData = cms.bool(False), @@ -49,64 +51,40 @@ from Configuration.Eras.Modifier_phase2_common_cff import phase2_common phase2_common.toModify(reducedEgamma, - preshowerEcalHits = cms.InputTag(""), + preshowerEcalHits = "", ) from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy run2_miniAOD_80XLegacy.toModify( reducedEgamma, - photonFloatValueMapSources = cms.VInputTag( - cms.InputTag("photonEcalPFClusterIsolationProducer"), - cms.InputTag("photonHcalPFClusterIsolationProducer"), - ), - photonFloatValueMapOutput = cms.vstring( - "phoEcalPFClusIso", - "phoHcalPFClusIso", - ), - ootPhotonFloatValueMapSources = cms.VInputTag( - cms.InputTag("ootPhotonEcalPFClusterIsolationProducer"), - ), - ootPhotonFloatValueMapOutput = cms.vstring( - "ootPhoEcalPFClusIso", - ), - gsfElectronFloatValueMapSources = cms.VInputTag( - cms.InputTag("electronEcalPFClusterIsolationProducer"), - cms.InputTag("electronHcalPFClusterIsolationProducer"), - ), - gsfElectronFloatValueMapOutput = cms.vstring( - "eleEcalPFClusIso", - "eleHcalPFClusIso", - ) - ) + photonFloatValueMapSources = ["photonEcalPFClusterIsolationProducer", + "photonHcalPFClusterIsolationProducer"], + photonFloatValueMapOutput = ["phoEcalPFClusIso", + "phoHcalPFClusIso"], + ootPhotonFloatValueMapSources = ["ootPhotonEcalPFClusterIsolationProducer"], + ootPhotonFloatValueMapOutput = ["ootPhoEcalPFClusIso"], + gsfElectronFloatValueMapSources = ["electronEcalPFClusterIsolationProducer", + "electronHcalPFClusterIsolationProducer"], + gsfElectronFloatValueMapOutput = ["eleEcalPFClusIso", + "eleHcalPFClusIso"] +) from Configuration.Eras.Modifier_run2_miniAOD_94XFall17_cff import run2_miniAOD_94XFall17 run2_miniAOD_94XFall17.toModify( reducedEgamma, - photonFloatValueMapSources = cms.VInputTag( - cms.InputTag("photonEcalPFClusterIsolationProducer"), - cms.InputTag("photonHcalPFClusterIsolationProducer"), - ), - photonFloatValueMapOutput = cms.vstring( - "phoEcalPFClusIso", - "phoHcalPFClusIso", - ), - ootPhotonFloatValueMapSources = cms.VInputTag( - cms.InputTag("ootPhotonEcalPFClusterIsolationProducer"), - cms.InputTag("ootPhotonHcalPFClusterIsolationProducer"), - ), - ootPhotonFloatValueMapOutput = cms.vstring( - "ootPhoEcalPFClusIso", - "ootPhoHcalPFClusIso", - ), - gsfElectronFloatValueMapSources = cms.VInputTag( - cms.InputTag("electronEcalPFClusterIsolationProducer"), - cms.InputTag("electronHcalPFClusterIsolationProducer"), - ), - gsfElectronFloatValueMapOutput = cms.vstring( - "eleEcalPFClusIso", - "eleHcalPFClusIso", - ) - ) + photonFloatValueMapSources = ["photonEcalPFClusterIsolationProducer", + "photonHcalPFClusterIsolationProducer"], + photonFloatValueMapOutput = ["phoEcalPFClusIso", + "phoHcalPFClusIso"], + ootPhotonFloatValueMapSources = ["ootPhotonEcalPFClusterIsolationProducer", + "ootPhotonHcalPFClusterIsolationProducer"], + ootPhotonFloatValueMapOutput = ["ootPhoEcalPFClusIso", + "ootPhoHcalPFClusIso"], + gsfElectronFloatValueMapSources = ["electronEcalPFClusterIsolationProducer", + "electronHcalPFClusterIsolationProducer"], + gsfElectronFloatValueMapOutput = ["eleEcalPFClusIso", + "eleHcalPFClusIso"], +) from RecoEgamma.EgammaPhotonProducers.reducedEgamma_tools import calibrateReducedEgamma from Configuration.Eras.Modifier_run2_miniAOD_94XFall17_cff import run2_miniAOD_94XFall17 @@ -116,9 +94,13 @@ run2_miniAOD_94XFall17 | run2_miniAOD_80XLegacy | run2_miniAOD_UL).makeProcessModifier(calibrateReducedEgamma) from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA -pp_on_AA.toModify(reducedEgamma, - ootPhotons = cms.InputTag(""), + +pp_on_AA.toModify( + reducedEgamma, + ootPhotons = "", keepPhotons = "pt>15 && abs(eta)<2.5", slimRelinkPhotons = "pt>15 && abs(eta)<2.5", - relinkPhotons = "pt>15 && abs(eta)<2.5" - ) + relinkPhotons = "pt>15 && abs(eta)<2.5", + hiPhotonIsolationMapInput = "photonIsolationHIProducerppGED", + hiPhotonIsolationMapOutput = "photonIsolationHIProducerppGED" +) diff --git a/RecoEgamma/EgammaPhotonProducers/python/trajectoryBuilderForConversions_cfi.py b/RecoEgamma/EgammaPhotonProducers/python/trajectoryBuilderForConversions_cfi.py index 7380321809d8f..183650f43c4b9 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/trajectoryBuilderForConversions_cfi.py +++ b/RecoEgamma/EgammaPhotonProducers/python/trajectoryBuilderForConversions_cfi.py @@ -6,6 +6,8 @@ #TrajectoryBuilder from RecoTracker.CkfPattern.CkfTrajectoryBuilder_cff import * import RecoTracker.CkfPattern.CkfTrajectoryBuilder_cfi +from RecoEgamma.EgammaPhotonProducers.trajectoryFilterForConversions_cfi import TrajectoryFilterForConversions + TrajectoryBuilderForConversions = RecoTracker.CkfPattern.CkfTrajectoryBuilder_cfi.CkfTrajectoryBuilder.clone( estimator = 'eleLooseChi2', TTRHBuilder = 'WithTrackAngle', diff --git a/RecoEgamma/EgammaPhotonProducers/python/trajectoryFilterForConversions_cfi.py b/RecoEgamma/EgammaPhotonProducers/python/trajectoryFilterForConversions_cfi.py index 64f32f206b735..504ab63fc44a2 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/trajectoryFilterForConversions_cfi.py +++ b/RecoEgamma/EgammaPhotonProducers/python/trajectoryFilterForConversions_cfi.py @@ -2,16 +2,15 @@ import TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff TrajectoryFilterForConversions = TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff.CkfBaseTrajectoryFilter_block.clone( - chargeSignificance = cms.double(-1.0), - minPt = cms.double(0.9), - minHitsMinPt = cms.int32(-1), - ComponentType = cms.string('CkfBaseTrajectoryFilter'), - maxLostHits = cms.int32(1), - maxNumberOfHits = cms.int32(-1), - maxConsecLostHits = cms.int32(1), - nSigmaMinPt = cms.double(5.0), - minimumNumberOfHits = cms.int32(3), - maxCCCLostHits = cms.int32(9999), - minGoodStripCharge = cms.PSet(refToPSet_ = cms.string('SiStripClusterChargeCutNone')) + chargeSignificance = -1.0, + minPt = 0.9, + minHitsMinPt = -1, + ComponentType = 'CkfBaseTrajectoryFilter', + maxLostHits = 1, + maxNumberOfHits = -1, + maxConsecLostHits = 1, + nSigmaMinPt = 5.0, + minimumNumberOfHits = 3, + maxCCCLostHits = 9999, + minGoodStripCharge = dict(refToPSet_ = 'SiStripClusterChargeCutNone') ) - diff --git a/RecoEgamma/EgammaPhotonProducers/src/ConversionProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/ConversionProducer.cc index eabf52700a163..d8940f5110665 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/ConversionProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/ConversionProducer.cc @@ -11,61 +11,199 @@ Description: Produces converted photon objects using default track collections */ // -// Original Authors: Hongliang Liu +// Original Authors: Hongliang Liu, UC of Riverside US, Nancy Marinelli Univ of Notre Dame // Created: Thu Mar 13 17:40:48 CDT 2008 // // -// system include files -#include -#include - -#include "RecoEgamma/EgammaPhotonProducers/interface/ConversionProducer.h" +#include "CommonTools/Statistics/interface/ChiSquaredProbability.h" +#include "DataFormats/CaloRecHit/interface/CaloCluster.h" +#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" +#include "DataFormats/EgammaCandidates/interface/Conversion.h" +#include "DataFormats/EgammaCandidates/interface/Photon.h" +#include "DataFormats/EgammaTrackReco/interface/ConversionTrack.h" +#include "DataFormats/GeometrySurface/interface/BoundCylinder.h" +#include "DataFormats/GeometrySurface/interface/BoundDisk.h" +#include "DataFormats/GeometrySurface/interface/ReferenceCounted.h" +#include "DataFormats/GeometrySurface/interface/SimpleCylinderBounds.h" +#include "DataFormats/GeometrySurface/interface/SimpleDiskBounds.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" +#include "DataFormats/Math/interface/deltaPhi.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h" +#include "DataFormats/TrajectoryState/interface/PTrajectoryStateOnDet.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/ESGetToken.h" #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" +#include "Geometry/CommonDetUnit/interface/GeomDet.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "RecoEgamma/EgammaPhotonAlgos/interface/ConversionHitChecker.h" +#include "RecoEgamma/EgammaPhotonAlgos/interface/ConversionVertexFinder.h" +#include "RecoEgamma/EgammaPhotonAlgos/interface/TangentApproachInRPhi.h" +#include "TrackingTools/MaterialEffects/interface/PropagatorWithMaterial.h" +#include "TrackingTools/PatternTools/interface/ClosestApproachInRPhi.h" +#include "TrackingTools/PatternTools/interface/Trajectory.h" +#include "TrackingTools/Records/interface/TransientTrackRecord.h" #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h" -#include "DataFormats/TrajectoryState/interface/PTrajectoryStateOnDet.h" +#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" +#include "TrackingTools/TransientTrack/interface/TrackTransientTrack.h" +#include "TrackingTools/TransientTrack/interface/TransientTrack.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" -#include "TrackingTools/GeomPropagators/interface/AnalyticalPropagator.h" -#include "TrackingTools/MaterialEffects/interface/PropagatorWithMaterial.h" -#include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h" -#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" +#include +#include -#include "TrackingTools/TransientTrack/interface/TrackTransientTrack.h" -#include "DataFormats/EgammaTrackReco/interface/ConversionTrack.h" +class ConversionProducer : public edm::stream::EDProducer<> { +public: + explicit ConversionProducer(const edm::ParameterSet&); -#include "DataFormats/VertexReco/interface/Vertex.h" +private: + void produce(edm::Event&, const edm::EventSetup&) override; -#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" -#include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" + void buildSuperAndBasicClusterGeoMap(const edm::Event&, + std::multimap& basicClusterPtrs, + std::multimap& superClusterPtrs); -#include "TrackingTools/TransientTrack/interface/TransientTrack.h" + // ----------member data --------------------------- + std::string algoName_; -#include "TrackingTools/PatternTools/interface/ClosestApproachInRPhi.h" -#include "TrackingTools/PatternTools/interface/TwoTrackMinimumDistance.h" + typedef math::XYZPointF Point; + typedef std::vector PointCollection; -#include "CommonTools/Statistics/interface/ChiSquaredProbability.h" -#include "DataFormats/Math/interface/deltaPhi.h" -#include "RecoEgamma/EgammaPhotonAlgos/interface/ConversionVertexFinder.h" -#include "TrackingTools/PatternTools/interface/Trajectory.h" -#include "RecoEgamma/EgammaPhotonAlgos/interface/TangentApproachInRPhi.h" -#include "RecoEgamma/EgammaPhotonAlgos/interface/ConversionHitChecker.h" + edm::EDGetTokenT > src_; + + edm::EDGetTokenT > scBarrelProducer_; + edm::EDGetTokenT > scEndcapProducer_; + edm::EDGetTokenT > bcBarrelCollection_; + edm::EDGetTokenT > bcEndcapCollection_; + std::string ConvertedPhotonCollection_; -//Kinematic constraint vertex fitter -#include "RecoVertex/KinematicFitPrimitives/interface/ParticleMass.h" -#include "RecoVertex/KinematicFitPrimitives/interface/MultiTrackKinematicConstraint.h" -#include -#include "RecoVertex/KinematicFit/interface/KinematicConstrainedVertexFitter.h" -#include "RecoVertex/KinematicFit/interface/TwoTrackMassKinematicConstraint.h" -#include "RecoVertex/KinematicFit/interface/KinematicParticleVertexFitter.h" -#include "RecoVertex/KinematicFit/interface/KinematicParticleFitter.h" -#include "RecoVertex/KinematicFit/interface/MassKinematicConstraint.h" -#include "RecoVertex/KinematicFit/interface/ColinearityKinematicConstraint.h" - -ConversionProducer::ConversionProducer(const edm::ParameterSet& iConfig) - : theVertexFinder_(nullptr) - -{ + edm::ESGetToken transientTrackBuilder_; + edm::ESGetToken trackerGeometry_; + edm::ESGetToken magneticField_; + + bool allowD0_, allowDeltaPhi_, allowTrackBC_, allowDeltaCot_, allowMinApproach_, allowOppCharge_, allowVertex_; + + bool bypassPreselGsf_, bypassPreselEcal_, bypassPreselEcalEcal_; + + bool usePvtx_; //if use primary vertices + edm::EDGetTokenT vertexProducer_; + ConversionVertexFinder vertexFinder_; + + const TransientTrackBuilder* thettbuilder_; + + double deltaEta_; + + double halfWayEta_, halfWayPhi_; //halfway open angle to search in basic clusters + unsigned int maxNumOfTrackInPU_; + double maxTrackZ_; + double maxTrackRho_; + double minSCEt_; + double dEtacutForSCmatching_; + double dPhicutForSCmatching_; + double energyBC_; //1.5GeV for track BC selection + double energyTotalBC_; //5GeV for track pair BC selection + double d0Cut_; //0 for d0*charge cut + double dzCut_; //innerposition of z diff cut + double dEtaTkBC_, dPhiTkBC_; //0.06 0.6 for track and BC matching + + double maxChi2Left_, maxChi2Right_; //5. 5. for track chi2 quality + double minHitsLeft_, minHitsRight_; //5 2 for track hits quality + + double deltaCotTheta_, deltaPhi_, minApproachLow_, + minApproachHigh_; //0.02 0.2 for track pair open angle and > -0.1 cm + + double r_cut; //cross_r cut + double vtxChi2_; //vertex chi2 probablity cut + + bool allowSingleLeg_; //if single track conversion ? + bool rightBC_; //if right leg requires matching BC? + + void buildCollection(edm::Event& iEvent, + const edm::EventSetup& iSetup, + const std::multimap >& allTracks, + const std::multimap& superClusterPtrs, + const std::multimap& basicClusterPtrs, + const reco::Vertex& the_pvtx, + reco::ConversionCollection& outputConvPhotonCollection); + + //track quality cut, returns pass or no + inline bool trackQualityFilter(const edm::RefToBase& ref, bool isLeft); + inline bool trackD0Cut(const edm::RefToBase& ref); + inline bool trackD0Cut(const edm::RefToBase& ref, const reco::Vertex& the_pvtx); + + //track impact point at ECAL wall, returns validity to access position ew + bool getTrackImpactPosition(const reco::Track* tk_ref, + TrackerGeometry const& trackerGeom, + MagneticField const& magField, + math::XYZPointF& ew); + + //distance at min approaching point, returns distance + // double getMinApproach(const edm::RefToBase& ll, const edm::RefToBase& rr, + // const MagneticField* magField); + + bool preselectTrackPair(const reco::TransientTrack& ttk_l, const reco::TransientTrack& ttk_r, double& appDist); + + //cut-based selection, TODO remove global cut variables + bool checkTrackPair(const std::pair, reco::CaloClusterPtr>& ll, + const std::pair, reco::CaloClusterPtr>& rr); + + //kinematic vertex fitting, return true for valid vertex + inline bool checkVertex(const reco::TransientTrack& ttk_l, + const reco::TransientTrack& ttk_r, + MagneticField const& magField, + reco::Vertex& the_vertex) { + return vertexFinder_.run({ttk_l, ttk_r}, the_vertex); + } + + bool checkPhi(const edm::RefToBase& tk_l, + const edm::RefToBase& tk_r, + TrackerGeometry const& trackerGeom, + MagneticField const& magField, + const reco::Vertex& the_vertex); + + //check the closest BC, returns true for found a BC + bool getMatchedBC(const std::multimap& bcMap, + const math::XYZPointF& trackImpactPosition, + reco::CaloClusterPtr& closestBC); + + // finds the super cluster matching with at least one track in the pair + bool matchingSC(const std::multimap& scMap, + reco::Conversion& conv, + reco::CaloClusterPtrVector& mSC); + + double etaTransformation(float EtaParticle, float Zvertex); + + math::XYZPointF toFConverterP(const math::XYZPoint& val) { return math::XYZPointF(val.x(), val.y(), val.z()); } + + math::XYZVectorF toFConverterV(const math::XYZVector& val) { return math::XYZVectorF(val.x(), val.y(), val.z()); } +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(ConversionProducer); + +inline const GeomDet* recHitDet(const TrackingRecHit& hit, const TrackingGeometry* geom) { + return geom->idToDet(hit.geographicalId()); +} + +inline const BoundPlane& recHitSurface(const TrackingRecHit& hit, const TrackingGeometry* geom) { + return recHitDet(hit, geom)->surface(); +} + +inline LocalVector toLocal(const reco::Track::Vector& v, const Surface& s) { + return s.toLocal(GlobalVector(v.x(), v.y(), v.z())); +} + +ConversionProducer::ConversionProducer(const edm::ParameterSet& iConfig) : vertexFinder_{iConfig} { algoName_ = iConfig.getParameter("AlgorithmName"); src_ = consumes >(iConfig.getParameter("src")); @@ -145,8 +283,6 @@ ConversionProducer::ConversionProducer(const edm::ParameterSet& iConfig) r_cut = iConfig.getParameter("rCut"); vtxChi2_ = iConfig.getParameter("vtxChi2"); - theVertexFinder_ = new ConversionVertexFinder(iConfig); - thettbuilder_ = nullptr; //output @@ -155,12 +291,6 @@ ConversionProducer::ConversionProducer(const edm::ParameterSet& iConfig) produces(ConvertedPhotonCollection_); } -ConversionProducer::~ConversionProducer() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) - delete theVertexFinder_; -} - // ------------ method called to produce the data ------------ void ConversionProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { using namespace edm; @@ -192,8 +322,7 @@ void ConversionProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet vertexCollection = *(vertexHandle.product()); } - edm::ESHandle hTransientTrackBuilder = iSetup.getHandle(transientTrackBuilder_); - thettbuilder_ = hTransientTrackBuilder.product(); + thettbuilder_ = &iSetup.getData(transientTrackBuilder_); reco::Vertex the_pvtx; //because the priamry vertex is sorted by quality, the first one is the best @@ -279,11 +408,8 @@ void ConversionProducer::buildCollection(edm::Event& iEvent, const std::multimap& basicClusterPtrs, const reco::Vertex& the_pvtx, reco::ConversionCollection& outputConvPhotonCollection) { - edm::ESHandle trackerGeomHandle = iSetup.getHandle(trackerGeometry_); - edm::ESHandle magFieldHandle = iSetup.getHandle(magneticField_); - - const TrackerGeometry* trackerGeom = trackerGeomHandle.product(); - const MagneticField* magField = magFieldHandle.product(); + TrackerGeometry const& trackerGeom = iSetup.getData(trackerGeometry_); + MagneticField const& magField = iSetup.getData(magneticField_); // std::vector trackImpactPosition; // trackImpactPosition.reserve(allTracks.size());//track impact position at ECAL @@ -306,20 +432,18 @@ void ConversionProducer::buildCollection(edm::Event& iEvent, //2 propagate all tracks into ECAL, record its eta and phi - for (std::multimap >::const_iterator tk_ref = allTracks.begin(); - tk_ref != allTracks.end(); - ++tk_ref) { - const reco::Track* tk = tk_ref->second->trackRef().get(); + for (auto const& tk_ref : allTracks) { + const reco::Track* tk = tk_ref.second->trackRef().get(); //check impact position then match with BC math::XYZPointF ew; if (getTrackImpactPosition(tk, trackerGeom, magField, ew)) { - trackImpactPosition[tk_ref->second] = ew; + trackImpactPosition[tk_ref.second] = ew; reco::CaloClusterPtr closest_bc; //the closest matching BC to track if (getMatchedBC(basicClusterPtrs, ew, closest_bc)) { - trackMatchedBC[tk_ref->second] = closest_bc; + trackMatchedBC[tk_ref.second] = closest_bc; } } } @@ -327,9 +451,7 @@ void ConversionProducer::buildCollection(edm::Event& iEvent, //3. pair up tracks: //TODO it is k-Closest pair of point problem //std::cout << " allTracks.size() " << allTracks.size() << std::endl; - for (std::multimap >::const_iterator ll = allTracks.begin(); - ll != allTracks.end(); - ++ll) { + for (auto ll = allTracks.begin(); ll != allTracks.end(); ++ll) { bool track1HighPurity = true; //std::cout << " Loop on allTracks " << std::endl; const edm::RefToBase& left = ll->second->trackRef(); @@ -592,19 +714,19 @@ inline bool ConversionProducer::trackD0Cut(const edm::RefToBase& re } bool ConversionProducer::getTrackImpactPosition(const reco::Track* tk_ref, - const TrackerGeometry* trackerGeom, - const MagneticField* magField, + TrackerGeometry const& trackerGeom, + MagneticField const& magField, math::XYZPointF& ew) { - PropagatorWithMaterial propag(alongMomentum, 0.000511, magField); + PropagatorWithMaterial propag(alongMomentum, 0.000511, &magField); ReferenceCountingPointer ecalWall(new BoundCylinder( 129.f, GlobalPoint(0., 0., 0.), TkRotation(), new SimpleCylinderBounds(129, 129, -320.5, 320.5))); - const float epsilon = 0.001; + constexpr float epsilon = 0.001; Surface::RotationType rot; // unit rotation matrix - const float barrelRadius = 129.f; - const float barrelHalfLength = 270.9f; - const float endcapRadius = 171.1f; - const float endcapZ = 320.5f; + constexpr float barrelRadius = 129.f; + constexpr float barrelHalfLength = 270.9f; + constexpr float endcapRadius = 171.1f; + constexpr float endcapZ = 320.5f; ReferenceCountingPointer theBarrel_(new BoundCylinder( barrelRadius, Surface::PositionType(0, 0, 0), @@ -616,8 +738,7 @@ bool ConversionProducer::getTrackImpactPosition(const reco::Track* tk_ref, Surface::PositionType(0, 0, endcapZ), rot, new SimpleDiskBounds(0, endcapRadius, -epsilon, epsilon))); //const TrajectoryStateOnSurface myTSOS = trajectoryStateTransform::innerStateOnSurface(*(*ref), *trackerGeom, magField); - const TrajectoryStateOnSurface myTSOS = - trajectoryStateTransform::outerStateOnSurface(*tk_ref, *trackerGeom, magField); + const auto myTSOS = trajectoryStateTransform::outerStateOnSurface(*tk_ref, trackerGeom, &magField); TrajectoryStateOnSurface stateAtECAL; stateAtECAL = propag.propagate(myTSOS, *theBarrel_); if (!stateAtECAL.isValid() || (stateAtECAL.isValid() && fabs(stateAtECAL.globalPosition().eta()) > 1.479f)) { @@ -698,8 +819,8 @@ bool ConversionProducer::getMatchedBC(const std::multimap& tk_l, const edm::RefToBase& tk_r, - const TrackerGeometry* trackerGeom, - const MagneticField* magField, + TrackerGeometry const& trackerGeom, + MagneticField const& magField, const reco::Vertex& vtx) { if (!allowDeltaPhi_) return true; @@ -709,7 +830,7 @@ bool ConversionProducer::checkPhi(const edm::RefToBase& tk_l, if (tk_l->extra().isNonnull() && tk_r->extra().isNonnull()) { double iphi1 = tk_l->innerMomentum().phi(), iphi2 = tk_r->innerMomentum().phi(); if (vtx.isValid()) { - PropagatorWithMaterial propag(anyDirection, 0.000511, magField); + PropagatorWithMaterial propag(anyDirection, 0.000511, &magField); double recoPhoR = vtx.position().Rho(); Surface::RotationType rot; @@ -722,10 +843,8 @@ bool ConversionProducer::checkPhi(const edm::RefToBase& tk_l, ReferenceCountingPointer theDisk_(new BoundDisk( Surface::PositionType(0, 0, vtx.position().z()), rot, new SimpleDiskBounds(0, recoPhoR, -0.001, 0.001))); - const TrajectoryStateOnSurface myTSOS1 = - trajectoryStateTransform::innerStateOnSurface(*tk_l, *trackerGeom, magField); - const TrajectoryStateOnSurface myTSOS2 = - trajectoryStateTransform::innerStateOnSurface(*tk_r, *trackerGeom, magField); + const auto myTSOS1 = trajectoryStateTransform::innerStateOnSurface(*tk_l, trackerGeom, &magField); + const auto myTSOS2 = trajectoryStateTransform::innerStateOnSurface(*tk_r, trackerGeom, &magField); TrajectoryStateOnSurface stateAtVtx1, stateAtVtx2; stateAtVtx1 = propag.propagate(myTSOS1, *theBarrel_); if (!stateAtVtx1.isValid()) { @@ -826,22 +945,6 @@ bool ConversionProducer::checkTrackPair(const std::pair pair; - pair.push_back(ttk_l); - pair.push_back(ttk_r); - - found = theVertexFinder_->run(pair, the_vertex); - - return found; -} - double ConversionProducer::etaTransformation(float EtaParticle, float Zvertex) { //---Definitions const float PI = 3.1415927; diff --git a/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackCandidateProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackCandidateProducer.cc index b83e95d08fd2b..86af9fd7a9f71 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackCandidateProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackCandidateProducer.cc @@ -1,50 +1,127 @@ -#include -#include -#include +/** \class ConversionTrackCandidateProducer + ** + ** + ** \author Nancy Marinelli, U. of Notre Dame, US + ** + ***/ -// Framework -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" +#include "CommonTools/Utils/interface/StringToEnumValue.h" +#include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h" +#include "DataFormats/CaloRecHit/interface/CaloCluster.h" +#include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h" +#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" #include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/View.h" +#include "DataFormats/DetId/interface/DetId.h" +#include "DataFormats/EgammaCandidates/interface/Photon.h" +#include "DataFormats/EgammaTrackReco/interface/TrackCandidateCaloClusterAssociation.h" +#include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Utilities/interface/Exception.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -// -#include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h" -#include "DataFormats/EgammaTrackReco/interface/TrackCandidateSuperClusterAssociation.h" -#include "DataFormats/EgammaTrackReco/interface/TrackCandidateCaloClusterAssociation.h" -// -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -// -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" -// Abstract classes for the conversion tracking components +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h" #include "RecoEgamma/EgammaPhotonAlgos/interface/ConversionSeedFinder.h" #include "RecoEgamma/EgammaPhotonAlgos/interface/ConversionTrackFinder.h" -// Class header file -#include "RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackCandidateProducer.h" -// -#include "RecoTracker/CkfPattern/interface/BaseCkfTrajectoryBuilderFactory.h" -#include "RecoTracker/Record/interface/CkfComponentsRecord.h" -#include "RecoTracker/Record/interface/TrackerRecoGeometryRecord.h" -#include "RecoTracker/Record/interface/NavigationSchoolRecord.h" -#include "RecoEgamma/EgammaPhotonAlgos/interface/OutInConversionSeedFinder.h" #include "RecoEgamma/EgammaPhotonAlgos/interface/InOutConversionSeedFinder.h" -#include "RecoEgamma/EgammaPhotonAlgos/interface/OutInConversionTrackFinder.h" #include "RecoEgamma/EgammaPhotonAlgos/interface/InOutConversionTrackFinder.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h" - -#include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "CommonTools/Utils/interface/StringToEnumValue.h" -#include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/DetId/interface/DetId.h" -#include "DataFormats/EcalDetId/interface/EEDetId.h" -#include "DataFormats/EcalDetId/interface/EBDetId.h" - +#include "RecoEgamma/EgammaPhotonAlgos/interface/OutInConversionSeedFinder.h" +#include "RecoEgamma/EgammaPhotonAlgos/interface/OutInConversionTrackFinder.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" #include "RecoTracker/CkfPattern/interface/BaseCkfTrajectoryBuilder.h" +#include "RecoTracker/CkfPattern/interface/BaseCkfTrajectoryBuilderFactory.h" +#include "RecoTracker/MeasurementDet/interface/MeasurementTracker.h" #include "RecoTracker/MeasurementDet/interface/MeasurementTrackerEvent.h" +#include "RecoTracker/Record/interface/NavigationSchoolRecord.h" +#include "TrackingTools/DetLayers/interface/NavigationSchool.h" + +#include + +class ConversionTrackCandidateProducer : public edm::stream::EDProducer<> { +public: + ConversionTrackCandidateProducer(const edm::ParameterSet& ps); + + void beginRun(edm::Run const&, edm::EventSetup const& es) final; + void produce(edm::Event& evt, const edm::EventSetup& es) override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + /// Initialize EventSetup objects at each event + void setEventSetup(const edm::EventSetup& es); + + std::string OutInTrackCandidateCollection_; + std::string InOutTrackCandidateCollection_; + + std::string OutInTrackSCAssociationCollection_; + std::string InOutTrackSCAssociationCollection_; + + edm::EDGetTokenT> bcBarrelCollection_; + edm::EDGetTokenT> bcEndcapCollection_; + edm::EDGetTokenT> scHybridBarrelProducer_; + edm::EDGetTokenT> scIslandEndcapProducer_; + edm::EDGetTokenT hcalTowers_; + edm::EDGetTokenT barrelecalCollection_; + edm::EDGetTokenT endcapecalCollection_; + edm::EDGetTokenT measurementTrkEvtToken_; + + double hOverEConeSize_; + double maxHOverE_; + double minSCEt_; + double isoConeR_; + double isoInnerConeR_; + double isoEtaSlice_; + double isoEtMin_; + double isoEMin_; + bool vetoClusteredHits_; + bool useNumXtals_; + + std::vector flagsexclEB_; + std::vector flagsexclEE_; + std::vector severitiesexclEB_; + std::vector severitiesexclEE_; + + double ecalIsoCut_offset_; + double ecalIsoCut_slope_; + + edm::ESHandle theCaloGeom_; + + std::unique_ptr theTrajectoryBuilder_; + + OutInConversionSeedFinder outInSeedFinder_; + OutInConversionTrackFinder outInTrackFinder_; + InOutConversionSeedFinder inOutSeedFinder_; + InOutConversionTrackFinder inOutTrackFinder_; + + std::vector> caloPtrVecOutIn_; + std::vector> caloPtrVecInOut_; + + std::vector> vecOfSCRefForOutIn; + std::vector> vecOfSCRefForInOut; + + void buildCollections(bool detector, + const edm::Handle>& scHandle, + const edm::Handle>& bcHandle, + const EcalRecHitCollection& ecalRecHits, + const EcalSeverityLevelAlgo* sevLev, + CaloTowerCollection const& hcalTowers, + TrackCandidateCollection& outInTracks, + TrackCandidateCollection& inOutTracks, + std::vector>& vecRecOI, + std::vector>& vecRecIO); +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(ConversionTrackCandidateProducer); namespace { auto createBaseCkfTrajectoryBuilder(const edm::ParameterSet& pset, edm::ConsumesCollector&& iC) { @@ -53,41 +130,28 @@ namespace { } // namespace ConversionTrackCandidateProducer::ConversionTrackCandidateProducer(const edm::ParameterSet& config) - : theTrajectoryBuilder_(createBaseCkfTrajectoryBuilder( - config.getParameter("TrajectoryBuilderPSet"), consumesCollector())), - theOutInSeedFinder_(new OutInConversionSeedFinder(config, consumesCollector())), - theOutInTrackFinder_(new OutInConversionTrackFinder(config, theTrajectoryBuilder_.get())), - theInOutSeedFinder_(new InOutConversionSeedFinder(config, consumesCollector())), - theInOutTrackFinder_(new InOutConversionTrackFinder(config, theTrajectoryBuilder_.get())) { - //std::cout << "ConversionTrackCandidateProducer CTOR " << "\n"; - nEvt_ = 0; + : bcBarrelCollection_{consumes(config.getParameter("bcBarrelCollection"))}, + bcEndcapCollection_{consumes(config.getParameter("bcEndcapCollection"))}, + scHybridBarrelProducer_{consumes(config.getParameter("scHybridBarrelProducer"))}, + scIslandEndcapProducer_{consumes(config.getParameter("scIslandEndcapProducer"))}, - // use onfiguration file to setup input/output collection names - - bcBarrelCollection_ = - consumes >(config.getParameter("bcBarrelCollection")); - bcEndcapCollection_ = - consumes >(config.getParameter("bcEndcapCollection")); - - scHybridBarrelProducer_ = - consumes >(config.getParameter("scHybridBarrelProducer")); - scIslandEndcapProducer_ = - consumes >(config.getParameter("scIslandEndcapProducer")); + hcalTowers_{consumes(config.getParameter("hcalTowers"))}, + barrelecalCollection_{consumes(config.getParameter("barrelEcalRecHitCollection"))}, + endcapecalCollection_{consumes(config.getParameter("endcapEcalRecHitCollection"))}, + measurementTrkEvtToken_{consumes(edm::InputTag("MeasurementTrackerEvent"))}, + theTrajectoryBuilder_(createBaseCkfTrajectoryBuilder( + config.getParameter("TrajectoryBuilderPSet"), consumesCollector())), + outInSeedFinder_{config, consumesCollector()}, + outInTrackFinder_{config, theTrajectoryBuilder_.get()}, + inOutSeedFinder_{config, consumesCollector()}, + inOutTrackFinder_{config, theTrajectoryBuilder_.get()} { OutInTrackCandidateCollection_ = config.getParameter("outInTrackCandidateCollection"); InOutTrackCandidateCollection_ = config.getParameter("inOutTrackCandidateCollection"); - OutInTrackSuperClusterAssociationCollection_ = - config.getParameter("outInTrackCandidateSCAssociationCollection"); - InOutTrackSuperClusterAssociationCollection_ = - config.getParameter("inOutTrackCandidateSCAssociationCollection"); - - barrelecalCollection_ = - consumes(config.getParameter("barrelEcalRecHitCollection")); - endcapecalCollection_ = - consumes(config.getParameter("endcapEcalRecHitCollection")); - hcalTowers_ = consumes(config.getParameter("hcalTowers")); - measurementTrkEvtToken_ = consumes(edm::InputTag("MeasurementTrackerEvent")); + OutInTrackSCAssociationCollection_ = config.getParameter("outInTrackCandidateSCAssociationCollection"); + InOutTrackSCAssociationCollection_ = config.getParameter("inOutTrackCandidateSCAssociationCollection"); + hOverEConeSize_ = config.getParameter("hOverEConeSize"); maxHOverE_ = config.getParameter("maxHOverE"); minSCEt_ = config.getParameter("minSCEt"); @@ -102,41 +166,31 @@ ConversionTrackCandidateProducer::ConversionTrackCandidateProducer(const edm::Pa ecalIsoCut_slope_ = config.getParameter("ecalIsoCut_slope"); //Flags and Severities to be excluded from photon calculations - const std::vector flagnamesEB = - config.getParameter >("RecHitFlagToBeExcludedEB"); - - const std::vector flagnamesEE = - config.getParameter >("RecHitFlagToBeExcludedEE"); + auto const& flagnamesEB = config.getParameter>("RecHitFlagToBeExcludedEB"); + auto const& flagnamesEE = config.getParameter>("RecHitFlagToBeExcludedEE"); flagsexclEB_ = StringToEnumValue(flagnamesEB); - flagsexclEE_ = StringToEnumValue(flagnamesEE); - const std::vector severitynamesEB = - config.getParameter >("RecHitSeverityToBeExcludedEB"); + auto const& severitynamesEB = config.getParameter>("RecHitSeverityToBeExcludedEB"); + auto const& severitynamesEE = config.getParameter>("RecHitSeverityToBeExcludedEE"); severitiesexclEB_ = StringToEnumValue(severitynamesEB); - - const std::vector severitynamesEE = - config.getParameter >("RecHitSeverityToBeExcludedEE"); - severitiesexclEE_ = StringToEnumValue(severitynamesEE); // Register the product produces(OutInTrackCandidateCollection_); produces(InOutTrackCandidateCollection_); - produces(OutInTrackSuperClusterAssociationCollection_); - produces(InOutTrackSuperClusterAssociationCollection_); + produces(OutInTrackSCAssociationCollection_); + produces(InOutTrackSCAssociationCollection_); } -ConversionTrackCandidateProducer::~ConversionTrackCandidateProducer() {} - void ConversionTrackCandidateProducer::setEventSetup(const edm::EventSetup& theEventSetup) { - theOutInSeedFinder_->setEventSetup(theEventSetup); - theInOutSeedFinder_->setEventSetup(theEventSetup); - theOutInTrackFinder_->setEventSetup(theEventSetup); - theInOutTrackFinder_->setEventSetup(theEventSetup); + outInSeedFinder_.setEventSetup(theEventSetup); + inOutSeedFinder_.setEventSetup(theEventSetup); + outInTrackFinder_.setEventSetup(theEventSetup); + inOutTrackFinder_.setEventSetup(theEventSetup); } void ConversionTrackCandidateProducer::beginRun(edm::Run const& r, edm::EventSetup const& theEventSetup) { @@ -144,25 +198,19 @@ void ConversionTrackCandidateProducer::beginRun(edm::Run const& r, edm::EventSet theEventSetup.get().get("SimpleNavigationSchool", nav); const NavigationSchool* navigation = nav.product(); theTrajectoryBuilder_->setNavigationSchool(navigation); - theOutInSeedFinder_->setNavigationSchool(navigation); - theInOutSeedFinder_->setNavigationSchool(navigation); + outInSeedFinder_.setNavigationSchool(navigation); + inOutSeedFinder_.setNavigationSchool(navigation); } void ConversionTrackCandidateProducer::produce(edm::Event& theEvent, const edm::EventSetup& theEventSetup) { - using namespace edm; - nEvt_++; - // std::cout << "ConversionTrackCandidateProducer Analyzing event number " << theEvent.id() << " Global Counter " << nEvt_ << "\n"; - // get the trajectory builder and initialize it with the data - edm::Handle data; - theEvent.getByToken(measurementTrkEvtToken_, data); - theTrajectoryBuilder_->setEvent(theEvent, theEventSetup, &*data); + theTrajectoryBuilder_->setEvent(theEvent, theEventSetup, &theEvent.get(measurementTrkEvtToken_)); // this need to be done after the initialization of the TrajectoryBuilder! setEventSetup(theEventSetup); - theOutInSeedFinder_->setEvent(theEvent); - theInOutSeedFinder_->setEvent(theEvent); + outInSeedFinder_.setEvent(theEvent); + inOutSeedFinder_.setEvent(theEvent); // // create empty output collections @@ -177,8 +225,7 @@ void ConversionTrackCandidateProducer::produce(edm::Event& theEvent, const edm:: // Get the basic cluster collection in the Barrel bool validBarrelBCHandle = true; - edm::Handle > bcBarrelHandle; - theEvent.getByToken(bcBarrelCollection_, bcBarrelHandle); + auto bcBarrelHandle = theEvent.getHandle(bcBarrelCollection_); if (!bcBarrelHandle.isValid()) { edm::LogError("ConversionTrackCandidateProducer") << "Error! Can't get the Barrel Basic Clusters!"; validBarrelBCHandle = false; @@ -186,8 +233,7 @@ void ConversionTrackCandidateProducer::produce(edm::Event& theEvent, const edm:: // Get the basic cluster collection in the Endcap bool validEndcapBCHandle = true; - edm::Handle > bcEndcapHandle; - theEvent.getByToken(bcEndcapCollection_, bcEndcapHandle); + auto bcEndcapHandle = theEvent.getHandle(bcEndcapCollection_); if (!bcEndcapHandle.isValid()) { edm::LogError("CoonversionTrackCandidateProducer") << "Error! Can't get the Endcap Basic Clusters"; validEndcapBCHandle = false; @@ -195,8 +241,7 @@ void ConversionTrackCandidateProducer::produce(edm::Event& theEvent, const edm:: // Get the Super Cluster collection in the Barrel bool validBarrelSCHandle = true; - edm::Handle > scBarrelHandle; - theEvent.getByToken(scHybridBarrelProducer_, scBarrelHandle); + auto scBarrelHandle = theEvent.getHandle(scHybridBarrelProducer_); if (!scBarrelHandle.isValid()) { edm::LogError("CoonversionTrackCandidateProducer") << "Error! Can't get the barrel superclusters!"; validBarrelSCHandle = false; @@ -204,8 +249,7 @@ void ConversionTrackCandidateProducer::produce(edm::Event& theEvent, const edm:: // Get the Super Cluster collection in the Endcap bool validEndcapSCHandle = true; - edm::Handle > scEndcapHandle; - theEvent.getByToken(scIslandEndcapProducer_, scEndcapHandle); + auto scEndcapHandle = theEvent.getHandle(scIslandEndcapProducer_); if (!scEndcapHandle.isValid()) { edm::LogError("CoonversionTrackCandidateProducer") << "Error! Can't get the endcap superclusters!"; validEndcapSCHandle = false; @@ -214,15 +258,10 @@ void ConversionTrackCandidateProducer::produce(edm::Event& theEvent, const edm:: // get the geometry from the event setup: theEventSetup.get().get(theCaloGeom_); - // get Hcal towers collection - Handle hcalTowersHandle; - theEvent.getByToken(hcalTowers_, hcalTowersHandle); + auto const& hcalTowers = theEvent.get(hcalTowers_); - edm::Handle ecalhitsCollEB; - edm::Handle ecalhitsCollEE; - - theEvent.getByToken(endcapecalCollection_, ecalhitsCollEE); - theEvent.getByToken(barrelecalCollection_, ecalhitsCollEB); + auto const& ecalhitsCollEB = theEvent.get(barrelecalCollection_); + auto const& ecalhitsCollEE = theEvent.get(endcapecalCollection_); edm::ESHandle sevlv; theEventSetup.get().get(sevlv); @@ -237,9 +276,8 @@ void ConversionTrackCandidateProducer::produce(edm::Event& theEvent, const edm:: scBarrelHandle, bcBarrelHandle, ecalhitsCollEB, - *ecalhitsCollEB, sevLevel, - hcalTowersHandle, + hcalTowers, *outInTrackCandidate_p, *inOutTrackCandidate_p, caloPtrVecOutIn_, @@ -251,9 +289,8 @@ void ConversionTrackCandidateProducer::produce(edm::Event& theEvent, const edm:: scEndcapHandle, bcEndcapHandle, ecalhitsCollEE, - *ecalhitsCollEE, sevLevel, - hcalTowersHandle, + hcalTowers, *outInTrackCandidate_p, *inOutTrackCandidate_p, caloPtrVecOutIn_, @@ -265,13 +302,11 @@ void ConversionTrackCandidateProducer::produce(edm::Event& theEvent, const edm:: // put all products in the event // Barrel //std::cout << "ConversionTrackCandidateProducer Putting in the event " << (*outInTrackCandidate_p).size() << " Out In track Candidates " << "\n"; - const edm::OrphanHandle refprodOutInTrackC = - theEvent.put(std::move(outInTrackCandidate_p), OutInTrackCandidateCollection_); + auto const refprodOutInTrackC = theEvent.put(std::move(outInTrackCandidate_p), OutInTrackCandidateCollection_); //std::cout << "ConversionTrackCandidateProducer refprodOutInTrackC size " << (*(refprodOutInTrackC.product())).size() << "\n"; // //std::cout << "ConversionTrackCandidateProducer Putting in the event " << (*inOutTrackCandidate_p).size() << " In Out track Candidates " << "\n"; - const edm::OrphanHandle refprodInOutTrackC = - theEvent.put(std::move(inOutTrackCandidate_p), InOutTrackCandidateCollection_); + auto const refprodInOutTrackC = theEvent.put(std::move(inOutTrackCandidate_p), InOutTrackCandidateCollection_); //std::cout << "ConversionTrackCandidateProducer refprodInOutTrackC size " << (*(refprodInOutTrackC.product())).size() << "\n"; edm::ValueMap::Filler fillerOI(*outInAssoc_p); @@ -282,35 +317,27 @@ void ConversionTrackCandidateProducer::produce(edm::Event& theEvent, const edm:: fillerIO.fill(); // std::cout << "ConversionTrackCandidateProducer Putting in the event OutIn track - SC association: size " << (*outInAssoc_p).size() << "\n"; - theEvent.put(std::move(outInAssoc_p), OutInTrackSuperClusterAssociationCollection_); + theEvent.put(std::move(outInAssoc_p), OutInTrackSCAssociationCollection_); // std::cout << "ConversionTrackCandidateProducer Putting in the event InOut track - SC association: size " << (*inOutAssoc_p).size() << "\n"; - theEvent.put(std::move(inOutAssoc_p), InOutTrackSuperClusterAssociationCollection_); + theEvent.put(std::move(inOutAssoc_p), InOutTrackSCAssociationCollection_); - theOutInSeedFinder_->clear(); - theInOutSeedFinder_->clear(); + outInSeedFinder_.clear(); + inOutSeedFinder_.clear(); } void ConversionTrackCandidateProducer::buildCollections(bool isBarrel, - const edm::Handle >& scHandle, - const edm::Handle >& bcHandle, - edm::Handle ecalRecHitHandle, - const EcalRecHitCollection& ecalRecHits, + const edm::Handle>& scHandle, + const edm::Handle>& bcHandle, + EcalRecHitCollection const& ecalRecHits, const EcalSeverityLevelAlgo* sevLevel, - //edm::ESHandle chStatus, - //const EcalChannelStatus* chStatus, - const edm::Handle& hcalTowersHandle, + CaloTowerCollection const& hcalTowers, TrackCandidateCollection& outInTrackCandidates, TrackCandidateCollection& inOutTrackCandidates, - std::vector >& vecRecOI, - std::vector >& vecRecIO) + std::vector>& vecRecOI, + std::vector>& vecRecIO) { - //std::cout << "ConversionTrackCandidateProducer is barrel " << isBarrel << "\n"; - //std::cout << "ConversionTrackCandidateProducer builcollections sc size " << scHandle->size() << "\n"; - //std::cout << "ConversionTrackCandidateProducer builcollections bc size " << bcHandle->size() << "\n"; - //const CaloGeometry* geometry = theCaloGeom_.product(); - // Loop over SC in the barrel and reconstruct converted photons for (auto const& aClus : scHandle->ptrs()) { // preselection based in Et and H/E cut. @@ -322,8 +349,7 @@ void ConversionTrackCandidateProducer::buildCollections(bool isBarrel, const reco::CaloCluster* pClus = &(*aClus); const reco::SuperCluster* sc = dynamic_cast(pClus); double scEt = sc->energy() / cosh(sc->eta()); - const CaloTowerCollection* hcalTowersColl = hcalTowersHandle.product(); - EgammaTowerIsolation towerIso(hOverEConeSize_, 0., 0., -1, hcalTowersColl); + EgammaTowerIsolation towerIso(hOverEConeSize_, 0., 0., -1, &hcalTowers); double HoE = towerIso.getTowerESum(sc) / sc->energy(); if (HoE >= maxHOverE_) continue; @@ -336,10 +362,10 @@ void ConversionTrackCandidateProducer::buildCollections(bool isBarrel, ecalIso.setUseNumCrystals(useNumXtals_); if (isBarrel) { ecalIso.doFlagChecks(flagsexclEB_); - ecalIso.doSeverityChecks(ecalRecHitHandle.product(), severitiesexclEB_); + ecalIso.doSeverityChecks(&ecalRecHits, severitiesexclEB_); } else { ecalIso.doFlagChecks(flagsexclEE_); - ecalIso.doSeverityChecks(ecalRecHitHandle.product(), severitiesexclEE_); + ecalIso.doSeverityChecks(&ecalRecHits, severitiesexclEE_); } double ecalIsolation = ecalIso.getEtSum(sc); @@ -347,33 +373,100 @@ void ConversionTrackCandidateProducer::buildCollections(bool isBarrel, continue; // Now launch the seed finding - theOutInSeedFinder_->setCandidate(pClus->energy(), - GlobalPoint(pClus->position().x(), pClus->position().y(), pClus->position().z())); - theOutInSeedFinder_->makeSeeds(bcHandle); + outInSeedFinder_.setCandidate(pClus->energy(), + GlobalPoint(pClus->position().x(), pClus->position().y(), pClus->position().z())); + outInSeedFinder_.makeSeeds(bcHandle); - std::vector theOutInTracks = - theOutInTrackFinder_->tracks(theOutInSeedFinder_->seeds(), outInTrackCandidates); + std::vector theOutInTracks = outInTrackFinder_.tracks(outInSeedFinder_.seeds(), outInTrackCandidates); - theInOutSeedFinder_->setCandidate(pClus->energy(), - GlobalPoint(pClus->position().x(), pClus->position().y(), pClus->position().z())); - theInOutSeedFinder_->setTracks(theOutInTracks); - theInOutSeedFinder_->makeSeeds(bcHandle); + inOutSeedFinder_.setCandidate(pClus->energy(), + GlobalPoint(pClus->position().x(), pClus->position().y(), pClus->position().z())); + inOutSeedFinder_.setTracks(theOutInTracks); + inOutSeedFinder_.makeSeeds(bcHandle); - std::vector theInOutTracks = - theInOutTrackFinder_->tracks(theInOutSeedFinder_->seeds(), inOutTrackCandidates); + std::vector theInOutTracks = inOutTrackFinder_.tracks(inOutSeedFinder_.seeds(), inOutTrackCandidates); // Debug // std::cout << "ConversionTrackCandidateProducer theOutInTracks.size() " << theOutInTracks.size() << " theInOutTracks.size() " << theInOutTracks.size() << " Event pointer to out in track size barrel " << outInTrackCandidates.size() << " in out track size " << inOutTrackCandidates.size() << "\n"; //////////// Fill vectors of Ref to SC to be used for the Track-SC association - for (std::vector::const_iterator it = theOutInTracks.begin(); it != theOutInTracks.end(); ++it) { - caloPtrVecOutIn_.push_back(aClus); + for (auto it = theOutInTracks.begin(); it != theOutInTracks.end(); ++it) { + vecRecOI.push_back(aClus); // std::cout << "ConversionTrackCandidateProducer Barrel OutIn Tracks Number of hits " << (*it).foundHits() << "\n"; } - for (std::vector::const_iterator it = theInOutTracks.begin(); it != theInOutTracks.end(); ++it) { - caloPtrVecInOut_.push_back(aClus); + for (auto it = theInOutTracks.begin(); it != theInOutTracks.end(); ++it) { + vecRecIO.push_back(aClus); // std::cout << "ConversionTrackCandidateProducer Barrel InOut Tracks Number of hits " << (*it).foundHits() << "\n"; } } } + +void ConversionTrackCandidateProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + // conversionTrackCandidates + edm::ParameterSetDescription desc; + + desc.add("bcBarrelCollection", {"particleFlowSuperClusterECAL", "particleFlowBasicClusterECALBarrel"}); + desc.add("bcEndcapCollection", {"particleFlowSuperClusterECAL", "particleFlowBasicClusterECALEndcap"}); + desc.add("scHybridBarrelProducer", + {"particleFlowSuperClusterECAL", "particleFlowSuperClusterECALBarrel"}); + desc.add("scIslandEndcapProducer", + {"particleFlowSuperClusterECAL", "particleFlowSuperClusterECALEndcapWithPreshower"}); + + desc.add("outInTrackCandidateSCAssociationCollection", "outInTrackCandidateSCAssociationCollection"); + desc.add("inOutTrackCandidateSCAssociationCollection", "inOutTrackCandidateSCAssociationCollection"); + desc.add("outInTrackCandidateCollection", "outInTracksFromConversions"); + desc.add("inOutTrackCandidateCollection", "inOutTracksFromConversions"); + + desc.add("barrelEcalRecHitCollection", {"ecalRecHit", "EcalRecHitsEB"}); + desc.add("endcapEcalRecHitCollection", {"ecalRecHit", "EcalRecHitsEE"}); + desc.add("MeasurementTrackerName", ""); + desc.add("OutInRedundantSeedCleaner", "CachingSeedCleanerBySharedInput"); + desc.add("InOutRedundantSeedCleaner", "CachingSeedCleanerBySharedInput"); + desc.add("useHitsSplitting", false); + desc.add("maxNumOfSeedsOutIn", 50); + desc.add("maxNumOfSeedsInOut", 50); + desc.add("bcEtCut", 1.5); + desc.add("bcECut", 1.5); + desc.add("useEtCut", true); + desc.add("hcalTowers", {"towerMaker"}); + desc.add("minSCEt", 20.0); + desc.add("hOverEConeSize", 0.15); + desc.add("maxHOverE", 0.15); + desc.add("isoInnerConeR", 3.5); + desc.add("isoConeR", 0.4); + desc.add("isoEtaSlice", 2.5); + desc.add("isoEtMin", 0.0); + desc.add("isoEMin", 0.08); + desc.add("vetoClusteredHits", false); + desc.add("useNumXstals", true); + desc.add("ecalIsoCut_offset", 999999999); // alternative value: 4.2 + desc.add("ecalIsoCut_slope", 0.0); // alternative value: 0.003 + + desc.add>("RecHitFlagToBeExcludedEB", {}); + desc.add>("RecHitSeverityToBeExcludedEB", {}); + desc.add>("RecHitFlagToBeExcludedEE", {}); + desc.add>("RecHitSeverityToBeExcludedEE", {}); + + desc.add("fractionShared", 0.5); + desc.add("TrajectoryBuilder", "TrajectoryBuilderForConversions"); + { + edm::ParameterSetDescription psd0; + psd0.setUnknown(); + desc.add("TrajectoryBuilderPSet", psd0); + } + { + edm::ParameterSetDescription psd0; + psd0.add("propagatorAlongTISE", "alongMomElePropagator"); + psd0.add("numberMeasurementsForFit", 4); + psd0.add("propagatorOppositeTISE", "oppositeToMomElePropagator"); + desc.add("TransientInitialStateEstimatorParameters", psd0); + } + desc.add("allowSharedFirstHit", true); + desc.add("ValidHitBonus", 5.0); + desc.add("MissingHitPenalty", 20.0); + + descriptions.add("conversionTrackCandidates", desc); + // or use the following to generate the label from the module's C++ type + //descriptions.addWithDefaultLabel(desc); +} diff --git a/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackMerger.cc b/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackMerger.cc index c580f4c85824d..3946cdd6de3be 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackMerger.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackMerger.cc @@ -8,29 +8,46 @@ // // -#include -#include -#include -#include +#include "CommonTools/Statistics/interface/ChiSquaredProbability.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/EgammaTrackReco/interface/ConversionTrack.h" +#include "DataFormats/EgammaTrackReco/interface/ConversionTrackFwd.h" +#include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackBase.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "Geometry/CommonDetUnit/interface/GeomDet.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" + #include -#include "RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackMerger.h" +class ConversionTrackMerger : public edm::stream::EDProducer<> { +public: + explicit ConversionTrackMerger(const edm::ParameterSet& conf); -#include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2DCollection.h" -#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2DCollection.h" -#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit1DCollection.h" -#include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h" -#include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h" + ~ConversionTrackMerger() override; -#include "FWCore/Framework/interface/ESHandle.h" + void produce(edm::Event& e, const edm::EventSetup& c) override; -#include "FWCore/MessageLogger/interface/MessageLogger.h" +private: + edm::ParameterSet conf_; -#include "Geometry/CommonDetUnit/interface/GeomDet.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" + edm::EDGetTokenT trackProducer1; + edm::EDGetTokenT trackProducer2; -#include "CommonTools/Statistics/interface/ChiSquaredProbability.h" + std::unique_ptr outputTrks; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(ConversionTrackMerger); ConversionTrackMerger::ConversionTrackMerger(edm::ParameterSet const& conf) : conf_(conf) { // retrieve producer name of input TrackCollection(s) diff --git a/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackProducer.cc index b9493bac510e2..21926134df257 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackProducer.cc @@ -9,25 +9,68 @@ // // -#include +#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/EgammaTrackReco/interface/ConversionTrack.h" +#include "DataFormats/EgammaTrackReco/interface/ConversionTrackFwd.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackBase.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "RecoTracker/ConversionSeedGenerators/interface/IdealHelixParameters.h" +#include "TrackingTools/GsfTracking/interface/TrajGsfTrackAssociation.h" +#include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" +#include "TrackingTools/PatternTools/interface/Trajectory.h" + #include -#include -#include #include -#include "TrackingTools/PatternTools/interface/Trajectory.h" +class ConversionTrackProducer : public edm::stream::EDProducer<> { + typedef edm::AssociationMap, reco::GsfTrackCollection, unsigned short> > + TrajGsfTrackAssociationCollection; -#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" -#include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" +public: + explicit ConversionTrackProducer(const edm::ParameterSet& conf); -#include "RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackProducer.h" -#include "DataFormats/Common/interface/Handle.h" + ~ConversionTrackProducer() override; -#include "DataFormats/BeamSpot/interface/BeamSpot.h" + void produce(edm::Event& e, const edm::EventSetup& c) override; -#include "FWCore/Framework/interface/ESHandle.h" +private: + edm::EDGetTokenT > genericTracks; + edm::EDGetTokenT kfTrajectories; + edm::EDGetTokenT gsfTrajectories; + bool useTrajectory; + bool setTrackerOnly; + bool setIsGsfTrackOpen; + bool setArbitratedEcalSeeded; + bool setArbitratedMerged; + bool setArbitratedMergedEcalGeneral; -#include "FWCore/MessageLogger/interface/MessageLogger.h" + //-------------------------------------------------- + //Added by D. Giordano + // 2011/08/05 + // Reduction of the track sample based on geometric hypothesis for conversion tracks + + edm::EDGetTokenT beamSpotInputTag; + edm::ESGetToken magFieldToken; + bool filterOnConvTrackHyp; + double minConvRadius; + IdealHelixParameters ConvTrackPreSelector; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(ConversionTrackProducer); ConversionTrackProducer::ConversionTrackProducer(edm::ParameterSet const& conf) : useTrajectory(conf.getParameter("useTrajectory")), diff --git a/RecoEgamma/EgammaPhotonProducers/src/ConvertedPhotonProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/ConvertedPhotonProducer.cc index 10eea77618598..dc87d5143c515 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/ConvertedPhotonProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/ConvertedPhotonProducer.cc @@ -1,153 +1,181 @@ -#include -#include -#include +/** \class ConvertedPhotonProducer + ** + ** + ** \author Nancy Marinelli, U. of Notre Dame, US + ** + ***/ -// Framework -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Utilities/interface/Exception.h" -// -#include "DataFormats/EgammaReco/interface/BasicCluster.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" #include "DataFormats/CaloRecHit/interface/CaloCluster.h" - -// - -#include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" +#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/View.h" #include "DataFormats/EgammaCandidates/interface/Conversion.h" -#include "DataFormats/EgammaCandidates/interface/ConversionFwd.h" +#include "DataFormats/EgammaCandidates/interface/Photon.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaTrackReco/interface/TrackCaloClusterAssociation.h" #include "DataFormats/TrackReco/interface/Track.h" #include "DataFormats/TrackReco/interface/TrackExtra.h" #include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" -// +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/ESGetToken.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "RecoTracker/Record/interface/TrackerRecoGeometryRecord.h" -// +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h" #include "RecoEgamma/EgammaPhotonAlgos/interface/ConversionTrackEcalImpactPoint.h" #include "RecoEgamma/EgammaPhotonAlgos/interface/ConversionTrackPairFinder.h" #include "RecoEgamma/EgammaPhotonAlgos/interface/ConversionVertexFinder.h" -#include "RecoEgamma/EgammaPhotonProducers/interface/ConvertedPhotonProducer.h" -// -#include "RecoTracker/Record/interface/CkfComponentsRecord.h" -// -#include "TrackingTools/TransientTrack/interface/TransientTrack.h" -#include "TrackingTools/TransientTrack/interface/TrackTransientTrack.h" -#include "TrackingTools/PatternTools/interface/TwoTrackMinimumDistance.h" +#include "RecoEgamma/EgammaTools/interface/ConversionLikelihoodCalculator.h" #include "TrackingTools/Records/interface/TransientTrackRecord.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h" +#include "TrackingTools/TransientTrack/interface/TrackTransientTrack.h" +#include "TrackingTools/TransientTrack/interface/TransientTrack.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" -ConvertedPhotonProducer::ConvertedPhotonProducer(const edm::ParameterSet& config) - : conf_(config), theTrackPairFinder_(nullptr), theVertexFinder_(nullptr), theLikelihoodCalc_(nullptr) { - //cout<< " ConvertedPhotonProducer CTOR " << "\n"; +#include - // use onfiguration file to setup input collection names - bcBarrelCollection_ = - consumes >(conf_.getParameter("bcBarrelCollection")); - bcEndcapCollection_ = - consumes >(conf_.getParameter("bcEndcapCollection")); +class ConvertedPhotonProducer : public edm::stream::EDProducer<> { +public: + ConvertedPhotonProducer(const edm::ParameterSet& ps); - scHybridBarrelProducer_ = - consumes >(conf_.getParameter("scHybridBarrelProducer")); - scIslandEndcapProducer_ = - consumes >(conf_.getParameter("scIslandEndcapProducer")); + void beginRun(edm::Run const&, const edm::EventSetup& es) final; + void produce(edm::Event& evt, const edm::EventSetup& es) override; - std::string oitrackprod = conf_.getParameter("conversionOITrackProducer"); - std::string iotrackprod = conf_.getParameter("conversionIOTrackProducer"); +private: + void buildCollections( + edm::EventSetup const& es, + const edm::Handle >& scHandle, + const edm::Handle >& bcHandle, + CaloTowerCollection const& hcalTowers, + const edm::Handle& trkHandle, + std::map, reco::CaloClusterPtr, CompareTwoTracksVectors>& allPairs, + reco::ConversionCollection& outputConvPhotonCollection); + void cleanCollections(const edm::Handle >& scHandle, + const edm::OrphanHandle& conversionHandle, + reco::ConversionCollection& outputCollection); - std::string oitrackassoc = conf_.getParameter("outInTrackSCAssociation"); - std::string iotrackassoc = conf_.getParameter("inOutTrackSCAssociation"); + std::vector solveAmbiguity(const edm::OrphanHandle& conversionHandle, + reco::CaloClusterPtr const& sc); - edm::InputTag oitracks(oitrackprod), oitracksassoc(oitrackprod, oitrackassoc), iotracks(iotrackprod), - iotracksassoc(iotrackprod, iotrackassoc); + float calculateMinApproachDistance(const reco::TrackRef& track1, const reco::TrackRef& track2); + void getCircleCenter(const reco::TrackRef& tk, double r, double& x0, double& y0); - conversionOITrackProducer_ = consumes(oitracks); - outInTrackSCAssociationCollection_ = consumes(oitracksassoc); - conversionIOTrackProducer_ = consumes(iotracks); - inOutTrackSCAssociationCollection_ = consumes(iotracksassoc); + edm::EDGetTokenT conversionOITrackProducer_; + edm::EDGetTokenT conversionIOTrackProducer_; - generalTrackProducer_ = consumes(conf_.getParameter("generalTracksSrc")); + edm::EDGetTokenT outInTrackSCAssociationCollection_; + edm::EDGetTokenT inOutTrackSCAssociationCollection_; - algoName_ = conf_.getParameter("AlgorithmName"); + edm::EDGetTokenT generalTrackProducer_; - hcalTowers_ = consumes(conf_.getParameter("hcalTowers")); - hOverEConeSize_ = conf_.getParameter("hOverEConeSize"); - maxHOverE_ = conf_.getParameter("maxHOverE"); - minSCEt_ = conf_.getParameter("minSCEt"); - recoverOneTrackCase_ = conf_.getParameter("recoverOneTrackCase"); - dRForConversionRecovery_ = conf_.getParameter("dRForConversionRecovery"); - deltaCotCut_ = conf_.getParameter("deltaCotCut"); - minApproachDisCut_ = conf_.getParameter("minApproachDisCut"); + // Register the product + edm::EDPutTokenT convertedPhotonCollectionPutToken_; + edm::EDPutTokenT cleanedConvertedPhotonCollectionPutToken_; - maxNumOfCandidates_ = conf_.getParameter("maxNumOfCandidates"); - risolveAmbiguity_ = conf_.getParameter("risolveConversionAmbiguity"); - likelihoodWeights_ = conf_.getParameter("MVA_weights_location"); + edm::EDGetTokenT > bcBarrelCollection_; + edm::EDGetTokenT > bcEndcapCollection_; + edm::EDGetTokenT > scHybridBarrelProducer_; + edm::EDGetTokenT > scIslandEndcapProducer_; + edm::EDGetTokenT hcalTowers_; - caloGeomToken_ = esConsumes(); - mFToken_ = esConsumes(); - transientTrackToken_ = esConsumes( - edm::ESInputTag("", "TransientTrackBuilder")); + MagneticField const* magneticField_; + TransientTrackBuilder const* transientTrackBuilder_; - // use configuration file to setup output collection names - ConvertedPhotonCollection_ = conf_.getParameter("convertedPhotonCollection"); - CleanedConvertedPhotonCollection_ = conf_.getParameter("cleanedConvertedPhotonCollection"); + edm::ESGetToken caloGeomToken_; + edm::ESGetToken mFToken_; + edm::ESGetToken transientTrackToken_; - // Register the product - produces(ConvertedPhotonCollection_); - produces(CleanedConvertedPhotonCollection_); + ConversionTrackPairFinder trackPairFinder_; + ConversionVertexFinder vertexFinder_; + std::string algoName_; - // instantiate the Track Pair Finder algorithm - theTrackPairFinder_ = new ConversionTrackPairFinder(); - edm::FileInPath path_mvaWeightFile(likelihoodWeights_.c_str()); - theLikelihoodCalc_ = new ConversionLikelihoodCalculator(); - theLikelihoodCalc_->setWeightsFile(path_mvaWeightFile.fullPath().c_str()); - // instantiate the Vertex Finder algorithm - theVertexFinder_ = new ConversionVertexFinder(conf_); - - // Inizilize my global event counter - nEvt_ = 0; -} + double hOverEConeSize_; + double maxHOverE_; + double minSCEt_; + bool recoverOneTrackCase_; + double dRForConversionRecovery_; + double deltaCotCut_; + double minApproachDisCut_; + int maxNumOfCandidates_; + bool risolveAmbiguity_; + + ConversionLikelihoodCalculator likelihoodCalc_; + std::string likelihoodWeights_; + + math::XYZPointF toFConverterP(const math::XYZPoint& val) { return math::XYZPointF(val.x(), val.y(), val.z()); } -ConvertedPhotonProducer::~ConvertedPhotonProducer() { - delete theTrackPairFinder_; - delete theLikelihoodCalc_; - delete theVertexFinder_; + math::XYZVectorF toFConverterV(const math::XYZVector& val) { return math::XYZVectorF(val.x(), val.y(), val.z()); } +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(ConvertedPhotonProducer); + +ConvertedPhotonProducer::ConvertedPhotonProducer(const edm::ParameterSet& config) + : conversionOITrackProducer_{consumes(config.getParameter("conversionOITrackProducer"))}, + conversionIOTrackProducer_{consumes(config.getParameter("conversionIOTrackProducer"))}, + outInTrackSCAssociationCollection_{consumes({config.getParameter("conversionOITrackProducer"), + config.getParameter("outInTrackSCAssociation")})}, + inOutTrackSCAssociationCollection_{consumes({config.getParameter("conversionIOTrackProducer"), + config.getParameter("inOutTrackSCAssociation")})}, + + generalTrackProducer_{consumes(config.getParameter("generalTracksSrc"))}, + convertedPhotonCollectionPutToken_{ + produces(config.getParameter("convertedPhotonCollection"))}, + cleanedConvertedPhotonCollectionPutToken_{ + produces(config.getParameter("cleanedConvertedPhotonCollection"))}, + + bcBarrelCollection_{consumes(config.getParameter("bcBarrelCollection"))}, + bcEndcapCollection_{consumes(config.getParameter("bcEndcapCollection"))}, + scHybridBarrelProducer_{consumes(config.getParameter("scHybridBarrelProducer"))}, + scIslandEndcapProducer_{consumes(config.getParameter("scIslandEndcapProducer"))}, + hcalTowers_{consumes(config.getParameter("hcalTowers"))}, + caloGeomToken_{esConsumes()}, + mFToken_{esConsumes()}, + transientTrackToken_{esConsumes( + edm::ESInputTag("", "TransientTrackBuilder"))}, + vertexFinder_{config}, + algoName_{config.getParameter("AlgorithmName")}, + + hOverEConeSize_{config.getParameter("hOverEConeSize")}, + maxHOverE_{config.getParameter("maxHOverE")}, + minSCEt_{config.getParameter("minSCEt")}, + recoverOneTrackCase_{config.getParameter("recoverOneTrackCase")}, + dRForConversionRecovery_{config.getParameter("dRForConversionRecovery")}, + deltaCotCut_{config.getParameter("deltaCotCut")}, + minApproachDisCut_{config.getParameter("minApproachDisCut")}, + + maxNumOfCandidates_{config.getParameter("maxNumOfCandidates")}, + risolveAmbiguity_{config.getParameter("risolveConversionAmbiguity")}, + likelihoodWeights_{config.getParameter("MVA_weights_location")} { + // instantiate the Track Pair Finder algorithm + likelihoodCalc_.setWeightsFile(edm::FileInPath{likelihoodWeights_.c_str()}.fullPath().c_str()); } void ConvertedPhotonProducer::beginRun(edm::Run const& r, edm::EventSetup const& theEventSetup) { - //get magnetic field - //edm::LogInfo("ConvertedPhotonProducer") << " get magnetic field" << "\n"; - theMF_ = theEventSetup.getHandle(mFToken_); + magneticField_ = &theEventSetup.getData(mFToken_); // Transform Track into TransientTrack (needed by the Vertex fitter) - theTransientTrackBuilder_ = theEventSetup.getHandle(transientTrackToken_); + transientTrackBuilder_ = &theEventSetup.getData(transientTrackToken_); } void ConvertedPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& theEventSetup) { - using namespace edm; - nEvt_++; - - // LogDebug("ConvertedPhotonProducer") << "ConvertedPhotonProduce::produce event number " << theEvent.id() << " Global counter " << nEvt_ << "\n"; - // std::cout << "ConvertedPhotonProduce::produce event number " << theEvent.id() << " Global counter " << nEvt_ << "\n"; - // // create empty output collections // // Converted photon candidates reco::ConversionCollection outputConvPhotonCollection; - auto outputConvPhotonCollection_p = std::make_unique(); // Converted photon candidates reco::ConversionCollection cleanedConversionCollection; - auto cleanedConversionCollection_p = std::make_unique(); // Get the Super Cluster collection in the Barrel bool validBarrelSCHandle = true; - edm::Handle > scBarrelHandle; - theEvent.getByToken(scHybridBarrelProducer_, scBarrelHandle); + auto scBarrelHandle = theEvent.getHandle(scHybridBarrelProducer_); if (!scBarrelHandle.isValid()) { edm::LogError("ConvertedPhotonProducer") << "Error! Can't get the scHybridBarrelProducer"; validBarrelSCHandle = false; @@ -164,8 +192,7 @@ void ConvertedPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetu //// Get the Out In CKF tracks from conversions bool validTrackInputs = true; - Handle outInTrkHandle; - theEvent.getByToken(conversionOITrackProducer_, outInTrkHandle); + auto outInTrkHandle = theEvent.getHandle(conversionOITrackProducer_); if (!outInTrkHandle.isValid()) { //std::cout << "Error! Can't get the conversionOITrack " << "\n"; edm::LogError("ConvertedPhotonProducer") << "Error! Can't get the conversionOITrack " @@ -175,8 +202,7 @@ void ConvertedPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetu // LogDebug("ConvertedPhotonProducer")<< "ConvertedPhotonProducer outInTrack collection size " << (*outInTrkHandle).size() << "\n"; //// Get the association map between CKF Out In tracks and the SC where they originated - Handle outInTrkSCAssocHandle; - theEvent.getByToken(outInTrackSCAssociationCollection_, outInTrkSCAssocHandle); + auto outInTrkSCAssocHandle = theEvent.getHandle(outInTrackSCAssociationCollection_); if (!outInTrkSCAssocHandle.isValid()) { // std::cout << "Error! Can't get the product " << outInTrackSCAssociationCollection_.c_str() <<"\n"; edm::LogError("ConvertedPhotonProducer") << "Error! Can't get the outInTrackSCAssociationCollection)"; @@ -184,8 +210,7 @@ void ConvertedPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetu } //// Get the In Out CKF tracks from conversions - Handle inOutTrkHandle; - theEvent.getByToken(conversionIOTrackProducer_, inOutTrkHandle); + auto inOutTrkHandle = theEvent.getHandle(conversionIOTrackProducer_); if (!inOutTrkHandle.isValid()) { // std::cout << "Error! Can't get the conversionIOTrack " << "\n"; edm::LogError("ConvertedPhotonProducer") << "Error! Can't get the conversionIOTrack " @@ -196,7 +221,7 @@ void ConvertedPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetu //// Get the generalTracks if the recovery of one track cases is switched on - Handle generalTrkHandle; + edm::Handle generalTrkHandle; if (recoverOneTrackCase_) { theEvent.getByToken(generalTrackProducer_, generalTrkHandle); if (!generalTrkHandle.isValid()) { @@ -207,8 +232,7 @@ void ConvertedPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetu } //// Get the association map between CKF in out tracks and the SC where they originated - Handle inOutTrkSCAssocHandle; - theEvent.getByToken(inOutTrackSCAssociationCollection_, inOutTrkSCAssocHandle); + auto inOutTrkSCAssocHandle = theEvent.getHandle(inOutTrackSCAssociationCollection_); if (!inOutTrkSCAssocHandle.isValid()) { //std::cout << "Error! Can't get the product " << inOutTrackSCAssociationCollection_.c_str() <<"\n"; edm::LogError("ConvertedPhotonProducer") << "Error! Can't get the inOutTrackSCAssociationCollection_.c_str()"; @@ -230,44 +254,38 @@ void ConvertedPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetu } // get Hcal towers collection - Handle hcalTowersHandle; - theEvent.getByToken(hcalTowers_, hcalTowersHandle); - - // get the geometry from the event setup: - theCaloGeom_ = theEventSetup.getHandle(caloGeomToken_); + auto const& hcalTowers = theEvent.get(hcalTowers_); if (validTrackInputs) { //do the conversion: - std::vector t_outInTrk = (*theTransientTrackBuilder_).build(outInTrkHandle); - std::vector t_inOutTrk = (*theTransientTrackBuilder_).build(inOutTrkHandle); + std::vector t_outInTrk = transientTrackBuilder_->build(outInTrkHandle); + std::vector t_inOutTrk = transientTrackBuilder_->build(inOutTrkHandle); ///// Find the +/- pairs std::map, reco::CaloClusterPtr, CompareTwoTracksVectors> allPairs; - allPairs = theTrackPairFinder_->run( + allPairs = trackPairFinder_.run( t_outInTrk, outInTrkHandle, outInTrkSCAssocHandle, t_inOutTrk, inOutTrkHandle, inOutTrkSCAssocHandle); //LogDebug("ConvertedPhotonProducer") << "ConvertedPhotonProducer allPairs.size " << allPairs.size() << "\n"; buildCollections(theEventSetup, scBarrelHandle, bcBarrelHandle, - hcalTowersHandle, + hcalTowers, generalTrkHandle, allPairs, outputConvPhotonCollection); buildCollections(theEventSetup, scEndcapHandle, bcEndcapHandle, - hcalTowersHandle, + hcalTowers, generalTrkHandle, allPairs, outputConvPhotonCollection); } // put the product in the event - outputConvPhotonCollection_p->assign(outputConvPhotonCollection.begin(), outputConvPhotonCollection.end()); - //LogDebug("ConvertedPhotonProducer") << " ConvertedPhotonProducer Putting in the event converted photon candidates " << (*outputConvPhotonCollection_p).size() << "\n"; - const edm::OrphanHandle conversionHandle = - theEvent.put(std::move(outputConvPhotonCollection_p), ConvertedPhotonCollection_); + auto const conversionHandle = + theEvent.emplace(convertedPhotonCollectionPutToken_, std::move(outputConvPhotonCollection)); // Loop over barrel and endcap SC collections and fill the photon collection if (validBarrelSCHandle) @@ -275,29 +293,27 @@ void ConvertedPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetu if (validEndcapSCHandle) cleanCollections(scEndcapHandle, conversionHandle, cleanedConversionCollection); - cleanedConversionCollection_p->assign(cleanedConversionCollection.begin(), cleanedConversionCollection.end()); - theEvent.put(std::move(cleanedConversionCollection_p), CleanedConvertedPhotonCollection_); + theEvent.emplace(cleanedConvertedPhotonCollectionPutToken_, std::move(cleanedConversionCollection)); } void ConvertedPhotonProducer::buildCollections( edm::EventSetup const& es, const edm::Handle >& scHandle, const edm::Handle >& bcHandle, - const edm::Handle& hcalTowersHandle, + CaloTowerCollection const& hcalTowers, const edm::Handle& generalTrkHandle, std::map, reco::CaloClusterPtr, CompareTwoTracksVectors>& allPairs, reco::ConversionCollection& outputConvPhotonCollection) { // instantiate the algorithm for finding the position of the track extrapolation at the Ecal front face - ConversionTrackEcalImpactPoint theEcalImpactPositionFinder(&(*theMF_)); + ConversionTrackEcalImpactPoint theEcalImpactPositionFinder(magneticField_); reco::Conversion::ConversionAlgorithm algo = reco::Conversion::algoByName(algoName_); std::vector t_generalTrk; if (recoverOneTrackCase_) - t_generalTrk = (*theTransientTrackBuilder_).build(generalTrkHandle); - //const CaloGeometry* geometry = theCaloGeom_.product(); + t_generalTrk = transientTrackBuilder_->build(generalTrkHandle); // Loop over SC in the barrel and reconstruct converted photons int myCands = 0; @@ -307,9 +323,8 @@ void ConvertedPhotonProducer::buildCollections( if (aClus->energy() / cosh(aClus->eta()) <= minSCEt_) continue; const reco::CaloCluster* pClus = &(*aClus); - const reco::SuperCluster* sc = dynamic_cast(pClus); - const CaloTowerCollection* hcalTowersColl = hcalTowersHandle.product(); - EgammaTowerIsolation towerIso(hOverEConeSize_, 0., 0., -1, hcalTowersColl); + auto const* sc = dynamic_cast(pClus); + EgammaTowerIsolation towerIso(hOverEConeSize_, 0., 0., -1, &hcalTowers); double HoE = towerIso.getTowerESum(sc) / sc->energy(); if (HoE >= maxHOverE_) continue; @@ -334,9 +349,7 @@ void ConvertedPhotonProducer::buildCollections( if (!allPairs.empty()) { nFound = 0; - for (std::map, reco::CaloClusterPtr>::const_iterator iPair = allPairs.begin(); - iPair != allPairs.end(); - ++iPair) { + for (auto iPair = allPairs.begin(); iPair != allPairs.end(); ++iPair) { scPtrVec.clear(); reco::Vertex theConversionVertex; @@ -354,7 +367,7 @@ void ConvertedPhotonProducer::buildCollections( const std::string metname = "ConvertedPhotons|ConvertedPhotonProducer"; if ((iPair->first).size() > 1) { try { - theVertexFinder_->run(iPair->first, theConversionVertex); + vertexFinder_.run(iPair->first, theConversionVertex); } catch (cms::Exception& e) { //std::cout << " cms::Exception caught in ConvertedPhotonProducer::produce" << "\n" ; @@ -385,8 +398,7 @@ void ConvertedPhotonProducer::buildCollections( ++iTk) { //LogDebug("ConvertedPhotonProducer") << " ConvertedPhotonProducer Transient Tracks in the pair charge " << iTk->charge() << " Num of RecHits " << iTk->recHitsSize() << " inner momentum " << iTk->track().innerMomentum() << "\n"; - const reco::TrackTransientTrack* ttt = - dynamic_cast(iTk->basicTransientTrack()); + auto const* ttt = dynamic_cast(iTk->basicTransientTrack()); reco::TrackRef myTkRef = ttt->persistentTrackRef(); //LogDebug("ConvertedPhotonProducer") << " ConvertedPhotonProducer Ref to Rec Tracks in the pair charge " << myTkRef->charge() << " Num of RecHits " << myTkRef->recHitsSize() << " inner momentum " << myTkRef->innerMomentum() << "\n"; @@ -421,8 +433,7 @@ void ConvertedPhotonProducer::buildCollections( trackPout, like, algo); - // like = theLikelihoodCalc_->calculateLikelihood(newCandidate, es ); - like = theLikelihoodCalc_->calculateLikelihood(newCandidate); + like = likelihoodCalc_.calculateLikelihood(newCandidate); // std::cout << "like = " << like << std::endl; newCandidate.setMVAout(like); outputConvPhotonCollection.push_back(newCandidate); @@ -440,8 +451,7 @@ void ConvertedPhotonProducer::buildCollections( trackPout.clear(); std::vector::const_iterator iTk = (iPair->first).begin(); //std::cout << " ConvertedPhotonProducer Transient Tracks in the pair charge " << iTk->charge() << " Num of RecHits " << iTk->recHitsSize() << " inner momentum " << iTk->track().innerMomentum() << " pt " << sqrt(iTk->track().innerMomentum().perp2()) << "\n"; - const reco::TrackTransientTrack* ttt = - dynamic_cast(iTk->basicTransientTrack()); + auto const* ttt = dynamic_cast(iTk->basicTransientTrack()); reco::TrackRef myTk = ttt->persistentTrackRef(); if (myTk->extra().isNonnull()) { trackInnPos.push_back(toFConverterP(myTk->innerPosition())); @@ -456,12 +466,8 @@ void ConvertedPhotonProducer::buildCollections( float dCot = 999.; float dCotTheta = -999.; reco::TrackRef goodRef; - std::vector::const_iterator iGoodGenTran; - for (std::vector::const_iterator iTran = t_generalTrk.begin(); - iTran != t_generalTrk.end(); - ++iTran) { - const reco::TrackTransientTrack* ttt = - dynamic_cast(iTran->basicTransientTrack()); + for (auto const& tran : t_generalTrk) { + auto const* ttt = dynamic_cast(tran.basicTransientTrack()); reco::TrackRef trRef = ttt->persistentTrackRef(); if (trRef->charge() * myTk->charge() > 0) continue; @@ -475,7 +481,6 @@ void ConvertedPhotonProducer::buildCollections( if (fabs(dCotTheta) < dCot) { dCot = fabs(dCotTheta); goodRef = trRef; - iGoodGenTran = iTran; } } @@ -490,12 +495,9 @@ void ConvertedPhotonProducer::buildCollections( trackPairRef.push_back(goodRef); // std::cout << " ConvertedPhotonProducer adding opposite charge track from generalTrackCollection charge " << goodRef ->charge() << " pt " << sqrt(goodRef->innerMomentum().perp2()) << " trackPairRef size " << trackPairRef.size() << std::endl; //std::cout << " Track Provenenance " << goodRef->algoName() << std::endl; - std::vector mypair; - mypair.push_back(*iTk); - mypair.push_back(*iGoodGenTran); try { - theVertexFinder_->run(iPair->first, theConversionVertex); + vertexFinder_.run(iPair->first, theConversionVertex); } catch (cms::Exception& e) { //std::cout << " cms::Exception caught in ConvertedPhotonProducer::produce" << "\n" ; @@ -506,21 +508,20 @@ void ConvertedPhotonProducer::buildCollections( } } // bool On/Off one track case recovery using generalTracks - double like = -999.; - reco::Conversion newCandidate(scPtrVec, - trackPairRef, - trkPositionAtEcal, - theConversionVertex, - matchingBC, - minAppDist, - trackInnPos, - trackPin, - trackPout, - like, - algo); - like = theLikelihoodCalc_->calculateLikelihood(newCandidate); - newCandidate.setMVAout(like); - outputConvPhotonCollection.push_back(newCandidate); + const double like = -999.; + outputConvPhotonCollection.emplace_back(scPtrVec, + trackPairRef, + trkPositionAtEcal, + theConversionVertex, + matchingBC, + minAppDist, + trackInnPos, + trackPin, + trackPout, + like, + algo); + auto& newCandidate = outputConvPhotonCollection.back(); + newCandidate.setMVAout(likelihoodCalc_.calculateLikelihood(newCandidate)); } // case with only on track: looking in general tracks } @@ -573,7 +574,7 @@ std::vector ConvertedPhotonProducer::solveAmbiguity( std::multimap > convMap; for (unsigned int icp = 0; icp < conversionHandle->size(); icp++) { - reco::ConversionRef cpRef(reco::ConversionRef(conversionHandle, icp)); + reco::ConversionRef cpRef{conversionHandle, icp}; //std::cout << " cpRef " << cpRef->nTracks() << " " << cpRef ->caloCluster()[0]->energy() << std::endl; if (!(scRef.id() == cpRef->caloCluster()[0].id() && scRef.key() == cpRef->caloCluster()[0].key())) @@ -584,14 +585,13 @@ std::vector ConvertedPhotonProducer::solveAmbiguity( if (cpRef->nTracks() < 2) continue; // std::cout << " Like " << like << std::endl; - convMap.insert(std::make_pair(like, cpRef)); + convMap.emplace(like, cpRef); } // std::cout << " convMap size " << convMap.size() << std::endl; - std::multimap::iterator iMap; std::vector bestRefs; - for (iMap = convMap.begin(); iMap != convMap.end(); iMap++) { + for (auto iMap = convMap.begin(); iMap != convMap.end(); iMap++) { // std::cout << " Like list in the map " << iMap->first << " " << (iMap->second)->EoverP() << std::endl; bestRefs.push_back(iMap->second); if (int(bestRefs.size()) == maxNumOfCandidates_) @@ -603,18 +603,17 @@ std::vector ConvertedPhotonProducer::solveAmbiguity( float ConvertedPhotonProducer::calculateMinApproachDistance(const reco::TrackRef& track1, const reco::TrackRef& track2) { - float dist = 9999.; - double x1, x2, y1, y2; double xx_1 = track1->innerPosition().x(), yy_1 = track1->innerPosition().y(), zz_1 = track1->innerPosition().z(); double xx_2 = track2->innerPosition().x(), yy_2 = track2->innerPosition().y(), zz_2 = track2->innerPosition().z(); - double radius1 = track1->innerMomentum().Rho() / (.3 * (theMF_->inTesla(GlobalPoint(xx_1, yy_1, zz_1)).z())) * 100; - double radius2 = track2->innerMomentum().Rho() / (.3 * (theMF_->inTesla(GlobalPoint(xx_2, yy_2, zz_2)).z())) * 100; + double radius1 = + track1->innerMomentum().Rho() / (.3 * (magneticField_->inTesla(GlobalPoint(xx_1, yy_1, zz_1)).z())) * 100; + double radius2 = + track2->innerMomentum().Rho() / (.3 * (magneticField_->inTesla(GlobalPoint(xx_2, yy_2, zz_2)).z())) * 100; getCircleCenter(track1, radius1, x1, y1); getCircleCenter(track2, radius2, x2, y2); - dist = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)) - radius1 - radius2; - return dist; + return std::sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)) - radius1 - radius2; } void ConvertedPhotonProducer::getCircleCenter(const reco::TrackRef& tk, double r, double& x0, double& y0) { diff --git a/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonCoreProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonCoreProducer.cc index 982d96d315abd..23303bcd7d565 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonCoreProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonCoreProducer.cc @@ -1,6 +1,3 @@ -#include -#include -#include /** \class GEDPhotonCoreProducer ** ** @@ -8,108 +5,79 @@ ** ***/ -// Framework -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Utilities/interface/Exception.h" -#include "DataFormats/EgammaReco/interface/ClusterShape.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/ValidHandle.h" #include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" -#include "DataFormats/EgammaCandidates/interface/Conversion.h" -#include "RecoEgamma/EgammaPhotonProducers/interface/GEDPhotonCoreProducer.h" +#include "DataFormats/EgammaCandidates/interface/PhotonCore.h" +#include "DataFormats/EgammaReco/interface/ElectronSeed.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateEGammaExtra.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateEGammaExtraFwd.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/EgammaReco/interface/ElectronSeed.h" -#include "DataFormats/Math/interface/Vector3D.h" -#include "DataFormats/Math/interface/LorentzVector.h" -#include "DataFormats/GeometryVector/interface/GlobalVector.h" -#include "DataFormats/Common/interface/RefToPtr.h" -#include -#include -#include "TLorentzVector.h" -#include "TMath.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" -GEDPhotonCoreProducer::GEDPhotonCoreProducer(const edm::ParameterSet& config) - : conf_(config) +class GEDPhotonCoreProducer : public edm::stream::EDProducer<> { +public: + GEDPhotonCoreProducer(const edm::ParameterSet& ps); -{ - // use onfiguration file to setup input/output collection names - pfEgammaCandidates_ = consumes(conf_.getParameter("pfEgammaCandidates")); - pixelSeedProducer_ = consumes(conf_.getParameter("pixelSeedProducer")); + void produce(edm::Event& evt, const edm::EventSetup& es) override; - GEDPhotonCoreCollection_ = conf_.getParameter("gedPhotonCoreCollection"); +private: + const edm::EDGetTokenT pfEgammaCandidates_; + const edm::EDGetTokenT pixelSeedProducer_; + const edm::EDPutTokenT putToken_; +}; - // Register the product - produces(GEDPhotonCoreCollection_); -} +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(GEDPhotonCoreProducer); -GEDPhotonCoreProducer::~GEDPhotonCoreProducer() {} - -void GEDPhotonCoreProducer::produce(edm::Event& theEvent, const edm::EventSetup& theEventSetup) { - using namespace edm; - // nEvt_++; +GEDPhotonCoreProducer::GEDPhotonCoreProducer(const edm::ParameterSet& config) + : pfEgammaCandidates_{consumes(config.getParameter("pfEgammaCandidates"))}, + pixelSeedProducer_{consumes(config.getParameter("pixelSeedProducer"))}, + putToken_{produces(config.getParameter("gedPhotonCoreCollection"))} {} +void GEDPhotonCoreProducer::produce(edm::Event& event, const edm::EventSetup&) { reco::PhotonCoreCollection outputPhotonCoreCollection; - auto outputPhotonCoreCollection_p = std::make_unique(); // Get the PF refined cluster collection - Handle pfCandidateHandle; - theEvent.getByToken(pfEgammaCandidates_, pfCandidateHandle); - if (!pfCandidateHandle.isValid()) { - edm::LogError("GEDPhotonCoreProducer") << "Error! Can't get the pfEgammaCandidates"; - } + auto pfCandidateHandle = edm::makeValid(event.getHandle(pfEgammaCandidates_)); // Get ElectronPixelSeeds - validPixelSeeds_ = true; - Handle pixelSeedHandle; - reco::ElectronSeedCollection pixelSeeds; - theEvent.getByToken(pixelSeedProducer_, pixelSeedHandle); + bool validPixelSeeds = true; + auto pixelSeedHandle = event.getHandle(pixelSeedProducer_); if (!pixelSeedHandle.isValid()) { - validPixelSeeds_ = false; + validPixelSeeds = false; } - // std::cout << " GEDPhotonCoreProducer::produce input PFcandidate size " << pfCandidateHandle->size() << std::endl; - // Loop over PF candidates and get only photons - for (unsigned int lCand = 0; lCand < pfCandidateHandle->size(); lCand++) { - reco::PFCandidateRef candRef(reco::PFCandidateRef(pfCandidateHandle, lCand)); - + for (auto const& cand : *pfCandidateHandle) { // Retrieve stuff from the pfPhoton - reco::PFCandidateEGammaExtraRef pfPhoRef = candRef->egammaExtraRef(); - reco::SuperClusterRef refinedSC = pfPhoRef->superClusterRef(); - reco::SuperClusterRef boxSC = pfPhoRef->superClusterPFECALRef(); - const reco::ConversionRefVector& doubleLegConv = pfPhoRef->conversionRef(); - const reco::ConversionRefVector& singleLegConv = pfPhoRef->singleLegConversionRef(); - reco::CaloClusterPtr refinedSCPtr = edm::refToPtr(refinedSC); - - // std::cout << "newCandidate doubleLegConv="<assign(outputPhotonCoreCollection.begin(), outputPhotonCoreCollection.end()); - theEvent.put(std::move(outputPhotonCoreCollection_p), GEDPhotonCoreCollection_); + event.emplace(putToken_, std::move(outputPhotonCoreCollection)); } diff --git a/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc index 8c2abb38fc878..2c5c43c737a06 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc @@ -1,37 +1,172 @@ -#include -#include -#include +/** \class GEDPhotonProducer + ** + ** + ** \author Nancy Marinelli, U. of Notre Dame, US + ** + ***/ +#include "CommonTools/Utils/interface/StringToEnumValue.h" +#include "CondFormats/DataRecord/interface/HcalChannelQualityRcd.h" +#include "CondFormats/EcalObjects/interface/EcalFunctionParameters.h" +#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/ValueMap.h" +#include "DataFormats/EgammaCandidates/interface/Conversion.h" +#include "DataFormats/EgammaCandidates/interface/Photon.h" +#include "DataFormats/EgammaCandidates/interface/PhotonCore.h" +#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" +#include "DataFormats/EgammaReco/interface/BasicCluster.h" +#include "DataFormats/EgammaReco/interface/BasicClusterShapeAssociation.h" +#include "DataFormats/EgammaReco/interface/ClusterShape.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" +#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateEGammaExtra.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/Exception.h" #include "FWCore/Utilities/interface/isFinite.h" - -#include "CommonTools/Utils/interface/StringToEnumValue.h" - -#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" #include "Geometry/CaloTopology/interface/CaloTopology.h" -#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "RecoEcal/EgammaCoreTools/interface/EcalClusterFunctionBaseClass.h" +#include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h" +#include "RecoEcal/EgammaCoreTools/interface/EcalTools.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaHadTower.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h" +#include "RecoEgamma/EgammaPhotonAlgos/interface/PhotonEnergyCorrector.h" +#include "RecoEgamma/PhotonIdentification/interface/PhotonIsolationCalculator.h" +#include "RecoEgamma/PhotonIdentification/interface/PhotonMIPHaloTagger.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/EgammaReco/interface/ClusterShape.h" -#include "DataFormats/EgammaCandidates/interface/PhotonCore.h" -#include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateEGammaExtra.h" +class GEDPhotonProducer : public edm::stream::EDProducer<> { +public: + GEDPhotonProducer(const edm::ParameterSet& ps); + + void beginRun(edm::Run const& r, edm::EventSetup const& es) final; + void endRun(edm::Run const&, edm::EventSetup const&) final {} + void produce(edm::Event& evt, const edm::EventSetup& es) override; + +private: + class RecoStepInfo { + public: + enum FlagBits { kOOT = 0x1, kFinal = 0x2 }; + explicit RecoStepInfo(const std::string& recoStep); + + bool isOOT() const { return flags_ & kOOT; } + bool isFinal() const { return flags_ & kFinal; } + + private: + unsigned int flags_; + }; + + void fillPhotonCollection(edm::Event& evt, + edm::EventSetup const& es, + const edm::Handle& photonCoreHandle, + const CaloTopology* topology, + const EcalRecHitCollection* ecalBarrelHits, + const EcalRecHitCollection* ecalEndcapHits, + const EcalRecHitCollection* preshowerHits, + CaloTowerCollection const* hcalTowers, + const reco::VertexCollection& pvVertices, + reco::PhotonCollection& outputCollection, + int& iSC); + + void fillPhotonCollection(edm::Event& evt, + edm::EventSetup const& es, + const edm::Handle& photonHandle, + const edm::Handle pfCandidateHandle, + const edm::Handle pfEGCandidateHandle, + reco::VertexCollection const& pvVertices, + reco::PhotonCollection& outputCollection, + int& iSC, + const edm::Handle>& chargedHadrons, + const edm::Handle>& neutralHadrons, + const edm::Handle>& photons, + const edm::Handle>& chargedHadronsWorstVtx, + const edm::Handle>& chargedHadronsWorstVtxGeomVeto, + const edm::Handle>& chargedHadronsPFPV, + const edm::Handle>& pfEcalClusters, + const edm::Handle>& pfHcalClusters); + + // std::string PhotonCoreCollection_; + std::string photonCollection_; + const edm::InputTag photonProducer_; + + edm::EDGetTokenT photonCoreProducerT_; + edm::EDGetTokenT photonProducerT_; + edm::EDGetTokenT barrelEcalHits_; + edm::EDGetTokenT endcapEcalHits_; + edm::EDGetTokenT preshowerHits_; + edm::EDGetTokenT pfEgammaCandidates_; + edm::EDGetTokenT pfCandidates_; + edm::EDGetTokenT hcalTowers_; + edm::EDGetTokenT vertexProducer_; + //for isolation with map-based veto + edm::EDGetTokenT>> particleBasedIsolationToken; + //photon isolation sums + edm::EDGetTokenT> phoChargedIsolationToken_; + edm::EDGetTokenT> phoNeutralHadronIsolationToken_; + edm::EDGetTokenT> phoPhotonIsolationToken_; + edm::EDGetTokenT> phoChargedWorstVtxIsoToken_; + edm::EDGetTokenT> phoChargedWorstVtxGeomVetoIsoToken_; + edm::EDGetTokenT> phoChargedPFPVIsoToken_; + + edm::EDGetTokenT> phoPFECALClusIsolationToken_; + edm::EDGetTokenT> phoPFHCALClusIsolationToken_; + + const EcalClusterLazyTools::ESGetTokens ecalClusterESGetTokens_; + + std::string valueMapPFCandPhoton_; + + std::unique_ptr photonIsoCalculator_ = nullptr; -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" + //AA + //Flags and severities to be excluded from calculations -#include "RecoEgamma/EgammaPhotonProducers/interface/GEDPhotonProducer.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h" + std::vector flagsexclEB_; + std::vector flagsexclEE_; + std::vector severitiesexclEB_; + std::vector severitiesexclEE_; -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaHadTower.h" -#include "RecoEcal/EgammaCoreTools/interface/EcalTools.h" + double hOverEConeSize_; + double maxHOverE_; + double minSCEt_; + double highEt_; + double minR9Barrel_; + double minR9Endcap_; + bool runMIPTagger_; -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "CondFormats/DataRecord/interface/HcalChannelQualityRcd.h" + RecoStepInfo recoStep_; + + bool usePrimaryVertex_; + + CaloGeometry const* caloGeom_ = nullptr; + + //MIP + std::unique_ptr photonMIPHaloTagger_ = nullptr; + + std::vector preselCutValuesBarrel_; + std::vector preselCutValuesEndcap_; + + std::unique_ptr photonEnergyCorrector_ = nullptr; + std::string candidateP4type_; + + bool checkHcalStatus_; + + const edm::ESGetToken caloTopologyToken_; + const edm::ESGetToken caloGeometryToken_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(GEDPhotonProducer); namespace { inline double ptFast(const double energy, const math::XYZPoint& position, const math::XYZPoint& origin) { @@ -56,20 +191,18 @@ GEDPhotonProducer::RecoStepInfo::RecoStepInfo(const std::string& step) : flags_( } GEDPhotonProducer::GEDPhotonProducer(const edm::ParameterSet& config) - : ecalClusterESGetTokens_{consumesCollector()}, + : photonProducer_{config.getParameter("photonProducer")}, + ecalClusterESGetTokens_{consumesCollector()}, recoStep_(config.getParameter("reconstructionStep")), - conf_(config) { - // use configuration file to setup input/output collection names - // - photonProducer_ = conf_.getParameter("photonProducer"); - + caloTopologyToken_{esConsumes()}, + caloGeometryToken_{esConsumes()} { if (recoStep_.isFinal()) { - photonProducerT_ = consumes(photonProducer_); - pfCandidates_ = consumes(conf_.getParameter("pfCandidates")); + photonProducerT_ = consumes(photonProducer_); + pfCandidates_ = consumes(config.getParameter("pfCandidates")); - const edm::ParameterSet& pfIsolCfg = conf_.getParameter("pfIsolCfg"); + const edm::ParameterSet& pfIsolCfg = config.getParameter("pfIsolCfg"); auto getVMToken = [&pfIsolCfg, this](const std::string& name) { - return consumes>(pfIsolCfg.getParameter(name)); + return consumes(pfIsolCfg.getParameter(name)); }; phoChargedIsolationToken_ = getVMToken("chargedHadronIso"); phoNeutralHadronIsolationToken_ = getVMToken("neutralHadronIso"); @@ -80,155 +213,119 @@ GEDPhotonProducer::GEDPhotonProducer(const edm::ParameterSet& config) //OOT photons in legacy 80X re-miniAOD do not have PF cluster embeded into the reco object //to preserve 80X behaviour - if (conf_.exists("pfECALClusIsolation")) { - phoPFECALClusIsolationToken_ = - consumes>(conf_.getParameter("pfECALClusIsolation")); + if (config.exists("pfECALClusIsolation")) { + phoPFECALClusIsolationToken_ = consumes(config.getParameter("pfECALClusIsolation")); } - if (conf_.exists("pfHCALClusIsolation")) { - phoPFHCALClusIsolationToken_ = - consumes>(conf_.getParameter("pfHCALClusIsolation")); + if (config.exists("pfHCALClusIsolation")) { + phoPFHCALClusIsolationToken_ = consumes(config.getParameter("pfHCALClusIsolation")); } } else { - photonCoreProducerT_ = consumes(photonProducer_); + photonCoreProducerT_ = consumes(photonProducer_); } - auto pfEg = conf_.getParameter("pfEgammaCandidates"); - if (not pfEg.label().empty()) - pfEgammaCandidates_ = consumes(pfEg); - barrelEcalHits_ = consumes(conf_.getParameter("barrelEcalHits")); - endcapEcalHits_ = consumes(conf_.getParameter("endcapEcalHits")); - preshowerHits_ = consumes(conf_.getParameter("preshowerHits")); - vertexProducer_ = consumes(conf_.getParameter("primaryVertexProducer")); - - auto hcTow = conf_.getParameter("hcalTowers"); - if (not hcTow.label().empty()) - hcalTowers_ = consumes(hcTow); + auto pfEg = config.getParameter("pfEgammaCandidates"); + if (not pfEg.label().empty()) { + pfEgammaCandidates_ = consumes(pfEg); + } + barrelEcalHits_ = consumes(config.getParameter("barrelEcalHits")); + endcapEcalHits_ = consumes(config.getParameter("endcapEcalHits")); + preshowerHits_ = consumes(config.getParameter("preshowerHits")); + vertexProducer_ = consumes(config.getParameter("primaryVertexProducer")); + + auto hcTow = config.getParameter("hcalTowers"); + if (not hcTow.label().empty()) { + hcalTowers_ = consumes(hcTow); + } // - photonCollection_ = conf_.getParameter("outputPhotonCollection"); - hOverEConeSize_ = conf_.getParameter("hOverEConeSize"); - highEt_ = conf_.getParameter("highEt"); + photonCollection_ = config.getParameter("outputPhotonCollection"); + hOverEConeSize_ = config.getParameter("hOverEConeSize"); + highEt_ = config.getParameter("highEt"); // R9 value to decide converted/unconverted - minR9Barrel_ = conf_.getParameter("minR9Barrel"); - minR9Endcap_ = conf_.getParameter("minR9Endcap"); - usePrimaryVertex_ = conf_.getParameter("usePrimaryVertex"); - runMIPTagger_ = conf_.getParameter("runMIPTagger"); + minR9Barrel_ = config.getParameter("minR9Barrel"); + minR9Endcap_ = config.getParameter("minR9Endcap"); + usePrimaryVertex_ = config.getParameter("usePrimaryVertex"); + runMIPTagger_ = config.getParameter("runMIPTagger"); candidateP4type_ = config.getParameter("candidateP4type"); valueMapPFCandPhoton_ = config.getParameter("valueMapPhotons"); - edm::ParameterSet posCalcParameters = config.getParameter("posCalcParameters"); - posCalculator_ = PositionCalc(posCalcParameters); - //AA //Flags and Severities to be excluded from photon calculations - const std::vector flagnamesEB = - config.getParameter>("RecHitFlagToBeExcludedEB"); - - const std::vector flagnamesEE = - config.getParameter>("RecHitFlagToBeExcludedEE"); + auto const& flagnamesEB = config.getParameter>("RecHitFlagToBeExcludedEB"); + auto const& flagnamesEE = config.getParameter>("RecHitFlagToBeExcludedEE"); flagsexclEB_ = StringToEnumValue(flagnamesEB); - flagsexclEE_ = StringToEnumValue(flagnamesEE); - const std::vector severitynamesEB = - config.getParameter>("RecHitSeverityToBeExcludedEB"); + auto const& severitynamesEB = config.getParameter>("RecHitSeverityToBeExcludedEB"); + auto const& severitynamesEE = config.getParameter>("RecHitSeverityToBeExcludedEE"); severitiesexclEB_ = StringToEnumValue(severitynamesEB); - - const std::vector severitynamesEE = - config.getParameter>("RecHitSeverityToBeExcludedEE"); - severitiesexclEE_ = StringToEnumValue(severitynamesEE); - thePhotonEnergyCorrector_ = new PhotonEnergyCorrector(conf_, consumesCollector()); + photonEnergyCorrector_ = std::make_unique(config, consumesCollector()); //AA - // - - // Parameters for the position calculation: - // std::map providedParameters; - // providedParameters.insert(std::make_pair("LogWeighted",conf_.getParameter("posCalc_logweight"))); - //providedParameters.insert(std::make_pair("T0_barl",conf_.getParameter("posCalc_t0_barl"))); - //providedParameters.insert(std::make_pair("T0_endc",conf_.getParameter("posCalc_t0_endc"))); - //providedParameters.insert(std::make_pair("T0_endcPresh",conf_.getParameter("posCalc_t0_endcPresh"))); - //providedParameters.insert(std::make_pair("W0",conf_.getParameter("posCalc_w0"))); - //providedParameters.insert(std::make_pair("X0",conf_.getParameter("posCalc_x0"))); - //posCalculator_ = PositionCalc(providedParameters); // cut values for pre-selection - preselCutValuesBarrel_.push_back(conf_.getParameter("minSCEtBarrel")); - preselCutValuesBarrel_.push_back(conf_.getParameter("maxHoverEBarrel")); - preselCutValuesBarrel_.push_back(conf_.getParameter("ecalRecHitSumEtOffsetBarrel")); - preselCutValuesBarrel_.push_back(conf_.getParameter("ecalRecHitSumEtSlopeBarrel")); - preselCutValuesBarrel_.push_back(conf_.getParameter("hcalTowerSumEtOffsetBarrel")); - preselCutValuesBarrel_.push_back(conf_.getParameter("hcalTowerSumEtSlopeBarrel")); - preselCutValuesBarrel_.push_back(conf_.getParameter("nTrackSolidConeBarrel")); - preselCutValuesBarrel_.push_back(conf_.getParameter("nTrackHollowConeBarrel")); - preselCutValuesBarrel_.push_back(conf_.getParameter("trackPtSumSolidConeBarrel")); - preselCutValuesBarrel_.push_back(conf_.getParameter("trackPtSumHollowConeBarrel")); - preselCutValuesBarrel_.push_back(conf_.getParameter("sigmaIetaIetaCutBarrel")); + preselCutValuesBarrel_ = {config.getParameter("minSCEtBarrel"), + config.getParameter("maxHoverEBarrel"), + config.getParameter("ecalRecHitSumEtOffsetBarrel"), + config.getParameter("ecalRecHitSumEtSlopeBarrel"), + config.getParameter("hcalTowerSumEtOffsetBarrel"), + config.getParameter("hcalTowerSumEtSlopeBarrel"), + config.getParameter("nTrackSolidConeBarrel"), + config.getParameter("nTrackHollowConeBarrel"), + config.getParameter("trackPtSumSolidConeBarrel"), + config.getParameter("trackPtSumHollowConeBarrel"), + config.getParameter("sigmaIetaIetaCutBarrel")}; // - preselCutValuesEndcap_.push_back(conf_.getParameter("minSCEtEndcap")); - preselCutValuesEndcap_.push_back(conf_.getParameter("maxHoverEEndcap")); - preselCutValuesEndcap_.push_back(conf_.getParameter("ecalRecHitSumEtOffsetEndcap")); - preselCutValuesEndcap_.push_back(conf_.getParameter("ecalRecHitSumEtSlopeEndcap")); - preselCutValuesEndcap_.push_back(conf_.getParameter("hcalTowerSumEtOffsetEndcap")); - preselCutValuesEndcap_.push_back(conf_.getParameter("hcalTowerSumEtSlopeEndcap")); - preselCutValuesEndcap_.push_back(conf_.getParameter("nTrackSolidConeEndcap")); - preselCutValuesEndcap_.push_back(conf_.getParameter("nTrackHollowConeEndcap")); - preselCutValuesEndcap_.push_back(conf_.getParameter("trackPtSumSolidConeEndcap")); - preselCutValuesEndcap_.push_back(conf_.getParameter("trackPtSumHollowConeEndcap")); - preselCutValuesEndcap_.push_back(conf_.getParameter("sigmaIetaIetaCutEndcap")); + preselCutValuesEndcap_ = {config.getParameter("minSCEtEndcap"), + config.getParameter("maxHoverEEndcap"), + config.getParameter("ecalRecHitSumEtOffsetEndcap"), + config.getParameter("ecalRecHitSumEtSlopeEndcap"), + config.getParameter("hcalTowerSumEtOffsetEndcap"), + config.getParameter("hcalTowerSumEtSlopeEndcap"), + config.getParameter("nTrackSolidConeEndcap"), + config.getParameter("nTrackHollowConeEndcap"), + config.getParameter("trackPtSumSolidConeEndcap"), + config.getParameter("trackPtSumHollowConeEndcap"), + config.getParameter("sigmaIetaIetaCutEndcap")}; // //moved from beginRun to here, I dont see how this could cause harm as its just reading in the exactly same parameters each run if (!recoStep_.isFinal()) { - thePhotonIsolationCalculator_ = new PhotonIsolationCalculator(); - edm::ParameterSet isolationSumsCalculatorSet = conf_.getParameter("isolationSumsCalculatorSet"); - thePhotonIsolationCalculator_->setup(isolationSumsCalculatorSet, - flagsexclEB_, - flagsexclEE_, - severitiesexclEB_, - severitiesexclEE_, - consumesCollector()); - thePhotonMIPHaloTagger_ = new PhotonMIPHaloTagger(); - edm::ParameterSet mipVariableSet = conf_.getParameter("mipVariableSet"); - thePhotonMIPHaloTagger_->setup(mipVariableSet, consumesCollector()); - - } else { - thePhotonIsolationCalculator_ = nullptr; - thePhotonMIPHaloTagger_ = nullptr; + photonIsoCalculator_ = std::make_unique(); + edm::ParameterSet isolationSumsCalculatorSet = config.getParameter("isolationSumsCalculatorSet"); + photonIsoCalculator_->setup(isolationSumsCalculatorSet, + flagsexclEB_, + flagsexclEE_, + severitiesexclEB_, + severitiesexclEE_, + consumesCollector()); + photonMIPHaloTagger_ = std::make_unique(); + edm::ParameterSet mipVariableSet = config.getParameter("mipVariableSet"); + photonMIPHaloTagger_->setup(mipVariableSet, consumesCollector()); } - checkHcalStatus_ = conf_.getParameter("checkHcalStatus"); + checkHcalStatus_ = config.getParameter("checkHcalStatus"); // Register the product produces(photonCollection_); - if (not pfEgammaCandidates_.isUninitialized()) + if (not pfEgammaCandidates_.isUninitialized()) { produces>(valueMapPFCandPhoton_); + } } -GEDPhotonProducer::~GEDPhotonProducer() { - delete thePhotonEnergyCorrector_; - delete thePhotonIsolationCalculator_; - delete thePhotonMIPHaloTagger_; - //delete energyCorrectionF; -} - -void GEDPhotonProducer::beginRun(edm::Run const& r, edm::EventSetup const& theEventSetup) { +void GEDPhotonProducer::beginRun(edm::Run const& r, edm::EventSetup const& eventSetup) { if (!recoStep_.isFinal()) { - thePhotonEnergyCorrector_->init(theEventSetup); + photonEnergyCorrector_->init(eventSetup); } } -void GEDPhotonProducer::endRun(edm::Run const& r, edm::EventSetup const& theEventSetup) {} - -void GEDPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& theEventSetup) { +void GEDPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& eventSetup) { using namespace edm; - // nEvt_++; - reco::PhotonCollection outputPhotonCollection; auto outputPhotonCollection_p = std::make_unique(); edm::ValueMap pfEGCandToPhotonMap; @@ -282,32 +379,9 @@ void GEDPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& the } // Get EcalRecHits - bool validEcalRecHits = true; - Handle barrelHitHandle; - const EcalRecHitCollection dummyEB; - theEvent.getByToken(barrelEcalHits_, barrelHitHandle); - if (!barrelHitHandle.isValid()) { - throw cms::Exception("GEDPhotonProducer") << "Error! Can't get the barrelEcalHits"; - } - const EcalRecHitCollection& barrelRecHits(validEcalRecHits ? *(barrelHitHandle.product()) : dummyEB); - - Handle endcapHitHandle; - theEvent.getByToken(endcapEcalHits_, endcapHitHandle); - const EcalRecHitCollection dummyEE; - if (!endcapHitHandle.isValid()) { - throw cms::Exception("GEDPhotonProducer") << "Error! Can't get the endcapEcalHits"; - } - const EcalRecHitCollection& endcapRecHits(validEcalRecHits ? *(endcapHitHandle.product()) : dummyEE); - - bool validPreshowerRecHits = true; - Handle preshowerHitHandle; - theEvent.getByToken(preshowerHits_, preshowerHitHandle); - EcalRecHitCollection preshowerRecHits; - if (!preshowerHitHandle.isValid()) { - throw cms::Exception("GEDPhotonProducer") << "Error! Can't get the preshowerEcalHits"; - } - if (validPreshowerRecHits) - preshowerRecHits = *(preshowerHitHandle.product()); + auto const& barrelRecHits = theEvent.get(barrelEcalHits_); + auto const& endcapRecHits = theEvent.get(endcapEcalHits_); + auto const& preshowerRecHits = theEvent.get(preshowerHits_); Handle pfEGCandidateHandle; // Get the PF refined cluster collection @@ -329,80 +403,53 @@ void GEDPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& the } } - //AA - //Get the severity level object - edm::ESHandle sevLv; - theEventSetup.get().get(sevLv); - // - // get Hcal towers collection - CaloTowerCollection const* hcalTowers = nullptr; - if (not hcalTowers_.isUninitialized()) { - Handle hcalTowersHandle; - theEvent.getByToken(hcalTowers_, hcalTowersHandle); - hcalTowers = &(*hcalTowersHandle); - } + CaloTowerCollection const* hcalTowers = hcalTowers_.isUninitialized() ? nullptr : &theEvent.get(hcalTowers_); // get the geometry from the event setup: - theEventSetup.get().get(theCaloGeom_); + caloGeom_ = &eventSetup.getData(caloGeometryToken_); - // - // update energy correction function - // energyCorrectionF->init(theEventSetup); - - edm::ESHandle pTopology; - theEventSetup.get().get(theCaloTopo_); - const CaloTopology* topology = theCaloTopo_.product(); + auto const& topology = eventSetup.getData(caloTopologyToken_); // Get the primary event vertex - Handle vertexHandle; const reco::VertexCollection dummyVC; - bool validVertex = true; - if (usePrimaryVertex_) { - theEvent.getByToken(vertexProducer_, vertexHandle); - if (!vertexHandle.isValid()) { - throw cms::Exception("GEDPhotonProducer") << "Error! Can't get the product primary Vertex Collection"; - } - } - const reco::VertexCollection& vertexCollection(usePrimaryVertex_ && validVertex ? *(vertexHandle.product()) - : dummyVC); + auto const& vertexCollection{usePrimaryVertex_ ? theEvent.get(vertexProducer_) : dummyVC}; // math::XYZPoint vtx(0.,0.,0.); //if (vertexCollection.size()>0) vtx = vertexCollection.begin()->position(); // get the regression calculator ready - thePhotonEnergyCorrector_->init(theEventSetup); - if (thePhotonEnergyCorrector_->gedRegression()) { - thePhotonEnergyCorrector_->gedRegression()->setEvent(theEvent); - thePhotonEnergyCorrector_->gedRegression()->setEventContent(theEventSetup); + photonEnergyCorrector_->init(eventSetup); + if (photonEnergyCorrector_->gedRegression()) { + photonEnergyCorrector_->gedRegression()->setEvent(theEvent); + photonEnergyCorrector_->gedRegression()->setEventContent(eventSetup); } int iSC = 0; // index in photon collection // Loop over barrel and endcap SC collections and fill the photon collection if (validPhotonCoreHandle) fillPhotonCollection(theEvent, - theEventSetup, + eventSetup, photonCoreHandle, - topology, + &topology, &barrelRecHits, &endcapRecHits, &preshowerRecHits, hcalTowers, //vtx, vertexCollection, - outputPhotonCollection, + *outputPhotonCollection_p, iSC); iSC = 0; if (validPhotonHandle && recoStep_.isFinal()) fillPhotonCollection(theEvent, - theEventSetup, + eventSetup, photonHandle, pfCandidateHandle, pfEGCandidateHandle, - pfEGCandToPhotonMap, - vertexHandle, - outputPhotonCollection, + theEvent.get(vertexProducer_), + *outputPhotonCollection_p, iSC, phoChargedIsolationMap, phoNeutralHadronIsolationMap, @@ -415,9 +462,7 @@ void GEDPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& the // put the product in the event edm::LogInfo("GEDPhotonProducer") << " Put in the event " << iSC << " Photon Candidates \n"; - outputPhotonCollection_p->assign(outputPhotonCollection.begin(), outputPhotonCollection.end()); - const edm::OrphanHandle photonOrphHandle = - theEvent.put(std::move(outputPhotonCollection_p), photonCollection_); + const auto photonOrphHandle = theEvent.put(std::move(outputPhotonCollection_p), photonCollection_); if (!recoStep_.isFinal() && not pfEgammaCandidates_.isUninitialized()) { //// Define the value map which associate to each Egamma-unbiassaed candidate (key-ref) the corresponding PhotonRef @@ -456,7 +501,6 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, const reco::VertexCollection& vertexCollection, reco::PhotonCollection& outputPhotonCollection, int& iSC) { - const CaloGeometry* geometry = theCaloGeom_.product(); const EcalRecHitCollection* hits = nullptr; std::vector preselCutValues; std::vector flags_, severitiesexcl_; @@ -493,7 +537,7 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, // SC energy preselection if (parentSCRef.isNonnull() && - ptFast(parentSCRef->energy(), parentSCRef->position(), math::XYZPoint(0, 0, 0)) <= preselCutValues[0]) + ptFast(parentSCRef->energy(), parentSCRef->position(), {0, 0, 0}) <= preselCutValues[0]) continue; // calculate HoE @@ -532,39 +576,34 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, // std::cout << " GEDPhotonProducer calculation of HoE with towers in a cone " << HoE1 << " " << HoE2 << std::endl; //std::cout << " GEDPhotonProducer calcualtion of HoE with towers behind the BCs " << hcalDepth1OverEcalBc << " " << hcalDepth2OverEcalBc << std::endl; - float maxXtal = (hits != nullptr ? EcalClusterTools::eMax(*(scRef->seed()), &(*hits)) : 0.f); + float maxXtal = (hits != nullptr ? EcalClusterTools::eMax(*(scRef->seed()), hits) : 0.f); //AA //Change these to consider severity level of hits - float e1x5 = (hits != nullptr ? EcalClusterTools::e1x5(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - float e2x5 = (hits != nullptr ? EcalClusterTools::e2x5Max(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - float e3x3 = (hits != nullptr ? EcalClusterTools::e3x3(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - float e5x5 = (hits != nullptr ? EcalClusterTools::e5x5(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); + float e1x5 = (hits != nullptr ? EcalClusterTools::e1x5(*(scRef->seed()), hits, topology) : 0.f); + float e2x5 = (hits != nullptr ? EcalClusterTools::e2x5Max(*(scRef->seed()), hits, topology) : 0.f); + float e3x3 = (hits != nullptr ? EcalClusterTools::e3x3(*(scRef->seed()), hits, topology) : 0.f); + float e5x5 = (hits != nullptr ? EcalClusterTools::e5x5(*(scRef->seed()), hits, topology) : 0.f); std::vector cov = - (hits != nullptr ? EcalClusterTools::covariances(*(scRef->seed()), &(*hits), &(*topology), geometry) - : std::vector({0.f, 0.f, 0.f})); - std::vector locCov = - (hits != nullptr ? EcalClusterTools::localCovariances(*(scRef->seed()), &(*hits), &(*topology)) + (hits != nullptr ? EcalClusterTools::covariances(*(scRef->seed()), hits, topology, caloGeom_) : std::vector({0.f, 0.f, 0.f})); + std::vector locCov = (hits != nullptr ? EcalClusterTools::localCovariances(*(scRef->seed()), hits, topology) + : std::vector({0.f, 0.f, 0.f})); - float sigmaEtaEta = sqrt(cov[0]); - float sigmaIetaIeta = sqrt(locCov[0]); + float sigmaEtaEta = std::sqrt(cov[0]); + float sigmaIetaIeta = std::sqrt(locCov[0]); - float full5x5_maxXtal = (hits != nullptr ? noZS::EcalClusterTools::eMax(*(scRef->seed()), &(*hits)) : 0.f); + float full5x5_maxXtal = (hits != nullptr ? noZS::EcalClusterTools::eMax(*(scRef->seed()), hits) : 0.f); //AA //Change these to consider severity level of hits - float full5x5_e1x5 = - (hits != nullptr ? noZS::EcalClusterTools::e1x5(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - float full5x5_e2x5 = - (hits != nullptr ? noZS::EcalClusterTools::e2x5Max(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - float full5x5_e3x3 = - (hits != nullptr ? noZS::EcalClusterTools::e3x3(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - float full5x5_e5x5 = - (hits != nullptr ? noZS::EcalClusterTools::e5x5(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); + float full5x5_e1x5 = (hits != nullptr ? noZS::EcalClusterTools::e1x5(*(scRef->seed()), hits, topology) : 0.f); + float full5x5_e2x5 = (hits != nullptr ? noZS::EcalClusterTools::e2x5Max(*(scRef->seed()), hits, topology) : 0.f); + float full5x5_e3x3 = (hits != nullptr ? noZS::EcalClusterTools::e3x3(*(scRef->seed()), hits, topology) : 0.f); + float full5x5_e5x5 = (hits != nullptr ? noZS::EcalClusterTools::e5x5(*(scRef->seed()), hits, topology) : 0.f); std::vector full5x5_cov = - (hits != nullptr ? noZS::EcalClusterTools::covariances(*(scRef->seed()), &(*hits), &(*topology), geometry) + (hits != nullptr ? noZS::EcalClusterTools::covariances(*(scRef->seed()), hits, topology, caloGeom_) : std::vector({0.f, 0.f, 0.f})); std::vector full5x5_locCov = - (hits != nullptr ? noZS::EcalClusterTools::localCovariances(*(scRef->seed()), &(*hits), &(*topology)) + (hits != nullptr ? noZS::EcalClusterTools::localCovariances(*(scRef->seed()), hits, topology) : std::vector({0.f, 0.f, 0.f})); float full5x5_sigmaEtaEta = sqrt(full5x5_cov[0]); @@ -594,7 +633,7 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, reco::Photon::FiducialFlags fiducialFlags; reco::Photon::IsolationVariables isolVarR03, isolVarR04; if (!EcalTools::isHGCalDet(thedet)) { - thePhotonIsolationCalculator_->calculate(&newCandidate, evt, es, fiducialFlags, isolVarR04, isolVarR03); + photonIsoCalculator_->calculate(&newCandidate, evt, es, fiducialFlags, isolVarR04, isolVarR03); } newCandidate.setFiducialVolumeFlags(fiducialFlags); newCandidate.setIsolationVariables(isolVarR04, isolVarR03); @@ -619,21 +658,18 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, const float sep = locCov[1]; showerShape.sigmaIetaIphi = sep; showerShape.sigmaIphiIphi = spp; - showerShape.e2nd = (hits != nullptr ? EcalClusterTools::e2nd(*(scRef->seed()), &(*hits)) : 0.f); - showerShape.eTop = (hits != nullptr ? EcalClusterTools::eTop(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - showerShape.eLeft = (hits != nullptr ? EcalClusterTools::eLeft(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - showerShape.eRight = (hits != nullptr ? EcalClusterTools::eRight(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - showerShape.eBottom = (hits != nullptr ? EcalClusterTools::eBottom(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - showerShape.e1x3 = (hits != nullptr ? EcalClusterTools::e1x3(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - showerShape.e2x2 = (hits != nullptr ? EcalClusterTools::e2x2(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - showerShape.e2x5Max = (hits != nullptr ? EcalClusterTools::e2x5Max(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - showerShape.e2x5Left = - (hits != nullptr ? EcalClusterTools::e2x5Left(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - showerShape.e2x5Right = - (hits != nullptr ? EcalClusterTools::e2x5Right(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - showerShape.e2x5Top = (hits != nullptr ? EcalClusterTools::e2x5Top(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - showerShape.e2x5Bottom = - (hits != nullptr ? EcalClusterTools::e2x5Bottom(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); + showerShape.e2nd = (hits != nullptr ? EcalClusterTools::e2nd(*(scRef->seed()), hits) : 0.f); + showerShape.eTop = (hits != nullptr ? EcalClusterTools::eTop(*(scRef->seed()), hits, topology) : 0.f); + showerShape.eLeft = (hits != nullptr ? EcalClusterTools::eLeft(*(scRef->seed()), hits, topology) : 0.f); + showerShape.eRight = (hits != nullptr ? EcalClusterTools::eRight(*(scRef->seed()), hits, topology) : 0.f); + showerShape.eBottom = (hits != nullptr ? EcalClusterTools::eBottom(*(scRef->seed()), hits, topology) : 0.f); + showerShape.e1x3 = (hits != nullptr ? EcalClusterTools::e1x3(*(scRef->seed()), hits, topology) : 0.f); + showerShape.e2x2 = (hits != nullptr ? EcalClusterTools::e2x2(*(scRef->seed()), hits, topology) : 0.f); + showerShape.e2x5Max = (hits != nullptr ? EcalClusterTools::e2x5Max(*(scRef->seed()), hits, topology) : 0.f); + showerShape.e2x5Left = (hits != nullptr ? EcalClusterTools::e2x5Left(*(scRef->seed()), hits, topology) : 0.f); + showerShape.e2x5Right = (hits != nullptr ? EcalClusterTools::e2x5Right(*(scRef->seed()), hits, topology) : 0.f); + showerShape.e2x5Top = (hits != nullptr ? EcalClusterTools::e2x5Top(*(scRef->seed()), hits, topology) : 0.f); + showerShape.e2x5Bottom = (hits != nullptr ? EcalClusterTools::e2x5Bottom(*(scRef->seed()), hits, topology) : 0.f); if (hits) { Cluster2ndMoments clus2ndMoments = EcalClusterTools::cluster2ndMoments(*(scRef->seed()), *hits); showerShape.smMajor = clus2ndMoments.sMaj; @@ -652,14 +688,13 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, showerShape.effSigmaRR = sigmaRR; newCandidate.setShowerShapeVariables(showerShape); - reco::Photon::SaturationInfo saturationInfo; const reco::CaloCluster& seedCluster = *(scRef->seed()); DetId seedXtalId = seedCluster.seed(); int nSaturatedXtals = 0; bool isSeedSaturated = false; if (hits != nullptr) { const auto hitsAndFractions = scRef->hitsAndFractions(); - for (auto&& hitFractionPair : hitsAndFractions) { + for (auto const& hitFractionPair : hitsAndFractions) { auto&& ecalRecHit = hits->find(hitFractionPair.first); if (ecalRecHit == hits->end()) continue; @@ -670,6 +705,7 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, } } } + reco::Photon::SaturationInfo saturationInfo; saturationInfo.nSaturatedXtals = nSaturatedXtals; saturationInfo.isSeedSaturated = isSeedSaturated; newCandidate.setSaturationInfo(saturationInfo); @@ -684,33 +720,30 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, full5x5_showerShape.sigmaEtaEta = full5x5_sigmaEtaEta; full5x5_showerShape.sigmaIetaIeta = full5x5_sigmaIetaIeta; /// fill extra full5x5 shower shapes - const float full5x5_spp = (!edm::isFinite(full5x5_locCov[2]) ? 0. : sqrt(full5x5_locCov[2])); + const float full5x5_spp = (!edm::isFinite(full5x5_locCov[2]) ? 0. : std::sqrt(full5x5_locCov[2])); const float full5x5_sep = full5x5_locCov[1]; full5x5_showerShape.sigmaIetaIphi = full5x5_sep; full5x5_showerShape.sigmaIphiIphi = full5x5_spp; - full5x5_showerShape.e2nd = (hits != nullptr ? noZS::EcalClusterTools::e2nd(*(scRef->seed()), &(*hits)) : 0.f); - full5x5_showerShape.eTop = - (hits != nullptr ? noZS::EcalClusterTools::eTop(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); + full5x5_showerShape.e2nd = (hits != nullptr ? noZS::EcalClusterTools::e2nd(*(scRef->seed()), hits) : 0.f); + full5x5_showerShape.eTop = (hits != nullptr ? noZS::EcalClusterTools::eTop(*(scRef->seed()), hits, topology) : 0.f); full5x5_showerShape.eLeft = - (hits != nullptr ? noZS::EcalClusterTools::eLeft(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); + (hits != nullptr ? noZS::EcalClusterTools::eLeft(*(scRef->seed()), hits, topology) : 0.f); full5x5_showerShape.eRight = - (hits != nullptr ? noZS::EcalClusterTools::eRight(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); + (hits != nullptr ? noZS::EcalClusterTools::eRight(*(scRef->seed()), hits, topology) : 0.f); full5x5_showerShape.eBottom = - (hits != nullptr ? noZS::EcalClusterTools::eBottom(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - full5x5_showerShape.e1x3 = - (hits != nullptr ? noZS::EcalClusterTools::e1x3(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); - full5x5_showerShape.e2x2 = - (hits != nullptr ? noZS::EcalClusterTools::e2x2(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); + (hits != nullptr ? noZS::EcalClusterTools::eBottom(*(scRef->seed()), hits, topology) : 0.f); + full5x5_showerShape.e1x3 = (hits != nullptr ? noZS::EcalClusterTools::e1x3(*(scRef->seed()), hits, topology) : 0.f); + full5x5_showerShape.e2x2 = (hits != nullptr ? noZS::EcalClusterTools::e2x2(*(scRef->seed()), hits, topology) : 0.f); full5x5_showerShape.e2x5Max = - (hits != nullptr ? noZS::EcalClusterTools::e2x5Max(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); + (hits != nullptr ? noZS::EcalClusterTools::e2x5Max(*(scRef->seed()), hits, topology) : 0.f); full5x5_showerShape.e2x5Left = - (hits != nullptr ? noZS::EcalClusterTools::e2x5Left(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); + (hits != nullptr ? noZS::EcalClusterTools::e2x5Left(*(scRef->seed()), hits, topology) : 0.f); full5x5_showerShape.e2x5Right = - (hits != nullptr ? noZS::EcalClusterTools::e2x5Right(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); + (hits != nullptr ? noZS::EcalClusterTools::e2x5Right(*(scRef->seed()), hits, topology) : 0.f); full5x5_showerShape.e2x5Top = - (hits != nullptr ? noZS::EcalClusterTools::e2x5Top(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); + (hits != nullptr ? noZS::EcalClusterTools::e2x5Top(*(scRef->seed()), hits, topology) : 0.f); full5x5_showerShape.e2x5Bottom = - (hits != nullptr ? noZS::EcalClusterTools::e2x5Bottom(*(scRef->seed()), &(*hits), &(*topology)) : 0.f); + (hits != nullptr ? noZS::EcalClusterTools::e2x5Bottom(*(scRef->seed()), hits, topology) : 0.f); if (hits) { Cluster2ndMoments clus2ndMoments = noZS::EcalClusterTools::cluster2ndMoments(*(scRef->seed()), *hits); full5x5_showerShape.smMajor = clus2ndMoments.sMaj; @@ -730,7 +763,7 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, // Photon candidate takes by default (set in photons_cfi.py) // a 4-momentum derived from the ecal photon-specific corrections. if (!EcalTools::isHGCalDet(thedet)) { - thePhotonEnergyCorrector_->calculate(evt, newCandidate, subdet, vertexCollection, es); + photonEnergyCorrector_->calculate(evt, newCandidate, subdet, vertexCollection, es); if (candidateP4type_ == "fromEcalEnergy") { newCandidate.setP4(newCandidate.p4(reco::Photon::ecal_photons)); newCandidate.setCandidateP4type(reco::Photon::ecal_photons); @@ -763,7 +796,7 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, // fill MIP Vairables for Halo: Block for MIP are filled from PhotonMIPHaloTagger reco::Photon::MIPVariables mipVar; if (subdet == EcalBarrel && runMIPTagger_) { - thePhotonMIPHaloTagger_->MIPcalculate(&newCandidate, evt, es, mipVar); + photonMIPHaloTagger_->MIPcalculate(&newCandidate, evt, es, mipVar); newCandidate.setMIPVariables(mipVar); } @@ -798,8 +831,7 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, const edm::Handle& photonHandle, const edm::Handle pfCandidateHandle, const edm::Handle pfEGCandidateHandle, - edm::ValueMap pfEGCandToPhotonMap, - edm::Handle& vertexHandle, + reco::VertexCollection const& vertexCollection, reco::PhotonCollection& outputPhotonCollection, int& iSC, const edm::Handle>& chargedHadrons, @@ -831,7 +863,7 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, // SC energy preselection if (parentSCRef.isNonnull() && - ptFast(parentSCRef->energy(), parentSCRef->position(), math::XYZPoint(0, 0, 0)) <= preselCutValues[0]) + ptFast(parentSCRef->energy(), parentSCRef->position(), {0, 0, 0}) <= preselCutValues[0]) continue; reco::Photon newCandidate(*phoRef); iSC++; @@ -853,21 +885,14 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, } //OOT photons in legacy 80X reminiAOD workflow dont have pf cluster isolation embeded into them at this stage - if (!phoPFECALClusIsolationToken_.isUninitialized()) { - pfIso.sumEcalClusterEt = (*pfEcalClusters)[photonPtr]; - } else - pfIso.sumEcalClusterEt = 0.; - - if (!phoPFHCALClusIsolationToken_.isUninitialized()) { - pfIso.sumHcalClusterEt = (*pfHcalClusters)[photonPtr]; - } else - pfIso.sumHcalClusterEt = 0.; + pfIso.sumEcalClusterEt = !phoPFECALClusIsolationToken_.isUninitialized() ? (*pfEcalClusters)[photonPtr] : 0.; + pfIso.sumHcalClusterEt = !phoPFHCALClusIsolationToken_.isUninitialized() ? (*pfHcalClusters)[photonPtr] : 0.; newCandidate.setPflowIsolationVariables(pfIso); newCandidate.setPflowIDVariables(pfID); // do the regression - thePhotonEnergyCorrector_->calculate(evt, newCandidate, subdet, *vertexHandle, es); + photonEnergyCorrector_->calculate(evt, newCandidate, subdet, vertexCollection, es); if (candidateP4type_ == "fromEcalEnergy") { newCandidate.setP4(newCandidate.p4(reco::Photon::ecal_photons)); newCandidate.setCandidateP4type(reco::Photon::ecal_photons); diff --git a/RecoEgamma/EgammaPhotonProducers/src/PhotonCoreProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/PhotonCoreProducer.cc index aaef9ef30a4d3..3439226a443cd 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/PhotonCoreProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/PhotonCoreProducer.cc @@ -1,19 +1,64 @@ -#include -#include -#include - -// Framework +/** \class PhotonCoreProducer + ** + ** + ** \author Nancy Marinelli, U. of Notre Dame, US + ** + ***/ + +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/EgammaCandidates/interface/Conversion.h" +#include "DataFormats/EgammaCandidates/interface/Photon.h" +#include "DataFormats/EgammaCandidates/interface/PhotonCore.h" +#include "DataFormats/EgammaReco/interface/BasicCluster.h" +#include "DataFormats/EgammaReco/interface/BasicClusterShapeAssociation.h" +#include "DataFormats/EgammaReco/interface/ClusterShape.h" +#include "DataFormats/EgammaReco/interface/ElectronSeed.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/Exception.h" -#include "DataFormats/EgammaReco/interface/ClusterShape.h" -#include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" -#include "DataFormats/EgammaCandidates/interface/Conversion.h" -#include "DataFormats/EgammaReco/interface/ElectronSeed.h" -#include "RecoCaloTools/Selectors/interface/CaloConeSelector.h" -#include "RecoEgamma/EgammaPhotonProducers/interface/PhotonCoreProducer.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h" +#include + +// PhotonCoreProducer inherits from EDProducer, so it can be a module: +class PhotonCoreProducer : public edm::stream::EDProducer<> { +public: + PhotonCoreProducer(const edm::ParameterSet& ps); + ~PhotonCoreProducer() override; + + void produce(edm::Event& evt, const edm::EventSetup& es) override; + +private: + void fillPhotonCollection(edm::Event& evt, + edm::EventSetup const& es, + const edm::Handle& scHandle, + const edm::Handle& conversionHandle, + const edm::Handle& pixelSeeds, + reco::PhotonCoreCollection& outputCollection, + int& iSC); + + reco::ConversionRef solveAmbiguity(const edm::Handle& conversionHandle, + reco::SuperClusterRef& sc); + + std::string PhotonCoreCollection_; + edm::EDGetTokenT scHybridBarrelProducer_; + edm::EDGetTokenT scIslandEndcapProducer_; + edm::EDGetTokenT conversionProducer_; + edm::EDGetTokenT pixelSeedProducer_; + + double minSCEt_; + bool validConversions_; + edm::ParameterSet conf_; + bool validPixelSeeds_; + bool risolveAmbiguity_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(PhotonCoreProducer); PhotonCoreProducer::PhotonCoreProducer(const edm::ParameterSet& config) : conf_(config) diff --git a/RecoEgamma/EgammaPhotonProducers/src/PhotonProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/PhotonProducer.cc index b1949ced9411e..6faf1cfc59efb 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/PhotonProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/PhotonProducer.cc @@ -1,34 +1,112 @@ -#include -#include +/** \class PhotonProducer + ** + ** + ** \author Nancy Marinelli, U. of Notre Dame, US + ** + ***/ -// Framework +#include "CommonTools/Utils/interface/StringToEnumValue.h" +#include "CondFormats/EcalObjects/interface/EcalFunctionParameters.h" +#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/EgammaCandidates/interface/Conversion.h" +#include "DataFormats/EgammaCandidates/interface/Photon.h" +#include "DataFormats/EgammaCandidates/interface/PhotonCore.h" +#include "DataFormats/EgammaReco/interface/BasicCluster.h" +#include "DataFormats/EgammaReco/interface/BasicClusterShapeAssociation.h" +#include "DataFormats/EgammaReco/interface/ClusterShape.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/Exception.h" - -#include "CommonTools/Utils/interface/StringToEnumValue.h" - -#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" #include "Geometry/CaloTopology/interface/CaloTopology.h" -#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "RecoCaloTools/Selectors/interface/CaloConeSelector.h" +#include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h" +#include "RecoEcal/EgammaCoreTools/interface/PositionCalc.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaHadTower.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h" +#include "RecoEgamma/EgammaPhotonAlgos/interface/PhotonEnergyCorrector.h" +#include "RecoEgamma/PhotonIdentification/interface/PhotonIsolationCalculator.h" +#include "RecoEgamma/PhotonIdentification/interface/PhotonMIPHaloTagger.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/EgammaReco/interface/ClusterShape.h" -#include "DataFormats/EgammaCandidates/interface/PhotonCore.h" -#include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/EgammaCandidates/interface/Conversion.h" +#include -#include "DataFormats/EgammaReco/interface/ElectronSeed.h" -#include "RecoCaloTools/Selectors/interface/CaloConeSelector.h" +// PhotonProducer inherits from EDProducer, so it can be a module: +class PhotonProducer : public edm::stream::EDProducer<> { +public: + PhotonProducer(const edm::ParameterSet& ps); + + void produce(edm::Event& evt, const edm::EventSetup& es) override; + +private: + void fillPhotonCollection(edm::Event& evt, + edm::EventSetup const& es, + const edm::Handle& photonCoreHandle, + const CaloTopology* topology, + const EcalRecHitCollection* ecalBarrelHits, + const EcalRecHitCollection* ecalEndcapHits, + CaloTowerCollection const& hcalTowers, + reco::VertexCollection& pvVertices, + reco::PhotonCollection& outputCollection, + int& iSC, + const EcalSeverityLevelAlgo* sevLv); + + // std::string PhotonCoreCollection_; + std::string PhotonCollection_; + edm::EDGetTokenT photonCoreProducer_; + edm::EDGetTokenT barrelEcalHits_; + edm::EDGetTokenT endcapEcalHits_; + edm::EDGetTokenT hcalTowers_; + edm::EDGetTokenT vertexProducer_; -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" + //AA + //Flags and severities to be excluded from calculations -#include "RecoEgamma/EgammaPhotonProducers/interface/PhotonProducer.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaHadTower.h" + std::vector flagsexclEB_; + std::vector flagsexclEE_; + std::vector severitiesexclEB_; + std::vector severitiesexclEE_; -#include "Geometry/Records/interface/CaloGeometryRecord.h" + double hOverEConeSize_; + double maxHOverE_; + double minSCEt_; + double highEt_; + double minR9Barrel_; + double minR9Endcap_; + bool runMIPTagger_; + + bool validConversions_; + + bool usePrimaryVertex_; + + PositionCalc posCalculator_; + + bool validPixelSeeds_; + PhotonIsolationCalculator photonIsolationCalculator_; + + //MIP + PhotonMIPHaloTagger photonMIPHaloTagger_; + + std::vector preselCutValuesBarrel_; + std::vector preselCutValuesEndcap_; + + PhotonEnergyCorrector photonEnergyCorrector_; + std::string candidateP4type_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(PhotonProducer); PhotonProducer::PhotonProducer(const edm::ParameterSet& config) : photonEnergyCorrector_(config, consumesCollector()) { // use onfiguration file to setup input/output collection names diff --git a/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc index 4a7e5f6523421..dce9ed59114e0 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc @@ -1,93 +1,314 @@ -#include -#include -#include -#include - -// Framework -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Utilities/interface/Exception.h" +/** \class ReducedEGProducer + ** + ** Select subset of electrons and photons from input collections and + ** produced consistently relinked output collections including + ** associated SuperClusters, CaloClusters and ecal RecHits + ** + ** \author J.Bendavid (CERN) + ** \edited: K. McDermott(Cornell) : refactored code + out of time photons + ***/ +#include "CommonTools/Egamma/interface/ConversionTools.h" +#include "CommonTools/UtilAlgos/interface/StringCutObjectSelector.h" #include "CommonTools/Utils/interface/StringToEnumValue.h" - -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "Geometry/CaloTopology/interface/CaloTopology.h" - -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "DataFormats/EgammaReco/interface/ClusterShape.h" -#include "DataFormats/EgammaCandidates/interface/PhotonCore.h" +#include "CondFormats/EcalObjects/interface/EcalFunctionParameters.h" +#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/ValueMap.h" +#include "DataFormats/EgammaCandidates/interface/Conversion.h" +#include "DataFormats/EgammaCandidates/interface/HIPhotonIsolation.h" #include "DataFormats/EgammaCandidates/interface/Photon.h" #include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" -#include "DataFormats/EgammaCandidates/interface/Conversion.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateEGammaExtra.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateEGammaExtraFwd.h" +#include "DataFormats/EgammaCandidates/interface/PhotonCore.h" +#include "DataFormats/EgammaReco/interface/BasicCluster.h" +#include "DataFormats/EgammaReco/interface/BasicClusterShapeAssociation.h" +#include "DataFormats/EgammaReco/interface/ClusterShape.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" +#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" +#include "Geometry/CaloTopology/interface/CaloTopology.h" +#include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EGHcalRecHitSelector.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" + +#include +#include +#include -#include "DataFormats/EgammaReco/interface/ElectronSeed.h" -#include "RecoCaloTools/Selectors/interface/CaloConeSelector.h" +class ReducedEGProducer : public edm::stream::EDProducer<> { +public: + ReducedEGProducer(const edm::ParameterSet& ps); -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" + void beginRun(edm::Run const&, const edm::EventSetup&) final; + void produce(edm::Event& evt, const edm::EventSetup& es) final; -#include "RecoEgamma/EgammaPhotonProducers/interface/ReducedEGProducer.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h" +private: + template + std::vector> vproduces(std::vector const& labels) { + std::vector> putTokens{}; + putTokens.reserve(labels.size()); + for (const auto& label : labels) { + putTokens.push_back(produces(label)); + } + return putTokens; + } -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaHadTower.h" + template + void linkCore(const T& core, U& cores, std::map& coreMap); + + void linkSuperCluster(const reco::SuperClusterRef& superCluster, + std::map& superClusterMap, + reco::SuperClusterCollection& superClusters, + const bool relink, + std::unordered_set& superClusterFullRelinkMap); + + void linkConversions(const reco::ConversionRefVector& convrefs, + reco::ConversionCollection& conversions, + std::map& conversionMap); + + void linkConversionsByTrackRef(const edm::Handle& conversionHandle, + const reco::GsfElectron& gsfElectron, + reco::ConversionCollection& conversions, + std::map& conversionMap); + + void linkConversionsByTrackRef(const edm::Handle& conversionHandle, + const reco::SuperCluster& superCluster, + reco::ConversionCollection& conversions, + std::map& conversionMap); + + void linkConversion(const reco::ConversionRef& convref, + reco::ConversionCollection& conversions, + std::map& conversionMap); + + void linkCaloCluster(const reco::CaloClusterPtr& caloCluster, + reco::CaloClusterCollection& caloClusters, + std::map& caloClusterMap); + + void linkCaloClusters(const reco::SuperCluster& superCluster, + reco::CaloClusterCollection& ebeeClusters, + std::map& ebeeClusterMap, + std::unordered_set& rechitMap, + const edm::Handle& barrelHitHandle, + const edm::Handle& endcapHitHandle, + CaloTopology const& caloTopology, + reco::CaloClusterCollection& esClusters, + std::map& esClusterMap); + + void linkHcalHits(const reco::SuperCluster& superClus, + const HBHERecHitCollection& recHits, + std::unordered_set& hcalDetIds); + + void relinkCaloClusters(reco::SuperCluster& superCluster, + const std::map& ebeeClusterMap, + const std::map& esClusterMap, + const edm::OrphanHandle& outEBEEClusterHandle, + const edm::OrphanHandle& outESClusterHandle); + + template + void relinkSuperCluster(T& core, + const std::map& superClusterMap, + const edm::OrphanHandle& outSuperClusterHandle); + + void relinkGsfTrack(reco::GsfElectronCore& electroncore, + const std::map& gsfTrackMap, + const edm::OrphanHandle& outGsfTrackHandle); + + void relinkConversions(reco::PhotonCore& photonCore, + const reco::ConversionRefVector& convrefs, + const std::map& conversionMap, + const edm::OrphanHandle& outConversionHandle); + + void relinkPhotonCore(reco::Photon& photon, + const std::map& photonCoreMap, + const edm::OrphanHandle& outPhotonCoreHandle); + + void relinkGsfElectronCore(reco::GsfElectron& gsfElectron, + const std::map& gsfElectronCoreMap, + const edm::OrphanHandle& outGsfElectronCoreHandle); + + static void calibratePhoton(reco::Photon& photon, + const reco::PhotonRef& oldPhoRef, + const edm::ValueMap& energyMap, + const edm::ValueMap& energyErrMap); + + static void calibrateElectron(reco::GsfElectron& gsfElectron, + const reco::GsfElectronRef& oldEleRef, + const edm::ValueMap& energyMap, + const edm::ValueMap& energyErrMap, + const edm::ValueMap& ecalEnergyMap, + const edm::ValueMap& ecalEnergyErrMap); + + template + void setToken(edm::EDGetTokenT& token, const edm::ParameterSet& config, const std::string& name) { + token = consumes(config.getParameter(name)); + } -#include "CommonTools/Egamma/interface/ConversionTools.h" + //tokens for input collections + const edm::EDGetTokenT photonT_; + edm::EDGetTokenT ootPhotonT_; + const edm::EDGetTokenT gsfElectronT_; + const edm::EDGetTokenT conversionT_; + const edm::EDGetTokenT singleConversionT_; + + const edm::EDGetTokenT barrelEcalHits_; + const edm::EDGetTokenT endcapEcalHits_; + const bool doPreshowerEcalHits_; + const edm::EDGetTokenT preshowerEcalHits_; + const edm::EDGetTokenT hbheHits_; + + const edm::EDGetTokenT>> photonPfCandMapT_; + const edm::EDGetTokenT>> gsfElectronPfCandMapT_; + + std::vector>> photonIdTs_; + std::vector>> gsfElectronIdTs_; + + std::vector>> photonFloatValueMapTs_; + std::vector>> ootPhotonFloatValueMapTs_; + std::vector>> gsfElectronFloatValueMapTs_; + + const edm::EDGetTokenT recoHIPhotonIsolationMapInputToken_; + edm::EDPutTokenT recoHIPhotonIsolationMapOutputName_; + + const bool applyPhotonCalibOnData_; + const bool applyPhotonCalibOnMC_; + const bool applyGsfElectronCalibOnData_; + const bool applyGsfElectronCalibOnMC_; + edm::EDGetTokenT> photonCalibEnergyT_; + edm::EDGetTokenT> photonCalibEnergyErrT_; + edm::EDGetTokenT> gsfElectronCalibEnergyT_; + edm::EDGetTokenT> gsfElectronCalibEnergyErrT_; + edm::EDGetTokenT> gsfElectronCalibEcalEnergyT_; + edm::EDGetTokenT> gsfElectronCalibEcalEnergyErrT_; + + edm::ESGetToken caloTopology_; + //names for output collections + const edm::EDPutTokenT outPhotons_; + const edm::EDPutTokenT outPhotonCores_; + edm::EDPutTokenT outOOTPhotons_; + edm::EDPutTokenT outOOTPhotonCores_; + const edm::EDPutTokenT outGsfElectrons_; + const edm::EDPutTokenT outGsfElectronCores_; + const edm::EDPutTokenT outGsfTracks_; + const edm::EDPutTokenT outConversions_; + const edm::EDPutTokenT outSingleConversions_; + const edm::EDPutTokenT outSuperClusters_; + const edm::EDPutTokenT outEBEEClusters_; + const edm::EDPutTokenT outESClusters_; + edm::EDPutTokenT outOOTSuperClusters_; + edm::EDPutTokenT outOOTEBEEClusters_; + edm::EDPutTokenT outOOTESClusters_; + const edm::EDPutTokenT outEBRecHits_; + const edm::EDPutTokenT outEERecHits_; + edm::EDPutTokenT outESRecHits_; + const edm::EDPutTokenT outHBHERecHits_; + const edm::EDPutTokenT>> outPhotonPfCandMap_; + const edm::EDPutTokenT>> outGsfElectronPfCandMap_; + const std::vector>> outPhotonIds_; + const std::vector>> outGsfElectronIds_; + const std::vector>> outPhotonFloatValueMaps_; + std::vector>> outOOTPhotonFloatValueMaps_; + const std::vector>> outGsfElectronFloatValueMaps_; + + const StringCutObjectSelector keepPhotonSel_; + const StringCutObjectSelector slimRelinkPhotonSel_; + const StringCutObjectSelector relinkPhotonSel_; + const StringCutObjectSelector keepOOTPhotonSel_; + const StringCutObjectSelector slimRelinkOOTPhotonSel_; + const StringCutObjectSelector relinkOOTPhotonSel_; + const StringCutObjectSelector keepGsfElectronSel_; + const StringCutObjectSelector slimRelinkGsfElectronSel_; + const StringCutObjectSelector relinkGsfElectronSel_; + + EGHcalRecHitSelector hcalHitSel_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(ReducedEGProducer); + +namespace { + + template + auto getHandles(edm::Event const& event, std::vector> const& tokens) { + std::vector> handles(tokens.size()); + int index = 0; + for (const auto& token : tokens) { + event.getByToken(token, handles[index++]); + } + return handles; + } + + template + auto emplaceValueMap(Handle const& handle, + std::vector const& values, + edm::Event& ev, + edm::EDPutTokenT> const& putToken) { + using MapType = edm::ValueMap; + MapType oMap{}; + { + typename MapType::Filler filler(oMap); + filler.insert(handle, values.begin(), values.end()); + filler.fill(); + } + ev.emplace(putToken, std::move(oMap)); + }; +} // namespace ReducedEGProducer::ReducedEGProducer(const edm::ParameterSet& config) - : photonT_(consumes(config.getParameter("photons"))), - gsfElectronT_(consumes(config.getParameter("gsfElectrons"))), - gsfTrackT_(consumes(config.getParameter("gsfTracks"))), - conversionT_(consumes(config.getParameter("conversions"))), - singleConversionT_(consumes(config.getParameter("singleConversions"))), - barrelEcalHits_(consumes(config.getParameter("barrelEcalHits"))), - endcapEcalHits_(consumes(config.getParameter("endcapEcalHits"))), + : photonT_(consumes(config.getParameter("photons"))), + gsfElectronT_(consumes(config.getParameter("gsfElectrons"))), + conversionT_(consumes(config.getParameter("conversions"))), + singleConversionT_(consumes(config.getParameter("singleConversions"))), + barrelEcalHits_(consumes(config.getParameter("barrelEcalHits"))), + endcapEcalHits_(consumes(config.getParameter("endcapEcalHits"))), doPreshowerEcalHits_(!config.getParameter("preshowerEcalHits").label().empty()), preshowerEcalHits_(doPreshowerEcalHits_ ? consumes(config.getParameter("preshowerEcalHits")) : edm::EDGetTokenT()), hbheHits_(consumes(config.getParameter("hbheHits"))), - photonPfCandMapT_(consumes>>( - config.getParameter("photonsPFValMap"))), - gsfElectronPfCandMapT_(consumes>>( - config.getParameter("gsfElectronsPFValMap"))), + photonPfCandMapT_(consumes(config.getParameter("photonsPFValMap"))), + gsfElectronPfCandMapT_(consumes(config.getParameter("gsfElectronsPFValMap"))), + recoHIPhotonIsolationMapInputToken_{ + !config.getParameter("hiPhotonIsolationMapInput").label().empty() + ? consumes(config.getParameter("hiPhotonIsolationMapInput")) + : edm::EDGetTokenT{}}, //calibration flags applyPhotonCalibOnData_(config.getParameter("applyPhotonCalibOnData")), applyPhotonCalibOnMC_(config.getParameter("applyPhotonCalibOnMC")), applyGsfElectronCalibOnData_(config.getParameter("applyGsfElectronCalibOnData")), applyGsfElectronCalibOnMC_(config.getParameter("applyGsfElectronCalibOnMC")), //output collections - outPhotons_("reducedGedPhotons"), - outPhotonCores_("reducedGedPhotonCores"), - outOOTPhotons_("reducedOOTPhotons"), - outOOTPhotonCores_("reducedOOTPhotonCores"), - outGsfElectrons_("reducedGedGsfElectrons"), - outGsfElectronCores_("reducedGedGsfElectronCores"), - outGsfTracks_("reducedGsfTracks"), - outConversions_("reducedConversions"), - outSingleConversions_("reducedSingleLegConversions"), - outSuperClusters_("reducedSuperClusters"), - outEBEEClusters_("reducedEBEEClusters"), - outESClusters_("reducedESClusters"), - outOOTSuperClusters_("reducedOOTSuperClusters"), - outOOTEBEEClusters_("reducedOOTEBEEClusters"), - outOOTESClusters_("reducedOOTESClusters"), - outEBRecHits_("reducedEBRecHits"), - outEERecHits_("reducedEERecHits"), - outESRecHits_("reducedESRecHits"), - outHBHERecHits_("reducedHBHEHits"), - outPhotonPfCandMap_("reducedPhotonPfCandMap"), - outGsfElectronPfCandMap_("reducedGsfElectronPfCandMap"), - outPhotonIds_(config.getParameter>("photonIDOutput")), - outGsfElectronIds_(config.getParameter>("gsfElectronIDOutput")), - outPhotonFloatValueMaps_(config.getParameter>("photonFloatValueMapOutput")), - outOOTPhotonFloatValueMaps_(config.getParameter>("ootPhotonFloatValueMapOutput")), - outGsfElectronFloatValueMaps_(config.getParameter>("gsfElectronFloatValueMapOutput")), + outPhotons_{produces("reducedGedPhotons")}, + outPhotonCores_{produces("reducedGedPhotonCores")}, + outGsfElectrons_{produces("reducedGedGsfElectrons")}, + outGsfElectronCores_{produces("reducedGedGsfElectronCores")}, + outGsfTracks_{produces("reducedGsfTracks")}, + outConversions_{produces("reducedConversions")}, + outSingleConversions_{produces("reducedSingleLegConversions")}, + outSuperClusters_{produces("reducedSuperClusters")}, + outEBEEClusters_{produces("reducedEBEEClusters")}, + outESClusters_{produces("reducedESClusters")}, + outEBRecHits_{produces("reducedEBRecHits")}, + outEERecHits_{produces("reducedEERecHits")}, + outHBHERecHits_{produces("reducedHBHEHits")}, + outPhotonPfCandMap_{produces>>("reducedPhotonPfCandMap")}, + outGsfElectronPfCandMap_{ + produces>>("reducedGsfElectronPfCandMap")}, + outPhotonIds_{vproduces>(config.getParameter>("photonIDOutput"))}, + outGsfElectronIds_{ + vproduces>(config.getParameter>("gsfElectronIDOutput"))}, + outPhotonFloatValueMaps_{ + vproduces>(config.getParameter>("photonFloatValueMapOutput"))}, + outGsfElectronFloatValueMaps_{vproduces>( + config.getParameter>("gsfElectronFloatValueMapOutput"))}, keepPhotonSel_(config.getParameter("keepPhotons")), slimRelinkPhotonSel_(config.getParameter("slimRelinkPhotons")), relinkPhotonSel_(config.getParameter("relinkPhotons")), @@ -98,37 +319,28 @@ ReducedEGProducer::ReducedEGProducer(const edm::ParameterSet& config) slimRelinkGsfElectronSel_(config.getParameter("slimRelinkGsfElectrons")), relinkGsfElectronSel_(config.getParameter("relinkGsfElectrons")), hcalHitSel_(config.getParameter("hcalHitSel"), consumesCollector()) { - const edm::InputTag& aTag = config.getParameter("ootPhotons"); + const auto& aTag = config.getParameter("ootPhotons"); caloTopology_ = esConsumes(); if (not aTag.label().empty()) ootPhotonT_ = consumes(aTag); - const std::vector& photonidinputs = config.getParameter>("photonIDSources"); - for (const edm::InputTag& tag : photonidinputs) { + for (const edm::InputTag& tag : config.getParameter>("photonIDSources")) { photonIdTs_.emplace_back(consumes>(tag)); } - const std::vector& gsfelectronidinputs = - config.getParameter>("gsfElectronIDSources"); - for (const edm::InputTag& tag : gsfelectronidinputs) { + for (const edm::InputTag& tag : config.getParameter>("gsfElectronIDSources")) { gsfElectronIdTs_.emplace_back(consumes>(tag)); } - const std::vector& photonpfclusterisoinputs = - config.getParameter>("photonFloatValueMapSources"); - for (const edm::InputTag& tag : photonpfclusterisoinputs) { + for (const edm::InputTag& tag : config.getParameter>("photonFloatValueMapSources")) { photonFloatValueMapTs_.emplace_back(consumes>(tag)); } - const std::vector& ootphotonpfclusterisoinputs = - config.getParameter>("ootPhotonFloatValueMapSources"); - for (const edm::InputTag& tag : ootphotonpfclusterisoinputs) { + for (const edm::InputTag& tag : config.getParameter>("ootPhotonFloatValueMapSources")) { ootPhotonFloatValueMapTs_.emplace_back(consumes>(tag)); } - const std::vector& gsfelectronpfclusterisoinputs = - config.getParameter>("gsfElectronFloatValueMapSources"); - for (const edm::InputTag& tag : gsfelectronpfclusterisoinputs) { + for (const edm::InputTag& tag : config.getParameter>("gsfElectronFloatValueMapSources")) { gsfElectronFloatValueMapTs_.emplace_back(consumes>(tag)); } @@ -143,170 +355,100 @@ ReducedEGProducer::ReducedEGProducer(const edm::ParameterSet& config) setToken(gsfElectronCalibEcalEnergyErrT_, config, "gsfElectronCalibEcalEnergyErrSource"); } - produces(outPhotons_); - produces(outPhotonCores_); - if (!ootPhotonT_.isUninitialized()) { - produces(outOOTPhotons_); - produces(outOOTPhotonCores_); - } - produces(outGsfElectrons_); - produces(outGsfElectronCores_); - produces(outGsfTracks_); - produces(outConversions_); - produces(outSingleConversions_); - produces(outSuperClusters_); - produces(outEBEEClusters_); - produces(outESClusters_); if (!ootPhotonT_.isUninitialized()) { - produces(outOOTSuperClusters_); - produces(outOOTEBEEClusters_); - produces(outOOTESClusters_); - } - produces(outEBRecHits_); - produces(outEERecHits_); - if (doPreshowerEcalHits_) - produces(outESRecHits_); - produces(outHBHERecHits_); - produces>>(outPhotonPfCandMap_); - produces>>(outGsfElectronPfCandMap_); - for (const std::string& outid : outPhotonIds_) { - produces>(outid); - } - for (const std::string& outid : outGsfElectronIds_) { - produces>(outid); + outOOTPhotons_ = produces("reducedOOTPhotons"); + outOOTPhotonCores_ = produces("reducedOOTPhotonCores"); + outOOTSuperClusters_ = produces("reducedOOTSuperClusters"); + outOOTEBEEClusters_ = produces("reducedOOTEBEEClusters"); + outOOTESClusters_ = produces("reducedOOTESClusters"); } - for (const std::string& outid : outPhotonFloatValueMaps_) { - produces>(outid); + if (doPreshowerEcalHits_) { + outESRecHits_ = produces("reducedESRecHits"); } if (!ootPhotonT_.isUninitialized()) { - for (const std::string& outid : outOOTPhotonFloatValueMaps_) { - produces>(outid); - } + outOOTPhotonFloatValueMaps_ = + vproduces>(config.getParameter>("ootPhotonFloatValueMapOutput")); } - for (const std::string& outid : outGsfElectronFloatValueMaps_) { - produces>(outid); + if (!recoHIPhotonIsolationMapInputToken_.isUninitialized()) { + recoHIPhotonIsolationMapOutputName_ = + produces(config.getParameter("hiPhotonIsolationMapOutput")); } } -ReducedEGProducer::~ReducedEGProducer() {} - void ReducedEGProducer::beginRun(edm::Run const& run, const edm::EventSetup& iSetup) { hcalHitSel_.setup(iSetup); } -void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& theEventSetup) { +void ReducedEGProducer::produce(edm::Event& event, const edm::EventSetup& eventSetup) { //get input collections - edm::Handle photonHandle; - theEvent.getByToken(photonT_, photonHandle); - - edm::Handle ootPhotonHandle; - if (!ootPhotonT_.isUninitialized()) - theEvent.getByToken(ootPhotonT_, ootPhotonHandle); - - edm::Handle gsfElectronHandle; - theEvent.getByToken(gsfElectronT_, gsfElectronHandle); - - edm::Handle gsfTrackHandle; - theEvent.getByToken(gsfTrackT_, gsfTrackHandle); - - edm::Handle conversionHandle; - theEvent.getByToken(conversionT_, conversionHandle); - - edm::Handle singleConversionHandle; - theEvent.getByToken(singleConversionT_, singleConversionHandle); - - edm::Handle barrelHitHandle; - theEvent.getByToken(barrelEcalHits_, barrelHitHandle); + auto photonHandle = event.getHandle(photonT_); - edm::Handle endcapHitHandle; - theEvent.getByToken(endcapEcalHits_, endcapHitHandle); + auto ootPhotonHandle = + !ootPhotonT_.isUninitialized() ? event.getHandle(ootPhotonT_) : edm::Handle{}; - edm::Handle preshowerHitHandle; - if (doPreshowerEcalHits_) - theEvent.getByToken(preshowerEcalHits_, preshowerHitHandle); + auto gsfElectronHandle = event.getHandle(gsfElectronT_); + auto conversionHandle = event.getHandle(conversionT_); + auto singleConversionHandle = event.getHandle(singleConversionT_); + auto barrelHitHandle = event.getHandle(barrelEcalHits_); + auto endcapHitHandle = event.getHandle(endcapEcalHits_); - edm::Handle hbheHitHandle; - theEvent.getByToken(hbheHits_, hbheHitHandle); + auto preshowerHitHandle = + doPreshowerEcalHits_ ? event.getHandle(preshowerEcalHits_) : edm::Handle{}; - edm::Handle>> photonPfCandMapHandle; - theEvent.getByToken(photonPfCandMapT_, photonPfCandMapHandle); - - edm::Handle>> gsfElectronPfCandMapHandle; - theEvent.getByToken(gsfElectronPfCandMapT_, gsfElectronPfCandMapHandle); - - std::vector>> photonIdHandles(photonIdTs_.size()); - int index = 0; // universal index for range based loops - for (const auto& photonIdT : photonIdTs_) { - theEvent.getByToken(photonIdT, photonIdHandles[index++]); - } - - std::vector>> gsfElectronIdHandles(gsfElectronIdTs_.size()); - index = 0; - for (const auto& gsfElectronIdT : gsfElectronIdTs_) { - theEvent.getByToken(gsfElectronIdT, gsfElectronIdHandles[index++]); - } + auto hbheHitHandle = event.getHandle(hbheHits_); + auto photonPfCandMapHandle = event.getHandle(photonPfCandMapT_); + auto gsfElectronPfCandMapHandle = event.getHandle(gsfElectronPfCandMapT_); - std::vector>> photonFloatValueMapHandles(photonFloatValueMapTs_.size()); - index = 0; - for (const auto& photonFloatValueMapT : photonFloatValueMapTs_) { - theEvent.getByToken(photonFloatValueMapT, photonFloatValueMapHandles[index++]); - } + auto photonIdHandles = getHandles(event, photonIdTs_); + auto gsfElectronIdHandles = getHandles(event, gsfElectronIdTs_); + auto photonFloatValueMapHandles = getHandles(event, photonFloatValueMapTs_); - std::vector>> ootPhotonFloatValueMapHandles(ootPhotonFloatValueMapTs_.size()); - if (!ootPhotonT_.isUninitialized()) { - index = 0; - for (const auto& ootPhotonFloatValueMapT : ootPhotonFloatValueMapTs_) { - theEvent.getByToken(ootPhotonFloatValueMapT, ootPhotonFloatValueMapHandles[index++]); - } - } + auto ootPhotonFloatValueMapHandles = !ootPhotonT_.isUninitialized() + ? getHandles(event, ootPhotonFloatValueMapTs_) + : std::vector>>{}; - std::vector>> gsfElectronFloatValueMapHandles(gsfElectronFloatValueMapTs_.size()); - index = 0; - for (const auto& gsfElectronFloatValueMapT : gsfElectronFloatValueMapTs_) { - theEvent.getByToken(gsfElectronFloatValueMapT, gsfElectronFloatValueMapHandles[index++]); - } + auto gsfElectronFloatValueMapHandles = getHandles(event, gsfElectronFloatValueMapTs_); edm::Handle> gsfElectronCalibEnergyHandle; edm::Handle> gsfElectronCalibEnergyErrHandle; edm::Handle> gsfElectronCalibEcalEnergyHandle; edm::Handle> gsfElectronCalibEcalEnergyErrHandle; if (applyGsfElectronCalibOnData_ || applyGsfElectronCalibOnMC_) { - theEvent.getByToken(gsfElectronCalibEnergyT_, gsfElectronCalibEnergyHandle); - theEvent.getByToken(gsfElectronCalibEnergyErrT_, gsfElectronCalibEnergyErrHandle); - theEvent.getByToken(gsfElectronCalibEcalEnergyT_, gsfElectronCalibEcalEnergyHandle); - theEvent.getByToken(gsfElectronCalibEcalEnergyErrT_, gsfElectronCalibEcalEnergyErrHandle); + event.getByToken(gsfElectronCalibEnergyT_, gsfElectronCalibEnergyHandle); + event.getByToken(gsfElectronCalibEnergyErrT_, gsfElectronCalibEnergyErrHandle); + event.getByToken(gsfElectronCalibEcalEnergyT_, gsfElectronCalibEcalEnergyHandle); + event.getByToken(gsfElectronCalibEcalEnergyErrT_, gsfElectronCalibEcalEnergyErrHandle); } edm::Handle> photonCalibEnergyHandle; edm::Handle> photonCalibEnergyErrHandle; if (applyPhotonCalibOnData_ || applyPhotonCalibOnMC_) { - theEvent.getByToken(photonCalibEnergyT_, photonCalibEnergyHandle); - theEvent.getByToken(photonCalibEnergyErrT_, photonCalibEnergyErrHandle); + event.getByToken(photonCalibEnergyT_, photonCalibEnergyHandle); + event.getByToken(photonCalibEnergyErrT_, photonCalibEnergyErrHandle); } - edm::ESHandle theCaloTopology = theEventSetup.getHandle(caloTopology_); - const CaloTopology* caloTopology = &(*theCaloTopology); + auto const& caloTopology = eventSetup.getData(caloTopology_); //initialize output collections - auto photons = std::make_unique(); - auto photonCores = std::make_unique(); - auto ootPhotons = std::make_unique(); - auto ootPhotonCores = std::make_unique(); - auto gsfElectrons = std::make_unique(); - auto gsfElectronCores = std::make_unique(); - auto gsfTracks = std::make_unique(); - auto conversions = std::make_unique(); - auto singleConversions = std::make_unique(); - auto superClusters = std::make_unique(); - auto ebeeClusters = std::make_unique(); - auto esClusters = std::make_unique(); - auto ootSuperClusters = std::make_unique(); - auto ootEbeeClusters = std::make_unique(); - auto ootEsClusters = std::make_unique(); - auto ebRecHits = std::make_unique(); - auto eeRecHits = std::make_unique(); - auto esRecHits = std::make_unique(); - auto hbheRecHits = std::make_unique(); - auto photonPfCandMap = std::make_unique>>(); - auto gsfElectronPfCandMap = std::make_unique>>(); + reco::PhotonCollection photons; + reco::PhotonCoreCollection photonCores; + reco::PhotonCollection ootPhotons; + reco::PhotonCoreCollection ootPhotonCores; + reco::GsfElectronCollection gsfElectrons; + reco::GsfElectronCoreCollection gsfElectronCores; + reco::GsfTrackCollection gsfTracks; + reco::ConversionCollection conversions; + reco::ConversionCollection singleConversions; + reco::SuperClusterCollection superClusters; + reco::CaloClusterCollection ebeeClusters; + reco::CaloClusterCollection esClusters; + reco::SuperClusterCollection ootSuperClusters; + reco::CaloClusterCollection ootEbeeClusters; + reco::CaloClusterCollection ootEsClusters; + EcalRecHitCollection ebRecHits; + EcalRecHitCollection eeRecHits; + EcalRecHitCollection esRecHits; + HBHERecHitCollection hbheRecHits; + edm::ValueMap> photonPfCandMap; + edm::ValueMap> gsfElectronPfCandMap; //maps to collection indices of output objects std::map photonCoreMap; @@ -338,23 +480,29 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the std::vector> ootPhotonFloatValueMapVals(ootPhotonFloatValueMapHandles.size()); std::vector> gsfElectronFloatValueMapVals(gsfElectronFloatValueMapHandles.size()); + // HI photon iso value maps + reco::HIPhotonIsolationMap const* recoHIPhotonIsolationMapInputValueMap = + !recoHIPhotonIsolationMapInputToken_.isUninitialized() ? &event.get(recoHIPhotonIsolationMapInputToken_) + : nullptr; + std::vector recoHIPhotonIsolationMapInputVals; + //loop over photons and fill maps - index = -1; + int index = -1; for (const auto& photon : *photonHandle) { index++; reco::PhotonRef photonref(photonHandle, index); - photons->push_back(photon); - auto& newPhoton = photons->back(); + photons.push_back(photon); + auto& newPhoton = photons.back(); - if ((applyPhotonCalibOnData_ && theEvent.isRealData()) || (applyPhotonCalibOnMC_ && !theEvent.isRealData())) { + if ((applyPhotonCalibOnData_ && event.isRealData()) || (applyPhotonCalibOnMC_ && !event.isRealData())) { calibratePhoton(newPhoton, photonref, *photonCalibEnergyHandle, *photonCalibEnergyErrHandle); } //we do this after calibration bool keep = keepPhotonSel_(newPhoton); if (!keep) { - photons->pop_back(); + photons.pop_back(); continue; } @@ -372,9 +520,14 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the photonFloatValueMapVals[subindex++].push_back((*photonFloatValueMapHandle)[photonref]); } + // HI photon isolation + if (!recoHIPhotonIsolationMapInputToken_.isUninitialized()) { + recoHIPhotonIsolationMapInputVals.push_back((*recoHIPhotonIsolationMapInputValueMap)[photonref]); + } + //link photon core const reco::PhotonCoreRef& photonCore = photon.photonCore(); - linkCore(photonCore, *photonCores, photonCoreMap); + linkCore(photonCore, photonCores, photonCoreMap); bool slimRelink = slimRelinkPhotonSel_(newPhoton); //no supercluster relinking unless slimRelink selection is satisfied @@ -385,18 +538,18 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the //link supercluster const reco::SuperClusterRef& superCluster = photon.superCluster(); - linkSuperCluster(superCluster, superClusterMap, *superClusters, relink, superClusterFullRelinkMap); + linkSuperCluster(superCluster, superClusterMap, superClusters, relink, superClusterFullRelinkMap); //conversions only for full relinking if (!relink) continue; const reco::ConversionRefVector& convrefs = photon.conversions(); - linkConversions(convrefs, *conversions, conversionMap); + linkConversions(convrefs, conversions, conversionMap); //explicitly references conversions const reco::ConversionRefVector& singleconvrefs = photon.conversionsOneLeg(); - linkConversions(singleconvrefs, *singleConversions, singleConversionMap); + linkConversions(singleconvrefs, singleConversions, singleConversionMap); //hcal hits linkHcalHits(*photon.superCluster(), *hbheHitHandle, hcalRechitMap); @@ -417,7 +570,7 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the reco::PhotonRef ootPhotonref(ootPhotonHandle, index); - ootPhotons->push_back(ootPhoton); + ootPhotons.push_back(ootPhoton); //fill photon pfclusteriso valuemap vectors int subindex = 0; @@ -427,7 +580,7 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the //link photon core const reco::PhotonCoreRef& ootPhotonCore = ootPhoton.photonCore(); - linkCore(ootPhotonCore, *ootPhotonCores, ootPhotonCoreMap); + linkCore(ootPhotonCore, ootPhotonCores, ootPhotonCoreMap); bool slimRelink = slimRelinkOOTPhotonSel_(ootPhoton); //no supercluster relinking unless slimRelink selection is satisfied @@ -437,7 +590,7 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the bool relink = relinkOOTPhotonSel_(ootPhoton); const reco::SuperClusterRef& ootSuperCluster = ootPhoton.superCluster(); - linkSuperCluster(ootSuperCluster, ootSuperClusterMap, *ootSuperClusters, relink, ootSuperClusterFullRelinkMap); + linkSuperCluster(ootSuperCluster, ootSuperClusterMap, ootSuperClusters, relink, ootSuperClusterFullRelinkMap); //hcal hits linkHcalHits(*ootPhoton.superCluster(), *hbheHitHandle, hcalRechitMap); } @@ -449,10 +602,9 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the index++; reco::GsfElectronRef gsfElectronref(gsfElectronHandle, index); - gsfElectrons->push_back(gsfElectron); - auto& newGsfElectron = gsfElectrons->back(); - if ((applyGsfElectronCalibOnData_ && theEvent.isRealData()) || - (applyGsfElectronCalibOnMC_ && !theEvent.isRealData())) { + gsfElectrons.push_back(gsfElectron); + auto& newGsfElectron = gsfElectrons.back(); + if ((applyGsfElectronCalibOnData_ && event.isRealData()) || (applyGsfElectronCalibOnMC_ && !event.isRealData())) { calibrateElectron(newGsfElectron, gsfElectronref, *gsfElectronCalibEnergyHandle, @@ -463,7 +615,7 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the bool keep = keepGsfElectronSel_(newGsfElectron); if (!keep) { - gsfElectrons->pop_back(); + gsfElectrons.pop_back(); continue; } @@ -481,24 +633,21 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the } const reco::GsfElectronCoreRef& gsfElectronCore = gsfElectron.core(); - linkCore(gsfElectronCore, *gsfElectronCores, gsfElectronCoreMap); + linkCore(gsfElectronCore, gsfElectronCores, gsfElectronCoreMap); const reco::GsfTrackRef& gsfTrack = gsfElectron.gsfTrack(); // Save the main gsfTrack if (!gsfTrackMap.count(gsfTrack)) { - gsfTracks->push_back(*gsfTrack); - gsfTrackMap[gsfTrack] = gsfTracks->size() - 1; + gsfTracks.push_back(*gsfTrack); + gsfTrackMap[gsfTrack] = gsfTracks.size() - 1; } // Save additional ambiguous gsf tracks in a map: - for (reco::GsfTrackRefVector::const_iterator igsf = gsfElectron.ambiguousGsfTracksBegin(); - igsf != gsfElectron.ambiguousGsfTracksEnd(); - ++igsf) { - const reco::GsfTrackRef& ambigGsfTrack = *igsf; + for (auto const& ambigGsfTrack : gsfElectron.ambiguousGsfTracks()) { if (!gsfTrackMap.count(ambigGsfTrack)) { - gsfTracks->push_back(*ambigGsfTrack); - gsfTrackMap[ambigGsfTrack] = gsfTracks->size() - 1; + gsfTracks.push_back(*ambigGsfTrack); + gsfTrackMap[ambigGsfTrack] = gsfTracks.size() - 1; } } @@ -510,24 +659,24 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the bool relink = relinkGsfElectronSel_(newGsfElectron); const reco::SuperClusterRef& superCluster = gsfElectron.superCluster(); - linkSuperCluster(superCluster, superClusterMap, *superClusters, relink, superClusterFullRelinkMap); + linkSuperCluster(superCluster, superClusterMap, superClusters, relink, superClusterFullRelinkMap); //conversions only for full relinking if (!relink) continue; const reco::ConversionRefVector& convrefs = gsfElectron.core()->conversions(); - linkConversions(convrefs, *conversions, conversionMap); + linkConversions(convrefs, conversions, conversionMap); //explicitly references conversions const reco::ConversionRefVector& singleconvrefs = gsfElectron.core()->conversionsOneLeg(); - linkConversions(singleconvrefs, *singleConversions, singleConversionMap); + linkConversions(singleconvrefs, singleConversions, singleConversionMap); //conversions matched by trackrefs - linkConversionsByTrackRef(conversionHandle, gsfElectron, *conversions, conversionMap); + linkConversionsByTrackRef(conversionHandle, gsfElectron, conversions, conversionMap); //single leg conversions matched by trackrefs - linkConversionsByTrackRef(singleConversionHandle, gsfElectron, *singleConversions, singleConversionMap); + linkConversionsByTrackRef(singleConversionHandle, gsfElectron, singleConversions, singleConversionMap); //hcal hits linkHcalHits(*gsfElectron.superCluster(), *hbheHitHandle, hcalRechitMap); @@ -535,10 +684,10 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the //loop over output SuperClusters and fill maps index = 0; - for (auto& superCluster : *superClusters) { + for (auto& superCluster : superClusters) { //link seed cluster no matter what const reco::CaloClusterPtr& seedCluster = superCluster.seed(); - linkCaloCluster(seedCluster, *ebeeClusters, ebeeClusterMap); + linkCaloCluster(seedCluster, ebeeClusters, ebeeClusterMap); //only proceed if superCluster is marked for full relinking bool fullrelink = superClusterFullRelinkMap.count(index++); @@ -550,29 +699,29 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the // link calo clusters linkCaloClusters(superCluster, - *ebeeClusters, + ebeeClusters, ebeeClusterMap, rechitMap, barrelHitHandle, endcapHitHandle, caloTopology, - *esClusters, + esClusters, esClusterMap); //conversions matched geometrically - linkConversionsByTrackRef(conversionHandle, superCluster, *conversions, conversionMap); + linkConversionsByTrackRef(conversionHandle, superCluster, conversions, conversionMap); //single leg conversions matched by trackrefs - linkConversionsByTrackRef(singleConversionHandle, superCluster, *singleConversions, singleConversionMap); + linkConversionsByTrackRef(singleConversionHandle, superCluster, singleConversions, singleConversionMap); } //loop over output OOTSuperClusters and fill maps if (!ootPhotonT_.isUninitialized()) { index = 0; - for (auto& ootSuperCluster : *ootSuperClusters) { + for (auto& ootSuperCluster : ootSuperClusters) { //link seed cluster no matter what const reco::CaloClusterPtr& ootSeedCluster = ootSuperCluster.seed(); - linkCaloCluster(ootSeedCluster, *ootEbeeClusters, ootEbeeClusterMap); + linkCaloCluster(ootSeedCluster, ootEbeeClusters, ootEbeeClusterMap); //only proceed if ootSuperCluster is marked for full relinking bool fullrelink = ootSuperClusterFullRelinkMap.count(index++); @@ -584,13 +733,13 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the // link calo clusters linkCaloClusters(ootSuperCluster, - *ootEbeeClusters, + ootEbeeClusters, ootEbeeClusterMap, rechitMap, barrelHitHandle, endcapHitHandle, caloTopology, - *ootEsClusters, + ootEsClusters, ootEsClusterMap); } } @@ -599,45 +748,43 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the //rechits (fill output collections of rechits to be stored) for (const EcalRecHit& rechit : *barrelHitHandle) { if (rechitMap.count(rechit.detid())) { - ebRecHits->push_back(rechit); + ebRecHits.push_back(rechit); } } for (const EcalRecHit& rechit : *endcapHitHandle) { if (rechitMap.count(rechit.detid())) { - eeRecHits->push_back(rechit); + eeRecHits.push_back(rechit); } } - theEvent.put(std::move(ebRecHits), outEBRecHits_); - theEvent.put(std::move(eeRecHits), outEERecHits_); + event.emplace(outEBRecHits_, std::move(ebRecHits)); + event.emplace(outEERecHits_, std::move(eeRecHits)); if (doPreshowerEcalHits_) { for (const EcalRecHit& rechit : *preshowerHitHandle) { if (rechitMap.count(rechit.detid())) { - esRecHits->push_back(rechit); + esRecHits.push_back(rechit); } } - theEvent.put(std::move(esRecHits), outESRecHits_); + event.emplace(outESRecHits_, std::move(esRecHits)); } for (const HBHERecHit& rechit : *hbheHitHandle) { if (hcalRechitMap.count(rechit.detid())) { - hbheRecHits->push_back(rechit); + hbheRecHits.push_back(rechit); } } - theEvent.put(std::move(hbheRecHits), outHBHERecHits_); + event.emplace(outHBHERecHits_, std::move(hbheRecHits)); //CaloClusters //put calocluster output collections in event and get orphan handles to create ptrs - const edm::OrphanHandle& outEBEEClusterHandle = - theEvent.put(std::move(ebeeClusters), outEBEEClusters_); - const edm::OrphanHandle& outESClusterHandle = - theEvent.put(std::move(esClusters), outESClusters_); + const auto& outEBEEClusterHandle = event.emplace(outEBEEClusters_, std::move(ebeeClusters)); + const auto& outESClusterHandle = event.emplace(outESClusters_, std::move(esClusters)); ; //Loop over SuperClusters and relink GEDPhoton + GSFElectron CaloClusters - for (reco::SuperCluster& superCluster : *superClusters) { + for (reco::SuperCluster& superCluster : superClusters) { relinkCaloClusters(superCluster, ebeeClusterMap, esClusterMap, outEBEEClusterHandle, outESClusterHandle); } @@ -647,25 +794,21 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the edm::OrphanHandle outOOTESClusterHandle; //Loop over OOTSuperClusters and relink OOTPhoton CaloClusters if (!ootPhotonT_.isUninitialized()) { - outOOTEBEEClusterHandle = theEvent.put(std::move(ootEbeeClusters), outOOTEBEEClusters_); - outOOTESClusterHandle = theEvent.put(std::move(ootEsClusters), outOOTESClusters_); - for (reco::SuperCluster& ootSuperCluster : *ootSuperClusters) { + outOOTEBEEClusterHandle = event.emplace(outOOTEBEEClusters_, std::move(ootEbeeClusters)); + outOOTESClusterHandle = event.emplace(outOOTESClusters_, std::move(ootEsClusters)); + for (reco::SuperCluster& ootSuperCluster : ootSuperClusters) { relinkCaloClusters( ootSuperCluster, ootEbeeClusterMap, ootEsClusterMap, outOOTEBEEClusterHandle, outOOTESClusterHandle); } } //put superclusters and conversions in the event - const edm::OrphanHandle& outSuperClusterHandle = - theEvent.put(std::move(superClusters), outSuperClusters_); - const edm::OrphanHandle& outConversionHandle = - theEvent.put(std::move(conversions), outConversions_); - const edm::OrphanHandle& outSingleConversionHandle = - theEvent.put(std::move(singleConversions), outSingleConversions_); - const edm::OrphanHandle& outGsfTrackHandle = - theEvent.put(std::move(gsfTracks), outGsfTracks_); + const auto& outSuperClusterHandle = event.emplace(outSuperClusters_, std::move(superClusters)); + const auto& outConversionHandle = event.emplace(outConversions_, std::move(conversions)); + const auto& outSingleConversionHandle = event.emplace(outSingleConversions_, std::move(singleConversions)); + const auto& outGsfTrackHandle = event.emplace(outGsfTracks_, std::move(gsfTracks)); //Loop over PhotonCores and relink GEDPhoton SuperClusters (and conversions) - for (reco::PhotonCore& photonCore : *photonCores) { + for (reco::PhotonCore& photonCore : photonCores) { // superclusters relinkSuperCluster(photonCore, superClusterMap, outSuperClusterHandle); @@ -679,7 +822,7 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the } //Relink GSFElectron SuperClusters and main GSF Tracks - for (reco::GsfElectronCore& gsfElectronCore : *gsfElectronCores) { + for (reco::GsfElectronCore& gsfElectronCore : gsfElectronCores) { relinkSuperCluster(gsfElectronCore, superClusterMap, outSuperClusterHandle); relinkGsfTrack(gsfElectronCore, gsfTrackMap, outGsfTrackHandle); } @@ -687,44 +830,40 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the //put ootsuperclusters in the event edm::OrphanHandle outOOTSuperClusterHandle; if (!ootPhotonT_.isUninitialized()) - outOOTSuperClusterHandle = theEvent.put(std::move(ootSuperClusters), outOOTSuperClusters_); + outOOTSuperClusterHandle = event.emplace(outOOTSuperClusters_, std::move(ootSuperClusters)); //Relink OOTPhoton SuperClusters - for (reco::PhotonCore& ootPhotonCore : *ootPhotonCores) { + for (reco::PhotonCore& ootPhotonCore : ootPhotonCores) { relinkSuperCluster(ootPhotonCore, ootSuperClusterMap, outOOTSuperClusterHandle); } //put photoncores and gsfelectroncores into the event - const edm::OrphanHandle& outPhotonCoreHandle = - theEvent.put(std::move(photonCores), outPhotonCores_); + const auto& outPhotonCoreHandle = event.emplace(outPhotonCores_, std::move(photonCores)); edm::OrphanHandle outOOTPhotonCoreHandle; if (!ootPhotonT_.isUninitialized()) - outOOTPhotonCoreHandle = theEvent.put(std::move(ootPhotonCores), outOOTPhotonCores_); - const edm::OrphanHandle& outgsfElectronCoreHandle = - theEvent.put(std::move(gsfElectronCores), outGsfElectronCores_); + outOOTPhotonCoreHandle = event.emplace(outOOTPhotonCores_, std::move(ootPhotonCores)); + const auto& outgsfElectronCoreHandle = event.emplace(outGsfElectronCores_, std::move(gsfElectronCores)); //loop over photons, oot photons, and electrons and relink the cores - for (reco::Photon& photon : *photons) { + for (reco::Photon& photon : photons) { relinkPhotonCore(photon, photonCoreMap, outPhotonCoreHandle); } if (!ootPhotonT_.isUninitialized()) { - for (reco::Photon& ootPhoton : *ootPhotons) { + for (reco::Photon& ootPhoton : ootPhotons) { relinkPhotonCore(ootPhoton, ootPhotonCoreMap, outOOTPhotonCoreHandle); } } - for (reco::GsfElectron& gsfElectron : *gsfElectrons) { + for (reco::GsfElectron& gsfElectron : gsfElectrons) { relinkGsfElectronCore(gsfElectron, gsfElectronCoreMap, outgsfElectronCoreHandle); // ----- // Also in this loop let's relink ambiguous tracks std::vector ambigTracksInThisElectron; // Here we loop over the ambiguous tracks and save them in a vector - for (reco::GsfTrackRefVector::const_iterator igsf = gsfElectron.ambiguousGsfTracksBegin(); - igsf != gsfElectron.ambiguousGsfTracksEnd(); - ++igsf) { - ambigTracksInThisElectron.push_back(*igsf); + for (auto const& igsf : gsfElectron.ambiguousGsfTracks()) { + ambigTracksInThisElectron.push_back(igsf); } // Now we need to clear them (they are the refs to original collection): @@ -748,69 +887,62 @@ void ReducedEGProducer::produce(edm::Event& theEvent, const edm::EventSetup& the } //(finally) store the output photon and electron collections - const edm::OrphanHandle& outPhotonHandle = theEvent.put(std::move(photons), outPhotons_); + const auto& outPhotonHandle = event.emplace(outPhotons_, std::move(photons)); edm::OrphanHandle outOOTPhotonHandle; if (!ootPhotonT_.isUninitialized()) - outOOTPhotonHandle = theEvent.put(std::move(ootPhotons), outOOTPhotons_); - const edm::OrphanHandle& outGsfElectronHandle = - theEvent.put(std::move(gsfElectrons), outGsfElectrons_); + outOOTPhotonHandle = event.emplace(outOOTPhotons_, std::move(ootPhotons)); + const auto& outGsfElectronHandle = event.emplace(outGsfElectrons_, std::move(gsfElectrons)); //still need to output relinked valuemaps //photon pfcand isolation valuemap - edm::ValueMap>::Filler fillerPhotons(*photonPfCandMap); + edm::ValueMap>::Filler fillerPhotons(photonPfCandMap); fillerPhotons.insert(outPhotonHandle, pfCandIsoPairVecPho.begin(), pfCandIsoPairVecPho.end()); fillerPhotons.fill(); //electron pfcand isolation valuemap - edm::ValueMap>::Filler fillerGsfElectrons(*gsfElectronPfCandMap); + edm::ValueMap>::Filler fillerGsfElectrons(gsfElectronPfCandMap); fillerGsfElectrons.insert(outGsfElectronHandle, pfCandIsoPairVecEle.begin(), pfCandIsoPairVecEle.end()); fillerGsfElectrons.fill(); - theEvent.put(std::move(photonPfCandMap), outPhotonPfCandMap_); - theEvent.put(std::move(gsfElectronPfCandMap), outGsfElectronPfCandMap_); - - auto fillMap = [](auto refH, auto& vec, edm::Event& ev, const std::string& cAl = "") { - typedef edm::ValueMap::type::value_type> MapType; - auto oMap = std::make_unique(); - { - typename MapType::Filler filler(*oMap); - filler.insert(refH, vec.begin(), vec.end()); - filler.fill(); - } - ev.put(std::move(oMap), cAl); - }; + event.emplace(outPhotonPfCandMap_, std::move(photonPfCandMap)); + event.emplace(outGsfElectronPfCandMap_, std::move(gsfElectronPfCandMap)); //photon id value maps index = 0; for (auto const& vals : photonIdVals) { - fillMap(outPhotonHandle, vals, theEvent, outPhotonIds_[index++]); + emplaceValueMap(outPhotonHandle, vals, event, outPhotonIds_[index++]); } //electron id value maps index = 0; for (auto const& vals : gsfElectronIdVals) { - fillMap(outGsfElectronHandle, vals, theEvent, outGsfElectronIds_[index++]); + emplaceValueMap(outGsfElectronHandle, vals, event, outGsfElectronIds_[index++]); } // photon iso value maps index = 0; for (auto const& vals : photonFloatValueMapVals) { - fillMap(outPhotonHandle, vals, theEvent, outPhotonFloatValueMaps_[index++]); + emplaceValueMap(outPhotonHandle, vals, event, outPhotonFloatValueMaps_[index++]); } if (!ootPhotonT_.isUninitialized()) { //oot photon iso value maps index = 0; for (auto const& vals : ootPhotonFloatValueMapVals) { - fillMap(outOOTPhotonHandle, vals, theEvent, outOOTPhotonFloatValueMaps_[index++]); + emplaceValueMap(outOOTPhotonHandle, vals, event, outOOTPhotonFloatValueMaps_[index++]); } } + // HI photon iso value maps + if (!recoHIPhotonIsolationMapInputToken_.isUninitialized()) { + emplaceValueMap(outPhotonHandle, recoHIPhotonIsolationMapInputVals, event, recoHIPhotonIsolationMapOutputName_); + } + //electron iso value maps index = 0; for (auto const& vals : gsfElectronFloatValueMapVals) { - fillMap(outGsfElectronHandle, vals, theEvent, outGsfElectronFloatValueMaps_[index++]); + emplaceValueMap(outGsfElectronHandle, vals, event, outGsfElectronFloatValueMaps_[index++]); } } @@ -908,7 +1040,7 @@ void ReducedEGProducer::linkCaloClusters(const reco::SuperCluster& superCluster, std::unordered_set& rechitMap, const edm::Handle& barrelHitHandle, const edm::Handle& endcapHitHandle, - const CaloTopology* caloTopology, + CaloTopology const& caloTopology, reco::CaloClusterCollection& esClusters, std::map& esClusterMap) { for (const auto& cluster : superCluster.clusters()) { @@ -923,7 +1055,7 @@ void ReducedEGProducer::linkCaloClusters(const reco::SuperCluster& superCluster, DetId seed = EcalClusterTools::getMaximum(*cluster, rhcol).first; std::vector dets5x5 = - caloTopology->getSubdetectorTopology(DetId::Ecal, barrel ? EcalBarrel : EcalEndcap)->getWindow(seed, 5, 5); + caloTopology.getSubdetectorTopology(DetId::Ecal, barrel ? EcalBarrel : EcalEndcap)->getWindow(seed, 5, 5); for (const auto& detid : dets5x5) { rechitMap.insert(detid); } @@ -1087,7 +1219,6 @@ void ReducedEGProducer::calibrateElectron(reco::GsfElectron& electron, electron.setCorrectedEcalEnergy(newEcalEnergy); electron.setCorrectedEcalEnergyError(newEcalEnergyErr); - math::XYZTLorentzVector newP4 = - math::XYZTLorentzVector(oldP4.x() * corr, oldP4.y() * corr, oldP4.z() * corr, newEnergy); + math::XYZTLorentzVector newP4{oldP4.x() * corr, oldP4.y() * corr, oldP4.z() * corr, newEnergy}; electron.correctMomentum(newP4, electron.trackMomentumError(), newEnergyErr); } diff --git a/RecoEgamma/EgammaPhotonProducers/src/SealModule.cc b/RecoEgamma/EgammaPhotonProducers/src/SealModule.cc deleted file mode 100644 index 9c4ad9f1d2b76..0000000000000 --- a/RecoEgamma/EgammaPhotonProducers/src/SealModule.cc +++ /dev/null @@ -1,26 +0,0 @@ -#include "FWCore/PluginManager/interface/ModuleDef.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" -#include "RecoEgamma/EgammaPhotonProducers/interface/PhotonCoreProducer.h" -#include "RecoEgamma/EgammaPhotonProducers/interface/PhotonProducer.h" -#include "RecoEgamma/EgammaPhotonProducers/interface/ConvertedPhotonProducer.h" -#include "RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackCandidateProducer.h" -#include "RecoEgamma/EgammaPhotonProducers/interface/TrackProducerWithSCAssociation.h" -#include "RecoEgamma/EgammaPhotonProducers/interface/ConversionProducer.h" -#include "RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackProducer.h" -#include "RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackMerger.h" -#include "RecoEgamma/EgammaPhotonProducers/interface/GEDPhotonCoreProducer.h" -#include "RecoEgamma/EgammaPhotonProducers/interface/GEDPhotonProducer.h" -#include "RecoEgamma/EgammaPhotonProducers/interface/ReducedEGProducer.h" - -DEFINE_FWK_MODULE(PhotonCoreProducer); -DEFINE_FWK_MODULE(PhotonProducer); -DEFINE_FWK_MODULE(ConvertedPhotonProducer); -DEFINE_FWK_MODULE(ConversionTrackCandidateProducer); -DEFINE_FWK_MODULE(TrackProducerWithSCAssociation); -DEFINE_FWK_MODULE(ConversionProducer); -DEFINE_FWK_MODULE(ConversionTrackProducer); -DEFINE_FWK_MODULE(ConversionTrackMerger); -DEFINE_FWK_MODULE(GEDPhotonCoreProducer); -DEFINE_FWK_MODULE(GEDPhotonProducer); -DEFINE_FWK_MODULE(ReducedEGProducer); diff --git a/RecoEgamma/EgammaPhotonProducers/src/TrackProducerWithSCAssociation.cc b/RecoEgamma/EgammaPhotonProducers/src/TrackProducerWithSCAssociation.cc index 0640dcc4efb7a..8d1c10f4943d5 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/TrackProducerWithSCAssociation.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/TrackProducerWithSCAssociation.cc @@ -1,21 +1,66 @@ -#include "RecoEgamma/EgammaPhotonProducers/interface/TrackProducerWithSCAssociation.h" -// system include files -#include -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" +/** \class TrackProducerWithSCAssociation + ** + ** + ** \author Nancy Marinelli, U. of Notre Dame, US + ** Modified version of TrackProducer by Giuseppe Cerati + ** to have super cluster - conversion track association + ** + ***/ + +#include "DataFormats/CaloRecHit/interface/CaloCluster.h" +#include "DataFormats/EgammaTrackReco/interface/TrackCaloClusterAssociation.h" +#include "DataFormats/EgammaTrackReco/interface/TrackCandidateCaloClusterAssociation.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "RecoTracker/TrackProducer/interface/TrackProducerAlgorithm.h" +#include "RecoTracker/TrackProducer/interface/TrackProducerBase.h" #include "TrackingTools/GeomPropagators/interface/Propagator.h" +#include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" #include "TrackingTools/PatternTools/interface/Trajectory.h" #include "TrackingTools/TrackFitters/interface/TrajectoryFitter.h" -#include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" +#include "TrackingTools/TransientTrack/interface/TransientTrack.h" #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHitBuilder.h" -#include "RecoTracker/TrackProducer/interface/TrackProducerBase.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "DataFormats/EgammaTrackReco/interface/TrackCaloClusterAssociation.h" -#include "DataFormats/CaloRecHit/interface/CaloCluster.h" +class TrackProducerWithSCAssociation : public TrackProducerBase, public edm::stream::EDProducer<> { +public: + explicit TrackProducerWithSCAssociation(const edm::ParameterSet& iConfig); + + void produce(edm::Event&, const edm::EventSetup&) override; + + std::vector getTransient(edm::Event&, const edm::EventSetup&); + +private: + std::string myname_; + TrackProducerAlgorithm theAlgo; + std::string conversionTrackCandidateProducer_; + std::string trackCSuperClusterAssociationCollection_; + std::string trackSuperClusterAssociationCollection_; + edm::EDGetTokenT assoc_token; + edm::OrphanHandle rTracks_; + edm::EDGetTokenT measurementTrkToken_; + bool myTrajectoryInEvent_; + bool validTrackCandidateSCAssociationInput_; + + //Same recipe as Ursula's for electrons. Copy this from TrackProducerBase to get the OrphanHandle + //ugly temporary solution!! I agree ! + void putInEvt(edm::Event& evt, + const Propagator* thePropagator, + const MeasurementTracker* theMeasTk, + std::unique_ptr selHits, + std::unique_ptr selTracks, + std::unique_ptr selTrackExtras, + std::unique_ptr> selTrajectories, + AlgoProductCollection& algoResults, + TransientTrackingRecHitBuilder const* hitBuilder, + const TrackerTopology* ttopo); +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(TrackProducerWithSCAssociation); TrackProducerWithSCAssociation::TrackProducerWithSCAssociation(const edm::ParameterSet& iConfig) : TrackProducerBase(iConfig.getParameter("TrajectoryInEvent")), theAlgo(iConfig) { diff --git a/RecoEgamma/EgammaTools/BuildFile.xml b/RecoEgamma/EgammaTools/BuildFile.xml index 193dafb9d1fc4..4557f9cbd48e8 100644 --- a/RecoEgamma/EgammaTools/BuildFile.xml +++ b/RecoEgamma/EgammaTools/BuildFile.xml @@ -10,7 +10,7 @@ - + diff --git a/RecoEgamma/EgammaTools/interface/EGEnergyCorrector.h b/RecoEgamma/EgammaTools/interface/EGEnergyCorrector.h index 9e837faedada1..32f37d6d13659 100644 --- a/RecoEgamma/EgammaTools/interface/EGEnergyCorrector.h +++ b/RecoEgamma/EgammaTools/interface/EGEnergyCorrector.h @@ -12,50 +12,41 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h" +#include + class GBRForest; class EGEnergyCorrector { public: - EGEnergyCorrector(); ~EGEnergyCorrector(); void Initialize(const edm::EventSetup &iSetup, std::string regweights, bool weightsFromDB = false); - Bool_t IsInitialized() const { return fIsInitialized; } + bool IsInitialized() const { return fIsInitialized; } std::pair CorrectedEnergyWithError(const reco::Photon &p, const reco::VertexCollection &vtxcol, EcalClusterLazyTools &clustertools, - const edm::EventSetup &es); - std::pair CorrectedEnergyWithError(const reco::GsfElectron &e, - const reco::VertexCollection &vtxcol, - EcalClusterLazyTools &clustertools, - const edm::EventSetup &es); + CaloGeometry const &caloGeometry); std::pair CorrectedEnergyWithErrorV3(const reco::Photon &p, const reco::VertexCollection &vtxcol, double rho, EcalClusterLazyTools &clustertools, - const edm::EventSetup &es, + CaloGeometry const &caloGeometry, bool applyRescale = false); - std::pair CorrectedEnergyWithErrorV3(const reco::GsfElectron &e, - const reco::VertexCollection &vtxcol, - double rho, - EcalClusterLazyTools &clustertools, - const edm::EventSetup &es); protected: - const GBRForest *fReadereb; - const GBRForest *fReaderebvariance; - const GBRForest *fReaderee; - const GBRForest *fReadereevariance; - - Bool_t fIsInitialized; - Bool_t fOwnsForests; - Float_t *fVals; + const GBRForest *fReadereb = nullptr; + const GBRForest *fReaderebvariance = nullptr; + const GBRForest *fReaderee = nullptr; + const GBRForest *fReadereevariance = nullptr; + + bool fIsInitialized = false; + bool fOwnsForests = false; + std::array fVals; }; #endif diff --git a/RecoEgamma/EgammaTools/interface/EgammaBDTOutputTransformer.h b/RecoEgamma/EgammaTools/interface/EgammaBDTOutputTransformer.h index 1b8d4a33f505a..a78e68d2f9a7e 100644 --- a/RecoEgamma/EgammaTools/interface/EgammaBDTOutputTransformer.h +++ b/RecoEgamma/EgammaTools/interface/EgammaBDTOutputTransformer.h @@ -16,8 +16,8 @@ class EgammaBDTOutputTransformer { double operator()(const double rawVal) const { return offset_ + scale_ * vdt::fast_sin(rawVal); } private: - const double offset_; - const double scale_; + double offset_; + double scale_; }; #endif diff --git a/RecoEgamma/EgammaTools/interface/EgammaHGCALIDParamDefaults.h b/RecoEgamma/EgammaTools/interface/EgammaHGCALIDParamDefaults.h new file mode 100644 index 0000000000000..3327cdbeefdcf --- /dev/null +++ b/RecoEgamma/EgammaTools/interface/EgammaHGCALIDParamDefaults.h @@ -0,0 +1,8 @@ +#ifndef RecoEgamma_EgammaTools_interface_EgammaHGCALIDParamDefaults_h +#define RecoEgamma_EgammaTools_interface_EgammaHGCALIDParamDefaults_h + +struct EgammaHGCALIDParamDefaults { + static constexpr float kRCylinder = 2.8; +}; + +#endif diff --git a/RecoEgamma/EgammaTools/interface/EgammaRegressionContainer.h b/RecoEgamma/EgammaTools/interface/EgammaRegressionContainer.h index f8f9033a8fcae..e2d7f4ef06141 100644 --- a/RecoEgamma/EgammaTools/interface/EgammaRegressionContainer.h +++ b/RecoEgamma/EgammaTools/interface/EgammaRegressionContainer.h @@ -11,7 +11,7 @@ // to always be in the high et training #include "CondFormats/DataRecord/interface/GBRDWrapperRcd.h" -#include "CondFormats/EgammaObjects/interface/GBRForestD.h" +#include "CondFormats/GBRForest/interface/GBRForestD.h" #include "RecoEgamma/EgammaTools/interface/EgammaBDTOutputTransformer.h" #include "FWCore/Utilities/interface/ESGetToken.h" diff --git a/RecoEgamma/EgammaTools/interface/HGCalClusterTools.h b/RecoEgamma/EgammaTools/interface/HGCalClusterTools.h new file mode 100644 index 0000000000000..bfb94fa14d8e2 --- /dev/null +++ b/RecoEgamma/EgammaTools/interface/HGCalClusterTools.h @@ -0,0 +1,44 @@ +#ifndef RecoEgamma_EgammaTools_HGCalClusterTools_h +#define RecoEgamma_EgammaTools_HGCalClusterTools_h + +#include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h" +#include + +class HGCalClusterTools { +public: + enum class EType { ET, ENERGY }; + + static float energyInCone(const float eta, + const float phi, + const std::vector& layerClusters, + const float minDR, + const float maxDR, + const float minEt, + const float minEnergy, + const std::vector& subDets, + const HGCalClusterTools::EType& eType = EType::ENERGY); + + static float hadEnergyInCone(const float eta, + const float phi, + const std::vector& layerClusters, + const float minDR, + const float maxDR, + const float minEt, + const float minEnergy, + const HGCalClusterTools::EType& eType = EType::ENERGY) { + return energyInCone( + eta, phi, layerClusters, minDR, maxDR, minEt, minEnergy, {DetId::HGCalHSi, DetId::HGCalHSc}, eType); + } + static float emEnergyInCone(const float eta, + const float phi, + const std::vector& layerClusters, + const float minDR, + const float maxDR, + const float minEt, + const float minEnergy, + const HGCalClusterTools::EType& eType = EType::ENERGY) { + return energyInCone(eta, phi, layerClusters, minDR, maxDR, minEt, minEnergy, {DetId::HGCalEE}, eType); + } +}; + +#endif diff --git a/RecoEgamma/EgammaTools/interface/HGCalShowerShapeHelper.h b/RecoEgamma/EgammaTools/interface/HGCalShowerShapeHelper.h new file mode 100644 index 0000000000000..f74a291d001a6 --- /dev/null +++ b/RecoEgamma/EgammaTools/interface/HGCalShowerShapeHelper.h @@ -0,0 +1,176 @@ +#ifndef RecoEgamma_EgammaTools_HGCalShowerShapeHelper_h +#define RecoEgamma_EgammaTools_HGCalShowerShapeHelper_h + +// system include files +#include +#include +#include +#include +#include +#include +#include +#include + +// external include files +#include +#include +#include +#include +#include + +// CMSSW include files +#include "DataFormats/CaloRecHit/interface/CaloCluster.h" +#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" +#include "DataFormats/FWLite/interface/ESHandle.h" +#include "DataFormats/ForwardDetId/interface/HGCEEDetId.h" +#include "DataFormats/ForwardDetId/interface/HGCalDetId.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHit.h" +#include "DataFormats/Math/interface/LorentzVector.h" +#include "DataFormats/ParticleFlowReco/interface/PFRecHit.h" +#include "DataFormats/ParticleFlowReco/interface/PFRecHitFraction.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/StreamID.h" +#include "FWCore/Utilities/interface/Transition.h" +#include "Geometry/CaloTopology/interface/HGCalTopology.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" +#include "RecoLocalCalo/HGCalRecAlgos/interface/RecHitTools.h" +#include "RecoParticleFlow/PFClusterProducer/interface/InitialClusteringStepBase.h" + +class HGCalShowerShapeHelper { + // Good to filter/compute/store this stuff beforehand as they are common to the shower shape variables. + // No point in filtering, computing layer-wise centroids, etc. for each variable again and again. + // Once intitialized, one can the calculate different variables one after another for a given object. + // This is all handled by ShowerShapeCalc class which caches the layer-wise centroids and other + // heavy variables for an object + set of cuts + // It was changed to this approach so that we could use this in constant functions + + // In principle should consider the HGCalHSi and HGCalHSc hits (leakage) also. + // Can have subdetector dependent thresholds and layer selection. + // To be implemented. + +public: + static const double kLDWaferCellSize_; + static const double kHDWaferCellSize_; + + struct ShowerWidths { + double sigma2xx; + double sigma2yy; + double sigma2zz; + + double sigma2xy; + double sigma2yz; + double sigma2zx; + + double sigma2uu; + double sigma2vv; + double sigma2ww; + + ShowerWidths() + : sigma2xx(0.0), + sigma2yy(0.0), + sigma2zz(0.0), + sigma2xy(0.0), + sigma2yz(0.0), + sigma2zx(0.0), + sigma2uu(0.0), + sigma2vv(0.0), + sigma2ww(0.0) {} + }; + + class ShowerShapeCalc { + public: + ShowerShapeCalc(std::shared_ptr recHitTools, + std::shared_ptr > pfRecHitPtrMap, + const std::vector > &hitsAndFracs, + const double rawEnergy, + const double minHitE = 0, + const double minHitET = 0, + const int minLayer = 1, + const int maxLayer = -1, + DetId::Detector subDet = DetId::HGCalEE); + + double getCellSize(DetId detId) const; + + // Compute Rvar in a cylinder around the layer centroids + double getRvar(double cylinderR, bool useFractions = true, bool useCellSize = true) const; + + // Compute PCA widths around the layer centroids + ShowerWidths getPCAWidths(double cylinderR, bool useFractions = false) const; + + std::vector getEnergyHighestHits(unsigned int nrHits, bool useFractions = true) const; + + private: + void setFilteredHitsAndFractions(const std::vector > &hitsAndFracs); + void setLayerWiseInfo(); + + std::shared_ptr recHitTools_; + std::shared_ptr > pfRecHitPtrMap_; + double rawEnergy_; + + double minHitE_; + double minHitET_; + double minHitET2_; + int minLayer_; + int maxLayer_; + int nLayer_; + DetId::Detector subDet_; + + std::vector > hitsAndFracs_; + std::vector hitEnergies_; + std::vector hitEnergiesWithFracs_; + + ROOT::Math::XYZVector centroid_; + std::vector layerEnergies_; + std::vector layerCentroids_; + }; + + HGCalShowerShapeHelper(); + HGCalShowerShapeHelper(edm::ConsumesCollector &&sumes); + ~HGCalShowerShapeHelper() = default; + HGCalShowerShapeHelper(const HGCalShowerShapeHelper &rhs) = delete; + HGCalShowerShapeHelper(const HGCalShowerShapeHelper &&rhs) = delete; + HGCalShowerShapeHelper &operator=(const HGCalShowerShapeHelper &rhs) = delete; + HGCalShowerShapeHelper &operator=(const HGCalShowerShapeHelper &&rhs) = delete; + + template + void setTokens(edm::ConsumesCollector consumesCollector) { + caloGeometryToken_ = consumesCollector.esConsumes(); + } + + void initPerSetup(const edm::EventSetup &iSetup); + void initPerEvent(const std::vector &recHits); + void initPerEvent(const edm::EventSetup &iSetup, const std::vector &recHits); + + HGCalShowerShapeHelper::ShowerShapeCalc createCalc(const std::vector > &hitsAndFracs, + double rawEnergy, + double minHitE = 0, + double minHitET = 0, + int minLayer = 1, + int maxLayer = -1, + DetId::Detector subDet = DetId::HGCalEE) const; + HGCalShowerShapeHelper::ShowerShapeCalc createCalc(const reco::SuperCluster &sc, + double minHitE = 0, + double minHitET = 0, + int minLayer = 1, + int maxLayer = -1, + DetId::Detector subDet = DetId::HGCalEE) const { + return createCalc(sc.hitsAndFractions(), sc.rawEnergy(), minHitE, minHitET, minLayer, maxLayer, subDet); + } + +private: + void setPFRecHitPtrMap(const std::vector &recHits); + + edm::ESGetToken caloGeometryToken_; + std::shared_ptr recHitTools_; + std::shared_ptr > pfRecHitPtrMap_; +}; + +#endif diff --git a/RecoEgamma/EgammaTools/interface/SCRegressionCalculator.h b/RecoEgamma/EgammaTools/interface/SCRegressionCalculator.h index 970b8f3db695a..3bbafcd7bef72 100644 --- a/RecoEgamma/EgammaTools/interface/SCRegressionCalculator.h +++ b/RecoEgamma/EgammaTools/interface/SCRegressionCalculator.h @@ -2,7 +2,7 @@ #define __SCREGRESSIONCALCULATOR_H__ #include "CondFormats/DataRecord/interface/GBRWrapperRcd.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" diff --git a/RecoEgamma/EgammaTools/plugins/BuildFile.xml b/RecoEgamma/EgammaTools/plugins/BuildFile.xml index 48d61856e7c04..c934ab2fe9ffd 100644 --- a/RecoEgamma/EgammaTools/plugins/BuildFile.xml +++ b/RecoEgamma/EgammaTools/plugins/BuildFile.xml @@ -5,7 +5,7 @@ - + diff --git a/RecoEgamma/EgammaTools/plugins/CalibratedElectronProducers.cc b/RecoEgamma/EgammaTools/plugins/CalibratedElectronProducers.cc index cbba887dbf76f..219d12971d228 100644 --- a/RecoEgamma/EgammaTools/plugins/CalibratedElectronProducers.cc +++ b/RecoEgamma/EgammaTools/plugins/CalibratedElectronProducers.cc @@ -24,7 +24,7 @@ #include "DataFormats/Common/interface/ValueMap.h" #include "CondFormats/DataRecord/interface/GBRDWrapperRcd.h" -#include "CondFormats/EgammaObjects/interface/GBRForestD.h" +#include "CondFormats/GBRForest/interface/GBRForestD.h" #include "RecoEgamma/EgammaTools/interface/EpCombinationTool.h" #include "RecoEgamma/EgammaTools/interface/ElectronEnergyCalibrator.h" #include "RecoEgamma/EgammaTools/interface/EGEnergySysIndex.h" diff --git a/RecoEgamma/EgammaTools/plugins/EGEnergyAnalyzer.cc b/RecoEgamma/EgammaTools/plugins/EGEnergyAnalyzer.cc index 6cbcac625b005..992be35f2d9e5 100644 --- a/RecoEgamma/EgammaTools/plugins/EGEnergyAnalyzer.cc +++ b/RecoEgamma/EgammaTools/plugins/EGEnergyAnalyzer.cc @@ -93,17 +93,19 @@ void EGEnergyAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& Handle hPhotonProduct; iEvent.getByLabel("photons", hPhotonProduct); - EcalClusterLazyTools lazyTools(iEvent, ecalClusterToolsESGetTokens_.get(iSetup), ebRHToken_, eeRHToken_); + auto const& ecalClusterToolsESData = ecalClusterToolsESGetTokens_.get(iSetup); + auto const& caloGeometry = ecalClusterToolsESData.caloGeometry; + EcalClusterLazyTools lazyTools(iEvent, ecalClusterToolsESData, ebRHToken_, eeRHToken_); Handle hVertexProduct; iEvent.getByLabel("offlinePrimaryVerticesWithBS", hVertexProduct); - for (reco::PhotonCollection::const_iterator it = hPhotonProduct->begin(); it != hPhotonProduct->end(); ++it) { - std::pair corsfile = corfile.CorrectedEnergyWithError(*it, *hVertexProduct, lazyTools, iSetup); - std::pair corsdb = cordb.CorrectedEnergyWithError(*it, *hVertexProduct, lazyTools, iSetup); + for (auto const& it : *hPhotonProduct) { + std::pair corsfile = corfile.CorrectedEnergyWithError(it, *hVertexProduct, lazyTools, caloGeometry); + std::pair corsdb = cordb.CorrectedEnergyWithError(it, *hVertexProduct, lazyTools, caloGeometry); - printf("file: default = %5f, correction = %5f, uncertainty = %5f\n", it->energy(), corsfile.first, corsfile.second); - printf("db: default = %5f, correction = %5f, uncertainty = %5f\n", it->energy(), corsdb.first, corsdb.second); + printf("file: default = %5f, correction = %5f, uncertainty = %5f\n", it.energy(), corsfile.first, corsfile.second); + printf("db: default = %5f, correction = %5f, uncertainty = %5f\n", it.energy(), corsdb.first, corsdb.second); } } diff --git a/RecoEgamma/EgammaTools/plugins/EGExtraInfoModifierFromValueMaps.cc b/RecoEgamma/EgammaTools/plugins/EGExtraInfoModifierFromValueMaps.cc index 3ae841c81750e..c0ea0bce9953b 100644 --- a/RecoEgamma/EgammaTools/plugins/EGExtraInfoModifierFromValueMaps.cc +++ b/RecoEgamma/EgammaTools/plugins/EGExtraInfoModifierFromValueMaps.cc @@ -1,6 +1,7 @@ #include "RecoEgamma/EgammaTools/interface/EGExtraInfoModifierFromValueMaps.h" #include "DataFormats/EgammaCandidates/interface/HIPhotonIsolation.h" +#include "DataFormats/PatCandidates/interface/PackedCandidate.h" using EGExtraInfoModifierFromFloatValueMaps = EGExtraInfoModifierFromValueMaps; DEFINE_EDM_PLUGIN(ModifyObjectValueFactory, @@ -45,3 +46,8 @@ using EGExtraInfoModifierFromEGIDValueMaps = EGExtraInfoModifierFromValueMaps >; +DEFINE_EDM_PLUGIN(ModifyObjectValueFactory, + EGExtraInfoModifierFromPackedCandPtrValueMaps, + "EGExtraInfoModifierFromPackedCandPtrValueMaps"); diff --git a/RecoEgamma/EgammaTools/plugins/EGRegressionModifierHelpers.h b/RecoEgamma/EgammaTools/plugins/EGRegressionModifierHelpers.h index 5deb256ff1d90..b0e0d2fc71c50 100644 --- a/RecoEgamma/EgammaTools/plugins/EGRegressionModifierHelpers.h +++ b/RecoEgamma/EgammaTools/plugins/EGRegressionModifierHelpers.h @@ -2,7 +2,7 @@ #define RecoEgamma_EgammaTools_EGRegressionModifier_H #include "CondFormats/DataRecord/interface/GBRDWrapperRcd.h" -#include "CondFormats/EgammaObjects/interface/GBRForestD.h" +#include "CondFormats/GBRForest/interface/GBRForestD.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Utilities/interface/ESGetToken.h" #include "FWCore/Framework/interface/ConsumesCollector.h" diff --git a/RecoEgamma/EgammaTools/plugins/EGRegressionModifierV1.cc b/RecoEgamma/EgammaTools/plugins/EGRegressionModifierV1.cc index 078afbf8a85f1..1a6a214a001dd 100644 --- a/RecoEgamma/EgammaTools/plugins/EGRegressionModifierV1.cc +++ b/RecoEgamma/EgammaTools/plugins/EGRegressionModifierV1.cc @@ -1,5 +1,5 @@ #include "CondFormats/DataRecord/interface/GBRWrapperRcd.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "DataFormats/EcalDetId/interface/EBDetId.h" #include "DataFormats/EcalDetId/interface/EEDetId.h" #include "RecoEgamma/EgammaTools/plugins/EGRegressionModifierHelpers.h" diff --git a/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py b/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py index f0fd50c481616..351cb21abf91c 100644 --- a/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py +++ b/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py @@ -141,8 +141,7 @@ def setup_mva(val_pset,cat_pset,prod_name,mva_name): modifierName = cms.string('EGExtraInfoModifierFromHIPhotonIsolationValueMaps'), electron_config = cms.PSet(), photon_config = cms.PSet( - photonSrc = cms.InputTag("gedPhotons"), - photonIsolationHI = cms.InputTag("photonIsolationHIProducerppGED") + photonIsolationHI = cms.InputTag("reducedEgamma:photonIsolationHIProducerppGED") ) ) diff --git a/RecoEgamma/EgammaTools/src/EGEnergyCorrector.cc b/RecoEgamma/EgammaTools/src/EGEnergyCorrector.cc index 9c3edb0434db1..9056d462c32b1 100644 --- a/RecoEgamma/EgammaTools/src/EGEnergyCorrector.cc +++ b/RecoEgamma/EgammaTools/src/EGEnergyCorrector.cc @@ -1,10 +1,9 @@ #include #include "RecoEgamma/EgammaTools/interface/EGEnergyCorrector.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "CondFormats/DataRecord/interface/GBRWrapperRcd.h" #include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" #include "DataFormats/Math/interface/deltaPhi.h" #include "DataFormats/EcalDetId/interface/EcalSubdetector.h" #include "DataFormats/VertexReco/interface/Vertex.h" @@ -14,23 +13,8 @@ using namespace reco; -//-------------------------------------------------------------------------------------------------- -EGEnergyCorrector::EGEnergyCorrector() - : fReadereb(nullptr), - fReaderebvariance(nullptr), - fReaderee(nullptr), - fReadereevariance(nullptr), - fIsInitialized(kFALSE), - fOwnsForests(kFALSE), - fVals(nullptr) { - // Constructor. -} - //-------------------------------------------------------------------------------------------------- EGEnergyCorrector::~EGEnergyCorrector() { - if (fVals) - delete[] fVals; - if (fOwnsForests) { if (fReadereb) delete fReadereb; @@ -45,10 +29,8 @@ EGEnergyCorrector::~EGEnergyCorrector() { //-------------------------------------------------------------------------------------------------- void EGEnergyCorrector::Initialize(const edm::EventSetup &iSetup, std::string regweights, bool weightsFromDB) { - fIsInitialized = kTRUE; + fIsInitialized = true; - if (fVals) - delete[] fVals; if (fOwnsForests) { if (fReadereb) delete fReadereb; @@ -60,7 +42,7 @@ void EGEnergyCorrector::Initialize(const edm::EventSetup &iSetup, std::string re delete fReadereevariance; } - fVals = new Float_t[73]; + fVals.fill(0.0f); if (weightsFromDB) { //weights from event setup @@ -80,7 +62,7 @@ void EGEnergyCorrector::Initialize(const edm::EventSetup &iSetup, std::string re fReadereevariance = readereevar.product(); } else { //weights from root file - fOwnsForests = kTRUE; + fOwnsForests = true; TFile *fgbr = TFile::Open(regweights.c_str(), "READ"); fReadereb = (GBRForest *)fgbr->Get("EBCorrection"); @@ -95,7 +77,7 @@ void EGEnergyCorrector::Initialize(const edm::EventSetup &iSetup, std::string re std::pair EGEnergyCorrector::CorrectedEnergyWithError(const Photon &p, const reco::VertexCollection &vtxcol, EcalClusterLazyTools &clustertools, - const edm::EventSetup &es) { + CaloGeometry const &caloGeometry) { const SuperClusterRef s = p.superCluster(); const CaloClusterPtr b = s->seed(); //seed basic cluster @@ -220,9 +202,7 @@ std::pair EGEnergyCorrector::CorrectedEnergyWithError(const Phot //seed cluster float betacry, bphicry, bthetatilt, bphitilt; int bieta, biphi; - edm::ESHandle caloGeometry; - es.get().get(caloGeometry); - egammaTools::localEcalClusterCoordsEB(*b, *caloGeometry, betacry, bphicry, bieta, biphi, bthetatilt, bphitilt); + egammaTools::localEcalClusterCoordsEB(*b, caloGeometry, betacry, bphicry, bieta, biphi, bthetatilt, bphitilt); fVals[56] = bieta; //crystal ieta fVals[57] = biphi; //crystal iphi @@ -240,7 +220,7 @@ std::pair EGEnergyCorrector::CorrectedEnergyWithError(const Phot int bc2ieta, bc2iphi; if (hasbc2) egammaTools::localEcalClusterCoordsEB( - *b2, *caloGeometry, bc2etacry, bc2phicry, bc2ieta, bc2iphi, bc2thetatilt, bc2phitilt); + *b2, caloGeometry, bc2etacry, bc2phicry, bc2ieta, bc2iphi, bc2thetatilt, bc2phitilt); fVals[64] = hasbc2 ? bc2ieta : 0.; fVals[65] = hasbc2 ? bc2iphi : 0.; @@ -280,206 +260,12 @@ std::pair EGEnergyCorrector::CorrectedEnergyWithError(const Phot readervar = fReadereevariance; } - Double_t ecor = reader->GetResponse(fVals) * den; - Double_t ecorerr = readervar->GetResponse(fVals) * den * varscale; - - //printf("ecor = %5f, ecorerr = %5f\n",ecor,ecorerr); - - return std::pair(ecor, ecorerr); -} - -//-------------------------------------------------------------------------------------------------- -std::pair EGEnergyCorrector::CorrectedEnergyWithError(const GsfElectron &e, - const reco::VertexCollection &vtxcol, - EcalClusterLazyTools &clustertools, - const edm::EventSetup &es) { - //apply v2 regression to electrons - //mostly duplicated from photon function above //TODO, make common underlying function - - //protection, this doesn't work properly on non-egamma-seeded electrons - if (!e.ecalDrivenSeed()) - return std::pair(0., 0.); - - const SuperClusterRef s = e.superCluster(); - const CaloClusterPtr b = s->seed(); - - CaloClusterPtr b2; - Double_t ebcmax = -99.; - for (reco::CaloCluster_iterator bit = s->clustersBegin(); bit != s->clustersEnd(); ++bit) { - const CaloClusterPtr bc = *bit; - if (bc->energy() > ebcmax && bc != b) { - b2 = bc; - ebcmax = bc->energy(); - } - } - - CaloClusterPtr bclast; - Double_t ebcmin = 1e6; - for (reco::CaloCluster_iterator bit = s->clustersBegin(); bit != s->clustersEnd(); ++bit) { - const CaloClusterPtr bc = *bit; - if (bc->energy() < ebcmin && bc != b) { - bclast = bc; - ebcmin = bc->energy(); - } - } - - CaloClusterPtr bclast2; - ebcmin = 1e6; - for (reco::CaloCluster_iterator bit = s->clustersBegin(); bit != s->clustersEnd(); ++bit) { - const CaloClusterPtr bc = *bit; - if (bc->energy() < ebcmin && bc != b && bc != bclast) { - bclast2 = bc; - ebcmin = bc->energy(); - } - } - - Bool_t isbarrel = b->hitsAndFractions().at(0).first.subdetId() == EcalBarrel; - Bool_t hasbc2 = b2.isNonnull() && b2->energy() > 0.; - Bool_t hasbclast = bclast.isNonnull() && bclast->energy() > 0.; - Bool_t hasbclast2 = bclast2.isNonnull() && bclast2->energy() > 0.; - - if (isbarrel) { - fVals[0] = s->rawEnergy(); - fVals[1] = clustertools.e3x3(*b) / s->rawEnergy(); //r9 - fVals[2] = s->eta(); - fVals[3] = s->phi(); - fVals[4] = clustertools.e5x5(*b) / s->rawEnergy(); - fVals[5] = e.hcalOverEcal(); - fVals[6] = s->etaWidth(); - fVals[7] = s->phiWidth(); - - double bemax = clustertools.eMax(*b); - double be2nd = clustertools.e2nd(*b); - double betop = clustertools.eTop(*b); - double bebottom = clustertools.eBottom(*b); - double beleft = clustertools.eLeft(*b); - double beright = clustertools.eRight(*b); - - fVals[8] = b->eta() - s->eta(); - fVals[9] = reco::deltaPhi(b->phi(), s->phi()); - fVals[10] = b->energy() / s->rawEnergy(); - fVals[11] = clustertools.e3x3(*b) / b->energy(); - fVals[12] = clustertools.e5x5(*b) / b->energy(); - fVals[13] = sqrt(clustertools.localCovariances(*b)[0]); - fVals[14] = sqrt(clustertools.localCovariances(*b)[2]); - fVals[15] = clustertools.localCovariances(*b)[1]; - fVals[16] = bemax / b->energy(); - fVals[17] = log(be2nd / bemax); - fVals[18] = log(betop / bemax); - fVals[19] = log(bebottom / bemax); - fVals[20] = log(beleft / bemax); - fVals[21] = log(beright / bemax); - fVals[22] = (betop - bebottom) / (betop + bebottom); - fVals[23] = (beleft - beright) / (beleft + beright); - - double bc2emax = hasbc2 ? clustertools.eMax(*b2) : 0.; - double bc2e2nd = hasbc2 ? clustertools.e2nd(*b2) : 0.; - double bc2etop = hasbc2 ? clustertools.eTop(*b2) : 0.; - double bc2ebottom = hasbc2 ? clustertools.eBottom(*b2) : 0.; - double bc2eleft = hasbc2 ? clustertools.eLeft(*b2) : 0.; - double bc2eright = hasbc2 ? clustertools.eRight(*b2) : 0.; - - fVals[24] = hasbc2 ? (b2->eta() - s->eta()) : 0.; - fVals[25] = hasbc2 ? reco::deltaPhi(b2->phi(), s->phi()) : 0.; - fVals[26] = hasbc2 ? b2->energy() / s->rawEnergy() : 0.; - fVals[27] = hasbc2 ? clustertools.e3x3(*b2) / b2->energy() : 0.; - fVals[28] = hasbc2 ? clustertools.e5x5(*b2) / b2->energy() : 0.; - fVals[29] = hasbc2 ? sqrt(clustertools.localCovariances(*b2)[0]) : 0.; - fVals[30] = hasbc2 ? sqrt(clustertools.localCovariances(*b2)[2]) : 0.; - fVals[31] = hasbc2 ? clustertools.localCovariances(*b)[1] : 0.; - fVals[32] = hasbc2 ? bc2emax / b2->energy() : 0.; - fVals[33] = hasbc2 ? log(bc2e2nd / bc2emax) : 0.; - fVals[34] = hasbc2 ? log(bc2etop / bc2emax) : 0.; - fVals[35] = hasbc2 ? log(bc2ebottom / bc2emax) : 0.; - fVals[36] = hasbc2 ? log(bc2eleft / bc2emax) : 0.; - fVals[37] = hasbc2 ? log(bc2eright / bc2emax) : 0.; - fVals[38] = hasbc2 ? (bc2etop - bc2ebottom) / (bc2etop + bc2ebottom) : 0.; - fVals[39] = hasbc2 ? (bc2eleft - bc2eright) / (bc2eleft + bc2eright) : 0.; - - fVals[40] = hasbclast ? (bclast->eta() - s->eta()) : 0.; - fVals[41] = hasbclast ? reco::deltaPhi(bclast->phi(), s->phi()) : 0.; - fVals[42] = hasbclast ? bclast->energy() / s->rawEnergy() : 0.; - fVals[43] = hasbclast ? clustertools.e3x3(*bclast) / bclast->energy() : 0.; - fVals[44] = hasbclast ? clustertools.e5x5(*bclast) / bclast->energy() : 0.; - fVals[45] = hasbclast ? sqrt(clustertools.localCovariances(*bclast)[0]) : 0.; - fVals[46] = hasbclast ? sqrt(clustertools.localCovariances(*bclast)[2]) : 0.; - fVals[47] = hasbclast ? clustertools.localCovariances(*bclast)[1] : 0.; - - fVals[48] = hasbclast2 ? (bclast2->eta() - s->eta()) : 0.; - fVals[49] = hasbclast2 ? reco::deltaPhi(bclast2->phi(), s->phi()) : 0.; - fVals[50] = hasbclast2 ? bclast2->energy() / s->rawEnergy() : 0.; - fVals[51] = hasbclast2 ? clustertools.e3x3(*bclast2) / bclast2->energy() : 0.; - fVals[52] = hasbclast2 ? clustertools.e5x5(*bclast2) / bclast2->energy() : 0.; - fVals[53] = hasbclast2 ? sqrt(clustertools.localCovariances(*bclast2)[0]) : 0.; - fVals[54] = hasbclast2 ? sqrt(clustertools.localCovariances(*bclast2)[2]) : 0.; - fVals[55] = hasbclast2 ? clustertools.localCovariances(*bclast2)[1] : 0.; - - float betacry, bphicry, bthetatilt, bphitilt; - int bieta, biphi; - edm::ESHandle caloGeometry; - es.get().get(caloGeometry); - egammaTools::localEcalClusterCoordsEB(*b, *caloGeometry, betacry, bphicry, bieta, biphi, bthetatilt, bphitilt); - - fVals[56] = bieta; - fVals[57] = biphi; - fVals[58] = bieta % 5; - fVals[59] = biphi % 2; - fVals[60] = (TMath::Abs(bieta) <= 25) * (bieta % 25) + - (TMath::Abs(bieta) > 25) * ((bieta - 25 * TMath::Abs(bieta) / bieta) % 20); - fVals[61] = biphi % 20; - fVals[62] = betacry; - fVals[63] = bphicry; - - float bc2etacry, bc2phicry, bc2thetatilt, bc2phitilt; - int bc2ieta, bc2iphi; - if (hasbc2) - egammaTools::localEcalClusterCoordsEB( - *b2, *caloGeometry, bc2etacry, bc2phicry, bc2ieta, bc2iphi, bc2thetatilt, bc2phitilt); - - fVals[64] = hasbc2 ? bc2ieta : 0.; - fVals[65] = hasbc2 ? bc2iphi : 0.; - fVals[66] = hasbc2 ? bc2ieta % 5 : 0.; - fVals[67] = hasbc2 ? bc2iphi % 2 : 0.; - fVals[68] = hasbc2 ? (TMath::Abs(bc2ieta) <= 25) * (bc2ieta % 25) + - (TMath::Abs(bc2ieta) > 25) * ((bc2ieta - 25 * TMath::Abs(bc2ieta) / bc2ieta) % 20) - : 0.; - fVals[69] = hasbc2 ? bc2iphi % 20 : 0.; - fVals[70] = hasbc2 ? bc2etacry : 0.; - fVals[71] = hasbc2 ? bc2phicry : 0.; - - fVals[72] = vtxcol.size(); - - } else { - fVals[0] = s->rawEnergy(); - fVals[1] = clustertools.e3x3(*b) / s->rawEnergy(); //r9 - fVals[2] = s->eta(); - fVals[3] = s->phi(); - fVals[4] = clustertools.e5x5(*b) / s->rawEnergy(); - fVals[5] = s->etaWidth(); - fVals[6] = s->phiWidth(); - fVals[7] = vtxcol.size(); - } - - const Double_t varscale = 1.253; - Double_t den; - const GBRForest *reader; - const GBRForest *readervar; - if (isbarrel) { - den = s->rawEnergy(); - reader = fReadereb; - readervar = fReaderebvariance; - } else { - den = s->rawEnergy() + s->preshowerEnergy(); - reader = fReaderee; - readervar = fReadereevariance; - } - - Double_t ecor = reader->GetResponse(fVals) * den; - Double_t ecorerr = readervar->GetResponse(fVals) * den * varscale; + Double_t ecor = reader->GetResponse(fVals.data()) * den; + Double_t ecorerr = readervar->GetResponse(fVals.data()) * den * varscale; //printf("ecor = %5f, ecorerr = %5f\n",ecor,ecorerr); - return std::pair(ecor, ecorerr); + return {ecor, ecorerr}; } //-------------------------------------------------------------------------------------------------- @@ -487,7 +273,7 @@ std::pair EGEnergyCorrector::CorrectedEnergyWithErrorV3(const Ph const reco::VertexCollection &vtxcol, double rho, EcalClusterLazyTools &clustertools, - const edm::EventSetup &es, + CaloGeometry const &caloGeometry, bool applyRescale) { const SuperClusterRef s = p.superCluster(); const CaloClusterPtr b = s->seed(); //seed basic cluster @@ -547,9 +333,7 @@ std::pair EGEnergyCorrector::CorrectedEnergyWithErrorV3(const Ph //seed cluster float betacry, bphicry, bthetatilt, bphitilt; int bieta, biphi; - edm::ESHandle caloGeometry; - es.get().get(caloGeometry); - egammaTools::localEcalClusterCoordsEB(*b, *caloGeometry, betacry, bphicry, bieta, biphi, bthetatilt, bphitilt); + egammaTools::localEcalClusterCoordsEB(*b, caloGeometry, betacry, bphicry, bieta, biphi, bthetatilt, bphitilt); fVals[30] = bieta; //crystal ieta fVals[31] = biphi; //crystal iphi @@ -585,7 +369,7 @@ std::pair EGEnergyCorrector::CorrectedEnergyWithErrorV3(const Ph readervar = fReadereevariance; } - Double_t ecor = reader->GetResponse(fVals) * den; + Double_t ecor = reader->GetResponse(fVals.data()) * den; //apply shower shape rescaling - for Monte Carlo only, and only for calculation of energy uncertainty if (applyRescale) { @@ -641,114 +425,9 @@ std::pair EGEnergyCorrector::CorrectedEnergyWithErrorV3(const Ph } } - Double_t ecorerr = readervar->GetResponse(fVals) * den; - - //printf("ecor = %5f, ecorerr = %5f\n",ecor,ecorerr); - - return std::pair(ecor, ecorerr); -} - -//-------------------------------------------------------------------------------------------------- -std::pair EGEnergyCorrector::CorrectedEnergyWithErrorV3(const GsfElectron &e, - const reco::VertexCollection &vtxcol, - double rho, - EcalClusterLazyTools &clustertools, - const edm::EventSetup &es) { - const SuperClusterRef s = e.superCluster(); - const CaloClusterPtr b = s->seed(); //seed basic cluster - - Bool_t isbarrel = b->hitsAndFractions().at(0).first.subdetId() == EcalBarrel; - - //basic supercluster variables - fVals[0] = s->rawEnergy(); - fVals[1] = s->eta(); - fVals[2] = s->phi(); - fVals[3] = clustertools.e3x3(*b) / s->rawEnergy(); //r9 - fVals[4] = clustertools.e5x5(*b) / s->rawEnergy(); - fVals[5] = s->etaWidth(); - fVals[6] = s->phiWidth(); - fVals[7] = s->clustersSize(); - fVals[8] = e.hcalOverEcalBc(); - fVals[9] = rho; - fVals[10] = vtxcol.size(); - - //seed basic cluster variables - double bemax = clustertools.eMax(*b); - double be2nd = clustertools.e2nd(*b); - double betop = clustertools.eTop(*b); - double bebottom = clustertools.eBottom(*b); - double beleft = clustertools.eLeft(*b); - double beright = clustertools.eRight(*b); - - double be2x5max = clustertools.e2x5Max(*b); - double be2x5top = clustertools.e2x5Top(*b); - double be2x5bottom = clustertools.e2x5Bottom(*b); - double be2x5left = clustertools.e2x5Left(*b); - double be2x5right = clustertools.e2x5Right(*b); - - fVals[11] = b->eta() - s->eta(); - fVals[12] = reco::deltaPhi(b->phi(), s->phi()); - fVals[13] = b->energy() / s->rawEnergy(); - fVals[14] = clustertools.e3x3(*b) / b->energy(); - fVals[15] = clustertools.e5x5(*b) / b->energy(); - fVals[16] = sqrt(clustertools.localCovariances(*b)[0]); //sigietaieta - fVals[17] = sqrt(clustertools.localCovariances(*b)[2]); //sigiphiiphi - fVals[18] = clustertools.localCovariances(*b)[1]; //sigietaiphi - fVals[19] = bemax / b->energy(); //crystal energy ratio gap variables - fVals[20] = be2nd / b->energy(); - fVals[21] = betop / b->energy(); - fVals[22] = bebottom / b->energy(); - fVals[23] = beleft / b->energy(); - fVals[24] = beright / b->energy(); - fVals[25] = be2x5max / b->energy(); //crystal energy ratio gap variables - fVals[26] = be2x5top / b->energy(); - fVals[27] = be2x5bottom / b->energy(); - fVals[28] = be2x5left / b->energy(); - fVals[29] = be2x5right / b->energy(); - - if (isbarrel) { - //local coordinates and crystal indices (barrel only) - - //seed cluster - float betacry, bphicry, bthetatilt, bphitilt; - int bieta, biphi; - edm::ESHandle caloGeometry; - es.get().get(caloGeometry); - egammaTools::localEcalClusterCoordsEB(*b, *caloGeometry, betacry, bphicry, bieta, biphi, bthetatilt, bphitilt); - - fVals[30] = bieta; //crystal ieta - fVals[31] = biphi; //crystal iphi - fVals[32] = bieta % 5; //submodule boundary eta symmetry - fVals[33] = biphi % 2; //submodule boundary phi symmetry - fVals[34] = (TMath::Abs(bieta) <= 25) * (bieta % 25) + - (TMath::Abs(bieta) > 25) * - ((bieta - 25 * TMath::Abs(bieta) / bieta) % 20); //module boundary eta approximate symmetry - fVals[35] = biphi % 20; //module boundary phi symmetry - fVals[36] = betacry; //local coordinates with respect to closest crystal center at nominal shower depth - fVals[37] = bphicry; - - } else { - //preshower energy ratio (endcap only) - fVals[30] = s->preshowerEnergy() / s->rawEnergy(); - } - - Double_t den; - const GBRForest *reader; - const GBRForest *readervar; - if (isbarrel) { - den = s->rawEnergy(); - reader = fReadereb; - readervar = fReaderebvariance; - } else { - den = s->rawEnergy() + s->preshowerEnergy(); - reader = fReaderee; - readervar = fReadereevariance; - } - - Double_t ecor = reader->GetResponse(fVals) * den; - Double_t ecorerr = readervar->GetResponse(fVals) * den; + Double_t ecorerr = readervar->GetResponse(fVals.data()) * den; //printf("ecor = %5f, ecorerr = %5f\n",ecor,ecorerr); - return std::pair(ecor, ecorerr); + return {ecor, ecorerr}; } diff --git a/RecoEgamma/EgammaTools/src/HGCalClusterTools.cc b/RecoEgamma/EgammaTools/src/HGCalClusterTools.cc new file mode 100644 index 0000000000000..abc06ae0ad512 --- /dev/null +++ b/RecoEgamma/EgammaTools/src/HGCalClusterTools.cc @@ -0,0 +1,56 @@ +#include "RecoEgamma/EgammaTools/interface/HGCalClusterTools.h" + +#include "DataFormats/CaloRecHit/interface/CaloCluster.h" +#include "DataFormats/Math/interface/deltaR.h" +#include "DataFormats/Math/interface/deltaPhi.h" + +float HGCalClusterTools::energyInCone(const float eta, + const float phi, + const std::vector& layerClusters, + const float minDR, + const float maxDR, + const float minEt, + const float minEnergy, + const std::vector& subDets, + const HGCalClusterTools::EType& eType) { + float hadValue = 0.; + + const float minDR2 = minDR * minDR; + const float maxDR2 = maxDR * maxDR; + + for (auto& clus : layerClusters) { + if (clus.energy() < minEnergy) { + continue; + } + + if (std::find(subDets.begin(), subDets.end(), clus.seed().det()) == subDets.end()) { + continue; + } + + float clusEt = clus.energy() * std::sin(clus.position().theta()); + if (clusEt < minEt) { + continue; + } + + //this is a prefilter on the clusters before we calculuate + //the expensive eta() of the cluster + float dPhi = reco::deltaPhi(phi, clus.phi()); + if (dPhi > maxDR) { + continue; + } + + float dR2 = reco::deltaR2(eta, phi, clus.eta(), clus.phi()); + if (dR2 < minDR2 || dR2 > maxDR2) { + continue; + } + switch (eType) { + case EType::ET: + hadValue += clusEt; + break; + case EType::ENERGY: + hadValue += clus.energy(); + break; + } + } + return hadValue; +} diff --git a/RecoEgamma/EgammaTools/src/HGCalShowerShapeHelper.cc b/RecoEgamma/EgammaTools/src/HGCalShowerShapeHelper.cc new file mode 100644 index 0000000000000..a070fa18bbe29 --- /dev/null +++ b/RecoEgamma/EgammaTools/src/HGCalShowerShapeHelper.cc @@ -0,0 +1,330 @@ +#include "RecoEgamma/EgammaTools/interface/HGCalShowerShapeHelper.h" + +const double HGCalShowerShapeHelper::kLDWaferCellSize_ = 0.698; +const double HGCalShowerShapeHelper::kHDWaferCellSize_ = 0.465; + +HGCalShowerShapeHelper::ShowerShapeCalc::ShowerShapeCalc( + std::shared_ptr recHitTools, + std::shared_ptr> pfRecHitPtrMap, + const std::vector> &hitsAndFracs, + const double rawEnergy, + const double minHitE, + const double minHitET, + const int minLayer, + const int maxLayer, + const DetId::Detector subDet) + : recHitTools_(recHitTools), + pfRecHitPtrMap_(pfRecHitPtrMap), + rawEnergy_(rawEnergy), + minHitE_(minHitE), + minHitET_(minHitET), + minHitET2_(minHitET * minHitET), + minLayer_(minLayer), + maxLayer_(maxLayer <= 0 ? recHitTools_->lastLayerEE() : maxLayer), + nLayer_(maxLayer_ - minLayer_ + 1), + subDet_(subDet) { + assert(nLayer_ > 0); + setFilteredHitsAndFractions(hitsAndFracs); + setLayerWiseInfo(); +} + +double HGCalShowerShapeHelper::ShowerShapeCalc::getCellSize(DetId detId) const { + return recHitTools_->getSiThickIndex(detId) == 0 ? kHDWaferCellSize_ : kLDWaferCellSize_; +} + +double HGCalShowerShapeHelper::ShowerShapeCalc::getRvar(double cylinderR, bool useFractions, bool useCellSize) const { + if (hitsAndFracs_.empty()) { + return 0.0; + } + + if (rawEnergy_ <= 0.0) { + edm::LogWarning("HGCalShowerShapeHelper") + << "Encountered negative or zero energy for HGCal R-variable denominator: " << rawEnergy_ << std::endl; + } + + double cylinderR2 = cylinderR * cylinderR; + + double rVar = 0.0; + + auto hitEnergyIter = useFractions ? hitEnergiesWithFracs_.begin() : hitEnergies_.begin(); + + hitEnergyIter--; + + for (const auto &hnf : hitsAndFracs_) { + hitEnergyIter++; + + DetId hitId = hnf.first; + + int hitLayer = recHitTools_->getLayer(hitId) - 1; + + const auto &hitPos = recHitTools_->getPosition(hitId); + ROOT::Math::XYZVector hitXYZ(hitPos.x(), hitPos.y(), hitPos.z()); + + auto distXYZ = hitXYZ - layerCentroids_[hitLayer]; + + double r2 = distXYZ.x() * distXYZ.x() + distXYZ.y() * distXYZ.y(); + + // Including the cell size seems to make the variable less sensitive to the HD/LD transition region + if (useCellSize) { + if (std::sqrt(r2) > cylinderR + getCellSize(hitId)) { + continue; + } + } + + else if (r2 > cylinderR2) { + continue; + } + + rVar += *hitEnergyIter; + } + + rVar /= rawEnergy_; + + return rVar; +} + +HGCalShowerShapeHelper::ShowerWidths HGCalShowerShapeHelper::ShowerShapeCalc::getPCAWidths(double cylinderR, + bool useFractions) const { + if (hitsAndFracs_.empty()) { + return ShowerWidths(); + } + + double cylinderR2 = cylinderR * cylinderR; + + TMatrixD covMat(3, 3); + + double dxdx = 0.0; + double dydy = 0.0; + double dzdz = 0.0; + + double dxdy = 0.0; + double dydz = 0.0; + double dzdx = 0.0; + + double totalW = 0.0; + + auto hitEnergyIter = useFractions ? hitEnergiesWithFracs_.begin() : hitEnergies_.begin(); + + int nHit = 0; + hitEnergyIter--; + + for (const auto &hnf : hitsAndFracs_) { + hitEnergyIter++; + + DetId hitId = hnf.first; + + const auto &hitPos = recHitTools_->getPosition(hitId); + ROOT::Math::XYZVector hitXYZ(hitPos.x(), hitPos.y(), hitPos.z()); + + int hitLayer = recHitTools_->getLayer(hitId) - 1; + + ROOT::Math::XYZVector radXYZ = hitXYZ - layerCentroids_[hitLayer]; + + double r2 = radXYZ.x() * radXYZ.x() + radXYZ.y() * radXYZ.y(); + + if (r2 > cylinderR2) { + continue; + } + + ROOT::Math::XYZVector dXYZ = hitXYZ - centroid_; + + double weight = *hitEnergyIter; + totalW += weight; + + dxdx += weight * dXYZ.x() * dXYZ.x(); + dydy += weight * dXYZ.y() * dXYZ.y(); + dzdz += weight * dXYZ.z() * dXYZ.z(); + + dxdy += weight * dXYZ.x() * dXYZ.y(); + dydz += weight * dXYZ.y() * dXYZ.z(); + dzdx += weight * dXYZ.z() * dXYZ.x(); + + nHit++; + } + + if (!totalW || nHit < 2) { + return ShowerWidths(); + } + + dxdx /= totalW; + dydy /= totalW; + dzdz /= totalW; + + dxdy /= totalW; + dydz /= totalW; + dzdx /= totalW; + + covMat(0, 0) = dxdx; + covMat(1, 1) = dydy; + covMat(2, 2) = dzdz; + + covMat(0, 1) = covMat(1, 0) = dxdy; + covMat(0, 2) = covMat(2, 0) = dzdx; + covMat(1, 2) = covMat(2, 1) = dydz; + + if (!covMat.Sum()) { + return ShowerWidths(); + } + + // Get eigen values and vectors + TVectorD eigVals(3); + TMatrixD eigVecMat(3, 3); + + eigVecMat = covMat.EigenVectors(eigVals); + + ShowerWidths returnWidths; + + returnWidths.sigma2xx = dxdx; + returnWidths.sigma2yy = dydy; + returnWidths.sigma2zz = dzdz; + + returnWidths.sigma2xy = dxdy; + returnWidths.sigma2yz = dydz; + returnWidths.sigma2zx = dzdx; + + returnWidths.sigma2uu = eigVals(1); + returnWidths.sigma2vv = eigVals(2); + returnWidths.sigma2ww = eigVals(0); + + return returnWidths; +} + +std::vector HGCalShowerShapeHelper::ShowerShapeCalc::getEnergyHighestHits(unsigned int nrHits, + bool useFractions) const { + std::vector sortedEnergies(nrHits, 0.); + const auto &hits = useFractions ? hitEnergiesWithFracs_ : hitEnergies_; + std::partial_sort_copy( + hits.begin(), hits.end(), sortedEnergies.begin(), sortedEnergies.end(), std::greater()); + return sortedEnergies; +} + +void HGCalShowerShapeHelper::ShowerShapeCalc::setFilteredHitsAndFractions( + const std::vector> &hitsAndFracs) { + hitsAndFracs_.clear(); + hitEnergies_.clear(); + hitEnergiesWithFracs_.clear(); + + for (const auto &hnf : hitsAndFracs) { + DetId hitId = hnf.first; + float hitEfrac = hnf.second; + + int hitLayer = recHitTools_->getLayer(hitId); + + if (hitLayer > nLayer_) { + continue; + } + + if (hitId.det() != subDet_) { + continue; + } + auto hitIt = pfRecHitPtrMap_->find(hitId.rawId()); + if (hitIt == pfRecHitPtrMap_->end()) { + continue; + } + + const reco::PFRecHit &recHit = *hitIt->second; + + if (recHit.energy() < minHitE_) { + continue; + } + + if (recHit.pt2() < minHitET2_) { + continue; + } + + // Fill the vectors + hitsAndFracs_.push_back(hnf); + hitEnergies_.push_back(recHit.energy()); + hitEnergiesWithFracs_.push_back(recHit.energy() * hitEfrac); + } +} + +void HGCalShowerShapeHelper::ShowerShapeCalc::setLayerWiseInfo() { + layerEnergies_.clear(); + layerEnergies_.resize(nLayer_); + + layerCentroids_.clear(); + layerCentroids_.resize(nLayer_); + + centroid_.SetXYZ(0, 0, 0); + + int iHit = -1; + double totalW = 0.0; + + // Compute the centroid per layer + for (const auto &hnf : hitsAndFracs_) { + iHit++; + + DetId hitId = hnf.first; + + double weight = hitEnergies_[iHit]; + totalW += weight; + + const auto &hitPos = recHitTools_->getPosition(hitId); + ROOT::Math::XYZVector hitXYZ(hitPos.x(), hitPos.y(), hitPos.z()); + + centroid_ += weight * hitXYZ; + + int hitLayer = recHitTools_->getLayer(hitId) - 1; + + layerEnergies_[hitLayer] += weight; + layerCentroids_[hitLayer] += weight * hitXYZ; + } + + int iLayer = -1; + + for (auto ¢roid : layerCentroids_) { + iLayer++; + + if (layerEnergies_[iLayer]) { + centroid /= layerEnergies_[iLayer]; + } + } + + if (totalW) { + centroid_ /= totalW; + } +} + +HGCalShowerShapeHelper::HGCalShowerShapeHelper() + : recHitTools_(std::make_shared()), + pfRecHitPtrMap_(std::make_shared>()) {} + +HGCalShowerShapeHelper::HGCalShowerShapeHelper(edm::ConsumesCollector &&sumes) + : recHitTools_(std::make_shared()), + pfRecHitPtrMap_(std::make_shared>()) { + setTokens(sumes); +} + +void HGCalShowerShapeHelper::initPerSetup(const edm::EventSetup &iSetup) { + recHitTools_->setGeometry(iSetup.getData(caloGeometryToken_)); +} + +void HGCalShowerShapeHelper::initPerEvent(const std::vector &pfRecHits) { + setPFRecHitPtrMap(pfRecHits); +} + +void HGCalShowerShapeHelper::initPerEvent(const edm::EventSetup &iSetup, const std::vector &pfRecHits) { + initPerSetup(iSetup); + initPerEvent(pfRecHits); +} + +HGCalShowerShapeHelper::ShowerShapeCalc HGCalShowerShapeHelper::createCalc( + const std::vector> &hitsAndFracs, + double rawEnergy, + double minHitE, + double minHitET, + int minLayer, + int maxLayer, + DetId::Detector subDet) const { + return ShowerShapeCalc( + recHitTools_, pfRecHitPtrMap_, hitsAndFracs, rawEnergy, minHitE, minHitET, minLayer, maxLayer, subDet); +} + +void HGCalShowerShapeHelper::setPFRecHitPtrMap(const std::vector &recHits) { + pfRecHitPtrMap_->clear(); + + for (const auto &recHit : recHits) { + (*pfRecHitPtrMap_)[recHit.detId()] = &recHit; + } +} diff --git a/RecoEgamma/EgammaTools/test/BuildFile.xml b/RecoEgamma/EgammaTools/test/BuildFile.xml index aead3d3348f7d..411b5983f8bde 100644 --- a/RecoEgamma/EgammaTools/test/BuildFile.xml +++ b/RecoEgamma/EgammaTools/test/BuildFile.xml @@ -2,6 +2,6 @@ - + diff --git a/RecoEgamma/EgammaTools/test/GBRWrapperMaker.cc b/RecoEgamma/EgammaTools/test/GBRWrapperMaker.cc index 7db8f13f780b4..d1173bdff3500 100644 --- a/RecoEgamma/EgammaTools/test/GBRWrapperMaker.cc +++ b/RecoEgamma/EgammaTools/test/GBRWrapperMaker.cc @@ -29,7 +29,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "TFile.h" -#include "CondFormats/EgammaObjects/interface/GBRForestD.h" +#include "CondFormats/GBRForest/interface/GBRForestD.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "CondCore/DBOutputService/interface/PoolDBOutputService.h" diff --git a/RecoEgamma/ElectronIdentification/BuildFile.xml b/RecoEgamma/ElectronIdentification/BuildFile.xml index 069892cc0b198..42e38970d1813 100644 --- a/RecoEgamma/ElectronIdentification/BuildFile.xml +++ b/RecoEgamma/ElectronIdentification/BuildFile.xml @@ -1,4 +1,4 @@ - + diff --git a/RecoEgamma/ElectronIdentification/interface/ElectronMVAEstimator.h b/RecoEgamma/ElectronIdentification/interface/ElectronMVAEstimator.h index ad8abafc8e1b6..e1aceecc329c4 100644 --- a/RecoEgamma/ElectronIdentification/interface/ElectronMVAEstimator.h +++ b/RecoEgamma/ElectronIdentification/interface/ElectronMVAEstimator.h @@ -2,7 +2,7 @@ #define __RecoEgamma_ElectronIdentification_ElectronMVAEstimator_H__ #include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include #include diff --git a/RecoEgamma/ElectronIdentification/interface/SoftElectronMVAEstimator.h b/RecoEgamma/ElectronIdentification/interface/SoftElectronMVAEstimator.h index 3392e6ce578f6..19da25f3ae3e9 100644 --- a/RecoEgamma/ElectronIdentification/interface/SoftElectronMVAEstimator.h +++ b/RecoEgamma/ElectronIdentification/interface/SoftElectronMVAEstimator.h @@ -4,7 +4,7 @@ #include "DataFormats/EgammaCandidates/interface/GsfElectron.h" #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include #include diff --git a/RecoEgamma/ElectronIdentification/plugins/cuts/GsfEleConversionVetoCut.cc b/RecoEgamma/ElectronIdentification/plugins/cuts/GsfEleConversionVetoCut.cc index 1f416063c687c..c9ebad2c7c373 100644 --- a/RecoEgamma/ElectronIdentification/plugins/cuts/GsfEleConversionVetoCut.cc +++ b/RecoEgamma/ElectronIdentification/plugins/cuts/GsfEleConversionVetoCut.cc @@ -3,6 +3,7 @@ #include "DataFormats/EgammaCandidates/interface/ConversionFwd.h" #include "DataFormats/EgammaCandidates/interface/Conversion.h" #include "CommonTools/Egamma/interface/ConversionTools.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" class GsfEleConversionVetoCut : public CutApplicatorWithEventContentBase { public: diff --git a/RecoEgamma/ElectronIdentification/plugins/cuts/GsfEleDEtaInSeedCut.cc b/RecoEgamma/ElectronIdentification/plugins/cuts/GsfEleDEtaInSeedCut.cc deleted file mode 100644 index b777de5a8418c..0000000000000 --- a/RecoEgamma/ElectronIdentification/plugins/cuts/GsfEleDEtaInSeedCut.cc +++ /dev/null @@ -1,41 +0,0 @@ -#include "PhysicsTools/SelectorUtils/interface/CutApplicatorBase.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" - -class GsfEleDEtaInSeedCut : public CutApplicatorBase { -public: - GsfEleDEtaInSeedCut(const edm::ParameterSet& c) - : CutApplicatorBase(c), - _dEtaInSeedCutValueEB(c.getParameter("dEtaInSeedCutValueEB")), - _dEtaInSeedCutValueEE(c.getParameter("dEtaInSeedCutValueEE")), - _barrelCutOff(c.getParameter("barrelCutOff")) {} - - result_type operator()(const reco::GsfElectronPtr&) const final; - - double value(const reco::CandidatePtr& cand) const final; - - CandidateType candidateType() const final { return ELECTRON; } - -private: - const double _dEtaInSeedCutValueEB, _dEtaInSeedCutValueEE, _barrelCutOff; -}; - -DEFINE_EDM_PLUGIN(CutApplicatorFactory, GsfEleDEtaInSeedCut, "GsfEleDEtaInSeedCut"); - -//a little temporary 72X fix -float dEtaInSeed(const reco::GsfElectronPtr& ele) { - return ele->superCluster().isNonnull() && ele->superCluster()->seed().isNonnull() - ? ele->deltaEtaSuperClusterTrackAtVtx() - ele->superCluster()->eta() + ele->superCluster()->seed()->eta() - : std::numeric_limits::max(); -} - -CutApplicatorBase::result_type GsfEleDEtaInSeedCut::operator()(const reco::GsfElectronPtr& cand) const { - const float dEtaInSeedCutValue = - (std::abs(cand->superCluster()->eta()) < _barrelCutOff ? _dEtaInSeedCutValueEB : _dEtaInSeedCutValueEE); - // return std::abs(cand->deltaEtaSeedClusterTrackAtVtx()) < dEtaInSeedCutValue; - return std::abs(dEtaInSeed(cand)) < dEtaInSeedCutValue; -} - -double GsfEleDEtaInSeedCut::value(const reco::CandidatePtr& cand) const { - reco::GsfElectronPtr ele(cand); - return std::abs(dEtaInSeed(ele)); -} diff --git a/RecoEgamma/ElectronIdentification/plugins/cuts/GsfEleDPhiInCut.cc b/RecoEgamma/ElectronIdentification/plugins/cuts/GsfEleDPhiInCut.cc deleted file mode 100644 index 46bb3f8904f83..0000000000000 --- a/RecoEgamma/ElectronIdentification/plugins/cuts/GsfEleDPhiInCut.cc +++ /dev/null @@ -1,34 +0,0 @@ -#include "PhysicsTools/SelectorUtils/interface/CutApplicatorBase.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" - -class GsfEleDPhiInCut : public CutApplicatorBase { -public: - GsfEleDPhiInCut(const edm::ParameterSet& c) - : CutApplicatorBase(c), - _dPhiInCutValueEB(c.getParameter("dPhiInCutValueEB")), - _dPhiInCutValueEE(c.getParameter("dPhiInCutValueEE")), - _barrelCutOff(c.getParameter("barrelCutOff")) {} - - result_type operator()(const reco::GsfElectronPtr&) const final; - - double value(const reco::CandidatePtr& cand) const final; - - CandidateType candidateType() const final { return ELECTRON; } - -private: - const double _dPhiInCutValueEB, _dPhiInCutValueEE, _barrelCutOff; -}; - -DEFINE_EDM_PLUGIN(CutApplicatorFactory, GsfEleDPhiInCut, "GsfEleDPhiInCut"); - -CutApplicatorBase::result_type GsfEleDPhiInCut::operator()(const reco::GsfElectronPtr& cand) const { - const float dPhiInCutValue = - (std::abs(cand->superCluster()->position().eta()) < _barrelCutOff ? _dPhiInCutValueEB : _dPhiInCutValueEE); - return std::abs(cand->deltaPhiSuperClusterTrackAtVtx()) < dPhiInCutValue; -} - -double GsfEleDPhiInCut::value(const reco::CandidatePtr& cand) const { - reco::GsfElectronPtr ele(cand); - return std::abs(ele->deltaPhiSuperClusterTrackAtVtx()); -} diff --git a/RecoEgamma/ElectronIdentification/python/Identification/heepElectronID_tools.py b/RecoEgamma/ElectronIdentification/python/Identification/heepElectronID_tools.py index 0fd0f1a7fb85c..4121662281620 100644 --- a/RecoEgamma/ElectronIdentification/python/Identification/heepElectronID_tools.py +++ b/RecoEgamma/ElectronIdentification/python/Identification/heepElectronID_tools.py @@ -171,10 +171,10 @@ def psetGsfEleSCEtaMultiRangeCut(): # Configure the cut on the dEtaIn for the seed def psetGsfEleDEtaInSeedCut(wpEB, wpEE): return cms.PSet( - cutName = cms.string('GsfEleDEtaInSeedCut'), - dEtaInSeedCutValueEB = cms.double( wpEB.dEtaInSeedCut ), - dEtaInSeedCutValueEE = cms.double( wpEE.dEtaInSeedCut ), - barrelCutOff = cms.double(ebCutOff), + cutName = cms.string('GsfEleEBEECut'), + cutString = cms.string("abs(deltaEtaSeedClusterTrackAtVtx)"), + cutValueEB = cms.double( wpEB.dEtaInSeedCut ), + cutValueEE = cms.double( wpEE.dEtaInSeedCut ), needsAdditionalProducts = cms.bool(False), isIgnored = cms.bool(False) ) @@ -182,10 +182,10 @@ def psetGsfEleDEtaInSeedCut(wpEB, wpEE): # Configure the cut on the dPhiIn def psetGsfEleDPhiInCut(wpEB, wpEE): return cms.PSet( - cutName = cms.string('GsfEleDPhiInCut'), - dPhiInCutValueEB = cms.double( wpEB.dPhiInCut ), - dPhiInCutValueEE = cms.double( wpEE.dPhiInCut ), - barrelCutOff = cms.double(ebCutOff), + cutName = cms.string('GsfEleEBEECut'), + cutString = cms.string("abs(deltaPhiSuperClusterTrackAtVtx)"), + cutValueEB = cms.double( wpEB.dPhiInCut ), + cutValueEE = cms.double( wpEE.dPhiInCut ), needsAdditionalProducts = cms.bool(False), isIgnored = cms.bool(False) ) diff --git a/RecoEgamma/ElectronIdentification/src/ElectronMVAEstimatorRun2.cc b/RecoEgamma/ElectronIdentification/src/ElectronMVAEstimatorRun2.cc index 1f66daa4b1c28..6f14e0f499546 100644 --- a/RecoEgamma/ElectronIdentification/src/ElectronMVAEstimatorRun2.cc +++ b/RecoEgamma/ElectronIdentification/src/ElectronMVAEstimatorRun2.cc @@ -1,5 +1,6 @@ #include "RecoEgamma/ElectronIdentification/interface/ElectronMVAEstimatorRun2.h" #include "RecoEgamma/EgammaTools/interface/MVAVariableHelper.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" ElectronMVAEstimatorRun2::ElectronMVAEstimatorRun2(const edm::ParameterSet& conf) : AnyMVAEstimatorRun2Base(conf), diff --git a/RecoEgamma/ElectronIdentification/src/SoftElectronMVAEstimator.cc b/RecoEgamma/ElectronIdentification/src/SoftElectronMVAEstimator.cc index 834fb060b1700..f648382e2637f 100644 --- a/RecoEgamma/ElectronIdentification/src/SoftElectronMVAEstimator.cc +++ b/RecoEgamma/ElectronIdentification/src/SoftElectronMVAEstimator.cc @@ -4,6 +4,7 @@ #include "DataFormats/GsfTrackReco/interface/GsfTrack.h" #include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" #include "CommonTools/MVAUtils/interface/GBRForestTools.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" SoftElectronMVAEstimator::SoftElectronMVAEstimator(const Configuration& cfg) : cfg_(cfg) { //Check number of weight files given diff --git a/RecoEgamma/Examples/plugins/BuildFile.xml b/RecoEgamma/Examples/plugins/BuildFile.xml index b59607c7a476c..f2bf80e5412a6 100644 --- a/RecoEgamma/Examples/plugins/BuildFile.xml +++ b/RecoEgamma/Examples/plugins/BuildFile.xml @@ -1,7 +1,5 @@ - - @@ -31,15 +29,11 @@ - - - - diff --git a/RecoEgamma/Examples/plugins/DQMAnalyzer.cc b/RecoEgamma/Examples/plugins/DQMAnalyzer.cc index 608328b653552..2d3beba9f7984 100644 --- a/RecoEgamma/Examples/plugins/DQMAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/DQMAnalyzer.cc @@ -7,47 +7,281 @@ Description: GsfElectrons analyzer using reco data - Implementation: - */ // -// Original Author: Ursula Berthon +// Original Author: Ursula Berthon, Claude Charlot // Created: Mon Mar 27 13:22:06 CEST 2006 // // -// user include files -#include "RecoEgamma/Examples/plugins/DQMAnalyzer.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/TriggerResults.h" +#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" +#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" +#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "FWCore/Common/interface/TriggerNames.h" #include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Common/interface/TriggerNames.h" - -#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/EgammaReco/interface/BasicClusterFwd.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include "DataFormats/EgammaReco/interface/ElectronSeed.h" -#include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" -#include "DataFormats/JetReco/interface/CaloJetCollection.h" -#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" -#include "DataFormats/Common/interface/TriggerResults.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" #include "CLHEP/Units/GlobalPhysicalConstants.h" -#include -#include "TMath.h" + #include "TFile.h" #include "TH1F.h" -#include "TH1I.h" #include "TH2F.h" -#include "TProfile.h" #include "TTree.h" -#include + #include +#include + +class DQMAnalyzer : public edm::one::EDAnalyzer<> { +public: + explicit DQMAnalyzer(const edm::ParameterSet &conf); + + ~DQMAnalyzer() override; + + void beginJob() override; + void endJob() override; + void analyze(const edm::Event &e, const edm::EventSetup &c) override; + +private: + //========================================= + // parameters + //========================================= + + std::string outputFile_; + edm::InputTag electronCollection_; + edm::InputTag matchingObjectCollection_; + edm::InputTag beamSpot_; + std::string matchingCondition_; + bool readAOD_; + + // matching + double maxPtMatchingObject_; + double maxAbsEtaMatchingObject_; + double deltaR_; + + // tag and probe + int Selection_; + double massLow_; + double massHigh_; + bool TPchecksign_; + bool TAGcheckclass_; + bool PROBEetcut_; + bool PROBEcheckclass_; + + // electron selection + double minEt_; + double minPt_; + double maxAbsEta_; + bool isEB_; + bool isEE_; + bool isNotEBEEGap_; + bool isEcalDriven_; + bool isTrackerDriven_; + double eOverPMinBarrel_; + double eOverPMaxBarrel_; + double eOverPMinEndcaps_; + double eOverPMaxEndcaps_; + double dEtaMinBarrel_; + double dEtaMaxBarrel_; + double dEtaMinEndcaps_; + double dEtaMaxEndcaps_; + double dPhiMinBarrel_; + double dPhiMaxBarrel_; + double dPhiMinEndcaps_; + double dPhiMaxEndcaps_; + double sigIetaIetaMinBarrel_; + double sigIetaIetaMaxBarrel_; + double sigIetaIetaMinEndcaps_; + double sigIetaIetaMaxEndcaps_; + double hadronicOverEmMaxBarrel_; + double hadronicOverEmMaxEndcaps_; + double mvaMin_; + double tipMaxBarrel_; + double tipMaxEndcaps_; + double tkIso03Max_; + double hcalIso03Depth1MaxBarrel_; + double hcalIso03Depth1MaxEndcaps_; + double hcalIso03Depth2MaxEndcaps_; + double ecalIso03MaxBarrel_; + double ecalIso03MaxEndcaps_; + + // for trigger + edm::InputTag triggerResults_; + std::vector HLTPathsByName_; + + // histos limits and binning + int nbineta; + int nbineta2D; + double etamin; + double etamax; + int nbinphi; + int nbinphi2D; + double phimin; + double phimax; + int nbinpt; + int nbinpteff; + int nbinpt2D; + double ptmax; + int nbinp; + int nbinp2D; + double pmax; + int nbineop; + int nbineop2D; + double eopmax; + double eopmaxsht; + int nbindeta; + double detamin; + double detamax; + int nbindphi; + double dphimin; + double dphimax; + int nbindetamatch; + int nbindetamatch2D; + double detamatchmin; + double detamatchmax; + int nbindphimatch; + int nbindphimatch2D; + double dphimatchmin; + double dphimatchmax; + int nbinfhits; + double fhitsmax; + int nbinlhits; + double lhitsmax; + int nbinxyz; + int nbinpoptrue; + double poptruemin; + double poptruemax; + int nbinmee; + double meemin; + double meemax; + int nbinhoe; + double hoemin; + double hoemax; + + //========================================= + // usual attributes and methods + //========================================= + + unsigned int nEvents_; + + bool selected(const reco::GsfElectronCollection::const_iterator &gsfIter, double vertexTIP); + bool generalCut(const reco::GsfElectronCollection::const_iterator &gsfIter); + bool etCut(const reco::GsfElectronCollection::const_iterator &gsfIter); + bool isolationCut(const reco::GsfElectronCollection::const_iterator &gsfIter, double vertexTIP); + bool idCut(const reco::GsfElectronCollection::const_iterator &gsfIter); + + bool trigger(const edm::Event &e); + unsigned int nAfterTrigger_; + std::vector HLTPathsByIndex_; + + TrajectoryStateTransform transformer_; + edm::ESHandle pDD; + edm::ESHandle theMagField; + + TFile *histfile_; + TTree *tree_; + + float mcEnergy[10], mcEta[10], mcPhi[10], mcPt[10], mcQ[10]; + float superclusterEnergy[10], superclusterEta[10], superclusterPhi[10], superclusterEt[10]; + float seedMomentum[10], seedEta[10], seedPhi[10], seedPt[10], seedQ[10]; + + //========================================= + // histograms + //========================================= + + TH1F *h_matchingObjectNum; + + TH1F *h_matchingObjectEta; + TH1F *h_matchingObjectAbsEta; + TH1F *h_matchingObjectP; + TH1F *h_matchingObjectPt; + TH1F *h_matchingObjectPhi; + TH1F *h_matchingObjectZ; + + TH1F *h_ele_matchingObjectEta_matched; + TH1F *h_ele_matchingObjectAbsEta_matched; + TH1F *h_ele_matchingObjectPt_matched; + TH1F *h_ele_matchingObjectPhi_matched; + TH1F *h_ele_matchingObjectZ_matched; + + TH1F *h_ele_vertexPt; + TH1F *h_ele_Et; + TH1F *h_ele_vertexEta; + TH1F *h_ele_vertexPhi; + TH1F *h_ele_vertexX; + TH1F *h_ele_vertexY; + TH1F *h_ele_vertexZ; + TH1F *h_ele_vertexTIP; + TH1F *h_ele_charge; + + TH1F *histNum_; + + TH1F *histSclEn_; + TH1F *histSclEt_; + TH1F *histSclEta_; + TH1F *histSclPhi_; + TH1F *histSclSigEtaEta_; + + TH1F *h_ele_ambiguousTracks; + TH2F *h_ele_ambiguousTracksVsEta; + TH2F *h_ele_ambiguousTracksVsPhi; + TH2F *h_ele_ambiguousTracksVsPt; + TH1F *h_ele_foundHits; + TH2F *h_ele_foundHitsVsEta; + TH2F *h_ele_foundHitsVsPhi; + TH2F *h_ele_foundHitsVsPt; + TH1F *h_ele_lostHits; + TH2F *h_ele_lostHitsVsEta; + TH2F *h_ele_lostHitsVsPhi; + TH2F *h_ele_lostHitsVsPt; + TH1F *h_ele_chi2; + TH2F *h_ele_chi2VsEta; + TH2F *h_ele_chi2VsPhi; + TH2F *h_ele_chi2VsPt; + + TH1F *h_ele_EoP; + TH1F *h_ele_EeleOPout; + TH1F *h_ele_dEtaSc_propVtx; + TH1F *h_ele_dPhiSc_propVtx; + TH1F *h_ele_dEtaCl_propOut; + TH1F *h_ele_dPhiCl_propOut; + TH1F *h_ele_dEtaEleCl_propOut; + TH1F *h_ele_dPhiEleCl_propOut; + TH1F *h_ele_HoE; + TH1F *h_ele_outerP; + TH1F *h_ele_outerP_mode; + TH1F *h_ele_outerPt; + TH1F *h_ele_outerPt_mode; + + TH1F *h_ele_PinMnPout; + TH1F *h_ele_PinMnPout_mode; + + TH1F *h_ele_mva; + TH1F *h_ele_provenance; + + TH1F *h_ele_tkSumPt_dr03; + TH1F *h_ele_ecalRecHitSumEt_dr03; + TH1F *h_ele_hcalDepth1TowerSumEt_dr03; + TH1F *h_ele_hcalDepth2TowerSumEt_dr03; + TH1F *h_ele_tkSumPt_dr04; + TH1F *h_ele_ecalRecHitSumEt_dr04; + TH1F *h_ele_hcalDepth1TowerSumEt_dr04; + TH1F *h_ele_hcalDepth2TowerSumEt_dr04; + + TH1F *h_ele_mee_os; +}; using namespace reco; @@ -337,7 +571,6 @@ void DQMAnalyzer::beginJob() { //================================================== h_ele_EoP = new TH1F("h_ele_EoP", "ele E/P_{vertex}", nbineop, 0., eopmax); - // h_ele_EoPout = new TH1F( "h_ele_EoPout", "ele E/P_{out}", nbineop,0.,eopmax); h_ele_EeleOPout = new TH1F("h_ele_EeleOPout", "ele E_{ele}/P_{out}", nbineop, 0., eopmax); h_ele_dEtaSc_propVtx = new TH1F( "h_ele_dEtaSc_propVtx", "ele #eta_{sc} - #eta_{tr}, prop from vertex", nbindetamatch, detamatchmin, detamatchmax); @@ -393,8 +626,6 @@ void DQMAnalyzer::beginJob() { h_ele_EoP->GetXaxis()->SetTitle("E/P_{vertex}"); h_ele_EoP->GetYaxis()->SetTitle("Events"); - // h_ele_EoPout->GetXaxis()-> SetTitle("E_{seed}/P_{out}"); - // h_ele_EoPout->GetYaxis()-> SetTitle("Events"); h_ele_EeleOPout->GetXaxis()->SetTitle("E_{ele}/P_{out}"); h_ele_EeleOPout->GetYaxis()->SetTitle("Events"); @@ -434,43 +665,6 @@ void DQMAnalyzer::beginJob() { // T&P //================================================== h_ele_mee_os = new TH1F("h_ele_mee_os", "ele pairs invariant mass, opposite sign", nbinmee, meemin, meemax); - - //================================================== - // OBSOLETE - //================================================== - - // h_ele_PtoPtmatchingObject_matched = new TH1F( "h_ele_PtoPtmatchingObject_matched", "ele trans momentum / matching SC trans energy", nbinpoptrue,poptruemin,poptruemax); - // h_ele_PtoPtmatchingObject_barrel_matched = new TH1F( "h_ele_PtoPmatchingObject_barrel_matched", "ele trans momentum / matching SC trans energy, barrel",nbinpoptrue,poptruemin,poptruemax); - // h_ele_PtoPtmatchingObject_endcaps_matched = new TH1F( "h_ele_PtoPmatchingObject_endcaps_matched", "ele trans momentum / matching SC trans energy, endcaps",nbinpoptrue,poptruemin,poptruemax); - // h_ele_PoPmatchingObject_matched = new TH1F( "h_ele_PoPmatchingObject_matched", "ele momentum / matching SC energy", nbinpoptrue,poptruemin,poptruemax); - // h_ele_PoPmatchingObject_barrel_matched = new TH1F( "h_ele_PoPmatchingObject_barrel_matched", "ele momentum / matching SC energy, barrel",nbinpoptrue,poptruemin,poptruemax); - // h_ele_PoPmatchingObject_endcaps_matched = new TH1F( "h_ele_PoPmatchingObject_endcaps_matched", "ele momentum / matching SC energy, endcaps",nbinpoptrue,poptruemin,poptruemax); - // // h_ele_PtoPtmatchingObject_matched = new TH1F( "h_ele_PtoPtmatchingObject_matched", "ele trans momentum / matching SC trans energy", nbinpoptrue,poptruemin,poptruemax); - // h_ele_EtaMnEtamatchingObject_matched = new TH1F( "h_ele_EtaMnEtamatchingObject_matched", "ele momentum eta - matching SC eta",nbindeta,detamin,detamax); - // h_ele_PhiMnPhimatchingObject_matched = new TH1F( "h_ele_PhiMnPhimatchingObject_matched", "ele momentum phi - matching SC phi",nbindphi,dphimin,dphimax); - // h_ele_PhiMnPhimatchingObject2_matched = new TH1F( "h_ele_PhiMnPhimatchingObject2_matched", "ele momentum phi - matching SC phi",nbindphimatch2D,dphimatchmin,dphimatchmax); - - // h_ele_PoPmatchingObject_matched->GetXaxis()-> SetTitle("P/E_{SC}"); - // h_ele_PoPmatchingObject_matched->GetYaxis()-> SetTitle("Events"); - // h_ele_PoPmatchingObject_barrel_matched->GetXaxis()-> SetTitle("P/E_{SC}"); - // h_ele_PoPmatchingObject_barrel_matched->GetYaxis()-> SetTitle("Events"); - // h_ele_PoPmatchingObject_endcaps_matched->GetXaxis()-> SetTitle("P/E_{SC}"); - // h_ele_PoPmatchingObject_endcaps_matched->GetYaxis()-> SetTitle("Events"); - // h_ele_PtoPtmatchingObject_matched->GetXaxis()-> SetTitle("P_{T}/E_{T}^{SC}"); - // h_ele_PtoPtmatchingObject_matched->GetYaxis()-> SetTitle("Events"); - // h_ele_PtoPtmatchingObject_barrel_matched->GetXaxis()-> SetTitle("P_{T}/E_{T}^{SC}"); - // h_ele_PtoPtmatchingObject_barrel_matched->GetYaxis()-> SetTitle("Events"); - // h_ele_PtoPtmatchingObject_endcaps_matched->GetXaxis()-> SetTitle("P_{T}/E_{T}^{SC}"); - // h_ele_PtoPtmatchingObject_endcaps_matched->GetYaxis()-> SetTitle("Events"); - // - // h_ele_EtaMnEtamatchingObject_matched->GetXaxis()-> SetTitle("#eta_{rec} - #eta_{SC}"); - // h_ele_EtaMnEtamatchingObject_matched->GetYaxis()-> SetTitle("Events"); - // h_ele_PhiMnPhimatchingObject_matched->GetXaxis()-> SetTitle("#phi_{rec} - #phi_{SC} (rad)"); - // h_ele_PhiMnPhimatchingObject_matched->GetYaxis()-> SetTitle("Events"); - // h_ele_EtaMnEtamatchingObject_matched->GetXaxis()-> SetTitle("#eta_{rec} - #eta_{SC}"); - // h_ele_EtaMnEtamatchingObject_matched->GetYaxis()-> SetTitle("Events"); - // h_ele_PhiMnPhimatchingObject_matched->GetXaxis()-> SetTitle("#phi_{rec} - #phi_{SC} (rad)"); - // h_ele_PhiMnPhimatchingObject_matched->GetYaxis()-> SetTitle("Events"); } void DQMAnalyzer::endJob() { @@ -539,7 +733,6 @@ void DQMAnalyzer::endJob() { // matched electrons h_ele_charge->Write(); - //h_ele_vertexP->Write(); h_ele_vertexPt->Write(); h_ele_vertexEta->Write(); h_ele_vertexPhi->Write(); @@ -604,7 +797,6 @@ void DQMAnalyzer::endJob() { // matched electrons, matching h_ele_EoP->Write(); - // h_ele_EoPout->Write(); h_ele_EeleOPout->Write(); h_ele_dEtaSc_propVtx->Write(); h_ele_dPhiSc_propVtx->Write(); @@ -692,7 +884,6 @@ void DQMAnalyzer::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetu // electron related distributions h_ele_charge->Fill(gsfIter->charge()); - //h_ele_vertexP->Fill( gsfIter->p() ); h_ele_vertexPt->Fill(gsfIter->pt()); h_ele_Et->Fill(gsfIter->superCluster()->energy() / cosh(gsfIter->superCluster()->eta())); h_ele_vertexEta->Fill(gsfIter->eta()); @@ -708,8 +899,8 @@ void DQMAnalyzer::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetu // if (!gsfIter->ecalDrivenSeed()&&gsfIter->trackerDrivenSeed()) // sclRef = gsfIter->parentSuperCluster() ; histSclEn_->Fill(sclRef->energy()); - double R = TMath::Sqrt(sclRef->x() * sclRef->x() + sclRef->y() * sclRef->y() + sclRef->z() * sclRef->z()); - double Rt = TMath::Sqrt(sclRef->x() * sclRef->x() + sclRef->y() * sclRef->y()); + double R = std::sqrt(sclRef->x() * sclRef->x() + sclRef->y() * sclRef->y() + sclRef->z() * sclRef->z()); + double Rt = std::sqrt(sclRef->x() * sclRef->x() + sclRef->y() * sclRef->y()); histSclEt_->Fill(sclRef->energy() * (Rt / R)); histSclEta_->Fill(sclRef->eta()); histSclPhi_->Fill(sclRef->phi()); @@ -747,20 +938,6 @@ void DQMAnalyzer::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetu h_ele_outerP_mode->Fill(gsfIter->trackMomentumOut().R()); h_ele_outerPt_mode->Fill(gsfIter->trackMomentumOut().Rho()); - /* - if (!readAOD_) { // track extra does not exist in AOD - edm::RefToBase seed = gsfIter->gsfTrack()->extra()->seedRef(); - ElectronSeedRef elseed=seed.castTo(); - h_ele_seed_dphi2_-> Fill(elseed->dPhiNeg(1)); - h_ele_seed_dphi2VsEta_-> Fill(gsfIter->eta(), elseed->dPhiNeg(1)); - h_ele_seed_dphi2VsPt_-> Fill(gsfIter->pt(), elseed->dPhiNeg(1)) ; - h_ele_seed_drz2_-> Fill(elseed->dRZNeg(1)); - h_ele_seed_drz2VsEta_-> Fill(gsfIter->eta(), elseed->dRZNeg(1)); - h_ele_seed_drz2VsPt_-> Fill(gsfIter->pt(), elseed->dRZNeg(1)); - h_ele_seed_subdet2_-> Fill(elseed->subDet(1)); - } - */ - // match distributions h_ele_EoP->Fill(gsfIter->eSuperClusterOverP()); h_ele_EeleOPout->Fill(gsfIter->eEleClusterOverPout()); @@ -905,21 +1082,6 @@ void DQMAnalyzer::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetu h_ele_matchingObjectEta_matched->Fill(moIter->eta()); h_ele_matchingObjectZ_matched->Fill(moIter->z()); - // OBSOLETE - // // comparison electron vs matching object - // h_ele_EtaMnEtamatchingObject_matched->Fill( bestGsfElectron.eta()-moIter->eta()); - // - // h_ele_PhiMnPhimatchingObject_matched->Fill( bestGsfElectron.phi()-moIter->phi()); - // h_ele_PhiMnPhimatchingObject2_matched->Fill( bestGsfElectron.phi()-moIter->phi()); - // - // h_ele_PoPmatchingObject_matched->Fill( bestGsfElectron.p()/moIter->energy()); - // h_ele_PtoPtmatchingObject_matched->Fill( bestGsfElectron.pt()/moIter->energy()/cosh(moIter->eta())); - // - // if (bestGsfElectron.isEB()) h_ele_PoPmatchingObject_barrel_matched->Fill( bestGsfElectron.p()/moIter->energy()); - // if (bestGsfElectron.isEE()) h_ele_PoPmatchingObject_endcaps_matched->Fill( bestGsfElectron.p()/moIter->energy()); - // if (bestGsfElectron.isEB()) h_ele_PtoPtmatchingObject_barrel_matched->Fill( bestGsfElectron.pt()/moIter->energy()/cosh(moIter->eta())); - // if (bestGsfElectron.isEE()) h_ele_PtoPtmatchingObject_endcaps_matched->Fill( bestGsfElectron.pt()/moIter->energy()/cosh(moIter->eta())); - reco::SuperClusterRef sclRef = bestGsfElectron.superCluster(); // add here distributions for matched electrons as for all electrons diff --git a/RecoEgamma/Examples/plugins/DQMAnalyzer.h b/RecoEgamma/Examples/plugins/DQMAnalyzer.h deleted file mode 100644 index 3cc0f425bc903..0000000000000 --- a/RecoEgamma/Examples/plugins/DQMAnalyzer.h +++ /dev/null @@ -1,298 +0,0 @@ -#ifndef DQMAnalyzer_h -#define DQMAnalyzer_h - -// -// Package: RecoEgamma/Examples -// Class: GsfElectronDataAnalyzer -// - -// -// Original Author: Ursula Berthon, Claude Charlot -// Created: Mon Mar 27 13:22:06 CEST 2006 -// -// - -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" - -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/Common/interface/Handle.h" - -#include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" - -class MagneticField; -class TFile; -class TH1F; -class TH2F; -class TH1I; -class TProfile; -class TTree; - -class DQMAnalyzer : public edm::one::EDAnalyzer<> { -public: - explicit DQMAnalyzer(const edm::ParameterSet &conf); - - ~DQMAnalyzer() override; - - void beginJob() override; - void endJob() override; - void analyze(const edm::Event &e, const edm::EventSetup &c) override; - -private: - //========================================= - // parameters - //========================================= - - std::string outputFile_; - edm::InputTag electronCollection_; - edm::InputTag matchingObjectCollection_; - edm::InputTag beamSpot_; - std::string matchingCondition_; - //std::string type_; - bool readAOD_; - - // matching - double maxPtMatchingObject_; - double maxAbsEtaMatchingObject_; - double deltaR_; - - // tag and probe - int Selection_; - double massLow_; - double massHigh_; - bool TPchecksign_; - bool TAGcheckclass_; - bool PROBEetcut_; - bool PROBEcheckclass_; - - // electron selection - double minEt_; - double minPt_; - double maxAbsEta_; - bool isEB_; - bool isEE_; - bool isNotEBEEGap_; - bool isEcalDriven_; - bool isTrackerDriven_; - double eOverPMinBarrel_; - double eOverPMaxBarrel_; - double eOverPMinEndcaps_; - double eOverPMaxEndcaps_; - double dEtaMinBarrel_; - double dEtaMaxBarrel_; - double dEtaMinEndcaps_; - double dEtaMaxEndcaps_; - double dPhiMinBarrel_; - double dPhiMaxBarrel_; - double dPhiMinEndcaps_; - double dPhiMaxEndcaps_; - double sigIetaIetaMinBarrel_; - double sigIetaIetaMaxBarrel_; - double sigIetaIetaMinEndcaps_; - double sigIetaIetaMaxEndcaps_; - double hadronicOverEmMaxBarrel_; - double hadronicOverEmMaxEndcaps_; - double mvaMin_; - double tipMaxBarrel_; - double tipMaxEndcaps_; - double tkIso03Max_; - double hcalIso03Depth1MaxBarrel_; - double hcalIso03Depth1MaxEndcaps_; - double hcalIso03Depth2MaxEndcaps_; - double ecalIso03MaxBarrel_; - double ecalIso03MaxEndcaps_; - - // for trigger - edm::InputTag triggerResults_; - std::vector HLTPathsByName_; - - // histos limits and binning - int nbineta; - int nbineta2D; - double etamin; - double etamax; - int nbinphi; - int nbinphi2D; - double phimin; - double phimax; - int nbinpt; - int nbinpteff; - int nbinpt2D; - double ptmax; - int nbinp; - int nbinp2D; - double pmax; - int nbineop; - int nbineop2D; - double eopmax; - double eopmaxsht; - int nbindeta; - double detamin; - double detamax; - int nbindphi; - double dphimin; - double dphimax; - int nbindetamatch; - int nbindetamatch2D; - double detamatchmin; - double detamatchmax; - int nbindphimatch; - int nbindphimatch2D; - double dphimatchmin; - double dphimatchmax; - int nbinfhits; - double fhitsmax; - int nbinlhits; - double lhitsmax; - int nbinxyz; - int nbinpoptrue; - double poptruemin; - double poptruemax; - int nbinmee; - double meemin; - double meemax; - int nbinhoe; - double hoemin; - double hoemax; - - //========================================= - // usual attributes and methods - //========================================= - - unsigned int nEvents_; - - bool selected(const reco::GsfElectronCollection::const_iterator &gsfIter, double vertexTIP); - bool generalCut(const reco::GsfElectronCollection::const_iterator &gsfIter); - bool etCut(const reco::GsfElectronCollection::const_iterator &gsfIter); - bool isolationCut(const reco::GsfElectronCollection::const_iterator &gsfIter, double vertexTIP); - bool idCut(const reco::GsfElectronCollection::const_iterator &gsfIter); - - bool trigger(const edm::Event &e); - unsigned int nAfterTrigger_; - std::vector HLTPathsByIndex_; - - TrajectoryStateTransform transformer_; - edm::ESHandle pDD; - edm::ESHandle theMagField; - - TFile *histfile_; - TTree *tree_; - - float mcEnergy[10], mcEta[10], mcPhi[10], mcPt[10], mcQ[10]; - float superclusterEnergy[10], superclusterEta[10], superclusterPhi[10], superclusterEt[10]; - float seedMomentum[10], seedEta[10], seedPhi[10], seedPt[10], seedQ[10]; - - //========================================= - // histograms - //========================================= - - TH1F *h_matchingObjectNum; - - TH1F *h_matchingObjectEta; - TH1F *h_matchingObjectAbsEta; - TH1F *h_matchingObjectP; - TH1F *h_matchingObjectPt; - TH1F *h_matchingObjectPhi; - TH1F *h_matchingObjectZ; - - TH1F *h_ele_matchingObjectEta_matched; - TH1F *h_ele_matchingObjectAbsEta_matched; - TH1F *h_ele_matchingObjectPt_matched; - TH1F *h_ele_matchingObjectPhi_matched; - TH1F *h_ele_matchingObjectZ_matched; - - //TH1F *h_ele_vertexP; - TH1F *h_ele_vertexPt; - TH1F *h_ele_Et; - TH1F *h_ele_vertexEta; - //TH1F *h_ele_vertexAbsEta; - TH1F *h_ele_vertexPhi; - TH1F *h_ele_vertexX; - TH1F *h_ele_vertexY; - TH1F *h_ele_vertexZ; - TH1F *h_ele_vertexTIP; - TH1F *h_ele_charge; - - TH1F *histNum_; - - TH1F *histSclEn_; - TH1F *histSclEt_; - TH1F *histSclEta_; - TH1F *histSclPhi_; - TH1F *histSclSigEtaEta_; - - TH1F *h_ele_ambiguousTracks; - TH2F *h_ele_ambiguousTracksVsEta; - TH2F *h_ele_ambiguousTracksVsPhi; - TH2F *h_ele_ambiguousTracksVsPt; - TH1F *h_ele_foundHits; - // TH1F *h_ele_foundHits_barrel; - // TH1F *h_ele_foundHits_endcaps; - TH2F *h_ele_foundHitsVsEta; - TH2F *h_ele_foundHitsVsPhi; - TH2F *h_ele_foundHitsVsPt; - TH1F *h_ele_lostHits; - // TH1F *h_ele_lostHits_barrel; - // TH1F *h_ele_lostHits_endcaps; - TH2F *h_ele_lostHitsVsEta; - TH2F *h_ele_lostHitsVsPhi; - TH2F *h_ele_lostHitsVsPt; - TH1F *h_ele_chi2; - // TH1F *h_ele_chi2_barrel_; - // TH1F *h_ele_chi2_endcaps_; - TH2F *h_ele_chi2VsEta; - TH2F *h_ele_chi2VsPhi; - TH2F *h_ele_chi2VsPt; - - TH1F *h_ele_EoP; - // TH1F *h_ele_EoPout; - TH1F *h_ele_EeleOPout; - TH1F *h_ele_dEtaSc_propVtx; - TH1F *h_ele_dPhiSc_propVtx; - TH1F *h_ele_dEtaCl_propOut; - TH1F *h_ele_dPhiCl_propOut; - TH1F *h_ele_dEtaEleCl_propOut; - TH1F *h_ele_dPhiEleCl_propOut; - // TH1F *h_ele_dPhiEleCl_propOut_barrel; - // TH1F *h_ele_dPhiEleCl_propOut_endcaps; - TH1F *h_ele_HoE; - TH1F *h_ele_outerP; - TH1F *h_ele_outerP_mode; - TH1F *h_ele_outerPt; - TH1F *h_ele_outerPt_mode; - - TH1F *h_ele_PinMnPout; - TH1F *h_ele_PinMnPout_mode; - - TH1F *h_ele_mva; - TH1F *h_ele_provenance; - - TH1F *h_ele_tkSumPt_dr03; - TH1F *h_ele_ecalRecHitSumEt_dr03; - TH1F *h_ele_hcalDepth1TowerSumEt_dr03; - TH1F *h_ele_hcalDepth2TowerSumEt_dr03; - TH1F *h_ele_tkSumPt_dr04; - TH1F *h_ele_ecalRecHitSumEt_dr04; - TH1F *h_ele_hcalDepth1TowerSumEt_dr04; - TH1F *h_ele_hcalDepth2TowerSumEt_dr04; - - TH1F *h_ele_mee_os; - - // OBSOLETE - // TH1F *h_ele_PtoPtmatchingObject_matched; //OBSOLETE ? - // TH1F *h_ele_PtoPtmatchingObject_barrel_matched; //OBSOLETE ? - // TH1F *h_ele_PtoPtmatchingObject_endcaps_matched; //OBSOLETE ? - // TH1F *h_ele_PoPmatchingObject_matched; //OBSOLETE ? - // TH1F *h_ele_PoPmatchingObject_barrel_matched; //OBSOLETE ? - // TH1F *h_ele_PoPmatchingObject_endcaps_matched; //OBSOLETE ? - // TH1F *h_ele_EtaMnEtamatchingObject_matched; //OBSOLETE ? - // TH1F *h_ele_PhiMnPhimatchingObject_matched; //OBSOLETE ? - // TH1F *h_ele_PhiMnPhimatchingObject2_matched; //OBSOLETE ? -}; - -#endif diff --git a/RecoEgamma/Examples/plugins/ElectronIDAnalyzer.cc b/RecoEgamma/Examples/plugins/ElectronIDAnalyzer.cc index 5bc4f8b5f39e6..268893ef96631 100644 --- a/RecoEgamma/Examples/plugins/ElectronIDAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/ElectronIDAnalyzer.cc @@ -1,7 +1,31 @@ -#include "RecoEgamma/Examples/plugins/ElectronIDAnalyzer.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" +#include "DataFormats/Common/interface/Handle.h" #include "DataFormats/Common/interface/ValueMap.h" +#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +class ElectronIDAnalyzer : public edm::one::EDAnalyzer<> { +public: + explicit ElectronIDAnalyzer(const edm::ParameterSet& conf); + ~ElectronIDAnalyzer() override{}; + + void analyze(const edm::Event& e, const edm::EventSetup& c) override; + +private: + edm::ParameterSet conf_; + + std::string electronProducer_; + + std::string electronLabelRobustLoose_; + std::string electronLabelRobustTight_; + std::string electronLabelLoose_; + std::string electronLabelTight_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(ElectronIDAnalyzer); ElectronIDAnalyzer::ElectronIDAnalyzer(const edm::ParameterSet& conf) : conf_(conf) { electronProducer_ = conf.getParameter("electronProducer"); diff --git a/RecoEgamma/Examples/plugins/ElectronIDAnalyzer.h b/RecoEgamma/Examples/plugins/ElectronIDAnalyzer.h deleted file mode 100644 index 2025b6792bf05..0000000000000 --- a/RecoEgamma/Examples/plugins/ElectronIDAnalyzer.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef ElectronIDAnalyzer_h -#define ElectronIDAnalyzer_h - -#include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -class ElectronIDAnalyzer : public edm::one::EDAnalyzer<> { -public: - explicit ElectronIDAnalyzer(const edm::ParameterSet& conf); - ~ElectronIDAnalyzer() override{}; - - void analyze(const edm::Event& e, const edm::EventSetup& c) override; - -private: - edm::ParameterSet conf_; - - std::string electronProducer_; - - std::string electronLabelRobustLoose_; - std::string electronLabelRobustTight_; - std::string electronLabelLoose_; - std::string electronLabelTight_; -}; - -#endif diff --git a/RecoEgamma/Examples/plugins/ElectronSeedAnalyzer.cc b/RecoEgamma/Examples/plugins/ElectronSeedAnalyzer.cc index ccc19272d1727..a81b1f1eb86a4 100644 --- a/RecoEgamma/Examples/plugins/ElectronSeedAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/ElectronSeedAnalyzer.cc @@ -1,55 +1,110 @@ +// +// Package: RecoEgamma/ElectronTrackSeed +// Class: ElectronSeedAnalyzer +// -// user include files -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" +// +// Original Author: Ursula Berthon, Claude Charlot +// Created: Mon Mar 27 13:22:06 CEST 2006 +// +// -#include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/Common/interface/Handle.h" #include "DataFormats/EgammaReco/interface/ElectronSeed.h" -#include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h" +#include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include "DataFormats/Common/interface/OwnVector.h" -#include "DataFormats/TrackingRecHit/interface/TrackingRecHitFwd.h" -#include "DataFormats/TrajectoryState/interface/PTrajectoryStateOnDet.h" - -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/CommonDetUnit/interface/GeomDet.h" - -#include "TrackingTools/DetLayers/interface/BarrelDetLayer.h" -#include "TrackingTools/DetLayers/interface/ForwardDetLayer.h" -#include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h" -#include "RecoEgamma/Examples/plugins/ElectronSeedAnalyzer.h" - -#include "TrackingTools/TrajectoryState/interface/ftsFromVertexToPoint.h" -#include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h" -#include "TrackingTools/MaterialEffects/interface/PropagatorWithMaterial.h" #include "DataFormats/GeometryCommonDetAlgo/interface/PerpendicularBoundPlaneBuilder.h" -#include "TrackingTools/MaterialEffects/interface/PropagatorWithMaterial.h" - +#include "DataFormats/GeometryVector/interface/GlobalPoint.h" #include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "DataFormats/TrajectoryState/interface/PTrajectoryStateOnDet.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "Geometry/CommonDetUnit/interface/GeomDet.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/Records/interface/TrackerTopologyRcd.h" - +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "MagneticField/Engine/interface/MagneticField.h" #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" - -#include "DataFormats/BeamSpot/interface/BeamSpot.h" - #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" +#include "TrackingTools/MaterialEffects/interface/PropagatorWithMaterial.h" +#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" +#include "TrackingTools/TrajectoryState/interface/ftsFromVertexToPoint.h" + +#include "CLHEP/Units/GlobalPhysicalConstants.h" #include "HepMC/GenParticle.h" #include "HepMC/SimpleVector.h" -#include "CLHEP/Units/GlobalPhysicalConstants.h" -#include #include "TFile.h" #include "TH1F.h" #include "TH1I.h" #include "TTree.h" +#include + +class ElectronSeedAnalyzer : public edm::one::EDAnalyzer<> { +public: + explicit ElectronSeedAnalyzer(const edm::ParameterSet &conf); + ~ElectronSeedAnalyzer() override; + void analyze(const edm::Event &, const edm::EventSetup &) override; + void beginJob() override; + void endJob() override; + +private: + TrajectoryStateTransform transformer_; + + TFile *histfile_; + TTree *tree_; + float mcEnergy[10], mcEta[10], mcPhi[10], mcPt[10], mcQ[10]; + float superclusterEnergy[10], superclusterEta[10], superclusterPhi[10], superclusterEt[10]; + float seedMomentum[10], seedEta[10], seedPhi[10], seedPt[10], seedQ[10]; + int seedSubdet1[10], seedSubdet2[10]; + int seedLayer1[10], seedLayer2[10]; + int seedSide1[10], seedSide2[10]; + float seedDphi1[10], seedDrz1[10], seedDphi2[10], seedDrz2[10]; + float seedPhi1[10], seedRz1[10], seedPhi2[10], seedRz2[10]; + TH1F *histeMC_; + TH1F *histeMCmatched_; + TH1F *histecaldriveneMCmatched_; + TH1F *histtrackerdriveneMCmatched_; + TH1F *histp_; + TH1F *histeclu_; + TH1F *histpt_; + TH1F *histptMC_; + TH1F *histptMCmatched_; + TH1F *histecaldrivenptMCmatched_; + TH1F *histtrackerdrivenptMCmatched_; + TH1F *histetclu_; + TH1F *histeffpt_; + TH1F *histeta_; + TH1F *histetaMC_; + TH1F *histetaMCmatched_; + TH1F *histecaldrivenetaMCmatched_; + TH1F *histtrackerdrivenetaMCmatched_; + TH1F *histetaclu_; + TH1F *histeffeta_; + TH1F *histq_; + TH1F *histeoverp_; + TH1I *histnrseeds_; + TH1I *histnbseeds_; + TH1I *histnbclus_; + + edm::InputTag inputCollection_; + edm::InputTag beamSpot_; + // std::vector > mapTsos_; + // std::vector, TrajectoryStateOnSurface> > mapTsos2_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(ElectronSeedAnalyzer); + using namespace std; using namespace reco; diff --git a/RecoEgamma/Examples/plugins/ElectronSeedAnalyzer.h b/RecoEgamma/Examples/plugins/ElectronSeedAnalyzer.h deleted file mode 100644 index e0dabb88178f7..0000000000000 --- a/RecoEgamma/Examples/plugins/ElectronSeedAnalyzer.h +++ /dev/null @@ -1,86 +0,0 @@ -#ifndef ElectronSeedAnalyzer_h -#define ElectronSeedAnalyzer_h - -// -// Package: RecoEgamma/ElectronTrackSeed -// Class: ElectronSeedAnalyzer -// - -// -// Original Author: Ursula Berthon, Claude Charlot -// Created: Mon Mar 27 13:22:06 CEST 2006 -// -// - -#include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "DataFormats/GeometryVector/interface/GlobalPoint.h" - -#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" - -class MagneticField; -class TFile; -class TH1F; -class TH1I; -class TTree; - -class ElectronSeedAnalyzer : public edm::one::EDAnalyzer<> { -public: - explicit ElectronSeedAnalyzer(const edm::ParameterSet &conf); - ~ElectronSeedAnalyzer() override; - void analyze(const edm::Event &, const edm::EventSetup &) override; - void beginJob() override; - void endJob() override; - -private: - TrajectoryStateTransform transformer_; - - TFile *histfile_; - TTree *tree_; - float mcEnergy[10], mcEta[10], mcPhi[10], mcPt[10], mcQ[10]; - float superclusterEnergy[10], superclusterEta[10], superclusterPhi[10], superclusterEt[10]; - float seedMomentum[10], seedEta[10], seedPhi[10], seedPt[10], seedQ[10]; - int seedSubdet1[10], seedSubdet2[10]; - int seedLayer1[10], seedLayer2[10]; - int seedSide1[10], seedSide2[10]; - float seedDphi1[10], seedDrz1[10], seedDphi2[10], seedDrz2[10]; - float seedPhi1[10], seedRz1[10], seedPhi2[10], seedRz2[10]; - TH1F *histeMC_; - TH1F *histeMCmatched_; - TH1F *histecaldriveneMCmatched_; - TH1F *histtrackerdriveneMCmatched_; - TH1F *histp_; - TH1F *histeclu_; - TH1F *histpt_; - TH1F *histptMC_; - TH1F *histptMCmatched_; - TH1F *histecaldrivenptMCmatched_; - TH1F *histtrackerdrivenptMCmatched_; - TH1F *histetclu_; - TH1F *histeffpt_; - TH1F *histeta_; - TH1F *histetaMC_; - TH1F *histetaMCmatched_; - TH1F *histecaldrivenetaMCmatched_; - TH1F *histtrackerdrivenetaMCmatched_; - TH1F *histetaclu_; - TH1F *histeffeta_; - TH1F *histq_; - TH1F *histeoverp_; - TH1I *histnrseeds_; - TH1I *histnbseeds_; - TH1I *histnbclus_; - - edm::InputTag inputCollection_; - edm::InputTag beamSpot_; - // std::vector > mapTsos_; - // std::vector, TrajectoryStateOnSurface> > mapTsos2_; -}; - -#endif diff --git a/RecoEgamma/Examples/plugins/GsfElectronDataAnalyzer.cc b/RecoEgamma/Examples/plugins/GsfElectronDataAnalyzer.cc index defb016afa882..43b3ae70b1f2f 100644 --- a/RecoEgamma/Examples/plugins/GsfElectronDataAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/GsfElectronDataAnalyzer.cc @@ -12,35 +12,34 @@ */ // -// Original Author: Ursula Berthon +// Original Author: Ursula Berthon, Claude Charlot // Created: Mon Mar 27 13:22:06 CEST 2006 // // -// user include files -#include "RecoEgamma/Examples/plugins/GsfElectronDataAnalyzer.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Common/interface/TriggerNames.h" - -#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/TriggerResults.h" #include "DataFormats/EgammaCandidates/interface/GsfElectron.h" #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/EgammaReco/interface/BasicClusterFwd.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" #include "DataFormats/EgammaReco/interface/ElectronSeed.h" #include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" -#include "DataFormats/JetReco/interface/CaloJetCollection.h" -#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" -#include "DataFormats/Common/interface/TriggerResults.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "FWCore/Common/interface/TriggerNames.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" #include "CLHEP/Units/GlobalPhysicalConstants.h" -#include + #include "TMath.h" #include "TFile.h" #include "TH1F.h" @@ -48,8 +47,391 @@ #include "TH2F.h" #include "TProfile.h" #include "TTree.h" + #include +class GsfElectronDataAnalyzer : public edm::one::EDAnalyzer<> { +public: + explicit GsfElectronDataAnalyzer(const edm::ParameterSet &conf); + + ~GsfElectronDataAnalyzer() override; + + void beginJob() override; + void endJob() override; + void analyze(const edm::Event &e, const edm::EventSetup &c) override; + +private: + bool trigger(const edm::Event &e); + + unsigned int nEvents_; + unsigned int nAfterTrigger_; + + edm::InputTag triggerResults_; + edm::InputTag beamSpot_; + + std::vector HLTPathsByName_; + std::vector HLTPathsByIndex_; + + std::string outputFile_; + edm::InputTag electronCollection_; + edm::InputTag matchingObjectCollection_; + std::string matchingCondition_; + std::string type_; + bool readAOD_; + // matching + double maxPtMatchingObject_; + double maxAbsEtaMatchingObject_; + double deltaR_; + + TrajectoryStateTransform transformer_; + edm::ESHandle pDD; + edm::ESHandle theMagField; + + TFile *histfile_; + TTree *tree_; + float mcEnergy[10], mcEta[10], mcPhi[10], mcPt[10], mcQ[10]; + float superclusterEnergy[10], superclusterEta[10], superclusterPhi[10], superclusterEt[10]; + float seedMomentum[10], seedEta[10], seedPhi[10], seedPt[10], seedQ[10]; + + TH1F *h_matchingObjectNum; + + TH1F *h_matchingObjectEta; + TH1F *h_matchingObjectAbsEta; + TH1F *h_matchingObjectP; + TH1F *h_matchingObjectPt; + TH1F *h_matchingObjectPhi; + TH1F *h_matchingObjectZ; + + TH1F *h_ele_matchingObjectEta_matched; + TH1F *h_ele_matchingObjectAbsEta_matched; + TH1F *h_ele_matchingObjectPt_matched; + TH1F *h_ele_matchingObjectPhi_matched; + TH1F *h_ele_matchingObjectZ_matched; + + TH1F *h_ele_mee_all; + TH1F *h_ele_mee_os; + TH1F *h_ele_mee_os_ebeb; + TH1F *h_ele_mee_os_ebee; + TH1F *h_ele_mee_os_eeee; + TH1F *h_ele_mee_os_gg; + TH1F *h_ele_mee_os_gb; + TH1F *h_ele_mee_os_bb; + + TH2F *h_ele_E2mnE1vsMee_all; + TH2F *h_ele_E2mnE1vsMee_egeg_all; + + TH1F *h_ele_charge; + TH2F *h_ele_chargeVsEta; + TH2F *h_ele_chargeVsPhi; + TH2F *h_ele_chargeVsPt; + TH1F *h_ele_vertexP; + TH1F *h_ele_vertexPt; + TH1F *h_ele_Et; + TH2F *h_ele_vertexPtVsEta; + TH2F *h_ele_vertexPtVsPhi; + TH1F *h_ele_vertexPt_5100; + TH1F *h_ele_vertexEta; + TH2F *h_ele_vertexEtaVsPhi; + TH1F *h_ele_vertexAbsEta; + TH1F *h_ele_vertexPhi; + TH1F *h_ele_vertexX; + TH1F *h_ele_vertexY; + TH1F *h_ele_vertexZ; + TH1F *h_ele_vertexTIP; + TH2F *h_ele_vertexTIPVsEta; + TH2F *h_ele_vertexTIPVsPhi; + TH2F *h_ele_vertexTIPVsPt; + + TH1F *histNum_; + + TH1F *histSclEn_; + TH1F *histSclEoEmatchingObject_barrel_matched; + TH1F *histSclEoEmatchingObject_endcaps_matched; + TH1F *histSclEoEmatchingObject_barrel_new_matched; + TH1F *histSclEoEmatchingObject_endcaps_new_matched; + TH1F *histSclEt_; + TH2F *histSclEtVsEta_; + TH2F *histSclEtVsPhi_; + TH2F *histSclEtaVsPhi_; + TH1F *histSclEta_; + TH1F *histSclPhi_; + TH1F *histSclSigEtaEta_; + TH1F *histSclSigEtaEta_barrel_; + TH1F *histSclSigEtaEta_endcaps_; + TH1F *histSclSigIEtaIEta_; + TH1F *histSclSigIEtaIEta_barrel_; + TH1F *histSclSigIEtaIEta_endcaps_; + TH1F *histSclE1x5_; + TH1F *histSclE1x5_barrel_; + TH1F *histSclE1x5_endcaps_; + TH1F *histSclE2x5max_; + TH1F *histSclE2x5max_barrel_; + TH1F *histSclE2x5max_endcaps_; + TH1F *histSclE5x5_; + TH1F *histSclE5x5_barrel_; + TH1F *histSclE5x5_endcaps_; + + TH1F *h_ele_ambiguousTracks; + TH2F *h_ele_ambiguousTracksVsEta; + TH2F *h_ele_ambiguousTracksVsPhi; + TH2F *h_ele_ambiguousTracksVsPt; + TH1F *h_ele_foundHits; + TH1F *h_ele_foundHits_barrel; + TH1F *h_ele_foundHits_endcaps; + TH2F *h_ele_foundHitsVsEta; + TH2F *h_ele_foundHitsVsPhi; + TH2F *h_ele_foundHitsVsPt; + TH1F *h_ele_lostHits; + TH1F *h_ele_lostHits_barrel; + TH1F *h_ele_lostHits_endcaps; + TH2F *h_ele_lostHitsVsEta; + TH2F *h_ele_lostHitsVsPhi; + TH2F *h_ele_lostHitsVsPt; + TH1F *h_ele_chi2; + TH1F *h_ele_chi2_barrel_; + TH1F *h_ele_chi2_endcaps_; + TH2F *h_ele_chi2VsEta; + TH2F *h_ele_chi2VsPhi; + TH2F *h_ele_chi2VsPt; + + TH1F *h_ele_PtoPtmatchingObject_matched; + TH1F *h_ele_PoPmatchingObject_matched; + TH2F *h_ele_PoPmatchingObjectVsEta_matched; + TH2F *h_ele_PoPmatchingObjectVsPhi_matched; + TH2F *h_ele_PoPmatchingObjectVsPt_matched; + TH1F *h_ele_PoPmatchingObject_barrel_matched; + TH1F *h_ele_PoPmatchingObject_endcaps_matched; + TH1F *h_ele_PtoPtmatchingObject_barrel_matched; + TH1F *h_ele_PtoPtmatchingObject_endcaps_matched; + TH1F *h_ele_EtaMnEtamatchingObject_matched; + TH2F *h_ele_EtaMnEtamatchingObjectVsEta_matched; + TH2F *h_ele_EtaMnEtamatchingObjectVsPhi_matched; + TH2F *h_ele_EtaMnEtamatchingObjectVsPt_matched; + TH1F *h_ele_PhiMnPhimatchingObject_matched; + TH1F *h_ele_PhiMnPhimatchingObject2_matched; + TH2F *h_ele_PhiMnPhimatchingObjectVsEta_matched; + TH2F *h_ele_PhiMnPhimatchingObjectVsPhi_matched; + TH2F *h_ele_PhiMnPhimatchingObjectVsPt_matched; + TH1F *h_ele_PinMnPout; + TH1F *h_ele_PinMnPout_mode; + TH2F *h_ele_PinMnPoutVsEta_mode; + TH2F *h_ele_PinMnPoutVsPhi_mode; + TH2F *h_ele_PinMnPoutVsPt_mode; + TH2F *h_ele_PinMnPoutVsE_mode; + TH2F *h_ele_PinMnPoutVsChi2_mode; + + TH1F *h_ele_outerP; + TH1F *h_ele_outerP_mode; + TH2F *h_ele_outerPVsEta_mode; + TH1F *h_ele_outerPt; + TH1F *h_ele_outerPt_mode; + TH2F *h_ele_outerPtVsEta_mode; + TH2F *h_ele_outerPtVsPhi_mode; + TH2F *h_ele_outerPtVsPt_mode; + TH1F *h_ele_EoP; + TH1F *h_ele_EoP_barrel; + TH1F *h_ele_EoP_endcaps; + TH2F *h_ele_EoPVsEta; + TH2F *h_ele_EoPVsPhi; + TH2F *h_ele_EoPVsE; + TH1F *h_ele_EseedOP; + TH1F *h_ele_EseedOP_barrel; + TH1F *h_ele_EseedOP_endcaps; + TH2F *h_ele_EseedOPVsEta; + TH2F *h_ele_EseedOPVsPhi; + TH2F *h_ele_EseedOPVsE; + TH1F *h_ele_EoPout; + TH1F *h_ele_EoPout_barrel; + TH1F *h_ele_EoPout_endcaps; + TH2F *h_ele_EoPoutVsEta; + TH2F *h_ele_EoPoutVsPhi; + TH2F *h_ele_EoPoutVsE; + TH1F *h_ele_EeleOPout; + TH1F *h_ele_EeleOPout_barrel; + TH1F *h_ele_EeleOPout_endcaps; + TH2F *h_ele_EeleOPoutVsEta; + TH2F *h_ele_EeleOPoutVsPhi; + TH2F *h_ele_EeleOPoutVsE; + + TH1F *h_ele_dEtaSc_propVtx; + TH1F *h_ele_dEtaSc_propVtx_barrel; + TH1F *h_ele_dEtaSc_propVtx_endcaps; + TH2F *h_ele_dEtaScVsEta_propVtx; + TH2F *h_ele_dEtaScVsPhi_propVtx; + TH2F *h_ele_dEtaScVsPt_propVtx; + TH1F *h_ele_dPhiSc_propVtx; + TH1F *h_ele_dPhiSc_propVtx_barrel; + TH1F *h_ele_dPhiSc_propVtx_endcaps; + TH2F *h_ele_dPhiScVsEta_propVtx; + TH2F *h_ele_dPhiScVsPhi_propVtx; + TH2F *h_ele_dPhiScVsPt_propVtx; + TH1F *h_ele_dEtaCl_propOut; + TH1F *h_ele_dEtaCl_propOut_barrel; + TH1F *h_ele_dEtaCl_propOut_endcaps; + TH2F *h_ele_dEtaClVsEta_propOut; + TH2F *h_ele_dEtaClVsPhi_propOut; + TH2F *h_ele_dEtaClVsPt_propOut; + TH1F *h_ele_dPhiCl_propOut; + TH1F *h_ele_dPhiCl_propOut_barrel; + TH1F *h_ele_dPhiCl_propOut_endcaps; + TH2F *h_ele_dPhiClVsEta_propOut; + TH2F *h_ele_dPhiClVsPhi_propOut; + TH2F *h_ele_dPhiClVsPt_propOut; + TH1F *h_ele_dEtaEleCl_propOut; + TH1F *h_ele_dEtaEleCl_propOut_barrel; + TH1F *h_ele_dEtaEleCl_propOut_endcaps; + TH2F *h_ele_dEtaEleClVsEta_propOut; + TH2F *h_ele_dEtaEleClVsPhi_propOut; + TH2F *h_ele_dEtaEleClVsPt_propOut; + TH1F *h_ele_dPhiEleCl_propOut; + TH1F *h_ele_dPhiEleCl_propOut_barrel; + TH1F *h_ele_dPhiEleCl_propOut_endcaps; + TH2F *h_ele_dPhiEleClVsEta_propOut; + TH2F *h_ele_dPhiEleClVsPhi_propOut; + TH2F *h_ele_dPhiEleClVsPt_propOut; + + TH1F *h_ele_seed_dphi2_; + TH2F *h_ele_seed_dphi2VsEta_; + TH2F *h_ele_seed_dphi2VsPt_; + TH1F *h_ele_seed_drz2_; + TH2F *h_ele_seed_drz2VsEta_; + TH2F *h_ele_seed_drz2VsPt_; + TH1F *h_ele_seed_subdet2_; + + TH1F *h_ele_classes; + TH1F *h_ele_eta; + TH1F *h_ele_eta_golden; + TH1F *h_ele_eta_bbrem; + TH1F *h_ele_eta_narrow; + TH1F *h_ele_eta_shower; + + TH1F *h_ele_HoE; + TH1F *h_ele_HoE_barrel; + TH1F *h_ele_HoE_endcaps; + TH1F *h_ele_HoE_fiducial; + TH2F *h_ele_HoEVsEta; + TH2F *h_ele_HoEVsPhi; + TH2F *h_ele_HoEVsE; + + TH1F *h_ele_fbrem; + TProfile *h_ele_fbremVsEta_mode; + TProfile *h_ele_fbremVsEta_mean; + + TH2F *h_ele_PinVsPoutGolden_mode; + TH2F *h_ele_PinVsPoutShowering_mode; + TH2F *h_ele_PinVsPoutGolden_mean; + TH2F *h_ele_PinVsPoutShowering_mean; + TH2F *h_ele_PtinVsPtoutGolden_mode; + TH2F *h_ele_PtinVsPtoutShowering_mode; + TH2F *h_ele_PtinVsPtoutGolden_mean; + TH2F *h_ele_PtinVsPtoutShowering_mean; + TH1F *histSclEoEmatchingObjectGolden_barrel; + TH1F *histSclEoEmatchingObjectGolden_endcaps; + TH1F *histSclEoEmatchingObjectShowering_barrel; + TH1F *histSclEoEmatchingObjectShowering_endcaps; + + TH1F *h_ele_mva; + TH1F *h_ele_provenance; + + TH1F *h_ele_tkSumPt_dr03; + TH1F *h_ele_ecalRecHitSumEt_dr03; + TH1F *h_ele_hcalDepth1TowerSumEt_dr03; + TH1F *h_ele_hcalDepth2TowerSumEt_dr03; + TH1F *h_ele_tkSumPt_dr04; + TH1F *h_ele_ecalRecHitSumEt_dr04; + TH1F *h_ele_hcalDepth1TowerSumEt_dr04; + TH1F *h_ele_hcalDepth2TowerSumEt_dr04; + + // electron selection + double minEt_; + double minPt_; + double maxAbsEta_; + bool isEB_; + bool isEE_; + bool isNotEBEEGap_; + bool isEcalDriven_; + bool isTrackerDriven_; + double eOverPMinBarrel_; + double eOverPMaxBarrel_; + double eOverPMinEndcaps_; + double eOverPMaxEndcaps_; + double dEtaMinBarrel_; + double dEtaMaxBarrel_; + double dEtaMinEndcaps_; + double dEtaMaxEndcaps_; + double dPhiMinBarrel_; + double dPhiMaxBarrel_; + double dPhiMinEndcaps_; + double dPhiMaxEndcaps_; + double sigIetaIetaMinBarrel_; + double sigIetaIetaMaxBarrel_; + double sigIetaIetaMinEndcaps_; + double sigIetaIetaMaxEndcaps_; + double hadronicOverEmMaxBarrel_; + double hadronicOverEmMaxEndcaps_; + double mvaMin_; + double tipMaxBarrel_; + double tipMaxEndcaps_; + double tkIso03Max_; + double hcalIso03Depth1MaxBarrel_; + double hcalIso03Depth1MaxEndcaps_; + double hcalIso03Depth2MaxEndcaps_; + double ecalIso03MaxBarrel_; + double ecalIso03MaxEndcaps_; + + // histos limits and binning + double etamin; + double etamax; + double phimin; + double phimax; + double ptmax; + double pmax; + double eopmax; + double eopmaxsht; + double detamin; + double detamax; + double dphimin; + double dphimax; + double detamatchmin; + double detamatchmax; + double dphimatchmin; + double dphimatchmax; + double fhitsmax; + double lhitsmax; + double poptruemin; + double poptruemax; + double meemin; + double meemax; + double hoemin; + double hoemax; + int nbineta; + int nbinp; + int nbinpt; + int nbinpteff; + int nbinphi; + int nbinp2D; + int nbinpt2D; + int nbineta2D; + int nbinphi2D; + int nbineop; + int nbineop2D; + int nbinfhits; + int nbinlhits; + int nbinxyz; + int nbindeta; + int nbindphi; + int nbindetamatch; + int nbindphimatch; + int nbindetamatch2D; + int nbindphimatch2D; + int nbinpoptrue; + int nbinmee; + int nbinhoe; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(GsfElectronDataAnalyzer); + using namespace reco; GsfElectronDataAnalyzer::GsfElectronDataAnalyzer(const edm::ParameterSet &conf) diff --git a/RecoEgamma/Examples/plugins/GsfElectronDataAnalyzer.h b/RecoEgamma/Examples/plugins/GsfElectronDataAnalyzer.h deleted file mode 100644 index 91c0e8b8e9568..0000000000000 --- a/RecoEgamma/Examples/plugins/GsfElectronDataAnalyzer.h +++ /dev/null @@ -1,414 +0,0 @@ -#ifndef GsfElectronDataAnalyzer_h -#define GsfElectronDataAnalyzer_h - -// -// Package: RecoEgamma/Examples -// Class: GsfElectronDataAnalyzer -// - -// -// Original Author: Ursula Berthon, Claude Charlot -// Created: Mon Mar 27 13:22:06 CEST 2006 -// -// - -#include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" - -#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" - -class MagneticField; -class TFile; -class TH1F; -class TH2F; -class TH1I; -class TProfile; -class TTree; - -class GsfElectronDataAnalyzer : public edm::one::EDAnalyzer<> { -public: - explicit GsfElectronDataAnalyzer(const edm::ParameterSet &conf); - - ~GsfElectronDataAnalyzer() override; - - void beginJob() override; - void endJob() override; - void analyze(const edm::Event &e, const edm::EventSetup &c) override; - -private: - bool trigger(const edm::Event &e); - - unsigned int nEvents_; - unsigned int nAfterTrigger_; - - edm::InputTag triggerResults_; - edm::InputTag beamSpot_; - - std::vector HLTPathsByName_; - std::vector HLTPathsByIndex_; - - std::string outputFile_; - edm::InputTag electronCollection_; - edm::InputTag matchingObjectCollection_; - std::string matchingCondition_; - std::string type_; - bool readAOD_; - // matching - double maxPtMatchingObject_; - double maxAbsEtaMatchingObject_; - double deltaR_; - - TrajectoryStateTransform transformer_; - edm::ESHandle pDD; - edm::ESHandle theMagField; - - TFile *histfile_; - TTree *tree_; - float mcEnergy[10], mcEta[10], mcPhi[10], mcPt[10], mcQ[10]; - float superclusterEnergy[10], superclusterEta[10], superclusterPhi[10], superclusterEt[10]; - float seedMomentum[10], seedEta[10], seedPhi[10], seedPt[10], seedQ[10]; - - TH1F *h_matchingObjectNum; - - TH1F *h_matchingObjectEta; - TH1F *h_matchingObjectAbsEta; - TH1F *h_matchingObjectP; - TH1F *h_matchingObjectPt; - TH1F *h_matchingObjectPhi; - TH1F *h_matchingObjectZ; - - TH1F *h_ele_matchingObjectEta_matched; - TH1F *h_ele_matchingObjectAbsEta_matched; - TH1F *h_ele_matchingObjectPt_matched; - TH1F *h_ele_matchingObjectPhi_matched; - TH1F *h_ele_matchingObjectZ_matched; - - TH1F *h_ele_mee_all; - TH1F *h_ele_mee_os; - TH1F *h_ele_mee_os_ebeb; - TH1F *h_ele_mee_os_ebee; - TH1F *h_ele_mee_os_eeee; - TH1F *h_ele_mee_os_gg; - TH1F *h_ele_mee_os_gb; - TH1F *h_ele_mee_os_bb; - - TH2F *h_ele_E2mnE1vsMee_all; - TH2F *h_ele_E2mnE1vsMee_egeg_all; - - TH1F *h_ele_charge; - TH2F *h_ele_chargeVsEta; - TH2F *h_ele_chargeVsPhi; - TH2F *h_ele_chargeVsPt; - TH1F *h_ele_vertexP; - TH1F *h_ele_vertexPt; - TH1F *h_ele_Et; - TH2F *h_ele_vertexPtVsEta; - TH2F *h_ele_vertexPtVsPhi; - TH1F *h_ele_vertexPt_5100; - TH1F *h_ele_vertexEta; - TH2F *h_ele_vertexEtaVsPhi; - TH1F *h_ele_vertexAbsEta; - TH1F *h_ele_vertexPhi; - TH1F *h_ele_vertexX; - TH1F *h_ele_vertexY; - TH1F *h_ele_vertexZ; - TH1F *h_ele_vertexTIP; - TH2F *h_ele_vertexTIPVsEta; - TH2F *h_ele_vertexTIPVsPhi; - TH2F *h_ele_vertexTIPVsPt; - - TH1F *histNum_; - - TH1F *histSclEn_; - TH1F *histSclEoEmatchingObject_barrel_matched; - TH1F *histSclEoEmatchingObject_endcaps_matched; - TH1F *histSclEoEmatchingObject_barrel_new_matched; - TH1F *histSclEoEmatchingObject_endcaps_new_matched; - TH1F *histSclEt_; - TH2F *histSclEtVsEta_; - TH2F *histSclEtVsPhi_; - TH2F *histSclEtaVsPhi_; - TH1F *histSclEta_; - TH1F *histSclPhi_; - TH1F *histSclSigEtaEta_; - TH1F *histSclSigEtaEta_barrel_; - TH1F *histSclSigEtaEta_endcaps_; - TH1F *histSclSigIEtaIEta_; - TH1F *histSclSigIEtaIEta_barrel_; - TH1F *histSclSigIEtaIEta_endcaps_; - TH1F *histSclE1x5_; - TH1F *histSclE1x5_barrel_; - TH1F *histSclE1x5_endcaps_; - TH1F *histSclE2x5max_; - TH1F *histSclE2x5max_barrel_; - TH1F *histSclE2x5max_endcaps_; - TH1F *histSclE5x5_; - TH1F *histSclE5x5_barrel_; - TH1F *histSclE5x5_endcaps_; - - TH1F *h_ele_ambiguousTracks; - TH2F *h_ele_ambiguousTracksVsEta; - TH2F *h_ele_ambiguousTracksVsPhi; - TH2F *h_ele_ambiguousTracksVsPt; - TH1F *h_ele_foundHits; - TH1F *h_ele_foundHits_barrel; - TH1F *h_ele_foundHits_endcaps; - TH2F *h_ele_foundHitsVsEta; - TH2F *h_ele_foundHitsVsPhi; - TH2F *h_ele_foundHitsVsPt; - TH1F *h_ele_lostHits; - TH1F *h_ele_lostHits_barrel; - TH1F *h_ele_lostHits_endcaps; - TH2F *h_ele_lostHitsVsEta; - TH2F *h_ele_lostHitsVsPhi; - TH2F *h_ele_lostHitsVsPt; - TH1F *h_ele_chi2; - TH1F *h_ele_chi2_barrel_; - TH1F *h_ele_chi2_endcaps_; - TH2F *h_ele_chi2VsEta; - TH2F *h_ele_chi2VsPhi; - TH2F *h_ele_chi2VsPt; - - TH1F *h_ele_PtoPtmatchingObject_matched; - TH1F *h_ele_PoPmatchingObject_matched; - TH2F *h_ele_PoPmatchingObjectVsEta_matched; - TH2F *h_ele_PoPmatchingObjectVsPhi_matched; - TH2F *h_ele_PoPmatchingObjectVsPt_matched; - TH1F *h_ele_PoPmatchingObject_barrel_matched; - TH1F *h_ele_PoPmatchingObject_endcaps_matched; - TH1F *h_ele_PtoPtmatchingObject_barrel_matched; - TH1F *h_ele_PtoPtmatchingObject_endcaps_matched; - TH1F *h_ele_EtaMnEtamatchingObject_matched; - TH2F *h_ele_EtaMnEtamatchingObjectVsEta_matched; - TH2F *h_ele_EtaMnEtamatchingObjectVsPhi_matched; - TH2F *h_ele_EtaMnEtamatchingObjectVsPt_matched; - TH1F *h_ele_PhiMnPhimatchingObject_matched; - TH1F *h_ele_PhiMnPhimatchingObject2_matched; - TH2F *h_ele_PhiMnPhimatchingObjectVsEta_matched; - TH2F *h_ele_PhiMnPhimatchingObjectVsPhi_matched; - TH2F *h_ele_PhiMnPhimatchingObjectVsPt_matched; - TH1F *h_ele_PinMnPout; - TH1F *h_ele_PinMnPout_mode; - TH2F *h_ele_PinMnPoutVsEta_mode; - TH2F *h_ele_PinMnPoutVsPhi_mode; - TH2F *h_ele_PinMnPoutVsPt_mode; - TH2F *h_ele_PinMnPoutVsE_mode; - TH2F *h_ele_PinMnPoutVsChi2_mode; - - TH1F *h_ele_outerP; - TH1F *h_ele_outerP_mode; - TH2F *h_ele_outerPVsEta_mode; - TH1F *h_ele_outerPt; - TH1F *h_ele_outerPt_mode; - TH2F *h_ele_outerPtVsEta_mode; - TH2F *h_ele_outerPtVsPhi_mode; - TH2F *h_ele_outerPtVsPt_mode; - TH1F *h_ele_EoP; - TH1F *h_ele_EoP_barrel; - TH1F *h_ele_EoP_endcaps; - TH2F *h_ele_EoPVsEta; - TH2F *h_ele_EoPVsPhi; - TH2F *h_ele_EoPVsE; - TH1F *h_ele_EseedOP; - TH1F *h_ele_EseedOP_barrel; - TH1F *h_ele_EseedOP_endcaps; - TH2F *h_ele_EseedOPVsEta; - TH2F *h_ele_EseedOPVsPhi; - TH2F *h_ele_EseedOPVsE; - TH1F *h_ele_EoPout; - TH1F *h_ele_EoPout_barrel; - TH1F *h_ele_EoPout_endcaps; - TH2F *h_ele_EoPoutVsEta; - TH2F *h_ele_EoPoutVsPhi; - TH2F *h_ele_EoPoutVsE; - TH1F *h_ele_EeleOPout; - TH1F *h_ele_EeleOPout_barrel; - TH1F *h_ele_EeleOPout_endcaps; - TH2F *h_ele_EeleOPoutVsEta; - TH2F *h_ele_EeleOPoutVsPhi; - TH2F *h_ele_EeleOPoutVsE; - - TH1F *h_ele_dEtaSc_propVtx; - TH1F *h_ele_dEtaSc_propVtx_barrel; - TH1F *h_ele_dEtaSc_propVtx_endcaps; - TH2F *h_ele_dEtaScVsEta_propVtx; - TH2F *h_ele_dEtaScVsPhi_propVtx; - TH2F *h_ele_dEtaScVsPt_propVtx; - TH1F *h_ele_dPhiSc_propVtx; - TH1F *h_ele_dPhiSc_propVtx_barrel; - TH1F *h_ele_dPhiSc_propVtx_endcaps; - TH2F *h_ele_dPhiScVsEta_propVtx; - TH2F *h_ele_dPhiScVsPhi_propVtx; - TH2F *h_ele_dPhiScVsPt_propVtx; - TH1F *h_ele_dEtaCl_propOut; - TH1F *h_ele_dEtaCl_propOut_barrel; - TH1F *h_ele_dEtaCl_propOut_endcaps; - TH2F *h_ele_dEtaClVsEta_propOut; - TH2F *h_ele_dEtaClVsPhi_propOut; - TH2F *h_ele_dEtaClVsPt_propOut; - TH1F *h_ele_dPhiCl_propOut; - TH1F *h_ele_dPhiCl_propOut_barrel; - TH1F *h_ele_dPhiCl_propOut_endcaps; - TH2F *h_ele_dPhiClVsEta_propOut; - TH2F *h_ele_dPhiClVsPhi_propOut; - TH2F *h_ele_dPhiClVsPt_propOut; - TH1F *h_ele_dEtaEleCl_propOut; - TH1F *h_ele_dEtaEleCl_propOut_barrel; - TH1F *h_ele_dEtaEleCl_propOut_endcaps; - TH2F *h_ele_dEtaEleClVsEta_propOut; - TH2F *h_ele_dEtaEleClVsPhi_propOut; - TH2F *h_ele_dEtaEleClVsPt_propOut; - TH1F *h_ele_dPhiEleCl_propOut; - TH1F *h_ele_dPhiEleCl_propOut_barrel; - TH1F *h_ele_dPhiEleCl_propOut_endcaps; - TH2F *h_ele_dPhiEleClVsEta_propOut; - TH2F *h_ele_dPhiEleClVsPhi_propOut; - TH2F *h_ele_dPhiEleClVsPt_propOut; - - TH1F *h_ele_seed_dphi2_; - TH2F *h_ele_seed_dphi2VsEta_; - TH2F *h_ele_seed_dphi2VsPt_; - TH1F *h_ele_seed_drz2_; - TH2F *h_ele_seed_drz2VsEta_; - TH2F *h_ele_seed_drz2VsPt_; - TH1F *h_ele_seed_subdet2_; - - TH1F *h_ele_classes; - TH1F *h_ele_eta; - TH1F *h_ele_eta_golden; - TH1F *h_ele_eta_bbrem; - TH1F *h_ele_eta_narrow; - TH1F *h_ele_eta_shower; - - TH1F *h_ele_HoE; - TH1F *h_ele_HoE_barrel; - TH1F *h_ele_HoE_endcaps; - TH1F *h_ele_HoE_fiducial; - TH2F *h_ele_HoEVsEta; - TH2F *h_ele_HoEVsPhi; - TH2F *h_ele_HoEVsE; - - TH1F *h_ele_fbrem; - TProfile *h_ele_fbremVsEta_mode; - TProfile *h_ele_fbremVsEta_mean; - - TH2F *h_ele_PinVsPoutGolden_mode; - TH2F *h_ele_PinVsPoutShowering_mode; - TH2F *h_ele_PinVsPoutGolden_mean; - TH2F *h_ele_PinVsPoutShowering_mean; - TH2F *h_ele_PtinVsPtoutGolden_mode; - TH2F *h_ele_PtinVsPtoutShowering_mode; - TH2F *h_ele_PtinVsPtoutGolden_mean; - TH2F *h_ele_PtinVsPtoutShowering_mean; - TH1F *histSclEoEmatchingObjectGolden_barrel; - TH1F *histSclEoEmatchingObjectGolden_endcaps; - TH1F *histSclEoEmatchingObjectShowering_barrel; - TH1F *histSclEoEmatchingObjectShowering_endcaps; - - TH1F *h_ele_mva; - TH1F *h_ele_provenance; - - TH1F *h_ele_tkSumPt_dr03; - TH1F *h_ele_ecalRecHitSumEt_dr03; - TH1F *h_ele_hcalDepth1TowerSumEt_dr03; - TH1F *h_ele_hcalDepth2TowerSumEt_dr03; - TH1F *h_ele_tkSumPt_dr04; - TH1F *h_ele_ecalRecHitSumEt_dr04; - TH1F *h_ele_hcalDepth1TowerSumEt_dr04; - TH1F *h_ele_hcalDepth2TowerSumEt_dr04; - - // electron selection - double minEt_; - double minPt_; - double maxAbsEta_; - bool isEB_; - bool isEE_; - bool isNotEBEEGap_; - bool isEcalDriven_; - bool isTrackerDriven_; - double eOverPMinBarrel_; - double eOverPMaxBarrel_; - double eOverPMinEndcaps_; - double eOverPMaxEndcaps_; - double dEtaMinBarrel_; - double dEtaMaxBarrel_; - double dEtaMinEndcaps_; - double dEtaMaxEndcaps_; - double dPhiMinBarrel_; - double dPhiMaxBarrel_; - double dPhiMinEndcaps_; - double dPhiMaxEndcaps_; - double sigIetaIetaMinBarrel_; - double sigIetaIetaMaxBarrel_; - double sigIetaIetaMinEndcaps_; - double sigIetaIetaMaxEndcaps_; - double hadronicOverEmMaxBarrel_; - double hadronicOverEmMaxEndcaps_; - double mvaMin_; - double tipMaxBarrel_; - double tipMaxEndcaps_; - double tkIso03Max_; - double hcalIso03Depth1MaxBarrel_; - double hcalIso03Depth1MaxEndcaps_; - double hcalIso03Depth2MaxEndcaps_; - double ecalIso03MaxBarrel_; - double ecalIso03MaxEndcaps_; - - // histos limits and binning - double etamin; - double etamax; - double phimin; - double phimax; - double ptmax; - double pmax; - double eopmax; - double eopmaxsht; - double detamin; - double detamax; - double dphimin; - double dphimax; - double detamatchmin; - double detamatchmax; - double dphimatchmin; - double dphimatchmax; - double fhitsmax; - double lhitsmax; - double poptruemin; - double poptruemax; - double meemin; - double meemax; - double hoemin; - double hoemax; - int nbineta; - int nbinp; - int nbinpt; - int nbinpteff; - int nbinphi; - int nbinp2D; - int nbinpt2D; - int nbineta2D; - int nbinphi2D; - int nbineop; - int nbineop2D; - int nbinfhits; - int nbinlhits; - int nbinxyz; - int nbindeta; - int nbindphi; - int nbindetamatch; - int nbindphimatch; - int nbindetamatch2D; - int nbindphimatch2D; - int nbinpoptrue; - int nbinmee; - int nbinhoe; -}; - -#endif diff --git a/RecoEgamma/Examples/plugins/GsfElectronFakeAnalyzer.cc b/RecoEgamma/Examples/plugins/GsfElectronFakeAnalyzer.cc index af87eb786a3e6..16523b4acf2df 100644 --- a/RecoEgamma/Examples/plugins/GsfElectronFakeAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/GsfElectronFakeAnalyzer.cc @@ -11,32 +11,34 @@ */ // -// Original Author: Ursula Berthon +// Original Author: Ursula Berthon, Claude Charlot // Created: Mon Mar 27 13:22:06 CEST 2006 // // -// user include files -#include "RecoEgamma/Examples/plugins/GsfElectronFakeAnalyzer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/Common/interface/Handle.h" #include "DataFormats/EgammaCandidates/interface/GsfElectron.h" #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/EgammaReco/interface/BasicClusterFwd.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" #include "DataFormats/EgammaReco/interface/ElectronSeed.h" #include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" -#include "DataFormats/JetReco/interface/CaloJetCollection.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" #include "DataFormats/JetReco/interface/CaloJet.h" -#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/JetReco/interface/CaloJetCollection.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" #include "CLHEP/Units/GlobalPhysicalConstants.h" -#include + #include "TMath.h" #include "TFile.h" #include "TH1F.h" @@ -44,8 +46,392 @@ #include "TH2F.h" #include "TProfile.h" #include "TTree.h" + #include +class GsfElectronFakeAnalyzer : public edm::one::EDAnalyzer<> { +public: + explicit GsfElectronFakeAnalyzer(const edm::ParameterSet &conf); + + ~GsfElectronFakeAnalyzer() override; + + void beginJob() override; + void endJob() override; + void analyze(const edm::Event &e, const edm::EventSetup &c) override; + +private: + TrajectoryStateTransform transformer_; + edm::ESHandle pDD; + edm::ESHandle theMagField; + TFile *histfile_; + TTree *tree_; + float mcEnergy[10], mcEta[10], mcPhi[10], mcPt[10], mcQ[10]; + float superclusterEnergy[10], superclusterEta[10], superclusterPhi[10], superclusterEt[10]; + float seedMomentum[10], seedEta[10], seedPhi[10], seedPt[10], seedQ[10]; + + TH1F *h_matchingObjectNum; + + TH1F *h_matchingObjectEta; + TH1F *h_matchingObjectAbsEta; + TH1F *h_matchingObjectP; + TH1F *h_matchingObjectPt; + TH1F *h_matchingObjectPhi; + TH1F *h_matchingObjectZ; + + TH1F *h_ele_matchingObjectEta_matched; + TH1F *h_ele_matchingObjectAbsEta_matched; + TH1F *h_ele_matchingObjectPt_matched; + TH1F *h_ele_matchingObjectPhi_matched; + TH1F *h_ele_matchingObjectZ_matched; + + TH1F *h_ele_EoverP_all; + TH1F *h_ele_EoverP_all_barrel; + TH1F *h_ele_EoverP_all_endcaps; + TH1F *h_ele_EseedOP_all; + TH1F *h_ele_EseedOP_all_barrel; + TH1F *h_ele_EseedOP_all_endcaps; + TH1F *h_ele_EoPout_all; + TH1F *h_ele_EoPout_all_barrel; + TH1F *h_ele_EoPout_all_endcaps; + TH1F *h_ele_EeleOPout_all; + TH1F *h_ele_EeleOPout_all_barrel; + TH1F *h_ele_EeleOPout_all_endcaps; + TH1F *h_ele_dEtaSc_propVtx_all; + TH1F *h_ele_dEtaSc_propVtx_all_barrel; + TH1F *h_ele_dEtaSc_propVtx_all_endcaps; + TH1F *h_ele_dPhiSc_propVtx_all; + TH1F *h_ele_dPhiSc_propVtx_all_barrel; + TH1F *h_ele_dPhiSc_propVtx_all_endcaps; + TH1F *h_ele_dEtaCl_propOut_all; + TH1F *h_ele_dEtaCl_propOut_all_barrel; + TH1F *h_ele_dEtaCl_propOut_all_endcaps; + TH1F *h_ele_dPhiCl_propOut_all; + TH1F *h_ele_dPhiCl_propOut_all_barrel; + TH1F *h_ele_dPhiCl_propOut_all_endcaps; + TH1F *h_ele_TIP_all; + TH1F *h_ele_TIP_all_barrel; + TH1F *h_ele_TIP_all_endcaps; + TH1F *h_ele_HoE_all; + TH1F *h_ele_HoE_all_barrel; + TH1F *h_ele_HoE_all_endcaps; + TH1F *h_ele_vertexEta_all; + TH1F *h_ele_vertexPt_all; + TH1F *h_ele_mee_all; + TH1F *h_ele_mee_os; + + TH2F *h_ele_E2mnE1vsMee_all; + TH2F *h_ele_E2mnE1vsMee_egeg_all; + + TH1F *h_ele_charge; + TH2F *h_ele_chargeVsEta; + TH2F *h_ele_chargeVsPhi; + TH2F *h_ele_chargeVsPt; + TH1F *h_ele_vertexP; + TH1F *h_ele_vertexPt; + TH2F *h_ele_vertexPtVsEta; + TH2F *h_ele_vertexPtVsPhi; + TH1F *h_ele_vertexPt_5100; + TH1F *h_ele_vertexEta; + TH2F *h_ele_vertexEtaVsPhi; + TH1F *h_ele_vertexAbsEta; + TH1F *h_ele_vertexPhi; + TH1F *h_ele_vertexX; + TH1F *h_ele_vertexY; + TH1F *h_ele_vertexZ; + TH1F *h_ele_vertexTIP; + TH2F *h_ele_vertexTIPVsEta; + TH2F *h_ele_vertexTIPVsPhi; + TH2F *h_ele_vertexTIPVsPt; + + TH1F *histNum_; + + TH1F *histSclEn_; + TH1F *histSclEoEmatchingObject_barrel; + TH1F *histSclEoEmatchingObject_endcaps; + TH1F *histSclEt_; + TH2F *histSclEtVsEta_; + TH2F *histSclEtVsPhi_; + TH2F *histSclEtaVsPhi_; + TH1F *histSclEta_; + TH1F *histSclPhi_; + TH1F *histSclSigEtaEta_; + TH1F *histSclSigEtaEta_barrel_; + TH1F *histSclSigEtaEta_endcaps_; + TH1F *histSclSigIEtaIEta_; + TH1F *histSclSigIEtaIEta_barrel_; + TH1F *histSclSigIEtaIEta_endcaps_; + TH1F *histSclE1x5_; + TH1F *histSclE1x5_barrel_; + TH1F *histSclE1x5_endcaps_; + TH1F *histSclE2x5max_; + TH1F *histSclE2x5max_barrel_; + TH1F *histSclE2x5max_endcaps_; + TH1F *histSclE5x5_; + TH1F *histSclE5x5_barrel_; + TH1F *histSclE5x5_endcaps_; + + TH1F *h_ele_ambiguousTracks; + TH2F *h_ele_ambiguousTracksVsEta; + TH2F *h_ele_ambiguousTracksVsPhi; + TH2F *h_ele_ambiguousTracksVsPt; + TH1F *h_ele_foundHits; + TH1F *h_ele_foundHits_barrel; + TH1F *h_ele_foundHits_endcaps; + TH2F *h_ele_foundHitsVsEta; + TH2F *h_ele_foundHitsVsPhi; + TH2F *h_ele_foundHitsVsPt; + TH1F *h_ele_lostHits; + TH1F *h_ele_lostHits_barrel; + TH1F *h_ele_lostHits_endcaps; + TH2F *h_ele_lostHitsVsEta; + TH2F *h_ele_lostHitsVsPhi; + TH2F *h_ele_lostHitsVsPt; + TH1F *h_ele_chi2; + TH1F *h_ele_chi2_barrel; + TH1F *h_ele_chi2_endcaps; + TH2F *h_ele_chi2VsEta; + TH2F *h_ele_chi2VsPhi; + TH2F *h_ele_chi2VsPt; + + TH1F *h_ele_PoPmatchingObject; + TH2F *h_ele_PoPmatchingObjectVsEta; + TH2F *h_ele_PoPmatchingObjectVsPhi; + TH2F *h_ele_PoPmatchingObjectVsPt; + TH1F *h_ele_PoPmatchingObject_barrel; + TH1F *h_ele_PoPmatchingObject_endcaps; + TH1F *h_ele_EtaMnEtamatchingObject; + TH2F *h_ele_EtaMnEtamatchingObjectVsEta; + TH2F *h_ele_EtaMnEtamatchingObjectVsPhi; + TH2F *h_ele_EtaMnEtamatchingObjectVsPt; + TH1F *h_ele_PhiMnPhimatchingObject; + TH1F *h_ele_PhiMnPhimatchingObject2; + TH2F *h_ele_PhiMnPhimatchingObjectVsEta; + TH2F *h_ele_PhiMnPhimatchingObjectVsPhi; + TH2F *h_ele_PhiMnPhimatchingObjectVsPt; + TH1F *h_ele_PinMnPout; + TH1F *h_ele_PinMnPout_mode; + TH2F *h_ele_PinMnPoutVsEta_mode; + TH2F *h_ele_PinMnPoutVsPhi_mode; + TH2F *h_ele_PinMnPoutVsPt_mode; + TH2F *h_ele_PinMnPoutVsE_mode; + TH2F *h_ele_PinMnPoutVsChi2_mode; + + TH1F *h_ele_outerP; + TH1F *h_ele_outerP_mode; + TH2F *h_ele_outerPVsEta_mode; + TH1F *h_ele_outerPt; + TH1F *h_ele_outerPt_mode; + TH2F *h_ele_outerPtVsEta_mode; + TH2F *h_ele_outerPtVsPhi_mode; + TH2F *h_ele_outerPtVsPt_mode; + TH1F *h_ele_EoP; + TH1F *h_ele_EoP_barrel; + TH1F *h_ele_EoP_endcaps; + TH1F *h_ele_EoP_eg; + TH1F *h_ele_EoP_eg_barrel; + TH1F *h_ele_EoP_eg_endcaps; + TH2F *h_ele_EoPVsEta; + TH2F *h_ele_EoPVsPhi; + TH2F *h_ele_EoPVsE; + TH1F *h_ele_EseedOP; + TH1F *h_ele_EseedOP_barrel; + TH1F *h_ele_EseedOP_endcaps; + TH1F *h_ele_EseedOP_eg; + TH1F *h_ele_EseedOP_eg_barrel; + TH1F *h_ele_EseedOP_eg_endcaps; + TH2F *h_ele_EseedOPVsEta; + TH2F *h_ele_EseedOPVsPhi; + TH2F *h_ele_EseedOPVsE; + TH1F *h_ele_EoPout; + TH1F *h_ele_EoPout_barrel; + TH1F *h_ele_EoPout_endcaps; + TH1F *h_ele_EoPout_eg; + TH1F *h_ele_EoPout_eg_barrel; + TH1F *h_ele_EoPout_eg_endcaps; + TH2F *h_ele_EoPoutVsEta; + TH2F *h_ele_EoPoutVsPhi; + TH2F *h_ele_EoPoutVsE; + TH1F *h_ele_EeleOPout; + TH1F *h_ele_EeleOPout_barrel; + TH1F *h_ele_EeleOPout_endcaps; + TH1F *h_ele_EeleOPout_eg; + TH1F *h_ele_EeleOPout_eg_barrel; + TH1F *h_ele_EeleOPout_eg_endcaps; + TH2F *h_ele_EeleOPoutVsEta; + TH2F *h_ele_EeleOPoutVsPhi; + TH2F *h_ele_EeleOPoutVsE; + + TH1F *h_ele_dEtaSc_propVtx; + TH1F *h_ele_dEtaSc_propVtx_barrel; + TH1F *h_ele_dEtaSc_propVtx_endcaps; + TH1F *h_ele_dEtaSc_propVtx_eg; + TH1F *h_ele_dEtaSc_propVtx_eg_barrel; + TH1F *h_ele_dEtaSc_propVtx_eg_endcaps; + TH2F *h_ele_dEtaScVsEta_propVtx; + TH2F *h_ele_dEtaScVsPhi_propVtx; + TH2F *h_ele_dEtaScVsPt_propVtx; + TH1F *h_ele_dPhiSc_propVtx; + TH1F *h_ele_dPhiSc_propVtx_barrel; + TH1F *h_ele_dPhiSc_propVtx_endcaps; + TH1F *h_ele_dPhiSc_propVtx_eg; + TH1F *h_ele_dPhiSc_propVtx_eg_barrel; + TH1F *h_ele_dPhiSc_propVtx_eg_endcaps; + TH2F *h_ele_dPhiScVsEta_propVtx; + TH2F *h_ele_dPhiScVsPhi_propVtx; + TH2F *h_ele_dPhiScVsPt_propVtx; + TH1F *h_ele_dEtaCl_propOut; + TH1F *h_ele_dEtaCl_propOut_barrel; + TH1F *h_ele_dEtaCl_propOut_endcaps; + TH1F *h_ele_dEtaCl_propOut_eg; + TH1F *h_ele_dEtaCl_propOut_eg_barrel; + TH1F *h_ele_dEtaCl_propOut_eg_endcaps; + TH2F *h_ele_dEtaClVsEta_propOut; + TH2F *h_ele_dEtaClVsPhi_propOut; + TH2F *h_ele_dEtaClVsPt_propOut; + TH1F *h_ele_dPhiCl_propOut; + TH1F *h_ele_dPhiCl_propOut_barrel; + TH1F *h_ele_dPhiCl_propOut_endcaps; + TH1F *h_ele_dPhiCl_propOut_eg; + TH1F *h_ele_dPhiCl_propOut_eg_barrel; + TH1F *h_ele_dPhiCl_propOut_eg_endcaps; + TH2F *h_ele_dPhiClVsEta_propOut; + TH2F *h_ele_dPhiClVsPhi_propOut; + TH2F *h_ele_dPhiClVsPt_propOut; + TH1F *h_ele_dEtaEleCl_propOut; + TH1F *h_ele_dEtaEleCl_propOut_barrel; + TH1F *h_ele_dEtaEleCl_propOut_endcaps; + TH1F *h_ele_dEtaEleCl_propOut_eg; + TH1F *h_ele_dEtaEleCl_propOut_eg_barrel; + TH1F *h_ele_dEtaEleCl_propOut_eg_endcaps; + TH2F *h_ele_dEtaEleClVsEta_propOut; + TH2F *h_ele_dEtaEleClVsPhi_propOut; + TH2F *h_ele_dEtaEleClVsPt_propOut; + TH1F *h_ele_dPhiEleCl_propOut; + TH1F *h_ele_dPhiEleCl_propOut_barrel; + TH1F *h_ele_dPhiEleCl_propOut_endcaps; + TH1F *h_ele_dPhiEleCl_propOut_eg; + TH1F *h_ele_dPhiEleCl_propOut_eg_barrel; + TH1F *h_ele_dPhiEleCl_propOut_eg_endcaps; + TH2F *h_ele_dPhiEleClVsEta_propOut; + TH2F *h_ele_dPhiEleClVsPhi_propOut; + TH2F *h_ele_dPhiEleClVsPt_propOut; + + TH1F *h_ele_seed_dphi2_; + TH2F *h_ele_seed_dphi2VsEta_; + TH2F *h_ele_seed_dphi2VsPt_; + TH1F *h_ele_seed_drz2_; + TH2F *h_ele_seed_drz2VsEta_; + TH2F *h_ele_seed_drz2VsPt_; + TH1F *h_ele_seed_subdet2_; + + TH1F *h_ele_classes; + TH1F *h_ele_eta; + TH1F *h_ele_eta_golden; + TH1F *h_ele_eta_bbrem; + TH1F *h_ele_eta_narrow; + TH1F *h_ele_eta_shower; + + TH1F *h_ele_HoE; + TH1F *h_ele_HoE_barrel; + TH1F *h_ele_HoE_endcaps; + TH1F *h_ele_HoE_eg; + TH1F *h_ele_HoE_eg_barrel; + TH1F *h_ele_HoE_eg_endcaps; + TH1F *h_ele_HoE_fiducial; + TH2F *h_ele_HoEVsEta; + TH2F *h_ele_HoEVsPhi; + TH2F *h_ele_HoEVsE; + + TH1F *h_ele_fbrem; + TProfile *h_ele_fbremVsEta_mode; + TProfile *h_ele_fbremVsEta_mean; + + TH2F *h_ele_PinVsPoutGolden_mode; + TH2F *h_ele_PinVsPoutShowering_mode; + TH2F *h_ele_PinVsPoutGolden_mean; + TH2F *h_ele_PinVsPoutShowering_mean; + TH2F *h_ele_PtinVsPtoutGolden_mode; + TH2F *h_ele_PtinVsPtoutShowering_mode; + TH2F *h_ele_PtinVsPtoutGolden_mean; + TH2F *h_ele_PtinVsPtoutShowering_mean; + TH1F *histSclEoEmatchingObjectGolden_barrel; + TH1F *histSclEoEmatchingObjectGolden_endcaps; + TH1F *histSclEoEmatchingObjectShowering_barrel; + TH1F *histSclEoEmatchingObjectShowering_endcaps; + + TH1F *h_ele_mva; + TH1F *h_ele_provenance; + + TH1F *h_ele_tkSumPt_dr03; + TH1F *h_ele_ecalRecHitSumEt_dr03; + TH1F *h_ele_hcalDepth1TowerSumEt_dr03; + TH1F *h_ele_hcalDepth2TowerSumEt_dr03; + TH1F *h_ele_tkSumPt_dr04; + TH1F *h_ele_ecalRecHitSumEt_dr04; + TH1F *h_ele_hcalDepth1TowerSumEt_dr04; + TH1F *h_ele_hcalDepth2TowerSumEt_dr04; + + std::string outputFile_; + edm::InputTag electronCollection_; + edm::InputTag matchingObjectCollection_; + edm::InputTag beamSpot_; + std::string type_; + bool readAOD_; + + double maxPt_; + double maxAbsEta_; + double deltaR_; + + // histos limits and binning + double etamin; + double etamax; + double phimin; + double phimax; + double ptmax; + double pmax; + double eopmax; + double eopmaxsht; + double detamin; + double detamax; + double dphimin; + double dphimax; + double detamatchmin; + double detamatchmax; + double dphimatchmin; + double dphimatchmax; + double fhitsmax; + double lhitsmax; + double meemin; + double meemax; + double hoemin; + double hoemax; + int nbineta; + int nbinp; + int nbinpt; + int nbinpteff; + int nbinphi; + int nbinp2D; + int nbinpt2D; + int nbineta2D; + int nbinphi2D; + int nbineop; + int nbineop2D; + int nbinfhits; + int nbinlhits; + int nbinxyz; + int nbindeta; + int nbindphi; + int nbindetamatch; + int nbindphimatch; + int nbindetamatch2D; + int nbindphimatch2D; + int nbinmee; + int nbinhoe; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(GsfElectronFakeAnalyzer); + using namespace reco; GsfElectronFakeAnalyzer::GsfElectronFakeAnalyzer(const edm::ParameterSet &conf) diff --git a/RecoEgamma/Examples/plugins/GsfElectronFakeAnalyzer.h b/RecoEgamma/Examples/plugins/GsfElectronFakeAnalyzer.h deleted file mode 100644 index b6dc11bba60e6..0000000000000 --- a/RecoEgamma/Examples/plugins/GsfElectronFakeAnalyzer.h +++ /dev/null @@ -1,415 +0,0 @@ -#ifndef GsfElectronFakeAnalyzer_h -#define GsfElectronFakeAnalyzer_h - -// -// Package: RecoEgamma/Examples -// Class: GsfElectronFakeAnalyzer -// - -// -// Original Author: Ursula Berthon, Claude Charlot -// Created: Mon Mar 27 13:22:06 CEST 2006 -// -// - -#include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" - -#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" - -class MagneticField; -class TFile; -class TH1F; -class TH2F; -class TH1I; -class TProfile; -class TTree; - -class GsfElectronFakeAnalyzer : public edm::one::EDAnalyzer<> { -public: - explicit GsfElectronFakeAnalyzer(const edm::ParameterSet &conf); - - ~GsfElectronFakeAnalyzer() override; - - void beginJob() override; - void endJob() override; - void analyze(const edm::Event &e, const edm::EventSetup &c) override; - -private: - TrajectoryStateTransform transformer_; - edm::ESHandle pDD; - edm::ESHandle theMagField; - TFile *histfile_; - TTree *tree_; - float mcEnergy[10], mcEta[10], mcPhi[10], mcPt[10], mcQ[10]; - float superclusterEnergy[10], superclusterEta[10], superclusterPhi[10], superclusterEt[10]; - float seedMomentum[10], seedEta[10], seedPhi[10], seedPt[10], seedQ[10]; - - TH1F *h_matchingObjectNum; - - TH1F *h_matchingObjectEta; - TH1F *h_matchingObjectAbsEta; - TH1F *h_matchingObjectP; - TH1F *h_matchingObjectPt; - TH1F *h_matchingObjectPhi; - TH1F *h_matchingObjectZ; - - TH1F *h_ele_matchingObjectEta_matched; - TH1F *h_ele_matchingObjectAbsEta_matched; - TH1F *h_ele_matchingObjectPt_matched; - TH1F *h_ele_matchingObjectPhi_matched; - TH1F *h_ele_matchingObjectZ_matched; - - TH1F *h_ele_EoverP_all; - TH1F *h_ele_EoverP_all_barrel; - TH1F *h_ele_EoverP_all_endcaps; - TH1F *h_ele_EseedOP_all; - TH1F *h_ele_EseedOP_all_barrel; - TH1F *h_ele_EseedOP_all_endcaps; - TH1F *h_ele_EoPout_all; - TH1F *h_ele_EoPout_all_barrel; - TH1F *h_ele_EoPout_all_endcaps; - TH1F *h_ele_EeleOPout_all; - TH1F *h_ele_EeleOPout_all_barrel; - TH1F *h_ele_EeleOPout_all_endcaps; - TH1F *h_ele_dEtaSc_propVtx_all; - TH1F *h_ele_dEtaSc_propVtx_all_barrel; - TH1F *h_ele_dEtaSc_propVtx_all_endcaps; - TH1F *h_ele_dPhiSc_propVtx_all; - TH1F *h_ele_dPhiSc_propVtx_all_barrel; - TH1F *h_ele_dPhiSc_propVtx_all_endcaps; - TH1F *h_ele_dEtaCl_propOut_all; - TH1F *h_ele_dEtaCl_propOut_all_barrel; - TH1F *h_ele_dEtaCl_propOut_all_endcaps; - TH1F *h_ele_dPhiCl_propOut_all; - TH1F *h_ele_dPhiCl_propOut_all_barrel; - TH1F *h_ele_dPhiCl_propOut_all_endcaps; - TH1F *h_ele_TIP_all; - TH1F *h_ele_TIP_all_barrel; - TH1F *h_ele_TIP_all_endcaps; - TH1F *h_ele_HoE_all; - TH1F *h_ele_HoE_all_barrel; - TH1F *h_ele_HoE_all_endcaps; - TH1F *h_ele_vertexEta_all; - TH1F *h_ele_vertexPt_all; - TH1F *h_ele_mee_all; - TH1F *h_ele_mee_os; - - TH2F *h_ele_E2mnE1vsMee_all; - TH2F *h_ele_E2mnE1vsMee_egeg_all; - - TH1F *h_ele_charge; - TH2F *h_ele_chargeVsEta; - TH2F *h_ele_chargeVsPhi; - TH2F *h_ele_chargeVsPt; - TH1F *h_ele_vertexP; - TH1F *h_ele_vertexPt; - TH2F *h_ele_vertexPtVsEta; - TH2F *h_ele_vertexPtVsPhi; - TH1F *h_ele_vertexPt_5100; - TH1F *h_ele_vertexEta; - TH2F *h_ele_vertexEtaVsPhi; - TH1F *h_ele_vertexAbsEta; - TH1F *h_ele_vertexPhi; - TH1F *h_ele_vertexX; - TH1F *h_ele_vertexY; - TH1F *h_ele_vertexZ; - TH1F *h_ele_vertexTIP; - TH2F *h_ele_vertexTIPVsEta; - TH2F *h_ele_vertexTIPVsPhi; - TH2F *h_ele_vertexTIPVsPt; - - TH1F *histNum_; - - TH1F *histSclEn_; - TH1F *histSclEoEmatchingObject_barrel; - TH1F *histSclEoEmatchingObject_endcaps; - TH1F *histSclEt_; - TH2F *histSclEtVsEta_; - TH2F *histSclEtVsPhi_; - TH2F *histSclEtaVsPhi_; - TH1F *histSclEta_; - TH1F *histSclPhi_; - TH1F *histSclSigEtaEta_; - TH1F *histSclSigEtaEta_barrel_; - TH1F *histSclSigEtaEta_endcaps_; - TH1F *histSclSigIEtaIEta_; - TH1F *histSclSigIEtaIEta_barrel_; - TH1F *histSclSigIEtaIEta_endcaps_; - TH1F *histSclE1x5_; - TH1F *histSclE1x5_barrel_; - TH1F *histSclE1x5_endcaps_; - TH1F *histSclE2x5max_; - TH1F *histSclE2x5max_barrel_; - TH1F *histSclE2x5max_endcaps_; - TH1F *histSclE5x5_; - TH1F *histSclE5x5_barrel_; - TH1F *histSclE5x5_endcaps_; - - TH1F *h_ele_ambiguousTracks; - TH2F *h_ele_ambiguousTracksVsEta; - TH2F *h_ele_ambiguousTracksVsPhi; - TH2F *h_ele_ambiguousTracksVsPt; - TH1F *h_ele_foundHits; - TH1F *h_ele_foundHits_barrel; - TH1F *h_ele_foundHits_endcaps; - TH2F *h_ele_foundHitsVsEta; - TH2F *h_ele_foundHitsVsPhi; - TH2F *h_ele_foundHitsVsPt; - TH1F *h_ele_lostHits; - TH1F *h_ele_lostHits_barrel; - TH1F *h_ele_lostHits_endcaps; - TH2F *h_ele_lostHitsVsEta; - TH2F *h_ele_lostHitsVsPhi; - TH2F *h_ele_lostHitsVsPt; - TH1F *h_ele_chi2; - TH1F *h_ele_chi2_barrel; - TH1F *h_ele_chi2_endcaps; - TH2F *h_ele_chi2VsEta; - TH2F *h_ele_chi2VsPhi; - TH2F *h_ele_chi2VsPt; - - TH1F *h_ele_PoPmatchingObject; - TH2F *h_ele_PoPmatchingObjectVsEta; - TH2F *h_ele_PoPmatchingObjectVsPhi; - TH2F *h_ele_PoPmatchingObjectVsPt; - TH1F *h_ele_PoPmatchingObject_barrel; - TH1F *h_ele_PoPmatchingObject_endcaps; - TH1F *h_ele_EtaMnEtamatchingObject; - TH2F *h_ele_EtaMnEtamatchingObjectVsEta; - TH2F *h_ele_EtaMnEtamatchingObjectVsPhi; - TH2F *h_ele_EtaMnEtamatchingObjectVsPt; - TH1F *h_ele_PhiMnPhimatchingObject; - TH1F *h_ele_PhiMnPhimatchingObject2; - TH2F *h_ele_PhiMnPhimatchingObjectVsEta; - TH2F *h_ele_PhiMnPhimatchingObjectVsPhi; - TH2F *h_ele_PhiMnPhimatchingObjectVsPt; - TH1F *h_ele_PinMnPout; - TH1F *h_ele_PinMnPout_mode; - TH2F *h_ele_PinMnPoutVsEta_mode; - TH2F *h_ele_PinMnPoutVsPhi_mode; - TH2F *h_ele_PinMnPoutVsPt_mode; - TH2F *h_ele_PinMnPoutVsE_mode; - TH2F *h_ele_PinMnPoutVsChi2_mode; - - TH1F *h_ele_outerP; - TH1F *h_ele_outerP_mode; - TH2F *h_ele_outerPVsEta_mode; - TH1F *h_ele_outerPt; - TH1F *h_ele_outerPt_mode; - TH2F *h_ele_outerPtVsEta_mode; - TH2F *h_ele_outerPtVsPhi_mode; - TH2F *h_ele_outerPtVsPt_mode; - TH1F *h_ele_EoP; - TH1F *h_ele_EoP_barrel; - TH1F *h_ele_EoP_endcaps; - TH1F *h_ele_EoP_eg; - TH1F *h_ele_EoP_eg_barrel; - TH1F *h_ele_EoP_eg_endcaps; - TH2F *h_ele_EoPVsEta; - TH2F *h_ele_EoPVsPhi; - TH2F *h_ele_EoPVsE; - TH1F *h_ele_EseedOP; - TH1F *h_ele_EseedOP_barrel; - TH1F *h_ele_EseedOP_endcaps; - TH1F *h_ele_EseedOP_eg; - TH1F *h_ele_EseedOP_eg_barrel; - TH1F *h_ele_EseedOP_eg_endcaps; - TH2F *h_ele_EseedOPVsEta; - TH2F *h_ele_EseedOPVsPhi; - TH2F *h_ele_EseedOPVsE; - TH1F *h_ele_EoPout; - TH1F *h_ele_EoPout_barrel; - TH1F *h_ele_EoPout_endcaps; - TH1F *h_ele_EoPout_eg; - TH1F *h_ele_EoPout_eg_barrel; - TH1F *h_ele_EoPout_eg_endcaps; - TH2F *h_ele_EoPoutVsEta; - TH2F *h_ele_EoPoutVsPhi; - TH2F *h_ele_EoPoutVsE; - TH1F *h_ele_EeleOPout; - TH1F *h_ele_EeleOPout_barrel; - TH1F *h_ele_EeleOPout_endcaps; - TH1F *h_ele_EeleOPout_eg; - TH1F *h_ele_EeleOPout_eg_barrel; - TH1F *h_ele_EeleOPout_eg_endcaps; - TH2F *h_ele_EeleOPoutVsEta; - TH2F *h_ele_EeleOPoutVsPhi; - TH2F *h_ele_EeleOPoutVsE; - - TH1F *h_ele_dEtaSc_propVtx; - TH1F *h_ele_dEtaSc_propVtx_barrel; - TH1F *h_ele_dEtaSc_propVtx_endcaps; - TH1F *h_ele_dEtaSc_propVtx_eg; - TH1F *h_ele_dEtaSc_propVtx_eg_barrel; - TH1F *h_ele_dEtaSc_propVtx_eg_endcaps; - TH2F *h_ele_dEtaScVsEta_propVtx; - TH2F *h_ele_dEtaScVsPhi_propVtx; - TH2F *h_ele_dEtaScVsPt_propVtx; - TH1F *h_ele_dPhiSc_propVtx; - TH1F *h_ele_dPhiSc_propVtx_barrel; - TH1F *h_ele_dPhiSc_propVtx_endcaps; - TH1F *h_ele_dPhiSc_propVtx_eg; - TH1F *h_ele_dPhiSc_propVtx_eg_barrel; - TH1F *h_ele_dPhiSc_propVtx_eg_endcaps; - TH2F *h_ele_dPhiScVsEta_propVtx; - TH2F *h_ele_dPhiScVsPhi_propVtx; - TH2F *h_ele_dPhiScVsPt_propVtx; - TH1F *h_ele_dEtaCl_propOut; - TH1F *h_ele_dEtaCl_propOut_barrel; - TH1F *h_ele_dEtaCl_propOut_endcaps; - TH1F *h_ele_dEtaCl_propOut_eg; - TH1F *h_ele_dEtaCl_propOut_eg_barrel; - TH1F *h_ele_dEtaCl_propOut_eg_endcaps; - TH2F *h_ele_dEtaClVsEta_propOut; - TH2F *h_ele_dEtaClVsPhi_propOut; - TH2F *h_ele_dEtaClVsPt_propOut; - TH1F *h_ele_dPhiCl_propOut; - TH1F *h_ele_dPhiCl_propOut_barrel; - TH1F *h_ele_dPhiCl_propOut_endcaps; - TH1F *h_ele_dPhiCl_propOut_eg; - TH1F *h_ele_dPhiCl_propOut_eg_barrel; - TH1F *h_ele_dPhiCl_propOut_eg_endcaps; - TH2F *h_ele_dPhiClVsEta_propOut; - TH2F *h_ele_dPhiClVsPhi_propOut; - TH2F *h_ele_dPhiClVsPt_propOut; - TH1F *h_ele_dEtaEleCl_propOut; - TH1F *h_ele_dEtaEleCl_propOut_barrel; - TH1F *h_ele_dEtaEleCl_propOut_endcaps; - TH1F *h_ele_dEtaEleCl_propOut_eg; - TH1F *h_ele_dEtaEleCl_propOut_eg_barrel; - TH1F *h_ele_dEtaEleCl_propOut_eg_endcaps; - TH2F *h_ele_dEtaEleClVsEta_propOut; - TH2F *h_ele_dEtaEleClVsPhi_propOut; - TH2F *h_ele_dEtaEleClVsPt_propOut; - TH1F *h_ele_dPhiEleCl_propOut; - TH1F *h_ele_dPhiEleCl_propOut_barrel; - TH1F *h_ele_dPhiEleCl_propOut_endcaps; - TH1F *h_ele_dPhiEleCl_propOut_eg; - TH1F *h_ele_dPhiEleCl_propOut_eg_barrel; - TH1F *h_ele_dPhiEleCl_propOut_eg_endcaps; - TH2F *h_ele_dPhiEleClVsEta_propOut; - TH2F *h_ele_dPhiEleClVsPhi_propOut; - TH2F *h_ele_dPhiEleClVsPt_propOut; - - TH1F *h_ele_seed_dphi2_; - TH2F *h_ele_seed_dphi2VsEta_; - TH2F *h_ele_seed_dphi2VsPt_; - TH1F *h_ele_seed_drz2_; - TH2F *h_ele_seed_drz2VsEta_; - TH2F *h_ele_seed_drz2VsPt_; - TH1F *h_ele_seed_subdet2_; - - TH1F *h_ele_classes; - TH1F *h_ele_eta; - TH1F *h_ele_eta_golden; - TH1F *h_ele_eta_bbrem; - TH1F *h_ele_eta_narrow; - TH1F *h_ele_eta_shower; - - TH1F *h_ele_HoE; - TH1F *h_ele_HoE_barrel; - TH1F *h_ele_HoE_endcaps; - TH1F *h_ele_HoE_eg; - TH1F *h_ele_HoE_eg_barrel; - TH1F *h_ele_HoE_eg_endcaps; - TH1F *h_ele_HoE_fiducial; - TH2F *h_ele_HoEVsEta; - TH2F *h_ele_HoEVsPhi; - TH2F *h_ele_HoEVsE; - - TH1F *h_ele_fbrem; - TProfile *h_ele_fbremVsEta_mode; - TProfile *h_ele_fbremVsEta_mean; - - TH2F *h_ele_PinVsPoutGolden_mode; - TH2F *h_ele_PinVsPoutShowering_mode; - TH2F *h_ele_PinVsPoutGolden_mean; - TH2F *h_ele_PinVsPoutShowering_mean; - TH2F *h_ele_PtinVsPtoutGolden_mode; - TH2F *h_ele_PtinVsPtoutShowering_mode; - TH2F *h_ele_PtinVsPtoutGolden_mean; - TH2F *h_ele_PtinVsPtoutShowering_mean; - TH1F *histSclEoEmatchingObjectGolden_barrel; - TH1F *histSclEoEmatchingObjectGolden_endcaps; - TH1F *histSclEoEmatchingObjectShowering_barrel; - TH1F *histSclEoEmatchingObjectShowering_endcaps; - - TH1F *h_ele_mva; - TH1F *h_ele_provenance; - - TH1F *h_ele_tkSumPt_dr03; - TH1F *h_ele_ecalRecHitSumEt_dr03; - TH1F *h_ele_hcalDepth1TowerSumEt_dr03; - TH1F *h_ele_hcalDepth2TowerSumEt_dr03; - TH1F *h_ele_tkSumPt_dr04; - TH1F *h_ele_ecalRecHitSumEt_dr04; - TH1F *h_ele_hcalDepth1TowerSumEt_dr04; - TH1F *h_ele_hcalDepth2TowerSumEt_dr04; - - std::string outputFile_; - edm::InputTag electronCollection_; - edm::InputTag matchingObjectCollection_; - edm::InputTag beamSpot_; - std::string type_; - bool readAOD_; - - double maxPt_; - double maxAbsEta_; - double deltaR_; - - // histos limits and binning - double etamin; - double etamax; - double phimin; - double phimax; - double ptmax; - double pmax; - double eopmax; - double eopmaxsht; - double detamin; - double detamax; - double dphimin; - double dphimax; - double detamatchmin; - double detamatchmax; - double dphimatchmin; - double dphimatchmax; - double fhitsmax; - double lhitsmax; - double meemin; - double meemax; - double hoemin; - double hoemax; - int nbineta; - int nbinp; - int nbinpt; - int nbinpteff; - int nbinphi; - int nbinp2D; - int nbinpt2D; - int nbineta2D; - int nbinphi2D; - int nbineop; - int nbineop2D; - int nbinfhits; - int nbinlhits; - int nbinxyz; - int nbindeta; - int nbindphi; - int nbindetamatch; - int nbindphimatch; - int nbindetamatch2D; - int nbindphimatch2D; - int nbinmee; - int nbinhoe; -}; - -#endif diff --git a/RecoEgamma/Examples/plugins/GsfElectronMCAnalyzer.cc b/RecoEgamma/Examples/plugins/GsfElectronMCAnalyzer.cc index 09f34abb46ea6..6a74806aab367 100644 --- a/RecoEgamma/Examples/plugins/GsfElectronMCAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/GsfElectronMCAnalyzer.cc @@ -11,32 +11,32 @@ */ // -// Original Author: Ursula Berthon +// Original Author: Ursula Berthon, Claude Charlot // Created: Mon Mar 27 13:22:06 CEST 2006 // // -// user include files -#include "RecoEgamma/Examples/plugins/GsfElectronMCAnalyzer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "DataFormats/Common/interface/Handle.h" #include "DataFormats/EgammaCandidates/interface/GsfElectron.h" #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/EgammaReco/interface/BasicClusterFwd.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" #include "DataFormats/EgammaReco/interface/ElectronSeed.h" #include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" -#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" #include "DataFormats/HepMCCandidate/interface/GenParticle.h" #include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" #include "CLHEP/Units/GlobalPhysicalConstants.h" -#include -#include + #include "TMath.h" #include "TFile.h" #include "TH1F.h" @@ -44,7 +44,461 @@ #include "TH2F.h" #include "TProfile.h" #include "TTree.h" + #include +#include + +class GsfElectronMCAnalyzer : public edm::one::EDAnalyzer<> { +public: + explicit GsfElectronMCAnalyzer(const edm::ParameterSet &conf); + + ~GsfElectronMCAnalyzer() override; + + void beginJob() override; + void endJob() override; + void analyze(const edm::Event &e, const edm::EventSetup &c) override; + +private: + TrajectoryStateTransform transformer_; + edm::ESHandle pDD; + edm::ESHandle theMagField; + TFile *histfile_; + TTree *tree_; + float mcEnergy[10], mcEta[10], mcPhi[10], mcPt[10], mcQ[10]; + float superclusterEnergy[10], superclusterEta[10], superclusterPhi[10], superclusterEt[10]; + float seedMomentum[10], seedEta[10], seedPhi[10], seedPt[10], seedQ[10]; + + TH1F *h_mcNum; + TH1F *h_eleNum; + TH1F *h_gamNum; + + TH1F *h_simEta; + TH1F *h_simAbsEta; + TH1F *h_simP; + TH1F *h_simPt; + TH1F *h_simPhi; + TH1F *h_simZ; + TH2F *h_simPtEta; + + TH1F *h_ele_simEta_matched; + TH1F *h_ele_simAbsEta_matched; + TH1F *h_ele_simPt_matched; + TH1F *h_ele_simPhi_matched; + TH1F *h_ele_simZ_matched; + TH2F *h_ele_simPtEta_matched; + + TH1F *h_ele_simEta_matched_qmisid; + TH1F *h_ele_simAbsEta_matched_qmisid; + TH1F *h_ele_simPt_matched_qmisid; + TH1F *h_ele_simPhi_matched_qmisid; + TH1F *h_ele_simZ_matched_qmisid; + + TH1F *h_ele_EoverP_all; + TH1F *h_ele_EoverP_all_barrel; + TH1F *h_ele_EoverP_all_endcaps; + TH1F *h_ele_EseedOP_all; + TH1F *h_ele_EseedOP_all_barrel; + TH1F *h_ele_EseedOP_all_endcaps; + TH1F *h_ele_EoPout_all; + TH1F *h_ele_EoPout_all_barrel; + TH1F *h_ele_EoPout_all_endcaps; + TH1F *h_ele_EeleOPout_all; + TH1F *h_ele_EeleOPout_all_barrel; + TH1F *h_ele_EeleOPout_all_endcaps; + TH1F *h_ele_dEtaSc_propVtx_all; + TH1F *h_ele_dEtaSc_propVtx_all_barrel; + TH1F *h_ele_dEtaSc_propVtx_all_endcaps; + TH1F *h_ele_dPhiSc_propVtx_all; + TH1F *h_ele_dPhiSc_propVtx_all_barrel; + TH1F *h_ele_dPhiSc_propVtx_all_endcaps; + TH1F *h_ele_dEtaCl_propOut_all; + TH1F *h_ele_dEtaCl_propOut_all_barrel; + TH1F *h_ele_dEtaCl_propOut_all_endcaps; + TH1F *h_ele_dPhiCl_propOut_all; + TH1F *h_ele_dPhiCl_propOut_all_barrel; + TH1F *h_ele_dPhiCl_propOut_all_endcaps; + TH1F *h_ele_TIP_all; + TH1F *h_ele_TIP_all_barrel; + TH1F *h_ele_TIP_all_endcaps; + TH1F *h_ele_HoE_all; + TH1F *h_ele_HoE_all_barrel; + TH1F *h_ele_HoE_all_endcaps; + TH1F *h_ele_vertexEta_all; + TH1F *h_ele_vertexPt_all; + TH1F *h_ele_Et_all; + TH1F *h_ele_mee_all; + TH1F *h_ele_mee_os; + TH1F *h_ele_mee_os_ebeb; + TH1F *h_ele_mee_os_ebee; + TH1F *h_ele_mee_os_eeee; + TH1F *h_ele_mee_os_gg; + TH1F *h_ele_mee_os_gb; + TH1F *h_ele_mee_os_bb; + + TH2F *h_ele_E2mnE1vsMee_all; + TH2F *h_ele_E2mnE1vsMee_egeg_all; + + TH1F *h_ele_charge; + TH2F *h_ele_chargeVsEta; + TH2F *h_ele_chargeVsPhi; + TH2F *h_ele_chargeVsPt; + TH1F *h_ele_vertexP; + TH1F *h_ele_vertexPt; + TH1F *h_ele_Et; + TH2F *h_ele_vertexPtVsEta; + TH2F *h_ele_vertexPtVsPhi; + TH1F *h_ele_vertexPt_5100; + TH1F *h_ele_vertexEta; + TH2F *h_ele_vertexEtaVsPhi; + TH1F *h_ele_vertexAbsEta; + TH1F *h_ele_vertexPhi; + TH1F *h_ele_vertexX; + TH1F *h_ele_vertexY; + TH1F *h_ele_vertexZ; + TH1F *h_ele_vertexTIP; + TH2F *h_ele_vertexTIPVsEta; + TH2F *h_ele_vertexTIPVsPhi; + TH2F *h_ele_vertexTIPVsPt; + + TH1F *histNum_; + + TH1F *histSclEn_; + TH1F *histSclEoEtrue_barrel; + TH1F *histSclEoEtrue_endcaps; + TH1F *histSclEoEtrue_barrel_eg; + TH1F *histSclEoEtrue_endcaps_eg; + TH1F *histSclEoEtrue_barrel_etagap; + TH1F *histSclEoEtrue_barrel_phigap; + TH1F *histSclEoEtrue_ebeegap; + TH1F *histSclEoEtrue_endcaps_deegap; + TH1F *histSclEoEtrue_endcaps_ringgap; + TH1F *histSclEoEtrue_barrel_new; + TH1F *histSclEoEtrue_endcaps_new; + TH1F *histSclEoEtrue_barrel_eg_new; + TH1F *histSclEoEtrue_endcaps_eg_new; + TH1F *histSclEoEtrue_barrel_etagap_new; + TH1F *histSclEoEtrue_barrel_phigap_new; + TH1F *histSclEoEtrue_ebeegap_new; + TH1F *histSclEoEtrue_endcaps_deegap_new; + TH1F *histSclEoEtrue_endcaps_ringgap_new; + TH1F *histSclEt_; + TH2F *histSclEtVsEta_; + TH2F *histSclEtVsPhi_; + TH2F *histSclEtaVsPhi_; + TH1F *histSclEta_; + TH1F *histSclPhi_; + + TH2F *histSclEoEtruePfVsEg; + + TH1F *histSclSigEtaEta_; + TH1F *histSclSigEtaEta_barrel_; + TH1F *histSclSigEtaEta_endcaps_; + TH1F *histSclSigIEtaIEta_; + TH1F *histSclSigIEtaIEta_barrel_; + TH1F *histSclSigIEtaIEta_endcaps_; + TH1F *histSclE1x5_; + TH1F *histSclE1x5_barrel_; + TH1F *histSclE1x5_endcaps_; + TH1F *histSclE2x5max_; + TH1F *histSclE2x5max_barrel_; + TH1F *histSclE2x5max_endcaps_; + TH1F *histSclE5x5_; + TH1F *histSclE5x5_barrel_; + TH1F *histSclE5x5_endcaps_; + TH1F *histSclSigEtaEta_eg_; + TH1F *histSclSigEtaEta_eg_barrel_; + TH1F *histSclSigEtaEta_eg_endcaps_; + TH1F *histSclSigIEtaIEta_eg_; + TH1F *histSclSigIEtaIEta_eg_barrel_; + TH1F *histSclSigIEtaIEta_eg_endcaps_; + TH1F *histSclE1x5_eg_; + TH1F *histSclE1x5_eg_barrel_; + TH1F *histSclE1x5_eg_endcaps_; + TH1F *histSclE2x5max_eg_; + TH1F *histSclE2x5max_eg_barrel_; + TH1F *histSclE2x5max_eg_endcaps_; + TH1F *histSclE5x5_eg_; + TH1F *histSclE5x5_eg_barrel_; + TH1F *histSclE5x5_eg_endcaps_; + + TH1F *h_ele_ambiguousTracks; + TH2F *h_ele_ambiguousTracksVsEta; + TH2F *h_ele_ambiguousTracksVsPhi; + TH2F *h_ele_ambiguousTracksVsPt; + TH1F *h_ele_foundHits; + TH1F *h_ele_foundHits_barrel; + TH1F *h_ele_foundHits_endcaps; + TH2F *h_ele_foundHitsVsEta; + TH2F *h_ele_foundHitsVsPhi; + TH2F *h_ele_foundHitsVsPt; + TH1F *h_ele_lostHits; + TH1F *h_ele_lostHits_barrel; + TH1F *h_ele_lostHits_endcaps; + TH2F *h_ele_lostHitsVsEta; + TH2F *h_ele_lostHitsVsPhi; + TH2F *h_ele_lostHitsVsPt; + TH1F *h_ele_chi2; + TH1F *h_ele_chi2_barrel; + TH1F *h_ele_chi2_endcaps; + TH2F *h_ele_chi2VsEta; + TH2F *h_ele_chi2VsPhi; + TH2F *h_ele_chi2VsPt; + + TH1F *h_ele_PoPtrue; + TH1F *h_ele_PtoPttrue; + TH2F *h_ele_PoPtrueVsEta; + TH2F *h_ele_PoPtrueVsPhi; + TH2F *h_ele_PoPtrueVsPt; + TH1F *h_ele_PoPtrue_barrel; + TH1F *h_ele_PoPtrue_endcaps; + TH1F *h_ele_PoPtrue_golden_barrel; + TH1F *h_ele_PoPtrue_golden_endcaps; + TH1F *h_ele_PoPtrue_showering_barrel; + TH1F *h_ele_PoPtrue_showering_endcaps; + TH1F *h_ele_PtoPttrue_barrel; + TH1F *h_ele_PtoPttrue_endcaps; + TH1F *h_ele_ChargeMnChargeTrue; + TH1F *h_ele_EtaMnEtaTrue; + TH1F *h_ele_EtaMnEtaTrue_barrel; + TH1F *h_ele_EtaMnEtaTrue_endcaps; + TH2F *h_ele_EtaMnEtaTrueVsEta; + TH2F *h_ele_EtaMnEtaTrueVsPhi; + TH2F *h_ele_EtaMnEtaTrueVsPt; + TH1F *h_ele_PhiMnPhiTrue; + TH1F *h_ele_PhiMnPhiTrue_barrel; + TH1F *h_ele_PhiMnPhiTrue_endcaps; + TH1F *h_ele_PhiMnPhiTrue2; + TH2F *h_ele_PhiMnPhiTrueVsEta; + TH2F *h_ele_PhiMnPhiTrueVsPhi; + TH2F *h_ele_PhiMnPhiTrueVsPt; + TH1F *h_ele_PinMnPout; + TH1F *h_ele_PinMnPout_mode; + TH2F *h_ele_PinMnPoutVsEta_mode; + TH2F *h_ele_PinMnPoutVsPhi_mode; + TH2F *h_ele_PinMnPoutVsPt_mode; + TH2F *h_ele_PinMnPoutVsE_mode; + TH2F *h_ele_PinMnPoutVsChi2_mode; + + TH1F *h_ele_outerP; + TH1F *h_ele_outerP_mode; + TH2F *h_ele_outerPVsEta_mode; + TH1F *h_ele_outerPt; + TH1F *h_ele_outerPt_mode; + TH2F *h_ele_outerPtVsEta_mode; + TH2F *h_ele_outerPtVsPhi_mode; + TH2F *h_ele_outerPtVsPt_mode; + TH1F *h_ele_EoP; + TH1F *h_ele_EoP_barrel; + TH1F *h_ele_EoP_endcaps; + TH1F *h_ele_EoP_eg; + TH1F *h_ele_EoP_eg_barrel; + TH1F *h_ele_EoP_eg_endcaps; + TH2F *h_ele_EoPVsEta; + TH2F *h_ele_EoPVsPhi; + TH2F *h_ele_EoPVsE; + TH1F *h_ele_EseedOP; + TH1F *h_ele_EseedOP_barrel; + TH1F *h_ele_EseedOP_endcaps; + TH1F *h_ele_EseedOP_eg; + TH1F *h_ele_EseedOP_eg_barrel; + TH1F *h_ele_EseedOP_eg_endcaps; + TH2F *h_ele_EseedOPVsEta; + TH2F *h_ele_EseedOPVsPhi; + TH2F *h_ele_EseedOPVsE; + TH1F *h_ele_EoPout; + TH1F *h_ele_EoPout_barrel; + TH1F *h_ele_EoPout_endcaps; + TH1F *h_ele_EoPout_eg; + TH1F *h_ele_EoPout_eg_barrel; + TH1F *h_ele_EoPout_eg_endcaps; + TH2F *h_ele_EoPoutVsEta; + TH2F *h_ele_EoPoutVsPhi; + TH2F *h_ele_EoPoutVsE; + TH1F *h_ele_EeleOPout; + TH1F *h_ele_EeleOPout_barrel; + TH1F *h_ele_EeleOPout_endcaps; + TH1F *h_ele_EeleOPout_eg; + TH1F *h_ele_EeleOPout_eg_barrel; + TH1F *h_ele_EeleOPout_eg_endcaps; + TH2F *h_ele_EeleOPoutVsEta; + TH2F *h_ele_EeleOPoutVsPhi; + TH2F *h_ele_EeleOPoutVsE; + + TH1F *h_ele_dEtaSc_propVtx; + TH1F *h_ele_dEtaSc_propVtx_barrel; + TH1F *h_ele_dEtaSc_propVtx_endcaps; + TH1F *h_ele_dEtaSc_propVtx_eg; + TH1F *h_ele_dEtaSc_propVtx_eg_barrel; + TH1F *h_ele_dEtaSc_propVtx_eg_endcaps; + TH2F *h_ele_dEtaScVsEta_propVtx; + TH2F *h_ele_dEtaScVsPhi_propVtx; + TH2F *h_ele_dEtaScVsPt_propVtx; + TH1F *h_ele_dPhiSc_propVtx; + TH1F *h_ele_dPhiSc_propVtx_barrel; + TH1F *h_ele_dPhiSc_propVtx_endcaps; + TH1F *h_ele_dPhiSc_propVtx_eg; + TH1F *h_ele_dPhiSc_propVtx_eg_barrel; + TH1F *h_ele_dPhiSc_propVtx_eg_endcaps; + TH2F *h_ele_dPhiScVsEta_propVtx; + TH2F *h_ele_dPhiScVsPhi_propVtx; + TH2F *h_ele_dPhiScVsPt_propVtx; + TH1F *h_ele_dEtaCl_propOut; + TH1F *h_ele_dEtaCl_propOut_barrel; + TH1F *h_ele_dEtaCl_propOut_endcaps; + TH1F *h_ele_dEtaCl_propOut_eg; + TH1F *h_ele_dEtaCl_propOut_eg_barrel; + TH1F *h_ele_dEtaCl_propOut_eg_endcaps; + TH2F *h_ele_dEtaClVsEta_propOut; + TH2F *h_ele_dEtaClVsPhi_propOut; + TH2F *h_ele_dEtaClVsPt_propOut; + TH1F *h_ele_dPhiCl_propOut; + TH1F *h_ele_dPhiCl_propOut_barrel; + TH1F *h_ele_dPhiCl_propOut_endcaps; + TH1F *h_ele_dPhiCl_propOut_eg; + TH1F *h_ele_dPhiCl_propOut_eg_barrel; + TH1F *h_ele_dPhiCl_propOut_eg_endcaps; + TH2F *h_ele_dPhiClVsEta_propOut; + TH2F *h_ele_dPhiClVsPhi_propOut; + TH2F *h_ele_dPhiClVsPt_propOut; + TH1F *h_ele_dEtaEleCl_propOut; + TH1F *h_ele_dEtaEleCl_propOut_barrel; + TH1F *h_ele_dEtaEleCl_propOut_endcaps; + TH1F *h_ele_dEtaEleCl_propOut_eg; + TH1F *h_ele_dEtaEleCl_propOut_eg_barrel; + TH1F *h_ele_dEtaEleCl_propOut_eg_endcaps; + TH2F *h_ele_dEtaEleClVsEta_propOut; + TH2F *h_ele_dEtaEleClVsPhi_propOut; + TH2F *h_ele_dEtaEleClVsPt_propOut; + TH1F *h_ele_dPhiEleCl_propOut; + TH1F *h_ele_dPhiEleCl_propOut_barrel; + TH1F *h_ele_dPhiEleCl_propOut_endcaps; + TH1F *h_ele_dPhiEleCl_propOut_eg; + TH1F *h_ele_dPhiEleCl_propOut_eg_barrel; + TH1F *h_ele_dPhiEleCl_propOut_eg_endcaps; + TH2F *h_ele_dPhiEleClVsEta_propOut; + TH2F *h_ele_dPhiEleClVsPhi_propOut; + TH2F *h_ele_dPhiEleClVsPt_propOut; + + TH1F *h_ele_seed_dphi2_; + TH2F *h_ele_seed_dphi2VsEta_; + TH2F *h_ele_seed_dphi2VsPt_; + TH1F *h_ele_seed_drz2_; + TH2F *h_ele_seed_drz2VsEta_; + TH2F *h_ele_seed_drz2VsPt_; + TH1F *h_ele_seed_subdet2_; + + TH1F *h_ele_classes; + TH1F *h_ele_eta; + TH1F *h_ele_eta_golden; + TH1F *h_ele_eta_bbrem; + TH1F *h_ele_eta_narrow; + TH1F *h_ele_eta_shower; + + TH1F *h_ele_HoE; + TH1F *h_ele_HoE_barrel; + TH1F *h_ele_HoE_endcaps; + TH1F *h_ele_HoE_eg; + TH1F *h_ele_HoE_eg_barrel; + TH1F *h_ele_HoE_eg_endcaps; + TH1F *h_ele_HoE_fiducial; + TH2F *h_ele_HoEVsEta; + TH2F *h_ele_HoEVsPhi; + TH2F *h_ele_HoEVsE; + + TH1F *h_ele_fbrem; + TH1F *h_ele_fbrem_eg; + TProfile *h_ele_fbremVsEta_mode; + TProfile *h_ele_fbremVsEta_mean; + + TH2F *h_ele_PinVsPoutGolden_mode; + TH2F *h_ele_PinVsPoutShowering_mode; + TH2F *h_ele_PinVsPoutGolden_mean; + TH2F *h_ele_PinVsPoutShowering_mean; + TH2F *h_ele_PtinVsPtoutGolden_mode; + TH2F *h_ele_PtinVsPtoutShowering_mode; + TH2F *h_ele_PtinVsPtoutGolden_mean; + TH2F *h_ele_PtinVsPtoutShowering_mean; + TH1F *histSclEoEtrueGolden_barrel; + TH1F *histSclEoEtrueGolden_endcaps; + TH1F *histSclEoEtrueShowering_barrel; + TH1F *histSclEoEtrueShowering_endcaps; + + TH1F *h_ele_mva; + TH1F *h_ele_mva_eg; + TH1F *h_ele_provenance; + + TH1F *h_ele_tkSumPt_dr03; + TH1F *h_ele_ecalRecHitSumEt_dr03; + TH1F *h_ele_hcalDepth1TowerSumEt_dr03; + TH1F *h_ele_hcalDepth2TowerSumEt_dr03; + TH1F *h_ele_tkSumPt_dr04; + TH1F *h_ele_ecalRecHitSumEt_dr04; + TH1F *h_ele_hcalDepth1TowerSumEt_dr04; + TH1F *h_ele_hcalDepth2TowerSumEt_dr04; + + std::string outputFile_; + edm::InputTag electronCollection_; + edm::InputTag mcTruthCollection_; + bool readAOD_; + + double maxPt_; + double maxAbsEta_; + double deltaR_; + std::vector matchingIDs_; + std::vector matchingMotherIDs_; + + // histos limits and binning + double etamin; + double etamax; + double phimin; + double phimax; + double ptmax; + double pmax; + double eopmax; + double eopmaxsht; + double detamin; + double detamax; + double dphimin; + double dphimax; + double detamatchmin; + double detamatchmax; + double dphimatchmin; + double dphimatchmax; + double fhitsmax; + double lhitsmax; + double poptruemin; + double poptruemax; + double meemin; + double meemax; + double hoemin; + double hoemax; + int nbineta; + int nbinp; + int nbinpt; + int nbinpteff; + int nbinphi; + int nbinp2D; + int nbinpt2D; + int nbineta2D; + int nbinphi2D; + int nbineop; + int nbineop2D; + int nbinfhits; + int nbinlhits; + int nbinxyz; + int nbindeta; + int nbindphi; + int nbindetamatch; + int nbindphimatch; + int nbindetamatch2D; + int nbindphimatch2D; + int nbinpoptrue; + int nbinmee; + int nbinhoe; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(GsfElectronMCAnalyzer); using namespace reco; diff --git a/RecoEgamma/Examples/plugins/GsfElectronMCAnalyzer.h b/RecoEgamma/Examples/plugins/GsfElectronMCAnalyzer.h deleted file mode 100644 index bcaad04bc9a64..0000000000000 --- a/RecoEgamma/Examples/plugins/GsfElectronMCAnalyzer.h +++ /dev/null @@ -1,485 +0,0 @@ -#ifndef GsfElectronMCAnalyzer_h -#define GsfElectronMCAnalyzer_h - -// -// Package: RecoEgamma/Examples -// Class: GsfElectronMCAnalyzer -// - -// -// Original Author: Ursula Berthon, Claude Charlot -// Created: Mon Mar 27 13:22:06 CEST 2006 -// -// - -#include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" - -#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" - -#include - -class MagneticField; -class TFile; -class TH1F; -class TH2F; -class TH1I; -class TProfile; -class TTree; - -class GsfElectronMCAnalyzer : public edm::one::EDAnalyzer<> { -public: - explicit GsfElectronMCAnalyzer(const edm::ParameterSet &conf); - - ~GsfElectronMCAnalyzer() override; - - void beginJob() override; - void endJob() override; - void analyze(const edm::Event &e, const edm::EventSetup &c) override; - -private: - TrajectoryStateTransform transformer_; - edm::ESHandle pDD; - edm::ESHandle theMagField; - TFile *histfile_; - TTree *tree_; - float mcEnergy[10], mcEta[10], mcPhi[10], mcPt[10], mcQ[10]; - float superclusterEnergy[10], superclusterEta[10], superclusterPhi[10], superclusterEt[10]; - float seedMomentum[10], seedEta[10], seedPhi[10], seedPt[10], seedQ[10]; - - TH1F *h_mcNum; - TH1F *h_eleNum; - TH1F *h_gamNum; - - TH1F *h_simEta; - TH1F *h_simAbsEta; - TH1F *h_simP; - TH1F *h_simPt; - TH1F *h_simPhi; - TH1F *h_simZ; - TH2F *h_simPtEta; - - TH1F *h_ele_simEta_matched; - TH1F *h_ele_simAbsEta_matched; - TH1F *h_ele_simPt_matched; - TH1F *h_ele_simPhi_matched; - TH1F *h_ele_simZ_matched; - TH2F *h_ele_simPtEta_matched; - - TH1F *h_ele_simEta_matched_qmisid; - TH1F *h_ele_simAbsEta_matched_qmisid; - TH1F *h_ele_simPt_matched_qmisid; - TH1F *h_ele_simPhi_matched_qmisid; - TH1F *h_ele_simZ_matched_qmisid; - - TH1F *h_ele_EoverP_all; - TH1F *h_ele_EoverP_all_barrel; - TH1F *h_ele_EoverP_all_endcaps; - TH1F *h_ele_EseedOP_all; - TH1F *h_ele_EseedOP_all_barrel; - TH1F *h_ele_EseedOP_all_endcaps; - TH1F *h_ele_EoPout_all; - TH1F *h_ele_EoPout_all_barrel; - TH1F *h_ele_EoPout_all_endcaps; - TH1F *h_ele_EeleOPout_all; - TH1F *h_ele_EeleOPout_all_barrel; - TH1F *h_ele_EeleOPout_all_endcaps; - TH1F *h_ele_dEtaSc_propVtx_all; - TH1F *h_ele_dEtaSc_propVtx_all_barrel; - TH1F *h_ele_dEtaSc_propVtx_all_endcaps; - TH1F *h_ele_dPhiSc_propVtx_all; - TH1F *h_ele_dPhiSc_propVtx_all_barrel; - TH1F *h_ele_dPhiSc_propVtx_all_endcaps; - TH1F *h_ele_dEtaCl_propOut_all; - TH1F *h_ele_dEtaCl_propOut_all_barrel; - TH1F *h_ele_dEtaCl_propOut_all_endcaps; - TH1F *h_ele_dPhiCl_propOut_all; - TH1F *h_ele_dPhiCl_propOut_all_barrel; - TH1F *h_ele_dPhiCl_propOut_all_endcaps; - TH1F *h_ele_TIP_all; - TH1F *h_ele_TIP_all_barrel; - TH1F *h_ele_TIP_all_endcaps; - TH1F *h_ele_HoE_all; - TH1F *h_ele_HoE_all_barrel; - TH1F *h_ele_HoE_all_endcaps; - TH1F *h_ele_vertexEta_all; - TH1F *h_ele_vertexPt_all; - TH1F *h_ele_Et_all; - TH1F *h_ele_mee_all; - TH1F *h_ele_mee_os; - TH1F *h_ele_mee_os_ebeb; - TH1F *h_ele_mee_os_ebee; - TH1F *h_ele_mee_os_eeee; - TH1F *h_ele_mee_os_gg; - TH1F *h_ele_mee_os_gb; - TH1F *h_ele_mee_os_bb; - - TH2F *h_ele_E2mnE1vsMee_all; - TH2F *h_ele_E2mnE1vsMee_egeg_all; - - TH1F *h_ele_charge; - TH2F *h_ele_chargeVsEta; - TH2F *h_ele_chargeVsPhi; - TH2F *h_ele_chargeVsPt; - TH1F *h_ele_vertexP; - TH1F *h_ele_vertexPt; - TH1F *h_ele_Et; - TH2F *h_ele_vertexPtVsEta; - TH2F *h_ele_vertexPtVsPhi; - TH1F *h_ele_vertexPt_5100; - TH1F *h_ele_vertexEta; - TH2F *h_ele_vertexEtaVsPhi; - TH1F *h_ele_vertexAbsEta; - TH1F *h_ele_vertexPhi; - TH1F *h_ele_vertexX; - TH1F *h_ele_vertexY; - TH1F *h_ele_vertexZ; - TH1F *h_ele_vertexTIP; - TH2F *h_ele_vertexTIPVsEta; - TH2F *h_ele_vertexTIPVsPhi; - TH2F *h_ele_vertexTIPVsPt; - - TH1F *histNum_; - - TH1F *histSclEn_; - TH1F *histSclEoEtrue_barrel; - TH1F *histSclEoEtrue_endcaps; - TH1F *histSclEoEtrue_barrel_eg; - TH1F *histSclEoEtrue_endcaps_eg; - TH1F *histSclEoEtrue_barrel_etagap; - TH1F *histSclEoEtrue_barrel_phigap; - TH1F *histSclEoEtrue_ebeegap; - TH1F *histSclEoEtrue_endcaps_deegap; - TH1F *histSclEoEtrue_endcaps_ringgap; - TH1F *histSclEoEtrue_barrel_new; - TH1F *histSclEoEtrue_endcaps_new; - TH1F *histSclEoEtrue_barrel_eg_new; - TH1F *histSclEoEtrue_endcaps_eg_new; - TH1F *histSclEoEtrue_barrel_etagap_new; - TH1F *histSclEoEtrue_barrel_phigap_new; - TH1F *histSclEoEtrue_ebeegap_new; - TH1F *histSclEoEtrue_endcaps_deegap_new; - TH1F *histSclEoEtrue_endcaps_ringgap_new; - TH1F *histSclEt_; - TH2F *histSclEtVsEta_; - TH2F *histSclEtVsPhi_; - TH2F *histSclEtaVsPhi_; - TH1F *histSclEta_; - TH1F *histSclPhi_; - - TH2F *histSclEoEtruePfVsEg; - - TH1F *histSclSigEtaEta_; - TH1F *histSclSigEtaEta_barrel_; - TH1F *histSclSigEtaEta_endcaps_; - TH1F *histSclSigIEtaIEta_; - TH1F *histSclSigIEtaIEta_barrel_; - TH1F *histSclSigIEtaIEta_endcaps_; - TH1F *histSclE1x5_; - TH1F *histSclE1x5_barrel_; - TH1F *histSclE1x5_endcaps_; - TH1F *histSclE2x5max_; - TH1F *histSclE2x5max_barrel_; - TH1F *histSclE2x5max_endcaps_; - TH1F *histSclE5x5_; - TH1F *histSclE5x5_barrel_; - TH1F *histSclE5x5_endcaps_; - TH1F *histSclSigEtaEta_eg_; - TH1F *histSclSigEtaEta_eg_barrel_; - TH1F *histSclSigEtaEta_eg_endcaps_; - TH1F *histSclSigIEtaIEta_eg_; - TH1F *histSclSigIEtaIEta_eg_barrel_; - TH1F *histSclSigIEtaIEta_eg_endcaps_; - TH1F *histSclE1x5_eg_; - TH1F *histSclE1x5_eg_barrel_; - TH1F *histSclE1x5_eg_endcaps_; - TH1F *histSclE2x5max_eg_; - TH1F *histSclE2x5max_eg_barrel_; - TH1F *histSclE2x5max_eg_endcaps_; - TH1F *histSclE5x5_eg_; - TH1F *histSclE5x5_eg_barrel_; - TH1F *histSclE5x5_eg_endcaps_; - - TH1F *h_ele_ambiguousTracks; - TH2F *h_ele_ambiguousTracksVsEta; - TH2F *h_ele_ambiguousTracksVsPhi; - TH2F *h_ele_ambiguousTracksVsPt; - TH1F *h_ele_foundHits; - TH1F *h_ele_foundHits_barrel; - TH1F *h_ele_foundHits_endcaps; - TH2F *h_ele_foundHitsVsEta; - TH2F *h_ele_foundHitsVsPhi; - TH2F *h_ele_foundHitsVsPt; - TH1F *h_ele_lostHits; - TH1F *h_ele_lostHits_barrel; - TH1F *h_ele_lostHits_endcaps; - TH2F *h_ele_lostHitsVsEta; - TH2F *h_ele_lostHitsVsPhi; - TH2F *h_ele_lostHitsVsPt; - TH1F *h_ele_chi2; - TH1F *h_ele_chi2_barrel; - TH1F *h_ele_chi2_endcaps; - TH2F *h_ele_chi2VsEta; - TH2F *h_ele_chi2VsPhi; - TH2F *h_ele_chi2VsPt; - - TH1F *h_ele_PoPtrue; - TH1F *h_ele_PtoPttrue; - TH2F *h_ele_PoPtrueVsEta; - TH2F *h_ele_PoPtrueVsPhi; - TH2F *h_ele_PoPtrueVsPt; - TH1F *h_ele_PoPtrue_barrel; - TH1F *h_ele_PoPtrue_endcaps; - TH1F *h_ele_PoPtrue_golden_barrel; - TH1F *h_ele_PoPtrue_golden_endcaps; - TH1F *h_ele_PoPtrue_showering_barrel; - TH1F *h_ele_PoPtrue_showering_endcaps; - TH1F *h_ele_PtoPttrue_barrel; - TH1F *h_ele_PtoPttrue_endcaps; - TH1F *h_ele_ChargeMnChargeTrue; - TH1F *h_ele_EtaMnEtaTrue; - TH1F *h_ele_EtaMnEtaTrue_barrel; - TH1F *h_ele_EtaMnEtaTrue_endcaps; - TH2F *h_ele_EtaMnEtaTrueVsEta; - TH2F *h_ele_EtaMnEtaTrueVsPhi; - TH2F *h_ele_EtaMnEtaTrueVsPt; - TH1F *h_ele_PhiMnPhiTrue; - TH1F *h_ele_PhiMnPhiTrue_barrel; - TH1F *h_ele_PhiMnPhiTrue_endcaps; - TH1F *h_ele_PhiMnPhiTrue2; - TH2F *h_ele_PhiMnPhiTrueVsEta; - TH2F *h_ele_PhiMnPhiTrueVsPhi; - TH2F *h_ele_PhiMnPhiTrueVsPt; - TH1F *h_ele_PinMnPout; - TH1F *h_ele_PinMnPout_mode; - TH2F *h_ele_PinMnPoutVsEta_mode; - TH2F *h_ele_PinMnPoutVsPhi_mode; - TH2F *h_ele_PinMnPoutVsPt_mode; - TH2F *h_ele_PinMnPoutVsE_mode; - TH2F *h_ele_PinMnPoutVsChi2_mode; - - TH1F *h_ele_outerP; - TH1F *h_ele_outerP_mode; - TH2F *h_ele_outerPVsEta_mode; - TH1F *h_ele_outerPt; - TH1F *h_ele_outerPt_mode; - TH2F *h_ele_outerPtVsEta_mode; - TH2F *h_ele_outerPtVsPhi_mode; - TH2F *h_ele_outerPtVsPt_mode; - TH1F *h_ele_EoP; - TH1F *h_ele_EoP_barrel; - TH1F *h_ele_EoP_endcaps; - TH1F *h_ele_EoP_eg; - TH1F *h_ele_EoP_eg_barrel; - TH1F *h_ele_EoP_eg_endcaps; - TH2F *h_ele_EoPVsEta; - TH2F *h_ele_EoPVsPhi; - TH2F *h_ele_EoPVsE; - TH1F *h_ele_EseedOP; - TH1F *h_ele_EseedOP_barrel; - TH1F *h_ele_EseedOP_endcaps; - TH1F *h_ele_EseedOP_eg; - TH1F *h_ele_EseedOP_eg_barrel; - TH1F *h_ele_EseedOP_eg_endcaps; - TH2F *h_ele_EseedOPVsEta; - TH2F *h_ele_EseedOPVsPhi; - TH2F *h_ele_EseedOPVsE; - TH1F *h_ele_EoPout; - TH1F *h_ele_EoPout_barrel; - TH1F *h_ele_EoPout_endcaps; - TH1F *h_ele_EoPout_eg; - TH1F *h_ele_EoPout_eg_barrel; - TH1F *h_ele_EoPout_eg_endcaps; - TH2F *h_ele_EoPoutVsEta; - TH2F *h_ele_EoPoutVsPhi; - TH2F *h_ele_EoPoutVsE; - TH1F *h_ele_EeleOPout; - TH1F *h_ele_EeleOPout_barrel; - TH1F *h_ele_EeleOPout_endcaps; - TH1F *h_ele_EeleOPout_eg; - TH1F *h_ele_EeleOPout_eg_barrel; - TH1F *h_ele_EeleOPout_eg_endcaps; - TH2F *h_ele_EeleOPoutVsEta; - TH2F *h_ele_EeleOPoutVsPhi; - TH2F *h_ele_EeleOPoutVsE; - - TH1F *h_ele_dEtaSc_propVtx; - TH1F *h_ele_dEtaSc_propVtx_barrel; - TH1F *h_ele_dEtaSc_propVtx_endcaps; - TH1F *h_ele_dEtaSc_propVtx_eg; - TH1F *h_ele_dEtaSc_propVtx_eg_barrel; - TH1F *h_ele_dEtaSc_propVtx_eg_endcaps; - TH2F *h_ele_dEtaScVsEta_propVtx; - TH2F *h_ele_dEtaScVsPhi_propVtx; - TH2F *h_ele_dEtaScVsPt_propVtx; - TH1F *h_ele_dPhiSc_propVtx; - TH1F *h_ele_dPhiSc_propVtx_barrel; - TH1F *h_ele_dPhiSc_propVtx_endcaps; - TH1F *h_ele_dPhiSc_propVtx_eg; - TH1F *h_ele_dPhiSc_propVtx_eg_barrel; - TH1F *h_ele_dPhiSc_propVtx_eg_endcaps; - TH2F *h_ele_dPhiScVsEta_propVtx; - TH2F *h_ele_dPhiScVsPhi_propVtx; - TH2F *h_ele_dPhiScVsPt_propVtx; - TH1F *h_ele_dEtaCl_propOut; - TH1F *h_ele_dEtaCl_propOut_barrel; - TH1F *h_ele_dEtaCl_propOut_endcaps; - TH1F *h_ele_dEtaCl_propOut_eg; - TH1F *h_ele_dEtaCl_propOut_eg_barrel; - TH1F *h_ele_dEtaCl_propOut_eg_endcaps; - TH2F *h_ele_dEtaClVsEta_propOut; - TH2F *h_ele_dEtaClVsPhi_propOut; - TH2F *h_ele_dEtaClVsPt_propOut; - TH1F *h_ele_dPhiCl_propOut; - TH1F *h_ele_dPhiCl_propOut_barrel; - TH1F *h_ele_dPhiCl_propOut_endcaps; - TH1F *h_ele_dPhiCl_propOut_eg; - TH1F *h_ele_dPhiCl_propOut_eg_barrel; - TH1F *h_ele_dPhiCl_propOut_eg_endcaps; - TH2F *h_ele_dPhiClVsEta_propOut; - TH2F *h_ele_dPhiClVsPhi_propOut; - TH2F *h_ele_dPhiClVsPt_propOut; - TH1F *h_ele_dEtaEleCl_propOut; - TH1F *h_ele_dEtaEleCl_propOut_barrel; - TH1F *h_ele_dEtaEleCl_propOut_endcaps; - TH1F *h_ele_dEtaEleCl_propOut_eg; - TH1F *h_ele_dEtaEleCl_propOut_eg_barrel; - TH1F *h_ele_dEtaEleCl_propOut_eg_endcaps; - TH2F *h_ele_dEtaEleClVsEta_propOut; - TH2F *h_ele_dEtaEleClVsPhi_propOut; - TH2F *h_ele_dEtaEleClVsPt_propOut; - TH1F *h_ele_dPhiEleCl_propOut; - TH1F *h_ele_dPhiEleCl_propOut_barrel; - TH1F *h_ele_dPhiEleCl_propOut_endcaps; - TH1F *h_ele_dPhiEleCl_propOut_eg; - TH1F *h_ele_dPhiEleCl_propOut_eg_barrel; - TH1F *h_ele_dPhiEleCl_propOut_eg_endcaps; - TH2F *h_ele_dPhiEleClVsEta_propOut; - TH2F *h_ele_dPhiEleClVsPhi_propOut; - TH2F *h_ele_dPhiEleClVsPt_propOut; - - TH1F *h_ele_seed_dphi2_; - TH2F *h_ele_seed_dphi2VsEta_; - TH2F *h_ele_seed_dphi2VsPt_; - TH1F *h_ele_seed_drz2_; - TH2F *h_ele_seed_drz2VsEta_; - TH2F *h_ele_seed_drz2VsPt_; - TH1F *h_ele_seed_subdet2_; - - TH1F *h_ele_classes; - TH1F *h_ele_eta; - TH1F *h_ele_eta_golden; - TH1F *h_ele_eta_bbrem; - TH1F *h_ele_eta_narrow; - TH1F *h_ele_eta_shower; - - TH1F *h_ele_HoE; - TH1F *h_ele_HoE_barrel; - TH1F *h_ele_HoE_endcaps; - TH1F *h_ele_HoE_eg; - TH1F *h_ele_HoE_eg_barrel; - TH1F *h_ele_HoE_eg_endcaps; - TH1F *h_ele_HoE_fiducial; - TH2F *h_ele_HoEVsEta; - TH2F *h_ele_HoEVsPhi; - TH2F *h_ele_HoEVsE; - - TH1F *h_ele_fbrem; - TH1F *h_ele_fbrem_eg; - TProfile *h_ele_fbremVsEta_mode; - TProfile *h_ele_fbremVsEta_mean; - - TH2F *h_ele_PinVsPoutGolden_mode; - TH2F *h_ele_PinVsPoutShowering_mode; - TH2F *h_ele_PinVsPoutGolden_mean; - TH2F *h_ele_PinVsPoutShowering_mean; - TH2F *h_ele_PtinVsPtoutGolden_mode; - TH2F *h_ele_PtinVsPtoutShowering_mode; - TH2F *h_ele_PtinVsPtoutGolden_mean; - TH2F *h_ele_PtinVsPtoutShowering_mean; - TH1F *histSclEoEtrueGolden_barrel; - TH1F *histSclEoEtrueGolden_endcaps; - TH1F *histSclEoEtrueShowering_barrel; - TH1F *histSclEoEtrueShowering_endcaps; - - TH1F *h_ele_mva; - TH1F *h_ele_mva_eg; - TH1F *h_ele_provenance; - - TH1F *h_ele_tkSumPt_dr03; - TH1F *h_ele_ecalRecHitSumEt_dr03; - TH1F *h_ele_hcalDepth1TowerSumEt_dr03; - TH1F *h_ele_hcalDepth2TowerSumEt_dr03; - TH1F *h_ele_tkSumPt_dr04; - TH1F *h_ele_ecalRecHitSumEt_dr04; - TH1F *h_ele_hcalDepth1TowerSumEt_dr04; - TH1F *h_ele_hcalDepth2TowerSumEt_dr04; - - std::string outputFile_; - edm::InputTag electronCollection_; - edm::InputTag mcTruthCollection_; - bool readAOD_; - - double maxPt_; - double maxAbsEta_; - double deltaR_; - std::vector matchingIDs_; - std::vector matchingMotherIDs_; - - // histos limits and binning - double etamin; - double etamax; - double phimin; - double phimax; - double ptmax; - double pmax; - double eopmax; - double eopmaxsht; - double detamin; - double detamax; - double dphimin; - double dphimax; - double detamatchmin; - double detamatchmax; - double dphimatchmin; - double dphimatchmax; - double fhitsmax; - double lhitsmax; - double poptruemin; - double poptruemax; - double meemin; - double meemax; - double hoemin; - double hoemax; - int nbineta; - int nbinp; - int nbinpt; - int nbinpteff; - int nbinphi; - int nbinp2D; - int nbinpt2D; - int nbineta2D; - int nbinphi2D; - int nbineop; - int nbineop2D; - int nbinfhits; - int nbinlhits; - int nbinxyz; - int nbindeta; - int nbindphi; - int nbindetamatch; - int nbindphimatch; - int nbindetamatch2D; - int nbindphimatch2D; - int nbinpoptrue; - int nbinmee; - int nbinhoe; -}; - -#endif diff --git a/RecoEgamma/Examples/plugins/GsfElectronMCFakeAnalyzer.cc b/RecoEgamma/Examples/plugins/GsfElectronMCFakeAnalyzer.cc index 6ee1a6a9ddf2f..007356f7dd3c1 100644 --- a/RecoEgamma/Examples/plugins/GsfElectronMCFakeAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/GsfElectronMCFakeAnalyzer.cc @@ -11,32 +11,33 @@ */ // -// Original Author: Ursula Berthon +// Original Author: Ursula Berthon, Claude Charlot // Created: Mon Mar 27 13:22:06 CEST 2006 // // -// user include files -#include "RecoEgamma/Examples/plugins/GsfElectronMCFakeAnalyzer.h" - -#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/Common/interface/Handle.h" #include "DataFormats/EgammaCandidates/interface/GsfElectron.h" #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/EgammaReco/interface/BasicClusterFwd.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" #include "DataFormats/EgammaReco/interface/ElectronSeed.h" #include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" -#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" #include "DataFormats/JetReco/interface/GenJetCollection.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" #include "CLHEP/Units/GlobalPhysicalConstants.h" + #include "TMath.h" #include "TFile.h" #include "TH1F.h" @@ -44,8 +45,376 @@ #include "TH2F.h" #include "TProfile.h" #include "TTree.h" + #include +class GsfElectronMCFakeAnalyzer : public edm::one::EDAnalyzer<> { +public: + explicit GsfElectronMCFakeAnalyzer(const edm::ParameterSet &conf); + + ~GsfElectronMCFakeAnalyzer() override; + + void beginJob() override; + void endJob() override; + void analyze(const edm::Event &e, const edm::EventSetup &c) override; + +private: + edm::InputTag electronCollection_; + edm::InputTag matchingObjectCollection_; + edm::InputTag beamSpot_; + bool readAOD_; + std::string outputFile_; + + TrajectoryStateTransform transformer_; + edm::ESHandle pDD; + edm::ESHandle theMagField; + + float mcEnergy[10], mcEta[10], mcPhi[10], mcPt[10], mcQ[10]; + float superclusterEnergy[10], superclusterEta[10], superclusterPhi[10], superclusterEt[10]; + float seedMomentum[10], seedEta[10], seedPhi[10], seedPt[10], seedQ[10]; + + double maxPt_; + double maxAbsEta_; + double deltaR_; + + TFile *histfile_; + TTree *tree_; + + // histos limits and binning + + int nbinxyz; + int nbinp; + int nbinp2D; + double pmax; + int nbinpt; + int nbinpt2D; + int nbinpteff; + double ptmax; + int nbinfhits; + double fhitsmax; + int nbinlhits; + double lhitsmax; + int nbineta; + int nbineta2D; + double etamin; + double etamax; + int nbindeta; + double detamin; + double detamax; + int nbindetamatch; + int nbindetamatch2D; + double detamatchmin; + double detamatchmax; + int nbinphi; + int nbinphi2D; + double phimin; + double phimax; + int nbindphi; + double dphimin; + double dphimax; + int nbindphimatch; + int nbindphimatch2D; + double dphimatchmin; + double dphimatchmax; + int nbineop; + int nbineop2D; + double eopmax; + double eopmaxsht; + int nbinmee; + double meemin; + double meemax; + int nbinhoe; + double hoemin; + double hoemax; + + // histos + + TH1F *h_matchingObjectNum; + + TH1F *h_matchingObjectEta; + TH1F *h_matchingObjectAbsEta; + TH1F *h_matchingObjectP; + TH1F *h_matchingObjectPt; + TH1F *h_matchingObjectPhi; + TH1F *h_matchingObjectZ; + + TH1F *h_ele_EoverP_all; + TH1F *h_ele_EseedOP_all; + TH1F *h_ele_EoPout_all; + TH1F *h_ele_EeleOPout_all; + TH1F *h_ele_dEtaSc_propVtx_all; + TH1F *h_ele_dPhiSc_propVtx_all; + TH1F *h_ele_dEtaCl_propOut_all; + TH1F *h_ele_dPhiCl_propOut_all; + TH1F *h_ele_TIP_all; + TH1F *h_ele_HoE_all; + TH1F *h_ele_vertexEta_all; + TH1F *h_ele_vertexPt_all; + TH1F *h_ele_mee_all; + TH1F *h_ele_mee_os; + + TH2F *h_ele_E2mnE1vsMee_all; + TH2F *h_ele_E2mnE1vsMee_egeg_all; + + TH1F *h_ele_matchingObjectEta_matched; + TH1F *h_ele_matchingObjectAbsEta_matched; + TH1F *h_ele_matchingObjectPt_matched; + TH1F *h_ele_matchingObjectPhi_matched; + TH1F *h_ele_matchingObjectZ_matched; + + TH1F *h_ele_charge; + TH2F *h_ele_chargeVsEta; + TH2F *h_ele_chargeVsPhi; + TH2F *h_ele_chargeVsPt; + TH1F *h_ele_vertexP; + TH1F *h_ele_vertexPt; + TH2F *h_ele_vertexPtVsEta; + TH2F *h_ele_vertexPtVsPhi; + TH1F *h_ele_vertexEta; + TH2F *h_ele_vertexEtaVsPhi; + TH1F *h_ele_vertexAbsEta; + TH1F *h_ele_vertexPhi; + TH1F *h_ele_vertexX; + TH1F *h_ele_vertexY; + TH1F *h_ele_vertexZ; + TH1F *h_ele_vertexTIP; + TH2F *h_ele_vertexTIPVsEta; + TH2F *h_ele_vertexTIPVsPhi; + TH2F *h_ele_vertexTIPVsPt; + + TH1F *histNum_; + + TH1F *histSclEn_; + TH1F *histSclEoEmatchingObject_barrel; + TH1F *histSclEoEmatchingObject_endcaps; + TH1F *histSclEt_; + TH2F *histSclEtVsEta_; + TH2F *histSclEtVsPhi_; + TH2F *histSclEtaVsPhi_; + TH1F *histSclEta_; + TH1F *histSclPhi_; + TH1F *histSclSigEtaEta_; + TH1F *histSclSigEtaEta_barrel_; + TH1F *histSclSigEtaEta_endcaps_; + TH1F *histSclSigIEtaIEta_; + TH1F *histSclSigIEtaIEta_barrel_; + TH1F *histSclSigIEtaIEta_endcaps_; + TH1F *histSclE1x5_; + TH1F *histSclE1x5_barrel_; + TH1F *histSclE1x5_endcaps_; + TH1F *histSclE2x5max_; + TH1F *histSclE2x5max_barrel_; + TH1F *histSclE2x5max_endcaps_; + TH1F *histSclE5x5_; + TH1F *histSclE5x5_barrel_; + TH1F *histSclE5x5_endcaps_; + + TH1F *h_ele_ambiguousTracks; + TH2F *h_ele_ambiguousTracksVsEta; + TH2F *h_ele_ambiguousTracksVsPhi; + TH2F *h_ele_ambiguousTracksVsPt; + TH1F *h_ele_foundHits; + TH1F *h_ele_foundHits_barrel; + TH1F *h_ele_foundHits_endcaps; + TH2F *h_ele_foundHitsVsEta; + TH2F *h_ele_foundHitsVsPhi; + TH2F *h_ele_foundHitsVsPt; + TH1F *h_ele_lostHits; + TH1F *h_ele_lostHits_barrel; + TH1F *h_ele_lostHits_endcaps; + TH2F *h_ele_lostHitsVsEta; + TH2F *h_ele_lostHitsVsPhi; + TH2F *h_ele_lostHitsVsPt; + TH1F *h_ele_chi2; + TH1F *h_ele_chi2_barrel; + TH1F *h_ele_chi2_endcaps; + TH2F *h_ele_chi2VsEta; + TH2F *h_ele_chi2VsPhi; + TH2F *h_ele_chi2VsPt; + + TH1F *h_ele_PoPmatchingObject; + TH2F *h_ele_PoPmatchingObjectVsEta; + TH2F *h_ele_PoPmatchingObjectVsPhi; + TH2F *h_ele_PoPmatchingObjectVsPt; + TH1F *h_ele_PoPmatchingObject_barrel; + TH1F *h_ele_PoPmatchingObject_endcaps; + TH1F *h_ele_EtaMnEtamatchingObject; + TH2F *h_ele_EtaMnEtamatchingObjectVsEta; + TH2F *h_ele_EtaMnEtamatchingObjectVsPhi; + TH2F *h_ele_EtaMnEtamatchingObjectVsPt; + TH1F *h_ele_PhiMnPhimatchingObject; + TH1F *h_ele_PhiMnPhimatchingObject2; + TH2F *h_ele_PhiMnPhimatchingObjectVsEta; + TH2F *h_ele_PhiMnPhimatchingObjectVsPhi; + TH2F *h_ele_PhiMnPhimatchingObjectVsPt; + + TH1F *h_ele_PinMnPout; + TH1F *h_ele_PinMnPout_mode; + TH2F *h_ele_PinMnPoutVsEta_mode; + TH2F *h_ele_PinMnPoutVsPhi_mode; + TH2F *h_ele_PinMnPoutVsPt_mode; + TH2F *h_ele_PinMnPoutVsE_mode; + TH2F *h_ele_PinMnPoutVsChi2_mode; + + TH1F *h_ele_outerP; + TH1F *h_ele_outerP_mode; + TH2F *h_ele_outerPVsEta_mode; + TH1F *h_ele_outerPt; + TH1F *h_ele_outerPt_mode; + TH2F *h_ele_outerPtVsEta_mode; + TH2F *h_ele_outerPtVsPhi_mode; + TH2F *h_ele_outerPtVsPt_mode; + TH1F *h_ele_EoP; + TH1F *h_ele_EoP_barrel; + TH1F *h_ele_EoP_endcaps; + TH1F *h_ele_EoP_eg; + TH1F *h_ele_EoP_eg_barrel; + TH1F *h_ele_EoP_eg_endcaps; + TH2F *h_ele_EoPVsEta; + TH2F *h_ele_EoPVsPhi; + TH2F *h_ele_EoPVsE; + TH1F *h_ele_EseedOP; + TH1F *h_ele_EseedOP_barrel; + TH1F *h_ele_EseedOP_endcaps; + TH1F *h_ele_EseedOP_eg; + TH1F *h_ele_EseedOP_eg_barrel; + TH1F *h_ele_EseedOP_eg_endcaps; + TH2F *h_ele_EseedOPVsEta; + TH2F *h_ele_EseedOPVsPhi; + TH2F *h_ele_EseedOPVsE; + TH1F *h_ele_EoPout; + TH1F *h_ele_EoPout_barrel; + TH1F *h_ele_EoPout_endcaps; + TH1F *h_ele_EoPout_eg; + TH1F *h_ele_EoPout_eg_barrel; + TH1F *h_ele_EoPout_eg_endcaps; + TH2F *h_ele_EoPoutVsEta; + TH2F *h_ele_EoPoutVsPhi; + TH2F *h_ele_EoPoutVsE; + TH1F *h_ele_EeleOPout; + TH1F *h_ele_EeleOPout_barrel; + TH1F *h_ele_EeleOPout_endcaps; + TH1F *h_ele_EeleOPout_eg; + TH1F *h_ele_EeleOPout_eg_barrel; + TH1F *h_ele_EeleOPout_eg_endcaps; + TH2F *h_ele_EeleOPoutVsEta; + TH2F *h_ele_EeleOPoutVsPhi; + TH2F *h_ele_EeleOPoutVsE; + + TH1F *h_ele_dEtaSc_propVtx; + TH1F *h_ele_dEtaSc_propVtx_barrel; + TH1F *h_ele_dEtaSc_propVtx_endcaps; + TH1F *h_ele_dEtaSc_propVtx_eg; + TH1F *h_ele_dEtaSc_propVtx_eg_barrel; + TH1F *h_ele_dEtaSc_propVtx_eg_endcaps; + TH2F *h_ele_dEtaScVsEta_propVtx; + TH2F *h_ele_dEtaScVsPhi_propVtx; + TH2F *h_ele_dEtaScVsPt_propVtx; + TH1F *h_ele_dPhiSc_propVtx; + TH1F *h_ele_dPhiSc_propVtx_barrel; + TH1F *h_ele_dPhiSc_propVtx_endcaps; + TH1F *h_ele_dPhiSc_propVtx_eg; + TH1F *h_ele_dPhiSc_propVtx_eg_barrel; + TH1F *h_ele_dPhiSc_propVtx_eg_endcaps; + TH2F *h_ele_dPhiScVsEta_propVtx; + TH2F *h_ele_dPhiScVsPhi_propVtx; + TH2F *h_ele_dPhiScVsPt_propVtx; + TH1F *h_ele_dEtaCl_propOut; + TH1F *h_ele_dEtaCl_propOut_barrel; + TH1F *h_ele_dEtaCl_propOut_endcaps; + TH1F *h_ele_dEtaCl_propOut_eg; + TH1F *h_ele_dEtaCl_propOut_eg_barrel; + TH1F *h_ele_dEtaCl_propOut_eg_endcaps; + TH2F *h_ele_dEtaClVsEta_propOut; + TH2F *h_ele_dEtaClVsPhi_propOut; + TH2F *h_ele_dEtaClVsPt_propOut; + TH1F *h_ele_dPhiCl_propOut; + TH1F *h_ele_dPhiCl_propOut_barrel; + TH1F *h_ele_dPhiCl_propOut_endcaps; + TH1F *h_ele_dPhiCl_propOut_eg; + TH1F *h_ele_dPhiCl_propOut_eg_barrel; + TH1F *h_ele_dPhiCl_propOut_eg_endcaps; + TH2F *h_ele_dPhiClVsEta_propOut; + TH2F *h_ele_dPhiClVsPhi_propOut; + TH2F *h_ele_dPhiClVsPt_propOut; + TH1F *h_ele_dEtaEleCl_propOut; + TH1F *h_ele_dEtaEleCl_propOut_barrel; + TH1F *h_ele_dEtaEleCl_propOut_endcaps; + TH1F *h_ele_dEtaEleCl_propOut_eg; + TH1F *h_ele_dEtaEleCl_propOut_eg_barrel; + TH1F *h_ele_dEtaEleCl_propOut_eg_endcaps; + TH2F *h_ele_dEtaEleClVsEta_propOut; + TH2F *h_ele_dEtaEleClVsPhi_propOut; + TH2F *h_ele_dEtaEleClVsPt_propOut; + TH1F *h_ele_dPhiEleCl_propOut; + TH1F *h_ele_dPhiEleCl_propOut_barrel; + TH1F *h_ele_dPhiEleCl_propOut_endcaps; + TH1F *h_ele_dPhiEleCl_propOut_eg; + TH1F *h_ele_dPhiEleCl_propOut_eg_barrel; + TH1F *h_ele_dPhiEleCl_propOut_eg_endcaps; + TH2F *h_ele_dPhiEleClVsEta_propOut; + TH2F *h_ele_dPhiEleClVsPhi_propOut; + TH2F *h_ele_dPhiEleClVsPt_propOut; + + TH1F *h_ele_seed_dphi2_; + TH2F *h_ele_seed_dphi2VsEta_; + TH2F *h_ele_seed_dphi2VsPt_; + TH1F *h_ele_seed_drz2_; + TH2F *h_ele_seed_drz2VsEta_; + TH2F *h_ele_seed_drz2VsPt_; + TH1F *h_ele_seed_subdet2_; + + TH1F *h_ele_classes; + TH1F *h_ele_eta; + TH1F *h_ele_eta_golden; + TH1F *h_ele_eta_bbrem; + TH1F *h_ele_eta_narrow; + TH1F *h_ele_eta_shower; + + TH1F *h_ele_HoE; + TH1F *h_ele_HoE_barrel; + TH1F *h_ele_HoE_endcaps; + TH1F *h_ele_HoE_eg; + TH1F *h_ele_HoE_eg_barrel; + TH1F *h_ele_HoE_eg_endcaps; + TH1F *h_ele_HoE_fiducial; + TH2F *h_ele_HoEVsEta; + TH2F *h_ele_HoEVsPhi; + TH2F *h_ele_HoEVsE; + + TH1F *h_ele_fbrem; + TProfile *h_ele_fbremVsEta_mode; + TProfile *h_ele_fbremVsEta_mean; + + TH2F *h_ele_PinVsPoutGolden_mode; + TH2F *h_ele_PinVsPoutShowering_mode; + TH2F *h_ele_PinVsPoutGolden_mean; + TH2F *h_ele_PinVsPoutShowering_mean; + TH2F *h_ele_PtinVsPtoutGolden_mode; + TH2F *h_ele_PtinVsPtoutShowering_mode; + TH2F *h_ele_PtinVsPtoutGolden_mean; + TH2F *h_ele_PtinVsPtoutShowering_mean; + TH1F *histSclEoEmatchingObjectGolden_barrel; + TH1F *histSclEoEmatchingObjectGolden_endcaps; + TH1F *histSclEoEmatchingObjectShowering_barrel; + TH1F *histSclEoEmatchingObjectShowering_endcaps; + + TH1F *h_ele_mva; + TH1F *h_ele_provenance; + + TH1F *h_ele_tkSumPt_dr03; + TH1F *h_ele_ecalRecHitSumEt_dr03; + TH1F *h_ele_hcalDepth1TowerSumEt_dr03; + TH1F *h_ele_hcalDepth2TowerSumEt_dr03; + TH1F *h_ele_tkSumPt_dr04; + TH1F *h_ele_ecalRecHitSumEt_dr04; + TH1F *h_ele_hcalDepth1TowerSumEt_dr04; + TH1F *h_ele_hcalDepth2TowerSumEt_dr04; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(GsfElectronMCFakeAnalyzer); + using namespace reco; GsfElectronMCFakeAnalyzer::GsfElectronMCFakeAnalyzer(const edm::ParameterSet &conf) diff --git a/RecoEgamma/Examples/plugins/GsfElectronMCFakeAnalyzer.h b/RecoEgamma/Examples/plugins/GsfElectronMCFakeAnalyzer.h deleted file mode 100644 index 7f13582399082..0000000000000 --- a/RecoEgamma/Examples/plugins/GsfElectronMCFakeAnalyzer.h +++ /dev/null @@ -1,399 +0,0 @@ -#ifndef GsfElectronMCFakeAnalyzer_h -#define GsfElectronMCFakeAnalyzer_h - -// -// Package: RecoEgamma/Examples -// Class: GsfElectronMCFakeAnalyzer -// - -// -// Original Author: Ursula Berthon, Claude Charlot -// Created: Mon Mar 27 13:22:06 CEST 2006 -// -// - -#include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" - -#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" - -class MagneticField; -class TFile; -class TH1F; -class TH2F; -class TH1I; -class TProfile; -class TTree; - -class GsfElectronMCFakeAnalyzer : public edm::one::EDAnalyzer<> { -public: - explicit GsfElectronMCFakeAnalyzer(const edm::ParameterSet &conf); - - ~GsfElectronMCFakeAnalyzer() override; - - void beginJob() override; - void endJob() override; - void analyze(const edm::Event &e, const edm::EventSetup &c) override; - -private: - edm::InputTag electronCollection_; - edm::InputTag matchingObjectCollection_; - edm::InputTag beamSpot_; - bool readAOD_; - std::string outputFile_; - - TrajectoryStateTransform transformer_; - edm::ESHandle pDD; - edm::ESHandle theMagField; - - float mcEnergy[10], mcEta[10], mcPhi[10], mcPt[10], mcQ[10]; - float superclusterEnergy[10], superclusterEta[10], superclusterPhi[10], superclusterEt[10]; - float seedMomentum[10], seedEta[10], seedPhi[10], seedPt[10], seedQ[10]; - - double maxPt_; - double maxAbsEta_; - double deltaR_; - - TFile *histfile_; - TTree *tree_; - - // histos limits and binning - - int nbinxyz; - int nbinp; - int nbinp2D; - double pmax; - int nbinpt; - int nbinpt2D; - int nbinpteff; - double ptmax; - int nbinfhits; - double fhitsmax; - int nbinlhits; - double lhitsmax; - int nbineta; - int nbineta2D; - double etamin; - double etamax; - int nbindeta; - double detamin; - double detamax; - int nbindetamatch; - int nbindetamatch2D; - double detamatchmin; - double detamatchmax; - int nbinphi; - int nbinphi2D; - double phimin; - double phimax; - int nbindphi; - double dphimin; - double dphimax; - int nbindphimatch; - int nbindphimatch2D; - double dphimatchmin; - double dphimatchmax; - int nbineop; - int nbineop2D; - double eopmax; - double eopmaxsht; - int nbinmee; - double meemin; - double meemax; - int nbinhoe; - double hoemin; - double hoemax; - - // histos - - TH1F *h_matchingObjectNum; - - TH1F *h_matchingObjectEta; - TH1F *h_matchingObjectAbsEta; - TH1F *h_matchingObjectP; - TH1F *h_matchingObjectPt; - TH1F *h_matchingObjectPhi; - TH1F *h_matchingObjectZ; - - TH1F *h_ele_EoverP_all; - TH1F *h_ele_EseedOP_all; - TH1F *h_ele_EoPout_all; - TH1F *h_ele_EeleOPout_all; - TH1F *h_ele_dEtaSc_propVtx_all; - TH1F *h_ele_dPhiSc_propVtx_all; - TH1F *h_ele_dEtaCl_propOut_all; - TH1F *h_ele_dPhiCl_propOut_all; - TH1F *h_ele_TIP_all; - TH1F *h_ele_HoE_all; - TH1F *h_ele_vertexEta_all; - TH1F *h_ele_vertexPt_all; - TH1F *h_ele_mee_all; - TH1F *h_ele_mee_os; - - TH2F *h_ele_E2mnE1vsMee_all; - TH2F *h_ele_E2mnE1vsMee_egeg_all; - - TH1F *h_ele_matchingObjectEta_matched; - TH1F *h_ele_matchingObjectAbsEta_matched; - TH1F *h_ele_matchingObjectPt_matched; - TH1F *h_ele_matchingObjectPhi_matched; - TH1F *h_ele_matchingObjectZ_matched; - - TH1F *h_ele_charge; - TH2F *h_ele_chargeVsEta; - TH2F *h_ele_chargeVsPhi; - TH2F *h_ele_chargeVsPt; - TH1F *h_ele_vertexP; - TH1F *h_ele_vertexPt; - TH2F *h_ele_vertexPtVsEta; - TH2F *h_ele_vertexPtVsPhi; - TH1F *h_ele_vertexEta; - TH2F *h_ele_vertexEtaVsPhi; - TH1F *h_ele_vertexAbsEta; - TH1F *h_ele_vertexPhi; - TH1F *h_ele_vertexX; - TH1F *h_ele_vertexY; - TH1F *h_ele_vertexZ; - TH1F *h_ele_vertexTIP; - TH2F *h_ele_vertexTIPVsEta; - TH2F *h_ele_vertexTIPVsPhi; - TH2F *h_ele_vertexTIPVsPt; - - TH1F *histNum_; - - TH1F *histSclEn_; - TH1F *histSclEoEmatchingObject_barrel; - TH1F *histSclEoEmatchingObject_endcaps; - TH1F *histSclEt_; - TH2F *histSclEtVsEta_; - TH2F *histSclEtVsPhi_; - TH2F *histSclEtaVsPhi_; - TH1F *histSclEta_; - TH1F *histSclPhi_; - TH1F *histSclSigEtaEta_; - TH1F *histSclSigEtaEta_barrel_; - TH1F *histSclSigEtaEta_endcaps_; - TH1F *histSclSigIEtaIEta_; - TH1F *histSclSigIEtaIEta_barrel_; - TH1F *histSclSigIEtaIEta_endcaps_; - TH1F *histSclE1x5_; - TH1F *histSclE1x5_barrel_; - TH1F *histSclE1x5_endcaps_; - TH1F *histSclE2x5max_; - TH1F *histSclE2x5max_barrel_; - TH1F *histSclE2x5max_endcaps_; - TH1F *histSclE5x5_; - TH1F *histSclE5x5_barrel_; - TH1F *histSclE5x5_endcaps_; - - TH1F *h_ele_ambiguousTracks; - TH2F *h_ele_ambiguousTracksVsEta; - TH2F *h_ele_ambiguousTracksVsPhi; - TH2F *h_ele_ambiguousTracksVsPt; - TH1F *h_ele_foundHits; - TH1F *h_ele_foundHits_barrel; - TH1F *h_ele_foundHits_endcaps; - TH2F *h_ele_foundHitsVsEta; - TH2F *h_ele_foundHitsVsPhi; - TH2F *h_ele_foundHitsVsPt; - TH1F *h_ele_lostHits; - TH1F *h_ele_lostHits_barrel; - TH1F *h_ele_lostHits_endcaps; - TH2F *h_ele_lostHitsVsEta; - TH2F *h_ele_lostHitsVsPhi; - TH2F *h_ele_lostHitsVsPt; - TH1F *h_ele_chi2; - TH1F *h_ele_chi2_barrel; - TH1F *h_ele_chi2_endcaps; - TH2F *h_ele_chi2VsEta; - TH2F *h_ele_chi2VsPhi; - TH2F *h_ele_chi2VsPt; - - TH1F *h_ele_PoPmatchingObject; - TH2F *h_ele_PoPmatchingObjectVsEta; - TH2F *h_ele_PoPmatchingObjectVsPhi; - TH2F *h_ele_PoPmatchingObjectVsPt; - TH1F *h_ele_PoPmatchingObject_barrel; - TH1F *h_ele_PoPmatchingObject_endcaps; - TH1F *h_ele_EtaMnEtamatchingObject; - TH2F *h_ele_EtaMnEtamatchingObjectVsEta; - TH2F *h_ele_EtaMnEtamatchingObjectVsPhi; - TH2F *h_ele_EtaMnEtamatchingObjectVsPt; - TH1F *h_ele_PhiMnPhimatchingObject; - TH1F *h_ele_PhiMnPhimatchingObject2; - TH2F *h_ele_PhiMnPhimatchingObjectVsEta; - TH2F *h_ele_PhiMnPhimatchingObjectVsPhi; - TH2F *h_ele_PhiMnPhimatchingObjectVsPt; - - TH1F *h_ele_PinMnPout; - TH1F *h_ele_PinMnPout_mode; - TH2F *h_ele_PinMnPoutVsEta_mode; - TH2F *h_ele_PinMnPoutVsPhi_mode; - TH2F *h_ele_PinMnPoutVsPt_mode; - TH2F *h_ele_PinMnPoutVsE_mode; - TH2F *h_ele_PinMnPoutVsChi2_mode; - - TH1F *h_ele_outerP; - TH1F *h_ele_outerP_mode; - TH2F *h_ele_outerPVsEta_mode; - TH1F *h_ele_outerPt; - TH1F *h_ele_outerPt_mode; - TH2F *h_ele_outerPtVsEta_mode; - TH2F *h_ele_outerPtVsPhi_mode; - TH2F *h_ele_outerPtVsPt_mode; - TH1F *h_ele_EoP; - TH1F *h_ele_EoP_barrel; - TH1F *h_ele_EoP_endcaps; - TH1F *h_ele_EoP_eg; - TH1F *h_ele_EoP_eg_barrel; - TH1F *h_ele_EoP_eg_endcaps; - TH2F *h_ele_EoPVsEta; - TH2F *h_ele_EoPVsPhi; - TH2F *h_ele_EoPVsE; - TH1F *h_ele_EseedOP; - TH1F *h_ele_EseedOP_barrel; - TH1F *h_ele_EseedOP_endcaps; - TH1F *h_ele_EseedOP_eg; - TH1F *h_ele_EseedOP_eg_barrel; - TH1F *h_ele_EseedOP_eg_endcaps; - TH2F *h_ele_EseedOPVsEta; - TH2F *h_ele_EseedOPVsPhi; - TH2F *h_ele_EseedOPVsE; - TH1F *h_ele_EoPout; - TH1F *h_ele_EoPout_barrel; - TH1F *h_ele_EoPout_endcaps; - TH1F *h_ele_EoPout_eg; - TH1F *h_ele_EoPout_eg_barrel; - TH1F *h_ele_EoPout_eg_endcaps; - TH2F *h_ele_EoPoutVsEta; - TH2F *h_ele_EoPoutVsPhi; - TH2F *h_ele_EoPoutVsE; - TH1F *h_ele_EeleOPout; - TH1F *h_ele_EeleOPout_barrel; - TH1F *h_ele_EeleOPout_endcaps; - TH1F *h_ele_EeleOPout_eg; - TH1F *h_ele_EeleOPout_eg_barrel; - TH1F *h_ele_EeleOPout_eg_endcaps; - TH2F *h_ele_EeleOPoutVsEta; - TH2F *h_ele_EeleOPoutVsPhi; - TH2F *h_ele_EeleOPoutVsE; - - TH1F *h_ele_dEtaSc_propVtx; - TH1F *h_ele_dEtaSc_propVtx_barrel; - TH1F *h_ele_dEtaSc_propVtx_endcaps; - TH1F *h_ele_dEtaSc_propVtx_eg; - TH1F *h_ele_dEtaSc_propVtx_eg_barrel; - TH1F *h_ele_dEtaSc_propVtx_eg_endcaps; - TH2F *h_ele_dEtaScVsEta_propVtx; - TH2F *h_ele_dEtaScVsPhi_propVtx; - TH2F *h_ele_dEtaScVsPt_propVtx; - TH1F *h_ele_dPhiSc_propVtx; - TH1F *h_ele_dPhiSc_propVtx_barrel; - TH1F *h_ele_dPhiSc_propVtx_endcaps; - TH1F *h_ele_dPhiSc_propVtx_eg; - TH1F *h_ele_dPhiSc_propVtx_eg_barrel; - TH1F *h_ele_dPhiSc_propVtx_eg_endcaps; - TH2F *h_ele_dPhiScVsEta_propVtx; - TH2F *h_ele_dPhiScVsPhi_propVtx; - TH2F *h_ele_dPhiScVsPt_propVtx; - TH1F *h_ele_dEtaCl_propOut; - TH1F *h_ele_dEtaCl_propOut_barrel; - TH1F *h_ele_dEtaCl_propOut_endcaps; - TH1F *h_ele_dEtaCl_propOut_eg; - TH1F *h_ele_dEtaCl_propOut_eg_barrel; - TH1F *h_ele_dEtaCl_propOut_eg_endcaps; - TH2F *h_ele_dEtaClVsEta_propOut; - TH2F *h_ele_dEtaClVsPhi_propOut; - TH2F *h_ele_dEtaClVsPt_propOut; - TH1F *h_ele_dPhiCl_propOut; - TH1F *h_ele_dPhiCl_propOut_barrel; - TH1F *h_ele_dPhiCl_propOut_endcaps; - TH1F *h_ele_dPhiCl_propOut_eg; - TH1F *h_ele_dPhiCl_propOut_eg_barrel; - TH1F *h_ele_dPhiCl_propOut_eg_endcaps; - TH2F *h_ele_dPhiClVsEta_propOut; - TH2F *h_ele_dPhiClVsPhi_propOut; - TH2F *h_ele_dPhiClVsPt_propOut; - TH1F *h_ele_dEtaEleCl_propOut; - TH1F *h_ele_dEtaEleCl_propOut_barrel; - TH1F *h_ele_dEtaEleCl_propOut_endcaps; - TH1F *h_ele_dEtaEleCl_propOut_eg; - TH1F *h_ele_dEtaEleCl_propOut_eg_barrel; - TH1F *h_ele_dEtaEleCl_propOut_eg_endcaps; - TH2F *h_ele_dEtaEleClVsEta_propOut; - TH2F *h_ele_dEtaEleClVsPhi_propOut; - TH2F *h_ele_dEtaEleClVsPt_propOut; - TH1F *h_ele_dPhiEleCl_propOut; - TH1F *h_ele_dPhiEleCl_propOut_barrel; - TH1F *h_ele_dPhiEleCl_propOut_endcaps; - TH1F *h_ele_dPhiEleCl_propOut_eg; - TH1F *h_ele_dPhiEleCl_propOut_eg_barrel; - TH1F *h_ele_dPhiEleCl_propOut_eg_endcaps; - TH2F *h_ele_dPhiEleClVsEta_propOut; - TH2F *h_ele_dPhiEleClVsPhi_propOut; - TH2F *h_ele_dPhiEleClVsPt_propOut; - - TH1F *h_ele_seed_dphi2_; - TH2F *h_ele_seed_dphi2VsEta_; - TH2F *h_ele_seed_dphi2VsPt_; - TH1F *h_ele_seed_drz2_; - TH2F *h_ele_seed_drz2VsEta_; - TH2F *h_ele_seed_drz2VsPt_; - TH1F *h_ele_seed_subdet2_; - - TH1F *h_ele_classes; - TH1F *h_ele_eta; - TH1F *h_ele_eta_golden; - TH1F *h_ele_eta_bbrem; - TH1F *h_ele_eta_narrow; - TH1F *h_ele_eta_shower; - - TH1F *h_ele_HoE; - TH1F *h_ele_HoE_barrel; - TH1F *h_ele_HoE_endcaps; - TH1F *h_ele_HoE_eg; - TH1F *h_ele_HoE_eg_barrel; - TH1F *h_ele_HoE_eg_endcaps; - TH1F *h_ele_HoE_fiducial; - TH2F *h_ele_HoEVsEta; - TH2F *h_ele_HoEVsPhi; - TH2F *h_ele_HoEVsE; - - TH1F *h_ele_fbrem; - TProfile *h_ele_fbremVsEta_mode; - TProfile *h_ele_fbremVsEta_mean; - - TH2F *h_ele_PinVsPoutGolden_mode; - TH2F *h_ele_PinVsPoutShowering_mode; - TH2F *h_ele_PinVsPoutGolden_mean; - TH2F *h_ele_PinVsPoutShowering_mean; - TH2F *h_ele_PtinVsPtoutGolden_mode; - TH2F *h_ele_PtinVsPtoutShowering_mode; - TH2F *h_ele_PtinVsPtoutGolden_mean; - TH2F *h_ele_PtinVsPtoutShowering_mean; - TH1F *histSclEoEmatchingObjectGolden_barrel; - TH1F *histSclEoEmatchingObjectGolden_endcaps; - TH1F *histSclEoEmatchingObjectShowering_barrel; - TH1F *histSclEoEmatchingObjectShowering_endcaps; - - TH1F *h_ele_mva; - TH1F *h_ele_provenance; - - TH1F *h_ele_tkSumPt_dr03; - TH1F *h_ele_ecalRecHitSumEt_dr03; - TH1F *h_ele_hcalDepth1TowerSumEt_dr03; - TH1F *h_ele_hcalDepth2TowerSumEt_dr03; - TH1F *h_ele_tkSumPt_dr04; - TH1F *h_ele_ecalRecHitSumEt_dr04; - TH1F *h_ele_hcalDepth1TowerSumEt_dr04; - TH1F *h_ele_hcalDepth2TowerSumEt_dr04; -}; - -#endif diff --git a/RecoEgamma/Examples/plugins/MCElectronAnalyzer.cc b/RecoEgamma/Examples/plugins/MCElectronAnalyzer.cc index bd2530818a55f..64d96f9ab99bf 100644 --- a/RecoEgamma/Examples/plugins/MCElectronAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/MCElectronAnalyzer.cc @@ -1,40 +1,78 @@ -#include -// -#include "RecoEgamma/Examples/plugins/MCElectronAnalyzer.h" -#include "RecoEgamma/EgammaMCTools/interface/ElectronMCTruthFinder.h" -#include "RecoEgamma/EgammaMCTools/interface/ElectronMCTruth.h" -// -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" -#include "SimDataFormats/Track/interface/SimTrack.h" -#include "SimDataFormats/Track/interface/SimTrackContainer.h" -#include "SimDataFormats/Vertex/interface/SimVertex.h" -#include "SimDataFormats/Vertex/interface/SimVertexContainer.h" -// -#include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" -#include "SimDataFormats/CrossingFrame/interface/MixCollection.h" -#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" -#include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h" -// #include "DataFormats/Common/interface/Handle.h" -// +#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" -// -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "RecoEgamma/EgammaMCTools/interface/ElectronMCTruth.h" +#include "RecoEgamma/EgammaMCTools/interface/ElectronMCTruthFinder.h" +#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" +#include "SimDataFormats/Track/interface/SimTrack.h" +#include "SimDataFormats/Track/interface/SimTrackContainer.h" +#include "SimDataFormats/Vertex/interface/SimVertex.h" +#include "SimDataFormats/Vertex/interface/SimVertexContainer.h" -// #include "TFile.h" #include "TH1.h" #include "TH2.h" #include "TTree.h" #include "TVector3.h" #include "TProfile.h" -// + +#include +#include +#include + +class MCElectronAnalyzer : public edm::one::EDAnalyzer<> { +public: + // + explicit MCElectronAnalyzer(const edm::ParameterSet&); + ~MCElectronAnalyzer() override; + + void analyze(const edm::Event&, const edm::EventSetup&) override; + void beginJob() override; + void endJob() override; + +private: + float etaTransformation(float a, float b); + float phiNormalization(float& a); + + // + ElectronMCTruthFinder* theElectronMCTruthFinder_; + + const TrackerGeometry* trackerGeom; + + std::string fOutputFileName_; + TFile* fOutputFile_; + + int nEvt_; + int nMatched_; + + /// global variable for the MC photon + double mcPhi_; + double mcEta_; + + std::string HepMCLabel; + std::string SimTkLabel; + std::string SimVtxLabel; + std::string SimHitLabel; + + TH1F* h_MCEleE_; + TH1F* h_MCEleEta_; + TH1F* h_MCElePhi_; + TH1F* h_BremFrac_; + TH1F* h_BremEnergy_; + + TProfile* p_BremVsR_; + TProfile* p_BremVsEta_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(MCElectronAnalyzer); using namespace std; diff --git a/RecoEgamma/Examples/plugins/MCElectronAnalyzer.h b/RecoEgamma/Examples/plugins/MCElectronAnalyzer.h deleted file mode 100644 index 68915e1ca712d..0000000000000 --- a/RecoEgamma/Examples/plugins/MCElectronAnalyzer.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef MCElectronAnalyzer_H -#define MCElectronAnalyzer_H -#include "RecoEgamma/EgammaMCTools/interface/ElectronMCTruthFinder.h" - -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "FWCore/Framework/interface/one/EDAnalyzer.h" - -#include -#include - -// forward declarations -class TFile; -class TH1F; -class TH2F; -class TProfile; -class TTree; -class SimVertex; -class SimTrack; - -class MCElectronAnalyzer : public edm::one::EDAnalyzer<> { -public: - // - explicit MCElectronAnalyzer(const edm::ParameterSet&); - ~MCElectronAnalyzer() override; - - void analyze(const edm::Event&, const edm::EventSetup&) override; - void beginJob() override; - void endJob() override; - -private: - float etaTransformation(float a, float b); - float phiNormalization(float& a); - - // - ElectronMCTruthFinder* theElectronMCTruthFinder_; - - const TrackerGeometry* trackerGeom; - - std::string fOutputFileName_; - TFile* fOutputFile_; - - int nEvt_; - int nMatched_; - - /// global variable for the MC photon - double mcPhi_; - double mcEta_; - - std::string HepMCLabel; - std::string SimTkLabel; - std::string SimVtxLabel; - std::string SimHitLabel; - - TH1F* h_MCEleE_; - TH1F* h_MCEleEta_; - TH1F* h_MCElePhi_; - TH1F* h_BremFrac_; - TH1F* h_BremEnergy_; - - TProfile* p_BremVsR_; - TProfile* p_BremVsEta_; -}; - -#endif diff --git a/RecoEgamma/Examples/plugins/MCPhotonAnalyzer.cc b/RecoEgamma/Examples/plugins/MCPhotonAnalyzer.cc index 0f90f306ada32..1cb2386807ac8 100644 --- a/RecoEgamma/Examples/plugins/MCPhotonAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/MCPhotonAnalyzer.cc @@ -1,44 +1,121 @@ -#include -// -#include "FWCore/ServiceRegistry/interface/Service.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" -// -#include "RecoEgamma/Examples/plugins/MCPhotonAnalyzer.h" -#include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruthFinder.h" -#include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruth.h" +#include "DataFormats/Common/interface/Handle.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include "RecoEgamma/EgammaMCTools/interface/ElectronMCTruth.h" -// +#include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruth.h" +#include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruthFinder.h" #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" #include "SimDataFormats/Track/interface/SimTrack.h" #include "SimDataFormats/Track/interface/SimTrackContainer.h" #include "SimDataFormats/Vertex/interface/SimVertex.h" #include "SimDataFormats/Vertex/interface/SimVertexContainer.h" -// -#include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" -#include "SimDataFormats/CrossingFrame/interface/MixCollection.h" -#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" -#include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h" -// -#include "DataFormats/Common/interface/Handle.h" -// -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Utilities/interface/Exception.h" -// -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" -#include "MagneticField/Engine/interface/MagneticField.h" -// #include "TFile.h" #include "TH1.h" #include "TH2.h" #include "TTree.h" #include "TVector3.h" #include "TProfile.h" -// + +#include +#include +#include + +class MCPhotonAnalyzer : public edm::one::EDAnalyzer<> { +public: + // + explicit MCPhotonAnalyzer(const edm::ParameterSet&); + ~MCPhotonAnalyzer() override; + + void analyze(const edm::Event&, const edm::EventSetup&) override; + void beginJob() override; + void endJob() override; + +private: + float etaTransformation(float a, float b); + float phiNormalization(float& a); + + // + PhotonMCTruthFinder* thePhotonMCTruthFinder_; + + const TrackerGeometry* trackerGeom; + + std::string fOutputFileName_; + TFile* fOutputFile_; + + int nEvt_; + int nMatched_; + + /// global variable for the MC photon + + double mcPhi_; + double mcEta_; + + std::string HepMCLabel; + std::string SimTkLabel; + std::string SimVtxLabel; + std::string SimHitLabel; + + // all photons + TH1F* h_MCPhoE_; + TH1F* h_MCPhoEta_; + TH1F* h_MCPhoEta1_; + TH1F* h_MCPhoEta2_; + TH1F* h_MCPhoEta3_; + TH1F* h_MCPhoEta4_; + TH1F* h_MCPhoPhi_; + // Conversion + TH1F* h_MCConvPhoE_; + TH1F* h_MCConvPhoEta_; + TH1F* h_MCConvPhoPhi_; + TH1F* h_MCConvPhoR_; + TH1F* h_MCConvPhoREta1_; + TH1F* h_MCConvPhoREta2_; + TH1F* h_MCConvPhoREta3_; + TH1F* h_MCConvPhoREta4_; + TH1F* h_convFracEta1_; + TH1F* h_convFracEta2_; + TH1F* h_convFracEta3_; + TH1F* h_convFracEta4_; + + /// Conversions with two tracks + TH1F* h_MCConvPhoTwoTracksE_; + TH1F* h_MCConvPhoTwoTracksEta_; + TH1F* h_MCConvPhoTwoTracksPhi_; + TH1F* h_MCConvPhoTwoTracksR_; + /// Conversions with one track + TH1F* h_MCConvPhoOneTrackE_; + TH1F* h_MCConvPhoOneTrackEta_; + TH1F* h_MCConvPhoOneTrackPhi_; + TH1F* h_MCConvPhoOneTrackR_; + + TH1F* h_MCEleE_; + TH1F* h_MCEleEta_; + TH1F* h_MCElePhi_; + TH1F* h_BremFrac_; + TH1F* h_BremEnergy_; + TH2F* h_EleEvsPhoE_; + TH2F* h_bremEvsEleE_; + + TProfile* p_BremVsR_; + TProfile* p_BremVsEta_; + + TProfile* p_BremVsConvR_; + TProfile* p_BremVsConvEta_; + + TH2F* h_bremFracVsConvR_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(MCPhotonAnalyzer); using namespace std; diff --git a/RecoEgamma/Examples/plugins/MCPhotonAnalyzer.h b/RecoEgamma/Examples/plugins/MCPhotonAnalyzer.h deleted file mode 100644 index 1bb56dcfc0c24..0000000000000 --- a/RecoEgamma/Examples/plugins/MCPhotonAnalyzer.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef MCPhotonAnalyzer_H -#define MCPhotonAnalyzer_H -#include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruthFinder.h" - -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "FWCore/Framework/interface/one/EDAnalyzer.h" - -#include -#include - -// forward declarations -class TFile; -class TH1F; -class TH2F; -class TProfile; -class TTree; -class SimVertex; -class SimTrack; - -class MCPhotonAnalyzer : public edm::one::EDAnalyzer<> { -public: - // - explicit MCPhotonAnalyzer(const edm::ParameterSet&); - ~MCPhotonAnalyzer() override; - - void analyze(const edm::Event&, const edm::EventSetup&) override; - void beginJob() override; - void endJob() override; - -private: - float etaTransformation(float a, float b); - float phiNormalization(float& a); - - // - PhotonMCTruthFinder* thePhotonMCTruthFinder_; - - const TrackerGeometry* trackerGeom; - - std::string fOutputFileName_; - TFile* fOutputFile_; - - int nEvt_; - int nMatched_; - - /// global variable for the MC photon - - double mcPhi_; - double mcEta_; - - std::string HepMCLabel; - std::string SimTkLabel; - std::string SimVtxLabel; - std::string SimHitLabel; - - // all photons - TH1F* h_MCPhoE_; - TH1F* h_MCPhoEta_; - TH1F* h_MCPhoEta1_; - TH1F* h_MCPhoEta2_; - TH1F* h_MCPhoEta3_; - TH1F* h_MCPhoEta4_; - TH1F* h_MCPhoPhi_; - // Conversion - TH1F* h_MCConvPhoE_; - TH1F* h_MCConvPhoEta_; - TH1F* h_MCConvPhoPhi_; - TH1F* h_MCConvPhoR_; - TH1F* h_MCConvPhoREta1_; - TH1F* h_MCConvPhoREta2_; - TH1F* h_MCConvPhoREta3_; - TH1F* h_MCConvPhoREta4_; - TH1F* h_convFracEta1_; - TH1F* h_convFracEta2_; - TH1F* h_convFracEta3_; - TH1F* h_convFracEta4_; - - /// Conversions with two tracks - TH1F* h_MCConvPhoTwoTracksE_; - TH1F* h_MCConvPhoTwoTracksEta_; - TH1F* h_MCConvPhoTwoTracksPhi_; - TH1F* h_MCConvPhoTwoTracksR_; - /// Conversions with one track - TH1F* h_MCConvPhoOneTrackE_; - TH1F* h_MCConvPhoOneTrackEta_; - TH1F* h_MCConvPhoOneTrackPhi_; - TH1F* h_MCConvPhoOneTrackR_; - - TH1F* h_MCEleE_; - TH1F* h_MCEleEta_; - TH1F* h_MCElePhi_; - TH1F* h_BremFrac_; - TH1F* h_BremEnergy_; - TH2F* h_EleEvsPhoE_; - TH2F* h_bremEvsEleE_; - - TProfile* p_BremVsR_; - TProfile* p_BremVsEta_; - - TProfile* p_BremVsConvR_; - TProfile* p_BremVsConvEta_; - - TH2F* h_bremFracVsConvR_; -}; - -#endif diff --git a/RecoEgamma/Examples/plugins/MCPizeroAnalyzer.cc b/RecoEgamma/Examples/plugins/MCPizeroAnalyzer.cc index 43f59ded27e11..7d57032c32c9e 100644 --- a/RecoEgamma/Examples/plugins/MCPizeroAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/MCPizeroAnalyzer.cc @@ -1,41 +1,93 @@ -#include -// -#include "RecoEgamma/Examples/plugins/MCPizeroAnalyzer.h" -#include "RecoEgamma/EgammaMCTools/interface/PizeroMCTruthFinder.h" -#include "RecoEgamma/EgammaMCTools/interface/PizeroMCTruth.h" -#include "RecoEgamma/EgammaMCTools/interface/ElectronMCTruth.h" -// -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" -#include "SimDataFormats/Track/interface/SimTrack.h" -#include "SimDataFormats/Track/interface/SimTrackContainer.h" -#include "SimDataFormats/Vertex/interface/SimVertex.h" -#include "SimDataFormats/Vertex/interface/SimVertexContainer.h" -// -#include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" -#include "SimDataFormats/CrossingFrame/interface/MixCollection.h" -#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" -#include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h" -// #include "DataFormats/Common/interface/Handle.h" -// +#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" -// -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "RecoEgamma/EgammaMCTools/interface/ElectronMCTruth.h" +#include "RecoEgamma/EgammaMCTools/interface/PizeroMCTruth.h" +#include "RecoEgamma/EgammaMCTools/interface/PizeroMCTruthFinder.h" +#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" +#include "SimDataFormats/Track/interface/SimTrack.h" +#include "SimDataFormats/Track/interface/SimTrackContainer.h" +#include "SimDataFormats/Vertex/interface/SimVertex.h" +#include "SimDataFormats/Vertex/interface/SimVertexContainer.h" -// #include "TFile.h" #include "TH1.h" #include "TH2.h" #include "TTree.h" #include "TVector3.h" #include "TProfile.h" -// + +#include +#include +#include + +class MCPizeroAnalyzer : public edm::one::EDAnalyzer<> { +public: + // + explicit MCPizeroAnalyzer(const edm::ParameterSet&); + ~MCPizeroAnalyzer() override; + + void analyze(const edm::Event&, const edm::EventSetup&) override; + void beginJob() override; + void endJob() override; + +private: + float etaTransformation(float a, float b); + float phiNormalization(float& a); + + // + PizeroMCTruthFinder* thePizeroMCTruthFinder_; + + std::string fOutputFileName_; + TFile* fOutputFile_; + + int nEvt_; + int nMatched_; + + /// global variable for the MC photon + double mcPhi_; + double mcEta_; + + std::string HepMCLabel; + std::string SimTkLabel; + std::string SimVtxLabel; + std::string SimHitLabel; + + TH1F* h_MCPizE_; + TH1F* h_MCPizEta_; + TH1F* h_MCPizUnEta_; + TH1F* h_MCPiz1ConEta_; + TH1F* h_MCPiz2ConEta_; + TH1F* h_MCPizPhi_; + TH1F* h_MCPizMass1_; + TH1F* h_MCPizMass2_; + + TH1F* h_MCEleE_; + TH1F* h_MCEleEta_; + TH1F* h_MCElePhi_; + TH1F* h_BremFrac_; + TH1F* h_BremEnergy_; + + TH2F* h_EleEvsPhoE_; + + TH1F* h_MCPhoE_; + TH1F* h_MCPhoEta_; + TH1F* h_MCPhoPhi_; + TH1F* h_MCConvPhoE_; + TH1F* h_MCConvPhoEta_; + TH1F* h_MCConvPhoPhi_; + TH1F* h_MCConvPhoR_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(MCPizeroAnalyzer); using namespace std; diff --git a/RecoEgamma/Examples/plugins/MCPizeroAnalyzer.h b/RecoEgamma/Examples/plugins/MCPizeroAnalyzer.h deleted file mode 100644 index c788279a6ef25..0000000000000 --- a/RecoEgamma/Examples/plugins/MCPizeroAnalyzer.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef MCPizeroAnalyzer_H -#define MCPizeroAnalyzer_H -#include "RecoEgamma/EgammaMCTools/interface/PizeroMCTruthFinder.h" - -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "FWCore/Framework/interface/one/EDAnalyzer.h" - -#include -#include - -// forward declarations -class TFile; -class TH1F; -class TH2F; -class TProfile; -class TTree; -class SimVertex; -class SimTrack; - -class MCPizeroAnalyzer : public edm::one::EDAnalyzer<> { -public: - // - explicit MCPizeroAnalyzer(const edm::ParameterSet&); - ~MCPizeroAnalyzer() override; - - void analyze(const edm::Event&, const edm::EventSetup&) override; - void beginJob() override; - void endJob() override; - -private: - float etaTransformation(float a, float b); - float phiNormalization(float& a); - - // - PizeroMCTruthFinder* thePizeroMCTruthFinder_; - - std::string fOutputFileName_; - TFile* fOutputFile_; - - int nEvt_; - int nMatched_; - - /// global variable for the MC photon - double mcPhi_; - double mcEta_; - - std::string HepMCLabel; - std::string SimTkLabel; - std::string SimVtxLabel; - std::string SimHitLabel; - - TH1F* h_MCPizE_; - TH1F* h_MCPizEta_; - TH1F* h_MCPizUnEta_; - TH1F* h_MCPiz1ConEta_; - TH1F* h_MCPiz2ConEta_; - TH1F* h_MCPizPhi_; - TH1F* h_MCPizMass1_; - TH1F* h_MCPizMass2_; - - TH1F* h_MCEleE_; - TH1F* h_MCEleEta_; - TH1F* h_MCElePhi_; - TH1F* h_BremFrac_; - TH1F* h_BremEnergy_; - - TH2F* h_EleEvsPhoE_; - - TH1F* h_MCPhoE_; - TH1F* h_MCPhoEta_; - TH1F* h_MCPhoPhi_; - TH1F* h_MCConvPhoE_; - TH1F* h_MCConvPhoEta_; - TH1F* h_MCConvPhoPhi_; - TH1F* h_MCConvPhoR_; -}; - -#endif diff --git a/RecoEgamma/Examples/plugins/PatPhotonSimpleAnalyzer.cc b/RecoEgamma/Examples/plugins/PatPhotonSimpleAnalyzer.cc index e303b6f5c3ae0..bc9379b3d10a5 100644 --- a/RecoEgamma/Examples/plugins/PatPhotonSimpleAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/PatPhotonSimpleAnalyzer.cc @@ -17,25 +17,104 @@ // // Created: Wed Sep 23 12:00:01 CDT 2008 // -/////////////////////////////////////////////////////////////////////// -// header file for this analyzer // -/////////////////////////////////////////////////////////////////////// -#include "RecoEgamma/Examples/plugins/PatPhotonSimpleAnalyzer.h" -/////////////////////////////////////////////////////////////////////// -// CMSSW includes // -/////////////////////////////////////////////////////////////////////// #include "DataFormats/Common/interface/View.h" #include "DataFormats/PatCandidates/interface/Photon.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" -/////////////////////////////////////////////////////////////////////// -// Root include files // -/////////////////////////////////////////////////////////////////////// -#include "TH1.h" #include "TFile.h" +#include "TH1.h" #include "TMath.h" #include "TTree.h" +#include +#include + +class PatPhotonSimpleAnalyzer : public edm::one::EDAnalyzer<> { +public: + explicit PatPhotonSimpleAnalyzer(const edm::ParameterSet&); + ~PatPhotonSimpleAnalyzer() override; + + void analyze(const edm::Event&, const edm::EventSetup&) override; + void beginJob() override; + void endJob() override; + +private: + std::string outputFile_; // output file + double minPhotonEt_; // minimum photon Et + double minPhotonAbsEta_; // min and + double maxPhotonAbsEta_; // max abs(eta) + double minPhotonR9_; // minimum R9 = E(3x3)/E(SuperCluster) + double maxPhotonHoverE_; // maximum HCAL / ECAL + bool createPhotonTTree_; // Create a TTree of photon variables + + // Will be used for creating TTree of photons. + // These names did not have to match those from a phtn->... + // but do match for clarity. + struct struct_recPhoton { + float isolationEcalRecHit; + float isolationHcalRecHit; + float isolationSolidTrkCone; + float isolationHollowTrkCone; + float nTrkSolidCone; + float nTrkHollowCone; + float isEBGap; + float isEEGap; + float isEBEEGap; + float r9; + float et; + float eta; + float phi; + float hadronicOverEm; + float ecalIso; + float hcalIso; + float trackIso; + }; + struct_recPhoton recPhoton; + + // root file to store histograms + TFile* rootFile_; + + // data members for histograms to be filled + + // PhotonID Histograms + TH1F* h_isoEcalRecHit_; + TH1F* h_isoHcalRecHit_; + TH1F* h_trk_pt_solid_; + TH1F* h_trk_pt_hollow_; + TH1F* h_ntrk_solid_; + TH1F* h_ntrk_hollow_; + TH1F* h_ebgap_; + TH1F* h_eeGap_; + TH1F* h_ebeeGap_; + TH1F* h_r9_; + + // Photon Histograms + TH1F* h_photonEt_; + TH1F* h_photonEta_; + TH1F* h_photonPhi_; + TH1F* h_hadoverem_; + + // Photon's SuperCluster Histograms + TH1F* h_photonScEt_; + TH1F* h_photonScEta_; + TH1F* h_photonScPhi_; + TH1F* h_photonScEtaWidth_; + + // Composite or Other Histograms + TH1F* h_photonInAnyGap_; + TH1F* h_nPassingPho_; + TH1F* h_nPho_; + + // TTree + TTree* tree_PhotonAll_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(PatPhotonSimpleAnalyzer); + using namespace std; /////////////////////////////////////////////////////////////////////// diff --git a/RecoEgamma/Examples/plugins/PatPhotonSimpleAnalyzer.h b/RecoEgamma/Examples/plugins/PatPhotonSimpleAnalyzer.h deleted file mode 100644 index 6c1936516c3f0..0000000000000 --- a/RecoEgamma/Examples/plugins/PatPhotonSimpleAnalyzer.h +++ /dev/null @@ -1,115 +0,0 @@ -#ifndef RecoEgamma_PhotonIdentification_PatPhotonSimpleAnalyzer_H -#define RecoEgamma_PhotonIdentification_PatPhotonSimpleAnalyzer_H - -/**\class PatPhotonSimpleAnalyzer - - Description: Analyzer to make a load of histograms for the improvement of the PhotonID object - - Implementation: - \\\author: J. Stilley, A. Askew May 2008 -*/ -// - -// - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/one/EDAnalyzer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include -#include "TH1.h" -#include "TTree.h" - -class TFile; - -// -// class declaration -// -class PatPhotonSimpleAnalyzer : public edm::one::EDAnalyzer<> { -public: - explicit PatPhotonSimpleAnalyzer(const edm::ParameterSet&); - ~PatPhotonSimpleAnalyzer() override; - - void analyze(const edm::Event&, const edm::EventSetup&) override; - void beginJob() override; - void endJob() override; - -private: - std::string outputFile_; // output file - double minPhotonEt_; // minimum photon Et - double minPhotonAbsEta_; // min and - double maxPhotonAbsEta_; // max abs(eta) - double minPhotonR9_; // minimum R9 = E(3x3)/E(SuperCluster) - double maxPhotonHoverE_; // maximum HCAL / ECAL - bool createPhotonTTree_; // Create a TTree of photon variables - - // Will be used for creating TTree of photons. - // These names did not have to match those from a phtn->... - // but do match for clarity. - struct struct_recPhoton { - float isolationEcalRecHit; - float isolationHcalRecHit; - float isolationSolidTrkCone; - float isolationHollowTrkCone; - float nTrkSolidCone; - float nTrkHollowCone; - float isEBGap; - float isEEGap; - float isEBEEGap; - float r9; - float et; - float eta; - float phi; - float hadronicOverEm; - float ecalIso; - float hcalIso; - float trackIso; - }; - struct_recPhoton recPhoton; - - // root file to store histograms - TFile* rootFile_; - - // data members for histograms to be filled - - // PhotonID Histograms - TH1F* h_isoEcalRecHit_; - TH1F* h_isoHcalRecHit_; - TH1F* h_trk_pt_solid_; - TH1F* h_trk_pt_hollow_; - TH1F* h_ntrk_solid_; - TH1F* h_ntrk_hollow_; - TH1F* h_ebgap_; - TH1F* h_eeGap_; - TH1F* h_ebeeGap_; - TH1F* h_r9_; - - // Photon Histograms - TH1F* h_photonEt_; - TH1F* h_photonEta_; - TH1F* h_photonPhi_; - TH1F* h_hadoverem_; - - // Photon's SuperCluster Histograms - TH1F* h_photonScEt_; - TH1F* h_photonScEta_; - TH1F* h_photonScPhi_; - TH1F* h_photonScEtaWidth_; - - // Composite or Other Histograms - TH1F* h_photonInAnyGap_; - TH1F* h_nPassingPho_; - TH1F* h_nPho_; - - // TTree - TTree* tree_PhotonAll_; -}; -#endif diff --git a/RecoEgamma/Examples/plugins/PhotonsWithConversionsAnalyzer.cc b/RecoEgamma/Examples/plugins/PhotonsWithConversionsAnalyzer.cc index 489006d09d4dd..f4d484efdbf8e 100644 --- a/RecoEgamma/Examples/plugins/PhotonsWithConversionsAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/PhotonsWithConversionsAnalyzer.cc @@ -1,47 +1,101 @@ -#include -// -#include "FWCore/ServiceRegistry/interface/Service.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" -// -#include "RecoEgamma/Examples/plugins/PhotonsWithConversionsAnalyzer.h" -#include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruthFinder.h" -#include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruth.h" -#include "RecoEgamma/EgammaMCTools/interface/ElectronMCTruth.h" -// -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" -#include "SimDataFormats/Track/interface/SimTrack.h" -#include "SimDataFormats/Track/interface/SimTrackContainer.h" -#include "SimDataFormats/Vertex/interface/SimVertex.h" -#include "SimDataFormats/Vertex/interface/SimVertexContainer.h" -// -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Utilities/interface/Exception.h" -// #include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackExtra.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" #include "DataFormats/EgammaCandidates/interface/Conversion.h" #include "DataFormats/EgammaCandidates/interface/ConversionFwd.h" #include "DataFormats/EgammaCandidates/interface/Photon.h" #include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" -// -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackExtra.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/Utilities/interface/Exception.h" #include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruth.h" +#include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruthFinder.h" +#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" +#include "SimDataFormats/Track/interface/SimTrack.h" +#include "SimDataFormats/Track/interface/SimTrackContainer.h" +#include "SimDataFormats/Vertex/interface/SimVertex.h" +#include "SimDataFormats/Vertex/interface/SimVertexContainer.h" -// #include "TFile.h" #include "TH1.h" #include "TH2.h" #include "TTree.h" #include "TVector3.h" #include "TProfile.h" -// + +#include +#include +#include + +class PhotonsWithConversionsAnalyzer : public edm::one::EDAnalyzer<> { +public: + // + explicit PhotonsWithConversionsAnalyzer(const edm::ParameterSet&); + ~PhotonsWithConversionsAnalyzer() override; + + void analyze(const edm::Event&, const edm::EventSetup&) override; + void beginJob() override; + void endJob() override; + +private: + float etaTransformation(float a, float b); + + // + PhotonMCTruthFinder* thePhotonMCTruthFinder_; + + std::string fOutputFileName_; + TFile* fOutputFile_; + + int nEvt_; + int nMCPho_; + int nMatched_; + + std::string HepMCLabel; + std::string SimTkLabel; + std::string SimVtxLabel; + std::string SimHitLabel; + + std::string photonCollectionProducer_; + std::string photonCollection_; + + TH1F* h_ErecoEMC_; + TH1F* h_deltaPhi_; + TH1F* h_deltaEta_; + + //// All MC photons + TH1F* h_MCphoE_; + TH1F* h_MCphoPhi_; + TH1F* h_MCphoEta_; + + //// visible MC Converted photons + TH1F* h_MCConvE_; + TH1F* h_MCConvPt_; + TH1F* h_MCConvEta_; + + // SC from reco photons + TH1F* h_scE_; + TH1F* h_scEt_; + TH1F* h_scEta_; + TH1F* h_scPhi_; + // + TH1F* h_phoE_; + TH1F* h_phoEta_; + TH1F* h_phoPhi_; + // + // All tracks from reco photons + TH2F* h2_tk_nHitsVsR_; + // + TH2F* h2_tk_inPtVsR_; +}; using namespace std; diff --git a/RecoEgamma/Examples/plugins/PhotonsWithConversionsAnalyzer.h b/RecoEgamma/Examples/plugins/PhotonsWithConversionsAnalyzer.h deleted file mode 100644 index 1b48664920b27..0000000000000 --- a/RecoEgamma/Examples/plugins/PhotonsWithConversionsAnalyzer.h +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef PhotonsWithConversionsAnalyzer_H -#define PhotonsWithConversionsAnalyzer_H -#include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruthFinder.h" - -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "FWCore/Framework/interface/one/EDAnalyzer.h" - -#include -#include - -// forward declarations -class TFile; -class TH1F; -class TH2F; -class TProfile; -class TTree; -class SimVertex; -class SimTrack; - -class PhotonsWithConversionsAnalyzer : public edm::one::EDAnalyzer<> { -public: - // - explicit PhotonsWithConversionsAnalyzer(const edm::ParameterSet&); - ~PhotonsWithConversionsAnalyzer() override; - - void analyze(const edm::Event&, const edm::EventSetup&) override; - void beginJob() override; - void endJob() override; - -private: - float etaTransformation(float a, float b); - - // - PhotonMCTruthFinder* thePhotonMCTruthFinder_; - - std::string fOutputFileName_; - TFile* fOutputFile_; - - int nEvt_; - int nMCPho_; - int nMatched_; - - std::string HepMCLabel; - std::string SimTkLabel; - std::string SimVtxLabel; - std::string SimHitLabel; - - std::string photonCollectionProducer_; - std::string photonCollection_; - - TH1F* h_ErecoEMC_; - TH1F* h_deltaPhi_; - TH1F* h_deltaEta_; - - //// All MC photons - TH1F* h_MCphoE_; - TH1F* h_MCphoPhi_; - TH1F* h_MCphoEta_; - - //// visible MC Converted photons - TH1F* h_MCConvE_; - TH1F* h_MCConvPt_; - TH1F* h_MCConvEta_; - - // SC from reco photons - TH1F* h_scE_; - TH1F* h_scEt_; - TH1F* h_scEta_; - TH1F* h_scPhi_; - // - TH1F* h_phoE_; - TH1F* h_phoEta_; - TH1F* h_phoPhi_; - // - // All tracks from reco photons - TH2F* h2_tk_nHitsVsR_; - // - TH2F* h2_tk_inPtVsR_; -}; - -#endif diff --git a/RecoEgamma/Examples/plugins/SealModule.cc b/RecoEgamma/Examples/plugins/SealModule.cc deleted file mode 100644 index 28a3ae0ba8adf..0000000000000 --- a/RecoEgamma/Examples/plugins/SealModule.cc +++ /dev/null @@ -1,37 +0,0 @@ -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ModuleFactory.h" -#include "FWCore/Utilities/interface/typelookup.h" - -#include "ElectronIDAnalyzer.h" -#include "ElectronSeedAnalyzer.h" -#include "MCElectronAnalyzer.h" -#include "MCPhotonAnalyzer.h" -#include "MCPizeroAnalyzer.h" -#include "SimpleConvertedPhotonAnalyzer.h" -#include "SimplePhotonAnalyzer.h" -#include "SiStripElectronAnalyzer.h" -#include "GsfElectronMCAnalyzer.h" -#include "GsfElectronDataAnalyzer.h" -#include "GsfElectronFakeAnalyzer.h" -#include "GsfElectronMCFakeAnalyzer.h" -#include "PatPhotonSimpleAnalyzer.h" - -#include "CommonTools/UtilAlgos/interface/Merger.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" - -typedef Merger EgammaSuperClusterMerger; -DEFINE_FWK_MODULE(EgammaSuperClusterMerger); -DEFINE_FWK_MODULE(ElectronIDAnalyzer); -DEFINE_FWK_MODULE(ElectronSeedAnalyzer); -DEFINE_FWK_MODULE(MCElectronAnalyzer); -DEFINE_FWK_MODULE(MCPhotonAnalyzer); -DEFINE_FWK_MODULE(MCPizeroAnalyzer); -DEFINE_FWK_MODULE(GsfElectronMCAnalyzer); -DEFINE_FWK_MODULE(GsfElectronDataAnalyzer); -DEFINE_FWK_MODULE(GsfElectronFakeAnalyzer); -DEFINE_FWK_MODULE(GsfElectronMCFakeAnalyzer); -DEFINE_FWK_MODULE(SimpleConvertedPhotonAnalyzer); -DEFINE_FWK_MODULE(SimplePhotonAnalyzer); -DEFINE_FWK_MODULE(SiStripElectronAnalyzer); -DEFINE_FWK_MODULE(PatPhotonSimpleAnalyzer); diff --git a/RecoEgamma/Examples/plugins/SiStripElectronAnalyzer.cc b/RecoEgamma/Examples/plugins/SiStripElectronAnalyzer.cc index 6a4bdcfe30557..025f79929cb51 100644 --- a/RecoEgamma/Examples/plugins/SiStripElectronAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/SiStripElectronAnalyzer.cc @@ -10,59 +10,199 @@ // Created: Fri May 26 16:49:38 EDT 2006 // -// system include files -#include - -// user include files -#include "RecoEgamma/Examples/plugins/SiStripElectronAnalyzer.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/Math/interface/Point3D.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaReco/interface/BasicCluster.h" #include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h" - -#include "RecoEcal/EgammaCoreTools/interface/PositionCalc.h" +#include "DataFormats/Common/interface/Handle.h" #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/EgammaCandidates/interface/Electron.h" #include "DataFormats/EgammaCandidates/interface/ElectronFwd.h" #include "DataFormats/EgammaCandidates/interface/SiStripElectron.h" #include "DataFormats/EgammaCandidates/interface/SiStripElectronFwd.h" - -// for Si hits +#include "DataFormats/EgammaReco/interface/BasicCluster.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/GeometryVector/interface/GlobalPoint.h" +#include "DataFormats/Math/interface/Point3D.h" +#include "DataFormats/SiStripDetId/interface/StripSubdetector.h" #include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2DCollection.h" -#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h" -#include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2DCollection.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" #include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2D.h" +#include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2DCollection.h" +#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h" +#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2DCollection.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "Geometry/CommonDetUnit/interface/GeomDet.h" -#include "Geometry/CommonDetUnit/interface/GeomDetType.h" #include "Geometry/CommonDetUnit/interface/GeomDetEnumerators.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/CommonDetUnit/interface/GeomDetType.h" #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "DataFormats/GeometryVector/interface/GlobalPoint.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" #include "Geometry/Records/interface/TrackerTopologyRcd.h" -#include "DataFormats/SiStripDetId/interface/StripSubdetector.h" -#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2DCollection.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "RecoEcal/EgammaCoreTools/interface/PositionCalc.h" +#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" -// -// constants, enums and typedefs -// +#include "TBranch.h" +#include "TFile.h" +#include "TH1F.h" +#include "TNtuple.h" +#include "TTree.h" -// -// static data member definitions -// +#include +#include +#include + +#define myMaxHits 1000 + +class SiStripElectronAnalyzer : public edm::one::EDAnalyzer<> { +public: + explicit SiStripElectronAnalyzer(const edm::ParameterSet&); + ~SiStripElectronAnalyzer() override; + + void analyze(const edm::Event&, const edm::EventSetup&) override; + void beginJob() override; + virtual void initNtuple(void); + void endJob(void) override; + +private: + double unwrapPhi(double phi) const { + while (phi > M_PI) { + phi -= 2. * M_PI; + } + while (phi < -M_PI) { + phi += 2. * M_PI; + } + return phi; + } + + // ----------member data --------------------------- + std::string fileName_; + + TFile* file_; + TH1F* numCand_; + TH1F* numElectrons_; + TH1F* numSuperClusters_; + TH1F* energySuperClusters_; + TH1F* sizeSuperClusters_; + TH1F* emaxSuperClusters_; + TH1F* phiWidthSuperClusters_; + + TH1F* energySuperClustersEl_; + TH1F* sizeSuperClustersEl_; + TH1F* emaxSuperClustersEl_; + TH1F* phiWidthSuperClustersEl_; + + TH1F* ptDiff; + TH1F* pDiff; + TH1F* pElectronFailed; + TH1F* ptElectronFailed; + TH1F* pElectronPassed; + TH1F* ptElectronPassed; + TH1F* sizeSuperClustersPassed; + TH1F* sizeSuperClustersFailed; + TH1F* energySuperClustersPassed; + TH1F* energySuperClustersFailed; + TH1F* eOverPFailed; + TH1F* eOverPPassed; + + TH1F* numSiStereoHits_; + TH1F* numSiMonoHits_; + TH1F* numSiMatchedHits_; + + TTree* myTree_; + + int NShowers_; + float EShower_[myMaxHits]; + float XShower_[myMaxHits]; + float YShower_[myMaxHits]; + float ZShower_[myMaxHits]; + + int NStereoHits_; + float StereoHitX_[myMaxHits]; + float StereoHitY_[myMaxHits]; + float StereoHitZ_[myMaxHits]; + + float StereoHitR_[myMaxHits]; + float StereoHitPhi_[myMaxHits]; + float StereoHitTheta_[myMaxHits]; + + // errors in local coords + float StereoHitSigX_[myMaxHits]; + float StereoHitSigY_[myMaxHits]; + float StereoHitCorr_[myMaxHits]; + + float StereoHitSignal_[myMaxHits]; + float StereoHitNoise_[myMaxHits]; + int StereoHitWidth_[myMaxHits]; + + int StereoDetector_[myMaxHits]; + int StereoLayer_[myMaxHits]; + + // mono corresponds to "rphi" only hits + int NMonoHits_; + float MonoHitX_[myMaxHits]; + float MonoHitY_[myMaxHits]; + float MonoHitZ_[myMaxHits]; + + float MonoHitR_[myMaxHits]; + float MonoHitPhi_[myMaxHits]; + float MonoHitTheta_[myMaxHits]; + + // errors in local coords + float MonoHitSigX_[myMaxHits]; + float MonoHitSigY_[myMaxHits]; + float MonoHitCorr_[myMaxHits]; + + float MonoHitSignal_[myMaxHits]; + float MonoHitNoise_[myMaxHits]; + int MonoHitWidth_[myMaxHits]; + + int MonoDetector_[myMaxHits]; + int MonoLayer_[myMaxHits]; + + // matched hits + int NMatchedHits_; + float MatchedHitX_[myMaxHits]; + float MatchedHitY_[myMaxHits]; + float MatchedHitZ_[myMaxHits]; + + float MatchedHitR_[myMaxHits]; + float MatchedHitPhi_[myMaxHits]; + float MatchedHitTheta_[myMaxHits]; + + // errors in local coords + float MatchedHitSigX_[myMaxHits]; + float MatchedHitSigY_[myMaxHits]; + float MatchedHitCorr_[myMaxHits]; + + float MatchedHitSignal_[myMaxHits]; + float MatchedHitNoise_[myMaxHits]; + int MatchedHitWidth_[myMaxHits]; + + int MatchedDetector_[myMaxHits]; + int MatchedLayer_[myMaxHits]; + + std::string mctruthProducer_; + std::string mctruthCollection_; + std::string superClusterProducer_; + std::string superClusterCollection_; + std::string basicClusterProducer_; + std::string basicClusterCollection_; + std::string eBRecHitProducer_; + std::string eBRecHitCollection_; + std::string siElectronProducer_; + std::string siElectronCollection_; + std::string electronProducer_; + std::string electronCollection_; + std::string siHitProducer_; + std::string siRphiHitCollection_; + std::string siStereoHitCollection_; + std::string siMatchedHitCollection_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(SiStripElectronAnalyzer); -// -// constructors and destructor -// SiStripElectronAnalyzer::SiStripElectronAnalyzer(const edm::ParameterSet& iConfig) { //now do what ever initialization is needed fileName_ = iConfig.getParameter("fileName"); diff --git a/RecoEgamma/Examples/plugins/SiStripElectronAnalyzer.h b/RecoEgamma/Examples/plugins/SiStripElectronAnalyzer.h deleted file mode 100644 index 9523a121439f0..0000000000000 --- a/RecoEgamma/Examples/plugins/SiStripElectronAnalyzer.h +++ /dev/null @@ -1,192 +0,0 @@ -#ifndef RecoEgamma_Examples_SiStripElectronAnalyzer_h -#define RecoEgamma_Examples_SiStripElectronAnalyzer_h -// -*- C++ -*- -// -// Package: RecoEgamma/Examples -// Class : SiStripElectronAnalyzer -// -/**\class SiStripElectronAnalyzer SiStripElectronAnalyzer.h RecoEgamma/Examples/interface/SiStripElectronAnalyzer.h - - Description: - - Usage: - - -*/ -// -// Original Author: -// Created: Fri May 26 16:52:45 EDT 2006 -// - -// system include files -#include -#include -#include - -// user include files - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/one/EDAnalyzer.h" - -#include "TFile.h" -#include "TH1F.h" - -#include "TNtuple.h" -#include "TTree.h" -#include "TBranch.h" - -// forward declarations - -#define myMaxHits 1000 - -// -// class decleration -// - -class SiStripElectronAnalyzer : public edm::one::EDAnalyzer<> { -public: - explicit SiStripElectronAnalyzer(const edm::ParameterSet&); - ~SiStripElectronAnalyzer() override; - - void analyze(const edm::Event&, const edm::EventSetup&) override; - void beginJob() override; - virtual void initNtuple(void); - void endJob(void) override; - -private: - double unwrapPhi(double phi) const { - while (phi > M_PI) { - phi -= 2. * M_PI; - } - while (phi < -M_PI) { - phi += 2. * M_PI; - } - return phi; - } - - // ----------member data --------------------------- - std::string fileName_; - - TFile* file_; - TH1F* numCand_; - TH1F* numElectrons_; - TH1F* numSuperClusters_; - TH1F* energySuperClusters_; - TH1F* sizeSuperClusters_; - TH1F* emaxSuperClusters_; - TH1F* phiWidthSuperClusters_; - - TH1F* energySuperClustersEl_; - TH1F* sizeSuperClustersEl_; - TH1F* emaxSuperClustersEl_; - TH1F* phiWidthSuperClustersEl_; - - TH1F* ptDiff; - TH1F* pDiff; - TH1F* pElectronFailed; - TH1F* ptElectronFailed; - TH1F* pElectronPassed; - TH1F* ptElectronPassed; - TH1F* sizeSuperClustersPassed; - TH1F* sizeSuperClustersFailed; - TH1F* energySuperClustersPassed; - TH1F* energySuperClustersFailed; - TH1F* eOverPFailed; - TH1F* eOverPPassed; - - TH1F* numSiStereoHits_; - TH1F* numSiMonoHits_; - TH1F* numSiMatchedHits_; - - TTree* myTree_; - - int NShowers_; - float EShower_[myMaxHits]; - float XShower_[myMaxHits]; - float YShower_[myMaxHits]; - float ZShower_[myMaxHits]; - - int NStereoHits_; - float StereoHitX_[myMaxHits]; - float StereoHitY_[myMaxHits]; - float StereoHitZ_[myMaxHits]; - - float StereoHitR_[myMaxHits]; - float StereoHitPhi_[myMaxHits]; - float StereoHitTheta_[myMaxHits]; - - // errors in local coords - float StereoHitSigX_[myMaxHits]; - float StereoHitSigY_[myMaxHits]; - float StereoHitCorr_[myMaxHits]; - - float StereoHitSignal_[myMaxHits]; - float StereoHitNoise_[myMaxHits]; - int StereoHitWidth_[myMaxHits]; - - int StereoDetector_[myMaxHits]; - int StereoLayer_[myMaxHits]; - - // mono corresponds to "rphi" only hits - int NMonoHits_; - float MonoHitX_[myMaxHits]; - float MonoHitY_[myMaxHits]; - float MonoHitZ_[myMaxHits]; - - float MonoHitR_[myMaxHits]; - float MonoHitPhi_[myMaxHits]; - float MonoHitTheta_[myMaxHits]; - - // errors in local coords - float MonoHitSigX_[myMaxHits]; - float MonoHitSigY_[myMaxHits]; - float MonoHitCorr_[myMaxHits]; - - float MonoHitSignal_[myMaxHits]; - float MonoHitNoise_[myMaxHits]; - int MonoHitWidth_[myMaxHits]; - - int MonoDetector_[myMaxHits]; - int MonoLayer_[myMaxHits]; - - // matched hits - int NMatchedHits_; - float MatchedHitX_[myMaxHits]; - float MatchedHitY_[myMaxHits]; - float MatchedHitZ_[myMaxHits]; - - float MatchedHitR_[myMaxHits]; - float MatchedHitPhi_[myMaxHits]; - float MatchedHitTheta_[myMaxHits]; - - // errors in local coords - float MatchedHitSigX_[myMaxHits]; - float MatchedHitSigY_[myMaxHits]; - float MatchedHitCorr_[myMaxHits]; - - float MatchedHitSignal_[myMaxHits]; - float MatchedHitNoise_[myMaxHits]; - int MatchedHitWidth_[myMaxHits]; - - int MatchedDetector_[myMaxHits]; - int MatchedLayer_[myMaxHits]; - - std::string mctruthProducer_; - std::string mctruthCollection_; - std::string superClusterProducer_; - std::string superClusterCollection_; - std::string basicClusterProducer_; - std::string basicClusterCollection_; - std::string eBRecHitProducer_; - std::string eBRecHitCollection_; - std::string siElectronProducer_; - std::string siElectronCollection_; - std::string electronProducer_; - std::string electronCollection_; - std::string siHitProducer_; - std::string siRphiHitCollection_; - std::string siStereoHitCollection_; - std::string siMatchedHitCollection_; -}; - -#endif diff --git a/RecoEgamma/Examples/plugins/SimpleConvertedPhotonAnalyzer.cc b/RecoEgamma/Examples/plugins/SimpleConvertedPhotonAnalyzer.cc index 4485fc0a2add2..7c22866057c21 100644 --- a/RecoEgamma/Examples/plugins/SimpleConvertedPhotonAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/SimpleConvertedPhotonAnalyzer.cc @@ -1,42 +1,100 @@ -#include -// -#include "RecoEgamma/Examples/plugins/SimpleConvertedPhotonAnalyzer.h" -#include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruthFinder.h" -#include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruth.h" -#include "RecoEgamma/EgammaMCTools/interface/ElectronMCTruth.h" -// -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" -#include "SimDataFormats/Track/interface/SimTrack.h" -#include "SimDataFormats/Track/interface/SimTrackContainer.h" -#include "SimDataFormats/Vertex/interface/SimVertex.h" -#include "SimDataFormats/Vertex/interface/SimVertexContainer.h" -// +#include "DataFormats/CaloRecHit/interface/CaloCluster.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/EgammaCandidates/interface/Conversion.h" +#include "DataFormats/EgammaCandidates/interface/ConversionFwd.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackExtra.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" -// -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackExtra.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/EgammaCandidates/interface/Conversion.h" -#include "DataFormats/EgammaCandidates/interface/ConversionFwd.h" -#include "DataFormats/CaloRecHit/interface/CaloCluster.h" -// -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruth.h" +#include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruthFinder.h" +#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" +#include "SimDataFormats/Track/interface/SimTrack.h" +#include "SimDataFormats/Track/interface/SimTrackContainer.h" +#include "SimDataFormats/Vertex/interface/SimVertex.h" +#include "SimDataFormats/Vertex/interface/SimVertexContainer.h" -// #include "TFile.h" #include "TH1.h" #include "TH2.h" #include "TTree.h" #include "TVector3.h" #include "TProfile.h" -// + +#include +#include +#include + +class SimpleConvertedPhotonAnalyzer : public edm::one::EDAnalyzer<> { +public: + // + explicit SimpleConvertedPhotonAnalyzer(const edm::ParameterSet&); + ~SimpleConvertedPhotonAnalyzer() override; + + void analyze(const edm::Event&, const edm::EventSetup&) override; + void beginJob() override; + void endJob() override; + +private: + float etaTransformation(float a, float b); + + // + PhotonMCTruthFinder* thePhotonMCTruthFinder_; + + std::string fOutputFileName_; + TFile* fOutputFile_; + + int nEvt_; + int nMCPho_; + int nMatched_; + + std::string HepMCLabel; + std::string SimTkLabel; + std::string SimVtxLabel; + std::string SimHitLabel; + + std::string convertedPhotonCollectionProducer_; + std::string convertedPhotonCollection_; + + TH1F* h_ErecoEMC_; + TH1F* h_deltaPhi_; + TH1F* h_deltaEta_; + + //// All MC photons + TH1F* h_MCphoE_; + TH1F* h_MCphoPhi_; + TH1F* h_MCphoEta_; + + //// visible MC Converted photons + TH1F* h_MCConvE_; + TH1F* h_MCConvPt_; + TH1F* h_MCConvEta_; + + // SC from reco photons + TH1F* h_scE_; + TH1F* h_scEta_; + TH1F* h_scPhi_; + // + TH1F* h_phoE_; + TH1F* h_phoEta_; + TH1F* h_phoPhi_; + // + // All tracks from reco photons + TH2F* h2_tk_nHitsVsR_; + // + TH2F* h2_tk_inPtVsR_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(SimpleConvertedPhotonAnalyzer); using namespace std; diff --git a/RecoEgamma/Examples/plugins/SimpleConvertedPhotonAnalyzer.h b/RecoEgamma/Examples/plugins/SimpleConvertedPhotonAnalyzer.h deleted file mode 100644 index b37ad9ff8e12f..0000000000000 --- a/RecoEgamma/Examples/plugins/SimpleConvertedPhotonAnalyzer.h +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef SimpleConvertedPhotonAnalyzer_H -#define SimpleConvertedPhotonAnalyzer_H -#include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruthFinder.h" - -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "FWCore/Framework/interface/one/EDAnalyzer.h" - -#include -#include - -// forward declarations -class TFile; -class TH1F; -class TH2F; -class TProfile; -class TTree; -class SimVertex; -class SimTrack; - -class SimpleConvertedPhotonAnalyzer : public edm::one::EDAnalyzer<> { -public: - // - explicit SimpleConvertedPhotonAnalyzer(const edm::ParameterSet&); - ~SimpleConvertedPhotonAnalyzer() override; - - void analyze(const edm::Event&, const edm::EventSetup&) override; - void beginJob() override; - void endJob() override; - -private: - float etaTransformation(float a, float b); - - // - PhotonMCTruthFinder* thePhotonMCTruthFinder_; - - std::string fOutputFileName_; - TFile* fOutputFile_; - - int nEvt_; - int nMCPho_; - int nMatched_; - - std::string HepMCLabel; - std::string SimTkLabel; - std::string SimVtxLabel; - std::string SimHitLabel; - - std::string convertedPhotonCollectionProducer_; - std::string convertedPhotonCollection_; - - TH1F* h_ErecoEMC_; - TH1F* h_deltaPhi_; - TH1F* h_deltaEta_; - - //// All MC photons - TH1F* h_MCphoE_; - TH1F* h_MCphoPhi_; - TH1F* h_MCphoEta_; - - //// visible MC Converted photons - TH1F* h_MCConvE_; - TH1F* h_MCConvPt_; - TH1F* h_MCConvEta_; - - // SC from reco photons - TH1F* h_scE_; - TH1F* h_scEta_; - TH1F* h_scPhi_; - // - TH1F* h_phoE_; - TH1F* h_phoEta_; - TH1F* h_phoPhi_; - // - // All tracks from reco photons - TH2F* h2_tk_nHitsVsR_; - // - TH2F* h2_tk_inPtVsR_; -}; - -#endif diff --git a/RecoEgamma/Examples/plugins/SimplePhotonAnalyzer.cc b/RecoEgamma/Examples/plugins/SimplePhotonAnalyzer.cc index 95666e5289783..600191f632117 100644 --- a/RecoEgamma/Examples/plugins/SimplePhotonAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/SimplePhotonAnalyzer.cc @@ -1,33 +1,100 @@ -/**\class PhotonSimpleAnalyzer +/**\class SimplePhotonAnalyzer ** + ** Description: Get Photon collection from the event and make very basic histos ** \author Nancy Marinelli, U. of Notre Dame, US -*/ + ** + **/ -#include "RecoEgamma/Examples/plugins/SimplePhotonAnalyzer.h" -#include "FWCore/ServiceRegistry/interface/Service.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Utilities/interface/Exception.h" +#include "DQMServices/Core/interface/DQMStore.h" #include "DataFormats/Common/interface/Handle.h" -// +#include "DataFormats/Common/interface/ValueMap.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" #include "DataFormats/EgammaCandidates/interface/Photon.h" #include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" -#include "DataFormats/EgammaReco/interface/BasicCluster.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" -#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h" -#include "DataFormats/Common/interface/ValueMap.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateEGammaExtra.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateEGammaExtraFwd.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" +#include "Geometry/CaloTopology/interface/CaloTopology.h" +#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" -// #include "CLHEP/Units/GlobalPhysicalConstants.h" + #include "TFile.h" +#include "TH1.h" +#include "TProfile.h" + +#include +#include + +class SimplePhotonAnalyzer : public edm::one::EDAnalyzer<> { +public: + typedef dqm::legacy::DQMStore DQMStore; + typedef dqm::legacy::MonitorElement MonitorElement; + + explicit SimplePhotonAnalyzer(const edm::ParameterSet&); + ~SimplePhotonAnalyzer() override; + + void analyze(const edm::Event&, const edm::EventSetup&) override; + void beginJob() override; + void endJob() override; + +private: + float etaTransformation(float a, float b); + + std::string mcProducer_; + std::string mcCollection_; + std::string photonCollectionProducer_; + std::string photonCollection_; + std::string valueMapPFCandPhoton_; + edm::InputTag pfEgammaCandidates_; + edm::InputTag barrelEcalHits_; + edm::InputTag endcapEcalHits_; + + edm::ESHandle theCaloTopo_; + + std::string vertexProducer_; + float sample_; + + DQMStore* dbe_; + + MonitorElement* h1_scEta_; + MonitorElement* h1_deltaEtaSC_; + MonitorElement* h1_pho_E_; + MonitorElement* h1_pho_Et_; + MonitorElement* h1_pho_Eta_; + MonitorElement* h1_pho_Phi_; + MonitorElement* h1_pho_R9Barrel_; + MonitorElement* h1_pho_R9Endcap_; + MonitorElement* h1_pho_sigmaIetaIetaBarrel_; + MonitorElement* h1_pho_sigmaIetaIetaEndcap_; + MonitorElement* h1_pho_hOverEBarrel_; + MonitorElement* h1_pho_hOverEEndcap_; + MonitorElement* h1_pho_ecalIsoBarrel_; + MonitorElement* h1_pho_ecalIsoEndcap_; + MonitorElement* h1_pho_hcalIsoBarrel_; + MonitorElement* h1_pho_hcalIsoEndcap_; + MonitorElement* h1_pho_trkIsoBarrel_; + MonitorElement* h1_pho_trkIsoEndcap_; + + MonitorElement* h1_recEoverTrueEBarrel_; + MonitorElement* h1_recEoverTrueEEndcap_; + MonitorElement* h1_deltaEta_; + MonitorElement* h1_deltaPhi_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(SimplePhotonAnalyzer); //======================================================================== SimplePhotonAnalyzer::SimplePhotonAnalyzer(const edm::ParameterSet& ps) diff --git a/RecoEgamma/Examples/plugins/SimplePhotonAnalyzer.h b/RecoEgamma/Examples/plugins/SimplePhotonAnalyzer.h deleted file mode 100644 index b3f3b70274106..0000000000000 --- a/RecoEgamma/Examples/plugins/SimplePhotonAnalyzer.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef RecoEcal_Examples_SimplePhotonAnalyzer_h -#define RecoEcal_Examples_SimplePhotonAnalyzer_h -/**\class SimplePhotonAnalyzer - ** - ** Description: Get Photon collection from the event and make very basic histos - ** \author Nancy Marinelli, U. of Notre Dame, US - ** - **/ -// -// - -// system include files -#include - -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/CaloTopology/interface/CaloTopology.h" - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "DQMServices/Core/interface/DQMStore.h" -#include "FWCore/ServiceRegistry/interface/Service.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include -#include "TH1.h" -#include "TProfile.h" -class TFile; - -class SimplePhotonAnalyzer : public edm::one::EDAnalyzer<> { -public: - typedef dqm::legacy::DQMStore DQMStore; - typedef dqm::legacy::MonitorElement MonitorElement; - - explicit SimplePhotonAnalyzer(const edm::ParameterSet&); - ~SimplePhotonAnalyzer() override; - - void analyze(const edm::Event&, const edm::EventSetup&) override; - void beginJob() override; - void endJob() override; - -private: - float etaTransformation(float a, float b); - - std::string mcProducer_; - std::string mcCollection_; - std::string photonCollectionProducer_; - std::string photonCollection_; - std::string valueMapPFCandPhoton_; - edm::InputTag pfEgammaCandidates_; - edm::InputTag barrelEcalHits_; - edm::InputTag endcapEcalHits_; - - edm::ESHandle theCaloTopo_; - - std::string vertexProducer_; - float sample_; - - DQMStore* dbe_; - - MonitorElement* h1_scEta_; - MonitorElement* h1_deltaEtaSC_; - MonitorElement* h1_pho_E_; - MonitorElement* h1_pho_Et_; - MonitorElement* h1_pho_Eta_; - MonitorElement* h1_pho_Phi_; - MonitorElement* h1_pho_R9Barrel_; - MonitorElement* h1_pho_R9Endcap_; - MonitorElement* h1_pho_sigmaIetaIetaBarrel_; - MonitorElement* h1_pho_sigmaIetaIetaEndcap_; - MonitorElement* h1_pho_hOverEBarrel_; - MonitorElement* h1_pho_hOverEEndcap_; - MonitorElement* h1_pho_ecalIsoBarrel_; - MonitorElement* h1_pho_ecalIsoEndcap_; - MonitorElement* h1_pho_hcalIsoBarrel_; - MonitorElement* h1_pho_hcalIsoEndcap_; - MonitorElement* h1_pho_trkIsoBarrel_; - MonitorElement* h1_pho_trkIsoEndcap_; - - MonitorElement* h1_recEoverTrueEBarrel_; - MonitorElement* h1_recEoverTrueEEndcap_; - MonitorElement* h1_deltaEta_; - MonitorElement* h1_deltaPhi_; -}; -#endif diff --git a/RecoEgamma/Examples/plugins/SimplePi0DiscAnalyzer.cc b/RecoEgamma/Examples/plugins/SimplePi0DiscAnalyzer.cc index 8b19cbf6e39a0..522a0cd132064 100644 --- a/RecoEgamma/Examples/plugins/SimplePi0DiscAnalyzer.cc +++ b/RecoEgamma/Examples/plugins/SimplePi0DiscAnalyzer.cc @@ -11,30 +11,27 @@ */ // -// Original Author: Aristotelis Kyriakis +// Original Author: Aristotelis Kyriakis NCSR "Demokritos" Athens +// D Maletic, "Vinca" Belgrade // Created: May 26 13:22:06 CEST 2009 // // -// user include files -#include "RecoEgamma/Examples/plugins/SimplePi0DiscAnalyzer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" +#include "DataFormats/EgammaCandidates/interface/Photon.h" +#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" +#include "DataFormats/EgammaCandidates/interface/PhotonPi0DiscriminatorAssociation.h" #include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" -#include "DataFormats/EgammaReco/interface/BasicClusterFwd.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include "DataFormats/EgammaReco/interface/ElectronSeed.h" -#include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h" -#include "DataFormats/JetReco/interface/CaloJetCollection.h" -#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "CLHEP/Units/PhysicalConstants.h" -#include + #include "TMath.h" #include "TFile.h" #include "TH1F.h" @@ -42,8 +39,47 @@ #include "TH2F.h" #include "TProfile.h" #include "TTree.h" + #include +class SimplePi0DiscAnalyzer : public edm::one::EDAnalyzer<> { +public: + explicit SimplePi0DiscAnalyzer(const edm::ParameterSet& conf); + + ~SimplePi0DiscAnalyzer() override; + + void beginJob() override; + void endJob() override; + void analyze(const edm::Event& e, const edm::EventSetup& c) override; + +private: + // ----------member data --------------------------- + + std::string photonCollectionProducer_; + std::string photonCollection_; + + std::string outputFile_; + TFile* rootFile_; + + TH1F* hConv_ntracks_; + + TH1F* hAll_nnout_Assoc_; + TH1F* hAll_nnout_NoConv_Assoc_; + TH1F* hBarrel_nnout_Assoc_; + TH1F* hBarrel_nnout_NoConv_Assoc_; + TH1F* hEndcNoPresh_nnout_Assoc_; + TH1F* hEndcNoPresh_nnout_NoConv_Assoc_; + TH1F* hEndcWithPresh_nnout_Assoc_; + TH1F* hEndcWithPresh_nnout_NoConv_Assoc_; + TH1F* hAll_nnout_NoConv_Assoc_R9_; + TH1F* hBarrel_nnout_NoConv_Assoc_R9_; + TH1F* hEndcNoPresh_nnout_NoConv_Assoc_R9_; + TH1F* hEndcWithPresh_nnout_NoConv_Assoc_R9_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(SimplePi0DiscAnalyzer); + using namespace reco; SimplePi0DiscAnalyzer::SimplePi0DiscAnalyzer(const edm::ParameterSet& conf) { @@ -147,7 +183,7 @@ void SimplePi0DiscAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSe std::cout << "Photon Id = " << iPho - photons.begin() << " with Et = " << Photon_et << " Eta = " << Photon_eta << " Phi = " << Photon_phi << " R9 = " << Photon_r9 << " and conv_id = " << isPhotConv << std::endl; - SuperClusterRef it_super = localPho.superCluster(); // get the SC related to the Photon candidate + auto it_super = localPho.superCluster(); // get the SC related to the Photon candidate // hConv_ntracks_->Fill(Ntrk_conv); @@ -198,5 +234,3 @@ void SimplePi0DiscAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSe // PhoInd++; } // End Loop over Photons } -//define this as a plug-in -DEFINE_FWK_MODULE(SimplePi0DiscAnalyzer); diff --git a/RecoEgamma/Examples/plugins/SimplePi0DiscAnalyzer.h b/RecoEgamma/Examples/plugins/SimplePi0DiscAnalyzer.h deleted file mode 100644 index 3a4cbb6f50048..0000000000000 --- a/RecoEgamma/Examples/plugins/SimplePi0DiscAnalyzer.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef SimplePi0DiscAnalyzer_h -#define SimplePi0DiscAnalyzer_h - -// -// Package: RecoEgamma/Examples -// Class: SimplePi0DiscAnalyzer -// - -// -// Original Author: A. Kyriakis NCSR "Demokritos" Athens -// D Maletic, "Vinca" Belgrade -// Created: Mar 27 13:22:06 CEST 2009 -// -// - -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" - -#include "DataFormats/EgammaCandidates/interface/Conversion.h" -#include "DataFormats/EgammaCandidates/interface/ConversionFwd.h" -#include "DataFormats/CaloRecHit/interface/CaloCluster.h" - -#include "DataFormats/EgammaCandidates/interface/PhotonPi0DiscriminatorAssociation.h" - -class MagneticField; -class TFile; -class TH1F; -class TH2F; -class TH1I; -class TProfile; -class TTree; - -class SimplePi0DiscAnalyzer : public edm::one::EDAnalyzer<> { -public: - explicit SimplePi0DiscAnalyzer(const edm::ParameterSet& conf); - - ~SimplePi0DiscAnalyzer() override; - - void beginJob() override; - void endJob() override; - void analyze(const edm::Event& e, const edm::EventSetup& c) override; - -private: - // ----------member data --------------------------- - - std::string photonCollectionProducer_; - std::string photonCollection_; - - std::string outputFile_; - TFile* rootFile_; - - TH1F* hConv_ntracks_; - - TH1F* hAll_nnout_Assoc_; - TH1F* hAll_nnout_NoConv_Assoc_; - TH1F* hBarrel_nnout_Assoc_; - TH1F* hBarrel_nnout_NoConv_Assoc_; - TH1F* hEndcNoPresh_nnout_Assoc_; - TH1F* hEndcNoPresh_nnout_NoConv_Assoc_; - TH1F* hEndcWithPresh_nnout_Assoc_; - TH1F* hEndcWithPresh_nnout_NoConv_Assoc_; - TH1F* hAll_nnout_NoConv_Assoc_R9_; - TH1F* hBarrel_nnout_NoConv_Assoc_R9_; - TH1F* hEndcNoPresh_nnout_NoConv_Assoc_R9_; - TH1F* hEndcWithPresh_nnout_NoConv_Assoc_R9_; -}; - -#endif diff --git a/RecoEgamma/Examples/plugins/plugins.cc b/RecoEgamma/Examples/plugins/plugins.cc new file mode 100644 index 0000000000000..aaf0da623d47a --- /dev/null +++ b/RecoEgamma/Examples/plugins/plugins.cc @@ -0,0 +1,7 @@ +#include "CommonTools/UtilAlgos/interface/Merger.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +typedef Merger EgammaSuperClusterMerger; +DEFINE_FWK_MODULE(EgammaSuperClusterMerger); diff --git a/RecoEgamma/PhotonIdentification/BuildFile.xml b/RecoEgamma/PhotonIdentification/BuildFile.xml index e599adac18db9..03f6ffe2f3600 100644 --- a/RecoEgamma/PhotonIdentification/BuildFile.xml +++ b/RecoEgamma/PhotonIdentification/BuildFile.xml @@ -1,26 +1,24 @@ - - - - - - - - + + + + + + - - - - + + + + diff --git a/RecoEgamma/PhotonIdentification/interface/PhotonIsolationCalculator.h b/RecoEgamma/PhotonIdentification/interface/PhotonIsolationCalculator.h index 903c0888fbeb4..33867a543f477 100644 --- a/RecoEgamma/PhotonIdentification/interface/PhotonIsolationCalculator.h +++ b/RecoEgamma/PhotonIdentification/interface/PhotonIsolationCalculator.h @@ -8,9 +8,8 @@ #include "FWCore/Utilities/interface/Visibility.h" #include "CondFormats/EcalObjects/interface/EcalChannelStatus.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" -#include +#include #include "FWCore/Framework/interface/ConsumesCollector.h" diff --git a/RecoEgamma/PhotonIdentification/interface/PhotonMIPHaloTagger.h b/RecoEgamma/PhotonIdentification/interface/PhotonMIPHaloTagger.h index 2004eac37e0d2..15b42a3bd922b 100644 --- a/RecoEgamma/PhotonIdentification/interface/PhotonMIPHaloTagger.h +++ b/RecoEgamma/PhotonIdentification/interface/PhotonMIPHaloTagger.h @@ -4,15 +4,11 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" #include "DataFormats/EgammaCandidates/interface/Photon.h" - -#include "CondFormats/EcalObjects/interface/EcalChannelStatus.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" - -#include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h" #include "FWCore/Framework/interface/ConsumesCollector.h" -#include +#include class PhotonMIPHaloTagger { public: diff --git a/RecoEgamma/PhotonIdentification/plugins/PhotonMVAEstimator.cc b/RecoEgamma/PhotonIdentification/plugins/PhotonMVAEstimator.cc index 1141ad5d8132f..c9f2e8631d67e 100644 --- a/RecoEgamma/PhotonIdentification/plugins/PhotonMVAEstimator.cc +++ b/RecoEgamma/PhotonIdentification/plugins/PhotonMVAEstimator.cc @@ -6,7 +6,7 @@ #include "RecoEgamma/EgammaTools/interface/AnyMVAEstimatorRun2Base.h" #include "DataFormats/EgammaCandidates/interface/Photon.h" #include "CommonTools/Egamma/interface/EffectiveAreas.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "RecoEgamma/EgammaTools/interface/MVAVariableHelper.h" #include "RecoEgamma/EgammaTools/interface/MVAVariableManager.h" #include "CommonTools/Utils/interface/StringCutObjectSelector.h" diff --git a/RecoEgamma/PhotonIdentification/src/PhotonIsolationCalculator.cc b/RecoEgamma/PhotonIdentification/src/PhotonIsolationCalculator.cc index 9af78ed456690..92de9976ab632 100644 --- a/RecoEgamma/PhotonIdentification/src/PhotonIsolationCalculator.cc +++ b/RecoEgamma/PhotonIdentification/src/PhotonIsolationCalculator.cc @@ -5,14 +5,11 @@ */ #include "RecoEgamma/PhotonIdentification/interface/PhotonIsolationCalculator.h" -#include "CommonTools/Utils/interface/StringToEnumValue.h" #include "DataFormats/EgammaReco/interface/BasicCluster.h" #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" #include "DataFormats/TrackReco/interface/Track.h" #include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/EcalDetId/interface/EEDetId.h" #include "DataFormats/EcalDetId/interface/EBDetId.h" @@ -27,17 +24,11 @@ #include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaEcalIsolation.h" #include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h" -#include "Geometry/CaloTopology/interface/CaloTopology.h" -#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" #include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/CaloTopology/interface/EcalBarrelTopology.h" -#include "Geometry/CaloTopology/interface/EcalEndcapTopology.h" #include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h" #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" -#include #include void PhotonIsolationCalculator::setup(const edm::ParameterSet& conf, diff --git a/RecoEgamma/PhotonIdentification/src/PhotonMIPHaloTagger.cc b/RecoEgamma/PhotonIdentification/src/PhotonMIPHaloTagger.cc index 2c909b166162e..4b1ed83f0015c 100644 --- a/RecoEgamma/PhotonIdentification/src/PhotonMIPHaloTagger.cc +++ b/RecoEgamma/PhotonIdentification/src/PhotonMIPHaloTagger.cc @@ -6,42 +6,12 @@ */ #include "RecoEgamma/PhotonIdentification/interface/PhotonMIPHaloTagger.h" -#include "CommonTools/Utils/interface/StringToEnumValue.h" -#include "DataFormats/EgammaReco/interface/BasicCluster.h" -#include "DataFormats/EgammaReco/interface/BasicClusterFwd.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" #include "DataFormats/DetId/interface/DetId.h" -#include "DataFormats/EcalDetId/interface/EEDetId.h" #include "DataFormats/EcalDetId/interface/EBDetId.h" #include "DataFormats/EcalRecHit/interface/EcalRecHit.h" -#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" -#include "Geometry/CaloTopology/interface/EcalBarrelTopology.h" -#include "Geometry/CaloTopology/interface/EcalEndcapTopology.h" - -#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" - -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaHcalIsolation.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/PhotonTkIsolation.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaEcalIsolation.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h" - -#include "Geometry/CaloTopology/interface/CaloTopology.h" -#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/CaloTopology/interface/EcalBarrelTopology.h" -#include "Geometry/CaloTopology/interface/EcalEndcapTopology.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" - -#include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" - -#include +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h" + #include void PhotonMIPHaloTagger::setup(const edm::ParameterSet& conf, edm::ConsumesCollector&& iC) { @@ -71,17 +41,10 @@ void PhotonMIPHaloTagger::MIPcalculate(const reco::Photon* pho, ismipHalo_ = false; // halo? // Get EcalRecHits - bool validEcalRecHits = true; - edm::Handle barrelHitHandle; e.getByToken(EBecalCollection_, barrelHitHandle); - if (!barrelHitHandle.isValid()) { - edm::LogError("MIPcalculate") << "Error! Can't get the barrel hits product "; - //< + + @@ -12,6 +14,7 @@ + diff --git a/RecoHGCal/TICL/plugins/PFTICLProducer.cc b/RecoHGCal/TICL/plugins/PFTICLProducer.cc index 84ff776b73e17..78c184f88e312 100644 --- a/RecoHGCal/TICL/plugins/PFTICLProducer.cc +++ b/RecoHGCal/TICL/plugins/PFTICLProducer.cc @@ -1,7 +1,7 @@ // This producer converts a list of TICLCandidates to a list of PFCandidates. #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -13,14 +13,16 @@ #include "DataFormats/HGCalReco/interface/TICLCandidate.h" -class PFTICLProducer : public edm::global::EDProducer<> { +#include "RecoParticleFlow/PFProducer/interface/PFMuonAlgo.h" + +class PFTICLProducer : public edm::stream::EDProducer<> { public: PFTICLProducer(const edm::ParameterSet&); ~PFTICLProducer() override {} static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + void produce(edm::Event&, const edm::EventSetup&) override; private: // parameters @@ -30,6 +32,9 @@ class PFTICLProducer : public edm::global::EDProducer<> { // inputs const edm::EDGetTokenT> ticl_candidates_; const edm::EDGetTokenT> srcTrackTime_, srcTrackTimeError_, srcTrackTimeQuality_; + const edm::EDGetTokenT muons_; + // For PFMuonAlgo + std::unique_ptr pfmu_; }; DEFINE_FWK_MODULE(PFTICLProducer); @@ -40,7 +45,10 @@ PFTICLProducer::PFTICLProducer(const edm::ParameterSet& conf) ticl_candidates_(consumes>(conf.getParameter("ticlCandidateSrc"))), srcTrackTime_(consumes>(conf.getParameter("trackTimeValueMap"))), srcTrackTimeError_(consumes>(conf.getParameter("trackTimeErrorMap"))), - srcTrackTimeQuality_(consumes>(conf.getParameter("trackTimeQualityMap"))) { + srcTrackTimeQuality_(consumes>(conf.getParameter("trackTimeQualityMap"))), + muons_(consumes(conf.getParameter("muonSrc"))), + pfmu_(std::make_unique(conf.getParameterSet("pfMuonAlgoParameters"), + false)) { // postMuonCleaning = false produces(); } @@ -52,10 +60,16 @@ void PFTICLProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptio desc.add("trackTimeQualityMap", edm::InputTag("mtdTrackQualityMVA:mtdQualMVA")); desc.add("timingQualityThreshold", 0.5); desc.add("useTimingAverage", false); + // For PFMuonAlgo + desc.add("muonSrc", edm::InputTag("muons1stStep")); + edm::ParameterSetDescription psd_PFMuonAlgo; + PFMuonAlgo::fillPSetDescription(psd_PFMuonAlgo); + desc.add("pfMuonAlgoParameters", psd_PFMuonAlgo); + // descriptions.add("pfTICLProducer", desc); } -void PFTICLProducer::produce(edm::StreamID, edm::Event& evt, const edm::EventSetup& es) const { +void PFTICLProducer::produce(edm::Event& evt, const edm::EventSetup& es) { //get TICLCandidates edm::Handle> ticl_cand_h; evt.getByToken(ticl_candidates_, ticl_cand_h); @@ -64,6 +78,8 @@ void PFTICLProducer::produce(edm::StreamID, edm::Event& evt, const edm::EventSet evt.getByToken(srcTrackTime_, trackTimeH); evt.getByToken(srcTrackTimeError_, trackTimeErrH); evt.getByToken(srcTrackTimeQuality_, trackTimeQualH); + const auto muonH = evt.getHandle(muons_); + const auto muons = *muonH; auto candidates = std::make_unique(); @@ -111,8 +127,16 @@ void PFTICLProducer::produce(edm::StreamID, edm::Event& evt, const edm::EventSet if (candidate.charge()) { // otherwise PFCandidate throws // Construct edm::Ref from edm::Ptr. As of now, assumes type to be reco::Track. To be extended (either via // dynamic type checking or configuration) if additional track types are needed. - reco::TrackRef ref(ticl_cand.trackPtr().id(), int(ticl_cand.trackPtr().key()), &evt.productGetter()); - candidate.setTrackRef(ref); + reco::TrackRef trackref(ticl_cand.trackPtr().id(), int(ticl_cand.trackPtr().key()), &evt.productGetter()); + candidate.setTrackRef(trackref); + // Utilize PFMuonAlgo + const int muId = PFMuonAlgo::muAssocToTrack(trackref, muons); + if (muId != -1) { + const reco::MuonRef muonref = reco::MuonRef(muonH, muId); + const bool allowLoose = (part_type == reco::PFCandidate::mu); + // Redefine pfmuon candidate kinematics and add muonref + pfmu_->reconstructMuon(candidate, muonref, allowLoose); + } } // HGCAL timing as default values diff --git a/RecoHGCal/TICL/plugins/SeedingRegionAlgoBase.h b/RecoHGCal/TICL/plugins/SeedingRegionAlgoBase.h index ed30439660e78..5721e2df4227b 100644 --- a/RecoHGCal/TICL/plugins/SeedingRegionAlgoBase.h +++ b/RecoHGCal/TICL/plugins/SeedingRegionAlgoBase.h @@ -9,6 +9,7 @@ #include #include "DataFormats/HGCalReco/interface/Common.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "DataFormats/HGCalReco/interface/TICLSeedingRegion.h" #include "FWCore/Framework/interface/ConsumesCollector.h" @@ -30,6 +31,8 @@ namespace ticl { const edm::EventSetup& es, std::vector& result) = 0; + static void fillPSetDescription(edm::ParameterSetDescription& desc) { desc.add("algo_verbosity", 0); } + enum VerbosityLevel { None = 0, Basic, Advanced, Expert, Guru }; protected: diff --git a/RecoHGCal/TICL/plugins/SeedingRegionAlgoFactory.cc b/RecoHGCal/TICL/plugins/SeedingRegionAlgoFactory.cc new file mode 100644 index 0000000000000..5da8aa8c9e83a --- /dev/null +++ b/RecoHGCal/TICL/plugins/SeedingRegionAlgoFactory.cc @@ -0,0 +1,12 @@ +#include "FWCore/ParameterSet/interface/ValidatedPluginFactoryMacros.h" +#include "FWCore/ParameterSet/interface/ValidatedPluginMacros.h" +#include "SeedingRegionAlgoFactory.h" +#include "SeedingRegionByTracks.h" +#include "SeedingRegionGlobal.h" +#include "SeedingRegionByL1.h" + +EDM_REGISTER_VALIDATED_PLUGINFACTORY(SeedingRegionAlgoFactory, "SeedingRegionAlgoFactory"); + +DEFINE_EDM_VALIDATED_PLUGIN(SeedingRegionAlgoFactory, ticl::SeedingRegionByTracks, "SeedingRegionByTracks"); +DEFINE_EDM_VALIDATED_PLUGIN(SeedingRegionAlgoFactory, ticl::SeedingRegionGlobal, "SeedingRegionGlobal"); +DEFINE_EDM_VALIDATED_PLUGIN(SeedingRegionAlgoFactory, ticl::SeedingRegionByL1, "SeedingRegionByL1"); diff --git a/RecoHGCal/TICL/plugins/SeedingRegionAlgoFactory.h b/RecoHGCal/TICL/plugins/SeedingRegionAlgoFactory.h new file mode 100644 index 0000000000000..8cb627809a4d7 --- /dev/null +++ b/RecoHGCal/TICL/plugins/SeedingRegionAlgoFactory.h @@ -0,0 +1,11 @@ +#ifndef RecoHGCAL_TICL_SeedingRegionAlgoFactory_h +#define RecoHGCAL_TICL_SeedingRegionAlgoFactory_h + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/PluginManager/interface/PluginFactory.h" +#include "SeedingRegionAlgoBase.h" + +using SeedingRegionAlgoFactory = + edmplugin::PluginFactory; + +#endif diff --git a/RecoHGCal/TICL/plugins/SeedingRegionByL1.cc b/RecoHGCal/TICL/plugins/SeedingRegionByL1.cc new file mode 100644 index 0000000000000..6a2c62534960d --- /dev/null +++ b/RecoHGCal/TICL/plugins/SeedingRegionByL1.cc @@ -0,0 +1,68 @@ +/* + Author: Swagata Mukherjee + + Date: Feb 2021 + + TICL is currently seeded by tracks, or just globally. + Here, adding option to seed TICL by L1 e/gamma objects (L1 TkEm). + This is expected to be useful for CPU timing at the HLT. +*/ + +#include "SeedingRegionByL1.h" + +#include +#include +#include + +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +ticl::SeedingRegionByL1::SeedingRegionByL1(const edm::ParameterSet &conf, edm::ConsumesCollector &sumes) + : SeedingRegionAlgoBase(conf, sumes), + l1TkEmsToken_(sumes.consumes>(conf.getParameter("l1TkEmColl"))), + algoVerbosity_(conf.getParameter("algo_verbosity")), + minPt_(conf.getParameter("minPt")), + minAbsEta_(conf.getParameter("minAbsEta")), + maxAbsEta_(conf.getParameter("maxAbsEta")), + endcapScalings_(conf.getParameter>("endcapScalings")), + quality_(conf.getParameter("quality")) {} + +void ticl::SeedingRegionByL1::makeRegions(const edm::Event &ev, + const edm::EventSetup &es, + std::vector &result) { + auto l1TrkEms = ev.getHandle(l1TkEmsToken_); + edm::ProductID l1tkemsId = l1TrkEms.id(); + + for (size_t indx = 0; indx < (*l1TrkEms).size(); indx++) { + const auto &l1TrkEm = (*l1TrkEms)[indx]; + double offlinePt = this->tkEmOfflineEt(l1TrkEm.pt()); + if ((offlinePt < minPt_) || (std::abs(l1TrkEm.eta()) < minAbsEta_) || (std::abs(l1TrkEm.eta()) > maxAbsEta_) || + (l1TrkEm.EGRef()->hwQual() != quality_)) { + continue; + } + + int iSide = int(l1TrkEm.eta() > 0); + result.emplace_back(GlobalPoint(l1TrkEm.p4().X(), l1TrkEm.p4().Y(), l1TrkEm.p4().Z()), + GlobalVector(l1TrkEm.px(), l1TrkEm.py(), l1TrkEm.pz()), + iSide, + indx, + l1tkemsId); + } + + std::sort(result.begin(), result.end(), [](const TICLSeedingRegion &a, const TICLSeedingRegion &b) { + return a.directionAtOrigin.perp2() > b.directionAtOrigin.perp2(); + }); +} + +double ticl::SeedingRegionByL1::tkEmOfflineEt(double et) const { + return (endcapScalings_.at(0) + et * endcapScalings_.at(1) + et * et * endcapScalings_.at(2)); +} + +void ticl::SeedingRegionByL1::fillPSetDescription(edm::ParameterSetDescription &desc) { + desc.add("l1TkEmColl", edm::InputTag("L1TkPhotonsHGC", "EG")); + desc.add("minPt", 10); + desc.add("minAbsEta", 1.479); + desc.add("maxAbsEta", 4.0); + desc.add>("endcapScalings", {3.17445, 1.13219, 0.0}); + desc.add("quality", 5); + SeedingRegionAlgoBase::fillPSetDescription(desc); +} diff --git a/RecoHGCal/TICL/plugins/SeedingRegionByL1.h b/RecoHGCal/TICL/plugins/SeedingRegionByL1.h new file mode 100644 index 0000000000000..6daa705cbad8f --- /dev/null +++ b/RecoHGCal/TICL/plugins/SeedingRegionByL1.h @@ -0,0 +1,42 @@ +// Author: Swagata Mukherjee + +#ifndef RecoHGCal_TICL_SeedingRegionByL1_h +#define RecoHGCal_TICL_SeedingRegionByL1_h +#include +#include + +#include "DataFormats/L1TCorrelator/interface/TkEm.h" +#include "DataFormats/L1TCorrelator/interface/TkEmFwd.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/ESGetToken.h" +#include "RecoHGCal/TICL/plugins/SeedingRegionAlgoBase.h" + +namespace ticl { + class SeedingRegionByL1 final : public SeedingRegionAlgoBase { + public: + SeedingRegionByL1(const edm::ParameterSet& conf, edm::ConsumesCollector& sumes); + + void initialize(const edm::EventSetup& es) override{}; + void makeRegions(const edm::Event& ev, const edm::EventSetup& es, std::vector& result) override; + static void fillPSetDescription(edm::ParameterSetDescription& desc); + + private: + edm::EDGetTokenT> l1TkEmsToken_; + int algoVerbosity_ = 0; + double minPt_; // minimum pT of L1 TkEm objects + double minAbsEta_; // minimum |eta| of L1 TkEm objects + double maxAbsEta_; // maximum |eta| of L1 TkEm objects + std::vector endcapScalings_; // pT scaling factors for endcap + int quality_; // hwQual + + double tkEmOfflineEt(double et) const; + }; +} // namespace ticl +#endif diff --git a/RecoHGCal/TICL/plugins/SeedingRegionByTracks.cc b/RecoHGCal/TICL/plugins/SeedingRegionByTracks.cc index 16d69c391f38a..c7b07b757775b 100644 --- a/RecoHGCal/TICL/plugins/SeedingRegionByTracks.cc +++ b/RecoHGCal/TICL/plugins/SeedingRegionByTracks.cc @@ -65,6 +65,15 @@ void SeedingRegionByTracks::makeRegions(const edm::Event &ev, }); } +void SeedingRegionByTracks::fillPSetDescription(edm::ParameterSetDescription &desc) { + desc.add("tracks", edm::InputTag("generalTracks")); + desc.add("cutTk", + "1.48 < abs(eta) < 3.0 && pt > 1. && quality(\"highPurity\") && " + "hitPattern().numberOfLostHits(\"MISSING_OUTER_HITS\") < 5"); + desc.add("propagator", "PropagatorWithMaterial"); + SeedingRegionAlgoBase::fillPSetDescription(desc); +} + void SeedingRegionByTracks::buildFirstLayers() { float zVal = hgcons_->waferZ(1, true); std::pair rMinMax = hgcons_->rangeR(zVal, true); diff --git a/RecoHGCal/TICL/plugins/SeedingRegionByTracks.h b/RecoHGCal/TICL/plugins/SeedingRegionByTracks.h index d8d9f61214c02..fc8f0f539ef22 100644 --- a/RecoHGCal/TICL/plugins/SeedingRegionByTracks.h +++ b/RecoHGCal/TICL/plugins/SeedingRegionByTracks.h @@ -37,6 +37,8 @@ namespace ticl { void makeRegions(const edm::Event& ev, const edm::EventSetup& es, std::vector& result) override; + static void fillPSetDescription(edm::ParameterSetDescription& desc); + private: void buildFirstLayers(); diff --git a/RecoHGCal/TICL/plugins/SeedingRegionGlobal.cc b/RecoHGCal/TICL/plugins/SeedingRegionGlobal.cc index 2e7f0c2a10824..96b09dbf02c27 100644 --- a/RecoHGCal/TICL/plugins/SeedingRegionGlobal.cc +++ b/RecoHGCal/TICL/plugins/SeedingRegionGlobal.cc @@ -26,3 +26,7 @@ void SeedingRegionGlobal::makeRegions(const edm::Event &ev, result.emplace_back(GlobalPoint(0., 0., 0.), GlobalVector(0., 0., 0.), i, -1, edm::ProductID()); } } + +void SeedingRegionGlobal::fillPSetDescription(edm::ParameterSetDescription &desc) { + SeedingRegionAlgoBase::fillPSetDescription(desc); +} diff --git a/RecoHGCal/TICL/plugins/SeedingRegionGlobal.h b/RecoHGCal/TICL/plugins/SeedingRegionGlobal.h index c5031c38f5dda..09d517ffe6d26 100644 --- a/RecoHGCal/TICL/plugins/SeedingRegionGlobal.h +++ b/RecoHGCal/TICL/plugins/SeedingRegionGlobal.h @@ -25,6 +25,8 @@ namespace ticl { void initialize(const edm::EventSetup& es) override{}; void makeRegions(const edm::Event& ev, const edm::EventSetup& es, std::vector& result) override; + + static void fillPSetDescription(edm::ParameterSetDescription& desc); }; } // namespace ticl #endif diff --git a/RecoHGCal/TICL/plugins/TICLSeedingRegionProducer.cc b/RecoHGCal/TICL/plugins/TICLSeedingRegionProducer.cc index b886b69aef8e0..ca4a80c3784e7 100644 --- a/RecoHGCal/TICL/plugins/TICLSeedingRegionProducer.cc +++ b/RecoHGCal/TICL/plugins/TICLSeedingRegionProducer.cc @@ -12,10 +12,13 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/ParameterSet/interface/PluginDescription.h" #include "FWCore/Framework/interface/ConsumesCollector.h" #include "RecoHGCal/TICL/plugins/SeedingRegionAlgoBase.h" +#include "SeedingRegionByL1.h" #include "SeedingRegionByTracks.h" #include "SeedingRegionGlobal.h" +#include "SeedingRegionAlgoFactory.h" using namespace ticl; @@ -31,37 +34,24 @@ class TICLSeedingRegionProducer : public edm::stream::EDProducer<> { private: std::unique_ptr myAlgo_; - int algoId_; - std::string seedingId_; }; + DEFINE_FWK_MODULE(TICLSeedingRegionProducer); -TICLSeedingRegionProducer::TICLSeedingRegionProducer(const edm::ParameterSet& ps) - : algoId_(ps.getParameter("algoId")) { +TICLSeedingRegionProducer::TICLSeedingRegionProducer(const edm::ParameterSet& ps) { auto sumes = consumesCollector(); - - switch (algoId_) { - case 1: - myAlgo_ = std::make_unique(ps, sumes); - break; - case 2: - myAlgo_ = std::make_unique(ps, sumes); - break; - default: - break; - } + auto seedingPSet = ps.getParameter("seedingPSet"); + auto algoType = seedingPSet.getParameter("type"); + myAlgo_ = SeedingRegionAlgoFactory::get()->create(algoType, seedingPSet, sumes); produces>(); } void TICLSeedingRegionProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; - desc.add("algo_verbosity", 0); - desc.add("tracks", edm::InputTag("generalTracks")); - desc.add("cutTk", - "1.48 < abs(eta) < 3.0 && pt > 1. && quality(\"highPurity\") && " - "hitPattern().numberOfLostHits(\"MISSING_OUTER_HITS\") < 5"); - desc.add("propagator", "PropagatorWithMaterial"); - desc.add("algoId", 1); + + edm::ParameterSetDescription seedingDesc; + seedingDesc.addNode(edm::PluginDescription("type", "SeedingRegionGlobal", true)); + desc.add("seedingPSet", seedingDesc); descriptions.add("ticlSeedingRegionProducer", desc); } diff --git a/RecoHGCal/TICL/plugins/TrackstersMergeProducer.cc b/RecoHGCal/TICL/plugins/TrackstersMergeProducer.cc index fa49f59d9f887..f20d616410385 100644 --- a/RecoHGCal/TICL/plugins/TrackstersMergeProducer.cc +++ b/RecoHGCal/TICL/plugins/TrackstersMergeProducer.cc @@ -296,7 +296,8 @@ void TrackstersMergeProducer::produce(edm::Event &evt, const edm::EventSetup &es } // Neutral Hadrons - constexpr float mpion2 = 0.13957f * 0.13957f; + constexpr double mpion = 0.13957; + constexpr float mpion2 = mpion * mpion; for (unsigned i = 0; i < trackstersHAD.size(); ++i) { auto mergedIdx = indexInMergedCollHAD[i]; usedTrackstersMerged[mergedIdx] = true; @@ -509,10 +510,10 @@ void TrackstersMergeProducer::produce(edm::Event &evt, const edm::EventSetup &es tmpCandidate.setCharge(track.charge()); tmpCandidate.setTrackPtr(edm::Ptr(track_h, s.index)); tmpCandidate.setPdgId(211 * track.charge()); - float energy = std::sqrt(track.pt() * track.pt() + mpion2); + float energy = std::sqrt(track.p() * track.p() + mpion2); tmpCandidate.setRawEnergy(energy); - math::XYZTLorentzVector p4(track.momentum().x(), track.momentum().y(), track.momentum().z(), energy); - tmpCandidate.setP4(p4); + math::PtEtaPhiMLorentzVector p4Polar(track.pt(), track.eta(), track.phi(), mpion); + tmpCandidate.setP4(p4Polar); resultCandidates->push_back(tmpCandidate); usedSeeds[s.index] = true; } @@ -529,10 +530,10 @@ void TrackstersMergeProducer::produce(edm::Event &evt, const edm::EventSetup &es tmpCandidate.setCharge(track.charge()); tmpCandidate.setTrackPtr(edm::Ptr(track_h, i)); tmpCandidate.setPdgId(211 * track.charge()); - float energy = std::sqrt(track.pt() * track.pt() + mpion2); + float energy = std::sqrt(track.p() * track.p() + mpion2); tmpCandidate.setRawEnergy(energy); - math::XYZTLorentzVector p4(track.momentum().x(), track.momentum().y(), track.momentum().z(), energy); - tmpCandidate.setP4(p4); + math::PtEtaPhiMLorentzVector p4Polar(track.pt(), track.eta(), track.phi(), mpion); + tmpCandidate.setP4(p4Polar); resultCandidates->push_back(tmpCandidate); usedSeeds[i] = true; } diff --git a/RecoHGCal/TICL/python/TICLSeedingRegions_cff.py b/RecoHGCal/TICL/python/TICLSeedingRegions_cff.py index 4b76fd39d322c..e5d55aaec4883 100644 --- a/RecoHGCal/TICL/python/TICLSeedingRegions_cff.py +++ b/RecoHGCal/TICL/python/TICLSeedingRegions_cff.py @@ -5,13 +5,13 @@ # SEEDING REGION ticlSeedingGlobal = _ticlSeedingRegionProducer.clone( - algoId = 2 + seedingPSet = _ticlSeedingRegionProducer.seedingPSet.clone(type="SeedingRegionGlobal") ) ticlSeedingTrk = _ticlSeedingRegionProducer.clone( - algoId = 1 + seedingPSet = _ticlSeedingRegionProducer.seedingPSet.clone(type="SeedingRegionByTracks") ) ticlSeedingGlobalHFNose = _ticlSeedingRegionProducer.clone( - algoId = 2 + seedingPSet = _ticlSeedingRegionProducer.seedingPSet.clone(type="SeedingRegionGlobal") ) diff --git a/RecoHGCal/TICL/python/iterativeTICL_cff.py b/RecoHGCal/TICL/python/iterativeTICL_cff.py index 9af6dc68a9af6..a3e8851ab68d4 100644 --- a/RecoHGCal/TICL/python/iterativeTICL_cff.py +++ b/RecoHGCal/TICL/python/iterativeTICL_cff.py @@ -42,9 +42,3 @@ ticlHFNoseMIPStepTask, ticlHFNoseEMStepTask ) - -def injectTICLintoPF(process): - if getattr(process,'particleFlowTmp', None): - process.particleFlowTmp.src = ['particleFlowTmpBarrel', 'pfTICL'] - - return process diff --git a/RecoHGCal/TICL/test/BuildFile.xml b/RecoHGCal/TICL/test/BuildFile.xml new file mode 100644 index 0000000000000..d6d0f32aecf71 --- /dev/null +++ b/RecoHGCal/TICL/test/BuildFile.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/RecoHGCal/TICL/test/TiclDebugger.cc b/RecoHGCal/TICL/test/TiclDebugger.cc new file mode 100644 index 0000000000000..12c6d40b401e2 --- /dev/null +++ b/RecoHGCal/TICL/test/TiclDebugger.cc @@ -0,0 +1,232 @@ +// +// Original Author: Marco Rovere +// Created: Fri May 1 07:21:02 CEST 2020 +// +// +// +// system include files +#include +#include +#include +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/CaloRecHit/interface/CaloCluster.h" +#include "DataFormats/ForwardDetId/interface/HGCalDetId.h" +#include "DataFormats/HepMCCandidate/interface/GenParticle.h" +#include "DataFormats/HGCalReco/interface/Trackster.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/Math/interface/deltaR.h" + +#include "RecoLocalCalo/HGCalRecAlgos/interface/RecHitTools.h" +#include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h" +// +// class declaration +// + +class TiclDebugger : public edm::one::EDAnalyzer { +public: + explicit TiclDebugger(const edm::ParameterSet&); + ~TiclDebugger() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void beginJob() override; + void beginRun(const edm::Run&, const edm::EventSetup&) override; + void analyze(const edm::Event&, const edm::EventSetup&) override; + void endRun(edm::Run const& iEvent, edm::EventSetup const&) override{}; + void endJob() override; + + const edm::InputTag trackstersMerge_; + const edm::InputTag tracks_; + const edm::InputTag caloParticles_; + const edm::InputTag layerClusters_; + hgcal::RecHitTools rhtools_; + edm::EDGetTokenT> trackstersMergeToken_; + edm::EDGetTokenT> tracksToken_; + edm::EDGetTokenT> caloParticlesToken_; + edm::EDGetTokenT> layerClustersToken_; +}; + +TiclDebugger::TiclDebugger(const edm::ParameterSet& iConfig) + : trackstersMerge_(iConfig.getParameter("trackstersMerge")), + tracks_(iConfig.getParameter("tracks")), + caloParticles_(iConfig.getParameter("caloParticles")), + layerClusters_(iConfig.getParameter("layerClusters")) { + edm::ConsumesCollector&& iC = consumesCollector(); + trackstersMergeToken_ = iC.consumes>(trackstersMerge_); + tracksToken_ = iC.consumes>(tracks_); + caloParticlesToken_ = iC.consumes>(caloParticles_); + layerClustersToken_ = iC.consumes>(layerClusters_); +} + +TiclDebugger::~TiclDebugger() {} + +void TiclDebugger::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { + static const char* particle_kind[] = {"gam", "e", "mu", "pi0", "h", "h0", "?", "!"}; + using namespace edm; + using std::begin; + using std::end; + using std::iota; + using std::sort; + + edm::Handle> trackstersMergeH; + + iEvent.getByToken(trackstersMergeToken_, trackstersMergeH); + auto const& tracksters = *trackstersMergeH.product(); + std::vector sorted_tracksters_idx(tracksters.size()); + iota(begin(sorted_tracksters_idx), end(sorted_tracksters_idx), 0); + sort(begin(sorted_tracksters_idx), end(sorted_tracksters_idx), [&tracksters](int i, int j) { + return tracksters[i].raw_energy() > tracksters[j].raw_energy(); + }); + + edm::Handle> layerClustersH; + iEvent.getByToken(layerClustersToken_, layerClustersH); + auto const& layerClusters = *layerClustersH.product(); + + edm::Handle> tracksH; + iEvent.getByToken(tracksToken_, tracksH); + const auto& tracks = *tracksH.product(); + + edm::Handle> caloParticlesH; + iEvent.getByToken(caloParticlesToken_, caloParticlesH); + auto const& caloParticles = *caloParticlesH.product(); + std::vector> bestCPMatches; + + auto bestCaloParticleMatches = [&](const ticl::Trackster& t) -> void { + bestCPMatches.clear(); + auto idx = 0; + auto separation = 0.; + for (auto const& cp : caloParticles) { + separation = reco::deltaR2(t.barycenter(), cp.momentum()); + if (separation < 0.05) { + bestCPMatches.push_back(std::make_pair(idx, separation)); + } + ++idx; + } + }; + + std::stringstream prob_id_str; + + for (auto const& t : sorted_tracksters_idx) { + auto const& trackster = tracksters[t]; + auto const& probs = trackster.id_probabilities(); + // Sort probs in descending order + std::vector sorted_probs_idx(probs.size()); + iota(begin(sorted_probs_idx), end(sorted_probs_idx), 0); + sort(begin(sorted_probs_idx), end(sorted_probs_idx), [&probs](int i, int j) { return probs[i] > probs[j]; }); + // Sort edges in ascending order + std::vector sorted_edges_idx(trackster.edges().size()); + iota(begin(sorted_edges_idx), end(sorted_edges_idx), 0); + sort(begin(sorted_edges_idx), end(sorted_edges_idx), [&](int i, int j) { + int layers = rhtools_.lastLayer(); + auto const& ed_i = trackster.edges()[i]; + auto const& ed_j = trackster.edges()[j]; + auto const& cl_i_in = layerClusters[ed_i[0]].hitsAndFractions()[0].first; + auto const& cl_i_out = layerClusters[ed_i[1]].hitsAndFractions()[0].first; + auto const& cl_j_in = layerClusters[ed_j[0]].hitsAndFractions()[0].first; + auto const& cl_j_out = layerClusters[ed_j[1]].hitsAndFractions()[0].first; + auto const layer_i_in = rhtools_.getLayerWithOffset(cl_i_in) + layers * ((rhtools_.zside(cl_i_in) + 1) >> 1) - 1; + auto const layer_i_out = + rhtools_.getLayerWithOffset(cl_i_out) + layers * ((rhtools_.zside(cl_i_out) + 1) >> 1) - 1; + auto const layer_j_in = rhtools_.getLayerWithOffset(cl_j_in) + layers * ((rhtools_.zside(cl_j_in) + 1) >> 1) - 1; + auto const layer_j_out = + rhtools_.getLayerWithOffset(cl_j_out) + layers * ((rhtools_.zside(cl_j_out) + 1) >> 1) - 1; + if (layer_i_in != layer_j_in) + return layer_i_in < layer_j_in; + else + return layer_i_out < layer_j_out; + }); + + for (auto p_idx : sorted_probs_idx) { + prob_id_str << "(" << particle_kind[p_idx] << "):" << std::fixed << std::setprecision(4) << probs[p_idx] << " "; + } + LogVerbatim("TICLDebugger") << "\nTrksIdx: " << t << "\n bary: " << trackster.barycenter() + << " baryEta: " << trackster.barycenter().eta() + << " baryPhi: " << trackster.barycenter().phi() + << "\n raw_energy: " << trackster.raw_energy() + << " raw_em_energy: " << trackster.raw_em_energy() + << "\n raw_pt: " << trackster.raw_pt() << " raw_em_pt: " << trackster.raw_em_pt() + << "\n seedIdx: " << trackster.seedIndex() << "\n Probs: " << prob_id_str.str(); + prob_id_str.str(""); + prob_id_str.clear(); + LogVerbatim("TICLDebugger") << "\n time: " << trackster.time() << "+/-" << trackster.timeError() << std::endl + << " vertices: " << trackster.vertices().size() << " average usage: " + << std::accumulate(std::begin(trackster.vertex_multiplicity()), + std::end(trackster.vertex_multiplicity()), + 0.) / + trackster.vertex_multiplicity().size() + << std::endl; + LogVerbatim("TICLDebugger") << " link connections: " << trackster.edges().size() << std::endl; + auto dumpLayerCluster = [&layerClusters](hgcal::RecHitTools const& rhtools, int cluster_idx) { + auto const& cluster = layerClusters[cluster_idx]; + const auto firstHitDetId = cluster.hitsAndFractions()[0].first; + int layers = rhtools.lastLayer(); + int lcLayerId = + rhtools.getLayerWithOffset(firstHitDetId) + layers * ((rhtools.zside(firstHitDetId) + 1) >> 1) - 1; + + LogVerbatim("TICLDebugger") << "Idx: " << cluster_idx << "(" << lcLayerId << ", " + << cluster.hitsAndFractions().size() << ", " << cluster.position() << ") "; + }; + for (auto link : sorted_edges_idx) { + LogVerbatim("TICLDebugger") << "(" << trackster.edges()[link][0] << ", " << trackster.edges()[link][1] << ") "; + dumpLayerCluster(rhtools_, trackster.edges()[link][0]); + dumpLayerCluster(rhtools_, trackster.edges()[link][1]); + LogVerbatim("TICLDebugger") << std::endl; + } + if (trackster.seedID().id() != 0) { + auto const& track = tracks[trackster.seedIndex()]; + LogVerbatim("TICLDebugger") << " Seeding Track:" << std::endl; + LogVerbatim("TICLDebugger") << " p: " << track.p() << " pt: " << track.pt() << " charge: " << track.charge() + << " eta: " << track.eta() << " outerEta: " << track.outerEta() + << " phi: " << track.phi() << " outerPhi: " << track.outerPhi() << std::endl; + } + bestCaloParticleMatches(trackster); + if (!bestCPMatches.empty()) { + LogVerbatim("TICLDebugger") << " Best CaloParticles Matches:" << std::endl; + ; + for (auto const& i : bestCPMatches) { + auto const& cp = caloParticles[i.first]; + LogVerbatim("TICLDebugger") << " " << i.first << "(" << i.second << "):" << cp.pdgId() + << " simCl size:" << cp.simClusters().size() << " energy:" << cp.energy() + << " pt:" << cp.pt() << " momentum:" << cp.momentum() << std::endl; + } + LogVerbatim("TICLDebugger") << std::endl; + } + } +} + +void TiclDebugger::beginRun(edm::Run const&, edm::EventSetup const& es) { + edm::ESHandle geom; + es.get().get(geom); + rhtools_.setGeometry(*geom); +} + +void TiclDebugger::beginJob() {} + +void TiclDebugger::endJob() {} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ +void TiclDebugger::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("trackstersMerge", edm::InputTag("ticlTrackstersMerge")); + desc.add("tracks", edm::InputTag("generalTracks")); + desc.add("caloParticles", edm::InputTag("mix", "MergedCaloTruth")); + desc.add("layerClusters", edm::InputTag("hgcalLayerClusters")); + descriptions.add("ticlDebugger", desc); +} + +// define this as a plug-in +DEFINE_FWK_MODULE(TiclDebugger); diff --git a/RecoHGCal/TICL/test/ticlDebugger_cfg.py b/RecoHGCal/TICL/test/ticlDebugger_cfg.py new file mode 100644 index 0000000000000..44582be049cd3 --- /dev/null +++ b/RecoHGCal/TICL/test/ticlDebugger_cfg.py @@ -0,0 +1,41 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("TICLDEBUG") + +process.load("FWCore.MessageService.MessageLogger_cfi") +process.load('Configuration.Geometry.GeometryExtended2026D49Reco_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic_T15', '') + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) ) + +process.source = cms.Source("PoolSource", + # replace 'myfile.root' with the source file you want to use + fileNames = cms.untracked.vstring( + 'file:step3.root' + ) +) + +process.load("RecoHGCal.TICL.ticlDebugger_cfi") +process.load("SimGeneral.Debugging.caloParticleDebugger_cfi") + +# MessageLogger customizations +process.MessageLogger.cerr.enable = False +process.MessageLogger.cout.enable = False +label = 'TICLDebugger' +messageLogger = dict() +main_key = '%sMessageLogger'%(label) +messageLogger[main_key] = dict( + filename = '%s.log' % (label), + threshold = 'INFO', + default = dict(limit=0) + ) +messageLogger[main_key][label] = dict(limit=-1) +# First create defaults +setattr(process.MessageLogger.files, label, dict()) +# Then modify them +setattr(process.MessageLogger.files, label, messageLogger[main_key]) + +process.p = cms.Path(process.ticlDebugger+process.caloParticleDebugger) + diff --git a/RecoHI/Configuration/python/Reconstruction_HI_cff.py b/RecoHI/Configuration/python/Reconstruction_HI_cff.py index ba3eda0e387f8..ee2073a4840f8 100644 --- a/RecoHI/Configuration/python/Reconstruction_HI_cff.py +++ b/RecoHI/Configuration/python/Reconstruction_HI_cff.py @@ -9,9 +9,9 @@ # Egamma from RecoHI.HiEgammaAlgos.HiEgamma_cff import * from RecoHI.HiEgammaAlgos.HiElectronSequence_cff import * -ecalDrivenElectronSeeds.SCEtCut = cms.double(15.0) -ecalDrivenGsfElectrons.preselection.minSCEtBarrel = cms.double(15.0) -ecalDrivenGsfElectrons.preselection.minSCEtEndcaps = cms.double(15.0) +ecalDrivenElectronSeeds.SCEtCut = 15.0 +ecalDrivenGsfElectrons.preselection.minSCEtBarrel = 15.0 +ecalDrivenGsfElectrons.preselection.minSCEtEndcaps = 15.0 # Jet Reconstruction from RecoHI.HiJetAlgos.HiRecoJets_cff import * @@ -106,4 +106,4 @@ # Modify zero-suppression sequence here from RecoLocalTracker.SiStripZeroSuppression.SiStripZeroSuppression_cfi import * -siStripZeroSuppression.storeCM = cms.bool(True) +siStripZeroSuppression.storeCM = True diff --git a/RecoHI/Configuration/python/Reconstruction_hiPF_cff.py b/RecoHI/Configuration/python/Reconstruction_hiPF_cff.py index 3f42f98b48b36..0c1ce267f1b11 100644 --- a/RecoHI/Configuration/python/Reconstruction_hiPF_cff.py +++ b/RecoHI/Configuration/python/Reconstruction_hiPF_cff.py @@ -6,38 +6,39 @@ # run a trimmed down PF sequence with heavy-ion vertex, no conversions, nucl int, etc. from RecoParticleFlow.PFProducer.particleFlowEGamma_cff import * -particleFlowEGamma.vertexCollection = cms.InputTag("hiSelectedVertex") -gedGsfElectronCores.ctfTracks = cms.InputTag("hiGeneralTracks") -gedGsfElectronsTmp.ctfTracksTag = cms.InputTag("hiGeneralTracks") -gedGsfElectronsTmp.vtxTag = cms.InputTag("hiSelectedVertex") -gedGsfElectronsTmp.preselection.minSCEtBarrel = cms.double(15.0) -gedGsfElectronsTmp.preselection.minSCEtEndcaps = cms.double(15.0) -gedGsfElectronsTmp.fillConvVtxFitProb = cms.bool(False) - -gedPhotonsTmp.primaryVertexProducer = cms.InputTag("hiSelectedVertex") -gedPhotonsTmp.isolationSumsCalculatorSet.trackProducer = cms.InputTag("hiGeneralTracks") -gedPhotons.primaryVertexProducer = cms.InputTag("hiSelectedVertex") -gedPhotons.isolationSumsCalculatorSet.trackProducer = cms.InputTag("hiGeneralTracks") -photonIDValueMaps.vertices = cms.InputTag("hiSelectedVertex") +particleFlowEGamma.vertexCollection = "hiSelectedVertex" +gedGsfElectronCores.ctfTracks = "hiGeneralTracks" +gedGsfElectronsTmp.ctfTracksTag = "hiGeneralTracks" +gedGsfElectronsTmp.vtxTag = "hiSelectedVertex" +gedGsfElectronsTmp.preselection.minSCEtBarrel = 15.0 +gedGsfElectronsTmp.preselection.minSCEtEndcaps = 15.0 +gedGsfElectronsTmp.fillConvVtxFitProb = False + +gedPhotonsTmp.primaryVertexProducer = "hiSelectedVertex" +gedPhotonsTmp.isolationSumsCalculatorSet.trackProducer = "hiGeneralTracks" +gedPhotons.primaryVertexProducer = "hiSelectedVertex" +gedPhotons.isolationSumsCalculatorSet.trackProducer = "hiGeneralTracks" +photonIDValueMaps.vertices = "hiSelectedVertex" from RecoHI.HiEgammaAlgos.photonIsolationHIProducer_cfi import photonIsolationHIProducer -photonIsolationHIProducerGED = photonIsolationHIProducer.clone(photonProducer=cms.InputTag("gedPhotonsTmp")) + +photonIsolationHIProducerGED = photonIsolationHIProducer.clone(photonProducer = "gedPhotonsTmp") #These are set for consistency w/ HiElectronSequence, but these cuts need to be studied -gedGsfElectronsTmp.preselection.maxHOverEBarrelCone = cms.double(0.25) -gedGsfElectronsTmp.preselection.maxHOverEEndcapsCone = cms.double(0.25) -gedGsfElectronsTmp.preselection.maxHOverEBarrelTower = cms.double(0.0) -gedGsfElectronsTmp.preselection.maxHOverEEndcapsTower = cms.double(0.0) -gedGsfElectronsTmp.preselection.maxEOverPBarrel = cms.double(2.) -gedGsfElectronsTmp.preselection.maxEOverPEndcaps = cms.double(2.) - -ootPhotonsTmp.primaryVertexProducer = cms.InputTag("hiSelectedVertex") -ootPhotonsTmp.isolationSumsCalculatorSet.trackProducer = cms.InputTag("hiGeneralTracks") -ootPhotons.primaryVertexProducer = cms.InputTag("hiSelectedVertex") -ootPhotons.isolationSumsCalculatorSet.trackProducer = cms.InputTag("hiGeneralTracks") +gedGsfElectronsTmp.preselection.maxHOverEBarrelCone = 0.25 +gedGsfElectronsTmp.preselection.maxHOverEEndcapsCone = 0.25 +gedGsfElectronsTmp.preselection.maxHOverEBarrelTower = 0.0 +gedGsfElectronsTmp.preselection.maxHOverEEndcapsTower = 0.0 +gedGsfElectronsTmp.preselection.maxEOverPBarrel = 2. +gedGsfElectronsTmp.preselection.maxEOverPEndcaps = 2. + +ootPhotonsTmp.primaryVertexProducer = "hiSelectedVertex" +ootPhotonsTmp.isolationSumsCalculatorSet.trackProducer = "hiGeneralTracks" +ootPhotons.primaryVertexProducer = "hiSelectedVertex" +ootPhotons.isolationSumsCalculatorSet.trackProducer = "hiGeneralTracks" from RecoParticleFlow.Configuration.RecoParticleFlow_cff import * -mvaElectrons.vertexTag = cms.InputTag("hiSelectedVertex") +mvaElectrons.vertexTag = "hiSelectedVertex" particleFlowBlock.elementImporters = cms.VPSet( cms.PSet( importerName = cms.string("GSFTrackImporter"), @@ -62,7 +63,8 @@ DPtOverPtCuts_byTrackAlgo = cms.vdouble(-1.0,-1.0,-1.0, 1.0,1.0), NHitCuts_byTrackAlgo = cms.vuint32(3,3,3,3,3), - muonMaxDPtOPt = cms.double(1) + muonMaxDPtOPt = cms.double(1), + vetoEndcap = cms.bool(False) ), # to properly set SC based links you need to run ECAL importer # after you've imported all SCs to the block @@ -79,16 +81,16 @@ source = cms.InputTag("particleFlowClusterPS") ) ) -particleFlowTmp.postMuonCleaning = cms.bool(False) -particleFlowTmp.vertexCollection = cms.InputTag("hiSelectedVertex") -particleFlowTmp.muons = cms.InputTag("hiMuons1stStep") -particleFlowTmp.usePFConversions = cms.bool(False) +particleFlowTmp.postMuonCleaning = False +particleFlowTmp.vertexCollection = "hiSelectedVertex" +particleFlowTmp.muons = "hiMuons1stStep" +particleFlowTmp.usePFConversions = False pfNoPileUpIso.enable = False pfPileUpIso.Enable = False pfNoPileUp.enable = False pfPileUp.Enable = False -particleFlow.Muons = cms.InputTag("muons","hiMuons1stStep2muonsMap") +particleFlow.Muons = "muons:hiMuons1stStep2muonsMap" # local reco must run before electrons (RecoHI/HiEgammaAlgos), due to PF integration diff --git a/RecoHI/Configuration/python/Reconstruction_hiSignal_cff.py b/RecoHI/Configuration/python/Reconstruction_hiSignal_cff.py deleted file mode 100644 index 67892270f1db3..0000000000000 --- a/RecoHI/Configuration/python/Reconstruction_hiSignal_cff.py +++ /dev/null @@ -1,47 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from RecoHI.Configuration.Reconstruction_HI_cff import * - -# Make sure the intermediate digi+reco products of the input even are dropped. -# Add this in your PoolSource.inputCommands - -dropAllExceptFinalProducts = cms.PSet() - -# Clone the final product producers, whose originals will be kept from the previous mixed event. - -#Tracks -hiSignalGlobalPrimTracks = hiGlobalPrimTracks.clone() -hiSignalSelectedTracks = hiSelectedTracks.clone() -hiSelectedTracks.src = cms.InputTag("hiSignalGlobalPrimTracks") -heavyIonTrackingTask = cms.Task(hiPixelVerticesTask - ,hiPrimSeedsTask - ,hiPrimTrackCandidates - ,hiSignalGlobalPrimTracks - ,hiSelectedTracks - ) -heavyIonTracking = cms.Sequence(heavyIonTrackingTask) - -#Ecal -hiSignalCorrectedIslandBarrelSuperClusters = correctedIslandBarrelSuperClusters.clone() -hiSignalCorrectedIslandEndcapSuperClusters = correctedIslandEndcapSuperClusters.clone() - -islandClusteringTask = cms.Task(islandBasicClusters - ,islandSuperClusters - ,hiSignalCorrectedIslandBarrelSuperClusters - ,hiSignalCorrectedIslandEndcapSuperClusters - ) -islandClusteringSequence = cms.Sequence(islandClusteringTask) - -#Jets -hiSignalIterativeConePu5CaloJets = iterativeConePu5CaloJets.clone() -runjetsTask = cms.Task(caloTowersRecTask,caloTowers,hiSignalIterativeConePu5CaloJets) -runjets = cms.Sequence(runjetsTask) - -#Muons -hiSignalGlobalMuons = globalMuons.clone() -hiSignalGlobalMuons.TrackerCollectionLabel = 'hiSignalGlobalPrimTracks' -muontrackingTask = cms.Task(standAloneMuonSeedsTask,standAloneMuons,hiSignalGlobalMuons) -muontracking = cms.Sequence(muontrackingTask) - -#Use same sequences as Reconstruction_HI_cff - diff --git a/RecoHI/Configuration/python/peripheralHLTFilter_cff.py b/RecoHI/Configuration/python/peripheralHLTFilter_cff.py index 9d6c0d2adc1c6..e7794cb7b389b 100644 --- a/RecoHI/Configuration/python/peripheralHLTFilter_cff.py +++ b/RecoHI/Configuration/python/peripheralHLTFilter_cff.py @@ -1,22 +1,23 @@ import FWCore.ParameterSet.Config as cms import HLTrigger.HLTfilters.hltHighLevel_cfi -hltPerhiphHI = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone() -hltPerhiphHI.HLTPaths = ["HLT_HISinglePhoton*_Eta*_Cent50_100_*", - "HLT_HISinglePhoton*_Eta*_Cent30_100_*", - "HLT_HIFullTrack*_L1Centrality30100_*", - "HLT_HIPuAK4CaloJet*_Eta5p1_Cent50_100_v*", - "HLT_HIPuAK4CaloJet*_Eta5p1_Cent30_100_v*", - "HLT_HIDmesonHITrackingGlobal_Dpt*_Cent50_100_v*", - "HLT_HIDmesonHITrackingGlobal_Dpt*_Cent30_100_v*", - "HLT_HIL1Centralityext30100MinimumumBiasHF*", - "HLT_HIL1Centralityext50100MinimumumBiasHF*", - "HLT_HIQ2*005_Centrality3050_v*", - "HLT_HIQ2*005_Centrality5070_v*", - "HLT_HICastor*", - "HLT_HIL1Castor*", - "HLT_HIUPC*"] -hltPerhiphHI.throw = False -hltPerhiphHI.andOr = True +hltPerhiphHI = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone( + HLTPaths = ["HLT_HISinglePhoton*_Eta*_Cent50_100_*", + "HLT_HISinglePhoton*_Eta*_Cent30_100_*", + "HLT_HIFullTrack*_L1Centrality30100_*", + "HLT_HIPuAK4CaloJet*_Eta5p1_Cent50_100_v*", + "HLT_HIPuAK4CaloJet*_Eta5p1_Cent30_100_v*", + "HLT_HIDmesonHITrackingGlobal_Dpt*_Cent50_100_v*", + "HLT_HIDmesonHITrackingGlobal_Dpt*_Cent30_100_v*", + "HLT_HIL1Centralityext30100MinimumumBiasHF*", + "HLT_HIL1Centralityext50100MinimumumBiasHF*", + "HLT_HIQ2*005_Centrality3050_v*", + "HLT_HIQ2*005_Centrality5070_v*", + "HLT_HICastor*", + "HLT_HIL1Castor*", + "HLT_HIUPC*"], + throw = False, + andOr = True +) peripheralHLTFilterSequence = cms.Sequence( hltPerhiphHI ) diff --git a/RecoHI/HiEgammaAlgos/python/HiElectronSequence_cff.py b/RecoHI/HiEgammaAlgos/python/HiElectronSequence_cff.py index f6ab293e65d90..51bcb1acce6b6 100644 --- a/RecoHI/HiEgammaAlgos/python/HiElectronSequence_cff.py +++ b/RecoHI/HiEgammaAlgos/python/HiElectronSequence_cff.py @@ -3,11 +3,11 @@ # creates the recoGsfTracks_electronGsfTracks__RECO = input GSF tracks from TrackingTools.GsfTracking.GsfElectronTracking_cff import * -ecalDrivenElectronSeeds.initialSeedsVector = cms.VInputTag(cms.InputTag("hiPixelTrackSeeds")) +ecalDrivenElectronSeeds.initialSeedsVector = ["hiPixelTrackSeeds"] electronCkfTrackCandidates.src = "ecalDrivenElectronSeeds" -ecalDrivenElectronSeeds.maxHOverEBarrel = cms.double(0.25) -ecalDrivenElectronSeeds.maxHOverEEndcaps = cms.double(0.25) +ecalDrivenElectronSeeds.maxHOverEBarrel = 0.25 +ecalDrivenElectronSeeds.maxHOverEEndcaps = 0.25 electronGsfTrackingHiTask = cms.Task(ecalDrivenElectronSeeds , electronCkfTrackCandidates , @@ -15,27 +15,27 @@ from RecoEgamma.EgammaElectronProducers.gsfElectronSequence_cff import * -ecalDrivenGsfElectrons.ctfTracksTag = cms.InputTag("hiGeneralTracks") -ecalDrivenGsfElectronCores.ctfTracks = cms.InputTag("hiGeneralTracks") -ecalDrivenGsfElectrons.vtxTag = cms.InputTag("hiSelectedVertex") +ecalDrivenGsfElectrons.ctfTracksTag = "hiGeneralTracks" +ecalDrivenGsfElectronCores.ctfTracks = "hiGeneralTracks" +ecalDrivenGsfElectrons.vtxTag = "hiSelectedVertex" -ecalDrivenGsfElectrons.preselection.maxHOverEBarrelCone = cms.double(0.25) -ecalDrivenGsfElectrons.preselection.maxHOverEEndcapsCone = cms.double(0.25) -ecalDrivenGsfElectrons.preselection.maxHOverEBarrelTower = cms.double(0.) -ecalDrivenGsfElectrons.preselection.maxHOverEEndcapsTower = cms.double(0.) -ecalDrivenGsfElectrons.fillConvVtxFitProb = cms.bool(False) +ecalDrivenGsfElectrons.preselection.maxHOverEBarrelCone = 0.25 +ecalDrivenGsfElectrons.preselection.maxHOverEEndcapsCone = 0.25 +ecalDrivenGsfElectrons.preselection.maxHOverEBarrelTower = 0. +ecalDrivenGsfElectrons.preselection.maxHOverEEndcapsTower = 0. +ecalDrivenGsfElectrons.fillConvVtxFitProb = False from RecoParticleFlow.PFTracking.pfTrack_cfi import * -pfTrack.UseQuality = cms.bool(True) -pfTrack.TrackQuality = cms.string('highPurity') -pfTrack.TkColList = cms.VInputTag("hiGeneralTracks") -pfTrack.PrimaryVertexLabel = cms.InputTag("hiSelectedVertex") -pfTrack.MuColl = cms.InputTag("hiMuons1stStep") +pfTrack.UseQuality = True +pfTrack.TrackQuality = 'highPurity' +pfTrack.TkColList = ["hiGeneralTracks"] +pfTrack.PrimaryVertexLabel = "hiSelectedVertex" +pfTrack.MuColl = "hiMuons1stStep" from RecoParticleFlow.PFTracking.pfTrackElec_cfi import * -pfTrackElec.applyGsfTrackCleaning = cms.bool(True) -pfTrackElec.PrimaryVertexLabel = cms.InputTag("hiSelectedVertex") +pfTrackElec.applyGsfTrackCleaning = True +pfTrackElec.PrimaryVertexLabel = "hiSelectedVertex" hiElectronTask = cms.Task(electronGsfTrackingHiTask , pfTrack , diff --git a/RecoHI/HiEvtPlaneAlgos/python/HiEvtPlane_cfi.py b/RecoHI/HiEvtPlaneAlgos/python/HiEvtPlane_cfi.py index f4cc2524bd6f5..f3b86baac3ad7 100644 --- a/RecoHI/HiEvtPlaneAlgos/python/HiEvtPlane_cfi.py +++ b/RecoHI/HiEvtPlaneAlgos/python/HiEvtPlane_cfi.py @@ -34,10 +34,8 @@ cutEra = cms.int32(2) # 0:ppReco, 1:HIReco, 2:Pixel, 3: GenMC ) -from Configuration.Eras.Modifier_pp_on_AA_2018_cff import pp_on_AA_2018 -from Configuration.Eras.Modifier_pp_on_PbPb_run3_cff import pp_on_PbPb_run3 - -(pp_on_AA_2018 | pp_on_PbPb_run3).toModify(hiEvtPlane, +from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA +pp_on_AA.toModify(hiEvtPlane, vertexTag = "offlinePrimaryVertices", trackTag = "packedPFCandidates", caloTag = "particleFlow", diff --git a/RecoHI/HiJetAlgos/plugins/HiFJRhoFlowModulationProducer.cc b/RecoHI/HiJetAlgos/plugins/HiFJRhoFlowModulationProducer.cc index 95bdf0104094e..89a69f955c4f3 100644 --- a/RecoHI/HiJetAlgos/plugins/HiFJRhoFlowModulationProducer.cc +++ b/RecoHI/HiJetAlgos/plugins/HiFJRhoFlowModulationProducer.cc @@ -11,7 +11,6 @@ #include "DataFormats/Provenance/interface/EventID.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/src/WorkerMaker.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" @@ -72,8 +71,8 @@ HiFJRhoFlowModulationProducer::HiFJRhoFlowModulationProducer(const edm::Paramete evtPlaneToken_(consumes(iConfig.getParameter("EvtPlane"))) { produces>("rhoFlowFitParams"); TMinuitMinimizer::UseStaticMinuit(false); - lineFit_p_ = std::unique_ptr(new TF1("lineFit", lineFunction, -TMath::Pi(), TMath::Pi())); - flowFit_p_ = std::unique_ptr(new TF1("flowFit", flowFunction, -TMath::Pi(), TMath::Pi())); + lineFit_p_ = std::make_unique("lineFit", lineFunction, -TMath::Pi(), TMath::Pi()); + flowFit_p_ = std::make_unique("flowFit", flowFunction, -TMath::Pi(), TMath::Pi()); } // ------------ method called to produce the data ------------ diff --git a/RecoHI/HiJetAlgos/plugins/HiPuRhoProducer.cc b/RecoHI/HiJetAlgos/plugins/HiPuRhoProducer.cc index 30e351d6c2175..b6d2e3fccec71 100644 --- a/RecoHI/HiJetAlgos/plugins/HiPuRhoProducer.cc +++ b/RecoHI/HiJetAlgos/plugins/HiPuRhoProducer.cc @@ -26,7 +26,6 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/src/WorkerMaker.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" diff --git a/RecoHI/HiJetAlgos/plugins/ParticleTowerProducer.cc b/RecoHI/HiJetAlgos/plugins/ParticleTowerProducer.cc index 0b0856d27e3e3..00c9adc91707d 100644 --- a/RecoHI/HiJetAlgos/plugins/ParticleTowerProducer.cc +++ b/RecoHI/HiJetAlgos/plugins/ParticleTowerProducer.cc @@ -23,7 +23,6 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/src/WorkerMaker.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescriptionFiller.h" #include "DataFormats/Math/interface/deltaPhi.h" diff --git a/RecoHI/HiJetAlgos/python/HiRecoPFJets_cff.py b/RecoHI/HiJetAlgos/python/HiRecoPFJets_cff.py index a8917b64c5789..079b5f39a5119 100644 --- a/RecoHI/HiJetAlgos/python/HiRecoPFJets_cff.py +++ b/RecoHI/HiJetAlgos/python/HiRecoPFJets_cff.py @@ -119,3 +119,4 @@ from Configuration.ProcessModifiers.run2_miniAOD_pp_on_AA_103X_cff import run2_miniAOD_pp_on_AA_103X run2_miniAOD_pp_on_AA_103X.toModify(akCs4PFJets,src = 'cleanedParticleFlow') +run2_miniAOD_pp_on_AA_103X.toModify(PFTowers,src = 'cleanedParticleFlow') diff --git a/RecoHI/HiJetAlgos/test/testRegionalJetTracking_cfg.py b/RecoHI/HiJetAlgos/test/testRegionalJetTracking_cfg.py index 1bf8a272bf23c..78f04914507d4 100644 --- a/RecoHI/HiJetAlgos/test/testRegionalJetTracking_cfg.py +++ b/RecoHI/HiJetAlgos/test/testRegionalJetTracking_cfg.py @@ -33,7 +33,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.debugModules = ['*'] -process.MessageLogger.categories = ['HeavyIonVertexing','heavyIonHLTVertexing','TauRegionalPixelSeedGenerator'] + process.MessageLogger.cerr = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), DEBUG = cms.untracked.PSet( diff --git a/RecoHI/HiMuonAlgos/python/HiRegitMuonDetachedTripletStep_cff.py b/RecoHI/HiMuonAlgos/python/HiRegitMuonDetachedTripletStep_cff.py index c3ff4239ea9a2..8e658e41f1e73 100644 --- a/RecoHI/HiMuonAlgos/python/HiRegitMuonDetachedTripletStep_cff.py +++ b/RecoHI/HiMuonAlgos/python/HiRegitMuonDetachedTripletStep_cff.py @@ -67,7 +67,7 @@ # building: feed the new-named seeds hiRegitMuDetachedTripletStepTrajectoryFilterBase = RecoTracker.IterativeTracking.DetachedTripletStep_cff.detachedTripletStepTrajectoryFilterBase.clone( - minPt = 0.8 # after each new hit, apply pT cut for traj w/ at least minHitsMinPt = cms.int32(3), + minPt = 0.8 # after each new hit, apply pT cut for traj w/ at least minHitsMinPt = 3, ) hiRegitMuDetachedTripletStepTrajectoryFilter = RecoTracker.IterativeTracking.DetachedTripletStep_cff.detachedTripletStepTrajectoryFilter.clone( @@ -104,43 +104,44 @@ RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( name = 'hiRegitMuDetachedTripletStepLoose', min_nhits = 8 - ), + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( name = 'hiRegitMuDetachedTripletStepTight', preFilterName = 'hiRegitMuDetachedTripletStepLoose', min_nhits = 8, useMVA = True, minMVA = -0.2 - ), + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( name = 'hiRegitMuDetachedTripletStep', preFilterName = 'hiRegitMuDetachedTripletStepTight', min_nhits = 8, useMVA = True, minMVA = -0.09 - ) + ) ) #end of vpset ) from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiRegitMuDetachedTripletStepSelector, useAnyMVA = False) -trackingPhase1.toModify(hiRegitMuDetachedTripletStepSelector, trackSelectors= cms.VPSet( - RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( - name = 'hiRegitMuDetachedTripletStepLoose', - min_nhits = 8 +trackingPhase1.toModify(hiRegitMuDetachedTripletStepSelector, + useAnyMVA = False, + trackSelectors= cms.VPSet( + RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( + name = 'hiRegitMuDetachedTripletStepLoose', + min_nhits = 8 ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiRegitMuDetachedTripletStepTight', - preFilterName = 'hiRegitMuDetachedTripletStepLoose', - min_nhits = 8, - useMVA = False, - minMVA = -0.2 + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiRegitMuDetachedTripletStepTight', + preFilterName = 'hiRegitMuDetachedTripletStepLoose', + min_nhits = 8, + useMVA = False, + minMVA = -0.2 ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiRegitMuDetachedTripletStep', - preFilterName = 'hiRegitMuDetachedTripletStepTight', - min_nhits = 8, - useMVA = False, - minMVA = -0.09 + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiRegitMuDetachedTripletStep', + preFilterName = 'hiRegitMuDetachedTripletStepTight', + min_nhits = 8, + useMVA = False, + minMVA = -0.09 ) ) ) diff --git a/RecoHI/HiMuonAlgos/python/HiRegitMuonInitialStep_cff.py b/RecoHI/HiMuonAlgos/python/HiRegitMuonInitialStep_cff.py index d4f7efc6f91ef..dfaa96003f20f 100644 --- a/RecoHI/HiMuonAlgos/python/HiRegitMuonInitialStep_cff.py +++ b/RecoHI/HiMuonAlgos/python/HiRegitMuonInitialStep_cff.py @@ -45,7 +45,6 @@ seedingHitSets = "hiRegitMuInitialStepHitTriplets" ) - # building: feed the new-named seeds hiRegitMuInitialStepTrajectoryFilterBase = RecoTracker.IterativeTracking.InitialStep_cff.initialStepTrajectoryFilterBase.clone( minPt = 2.5 # after each new hit, apply pT cut for traj w/ at least minHitsMinPt = cms.int32(3), @@ -90,45 +89,46 @@ RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( name = 'hiRegitMuInitialStepLoose', min_nhits = 8 - ), #end of pset + ), #end of pset RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( name = 'hiRegitMuInitialStepTight', preFilterName = 'hiRegitMuInitialStepLoose', min_nhits = 8, useMVA = True, minMVA = -0.38 - ), + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( name = 'hiRegitMuInitialStep', preFilterName = 'hiRegitMuInitialStepTight', min_nhits = 8, useMVA = True, minMVA = -0.77 - ), - ) #end of vpset - ) + ), + ) #end of vpset +) from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiRegitMuInitialStepSelector, useAnyMVA = False) -trackingPhase1.toModify(hiRegitMuInitialStepSelector, trackSelectors= cms.VPSet( +trackingPhase1.toModify(hiRegitMuInitialStepSelector, + useAnyMVA = False, + trackSelectors= cms.VPSet( RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( name = 'hiRegitMuInitialStepLoose', min_nhits = 8 - ), #end of pset + ), #end of pset RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( name = 'hiRegitMuInitialStepTight', preFilterName = 'hiRegitMuInitialStepLoose', min_nhits = 8, useMVA = False, minMVA = -0.38 - ), + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( name = 'hiRegitMuInitialStep', preFilterName = 'hiRegitMuInitialStepTight', min_nhits = 8, useMVA = False, minMVA = -0.77 - ), - ) + ), + ) ) hiRegitMuonInitialStepTask = cms.Task(hiRegitMuInitialStepSeedLayers, diff --git a/RecoHI/HiMuonAlgos/python/HiRegitMuonMixedTripletStep_cff.py b/RecoHI/HiMuonAlgos/python/HiRegitMuonMixedTripletStep_cff.py index 86b68478748fc..b1868b01806d3 100644 --- a/RecoHI/HiMuonAlgos/python/HiRegitMuonMixedTripletStep_cff.py +++ b/RecoHI/HiMuonAlgos/python/HiRegitMuonMixedTripletStep_cff.py @@ -130,45 +130,46 @@ RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( name = 'hiRegitMuMixedTripletStepLoose', min_nhits = 8 - ), + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( name = 'hiRegitMuMixedTripletStepTight', preFilterName = 'hiRegitMuMixedTripletStepLoose', min_nhits = 8, useMVA = True, minMVA = -0.2 - ), + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( name = 'hiRegitMuMixedTripletStep', preFilterName = 'hiRegitMuMixedTripletStepTight', min_nhits = 8, useMVA = True, minMVA = -0.09 - ) - ) #end of vpset + ) + ) #end of vpset ) #end of clone from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiRegitMuMixedTripletStepSelector, useAnyMVA = False) -trackingPhase1.toModify(hiRegitMuMixedTripletStepSelector, trackSelectors= cms.VPSet( +trackingPhase1.toModify(hiRegitMuMixedTripletStepSelector, + useAnyMVA = False, + trackSelectors= cms.VPSet( RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( name = 'hiRegitMuMixedTripletStepLoose', min_nhits = 8 - ), + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( name = 'hiRegitMuMixedTripletStepTight', preFilterName = 'hiRegitMuMixedTripletStepLoose', min_nhits = 8, useMVA = False, minMVA = -0.2 - ), + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( name = 'hiRegitMuMixedTripletStep', preFilterName = 'hiRegitMuMixedTripletStepTight', min_nhits = 8, useMVA = False, minMVA = -0.09 - ) - ) #end of vpset + ) + ) #end of vpset ) hiRegitMuonMixedTripletStepTask = cms.Task(hiRegitMuMixedTripletStepClusters, diff --git a/RecoHI/HiMuonAlgos/python/HiRegitMuonPixelLessStep_cff.py b/RecoHI/HiMuonAlgos/python/HiRegitMuonPixelLessStep_cff.py index 76340d9e5cdde..dbb3c42414d3d 100644 --- a/RecoHI/HiMuonAlgos/python/HiRegitMuonPixelLessStep_cff.py +++ b/RecoHI/HiMuonAlgos/python/HiRegitMuonPixelLessStep_cff.py @@ -98,47 +98,48 @@ GBRForestVars = ['chi2perdofperlayer', 'nhits', 'nlayers', 'eta'], trackSelectors = cms.VPSet( RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( - name = 'hiRegitMuPixelLessStepLoose', - min_nhits = 8 - ), + name = 'hiRegitMuPixelLessStepLoose', + min_nhits = 8 + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( name = 'hiRegitMuPixelLessStepTight', preFilterName = 'hiRegitMuPixelLessStepLoose', min_nhits = 8, useMVA = True, minMVA = -0.2 - ), + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( name = 'hiRegitMuPixelLessStep', preFilterName = 'hiRegitMuPixelLessStepTight', min_nhits = 8, useMVA = True, minMVA = -0.09 - ), - ) #end of vpset + ), + ) #end of vpset ) from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiRegitMuPixelLessStepSelector, useAnyMVA = False) -trackingPhase1.toModify(hiRegitMuPixelLessStepSelector, trackSelectors= cms.VPSet( +trackingPhase1.toModify(hiRegitMuPixelLessStepSelector, + useAnyMVA = False, + trackSelectors= cms.VPSet( RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( - name = 'hiRegitMuPixelLessStepLoose', - min_nhits = 8 - ), + name = 'hiRegitMuPixelLessStepLoose', + min_nhits = 8 + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( name = 'hiRegitMuPixelLessStepTight', preFilterName = 'hiRegitMuPixelLessStepLoose', min_nhits = 8, useMVA = False, minMVA = -0.2 - ), + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( name = 'hiRegitMuPixelLessStep', preFilterName = 'hiRegitMuPixelLessStepTight', min_nhits = 8, useMVA = False, minMVA = -0.09 - ), - ) #end of vpset + ), + ) #end of vpset ) hiRegitMuonPixelLessStepTask = cms.Task(hiRegitMuPixelLessStepClusters, @@ -151,4 +152,3 @@ hiRegitMuPixelLessStepTracks, hiRegitMuPixelLessStepSelector) hiRegitMuonPixelLessStep = cms.Sequence(hiRegitMuonPixelLessStepTask) - diff --git a/RecoHI/HiMuonAlgos/python/HiRegitMuonPixelPairStep_cff.py b/RecoHI/HiMuonAlgos/python/HiRegitMuonPixelPairStep_cff.py index c101bd4a98770..2b9f243170627 100644 --- a/RecoHI/HiMuonAlgos/python/HiRegitMuonPixelPairStep_cff.py +++ b/RecoHI/HiMuonAlgos/python/HiRegitMuonPixelPairStep_cff.py @@ -18,10 +18,10 @@ DeltaPhi = 0.3, DeltaEta = 0.2, # Ok, the following ones are specific to PixelPairStep - Pt_min = 1.0, - DeltaR = 0.01, # default = 0.2 - DeltaZ = 0.09, # this give you the length - Rescale_Dz = 0. # max(DeltaZ_Region,Rescale_Dz*vtx->zError()) + Pt_min = 1.0, + DeltaR = 0.01, # default = 0.2 + DeltaZ = 0.09, # this give you the length + Rescale_Dz = 0. # max(DeltaZ_Region,Rescale_Dz*vtx->zError()) ) ) @@ -103,45 +103,46 @@ RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( name = 'hiRegitMuPixelPairStepLoose', min_nhits = 8 - ), + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( name = 'hiRegitMuPixelPairStepTight', preFilterName = 'hiRegitMuPixelPairStepLoose', min_nhits = 8, useMVA = True, minMVA = -0.58 - ), + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( name = 'hiRegitMuPixelPairStep', preFilterName = 'hiRegitMuPixelPairStepTight', min_nhits = 8, useMVA = True, minMVA = 0.77 - ), - ) #end of vpset + ), + ) #end of vpset ) from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiRegitMuPixelPairStepSelector, useAnyMVA = False) -trackingPhase1.toModify(hiRegitMuPixelPairStepSelector, trackSelectors= cms.VPSet( +trackingPhase1.toModify(hiRegitMuPixelPairStepSelector, + useAnyMVA = False, + trackSelectors= cms.VPSet( RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( - name = 'hiRegitMuPixelPairStepLoose', - min_nhits = 8 - ), + name = 'hiRegitMuPixelPairStepLoose', + min_nhits = 8 + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( name = 'hiRegitMuPixelPairStepTight', preFilterName = 'hiRegitMuPixelPairStepLoose', min_nhits = 8, useMVA = False, minMVA = -0.58 - ), + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( name = 'hiRegitMuPixelPairStep', preFilterName = 'hiRegitMuPixelPairStepTight', min_nhits = 8, useMVA = False, minMVA = 0.77 - ), - ) #end of vpset + ), + ) #end of vpset ) hiRegitMuonPixelPairStepTask = cms.Task(hiRegitMuPixelPairStepClusters, diff --git a/RecoHI/HiMuonAlgos/python/HiRegitMuonSeededStep_cff.py b/RecoHI/HiMuonAlgos/python/HiRegitMuonSeededStep_cff.py index b59cd20d82727..d58abaefa4f8e 100644 --- a/RecoHI/HiMuonAlgos/python/HiRegitMuonSeededStep_cff.py +++ b/RecoHI/HiMuonAlgos/python/HiRegitMuonSeededStep_cff.py @@ -6,7 +6,7 @@ import RecoTracker.FinalTrackSelectors.trackListMerger_cfi hiEarlyGeneralTracks = RecoTracker.FinalTrackSelectors.trackListMerger_cfi.trackListMerger.clone( TrackProducers = [ - 'hiGlobalPrimTracks', + 'hiGlobalPrimTracks', 'hiDetachedTripletStepTracks', 'hiLowPtTripletStepTracks', 'hiPixelPairGlobalPrimTracks', @@ -19,22 +19,22 @@ ], hasSelector = [1,1,1,1,1,1,1,1,1,1], selectedTrackQuals = [ - "hiInitialStepSelector:hiInitialStep", - "hiDetachedTripletStepSelector:hiDetachedTripletStep", - "hiLowPtTripletStepSelector:hiLowPtTripletStep", - "hiPixelPairStepSelector:hiPixelPairStep", - "hiJetCoreRegionalStepSelector:hiJetCoreRegionalStep", - "hiRegitMuInitialStepSelector:hiRegitMuInitialStepLoose", - "hiRegitMuPixelPairStepSelector:hiRegitMuPixelPairStep", - "hiRegitMuMixedTripletStepSelector:hiRegitMuMixedTripletStep", - "hiRegitMuPixelLessStepSelector:hiRegitMuPixelLessStep", - "hiRegitMuDetachedTripletStepSelector:hiRegitMuDetachedTripletStep" - ], + "hiInitialStepSelector:hiInitialStep", + "hiDetachedTripletStepSelector:hiDetachedTripletStep", + "hiLowPtTripletStepSelector:hiLowPtTripletStep", + "hiPixelPairStepSelector:hiPixelPairStep", + "hiJetCoreRegionalStepSelector:hiJetCoreRegionalStep", + "hiRegitMuInitialStepSelector:hiRegitMuInitialStepLoose", + "hiRegitMuPixelPairStepSelector:hiRegitMuPixelPairStep", + "hiRegitMuMixedTripletStepSelector:hiRegitMuMixedTripletStep", + "hiRegitMuPixelLessStepSelector:hiRegitMuPixelLessStep", + "hiRegitMuDetachedTripletStepSelector:hiRegitMuDetachedTripletStep" + ], setsToMerge = cms.VPSet( cms.PSet( tLists=cms.vint32(0,1,2,3,4,5,6,7,8,9), pQual=cms.bool(True)), # should this be False? ), copyExtras = True, makeReKeyedSeeds = cms.untracked.bool(False) - ) +) hiEarlyMuons = earlyMuons.clone( inputCollectionLabels = ["hiEarlyGeneralTracks", "standAloneMuons:UpdatedAtVtx"] @@ -49,14 +49,12 @@ hiRegitMuonSeededSeedsInOut = RecoTracker.SpecialSeedGenerators.inOutSeedsFromTrackerMuons_cfi.inOutSeedsFromTrackerMuons.clone( src = "hiEarlyMuons", ) - hiRegitMuonSeededTrackCandidatesInOut = muonSeededTrackCandidatesInOut.clone( src = "hiRegitMuonSeededSeedsInOut" ) hiRegitMuonSeededTrackCandidatesOutIn = muonSeededTrackCandidatesOutIn.clone( src = "hiRegitMuonSeededSeedsOutIn" ) - hiRegitMuonSeededTracksOutIn = muonSeededTracksOutIn.clone( src = "hiRegitMuonSeededTrackCandidatesOutIn", AlgorithmName = 'hiRegitMuMuonSeededStepOutIn' @@ -65,7 +63,6 @@ src = "hiRegitMuonSeededTrackCandidatesInOut", AlgorithmName = 'hiRegitMuMuonSeededStepInOut' ) - import RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiRegitMuonSeededTracksInOutSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( @@ -76,47 +73,48 @@ GBRForestVars = ['chi2perdofperlayer', 'nhits', 'nlayers', 'eta'], trackSelectors = cms.VPSet( RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( - name = 'hiRegitMuonSeededTracksInOutLoose', - min_nhits = 8 - ), + name = 'hiRegitMuonSeededTracksInOutLoose', + min_nhits = 8 + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiRegitMuonSeededTracksInOutTight', - preFilterName = 'hiRegitMuonSeededTracksInOutLoose', - min_nhits = 8, - useMVA = True, - minMVA = -0.2 - ), + name = 'hiRegitMuonSeededTracksInOutTight', + preFilterName = 'hiRegitMuonSeededTracksInOutLoose', + min_nhits = 8, + useMVA = True, + minMVA = -0.2 + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiRegitMuonSeededTracksInOutHighPurity', - preFilterName = 'hiRegitMuonSeededTracksInOutTight', - min_nhits = 8, - useMVA = True, - minMVA = -0.09 - ), - ) #end of vpset + name = 'hiRegitMuonSeededTracksInOutHighPurity', + preFilterName = 'hiRegitMuonSeededTracksInOutTight', + min_nhits = 8, + useMVA = True, + minMVA = -0.09 + ), + ) #end of vpset ) #end of clone from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiRegitMuonSeededTracksInOutSelector, useAnyMVA = False) -trackingPhase1.toModify(hiRegitMuonSeededTracksInOutSelector, trackSelectors= cms.VPSet( - RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( +trackingPhase1.toModify(hiRegitMuonSeededTracksInOutSelector, + useAnyMVA = False, + trackSelectors= cms.VPSet( + RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( name = 'hiRegitMuonSeededTracksInOutLoose', min_nhits = 8 - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( name = 'hiRegitMuonSeededTracksInOutTight', preFilterName = 'hiRegitMuonSeededTracksInOutLoose', min_nhits = 8, useMVA = False, minMVA = -0.2 - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( name = 'hiRegitMuonSeededTracksInOutHighPurity', preFilterName = 'hiRegitMuonSeededTracksInOutTight', min_nhits = 8, useMVA = False, minMVA = -0.09 - ), - ) #end of vpset + ), + ) #end of vpset ) hiRegitMuonSeededTracksOutInSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( @@ -127,47 +125,48 @@ GBRForestVars = ['chi2perdofperlayer', 'nhits', 'nlayers', 'eta'], trackSelectors = cms.VPSet( RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( - name = 'hiRegitMuonSeededTracksOutInLoose', - min_nhits = 8 - ), + name = 'hiRegitMuonSeededTracksOutInLoose', + min_nhits = 8 + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiRegitMuonSeededTracksOutInTight', - preFilterName = 'hiRegitMuonSeededTracksOutInLoose', - min_nhits = 8, - useMVA = True, - minMVA = -0.2 - ), + name = 'hiRegitMuonSeededTracksOutInTight', + preFilterName = 'hiRegitMuonSeededTracksOutInLoose', + min_nhits = 8, + useMVA = True, + minMVA = -0.2 + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiRegitMuonSeededTracksOutInHighPurity', - preFilterName = 'hiRegitMuonSeededTracksOutInTight', - min_nhits = 8, - useMVA = True, - minMVA = -0.09 - ), - ) #end of vpset + name = 'hiRegitMuonSeededTracksOutInHighPurity', + preFilterName = 'hiRegitMuonSeededTracksOutInTight', + min_nhits = 8, + useMVA = True, + minMVA = -0.09 + ), + ) #end of vpset ) #end of clone from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiRegitMuonSeededTracksOutInSelector, useAnyMVA = False) -trackingPhase1.toModify(hiRegitMuonSeededTracksOutInSelector, trackSelectors= cms.VPSet( +trackingPhase1.toModify(hiRegitMuonSeededTracksOutInSelector, + useAnyMVA = False, + trackSelectors= cms.VPSet( RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone( - name = 'hiRegitMuonSeededTracksOutInLoose', - min_nhits = 8 - ), + name = 'hiRegitMuonSeededTracksOutInLoose', + min_nhits = 8 + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiRegitMuonSeededTracksOutInTight', - preFilterName = 'hiRegitMuonSeededTracksOutInLoose', - min_nhits = 8, - useMVA = False, - minMVA = -0.2 - ), + name = 'hiRegitMuonSeededTracksOutInTight', + preFilterName = 'hiRegitMuonSeededTracksOutInLoose', + min_nhits = 8, + useMVA = False, + minMVA = -0.2 + ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiRegitMuonSeededTracksOutInHighPurity', - preFilterName = 'hiRegitMuonSeededTracksOutInTight', - min_nhits = 8, - useMVA = False, - minMVA = -0.09 - ), - ) #end of vpset + name = 'hiRegitMuonSeededTracksOutInHighPurity', + preFilterName = 'hiRegitMuonSeededTracksOutInTight', + min_nhits = 8, + useMVA = False, + minMVA = -0.09 + ), + ) #end of vpset ) hiRegitMuonSeededStepCoreTask = cms.Task( diff --git a/RecoHI/HiTracking/plugins/BuildFile.xml b/RecoHI/HiTracking/plugins/BuildFile.xml index afd8eee1e5bb5..9b56e1d081030 100644 --- a/RecoHI/HiTracking/plugins/BuildFile.xml +++ b/RecoHI/HiTracking/plugins/BuildFile.xml @@ -1,5 +1,5 @@ - + diff --git a/RecoHI/HiTracking/plugins/HIMultiTrackSelector.h b/RecoHI/HiTracking/plugins/HIMultiTrackSelector.h index 18ff3c4ec5141..c0d861a6fc1f2 100644 --- a/RecoHI/HiTracking/plugins/HIMultiTrackSelector.h +++ b/RecoHI/HiTracking/plugins/HIMultiTrackSelector.h @@ -30,7 +30,7 @@ #include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit1D.h" #include "CommonTools/Utils/interface/StringCutObjectSelector.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" enum MVAVARIABLES { chi2perdofperlayer = 0, diff --git a/RecoHI/HiTracking/python/HIBestVertexSequences_cff.py b/RecoHI/HiTracking/python/HIBestVertexSequences_cff.py index 1692790dfef92..e7ffed4e0a687 100644 --- a/RecoHI/HiTracking/python/HIBestVertexSequences_cff.py +++ b/RecoHI/HiTracking/python/HIBestVertexSequences_cff.py @@ -3,7 +3,7 @@ # sort by number of tracks and keep the best hiBestAdaptiveVertex = cms.EDFilter("HIBestVertexSelection", src = cms.InputTag("hiPixelAdaptiveVertex"), - maxNumber = cms.uint32(1) + maxNumber = cms.uint32(1) ) # select best of precise vertex, fast vertex, and beamspot @@ -19,18 +19,18 @@ from RecoHI.HiTracking.HIPixelAdaptiveVertex_cfi import * hiOfflinePrimaryVertices=hiPixelAdaptiveVertex.clone( # vertexing run AFTER tracking - TrackLabel = cms.InputTag("hiGeneralTracks"), + TrackLabel = "hiGeneralTracks", TkFilterParameters = cms.PSet( - algorithm = cms.string('filterWithThreshold'), - maxNormalizedChi2 = cms.double(5.0), - minPixelLayersWithHits=cms.int32(3), #0 missing pix hit (Run 1 pixels) - minSiliconLayersWithHits = cms.int32(5),#at least 8 (3pix+5strip) hits total - maxD0Significance = cms.double(3.0), #default is 5.0 in pp; 3.0 here suppresses split vtxs - minPt = cms.double(0.0), - maxEta = cms.double(100.), - trackQuality = cms.string("any"), - numTracksThreshold = cms.int32(2) + algorithm = cms.string('filterWithThreshold'), + maxNormalizedChi2 = cms.double(5.0), + minPixelLayersWithHits = cms.int32(3), #0 missing pix hit (Run 1 pixels) + minSiliconLayersWithHits = cms.int32(5), #at least 8 (3pix+5strip) hits total + maxD0Significance = cms.double(3.0), #default is 5.0 in pp; 3.0 here suppresses split vtxs + minPt = cms.double(0.0), + maxEta = cms.double(100.), + trackQuality = cms.string("any"), + numTracksThreshold = cms.int32(2) ) ) from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 @@ -45,7 +45,7 @@ ) # select best of precise vertex, fast vertex, and beamspot hiSelectedVertex = hiSelectedPixelVertex.clone( - useFinalAdaptiveVertexCollection = cms.bool(True), + useFinalAdaptiveVertexCollection = True, finalAdaptiveVertexCollection = cms.InputTag("hiBestOfflinePrimaryVertex") ) bestFinalHiVertexTask = cms.Task(hiOfflinePrimaryVertices , hiBestOfflinePrimaryVertex , hiSelectedVertex ) diff --git a/RecoHI/HiTracking/python/HIInitialJetCoreClusterSplitting_cff.py b/RecoHI/HiTracking/python/HIInitialJetCoreClusterSplitting_cff.py index ee9297cf55aa6..d89861bd40799 100644 --- a/RecoHI/HiTracking/python/HIInitialJetCoreClusterSplitting_cff.py +++ b/RecoHI/HiTracking/python/HIInitialJetCoreClusterSplitting_cff.py @@ -10,22 +10,26 @@ hiCaloTowerForTrkPreSplitting = hiCaloTowerForTrk.clone() hiAkPu4CaloJetsForTrkPreSplitting = akPu4CaloJetsForTrk.clone( src = 'hiCaloTowerForTrkPreSplitting', - srcPVs = 'hiSelectedVertexPreSplitting') + srcPVs = 'hiSelectedVertexPreSplitting' +) hiAkPu4CaloJetsCorrectedPreSplitting = akPu4CaloJetsCorrected.clone( - src = 'hiAkPu4CaloJetsForTrkPreSplitting') + src = 'hiAkPu4CaloJetsForTrkPreSplitting' +) hiAkPu4CaloJetsSelectedPreSplitting = akPu4CaloJetsSelected.clone( - src = 'hiAkPu4CaloJetsCorrectedPreSplitting') + src = 'hiAkPu4CaloJetsCorrectedPreSplitting' +) hiJetsForCoreTrackingPreSplitting = hiJetsForCoreTracking.clone( - src = 'hiAkPu4CaloJetsSelectedPreSplitting') + src = 'hiAkPu4CaloJetsSelectedPreSplitting' +) from RecoLocalTracker.SubCollectionProducers.jetCoreClusterSplitter_cfi import jetCoreClusterSplitter siPixelClusters = jetCoreClusterSplitter.clone( - pixelClusters = cms.InputTag('siPixelClustersPreSplitting'), + pixelClusters = 'siPixelClustersPreSplitting', vertices = 'hiSelectedVertexPreSplitting', cores = 'hiJetsForCoreTrackingPreSplitting', - deltaRmax = cms.double(0.1), - ptMin = cms.double(50) + deltaRmax = 0.1, + ptMin = 50 ) from RecoLocalTracker.SiPixelRecHits.SiPixelRecHits_cfi import siPixelRecHits diff --git a/RecoHI/HiTracking/python/HILowPtConformalPixelTracks_cfi.py b/RecoHI/HiTracking/python/HILowPtConformalPixelTracks_cfi.py index 84ea46533d882..5ebb5f9072795 100644 --- a/RecoHI/HiTracking/python/HILowPtConformalPixelTracks_cfi.py +++ b/RecoHI/HiTracking/python/HILowPtConformalPixelTracks_cfi.py @@ -10,15 +10,15 @@ # Hit ntuplets hiConformalPixelTracksHitDoublets = _hitPairEDProducer.clone( - clusterCheck = "", - seedingLayers = "PixelLayerTriplets", + clusterCheck = "", + seedingLayers = "PixelLayerTriplets", trackingRegions = "hiTrackingRegionWithVertex", - maxElement = 50000000, + maxElement = 50000000, produceIntermediateHitDoublets = True, ) hiConformalPixelTracksHitTriplets = _pixelTripletHLTEDProducer.clone( - doublets = "hiConformalPixelTracksHitDoublets", + doublets = "hiConformalPixelTracksHitDoublets", maxElement = 5000000, # increase threshold for triplets in generation step (default: 100000) produceSeedingHitSets = True, ) @@ -49,78 +49,81 @@ #Tracking regions - use PV from pp tracking from RecoTracker.TkTrackingRegions.globalTrackingRegionWithVertices_cfi import globalTrackingRegionWithVertices -hiConformalPixelTracksPhase1TrackingRegions = globalTrackingRegionWithVertices.clone(RegionPSet=dict( - precise = True, - useMultipleScattering = False, - useFakeVertices = False, - beamSpot = "offlineBeamSpot", - useFixedError = True, - nSigmaZ = 3.0, - sigmaZVertex = 3.0, - fixedError = 0.2, - VertexCollection = "offlinePrimaryVertices", - ptMin = 0.3, - useFoundVertices = True, - originRadius = 0.2 -)) +hiConformalPixelTracksPhase1TrackingRegions = globalTrackingRegionWithVertices.clone( + RegionPSet = dict( + precise = True, + useMultipleScattering = False, + useFakeVertices = False, + beamSpot = "offlineBeamSpot", + useFixedError = True, + nSigmaZ = 3.0, + sigmaZVertex = 3.0, + fixedError = 0.2, + VertexCollection = "offlinePrimaryVertices", + ptMin = 0.3, + useFoundVertices = True, + originRadius = 0.2 + ) +) # SEEDING LAYERS # Using 4 layers layerlist from RecoTracker.IterativeTracking.LowPtQuadStep_cff import lowPtQuadStepSeedLayers -hiConformalPixelTracksPhase1SeedLayers = lowPtQuadStepSeedLayers.clone() -hiConformalPixelTracksPhase1SeedLayers.BPix = cms.PSet( - HitProducer = cms.string('siPixelRecHits'), - TTRHBuilder = cms.string('WithTrackAngle'), -) -hiConformalPixelTracksPhase1SeedLayers.FPix = cms.PSet( - HitProducer = cms.string('siPixelRecHits'), - TTRHBuilder = cms.string('WithTrackAngle'), +hiConformalPixelTracksPhase1SeedLayers = lowPtQuadStepSeedLayers.clone( + BPix = cms.PSet( + HitProducer = cms.string('siPixelRecHits'), + TTRHBuilder = cms.string('WithTrackAngle'), + ), + FPix = cms.PSet( + HitProducer = cms.string('siPixelRecHits'), + TTRHBuilder = cms.string('WithTrackAngle'), + ) ) # Hit ntuplets from RecoTracker.IterativeTracking.LowPtQuadStep_cff import lowPtQuadStepHitDoublets hiConformalPixelTracksPhase1HitDoubletsCA = lowPtQuadStepHitDoublets.clone( - seedingLayers = "hiConformalPixelTracksPhase1SeedLayers", - trackingRegions = "hiConformalPixelTracksPhase1TrackingRegions" + seedingLayers = "hiConformalPixelTracksPhase1SeedLayers", + trackingRegions = "hiConformalPixelTracksPhase1TrackingRegions" ) from RecoTracker.IterativeTracking.LowPtQuadStep_cff import lowPtQuadStepHitQuadruplets hiConformalPixelTracksPhase1HitQuadrupletsCA = lowPtQuadStepHitQuadruplets.clone( - doublets = "hiConformalPixelTracksPhase1HitDoubletsCA", - CAPhiCut = 0.2, - CAThetaCut = 0.0012, - SeedComparitorPSet = cms.PSet( - ComponentName = cms.string('none') - ), - extraHitRPhitolerance = 0.032, - maxChi2 = cms.PSet( - enabled = cms.bool(True), - pt1 = cms.double(0.7), - pt2 = cms.double(2), - value1 = cms.double(200), - value2 = cms.double(50) - ) + doublets = "hiConformalPixelTracksPhase1HitDoubletsCA", + CAPhiCut = 0.2, + CAThetaCut = 0.0012, + SeedComparitorPSet = dict( + ComponentName = 'none' + ), + extraHitRPhitolerance = 0.032, + maxChi2 = dict( + enabled = True, + pt1 = 0.7, + pt2 = 2, + value1 = 200, + value2 = 50 + ) ) #Filter hiConformalPixelTracksPhase1Filter = hiConformalPixelFilter.clone( - VertexCollection = "offlinePrimaryVertices", - chi2 = 999.9, - lipMax = 999.0, - nSigmaLipMaxTolerance = 999.9, - nSigmaTipMaxTolerance = 999.0, - ptMax = 999999, - ptMin = 0.30, - tipMax = 999.0 + VertexCollection = "offlinePrimaryVertices", + chi2 = 999.9, + lipMax = 999.0, + nSigmaLipMaxTolerance = 999.9, + nSigmaTipMaxTolerance = 999.0, + ptMax = 999999, + ptMin = 0.30, + tipMax = 999.0 ) from Configuration.Eras.Modifier_phase1Pixel_cff import phase1Pixel phase1Pixel.toModify(hiConformalPixelTracks, Cleaner = 'pixelTrackCleanerBySharedHits', - Filter = "hiConformalPixelTracksPhase1Filter", - Fitter = "pixelFitterByConformalMappingAndLine", + Filter = "hiConformalPixelTracksPhase1Filter", + Fitter = "pixelFitterByConformalMappingAndLine", SeedingHitSets = "hiConformalPixelTracksPhase1HitQuadrupletsCA", ) diff --git a/RecoHI/HiTracking/python/HIPixel3PrimTracks_cfi.py b/RecoHI/HiTracking/python/HIPixel3PrimTracks_cfi.py index dd270b9469fc0..bce23461ace34 100644 --- a/RecoHI/HiTracking/python/HIPixel3PrimTracks_cfi.py +++ b/RecoHI/HiTracking/python/HIPixel3PrimTracks_cfi.py @@ -15,10 +15,10 @@ # Hit ntuplets hiPixel3PrimTracksHitDoublets = _hitPairEDProducer.clone( - clusterCheck = "", - seedingLayers = "PixelLayerTriplets", + clusterCheck = "", + seedingLayers = "PixelLayerTriplets", trackingRegions = "hiTrackingRegionWithVertex", - maxElement = 50000000, + maxElement = 50000000, produceIntermediateHitDoublets = True, ) from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 @@ -28,29 +28,29 @@ hiPixel3PrimTracksHitTriplets = _pixelTripletHLTEDProducer.clone( - doublets = "hiPixel3PrimTracksHitDoublets", + doublets = "hiPixel3PrimTracksHitDoublets", maxElement = 1000000, # increase threshold for triplets in generation step (default: 100000) produceSeedingHitSets = True, produceIntermediateHitTriplets = True, ) from RecoPixelVertexing.PixelTriplets.caHitQuadrupletEDProducer_cfi import caHitQuadrupletEDProducer as _caHitQuadrupletEDProducer -hiPixel3PrimTracksHitDoubletsCA = hiPixel3PrimTracksHitDoublets.clone() -hiPixel3PrimTracksHitDoubletsCA.layerPairs = [0,1,2] - +hiPixel3PrimTracksHitDoubletsCA = hiPixel3PrimTracksHitDoublets.clone( + layerPairs = [0,1,2] +) hiPixel3PrimTracksHitQuadrupletsCA = _caHitQuadrupletEDProducer.clone( doublets = "hiPixel3PrimTracksHitDoubletsCA", extraHitRPhitolerance = hiPixel3PrimTracksHitTriplets.extraHitRPhitolerance, - SeedComparitorPSet = hiPixel3PrimTracksHitTriplets.SeedComparitorPSet, + SeedComparitorPSet = hiPixel3PrimTracksHitTriplets.SeedComparitorPSet, maxChi2 = dict( pt1 = 0.7, pt2 = 2, value1 = 200, value2 = 50, ), useBendingCorrection = True, - fitFastCircle = True, + fitFastCircle = True, fitFastCircleChi2Cut = True, CAThetaCut = 0.0012, - CAPhiCut = 0.2, + CAPhiCut = 0.2, ) # Pixel tracks @@ -71,7 +71,7 @@ Cleaner = cms.string("trackCleaner") ) trackingPhase1.toModify(hiPixel3PrimTracks, - SeedingHitSets = cms.InputTag("hiPixel3PrimTracksHitQuadrupletsCA"), + SeedingHitSets = "hiPixel3PrimTracksHitQuadrupletsCA", ) hiPixel3PrimTracksTask = cms.Task( diff --git a/RecoHI/HiTracking/python/HIPixelVerticesPreSplitting_cff.py b/RecoHI/HiTracking/python/HIPixelVerticesPreSplitting_cff.py index cba3bf144b0a7..2accd161f15af 100644 --- a/RecoHI/HiTracking/python/HIPixelVerticesPreSplitting_cff.py +++ b/RecoHI/HiTracking/python/HIPixelVerticesPreSplitting_cff.py @@ -2,48 +2,62 @@ from RecoHI.HiTracking.HIPixelVertices_cff import * -hiPixelClusterVertexPreSplitting = hiPixelClusterVertex.clone( pixelRecHits=cms.string("siPixelRecHitsPreSplitting") ) +hiPixelClusterVertexPreSplitting = hiPixelClusterVertex.clone( + pixelRecHits = "siPixelRecHitsPreSplitting" +) hiProtoTrackFilterPreSplitting = hiProtoTrackFilter.clone( siPixelRecHits = "siPixelRecHitsPreSplitting" ) -hiPixel3ProtoTracksTrackingRegionsPreSplitting = hiTrackingRegionFromClusterVtx.clone(RegionPSet=dict( - siPixelRecHits = "siPixelRecHitsPreSplitting", - VertexCollection = "hiPixelClusterVertexPreSplitting" -)) +hiPixel3ProtoTracksTrackingRegionsPreSplitting = hiTrackingRegionFromClusterVtx.clone( + RegionPSet = dict( + siPixelRecHits = "siPixelRecHitsPreSplitting", + VertexCollection = "hiPixelClusterVertexPreSplitting" + ) +) + hiPixel3PRotoTracksHitDoubletsPreSplitting = hiPixel3ProtoTracksHitDoublets.clone( seedingLayers = "PixelLayerTripletsPreSplitting", trackingRegions = "hiPixel3ProtoTracksTrackingRegionsPreSplitting", ) + hiPixel3ProtoTracksHitTripletsPreSplitting = hiPixel3ProtoTracksHitTriplets.clone( doublets = "hiPixel3PRotoTracksHitDoubletsPreSplitting" ) hiPixel3ProtoTracksPreSplitting = hiPixel3ProtoTracks.clone( SeedingHitSets = "hiPixel3ProtoTracksHitTripletsPreSplitting", - Filter = "hiProtoTrackFilterPreSplitting", + Filter = "hiProtoTrackFilterPreSplitting", +) + +hiPixelMedianVertexPreSplitting = hiPixelMedianVertex.clone( + TrackCollection = 'hiPixel3ProtoTracksPreSplitting' ) -hiPixelMedianVertexPreSplitting = hiPixelMedianVertex.clone( TrackCollection = cms.InputTag('hiPixel3ProtoTracksPreSplitting') ) hiSelectedProtoTracksPreSplitting = hiSelectedProtoTracks.clone( - src = cms.InputTag("hiPixel3ProtoTracksPreSplitting"), - VertexCollection = cms.InputTag("hiPixelMedianVertexPreSplitting") + src = "hiPixel3ProtoTracksPreSplitting", + VertexCollection = "hiPixelMedianVertexPreSplitting" ) + hiPixelAdaptiveVertexPreSplitting = hiPixelAdaptiveVertex.clone( - TrackLabel = cms.InputTag("hiSelectedProtoTracksPreSplitting") + TrackLabel = "hiSelectedProtoTracksPreSplitting" +) + +hiBestAdaptiveVertexPreSplitting = hiBestAdaptiveVertex.clone( + src = "hiPixelAdaptiveVertexPreSplitting" ) -hiBestAdaptiveVertexPreSplitting = hiBestAdaptiveVertex.clone( src = cms.InputTag("hiPixelAdaptiveVertexPreSplitting") ) + hiSelectedVertexPreSplitting = hiSelectedPixelVertex.clone( - adaptiveVertexCollection = cms.InputTag("hiBestAdaptiveVertexPreSplitting"), - medianVertexCollection = cms.InputTag("hiPixelMedianVertexPreSplitting") + adaptiveVertexCollection = "hiBestAdaptiveVertexPreSplitting", + medianVertexCollection = "hiPixelMedianVertexPreSplitting" ) bestHiVertexPreSplittingTask = cms.Task( hiBestAdaptiveVertexPreSplitting , hiSelectedVertexPreSplitting ) -PixelLayerTripletsPreSplitting = PixelLayerTriplets.clone() -PixelLayerTripletsPreSplitting.FPix.HitProducer = 'siPixelRecHitsPreSplitting' -PixelLayerTripletsPreSplitting.BPix.HitProducer = 'siPixelRecHitsPreSplitting' - +PixelLayerTripletsPreSplitting = PixelLayerTriplets.clone( + FPix = dict(HitProducer = 'siPixelRecHitsPreSplitting'), + BPix = dict(HitProducer = 'siPixelRecHitsPreSplitting') +) hiPixelVerticesPreSplittingTask = cms.Task(hiPixelClusterVertexPreSplitting , PixelLayerTripletsPreSplitting , hiPixel3ProtoTracksTrackingRegionsPreSplitting diff --git a/RecoHI/HiTracking/python/HISelectedTracks_cfi.py b/RecoHI/HiTracking/python/HISelectedTracks_cfi.py index d36776dbe3f49..09257dd05175f 100644 --- a/RecoHI/HiTracking/python/HISelectedTracks_cfi.py +++ b/RecoHI/HiTracking/python/HISelectedTracks_cfi.py @@ -5,48 +5,50 @@ # Track selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiInitialStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiGlobalPrimTracks', - useAnyMVA = cms.bool(True), - GBRForestLabel = cms.string('HIMVASelectorIter4'), - GBRForestVars = cms.vstring(['chi2perdofperlayer', 'dxyperdxyerror', 'dzperdzerror', 'nhits', 'nlayers', 'eta']), + src ='hiGlobalPrimTracks', + useAnyMVA = True, + GBRForestLabel = 'HIMVASelectorIter4', + GBRForestVars = ['chi2perdofperlayer', 'dxyperdxyerror', 'dzperdzerror', 'nhits', 'nlayers', 'eta'], trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiInitialStepLoose', - useMVA = cms.bool(False) - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiInitialStepTight', - preFilterName = 'hiInitialStepLoose', - useMVA = cms.bool(True), - minMVA = cms.double(-0.77) - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiInitialStep', - preFilterName = 'hiInitialStepTight', - useMVA = cms.bool(True), - minMVA = cms.double(-0.77) - ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiInitialStepLoose', + useMVA = False + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiInitialStepTight', + preFilterName = 'hiInitialStepLoose', + useMVA = True, + minMVA = -0.77 + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiInitialStep', + preFilterName = 'hiInitialStepTight', + useMVA = True, + minMVA = -0.77 + ), ) #end of vpset - ) #end of clone +) #end of clone from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiInitialStepSelector, useAnyMVA = cms.bool(False)) -trackingPhase1.toModify(hiInitialStepSelector, trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiInitialStepLoose', - useMVA = cms.bool(False) - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiInitialStepTight', - preFilterName = 'hiInitialStepLoose', - useMVA = cms.bool(False), - minMVA = cms.double(-0.77) - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiInitialStep', - preFilterName = 'hiInitialStepTight', - useMVA = cms.bool(False), - minMVA = cms.double(-0.77) - ), +trackingPhase1.toModify(hiInitialStepSelector, + useAnyMVA = False, + trackSelectors= cms.VPSet( + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiInitialStepLoose', + useMVA = False + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiInitialStepTight', + preFilterName = 'hiInitialStepLoose', + useMVA = False, + minMVA = -0.77 + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiInitialStep', + preFilterName = 'hiInitialStepTight', + useMVA = False, + minMVA = -0.77 + + ), ) #end of vpset ) @@ -56,13 +58,13 @@ from RecoTracker.FinalTrackSelectors.trackAlgoPriorityOrder_cfi import trackAlgoPriorityOrder import RecoTracker.FinalTrackSelectors.trackListMerger_cfi hiSelectedTracks = RecoTracker.FinalTrackSelectors.trackListMerger_cfi.trackListMerger.clone( - TrackProducers = cms.VInputTag(cms.InputTag('hiGlobalPrimTracks')), - hasSelector=cms.vint32(1), - selectedTrackQuals = cms.VInputTag(cms.InputTag("hiInitialStepSelector","hiInitialStep")), - copyExtras = True, - copyMVA = cms.bool(True), - makeReKeyedSeeds = cms.untracked.bool(False) - ) + TrackProducers = ['hiGlobalPrimTracks'], + hasSelector = [1], + selectedTrackQuals = ["hiInitialStepSelector:hiInitialStep"], + copyExtras = True, + copyMVA = True, + makeReKeyedSeeds = cms.untracked.bool(False) +) #complete sequence hiTracksWithQualityTask = cms.Task(hiInitialStepSelector diff --git a/RecoHI/HiTracking/python/HITrackingRegionProducer_cfi.py b/RecoHI/HiTracking/python/HITrackingRegionProducer_cfi.py index 77394580de01c..f05260aa9d5bd 100644 --- a/RecoHI/HiTracking/python/HITrackingRegionProducer_cfi.py +++ b/RecoHI/HiTracking/python/HITrackingRegionProducer_cfi.py @@ -3,18 +3,18 @@ # global tracking region for primary pixel tracks from RecoTracker.TkTrackingRegions.globalTrackingRegionWithVertices_cfi import globalTrackingRegionWithVertices as _globalTrackingRegionWithVertices hiTrackingRegionWithVertex = _globalTrackingRegionWithVertices.clone(RegionPSet = dict( - ptMin = cms.double(1.5), - originRadius = cms.double(0.2), - nSigmaZ = cms.double(3.0), - beamSpot = cms.InputTag("offlineBeamSpot"), - precise = cms.bool(True), - useMultipleScattering = cms.bool(False), - useFakeVertices = cms.bool(False), - useFoundVertices = cms.bool(True), - VertexCollection = cms.InputTag("hiSelectedPixelVertex"), - useFixedError = cms.bool(True), - fixedError = cms.double(0.2), - sigmaZVertex = cms.double(3.0) + ptMin = 1.5, + originRadius = 0.2, + nSigmaZ = 3.0, + beamSpot = "offlineBeamSpot", + precise = True, + useMultipleScattering = False, + useFakeVertices = False, + useFoundVertices = True, + VertexCollection = "hiSelectedPixelVertex", + useFixedError = True, + fixedError = 0.2, + sigmaZVertex = 3.0 )) # global tracking region for low-pt pixel tracks @@ -55,10 +55,11 @@ # limited jet-seeded tracking region from RecoTauTag.HLTProducers.TauRegionalPixelSeedGenerator_cfi import tauRegionalPixelSeedGenerator -HiTrackingRegionFactoryFromJetsBlock = tauRegionalPixelSeedGenerator.RegionFactoryPSet -HiTrackingRegionFactoryFromJetsBlock.RegionPSet.JetSrc = cms.InputTag("iterativeConePu5CaloJets") -HiTrackingRegionFactoryFromJetsBlock.RegionPSet.vertexSrc = cms.InputTag("hiSelectedPixelVertex") - +HiTrackingRegionFactoryFromJetsBlock = tauRegionalPixelSeedGenerator.RegionFactoryPSet.clone( + RegionPSet = dict( + JetSrc = "iterativeConePu5CaloJets", + vertexSrc = "hiSelectedPixelVertex") +) # limited stand-alone muon-seeded tracking region from RecoMuon.TrackingTools.MuonServiceProxy_cff import MuonServiceProxy from RecoMuon.GlobalTrackingTools.MuonTrackingRegionCommon_cff import MuonTrackingRegionCommon diff --git a/RecoHI/HiTracking/python/HiTracking_cff.py b/RecoHI/HiTracking/python/HiTracking_cff.py index ee46a111b4c15..49e6f9440a9f3 100644 --- a/RecoHI/HiTracking/python/HiTracking_cff.py +++ b/RecoHI/HiTracking/python/HiTracking_cff.py @@ -16,14 +16,14 @@ from RecoHI.HiMuonAlgos.hiMuonIterativeTk_cff import * -hiJetsForCoreTracking.cut = cms.string("pt > 100 && abs(eta) < 2.4") -hiJetCoreRegionalStepSeeds.RegionFactoryPSet.RegionPSet.ptMin = cms.double( 10. ) +hiJetsForCoreTracking.cut = "pt > 100 && abs(eta) < 2.4" +hiJetCoreRegionalStepSeeds.RegionFactoryPSet.RegionPSet.ptMin = 10. hiJetCoreRegionalStepTrajectoryFilter.minPt = 10.0 -siPixelClusters.ptMin = cms.double(100) -siPixelClusters.deltaRmax = cms.double(0.1) +siPixelClusters.ptMin = 100 +siPixelClusters.deltaRmax = 0.1 from RecoJets.JetAssociationProducers.trackExtrapolator_cfi import * -trackExtrapolator.trackSrc = cms.InputTag("hiGeneralTracks") +trackExtrapolator.trackSrc = "hiGeneralTracks" hiTracking_noRegitMuTask = cms.Task( hiBasicTrackingTask diff --git a/RecoHI/HiTracking/python/MergeRegitTrackCollectionsHI_cff.py b/RecoHI/HiTracking/python/MergeRegitTrackCollectionsHI_cff.py index 61b9f0bd580ed..766ba040aee1d 100644 --- a/RecoHI/HiTracking/python/MergeRegitTrackCollectionsHI_cff.py +++ b/RecoHI/HiTracking/python/MergeRegitTrackCollectionsHI_cff.py @@ -3,19 +3,19 @@ from RecoTracker.FinalTrackSelectors.trackAlgoPriorityOrder_cfi import trackAlgoPriorityOrder import RecoTracker.FinalTrackSelectors.trackListMerger_cfi hiRegitTracks = RecoTracker.FinalTrackSelectors.trackListMerger_cfi.trackListMerger.clone( - TrackProducers = (cms.InputTag('hiRegitInitialStepTracks'), - cms.InputTag('hiRegitLowPtTripletStepTracks'), - cms.InputTag('hiRegitPixelPairStepTracks'), - cms.InputTag('hiRegitDetachedTripletStepTracks'), - cms.InputTag('hiRegitMixedTripletStepTracks')), - hasSelector=cms.vint32(1,1,1,1,1), - selectedTrackQuals = cms.VInputTag( - cms.InputTag("hiRegitInitialStepSelector","hiRegitInitialStep"), - cms.InputTag("hiRegitLowPtTripletStepSelector","hiRegitLowPtTripletStep"), - cms.InputTag("hiRegitPixelPairStepSelector","hiRegitPixelPairStep"), - cms.InputTag("hiRegitDetachedTripletStepSelector","hiRegitDetachedTripletStep"), - cms.InputTag("hiRegitMixedTripletStepSelector","hiRegitMixedTripletStep"), - ), + TrackProducers = ['hiRegitInitialStepTracks', + 'hiRegitLowPtTripletStepTracks', + 'hiRegitPixelPairStepTracks', + 'hiRegitDetachedTripletStepTracks', + 'hiRegitMixedTripletStepTracks' + ], + hasSelector = [1,1,1,1,1], + selectedTrackQuals = ["hiRegitInitialStepSelector:hiRegitInitialStep", + "hiRegitLowPtTripletStepSelector:hiRegitLowPtTripletStep", + "hiRegitPixelPairStepSelector:hiRegitPixelPairStep", + "hiRegitDetachedTripletStepSelector:hiRegitDetachedTripletStep", + "hiRegitMixedTripletStepSelector:hiRegitMixedTripletStep" + ], setsToMerge = cms.VPSet( cms.PSet( tLists=cms.vint32(0,1,2,3,4,5), pQual=cms.bool(True)), # should this be False? ), copyExtras = True, diff --git a/RecoHI/HiTracking/python/MergeTrackCollectionsHI_cff.py b/RecoHI/HiTracking/python/MergeTrackCollectionsHI_cff.py index d30b20b3c54f2..728ec72ca1778 100644 --- a/RecoHI/HiTracking/python/MergeTrackCollectionsHI_cff.py +++ b/RecoHI/HiTracking/python/MergeTrackCollectionsHI_cff.py @@ -2,19 +2,18 @@ import RecoTracker.FinalTrackSelectors.trackListMerger_cfi hiGeneralTracksNoRegitMu = RecoTracker.FinalTrackSelectors.trackListMerger_cfi.trackListMerger.clone( - TrackProducers = (cms.InputTag('hiGlobalPrimTracks'), - cms.InputTag('hiDetachedTripletStepTracks'), - cms.InputTag('hiLowPtTripletStepTracks'), - cms.InputTag('hiPixelPairGlobalPrimTracks'), - cms.InputTag('hiJetCoreRegionalStepTracks') - ), - hasSelector=cms.vint32(1,1,1,1,1), - selectedTrackQuals = cms.VInputTag( - cms.InputTag("hiInitialStepSelector","hiInitialStep"), - cms.InputTag("hiDetachedTripletStepSelector","hiDetachedTripletStep"), - cms.InputTag("hiLowPtTripletStepSelector","hiLowPtTripletStep"), - cms.InputTag("hiPixelPairStepSelector","hiPixelPairStep"), - ), + TrackProducers = ['hiGlobalPrimTracks', + 'hiDetachedTripletStepTracks', + 'hiLowPtTripletStepTracks', + 'hiPixelPairGlobalPrimTracks', + 'hiJetCoreRegionalStepTracks' + ], + hasSelector = [1,1,1,1,1], + selectedTrackQuals = ["hiInitialStepSelector:hiInitialStep", + "hiDetachedTripletStepSelector:hiDetachedTripletStep", + "hiLowPtTripletStepSelector:hiLowPtTripletStep", + "hiPixelPairStepSelector:hiPixelPairStep" + ], setsToMerge = cms.VPSet( cms.PSet( tLists=cms.vint32(0,1,2,3), pQual=cms.bool(True)), # should this be False? ), copyExtras = True, @@ -22,102 +21,99 @@ ) from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 trackingPhase1.toModify(hiGeneralTracksNoRegitMu, - TrackProducers = (cms.InputTag('hiGlobalPrimTracks'), - cms.InputTag('hiLowPtQuadStepTracks'), - cms.InputTag('hiHighPtTripletStepTracks'), - cms.InputTag('hiDetachedQuadStepTracks'), - cms.InputTag('hiDetachedTripletStepTracks'), - cms.InputTag('hiLowPtTripletStepTracks'), - cms.InputTag('hiPixelPairGlobalPrimTracks'), - cms.InputTag('hiJetCoreRegionalStepTracks') - ), - hasSelector=cms.vint32(1,1,1,1,1,1,1,1), + TrackProducers = ['hiGlobalPrimTracks', + 'hiLowPtQuadStepTracks', + 'hiHighPtTripletStepTracks', + 'hiDetachedQuadStepTracks', + 'hiDetachedTripletStepTracks', + 'hiLowPtTripletStepTracks', + 'hiPixelPairGlobalPrimTracks', + 'hiJetCoreRegionalStepTracks' + ], + hasSelector = [1,1,1,1,1,1,1,1], setsToMerge = cms.VPSet( cms.PSet( tLists=cms.vint32(0,1,2,3,4,5,6), pQual=cms.bool(True))), - selectedTrackQuals = cms.VInputTag( - cms.InputTag("hiInitialStepSelector","hiInitialStep"), - cms.InputTag("hiLowPtQuadStepSelector","hiLowPtQuadStep"), - cms.InputTag("hiHighPtTripletStepSelector","hiHighPtTripletStep"), - cms.InputTag("hiDetachedQuadStepSelector","hiDetachedQuadStep"), - cms.InputTag("hiDetachedTripletStepSelector","hiDetachedTripletStep"), - cms.InputTag("hiLowPtTripletStepSelector","hiLowPtTripletStep"), - cms.InputTag("hiPixelPairStepSelector","hiPixelPairStep"), - ) -) + selectedTrackQuals = ["hiInitialStepSelector:hiInitialStep", + "hiLowPtQuadStepSelector:hiLowPtQuadStep", + "hiHighPtTripletStepSelector:hiHighPtTripletStep", + "hiDetachedQuadStepSelector:hiDetachedQuadStep", + "hiDetachedTripletStepSelector:hiDetachedTripletStep", + "hiLowPtTripletStepSelector:hiLowPtTripletStep", + "hiPixelPairStepSelector:hiPixelPairStep" + ], +) hiGeneralTracks = RecoTracker.FinalTrackSelectors.trackListMerger_cfi.trackListMerger.clone( - TrackProducers = (cms.InputTag('hiGlobalPrimTracks'), - cms.InputTag('hiDetachedTripletStepTracks'), - cms.InputTag('hiLowPtTripletStepTracks'), - cms.InputTag('hiPixelPairGlobalPrimTracks'), - cms.InputTag('hiJetCoreRegionalStepTracks'), - cms.InputTag('hiRegitMuInitialStepTracks'), - cms.InputTag('hiRegitMuPixelPairStepTracks'), - cms.InputTag('hiRegitMuMixedTripletStepTracks'), - cms.InputTag('hiRegitMuPixelLessStepTracks'), - cms.InputTag('hiRegitMuDetachedTripletStepTracks'), - cms.InputTag('hiRegitMuonSeededTracksOutIn'), - cms.InputTag('hiRegitMuonSeededTracksInOut') - ), - hasSelector=cms.vint32(1,1,1,1,1,1,1,1,1,1,1,1), - selectedTrackQuals = cms.VInputTag( - cms.InputTag("hiInitialStepSelector","hiInitialStep"), - cms.InputTag("hiDetachedTripletStepSelector","hiDetachedTripletStep"), - cms.InputTag("hiLowPtTripletStepSelector","hiLowPtTripletStep"), - cms.InputTag("hiPixelPairStepSelector","hiPixelPairStep"), - cms.InputTag("hiJetCoreRegionalStepSelector","hiJetCoreRegionalStep"), - cms.InputTag("hiRegitMuInitialStepSelector","hiRegitMuInitialStepLoose"), - cms.InputTag("hiRegitMuPixelPairStepSelector","hiRegitMuPixelPairStep"), - cms.InputTag("hiRegitMuMixedTripletStepSelector","hiRegitMuMixedTripletStep"), - cms.InputTag("hiRegitMuPixelLessStepSelector","hiRegitMuPixelLessStep"), - cms.InputTag("hiRegitMuDetachedTripletStepSelector","hiRegitMuDetachedTripletStep"), - cms.InputTag("hiRegitMuonSeededTracksOutInSelector","hiRegitMuonSeededTracksOutInHighPurity"), - cms.InputTag("hiRegitMuonSeededTracksInOutSelector","hiRegitMuonSeededTracksInOutHighPurity") - ), + TrackProducers = ['hiGlobalPrimTracks', + 'hiDetachedTripletStepTracks', + 'hiLowPtTripletStepTracks', + 'hiPixelPairGlobalPrimTracks', + 'hiJetCoreRegionalStepTracks', + 'hiRegitMuInitialStepTracks', + 'hiRegitMuPixelPairStepTracks', + 'hiRegitMuMixedTripletStepTracks', + 'hiRegitMuPixelLessStepTracks', + 'hiRegitMuDetachedTripletStepTracks', + 'hiRegitMuonSeededTracksOutIn', + 'hiRegitMuonSeededTracksInOut' + ], + hasSelector = [1,1,1,1,1,1,1,1,1,1,1,1], + selectedTrackQuals = ["hiInitialStepSelector:hiInitialStep", + "hiDetachedTripletStepSelector:hiDetachedTripletStep", + "hiLowPtTripletStepSelector:hiLowPtTripletStep", + "hiPixelPairStepSelector:hiPixelPairStep", + "hiJetCoreRegionalStepSelector:hiJetCoreRegionalStep", + "hiRegitMuInitialStepSelector:hiRegitMuInitialStepLoose", + "hiRegitMuPixelPairStepSelector:hiRegitMuPixelPairStep", + "hiRegitMuMixedTripletStepSelector:hiRegitMuMixedTripletStep", + "hiRegitMuPixelLessStepSelector:hiRegitMuPixelLessStep", + "hiRegitMuDetachedTripletStepSelector:hiRegitMuDetachedTripletStep", + "hiRegitMuonSeededTracksOutInSelector:hiRegitMuonSeededTracksOutInHighPurity", + "hiRegitMuonSeededTracksInOutSelector:hiRegitMuonSeededTracksInOutHighPurity" + ], setsToMerge = cms.VPSet( cms.PSet( tLists=cms.vint32(0,1,2,3,4,5,6,7,8,9,10,11), pQual=cms.bool(True)), # should this be False? ), copyExtras = True, makeReKeyedSeeds = cms.untracked.bool(False) ) trackingPhase1.toModify(hiGeneralTracks, - TrackProducers = (cms.InputTag('hiGlobalPrimTracks'), - cms.InputTag('hiLowPtQuadStepTracks'), - cms.InputTag('hiHighPtTripletStepTracks'), - cms.InputTag('hiDetachedQuadStepTracks'), - cms.InputTag('hiDetachedTripletStepTracks'), - cms.InputTag('hiLowPtTripletStepTracks'), - cms.InputTag('hiPixelPairGlobalPrimTracks'), - cms.InputTag('hiMixedTripletStepTracks'), - cms.InputTag('hiPixelLessStepTracks'), - cms.InputTag('hiTobTecStepTracks'), - cms.InputTag('hiJetCoreRegionalStepTracks'), - cms.InputTag('hiRegitMuInitialStepTracks'), - cms.InputTag('hiRegitMuPixelPairStepTracks'), - cms.InputTag('hiRegitMuMixedTripletStepTracks'), - cms.InputTag('hiRegitMuPixelLessStepTracks'), - cms.InputTag('hiRegitMuDetachedTripletStepTracks'), - cms.InputTag('hiRegitMuonSeededTracksOutIn'), - cms.InputTag('hiRegitMuonSeededTracksInOut') - ), - hasSelector=cms.vint32(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1), + TrackProducers = ['hiGlobalPrimTracks', + 'hiLowPtQuadStepTracks', + 'hiHighPtTripletStepTracks', + 'hiDetachedQuadStepTracks', + 'hiDetachedTripletStepTracks', + 'hiLowPtTripletStepTracks', + 'hiPixelPairGlobalPrimTracks', + 'hiMixedTripletStepTracks', + 'hiPixelLessStepTracks', + 'hiTobTecStepTracks', + 'hiJetCoreRegionalStepTracks', + 'hiRegitMuInitialStepTracks', + 'hiRegitMuPixelPairStepTracks', + 'hiRegitMuMixedTripletStepTracks', + 'hiRegitMuPixelLessStepTracks', + 'hiRegitMuDetachedTripletStepTracks', + 'hiRegitMuonSeededTracksOutIn', + 'hiRegitMuonSeededTracksInOut' + ], + hasSelector = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], setsToMerge = cms.VPSet( cms.PSet( tLists=cms.vint32(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17), pQual=cms.bool(True))), # should this be False? - selectedTrackQuals = cms.VInputTag( - cms.InputTag("hiInitialStepSelector","hiInitialStep"), - cms.InputTag("hiLowPtQuadStepSelector","hiLowPtQuadStep"), - cms.InputTag("hiHighPtTripletStepSelector","hiHighPtTripletStep"), - cms.InputTag("hiDetachedQuadStepSelector","hiDetachedQuadStep"), - cms.InputTag("hiDetachedTripletStepSelector","hiDetachedTripletStep"), - cms.InputTag("hiLowPtTripletStepSelector","hiLowPtTripletStep"), - cms.InputTag("hiPixelPairStepSelector","hiPixelPairStep"), - cms.InputTag("hiMixedTripletStepSelector","hiMixedTripletStep"), - cms.InputTag("hiPixelLessStepSelector","hiPixelLessStep"), - cms.InputTag("hiTobTecStepSelector","hiTobTecStep"), - cms.InputTag("hiJetCoreRegionalStepSelector","hiJetCoreRegionalStep"), - cms.InputTag("hiRegitMuInitialStepSelector","hiRegitMuInitialStepLoose"), - cms.InputTag("hiRegitMuPixelPairStepSelector","hiRegitMuPixelPairStep"), - cms.InputTag("hiRegitMuMixedTripletStepSelector","hiRegitMuMixedTripletStep"), - cms.InputTag("hiRegitMuPixelLessStepSelector","hiRegitMuPixelLessStep"), - cms.InputTag("hiRegitMuDetachedTripletStepSelector","hiRegitMuDetachedTripletStep"), - cms.InputTag("hiRegitMuonSeededTracksOutInSelector","hiRegitMuonSeededTracksOutInHighPurity"), - cms.InputTag("hiRegitMuonSeededTracksInOutSelector","hiRegitMuonSeededTracksInOutHighPurity") - ) -) + selectedTrackQuals = ["hiInitialStepSelector:hiInitialStep", + "hiLowPtQuadStepSelector:hiLowPtQuadStep", + "hiHighPtTripletStepSelector:hiHighPtTripletStep", + "hiDetachedQuadStepSelector:hiDetachedQuadStep", + "hiDetachedTripletStepSelector:hiDetachedTripletStep", + "hiLowPtTripletStepSelector:hiLowPtTripletStep", + "hiPixelPairStepSelector:hiPixelPairStep", + "hiMixedTripletStepSelector:hiMixedTripletStep", + "hiPixelLessStepSelector:hiPixelLessStep", + "hiTobTecStepSelector:hiTobTecStep", + "hiJetCoreRegionalStepSelector:hiJetCoreRegionalStep", + "hiRegitMuInitialStepSelector:hiRegitMuInitialStepLoose", + "hiRegitMuPixelPairStepSelector:hiRegitMuPixelPairStep", + "hiRegitMuMixedTripletStepSelector:hiRegitMuMixedTripletStep", + "hiRegitMuPixelLessStepSelector:hiRegitMuPixelLessStep", + "hiRegitMuDetachedTripletStepSelector:hiRegitMuDetachedTripletStep", + "hiRegitMuonSeededTracksOutInSelector:hiRegitMuonSeededTracksOutInHighPurity", + "hiRegitMuonSeededTracksInOutSelector:hiRegitMuonSeededTracksInOutHighPurity" + ], +) diff --git a/RecoHI/HiTracking/python/hiDetachedQuadStep_cff.py b/RecoHI/HiTracking/python/hiDetachedQuadStep_cff.py index 1375e95e77986..f1aa1036b9626 100644 --- a/RecoHI/HiTracking/python/hiDetachedQuadStep_cff.py +++ b/RecoHI/HiTracking/python/hiDetachedQuadStep_cff.py @@ -23,10 +23,10 @@ # SEEDING LAYERS # Using 4 layers layerlist -hiDetachedQuadStepSeedLayers = hiPixelLayerQuadruplets.clone() -hiDetachedQuadStepSeedLayers.BPix.skipClusters = cms.InputTag('hiDetachedQuadStepClusters') -hiDetachedQuadStepSeedLayers.FPix.skipClusters = cms.InputTag('hiDetachedQuadStepClusters') - +hiDetachedQuadStepSeedLayers = hiPixelLayerQuadruplets.clone( + BPix = dict(skipClusters = cms.InputTag('hiDetachedQuadStepClusters')), + FPix = dict(skipClusters = cms.InputTag('hiDetachedQuadStepClusters')) +) # SEEDS from RecoTracker.TkTrackingRegions.globalTrackingRegionWithVertices_cfi import globalTrackingRegionWithVertices as _globalTrackingRegionWithVertices from RecoTracker.TkHitPairs.hitPairEDProducer_cfi import hitPairEDProducer as _hitPairEDProducer @@ -37,7 +37,7 @@ from RecoHI.HiTracking.HIPixelTrackFilter_cff import * from RecoHI.HiTracking.HITrackingRegionProducer_cfi import * -hiDetachedQuadStepTrackingRegions = _globalTrackingRegionWithVertices.clone(RegionPSet=dict( +hiDetachedQuadStepTrackingRegions = _globalTrackingRegionWithVertices.clone(RegionPSet = dict( precise = True, useMultipleScattering = False, useFakeVertices = False, @@ -51,8 +51,8 @@ useFoundVertices = True, #originHalfLength = 15.0, # 15 for pp, useTrackingRegionWithVertices, does not have this parameter. Only with BeamSpot originRadius = 1.5 # 1.5 for pp - -)) + ) +) hiDetachedQuadStepTracksHitDoubletsCA = _hitPairEDProducer.clone( clusterCheck = "", seedingLayers = "hiDetachedQuadStepSeedLayers", @@ -103,39 +103,38 @@ import RecoPixelVertexing.PixelLowPtUtilities.TrackSeeds_cfi hiDetachedQuadStepSeeds = RecoPixelVertexing.PixelLowPtUtilities.TrackSeeds_cfi.pixelTrackSeeds.clone( - InputCollection = 'hiDetachedQuadStepPixelTracks' - ) + InputCollection = 'hiDetachedQuadStepPixelTracks' +) # QUALITY CUTS DURING TRACK BUILDING import TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff hiDetachedQuadStepTrajectoryFilter = TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff.CkfBaseTrajectoryFilter_block.clone( #maxLostHits = 1, minimumNumberOfHits = 3,#3 for pp - minPt = cms.double(0.075),# 0.075 for pp - #constantValueForLostHitsFractionFilter = cms.double(0.701) - ) + minPt = 0.075,# 0.075 for pp + #constantValueForLostHitsFractionFilter = 0.701 +) import TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi hiDetachedQuadStepChi2Est = TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi.Chi2MeasurementEstimator.clone( - ComponentName = cms.string('hiDetachedQuadStepChi2Est'), - nSigma = cms.double(3.0), - MaxChi2 = cms.double(9.0) - ) - + ComponentName = 'hiDetachedQuadStepChi2Est', + nSigma = 3.0, + MaxChi2 = 9.0 +) # TRACK BUILDING import RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi hiDetachedQuadStepTrajectoryBuilder = RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi.GroupedCkfTrajectoryBuilder.clone( MeasurementTrackerName = '', - trajectoryFilter = cms.PSet(refToPSet_ = cms.string('hiDetachedQuadStepTrajectoryFilter')), + trajectoryFilter = dict(refToPSet_ = 'hiDetachedQuadStepTrajectoryFilter'), maxCand = 4,#4 for pp - estimator = cms.string('hiDetachedQuadStepChi2Est'), + estimator = 'hiDetachedQuadStepChi2Est', maxDPhiForLooperReconstruction = cms.double(2.0),#2.0 for pp # 0.63 GeV is the maximum pT for a charged particle to loop within the 1.1m radius # of the outermost Tracker barrel layer (B=3.8T) maxPtForLooperReconstruction = cms.double(0.7),# 0.7 for pp - alwaysUseInvalidHits = cms.bool(False) - ) + alwaysUseInvalidHits = False +) # MAKING OF TRACK CANDIDATES @@ -143,88 +142,89 @@ import RecoTracker.CkfPattern.CkfTrackCandidates_cfi hiDetachedQuadStepTrackCandidates = RecoTracker.CkfPattern.CkfTrackCandidates_cfi.ckfTrackCandidates.clone( - src = cms.InputTag('hiDetachedQuadStepSeeds'), + src = 'hiDetachedQuadStepSeeds', ### these two parameters are relevant only for the CachingSeedCleanerBySharedInput numHitsForSeedCleaner = cms.int32(50), onlyPixelHitsForSeedCleaner = cms.bool(True), - TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('hiDetachedQuadStepTrajectoryBuilder')), - TrajectoryBuilder = cms.string('hiDetachedQuadStepTrajectoryBuilder'), + TrajectoryBuilderPSet = dict(refToPSet_ = 'hiDetachedQuadStepTrajectoryBuilder'), + TrajectoryBuilder = 'hiDetachedQuadStepTrajectoryBuilder', clustersToSkip = cms.InputTag('hiDetachedQuadStepClusters'), doSeedingRegionRebuilding = True, useHitsSplitting = True - ) +) # TRACK FITTING import RecoTracker.TrackProducer.TrackProducer_cfi hiDetachedQuadStepTracks = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone( src = 'hiDetachedQuadStepTrackCandidates', - AlgorithmName = cms.string('detachedQuadStep'), - Fitter=cms.string('FlexibleKFFittingSmoother') - ) + AlgorithmName = 'detachedQuadStep', + Fitter='FlexibleKFFittingSmoother' +) # Final selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiDetachedQuadStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiDetachedQuadStepTracks', - useAnyMVA = cms.bool(True), - GBRForestLabel = cms.string('HIMVASelectorIter10'),#FIXME MVA for new iteration - GBRForestVars = cms.vstring(['chi2perdofperlayer', 'nhits', 'nlayers', 'eta']), + src = 'hiDetachedQuadStepTracks', + useAnyMVA = True, + GBRForestLabel = 'HIMVASelectorIter10',#FIXME MVA for new iteration + GBRForestVars = ['chi2perdofperlayer', 'nhits', 'nlayers', 'eta'], trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiDetachedQuadStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiDetachedQuadStepTight', - preFilterName = 'hiDetachedQuadStepLoose', - applyAdaptedPVCuts = cms.bool(True), - useMVA = cms.bool(True), - minMVA = cms.double(-0.2) - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiDetachedQuadStep', - preFilterName = 'hiDetachedQuadStepTight', - applyAdaptedPVCuts = cms.bool(True), - useMVA = cms.bool(True), - minMVA = cms.double(-0.09) - ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiDetachedQuadStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiDetachedQuadStepTight', + preFilterName = 'hiDetachedQuadStepLoose', + applyAdaptedPVCuts = True, + useMVA = True, + minMVA = -0.2 + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiDetachedQuadStep', + preFilterName = 'hiDetachedQuadStepTight', + applyAdaptedPVCuts = True, + useMVA = True, + minMVA = -0.09 + ), ) #end of vpset - ) #end of clone +) #end of clone from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiDetachedQuadStepSelector, useAnyMVA = cms.bool(False)) -trackingPhase1.toModify(hiDetachedQuadStepSelector, trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiDetachedQuadStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiDetachedQuadStepTight', - preFilterName = 'hiDetachedQuadStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - minMVA = cms.double(-0.2) - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiDetachedQuadStep', - preFilterName = 'hiDetachedQuadStepTight', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - minMVA = cms.double(-0.09) - ), +trackingPhase1.toModify(hiDetachedQuadStepSelector, + useAnyMVA = False, + trackSelectors= cms.VPSet( + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiDetachedQuadStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiDetachedQuadStepTight', + preFilterName = 'hiDetachedQuadStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, + minMVA = -0.2 + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiDetachedQuadStep', + preFilterName = 'hiDetachedQuadStepTight', + applyAdaptedPVCuts = False, + useMVA = False, + minMVA = -0.09 + ), ) #end of vpset ) import RecoTracker.FinalTrackSelectors.trackListMerger_cfi hiDetachedQuadStepQual = RecoTracker.FinalTrackSelectors.trackListMerger_cfi.trackListMerger.clone( - TrackProducers=cms.VInputTag(cms.InputTag('hiDetachedQuadStepTracks')), - hasSelector=cms.vint32(1), - selectedTrackQuals = cms.VInputTag(cms.InputTag("hiDetachedQuadStepSelector","hiDetachedQuadStep")), + TrackProducers = ['hiDetachedQuadStepTracks'], + hasSelector = [1], + selectedTrackQuals = ["hiDetachedQuadStepSelector:hiDetachedQuadStep"], copyExtras = True, makeReKeyedSeeds = cms.untracked.bool(False), - ) +) hiDetachedQuadStepTask = cms.Task(hiDetachedQuadStepClusters, diff --git a/RecoHI/HiTracking/python/hiDetachedTripletStep_cff.py b/RecoHI/HiTracking/python/hiDetachedTripletStep_cff.py index 4ec1493a3a20c..a70c931a93e79 100644 --- a/RecoHI/HiTracking/python/hiDetachedTripletStep_cff.py +++ b/RecoHI/HiTracking/python/hiDetachedTripletStep_cff.py @@ -24,16 +24,17 @@ from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 trackingPhase1.toModify(hiDetachedTripletStepClusters, - trajectories = cms.InputTag("hiDetachedQuadStepTracks"), - overrideTrkQuals = cms.InputTag("hiDetachedQuadStepSelector","hiDetachedQuadStep"), + trajectories = "hiDetachedQuadStepTracks", + overrideTrkQuals = "hiDetachedQuadStepSelector:hiDetachedQuadStep", ) # SEEDING LAYERS import RecoTracker.TkSeedingLayers.PixelLayerTriplets_cfi -hiDetachedTripletStepSeedLayers = RecoTracker.TkSeedingLayers.PixelLayerTriplets_cfi.PixelLayerTriplets.clone() -hiDetachedTripletStepSeedLayers.BPix.skipClusters = cms.InputTag('hiDetachedTripletStepClusters') -hiDetachedTripletStepSeedLayers.FPix.skipClusters = cms.InputTag('hiDetachedTripletStepClusters') +hiDetachedTripletStepSeedLayers = RecoTracker.TkSeedingLayers.PixelLayerTriplets_cfi.PixelLayerTriplets.clone( + BPix = dict(skipClusters = cms.InputTag('hiDetachedTripletStepClusters')), + FPix = dict(skipClusters = cms.InputTag('hiDetachedTripletStepClusters')) +) # SEEDS from RecoTracker.TkTrackingRegions.globalTrackingRegionWithVertices_cfi import globalTrackingRegionWithVertices as _globalTrackingRegionWithVertices @@ -77,9 +78,9 @@ ) from RecoPixelVertexing.PixelTriplets.caHitTripletEDProducer_cfi import caHitTripletEDProducer as _caHitTripletEDProducer -hiDetachedTripletStepTracksHitDoubletsCA = hiDetachedTripletStepTracksHitDoublets.clone() -hiDetachedTripletStepTracksHitDoubletsCA.layerPairs = [0,1] - +hiDetachedTripletStepTracksHitDoubletsCA = hiDetachedTripletStepTracksHitDoublets.clone( + layerPairs = [0,1] +) hiDetachedTripletStepTracksHitTripletsCA = _caHitTripletEDProducer.clone( doublets = "hiDetachedTripletStepTracksHitDoubletsCA", extraHitRPhitolerance = hiDetachedTripletStepTracksHitTriplets.extraHitRPhitolerance, @@ -130,115 +131,115 @@ hiDetachedTripletStepTrajectoryFilter = TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff.CkfBaseTrajectoryFilter_block.clone( maxLostHits = 1, minimumNumberOfHits = 6, - minPt = cms.double(0.3), - constantValueForLostHitsFractionFilter = cms.double(0.701) - ) + minPt = 0.3, + constantValueForLostHitsFractionFilter = 0.701 +) import TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi hiDetachedTripletStepChi2Est = TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi.Chi2MeasurementEstimator.clone( - ComponentName = cms.string('hiDetachedTripletStepChi2Est'), - nSigma = cms.double(3.0), - MaxChi2 = cms.double(9.0) - ) + ComponentName = 'hiDetachedTripletStepChi2Est', + nSigma = 3.0, + MaxChi2 = 9.0 +) # TRACK BUILDING import RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi hiDetachedTripletStepTrajectoryBuilder = RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi.GroupedCkfTrajectoryBuilder.clone( MeasurementTrackerName = '', - trajectoryFilter = cms.PSet(refToPSet_ = cms.string('hiDetachedTripletStepTrajectoryFilter')), + trajectoryFilter = dict(refToPSet_ = 'hiDetachedTripletStepTrajectoryFilter'), maxCand = 2, - estimator = cms.string('hiDetachedTripletStepChi2Est'), + estimator = 'hiDetachedTripletStepChi2Est', maxDPhiForLooperReconstruction = cms.double(0), - maxPtForLooperReconstruction = cms.double(0), - alwaysUseInvalidHits = cms.bool(False) - ) + maxPtForLooperReconstruction = cms.double(0), + alwaysUseInvalidHits = False +) # MAKING OF TRACK CANDIDATES import RecoTracker.CkfPattern.CkfTrackCandidates_cfi hiDetachedTripletStepTrackCandidates = RecoTracker.CkfPattern.CkfTrackCandidates_cfi.ckfTrackCandidates.clone( - src = cms.InputTag('hiDetachedTripletStepSeeds'), + src = 'hiDetachedTripletStepSeeds', ### these two parameters are relevant only for the CachingSeedCleanerBySharedInput numHitsForSeedCleaner = cms.int32(50), onlyPixelHitsForSeedCleaner = cms.bool(True), - TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('hiDetachedTripletStepTrajectoryBuilder')), - TrajectoryBuilder = cms.string('hiDetachedTripletStepTrajectoryBuilder'), + TrajectoryBuilderPSet = dict(refToPSet_ = 'hiDetachedTripletStepTrajectoryBuilder'), + TrajectoryBuilder = 'hiDetachedTripletStepTrajectoryBuilder', clustersToSkip = cms.InputTag('hiDetachedTripletStepClusters'), doSeedingRegionRebuilding = True, useHitsSplitting = True - ) +) # TRACK FITTING import RecoTracker.TrackProducer.TrackProducer_cfi hiDetachedTripletStepTracks = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone( src = 'hiDetachedTripletStepTrackCandidates', - AlgorithmName = cms.string('detachedTripletStep'), - Fitter=cms.string('FlexibleKFFittingSmoother') - ) + AlgorithmName = 'detachedTripletStep', + Fitter = 'FlexibleKFFittingSmoother' +) # Final selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiDetachedTripletStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiDetachedTripletStepTracks', - useAnyMVA = cms.bool(True), - GBRForestLabel = cms.string('HIMVASelectorIter7'), - GBRForestVars = cms.vstring(['chi2perdofperlayer', 'nhits', 'nlayers', 'eta']), - trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiDetachedTripletStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiDetachedTripletStepTight', - preFilterName = 'hiDetachedTripletStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(True), - minMVA = cms.double(-0.2) - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiDetachedTripletStep', - preFilterName = 'hiDetachedTripletStepTight', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(True), - minMVA = cms.double(-0.09) - ), + src = 'hiDetachedTripletStepTracks', + useAnyMVA = True, + GBRForestLabel = 'HIMVASelectorIter7', + GBRForestVars = ['chi2perdofperlayer', 'nhits', 'nlayers', 'eta'], + trackSelectors = cms.VPSet( + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiDetachedTripletStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiDetachedTripletStepTight', + preFilterName = 'hiDetachedTripletStepLoose', + applyAdaptedPVCuts = False, + useMVA = True, + minMVA = -0.2 + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiDetachedTripletStep', + preFilterName = 'hiDetachedTripletStepTight', + applyAdaptedPVCuts = False, + useMVA = True, + minMVA = -0.09 + ), ) #end of vpset - ) #end of clone +) #end of clone from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiDetachedTripletStepSelector, useAnyMVA = cms.bool(False)) +trackingPhase1.toModify(hiDetachedTripletStepSelector, useAnyMVA = False) trackingPhase1.toModify(hiDetachedTripletStepSelector, trackSelectors= cms.VPSet( RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiDetachedTripletStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), + name = 'hiDetachedTripletStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, ), #end of pset RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiDetachedTripletStepTight', - preFilterName = 'hiDetachedTripletStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - minMVA = cms.double(-0.2) + name = 'hiDetachedTripletStepTight', + preFilterName = 'hiDetachedTripletStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, + minMVA = -0.2 ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiDetachedTripletStep', - preFilterName = 'hiDetachedTripletStepTight', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - minMVA = cms.double(-0.09) + name = 'hiDetachedTripletStep', + preFilterName = 'hiDetachedTripletStepTight', + applyAdaptedPVCuts = False, + useMVA = False, + minMVA = -0.09 ), - ) #end of vpset + ) #end of vpset ) import RecoTracker.FinalTrackSelectors.trackListMerger_cfi hiDetachedTripletStepQual = RecoTracker.FinalTrackSelectors.trackListMerger_cfi.trackListMerger.clone( - TrackProducers=cms.VInputTag(cms.InputTag('hiDetachedTripletStepTracks')), - hasSelector=cms.vint32(1), - selectedTrackQuals = cms.VInputTag(cms.InputTag("hiDetachedTripletStepSelector","hiDetachedTripletStep")), + TrackProducers = ['hiDetachedTripletStepTracks'], + hasSelector = [1], + selectedTrackQuals = ["hiDetachedTripletStepSelector:hiDetachedTripletStep"], copyExtras = True, makeReKeyedSeeds = cms.untracked.bool(False), - ) +) hiDetachedTripletStepTask = cms.Task(hiDetachedTripletStepClusters, diff --git a/RecoHI/HiTracking/python/hiHighPtTripletStep_cff.py b/RecoHI/HiTracking/python/hiHighPtTripletStep_cff.py index da7478e8fbd6e..badef87d49a75 100644 --- a/RecoHI/HiTracking/python/hiHighPtTripletStep_cff.py +++ b/RecoHI/HiTracking/python/hiHighPtTripletStep_cff.py @@ -23,9 +23,10 @@ # SEEDING LAYERS # Using 3 layers layerlist -hiHighPtTripletStepSeedLayers = highPtTripletStepSeedLayers.clone() -hiHighPtTripletStepSeedLayers.BPix.skipClusters = cms.InputTag('hiHighPtTripletStepClusters') -hiHighPtTripletStepSeedLayers.FPix.skipClusters = cms.InputTag('hiHighPtTripletStepClusters') +hiHighPtTripletStepSeedLayers = highPtTripletStepSeedLayers.clone( + BPix = dict(skipClusters = 'hiHighPtTripletStepClusters'), + FPix = dict(skipClusters = 'hiHighPtTripletStepClusters') +) # SEEDS from RecoTracker.TkTrackingRegions.globalTrackingRegionWithVertices_cfi import globalTrackingRegionWithVertices as _globalTrackingRegionWithVertices @@ -102,38 +103,38 @@ import RecoPixelVertexing.PixelLowPtUtilities.TrackSeeds_cfi hiHighPtTripletStepSeeds = RecoPixelVertexing.PixelLowPtUtilities.TrackSeeds_cfi.pixelTrackSeeds.clone( InputCollection = 'hiHighPtTripletStepPixelTracks' - ) +) # QUALITY CUTS DURING TRACK BUILDING import TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff hiHighPtTripletStepTrajectoryFilter = TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff.CkfBaseTrajectoryFilter_block.clone( #maxLostHits = 1, minimumNumberOfHits = 3,#3 for pp - minPt = cms.double(0.2),# 0.2 for pp - #constantValueForLostHitsFractionFilter = cms.double(0.701) - ) + minPt = 0.2,# 0.2 for pp + #constantValueForLostHitsFractionFilter = 0.701 +) import TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi hiHighPtTripletStepChi2Est = TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi.Chi2MeasurementEstimator.clone( - ComponentName = cms.string('hiHighPtTripletStepChi2Est'), - nSigma = cms.double(3.0), - MaxChi2 = cms.double(9.0)# 30 for pp - ) + ComponentName = 'hiHighPtTripletStepChi2Est', + nSigma = 3.0, + MaxChi2 = 9.0# 30 for pp +) # TRACK BUILDING import RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi hiHighPtTripletStepTrajectoryBuilder = RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi.GroupedCkfTrajectoryBuilder.clone( MeasurementTrackerName = '', - trajectoryFilter = cms.PSet(refToPSet_ = cms.string('hiHighPtTripletStepTrajectoryFilter')), + trajectoryFilter = dict(refToPSet_ = 'hiHighPtTripletStepTrajectoryFilter'), maxCand = 3,#3 for pp - estimator = cms.string('hiHighPtTripletStepChi2Est'), + estimator = 'hiHighPtTripletStepChi2Est', maxDPhiForLooperReconstruction = cms.double(2.0),#2.0 for pp # 0.63 GeV is the maximum pT for a charged particle to loop within the 1.1m radius # of the outermost Tracker barrel layer (B=3.8T) maxPtForLooperReconstruction = cms.double(0.7),# 0.7 for pp - alwaysUseInvalidHits = cms.bool(False) - ) + alwaysUseInvalidHits = False +) # MAKING OF TRACK CANDIDATES @@ -141,88 +142,88 @@ import RecoTracker.CkfPattern.CkfTrackCandidates_cfi hiHighPtTripletStepTrackCandidates = RecoTracker.CkfPattern.CkfTrackCandidates_cfi.ckfTrackCandidates.clone( - src = cms.InputTag('hiHighPtTripletStepSeeds'), + src = 'hiHighPtTripletStepSeeds', ### these two parameters are relevant only for the CachingSeedCleanerBySharedInput numHitsForSeedCleaner = cms.int32(50), onlyPixelHitsForSeedCleaner = cms.bool(True), - TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('hiHighPtTripletStepTrajectoryBuilder')), - TrajectoryBuilder = cms.string('hiHighPtTripletStepTrajectoryBuilder'), + TrajectoryBuilderPSet = dict(refToPSet_ = 'hiHighPtTripletStepTrajectoryBuilder'), + TrajectoryBuilder = 'hiHighPtTripletStepTrajectoryBuilder', clustersToSkip = cms.InputTag('hiHighPtTripletStepClusters'), doSeedingRegionRebuilding = True, useHitsSplitting = True - ) +) # TRACK FITTING import RecoTracker.TrackProducer.TrackProducer_cfi hiHighPtTripletStepTracks = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone( src = 'hiHighPtTripletStepTrackCandidates', - AlgorithmName = cms.string('highPtTripletStep'), - Fitter=cms.string('FlexibleKFFittingSmoother') - ) + AlgorithmName = 'highPtTripletStep', + Fitter = 'FlexibleKFFittingSmoother' +) # Final selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiHighPtTripletStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiHighPtTripletStepTracks', - useAnyMVA = cms.bool(True), - GBRForestLabel = cms.string('HIMVASelectorIter9'),#FIXME MVA for new iteration - GBRForestVars = cms.vstring(['chi2perdofperlayer', 'nhits', 'nlayers', 'eta']), - trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiHighPtTripletStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiHighPtTripletStepTight', - preFilterName = 'hiHighPtTripletStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(True), - minMVA = cms.double(-0.2) - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiHighPtTripletStep', - preFilterName = 'hiHighPtTripletStepTight', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(True), - minMVA = cms.double(-0.09) - ), + src = 'hiHighPtTripletStepTracks', + useAnyMVA = True, + GBRForestLabel = 'HIMVASelectorIter9',#FIXME MVA for new iteration + GBRForestVars = ['chi2perdofperlayer', 'nhits', 'nlayers', 'eta'], + trackSelectors = cms.VPSet( + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiHighPtTripletStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiHighPtTripletStepTight', + preFilterName = 'hiHighPtTripletStepLoose', + applyAdaptedPVCuts = False, + useMVA = True, + minMVA = -0.2 + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiHighPtTripletStep', + preFilterName = 'hiHighPtTripletStepTight', + applyAdaptedPVCuts = False, + useMVA = True, + minMVA = -0.09 + ), ) #end of vpset - ) #end of clone +) #end of clone from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiHighPtTripletStepSelector, useAnyMVA = cms.bool(False)) +trackingPhase1.toModify(hiHighPtTripletStepSelector, useAnyMVA = False) trackingPhase1.toModify(hiHighPtTripletStepSelector, trackSelectors= cms.VPSet( RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiHighPtTripletStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), + name = 'hiHighPtTripletStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, ), #end of pset RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiHighPtTripletStepTight', - preFilterName = 'hiHighPtTripletStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - minMVA = cms.double(-0.2) + name = 'hiHighPtTripletStepTight', + preFilterName = 'hiHighPtTripletStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, + minMVA = -0.2 ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiHighPtTripletStep', - preFilterName = 'hiHighPtTripletStepTight', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - minMVA = cms.double(-0.09) + name = 'hiHighPtTripletStep', + preFilterName = 'hiHighPtTripletStepTight', + applyAdaptedPVCuts = False, + useMVA = False, + minMVA = -0.09 ), - ) #end of vpset + ) #end of vpset ) import RecoTracker.FinalTrackSelectors.trackListMerger_cfi hiHighPtTripletStepQual = RecoTracker.FinalTrackSelectors.trackListMerger_cfi.trackListMerger.clone( - TrackProducers=cms.VInputTag(cms.InputTag('hiHighPtTripletStepTracks')), - hasSelector=cms.vint32(1), - selectedTrackQuals = cms.VInputTag(cms.InputTag("hiHighPtTripletStepSelector","hiHighPtTripletStep")), + TrackProducers = ['hiHighPtTripletStepTracks'], + hasSelector = [1], + selectedTrackQuals = ["hiHighPtTripletStepSelector:hiHighPtTripletStep"], copyExtras = True, makeReKeyedSeeds = cms.untracked.bool(False), - ) +) hiHighPtTripletStepTask = cms.Task(hiHighPtTripletStepClusters, diff --git a/RecoHI/HiTracking/python/hiJetCoreRegionalStep_cff.py b/RecoHI/HiTracking/python/hiJetCoreRegionalStep_cff.py index b8a74c1e98393..ed9cc44756f93 100644 --- a/RecoHI/HiTracking/python/hiJetCoreRegionalStep_cff.py +++ b/RecoHI/HiTracking/python/hiJetCoreRegionalStep_cff.py @@ -4,7 +4,7 @@ # run only if there are high pT jets from RecoJets.JetProducers.TracksForJets_cff import trackRefsForJets -hiInitialStepTrackRefsForJets = trackRefsForJets.clone(src = cms.InputTag('hiGlobalPrimTracks')) +hiInitialStepTrackRefsForJets = trackRefsForJets.clone(src = 'hiGlobalPrimTracks') #change this to import Bkg substracted Heavy Ion jets: from RecoHI.HiJetAlgos.hiCaloJetsForTrk_cff import * @@ -52,7 +52,7 @@ ) ) from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiJetCoreRegionalStepSeedLayers, layerList = cms.vstring('BPix1+BPix2+BPix3', +trackingPhase1.toModify(hiJetCoreRegionalStepSeedLayers, layerList = ['BPix1+BPix2+BPix3', 'BPix2+BPix3+BPix4', 'BPix1+BPix3+BPix4', 'BPix1+BPix2+BPix4', @@ -72,36 +72,34 @@ 'BPix2+BPix3+TIB1', 'BPix2+BPix4+TIB1', 'BPix3+BPix4+TIB1', - ) + ] ) # SEEDS import RecoTracker.TkSeedGenerator.GlobalSeedsFromTriplets_cff -hiJetCoreRegionalStepSeeds = RecoTracker.TkSeedGenerator.GlobalSeedsFromTriplets_cff.globalSeedsFromTriplets.clone() -hiJetCoreRegionalStepSeeds.RegionFactoryPSet = cms.PSet( - ComponentName = cms.string( "TauRegionalPixelSeedGenerator" ),#not so nice to depend on RecoTau... - RegionPSet = cms.PSet( - precise = cms.bool( True ), - useMultipleScattering = cms.bool(False), - useFakeVertices = cms.bool(False), - originRadius = cms.double( 0.2 ), - ptMin = cms.double( 15. ), - originHalfLength = cms.double( 0.2 ), - deltaPhiRegion = cms.double( 0.30 ), - deltaEtaRegion = cms.double( 0.30 ), - JetSrc = cms.InputTag( "hiJetsForCoreTracking" ), - vertexSrc = cms.InputTag( "hiFirstStepGoodPrimaryVertices" ), - measurementTrackerName = cms.InputTag( "MeasurementTrackerEvent" ), - howToUseMeasurementTracker = cms.string( "Never" ) - ) +hiJetCoreRegionalStepSeeds = RecoTracker.TkSeedGenerator.GlobalSeedsFromTriplets_cff.globalSeedsFromTriplets.clone( + RegionFactoryPSet = cms.PSet( + ComponentName = cms.string( "TauRegionalPixelSeedGenerator" ),#not so nice to depend on RecoTau... + RegionPSet = cms.PSet( + precise = cms.bool( True ), + useMultipleScattering = cms.bool(False), + useFakeVertices = cms.bool(False), + originRadius = cms.double( 0.2 ), + ptMin = cms.double( 15. ), + originHalfLength = cms.double( 0.2 ), + deltaPhiRegion = cms.double( 0.30 ), + deltaEtaRegion = cms.double( 0.30 ), + JetSrc = cms.InputTag( "hiJetsForCoreTracking" ), + vertexSrc = cms.InputTag( "hiFirstStepGoodPrimaryVertices" ), + measurementTrackerName = cms.InputTag( "MeasurementTrackerEvent" ), + howToUseMeasurementTracker = cms.string( "Never" ) + ) + ), + OrderedHitsFactoryPSet = dict(SeedingLayers = 'hiJetCoreRegionalStepSeedLayers'), + SeedComparitorPSet = dict(ComponentName = 'none'), + SeedCreatorPSet = dict(forceKinematicWithRegionDirection = True), + ClusterCheckPSet = dict(doClusterCheck = False) ) -hiJetCoreRegionalStepSeeds.OrderedHitsFactoryPSet.SeedingLayers = 'hiJetCoreRegionalStepSeedLayers' -hiJetCoreRegionalStepSeeds.SeedComparitorPSet = cms.PSet( - ComponentName = cms.string('none'), - ) -hiJetCoreRegionalStepSeeds.SeedCreatorPSet.forceKinematicWithRegionDirection = cms.bool( True ) -hiJetCoreRegionalStepSeeds.ClusterCheckPSet.doClusterCheck = cms.bool( False ) - # QUALITY CUTS DURING TRACK BUILDING import TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff hiJetCoreRegionalStepTrajectoryFilter = TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff.CkfBaseTrajectoryFilter_block.clone( @@ -111,45 +109,45 @@ import TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi hiJetCoreRegionalStepChi2Est = TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi.Chi2MeasurementEstimator.clone( - ComponentName = cms.string('hiJetCoreRegionalStepChi2Est'), - nSigma = cms.double(3.0), - MaxChi2 = cms.double(30.0) + ComponentName = 'hiJetCoreRegionalStepChi2Est', + nSigma = 3.0, + MaxChi2 = 30.0 ) # TRACK BUILDING import RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi hiJetCoreRegionalStepTrajectoryBuilder = RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi.GroupedCkfTrajectoryBuilder.clone( MeasurementTrackerName = '', - trajectoryFilter = cms.PSet(refToPSet_ = cms.string('hiJetCoreRegionalStepTrajectoryFilter')), + trajectoryFilter = dict(refToPSet_ = 'hiJetCoreRegionalStepTrajectoryFilter'), maxCand = 50, - estimator = cms.string('hiJetCoreRegionalStepChi2Est'), + estimator = 'hiJetCoreRegionalStepChi2Est', maxDPhiForLooperReconstruction = cms.double(2.0), maxPtForLooperReconstruction = cms.double(0.7) - ) +) # MAKING OF TRACK CANDIDATES import RecoTracker.CkfPattern.CkfTrackCandidates_cfi hiJetCoreRegionalStepTrackCandidates = RecoTracker.CkfPattern.CkfTrackCandidates_cfi.ckfTrackCandidates.clone( - src = cms.InputTag('hiJetCoreRegionalStepSeeds'), - maxSeedsBeforeCleaning = cms.uint32(10000), - TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string('hiJetCoreRegionalStepTrajectoryBuilder')), - NavigationSchool = cms.string('SimpleNavigationSchool'), + src = 'hiJetCoreRegionalStepSeeds', + maxSeedsBeforeCleaning = 10000, + TrajectoryBuilderPSet = dict( refToPSet_ = 'hiJetCoreRegionalStepTrajectoryBuilder'), + NavigationSchool = 'SimpleNavigationSchool', ) # TRACK FITTING import RecoTracker.TrackProducer.TrackProducer_cfi hiJetCoreRegionalStepTracks = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone( - AlgorithmName = cms.string('jetCoreRegionalStep'), + AlgorithmName = 'jetCoreRegionalStep', src = 'hiJetCoreRegionalStepTrackCandidates', - Fitter = cms.string('FlexibleKFFittingSmoother') - ) + Fitter = 'FlexibleKFFittingSmoother' +) # Final selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiJetCoreRegionalStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiJetCoreRegionalStepTracks', - vertices = cms.InputTag("hiFirstStepGoodPrimaryVertices"), + src = 'hiJetCoreRegionalStepTracks', + vertices = "hiFirstStepGoodPrimaryVertices", trackSelectors= cms.VPSet( RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( name = 'hiJetCoreRegionalStepLoose', diff --git a/RecoHI/HiTracking/python/hiLowPtQuadStep_cff.py b/RecoHI/HiTracking/python/hiLowPtQuadStep_cff.py index 83120b0e37812..1e8eca5efe0ee 100644 --- a/RecoHI/HiTracking/python/hiLowPtQuadStep_cff.py +++ b/RecoHI/HiTracking/python/hiLowPtQuadStep_cff.py @@ -23,9 +23,10 @@ # SEEDING LAYERS # Using 4 layers layerlist -hiLowPtQuadStepSeedLayers = hiPixelLayerQuadruplets.clone() -hiLowPtQuadStepSeedLayers.BPix.skipClusters = cms.InputTag('hiLowPtQuadStepClusters') -hiLowPtQuadStepSeedLayers.FPix.skipClusters = cms.InputTag('hiLowPtQuadStepClusters') +hiLowPtQuadStepSeedLayers = hiPixelLayerQuadruplets.clone( + BPix = dict(skipClusters = cms.InputTag('hiLowPtQuadStepClusters')), + FPix = dict(skipClusters = cms.InputTag('hiLowPtQuadStepClusters')) +) # SEEDS from RecoTracker.TkTrackingRegions.globalTrackingRegionWithVertices_cfi import globalTrackingRegionWithVertices as _globalTrackingRegionWithVertices @@ -105,38 +106,38 @@ import RecoPixelVertexing.PixelLowPtUtilities.TrackSeeds_cfi hiLowPtQuadStepSeeds = RecoPixelVertexing.PixelLowPtUtilities.TrackSeeds_cfi.pixelTrackSeeds.clone( InputCollection = 'hiLowPtQuadStepPixelTracks' - ) +) # QUALITY CUTS DURING TRACK BUILDING import TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff hiLowPtQuadStepTrajectoryFilter = TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff.CkfBaseTrajectoryFilter_block.clone( #maxLostHits = 1, minimumNumberOfHits = 3,#3 for pp - minPt = cms.double(0.075),# 0.075 for pp - #constantValueForLostHitsFractionFilter = cms.double(0.701) - ) + minPt = 0.075,# 0.075 for pp + #constantValueForLostHitsFractionFilter = 0.701 +) import TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi hiLowPtQuadStepChi2Est = TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi.Chi2MeasurementEstimator.clone( - ComponentName = cms.string('hiLowPtQuadStepChi2Est'), - nSigma = cms.double(3.0), - MaxChi2 = cms.double(9.0) - ) + ComponentName = 'hiLowPtQuadStepChi2Est', + nSigma = 3.0, + MaxChi2 = 9.0 +) # TRACK BUILDING import RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi hiLowPtQuadStepTrajectoryBuilder = RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi.GroupedCkfTrajectoryBuilder.clone( MeasurementTrackerName = '', - trajectoryFilter = cms.PSet(refToPSet_ = cms.string('hiLowPtQuadStepTrajectoryFilter')), + trajectoryFilter = dict(refToPSet_ = 'hiLowPtQuadStepTrajectoryFilter'), maxCand = 4,#4 for pp - estimator = cms.string('hiLowPtQuadStepChi2Est'), + estimator = 'hiLowPtQuadStepChi2Est', maxDPhiForLooperReconstruction = cms.double(2.0),#2.0 for pp # 0.63 GeV is the maximum pT for a charged particle to loop within the 1.1m radius # of the outermost Tracker barrel layer (B=3.8T) maxPtForLooperReconstruction = cms.double(0.7),# 0.7 for pp - alwaysUseInvalidHits = cms.bool(False) - ) + alwaysUseInvalidHits = False +) # MAKING OF TRACK CANDIDATES @@ -144,88 +145,88 @@ import RecoTracker.CkfPattern.CkfTrackCandidates_cfi hiLowPtQuadStepTrackCandidates = RecoTracker.CkfPattern.CkfTrackCandidates_cfi.ckfTrackCandidates.clone( - src = cms.InputTag('hiLowPtQuadStepSeeds'), + src = 'hiLowPtQuadStepSeeds', ### these two parameters are relevant only for the CachingSeedCleanerBySharedInput numHitsForSeedCleaner = cms.int32(50), onlyPixelHitsForSeedCleaner = cms.bool(True), - TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('hiLowPtQuadStepTrajectoryBuilder')), - TrajectoryBuilder = cms.string('hiLowPtQuadStepTrajectoryBuilder'), + TrajectoryBuilderPSet = dict(refToPSet_ = 'hiLowPtQuadStepTrajectoryBuilder'), + TrajectoryBuilder = 'hiLowPtQuadStepTrajectoryBuilder', clustersToSkip = cms.InputTag('hiLowPtQuadStepClusters'), doSeedingRegionRebuilding = True, useHitsSplitting = True - ) +) # TRACK FITTING import RecoTracker.TrackProducer.TrackProducer_cfi hiLowPtQuadStepTracks = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone( src = 'hiLowPtQuadStepTrackCandidates', - AlgorithmName = cms.string('lowPtQuadStep'), - Fitter=cms.string('FlexibleKFFittingSmoother') - ) + AlgorithmName = 'lowPtQuadStep', + Fitter = 'FlexibleKFFittingSmoother' +) # Final selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiLowPtQuadStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiLowPtQuadStepTracks', - useAnyMVA = cms.bool(True), - GBRForestLabel = cms.string('HIMVASelectorIter8'),#FIXME MVA for new iteration - GBRForestVars = cms.vstring(['chi2perdofperlayer', 'nhits', 'nlayers', 'eta']), - trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiLowPtQuadStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiLowPtQuadStepTight', - preFilterName = 'hiLowPtQuadStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(True), - minMVA = cms.double(-0.2) - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiLowPtQuadStep', - preFilterName = 'hiLowPtQuadStepTight', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(True), - minMVA = cms.double(-0.09) - ), + src ='hiLowPtQuadStepTracks', + useAnyMVA = True, + GBRForestLabel = 'HIMVASelectorIter8',#FIXME MVA for new iteration + GBRForestVars = ['chi2perdofperlayer', 'nhits', 'nlayers', 'eta'], + trackSelectors = cms.VPSet( + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiLowPtQuadStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiLowPtQuadStepTight', + preFilterName = 'hiLowPtQuadStepLoose', + applyAdaptedPVCuts = False, + useMVA = True, + minMVA = -0.2 + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiLowPtQuadStep', + preFilterName = 'hiLowPtQuadStepTight', + applyAdaptedPVCuts = False, + useMVA = True, + minMVA = -0.09 + ), ) #end of vpset - ) #end of clone +) #end of clone from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiLowPtQuadStepSelector, useAnyMVA = cms.bool(False)) -trackingPhase1.toModify(hiLowPtQuadStepSelector, trackSelectors= cms.VPSet( +trackingPhase1.toModify(hiLowPtQuadStepSelector, useAnyMVA = False) +trackingPhase1.toModify(hiLowPtQuadStepSelector, trackSelectors = cms.VPSet( RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiLowPtQuadStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), + name = 'hiLowPtQuadStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, ), #end of pset RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiLowPtQuadStepTight', - preFilterName = 'hiLowPtQuadStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - minMVA = cms.double(-0.2) + name = 'hiLowPtQuadStepTight', + preFilterName = 'hiLowPtQuadStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, + minMVA = -0.2 ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiLowPtQuadStep', - preFilterName = 'hiLowPtQuadStepTight', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - minMVA = cms.double(-0.09) + name = 'hiLowPtQuadStep', + preFilterName = 'hiLowPtQuadStepTight', + applyAdaptedPVCuts = False, + useMVA = False, + minMVA = -0.09 ), - ) #end of vpset + ) #end of vpset ) import RecoTracker.FinalTrackSelectors.trackListMerger_cfi hiLowPtQuadStepQual = RecoTracker.FinalTrackSelectors.trackListMerger_cfi.trackListMerger.clone( - TrackProducers=cms.VInputTag(cms.InputTag('hiLowPtQuadStepTracks')), - hasSelector=cms.vint32(1), - selectedTrackQuals = cms.VInputTag(cms.InputTag("hiLowPtQuadStepSelector","hiLowPtQuadStep")), + TrackProducers = ['hiLowPtQuadStepTracks'], + hasSelector = [1], + selectedTrackQuals = ["hiLowPtQuadStepSelector:hiLowPtQuadStep"], copyExtras = True, makeReKeyedSeeds = cms.untracked.bool(False), - ) +) hiLowPtQuadStepTask = cms.Task(hiLowPtQuadStepClusters, diff --git a/RecoHI/HiTracking/python/hiLowPtTripletStep_cff.py b/RecoHI/HiTracking/python/hiLowPtTripletStep_cff.py index c555270a99fe6..5ebecf0f3b4d9 100644 --- a/RecoHI/HiTracking/python/hiLowPtTripletStep_cff.py +++ b/RecoHI/HiTracking/python/hiLowPtTripletStep_cff.py @@ -24,9 +24,10 @@ # SEEDING LAYERS import RecoTracker.TkSeedingLayers.PixelLayerTriplets_cfi -hiLowPtTripletStepSeedLayers = RecoTracker.TkSeedingLayers.PixelLayerTriplets_cfi.PixelLayerTriplets.clone() -hiLowPtTripletStepSeedLayers.BPix.skipClusters = cms.InputTag('hiLowPtTripletStepClusters') -hiLowPtTripletStepSeedLayers.FPix.skipClusters = cms.InputTag('hiLowPtTripletStepClusters') +hiLowPtTripletStepSeedLayers = RecoTracker.TkSeedingLayers.PixelLayerTriplets_cfi.PixelLayerTriplets.clone( + BPix = dict(skipClusters = cms.InputTag('hiLowPtTripletStepClusters')), + FPix = dict(skipClusters = cms.InputTag('hiLowPtTripletStepClusters')) +) # SEEDS from RecoTracker.TkTrackingRegions.globalTrackingRegionWithVertices_cfi import globalTrackingRegionWithVertices as _globalTrackingRegionWithVertices @@ -69,9 +70,9 @@ ) from RecoPixelVertexing.PixelTriplets.caHitTripletEDProducer_cfi import caHitTripletEDProducer as _caHitTripletEDProducer -hiLowPtTripletStepTracksHitDoubletsCA = hiLowPtTripletStepTracksHitDoublets.clone() -hiLowPtTripletStepTracksHitDoubletsCA.layerPairs = [0,1] - +hiLowPtTripletStepTracksHitDoubletsCA = hiLowPtTripletStepTracksHitDoublets.clone( + layerPairs = [0,1] +) hiLowPtTripletStepTracksHitTripletsCA = _caHitTripletEDProducer.clone( doublets = "hiLowPtTripletStepTracksHitDoubletsCA", extraHitRPhitolerance = hiLowPtTripletStepTracksHitTriplets.extraHitRPhitolerance, @@ -116,7 +117,7 @@ import RecoPixelVertexing.PixelLowPtUtilities.TrackSeeds_cfi hiLowPtTripletStepSeeds = RecoPixelVertexing.PixelLowPtUtilities.TrackSeeds_cfi.pixelTrackSeeds.clone( InputCollection = 'hiLowPtTripletStepPixelTracks' - ) +) # QUALITY CUTS DURING TRACK BUILDING @@ -125,109 +126,109 @@ maxLostHits = 1, minimumNumberOfHits = 6, minPt = 0.4 - ) +) import TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi hiLowPtTripletStepChi2Est = TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi.Chi2MeasurementEstimator.clone( - ComponentName = cms.string('hiLowPtTripletStepChi2Est'), - nSigma = cms.double(3.0), - MaxChi2 = cms.double(9.0) - ) + ComponentName = 'hiLowPtTripletStepChi2Est', + nSigma = 3.0, + MaxChi2 = 9.0 +) # TRACK BUILDING import RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi hiLowPtTripletStepTrajectoryBuilder = RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi.GroupedCkfTrajectoryBuilder.clone( MeasurementTrackerName = '', - trajectoryFilter = cms.PSet(refToPSet_ = cms.string('hiLowPtTripletStepTrajectoryFilter')), + trajectoryFilter = dict(refToPSet_ = 'hiLowPtTripletStepTrajectoryFilter'), maxCand = 3, - estimator = cms.string('hiLowPtTripletStepChi2Est'), + estimator = 'hiLowPtTripletStepChi2Est', maxDPhiForLooperReconstruction = cms.double(2.0), # 0.63 GeV is the maximum pT for a charged particle to loop within the 1.1m radius # of the outermost Tracker barrel layer (with B=3.8T) maxPtForLooperReconstruction = cms.double(0.7) - ) +) # MAKING OF TRACK CANDIDATES import RecoTracker.CkfPattern.CkfTrackCandidates_cfi hiLowPtTripletStepTrackCandidates = RecoTracker.CkfPattern.CkfTrackCandidates_cfi.ckfTrackCandidates.clone( - src = cms.InputTag('hiLowPtTripletStepSeeds'), + src = 'hiLowPtTripletStepSeeds', ### these two parameters are relevant only for the CachingSeedCleanerBySharedInput numHitsForSeedCleaner = cms.int32(50), onlyPixelHitsForSeedCleaner = cms.bool(True), - TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('hiLowPtTripletStepTrajectoryBuilder')), + TrajectoryBuilderPSet = dict(refToPSet_ = 'hiLowPtTripletStepTrajectoryBuilder'), clustersToSkip = cms.InputTag('hiLowPtTripletStepClusters'), doSeedingRegionRebuilding = True, useHitsSplitting = True - ) +) # TRACK FITTING import RecoTracker.TrackProducer.TrackProducer_cfi hiLowPtTripletStepTracks = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone( src = 'hiLowPtTripletStepTrackCandidates', - AlgorithmName = cms.string('lowPtTripletStep'), - Fitter=cms.string('FlexibleKFFittingSmoother') - ) + AlgorithmName = 'lowPtTripletStep', + Fitter='FlexibleKFFittingSmoother' +) # Final selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiLowPtTripletStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiLowPtTripletStepTracks', - useAnyMVA = cms.bool(True), - GBRForestLabel = cms.string('HIMVASelectorIter5'), - GBRForestVars = cms.vstring(['chi2perdofperlayer', 'dxyperdxyerror', 'dzperdzerror', 'relpterr', 'nhits', 'nlayers', 'eta']), + src = 'hiLowPtTripletStepTracks', + useAnyMVA = True, + GBRForestLabel = 'HIMVASelectorIter5', + GBRForestVars = ['chi2perdofperlayer', 'dxyperdxyerror', 'dzperdzerror', 'relpterr', 'nhits', 'nlayers', 'eta'], trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiLowPtTripletStepLoose', - useMVA = cms.bool(False) - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiLowPtTripletStepTight', - preFilterName = 'hiLowPtTripletStepLoose', - useMVA = cms.bool(True), - minMVA = cms.double(-0.58) - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiLowPtTripletStep', - preFilterName = 'hiLowPtTripletStepTight', - useMVA = cms.bool(True), - minMVA = cms.double(0.35) - ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiLowPtTripletStepLoose', + useMVA = False + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiLowPtTripletStepTight', + preFilterName = 'hiLowPtTripletStepLoose', + useMVA = True, + minMVA = -0.58 + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiLowPtTripletStep', + preFilterName = 'hiLowPtTripletStepTight', + useMVA = True, + minMVA = 0.35 + ), ) #end of vpset - ) #end of clone +) #end of clone from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiLowPtTripletStepSelector, useAnyMVA = cms.bool(False)) +trackingPhase1.toModify(hiLowPtTripletStepSelector, useAnyMVA = False) trackingPhase1.toModify(hiLowPtTripletStepSelector, trackSelectors= cms.VPSet( RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiLowPtTripletStepLoose', - useMVA = cms.bool(False) + name = 'hiLowPtTripletStepLoose', + useMVA = False ), #end of pset RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiLowPtTripletStepTight', - preFilterName = 'hiLowPtTripletStepLoose', - useMVA = cms.bool(False), - minMVA = cms.double(-0.58) + name = 'hiLowPtTripletStepTight', + preFilterName = 'hiLowPtTripletStepLoose', + useMVA = False, + minMVA = -0.58 ), RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiLowPtTripletStep', - preFilterName = 'hiLowPtTripletStepTight', - useMVA = cms.bool(False), - minMVA = cms.double(0.35) + name = 'hiLowPtTripletStep', + preFilterName = 'hiLowPtTripletStepTight', + useMVA = False, + minMVA = 0.35 ), - ) #end of vpset + ) #end of vpset ) import RecoTracker.FinalTrackSelectors.trackListMerger_cfi hiLowPtTripletStepQual = RecoTracker.FinalTrackSelectors.trackListMerger_cfi.trackListMerger.clone( - TrackProducers = cms.VInputTag(cms.InputTag('hiLowPtTripletStepTracks')), - hasSelector=cms.vint32(1), - selectedTrackQuals = cms.VInputTag(cms.InputTag("hiLowPtTripletStepSelector","hiLowPtTripletStep")), + TrackProducers = ['hiLowPtTripletStepTracks'], + hasSelector = [1], + selectedTrackQuals = ["hiLowPtTripletStepSelector:hiLowPtTripletStep"], copyExtras = True, makeReKeyedSeeds = cms.untracked.bool(False), #writeOnlyTrkQuals = True - ) +) # Final sequence diff --git a/RecoHI/HiTracking/python/hiMergedConformalPixelTracking_cff.py b/RecoHI/HiTracking/python/hiMergedConformalPixelTracking_cff.py index d745bdcea2e26..20c80b63e26e9 100644 --- a/RecoHI/HiTracking/python/hiMergedConformalPixelTracking_cff.py +++ b/RecoHI/HiTracking/python/hiMergedConformalPixelTracking_cff.py @@ -9,84 +9,81 @@ #loose hiPixelOnlyStepLooseMTS = hiLooseMTS.clone( - name= cms.string('hiPixelOnlyTrkLoose'), - chi2n_no1Dmod_par = cms.double(25.0), - d0_par2 = cms.vdouble(9999.0, 0.0), # d0E from tk.d0Error - dz_par2 = cms.vdouble(14.0, 0.0), - max_relpterr = cms.double(9999.), - min_nhits = cms.uint32(0), + name = 'hiPixelOnlyTrkLoose', + chi2n_no1Dmod_par = 25.0, + d0_par2 = [9999.0, 0.0], # d0E from tk.d0Error + dz_par2 = [14.0, 0.0], + max_relpterr = 9999., + min_nhits = 0, pixel_pTMinCut = cms.vdouble(0.0001,0.000,9999,1.0), pixel_pTMaxCut = cms.vdouble(10,5,25,2.5) ) -hiPixelOnlyStepTightMTS=hiPixelOnlyStepLooseMTS.clone( - preFilterName='hiPixelOnlyTrkLoose', - chi2n_no1Dmod_par = cms.double(18.0), - dz_par2 = cms.vdouble(12.0, 0.0), - pixel_pTMaxCut = cms.vdouble(4,2,18,2.5), - name= cms.string('hiPixelOnlyTrkTight'), - qualityBit = cms.string('tight'), - keepAllTracks= cms.bool(True) - ) +hiPixelOnlyStepTightMTS = hiPixelOnlyStepLooseMTS.clone( + preFilterName ='hiPixelOnlyTrkLoose', + chi2n_no1Dmod_par = 18.0, + dz_par2 = [12.0, 0.0], + pixel_pTMaxCut = [4,2,18,2.5], + name = 'hiPixelOnlyTrkTight', + qualityBit = 'tight', + keepAllTracks = True +) hiPixelOnlyStepHighpurityMTS= hiPixelOnlyStepTightMTS.clone( - name= cms.string('hiPixelOnlyTrkHighPurity'), - preFilterName='hiPixelOnlyTrkTight', - chi2n_no1Dmod_par = cms.double(12.), - dz_par2 = cms.vdouble(10.0, 0.0), - pixel_pTMaxCut = cms.vdouble(2.4,1.6,12,2.5), - qualityBit = cms.string('highPurity') ## set to '' or comment out if you dont want to set the bit - ) + name = 'hiPixelOnlyTrkHighPurity', + preFilterName ='hiPixelOnlyTrkTight', + chi2n_no1Dmod_par = 12., + dz_par2 = [10.0, 0.0], + pixel_pTMaxCut = [2.4,1.6,12,2.5], + qualityBit = 'highPurity' ## set to '' or comment out if you dont want to set the bit +) hiPixelOnlyStepSelector = hiMultiTrackSelector.clone( applyPixelMergingCuts = cms.bool(True), - src='hiConformalPixelTracks', + src = 'hiConformalPixelTracks', trackSelectors= cms.VPSet( hiPixelOnlyStepLooseMTS, hiPixelOnlyStepTightMTS, hiPixelOnlyStepHighpurityMTS ) - ) +) # selector for tapered full tracks hiHighPtStepTruncMTS = hiLooseMTS.clone( - name= cms.string('hiHighPtTrkTrunc'), - chi2n_no1Dmod_par = cms.double(9999.0), - d0_par2 = cms.vdouble(9999.0, 0.0), # d0E from tk.d0Error - dz_par2 = cms.vdouble(9999.0, 0.0), - max_relpterr = cms.double(9999.), - minHitsToBypassChecks = cms.uint32(9999), - min_nhits = cms.uint32(12), + name = 'hiHighPtTrkTrunc', + chi2n_no1Dmod_par = 9999.0, + d0_par2 = [9999.0, 0.0], # d0E from tk.d0Error + dz_par2 = [9999.0, 0.0], + max_relpterr = 9999., + minHitsToBypassChecks = 9999, + min_nhits = 12, pixel_pTMinCut = cms.vdouble(1.0,1.8,0.15,2.5), pixel_pTMaxCut = cms.vdouble(9998,9999,9999,1.0), - qualityBit = cms.string('') + qualityBit = '' ) hiHighPtStepSelector = hiMultiTrackSelector.clone( applyPixelMergingCuts = cms.bool(True), - src='hiGeneralTracks', + src = 'hiGeneralTracks', trackSelectors= cms.VPSet( hiHighPtStepTruncMTS ) - ) +) hiGeneralAndPixelTracks = trackListMerger.clone( - TrackProducers = cms.VInputTag(cms.InputTag('hiConformalPixelTracks'), - cms.InputTag('hiGeneralTracks') - ), - hasSelector=cms.vint32(1,1), - selectedTrackQuals = cms.VInputTag( - cms.InputTag("hiPixelOnlyStepSelector","hiPixelOnlyTrkHighPurity"), - cms.InputTag("hiHighPtStepSelector","hiHighPtTrkTrunc") - ), + TrackProducers = ['hiConformalPixelTracks', + 'hiGeneralTracks'], + hasSelector = [1,1], + selectedTrackQuals = ["hiPixelOnlyStepSelector:hiPixelOnlyTrkHighPurity", + "hiHighPtStepSelector:hiHighPtTrkTrunc"], setsToMerge = cms.VPSet( cms.PSet( tLists=cms.vint32(0,1), pQual=cms.bool(False)), ), copyExtras = True, makeReKeyedSeeds = cms.untracked.bool(False) - ) +) hiMergedConformalPixelTrackingTask = cms.Task( hiConformalPixelTracksTask diff --git a/RecoHI/HiTracking/python/hiMixedTripletStep_cff.py b/RecoHI/HiTracking/python/hiMixedTripletStep_cff.py index 5b60ec75ebbd2..94cb720c63cef 100644 --- a/RecoHI/HiTracking/python/hiMixedTripletStep_cff.py +++ b/RecoHI/HiTracking/python/hiMixedTripletStep_cff.py @@ -24,12 +24,12 @@ ) # SEEDING LAYERS -mixedTripletStepSeedLayersA.layerList = cms.vstring('BPix1+BPix2+BPix3', 'BPix1+BPix2+FPix1_pos', 'BPix1+BPix2+FPix1_neg', - 'BPix1+FPix1_pos+FPix2_pos', 'BPix1+FPix1_neg+FPix2_neg', - 'BPix2+FPix1_pos+FPix2_pos', 'BPix2+FPix1_neg+FPix2_neg') -mixedTripletStepSeedLayersA.BPix.skipClusters = cms.InputTag('hiMixedTripletStepClusters') -mixedTripletStepSeedLayersA.FPix.skipClusters = cms.InputTag('hiMixedTripletStepClusters') -mixedTripletStepSeedLayersA.TEC.skipClusters = cms.InputTag('hiMixedTripletStepClusters') +mixedTripletStepSeedLayersA.layerList = ['BPix1+BPix2+BPix3', 'BPix1+BPix2+FPix1_pos', 'BPix1+BPix2+FPix1_neg', + 'BPix1+FPix1_pos+FPix2_pos', 'BPix1+FPix1_neg+FPix2_neg', + 'BPix2+FPix1_pos+FPix2_pos', 'BPix2+FPix1_neg+FPix2_neg'] +mixedTripletStepSeedLayersA.BPix.skipClusters = 'hiMixedTripletStepClusters' +mixedTripletStepSeedLayersA.FPix.skipClusters = 'hiMixedTripletStepClusters' +mixedTripletStepSeedLayersA.TEC.skipClusters = 'hiMixedTripletStepClusters' # TrackingRegion from RecoTracker.TkTrackingRegions.globalTrackingRegionWithVertices_cfi import globalTrackingRegionWithVertices as _globalTrackingRegionWithVertices @@ -53,8 +53,8 @@ mixedTripletStepHitDoubletsA.trackingRegions = "hiMixedTripletStepTrackingRegionsA" # SEEDING LAYERS -mixedTripletStepSeedLayersB.BPix.skipClusters = cms.InputTag('hiMixedTripletStepClusters') -mixedTripletStepSeedLayersB.TIB.skipClusters = cms.InputTag('hiMixedTripletStepClusters') +mixedTripletStepSeedLayersB.BPix.skipClusters = 'hiMixedTripletStepClusters' +mixedTripletStepSeedLayersB.TIB.skipClusters = 'hiMixedTripletStepClusters' hiMixedTripletStepTrackingRegionsB = hiMixedTripletStepTrackingRegionsA.clone(RegionPSet=dict( originRadius = 1.0, @@ -81,41 +81,41 @@ # Final selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiMixedTripletStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiMixedTripletStepTracks', - useAnyMVA = cms.bool(False), - GBRForestLabel = cms.string('HIMVASelectorIter11'), - GBRForestVars = cms.vstring(['chi2perdofperlayer', 'nhits', 'nlayers', 'eta']), - trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiMixedTripletStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiMixedTripletStepTight', - preFilterName = 'hiMixedTripletStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - minMVA = cms.double(-0.2) - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiMixedTripletStep', - preFilterName = 'hiMixedTripletStepTight', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - minMVA = cms.double(-0.09) - ), + src = 'hiMixedTripletStepTracks', + useAnyMVA = False, + GBRForestLabel = 'HIMVASelectorIter11', + GBRForestVars = ['chi2perdofperlayer', 'nhits', 'nlayers', 'eta'], + trackSelectors = cms.VPSet( + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiMixedTripletStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiMixedTripletStepTight', + preFilterName = 'hiMixedTripletStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, + minMVA = -0.2 + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiMixedTripletStep', + preFilterName = 'hiMixedTripletStepTight', + applyAdaptedPVCuts = False, + useMVA = False, + minMVA = -0.09 + ), ) #end of vpset - ) #end of clone +) #end of clone import RecoTracker.FinalTrackSelectors.trackListMerger_cfi hiMixedTripletStepQual = RecoTracker.FinalTrackSelectors.trackListMerger_cfi.trackListMerger.clone( - TrackProducers=cms.VInputTag(cms.InputTag('hiMixedTripletStepTracks')), - hasSelector=cms.vint32(1), - selectedTrackQuals = cms.VInputTag(cms.InputTag("hiMixedTripletStepSelector","hiMixedTripletStep")), + TrackProducers = ['hiMixedTripletStepTracks'], + hasSelector = [1], + selectedTrackQuals = ["hiMixedTripletStepSelector:hiMixedTripletStep"], copyExtras = True, makeReKeyedSeeds = cms.untracked.bool(False), - ) +) hiMixedTripletStepTask = cms.Task( hiMixedTripletStepClusters, diff --git a/RecoHI/HiTracking/python/hiMultiTrackSelector_cfi.py b/RecoHI/HiTracking/python/hiMultiTrackSelector_cfi.py index 2386b3b360730..bf1b93a5adcc7 100644 --- a/RecoHI/HiTracking/python/hiMultiTrackSelector_cfi.py +++ b/RecoHI/HiTracking/python/hiMultiTrackSelector_cfi.py @@ -12,14 +12,13 @@ #untracked bool copyTrajectories = true // when doing retracking before copyTrajectories = cms.untracked.bool(True), copyExtras = cms.untracked.bool(True), ## set to false on AOD - qualityBit = cms.string('loose'), ## set to '' or comment out if you dont want to set the - - chi2n_par = cms.double(0.3), # version with 1D hits modification - chi2n_no1Dmod_par = cms.double(9999.), # normalizedChi2 < nLayers * chi2n_par - res_par = cms.vdouble(99999., 99999.), # residual parameterization (re-check in HI) - d0_par1 = cms.vdouble(9999., 0.), # parameterized nomd0E + qualityBit = cms.string('loose'), ## set to '' or comment out if you dont want to set the + chi2n_par = cms.double(0.3), # version with 1D hits modification + chi2n_no1Dmod_par = cms.double(9999.), # normalizedChi2 < nLayers * chi2n_par + res_par = cms.vdouble(99999., 99999.), # residual parameterization (re-check in HI) + d0_par1 = cms.vdouble(9999., 0.), # parameterized nomd0E dz_par1 = cms.vdouble(9999., 0.), - d0_par2 = cms.vdouble(0.4, 4.0), # d0E from tk.d0Error + d0_par2 = cms.vdouble(0.4, 4.0), # d0E from tk.d0Error dz_par2 = cms.vdouble(0.4, 4.0), # Boolean indicating if adapted primary vertex compatibility cuts are to be applied. applyAdaptedPVCuts = cms.bool(True), @@ -52,27 +51,27 @@ ) hiTightMTS=hiLooseMTS.clone( - preFilterName='hiTrkLoose', - min_nhits = cms.uint32(8), - max_relpterr = cms.double(0.075), - d0_par2 = cms.vdouble(5.0, 0.0), - dz_par2 = cms.vdouble(5.0, 0.0), - chi2n_no1Dmod_par = cms.double(0.25), - name= cms.string('hiTrkTight'), - qualityBit = cms.string('tight'), ## set to '' or comment out if you dont want to set the bit - keepAllTracks= cms.bool(True) - ) + preFilterName ='hiTrkLoose', + min_nhits = 8, + max_relpterr = 0.075, + d0_par2 = [5.0, 0.0], + dz_par2 = [5.0, 0.0], + chi2n_no1Dmod_par = 0.25, + name = 'hiTrkTight', + qualityBit = 'tight', ## set to '' or comment out if you dont want to set the bit + keepAllTracks = True +) hiHighpurityMTS= hiTightMTS.clone( - name= cms.string('hiTrkHighPurity'), - preFilterName='hiTrkTight', - min_nhits = cms.uint32(8), - max_relpterr = cms.double(0.05), + name = 'hiTrkHighPurity', + preFilterName ='hiTrkTight', + min_nhits = 8, + max_relpterr = 0.05, d0_par2 = [3.0, 0.0], dz_par2 = [3.0, 0.0], - chi2n_no1Dmod_par = cms.double(0.15), - qualityBit = cms.string('highPurity') ## set to '' or comment out if you dont want to set the bit - ) + chi2n_no1Dmod_par = 0.15, + qualityBit = 'highPurity' ## set to '' or comment out if you dont want to set the bit +) #typical configuration is six selectors... something like this to #make cloning easier. diff --git a/RecoHI/HiTracking/python/hiPixelLessStep_cff.py b/RecoHI/HiTracking/python/hiPixelLessStep_cff.py index a78d930264339..6e8b438b45079 100644 --- a/RecoHI/HiTracking/python/hiPixelLessStep_cff.py +++ b/RecoHI/HiTracking/python/hiPixelLessStep_cff.py @@ -11,17 +11,17 @@ #HIClusterRemover from RecoHI.HiTracking.hiMixedTripletStep_cff import hiMixedTripletStepClusters -hiPixelLessStepClusters = hiMixedTripletStepClusters.clone() -hiPixelLessStepClusters.trajectories = cms.InputTag("hiMixedTripletStepTracks") -hiPixelLessStepClusters.overrideTrkQuals = cms.InputTag('hiMixedTripletStepSelector','hiMixedTripletStep') - +hiPixelLessStepClusters = hiMixedTripletStepClusters.clone( + trajectories = "hiMixedTripletStepTracks", + overrideTrkQuals = 'hiMixedTripletStepSelector:hiMixedTripletStep' +) # SEEDING LAYERS -pixelLessStepSeedLayers.TIB.skipClusters = cms.InputTag('hiPixelLessStepClusters') -pixelLessStepSeedLayers.MTIB.skipClusters = cms.InputTag('hiPixelLessStepClusters') -pixelLessStepSeedLayers.TID.skipClusters = cms.InputTag('hiPixelLessStepClusters') -pixelLessStepSeedLayers.MTID.skipClusters = cms.InputTag('hiPixelLessStepClusters') -pixelLessStepSeedLayers.TEC.skipClusters = cms.InputTag('hiPixelLessStepClusters') -pixelLessStepSeedLayers.MTEC.skipClusters = cms.InputTag('hiPixelLessStepClusters') +pixelLessStepSeedLayers.TIB.skipClusters = 'hiPixelLessStepClusters' +pixelLessStepSeedLayers.MTIB.skipClusters = 'hiPixelLessStepClusters' +pixelLessStepSeedLayers.TID.skipClusters = 'hiPixelLessStepClusters' +pixelLessStepSeedLayers.MTID.skipClusters = 'hiPixelLessStepClusters' +pixelLessStepSeedLayers.TEC.skipClusters = 'hiPixelLessStepClusters' +pixelLessStepSeedLayers.MTEC.skipClusters = 'hiPixelLessStepClusters' # TrackingRegion from RecoHI.HiTracking.hiMixedTripletStep_cff import hiMixedTripletStepTrackingRegionsA as _hiMixedTripletStepTrackingRegionsA @@ -42,7 +42,7 @@ pixelLessStepTrajectoryFilter.minPt = 0.7 # MAKING OF TRACK CANDIDATES -pixelLessStepTrackCandidates.clustersToSkip = cms.InputTag('hiPixelLessStepClusters') +pixelLessStepTrackCandidates.clustersToSkip = 'hiPixelLessStepClusters' # TRACK FITTING hiPixelLessStepTracks = pixelLessStepTracks.clone() @@ -50,41 +50,41 @@ # Final selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiPixelLessStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiPixelLessStepTracks', - useAnyMVA = cms.bool(False), - GBRForestLabel = cms.string('HIMVASelectorIter12'), - GBRForestVars = cms.vstring(['chi2perdofperlayer', 'nhits', 'nlayers', 'eta']), + src = 'hiPixelLessStepTracks', + useAnyMVA = False, + GBRForestLabel = 'HIMVASelectorIter12', + GBRForestVars = ['chi2perdofperlayer', 'nhits', 'nlayers', 'eta'], trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiPixelLessStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiPixelLessStepTight', - preFilterName = 'hiPixelLessStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - minMVA = cms.double(-0.2) - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiPixelLessStep', - preFilterName = 'hiPixelLessStepTight', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - minMVA = cms.double(-0.09) - ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiPixelLessStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiPixelLessStepTight', + preFilterName = 'hiPixelLessStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, + minMVA = -0.2 + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiPixelLessStep', + preFilterName = 'hiPixelLessStepTight', + applyAdaptedPVCuts = False, + useMVA = False, + minMVA = -0.09 + ), ) #end of vpset - ) #end of clone +) #end of clone import RecoTracker.FinalTrackSelectors.trackListMerger_cfi hiPixelLessStepQual = RecoTracker.FinalTrackSelectors.trackListMerger_cfi.trackListMerger.clone( - TrackProducers=cms.VInputTag(cms.InputTag('hiPixelLessStepTracks')), - hasSelector=cms.vint32(1), - selectedTrackQuals = cms.VInputTag(cms.InputTag("hiPixelLessStepSelector","hiPixelLessStep")), + TrackProducers = ['hiPixelLessStepTracks'], + hasSelector = [1], + selectedTrackQuals = ["hiPixelLessStepSelector:hiPixelLessStep"], copyExtras = True, makeReKeyedSeeds = cms.untracked.bool(False), - ) +) hiPixelLessStepTask = cms.Task(hiPixelLessStepClusters, pixelLessStepSeedLayers, diff --git a/RecoHI/HiTracking/python/hiPixelPairStep_cff.py b/RecoHI/HiTracking/python/hiPixelPairStep_cff.py index f3c409f8aec9d..10f98f1781995 100644 --- a/RecoHI/HiTracking/python/hiPixelPairStep_cff.py +++ b/RecoHI/HiTracking/python/hiPixelPairStep_cff.py @@ -26,52 +26,58 @@ # SEEDING LAYERS import RecoTracker.TkSeedingLayers.PixelLayerPairs_cfi hiPixelPairSeedLayers = RecoTracker.TkSeedingLayers.PixelLayerPairs_cfi.PixelLayerPairs.clone( - layerList = cms.vstring('BPix1+BPix2', 'BPix1+BPix3', 'BPix2+BPix3', - 'BPix1+FPix1_pos', 'BPix1+FPix1_neg', - 'BPix2+FPix1_pos', 'BPix2+FPix1_neg', - 'FPix1_pos+FPix2_pos', 'FPix1_neg+FPix2_neg'), - BPix = cms.PSet( - TTRHBuilder = cms.string('TTRHBuilderWithoutAngle4PixelPairs'), - HitProducer = cms.string('siPixelRecHits'), - skipClusters = cms.InputTag('hiPixelPairClusters') - ), - FPix = cms.PSet( - TTRHBuilder = cms.string('TTRHBuilderWithoutAngle4PixelPairs'), - HitProducer = cms.string('siPixelRecHits'), - skipClusters = cms.InputTag('hiPixelPairClusters') - ) + layerList = ['BPix1+BPix2', 'BPix1+BPix3', 'BPix2+BPix3', + 'BPix1+FPix1_pos', 'BPix1+FPix1_neg', + 'BPix2+FPix1_pos', 'BPix2+FPix1_neg', + 'FPix1_pos+FPix2_pos', 'FPix1_neg+FPix2_neg'], + BPix = cms.PSet( + TTRHBuilder = cms.string('TTRHBuilderWithoutAngle4PixelPairs'), + HitProducer = cms.string('siPixelRecHits'), + skipClusters = cms.InputTag('hiPixelPairClusters') + ), + FPix = cms.PSet( + TTRHBuilder = cms.string('TTRHBuilderWithoutAngle4PixelPairs'), + HitProducer = cms.string('siPixelRecHits'), + skipClusters = cms.InputTag('hiPixelPairClusters') + ) ) from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 trackingPhase1.toModify(hiPixelPairSeedLayers, - layerList = cms.vstring('BPix1+BPix4','BPix1+FPix1_pos','BPix1+FPix1_neg') #only use first and fourth barrel layers or first barrel and first forward layer around area where BPIX2+3 are inactive + layerList = ['BPix1+BPix4','BPix1+FPix1_pos','BPix1+FPix1_neg'] #only use first and fourth barrel layers or first barrel and first forward layer around area where BPIX2+3 are inactive ) # SEEDS import RecoTracker.TkSeedGenerator.GlobalSeedsFromPairsWithVertices_cff -hiPixelPairSeeds = RecoTracker.TkSeedGenerator.GlobalSeedsFromPairsWithVertices_cff.globalSeedsFromPairsWithVertices.clone() -hiPixelPairSeeds.RegionFactoryPSet.RegionPSet.VertexCollection=cms.InputTag("hiSelectedPixelVertex") -hiPixelPairSeeds.RegionFactoryPSet.RegionPSet.ptMin = 1.0 -hiPixelPairSeeds.RegionFactoryPSet.RegionPSet.originRadius = 0.005 -hiPixelPairSeeds.RegionFactoryPSet.RegionPSet.nSigmaZ = 4.0 -# sigmaZVertex is only used when usedFixedError is True -Matt -hiPixelPairSeeds.RegionFactoryPSet.RegionPSet.sigmaZVertex = 4.0 -hiPixelPairSeeds.RegionFactoryPSet.RegionPSet.useFixedError = cms.bool(False) -hiPixelPairSeeds.OrderedHitsFactoryPSet.SeedingLayers = cms.InputTag('hiPixelPairSeedLayers') -hiPixelPairSeeds.OrderedHitsFactoryPSet.maxElement = 5000000 -hiPixelPairSeeds.ClusterCheckPSet.MaxNumberOfPixelClusters = 5000000 -hiPixelPairSeeds.ClusterCheckPSet.MaxNumberOfCosmicClusters = 50000000 -hiPixelPairSeeds.ClusterCheckPSet.MaxNumberOfCosmicClusters = 50000000 -del hiPixelPairSeeds.ClusterCheckPSet.cut - -hiPixelPairSeeds.SeedComparitorPSet = cms.PSet( - ComponentName = cms.string('PixelClusterShapeSeedComparitor'), - FilterAtHelixStage = cms.bool(True), - FilterPixelHits = cms.bool(True), - FilterStripHits = cms.bool(False), - ClusterShapeHitFilterName = cms.string('ClusterShapeHitFilter'), - ClusterShapeCacheSrc = cms.InputTag("siPixelClusterShapeCache") +hiPixelPairSeeds = RecoTracker.TkSeedGenerator.GlobalSeedsFromPairsWithVertices_cff.globalSeedsFromPairsWithVertices.clone( + RegionFactoryPSet = dict( + RegionPSet = dict( + VertexCollection = "hiSelectedPixelVertex", + ptMin = 1.0, + originRadius = 0.005, + nSigmaZ = 4.0, + # sigmaZVertex is only used when usedFixedError is True -Matt + sigmaZVertex = 4.0, + useFixedError = False + ) + ), + OrderedHitsFactoryPSet = dict( + SeedingLayers = 'hiPixelPairSeedLayers', + maxElement = 5000000 + ), + ClusterCheckPSet = dict( + MaxNumberOfPixelClusters = 5000000, + MaxNumberOfCosmicClusters = 50000000, + cut = "" + ), + SeedComparitorPSet = cms.PSet( + ComponentName = cms.string('PixelClusterShapeSeedComparitor'), + FilterAtHelixStage = cms.bool(True), + FilterPixelHits = cms.bool(True), + FilterStripHits = cms.bool(False), + ClusterShapeHitFilterName = cms.string('ClusterShapeHitFilter'), + ClusterShapeCacheSrc = cms.InputTag("siPixelClusterShapeCache") ) - +) #rectangular tracking region around area missing BPIX2/3 in Phase 1 from RecoTracker.TkTrackingRegions.pointSeededTrackingRegion_cfi import pointSeededTrackingRegion as _pointSeededTrackingRegion hiPixelPairStepTrackingRegionPhase1 = _pointSeededTrackingRegion.clone( @@ -97,7 +103,7 @@ seedingLayers = "hiPixelPairSeedLayers", trackingRegions = "hiPixelPairStepTrackingRegionPhase1", clusterCheck = "", - produceSeedingHitSets = cms.bool(True), + produceSeedingHitSets = True, ) from RecoTracker.TkSeedGenerator.seedCreatorFromRegionConsecutiveHitsEDProducer_cff import seedCreatorFromRegionConsecutiveHitsEDProducer as _seedCreatorFromRegionConsecutiveHitsEDProducer @@ -119,102 +125,100 @@ #maxLostHits = 0, minimumNumberOfHits = 6, minPt = 1.0 - ) +) import TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi hiPixelPairChi2Est = TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi.Chi2MeasurementEstimator.clone( - ComponentName = cms.string('hiPixelPairChi2Est'), - nSigma = cms.double(3.0), - MaxChi2 = cms.double(9.0) - ) + ComponentName = 'hiPixelPairChi2Est', + nSigma = 3.0, + MaxChi2 = 9.0 +) # TRACK BUILDING import RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi hiPixelPairTrajectoryBuilder = RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi.GroupedCkfTrajectoryBuilder.clone( - MeasurementTrackerName = '', - trajectoryFilter = cms.PSet(refToPSet_ = cms.string('hiPixelPairTrajectoryFilter')), - maxCand = 3, - estimator = cms.string('hiPixelPairChi2Est'), - maxDPhiForLooperReconstruction = cms.double(2.0), - maxPtForLooperReconstruction = cms.double(0.7) - ) + MeasurementTrackerName = '', + trajectoryFilter = dict(refToPSet_ = 'hiPixelPairTrajectoryFilter'), + maxCand = 3, + estimator = 'hiPixelPairChi2Est', + maxDPhiForLooperReconstruction = cms.double(2.0), + maxPtForLooperReconstruction = cms.double(0.7) +) # MAKING OF TRACK CANDIDATES import RecoTracker.CkfPattern.CkfTrackCandidates_cfi hiPixelPairTrackCandidates = RecoTracker.CkfPattern.CkfTrackCandidates_cfi.ckfTrackCandidates.clone( - src = cms.InputTag('hiPixelPairSeeds'), + src = 'hiPixelPairSeeds', clustersToSkip = cms.InputTag('hiPixelPairClusters'), - TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('hiPixelPairTrajectoryBuilder')), + TrajectoryBuilderPSet = dict(refToPSet_ = 'hiPixelPairTrajectoryBuilder'), ### these two parameters are relevant only for the CachingSeedCleanerBySharedInput numHitsForSeedCleaner = cms.int32(50), onlyPixelHitsForSeedCleaner = cms.bool(True), - - ) +) trackingPhase1.toModify(hiPixelPairTrackCandidates, - src = cms.InputTag('hiPixelPairStepSeedsPhase1') + src = 'hiPixelPairStepSeedsPhase1' ) - # TRACK FITTING import RecoTracker.TrackProducer.TrackProducer_cfi hiPixelPairGlobalPrimTracks = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone( - AlgorithmName = cms.string('pixelPairStep'), + AlgorithmName = 'pixelPairStep', src = 'hiPixelPairTrackCandidates', - Fitter = cms.string('FlexibleKFFittingSmoother') - ) + Fitter = 'FlexibleKFFittingSmoother' +) + # Final selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiPixelPairStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiPixelPairGlobalPrimTracks', - useAnyMVA = cms.bool(True), - GBRForestLabel = cms.string('HIMVASelectorIter6'), - GBRForestVars = cms.vstring(['chi2perdofperlayer', 'dxyperdxyerror', 'dzperdzerror', 'nhits', 'nlayers', 'eta']), + src = 'hiPixelPairGlobalPrimTracks', + useAnyMVA = True, + GBRForestLabel = 'HIMVASelectorIter6', + GBRForestVars = ['chi2perdofperlayer', 'dxyperdxyerror', 'dzperdzerror', 'nhits', 'nlayers', 'eta'], trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiPixelPairStepLoose', - useMVA = cms.bool(False) - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiPixelPairStepTight', - preFilterName = 'hiPixelPairStepLoose', - useMVA = cms.bool(True), - minMVA = cms.double(-0.58) - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiPixelPairStep', - preFilterName = 'hiPixelPairStepTight', - useMVA = cms.bool(True), - minMVA = cms.double(0.77) - ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiPixelPairStepLoose', + useMVA = False + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiPixelPairStepTight', + preFilterName = 'hiPixelPairStepLoose', + useMVA = True, + minMVA = -0.58 + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiPixelPairStep', + preFilterName = 'hiPixelPairStepTight', + useMVA = True, + minMVA = 0.77 + ), ) #end of vpset - ) #end of clone +) #end of clone from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiPixelPairStepSelector, useAnyMVA = cms.bool(False)) -trackingPhase1.toModify(hiPixelPairStepSelector, trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiPixelPairStepLoose', - useMVA = cms.bool(False) - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiPixelPairStepTight', - preFilterName = 'hiPixelPairStepLoose', - useMVA = cms.bool(False), - minMVA = cms.double(-0.58) - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiPixelPairStep', - preFilterName = 'hiPixelPairStepTight', - useMVA = cms.bool(False), - minMVA = cms.double(0.77) - ), +trackingPhase1.toModify(hiPixelPairStepSelector, + useAnyMVA = False, + trackSelectors= cms.VPSet( + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiPixelPairStepLoose', + useMVA = False + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiPixelPairStepTight', + preFilterName = 'hiPixelPairStepLoose', + useMVA = False, + minMVA = -0.58 + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiPixelPairStep', + preFilterName = 'hiPixelPairStepTight', + useMVA = False, + minMVA = 0.77 + ), ) #end of vpset ) - - # Final sequence hiPixelPairStepTask = cms.Task(hiPixelPairClusters, hiPixelPairSeedLayers, diff --git a/RecoHI/HiTracking/python/hiRegitDetachedTripletStep_cff.py b/RecoHI/HiTracking/python/hiRegitDetachedTripletStep_cff.py index a09d38447110c..c6fa41618e548 100644 --- a/RecoHI/HiTracking/python/hiRegitDetachedTripletStep_cff.py +++ b/RecoHI/HiTracking/python/hiRegitDetachedTripletStep_cff.py @@ -31,69 +31,72 @@ # SEEDING LAYERS -hiRegitDetachedTripletStepSeedLayers = RecoTracker.IterativeTracking.DetachedTripletStep_cff.detachedTripletStepSeedLayers.clone() -hiRegitDetachedTripletStepSeedLayers.BPix.skipClusters = cms.InputTag('hiRegitDetachedTripletStepClusters') -hiRegitDetachedTripletStepSeedLayers.FPix.skipClusters = cms.InputTag('hiRegitDetachedTripletStepClusters') +hiRegitDetachedTripletStepSeedLayers = RecoTracker.IterativeTracking.DetachedTripletStep_cff.detachedTripletStepSeedLayers.clone( + BPix = dict(skipClusters = 'hiRegitDetachedTripletStepClusters'), + FPix = dict(skipClusters = 'hiRegitDetachedTripletStepClusters') +) -# seeding -hiRegitDetachedTripletStepSeeds = RecoTracker.IterativeTracking.DetachedTripletStep_cff.detachedTripletStepSeeds.clone() -hiRegitDetachedTripletStepSeeds.RegionFactoryPSet = HiTrackingRegionFactoryFromJetsBlock.clone() -hiRegitDetachedTripletStepSeeds.ClusterCheckPSet.doClusterCheck = False # do not check for max number of clusters pixel or strips -hiRegitDetachedTripletStepSeeds.OrderedHitsFactoryPSet.SeedingLayers = 'hiRegitDetachedTripletStepSeedLayers' from RecoPixelVertexing.PixelLowPtUtilities.ClusterShapeHitFilterESProducer_cfi import * #import RecoPixelVertexing.PixelLowPtUtilities.LowPtClusterShapeSeedComparitor_cfi -#hiRegitDetachedTripletStepSeeds.OrderedHitsFactoryPSet.GeneratorPSet.SeedComparitorPSet = RecoPixelVertexing.PixelLowPtUtilities.LowPtClusterShapeSeedComparitor_cfi.LowPtClusterShapeSeedComparitor.clone() -hiRegitDetachedTripletStepSeeds.RegionFactoryPSet.RegionPSet.ptMin = 1.2 - +# seeding +hiRegitDetachedTripletStepSeeds = RecoTracker.IterativeTracking.DetachedTripletStep_cff.detachedTripletStepSeeds.clone( + RegionFactoryPSet = HiTrackingRegionFactoryFromJetsBlock.clone( + RegionPSet = dict(ptMin = 1.2) + ), + ClusterCheckPSet = dict(doClusterCheck = False), # do not check for max number of clusters pixel or strips + OrderedHitsFactoryPSet = dict( + SeedingLayers = 'hiRegitDetachedTripletStepSeedLayers' + #GeneratorPSet = dict(SeedComparitorPSet = RecoPixelVertexing.PixelLowPtUtilities.LowPtClusterShapeSeedComparitor_cfi.LowPtClusterShapeSeedComparitor.clone()), + ), +) # building: feed the new-named seeds hiRegitDetachedTripletStepTrajectoryFilter = RecoTracker.IterativeTracking.DetachedTripletStep_cff.detachedTripletStepTrajectoryFilterBase.clone() - hiRegitDetachedTripletStepTrajectoryBuilder = RecoTracker.IterativeTracking.DetachedTripletStep_cff.detachedTripletStepTrajectoryBuilder.clone( trajectoryFilter = cms.PSet(refToPSet_ = cms.string('hiRegitDetachedTripletStepTrajectoryFilter')), clustersToSkip = cms.InputTag('hiRegitDetachedTripletStepClusters') ) hiRegitDetachedTripletStepTrackCandidates = RecoTracker.IterativeTracking.DetachedTripletStep_cff.detachedTripletStepTrackCandidates.clone( - src = cms.InputTag('hiRegitDetachedTripletStepSeeds'), + src = 'hiRegitDetachedTripletStepSeeds', TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('hiRegitDetachedTripletStepTrajectoryBuilder')), maxNSeeds=100000 - ) +) # fitting: feed new-names hiRegitDetachedTripletStepTracks = RecoTracker.IterativeTracking.DetachedTripletStep_cff.detachedTripletStepTracks.clone( src = 'hiRegitDetachedTripletStepTrackCandidates', - #AlgorithmName = cms.string('jetCoreRegionalStep'), - AlgorithmName = cms.string('detachedTripletStep'), - ) + #AlgorithmName = 'jetCoreRegionalStep', + AlgorithmName = 'detachedTripletStep', +) # Track selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiRegitDetachedTripletStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiRegitDetachedTripletStepTracks', - trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiRegitDetachedTripletStepLoose', - d0_par2 = [9999.0, 0.0], - dz_par2 = [9999.0, 0.0], - applyAdaptedPVCuts = False - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiRegitDetachedTripletStepTight', - preFilterName = 'hiRegitDetachedTripletStepLoose', - d0_par2 = [9999.0, 0.0], - dz_par2 = [9999.0, 0.0], - applyAdaptedPVCuts = False - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiRegitDetachedTripletStep', - preFilterName = 'hiRegitDetachedTripletStepTight', - d0_par2 = [9999.0, 0.0], - dz_par2 = [9999.0, 0.0], - applyAdaptedPVCuts = False + src = 'hiRegitDetachedTripletStepTracks', + trackSelectors = cms.VPSet( + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiRegitDetachedTripletStepLoose', + d0_par2 = [9999.0, 0.0], + dz_par2 = [9999.0, 0.0], + applyAdaptedPVCuts = False + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiRegitDetachedTripletStepTight', + preFilterName = 'hiRegitDetachedTripletStepLoose', + d0_par2 = [9999.0, 0.0], + dz_par2 = [9999.0, 0.0], + applyAdaptedPVCuts = False + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiRegitDetachedTripletStep', + preFilterName = 'hiRegitDetachedTripletStepTight', + d0_par2 = [9999.0, 0.0], + dz_par2 = [9999.0, 0.0], + applyAdaptedPVCuts = False ), - ) #end of vpset - ) #end of clone + ) #end of vpset +) #end of clone hiRegitDetachedTripletStepTask = cms.Task(hiRegitDetachedTripletStepClusters, diff --git a/RecoHI/HiTracking/python/hiRegitInitialStep_cff.py b/RecoHI/HiTracking/python/hiRegitInitialStep_cff.py index 945073bb7c8da..f425900472870 100644 --- a/RecoHI/HiTracking/python/hiRegitInitialStep_cff.py +++ b/RecoHI/HiTracking/python/hiRegitInitialStep_cff.py @@ -23,22 +23,23 @@ pixelClusters = cms.InputTag("siPixelClusters"), stripClusters = cms.InputTag("siStripClusters"), Common = cms.PSet( - maxChi2 = cms.double(9.0), - ), - Strip = cms.PSet( - maxChi2 = cms.double(9.0), - ) + maxChi2 = cms.double(9.0), + ), + Strip = cms.PSet( + maxChi2 = cms.double(9.0), + ) ) # seeding -hiRegitInitialStepSeeds = RecoTracker.IterativeTracking.InitialStep_cff.initialStepSeeds.clone() -hiRegitInitialStepSeeds.RegionFactoryPSet = HiTrackingRegionFactoryFromJetsBlock.clone() -hiRegitInitialStepSeeds.ClusterCheckPSet.doClusterCheck = False # do not check for max number of clusters pixel or strips -hiRegitInitialStepSeeds.skipClusters = cms.InputTag('hiRegitInitialStepClusters') -hiRegitInitialStepSeeds.RegionFactoryPSet.RegionPSet.ptMin = 1.2 - +hiRegitInitialStepSeeds = RecoTracker.IterativeTracking.InitialStep_cff.initialStepSeeds.clone( + RegionFactoryPSet = HiTrackingRegionFactoryFromJetsBlock.clone( + RegionPSet = dict(ptMin = 1.2) + ), + ClusterCheckPSet = dict(doClusterCheck = False), # do not check for max number of clusters pixel or strips + skipClusters = cms.InputTag('hiRegitInitialStepClusters') +) # building: feed the new-named seeds hiRegitInitialStepTrajectoryFilter = RecoTracker.IterativeTracking.InitialStep_cff.initialStepTrajectoryFilterBase.clone() @@ -50,45 +51,45 @@ # track candidates hiRegitInitialStepTrackCandidates = RecoTracker.IterativeTracking.InitialStep_cff.initialStepTrackCandidates.clone( - src = cms.InputTag('hiRegitInitialStepSeeds'), + src = 'hiRegitInitialStepSeeds', TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('hiRegitInitialStepTrajectoryBuilder')), maxNSeeds = 100000 - ) +) # fitting: feed new-names hiRegitInitialStepTracks = RecoTracker.IterativeTracking.InitialStep_cff.initialStepTracks.clone( src = 'hiRegitInitialStepTrackCandidates', - AlgorithmName = cms.string('initialStep') + AlgorithmName = 'initialStep' ) # Track selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiRegitInitialStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiRegitInitialStepTracks', - trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiRegitInitialStepLoose', - d0_par2 = [9999.0, 0.0], - dz_par2 = [9999.0, 0.0], - applyAdaptedPVCuts = False - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiRegitInitialStepTight', - preFilterName = 'hiRegitInitialStepLoose', - d0_par2 = [9999.0, 0.0], - dz_par2 = [9999.0, 0.0], - applyAdaptedPVCuts = False - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiRegitInitialStep', - preFilterName = 'hiRegitInitialStepTight', - d0_par2 = [9999.0, 0.0], - dz_par2 = [9999.0, 0.0], - applyAdaptedPVCuts = False - ), + src = 'hiRegitInitialStepTracks', + trackSelectors = cms.VPSet( + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiRegitInitialStepLoose', + d0_par2 = [9999.0, 0.0], + dz_par2 = [9999.0, 0.0], + applyAdaptedPVCuts = False + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiRegitInitialStepTight', + preFilterName = 'hiRegitInitialStepLoose', + d0_par2 = [9999.0, 0.0], + dz_par2 = [9999.0, 0.0], + applyAdaptedPVCuts = False + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiRegitInitialStep', + preFilterName = 'hiRegitInitialStepTight', + d0_par2 = [9999.0, 0.0], + dz_par2 = [9999.0, 0.0], + applyAdaptedPVCuts = False + ), ) #end of vpset - ) #end of clone +) #end of clone hiRegitInitialStepTask = cms.Task(hiGeneralTrackFilter, diff --git a/RecoHI/HiTracking/python/hiRegitLowPtTripletStep_cff.py b/RecoHI/HiTracking/python/hiRegitLowPtTripletStep_cff.py index bbfce67da46ca..64125a6fbd8b9 100644 --- a/RecoHI/HiTracking/python/hiRegitLowPtTripletStep_cff.py +++ b/RecoHI/HiTracking/python/hiRegitLowPtTripletStep_cff.py @@ -19,31 +19,37 @@ pixelClusters = cms.InputTag("siPixelClusters"), stripClusters = cms.InputTag("siStripClusters"), Common = cms.PSet( - maxChi2 = cms.double(9.0), - ), - Strip = cms.PSet( - maxChi2 = cms.double(9.0), - #Yen-Jie's mod to preserve merged clusters - maxSize = cms.uint32(2) - ) + maxChi2 = cms.double(9.0), + ), + Strip = cms.PSet( + maxChi2 = cms.double(9.0), + #Yen-Jie's mod to preserve merged clusters + maxSize = cms.uint32(2) + ) ) # SEEDING LAYERS -hiRegitLowPtTripletStepSeedLayers = RecoTracker.IterativeTracking.LowPtTripletStep_cff.lowPtTripletStepSeedLayers.clone() -hiRegitLowPtTripletStepSeedLayers.BPix.skipClusters = cms.InputTag('hiRegitLowPtTripletStepClusters') -hiRegitLowPtTripletStepSeedLayers.FPix.skipClusters = cms.InputTag('hiRegitLowPtTripletStepClusters') +hiRegitLowPtTripletStepSeedLayers = RecoTracker.IterativeTracking.LowPtTripletStep_cff.lowPtTripletStepSeedLayers.clone( + BPix = dict(skipClusters = 'hiRegitLowPtTripletStepClusters'), + FPix = dict(skipClusters = 'hiRegitLowPtTripletStepClusters') +) -# seeds -hiRegitLowPtTripletStepSeeds = RecoTracker.IterativeTracking.LowPtTripletStep_cff.lowPtTripletStepSeeds.clone() -hiRegitLowPtTripletStepSeeds.RegionFactoryPSet = HiTrackingRegionFactoryFromJetsBlock.clone() -hiRegitLowPtTripletStepSeeds.ClusterCheckPSet.doClusterCheck = False # do not check for max number of clusters pixel or strips -hiRegitLowPtTripletStepSeeds.OrderedHitsFactoryPSet.SeedingLayers = 'hiRegitLowPtTripletStepSeedLayers' from RecoPixelVertexing.PixelLowPtUtilities.ClusterShapeHitFilterESProducer_cfi import * import RecoPixelVertexing.PixelLowPtUtilities.LowPtClusterShapeSeedComparitor_cfi -hiRegitLowPtTripletStepSeeds.OrderedHitsFactoryPSet.GeneratorPSet.SeedComparitorPSet = RecoPixelVertexing.PixelLowPtUtilities.LowPtClusterShapeSeedComparitor_cfi.LowPtClusterShapeSeedComparitor.clone() -hiRegitLowPtTripletStepSeeds.RegionFactoryPSet.RegionPSet.ptMin = 0.4 - +# seeds +hiRegitLowPtTripletStepSeeds = RecoTracker.IterativeTracking.LowPtTripletStep_cff.lowPtTripletStepSeeds.clone( + RegionFactoryPSet = HiTrackingRegionFactoryFromJetsBlock.clone( + RegionPSet = dict(ptMin = 0.4) + ), + ClusterCheckPSet = dict(doClusterCheck = False), # do not check for max number of clusters pixel or strips + OrderedHitsFactoryPSet = dict( + SeedingLayers = 'hiRegitLowPtTripletStepSeedLayers', + GeneratorPSet = dict ( + SeedComparitorPSet = RecoPixelVertexing.PixelLowPtUtilities.LowPtClusterShapeSeedComparitor_cfi.LowPtClusterShapeSeedComparitor.clone() + ), + ), +) # building: feed the new-named seeds hiRegitLowPtTripletStepTrajectoryFilter = RecoTracker.IterativeTracking.LowPtTripletStep_cff.lowPtTripletStepStandardTrajectoryFilter.clone() @@ -56,46 +62,46 @@ # track candidates hiRegitLowPtTripletStepTrackCandidates = RecoTracker.IterativeTracking.LowPtTripletStep_cff.lowPtTripletStepTrackCandidates.clone( - src = cms.InputTag('hiRegitLowPtTripletStepSeeds'), + src = 'hiRegitLowPtTripletStepSeeds', TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('hiRegitLowPtTripletStepTrajectoryBuilder')), maxNSeeds = 100000 - ) +) # fitting: feed new-names hiRegitLowPtTripletStepTracks = RecoTracker.IterativeTracking.LowPtTripletStep_cff.lowPtTripletStepTracks.clone( src = 'hiRegitLowPtTripletStepTrackCandidates', - #AlgorithmName = cms.string('pixelLessStep') - AlgorithmName = cms.string('lowPtTripletStep') + #AlgorithmName = 'pixelLessStep' + AlgorithmName = 'lowPtTripletStep' ) # Track selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiRegitLowPtTripletStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiRegitLowPtTripletStepTracks', - trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiRegitLowPtTripletStepLoose', - d0_par2 = [9999.0, 0.0], - dz_par2 = [9999.0, 0.0], - applyAdaptedPVCuts = False - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiRegitLowPtTripletStepTight', - preFilterName = 'hiRegitLowPtTripletStepLoose', - d0_par2 = [9999.0, 0.0], - dz_par2 = [9999.0, 0.0], - applyAdaptedPVCuts = False - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiRegitLowPtTripletStep', - preFilterName = 'hiRegitLowPtTripletStepTight', - d0_par2 = [9999.0, 0.0], - dz_par2 = [9999.0, 0.0], - applyAdaptedPVCuts = False - ), + src = 'hiRegitLowPtTripletStepTracks', + trackSelectors = cms.VPSet( + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiRegitLowPtTripletStepLoose', + d0_par2 = [9999.0, 0.0], + dz_par2 = [9999.0, 0.0], + applyAdaptedPVCuts = False + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiRegitLowPtTripletStepTight', + preFilterName = 'hiRegitLowPtTripletStepLoose', + d0_par2 = [9999.0, 0.0], + dz_par2 = [9999.0, 0.0], + applyAdaptedPVCuts = False + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiRegitLowPtTripletStep', + preFilterName = 'hiRegitLowPtTripletStepTight', + d0_par2 = [9999.0, 0.0], + dz_par2 = [9999.0, 0.0], + applyAdaptedPVCuts = False + ), ) #end of vpset - ) #end of clone +) #end of clone hiRegitLowPtTripletStepTask = cms.Task(hiRegitLowPtTripletStepClusters, diff --git a/RecoHI/HiTracking/python/hiRegitMixedTripletStep_cff.py b/RecoHI/HiTracking/python/hiRegitMixedTripletStep_cff.py index d52ad3d204eca..46688260b095a 100644 --- a/RecoHI/HiTracking/python/hiRegitMixedTripletStep_cff.py +++ b/RecoHI/HiTracking/python/hiRegitMixedTripletStep_cff.py @@ -19,54 +19,55 @@ pixelClusters = cms.InputTag("siPixelClusters"), stripClusters = cms.InputTag("siStripClusters"), Common = cms.PSet( - maxChi2 = cms.double(9.0), - ), - Strip = cms.PSet( - maxChi2 = cms.double(9.0), - #Yen-Jie's mod to preserve merged clusters - maxSize = cms.uint32(2) - ) + maxChi2 = cms.double(9.0), + ), + Strip = cms.PSet( + maxChi2 = cms.double(9.0), + #Yen-Jie's mod to preserve merged clusters + maxSize = cms.uint32(2) + ) ) # SEEDING LAYERS A -hiRegitMixedTripletStepSeedLayersA = RecoTracker.IterativeTracking.MixedTripletStep_cff.mixedTripletStepSeedLayersA.clone() -hiRegitMixedTripletStepSeedLayersA.BPix.skipClusters = cms.InputTag('hiRegitMixedTripletStepClusters') -hiRegitMixedTripletStepSeedLayersA.FPix.skipClusters = cms.InputTag('hiRegitMixedTripletStepClusters') -hiRegitMixedTripletStepSeedLayersA.TEC.skipClusters = cms.InputTag('hiRegitMixedTripletStepClusters') -hiRegitMixedTripletStepSeedLayersA.layerList = cms.vstring('BPix1+BPix2+BPix3', - 'BPix1+BPix2+FPix1_pos', 'BPix1+BPix2+FPix1_neg', - 'BPix1+FPix1_pos+FPix2_pos', 'BPix1+FPix1_neg+FPix2_neg', - 'BPix2+FPix1_pos+FPix2_pos', 'BPix2+FPix1_neg+FPix2_neg', - 'FPix1_pos+FPix2_pos+TEC1_pos', 'FPix1_neg+FPix2_neg+TEC1_neg',) - +hiRegitMixedTripletStepSeedLayersA = RecoTracker.IterativeTracking.MixedTripletStep_cff.mixedTripletStepSeedLayersA.clone( + BPix = dict(skipClusters = 'hiRegitMixedTripletStepClusters'), + FPix = dict(skipClusters = 'hiRegitMixedTripletStepClusters'), + TEC = dict(skipClusters = 'hiRegitMixedTripletStepClusters'), + layerList = ['BPix1+BPix2+BPix3', + 'BPix1+BPix2+FPix1_pos', 'BPix1+BPix2+FPix1_neg', + 'BPix1+FPix1_pos+FPix2_pos', 'BPix1+FPix1_neg+FPix2_neg', + 'BPix2+FPix1_pos+FPix2_pos', 'BPix2+FPix1_neg+FPix2_neg', + 'FPix1_pos+FPix2_pos+TEC1_pos', 'FPix1_neg+FPix2_neg+TEC1_neg'] +) # SEEDS A -hiRegitMixedTripletStepSeedsA = RecoTracker.IterativeTracking.MixedTripletStep_cff.mixedTripletStepSeedsA.clone() -hiRegitMixedTripletStepSeedsA.RegionFactoryPSet = HiTrackingRegionFactoryFromJetsBlock.clone() -hiRegitMixedTripletStepSeedsA.ClusterCheckPSet.doClusterCheck = False # do not check for max number of clusters pixel or strips -hiRegitMixedTripletStepSeedsA.OrderedHitsFactoryPSet.SeedingLayers = 'hiRegitMixedTripletStepSeedLayersA' -hiRegitMixedTripletStepSeedsA.RegionFactoryPSet.RegionPSet.ptMin = 1.0 - +hiRegitMixedTripletStepSeedsA = RecoTracker.IterativeTracking.MixedTripletStep_cff.mixedTripletStepSeedsA.clone( + RegionFactoryPSet = HiTrackingRegionFactoryFromJetsBlock.clone( + RegionPSet = dict(ptMin = 1.0) + ), + ClusterCheckPSet = dict(doClusterCheck = False), # do not check for max number of clusters pixel or strips + OrderedHitsFactoryPSet = dict(SeedingLayers = 'hiRegitMixedTripletStepSeedLayersA'), +) # SEEDING LAYERS B -hiRegitMixedTripletStepSeedLayersB = RecoTracker.IterativeTracking.MixedTripletStep_cff.mixedTripletStepSeedLayersB.clone() -hiRegitMixedTripletStepSeedLayersB.BPix.skipClusters = cms.InputTag('hiRegitMixedTripletStepClusters') -hiRegitMixedTripletStepSeedLayersB.TIB.skipClusters = cms.InputTag('hiRegitMixedTripletStepClusters') -hiRegitMixedTripletStepSeedLayersB.layerList = cms.vstring('BPix2+BPix3+TIB1','BPix2+BPix3+TIB2') - -hiRegitMixedTripletStepSeedsB = RecoTracker.IterativeTracking.MixedTripletStep_cff.mixedTripletStepSeedsB.clone() -hiRegitMixedTripletStepSeedsB.RegionFactoryPSet = HiTrackingRegionFactoryFromJetsBlock.clone() -hiRegitMixedTripletStepSeedsB.ClusterCheckPSet.doClusterCheck = False # do not check for max number of clusters pixel or strips -hiRegitMixedTripletStepSeedsB.OrderedHitsFactoryPSet.SeedingLayers = 'hiRegitMixedTripletStepSeedLayersB' -hiRegitMixedTripletStepSeedsB.RegionFactoryPSet.RegionPSet.ptMin = 1.0 - +hiRegitMixedTripletStepSeedLayersB = RecoTracker.IterativeTracking.MixedTripletStep_cff.mixedTripletStepSeedLayersB.clone( + BPix = dict(skipClusters = 'hiRegitMixedTripletStepClusters'), + TIB = dict(skipClusters = 'hiRegitMixedTripletStepClusters'), + layerList = ['BPix2+BPix3+TIB1','BPix2+BPix3+TIB2'] +) +hiRegitMixedTripletStepSeedsB = RecoTracker.IterativeTracking.MixedTripletStep_cff.mixedTripletStepSeedsB.clone( + RegionFactoryPSet = HiTrackingRegionFactoryFromJetsBlock.clone( + RegionPSet = dict(ptMin = 1.0) + ), + ClusterCheckPSet = dict(doClusterCheck = False), # do not check for max number of clusters pixel or strips + OrderedHitsFactoryPSet = dict(SeedingLayers = 'hiRegitMixedTripletStepSeedLayersB'), +) # combine seeds hiRegitMixedTripletStepSeeds = RecoTracker.IterativeTracking.MixedTripletStep_cff.mixedTripletStepSeeds.clone( - seedCollections = cms.VInputTag( - cms.InputTag('hiRegitMixedTripletStepSeedsA'), - cms.InputTag('hiRegitMixedTripletStepSeedsB'), - ) - ) + seedCollections = ['hiRegitMixedTripletStepSeedsA', + 'hiRegitMixedTripletStepSeedsB' + ], +) # track building hiRegitMixedTripletStepTrajectoryFilter = RecoTracker.IterativeTracking.MixedTripletStep_cff.mixedTripletStepTrajectoryFilter.clone() @@ -77,7 +78,7 @@ ) hiRegitMixedTripletStepTrackCandidates = RecoTracker.IterativeTracking.MixedTripletStep_cff.mixedTripletStepTrackCandidates.clone( - src = cms.InputTag('hiRegitMixedTripletStepSeeds'), + src = 'hiRegitMixedTripletStepSeeds', TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('hiRegitMixedTripletStepTrajectoryBuilder')), maxNSeeds = 100000 ) @@ -85,37 +86,37 @@ # fitting: feed new-names hiRegitMixedTripletStepTracks = RecoTracker.IterativeTracking.MixedTripletStep_cff.mixedTripletStepTracks.clone( src = 'hiRegitMixedTripletStepTrackCandidates', - #AlgorithmName = cms.string('conversionStep'), - AlgorithmName = cms.string('mixedTripletStep'), - ) + #AlgorithmName = 'conversionStep', + AlgorithmName = 'mixedTripletStep', +) # Track selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiRegitMixedTripletStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiRegitMixedTripletStepTracks', - trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiRegitMixedTripletStepLoose', - d0_par2 = [9999.0, 0.0], - dz_par2 = [9999.0, 0.0], - applyAdaptedPVCuts = False - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiRegitMixedTripletStepTight', - preFilterName = 'hiRegitMixedTripletStepLoose', - d0_par2 = [9999.0, 0.0], - dz_par2 = [9999.0, 0.0], - applyAdaptedPVCuts = False - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiRegitMixedTripletStep', - preFilterName = 'hiRegitMixedTripletStepTight', - d0_par2 = [9999.0, 0.0], - dz_par2 = [9999.0, 0.0], - applyAdaptedPVCuts = False - ), + src = 'hiRegitMixedTripletStepTracks', + trackSelectors = cms.VPSet( + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiRegitMixedTripletStepLoose', + d0_par2 = [9999.0, 0.0], + dz_par2 = [9999.0, 0.0], + applyAdaptedPVCuts = False + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiRegitMixedTripletStepTight', + preFilterName = 'hiRegitMixedTripletStepLoose', + d0_par2 = [9999.0, 0.0], + dz_par2 = [9999.0, 0.0], + applyAdaptedPVCuts = False + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiRegitMixedTripletStep', + preFilterName = 'hiRegitMixedTripletStepTight', + d0_par2 = [9999.0, 0.0], + dz_par2 = [9999.0, 0.0], + applyAdaptedPVCuts = False + ), ) #end of vpset - ) #end of clone +) #end of clone hiRegitMixedTripletStepTask = cms.Task(hiRegitMixedTripletStepClusters, hiRegitMixedTripletStepSeedLayersA, diff --git a/RecoHI/HiTracking/python/hiRegitPixelPairStep_cff.py b/RecoHI/HiTracking/python/hiRegitPixelPairStep_cff.py index c7777b29edfb6..0dc00747f25cc 100644 --- a/RecoHI/HiTracking/python/hiRegitPixelPairStep_cff.py +++ b/RecoHI/HiTracking/python/hiRegitPixelPairStep_cff.py @@ -19,30 +19,31 @@ pixelClusters = cms.InputTag("siPixelClusters"), stripClusters = cms.InputTag("siStripClusters"), Common = cms.PSet( - maxChi2 = cms.double(9.0), - ), - Strip = cms.PSet( - maxChi2 = cms.double(9.0), - #Yen-Jie's mod to preserve merged clusters - maxSize = cms.uint32(2) - ) + maxChi2 = cms.double(9.0), + ), + Strip = cms.PSet( + maxChi2 = cms.double(9.0), + #Yen-Jie's mod to preserve merged clusters + maxSize = cms.uint32(2) + ) ) # SEEDING LAYERS -hiRegitPixelPairStepSeedLayers = RecoTracker.IterativeTracking.PixelPairStep_cff.pixelPairStepSeedLayers.clone() -hiRegitPixelPairStepSeedLayers.BPix.skipClusters = cms.InputTag('hiRegitPixelPairStepClusters') -hiRegitPixelPairStepSeedLayers.FPix.skipClusters = cms.InputTag('hiRegitPixelPairStepClusters') - +hiRegitPixelPairStepSeedLayers = RecoTracker.IterativeTracking.PixelPairStep_cff.pixelPairStepSeedLayers.clone( + BPix = dict(skipClusters = 'hiRegitPixelPairStepClusters'), + FPix = dict(skipClusters = 'hiRegitPixelPairStepClusters') +) # seeding -hiRegitPixelPairStepSeeds = RecoTracker.IterativeTracking.PixelPairStep_cff.pixelPairStepSeeds.clone() -hiRegitPixelPairStepSeeds.RegionFactoryPSet = HiTrackingRegionFactoryFromJetsBlock.clone() -hiRegitPixelPairStepSeeds.ClusterCheckPSet.doClusterCheck = False # do not check for max number of clusters pixel or strips -hiRegitPixelPairStepSeeds.OrderedHitsFactoryPSet.SeedingLayers = 'hiRegitPixelPairStepSeedLayers' -hiRegitPixelPairStepSeeds.RegionFactoryPSet.RegionPSet.ptMin = 1.2 - +hiRegitPixelPairStepSeeds = RecoTracker.IterativeTracking.PixelPairStep_cff.pixelPairStepSeeds.clone( + RegionFactoryPSet = HiTrackingRegionFactoryFromJetsBlock.clone( + RegionPSet = dict(ptMin = 1.2) + ), + ClusterCheckPSet = dict(doClusterCheck = False), # do not check for max number of clusters pixel or strips + OrderedHitsFactoryPSet = dict(SeedingLayers = 'hiRegitPixelPairStepSeedLayers'), +) # building: feed the new-named seeds hiRegitPixelPairStepTrajectoryFilter = RecoTracker.IterativeTracking.PixelPairStep_cff.pixelPairStepTrajectoryFilterBase.clone() @@ -54,45 +55,45 @@ # trackign candidate hiRegitPixelPairStepTrackCandidates = RecoTracker.IterativeTracking.PixelPairStep_cff.pixelPairStepTrackCandidates.clone( - src = cms.InputTag('hiRegitPixelPairStepSeeds'), + src = 'hiRegitPixelPairStepSeeds', TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('hiRegitPixelPairStepTrajectoryBuilder')), maxNSeeds = 100000 - ) +) # fitting: feed new-names hiRegitPixelPairStepTracks = RecoTracker.IterativeTracking.PixelPairStep_cff.pixelPairStepTracks.clone( src = 'hiRegitPixelPairStepTrackCandidates', - AlgorithmName = cms.string('pixelPairStep'), - ) + AlgorithmName = 'pixelPairStep', +) # Track selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiRegitPixelPairStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiRegitPixelPairStepTracks', - trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiRegitPixelPairStepLoose', - d0_par2 = [9999.0, 0.0], - dz_par2 = [9999.0, 0.0], - applyAdaptedPVCuts = False - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiRegitPixelPairStepTight', - preFilterName = 'hiRegitPixelPairStepLoose', - d0_par2 = [9999.0, 0.0], - dz_par2 = [9999.0, 0.0], - applyAdaptedPVCuts = False - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiRegitPixelPairStep', - preFilterName = 'hiRegitPixelPairStepTight', - d0_par2 = [9999.0, 0.0], - dz_par2 = [9999.0, 0.0], - applyAdaptedPVCuts = False - ), + src = 'hiRegitPixelPairStepTracks', + trackSelectors = cms.VPSet( + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiRegitPixelPairStepLoose', + d0_par2 = [9999.0, 0.0], + dz_par2 = [9999.0, 0.0], + applyAdaptedPVCuts = False + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiRegitPixelPairStepTight', + preFilterName = 'hiRegitPixelPairStepLoose', + d0_par2 = [9999.0, 0.0], + dz_par2 = [9999.0, 0.0], + applyAdaptedPVCuts = False + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiRegitPixelPairStep', + preFilterName = 'hiRegitPixelPairStepTight', + d0_par2 = [9999.0, 0.0], + dz_par2 = [9999.0, 0.0], + applyAdaptedPVCuts = False + ), ) #end of vpset - ) #end of clone +) #end of clone hiRegitPixelPairStepTask = cms.Task(hiRegitPixelPairStepClusters, hiRegitPixelPairStepSeedLayers, diff --git a/RecoHI/HiTracking/python/hiRegitTracking_cff.py b/RecoHI/HiTracking/python/hiRegitTracking_cff.py index a37fd42647f79..97c26d97b63f7 100644 --- a/RecoHI/HiTracking/python/hiRegitTracking_cff.py +++ b/RecoHI/HiTracking/python/hiRegitTracking_cff.py @@ -47,5 +47,3 @@ hiRegitMixedTripletStepSeedsB.RegionFactoryPSet.RegionPSet.deltaPhiRegion = 0.4 hiRegitMixedTripletStepSeedsB.RegionFactoryPSet.RegionPSet.deltaEtaRegion = 0.4 - - diff --git a/RecoHI/HiTracking/python/hiTobTecStep_cff.py b/RecoHI/HiTracking/python/hiTobTecStep_cff.py index 524cb981b129d..52ba2973d0a61 100644 --- a/RecoHI/HiTracking/python/hiTobTecStep_cff.py +++ b/RecoHI/HiTracking/python/hiTobTecStep_cff.py @@ -9,14 +9,14 @@ # Very large impact parameter tracking using TOB + TEC ring 5 seeding # ####################################################################### from RecoHI.HiTracking.hiPixelLessStep_cff import hiPixelLessStepClusters -hiTobTecStepClusters = hiPixelLessStepClusters.clone() -hiTobTecStepClusters.trajectories = cms.InputTag("hiPixelLessStepTracks") -hiTobTecStepClusters.overrideTrkQuals = cms.InputTag('hiPixelLessStepSelector','hiPixelLessStep') - +hiTobTecStepClusters = hiPixelLessStepClusters.clone( + trajectories = "hiPixelLessStepTracks", + overrideTrkQuals = 'hiPixelLessStepSelector:hiPixelLessStep' +) # TRIPLET SEEDING LAYERS -tobTecStepSeedLayersTripl.TOB.skipClusters = cms.InputTag('hiTobTecStepClusters') -tobTecStepSeedLayersTripl.MTOB.skipClusters = cms.InputTag('hiTobTecStepClusters') -tobTecStepSeedLayersTripl.MTEC.skipClusters = cms.InputTag('hiTobTecStepClusters') +tobTecStepSeedLayersTripl.TOB.skipClusters = 'hiTobTecStepClusters' +tobTecStepSeedLayersTripl.MTOB.skipClusters = 'hiTobTecStepClusters' +tobTecStepSeedLayersTripl.MTEC.skipClusters = 'hiTobTecStepClusters' # Triplet TrackingRegion from RecoHI.HiTracking.hiMixedTripletStep_cff import hiMixedTripletStepTrackingRegionsA as _hiMixedTripletStepTrackingRegionsA @@ -31,8 +31,8 @@ tobTecStepHitDoubletsTripl.clusterCheck = "" tobTecStepHitDoubletsTripl.trackingRegions = "hiTobTecStepTrackingRegionsTripl" -tobTecStepSeedLayersPair.TOB.skipClusters = cms.InputTag('hiTobTecStepClusters') -tobTecStepSeedLayersPair.TEC.skipClusters = cms.InputTag('hiTobTecStepClusters') +tobTecStepSeedLayersPair.TOB.skipClusters = 'hiTobTecStepClusters' +tobTecStepSeedLayersPair.TEC.skipClusters = 'hiTobTecStepClusters' # Pair TrackingRegion hiTobTecStepTrackingRegionsPair = hiTobTecStepTrackingRegionsTripl.clone(RegionPSet=dict( @@ -52,7 +52,7 @@ tobTecStepTrajectoryFilter.minPt = 0.85 # MAKING OF TRACK CANDIDATES -tobTecStepTrackCandidates.clustersToSkip = cms.InputTag('hiTobTecStepClusters') +tobTecStepTrackCandidates.clustersToSkip = 'hiTobTecStepClusters' # TRACK FITTING hiTobTecStepTracks = tobTecStepTracks.clone() @@ -60,41 +60,41 @@ # Final selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiTobTecStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src='hiTobTecStepTracks', - useAnyMVA = cms.bool(False), - GBRForestLabel = cms.string('HIMVASelectorIter13'), - GBRForestVars = cms.vstring(['chi2perdofperlayer', 'nhits', 'nlayers', 'eta']), - trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiTobTecStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - ), #end of pset - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( - name = 'hiTobTecStepTight', - preFilterName = 'hiTobTecStepLoose', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - minMVA = cms.double(-0.2) - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiTobTecStep', - preFilterName = 'hiTobTecStepTight', - applyAdaptedPVCuts = cms.bool(False), - useMVA = cms.bool(False), - minMVA = cms.double(-0.09) - ), + src = 'hiTobTecStepTracks', + useAnyMVA = False, + GBRForestLabel = 'HIMVASelectorIter13', + GBRForestVars = ['chi2perdofperlayer', 'nhits', 'nlayers', 'eta'], + trackSelectors = cms.VPSet( + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( + name = 'hiTobTecStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, + ), #end of pset + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiTightMTS.clone( + name = 'hiTobTecStepTight', + preFilterName = 'hiTobTecStepLoose', + applyAdaptedPVCuts = False, + useMVA = False, + minMVA = -0.2 + ), + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiTobTecStep', + preFilterName = 'hiTobTecStepTight', + applyAdaptedPVCuts = False, + useMVA = False, + minMVA = -0.09 + ), ) #end of vpset - ) #end of clone +) #end of clone import RecoTracker.FinalTrackSelectors.trackListMerger_cfi hiTobTecStepQual = RecoTracker.FinalTrackSelectors.trackListMerger_cfi.trackListMerger.clone( - TrackProducers=cms.VInputTag(cms.InputTag('hiTobTecStepTracks')), - hasSelector=cms.vint32(1), - selectedTrackQuals = cms.VInputTag(cms.InputTag("hiTobTecStepSelector","hiTobTecStep")), + TrackProducers = ['hiTobTecStepTracks'], + hasSelector = [1], + selectedTrackQuals = ["hiTobTecStepSelector:hiTobTecStep"], copyExtras = True, makeReKeyedSeeds = cms.untracked.bool(False), - ) +) hiTobTecStepTask = cms.Task(hiTobTecStepClusters, diff --git a/RecoHI/HiTracking/test/testTracking_cfg.py b/RecoHI/HiTracking/test/testTracking_cfg.py index bf25440965135..30b21bf9b1e07 100644 --- a/RecoHI/HiTracking/test/testTracking_cfg.py +++ b/RecoHI/HiTracking/test/testTracking_cfg.py @@ -35,7 +35,6 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.debugModules = ['*'] -process.MessageLogger.categories = ['HeavyIonVertexing','heavyIonHLTVertexing','MinBiasTracking'] process.MessageLogger.cerr = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), DEBUG = cms.untracked.PSet( @@ -49,7 +48,8 @@ ), heavyIonHLTVertexing = cms.untracked.PSet( limit = cms.untracked.int32(-1) - ) + ), + MinBiasTracking = cms.untracked.PSet() ) process.SimpleMemoryCheck = cms.Service('SimpleMemoryCheck', diff --git a/RecoJets/Configuration/python/RecoCaloTowersGR_cff.py b/RecoJets/Configuration/python/RecoCaloTowersGR_cff.py index f54085f9e4cb9..4a2aae23c1309 100644 --- a/RecoJets/Configuration/python/RecoCaloTowersGR_cff.py +++ b/RecoJets/Configuration/python/RecoCaloTowersGR_cff.py @@ -8,9 +8,8 @@ from RecoJets.JetProducers.CaloTowerSchemeBWithHO_cfi import * from RecoJets.JetProducers.CaloTowerSchemeB_cfi import * -towerMaker.HBThreshold = cms.double(0.6) -towerMaker.HBThreshold1 = cms.double(0.6) -towerMaker.HBThreshold2 = cms.double(0.6) - +towerMaker.HBThreshold = 0.6 +towerMaker.HBThreshold1 = 0.6 +towerMaker.HBThreshold2 = 0.6 recoCaloTowersGRTask = cms.Task(towerMaker,towerMakerWithHO) recoCaloTowersGR = cms.Sequence(recoCaloTowersGRTask) diff --git a/RecoJets/JetAlgorithms/interface/CATopJetHelper.h b/RecoJets/JetAlgorithms/interface/CATopJetHelper.h index aae63f6a6872a..9534a62544634 100644 --- a/RecoJets/JetAlgorithms/interface/CATopJetHelper.h +++ b/RecoJets/JetAlgorithms/interface/CATopJetHelper.h @@ -1,5 +1,5 @@ -#ifndef TopQuarkAnalysis_TopPairBSM_interface_CATopJetHelper_h -#define TopQuarkAnalysis_TopPairBSM_interface_CATopJetHelper_h +#ifndef RecoJets_JetAlgorithms_interface_CATopJetHelper_h +#define RecoJets_JetAlgorithms_interface_CATopJetHelper_h // \class CATopJetHelper // diff --git a/RecoJets/JetPlusTracks/python/JetPlusTrackCorrections_cff.py b/RecoJets/JetPlusTracks/python/JetPlusTrackCorrections_cff.py index 3092ca4b219bd..5223888f23e3e 100644 --- a/RecoJets/JetPlusTracks/python/JetPlusTrackCorrections_cff.py +++ b/RecoJets/JetPlusTracks/python/JetPlusTrackCorrections_cff.py @@ -38,9 +38,9 @@ dRcone = cms.double(0.4) ) -JetPlusTrackZSPCorJetAntiKt4.JetTracksAssociationAtVertex = cms.InputTag("ak4JetTracksAssociatorAtVertexJPT") -JetPlusTrackZSPCorJetAntiKt4.JetTracksAssociationAtCaloFace = cms.InputTag("ak4JetTracksAssociatorAtCaloFace") -JetPlusTrackZSPCorJetAntiKt4.JetSplitMerge = cms.int32(2) +JetPlusTrackZSPCorJetAntiKt4.JetTracksAssociationAtVertex = "ak4JetTracksAssociatorAtVertexJPT" +JetPlusTrackZSPCorJetAntiKt4.JetTracksAssociationAtCaloFace = "ak4JetTracksAssociatorAtCaloFace" +JetPlusTrackZSPCorJetAntiKt4.JetSplitMerge = 2 ### ---------- Sequences diff --git a/RecoJets/JetProducers/interface/PileupJetIdAlgo.h b/RecoJets/JetProducers/interface/PileupJetIdAlgo.h index b6e7ce470124c..3969257b30c4b 100644 --- a/RecoJets/JetProducers/interface/PileupJetIdAlgo.h +++ b/RecoJets/JetProducers/interface/PileupJetIdAlgo.h @@ -16,7 +16,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/JetReco/interface/PileupJetIdentifier.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" // ---------------------------------------------------------------------------------------------------- class PileupJetIdAlgo { diff --git a/RecoJets/JetProducers/python/PileupJetIDCutParams_cfi.py b/RecoJets/JetProducers/python/PileupJetIDCutParams_cfi.py index ea2716e756b87..cb3a0466bfcdd 100644 --- a/RecoJets/JetProducers/python/PileupJetIDCutParams_cfi.py +++ b/RecoJets/JetProducers/python/PileupJetIDCutParams_cfi.py @@ -67,449 +67,17 @@ Pt4050_Loose = cms.vdouble(-0.19, 0.22, -0.13, -0.03) ) +########################################################## +## Working points for the 106X UL18 training ########################################################### -## Working points for the 80X training -########################################################### -full_80x_chs_wp = cms.PSet( - #4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 - - #Tight Id - Pt010_Tight = cms.vdouble( 0.26, -0.34, -0.24, -0.26), - Pt1020_Tight = cms.vdouble( 0.26, -0.34, -0.24, -0.26), - Pt2030_Tight = cms.vdouble( 0.26, -0.34, -0.24, -0.26), - Pt3040_Tight = cms.vdouble( 0.62, -0.21, -0.07, -0.03), - Pt4050_Tight = cms.vdouble( 0.62, -0.21, -0.07, -0.03), - - #Medium Id - Pt010_Medium = cms.vdouble(-0.49, -0.53, -0.44, -0.42), - Pt1020_Medium = cms.vdouble(-0.49, -0.53, -0.44, -0.42), - Pt2030_Medium = cms.vdouble(-0.49, -0.53, -0.44, -0.42), - Pt3040_Medium = cms.vdouble(-0.06, -0.42, -0.3 , -0.23), - Pt4050_Medium = cms.vdouble(-0.06, -0.42, -0.3 , -0.23), - - #Loose Id - Pt010_Loose = cms.vdouble(-0.96, -0.64, -0.56, -0.54), - Pt1020_Loose = cms.vdouble(-0.96, -0.64, -0.56, -0.54), - Pt2030_Loose = cms.vdouble(-0.96, -0.64, -0.56, -0.54), - Pt3040_Loose = cms.vdouble(-0.92, -0.56, -0.44, -0.39), - Pt4050_Loose = cms.vdouble(-0.92, -0.56, -0.44, -0.39) -) - -########################################################### -## Working points for the 76X training -########################################################### -full_76x_chs_wp = cms.PSet( - #4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 - - #Tight Id - Pt010_Tight = cms.vdouble(0.09,-0.37,-0.24,-0.21), - Pt1020_Tight = cms.vdouble(0.09,-0.37,-0.24,-0.21), - Pt2030_Tight = cms.vdouble(0.09,-0.37,-0.24,-0.21), - Pt3040_Tight = cms.vdouble(0.52,-0.19,-0.06,-0.03), - Pt4050_Tight = cms.vdouble(0.52,-0.19,-0.06,-0.03), - - #Medium Id - Pt010_Medium = cms.vdouble(-0.58,-0.52,-0.40,-0.36), - Pt1020_Medium = cms.vdouble(-0.58,-0.52,-0.40,-0.36), - Pt2030_Medium = cms.vdouble(-0.58,-0.52,-0.40,-0.36), - Pt3040_Medium = cms.vdouble(-0.20,-0.39,-0.24,-0.19), - Pt4050_Medium = cms.vdouble(-0.20,-0.39,-0.24,-0.19), - - #Loose Id - Pt010_Loose = cms.vdouble(-0.96,-0.62,-0.53,-0.49), - Pt1020_Loose = cms.vdouble(-0.96,-0.62,-0.53,-0.49), - Pt2030_Loose = cms.vdouble(-0.96,-0.62,-0.53,-0.49), - Pt3040_Loose = cms.vdouble(-0.93,-0.52,-0.39,-0.31), - Pt4050_Loose = cms.vdouble(-0.93,-0.52,-0.39,-0.31) -) - -########################################################### -## Working points for the 74X training -########################################################### -full_74x_chs_wp = cms.PSet( - #4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 - - #Tight Id - Pt010_Tight = cms.vdouble(-0.1,-0.83,-0.83,-0.98), - Pt1020_Tight = cms.vdouble(-0.1,-0.83,-0.83,-0.98), - Pt2030_Tight = cms.vdouble(-0.1,-0.83,-0.83,-0.98), - Pt3040_Tight = cms.vdouble(-0.5,-0.77,-0.80,-0.98), - Pt4050_Tight = cms.vdouble(-0.5,-0.77,-0.80,-0.98), - - #Medium Id - Pt010_Medium = cms.vdouble(-0.3,-0.87,-0.87,-0.99), - Pt1020_Medium = cms.vdouble(-0.3,-0.87,-0.87,-0.99), - Pt2030_Medium = cms.vdouble(-0.3,-0.87,-0.87,-0.99), - Pt3040_Medium = cms.vdouble(-0.6,-0.85,-0.85,-0.99), - Pt4050_Medium = cms.vdouble(-0.6,-0.85,-0.85,-0.99), - - #Loose Id - Pt010_Loose = cms.vdouble(-0.8,-0.97,-0.97,-0.99), - Pt1020_Loose = cms.vdouble(-0.8,-0.97,-0.97,-0.99), - Pt2030_Loose = cms.vdouble(-0.8,-0.97,-0.97,-0.99), - Pt3040_Loose = cms.vdouble(-0.8,-0.95,-0.97,-0.99), - Pt4050_Loose = cms.vdouble(-0.8,-0.95,-0.97,-0.99) -) - -########################################################### -## Working points for the 53X training/New Met Dec 21, 2012 -########################################################### -full_53x_wp = cms.PSet( - #4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 - - #Tight Id - Pt010_Tight = cms.vdouble(-0.83,-0.81,-0.74,-0.81), - Pt1020_Tight = cms.vdouble(-0.83,-0.81,-0.74,-0.81), - Pt2030_Tight = cms.vdouble( 0.73, 0.05,-0.26,-0.42), - Pt3040_Tight = cms.vdouble( 0.73, 0.05,-0.26,-0.42), - Pt4050_Tight = cms.vdouble( 0.73, 0.05,-0.26,-0.42), - - #Medium Id - Pt010_Medium = cms.vdouble(-0.83,-0.92,-0.90,-0.92), - Pt1020_Medium = cms.vdouble(-0.83,-0.92,-0.90,-0.92), - Pt2030_Medium = cms.vdouble( 0.10,-0.36,-0.54,-0.54), - Pt3040_Medium = cms.vdouble( 0.10,-0.36,-0.54,-0.54), - Pt4050_Medium = cms.vdouble( 0.10,-0.36,-0.54,-0.54), - - #Loose Id - Pt010_Loose = cms.vdouble(-0.95,-0.96,-0.94,-0.95), - Pt1020_Loose = cms.vdouble(-0.95,-0.96,-0.94,-0.95), - Pt2030_Loose = cms.vdouble(-0.63,-0.60,-0.55,-0.45), - Pt3040_Loose = cms.vdouble(-0.63,-0.60,-0.55,-0.45), - Pt4050_Loose = cms.vdouble(-0.63,-0.60,-0.55,-0.45), - - #MET - Pt010_MET = cms.vdouble( 0. ,-0.6,-0.4,-0.4), - Pt1020_MET = cms.vdouble( 0.3 ,-0.2,-0.4,-0.4), - Pt2030_MET = cms.vdouble( 0. , 0. , 0. , 0. ), - Pt3040_MET = cms.vdouble( 0. , 0. ,-0.1,-0.2), - Pt4050_MET = cms.vdouble( 0. , 0. ,-0.1,-0.2) - ) - -full_53x_chs_wp = cms.PSet( - #4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 - - #Tight Id - Pt010_Tight = cms.vdouble(-0.83,-0.81,-0.74,-0.81), - Pt1020_Tight = cms.vdouble(-0.83,-0.81,-0.74,-0.81), - Pt2030_Tight = cms.vdouble( 0.78, 0.50, 0.17, 0.17), - Pt3040_Tight = cms.vdouble( 0.78, 0.50, 0.17, 0.17), - Pt4050_Tight = cms.vdouble( 0.78, 0.50, 0.17, 0.17), - - #Medium Id - Pt010_Medium = cms.vdouble(-0.83,-0.92,-0.90,-0.92), - Pt1020_Medium = cms.vdouble(-0.83,-0.92,-0.90,-0.92), - Pt2030_Medium = cms.vdouble(-0.07,-0.09, 0.00,-0.06), - Pt3040_Medium = cms.vdouble(-0.07,-0.09, 0.00,-0.06), - Pt4050_Medium = cms.vdouble(-0.07,-0.09, 0.00,-0.06), - - #Loose Id - Pt010_Loose = cms.vdouble(-0.95,-0.96,-0.94,-0.95), - Pt1020_Loose = cms.vdouble(-0.95,-0.96,-0.94,-0.95), - Pt2030_Loose = cms.vdouble(-0.15,-0.26,-0.16,-0.16), - Pt3040_Loose = cms.vdouble(-0.15,-0.26,-0.16,-0.16), - Pt4050_Loose = cms.vdouble(-0.15,-0.26,-0.16,-0.16) - ) - -met_53x_wp = cms.PSet( - - #Tight Id - Pt010_Tight = cms.vdouble(-2, -2, -2, -2, -2), - Pt1020_Tight = cms.vdouble(-2, -2, -2, -2, -2), - Pt2030_Tight = cms.vdouble(-2, -2, -2, -2, -2), - Pt3040_Tight = cms.vdouble(-2, -2, -2, -2, -2), - Pt4050_Tight = cms.vdouble(-2, -2, -2, -2, -2), - - #Medium Id - Pt010_Medium = cms.vdouble(-2, -2, -2, -2, -2), - Pt1020_Medium = cms.vdouble(-2, -2, -2, -2, -2), - Pt2030_Medium = cms.vdouble(-2, -2, -2, -2, -2), - Pt3040_Medium = cms.vdouble(-2, -2, -2, -2, -2), - Pt4050_Medium = cms.vdouble(-2, -2, -2, -2, -2), - - #Loose Id - Pt010_Loose = cms.vdouble(-2, -2, -2, -2, -2), - Pt1020_Loose = cms.vdouble(-2, -2, -2, -2, -2), - Pt2030_Loose = cms.vdouble(-2, -2, -2, -2, -2), - Pt3040_Loose = cms.vdouble(-2, -2, -2, -2, -2), - Pt4050_Loose = cms.vdouble(-2, -2, -2, -2, -2), - - #4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 - #MET - Pt010_MET = cms.vdouble(-0.2 ,-0.3,-0.5,-0.5), - Pt1020_MET = cms.vdouble(-0.2 ,-0.2,-0.5,-0.3), - Pt2030_MET = cms.vdouble(-0.2 ,-0.2,-0.2, 0.1), - Pt3040_MET = cms.vdouble(-0.2 ,-0.2, 0. , 0.2), - Pt4050_MET = cms.vdouble(-0.2 ,-0.2, 0. , 0.2) - ) - -metfull_53x_wp = cms.PSet( - #MET - Pt010_MET = cms.vdouble(-0.2 ,-0.3,-0.5,-0.5), - Pt1020_MET = cms.vdouble(-0.2 ,-0.2,-0.5,-0.3), - Pt2030_MET = cms.vdouble( 0. , 0. , 0. , 0. ), - Pt3040_MET = cms.vdouble( 0. , 0. ,-0.1,-0.2), - Pt4050_MET = cms.vdouble( 0. , 0. ,-0.1,-0.2) - ) - - -########################################################### -## Working points for the 5X training -########################################################### -full_5x_wp = cms.PSet( - #4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 - - #Tight Id - Pt010_Tight = cms.vdouble(-0.47,-0.92,-0.92,-0.94), - Pt1020_Tight = cms.vdouble(-0.47,-0.92,-0.92,-0.94), - Pt2030_Tight = cms.vdouble(+0.32,-0.49,-0.61,-0.74), - Pt3040_Tight = cms.vdouble(+0.32,-0.49,-0.61,-0.74), - Pt4050_Tight = cms.vdouble(+0.32,-0.49,-0.61,-0.74), - - #Medium Id - Pt010_Medium = cms.vdouble(-0.83,-0.96,-0.95,-0.96), - Pt1020_Medium = cms.vdouble(-0.83,-0.96,-0.95,-0.96), - Pt2030_Medium = cms.vdouble(-0.40,-0.74,-0.76,-0.81), - Pt3040_Medium = cms.vdouble(-0.40,-0.74,-0.76,-0.81), - Pt4050_Medium = cms.vdouble(-0.40,-0.74,-0.76,-0.81), - - #Loose Id - Pt010_Loose = cms.vdouble(-0.95,-0.97,-0.97,-0.97), - Pt1020_Loose = cms.vdouble(-0.95,-0.97,-0.97,-0.97), - Pt2030_Loose = cms.vdouble(-0.80,-0.85,-0.84,-0.85), - Pt3040_Loose = cms.vdouble(-0.80,-0.85,-0.84,-0.85), - Pt4050_Loose = cms.vdouble(-0.80,-0.85,-0.84,-0.85) -) - -simple_5x_wp = cms.PSet( - #4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 - - #Tight Id - Pt010_Tight = cms.vdouble(-0.54,-0.93,-0.93,-0.94), - Pt1020_Tight = cms.vdouble(-0.54,-0.93,-0.93,-0.94), - Pt2030_Tight = cms.vdouble(+0.26,-0.54,-0.63,-0.74), - Pt3040_Tight = cms.vdouble(+0.26,-0.54,-0.63,-0.74), - Pt4050_Tight = cms.vdouble(+0.26,-0.54,-0.63,-0.74), - - #Medium Id - Pt010_Medium = cms.vdouble(-0.85,-0.96,-0.95,-0.96), - Pt1020_Medium = cms.vdouble(-0.85,-0.96,-0.95,-0.96), - Pt2030_Medium = cms.vdouble(-0.40,-0.73,-0.74,-0.80), - Pt3040_Medium = cms.vdouble(-0.40,-0.73,-0.74,-0.80), - Pt4050_Medium = cms.vdouble(-0.40,-0.73,-0.74,-0.80), - - #Loose Id - Pt010_Loose = cms.vdouble(-0.95,-0.97,-0.96,-0.97), - Pt1020_Loose = cms.vdouble(-0.95,-0.97,-0.96,-0.97), - Pt2030_Loose = cms.vdouble(-0.80,-0.86,-0.80,-0.84), - Pt3040_Loose = cms.vdouble(-0.80,-0.86,-0.80,-0.84), - Pt4050_Loose = cms.vdouble(-0.80,-0.86,-0.80,-0.84) - -) - -########################################################### -## Working points for the 5X_CHS training -########################################################### -full_5x_chs_wp = cms.PSet( - #4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 - - #Tight Id - Pt010_Tight = cms.vdouble(-0.59,-0.75,-0.78,-0.80), - Pt1020_Tight = cms.vdouble(-0.59,-0.75,-0.78,-0.80), - Pt2030_Tight = cms.vdouble(+0.41,-0.10,-0.20,-0.45), - Pt3040_Tight = cms.vdouble(+0.41,-0.10,-0.20,-0.45), - Pt4050_Tight = cms.vdouble(+0.41,-0.10,-0.20,-0.45), - - #Medium Id - Pt010_Medium = cms.vdouble(-0.94,-0.91,-0.91,-0.92), - Pt1020_Medium = cms.vdouble(-0.94,-0.91,-0.91,-0.92), - Pt2030_Medium = cms.vdouble(-0.58,-0.65,-0.57,-0.67), - Pt3040_Medium = cms.vdouble(-0.58,-0.65,-0.57,-0.67), - Pt4050_Medium = cms.vdouble(-0.58,-0.65,-0.57,-0.67), - - #Loose Id - Pt010_Loose = cms.vdouble(-0.98,-0.95,-0.94,-0.94), - Pt1020_Loose = cms.vdouble(-0.98,-0.95,-0.94,-0.94), - Pt2030_Loose = cms.vdouble(-0.89,-0.77,-0.69,-0.75), - Pt3040_Loose = cms.vdouble(-0.89,-0.77,-0.69,-0.57), - Pt4050_Loose = cms.vdouble(-0.89,-0.77,-0.69,-0.57) -) - -simple_5x_chs_wp = cms.PSet( - #4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 - - #Tight Id - Pt010_Tight = cms.vdouble(-0.60,-0.74,-0.78,-0.81), - Pt1020_Tight = cms.vdouble(-0.60,-0.74,-0.78,-0.81), - Pt2030_Tight = cms.vdouble(-0.47,-0.06,-0.23,-0.47), - Pt3040_Tight = cms.vdouble(-0.47,-0.06,-0.23,-0.47), - Pt4050_Tight = cms.vdouble(-0.47,-0.06,-0.23,-0.47), - - #Medium Id - Pt010_Medium = cms.vdouble(-0.95,-0.94,-0.92,-0.91), - Pt1020_Medium = cms.vdouble(-0.95,-0.94,-0.92,-0.91), - Pt2030_Medium = cms.vdouble(-0.59,-0.65,-0.56,-0.68), - Pt3040_Medium = cms.vdouble(-0.59,-0.65,-0.56,-0.68), - Pt4050_Medium = cms.vdouble(-0.59,-0.65,-0.56,-0.68), - - #Loose Id - Pt010_Loose = cms.vdouble(-0.98,-0.96,-0.94,-0.94), - Pt1020_Loose = cms.vdouble(-0.98,-0.96,-0.94,-0.94), - Pt2030_Loose = cms.vdouble(-0.89,-0.75,-0.72,-0.75), - Pt3040_Loose = cms.vdouble(-0.89,-0.75,-0.72,-0.75), - Pt4050_Loose = cms.vdouble(-0.89,-0.75,-0.72,-0.75) -) - - -########################################################### -## Working points for the 4X training -########################################################### -PuJetIdOptMVA_wp = cms.PSet( - #4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 - - #Tight Id - Pt010_Tight = cms.vdouble(-0.5,-0.2,-0.83,-0.7), - Pt1020_Tight = cms.vdouble(-0.5,-0.2,-0.83,-0.7), - Pt2030_Tight = cms.vdouble(-0.2, 0., 0., 0.), - Pt3040_Tight = cms.vdouble(-0.2, 0., 0., 0.), - Pt4050_Tight = cms.vdouble(-0.2, 0., 0., 0.), - - #Medium Id - Pt010_Medium = cms.vdouble(-0.73,-0.89,-0.89,-0.83), - Pt1020_Medium = cms.vdouble(-0.73,-0.89,-0.89,-0.83), - Pt2030_Medium = cms.vdouble(0.1, -0.4, -0.4, -0.45), - Pt3040_Medium = cms.vdouble(0.1, -0.4, -0.4, -0.45), - Pt4050_Medium = cms.vdouble(0.1, -0.4, -0.4, -0.45), - - #Loose Id - Pt010_Loose = cms.vdouble(-0.9,-0.9, -0.9,-0.9), - Pt1020_Loose = cms.vdouble(-0.9,-0.9, -0.9,-0.9), - Pt2030_Loose = cms.vdouble(-0.4,-0.85,-0.7,-0.6), - Pt3040_Loose = cms.vdouble(-0.4,-0.85,-0.7,-0.6), - Pt4050_Loose = cms.vdouble(-0.4,-0.85,-0.7,-0.6) -) - -PuJetIdMinMVA_wp = cms.PSet( - #4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 - - #Tight Id - Pt010_Tight = cms.vdouble(-0.5,-0.2,-0.83,-0.7), - Pt1020_Tight = cms.vdouble(-0.5,-0.2,-0.83,-0.7), - Pt2030_Tight = cms.vdouble(-0.2, 0., 0., 0.), - Pt3040_Tight = cms.vdouble(-0.2, 0., 0., 0.), - Pt4050_Tight = cms.vdouble(-0.2, 0., 0., 0.), - - #Medium Id - Pt010_Medium = cms.vdouble(-0.73,-0.89,-0.89,-0.83), - Pt1020_Medium = cms.vdouble(-0.73,-0.89,-0.89,-0.83), - Pt2030_Medium = cms.vdouble(0.1, -0.4, -0.5, -0.45), - Pt3040_Medium = cms.vdouble(0.1, -0.4, -0.5, -0.45), - Pt4050_Medium = cms.vdouble(0.1, -0.4, -0.5, -0.45), - - #Loose Id - Pt010_Loose = cms.vdouble(-0.9,-0.9, -0.94,-0.9), - Pt1020_Loose = cms.vdouble(-0.9,-0.9, -0.94,-0.9), - Pt2030_Loose = cms.vdouble(-0.4,-0.85,-0.7,-0.6), - Pt3040_Loose = cms.vdouble(-0.4,-0.85,-0.7,-0.6), - Pt4050_Loose = cms.vdouble(-0.4,-0.85,-0.7,-0.6) -) - -EmptyJetIdParams = cms.PSet( - #4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 - - #Tight Id - Pt010_Tight = cms.vdouble(-999.,-999.,-999.,-999.), - Pt1020_Tight = cms.vdouble(-999.,-999.,-999.,-999.), - Pt2030_Tight = cms.vdouble(-999.,-999.,-999.,-999.), - Pt3040_Tight = cms.vdouble(-999.,-999.,-999.,-999.), - Pt4050_Tight = cms.vdouble(-999.,-999.,-999.,-999.), - - #Medium Id - Pt010_Medium = cms.vdouble(-999.,-999.,-999.,-999.), - Pt1020_Medium = cms.vdouble(-999.,-999.,-999.,-999.), - Pt2030_Medium = cms.vdouble(-999.,-999.,-999.,-999.), - Pt3040_Medium = cms.vdouble(-999.,-999.,-999.,-999.), - Pt4050_Medium = cms.vdouble(-999.,-999.,-999.,-999.), - - #Loose Id - Pt010_Loose = cms.vdouble(-999.,-999.,-999.,-999.), - Pt1020_Loose = cms.vdouble(-999.,-999.,-999.,-999.), - Pt2030_Loose = cms.vdouble(-999.,-999.,-999.,-999.), - Pt3040_Loose = cms.vdouble(-999.,-999.,-999.,-999.), - Pt4050_Loose = cms.vdouble(-999.,-999.,-999.,-999.) -) - - -PuJetIdCutBased_wp = cms.PSet( - #4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 - #betaStarClassic/log(nvtx-0.64) Values - #Tight Id - Pt010_BetaStarTight = cms.vdouble( 0.15, 0.15, 999., 999.), - Pt1020_BetaStarTight = cms.vdouble( 0.15, 0.15, 999., 999.), - Pt2030_BetaStarTight = cms.vdouble( 0.15, 0.15, 999., 999.), - Pt3040_BetaStarTight = cms.vdouble( 0.15, 0.15, 999., 999.), - Pt4050_BetaStarTight = cms.vdouble( 0.15, 0.15, 999., 999.), - - #Medium Id => Daniele - Pt010_BetaStarMedium = cms.vdouble( 0.2, 0.3, 999., 999.), - Pt1020_BetaStarMedium = cms.vdouble( 0.2, 0.3, 999., 999.), - Pt2030_BetaStarMedium = cms.vdouble( 0.2, 0.3, 999., 999.), - Pt3040_BetaStarMedium = cms.vdouble( 0.2, 0.3, 999., 999.), - Pt4050_BetaStarMedium = cms.vdouble( 0.2, 0.3, 999., 999.), - - #Loose Id - Pt010_BetaStarLoose = cms.vdouble( 0.2, 0.3, 999., 999.), - Pt1020_BetaStarLoose = cms.vdouble( 0.2, 0.3, 999., 999.), - Pt2030_BetaStarLoose = cms.vdouble( 0.2, 0.3, 999., 999.), - Pt3040_BetaStarLoose = cms.vdouble( 0.2, 0.3, 999., 999.), - Pt4050_BetaStarLoose = cms.vdouble( 0.2, 0.3, 999., 999.), - - #RMS variable - #Tight Id - Pt010_RMSTight = cms.vdouble( 0.06, 0.07, 0.04, 0.05), - Pt1020_RMSTight = cms.vdouble( 0.06, 0.07, 0.04, 0.05), - Pt2030_RMSTight = cms.vdouble( 0.05, 0.07, 0.03, 0.045), - Pt3040_RMSTight = cms.vdouble( 0.05, 0.06, 0.03, 0.04), - Pt4050_RMSTight = cms.vdouble( 0.05, 0.06, 0.03, 0.04), - - #Medium Id => Daniele - Pt010_RMSMedium = cms.vdouble( 0.06, 0.03, 0.03, 0.04), - Pt1020_RMSMedium = cms.vdouble( 0.06, 0.03, 0.03, 0.04), - Pt2030_RMSMedium = cms.vdouble( 0.06, 0.03, 0.03, 0.04), - Pt3040_RMSMedium = cms.vdouble( 0.06, 0.03, 0.03, 0.04), - Pt4050_RMSMedium = cms.vdouble( 0.06, 0.03, 0.03, 0.04), - - #Loose Id - Pt010_RMSLoose = cms.vdouble( 0.06, 0.05, 0.05, 0.07), - Pt1020_RMSLoose = cms.vdouble( 0.06, 0.05, 0.05, 0.07), - Pt2030_RMSLoose = cms.vdouble( 0.06, 0.05, 0.05, 0.055), - Pt3040_RMSLoose = cms.vdouble( 0.06, 0.05, 0.05, 0.055), - Pt4050_RMSLoose = cms.vdouble( 0.06, 0.05, 0.05, 0.055) - ) - - -JetIdParams = cms.PSet( - #4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 - - #Tight Id - Pt010_Tight = cms.vdouble( 0.5,0.6,0.6,0.9), - Pt1020_Tight = cms.vdouble(-0.2,0.2,0.2,0.6), - Pt2030_Tight = cms.vdouble( 0.3,0.4,0.7,0.8), - Pt3040_Tight = cms.vdouble( 0.5,0.4,0.8,0.9), - Pt4050_Tight = cms.vdouble( 0.5,0.4,0.8,0.9), - - #Medium Id - Pt010_Medium = cms.vdouble( 0.2,0.4,0.2,0.6), - Pt1020_Medium = cms.vdouble(-0.3,0. ,0. ,0.5), - Pt2030_Medium = cms.vdouble( 0.2,0.2,0.5,0.7), - Pt3040_Medium = cms.vdouble( 0.3,0.2,0.7,0.8), - Pt4050_Medium = cms.vdouble( 0.3,0.2,0.7,0.8), - - #Loose Id - Pt010_Loose = cms.vdouble( 0. , 0. , 0. ,0.2), - Pt1020_Loose = cms.vdouble(-0.4,-0.4,-0.4,0.4), - Pt2030_Loose = cms.vdouble( 0. , 0. , 0.2,0.6), - Pt3040_Loose = cms.vdouble( 0. , 0. , 0.6,0.2), - Pt4050_Loose = cms.vdouble( 0. , 0. , 0.6,0.2) -) +full_106x_UL18_chs_wp = full_106x_UL17_chs_wp.clone() +########################################################## +## Empty cutbased WP for compatibility +########################################################### +EmptyCutBased_wp = cms.PSet() +#4 Eta Categories 0-2.5 2.5-2.75 2.75-3.0 3.0-5.0 +for pt in ["010", "1020", "2030", "3040", "4050"]: + for tp in ["BetaStar", "RMS"]: + for wp in ["Loose", "Medium", "Tight"]: + setattr(EmptyCutBased_wp, "Pt" + pt + "_" + tp + wp, cms.vdouble(-999.,-999.,-999.,-999.)) diff --git a/RecoJets/JetProducers/python/PileupJetIDParams_cfi.py b/RecoJets/JetProducers/python/PileupJetIDParams_cfi.py index 4c1003bdf2d14..620ca187bfe47 100644 --- a/RecoJets/JetProducers/python/PileupJetIDParams_cfi.py +++ b/RecoJets/JetProducers/python/PileupJetIDParams_cfi.py @@ -127,542 +127,39 @@ trainingVariables_102X_Eta3To5.remove('jetRchg') trainingVariables_102X_Eta3To5.remove('nCharged') -full_102x_chs = full_81x_chs.clone(JetIdParams = full_102x_chs_wp) -full_102x_chs.trainings[0].tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_102X_Eta0p0To2p5_chs_BDT.weights.xml.gz" -full_102x_chs.trainings[0].tmvaVariables = trainingVariables_102X_Eta0To3 -full_102x_chs.trainings[1].tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_102X_Eta2p5To2p75_chs_BDT.weights.xml.gz" -full_102x_chs.trainings[1].tmvaVariables = trainingVariables_102X_Eta0To3 -full_102x_chs.trainings[2].tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_102X_Eta2p75To3p0_chs_BDT.weights.xml.gz" -full_102x_chs.trainings[2].tmvaVariables = trainingVariables_102X_Eta0To3 -full_102x_chs.trainings[3].tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_102X_Eta3p0To5p0_chs_BDT.weights.xml.gz" -full_102x_chs.trainings[3].tmvaVariables = trainingVariables_102X_Eta3To5 - #################################################################################################################### -trainingVariables_94X_Eta0To3 = list(trainingVariables_102X_Eta0To3) -trainingVariables_94X_Eta3To5 = list(trainingVariables_102X_Eta3To5) -full_94x_chs = full_81x_chs.clone(JetIdParams = full_94x_chs_wp) -full_94x_chs.trainings[0].tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_94X_Eta0p0To2p5_chs_BDT.weights.xml.gz" -full_94x_chs.trainings[0].tmvaVariables = trainingVariables_94X_Eta0To3 -full_94x_chs.trainings[1].tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_94X_Eta2p5To2p75_chs_BDT.weights.xml.gz" -full_94x_chs.trainings[1].tmvaVariables = trainingVariables_94X_Eta0To3 -full_94x_chs.trainings[2].tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_94X_Eta2p75To3p0_chs_BDT.weights.xml.gz" -full_94x_chs.trainings[2].tmvaVariables = trainingVariables_94X_Eta0To3 -full_94x_chs.trainings[3].tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_94X_Eta3p0To5p0_chs_BDT.weights.xml.gz" -full_94x_chs.trainings[3].tmvaVariables = trainingVariables_94X_Eta3To5 +full_102x_chs = full_81x_chs.clone( + JetIdParams = full_102x_chs_wp, + trainings = {0: dict(tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_102X_Eta0p0To2p5_chs_BDT.weights.xml.gz", + tmvaVariables = trainingVariables_102X_Eta0To3), + 1: dict(tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_102X_Eta2p5To2p75_chs_BDT.weights.xml.gz", + tmvaVariables = trainingVariables_102X_Eta0To3), + 2: dict(tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_102X_Eta2p75To3p0_chs_BDT.weights.xml.gz", + tmvaVariables = trainingVariables_102X_Eta0To3), + 3: dict(tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_102X_Eta3p0To5p0_chs_BDT.weights.xml.gz", + tmvaVariables = trainingVariables_102X_Eta3To5) + } +) #################################################################################################################### -trainingVariables_106X_Eta0To3 = list(trainingVariables_102X_Eta0To3) -trainingVariables_106X_Eta3To5 = list(trainingVariables_102X_Eta3To5) -full_106x_UL17_chs = full_81x_chs.clone(JetIdParams = full_106x_UL17_chs_wp) -full_106x_UL17_chs.trainings[0].tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_UL17_Eta0p0To2p5_chs_BDT.weights.xml.gz" -full_106x_UL17_chs.trainings[0].tmvaVariables = trainingVariables_106X_Eta0To3 -full_106x_UL17_chs.trainings[1].tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_UL17_Eta2p5To2p75_chs_BDT.weights.xml.gz" -full_106x_UL17_chs.trainings[1].tmvaVariables = trainingVariables_106X_Eta0To3 -full_106x_UL17_chs.trainings[2].tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_UL17_Eta2p75To3p0_chs_BDT.weights.xml.gz" -full_106x_UL17_chs.trainings[2].tmvaVariables = trainingVariables_106X_Eta0To3 -full_106x_UL17_chs.trainings[3].tmvaWeights = "RecoJets/JetProducers/data/pileupJetId_UL17_Eta3p0To5p0_chs_BDT.weights.xml.gz" -full_106x_UL17_chs.trainings[3].tmvaVariables = trainingVariables_106X_Eta3To5 +full_94x_chs = full_102x_chs.clone(JetIdParams = full_94x_chs_wp) +for train in full_94x_chs.trainings: + train.tmvaWeights = train.tmvaWeights.value().replace("102X", "94X") #################################################################################################################### -full_80x_chs = cms.PSet( - impactParTkThreshold = cms.double(1.), - cutBased = cms.bool(False), - etaBinnedWeights = cms.bool(True), - tmvaMethod = cms.string("JetIDMVAHighPt"), - version = cms.int32(-1), - nEtaBins = cms.int32(4), - trainings = cms.VPSet( - cms.PSet( - jEtaMin = cms.double(0.), - jEtaMax = cms.double(2.5), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/pileupJetId_80X_Eta0to2p5_BDT.weights.xml.gz"), - tmvaVariables = cms.vstring( - "nvtx", - "dR2Mean" , - "nParticles" , - "nCharged" , - "majW" , - "minW", - "frac01" , - "frac02" , - "frac03" , - "frac04" , - "ptD" , - "beta" , - "pull" , - "jetR" , - "jetRchg" , - ) - ), - cms.PSet( - jEtaMin = cms.double(2.5), - jEtaMax = cms.double(2.75), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/pileupJetId_80X_Eta2p5to2p75_BDT.weights.xml.gz"), - tmvaVariables = cms.vstring( - "nvtx", - "dR2Mean" , - "nParticles" , - "nCharged" , - "majW" , - "minW", - "frac01" , - "frac02" , - "frac03" , - "frac04" , - "ptD" , - "beta" , - "pull" , - "jetR" , - "jetRchg" , - ) - ), - cms.PSet( - jEtaMin = cms.double(2.75), - jEtaMax = cms.double(3.), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/pileupJetId_80X_Eta2p75to3_BDT.weights.xml.gz"), - tmvaVariables = cms.vstring( - "nvtx", - "dR2Mean" , - "nParticles" , - "nCharged" , - "majW" , - "minW", - "frac01" , - "frac02" , - "frac03" , - "frac04" , - "ptD" , - "beta" , - "pull" , - "jetR" , - "jetRchg" , - ) - ), - cms.PSet( - jEtaMin = cms.double(3.), - jEtaMax = cms.double(5.), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/pileupJetId_80X_Eta3to5_BDT.weights.xml.gz"), - tmvaVariables = cms.vstring( - "nvtx", - "dR2Mean" , - "nParticles" , - "majW" , - "minW", - "frac01" , - "frac02" , - "frac03" , - "frac04" , - "ptD" , - "pull" , - "jetR" , - ) - ), - ), - tmvaSpectators = cms.vstring( - "jetPt" , - "jetEta" , - ), - JetIdParams = full_80x_chs_wp, - label = cms.string("full") -) +full_106x_UL17_chs = full_102x_chs.clone(JetIdParams = full_106x_UL17_chs_wp) +for train in full_106x_UL17_chs.trainings: + train.tmvaWeights = train.tmvaWeights.value().replace("102X", "UL17") #################################################################################################################### -full_76x_chs = cms.PSet( - impactParTkThreshold = cms.double(1.) , - cutBased = cms.bool(False), - etaBinnedWeights = cms.bool(True), - nEtaBins = cms.int32(4), - trainings = cms.VPSet( - cms.PSet( - jEtaMin = cms.double(0.), - jEtaMax = cms.double(2.5), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/pileupJetId_76x_Eta0to2p5_BDT.weights.xml.gz"), - tmvaVariables = cms.vstring( - "nvtx", - "dR2Mean" , - "nParticles" , - "nCharged" , - "majW" , - "minW", - "frac01" , - "frac02" , - "frac03" , - "frac04" , - "ptD" , - "beta" , - "pull" , - "jetR" , - "jetRchg" , - ) - ), - cms.PSet( - jEtaMin = cms.double(2.5), - jEtaMax = cms.double(2.75), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/pileupJetId_76x_Eta2p5to2p75_BDT.weights.xml.gz"), - tmvaVariables = cms.vstring( - "nvtx", - "dR2Mean" , - "nParticles" , - "nCharged" , - "majW" , - "minW", - "frac01" , - "frac02" , - "frac03" , - "frac04" , - "ptD" , - "beta" , - "pull" , - "jetR" , - "jetRchg" , - ) - ), - cms.PSet( - jEtaMin = cms.double(2.75), - jEtaMax = cms.double(3.), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/pileupJetId_76x_Eta2p75to3_BDT.weights.xml.gz"), - tmvaVariables = cms.vstring( - "nvtx", - "dR2Mean" , - "nParticles" , - "nCharged" , - "majW" , - "minW", - "frac01" , - "frac02" , - "frac03" , - "frac04" , - "ptD" , - "beta" , - "pull" , - "jetR" , - "jetRchg" , - ) - ), - cms.PSet( - jEtaMin = cms.double(3.), - jEtaMax = cms.double(5.), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/pileupJetId_76x_Eta3to5_BDT.weights.xml.gz"), - tmvaVariables = cms.vstring( - "nvtx", - "dR2Mean" , - "nParticles" , - "majW" , - "minW", - "frac01" , - "frac02" , - "frac03" , - "frac04" , - "ptD" , - "pull" , - "jetR" , - ) - ), - ), - tmvaMethod = cms.string("JetIDMVAHighPt"), - version = cms.int32(-1), - tmvaSpectators = cms.vstring( - "jetPt" , - "jetEta" , - ), - JetIdParams = full_76x_chs_wp, - label = cms.string("full") - ) -#################################################################################################################### -full_74x_chs = cms.PSet( - impactParTkThreshold = cms.double(1.) , - cutBased = cms.bool(False), - etaBinnedWeights = cms.bool(True), - nEtaBins = cms.int32(4), - trainings = cms.VPSet( - cms.PSet( - jEtaMin = cms.double(0.), - jEtaMax = cms.double(2.), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/TMVAClassificationCategory_BDTG.weights_jteta_0_2_newNames.xml.gz"), - tmvaVariables = cms.vstring( - "dR2Mean" , - "rho" , - "nParticles" , - "nCharged" , - "majW" , - "minW", - "frac01" , - "frac02" , - "frac03" , - "frac04" , - "ptD" , - "beta" , - "betaStar" , - "pull" , - "jetR" , - "jetRchg" , - ) - ), - cms.PSet( - jEtaMin = cms.double(2.), - jEtaMax = cms.double(2.5), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/TMVAClassificationCategory_BDTG.weights_jteta_2_2p5_newNames.xml.gz"), - tmvaVariables = cms.vstring( - "dR2Mean" , - "rho" , - "nParticles" , - "nCharged" , - "majW" , - "minW", - "frac01" , - "frac02" , - "frac03" , - "frac04" , - "ptD" , - "beta" , - "betaStar" , - "pull" , - "jetR" , - "jetRchg" , - ) - ), - cms.PSet( - jEtaMin = cms.double(2.5), - jEtaMax = cms.double(3.), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/TMVAClassificationCategory_BDTG.weights_jteta_2p5_3_newNames.xml.gz"), - tmvaVariables = cms.vstring( - "dR2Mean" , - "rho" , - "nParticles" , - "nCharged" , - "majW" , - "minW", - "frac01" , - "frac02" , - "frac03" , - "frac04" , - "ptD" , - "beta" , - "betaStar" , - "pull" , - "jetR" , - "jetRchg" , - ) - ), - cms.PSet( - jEtaMin = cms.double(3.), - jEtaMax = cms.double(5.), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/TMVAClassificationCategory_BDTG.weights_jteta_3_5_newNames.xml.gz"), - tmvaVariables = cms.vstring( - "dR2Mean" , - "rho" , - "nParticles" , - "majW" , - "minW", - "frac01" , - "frac02" , - "frac03" , - "frac04" , - "ptD" , - "pull" , - "jetR" , - ) - ), - ), - version = cms.int32(-1), - tmvaSpectators = cms.vstring( - "jetPt" , - "jetEta" , - "nTrueInt" , - "dRMatch" , - ), - JetIdParams = full_74x_chs_wp, - label = cms.string("full") - ) -#################################################################################################################### -full_53x = cms.PSet( - impactParTkThreshold = cms.double(1.) , - cutBased = cms.bool(False), - etaBinnedWeights = cms.bool(False), - tmvaWeights = cms.FileInPath("CondFormats/JetMETObjects/data/TMVAClassificationCategory_JetID_53X_Dec2012.weights.xml"), - tmvaMethod = cms.string("JetIDMVAHighPt"), - version = cms.int32(-1), - tmvaVariables = cms.vstring( - "nvtx" , - "dZ" , - "beta" , - "betaStar" , - "nCharged" , - "nNeutrals", - "dR2Mean" , - "ptD" , - "frac01" , - "frac02" , - "frac03" , - "frac04" , - "frac05" , - ), - tmvaSpectators = cms.vstring( - "jetPt", - "jetEta", - "jetPhi" - ), - JetIdParams = full_53x_wp, - label = cms.string("full53x") - ) -#################################################################################################################### -full_53x_chs = cms.PSet( - impactParTkThreshold = cms.double(1.) , - cutBased = cms.bool(False), - etaBinnedWeights = cms.bool(False), - tmvaWeights = cms.FileInPath("CondFormats/JetMETObjects/data/TMVAClassificationCategory_JetID_53X_chs_Dec2012.weights.xml"), - #tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/TMVAClassificationCategory_JetID_53X_chs_Dec2012.weights.xml"), - tmvaMethod = cms.string("JetIDMVAHighPt"), - version = cms.int32(-1), - tmvaVariables = cms.vstring( - "nvtx" , - "dZ" , - "beta" , - "betaStar" , - "nCharged" , - "nNeutrals", - "dR2Mean" , - "ptD" , - "frac01" , - "frac02" , - "frac03" , - "frac04" , - "frac05" , - ), - tmvaSpectators = cms.vstring( - "jetPt", - "jetEta", - "jetPhi" - ), - JetIdParams = full_53x_chs_wp, - label = cms.string("full") - ) -#################################################################################################################### -met_53x = cms.PSet( - impactParTkThreshold = cms.double(1.) , - cutBased = cms.bool(False), - etaBinnedWeights = cms.bool(False), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/TMVAClassificationCategory_JetID_MET_53X_Dec2012.weights.xml.gz"), - tmvaMethod = cms.string("JetIDMVAMET"), - version = cms.int32(-1), - tmvaVariables = cms.vstring( - "nvtx" , - "jetPt" , - "jetEta" , - "jetPhi" , - "dZ" , - "beta" , - "betaStar" , - "nCharged" , - "nNeutrals", - "dR2Mean" , - "ptD" , - "frac01" , - "frac02" , - "frac03" , - "frac04" , - "frac05" , - ), - tmvaSpectators = cms.vstring(), - JetIdParams = met_53x_wp, - label = cms.string("met53x") - ) -################################################################################################################## -full_5x = cms.PSet( - impactParTkThreshold = cms.double(1.) , - cutBased = cms.bool(False), - etaBinnedWeights = cms.bool(False), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/TMVAClassificationCategory_JetID_MET_53X_Dec2012.weights.xml.gz"), - tmvaMethod = cms.string("BDT_fullPlusRMS"), - version = cms.int32(-1), - tmvaVariables = cms.vstring( - "frac01", - "frac02", - "frac03", - "frac04", - "frac05", - "dR2Mean", - "nvtx", - "nNeutrals", - "beta", - "betaStar", - "dZ", - "nCharged", - ), - tmvaSpectators = cms.vstring( - "jetPt", - "jetEta", - ), - JetIdParams = full_5x_wp, - label = cms.string("full") - ) - -################################################################################################################## -full_5x_chs = cms.PSet( - impactParTkThreshold = cms.double(1.) , - cutBased = cms.bool(False), - etaBinnedWeights = cms.bool(False), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/TMVAClassification_5x_BDT_chsFullPlusRMS.weights.xml.gz"), - tmvaMethod = cms.string("BDT_chsFullPlusRMS"), - version = cms.int32(-1), - tmvaVariables = cms.vstring( - "frac01", - "frac02", - "frac03", - "frac04", - "frac05", - "dR2Mean", - "nvtx", - "nNeutrals", - "beta", - "betaStar", - "dZ", - "nCharged", - ), - tmvaSpectators = cms.vstring( - "jetPt", - "jetEta", - ), - JetIdParams = full_5x_chs_wp, - label = cms.string("full") - ) +full_106x_UL18_chs = full_106x_UL17_chs.clone(JetIdParams = full_106x_UL18_chs_wp) +for train in full_106x_UL18_chs.trainings: + train.tmvaWeights = train.tmvaWeights.value().replace("UL17", "UL18") #################################################################################################################### cutbased = cms.PSet( - impactParTkThreshold = cms.double(1.), - cutBased = cms.bool(True), - JetIdParams = PuJetIdCutBased_wp, - label = cms.string("cutbased") - ) - -#################################################################################################################### -PhilV1 = cms.PSet( - impactParTkThreshold = cms.double(1.) , - cutBased = cms.bool(False), - etaBinnedWeights = cms.bool(False), - tmvaWeights = cms.FileInPath("RecoJets/JetProducers/data/mva_JetID_v1.weights.xml.gz"), - tmvaMethod = cms.string("JetID"), - version = cms.int32(-1), - tmvaVariables = cms.vstring( - "nvtx", - "jetPt", - "jetEta", - "jetPhi", - "dZ", - "d0", - "beta", - "betaStar", - "nCharged", - "nNeutrals", - "dRMean", - "frac01", - "frac02", - "frac03", - "frac04", - "frac05", - ), - tmvaSpectators = cms.vstring(), - JetIdParams = JetIdParams, - label = cms.string("philv1") + impactParTkThreshold = cms.double(1.), + cutBased = cms.bool(True), + JetIdParams = EmptyCutBased_wp, + label = cms.string("cutbased") ) - diff --git a/RecoJets/JetProducers/python/PileupJetID_cfi.py b/RecoJets/JetProducers/python/PileupJetID_cfi.py index cd99e8a654277..9d4fdc30b4cac 100644 --- a/RecoJets/JetProducers/python/PileupJetID_cfi.py +++ b/RecoJets/JetProducers/python/PileupJetID_cfi.py @@ -1,21 +1,20 @@ import FWCore.ParameterSet.Config as cms -from RecoJets.JetProducers.PileupJetIDParams_cfi import * +from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy +from Configuration.Eras.Modifier_run2_miniAOD_94XFall17_cff import run2_miniAOD_94XFall17 +from Configuration.Eras.Modifier_run2_jme_2016_cff import run2_jme_2016 +from Configuration.Eras.Modifier_run2_jme_2017_cff import run2_jme_2017 +from Configuration.ProcessModifiers.run2_miniAOD_UL_cff import run2_miniAOD_UL -#_stdalgos_4x = cms.VPSet(full, cutbased,PhilV1) -_stdalgos_5x = cms.VPSet(full_5x,cutbased,PhilV1) +from RecoJets.JetProducers.PileupJetIDParams_cfi import * -#_chsalgos_4x = cms.VPSet(full, cutbased) -_chsalgos_5x = cms.VPSet(full_5x_chs,cutbased) -_chsalgos_74x = cms.VPSet(full_74x_chs,cutbased) -_chsalgos_76x = cms.VPSet(full_76x_chs,cutbased) -_chsalgos_80x = cms.VPSet(full_80x_chs,cutbased) _chsalgos_81x = cms.VPSet(full_81x_chs,cutbased) _chsalgos_94x = cms.VPSet(full_94x_chs,cutbased) _chsalgos_102x = cms.VPSet(full_102x_chs,cutbased) _chsalgos_106X_UL17 = cms.VPSet(full_106x_UL17_chs,cutbased) +_chsalgos_106X_UL18 = cms.VPSet(full_106x_UL18_chs,cutbased) -_stdalgos = _chsalgos_106X_UL17 +_stdalgos = _chsalgos_106X_UL18 # Calculate+store variables and run MVAs pileupJetId = cms.EDProducer('PileupJetIdProducer', @@ -34,6 +33,11 @@ # residualsTxt = cms.FileInPath("RecoJets/JetProducers/data/download.url") # must be an existing file ) +# set algos for re-miniAOD campaign +run2_miniAOD_80XLegacy.toModify(pileupJetId, algos = _chsalgos_81x) +run2_miniAOD_94XFall17.toModify(pileupJetId, algos = _chsalgos_94x) +(run2_miniAOD_UL & run2_jme_2017).toModify(pileupJetId, algos = _chsalgos_106X_UL17) + # Calculate variables, but don't run MVAs pileupJetIdCalculator = pileupJetId.clone( runMvas = False, diff --git a/RecoJets/JetProducers/python/caSubjetFilterGenJets_cfi.py b/RecoJets/JetProducers/python/caSubjetFilterGenJets_cfi.py index ca67d2b82c08c..f0804923609f3 100644 --- a/RecoJets/JetProducers/python/caSubjetFilterGenJets_cfi.py +++ b/RecoJets/JetProducers/python/caSubjetFilterGenJets_cfi.py @@ -19,4 +19,4 @@ asymmCut = cms.double(0.3), asymmCutLater= cms.bool(True) ) -caSubjetFilterGenJets.doAreaFastjet= cms.bool(True) +caSubjetFilterGenJets.doAreaFastjet = True diff --git a/RecoJets/JetProducers/python/caSubjetFilterPFJets_cfi.py b/RecoJets/JetProducers/python/caSubjetFilterPFJets_cfi.py index e26ab3dcc343b..2c2cfc00f05b4 100644 --- a/RecoJets/JetProducers/python/caSubjetFilterPFJets_cfi.py +++ b/RecoJets/JetProducers/python/caSubjetFilterPFJets_cfi.py @@ -19,4 +19,4 @@ asymmCut = cms.double(0.3), asymmCutLater= cms.bool(True) ) -caSubjetFilterPFJets.doAreaFastjet= cms.bool(True) +caSubjetFilterPFJets.doAreaFastjet = True diff --git a/RecoJets/JetProducers/src/PileupJetIdAlgo.cc b/RecoJets/JetProducers/src/PileupJetIdAlgo.cc index 94ba54c2304fd..d2920772711e1 100644 --- a/RecoJets/JetProducers/src/PileupJetIdAlgo.cc +++ b/RecoJets/JetProducers/src/PileupJetIdAlgo.cc @@ -6,6 +6,7 @@ #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" #include "DataFormats/Math/interface/deltaR.h" #include "FWCore/ParameterSet/interface/FileInPath.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "CommonTools/MVAUtils/interface/GBRForestTools.h" #include "TMatrixDSym.h" diff --git a/RecoJets/JetProducers/validation/fastjetJetProducer_validation_cfg.py b/RecoJets/JetProducers/validation/fastjetJetProducer_validation_cfg.py index bfb7567415278..525d10643b0b7 100644 --- a/RecoJets/JetProducers/validation/fastjetJetProducer_validation_cfg.py +++ b/RecoJets/JetProducers/validation/fastjetJetProducer_validation_cfg.py @@ -21,8 +21,13 @@ # MESSAGELOGGER process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('cout'), - cout = cms.untracked.PSet(threshold = cms.untracked.string('WARNING')) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ) ) # DQMSTORE diff --git a/RecoJets/JetProducers/validation/jetProducers_validation_cfg.py b/RecoJets/JetProducers/validation/jetProducers_validation_cfg.py index d5178857f9d02..c46e289435303 100644 --- a/RecoJets/JetProducers/validation/jetProducers_validation_cfg.py +++ b/RecoJets/JetProducers/validation/jetProducers_validation_cfg.py @@ -20,8 +20,13 @@ # MESSAGELOGGER process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('cout'), - cout = cms.untracked.PSet(threshold = cms.untracked.string('WARNING')) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ) ) # DQMSTORE diff --git a/RecoLocalCalo/CaloTowersCreator/python/calotowerremaker_cfi.py b/RecoLocalCalo/CaloTowersCreator/python/calotowerremaker_cfi.py index b3ffe33a1b81c..a2a1cb5bd6966 100644 --- a/RecoLocalCalo/CaloTowersCreator/python/calotowerremaker_cfi.py +++ b/RecoLocalCalo/CaloTowersCreator/python/calotowerremaker_cfi.py @@ -64,5 +64,5 @@ ) from Configuration.Eras.Modifier_run2_HE_2018_cff import run2_HE_2018 -run2_HE_2018.toModify(ct2ct, HcalPhase = cms.int32(1)) +run2_HE_2018.toModify(ct2ct, HcalPhase = 1) diff --git a/RecoLocalCalo/Castor/src/CastorInvalidDataFilter.cc b/RecoLocalCalo/Castor/src/CastorInvalidDataFilter.cc index 3349c242fb6a6..80f945ca6d79b 100644 --- a/RecoLocalCalo/Castor/src/CastorInvalidDataFilter.cc +++ b/RecoLocalCalo/Castor/src/CastorInvalidDataFilter.cc @@ -28,7 +28,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/MessageLogger/interface/ErrorSummaryEntry.h" +#include "DataFormats/Common/interface/ErrorSummaryEntry.h" // // class declaration diff --git a/RecoLocalCalo/Castor/src/CastorTowerProducer.cc b/RecoLocalCalo/Castor/src/CastorTowerProducer.cc index 000fb8b7da7bf..81ef4579d501e 100644 --- a/RecoLocalCalo/Castor/src/CastorTowerProducer.cc +++ b/RecoLocalCalo/Castor/src/CastorTowerProducer.cc @@ -223,7 +223,6 @@ void CastorTowerProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe // loop over the 16 towers possibilities for (int k = 0; k < 16; k++) { - fem = 0; Ehot = 0; depth = 0; diff --git a/RecoLocalCalo/Configuration/python/customizeEcalOnlyForProfiling.py b/RecoLocalCalo/Configuration/python/customizeEcalOnlyForProfiling.py new file mode 100644 index 0000000000000..4fa955bd33836 --- /dev/null +++ b/RecoLocalCalo/Configuration/python/customizeEcalOnlyForProfiling.py @@ -0,0 +1,51 @@ +import FWCore.ParameterSet.Config as cms + +# Customise the ECAL-only reconstruction to run on GPU +# +# Currently, this means running only the unpacker and multifit, up to the uncalbrated rechits +def customizeEcalOnlyForProfilingGPUOnly(process): + + process.consumer = cms.EDAnalyzer("GenericConsumer", + eventProducts = cms.untracked.vstring('ecalMultiFitUncalibRecHitGPU') + ) + + process.consume_step = cms.EndPath(process.consumer) + + process.schedule = cms.Schedule(process.raw2digi_step, process.reconstruction_step, process.consume_step) + + return process + + +# Customise the ECAL-only reconstruction to run on GPU, and copy the data to the host +# +# Currently, this means running only the unpacker and multifit, up to the uncalbrated rechits +def customizeEcalOnlyForProfilingGPUWithHostCopy(process): + + process.consumer = cms.EDAnalyzer("GenericConsumer", + eventProducts = cms.untracked.vstring('ecalMultiFitUncalibRecHitSoA') + ) + + process.consume_step = cms.EndPath(process.consumer) + + process.schedule = cms.Schedule(process.raw2digi_step, process.reconstruction_step, process.consume_step) + + return process + + +# Customise the ECAL-only reconstruction to run on GPU, copy the data to the host, and convert to legacy format +# +# Currently, this means running only the unpacker and multifit, up to the uncalbrated rechits, on the GPU +# and the rechits producer on the CPU +# +# The same customisation can be also used on the CPU workflow, running up to the rechits on CPU. +def customizeEcalOnlyForProfiling(process): + + process.consumer = cms.EDAnalyzer("GenericConsumer", + eventProducts = cms.untracked.vstring('ecalRecHit') + ) + + process.consume_step = cms.EndPath(process.consumer) + + process.schedule = cms.Schedule(process.raw2digi_step, process.reconstruction_step, process.consume_step) + + return process diff --git a/RecoLocalCalo/Configuration/python/customizeHcalOnlyForProfiling.py b/RecoLocalCalo/Configuration/python/customizeHcalOnlyForProfiling.py new file mode 100644 index 0000000000000..b3a2548791ae5 --- /dev/null +++ b/RecoLocalCalo/Configuration/python/customizeHcalOnlyForProfiling.py @@ -0,0 +1,60 @@ +import FWCore.ParameterSet.Config as cms + +# Customise the HCAL-only reconstruction to run on GPU +# +# Currently, this means: +# - running the unpacker on CPU, converting the digis into SoA format and copying them to GPU; +# - running the HBHE local reconstruction, including MAHI, on GPU. +def customizeHcalOnlyForProfilingGPUOnly(process): + + process.consumer = cms.EDAnalyzer("GenericConsumer", + eventProducts = cms.untracked.vstring('hbheRecHitProducerGPU') + ) + + process.consume_step = cms.EndPath(process.consumer) + + process.schedule = cms.Schedule(process.raw2digi_step, process.reconstruction_step, process.consume_step) + + return process + + +# Customise the HCAL-only reconstruction to run on GPU, and copy the data to the host +# +# Currently, this means: +# - running the unpacker on CPU, converting the digis into SoA format and copying them to GPU; +# - running the HBHE local reconstruction, including MAHI, on GPU; +# - copying the rechits to CPU and converting them to legacy format. +# +# (this is equivalent to customizeHcalOnlyForProfiling, as the copy and conversion is done by the same module) +def customizeHcalOnlyForProfilingGPUWithHostCopy(process): + + process.consumer = cms.EDAnalyzer("GenericConsumer", + eventProducts = cms.untracked.vstring('hbheprereco') + ) + + process.consume_step = cms.EndPath(process.consumer) + + process.schedule = cms.Schedule(process.raw2digi_step, process.reconstruction_step, process.consume_step) + + return process + + +# Customise the HCAL-only reconstruction to run on GPU, copy the data to the host, and convert to legacy format +# +# Currently, this means: +# - running the unpacker on CPU, converting the digis into SoA format and copying them to GPU; +# - running the HBHE local reconstruction, including MAHI, on GPU; +# - copying the rechits to CPU and converting them to legacy format. +# +# The same customisation can be also used on the CPU workflow, running up to the rechits on CPU. +def customizeHcalOnlyForProfiling(process): + + process.consumer = cms.EDAnalyzer("GenericConsumer", + eventProducts = cms.untracked.vstring('hbheprereco') + ) + + process.consume_step = cms.EndPath(process.consumer) + + process.schedule = cms.Schedule(process.raw2digi_step, process.reconstruction_step, process.consume_step) + + return process diff --git a/RecoLocalCalo/Configuration/python/ecalLocalRecoSequence_cff.py b/RecoLocalCalo/Configuration/python/ecalLocalRecoSequence_cff.py index 06fecf4787baf..75ae5fc0c202f 100644 --- a/RecoLocalCalo/Configuration/python/ecalLocalRecoSequence_cff.py +++ b/RecoLocalCalo/Configuration/python/ecalLocalRecoSequence_cff.py @@ -1,4 +1,5 @@ import FWCore.ParameterSet.Config as cms +from Configuration.ProcessModifiers.gpu_cff import gpu # TPG condition needed by ecalRecHit producer if TT recovery is ON from RecoLocalCalo.EcalRecProducers.ecalRecHitTPGConditions_cff import * @@ -43,6 +44,61 @@ ecalOnlyLocalRecoSequence = cms.Sequence(ecalOnlyLocalRecoTask) +# ECAL rechit calibrations on GPU +from RecoLocalCalo.EcalRecProducers.ecalRechitADCToGeVConstantGPUESProducer_cfi import ecalRechitADCToGeVConstantGPUESProducer +from RecoLocalCalo.EcalRecProducers.ecalRechitChannelStatusGPUESProducer_cfi import ecalRechitChannelStatusGPUESProducer +from RecoLocalCalo.EcalRecProducers.ecalIntercalibConstantsGPUESProducer_cfi import ecalIntercalibConstantsGPUESProducer +from RecoLocalCalo.EcalRecProducers.ecalLaserAPDPNRatiosGPUESProducer_cfi import ecalLaserAPDPNRatiosGPUESProducer +from RecoLocalCalo.EcalRecProducers.ecalLaserAPDPNRatiosRefGPUESProducer_cfi import ecalLaserAPDPNRatiosRefGPUESProducer +from RecoLocalCalo.EcalRecProducers.ecalLaserAlphasGPUESProducer_cfi import ecalLaserAlphasGPUESProducer +from RecoLocalCalo.EcalRecProducers.ecalLinearCorrectionsGPUESProducer_cfi import ecalLinearCorrectionsGPUESProducer +from RecoLocalCalo.EcalRecProducers.ecalRecHitParametersGPUESProducer_cfi import ecalRecHitParametersGPUESProducer + +# ECAL rechits running on GPU +from RecoLocalCalo.EcalRecProducers.ecalRecHitGPU_cfi import ecalRecHitGPU as _ecalRecHitGPU +ecalRecHitGPU = _ecalRecHitGPU.clone( + uncalibrecHitsInLabelEB = cms.InputTag('ecalMultiFitUncalibRecHitGPU', 'EcalUncalibRecHitsEB'), + uncalibrecHitsInLabelEE = cms.InputTag('ecalMultiFitUncalibRecHitGPU', 'EcalUncalibRecHitsEE') +) + +# copy the rechits from GPU to CPU +from RecoLocalCalo.EcalRecProducers.ecalCPURecHitProducer_cfi import ecalCPURecHitProducer as _ecalCPURecHitProducer +ecalRecHitSoA = _ecalCPURecHitProducer.clone( + recHitsInLabelEB = cms.InputTag('ecalRecHitGPU', 'EcalRecHitsEB'), + recHitsInLabelEE = cms.InputTag('ecalRecHitGPU', 'EcalRecHitsEE') +) + +# convert the rechits from SoA to legacy format +from RecoLocalCalo.EcalRecProducers.ecalRecHitConvertGPU2CPUFormat_cfi import ecalRecHitConvertGPU2CPUFormat as _ecalRecHitConvertGPU2CPUFormat +_ecalRecHit_gpu = _ecalRecHitConvertGPU2CPUFormat.clone( + recHitsLabelGPUEB = cms.InputTag('ecalRecHitSoA', 'EcalRecHitsEB'), + recHitsLabelGPUEE = cms.InputTag('ecalRecHitSoA', 'EcalRecHitsEE') +) +# TODO: the ECAL calibrated rechits produced on the GPU are not correct, yet. +# When they are working and validated, remove this comment and uncomment the next line: +#gpu.toReplaceWith(ecalRecHit, _ecalRecHit_gpu) + +# ECAL reconstruction on GPU +gpu.toReplaceWith(ecalRecHitNoTPTask, cms.Task( + # ECAL rechit calibrations on GPU + ecalRechitADCToGeVConstantGPUESProducer, + ecalRechitChannelStatusGPUESProducer, + ecalIntercalibConstantsGPUESProducer, + ecalLaserAPDPNRatiosGPUESProducer, + ecalLaserAPDPNRatiosRefGPUESProducer, + ecalLaserAlphasGPUESProducer, + ecalLinearCorrectionsGPUESProducer, + ecalRecHitParametersGPUESProducer, + # ECAL rechits running on GPU + ecalRecHitGPU, + # copy the rechits from GPU to CPU + ecalRecHitSoA, + # convert the rechits from SoA to legacy format + ecalRecHit, + # ECAL preshower rechit legacy module + ecalPreshowerRecHit +)) + # Phase 2 modifications from RecoLocalCalo.EcalRecProducers.ecalDetailedTimeRecHit_cfi import * _phase2_timing_ecalRecHitTask = cms.Task( ecalRecHitTask.copy() , ecalDetailedTimeRecHit ) diff --git a/RecoLocalCalo/Configuration/python/hcalGlobalReco_cff.py b/RecoLocalCalo/Configuration/python/hcalGlobalReco_cff.py index 70207e36ba654..fbb4c53f9f28b 100644 --- a/RecoLocalCalo/Configuration/python/hcalGlobalReco_cff.py +++ b/RecoLocalCalo/Configuration/python/hcalGlobalReco_cff.py @@ -4,7 +4,18 @@ hcalGlobalRecoTask = cms.Task(hbhereco) hcalGlobalRecoSequence = cms.Sequence(hcalGlobalRecoTask) +#--- for Run 3 and later +from Configuration.Eras.Modifier_run3_HB_cff import run3_HB + from RecoLocalCalo.HcalRecProducers.HBHEPhase1Reconstructor_cfi import hbheprereco as _phase1_hbheprereco +run3_HB.toReplaceWith(hbhereco, _phase1_hbheprereco) -from Configuration.Eras.Modifier_run3_HB_cff import run3_HB -run3_HB.toReplaceWith( hbhereco, _phase1_hbheprereco ) # >=Run3 +#--- for Run 3 on GPU +from Configuration.ProcessModifiers.gpu_cff import gpu + +from RecoLocalCalo.HcalRecProducers.hcalCPURecHitsProducer_cfi import hcalCPURecHitsProducer as _hcalCPURecHitsProducer +gpu.toReplaceWith(hbhereco, _hcalCPURecHitsProducer.clone( + recHitsM0LabelIn = "hbheRecHitProducerGPU", + recHitsM0LabelOut = "", + recHitsLegacyLabelOut = "" +)) diff --git a/RecoLocalCalo/Configuration/python/hcalLocalReco_cff.py b/RecoLocalCalo/Configuration/python/hcalLocalReco_cff.py index 84e7498b7eb2d..a7bdce3b916af 100644 --- a/RecoLocalCalo/Configuration/python/hcalLocalReco_cff.py +++ b/RecoLocalCalo/Configuration/python/hcalLocalReco_cff.py @@ -16,20 +16,17 @@ from RecoLocalCalo.HcalRecProducers.HcalHitReconstructor_ho_cfi import * from RecoLocalCalo.HcalRecProducers.HcalHitReconstructor_hf_cfi import * from RecoLocalCalo.HcalRecProducers.HcalHitReconstructor_zdc_cfi import * -hcalLocalRecoTask = cms.Task(hbheprereco,hfreco,horeco,zdcreco) +hcalLocalRecoTask = cms.Task(hbheprereco, hfreco, horeco, zdcreco) hcalLocalRecoSequence = cms.Sequence(hcalLocalRecoTask) from RecoLocalCalo.HcalRecProducers.hfprereco_cfi import hfprereco from RecoLocalCalo.HcalRecProducers.HFPhase1Reconstructor_cfi import hfreco as _phase1_hfreco from RecoLocalCalo.HcalRecProducers.hbheplan1_cfi import hbheplan1 -#--- for HCALonly wf -hcalOnlyLocalRecoTask = cms.Task(hbheprereco,hfprereco,hfreco,horeco) - -# copy for cosmics +#--- for cosmics _default_hfreco = hfreco.clone() -#--- Phase1 +#--- for Phase 1 _phase1_hcalLocalRecoTask = hcalLocalRecoTask.copy() _phase1_hcalLocalRecoTask.add(hfprereco) @@ -37,7 +34,7 @@ run2_HF_2017.toReplaceWith( hcalLocalRecoTask, _phase1_hcalLocalRecoTask ) run2_HF_2017.toReplaceWith( hfreco, _phase1_hfreco ) from Configuration.Eras.Modifier_run2_HCAL_2017_cff import run2_HCAL_2017 -run2_HCAL_2017.toReplaceWith( hbheprereco, _phase1_hbheprereco ) +run2_HCAL_2017.toReplaceWith(hbheprereco, _phase1_hbheprereco) _plan1_hcalLocalRecoTask = _phase1_hcalLocalRecoTask.copy() _plan1_hcalLocalRecoTask.add(hbheplan1) @@ -50,12 +47,39 @@ from Configuration.ProcessModifiers.run2_HECollapse_2018_cff import run2_HECollapse_2018 run2_HECollapse_2018.toReplaceWith(hcalLocalRecoTask, _collapse_hcalLocalRecoTask) -#--- from >=Run3 +#--- for Run 3 and later _run3_hcalLocalRecoTask = _phase1_hcalLocalRecoTask.copy() _run3_hcalLocalRecoTask.remove(hbheprereco) from Configuration.Eras.Modifier_run3_HB_cff import run3_HB -run3_HB.toReplaceWith( hcalLocalRecoTask, _run3_hcalLocalRecoTask ) +run3_HB.toReplaceWith(hcalLocalRecoTask, _run3_hcalLocalRecoTask) + +#--- for Run 3 on GPU +from Configuration.ProcessModifiers.gpu_cff import gpu + +from RecoLocalCalo.HcalRecProducers.hbheRecHitProducerGPUTask_cff import * +_run3_hcalLocalRecoGPUTask = _run3_hcalLocalRecoTask.copy() +_run3_hcalLocalRecoGPUTask.add(hbheRecHitProducerGPUTask) +gpu.toReplaceWith(hcalLocalRecoTask, _run3_hcalLocalRecoGPUTask) + +#--- HCAL-only workflow for Run 3 +# FIXME rename `hbheprereco` to `hbhereco` and use it from hcalGlobalRecoTask +hcalOnlyLocalRecoTask = cms.Task(hbheprereco, hfprereco, hfreco, horeco) + +#--- HCAL-only workflow for Run 3 on GPU +from Configuration.ProcessModifiers.gpu_cff import gpu + +_hcalOnlyLocalRecoGPUTask = hcalOnlyLocalRecoTask.copy() +_hcalOnlyLocalRecoGPUTask.add(hbheRecHitProducerGPUTask) +gpu.toReplaceWith(hcalOnlyLocalRecoTask, _hcalOnlyLocalRecoGPUTask) + +from RecoLocalCalo.HcalRecProducers.hcalCPURecHitsProducer_cfi import hcalCPURecHitsProducer as _hcalCPURecHitsProducer +gpu.toReplaceWith(hbheprereco, _hcalCPURecHitsProducer.clone( + recHitsM0LabelIn = "hbheRecHitProducerGPU", + recHitsM0LabelOut = "", + recHitsLegacyLabelOut = "" +)) +#--- for FastSim _fastSim_hcalLocalRecoTask = hcalLocalRecoTask.copyAndExclude([zdcreco]) from Configuration.Eras.Modifier_fastSim_cff import fastSim fastSim.toReplaceWith( hcalLocalRecoTask, _fastSim_hcalLocalRecoTask ) diff --git a/RecoLocalCalo/EcalRecAlgos/BuildFile.xml b/RecoLocalCalo/EcalRecAlgos/BuildFile.xml index 2eaf053c342dd..b14fd8e0787f2 100644 --- a/RecoLocalCalo/EcalRecAlgos/BuildFile.xml +++ b/RecoLocalCalo/EcalRecAlgos/BuildFile.xml @@ -1,9 +1,12 @@ + + + @@ -11,6 +14,7 @@ + diff --git a/RecoLocalCalo/EcalRecAlgos/bin/BuildFile.xml b/RecoLocalCalo/EcalRecAlgos/bin/BuildFile.xml new file mode 100644 index 0000000000000..4c98171091b84 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/bin/BuildFile.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/RecoLocalCalo/EcalRecAlgos/bin/makeEcalMultifitResultsGpuValidationPlots.cpp b/RecoLocalCalo/EcalRecAlgos/bin/makeEcalMultifitResultsGpuValidationPlots.cpp new file mode 100644 index 0000000000000..f010e3afdbb18 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/bin/makeEcalMultifitResultsGpuValidationPlots.cpp @@ -0,0 +1,564 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "DataFormats/Common/interface/Wrapper.h" +#include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalUncalibratedRecHit.h" + +#include "TStyle.h" + +void setAxis(TH2D *histo) { + histo->GetXaxis()->SetTitle("cpu"); + histo->GetYaxis()->SetTitle("gpu"); +} + +void setAxisDelta(TH2D *histo) { + histo->GetXaxis()->SetTitle("cpu"); + histo->GetYaxis()->SetTitle("#Delta gpu-cpu"); +} + +int main(int argc, char *argv[]) { + if (argc < 3) { + std::cout << "run with: ./validateGPU \n"; + exit(0); + } + + gStyle->SetOptStat("ourme"); + + edm::Wrapper>> *wgpuEB = + nullptr; + edm::Wrapper>> *wgpuEE = + nullptr; + edm::Wrapper *wcpuEB = nullptr; + edm::Wrapper *wcpuEE = nullptr; + + std::string fileName = argv[1]; + std::string outFileName = argv[2]; + + // output + TFile rfout{outFileName.c_str(), "recreate"}; + + int nbins_count = 200; + float last_count = 5000.; + int nbins_count_delta = 201; + + int nbins = 300; + float last = 3000.; + + // int nbins_chi2 = 1000; + // float last_chi2 = 1000.; + int nbins_chi2 = 1000; + float last_chi2 = 200.; + + int nbins_flags = 100; + float last_flags = 100.; + float delta_flags = 20; + + int nbins_delta = 201; // use an odd number to center around 0 + float delta = 0.2; + + // RecHits plots for EB and EE on both GPU and CPU + auto hRechitsEBGPU = new TH1D("RechitsEBGPU", "RechitsEBGPU; No. of Rechits", nbins_count, 0, last_count); + auto hRechitsEBCPU = new TH1D("RechitsEBCPU", "RechitsEBCPU; No. of Rechits", nbins_count, 0, last_count); + auto hRechitsEEGPU = new TH1D("RechitsEEGPU", "RechitsEEGPU; No. of Rechits", nbins_count, 0, last_count); + auto hRechitsEECPU = new TH1D("RechitsEECPU", "RechitsEECPU; No. of Rechits", nbins_count, 0, last_count); + auto hRechitsEBGPUCPUratio = new TH1D("RechitsEBGPU/CPUratio", "RechitsEBGPU/CPUratio; GPU/CPU", 50, 0.9, 1.1); + auto hRechitsEEGPUCPUratio = new TH1D("RechitsEEGPU/CPUratio", "RechitsEEGPU/CPUratio; GPU/CPU", 50, 0.9, 1.1); + + auto hSOIAmplitudesEBGPU = new TH1D("hSOIAmplitudesEBGPU", "hSOIAmplitudesEBGPU", nbins, 0, last); + auto hSOIAmplitudesEEGPU = new TH1D("hSOIAmplitudesEEGPU", "hSOIAmplitudesEEGPU", nbins, 0, last); + auto hSOIAmplitudesEBCPU = new TH1D("hSOIAmplitudesEBCPU", "hSOIAmplitudesEBCPU", nbins, 0, last); + auto hSOIAmplitudesEECPU = new TH1D("hSOIAmplitudesEECPU", "hSOIAmplitudesEECPU", nbins, 0, last); + auto hSOIAmplitudesEBGPUCPUratio = + new TH1D("SOIAmplitudesEBGPU/CPUratio", "SOIAmplitudesEBGPU/CPUratio; GPU/CPU", 200, 0.9, 1.1); + auto hSOIAmplitudesEEGPUCPUratio = + new TH1D("SOIAmplitudesEEGPU/CPUratio", "SOIAmplitudesEEGPU/CPUratio; GPU/CPU", 200, 0.9, 1.1); + + auto hChi2EBGPU = new TH1D("hChi2EBGPU", "hChi2EBGPU", nbins_chi2, 0, last_chi2); + auto hChi2EEGPU = new TH1D("hChi2EEGPU", "hChi2EEGPU", nbins_chi2, 0, last_chi2); + auto hChi2EBCPU = new TH1D("hChi2EBCPU", "hChi2EBCPU", nbins_chi2, 0, last_chi2); + auto hChi2EECPU = new TH1D("hChi2EECPU", "hChi2EECPU", nbins_chi2, 0, last_chi2); + auto hChi2EBGPUCPUratio = new TH1D("Chi2EBGPU/CPUratio", "Chi2EBGPU/CPUratio; GPU/CPU", 200, 0.9, 1.1); + auto hChi2EEGPUCPUratio = new TH1D("Chi2EEGPU/CPUratio", "Chi2EEGPU/CPUratio; GPU/CPU", 200, 0.9, 1.1); + + auto hFlagsEBGPU = new TH1D("hFlagsEBGPU", "hFlagsEBGPU", nbins_flags, 0, last_flags); + auto hFlagsEEGPU = new TH1D("hFlagsEEGPU", "hFlagsEEGPU", nbins_flags, 0, last_flags); + auto hFlagsEBCPU = new TH1D("hFlagsEBCPU", "hFlagsEBCPU", nbins_flags, 0, last_flags); + auto hFlagsEECPU = new TH1D("hFlagsEECPU", "hFlagsEECPU", nbins_flags, 0, last_flags); + auto hFlagsEBGPUCPUratio = new TH1D("FlagsEBGPU/CPUratio", "FlagsEBGPU/CPUratio; GPU/CPU", 200, 0.9, 1.1); + auto hFlagsEEGPUCPUratio = new TH1D("FlagsEEGPU/CPUratio", "FlagsEEGPU/CPUratio; GPU/CPU", 200, 0.9, 1.1); + + auto hSOIAmplitudesEBGPUvsCPU = + new TH2D("hSOIAmplitudesEBGPUvsCPU", "hSOIAmplitudesEBGPUvsCPU", nbins, 0, last, nbins, 0, last); + setAxis(hSOIAmplitudesEBGPUvsCPU); + auto hSOIAmplitudesEEGPUvsCPU = + new TH2D("hSOIAmplitudesEEGPUvsCPU", "hSOIAmplitudesEEGPUvsCPU", nbins, 0, last, nbins, 0, last); + setAxis(hSOIAmplitudesEEGPUvsCPU); + auto hSOIAmplitudesEBdeltavsCPU = + new TH2D("hSOIAmplitudesEBdeltavsCPU", "hSOIAmplitudesEBdeltavsCPU", nbins, 0, last, nbins_delta, -delta, delta); + setAxisDelta(hSOIAmplitudesEBdeltavsCPU); + auto hSOIAmplitudesEEdeltavsCPU = + new TH2D("hSOIAmplitudesEEdeltavsCPU", "hSOIAmplitudesEEdeltavsCPU", nbins, 0, last, nbins_delta, -delta, delta); + setAxisDelta(hSOIAmplitudesEEdeltavsCPU); + + auto hChi2EBGPUvsCPU = + new TH2D("hChi2EBGPUvsCPU", "hChi2EBGPUvsCPU", nbins_chi2, 0, last_chi2, nbins_chi2, 0, last_chi2); + setAxis(hChi2EBGPUvsCPU); + auto hChi2EEGPUvsCPU = + new TH2D("hChi2EEGPUvsCPU", "hChi2EEGPUvsCPU", nbins_chi2, 0, last_chi2, nbins_chi2, 0, last_chi2); + setAxis(hChi2EEGPUvsCPU); + auto hChi2EBdeltavsCPU = + new TH2D("hChi2EBdeltavsCPU", "hChi2EBdeltavsCPU", nbins_chi2, 0, last_chi2, nbins_delta, -delta, delta); + setAxisDelta(hChi2EBdeltavsCPU); + auto hChi2EEdeltavsCPU = + new TH2D("hChi2EEdeltavsCPU", "hChi2EEdeltavsCPU", nbins_chi2, 0, last_chi2, nbins_delta, -delta, delta); + setAxisDelta(hChi2EEdeltavsCPU); + + auto hFlagsEBGPUvsCPU = + new TH2D("hFlagsEBGPUvsCPU", "hFlagsEBGPUvsCPU", nbins_flags, 0, last_flags, nbins_flags, 0, last_flags); + setAxis(hFlagsEBGPUvsCPU); + auto hFlagsEEGPUvsCPU = + new TH2D("hFlagsEEGPUvsCPU", "hFlagsEEGPUvsCPU", nbins_flags, 0, last_flags, nbins_flags, 0, last_flags); + setAxis(hFlagsEEGPUvsCPU); + auto hFlagsEBdeltavsCPU = new TH2D( + "hFlagsEBdeltavsCPU", "hFlagsEBdeltavsCPU", nbins_flags, 0, last_flags, nbins_delta, -delta_flags, delta_flags); + setAxisDelta(hFlagsEBdeltavsCPU); + auto hFlagsEEdeltavsCPU = new TH2D( + "hFlagsEEdeltavsCPU", "hFlagsEEdeltavsCPU", nbins_flags, 0, last_flags, nbins_delta, -delta_flags, delta_flags); + setAxisDelta(hFlagsEEdeltavsCPU); + + auto hRechitsEBGPUvsCPU = new TH2D( + "RechitsEBGPUvsCPU", "RechitsEBGPUvsCPU; CPU; GPU", last_count, 0, last_count, last_count, 0, last_count); + setAxis(hRechitsEBGPUvsCPU); + auto hRechitsEEGPUvsCPU = new TH2D( + "RechitsEEGPUvsCPU", "RechitsEEGPUvsCPU; CPU; GPU", last_count, 0, last_count, last_count, 0, last_count); + setAxis(hRechitsEEGPUvsCPU); + auto hRechitsEBdeltavsCPU = new TH2D( + "RechitsEBdeltavsCPU", "RechitsEBdeltavsCPU", nbins_count, 0, last_count, nbins_count_delta, -delta, delta); + setAxisDelta(hRechitsEBdeltavsCPU); + auto hRechitsEEdeltavsCPU = new TH2D( + "RechitsEEdeltavsCPU", "RechitsEEdeltavsCPU", nbins_count, 0, last_count, nbins_count_delta, -delta, delta); + setAxisDelta(hRechitsEEdeltavsCPU); + + // input + std::cout << "validating file " << fileName << std::endl; + TFile rf{fileName.c_str()}; + TTree *rt = (TTree *)rf.Get("Events"); + rt->SetBranchAddress( + "calocommonCUDAHostAllocatorAliascalocommonVecStoragePolicyecalUncalibratedRecHit_ecalCPUUncalibRecHitProducer_" + "EcalUncalibRecHitsEB_RECO.", + &wgpuEB); + rt->SetBranchAddress( + "calocommonCUDAHostAllocatorAliascalocommonVecStoragePolicyecalUncalibratedRecHit_ecalCPUUncalibRecHitProducer_" + "EcalUncalibRecHitsEE_RECO.", + &wgpuEE); + rt->SetBranchAddress("EcalUncalibratedRecHitsSorted_ecalMultiFitUncalibRecHit_EcalUncalibRecHitsEB_RECO.", &wcpuEB); + rt->SetBranchAddress("EcalUncalibratedRecHitsSorted_ecalMultiFitUncalibRecHit_EcalUncalibRecHitsEE_RECO.", &wcpuEE); + + constexpr float eps_diff = 1e-3; + + // accumulate + auto const nentries = rt->GetEntries(); + std::cout << "#events to validate over: " << nentries << std::endl; + for (int ie = 0; ie < nentries; ++ie) { + rt->GetEntry(ie); + + const char *ordinal[] = {"th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th"}; + auto cpu_eb_size = wcpuEB->bareProduct().size(); + auto cpu_ee_size = wcpuEE->bareProduct().size(); + auto gpu_eb_size = wgpuEB->bareProduct().amplitude.size(); + auto gpu_ee_size = wgpuEE->bareProduct().amplitude.size(); + + float eb_ratio = (float)gpu_eb_size / cpu_eb_size; + float ee_ratio = (float)gpu_ee_size / cpu_ee_size; + + // Filling up the histograms on events sizes for EB and EE on both GPU and CPU + hRechitsEBGPU->Fill(gpu_eb_size); + hRechitsEBCPU->Fill(cpu_eb_size); + hRechitsEEGPU->Fill(gpu_ee_size); + hRechitsEECPU->Fill(cpu_ee_size); + hRechitsEBGPUvsCPU->Fill(cpu_eb_size, gpu_eb_size); + hRechitsEEGPUvsCPU->Fill(cpu_ee_size, gpu_ee_size); + hRechitsEBGPUCPUratio->Fill(eb_ratio); + hRechitsEEGPUCPUratio->Fill(ee_ratio); + hRechitsEBdeltavsCPU->Fill(cpu_eb_size, gpu_eb_size - cpu_eb_size); + hRechitsEEdeltavsCPU->Fill(cpu_ee_size, gpu_ee_size - cpu_ee_size); + + if (cpu_eb_size != gpu_eb_size or cpu_ee_size != gpu_ee_size) { + std::cerr << ie << ordinal[ie % 10] << " entry:\n" + << " EB size: " << std::setw(4) << cpu_eb_size << " (cpu) vs " << std::setw(4) << gpu_eb_size + << " (gpu)\n" + << " EE size: " << std::setw(4) << cpu_ee_size << " (cpu) vs " << std::setw(4) << gpu_ee_size + << " (gpu)" << std::endl; + continue; + } + + assert(wgpuEB->bareProduct().amplitude.size() == wcpuEB->bareProduct().size()); + assert(wgpuEE->bareProduct().amplitude.size() == wcpuEE->bareProduct().size()); + auto const neb = wcpuEB->bareProduct().size(); + auto const nee = wcpuEE->bareProduct().size(); + + for (uint32_t i = 0; i < neb; ++i) { + auto const did_gpu = wgpuEB->bareProduct().did[i]; + auto const soi_amp_gpu = wgpuEB->bareProduct().amplitude[i]; + auto const cpu_iter = wcpuEB->bareProduct().find(DetId{did_gpu}); + if (cpu_iter == wcpuEB->bareProduct().end()) { + std::cerr << ie << ordinal[ie % 10] << " entry\n" + << " Did not find a DetId " << did_gpu << " in a CPU collection\n"; + continue; + } + auto const soi_amp_cpu = cpu_iter->amplitude(); + auto const chi2_gpu = wgpuEB->bareProduct().chi2[i]; + auto const chi2_cpu = cpu_iter->chi2(); + + auto const flags_gpu = wgpuEB->bareProduct().flags[i]; + auto const flags_cpu = cpu_iter->flags(); + + hSOIAmplitudesEBGPU->Fill(soi_amp_gpu); + hSOIAmplitudesEBCPU->Fill(soi_amp_cpu); + hSOIAmplitudesEBGPUvsCPU->Fill(soi_amp_cpu, soi_amp_gpu); + hSOIAmplitudesEBdeltavsCPU->Fill(soi_amp_cpu, soi_amp_gpu - soi_amp_cpu); + if (soi_amp_cpu > 0) + hSOIAmplitudesEBGPUCPUratio->Fill((float)soi_amp_gpu / soi_amp_cpu); + + hChi2EBGPU->Fill(chi2_gpu); + hChi2EBCPU->Fill(chi2_cpu); + hChi2EBGPUvsCPU->Fill(chi2_cpu, chi2_gpu); + hChi2EBdeltavsCPU->Fill(chi2_cpu, chi2_gpu - chi2_cpu); + if (chi2_cpu > 0) + hChi2EBGPUCPUratio->Fill((float)chi2_gpu / chi2_cpu); + + if (std::abs(chi2_gpu / chi2_cpu - 1) > 0.05 || std::abs(soi_amp_gpu / soi_amp_cpu - 1) > 0.05) { + std::cout << " ---- EB " << std::endl; + std::cout << " eventid = " << ie << " xtal = " << i << std::endl; + std::cout << " chi2_gpu = " << chi2_gpu << " chi2_cpu = " << chi2_cpu << std::endl; + std::cout << " soi_amp_gpu = " << soi_amp_gpu << " soi_amp_cpu = " << soi_amp_cpu << std::endl; + std::cout << " flags_gpu = " << flags_gpu << " flags_cpu = " << flags_cpu << std::endl; + } + + hFlagsEBGPU->Fill(flags_gpu); + hFlagsEBCPU->Fill(flags_cpu); + hFlagsEBGPUvsCPU->Fill(flags_cpu, flags_gpu); + hFlagsEBdeltavsCPU->Fill(flags_cpu, flags_gpu - flags_cpu); + if (flags_cpu > 0) + hFlagsEBGPUCPUratio->Fill((float)flags_gpu / flags_cpu); + + if (flags_cpu != flags_gpu) { + std::cout << " >> No! Different flag cpu:gpu = " << flags_cpu << " : " << flags_gpu; + std::cout << std::endl; + } + + if ((std::abs(soi_amp_gpu - soi_amp_cpu) >= eps_diff) or (std::abs(chi2_gpu - chi2_cpu) >= eps_diff) or + std::isnan(chi2_gpu) or (flags_cpu != flags_gpu)) { + printf("EB eventid = %d chid = %d amp_gpu = %f amp_cpu %f chi2_gpu = %f chi2_cpu = %f\n", + ie, + i, + soi_amp_gpu, + soi_amp_cpu, + chi2_gpu, + chi2_cpu); + if (std::isnan(chi2_gpu)) + printf("*** nan ***\n"); + } + } + + for (uint32_t i = 0; i < nee; ++i) { + auto const did_gpu = wgpuEE->bareProduct().did[i]; + auto const soi_amp_gpu = wgpuEE->bareProduct().amplitude[i]; + auto const cpu_iter = wcpuEE->bareProduct().find(DetId{did_gpu}); + if (cpu_iter == wcpuEE->bareProduct().end()) { + std::cerr << ie << ordinal[ie % 10] << " entry\n" + << " did not find a DetId " << did_gpu << " in a CPU collection\n"; + continue; + } + auto const soi_amp_cpu = cpu_iter->amplitude(); + auto const chi2_gpu = wgpuEE->bareProduct().chi2[i]; + auto const chi2_cpu = cpu_iter->chi2(); + + auto const flags_gpu = wgpuEE->bareProduct().flags[i]; + auto const flags_cpu = cpu_iter->flags(); + + hSOIAmplitudesEEGPU->Fill(soi_amp_gpu); + hSOIAmplitudesEECPU->Fill(soi_amp_cpu); + hSOIAmplitudesEEGPUvsCPU->Fill(soi_amp_cpu, soi_amp_gpu); + hSOIAmplitudesEEdeltavsCPU->Fill(soi_amp_cpu, soi_amp_gpu - soi_amp_cpu); + if (soi_amp_cpu > 0) + hSOIAmplitudesEEGPUCPUratio->Fill((float)soi_amp_gpu / soi_amp_cpu); + + hChi2EEGPU->Fill(chi2_gpu); + hChi2EECPU->Fill(chi2_cpu); + hChi2EEGPUvsCPU->Fill(chi2_cpu, chi2_gpu); + hChi2EEdeltavsCPU->Fill(chi2_cpu, chi2_gpu - chi2_cpu); + if (chi2_cpu > 0) + hChi2EEGPUCPUratio->Fill((float)chi2_gpu / chi2_cpu); + + if (std::abs(chi2_gpu / chi2_cpu - 1) > 0.05 || std::abs(soi_amp_gpu / soi_amp_cpu - 1) > 0.05) { + std::cout << " ---- EE " << std::endl; + std::cout << " eventid = " << ie << " xtal = " << i << std::endl; + std::cout << " chi2_gpu = " << chi2_gpu << " chi2_cpu = " << chi2_cpu << std::endl; + std::cout << " soi_amp_gpu = " << soi_amp_gpu << " soi_amp_cpu = " << soi_amp_cpu << std::endl; + std::cout << " flags_gpu = " << flags_gpu << " flags_cpu = " << flags_cpu << std::endl; + } + + hFlagsEEGPU->Fill(flags_gpu); + hFlagsEECPU->Fill(flags_cpu); + hFlagsEEGPUvsCPU->Fill(flags_cpu, flags_gpu); + hFlagsEEdeltavsCPU->Fill(flags_cpu, flags_gpu - flags_cpu); + if (flags_cpu > 0) + hFlagsEEGPUCPUratio->Fill((float)flags_gpu / flags_cpu); + + if (flags_cpu != flags_gpu) { + std::cout << " >> No! Different flag cpu:gpu = " << flags_cpu << " : " << flags_gpu; + std::cout << std::endl; + } + + if ((std::abs(soi_amp_gpu - soi_amp_cpu) >= eps_diff) or (std::abs(chi2_gpu - chi2_cpu) >= eps_diff) or + std::isnan(chi2_gpu) or (flags_cpu != flags_gpu)) { + printf("EE eventid = %d chid = %d amp_gpu = %f amp_cpu %f chi2_gpu = %f chi2_cpu = %f\n", + ie, + static_cast(neb + i), + soi_amp_gpu, + soi_amp_cpu, + chi2_gpu, + chi2_cpu); + if (std::isnan(chi2_gpu)) + printf("*** nan ***\n"); + } + } + } + + { + TCanvas c("plots", "plots", 1750, 860); + c.Divide(3, 2); + + c.cd(1); + { + gPad->SetLogy(); + hSOIAmplitudesEBCPU->SetLineColor(kBlack); + hSOIAmplitudesEBCPU->SetLineWidth(1.); + hSOIAmplitudesEBCPU->Draw(""); + hSOIAmplitudesEBGPU->SetLineColor(kBlue); + hSOIAmplitudesEBGPU->SetLineWidth(1.); + hSOIAmplitudesEBGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats *)hSOIAmplitudesEBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + + c.cd(4); + { + gPad->SetLogy(); + hSOIAmplitudesEECPU->SetLineColor(kBlack); + hSOIAmplitudesEECPU->SetLineWidth(1.); + hSOIAmplitudesEECPU->Draw(""); + hSOIAmplitudesEEGPU->SetLineColor(kBlue); + hSOIAmplitudesEEGPU->SetLineWidth(1.); + hSOIAmplitudesEEGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats *)hSOIAmplitudesEEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + + c.cd(2); + gPad->SetGrid(); + hSOIAmplitudesEBGPUvsCPU->Draw("COLZ"); + + c.cd(5); + gPad->SetGrid(); + hSOIAmplitudesEEGPUvsCPU->Draw("COLZ"); + + c.cd(3); + + hSOIAmplitudesEBGPUCPUratio->Draw(""); + + c.cd(6); + + hSOIAmplitudesEEGPUCPUratio->Draw(""); + + c.SaveAs("ecal-amplitudes.root"); + c.SaveAs("ecal-amplitudes.png"); + + // chi2 + + c.cd(1); + { + gPad->SetLogy(); + hChi2EBCPU->SetLineColor(kBlack); + hChi2EBCPU->SetLineWidth(1.); + hChi2EBCPU->Draw(""); + hChi2EBGPU->SetLineColor(kBlue); + hChi2EBGPU->SetLineWidth(1.); + hChi2EBGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats *)hChi2EBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + + c.cd(4); + { + gPad->SetLogy(); + hChi2EECPU->SetLineColor(kBlack); + hChi2EECPU->SetLineWidth(1.); + hChi2EECPU->Draw(""); + hChi2EEGPU->SetLineColor(kBlue); + hChi2EEGPU->SetLineWidth(1.); + hChi2EEGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats *)hChi2EEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + + c.cd(2); + gPad->SetGrid(); + hChi2EBGPUvsCPU->Draw("COLZ"); + + c.cd(5); + gPad->SetGrid(); + hChi2EEGPUvsCPU->Draw("COLZ"); + + c.cd(3); + + hChi2EBGPUCPUratio->Draw(""); + + c.cd(6); + + hChi2EEGPUCPUratio->Draw(""); + + c.SaveAs("ecal-chi2.root"); + c.SaveAs("ecal-chi2.png"); + + // flags + + c.cd(1); + { + gPad->SetLogy(); + hFlagsEBCPU->SetLineColor(kBlack); + hFlagsEBCPU->SetLineWidth(1.); + hFlagsEBCPU->Draw(""); + hFlagsEBGPU->SetLineColor(kBlue); + hFlagsEBGPU->SetLineWidth(1.); + hFlagsEBGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats *)hFlagsEBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + + c.cd(4); + { + gPad->SetLogy(); + hFlagsEECPU->SetLineColor(kBlack); + hFlagsEECPU->SetLineWidth(1.); + hFlagsEECPU->Draw(""); + hFlagsEEGPU->SetLineColor(kBlue); + hFlagsEEGPU->SetLineWidth(1.); + hFlagsEEGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats *)hFlagsEEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + + c.cd(2); + gPad->SetGrid(); + hFlagsEBGPUvsCPU->Draw("COLZ"); + + c.cd(5); + gPad->SetGrid(); + hFlagsEEGPUvsCPU->Draw("COLZ"); + + c.cd(3); + hFlagsEBGPUCPUratio->Draw(""); + + c.cd(6); + hFlagsEEGPUCPUratio->Draw(""); + + c.SaveAs("ecal-flags.root"); + c.SaveAs("ecal-flags.png"); + + TCanvas cRechits("Rechits", "Rechits", 1750, 860); + cRechits.Divide(3, 2); + + // Plotting the sizes of GPU vs CPU for each event of EB + cRechits.cd(1); + { + gPad->SetLogy(); + hRechitsEBCPU->SetLineColor(kRed); + hRechitsEBCPU->SetLineWidth(2); + hRechitsEBCPU->Draw(""); + hRechitsEBGPU->SetLineColor(kBlue); + hRechitsEBGPU->SetLineWidth(2); + hRechitsEBGPU->Draw("sames"); + cRechits.Update(); + auto stats = (TPaveStats *)hRechitsEBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cRechits.cd(4); + { + gPad->SetLogy(); + hRechitsEECPU->SetLineColor(kRed); + hRechitsEECPU->SetLineWidth(2); + hRechitsEECPU->Draw(""); + hRechitsEEGPU->SetLineColor(kBlue); + hRechitsEEGPU->SetLineWidth(2); + hRechitsEEGPU->Draw("sames"); + cRechits.Update(); + auto stats = (TPaveStats *)hRechitsEEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cRechits.cd(2); + { hRechitsEBGPUvsCPU->Draw("COLZ"); } + cRechits.cd(5); + { hRechitsEEGPUvsCPU->Draw("COLZ"); } + cRechits.cd(3); + { + gPad->SetLogy(); + hRechitsEBGPUCPUratio->Draw(""); + } + cRechits.cd(6); + { + gPad->SetLogy(); + hRechitsEEGPUCPUratio->Draw(""); + } + cRechits.SaveAs("ecal-rechits.root"); + cRechits.SaveAs("ecal-rechits.png"); + } + + rf.Close(); + rfout.Write(); + rfout.Close(); + + return 0; +} diff --git a/RecoLocalCalo/EcalRecAlgos/bin/makeEcalRechitValidationPlots.cpp b/RecoLocalCalo/EcalRecAlgos/bin/makeEcalRechitValidationPlots.cpp new file mode 100644 index 0000000000000..42d1fceaf8b76 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/bin/makeEcalRechitValidationPlots.cpp @@ -0,0 +1,864 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "DataFormats/Common/interface/Wrapper.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHit.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalRecHit.h" + +int main(int argc, char *argv[]) { + if (argc < 3) { + std::cout << "run with: ./makeEcalRechitValidationPlots \n"; + exit(0); + } + // Set the GPU and CPU pointers for both EB and EE + edm::Wrapper>> *wgpuEB = nullptr; + edm::Wrapper>> *wgpuEE = nullptr; + edm::Wrapper *wcpuEB = nullptr; + edm::Wrapper *wcpuEE = nullptr; + + std::string fileName = argv[1]; // The input file containing the data to be validated (i.e. result.root) + std::string outFileName = argv[2]; //The output file in which the validation results will be saved (i.e. output.root) + + //output + TFile rfout{outFileName.c_str(), "recreate"}; + + int nbins = 200; + int last = 5000.; + + int nbins_energy = 300; + float last_energy = 2.; + + int nbins_chi2 = 200; + float last_chi2 = 100.; + + int nbins_flag = 40; + // int nbins_flag = 1000; + int last_flag = 1500; + // int nbins_flag = 40; + // int last_flag = 10000; + + int nbins_extra = 200; + int last_extra = 200; + + int nbins_delta = 201; // use an odd number to center around 0 + float delta = 0.2; + + // RecHits plots for EB and EE on both GPU and CPU + auto hRechitsEBGPU = new TH1D("RechitsEBGPU", "RechitsEBGPU; No. of Rechits. No Filter GPU", nbins, 0, last); + auto hRechitsEBCPU = new TH1D("RechitsEBCPU", "RechitsEBCPU; No. of Rechits. No Filter GPU", nbins, 0, last); + auto hRechitsEEGPU = new TH1D("RechitsEEGPU", "RechitsEEGPU; No. of Rechits. No Filter GPU", nbins, 0, last); + auto hRechitsEECPU = new TH1D("RechitsEECPU", "RechitsEECPU; No. of Rechits. No Filter GPU", nbins, 0, last); + auto hRechitsEBGPUvsCPU = + new TH2D("RechitsEBGPUvsCPU", "RechitsEBGPUvsCPU; CPU; GPU. No Filter GPU", last, 0, last, last, 0, last); + auto hRechitsEEGPUvsCPU = + new TH2D("RechitsEEGPUvsCPU", "RechitsEEGPUvsCPU; CPU; GPU. No Filter GPU", last, 0, last, last, 0, last); + auto hRechitsEBGPUCPUratio = + new TH1D("RechitsEBGPU/CPUratio", "RechitsEBGPU/CPUratio; GPU/CPU. No Filter GPU", 200, 0.95, 1.05); + auto hRechitsEEGPUCPUratio = + new TH1D("RechitsEEGPU/CPUratio", "RechitsEEGPU/CPUratio; GPU/CPU. No Filter GPU", 200, 0.95, 1.05); + auto hRechitsEBdeltavsCPU = + new TH2D("RechitsEBdeltavsCPU", "RechitsEBdeltavsCPU. No Filter GPU", nbins, 0, last, nbins_delta, -delta, delta); + auto hRechitsEEdeltavsCPU = + new TH2D("RechitsEEdeltavsCPU", "RechitsEEdeltavsCPU. No Filter GPU", nbins, 0, last, nbins_delta, -delta, delta); + + // RecHits plots for EB and EE on both GPU and CPU + auto hSelectedRechitsEBGPU = new TH1D("RechitsEBGPU", "RechitsEBGPU; No. of Rechits", nbins, 0, last); + auto hSelectedRechitsEBCPU = new TH1D("RechitsEBCPU", "RechitsEBCPU; No. of Rechits", nbins, 0, last); + auto hSelectedRechitsEEGPU = new TH1D("RechitsEEGPU", "RechitsEEGPU; No. of Rechits", nbins, 0, last); + auto hSelectedRechitsEECPU = new TH1D("RechitsEECPU", "RechitsEECPU; No. of Rechits", nbins, 0, last); + auto hSelectedRechitsEBGPUvsCPU = + new TH2D("RechitsEBGPUvsCPU", "RechitsEBGPUvsCPU; CPU; GPU", last, 0, last, last, 0, last); + auto hSelectedRechitsEEGPUvsCPU = + new TH2D("RechitsEEGPUvsCPU", "RechitsEEGPUvsCPU; CPU; GPU", last, 0, last, last, 0, last); + auto hSelectedRechitsEBGPUCPUratio = + new TH1D("RechitsEBGPU/CPUratio", "RechitsEBGPU/CPUratio; GPU/CPU", 200, 0.95, 1.05); + auto hSelectedRechitsEEGPUCPUratio = + new TH1D("RechitsEEGPU/CPUratio", "RechitsEEGPU/CPUratio; GPU/CPU", 200, 0.95, 1.05); + auto hSelectedRechitsEBdeltavsCPU = + new TH2D("RechitsEBdeltavsCPU", "RechitsEBdeltavsCPU", nbins, 0, last, nbins_delta, -delta, delta); + auto hSelectedRechitsEEdeltavsCPU = + new TH2D("RechitsEEdeltavsCPU", "RechitsEEdeltavsCPU", nbins, 0, last, nbins_delta, -delta, delta); + + // RecHits plots for EB and EE on both GPU and CPU + auto hPositiveRechitsEBGPU = new TH1D("RechitsEBGPU", "RechitsEBGPU; No. of Rechits", nbins, 0, last); + auto hPositiveRechitsEBCPU = new TH1D("RechitsEBCPU", "RechitsEBCPU; No. of Rechits", nbins, 0, last); + auto hPositiveRechitsEEGPU = new TH1D("RechitsEEGPU", "RechitsEEGPU; No. of Rechits", nbins, 0, last); + auto hPositiveRechitsEECPU = new TH1D("RechitsEECPU", "RechitsEECPU; No. of Rechits", nbins, 0, last); + auto hPositiveRechitsEBGPUvsCPU = + new TH2D("RechitsEBGPUvsCPU", "RechitsEBGPUvsCPU; CPU; GPU", last, 0, last, last, 0, last); + auto hPositiveRechitsEEGPUvsCPU = + new TH2D("RechitsEEGPUvsCPU", "RechitsEEGPUvsCPU; CPU; GPU", last, 0, last, last, 0, last); + auto hPositiveRechitsEBGPUCPUratio = + new TH1D("RechitsEBGPU/CPUratio", "RechitsEBGPU/CPUratio; GPU/CPU", 200, 0.95, 1.05); + auto hPositiveRechitsEEGPUCPUratio = + new TH1D("RechitsEEGPU/CPUratio", "RechitsEEGPU/CPUratio; GPU/CPU", 200, 0.95, 1.05); + auto hPositiveRechitsEBdeltavsCPU = + new TH2D("RechitsEBdeltavsCPU", "RechitsEBdeltavsCPU", nbins, 0, last, nbins_delta, -delta, delta); + auto hPositiveRechitsEEdeltavsCPU = + new TH2D("RechitsEEdeltavsCPU", "RechitsEEdeltavsCPU", nbins, 0, last, nbins_delta, -delta, delta); + + // Energies plots for EB and EE on both GPU and CPU + auto hEnergiesEBGPU = new TH1D("EnergiesEBGPU", "EnergiesEBGPU; Energy [GeV]", nbins_energy, 0, last_energy); + auto hEnergiesEEGPU = new TH1D("EnergiesEEGPU", "EnergiesEEGPU; Energy [GeV]", nbins_energy, 0, last_energy); + auto hEnergiesEBCPU = new TH1D("EnergiesEBCPU", "EnergiesEBCPU; Energy [GeV]", nbins_energy, 0, last_energy); + auto hEnergiesEECPU = new TH1D("EnergiesEECPU", "EnergiesEECPU; Energy [GeV]", nbins_energy, 0, last_energy); + auto hEnergiesEBGPUvsCPU = new TH2D( + "EnergiesEBGPUvsCPU", "EnergiesEBGPUvsCPU; CPU; GPU", nbins_energy, 0, last_energy, nbins_energy, 0, last_energy); + auto hEnergiesEEGPUvsCPU = new TH2D( + "EnergiesEEGPUvsCPU", "EnergiesEEGPUvsCPU; CPU; GPU", nbins_energy, 0, last_energy, nbins_energy, 0, last_energy); + auto hEnergiesEBGPUCPUratio = new TH1D("EnergiesEBGPU/CPUratio", "EnergiesEBGPU/CPUratio; GPU/CPU", 100, 0.8, 1.2); + auto hEnergiesEEGPUCPUratio = new TH1D("EnergiesEEGPU/CPUratio", "EnergiesEEGPU/CPUratio; GPU/CPU", 100, 0.8, 1.2); + auto hEnergiesEBdeltavsCPU = + new TH2D("EnergiesEBdeltavsCPU", "EnergiesEBdeltavsCPU", nbins, 0, last, nbins_delta, -delta, delta); + auto hEnergiesEEdeltavsCPU = + new TH2D("EnergiesEEdeltavsCPU", "EnergiesEEdeltavsCPU", nbins, 0, last, nbins_delta, -delta, delta); + + // Chi2 plots for EB and EE on both GPU and CPU + auto hChi2EBGPU = new TH1D("Chi2EBGPU", "Chi2EBGPU; Ch^{2}", nbins_chi2, 0, last_chi2); + auto hChi2EEGPU = new TH1D("Chi2EEGPU", "Chi2EEGPU; Ch^{2}", nbins_chi2, 0, last_chi2); + auto hChi2EBCPU = new TH1D("Chi2EBCPU", "Chi2EBCPU; Ch^{2}", nbins_chi2, 0, last_chi2); + auto hChi2EECPU = new TH1D("Chi2EECPU", "Chi2EECPU; Ch^{2}", nbins_chi2, 0, last_chi2); + auto hChi2EBGPUvsCPU = new TH2D("Chi2EBGPUvsCPU", "Chi2EBGPUvsCPU; CPU; GPU", nbins_chi2, 0, 100, nbins_chi2, 0, 100); + auto hChi2EEGPUvsCPU = new TH2D("Chi2EEGPUvsCPU", "Chi2EEGPUvsCPU; CPU; GPU", nbins_chi2, 0, 100, nbins_chi2, 0, 100); + auto hChi2EBGPUCPUratio = new TH1D("Chi2EBGPU/CPUratio", "Chi2EBGPU/CPUratio; GPU/CPU", 100, 0.8, 1.2); + auto hChi2EEGPUCPUratio = new TH1D("Chi2EEGPU/CPUratio", "Chi2EEGPU/CPUratio; GPU/CPU", 100, 0.8, 1.2); + auto hChi2EBdeltavsCPU = + new TH2D("Chi2EBdeltavsCPU", "Chi2EBdeltavsCPU", nbins_chi2, 0, last_chi2, nbins_delta, -delta, delta); + auto hChi2EEdeltavsCPU = + new TH2D("Chi2EEdeltavsCPU", "Chi2EEdeltavsCPU", nbins_chi2, 0, last_chi2, nbins_delta, -delta, delta); + + // Flags plots for EB and EE on both GPU and CPU + auto hFlagsEBGPU = new TH1D("FlagsEBGPU", "FlagsEBGPU; Flags", nbins_flag, -10, last_flag); + auto hFlagsEBCPU = new TH1D("FlagsEBCPU", "FlagsEBCPU; Flags", nbins_flag, -10, last_flag); + auto hFlagsEEGPU = new TH1D("FlagsEEGPU", "FlagsEEGPU; Flags", nbins_flag, -10, last_flag); + auto hFlagsEECPU = new TH1D("FlagsEECPU", "FlagsEECPU; Flags", nbins_flag, -10, last_flag); + auto hFlagsEBGPUvsCPU = + new TH2D("FlagsEBGPUvsCPU", "FlagsEBGPUvsCPU; CPU; GPU", nbins_flag, -10, last_flag, nbins_flag, -10, last_flag); + auto hFlagsEEGPUvsCPU = + new TH2D("FlagsEEGPUvsCPU", "FlagsEEGPUvsCPU; CPU; GPU", nbins_flag, -10, last_flag, nbins_flag, -10, last_flag); + auto hFlagsEBGPUCPUratio = new TH1D("FlagsEBGPU/CPUratio", "FlagsEBGPU/CPUratio; GPU/CPU", 50, -5, 10); + auto hFlagsEEGPUCPUratio = new TH1D("FlagsEEGPU/CPUratio", "FlagsEEGPU/CPUratio; GPU/CPU", 50, -5, 10); + auto hFlagsEBdeltavsCPU = + new TH2D("FlagsEBdeltavsCPU", "FlagsEBdeltavsCPU", nbins_flag, -10, last_flag, nbins_delta, -delta, delta); + auto hFlagsEEdeltavsCPU = + new TH2D("FlagsEEdeltavsCPU", "FlagsEEdeltavsCPU", nbins_flag, -10, last_flag, nbins_delta, -delta, delta); + + // Extras plots for EB and EE on both GPU and CPU + auto hExtrasEBGPU = new TH1D("ExtrasEBGPU", "ExtrasEBGPU; No. of Extras", nbins_extra, 0, last_extra); + auto hExtrasEBCPU = new TH1D("ExtrasEBCPU", "ExtrasEBCPU; No. of Extras", nbins_extra, 0, last_extra); + auto hExtrasEEGPU = new TH1D("ExtrasEEGPU", "ExtrasEEGPU; No. of Extras", nbins_extra, 0, last_extra); + auto hExtrasEECPU = new TH1D("ExtrasEECPU", "ExtrasEECPU; No. of Extras", nbins_extra, 0, last_extra); + auto hExtrasEBGPUvsCPU = new TH2D( + "ExtrasEBGPUvsCPU", "ExtrasEBGPUvsCPU; CPU; GPU", nbins_extra, 0, last_extra, nbins_extra, 0, last_extra); + auto hExtrasEEGPUvsCPU = new TH2D( + "ExtrasEEGPUvsCPU", "ExtrasEEGPUvsCPU; CPU; GPU", nbins_extra, 0, last_extra, nbins_extra, 0, last_extra); + auto hExtrasEBGPUCPUratio = new TH1D("ExtrasEBGPU/CPUratio", "ExtrasEBGPU/CPUratio; GPU/CPU", 50, 0.0, 2.0); + auto hExtrasEEGPUCPUratio = new TH1D("ExtrasEEGPU/CPUratio", "ExtrasEEGPU/CPUratio; GPU/CPU", 50, 0.0, 2.0); + auto hExtrasEBdeltavsCPU = + new TH2D("ExtrasEBdeltavsCPU", "ExtrasEBdeltavsCPU", nbins_extra, 0, last_extra, nbins_delta, -delta, delta); + auto hExtrasEEdeltavsCPU = + new TH2D("ExtrasEEdeltavsCPU", "ExtrasEEdeltavsCPU", nbins_extra, 0, last_extra, nbins_delta, -delta, delta); + + // input file setup for tree + std::cout << "validating file " << fileName << std::endl; + TFile rf{fileName.c_str()}; + TTree *rt = (TTree *)rf.Get("Events"); + + // Allocating the appropriate data to their respective pointers + rt->SetBranchAddress("ecalTagsoaecalRecHit_ecalCPURecHitProducer_EcalRecHitsEB_RECO.", &wgpuEB); + rt->SetBranchAddress("ecalTagsoaecalRecHit_ecalCPURecHitProducer_EcalRecHitsEE_RECO.", &wgpuEE); + rt->SetBranchAddress("EcalRecHitsSorted_ecalRecHit_EcalRecHitsEB_RECO.", &wcpuEB); + rt->SetBranchAddress("EcalRecHitsSorted_ecalRecHit_EcalRecHitsEE_RECO.", &wcpuEE); + + // constexpr float eps_diff = 1e-3; + + // accumulate sizes for events and sizes of each event on both GPU and CPU + // auto const nentries = rt->GetEntries(); + int nentries = rt->GetEntries(); + + //---- AM: tests + if (nentries > 1000) { + nentries = 1000; + } + // nentries = 1; + + std::cout << "#events to validate over: " << nentries << std::endl; + for (int ie = 0; ie < nentries; ++ie) { + rt->GetEntry(ie); + + // const char* ordinal[] = { "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th" }; + auto cpu_eb_size = wcpuEB->bareProduct().size(); + auto cpu_ee_size = wcpuEE->bareProduct().size(); + auto gpu_eb_size = wgpuEB->bareProduct().energy.size(); + auto gpu_ee_size = wgpuEE->bareProduct().energy.size(); + float eb_ratio = (float)gpu_eb_size / cpu_eb_size; + float ee_ratio = (float)gpu_ee_size / cpu_ee_size; + + // Filling up the histograms on events sizes for EB and EE on both GPU and CPU + hRechitsEBGPU->Fill(gpu_eb_size); + hRechitsEBCPU->Fill(cpu_eb_size); + hRechitsEEGPU->Fill(gpu_ee_size); + hRechitsEECPU->Fill(cpu_ee_size); + hRechitsEBGPUvsCPU->Fill(cpu_eb_size, gpu_eb_size); + hRechitsEEGPUvsCPU->Fill(cpu_ee_size, gpu_ee_size); + hRechitsEBGPUCPUratio->Fill(eb_ratio); + hRechitsEEGPUCPUratio->Fill(ee_ratio); + hRechitsEBdeltavsCPU->Fill(cpu_eb_size, gpu_eb_size - cpu_eb_size); + hRechitsEEdeltavsCPU->Fill(cpu_ee_size, gpu_ee_size - cpu_ee_size); + + /* + * // condition that sizes on GPU and CPU should be the same for EB or EE + * if (cpu_eb_size != gpu_eb_size or cpu_ee_size != gpu_ee_size) { + * std::cerr << ie << ordinal[ie % 10] << " entry:\n" + * << " EB size: " << std::setw(4) << cpu_eb_size << " (cpu) vs " << std::setw(4) << gpu_eb_size << " (gpu)\n" + * << " EE size: " << std::setw(4) << cpu_ee_size << " (cpu) vs " << std::setw(4) << gpu_ee_size << " (gpu)" << std::endl; + * + * continue; + } + assert(wgpuEB->bareProduct().energy.size() == wcpuEB->bareProduct().size()); + assert(wgpuEE->bareProduct().energy.size() == wcpuEE->bareProduct().size()); + auto const neb = wcpuEB->bareProduct().size(); //like cpu_eb_size but set to constant + auto const nee = wcpuEE->bareProduct().size(); //like cpu_ee_size but set to constant + */ + + uint selected_gpu_eb_size = 0; + uint selected_gpu_ee_size = 0; + + uint positive_gpu_eb_size = 0; + uint positive_gpu_ee_size = 0; + + // EB: + for (uint32_t i = 0; i < gpu_eb_size; ++i) { + auto const did_gpu = wgpuEB->bareProduct().did[i]; // set the did for the current RecHit + // Set the variables for GPU + auto const enr_gpu = wgpuEB->bareProduct().energy[i]; + auto const chi2_gpu = wgpuEB->bareProduct().chi2[i]; + auto const flag_gpu = wgpuEB->bareProduct().flagBits[i]; + auto const extra_gpu = wgpuEB->bareProduct().extra[i]; + + // you have "-1" if the crystal is not selected + if (enr_gpu >= 0) { + selected_gpu_eb_size++; + + if (enr_gpu > 0) { + positive_gpu_eb_size++; + } + + // find the Rechit on CPU reflecting the same did + auto const cpu_iter = wcpuEB->bareProduct().find(DetId{did_gpu}); + if (cpu_iter == wcpuEB->bareProduct().end()) { + // std::cerr << ie << ordinal[ie % 10] << " entry\n" + // << " Did not find a DetId " << did_gpu_eb + // << " in a CPU collection\n"; + std::cerr << " Did not find a DetId " << did_gpu << " in a CPU collection\n"; + continue; + } + // Set the variables for CPU + auto const enr_cpu = cpu_iter->energy(); + auto const chi2_cpu = cpu_iter->chi2(); + // auto const flag_cpu = cpu_iter->flagBits(); + auto const flag_cpu = 1; + // auto const extra_cpu = cpu_iter->extra(); + auto const extra_cpu = 1; + // auto const flag_cpu = cpu_iter->flagBits() ? cpu_iter->flagBits():-1; + // auto const extra_cpu = cpu_iter->extra() ? cpu_iter->extra():-1; + + // AM: TEST + // if (extra_cpu != 10) continue; + + // Fill the energy and Chi2 histograms for GPU and CPU and their comparisons with delta + hEnergiesEBGPU->Fill(enr_gpu); + hEnergiesEBCPU->Fill(enr_cpu); + // std::cout<<"EB CPU Energy:\t"<Fill(enr_cpu, enr_gpu); + hEnergiesEBGPUCPUratio->Fill(enr_gpu / enr_cpu); + hEnergiesEBdeltavsCPU->Fill(enr_cpu, enr_gpu - enr_cpu); + + hChi2EBGPU->Fill(chi2_gpu); + hChi2EBCPU->Fill(chi2_cpu); + hChi2EBGPUvsCPU->Fill(chi2_cpu, chi2_gpu); + hChi2EBGPUCPUratio->Fill(chi2_gpu / chi2_cpu); + hChi2EBdeltavsCPU->Fill(chi2_cpu, chi2_gpu - chi2_cpu); + + hFlagsEBGPU->Fill(flag_gpu); + hFlagsEBCPU->Fill(flag_cpu); + hFlagsEBGPUvsCPU->Fill(flag_cpu, flag_gpu); + hFlagsEBGPUCPUratio->Fill(flag_cpu ? flag_gpu / flag_cpu : -1); + hFlagsEBdeltavsCPU->Fill(flag_cpu, flag_gpu - flag_cpu); + + hExtrasEBGPU->Fill(extra_gpu); + hExtrasEBCPU->Fill(extra_cpu); + hExtrasEBGPUvsCPU->Fill(extra_cpu, extra_gpu); + hExtrasEBGPUCPUratio->Fill(extra_cpu ? extra_gpu / extra_cpu : -1); + hExtrasEBdeltavsCPU->Fill(extra_cpu, extra_gpu - extra_cpu); + + // Check if abs difference between GPU and CPU values for energy and Chi2 are smaller than eps, if not print message + // if ((std::abs(enr_gpu - enr_cpu) >= eps_diff) or + // (std::abs(chi2_gpu - chi2_cpu) >= eps_diff) or std::isnan(chi2_gpu)) + // { + // printf("EB eventid = %d chid = %d energy_gpu = %f energy_cpu %f chi2_gpu = %f chi2_cpu = %f\n", + // ie, i, enr_gpu, enr_cpu, chi2_gpu, chi2_cpu); + // if (std::isnan(chi2_gpu)) + // printf("*** nan ***\n"); + // } + } + } + + // EE: + for (uint32_t i = 0; i < gpu_ee_size; ++i) { + auto const did_gpu = wgpuEE->bareProduct().did[i]; // set the did for the current RecHit + // Set the variables for GPU + auto const enr_gpu = wgpuEE->bareProduct().energy[i]; + auto const chi2_gpu = wgpuEE->bareProduct().chi2[i]; + auto const flag_gpu = wgpuEE->bareProduct().flagBits[i]; + auto const extra_gpu = wgpuEE->bareProduct().extra[i]; + + // you have "-1" if the crystal is not selected + if (enr_gpu >= 0) { + selected_gpu_ee_size++; + + if (enr_gpu > 0) { + positive_gpu_ee_size++; + } + + // find the Rechit on CPU reflecting the same did + auto const cpu_iter = wcpuEE->bareProduct().find(DetId{did_gpu}); + if (cpu_iter == wcpuEE->bareProduct().end()) { + // std::cerr << ie << ordinal[ie % 10] << " entry\n" + // << " Did not find a DetId " << did_gpu + // << " in a CPU collection\n"; + std::cerr << " Did not find a DetId " << did_gpu << " in a CPU collection\n"; + continue; + } + // Set the variables for CPU + auto const enr_cpu = cpu_iter->energy(); + auto const chi2_cpu = cpu_iter->chi2(); + // auto const flag_cpu = cpu_iter->flagBits(); + auto const flag_cpu = 1; + // auto const extra_cpu = cpu_iter->extra(); + auto const extra_cpu = 1; + // auto const flag_cpu = cpu_iter->flagBits()?cpu_iter->flagBits():-1; + // auto const extra_cpu = cpu_iter->extra()?cpu_iter->extra():-1; + + // AM: TEST + // if (extra_cpu != 10) continue; + + // Fill the energy and Chi2 histograms for GPU and CPU and their comparisons with delta + hEnergiesEEGPU->Fill(enr_gpu); + hEnergiesEECPU->Fill(enr_cpu); + hEnergiesEEGPUvsCPU->Fill(enr_cpu, enr_gpu); + hEnergiesEEGPUCPUratio->Fill(enr_gpu / enr_cpu); + hEnergiesEEdeltavsCPU->Fill(enr_cpu, enr_gpu - enr_cpu); + + hChi2EEGPU->Fill(chi2_gpu); + hChi2EECPU->Fill(chi2_cpu); + hChi2EEGPUvsCPU->Fill(chi2_cpu, chi2_gpu); + hChi2EEGPUCPUratio->Fill(chi2_gpu / chi2_cpu); + hChi2EEdeltavsCPU->Fill(chi2_cpu, chi2_gpu - chi2_cpu); + + hFlagsEEGPU->Fill(flag_gpu); + hFlagsEECPU->Fill(flag_cpu); + hFlagsEEGPUvsCPU->Fill(flag_cpu, flag_gpu); + hFlagsEEGPUCPUratio->Fill(flag_cpu ? flag_gpu / flag_cpu : -1); + hFlagsEEdeltavsCPU->Fill(flag_cpu, flag_gpu - flag_cpu); + + hExtrasEEGPU->Fill(extra_gpu); + hExtrasEECPU->Fill(extra_cpu); + hExtrasEEGPUvsCPU->Fill(extra_cpu, extra_gpu); + hExtrasEEGPUCPUratio->Fill(extra_cpu ? extra_gpu / extra_cpu : -1); + hExtrasEEdeltavsCPU->Fill(extra_cpu, extra_gpu - extra_cpu); + + // Check if abs difference between GPU and CPU values for energy and Chi2 are smaller than eps, if not print message + // if ((std::abs(enr_gpu - enr_cpu) >= eps_diff) or + // (std::abs(chi2_gpu - chi2_cpu) >= eps_diff) or std::isnan(chi2_gpu)) + // { + // printf("EE eventid = %d chid = %d energy_gpu = %f energy_cpu %f chi2_gpu = %f chi2_cpu = %f\n", + // ie, i, enr_gpu, enr_cpu, chi2_gpu, chi2_cpu); + // if (std::isnan(chi2_gpu)) + // printf("*** nan ***\n"); + // } + } + } + + // + // now the rechit counting + // + float selected_eb_ratio = (float)selected_gpu_eb_size / cpu_eb_size; + float selected_ee_ratio = (float)selected_gpu_ee_size / cpu_ee_size; + + // Filling up the histograms on events sizes for EB and EE on both GPU and CPU + hSelectedRechitsEBGPU->Fill(selected_gpu_eb_size); + hSelectedRechitsEBCPU->Fill(cpu_eb_size); + hSelectedRechitsEEGPU->Fill(selected_gpu_ee_size); + hSelectedRechitsEECPU->Fill(cpu_ee_size); + hSelectedRechitsEBGPUvsCPU->Fill(cpu_eb_size, selected_gpu_eb_size); + hSelectedRechitsEEGPUvsCPU->Fill(cpu_ee_size, selected_gpu_ee_size); + hSelectedRechitsEBGPUCPUratio->Fill(selected_eb_ratio); + hSelectedRechitsEEGPUCPUratio->Fill(selected_ee_ratio); + hSelectedRechitsEBdeltavsCPU->Fill(cpu_eb_size, selected_gpu_eb_size - cpu_eb_size); + hSelectedRechitsEEdeltavsCPU->Fill(cpu_ee_size, selected_gpu_ee_size - cpu_ee_size); + + // + // now the rechit counting + // + + uint positive_cpu_eb_size = 0; + uint positive_cpu_ee_size = 0; + + // EB: + for (uint32_t i = 0; i < cpu_eb_size; ++i) { + auto const enr_cpu = wcpuEB->bareProduct()[i].energy(); + if (enr_cpu > 0) { + positive_cpu_eb_size++; + } + } + // EE: + for (uint32_t i = 0; i < cpu_ee_size; ++i) { + auto const enr_cpu = wcpuEE->bareProduct()[i].energy(); + if (enr_cpu > 0) { + positive_cpu_ee_size++; + } + } + + float positive_eb_ratio = (float)positive_gpu_eb_size / positive_cpu_eb_size; + float positive_ee_ratio = (float)positive_gpu_ee_size / positive_cpu_ee_size; + + // Filling up the histograms on events sizes for EB and EE on both GPU and CPU + hPositiveRechitsEBGPU->Fill(positive_gpu_eb_size); + hPositiveRechitsEBCPU->Fill(positive_cpu_eb_size); + hPositiveRechitsEEGPU->Fill(positive_gpu_ee_size); + hPositiveRechitsEECPU->Fill(positive_cpu_ee_size); + hPositiveRechitsEBGPUvsCPU->Fill(positive_cpu_eb_size, positive_gpu_eb_size); + hPositiveRechitsEEGPUvsCPU->Fill(positive_cpu_ee_size, positive_gpu_ee_size); + hPositiveRechitsEBGPUCPUratio->Fill(positive_eb_ratio); + hPositiveRechitsEEGPUCPUratio->Fill(positive_ee_ratio); + hPositiveRechitsEBdeltavsCPU->Fill(positive_cpu_eb_size, positive_gpu_eb_size - positive_cpu_eb_size); + hPositiveRechitsEEdeltavsCPU->Fill(positive_cpu_ee_size, positive_gpu_ee_size - positive_cpu_ee_size); + + if (cpu_eb_size != selected_gpu_eb_size or cpu_ee_size != selected_gpu_ee_size) { + // std::cerr << ie << ordinal[ie % 10] << " entry:\n" + std::cerr << ie << " entry:\n" + << " EB size: " << std::setw(4) << cpu_eb_size << " (cpu) vs " << std::setw(4) << selected_gpu_eb_size + << " (gpu)\n" + << " EE size: " << std::setw(4) << cpu_ee_size << " (cpu) vs " << std::setw(4) << selected_gpu_ee_size + << " (gpu)" << std::endl; + } + } + + // Plotting the results: + { + // Canvases Setup: + TCanvas cAllRechits("AllRechits", "AllRechits", 1750, 860); + cAllRechits.Divide(3, 2); + TCanvas cRechits("Rechits", "Rechits", 1750, 860); + cRechits.Divide(3, 2); + TCanvas cRechitsPositive("RechitsPositive", "RechitsPositive", 1750, 860); + cRechitsPositive.Divide(3, 2); + TCanvas cEnergies("Energies", "Energies", 1750, 860); + cEnergies.Divide(3, 2); + TCanvas cChi2("Chi2", "Chi2", 1750, 860); + cChi2.Divide(3, 2); + TCanvas cFlags("Flags", "Flags", 1750, 860); + cFlags.Divide(3, 2); + TCanvas cExtras("Extras", "Extras", 1750, 860); + cExtras.Divide(3, 2); + + // Plotting the sizes of GPU vs CPU for each event of EB + cAllRechits.cd(1); + { + gPad->SetLogy(); + hRechitsEBCPU->SetLineColor(kRed); + hRechitsEBCPU->SetLineWidth(2); + hRechitsEBCPU->Draw(""); + hRechitsEBGPU->SetLineColor(kBlue); + hRechitsEBGPU->SetLineWidth(2); + hRechitsEBGPU->Draw("sames"); + cAllRechits.Update(); + auto stats = (TPaveStats *)hRechitsEBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cAllRechits.cd(4); + { + gPad->SetLogy(); + hRechitsEECPU->SetLineColor(kRed); + hRechitsEECPU->SetLineWidth(2); + hRechitsEECPU->Draw(""); + hRechitsEEGPU->SetLineColor(kBlue); + hRechitsEEGPU->SetLineWidth(2); + hRechitsEEGPU->Draw("sames"); + cAllRechits.Update(); + auto stats = (TPaveStats *)hRechitsEEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cAllRechits.cd(2); + { + gStyle->SetPalette(55); + hRechitsEBGPUvsCPU->Draw("COLZ"); + } + cAllRechits.cd(5); + { + gStyle->SetPalette(55); + hRechitsEEGPUvsCPU->Draw("COLZ"); + } + cAllRechits.cd(3); + { + gPad->SetLogy(); + //hRechitsEBdeltavsCPU->Draw("COLZ"); + hRechitsEBGPUCPUratio->Draw(""); + } + cAllRechits.cd(6); + { + gPad->SetLogy(); + //hRechitsEEdeltavsCPU->Draw("COLZ"); + hRechitsEEGPUCPUratio->Draw(""); + } + cAllRechits.SaveAs("ecal-allrechits.root"); + cAllRechits.SaveAs("ecal-allrechits.png"); + + // Plotting the sizes of GPU vs CPU for each event of EB + cRechits.cd(1); + { + gPad->SetLogy(); + hSelectedRechitsEBCPU->SetLineColor(kRed); + hSelectedRechitsEBCPU->SetLineWidth(2); + hSelectedRechitsEBCPU->Draw(""); + hSelectedRechitsEBGPU->SetLineColor(kBlue); + hSelectedRechitsEBGPU->SetLineWidth(2); + hSelectedRechitsEBGPU->Draw("sames"); + cRechits.Update(); + auto stats = (TPaveStats *)hSelectedRechitsEBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cRechits.cd(4); + { + gPad->SetLogy(); + hSelectedRechitsEECPU->SetLineColor(kRed); + hSelectedRechitsEECPU->SetLineWidth(2); + hSelectedRechitsEECPU->Draw(""); + hSelectedRechitsEEGPU->SetLineColor(kBlue); + hSelectedRechitsEEGPU->SetLineWidth(2); + hSelectedRechitsEEGPU->Draw("sames"); + cRechits.Update(); + auto stats = (TPaveStats *)hSelectedRechitsEEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cRechits.cd(2); + { + gStyle->SetPalette(55); + hSelectedRechitsEBGPUvsCPU->Draw("COLZ"); + } + cRechits.cd(5); + { + gStyle->SetPalette(55); + hSelectedRechitsEEGPUvsCPU->Draw("COLZ"); + } + cRechits.cd(3); + { + gPad->SetLogy(); + //hSelectedRechitsEBdeltavsCPU->Draw("COLZ"); + hSelectedRechitsEBGPUCPUratio->Draw(""); + } + cRechits.cd(6); + { + gPad->SetLogy(); + //hSelectedRechitsEEdeltavsCPU->Draw("COLZ"); + hSelectedRechitsEEGPUCPUratio->Draw(""); + } + cRechits.SaveAs("ecal-rechits.root"); + cRechits.SaveAs("ecal-rechits.png"); + + // Plotting the sizes of GPU vs CPU for each event of EB + cRechitsPositive.cd(1); + { + gPad->SetLogy(); + hPositiveRechitsEBCPU->SetLineColor(kRed); + hPositiveRechitsEBCPU->SetLineWidth(2); + hPositiveRechitsEBCPU->Draw(""); + hPositiveRechitsEBGPU->SetLineColor(kBlue); + hPositiveRechitsEBGPU->SetLineWidth(2); + hPositiveRechitsEBGPU->Draw("sames"); + cRechitsPositive.Update(); + auto stats = (TPaveStats *)hPositiveRechitsEBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cRechitsPositive.cd(4); + { + gPad->SetLogy(); + hPositiveRechitsEECPU->SetLineColor(kRed); + hPositiveRechitsEECPU->SetLineWidth(2); + hPositiveRechitsEECPU->Draw(""); + hPositiveRechitsEEGPU->SetLineColor(kBlue); + hPositiveRechitsEEGPU->SetLineWidth(2); + hPositiveRechitsEEGPU->Draw("sames"); + cRechitsPositive.Update(); + auto stats = (TPaveStats *)hPositiveRechitsEEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cRechitsPositive.cd(2); + { + gStyle->SetPalette(55); + hPositiveRechitsEBGPUvsCPU->Draw("COLZ"); + } + cRechitsPositive.cd(5); + { + gStyle->SetPalette(55); + hPositiveRechitsEEGPUvsCPU->Draw("COLZ"); + } + cRechitsPositive.cd(3); + { + gPad->SetLogy(); + //hPositiveRechitsEBdeltavsCPU->Draw("COLZ"); + hPositiveRechitsEBGPUCPUratio->Draw(""); + } + cRechitsPositive.cd(6); + { + gPad->SetLogy(); + //hPositiveRechitsEEdeltavsCPU->Draw("COLZ"); + hPositiveRechitsEEGPUCPUratio->Draw(""); + } + cRechitsPositive.SaveAs("ecal-rechits-positive.root"); + cRechitsPositive.SaveAs("ecal-rechits-positive.png"); + + cEnergies.cd(1); + { + gPad->SetLogy(); + hEnergiesEBCPU->SetLineColor(kBlack); + hEnergiesEBCPU->SetLineWidth(2); + hEnergiesEBCPU->Draw(""); + hEnergiesEBGPU->SetLineColor(kBlue); + hEnergiesEBGPU->SetLineWidth(2); + hEnergiesEBGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats *)hEnergiesEBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cEnergies.cd(4); + { + gPad->SetLogy(); + hEnergiesEECPU->SetLineColor(kBlack); + hEnergiesEECPU->SetLineWidth(2); + hEnergiesEECPU->Draw(""); + hEnergiesEEGPU->SetLineColor(kBlue); + hEnergiesEEGPU->SetLineWidth(2); + hEnergiesEEGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats *)hEnergiesEEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cEnergies.cd(2); + { hEnergiesEBGPUvsCPU->Draw("COLZ"); } + cEnergies.cd(5); + { hEnergiesEEGPUvsCPU->Draw("COLZ"); } + cEnergies.cd(3); + { + gPad->SetLogy(); + //hEnergiesEBdeltavsCPU->Draw("COLZ"); + hEnergiesEBGPUCPUratio->Draw(""); + } + cEnergies.cd(6); + { + gPad->SetLogy(); + //hEnergiesEEdeltavsCPU->Draw("COLZ"); + hEnergiesEEGPUCPUratio->Draw(""); + } + cEnergies.SaveAs("ecal-energies.root"); + cEnergies.SaveAs("ecal-energies.png"); + + cChi2.cd(1); + { + gPad->SetLogy(); + hChi2EBCPU->SetLineColor(kBlack); + hChi2EBCPU->SetLineWidth(2); + hChi2EBCPU->Draw(""); + hChi2EBGPU->SetLineColor(kBlue); + hChi2EBGPU->SetLineWidth(2); + hChi2EBGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats *)hChi2EBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cChi2.cd(4); + { + gPad->SetLogy(); + hChi2EECPU->SetLineColor(kBlack); + hChi2EECPU->SetLineWidth(2); + hChi2EECPU->Draw(""); + hChi2EEGPU->SetLineColor(kBlue); + hChi2EEGPU->SetLineWidth(2); + hChi2EEGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats *)hChi2EEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cChi2.cd(2); + { hChi2EBGPUvsCPU->Draw("COLZ"); } + cChi2.cd(5); + { hChi2EEGPUvsCPU->Draw("COLZ"); } + cChi2.cd(3); + { + gPad->SetLogy(); + //hChi2EBdeltavsCPU->Draw("COLZ"); + hChi2EBGPUCPUratio->Draw(""); + } + cChi2.cd(6); + { + gPad->SetLogy(); + //hChi2EEdeltavsCPU->Draw("COLZ"); + hChi2EEGPUCPUratio->Draw(""); + } + cChi2.SaveAs("ecal-chi2.root"); + cChi2.SaveAs("ecal-chi2.png"); + + cFlags.cd(1); + { + gPad->SetLogy(); + hFlagsEBCPU->SetLineColor(kBlack); + hFlagsEBCPU->SetLineWidth(2); + hFlagsEBCPU->Draw(""); + hFlagsEBGPU->SetLineColor(kBlue); + hFlagsEBGPU->SetLineWidth(2); + hFlagsEBGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats *)hFlagsEBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cFlags.cd(4); + { + gPad->SetLogy(); + hFlagsEECPU->SetLineColor(kBlack); + hFlagsEECPU->SetLineWidth(2); + hFlagsEECPU->Draw(""); + hFlagsEEGPU->SetLineColor(kBlue); + hFlagsEEGPU->SetLineWidth(2); + hFlagsEEGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats *)hFlagsEEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cFlags.cd(2); + { hFlagsEBGPUvsCPU->Draw("COLZ"); } + cFlags.cd(5); + { hFlagsEEGPUvsCPU->Draw("COLZ"); } + cFlags.cd(3); + { + gPad->SetLogy(); + //hFlagsEBdeltavsCPU->Draw("COLZ"); + hFlagsEBGPUCPUratio->Draw(""); + } + cFlags.cd(6); + { + gPad->SetLogy(); + //hFlagsEEdeltavsCPU->Draw("COLZ"); + hFlagsEEGPUCPUratio->Draw(""); + } + cFlags.SaveAs("ecal-flags.root"); + cFlags.SaveAs("ecal-flags.png"); + + cExtras.cd(1); + { + gPad->SetLogy(); + hExtrasEBCPU->SetLineColor(kBlack); + hExtrasEBCPU->SetLineWidth(2); + hExtrasEBCPU->Draw(""); + hExtrasEBGPU->SetLineColor(kBlue); + hExtrasEBGPU->SetLineWidth(2); + hExtrasEBGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats *)hExtrasEBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cExtras.cd(4); + { + gPad->SetLogy(); + hExtrasEECPU->SetLineColor(kBlack); + hExtrasEECPU->SetLineWidth(2); + hExtrasEECPU->Draw(""); + hExtrasEEGPU->SetLineColor(kBlue); + hExtrasEEGPU->SetLineWidth(2); + hExtrasEEGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats *)hExtrasEEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + cExtras.cd(2); + { hExtrasEBGPUvsCPU->Draw("COLZ"); } + cExtras.cd(5); + { hExtrasEEGPUvsCPU->Draw("COLZ"); } + cExtras.cd(3); + { + gPad->SetLogy(); + //hExtrasEBdeltavsCPU->Draw("COLZ"); + hExtrasEBGPUCPUratio->Draw(""); + } + cExtras.cd(6); + { + gPad->SetLogy(); + //hExtrasEEdeltavsCPU->Draw("COLZ"); + hExtrasEEGPUCPUratio->Draw(""); + } + cExtras.SaveAs("ecal-extras.root"); + cExtras.SaveAs("ecal-extras.png"); + } + + // Close all open files + rf.Close(); + rfout.Write(); + rfout.Close(); + + return 0; +} diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalGainRatiosGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalGainRatiosGPU.h new file mode 100644 index 0000000000000..a3f65d0b509fc --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalGainRatiosGPU.h @@ -0,0 +1,43 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalGainRatiosGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalGainRatiosGPU_h + +#include "CondFormats/EcalObjects/interface/EcalGainRatios.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalGainRatiosGPU { +public: + struct Product { + ~Product(); + float *gain12Over6 = nullptr, *gain6Over1 = nullptr; + }; + +#ifndef __CUDACC__ + + // rearrange pedestals + EcalGainRatiosGPU(EcalGainRatios const&); + + // will call dealloation for Product thru ~Product + ~EcalGainRatiosGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + + // + static std::string name() { return std::string{"ecalGainRatiosGPU"}; } + +private: + // in the future, we need to arrange so to avoid this copy on the host + // store eb first then ee + std::vector> gain12Over6_; + std::vector> gain6Over1_; + + cms::cuda::ESProduct product_; + +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalGainRatiosGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalIntercalibConstantsGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalIntercalibConstantsGPU.h new file mode 100644 index 0000000000000..4b5401ff0316f --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalIntercalibConstantsGPU.h @@ -0,0 +1,43 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalIntercalibConstantsGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalIntercalibConstantsGPU_h + +#include "CondFormats/EcalObjects/interface/EcalIntercalibConstants.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalIntercalibConstantsGPU { +public: + struct Product { + ~Product(); + float* values = nullptr; + }; + +#ifndef __CUDACC__ + // + EcalIntercalibConstantsGPU(EcalIntercalibConstants const&); + + // will call dealloation for Product thru ~Product + ~EcalIntercalibConstantsGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + + // TODO: do this centrally + // get offset for hashes. equals number of barrel items + uint32_t getOffset() const { return valuesEB_.size(); } + + // + static std::string name() { return std::string{"ecalIntercalibConstantsGPU"}; } + +private: + std::vector const& valuesEB_; + std::vector const& valuesEE_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalIntercalibConstantsGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosGPU.h new file mode 100644 index 0000000000000..4a6cd34fcd171 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosGPU.h @@ -0,0 +1,53 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalLaserAPDPNRatiosGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalLaserAPDPNRatiosGPU_h + +#include "CondFormats/EcalObjects/interface/EcalLaserAPDPNRatios.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalLaserAPDPNRatiosGPU { +public: + struct Product { + ~Product(); + float *p1 = nullptr; + float *p2 = nullptr; + float *p3 = nullptr; + edm::TimeValue_t *t1 = nullptr; + edm::TimeValue_t *t2 = nullptr; + edm::TimeValue_t *t3 = nullptr; + }; + +#ifndef __CUDACC__ + + // + EcalLaserAPDPNRatiosGPU(EcalLaserAPDPNRatios const &); + + // will call dealloation for Product thru ~Product + ~EcalLaserAPDPNRatiosGPU() = default; + + // get device pointers + Product const &getProduct(cudaStream_t) const; + + // + static std::string name() { return std::string{"ecalLaserAPDPNRatiosGPU"}; } + +private: + // in the future, we need to arrange so to avoid this copy on the host + // store eb first then ee + std::vector > p1_; + std::vector > p2_; + std::vector > p3_; + + std::vector > t1_; + std::vector > t2_; + std::vector > t3_; + + cms::cuda::ESProduct product_; + +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalLaserAPDPNRatiosGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosRefGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosRefGPU.h new file mode 100644 index 0000000000000..985bfd9579f7c --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosRefGPU.h @@ -0,0 +1,43 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalLaserAPDPNRatiosRefGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalLaserAPDPNRatiosRefGPU_h + +#include "CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosRef.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalLaserAPDPNRatiosRefGPU { +public: + struct Product { + ~Product(); + float* values = nullptr; + }; + +#ifndef __CUDACC__ + // + EcalLaserAPDPNRatiosRefGPU(EcalLaserAPDPNRatiosRef const&); + + // will call dealloation for Product thru ~Product + ~EcalLaserAPDPNRatiosRefGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + + // TODO: do this centrally + // get offset for hashes. equals number of barrel items + uint32_t getOffset() const { return valuesEB_.size(); } + + // + static std::string name() { return std::string{"ecalLaserAPDPNRatiosRefGPU"}; } + +private: + std::vector const& valuesEB_; + std::vector const& valuesEE_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalLaserAPDPNRatiosRefGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAlphasGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAlphasGPU.h new file mode 100644 index 0000000000000..9dd05e9ee3c4d --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAlphasGPU.h @@ -0,0 +1,43 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalLaserAlphasGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalLaserAlphasGPU_h + +#include "CondFormats/EcalObjects/interface/EcalLaserAlphas.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalLaserAlphasGPU { +public: + struct Product { + ~Product(); + float* values = nullptr; + }; + +#ifndef __CUDACC__ + // + EcalLaserAlphasGPU(EcalLaserAlphas const&); + + // will call dealloation for Product thru ~Product + ~EcalLaserAlphasGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + + // TODO: do this centrally + // get offset for hashes. equals number of barrel items + uint32_t getOffset() const { return valuesEB_.size(); } + + // + static std::string name() { return std::string{"ecalLaserAlphasGPU"}; } + +private: + std::vector const& valuesEB_; + std::vector const& valuesEE_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalLaserAlphasGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalLinearCorrectionsGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalLinearCorrectionsGPU.h new file mode 100644 index 0000000000000..343bdf1dd1afc --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalLinearCorrectionsGPU.h @@ -0,0 +1,53 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalLinearCorrectionsGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalLinearCorrectionsGPU_h + +#include "CondFormats/EcalObjects/interface/EcalLinearCorrections.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalLinearCorrectionsGPU { +public: + struct Product { + ~Product(); + float *p1 = nullptr; + float *p2 = nullptr; + float *p3 = nullptr; + edm::TimeValue_t *t1 = nullptr; + edm::TimeValue_t *t2 = nullptr; + edm::TimeValue_t *t3 = nullptr; + }; + +#ifndef __CUDACC__ + + // + EcalLinearCorrectionsGPU(EcalLinearCorrections const &); + + // will call dealloation for Product thru ~Product + ~EcalLinearCorrectionsGPU() = default; + + // get device pointers + Product const &getProduct(cudaStream_t) const; + + // + static std::string name() { return std::string{"ecalLinearCorrectionsGPU"}; } + +private: + // in the future, we need to arrange so to avoid this copy on the host + // store eb first then ee + std::vector> p1_; + std::vector> p2_; + std::vector> p3_; + + std::vector> t1_; + std::vector> t2_; + std::vector> t3_; + + cms::cuda::ESProduct product_; + +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalLinearCorrectionsGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalMultifitParametersGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalMultifitParametersGPU.h new file mode 100644 index 0000000000000..56aa0579ff77f --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalMultifitParametersGPU.h @@ -0,0 +1,39 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalMultifitParametersGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalMultifitParametersGPU_h + +#include + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalMultifitParametersGPU { +public: + struct Product { + ~Product(); + double *amplitudeFitParametersEB, *amplitudeFitParametersEE, *timeFitParametersEB, *timeFitParametersEE; + }; + +#ifndef __CUDACC__ + EcalMultifitParametersGPU(edm::ParameterSet const&); + + ~EcalMultifitParametersGPU() = default; + + Product const& getProduct(cudaStream_t) const; + + std::array> const>, 4> getValues() const { + return {{amplitudeFitParametersEB_, amplitudeFitParametersEE_, timeFitParametersEB_, timeFitParametersEE_}}; + } + +private: + std::vector> amplitudeFitParametersEB_, amplitudeFitParametersEE_, + timeFitParametersEB_, timeFitParametersEE_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalMultifitParametersGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalPedestalsGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalPedestalsGPU.h new file mode 100644 index 0000000000000..5387c422ddd9e --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalPedestalsGPU.h @@ -0,0 +1,47 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalPedestalsGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalPedestalsGPU_h + +#include "CondFormats/EcalObjects/interface/EcalPedestals.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalPedestalsGPU { +public: + struct Product { + ~Product(); + float *mean_x12 = nullptr, *mean_x6 = nullptr, *mean_x1 = nullptr; + float *rms_x12 = nullptr, *rms_x6 = nullptr, *rms_x1 = nullptr; + }; + +#ifndef __CUDACC__ + + // rearrange pedestals + EcalPedestalsGPU(EcalPedestals const &); + + // will call dealloation for Product thru ~Product + ~EcalPedestalsGPU() = default; + + // get device pointers + Product const &getProduct(cudaStream_t) const; + + // + static std::string name() { return std::string{"ecalPedestalsGPU"}; } + +private: + // in the future, we need to arrange so to avoid this copy on the host + // store eb first then ee + std::vector> mean_x12_; + std::vector> rms_x12_; + std::vector> mean_x6_; + std::vector> rms_x6_; + std::vector> mean_x1_; + std::vector> rms_x1_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalPedestalsGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalPulseCovariancesGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalPulseCovariancesGPU.h new file mode 100644 index 0000000000000..6c5a3d9b95e2e --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalPulseCovariancesGPU.h @@ -0,0 +1,40 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalPulseCovariancesGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalPulseCovariancesGPU_h + +#include "CondFormats/EcalObjects/interface/EcalPulseCovariances.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalPulseCovariancesGPU { +public: + struct Product { + ~Product(); + EcalPulseCovariance* values = nullptr; + }; + +#ifndef __CUDACC__ + // rearrange pedestals + EcalPulseCovariancesGPU(EcalPulseCovariances const&); + + // will call dealloation for Product thru ~Product + ~EcalPulseCovariancesGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + + // + static std::string name() { return std::string{"ecalPulseCovariancesGPU"}; } + +private: + // reuse original vectors (although with default allocator) + std::vector const& valuesEB_; + std::vector const& valuesEE_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalPulseCovariancesGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalPulseShapesGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalPulseShapesGPU.h new file mode 100644 index 0000000000000..3edb2c9bcdfd3 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalPulseShapesGPU.h @@ -0,0 +1,40 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalPulseShapesGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalPulseShapesGPU_h + +#include "CondFormats/EcalObjects/interface/EcalPulseShapes.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalPulseShapesGPU { +public: + struct Product { + ~Product(); + EcalPulseShape* values = nullptr; + }; + +#ifndef __CUDACC__ + // rearrange pedestals + EcalPulseShapesGPU(EcalPulseShapes const&); + + // will call dealloation for Product thru ~Product + ~EcalPulseShapesGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + + // + static std::string name() { return std::string{"ecalPulseShapesGPU"}; } + +private: + // reuse original vectors (although with default allocator) + std::vector const& valuesEB_; + std::vector const& valuesEE_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalPulseShapesGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalRecHitParametersGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalRecHitParametersGPU.h new file mode 100644 index 0000000000000..c5d3dd0388d15 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalRecHitParametersGPU.h @@ -0,0 +1,47 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalRecHitParametersGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalRecHitParametersGPU_h + +#include + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalRecHitParametersGPU { +public: + struct Product { + ~Product(); + int *ChannelStatusToBeExcluded, *expanded_v_DB_reco_flags; + uint32_t *expanded_Sizes_v_DB_reco_flags, *expanded_flagbit_v_DB_reco_flags; + }; + +#ifndef __CUDACC__ + EcalRecHitParametersGPU(edm::ParameterSet const &); + + ~EcalRecHitParametersGPU() = default; + + Product const &getProduct(cudaStream_t) const; + + using intvec = std::reference_wrapper> const>; + using uint32vec = std::reference_wrapper> const>; + std::tuple getValues() const { + return {ChannelStatusToBeExcluded_, + expanded_v_DB_reco_flags_, + expanded_Sizes_v_DB_reco_flags_, + expanded_flagbit_v_DB_reco_flags_}; + } + +private: + std::vector> ChannelStatusToBeExcluded_; + std::vector> expanded_v_DB_reco_flags_; + std::vector> expanded_Sizes_v_DB_reco_flags_, + expanded_flagbit_v_DB_reco_flags_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalRecHitParametersGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalRechitADCToGeVConstantGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalRechitADCToGeVConstantGPU.h new file mode 100644 index 0000000000000..7d4d3cc60fd5c --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalRechitADCToGeVConstantGPU.h @@ -0,0 +1,42 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalRechitADCToGeVConstantGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalRechitADCToGeVConstantGPU_h + +#include "CondFormats/EcalObjects/interface/EcalADCToGeVConstant.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalRechitADCToGeVConstantGPU { +public: + struct Product { + ~Product(); + float* adc2gev = nullptr; + }; + +#ifndef __CUDACC__ + + // + EcalRechitADCToGeVConstantGPU(EcalADCToGeVConstant const&); + + // will call dealloation for Product thru ~Product + ~EcalRechitADCToGeVConstantGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + + // + static std::string name() { return std::string{"ecalRechitADCToGeVConstantGPU"}; } + +private: + // in the future, we need to arrange so to avoid this copy on the host + // store eb first then ee + std::vector> adc2gev_; + + cms::cuda::ESProduct product_; + +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalRechitADCToGeVConstantGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalRechitChannelStatusGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalRechitChannelStatusGPU.h new file mode 100644 index 0000000000000..bab99ab656c2d --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalRechitChannelStatusGPU.h @@ -0,0 +1,42 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalRechitChannelStatusGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalRechitChannelStatusGPU_h + +#include "CondFormats/EcalObjects/interface/EcalChannelStatus.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalRechitChannelStatusGPU { +public: + struct Product { + ~Product(); + uint16_t* status = nullptr; + }; + +#ifndef __CUDACC__ + + // + EcalRechitChannelStatusGPU(EcalChannelStatus const&); + + // will call dealloation for Product thru ~Product + ~EcalRechitChannelStatusGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + + // + static std::string name() { return std::string{"ecalRechitChannelStatusGPU"}; } + +private: + // in the future, we need to arrange so to avoid this copy on the host + // store eb first then ee + std::vector> status_; + + cms::cuda::ESProduct product_; + +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalRechitChannelStatusGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalSamplesCorrelationGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalSamplesCorrelationGPU.h new file mode 100644 index 0000000000000..e1dee2d505e6c --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalSamplesCorrelationGPU.h @@ -0,0 +1,44 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalSamplesCorrelationGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalSamplesCorrelationGPU_h + +#include "CondFormats/EcalObjects/interface/EcalSamplesCorrelation.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalSamplesCorrelationGPU { +public: + struct Product { + ~Product(); + double *EBG12SamplesCorrelation = nullptr, *EBG6SamplesCorrelation = nullptr, *EBG1SamplesCorrelation = nullptr; + double *EEG12SamplesCorrelation = nullptr, *EEG6SamplesCorrelation = nullptr, *EEG1SamplesCorrelation = nullptr; + }; + +#ifndef __CUDACC__ + // rearrange pedestals + EcalSamplesCorrelationGPU(EcalSamplesCorrelation const&); + + // will call dealloation for Product thru ~Product + ~EcalSamplesCorrelationGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + + // + static std::string name() { return std::string{"ecalSamplesCorrelationGPU"}; } + +private: + std::vector const& EBG12SamplesCorrelation_; + std::vector const& EBG6SamplesCorrelation_; + std::vector const& EBG1SamplesCorrelation_; + std::vector const& EEG12SamplesCorrelation_; + std::vector const& EEG6SamplesCorrelation_; + std::vector const& EEG1SamplesCorrelation_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalSamplesCorrelationGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalTimeBiasCorrectionsGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalTimeBiasCorrectionsGPU.h new file mode 100644 index 0000000000000..9e2bf0aa18909 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalTimeBiasCorrectionsGPU.h @@ -0,0 +1,49 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalTimeBiasCorrectionsGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalTimeBiasCorrectionsGPU_h + +#include "CondFormats/EcalObjects/interface/EcalTimeBiasCorrections.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalTimeBiasCorrectionsGPU { +public: + struct Product { + ~Product(); + float *EBTimeCorrAmplitudeBins, *EBTimeCorrShiftBins; + float *EETimeCorrAmplitudeBins, *EETimeCorrShiftBins; + int EBTimeCorrAmplitudeBinsSize, EETimeCorrAmplitudeBinsSize; + }; + + // rearrange pedestals + EcalTimeBiasCorrectionsGPU(EcalTimeBiasCorrections const&); + +#ifndef __CUDACC__ + + // will call dealloation for Product thru ~Product + ~EcalTimeBiasCorrectionsGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + + // + static std::string name() { return std::string{"ecalTimeBiasCorrectionsGPU"}; } +#endif // __CUDACC__ + + std::vector const& EBTimeCorrAmplitudeBins() const { return EBTimeCorrAmplitudeBins_; } + std::vector const& EETimeCorrAmplitudeBins() const { return EETimeCorrAmplitudeBins_; } + +private: + std::vector const& EBTimeCorrAmplitudeBins_; + std::vector const& EBTimeCorrShiftBins_; + std::vector const& EETimeCorrAmplitudeBins_; + std::vector const& EETimeCorrShiftBins_; + +#ifndef __CUDACC__ + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalTimeBiasCorrectionsGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalTimeCalibConstantsGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalTimeCalibConstantsGPU.h new file mode 100644 index 0000000000000..823334d433cc2 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalTimeCalibConstantsGPU.h @@ -0,0 +1,43 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalTimeCalibConstantsGPU_h +#define RecoLocalCalo_EcalRecAlgos_interface_EcalTimeCalibConstantsGPU_h + +#include "CondFormats/EcalObjects/interface/EcalTimeCalibConstants.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif // __CUDACC__ + +class EcalTimeCalibConstantsGPU { +public: + struct Product { + ~Product(); + float* values = nullptr; + }; + +#ifndef __CUDACC__ + // rearrange pedestals + EcalTimeCalibConstantsGPU(EcalTimeCalibConstants const&); + + // will call dealloation for Product thru ~Product + ~EcalTimeCalibConstantsGPU() = default; + + // get device pointers + Product const& getProduct(cudaStream_t) const; + + // TODO: do this centrally + // get offset for hashes. equals number of barrel items + uint32_t getOffset() const { return valuesEB_.size(); } + + // + static std::string name() { return std::string{"ecalTimeCalibConstantsGPU"}; } + +private: + std::vector const& valuesEB_; + std::vector const& valuesEE_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalTimeCalibConstantsGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalUncalibRecHitTimingCCAlgo.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalUncalibRecHitTimingCCAlgo.h new file mode 100644 index 0000000000000..d124b8397b509 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/interface/EcalUncalibRecHitTimingCCAlgo.h @@ -0,0 +1,43 @@ +#ifndef RecoLocalCalo_EcalRecAlgos_EcalUncalibRecHitTimingCCAlgo_HH +#define RecoLocalCalo_EcalRecAlgos_EcalUncalibRecHitTimingCCAlgo_HH + +/** \class EcalUncalibRecHitTimingCCAlgo + * CrossCorrelation algorithm for timing reconstruction + * + * \author N. Minafra, J. King, C. Rogan + */ + +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalUncalibRecHitRecAbsAlgo.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "CondFormats/EcalObjects/interface/EcalPedestals.h" +#include "CondFormats/EcalObjects/interface/EcalGainRatios.h" +#include "DataFormats/EcalDigi/interface/EcalConstants.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EigenMatrixTypes.h" + +class EcalUncalibRecHitTimingCCAlgo { +public: + EcalUncalibRecHitTimingCCAlgo(const float startTime, const float stopTime, const float targetTimePrecision); + double computeTimeCC(const EcalDataFrame& dataFrame, + const std::vector& amplitudes, + const EcalPedestals::Item* aped, + const EcalMGPAGainRatio* aGain, + const FullSampleVector& fullpulse, + EcalUncalibratedRecHit& uncalibRecHit, + float& errOnTime) const; + +private: + const float startTime_; + const float stopTime_; + const float targetTimePrecision_; + + static constexpr int TIME_WHEN_NOT_CONVERGING = 100; + static constexpr int MAX_NUM_OF_ITERATIONS = 30; + static constexpr int MIN_NUM_OF_ITERATIONS = 2; + static constexpr float GLOBAL_TIME_SHIFT = 100; + + FullSampleVector interpolatePulse(const FullSampleVector& fullpulse, const float t = 0) const; + float computeCC(const std::vector& samples, const FullSampleVector& sigmalTemplate, const float t) const; +}; + +#endif diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalGainRatiosGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalGainRatiosGPU.cc new file mode 100644 index 0000000000000..d5980d8a757aa --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalGainRatiosGPU.cc @@ -0,0 +1,52 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalGainRatiosGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +EcalGainRatiosGPU::EcalGainRatiosGPU(EcalGainRatios const& values) + : gain12Over6_(values.size()), gain6Over1_(values.size()) { + // fill in eb + auto const& barrelValues = values.barrelItems(); + for (unsigned int i = 0; i < barrelValues.size(); i++) { + gain12Over6_[i] = barrelValues[i].gain12Over6(); + gain6Over1_[i] = barrelValues[i].gain6Over1(); + } + + // fill in ee + auto const& endcapValues = values.endcapItems(); + auto const offset = barrelValues.size(); + for (unsigned int i = 0; i < endcapValues.size(); i++) { + gain12Over6_[offset + i] = endcapValues[i].gain12Over6(); + gain6Over1_[offset + i] = endcapValues[i].gain6Over1(); + } +} + +EcalGainRatiosGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(gain12Over6)); + cudaCheck(cudaFree(gain6Over1)); +} + +EcalGainRatiosGPU::Product const& EcalGainRatiosGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalGainRatiosGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck(cudaMalloc((void**)&product.gain12Over6, this->gain12Over6_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.gain6Over1, this->gain6Over1_.size() * sizeof(float))); + // transfer + cudaCheck(cudaMemcpyAsync(product.gain12Over6, + this->gain12Over6_.data(), + this->gain12Over6_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.gain6Over1, + this->gain6Over1_.data(), + this->gain6Over1_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalGainRatiosGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalIntercalibConstantsGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalIntercalibConstantsGPU.cc new file mode 100644 index 0000000000000..dec10cff57dd0 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalIntercalibConstantsGPU.cc @@ -0,0 +1,40 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalIntercalibConstantsGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +EcalIntercalibConstantsGPU::EcalIntercalibConstantsGPU(EcalIntercalibConstants const& values) + : valuesEB_{values.barrelItems()}, valuesEE_{values.endcapItems()} {} + +EcalIntercalibConstantsGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(values)); +} + +EcalIntercalibConstantsGPU::Product const& EcalIntercalibConstantsGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalIntercalibConstantsGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck( + cudaMalloc((void**)&product.values, (this->valuesEB_.size() + this->valuesEE_.size()) * sizeof(float))); + + // offset in floats, not bytes + auto const offset = this->valuesEB_.size(); + + // transfer + cudaCheck(cudaMemcpyAsync(product.values, + this->valuesEB_.data(), + this->valuesEB_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.values + offset, + this->valuesEE_.data(), + this->valuesEE_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalIntercalibConstantsGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalLaserAPDPNRatiosGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalLaserAPDPNRatiosGPU.cc new file mode 100644 index 0000000000000..4aa92ea6750fe --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalLaserAPDPNRatiosGPU.cc @@ -0,0 +1,86 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +EcalLaserAPDPNRatiosGPU::EcalLaserAPDPNRatiosGPU(EcalLaserAPDPNRatios const& values) + : p1_(values.getLaserMap().size()), + p2_(values.getLaserMap().size()), + p3_(values.getLaserMap().size()), + t1_(values.getTimeMap().size()), + t2_(values.getTimeMap().size()), + t3_(values.getTimeMap().size()) { + // fill in eb + // auto const& barrelValues = values.barrelItems(); + for (unsigned int i = 0; i < values.getLaserMap().barrelItems().size(); i++) { + p1_[i] = values.getLaserMap().barrelItems()[i].p1; + p2_[i] = values.getLaserMap().barrelItems()[i].p2; + p3_[i] = values.getLaserMap().barrelItems()[i].p3; + } + + // fill in ee + // auto const& endcapValues = values.endcapItems(); + auto const offset_laser = values.getLaserMap().barrelItems().size(); + for (unsigned int i = 0; i < values.getLaserMap().endcapItems().size(); i++) { + p1_[offset_laser + i] = values.getLaserMap().endcapItems()[i].p1; + p2_[offset_laser + i] = values.getLaserMap().endcapItems()[i].p2; + p3_[offset_laser + i] = values.getLaserMap().endcapItems()[i].p3; + } + + // Time is a simple std::vector + // typedef std::vector EcalLaserTimeStampMap; + for (unsigned int i = 0; i < values.getTimeMap().size(); i++) { + t1_[i] = values.getTimeMap()[i].t1.value(); + t2_[i] = values.getTimeMap()[i].t2.value(); + t3_[i] = values.getTimeMap()[i].t3.value(); + } +} + +EcalLaserAPDPNRatiosGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(p1)); + cudaCheck(cudaFree(p2)); + cudaCheck(cudaFree(p3)); + cudaCheck(cudaFree(t1)); + cudaCheck(cudaFree(t2)); + cudaCheck(cudaFree(t3)); +} + +EcalLaserAPDPNRatiosGPU::Product const& EcalLaserAPDPNRatiosGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalLaserAPDPNRatiosGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck(cudaMalloc((void**)&product.p1, this->p1_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.p2, this->p2_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.p3, this->p3_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.t1, this->t1_.size() * sizeof(edm::TimeValue_t))); + cudaCheck(cudaMalloc((void**)&product.t2, this->t2_.size() * sizeof(edm::TimeValue_t))); + cudaCheck(cudaMalloc((void**)&product.t3, this->t3_.size() * sizeof(edm::TimeValue_t))); + // transfer + cudaCheck(cudaMemcpyAsync( + product.p1, this->p1_.data(), this->p1_.size() * sizeof(float), cudaMemcpyHostToDevice, cudaStream)); + cudaCheck(cudaMemcpyAsync( + product.p2, this->p2_.data(), this->p2_.size() * sizeof(float), cudaMemcpyHostToDevice, cudaStream)); + cudaCheck(cudaMemcpyAsync( + product.p3, this->p3_.data(), this->p3_.size() * sizeof(float), cudaMemcpyHostToDevice, cudaStream)); + cudaCheck(cudaMemcpyAsync(product.t1, + this->t1_.data(), + this->t1_.size() * sizeof(edm::TimeValue_t), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.t2, + this->t2_.data(), + this->t2_.size() * sizeof(edm::TimeValue_t), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.t3, + this->t3_.data(), + this->t3_.size() * sizeof(edm::TimeValue_t), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalLaserAPDPNRatiosGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalLaserAPDPNRatiosRefGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalLaserAPDPNRatiosRefGPU.cc new file mode 100644 index 0000000000000..8f77cf48fe1d1 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalLaserAPDPNRatiosRefGPU.cc @@ -0,0 +1,40 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosRefGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +EcalLaserAPDPNRatiosRefGPU::EcalLaserAPDPNRatiosRefGPU(EcalLaserAPDPNRatiosRef const& values) + : valuesEB_{values.barrelItems()}, valuesEE_{values.endcapItems()} {} + +EcalLaserAPDPNRatiosRefGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(values)); +} + +EcalLaserAPDPNRatiosRefGPU::Product const& EcalLaserAPDPNRatiosRefGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalLaserAPDPNRatiosRefGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck( + cudaMalloc((void**)&product.values, (this->valuesEB_.size() + this->valuesEE_.size()) * sizeof(float))); + + // offset in floats, not bytes + auto const offset = this->valuesEB_.size(); + + // transfer + cudaCheck(cudaMemcpyAsync(product.values, + this->valuesEB_.data(), + this->valuesEB_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.values + offset, + this->valuesEE_.data(), + this->valuesEE_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalLaserAPDPNRatiosRefGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalLaserAlphasGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalLaserAlphasGPU.cc new file mode 100644 index 0000000000000..91de441bff683 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalLaserAlphasGPU.cc @@ -0,0 +1,40 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAlphasGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +EcalLaserAlphasGPU::EcalLaserAlphasGPU(EcalLaserAlphas const& values) + : valuesEB_{values.barrelItems()}, valuesEE_{values.endcapItems()} {} + +EcalLaserAlphasGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(values)); +} + +EcalLaserAlphasGPU::Product const& EcalLaserAlphasGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalLaserAlphasGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck( + cudaMalloc((void**)&product.values, (this->valuesEB_.size() + this->valuesEE_.size()) * sizeof(float))); + + // offset in floats, not bytes + auto const offset = this->valuesEB_.size(); + + // transfer + cudaCheck(cudaMemcpyAsync(product.values, + this->valuesEB_.data(), + this->valuesEB_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.values + offset, + this->valuesEE_.data(), + this->valuesEE_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalLaserAlphasGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalLinearCorrectionsGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalLinearCorrectionsGPU.cc new file mode 100644 index 0000000000000..0af2a9044ab65 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalLinearCorrectionsGPU.cc @@ -0,0 +1,84 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLinearCorrectionsGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +EcalLinearCorrectionsGPU::EcalLinearCorrectionsGPU(EcalLinearCorrections const& values) + : p1_(values.getValueMap().size()), + p2_(values.getValueMap().size()), + p3_(values.getValueMap().size()), + t1_(values.getTimeMap().size()), + t2_(values.getTimeMap().size()), + t3_(values.getTimeMap().size()) { + // fill in eb + for (unsigned int i = 0; i < values.getValueMap().barrelItems().size(); i++) { + p1_[i] = values.getValueMap().barrelItems()[i].p1; + p2_[i] = values.getValueMap().barrelItems()[i].p2; + p3_[i] = values.getValueMap().barrelItems()[i].p3; + } + + // fill in ee + auto const offset_laser = values.getValueMap().barrelItems().size(); + for (unsigned int i = 0; i < values.getValueMap().endcapItems().size(); i++) { + p1_[offset_laser + i] = values.getValueMap().endcapItems()[i].p1; + p2_[offset_laser + i] = values.getValueMap().endcapItems()[i].p2; + p3_[offset_laser + i] = values.getValueMap().endcapItems()[i].p3; + } + + // Time is a simple std::vector + // typedef std::vector EcalLaserTimeStampMap; + for (unsigned int i = 0; i < values.getTimeMap().size(); i++) { + t1_[i] = values.getTimeMap()[i].t1.value(); + t2_[i] = values.getTimeMap()[i].t2.value(); + t3_[i] = values.getTimeMap()[i].t3.value(); + } +} + +EcalLinearCorrectionsGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(p1)); + cudaCheck(cudaFree(p2)); + cudaCheck(cudaFree(p3)); + cudaCheck(cudaFree(t1)); + cudaCheck(cudaFree(t2)); + cudaCheck(cudaFree(t3)); +} + +EcalLinearCorrectionsGPU::Product const& EcalLinearCorrectionsGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalLinearCorrectionsGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck(cudaMalloc((void**)&product.p1, this->p1_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.p2, this->p2_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.p3, this->p3_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.t1, this->t1_.size() * sizeof(edm::TimeValue_t))); + cudaCheck(cudaMalloc((void**)&product.t2, this->t2_.size() * sizeof(edm::TimeValue_t))); + cudaCheck(cudaMalloc((void**)&product.t3, this->t3_.size() * sizeof(edm::TimeValue_t))); + // transfer + cudaCheck(cudaMemcpyAsync( + product.p1, this->p1_.data(), this->p1_.size() * sizeof(float), cudaMemcpyHostToDevice, cudaStream)); + cudaCheck(cudaMemcpyAsync( + product.p2, this->p2_.data(), this->p2_.size() * sizeof(float), cudaMemcpyHostToDevice, cudaStream)); + cudaCheck(cudaMemcpyAsync( + product.p3, this->p3_.data(), this->p3_.size() * sizeof(float), cudaMemcpyHostToDevice, cudaStream)); + cudaCheck(cudaMemcpyAsync(product.t1, + this->t1_.data(), + this->t1_.size() * sizeof(edm::TimeValue_t), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.t2, + this->t2_.data(), + this->t2_.size() * sizeof(edm::TimeValue_t), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.t3, + this->t3_.data(), + this->t3_.size() * sizeof(edm::TimeValue_t), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalLinearCorrectionsGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalMultifitParametersGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalMultifitParametersGPU.cc new file mode 100644 index 0000000000000..010da6444b614 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalMultifitParametersGPU.cc @@ -0,0 +1,66 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalMultifitParametersGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +EcalMultifitParametersGPU::EcalMultifitParametersGPU(edm::ParameterSet const& ps) { + auto const& amplitudeFitParametersEB = ps.getParameter>("EBamplitudeFitParameters"); + auto const& amplitudeFitParametersEE = ps.getParameter>("EEamplitudeFitParameters"); + auto const& timeFitParametersEB = ps.getParameter>("EBtimeFitParameters"); + auto const& timeFitParametersEE = ps.getParameter>("EEtimeFitParameters"); + + amplitudeFitParametersEB_.resize(amplitudeFitParametersEB.size()); + amplitudeFitParametersEE_.resize(amplitudeFitParametersEE.size()); + timeFitParametersEB_.resize(timeFitParametersEB.size()); + timeFitParametersEE_.resize(timeFitParametersEE.size()); + + std::copy(amplitudeFitParametersEB.begin(), amplitudeFitParametersEB.end(), amplitudeFitParametersEB_.begin()); + std::copy(amplitudeFitParametersEE.begin(), amplitudeFitParametersEE.end(), amplitudeFitParametersEE_.begin()); + std::copy(timeFitParametersEB.begin(), timeFitParametersEB.end(), timeFitParametersEB_.begin()); + std::copy(timeFitParametersEE.begin(), timeFitParametersEE.end(), timeFitParametersEE_.begin()); +} + +EcalMultifitParametersGPU::Product::~Product() { + cudaCheck(cudaFree(amplitudeFitParametersEB)); + cudaCheck(cudaFree(amplitudeFitParametersEE)); + cudaCheck(cudaFree(timeFitParametersEB)); + cudaCheck(cudaFree(timeFitParametersEE)); +} + +EcalMultifitParametersGPU::Product const& EcalMultifitParametersGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalMultifitParametersGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck(cudaMalloc((void**)&product.amplitudeFitParametersEB, + this->amplitudeFitParametersEB_.size() * sizeof(double))); + cudaCheck(cudaMalloc((void**)&product.amplitudeFitParametersEE, + this->amplitudeFitParametersEE_.size() * sizeof(double))); + cudaCheck(cudaMalloc((void**)&product.timeFitParametersEB, this->timeFitParametersEB_.size() * sizeof(double))); + cudaCheck(cudaMalloc((void**)&product.timeFitParametersEE, this->timeFitParametersEE_.size() * sizeof(double))); + + // transfer + cudaCheck(cudaMemcpyAsync(product.amplitudeFitParametersEB, + this->amplitudeFitParametersEB_.data(), + this->amplitudeFitParametersEB_.size() * sizeof(double), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.amplitudeFitParametersEE, + this->amplitudeFitParametersEE_.data(), + this->amplitudeFitParametersEE_.size() * sizeof(double), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.timeFitParametersEB, + this->timeFitParametersEB_.data(), + this->timeFitParametersEB_.size() * sizeof(double), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.timeFitParametersEE, + this->timeFitParametersEE_.data(), + this->timeFitParametersEE_.size() * sizeof(double), + cudaMemcpyHostToDevice, + cudaStream)); + }); + return product; +} + +TYPELOOKUP_DATA_REG(EcalMultifitParametersGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalPedestalsGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalPedestalsGPU.cc new file mode 100644 index 0000000000000..9e3284cd9c7c8 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalPedestalsGPU.cc @@ -0,0 +1,94 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalPedestalsGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +EcalPedestalsGPU::EcalPedestalsGPU(EcalPedestals const& pedestals) + : mean_x12_(pedestals.size()), + rms_x12_(pedestals.size()), + mean_x6_(pedestals.size()), + rms_x6_(pedestals.size()), + mean_x1_(pedestals.size()), + rms_x1_(pedestals.size()) { + // fill in eb + auto const& barrelValues = pedestals.barrelItems(); + for (unsigned int i = 0; i < barrelValues.size(); i++) { + mean_x12_[i] = barrelValues[i].mean_x12; + rms_x12_[i] = barrelValues[i].rms_x12; + mean_x6_[i] = barrelValues[i].mean_x6; + rms_x6_[i] = barrelValues[i].rms_x6; + mean_x1_[i] = barrelValues[i].mean_x1; + rms_x1_[i] = barrelValues[i].rms_x1; + } + + // fill in ee + auto const& endcapValues = pedestals.endcapItems(); + auto const offset = barrelValues.size(); + for (unsigned int i = 0; i < endcapValues.size(); i++) { + mean_x12_[offset + i] = endcapValues[i].mean_x12; + rms_x12_[offset + i] = endcapValues[i].rms_x12; + mean_x6_[offset + i] = endcapValues[i].mean_x6; + rms_x6_[offset + i] = endcapValues[i].rms_x6; + mean_x1_[offset + i] = endcapValues[i].mean_x1; + rms_x1_[offset + i] = endcapValues[i].rms_x1; + } +} + +EcalPedestalsGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(mean_x12)); + cudaCheck(cudaFree(rms_x12)); + cudaCheck(cudaFree(mean_x6)); + cudaCheck(cudaFree(rms_x6)); + cudaCheck(cudaFree(mean_x1)); + cudaCheck(cudaFree(rms_x1)); +} + +EcalPedestalsGPU::Product const& EcalPedestalsGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalPedestalsGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck(cudaMalloc((void**)&product.mean_x12, this->mean_x12_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.rms_x12, this->mean_x12_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.mean_x6, this->mean_x12_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.rms_x6, this->mean_x12_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.mean_x1, this->mean_x12_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.rms_x1, this->mean_x12_.size() * sizeof(float))); + + // transfer + cudaCheck(cudaMemcpyAsync(product.mean_x12, + this->mean_x12_.data(), + this->mean_x12_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.rms_x12, + this->rms_x12_.data(), + this->rms_x12_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.mean_x6, + this->mean_x6_.data(), + this->mean_x6_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.rms_x6, + this->rms_x6_.data(), + this->rms_x6_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.mean_x1, + this->mean_x1_.data(), + this->mean_x1_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.rms_x1, + this->rms_x1_.data(), + this->rms_x1_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalPedestalsGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalPulseCovariancesGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalPulseCovariancesGPU.cc new file mode 100644 index 0000000000000..bbeda99652e22 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalPulseCovariancesGPU.cc @@ -0,0 +1,42 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalPulseCovariancesGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +EcalPulseCovariancesGPU::EcalPulseCovariancesGPU(EcalPulseCovariances const& values) + : valuesEB_{values.barrelItems()}, valuesEE_{values.endcapItems()} {} + +EcalPulseCovariancesGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(values)); +} + +EcalPulseCovariancesGPU::Product const& EcalPulseCovariancesGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalPulseCovariancesGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck(cudaMalloc((void**)&product.values, + (this->valuesEE_.size() + this->valuesEB_.size()) * sizeof(EcalPulseCovariance))); + + // offset in terms of sizeof(EcalPulseCovariance) + uint32_t offset = this->valuesEB_.size(); + + // transfer eb + cudaCheck(cudaMemcpyAsync(product.values, + this->valuesEB_.data(), + this->valuesEB_.size() * sizeof(EcalPulseCovariance), + cudaMemcpyHostToDevice, + cudaStream)); + + // transfer ee starting at values + offset + cudaCheck(cudaMemcpyAsync(product.values + offset, + this->valuesEE_.data(), + this->valuesEE_.size() * sizeof(EcalPulseCovariance), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalPulseCovariancesGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalPulseShapesGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalPulseShapesGPU.cc new file mode 100644 index 0000000000000..aee122a01627d --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalPulseShapesGPU.cc @@ -0,0 +1,42 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalPulseShapesGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +EcalPulseShapesGPU::EcalPulseShapesGPU(EcalPulseShapes const& values) + : valuesEB_{values.barrelItems()}, valuesEE_{values.endcapItems()} {} + +EcalPulseShapesGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(values)); +} + +EcalPulseShapesGPU::Product const& EcalPulseShapesGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalPulseShapesGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck(cudaMalloc((void**)&product.values, + (this->valuesEE_.size() + this->valuesEB_.size()) * sizeof(EcalPulseShape))); + + // offset in terms of sizeof(EcalPulseShape) - plain c array + uint32_t offset = this->valuesEB_.size(); + + // transfer eb + cudaCheck(cudaMemcpyAsync(product.values, + this->valuesEB_.data(), + this->valuesEB_.size() * sizeof(EcalPulseShape), + cudaMemcpyHostToDevice, + cudaStream)); + + // transfer ee starting at values + offset + cudaCheck(cudaMemcpyAsync(product.values + offset, + this->valuesEE_.data(), + this->valuesEE_.size() * sizeof(EcalPulseShape), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalPulseShapesGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalRecHitParametersGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalRecHitParametersGPU.cc new file mode 100644 index 0000000000000..0f6812d6d6ffe --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalRecHitParametersGPU.cc @@ -0,0 +1,82 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalRecHitParametersGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "CommonTools/Utils/interface/StringToEnumValue.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalRechitChannelStatusGPU.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHit.h" + +EcalRecHitParametersGPU::EcalRecHitParametersGPU(edm::ParameterSet const& ps) { + auto const& ChannelStatusToBeExcluded = StringToEnumValue( + ps.getParameter>("ChannelStatusToBeExcluded")); + + ChannelStatusToBeExcluded_.resize(ChannelStatusToBeExcluded.size()); + std::copy(ChannelStatusToBeExcluded.begin(), ChannelStatusToBeExcluded.end(), ChannelStatusToBeExcluded_.begin()); + + // https://github.com/cms-sw/cmssw/blob/266e21cfc9eb409b093e4cf064f4c0a24c6ac293/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitWorkerSimple.cc + + // Traslate string representation of flagsMapDBReco into enum values + const edm::ParameterSet& p = ps.getParameter("flagsMapDBReco"); + std::vector recoflagbitsStrings = p.getParameterNames(); + + for (unsigned int i = 0; i != recoflagbitsStrings.size(); ++i) { + EcalRecHit::Flags recoflagbit = (EcalRecHit::Flags)StringToEnumValue(recoflagbitsStrings[i]); + std::vector dbstatus_s = p.getParameter>(recoflagbitsStrings[i]); + // std::vector dbstatuses; + for (unsigned int j = 0; j != dbstatus_s.size(); ++j) { + EcalChannelStatusCode::Code dbstatus = + (EcalChannelStatusCode::Code)StringToEnumValue(dbstatus_s[j]); + expanded_v_DB_reco_flags_.push_back(dbstatus); + } + + expanded_Sizes_v_DB_reco_flags_.push_back(dbstatus_s.size()); + expanded_flagbit_v_DB_reco_flags_.push_back(recoflagbit); + } +} + +EcalRecHitParametersGPU::Product::~Product() { + cudaCheck(cudaFree(ChannelStatusToBeExcluded)); + cudaCheck(cudaFree(expanded_v_DB_reco_flags)); + cudaCheck(cudaFree(expanded_Sizes_v_DB_reco_flags)); + cudaCheck(cudaFree(expanded_flagbit_v_DB_reco_flags)); +} + +EcalRecHitParametersGPU::Product const& EcalRecHitParametersGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalRecHitParametersGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck(cudaMalloc((void**)&product.ChannelStatusToBeExcluded, + this->ChannelStatusToBeExcluded_.size() * sizeof(int))); + cudaCheck(cudaMalloc((void**)&product.expanded_v_DB_reco_flags, + this->expanded_v_DB_reco_flags_.size() * sizeof(int))); + cudaCheck(cudaMalloc((void**)&product.expanded_Sizes_v_DB_reco_flags, + this->expanded_Sizes_v_DB_reco_flags_.size() * sizeof(uint32_t))); + cudaCheck(cudaMalloc((void**)&product.expanded_flagbit_v_DB_reco_flags, + this->expanded_flagbit_v_DB_reco_flags_.size() * sizeof(uint32_t))); + + // transfer + cudaCheck(cudaMemcpyAsync(product.ChannelStatusToBeExcluded, + this->ChannelStatusToBeExcluded_.data(), + this->ChannelStatusToBeExcluded_.size() * sizeof(int), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.expanded_v_DB_reco_flags, + this->expanded_v_DB_reco_flags_.data(), + this->expanded_v_DB_reco_flags_.size() * sizeof(int), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.expanded_Sizes_v_DB_reco_flags, + this->expanded_Sizes_v_DB_reco_flags_.data(), + this->expanded_Sizes_v_DB_reco_flags_.size() * sizeof(uint32_t), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.expanded_flagbit_v_DB_reco_flags, + this->expanded_flagbit_v_DB_reco_flags_.data(), + this->expanded_flagbit_v_DB_reco_flags_.size() * sizeof(uint32_t), + cudaMemcpyHostToDevice, + cudaStream)); + }); + return product; +} + +TYPELOOKUP_DATA_REG(EcalRecHitParametersGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalRechitADCToGeVConstantGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalRechitADCToGeVConstantGPU.cc new file mode 100644 index 0000000000000..5f01068f95186 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalRechitADCToGeVConstantGPU.cc @@ -0,0 +1,34 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalRechitADCToGeVConstantGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +EcalRechitADCToGeVConstantGPU::EcalRechitADCToGeVConstantGPU(EcalADCToGeVConstant const& values) + : adc2gev_(2) // size is 2, one form EB and one for EE +{ + adc2gev_[0] = values.getEBValue(); + adc2gev_[1] = values.getEEValue(); +} + +EcalRechitADCToGeVConstantGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(adc2gev)); +} + +EcalRechitADCToGeVConstantGPU::Product const& EcalRechitADCToGeVConstantGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalRechitADCToGeVConstantGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck(cudaMalloc((void**)&product.adc2gev, this->adc2gev_.size() * sizeof(float))); + // transfer + cudaCheck(cudaMemcpyAsync(product.adc2gev, + this->adc2gev_.data(), + this->adc2gev_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalRechitADCToGeVConstantGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalRechitChannelStatusGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalRechitChannelStatusGPU.cc new file mode 100644 index 0000000000000..1e6801fbd326a --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalRechitChannelStatusGPU.cc @@ -0,0 +1,42 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalRechitChannelStatusGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +EcalRechitChannelStatusGPU::EcalRechitChannelStatusGPU(EcalChannelStatus const& values) : status_(values.size()) { + // fill in eb + auto const& barrelValues = values.barrelItems(); + for (unsigned int i = 0; i < barrelValues.size(); i++) { + status_[i] = barrelValues[i].getEncodedStatusCode(); + } + + // fill in ee + auto const& endcapValues = values.endcapItems(); + auto const offset = barrelValues.size(); + for (unsigned int i = 0; i < endcapValues.size(); i++) { + status_[offset + i] = endcapValues[i].getEncodedStatusCode(); + } +} + +EcalRechitChannelStatusGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(status)); +} + +EcalRechitChannelStatusGPU::Product const& EcalRechitChannelStatusGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalRechitChannelStatusGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck(cudaMalloc((void**)&product.status, this->status_.size() * sizeof(uint16_t))); + // transfer + cudaCheck(cudaMemcpyAsync(product.status, + this->status_.data(), + this->status_.size() * sizeof(uint16_t), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalRechitChannelStatusGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalSamplesCorrelationGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalSamplesCorrelationGPU.cc new file mode 100644 index 0000000000000..2a98067f51d9e --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalSamplesCorrelationGPU.cc @@ -0,0 +1,76 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSamplesCorrelationGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +EcalSamplesCorrelationGPU::EcalSamplesCorrelationGPU(EcalSamplesCorrelation const& values) + : EBG12SamplesCorrelation_{values.EBG12SamplesCorrelation}, + EBG6SamplesCorrelation_{values.EBG6SamplesCorrelation}, + EBG1SamplesCorrelation_{values.EBG1SamplesCorrelation}, + EEG12SamplesCorrelation_{values.EEG12SamplesCorrelation}, + EEG6SamplesCorrelation_{values.EEG6SamplesCorrelation}, + EEG1SamplesCorrelation_{values.EEG1SamplesCorrelation} {} + +EcalSamplesCorrelationGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(EBG12SamplesCorrelation)); + cudaCheck(cudaFree(EBG6SamplesCorrelation)); + cudaCheck(cudaFree(EBG1SamplesCorrelation)); + cudaCheck(cudaFree(EEG12SamplesCorrelation)); + cudaCheck(cudaFree(EEG6SamplesCorrelation)); + cudaCheck(cudaFree(EEG1SamplesCorrelation)); +} + +EcalSamplesCorrelationGPU::Product const& EcalSamplesCorrelationGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalSamplesCorrelationGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck(cudaMalloc((void**)&product.EBG12SamplesCorrelation, + this->EBG12SamplesCorrelation_.size() * sizeof(double))); + cudaCheck( + cudaMalloc((void**)&product.EBG6SamplesCorrelation, this->EBG6SamplesCorrelation_.size() * sizeof(double))); + cudaCheck( + cudaMalloc((void**)&product.EBG1SamplesCorrelation, this->EBG1SamplesCorrelation_.size() * sizeof(double))); + cudaCheck(cudaMalloc((void**)&product.EEG12SamplesCorrelation, + this->EEG12SamplesCorrelation_.size() * sizeof(double))); + cudaCheck( + cudaMalloc((void**)&product.EEG6SamplesCorrelation, this->EEG6SamplesCorrelation_.size() * sizeof(double))); + cudaCheck( + cudaMalloc((void**)&product.EEG1SamplesCorrelation, this->EEG1SamplesCorrelation_.size() * sizeof(double))); + // transfer + cudaCheck(cudaMemcpyAsync(product.EBG12SamplesCorrelation, + this->EBG12SamplesCorrelation_.data(), + this->EBG12SamplesCorrelation_.size() * sizeof(double), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.EBG6SamplesCorrelation, + this->EBG6SamplesCorrelation_.data(), + this->EBG6SamplesCorrelation_.size() * sizeof(double), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.EBG1SamplesCorrelation, + this->EBG1SamplesCorrelation_.data(), + this->EBG1SamplesCorrelation_.size() * sizeof(double), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.EEG12SamplesCorrelation, + this->EEG12SamplesCorrelation_.data(), + this->EEG12SamplesCorrelation_.size() * sizeof(double), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.EEG6SamplesCorrelation, + this->EEG6SamplesCorrelation_.data(), + this->EEG6SamplesCorrelation_.size() * sizeof(double), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.EEG1SamplesCorrelation, + this->EEG1SamplesCorrelation_.data(), + this->EEG1SamplesCorrelation_.size() * sizeof(double), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalSamplesCorrelationGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalTimeBiasCorrectionsGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalTimeBiasCorrectionsGPU.cc new file mode 100644 index 0000000000000..9ab0a6302a9c4 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalTimeBiasCorrectionsGPU.cc @@ -0,0 +1,61 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalTimeBiasCorrectionsGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +EcalTimeBiasCorrectionsGPU::EcalTimeBiasCorrectionsGPU(EcalTimeBiasCorrections const& values) + : EBTimeCorrAmplitudeBins_{values.EBTimeCorrAmplitudeBins}, + EBTimeCorrShiftBins_{values.EBTimeCorrShiftBins}, + EETimeCorrAmplitudeBins_{values.EETimeCorrAmplitudeBins}, + EETimeCorrShiftBins_{values.EETimeCorrShiftBins} {} + +EcalTimeBiasCorrectionsGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(EBTimeCorrAmplitudeBins)); + cudaCheck(cudaFree(EBTimeCorrShiftBins)); + cudaCheck(cudaFree(EETimeCorrAmplitudeBins)); + cudaCheck(cudaFree(EETimeCorrShiftBins)); +} + +EcalTimeBiasCorrectionsGPU::Product const& EcalTimeBiasCorrectionsGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalTimeBiasCorrectionsGPU::Product& product, cudaStream_t cudaStream) { + // to get the size of vectors later on + // should be removed and host conditions' objects used directly + product.EBTimeCorrAmplitudeBinsSize = this->EBTimeCorrAmplitudeBins_.size(); + product.EETimeCorrAmplitudeBinsSize = this->EETimeCorrAmplitudeBins_.size(); + + // malloc + cudaCheck(cudaMalloc((void**)&product.EBTimeCorrAmplitudeBins, + this->EBTimeCorrAmplitudeBins_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.EBTimeCorrShiftBins, this->EBTimeCorrShiftBins_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.EETimeCorrAmplitudeBins, + this->EETimeCorrAmplitudeBins_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.EETimeCorrShiftBins, this->EETimeCorrShiftBins_.size() * sizeof(float))); + // transfer + cudaCheck(cudaMemcpyAsync(product.EBTimeCorrAmplitudeBins, + this->EBTimeCorrAmplitudeBins_.data(), + this->EBTimeCorrAmplitudeBins_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.EBTimeCorrShiftBins, + this->EBTimeCorrShiftBins_.data(), + this->EBTimeCorrShiftBins_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.EETimeCorrAmplitudeBins, + this->EETimeCorrAmplitudeBins_.data(), + this->EETimeCorrAmplitudeBins_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.EETimeCorrShiftBins, + this->EETimeCorrShiftBins_.data(), + this->EETimeCorrShiftBins_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalTimeBiasCorrectionsGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalTimeCalibConstantsGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalTimeCalibConstantsGPU.cc new file mode 100644 index 0000000000000..d724a33f1d4e1 --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalTimeCalibConstantsGPU.cc @@ -0,0 +1,40 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalTimeCalibConstantsGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +EcalTimeCalibConstantsGPU::EcalTimeCalibConstantsGPU(EcalTimeCalibConstants const& values) + : valuesEB_{values.barrelItems()}, valuesEE_{values.endcapItems()} {} + +EcalTimeCalibConstantsGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(values)); +} + +EcalTimeCalibConstantsGPU::Product const& EcalTimeCalibConstantsGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalTimeCalibConstantsGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck( + cudaMalloc((void**)&product.values, (this->valuesEB_.size() + this->valuesEE_.size()) * sizeof(float))); + + // offset in floats, not bytes + auto const offset = this->valuesEB_.size(); + + // transfer + cudaCheck(cudaMemcpyAsync(product.values, + this->valuesEB_.data(), + this->valuesEB_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.values + offset, + this->valuesEE_.data(), + this->valuesEE_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalTimeCalibConstantsGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalUncalibRecHitTimingCCAlgo.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalUncalibRecHitTimingCCAlgo.cc new file mode 100644 index 0000000000000..53ebdd8fc92de --- /dev/null +++ b/RecoLocalCalo/EcalRecAlgos/src/EcalUncalibRecHitTimingCCAlgo.cc @@ -0,0 +1,158 @@ +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalUncalibRecHitTimingCCAlgo.h" + +EcalUncalibRecHitTimingCCAlgo::EcalUncalibRecHitTimingCCAlgo(const float startTime, + const float stopTime, + const float targetTimePrecision) + : startTime_(startTime), stopTime_(stopTime), targetTimePrecision_(targetTimePrecision) {} + +double EcalUncalibRecHitTimingCCAlgo::computeTimeCC(const EcalDataFrame& dataFrame, + const std::vector& amplitudes, + const EcalPedestals::Item* aped, + const EcalMGPAGainRatio* aGain, + const FullSampleVector& fullpulse, + EcalUncalibratedRecHit& uncalibRecHit, + float& errOnTime) const { + constexpr unsigned int nsample = EcalDataFrame::MAXSAMPLES; + + double maxamplitude = -std::numeric_limits::max(); + float pulsenorm = 0.; + + std::vector pedSubSamples(nsample); + for (unsigned int iSample = 0; iSample < nsample; iSample++) { + const EcalMGPASample& sample = dataFrame.sample(iSample); + + float amplitude = 0.; + int gainId = sample.gainId(); + + double pedestal = 0.; + double gainratio = 1.; + + if (gainId == 0 || gainId == 3) { + pedestal = aped->mean_x1; + gainratio = aGain->gain6Over1() * aGain->gain12Over6(); + } else if (gainId == 1) { + pedestal = aped->mean_x12; + gainratio = 1.; + } else if (gainId == 2) { + pedestal = aped->mean_x6; + gainratio = aGain->gain12Over6(); + } + + amplitude = (static_cast(sample.adc()) - pedestal) * gainratio; + + if (gainId == 0) { + //saturation + amplitude = (4095. - pedestal) * gainratio; + } + + pedSubSamples[iSample] = amplitude; + + if (amplitude > maxamplitude) { + maxamplitude = amplitude; + } + pulsenorm += fullpulse(iSample); + } + + int ipulse = -1; + for (auto const& amplit : amplitudes) { + ipulse++; + int bxp3 = ipulse - 2; + int firstsamplet = std::max(0, bxp3); + int offset = 7 - bxp3; + + for (unsigned int isample = firstsamplet; isample < nsample; ++isample) { + auto const pulse = fullpulse(isample + offset); + pedSubSamples[isample] = std::max(0., pedSubSamples[isample] - amplit * pulse / pulsenorm); + } + } + + // Start of time computation + float tStart = startTime_ + GLOBAL_TIME_SHIFT; + float tStop = stopTime_ + GLOBAL_TIME_SHIFT; + float tM = (tStart + tStop) / 2; + + float distStart, distStop; + int counter = 0; + + do { + ++counter; + distStart = computeCC(pedSubSamples, fullpulse, tStart); + distStop = computeCC(pedSubSamples, fullpulse, tStop); + + if (distStart > distStop) { + tStop = tM; + } else { + tStart = tM; + } + tM = (tStart + tStop) / 2; + + } while (tStop - tStart > targetTimePrecision_ && counter < MAX_NUM_OF_ITERATIONS); + + tM -= GLOBAL_TIME_SHIFT; + errOnTime = targetTimePrecision_; + + if (counter < MIN_NUM_OF_ITERATIONS || counter > MAX_NUM_OF_ITERATIONS - 1) { + tM = TIME_WHEN_NOT_CONVERGING * ecalPh1::Samp_Period; + //Negative error means that there was a problem with the CC + errOnTime = -targetTimePrecision_ / ecalPh1::Samp_Period; + } + + return -tM / ecalPh1::Samp_Period; +} + +FullSampleVector EcalUncalibRecHitTimingCCAlgo::interpolatePulse(const FullSampleVector& fullpulse, + const float time) const { + // t is in ns + int shift = time / ecalPh1::Samp_Period; + if (time < 0) + shift -= 1; + float tt = time / ecalPh1::Samp_Period - shift; + + FullSampleVector interpPulse; + // 2nd poly with avg + unsigned int numberOfSamples = fullpulse.size(); + auto facM1orP2 = 0.25 * tt * (tt - 1); + auto fac = (0.25 * (tt - 2) - 0.5 * (tt + 1)) * (tt - 1); + auto facP1 = (0.25 * (tt + 1) - 0.5 * (tt - 2)) * tt; + for (unsigned int i = 1; i < numberOfSamples - 2; ++i) { + float a = + facM1orP2 * fullpulse[i - 1] + fac * fullpulse[i] + facP1 * fullpulse[i + 1] + facM1orP2 * fullpulse[i + 2]; + if (a > 0) + interpPulse[i] = a; + else + interpPulse[i] = 0; + } + interpPulse[0] = facM1orP2 * fullpulse[0] + facP1 * fullpulse[1] + facM1orP2 * fullpulse[2]; + interpPulse[numberOfSamples - 2] = facM1orP2 * fullpulse[numberOfSamples - 3] + fac * fullpulse[numberOfSamples - 2] + + facP1 * fullpulse[numberOfSamples - 1]; + interpPulse[numberOfSamples - 1] = 2 * facM1orP2 * fullpulse[numberOfSamples - 2] - + 4 * facM1orP2 * fullpulse[numberOfSamples - 1] + + facP1 * fullpulse[numberOfSamples - 1]; + + FullSampleVector interpPulseShifted; + for (int i = 0; i < interpPulseShifted.size(); ++i) { + if (i + shift >= 0 && i + shift < interpPulse.size()) + interpPulseShifted[i] = interpPulse[i + shift]; + else + interpPulseShifted[i] = 0; + } + return interpPulseShifted; +} + +float EcalUncalibRecHitTimingCCAlgo::computeCC(const std::vector& samples, + const FullSampleVector& signalTemplate, + const float time) const { + constexpr int exclude = 1; + float powerSamples = 0.; + float powerTemplate = 0.; + float cc = 0.; + auto interpolated = interpolatePulse(signalTemplate, time); + for (int i = exclude; i < int(samples.size() - exclude); ++i) { + powerSamples += std::pow(samples[i], 2); + powerTemplate += std::pow(interpolated[i], 2); + cc += interpolated[i] * samples[i]; + } + + float denominator = std::sqrt(powerTemplate * powerSamples); + return cc / denominator; +} diff --git a/RecoLocalCalo/EcalRecProducers/BuildFile.xml b/RecoLocalCalo/EcalRecProducers/BuildFile.xml index 25939a2a69b8e..b77b79e9c1180 100644 --- a/RecoLocalCalo/EcalRecProducers/BuildFile.xml +++ b/RecoLocalCalo/EcalRecProducers/BuildFile.xml @@ -1,5 +1,7 @@ - + + + diff --git a/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationCommonKernels.cu b/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationCommonKernels.cu new file mode 100644 index 0000000000000..f1b1a53a78a30 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationCommonKernels.cu @@ -0,0 +1,486 @@ +#include +#include + +#include + +#include "CondFormats/EcalObjects/interface/EcalPulseCovariances.h" +#include "CondFormats/EcalObjects/interface/EcalPulseShapes.h" +#include "CondFormats/EcalObjects/interface/EcalSamplesCorrelation.h" +#include "DataFormats/EcalDigi/interface/EcalDataFrame.h" +#include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h" +#include "DataFormats/Math/interface/approx_exp.h" +#include "DataFormats/Math/interface/approx_log.h" +#include "FWCore/Utilities/interface/CMSUnrollLoop.h" + +#include "AmplitudeComputationCommonKernels.h" +#include "KernelHelpers.h" + +namespace ecal { + namespace multifit { + + /// + /// assume kernel launch configuration is + /// (MAXSAMPLES * nchannels, blocks) + /// + __global__ void kernel_prep_1d_and_initialize(EcalPulseShape const* shapes_in, + uint16_t const* digis_in_eb, + uint32_t const* dids_eb, + uint16_t const* digis_in_ee, + uint32_t const* dids_ee, + SampleVector* amplitudes, + SampleVector* amplitudesForMinimizationEB, + SampleVector* amplitudesForMinimizationEE, + SampleGainVector* gainsNoise, + float const* mean_x1, + float const* mean_x12, + float const* rms_x12, + float const* mean_x6, + float const* gain6Over1, + float const* gain12Over6, + bool* hasSwitchToGain6, + bool* hasSwitchToGain1, + bool* isSaturated, + ::ecal::reco::StorageScalarType* energiesEB, + ::ecal::reco::StorageScalarType* energiesEE, + ::ecal::reco::StorageScalarType* chi2EB, + ::ecal::reco::StorageScalarType* chi2EE, + ::ecal::reco::StorageScalarType* g_pedestalEB, + ::ecal::reco::StorageScalarType* g_pedestalEE, + uint32_t* dids_outEB, + uint32_t* dids_outEE, + uint32_t* flagsEB, + uint32_t* flagsEE, + char* acState, + BXVectorType* bxs, + uint32_t const offsetForHashes, + uint32_t const offsetForInputs, + bool const gainSwitchUseMaxSampleEB, + bool const gainSwitchUseMaxSampleEE, + int const nchannels) { + constexpr bool dynamicPedestal = false; //---- default to false, ok + constexpr int nsamples = EcalDataFrame::MAXSAMPLES; + constexpr int sample_max = 5; + constexpr int full_pulse_max = 9; + int const tx = threadIdx.x + blockIdx.x * blockDim.x; + int const nchannels_per_block = blockDim.x / nsamples; + int const ch = tx / nsamples; + // for accessing input arrays + int const inputCh = ch >= offsetForInputs ? ch - offsetForInputs : ch; + int const inputTx = ch >= offsetForInputs ? tx - offsetForInputs * 10 : tx; + // eb is first and then ee + auto const* digis_in = ch >= offsetForInputs ? digis_in_ee : digis_in_eb; + auto const* dids = ch >= offsetForInputs ? dids_ee : dids_eb; + int const sample = threadIdx.x % nsamples; + + // need to ref the right ptr + // macro is for clarity and safety +#define ARRANGE(var) auto* var = ch >= offsetForInputs ? var##EE : var##EB + ARRANGE(amplitudesForMinimization); + ARRANGE(energies); + ARRANGE(chi2); + ARRANGE(g_pedestal); + ARRANGE(dids_out); + ARRANGE(flags); +#undef ARRANGE + + if (ch < nchannels) { + // array of 10 x channels per block + // TODO: any other way of doing simple reduction + // assume bool is 1 byte, should be quite safe + extern __shared__ char shared_mem[]; + bool* shr_hasSwitchToGain6 = reinterpret_cast(shared_mem); + bool* shr_hasSwitchToGain1 = shr_hasSwitchToGain6 + nchannels_per_block * nsamples; + bool* shr_hasSwitchToGain0 = shr_hasSwitchToGain1 + nchannels_per_block * nsamples; + bool* shr_isSaturated = shr_hasSwitchToGain0 + nchannels_per_block * nsamples; + bool* shr_hasSwitchToGain0_tmp = shr_isSaturated + nchannels_per_block * nsamples; + char* shr_counts = reinterpret_cast(shr_hasSwitchToGain0_tmp) + nchannels_per_block * nsamples; + + // + // indices + // + auto const did = DetId{dids[inputCh]}; + auto const isBarrel = did.subdetId() == EcalBarrel; + // TODO offset for ee, 0 for eb + auto const hashedId = isBarrel ? ecal::reconstruction::hashedIndexEB(did.rawId()) + : offsetForHashes + ecal::reconstruction::hashedIndexEE(did.rawId()); + + // + // pulse shape template + + // will be used in the future for setting state + auto const rmsForChecking = rms_x12[hashedId]; + + // + // amplitudes + // + int const adc = ecal::mgpa::adc(digis_in[inputTx]); + int const gainId = ecal::mgpa::gainId(digis_in[inputTx]); + SampleVector::Scalar amplitude = 0.; + SampleVector::Scalar pedestal = 0.; + SampleVector::Scalar gainratio = 0.; + + // store into shared mem for initialization + shr_hasSwitchToGain6[threadIdx.x] = gainId == EcalMgpaBitwiseGain6; + shr_hasSwitchToGain1[threadIdx.x] = gainId == EcalMgpaBitwiseGain1; + shr_hasSwitchToGain0_tmp[threadIdx.x] = gainId == EcalMgpaBitwiseGain0; + shr_hasSwitchToGain0[threadIdx.x] = shr_hasSwitchToGain0_tmp[threadIdx.x]; + shr_counts[threadIdx.x] = 0; + __syncthreads(); + + // non-divergent branch (except for the last 4 threads) + if (threadIdx.x <= blockDim.x - 5) { + CMS_UNROLL_LOOP + for (int i = 0; i < 5; i++) + shr_counts[threadIdx.x] += shr_hasSwitchToGain0[threadIdx.x + i]; + } + shr_isSaturated[threadIdx.x] = shr_counts[threadIdx.x] == 5; + + // + // unrolled reductions + // + if (sample < 5) { + shr_hasSwitchToGain6[threadIdx.x] = + shr_hasSwitchToGain6[threadIdx.x] || shr_hasSwitchToGain6[threadIdx.x + 5]; + shr_hasSwitchToGain1[threadIdx.x] = + shr_hasSwitchToGain1[threadIdx.x] || shr_hasSwitchToGain1[threadIdx.x + 5]; + + // duplication of hasSwitchToGain0 in order not to + // introduce another syncthreads + shr_hasSwitchToGain0_tmp[threadIdx.x] = + shr_hasSwitchToGain0_tmp[threadIdx.x] || shr_hasSwitchToGain0_tmp[threadIdx.x + 5]; + } + __syncthreads(); + + if (sample < 2) { + // note, both threads per channel take value [3] twice to avoid another if + shr_hasSwitchToGain6[threadIdx.x] = shr_hasSwitchToGain6[threadIdx.x] || + shr_hasSwitchToGain6[threadIdx.x + 2] || + shr_hasSwitchToGain6[threadIdx.x + 3]; + shr_hasSwitchToGain1[threadIdx.x] = shr_hasSwitchToGain1[threadIdx.x] || + shr_hasSwitchToGain1[threadIdx.x + 2] || + shr_hasSwitchToGain1[threadIdx.x + 3]; + + shr_hasSwitchToGain0_tmp[threadIdx.x] = shr_hasSwitchToGain0_tmp[threadIdx.x] || + shr_hasSwitchToGain0_tmp[threadIdx.x + 2] || + shr_hasSwitchToGain0_tmp[threadIdx.x + 3]; + + // sample < 2 -> first 2 threads of each channel will be used here + // => 0 -> will compare 3 and 4 and put into 0 + // => 1 -> will compare 4 and 5 and put into 1 + shr_isSaturated[threadIdx.x] = shr_isSaturated[threadIdx.x + 3] || shr_isSaturated[threadIdx.x + 4]; + } + __syncthreads(); + + bool check_hasSwitchToGain0 = false; + + if (sample == 0) { + shr_hasSwitchToGain6[threadIdx.x] = + shr_hasSwitchToGain6[threadIdx.x] || shr_hasSwitchToGain6[threadIdx.x + 1]; + shr_hasSwitchToGain1[threadIdx.x] = + shr_hasSwitchToGain1[threadIdx.x] || shr_hasSwitchToGain1[threadIdx.x + 1]; + shr_hasSwitchToGain0_tmp[threadIdx.x] = + shr_hasSwitchToGain0_tmp[threadIdx.x] || shr_hasSwitchToGain0_tmp[threadIdx.x + 1]; + + hasSwitchToGain6[ch] = shr_hasSwitchToGain6[threadIdx.x]; + hasSwitchToGain1[ch] = shr_hasSwitchToGain1[threadIdx.x]; + + // set only for the threadIdx.x corresponding to sample==0 + check_hasSwitchToGain0 = shr_hasSwitchToGain0_tmp[threadIdx.x]; + + shr_isSaturated[threadIdx.x + 3] = shr_isSaturated[threadIdx.x] || shr_isSaturated[threadIdx.x + 1]; + isSaturated[ch] = shr_isSaturated[threadIdx.x + 3]; + } + + // TODO: w/o this sync, there is a race + // if (threadIdx == sample_max) below uses max sample thread, not for 0 sample + // check if we can remove it + __syncthreads(); + + // TODO: divergent branch + if (gainId == 0 || gainId == 3) { + pedestal = mean_x1[hashedId]; + gainratio = gain6Over1[hashedId] * gain12Over6[hashedId]; + gainsNoise[ch](sample) = 2; + } else if (gainId == 1) { + pedestal = mean_x12[hashedId]; + gainratio = 1.; + gainsNoise[ch](sample) = 0; + } else if (gainId == 2) { + pedestal = mean_x6[hashedId]; + gainratio = gain12Over6[hashedId]; + gainsNoise[ch](sample) = 1; + } + + // TODO: compile time constant -> branch should be non-divergent + if (dynamicPedestal) + amplitude = static_cast(adc) * gainratio; + else + amplitude = (static_cast(adc) - pedestal) * gainratio; + amplitudes[ch][sample] = amplitude; + +#ifdef ECAL_RECO_CUDA_DEBUG + printf("%d %d %d %d %f %f %f\n", tx, ch, sample, adc, amplitude, pedestal, gainratio); + if (adc == 0) + printf("adc is zero\n"); +#endif + + // + // initialization + // + amplitudesForMinimization[inputCh](sample) = 0; + bxs[ch](sample) = sample - 5; + + // select the thread for the max sample + //---> hardcoded above to be 5th sample, ok + if (sample == sample_max) { + // + // initialization + // + acState[ch] = static_cast(MinimizationState::NotFinished); + energies[inputCh] = 0; + chi2[inputCh] = 0; + g_pedestal[inputCh] = 0; + uint32_t flag = 0; + dids_out[inputCh] = did.rawId(); + + // start of this channel in shared mem + int const chStart = threadIdx.x - sample_max; + // thread for the max sample in shared mem + int const threadMax = threadIdx.x; + auto const gainSwitchUseMaxSample = isBarrel ? gainSwitchUseMaxSampleEB : gainSwitchUseMaxSampleEE; + + // this flag setting is applied to all of the cases + if (shr_hasSwitchToGain6[chStart]) + flag |= 0x1 << EcalUncalibratedRecHit::kHasSwitchToGain6; + if (shr_hasSwitchToGain1[chStart]) + flag |= 0x1 << EcalUncalibratedRecHit::kHasSwitchToGain1; + + // this corresponds to cpu branching on lastSampleBeforeSaturation + // likely false + if (check_hasSwitchToGain0) { + // assign for the case some sample having gainId == 0 + //energies[inputCh] = amplitudes[ch][sample_max]; + energies[inputCh] = amplitude; + + // check if samples before sample_max have true + bool saturated_before_max = false; + CMS_UNROLL_LOOP + for (char ii = 0; ii < 5; ii++) + saturated_before_max = saturated_before_max || shr_hasSwitchToGain0[chStart + ii]; + + // if saturation is in the max sample and not in the first 5 + if (!saturated_before_max && shr_hasSwitchToGain0[threadMax]) + energies[inputCh] = 49140; // 4095 * 12 (maximum ADC range * MultiGainPreAmplifier (MGPA) gain) + // This is the actual maximum range that is set when we saturate. + //---- AM FIXME : no pedestal subtraction??? + //It should be "(4095. - pedestal) * gainratio" + + // set state flag to terminate further processing of this channel + acState[ch] = static_cast(MinimizationState::Precomputed); + flag |= 0x1 << EcalUncalibratedRecHit::kSaturated; + flags[inputCh] = flag; + return; + } + + // according to cpu version + // auto max_amplitude = amplitudes[ch][sample_max]; + auto const max_amplitude = amplitude; + // according to cpu version + auto shape_value = shapes_in[hashedId].pdfval[full_pulse_max - 7]; + // note, no syncing as the same thread will be accessing here + bool hasGainSwitch = + shr_hasSwitchToGain6[chStart] || shr_hasSwitchToGain1[chStart] || shr_isSaturated[chStart + 3]; + + // pedestal is final unconditionally + g_pedestal[inputCh] = pedestal; + if (hasGainSwitch && gainSwitchUseMaxSample) { + // thread for sample=0 will access the right guys + energies[inputCh] = max_amplitude / shape_value; + acState[ch] = static_cast(MinimizationState::Precomputed); + flags[inputCh] = flag; + return; + } + + // this happens cause sometimes rms_x12 is 0... + // needs to be checkec why this is the case + // general case here is that noisecov is a Zero matrix + if (rmsForChecking == 0) { + acState[ch] = static_cast(MinimizationState::Precomputed); + flags[inputCh] = flag; + return; + } + + // for the case when no shortcuts were taken + flags[inputCh] = flag; + } + } + } + + /// + /// assume kernel launch configuration is + /// ([MAXSAMPLES, MAXSAMPLES], nchannels) + /// + __global__ void kernel_prep_2d(SampleGainVector const* gainNoise, + uint32_t const* dids_eb, + uint32_t const* dids_ee, + float const* rms_x12, + float const* rms_x6, + float const* rms_x1, + float const* gain12Over6, + float const* gain6Over1, + double const* G12SamplesCorrelationEB, + double const* G6SamplesCorrelationEB, + double const* G1SamplesCorrelationEB, + double const* G12SamplesCorrelationEE, + double const* G6SamplesCorrelationEE, + double const* G1SamplesCorrelationEE, + SampleMatrix* noisecov, + PulseMatrixType* pulse_matrix, + EcalPulseShape const* pulse_shape, + bool const* hasSwitchToGain6, + bool const* hasSwitchToGain1, + bool const* isSaturated, + uint32_t const offsetForHashes, + uint32_t const offsetForInputs) { + int const ch = blockIdx.x; + int const tx = threadIdx.x; + int const ty = threadIdx.y; + constexpr float addPedestalUncertainty = 0.f; + constexpr bool dynamicPedestal = false; + constexpr bool simplifiedNoiseModelForGainSwitch = true; //---- default is true + + // to access input arrays (ids and digis only) + int const inputCh = ch >= offsetForInputs ? ch - offsetForInputs : ch; + auto const* dids = ch >= offsetForInputs ? dids_ee : dids_eb; + + bool tmp0 = hasSwitchToGain6[ch]; + bool tmp1 = hasSwitchToGain1[ch]; + auto const did = DetId{dids[inputCh]}; + auto const isBarrel = did.subdetId() == EcalBarrel; + auto const hashedId = isBarrel ? ecal::reconstruction::hashedIndexEB(did.rawId()) + : offsetForHashes + ecal::reconstruction::hashedIndexEE(did.rawId()); + auto const G12SamplesCorrelation = isBarrel ? G12SamplesCorrelationEB : G12SamplesCorrelationEE; + auto const* G6SamplesCorrelation = isBarrel ? G6SamplesCorrelationEB : G6SamplesCorrelationEE; + auto const* G1SamplesCorrelation = isBarrel ? G1SamplesCorrelationEB : G1SamplesCorrelationEE; + bool tmp2 = isSaturated[ch]; + bool hasGainSwitch = tmp0 || tmp1 || tmp2; + auto const vidx = std::abs(ty - tx); + + // non-divergent branch for all threads per block + if (hasGainSwitch) { + // TODO: did not include simplified noise model + float noise_value = 0; + + // non-divergent branch - all threads per block + // TODO: all of these constants indicate that + // that these parts could be splitted into completely different + // kernels and run one of them only depending on the config + if (simplifiedNoiseModelForGainSwitch) { + int isample_max = 5; // according to cpu defs + int gainidx = gainNoise[ch][isample_max]; + + // non-divergent branches + if (gainidx == 0) + noise_value = rms_x12[hashedId] * rms_x12[hashedId] * G12SamplesCorrelation[vidx]; + if (gainidx == 1) + noise_value = gain12Over6[hashedId] * gain12Over6[hashedId] * rms_x6[hashedId] * rms_x6[hashedId] * + G6SamplesCorrelation[vidx]; + if (gainidx == 2) + noise_value = gain12Over6[hashedId] * gain12Over6[hashedId] * gain6Over1[hashedId] * gain6Over1[hashedId] * + rms_x1[hashedId] * rms_x1[hashedId] * G1SamplesCorrelation[vidx]; + if (!dynamicPedestal && addPedestalUncertainty > 0.f) + noise_value += addPedestalUncertainty * addPedestalUncertainty; + } else { + int gainidx = 0; + char mask = gainidx; + int pedestal = gainNoise[ch][ty] == mask ? 1 : 0; + // NB: gainratio is 1, that is why it does not appear in the formula + noise_value += rms_x12[hashedId] * rms_x12[hashedId] * pedestal * G12SamplesCorrelation[vidx]; + // non-divergent branch + if (!dynamicPedestal && addPedestalUncertainty > 0.f) { + noise_value += addPedestalUncertainty * addPedestalUncertainty * pedestal; // gainratio is 1 + } + + // + gainidx = 1; + mask = gainidx; + pedestal = gainNoise[ch][ty] == mask ? 1 : 0; + noise_value += gain12Over6[hashedId] * gain12Over6[hashedId] * rms_x6[hashedId] * rms_x6[hashedId] * + pedestal * G6SamplesCorrelation[vidx]; + // non-divergent branch + if (!dynamicPedestal && addPedestalUncertainty > 0.f) { + noise_value += gain12Over6[hashedId] * gain12Over6[hashedId] * addPedestalUncertainty * + addPedestalUncertainty * pedestal; + } + + // + gainidx = 2; + mask = gainidx; + pedestal = gainNoise[ch][ty] == mask ? 1 : 0; + float tmp = gain6Over1[hashedId] * gain12Over6[hashedId]; + noise_value += tmp * tmp * rms_x1[hashedId] * rms_x1[hashedId] * pedestal * G1SamplesCorrelation[vidx]; + // non-divergent branch + if (!dynamicPedestal && addPedestalUncertainty > 0.f) { + noise_value += tmp * tmp * addPedestalUncertainty * addPedestalUncertainty * pedestal; + } + } + + noisecov[ch](ty, tx) = noise_value; + } else { + auto rms = rms_x12[hashedId]; + float noise_value = rms * rms * G12SamplesCorrelation[vidx]; + if (!dynamicPedestal && addPedestalUncertainty > 0.f) { + //---- add fully correlated component to noise covariance to inflate pedestal uncertainty + noise_value += addPedestalUncertainty * addPedestalUncertainty; + } + noisecov[ch](ty, tx) = noise_value; + } + + // pulse matrix + int const posToAccess = 9 - tx + ty; // see cpu for reference + float const value = posToAccess >= 7 ? pulse_shape[hashedId].pdfval[posToAccess - 7] : 0; + pulse_matrix[ch](ty, tx) = value; + } + + __global__ void kernel_permute_results(SampleVector* amplitudes, + BXVectorType const* activeBXs, + ::ecal::reco::StorageScalarType* energies, + char const* acState, + int const nchannels) { + // constants + constexpr int nsamples = EcalDataFrame::MAXSAMPLES; + + // indices + int const tx = threadIdx.x + blockIdx.x * blockDim.x; + int const ch = tx / nsamples; + int const sampleidx = tx % nsamples; // this is to address activeBXs + + if (ch >= nchannels) + return; + + // channels that have amplitude precomputed do not need results to be permuted + auto const state = static_cast(acState[ch]); + if (state == MinimizationState::Precomputed) + return; + + // configure shared memory and cp into it + extern __shared__ char smem[]; + SampleVector::Scalar* values = reinterpret_cast(smem); + values[threadIdx.x] = amplitudes[ch](sampleidx); + __syncthreads(); + + // get the sample for this bx + auto const sample = static_cast(activeBXs[ch](sampleidx)) + 5; + + // store back to global + amplitudes[ch](sample) = values[threadIdx.x]; + + // store sample 5 separately + // only for the case when minimization was performed + // not for cases with precomputed amplitudes + if (sample == 5) + energies[ch] = values[threadIdx.x]; + } + + } // namespace multifit +} // namespace ecal diff --git a/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationCommonKernels.h b/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationCommonKernels.h new file mode 100644 index 0000000000000..479c623e83f62 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationCommonKernels.h @@ -0,0 +1,104 @@ +#ifndef RecoLocalCalo_EcalRecProducers_plugins_AmplitudeComputationCommonKernels_h +#define RecoLocalCalo_EcalRecProducers_plugins_AmplitudeComputationCommonKernels_h + +#include "Common.h" +#include "DeclsForKernels.h" +#include "EigenMatrixTypes_gpu.h" + +class EcalPulseShape; +// this flag setting is applied to all of the cases +class EcalPulseCovariance; +class EcalUncalibratedRecHit; + +namespace ecal { + namespace multifit { + + /// + /// assume kernel launch configuration is + /// (MAXSAMPLES * nchannels, blocks) + /// TODO: is there a point to split this kernel further to separate reductions + /// + __global__ void kernel_prep_1d_and_initialize(EcalPulseShape const* shapes_in, + uint16_t const* digis_in_eb, + uint32_t const* dids_eb, + uint16_t const* digis_in_ee, + uint32_t const* dids_ee, + SampleVector* amplitudes, + SampleVector* amplitudesForMinimizationEB, + SampleVector* amplitudesForMinimizationEE, + SampleGainVector* gainsNoise, + float const* mean_x1, + float const* mean_x12, + float const* rms_x12, + float const* mean_x6, + float const* gain6Over1, + float const* gain12Over6, + bool* hasSwitchToGain6, + bool* hasSwitchToGain1, + bool* isSaturated, + ::ecal::reco::StorageScalarType* energiesEB, + ::ecal::reco::StorageScalarType* energiesEE, + ::ecal::reco::StorageScalarType* chi2EB, + ::ecal::reco::StorageScalarType* chi2EE, + ::ecal::reco::StorageScalarType* pedestalEB, + ::ecal::reco::StorageScalarType* pedestalEE, + uint32_t* dids_outEB, + uint32_t* dids_outEE, + uint32_t* flagsEB, + uint32_t* flagsEE, + char* acState, + BXVectorType* bxs, + uint32_t const offsetForHashes, + uint32_t const offsetForInputs, + bool const gainSwitchUseMaxSampleEB, + bool const gainSwitchUseMaxSampleEE, + int const nchannels); + + /// + /// assume kernel launch configuration is + /// ([MAXSAMPLES, MAXSAMPLES], nchannels) + /// + __global__ void kernel_prep_2d(SampleGainVector const* gainNoise, + uint32_t const* dids_eb, + uint32_t const* dids_ee, + float const* rms_x12, + float const* rms_x6, + float const* rms_x1, + float const* gain12Over6, + float const* gain6Over1, + double const* G12SamplesCorrelationEB, + double const* G6SamplesCorrelationEB, + double const* G1SamplesCorrelationEB, + double const* G12SamplesCorrelationEE, + double const* G6SamplesCorrelationEE, + double const* G1SamplesCorrelationEE, + SampleMatrix* noisecov, + PulseMatrixType* pulse_matrix, + EcalPulseShape const* pulse_shape, + bool const* hasSwitchToGain6, + bool const* hasSwitchToGain1, + bool const* isSaturated, + uint32_t const offsetForHashes, + uint32_t const offsetForInputs); + + __global__ void kernel_permute_results(SampleVector* amplitudes, + BXVectorType const* activeBXs, + ::ecal::reco::StorageScalarType* energies, + char const* acState, + int const nchannels); + +/// +/// Build an Ecal RecHit. +/// TODO: Use SoA data structures on the host directly +/// the reason for removing this from minimize kernel is to isolate the minimize + +/// again, building an aos rec hit involves strides... -> bad memory access pattern +/// +#ifdef RUN_BUILD_AOS_RECHIT + __global__ void kernel_build_rechit( + float const* energies, float const* chi2s, uint32_t* dids, EcalUncalibratedRecHit* rechits, int nchannels); +#endif // RUN_BUILD_AOS_RECHIT + + } // namespace multifit +} // namespace ecal + +#endif // RecoLocalCalo_EcalRecProducers_plugins_AmplitudeComputationCommonKernels_h diff --git a/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationKernels.cu b/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationKernels.cu new file mode 100644 index 0000000000000..e5eff86d15ec7 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationKernels.cu @@ -0,0 +1,305 @@ +#include +#include + +#include + +#include "CondFormats/EcalObjects/interface/EcalPulseCovariances.h" +#include "CondFormats/EcalObjects/interface/EcalPulseShapes.h" +#include "DataFormats/EcalDigi/interface/EcalDataFrame.h" +#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" +#include "DataFormats/Math/interface/approx_exp.h" +#include "DataFormats/Math/interface/approx_log.h" +#include "FWCore/Utilities/interface/CMSUnrollLoop.h" + +#include "AmplitudeComputationCommonKernels.h" +#include "AmplitudeComputationKernels.h" +#include "KernelHelpers.h" + +namespace ecal { + namespace multifit { + + template + __device__ __forceinline__ bool update_covariance(EcalPulseCovariance const& pulse_covariance, + MatrixType& inverse_cov, + SampleVector const& amplitudes) { + constexpr int nsamples = SampleVector::RowsAtCompileTime; + constexpr int npulses = BXVectorType::RowsAtCompileTime; + + CMS_UNROLL_LOOP + for (unsigned int ipulse = 0; ipulse < npulses; ipulse++) { + auto const amplitude = amplitudes.coeff(ipulse); + if (amplitude == 0) + continue; + + // FIXME: ipulse - 5 -> ipulse - firstOffset + int bx = ipulse - 5; + int first_sample_t = std::max(0, bx + 3); + int offset = -3 - bx; + + auto const value_sq = amplitude * amplitude; + + for (int col = first_sample_t; col < nsamples; col++) { + for (int row = col; row < nsamples; row++) { + inverse_cov(row, col) += value_sq * __ldg(&pulse_covariance.covval[row + offset][col + offset]); + } + } + } + + return true; + } + + /// + /// launch ctx parameters are (nchannels / block, blocks) + /// TODO: trivial impl for now, there must be a way to improve + /// + /// Conventions: + /// - amplitudes -> solution vector, what we are fitting for + /// - samples -> raw detector responses + /// - passive constraint - satisfied constraint + /// - active constraint - unsatisfied (yet) constraint + /// + __global__ void kernel_minimize(uint32_t const* dids_eb, + uint32_t const* dids_ee, + SampleMatrix const* __restrict__ noisecov, + EcalPulseCovariance const* __restrict__ pulse_covariance, + BXVectorType* bxs, + SampleVector const* __restrict__ samples, + SampleVector* amplitudesEB, + SampleVector* amplitudesEE, + PulseMatrixType const* __restrict__ pulse_matrix, + ::ecal::reco::StorageScalarType* chi2sEB, + ::ecal::reco::StorageScalarType* chi2sEE, + ::ecal::reco::StorageScalarType* energiesEB, + ::ecal::reco::StorageScalarType* energiesEE, + char* acState, + int nchannels, + int max_iterations, + uint32_t const offsetForHashes, + uint32_t const offsetForInputs) { + // FIXME: ecal has 10 samples and 10 pulses.... + // but this needs to be properly treated and renamed everywhere + constexpr auto NSAMPLES = SampleMatrix::RowsAtCompileTime; + constexpr auto NPULSES = SampleMatrix::ColsAtCompileTime; + static_assert(NSAMPLES == NPULSES); + + using DataType = SampleVector::Scalar; + + extern __shared__ char shrmem[]; + DataType* shrMatrixLForFnnlsStorage = + reinterpret_cast(shrmem) + calo::multifit::MapSymM::total * threadIdx.x; + DataType* shrAtAStorage = reinterpret_cast(shrmem) + + calo::multifit::MapSymM::total * (threadIdx.x + blockDim.x); + + // channel + int idx = threadIdx.x + blockDim.x * blockIdx.x; + +// ref the right ptr +#define ARRANGE(var) auto* var = idx >= offsetForInputs ? var##EE : var##EB + ARRANGE(amplitudes); + ARRANGE(chi2s); + ARRANGE(energies); +#undef ARRANGE + + if (idx < nchannels) { + if (static_cast(acState[idx]) == MinimizationState::Precomputed) + return; + + // get the hash + int const inputCh = idx >= offsetForInputs ? idx - offsetForInputs : idx; + auto const* dids = idx >= offsetForInputs ? dids_ee : dids_eb; + auto const did = DetId{dids[inputCh]}; + auto const isBarrel = did.subdetId() == EcalBarrel; + auto const hashedId = isBarrel ? ecal::reconstruction::hashedIndexEB(did.rawId()) + : offsetForHashes + ecal::reconstruction::hashedIndexEE(did.rawId()); + + // inits + int iter = 0; + int npassive = 0; + + calo::multifit::ColumnVector pulseOffsets; + CMS_UNROLL_LOOP + for (int i = 0; i < NPULSES; ++i) + pulseOffsets(i) = i; + + calo::multifit::ColumnVector resultAmplitudes; + CMS_UNROLL_LOOP + for (int counter = 0; counter < NPULSES; counter++) + resultAmplitudes(counter) = 0; + + // inits + //SampleDecompLLT covariance_decomposition; + //SampleMatrix inverse_cov; + // SampleVector::Scalar chi2 = 0, chi2_now = 0; + float chi2 = 0, chi2_now = 0; + + // loop until ocnverge + while (true) { + if (iter >= max_iterations) + break; + + //inverse_cov = noisecov[idx]; + //DataType covMatrixStorage[MapSymM::total]; + DataType* covMatrixStorage = shrMatrixLForFnnlsStorage; + calo::multifit::MapSymM covMatrix{covMatrixStorage}; + int counter = 0; + CMS_UNROLL_LOOP + for (int col = 0; col < NSAMPLES; col++) { + CMS_UNROLL_LOOP + for (int row = col; row < NSAMPLES; row++) + covMatrixStorage[counter++] = __ldg(&noisecov[idx].coeffRef(row, col)); + } + update_covariance(pulse_covariance[hashedId], covMatrix, resultAmplitudes); + + // compute actual covariance decomposition + //covariance_decomposition.compute(inverse_cov); + //auto const& matrixL = covariance_decomposition.matrixL(); + DataType matrixLStorage[calo::multifit::MapSymM::total]; + calo::multifit::MapSymM matrixL{matrixLStorage}; + calo::multifit::compute_decomposition_unrolled(matrixL, covMatrix); + + // L * A = P + calo::multifit::ColMajorMatrix A; + calo::multifit::solve_forward_subst_matrix(A, pulse_matrix[idx], matrixL); + + // L b = s + float reg_b[NSAMPLES]; + calo::multifit::solve_forward_subst_vector(reg_b, samples[idx], matrixL); + + // FIXME: shared mem + //DataType AtAStorage[MapSymM::total]; + calo::multifit::MapSymM AtA{shrAtAStorage}; + //SampleMatrix AtA; + SampleVector Atb; + CMS_UNROLL_LOOP + for (int icol = 0; icol < NPULSES; icol++) { + float reg_ai[NSAMPLES]; + + // load column icol + CMS_UNROLL_LOOP + for (int counter = 0; counter < NSAMPLES; counter++) + reg_ai[counter] = A(counter, icol); + + // compute diagoanl + float sum = 0.f; + CMS_UNROLL_LOOP + for (int counter = 0; counter < NSAMPLES; counter++) + sum += reg_ai[counter] * reg_ai[counter]; + + // store + AtA(icol, icol) = sum; + + // go thru the other columns + CMS_UNROLL_LOOP + for (int j = icol + 1; j < NPULSES; j++) { + // load column j + float reg_aj[NSAMPLES]; + CMS_UNROLL_LOOP + for (int counter = 0; counter < NSAMPLES; counter++) + reg_aj[counter] = A(counter, j); + + // accum + float sum = 0.f; + CMS_UNROLL_LOOP + for (int counter = 0; counter < NSAMPLES; counter++) + sum += reg_aj[counter] * reg_ai[counter]; + + // store + //AtA(icol, j) = sum; + AtA(j, icol) = sum; + } + + // Atb accum + float sum_atb = 0.f; + CMS_UNROLL_LOOP + for (int counter = 0; counter < NSAMPLES; counter++) + sum_atb += reg_ai[counter] * reg_b[counter]; + + // store atb + Atb(icol) = sum_atb; + } + + // FIXME: shared mem + //DataType matrixLForFnnlsStorage[MapSymM::total]; + calo::multifit::MapSymM matrixLForFnnls{shrMatrixLForFnnlsStorage}; + + calo::multifit::fnnls(AtA, + Atb, + //amplitudes[idx], + resultAmplitudes, + npassive, + pulseOffsets, + matrixLForFnnls, + 1e-11, + 500, + 16, + 2); + + calo::multifit::calculateChiSq(matrixL, pulse_matrix[idx], resultAmplitudes, samples[idx], chi2_now); + + auto deltachi2 = chi2_now - chi2; + chi2 = chi2_now; + + if (std::abs(deltachi2) < 1e-3) + break; + + //---- AM: TEST + //---- it was 3 lines above, now here as in the CPU version + ++iter; + } + + // store to global output values + // FIXME: amplitudes are used in global directly + chi2s[inputCh] = chi2; + energies[inputCh] = resultAmplitudes(5); + + CMS_UNROLL_LOOP + for (int counter = 0; counter < NPULSES; counter++) + amplitudes[inputCh](counter) = resultAmplitudes(counter); + } + } + + namespace v1 { + + void minimization_procedure(EventInputDataGPU const& eventInputGPU, + EventOutputDataGPU& eventOutputGPU, + EventDataForScratchGPU& scratch, + ConditionsProducts const& conditions, + ConfigurationParameters const& configParameters, + cudaStream_t cudaStream) { + using DataType = SampleVector::Scalar; + unsigned int totalChannels = eventInputGPU.ebDigis.size + eventInputGPU.eeDigis.size; + // unsigned int threads_min = conf.threads.x; + // TODO: configure from python + unsigned int threads_min = configParameters.kernelMinimizeThreads[0]; + unsigned int blocks_min = threads_min > totalChannels ? 1 : (totalChannels + threads_min - 1) / threads_min; + uint32_t const offsetForHashes = conditions.offsetForHashes; + uint32_t const offsetForInputs = eventInputGPU.ebDigis.size; + auto const nbytesShared = 2 * threads_min * + calo::multifit::MapSymM::total * + sizeof(DataType); + kernel_minimize<<>>( + eventInputGPU.ebDigis.ids.get(), + eventInputGPU.eeDigis.ids.get(), + (SampleMatrix*)scratch.noisecov.get(), + conditions.pulseCovariances.values, + (BXVectorType*)scratch.activeBXs.get(), + (SampleVector*)scratch.samples.get(), + (SampleVector*)eventOutputGPU.recHitsEB.amplitudesAll.get(), + (SampleVector*)eventOutputGPU.recHitsEE.amplitudesAll.get(), + (PulseMatrixType*)scratch.pulse_matrix.get(), + eventOutputGPU.recHitsEB.chi2.get(), + eventOutputGPU.recHitsEE.chi2.get(), + eventOutputGPU.recHitsEB.amplitude.get(), + eventOutputGPU.recHitsEE.amplitude.get(), + scratch.acState.get(), + totalChannels, + 50, + offsetForHashes, + offsetForInputs); + cudaCheck(cudaGetLastError()); + } + + } // namespace v1 + + } // namespace multifit +} // namespace ecal diff --git a/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationKernels.h b/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationKernels.h new file mode 100644 index 0000000000000..b8202f75b653b --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationKernels.h @@ -0,0 +1,29 @@ +#ifndef RecoLocalCalo_EcalRecProducers_plugins_AmplitudeComputationKernels_h +#define RecoLocalCalo_EcalRecProducers_plugins_AmplitudeComputationKernels_h + +#include "Common.h" +#include "DeclsForKernels.h" +#include "EigenMatrixTypes_gpu.h" + +class EcalPulseShape; +class EcalPulseCovariance; +class EcalUncalibratedRecHit; + +namespace ecal { + namespace multifit { + + namespace v1 { + + void minimization_procedure(EventInputDataGPU const& eventInputGPU, + EventOutputDataGPU& eventOutputGPU, + EventDataForScratchGPU& scratch, + ConditionsProducts const& conditions, + ConfigurationParameters const& configParameters, + cudaStream_t cudaStream); + + } + + } // namespace multifit +} // namespace ecal + +#endif // RecoLocalCalo_EcalRecProducers_plugins_AmplitudeComputationKernels_h diff --git a/RecoLocalCalo/EcalRecProducers/plugins/BuildFile.xml b/RecoLocalCalo/EcalRecProducers/plugins/BuildFile.xml index 25fe21603e864..61eed4689fd20 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/BuildFile.xml +++ b/RecoLocalCalo/EcalRecProducers/plugins/BuildFile.xml @@ -1,18 +1,22 @@ - - - - - - + + + + + + - - - + + + + + + - + - + + diff --git a/RecoLocalCalo/EcalRecProducers/plugins/Common.h b/RecoLocalCalo/EcalRecProducers/plugins/Common.h new file mode 100644 index 0000000000000..55f5f613ed356 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/Common.h @@ -0,0 +1,17 @@ +#ifndef RecoLocalCalo_EcalRecProducers_plugins_Common_h +#define RecoLocalCalo_EcalRecProducers_plugins_Common_h + +// a workaround for std::abs not being a constexpr function +namespace ecal { + + // temporary + namespace mgpa { + + constexpr int adc(uint16_t sample) { return sample & 0xfff; } + constexpr int gainId(uint16_t sample) { return (sample >> 12) & 0x3; } + + } // namespace mgpa + +} // namespace ecal + +#endif // RecoLocalCalo_EcalRecProducers_plugins_Common_h diff --git a/RecoLocalCalo/EcalRecProducers/plugins/DeclsForKernels.h b/RecoLocalCalo/EcalRecProducers/plugins/DeclsForKernels.h new file mode 100644 index 0000000000000..cac63b6b30112 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/DeclsForKernels.h @@ -0,0 +1,325 @@ +#ifndef RecoLocalCalo_EcalRecProducers_plugins_DeclsForKernels_h +#define RecoLocalCalo_EcalRecProducers_plugins_DeclsForKernels_h + +#include + +#include +#include + +#include "CUDADataFormats/EcalDigi/interface/DigisCollection.h" +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalRecHit.h" +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalUncalibratedRecHit.h" +#include "CUDADataFormats/EcalRecHitSoA/interface/RecoTypes.h" +#include "CondFormats/EcalObjects/interface/EcalChannelStatus.h" +#include "CondFormats/EcalObjects/interface/EcalChannelStatusCode.h" +#include "CondFormats/EcalObjects/interface/EcalGainRatios.h" +#include "CondFormats/EcalObjects/interface/EcalPedestals.h" +#include "CondFormats/EcalObjects/interface/EcalTimeBiasCorrections.h" +#include "CondFormats/EcalObjects/interface/EcalTimeOffsetConstant.h" +#include "CondFormats/EcalObjects/interface/EcalWeightSet.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalGainRatiosGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalIntercalibConstantsGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosRefGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAlphasGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLinearCorrectionsGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalMultifitParametersGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalPedestalsGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalPulseCovariancesGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalPulseShapesGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalRechitADCToGeVConstantGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalRechitChannelStatusGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSamplesCorrelationGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalTimeBiasCorrectionsGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalTimeCalibConstantsGPU.h" + +#include "EigenMatrixTypes_gpu.h" + +struct EcalPulseShape; +class EcalSampleMask; +class EcalTimeBiasCorrections; +struct EcalPulseCovariance; +class EcalDigiCollection; +class EcalXtalGroupId; +class EcalSamplesCorrelation; +class EBDigiCollection; +class EEDigiCollection; + +namespace ecal { + namespace multifit { + + enum class TimeComputationState : char { NotFinished = 0, Finished = 1 }; + enum class MinimizationState : char { + NotFinished = 0, + Finished = 1, + Precomputed = 2, + }; + + // + struct EventInputDataGPU { + ecal::DigisCollection const& ebDigis; + ecal::DigisCollection const& eeDigis; + }; + + // parameters have a fixed type + // Can we go by with single precision + struct ConfigurationParameters { + using type = double; + // device ptrs + type *amplitudeFitParametersEB = nullptr, *amplitudeFitParametersEE = nullptr; + + uint32_t timeFitParametersSizeEB, timeFitParametersSizeEE; + // device ptrs + type *timeFitParametersEB = nullptr, *timeFitParametersEE = nullptr; + + type timeFitLimitsFirstEB, timeFitLimitsFirstEE; + type timeFitLimitsSecondEB, timeFitLimitsSecondEE; + + type timeConstantTermEB, timeConstantTermEE; + + type timeNconstEB, timeNconstEE; + + type amplitudeThreshEE, amplitudeThreshEB; + + type outOfTimeThreshG12pEB, outOfTimeThreshG12mEB; + type outOfTimeThreshG12pEE, outOfTimeThreshG12mEE; + type outOfTimeThreshG61pEE, outOfTimeThreshG61mEE; + type outOfTimeThreshG61pEB, outOfTimeThreshG61mEB; + + std::array kernelMinimizeThreads; + + bool shouldRunTimingComputation; + + uint32_t maxNumberHitsEB; + uint32_t maxNumberHitsEE; + }; + + struct EventOutputDataGPU { + UncalibratedRecHit<::calo::common::DevStoragePolicy> recHitsEB, recHitsEE; + + void allocate(ConfigurationParameters const& configParameters, cudaStream_t cudaStream) { + auto const sizeEB = configParameters.maxNumberHitsEB; + recHitsEB.amplitudesAll = cms::cuda::make_device_unique( + sizeEB * EcalDataFrame::MAXSAMPLES, cudaStream); + recHitsEB.amplitude = cms::cuda::make_device_unique(sizeEB, cudaStream); + recHitsEB.chi2 = cms::cuda::make_device_unique(sizeEB, cudaStream); + recHitsEB.pedestal = cms::cuda::make_device_unique(sizeEB, cudaStream); + + if (configParameters.shouldRunTimingComputation) { + recHitsEB.jitter = cms::cuda::make_device_unique(sizeEB, cudaStream); + recHitsEB.jitterError = cms::cuda::make_device_unique(sizeEB, cudaStream); + } + + recHitsEB.did = cms::cuda::make_device_unique(sizeEB, cudaStream); + recHitsEB.flags = cms::cuda::make_device_unique(sizeEB, cudaStream); + + auto const sizeEE = configParameters.maxNumberHitsEE; + recHitsEE.amplitudesAll = cms::cuda::make_device_unique( + sizeEE * EcalDataFrame::MAXSAMPLES, cudaStream); + recHitsEE.amplitude = cms::cuda::make_device_unique(sizeEE, cudaStream); + recHitsEE.chi2 = cms::cuda::make_device_unique(sizeEE, cudaStream); + recHitsEE.pedestal = cms::cuda::make_device_unique(sizeEE, cudaStream); + + if (configParameters.shouldRunTimingComputation) { + recHitsEE.jitter = cms::cuda::make_device_unique(sizeEE, cudaStream); + recHitsEE.jitterError = cms::cuda::make_device_unique(sizeEE, cudaStream); + } + + recHitsEE.did = cms::cuda::make_device_unique(sizeEE, cudaStream); + recHitsEE.flags = cms::cuda::make_device_unique(sizeEE, cudaStream); + } + }; + + template + constexpr auto getLength() -> uint32_t { + return EigenM::RowsAtCompileTime * EigenM::ColsAtCompileTime; + } + + struct EventDataForScratchGPU { + using SVT = SampleVector::Scalar; + using SGVT = SampleGainVector::Scalar; + using SMT = SampleMatrix::Scalar; + using PMT = PulseMatrixType::Scalar; + using BXVT = BXVectorType::Scalar; + + cms::cuda::device::unique_ptr samples; + cms::cuda::device::unique_ptr gainsNoise; + + cms::cuda::device::unique_ptr noisecov; + cms::cuda::device::unique_ptr pulse_matrix; + cms::cuda::device::unique_ptr activeBXs; + cms::cuda::device::unique_ptr acState; + + cms::cuda::device::unique_ptr hasSwitchToGain6, hasSwitchToGain1, isSaturated; + + cms::cuda::device::unique_ptr sample_values, sample_value_errors; + cms::cuda::device::unique_ptr useless_sample_values; + cms::cuda::device::unique_ptr chi2sNullHypot; + cms::cuda::device::unique_ptr sum0sNullHypot; + cms::cuda::device::unique_ptr sumAAsNullHypot; + cms::cuda::device::unique_ptr pedestal_nums; + cms::cuda::device::unique_ptr tMaxAlphaBetas, tMaxErrorAlphaBetas; + cms::cuda::device::unique_ptr accTimeMax, accTimeWgt; + cms::cuda::device::unique_ptr ampMaxAlphaBeta, ampMaxError; + cms::cuda::device::unique_ptr timeMax, timeError; + cms::cuda::device::unique_ptr tcState; + + void allocate(ConfigurationParameters const& configParameters, cudaStream_t cudaStream) { + constexpr auto svlength = getLength(); + constexpr auto sgvlength = getLength(); + constexpr auto smlength = getLength(); + constexpr auto pmlength = getLength(); + constexpr auto bxvlength = getLength(); + auto const size = configParameters.maxNumberHitsEB + configParameters.maxNumberHitsEE; + + auto alloc = [cudaStream](auto& var, uint32_t size) { + using element_type = typename std::remove_reference_t::element_type; + var = cms::cuda::make_device_unique(size, cudaStream); + }; + + alloc(samples, size * svlength); + alloc(gainsNoise, size * sgvlength); + + alloc(noisecov, size * smlength); + alloc(pulse_matrix, size * pmlength); + alloc(activeBXs, size * bxvlength); + alloc(acState, size); + + alloc(hasSwitchToGain6, size); + alloc(hasSwitchToGain1, size); + alloc(isSaturated, size); + + if (configParameters.shouldRunTimingComputation) { + alloc(sample_values, size * svlength); + alloc(sample_value_errors, size * svlength); + alloc(useless_sample_values, size * EcalDataFrame::MAXSAMPLES); + alloc(chi2sNullHypot, size); + alloc(sum0sNullHypot, size); + alloc(sumAAsNullHypot, size); + alloc(pedestal_nums, size); + + alloc(tMaxAlphaBetas, size); + alloc(tMaxErrorAlphaBetas, size); + alloc(accTimeMax, size); + alloc(accTimeWgt, size); + alloc(ampMaxAlphaBeta, size); + alloc(ampMaxError, size); + alloc(timeMax, size); + alloc(timeError, size); + alloc(tcState, size); + } + } + }; + + // const refs products to conditions + struct ConditionsProducts { + EcalPedestalsGPU::Product const& pedestals; + EcalGainRatiosGPU::Product const& gainRatios; + EcalPulseShapesGPU::Product const& pulseShapes; + EcalPulseCovariancesGPU::Product const& pulseCovariances; + EcalSamplesCorrelationGPU::Product const& samplesCorrelation; + EcalTimeBiasCorrectionsGPU::Product const& timeBiasCorrections; + EcalTimeCalibConstantsGPU::Product const& timeCalibConstants; + EcalSampleMask const& sampleMask; + EcalTimeOffsetConstant const& timeOffsetConstant; + uint32_t offsetForHashes; + EcalMultifitParametersGPU::Product const& multifitParameters; + }; + + struct xyz { + int x, y, z; + }; + + struct conf_data { + xyz threads; + bool runV1; + cudaStream_t cuStream; + }; + + } // namespace multifit +} // namespace ecal + +// +// ECAL Rechit producer +// + +namespace ecal { + namespace rechit { + + // parameters that are read in the configuration file for rechit producer + struct ConfigurationParameters { + // device ptrs + int* ChannelStatusToBeExcluded = nullptr; + uint32_t ChannelStatusToBeExcludedSize; + + bool killDeadChannels; + + bool recoverEBIsolatedChannels; + bool recoverEEIsolatedChannels; + bool recoverEBVFE; + bool recoverEEVFE; + bool recoverEBFE; + bool recoverEEFE; + + float EBLaserMIN; + float EELaserMIN; + float EBLaserMAX; + float EELaserMAX; + + int* expanded_v_DB_reco_flags; + uint32_t* expanded_Sizes_v_DB_reco_flags; + uint32_t* expanded_flagbit_v_DB_reco_flags; + uint32_t expanded_v_DB_reco_flagsSize; + + uint32_t flagmask; + uint32_t maxNumberHitsEB; + uint32_t maxNumberHitsEE; + }; + + struct EventOutputDataGPU { + RecHit<::calo::common::DevStoragePolicy> recHitsEB, recHitsEE; + + void allocate(ConfigurationParameters const& configParameters, cudaStream_t cudaStream) { + //---- configParameters -> needed only to decide if to save the timing information or not + auto const sizeEB = configParameters.maxNumberHitsEB; + recHitsEB.energy = cms::cuda::make_device_unique<::ecal::reco::StorageScalarType[]>(sizeEB, cudaStream); + recHitsEB.time = cms::cuda::make_device_unique<::ecal::reco::StorageScalarType[]>(sizeEB, cudaStream); + recHitsEB.chi2 = cms::cuda::make_device_unique<::ecal::reco::StorageScalarType[]>(sizeEB, cudaStream); + recHitsEB.flagBits = cms::cuda::make_device_unique(sizeEB, cudaStream); + recHitsEB.extra = cms::cuda::make_device_unique(sizeEB, cudaStream); + recHitsEB.did = cms::cuda::make_device_unique(sizeEB, cudaStream); + + auto const sizeEE = configParameters.maxNumberHitsEE; + recHitsEE.energy = cms::cuda::make_device_unique<::ecal::reco::StorageScalarType[]>(sizeEE, cudaStream); + recHitsEE.time = cms::cuda::make_device_unique<::ecal::reco::StorageScalarType[]>(sizeEE, cudaStream); + recHitsEE.chi2 = cms::cuda::make_device_unique<::ecal::reco::StorageScalarType[]>(sizeEE, cudaStream); + recHitsEE.flagBits = cms::cuda::make_device_unique(sizeEE, cudaStream); + recHitsEE.extra = cms::cuda::make_device_unique(sizeEE, cudaStream); + recHitsEE.did = cms::cuda::make_device_unique(sizeEE, cudaStream); + } + }; + + struct EventInputDataGPU { + ecal::UncalibratedRecHit const& ebUncalibRecHits; + ecal::UncalibratedRecHit const& eeUncalibRecHits; + }; + + // const refs products to conditions + struct ConditionsProducts { + EcalRechitADCToGeVConstantGPU::Product const& ADCToGeV; + EcalIntercalibConstantsGPU::Product const& Intercalib; + EcalRechitChannelStatusGPU::Product const& ChannelStatus; + + EcalLaserAPDPNRatiosGPU::Product const& LaserAPDPNRatios; + EcalLaserAPDPNRatiosRefGPU::Product const& LaserAPDPNRatiosRef; + EcalLaserAlphasGPU::Product const& LaserAlphas; + EcalLinearCorrectionsGPU::Product const& LinearCorrections; + + uint32_t offsetForHashes; + }; + + } // namespace rechit +} // namespace ecal + +#endif // RecoLocalCalo_EcalRecProducers_plugins_DeclsForKernels_h diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalCPURecHitProducer.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalCPURecHitProducer.cc new file mode 100644 index 0000000000000..3de6b62898925 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalCPURecHitProducer.cc @@ -0,0 +1,168 @@ +//#define ECAL_RECO_CUDA_DEBUG + +#ifdef ECAL_RECO_CUDA_DEBUG +#include +#endif + +// framework +#include "FWCore/Framework/interface/stream/EDProducer.h" + +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" + +// algorithm specific + +#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" + +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalRecHit.h" + +class EcalCPURecHitProducer : public edm::stream::EDProducer { +public: + explicit EcalCPURecHitProducer(edm::ParameterSet const& ps); + ~EcalCPURecHitProducer() override = default; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + void acquire(edm::Event const&, edm::EventSetup const&, edm::WaitingTaskWithArenaHolder) override; + void produce(edm::Event&, edm::EventSetup const&) override; + +private: + using InputProduct = cms::cuda::Product>; + edm::EDGetTokenT recHitsInEBToken_, recHitsInEEToken_; + using OutputProduct = ecal::RecHit>; + edm::EDPutTokenT recHitsOutEBToken_, recHitsOutEEToken_; + + OutputProduct recHitsEB_, recHitsEE_; + bool containsTimingInformation_; +}; + +void EcalCPURecHitProducer::fillDescriptions(edm::ConfigurationDescriptions& confDesc) { + edm::ParameterSetDescription desc; + + desc.add("recHitsInLabelEB", edm::InputTag{"ecalRecHitProducerGPU", "EcalRecHitsEB"}); + desc.add("recHitsInLabelEE", edm::InputTag{"ecalRecHitProducerGPU", "EcalRecHitsEE"}); + desc.add("recHitsOutLabelEB", "EcalRecHitsEB"); + desc.add("recHitsOutLabelEE", "EcalRecHitsEE"); + desc.add("containsTimingInformation", false); + + confDesc.addWithDefaultLabel(desc); +} + +EcalCPURecHitProducer::EcalCPURecHitProducer(const edm::ParameterSet& ps) + : recHitsInEBToken_{consumes(ps.getParameter("recHitsInLabelEB"))}, + recHitsInEEToken_{consumes(ps.getParameter("recHitsInLabelEE"))}, + recHitsOutEBToken_{produces(ps.getParameter("recHitsOutLabelEB"))}, + recHitsOutEEToken_{produces(ps.getParameter("recHitsOutLabelEE"))}, + containsTimingInformation_{ps.getParameter("containsTimingInformation")} {} + +void EcalCPURecHitProducer::acquire(edm::Event const& event, + edm::EventSetup const& setup, + edm::WaitingTaskWithArenaHolder taskHolder) { + // retrieve data/ctx + auto const& ebRecHitsProduct = event.get(recHitsInEBToken_); + auto const& eeRecHitsProduct = event.get(recHitsInEEToken_); + cms::cuda::ScopedContextAcquire ctx{ebRecHitsProduct, std::move(taskHolder)}; + auto const& ebRecHits = ctx.get(ebRecHitsProduct); + auto const& eeRecHits = ctx.get(eeRecHitsProduct); + + // resize the output buffers + recHitsEB_.resize(ebRecHits.size); + recHitsEE_.resize(eeRecHits.size); + +#ifdef ECAL_RECO_CUDA_DEBUG + std::cout << " [EcalCPURecHitProducer::acquire] ebRecHits.size = " << ebRecHits.size << std::endl; + std::cout << " [EcalCPURecHitProducer::acquire] eeRecHits.size = " << eeRecHits.size << std::endl; +#endif + + // enqeue transfers + cudaCheck(cudaMemcpyAsync(recHitsEB_.did.data(), + ebRecHits.did.get(), + recHitsEB_.did.size() * sizeof(uint32_t), + cudaMemcpyDeviceToHost, + ctx.stream())); + cudaCheck(cudaMemcpyAsync(recHitsEE_.did.data(), + eeRecHits.did.get(), + recHitsEE_.did.size() * sizeof(uint32_t), + cudaMemcpyDeviceToHost, + ctx.stream())); + // + // ./CUDADataFormats/EcalRecHitSoA/interface/RecoTypes.h:using StorageScalarType = float; + // + + cudaCheck(cudaMemcpyAsync(recHitsEB_.energy.data(), + ebRecHits.energy.get(), + recHitsEB_.energy.size() * sizeof(::ecal::reco::StorageScalarType), + cudaMemcpyDeviceToHost, + ctx.stream())); + cudaCheck(cudaMemcpyAsync(recHitsEE_.energy.data(), + eeRecHits.energy.get(), + recHitsEE_.energy.size() * sizeof(::ecal::reco::StorageScalarType), + cudaMemcpyDeviceToHost, + ctx.stream())); + + cudaCheck(cudaMemcpyAsync(recHitsEB_.chi2.data(), + ebRecHits.chi2.get(), + recHitsEB_.chi2.size() * sizeof(::ecal::reco::StorageScalarType), + cudaMemcpyDeviceToHost, + ctx.stream())); + cudaCheck(cudaMemcpyAsync(recHitsEE_.chi2.data(), + eeRecHits.chi2.get(), + recHitsEE_.chi2.size() * sizeof(::ecal::reco::StorageScalarType), + cudaMemcpyDeviceToHost, + ctx.stream())); + + cudaCheck(cudaMemcpyAsync(recHitsEB_.extra.data(), + ebRecHits.extra.get(), + recHitsEB_.extra.size() * sizeof(uint32_t), + cudaMemcpyDeviceToHost, + ctx.stream())); + cudaCheck(cudaMemcpyAsync(recHitsEE_.extra.data(), + eeRecHits.extra.get(), + recHitsEE_.extra.size() * sizeof(uint32_t), + cudaMemcpyDeviceToHost, + ctx.stream())); + + cudaCheck(cudaMemcpyAsync(recHitsEB_.flagBits.data(), + ebRecHits.flagBits.get(), + recHitsEB_.flagBits.size() * sizeof(uint32_t), + cudaMemcpyDeviceToHost, + ctx.stream())); + cudaCheck(cudaMemcpyAsync(recHitsEE_.flagBits.data(), + eeRecHits.flagBits.get(), + recHitsEE_.flagBits.size() * sizeof(uint32_t), + cudaMemcpyDeviceToHost, + ctx.stream())); + +#ifdef ECAL_RECO_CUDA_DEBUG + for (unsigned int ieb = 0; ieb < ebRecHits.size; ieb++) { + if (recHitsEB_.extra[ieb] != 0) + std::cout << " [ " << ieb << " :: " << ebRecHits.size << " ] [ " << recHitsEB_.did[ieb] + << " ] eb extra = " << recHitsEB_.extra[ieb] << std::endl; + } + + for (unsigned int ieb = 0; ieb < ebRecHits.size; ieb++) { + if (recHitsEB_.energy[ieb] != 0) + std::cout << " [ " << ieb << " :: " << ebRecHits.size << " ] [ " << recHitsEB_.did[ieb] + << " ] eb energy = " << recHitsEB_.energy[ieb] << std::endl; + } + + for (unsigned int iee = 0; iee < eeRecHits.size; iee++) { + if (recHitsEE_.energy[iee] != 0) + std::cout << " [ " << iee << " :: " << eeRecHits.size << " ] [ " << recHitsEE_.did[iee] + << " ] ee energy = " << recHitsEE_.energy[iee] << std::endl; + } +#endif +} + +void EcalCPURecHitProducer::produce(edm::Event& event, edm::EventSetup const& setup) { + // put into event + event.emplace(recHitsOutEBToken_, std::move(recHitsEB_)); + event.emplace(recHitsOutEEToken_, std::move(recHitsEE_)); +} + +DEFINE_FWK_MODULE(EcalCPURecHitProducer); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalCPUUncalibRecHitProducer.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalCPUUncalibRecHitProducer.cc new file mode 100644 index 0000000000000..801d378c7c391 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalCPUUncalibRecHitProducer.cc @@ -0,0 +1,120 @@ +#include + +// framework +#include "FWCore/Framework/interface/stream/EDProducer.h" + +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +// algorithm specific + +#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" + +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalUncalibratedRecHit.h" + +class EcalCPUUncalibRecHitProducer : public edm::stream::EDProducer { +public: + explicit EcalCPUUncalibRecHitProducer(edm::ParameterSet const& ps); + ~EcalCPUUncalibRecHitProducer() override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + void acquire(edm::Event const&, edm::EventSetup const&, edm::WaitingTaskWithArenaHolder) override; + void produce(edm::Event&, edm::EventSetup const&) override; + +private: + using InputProduct = cms::cuda::Product>; + edm::EDGetTokenT recHitsInEBToken_, recHitsInEEToken_; + using OutputProduct = ecal::UncalibratedRecHit>; + edm::EDPutTokenT recHitsOutEBToken_, recHitsOutEEToken_; + + OutputProduct recHitsEB_, recHitsEE_; + bool containsTimingInformation_; +}; + +void EcalCPUUncalibRecHitProducer::fillDescriptions(edm::ConfigurationDescriptions& confDesc) { + edm::ParameterSetDescription desc; + + desc.add("recHitsInLabelEB", edm::InputTag{"ecalUncalibRecHitProducerGPU", "EcalUncalibRecHitsEB"}); + desc.add("recHitsInLabelEE", edm::InputTag{"ecalUncalibRecHitProducerGPU", "EcalUncalibRecHitsEE"}); + desc.add("recHitsOutLabelEB", "EcalUncalibRecHitsEB"); + desc.add("recHitsOutLabelEE", "EcalUncalibRecHitsEE"); + desc.add("containsTimingInformation", false); + + confDesc.add("ecalCPUUncalibRecHitProducer", desc); +} + +EcalCPUUncalibRecHitProducer::EcalCPUUncalibRecHitProducer(const edm::ParameterSet& ps) + : recHitsInEBToken_{consumes(ps.getParameter("recHitsInLabelEB"))}, + recHitsInEEToken_{consumes(ps.getParameter("recHitsInLabelEE"))}, + recHitsOutEBToken_{produces(ps.getParameter("recHitsOutLabelEB"))}, + recHitsOutEEToken_{produces(ps.getParameter("recHitsOutLabelEE"))}, + containsTimingInformation_{ps.getParameter("containsTimingInformation")} {} + +EcalCPUUncalibRecHitProducer::~EcalCPUUncalibRecHitProducer() {} + +void EcalCPUUncalibRecHitProducer::acquire(edm::Event const& event, + edm::EventSetup const& setup, + edm::WaitingTaskWithArenaHolder taskHolder) { + // retrieve data/ctx + auto const& ebRecHitsProduct = event.get(recHitsInEBToken_); + auto const& eeRecHitsProduct = event.get(recHitsInEEToken_); + cms::cuda::ScopedContextAcquire ctx{ebRecHitsProduct, std::move(taskHolder)}; + auto const& ebRecHits = ctx.get(ebRecHitsProduct); + auto const& eeRecHits = ctx.get(eeRecHitsProduct); + + // resize the output buffers + recHitsEB_.resize(ebRecHits.size); + recHitsEE_.resize(eeRecHits.size); + + auto lambdaToTransfer = [&ctx](auto& dest, auto* src) { + using vector_type = typename std::remove_reference::type; + using type = typename vector_type::value_type; + using src_type = typename std::remove_pointer::type; + static_assert(std::is_same::value && "dst and src data types do not match"); + cudaCheck(cudaMemcpyAsync(dest.data(), src, dest.size() * sizeof(type), cudaMemcpyDeviceToHost, ctx.stream())); + }; + + // enqeue transfers + lambdaToTransfer(recHitsEB_.did, ebRecHits.did.get()); + lambdaToTransfer(recHitsEE_.did, eeRecHits.did.get()); + + lambdaToTransfer(recHitsEB_.amplitudesAll, ebRecHits.amplitudesAll.get()); + lambdaToTransfer(recHitsEE_.amplitudesAll, eeRecHits.amplitudesAll.get()); + + lambdaToTransfer(recHitsEB_.amplitude, ebRecHits.amplitude.get()); + lambdaToTransfer(recHitsEE_.amplitude, eeRecHits.amplitude.get()); + + lambdaToTransfer(recHitsEB_.chi2, ebRecHits.chi2.get()); + lambdaToTransfer(recHitsEE_.chi2, eeRecHits.chi2.get()); + + lambdaToTransfer(recHitsEB_.pedestal, ebRecHits.pedestal.get()); + lambdaToTransfer(recHitsEE_.pedestal, eeRecHits.pedestal.get()); + + lambdaToTransfer(recHitsEB_.flags, ebRecHits.flags.get()); + lambdaToTransfer(recHitsEE_.flags, eeRecHits.flags.get()); + + if (containsTimingInformation_) { + lambdaToTransfer(recHitsEB_.jitter, ebRecHits.jitter.get()); + lambdaToTransfer(recHitsEE_.jitter, eeRecHits.jitter.get()); + + lambdaToTransfer(recHitsEB_.jitterError, ebRecHits.jitterError.get()); + lambdaToTransfer(recHitsEE_.jitterError, eeRecHits.jitterError.get()); + } +} + +void EcalCPUUncalibRecHitProducer::produce(edm::Event& event, edm::EventSetup const& setup) { + // tmp vectors + auto recHitsOutEB = std::make_unique(std::move(recHitsEB_)); + auto recHitsOutEE = std::make_unique(std::move(recHitsEE_)); + + // put into event + event.put(recHitsOutEBToken_, std::move(recHitsOutEB)); + event.put(recHitsOutEEToken_, std::move(recHitsOutEE)); +} + +DEFINE_FWK_MODULE(EcalCPUUncalibRecHitProducer); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalESProducersGPUDefs.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalESProducersGPUDefs.cc new file mode 100644 index 0000000000000..3118d54c6a7e9 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalESProducersGPUDefs.cc @@ -0,0 +1,88 @@ +#include "CondFormats/DataRecord/interface/EcalADCToGeVConstantRcd.h" +#include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h" +#include "CondFormats/DataRecord/interface/EcalGainRatiosRcd.h" +#include "CondFormats/DataRecord/interface/EcalIntercalibConstantsRcd.h" +#include "CondFormats/DataRecord/interface/EcalLaserAPDPNRatiosRcd.h" +#include "CondFormats/DataRecord/interface/EcalLaserAPDPNRatiosRefRcd.h" +#include "CondFormats/DataRecord/interface/EcalLaserAlphasRcd.h" +#include "CondFormats/DataRecord/interface/EcalLinearCorrectionsRcd.h" +#include "CondFormats/DataRecord/interface/EcalPedestalsRcd.h" +#include "CondFormats/DataRecord/interface/EcalPulseCovariancesRcd.h" +#include "CondFormats/DataRecord/interface/EcalPulseShapesRcd.h" +#include "CondFormats/DataRecord/interface/EcalSamplesCorrelationRcd.h" +#include "CondFormats/DataRecord/interface/EcalTimeBiasCorrectionsRcd.h" +#include "CondFormats/DataRecord/interface/EcalTimeCalibConstantsRcd.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "HeterogeneousCore/CUDACore/interface/ConvertingESProducerT.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalGainRatiosGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalIntercalibConstantsGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosRefGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAlphasGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLinearCorrectionsGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalPedestalsGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalPulseCovariancesGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalPulseShapesGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalRechitADCToGeVConstantGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalRechitChannelStatusGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSamplesCorrelationGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalTimeBiasCorrectionsGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalTimeCalibConstantsGPU.h" + +using EcalPedestalsGPUESProducer = ConvertingESProducerT; + +using EcalGainRatiosGPUESProducer = ConvertingESProducerT; + +using EcalPulseShapesGPUESProducer = ConvertingESProducerT; + +using EcalPulseCovariancesGPUESProducer = + ConvertingESProducerT; + +using EcalSamplesCorrelationGPUESProducer = + ConvertingESProducerT; + +using EcalTimeBiasCorrectionsGPUESProducer = + ConvertingESProducerT; + +using EcalTimeCalibConstantsGPUESProducer = + ConvertingESProducerT; + +using EcalRechitADCToGeVConstantGPUESProducer = + ConvertingESProducerT; + +using EcalIntercalibConstantsGPUESProducer = + ConvertingESProducerT; + +using EcalRechitChannelStatusGPUESProducer = + ConvertingESProducerT; + +using EcalLaserAPDPNRatiosGPUESProducer = + ConvertingESProducerT; + +using EcalLaserAPDPNRatiosRefGPUESProducer = + ConvertingESProducerT; + +using EcalLaserAlphasGPUESProducer = ConvertingESProducerT; + +using EcalLinearCorrectionsGPUESProducer = + ConvertingESProducerT; + +// +// This below also creates the .py config files, as described in HeterogeneousCore/CUDACore/interface/ConvertingESProducerT.h +// + +DEFINE_FWK_EVENTSETUP_MODULE(EcalPedestalsGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(EcalGainRatiosGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(EcalPulseShapesGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(EcalPulseCovariancesGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(EcalSamplesCorrelationGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(EcalTimeBiasCorrectionsGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(EcalTimeCalibConstantsGPUESProducer); + +DEFINE_FWK_EVENTSETUP_MODULE(EcalRechitADCToGeVConstantGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(EcalIntercalibConstantsGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(EcalRechitChannelStatusGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(EcalLaserAPDPNRatiosGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(EcalLaserAPDPNRatiosRefGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(EcalLaserAlphasGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(EcalLinearCorrectionsGPUESProducer); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalMultifitParametersGPUESProducer.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalMultifitParametersGPUESProducer.cc new file mode 100644 index 0000000000000..1743df5aa945d --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalMultifitParametersGPUESProducer.cc @@ -0,0 +1,78 @@ +#include +#include +#include + +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Framework/interface/ESProductHost.h" +#include "FWCore/Framework/interface/ESTransientHandle.h" +#include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/ModuleFactory.h" +#include "FWCore/Framework/interface/SourceFactory.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/ReusableObjectHolder.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDACore/interface/JobConfigurationGPURecord.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalMultifitParametersGPU.h" + +class EcalMultifitParametersGPUESProducer : public edm::ESProducer, public edm::EventSetupRecordIntervalFinder { +public: + EcalMultifitParametersGPUESProducer(edm::ParameterSet const&); + ~EcalMultifitParametersGPUESProducer() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions&); + std::unique_ptr produce(JobConfigurationGPURecord const&); + +protected: + void setIntervalFor(const edm::eventsetup::EventSetupRecordKey&, + const edm::IOVSyncValue&, + edm::ValidityInterval&) override; + +private: + edm::ParameterSet const pset_; +}; + +EcalMultifitParametersGPUESProducer::EcalMultifitParametersGPUESProducer(edm::ParameterSet const& pset) : pset_{pset} { + setWhatProduced(this); + findingRecord(); +} + +void EcalMultifitParametersGPUESProducer::setIntervalFor(const edm::eventsetup::EventSetupRecordKey& iKey, + const edm::IOVSyncValue& iTime, + edm::ValidityInterval& oInterval) { + oInterval = edm::ValidityInterval(edm::IOVSyncValue::beginOfTime(), edm::IOVSyncValue::endOfTime()); +} + +void EcalMultifitParametersGPUESProducer::fillDescriptions(edm::ConfigurationDescriptions& desc) { + edm::ParameterSetDescription d; + d.add>("pulseOffsets", {-3, -2, -1, 0, 1, 2, 3, 4}); + d.add>("EBtimeFitParameters", + {-2.015452e+00, + 3.130702e+00, + -1.234730e+01, + 4.188921e+01, + -8.283944e+01, + 9.101147e+01, + -5.035761e+01, + 1.105621e+01}); + d.add>("EEtimeFitParameters", + {-2.390548e+00, + 3.553628e+00, + -1.762341e+01, + 6.767538e+01, + -1.332130e+02, + 1.407432e+02, + -7.541106e+01, + 1.620277e+01}); + d.add>("EBamplitudeFitParameters", {1.138, 1.652}); + d.add>("EEamplitudeFitParameters", {1.890, 1.400}); + desc.addWithDefaultLabel(d); +} + +std::unique_ptr EcalMultifitParametersGPUESProducer::produce( + JobConfigurationGPURecord const&) { + return std::make_unique(pset_); +} + +DEFINE_FWK_EVENTSETUP_SOURCE(EcalMultifitParametersGPUESProducer); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitBuilderKernels.cu b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitBuilderKernels.cu new file mode 100644 index 0000000000000..6e1b2a66c2507 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitBuilderKernels.cu @@ -0,0 +1,676 @@ +#include + +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalRecHit.h" +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalUncalibratedRecHit.h" + +#include "EcalRecHitBuilderKernels.h" +#include "KernelHelpers.h" + +namespace ecal { + namespace rechit { + + // uncalibrecHit flags + enum UncalibRecHitFlags { + kGood = -1, // channel is good (mutually exclusive with other states) setFlagBit(kGood) reset flags_ to zero + kPoorReco, // channel has been badly reconstructed (e.g. bad shape, bad chi2 etc.) + kSaturated, // saturated channel + kOutOfTime, // channel out of time + kLeadingEdgeRecovered, // saturated channel: energy estimated from the leading edge before saturation + kHasSwitchToGain6, // at least one data frame is in G6 + kHasSwitchToGain1 // at least one data frame is in G1 + }; + + // recHit flags + enum RecHitFlags { + RecHitFlags_kGood = 0, // channel ok, the energy and time measurement are reliable + RecHitFlags_kPoorReco, // the energy is available from the UncalibRecHit, but approximate (bad shape, large chi2) + RecHitFlags_kOutOfTime, // the energy is available from the UncalibRecHit (sync reco), but the event is out of time + RecHitFlags_kFaultyHardware, // The energy is available from the UncalibRecHit, channel is faulty at some hardware level (e.g. noisy) + RecHitFlags_kNoisy, // the channel is very noisy + RecHitFlags_kPoorCalib, // the energy is available from the UncalibRecHit, but the calibration of the channel is poor + RecHitFlags_kSaturated, // saturated channel (recovery not tried) + RecHitFlags_kLeadingEdgeRecovered, // saturated channel: energy estimated from the leading edge before saturation + RecHitFlags_kNeighboursRecovered, // saturated/isolated dead: energy estimated from neighbours + RecHitFlags_kTowerRecovered, // channel in TT with no data link, info retrieved from Trigger Primitive + RecHitFlags_kDead, // channel is dead and any recovery fails + RecHitFlags_kKilled, // MC only flag: the channel is killed in the real detector + RecHitFlags_kTPSaturated, // the channel is in a region with saturated TP + RecHitFlags_kL1SpikeFlag, // the channel is in a region with TP with sFGVB = 0 + RecHitFlags_kWeird, // the signal is believed to originate from an anomalous deposit (spike) + RecHitFlags_kDiWeird, // the signal is anomalous, and neighbors another anomalous signal + RecHitFlags_kHasSwitchToGain6, // at least one data frame is in G6 + RecHitFlags_kHasSwitchToGain1, // at least one data frame is in G1 + // + RecHitFlags_kUnknown // to ease the interface with functions returning flags. + }; + + // status code + enum EcalChannelStatusCode_Code { + kOk = 0, + kDAC, + kNoLaser, + kNoisy, + kNNoisy, + kNNNoisy, + kNNNNoisy, + kNNNNNoisy, + kFixedG6, + kFixedG1, + kFixedG0, + kNonRespondingIsolated, + kDeadVFE, + kDeadFE, + kNoDataNoTP + }; + + __global__ void kernel_create_ecal_rehit( + // configuration + int const* ChannelStatusToBeExcluded, + uint32_t ChannelStatusToBeExcludedSize, + bool const killDeadChannels, + bool const recoverEBIsolatedChannels, + bool const recoverEEIsolatedChannels, + bool const recoverEBVFE, + bool const recoverEEVFE, + bool const recoverEBFE, + bool const recoverEEFE, + float const EBLaserMIN, + float const EELaserMIN, + float const EBLaserMAX, + float const EELaserMAX, + // for flags setting + int const* expanded_v_DB_reco_flags, // FIXME AM: to be checked + uint32_t const* expanded_Sizes_v_DB_reco_flags, + uint32_t const* expanded_flagbit_v_DB_reco_flags, + uint32_t expanded_v_DB_reco_flagsSize, + uint32_t flagmask, + // conditions + float const* adc2gev, + float const* intercalib, + uint16_t const* status, + float const* apdpnrefs, + float const* alphas, + // input for transparency corrections + float const* p1, + float const* p2, + float const* p3, + edm::TimeValue_t const* t1, + edm::TimeValue_t const* t2, + edm::TimeValue_t const* t3, + // input for linear corrections + float const* lp1, + float const* lp2, + float const* lp3, + edm::TimeValue_t const* lt1, + edm::TimeValue_t const* lt2, + edm::TimeValue_t const* lt3, + // time, used for time dependent corrections + edm::TimeValue_t const event_time, + // input + uint32_t const* did_eb, + uint32_t const* did_ee, + ::ecal::reco::StorageScalarType const* amplitude_eb, // in adc counts + ::ecal::reco::StorageScalarType const* amplitude_ee, // in adc counts + ::ecal::reco::StorageScalarType const* time_eb, + ::ecal::reco::StorageScalarType const* time_ee, + ::ecal::reco::StorageScalarType const* chi2_eb, + ::ecal::reco::StorageScalarType const* chi2_ee, + uint32_t const* flags_eb, + uint32_t const* flags_ee, + // output + uint32_t* didEB, + uint32_t* didEE, + ::ecal::reco::StorageScalarType* energyEB, // in energy [GeV] + ::ecal::reco::StorageScalarType* energyEE, // in energy [GeV] + ::ecal::reco::StorageScalarType* timeEB, + ::ecal::reco::StorageScalarType* timeEE, + ::ecal::reco::StorageScalarType* chi2EB, + ::ecal::reco::StorageScalarType* chi2EE, + uint32_t* flagBitsEB, + uint32_t* flagBitsEE, + uint32_t* extraEB, + uint32_t* extraEE, + // other + int const nchannels, + uint32_t const nChannelsBarrel, + uint32_t const offsetForHashes) { + // + // NB: energy "type_wrapper::type" most likely std::vector + // + + for (int ch = threadIdx.x + blockDim.x * blockIdx.x; ch < nchannels; ch += blockDim.x * gridDim.x) { + bool isEndcap = (ch >= nChannelsBarrel); + + int const inputCh = isEndcap ? ch - nChannelsBarrel : ch; + + uint32_t const* didCh = isEndcap ? did_ee : did_eb; + + // arrange to access the right ptrs +#define ARRANGE(var) auto* var = isEndcap ? var##EE : var##EB + ARRANGE(did); + ARRANGE(energy); + ARRANGE(chi2); + ARRANGE(flagBits); + ARRANGE(extra); +#undef ARRANGE + + // only two values, EB or EE + // AM : FIXME : why not using "isBarrel" ? isBarrel ? adc2gev[0] : adc2gev[1] + float adc2gev_to_use = isEndcap ? adc2gev[1] // ee + : adc2gev[0]; // eb + + // first EB and then EE + + ::ecal::reco::StorageScalarType const* amplitude = isEndcap ? amplitude_ee : amplitude_eb; + + ::ecal::reco::StorageScalarType const* chi2_in = isEndcap ? chi2_ee : chi2_eb; + + uint32_t const* flags_in = isEndcap ? flags_ee : flags_eb; + + // simple copy + did[inputCh] = didCh[inputCh]; + + auto const did_to_use = DetId{didCh[inputCh]}; + + auto const isBarrel = did_to_use.subdetId() == EcalBarrel; + auto const hashedId = isBarrel ? ecal::reconstruction::hashedIndexEB(did_to_use.rawId()) + : offsetForHashes + ecal::reconstruction::hashedIndexEE(did_to_use.rawId()); + + float const intercalib_to_use = intercalib[hashedId]; + + // get laser coefficient + float lasercalib = 1.; + + // + // AM: ideas + // + // One possibility is to create the map of laser corrections once on CPU + // for all crystals and push them on GPU. + // Then only if the LS is different, update the laser correction + // The variation within a LS is not worth pursuing (<< 0.1% !!) + // and below the precision we can claim on the laser corrections (right?). + // This will save quite some time (also for the CPU version?) + // + + int iLM = 1; + + if (isBarrel) { + iLM = ecal::reconstruction::laser_monitoring_region_EB(did_to_use.rawId()); + } else { + iLM = ecal::reconstruction::laser_monitoring_region_EE(did_to_use.rawId()); + } + + long long t_i = 0, t_f = 0; + float p_i = 0, p_f = 0; + long long lt_i = 0, lt_f = 0; + float lp_i = 0, lp_f = 0; + + // laser + if (event_time >= t1[iLM - 1] && event_time < t2[iLM - 1]) { + t_i = t1[iLM - 1]; + t_f = t2[iLM - 1]; + p_i = p1[hashedId]; + p_f = p2[hashedId]; + } else if (event_time >= t2[iLM - 1] && event_time <= t3[iLM - 1]) { + t_i = t2[iLM - 1]; + t_f = t3[iLM - 1]; + p_i = p2[hashedId]; + p_f = p3[hashedId]; + } else if (event_time < t1[iLM - 1]) { + t_i = t1[iLM - 1]; + t_f = t2[iLM - 1]; + p_i = p1[hashedId]; + p_f = p2[hashedId]; + + } else if (event_time > t3[iLM - 1]) { + t_i = t2[iLM - 1]; + t_f = t3[iLM - 1]; + p_i = p2[hashedId]; + p_f = p3[hashedId]; + } + + // linear corrections + if (event_time >= lt1[iLM - 1] && event_time < lt2[iLM - 1]) { + lt_i = lt1[iLM - 1]; + lt_f = lt2[iLM - 1]; + lp_i = lp1[hashedId]; + lp_f = lp2[hashedId]; + } else if (event_time >= lt2[iLM - 1] && event_time <= lt3[iLM - 1]) { + lt_i = lt2[iLM - 1]; + lt_f = lt3[iLM - 1]; + lp_i = lp2[hashedId]; + lp_f = lp3[hashedId]; + } else if (event_time < lt1[iLM - 1]) { + lt_i = lt1[iLM - 1]; + lt_f = lt2[iLM - 1]; + lp_i = lp1[hashedId]; + lp_f = lp2[hashedId]; + + } else if (event_time > lt3[iLM - 1]) { + lt_i = lt2[iLM - 1]; + lt_f = lt3[iLM - 1]; + lp_i = lp2[hashedId]; + lp_f = lp3[hashedId]; + } + + // apdpnref and alpha + float apdpnref = apdpnrefs[hashedId]; + float alpha = alphas[hashedId]; + + // now calculate transparency correction + if (apdpnref != 0 && (t_i - t_f) != 0 && (lt_i - lt_f) != 0) { + long long tt = event_time; // never subtract two unsigned! + float interpolatedLaserResponse = + p_i / apdpnref + float(tt - t_i) * (p_f - p_i) / (apdpnref * float(t_f - t_i)); + + float interpolatedLinearResponse = + lp_i / apdpnref + float(tt - lt_i) * (lp_f - lp_i) / (apdpnref * float(lt_f - lt_i)); // FIXED BY FC + + if (interpolatedLinearResponse > 2.f || interpolatedLinearResponse < 0.1f) { + interpolatedLinearResponse = 1.f; + } + if (interpolatedLaserResponse <= 0.) { + // AM : how the heck is it possible? + // interpolatedLaserResponse = 0.0001; + lasercalib = 1.; + + } else { + float interpolatedTransparencyResponse = interpolatedLaserResponse / interpolatedLinearResponse; + + // ... and now this: + lasercalib = 1.f / (std::pow(interpolatedTransparencyResponse, alpha) * interpolatedLinearResponse); + } + } + + // + // Check for channels to be excluded from reconstruction + // + // + // Default energy? Not to be updated if "ChannelStatusToBeExcluded" + // Exploited later by the module "EcalRecHitConvertGPU2CPUFormat" + // + energy[inputCh] = -1; //---- AM: default, un-physical, ok + + // truncate the chi2 + if (chi2_in[inputCh] > 64) + chi2[inputCh] = 64; + else + chi2[inputCh] = chi2_in[inputCh]; + + // default values for the flags + flagBits[inputCh] = 0; + extra[inputCh] = 0; + + static const int chStatusMask = 0x1f; + // ChannelStatusToBeExcluded is a "int" then I put "dbstatus" to be the same + int dbstatus = EcalChannelStatusCode_Code((status[hashedId]) & chStatusMask); + if (ChannelStatusToBeExcludedSize != 0) { + bool skip_this_channel = false; + for (int ich_to_check = 0; ich_to_check < ChannelStatusToBeExcludedSize; ich_to_check++) { + if (ChannelStatusToBeExcluded[ich_to_check] == dbstatus) { + skip_this_channel = true; + break; + } + } + if (skip_this_channel) { + // skip this channel + continue; + } + } + + // Take our association map of dbstatuses-> recHit flagbits and return the apporpriate flagbit word + + // + // AM: get the smaller "flagbit_counter" with match + // + + uint32_t temporary_flagBits = 0; + + int iterator_flags = 0; + bool need_to_exit = false; + int flagbit_counter = 0; + while (!need_to_exit) { + iterator_flags = 0; + for (unsigned int i = 0; i != expanded_v_DB_reco_flagsSize; ++i) { + // check the correct "flagbit" + if (expanded_flagbit_v_DB_reco_flags[i] == flagbit_counter) { + for (unsigned int j = 0; j < expanded_Sizes_v_DB_reco_flags[i]; j++) { + if (expanded_v_DB_reco_flags[iterator_flags] == dbstatus) { + temporary_flagBits = 0x1 << expanded_flagbit_v_DB_reco_flags[i]; + need_to_exit = true; + break; // also from the big loop!!! + } + iterator_flags++; + } + } else { + // if not, got to the next bunch directly + iterator_flags += expanded_Sizes_v_DB_reco_flags[i]; + } + + if (need_to_exit) { + break; + } + } + flagbit_counter += 1; + } + + flagBits[inputCh] = temporary_flagBits; + + if ((flagmask & temporary_flagBits) && killDeadChannels) { + // skip this channel + continue; + } + + // + // multiply the adc counts with factors to get GeV + // + + // energy[ch] = amplitude[inputCh] * adc2gev_to_use * intercalib_to_use ; + energy[inputCh] = amplitude[inputCh] * adc2gev_to_use * intercalib_to_use * lasercalib; + + // Time is not saved so far, FIXME + // time[ch] = time_in[inputCh]; + + // NB: calculate the "flagBits extra" --> not really "flags", but actually an encoded version of energy uncertainty, time unc., ... + + // + // extra packing ... + // + + uint32_t offset; + uint32_t width; + uint32_t value; + + float chi2_temp = chi2[inputCh]; + if (chi2_temp > 64) + chi2_temp = 64; + // use 7 bits + uint32_t rawChi2 = lround(chi2_temp / 64. * ((1 << 7) - 1)); + + offset = 0; + width = 7; + value = 0; + + uint32_t mask = ((1 << width) - 1) << offset; + value &= ~mask; + value |= (rawChi2 & ((1U << width) - 1)) << offset; + + // rawEnergy is actually "error" !!! + uint32_t rawEnergy = 0; + + // AM: FIXME: this is not propagated currently to the uncalibrecHit collection SOA + // if you want to store this in "extra", we need first to add it to the uncalibrecHit results + // then it will be something like the following + // amplitudeError[inputCh] * adc2gev_to_use * intercalib_to_use * lasercalib + // + // + + float amplitudeError_ch = 0.; // amplitudeError[ch]; + + if (amplitudeError_ch > 0.001) { + static constexpr float p10[] = {1.e-2f, 1.e-1f, 1.f, 1.e1f, 1.e2f, 1.e3f, 1.e4f, 1.e5f, 1.e6f}; + int b = amplitudeError_ch < p10[4] ? 0 : 5; + for (; b < 9; ++b) + if (amplitudeError_ch < p10[b]) + break; + + uint16_t exponent = b; + + static constexpr float ip10[] = {1.e5f, 1.e4f, 1.e3f, 1.e2f, 1.e1f, 1.e0f, 1.e-1f, 1.e-2f, 1.e-3f, 1.e-4}; + uint16_t significand = lround(amplitudeError_ch * ip10[exponent]); + // use 13 bits (3 exponent, 10 significand) + rawEnergy = exponent << 10 | significand; + } + + offset = 8; + width = 13; + // value from last change, ok + + mask = ((1 << width) - 1) << offset; + value &= ~mask; + value |= (rawEnergy & ((1U << width) - 1)) << offset; + + uint32_t jitterErrorBits = 0; + jitterErrorBits = jitterErrorBits & 0xFF; + + offset = 24; + width = 8; + // value from last change, ok + + mask = ((1 << width) - 1) << offset; + value &= ~mask; + value |= (jitterErrorBits & ((1U << width) - 1)) << offset; + + // + // now finally set "extra[ch]" + // + extra[inputCh] = value; + + // + // additional flags setting + // + // using correctly the flags as calculated at the UncalibRecHit stage + // + // Now fill flags + + bool good = true; + + if (flags_in[inputCh] & (0x1 << (UncalibRecHitFlags::kLeadingEdgeRecovered))) { + flagBits[inputCh] |= (0x1 << (RecHitFlags::RecHitFlags_kLeadingEdgeRecovered)); + good = false; + } + + if (flags_in[inputCh] & (0x1 << (UncalibRecHitFlags::kSaturated))) { + // leading edge recovery failed - still keep the information + // about the saturation and do not flag as dead + flagBits[inputCh] |= (0x1 << (RecHitFlags::RecHitFlags_kSaturated)); + good = false; + } + + // + // AM: why do we have two tests one after the other checking almost the same thing??? + // Please clean up the code, ... also the original one! + // + // uncalibRH.isSaturated() ---> + // + // bool EcalUncalibratedRecHit::isSaturated() const { + // return EcalUncalibratedRecHit::checkFlag(kSaturated); + // } + // + // + + if (flags_in[inputCh] & (0x1 << (UncalibRecHitFlags::kSaturated))) { + flagBits[inputCh] |= (0x1 << (RecHitFlags::RecHitFlags_kSaturated)); + good = false; + } + + if (flags_in[inputCh] & (0x1 << (UncalibRecHitFlags::kOutOfTime))) { + flagBits[inputCh] |= (0x1 << (RecHitFlags::RecHitFlags_kOutOfTime)); + good = false; + } + if (flags_in[inputCh] & (0x1 << (UncalibRecHitFlags::kPoorReco))) { + flagBits[inputCh] |= (0x1 << (RecHitFlags::RecHitFlags_kPoorReco)); + good = false; + } + if (flags_in[inputCh] & (0x1 << (UncalibRecHitFlags::kHasSwitchToGain6))) { + flagBits[inputCh] |= (0x1 << (RecHitFlags::RecHitFlags_kHasSwitchToGain6)); + } + if (flags_in[inputCh] & (0x1 << (UncalibRecHitFlags::kHasSwitchToGain1))) { + flagBits[inputCh] |= (0x1 << (RecHitFlags::RecHitFlags_kHasSwitchToGain1)); + } + + if (good) { + flagBits[inputCh] |= (0x1 << (RecHitFlags::RecHitFlags_kGood)); + } + + if ((isBarrel && (lasercalib < EBLaserMIN || lasercalib > EBLaserMAX)) || + (!isBarrel && (lasercalib < EELaserMIN || lasercalib > EELaserMAX))) { + flagBits[inputCh] |= (0x1 << (RecHitFlags::RecHitFlags_kPoorCalib)); + } + + // recover, killing, and other stuff + + // + // Structure: + // EB + // EE + // + // + // - single MVA + // - democratic sharing + // - kill all the other cases + // + + bool is_Single = false; + bool is_FE = false; + bool is_VFE = false; + + bool is_recoverable = false; // DetIdToBeRecovered + + if (dbstatus == 10 || dbstatus == 11 || dbstatus == 12) { + is_recoverable = true; + } + + if (is_recoverable) { + if (dbstatus == EcalChannelStatusCode_Code::kDeadVFE) { + is_VFE = true; + } else if (dbstatus == EcalChannelStatusCode_Code::kDeadVFE) { + is_FE = true; + } else { + is_Single = true; + } + + // EB + if (isBarrel) { + if (is_Single || is_FE || is_VFE) { + // single MVA + if (is_Single && (recoverEBIsolatedChannels || !killDeadChannels)) { + } + // decmocratic sharing + else if (is_FE && (recoverEBFE || !killDeadChannels)) { + } + // kill all the other cases + else { + energy[inputCh] = 0.; // Need to set also the flags ... + } + } + } + // EE + else { + if (is_Single || is_FE || is_VFE) { + // single MVA + if (is_Single && (recoverEBIsolatedChannels || !killDeadChannels)) { + } + // decmocratic sharing + else if (is_FE && (recoverEBFE || !killDeadChannels)) { + // + // Code is definitely too long ... + // + + } + // kill all the other cases + else { + energy[inputCh] = 0.; // Need to set also the flags ... + } + } + } + } + + } // end channel + } + + // host version, to be called by the plugin + void create_ecal_rehit(EventInputDataGPU const& eventInputGPU, + EventOutputDataGPU& eventOutputGPU, + // eventDataForScratchGPU_, + ConditionsProducts const& conditions, + ConfigurationParameters const& configParameters, + uint32_t const nChannelsBarrel, + edm::TimeValue_t const event_time, + cudaStream_t cudaStream) { + int nchannels = eventInputGPU.ebUncalibRecHits.size + eventInputGPU.eeUncalibRecHits.size; + + unsigned int nchannels_per_block = 16; + unsigned int threads_min = nchannels_per_block; + unsigned int blocks_min = (nchannels + threads_min - 1) / threads_min; // TEST : to be optimized (AM) + + // + // kernel create rechit + // + + kernel_create_ecal_rehit<<>>( + // configuration + configParameters.ChannelStatusToBeExcluded, + configParameters.ChannelStatusToBeExcludedSize, + configParameters.killDeadChannels, + configParameters.recoverEBIsolatedChannels, + configParameters.recoverEEIsolatedChannels, + configParameters.recoverEBVFE, + configParameters.recoverEEVFE, + configParameters.recoverEBFE, + configParameters.recoverEEFE, + configParameters.EBLaserMIN, + configParameters.EELaserMIN, + configParameters.EBLaserMAX, + configParameters.EELaserMAX, + // for flags setting + configParameters.expanded_v_DB_reco_flags, + configParameters.expanded_Sizes_v_DB_reco_flags, + configParameters.expanded_flagbit_v_DB_reco_flags, + configParameters.expanded_v_DB_reco_flagsSize, + configParameters.flagmask, + // conditions + conditions.ADCToGeV.adc2gev, + conditions.Intercalib.values, + conditions.ChannelStatus.status, + conditions.LaserAPDPNRatiosRef.values, + conditions.LaserAlphas.values, + // input for transparency corrections + conditions.LaserAPDPNRatios.p1, + conditions.LaserAPDPNRatios.p2, + conditions.LaserAPDPNRatios.p3, + conditions.LaserAPDPNRatios.t1, + conditions.LaserAPDPNRatios.t2, + conditions.LaserAPDPNRatios.t3, + // input for linear corrections + conditions.LinearCorrections.p1, + conditions.LinearCorrections.p2, + conditions.LinearCorrections.p3, + conditions.LinearCorrections.t1, + conditions.LinearCorrections.t2, + conditions.LinearCorrections.t3, + // time, used for time dependent corrections + event_time, + // input + eventInputGPU.ebUncalibRecHits.did.get(), + eventInputGPU.eeUncalibRecHits.did.get(), + eventInputGPU.ebUncalibRecHits.amplitude.get(), + eventInputGPU.eeUncalibRecHits.amplitude.get(), + eventInputGPU.ebUncalibRecHits.jitter.get(), + eventInputGPU.eeUncalibRecHits.jitter.get(), + eventInputGPU.ebUncalibRecHits.chi2.get(), + eventInputGPU.eeUncalibRecHits.chi2.get(), + eventInputGPU.ebUncalibRecHits.flags.get(), + eventInputGPU.eeUncalibRecHits.flags.get(), + // output + eventOutputGPU.recHitsEB.did.get(), + eventOutputGPU.recHitsEE.did.get(), + eventOutputGPU.recHitsEB.energy.get(), + eventOutputGPU.recHitsEE.energy.get(), + eventOutputGPU.recHitsEB.time.get(), + eventOutputGPU.recHitsEE.time.get(), + eventOutputGPU.recHitsEB.chi2.get(), + eventOutputGPU.recHitsEE.chi2.get(), + eventOutputGPU.recHitsEB.flagBits.get(), + eventOutputGPU.recHitsEE.flagBits.get(), + eventOutputGPU.recHitsEB.extra.get(), + eventOutputGPU.recHitsEE.extra.get(), + // other + nchannels, + nChannelsBarrel, + conditions.offsetForHashes); + } + + } // namespace rechit + +} // namespace ecal diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitBuilderKernels.h b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitBuilderKernels.h new file mode 100644 index 0000000000000..cb9c7f435d7b3 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitBuilderKernels.h @@ -0,0 +1,93 @@ +#ifndef RecoLocalCalo_EcalRecProducers_plugins_EcalRecHitBuilderKernels_h +#define RecoLocalCalo_EcalRecProducers_plugins_EcalRecHitBuilderKernels_h + +// +// Builder of ECAL RecHits on GPU +// + +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalRecHit.h" +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalUncalibratedRecHit.h" +#include "DataFormats/Provenance/interface/Timestamp.h" + +#include "Common.h" +#include "DeclsForKernels.h" + +namespace ecal { + namespace rechit { + + __global__ void kernel_create_ecal_rehit( + // configuration + int const* ChannelStatusToBeExcluded, + uint32_t ChannelStatusToBeExcludedSize, + bool killDeadChannels, + bool const recoverEBIsolatedChannels, + bool const recoverEEIsolatedChannels, + bool const recoverEBVFE, + bool const recoverEEVFE, + bool const recoverEBFE, + bool const recoverEEFE, + // for flags setting + int const* expanded_v_DB_reco_flags, + uint32_t const* expanded_Sizes_v_DB_reco_flags, + uint32_t const* expanded_flagbit_v_DB_reco_flags, + uint32_t expanded_v_DB_reco_flagsSize, + uint32_t flagmask, + // conditions + float const* adc2gev, + float const* intercalib, + uint16_t const* status, + float const* apdpnrefs, + float const* alphas, + // input for transparency corrections + float const* p1, + float const* p2, + float const* p3, + edm::TimeValue_t const* t1, + edm::TimeValue_t const* t2, + edm::TimeValue_t const* t3, + // input for linear corrections + float const* lp1, + float const* lp2, + float const* lp3, + edm::TimeValue_t const* lt1, + edm::TimeValue_t const* lt2, + edm::TimeValue_t const* lt3, + // time, used for time dependent corrections + edm::TimeValue_t const event_time, + // input + uint32_t const* did_eb, + uint32_t const* did_ee, + ::ecal::reco::StorageScalarType const* amplitude_eb, // in adc counts + ::ecal::reco::StorageScalarType const* amplitude_ee, // in adc counts + ::ecal::reco::StorageScalarType const* time_eb, + ::ecal::reco::StorageScalarType const* time_ee, + ::ecal::reco::StorageScalarType const* chi2_eb, + ::ecal::reco::StorageScalarType const* chi2_ee, + uint32_t const* flags_eb, + uint32_t const* flags_ee, + // output + uint32_t* did, + ::ecal::reco::StorageScalarType* energy, // in energy [GeV] + ::ecal::reco::StorageScalarType* time, + ::ecal::reco::StorageScalarType* chi2, + uint32_t* flagBits, + uint32_t* extra, + int const nchannels, + uint32_t const nChannelsBarrel, + uint32_t const offsetForHashes); + + // host version, to be called by the plugin + + void create_ecal_rehit(EventInputDataGPU const& eventInputGPU, + EventOutputDataGPU& eventOutputGPU, + ConditionsProducts const& conditions, + ConfigurationParameters const& configParameters, + uint32_t const nChannelsBarrel, + edm::TimeValue_t const event_time, + cudaStream_t cudaStream); + + } // namespace rechit + +} // namespace ecal + +#endif // RecoLocalCalo_EcalRecProducers_plugins_EcalRecHitBuilderKernels_h diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitConvertGPU2CPUFormat.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitConvertGPU2CPUFormat.cc new file mode 100644 index 0000000000000..6df36f4a8b592 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitConvertGPU2CPUFormat.cc @@ -0,0 +1,98 @@ +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalRecHit.h" +#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHit.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "Common.h" + +class EcalRecHitConvertGPU2CPUFormat : public edm::stream::EDProducer<> { +public: + explicit EcalRecHitConvertGPU2CPUFormat(edm::ParameterSet const& ps); + ~EcalRecHitConvertGPU2CPUFormat() override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + using InputProduct = ecal::RecHit>; + void produce(edm::Event&, edm::EventSetup const&) override; + +private: + const edm::EDGetTokenT recHitsGPUEB_; + const edm::EDGetTokenT recHitsGPUEE_; + + const std::string recHitsLabelCPUEB_, recHitsLabelCPUEE_; +}; + +void EcalRecHitConvertGPU2CPUFormat::fillDescriptions(edm::ConfigurationDescriptions& confDesc) { + edm::ParameterSetDescription desc; + + desc.add("recHitsLabelGPUEB", edm::InputTag("ecalRecHitProducerGPU", "EcalRecHitsGPUEB")); + desc.add("recHitsLabelGPUEE", edm::InputTag("ecalRecHitProducerGPU", "EcalRecHitsGPUEE")); + + desc.add("recHitsLabelCPUEB", "EcalRecHitsEB"); + desc.add("recHitsLabelCPUEE", "EcalRecHitsEE"); + + confDesc.addWithDefaultLabel(desc); +} + +EcalRecHitConvertGPU2CPUFormat::EcalRecHitConvertGPU2CPUFormat(const edm::ParameterSet& ps) + : recHitsGPUEB_{consumes(ps.getParameter("recHitsLabelGPUEB"))}, + recHitsGPUEE_{consumes(ps.getParameter("recHitsLabelGPUEE"))}, + recHitsLabelCPUEB_{ps.getParameter("recHitsLabelCPUEB")}, + recHitsLabelCPUEE_{ps.getParameter("recHitsLabelCPUEE")} { + produces(recHitsLabelCPUEB_); + produces(recHitsLabelCPUEE_); +} + +EcalRecHitConvertGPU2CPUFormat::~EcalRecHitConvertGPU2CPUFormat() {} + +void EcalRecHitConvertGPU2CPUFormat::produce(edm::Event& event, edm::EventSetup const& setup) { + auto const& hRecHitsGPUEB = event.get(recHitsGPUEB_); + auto const& hRecHitsGPUEE = event.get(recHitsGPUEE_); + + auto recHitsCPUEB = std::make_unique(); + auto recHitsCPUEE = std::make_unique(); + recHitsCPUEB->reserve(hRecHitsGPUEB.energy.size()); + recHitsCPUEE->reserve(hRecHitsGPUEE.energy.size()); + + for (uint32_t i = 0; i < hRecHitsGPUEB.energy.size(); ++i) { + // + // Save only if energy is >= 0 ! + // This is extremely important because the channels that were supposed + // to be excluded get "-1" as energy + // + + if (hRecHitsGPUEB.energy[i] >= 0) { + recHitsCPUEB->emplace_back(DetId{hRecHitsGPUEB.did[i]}, + hRecHitsGPUEB.energy[i], + hRecHitsGPUEB.time[i], + hRecHitsGPUEB.extra[i], + hRecHitsGPUEB.flagBits[i]); + } + } + + for (uint32_t i = 0; i < hRecHitsGPUEE.energy.size(); ++i) { + // + // Save only if energy is >= 0 ! + // This is extremely important because the channels that were supposed + // to be excluded get "-1" as energy + // + + if (hRecHitsGPUEE.energy[i] >= 0) { + recHitsCPUEE->emplace_back(DetId{hRecHitsGPUEE.did[i]}, + hRecHitsGPUEE.energy[i], + hRecHitsGPUEE.time[i], + hRecHitsGPUEE.extra[i], + hRecHitsGPUEE.flagBits[i]); + } + } + + event.put(std::move(recHitsCPUEB), recHitsLabelCPUEB_); + event.put(std::move(recHitsCPUEE), recHitsLabelCPUEE_); +} + +DEFINE_FWK_MODULE(EcalRecHitConvertGPU2CPUFormat); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitParametersGPUESProducer.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitParametersGPUESProducer.cc new file mode 100644 index 0000000000000..a63ed42cb2b70 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitParametersGPUESProducer.cc @@ -0,0 +1,83 @@ +#include +#include +#include + +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Framework/interface/ESProductHost.h" +#include "FWCore/Framework/interface/ESTransientHandle.h" +#include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/ModuleFactory.h" +#include "FWCore/Framework/interface/SourceFactory.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/ReusableObjectHolder.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDACore/interface/JobConfigurationGPURecord.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalRecHitParametersGPU.h" + +class EcalRecHitParametersGPUESProducer : public edm::ESProducer, public edm::EventSetupRecordIntervalFinder { +public: + EcalRecHitParametersGPUESProducer(edm::ParameterSet const&); + ~EcalRecHitParametersGPUESProducer() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions&); + std::unique_ptr produce(JobConfigurationGPURecord const&); + +protected: + void setIntervalFor(const edm::eventsetup::EventSetupRecordKey&, + const edm::IOVSyncValue&, + edm::ValidityInterval&) override; + +private: + edm::ParameterSet const pset_; +}; + +EcalRecHitParametersGPUESProducer::EcalRecHitParametersGPUESProducer(edm::ParameterSet const& pset) : pset_{pset} { + setWhatProduced(this); + findingRecord(); +} + +void EcalRecHitParametersGPUESProducer::setIntervalFor(const edm::eventsetup::EventSetupRecordKey& iKey, + const edm::IOVSyncValue& iTime, + edm::ValidityInterval& oInterval) { + oInterval = edm::ValidityInterval(edm::IOVSyncValue::beginOfTime(), edm::IOVSyncValue::endOfTime()); +} + +void EcalRecHitParametersGPUESProducer::fillDescriptions(edm::ConfigurationDescriptions& desc) { + edm::ParameterSetDescription d; + + //---- db statuses to be exluded from reconstruction + d.add>("ChannelStatusToBeExcluded", + { + "kDAC", + "kNoisy", + "kNNoisy", + "kFixedG6", + "kFixedG1", + "kFixedG0", + "kNonRespondingIsolated", + "kDeadVFE", + "kDeadFE", + "kNoDataNoTP", + }); + + // reco flags association to DB flag + edm::ParameterSetDescription desc_list_flagsMapDBReco; + desc_list_flagsMapDBReco.add>("kGood", {"kOk", "kDAC", "kNoLaser", "kNoisy"}); + desc_list_flagsMapDBReco.add>("kNoisy", {"kNNoisy", "kFixedG6", "kFixedG1"}); + desc_list_flagsMapDBReco.add>("kNeighboursRecovered", + {"kFixedG0", "kNonRespondingIsolated", "kDeadVFE"}); + desc_list_flagsMapDBReco.add>("kTowerRecovered", {"kDeadFE"}); + desc_list_flagsMapDBReco.add>("kDead", {"kNoDataNoTP"}); + + d.add("flagsMapDBReco", desc_list_flagsMapDBReco); + + desc.addWithDefaultLabel(d); +} + +std::unique_ptr EcalRecHitParametersGPUESProducer::produce(JobConfigurationGPURecord const&) { + return std::make_unique(pset_); +} + +DEFINE_FWK_EVENTSETUP_SOURCE(EcalRecHitParametersGPUESProducer); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitProducerGPU.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitProducerGPU.cc new file mode 100644 index 0000000000000..a6dabd37f8439 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitProducerGPU.cc @@ -0,0 +1,244 @@ +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalRecHit.h" +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalUncalibratedRecHit.h" +#include "CUDADataFormats/EcalRecHitSoA/interface/RecoTypes.h" +#include "CommonTools/Utils/interface/StringToEnumValue.h" +#include "CondFormats/DataRecord/interface/EcalADCToGeVConstantRcd.h" +#include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h" +#include "CondFormats/DataRecord/interface/EcalIntercalibConstantsRcd.h" +#include "CondFormats/DataRecord/interface/EcalLaserAPDPNRatiosRcd.h" +#include "CondFormats/DataRecord/interface/EcalLaserAPDPNRatiosRefRcd.h" +#include "CondFormats/DataRecord/interface/EcalLaserAlphasRcd.h" +#include "CondFormats/DataRecord/interface/EcalLinearCorrectionsRcd.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHit.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HeterogeneousCore/CUDACore/interface/JobConfigurationGPURecord.h" +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDAServices/interface/CUDAService.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalIntercalibConstantsGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosRefGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAlphasGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalLinearCorrectionsGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalRecHitParametersGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalRechitADCToGeVConstantGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalRechitChannelStatusGPU.h" + +#include "EcalRecHitBuilderKernels.h" + +class EcalRecHitProducerGPU : public edm::stream::EDProducer { +public: + explicit EcalRecHitProducerGPU(edm::ParameterSet const& ps); + ~EcalRecHitProducerGPU() override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + void acquire(edm::Event const&, edm::EventSetup const&, edm::WaitingTaskWithArenaHolder) override; + void produce(edm::Event&, edm::EventSetup const&) override; + +private: + // data + uint32_t neb_, nee_; // extremely important, in particular neb_ + + // gpu input + using InputProduct = cms::cuda::Product>; + edm::EDGetTokenT uncalibRecHitsInEBToken_; + edm::EDGetTokenT uncalibRecHitsInEEToken_; + + // event data + ecal::rechit::EventOutputDataGPU eventOutputDataGPU_; + + cms::cuda::ContextState cudaState_; + + // gpu output + using OutputProduct = cms::cuda::Product>; + edm::EDPutTokenT recHitsTokenEB_, recHitsTokenEE_; + + // configuration parameters + ecal::rechit::ConfigurationParameters configParameters_; + + // conditions handles + edm::ESHandle ADCToGeVConstantHandle_; + edm::ESHandle IntercalibConstantsHandle_; + edm::ESHandle ChannelStatusHandle_; + + edm::ESHandle LaserAPDPNRatiosHandle_; + edm::ESHandle LaserAPDPNRatiosRefHandle_; + edm::ESHandle LaserAlphasHandle_; + edm::ESHandle LinearCorrectionsHandle_; + edm::ESHandle recHitParametersHandle_; + + // Associate reco flagbit (outer vector) to many db status flags (inner vector) + std::vector + expanded_v_DB_reco_flags_; // Transform a map in a vector // FIXME AM: int or uint32 to be checked + std::vector expanded_Sizes_v_DB_reco_flags_; // Saving the size for each piece + std::vector expanded_flagbit_v_DB_reco_flags_; // And the "key" for each key + + uint32_t flagmask_; // do not propagate channels with these flags on +}; + +void EcalRecHitProducerGPU::fillDescriptions(edm::ConfigurationDescriptions& confDesc) { + edm::ParameterSetDescription desc; + + desc.add("uncalibrecHitsInLabelEB", + edm::InputTag("ecalUncalibRecHitProducerGPU", "EcalUncalibRecHitsEB")); + desc.add("uncalibrecHitsInLabelEE", + edm::InputTag("ecalUncalibRecHitProducerGPU", "EcalUncalibRecHitsEE")); + + desc.add("recHitsLabelEB", "EcalRecHitsGPUEB"); + desc.add("recHitsLabelEE", "EcalRecHitsGPUEE"); + + desc.add("killDeadChannels", true); + + desc.add("EBLaserMIN", 0.01); + desc.add("EELaserMIN", 0.01); + desc.add("EBLaserMAX", 30.0); + desc.add("EELaserMAX", 30.0); + + desc.add("maxNumberHitsEB", 61200); + desc.add("maxNumberHitsEE", 14648); +} + +EcalRecHitProducerGPU::EcalRecHitProducerGPU(const edm::ParameterSet& ps) { + //---- input + uncalibRecHitsInEBToken_ = consumes(ps.getParameter("uncalibrecHitsInLabelEB")); + uncalibRecHitsInEEToken_ = consumes(ps.getParameter("uncalibrecHitsInLabelEE")); + + //---- output + recHitsTokenEB_ = produces(ps.getParameter("recHitsLabelEB")); + recHitsTokenEE_ = produces(ps.getParameter("recHitsLabelEE")); + + bool killDeadChannels = ps.getParameter("killDeadChannels"); + configParameters_.killDeadChannels = killDeadChannels; + + configParameters_.EBLaserMIN = ps.getParameter("EBLaserMIN"); + configParameters_.EELaserMIN = ps.getParameter("EELaserMIN"); + configParameters_.EBLaserMAX = ps.getParameter("EBLaserMAX"); + configParameters_.EELaserMAX = ps.getParameter("EELaserMAX"); + + // max number of digis to allocate for + configParameters_.maxNumberHitsEB = ps.getParameter("maxNumberHitsEB"); + configParameters_.maxNumberHitsEE = ps.getParameter("maxNumberHitsEE"); + + flagmask_ = 0; + flagmask_ |= 0x1 << EcalRecHit::kNeighboursRecovered; + flagmask_ |= 0x1 << EcalRecHit::kTowerRecovered; + flagmask_ |= 0x1 << EcalRecHit::kDead; + flagmask_ |= 0x1 << EcalRecHit::kKilled; + flagmask_ |= 0x1 << EcalRecHit::kTPSaturated; + flagmask_ |= 0x1 << EcalRecHit::kL1SpikeFlag; + + configParameters_.flagmask = flagmask_; + + // for recovery and killing + + configParameters_.recoverEBIsolatedChannels = ps.getParameter("recoverEBIsolatedChannels"); + configParameters_.recoverEEIsolatedChannels = ps.getParameter("recoverEEIsolatedChannels"); + configParameters_.recoverEBVFE = ps.getParameter("recoverEBVFE"); + configParameters_.recoverEEVFE = ps.getParameter("recoverEEVFE"); + configParameters_.recoverEBFE = ps.getParameter("recoverEBFE"); + configParameters_.recoverEEFE = ps.getParameter("recoverEEFE"); +} + +EcalRecHitProducerGPU::~EcalRecHitProducerGPU() {} + +void EcalRecHitProducerGPU::acquire(edm::Event const& event, + edm::EventSetup const& setup, + edm::WaitingTaskWithArenaHolder holder) { + // cuda products + auto const& ebUncalibRecHitsProduct = event.get(uncalibRecHitsInEBToken_); + auto const& eeUncalibRecHitsProduct = event.get(uncalibRecHitsInEEToken_); + // raii + cms::cuda::ScopedContextAcquire ctx{ebUncalibRecHitsProduct, std::move(holder), cudaState_}; + // get actual object + auto const& ebUncalibRecHits = ctx.get(ebUncalibRecHitsProduct); + auto const& eeUncalibRecHits = ctx.get(eeUncalibRecHitsProduct); + + ecal::rechit::EventInputDataGPU inputDataGPU{ebUncalibRecHits, eeUncalibRecHits}; + + neb_ = ebUncalibRecHits.size; + nee_ = eeUncalibRecHits.size; + + if ((neb_ > configParameters_.maxNumberHitsEB) || (nee_ > configParameters_.maxNumberHitsEE)) { + edm::LogError("EcalRecHitProducerGPU") + << "max number of channels exceeded. See options 'maxNumberHitsEB and maxNumberHitsEE' "; + } + + int nchannelsEB = ebUncalibRecHits.size; // --> offsetForInput, first EB and then EE + + // conditions + // - laser correction + // - IC + // - adt2gev + + // + setup.get().get(ADCToGeVConstantHandle_); + setup.get().get(IntercalibConstantsHandle_); + setup.get().get(ChannelStatusHandle_); + + setup.get().get(LaserAPDPNRatiosHandle_); + setup.get().get(LaserAPDPNRatiosRefHandle_); + setup.get().get(LaserAlphasHandle_); + setup.get().get(LinearCorrectionsHandle_); + setup.get().get(recHitParametersHandle_); + + auto const& ADCToGeVConstantProduct = ADCToGeVConstantHandle_->getProduct(ctx.stream()); + auto const& IntercalibConstantsProduct = IntercalibConstantsHandle_->getProduct(ctx.stream()); + auto const& ChannelStatusProduct = ChannelStatusHandle_->getProduct(ctx.stream()); + + auto const& LaserAPDPNRatiosProduct = LaserAPDPNRatiosHandle_->getProduct(ctx.stream()); + auto const& LaserAPDPNRatiosRefProduct = LaserAPDPNRatiosRefHandle_->getProduct(ctx.stream()); + auto const& LaserAlphasProduct = LaserAlphasHandle_->getProduct(ctx.stream()); + auto const& LinearCorrectionsProduct = LinearCorrectionsHandle_->getProduct(ctx.stream()); + auto const& recHitParametersProduct = recHitParametersHandle_->getProduct(ctx.stream()); + + // set config ptrs : this is done to avoid changing things downstream + configParameters_.ChannelStatusToBeExcluded = recHitParametersProduct.ChannelStatusToBeExcluded; + configParameters_.ChannelStatusToBeExcludedSize = std::get<0>(recHitParametersHandle_->getValues()).get().size(); + configParameters_.expanded_v_DB_reco_flags = recHitParametersProduct.expanded_v_DB_reco_flags; + configParameters_.expanded_Sizes_v_DB_reco_flags = recHitParametersProduct.expanded_Sizes_v_DB_reco_flags; + configParameters_.expanded_flagbit_v_DB_reco_flags = recHitParametersProduct.expanded_flagbit_v_DB_reco_flags; + configParameters_.expanded_v_DB_reco_flagsSize = std::get<3>(recHitParametersHandle_->getValues()).get().size(); + + // bundle up conditions + ecal::rechit::ConditionsProducts conditions{ADCToGeVConstantProduct, + IntercalibConstantsProduct, + ChannelStatusProduct, + LaserAPDPNRatiosProduct, + LaserAPDPNRatiosRefProduct, + LaserAlphasProduct, + LinearCorrectionsProduct, + IntercalibConstantsHandle_->getOffset()}; + + // dev mem + eventOutputDataGPU_.allocate(configParameters_, ctx.stream()); + + // + // schedule algorithms + // + + edm::TimeValue_t event_time = event.time().value(); + + ecal::rechit::create_ecal_rehit( + inputDataGPU, eventOutputDataGPU_, conditions, configParameters_, nchannelsEB, event_time, ctx.stream()); + + cudaCheck(cudaGetLastError()); +} + +void EcalRecHitProducerGPU::produce(edm::Event& event, edm::EventSetup const& setup) { + cms::cuda::ScopedContextProduce ctx{cudaState_}; + + eventOutputDataGPU_.recHitsEB.size = neb_; + eventOutputDataGPU_.recHitsEE.size = nee_; + + // put into the event + ctx.emplace(event, recHitsTokenEB_, std::move(eventOutputDataGPU_.recHitsEB)); + ctx.emplace(event, recHitsTokenEE_, std::move(eventOutputDataGPU_.recHitsEE)); +} + +DEFINE_FWK_MODULE(EcalRecHitProducerGPU); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitConvertGPU2CPUFormat.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitConvertGPU2CPUFormat.cc new file mode 100644 index 0000000000000..f7e57a61fdd96 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitConvertGPU2CPUFormat.cc @@ -0,0 +1,93 @@ +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalUncalibratedRecHit.h" +#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" +#include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "Common.h" + +class EcalUncalibRecHitConvertGPU2CPUFormat : public edm::stream::EDProducer<> { +public: + explicit EcalUncalibRecHitConvertGPU2CPUFormat(edm::ParameterSet const& ps); + ~EcalUncalibRecHitConvertGPU2CPUFormat() override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + using InputProduct = ecal::UncalibratedRecHit>; + void produce(edm::Event&, edm::EventSetup const&) override; + +private: + const edm::EDGetTokenT recHitsGPUEB_; + const edm::EDGetTokenT recHitsGPUEE_; + + const std::string recHitsLabelCPUEB_, recHitsLabelCPUEE_; +}; + +void EcalUncalibRecHitConvertGPU2CPUFormat::fillDescriptions(edm::ConfigurationDescriptions& confDesc) { + edm::ParameterSetDescription desc; + + desc.add("recHitsLabelGPUEB", edm::InputTag("ecalUncalibRecHitProducerGPU", "EcalUncalibRecHitsEB")); + desc.add("recHitsLabelGPUEE", edm::InputTag("ecalUncalibRecHitProducerGPU", "EcalUncalibRecHitsEE")); + + desc.add("recHitsLabelCPUEB", "EcalUncalibRecHitsEB"); + desc.add("recHitsLabelCPUEE", "EcalUncalibRecHitsEE"); + + confDesc.add("ecalUncalibRecHitConvertGPU2CPUFormat", desc); +} + +EcalUncalibRecHitConvertGPU2CPUFormat::EcalUncalibRecHitConvertGPU2CPUFormat(const edm::ParameterSet& ps) + : recHitsGPUEB_{consumes(ps.getParameter("recHitsLabelGPUEB"))}, + recHitsGPUEE_{consumes(ps.getParameter("recHitsLabelGPUEE"))}, + recHitsLabelCPUEB_{ps.getParameter("recHitsLabelCPUEB")}, + recHitsLabelCPUEE_{ps.getParameter("recHitsLabelCPUEE")} { + produces(recHitsLabelCPUEB_); + produces(recHitsLabelCPUEE_); +} + +EcalUncalibRecHitConvertGPU2CPUFormat::~EcalUncalibRecHitConvertGPU2CPUFormat() {} + +void EcalUncalibRecHitConvertGPU2CPUFormat::produce(edm::Event& event, edm::EventSetup const& setup) { + edm::Handle hRecHitsGPUEB, hRecHitsGPUEE; + event.getByToken(recHitsGPUEB_, hRecHitsGPUEB); + event.getByToken(recHitsGPUEE_, hRecHitsGPUEE); + + auto recHitsCPUEB = std::make_unique(); + auto recHitsCPUEE = std::make_unique(); + recHitsCPUEB->reserve(hRecHitsGPUEB->amplitude.size()); + recHitsCPUEE->reserve(hRecHitsGPUEE->amplitude.size()); + + for (uint32_t i = 0; i < hRecHitsGPUEB->amplitude.size(); ++i) { + recHitsCPUEB->emplace_back(DetId{hRecHitsGPUEB->did[i]}, + hRecHitsGPUEB->amplitude[i], + hRecHitsGPUEB->pedestal[i], + hRecHitsGPUEB->jitter[i], + hRecHitsGPUEB->chi2[i], + hRecHitsGPUEB->flags[i]); + (*recHitsCPUEB)[i].setJitterError(hRecHitsGPUEB->jitterError[i]); + auto const offset = i * EcalDataFrame::MAXSAMPLES; + for (uint32_t sample = 0; sample < EcalDataFrame::MAXSAMPLES; ++sample) + (*recHitsCPUEB)[i].setOutOfTimeAmplitude(sample, hRecHitsGPUEB->amplitudesAll[offset + sample]); + } + + for (uint32_t i = 0; i < hRecHitsGPUEE->amplitude.size(); ++i) { + recHitsCPUEE->emplace_back(DetId{hRecHitsGPUEE->did[i]}, + hRecHitsGPUEE->amplitude[i], + hRecHitsGPUEE->pedestal[i], + hRecHitsGPUEE->jitter[i], + hRecHitsGPUEE->chi2[i], + hRecHitsGPUEE->flags[i]); + (*recHitsCPUEE)[i].setJitterError(hRecHitsGPUEE->jitterError[i]); + auto const offset = i * EcalDataFrame::MAXSAMPLES; + for (uint32_t sample = 0; sample < EcalDataFrame::MAXSAMPLES; ++sample) + (*recHitsCPUEE)[i].setOutOfTimeAmplitude(sample, hRecHitsGPUEE->amplitudesAll[offset + sample]); + } + + event.put(std::move(recHitsCPUEB), recHitsLabelCPUEB_); + event.put(std::move(recHitsCPUEE), recHitsLabelCPUEE_); +} + +DEFINE_FWK_MODULE(EcalUncalibRecHitConvertGPU2CPUFormat); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitMultiFitAlgoGPU.cu b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitMultiFitAlgoGPU.cu new file mode 100644 index 0000000000000..9d5a8a2ad1bd3 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitMultiFitAlgoGPU.cu @@ -0,0 +1,305 @@ +#include +#include + +#include + +#include "CondFormats/EcalObjects/interface/EcalMGPAGainRatio.h" +#include "CondFormats/EcalObjects/interface/EcalPedestals.h" +#include "CondFormats/EcalObjects/interface/EcalPulseCovariances.h" +#include "CondFormats/EcalObjects/interface/EcalPulseShapes.h" +#include "CondFormats/EcalObjects/interface/EcalSampleMask.h" +#include "CondFormats/EcalObjects/interface/EcalSamplesCorrelation.h" +#include "CondFormats/EcalObjects/interface/EcalXtalGroupId.h" +#include "DataFormats/EcalDigi/interface/EcalDataFrame.h" +#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" + +#include "AmplitudeComputationCommonKernels.h" +#include "AmplitudeComputationKernels.h" +#include "Common.h" +#include "EcalUncalibRecHitMultiFitAlgoGPU.h" +#include "TimeComputationKernels.h" + +//#define DEBUG + +//#define ECAL_RECO_CUDA_DEBUG + +namespace ecal { + namespace multifit { + + void entryPoint(EventInputDataGPU const& eventInputGPU, + EventOutputDataGPU& eventOutputGPU, + EventDataForScratchGPU& scratch, + ConditionsProducts const& conditions, + ConfigurationParameters const& configParameters, + cudaStream_t cudaStream) { + using digis_type = std::vector; + using dids_type = std::vector; + // accodring to the cpu setup //----> hardcoded + bool const gainSwitchUseMaxSampleEB = true; + // accodring to the cpu setup //----> hardcoded + bool const gainSwitchUseMaxSampleEE = false; + + uint32_t const offsetForHashes = conditions.offsetForHashes; + uint32_t const offsetForInputs = eventInputGPU.ebDigis.size; + unsigned int totalChannels = eventInputGPU.ebDigis.size + eventInputGPU.eeDigis.size; + + // + // 1d preparation kernel + // + unsigned int nchannels_per_block = 32; + unsigned int threads_1d = 10 * nchannels_per_block; + unsigned int blocks_1d = threads_1d > 10 * totalChannels ? 1 : (totalChannels * 10 + threads_1d - 1) / threads_1d; + int shared_bytes = nchannels_per_block * EcalDataFrame::MAXSAMPLES * + (sizeof(bool) + sizeof(bool) + sizeof(bool) + sizeof(bool) + sizeof(char) + sizeof(bool)); + kernel_prep_1d_and_initialize<<>>( + conditions.pulseShapes.values, + eventInputGPU.ebDigis.data.get(), + eventInputGPU.ebDigis.ids.get(), + eventInputGPU.eeDigis.data.get(), + eventInputGPU.eeDigis.ids.get(), + (SampleVector*)scratch.samples.get(), + (SampleVector*)eventOutputGPU.recHitsEB.amplitudesAll.get(), + (SampleVector*)eventOutputGPU.recHitsEE.amplitudesAll.get(), + (SampleGainVector*)scratch.gainsNoise.get(), + conditions.pedestals.mean_x1, + conditions.pedestals.mean_x12, + conditions.pedestals.rms_x12, + conditions.pedestals.mean_x6, + conditions.gainRatios.gain6Over1, + conditions.gainRatios.gain12Over6, + scratch.hasSwitchToGain6.get(), + scratch.hasSwitchToGain1.get(), + scratch.isSaturated.get(), + eventOutputGPU.recHitsEB.amplitude.get(), + eventOutputGPU.recHitsEE.amplitude.get(), + eventOutputGPU.recHitsEB.chi2.get(), + eventOutputGPU.recHitsEE.chi2.get(), + eventOutputGPU.recHitsEB.pedestal.get(), + eventOutputGPU.recHitsEE.pedestal.get(), + eventOutputGPU.recHitsEB.did.get(), + eventOutputGPU.recHitsEE.did.get(), + eventOutputGPU.recHitsEB.flags.get(), + eventOutputGPU.recHitsEE.flags.get(), + scratch.acState.get(), + (BXVectorType*)scratch.activeBXs.get(), + offsetForHashes, + offsetForInputs, + gainSwitchUseMaxSampleEB, + gainSwitchUseMaxSampleEE, + totalChannels); + cudaCheck(cudaGetLastError()); + + // + // 2d preparation kernel + // + int blocks_2d = totalChannels; + dim3 threads_2d{10, 10}; + kernel_prep_2d<<>>((SampleGainVector*)scratch.gainsNoise.get(), + eventInputGPU.ebDigis.ids.get(), + eventInputGPU.eeDigis.ids.get(), + conditions.pedestals.rms_x12, + conditions.pedestals.rms_x6, + conditions.pedestals.rms_x1, + conditions.gainRatios.gain12Over6, + conditions.gainRatios.gain6Over1, + conditions.samplesCorrelation.EBG12SamplesCorrelation, + conditions.samplesCorrelation.EBG6SamplesCorrelation, + conditions.samplesCorrelation.EBG1SamplesCorrelation, + conditions.samplesCorrelation.EEG12SamplesCorrelation, + conditions.samplesCorrelation.EEG6SamplesCorrelation, + conditions.samplesCorrelation.EEG1SamplesCorrelation, + (SampleMatrix*)scratch.noisecov.get(), + (PulseMatrixType*)scratch.pulse_matrix.get(), + conditions.pulseShapes.values, + scratch.hasSwitchToGain6.get(), + scratch.hasSwitchToGain1.get(), + scratch.isSaturated.get(), + offsetForHashes, + offsetForInputs); + cudaCheck(cudaGetLastError()); + + // run minimization kernels + v1::minimization_procedure(eventInputGPU, eventOutputGPU, scratch, conditions, configParameters, cudaStream); + + if (configParameters.shouldRunTimingComputation) { + // + // TODO: this guy can run concurrently with other kernels, + // there is no dependence on the order of execution + // + unsigned int threads_time_init = threads_1d; + unsigned int blocks_time_init = blocks_1d; + int sharedBytesInit = 2 * threads_time_init * sizeof(SampleVector::Scalar); + kernel_time_computation_init<<>>( + eventInputGPU.ebDigis.data.get(), + eventInputGPU.ebDigis.ids.get(), + eventInputGPU.eeDigis.data.get(), + eventInputGPU.eeDigis.ids.get(), + conditions.pedestals.rms_x12, + conditions.pedestals.rms_x6, + conditions.pedestals.rms_x1, + conditions.pedestals.mean_x12, + conditions.pedestals.mean_x6, + conditions.pedestals.mean_x1, + conditions.gainRatios.gain12Over6, + conditions.gainRatios.gain6Over1, + scratch.sample_values.get(), + scratch.sample_value_errors.get(), + scratch.ampMaxError.get(), + scratch.useless_sample_values.get(), + scratch.pedestal_nums.get(), + offsetForHashes, + offsetForInputs, + conditions.sampleMask.getEcalSampleMaskRecordEB(), + conditions.sampleMask.getEcalSampleMaskRecordEE(), + totalChannels); + cudaCheck(cudaGetLastError()); + + // + // TODO: small kernel only for EB. It needs to be checked if + /// fusing such small kernels is beneficial in here + // + // we are running only over EB digis + // therefore we need to create threads/blocks only for that + unsigned int const threadsFixMGPA = threads_1d; + unsigned int const blocksFixMGPA = + threadsFixMGPA > 10 * eventInputGPU.ebDigis.size + ? 1 + : (10 * eventInputGPU.ebDigis.size + threadsFixMGPA - 1) / threadsFixMGPA; + kernel_time_compute_fixMGPAslew<<>>( + eventInputGPU.ebDigis.data.get(), + eventInputGPU.eeDigis.data.get(), + scratch.sample_values.get(), + scratch.sample_value_errors.get(), + scratch.useless_sample_values.get(), + conditions.sampleMask.getEcalSampleMaskRecordEB(), + totalChannels, + offsetForInputs); + cudaCheck(cudaGetLastError()); + + int sharedBytes = EcalDataFrame::MAXSAMPLES * nchannels_per_block * 4 * sizeof(SampleVector::Scalar); + auto const threads_nullhypot = threads_1d; + auto const blocks_nullhypot = blocks_1d; + kernel_time_compute_nullhypot<<>>( + scratch.sample_values.get(), + scratch.sample_value_errors.get(), + scratch.useless_sample_values.get(), + scratch.chi2sNullHypot.get(), + scratch.sum0sNullHypot.get(), + scratch.sumAAsNullHypot.get(), + totalChannels); + cudaCheck(cudaGetLastError()); + + unsigned int nchannels_per_block_makeratio = 10; + unsigned int threads_makeratio = 45 * nchannels_per_block_makeratio; + unsigned int blocks_makeratio = threads_makeratio > 45 * totalChannels + ? 1 + : (totalChannels * 45 + threads_makeratio - 1) / threads_makeratio; + int sharedBytesMakeRatio = 5 * threads_makeratio * sizeof(SampleVector::Scalar); + kernel_time_compute_makeratio<<>>( + scratch.sample_values.get(), + scratch.sample_value_errors.get(), + eventInputGPU.ebDigis.ids.get(), + eventInputGPU.eeDigis.ids.get(), + scratch.useless_sample_values.get(), + scratch.pedestal_nums.get(), + configParameters.amplitudeFitParametersEB, + configParameters.amplitudeFitParametersEE, + configParameters.timeFitParametersEB, + configParameters.timeFitParametersEE, + scratch.sumAAsNullHypot.get(), + scratch.sum0sNullHypot.get(), + scratch.tMaxAlphaBetas.get(), + scratch.tMaxErrorAlphaBetas.get(), + scratch.accTimeMax.get(), + scratch.accTimeWgt.get(), + scratch.tcState.get(), + configParameters.timeFitParametersSizeEB, + configParameters.timeFitParametersSizeEE, + configParameters.timeFitLimitsFirstEB, + configParameters.timeFitLimitsFirstEE, + configParameters.timeFitLimitsSecondEB, + configParameters.timeFitLimitsSecondEE, + totalChannels, + offsetForInputs); + cudaCheck(cudaGetLastError()); + + auto const threads_findamplchi2 = threads_1d; + auto const blocks_findamplchi2 = blocks_1d; + int const sharedBytesFindAmplChi2 = 2 * threads_findamplchi2 * sizeof(SampleVector::Scalar); + kernel_time_compute_findamplchi2_and_finish<<>>(scratch.sample_values.get(), + scratch.sample_value_errors.get(), + eventInputGPU.ebDigis.ids.get(), + eventInputGPU.eeDigis.ids.get(), + scratch.useless_sample_values.get(), + scratch.tMaxAlphaBetas.get(), + scratch.tMaxErrorAlphaBetas.get(), + scratch.accTimeMax.get(), + scratch.accTimeWgt.get(), + configParameters.amplitudeFitParametersEB, + configParameters.amplitudeFitParametersEE, + scratch.sumAAsNullHypot.get(), + scratch.sum0sNullHypot.get(), + scratch.chi2sNullHypot.get(), + scratch.tcState.get(), + scratch.ampMaxAlphaBeta.get(), + scratch.ampMaxError.get(), + scratch.timeMax.get(), + scratch.timeError.get(), + totalChannels, + offsetForInputs); + cudaCheck(cudaGetLastError()); + + auto const threads_timecorr = 32; + auto const blocks_timecorr = + threads_timecorr > totalChannels ? 1 : (totalChannels + threads_timecorr - 1) / threads_timecorr; + kernel_time_correction_and_finalize<<>>( + eventOutputGPU.recHitsEB.amplitude.get(), + eventOutputGPU.recHitsEE.amplitude.get(), + eventInputGPU.ebDigis.data.get(), + eventInputGPU.ebDigis.ids.get(), + eventInputGPU.eeDigis.data.get(), + eventInputGPU.eeDigis.ids.get(), + conditions.timeBiasCorrections.EBTimeCorrAmplitudeBins, + conditions.timeBiasCorrections.EETimeCorrAmplitudeBins, + conditions.timeBiasCorrections.EBTimeCorrShiftBins, + conditions.timeBiasCorrections.EETimeCorrShiftBins, + scratch.timeMax.get(), + scratch.timeError.get(), + conditions.pedestals.rms_x12, + conditions.timeCalibConstants.values, + eventOutputGPU.recHitsEB.jitter.get(), + eventOutputGPU.recHitsEE.jitter.get(), + eventOutputGPU.recHitsEB.jitterError.get(), + eventOutputGPU.recHitsEE.jitterError.get(), + eventOutputGPU.recHitsEB.flags.get(), + eventOutputGPU.recHitsEE.flags.get(), + conditions.timeBiasCorrections.EBTimeCorrAmplitudeBinsSize, + conditions.timeBiasCorrections.EETimeCorrAmplitudeBinsSize, + configParameters.timeConstantTermEB, + configParameters.timeConstantTermEE, + conditions.timeOffsetConstant.getEBValue(), + conditions.timeOffsetConstant.getEEValue(), + configParameters.timeNconstEB, + configParameters.timeNconstEE, + configParameters.amplitudeThreshEB, + configParameters.amplitudeThreshEE, + configParameters.outOfTimeThreshG12pEB, + configParameters.outOfTimeThreshG12pEE, + configParameters.outOfTimeThreshG12mEB, + configParameters.outOfTimeThreshG12mEE, + configParameters.outOfTimeThreshG61pEB, + configParameters.outOfTimeThreshG61pEE, + configParameters.outOfTimeThreshG61mEB, + configParameters.outOfTimeThreshG61mEE, + offsetForHashes, + offsetForInputs, + totalChannels); + cudaCheck(cudaGetLastError()); + } + } + + } // namespace multifit +} // namespace ecal diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitMultiFitAlgoGPU.h b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitMultiFitAlgoGPU.h new file mode 100644 index 0000000000000..c84047a8bf8e7 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitMultiFitAlgoGPU.h @@ -0,0 +1,23 @@ +#ifndef RecoLocalCalo_EcalRecProducers_plugins_EcalUncalibRecHitMultiFitAlgoGPU_h +#define RecoLocalCalo_EcalRecProducers_plugins_EcalUncalibRecHitMultiFitAlgoGPU_h + +#include + +#include + +#include "DeclsForKernels.h" + +namespace ecal { + namespace multifit { + + void entryPoint(EventInputDataGPU const&, + EventOutputDataGPU&, + EventDataForScratchGPU&, + ConditionsProducts const&, + ConfigurationParameters const&, + cudaStream_t); + + } // namespace multifit +} // namespace ecal + +#endif // RecoLocalCalo_EcalRecProducers_plugins_EcalUncalibRecHitMultiFitAlgoGPU_h diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitProducerGPU.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitProducerGPU.cc new file mode 100644 index 0000000000000..a321f35144c39 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitProducerGPU.cc @@ -0,0 +1,279 @@ +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalUncalibratedRecHit.h" +#include "CondFormats/DataRecord/interface/EcalGainRatiosRcd.h" +#include "CondFormats/DataRecord/interface/EcalPedestalsRcd.h" +#include "CondFormats/DataRecord/interface/EcalPulseCovariancesRcd.h" +#include "CondFormats/DataRecord/interface/EcalPulseShapesRcd.h" +#include "CondFormats/DataRecord/interface/EcalSampleMaskRcd.h" +#include "CondFormats/DataRecord/interface/EcalSamplesCorrelationRcd.h" +#include "CondFormats/DataRecord/interface/EcalTimeBiasCorrectionsRcd.h" +#include "CondFormats/DataRecord/interface/EcalTimeCalibConstantsRcd.h" +#include "CondFormats/DataRecord/interface/EcalTimeOffsetConstantRcd.h" +#include "CondFormats/EcalObjects/interface/EcalTimeOffsetConstant.h" +#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "HeterogeneousCore/CUDACore/interface/JobConfigurationGPURecord.h" +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalGainRatiosGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalMultifitParametersGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalPedestalsGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalPulseCovariancesGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalPulseShapesGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSamplesCorrelationGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalTimeBiasCorrectionsGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalTimeCalibConstantsGPU.h" + +#include "Common.h" +#include "DeclsForKernels.h" +#include "EcalUncalibRecHitMultiFitAlgoGPU.h" + +class EcalUncalibRecHitProducerGPU : public edm::stream::EDProducer { +public: + explicit EcalUncalibRecHitProducerGPU(edm::ParameterSet const& ps); + ~EcalUncalibRecHitProducerGPU() override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + void acquire(edm::Event const&, edm::EventSetup const&, edm::WaitingTaskWithArenaHolder) override; + void produce(edm::Event&, edm::EventSetup const&) override; + +private: + using InputProduct = cms::cuda::Product>; + const edm::EDGetTokenT digisTokenEB_, digisTokenEE_; + using OutputProduct = cms::cuda::Product>; + const edm::EDPutTokenT recHitsTokenEB_, recHitsTokenEE_; + + // conditions tokens + const edm::ESGetToken pedestalsToken_; + const edm::ESGetToken gainRatiosToken_; + const edm::ESGetToken pulseShapesToken_; + const edm::ESGetToken pulseCovariancesToken_; + const edm::ESGetToken samplesCorrelationToken_; + const edm::ESGetToken timeBiasCorrectionsToken_; + const edm::ESGetToken timeCalibConstantsToken_; + const edm::ESGetToken sampleMaskToken_; + const edm::ESGetToken timeOffsetConstantToken_; + const edm::ESGetToken multifitParametersToken_; + + // configuration parameters + ecal::multifit::ConfigurationParameters configParameters_; + + // event data + ecal::multifit::EventOutputDataGPU eventOutputDataGPU_; + + cms::cuda::ContextState cudaState_; + + uint32_t neb_, nee_; +}; + +void EcalUncalibRecHitProducerGPU::fillDescriptions(edm::ConfigurationDescriptions& confDesc) { + edm::ParameterSetDescription desc; + + desc.add("digisLabelEB", edm::InputTag("ecalRawToDigiGPU", "ebDigis")); + desc.add("digisLabelEE", edm::InputTag("ecalRawToDigiGPU", "eeDigis")); + + desc.add("recHitsLabelEB", "EcalUncalibRecHitsEB"); + desc.add("recHitsLabelEE", "EcalUncalibRecHitsEE"); + + desc.add("EBtimeFitLimits_Lower", 0.2); + desc.add("EBtimeFitLimits_Upper", 1.4); + desc.add("EEtimeFitLimits_Lower", 0.2); + desc.add("EEtimeFitLimits_Upper", 1.4); + desc.add("EBtimeConstantTerm", .6); + desc.add("EEtimeConstantTerm", 1.0); + desc.add("EBtimeNconst", 28.5); + desc.add("EEtimeNconst", 31.8); + desc.add("outOfTimeThresholdGain12pEB", 5); + desc.add("outOfTimeThresholdGain12mEB", 5); + desc.add("outOfTimeThresholdGain61pEB", 5); + desc.add("outOfTimeThresholdGain61mEB", 5); + desc.add("outOfTimeThresholdGain12pEE", 1000); + desc.add("outOfTimeThresholdGain12mEE", 1000); + desc.add("outOfTimeThresholdGain61pEE", 1000); + desc.add("outOfTimeThresholdGain61mEE", 1000); + desc.add("amplitudeThresholdEB", 10); + desc.add("amplitudeThresholdEE", 10); + desc.add("maxNumberHitsEB", 61200); + desc.add("maxNumberHitsEE", 14648); + desc.addUntracked>("kernelMinimizeThreads", {32, 1, 1}); + desc.add("shouldRunTimingComputation", true); + confDesc.addWithDefaultLabel(desc); +} + +EcalUncalibRecHitProducerGPU::EcalUncalibRecHitProducerGPU(const edm::ParameterSet& ps) + : digisTokenEB_{consumes(ps.getParameter("digisLabelEB"))}, + digisTokenEE_{consumes(ps.getParameter("digisLabelEE"))}, + recHitsTokenEB_{produces(ps.getParameter("recHitsLabelEB"))}, + recHitsTokenEE_{produces(ps.getParameter("recHitsLabelEE"))}, + pedestalsToken_{esConsumes()}, + gainRatiosToken_{esConsumes()}, + pulseShapesToken_{esConsumes()}, + pulseCovariancesToken_{esConsumes()}, + samplesCorrelationToken_{esConsumes()}, + timeBiasCorrectionsToken_{esConsumes()}, + timeCalibConstantsToken_{esConsumes()}, + sampleMaskToken_{esConsumes()}, + timeOffsetConstantToken_{esConsumes()}, + multifitParametersToken_{esConsumes()} { + std::pair EBtimeFitLimits, EEtimeFitLimits; + EBtimeFitLimits.first = ps.getParameter("EBtimeFitLimits_Lower"); + EBtimeFitLimits.second = ps.getParameter("EBtimeFitLimits_Upper"); + EEtimeFitLimits.first = ps.getParameter("EEtimeFitLimits_Lower"); + EEtimeFitLimits.second = ps.getParameter("EEtimeFitLimits_Upper"); + + auto EBtimeConstantTerm = ps.getParameter("EBtimeConstantTerm"); + auto EEtimeConstantTerm = ps.getParameter("EEtimeConstantTerm"); + auto EBtimeNconst = ps.getParameter("EBtimeNconst"); + auto EEtimeNconst = ps.getParameter("EEtimeNconst"); + + auto outOfTimeThreshG12pEB = ps.getParameter("outOfTimeThresholdGain12pEB"); + auto outOfTimeThreshG12mEB = ps.getParameter("outOfTimeThresholdGain12mEB"); + auto outOfTimeThreshG61pEB = ps.getParameter("outOfTimeThresholdGain61pEB"); + auto outOfTimeThreshG61mEB = ps.getParameter("outOfTimeThresholdGain61mEB"); + auto outOfTimeThreshG12pEE = ps.getParameter("outOfTimeThresholdGain12pEE"); + auto outOfTimeThreshG12mEE = ps.getParameter("outOfTimeThresholdGain12mEE"); + auto outOfTimeThreshG61pEE = ps.getParameter("outOfTimeThresholdGain61pEE"); + auto outOfTimeThreshG61mEE = ps.getParameter("outOfTimeThresholdGain61mEE"); + auto amplitudeThreshEB = ps.getParameter("amplitudeThresholdEB"); + auto amplitudeThreshEE = ps.getParameter("amplitudeThresholdEE"); + + // max number of digis to allocate for + configParameters_.maxNumberHitsEB = ps.getParameter("maxNumberHitsEB"); + configParameters_.maxNumberHitsEE = ps.getParameter("maxNumberHitsEE"); + + // switch to run timing computation kernels + configParameters_.shouldRunTimingComputation = ps.getParameter("shouldRunTimingComputation"); + + // minimize kernel launch conf + auto threadsMinimize = ps.getUntrackedParameter>("kernelMinimizeThreads"); + configParameters_.kernelMinimizeThreads[0] = threadsMinimize[0]; + configParameters_.kernelMinimizeThreads[1] = threadsMinimize[1]; + configParameters_.kernelMinimizeThreads[2] = threadsMinimize[2]; + + // + // configuration and physics parameters: done once + // assume there is a single device + // use sync copying + // + + // time fit parameters and limits + configParameters_.timeFitLimitsFirstEB = EBtimeFitLimits.first; + configParameters_.timeFitLimitsSecondEB = EBtimeFitLimits.second; + configParameters_.timeFitLimitsFirstEE = EEtimeFitLimits.first; + configParameters_.timeFitLimitsSecondEE = EEtimeFitLimits.second; + + // time constant terms + configParameters_.timeConstantTermEB = EBtimeConstantTerm; + configParameters_.timeConstantTermEE = EEtimeConstantTerm; + + // time N const + configParameters_.timeNconstEB = EBtimeNconst; + configParameters_.timeNconstEE = EEtimeNconst; + + // amplitude threshold for time flags + configParameters_.amplitudeThreshEB = amplitudeThreshEB; + configParameters_.amplitudeThreshEE = amplitudeThreshEE; + + // out of time thresholds gain-dependent + configParameters_.outOfTimeThreshG12pEB = outOfTimeThreshG12pEB; + configParameters_.outOfTimeThreshG12pEE = outOfTimeThreshG12pEE; + configParameters_.outOfTimeThreshG61pEB = outOfTimeThreshG61pEB; + configParameters_.outOfTimeThreshG61pEE = outOfTimeThreshG61pEE; + configParameters_.outOfTimeThreshG12mEB = outOfTimeThreshG12mEB; + configParameters_.outOfTimeThreshG12mEE = outOfTimeThreshG12mEE; + configParameters_.outOfTimeThreshG61mEB = outOfTimeThreshG61mEB; + configParameters_.outOfTimeThreshG61mEE = outOfTimeThreshG61mEE; +} + +EcalUncalibRecHitProducerGPU::~EcalUncalibRecHitProducerGPU() {} + +void EcalUncalibRecHitProducerGPU::acquire(edm::Event const& event, + edm::EventSetup const& setup, + edm::WaitingTaskWithArenaHolder holder) { + // cuda products + auto const& ebDigisProduct = event.get(digisTokenEB_); + auto const& eeDigisProduct = event.get(digisTokenEE_); + + // raii + cms::cuda::ScopedContextAcquire ctx{ebDigisProduct, std::move(holder), cudaState_}; + + // get actual obj + auto const& ebDigis = ctx.get(ebDigisProduct); + auto const& eeDigis = ctx.get(eeDigisProduct); + ecal::multifit::EventInputDataGPU inputDataGPU{ebDigis, eeDigis}; + neb_ = ebDigis.size; + nee_ = eeDigis.size; + + if ((neb_ > configParameters_.maxNumberHitsEB) || (nee_ > configParameters_.maxNumberHitsEE)) { + edm::LogError("EcalUncalibRecHitProducerGPU") + << "max number of channels exceeded. See options 'maxNumberHitsEB and maxNumberHitsEE' "; + } + + // conditions + auto const& timeCalibConstantsData = setup.getData(timeCalibConstantsToken_); + auto const& sampleMaskData = setup.getData(sampleMaskToken_); + auto const& timeOffsetConstantData = setup.getData(timeOffsetConstantToken_); + auto const& multifitParametersData = setup.getData(multifitParametersToken_); + + auto const& pedestals = setup.getData(pedestalsToken_).getProduct(ctx.stream()); + auto const& gainRatios = setup.getData(gainRatiosToken_).getProduct(ctx.stream()); + auto const& pulseShapes = setup.getData(pulseShapesToken_).getProduct(ctx.stream()); + auto const& pulseCovariances = setup.getData(pulseCovariancesToken_).getProduct(ctx.stream()); + auto const& samplesCorrelation = setup.getData(samplesCorrelationToken_).getProduct(ctx.stream()); + auto const& timeBiasCorrections = setup.getData(timeBiasCorrectionsToken_).getProduct(ctx.stream()); + auto const& timeCalibConstants = timeCalibConstantsData.getProduct(ctx.stream()); + auto const& multifitParameters = multifitParametersData.getProduct(ctx.stream()); + + // assign ptrs/values: this is done not to change how things look downstream + configParameters_.amplitudeFitParametersEB = multifitParameters.amplitudeFitParametersEB; + configParameters_.amplitudeFitParametersEE = multifitParameters.amplitudeFitParametersEE; + configParameters_.timeFitParametersEB = multifitParameters.timeFitParametersEB; + configParameters_.timeFitParametersEE = multifitParameters.timeFitParametersEE; + configParameters_.timeFitParametersSizeEB = multifitParametersData.getValues()[2].get().size(); + configParameters_.timeFitParametersSizeEE = multifitParametersData.getValues()[3].get().size(); + + // bundle up conditions + ecal::multifit::ConditionsProducts conditions{pedestals, + gainRatios, + pulseShapes, + pulseCovariances, + samplesCorrelation, + timeBiasCorrections, + timeCalibConstants, + sampleMaskData, + timeOffsetConstantData, + timeCalibConstantsData.getOffset(), + multifitParameters}; + + // dev mem + eventOutputDataGPU_.allocate(configParameters_, ctx.stream()); + + // scratch mem + ecal::multifit::EventDataForScratchGPU eventDataForScratchGPU; + eventDataForScratchGPU.allocate(configParameters_, ctx.stream()); + + // + // schedule algorithms + // + ecal::multifit::entryPoint( + inputDataGPU, eventOutputDataGPU_, eventDataForScratchGPU, conditions, configParameters_, ctx.stream()); +} + +void EcalUncalibRecHitProducerGPU::produce(edm::Event& event, edm::EventSetup const& setup) { + //DurationMeasurer timer{std::string{"produce duration"}}; + cms::cuda::ScopedContextProduce ctx{cudaState_}; + + // set the size of eb and ee + eventOutputDataGPU_.recHitsEB.size = neb_; + eventOutputDataGPU_.recHitsEE.size = nee_; + + // put into the event + ctx.emplace(event, recHitsTokenEB_, std::move(eventOutputDataGPU_.recHitsEB)); + ctx.emplace(event, recHitsTokenEE_, std::move(eventOutputDataGPU_.recHitsEE)); +} + +DEFINE_FWK_MODULE(EcalUncalibRecHitProducerGPU); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitWorkerMultiFit.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitWorkerMultiFit.cc index 7a2d8842cb180..3e5d0f240475b 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitWorkerMultiFit.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitWorkerMultiFit.cc @@ -65,7 +65,13 @@ EcalUncalibRecHitWorkerMultiFit::EcalUncalibRecHitWorkerMultiFit(const edm::Para timealgo_ = ratioMethod; else if (timeAlgoName == "WeightsMethod") timealgo_ = weightsMethod; - else if (timeAlgoName != "None") + else if (timeAlgoName == "crossCorrelationMethod") { + timealgo_ = crossCorrelationMethod; + double startTime = ps.getParameter("crossCorrelationStartTime"); + double stopTime = ps.getParameter("crossCorrelationStopTime"); + double targetTimePrecision = ps.getParameter("crossCorrelationTargetTimePrecision"); + computeCC_ = std::make_unique(startTime, stopTime, targetTimePrecision); + } else if (timeAlgoName != "None") edm::LogError("EcalUncalibRecHitError") << "No time estimation algorithm defined"; // ratio method parameters @@ -472,7 +478,19 @@ void EcalUncalibRecHitWorkerMultiFit::run(const edm::Event& evt, } uncalibRecHit.setJitter(timerh); uncalibRecHit.setJitterError(0.); // not computed with weights - } else { // no time method; + + } else if (timealgo_ == crossCorrelationMethod) { + std::vector amplitudes(activeBX.size()); + for (unsigned int ibx = 0; ibx < activeBX.size(); ++ibx) + amplitudes[ibx] = uncalibRecHit.outOfTimeAmplitude(ibx); + + float jitterError = 0.; + float jitter = computeCC_->computeTimeCC(*itdg, amplitudes, aped, aGain, fullpulse, uncalibRecHit, jitterError); + + uncalibRecHit.setJitter(jitter); + uncalibRecHit.setJitterError(jitterError); + + } else { // no time method; uncalibRecHit.setJitter(0.); uncalibRecHit.setJitterError(0.); } @@ -661,6 +679,9 @@ edm::ParameterSetDescription EcalUncalibRecHitWorkerMultiFit::getAlgoDescription edm::ParameterDescription("kPoorRecoFlagEE", false, true) and edm::ParameterDescription("chi2ThreshEB_", 65.0, true) and edm::ParameterDescription("chi2ThreshEE_", 50.0, true) and + edm::ParameterDescription("crossCorrelationStartTime", -25.0, true) and + edm::ParameterDescription("crossCorrelationStopTime", 25.0, true) and + edm::ParameterDescription("crossCorrelationTargetTimePrecision", 0.01, true) and edm::ParameterDescription("EcalPulseShapeParameters", psd0, true)); return psd; diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitWorkerMultiFit.h b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitWorkerMultiFit.h index 97dea75227dad..25655945f9426 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitWorkerMultiFit.h +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitWorkerMultiFit.h @@ -40,6 +40,7 @@ #include "CondFormats/DataRecord/interface/EcalSamplesCorrelationRcd.h" #include "CondFormats/DataRecord/interface/EcalPulseShapesRcd.h" #include "CondFormats/DataRecord/interface/EcalPulseCovariancesRcd.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalUncalibRecHitTimingCCAlgo.h" namespace edm { class Event; @@ -94,7 +95,7 @@ class EcalUncalibRecHitWorkerMultiFit final : public EcalUncalibRecHitWorkerBase edm::ESGetToken sampleMaskToken_; // time algorithm to be used to set the jitter and its uncertainty - enum TimeAlgo { noMethod, ratioMethod, weightsMethod }; + enum TimeAlgo { noMethod, ratioMethod, weightsMethod, crossCorrelationMethod }; TimeAlgo timealgo_ = noMethod; // time weights method @@ -163,6 +164,9 @@ class EcalUncalibRecHitWorkerMultiFit final : public EcalUncalibRecHitWorkerBase bool kPoorRecoFlagEE_; double chi2ThreshEB_; double chi2ThreshEE_; + + //Timing Cross Correlation Algo + std::unique_ptr computeCC_; }; #endif diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EigenMatrixTypes_gpu.h b/RecoLocalCalo/EcalRecProducers/plugins/EigenMatrixTypes_gpu.h new file mode 100644 index 0000000000000..bbf9cb0dbb5c9 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/EigenMatrixTypes_gpu.h @@ -0,0 +1,49 @@ +#ifndef RecoLocalCalo_EcalRecProducers_plugins_EigenMatrixTypes_gpu_h +#define RecoLocalCalo_EcalRecProducers_plugins_EigenMatrixTypes_gpu_h + +#include + +#include + +#include "CUDADataFormats/EcalRecHitSoA/interface/RecoTypes.h" + +namespace ecal { + namespace multifit { + + constexpr int SampleVectorSize = 10; + constexpr int FullSampleVectorSize = 19; + constexpr int PulseVectorSize = 12; + constexpr int NGains = 3; + + using data_type = ::ecal::reco::ComputationScalarType; + + typedef Eigen::Matrix PulseMatrixType; + typedef Eigen::Matrix BXVectorType; + using SampleMatrixD = Eigen::Matrix; + + typedef Eigen::Matrix SampleVector; + typedef Eigen::Matrix FullSampleVector; + typedef Eigen::Matrix PulseVector; + typedef Eigen::Matrix BXVector; + typedef Eigen::Matrix SampleGainVector; + typedef Eigen::Matrix SampleMatrix; + typedef Eigen::Matrix FullSampleMatrix; + typedef Eigen::Matrix PulseMatrix; + typedef Eigen::Matrix + SamplePulseMatrix; + typedef Eigen::LLT SampleDecompLLT; + typedef Eigen::LLT SampleDecompLLTD; + typedef Eigen::LLT PulseDecompLLT; + typedef Eigen::LDLT PulseDecompLDLT; + + typedef Eigen::Matrix SingleMatrix; + typedef Eigen::Matrix SingleVector; + + typedef std::array SampleMatrixGainArray; + + using PermutationMatrix = Eigen::PermutationMatrix; + + } // namespace multifit +} // namespace ecal + +#endif // RecoLocalCalo_EcalRecProducers_plugins_EigenMatrixTypes_gpu_h diff --git a/RecoLocalCalo/EcalRecProducers/plugins/KernelHelpers.cu b/RecoLocalCalo/EcalRecProducers/plugins/KernelHelpers.cu new file mode 100644 index 0000000000000..5316ed87d6ecc --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/KernelHelpers.cu @@ -0,0 +1,308 @@ +#include "DataFormats/EcalDetId/interface/EBDetId.h" +#include "DataFormats/EcalDetId/interface/EEDetId.h" + +#include "KernelHelpers.h" + +namespace ecal { + namespace reconstruction { + + namespace internal { + + namespace barrel { + + __device__ __forceinline__ bool positiveZ(uint32_t id) { return id & 0x10000; } + + __device__ __forceinline__ uint32_t ietaAbs(uint32_t id) { return (id >> 9) & 0x7F; } + + __device__ __forceinline__ uint32_t iphi(uint32_t id) { return id & 0x1FF; } + + __device__ int dccFromSm(int ism) { + int iz = 1; + if (ism > 18) + iz = -1; + if (iz == -1) + ism -= 18; + int idcc = 9 + ism; + if (iz == +1) + idcc += 18; + return idcc; + } + + __device__ int sm(int ieta, int iphi) { + int iz = 1; + if (ieta < 0) + iz = -1; + ieta *= iz; + int iphi_ = iphi; + if (iphi_ > 360) + iphi_ -= 360; + int ism = (iphi_ - 1) / 20 + 1; + if (iz == -1) + ism += 18; + return ism; + } + + __device__ int dcc(int ieta, int iphi) { + int ism = sm(ieta, iphi); + return dccFromSm(ism); + } + + // + // ---- why on hell things are so complex and not simple ??? + // + + __device__ int lm_channel(int iX, int iY) { + static const int idx_[] = { + // clang-format off + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + 1, 2, 2, 2, 2, 4, 4, 4, 4, 6, 6, 6, 6, 8, 8, 8, 8, // 3 + 1, 2, 2, 2, 2, 4, 4, 4, 4, 6, 6, 6, 6, 8, 8, 8, 8, // 2 + 1, 3, 3, 3, 3, 5, 5, 5, 5, 7, 7, 7, 7, 9, 9, 9, 9, // 1 + 1, 3, 3, 3, 3, 5, 5, 5, 5, 7, 7, 7, 7, 9, 9, 9, 9 // 0 + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + // clang-format on + }; + + int il, ic, ii; + const int iym = 4; + const int ixm = 17; + int iX_ = iX + 1; + int iY_ = iY + 1; + il = iym - iY_; + ic = iX_ - 1; + ii = il * ixm + ic; + if (ii < 0 || ii > (int)(sizeof(idx_) / sizeof(int))) { + return -1; + }; + return idx_[ii]; + } + + __device__ int localCoord_x(int ieta, int iphi) { + int iz = 1; + if (ieta < 0) { + iz = -1; + } + ieta *= iz; + int ix = ieta - 1; + + return ix; + } + + __device__ int localCoord_y(int ieta, int iphi) { + int iz = 1; + if (ieta < 0) { + iz = -1; + } + int iphi_ = iphi; + if (iphi_ > 360) { + iphi_ -= 360; + } + int iy = (iphi_ - 1) % 20; + if (iz == -1) { + iy = 19 - iy; + } + + return iy; + } + + __device__ int lmmod(int ieta, int iphi) { + int ix = localCoord_x(ieta, iphi); + int iy = localCoord_y(ieta, iphi); + + return lm_channel(ix / 5, iy / 5); + } + + __device__ int side(int ieta, int iphi) { + int ilmmod = lmmod(ieta, iphi); + return (ilmmod % 2 == 0) ? 1 : 0; + } + + } // namespace barrel + + } // namespace internal + + __device__ uint32_t hashedIndexEB(uint32_t id) { + using namespace internal::barrel; + return (EBDetId::MAX_IETA + (positiveZ(id) ? ietaAbs(id) - 1 : -ietaAbs(id))) * EBDetId::MAX_IPHI + iphi(id) - 1; + } + + // + // https://cmssdt.cern.ch/lxr/source/CalibCalorimetry/EcalLaserAnalyzer/src/MEEBGeom.cc + // function: "lmr" + + __device__ int laser_monitoring_region_EB(uint32_t id) { + using namespace internal::barrel; + + int ieta; + if (positiveZ(id)) { + ieta = ietaAbs(id); + } else { + ieta = -ietaAbs(id); + } + + int idcc = dcc(ieta, (int)(iphi(id))); + int ism = idcc - 9; + + int iside = side(ieta, (int)(iphi(id))); + + return (1 + 2 * (ism - 1) + iside); + } + + namespace internal { + + namespace endcap { + + __device__ __forceinline__ uint32_t ix(uint32_t id) { return (id >> 7) & 0x7F; } + + __device__ __forceinline__ uint32_t iy(uint32_t id) { return id & 0x7F; } + + __device__ __forceinline__ bool positiveZ(uint32_t id) { return id & 0x4000; } + + // these constants come from EE Det Id + __constant__ const unsigned short kxf[] = { + 41, 51, 41, 51, 41, 51, 36, 51, 36, 51, 26, 51, 26, 51, 26, 51, 21, 51, 21, 51, 21, 51, 21, 51, 21, + 51, 16, 51, 16, 51, 14, 51, 14, 51, 14, 51, 14, 51, 14, 51, 9, 51, 9, 51, 9, 51, 9, 51, 9, 51, + 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 4, 51, 4, 51, 4, + 51, 4, 51, 4, 56, 1, 58, 1, 59, 1, 60, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, + 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 61, 1, 61, 1, 60, 1, 59, 1, 58, 4, 56, 4, 51, 4, + 51, 4, 51, 4, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, + 9, 51, 9, 51, 9, 51, 9, 51, 9, 51, 14, 51, 14, 51, 14, 51, 14, 51, 14, 51, 16, 51, 16, 51, 21, + 51, 21, 51, 21, 51, 21, 51, 21, 51, 26, 51, 26, 51, 26, 51, 36, 51, 36, 51, 41, 51, 41, 51, 41, 51}; + + __constant__ const unsigned short kdi[] = { + 0, 10, 20, 30, 40, 50, 60, 75, 90, 105, 120, 145, 170, 195, 220, 245, 270, + 300, 330, 360, 390, 420, 450, 480, 510, 540, 570, 605, 640, 675, 710, 747, 784, 821, + 858, 895, 932, 969, 1006, 1043, 1080, 1122, 1164, 1206, 1248, 1290, 1332, 1374, 1416, 1458, 1500, + 1545, 1590, 1635, 1680, 1725, 1770, 1815, 1860, 1905, 1950, 1995, 2040, 2085, 2130, 2175, 2220, 2265, + 2310, 2355, 2400, 2447, 2494, 2541, 2588, 2635, 2682, 2729, 2776, 2818, 2860, 2903, 2946, 2988, 3030, + 3071, 3112, 3152, 3192, 3232, 3272, 3311, 3350, 3389, 3428, 3467, 3506, 3545, 3584, 3623, 3662, 3701, + 3740, 3779, 3818, 3857, 3896, 3935, 3974, 4013, 4052, 4092, 4132, 4172, 4212, 4253, 4294, 4336, 4378, + 4421, 4464, 4506, 4548, 4595, 4642, 4689, 4736, 4783, 4830, 4877, 4924, 4969, 5014, 5059, 5104, 5149, + 5194, 5239, 5284, 5329, 5374, 5419, 5464, 5509, 5554, 5599, 5644, 5689, 5734, 5779, 5824, 5866, 5908, + 5950, 5992, 6034, 6076, 6118, 6160, 6202, 6244, 6281, 6318, 6355, 6392, 6429, 6466, 6503, 6540, 6577, + 6614, 6649, 6684, 6719, 6754, 6784, 6814, 6844, 6874, 6904, 6934, 6964, 6994, 7024, 7054, 7079, 7104, + 7129, 7154, 7179, 7204, 7219, 7234, 7249, 7264, 7274, 7284, 7294, 7304, 7314}; + + __device__ int quadrant(int iX, int iY) { + bool near = iX >= 11; + bool far = !near; + bool top = iY >= 11; + bool bot = !top; + + int iquad = 0; + if (near && top) + iquad = 1; + if (far && top) + iquad = 2; + if (far && bot) + iquad = 3; + if (near && bot) + iquad = 4; + + return iquad; + } + + __device__ int sector(int iX, int iY) { + // Y (towards the surface) + // T + // | + // | + // | + // o---------| X (towards center of LHC) + // + static const int idx_[] = { + // clang-format off + // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, // 20 + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, // 19 + 0, 0, 0, 2, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 8, 0, 0, 0, // 18 + 0, 0, 2, 2, 2, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 8, 8, 8, 0, 0, // 17 + 0, 2, 2, 2, 2, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 8, 8, 8, 8, 0, // 16 + 0, 2, 2, 2, 2, 2, 1, 1, 1, 1, 9, 9, 9, 9, 8, 8, 8, 8, 8, 0, // 15 + 0, 2, 2, 2, 2, 2, 2, 1, 1, 1, 9, 9, 9, 8, 8, 8, 8, 8, 8, 0, // 14 + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, // 13 + 3, 3, 2, 2, 2, 2, 2, 2, 2, 0, 0, 8, 8, 8, 8, 8, 8, 8, 7, 7, // 12 + 3, 3, 3, 3, 3, 3, 3, 2, 0, 0, 0, 0, 8, 7, 7, 7, 7, 7, 7, 7, // 11 + 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, // 10 + 3, 3, 3, 3, 3, 3, 3, 4, 4, 0, 0, 6, 6, 7, 7, 7, 7, 7, 7, 7, // 9 + 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 7, // 8 + 0, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 0, // 7 + 0, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 0, // 6 + 0, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 0, // 5 + 0, 0, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 0, 0, // 4 + 0, 0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 0, 0, 0, // 3 + 0, 0, 0, 0, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 0, 0, 0, 0, // 2 + 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0 // 1 + // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + // clang-format on + }; + + int iym, ixm, il, ic, ii; + iym = 20; + ixm = 20; + int iX_ = iX; + int iY_ = iY; + il = iym - iY_; + ic = iX_ - 1; + ii = il * ixm + ic; + + if (ii < 0 || ii > (int)(sizeof(idx_) / sizeof(int)) || idx_[ii] == 0) { + return -1; + }; + return idx_[ii]; + } + + } // namespace endcap + + } // namespace internal + + __device__ uint32_t hashedIndexEE(uint32_t id) { + using namespace internal::endcap; + + const uint32_t jx(ix(id)); + const uint32_t jd(2 * (iy(id) - 1) + (jx - 1) / 50); + return ((positiveZ(id) ? EEDetId::kEEhalf : 0) + kdi[jd] + jx - kxf[jd]); + } + + // + // https://cmssdt.cern.ch/lxr/source/CalibCalorimetry/EcalLaserAnalyzer/src/MEEEGeom.cc + // https://github.com/cms-sw/cmssw/blob/master/CalibCalorimetry/EcalLaserCorrection/src/EcalLaserDbService.cc + // + + __device__ int laser_monitoring_region_EE(uint32_t id) { + using namespace internal::endcap; + + // SuperCrysCoord + uint32_t iX = (ix(id) - 1) / 5 + 1; + uint32_t iY = (iy(id) - 1) / 5 + 1; + + // Correct convention + // * @param iz iz/zside index: -1 for EE-, +1 for EE+ + // https://github.com/cms-sw/cmssw/blob/master/DataFormats/EcalDetId/interface/EEDetId.h#L68-L71 + // zside in https://github.com/cms-sw/cmssw/blob/master/CalibCalorimetry/EcalLaserCorrection/src/EcalLaserDbService.cc#L63 + // + int iz = positiveZ(id) ? 1 : -1; + + int iquad = quadrant(iX, iY); + int isect = sector(iX, iY); + if (isect < 0) + return -1; + + int ilmr = 0; + ilmr = isect - 6; + if (ilmr <= 0) + ilmr += 9; + if (ilmr == 9) + ilmr++; + if (ilmr == 8 && iquad == 4) + ilmr++; + if (iz == +1) + ilmr += 72; + else + ilmr += 82; + + return ilmr; + } + + } // namespace reconstruction +} // namespace ecal diff --git a/RecoLocalCalo/EcalRecProducers/plugins/KernelHelpers.h b/RecoLocalCalo/EcalRecProducers/plugins/KernelHelpers.h new file mode 100644 index 0000000000000..74c5b68d8e137 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/KernelHelpers.h @@ -0,0 +1,26 @@ +#ifndef RecoLocalCalo_EcalRecProducers_plugins_KernelHelpers_h +#define RecoLocalCalo_EcalRecProducers_plugins_KernelHelpers_h + +#include "DataFormats/CaloRecHit/interface/MultifitComputations.h" + +#include +#include +#include + +#include + +namespace ecal { + namespace reconstruction { + + __device__ uint32_t hashedIndexEB(uint32_t id); + + __device__ uint32_t hashedIndexEE(uint32_t id); + + __device__ int laser_monitoring_region_EB(uint32_t id); + + __device__ int laser_monitoring_region_EE(uint32_t id); + + } // namespace reconstruction +} // namespace ecal + +#endif // RecoLocalCalo_EcalRecProducers_plugins_KernelHelpers_h diff --git a/RecoLocalCalo/EcalRecProducers/plugins/TimeComputationKernels.cu b/RecoLocalCalo/EcalRecProducers/plugins/TimeComputationKernels.cu new file mode 100644 index 0000000000000..9c2d2fc986c08 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/TimeComputationKernels.cu @@ -0,0 +1,1133 @@ +#include +#include + +#include + +#include "DataFormats/EcalDigi/interface/EcalDataFrame.h" +#include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h" +#include "DataFormats/Math/interface/approx_exp.h" +#include "DataFormats/Math/interface/approx_log.h" +#include "FWCore/Utilities/interface/CMSUnrollLoop.h" + +#include "Common.h" +#include "TimeComputationKernels.h" +#include "KernelHelpers.h" + +//#define DEBUG + +//#define ECAL_RECO_CUDA_DEBUG + +namespace ecal { + namespace multifit { + + __device__ __forceinline__ bool use_sample(unsigned int sample_mask, unsigned int sample) { + return sample_mask & (0x1 << (EcalDataFrame::MAXSAMPLES - (sample + 1))); + } + + __global__ void kernel_time_compute_nullhypot(SampleVector::Scalar const* sample_values, + SampleVector::Scalar const* sample_value_errors, + bool const* useless_sample_values, + SampleVector::Scalar* chi2s, + SampleVector::Scalar* sum0s, + SampleVector::Scalar* sumAAs, + const int nchannels) { + using ScalarType = SampleVector::Scalar; + constexpr int nsamples = EcalDataFrame::MAXSAMPLES; + + // indices + int tx = threadIdx.x + blockDim.x * blockIdx.x; + int ltx = threadIdx.x; + int ch = tx / nsamples; + int nchannels_per_block = blockDim.x / nsamples; + + // threads that return here should not affect the __syncthreads() below since they have exitted the kernel + if (ch >= nchannels) + return; + + int sample = tx % nsamples; + + // shared mem inits + extern __shared__ char sdata[]; + char* s_sum0 = sdata; + SampleVector::Scalar* s_sum1 = reinterpret_cast(s_sum0 + nchannels_per_block * nsamples); + SampleVector::Scalar* s_sumA = s_sum1 + nchannels_per_block * nsamples; + SampleVector::Scalar* s_sumAA = s_sumA + nchannels_per_block * nsamples; + + // TODO make sure no div by 0 + const auto inv_error = + useless_sample_values[tx] ? 0.0 : 1.0 / (sample_value_errors[tx] * sample_value_errors[tx]); + const auto sample_value = sample_values[tx]; + s_sum0[ltx] = useless_sample_values[tx] ? 0 : 1; + s_sum1[ltx] = inv_error; + s_sumA[ltx] = sample_value * inv_error; + s_sumAA[ltx] = sample_value * sample_value * inv_error; + __syncthreads(); + + // 5 threads for [0, 4] samples + if (sample < 5) { + s_sum0[ltx] += s_sum0[ltx + 5]; + s_sum1[ltx] += s_sum1[ltx + 5]; + s_sumA[ltx] += s_sumA[ltx + 5]; + s_sumAA[ltx] += s_sumAA[ltx + 5]; + } + __syncthreads(); + + if (sample < 2) { + // note double counting of sample 3 + s_sum0[ltx] += s_sum0[ltx + 2] + s_sum0[ltx + 3]; + s_sum1[ltx] += s_sum1[ltx + 2] + s_sum1[ltx + 3]; + s_sumA[ltx] += s_sumA[ltx + 2] + s_sumA[ltx + 3]; + s_sumAA[ltx] += s_sumAA[ltx + 2] + s_sumAA[ltx + 3]; + } + __syncthreads(); + + if (sample == 0) { + // note, subtract to remove the double counting of sample == 3 + const auto sum0 = s_sum0[ltx] + s_sum0[ltx + 1] - s_sum0[ltx + 3]; + const auto sum1 = s_sum1[ltx] + s_sum1[ltx + 1] - s_sum1[ltx + 3]; + const auto sumA = s_sumA[ltx] + s_sumA[ltx + 1] - s_sumA[ltx + 3]; + const auto sumAA = s_sumAA[ltx] + s_sumAA[ltx + 1] - s_sumAA[ltx + 3]; + const auto chi2 = sum0 > 0 ? (sumAA - sumA * sumA / sum1) / sum0 : static_cast(0); + chi2s[ch] = chi2; + sum0s[ch] = sum0; + sumAAs[ch] = sumAA; + +#ifdef DEBUG_TC_NULLHYPOT + if (ch == 0) { + printf("chi2 = %f sum0 = %d sumAA = %f\n", chi2, static_cast(sum0), sumAA); + } +#endif + } + } + + constexpr float fast_expf(float x) { return unsafe_expf<6>(x); } + constexpr float fast_logf(float x) { return unsafe_logf<7>(x); } + + //#define DEBUG_TC_MAKERATIO + // + // launch ctx parameters are + // 45 threads per channel, X channels per block, Y blocks + // 45 comes from: 10 samples for i <- 0 to 9 and for j <- i+1 to 9 + // TODO: it might be much beter to use 32 threads per channel instead of 45 + // to simplify the synchronization + // + __global__ void kernel_time_compute_makeratio(SampleVector::Scalar const* sample_values, + SampleVector::Scalar const* sample_value_errors, + uint32_t const* dids_eb, + uint32_t const* dids_ee, + bool const* useless_sample_values, + char const* pedestal_nums, + ConfigurationParameters::type const* amplitudeFitParametersEB, + ConfigurationParameters::type const* amplitudeFitParametersEE, + ConfigurationParameters::type const* timeFitParametersEB, + ConfigurationParameters::type const* timeFitParametersEE, + SampleVector::Scalar const* sumAAsNullHypot, + SampleVector::Scalar const* sum0sNullHypot, + SampleVector::Scalar* tMaxAlphaBetas, + SampleVector::Scalar* tMaxErrorAlphaBetas, + SampleVector::Scalar* g_accTimeMax, + SampleVector::Scalar* g_accTimeWgt, + TimeComputationState* g_state, + unsigned const int timeFitParameters_sizeEB, + unsigned const int timeFitParameters_sizeEE, + ConfigurationParameters::type const timeFitLimits_firstEB, + ConfigurationParameters::type const timeFitLimits_firstEE, + ConfigurationParameters::type const timeFitLimits_secondEB, + ConfigurationParameters::type const timeFitLimits_secondEE, + const int nchannels, + uint32_t const offsetForInputs) { + using ScalarType = SampleVector::Scalar; + + // constants + constexpr int nthreads_per_channel = 45; // n=10, n(n-1)/2 + constexpr int nsamples = EcalDataFrame::MAXSAMPLES; + + // indices + const int gtx = threadIdx.x + blockDim.x * blockIdx.x; + const int ch = gtx / nthreads_per_channel; + const int ltx = threadIdx.x % nthreads_per_channel; + const int ch_start = ch * nsamples; + const auto* dids = ch >= offsetForInputs ? dids_ee : dids_eb; + const int inputCh = ch >= offsetForInputs ? ch - offsetForInputs : ch; + + // remove inactive threads + // threads that return here should not affect the __syncthreads() below since they have exitted the kernel + if (ch >= nchannels) + return; + + const auto did = DetId{dids[inputCh]}; + const auto isBarrel = did.subdetId() == EcalBarrel; + const auto* amplitudeFitParameters = isBarrel ? amplitudeFitParametersEB : amplitudeFitParametersEE; + const auto* timeFitParameters = isBarrel ? timeFitParametersEB : timeFitParametersEE; + const auto timeFitParameters_size = isBarrel ? timeFitParameters_sizeEB : timeFitParameters_sizeEE; + const auto timeFitLimits_first = isBarrel ? timeFitLimits_firstEB : timeFitLimits_firstEE; + const auto timeFitLimits_second = isBarrel ? timeFitLimits_secondEB : timeFitLimits_secondEE; + + extern __shared__ char smem[]; + ScalarType* shr_chi2s = reinterpret_cast(smem); + ScalarType* shr_time_wgt = shr_chi2s + blockDim.x; + ScalarType* shr_time_max = shr_time_wgt + blockDim.x; + ScalarType* shrTimeMax = shr_time_max + blockDim.x; + ScalarType* shrTimeWgt = shrTimeMax + blockDim.x; + + // map tx -> (sample_i, sample_j) + int sample_i, sample_j = 0; + if (ltx >= 0 && ltx <= 8) { + sample_i = 0; + sample_j = 1 + ltx; + } else if (ltx <= 16) { + sample_i = 1; + sample_j = 2 + ltx - 9; + } else if (ltx <= 23) { + sample_i = 2; + sample_j = 3 + ltx - 17; + } else if (ltx <= 29) { + sample_i = 3; + sample_j = 4 + ltx - 24; + } else if (ltx <= 34) { + sample_i = 4; + sample_j = 5 + ltx - 30; + } else if (ltx <= 38) { + sample_i = 5; + sample_j = 6 + ltx - 35; + } else if (ltx <= 41) { + sample_i = 6; + sample_j = 7 + ltx - 39; + } else if (ltx <= 43) { + sample_i = 7; + sample_j = 8 + ltx - 42; + } else if (ltx <= 44) { + sample_i = 8; + sample_j = 9; + } else + assert(false); + + const auto tx_i = ch_start + sample_i; + const auto tx_j = ch_start + sample_j; + + // + // note, given the way we partition the block, with 45 threads per channel + // we will end up with inactive threads which need to be dragged along + // through the synching point + // + bool const condForUselessSamples = useless_sample_values[tx_i] || useless_sample_values[tx_j] || + sample_values[tx_i] <= 1 || sample_values[tx_j] <= 1; + + // + // see cpu implementation for explanation + // + ScalarType chi2 = std::numeric_limits::max(); + ScalarType tmax = 0; + ScalarType tmaxerr = 0; + shrTimeMax[threadIdx.x] = 0; + shrTimeWgt[threadIdx.x] = 0; + bool internalCondForSkipping1 = true; + bool internalCondForSkipping2 = true; + if (!condForUselessSamples) { + const auto rtmp = sample_values[tx_i] / sample_values[tx_j]; + const auto invampl_i = 1.0 / sample_values[tx_i]; + const auto relErr2_i = sample_value_errors[tx_i] * sample_value_errors[tx_i] * invampl_i * invampl_i; + const auto invampl_j = 1.0 / sample_values[tx_j]; + const auto relErr2_j = sample_value_errors[tx_j] * sample_value_errors[tx_j] * invampl_j * invampl_j; + const auto err1 = rtmp * rtmp * (relErr2_i + relErr2_j); + auto err2 = sample_value_errors[tx_j] * (sample_values[tx_i] - sample_values[tx_j]) * (invampl_j * invampl_j); + // TODO non-divergent branch for a block if each block has 1 channel + // otherwise non-divergent for groups of 45 threads + // at this point, pedestal_nums[ch] can be either 0, 1 or 2 + if (pedestal_nums[ch] == 2) + err2 *= err2 * 0.5; + const auto err3 = (0.289 * 0.289) * (invampl_j * invampl_j); + const auto total_error = std::sqrt(err1 + err2 + err3); + + const auto alpha = amplitudeFitParameters[0]; + const auto beta = amplitudeFitParameters[1]; + const auto alphabeta = alpha * beta; + const auto invalphabeta = 1.0 / alphabeta; + + // variables instead of a struct + const auto ratio_index = sample_i; + const auto ratio_step = sample_j - sample_i; + const auto ratio_value = rtmp; + const auto ratio_error = total_error; + + const auto rlim_i_j = fast_expf(static_cast(sample_j - sample_i) / beta) - 0.001; + internalCondForSkipping1 = !(total_error < 1.0 && rtmp > 0.001 && rtmp < rlim_i_j); + if (!internalCondForSkipping1) { + // + // precompute. + // in cpu version this was done conditionally + // however easier to do it here (precompute) and then just filter out + // if not needed + // + const auto l_timeFitLimits_first = timeFitLimits_first; + const auto l_timeFitLimits_second = timeFitLimits_second; + if (ratio_step == 1 && ratio_value >= l_timeFitLimits_first && ratio_value <= l_timeFitLimits_second) { + const auto time_max_i = static_cast(ratio_index); + auto u = timeFitParameters[timeFitParameters_size - 1]; + CMS_UNROLL_LOOP + for (int k = timeFitParameters_size - 2; k >= 0; k--) + u = u * ratio_value + timeFitParameters[k]; + + auto du = (timeFitParameters_size - 1) * (timeFitParameters[timeFitParameters_size - 1]); + for (int k = timeFitParameters_size - 2; k >= 1; k--) + du = du * ratio_value + k * timeFitParameters[k]; + + const auto error2 = ratio_error * ratio_error * du * du; + const auto time_max = error2 > 0 ? (time_max_i - u) / error2 : static_cast(0); + const auto time_wgt = error2 > 0 ? 1.0 / error2 : static_cast(0); + + // store into shared mem + // note, this name is essentially identical to the one used + // below. + shrTimeMax[threadIdx.x] = error2 > 0 ? time_max : 0; + shrTimeWgt[threadIdx.x] = error2 > 0 ? time_wgt : 0; + } else { + shrTimeMax[threadIdx.x] = 0; + shrTimeWgt[threadIdx.x] = 0; + } + + // continue with ratios + const auto stepOverBeta = static_cast(ratio_step) / beta; + const auto offset = static_cast(ratio_index) + alphabeta; + const auto rmin = std::max(ratio_value - ratio_error, 0.001); + const auto rmax = std::min(ratio_value + ratio_error, + fast_expf(static_cast(ratio_step) / beta) - 0.001); + const auto time1 = offset - ratio_step / (fast_expf((stepOverBeta - fast_logf(rmin)) / alpha) - 1.0); + const auto time2 = offset - ratio_step / (fast_expf((stepOverBeta - fast_logf(rmax)) / alpha) - 1.0); + + // set these guys + tmax = 0.5 * (time1 + time2); + tmaxerr = 0.5 * std::sqrt((time1 - time2) * (time1 - time2)); +#ifdef DEBUG_TC_MAKERATIO + if (ch == 1 || ch == 0) + printf("ch = %d ltx = %d tmax = %f tmaxerr = %f time1 = %f time2 = %f offset = %f rmin = %f rmax = %f\n", + ch, + ltx, + tmax, + tmaxerr, + time1, + time2, + offset, + rmin, + rmax); +#endif + + SampleVector::Scalar sumAf = 0; + SampleVector::Scalar sumff = 0; + const int itmin = std::max(-1, static_cast(std::floor(tmax - alphabeta))); + auto loffset = (static_cast(itmin) - tmax) * invalphabeta; + // TODO: data dependence + for (int it = itmin + 1; it < nsamples; it++) { + loffset += invalphabeta; + if (useless_sample_values[ch_start + it]) + continue; + const auto inverr2 = 1.0 / (sample_value_errors[ch_start + it] * sample_value_errors[ch_start + it]); + const auto term1 = 1.0 + loffset; + const auto f = (term1 > 1e-6) ? fast_expf(alpha * (fast_logf(term1) - loffset)) : 0; + sumAf += sample_values[ch_start + it] * (f * inverr2); + sumff += f * (f * inverr2); + } + + const auto sumAA = sumAAsNullHypot[ch]; + const auto sum0 = sum0sNullHypot[ch]; + chi2 = sumAA; + // TODO: sum0 can not be 0 below, need to introduce the check upfront + if (sumff > 0) { + chi2 = sumAA - sumAf * (sumAf / sumff); + } + chi2 /= sum0; + +#ifdef DEBUG_TC_MAKERATIO + if (ch == 1 || ch == 0) + printf("ch = %d ltx = %d sumAf = %f sumff = %f sumAA = %f sum0 = %d tmax = %f tmaxerr = %f chi2 = %f\n", + ch, + ltx, + sumAf, + sumff, + sumAA, + static_cast(sum0), + tmax, + tmaxerr, + chi2); +#endif + + if (chi2 > 0 && tmax > 0 && tmaxerr > 0) + internalCondForSkipping2 = false; + else + chi2 = std::numeric_limits::max(); + } + } + + // store into smem + shr_chi2s[threadIdx.x] = chi2; + __syncthreads(); + + // find min chi2 - quite crude for now + // TODO validate/check + char iter = nthreads_per_channel / 2 + nthreads_per_channel % 2; + bool oddElements = nthreads_per_channel % 2; + CMS_UNROLL_LOOP + while (iter >= 1) { + if (ltx < iter) + // for odd ns, the last guy will just store itself + // exception is for ltx == 0 and iter==1 + shr_chi2s[threadIdx.x] = oddElements && (ltx == iter - 1 && ltx > 0) + ? shr_chi2s[threadIdx.x] + : std::min(shr_chi2s[threadIdx.x], shr_chi2s[threadIdx.x + iter]); + __syncthreads(); + oddElements = iter % 2; + iter = iter == 1 ? iter / 2 : iter / 2 + iter % 2; + } + + // filter out inactive or useless samples threads + if (!condForUselessSamples && !internalCondForSkipping1 && !internalCondForSkipping2) { + // min chi2, now compute weighted average of tmax measurements + // see cpu version for more explanation + const auto chi2min = shr_chi2s[threadIdx.x - ltx]; + const auto chi2Limit = chi2min + 1.0; + const auto inverseSigmaSquared = chi2 < chi2Limit ? 1.0 / (tmaxerr * tmaxerr) : 0.0; + +#ifdef DEBUG_TC_MAKERATIO + if (ch == 1 || ch == 0) + printf("ch = %d ltx = %d chi2min = %f chi2Limit = %f inverseSigmaSquared = %f\n", + ch, + ltx, + chi2min, + chi2Limit, + inverseSigmaSquared); +#endif + + // store into shared mem and run reduction + // TODO: check if cooperative groups would be better + // TODO: check if shuffling intrinsics are better + shr_time_wgt[threadIdx.x] = inverseSigmaSquared; + shr_time_max[threadIdx.x] = tmax * inverseSigmaSquared; + } else { + shr_time_wgt[threadIdx.x] = 0; + shr_time_max[threadIdx.x] = 0; + } + __syncthreads(); + + // reduce to compute time_max and time_wgt + iter = nthreads_per_channel / 2 + nthreads_per_channel % 2; + oddElements = nthreads_per_channel % 2; + CMS_UNROLL_LOOP + while (iter >= 1) { + if (ltx < iter) { + shr_time_wgt[threadIdx.x] = oddElements && (ltx == iter - 1 && ltx > 0) + ? shr_time_wgt[threadIdx.x] + : shr_time_wgt[threadIdx.x] + shr_time_wgt[threadIdx.x + iter]; + shr_time_max[threadIdx.x] = oddElements && (ltx == iter - 1 && ltx > 0) + ? shr_time_max[threadIdx.x] + : shr_time_max[threadIdx.x] + shr_time_max[threadIdx.x + iter]; + shrTimeMax[threadIdx.x] = oddElements && (ltx == iter - 1 && ltx > 0) + ? shrTimeMax[threadIdx.x] + : shrTimeMax[threadIdx.x] + shrTimeMax[threadIdx.x + iter]; + shrTimeWgt[threadIdx.x] = oddElements && (ltx == iter - 1 && ltx > 0) + ? shrTimeWgt[threadIdx.x] + : shrTimeWgt[threadIdx.x] + shrTimeWgt[threadIdx.x + iter]; + } + + __syncthreads(); + oddElements = iter % 2; + iter = iter == 1 ? iter / 2 : iter / 2 + iter % 2; + } + + // load from shared memory the 0th guy (will contain accumulated values) + // compute + // store into global mem + if (ltx == 0) { + const auto tmp_time_max = shr_time_max[threadIdx.x]; + const auto tmp_time_wgt = shr_time_wgt[threadIdx.x]; + + // we are done if there number of time ratios is 0 + if (tmp_time_wgt == 0 && tmp_time_max == 0) { + g_state[ch] = TimeComputationState::Finished; + return; + } + + // no div by 0 + const auto tMaxAlphaBeta = tmp_time_max / tmp_time_wgt; + const auto tMaxErrorAlphaBeta = 1.0 / std::sqrt(tmp_time_wgt); + + tMaxAlphaBetas[ch] = tMaxAlphaBeta; + tMaxErrorAlphaBetas[ch] = tMaxErrorAlphaBeta; + g_accTimeMax[ch] = shrTimeMax[threadIdx.x]; + g_accTimeWgt[ch] = shrTimeWgt[threadIdx.x]; + g_state[ch] = TimeComputationState::NotFinished; + +#ifdef DEBUG_TC_MAKERATIO + printf("ch = %d time_max = %f time_wgt = %f\n", ch, tmp_time_max, tmp_time_wgt); + printf("ch = %d tMaxAlphaBeta = %f tMaxErrorAlphaBeta = %f timeMax = %f timeWgt = %f\n", + ch, + tMaxAlphaBeta, + tMaxErrorAlphaBeta, + shrTimeMax[threadIdx.x], + shrTimeWgt[threadIdx.x]); +#endif + } + } + + /// launch ctx parameters are + /// 10 threads per channel, N channels per block, Y blocks + /// TODO: do we need to keep the state around or can be removed?! + //#define DEBUG_FINDAMPLCHI2_AND_FINISH + __global__ void kernel_time_compute_findamplchi2_and_finish( + SampleVector::Scalar const* sample_values, + SampleVector::Scalar const* sample_value_errors, + uint32_t const* dids_eb, + uint32_t const* dids_ee, + bool const* useless_samples, + SampleVector::Scalar const* g_tMaxAlphaBeta, + SampleVector::Scalar const* g_tMaxErrorAlphaBeta, + SampleVector::Scalar const* g_accTimeMax, + SampleVector::Scalar const* g_accTimeWgt, + ConfigurationParameters::type const* amplitudeFitParametersEB, + ConfigurationParameters::type const* amplitudeFitParametersEE, + SampleVector::Scalar const* sumAAsNullHypot, + SampleVector::Scalar const* sum0sNullHypot, + SampleVector::Scalar const* chi2sNullHypot, + TimeComputationState* g_state, + SampleVector::Scalar* g_ampMaxAlphaBeta, + SampleVector::Scalar* g_ampMaxError, + SampleVector::Scalar* g_timeMax, + SampleVector::Scalar* g_timeError, + const int nchannels, + uint32_t const offsetForInputs) { + using ScalarType = SampleVector::Scalar; + + // constants + constexpr int nsamples = EcalDataFrame::MAXSAMPLES; + + // indices + const int gtx = threadIdx.x + blockIdx.x * blockDim.x; + const int ch = gtx / nsamples; + const int sample = threadIdx.x % nsamples; + const auto* dids = ch >= offsetForInputs ? dids_ee : dids_eb; + const int inputCh = ch >= offsetForInputs ? ch - offsetForInputs : ch; + + // configure shared mem + // per block, we need #threads per block * 2 * sizeof(ScalarType) + // we run with N channels per block + extern __shared__ char smem[]; + ScalarType* shr_sumAf = reinterpret_cast(smem); + ScalarType* shr_sumff = shr_sumAf + blockDim.x; + + if (ch >= nchannels) + return; + + auto state = g_state[ch]; + const auto did = DetId{dids[inputCh]}; + const auto* amplitudeFitParameters = + did.subdetId() == EcalBarrel ? amplitudeFitParametersEB : amplitudeFitParametersEE; + + // TODO is that better than storing into global and launching another kernel + // for the first 10 threads + if (state == TimeComputationState::NotFinished) { + const auto alpha = amplitudeFitParameters[0]; + const auto beta = amplitudeFitParameters[1]; + const auto alphabeta = alpha * beta; + const auto invalphabeta = 1.0 / alphabeta; + const auto tMaxAlphaBeta = g_tMaxAlphaBeta[ch]; + const auto sample_value = sample_values[gtx]; + const auto sample_value_error = sample_value_errors[gtx]; + const auto inverr2 = + useless_samples[gtx] ? static_cast(0) : 1.0 / (sample_value_error * sample_value_error); + const auto offset = (static_cast(sample) - tMaxAlphaBeta) * invalphabeta; + const auto term1 = 1.0 + offset; + const auto f = term1 > 1e-6 ? fast_expf(alpha * (fast_logf(term1) - offset)) : static_cast(0.0); + const auto sumAf = sample_value * (f * inverr2); + const auto sumff = f * (f * inverr2); + + // store into shared mem + shr_sumAf[threadIdx.x] = sumAf; + shr_sumff[threadIdx.x] = sumff; + } else { + shr_sumAf[threadIdx.x] = 0; + shr_sumff[threadIdx.x] = 0; + } + __syncthreads(); + + // reduce + // unroll completely here (but hardcoded) + if (sample < 5) { + shr_sumAf[threadIdx.x] += shr_sumAf[threadIdx.x + 5]; + shr_sumff[threadIdx.x] += shr_sumff[threadIdx.x + 5]; + } + __syncthreads(); + + if (sample < 2) { + // will need to subtract for ltx = 3, we double count here + shr_sumAf[threadIdx.x] += shr_sumAf[threadIdx.x + 2] + shr_sumAf[threadIdx.x + 3]; + shr_sumff[threadIdx.x] += shr_sumff[threadIdx.x + 2] + shr_sumff[threadIdx.x + 3]; + } + __syncthreads(); + + if (sample == 0) { + // exit if the state is done + // note, we do not exit before all __synchtreads are finished + if (state == TimeComputationState::Finished) { + g_timeMax[ch] = 5; + g_timeError[ch] = -999; + return; + } + + // subtract to avoid double counting + const auto sumff = shr_sumff[threadIdx.x] + shr_sumff[threadIdx.x + 1] - shr_sumff[threadIdx.x + 3]; + const auto sumAf = shr_sumAf[threadIdx.x] + shr_sumAf[threadIdx.x + 1] - shr_sumAf[threadIdx.x + 3]; + + const auto ampMaxAlphaBeta = sumff > 0 ? sumAf / sumff : 0; + const auto sumAA = sumAAsNullHypot[ch]; + const auto sum0 = sum0sNullHypot[ch]; + const auto nullChi2 = chi2sNullHypot[ch]; + if (sumff > 0) { + const auto chi2AlphaBeta = (sumAA - sumAf * sumAf / sumff) / sum0; + if (chi2AlphaBeta > nullChi2) { + // null hypothesis is better + state = TimeComputationState::Finished; +#ifdef DEBUG_FINDAMPLCHI2_AND_FINISH + printf("ch = %d chi2AlphaBeta = %f nullChi2 = %f sumAA = %f sumAf = %f sumff = %f sum0 = %f\n", + ch, + chi2AlphaBeta, + nullChi2, + sumAA, + sumAf, + sumff, + sum0); +#endif + } + + // store to global + g_ampMaxAlphaBeta[ch] = ampMaxAlphaBeta; + } else { +#ifdef DEBUG_FINDAMPLCHI2_AND_FINISH + printf("ch = %d sum0 = %f sumAA = %f sumff = %f sumAf = %f\n", ch, sum0, sumAA, sumff, sumAf); +#endif + state = TimeComputationState::Finished; + } + + // store the state to global and finish calcs + g_state[ch] = state; + if (state == TimeComputationState::Finished) { + // store default values into global + g_timeMax[ch] = 5; + g_timeError[ch] = -999; +#ifdef DEBUG_FINDAMPLCHI2_AND_FINISH + printf("ch = %d finished state\n", ch); +#endif + return; + } + + const auto ampMaxError = g_ampMaxError[ch]; + const auto test_ratio = ampMaxAlphaBeta / ampMaxError; + const auto accTimeMax = g_accTimeMax[ch]; + const auto accTimeWgt = g_accTimeWgt[ch]; + const auto tMaxAlphaBeta = g_tMaxAlphaBeta[ch]; + const auto tMaxErrorAlphaBeta = g_tMaxErrorAlphaBeta[ch]; + // branch to separate large vs small pulses + // see cpu version for more info + if (test_ratio > 5.0 && accTimeWgt > 0) { + const auto tMaxRatio = accTimeWgt > 0 ? accTimeMax / accTimeWgt : static_cast(0); + const auto tMaxErrorRatio = accTimeWgt > 0 ? 1.0 / std::sqrt(accTimeWgt) : static_cast(0); + + if (test_ratio > 10.0) { + g_timeMax[ch] = tMaxRatio; + g_timeError[ch] = tMaxErrorRatio; + +#ifdef DEBUG_FINDAMPLCHI2_AND_FINISH + printf("ch = %d tMaxRatio = %f tMaxErrorRatio = %f\n", ch, tMaxRatio, tMaxErrorRatio); +#endif + } else { + const auto timeMax = (tMaxAlphaBeta * (10.0 - ampMaxAlphaBeta / ampMaxError) + + tMaxRatio * (ampMaxAlphaBeta / ampMaxError - 5.0)) / + 5.0; + const auto timeError = (tMaxErrorAlphaBeta * (10.0 - ampMaxAlphaBeta / ampMaxError) + + tMaxErrorRatio * (ampMaxAlphaBeta / ampMaxError - 5.0)) / + 5.0; + state = TimeComputationState::Finished; + g_state[ch] = state; + g_timeMax[ch] = timeMax; + g_timeError[ch] = timeError; + +#ifdef DEBUG_FINDAMPLCHI2_AND_FINISH + printf("ch = %d timeMax = %f timeError = %f\n", ch, timeMax, timeError); +#endif + } + } else { + state = TimeComputationState::Finished; + g_state[ch] = state; + g_timeMax[ch] = tMaxAlphaBeta; + g_timeError[ch] = tMaxErrorAlphaBeta; + +#ifdef DEBUG_FINDAMPLCHI2_AND_FINISH + printf("ch = %d tMaxAlphaBeta = %f tMaxErrorAlphaBeta = %f\n", ch, tMaxAlphaBeta, tMaxErrorAlphaBeta); +#endif + } + } + } + + __global__ void kernel_time_compute_fixMGPAslew(uint16_t const* digis_eb, + uint16_t const* digis_ee, + SampleVector::Scalar* sample_values, + SampleVector::Scalar* sample_value_errors, + bool* useless_sample_values, + unsigned const int sample_mask, + const int nchannels, + uint32_t const offsetForInputs) { + using ScalarType = SampleVector::Scalar; + + // constants + constexpr int nsamples = EcalDataFrame::MAXSAMPLES; + + // indices + const int gtx = threadIdx.x + blockIdx.x * blockDim.x; + const int ch = gtx / nsamples; + const int sample = threadIdx.x % nsamples; + const int inputGtx = ch >= offsetForInputs ? gtx - offsetForInputs * nsamples : gtx; + const auto* digis = ch >= offsetForInputs ? digis_ee : digis_eb; + + // remove thread for sample 0, oversubscribing is easier than .... + if (ch >= nchannels || sample == 0) + return; + + if (!use_sample(sample_mask, sample)) + return; + + const auto gainIdPrev = ecal::mgpa::gainId(digis[inputGtx - 1]); + const auto gainIdNext = ecal::mgpa::gainId(digis[inputGtx]); + if (gainIdPrev >= 1 && gainIdPrev <= 3 && gainIdNext >= 1 && gainIdNext <= 3 && gainIdPrev < gainIdNext) { + sample_values[gtx - 1] = 0; + sample_value_errors[gtx - 1] = 1e+9; + useless_sample_values[gtx - 1] = true; + } + } + + __global__ void kernel_time_compute_ampl(SampleVector::Scalar const* sample_values, + SampleVector::Scalar const* sample_value_errors, + uint32_t const* dids, + bool const* useless_samples, + SampleVector::Scalar const* g_timeMax, + SampleVector::Scalar const* amplitudeFitParametersEB, + SampleVector::Scalar const* amplitudeFitParametersEE, + SampleVector::Scalar* g_amplitudeMax, + const int nchannels) { + using ScalarType = SampleVector::Scalar; + + // constants + constexpr ScalarType corr4 = 1.; + constexpr ScalarType corr6 = 1.; + constexpr int nsamples = EcalDataFrame::MAXSAMPLES; + + // indices + const int gtx = threadIdx.x + blockIdx.x * blockDim.x; + const int ch = gtx / nsamples; + const int sample = threadIdx.x % nsamples; + + if (ch >= nchannels) + return; + + const auto did = DetId{dids[ch]}; + const auto* amplitudeFitParameters = + did.subdetId() == EcalBarrel ? amplitudeFitParametersEB : amplitudeFitParametersEE; + + // configure shared mem + extern __shared__ char smem[]; + ScalarType* shr_sum1 = reinterpret_cast(smem); + auto* shr_sumA = shr_sum1 + blockDim.x; + auto* shr_sumF = shr_sumA + blockDim.x; + auto* shr_sumAF = shr_sumF + blockDim.x; + auto* shr_sumFF = shr_sumAF + blockDim.x; + + const auto alpha = amplitudeFitParameters[0]; + const auto beta = amplitudeFitParameters[1]; + const auto timeMax = g_timeMax[ch]; + const auto pedestalLimit = timeMax - (alpha * beta) - 1.0; + const auto sample_value = sample_values[gtx]; + const auto sample_value_error = sample_value_errors[gtx]; + const auto inverr2 = + sample_value_error > 0 ? 1. / (sample_value_error * sample_value_error) : static_cast(0); + const auto termOne = 1 + (sample - timeMax) / (alpha * beta); + const auto f = termOne > 1.e-5 ? fast_expf(alpha * fast_logf(termOne) - (sample - timeMax) / beta) + : static_cast(0.); + + bool const cond = ((sample < pedestalLimit) || (f > 0.6 * corr6 && sample <= timeMax) || + (f > 0.4 * corr4 && sample >= timeMax)) && + !useless_samples[gtx]; + + // store into shared mem + shr_sum1[threadIdx.x] = cond ? inverr2 : static_cast(0); + shr_sumA[threadIdx.x] = cond ? sample_value * inverr2 : static_cast(0); + shr_sumF[threadIdx.x] = cond ? f * inverr2 : static_cast(0); + shr_sumAF[threadIdx.x] = cond ? (f * inverr2) * sample_value : static_cast(0); + shr_sumFF[threadIdx.x] = cond ? f * (f * inverr2) : static_cast(0); + + // reduction + if (sample <= 4) { + shr_sum1[threadIdx.x] += shr_sum1[threadIdx.x + 5]; + shr_sumA[threadIdx.x] += shr_sumA[threadIdx.x + 5]; + shr_sumF[threadIdx.x] += shr_sumF[threadIdx.x + 5]; + shr_sumAF[threadIdx.x] += shr_sumAF[threadIdx.x + 5]; + shr_sumFF[threadIdx.x] += shr_sumFF[threadIdx.x + 5]; + } + __syncthreads(); + + if (sample < 2) { + // note: we double count sample 3 + shr_sum1[threadIdx.x] += shr_sum1[threadIdx.x + 2] + shr_sum1[threadIdx.x + 3]; + shr_sumA[threadIdx.x] += shr_sumA[threadIdx.x + 2] + shr_sumA[threadIdx.x + 3]; + shr_sumF[threadIdx.x] += shr_sumF[threadIdx.x + 2] + shr_sumF[threadIdx.x + 3]; + shr_sumAF[threadIdx.x] += shr_sumAF[threadIdx.x + 2] + shr_sumAF[threadIdx.x + 3]; + shr_sumFF[threadIdx.x] += shr_sumFF[threadIdx.x + 2] + shr_sumFF[threadIdx.x + 3]; + } + __syncthreads(); + + if (sample == 0) { + const auto sum1 = shr_sum1[threadIdx.x] + shr_sum1[threadIdx.x + 1] - shr_sum1[threadIdx.x + 3]; + const auto sumA = shr_sumA[threadIdx.x] + shr_sumA[threadIdx.x + 1] - shr_sumA[threadIdx.x + 3]; + const auto sumF = shr_sumF[threadIdx.x] + shr_sumF[threadIdx.x + 1] - shr_sumF[threadIdx.x + 3]; + const auto sumAF = shr_sumAF[threadIdx.x] + shr_sumAF[threadIdx.x + 1] - shr_sumAF[threadIdx.x + 3]; + const auto sumFF = shr_sumFF[threadIdx.x] + shr_sumFF[threadIdx.x + 1] - shr_sumFF[threadIdx.x + 3]; + + const auto denom = sumFF * sum1 - sumF * sumF; + const auto condForDenom = sum1 > 0 && std::abs(denom) > 1.e-20; + const auto amplitudeMax = condForDenom ? (sumAF * sum1 - sumA * sumF) / denom : static_cast(0.); + + // store into global mem + g_amplitudeMax[ch] = amplitudeMax; + } + } + + //#define ECAL_RECO_CUDA_TC_INIT_DEBUG + __global__ void kernel_time_computation_init(uint16_t const* digis_eb, + uint32_t const* dids_eb, + uint16_t const* digis_ee, + uint32_t const* dids_ee, + float const* rms_x12, + float const* rms_x6, + float const* rms_x1, + float const* mean_x12, + float const* mean_x6, + float const* mean_x1, + float const* gain12Over6, + float const* gain6Over1, + SampleVector::Scalar* sample_values, + SampleVector::Scalar* sample_value_errors, + SampleVector::Scalar* ampMaxError, + bool* useless_sample_values, + char* pedestal_nums, + uint32_t const offsetForHashes, + uint32_t const offsetForInputs, + unsigned const int sample_maskEB, + unsigned const int sample_maskEE, + int nchannels) { + using ScalarType = SampleVector::Scalar; + + // constants + constexpr int nsamples = EcalDataFrame::MAXSAMPLES; + + // indices + const int tx = threadIdx.x + blockDim.x * blockIdx.x; + const int ch = tx / nsamples; + const int inputTx = ch >= offsetForInputs ? tx - offsetForInputs * nsamples : tx; + const int inputCh = ch >= offsetForInputs ? ch - offsetForInputs : ch; + const auto* digis = ch >= offsetForInputs ? digis_ee : digis_eb; + const auto* dids = ch >= offsetForInputs ? dids_ee : dids_eb; + + // threads that return here should not affect the __syncthreads() below since they have exitted the kernel + if (ch >= nchannels) + return; + + // indices/inits + const int sample = tx % nsamples; + const int input_ch_start = inputCh * nsamples; + SampleVector::Scalar pedestal = 0.; + int num = 0; + + // configure shared mem + extern __shared__ char smem[]; + ScalarType* shrSampleValues = reinterpret_cast(smem); + ScalarType* shrSampleValueErrors = shrSampleValues + blockDim.x; + + // 0 and 1 sample values + const auto adc0 = ecal::mgpa::adc(digis[input_ch_start]); + const auto gainId0 = ecal::mgpa::gainId(digis[input_ch_start]); + const auto adc1 = ecal::mgpa::adc(digis[input_ch_start + 1]); + const auto gainId1 = ecal::mgpa::gainId(digis[input_ch_start + 1]); + const auto did = DetId{dids[inputCh]}; + const auto isBarrel = did.subdetId() == EcalBarrel; + const auto sample_mask = did.subdetId() == EcalBarrel ? sample_maskEB : sample_maskEE; + const auto hashedId = isBarrel ? ecal::reconstruction::hashedIndexEB(did.rawId()) + : offsetForHashes + ecal::reconstruction::hashedIndexEE(did.rawId()); + + // set pedestal + // TODO this branch is non-divergent for a group of 10 threads + if (gainId0 == 1 && use_sample(sample_mask, 0)) { + pedestal = static_cast(adc0); + num = 1; + + const auto diff = adc1 - adc0; + if (gainId1 == 1 && use_sample(sample_mask, 1) && std::abs(diff) < 3 * rms_x12[hashedId]) { + pedestal = (pedestal + static_cast(adc1)) / 2.0; + num = 2; + } + } else { + pedestal = mean_x12[ch]; + } + + // ped subtracted and gain-renormalized samples. + const auto gainId = ecal::mgpa::gainId(digis[inputTx]); + const auto adc = ecal::mgpa::adc(digis[inputTx]); + + bool bad = false; + SampleVector::Scalar sample_value, sample_value_error; + // TODO divergent branch + // TODO: piece below is general both for amplitudes and timing + // potentially there is a way to reduce the amount of code... + if (!use_sample(sample_mask, sample)) { + bad = true; + sample_value = 0; + sample_value_error = 0; + } else if (gainId == 1) { + sample_value = static_cast(adc) - pedestal; + sample_value_error = rms_x12[hashedId]; + } else if (gainId == 2) { + sample_value = (static_cast(adc) - mean_x6[hashedId]) * gain12Over6[hashedId]; + sample_value_error = rms_x6[hashedId] * gain12Over6[hashedId]; + } else if (gainId == 3) { + sample_value = + (static_cast(adc) - mean_x1[hashedId]) * gain6Over1[hashedId] * gain12Over6[hashedId]; + sample_value_error = rms_x1[hashedId] * gain6Over1[hashedId] * gain12Over6[hashedId]; + } else { + sample_value = 0; + sample_value_error = 0; + bad = true; + } + + // TODO: make sure we save things correctly when sample is useless + const auto useless_sample = (sample_value_error <= 0) | bad; + useless_sample_values[tx] = useless_sample; + sample_values[tx] = sample_value; + sample_value_errors[tx] = useless_sample ? 1e+9 : sample_value_error; + + // DEBUG +#ifdef ECAL_RECO_CUDA_TC_INIT_DEBUG + if (ch == 0) { + printf("sample = %d sample_value = %f sample_value_error = %f useless = %c\n", + sample, + sample_value, + sample_value_error, + useless_sample ? '1' : '0'); + } +#endif + + // store into the shared mem + shrSampleValues[threadIdx.x] = sample_value_error > 0 ? sample_value : std::numeric_limits::min(); + shrSampleValueErrors[threadIdx.x] = sample_value_error; + __syncthreads(); + + // perform the reduction with min + if (sample < 5) { + // note, if equal -> we keep the value with lower sample as for cpu + shrSampleValueErrors[threadIdx.x] = shrSampleValues[threadIdx.x] < shrSampleValues[threadIdx.x + 5] + ? shrSampleValueErrors[threadIdx.x + 5] + : shrSampleValueErrors[threadIdx.x]; + shrSampleValues[threadIdx.x] = std::max(shrSampleValues[threadIdx.x], shrSampleValues[threadIdx.x + 5]); + } + __syncthreads(); + + // a bit of an overkill, but easier than to compare across 3 values + if (sample < 3) { + shrSampleValueErrors[threadIdx.x] = shrSampleValues[threadIdx.x] < shrSampleValues[threadIdx.x + 3] + ? shrSampleValueErrors[threadIdx.x + 3] + : shrSampleValueErrors[threadIdx.x]; + shrSampleValues[threadIdx.x] = std::max(shrSampleValues[threadIdx.x], shrSampleValues[threadIdx.x + 3]); + } + __syncthreads(); + + if (sample < 2) { + shrSampleValueErrors[threadIdx.x] = shrSampleValues[threadIdx.x] < shrSampleValues[threadIdx.x + 2] + ? shrSampleValueErrors[threadIdx.x + 2] + : shrSampleValueErrors[threadIdx.x]; + shrSampleValues[threadIdx.x] = std::max(shrSampleValues[threadIdx.x], shrSampleValues[threadIdx.x + 2]); + } + __syncthreads(); + + if (sample == 0) { + // we only needd the max error + const auto maxSampleValueError = shrSampleValues[threadIdx.x] < shrSampleValues[threadIdx.x + 1] + ? shrSampleValueErrors[threadIdx.x + 1] + : shrSampleValueErrors[threadIdx.x]; + + // # pedestal samples used + pedestal_nums[ch] = num; + // this is used downstream + ampMaxError[ch] = maxSampleValueError; + + // DEBUG +#ifdef ECAL_RECO_CUDA_TC_INIT_DEBUG + if (ch == 0) { + printf("pedestal_nums = %d ampMaxError = %f\n", num, maxSampleValueError); + } +#endif + } + } + + /// + /// launch context parameters: 1 thread per channel + /// + //#define DEBUG_TIME_CORRECTION + __global__ void kernel_time_correction_and_finalize( + // SampleVector::Scalar const* g_amplitude, + ::ecal::reco::StorageScalarType const* g_amplitudeEB, + ::ecal::reco::StorageScalarType const* g_amplitudeEE, + uint16_t const* digis_eb, + uint32_t const* dids_eb, + uint16_t const* digis_ee, + uint32_t const* dids_ee, + float const* amplitudeBinsEB, + float const* amplitudeBinsEE, + float const* shiftBinsEB, + float const* shiftBinsEE, + SampleVector::Scalar const* g_timeMax, + SampleVector::Scalar const* g_timeError, + float const* g_rms_x12, + float const* timeCalibConstant, + float* g_jitterEB, + float* g_jitterEE, + float* g_jitterErrorEB, + float* g_jitterErrorEE, + uint32_t* flagsEB, + uint32_t* flagsEE, + const int amplitudeBinsSizeEB, + const int amplitudeBinsSizeEE, + ConfigurationParameters::type const timeConstantTermEB, + ConfigurationParameters::type const timeConstantTermEE, + float const offsetTimeValueEB, + float const offsetTimeValueEE, + ConfigurationParameters::type const timeNconstEB, + ConfigurationParameters::type const timeNconstEE, + ConfigurationParameters::type const amplitudeThresholdEB, + ConfigurationParameters::type const amplitudeThresholdEE, + ConfigurationParameters::type const outOfTimeThreshG12pEB, + ConfigurationParameters::type const outOfTimeThreshG12pEE, + ConfigurationParameters::type const outOfTimeThreshG12mEB, + ConfigurationParameters::type const outOfTimeThreshG12mEE, + ConfigurationParameters::type const outOfTimeThreshG61pEB, + ConfigurationParameters::type const outOfTimeThreshG61pEE, + ConfigurationParameters::type const outOfTimeThreshG61mEB, + ConfigurationParameters::type const outOfTimeThreshG61mEE, + uint32_t const offsetForHashes, + uint32_t const offsetForInputs, + const int nchannels) { + using ScalarType = SampleVector::Scalar; + + // constants + constexpr int nsamples = EcalDataFrame::MAXSAMPLES; + + // indices + const int gtx = threadIdx.x + blockIdx.x * blockDim.x; + const int inputGtx = gtx >= offsetForInputs ? gtx - offsetForInputs : gtx; + const auto* dids = gtx >= offsetForInputs ? dids_ee : dids_eb; + const auto& digis = gtx >= offsetForInputs ? digis_ee : digis_eb; + + // filter out outside of range threads + if (gtx >= nchannels) + return; + +// need to ref the right ptrs +#define ARRANGE(var) auto* var = gtx >= offsetForInputs ? var##EE : var##EB + ARRANGE(g_amplitude); + ARRANGE(g_jitter); + ARRANGE(g_jitterError); + ARRANGE(flags); +#undef ARRANGE + + const auto did = DetId{dids[inputGtx]}; + const auto isBarrel = did.subdetId() == EcalBarrel; + const auto hashedId = isBarrel ? ecal::reconstruction::hashedIndexEB(did.rawId()) + : offsetForHashes + ecal::reconstruction::hashedIndexEE(did.rawId()); + const auto* amplitudeBins = isBarrel ? amplitudeBinsEB : amplitudeBinsEE; + const auto* shiftBins = isBarrel ? shiftBinsEB : shiftBinsEE; + const auto amplitudeBinsSize = isBarrel ? amplitudeBinsSizeEB : amplitudeBinsSizeEE; + const auto timeConstantTerm = isBarrel ? timeConstantTermEB : timeConstantTermEE; + const auto timeNconst = isBarrel ? timeNconstEB : timeNconstEE; + const auto offsetTimeValue = isBarrel ? offsetTimeValueEB : offsetTimeValueEE; + const auto amplitudeThreshold = isBarrel ? amplitudeThresholdEB : amplitudeThresholdEE; + const auto outOfTimeThreshG12p = isBarrel ? outOfTimeThreshG12pEB : outOfTimeThreshG12pEE; + const auto outOfTimeThreshG12m = isBarrel ? outOfTimeThreshG12mEB : outOfTimeThreshG12mEE; + const auto outOfTimeThreshG61p = isBarrel ? outOfTimeThreshG61pEB : outOfTimeThreshG61pEE; + const auto outOfTimeThreshG61m = isBarrel ? outOfTimeThreshG61mEB : outOfTimeThreshG61mEE; + + // load some + const auto amplitude = g_amplitude[inputGtx]; + const auto rms_x12 = g_rms_x12[hashedId]; + const auto timeCalibConst = timeCalibConstant[hashedId]; + + int myBin = -1; + for (int bin = 0; bin < amplitudeBinsSize; bin++) { + if (amplitude > amplitudeBins[bin]) + myBin = bin; + else + break; + } + + ScalarType correction = 0; + if (myBin == -1) { + correction = shiftBins[0]; + } else if (myBin == amplitudeBinsSize - 1) { + correction = shiftBins[myBin]; + } else { + correction = shiftBins[myBin + 1] - shiftBins[myBin]; + correction *= (amplitude - amplitudeBins[myBin]) / (amplitudeBins[myBin + 1] - amplitudeBins[myBin]); + correction += shiftBins[myBin]; + } + + // correction * 1./25. + correction = correction * 0.04; + const auto timeMax = g_timeMax[gtx]; + const auto timeError = g_timeError[gtx]; + const auto jitter = timeMax - 5 + correction; + const auto jitterError = + std::sqrt(timeError * timeError + timeConstantTerm * timeConstantTerm * 0.04 * 0.04); // 0.04 = 1./25. + +#ifdef DEBUG_TIME_CORRECTION + printf("ch = %d timeMax = %f timeError = %f jitter = %f correction = %f\n", + gtx, + timeMax, + timeError, + jitter, + correction); +// } +#endif + + // store back to global + g_jitter[inputGtx] = jitter; + g_jitterError[inputGtx] = jitterError; + + // set the flag + // TODO: replace with something more efficient (if required), + // for now just to make it work + if (amplitude > amplitudeThreshold * rms_x12) { + auto threshP = outOfTimeThreshG12p; + auto threshM = outOfTimeThreshG12m; + if (amplitude > 3000.) { + for (int isample = 0; isample < nsamples; isample++) { + int gainid = ecal::mgpa::gainId(digis[nsamples * inputGtx + isample]); + if (gainid != 1) { + threshP = outOfTimeThreshG61p; + threshM = outOfTimeThreshG61m; + break; + } + } + } + + const auto correctedTime = (timeMax - 5) * 25 + timeCalibConst + offsetTimeValue; + const auto nterm = timeNconst * rms_x12 / amplitude; + const auto sigmat = std::sqrt(nterm * nterm + timeConstantTerm * timeConstantTerm); + if (correctedTime > sigmat * threshP || correctedTime < -sigmat * threshM) + flags[inputGtx] |= 0x1 << EcalUncalibratedRecHit::kOutOfTime; + } + } + + } // namespace multifit +} // namespace ecal diff --git a/RecoLocalCalo/EcalRecProducers/plugins/TimeComputationKernels.h b/RecoLocalCalo/EcalRecProducers/plugins/TimeComputationKernels.h new file mode 100644 index 0000000000000..a9b1c69678abd --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/TimeComputationKernels.h @@ -0,0 +1,186 @@ +#ifndef RecoLocalCalo_EcalRecProducers_plugins_TimeComputationKernels_h +#define RecoLocalCalo_EcalRecProducers_plugins_TimeComputationKernels_h + +#include +#include + +#include + +#include "DataFormats/Math/interface/approx_exp.h" +#include "DataFormats/Math/interface/approx_log.h" + +#include "Common.h" +#include "DeclsForKernels.h" +#include "EigenMatrixTypes_gpu.h" + +//#define DEBUG + +//#define ECAL_RECO_CUDA_DEBUG + +namespace ecal { + namespace multifit { + + __global__ void kernel_time_compute_nullhypot(SampleVector::Scalar const* sample_values, + SampleVector::Scalar const* sample_value_errors, + bool const* useless_sample_values, + SampleVector::Scalar* chi2s, + SampleVector::Scalar* sum0s, + SampleVector::Scalar* sumAAs, + int const nchannels); + // + // launch ctx parameters are + // 45 threads per channel, X channels per block, Y blocks + // 45 comes from: 10 samples for i <- 0 to 9 and for j <- i+1 to 9 + // TODO: it might be much beter to use 32 threads per channel instead of 45 + // to simplify the synchronization + // + __global__ void kernel_time_compute_makeratio(SampleVector::Scalar const* sample_values, + SampleVector::Scalar const* sample_value_errors, + uint32_t const* dids_eb, + uint32_t const* dids_ee, + bool const* useless_sample_values, + char const* pedestal_nums, + ConfigurationParameters::type const* amplitudeFitParametersEB, + ConfigurationParameters::type const* amplitudeFitParametersEE, + ConfigurationParameters::type const* timeFitParametersEB, + ConfigurationParameters::type const* timeFitParametersEE, + SampleVector::Scalar const* sumAAsNullHypot, + SampleVector::Scalar const* sum0sNullHypot, + SampleVector::Scalar* tMaxAlphaBetas, + SampleVector::Scalar* tMaxErrorAlphaBetas, + SampleVector::Scalar* g_accTimeMax, + SampleVector::Scalar* g_accTimeWgt, + TimeComputationState* g_state, + unsigned int const timeFitParameters_sizeEB, + unsigned int const timeFitParameters_sizeEE, + ConfigurationParameters::type const timeFitLimits_firstEB, + ConfigurationParameters::type const timeFitLimits_firstEE, + ConfigurationParameters::type const timeFitLimits_secondEB, + ConfigurationParameters::type const timeFitLimits_secondEE, + int const nchannels, + uint32_t const offsetForInputs); + + /// launch ctx parameters are + /// 10 threads per channel, N channels per block, Y blocks + /// TODO: do we need to keep the state around or can be removed?! + //#define DEBUG_FINDAMPLCHI2_AND_FINISH + __global__ void kernel_time_compute_findamplchi2_and_finish( + SampleVector::Scalar const* sample_values, + SampleVector::Scalar const* sample_value_errors, + uint32_t const* dids_eb, + uint32_t const* dids_ee, + bool const* useless_samples, + SampleVector::Scalar const* g_tMaxAlphaBeta, + SampleVector::Scalar const* g_tMaxErrorAlphaBeta, + SampleVector::Scalar const* g_accTimeMax, + SampleVector::Scalar const* g_accTimeWgt, + ConfigurationParameters::type const* amplitudeFitParametersEB, + ConfigurationParameters::type const* amplitudeFitParametersEE, + SampleVector::Scalar const* sumAAsNullHypot, + SampleVector::Scalar const* sum0sNullHypot, + SampleVector::Scalar const* chi2sNullHypot, + TimeComputationState* g_state, + SampleVector::Scalar* g_ampMaxAlphaBeta, + SampleVector::Scalar* g_ampMaxError, + SampleVector::Scalar* g_timeMax, + SampleVector::Scalar* g_timeError, + int const nchannels, + uint32_t const offsetForInputs); + + __global__ void kernel_time_compute_fixMGPAslew(uint16_t const* digis_eb, + uint16_t const* digis_ee, + SampleVector::Scalar* sample_values, + SampleVector::Scalar* sample_value_errors, + bool* useless_sample_values, + unsigned int const sample_mask, + int const nchannels, + uint32_t const offsetForInputs); + + __global__ void kernel_time_compute_ampl(SampleVector::Scalar const* sample_values, + SampleVector::Scalar const* sample_value_errors, + uint32_t const* dids_eb, + uint32_t const* dids_ed, + bool const* useless_samples, + SampleVector::Scalar const* g_timeMax, + SampleVector::Scalar const* amplitudeFitParametersEB, + SampleVector::Scalar const* amplitudeFitParametersEE, + SampleVector::Scalar* g_amplitudeMax, + int const nchannels, + uint32_t const offsetForInputs); + + //#define ECAL_RECO_CUDA_TC_INIT_DEBUG + __global__ void kernel_time_computation_init(uint16_t const* digis_eb, + uint32_t const* dids_eb, + uint16_t const* digis_ee, + uint32_t const* dids_ee, + float const* rms_x12, + float const* rms_x6, + float const* rms_x1, + float const* mean_x12, + float const* mean_x6, + float const* mean_x1, + float const* gain12Over6, + float const* gain6Over1, + SampleVector::Scalar* sample_values, + SampleVector::Scalar* sample_value_errors, + SampleVector::Scalar* ampMaxError, + bool* useless_sample_values, + char* pedestal_nums, + uint32_t const offsetForHashes, + uint32_t const offsetForInputs, + unsigned int const sample_maskEB, + unsigned int const sample_maskEE, + int nchannels); + + /// + /// launch context parameters: 1 thread per channel + /// + //#define DEBUG_TIME_CORRECTION + __global__ void kernel_time_correction_and_finalize( + // SampleVector::Scalar const* g_amplitude, + ::ecal::reco::StorageScalarType const* g_amplitudeEB, + ::ecal::reco::StorageScalarType const* g_amplitudeEE, + uint16_t const* digis_eb, + uint32_t const* dids_eb, + uint16_t const* digis_ee, + uint32_t const* dids_ee, + float const* amplitudeBinsEB, + float const* amplitudeBinsEE, + float const* shiftBinsEB, + float const* shiftBinsEE, + SampleVector::Scalar const* g_timeMax, + SampleVector::Scalar const* g_timeError, + float const* g_rms_x12, + float const* timeCalibConstant, + ::ecal::reco::StorageScalarType* g_jitterEB, + ::ecal::reco::StorageScalarType* g_jitterEE, + ::ecal::reco::StorageScalarType* g_jitterErrorEB, + ::ecal::reco::StorageScalarType* g_jitterErrorEE, + uint32_t* flagsEB, + uint32_t* flagsEE, + int const amplitudeBinsSizeEB, + int const amplitudeBinsSizeEE, + ConfigurationParameters::type const timeConstantTermEB, + ConfigurationParameters::type const timeConstantTermEE, + float const offsetTimeValueEB, + float const offsetTimeValueEE, + ConfigurationParameters::type const timeNconstEB, + ConfigurationParameters::type const timeNconstEE, + ConfigurationParameters::type const amplitudeThresholdEB, + ConfigurationParameters::type const amplitudeThresholdEE, + ConfigurationParameters::type const outOfTimeThreshG12pEB, + ConfigurationParameters::type const outOfTimeThreshG12pEE, + ConfigurationParameters::type const outOfTimeThreshG12mEB, + ConfigurationParameters::type const outOfTimeThreshG12mEE, + ConfigurationParameters::type const outOfTimeThreshG61pEB, + ConfigurationParameters::type const outOfTimeThreshG61pEE, + ConfigurationParameters::type const outOfTimeThreshG61mEB, + ConfigurationParameters::type const outOfTimeThreshG61mEE, + uint32_t const offsetForHashes, + uint32_t const offsetForInputs, + int const nchannels); + + } // namespace multifit +} // namespace ecal + +#endif // RecoLocalCalo_EcalRecProducers_plugins_TimeComputationKernels_h diff --git a/RecoLocalCalo/EcalRecProducers/python/ecalMultiFitUncalibRecHit_cff.py b/RecoLocalCalo/EcalRecProducers/python/ecalMultiFitUncalibRecHit_cff.py index 1eef78d42e940..72a3efaae38ba 100644 --- a/RecoLocalCalo/EcalRecProducers/python/ecalMultiFitUncalibRecHit_cff.py +++ b/RecoLocalCalo/EcalRecProducers/python/ecalMultiFitUncalibRecHit_cff.py @@ -1,6 +1,57 @@ import FWCore.ParameterSet.Config as cms +from Configuration.ProcessModifiers.gpu_cff import gpu # ECAL multifit running on CPU from RecoLocalCalo.EcalRecProducers.ecalMultiFitUncalibRecHit_cfi import ecalMultiFitUncalibRecHit ecalMultiFitUncalibRecHitTask = cms.Task(ecalMultiFitUncalibRecHit) + +# ECAL conditions used by the multifit running on GPU +from RecoLocalCalo.EcalRecProducers.ecalPedestalsGPUESProducer_cfi import ecalPedestalsGPUESProducer +from RecoLocalCalo.EcalRecProducers.ecalGainRatiosGPUESProducer_cfi import ecalGainRatiosGPUESProducer +from RecoLocalCalo.EcalRecProducers.ecalPulseShapesGPUESProducer_cfi import ecalPulseShapesGPUESProducer +from RecoLocalCalo.EcalRecProducers.ecalPulseCovariancesGPUESProducer_cfi import ecalPulseCovariancesGPUESProducer +from RecoLocalCalo.EcalRecProducers.ecalSamplesCorrelationGPUESProducer_cfi import ecalSamplesCorrelationGPUESProducer +from RecoLocalCalo.EcalRecProducers.ecalTimeBiasCorrectionsGPUESProducer_cfi import ecalTimeBiasCorrectionsGPUESProducer +from RecoLocalCalo.EcalRecProducers.ecalTimeCalibConstantsGPUESProducer_cfi import ecalTimeCalibConstantsGPUESProducer +from RecoLocalCalo.EcalRecProducers.ecalMultifitParametersGPUESProducer_cfi import ecalMultifitParametersGPUESProducer + +# ECAL multifit running on GPU +from RecoLocalCalo.EcalRecProducers.ecalUncalibRecHitProducerGPU_cfi import ecalUncalibRecHitProducerGPU as _ecalUncalibRecHitProducerGPU +ecalMultiFitUncalibRecHitGPU = _ecalUncalibRecHitProducerGPU.clone( + digisLabelEB = cms.InputTag('ecalDigisGPU', 'ebDigis'), + digisLabelEE = cms.InputTag('ecalDigisGPU', 'eeDigis'), +) + +# copy the uncalibrated rechits from GPU to CPU +from RecoLocalCalo.EcalRecProducers.ecalCPUUncalibRecHitProducer_cfi import ecalCPUUncalibRecHitProducer as _ecalCPUUncalibRecHitProducer +ecalMultiFitUncalibRecHitSoA = _ecalCPUUncalibRecHitProducer.clone( + recHitsInLabelEB = cms.InputTag('ecalMultiFitUncalibRecHitGPU', 'EcalUncalibRecHitsEB'), + recHitsInLabelEE = cms.InputTag('ecalMultiFitUncalibRecHitGPU', 'EcalUncalibRecHitsEE'), +) + +# convert the uncalibrated rechits from SoA to legacy format +from RecoLocalCalo.EcalRecProducers.ecalUncalibRecHitConvertGPU2CPUFormat_cfi import ecalUncalibRecHitConvertGPU2CPUFormat as _ecalUncalibRecHitConvertGPU2CPUFormat +_ecalMultiFitUncalibRecHit_gpu = _ecalUncalibRecHitConvertGPU2CPUFormat.clone( + recHitsLabelGPUEB = cms.InputTag('ecalMultiFitUncalibRecHitSoA', 'EcalUncalibRecHitsEB'), + recHitsLabelGPUEE = cms.InputTag('ecalMultiFitUncalibRecHitSoA', 'EcalUncalibRecHitsEE'), +) +gpu.toReplaceWith(ecalMultiFitUncalibRecHit, _ecalMultiFitUncalibRecHit_gpu) + +gpu.toReplaceWith(ecalMultiFitUncalibRecHitTask, cms.Task( + # ECAL conditions used by the multifit running on GPU + ecalPedestalsGPUESProducer, + ecalGainRatiosGPUESProducer, + ecalPulseShapesGPUESProducer, + ecalPulseCovariancesGPUESProducer, + ecalSamplesCorrelationGPUESProducer, + ecalTimeBiasCorrectionsGPUESProducer, + ecalTimeCalibConstantsGPUESProducer, + ecalMultifitParametersGPUESProducer, + # ECAL multifit running on GP + ecalMultiFitUncalibRecHitGPU, + # copy the uncalibrated rechits from GPU to CPU + ecalMultiFitUncalibRecHitSoA, + # convert the uncalibrated rechits legacy format + ecalMultiFitUncalibRecHit, +)) diff --git a/RecoLocalCalo/EcalRecProducers/python/ecalMultiFitUncalibRecHit_cfi.py b/RecoLocalCalo/EcalRecProducers/python/ecalMultiFitUncalibRecHit_cfi.py index ea92a4e55ed89..54989bf927e69 100644 --- a/RecoLocalCalo/EcalRecProducers/python/ecalMultiFitUncalibRecHit_cfi.py +++ b/RecoLocalCalo/EcalRecProducers/python/ecalMultiFitUncalibRecHit_cfi.py @@ -73,5 +73,10 @@ kPoorRecoFlagEE = cms.bool(False), chi2ThreshEB_ = cms.double(65.0), chi2ThreshEE_ = cms.double(50.0), + + # for crossCorrelationMethod + crossCorrelationStartTime = cms.double(-25), + crossCorrelationStopTime = cms.double(25), + crossCorrelationTargetTimePrecision = cms.double(0.01), ) ) diff --git a/RecoLocalCalo/EcalRecProducers/python/ecalMultiFitUncalibRecHit_gpu_new_cfi.py b/RecoLocalCalo/EcalRecProducers/python/ecalMultiFitUncalibRecHit_gpu_new_cfi.py new file mode 100644 index 0000000000000..84a0c6f9cbe8a --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/python/ecalMultiFitUncalibRecHit_gpu_new_cfi.py @@ -0,0 +1,83 @@ +import FWCore.ParameterSet.Config as cms + +from RecoLocalCalo.EcalRecProducers.ecalPulseShapeParameters_cff import * + +ecalMultiFitUncalibRecHitgpu = cms.EDProducer("EcalUncalibRecHitProducerGPUNew", + EBdigiCollection = cms.InputTag("ecalDigis","ebDigis"), + EEdigiCollection = cms.InputTag("ecalDigis","eeDigis"), + EBhitCollection = cms.string("EcalUncalibRecHitsEBgpunew"), + EBhitCollection_soa = cms.string("EcalUncalibRecHitsEBgpunew"), + EEhitCollection = cms.string('EcalUncalibRecHitsEEgpunew'), + EEhitCollection_soa = cms.string('EcalUncalibRecHitsEEgpunew'), + algo = cms.string("EcalUncalibRecHitWorkerMultiFitGPUNew"), + algoPSet = cms.PSet( + # for multifit method + EcalPulseShapeParameters = cms.PSet( ecal_pulse_shape_parameters ), + activeBXs = cms.vint32(-5,-4,-3,-2,-1,0,1,2,3,4), + ampErrorCalculation = cms.bool(True), + useLumiInfoRunHeader = cms.bool(True), + + doPrefitEB = cms.bool(False), + doPrefitEE = cms.bool(False), + prefitMaxChiSqEB = cms.double(25.), + prefitMaxChiSqEE = cms.double(10.), + + dynamicPedestalsEB = cms.bool(False), + dynamicPedestalsEE = cms.bool(False), + mitigateBadSamplesEB = cms.bool(False), + mitigateBadSamplesEE = cms.bool(False), + gainSwitchUseMaxSampleEB = cms.bool(True), + gainSwitchUseMaxSampleEE = cms.bool(False), + selectiveBadSampleCriteriaEB = cms.bool(False), + selectiveBadSampleCriteriaEE = cms.bool(False), + simplifiedNoiseModelForGainSwitch = cms.bool(True), + addPedestalUncertaintyEB = cms.double(0.), + addPedestalUncertaintyEE = cms.double(0.), + + # decide which algorithm to be use to calculate the jitter + timealgo = cms.string("RatioMethod"), + + # for ratio method + EBtimeFitParameters = cms.vdouble(-2.015452e+00, 3.130702e+00, -1.234730e+01, 4.188921e+01, -8.283944e+01, 9.101147e+01, -5.035761e+01, 1.105621e+01), + EEtimeFitParameters = cms.vdouble(-2.390548e+00, 3.553628e+00, -1.762341e+01, 6.767538e+01, -1.332130e+02, 1.407432e+02, -7.541106e+01, 1.620277e+01), + EBamplitudeFitParameters = cms.vdouble(1.138,1.652), + EEamplitudeFitParameters = cms.vdouble(1.890,1.400), + EBtimeFitLimits_Lower = cms.double(0.2), + EBtimeFitLimits_Upper = cms.double(1.4), + EEtimeFitLimits_Lower = cms.double(0.2), + EEtimeFitLimits_Upper = cms.double(1.4), + # for time error + EBtimeConstantTerm= cms.double(.6), + EEtimeConstantTerm= cms.double(1.0), + + # for kOutOfTime flag + EBtimeNconst = cms.double(28.5), + EEtimeNconst = cms.double(31.8), + outOfTimeThresholdGain12pEB = cms.double(5), # times estimated precision + outOfTimeThresholdGain12mEB = cms.double(5), # times estimated precision + outOfTimeThresholdGain61pEB = cms.double(5), # times estimated precision + outOfTimeThresholdGain61mEB = cms.double(5), # times estimated precision + outOfTimeThresholdGain12pEE = cms.double(1000), # times estimated precision + outOfTimeThresholdGain12mEE = cms.double(1000), # times estimated precision + outOfTimeThresholdGain61pEE = cms.double(1000), # times estimated precision + outOfTimeThresholdGain61mEE = cms.double(1000), # times estimated precision + amplitudeThresholdEB = cms.double(10), + amplitudeThresholdEE = cms.double(10), + + ebSpikeThreshold = cms.double(1.042), + + # these are now taken from DB. Here the MC parameters for backward compatibility + ebPulseShape = cms.vdouble( 5.2e-05,-5.26e-05 , 6.66e-05, 0.1168, 0.7575, 1., 0.8876, 0.6732, 0.4741, 0.3194 ), + eePulseShape = cms.vdouble( 5.2e-05,-5.26e-05 , 6.66e-05, 0.1168, 0.7575, 1., 0.8876, 0.6732, 0.4741, 0.3194 ), + + # for kPoorReco flag + kPoorRecoFlagEB = cms.bool(True), + kPoorRecoFlagEE = cms.bool(False), + chi2ThreshEB_ = cms.double(65.0), + chi2ThreshEE_ = cms.double(50.0), + + # threads/blocks config + threads = cms.vint32(256, 1, 1), + runV1 = cms.bool(True), + ) +) diff --git a/RecoLocalCalo/EcalRecProducers/python/ecalRecHitGPU_cfi.py b/RecoLocalCalo/EcalRecProducers/python/ecalRecHitGPU_cfi.py new file mode 100644 index 0000000000000..a9b5599fd970f --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/python/ecalRecHitGPU_cfi.py @@ -0,0 +1,69 @@ +import FWCore.ParameterSet.Config as cms + +from RecoLocalCalo.EcalRecAlgos.ecalCleaningAlgo import cleaningAlgoConfig + +# rechit producer +ecalRecHitGPU = cms.EDProducer("EcalRecHitProducerGPU", + + uncalibrecHitsInLabelEB = cms.InputTag("ecalUncalibRecHitProducerGPU","EcalUncalibRecHitsEB"), + uncalibrecHitsInLabelEE = cms.InputTag("ecalUncalibRecHitProducerGPU","EcalUncalibRecHitsEE"), + + recHitsLabelEB = cms.string("EcalRecHitsEB"), + recHitsLabelEE = cms.string("EcalRecHitsEE"), + + maxNumberHitsEB = cms.uint32(61200), + maxNumberHitsEE = cms.uint32(14648), + + ## db statuses to be exluded from reconstruction (some will be recovered) + ChannelStatusToBeExcluded = cms.vstring( 'kDAC', + 'kNoisy', + 'kNNoisy', + 'kFixedG6', + 'kFixedG1', + 'kFixedG0', + 'kNonRespondingIsolated', + 'kDeadVFE', + 'kDeadFE', + 'kNoDataNoTP', + # + # AM should I add them here????? + # next ones from "flagsMapDBReco" + # but not defined in "EcalChannelStatusCode.h" + # but they are defined in "EcalRecHit.h" + # + #'kKilled', + #'kTPSaturated', + #'kL1SpikeFlag', + ), + + ## avoid propagation of dead channels other than after recovery + killDeadChannels = cms.bool(True), + + ## define maximal and minimal values for the laser corrections + + EBLaserMIN = cms.double(0.01), + EELaserMIN = cms.double(0.01), + + EBLaserMAX = cms.double(30.0), + EELaserMAX = cms.double(30.0), + + ## reco flags association to DB flag + flagsMapDBReco = cms.PSet( + kGood = cms.vstring('kOk','kDAC','kNoLaser','kNoisy'), + kNoisy = cms.vstring('kNNoisy','kFixedG6','kFixedG1'), + kNeighboursRecovered = cms.vstring('kFixedG0', + 'kNonRespondingIsolated', + 'kDeadVFE'), + kTowerRecovered = cms.vstring('kDeadFE'), + kDead = cms.vstring('kNoDataNoTP') + ), + + ## for channel recovery + recoverEBIsolatedChannels = cms.bool(False), + recoverEEIsolatedChannels = cms.bool(False), + recoverEBVFE = cms.bool(False), + recoverEEVFE = cms.bool(False), + recoverEBFE = cms.bool(True), + recoverEEFE = cms.bool(True), +) + diff --git a/RecoLocalCalo/EcalRecProducers/test/ecalRawDecodingAndMultifit.py b/RecoLocalCalo/EcalRecProducers/test/ecalRawDecodingAndMultifit.py new file mode 100644 index 0000000000000..a3d04e836f020 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/test/ecalRawDecodingAndMultifit.py @@ -0,0 +1,172 @@ +import FWCore.ParameterSet.Config as cms +from Configuration.StandardSequences.Eras import eras + +process = cms.Process('RECO', eras.Run2_2018) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('HeterogeneousCore.CUDAServices.CUDAService_cfi') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +# Other statements +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, '102X_dataRun2_HLT_v2', '') + + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(100) +) + +# load data using the DAQ source +import sys, os, inspect +sys.path.append(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))) +process.load('sourceFromRawCmggpu_cff') + +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load("RecoLocalCalo.Configuration.hcalLocalReco_cff") +process.load("EventFilter.HcalRawToDigi.HcalRawToDigi_cfi") +process.load("EventFilter.EcalRawToDigi.EcalUnpackerData_cfi") +process.load("RecoLuminosity.LumiProducer.bunchSpacingProducer_cfi") + +# load both cpu and gpu plugins +process.load("RecoLocalCalo.EcalRecProducers.ecalUncalibRecHitProducerGPU_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalMultiFitUncalibRecHit_cfi") + +# for validation of gpu multifit products +process.load("RecoLocalCalo.EcalRecProducers.ecalCPUUncalibRecHitProducer_cfi") +process.load("EventFilter.EcalRawToDigi.ecalCPUDigisProducer_cfi") + +process.load("EventFilter.EcalRawToDigi.ecalRawToDigiGPU_cfi") +process.load("EventFilter.EcalRawToDigi.ecalElectronicsMappingGPUESProducer_cfi") + +process.load("RecoLocalCalo.EcalRecProducers.ecalPedestalsGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalGainRatiosGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalPulseShapesGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalPulseCovariancesGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalSamplesCorrelationGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalTimeBiasCorrectionsGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalTimeCalibConstantsGPUESProducer_cfi") + +process.load("RecoLocalCalo.EcalRecProducers.ecalRechitADCToGeVConstantGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalIntercalibConstantsGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalRechitChannelStatusGPUESProducer_cfi") + +process.load("RecoLocalCalo.EcalRecProducers.ecalLaserAPDPNRatiosGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalLaserAPDPNRatiosRefGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalLaserAlphasGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalLinearCorrectionsGPUESProducer_cfi") + +# force HLT configuration for ecalMultiFitUncalibRecHit +process.ecalMultiFitUncalibRecHit.algoPSet = cms.PSet( + ebSpikeThreshold = cms.double(1.042), + EBtimeFitLimits_Upper = cms.double(1.4), + EEtimeFitLimits_Lower = cms.double(0.2), + timealgo = cms.string("None"), + EBtimeNconst = cms.double(28.5), + prefitMaxChiSqEE = cms.double(10.0), + outOfTimeThresholdGain12mEB = cms.double(5.0), + outOfTimeThresholdGain12mEE = cms.double(1000.0), + EEtimeFitParameters = cms.vdouble(-2.390548, 3.553628, -17.62341, 67.67538, -133.213, 140.7432, -75.41106, 16.20277), + prefitMaxChiSqEB = cms.double(25.0), + simplifiedNoiseModelForGainSwitch = cms.bool(True), + EBtimeFitParameters = cms.vdouble(-2.015452, 3.130702, -12.3473, 41.88921, -82.83944, 91.01147, -50.35761, 11.05621), + selectiveBadSampleCriteriaEB = cms.bool(False), + dynamicPedestalsEB = cms.bool(False), + useLumiInfoRunHeader = cms.bool(False), + EBamplitudeFitParameters = cms.vdouble(1.138, 1.652), + doPrefitEE = cms.bool(False), + dynamicPedestalsEE = cms.bool(False), + selectiveBadSampleCriteriaEE = cms.bool(False), + outOfTimeThresholdGain61pEE = cms.double(1000.0), + outOfTimeThresholdGain61pEB = cms.double(5.0), + activeBXs = cms.vint32(-5, -4, -3, -2, -1, 0, 1, 2, 3, 4), + EcalPulseShapeParameters = cms.PSet( + EEPulseShapeTemplate = cms.vdouble(0.116442, 0.756246, 1.0, 0.897182, 0.686831, 0.491506, 0.344111, 0.245731, 0.174115, 0.123361, 0.0874288, 0.061957), + EEdigiCollection = cms.string(""), + EcalPreMixStage2 = cms.bool(False), + EcalPreMixStage1 = cms.bool(False), + EBPulseShapeCovariance = cms.vdouble(3.001E-6, 1.233E-5, 0.0, -4.416E-6, -4.571E-6, -3.614E-6, -2.636E-6, -1.286E-6, -8.41E-7, -5.296E-7, 0.0, 0.0, 1.233E-5, 6.154E-5, 0.0, -2.2E-5, -2.309E-5, -1.838E-5, -1.373E-5, -7.334E-6, -5.088E-6, -3.745E-6, -2.428E-6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -4.416E-6, -2.2E-5, 0.0, 8.319E-6, 8.545E-6, 6.792E-6, 5.059E-6, 2.678E-6, 1.816E-6, 1.223E-6, 8.245E-7, 5.589E-7, -4.571E-6, -2.309E-5, 0.0, 8.545E-6, 9.182E-6, 7.219E-6, 5.388E-6, 2.853E-6, 1.944E-6, 1.324E-6, 9.083E-7, 6.335E-7, -3.614E-6, -1.838E-5, 0.0, 6.792E-6, 7.219E-6, 6.016E-6, 4.437E-6, 2.385E-6, 1.636E-6, 1.118E-6, 7.754E-7, 5.556E-7, -2.636E-6, -1.373E-5, 0.0, 5.059E-6, 5.388E-6, 4.437E-6, 3.602E-6, 1.917E-6, 1.322E-6, 9.079E-7, 6.529E-7, 4.752E-7, -1.286E-6, -7.334E-6, 0.0, 2.678E-6, 2.853E-6, 2.385E-6, 1.917E-6, 1.375E-6, 9.1E-7, 6.455E-7, 4.693E-7, 3.657E-7, -8.41E-7, -5.088E-6, 0.0, 1.816E-6, 1.944E-6, 1.636E-6, 1.322E-6, 9.1E-7, 9.115E-7, 6.062E-7, 4.436E-7, 3.422E-7, -5.296E-7, -3.745E-6, 0.0, 1.223E-6, 1.324E-6, 1.118E-6, 9.079E-7, 6.455E-7, 6.062E-7, 7.217E-7, 4.862E-7, 3.768E-7, 0.0, -2.428E-6, 0.0, 8.245E-7, 9.083E-7, 7.754E-7, 6.529E-7, 4.693E-7, 4.436E-7, 4.862E-7, 6.509E-7, 4.418E-7, 0.0, 0.0, 0.0, 5.589E-7, 6.335E-7, 5.556E-7, 4.752E-7, 3.657E-7, 3.422E-7, 3.768E-7, 4.418E-7, 6.142E-7), + ESdigiCollection = cms.string(""), + EBdigiCollection = cms.string(""), + EBCorrNoiseMatrixG01 = cms.vdouble(1.0, 0.73354, 0.64442, 0.58851, 0.55425, 0.53082, 0.51916, 0.51097, 0.50732, 0.50409), + EBCorrNoiseMatrixG12 = cms.vdouble(1.0, 0.71073, 0.55721, 0.46089, 0.40449, 0.35931, 0.33924, 0.32439, 0.31581, 0.30481), + EBCorrNoiseMatrixG06 = cms.vdouble(1.0, 0.70946, 0.58021, 0.49846, 0.45006, 0.41366, 0.39699, 0.38478, 0.37847, 0.37055), + EEPulseShapeCovariance = cms.vdouble(3.941E-5, 3.333E-5, 0.0, -1.449E-5, -1.661E-5, -1.424E-5, -1.183E-5, -6.842E-6, -4.915E-6, -3.411E-6, 0.0, 0.0, 3.333E-5, 2.862E-5, 0.0, -1.244E-5, -1.431E-5, -1.233E-5, -1.032E-5, -5.883E-6, -4.154E-6, -2.902E-6, -2.128E-6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.449E-5, -1.244E-5, 0.0, 5.84E-6, 6.649E-6, 5.72E-6, 4.812E-6, 2.708E-6, 1.869E-6, 1.33E-6, 9.186E-7, 6.446E-7, -1.661E-5, -1.431E-5, 0.0, 6.649E-6, 7.966E-6, 6.898E-6, 5.794E-6, 3.157E-6, 2.184E-6, 1.567E-6, 1.084E-6, 7.575E-7, -1.424E-5, -1.233E-5, 0.0, 5.72E-6, 6.898E-6, 6.341E-6, 5.347E-6, 2.859E-6, 1.991E-6, 1.431E-6, 9.839E-7, 6.886E-7, -1.183E-5, -1.032E-5, 0.0, 4.812E-6, 5.794E-6, 5.347E-6, 4.854E-6, 2.628E-6, 1.809E-6, 1.289E-6, 9.02E-7, 6.146E-7, -6.842E-6, -5.883E-6, 0.0, 2.708E-6, 3.157E-6, 2.859E-6, 2.628E-6, 1.863E-6, 1.296E-6, 8.882E-7, 6.108E-7, 4.283E-7, -4.915E-6, -4.154E-6, 0.0, 1.869E-6, 2.184E-6, 1.991E-6, 1.809E-6, 1.296E-6, 1.217E-6, 8.669E-7, 5.751E-7, 3.882E-7, -3.411E-6, -2.902E-6, 0.0, 1.33E-6, 1.567E-6, 1.431E-6, 1.289E-6, 8.882E-7, 8.669E-7, 9.522E-7, 6.717E-7, 4.293E-7, 0.0, -2.128E-6, 0.0, 9.186E-7, 1.084E-6, 9.839E-7, 9.02E-7, 6.108E-7, 5.751E-7, 6.717E-7, 7.911E-7, 5.493E-7, 0.0, 0.0, 0.0, 6.446E-7, 7.575E-7, 6.886E-7, 6.146E-7, 4.283E-7, 3.882E-7, 4.293E-7, 5.493E-7, 7.027E-7), + EBPulseShapeTemplate = cms.vdouble(0.0113979, 0.758151, 1.0, 0.887744, 0.673548, 0.474332, 0.319561, 0.215144, 0.147464, 0.101087, 0.0693181, 0.0475044), + EECorrNoiseMatrixG01 = cms.vdouble(1.0, 0.72698, 0.62048, 0.55691, 0.51848, 0.49147, 0.47813, 0.47007, 0.46621, 0.46265), + EECorrNoiseMatrixG12 = cms.vdouble(1.0, 0.71373, 0.44825, 0.30152, 0.21609, 0.14786, 0.11772, 0.10165, 0.09465, 0.08098), + UseLCcorrection = cms.untracked.bool(True), + EECorrNoiseMatrixG06 = cms.vdouble(1.0, 0.71217, 0.47464, 0.34056, 0.26282, 0.20287, 0.17734, 0.16256, 0.15618, 0.14443) + ), + doPrefitEB = cms.bool(False), + addPedestalUncertaintyEE = cms.double(0.0), + addPedestalUncertaintyEB = cms.double(0.0), + gainSwitchUseMaxSampleEB = cms.bool(True), + EEtimeNconst = cms.double(31.8), + EEamplitudeFitParameters = cms.vdouble(1.89, 1.4), + chi2ThreshEE_ = cms.double(50.0), + eePulseShape = cms.vdouble(5.2E-5, -5.26E-5, 6.66E-5, 0.1168, 0.7575, 1.0, 0.8876, 0.6732, 0.4741, 0.3194), + outOfTimeThresholdGain12pEB = cms.double(5.0), + gainSwitchUseMaxSampleEE = cms.bool(False), + mitigateBadSamplesEB = cms.bool(False), + outOfTimeThresholdGain12pEE = cms.double(1000.0), + ebPulseShape = cms.vdouble(5.2E-5, -5.26E-5, 6.66E-5, 0.1168, 0.7575, 1.0, 0.8876, 0.6732, 0.4741, 0.3194), + ampErrorCalculation = cms.bool(False), + mitigateBadSamplesEE = cms.bool(False), + amplitudeThresholdEB = cms.double(10.0), + kPoorRecoFlagEB = cms.bool(True), + amplitudeThresholdEE = cms.double(10.0), + EBtimeFitLimits_Lower = cms.double(0.2), + kPoorRecoFlagEE = cms.bool(False), + EEtimeFitLimits_Upper = cms.double(1.4), + outOfTimeThresholdGain61mEE = cms.double(1000.0), + EEtimeConstantTerm = cms.double(1.0), + EBtimeConstantTerm = cms.double(0.6), + chi2ThreshEB_ = cms.double(65.0), + outOfTimeThresholdGain61mEB = cms.double(5.0) +) + +process.ecalDigis = process.ecalEBunpacker.clone() +process.ecalDigis.InputLabel = cms.InputTag('rawDataCollector') + +process.out = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string("test.root") +) + +process.finalize = cms.EndPath(process.out) + +process.bunchSpacing = cms.Path( + process.bunchSpacingProducer +) + +process.digiPath = cms.Path( + process.ecalDigis + + process.ecalRawToDigiGPU + + process.ecalCPUDigisProducer +) + +process.recoPath = cms.Path( + process.ecalMultiFitUncalibRecHit + + process.ecalUncalibRecHitProducerGPU + + process.ecalCPUUncalibRecHitProducer +) + +process.schedule = cms.Schedule( + process.bunchSpacing, + process.digiPath, + process.recoPath, + process.finalize +) + +process.options = cms.untracked.PSet( + numberOfThreads = cms.untracked.uint32(4), + numberOfStreams = cms.untracked.uint32(4), + SkipEvent = cms.untracked.vstring('ProductNotFound'), + wantSummary = cms.untracked.bool(True) +) + +# report CUDAService messages +process.MessageLogger.categories.append("CUDAService") diff --git a/RecoLocalCalo/EcalRecProducers/test/sourceFromRawCmggpu_cff.py b/RecoLocalCalo/EcalRecProducers/test/sourceFromRawCmggpu_cff.py new file mode 100644 index 0000000000000..e993a7573b689 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/test/sourceFromRawCmggpu_cff.py @@ -0,0 +1,151 @@ +import FWCore.ParameterSet.Config as cms + +# input +FastMonitoringService = cms.Service( "FastMonitoringService", + filePerFwkStream = cms.untracked.bool( False ), + fastMonIntervals = cms.untracked.uint32( 2 ), + sleepTime = cms.untracked.int32( 1 ) +) + +EvFDaqDirector = cms.Service( "EvFDaqDirector", + runNumber = cms.untracked.uint32( 321177 ), + + baseDir = cms.untracked.string( "tmp" ), + buBaseDir = cms.untracked.string( "tmp" ), + + useFileBroker = cms.untracked.bool( False ), + fileBrokerKeepAlive = cms.untracked.bool( True ), + fileBrokerPort = cms.untracked.string( "8080" ), + fileBrokerUseLocalLock = cms.untracked.bool( True ), + fuLockPollInterval = cms.untracked.uint32( 2000 ), + + requireTransfersPSet = cms.untracked.bool( False ), + selectedTransferMode = cms.untracked.string( "" ), + mergingPset = cms.untracked.string( "" ), + + outputAdler32Recheck = cms.untracked.bool( False ), +) + +source = cms.Source( "FedRawDataInputSource", + runNumber = cms.untracked.uint32( 321177 ), + getLSFromFilename = cms.untracked.bool(True), + testModeNoBuilderUnit = cms.untracked.bool(False), + verifyAdler32 = cms.untracked.bool( True ), + verifyChecksum = cms.untracked.bool( True ), + useL1EventID = cms.untracked.bool( False ), # True + alwaysStartFromfirstLS = cms.untracked.uint32( 0 ), + + eventChunkBlock = cms.untracked.uint32( 240 ), # 32 + eventChunkSize = cms.untracked.uint32( 240), # 32 + maxBufferedFiles = cms.untracked.uint32( 8 ), # 2 + numBuffers = cms.untracked.uint32( 8 ), # 2 + + fileListMode = cms.untracked.bool( True ), # False + fileNames = cms.untracked.vstring( + #'/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0142_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0142_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0142_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0142_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0142_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0143_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0143_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0143_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0143_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0143_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0144_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0144_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0144_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0144_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0144_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0145_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0145_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0145_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0145_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0145_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0146_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0146_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0146_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0146_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0146_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0147_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0147_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0147_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0147_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0147_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0148_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0148_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0148_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0148_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0148_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0149_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0149_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0149_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0149_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0149_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0150_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0150_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0150_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0150_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0150_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0151_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0151_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0151_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0151_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0151_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0152_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0152_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0152_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0152_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0152_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0153_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0153_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0153_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0153_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0153_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0154_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0154_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0154_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0154_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0154_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0155_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0155_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0155_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0155_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0155_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0156_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0156_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0156_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0156_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0156_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0157_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0157_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0157_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0157_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0157_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0158_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0158_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0158_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0158_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0158_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0159_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0159_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0159_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0159_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0159_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0160_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0160_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0160_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0160_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0160_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0161_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0161_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0161_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0161_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0161_index000004.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0162_index000000.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0162_index000001.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0162_index000002.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0162_index000003.raw', + '/data/patatrack/store/raw/Run2018D/JetHT/RAW/v1/000/321/177/00000/run321177_ls0162_index000004.raw', + ), +) \ No newline at end of file diff --git a/RecoLocalCalo/EcalRecProducers/test/testEcalRechitProducer_cfg.py b/RecoLocalCalo/EcalRecProducers/test/testEcalRechitProducer_cfg.py new file mode 100644 index 0000000000000..c70572ff3b89d --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/test/testEcalRechitProducer_cfg.py @@ -0,0 +1,322 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.StandardSequences.Eras import eras +#from Configuration.ProcessModifiers.gpu_cff import gpu + +process = cms.Process('RECO', eras.Run2_2018) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +#process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('HeterogeneousCore.CUDAServices.CUDAService_cfi') +#process.load('Configuration.EventContent.EventContent_cff') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff') +#process.load('Configuration.StandardSequences.RawToDigi_Data_cff') +#process.load('Configuration.StandardSequences.Reconstruction_Data_cff') +#process.load('DQMOffline.Configuration.DQMOffline_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + + + + + + +# Other statements +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, '102X_dataRun2_HLT_v2', '') + + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1000) +) + +# load data using the DAQ source +import sys, os, inspect +sys.path.append(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))) +process.load('sourceFromRawCmggpu_cff') + +#----------------------------------------- +# CMSSW/Hcal non-DQM Related Module import +#----------------------------------------- +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load("RecoLocalCalo.Configuration.hcalLocalReco_cff") +#process.load("RecoLocalCalo.Configuration.ecalLocalRecoSequence_cff") +process.load("EventFilter.HcalRawToDigi.HcalRawToDigi_cfi") +process.load("EventFilter.EcalRawToDigi.EcalUnpackerData_cfi") +process.load("RecoLuminosity.LumiProducer.bunchSpacingProducer_cfi") + +# load both cpu and gpu plugins +# +# ../cfipython/slc7_amd64_gcc700/RecoLocalCalo/EcalRecProducers/ecalUncalibRecHitProducerGPU_cfi.py +# +process.load("RecoLocalCalo.EcalRecProducers.ecalUncalibRecHitProducerGPU_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalMultiFitUncalibRecHit_cfi") + +# for validation of gpu multifit products +process.load("RecoLocalCalo.EcalRecProducers.ecalCPUUncalibRecHitProducer_cfi") +process.load("EventFilter.EcalRawToDigi.ecalCPUDigisProducer_cfi") + +process.load("EventFilter.EcalRawToDigi.ecalRawToDigiGPU_cfi") +process.load("EventFilter.EcalRawToDigi.ecalElectronicsMappingGPUESProducer_cfi") + +#process.ecalUncalibRecHitProducerGPU.kernelsVersion = 0 +#process.ecalUncalibRecHitProducerGPU.kernelMinimizeThreads = cms.vuint32(16, 1, 1) + +process.load("RecoLocalCalo.EcalRecProducers.ecalPedestalsGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalGainRatiosGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalPulseShapesGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalPulseCovariancesGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalSamplesCorrelationGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalTimeBiasCorrectionsGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalTimeCalibConstantsGPUESProducer_cfi") + +#process.ecalMultiFitUncalibRecHitgpu.algoPSet.threads = cms.vint32(256, 1, 1) + +#from RecoLocalCalo.EcalRecProducers.ecalMultifitParametersGPUESProducer_cfi import ecalMultifitParametersGPUESProducer +process.load("RecoLocalCalo.EcalRecProducers.ecalMultifitParametersGPUESProducer_cfi") + +# +# +# No "JobConfigurationGPURecord" record found in the EventSetup.n +# #---> +# +process.load("RecoLocalCalo.EcalRecProducers.ecalRecHitParametersGPUESProducer_cfi") +#ecalRecHitParametersGPUESProducer_cfi.py + + +## +## force HLT configuration for ecalMultiFitUncalibRecHit +## + +process.ecalMultiFitUncalibRecHit.algoPSet = cms.PSet( + ebSpikeThreshold = cms.double( 1.042 ), + EBtimeFitLimits_Upper = cms.double( 1.4 ), + EEtimeFitLimits_Lower = cms.double( 0.2 ), + timealgo = cms.string( "None" ), + EBtimeNconst = cms.double( 28.5 ), + prefitMaxChiSqEE = cms.double( 10.0 ), + outOfTimeThresholdGain12mEB = cms.double( 5.0 ), + outOfTimeThresholdGain12mEE = cms.double( 1000.0 ), + EEtimeFitParameters = cms.vdouble( -2.390548, 3.553628, -17.62341, 67.67538, -133.213, 140.7432, -75.41106, 16.20277 ), + prefitMaxChiSqEB = cms.double( 25.0 ), + simplifiedNoiseModelForGainSwitch = cms.bool( True ), + EBtimeFitParameters = cms.vdouble( -2.015452, 3.130702, -12.3473, 41.88921, -82.83944, 91.01147, -50.35761, 11.05621 ), + selectiveBadSampleCriteriaEB = cms.bool( False ), + dynamicPedestalsEB = cms.bool( False ), + useLumiInfoRunHeader = cms.bool( False ), + EBamplitudeFitParameters = cms.vdouble( 1.138, 1.652 ), + doPrefitEE = cms.bool( False ), + dynamicPedestalsEE = cms.bool( False ), + selectiveBadSampleCriteriaEE = cms.bool( False ), + outOfTimeThresholdGain61pEE = cms.double( 1000.0 ), + outOfTimeThresholdGain61pEB = cms.double( 5.0 ), + activeBXs = cms.vint32( -5, -4, -3, -2, -1, 0, 1, 2, 3, 4 ), + EcalPulseShapeParameters = cms.PSet( + EEPulseShapeTemplate = cms.vdouble( 0.116442, 0.756246, 1.0, 0.897182, 0.686831, 0.491506, 0.344111, 0.245731, 0.174115, 0.123361, 0.0874288, 0.061957 ), + EEdigiCollection = cms.string( "" ), + EcalPreMixStage2 = cms.bool( False ), + EcalPreMixStage1 = cms.bool( False ), + EBPulseShapeCovariance = cms.vdouble( 3.001E-6, 1.233E-5, 0.0, -4.416E-6, -4.571E-6, -3.614E-6, -2.636E-6, -1.286E-6, -8.41E-7, -5.296E-7, 0.0, 0.0, 1.233E-5, 6.154E-5, 0.0, -2.2E-5, -2.309E-5, -1.838E-5, -1.373E-5, -7.334E-6, -5.088E-6, -3.745E-6, -2.428E-6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -4.416E-6, -2.2E-5, 0.0, 8.319E-6, 8.545E-6, 6.792E-6, 5.059E-6, 2.678E-6, 1.816E-6, 1.223E-6, 8.245E-7, 5.589E-7, -4.571E-6, -2.309E-5, 0.0, 8.545E-6, 9.182E-6, 7.219E-6, 5.388E-6, 2.853E-6, 1.944E-6, 1.324E-6, 9.083E-7, 6.335E-7, -3.614E-6, -1.838E-5, 0.0, 6.792E-6, 7.219E-6, 6.016E-6, 4.437E-6, 2.385E-6, 1.636E-6, 1.118E-6, 7.754E-7, 5.556E-7, -2.636E-6, -1.373E-5, 0.0, 5.059E-6, 5.388E-6, 4.437E-6, 3.602E-6, 1.917E-6, 1.322E-6, 9.079E-7, 6.529E-7, 4.752E-7, -1.286E-6, -7.334E-6, 0.0, 2.678E-6, 2.853E-6, 2.385E-6, 1.917E-6, 1.375E-6, 9.1E-7, 6.455E-7, 4.693E-7, 3.657E-7, -8.41E-7, -5.088E-6, 0.0, 1.816E-6, 1.944E-6, 1.636E-6, 1.322E-6, 9.1E-7, 9.115E-7, 6.062E-7, 4.436E-7, 3.422E-7, -5.296E-7, -3.745E-6, 0.0, 1.223E-6, 1.324E-6, 1.118E-6, 9.079E-7, 6.455E-7, 6.062E-7, 7.217E-7, 4.862E-7, 3.768E-7, 0.0, -2.428E-6, 0.0, 8.245E-7, 9.083E-7, 7.754E-7, 6.529E-7, 4.693E-7, 4.436E-7, 4.862E-7, 6.509E-7, 4.418E-7, 0.0, 0.0, 0.0, 5.589E-7, 6.335E-7, 5.556E-7, 4.752E-7, 3.657E-7, 3.422E-7, 3.768E-7, 4.418E-7, 6.142E-7 ), + ESdigiCollection = cms.string( "" ), + EBdigiCollection = cms.string( "" ), + EBCorrNoiseMatrixG01 = cms.vdouble( 1.0, 0.73354, 0.64442, 0.58851, 0.55425, 0.53082, 0.51916, 0.51097, 0.50732, 0.50409 ), + EBCorrNoiseMatrixG12 = cms.vdouble( 1.0, 0.71073, 0.55721, 0.46089, 0.40449, 0.35931, 0.33924, 0.32439, 0.31581, 0.30481 ), + EBCorrNoiseMatrixG06 = cms.vdouble( 1.0, 0.70946, 0.58021, 0.49846, 0.45006, 0.41366, 0.39699, 0.38478, 0.37847, 0.37055 ), + EEPulseShapeCovariance = cms.vdouble( 3.941E-5, 3.333E-5, 0.0, -1.449E-5, -1.661E-5, -1.424E-5, -1.183E-5, -6.842E-6, -4.915E-6, -3.411E-6, 0.0, 0.0, 3.333E-5, 2.862E-5, 0.0, -1.244E-5, -1.431E-5, -1.233E-5, -1.032E-5, -5.883E-6, -4.154E-6, -2.902E-6, -2.128E-6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.449E-5, -1.244E-5, 0.0, 5.84E-6, 6.649E-6, 5.72E-6, 4.812E-6, 2.708E-6, 1.869E-6, 1.33E-6, 9.186E-7, 6.446E-7, -1.661E-5, -1.431E-5, 0.0, 6.649E-6, 7.966E-6, 6.898E-6, 5.794E-6, 3.157E-6, 2.184E-6, 1.567E-6, 1.084E-6, 7.575E-7, -1.424E-5, -1.233E-5, 0.0, 5.72E-6, 6.898E-6, 6.341E-6, 5.347E-6, 2.859E-6, 1.991E-6, 1.431E-6, 9.839E-7, 6.886E-7, -1.183E-5, -1.032E-5, 0.0, 4.812E-6, 5.794E-6, 5.347E-6, 4.854E-6, 2.628E-6, 1.809E-6, 1.289E-6, 9.02E-7, 6.146E-7, -6.842E-6, -5.883E-6, 0.0, 2.708E-6, 3.157E-6, 2.859E-6, 2.628E-6, 1.863E-6, 1.296E-6, 8.882E-7, 6.108E-7, 4.283E-7, -4.915E-6, -4.154E-6, 0.0, 1.869E-6, 2.184E-6, 1.991E-6, 1.809E-6, 1.296E-6, 1.217E-6, 8.669E-7, 5.751E-7, 3.882E-7, -3.411E-6, -2.902E-6, 0.0, 1.33E-6, 1.567E-6, 1.431E-6, 1.289E-6, 8.882E-7, 8.669E-7, 9.522E-7, 6.717E-7, 4.293E-7, 0.0, -2.128E-6, 0.0, 9.186E-7, 1.084E-6, 9.839E-7, 9.02E-7, 6.108E-7, 5.751E-7, 6.717E-7, 7.911E-7, 5.493E-7, 0.0, 0.0, 0.0, 6.446E-7, 7.575E-7, 6.886E-7, 6.146E-7, 4.283E-7, 3.882E-7, 4.293E-7, 5.493E-7, 7.027E-7 ), + EBPulseShapeTemplate = cms.vdouble( 0.0113979, 0.758151, 1.0, 0.887744, 0.673548, 0.474332, 0.319561, 0.215144, 0.147464, 0.101087, 0.0693181, 0.0475044 ), + EECorrNoiseMatrixG01 = cms.vdouble( 1.0, 0.72698, 0.62048, 0.55691, 0.51848, 0.49147, 0.47813, 0.47007, 0.46621, 0.46265 ), + EECorrNoiseMatrixG12 = cms.vdouble( 1.0, 0.71373, 0.44825, 0.30152, 0.21609, 0.14786, 0.11772, 0.10165, 0.09465, 0.08098 ), + UseLCcorrection = cms.untracked.bool( True ), + EECorrNoiseMatrixG06 = cms.vdouble( 1.0, 0.71217, 0.47464, 0.34056, 0.26282, 0.20287, 0.17734, 0.16256, 0.15618, 0.14443 ) + ), + doPrefitEB = cms.bool( False ), + addPedestalUncertaintyEE = cms.double( 0.0 ), + addPedestalUncertaintyEB = cms.double( 0.0 ), + gainSwitchUseMaxSampleEB = cms.bool( True ), + EEtimeNconst = cms.double( 31.8 ), + EEamplitudeFitParameters = cms.vdouble( 1.89, 1.4 ), + chi2ThreshEE_ = cms.double( 50.0 ), + eePulseShape = cms.vdouble( 5.2E-5, -5.26E-5, 6.66E-5, 0.1168, 0.7575, 1.0, 0.8876, 0.6732, 0.4741, 0.3194 ), + outOfTimeThresholdGain12pEB = cms.double( 5.0 ), + gainSwitchUseMaxSampleEE = cms.bool( False ), + mitigateBadSamplesEB = cms.bool( False ), + outOfTimeThresholdGain12pEE = cms.double( 1000.0 ), + ebPulseShape = cms.vdouble( 5.2E-5, -5.26E-5, 6.66E-5, 0.1168, 0.7575, 1.0, 0.8876, 0.6732, 0.4741, 0.3194 ), + ampErrorCalculation = cms.bool( False ), + mitigateBadSamplesEE = cms.bool( False ), + amplitudeThresholdEB = cms.double( 10.0 ), + kPoorRecoFlagEB = cms.bool( True ), + amplitudeThresholdEE = cms.double( 10.0 ), + EBtimeFitLimits_Lower = cms.double( 0.2 ), + kPoorRecoFlagEE = cms.bool( False ), + EEtimeFitLimits_Upper = cms.double( 1.4 ), + outOfTimeThresholdGain61mEE = cms.double( 1000.0 ), + EEtimeConstantTerm = cms.double( 1.0 ), + EBtimeConstantTerm = cms.double( 0.6 ), + chi2ThreshEB_ = cms.double( 65.0 ), + outOfTimeThresholdGain61mEB = cms.double( 5.0 ) +) + +## + + + +process.load('Configuration.StandardSequences.Reconstruction_cff') +#process.ecalRecHit + + +process.load("RecoLocalCalo.EcalRecProducers.ecalRechitADCToGeVConstantGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalRechitChannelStatusGPUESProducer_cfi") +#process.load("RecoLocalCalo.EcalRecProducers.ecalADCToGeVConstantGPUESProducer_cfi") +#process.load("RecoLocalCalo.EcalRecProducers.ecalChannelStatusGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalIntercalibConstantsGPUESProducer_cfi") + +process.load("RecoLocalCalo.EcalRecProducers.ecalLaserAPDPNRatiosGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalLaserAPDPNRatiosRefGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalLaserAlphasGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalLinearCorrectionsGPUESProducer_cfi") + +process.load("RecoLocalCalo.EcalRecProducers.ecalRecHitGPU_cfi") +process.ecalRecHitProducerGPU = process.ecalRecHitGPU.clone() + + +process.load("RecoLocalCalo.EcalRecProducers.ecalCPURecHitProducer_cfi") + + +# +# AM : TEST to see if the number of rechits matches +# +#process.ecalRecHit.killDeadChannels = cms.bool(False) +# +#process.ecalRecHit.recoverEBFE = cms.bool(False) +#process.ecalRecHit.recoverEBIsolatedChannels = cms.bool(False) +#process.ecalRecHit.recoverEBVFE = cms.bool(False) +## +#process.ecalRecHit.recoverEEFE = cms.bool(False) +#process.ecalRecHit.recoverEEIsolatedChannels = cms.bool(False) +#process.ecalRecHit.recoverEEVFE = cms.bool(False) +# +#process.ecalRecHit.skipTimeCalib = cms.bool(True) +# +#process.ecalRecHitProducerGPU.killDeadChannels = cms.bool(False) +# +# +#process.ecalRecHitProducerGPU.recoverEBFE = cms.bool(False) +#process.ecalRecHitProducerGPU.recoverEBIsolatedChannels = cms.bool(False) +#process.ecalRecHitProducerGPU.recoverEBVFE = cms.bool(False) +#process.ecalRecHitProducerGPU.recoverEEFE = cms.bool(False) +#process.ecalRecHitProducerGPU.recoverEEIsolatedChannels = cms.bool(False) +#process.ecalRecHitProducerGPU.recoverEEVFE = cms.bool(False) +# +# +# +# TEST +# +#process.ecalRecHit.ChannelStatusToBeExcluded = cms.vstring( + #'kDAC', + #'kNoisy', + #'kNNoisy', + #'kFixedG6', + #'kFixedG1', + #'kFixedG0', + #'kNonRespondingIsolated', + #'kDeadVFE', + #'kDeadFE', + #'kNoDataNoTP' + #) +#process.ecalRecHitProducerGPU.ChannelStatusToBeExcluded = cms.vstring( + #'kDAC', + #'kNoisy', + #'kNNoisy', + #'kFixedG6', + #'kFixedG1', + #'kFixedG0', + #'kNonRespondingIsolated', + #'kDeadVFE', + #'kDeadFE', + #'kNoDataNoTP' + #) +# +# + + #ChannelStatusToBeExcluded = cms.vstring( + #'kDAC', + #'kNoisy', + #'kNNoisy', + #'kFixedG6', + #'kFixedG1', + #'kFixedG0', + #'kNonRespondingIsolated', + #'kDeadVFE', + #'kDeadFE', + #'kNoDataNoTP' + #), + + + +#process.hcalDigis.silent = cms.untracked.bool(False) +#process.hcalDigis.InputLabel = rawTag +process.ecalDigis = process.ecalEBunpacker.clone() +process.ecalDigis.InputLabel = cms.InputTag('rawDataCollector') +#process.hbheprerecogpu.processQIE11 = cms.bool(True) + +process.out = cms.OutputModule( + "PoolOutputModule", + fileName = cms.untracked.string("testRechit.root") +) + +#process.out = cms.OutputModule("AsciiOutputModule", +# outputCommands = cms.untracked.vstring( +# 'keep *_ecalMultiFitUncalibRecHit_*_*', +# ), +# verbosity = cms.untracked.uint32(0) +#) +process.finalize = cms.EndPath(process.out) + +process.bunchSpacing = cms.Path( + process.bunchSpacingProducer +) + +process.digiPath = cms.Path( + #process.hcalDigis + process.ecalDigis + *process.ecalRawToDigiGPU + *process.ecalCPUDigisProducer +) + +process.recoPath = cms.Path( + (process.ecalMultiFitUncalibRecHit+process.ecalDetIdToBeRecovered) + #process.ecalMultiFitUncalibRecHit + *process.ecalRecHit +# gpu + *process.ecalUncalibRecHitProducerGPU + *process.ecalCPUUncalibRecHitProducer + *process.ecalRecHitProducerGPU + *process.ecalCPURecHitProducer +) + +process.schedule = cms.Schedule( + process.bunchSpacing, + process.digiPath, + process.recoPath, +# process.ecalecalLocalRecoSequence + process.finalize +) + +process.options = cms.untracked.PSet( + numberOfThreads = cms.untracked.uint32(4), + numberOfStreams = cms.untracked.uint32(4), + SkipEvent = cms.untracked.vstring('ProductNotFound'), + wantSummary = cms.untracked.bool(True) +) + +# report CUDAService messages +process.MessageLogger.categories.append("CUDAService") + + +# +#process.DependencyGraph = cms.Service("DependencyGraph") + + diff --git a/RecoLocalCalo/EcalRecProducers/test/testEcalUncalibRechitProducerWithCC_cfg.py b/RecoLocalCalo/EcalRecProducers/test/testEcalUncalibRechitProducerWithCC_cfg.py new file mode 100644 index 0000000000000..698a6314b2b27 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/test/testEcalUncalibRechitProducerWithCC_cfg.py @@ -0,0 +1,97 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.StandardSequences.Eras import eras + +process = cms.Process('RECO', eras.Run2_2018) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +process.load('Configuration.StandardSequences.Reconstruction_cff') + + + +process.source = cms.Source('PoolSource', + fileNames = cms.untracked.vstring( + '/store/data/Run2018D/EGamma/RAW/v1/000/323/414/00000/042D6023-E0A2-8649-8D86-445F752A8F6B.root', + ), +) + + +# Other statements +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_data', '') + + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1000) +) + +#----------------------------------------- +# CMSSW/Hcal non-DQM Related Module import +#----------------------------------------- +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load("RecoLocalCalo.Configuration.hcalLocalReco_cff") +process.load("RecoLocalCalo.Configuration.ecalLocalRecoSequence_cff") +process.load("EventFilter.HcalRawToDigi.HcalRawToDigi_cfi") +process.load("EventFilter.EcalRawToDigi.EcalUnpackerData_cfi") +process.load("RecoLuminosity.LumiProducer.bunchSpacingProducer_cfi") + +# load both cpu plugins +process.load("RecoLocalCalo.EcalRecProducers.ecalMultiFitUncalibRecHit_cfi") + +## +## force HLT configuration for ecalMultiFitUncalibRecHit +## + +process.ecalMultiFitUncalibRecHit.algoPSet = cms.PSet( + # for crossCorrelationMethod + timealgo = cms.string( "crossCorrelationMethod" ), + crossCorrelationStartTime = cms.double(-25), + crossCorrelationStopTime = cms.double(25), + crossCorrelationTargetTimePrecision = cms.double(0.01), +) + +## + +process.ecalDigis = process.ecalEBunpacker.clone() +process.ecalDigis.InputLabel = cms.InputTag('rawDataCollector') + +process.out = cms.OutputModule( + "PoolOutputModule", + fileName = cms.untracked.string("test_uncalib.root") +) + +process.finalize = cms.EndPath(process.out) + +process.bunchSpacing = cms.Path( + process.bunchSpacingProducer +) + +process.digiPath = cms.Path( + process.ecalDigis +) + +process.recoPath = cms.Path( + process.ecalMultiFitUncalibRecHit + *process.ecalRecHit +) + +process.schedule = cms.Schedule( + process.bunchSpacing, + process.digiPath, + process.recoPath, + process.finalize +) + +process.options = cms.untracked.PSet( + numberOfThreads = cms.untracked.uint32(8), + numberOfStreams = cms.untracked.uint32(8), + SkipEvent = cms.untracked.vstring('ProductNotFound'), + wantSummary = cms.untracked.bool(True) +) + + diff --git a/RecoLocalCalo/EcalRecProducers/test/testEcalUncalibRechitProducer_cfg.py b/RecoLocalCalo/EcalRecProducers/test/testEcalUncalibRechitProducer_cfg.py new file mode 100644 index 0000000000000..ffb665d7bc96a --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/test/testEcalUncalibRechitProducer_cfg.py @@ -0,0 +1,233 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.StandardSequences.Eras import eras +#from Configuration.ProcessModifiers.gpu_cff import gpu + +process = cms.Process('RECO', eras.Run2_2018) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +#process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('HeterogeneousCore.CUDAServices.CUDAService_cfi') +#process.load('Configuration.EventContent.EventContent_cff') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff') +#process.load('Configuration.StandardSequences.RawToDigi_Data_cff') +#process.load('Configuration.StandardSequences.Reconstruction_Data_cff') +#process.load('DQMOffline.Configuration.DQMOffline_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + + + + + + +# Other statements +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, '102X_dataRun2_HLT_v2', '') + + +process.maxEvents = cms.untracked.PSet( + #input = cms.untracked.int32(100) + input = cms.untracked.int32(1000) +) + +# load data using the DAQ source +import sys, os, inspect +sys.path.append(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))) +process.load('sourceFromRawCmggpu_cff') + +#----------------------------------------- +# CMSSW/Hcal non-DQM Related Module import +#----------------------------------------- +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load("RecoLocalCalo.Configuration.hcalLocalReco_cff") +#process.load("RecoLocalCalo.Configuration.ecalLocalRecoSequence_cff") +process.load("EventFilter.HcalRawToDigi.HcalRawToDigi_cfi") +process.load("EventFilter.EcalRawToDigi.EcalUnpackerData_cfi") +process.load("RecoLuminosity.LumiProducer.bunchSpacingProducer_cfi") + +# load both cpu and gpu plugins +# +# ../cfipython/slc7_amd64_gcc700/RecoLocalCalo/EcalRecProducers/ecalUncalibRecHitProducerGPU_cfi.py +# +process.load("RecoLocalCalo.EcalRecProducers.ecalUncalibRecHitProducerGPU_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalMultiFitUncalibRecHit_cfi") + +# for validation of gpu multifit products +process.load("RecoLocalCalo.EcalRecProducers.ecalCPUUncalibRecHitProducer_cfi") +# +# ../cfipython/slc7_amd64_gcc700/RecoLocalCalo/EcalRecProducers/ecalCPUUncalibRecHitProducer_cfi.py +# + +process.load("EventFilter.EcalRawToDigi.ecalRawToDigiGPU_cfi") +process.load("EventFilter.EcalRawToDigi.ecalElectronicsMappingGPUESProducer_cfi") + +#process.ecalUncalibRecHitProducerGPU.kernelsVersion = 0 +#process.ecalUncalibRecHitProducerGPU.kernelMinimizeThreads = cms.vuint32(16, 1, 1) +# +# process.ecalUncalibRecHitProducerGPU.shouldRunTimingComputation = cms.bool(False) +# + + +process.load("RecoLocalCalo.EcalRecProducers.ecalPedestalsGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalGainRatiosGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalPulseShapesGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalPulseCovariancesGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalSamplesCorrelationGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalTimeBiasCorrectionsGPUESProducer_cfi") +process.load("RecoLocalCalo.EcalRecProducers.ecalTimeCalibConstantsGPUESProducer_cfi") + +#process.ecalMultiFitUncalibRecHitgpu.algoPSet.threads = cms.vint32(256, 1, 1) + + +process.load("RecoLocalCalo.EcalRecProducers.ecalMultifitParametersGPUESProducer_cfi") + + + +## +## force HLT configuration for ecalMultiFitUncalibRecHit +## + +process.ecalMultiFitUncalibRecHit.algoPSet = cms.PSet( + ebSpikeThreshold = cms.double( 1.042 ), + EBtimeFitLimits_Upper = cms.double( 1.4 ), + EEtimeFitLimits_Lower = cms.double( 0.2 ), + timealgo = cms.string( "None" ), # ----> no timing computation for CPU version + EBtimeNconst = cms.double( 28.5 ), + prefitMaxChiSqEE = cms.double( 10.0 ), + outOfTimeThresholdGain12mEB = cms.double( 5.0 ), + outOfTimeThresholdGain12mEE = cms.double( 1000.0 ), + EEtimeFitParameters = cms.vdouble( -2.390548, 3.553628, -17.62341, 67.67538, -133.213, 140.7432, -75.41106, 16.20277 ), + prefitMaxChiSqEB = cms.double( 25.0 ), + simplifiedNoiseModelForGainSwitch = cms.bool( True ), + EBtimeFitParameters = cms.vdouble( -2.015452, 3.130702, -12.3473, 41.88921, -82.83944, 91.01147, -50.35761, 11.05621 ), + selectiveBadSampleCriteriaEB = cms.bool( False ), + dynamicPedestalsEB = cms.bool( False ), + useLumiInfoRunHeader = cms.bool( False ), + EBamplitudeFitParameters = cms.vdouble( 1.138, 1.652 ), + doPrefitEE = cms.bool( False ), + dynamicPedestalsEE = cms.bool( False ), + selectiveBadSampleCriteriaEE = cms.bool( False ), + outOfTimeThresholdGain61pEE = cms.double( 1000.0 ), + outOfTimeThresholdGain61pEB = cms.double( 5.0 ), + activeBXs = cms.vint32( -5, -4, -3, -2, -1, 0, 1, 2, 3, 4 ), + EcalPulseShapeParameters = cms.PSet( + EEPulseShapeTemplate = cms.vdouble( 0.116442, 0.756246, 1.0, 0.897182, 0.686831, 0.491506, 0.344111, 0.245731, 0.174115, 0.123361, 0.0874288, 0.061957 ), + EEdigiCollection = cms.string( "" ), + EcalPreMixStage2 = cms.bool( False ), + EcalPreMixStage1 = cms.bool( False ), + EBPulseShapeCovariance = cms.vdouble( 3.001E-6, 1.233E-5, 0.0, -4.416E-6, -4.571E-6, -3.614E-6, -2.636E-6, -1.286E-6, -8.41E-7, -5.296E-7, 0.0, 0.0, 1.233E-5, 6.154E-5, 0.0, -2.2E-5, -2.309E-5, -1.838E-5, -1.373E-5, -7.334E-6, -5.088E-6, -3.745E-6, -2.428E-6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -4.416E-6, -2.2E-5, 0.0, 8.319E-6, 8.545E-6, 6.792E-6, 5.059E-6, 2.678E-6, 1.816E-6, 1.223E-6, 8.245E-7, 5.589E-7, -4.571E-6, -2.309E-5, 0.0, 8.545E-6, 9.182E-6, 7.219E-6, 5.388E-6, 2.853E-6, 1.944E-6, 1.324E-6, 9.083E-7, 6.335E-7, -3.614E-6, -1.838E-5, 0.0, 6.792E-6, 7.219E-6, 6.016E-6, 4.437E-6, 2.385E-6, 1.636E-6, 1.118E-6, 7.754E-7, 5.556E-7, -2.636E-6, -1.373E-5, 0.0, 5.059E-6, 5.388E-6, 4.437E-6, 3.602E-6, 1.917E-6, 1.322E-6, 9.079E-7, 6.529E-7, 4.752E-7, -1.286E-6, -7.334E-6, 0.0, 2.678E-6, 2.853E-6, 2.385E-6, 1.917E-6, 1.375E-6, 9.1E-7, 6.455E-7, 4.693E-7, 3.657E-7, -8.41E-7, -5.088E-6, 0.0, 1.816E-6, 1.944E-6, 1.636E-6, 1.322E-6, 9.1E-7, 9.115E-7, 6.062E-7, 4.436E-7, 3.422E-7, -5.296E-7, -3.745E-6, 0.0, 1.223E-6, 1.324E-6, 1.118E-6, 9.079E-7, 6.455E-7, 6.062E-7, 7.217E-7, 4.862E-7, 3.768E-7, 0.0, -2.428E-6, 0.0, 8.245E-7, 9.083E-7, 7.754E-7, 6.529E-7, 4.693E-7, 4.436E-7, 4.862E-7, 6.509E-7, 4.418E-7, 0.0, 0.0, 0.0, 5.589E-7, 6.335E-7, 5.556E-7, 4.752E-7, 3.657E-7, 3.422E-7, 3.768E-7, 4.418E-7, 6.142E-7 ), + ESdigiCollection = cms.string( "" ), + EBdigiCollection = cms.string( "" ), + EBCorrNoiseMatrixG01 = cms.vdouble( 1.0, 0.73354, 0.64442, 0.58851, 0.55425, 0.53082, 0.51916, 0.51097, 0.50732, 0.50409 ), + EBCorrNoiseMatrixG12 = cms.vdouble( 1.0, 0.71073, 0.55721, 0.46089, 0.40449, 0.35931, 0.33924, 0.32439, 0.31581, 0.30481 ), + EBCorrNoiseMatrixG06 = cms.vdouble( 1.0, 0.70946, 0.58021, 0.49846, 0.45006, 0.41366, 0.39699, 0.38478, 0.37847, 0.37055 ), + EEPulseShapeCovariance = cms.vdouble( 3.941E-5, 3.333E-5, 0.0, -1.449E-5, -1.661E-5, -1.424E-5, -1.183E-5, -6.842E-6, -4.915E-6, -3.411E-6, 0.0, 0.0, 3.333E-5, 2.862E-5, 0.0, -1.244E-5, -1.431E-5, -1.233E-5, -1.032E-5, -5.883E-6, -4.154E-6, -2.902E-6, -2.128E-6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.449E-5, -1.244E-5, 0.0, 5.84E-6, 6.649E-6, 5.72E-6, 4.812E-6, 2.708E-6, 1.869E-6, 1.33E-6, 9.186E-7, 6.446E-7, -1.661E-5, -1.431E-5, 0.0, 6.649E-6, 7.966E-6, 6.898E-6, 5.794E-6, 3.157E-6, 2.184E-6, 1.567E-6, 1.084E-6, 7.575E-7, -1.424E-5, -1.233E-5, 0.0, 5.72E-6, 6.898E-6, 6.341E-6, 5.347E-6, 2.859E-6, 1.991E-6, 1.431E-6, 9.839E-7, 6.886E-7, -1.183E-5, -1.032E-5, 0.0, 4.812E-6, 5.794E-6, 5.347E-6, 4.854E-6, 2.628E-6, 1.809E-6, 1.289E-6, 9.02E-7, 6.146E-7, -6.842E-6, -5.883E-6, 0.0, 2.708E-6, 3.157E-6, 2.859E-6, 2.628E-6, 1.863E-6, 1.296E-6, 8.882E-7, 6.108E-7, 4.283E-7, -4.915E-6, -4.154E-6, 0.0, 1.869E-6, 2.184E-6, 1.991E-6, 1.809E-6, 1.296E-6, 1.217E-6, 8.669E-7, 5.751E-7, 3.882E-7, -3.411E-6, -2.902E-6, 0.0, 1.33E-6, 1.567E-6, 1.431E-6, 1.289E-6, 8.882E-7, 8.669E-7, 9.522E-7, 6.717E-7, 4.293E-7, 0.0, -2.128E-6, 0.0, 9.186E-7, 1.084E-6, 9.839E-7, 9.02E-7, 6.108E-7, 5.751E-7, 6.717E-7, 7.911E-7, 5.493E-7, 0.0, 0.0, 0.0, 6.446E-7, 7.575E-7, 6.886E-7, 6.146E-7, 4.283E-7, 3.882E-7, 4.293E-7, 5.493E-7, 7.027E-7 ), + EBPulseShapeTemplate = cms.vdouble( 0.0113979, 0.758151, 1.0, 0.887744, 0.673548, 0.474332, 0.319561, 0.215144, 0.147464, 0.101087, 0.0693181, 0.0475044 ), + EECorrNoiseMatrixG01 = cms.vdouble( 1.0, 0.72698, 0.62048, 0.55691, 0.51848, 0.49147, 0.47813, 0.47007, 0.46621, 0.46265 ), + EECorrNoiseMatrixG12 = cms.vdouble( 1.0, 0.71373, 0.44825, 0.30152, 0.21609, 0.14786, 0.11772, 0.10165, 0.09465, 0.08098 ), + UseLCcorrection = cms.untracked.bool( True ), + EECorrNoiseMatrixG06 = cms.vdouble( 1.0, 0.71217, 0.47464, 0.34056, 0.26282, 0.20287, 0.17734, 0.16256, 0.15618, 0.14443 ) + ), + doPrefitEB = cms.bool( False ), + addPedestalUncertaintyEE = cms.double( 0.0 ), + addPedestalUncertaintyEB = cms.double( 0.0 ), + gainSwitchUseMaxSampleEB = cms.bool( True ), + EEtimeNconst = cms.double( 31.8 ), + EEamplitudeFitParameters = cms.vdouble( 1.89, 1.4 ), + chi2ThreshEE_ = cms.double( 50.0 ), + eePulseShape = cms.vdouble( 5.2E-5, -5.26E-5, 6.66E-5, 0.1168, 0.7575, 1.0, 0.8876, 0.6732, 0.4741, 0.3194 ), + outOfTimeThresholdGain12pEB = cms.double( 5.0 ), + gainSwitchUseMaxSampleEE = cms.bool( False ), + mitigateBadSamplesEB = cms.bool( False ), + outOfTimeThresholdGain12pEE = cms.double( 1000.0 ), + ebPulseShape = cms.vdouble( 5.2E-5, -5.26E-5, 6.66E-5, 0.1168, 0.7575, 1.0, 0.8876, 0.6732, 0.4741, 0.3194 ), + ampErrorCalculation = cms.bool( False ), + mitigateBadSamplesEE = cms.bool( False ), + amplitudeThresholdEB = cms.double( 10.0 ), + kPoorRecoFlagEB = cms.bool( True ), + amplitudeThresholdEE = cms.double( 10.0 ), + EBtimeFitLimits_Lower = cms.double( 0.2 ), + kPoorRecoFlagEE = cms.bool( False ), + EEtimeFitLimits_Upper = cms.double( 1.4 ), + outOfTimeThresholdGain61mEE = cms.double( 1000.0 ), + EEtimeConstantTerm = cms.double( 1.0 ), + EBtimeConstantTerm = cms.double( 0.6 ), + chi2ThreshEB_ = cms.double( 65.0 ), + outOfTimeThresholdGain61mEB = cms.double( 5.0 ) +) + +## + + + +#process.load('Configuration.StandardSequences.Reconstruction_cff') +#process.ecalRecHit + + + +#process.load("RecoLocalCalo.EcalRecProducers.ecalRecHitGPU_cfi") +#process.ecalRecHitGPU + + + +#process.hcalDigis.silent = cms.untracked.bool(False) +#process.hcalDigis.InputLabel = rawTag +process.ecalDigis = process.ecalEBunpacker.clone() +process.ecalDigis.InputLabel = cms.InputTag('rawDataCollector') +#process.hbheprerecogpu.processQIE11 = cms.bool(True) + +process.out = cms.OutputModule( + "PoolOutputModule", + fileName = cms.untracked.string("test_uncalib.root") +) + +#process.out = cms.OutputModule("AsciiOutputModule", +# outputCommands = cms.untracked.vstring( +# 'keep *_ecalMultiFitUncalibRecHit_*_*', +# ), +# verbosity = cms.untracked.uint32(0) +#) +process.finalize = cms.EndPath(process.out) + +process.bunchSpacing = cms.Path( + process.bunchSpacingProducer +) + +process.digiPath = cms.Path( + #process.hcalDigis + process.ecalDigis + *process.ecalRawToDigiGPU +) + +process.recoPath = cms.Path( + #(process.ecalMultiFitUncalibRecHit+process.ecalDetIdToBeRecovered) + process.ecalMultiFitUncalibRecHit + #*process.ecalRecHit +# gpu + *process.ecalUncalibRecHitProducerGPU + *process.ecalCPUUncalibRecHitProducer + #*process.ecalRecHitGPU +) + +process.schedule = cms.Schedule( + process.bunchSpacing, + process.digiPath, + process.recoPath, +# process.ecalecalLocalRecoSequence + process.finalize +) + +process.options = cms.untracked.PSet( + numberOfThreads = cms.untracked.uint32(8), + numberOfStreams = cms.untracked.uint32(8), + SkipEvent = cms.untracked.vstring('ProductNotFound'), + wantSummary = cms.untracked.bool(True) +) + +# report CUDAService messages +process.MessageLogger.categories.append("CUDAService") + + diff --git a/RecoLocalCalo/EcalRecProducers/test/testMultipleEcalRecoLocal_cfg.py b/RecoLocalCalo/EcalRecProducers/test/testMultipleEcalRecoLocal_cfg.py index 0687c49e78f07..43be4235db026 100644 --- a/RecoLocalCalo/EcalRecProducers/test/testMultipleEcalRecoLocal_cfg.py +++ b/RecoLocalCalo/EcalRecProducers/test/testMultipleEcalRecoLocal_cfg.py @@ -121,7 +121,6 @@ ######################### #https://twiki.cern.ch/twiki/bin/viewauth/CMS/FastTimerService -process.MessageLogger.categories.append('FastReport') process.MessageLogger.cerr.FastReport = cms.untracked.PSet( limit = cms.untracked.int32( 10000000 ) ) # remove any instance of the FastTimerService diff --git a/RecoLocalCalo/HcalRecAlgos/BuildFile.xml b/RecoLocalCalo/HcalRecAlgos/BuildFile.xml index ac94d61e12494..2a00e076f08e4 100644 --- a/RecoLocalCalo/HcalRecAlgos/BuildFile.xml +++ b/RecoLocalCalo/HcalRecAlgos/BuildFile.xml @@ -1,19 +1,22 @@ - + + + + + + + - - - - - + + + + - - diff --git a/RecoLocalCalo/HcalRecAlgos/bin/BuildFile.xml b/RecoLocalCalo/HcalRecAlgos/bin/BuildFile.xml new file mode 100644 index 0000000000000..30f76131622bd --- /dev/null +++ b/RecoLocalCalo/HcalRecAlgos/bin/BuildFile.xml @@ -0,0 +1,2 @@ + + diff --git a/RecoLocalCalo/HcalRecAlgos/bin/generateQIEShapes.cc b/RecoLocalCalo/HcalRecAlgos/bin/generateQIEShapes.cc new file mode 100644 index 0000000000000..39d5195e7438d --- /dev/null +++ b/RecoLocalCalo/HcalRecAlgos/bin/generateQIEShapes.cc @@ -0,0 +1,82 @@ +#include +#include +#include + +// +// Pregenerate QIE Shapes using hardcoded arrays +// This is taken directly from CondFormats/HcalObjects/srcHcalQIEData.cc +// This generation is running upon conditions retrieval typically for the cpu workload +// +// For the GPU workload, it is better to put generated values into constant memory. +// Either this or just use global memory (for global mem, we need getters...). +// Choosign constant memory as thsese +// values are statically known and never change. Any change in any case requires +// recompilation! +// + +const float binMin[32] = {-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 16, 18, 20, 22, 24, 26, 28, 31, 34, 37, 40, 44, 48, 52, 57, 62}; + +const float binMin2[64] = {-0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, + 10.5, 11.5, 12.5, 13.5, 14.5, // 16 bins with width 1x + 15.5, 17.5, 19.5, 21.5, 23.5, 25.5, 27.5, 29.5, 31.5, 33.5, 35.5, + 37.5, 39.5, 41.5, 43.5, 45.5, 47.5, 49.5, 51.5, 53.5, // 20 bins with width 2x + 55.5, 59.5, 63.5, 67.5, 71.5, 75.5, 79.5, 83.5, 87.5, 91.5, 95.5, + 99.5, 103.5, 107.5, 111.5, 115.5, 119.5, 123.5, 127.5, 131.5, 135.5, // 21 bins with width 4x + 139.5, 147.5, 155.5, 163.5, 171.5, 179.5, 187.5}; // 7 bins with width 8x + +constexpr uint32_t nbins_qie8 = 32; +constexpr uint32_t nbins_qie11 = 64; + +void dump(std::vector const& vec, std::string const& name) { + std::stringstream str; + str << "float const " << name << "[" << vec.size() << "] = {"; + uint32_t counter = 0; + for (auto const& value : vec) { + if (counter % 8 == 0) + str << std::endl; + if (counter == vec.size() - 1) + str << value; + else + str << value << ", "; + counter++; + } + str << "};"; + std::cout << str.str() << std::endl; +} + +void generate(uint32_t const nbins, float const* initValues, std::vector& values) { + // preset the first range + for (uint32_t adc = 0; adc < nbins; adc++) + values[adc] = initValues[adc]; + + // do the rest + int scale = 1; + for (uint32_t range = 1; range < 4; range++) { + int factor = nbins == 32 ? 5 : 8; + scale *= factor; + + auto const index_offset = range * nbins; + uint32_t const overlap = nbins == 32 ? 2 : 3; + values[index_offset] = values[index_offset - overlap]; + + for (uint32_t i = 1; i < nbins; i++) + values[index_offset + i] = values[index_offset + i - 1] + scale * (values[i] - values[i - 1]); + } + + values[nbins * 4] = 2 * values[nbins * 4 - 1] - values[nbins * 4 - 2]; +} + +int main(int argc, char* argv[]) { + // + // run 128 bins + // + std::vector valuesqie8(nbins_qie8 * 4 + 1), valuesqie11(nbins_qie11 * 4 + 1); + generate(nbins_qie8, binMin, valuesqie8); + generate(nbins_qie11, binMin2, valuesqie11); + + dump(valuesqie8, std::string{"qie8shape"}); + dump(valuesqie11, std::string{"qie11shape"}); + + return 0; +} diff --git a/RecoLocalCalo/HcalRecAlgos/interface/HcalMahiPulseOffsetsGPU.h b/RecoLocalCalo/HcalRecAlgos/interface/HcalMahiPulseOffsetsGPU.h new file mode 100644 index 0000000000000..98ce9c0b660f1 --- /dev/null +++ b/RecoLocalCalo/HcalRecAlgos/interface/HcalMahiPulseOffsetsGPU.h @@ -0,0 +1,37 @@ +#ifndef RecoLocalCalo_HcalRecAlgos_interface_HcalMahiPulseOffsetsGPU_h +#define RecoLocalCalo_HcalRecAlgos_interface_HcalMahiPulseOffsetsGPU_h + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalMahiPulseOffsetsGPU { +public: + struct Product { + ~Product(); + int* values; + }; + +#ifndef __CUDACC__ + // rearrange reco params + HcalMahiPulseOffsetsGPU(edm::ParameterSet const&); + + // will trigger deallocation of Product thru ~Product + ~HcalMahiPulseOffsetsGPU() = default; + + std::vector> const& getValues() const { return values_; } + + // get device pointers + Product const& getProduct(cudaStream_t) const; + +private: + std::vector> values_; + + cms::cuda::ESProduct product_; +#endif +}; + +#endif diff --git a/RecoLocalCalo/HcalRecAlgos/interface/HcalRecoParamsWithPulseShapesGPU.h b/RecoLocalCalo/HcalRecAlgos/interface/HcalRecoParamsWithPulseShapesGPU.h new file mode 100644 index 0000000000000..965fb873bcf88 --- /dev/null +++ b/RecoLocalCalo/HcalRecAlgos/interface/HcalRecoParamsWithPulseShapesGPU.h @@ -0,0 +1,54 @@ +#ifndef RecoLocalCalo_HcalRecAlgos_interface_HcalRecoParamsWithPulseShapesGPU_h +#define RecoLocalCalo_HcalRecAlgos_interface_HcalRecoParamsWithPulseShapesGPU_h + +#ifndef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#endif + +class HcalRecoParams; + +// +// TODO: HcalPulseShapes will need to be used via ESSource +// This is a workaround: precompute/store/transfer what's needed only +// +class HcalRecoParamsWithPulseShapesGPU { +public: + struct Product { + ~Product(); + uint32_t *param1 = nullptr, *param2 = nullptr; + uint32_t *ids = nullptr; + + // These guys come directly from PulseShapeFunctor class + float *acc25nsVec = nullptr, *diff25nsItvlVec = nullptr, *accVarLenIdxMinusOneVec = nullptr, + *diffVarItvlIdxMinusOneVec = nullptr, *accVarLenIdxZEROVec = nullptr, *diffVarItvlIdxZEROVec = nullptr; + }; + +#ifndef __CUDACC__ + // rearrange reco params + HcalRecoParamsWithPulseShapesGPU(HcalRecoParams const &); + + // will trigger deallocation of Product thru ~Product + ~HcalRecoParamsWithPulseShapesGPU() = default; + + // get device pointers + Product const &getProduct(cudaStream_t) const; + +private: + uint64_t totalChannels_; // hb + he + std::vector> param1_; + std::vector> param2_; + std::vector> ids_; + + std::vector> acc25nsVec_; // 256 + std::vector> diff25nsItvlVec_; // 256 + std::vector> accVarLenIdxMinusOneVec_; // 25 + std::vector> diffVarItvlIdxMinusOneVec_; // 25 + std::vector> accVarLenIdxZEROVec_; // 25 + std::vector> diffVarItvlIdxZEROVec_; // 25 + + cms::cuda::ESProduct product_; +#endif +}; + +#endif diff --git a/RecoLocalCalo/HcalRecAlgos/python/hcalRecAlgoESProd_cfi.py b/RecoLocalCalo/HcalRecAlgos/python/hcalRecAlgoESProd_cfi.py index 37ea0dda0dfdc..2ebc3d7786f50 100644 --- a/RecoLocalCalo/HcalRecAlgos/python/hcalRecAlgoESProd_cfi.py +++ b/RecoLocalCalo/HcalRecAlgos/python/hcalRecAlgoESProd_cfi.py @@ -31,24 +31,21 @@ run2_HCAL_2017.toModify(hcalRecAlgos, phase = 1, SeverityLevels = { - 2 : dict( RecHitFlags = cms.vstring('HBHEIsolatedNoise', - 'HFAnomalousHit' - ) + 2 : dict( RecHitFlags = ['HBHEIsolatedNoise', + 'HFAnomalousHit'] ), - 3 : dict( RecHitFlags = cms.vstring('HBHEHpdHitMultiplicity', - 'HBHEFlatNoise', - 'HBHESpikeNoise', - 'HBHETS4TS5Noise', - 'HBHENegativeNoise', - 'HBHEOOTPU' - ) + 3 : dict( RecHitFlags = ['HBHEHpdHitMultiplicity', + 'HBHEFlatNoise', + 'HBHESpikeNoise', + 'HBHETS4TS5Noise', + 'HBHENegativeNoise', + 'HBHEOOTPU'] ), - 4 : dict( RecHitFlags = cms.vstring('HFLongShort', - 'HFS8S1Ratio', - 'HFPET', - 'HFSignalAsymmetry' - ) + 4 : dict( RecHitFlags = ['HFLongShort', + 'HFS8S1Ratio', + 'HFPET', + 'HFSignalAsymmetry'] ), }, - RecoveredRecHitBits = cms.vstring('') + RecoveredRecHitBits = [''] ) diff --git a/RecoLocalCalo/HcalRecAlgos/src/HcalMahiPulseOffsetsGPU.cc b/RecoLocalCalo/HcalRecAlgos/src/HcalMahiPulseOffsetsGPU.cc new file mode 100644 index 0000000000000..005a77932f6df --- /dev/null +++ b/RecoLocalCalo/HcalRecAlgos/src/HcalMahiPulseOffsetsGPU.cc @@ -0,0 +1,35 @@ +#include "RecoLocalCalo/HcalRecAlgos/interface/HcalMahiPulseOffsetsGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +// FIXME: add proper getters to conditions +HcalMahiPulseOffsetsGPU::HcalMahiPulseOffsetsGPU(edm::ParameterSet const& ps) { + auto const& values = ps.getParameter>("pulseOffsets"); + values_.resize(values.size()); + std::copy(values.begin(), values.end(), values_.begin()); +} + +HcalMahiPulseOffsetsGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(values)); +} + +HcalMahiPulseOffsetsGPU::Product const& HcalMahiPulseOffsetsGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](HcalMahiPulseOffsetsGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck(cudaMalloc((void**)&product.values, this->values_.size() * sizeof(int))); + + // transfer + cudaCheck(cudaMemcpyAsync(product.values, + this->values_.data(), + this->values_.size() * sizeof(int), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalMahiPulseOffsetsGPU); diff --git a/RecoLocalCalo/HcalRecAlgos/src/HcalRecoParamsWithPulseShapesGPU.cc b/RecoLocalCalo/HcalRecAlgos/src/HcalRecoParamsWithPulseShapesGPU.cc new file mode 100644 index 0000000000000..b42621b98908e --- /dev/null +++ b/RecoLocalCalo/HcalRecAlgos/src/HcalRecoParamsWithPulseShapesGPU.cc @@ -0,0 +1,222 @@ +#include "RecoLocalCalo/HcalRecAlgos/interface/HcalRecoParamsWithPulseShapesGPU.h" + +#include "CondFormats/HcalObjects/interface/HcalRecoParams.h" +#include "CalibCalorimetry/HcalAlgos/interface/HcalPulseShapes.h" +#include "RecoLocalCalo/HcalRecAlgos/interface/PulseShapeFunctor.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +#include + +// FIXME: add proper getters to conditions +HcalRecoParamsWithPulseShapesGPU::HcalRecoParamsWithPulseShapesGPU(HcalRecoParams const& recoParams) + : totalChannels_{recoParams.getAllContainers()[0].second.size() + recoParams.getAllContainers()[1].second.size()}, + param1_(totalChannels_), + param2_(totalChannels_), + ids_(totalChannels_) { +#ifdef HCAL_MAHI_CPUDEBUG + printf("hello from a reco params with pulse shapes\n"); +#endif + + auto const containers = recoParams.getAllContainers(); + + HcalPulseShapes pulseShapes; + std::unordered_map idCache; + + // fill in eb + auto const& barrelValues = containers[0].second; + for (uint64_t i = 0; i < barrelValues.size(); ++i) { + param1_[i] = barrelValues[i].param1(); + param2_[i] = barrelValues[i].param2(); + + auto const pulseShapeId = barrelValues[i].pulseShapeID(); + // FIXME: 0 throws upon look up to HcalPulseShapes + // although comments state that 0 is reserved, + // HcalPulseShapes::getShape throws on 0! + if (pulseShapeId == 0) { + ids_[i] = 0; + continue; + } + if (auto const iter = idCache.find(pulseShapeId); iter == idCache.end()) { + // new guy + auto const newId = idCache.size(); + idCache[pulseShapeId] = newId; + // this will be the id + ids_[i] = newId; + + // resize value arrays + acc25nsVec_.resize(acc25nsVec_.size() + hcal::constants::maxPSshapeBin); + diff25nsItvlVec_.resize(diff25nsItvlVec_.size() + hcal::constants::maxPSshapeBin); + accVarLenIdxMinusOneVec_.resize(accVarLenIdxMinusOneVec_.size() + hcal::constants::nsPerBX); + diffVarItvlIdxMinusOneVec_.resize(diffVarItvlIdxMinusOneVec_.size() + hcal::constants::nsPerBX); + accVarLenIdxZEROVec_.resize(accVarLenIdxZEROVec_.size() + hcal::constants::nsPerBX); + diffVarItvlIdxZEROVec_.resize(diffVarItvlIdxZEROVec_.size() + hcal::constants::nsPerBX); + + // precompute and get values from the functor + auto const& pulseShape = pulseShapes.getShape(pulseShapeId); + FitterFuncs::PulseShapeFunctor functor{pulseShape, false, false, false, 1, 0, 0, hcal::constants::maxSamples}; + auto const offset256 = newId * hcal::constants::maxPSshapeBin; + auto const offset25 = newId * hcal::constants::nsPerBX; + auto const numShapes = newId; + for (int i = 0; i < hcal::constants::maxPSshapeBin; i++) { + acc25nsVec_[offset256 * numShapes + i] = functor.acc25nsVec()[i]; + diff25nsItvlVec_[offset256 * numShapes + i] = functor.diff25nsItvlVec()[i]; + } + + for (int i = 0; i < hcal::constants::nsPerBX; i++) { + accVarLenIdxMinusOneVec_[offset25 * numShapes + i] = functor.accVarLenIdxMinusOneVec()[i]; + diffVarItvlIdxMinusOneVec_[offset25 * numShapes + i] = functor.diffVarItvlIdxMinusOneVec()[i]; + accVarLenIdxZEROVec_[offset25 * numShapes + i] = functor.accVarLenIdxZEROVec()[i]; + diffVarItvlIdxZEROVec_[offset25 * numShapes + i] = functor.diffVarItvlIdxZEROVec()[i]; + } + } else { + // already recorded this pulse shape, just set id + ids_[i] = iter->second; + } +#ifdef HCAL_MAHI_CPUDEBUG + if (barrelValues[i].rawId() == DETID_TO_DEBUG) { + printf("recoShapeId = %u myid = %u\n", pulseShapeId, ids_[i]); + } +#endif + } + + // fill in ee + auto const& endcapValues = containers[1].second; + auto const offset = barrelValues.size(); + for (uint64_t i = 0; i < endcapValues.size(); ++i) { + param1_[i + offset] = endcapValues[i].param1(); + param2_[i + offset] = endcapValues[i].param2(); + + auto const pulseShapeId = endcapValues[i].pulseShapeID(); + // FIXME: 0 throws upon look up to HcalPulseShapes + // although comments state that 0 is reserved, + // HcalPulseShapes::getShape throws on 0! + if (pulseShapeId == 0) { + ids_[i + offset] = 0; + continue; + } + if (auto const iter = idCache.find(pulseShapeId); iter == idCache.end()) { + // new guy + auto const newId = idCache.size(); + idCache[pulseShapeId] = newId; + // this will be the id + ids_[i + offset] = newId; + + // resize value arrays + acc25nsVec_.resize(acc25nsVec_.size() + hcal::constants::maxPSshapeBin); + diff25nsItvlVec_.resize(diff25nsItvlVec_.size() + hcal::constants::maxPSshapeBin); + accVarLenIdxMinusOneVec_.resize(accVarLenIdxMinusOneVec_.size() + hcal::constants::nsPerBX); + diffVarItvlIdxMinusOneVec_.resize(diffVarItvlIdxMinusOneVec_.size() + hcal::constants::nsPerBX); + accVarLenIdxZEROVec_.resize(accVarLenIdxZEROVec_.size() + hcal::constants::nsPerBX); + diffVarItvlIdxZEROVec_.resize(diffVarItvlIdxZEROVec_.size() + hcal::constants::nsPerBX); + + // precompute and get values from the functor + auto const& pulseShape = pulseShapes.getShape(pulseShapeId); + FitterFuncs::PulseShapeFunctor functor{pulseShape, false, false, false, 1, 0, 0, hcal::constants::maxSamples}; + auto const offset256 = newId * hcal::constants::maxPSshapeBin; + auto const offset25 = newId * hcal::constants::nsPerBX; + auto const numShapes = newId; + for (int i = 0; i < hcal::constants::maxPSshapeBin; i++) { + acc25nsVec_[offset256 * numShapes + i] = functor.acc25nsVec()[i]; + diff25nsItvlVec_[offset256 * numShapes + i] = functor.diff25nsItvlVec()[i]; + } + + for (int i = 0; i < hcal::constants::nsPerBX; i++) { + accVarLenIdxMinusOneVec_[offset25 * numShapes + i] = functor.accVarLenIdxMinusOneVec()[i]; + diffVarItvlIdxMinusOneVec_[offset25 * numShapes + i] = functor.diffVarItvlIdxMinusOneVec()[i]; + accVarLenIdxZEROVec_[offset25 * numShapes + i] = functor.accVarLenIdxZEROVec()[i]; + diffVarItvlIdxZEROVec_[offset25 * numShapes + i] = functor.diffVarItvlIdxZEROVec()[i]; + } + } else { + // already recorded this pulse shape, just set id + ids_[i + offset] = iter->second; + } + } + +#ifdef HCAL_MAHI_CPUDEBUG + for (auto const& p : idCache) + printf("recoPulseShapeId = %u id = %u\n", p.first, p.second); +#endif +} + +HcalRecoParamsWithPulseShapesGPU::Product::~Product() { + // deallocation + cudaCheck(cudaFree(param1)); + cudaCheck(cudaFree(param2)); + cudaCheck(cudaFree(ids)); + cudaCheck(cudaFree(acc25nsVec)); + cudaCheck(cudaFree(diff25nsItvlVec)); + cudaCheck(cudaFree(accVarLenIdxMinusOneVec)); + cudaCheck(cudaFree(diffVarItvlIdxMinusOneVec)); + cudaCheck(cudaFree(accVarLenIdxZEROVec)); + cudaCheck(cudaFree(diffVarItvlIdxZEROVec)); +} + +HcalRecoParamsWithPulseShapesGPU::Product const& HcalRecoParamsWithPulseShapesGPU::getProduct( + cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](HcalRecoParamsWithPulseShapesGPU::Product& product, cudaStream_t cudaStream) { + // malloc + cudaCheck(cudaMalloc((void**)&product.param1, this->param1_.size() * sizeof(uint32_t))); + cudaCheck(cudaMalloc((void**)&product.param2, this->param2_.size() * sizeof(uint32_t))); + cudaCheck(cudaMalloc((void**)&product.ids, this->ids_.size() * sizeof(uint32_t))); + cudaCheck(cudaMalloc((void**)&product.acc25nsVec, this->acc25nsVec_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.diff25nsItvlVec, this->diff25nsItvlVec_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.accVarLenIdxMinusOneVec, + this->accVarLenIdxMinusOneVec_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.diffVarItvlIdxMinusOneVec, + this->diffVarItvlIdxMinusOneVec_.size() * sizeof(float))); + cudaCheck(cudaMalloc((void**)&product.accVarLenIdxZEROVec, this->accVarLenIdxZEROVec_.size() * sizeof(float))); + cudaCheck( + cudaMalloc((void**)&product.diffVarItvlIdxZEROVec, this->diffVarItvlIdxZEROVec_.size() * sizeof(float))); + + // transfer + cudaCheck(cudaMemcpyAsync(product.param1, + this->param1_.data(), + this->param1_.size() * sizeof(uint32_t), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.param2, + this->param2_.data(), + this->param2_.size() * sizeof(uint32_t), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync( + product.ids, this->ids_.data(), this->ids_.size() * sizeof(uint32_t), cudaMemcpyHostToDevice, cudaStream)); + cudaCheck(cudaMemcpyAsync(product.acc25nsVec, + this->acc25nsVec_.data(), + this->acc25nsVec_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.diff25nsItvlVec, + this->diff25nsItvlVec_.data(), + this->diff25nsItvlVec_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.accVarLenIdxMinusOneVec, + this->accVarLenIdxMinusOneVec_.data(), + this->accVarLenIdxMinusOneVec_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.diffVarItvlIdxMinusOneVec, + this->diffVarItvlIdxMinusOneVec_.data(), + this->diffVarItvlIdxMinusOneVec_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.accVarLenIdxZEROVec, + this->accVarLenIdxZEROVec_.data(), + this->accVarLenIdxZEROVec_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + cudaCheck(cudaMemcpyAsync(product.diffVarItvlIdxZEROVec, + this->diffVarItvlIdxZEROVec_.data(), + this->diffVarItvlIdxZEROVec_.size() * sizeof(float), + cudaMemcpyHostToDevice, + cudaStream)); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(HcalRecoParamsWithPulseShapesGPU); diff --git a/RecoLocalCalo/HcalRecAlgos/src/HybridMinimizer.cc b/RecoLocalCalo/HcalRecAlgos/src/HybridMinimizer.cc index b7b82451e74ba..ce3bd9804a908 100644 --- a/RecoLocalCalo/HcalRecAlgos/src/HybridMinimizer.cc +++ b/RecoLocalCalo/HcalRecAlgos/src/HybridMinimizer.cc @@ -14,6 +14,7 @@ // Implementation file for class HybridMinimizer #include "RecoLocalCalo/HcalRecAlgos/src/HybridMinimizer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Math/IFunction.h" #include "Math/IOptions.h" @@ -168,17 +169,15 @@ namespace PSFitter { // std::cout << " add parameter " << name << " " << val << " step " << step << std::endl; if (step <= 0) { - std::string txtmsg = "Parameter " + name + " has zero or invalid step size - consider it as constant "; - MN_INFO_MSG2("HybridMinimizer::SetVariable", txtmsg); + edm::LogInfo("HybridMinimizer::SetVariable") + .format("Parameter {} has zero or invalid step size - consider it as constant", name); fState.Add(name, val); } else fState.Add(name, val, step); unsigned int minuit2Index = fState.Index(name); if (minuit2Index != ivar) { - std::string txtmsg("Wrong index used for the variable " + name); - MN_INFO_MSG2("HybridMinimizer::SetVariable", txtmsg); - MN_INFO_VAL2("HybridMinimizer::SetVariable", minuit2Index); + edm::LogInfo("HybridMinimizer::SetVariable").format("Wrong index used for the variable {} {}", name, minuit2Index); return false; } fState.RemoveLimits(ivar); @@ -267,7 +266,7 @@ namespace PSFitter { // for Fumili the fit method function interface is required const ROOT::Math::FitMethodFunction *fcnfunc = dynamic_cast(&func); if (!fcnfunc) { - MN_ERROR_MSG("HybridMinimizer: Wrong Fit method function for Fumili"); + edm::LogError("HybridMinimizer::SetFunction") << "HybridMinimizer: Wrong Fit method function for Fumili"; return; } fMinuitFCN = new ROOT::Minuit2::FumiliFCNAdapter(*fcnfunc, fDim, ErrorDef()); @@ -285,7 +284,7 @@ namespace PSFitter { // for Fumili the fit method function interface is required const ROOT::Math::FitMethodGradFunction *fcnfunc = dynamic_cast(&func); if (!fcnfunc) { - MN_ERROR_MSG("HybridMinimizer: Wrong Fit method function for Fumili"); + edm::LogError("HybridMinimizer::SetFunction") << "HybridMinimizer: Wrong Fit method function for Fumili"; return; } fMinuitFCN = new ROOT::Minuit2::FumiliFCNAdapter(*fcnfunc, fDim, ErrorDef()); @@ -296,7 +295,7 @@ namespace PSFitter { // perform the minimization // store a copy of FunctionMinimum if (!fMinuitFCN) { - MN_ERROR_MSG2("HybridMinimizer::Minimize", "FCN function has not been set"); + edm::LogError("HybridMinimizer::Minimize") << "FCN function has not been set"; return false; } @@ -327,7 +326,7 @@ namespace PSFitter { */ // internal minuit messages - MnPrint::SetLevel(PrintLevel()); + //MnPrint::SetLevel(PrintLevel()); // MnPrint::SetLevel is not a static method anymore. Using it requires an object to exist // switch off Minuit2 printing int prev_level = (PrintLevel() <= 0) ? TurnOffPrintInfoLevel() : -2; @@ -450,7 +449,7 @@ namespace PSFitter { if (validMinimum) { // print a warning message in case something is not ok if (fStatus != 0 && debugLevel > 0) - MN_INFO_MSG2("HybridMinimizer::Minimize", txt); + edm::LogInfo("HybridMinimizer::Minimize") << txt; } else { // minimum is not valid when state is not valid and edm is over max or has passed call limits if (fStatus == 0) { @@ -458,8 +457,7 @@ namespace PSFitter { txt = "unknown failure"; fStatus = 5; } - std::string msg = "Minimization did NOT converge, " + txt; - MN_INFO_MSG2("HybridMinimizer::Minimize", msg); + edm::LogInfo("HybridMinimizer::Minimize").format("Minimization did NOT converge, {}", txt); } if (debugLevel >= 1) @@ -666,7 +664,7 @@ namespace PSFitter { int debugLevel = PrintLevel(); // internal minuit messages - MnPrint::SetLevel(debugLevel); + //MnPrint::SetLevel(debugLevel); // to run minos I need function minimum class // redo minimization from current state @@ -674,12 +672,12 @@ namespace PSFitter { // GetMinimizer()->Minimize(*GetFCN(),fState, ROOT::Minuit2::MnStrategy(strategy), MaxFunctionCalls(), Tolerance()); // fState = min.UserState(); if (fMinimum == nullptr) { - MN_ERROR_MSG("HybridMinimizer::GetMinosErrors: failed - no function minimum existing"); + edm::LogError("HybridMinimizer::GetMinosErrors") << " failed - no function minimum existing"; return false; } if (!fMinimum->IsValid()) { - MN_ERROR_MSG("HybridMinimizer::MINOS failed due to invalid function minimum"); + edm::LogError("HybridMinimizer::MINOS") << " failed due to invalid function minimum"; return false; } @@ -807,19 +805,19 @@ namespace PSFitter { // if the errors are also zero then scan from min and max of parameter range if (!fMinuitFCN) { - MN_ERROR_MSG2("HybridMinimizer::Scan", " Function must be set before using Scan"); + edm::LogError("HybridMinimizer::Scan") << " Function must be set before using Scan"; return false; } if (ipar > fState.MinuitParameters().size()) { - MN_ERROR_MSG2("HybridMinimizer::Scan", " Invalid number. Minimizer variables must be set before using Scan"); + edm::LogError("HybridMinimizer::Scan") << " Invalid number. Minimizer variables must be set before using Scan"; return false; } // switch off Minuit2 printing int prev_level = (PrintLevel() <= 0) ? TurnOffPrintInfoLevel() : -2; - MnPrint::SetLevel(PrintLevel()); + //MnPrint::SetLevel(PrintLevel()); // set the precision if needed if (Precision() > 0) @@ -835,7 +833,7 @@ namespace PSFitter { RestoreGlobalPrintLevel(prev_level); if (result.size() != nstep) { - MN_ERROR_MSG2("HybridMinimizer::Scan", " Invalid result from MnParameterScan"); + edm::LogError("HybridMinimizer::Scan") << " Invalid result from MnParameterScan"; return false; } // sort also the returned points in x @@ -850,7 +848,7 @@ namespace PSFitter { // use that as new minimum if (scan.Fval() < amin) { if (PrintLevel() > 0) - MN_INFO_MSG2("HybridMinimizer::Scan", "A new minimum has been found"); + edm::LogInfo("HybridMinimizer::Scan") << "A new minimum has been found"; fState.SetValue(ipar, scan.Parameters().Value(ipar)); } @@ -861,12 +859,12 @@ namespace PSFitter { // contour plot for parameter i and j // need a valid FunctionMinimum otherwise exits if (fMinimum == nullptr) { - MN_ERROR_MSG2("HybridMinimizer::Contour", " no function minimum existing. Must minimize function before"); + edm::LogError("HybridMinimizer::Contour") << " no function minimum existing. Must minimize function before"; return false; } if (!fMinimum->IsValid()) { - MN_ERROR_MSG2("HybridMinimizer::Contour", "Invalid function minimum"); + edm::LogError("HybridMinimizer::Contour") << "Invalid function minimum"; return false; } assert(fMinuitFCN); @@ -879,7 +877,7 @@ namespace PSFitter { // switch off Minuit2 printing (for level of 0,1) int prev_level = (PrintLevel() <= 1) ? TurnOffPrintInfoLevel() : -2; - MnPrint::SetLevel(PrintLevel()); + //MnPrint::SetLevel(PrintLevel()); // set the precision if needed if (Precision() > 0) @@ -893,7 +891,7 @@ namespace PSFitter { std::vector > result = contour(ipar, jpar, npoints); if (result.size() != npoints) { - MN_ERROR_MSG2("HybridMinimizer::Contour", " Invalid result from MnContours"); + edm::LogError("HybridMinimizer::Contour") << " Invalid result from MnContours"; return false; } for (unsigned int i = 0; i < npoints; ++i) { @@ -911,7 +909,7 @@ namespace PSFitter { // appended in the function minimum if (!fMinuitFCN) { - MN_ERROR_MSG2("HybridMinimizer::Hesse", "FCN function has not been set"); + edm::LogError("HybridMinimizer::Hesse") << "FCN function has not been set"; return false; } @@ -921,7 +919,7 @@ namespace PSFitter { // switch off Minuit2 printing int prev_level = (PrintLevel() <= 0) ? TurnOffPrintInfoLevel() : -2; - MnPrint::SetLevel(PrintLevel()); + //MnPrint::SetLevel(PrintLevel()); // set the precision if needed if (Precision() > 0) @@ -953,7 +951,7 @@ namespace PSFitter { if (!fState.HasCovariance()) { // if false means error is not valid and this is due to a failure in Hesse if (PrintLevel() > 0) - MN_INFO_MSG2("HybridMinimizer::Hesse", "Hesse failed "); + edm::LogInfo("HybridMinimizer::Hesse") << "Hesse failed "; // update minimizer error status int hstatus = 4; // information on error state can be retrieved only if fMinimum is available diff --git a/RecoLocalCalo/HcalRecAlgos/src/MahiFit.cc b/RecoLocalCalo/HcalRecAlgos/src/MahiFit.cc index 518feb42908d9..06578070c340b 100644 --- a/RecoLocalCalo/HcalRecAlgos/src/MahiFit.cc +++ b/RecoLocalCalo/HcalRecAlgos/src/MahiFit.cc @@ -85,14 +85,18 @@ void MahiFit::phase1Apply(const HBHEChannelInfo& channelData, useTriple = false; if (tstrig > ts4Thresh_ && tsTOT > 0) { - //Average pedestal width (for covariance matrix constraint) - nnlsWork_.pedVal = 0.25f * (channelData.tsPedestalWidth(0) * channelData.tsPedestalWidth(0) + - channelData.tsPedestalWidth(1) * channelData.tsPedestalWidth(1) + - channelData.tsPedestalWidth(2) * channelData.tsPedestalWidth(2) + - channelData.tsPedestalWidth(3) * channelData.tsPedestalWidth(3)); - nnlsWork_.noisecorr = channelData.noisecorr(); + if (nnlsWork_.noisecorr != 0) { + nnlsWork_.pedVal = 0.f; + } else { + //Average pedestal width (for covariance matrix constraint) + nnlsWork_.pedVal = 0.25f * (channelData.tsPedestalWidth(0) * channelData.tsPedestalWidth(0) + + channelData.tsPedestalWidth(1) * channelData.tsPedestalWidth(1) + + channelData.tsPedestalWidth(2) * channelData.tsPedestalWidth(2) + + channelData.tsPedestalWidth(3) * channelData.tsPedestalWidth(3)); + } + // only do pre-fit with 1 pulse if chiSq threshold is positive if (chiSqSwitch_ > 0) { doFit(reconstructedVals, 1); diff --git a/RecoLocalCalo/HcalRecAlgos/test/hcalsevlvlanalyzer_cfg.py b/RecoLocalCalo/HcalRecAlgos/test/hcalsevlvlanalyzer_cfg.py index cd688123c9c08..aaa812e7e005f 100644 --- a/RecoLocalCalo/HcalRecAlgos/test/hcalsevlvlanalyzer_cfg.py +++ b/RecoLocalCalo/HcalRecAlgos/test/hcalsevlvlanalyzer_cfg.py @@ -4,8 +4,14 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring("cout"), - cout = cms.untracked.PSet(threshold = cms.untracked.string("INFO"))) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ) +) process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) ) diff --git a/RecoLocalCalo/HcalRecProducers/BuildFile.xml b/RecoLocalCalo/HcalRecProducers/BuildFile.xml index c3ae589a0c0a7..3907af6817621 100644 --- a/RecoLocalCalo/HcalRecProducers/BuildFile.xml +++ b/RecoLocalCalo/HcalRecProducers/BuildFile.xml @@ -1,8 +1,21 @@ - + + + + - - + + + + + + + + - + + + + + diff --git a/RecoLocalCalo/HcalRecProducers/bin/BuildFile.xml b/RecoLocalCalo/HcalRecProducers/bin/BuildFile.xml new file mode 100644 index 0000000000000..2b1079ddb6874 --- /dev/null +++ b/RecoLocalCalo/HcalRecProducers/bin/BuildFile.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/RecoLocalCalo/HcalRecProducers/bin/makeHcalRecHitGpuValidationPlots.cpp b/RecoLocalCalo/HcalRecProducers/bin/makeHcalRecHitGpuValidationPlots.cpp new file mode 100644 index 0000000000000..fe6aabf928aca --- /dev/null +++ b/RecoLocalCalo/HcalRecProducers/bin/makeHcalRecHitGpuValidationPlots.cpp @@ -0,0 +1,282 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" +//#include "CUDADataFormats/HcalRecHitSoA/interface/RecHitCollection.h" + +#define CREATE_HIST_1D(varname, nbins, first, last) auto varname = new TH1D(#varname, #varname, nbins, first, last) + +#define CREATE_HIST_2D(varname, nbins, first, last) \ + auto varname = new TH2D(#varname, #varname, nbins, first, last, nbins, first, last) + +int main(int argc, char* argv[]) { + if (argc < 3) { + std::cout << "run with: ./ \n"; + exit(0); + } + + std::string inFileName{argv[1]}; + std::string outFileName{argv[2]}; + + // branches to use + edm::Wrapper* wcpu = nullptr; + edm::Wrapper* wgpu = nullptr; + // edm::Wrapper>> *wgpu=nullptr; + + // prep output + TFile rfout{outFileName.c_str(), "recreate"}; + + CREATE_HIST_1D(hEnergyM0HBGPU, 1000, 0, 100); + CREATE_HIST_1D(hEnergyM0HEGPU, 1000, 0, 100); + CREATE_HIST_1D(hEnergyM0HBCPU, 1000, 0, 100); + CREATE_HIST_1D(hEnergyM0HECPU, 1000, 0, 100); + + CREATE_HIST_1D(hEnergyHBGPU, 1000, 0, 100); + CREATE_HIST_1D(hEnergyHBCPU, 1000, 0, 100); + CREATE_HIST_1D(hEnergyHEGPU, 1000, 0, 100); + CREATE_HIST_1D(hEnergyHECPU, 1000, 0, 100); + + CREATE_HIST_1D(hChi2HBGPU, 1000, 0, 100); + CREATE_HIST_1D(hChi2HBCPU, 1000, 0, 100); + CREATE_HIST_1D(hChi2HEGPU, 1000, 0, 100); + CREATE_HIST_1D(hChi2HECPU, 1000, 0, 100); + + CREATE_HIST_2D(hEnergyHBGPUvsCPU, 1000, 0, 100); + CREATE_HIST_2D(hEnergyHEGPUvsCPU, 1000, 0, 100); + CREATE_HIST_2D(hChi2HBGPUvsCPU, 1000, 0, 100); + CREATE_HIST_2D(hChi2HEGPUvsCPU, 1000, 0, 100); + + CREATE_HIST_2D(hEnergyM0HBGPUvsCPU, 1000, 0, 100); + CREATE_HIST_2D(hEnergyM0HEGPUvsCPU, 1000, 0, 100); + + // prep input + TFile rfin{inFileName.c_str()}; + TTree* rt = (TTree*)rfin.Get("Events"); + rt->SetBranchAddress("HBHERecHitsSorted_hcalCPURecHitsProducer_recHitsLegacyHBHE_RECO.", &wgpu); + // rt->SetBranchAddress("hcalCUDAHostAllocatorAliashcalcommonVecStoragePolicyhcalRecHitCollection_hcalCPURecHitsProducer_recHitsM0LabelOut_RECO.", &wgpu); + rt->SetBranchAddress("HBHERecHitsSorted_hbheprereco__RECO.", &wcpu); + + // accumulate + auto const nentries = rt->GetEntries(); + std::cout << ">>> nentries = " << nentries << std::endl; + for (int ie = 0; ie < nentries; ++ie) { + rt->GetEntry(ie); + + auto const& gpuProduct = wgpu->bareProduct(); + auto const& cpuProduct = wcpu->bareProduct(); + + auto const ncpu = cpuProduct.size(); + auto const ngpu = gpuProduct.size(); + // auto const ngpu = gpuProduct.energy.size(); + + if (ngpu != ncpu) { + std::cerr << "*** mismatch in number of rec hits for event " << ie << std::endl + << ">>> ngpu = " << ngpu << std::endl + << ">>> ncpu = " << ncpu << std::endl; + } + + for (uint32_t ich = 0; ich < ncpu; ich++) { + auto const& cpurh = cpuProduct[ich]; + auto const& did = cpurh.id(); + auto iter2gpu = gpuProduct.find(did); + // auto iter2idgpu = std::find( + // gpuProduct.did.begin(), gpuProduct.did.end(), did.rawId()); + + if (iter2gpu == gpuProduct.end()) { + std::cerr << "missing " << did << std::endl; + continue; + } + + assert(iter2gpu->id().rawId() == did.rawId()); + + auto const gpu_energy_m0 = iter2gpu->eraw(); + auto const cpu_energy_m0 = cpurh.eraw(); + auto const gpu_energy = iter2gpu->energy(); + auto const cpu_energy = cpurh.energy(); + auto const gpu_chi2 = iter2gpu->chi2(); + auto const cpu_chi2 = cpurh.chi2(); + + if (did.subdetId() == HcalBarrel) { + hEnergyM0HBGPU->Fill(gpu_energy_m0); + hEnergyM0HBCPU->Fill(cpu_energy_m0); + hEnergyM0HBGPUvsCPU->Fill(cpu_energy_m0, gpu_energy_m0); + + hEnergyHBGPU->Fill(gpu_energy); + hEnergyHBCPU->Fill(cpu_energy); + hEnergyHBGPUvsCPU->Fill(cpu_energy, gpu_energy); + hChi2HBGPU->Fill(gpu_chi2); + hChi2HBCPU->Fill(cpu_chi2); + hChi2HBGPUvsCPU->Fill(cpu_chi2, gpu_chi2); + } else if (did.subdetId() == HcalEndcap) { + hEnergyM0HEGPU->Fill(gpu_energy_m0); + hEnergyM0HECPU->Fill(cpu_energy_m0); + hEnergyM0HEGPUvsCPU->Fill(cpu_energy_m0, gpu_energy_m0); + + hEnergyHEGPU->Fill(gpu_energy); + hEnergyHECPU->Fill(cpu_energy); + hEnergyHEGPUvsCPU->Fill(cpu_energy, gpu_energy); + + hChi2HEGPU->Fill(gpu_chi2); + hChi2HECPU->Fill(cpu_chi2); + hChi2HEGPUvsCPU->Fill(cpu_chi2, gpu_chi2); + } + } + } + + { + TCanvas c{"plots", "plots", 4200, 6200}; + c.Divide(4, 3); + c.cd(1); + { + gPad->SetLogy(); + hEnergyM0HBCPU->SetLineColor(kBlack); + hEnergyM0HBCPU->SetLineWidth(1.); + hEnergyM0HBCPU->Draw(""); + hEnergyM0HBGPU->SetLineColor(kBlue); + hEnergyM0HBGPU->SetLineWidth(1.); + hEnergyM0HBGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats*)hEnergyM0HBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + c.cd(2); + { + gPad->SetLogz(); + hEnergyM0HBGPUvsCPU->GetXaxis()->SetTitle("cpu"); + hEnergyM0HBGPUvsCPU->GetYaxis()->SetTitle("gpu"); + hEnergyM0HBGPUvsCPU->Draw("colz"); + } + c.cd(3); + { + gPad->SetLogy(); + hEnergyM0HECPU->SetLineColor(kBlack); + hEnergyM0HECPU->SetLineWidth(1.); + hEnergyM0HECPU->Draw(""); + hEnergyM0HEGPU->SetLineColor(kBlue); + hEnergyM0HEGPU->SetLineWidth(1.); + hEnergyM0HEGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats*)hEnergyM0HEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + c.cd(4); + { + gPad->SetLogz(); + hEnergyM0HEGPUvsCPU->GetXaxis()->SetTitle("cpu"); + hEnergyM0HEGPUvsCPU->GetYaxis()->SetTitle("gpu"); + hEnergyM0HEGPUvsCPU->Draw("colz"); + } + c.cd(5); + { + gPad->SetLogy(); + hEnergyHBCPU->SetLineColor(kBlack); + hEnergyHBCPU->SetLineWidth(1.); + hEnergyHBCPU->Draw(""); + hEnergyHBGPU->SetLineColor(kBlue); + hEnergyHBGPU->SetLineWidth(1.); + hEnergyHBGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats*)hEnergyHBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + c.cd(6); + { + gPad->SetLogz(); + hEnergyHBGPUvsCPU->GetXaxis()->SetTitle("cpu"); + hEnergyHBGPUvsCPU->GetYaxis()->SetTitle("gpu"); + hEnergyHBGPUvsCPU->Draw("colz"); + } + c.cd(7); + { + gPad->SetLogy(); + hEnergyHECPU->SetLineColor(kBlack); + hEnergyHECPU->SetLineWidth(1.); + hEnergyHECPU->Draw(""); + hEnergyHEGPU->SetLineColor(kBlue); + hEnergyHEGPU->SetLineWidth(1.); + hEnergyHEGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats*)hEnergyHEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + c.cd(8); + { + gPad->SetLogz(); + hEnergyHEGPUvsCPU->GetXaxis()->SetTitle("cpu"); + hEnergyHEGPUvsCPU->GetYaxis()->SetTitle("gpu"); + hEnergyHEGPUvsCPU->Draw("colz"); + } + c.cd(9); + { + gPad->SetLogy(); + hChi2HBCPU->SetLineColor(kBlack); + hChi2HBCPU->SetLineWidth(1.); + hChi2HBCPU->Draw(""); + hChi2HBGPU->SetLineColor(kBlue); + hChi2HBGPU->SetLineWidth(1.); + hChi2HBGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats*)hChi2HBGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + c.cd(10); + { + gPad->SetLogz(); + hChi2HBGPUvsCPU->GetXaxis()->SetTitle("cpu"); + hChi2HBGPUvsCPU->GetYaxis()->SetTitle("gpu"); + hChi2HBGPUvsCPU->Draw("colz"); + } + c.cd(11); + { + gPad->SetLogy(); + hChi2HECPU->SetLineColor(kBlack); + hChi2HECPU->SetLineWidth(1.); + hChi2HECPU->Draw(""); + hChi2HEGPU->SetLineColor(kBlue); + hChi2HEGPU->SetLineWidth(1.); + hChi2HEGPU->Draw("sames"); + gPad->Update(); + auto stats = (TPaveStats*)hChi2HEGPU->FindObject("stats"); + auto y2 = stats->GetY2NDC(); + auto y1 = stats->GetY1NDC(); + stats->SetY2NDC(y1); + stats->SetY1NDC(y1 - (y2 - y1)); + } + c.cd(12); + { + gPad->SetLogz(); + hChi2HEGPUvsCPU->GetXaxis()->SetTitle("cpu"); + hChi2HEGPUvsCPU->GetYaxis()->SetTitle("gpu"); + hChi2HEGPUvsCPU->Draw("colz"); + } + c.SaveAs("plots.pdf"); + } + + rfin.Close(); + rfout.Write(); + rfout.Close(); +} diff --git a/RecoLocalCalo/HcalRecProducers/python/HBHEPhase1Reconstructor_cfi.py b/RecoLocalCalo/HcalRecProducers/python/HBHEPhase1Reconstructor_cfi.py index c99f96d5404cf..ac1c398f81518 100644 --- a/RecoLocalCalo/HcalRecProducers/python/HBHEPhase1Reconstructor_cfi.py +++ b/RecoLocalCalo/HcalRecProducers/python/HBHEPhase1Reconstructor_cfi.py @@ -107,7 +107,7 @@ ) # Disable the "triangle peak fit" and the corresponding HBHETriangleNoise flag -hbheprereco.pulseShapeParametersQIE8.TrianglePeakTS = cms.uint32(10000) +hbheprereco.pulseShapeParametersQIE8.TrianglePeakTS = 10000 from Configuration.Eras.Modifier_run2_HE_2017_cff import run2_HE_2017 run2_HE_2017.toModify(hbheprereco, saveEffectivePedestal = True) diff --git a/RecoLocalCalo/HcalRecProducers/python/hbheRecHitProducerGPUTask_cff.py b/RecoLocalCalo/HcalRecProducers/python/hbheRecHitProducerGPUTask_cff.py new file mode 100644 index 0000000000000..d938653d5a15e --- /dev/null +++ b/RecoLocalCalo/HcalRecProducers/python/hbheRecHitProducerGPUTask_cff.py @@ -0,0 +1,65 @@ +import FWCore.ParameterSet.Config as cms + +# Run 3 HCAL workflow on GPU + +# EventSetup modules used by HBHERecHitProducerGPU +from RecoLocalCalo.HcalRecProducers.hcalGainsGPUESProducer_cfi import hcalGainsGPUESProducer +from RecoLocalCalo.HcalRecProducers.hcalGainWidthsGPUESProducer_cfi import hcalGainWidthsGPUESProducer +from RecoLocalCalo.HcalRecProducers.hcalLUTCorrsGPUESProducer_cfi import hcalLUTCorrsGPUESProducer +from RecoLocalCalo.HcalRecProducers.hcalConvertedPedestalsGPUESProducer_cfi import hcalConvertedPedestalsGPUESProducer +from RecoLocalCalo.HcalRecProducers.hcalConvertedEffectivePedestalsGPUESProducer_cfi import hcalConvertedEffectivePedestalsGPUESProducer +hcalConvertedEffectivePedestalsGPUESProducer.label0 = "withTopoEff" + +from RecoLocalCalo.HcalRecProducers.hcalConvertedPedestalWidthsGPUESProducer_cfi import hcalConvertedPedestalWidthsGPUESProducer +from RecoLocalCalo.HcalRecProducers.hcalConvertedEffectivePedestalWidthsGPUESProducer_cfi import hcalConvertedEffectivePedestalWidthsGPUESProducer +hcalConvertedEffectivePedestalWidthsGPUESProducer.label0 = "withTopoEff" +hcalConvertedEffectivePedestalWidthsGPUESProducer.label1 = "withTopoEff" + +from RecoLocalCalo.HcalRecProducers.hcalQIECodersGPUESProducer_cfi import hcalQIECodersGPUESProducer +from RecoLocalCalo.HcalRecProducers.hcalRecoParamsWithPulseShapesGPUESProducer_cfi import hcalRecoParamsWithPulseShapesGPUESProducer +from RecoLocalCalo.HcalRecProducers.hcalRespCorrsGPUESProducer_cfi import hcalRespCorrsGPUESProducer +from RecoLocalCalo.HcalRecProducers.hcalTimeCorrsGPUESProducer_cfi import hcalTimeCorrsGPUESProducer +from RecoLocalCalo.HcalRecProducers.hcalQIETypesGPUESProducer_cfi import hcalQIETypesGPUESProducer +from RecoLocalCalo.HcalRecProducers.hcalSiPMParametersGPUESProducer_cfi import hcalSiPMParametersGPUESProducer +from RecoLocalCalo.HcalRecProducers.hcalSiPMCharacteristicsGPUESProducer_cfi import hcalSiPMCharacteristicsGPUESProducer +from RecoLocalCalo.HcalRecProducers.hcalMahiPulseOffsetsGPUESProducer_cfi import hcalMahiPulseOffsetsGPUESProducer + +# convert the HBHE digis into SoA format, and copy them from CPU to GPU +from EventFilter.HcalRawToDigi.hcalDigisProducerGPU_cfi import hcalDigisProducerGPU as _hcalDigisProducerGPU +hcalDigisGPU = _hcalDigisProducerGPU.clone( + digisLabelF01HE = "", + digisLabelF5HB = "", + digisLabelF3HB = "" +) + +# run the HCAL local reconstruction (MAHI) on GPU +from RecoLocalCalo.HcalRecProducers.hbheRecHitProducerGPU_cfi import hbheRecHitProducerGPU as _hbheRecHitProducerGPU +hbheRecHitProducerGPU = _hbheRecHitProducerGPU.clone( + digisLabelF01HE = "hcalDigisGPU", + digisLabelF5HB = "hcalDigisGPU", + digisLabelF3HB = "hcalDigisGPU", + recHitsLabelM0HBHE = "" +) + +# Tasks and Sequences +hbheRecHitProducerGPUTask = cms.Task( + hcalGainsGPUESProducer, + hcalGainWidthsGPUESProducer, + hcalLUTCorrsGPUESProducer, + hcalConvertedPedestalsGPUESProducer, + hcalConvertedEffectivePedestalsGPUESProducer, + hcalConvertedPedestalWidthsGPUESProducer, + hcalConvertedEffectivePedestalWidthsGPUESProducer, + hcalQIECodersGPUESProducer, + hcalRecoParamsWithPulseShapesGPUESProducer, + hcalRespCorrsGPUESProducer, + hcalTimeCorrsGPUESProducer, + hcalQIETypesGPUESProducer, + hcalSiPMParametersGPUESProducer, + hcalSiPMCharacteristicsGPUESProducer, + hcalMahiPulseOffsetsGPUESProducer, + hcalDigisGPU, + hbheRecHitProducerGPU +) + +hbheRecHitProducerGPUSequence = cms.Sequence(hbheRecHitProducerGPUTask) diff --git a/RecoLocalCalo/HcalRecProducers/src/DeclsForKernels.h b/RecoLocalCalo/HcalRecProducers/src/DeclsForKernels.h new file mode 100644 index 0000000000000..24735f36eab72 --- /dev/null +++ b/RecoLocalCalo/HcalRecProducers/src/DeclsForKernels.h @@ -0,0 +1,116 @@ +#ifndef RecoLocalCalo_HcalRecProducers_src_DeclsForKernels_h +#define RecoLocalCalo_HcalRecProducers_src_DeclsForKernels_h + +#include +#include + +#include "CUDADataFormats/HcalDigi/interface/DigiCollection.h" +#include "CUDADataFormats/HcalRecHitSoA/interface/RecHitCollection.h" +#include "CalibCalorimetry/HcalAlgos/interface/HcalTimeSlew.h" +#include "CondFormats/DataRecord/interface/HcalCombinedRecordsGPU.h" +#include "CondFormats/DataRecord/interface/HcalGainWidthsRcd.h" +#include "CondFormats/DataRecord/interface/HcalGainsRcd.h" +#include "CondFormats/DataRecord/interface/HcalLUTCorrsRcd.h" +#include "CondFormats/DataRecord/interface/HcalQIEDataRcd.h" +#include "CondFormats/DataRecord/interface/HcalQIETypesRcd.h" +#include "CondFormats/DataRecord/interface/HcalRecoParamsRcd.h" +#include "CondFormats/DataRecord/interface/HcalRespCorrsRcd.h" +#include "CondFormats/DataRecord/interface/HcalSiPMCharacteristicsRcd.h" +#include "CondFormats/DataRecord/interface/HcalSiPMParametersRcd.h" +#include "CondFormats/DataRecord/interface/HcalTimeCorrsRcd.h" +#include "CondFormats/HcalObjects/interface/HcalConvertedEffectivePedestalWidthsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalConvertedEffectivePedestalsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalGainWidthsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalGainsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalLUTCorrsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalQIECodersGPU.h" +#include "CondFormats/HcalObjects/interface/HcalQIETypesGPU.h" +#include "CondFormats/HcalObjects/interface/HcalRecoParamsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalRespCorrsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalSiPMCharacteristicsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalSiPMParametersGPU.h" +#include "CondFormats/HcalObjects/interface/HcalTimeCorrsGPU.h" +#include "Geometry/CaloTopology/interface/HcalTopology.h" +#include "Geometry/HcalCommonData/interface/HcalDDDRecConstants.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" +#include "RecoLocalCalo/HcalRecAlgos/interface/HcalMahiPulseOffsetsGPU.h" +#include "RecoLocalCalo/HcalRecAlgos/interface/HcalRecoParamsWithPulseShapesGPU.h" + +namespace hcal { + namespace reconstruction { + + struct ConditionsProducts { + HcalGainWidthsGPU::Product const& gainWidths; + HcalGainsGPU::Product const& gains; + HcalLUTCorrsGPU::Product const& lutCorrs; + HcalConvertedPedestalWidthsGPU::Product const& pedestalWidths; + HcalConvertedEffectivePedestalWidthsGPU::Product const& effectivePedestalWidths; + HcalConvertedPedestalsGPU::Product const& pedestals; + HcalQIECodersGPU::Product const& qieCoders; + HcalRecoParamsWithPulseShapesGPU::Product const& recoParams; + HcalRespCorrsGPU::Product const& respCorrs; + HcalTimeCorrsGPU::Product const& timeCorrs; + HcalQIETypesGPU::Product const& qieTypes; + HcalSiPMParametersGPU::Product const& sipmParameters; + HcalSiPMCharacteristicsGPU::Product const& sipmCharacteristics; + HcalConvertedPedestalsGPU::Product const* convertedEffectivePedestals; + HcalTopology const* topology; + HcalDDDRecConstants const* recConstants; + uint32_t offsetForHashes; + HcalMahiPulseOffsetsGPU::Product const& pulseOffsets; + std::vector> const& pulseOffsetsHost; + }; + + struct ConfigParameters { + uint32_t maxChannels; + uint32_t maxTimeSamples; + uint32_t kprep1dChannelsPerBlock; + int sipmQTSShift; + int sipmQNTStoSum; + int firstSampleShift; + bool useEffectivePedestals; + + float meanTime; + float timeSigmaSiPM, timeSigmaHPD; + float ts4Thresh; + + std::array kernelMinimizeThreads; + + // FIXME: + // - add "getters" to HcalTimeSlew calib formats + // - add ES Producer to consume what is produced above not to replicate. + // which ones to use is hardcoded, therefore no need to send those to the device + bool applyTimeSlew; + float tzeroTimeSlew, slopeTimeSlew, tmaxTimeSlew; + }; + + struct OutputDataGPU { + RecHitCollection<::calo::common::DevStoragePolicy> recHits; + + void allocate(ConfigParameters const& config, cudaStream_t cudaStream) { + recHits.energy = cms::cuda::make_device_unique(config.maxChannels, cudaStream); + recHits.chi2 = cms::cuda::make_device_unique(config.maxChannels, cudaStream); + recHits.energyM0 = cms::cuda::make_device_unique(config.maxChannels, cudaStream); + recHits.timeM0 = cms::cuda::make_device_unique(config.maxChannels, cudaStream); + recHits.did = cms::cuda::make_device_unique(config.maxChannels, cudaStream); + } + }; + + struct ScratchDataGPU { + cms::cuda::device::unique_ptr amplitudes, noiseTerms, electronicNoiseTerms, pulseMatrices, + pulseMatricesM, pulseMatricesP; + cms::cuda::device::unique_ptr soiSamples; + }; + + struct InputDataGPU { + DigiCollection const& f01HEDigis; + DigiCollection const& f5HBDigis; + DigiCollection const& f3HBDigis; + }; + + } // namespace reconstruction +} // namespace hcal + +#endif // RecoLocalCalo_HcalRecProducers_src_DeclsForKernels_h diff --git a/RecoLocalCalo/HcalRecProducers/src/HBHERecHitProducerGPU.cc b/RecoLocalCalo/HcalRecProducers/src/HBHERecHitProducerGPU.cc new file mode 100644 index 0000000000000..d6f0d1a998a64 --- /dev/null +++ b/RecoLocalCalo/HcalRecProducers/src/HBHERecHitProducerGPU.cc @@ -0,0 +1,248 @@ +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HeterogeneousCore/CUDACore/interface/JobConfigurationGPURecord.h" +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDAServices/interface/CUDAService.h" + +#include "SimpleAlgoGPU.h" + +class HBHERecHitProducerGPU : public edm::stream::EDProducer { +public: + explicit HBHERecHitProducerGPU(edm::ParameterSet const&); + ~HBHERecHitProducerGPU() override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + void acquire(edm::Event const&, edm::EventSetup const&, edm::WaitingTaskWithArenaHolder) override; + void produce(edm::Event&, edm::EventSetup const&) override; + + using IProductTypef01 = cms::cuda::Product>; + edm::EDGetTokenT digisTokenF01HE_; + + using IProductTypef5 = cms::cuda::Product>; + edm::EDGetTokenT digisTokenF5HB_; + + using IProductTypef3 = cms::cuda::Product>; + edm::EDGetTokenT digisTokenF3HB_; + + using RecHitType = hcal::RecHitCollection; + using OProductType = cms::cuda::Product; + edm::EDPutTokenT rechitsM0Token_; + + hcal::reconstruction::ConfigParameters configParameters_; + hcal::reconstruction::OutputDataGPU outputGPU_; + cms::cuda::ContextState cudaState_; +}; + +HBHERecHitProducerGPU::HBHERecHitProducerGPU(edm::ParameterSet const& ps) + : digisTokenF01HE_{consumes(ps.getParameter("digisLabelF01HE"))}, + digisTokenF5HB_{consumes(ps.getParameter("digisLabelF5HB"))}, + digisTokenF3HB_{consumes(ps.getParameter("digisLabelF3HB"))}, + rechitsM0Token_{produces(ps.getParameter("recHitsLabelM0HBHE"))} { + configParameters_.maxChannels = ps.getParameter("maxChannels"); + configParameters_.maxTimeSamples = ps.getParameter("maxTimeSamples"); + configParameters_.kprep1dChannelsPerBlock = ps.getParameter("kprep1dChannelsPerBlock"); + configParameters_.sipmQTSShift = ps.getParameter("sipmQTSShift"); + configParameters_.sipmQNTStoSum = ps.getParameter("sipmQNTStoSum"); + configParameters_.firstSampleShift = ps.getParameter("firstSampleShift"); + configParameters_.useEffectivePedestals = ps.getParameter("useEffectivePedestals"); + + configParameters_.meanTime = ps.getParameter("meanTime"); + configParameters_.timeSigmaSiPM = ps.getParameter("timeSigmaSiPM"); + configParameters_.timeSigmaHPD = ps.getParameter("timeSigmaHPD"); + configParameters_.ts4Thresh = ps.getParameter("ts4Thresh"); + + configParameters_.applyTimeSlew = ps.getParameter("applyTimeSlew"); + auto const tzeroValues = ps.getParameter>("tzeroTimeSlewParameters"); + auto const slopeValues = ps.getParameter>("slopeTimeSlewParameters"); + auto const tmaxValues = ps.getParameter>("tmaxTimeSlewParameters"); + + configParameters_.tzeroTimeSlew = tzeroValues[HcalTimeSlew::Medium]; + configParameters_.slopeTimeSlew = slopeValues[HcalTimeSlew::Medium]; + configParameters_.tmaxTimeSlew = tmaxValues[HcalTimeSlew::Medium]; + + auto threadsMinimize = ps.getParameter>("kernelMinimizeThreads"); + configParameters_.kernelMinimizeThreads[0] = threadsMinimize[0]; + configParameters_.kernelMinimizeThreads[1] = threadsMinimize[1]; + configParameters_.kernelMinimizeThreads[2] = threadsMinimize[2]; +} + +HBHERecHitProducerGPU::~HBHERecHitProducerGPU() {} + +void HBHERecHitProducerGPU::fillDescriptions(edm::ConfigurationDescriptions& cdesc) { + edm::ParameterSetDescription desc; + desc.add("maxChannels", 10000u); + desc.add("maxTimeSamples", 10); + desc.add("kprep1dChannelsPerBlock", 32); + desc.add("digisLabelF01HE", edm::InputTag{"hcalRawToDigiGPU", "f01HEDigisGPU"}); + desc.add("digisLabelF5HB", edm::InputTag{"hcalRawToDigiGPU", "f5HBDigisGPU"}); + desc.add("digisLabelF3HB", edm::InputTag{"hcalRawToDigiGPU", "f3HBDigisGPU"}); + desc.add("recHitsLabelM0HBHE", "recHitsM0HBHE"); + desc.add("sipmQTSShift", 0); + desc.add("sipmQNTStoSum", 3); + desc.add("firstSampleShift", 0); + desc.add("useEffectivePedestals", true); + + desc.add("meanTime", 0.f); + desc.add("timeSigmaSiPM", 2.5f); + desc.add("timeSigmaHPD", 5.0f); + desc.add("ts4Thresh", 0.0); + + desc.add("applyTimeSlew", true); + desc.add>("tzeroTimeSlewParameters", {23.960177, 11.977461, 9.109694}); + desc.add>("slopeTimeSlewParameters", {-3.178648, -1.5610227, -1.075824}); + desc.add>("tmaxTimeSlewParameters", {16.00, 10.00, 6.25}); + desc.add>("kernelMinimizeThreads", {16, 1, 1}); + + cdesc.addWithDefaultLabel(desc); +} + +void HBHERecHitProducerGPU::acquire(edm::Event const& event, + edm::EventSetup const& setup, + edm::WaitingTaskWithArenaHolder holder) { +#ifdef HCAL_MAHI_CPUDEBUG + auto start = std::chrono::high_resolution_clock::now(); +#endif + + // input + raii + auto const& f01HEProduct = event.get(digisTokenF01HE_); + auto const& f5HBProduct = event.get(digisTokenF5HB_); + auto const& f3HBProduct = event.get(digisTokenF3HB_); + cms::cuda::ScopedContextAcquire ctx{f01HEProduct, std::move(holder), cudaState_}; + auto const& f01HEDigis = ctx.get(f01HEProduct); + auto const& f5HBDigis = ctx.get(f5HBProduct); + auto const& f3HBDigis = ctx.get(f3HBProduct); + + hcal::reconstruction::InputDataGPU inputGPU{f01HEDigis, f5HBDigis, f3HBDigis}; + + // conditions + edm::ESHandle recoParamsHandle; + setup.get().get(recoParamsHandle); + auto const& recoParamsProduct = recoParamsHandle->getProduct(ctx.stream()); + + edm::ESHandle gainWidthsHandle; + setup.get().get(gainWidthsHandle); + auto const& gainWidthsProduct = gainWidthsHandle->getProduct(ctx.stream()); + + edm::ESHandle gainsHandle; + setup.get().get(gainsHandle); + auto const& gainsProduct = gainsHandle->getProduct(ctx.stream()); + + edm::ESHandle lutCorrsHandle; + setup.get().get(lutCorrsHandle); + auto const& lutCorrsProduct = lutCorrsHandle->getProduct(ctx.stream()); + + // use only 1 depending on useEffectivePedestals + edm::ESHandle pedestalWidthsHandle; + edm::ESHandle effectivePedestalWidthsHandle; + setup.get().get(effectivePedestalWidthsHandle); + setup.get().get(pedestalWidthsHandle); + auto const& pedestalWidthsProduct = pedestalWidthsHandle->getProduct(ctx.stream()); + auto const& effectivePedestalWidthsProduct = effectivePedestalWidthsHandle->getProduct(ctx.stream()); + + edm::ESHandle pedestalsHandle; + setup.get().get(pedestalsHandle); + auto const& pedestalsProduct = pedestalsHandle->getProduct(ctx.stream()); + + edm::ESHandle effectivePedestalsHandle; + if (configParameters_.useEffectivePedestals) + setup.get().get(effectivePedestalsHandle); + auto const* effectivePedestalsProduct = + configParameters_.useEffectivePedestals ? &effectivePedestalsHandle->getProduct(ctx.stream()) : nullptr; + + edm::ESHandle qieCodersHandle; + setup.get().get(qieCodersHandle); + auto const& qieCodersProduct = qieCodersHandle->getProduct(ctx.stream()); + + edm::ESHandle respCorrsHandle; + setup.get().get(respCorrsHandle); + auto const& respCorrsProduct = respCorrsHandle->getProduct(ctx.stream()); + + edm::ESHandle timeCorrsHandle; + setup.get().get(timeCorrsHandle); + auto const& timeCorrsProduct = timeCorrsHandle->getProduct(ctx.stream()); + + edm::ESHandle qieTypesHandle; + setup.get().get(qieTypesHandle); + auto const& qieTypesProduct = qieTypesHandle->getProduct(ctx.stream()); + + edm::ESHandle topologyHandle; + setup.get().get(topologyHandle); + edm::ESHandle recConstantsHandle; + setup.get().get(recConstantsHandle); + + edm::ESHandle sipmParametersHandle; + setup.get().get(sipmParametersHandle); + auto const& sipmParametersProduct = sipmParametersHandle->getProduct(ctx.stream()); + + edm::ESHandle sipmCharacteristicsHandle; + setup.get().get(sipmCharacteristicsHandle); + auto const& sipmCharacteristicsProduct = sipmCharacteristicsHandle->getProduct(ctx.stream()); + + edm::ESHandle pulseOffsetsHandle; + setup.get().get(pulseOffsetsHandle); + auto const& pulseOffsetsProduct = pulseOffsetsHandle->getProduct(ctx.stream()); + + // bundle up conditions + hcal::reconstruction::ConditionsProducts conditions{gainWidthsProduct, + gainsProduct, + lutCorrsProduct, + pedestalWidthsProduct, + effectivePedestalWidthsProduct, + pedestalsProduct, + qieCodersProduct, + recoParamsProduct, + respCorrsProduct, + timeCorrsProduct, + qieTypesProduct, + sipmParametersProduct, + sipmCharacteristicsProduct, + effectivePedestalsProduct, + topologyHandle.product(), + recConstantsHandle.product(), + pedestalsHandle->offsetForHashes(), + pulseOffsetsProduct, + pulseOffsetsHandle->getValues()}; + + // scratch mem on device + hcal::reconstruction::ScratchDataGPU scratchGPU = { + cms::cuda::make_device_unique(configParameters_.maxChannels * configParameters_.maxTimeSamples, + ctx.stream()), + cms::cuda::make_device_unique(configParameters_.maxChannels * configParameters_.maxTimeSamples, + ctx.stream()), + cms::cuda::make_device_unique(configParameters_.maxChannels * configParameters_.maxTimeSamples, + ctx.stream()), + cms::cuda::make_device_unique( + configParameters_.maxChannels * configParameters_.maxTimeSamples * configParameters_.maxTimeSamples, + ctx.stream()), + cms::cuda::make_device_unique( + configParameters_.maxChannels * configParameters_.maxTimeSamples * configParameters_.maxTimeSamples, + ctx.stream()), + cms::cuda::make_device_unique( + configParameters_.maxChannels * configParameters_.maxTimeSamples * configParameters_.maxTimeSamples, + ctx.stream()), + cms::cuda::make_device_unique(configParameters_.maxChannels, ctx.stream()), + }; + + // output dev mem + outputGPU_.allocate(configParameters_, ctx.stream()); + + hcal::reconstruction::entryPoint(inputGPU, outputGPU_, conditions, scratchGPU, configParameters_, ctx.stream()); + +#ifdef HCAL_MAHI_CPUDEBUG + auto end = std::chrono::high_resolution_clock::now(); + auto duration = std::chrono::duration_cast(end - start).count(); + std::cout << "acquire duration = " << duration << std::endl; +#endif +} + +void HBHERecHitProducerGPU::produce(edm::Event& event, edm::EventSetup const& setup) { + cms::cuda::ScopedContextProduce ctx{cudaState_}; + ctx.emplace(event, rechitsM0Token_, std::move(outputGPU_.recHits)); +} + +DEFINE_FWK_MODULE(HBHERecHitProducerGPU); diff --git a/RecoLocalCalo/HcalRecProducers/src/HCALGPUAnalyzer.cc b/RecoLocalCalo/HcalRecProducers/src/HCALGPUAnalyzer.cc new file mode 100644 index 0000000000000..ba3c9de696c47 --- /dev/null +++ b/RecoLocalCalo/HcalRecProducers/src/HCALGPUAnalyzer.cc @@ -0,0 +1,307 @@ +// -*- C++ -*- +// +// Package: ComparisonPlots/HCALGPUAnalyzer +// Class: HCALGPUAnalyzer +// +/**\class HCALGPUAnalyzer HCALGPUAnalyzer.cc ComparisonPlots/HCALGPUAnalyzer/plugins/HCALGPUAnalyzer.cc + + Description: [one line class summary] + + Implementation: + [Notes on implementation] +*/ +// +// Original Author: Mariarosaria D'Alfonso +// Created: Mon, 17 Dec 2018 16:22:58 GMT +// +// + +// system include files +#include +#include +#include +#include +using namespace std; + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" + +#include "DataFormats/HcalRecHit/interface/HBHERecHit.h" +#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" +#include "DataFormats/HcalDetId/interface/HcalDetId.h" + +#include "SimDataFormats/CaloHit/interface/PCaloHit.h" +#include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" + +#include "SimCalorimetry/HcalSimAlgos/interface/HcalSimParameterMap.h" + +#include "TH2F.h" + +// +// class declaration +// + +class HCALGPUAnalyzer : public edm::one::EDAnalyzer { +public: + explicit HCALGPUAnalyzer(const edm::ParameterSet &); + ~HCALGPUAnalyzer() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); + +private: + void beginJob() override; + void analyze(const edm::Event &, const edm::EventSetup &) override; + void endJob() override; + + // ----------member data --------------------------- + // void ClearVariables(); + + // some variables for storing information + double Method0Energy, Method0EnergyGPU; + double RecHitEnergy, RecHitEnergyGPU; + double RecHitTime, RecHitTimeGPU; + double iEta, iEtaGPU; + double iPhi, iPhiGPU; + int depth, depthGPU; + + TH2F *hEnergy_2dMahi; + TH2F *hEnergy_2dM0; + TH2F *hTime_2dMahi; + + TH2F *Unmatched; + TH2F *Matched; + TH1F *hEnergy_cpu; + TH1F *hEnergy_gpu; + TH1F *hEnergy_cpugpu; + TH1F *hEnergy_cpugpu_rel; + TH1F *hEnergyM0_cpu; + TH1F *hEnergyM0_gpu; + TH1F *hTime_cpu; + TH1F *hTime_gpu; + + // create the output file + edm::Service FileService; + // create the token to retrieve hit information + edm::EDGetTokenT hRhToken; + edm::EDGetTokenT hRhTokenGPU; +}; + +// +// constants, enums and typedefs +// + +// +// static data member definitions +// + +// +// constructors and destructor +// +HCALGPUAnalyzer::HCALGPUAnalyzer(const edm::ParameterSet &iConfig) { + usesResource("TFileService"); + + hRhToken = consumes(iConfig.getUntrackedParameter("HBHERecHits", "hbheprereco")); + hRhTokenGPU = consumes( + iConfig.getUntrackedParameter("HBHERecHits", "hcalCPURecHitsProducer:recHitsLegacyHBHE")); + + // + + hEnergy_2dM0 = FileService->make("hEnergy_2dM0", "hEnergy_2dM0", 1000, 0., 100., 1000, 0., 100.); + hEnergy_2dM0->GetXaxis()->SetTitle("Cpu M0 Energy"); + hEnergy_2dM0->GetYaxis()->SetTitle("GPU M0 Energy"); + + hEnergy_2dMahi = FileService->make("hEnergy_2dMahi", "hEnergy_2dMahi", 1000, 0., 100., 1000, 0., 100.); + hEnergy_2dMahi->GetXaxis()->SetTitle("CPU Energy"); + hEnergy_2dMahi->GetYaxis()->SetTitle("GPU Energy"); + + hTime_2dMahi = FileService->make("hTime_2dMahi", "hTime_2dMahi", 250, -12.5, 12.5, 250, -12.5, 12.5); + hTime_2dMahi->GetXaxis()->SetTitle("Mahi Time CPU"); + hTime_2dMahi->GetYaxis()->SetTitle("Mahi Time GPU"); + + // + + hEnergyM0_cpu = FileService->make("hEnergyM0_cpu", "hEnergyM0_cpu", 100, 0., 100.); + hEnergyM0_cpu->GetXaxis()->SetTitle("CPU Energy"); + + hEnergy_cpu = FileService->make("hEnergy_cpu", "hEnergy_cpu", 50, 0., 50.); + hEnergy_cpu->GetXaxis()->SetTitle("CPU Energy"); + + hEnergy_gpu = FileService->make("hEnergy_gpu", "hEnergy_gpu", 50, 0., 50.); + hEnergy_gpu->GetXaxis()->SetTitle("GPU Energy"); + + // + + hEnergy_cpugpu = FileService->make("hEnergy_cpugpu", "hEnergy_cpugpu", 500, -2.5, 2.5); + hEnergy_cpugpu->GetXaxis()->SetTitle("GPU Energy - CPU Energy [GeV]"); + hEnergy_cpugpu->GetYaxis()->SetTitle("# RecHits"); + + hEnergy_cpugpu_rel = + FileService->make("hEnergy_cpugpu_rel", "hEnergy_cpugpu_rel ( E > 0.005 GeV)", 500, -2.5, 2.5); + hEnergy_cpugpu_rel->GetXaxis()->SetTitle("(GPU Energy - CPU Energy) / CPU energy"); + hEnergy_cpugpu_rel->GetYaxis()->SetTitle("# RecHits"); + + // + + hTime_cpu = FileService->make("hTime_cpu", "hTime_cpu", 50, -25., 25.); + hTime_cpu->GetXaxis()->SetTitle("CPU Time"); + + hTime_gpu = FileService->make("hTime_gpu", "hTime_gpu", 50, -25., 25.); + hTime_gpu->GetXaxis()->SetTitle("GPU Time"); + + Unmatched = FileService->make("Unmatched", "Unmatched (eta,phi)", 100, -50., 50., 85, 0., 85.); + Matched = FileService->make("Matched", "Matched (eta,phi)", 100, -50., 50., 85, 0., 85.); + + //now do what ever initialization is needed +} + +// +// member functions +// + +// ------------ method called for each event ------------ +void HCALGPUAnalyzer::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { + using namespace edm; + + // Read events + Handle hRecHits; + iEvent.getByToken(hRhToken, hRecHits); + + Handle hRecHitsGPU; + iEvent.getByToken(hRhTokenGPU, hRecHitsGPU); + + // Loop over all rechits in one event + for (int i = 0; i < (int)hRecHits->size(); i++) { + // get ID information for the reconstructed hit + HcalDetId detID_rh = (*hRecHits)[i].id().rawId(); + + // ID information can get us detector coordinates + depth = (*hRecHits)[i].id().depth(); + iEta = detID_rh.ieta(); + iPhi = detID_rh.iphi(); + + // get some variables + Method0Energy = (*hRecHits)[i].eraw(); + RecHitEnergy = (*hRecHits)[i].energy(); + RecHitTime = (*hRecHits)[i].time(); + + hEnergy_cpu->Fill(RecHitEnergy); + hTime_cpu->Fill(RecHitTime); + + /* + cout << "Run " << i << ": "; + cout << "Method0Energy: " << Method0Energy; + cout << "RecHitEnergy: " << RecHitEnergy; + cout << "depth: " << depth; + cout << "iEta: " << iEta; + cout << "iPhi: " << iPhi; + cout << "RecHitTime" << RecHitTime; + */ + } + + for (int i = 0; i < (int)hRecHitsGPU->size(); i++) { + // get ID information for the reconstructed hit + HcalDetId detID_rh = (*hRecHitsGPU)[i].id().rawId(); + + // ID information can get us detector coordinates + depthGPU = (*hRecHitsGPU)[i].id().depth(); + iEtaGPU = detID_rh.ieta(); + iPhiGPU = detID_rh.iphi(); + + // get some variables + Method0EnergyGPU = (*hRecHitsGPU)[i].eraw(); + RecHitEnergyGPU = (*hRecHitsGPU)[i].energy(); + RecHitTimeGPU = (*hRecHitsGPU)[i].time(); + + hEnergy_gpu->Fill(RecHitEnergyGPU); + hTime_gpu->Fill(RecHitTimeGPU); + + /* + cout << "Run " << i << ": "; + cout << "Method0Energy: " << Method0EnergyGPU; + cout << "RecHitEnergy: " << RecHitEnergyGPU; + cout << "depth: " << depthGPU; + cout << "iEta: " << iEtaGPU; + cout << "iPhi: " << iPhiGPU; + cout << "RecHitTime" << RecHitTimeGPU; + */ + } + + // Loop over all rechits in one event + for (int i = 0; i < (int)hRecHits->size(); i++) { + HcalDetId detID_rh = (*hRecHits)[i].id().rawId(); + + bool unmatched = true; + // cout << "--------------------------------------------------------" << endl; + + for (int j = 0; j < (int)hRecHitsGPU->size(); j++) { + HcalDetId detID_gpu = (*hRecHitsGPU)[j].id().rawId(); + + if ((detID_rh == detID_gpu)) { + /* + cout << "Mtime(cpu)" << (*hRecHits)[i].time() << endl; + cout << " Mtime(gpu)" << (*hRecHitsGPU)[j].time() << endl; + + cout << "M0E(cpu)" << (*hRecHits)[i].eraw() << endl; + cout << " M0E(gpu)" << (*hRecHitsGPU)[j].eraw() << endl; + */ + + auto relValue = ((*hRecHitsGPU)[j].energy() - (*hRecHits)[i].energy()) / (*hRecHits)[i].energy(); + + hEnergy_2dM0->Fill((*hRecHits)[i].eraw(), (*hRecHitsGPU)[j].eraw()); + hEnergy_2dMahi->Fill((*hRecHits)[i].energy(), (*hRecHitsGPU)[j].energy()); + hEnergy_cpugpu->Fill((*hRecHitsGPU)[j].energy() - (*hRecHits)[i].energy()); + if ((*hRecHits)[i].energy() > 0.005) + hEnergy_cpugpu_rel->Fill(relValue); + hTime_2dMahi->Fill((*hRecHits)[i].time(), (*hRecHitsGPU)[j].time()); + + /* + if((relValue < - 0.9) and ((*hRecHits)[i].energy()>0.005)) { + cout << "----------------------------------"<< endl; + cout << " detID = " << detID_rh.rawId() << endl; + cout << "ME(cpu)" << (*hRecHits)[i].energy() << endl; + cout << " ME(gpu)" << (*hRecHitsGPU)[j].energy() << endl; + } + */ + + Matched->Fill(detID_rh.ieta(), detID_rh.iphi()); + + unmatched = false; + } + } + + /// + + if (unmatched) { + Unmatched->Fill(detID_rh.ieta(), detID_rh.iphi()); + // cout << " recHit not matched =" << detID_rh << " E(raw)=" << (*hRecHits)[i].eraw() << " E=" << (*hRecHits)[i].energy() << endl; + } + } +} + +// ------------ method called once each job just before starting event loop ------------ +void HCALGPUAnalyzer::beginJob() {} + +// ------------ method called once each job just after ending the event loop ------------ +void HCALGPUAnalyzer::endJob() {} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ +void HCALGPUAnalyzer::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { + //The following says we do not know what parameters are allowed so do no validation + // Please change this to state exactly what you do use, even if it is no parameters + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); +} + +//define this as a plug-in +DEFINE_FWK_MODULE(HCALGPUAnalyzer); diff --git a/RecoLocalCalo/HcalRecProducers/src/HcalCPURecHitsProducer.cc b/RecoLocalCalo/HcalRecProducers/src/HcalCPURecHitsProducer.cc new file mode 100644 index 0000000000000..714ec8b7de5af --- /dev/null +++ b/RecoLocalCalo/HcalRecProducers/src/HcalCPURecHitsProducer.cc @@ -0,0 +1,106 @@ +#include +#include + +#include "CUDADataFormats/HcalRecHitSoA/interface/RecHitCollection.h" +#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +class HcalCPURecHitsProducer : public edm::stream::EDProducer { +public: + explicit HcalCPURecHitsProducer(edm::ParameterSet const& ps); + ~HcalCPURecHitsProducer() override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + void acquire(edm::Event const&, edm::EventSetup const&, edm::WaitingTaskWithArenaHolder) override; + void produce(edm::Event&, edm::EventSetup const&) override; + +private: + using IProductType = cms::cuda::Product>; + edm::EDGetTokenT recHitsM0TokenIn_; + using OProductType = hcal::RecHitCollection>; + edm::EDPutTokenT recHitsM0TokenOut_; + edm::EDPutTokenT recHitsLegacyTokenOut_; + + // to pass from acquire to produce + OProductType tmpRecHits_; +}; + +void HcalCPURecHitsProducer::fillDescriptions(edm::ConfigurationDescriptions& confDesc) { + edm::ParameterSetDescription desc; + + desc.add("recHitsM0LabelIn", edm::InputTag{"hbheRecHitProducerGPU", "recHitsM0HBHE"}); + desc.add("recHitsM0LabelOut", "recHitsM0HBHE"); + desc.add("recHitsLegacyLabelOut", "recHitsLegacyHBHE"); + + confDesc.addWithDefaultLabel(desc); +} + +HcalCPURecHitsProducer::HcalCPURecHitsProducer(const edm::ParameterSet& ps) + : recHitsM0TokenIn_{consumes(ps.getParameter("recHitsM0LabelIn"))}, + recHitsM0TokenOut_{produces(ps.getParameter("recHitsM0LabelOut"))}, + recHitsLegacyTokenOut_{produces(ps.getParameter("recHitsLegacyLabelOut"))} {} + +HcalCPURecHitsProducer::~HcalCPURecHitsProducer() {} + +void HcalCPURecHitsProducer::acquire(edm::Event const& event, + edm::EventSetup const& setup, + edm::WaitingTaskWithArenaHolder taskHolder) { + // retrieve data/ctx + auto const& recHitsProduct = event.get(recHitsM0TokenIn_); + cms::cuda::ScopedContextAcquire ctx{recHitsProduct, std::move(taskHolder)}; + auto const& recHits = ctx.get(recHitsProduct); + + // resize tmp buffers + tmpRecHits_.resize(recHits.size); + +#ifdef HCAL_MAHI_CPUDEBUG + std::cout << "num rec Hits = " << recHits.size << std::endl; +#endif + + auto lambdaToTransfer = [&ctx](auto& dest, auto* src) { + using vector_type = typename std::remove_reference::type; + using src_data_type = typename std::remove_pointer::type; + using type = typename vector_type::value_type; + static_assert(std::is_same::value && "Dest and Src data types do not match"); + cudaCheck(cudaMemcpyAsync(dest.data(), src, dest.size() * sizeof(type), cudaMemcpyDeviceToHost, ctx.stream())); + }; + + lambdaToTransfer(tmpRecHits_.energy, recHits.energy.get()); + lambdaToTransfer(tmpRecHits_.chi2, recHits.chi2.get()); + lambdaToTransfer(tmpRecHits_.energyM0, recHits.energyM0.get()); + lambdaToTransfer(tmpRecHits_.timeM0, recHits.timeM0.get()); + lambdaToTransfer(tmpRecHits_.did, recHits.did.get()); +} + +void HcalCPURecHitsProducer::produce(edm::Event& event, edm::EventSetup const& setup) { + // populate the legacy collection + auto recHitsLegacy = std::make_unique(); + // did not set size with ctor as there is no setter for did + recHitsLegacy->reserve(tmpRecHits_.did.size()); + for (uint32_t i = 0; i < tmpRecHits_.did.size(); i++) { + recHitsLegacy->emplace_back(HcalDetId{tmpRecHits_.did[i]}, + tmpRecHits_.energy[i], + 0 // timeRising + ); + + // update newly pushed guy + (*recHitsLegacy)[i].setChiSquared(tmpRecHits_.chi2[i]); + (*recHitsLegacy)[i].setRawEnergy(tmpRecHits_.energyM0[i]); + } + + // put a legacy format + event.put(recHitsLegacyTokenOut_, std::move(recHitsLegacy)); + + // put a new format + event.emplace(recHitsM0TokenOut_, std::move(tmpRecHits_)); +} + +DEFINE_FWK_MODULE(HcalCPURecHitsProducer); diff --git a/RecoLocalCalo/HcalRecProducers/src/HcalESProducersGPUDefs.cc b/RecoLocalCalo/HcalRecProducers/src/HcalESProducersGPUDefs.cc new file mode 100644 index 0000000000000..2fc6cc0d19002 --- /dev/null +++ b/RecoLocalCalo/HcalRecProducers/src/HcalESProducersGPUDefs.cc @@ -0,0 +1,120 @@ +#include "CondFormats/DataRecord/interface/HcalCombinedRecordsGPU.h" +#include "CondFormats/DataRecord/interface/HcalGainWidthsRcd.h" +#include "CondFormats/DataRecord/interface/HcalGainsRcd.h" +#include "CondFormats/DataRecord/interface/HcalLUTCorrsRcd.h" +#include "CondFormats/DataRecord/interface/HcalPedestalWidthsRcd.h" +#include "CondFormats/DataRecord/interface/HcalPedestalsRcd.h" +#include "CondFormats/DataRecord/interface/HcalQIEDataRcd.h" +#include "CondFormats/DataRecord/interface/HcalQIETypesRcd.h" +#include "CondFormats/DataRecord/interface/HcalRecoParamsRcd.h" +#include "CondFormats/DataRecord/interface/HcalRespCorrsRcd.h" +#include "CondFormats/DataRecord/interface/HcalSiPMCharacteristicsRcd.h" +#include "CondFormats/DataRecord/interface/HcalSiPMParametersRcd.h" +#include "CondFormats/DataRecord/interface/HcalTimeCorrsRcd.h" +#include "CondFormats/HcalObjects/interface/HcalConvertedEffectivePedestalWidthsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalConvertedEffectivePedestalsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalConvertedPedestalWidthsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalConvertedPedestalsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalGainWidths.h" +#include "CondFormats/HcalObjects/interface/HcalGainWidthsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalGains.h" +#include "CondFormats/HcalObjects/interface/HcalGainsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalLUTCorrs.h" +#include "CondFormats/HcalObjects/interface/HcalLUTCorrsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalPedestalWidths.h" +#include "CondFormats/HcalObjects/interface/HcalPedestalWidthsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalPedestals.h" +#include "CondFormats/HcalObjects/interface/HcalPedestalsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalQIECodersGPU.h" +#include "CondFormats/HcalObjects/interface/HcalQIEData.h" +#include "CondFormats/HcalObjects/interface/HcalQIETypes.h" +#include "CondFormats/HcalObjects/interface/HcalQIETypesGPU.h" +#include "CondFormats/HcalObjects/interface/HcalRecoParams.h" +#include "CondFormats/HcalObjects/interface/HcalRecoParamsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalRespCorrs.h" +#include "CondFormats/HcalObjects/interface/HcalRespCorrsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalSiPMCharacteristics.h" +#include "CondFormats/HcalObjects/interface/HcalSiPMCharacteristicsGPU.h" +#include "CondFormats/HcalObjects/interface/HcalSiPMParameters.h" +#include "CondFormats/HcalObjects/interface/HcalSiPMParametersGPU.h" +#include "CondFormats/HcalObjects/interface/HcalTimeCorrs.h" +#include "CondFormats/HcalObjects/interface/HcalTimeCorrsGPU.h" +#include "HeterogeneousCore/CUDACore/interface/ConvertingESProducerT.h" +#include "HeterogeneousCore/CUDACore/interface/ConvertingESProducerWithDependenciesT.h" +#include "RecoLocalCalo/HcalRecAlgos/interface/HcalRecoParamsWithPulseShapesGPU.h" + +using HcalRecoParamsGPUESProducer = ConvertingESProducerT; + +using HcalRecoParamsWithPulseShapesGPUESProducer = + ConvertingESProducerT; + +using HcalPedestalsGPUESProducer = ConvertingESProducerT; + +using HcalGainsGPUESProducer = ConvertingESProducerT; + +using HcalLUTCorrsGPUESProducer = ConvertingESProducerT; + +using HcalRespCorrsGPUESProducer = ConvertingESProducerT; + +using HcalTimeCorrsGPUESProducer = ConvertingESProducerT; + +using HcalPedestalWidthsGPUESProducer = + ConvertingESProducerT; + +using HcalGainWidthsGPUESProducer = ConvertingESProducerT; + +using HcalQIECodersGPUESProducer = ConvertingESProducerT; + +using HcalQIETypesGPUESProducer = ConvertingESProducerT; + +using HcalSiPMParametersGPUESProducer = + ConvertingESProducerT; + +using HcalSiPMCharacteristicsGPUESProducer = + ConvertingESProducerT; + +using HcalConvertedPedestalsGPUESProducer = ConvertingESProducerWithDependenciesT; + +using HcalConvertedEffectivePedestalsGPUESProducer = + ConvertingESProducerWithDependenciesT; + +using HcalConvertedPedestalWidthsGPUESProducer = ConvertingESProducerWithDependenciesT; + +using HcalConvertedEffectivePedestalWidthsGPUESProducer = + ConvertingESProducerWithDependenciesT; + +DEFINE_FWK_EVENTSETUP_MODULE(HcalRecoParamsGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalRecoParamsWithPulseShapesGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalPedestalsGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalGainsGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalLUTCorrsGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalRespCorrsGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalTimeCorrsGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalPedestalWidthsGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalGainWidthsGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalQIECodersGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalQIETypesGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalSiPMParametersGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalSiPMCharacteristicsGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalConvertedPedestalsGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalConvertedEffectivePedestalsGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalConvertedPedestalWidthsGPUESProducer); +DEFINE_FWK_EVENTSETUP_MODULE(HcalConvertedEffectivePedestalWidthsGPUESProducer); diff --git a/RecoLocalCalo/HcalRecProducers/src/HcalMahiPulseOffsetsGPUESProducer.cc b/RecoLocalCalo/HcalRecProducers/src/HcalMahiPulseOffsetsGPUESProducer.cc new file mode 100644 index 0000000000000..0862e0a861d5d --- /dev/null +++ b/RecoLocalCalo/HcalRecProducers/src/HcalMahiPulseOffsetsGPUESProducer.cc @@ -0,0 +1,58 @@ +#include +#include +#include +#include + +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Framework/interface/ESProductHost.h" +#include "FWCore/Framework/interface/ESTransientHandle.h" +#include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/ModuleFactory.h" +#include "FWCore/Framework/interface/SourceFactory.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/ReusableObjectHolder.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDACore/interface/JobConfigurationGPURecord.h" +#include "RecoLocalCalo/HcalRecAlgos/interface/HcalMahiPulseOffsetsGPU.h" + +class HcalMahiPulseOffsetsGPUESProducer : public edm::ESProducer, public edm::EventSetupRecordIntervalFinder { +public: + HcalMahiPulseOffsetsGPUESProducer(edm::ParameterSet const&); + ~HcalMahiPulseOffsetsGPUESProducer() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions&); + std::unique_ptr produce(JobConfigurationGPURecord const&); + +protected: + void setIntervalFor(const edm::eventsetup::EventSetupRecordKey&, + const edm::IOVSyncValue&, + edm::ValidityInterval&) override; + +private: + edm::ParameterSet const& pset_; +}; + +HcalMahiPulseOffsetsGPUESProducer::HcalMahiPulseOffsetsGPUESProducer(edm::ParameterSet const& pset) : pset_{pset} { + setWhatProduced(this); + findingRecord(); +} + +void HcalMahiPulseOffsetsGPUESProducer::setIntervalFor(const edm::eventsetup::EventSetupRecordKey& iKey, + const edm::IOVSyncValue& iTime, + edm::ValidityInterval& oInterval) { + oInterval = edm::ValidityInterval(edm::IOVSyncValue::beginOfTime(), edm::IOVSyncValue::endOfTime()); +} + +void HcalMahiPulseOffsetsGPUESProducer::fillDescriptions(edm::ConfigurationDescriptions& desc) { + edm::ParameterSetDescription d; + d.add>("pulseOffsets", {-3, -2, -1, 0, 1, 2, 3, 4}); + desc.addWithDefaultLabel(d); +} + +std::unique_ptr HcalMahiPulseOffsetsGPUESProducer::produce(JobConfigurationGPURecord const&) { + return std::make_unique(pset_); +} + +DEFINE_FWK_EVENTSETUP_SOURCE(HcalMahiPulseOffsetsGPUESProducer); diff --git a/RecoLocalCalo/HcalRecProducers/src/KernelHelpers.h b/RecoLocalCalo/HcalRecProducers/src/KernelHelpers.h new file mode 100644 index 0000000000000..ade221b2c4870 --- /dev/null +++ b/RecoLocalCalo/HcalRecProducers/src/KernelHelpers.h @@ -0,0 +1,220 @@ +#ifndef RecoLocalCalo_HcalRecProducers_src_KernelHelpers_h +#define RecoLocalCalo_HcalRecProducers_src_KernelHelpers_h + +#include "RecoLocalCalo/HcalRecAlgos/interface/HcalConstants.h" + +#include "DeclsForKernels.h" + +namespace hcal { + namespace reconstruction { + + // this is from HcalTimeSlew. + // HcalTimeSlew are values that come in from ESProducer that takes them + // from a python config. see DeclsForKernels for more explanation + __forceinline__ __device__ float compute_time_slew_delay(float const fC, + float const tzero, + float const slope, + float const tmax) { + auto const rawDelay = tzero + slope * std::log(fC); + return rawDelay < 0 ? 0 : (rawDelay > tmax ? tmax : rawDelay); + } + + // HcalQIEShapes are hardcoded in HcalQIEData.cc basically + // + some logic to generate 128 and 256 value arrays... + __constant__ float const qie8shape[129] = { + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, + 18, 20, 22, 24, 26, 28, 31, 34, 37, 40, 44, 48, 52, 57, 62, 57, 62, + 67, 72, 77, 82, 87, 92, 97, 102, 107, 112, 117, 122, 127, 132, 142, 152, 162, + 172, 182, 192, 202, 217, 232, 247, 262, 282, 302, 322, 347, 372, 347, 372, 397, 422, + 447, 472, 497, 522, 547, 572, 597, 622, 647, 672, 697, 722, 772, 822, 872, 922, 972, + 1022, 1072, 1147, 1222, 1297, 1372, 1472, 1572, 1672, 1797, 1922, 1797, 1922, 2047, 2172, 2297, 2422, + 2547, 2672, 2797, 2922, 3047, 3172, 3297, 3422, 3547, 3672, 3922, 4172, 4422, 4672, 4922, 5172, 5422, + 5797, 6172, 6547, 6922, 7422, 7922, 8422, 9047, 9672, 10297}; + + __constant__ float const qie11shape[257] = { + -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, + 11.5, 12.5, 13.5, 14.5, 15.5, 17.5, 19.5, 21.5, 23.5, 25.5, 27.5, 29.5, + 31.5, 33.5, 35.5, 37.5, 39.5, 41.5, 43.5, 45.5, 47.5, 49.5, 51.5, 53.5, + 55.5, 59.5, 63.5, 67.5, 71.5, 75.5, 79.5, 83.5, 87.5, 91.5, 95.5, 99.5, + 103.5, 107.5, 111.5, 115.5, 119.5, 123.5, 127.5, 131.5, 135.5, 139.5, 147.5, 155.5, + 163.5, 171.5, 179.5, 187.5, 171.5, 179.5, 187.5, 195.5, 203.5, 211.5, 219.5, 227.5, + 235.5, 243.5, 251.5, 259.5, 267.5, 275.5, 283.5, 291.5, 299.5, 315.5, 331.5, 347.5, + 363.5, 379.5, 395.5, 411.5, 427.5, 443.5, 459.5, 475.5, 491.5, 507.5, 523.5, 539.5, + 555.5, 571.5, 587.5, 603.5, 619.5, 651.5, 683.5, 715.5, 747.5, 779.5, 811.5, 843.5, + 875.5, 907.5, 939.5, 971.5, 1003.5, 1035.5, 1067.5, 1099.5, 1131.5, 1163.5, 1195.5, 1227.5, + 1259.5, 1291.5, 1355.5, 1419.5, 1483.5, 1547.5, 1611.5, 1675.5, 1547.5, 1611.5, 1675.5, 1739.5, + 1803.5, 1867.5, 1931.5, 1995.5, 2059.5, 2123.5, 2187.5, 2251.5, 2315.5, 2379.5, 2443.5, 2507.5, + 2571.5, 2699.5, 2827.5, 2955.5, 3083.5, 3211.5, 3339.5, 3467.5, 3595.5, 3723.5, 3851.5, 3979.5, + 4107.5, 4235.5, 4363.5, 4491.5, 4619.5, 4747.5, 4875.5, 5003.5, 5131.5, 5387.5, 5643.5, 5899.5, + 6155.5, 6411.5, 6667.5, 6923.5, 7179.5, 7435.5, 7691.5, 7947.5, 8203.5, 8459.5, 8715.5, 8971.5, + 9227.5, 9483.5, 9739.5, 9995.5, 10251.5, 10507.5, 11019.5, 11531.5, 12043.5, 12555.5, 13067.5, 13579.5, + 12555.5, 13067.5, 13579.5, 14091.5, 14603.5, 15115.5, 15627.5, 16139.5, 16651.5, 17163.5, 17675.5, 18187.5, + 18699.5, 19211.5, 19723.5, 20235.5, 20747.5, 21771.5, 22795.5, 23819.5, 24843.5, 25867.5, 26891.5, 27915.5, + 28939.5, 29963.5, 30987.5, 32011.5, 33035.5, 34059.5, 35083.5, 36107.5, 37131.5, 38155.5, 39179.5, 40203.5, + 41227.5, 43275.5, 45323.5, 47371.5, 49419.5, 51467.5, 53515.5, 55563.5, 57611.5, 59659.5, 61707.5, 63755.5, + 65803.5, 67851.5, 69899.5, 71947.5, 73995.5, 76043.5, 78091.5, 80139.5, 82187.5, 84235.5, 88331.5, 92427.5, + 96523.5, 100620, 104716, 108812, 112908}; + + // Conditions are transferred once per IOV + // Access is performed based on the det id which is converted to a linear index + // 2 funcs below are taken from HcalTopology (reimplemented here). + // Inputs are constants that are also taken from HcalTopology + // but passed to the kernel as arguments using the HclaTopology itself + constexpr int32_t IPHI_MAX = 72; + + __forceinline__ __device__ uint32_t did2linearIndexHB( + uint32_t const didraw, int const maxDepthHB, int const firstHBRing, int const lastHBRing, int const nEtaHB) { + HcalDetId did{didraw}; + uint32_t const value = (did.depth() - 1) + maxDepthHB * (did.iphi() - 1); + return did.ieta() > 0 ? value + maxDepthHB * hcal::reconstruction::IPHI_MAX * (did.ieta() - firstHBRing) + : value + maxDepthHB * hcal::reconstruction::IPHI_MAX * (did.ieta() + lastHBRing + nEtaHB); + } + + __forceinline__ __device__ uint32_t did2linearIndexHE(uint32_t const didraw, + int const maxDepthHE, + int const maxPhiHE, + int const firstHERing, + int const lastHERing, + int const nEtaHE) { + HcalDetId did{didraw}; + uint32_t const value = (did.depth() - 1) + maxDepthHE * (did.iphi() - 1); + return did.ieta() > 0 ? value + maxDepthHE * maxPhiHE * (did.ieta() - firstHERing) + : value + maxDepthHE * maxPhiHE * (did.ieta() + lastHERing + nEtaHE); + } + + __forceinline__ __device__ uint32_t get_qiecoder_index(uint32_t const capid, uint32_t const range) { + return capid * 4 + range; + } + + __forceinline__ __device__ float compute_reco_correction_factor(float const par1, + float const par2, + float const par3, + float const x) { + return par3 * x * x + par2 * x + par1; + } + + // compute the charge using the adc, qie type and the appropriate qie shape array + __forceinline__ __device__ float compute_coder_charge( + int const qieType, uint8_t const adc, uint8_t const capid, float const* qieOffsets, float const* qieSlopes) { + auto const range = qieType == 0 ? (adc >> 5) & 0x3 : (adc >> 6) & 0x3; + auto const* qieShapeToUse = qieType == 0 ? qie8shape : qie11shape; + auto const nbins = qieType == 0 ? 32 : 64; + auto const center = adc % nbins == nbins - 1 ? 0.5 * (3 * qieShapeToUse[adc] - qieShapeToUse[adc - 1]) + : 0.5 * (qieShapeToUse[adc] + qieShapeToUse[adc + 1]); + auto const index = get_qiecoder_index(capid, range); + return (center - qieOffsets[index]) / qieSlopes[index]; + } + + // this is from + // https://github.com/cms-sw/cmssw/blob/master/RecoLocalCalo/HcalRecProducers/src/HBHEPhase1Reconstructor.cc#L140 + + __forceinline__ __device__ float compute_diff_charge_gain(int const qieType, + uint8_t adc, + uint8_t const capid, + float const* qieOffsets, + float const* qieSlopes, + bool const isqie11) { + constexpr uint32_t mantissaMaskQIE8 = 0x1fu; + constexpr uint32_t mantissaMaskQIE11 = 0x3f; + auto const mantissaMask = isqie11 ? mantissaMaskQIE11 : mantissaMaskQIE8; + auto const q = compute_coder_charge(qieType, adc, capid, qieOffsets, qieSlopes); + auto const mantissa = adc & mantissaMask; + + if (mantissa == 0u || mantissa == mantissaMask - 1u) + return compute_coder_charge(qieType, adc + 1u, capid, qieOffsets, qieSlopes) - q; + else if (mantissa == 1u || mantissa == mantissaMask) + return q - compute_coder_charge(qieType, adc - 1u, capid, qieOffsets, qieSlopes); + else { + auto const qup = compute_coder_charge(qieType, adc + 1u, capid, qieOffsets, qieSlopes); + auto const qdown = compute_coder_charge(qieType, adc - 1u, capid, qieOffsets, qieSlopes); + auto const upgain = qup - q; + auto const downgain = q - qdown; + auto const averagegain = (qup - qdown) / 2.f; + if (std::abs(upgain - downgain) < 0.01f * averagegain) + return averagegain; + else { + auto const q2up = compute_coder_charge(qieType, adc + 2u, capid, qieOffsets, qieSlopes); + auto const q2down = compute_coder_charge(qieType, adc - 2u, capid, qieOffsets, qieSlopes); + auto const upgain2 = q2up - qup; + auto const downgain2 = qdown - q2down; + if (std::abs(upgain2 - upgain) < std::abs(downgain2 - downgain)) + return upgain; + else + return downgain; + } + } + } + + // TODO: remove what's not needed + // originally from from RecoLocalCalo/HcalRecAlgos/src/PulseShapeFunctor.cc + __forceinline__ __device__ float compute_pulse_shape_value(float const pulse_time, + int const sample, + int const shift, + float const* acc25nsVec, + float const* diff25nsItvlVec, + float const* accVarLenIdxMinusOneVec, + float const* diffVarItvlIdxMinusOneVec, + float const* accVarLenIdxZeroVec, + float const* diffVarItvlIdxZeroVec) { + // constants + constexpr float slew = 0.f; + constexpr auto ns_per_bx = hcal::constants::nsPerBX; + + // FIXME: clean up all the rounding... this is coming from original cpu version + float const i_start_float = -hcal::constants::iniTimeShift - pulse_time - slew > 0.f + ? 0.f + : std::abs(-hcal::constants::iniTimeShift - pulse_time - slew) + 1.f; + int i_start = static_cast(i_start_float); + float offset_start = static_cast(i_start) - hcal::constants::iniTimeShift - pulse_time - slew; + // FIXME: do we need a check for nan??? +#ifdef HCAL_MAHI_GPUDEBUG + if (shift == 0) + printf("i_start_float = %f i_start = %d offset_start = %f\n", i_start_float, i_start, offset_start); +#endif + + // boundary + if (offset_start == 1.0f) { + offset_start = 0.f; + i_start -= 1; + } + +#ifdef HCAL_MAHI_GPUDEBUG + if (shift == 0) + printf("i_start_float = %f i_start = %d offset_start = %f\n", i_start_float, i_start, offset_start); +#endif + + int const bin_start = static_cast(offset_start); + auto const bin_start_up = static_cast(bin_start) + 0.5f; + int const bin_0_start = offset_start < bin_start_up ? bin_start - 1 : bin_start; + int const its_start = i_start / ns_per_bx; + int const distTo25ns_start = hcal::constants::nsPerBX - 1 - i_start % ns_per_bx; + auto const factor = offset_start - static_cast(bin_0_start) - 0.5; + +#ifdef HCAL_MAHI_GPUDEBUG + if (shift == 0) { + printf("bin_start = %d bin_0_start = %d its_start = %d distTo25ns_start = %d factor = %f\n", + bin_start, + bin_0_start, + its_start, + distTo25ns_start, + factor); + } +#endif + + auto const sample_over10ts = sample + shift; + float value = 0.0f; + if (sample_over10ts == its_start) { + value = bin_0_start == -1 + ? accVarLenIdxMinusOneVec[distTo25ns_start] + factor * diffVarItvlIdxMinusOneVec[distTo25ns_start] + : accVarLenIdxZeroVec[distTo25ns_start] + factor * diffVarItvlIdxZeroVec[distTo25ns_start]; + } else if (sample_over10ts > its_start) { + int const bin_idx = distTo25ns_start + 1 + (sample_over10ts - its_start - 1) * ns_per_bx + bin_0_start; + value = acc25nsVec[bin_idx] + factor * diff25nsItvlVec[bin_idx]; + } + return value; + } + + } // namespace reconstruction +} // namespace hcal + +#endif // RecoLocalCalo_HcalRecProducers_src_KernelHelpers_h diff --git a/RecoLocalCalo/HcalRecProducers/src/MahiGPU.cu b/RecoLocalCalo/HcalRecProducers/src/MahiGPU.cu new file mode 100644 index 0000000000000..3dba47ba50191 --- /dev/null +++ b/RecoLocalCalo/HcalRecProducers/src/MahiGPU.cu @@ -0,0 +1,1242 @@ +#include + +#include "DataFormats/CaloRecHit/interface/MultifitComputations.h" +// needed to compile with USER_CXXFLAGS="-DCOMPUTE_TDC_TIME" +#include "DataFormats/HcalRecHit/interface/HcalSpecialTimes.h" +#include "FWCore/Utilities/interface/CMSUnrollLoop.h" + +// TODO reuse some of the HCAL constats from +//#include "RecoLocalCalo/HcalRecAlgos/interface/HcalConstants.h" + +#include "SimpleAlgoGPU.h" +#include "KernelHelpers.h" + +#ifdef HCAL_MAHI_GPUDEBUG +#define DETID_TO_DEBUG 1125647428 +#endif + +namespace hcal { + namespace mahi { + + // TODO: provide constants from configuration + // from RecoLocalCalo/HcalRecProducers/python/HBHEMahiParameters_cfi.py + constexpr int nMaxItersMin = 50; + constexpr int nMaxItersNNLS = 500; + constexpr double nnlsThresh = 1e-11; + constexpr float deltaChi2Threashold = 1e-3; + + // from RecoLocalCalo/HcalRecProducers/src/HBHEPhase1Reconstructor.cc + __forceinline__ __device__ float get_raw_charge(double const charge, + double const pedestal, + float const* shrChargeMinusPedestal, + float const* parLin1Values, + float const* parLin2Values, + float const* parLin3Values, + int32_t const nsamplesForCompute, + int32_t const soi, + int const sipmQTSShift, + int const sipmQNTStoSum, + int const sipmType, + float const fcByPE, + bool const isqie11) { + float rawCharge; + + if (!isqie11) + rawCharge = charge; + else { + auto const parLin1 = parLin1Values[sipmType - 1]; + auto const parLin2 = parLin2Values[sipmType - 1]; + auto const parLin3 = parLin3Values[sipmType - 1]; + + int const first = std::max(soi + sipmQTSShift, 0); + int const last = std::min(soi + sipmQNTStoSum, nsamplesForCompute); + float sipmq = 0.0f; + for (auto ts = first; ts < last; ts++) + sipmq += shrChargeMinusPedestal[threadIdx.y * nsamplesForCompute + ts]; + auto const effectivePixelsFired = sipmq / fcByPE; + auto const factor = + hcal::reconstruction::compute_reco_correction_factor(parLin1, parLin2, parLin3, effectivePixelsFired); + rawCharge = (charge - pedestal) * factor + pedestal; + +#ifdef HCAL_MAHI_GPUDEBUG + printf("first = %d last = %d sipmQ = %f factor = %f rawCharge = %f\n", first, last, sipmq, factor, rawCharge); +#endif + } + return rawCharge; + } + + // Assume: same number of samples for HB and HE + // TODO: add/validate restrict (will increase #registers in use by the kernel) + __global__ void kernel_prep1d_sameNumberOfSamples(float* amplitudes, + float* noiseTerms, + float* electronicNoiseTerms, + float* outputEnergy, + float* outputChi2, + uint16_t const* dataf01HE, + uint16_t const* dataf5HB, + uint16_t const* dataf3HB, + uint32_t const* idsf01HE, + uint32_t const* idsf5HB, + uint32_t const* idsf3HB, + uint32_t const stridef01HE, + uint32_t const stridef5HB, + uint32_t const stridef3HB, + uint32_t const nchannelsf01HE, + uint32_t const nchannelsf5HB, + uint8_t const* npresamplesf5HB, + int8_t* soiSamples, + float* method0Energy, + float* method0Time, + uint32_t* outputdid, + uint32_t const nchannels, + uint32_t const* recoParam1Values, + uint32_t const* recoParam2Values, + float const* qieCoderOffsets, + float const* qieCoderSlopes, + int const* qieTypes, + float const* pedestalWidths, + float const* effectivePedestalWidths, + float const* pedestals, + float const* effectivePedestals, + bool const useEffectivePedestals, + int const* sipmTypeValues, + float const* fcByPEValues, + float const* parLin1Values, + float const* parLin2Values, + float const* parLin3Values, + float const* gainValues, + float const* respCorrectionValues, + int const maxDepthHB, + int const maxDepthHE, + int const maxPhiHE, + int const firstHBRing, + int const lastHBRing, + int const firstHERing, + int const lastHERing, + int const nEtaHB, + int const nEtaHE, + int const sipmQTSShift, + int const sipmQNTStoSum, + int const firstSampleShift, + uint32_t const offsetForHashes, + float const ts4Thresh, + int const startingSample) { + // indices + runtime constants + auto const sample = threadIdx.x + startingSample; + auto const sampleWithinWindow = threadIdx.x; + int32_t const nsamplesForCompute = blockDim.x; + auto const lch = threadIdx.y; + auto const gch = lch + blockDim.y * blockIdx.x; + auto const nchannels_per_block = blockDim.y; + auto const linearThPerBlock = threadIdx.x + threadIdx.y * blockDim.x; + + // remove + if (gch >= nchannels) + return; + + // initialize all output buffers + if (sampleWithinWindow == 0) { + outputdid[gch] = 0; + method0Energy[gch] = 0; + method0Time[gch] = 0; + outputEnergy[gch] = 0; + outputChi2[gch] = 0; + } + +#ifdef HCAL_MAHI_GPUDEBUG +#ifdef HCAL_MAHI_GPUDEBUG_SINGLECHANNEL + if (gch > 0) + return; +#endif +#endif + + // configure shared mem + extern __shared__ char smem[]; + float* shrEnergyM0PerTS = reinterpret_cast(smem); + float* shrChargeMinusPedestal = shrEnergyM0PerTS + nsamplesForCompute * nchannels_per_block; + float* shrMethod0EnergyAccum = shrChargeMinusPedestal + nsamplesForCompute * nchannels_per_block; + float* shrEnergyM0TotalAccum = shrMethod0EnergyAccum + nchannels_per_block; + unsigned long long int* shrMethod0EnergySamplePair = + reinterpret_cast(shrEnergyM0TotalAccum + nchannels_per_block); + if (sampleWithinWindow == 0) { + shrMethod0EnergyAccum[lch] = 0; + shrMethod0EnergySamplePair[lch] = __float_as_uint(std::numeric_limits::min()); + shrEnergyM0TotalAccum[lch] = 0; + } + + // offset output + auto* amplitudesForChannel = amplitudes + nsamplesForCompute * gch; + auto* noiseTermsForChannel = noiseTerms + nsamplesForCompute * gch; + auto* electronicNoiseTermsForChannel = electronicNoiseTerms + nsamplesForCompute * gch; + auto const nchannelsf015 = nchannelsf01HE + nchannelsf5HB; + + // get event input quantities + auto const stride = gch < nchannelsf01HE ? stridef01HE : (gch < nchannelsf015 ? stridef5HB : stridef3HB); + auto const nsamples = gch < nchannelsf01HE ? compute_nsamples(stride) + : (gch < nchannelsf015 ? compute_nsamples(stride) + : compute_nsamples(stride)); + +#ifdef HCAL_MAHI_GPUDEBUG + assert(nsamples == nsamplesForCompute || nsamples - startingSample == nsamplesForCompute); +#endif + + auto const id = gch < nchannelsf01HE + ? idsf01HE[gch] + : (gch < nchannelsf015 ? idsf5HB[gch - nchannelsf01HE] : idsf3HB[gch - nchannelsf015]); + auto const did = HcalDetId{id}; + + auto const adc = + gch < nchannelsf01HE + ? adc_for_sample(dataf01HE + stride * gch, sample) + : (gch < nchannelsf015 ? adc_for_sample(dataf5HB + stride * (gch - nchannelsf01HE), sample) + : adc_for_sample(dataf3HB + stride * (gch - nchannelsf015), sample)); + auto const capid = + gch < nchannelsf01HE + ? capid_for_sample(dataf01HE + stride * gch, sample) + : (gch < nchannelsf015 ? capid_for_sample(dataf5HB + stride * (gch - nchannelsf01HE), sample) + : capid_for_sample(dataf3HB + stride * (gch - nchannelsf015), sample)); + +#ifdef HCAL_MAHI_GPUDEBUG +#ifdef HCAL_MAHI_GPUDEBUG_FILTERDETID + if (id != DETID_TO_DEBUG) + return; +#endif +#endif + + // compute hash for this did + auto const hashedId = + did.subdetId() == HcalBarrel + ? hcal::reconstruction::did2linearIndexHB(id, maxDepthHB, firstHBRing, lastHBRing, nEtaHB) + : hcal::reconstruction::did2linearIndexHE(id, maxDepthHE, maxPhiHE, firstHERing, lastHERing, nEtaHE) + + offsetForHashes; + + // conditions based on the hash + // FIXME: remove hardcoded values + auto const qieType = qieTypes[hashedId] > 0 ? 1 : 0; // 2 types at this point + auto const* qieOffsets = qieCoderOffsets + hashedId * HcalQIECodersGPU::numValuesPerChannel; + auto const* qieSlopes = qieCoderSlopes + hashedId * HcalQIECodersGPU::numValuesPerChannel; + auto const* pedestalsForChannel = pedestals + hashedId * 4; + auto const* pedestalWidthsForChannel = useEffectivePedestals && (gch < nchannelsf01HE || gch >= nchannelsf015) + ? effectivePedestalWidths + hashedId * 4 + : pedestalWidths + hashedId * 4; + + auto const* gains = gainValues + hashedId * 4; + auto const gain = gains[capid]; + auto const gain0 = gains[0]; + auto const respCorrection = respCorrectionValues[hashedId]; + auto const pedestal = pedestalsForChannel[capid]; + auto const pedestalWidth = pedestalWidthsForChannel[capid]; + // if needed, only use effective pedestals for f01 + auto const pedestalToUseForMethod0 = useEffectivePedestals && (gch < nchannelsf01HE || gch >= nchannelsf015) + ? effectivePedestals[hashedId * 4 + capid] + : pedestal; + auto const sipmType = sipmTypeValues[hashedId]; + auto const fcByPE = fcByPEValues[hashedId]; + auto const recoParam1 = recoParam1Values[hashedId]; + auto const recoParam2 = recoParam2Values[hashedId]; + +#ifdef HCAL_MAHI_GPUDEBUG + printf("qieType = %d qieOffset0 = %f qieOffset1 = %f qieSlope0 = %f qieSlope1 = %f\n", + qieType, + qieOffsets[0], + qieOffsets[1], + qieSlopes[0], + qieSlopes[1]); +#endif + + // compute charge + auto const charge = hcal::reconstruction::compute_coder_charge(qieType, adc, capid, qieOffsets, qieSlopes); + + shrChargeMinusPedestal[linearThPerBlock] = charge - pedestal; + if (gch < nchannelsf01HE) { + // NOTE: assume that soi is high only for a single guy! + // which must be the case. cpu version does not check for that + // if that is not the case, we will see that with cuda mmecheck + auto const soibit = soibit_for_sample(dataf01HE + stride * gch, sample); + if (soibit == 1) + soiSamples[gch] = sampleWithinWindow; + } else if (gch >= nchannelsf015) { + auto const soibit = soibit_for_sample(dataf3HB + stride * (gch - nchannelsf015), sample); + if (soibit == 1) + soiSamples[gch] = sampleWithinWindow; + } + __syncthreads(); + int32_t const soi = gch < nchannelsf01HE + ? soiSamples[gch] + : (gch < nchannelsf015 ? npresamplesf5HB[gch - nchannelsf01HE] : soiSamples[gch]); + //int32_t const soi = gch >= nchannelsf01HE + // ? npresamplesf5HB[gch - nchannelsf01HE] + // : soiSamples[gch]; + // this is here just to make things uniform... + if (gch >= nchannelsf01HE && gch < nchannelsf015 && sampleWithinWindow == 0) + soiSamples[gch] = npresamplesf5HB[gch - nchannelsf01HE]; + + // + // compute various quantities (raw charge and tdc stuff) + // NOTE: this branch will be divergent only for a single warp that + // sits on the boundary when flavor 01 channels end and flavor 5 start + // + float const rawCharge = get_raw_charge(charge, + pedestal, + shrChargeMinusPedestal, + parLin1Values, + parLin2Values, + parLin3Values, + nsamplesForCompute, + soi, + sipmQTSShift, + sipmQNTStoSum, + sipmType, + fcByPE, + gch < nchannelsf01HE || gch >= nchannelsf015); + + auto const dfc = hcal::reconstruction::compute_diff_charge_gain( + qieType, adc, capid, qieOffsets, qieSlopes, gch < nchannelsf01HE || gch >= nchannelsf015); + +#ifdef COMPUTE_TDC_TIME + float tdcTime; + if (gch >= nchannelsf01HE && gch < nchannelsf015) { + tdcTime = HcalSpecialTimes::UNKNOWN_T_NOTDC; + } else { + if (gch < nchannelsf01HE) + tdcTime = HcalSpecialTimes::getTDCTime(tdc_for_sample(dataf01HE + stride * gch, sample)); + else if (gch >= nchannelsf015) + tdcTime = + HcalSpecialTimes::getTDCTime(tdc_for_sample(dataf3HB + stride * (gch - nchannelsf015), sample)); + } +#endif // COMPUTE_TDC_TIME + + // compute method 0 quantities + // TODO: need to apply containment + // TODO: need to apply time slew + // TODO: for < run 3, apply HBM legacy energy correction + auto const nsamplesToAdd = recoParam1 < 10 ? recoParam2 : (recoParam1 >> 14) & 0xF; + auto const startSampleTmp = soi + firstSampleShift; + auto const startSample = startSampleTmp < 0 ? 0 : startSampleTmp; + auto const endSample = + startSample + nsamplesToAdd < nsamplesForCompute ? startSample + nsamplesToAdd : nsamplesForCompute; + // NOTE: gain is a small number < 10^-3, multiply it last + auto const energym0_per_ts = gain * ((rawCharge - pedestalToUseForMethod0) * respCorrection); + auto const energym0_per_ts_gain0 = gain0 * ((rawCharge - pedestalToUseForMethod0) * respCorrection); + // store to shared mem + shrEnergyM0PerTS[lch * nsamplesForCompute + sampleWithinWindow] = energym0_per_ts; + atomicAdd(&shrEnergyM0TotalAccum[lch], energym0_per_ts_gain0); + +#ifdef HCAL_MAHI_GPUDEBUG + printf( + "id = %u sample = %d gch = %d hashedId = %u adc = %u capid = %u\n" + " charge = %f rawCharge = %f dfc = %f pedestal = %f\n" + " gain = %f respCorrection = %f energym0_per_ts = %f\n", + id, + sample, + gch, + hashedId, + adc, + capid, + charge, + rawCharge, + dfc, + pedestalToUseForMethod0, + gain, + respCorrection, + energym0_per_ts); + printf( + "startSample = %d endSample = %d param1 = %u param2 = %u\n", startSample, endSample, recoParam1, recoParam2); +#endif + + if (sampleWithinWindow >= startSample && sampleWithinWindow < endSample) { + atomicAdd(&shrMethod0EnergyAccum[lch], energym0_per_ts); + // pack sample, energy as 64 bit value + unsigned long long int old = shrMethod0EnergySamplePair[lch], assumed; + unsigned long long int val = + (static_cast(sampleWithinWindow) << 32) + __float_as_uint(energym0_per_ts); + do { + assumed = old; + // decode energy, sample values + //int const current_sample = (assumed >> 32) & 0xffffffff; + float const current_energy = __uint_as_float(assumed & 0xffffffff); + if (energym0_per_ts > current_energy) + old = atomicCAS(&shrMethod0EnergySamplePair[lch], assumed, val); + else + break; + } while (assumed != old); + } + __syncthreads(); + + // NOTE: must take soi, as values for that thread are used... + if (sampleWithinWindow == soi) { + auto const method0_energy = shrMethod0EnergyAccum[lch]; + auto const val = shrMethod0EnergySamplePair[lch]; + int const max_sample = (val >> 32) & 0xffffffff; + float const max_energy = __uint_as_float(val & 0xffffffff); + float const max_energy_1 = + max_sample < nsamplesForCompute - 1 ? shrEnergyM0PerTS[lch * nsamplesForCompute + max_sample + 1] : 0.f; + float const position = nsamplesToAdd < nsamplesForCompute ? max_sample - soi : max_sample; + auto const sum = max_energy + max_energy_1; + // FIXME: for full comparison with cpu method 0 timing, + // need to correct by slew + // requires an accumulator -> more shared mem -> omit here unless + // really needed + float const time = + max_energy > 0.f && max_energy_1 > 0.f ? 25.f * (position + max_energy_1 / sum) : 25.f * position; + + // store method0 quantities to global mem + outputdid[gch] = id; + method0Energy[gch] = method0_energy; + method0Time[gch] = time; + +#ifdef HCAL_MAHI_GPUDEBUG + printf("tsTOT = %f tstrig = %f ts4Thresh = %f\n", shrEnergyM0TotalAccum[lch], energym0_per_ts_gain0, ts4Thresh); +#endif + + // check as in cpu version if mahi is not needed + // FIXME: KNOWN ISSUE: observed a problem when rawCharge and pedestal + // are basically equal and generate -0.00000... + // needs to be treated properly + if (!(shrEnergyM0TotalAccum[lch] > 0 && energym0_per_ts_gain0 > ts4Thresh)) { + // do not need to run mahi minimization + //outputEnergy[gch] = 0; energy already inited to 0 + outputChi2[gch] = -9999.f; + } + +#ifdef HCAL_MAHI_GPUDEBUG + printf("method0_energy = %f max_sample = %d max_energy = %f time = %f\n", + method0_energy, + max_sample, + max_energy, + time); +#endif + } + + // + // preparations for mahi fit + // + auto const amplitude = rawCharge - pedestalToUseForMethod0; + auto const noiseADC = (1. / std::sqrt(12)) * dfc; + auto const noisePhotoSq = amplitude > pedestalWidth ? (amplitude * fcByPE) : 0.f; + auto const noiseTerm = noiseADC * noiseADC + noisePhotoSq + pedestalWidth * pedestalWidth; + +#ifdef HCAL_MAHI_GPUDEBUG + printf( + "charrge(%d) = %f pedestal(%d) = %f dfc(%d) = %f pedestalWidth(%d) = %f noiseADC(%d) = %f noisPhoto(%d) = " + "%f\n", + sample, + rawCharge, + sample, + pedestalToUseForMethod0, + sample, + dfc, + sample, + pedestalWidth, + sample, + noiseADC, + sample, + noisePhotoSq); +#endif + + // store to global memory + amplitudesForChannel[sampleWithinWindow] = amplitude; + noiseTermsForChannel[sampleWithinWindow] = noiseTerm; + electronicNoiseTermsForChannel[sampleWithinWindow] = pedestalWidth; + } + + // TODO: need to add an array of offsets for pulses (a la activeBXs...) + // Assume for now 8 pulses + __global__ void kernel_prep_pulseMatrices_sameNumberOfSamples(float* pulseMatrices, + float* pulseMatricesM, + float* pulseMatricesP, + int const* pulseOffsets, + float const* amplitudes, + uint32_t const* idsf01HE, + uint32_t const* idsf5HB, + uint32_t const* idsf3HB, + uint32_t const nchannelsf01HE, + uint32_t const nchannelsf5HB, + uint32_t const nchannelsTotal, + int8_t const* soiSamples, + uint32_t const* recoPulseShapeIds, + float const* acc25nsVecValues, + float const* diff25nsItvlVecValues, + float const* accVarLenIdxMinusOneVecValues, + float const* diffVarItvlIdxMinusOneVecValues, + float const* accVarLenIdxZeroVecValues, + float const* diffVarItvlIdxZeroVecValues, + float const meanTime, + float const timeSigmaSiPM, + float const timeSigmaHPD, + int const maxDepthHB, + int const maxDepthHE, + int const maxPhiHE, + int const firstHBRing, + int const lastHBRing, + int const firstHERing, + int const lastHERing, + int const nEtaHB, + int const nEtaHE, + uint32_t const offsetForHashes, + bool const applyTimeSlew, + float const tzeroTimeSlew, + float const slopeTimeSlew, + float const tmaxTimeSlew) { + // indices + auto const ipulse = threadIdx.y; + auto const npulses = blockDim.y; + auto const sample = threadIdx.x; + auto const nsamples = blockDim.x; + auto const lch = threadIdx.z; + auto const gch = lch + blockIdx.x * blockDim.z; + auto const nchannelsf015 = nchannelsf01HE + nchannelsf5HB; + + if (gch >= nchannelsTotal) + return; + + // conditions + auto const id = gch < nchannelsf01HE + ? idsf01HE[gch] + : (gch < nchannelsf015 ? idsf5HB[gch - nchannelsf01HE] : idsf3HB[gch - nchannelsf015]); + //auto const id = gch >= nchannelsf01HE + // ? idsf5HB[gch - nchannelsf01HE] + // : idsf01HE[gch]; + auto const deltaT = gch >= nchannelsf01HE && gch < nchannelsf015 ? timeSigmaHPD : timeSigmaSiPM; + auto const did = DetId{id}; + auto const hashedId = + did.subdetId() == HcalBarrel + ? hcal::reconstruction::did2linearIndexHB(id, maxDepthHB, firstHBRing, lastHBRing, nEtaHB) + : hcal::reconstruction::did2linearIndexHE(id, maxDepthHE, maxPhiHE, firstHERing, lastHERing, nEtaHE) + + offsetForHashes; + auto const recoPulseShapeId = recoPulseShapeIds[hashedId]; + auto const* acc25nsVec = acc25nsVecValues + recoPulseShapeId * hcal::constants::maxPSshapeBin; + auto const* diff25nsItvlVec = diff25nsItvlVecValues + recoPulseShapeId * hcal::constants::maxPSshapeBin; + auto const* accVarLenIdxMinusOneVec = accVarLenIdxMinusOneVecValues + recoPulseShapeId * hcal::constants::nsPerBX; + auto const* diffVarItvlIdxMinusOneVec = + diffVarItvlIdxMinusOneVecValues + recoPulseShapeId * hcal::constants::nsPerBX; + auto const* accVarLenIdxZeroVec = accVarLenIdxZeroVecValues + recoPulseShapeId * hcal::constants::nsPerBX; + auto const* diffVarItvlIdxZeroVec = diffVarItvlIdxZeroVecValues + recoPulseShapeId * hcal::constants::nsPerBX; + + // offset output arrays + auto* pulseMatrix = pulseMatrices + nsamples * npulses * gch; + auto* pulseMatrixM = pulseMatricesM + nsamples * npulses * gch; + auto* pulseMatrixP = pulseMatricesP + nsamples * npulses * gch; + + // amplitude per ipulse + int const soi = soiSamples[gch]; + int const pulseOffset = pulseOffsets[ipulse]; + auto const amplitude = amplitudes[gch * nsamples + pulseOffset + soi]; + +#ifdef HCAL_MAHI_GPUDEBUG +#ifdef HCAL_MAHI_GPUDEBUG_FILTERDETID + if (id != DETID_TO_DEBUG) + return; +#endif +#endif + +#ifdef HCAL_MAHI_GPUDEBUG + if (sample == 0 && ipulse == 0) { + for (int i = 0; i < 8; i++) + printf("amplitude(%d) = %f\n", i, amplitudes[gch * nsamples + i]); + printf("acc25nsVec and diff25nsItvlVec for recoPulseShapeId = %u\n", recoPulseShapeId); + for (int i = 0; i < 256; i++) { + printf("acc25nsVec(%d) = %f diff25nsItvlVec(%d) = %f\n", i, acc25nsVec[i], i, diff25nsItvlVec[i]); + } + printf("accVarLenIdxZEROVec and accVarLenIdxMinusOneVec\n"); + for (int i = 0; i < 25; i++) { + printf("accVarLenIdxZEROVec(%d) = %f accVarLenIdxMinusOneVec(%d) = %f\n", + i, + accVarLenIdxZeroVec[i], + i, + accVarLenIdxMinusOneVec[i]); + } + printf("diffVarItvlIdxZEROVec and diffVarItvlIdxMinusOneVec\n"); + for (int i = 0; i < 25; i++) { + printf("diffVarItvlIdxZEROVec(%d) = %f diffVarItvlIdxMinusOneVec(%d) = %f\n", + i, + diffVarItvlIdxZeroVec[i], + i, + diffVarItvlIdxMinusOneVec[i]); + } + } +#endif + + auto t0 = meanTime; + if (applyTimeSlew) { + if (amplitude <= 1.0f) + t0 += hcal::reconstruction::compute_time_slew_delay(1.0, tzeroTimeSlew, slopeTimeSlew, tmaxTimeSlew); + else + t0 += hcal::reconstruction::compute_time_slew_delay(amplitude, tzeroTimeSlew, slopeTimeSlew, tmaxTimeSlew); + } + auto const t0m = -deltaT + t0; + auto const t0p = deltaT + t0; + +#ifdef HCAL_MAHI_GPUDEBUG + if (sample == 0 && ipulse == 0) { + printf("time values: %f %f %f\n", t0, t0m, t0p); + } + + if (sample == 0 && ipulse == 0) { + for (int i = 0; i < hcal::constants::maxSamples; i++) { + auto const value = hcal::reconstruction::compute_pulse_shape_value(t0, + i, + 0, + acc25nsVec, + diff25nsItvlVec, + accVarLenIdxMinusOneVec, + diffVarItvlIdxMinusOneVec, + accVarLenIdxZeroVec, + diffVarItvlIdxZeroVec); + printf("pulse(%d) = %f\n", i, value); + } + printf("\n"); + for (int i = 0; i < hcal::constants::maxSamples; i++) { + auto const value = hcal::reconstruction::compute_pulse_shape_value(t0p, + i, + 0, + acc25nsVec, + diff25nsItvlVec, + accVarLenIdxMinusOneVec, + diffVarItvlIdxMinusOneVec, + accVarLenIdxZeroVec, + diffVarItvlIdxZeroVec); + printf("pulseP(%d) = %f\n", i, value); + } + printf("\n"); + for (int i = 0; i < hcal::constants::maxSamples; i++) { + auto const value = hcal::reconstruction::compute_pulse_shape_value(t0m, + i, + 0, + acc25nsVec, + diff25nsItvlVec, + accVarLenIdxMinusOneVec, + diffVarItvlIdxMinusOneVec, + accVarLenIdxZeroVec, + diffVarItvlIdxZeroVec); + printf("pulseM(%d) = %f\n", i, value); + } + } +#endif + + // FIXME: shift should be treated properly, + // here assume 8 time slices and 8 samples + auto const shift = 4 - soi; // as in cpu version! + + // auto const offset = ipulse - soi; + // auto const idx = sample - offset; + int32_t const idx = sample - pulseOffset; + auto const value = idx >= 0 && idx < nsamples + ? hcal::reconstruction::compute_pulse_shape_value(t0, + idx, + shift, + acc25nsVec, + diff25nsItvlVec, + accVarLenIdxMinusOneVec, + diffVarItvlIdxMinusOneVec, + accVarLenIdxZeroVec, + diffVarItvlIdxZeroVec) + : 0; + auto const value_t0m = idx >= 0 && idx < nsamples + ? hcal::reconstruction::compute_pulse_shape_value(t0m, + idx, + shift, + acc25nsVec, + diff25nsItvlVec, + accVarLenIdxMinusOneVec, + diffVarItvlIdxMinusOneVec, + accVarLenIdxZeroVec, + diffVarItvlIdxZeroVec) + : 0; + auto const value_t0p = idx >= 0 && idx < nsamples + ? hcal::reconstruction::compute_pulse_shape_value(t0p, + idx, + shift, + acc25nsVec, + diff25nsItvlVec, + accVarLenIdxMinusOneVec, + diffVarItvlIdxMinusOneVec, + accVarLenIdxZeroVec, + diffVarItvlIdxZeroVec) + : 0; + + // store to global + if (amplitude > 0.f) { + pulseMatrix[ipulse * nsamples + sample] = value; + pulseMatrixM[ipulse * nsamples + sample] = value_t0m; + pulseMatrixP[ipulse * nsamples + sample] = value_t0p; + } else { + pulseMatrix[ipulse * nsamples + sample] = 0.f; + pulseMatrixM[ipulse * nsamples + sample] = 0.f; + pulseMatrixP[ipulse * nsamples + sample] = 0.f; + } + } + + template + __forceinline__ __device__ void update_covariance( + calo::multifit::ColumnVector const& resultAmplitudesVector, + calo::multifit::MapSymM& covarianceMatrix, + Eigen::Map> const& pulseMatrix, + Eigen::Map> const& pulseMatrixM, + Eigen::Map> const& pulseMatrixP) { + CMS_UNROLL_LOOP + for (int ipulse = 0; ipulse < NPULSES; ipulse++) { + auto const resultAmplitude = resultAmplitudesVector(ipulse); + if (resultAmplitude == 0) + continue; + +#ifdef HCAL_MAHI_GPUDEBUG + printf("pulse cov array for ibx = %d\n", ipulse); +#endif + + // preload a column + float pmcol[NSAMPLES], pmpcol[NSAMPLES], pmmcol[NSAMPLES]; + CMS_UNROLL_LOOP + for (int counter = 0; counter < NSAMPLES; counter++) { + pmcol[counter] = __ldg(&pulseMatrix.coeffRef(counter, ipulse)); + pmpcol[counter] = __ldg(&pulseMatrixP.coeffRef(counter, ipulse)); + pmmcol[counter] = __ldg(&pulseMatrixM.coeffRef(counter, ipulse)); + } + + auto const ampl2 = resultAmplitude * resultAmplitude; + CMS_UNROLL_LOOP + for (int col = 0; col < NSAMPLES; col++) { + auto const valueP_col = pmpcol[col]; + auto const valueM_col = pmmcol[col]; + auto const value_col = pmcol[col]; + auto const tmppcol = valueP_col - value_col; + auto const tmpmcol = valueM_col - value_col; + + // diagonal + auto tmp_value = 0.5 * (tmppcol * tmppcol + tmpmcol * tmpmcol); + covarianceMatrix(col, col) += ampl2 * tmp_value; + + // FIXME: understand if this actually gets unrolled + CMS_UNROLL_LOOP + for (int row = col + 1; row < NSAMPLES; row++) { + float const valueP_row = pmpcol[row]; //pulseMatrixP(j, ipulseReal); + float const value_row = pmcol[row]; //pulseMatrix(j, ipulseReal); + float const valueM_row = pmmcol[row]; //pulseMatrixM(j, ipulseReal); + + float tmpprow = valueP_row - value_row; + float tmpmrow = valueM_row - value_row; + + auto const covValue = 0.5 * (tmppcol * tmpprow + tmpmcol * tmpmrow); + + covarianceMatrix(row, col) += ampl2 * covValue; + } + } + } + } + + template + __global__ void kernel_minimize(float* outputEnergy, + float* outputChi2, + float const* __restrict__ inputAmplitudes, + float const* __restrict__ pulseMatrices, + float const* __restrict__ pulseMatricesM, + float const* __restrict__ pulseMatricesP, + int const* __restrict__ pulseOffsetValues, + float const* __restrict__ noiseTerms, + float const* __restrict__ electronicNoiseTerms, + int8_t const* __restrict__ soiSamples, + float const* __restrict__ noiseCorrelationValues, + float const* __restrict__ pedestalWidths, + float const* __restrict__ effectivePedestalWidths, + bool const useEffectivePedestals, + uint32_t const* __restrict__ idsf01HE, + uint32_t const* __restrict__ idsf5HB, + uint32_t const* __restrict__ idsf3HB, + float const* __restrict__ gainValues, + float const* __restrict__ respCorrectionValues, + uint32_t const nchannelsf01HE, + uint32_t const nchannelsf5HB, + uint32_t const nchannelsTotal, + uint32_t const offsetForHashes, + int const maxDepthHB, + int const maxDepthHE, + int const maxPhiHE, + int const firstHBRing, + int const lastHBRing, + int const firstHERing, + int const lastHERing, + int const nEtaHB, + int const nEtaHE) { + // can be relaxed if needed - minor updates are needed in that case! + static_assert(NPULSES == NSAMPLES); + + // indices + auto const gch = threadIdx.x + blockIdx.x * blockDim.x; + auto const nchannelsf015 = nchannelsf01HE + nchannelsf5HB; + if (gch >= nchannelsTotal) + return; + + // if chi2 is set to -9999 do not run minimization + if (outputChi2[gch] == -9999.f) + return; + + // configure shared mem + extern __shared__ char shrmem[]; + float* shrMatrixLFnnlsStorage = + reinterpret_cast(shrmem) + calo::multifit::MapSymM::total * threadIdx.x; + float* shrAtAStorage = reinterpret_cast(shrmem) + + calo::multifit::MapSymM::total * (threadIdx.x + blockDim.x); + + // conditions for pedestal widths + auto const id = gch < nchannelsf01HE + ? idsf01HE[gch] + : (gch < nchannelsf015 ? idsf5HB[gch - nchannelsf01HE] : idsf3HB[gch - nchannelsf015]); + auto const did = DetId{id}; + auto const hashedId = + did.subdetId() == HcalBarrel + ? hcal::reconstruction::did2linearIndexHB(id, maxDepthHB, firstHBRing, lastHBRing, nEtaHB) + : hcal::reconstruction::did2linearIndexHE(id, maxDepthHE, maxPhiHE, firstHERing, lastHERing, nEtaHE) + + offsetForHashes; + + auto const* pedestalWidthsForChannel = useEffectivePedestals && (gch < nchannelsf01HE || gch >= nchannelsf015) + ? effectivePedestalWidths + hashedId * 4 + : pedestalWidths + hashedId * 4; + auto const averagePedestalWidth2 = 0.25 * (pedestalWidthsForChannel[0] * pedestalWidthsForChannel[0] + + pedestalWidthsForChannel[1] * pedestalWidthsForChannel[1] + + pedestalWidthsForChannel[2] * pedestalWidthsForChannel[2] + + pedestalWidthsForChannel[3] * pedestalWidthsForChannel[3]); + + auto const* gains = gainValues + hashedId * 4; + // FIXME on cpu ts 0 capid was used - does it make any difference + auto const gain = gains[0]; + auto const respCorrection = respCorrectionValues[hashedId]; + + auto const noisecorr = noiseCorrelationValues[hashedId]; + +#ifdef HCAL_MAHI_GPUDEBUG +#ifdef HCAL_MAHI_GPUDEBUG_FILTERDETID + if (id != DETID_TO_DEBUG) + return; +#endif +#endif + + /* + // TODO: provide this properly + int const soi = soiSamples[gch]; + */ + calo::multifit::ColumnVector pulseOffsets; + CMS_UNROLL_LOOP + for (int i = 0; i < NPULSES; ++i) + pulseOffsets(i) = i; + // pulseOffsets(i) = pulseOffsetValues[i] - pulseOffsetValues[0]; + + // output amplitudes/weights + calo::multifit::ColumnVector resultAmplitudesVector = calo::multifit::ColumnVector::Zero(); + + // map views + Eigen::Map> inputAmplitudesView{inputAmplitudes + gch * NSAMPLES}; + Eigen::Map> noiseTermsView{noiseTerms + gch * NSAMPLES}; + Eigen::Map> noiseElectronicView{electronicNoiseTerms + + gch * NSAMPLES}; + Eigen::Map> glbPulseMatrixMView{pulseMatricesM + + gch * NSAMPLES * NPULSES}; + Eigen::Map> glbPulseMatrixPView{pulseMatricesP + + gch * NSAMPLES * NPULSES}; + Eigen::Map> glbPulseMatrixView{pulseMatrices + + gch * NSAMPLES * NPULSES}; + +#ifdef HCAL_MAHI_GPUDEBUG + for (int i = 0; i < NSAMPLES; i++) + printf("inputValues(%d) = %f noiseTerms(%d) = %f\n", i, inputAmplitudesView(i), i, noiseTermsView(i)); + for (int i = 0; i < NSAMPLES; i++) { + for (int j = 0; j < NPULSES; j++) + printf("%f ", glbPulseMatrixView(i, j)); + printf("\n"); + } + printf("\n"); + for (int i = 0; i < NSAMPLES; i++) { + for (int j = 0; j < NPULSES; j++) + printf("%f ", glbPulseMatrixMView(i, j)); + printf("\n"); + } + printf("\n"); + for (int i = 0; i < NSAMPLES; i++) { + for (int j = 0; j < NPULSES; j++) + printf("%f ", glbPulseMatrixPView(i, j)); + printf("\n"); + } +#endif + + int npassive = 0; + float chi2 = 0, previous_chi2 = 0.f, chi2_2itersback = 0.f; + for (int iter = 1; iter < nMaxItersMin; iter++) { + //float covarianceMatrixStorage[MapSymM::total]; + // NOTE: only works when NSAMPLES == NPULSES + // if does not hold -> slightly rearrange shared mem to still reuse + // shared memory + float* covarianceMatrixStorage = shrMatrixLFnnlsStorage; + calo::multifit::MapSymM covarianceMatrix{covarianceMatrixStorage}; + CMS_UNROLL_LOOP + for (int counter = 0; counter < calo::multifit::MapSymM::total; counter++) + covarianceMatrixStorage[counter] = (noisecorr != 0.f) ? 0.f : averagePedestalWidth2; + CMS_UNROLL_LOOP + for (unsigned int counter = 0; counter < calo::multifit::MapSymM::stride; counter++) { + covarianceMatrix(counter, counter) += noiseTermsView.coeffRef(counter); + if (counter != 0) + covarianceMatrix(counter, counter - 1) += noisecorr * __ldg(&noiseElectronicView.coeffRef(counter - 1)) * + __ldg(&noiseElectronicView.coeffRef(counter)); + } + + // update covariance matrix + update_covariance( + resultAmplitudesVector, covarianceMatrix, glbPulseMatrixView, glbPulseMatrixMView, glbPulseMatrixPView); + +#ifdef HCAL_MAHI_GPUDEBUG + printf("covariance matrix\n"); + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 8; j++) + printf("%f ", covarianceMatrix(i, j)); + printf("\n"); + } +#endif + + // compute Cholesky Decomposition L matrix + //matrixDecomposition.compute(covarianceMatrix); + //auto const& matrixL = matrixDecomposition.matrixL(); + float matrixLStorage[calo::multifit::MapSymM::total]; + calo::multifit::MapSymM matrixL{matrixLStorage}; + calo::multifit::compute_decomposition_unrolled(matrixL, covarianceMatrix); + + // + // replace eigen + // + //auto const& A = matrixDecomposition + // .matrixL() + // .solve(pulseMatrixView); + calo::multifit::ColMajorMatrix A; + calo::multifit::solve_forward_subst_matrix(A, glbPulseMatrixView, matrixL); + + // + // remove eigen + // + //auto const& b = matrixL + // .solve(inputAmplitudesView); + // + float reg_b[NSAMPLES]; + calo::multifit::solve_forward_subst_vector(reg_b, inputAmplitudesView, matrixL); + + // TODO: we do not really need to change these matrcies + // will be fixed in the optimized version + //ColMajorMatrix AtA = A.transpose() * A; + //ColumnVector Atb = A.transpose() * b; + //ColMajorMatrix AtA; + //float AtAStorage[MapSymM::total]; + calo::multifit::MapSymM AtA{shrAtAStorage}; + calo::multifit::ColumnVector Atb; + CMS_UNROLL_LOOP + for (int icol = 0; icol < NPULSES; icol++) { + float reg_ai[NSAMPLES]; + + // load column icol + CMS_UNROLL_LOOP + for (int counter = 0; counter < NSAMPLES; counter++) + reg_ai[counter] = A(counter, icol); + + // compute diagonal + float sum = 0.f; + CMS_UNROLL_LOOP + for (int counter = 0; counter < NSAMPLES; counter++) + sum += reg_ai[counter] * reg_ai[counter]; + + // store + AtA(icol, icol) = sum; + + // go thru the other columns + CMS_UNROLL_LOOP + for (int j = icol + 1; j < NPULSES; j++) { + // load column j + float reg_aj[NSAMPLES]; + CMS_UNROLL_LOOP + for (int counter = 0; counter < NSAMPLES; counter++) + reg_aj[counter] = A(counter, j); + + // accum + float sum = 0.f; + CMS_UNROLL_LOOP + for (int counter = 0; counter < NSAMPLES; counter++) + sum += reg_aj[counter] * reg_ai[counter]; + + // store + //AtA(icol, j) = sum; + AtA(j, icol) = sum; + } + + // Atb accum + float sum_atb = 0; + CMS_UNROLL_LOOP + for (int counter = 0; counter < NSAMPLES; counter++) + sum_atb += reg_ai[counter] * reg_b[counter]; + + // store atb + Atb(icol) = sum_atb; + } + +#ifdef HCAL_MAHI_GPUDEBUG + printf("AtA\n"); + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 8; j++) + printf("%f ", AtA(i, j)); + printf("\n"); + } + printf("Atb\n"); + for (int i = 0; i < 8; i++) + printf("%f ", Atb(i)); + printf("\n"); + printf("result Amplitudes before nnls\n"); + for (int i = 0; i < 8; i++) + printf("%f ", resultAmplitudesVector(i)); + printf("\n"); +#endif + + // for fnnls + calo::multifit::MapSymM matrixLForFnnls{shrMatrixLFnnlsStorage}; + + // run fast nnls + calo::multifit::fnnls( + AtA, Atb, resultAmplitudesVector, npassive, pulseOffsets, matrixLForFnnls, nnlsThresh, nMaxItersNNLS, 10, 10); + +#ifdef HCAL_MAHI_GPUDEBUG + printf("result Amplitudes\n"); + for (int i = 0; i < 8; i++) + printf("resultAmplitudes(%d) = %f\n", i, resultAmplitudesVector(i)); +#endif + + calo::multifit::calculateChiSq(matrixL, glbPulseMatrixView, resultAmplitudesVector, inputAmplitudesView, chi2); + + auto const deltaChi2 = std::abs(chi2 - previous_chi2); + if (chi2 == chi2_2itersback && chi2 < previous_chi2) + break; + + // update + chi2_2itersback = previous_chi2; + previous_chi2 = chi2; + + // exit condition + if (deltaChi2 < deltaChi2Threashold) + break; + } + +#ifdef HCAL_MAHI_GPUDEBUG + for (int i = 0; i < NPULSES; i++) + printf("pulseOffsets(%d) = %d outputAmplitudes(%d) = %f\n", i, pulseOffsets(i), i, resultAmplitudesVector(i)); + printf("chi2 = %f\n", chi2); +#endif + + outputChi2[gch] = chi2; + auto const idx_for_energy = std::abs(pulseOffsetValues[0]); + outputEnergy[gch] = (gain * resultAmplitudesVector(idx_for_energy)) * respCorrection; + /* + CMS_UNROLL_LOOP + for (int i=0; i(inputGPU.f01HEDigis.stride); + auto const f5nsamples = compute_nsamples(inputGPU.f5HBDigis.stride); + auto const f3nsamples = compute_nsamples(inputGPU.f3HBDigis.stride); + int constexpr windowSize = 8; + int const startingSample = f01nsamples - windowSize; + assert(startingSample == 0 || startingSample == 2); + if (inputGPU.f01HEDigis.stride > 0 && inputGPU.f5HBDigis.stride > 0) + assert(f01nsamples == f5nsamples); + if (inputGPU.f01HEDigis.stride > 0 && inputGPU.f3HBDigis.stride > 0) + assert(f01nsamples == f3nsamples); + + dim3 threadsPerBlock{windowSize, configParameters.kprep1dChannelsPerBlock}; + int blocks = static_cast(threadsPerBlock.y) > totalChannels + ? 1 + : (totalChannels + threadsPerBlock.y - 1) / threadsPerBlock.y; + int nbytesShared = + ((2 * windowSize + 2) * sizeof(float) + sizeof(uint64_t)) * configParameters.kprep1dChannelsPerBlock; + hcal::mahi::kernel_prep1d_sameNumberOfSamples<<>>( + scratch.amplitudes.get(), + scratch.noiseTerms.get(), + scratch.electronicNoiseTerms.get(), + outputGPU.recHits.energy.get(), + outputGPU.recHits.chi2.get(), + inputGPU.f01HEDigis.data.get(), + inputGPU.f5HBDigis.data.get(), + inputGPU.f3HBDigis.data.get(), + inputGPU.f01HEDigis.ids.get(), + inputGPU.f5HBDigis.ids.get(), + inputGPU.f3HBDigis.ids.get(), + inputGPU.f01HEDigis.stride, + inputGPU.f5HBDigis.stride, + inputGPU.f3HBDigis.stride, + inputGPU.f01HEDigis.size, + inputGPU.f5HBDigis.size, + inputGPU.f5HBDigis.npresamples.get(), + scratch.soiSamples.get(), + outputGPU.recHits.energyM0.get(), + outputGPU.recHits.timeM0.get(), + outputGPU.recHits.did.get(), + totalChannels, + conditions.recoParams.param1, + conditions.recoParams.param2, + conditions.qieCoders.offsets, + conditions.qieCoders.slopes, + conditions.qieTypes.values, + conditions.pedestalWidths.values, + conditions.effectivePedestalWidths.values, + conditions.pedestals.values, + conditions.convertedEffectivePedestals ? conditions.convertedEffectivePedestals->values + : conditions.pedestals.values, + configParameters.useEffectivePedestals, + conditions.sipmParameters.type, + conditions.sipmParameters.fcByPE, + conditions.sipmCharacteristics.parLin1, + conditions.sipmCharacteristics.parLin2, + conditions.sipmCharacteristics.parLin3, + conditions.gains.values, + conditions.respCorrs.values, + conditions.topology->maxDepthHB(), + conditions.topology->maxDepthHE(), + conditions.recConstants->getNPhi(1) > hcal::reconstruction::IPHI_MAX ? conditions.recConstants->getNPhi(1) + : hcal::reconstruction::IPHI_MAX, + conditions.topology->firstHBRing(), + conditions.topology->lastHBRing(), + conditions.topology->firstHERing(), + conditions.topology->lastHERing(), + conditions.recConstants->getEtaRange(0).second - conditions.recConstants->getEtaRange(0).first + 1, + conditions.topology->firstHERing() > conditions.topology->lastHERing() + ? 0 + : (conditions.topology->lastHERing() - conditions.topology->firstHERing() + 1), + configParameters.sipmQTSShift, + configParameters.sipmQNTStoSum, + configParameters.firstSampleShift, + conditions.offsetForHashes, + configParameters.ts4Thresh, + startingSample); + cudaCheck(cudaGetLastError()); + + // 1024 is the max threads per block for gtx1080 + // FIXME: take this from cuda service or something like that + uint32_t const channelsPerBlock = 1024 / (windowSize * conditions.pulseOffsetsHost.size()); + dim3 threadsPerBlock2{windowSize, static_cast(conditions.pulseOffsetsHost.size()), channelsPerBlock}; + int blocks2 = + threadsPerBlock2.z > totalChannels ? 1 : (totalChannels + threadsPerBlock2.z - 1) / threadsPerBlock2.z; + +#ifdef HCAL_MAHI_CPUDEBUG + std::cout << "threads: " << threadsPerBlock2.x << " " << threadsPerBlock2.y << " " << threadsPerBlock2.z + << std::endl; + std::cout << "blocks: " << blocks2 << std::endl; +#endif + + hcal::mahi::kernel_prep_pulseMatrices_sameNumberOfSamples<<>>( + scratch.pulseMatrices.get(), + scratch.pulseMatricesM.get(), + scratch.pulseMatricesP.get(), + conditions.pulseOffsets.values, + scratch.amplitudes.get(), + inputGPU.f01HEDigis.ids.get(), + inputGPU.f5HBDigis.ids.get(), + inputGPU.f3HBDigis.ids.get(), + inputGPU.f01HEDigis.size, + inputGPU.f5HBDigis.size, + totalChannels, + scratch.soiSamples.get(), + conditions.recoParams.ids, + conditions.recoParams.acc25nsVec, + conditions.recoParams.diff25nsItvlVec, + conditions.recoParams.accVarLenIdxMinusOneVec, + conditions.recoParams.diffVarItvlIdxMinusOneVec, + conditions.recoParams.accVarLenIdxZEROVec, + conditions.recoParams.diffVarItvlIdxZEROVec, + configParameters.meanTime, + configParameters.timeSigmaSiPM, + configParameters.timeSigmaHPD, + conditions.topology->maxDepthHB(), + conditions.topology->maxDepthHE(), + conditions.recConstants->getNPhi(1) > hcal::reconstruction::IPHI_MAX ? conditions.recConstants->getNPhi(1) + : hcal::reconstruction::IPHI_MAX, + conditions.topology->firstHBRing(), + conditions.topology->lastHBRing(), + conditions.topology->firstHERing(), + conditions.topology->lastHERing(), + conditions.recConstants->getEtaRange(0).second - conditions.recConstants->getEtaRange(0).first + 1, + conditions.topology->firstHERing() > conditions.topology->lastHERing() + ? 0 + : (conditions.topology->lastHERing() - conditions.topology->firstHERing() + 1), + conditions.offsetForHashes, + configParameters.applyTimeSlew, + configParameters.tzeroTimeSlew, + configParameters.slopeTimeSlew, + configParameters.tmaxTimeSlew); + cudaCheck(cudaGetLastError()); + + // number of samples is checked in above assert + if (conditions.pulseOffsetsHost.size() == 8u) { + // FIXME: provide constants from configuration + uint32_t threadsPerBlock = configParameters.kernelMinimizeThreads[0]; + uint32_t blocks = threadsPerBlock > totalChannels ? 1 : (totalChannels + threadsPerBlock - 1) / threadsPerBlock; + auto const nbytesShared = 2 * threadsPerBlock * calo::multifit::MapSymM::total * sizeof(float); + hcal::mahi::kernel_minimize<8, 8><<>>( + outputGPU.recHits.energy.get(), + outputGPU.recHits.chi2.get(), + scratch.amplitudes.get(), + scratch.pulseMatrices.get(), + scratch.pulseMatricesM.get(), + scratch.pulseMatricesP.get(), + conditions.pulseOffsets.values, + scratch.noiseTerms.get(), + scratch.electronicNoiseTerms.get(), + scratch.soiSamples.get(), + conditions.sipmParameters.auxi2, + conditions.pedestalWidths.values, + conditions.effectivePedestalWidths.values, + configParameters.useEffectivePedestals, + inputGPU.f01HEDigis.ids.get(), + inputGPU.f5HBDigis.ids.get(), + inputGPU.f3HBDigis.ids.get(), + conditions.gains.values, + conditions.respCorrs.values, + inputGPU.f01HEDigis.size, + inputGPU.f5HBDigis.size, + totalChannels, + conditions.offsetForHashes, + conditions.topology->maxDepthHB(), + conditions.topology->maxDepthHE(), + conditions.recConstants->getNPhi(1) > hcal::reconstruction::IPHI_MAX ? conditions.recConstants->getNPhi(1) + : hcal::reconstruction::IPHI_MAX, + conditions.topology->firstHBRing(), + conditions.topology->lastHBRing(), + conditions.topology->firstHERing(), + conditions.topology->lastHERing(), + conditions.recConstants->getEtaRange(0).second - conditions.recConstants->getEtaRange(0).first + 1, + conditions.topology->firstHERing() > conditions.topology->lastHERing() + ? 0 + : (conditions.topology->lastHERing() - conditions.topology->firstHERing() + 1)); + } else { + throw cms::Exception("Invalid MahiGPU configuration") + << "Currently support only 8 pulses and 8 time samples and provided: " << f01nsamples << " samples and " + << conditions.pulseOffsetsHost.size() << " pulses" << std::endl; + } + } + + } // namespace reconstruction +} // namespace hcal diff --git a/RecoLocalCalo/HcalRecProducers/src/SimpleAlgoGPU.h b/RecoLocalCalo/HcalRecProducers/src/SimpleAlgoGPU.h new file mode 100644 index 0000000000000..c0bb499b517a7 --- /dev/null +++ b/RecoLocalCalo/HcalRecProducers/src/SimpleAlgoGPU.h @@ -0,0 +1,19 @@ +#ifndef RecoLocalCalo_HcalRecProducers_src_SimpleAlgoGPU_h +#define RecoLocalCalo_HcalRecProducers_src_SimpleAlgoGPU_h + +#include "DeclsForKernels.h" + +namespace hcal { + namespace reconstruction { + + void entryPoint(InputDataGPU const&, + OutputDataGPU&, + ConditionsProducts const&, + ScratchDataGPU&, + ConfigParameters const&, + cudaStream_t); + + } +} // namespace hcal + +#endif // RecoLocalCalo_HcalRecProducers_src_SimpleAlgoGPU_h diff --git a/RecoLocalCalo/HcalRecProducers/test/make_GPUvsCPU_HCAL_plots.py b/RecoLocalCalo/HcalRecProducers/test/make_GPUvsCPU_HCAL_plots.py new file mode 100644 index 0000000000000..2b97efc2f2d8c --- /dev/null +++ b/RecoLocalCalo/HcalRecProducers/test/make_GPUvsCPU_HCAL_plots.py @@ -0,0 +1,28 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("PLOT") + +process.load("FWCore.MessageService.MessageLogger_cfi") +process.options = cms.untracked.PSet( + wantSummary = cms.untracked.bool(False) +) + +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_hlt_relval', '') + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) +process.MessageLogger.cerr.FwkReport.reportEvery = 500 + +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring('file:GPUvsCPU_HCAL_rechits.root') +) + +process.comparisonPlots = cms.EDAnalyzer('HCALGPUAnalyzer') + +process.TFileService = cms.Service('TFileService', + fileName = cms.string('GPUvsCPU_HCAL_plots.root') +) + +process.path = cms.Path(process.comparisonPlots) diff --git a/RecoLocalCalo/HcalRecProducers/test/make_GPUvsCPU_HCAL_rechits.py b/RecoLocalCalo/HcalRecProducers/test/make_GPUvsCPU_HCAL_rechits.py new file mode 100644 index 0000000000000..32d4104a842ef --- /dev/null +++ b/RecoLocalCalo/HcalRecProducers/test/make_GPUvsCPU_HCAL_rechits.py @@ -0,0 +1,152 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.StandardSequences.Eras import eras +#from Configuration.ProcessModifiers.gpu_cff import gpu + +process = cms.Process('RECOgpu', eras.Run2_2018) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('HeterogeneousCore.CUDAServices.CUDAService_cfi') + +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_hlt_relval', '') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1000) +) + +#----------------------------------------- +# INPUT +#----------------------------------------- + +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring('/store/data/Run2018D/EphemeralHLTPhysics1/RAW/v1/000/323/775/00000/A27DFA33-8FCB-BE42-A2D2-1A396EEE2B6E.root') +) + +process.hltGetRaw = cms.EDAnalyzer( "HLTGetRaw", + RawDataCollection = cms.InputTag( "rawDataCollector" ) +) + +process.input = cms.Path( process.hltGetRaw ) + +#----------------------------------------- +# CMSSW/Hcal non-DQM Related Module import +#----------------------------------------- + +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load("RecoLocalCalo.Configuration.hcalLocalReco_cff") +process.load("EventFilter.HcalRawToDigi.HcalRawToDigi_cfi") +process.load("RecoLuminosity.LumiProducer.bunchSpacingProducer_cfi") + +process.hcalDigis.InputLabel = cms.InputTag("rawDataCollector") + +#----------------------------------------- +# CMSSW/Hcal GPU related files +#----------------------------------------- + +process.load("RecoLocalCalo.HcalRecProducers.hbheRecHitProducerGPUTask_cff") +process.load("RecoLocalCalo.HcalRecProducers.hcalCPURecHitsProducer_cfi") +process.hcalCPURecHitsProducer.recHitsM0LabelIn = cms.InputTag("hbheRecHitProducerGPU","") +process.hcalCPURecHitsProducer.recHitsM0LabelOut = cms.string("") + +#----------------------------------------- +# Temporary customization (things not implemented on the GPU) +#----------------------------------------- + +## the one below is taken directly from the DB, regard M0 +#process.hbheprereco.algorithm.correctForPhaseContainment = cms.bool(False) + +## do always 8 pulse +process.hbheprereco.algorithm.chiSqSwitch = cms.double(-1) + +## to match hard coded setting (will be fixed on CPU) +process.hbheprereco.algorithm.nMaxItersMin = cms.int32(50) + +#----------------------------------------- +# Final Custmization for Run3 +#----------------------------------------- + +# we will not run arrival Time at HLT +process.hbheprereco.algorithm.calculateArrivalTime = cms.bool(False) + +## we do not need this +process.hbheprereco.algorithm.applyLegacyHBMCorrection = cms.bool(False) + +# we only run Mahi at HLT +process.hbheprereco.algorithm.useM3 = cms.bool(False) + +# we will not have the HPD noise flags in Run3, as will be all siPM +process.hbheprereco.setLegacyFlagsQIE8 = cms.bool(False) +process.hbheprereco.setNegativeFlagsQIE8 = cms.bool(False) +process.hbheprereco.setNoiseFlagsQIE8 = cms.bool(False) +process.hbheprereco.setPulseShapeFlagsQIE8 = cms.bool(False) + +# for testing M0 only +##process.hbheprereco.algorithm.useMahi = cms.bool(False) + +#----------------------------------------- +# OUTPUT +#----------------------------------------- + +#process.out = cms.OutputModule("AsciiOutputModule", +# outputCommands = cms.untracked.vstring( +# 'keep *_*_*_*', +# ), +# verbosity = cms.untracked.uint32(0) +#) + +process.out = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string("GPUvsCPU_HCAL_rechits.root") +) + +#--------------- + +process.finalize = cms.EndPath(process.out) + +process.bunchSpacing = cms.Path( + process.bunchSpacingProducer +) + +#----------------------------------------- +# gpu test +#----------------------------------------- + +process.digiPathCPU = cms.Path( + process.hcalDigis +) + +process.recoPathCPU = cms.Path( + process.hbheprereco +) + +#--------------- + +## hcalCPUDigisProducer <-- this convert the GPU digi on cpu (for dqm) +process.recoPathGPU = cms.Path( + process.hbheRecHitProducerGPUSequence + * process.hcalCPURecHitsProducer +) + +#--------------- + +process.schedule = cms.Schedule( + process.input, + process.digiPathCPU, + process.recoPathCPU, + process.recoPathGPU, + process.finalize +) + +process.options = cms.untracked.PSet( + numberOfThreads = cms.untracked.uint32(8), + numberOfStreams = cms.untracked.uint32(8), + SkipEvent = cms.untracked.vstring('ProductNotFound'), + wantSummary = cms.untracked.bool(True) +) + +# report CUDAService messages +process.MessageLogger.cerr.FwkReport.reportEvery = 100 +process.MessageLogger.categories.append("CUDAService") diff --git a/RecoLocalFastTime/FTLRecProducers/python/mtdRecHits_cfi.py b/RecoLocalFastTime/FTLRecProducers/python/mtdRecHits_cfi.py index 6c86ef07a3515..4bdc83a8008df 100644 --- a/RecoLocalFastTime/FTLRecProducers/python/mtdRecHits_cfi.py +++ b/RecoLocalFastTime/FTLRecProducers/python/mtdRecHits_cfi.py @@ -14,7 +14,7 @@ ) from Configuration.Eras.Modifier_phase2_etlV4_cff import phase2_etlV4 -phase2_etlV4.toModify(_endcapAlgo, thresholdToKeep = 0.005, calibrationConstant = 0.001 ) +phase2_etlV4.toModify(_endcapAlgo, thresholdToKeep = 0.005, calibrationConstant = 0.015 ) mtdRecHits = cms.EDProducer( "MTDRecHitProducer", diff --git a/RecoLocalMuon/CSCEfficiency/src/CSCEfficiency.cc b/RecoLocalMuon/CSCEfficiency/src/CSCEfficiency.cc index 1391d5b91514f..d4db44e530429 100644 --- a/RecoLocalMuon/CSCEfficiency/src/CSCEfficiency.cc +++ b/RecoLocalMuon/CSCEfficiency/src/CSCEfficiency.cc @@ -791,6 +791,7 @@ void CSCEfficiency::fillWG_info(edm::Handle &wires, edm:: } void CSCEfficiency::fillStrips_info(edm::Handle &strips) { //---- STRIPS + const float threshold = 13.3; for (CSCStripDigiCollection::DigiRangeIterator j = strips->begin(); j != strips->end(); j++) { CSCDetId id = (CSCDetId)(*j).first; int largestADCValue = -1; @@ -801,24 +802,18 @@ void CSCEfficiency::fillStrips_info(edm::Handle &strips) int myStrip = digiItr->getStrip(); std::vector myADCVals = digiItr->getADCCounts(); float thisPedestal = 0.5 * (float)(myADCVals[0] + myADCVals[1]); - float threshold = 13.3; - float diff = 0.; float peakADC = -1000.; - for (unsigned int iCount = 0; iCount < myADCVals.size(); iCount++) { - diff = (float)myADCVals[iCount] - thisPedestal; + for (int myADCVal : myADCVals) { + float diff = (float)myADCVal - thisPedestal; if (diff > threshold) { - if (myADCVals[iCount] > largestADCValue) { - largestADCValue = myADCVals[iCount]; - } - } - if (diff > threshold && diff > peakADC) { - peakADC = diff; + if (myADCVal > largestADCValue) + largestADCValue = myADCVal; + if (diff > peakADC) + peakADC = diff; } } if (largestADCValue > maxADC) { // FIX IT!!! - maxADC = largestADCValue; std::pair LayerSignal(myStrip, peakADC); - //---- AllStrips contains basic information about strips //---- (strip number and peak signal for most significant strip in the layer) allStrips[id.endcap() - 1][id.station() - 1][id.ring() - 1][id.chamber() - 1][id.layer() - 1].clear(); diff --git a/RecoLocalMuon/CSCRecHitD/python/cscRecHitD_cfi.py b/RecoLocalMuon/CSCRecHitD/python/cscRecHitD_cfi.py index 29f5e90bf9e25..baa741d624580 100644 --- a/RecoLocalMuon/CSCRecHitD/python/cscRecHitD_cfi.py +++ b/RecoLocalMuon/CSCRecHitD/python/cscRecHitD_cfi.py @@ -28,9 +28,9 @@ CSCWireClusterDeltaT = cms.int32(1), # # wire time window used for reconstruction - CSCUseReducedWireTimeWindow = cms.bool(False), - CSCWireTimeWindowLow = cms.int32(0), - CSCWireTimeWindowHigh = cms.int32(15), + CSCUseReducedWireTimeWindow = cms.bool(True), + CSCWireTimeWindowLow = cms.int32(5), + CSCWireTimeWindowHigh = cms.int32(11), # # Calibration info: CSCUseCalibrations = cms.bool(True), diff --git a/RecoLocalMuon/CSCRecHitD/python/customRecHitBuilder.py b/RecoLocalMuon/CSCRecHitD/python/customRecHitBuilder.py deleted file mode 100644 index 3b9076b1bedd1..0000000000000 --- a/RecoLocalMuon/CSCRecHitD/python/customRecHitBuilder.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -def tightenAnodeTimes(process): - if hasattr(process,'csc2DRecHits'): - process.csc2DRecHits.CSCUseReducedWireTimeWindow = True - process.csc2DRecHits.CSCWireTimeWindowLow = 5 - process.csc2DRecHits.CSCWireTimeWindowHigh = 11 - return process diff --git a/RecoLocalMuon/CSCRecHitD/src/CSCMake2DRecHit.cc b/RecoLocalMuon/CSCRecHitD/src/CSCMake2DRecHit.cc index 07924c041f0bf..26207da560e54 100644 --- a/RecoLocalMuon/CSCRecHitD/src/CSCMake2DRecHit.cc +++ b/RecoLocalMuon/CSCRecHitD/src/CSCMake2DRecHit.cc @@ -165,16 +165,19 @@ CSCRecHit2D CSCMake2DRecHit::hitFromStripAndWire(const CSCDetId& id, //---- Calculate local position within the strip float xWithinChamber = lp11.x(); quality = 0; - xMatchGatti_->findXOnStrip(id, - layer_, - sHit, - centerStrip, - xWithinChamber, - stripWidth, - tpeak, - positionWithinTheStrip, - sigmaWithinTheStrip, - quality); + //check if strip wire intersect is within the sensitive area of chamber + if (layergeom_->inside(lp11)) { + xMatchGatti_->findXOnStrip(id, + layer_, + sHit, + centerStrip, + xWithinChamber, + stripWidth, + tpeak, + positionWithinTheStrip, + sigmaWithinTheStrip, + quality); + } lp0 = LocalPoint(xWithinChamber, ymiddle); } diff --git a/RecoLocalMuon/CSCRecHitD/test/run_on_raw.py b/RecoLocalMuon/CSCRecHitD/test/run_on_raw.py index ccd13c53a38db..8de1ba33e338d 100644 --- a/RecoLocalMuon/CSCRecHitD/test/run_on_raw.py +++ b/RecoLocalMuon/CSCRecHitD/test/run_on_raw.py @@ -51,12 +51,12 @@ # LogTrace output goes to cout; all other output to "junk.log" process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append("CSCRecHit") -##process.MessageLogger.categories.append("CSCRecoConditions") # module label is something like "muonCSCDigis"... process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.destinations = cms.untracked.vstring("cout","junk") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.junk = dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("DEBUG"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/RecoLocalMuon/CSCRecHitD/test/run_on_raw_72x.py b/RecoLocalMuon/CSCRecHitD/test/run_on_raw_72x.py index 25490ae4c65f1..1d051b29b488f 100644 --- a/RecoLocalMuon/CSCRecHitD/test/run_on_raw_72x.py +++ b/RecoLocalMuon/CSCRecHitD/test/run_on_raw_72x.py @@ -33,12 +33,13 @@ # LogTrace output goes to cout; all other output to "junk.log" process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append("CSCRecHit") # module label is something like "muonCSCDigis"... process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.destinations = cms.untracked.vstring("cout","junk") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.junk = dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("DEBUG"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/RecoLocalMuon/CSCRecHitD/test/run_on_simdigi.py b/RecoLocalMuon/CSCRecHitD/test/run_on_simdigi.py index 72f209304c207..8cf4b725fcb02 100644 --- a/RecoLocalMuon/CSCRecHitD/test/run_on_simdigi.py +++ b/RecoLocalMuon/CSCRecHitD/test/run_on_simdigi.py @@ -50,16 +50,12 @@ # LogTrace output goes to cout; all other output to "junk.log" process.load("FWCore.MessageLogger.MessageLogger_cfi") -##process.MessageLogger.categories.append("CSCGeometry") -process.MessageLogger.categories.append("CSCRecHit") -##process.MessageLogger.categories.append("CSCRecHitDBuilder") -##process.MessageLogger.categories.append("CSCMake2DRecHit") -## process.MessageLogger.categories.append("CSCHitFromStripOnly") -## process.MessageLogger.categories.append("CSCRecoConditions") # module label is something like "muonCSCDigis"... process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.destinations = cms.untracked.vstring("cout","junk") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.junk = dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("DEBUG"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/RecoLocalMuon/CSCRecHitD/test/test_bad_channels.py b/RecoLocalMuon/CSCRecHitD/test/test_bad_channels.py index 87be23aaeb308..09a0601044c6b 100644 --- a/RecoLocalMuon/CSCRecHitD/test/test_bad_channels.py +++ b/RecoLocalMuon/CSCRecHitD/test/test_bad_channels.py @@ -17,9 +17,9 @@ process.load("Configuration.StandardSequences.EndOfProcess_cff") process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append("CSCBadChannels") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/RecoLocalMuon/CSCSegment/python/CSCSegmentAlgorithmRU_cfi.py b/RecoLocalMuon/CSCSegment/python/CSCSegmentAlgorithmRU_cfi.py index 1a55d2168a2c5..4088d568f6125 100644 --- a/RecoLocalMuon/CSCSegment/python/CSCSegmentAlgorithmRU_cfi.py +++ b/RecoLocalMuon/CSCSegment/python/CSCSegmentAlgorithmRU_cfi.py @@ -2,7 +2,6 @@ RU_ME1A = cms.PSet( doCollisions = cms.bool(True), - enlarge = cms.bool(False), chi2Norm_2D_ = cms.double(35), chi2_str = cms.double(50.0), chi2Max = cms.double(100.0), @@ -15,7 +14,6 @@ ) RU_ME1B = cms.PSet( doCollisions = cms.bool(True), - enlarge = cms.bool(False), chi2Norm_2D_ = cms.double(35), chi2_str = cms.double(50.0), chi2Max = cms.double(100.0), @@ -28,7 +26,6 @@ ) RU_ME12 = cms.PSet( doCollisions = cms.bool(True), - enlarge = cms.bool(False), chi2Norm_2D_ = cms.double(35), chi2_str = cms.double(50.0), chi2Max = cms.double(100.0), @@ -41,7 +38,6 @@ ) RU_ME13 = cms.PSet( doCollisions = cms.bool(True), - enlarge = cms.bool(False), chi2Norm_2D_ = cms.double(20), chi2_str = cms.double(30.0), chi2Max = cms.double(60.0), @@ -54,7 +50,6 @@ ) RU_MEX1 = cms.PSet( doCollisions = cms.bool(True), - enlarge = cms.bool(False), chi2Norm_2D_ = cms.double(60), chi2_str = cms.double(80.0), chi2Max = cms.double(180.0), @@ -67,7 +62,6 @@ ) RU_MEX2 = cms.PSet( doCollisions = cms.bool(True), - enlarge = cms.bool(False), chi2Norm_2D_ = cms.double(35), chi2_str = cms.double(50.0), chi2Max = cms.double(100.0), diff --git a/RecoLocalMuon/CSCSegment/python/customSegmentBuilder.py b/RecoLocalMuon/CSCSegment/python/customSegmentBuilder.py deleted file mode 100644 index d6ead92d945f1..0000000000000 --- a/RecoLocalMuon/CSCSegment/python/customSegmentBuilder.py +++ /dev/null @@ -1,6 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -def widenRoads(process): - if hasattr(process,'cscSegments'): - for ps in process.cscSegments.algo_psets[4].algo_psets: ps.enlarge = True - return process diff --git a/RecoLocalMuon/CSCSegment/src/CSCSegAlgoRU.cc b/RecoLocalMuon/CSCSegment/src/CSCSegAlgoRU.cc index f6620a0973e9c..91a6f4da6c607 100644 --- a/RecoLocalMuon/CSCSegment/src/CSCSegAlgoRU.cc +++ b/RecoLocalMuon/CSCSegment/src/CSCSegAlgoRU.cc @@ -21,7 +21,6 @@ CSCSegAlgoRU::CSCSegAlgoRU(const edm::ParameterSet& ps) : CSCSegmentAlgorithm(ps), myName("CSCSegAlgoRU") { doCollisions = ps.getParameter("doCollisions"); - enlarge = ps.getParameter("enlarge"); chi2_str_ = ps.getParameter("chi2_str"); chi2Norm_2D_ = ps.getParameter("chi2Norm_2D_"); dRMax = ps.getParameter("dRMax"); @@ -96,7 +95,6 @@ std::vector CSCSegAlgoRU::buildSegments(const CSCChamber* aChamber, AlgoState aState; aState.aChamber = aChamber; aState.doCollisions = doCollisions; - aState.enlarge = enlarge; aState.dRMax = dRMax; aState.dPhiMax = dPhiMax; aState.dRIntMax = dRIntMax; @@ -105,10 +103,6 @@ std::vector CSCSegAlgoRU::buildSegments(const CSCChamber* aChamber, aState.chi2_str_ = chi2_str_; aState.chi2Max = chi2Max; - int scale_factor = 1; - if (aState.enlarge) - scale_factor = 2; - // Define buffer for segments we build std::vector segments; ChamberHitContainerCIt ib = rechits.begin(); @@ -122,13 +116,11 @@ std::vector CSCSegAlgoRU::buildSegments(const CSCChamber* aChamber, for (int ipass = 0; ipass < npass; ++ipass) { if (aState.windowScale > 1.) { iadd = 1; - aState.strip_iadd = 2 * scale_factor; - aState.chi2D_iadd = 2 * scale_factor; - if (aState.enlarge) { - aState.chi2Max = 2 * chi2Max; - if (rechits.size() <= 12) - iadd = 0; //allow 3 hit segments for low hit multiplicity chambers - } + aState.strip_iadd = 4; + aState.chi2D_iadd = 4; + aState.chi2Max = 2 * chi2Max; + if (rechits.size() <= 12) + iadd = 0; //allow 3 hit segments for low hit multiplicity chambers } int used_rh = 0; @@ -143,13 +135,13 @@ std::vector CSCSegAlgoRU::buildSegments(const CSCChamber* aChamber, 2) { //check if there are enough recHits left to build a segment from displaced vertices aState.doCollisions = false; aState.windowScale = 1.; // scale factor for cuts - aState.dRMax = scale_factor * 2.0; - aState.dPhiMax = scale_factor * 2 * aState.dPhiMax; - aState.dRIntMax = scale_factor * 2 * aState.dRIntMax; - aState.dPhiIntMax = scale_factor * 2 * aState.dPhiIntMax; - aState.chi2Norm_2D_ = scale_factor * 5 * aState.chi2Norm_2D_; - aState.chi2_str_ = scale_factor * 100; - aState.chi2Max = scale_factor * 2 * aState.chi2Max; + aState.dRMax = 4.0; + aState.dPhiMax = 4 * aState.dPhiMax; + aState.dRIntMax = 4 * aState.dRIntMax; + aState.dPhiIntMax = 4 * aState.dPhiIntMax; + aState.chi2Norm_2D_ = 10 * aState.chi2Norm_2D_; + aState.chi2_str_ = 200; + aState.chi2Max = 4 * aState.chi2Max; } else { search_disp = false; //make sure the flag is off } @@ -284,11 +276,11 @@ std::vector CSCSegAlgoRU::buildSegments(const CSCChamber* aChamber, aState.doCollisions = true; aState.dRMax = 2.0; aState.chi2_str_ = 100; - aState.dPhiMax = 0.5 * aState.dPhiMax / scale_factor; - aState.dRIntMax = 0.5 * aState.dRIntMax / scale_factor; - aState.dPhiIntMax = 0.5 * aState.dPhiIntMax / scale_factor; - aState.chi2Norm_2D_ = 0.2 * aState.chi2Norm_2D_ / scale_factor; - aState.chi2Max = 0.5 * aState.chi2Max / scale_factor; + aState.dPhiMax = 0.25 * aState.dPhiMax; + aState.dRIntMax = 0.25 * aState.dRIntMax; + aState.dPhiIntMax = 0.25 * aState.dPhiIntMax; + aState.chi2Norm_2D_ = 0.1 * aState.chi2Norm_2D_; + aState.chi2Max = 0.25 * aState.chi2Max; } std::vector::iterator it = segments.begin(); @@ -426,19 +418,10 @@ bool CSCSegAlgoRU::areHitsCloseInR(const AlgoState& aState, const CSCRecHit2D* h h1z = 1; h2z = 1; } - - if (aState.enlarge) { - return (gp2.perp() > ((gp1.perp() - aState.dRMax * aState.strip_iadd * maxWG_width[iStn]) * h2z) / h1z && - gp2.perp() < ((gp1.perp() + aState.dRMax * aState.strip_iadd * maxWG_width[iStn]) * h2z) / h1z) - ? true - : false; - - } else { - return (gp2.perp() > ((gp1.perp() - aState.dRMax * maxWG_width[iStn]) * h2z) / h1z && - gp2.perp() < ((gp1.perp() + aState.dRMax * maxWG_width[iStn]) * h2z) / h1z) - ? true - : false; - } + return (gp2.perp() > ((gp1.perp() - aState.dRMax * aState.strip_iadd * maxWG_width[iStn]) * h2z) / h1z && + gp2.perp() < ((gp1.perp() + aState.dRMax * aState.strip_iadd * maxWG_width[iStn]) * h2z) / h1z) + ? true + : false; } bool CSCSegAlgoRU::areHitsCloseInGlobalPhi(const AlgoState& aState, @@ -544,19 +527,10 @@ bool CSCSegAlgoRU::isHitNearSegment(const AlgoState& aState, const CSCRecHit2D* maxWG_width[1] = 10.75; } } - - if (aState.enlarge) { - return (fabs(phidif) < aState.dPhiIntMax * aState.strip_iadd * pos_str + dphi_incr && - fabs(dr) < aState.dRIntMax * aState.strip_iadd * maxWG_width[iStn]) - ? true - : false; - - } else { - return (fabs(phidif) < aState.dPhiIntMax * aState.strip_iadd * pos_str + dphi_incr && - fabs(dr) < aState.dRIntMax * maxWG_width[iStn]) - ? true - : false; - } + return (fabs(phidif) < aState.dPhiIntMax * aState.strip_iadd * pos_str + dphi_incr && + fabs(dr) < aState.dRIntMax * aState.strip_iadd * maxWG_width[iStn]) + ? true + : false; } float CSCSegAlgoRU::phiAtZ(const AlgoState& aState, float z) const { @@ -583,7 +557,7 @@ bool CSCSegAlgoRU::isSegmentGood(const AlgoState& aState, const ChamberHitContai unsigned int iadd = (rechitsInChamber.size() > 20) ? 1 : 0; if (aState.windowScale > 1.) { iadd = 1; - if (rechitsInChamber.size() <= 12 && aState.enlarge) + if (rechitsInChamber.size() <= 12) iadd = 0; } if (aState.proto_segment.size() >= 3 + iadd) diff --git a/RecoLocalMuon/CSCSegment/src/CSCSegAlgoRU.h b/RecoLocalMuon/CSCSegment/src/CSCSegAlgoRU.h index 8647833d84100..47d00b870fcd0 100644 --- a/RecoLocalMuon/CSCSegment/src/CSCSegAlgoRU.h +++ b/RecoLocalMuon/CSCSegment/src/CSCSegAlgoRU.h @@ -89,7 +89,6 @@ class CSCSegAlgoRU : public CSCSegmentAlgorithm { //adjustable configuration bool doCollisions; - bool enlarge; float dRMax; float dPhiMax; float dRIntMax; @@ -162,7 +161,6 @@ class CSCSegAlgoRU : public CSCSegmentAlgorithm { float wideSeg; int minLayersApart; bool debugInfo; - bool enlarge; }; #endif diff --git a/RecoLocalMuon/CSCSegment/test/run_on_raw_700.py b/RecoLocalMuon/CSCSegment/test/run_on_raw_700.py index f6b6080c2daed..ee1aa946772a6 100644 --- a/RecoLocalMuon/CSCSegment/test/run_on_raw_700.py +++ b/RecoLocalMuon/CSCSegment/test/run_on_raw_700.py @@ -32,13 +32,13 @@ # LogTrace output goes to cout; all other output to "junk.log" process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append("CSCRecHit") -process.MessageLogger.categories.append("CSCSegAlgoST") # module label is something like "muonCSCDigis"... process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.destinations = cms.untracked.vstring("cout","junk") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.junk = dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("DEBUG"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/RecoLocalMuon/CSCSegment/test/run_on_raw_720p3.py b/RecoLocalMuon/CSCSegment/test/run_on_raw_720p3.py index bf86d9d2bef26..7f9dbcb1e6969 100644 --- a/RecoLocalMuon/CSCSegment/test/run_on_raw_720p3.py +++ b/RecoLocalMuon/CSCSegment/test/run_on_raw_720p3.py @@ -34,14 +34,13 @@ # LogTrace output goes to cout; all other output to "junk.log" process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append("CSCRecHit") -process.MessageLogger.categories.append("CSCSegment") -process.MessageLogger.categories.append("CSCSegAlgoST") # module label is something like "muonCSCDigis"... process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.destinations = cms.untracked.vstring("cout","junk") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.junk = dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("DEBUG"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/RecoLocalMuon/CSCSegment/test/run_on_raw_74x.py b/RecoLocalMuon/CSCSegment/test/run_on_raw_74x.py index c0f26ca2e69e8..3252206aaa2fd 100644 --- a/RecoLocalMuon/CSCSegment/test/run_on_raw_74x.py +++ b/RecoLocalMuon/CSCSegment/test/run_on_raw_74x.py @@ -43,9 +43,9 @@ # --- Activate LogVerbatim IN CSCSegment -process.MessageLogger.categories.append("CSCSegment") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), @@ -57,14 +57,16 @@ ### LogTrace output goes to cout; all other output to "junk.log" #process.load("FWCore.MessageLogger.MessageLogger_cfi") -#process.MessageLogger.categories.append("CSCRecHit") -#process.MessageLogger.categories.append("CSCSegment") -#process.MessageLogger.categories.append("CSCSegAlgoST") +#process.MessageLogger.CSCRecHit=dict() +#process.MessageLogger.CSCSegment=dict() +#process.MessageLogger.CSCSegAlgoST=dict() ### module label is something like "muonCSCDigis"... #process.MessageLogger.debugModules = cms.untracked.vstring("*") -#process.MessageLogger.destinations = cms.untracked.vstring("cout","junk") +#process.MessageLogger.cerr.enable = False +#process.MessageLogger.files.junk = dict() #process.MessageLogger.cout = cms.untracked.PSet( +# enable = cms.untracked.bool(True), # threshold = cms.untracked.string("DEBUG"), # default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), # FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/RecoLocalMuon/CSCSegment/test/run_on_raw_75x.py b/RecoLocalMuon/CSCSegment/test/run_on_raw_75x.py index c5eba595b6f37..0c03e36ff7993 100644 --- a/RecoLocalMuon/CSCSegment/test/run_on_raw_75x.py +++ b/RecoLocalMuon/CSCSegment/test/run_on_raw_75x.py @@ -40,9 +40,9 @@ # --- Activate LogVerbatim IN CSCSegment -process.MessageLogger.categories.append("CSCSegment") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), @@ -54,9 +54,9 @@ ### LogTrace output goes to cout; all other output to "junk.log" #process.load("FWCore.MessageLogger.MessageLogger_cfi") -#process.MessageLogger.categories.append("CSCRecHit") -#process.MessageLogger.categories.append("CSCSegment") -#process.MessageLogger.categories.append("CSCSegAlgoST") +#process.MessageLogger.CSCRecHit=dict() +#process.MessageLogger.CSCSegment=dict() +#process.MessageLogger.CSCSegAlgoST=dict() ### module label is something like "muonCSCDigis"... #process.MessageLogger.debugModules = cms.untracked.vstring("*") diff --git a/RecoLocalMuon/CSCSegment/test/run_on_simdigi.py b/RecoLocalMuon/CSCSegment/test/run_on_simdigi.py index ffb6724a1017d..54f93dbbb3642 100644 --- a/RecoLocalMuon/CSCSegment/test/run_on_simdigi.py +++ b/RecoLocalMuon/CSCSegment/test/run_on_simdigi.py @@ -50,17 +50,12 @@ # LogTrace output goes to cout; all other output to "junk.log" process.load("FWCore.MessageLogger.MessageLogger_cfi") -##process.MessageLogger.categories.append("CSCGeometry") -process.MessageLogger.categories.append("CSCRecHit") -process.MessageLogger.categories.append("CSCSegAlgoST") -##process.MessageLogger.categories.append("CSCRecHitDBuilder") -##process.MessageLogger.categories.append("CSCMake2DRecHit") -## process.MessageLogger.categories.append("CSCHitFromStripOnly") -## process.MessageLogger.categories.append("CSCRecoConditions") # module label is something like "muonCSCDigis"... process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.destinations = cms.untracked.vstring("cout","junk") +process.MessageLogger.files.junk = dict() +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("DEBUG"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/RecoLocalMuon/CSCSegment/test/run_on_simdigi_74x.py b/RecoLocalMuon/CSCSegment/test/run_on_simdigi_74x.py index 0baaa96418477..07fa0327e0f79 100644 --- a/RecoLocalMuon/CSCSegment/test/run_on_simdigi_74x.py +++ b/RecoLocalMuon/CSCSegment/test/run_on_simdigi_74x.py @@ -78,9 +78,9 @@ process.cscSegments.algo_psets[3].algo_psets[1].useShowering = cms.bool(True) # --- Activate LogVerbatim IN CSCSegment -process.MessageLogger.categories.append("CSCSegment") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/RecoLocalMuon/CSCSegment/test/run_on_simdigi_75x.py b/RecoLocalMuon/CSCSegment/test/run_on_simdigi_75x.py index 7a01b1de9ff65..64783b77b48ee 100644 --- a/RecoLocalMuon/CSCSegment/test/run_on_simdigi_75x.py +++ b/RecoLocalMuon/CSCSegment/test/run_on_simdigi_75x.py @@ -75,9 +75,9 @@ process.cscSegments.algo_psets[3].algo_psets[1].useShowering = cms.bool(True) # --- Activate LogVerbatim IN CSCSegment -process.MessageLogger.categories.append("CSCSegment") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cout.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/RecoLocalMuon/CSCSegment/test/run_on_simdigi_df.py b/RecoLocalMuon/CSCSegment/test/run_on_simdigi_df.py index 7b798767cac17..a8061ee940ee6 100644 --- a/RecoLocalMuon/CSCSegment/test/run_on_simdigi_df.py +++ b/RecoLocalMuon/CSCSegment/test/run_on_simdigi_df.py @@ -71,9 +71,9 @@ # --- Activate LogVerbatim IN CSCSegment -process.MessageLogger.categories.append("CSCSegment") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/RecoLocalMuon/CSCSegment/test/run_on_simdigi_sk.py b/RecoLocalMuon/CSCSegment/test/run_on_simdigi_sk.py index 20c8f853ae809..6e51174132931 100644 --- a/RecoLocalMuon/CSCSegment/test/run_on_simdigi_sk.py +++ b/RecoLocalMuon/CSCSegment/test/run_on_simdigi_sk.py @@ -67,9 +67,9 @@ process.cscSegments.algo_type = cms.int32(1) # --- Activate LogVerbatim IN CSCSegment -process.MessageLogger.categories.append("CSCSegment") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/RecoLocalMuon/CSCSegment/test/run_on_simdigi_st.py b/RecoLocalMuon/CSCSegment/test/run_on_simdigi_st.py index 944799a916908..b1a73b806ca79 100644 --- a/RecoLocalMuon/CSCSegment/test/run_on_simdigi_st.py +++ b/RecoLocalMuon/CSCSegment/test/run_on_simdigi_st.py @@ -80,9 +80,9 @@ process.cscSegments.algo_psets[3].algo_psets[1].useShowering = cms.bool(True) # --- Activate LogVerbatim IN CSCSegment -process.MessageLogger.categories.append("CSCSegment") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/RecoLocalMuon/CSCSegment/test/run_on_simdigi_tc.py b/RecoLocalMuon/CSCSegment/test/run_on_simdigi_tc.py index 99b98adb4d12c..8ad74ecd33d6c 100644 --- a/RecoLocalMuon/CSCSegment/test/run_on_simdigi_tc.py +++ b/RecoLocalMuon/CSCSegment/test/run_on_simdigi_tc.py @@ -64,9 +64,9 @@ process.cscSegments.algo_type = cms.int32( 2 ) # --- Activate LogVerbatim IN CSCSegment -process.MessageLogger.categories.append("CSCSegment") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/RecoLocalMuon/DTRecHit/plugins/BuildFile.xml b/RecoLocalMuon/DTRecHit/plugins/BuildFile.xml index 4b0fff596b2ff..22d2bea2193ec 100644 --- a/RecoLocalMuon/DTRecHit/plugins/BuildFile.xml +++ b/RecoLocalMuon/DTRecHit/plugins/BuildFile.xml @@ -1,6 +1,7 @@ + diff --git a/RecoLocalMuon/DTRecHit/plugins/DTDriftTimeParameters.icc b/RecoLocalMuon/DTRecHit/plugins/DTDriftTimeParameters.icc index 2456a0e1b744c..6e3791b4f7657 100644 --- a/RecoLocalMuon/DTRecHit/plugins/DTDriftTimeParameters.icc +++ b/RecoLocalMuon/DTRecHit/plugins/DTDriftTimeParameters.icc @@ -1,6 +1,6 @@ #ifndef RecoLocalMuon_DTDriftTimeParameters_H #define RecoLocalMuon_DTDriftTimeParameters_H -#include "DataFormats/MuonData/src/DTDriftTimeParameters.icc" +#include "DataFormats/DTRecHit/interface/DTDriftTimeParameters.icc" #endif diff --git a/RecoLocalMuon/DTSegment/python/DTSegment2DProducer_CombPatternReco2D_NoDrift_CosmicData_cfi.py b/RecoLocalMuon/DTSegment/python/DTSegment2DProducer_CombPatternReco2D_NoDrift_CosmicData_cfi.py deleted file mode 100644 index 9def45c115e7e..0000000000000 --- a/RecoLocalMuon/DTSegment/python/DTSegment2DProducer_CombPatternReco2D_NoDrift_CosmicData_cfi.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -#FIXME: please use the file below, this old one will disappear soon. -from RecoLocalMuon.DTSegment.dt2DSegments_CombPatternReco2D_NoDrift_CosmicData_cfi import * - diff --git a/RecoLocalMuon/DTSegment/python/DTSegment4DProducer_CombPatternReco4D_NoDrift_CosmicData_cfi.py b/RecoLocalMuon/DTSegment/python/DTSegment4DProducer_CombPatternReco4D_NoDrift_CosmicData_cfi.py deleted file mode 100644 index a555913dc0d81..0000000000000 --- a/RecoLocalMuon/DTSegment/python/DTSegment4DProducer_CombPatternReco4D_NoDrift_CosmicData_cfi.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -#FIXME: please use the file below, this old one will disappear soon. -from RecoLocalMuon.DTSegment.dt4DSegments_CombPatternReco4D_NoDrift_CosmicData_cfi import * - diff --git a/RecoLocalMuon/DTSegment/python/dt4DExtendedSegments_CombPatternReco4D_LinearDriftFromDB_cfi.py b/RecoLocalMuon/DTSegment/python/dt4DExtendedSegments_CombPatternReco4D_LinearDriftFromDB_cfi.py index 998fa0eeba0f4..ff8478e7b1a93 100644 --- a/RecoLocalMuon/DTSegment/python/dt4DExtendedSegments_CombPatternReco4D_LinearDriftFromDB_cfi.py +++ b/RecoLocalMuon/DTSegment/python/dt4DExtendedSegments_CombPatternReco4D_LinearDriftFromDB_cfi.py @@ -1,4 +1,4 @@ import FWCore.ParameterSet.Config as cms from RecoLocalMuon.DTSegment.dt4DSegments_CombPatternReco4D_LinearDriftFromDB_cfi import * -dt4DSegments.recHits2DLabel= cms.InputTag("dt2DExtendedSegments") +dt4DSegments.recHits2DLabel= "dt2DExtendedSegments" diff --git a/RecoLocalMuon/DTSegment/python/dt4DExtendedSegments_CombPatternReco4D_LinearDrift_cfi.py b/RecoLocalMuon/DTSegment/python/dt4DExtendedSegments_CombPatternReco4D_LinearDrift_cfi.py index 9d75e6a5c81fd..7d9a0ad3771cd 100644 --- a/RecoLocalMuon/DTSegment/python/dt4DExtendedSegments_CombPatternReco4D_LinearDrift_cfi.py +++ b/RecoLocalMuon/DTSegment/python/dt4DExtendedSegments_CombPatternReco4D_LinearDrift_cfi.py @@ -1,4 +1,4 @@ import FWCore.ParameterSet.Config as cms from RecoLocalMuon.DTSegment.dt4DSegments_CombPatternReco4D_LinearDrift_cfi import * -dt4DSegments.recHits2DLabel= cms.InputTag("dt2DExtendedSegments") +dt4DSegments.recHits2DLabel= "dt2DExtendedSegments" diff --git a/RecoLocalMuon/DTSegment/python/dt4DExtendedSegments_CombPatternReco4D_ParamDrift_cfi.py b/RecoLocalMuon/DTSegment/python/dt4DExtendedSegments_CombPatternReco4D_ParamDrift_cfi.py index c8464ef43f3b5..a439ffc745550 100644 --- a/RecoLocalMuon/DTSegment/python/dt4DExtendedSegments_CombPatternReco4D_ParamDrift_cfi.py +++ b/RecoLocalMuon/DTSegment/python/dt4DExtendedSegments_CombPatternReco4D_ParamDrift_cfi.py @@ -1,4 +1,4 @@ import FWCore.ParameterSet.Config as cms from RecoLocalMuon.DTSegment.dt4DSegments_CombPatternReco4D_ParamDrift_cfi import * -dt4DSegments.recHits2DLabel= cms.InputTag("dt2DExtendedSegments") +dt4DSegments.recHits2DLabel= "dt2DExtendedSegments" diff --git a/RecoLocalMuon/GEMCSCSegment/test/runGEMCSCSegmentProducer_cfg.py b/RecoLocalMuon/GEMCSCSegment/test/runGEMCSCSegmentProducer_cfg.py index 429cb903be7be..63fb80a97540c 100644 --- a/RecoLocalMuon/GEMCSCSegment/test/runGEMCSCSegmentProducer_cfg.py +++ b/RecoLocalMuon/GEMCSCSegment/test/runGEMCSCSegmentProducer_cfg.py @@ -55,13 +55,11 @@ ### that can be activated independentl ################################################################## process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append("GEMCSCSegment") -process.MessageLogger.categories.append("GEMCSCSegmentBuilder") -# process.MessageLogger.categories.append("GEMCSCSegAlgoRR") -# process.MessageLogger.categories.append("GEMCSCSegFit") process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.destinations = cms.untracked.vstring("cout","junk") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.junk = dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("DEBUG"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), @@ -73,9 +71,8 @@ ################################################################## ### TO ACTIVATE LogVerbatim IN GEMCSCSegment ### -------------------------------------------------------------- -# process.MessageLogger.categories.append("GEMCSCSegment") -# process.MessageLogger.categories.append("GEMCSCSegFit") -# process.MessageLogger.destinations = cms.untracked.vstring("cout") +# process.MessageLogger.GEMCSCSegment=dict() +# process.MessageLogger.GEMCSCSegFit=dict() # process.MessageLogger.cout = cms.untracked.PSet( # threshold = cms.untracked.string("INFO"), # default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), diff --git a/RecoLocalMuon/GEMRecHit/test/SingleMuPt100_cfi_GEM-SIM-DIGI_Extended2015MuonGEMDev.py b/RecoLocalMuon/GEMRecHit/test/SingleMuPt100_cfi_GEM-SIM-DIGI_Extended2015MuonGEMDev.py index 87960555c5dcf..15c4a7b2fef33 100644 --- a/RecoLocalMuon/GEMRecHit/test/SingleMuPt100_cfi_GEM-SIM-DIGI_Extended2015MuonGEMDev.py +++ b/RecoLocalMuon/GEMRecHit/test/SingleMuPt100_cfi_GEM-SIM-DIGI_Extended2015MuonGEMDev.py @@ -69,12 +69,11 @@ ### Code/Configuration with thanks to Tim Cox ################################################################## process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append("GEMGeometryBuilderFromDDD") -process.MessageLogger.categories.append("ME0GeometryBuilder") -process.MessageLogger.categories.append("RPCGeometryBuilder") process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.destinations = cms.untracked.vstring("cout","junk") +process.MessageLogger.files.junk = dict() +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("DEBUG"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/RecoLocalMuon/GEMSegment/plugins/GEMSegmentBuilder.cc b/RecoLocalMuon/GEMSegment/plugins/GEMSegmentBuilder.cc index f3805bb9abfab..fde8193f346ce 100644 --- a/RecoLocalMuon/GEMSegment/plugins/GEMSegmentBuilder.cc +++ b/RecoLocalMuon/GEMSegment/plugins/GEMSegmentBuilder.cc @@ -11,15 +11,19 @@ GEMSegmentBuilder::GEMSegmentBuilder(const edm::ParameterSet& ps) : geom_(nullptr) { // Algo name - algoName = ps.getParameter("algo_name"); + segAlgoName = ps.getParameter("algo_name"); + ge0AlgoName = ps.getParameter("ge0_name"); - edm::LogVerbatim("GEMSegmentBuilder") << "GEMSegmentBuilder algorithm name: " << algoName; + edm::LogVerbatim("GEMSegmentBuilder") << "GEMSegmentBuilder algorithm : ge0 name : " << ge0AlgoName + << " name: " << segAlgoName; // SegAlgo parameter set segAlgoPSet = ps.getParameter("algo_pset"); + ge0AlgoPSet = ps.getParameter("ge0_pset"); - // Ask factory to build this algorithm, giving it appropriate ParameterSet - algo = GEMSegmentBuilderPluginFactory::get()->create(algoName, segAlgoPSet); + // Ask factory to build these algorithms, giving them the appropriate ParameterSets + segAlgo = GEMSegmentBuilderPluginFactory::get()->create(segAlgoName, segAlgoPSet); + ge0Algo = GEMSegmentBuilderPluginFactory::get()->create(ge0AlgoName, ge0AlgoPSet); } GEMSegmentBuilder::~GEMSegmentBuilder() {} @@ -88,7 +92,11 @@ void GEMSegmentBuilder::build(const GEMRecHitCollection* recHits, GEMSegmentColl #endif // given the superchamber select the appropriate algo... and run it - std::vector segv = algo->run(ensemble, gemRecHits); + std::vector segv; + if (chamber->id().station() == 0) + segv = ge0Algo->run(ensemble, gemRecHits); + else + segv = segAlgo->run(ensemble, gemRecHits); #ifdef EDM_ML_DEBUG // have lines below only compiled when in debug mode LogTrace("GEMSegmentBuilder") << "[GEMSegmentBuilder::build] found " << segv.size(); #endif diff --git a/RecoLocalMuon/GEMSegment/plugins/GEMSegmentBuilder.h b/RecoLocalMuon/GEMSegment/plugins/GEMSegmentBuilder.h index 0c1a175fb3e76..e244ea9eb320b 100644 --- a/RecoLocalMuon/GEMSegment/plugins/GEMSegmentBuilder.h +++ b/RecoLocalMuon/GEMSegment/plugins/GEMSegmentBuilder.h @@ -40,9 +40,12 @@ class GEMSegmentBuilder { void setGeometry(const GEMGeometry* g); private: - std::string algoName; + std::string segAlgoName; + std::string ge0AlgoName; edm::ParameterSet segAlgoPSet; - std::unique_ptr algo; + edm::ParameterSet ge0AlgoPSet; + std::unique_ptr segAlgo; + std::unique_ptr ge0Algo; const GEMGeometry* geom_; }; diff --git a/RecoLocalMuon/GEMSegment/python/gemSegments_cfi.py b/RecoLocalMuon/GEMSegment/python/gemSegments_cfi.py index 42e74974b8303..b49ba69a7fb7e 100644 --- a/RecoLocalMuon/GEMSegment/python/gemSegments_cfi.py +++ b/RecoLocalMuon/GEMSegment/python/gemSegments_cfi.py @@ -1,25 +1,24 @@ import FWCore.ParameterSet.Config as cms -# defaults for GE0SegAlgoRU -RU_GE0 = cms.PSet( - allowWideSegments = cms.bool(True), - doCollisions = cms.bool(True), - maxChi2Additional = cms.double(100.0), - maxChi2Prune = cms.double(50), - maxChi2GoodSeg = cms.double(50), - maxPhiSeeds = cms.double(0.001096605744), #Assuming 384 strips - maxPhiAdditional = cms.double(0.001096605744), #Assuming 384 strips - maxETASeeds = cms.double(0.1), #Assuming 8 eta partitions - maxTOFDiff = cms.double(25), - requireCentralBX = cms.bool(True), #require that a majority of hits come from central BX - minNumberOfHits = cms.uint32(4), - maxNumberOfHits = cms.uint32(300), - maxNumberOfHitsPerLayer = cms.uint32(100), -) - gemSegments = cms.EDProducer("GEMSegmentProducer", gemRecHitLabel = cms.InputTag("gemRecHits"), + ge0_name = cms.string("GE0SegAlgoRU"), algo_name = cms.string("GEMSegmentAlgorithm"), + ge0_pset = cms.PSet( + allowWideSegments = cms.bool(True), + doCollisions = cms.bool(True), + maxChi2Additional = cms.double(100.0), + maxChi2Prune = cms.double(50), + maxChi2GoodSeg = cms.double(50), + maxPhiSeeds = cms.double(0.001096605744), #Assuming 384 strips + maxPhiAdditional = cms.double(0.001096605744), #Assuming 384 strips + maxETASeeds = cms.double(0.1), #Assuming 8 eta partitions + maxTOFDiff = cms.double(25), + requireCentralBX = cms.bool(True), #require that a majority of hits come from central BX + minNumberOfHits = cms.uint32(4), + maxNumberOfHits = cms.uint32(300), + maxNumberOfHitsPerLayer = cms.uint32(100), + ), algo_pset = cms.PSet( minHitsPerSegment = cms.uint32(2), preClustering = cms.bool(True), # False => all hits in chamber are given to the fitter diff --git a/RecoLocalMuon/GEMSegment/test/runGEMSegmentProducer_cfg.py b/RecoLocalMuon/GEMSegment/test/runGEMSegmentProducer_cfg.py index a043d17252e78..3a79def0913c6 100644 --- a/RecoLocalMuon/GEMSegment/test/runGEMSegmentProducer_cfg.py +++ b/RecoLocalMuon/GEMSegment/test/runGEMSegmentProducer_cfg.py @@ -46,13 +46,11 @@ ### that can be activated independentl ############################################################### process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append("ME0Segment") -process.MessageLogger.categories.append("ME0SegmentBuilder") -# process.MessageLogger.categories.append("ME0SegAlgoMM") -# process.MessageLogger.categories.append("ME0SegFit") process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.destinations = cms.untracked.vstring("cout","junk") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.junk = dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("DEBUG"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/RecoLocalMuon/GEMSegment/test/runME0SegmentProducer_cfg.py b/RecoLocalMuon/GEMSegment/test/runME0SegmentProducer_cfg.py index e05029584489f..1ce6501a811e6 100644 --- a/RecoLocalMuon/GEMSegment/test/runME0SegmentProducer_cfg.py +++ b/RecoLocalMuon/GEMSegment/test/runME0SegmentProducer_cfg.py @@ -46,13 +46,12 @@ ### that can be activated independentl ############################################################### process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append("ME0Segment") -process.MessageLogger.categories.append("ME0SegmentBuilder") -process.MessageLogger.categories.append("ME0SegAlgoMM") -process.MessageLogger.categories.append("ME0SegFit") + process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.destinations = cms.untracked.vstring("cout","junk") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.junk = dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("DEBUG"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/RecoLocalTracker/Configuration/python/RecoLocalTracker_cff.py b/RecoLocalTracker/Configuration/python/RecoLocalTracker_cff.py index 3cae176059b3b..35a72f0edb08f 100644 --- a/RecoLocalTracker/Configuration/python/RecoLocalTracker_cff.py +++ b/RecoLocalTracker/Configuration/python/RecoLocalTracker_cff.py @@ -9,11 +9,11 @@ from RecoLocalTracker.SiStripRecHitConverter.StripCPEfromTrackAngle_cfi import * from RecoLocalTracker.SiStripZeroSuppression.SiStripZeroSuppression_cfi import * from RecoLocalTracker.SiStripClusterizer.SiStripClusterizer_cfi import * -from RecoLocalTracker.SiPixelClusterizer.SiPixelClusterizerPreSplitting_cfi import * +from RecoLocalTracker.SiPixelClusterizer.siPixelClustersPreSplitting_cff import * from RecoLocalTracker.SiPixelRecHits.SiPixelRecHits_cfi import * from RecoLocalTracker.SubCollectionProducers.clustersummaryproducer_cfi import * -pixeltrackerlocalrecoTask = cms.Task(siPixelClustersPreSplitting,siPixelRecHitsPreSplitting) +pixeltrackerlocalrecoTask = cms.Task(siPixelClustersPreSplittingTask,siPixelRecHitsPreSplittingTask) striptrackerlocalrecoTask = cms.Task(siStripZeroSuppression,siStripClusters,siStripMatchedRecHits) trackerlocalrecoTask = cms.Task(pixeltrackerlocalrecoTask,striptrackerlocalrecoTask,clusterSummaryProducer) diff --git a/RecoLocalTracker/Phase2TrackerRecHits/plugins/Phase2TrackerRecHits.cc b/RecoLocalTracker/Phase2TrackerRecHits/plugins/Phase2TrackerRecHits.cc index 9c03b5ce846a8..20531f27becc5 100644 --- a/RecoLocalTracker/Phase2TrackerRecHits/plugins/Phase2TrackerRecHits.cc +++ b/RecoLocalTracker/Phase2TrackerRecHits/plugins/Phase2TrackerRecHits.cc @@ -34,13 +34,16 @@ class Phase2TrackerRecHits : public edm::global::EDProducer<> { void produce(edm::StreamID sid, edm::Event& event, const edm::EventSetup& eventSetup) const final; private: + edm::ESGetToken const tTrackerGeom_; + edm::ESGetToken, TkPhase2OTCPERecord> const tCPE_; + edm::EDGetTokenT token_; - edm::ESInputTag cpeTag_; }; Phase2TrackerRecHits::Phase2TrackerRecHits(edm::ParameterSet const& conf) - : token_(consumes(conf.getParameter("src"))), - cpeTag_(conf.getParameter("Phase2StripCPE")) { + : tTrackerGeom_(esConsumes()), + tCPE_(esConsumes(conf.getParameter("Phase2StripCPE"))), + token_(consumes(conf.getParameter("src"))) { produces(); } @@ -50,13 +53,10 @@ void Phase2TrackerRecHits::produce(edm::StreamID sid, edm::Event& event, const e event.getByToken(token_, clusters); // load the cpe via the eventsetup - edm::ESHandle > cpe; - eventSetup.get().get(cpeTag_, cpe); + const auto& cpe = &eventSetup.getData(tCPE_); // Get the geometry - edm::ESHandle geomHandle; - eventSetup.get().get(geomHandle); - const TrackerGeometry* tkGeom(&(*geomHandle)); + const TrackerGeometry* tkGeom = &eventSetup.getData(tTrackerGeom_); // Global container for the RecHits of each module auto outputRecHits = std::make_unique(); diff --git a/RecoLocalTracker/Phase2TrackerRecHits/python/Phase2StripCPEGeometricESProducer_cfi.py b/RecoLocalTracker/Phase2TrackerRecHits/python/Phase2StripCPEGeometricESProducer_cfi.py index 17bce06c5b6cc..8d92342c8d717 100644 --- a/RecoLocalTracker/Phase2TrackerRecHits/python/Phase2StripCPEGeometricESProducer_cfi.py +++ b/RecoLocalTracker/Phase2TrackerRecHits/python/Phase2StripCPEGeometricESProducer_cfi.py @@ -2,7 +2,7 @@ from RecoLocalTracker.Phase2TrackerRecHits.Phase2StripCPEESProducer_cfi import * -phase2StripCPEGeometricESProducer = phase2StripCPEESProducer.clone() -#phase2StripCPEGeometricESProducer.ComponentName = cms.string('Phase2StripCPEGeometric') -phase2StripCPEGeometricESProducer.ComponentType = 'Phase2StripCPEGeometric' -phase2StripCPEGeometricESProducer.parameters = cms.PSet() +phase2StripCPEGeometricESProducer = phase2StripCPEESProducer.clone( + ComponentType = 'Phase2StripCPEGeometric', + parameters = cms.PSet() +) diff --git a/RecoLocalTracker/SiPhase2VectorHitBuilder/src/VectorHitBuilderAlgorithm.cc b/RecoLocalTracker/SiPhase2VectorHitBuilder/src/VectorHitBuilderAlgorithm.cc index be41bfc3aa412..a32d1a6b0d004 100644 --- a/RecoLocalTracker/SiPhase2VectorHitBuilder/src/VectorHitBuilderAlgorithm.cc +++ b/RecoLocalTracker/SiPhase2VectorHitBuilder/src/VectorHitBuilderAlgorithm.cc @@ -3,6 +3,7 @@ #include "Geometry/CommonDetUnit/interface/GeomDet.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" #include "DataFormats/TrackerRecHit2D/interface/VectorHit2D.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" void VectorHitBuilderAlgorithm::run(edm::Handle> clusters, VectorHitCollection& vhAcc, diff --git a/RecoLocalTracker/SiPhase2VectorHitBuilder/src/VectorHitBuilderAlgorithmBase.cc b/RecoLocalTracker/SiPhase2VectorHitBuilder/src/VectorHitBuilderAlgorithmBase.cc index b875042c9fee1..b3488c40bb7ad 100644 --- a/RecoLocalTracker/SiPhase2VectorHitBuilder/src/VectorHitBuilderAlgorithmBase.cc +++ b/RecoLocalTracker/SiPhase2VectorHitBuilder/src/VectorHitBuilderAlgorithmBase.cc @@ -7,6 +7,8 @@ #include "Geometry/CommonDetUnit/interface/GeomDet.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + VectorHitBuilderAlgorithmBase::VectorHitBuilderAlgorithmBase( const edm::ParameterSet& conf, const TrackerGeometry* tkGeomProd, diff --git a/RecoLocalTracker/SiPhase2VectorHitBuilder/test/Clusters_productionAndTesting.py b/RecoLocalTracker/SiPhase2VectorHitBuilder/test/Clusters_productionAndTesting.py index cac36312ac6a7..88280d0c33370 100644 --- a/RecoLocalTracker/SiPhase2VectorHitBuilder/test/Clusters_productionAndTesting.py +++ b/RecoLocalTracker/SiPhase2VectorHitBuilder/test/Clusters_productionAndTesting.py @@ -74,12 +74,15 @@ ) # debug -process.MessageLogger = cms.Service('MessageLogger', - debugModules = cms.untracked.vstring('siPhase2Clusters'), - destinations = cms.untracked.vstring('cout'), - cout = cms.untracked.PSet( - threshold = cms.untracked.string('ERROR') - ) +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') + ), + debugModules = cms.untracked.vstring('siPhase2Clusters') ) # Analyzer diff --git a/RecoLocalTracker/SiPhase2VectorHitBuilder/test/VHs_combinatorialStudies_PU200.py b/RecoLocalTracker/SiPhase2VectorHitBuilder/test/VHs_combinatorialStudies_PU200.py index 4a6c601fa2ecd..00f5665e19c87 100644 --- a/RecoLocalTracker/SiPhase2VectorHitBuilder/test/VHs_combinatorialStudies_PU200.py +++ b/RecoLocalTracker/SiPhase2VectorHitBuilder/test/VHs_combinatorialStudies_PU200.py @@ -75,15 +75,25 @@ # debug process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring("debugVH_PU200"), - debugModules = cms.untracked.vstring("*"), - categories = cms.untracked.vstring("VectorHitsBuilderValidation"), - debugVH_PU200 = cms.untracked.PSet(threshold = cms.untracked.string("DEBUG"), - DEBUG = cms.untracked.PSet(limit = cms.untracked.int32(0)), - default = cms.untracked.PSet(limit = cms.untracked.int32(0)), - VectorHitsBuilderValidation = cms.untracked.PSet(limit = cms.untracked.int32(-1)) - ) - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + debugModules = cms.untracked.vstring('*'), + files = cms.untracked.PSet( + debugVH_PU200 = cms.untracked.PSet( + DEBUG = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + VectorHitsBuilderValidation = cms.untracked.PSet( + limit = cms.untracked.int32(-1) + ), + default = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + threshold = cms.untracked.string('DEBUG') + ) + ) +) # Analyzer process.analysis = cms.EDAnalyzer('VectorHitsBuilderValidation', diff --git a/RecoLocalTracker/SiPixelClusterizer/plugins/BuildFile.xml b/RecoLocalTracker/SiPixelClusterizer/plugins/BuildFile.xml index c7b16a6ef4ee2..82519c629f620 100644 --- a/RecoLocalTracker/SiPixelClusterizer/plugins/BuildFile.xml +++ b/RecoLocalTracker/SiPixelClusterizer/plugins/BuildFile.xml @@ -1,8 +1,15 @@ - - - + + + - + + + + + + + + diff --git a/RecoLocalTracker/SiPixelClusterizer/plugins/PixelClusterizerBase.h b/RecoLocalTracker/SiPixelClusterizer/plugins/PixelClusterizerBase.h index 9e3aad606851c..eb622cccb051e 100644 --- a/RecoLocalTracker/SiPixelClusterizer/plugins/PixelClusterizerBase.h +++ b/RecoLocalTracker/SiPixelClusterizer/plugins/PixelClusterizerBase.h @@ -1,13 +1,14 @@ #ifndef RecoLocalTracker_SiPixelClusterizer_PixelClusterizerBase_H #define RecoLocalTracker_SiPixelClusterizer_PixelClusterizerBase_H +#include + +#include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationServiceBase.h" #include "DataFormats/Common/interface/DetSetVector.h" #include "DataFormats/Common/interface/DetSetVectorNew.h" #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" #include "DataFormats/SiPixelDigi/interface/PixelDigi.h" #include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationServiceBase.h" -#include class PixelGeomDetUnit; @@ -20,29 +21,38 @@ class PixelClusterizerBase { typedef edmNew::DetSet::const_iterator ClusterIterator; struct AccretionCluster { - typedef unsigned short UShort; - static constexpr UShort MAXSIZE = 256; - UShort adc[MAXSIZE]; - UShort x[MAXSIZE]; - UShort y[MAXSIZE]; - UShort xmin = 16000; - UShort ymin = 16000; + static constexpr uint16_t MAXSIZE = 256; + uint16_t adc[MAXSIZE]; + uint16_t x[MAXSIZE]; + uint16_t y[MAXSIZE]; + uint16_t xmin = 16000; + uint16_t ymin = 16000; unsigned int isize = 0; - unsigned int curr = 0; + int charge = 0; // stack interface (unsafe ok for use below) - UShort top() const { return curr; } + unsigned int curr = 0; + uint16_t top() const { return curr; } void pop() { ++curr; } bool empty() { return curr == isize; } - bool add(SiPixelCluster::PixelPos const& p, UShort const iadc) { + void clear() { + xmin = 16000; + ymin = 16000; + isize = 0; + charge = 0; + curr = 0; + } + + bool add(SiPixelCluster::PixelPos const& p, uint16_t const iadc) { if (isize == MAXSIZE) return false; - xmin = std::min(xmin, (unsigned short)(p.row())); - ymin = std::min(ymin, (unsigned short)(p.col())); + xmin = std::min(xmin, p.row()); + ymin = std::min(ymin, p.col()); adc[isize] = iadc; x[isize] = p.row(); y[isize++] = p.col(); + charge += iadc; return true; } }; diff --git a/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelClusterProducer.cc b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelClusterProducer.cc index 15a6536ca644b..3c0f8b9754089 100644 --- a/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelClusterProducer.cc +++ b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelClusterProducer.cc @@ -16,7 +16,6 @@ #include "PixelThresholdClusterizer.h" // Geometry -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" // Data Formats @@ -55,6 +54,9 @@ SiPixelClusterProducer::SiPixelClusterProducer(edm::ParameterSet const& conf) else tPixelDigi = consumes>(conf.getParameter("src")); + trackerTopoToken_ = esConsumes(); + trackerGeomToken_ = esConsumes(); + const auto& payloadType = conf.getParameter("payloadType"); if (payloadType == "HLT") theSiPixelGainCalibration_ = std::make_unique(conf); @@ -102,11 +104,9 @@ void SiPixelClusterProducer::produce(edm::Event& e, const edm::EventSetup& es) { e.getByToken(tPixelDigi, inputDigi); // Step A.2: get event setup - edm::ESHandle geom; - es.get().get(geom); + edm::ESHandle geom = es.getHandle(trackerGeomToken_); - edm::ESHandle trackerTopologyHandle; - es.get().get(trackerTopologyHandle); + edm::ESHandle trackerTopologyHandle = es.getHandle(trackerTopoToken_); tTopo_ = trackerTopologyHandle.product(); // Step B: create the final output collection @@ -122,6 +122,14 @@ void SiPixelClusterProducer::produce(edm::Event& e, const edm::EventSetup& es) { // Step D: write output to file output->shrink_to_fit(); + + // set sequential identifier + for (auto& clusters : *output) { + uint16_t id = 0; + for (auto& cluster : clusters) { + cluster.setOriginalId(id++); + } + } e.put(tPutPixelClusters, std::move(output)); } @@ -153,15 +161,14 @@ void SiPixelClusterProducer::run(const T& input, int numberOfClusters = 0; // Iterate on detector units - typename T::const_iterator DSViter = input.begin(); - for (; DSViter != input.end(); DSViter++) { + for (auto const& dsv : input) { ++numberOfDetUnits; // LogDebug takes very long time, get rid off. - //LogDebug("SiStripClusterizer") << "[SiPixelClusterProducer::run] DetID" << DSViter->id; + //LogDebug("SiStripClusterizer") << "[SiPixelClusterProducer::run] DetID" << dsv.id; std::vector badChannels; - DetId detIdObject(DSViter->detId()); + DetId detIdObject(dsv.detId()); // Comment: At the moment the clusterizer depends on geometry // to access information as the pixel topology (number of columns @@ -177,8 +184,8 @@ void SiPixelClusterProducer::run(const T& input, { // Produce clusters for this DetUnit and store them in // a DetSet - edmNew::DetSetVector::FastFiller spc(output, DSViter->detId()); - clusterizer_->clusterizeDetUnit(*DSViter, pixDet, tTopo_, badChannels, spc); + edmNew::DetSetVector::FastFiller spc(output, dsv.detId()); + clusterizer_->clusterizeDetUnit(dsv, pixDet, tTopo_, badChannels, spc); if (spc.empty()) { spc.abort(); } else { diff --git a/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelClusterProducer.h b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelClusterProducer.h index 463b5db290dee..6e8cb0c21496c 100644 --- a/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelClusterProducer.h +++ b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelClusterProducer.h @@ -33,6 +33,7 @@ //#include "Geometry/CommonDetUnit/interface/TrackingGeometry.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "DataFormats/Common/interface/DetSetVector.h" #include "DataFormats/Common/interface/DetSetVectorNew.h" @@ -71,6 +72,8 @@ class dso_hidden SiPixelClusterProducer final : public edm::stream::EDProducer<> edm::EDGetTokenT tPixelClusters; edm::EDGetTokenT> tPixelDigi; edm::EDPutTokenT tPutPixelClusters; + edm::ESGetToken trackerTopoToken_; + edm::ESGetToken trackerGeomToken_; // TO DO: maybe allow a map of pointers? std::unique_ptr theSiPixelGainCalibration_; const std::string clusterMode_; // user's choice of the clusterizer diff --git a/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelDigisClustersFromSoA.cc b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelDigisClustersFromSoA.cc new file mode 100644 index 0000000000000..0078bae38306a --- /dev/null +++ b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelDigisClustersFromSoA.cc @@ -0,0 +1,150 @@ +#include "CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h" +#include "DataFormats/Common/interface/DetSetVector.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/DetId/interface/DetId.h" +#include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" +#include "DataFormats/SiPixelDigi/interface/PixelDigi.h" +#include "DataFormats/SiPixelDigi/interface/SiPixelDigisSoA.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "RecoLocalTracker/SiPixelClusterizer/plugins/PixelClusterizerBase.h" + +class SiPixelDigisClustersFromSoA : public edm::global::EDProducer<> { +public: + explicit SiPixelDigisClustersFromSoA(const edm::ParameterSet& iConfig); + ~SiPixelDigisClustersFromSoA() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const override; + + const edm::ESGetToken topoToken_; + + edm::EDGetTokenT digiGetToken_; + + edm::EDPutTokenT> digiPutToken_; + edm::EDPutTokenT clusterPutToken_; +}; + +SiPixelDigisClustersFromSoA::SiPixelDigisClustersFromSoA(const edm::ParameterSet& iConfig) + : topoToken_(esConsumes()), + digiGetToken_(consumes(iConfig.getParameter("src"))), + digiPutToken_(produces>()), + clusterPutToken_(produces()) {} + +void SiPixelDigisClustersFromSoA::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("src", edm::InputTag("siPixelDigisSoA")); + descriptions.addWithDefaultLabel(desc); +} + +void SiPixelDigisClustersFromSoA::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { + const auto& digis = iEvent.get(digiGetToken_); + const uint32_t nDigis = digis.size(); + const auto& ttopo = iSetup.getData(topoToken_); + + auto collection = std::make_unique>(); + auto outputClusters = std::make_unique(); + outputClusters->reserve(gpuClustering::maxNumModules, nDigis / 4); + + edm::DetSet* detDigis = nullptr; + for (uint32_t i = 0; i < nDigis; i++) { + if (digis.pdigi(i) == 0) + continue; + detDigis = &collection->find_or_insert(digis.rawIdArr(i)); + if ((*detDigis).empty()) + (*detDigis).data.reserve(64); // avoid the first relocations + break; + } + + int32_t nclus = -1; + std::vector aclusters(gpuClustering::maxNumClustersPerModules); +#ifdef EDM_ML_DEBUG + auto totClustersFilled = 0; +#endif + + auto fillClusters = [&](uint32_t detId) { + if (nclus < 0) + return; // this in reality should never happen + edmNew::DetSetVector::FastFiller spc(*outputClusters, detId); + auto layer = (DetId(detId).subdetId() == 1) ? ttopo.pxbLayer(detId) : 0; + auto clusterThreshold = (layer == 1) ? 2000 : 4000; + for (int32_t ic = 0; ic < nclus + 1; ++ic) { + auto const& acluster = aclusters[ic]; + // in any case we cannot go out of sync with gpu... + if (acluster.charge < clusterThreshold) + edm::LogWarning("SiPixelDigisClustersFromSoA") << "cluster below charge Threshold " + << "Layer/DetId/clusId " << layer << '/' << detId << '/' << ic + << " size/charge " << acluster.isize << '/' << acluster.charge; + SiPixelCluster cluster(acluster.isize, acluster.adc, acluster.x, acluster.y, acluster.xmin, acluster.ymin, ic); +#ifdef EDM_ML_DEBUG + ++totClustersFilled; +#endif + LogDebug("SiPixelDigisClustersFromSoA") + << "putting in this cluster " << ic << " " << cluster.charge() << " " << cluster.pixelADC().size(); + // sort by row (x) + spc.push_back(std::move(cluster)); + std::push_heap(spc.begin(), spc.end(), [](SiPixelCluster const& cl1, SiPixelCluster const& cl2) { + return cl1.minPixelRow() < cl2.minPixelRow(); + }); + } + for (int32_t ic = 0; ic < nclus + 1; ++ic) + aclusters[ic].clear(); + nclus = -1; + // sort by row (x) + std::sort_heap(spc.begin(), spc.end(), [](SiPixelCluster const& cl1, SiPixelCluster const& cl2) { + return cl1.minPixelRow() < cl2.minPixelRow(); + }); + if (spc.empty()) + spc.abort(); + }; + + for (uint32_t i = 0; i < nDigis; i++) { + if (digis.pdigi(i) == 0) + continue; + if (digis.clus(i) > 9000) + continue; // not in cluster; TODO add an assert for the size + assert(digis.rawIdArr(i) > 109999); + if ((*detDigis).detId() != digis.rawIdArr(i)) { + fillClusters((*detDigis).detId()); + assert(nclus == -1); + detDigis = &collection->find_or_insert(digis.rawIdArr(i)); + if ((*detDigis).empty()) + (*detDigis).data.reserve(64); // avoid the first relocations + else { + edm::LogWarning("SiPixelDigisClustersFromSoA") << "Problem det present twice in input! " << (*detDigis).detId(); + } + } + (*detDigis).data.emplace_back(digis.pdigi(i)); + auto const& dig = (*detDigis).data.back(); + // fill clusters + assert(digis.clus(i) >= 0); + assert(digis.clus(i) < gpuClustering::maxNumClustersPerModules); + nclus = std::max(digis.clus(i), nclus); + auto row = dig.row(); + auto col = dig.column(); + SiPixelCluster::PixelPos pix(row, col); + aclusters[digis.clus(i)].add(pix, digis.adc(i)); + } + + // fill final clusters + if (detDigis) + fillClusters((*detDigis).detId()); +#ifdef EDM_ML_DEBUG + LogDebug("SiPixelDigisClustersFromSoA") << "filled " << totClustersFilled << " clusters"; +#endif + + iEvent.put(digiPutToken_, std::move(collection)); + iEvent.put(clusterPutToken_, std::move(outputClusters)); +} + +DEFINE_FWK_MODULE(SiPixelDigisClustersFromSoA); diff --git a/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelRawToClusterCUDA.cc b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelRawToClusterCUDA.cc new file mode 100644 index 0000000000000..93b92e145ec5c --- /dev/null +++ b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelRawToClusterCUDA.cc @@ -0,0 +1,259 @@ +// C++ includes +#include +#include +#include + +// CMSSW includes +#include "CUDADataFormats/Common/interface/Product.h" +#include "CUDADataFormats/SiPixelCluster/interface/SiPixelClustersCUDA.h" +#include "CUDADataFormats/SiPixelDigi/interface/SiPixelDigiErrorsCUDA.h" +#include "CUDADataFormats/SiPixelDigi/interface/SiPixelDigisCUDA.h" +#include "CalibTracker/Records/interface/SiPixelGainCalibrationForHLTGPURcd.h" +#include "CalibTracker/SiPixelESProducers/interface/SiPixelROCsStatusAndMappingWrapper.h" +#include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTGPU.h" +#include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingTree.h" +#include "DataFormats/FEDRawData/interface/FEDNumbering.h" +#include "DataFormats/FEDRawData/interface/FEDRawData.h" +#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" +#include "EventFilter/SiPixelRawToDigi/interface/PixelDataFormatter.h" +#include "EventFilter/SiPixelRawToDigi/interface/PixelUnpackingRegions.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESTransientHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDAServices/interface/CUDAService.h" +#include "RecoTracker/Record/interface/CkfComponentsRecord.h" + +// local includes +#include "SiPixelRawToClusterGPUKernel.h" + +class SiPixelRawToClusterCUDA : public edm::stream::EDProducer { +public: + explicit SiPixelRawToClusterCUDA(const edm::ParameterSet& iConfig); + ~SiPixelRawToClusterCUDA() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void acquire(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + edm::WaitingTaskWithArenaHolder waitingTaskHolder) override; + void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; + + edm::EDGetTokenT rawGetToken_; + + edm::EDPutTokenT> digiPutToken_; + edm::EDPutTokenT> digiErrorPutToken_; + edm::EDPutTokenT> clusterPutToken_; + + cms::cuda::ContextState ctxState_; + + edm::ESWatcher recordWatcher_; + edm::ESGetToken gpuMapToken_; + edm::ESGetToken gainsToken_; + edm::ESGetToken cablingMapToken_; + + std::unique_ptr cabling_; + std::vector fedIds_; + const SiPixelFedCablingMap* cablingMap_ = nullptr; + std::unique_ptr regions_; + + pixelgpudetails::SiPixelRawToClusterGPUKernel gpuAlgo_; + std::unique_ptr wordFedAppender_; + PixelDataFormatter::Errors errors_; + + const bool isRun2_; + const bool includeErrors_; + const bool useQuality_; +}; + +SiPixelRawToClusterCUDA::SiPixelRawToClusterCUDA(const edm::ParameterSet& iConfig) + : rawGetToken_(consumes(iConfig.getParameter("InputLabel"))), + digiPutToken_(produces>()), + clusterPutToken_(produces>()), + gpuMapToken_(esConsumes()), + gainsToken_(esConsumes()), + cablingMapToken_(esConsumes( + edm::ESInputTag("", iConfig.getParameter("CablingMapLabel")))), + isRun2_(iConfig.getParameter("isRun2")), + includeErrors_(iConfig.getParameter("IncludeErrors")), + useQuality_(iConfig.getParameter("UseQualityInfo")) { + if (includeErrors_) { + digiErrorPutToken_ = produces>(); + } + + // regions + if (!iConfig.getParameter("Regions").getParameterNames().empty()) { + regions_ = std::make_unique(iConfig, consumesCollector()); + } + + edm::Service cs; + if (cs->enabled()) { + wordFedAppender_ = std::make_unique(); + } +} + +void SiPixelRawToClusterCUDA::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("isRun2", true); + desc.add("IncludeErrors", true); + desc.add("UseQualityInfo", false); + desc.add("InputLabel", edm::InputTag("rawDataCollector")); + { + edm::ParameterSetDescription psd0; + psd0.addOptional>("inputs"); + psd0.addOptional>("deltaPhi"); + psd0.addOptional>("maxZ"); + psd0.addOptional("beamSpot"); + desc.add("Regions", psd0) + ->setComment("## Empty Regions PSet means complete unpacking"); + } + desc.add("CablingMapLabel", "")->setComment("CablingMap label"); //Tav + descriptions.addWithDefaultLabel(desc); +} + +void SiPixelRawToClusterCUDA::acquire(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + edm::WaitingTaskWithArenaHolder waitingTaskHolder) { + cms::cuda::ScopedContextAcquire ctx{iEvent.streamID(), std::move(waitingTaskHolder), ctxState_}; + + auto hgpuMap = iSetup.getHandle(gpuMapToken_); + if (hgpuMap->hasQuality() != useQuality_) { + throw cms::Exception("LogicError") + << "UseQuality of the module (" << useQuality_ + << ") differs the one from SiPixelROCsStatusAndMappingWrapper. Please fix your configuration."; + } + // get the GPU product already here so that the async transfer can begin + const auto* gpuMap = hgpuMap->getGPUProductAsync(ctx.stream()); + + auto hgains = iSetup.getHandle(gainsToken_); + // get the GPU product already here so that the async transfer can begin + const auto* gpuGains = hgains->getGPUProductAsync(ctx.stream()); + + cms::cuda::device::unique_ptr modulesToUnpackRegional; + const unsigned char* gpuModulesToUnpack; + + if (regions_) { + regions_->run(iEvent, iSetup); + LogDebug("SiPixelRawToCluster") << "region2unpack #feds: " << regions_->nFEDs(); + LogDebug("SiPixelRawToCluster") << "region2unpack #modules (BPIX,EPIX,total): " << regions_->nBarrelModules() << " " + << regions_->nForwardModules() << " " << regions_->nModules(); + modulesToUnpackRegional = hgpuMap->getModToUnpRegionalAsync(*(regions_->modulesToUnpack()), ctx.stream()); + gpuModulesToUnpack = modulesToUnpackRegional.get(); + } else { + gpuModulesToUnpack = hgpuMap->getModToUnpAllAsync(ctx.stream()); + } + + // initialize cabling map or update if necessary + if (recordWatcher_.check(iSetup)) { + // cabling map, which maps online address (fed->link->ROC->local pixel) to offline (DetId->global pixel) + auto cablingMap = iSetup.getTransientHandle(cablingMapToken_); + cablingMap_ = cablingMap.product(); + fedIds_ = cablingMap->fedIds(); + cabling_ = cablingMap->cablingTree(); + LogDebug("map version:") << cabling_->version(); + } + + const auto& buffers = iEvent.get(rawGetToken_); + + errors_.clear(); + + // GPU specific: Data extraction for RawToDigi GPU + unsigned int wordCounterGPU = 0; + unsigned int fedCounter = 0; + bool errorsInEvent = false; + + // In CPU algorithm this loop is part of PixelDataFormatter::interpretRawData() + ErrorChecker errorcheck; + for (int fedId : fedIds_) { + if (regions_ && !regions_->mayUnpackFED(fedId)) + continue; + + // for GPU + // first 150 index stores the fedId and next 150 will store the + // start index of word in that fed + assert(fedId >= FEDNumbering::MINSiPixeluTCAFEDID); + fedCounter++; + + // get event data for this fed + const FEDRawData& rawData = buffers.FEDData(fedId); + + // GPU specific + int nWords = rawData.size() / sizeof(cms_uint64_t); + if (nWords == 0) { + continue; + } + + // check CRC bit + const cms_uint64_t* trailer = reinterpret_cast(rawData.data()) + (nWords - 1); + if (not errorcheck.checkCRC(errorsInEvent, fedId, trailer, errors_)) { + continue; + } + + // check headers + const cms_uint64_t* header = reinterpret_cast(rawData.data()); + header--; + bool moreHeaders = true; + while (moreHeaders) { + header++; + bool headerStatus = errorcheck.checkHeader(errorsInEvent, fedId, header, errors_); + moreHeaders = headerStatus; + } + + // check trailers + bool moreTrailers = true; + trailer++; + while (moreTrailers) { + trailer--; + bool trailerStatus = errorcheck.checkTrailer(errorsInEvent, fedId, nWords, trailer, errors_); + moreTrailers = trailerStatus; + } + + const cms_uint32_t* bw = (const cms_uint32_t*)(header + 1); + const cms_uint32_t* ew = (const cms_uint32_t*)(trailer); + + assert(0 == (ew - bw) % 2); + wordFedAppender_->initializeWordFed(fedId, wordCounterGPU, bw, (ew - bw)); + wordCounterGPU += (ew - bw); + + } // end of for loop + + gpuAlgo_.makeClustersAsync(isRun2_, + gpuMap, + gpuModulesToUnpack, + gpuGains, + *wordFedAppender_, + std::move(errors_), + wordCounterGPU, + fedCounter, + useQuality_, + includeErrors_, + edm::MessageDrop::instance()->debugEnabled, + ctx.stream()); +} + +void SiPixelRawToClusterCUDA::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + cms::cuda::ScopedContextProduce ctx{ctxState_}; + + auto tmp = gpuAlgo_.getResults(); + ctx.emplace(iEvent, digiPutToken_, std::move(tmp.first)); + ctx.emplace(iEvent, clusterPutToken_, std::move(tmp.second)); + if (includeErrors_) { + ctx.emplace(iEvent, digiErrorPutToken_, gpuAlgo_.getErrors()); + } +} + +// define as framework plugin +DEFINE_FWK_MODULE(SiPixelRawToClusterCUDA); diff --git a/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelRawToClusterGPUKernel.cu b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelRawToClusterGPUKernel.cu new file mode 100644 index 0000000000000..25e5c925990f8 --- /dev/null +++ b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelRawToClusterGPUKernel.cu @@ -0,0 +1,669 @@ +/* Sushil Dubey, Shashi Dugad, TIFR, July 2017 + * + * File Name: RawToClusterGPU.cu + * Description: It converts Raw data into Digi Format on GPU + * Finaly the Output of RawToDigi data is given to pixelClusterizer +**/ + +// C++ includes +#include +#include +#include +#include +#include +#include +#include + +// CUDA includes +#include + +// CMSSW includes +#include "CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelROCsStatusAndMapping.h" +#include "DataFormats/FEDRawData/interface/FEDNumbering.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" +#include "RecoLocalTracker/SiPixelClusterizer/plugins/gpuCalibPixel.h" +#include "RecoLocalTracker/SiPixelClusterizer/plugins/gpuClusterChargeCut.h" +#include "RecoLocalTracker/SiPixelClusterizer/plugins/gpuClustering.h" + +// local includes +#include "SiPixelRawToClusterGPUKernel.h" + +namespace pixelgpudetails { + + // number of words for all the FEDs + constexpr uint32_t MAX_FED_WORDS = pixelgpudetails::MAX_FED * pixelgpudetails::MAX_WORD; + + SiPixelRawToClusterGPUKernel::WordFedAppender::WordFedAppender() { + word_ = cms::cuda::make_host_noncached_unique(MAX_FED_WORDS, cudaHostAllocWriteCombined); + fedId_ = cms::cuda::make_host_noncached_unique(MAX_FED_WORDS, cudaHostAllocWriteCombined); + } + + void SiPixelRawToClusterGPUKernel::WordFedAppender::initializeWordFed(int fedId, + unsigned int wordCounterGPU, + const cms_uint32_t *src, + unsigned int length) { + std::memcpy(word_.get() + wordCounterGPU, src, sizeof(cms_uint32_t) * length); + std::memset(fedId_.get() + wordCounterGPU / 2, fedId - FEDNumbering::MINSiPixeluTCAFEDID, length / 2); + } + + //////////////////// + + __device__ uint32_t getLink(uint32_t ww) { + return ((ww >> pixelgpudetails::LINK_shift) & pixelgpudetails::LINK_mask); + } + + __device__ uint32_t getRoc(uint32_t ww) { return ((ww >> pixelgpudetails::ROC_shift) & pixelgpudetails::ROC_mask); } + + __device__ uint32_t getADC(uint32_t ww) { return ((ww >> pixelgpudetails::ADC_shift) & pixelgpudetails::ADC_mask); } + + __device__ bool isBarrel(uint32_t rawId) { + return (PixelSubdetector::PixelBarrel == ((rawId >> DetId::kSubdetOffset) & DetId::kSubdetMask)); + } + + __device__ pixelgpudetails::DetIdGPU getRawId(const SiPixelROCsStatusAndMapping *cablingMap, + uint8_t fed, + uint32_t link, + uint32_t roc) { + uint32_t index = fed * MAX_LINK * MAX_ROC + (link - 1) * MAX_ROC + roc; + pixelgpudetails::DetIdGPU detId = { + cablingMap->rawId[index], cablingMap->rocInDet[index], cablingMap->moduleId[index]}; + return detId; + } + + //reference http://cmsdoxygen.web.cern.ch/cmsdoxygen/CMSSW_9_2_0/doc/html/dd/d31/FrameConversion_8cc_source.html + //http://cmslxr.fnal.gov/source/CondFormats/SiPixelObjects/src/PixelROC.cc?v=CMSSW_9_2_0#0071 + // Convert local pixel to pixelgpudetails::global pixel + __device__ pixelgpudetails::Pixel frameConversion( + bool bpix, int side, uint32_t layer, uint32_t rocIdInDetUnit, pixelgpudetails::Pixel local) { + int slopeRow = 0, slopeCol = 0; + int rowOffset = 0, colOffset = 0; + + if (bpix) { + if (side == -1 && layer != 1) { // -Z side: 4 non-flipped modules oriented like 'dddd', except Layer 1 + if (rocIdInDetUnit < 8) { + slopeRow = 1; + slopeCol = -1; + rowOffset = 0; + colOffset = (8 - rocIdInDetUnit) * pixelgpudetails::numColsInRoc - 1; + } else { + slopeRow = -1; + slopeCol = 1; + rowOffset = 2 * pixelgpudetails::numRowsInRoc - 1; + colOffset = (rocIdInDetUnit - 8) * pixelgpudetails::numColsInRoc; + } // if roc + } else { // +Z side: 4 non-flipped modules oriented like 'pppp', but all 8 in layer1 + if (rocIdInDetUnit < 8) { + slopeRow = -1; + slopeCol = 1; + rowOffset = 2 * pixelgpudetails::numRowsInRoc - 1; + colOffset = rocIdInDetUnit * pixelgpudetails::numColsInRoc; + } else { + slopeRow = 1; + slopeCol = -1; + rowOffset = 0; + colOffset = (16 - rocIdInDetUnit) * pixelgpudetails::numColsInRoc - 1; + } + } + + } else { // fpix + if (side == -1) { // pannel 1 + if (rocIdInDetUnit < 8) { + slopeRow = 1; + slopeCol = -1; + rowOffset = 0; + colOffset = (8 - rocIdInDetUnit) * pixelgpudetails::numColsInRoc - 1; + } else { + slopeRow = -1; + slopeCol = 1; + rowOffset = 2 * pixelgpudetails::numRowsInRoc - 1; + colOffset = (rocIdInDetUnit - 8) * pixelgpudetails::numColsInRoc; + } + } else { // pannel 2 + if (rocIdInDetUnit < 8) { + slopeRow = 1; + slopeCol = -1; + rowOffset = 0; + colOffset = (8 - rocIdInDetUnit) * pixelgpudetails::numColsInRoc - 1; + } else { + slopeRow = -1; + slopeCol = 1; + rowOffset = 2 * pixelgpudetails::numRowsInRoc - 1; + colOffset = (rocIdInDetUnit - 8) * pixelgpudetails::numColsInRoc; + } + + } // side + } + + uint32_t gRow = rowOffset + slopeRow * local.row; + uint32_t gCol = colOffset + slopeCol * local.col; + // inside frameConversion row: gRow, column: gCol + pixelgpudetails::Pixel global = {gRow, gCol}; + return global; + } + + // error decoding and handling copied from EventFilter/SiPixelRawToDigi/src/ErrorChecker.cc + __device__ uint8_t conversionError(uint8_t fedId, uint8_t status, bool debug = false) { + uint8_t errorType = 0; + + switch (status) { + case (1): { + if (debug) + printf("Error in Fed: %i, invalid channel Id (errorType = 35\n)", fedId); + errorType = 35; + break; + } + case (2): { + if (debug) + printf("Error in Fed: %i, invalid ROC Id (errorType = 36)\n", fedId); + errorType = 36; + break; + } + case (3): { + if (debug) + printf("Error in Fed: %i, invalid dcol/pixel value (errorType = 37)\n", fedId); + errorType = 37; + break; + } + case (4): { + if (debug) + printf("Error in Fed: %i, dcol/pixel read out of order (errorType = 38)\n", fedId); + errorType = 38; + break; + } + default: + if (debug) + printf("Cabling check returned unexpected result, status = %i\n", status); + }; + + return errorType; + } + + __device__ bool rocRowColIsValid(uint32_t rocRow, uint32_t rocCol) { + /// row and column in ROC representation + return ((rocRow < pixelgpudetails::numRowsInRoc) & (rocCol < pixelgpudetails::numColsInRoc)); + } + + __device__ bool dcolIsValid(uint32_t dcol, uint32_t pxid) { return ((dcol < 26) & (2 <= pxid) & (pxid < 162)); } + + // error decoding and handling copied from EventFilter/SiPixelRawToDigi/src/ErrorChecker.cc + __device__ uint8_t checkROC(uint32_t errorWord, + uint8_t fedId, + uint32_t link, + const SiPixelROCsStatusAndMapping *cablingMap, + bool debug = false) { + uint8_t errorType = (errorWord >> pixelgpudetails::ROC_shift) & pixelgpudetails::ERROR_mask; + if (errorType < 25) + return 0; + bool errorFound = false; + + switch (errorType) { + case (25): { + errorFound = true; + uint32_t index = fedId * MAX_LINK * MAX_ROC + (link - 1) * MAX_ROC + 1; + if (index > 1 && index <= cablingMap->size) { + if (!(link == cablingMap->link[index] && 1 == cablingMap->roc[index])) + errorFound = false; + } + if (debug and errorFound) + printf("Invalid ROC = 25 found (errorType = 25)\n"); + break; + } + case (26): { + if (debug) + printf("Gap word found (errorType = 26)\n"); + errorFound = true; + break; + } + case (27): { + if (debug) + printf("Dummy word found (errorType = 27)\n"); + errorFound = true; + break; + } + case (28): { + if (debug) + printf("Error fifo nearly full (errorType = 28)\n"); + errorFound = true; + break; + } + case (29): { + if (debug) + printf("Timeout on a channel (errorType = 29)\n"); + if ((errorWord >> pixelgpudetails::OMIT_ERR_shift) & pixelgpudetails::OMIT_ERR_mask) { + if (debug) + printf("...first errorType=29 error, this gets masked out\n"); + } + errorFound = true; + break; + } + case (30): { + if (debug) + printf("TBM error trailer (errorType = 30)\n"); + int stateMatch_bits = 4; + int stateMatch_shift = 8; + uint32_t stateMatch_mask = ~(~uint32_t(0) << stateMatch_bits); + int stateMatch = (errorWord >> stateMatch_shift) & stateMatch_mask; + if (stateMatch != 1 && stateMatch != 8) { + if (debug) + printf("FED error 30 with unexpected State Bits (errorType = 30)\n"); + } + if (stateMatch == 1) + errorType = 40; // 1=Overflow -> 40, 8=number of ROCs -> 30 + errorFound = true; + break; + } + case (31): { + if (debug) + printf("Event number error (errorType = 31)\n"); + errorFound = true; + break; + } + default: + errorFound = false; + }; + + return errorFound ? errorType : 0; + } + + // error decoding and handling copied from EventFilter/SiPixelRawToDigi/src/ErrorChecker.cc + __device__ uint32_t getErrRawID(uint8_t fedId, + uint32_t errWord, + uint32_t errorType, + const SiPixelROCsStatusAndMapping *cablingMap, + bool debug = false) { + uint32_t rID = 0xffffffff; + + switch (errorType) { + case 25: + case 30: + case 31: + case 36: + case 40: { + uint32_t roc = 1; + uint32_t link = (errWord >> pixelgpudetails::LINK_shift) & pixelgpudetails::LINK_mask; + uint32_t rID_temp = getRawId(cablingMap, fedId, link, roc).rawId; + if (rID_temp != gpuClustering::invalidModuleId) + rID = rID_temp; + break; + } + case 29: { + int chanNmbr = 0; + const int DB0_shift = 0; + const int DB1_shift = DB0_shift + 1; + const int DB2_shift = DB1_shift + 1; + const int DB3_shift = DB2_shift + 1; + const int DB4_shift = DB3_shift + 1; + const uint32_t DataBit_mask = ~(~uint32_t(0) << 1); + + int CH1 = (errWord >> DB0_shift) & DataBit_mask; + int CH2 = (errWord >> DB1_shift) & DataBit_mask; + int CH3 = (errWord >> DB2_shift) & DataBit_mask; + int CH4 = (errWord >> DB3_shift) & DataBit_mask; + int CH5 = (errWord >> DB4_shift) & DataBit_mask; + int BLOCK_bits = 3; + int BLOCK_shift = 8; + uint32_t BLOCK_mask = ~(~uint32_t(0) << BLOCK_bits); + int BLOCK = (errWord >> BLOCK_shift) & BLOCK_mask; + int localCH = 1 * CH1 + 2 * CH2 + 3 * CH3 + 4 * CH4 + 5 * CH5; + if (BLOCK % 2 == 0) + chanNmbr = (BLOCK / 2) * 9 + localCH; + else + chanNmbr = ((BLOCK - 1) / 2) * 9 + 4 + localCH; + if ((chanNmbr < 1) || (chanNmbr > 36)) + break; // signifies unexpected result + + uint32_t roc = 1; + uint32_t link = chanNmbr; + uint32_t rID_temp = getRawId(cablingMap, fedId, link, roc).rawId; + if (rID_temp != gpuClustering::invalidModuleId) + rID = rID_temp; + break; + } + case 37: + case 38: { + uint32_t roc = (errWord >> pixelgpudetails::ROC_shift) & pixelgpudetails::ROC_mask; + uint32_t link = (errWord >> pixelgpudetails::LINK_shift) & pixelgpudetails::LINK_mask; + uint32_t rID_temp = getRawId(cablingMap, fedId, link, roc).rawId; + if (rID_temp != gpuClustering::invalidModuleId) + rID = rID_temp; + break; + } + default: + break; + }; + + return rID; + } + + // Kernel to perform Raw to Digi conversion + __global__ void RawToDigi_kernel(const SiPixelROCsStatusAndMapping *cablingMap, + const unsigned char *modToUnp, + const uint32_t wordCounter, + const uint32_t *word, + const uint8_t *fedIds, + uint16_t *xx, + uint16_t *yy, + uint16_t *adc, + uint32_t *pdigi, + uint32_t *rawIdArr, + uint16_t *moduleId, + cms::cuda::SimpleVector *err, + bool useQualityInfo, + bool includeErrors, + bool debug) { + //if (threadIdx.x==0) printf("Event: %u blockIdx.x: %u start: %u end: %u\n", eventno, blockIdx.x, begin, end); + + int32_t first = threadIdx.x + blockIdx.x * blockDim.x; + for (int32_t iloop = first, nend = wordCounter; iloop < nend; iloop += blockDim.x * gridDim.x) { + auto gIndex = iloop; + xx[gIndex] = 0; + yy[gIndex] = 0; + adc[gIndex] = 0; + bool skipROC = false; + + uint8_t fedId = fedIds[gIndex / 2]; // +1200; + + // initialize (too many coninue below) + pdigi[gIndex] = 0; + rawIdArr[gIndex] = 0; + moduleId[gIndex] = gpuClustering::invalidModuleId; + + uint32_t ww = word[gIndex]; // Array containing 32 bit raw data + if (ww == 0) { + // 0 is an indicator of a noise/dead channel, skip these pixels during clusterization + continue; + } + + uint32_t link = getLink(ww); // Extract link + uint32_t roc = getRoc(ww); // Extract Roc in link + pixelgpudetails::DetIdGPU detId = getRawId(cablingMap, fedId, link, roc); + + uint8_t errorType = checkROC(ww, fedId, link, cablingMap, debug); + skipROC = (roc < pixelgpudetails::maxROCIndex) ? false : (errorType != 0); + if (includeErrors and skipROC) { + uint32_t rID = getErrRawID(fedId, ww, errorType, cablingMap, debug); + err->push_back(SiPixelErrorCompact{rID, ww, errorType, fedId}); + continue; + } + + uint32_t rawId = detId.rawId; + uint32_t rocIdInDetUnit = detId.rocInDet; + bool barrel = isBarrel(rawId); + + uint32_t index = fedId * MAX_LINK * MAX_ROC + (link - 1) * MAX_ROC + roc; + if (useQualityInfo) { + skipROC = cablingMap->badRocs[index]; + if (skipROC) + continue; + } + skipROC = modToUnp[index]; + if (skipROC) + continue; + + uint32_t layer = 0; + int side = 0, panel = 0, module = 0; + + if (barrel) { + layer = (rawId >> pixelgpudetails::layerStartBit) & pixelgpudetails::layerMask; + module = (rawId >> pixelgpudetails::moduleStartBit) & pixelgpudetails::moduleMask; + side = (module < 5) ? -1 : 1; + } else { + // endcap ids + layer = 0; + panel = (rawId >> pixelgpudetails::panelStartBit) & pixelgpudetails::panelMask; + side = (panel == 1) ? -1 : 1; + } + + // ***special case of layer to 1 be handled here + pixelgpudetails::Pixel localPix; + if (layer == 1) { + uint32_t col = (ww >> pixelgpudetails::COL_shift) & pixelgpudetails::COL_mask; + uint32_t row = (ww >> pixelgpudetails::ROW_shift) & pixelgpudetails::ROW_mask; + localPix.row = row; + localPix.col = col; + if (includeErrors) { + if (not rocRowColIsValid(row, col)) { + uint8_t error = conversionError(fedId, 3, debug); //use the device function and fill the arrays + err->push_back(SiPixelErrorCompact{rawId, ww, error, fedId}); + if (debug) + printf("BPIX1 Error status: %i\n", error); + continue; + } + } + } else { + // ***conversion rules for dcol and pxid + uint32_t dcol = (ww >> pixelgpudetails::DCOL_shift) & pixelgpudetails::DCOL_mask; + uint32_t pxid = (ww >> pixelgpudetails::PXID_shift) & pixelgpudetails::PXID_mask; + uint32_t row = pixelgpudetails::numRowsInRoc - pxid / 2; + uint32_t col = dcol * 2 + pxid % 2; + localPix.row = row; + localPix.col = col; + if (includeErrors and not dcolIsValid(dcol, pxid)) { + uint8_t error = conversionError(fedId, 3, debug); + err->push_back(SiPixelErrorCompact{rawId, ww, error, fedId}); + if (debug) + printf("Error status: %i %d %d %d %d\n", error, dcol, pxid, fedId, roc); + continue; + } + } + + pixelgpudetails::Pixel globalPix = frameConversion(barrel, side, layer, rocIdInDetUnit, localPix); + xx[gIndex] = globalPix.row; // origin shifting by 1 0-159 + yy[gIndex] = globalPix.col; // origin shifting by 1 0-415 + adc[gIndex] = getADC(ww); + pdigi[gIndex] = pixelgpudetails::pack(globalPix.row, globalPix.col, adc[gIndex]); + moduleId[gIndex] = detId.moduleId; + rawIdArr[gIndex] = rawId; + } // end of loop (gIndex < end) + + } // end of Raw to Digi kernel + + __global__ void fillHitsModuleStart(uint32_t const *__restrict__ cluStart, uint32_t *__restrict__ moduleStart) { + assert(gpuClustering::maxNumModules < 2048); // easy to extend at least till 32*1024 + assert(1 == gridDim.x); + assert(0 == blockIdx.x); + + int first = threadIdx.x; + + // limit to maxHitsInModule() + for (int i = first, iend = gpuClustering::maxNumModules; i < iend; i += blockDim.x) { + moduleStart[i + 1] = std::min(gpuClustering::maxHitsInModule(), cluStart[i]); + } + + __shared__ uint32_t ws[32]; + cms::cuda::blockPrefixScan(moduleStart + 1, moduleStart + 1, 1024, ws); + cms::cuda::blockPrefixScan(moduleStart + 1025, moduleStart + 1025, gpuClustering::maxNumModules - 1024, ws); + + for (int i = first + 1025, iend = gpuClustering::maxNumModules + 1; i < iend; i += blockDim.x) { + moduleStart[i] += moduleStart[1024]; + } + __syncthreads(); + +#ifdef GPU_DEBUG + assert(0 == moduleStart[0]); + auto c0 = std::min(gpuClustering::maxHitsInModule(), cluStart[0]); + assert(c0 == moduleStart[1]); + assert(moduleStart[1024] >= moduleStart[1023]); + assert(moduleStart[1025] >= moduleStart[1024]); + assert(moduleStart[gpuClustering::maxNumModules] >= moduleStart[1025]); + + for (int i = first, iend = gpuClustering::maxNumModules + 1; i < iend; i += blockDim.x) { + if (0 != i) + assert(moduleStart[i] >= moduleStart[i - i]); + // [BPX1, BPX2, BPX3, BPX4, FP1, FP2, FP3, FN1, FN2, FN3, LAST_VALID] + // [ 0, 96, 320, 672, 1184, 1296, 1408, 1520, 1632, 1744, 1856] + if (i == 96 || i == 1184 || i == 1744 || i == gpuClustering::maxNumModules) + printf("moduleStart %d %d\n", i, moduleStart[i]); + } +#endif + + // avoid overflow + auto constexpr maxNumClusters = gpuClustering::maxNumClusters; + for (int i = first, iend = gpuClustering::maxNumModules + 1; i < iend; i += blockDim.x) { + moduleStart[i] = std::clamp(moduleStart[i], 0U, maxNumClusters); + } + } + + // Interface to outside + void SiPixelRawToClusterGPUKernel::makeClustersAsync(bool isRun2, + const SiPixelROCsStatusAndMapping *cablingMap, + const unsigned char *modToUnp, + const SiPixelGainForHLTonGPU *gains, + const WordFedAppender &wordFed, + SiPixelFormatterErrors &&errors, + const uint32_t wordCounter, + const uint32_t fedCounter, + bool useQualityInfo, + bool includeErrors, + bool debug, + cudaStream_t stream) { + nDigis = wordCounter; + +#ifdef GPU_DEBUG + std::cout << "decoding " << wordCounter << " digis. Max is " << pixelgpudetails::MAX_FED_WORDS << std::endl; +#endif + + digis_d = SiPixelDigisCUDA(pixelgpudetails::MAX_FED_WORDS, stream); + if (includeErrors) { + digiErrors_d = SiPixelDigiErrorsCUDA(pixelgpudetails::MAX_FED_WORDS, std::move(errors), stream); + } + clusters_d = SiPixelClustersCUDA(gpuClustering::maxNumModules, stream); + + nModules_Clusters_h = cms::cuda::make_host_unique(2, stream); + + if (wordCounter) // protect in case of empty event.... + { + const int threadsPerBlock = 512; + const int blocks = (wordCounter + threadsPerBlock - 1) / threadsPerBlock; // fill it all + + assert(0 == wordCounter % 2); + // wordCounter is the total no of words in each event to be trasfered on device + auto word_d = cms::cuda::make_device_unique(wordCounter, stream); + auto fedId_d = cms::cuda::make_device_unique(wordCounter, stream); + + cudaCheck( + cudaMemcpyAsync(word_d.get(), wordFed.word(), wordCounter * sizeof(uint32_t), cudaMemcpyDefault, stream)); + cudaCheck(cudaMemcpyAsync( + fedId_d.get(), wordFed.fedId(), wordCounter * sizeof(uint8_t) / 2, cudaMemcpyDefault, stream)); + + // Launch rawToDigi kernel + RawToDigi_kernel<<>>( + cablingMap, + modToUnp, + wordCounter, + word_d.get(), + fedId_d.get(), + digis_d.xx(), + digis_d.yy(), + digis_d.adc(), + digis_d.pdigi(), + digis_d.rawIdArr(), + digis_d.moduleInd(), + digiErrors_d.error(), // returns nullptr if default-constructed + useQualityInfo, + includeErrors, + debug); + cudaCheck(cudaGetLastError()); +#ifdef GPU_DEBUG + cudaDeviceSynchronize(); + cudaCheck(cudaGetLastError()); +#endif + + if (includeErrors) { + digiErrors_d.copyErrorToHostAsync(stream); + } + } + // End of Raw2Digi and passing data for clustering + + { + // clusterizer ... + using namespace gpuClustering; + int threadsPerBlock = 256; + int blocks = + (std::max(int(wordCounter), int(gpuClustering::maxNumModules)) + threadsPerBlock - 1) / threadsPerBlock; + + gpuCalibPixel::calibDigis<<>>(isRun2, + digis_d.moduleInd(), + digis_d.xx(), + digis_d.yy(), + digis_d.adc(), + gains, + wordCounter, + clusters_d.moduleStart(), + clusters_d.clusInModule(), + clusters_d.clusModuleStart()); + cudaCheck(cudaGetLastError()); +#ifdef GPU_DEBUG + cudaDeviceSynchronize(); + cudaCheck(cudaGetLastError()); +#endif + +#ifdef GPU_DEBUG + std::cout << "CUDA countModules kernel launch with " << blocks << " blocks of " << threadsPerBlock + << " threads\n"; +#endif + + countModules<<>>( + digis_d.moduleInd(), clusters_d.moduleStart(), digis_d.clus(), wordCounter); + cudaCheck(cudaGetLastError()); + + // read the number of modules into a data member, used by getProduct()) + cudaCheck(cudaMemcpyAsync( + &(nModules_Clusters_h[0]), clusters_d.moduleStart(), sizeof(uint32_t), cudaMemcpyDefault, stream)); + + threadsPerBlock = 256; + blocks = maxNumModules; +#ifdef GPU_DEBUG + std::cout << "CUDA findClus kernel launch with " << blocks << " blocks of " << threadsPerBlock << " threads\n"; +#endif + findClus<<>>(digis_d.moduleInd(), + digis_d.xx(), + digis_d.yy(), + clusters_d.moduleStart(), + clusters_d.clusInModule(), + clusters_d.moduleId(), + digis_d.clus(), + wordCounter); + cudaCheck(cudaGetLastError()); +#ifdef GPU_DEBUG + cudaDeviceSynchronize(); + cudaCheck(cudaGetLastError()); +#endif + + // apply charge cut + clusterChargeCut<<>>(digis_d.moduleInd(), + digis_d.adc(), + clusters_d.moduleStart(), + clusters_d.clusInModule(), + clusters_d.moduleId(), + digis_d.clus(), + wordCounter); + cudaCheck(cudaGetLastError()); + + // count the module start indices already here (instead of + // rechits) so that the number of clusters/hits can be made + // available in the rechit producer without additional points of + // synchronization/ExternalWork + + // MUST be ONE block + fillHitsModuleStart<<<1, 1024, 0, stream>>>(clusters_d.clusInModule(), clusters_d.clusModuleStart()); + + // last element holds the number of all clusters + cudaCheck(cudaMemcpyAsync(&(nModules_Clusters_h[1]), + clusters_d.clusModuleStart() + gpuClustering::maxNumModules, + sizeof(uint32_t), + cudaMemcpyDefault, + stream)); + +#ifdef GPU_DEBUG + cudaDeviceSynchronize(); + cudaCheck(cudaGetLastError()); +#endif + + } // end clusterizer scope + } +} // namespace pixelgpudetails diff --git a/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelRawToClusterGPUKernel.h b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelRawToClusterGPUKernel.h new file mode 100644 index 0000000000000..75eeab2606dd5 --- /dev/null +++ b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelRawToClusterGPUKernel.h @@ -0,0 +1,212 @@ +#ifndef RecoLocalTracker_SiPixelClusterizer_plugins_SiPixelRawToClusterGPUKernel_h +#define RecoLocalTracker_SiPixelClusterizer_plugins_SiPixelRawToClusterGPUKernel_h + +#include +#include + +#include "CUDADataFormats/SiPixelDigi/interface/SiPixelDigisCUDA.h" +#include "CUDADataFormats/SiPixelDigi/interface/SiPixelDigiErrorsCUDA.h" +#include "CUDADataFormats/SiPixelCluster/interface/SiPixelClustersCUDA.h" +#include "FWCore/Utilities/interface/typedefs.h" +#include "HeterogeneousCore/CUDAUtilities/interface/SimpleVector.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/host_noncached_unique_ptr.h" +#include "DataFormats/SiPixelRawData/interface/SiPixelErrorCompact.h" +#include "DataFormats/SiPixelRawData/interface/SiPixelFormatterErrors.h" + +struct SiPixelROCsStatusAndMapping; +class SiPixelGainForHLTonGPU; + +namespace pixelgpudetails { + + // Phase 1 geometry constants + const uint32_t layerStartBit = 20; + const uint32_t ladderStartBit = 12; + const uint32_t moduleStartBit = 2; + + const uint32_t panelStartBit = 10; + const uint32_t diskStartBit = 18; + const uint32_t bladeStartBit = 12; + + const uint32_t layerMask = 0xF; + const uint32_t ladderMask = 0xFF; + const uint32_t moduleMask = 0x3FF; + const uint32_t panelMask = 0x3; + const uint32_t diskMask = 0xF; + const uint32_t bladeMask = 0x3F; + + const uint32_t LINK_bits = 6; + const uint32_t ROC_bits = 5; + const uint32_t DCOL_bits = 5; + const uint32_t PXID_bits = 8; + const uint32_t ADC_bits = 8; + + // special for layer 1 + const uint32_t LINK_bits_l1 = 6; + const uint32_t ROC_bits_l1 = 5; + const uint32_t COL_bits_l1 = 6; + const uint32_t ROW_bits_l1 = 7; + const uint32_t OMIT_ERR_bits = 1; + + const uint32_t maxROCIndex = 8; + const uint32_t numRowsInRoc = 80; + const uint32_t numColsInRoc = 52; + + const uint32_t MAX_WORD = 2000; + + const uint32_t ADC_shift = 0; + const uint32_t PXID_shift = ADC_shift + ADC_bits; + const uint32_t DCOL_shift = PXID_shift + PXID_bits; + const uint32_t ROC_shift = DCOL_shift + DCOL_bits; + const uint32_t LINK_shift = ROC_shift + ROC_bits_l1; + // special for layer 1 ROC + const uint32_t ROW_shift = ADC_shift + ADC_bits; + const uint32_t COL_shift = ROW_shift + ROW_bits_l1; + const uint32_t OMIT_ERR_shift = 20; + + const uint32_t LINK_mask = ~(~uint32_t(0) << LINK_bits_l1); + const uint32_t ROC_mask = ~(~uint32_t(0) << ROC_bits_l1); + const uint32_t COL_mask = ~(~uint32_t(0) << COL_bits_l1); + const uint32_t ROW_mask = ~(~uint32_t(0) << ROW_bits_l1); + const uint32_t DCOL_mask = ~(~uint32_t(0) << DCOL_bits); + const uint32_t PXID_mask = ~(~uint32_t(0) << PXID_bits); + const uint32_t ADC_mask = ~(~uint32_t(0) << ADC_bits); + const uint32_t ERROR_mask = ~(~uint32_t(0) << ROC_bits_l1); + const uint32_t OMIT_ERR_mask = ~(~uint32_t(0) << OMIT_ERR_bits); + + struct DetIdGPU { + uint32_t rawId; + uint32_t rocInDet; + uint32_t moduleId; + }; + + struct Pixel { + uint32_t row; + uint32_t col; + }; + + class Packing { + public: + using PackedDigiType = uint32_t; + + // Constructor: pre-computes masks and shifts from field widths + __host__ __device__ inline constexpr Packing(unsigned int row_w, + unsigned int column_w, + unsigned int time_w, + unsigned int adc_w) + : row_width(row_w), + column_width(column_w), + adc_width(adc_w), + row_shift(0), + column_shift(row_shift + row_w), + time_shift(column_shift + column_w), + adc_shift(time_shift + time_w), + row_mask(~(~0U << row_w)), + column_mask(~(~0U << column_w)), + time_mask(~(~0U << time_w)), + adc_mask(~(~0U << adc_w)), + rowcol_mask(~(~0U << (column_w + row_w))), + max_row(row_mask), + max_column(column_mask), + max_adc(adc_mask) {} + + uint32_t row_width; + uint32_t column_width; + uint32_t adc_width; + + uint32_t row_shift; + uint32_t column_shift; + uint32_t time_shift; + uint32_t adc_shift; + + PackedDigiType row_mask; + PackedDigiType column_mask; + PackedDigiType time_mask; + PackedDigiType adc_mask; + PackedDigiType rowcol_mask; + + uint32_t max_row; + uint32_t max_column; + uint32_t max_adc; + }; + + __host__ __device__ inline constexpr Packing packing() { return Packing(11, 11, 0, 10); } + + __host__ __device__ inline uint32_t pack(uint32_t row, uint32_t col, uint32_t adc) { + constexpr Packing thePacking = packing(); + adc = std::min(adc, thePacking.max_adc); + + return (row << thePacking.row_shift) | (col << thePacking.column_shift) | (adc << thePacking.adc_shift); + } + + constexpr uint32_t pixelToChannel(int row, int col) { + constexpr Packing thePacking = packing(); + return (row << thePacking.column_width) | col; + } + + class SiPixelRawToClusterGPUKernel { + public: + class WordFedAppender { + public: + WordFedAppender(); + ~WordFedAppender() = default; + + void initializeWordFed(int fedId, unsigned int wordCounterGPU, const cms_uint32_t* src, unsigned int length); + + const unsigned int* word() const { return word_.get(); } + const unsigned char* fedId() const { return fedId_.get(); } + + private: + cms::cuda::host::noncached::unique_ptr word_; + cms::cuda::host::noncached::unique_ptr fedId_; + }; + + SiPixelRawToClusterGPUKernel() = default; + ~SiPixelRawToClusterGPUKernel() = default; + + SiPixelRawToClusterGPUKernel(const SiPixelRawToClusterGPUKernel&) = delete; + SiPixelRawToClusterGPUKernel(SiPixelRawToClusterGPUKernel&&) = delete; + SiPixelRawToClusterGPUKernel& operator=(const SiPixelRawToClusterGPUKernel&) = delete; + SiPixelRawToClusterGPUKernel& operator=(SiPixelRawToClusterGPUKernel&&) = delete; + + void makeClustersAsync(bool isRun2, + const SiPixelROCsStatusAndMapping* cablingMap, + const unsigned char* modToUnp, + const SiPixelGainForHLTonGPU* gains, + const WordFedAppender& wordFed, + SiPixelFormatterErrors&& errors, + const uint32_t wordCounter, + const uint32_t fedCounter, + bool useQualityInfo, + bool includeErrors, + bool debug, + cudaStream_t stream); + + std::pair getResults() { + digis_d.setNModulesDigis(nModules_Clusters_h[0], nDigis); + clusters_d.setNClusters(nModules_Clusters_h[1]); + // need to explicitly deallocate while the associated CUDA + // stream is still alive + // + // technically the statement above is not true anymore now that + // the CUDA streams are cached within the cms::cuda::StreamCache, but it is + // still better to release as early as possible + nModules_Clusters_h.reset(); + return std::make_pair(std::move(digis_d), std::move(clusters_d)); + } + + SiPixelDigiErrorsCUDA&& getErrors() { return std::move(digiErrors_d); } + + private: + uint32_t nDigis = 0; + + // Data to be put in the event + cms::cuda::host::unique_ptr nModules_Clusters_h; + SiPixelDigisCUDA digis_d; + SiPixelClustersCUDA clusters_d; + SiPixelDigiErrorsCUDA digiErrors_d; + }; + +} // namespace pixelgpudetails + +#endif // RecoLocalTracker_SiPixelClusterizer_plugins_SiPixelRawToClusterGPUKernel_h diff --git a/RecoLocalTracker/SiPixelClusterizer/plugins/gpuCalibPixel.h b/RecoLocalTracker/SiPixelClusterizer/plugins/gpuCalibPixel.h new file mode 100644 index 0000000000000..c21c792f39c30 --- /dev/null +++ b/RecoLocalTracker/SiPixelClusterizer/plugins/gpuCalibPixel.h @@ -0,0 +1,68 @@ +#ifndef RecoLocalTracker_SiPixelClusterizer_plugins_gpuCalibPixel_h +#define RecoLocalTracker_SiPixelClusterizer_plugins_gpuCalibPixel_h + +#include +#include + +#include "CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelGainForHLTonGPU.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cuda_assert.h" + +namespace gpuCalibPixel { + + using gpuClustering::invalidModuleId; + + // valid for run2 + constexpr float VCaltoElectronGain = 47; // L2-4: 47 +- 4.7 + constexpr float VCaltoElectronGain_L1 = 50; // L1: 49.6 +- 2.6 + constexpr float VCaltoElectronOffset = -60; // L2-4: -60 +- 130 + constexpr float VCaltoElectronOffset_L1 = -670; // L1: -670 +- 220 + + __global__ void calibDigis(bool isRun2, + uint16_t* id, + uint16_t const* __restrict__ x, + uint16_t const* __restrict__ y, + uint16_t* adc, + SiPixelGainForHLTonGPU const* __restrict__ ped, + int numElements, + uint32_t* __restrict__ moduleStart, // just to zero first + uint32_t* __restrict__ nClustersInModule, // just to zero them + uint32_t* __restrict__ clusModuleStart // just to zero first + ) { + int first = blockDim.x * blockIdx.x + threadIdx.x; + + // zero for next kernels... + if (0 == first) + clusModuleStart[0] = moduleStart[0] = 0; + for (int i = first; i < gpuClustering::maxNumModules; i += gridDim.x * blockDim.x) { + nClustersInModule[i] = 0; + } + + for (int i = first; i < numElements; i += gridDim.x * blockDim.x) { + if (invalidModuleId == id[i]) + continue; + + float conversionFactor = (isRun2) ? (id[i] < 96 ? VCaltoElectronGain_L1 : VCaltoElectronGain) : 1.f; + float offset = (isRun2) ? (id[i] < 96 ? VCaltoElectronOffset_L1 : VCaltoElectronOffset) : 0; + + bool isDeadColumn = false, isNoisyColumn = false; + + int row = x[i]; + int col = y[i]; + auto ret = ped->getPedAndGain(id[i], col, row, isDeadColumn, isNoisyColumn); + float pedestal = ret.first; + float gain = ret.second; + // float pedestal = 0; float gain = 1.; + if (isDeadColumn | isNoisyColumn) { + id[i] = invalidModuleId; + adc[i] = 0; + printf("bad pixel at %d in %d\n", i, id[i]); + } else { + float vcal = adc[i] * gain - pedestal * gain; + adc[i] = std::max(100, int(vcal * conversionFactor + offset)); + } + } + } +} // namespace gpuCalibPixel + +#endif // RecoLocalTracker_SiPixelClusterizer_plugins_gpuCalibPixel_h diff --git a/RecoLocalTracker/SiPixelClusterizer/plugins/gpuClusterChargeCut.h b/RecoLocalTracker/SiPixelClusterizer/plugins/gpuClusterChargeCut.h new file mode 100644 index 0000000000000..d9520da80b695 --- /dev/null +++ b/RecoLocalTracker/SiPixelClusterizer/plugins/gpuClusterChargeCut.h @@ -0,0 +1,125 @@ +#ifndef RecoLocalTracker_SiPixelClusterizer_plugins_gpuClusterChargeCut_h +#define RecoLocalTracker_SiPixelClusterizer_plugins_gpuClusterChargeCut_h + +#include +#include + +#include "CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cuda_assert.h" +#include "HeterogeneousCore/CUDAUtilities/interface/prefixScan.h" + +namespace gpuClustering { + + __global__ void clusterChargeCut( + uint16_t* __restrict__ id, // module id of each pixel (modified if bad cluster) + uint16_t const* __restrict__ adc, // charge of each pixel + uint32_t const* __restrict__ moduleStart, // index of the first pixel of each module + uint32_t* __restrict__ nClustersInModule, // modified: number of clusters found in each module + uint32_t const* __restrict__ moduleId, // module id of each module + int32_t* __restrict__ clusterId, // modified: cluster id of each pixel + uint32_t numElements) { + __shared__ int32_t charge[maxNumClustersPerModules]; + __shared__ uint8_t ok[maxNumClustersPerModules]; + __shared__ uint16_t newclusId[maxNumClustersPerModules]; + + auto firstModule = blockIdx.x; + auto endModule = moduleStart[0]; + for (auto module = firstModule; module < endModule; module += gridDim.x) { + auto firstPixel = moduleStart[1 + module]; + auto thisModuleId = id[firstPixel]; + assert(thisModuleId < maxNumModules); + assert(thisModuleId == moduleId[module]); + + auto nclus = nClustersInModule[thisModuleId]; + if (nclus == 0) + continue; + + if (threadIdx.x == 0 && nclus > maxNumClustersPerModules) + printf("Warning too many clusters in module %d in block %d: %d > %d\n", + thisModuleId, + blockIdx.x, + nclus, + maxNumClustersPerModules); + + auto first = firstPixel + threadIdx.x; + + if (nclus > maxNumClustersPerModules) { + // remove excess FIXME find a way to cut charge first.... + for (auto i = first; i < numElements; i += blockDim.x) { + if (id[i] == invalidModuleId) + continue; // not valid + if (id[i] != thisModuleId) + break; // end of module + if (clusterId[i] >= maxNumClustersPerModules) { + id[i] = invalidModuleId; + clusterId[i] = invalidModuleId; + } + } + nclus = maxNumClustersPerModules; + } + +#ifdef GPU_DEBUG + if (thisModuleId % 100 == 1) + if (threadIdx.x == 0) + printf("start cluster charge cut for module %d in block %d\n", thisModuleId, blockIdx.x); +#endif + + assert(nclus <= maxNumClustersPerModules); + for (auto i = threadIdx.x; i < nclus; i += blockDim.x) { + charge[i] = 0; + } + __syncthreads(); + + for (auto i = first; i < numElements; i += blockDim.x) { + if (id[i] == invalidModuleId) + continue; // not valid + if (id[i] != thisModuleId) + break; // end of module + atomicAdd(&charge[clusterId[i]], adc[i]); + } + __syncthreads(); + + auto chargeCut = thisModuleId < 96 ? 2000 : 4000; // move in constants (calib?) + for (auto i = threadIdx.x; i < nclus; i += blockDim.x) { + newclusId[i] = ok[i] = charge[i] > chargeCut ? 1 : 0; + } + + __syncthreads(); + + // renumber + __shared__ uint16_t ws[32]; + cms::cuda::blockPrefixScan(newclusId, nclus, ws); + + assert(nclus >= newclusId[nclus - 1]); + + if (nclus == newclusId[nclus - 1]) + continue; + + nClustersInModule[thisModuleId] = newclusId[nclus - 1]; + __syncthreads(); + + // mark bad cluster again + for (auto i = threadIdx.x; i < nclus; i += blockDim.x) { + if (0 == ok[i]) + newclusId[i] = invalidModuleId + 1; + } + __syncthreads(); + + // reassign id + for (auto i = first; i < numElements; i += blockDim.x) { + if (id[i] == invalidModuleId) + continue; // not valid + if (id[i] != thisModuleId) + break; // end of module + clusterId[i] = newclusId[clusterId[i]] - 1; + if (clusterId[i] == invalidModuleId) + id[i] = invalidModuleId; + } + + //done + } // loop on modules + } + +} // namespace gpuClustering + +#endif // RecoLocalTracker_SiPixelClusterizer_plugins_gpuClusterChargeCut_h diff --git a/RecoLocalTracker/SiPixelClusterizer/plugins/gpuClustering.h b/RecoLocalTracker/SiPixelClusterizer/plugins/gpuClustering.h new file mode 100644 index 0000000000000..8467c1d74e2d9 --- /dev/null +++ b/RecoLocalTracker/SiPixelClusterizer/plugins/gpuClustering.h @@ -0,0 +1,303 @@ +#ifndef RecoLocalTracker_SiPixelClusterizer_plugins_gpuClustering_h +#define RecoLocalTracker_SiPixelClusterizer_plugins_gpuClustering_h + +#include +#include + +#include "CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h" +#include "Geometry/TrackerGeometryBuilder/interface/phase1PixelTopology.h" +#include "HeterogeneousCore/CUDAUtilities/interface/HistoContainer.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cuda_assert.h" + +namespace gpuClustering { + +#ifdef GPU_DEBUG + __device__ uint32_t gMaxHit = 0; +#endif + + __global__ void countModules(uint16_t const* __restrict__ id, + uint32_t* __restrict__ moduleStart, + int32_t* __restrict__ clusterId, + int numElements) { + int first = blockDim.x * blockIdx.x + threadIdx.x; + for (int i = first; i < numElements; i += gridDim.x * blockDim.x) { + clusterId[i] = i; + if (invalidModuleId == id[i]) + continue; + auto j = i - 1; + while (j >= 0 and id[j] == invalidModuleId) + --j; + if (j < 0 or id[j] != id[i]) { + // boundary... + auto loc = atomicInc(moduleStart, maxNumModules); + moduleStart[loc + 1] = i; + } + } + } + + __global__ void findClus(uint16_t const* __restrict__ id, // module id of each pixel + uint16_t const* __restrict__ x, // local coordinates of each pixel + uint16_t const* __restrict__ y, // + uint32_t const* __restrict__ moduleStart, // index of the first pixel of each module + uint32_t* __restrict__ nClustersInModule, // output: number of clusters found in each module + uint32_t* __restrict__ moduleId, // output: module id of each module + int32_t* __restrict__ clusterId, // output: cluster id of each pixel + int numElements) { + __shared__ int msize; + + auto firstModule = blockIdx.x; + auto endModule = moduleStart[0]; + for (auto module = firstModule; module < endModule; module += gridDim.x) { + auto firstPixel = moduleStart[1 + module]; + auto thisModuleId = id[firstPixel]; + assert(thisModuleId < maxNumModules); + +#ifdef GPU_DEBUG + if (thisModuleId % 100 == 1) + if (threadIdx.x == 0) + printf("start clusterizer for module %d in block %d\n", thisModuleId, blockIdx.x); +#endif + + auto first = firstPixel + threadIdx.x; + + // find the index of the first pixel not belonging to this module (or invalid) + msize = numElements; + __syncthreads(); + + // skip threads not associated to an existing pixel + for (int i = first; i < numElements; i += blockDim.x) { + if (id[i] == invalidModuleId) // skip invalid pixels + continue; + if (id[i] != thisModuleId) { // find the first pixel in a different module + atomicMin(&msize, i); + break; + } + } + + //init hist (ymax=416 < 512 : 9bits) + constexpr uint32_t maxPixInModule = 4000; + constexpr auto nbins = phase1PixelTopology::numColsInModule + 2; //2+2; + using Hist = cms::cuda::HistoContainer; + __shared__ Hist hist; + __shared__ typename Hist::Counter ws[32]; + for (auto j = threadIdx.x; j < Hist::totbins(); j += blockDim.x) { + hist.off[j] = 0; + } + __syncthreads(); + + assert((msize == numElements) or ((msize < numElements) and (id[msize] != thisModuleId))); + + // limit to maxPixInModule (FIXME if recurrent (and not limited to simulation with low threshold) one will need to implement something cleverer) + if (0 == threadIdx.x) { + if (msize - firstPixel > maxPixInModule) { + printf("too many pixels in module %d: %d > %d\n", thisModuleId, msize - firstPixel, maxPixInModule); + msize = maxPixInModule + firstPixel; + } + } + + __syncthreads(); + assert(msize - firstPixel <= maxPixInModule); + +#ifdef GPU_DEBUG + __shared__ uint32_t totGood; + totGood = 0; + __syncthreads(); +#endif + + // fill histo + for (int i = first; i < msize; i += blockDim.x) { + if (id[i] == invalidModuleId) // skip invalid pixels + continue; + hist.count(y[i]); +#ifdef GPU_DEBUG + atomicAdd(&totGood, 1); +#endif + } + __syncthreads(); + if (threadIdx.x < 32) + ws[threadIdx.x] = 0; // used by prefix scan... + __syncthreads(); + hist.finalize(ws); + __syncthreads(); +#ifdef GPU_DEBUG + assert(hist.size() == totGood); + if (thisModuleId % 100 == 1) + if (threadIdx.x == 0) + printf("histo size %d\n", hist.size()); +#endif + for (int i = first; i < msize; i += blockDim.x) { + if (id[i] == invalidModuleId) // skip invalid pixels + continue; + hist.fill(y[i], i - firstPixel); + } + +#ifdef __CUDA_ARCH__ + // assume that we can cover the whole module with up to 16 blockDim.x-wide iterations + constexpr int maxiter = 16; +#else + auto maxiter = hist.size(); +#endif + // allocate space for duplicate pixels: a pixel can appear more than once with different charge in the same event + constexpr int maxNeighbours = 10; + assert((hist.size() / blockDim.x) <= maxiter); + // nearest neighbour + uint16_t nn[maxiter][maxNeighbours]; + uint8_t nnn[maxiter]; // number of nn + for (uint32_t k = 0; k < maxiter; ++k) + nnn[k] = 0; + + __syncthreads(); // for hit filling! + +#ifdef GPU_DEBUG + // look for anomalous high occupancy + __shared__ uint32_t n40, n60; + n40 = n60 = 0; + __syncthreads(); + for (auto j = threadIdx.x; j < Hist::nbins(); j += blockDim.x) { + if (hist.size(j) > 60) + atomicAdd(&n60, 1); + if (hist.size(j) > 40) + atomicAdd(&n40, 1); + } + __syncthreads(); + if (0 == threadIdx.x) { + if (n60 > 0) + printf("columns with more than 60 px %d in %d\n", n60, thisModuleId); + else if (n40 > 0) + printf("columns with more than 40 px %d in %d\n", n40, thisModuleId); + } + __syncthreads(); +#endif + + // fill NN + for (auto j = threadIdx.x, k = 0U; j < hist.size(); j += blockDim.x, ++k) { + assert(k < maxiter); + auto p = hist.begin() + j; + auto i = *p + firstPixel; + assert(id[i] != invalidModuleId); + assert(id[i] == thisModuleId); // same module + int be = Hist::bin(y[i] + 1); + auto e = hist.end(be); + ++p; + assert(0 == nnn[k]); + for (; p < e; ++p) { + auto m = (*p) + firstPixel; + assert(m != i); + assert(int(y[m]) - int(y[i]) >= 0); + assert(int(y[m]) - int(y[i]) <= 1); + if (std::abs(int(x[m]) - int(x[i])) > 1) + continue; + auto l = nnn[k]++; + assert(l < maxNeighbours); + nn[k][l] = *p; + } + } + + // for each pixel, look at all the pixels until the end of the module; + // when two valid pixels within +/- 1 in x or y are found, set their id to the minimum; + // after the loop, all the pixel in each cluster should have the id equeal to the lowest + // pixel in the cluster ( clus[i] == i ). + bool more = true; + int nloops = 0; + while (__syncthreads_or(more)) { + if (1 == nloops % 2) { + for (auto j = threadIdx.x, k = 0U; j < hist.size(); j += blockDim.x, ++k) { + auto p = hist.begin() + j; + auto i = *p + firstPixel; + auto m = clusterId[i]; + while (m != clusterId[m]) + m = clusterId[m]; + clusterId[i] = m; + } + } else { + more = false; + for (auto j = threadIdx.x, k = 0U; j < hist.size(); j += blockDim.x, ++k) { + auto p = hist.begin() + j; + auto i = *p + firstPixel; + for (int kk = 0; kk < nnn[k]; ++kk) { + auto l = nn[k][kk]; + auto m = l + firstPixel; + assert(m != i); + auto old = atomicMin(&clusterId[m], clusterId[i]); + if (old != clusterId[i]) { + // end the loop only if no changes were applied + more = true; + } + atomicMin(&clusterId[i], old); + } // nnloop + } // pixel loop + } + ++nloops; + } // end while + +#ifdef GPU_DEBUG + { + __shared__ int n0; + if (threadIdx.x == 0) + n0 = nloops; + __syncthreads(); + auto ok = n0 == nloops; + assert(__syncthreads_and(ok)); + if (thisModuleId % 100 == 1) + if (threadIdx.x == 0) + printf("# loops %d\n", nloops); + } +#endif + + __shared__ unsigned int foundClusters; + foundClusters = 0; + __syncthreads(); + + // find the number of different clusters, identified by a pixels with clus[i] == i; + // mark these pixels with a negative id. + for (int i = first; i < msize; i += blockDim.x) { + if (id[i] == invalidModuleId) // skip invalid pixels + continue; + if (clusterId[i] == i) { + auto old = atomicInc(&foundClusters, 0xffffffff); + clusterId[i] = -(old + 1); + } + } + __syncthreads(); + + // propagate the negative id to all the pixels in the cluster. + for (int i = first; i < msize; i += blockDim.x) { + if (id[i] == invalidModuleId) // skip invalid pixels + continue; + if (clusterId[i] >= 0) { + // mark each pixel in a cluster with the same id as the first one + clusterId[i] = clusterId[clusterId[i]]; + } + } + __syncthreads(); + + // adjust the cluster id to be a positive value starting from 0 + for (int i = first; i < msize; i += blockDim.x) { + if (id[i] == invalidModuleId) { // skip invalid pixels + clusterId[i] = -9999; + continue; + } + clusterId[i] = -clusterId[i] - 1; + } + __syncthreads(); + + if (threadIdx.x == 0) { + nClustersInModule[thisModuleId] = foundClusters; + moduleId[module] = thisModuleId; +#ifdef GPU_DEBUG + if (foundClusters > gMaxHit) { + gMaxHit = foundClusters; + if (foundClusters > 8) + printf("max hit %d in %d\n", foundClusters, thisModuleId); + } +#endif +#ifdef GPU_DEBUG + if (thisModuleId % 100 == 1) + printf("%d clusters in module %d\n", foundClusters, thisModuleId); +#endif + } + } // module loop + } +} // namespace gpuClustering + +#endif // RecoLocalTracker_SiPixelClusterizer_plugins_gpuClustering_h diff --git a/RecoLocalTracker/SiPixelClusterizer/python/SiPixelClusterizerPreSplitting_cfi.py b/RecoLocalTracker/SiPixelClusterizer/python/SiPixelClusterizerPreSplitting_cfi.py index ba8d492c5f610..b9c6862b015bf 100644 --- a/RecoLocalTracker/SiPixelClusterizer/python/SiPixelClusterizerPreSplitting_cfi.py +++ b/RecoLocalTracker/SiPixelClusterizer/python/SiPixelClusterizerPreSplitting_cfi.py @@ -1,7 +1,17 @@ - import FWCore.ParameterSet.Config as cms -# from CondTools.SiPixel.SiPixelGainCalibrationService_cfi import * from RecoLocalTracker.SiPixelClusterizer.SiPixelClusterizer_cfi import siPixelClusters as _siPixelClusters -siPixelClustersPreSplitting = _siPixelClusters.clone() +from HeterogeneousCore.CUDACore.SwitchProducerCUDA import SwitchProducerCUDA +siPixelClustersPreSplitting = SwitchProducerCUDA( + cpu = _siPixelClusters.clone() +) + +from Configuration.ProcessModifiers.gpu_cff import gpu +gpu.toModify(siPixelClustersPreSplitting, + cuda = cms.EDAlias( + siPixelDigisClustersPreSplitting = cms.VPSet( + cms.PSet(type = cms.string("SiPixelClusteredmNewDetSetVector")) + ) + ) +) diff --git a/RecoLocalTracker/SiPixelClusterizer/python/siPixelClustersPreSplitting_cff.py b/RecoLocalTracker/SiPixelClusterizer/python/siPixelClustersPreSplitting_cff.py new file mode 100644 index 0000000000000..8bbf47e9ebf90 --- /dev/null +++ b/RecoLocalTracker/SiPixelClusterizer/python/siPixelClustersPreSplitting_cff.py @@ -0,0 +1,26 @@ +import FWCore.ParameterSet.Config as cms + +from RecoLocalTracker.SiPixelClusterizer.SiPixelClusterizerPreSplitting_cfi import siPixelClustersPreSplitting +from RecoLocalTracker.SiPixelClusterizer.siPixelRawToClusterCUDA_cfi import siPixelRawToClusterCUDA as _siPixelRawToClusterCUDA +from RecoLocalTracker.SiPixelClusterizer.siPixelDigisClustersFromSoA_cfi import siPixelDigisClustersFromSoA as _siPixelDigisClustersFromSoA +from CalibTracker.SiPixelESProducers.siPixelROCsStatusAndMappingWrapperESProducer_cfi import * +from CalibTracker.SiPixelESProducers.siPixelGainCalibrationForHLTGPU_cfi import * + +siPixelClustersPreSplittingTask = cms.Task(siPixelClustersPreSplitting) + +siPixelClustersPreSplittingCUDA = _siPixelRawToClusterCUDA.clone() +from Configuration.Eras.Modifier_run3_common_cff import run3_common +run3_common.toModify(siPixelClustersPreSplittingCUDA, + isRun2=False +) + +siPixelDigisClustersPreSplitting = _siPixelDigisClustersFromSoA.clone() +siPixelClustersPreSplittingTaskCUDA = cms.Task( + siPixelClustersPreSplittingCUDA, + siPixelDigisClustersPreSplitting, +) + +from Configuration.ProcessModifiers.gpu_cff import gpu +_siPixelClustersPreSplittingTask_gpu = siPixelClustersPreSplittingTask.copy() +_siPixelClustersPreSplittingTask_gpu.add(siPixelClustersPreSplittingTaskCUDA) +gpu.toReplaceWith(siPixelClustersPreSplittingTask, _siPixelClustersPreSplittingTask_gpu) diff --git a/RecoLocalTracker/SiPixelClusterizer/test/BuildFile.xml b/RecoLocalTracker/SiPixelClusterizer/test/BuildFile.xml index e4a31cc26cd56..538e736664b02 100644 --- a/RecoLocalTracker/SiPixelClusterizer/test/BuildFile.xml +++ b/RecoLocalTracker/SiPixelClusterizer/test/BuildFile.xml @@ -9,6 +9,7 @@ + @@ -16,6 +17,7 @@ + @@ -31,3 +33,26 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RecoLocalTracker/SiPixelClusterizer/test/ReadPixClusters.cc b/RecoLocalTracker/SiPixelClusterizer/test/ReadPixClusters.cc index 37118f45f2db8..5ae4ab6c6daba 100644 --- a/RecoLocalTracker/SiPixelClusterizer/test/ReadPixClusters.cc +++ b/RecoLocalTracker/SiPixelClusterizer/test/ReadPixClusters.cc @@ -18,12 +18,10 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" -//#include "DataFormats/Common/interface/Handle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/Utilities/interface/InputTag.h" -//#include "FWCore/Utilities/interface/EDGetToken.h" // not needed #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" #include "DataFormats/Common/interface/DetSetVector.h" @@ -97,6 +95,8 @@ class ReadPixClusters : public edm::EDAnalyzer { edm::ParameterSet conf_; edm::InputTag src_; edm::EDGetTokenT> tPixelCluster; + edm::ESGetToken trackerTopoToken_; + edm::ESGetToken trackerGeomToken_; bool printLocal; int countEvents, countAllEvents; double sumClusters; @@ -145,6 +145,8 @@ ReadPixClusters::ReadPixClusters(edm::ParameterSet const &conf) cout << " Construct " << printLocal << endl; tPixelCluster = consumes>(src_); + trackerTopoToken_ = esConsumes(); + trackerGeomToken_ = esConsumes(); } // Virtual destructor needed. ReadPixClusters::~ReadPixClusters() {} @@ -330,14 +332,12 @@ void ReadPixClusters::analyze(const edm::Event &e, const edm::EventSetup &es) { using namespace edm; // Get event setup - edm::ESHandle geom; - es.get().get(geom); + edm::ESHandle geom = es.getHandle(trackerGeomToken_); const TrackerGeometry &theTracker(*geom); #ifdef NEW_ID //Retrieve tracker topology from geometry - edm::ESHandle tTopo; - es.get().get(tTopo); + edm::ESHandle tTopo = es.getHandle(trackerTopoToken_); #endif countAllEvents++; diff --git a/RecoLocalTracker/SiPixelClusterizer/test/TestClusters.cc b/RecoLocalTracker/SiPixelClusterizer/test/TestClusters.cc index 681a48065f1ed..742ca5275360f 100644 --- a/RecoLocalTracker/SiPixelClusterizer/test/TestClusters.cc +++ b/RecoLocalTracker/SiPixelClusterizer/test/TestClusters.cc @@ -836,8 +836,6 @@ class TestClusters : public edm::EDAnalyzer { virtual void endJob() override; private: - edm::ParameterSet conf_; - edm::InputTag src_; //const static bool PRINT = false; bool PRINT; int select1, select2; @@ -848,6 +846,16 @@ class TestClusters : public edm::EDAnalyzer { // Needed for the ByToken method edm::EDGetTokenT > myClus; + edm::EDGetTokenT lumiSummaryToken_; + edm::EDGetTokenT lumiDetailsToken_; + edm::EDGetTokenT condToken_; + edm::EDGetTokenT l1gtrrToken_; + edm::EDGetTokenT l1tsToken_; + edm::EDGetTokenT hltToken_; + edm::EDGetTokenT vtxToken_; + + edm::ESGetToken trackerTopoToken_; + edm::ESGetToken trackerGeomToken_; //TFile* hFile; TH1D *hdetunit; @@ -986,16 +994,24 @@ class TestClusters : public edm::EDAnalyzer { ///////////////////////////////////////////////////////////////// // Contructor, empty. -TestClusters::TestClusters(edm::ParameterSet const &conf) : conf_(conf), src_(conf.getParameter("src")) { +TestClusters::TestClusters(edm::ParameterSet const &conf) { PRINT = conf.getUntrackedParameter("Verbosity", false); select1 = conf.getUntrackedParameter("Select1", 0); select2 = conf.getUntrackedParameter("Select2", 0); - //src_ = conf.getParameter( "src" ); if (PRINT) cout << " Construct " << endl; // For the ByToken method myClus = consumes >(conf.getParameter("src")); + lumiSummaryToken_ = consumes(edm::InputTag("lumiProducer")); + lumiDetailsToken_ = consumes(edm::InputTag("lumiProducer")); + condToken_ = consumes(edm::InputTag("conditionsInEdm")); + l1gtrrToken_ = consumes(edm::InputTag("gtDigis")); + l1tsToken_ = consumes(edm::InputTag("scalersRawToDigi")); + hltToken_ = consumes(edm::InputTag("TriggerResults", "", "HLT")); + vtxToken_ = consumes(edm::InputTag("offlinePrimaryVertices")); + trackerTopoToken_ = esConsumes(); + trackerGeomToken_ = esConsumes(); } // Virtual destructor needed. TestClusters::~TestClusters() {} @@ -1861,8 +1877,7 @@ void TestClusters::analyze(const edm::Event &e, const edm::EventSetup &es) { //static int nsum = 0, lsold=-999, lumiold=0.; // Get event setup - edm::ESHandle geom; - es.get().get(geom); + edm::ESHandle geom = es.getHandle(trackerGeomToken_); const TrackerGeometry &theTracker(*geom); countAllEvents++; @@ -1889,11 +1904,11 @@ void TestClusters::analyze(const edm::Event &e, const edm::EventSetup &es) { edm::LuminosityBlock const &iLumi = e.getLuminosityBlock(); edm::Handle lumi; edm::Handle ld; - iLumi.getByLabel("lumiProducer", lumi); - iLumi.getByLabel("lumiProducer", ld); + iLumi.getByToken(lumiSummaryToken_, lumi); + iLumi.getByToken(lumiDetailsToken_, ld); edm::Handle cond; - iLumi.getByLabel("conditionsInEdm", cond); + iLumi.getByToken(condToken_, cond); // This will only work when running on RECO until (if) they fix it in the FW // When running on RAW and reconstructing, the LumiSummary will not appear // in the event before reaching endLuminosityBlock(). Therefore, it is not @@ -1941,7 +1956,7 @@ void TestClusters::analyze(const edm::Event &e, const edm::EventSetup &es) { int numPVsGood = 0; if (select2 < 11 && run > 165000) { // skip for earlier runs, crashes edm::Handle vertices; - e.getByLabel("offlinePrimaryVertices", vertices); + e.getByToken(vtxToken_, vertices); //int numPVs = vertices->size(); // unused if (!vertices.failedToGet() && vertices.isValid()) { @@ -2003,7 +2018,6 @@ void TestClusters::analyze(const edm::Event &e, const edm::EventSetup &es) { // Get Cluster Collection from InputTag edm::Handle > clusters; - //e.getByLabel( src_ , clusters); // New By Token method e.getByToken(myClus, clusters); @@ -2029,7 +2043,7 @@ void TestClusters::analyze(const edm::Event &e, const edm::EventSetup &es) { #ifdef L1 // Get L1 Handle L1GTRR; - e.getByLabel("gtDigis", L1GTRR); + e.getByToken(l1gtrrToken_, L1GTRR); if (L1GTRR.isValid()) { //bool l1a = L1GTRR->decision(); // global decission? unused @@ -2102,7 +2116,7 @@ void TestClusters::analyze(const edm::Event &e, const edm::EventSetup &es) { edm::Handle HLTResults; // Extract the HLT results - e.getByLabel(edm::InputTag("TriggerResults", "", "HLT"), HLTResults); + e.getByToken(hltToken_, HLTResults); if ((HLTResults.isValid() == true) && (HLTResults->size() > 0)) { //TrigNames.init(*HLTResults); const edm::TriggerNames &TrigNames = e.triggerNames(*HLTResults); @@ -2142,7 +2156,7 @@ void TestClusters::analyze(const edm::Event &e, const edm::EventSetup &es) { #ifdef USE_RESYNCS Handle l1ts; - e.getByLabel("scalersRawToDigi", l1ts); + e.getByToken(l1tsToken_, l1ts); if (l1ts->size() > 0) { int r1 = (*l1ts)[0].lastResync(); @@ -2245,8 +2259,7 @@ void TestClusters::analyze(const edm::Event &e, const edm::EventSetup &es) { #ifdef NEW_ID //Retrieve tracker topology from geometry - edm::ESHandle tTopo; - es.get().get(tTopo); + edm::ESHandle tTopo = es.getHandle(trackerTopoToken_); #endif //--------------------------------------- diff --git a/RecoLocalTracker/SiPixelClusterizer/test/TestPixTracks.cc b/RecoLocalTracker/SiPixelClusterizer/test/TestPixTracks.cc index 2f3691219de4a..017cd5c90496d 100644 --- a/RecoLocalTracker/SiPixelClusterizer/test/TestPixTracks.cc +++ b/RecoLocalTracker/SiPixelClusterizer/test/TestPixTracks.cc @@ -117,8 +117,14 @@ class TestPixTracks : public edm::EDAnalyzer { virtual void endJob() override; private: - edm::ParameterSet conf_; - edm::InputTag src_; + edm::EDGetTokenT lumiToken_; + edm::EDGetTokenT condToken_; + edm::EDGetTokenT l1gtrrToken_; + edm::EDGetTokenT hltToken_; + edm::EDGetTokenT vtxToken_; + edm::EDGetTokenT srcToken_; + edm::EDGetTokenT trackAssocToken_; + edm::ESGetToken trackerGeomToken_; //const static bool PRINT = false; bool PRINT; float countTracks, countGoodTracks, countTracksInPix, countPVs, countEvents, countLumi; @@ -172,11 +178,17 @@ class TestPixTracks : public edm::EDAnalyzer { }; ///////////////////////////////////////////////////////////////// // Contructor, -TestPixTracks::TestPixTracks(edm::ParameterSet const &conf) - // : conf_(conf), src_(conf.getParameter( "src" )) { } - : conf_(conf) { +TestPixTracks::TestPixTracks(edm::ParameterSet const &conf) { PRINT = conf.getUntrackedParameter("Verbosity", false); - src_ = conf.getParameter("src"); + lumiToken_ = consumes(edm::InputTag("lumiProducer")); + condToken_ = consumes(edm::InputTag("conditionsInEdm")); + l1gtrrToken_ = consumes(edm::InputTag("gtDigis")); + hltToken_ = consumes(edm::InputTag("TriggerResults", "", "HLT")); + vtxToken_ = consumes(edm::InputTag("offlinePrimaryVertices")); + srcToken_ = consumes(conf.getParameter("src")); + trackAssocToken_ = + consumes(edm::InputTag(conf.getParameter("trajectoryInput"))); + trackerGeomToken_ = esConsumes(); //if(PRINT) cout<<" Construct "< lumi; - iLumi.getByLabel("lumiProducer", lumi); + iLumi.getByToken(lumiToken_, lumi); edm::Handle cond; float intlumi = 0, instlumi = 0; int beamint1 = 0, beamint2 = 0; - iLumi.getByLabel("conditionsInEdm", cond); + iLumi.getByToken(condToken_, cond); // This will only work when running on RECO until (if) they fix it in the FW // When running on RAW and reconstructing, the LumiSummary will not appear // in the event before reaching endLuminosityBlock(). Therefore, it is not @@ -441,7 +453,7 @@ void TestPixTracks::analyze(const edm::Event &e, const edm::EventSetup &es) { #ifdef L1 // Get L1 Handle L1GTRR; - e.getByLabel("gtDigis", L1GTRR); + e.getByToken(l1gtrrToken_, L1GTRR); if (L1GTRR.isValid()) { //bool l1a = L1GTRR->decision(); // global decission? @@ -468,7 +480,7 @@ void TestPixTracks::analyze(const edm::Event &e, const edm::EventSetup &es) { edm::Handle HLTResults; // Extract the HLT results - e.getByLabel(edm::InputTag("TriggerResults", "", "HLT"), HLTResults); + e.getByToken(hltToken_, HLTResults); if ((HLTResults.isValid() == true) && (HLTResults->size() > 0)) { //TrigNames.init(*HLTResults); const edm::TriggerNames &TrigNames = e.triggerNames(*HLTResults); @@ -490,20 +502,14 @@ void TestPixTracks::analyze(const edm::Event &e, const edm::EventSetup &es) { } // if valid #endif - // -- Does this belong into beginJob()? - //ESHandle TG; - //iSetup.get().get(TG); - //const TrackerGeometry* theTrackerGeometry = TG.product(); - //const TrackerGeometry& theTracker(*theTrackerGeometry); // Get event setup - edm::ESHandle geom; - es.get().get(geom); + edm::ESHandle geom = es.getHandle(trackerGeomToken_); const TrackerGeometry &theTracker(*geom); // -- Primary vertices // ---------------------------------------------------------------------- edm::Handle vertices; - e.getByLabel("offlinePrimaryVertices", vertices); + e.getByToken(vtxToken_, vertices); if (PRINT) cout << " PV list " << vertices->size() << endl; @@ -555,7 +561,7 @@ void TestPixTracks::analyze(const edm::Event &e, const edm::EventSetup &es) { // e.getByLabel("ctfWithMaterialTracksP5", recTracks); // e.getByLabel("splittedTracksP5", recTracks); //e.getByLabel("cosmictrackfinderP5", recTracks); - e.getByLabel(src_, recTracks); + e.getByToken(srcToken_, recTracks); if (PRINT) cout << " Tracks " << recTracks->size() << endl; @@ -865,7 +871,7 @@ void TestPixTracks::analyze(const edm::Event &e, const edm::EventSetup &es) { // Use Trajectories edm::Handle trajTrackCollectionHandle; - e.getByLabel(conf_.getParameter("trajectoryInput"), trajTrackCollectionHandle); + e.getByToken(trackAssocToken_, trajTrackCollectionHandle); TrajectoryStateCombiner tsoscomb; diff --git a/RecoLocalTracker/SiPixelClusterizer/test/TestWithTracks.cc b/RecoLocalTracker/SiPixelClusterizer/test/TestWithTracks.cc index 4a749c8dde615..b01009bff78ba 100644 --- a/RecoLocalTracker/SiPixelClusterizer/test/TestWithTracks.cc +++ b/RecoLocalTracker/SiPixelClusterizer/test/TestWithTracks.cc @@ -125,8 +125,15 @@ class TestWithTracks : public edm::EDAnalyzer { virtual void endJob() override; private: - edm::ParameterSet conf_; - edm::InputTag src_; + edm::EDGetTokenT lumiToken_; + edm::EDGetTokenT condToken_; + edm::EDGetTokenT l1gtrrToken_; + edm::EDGetTokenT hltToken_; + edm::EDGetTokenT vtxToken_; + edm::EDGetTokenT srcToken_; + edm::EDGetTokenT trackAssocToken_; + + edm::ESGetToken trackerGeomToken_; //const static bool PRINT = false; bool PRINT; float countTracks, countGoodTracks, countTracksInPix, countPVs, countEvents, countLumi; @@ -193,11 +200,17 @@ class TestWithTracks : public edm::EDAnalyzer { }; ///////////////////////////////////////////////////////////////// // Contructor, -TestWithTracks::TestWithTracks(edm::ParameterSet const &conf) - // : conf_(conf), src_(conf.getParameter( "src" )) { } - : conf_(conf) { +TestWithTracks::TestWithTracks(edm::ParameterSet const &conf) { PRINT = conf.getUntrackedParameter("Verbosity", false); - src_ = conf.getParameter("src"); + lumiToken_ = consumes(edm::InputTag("lumiProducer")); + condToken_ = consumes(edm::InputTag("conditionsInEdm")); + l1gtrrToken_ = consumes(edm::InputTag("gtDigis")); + hltToken_ = consumes(edm::InputTag("TriggerResults", "", "HLT")); + vtxToken_ = consumes(edm::InputTag("offlinePrimaryVertices")); + srcToken_ = consumes(conf.getParameter("src")); + trackAssocToken_ = + consumes(edm::InputTag(conf.getParameter("trajectoryInput"))); + trackerGeomToken_ = esConsumes(); //if(PRINT) cout<<" Construct "< lumi; - iLumi.getByLabel("lumiProducer", lumi); + iLumi.getByToken(lumiToken_, lumi); edm::Handle cond; float intlumi = 0, instlumi = 0; int beamint1 = 0, beamint2 = 0; - iLumi.getByLabel("conditionsInEdm", cond); + iLumi.getByToken(condToken_, cond); // This will only work when running on RECO until (if) they fix it in the FW // When running on RAW and reconstructing, the LumiSummary will not appear // in the event before reaching endLuminosityBlock(). Therefore, it is not @@ -544,7 +557,7 @@ void TestWithTracks::analyze(const edm::Event &e, const edm::EventSetup &es) { #ifdef L1 // Get L1 Handle L1GTRR; - e.getByLabel("gtDigis", L1GTRR); + e.getByToken(l1gtrrToken_, L1GTRR); if (L1GTRR.isValid()) { //bool l1a = L1GTRR->decision(); // global decission? @@ -571,7 +584,7 @@ void TestWithTracks::analyze(const edm::Event &e, const edm::EventSetup &es) { edm::Handle HLTResults; // Extract the HLT results - e.getByLabel(edm::InputTag("TriggerResults", "", "HLT"), HLTResults); + e.getByToken(hltToken_, HLTResults); if ((HLTResults.isValid() == true) && (HLTResults->size() > 0)) { //TrigNames.init(*HLTResults); const edm::TriggerNames &TrigNames = e.triggerNames(*HLTResults); @@ -593,20 +606,14 @@ void TestWithTracks::analyze(const edm::Event &e, const edm::EventSetup &es) { } // if valid #endif - // -- Does this belong into beginJob()? - //ESHandle TG; - //iSetup.get().get(TG); - //const TrackerGeometry* theTrackerGeometry = TG.product(); - //const TrackerGeometry& theTracker(*theTrackerGeometry); // Get event setup - edm::ESHandle geom; - es.get().get(geom); + edm::ESHandle geom = es.getHandle(trackerGeomToken_); const TrackerGeometry &theTracker(*geom); // -- Primary vertices // ---------------------------------------------------------------------- edm::Handle vertices; - e.getByLabel("offlinePrimaryVertices", vertices); + e.getByToken(vtxToken_, vertices); if (PRINT) cout << " PV list " << vertices->size() << endl; @@ -660,7 +667,7 @@ void TestWithTracks::analyze(const edm::Event &e, const edm::EventSetup &es) { // e.getByLabel("ctfWithMaterialTracksP5", recTracks); // e.getByLabel("splittedTracksP5", recTracks); //e.getByLabel("cosmictrackfinderP5", recTracks); - e.getByLabel(src_, recTracks); + e.getByToken(srcToken_, recTracks); if (PRINT) cout << " Tracks " << recTracks->size() << endl; @@ -1247,7 +1254,7 @@ void TestWithTracks::analyze(const edm::Event &e, const edm::EventSetup &es) { // Use Trajectories edm::Handle trajTrackCollectionHandle; - e.getByLabel(conf_.getParameter("trajectoryInput"), trajTrackCollectionHandle); + e.getByToken(trackAssocToken_, trajTrackCollectionHandle); TrajectoryStateCombiner tsoscomb; diff --git a/RecoLocalTracker/SiPixelClusterizer/test/Triplet.cc b/RecoLocalTracker/SiPixelClusterizer/test/Triplet.cc index bd4d58c68c047..ec26979d2fd45 100644 --- a/RecoLocalTracker/SiPixelClusterizer/test/Triplet.cc +++ b/RecoLocalTracker/SiPixelClusterizer/test/Triplet.cc @@ -110,6 +110,14 @@ class Triplet : public edm::EDAnalyzer { double &dz); // ----------member data: + edm::EDGetTokenT bsToken_; + edm::EDGetTokenT vtxToken_; + edm::EDGetTokenT trackToken_; + + edm::ESGetToken trackerTopoToken_; + edm::ESGetToken trackerGeomToken_; + edm::ESGetToken transientTrackBuilderToken_; + edm::ESGetToken transientTrackingRecHitBuilderToken_; TH1D *h000, *h001, *h002, *h003, *h004, *h005, *h006, *h007, *h008, *h009; TH1D *h010, *h011, *h012, *h013, *h014, *h015, *h016, *h017, *h018, *h019; @@ -167,7 +175,20 @@ class Triplet : public edm::EDAnalyzer { // // constructor: // -Triplet::Triplet(const edm::ParameterSet &iConfig) { std::cout << "Triplet constructed\n"; } +Triplet::Triplet(const edm::ParameterSet &iConfig) { + bsToken_ = consumes(edm::InputTag("offlineBeamSpot")); + vtxToken_ = consumes(edm::InputTag("offlinePrimaryVertices")); + trackToken_ = consumes(edm::InputTag("generalTracks")); + + trackerTopoToken_ = esConsumes(); + trackerGeomToken_ = esConsumes(); + transientTrackBuilderToken_ = + esConsumes(edm::ESInputTag("", "TransientTrackBuilder")); + transientTrackingRecHitBuilderToken_ = + esConsumes(edm::ESInputTag("", "WithTrackAngle")); + + std::cout << "Triplet constructed\n"; +} // // destructor: // @@ -360,8 +381,7 @@ void Triplet::beginJob() { // void Triplet::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { //Retrieve tracker topology from geometry - edm::ESHandle tTopo; - iSetup.get().get(tTopo); + edm::ESHandle tTopo = iSetup.getHandle(trackerTopoToken_); using namespace std; using namespace edm; @@ -395,7 +415,7 @@ void Triplet::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { // beam spot: // edm::Handle rbs; - iEvent.getByLabel("offlineBeamSpot", rbs); + iEvent.getByToken(bsToken_, rbs); XYZPoint bsP = XYZPoint(0, 0, 0); //int ibs = 0; @@ -427,7 +447,7 @@ void Triplet::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { // primary vertices: // Handle vertices; - iEvent.getByLabel("offlinePrimaryVertices", vertices); + iEvent.getByToken(vtxToken_, vertices); if (vertices.failedToGet()) return; @@ -543,7 +563,7 @@ void Triplet::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { // Handle tracks; - iEvent.getByLabel("generalTracks", tracks); + iEvent.getByToken(trackToken_, tracks); if (tracks.failedToGet()) return; @@ -554,8 +574,7 @@ void Triplet::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { // // get tracker geometry: // - edm::ESHandle pDD; - iSetup.get().get(pDD); + edm::ESHandle pDD = iSetup.getHandle(trackerGeomToken_); if (!pDD.isValid()) { cout << "Unable to find TrackerDigiGeometry. Return\n"; @@ -649,14 +668,11 @@ void Triplet::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { // // transient track builder, needs B-field from data base (global tag in .py) // - edm::ESHandle theB; - - iSetup.get().get("TransientTrackBuilder", theB); + edm::ESHandle theB = iSetup.getHandle(transientTrackBuilderToken_); // // transient rec hits: // - ESHandle hitBuilder; - iSetup.get().get("WithTrackAngle", hitBuilder); + edm::ESHandle hitBuilder = iSetup.getHandle(transientTrackingRecHitBuilderToken_); // // // diff --git a/RecoLocalTracker/SiPixelClusterizer/test/cpuClustering_t.cpp b/RecoLocalTracker/SiPixelClusterizer/test/cpuClustering_t.cpp new file mode 100644 index 0000000000000..19a3b8d014c9c --- /dev/null +++ b/RecoLocalTracker/SiPixelClusterizer/test/cpuClustering_t.cpp @@ -0,0 +1 @@ +#include "gpuClustering_t.h" diff --git a/RecoLocalTracker/SiPixelClusterizer/test/gpuClustering_t.cu b/RecoLocalTracker/SiPixelClusterizer/test/gpuClustering_t.cu new file mode 100644 index 0000000000000..19a3b8d014c9c --- /dev/null +++ b/RecoLocalTracker/SiPixelClusterizer/test/gpuClustering_t.cu @@ -0,0 +1 @@ +#include "gpuClustering_t.h" diff --git a/RecoLocalTracker/SiPixelClusterizer/test/gpuClustering_t.h b/RecoLocalTracker/SiPixelClusterizer/test/gpuClustering_t.h new file mode 100644 index 0000000000000..02611ab1cac1d --- /dev/null +++ b/RecoLocalTracker/SiPixelClusterizer/test/gpuClustering_t.h @@ -0,0 +1,382 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __CUDACC__ +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "HeterogeneousCore/CUDAUtilities/interface/launch.h" +#include "HeterogeneousCore/CUDAUtilities/interface/requireDevices.h" +#endif // __CUDACC__ + +#include "RecoLocalTracker/SiPixelClusterizer/plugins/gpuClustering.h" +#include "RecoLocalTracker/SiPixelClusterizer/plugins/gpuClusterChargeCut.h" + +int main(void) { +#ifdef __CUDACC__ + cms::cudatest::requireDevices(); +#endif // __CUDACC__ + + using namespace gpuClustering; + + constexpr int numElements = 256 * maxNumModules; + + // these in reality are already on GPU + auto h_id = std::make_unique(numElements); + auto h_x = std::make_unique(numElements); + auto h_y = std::make_unique(numElements); + auto h_adc = std::make_unique(numElements); + auto h_clus = std::make_unique(numElements); + +#ifdef __CUDACC__ + auto d_id = cms::cuda::make_device_unique(numElements, nullptr); + auto d_x = cms::cuda::make_device_unique(numElements, nullptr); + auto d_y = cms::cuda::make_device_unique(numElements, nullptr); + auto d_adc = cms::cuda::make_device_unique(numElements, nullptr); + auto d_clus = cms::cuda::make_device_unique(numElements, nullptr); + auto d_moduleStart = cms::cuda::make_device_unique(maxNumModules + 1, nullptr); + auto d_clusInModule = cms::cuda::make_device_unique(maxNumModules, nullptr); + auto d_moduleId = cms::cuda::make_device_unique(maxNumModules, nullptr); +#else // __CUDACC__ + auto h_moduleStart = std::make_unique(maxNumModules + 1); + auto h_clusInModule = std::make_unique(maxNumModules); + auto h_moduleId = std::make_unique(maxNumModules); +#endif // __CUDACC__ + + // later random number + int n = 0; + int ncl = 0; + int y[10] = {5, 7, 9, 1, 3, 0, 4, 8, 2, 6}; + + auto generateClusters = [&](int kn) { + auto addBigNoise = 1 == kn % 2; + if (addBigNoise) { + constexpr int MaxPixels = 1000; + int id = 666; + for (int x = 0; x < 140; x += 3) { + for (int yy = 0; yy < 400; yy += 3) { + h_id[n] = id; + h_x[n] = x; + h_y[n] = yy; + h_adc[n] = 1000; + ++n; + ++ncl; + if (MaxPixels <= ncl) + break; + } + if (MaxPixels <= ncl) + break; + } + } + + { + // isolated + int id = 42; + int x = 10; + ++ncl; + h_id[n] = id; + h_x[n] = x; + h_y[n] = x; + h_adc[n] = kn == 0 ? 100 : 5000; + ++n; + + // first column + ++ncl; + h_id[n] = id; + h_x[n] = x; + h_y[n] = 0; + h_adc[n] = 5000; + ++n; + // first columns + ++ncl; + h_id[n] = id; + h_x[n] = x + 80; + h_y[n] = 2; + h_adc[n] = 5000; + ++n; + h_id[n] = id; + h_x[n] = x + 80; + h_y[n] = 1; + h_adc[n] = 5000; + ++n; + + // last column + ++ncl; + h_id[n] = id; + h_x[n] = x; + h_y[n] = 415; + h_adc[n] = 5000; + ++n; + // last columns + ++ncl; + h_id[n] = id; + h_x[n] = x + 80; + h_y[n] = 415; + h_adc[n] = 2500; + ++n; + h_id[n] = id; + h_x[n] = x + 80; + h_y[n] = 414; + h_adc[n] = 2500; + ++n; + + // diagonal + ++ncl; + for (int x = 20; x < 25; ++x) { + h_id[n] = id; + h_x[n] = x; + h_y[n] = x; + h_adc[n] = 1000; + ++n; + } + ++ncl; + // reversed + for (int x = 45; x > 40; --x) { + h_id[n] = id; + h_x[n] = x; + h_y[n] = x; + h_adc[n] = 1000; + ++n; + } + ++ncl; + h_id[n++] = invalidModuleId; // error + // messy + int xx[5] = {21, 25, 23, 24, 22}; + for (int k = 0; k < 5; ++k) { + h_id[n] = id; + h_x[n] = xx[k]; + h_y[n] = 20 + xx[k]; + h_adc[n] = 1000; + ++n; + } + // holes + ++ncl; + for (int k = 0; k < 5; ++k) { + h_id[n] = id; + h_x[n] = xx[k]; + h_y[n] = 100; + h_adc[n] = kn == 2 ? 100 : 1000; + ++n; + if (xx[k] % 2 == 0) { + h_id[n] = id; + h_x[n] = xx[k]; + h_y[n] = 101; + h_adc[n] = 1000; + ++n; + } + } + } + { + // id == 0 (make sure it works! + int id = 0; + int x = 10; + ++ncl; + h_id[n] = id; + h_x[n] = x; + h_y[n] = x; + h_adc[n] = 5000; + ++n; + } + // all odd id + for (int id = 11; id <= 1800; id += 2) { + if ((id / 20) % 2) + h_id[n++] = invalidModuleId; // error + for (int x = 0; x < 40; x += 4) { + ++ncl; + if ((id / 10) % 2) { + for (int k = 0; k < 10; ++k) { + h_id[n] = id; + h_x[n] = x; + h_y[n] = x + y[k]; + h_adc[n] = 100; + ++n; + h_id[n] = id; + h_x[n] = x + 1; + h_y[n] = x + y[k] + 2; + h_adc[n] = 1000; + ++n; + } + } else { + for (int k = 0; k < 10; ++k) { + h_id[n] = id; + h_x[n] = x; + h_y[n] = x + y[9 - k]; + h_adc[n] = kn == 2 ? 10 : 1000; + ++n; + if (y[k] == 3) + continue; // hole + if (id == 51) { + h_id[n++] = invalidModuleId; + h_id[n++] = invalidModuleId; + } // error + h_id[n] = id; + h_x[n] = x + 1; + h_y[n] = x + y[k] + 2; + h_adc[n] = kn == 2 ? 10 : 1000; + ++n; + } + } + } + } + }; // end lambda + for (auto kkk = 0; kkk < 5; ++kkk) { + n = 0; + ncl = 0; + generateClusters(kkk); + + std::cout << "created " << n << " digis in " << ncl << " clusters" << std::endl; + assert(n <= numElements); + + uint32_t nModules = 0; +#ifdef __CUDACC__ + size_t size32 = n * sizeof(unsigned int); + size_t size16 = n * sizeof(unsigned short); + // size_t size8 = n * sizeof(uint8_t); + + cudaCheck(cudaMemcpy(d_moduleStart.get(), &nModules, sizeof(uint32_t), cudaMemcpyHostToDevice)); + cudaCheck(cudaMemcpy(d_id.get(), h_id.get(), size16, cudaMemcpyHostToDevice)); + cudaCheck(cudaMemcpy(d_x.get(), h_x.get(), size16, cudaMemcpyHostToDevice)); + cudaCheck(cudaMemcpy(d_y.get(), h_y.get(), size16, cudaMemcpyHostToDevice)); + cudaCheck(cudaMemcpy(d_adc.get(), h_adc.get(), size16, cudaMemcpyHostToDevice)); + + // Launch CUDA Kernels + int threadsPerBlock = (kkk == 5) ? 512 : ((kkk == 3) ? 128 : 256); + int blocksPerGrid = (numElements + threadsPerBlock - 1) / threadsPerBlock; + std::cout << "CUDA countModules kernel launch with " << blocksPerGrid << " blocks of " << threadsPerBlock + << " threads\n"; + + cms::cuda::launch(countModules, {blocksPerGrid, threadsPerBlock}, d_id.get(), d_moduleStart.get(), d_clus.get(), n); + + blocksPerGrid = maxNumModules; //nModules; + + std::cout << "CUDA findModules kernel launch with " << blocksPerGrid << " blocks of " << threadsPerBlock + << " threads\n"; + cudaCheck(cudaMemset(d_clusInModule.get(), 0, maxNumModules * sizeof(uint32_t))); + + cms::cuda::launch(findClus, + {blocksPerGrid, threadsPerBlock}, + d_id.get(), + d_x.get(), + d_y.get(), + d_moduleStart.get(), + d_clusInModule.get(), + d_moduleId.get(), + d_clus.get(), + n); + cudaDeviceSynchronize(); + cudaCheck(cudaMemcpy(&nModules, d_moduleStart.get(), sizeof(uint32_t), cudaMemcpyDeviceToHost)); + + uint32_t nclus[maxNumModules], moduleId[nModules]; + cudaCheck(cudaMemcpy(&nclus, d_clusInModule.get(), maxNumModules * sizeof(uint32_t), cudaMemcpyDeviceToHost)); + + std::cout << "before charge cut found " << std::accumulate(nclus, nclus + maxNumModules, 0) << " clusters" + << std::endl; + for (auto i = maxNumModules; i > 0; i--) + if (nclus[i - 1] > 0) { + std::cout << "last module is " << i - 1 << ' ' << nclus[i - 1] << std::endl; + break; + } + if (ncl != std::accumulate(nclus, nclus + maxNumModules, 0)) + std::cout << "ERROR!!!!! wrong number of cluster found" << std::endl; + + cms::cuda::launch(clusterChargeCut, + {blocksPerGrid, threadsPerBlock}, + d_id.get(), + d_adc.get(), + d_moduleStart.get(), + d_clusInModule.get(), + d_moduleId.get(), + d_clus.get(), + n); + + cudaDeviceSynchronize(); +#else // __CUDACC__ + h_moduleStart[0] = nModules; + countModules(h_id.get(), h_moduleStart.get(), h_clus.get(), n); + memset(h_clusInModule.get(), 0, maxNumModules * sizeof(uint32_t)); + findClus( + h_id.get(), h_x.get(), h_y.get(), h_moduleStart.get(), h_clusInModule.get(), h_moduleId.get(), h_clus.get(), n); + + nModules = h_moduleStart[0]; + auto nclus = h_clusInModule.get(); + + std::cout << "before charge cut found " << std::accumulate(nclus, nclus + maxNumModules, 0) << " clusters" + << std::endl; + for (auto i = maxNumModules; i > 0; i--) + if (nclus[i - 1] > 0) { + std::cout << "last module is " << i - 1 << ' ' << nclus[i - 1] << std::endl; + break; + } + if (ncl != std::accumulate(nclus, nclus + maxNumModules, 0)) + std::cout << "ERROR!!!!! wrong number of cluster found" << std::endl; + + clusterChargeCut( + h_id.get(), h_adc.get(), h_moduleStart.get(), h_clusInModule.get(), h_moduleId.get(), h_clus.get(), n); +#endif // __CUDACC__ + + std::cout << "found " << nModules << " Modules active" << std::endl; + +#ifdef __CUDACC__ + cudaCheck(cudaMemcpy(h_id.get(), d_id.get(), size16, cudaMemcpyDeviceToHost)); + cudaCheck(cudaMemcpy(h_clus.get(), d_clus.get(), size32, cudaMemcpyDeviceToHost)); + cudaCheck(cudaMemcpy(&nclus, d_clusInModule.get(), maxNumModules * sizeof(uint32_t), cudaMemcpyDeviceToHost)); + cudaCheck(cudaMemcpy(&moduleId, d_moduleId.get(), nModules * sizeof(uint32_t), cudaMemcpyDeviceToHost)); +#endif // __CUDACC__ + + std::set clids; + for (int i = 0; i < n; ++i) { + assert(h_id[i] != 666); // only noise + if (h_id[i] == invalidModuleId) + continue; + assert(h_clus[i] >= 0); + assert(h_clus[i] < int(nclus[h_id[i]])); + clids.insert(h_id[i] * 1000 + h_clus[i]); + // clids.insert(h_clus[i]); + } + + // verify no hole in numbering + auto p = clids.begin(); + auto cmid = (*p) / 1000; + assert(0 == (*p) % 1000); + auto c = p; + ++c; + std::cout << "first clusters " << *p << ' ' << *c << ' ' << nclus[cmid] << ' ' << nclus[(*c) / 1000] << std::endl; + std::cout << "last cluster " << *clids.rbegin() << ' ' << nclus[(*clids.rbegin()) / 1000] << std::endl; + for (; c != clids.end(); ++c) { + auto cc = *c; + auto pp = *p; + auto mid = cc / 1000; + auto pnc = pp % 1000; + auto nc = cc % 1000; + if (mid != cmid) { + assert(0 == cc % 1000); + assert(nclus[cmid] - 1 == pp % 1000); + // if (nclus[cmid]-1 != pp%1000) std::cout << "error size " << mid << ": " << nclus[mid] << ' ' << pp << std::endl; + cmid = mid; + p = c; + continue; + } + p = c; + // assert(nc==pnc+1); + if (nc != pnc + 1) + std::cout << "error " << mid << ": " << nc << ' ' << pnc << std::endl; + } + + std::cout << "found " << std::accumulate(nclus, nclus + maxNumModules, 0) << ' ' << clids.size() << " clusters" + << std::endl; + for (auto i = maxNumModules; i > 0; i--) + if (nclus[i - 1] > 0) { + std::cout << "last module is " << i - 1 << ' ' << nclus[i - 1] << std::endl; + break; + } + // << " and " << seeds.size() << " seeds" << std::endl; + } /// end loop kkk + return 0; +} diff --git a/RecoLocalTracker/SiPixelClusterizer/test/testClusters.py b/RecoLocalTracker/SiPixelClusterizer/test/testClusters.py index 43c603b19e616..572e5e90d554d 100644 --- a/RecoLocalTracker/SiPixelClusterizer/test/testClusters.py +++ b/RecoLocalTracker/SiPixelClusterizer/test/testClusters.py @@ -46,15 +46,14 @@ ) process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring('siPixelClusters'), - destinations = cms.untracked.vstring('cout'), -# destinations = cms.untracked.vstring("log","cout"), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string('ERROR') - ) -# log = cms.untracked.PSet( -# threshold = cms.untracked.string('DEBUG') -# ) + ), + debugModules = cms.untracked.vstring('siPixelClusters') ) process.source = cms.Source("PoolSource", diff --git a/RecoLocalTracker/SiPixelClusterizer/test/testTracks_cfg.py b/RecoLocalTracker/SiPixelClusterizer/test/testTracks_cfg.py index c5280f14d21f3..b9c8c06563890 100644 --- a/RecoLocalTracker/SiPixelClusterizer/test/testTracks_cfg.py +++ b/RecoLocalTracker/SiPixelClusterizer/test/testTracks_cfg.py @@ -14,16 +14,13 @@ ) process.MessageLogger = cms.Service("MessageLogger", -# debugModules = cms.untracked.vstring('TestPixTracks'), - destinations = cms.untracked.vstring('cout'), -# destinations = cms.untracked.vstring("log","cout"), + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), cout = cms.untracked.PSet( -# threshold = cms.untracked.string('DEBUG') + enable = cms.untracked.bool(True), threshold = cms.untracked.string('ERROR') ) -# log = cms.untracked.PSet( -# threshold = cms.untracked.string('DEBUG') -# ) ) import HLTrigger.HLTfilters.hltHighLevel_cfi as hlt diff --git a/RecoLocalTracker/SiPixelRecHits/BuildFile.xml b/RecoLocalTracker/SiPixelRecHits/BuildFile.xml index d0f5f096dbb19..d9376d88f7bbd 100644 --- a/RecoLocalTracker/SiPixelRecHits/BuildFile.xml +++ b/RecoLocalTracker/SiPixelRecHits/BuildFile.xml @@ -1,12 +1,14 @@ - - + + + + + - + + - - diff --git a/RecoLocalTracker/SiPixelRecHits/interface/PixelCPEBase.h b/RecoLocalTracker/SiPixelRecHits/interface/PixelCPEBase.h index 4a7ba119b0a5b..05e59585ba6ba 100644 --- a/RecoLocalTracker/SiPixelRecHits/interface/PixelCPEBase.h +++ b/RecoLocalTracker/SiPixelRecHits/interface/PixelCPEBase.h @@ -1,5 +1,5 @@ -#ifndef RecoLocalTracker_SiPixelRecHits_PixelCPEBase_H -#define RecoLocalTracker_SiPixelRecHits_PixelCPEBase_H 1 +#ifndef RecoLocalTracker_SiPixelRecHits_interface_PixelCPEBase_h +#define RecoLocalTracker_SiPixelRecHits_interface_PixelCPEBase_h 1 //----------------------------------------------------------------------------- // \class PixelCPEBase @@ -11,43 +11,32 @@ // Change to use Generic error & Template calibration from DB - D.Fehling 11/08 //----------------------------------------------------------------------------- +#ifdef EDM_ML_DEBUG +#include +#endif +#include #include #include -#include "TMath.h" -#include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelClusterParameterEstimator.h" -#include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitQuality.h" +#include +#include "CondFormats/SiPixelObjects/interface/SiPixelGenErrorDBObject.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelLorentzAngle.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelTemplateDBObject.h" +#include "DataFormats/GeometryCommonDetAlgo/interface/MeasurementError.h" +#include "DataFormats/GeometryCommonDetAlgo/interface/MeasurementPoint.h" +#include "DataFormats/GeometrySurface/interface/GloballyPositioned.h" #include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitQuality.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "Geometry/CommonDetUnit/interface/GeomDetType.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" #include "Geometry/CommonTopologies/interface/Topology.h" - -//--- For the configuration: -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" - -#include "DataFormats/GeometryCommonDetAlgo/interface/MeasurementPoint.h" -#include "DataFormats/GeometryCommonDetAlgo/interface/MeasurementError.h" -#include "DataFormats/GeometrySurface/interface/GloballyPositioned.h" - -#include "CondFormats/SiPixelObjects/interface/SiPixelLorentzAngle.h" - -// new errors -#include "CondFormats/SiPixelObjects/interface/SiPixelGenErrorDBObject.h" -// old errors -//#include "CondFormats/SiPixelObjects/interface/SiPixelCPEGenericErrorParm.h" - -#include "CondFormats/SiPixelObjects/interface/SiPixelTemplateDBObject.h" - -#include - -#include -#ifdef EDM_ML_DEBUG -#include -#endif +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelClusterParameterEstimator.h" class RectangularPixelTopology; class MagneticField; @@ -78,11 +67,12 @@ class PixelCPEBase : public PixelClusterParameterEstimator { }; struct ClusterParam { + ClusterParam() {} ClusterParam(const SiPixelCluster& cl) : theCluster(&cl) {} virtual ~ClusterParam() = default; - const SiPixelCluster* theCluster; + const SiPixelCluster* theCluster = nullptr; //--- Cluster-level quantities (filled in computeAnglesFrom....) float cotalpha; @@ -143,7 +133,7 @@ class PixelCPEBase : public PixelClusterParameterEstimator { inline ReturnType getParameters(const SiPixelCluster& cl, const GeomDetUnit& det) const override { #ifdef EDM_ML_DEBUG nRecHitsTotal_++; - //std::cout<<" in PixelCPEBase:localParameters(all) - "< + +#include "CalibTracker/SiPixelESProducers/interface/SiPixelCPEGenericDBErrorParametrization.h" +#include "CondFormats/SiPixelTransient/interface/SiPixelGenError.h" +#include "CondFormats/SiPixelTransient/interface/SiPixelTemplate.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h" +#include "RecoLocalTracker/SiPixelRecHits/interface/PixelCPEBase.h" +#include "RecoLocalTracker/SiPixelRecHits/interface/pixelCPEforGPU.h" + +class MagneticField; +class PixelCPEFast final : public PixelCPEBase { +public: + struct ClusterParamGeneric : ClusterParam { + ClusterParamGeneric() {} + ClusterParamGeneric(const SiPixelCluster &cl) : ClusterParam(cl) {} + + // The truncation value pix_maximum is an angle-dependent cutoff on the + // individual pixel signals. It should be applied to all pixels in the + // cluster [signal_i = fminf(signal_i, pixmax)] before the column and row + // sums are made. Morris + int pixmx; + + // These are errors predicted by PIXELAV + float sigmay; // CPE Generic y-error for multi-pixel cluster + float sigmax; // CPE Generic x-error for multi-pixel cluster + float sy1; // CPE Generic y-error for single single-pixel + float sy2; // CPE Generic y-error for single double-pixel cluster + float sx1; // CPE Generic x-error for single single-pixel cluster + float sx2; // CPE Generic x-error for single double-pixel cluster + }; + + PixelCPEFast(edm::ParameterSet const &conf, + const MagneticField *, + const TrackerGeometry &, + const TrackerTopology &, + const SiPixelLorentzAngle *, + const SiPixelGenErrorDBObject *, + const SiPixelLorentzAngle *); + + ~PixelCPEFast() override = default; + + static void fillPSetDescription(edm::ParameterSetDescription &desc); + + // The return value can only be used safely in kernels launched on + // the same cudaStream, or after cudaStreamSynchronize. + const pixelCPEforGPU::ParamsOnGPU *getGPUProductAsync(cudaStream_t cudaStream) const; + + pixelCPEforGPU::ParamsOnGPU const &getCPUProduct() const { return cpuData_; } + +private: + std::unique_ptr createClusterParam(const SiPixelCluster &cl) const override; + + LocalPoint localPosition(DetParam const &theDetParam, ClusterParam &theClusterParam) const override; + LocalError localError(DetParam const &theDetParam, ClusterParam &theClusterParam) const override; + + void errorFromTemplates(DetParam const &theDetParam, ClusterParamGeneric &theClusterParam, float qclus) const; + + static void collect_edge_charges(ClusterParam &theClusterParam, //!< input, the cluster + int &q_f_X, //!< output, Q first in X + int &q_l_X, //!< output, Q last in X + int &q_f_Y, //!< output, Q first in Y + int &q_l_Y, //!< output, Q last in Y + bool truncate); + + const float edgeClusterErrorX_; + const float edgeClusterErrorY_; + const bool useErrorsFromTemplates_; + const bool truncatePixelCharge_; + + std::vector xerr_barrel_l1_, yerr_barrel_l1_, xerr_barrel_ln_; + std::vector yerr_barrel_ln_, xerr_endcap_, yerr_endcap_; + float xerr_barrel_l1_def_, yerr_barrel_l1_def_, xerr_barrel_ln_def_; + float yerr_barrel_ln_def_, xerr_endcap_def_, yerr_endcap_def_; + + //--- DB Error Parametrization object, new light templates + std::vector thePixelGenError_; + + // allocate this with posix malloc to be compatible with the cpu workflow + std::vector detParamsGPU_; + pixelCPEforGPU::CommonParams commonParamsGPU_; + pixelCPEforGPU::LayerGeometry layerGeometry_; + pixelCPEforGPU::AverageGeometry averageGeometry_; + pixelCPEforGPU::ParamsOnGPU cpuData_; + + struct GPUData { + ~GPUData(); + // not needed if not used on CPU... + pixelCPEforGPU::ParamsOnGPU paramsOnGPU_h; + pixelCPEforGPU::ParamsOnGPU *paramsOnGPU_d = nullptr; // copy of the above on the Device + }; + cms::cuda::ESProduct gpuData_; + + void fillParamsForGpu(); +}; + +#endif // RecoLocalTracker_SiPixelRecHits_PixelCPEFast_h diff --git a/RecoLocalTracker/SiPixelRecHits/interface/PixelCPEGeneric.h b/RecoLocalTracker/SiPixelRecHits/interface/PixelCPEGeneric.h index 26e0d11bcd334..3913c2a069401 100644 --- a/RecoLocalTracker/SiPixelRecHits/interface/PixelCPEGeneric.h +++ b/RecoLocalTracker/SiPixelRecHits/interface/PixelCPEGeneric.h @@ -98,10 +98,10 @@ class PixelCPEGeneric final : public PixelCPEBase { // Methods. //------------------------------------------------------------------ void collect_edge_charges(ClusterParam &theClusterParam, //!< input, the cluster - int &Q_f_X, //!< output, Q first in X - int &Q_l_X, //!< output, Q last in X - int &Q_f_Y, //!< output, Q first in Y - int &Q_l_Y //!< output, Q last in Y + int &q_f_X, //!< output, Q first in X + int &q_l_X, //!< output, Q last in X + int &q_f_Y, //!< output, Q first in Y + int &q_l_Y //!< output, Q last in Y ) const; //--- Errors squared in x and y. &&& Need to be revisited. diff --git a/RecoLocalTracker/SiPixelRecHits/interface/pixelCPEforGPU.h b/RecoLocalTracker/SiPixelRecHits/interface/pixelCPEforGPU.h new file mode 100644 index 0000000000000..03e136d8d23ef --- /dev/null +++ b/RecoLocalTracker/SiPixelRecHits/interface/pixelCPEforGPU.h @@ -0,0 +1,343 @@ +#ifndef RecoLocalTracker_SiPixelRecHits_pixelCPEforGPU_h +#define RecoLocalTracker_SiPixelRecHits_pixelCPEforGPU_h + +#include +#include +#include +#include + +#include "CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h" +#include "DataFormats/GeometrySurface/interface/SOARotation.h" +#include "Geometry/TrackerGeometryBuilder/interface/phase1PixelTopology.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCompat.h" + +namespace pixelCPEforGPU { + + using Frame = SOAFrame; + using Rotation = SOARotation; + + // all modules are identical! + struct CommonParams { + float theThicknessB; + float theThicknessE; + float thePitchX; + float thePitchY; + }; + + struct DetParams { + bool isBarrel; + bool isPosZ; + uint16_t layer; + uint16_t index; + uint32_t rawId; + + float shiftX; + float shiftY; + float chargeWidthX; + float chargeWidthY; + uint16_t pixmx; // max pix charge + + float x0, y0, z0; // the vertex in the local coord of the detector + + float sx[3], sy[3]; // the errors... + + Frame frame; + }; + + using phase1PixelTopology::AverageGeometry; + + struct LayerGeometry { + uint32_t layerStart[phase1PixelTopology::numberOfLayers + 1]; + uint8_t layer[phase1PixelTopology::layerIndexSize]; + }; + + struct ParamsOnGPU { + CommonParams const* m_commonParams; + DetParams const* m_detParams; + LayerGeometry const* m_layerGeometry; + AverageGeometry const* m_averageGeometry; + + constexpr CommonParams const& __restrict__ commonParams() const { + CommonParams const* __restrict__ l = m_commonParams; + return *l; + } + constexpr DetParams const& __restrict__ detParams(int i) const { + DetParams const* __restrict__ l = m_detParams; + return l[i]; + } + constexpr LayerGeometry const& __restrict__ layerGeometry() const { return *m_layerGeometry; } + constexpr AverageGeometry const& __restrict__ averageGeometry() const { return *m_averageGeometry; } + + __device__ uint8_t layer(uint16_t id) const { + return __ldg(m_layerGeometry->layer + id / phase1PixelTopology::maxModuleStride); + }; + }; + + // SOA (on device) + template + struct ClusParamsT { + uint32_t minRow[N]; + uint32_t maxRow[N]; + uint32_t minCol[N]; + uint32_t maxCol[N]; + + int32_t q_f_X[N]; + int32_t q_l_X[N]; + int32_t q_f_Y[N]; + int32_t q_l_Y[N]; + + int32_t charge[N]; + + float xpos[N]; + float ypos[N]; + + float xerr[N]; + float yerr[N]; + + int16_t xsize[N]; // clipped at 127 if negative is edge.... + int16_t ysize[N]; + }; + + constexpr int32_t MaxHitsInIter = gpuClustering::maxHitsInIter(); + using ClusParams = ClusParamsT; + + constexpr inline void computeAnglesFromDet( + DetParams const& __restrict__ detParams, float const x, float const y, float& cotalpha, float& cotbeta) { + // x,y local position on det + auto gvx = x - detParams.x0; + auto gvy = y - detParams.y0; + auto gvz = -1.f / detParams.z0; + // normalization not required as only ratio used... + // calculate angles + cotalpha = gvx * gvz; + cotbeta = gvy * gvz; + } + + constexpr inline float correction(int sizeM1, + int q_f, //!< Charge in the first pixel. + int q_l, //!< Charge in the last pixel. + uint16_t upper_edge_first_pix, //!< As the name says. + uint16_t lower_edge_last_pix, //!< As the name says. + float lorentz_shift, //!< L-shift at half thickness + float theThickness, //detector thickness + float cot_angle, //!< cot of alpha_ or beta_ + float pitch, //!< thePitchX or thePitchY + bool first_is_big, //!< true if the first is big + bool last_is_big) //!< true if the last is big + { + if (0 == sizeM1) // size 1 + return 0; + + float w_eff = 0; + bool simple = true; + if (1 == sizeM1) { // size 2 + //--- Width of the clusters minus the edge (first and last) pixels. + //--- In the note, they are denoted x_F and x_L (and y_F and y_L) + // assert(lower_edge_last_pix >= upper_edge_first_pix); + auto w_inner = pitch * float(lower_edge_last_pix - upper_edge_first_pix); // in cm + + //--- Predicted charge width from geometry + auto w_pred = theThickness * cot_angle // geometric correction (in cm) + - lorentz_shift; // (in cm) &&& check fpix! + + w_eff = std::abs(w_pred) - w_inner; + + //--- If the observed charge width is inconsistent with the expectations + //--- based on the track, do *not* use w_pred-w_inner. Instead, replace + //--- it with an *average* effective charge width, which is the average + //--- length of the edge pixels. + + // this can produce "large" regressions for very small numeric differences + simple = (w_eff < 0.0f) | (w_eff > pitch); + } + + if (simple) { + //--- Total length of the two edge pixels (first+last) + float sum_of_edge = 2.0f; + if (first_is_big) + sum_of_edge += 1.0f; + if (last_is_big) + sum_of_edge += 1.0f; + w_eff = pitch * 0.5f * sum_of_edge; // ave. length of edge pixels (first+last) (cm) + } + + //--- Finally, compute the position in this projection + float qdiff = q_l - q_f; + float qsum = q_l + q_f; + + //--- Temporary fix for clusters with both first and last pixel with charge = 0 + if (qsum == 0) + qsum = 1.0f; + + return 0.5f * (qdiff / qsum) * w_eff; + } + + constexpr inline void position(CommonParams const& __restrict__ comParams, + DetParams const& __restrict__ detParams, + ClusParams& cp, + uint32_t ic) { + //--- Upper Right corner of Lower Left pixel -- in measurement frame + uint16_t llx = cp.minRow[ic] + 1; + uint16_t lly = cp.minCol[ic] + 1; + + //--- Lower Left corner of Upper Right pixel -- in measurement frame + uint16_t urx = cp.maxRow[ic]; + uint16_t ury = cp.maxCol[ic]; + + auto llxl = phase1PixelTopology::localX(llx); + auto llyl = phase1PixelTopology::localY(lly); + auto urxl = phase1PixelTopology::localX(urx); + auto uryl = phase1PixelTopology::localY(ury); + + auto mx = llxl + urxl; + auto my = llyl + uryl; + + auto xsize = int(urxl) + 2 - int(llxl); + auto ysize = int(uryl) + 2 - int(llyl); + assert(xsize >= 0); // 0 if bixpix... + assert(ysize >= 0); + + if (phase1PixelTopology::isBigPixX(cp.minRow[ic])) + ++xsize; + if (phase1PixelTopology::isBigPixX(cp.maxRow[ic])) + ++xsize; + if (phase1PixelTopology::isBigPixY(cp.minCol[ic])) + ++ysize; + if (phase1PixelTopology::isBigPixY(cp.maxCol[ic])) + ++ysize; + + int unbalanceX = 8. * std::abs(float(cp.q_f_X[ic] - cp.q_l_X[ic])) / float(cp.q_f_X[ic] + cp.q_l_X[ic]); + int unbalanceY = 8. * std::abs(float(cp.q_f_Y[ic] - cp.q_l_Y[ic])) / float(cp.q_f_Y[ic] + cp.q_l_Y[ic]); + xsize = 8 * xsize - unbalanceX; + ysize = 8 * ysize - unbalanceY; + + cp.xsize[ic] = std::min(xsize, 1023); + cp.ysize[ic] = std::min(ysize, 1023); + + if (cp.minRow[ic] == 0 || cp.maxRow[ic] == phase1PixelTopology::lastRowInModule) + cp.xsize[ic] = -cp.xsize[ic]; + if (cp.minCol[ic] == 0 || cp.maxCol[ic] == phase1PixelTopology::lastColInModule) + cp.ysize[ic] = -cp.ysize[ic]; + + // apply the lorentz offset correction + auto xPos = detParams.shiftX + comParams.thePitchX * (0.5f * float(mx) + float(phase1PixelTopology::xOffset)); + auto yPos = detParams.shiftY + comParams.thePitchY * (0.5f * float(my) + float(phase1PixelTopology::yOffset)); + + float cotalpha = 0, cotbeta = 0; + + computeAnglesFromDet(detParams, xPos, yPos, cotalpha, cotbeta); + + auto thickness = detParams.isBarrel ? comParams.theThicknessB : comParams.theThicknessE; + + auto xcorr = correction(cp.maxRow[ic] - cp.minRow[ic], + cp.q_f_X[ic], + cp.q_l_X[ic], + llxl, + urxl, + detParams.chargeWidthX, // lorentz shift in cm + thickness, + cotalpha, + comParams.thePitchX, + phase1PixelTopology::isBigPixX(cp.minRow[ic]), + phase1PixelTopology::isBigPixX(cp.maxRow[ic])); + + auto ycorr = correction(cp.maxCol[ic] - cp.minCol[ic], + cp.q_f_Y[ic], + cp.q_l_Y[ic], + llyl, + uryl, + detParams.chargeWidthY, // lorentz shift in cm + thickness, + cotbeta, + comParams.thePitchY, + phase1PixelTopology::isBigPixY(cp.minCol[ic]), + phase1PixelTopology::isBigPixY(cp.maxCol[ic])); + + cp.xpos[ic] = xPos + xcorr; + cp.ypos[ic] = yPos + ycorr; + } + + constexpr inline void errorFromSize(CommonParams const& __restrict__ comParams, + DetParams const& __restrict__ detParams, + ClusParams& cp, + uint32_t ic) { + // Edge cluster errors + cp.xerr[ic] = 0.0050; + cp.yerr[ic] = 0.0085; + + // FIXME these are errors form Run1 + constexpr float xerr_barrel_l1[] = {0.00115, 0.00120, 0.00088}; + constexpr float xerr_barrel_l1_def = 0.00200; // 0.01030; + constexpr float yerr_barrel_l1[] = { + 0.00375, 0.00230, 0.00250, 0.00250, 0.00230, 0.00230, 0.00210, 0.00210, 0.00240}; + constexpr float yerr_barrel_l1_def = 0.00210; + constexpr float xerr_barrel_ln[] = {0.00115, 0.00120, 0.00088}; + constexpr float xerr_barrel_ln_def = 0.00200; // 0.01030; + constexpr float yerr_barrel_ln[] = { + 0.00375, 0.00230, 0.00250, 0.00250, 0.00230, 0.00230, 0.00210, 0.00210, 0.00240}; + constexpr float yerr_barrel_ln_def = 0.00210; + constexpr float xerr_endcap[] = {0.0020, 0.0020}; + constexpr float xerr_endcap_def = 0.0020; + constexpr float yerr_endcap[] = {0.00210}; + constexpr float yerr_endcap_def = 0.00210; + + auto sx = cp.maxRow[ic] - cp.minRow[ic]; + auto sy = cp.maxCol[ic] - cp.minCol[ic]; + + // is edgy ? + bool isEdgeX = cp.minRow[ic] == 0 or cp.maxRow[ic] == phase1PixelTopology::lastRowInModule; + bool isEdgeY = cp.minCol[ic] == 0 or cp.maxCol[ic] == phase1PixelTopology::lastColInModule; + // is one and big? + bool isBig1X = (0 == sx) && phase1PixelTopology::isBigPixX(cp.minRow[ic]); + bool isBig1Y = (0 == sy) && phase1PixelTopology::isBigPixY(cp.minCol[ic]); + + if (!isEdgeX && !isBig1X) { + if (not detParams.isBarrel) { + cp.xerr[ic] = sx < std::size(xerr_endcap) ? xerr_endcap[sx] : xerr_endcap_def; + } else if (detParams.layer == 1) { + cp.xerr[ic] = sx < std::size(xerr_barrel_l1) ? xerr_barrel_l1[sx] : xerr_barrel_l1_def; + } else { + cp.xerr[ic] = sx < std::size(xerr_barrel_ln) ? xerr_barrel_ln[sx] : xerr_barrel_ln_def; + } + } + + if (!isEdgeY && !isBig1Y) { + if (not detParams.isBarrel) { + cp.yerr[ic] = sy < std::size(yerr_endcap) ? yerr_endcap[sy] : yerr_endcap_def; + } else if (detParams.layer == 1) { + cp.yerr[ic] = sy < std::size(yerr_barrel_l1) ? yerr_barrel_l1[sy] : yerr_barrel_l1_def; + } else { + cp.yerr[ic] = sy < std::size(yerr_barrel_ln) ? yerr_barrel_ln[sy] : yerr_barrel_ln_def; + } + } + } + + constexpr inline void errorFromDB(CommonParams const& __restrict__ comParams, + DetParams const& __restrict__ detParams, + ClusParams& cp, + uint32_t ic) { + // Edge cluster errors + cp.xerr[ic] = 0.0050f; + cp.yerr[ic] = 0.0085f; + + auto sx = cp.maxRow[ic] - cp.minRow[ic]; + auto sy = cp.maxCol[ic] - cp.minCol[ic]; + + // is edgy ? + bool isEdgeX = cp.minRow[ic] == 0 or cp.maxRow[ic] == phase1PixelTopology::lastRowInModule; + bool isEdgeY = cp.minCol[ic] == 0 or cp.maxCol[ic] == phase1PixelTopology::lastColInModule; + // is one and big? + uint32_t ix = (0 == sx); + uint32_t iy = (0 == sy); + ix += (0 == sx) && phase1PixelTopology::isBigPixX(cp.minRow[ic]); + iy += (0 == sy) && phase1PixelTopology::isBigPixY(cp.minCol[ic]); + + if (not isEdgeX) + cp.xerr[ic] = detParams.sx[ix]; + if (not isEdgeY) + cp.yerr[ic] = detParams.sy[iy]; + } + +} // namespace pixelCPEforGPU + +#endif // RecoLocalTracker_SiPixelRecHits_pixelCPEforGPU_h diff --git a/RecoLocalTracker/SiPixelRecHits/plugins/BuildFile.xml b/RecoLocalTracker/SiPixelRecHits/plugins/BuildFile.xml index e02a0b722c1ae..4457b02203e66 100644 --- a/RecoLocalTracker/SiPixelRecHits/plugins/BuildFile.xml +++ b/RecoLocalTracker/SiPixelRecHits/plugins/BuildFile.xml @@ -1,7 +1,12 @@ + + + + + - + diff --git a/RecoLocalTracker/SiPixelRecHits/plugins/PixelCPEFastESProducer.cc b/RecoLocalTracker/SiPixelRecHits/plugins/PixelCPEFastESProducer.cc new file mode 100644 index 0000000000000..332baabe8842a --- /dev/null +++ b/RecoLocalTracker/SiPixelRecHits/plugins/PixelCPEFastESProducer.cc @@ -0,0 +1,98 @@ +#include +#include + +#include "CondFormats/DataRecord/interface/SiPixelGenErrorDBObjectRcd.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ModuleFactory.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelClusterParameterEstimator.h" +#include "RecoLocalTracker/Records/interface/TkPixelCPERecord.h" +#include "RecoLocalTracker/SiPixelRecHits/interface/PixelCPEFast.h" + +class PixelCPEFastESProducer : public edm::ESProducer { +public: + PixelCPEFastESProducer(const edm::ParameterSet& p); + std::unique_ptr produce(const TkPixelCPERecord&); + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + edm::ESGetToken magfieldToken_; + edm::ESGetToken pDDToken_; + edm::ESGetToken hTTToken_; + edm::ESGetToken lorentzAngleToken_; + edm::ESGetToken lorentzAngleWidthToken_; + edm::ESGetToken genErrorDBObjectToken_; + + edm::ParameterSet pset_; + bool useErrorsFromTemplates_; +}; + +using namespace edm; + +PixelCPEFastESProducer::PixelCPEFastESProducer(const edm::ParameterSet& p) : pset_(p) { + auto const& myname = p.getParameter("ComponentName"); + auto const& magname = p.getParameter("MagneticFieldRecord"); + useErrorsFromTemplates_ = p.getParameter("UseErrorsFromTemplates"); + + auto cc = setWhatProduced(this, myname); + magfieldToken_ = cc.consumes(magname); + pDDToken_ = cc.consumes(); + hTTToken_ = cc.consumes(); + lorentzAngleToken_ = cc.consumes(edm::ESInputTag("")); + lorentzAngleWidthToken_ = cc.consumes(edm::ESInputTag("", "forWidth")); + if (useErrorsFromTemplates_) { + genErrorDBObjectToken_ = cc.consumes(); + } +} + +std::unique_ptr PixelCPEFastESProducer::produce(const TkPixelCPERecord& iRecord) { + // add the new la width object + const SiPixelLorentzAngle* lorentzAngleWidthProduct = nullptr; + lorentzAngleWidthProduct = &iRecord.get(lorentzAngleWidthToken_); + + const SiPixelGenErrorDBObject* genErrorDBObjectProduct = nullptr; + + // Errors take only from new GenError + if (useErrorsFromTemplates_) { // do only when generrors are needed + genErrorDBObjectProduct = &iRecord.get(genErrorDBObjectToken_); + //} else { + //std::cout<<" pass an empty GenError pointer"<(pset_, + &iRecord.get(magfieldToken_), + iRecord.get(pDDToken_), + iRecord.get(hTTToken_), + &iRecord.get(lorentzAngleToken_), + genErrorDBObjectProduct, + lorentzAngleWidthProduct); +} + +void PixelCPEFastESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + + // from PixelCPEBase + PixelCPEBase::fillPSetDescription(desc); + + // used by PixelCPEFast + desc.add("EdgeClusterErrorX", 50.0); + desc.add("EdgeClusterErrorY", 85.0); + desc.add("UseErrorsFromTemplates", true); + desc.add("TruncatePixelCharge", true); + + // specific to PixelCPEFastESProducer + desc.add("ComponentName", "PixelCPEFast"); + desc.add("MagneticFieldRecord", edm::ESInputTag()); + desc.add("useLAAlignmentOffsets", false); + desc.add("DoLorentz", false); + + descriptions.add("PixelCPEFastESProducer", desc); +} + +DEFINE_FWK_EVENTSETUP_MODULE(PixelCPEFastESProducer); diff --git a/RecoLocalTracker/SiPixelRecHits/plugins/PixelRecHitGPUKernel.cu b/RecoLocalTracker/SiPixelRecHits/plugins/PixelRecHitGPUKernel.cu new file mode 100644 index 0000000000000..f75d5e3b3bef7 --- /dev/null +++ b/RecoLocalTracker/SiPixelRecHits/plugins/PixelRecHitGPUKernel.cu @@ -0,0 +1,78 @@ +// C++ headers +#include +#include + +// CUDA runtime +#include + +// CMSSW headers +#include "CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelRawToClusterGPUKernel.h" + +#include "PixelRecHitGPUKernel.h" +#include "gpuPixelRecHits.h" + +namespace { + __global__ void setHitsLayerStart(uint32_t const* __restrict__ hitsModuleStart, + pixelCPEforGPU::ParamsOnGPU const* cpeParams, + uint32_t* hitsLayerStart) { + auto i = blockIdx.x * blockDim.x + threadIdx.x; + + assert(0 == hitsModuleStart[0]); + + if (i < 11) { + hitsLayerStart[i] = hitsModuleStart[cpeParams->layerGeometry().layerStart[i]]; +#ifdef GPU_DEBUG + printf("LayerStart %d %d: %d\n", i, cpeParams->layerGeometry().layerStart[i], hitsLayerStart[i]); +#endif + } + } +} // namespace + +namespace pixelgpudetails { + + TrackingRecHit2DCUDA PixelRecHitGPUKernel::makeHitsAsync(SiPixelDigisCUDA const& digis_d, + SiPixelClustersCUDA const& clusters_d, + BeamSpotCUDA const& bs_d, + pixelCPEforGPU::ParamsOnGPU const* cpeParams, + cudaStream_t stream) const { + auto nHits = clusters_d.nClusters(); + TrackingRecHit2DCUDA hits_d(nHits, cpeParams, clusters_d.clusModuleStart(), stream); + + int threadsPerBlock = 128; + int blocks = digis_d.nModules(); // active modules (with digis) + +#ifdef GPU_DEBUG + std::cout << "launching getHits kernel for " << blocks << " blocks" << std::endl; +#endif + if (blocks) // protect from empty events + gpuPixelRecHits::getHits<<>>( + cpeParams, bs_d.data(), digis_d.view(), digis_d.nDigis(), clusters_d.view(), hits_d.view()); + cudaCheck(cudaGetLastError()); +#ifdef GPU_DEBUG + cudaDeviceSynchronize(); + cudaCheck(cudaGetLastError()); +#endif + + // assuming full warp of threads is better than a smaller number... + if (nHits) { + setHitsLayerStart<<<1, 32, 0, stream>>>(clusters_d.clusModuleStart(), cpeParams, hits_d.hitsLayerStart()); + cudaCheck(cudaGetLastError()); + } + + if (nHits) { + cms::cuda::fillManyFromVector(hits_d.phiBinner(), 10, hits_d.iphi(), hits_d.hitsLayerStart(), nHits, 256, stream); + cudaCheck(cudaGetLastError()); + } + +#ifdef GPU_DEBUG + cudaDeviceSynchronize(); + cudaCheck(cudaGetLastError()); +#endif + + return hits_d; + } + +} // namespace pixelgpudetails diff --git a/RecoLocalTracker/SiPixelRecHits/plugins/PixelRecHitGPUKernel.h b/RecoLocalTracker/SiPixelRecHits/plugins/PixelRecHitGPUKernel.h new file mode 100644 index 0000000000000..61bc8b58bb7d6 --- /dev/null +++ b/RecoLocalTracker/SiPixelRecHits/plugins/PixelRecHitGPUKernel.h @@ -0,0 +1,33 @@ +#ifndef RecoLocalTracker_SiPixelRecHits_plugins_PixelRecHitGPUKernel_h +#define RecoLocalTracker_SiPixelRecHits_plugins_PixelRecHitGPUKernel_h + +#include + +#include + +#include "CUDADataFormats/BeamSpot/interface/BeamSpotCUDA.h" +#include "CUDADataFormats/SiPixelCluster/interface/SiPixelClustersCUDA.h" +#include "CUDADataFormats/SiPixelDigi/interface/SiPixelDigisCUDA.h" +#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h" + +namespace pixelgpudetails { + + class PixelRecHitGPUKernel { + public: + PixelRecHitGPUKernel() = default; + ~PixelRecHitGPUKernel() = default; + + PixelRecHitGPUKernel(const PixelRecHitGPUKernel&) = delete; + PixelRecHitGPUKernel(PixelRecHitGPUKernel&&) = delete; + PixelRecHitGPUKernel& operator=(const PixelRecHitGPUKernel&) = delete; + PixelRecHitGPUKernel& operator=(PixelRecHitGPUKernel&&) = delete; + + TrackingRecHit2DCUDA makeHitsAsync(SiPixelDigisCUDA const& digis_d, + SiPixelClustersCUDA const& clusters_d, + BeamSpotCUDA const& bs_d, + pixelCPEforGPU::ParamsOnGPU const* cpeParams, + cudaStream_t stream) const; + }; +} // namespace pixelgpudetails + +#endif // RecoLocalTracker_SiPixelRecHits_plugins_PixelRecHitGPUKernel_h diff --git a/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitCUDA.cc b/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitCUDA.cc new file mode 100644 index 0000000000000..09b90526bf7db --- /dev/null +++ b/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitCUDA.cc @@ -0,0 +1,92 @@ +#include + +#include "CUDADataFormats/BeamSpot/interface/BeamSpotCUDA.h" +#include "CUDADataFormats/Common/interface/Product.h" +#include "CUDADataFormats/SiPixelCluster/interface/SiPixelClustersCUDA.h" +#include "CUDADataFormats/SiPixelDigi/interface/SiPixelDigisCUDA.h" +#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h" +#include "DataFormats/Common/interface/Handle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "RecoLocalTracker/Records/interface/TkPixelCPERecord.h" +#include "RecoLocalTracker/SiPixelRecHits/interface/PixelCPEBase.h" +#include "RecoLocalTracker/SiPixelRecHits/interface/PixelCPEFast.h" + +#include "PixelRecHitGPUKernel.h" + +class SiPixelRecHitCUDA : public edm::global::EDProducer<> { +public: + explicit SiPixelRecHitCUDA(const edm::ParameterSet& iConfig); + ~SiPixelRecHitCUDA() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void produce(edm::StreamID streamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const override; + + const edm::ESGetToken cpeToken_; + const edm::EDGetTokenT> tBeamSpot; + const edm::EDGetTokenT> token_; + const edm::EDGetTokenT> tokenDigi_; + const edm::EDPutTokenT> tokenHit_; + + const pixelgpudetails::PixelRecHitGPUKernel gpuAlgo_; +}; + +SiPixelRecHitCUDA::SiPixelRecHitCUDA(const edm::ParameterSet& iConfig) + : cpeToken_(esConsumes(edm::ESInputTag("", iConfig.getParameter("CPE")))), + tBeamSpot(consumes>(iConfig.getParameter("beamSpot"))), + token_(consumes>(iConfig.getParameter("src"))), + tokenDigi_(consumes>(iConfig.getParameter("src"))), + tokenHit_(produces>()) {} + +void SiPixelRecHitCUDA::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + + desc.add("beamSpot", edm::InputTag("offlineBeamSpotCUDA")); + desc.add("src", edm::InputTag("siPixelClustersPreSplittingCUDA")); + desc.add("CPE", "PixelCPEFast"); + descriptions.add("siPixelRecHitCUDA", desc); +} + +void SiPixelRecHitCUDA::produce(edm::StreamID streamID, edm::Event& iEvent, const edm::EventSetup& es) const { + PixelCPEFast const* fcpe = dynamic_cast(&es.getData(cpeToken_)); + if (not fcpe) { + throw cms::Exception("Configuration") << "SiPixelRecHitSoAFromLegacy can only use a CPE of type PixelCPEFast"; + } + + edm::Handle> hclusters; + iEvent.getByToken(token_, hclusters); + + cms::cuda::ScopedContextProduce ctx{*hclusters}; + auto const& clusters = ctx.get(*hclusters); + + edm::Handle> hdigis; + iEvent.getByToken(tokenDigi_, hdigis); + auto const& digis = ctx.get(*hdigis); + + edm::Handle> hbs; + iEvent.getByToken(tBeamSpot, hbs); + auto const& bs = ctx.get(*hbs); + + auto nHits = clusters.nClusters(); + if (nHits >= TrackingRecHit2DSOAView::maxHits()) { + edm::LogWarning("PixelRecHitGPUKernel") + << "Clusters/Hits Overflow " << nHits << " >= " << TrackingRecHit2DSOAView::maxHits(); + } + + ctx.emplace(iEvent, + tokenHit_, + gpuAlgo_.makeHitsAsync(digis, clusters, bs, fcpe->getGPUProductAsync(ctx.stream()), ctx.stream())); +} + +DEFINE_FWK_MODULE(SiPixelRecHitCUDA); diff --git a/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitConverter.cc b/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitConverter.cc index 42efbd12c2e2d..8c16be54e5774 100644 --- a/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitConverter.cc +++ b/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitConverter.cc @@ -82,6 +82,10 @@ #include "RecoLocalTracker/Records/interface/TkPixelCPERecord.h" +// Make heterogeneous framework happy +#include "CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h" +#include "CUDADataFormats/Common/interface/HostProduct.h" + using namespace std; namespace cms { @@ -104,22 +108,21 @@ namespace cms { void produce(edm::Event& e, const edm::EventSetup& c) override; //--- Execute the position estimator algorithm(s). - //--- New interface with DetSetVector - void run(const edmNew::DetSetVector& input, - SiPixelRecHitCollectionNew& output, - TrackerGeometry const& geom); - - void run(edm::Handle> inputhandle, + void run(edm::Event& e, + edm::Handle> inputhandle, SiPixelRecHitCollectionNew& output, TrackerGeometry const& geom); private: + using HMSstorage = HostProduct; + // TO DO: maybe allow a map of pointers? /// const PixelClusterParameterEstimator * cpe_; // what we got (for now, one ptr to base class) PixelCPEBase const* cpe_ = nullptr; // What we got (for now, one ptr to base class) edm::InputTag const src_; edm::EDGetTokenT> const tPixelCluster_; edm::EDPutTokenT const tPut_; + edm::EDPutTokenT const tHost_; edm::ESGetToken const tTrackerGeom_; edm::ESGetToken const tCPE_; bool m_newCont; // save also in emdNew::DetSetVector @@ -132,6 +135,7 @@ namespace cms { : src_(conf.getParameter("src")), tPixelCluster_(consumes>(src_)), tPut_(produces()), + tHost_(produces()), tTrackerGeom_(esConsumes()), tCPE_(esConsumes( edm::ESInputTag("", conf.getParameter("CPE")))) {} @@ -159,7 +163,7 @@ namespace cms { // Step C: Iterate over DetIds and invoke the strip CPE algorithm // on each DetUnit - run(input, output, geom); + run(e, input, output, geom); output.shrink_to_fit(); e.emplace(tPut_, std::move(output)); @@ -170,7 +174,8 @@ namespace cms { //! and make a RecHit to store the result. //! New interface reading DetSetVector by V.Chiochia (May 30th, 2006) //--------------------------------------------------------------------------- - void SiPixelRecHitConverter::run(edm::Handle> inputhandle, + void SiPixelRecHitConverter::run(edm::Event& iEvent, + edm::Handle> inputhandle, SiPixelRecHitCollectionNew& output, TrackerGeometry const& geom) { if (!cpe_) { @@ -185,18 +190,45 @@ namespace cms { const edmNew::DetSetVector& input = *inputhandle; - edmNew::DetSetVector::const_iterator DSViter = input.begin(); + // allocate a buffer for the indices of the clusters + auto hmsp = std::make_unique(gpuClustering::maxNumModules + 1); + // hitsModuleStart is a non-owning pointer to the buffer + auto hitsModuleStart = hmsp.get(); + // fill cluster arrays + std::array clusInModule{}; + for (auto const& dsv : input) { + unsigned int detid = dsv.detId(); + DetId detIdObject(detid); + const GeomDetUnit* genericDet = geom.idToDetUnit(detIdObject); + auto gind = genericDet->index(); + // FIXME to be changed to support Phase2 + if (gind >= int(gpuClustering::maxNumModules)) + continue; + auto const nclus = dsv.size(); + assert(nclus > 0); + clusInModule[gind] = nclus; + numberOfClusters += nclus; + } + hitsModuleStart[0] = 0; + assert(clusInModule.size() > gpuClustering::maxNumModules); + for (int i = 1, n = clusInModule.size(); i < n; ++i) + hitsModuleStart[i] = hitsModuleStart[i - 1] + clusInModule[i - 1]; + assert(numberOfClusters == int(hitsModuleStart[gpuClustering::maxNumModules])); + + // wrap the buffer in a HostProduct, and move it to the Event, without reallocating the buffer or affecting hitsModuleStart + iEvent.emplace(tHost_, std::move(hmsp)); - for (; DSViter != input.end(); DSViter++) { + numberOfClusters = 0; + for (auto const& dsv : input) { numberOfDetUnits++; - unsigned int detid = DSViter->detId(); + unsigned int detid = dsv.detId(); DetId detIdObject(detid); const GeomDetUnit* genericDet = geom.idToDetUnit(detIdObject); const PixelGeomDetUnit* pixDet = dynamic_cast(genericDet); assert(pixDet); SiPixelRecHitCollectionNew::FastFiller recHitsOnDetUnit(output, detid); - edmNew::DetSet::const_iterator clustIt = DSViter->begin(), clustEnd = DSViter->end(); + edmNew::DetSet::const_iterator clustIt = dsv.begin(), clustEnd = dsv.end(); for (; clustIt != clustEnd; clustIt++) { numberOfClusters++; diff --git a/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitFromCUDA.cc b/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitFromCUDA.cc new file mode 100644 index 0000000000000..790b0da51ecfb --- /dev/null +++ b/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitFromCUDA.cc @@ -0,0 +1,187 @@ +#include + +#include + +#include "CUDADataFormats/Common/interface/HostProduct.h" +#include "CUDADataFormats/Common/interface/Product.h" +#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h" +#include "DataFormats/Common/interface/DetSetVectorNew.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" +#include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "RecoLocalTracker/SiPixelRecHits/interface/pixelCPEforGPU.h" + +class SiPixelRecHitFromCUDA : public edm::stream::EDProducer { +public: + explicit SiPixelRecHitFromCUDA(const edm::ParameterSet& iConfig); + ~SiPixelRecHitFromCUDA() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + using HMSstorage = HostProduct; + +private: + void acquire(edm::Event const& iEvent, + edm::EventSetup const& iSetup, + edm::WaitingTaskWithArenaHolder waitingTaskHolder) override; + void produce(edm::Event& iEvent, edm::EventSetup const& iSetup) override; + + const edm::ESGetToken geomToken_; + const edm::EDGetTokenT> hitsToken_; // CUDA hits + const edm::EDGetTokenT clusterToken_; // legacy clusters + const edm::EDPutTokenT rechitsPutToken_; // legacy rechits + const edm::EDPutTokenT hostPutToken_; + + uint32_t nHits_; + cms::cuda::host::unique_ptr store32_; + cms::cuda::host::unique_ptr hitsModuleStart_; +}; + +SiPixelRecHitFromCUDA::SiPixelRecHitFromCUDA(const edm::ParameterSet& iConfig) + : geomToken_(esConsumes()), + hitsToken_( + consumes>(iConfig.getParameter("pixelRecHitSrc"))), + clusterToken_(consumes(iConfig.getParameter("src"))), + rechitsPutToken_(produces()), + hostPutToken_(produces()) {} + +void SiPixelRecHitFromCUDA::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("pixelRecHitSrc", edm::InputTag("siPixelRecHitsPreSplittingCUDA")); + desc.add("src", edm::InputTag("siPixelClustersPreSplitting")); + descriptions.addWithDefaultLabel(desc); +} + +void SiPixelRecHitFromCUDA::acquire(edm::Event const& iEvent, + edm::EventSetup const& iSetup, + edm::WaitingTaskWithArenaHolder waitingTaskHolder) { + cms::cuda::Product const& inputDataWrapped = iEvent.get(hitsToken_); + cms::cuda::ScopedContextAcquire ctx{inputDataWrapped, std::move(waitingTaskHolder)}; + auto const& inputData = ctx.get(inputDataWrapped); + + nHits_ = inputData.nHits(); + + LogDebug("SiPixelRecHitFromCUDA") << "converting " << nHits_ << " Hits"; + + if (0 == nHits_) + return; + store32_ = inputData.localCoordToHostAsync(ctx.stream()); + hitsModuleStart_ = inputData.hitsModuleStartToHostAsync(ctx.stream()); +} + +void SiPixelRecHitFromCUDA::produce(edm::Event& iEvent, edm::EventSetup const& es) { + // allocate a buffer for the indices of the clusters + auto hmsp = std::make_unique(gpuClustering::maxNumModules + 1); + std::copy(hitsModuleStart_.get(), hitsModuleStart_.get() + gpuClustering::maxNumModules + 1, hmsp.get()); + // wrap the buffer in a HostProduct, and move it to the Event, without reallocating the buffer or affecting hitsModuleStart + iEvent.emplace(hostPutToken_, std::move(hmsp)); + + SiPixelRecHitCollection output; + if (0 == nHits_) { + iEvent.emplace(rechitsPutToken_, std::move(output)); + return; + } + + auto xl = store32_.get(); + auto yl = xl + nHits_; + auto xe = yl + nHits_; + auto ye = xe + nHits_; + + const TrackerGeometry* geom = &es.getData(geomToken_); + + edm::Handle hclusters = iEvent.getHandle(clusterToken_); + auto const& input = *hclusters; + + constexpr uint32_t maxHitsInModule = gpuClustering::maxHitsInModule(); + + int numberOfDetUnits = 0; + int numberOfClusters = 0; + for (auto const& dsv : input) { + numberOfDetUnits++; + unsigned int detid = dsv.detId(); + DetId detIdObject(detid); + const GeomDetUnit* genericDet = geom->idToDetUnit(detIdObject); + auto gind = genericDet->index(); + const PixelGeomDetUnit* pixDet = dynamic_cast(genericDet); + assert(pixDet); + SiPixelRecHitCollection::FastFiller recHitsOnDetUnit(output, detid); + auto fc = hitsModuleStart_[gind]; + auto lc = hitsModuleStart_[gind + 1]; + auto nhits = lc - fc; + + assert(lc > fc); + LogDebug("SiPixelRecHitFromCUDA") << "in det " << gind << ": conv " << nhits << " hits from " << dsv.size() + << " legacy clusters" << ' ' << fc << ',' << lc; + if (nhits > maxHitsInModule) + edm::LogWarning("SiPixelRecHitFromCUDA") << fmt::sprintf( + "Too many clusters %d in module %d. Only the first %d hits will be converted", nhits, gind, maxHitsInModule); + nhits = std::min(nhits, maxHitsInModule); + + LogDebug("SiPixelRecHitFromCUDA") << "in det " << gind << "conv " << nhits << " hits from " << dsv.size() + << " legacy clusters" << ' ' << lc << ',' << fc; + + if (0 == nhits) + continue; + auto jnd = [&](int k) { return fc + k; }; + assert(nhits <= dsv.size()); + if (nhits != dsv.size()) { + edm::LogWarning("GPUHits2CPU") << "nhits!= nclus " << nhits << ' ' << dsv.size(); + } + for (auto const& clust : dsv) { + assert(clust.originalId() >= 0); + assert(clust.originalId() < dsv.size()); + if (clust.originalId() >= nhits) + continue; + auto ij = jnd(clust.originalId()); + if (ij >= TrackingRecHit2DSOAView::maxHits()) + continue; // overflow... + LocalPoint lp(xl[ij], yl[ij]); + LocalError le(xe[ij], 0, ye[ij]); + SiPixelRecHitQuality::QualWordType rqw = 0; + + numberOfClusters++; + + /* cpu version.... (for reference) + std::tuple tuple = cpe_->getParameters( clust, *genericDet ); + LocalPoint lp( std::get<0>(tuple) ); + LocalError le( std::get<1>(tuple) ); + SiPixelRecHitQuality::QualWordType rqw( std::get<2>(tuple) ); + */ + + // Create a persistent edm::Ref to the cluster + edm::Ref, SiPixelCluster> cluster = edmNew::makeRefTo(hclusters, &clust); + // Make a RecHit and add it to the DetSet + SiPixelRecHit hit(lp, le, rqw, *genericDet, cluster); + // + // Now save it ================= + recHitsOnDetUnit.push_back(hit); + // ============================= + + LogDebug("SiPixelRecHitFromCUDA") << "cluster " << numberOfClusters << " at " << lp << ' ' << le; + + } // <-- End loop on Clusters + + // LogDebug("SiPixelRecHitGPU") + LogDebug("SiPixelRecHitFromCUDA") << "found " << recHitsOnDetUnit.size() << " RecHits on " << detid; + + } // <-- End loop on DetUnits + + LogDebug("SiPixelRecHitFromCUDA") << "found " << numberOfDetUnits << " dets, " << numberOfClusters << " clusters"; + + iEvent.emplace(rechitsPutToken_, std::move(output)); +} + +DEFINE_FWK_MODULE(SiPixelRecHitFromCUDA); diff --git a/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitSoAFromLegacy.cc b/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitSoAFromLegacy.cc new file mode 100644 index 0000000000000..0d95370f25e47 --- /dev/null +++ b/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitSoAFromLegacy.cc @@ -0,0 +1,252 @@ +#include + +#include "CUDADataFormats/BeamSpot/interface/BeamSpotCUDA.h" +#include "CUDADataFormats/SiPixelCluster/interface/SiPixelClustersCUDA.h" +#include "CUDADataFormats/SiPixelDigi/interface/SiPixelDigisCUDA.h" +#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h" +#include "CUDADataFormats/Common/interface/HostProduct.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/Common/interface/DetSetVectorNew.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" +#include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "RecoLocalTracker/Records/interface/TkPixelCPERecord.h" +#include "RecoLocalTracker/SiPixelRecHits/interface/PixelCPEBase.h" +#include "RecoLocalTracker/SiPixelRecHits/interface/PixelCPEFast.h" + +#include "gpuPixelRecHits.h" + +class SiPixelRecHitSoAFromLegacy : public edm::global::EDProducer<> { +public: + explicit SiPixelRecHitSoAFromLegacy(const edm::ParameterSet& iConfig); + ~SiPixelRecHitSoAFromLegacy() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + using HitModuleStart = std::array; + using HMSstorage = HostProduct; + +private: + void produce(edm::StreamID streamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const override; + + const edm::ESGetToken geomToken_; + const edm::ESGetToken cpeToken_; + const edm::EDGetTokenT bsGetToken_; + const edm::EDGetTokenT clusterToken_; // Legacy Clusters + const edm::EDPutTokenT tokenHit_; + const edm::EDPutTokenT tokenModuleStart_; + const bool convert2Legacy_; +}; + +SiPixelRecHitSoAFromLegacy::SiPixelRecHitSoAFromLegacy(const edm::ParameterSet& iConfig) + : geomToken_(esConsumes()), + cpeToken_(esConsumes(edm::ESInputTag("", iConfig.getParameter("CPE")))), + bsGetToken_{consumes(iConfig.getParameter("beamSpot"))}, + clusterToken_{consumes(iConfig.getParameter("src"))}, + tokenHit_{produces()}, + tokenModuleStart_{produces()}, + convert2Legacy_(iConfig.getParameter("convertToLegacy")) { + if (convert2Legacy_) + produces(); +} + +void SiPixelRecHitSoAFromLegacy::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + + desc.add("beamSpot", edm::InputTag("offlineBeamSpot")); + desc.add("src", edm::InputTag("siPixelClustersPreSplitting")); + desc.add("CPE", "PixelCPEFast"); + desc.add("convertToLegacy", false); + descriptions.addWithDefaultLabel(desc); +} + +void SiPixelRecHitSoAFromLegacy::produce(edm::StreamID streamID, edm::Event& iEvent, const edm::EventSetup& es) const { + const TrackerGeometry* geom_ = &es.getData(geomToken_); + PixelCPEFast const* fcpe = dynamic_cast(&es.getData(cpeToken_)); + if (not fcpe) { + throw cms::Exception("Configuration") << "SiPixelRecHitSoAFromLegacy can only use a CPE of type PixelCPEFast"; + } + auto const& cpeView = fcpe->getCPUProduct(); + + const reco::BeamSpot& bs = iEvent.get(bsGetToken_); + + BeamSpotPOD bsHost; + bsHost.x = bs.x0(); + bsHost.y = bs.y0(); + bsHost.z = bs.z0(); + + edm::Handle hclusters; + iEvent.getByToken(clusterToken_, hclusters); + auto const& input = *hclusters; + + // allocate a buffer for the indices of the clusters + auto hmsp = std::make_unique(gpuClustering::maxNumModules + 1); + // hitsModuleStart is a non-owning pointer to the buffer + auto hitsModuleStart = hmsp.get(); + // wrap the buffer in a HostProduct + auto hms = std::make_unique(std::move(hmsp)); + // move the HostProduct to the Event, without reallocating the buffer or affecting hitsModuleStart + iEvent.put(tokenModuleStart_, std::move(hms)); + + // legacy output + auto legacyOutput = std::make_unique(); + + // storage + std::vector xx; + std::vector yy; + std::vector adc; + std::vector moduleInd; + std::vector clus; + + std::vector, SiPixelCluster>> clusterRef; + + constexpr uint32_t maxHitsInModule = gpuClustering::maxHitsInModule(); + + HitModuleStart moduleStart_; // index of the first pixel of each module + HitModuleStart clusInModule_; + memset(&clusInModule_, 0, sizeof(HitModuleStart)); // needed?? + assert(gpuClustering::maxNumModules + 1 == clusInModule_.size()); + assert(0 == clusInModule_[gpuClustering::maxNumModules]); + uint32_t moduleId_; + moduleStart_[1] = 0; // we run sequentially.... + + SiPixelClustersCUDA::DeviceConstView clusterView{ + moduleStart_.data(), clusInModule_.data(), &moduleId_, hitsModuleStart}; + + // fill cluster arrays + int numberOfClusters = 0; + for (auto const& dsv : input) { + unsigned int detid = dsv.detId(); + DetId detIdObject(detid); + const GeomDetUnit* genericDet = geom_->idToDetUnit(detIdObject); + auto gind = genericDet->index(); + assert(gind < gpuClustering::maxNumModules); + auto const nclus = dsv.size(); + clusInModule_[gind] = nclus; + numberOfClusters += nclus; + } + hitsModuleStart[0] = 0; + for (int i = 1, n = clusInModule_.size(); i < n; ++i) + hitsModuleStart[i] = hitsModuleStart[i - 1] + clusInModule_[i - 1]; + assert(numberOfClusters == int(hitsModuleStart[gpuClustering::maxNumModules])); + + // output SoA + auto output = std::make_unique(numberOfClusters, &cpeView, hitsModuleStart, nullptr); + + if (0 == numberOfClusters) { + iEvent.put(std::move(output)); + if (convert2Legacy_) + iEvent.put(std::move(legacyOutput)); + return; + } + + if (convert2Legacy_) + legacyOutput->reserve(gpuClustering::maxNumModules, numberOfClusters); + + int numberOfDetUnits = 0; + int numberOfHits = 0; + for (auto const& dsv : input) { + numberOfDetUnits++; + unsigned int detid = dsv.detId(); + DetId detIdObject(detid); + const GeomDetUnit* genericDet = geom_->idToDetUnit(detIdObject); + auto const gind = genericDet->index(); + assert(gind < gpuClustering::maxNumModules); + const PixelGeomDetUnit* pixDet = dynamic_cast(genericDet); + assert(pixDet); + auto const nclus = dsv.size(); + assert(clusInModule_[gind] == nclus); + if (0 == nclus) + continue; // is this really possible? + + auto const fc = hitsModuleStart[gind]; + auto const lc = hitsModuleStart[gind + 1]; + assert(lc > fc); + LogDebug("SiPixelRecHitSoAFromLegacy") << "in det " << gind << ": conv " << nclus << " hits from " << dsv.size() + << " legacy clusters" << ' ' << fc << ',' << lc; + assert((lc - fc) == nclus); + if (nclus > maxHitsInModule) + printf( + "WARNING: too many clusters %d in Module %d. Only first %d Hits converted\n", nclus, gind, maxHitsInModule); + + // fill digis + xx.clear(); + yy.clear(); + adc.clear(); + moduleInd.clear(); + clus.clear(); + clusterRef.clear(); + moduleId_ = gind; + uint32_t ic = 0; + uint32_t ndigi = 0; + for (auto const& clust : dsv) { + assert(clust.size() > 0); + for (int i = 0, nd = clust.size(); i < nd; ++i) { + auto px = clust.pixel(i); + xx.push_back(px.x); + yy.push_back(px.y); + adc.push_back(px.adc); + moduleInd.push_back(gind); + clus.push_back(ic); + ++ndigi; + } + assert(clust.originalId() == ic); // make sure hits and clus are in sync + if (convert2Legacy_) + clusterRef.emplace_back(edmNew::makeRefTo(hclusters, &clust)); + ic++; + } + assert(nclus == ic); + assert(clus.size() == ndigi); + numberOfHits += nclus; + // filled creates view + SiPixelDigisCUDA::DeviceConstView digiView{xx.data(), yy.data(), adc.data(), moduleInd.data(), clus.data()}; + assert(digiView.adc(0) != 0); + // we run on blockId.x==0 + gpuPixelRecHits::getHits(&cpeView, &bsHost, &digiView, ndigi, &clusterView, output->view()); + for (auto h = fc; h < lc; ++h) + if (h - fc < maxHitsInModule) + assert(gind == output->view()->detectorIndex(h)); + else + assert(gpuClustering::invalidModuleId == output->view()->detectorIndex(h)); + if (convert2Legacy_) { + SiPixelRecHitCollectionNew::FastFiller recHitsOnDetUnit(*legacyOutput, detid); + for (auto h = fc; h < lc; ++h) { + auto ih = h - fc; + if (ih >= maxHitsInModule) + break; + assert(ih < clusterRef.size()); + LocalPoint lp(output->view()->xLocal(h), output->view()->yLocal(h)); + LocalError le(output->view()->xerrLocal(h), 0, output->view()->yerrLocal(h)); + SiPixelRecHitQuality::QualWordType rqw = 0; + SiPixelRecHit hit(lp, le, rqw, *genericDet, clusterRef[ih]); + recHitsOnDetUnit.push_back(hit); + } + } + } + assert(numberOfHits == numberOfClusters); + + // fill data structure to support CA + for (auto i = 0; i < 11; ++i) { + output->hitsLayerStart()[i] = hitsModuleStart[cpeView.layerGeometry().layerStart[i]]; + } + cms::cuda::fillManyFromVector( + output->phiBinner(), 10, output->iphi(), output->hitsLayerStart(), numberOfHits, 256, nullptr); + + LogDebug("SiPixelRecHitSoAFromLegacy") << "created HitSoa for " << numberOfClusters << " clusters in " + << numberOfDetUnits << " Dets"; + iEvent.put(std::move(output)); + if (convert2Legacy_) + iEvent.put(std::move(legacyOutput)); +} + +DEFINE_FWK_MODULE(SiPixelRecHitSoAFromLegacy); diff --git a/RecoLocalTracker/SiPixelRecHits/plugins/gpuPixelRecHits.h b/RecoLocalTracker/SiPixelRecHits/plugins/gpuPixelRecHits.h new file mode 100644 index 0000000000000..2401fed6c5171 --- /dev/null +++ b/RecoLocalTracker/SiPixelRecHits/plugins/gpuPixelRecHits.h @@ -0,0 +1,212 @@ +#ifndef RecoLocalTracker_SiPixelRecHits_plugins_gpuPixelRecHits_h +#define RecoLocalTracker_SiPixelRecHits_plugins_gpuPixelRecHits_h + +#include +#include +#include + +#include "CUDADataFormats/BeamSpot/interface/BeamSpotCUDA.h" +#include "CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h" +#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h" +#include "DataFormats/Math/interface/approx_atan2.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cuda_assert.h" +#include "RecoLocalTracker/SiPixelRecHits/interface/pixelCPEforGPU.h" + +namespace gpuPixelRecHits { + + __global__ void getHits(pixelCPEforGPU::ParamsOnGPU const* __restrict__ cpeParams, + BeamSpotPOD const* __restrict__ bs, + SiPixelDigisCUDA::DeviceConstView const* __restrict__ pdigis, + int numElements, + SiPixelClustersCUDA::DeviceConstView const* __restrict__ pclusters, + TrackingRecHit2DSOAView* phits) { + // FIXME + // the compiler seems NOT to optimize loads from views (even in a simple test case) + // The whole gimnastic here of copying or not is a pure heuristic exercise that seems to produce the fastest code with the above signature + // not using views (passing a gazzilion of array pointers) seems to produce the fastest code (but it is harder to mantain) + + assert(phits); + assert(cpeParams); + + auto& hits = *phits; + + auto const digis = *pdigis; // the copy is intentional! + auto const& clusters = *pclusters; + + // copy average geometry corrected by beamspot . FIXME (move it somewhere else???) + if (0 == blockIdx.x) { + auto& agc = hits.averageGeometry(); + auto const& ag = cpeParams->averageGeometry(); + for (int il = threadIdx.x, nl = TrackingRecHit2DSOAView::AverageGeometry::numberOfLaddersInBarrel; il < nl; + il += blockDim.x) { + agc.ladderZ[il] = ag.ladderZ[il] - bs->z; + agc.ladderX[il] = ag.ladderX[il] - bs->x; + agc.ladderY[il] = ag.ladderY[il] - bs->y; + agc.ladderR[il] = sqrt(agc.ladderX[il] * agc.ladderX[il] + agc.ladderY[il] * agc.ladderY[il]); + agc.ladderMinZ[il] = ag.ladderMinZ[il] - bs->z; + agc.ladderMaxZ[il] = ag.ladderMaxZ[il] - bs->z; + } + if (0 == threadIdx.x) { + agc.endCapZ[0] = ag.endCapZ[0] - bs->z; + agc.endCapZ[1] = ag.endCapZ[1] - bs->z; + // printf("endcapZ %f %f\n",agc.endCapZ[0],agc.endCapZ[1]); + } + } + + // to be moved in common namespace... + using gpuClustering::invalidModuleId; + constexpr int32_t MaxHitsInIter = pixelCPEforGPU::MaxHitsInIter; + + using ClusParams = pixelCPEforGPU::ClusParams; + + // as usual one block per module + __shared__ ClusParams clusParams; + + auto me = clusters.moduleId(blockIdx.x); + int nclus = clusters.clusInModule(me); + + if (0 == nclus) + return; + +#ifdef GPU_DEBUG + if (threadIdx.x == 0) { + auto k = clusters.moduleStart(1 + blockIdx.x); + while (digis.moduleInd(k) == invalidModuleId) + ++k; + assert(digis.moduleInd(k) == me); + } +#endif + +#ifdef GPU_DEBUG + if (me % 100 == 1) + if (threadIdx.x == 0) + printf("hitbuilder: %d clusters in module %d. will write at %d\n", nclus, me, clusters.clusModuleStart(me)); +#endif + + for (int startClus = 0, endClus = nclus; startClus < endClus; startClus += MaxHitsInIter) { + int nClusInIter = std::min(MaxHitsInIter, endClus - startClus); + int lastClus = startClus + nClusInIter; + assert(nClusInIter <= nclus); + assert(nClusInIter > 0); + assert(lastClus <= nclus); + + assert(nclus > MaxHitsInIter || (0 == startClus && nClusInIter == nclus && lastClus == nclus)); + + // init + for (int ic = threadIdx.x; ic < nClusInIter; ic += blockDim.x) { + clusParams.minRow[ic] = std::numeric_limits::max(); + clusParams.maxRow[ic] = 0; + clusParams.minCol[ic] = std::numeric_limits::max(); + clusParams.maxCol[ic] = 0; + clusParams.charge[ic] = 0; + clusParams.q_f_X[ic] = 0; + clusParams.q_l_X[ic] = 0; + clusParams.q_f_Y[ic] = 0; + clusParams.q_l_Y[ic] = 0; + } + + __syncthreads(); + + // one thread per "digi" + auto first = clusters.moduleStart(1 + blockIdx.x) + threadIdx.x; + for (int i = first; i < numElements; i += blockDim.x) { + auto id = digis.moduleInd(i); + if (id == invalidModuleId) + continue; // not valid + if (id != me) + break; // end of module + auto cl = digis.clus(i); + if (cl < startClus || cl >= lastClus) + continue; + cl -= startClus; + assert(cl >= 0); + assert(cl < MaxHitsInIter); + auto x = digis.xx(i); + auto y = digis.yy(i); + atomicMin(&clusParams.minRow[cl], x); + atomicMax(&clusParams.maxRow[cl], x); + atomicMin(&clusParams.minCol[cl], y); + atomicMax(&clusParams.maxCol[cl], y); + } + + __syncthreads(); + + auto pixmx = cpeParams->detParams(me).pixmx; + for (int i = first; i < numElements; i += blockDim.x) { + auto id = digis.moduleInd(i); + if (id == invalidModuleId) + continue; // not valid + if (id != me) + break; // end of module + auto cl = digis.clus(i); + if (cl < startClus || cl >= lastClus) + continue; + cl -= startClus; + assert(cl >= 0); + assert(cl < MaxHitsInIter); + auto x = digis.xx(i); + auto y = digis.yy(i); + auto ch = std::min(digis.adc(i), pixmx); + atomicAdd(&clusParams.charge[cl], ch); + if (clusParams.minRow[cl] == x) + atomicAdd(&clusParams.q_f_X[cl], ch); + if (clusParams.maxRow[cl] == x) + atomicAdd(&clusParams.q_l_X[cl], ch); + if (clusParams.minCol[cl] == y) + atomicAdd(&clusParams.q_f_Y[cl], ch); + if (clusParams.maxCol[cl] == y) + atomicAdd(&clusParams.q_l_Y[cl], ch); + } + + __syncthreads(); + + // next one cluster per thread... + + first = clusters.clusModuleStart(me) + startClus; + for (int ic = threadIdx.x; ic < nClusInIter; ic += blockDim.x) { + auto h = first + ic; // output index in global memory + + assert(h < TrackingRecHit2DSOAView::maxHits()); + assert(h < hits.nHits()); + assert(h < clusters.clusModuleStart(me + 1)); + + pixelCPEforGPU::position(cpeParams->commonParams(), cpeParams->detParams(me), clusParams, ic); + pixelCPEforGPU::errorFromDB(cpeParams->commonParams(), cpeParams->detParams(me), clusParams, ic); + + // store it + hits.charge(h) = clusParams.charge[ic]; + hits.detectorIndex(h) = me; + + float xl, yl; + hits.xLocal(h) = xl = clusParams.xpos[ic]; + hits.yLocal(h) = yl = clusParams.ypos[ic]; + + hits.clusterSizeX(h) = clusParams.xsize[ic]; + hits.clusterSizeY(h) = clusParams.ysize[ic]; + + hits.xerrLocal(h) = clusParams.xerr[ic] * clusParams.xerr[ic]; + hits.yerrLocal(h) = clusParams.yerr[ic] * clusParams.yerr[ic]; + + // keep it local for computations + float xg, yg, zg; + // to global and compute phi... + cpeParams->detParams(me).frame.toGlobal(xl, yl, xg, yg, zg); + // here correct for the beamspot... + xg -= bs->x; + yg -= bs->y; + zg -= bs->z; + + hits.xGlobal(h) = xg; + hits.yGlobal(h) = yg; + hits.zGlobal(h) = zg; + + hits.rGlobal(h) = std::sqrt(xg * xg + yg * yg); + hits.iphi(h) = unsafe_atan2s<7>(yg, xg); + } + __syncthreads(); + } // end loop on batches + } + +} // namespace gpuPixelRecHits + +#endif // RecoLocalTracker_SiPixelRecHits_plugins_gpuPixelRecHits_h diff --git a/RecoLocalTracker/SiPixelRecHits/python/PixelCPEESProducers_cff.py b/RecoLocalTracker/SiPixelRecHits/python/PixelCPEESProducers_cff.py index e349a515c69b3..e3879f4d9d34c 100644 --- a/RecoLocalTracker/SiPixelRecHits/python/PixelCPEESProducers_cff.py +++ b/RecoLocalTracker/SiPixelRecHits/python/PixelCPEESProducers_cff.py @@ -10,6 +10,7 @@ # 2. Pixel Generic CPE # from RecoLocalTracker.SiPixelRecHits.PixelCPEGeneric_cfi import * +from RecoLocalTracker.SiPixelRecHits.PixelCPEFastESProducer_cfi import * # # 3. ESProducer for the Magnetic-field dependent template records # diff --git a/RecoLocalTracker/SiPixelRecHits/python/PixelCPEGeneric_cfi.py b/RecoLocalTracker/SiPixelRecHits/python/PixelCPEGeneric_cfi.py index 6e6883cd840ea..fb275d2af4beb 100644 --- a/RecoLocalTracker/SiPixelRecHits/python/PixelCPEGeneric_cfi.py +++ b/RecoLocalTracker/SiPixelRecHits/python/PixelCPEGeneric_cfi.py @@ -8,7 +8,6 @@ from Configuration.Eras.Modifier_run3_common_cff import run3_common run3_common.toModify(PixelCPEGenericESProducer, IrradiationBiasCorrection = True) - # customize the Pixel CPE generic producer for phase2 from Configuration.Eras.Modifier_phase2_tracker_cff import phase2_tracker phase2_tracker.toModify(PixelCPEGenericESProducer, @@ -21,10 +20,19 @@ Upgrade = True # use 'upgrade' version of hardcoded CPE errors ) +# customize the Pixel CPE generic producer for phase2 3D pixels +# Will remove any usage of template / genError payloads from the reconstruction +from Configuration.Eras.Modifier_phase2_3DPixels_cff import phase2_3DPixels +(phase2_tracker & phase2_3DPixels).toModify(PixelCPEGenericESProducer, + UseErrorsFromTemplates = False, # no GenErrors + LoadTemplatesFromDB = False, # do not load templates + ) -# customize the Pixel CPE generic producer in order not to use any template information -from Configuration.ProcessModifiers.phase2_PixelCPEGeneric_cff import phase2_PixelCPEGeneric -phase2_PixelCPEGeneric.toModify(PixelCPEGenericESProducer, - UseErrorsFromTemplates = False, # no GenErrors - LoadTemplatesFromDB = False, # do not load templates -) +# customize the Pixel CPE generic producer for phase2 square pixels +# Do use Template errors for square pixels even in the first tracking step +# This is needed because hardcoded errors in https://github.com/cms-sw/cmssw/blob/master/RecoLocalTracker/SiPixelRecHits/src/PixelCPEGeneric.cc#L113 +# have been optimized for rectangular 25x100 pixels, and in the current generic reco setup we use hardcoded errors for the first tracking pass +from Configuration.Eras.Modifier_phase2_squarePixels_cff import phase2_squarePixels +(phase2_tracker & phase2_squarePixels).toModify(PixelCPEGenericESProducer, + NoTemplateErrorsWhenNoTrkAngles = False # use genErrors in the seeding step (when no track angles are available) + ) diff --git a/RecoLocalTracker/SiPixelRecHits/python/SiPixelRecHits_cfi.py b/RecoLocalTracker/SiPixelRecHits/python/SiPixelRecHits_cfi.py index 465aa0bb346ce..eb9dbad4934cd 100644 --- a/RecoLocalTracker/SiPixelRecHits/python/SiPixelRecHits_cfi.py +++ b/RecoLocalTracker/SiPixelRecHits/python/SiPixelRecHits_cfi.py @@ -6,6 +6,39 @@ VerboseLevel = cms.untracked.int32(0) ) -siPixelRecHitsPreSplitting = siPixelRecHits.clone( +_siPixelRecHitsPreSplitting = siPixelRecHits.clone( src = 'siPixelClustersPreSplitting' ) + +from HeterogeneousCore.CUDACore.SwitchProducerCUDA import SwitchProducerCUDA +siPixelRecHitsPreSplitting = SwitchProducerCUDA( + cpu = _siPixelRecHitsPreSplitting.clone() +) + + + +from Configuration.ProcessModifiers.gpu_cff import gpu +from RecoLocalTracker.SiPixelRecHits.siPixelRecHitCUDA_cfi import siPixelRecHitCUDA as _siPixelRecHitCUDA +from RecoLocalTracker.SiPixelRecHits.siPixelRecHitFromCUDA_cfi import siPixelRecHitFromCUDA as _siPixelRecHitFromCUDA + +gpu.toModify(siPixelRecHitsPreSplitting, + cuda = _siPixelRecHitFromCUDA.clone() +) + + +siPixelRecHitsPreSplittingTask = cms.Task(siPixelRecHitsPreSplitting) + +siPixelRecHitsPreSplittingCUDA = _siPixelRecHitCUDA.clone( + beamSpot = "offlineBeamSpotToCUDA" +) + +siPixelRecHitsPreSplittingLegacy = _siPixelRecHitFromCUDA.clone() +siPixelRecHitsPreSplittingTaskCUDA = cms.Task( + siPixelRecHitsPreSplittingCUDA, + siPixelRecHitsPreSplittingLegacy, +) + +from Configuration.ProcessModifiers.gpu_cff import gpu +_siPixelRecHitsPreSplittingTask_gpu = siPixelRecHitsPreSplittingTask.copy() +_siPixelRecHitsPreSplittingTask_gpu.add(siPixelRecHitsPreSplittingTaskCUDA) +gpu.toReplaceWith(siPixelRecHitsPreSplittingTask, _siPixelRecHitsPreSplittingTask_gpu) diff --git a/RecoLocalTracker/SiPixelRecHits/src/PixelCPEClusterRepair.cc b/RecoLocalTracker/SiPixelRecHits/src/PixelCPEClusterRepair.cc index cfeb9759a1d90..51b75525c7218 100644 --- a/RecoLocalTracker/SiPixelRecHits/src/PixelCPEClusterRepair.cc +++ b/RecoLocalTracker/SiPixelRecHits/src/PixelCPEClusterRepair.cc @@ -155,12 +155,7 @@ void PixelCPEClusterRepair::fill2DTemplIDs() { //----------------------------------------------------------------------------- // Clean up. //----------------------------------------------------------------------------- -PixelCPEClusterRepair::~PixelCPEClusterRepair() { - for (auto x : thePixelTemp_) - x.destroy(); - for (auto x : thePixelTemp2D_) - x.destroy(); -} +PixelCPEClusterRepair::~PixelCPEClusterRepair() {} std::unique_ptr PixelCPEClusterRepair::createClusterParam(const SiPixelCluster& cl) const { return std::make_unique(cl); diff --git a/RecoLocalTracker/SiPixelRecHits/src/PixelCPEFast.cc b/RecoLocalTracker/SiPixelRecHits/src/PixelCPEFast.cc new file mode 100644 index 0000000000000..0077c0748ca28 --- /dev/null +++ b/RecoLocalTracker/SiPixelRecHits/src/PixelCPEFast.cc @@ -0,0 +1,561 @@ +#include + +#include "CondFormats/SiPixelTransient/interface/SiPixelTemplate.h" +#include "DataFormats/DetId/interface/DetId.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" +#include "Geometry/TrackerGeometryBuilder/interface/RectangularPixelTopology.h" +#include "Geometry/TrackerGeometryBuilder/interface/phase1PixelTopology.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "RecoLocalTracker/SiPixelRecHits/interface/PixelCPEFast.h" + +// Services +// this is needed to get errors from templates + +namespace { + constexpr float micronsToCm = 1.0e-4; +} + +//----------------------------------------------------------------------------- +//! The constructor. +//----------------------------------------------------------------------------- +PixelCPEFast::PixelCPEFast(edm::ParameterSet const& conf, + const MagneticField* mag, + const TrackerGeometry& geom, + const TrackerTopology& ttopo, + const SiPixelLorentzAngle* lorentzAngle, + const SiPixelGenErrorDBObject* genErrorDBObject, + const SiPixelLorentzAngle* lorentzAngleWidth) + : PixelCPEBase(conf, mag, geom, ttopo, lorentzAngle, genErrorDBObject, nullptr, lorentzAngleWidth, 0), + edgeClusterErrorX_(conf.getParameter("EdgeClusterErrorX")), + edgeClusterErrorY_(conf.getParameter("EdgeClusterErrorY")), + useErrorsFromTemplates_(conf.getParameter("UseErrorsFromTemplates")), + truncatePixelCharge_(conf.getParameter("TruncatePixelCharge")) { + // Use errors from templates or from GenError + if (useErrorsFromTemplates_) { + if (!SiPixelGenError::pushfile(*genErrorDBObject_, thePixelGenError_)) + throw cms::Exception("InvalidCalibrationLoaded") + << "ERROR: GenErrors not filled correctly. Check the sqlite file. Using SiPixelTemplateDBObject version " + << (*genErrorDBObject_).version(); + } + + // Rechit errors in case other, more correct, errors are not vailable + // These are constants. Maybe there is a more efficienct way to store them. + xerr_barrel_l1_ = {0.00115, 0.00120, 0.00088}; + xerr_barrel_l1_def_ = 0.01030; + yerr_barrel_l1_ = {0.00375, 0.00230, 0.00250, 0.00250, 0.00230, 0.00230, 0.00210, 0.00210, 0.00240}; + yerr_barrel_l1_def_ = 0.00210; + xerr_barrel_ln_ = {0.00115, 0.00120, 0.00088}; + xerr_barrel_ln_def_ = 0.01030; + yerr_barrel_ln_ = {0.00375, 0.00230, 0.00250, 0.00250, 0.00230, 0.00230, 0.00210, 0.00210, 0.00240}; + yerr_barrel_ln_def_ = 0.00210; + xerr_endcap_ = {0.0020, 0.0020}; + xerr_endcap_def_ = 0.0020; + yerr_endcap_ = {0.00210}; + yerr_endcap_def_ = 0.00075; + + fillParamsForGpu(); + + cpuData_ = { + &commonParamsGPU_, + detParamsGPU_.data(), + &layerGeometry_, + &averageGeometry_, + }; +} + +const pixelCPEforGPU::ParamsOnGPU* PixelCPEFast::getGPUProductAsync(cudaStream_t cudaStream) const { + const auto& data = gpuData_.dataForCurrentDeviceAsync(cudaStream, [this](GPUData& data, cudaStream_t stream) { + // and now copy to device... + cudaCheck(cudaMalloc((void**)&data.paramsOnGPU_h.m_commonParams, sizeof(pixelCPEforGPU::CommonParams))); + cudaCheck(cudaMalloc((void**)&data.paramsOnGPU_h.m_detParams, + this->detParamsGPU_.size() * sizeof(pixelCPEforGPU::DetParams))); + cudaCheck(cudaMalloc((void**)&data.paramsOnGPU_h.m_averageGeometry, sizeof(pixelCPEforGPU::AverageGeometry))); + cudaCheck(cudaMalloc((void**)&data.paramsOnGPU_h.m_layerGeometry, sizeof(pixelCPEforGPU::LayerGeometry))); + cudaCheck(cudaMalloc((void**)&data.paramsOnGPU_d, sizeof(pixelCPEforGPU::ParamsOnGPU))); + + cudaCheck(cudaMemcpyAsync( + data.paramsOnGPU_d, &data.paramsOnGPU_h, sizeof(pixelCPEforGPU::ParamsOnGPU), cudaMemcpyDefault, stream)); + cudaCheck(cudaMemcpyAsync((void*)data.paramsOnGPU_h.m_commonParams, + &this->commonParamsGPU_, + sizeof(pixelCPEforGPU::CommonParams), + cudaMemcpyDefault, + stream)); + cudaCheck(cudaMemcpyAsync((void*)data.paramsOnGPU_h.m_averageGeometry, + &this->averageGeometry_, + sizeof(pixelCPEforGPU::AverageGeometry), + cudaMemcpyDefault, + stream)); + cudaCheck(cudaMemcpyAsync((void*)data.paramsOnGPU_h.m_layerGeometry, + &this->layerGeometry_, + sizeof(pixelCPEforGPU::LayerGeometry), + cudaMemcpyDefault, + stream)); + cudaCheck(cudaMemcpyAsync((void*)data.paramsOnGPU_h.m_detParams, + this->detParamsGPU_.data(), + this->detParamsGPU_.size() * sizeof(pixelCPEforGPU::DetParams), + cudaMemcpyDefault, + stream)); + }); + return data.paramsOnGPU_d; +} + +void PixelCPEFast::fillParamsForGpu() { + commonParamsGPU_.theThicknessB = m_DetParams.front().theThickness; + commonParamsGPU_.theThicknessE = m_DetParams.back().theThickness; + commonParamsGPU_.thePitchX = m_DetParams[0].thePitchX; + commonParamsGPU_.thePitchY = m_DetParams[0].thePitchY; + + LogDebug("PixelCPEFast") << "pitch & thickness " << commonParamsGPU_.thePitchX << ' ' << commonParamsGPU_.thePitchY + << " " << commonParamsGPU_.theThicknessB << ' ' << commonParamsGPU_.theThicknessE; + + // zero average geometry + memset(&averageGeometry_, 0, sizeof(pixelCPEforGPU::AverageGeometry)); + + uint32_t oldLayer = 0; + uint32_t oldLadder = 0; + float rl = 0; + float zl = 0; + float miz = 90, mxz = 0; + float pl = 0; + int nl = 0; + detParamsGPU_.resize(m_DetParams.size()); + for (auto i = 0U; i < m_DetParams.size(); ++i) { + auto& p = m_DetParams[i]; + auto& g = detParamsGPU_[i]; + + assert(p.theDet->index() == int(i)); + assert(commonParamsGPU_.thePitchY == p.thePitchY); + assert(commonParamsGPU_.thePitchX == p.thePitchX); + + g.isBarrel = GeomDetEnumerators::isBarrel(p.thePart); + g.isPosZ = p.theDet->surface().position().z() > 0; + g.layer = ttopo_.layer(p.theDet->geographicalId()); + g.index = i; // better be! + g.rawId = p.theDet->geographicalId(); + assert((g.isBarrel ? commonParamsGPU_.theThicknessB : commonParamsGPU_.theThicknessE) == p.theThickness); + + auto ladder = ttopo_.pxbLadder(p.theDet->geographicalId()); + if (oldLayer != g.layer) { + oldLayer = g.layer; + LogDebug("PixelCPEFast") << "new layer at " << i << (g.isBarrel ? " B " : (g.isPosZ ? " E+ " : " E- ")) + << g.layer << " starting at " << g.rawId << '\n' + << "old layer had " << nl << " ladders"; + nl = 0; + } + if (oldLadder != ladder) { + oldLadder = ladder; + LogDebug("PixelCPEFast") << "new ladder at " << i << (g.isBarrel ? " B " : (g.isPosZ ? " E+ " : " E- ")) + << ladder << " starting at " << g.rawId << '\n' + << "old ladder ave z,r,p mz " << zl / 8.f << " " << rl / 8.f << " " << pl / 8.f << ' ' + << miz << ' ' << mxz; + rl = 0; + zl = 0; + pl = 0; + miz = 90; + mxz = 0; + nl++; + } + + g.shiftX = 0.5f * p.lorentzShiftInCmX; + g.shiftY = 0.5f * p.lorentzShiftInCmY; + g.chargeWidthX = p.lorentzShiftInCmX * p.widthLAFractionX; + g.chargeWidthY = p.lorentzShiftInCmY * p.widthLAFractionY; + + g.x0 = p.theOrigin.x(); + g.y0 = p.theOrigin.y(); + g.z0 = p.theOrigin.z(); + + auto vv = p.theDet->surface().position(); + auto rr = pixelCPEforGPU::Rotation(p.theDet->surface().rotation()); + g.frame = pixelCPEforGPU::Frame(vv.x(), vv.y(), vv.z(), rr); + + zl += vv.z(); + miz = std::min(miz, std::abs(vv.z())); + mxz = std::max(mxz, std::abs(vv.z())); + rl += vv.perp(); + pl += vv.phi(); // (not obvious) + + // errors ..... + ClusterParamGeneric cp; + auto gvx = p.theOrigin.x() + 40.f * commonParamsGPU_.thePitchX; + auto gvy = p.theOrigin.y(); + auto gvz = 1.f / p.theOrigin.z(); + //--- Note that the normalization is not required as only the ratio used + + // calculate angles + cp.cotalpha = gvx * gvz; + cp.cotbeta = gvy * gvz; + + cp.with_track_angle = false; + + auto lape = p.theDet->localAlignmentError(); + if (lape.invalid()) + lape = LocalError(); // zero.... + +#ifdef EDM_ML_DEBUG + auto m = 10000.f; + for (float qclus = 15000; qclus < 35000; qclus += 15000) { + errorFromTemplates(p, cp, qclus); + LogDebug("PixelCPEFast") << i << ' ' << qclus << ' ' << cp.pixmx << ' ' << m * cp.sigmax << ' ' << m * cp.sx1 + << ' ' << m * cp.sx2 << ' ' << m * cp.sigmay << ' ' << m * cp.sy1 << ' ' << m * cp.sy2; + } + LogDebug("PixelCPEFast") << i << ' ' << m * std::sqrt(lape.xx()) << ' ' << m * std::sqrt(lape.yy()); +#endif // EDM_ML_DEBUG + + errorFromTemplates(p, cp, 20000.f); + g.pixmx = std::max(0, cp.pixmx); + g.sx[0] = cp.sigmax; + g.sx[1] = cp.sx1; + g.sx[2] = cp.sx2; + + g.sy[0] = cp.sigmay; + g.sy[1] = cp.sy1; + g.sy[2] = cp.sy2; + + for (int i = 0; i < 3; ++i) { + g.sx[i] = std::sqrt(g.sx[i] * g.sx[i] + lape.xx()); + g.sy[i] = std::sqrt(g.sy[i] * g.sy[i] + lape.yy()); + } + } + + // compute ladder baricenter (only in global z) for the barrel + auto& aveGeom = averageGeometry_; + int il = 0; + for (int im = 0, nm = phase1PixelTopology::numberOfModulesInBarrel; im < nm; ++im) { + auto const& g = detParamsGPU_[im]; + il = im / 8; + assert(il < int(phase1PixelTopology::numberOfLaddersInBarrel)); + auto z = g.frame.z(); + aveGeom.ladderZ[il] += 0.125f * z; + aveGeom.ladderMinZ[il] = std::min(aveGeom.ladderMinZ[il], z); + aveGeom.ladderMaxZ[il] = std::max(aveGeom.ladderMaxZ[il], z); + aveGeom.ladderX[il] += 0.125f * g.frame.x(); + aveGeom.ladderY[il] += 0.125f * g.frame.y(); + aveGeom.ladderR[il] += 0.125f * sqrt(g.frame.x() * g.frame.x() + g.frame.y() * g.frame.y()); + } + assert(il + 1 == int(phase1PixelTopology::numberOfLaddersInBarrel)); + // add half_module and tollerance + constexpr float module_length = 6.7f; + constexpr float module_tolerance = 0.2f; + for (int il = 0, nl = phase1PixelTopology::numberOfLaddersInBarrel; il < nl; ++il) { + aveGeom.ladderMinZ[il] -= (0.5f * module_length - module_tolerance); + aveGeom.ladderMaxZ[il] += (0.5f * module_length - module_tolerance); + } + + // compute "max z" for first layer in endcap (should we restrict to the outermost ring?) + for (auto im = phase1PixelTopology::layerStart[4]; im < phase1PixelTopology::layerStart[5]; ++im) { + auto const& g = detParamsGPU_[im]; + aveGeom.endCapZ[0] = std::max(aveGeom.endCapZ[0], g.frame.z()); + } + for (auto im = phase1PixelTopology::layerStart[7]; im < phase1PixelTopology::layerStart[8]; ++im) { + auto const& g = detParamsGPU_[im]; + aveGeom.endCapZ[1] = std::min(aveGeom.endCapZ[1], g.frame.z()); + } + // correct for outer ring being closer + aveGeom.endCapZ[0] -= 1.5f; + aveGeom.endCapZ[1] += 1.5f; + +#ifdef EDM_ML_DEBUG + for (int jl = 0, nl = phase1PixelTopology::numberOfLaddersInBarrel; jl < nl; ++jl) { + LogDebug("PixelCPEFast") << jl << ':' << aveGeom.ladderR[jl] << '/' + << std::sqrt(aveGeom.ladderX[jl] * aveGeom.ladderX[jl] + + aveGeom.ladderY[jl] * aveGeom.ladderY[jl]) + << ',' << aveGeom.ladderZ[jl] << ',' << aveGeom.ladderMinZ[jl] << ',' + << aveGeom.ladderMaxZ[jl] << '\n'; + } + LogDebug("PixelCPEFast") << aveGeom.endCapZ[0] << ' ' << aveGeom.endCapZ[1]; +#endif // EDM_ML_DEBUG + + // fill Layer and ladders geometry + memcpy(layerGeometry_.layerStart, phase1PixelTopology::layerStart, sizeof(phase1PixelTopology::layerStart)); + memcpy(layerGeometry_.layer, phase1PixelTopology::layer.data(), phase1PixelTopology::layer.size()); +} + +PixelCPEFast::GPUData::~GPUData() { + if (paramsOnGPU_d != nullptr) { + cudaFree((void*)paramsOnGPU_h.m_commonParams); + cudaFree((void*)paramsOnGPU_h.m_detParams); + cudaFree((void*)paramsOnGPU_h.m_averageGeometry); + cudaFree((void*)paramsOnGPU_h.m_layerGeometry); + cudaFree(paramsOnGPU_d); + } +} + +std::unique_ptr PixelCPEFast::createClusterParam(const SiPixelCluster& cl) const { + return std::make_unique(cl); +} + +void PixelCPEFast::errorFromTemplates(DetParam const& theDetParam, + ClusterParamGeneric& theClusterParam, + float qclus) const { + float locBz = theDetParam.bz; + float locBx = theDetParam.bx; + LogDebug("PixelCPEFast") << "PixelCPEFast::localPosition(...) : locBz = " << locBz; + + theClusterParam.pixmx = std::numeric_limits::max(); // max pixel charge for truncation of 2-D cluster + + theClusterParam.sigmay = -999.9; // CPE Generic y-error for multi-pixel cluster + theClusterParam.sigmax = -999.9; // CPE Generic x-error for multi-pixel cluster + theClusterParam.sy1 = -999.9; // CPE Generic y-error for single single-pixel + theClusterParam.sy2 = -999.9; // CPE Generic y-error for single double-pixel cluster + theClusterParam.sx1 = -999.9; // CPE Generic x-error for single single-pixel cluster + theClusterParam.sx2 = -999.9; // CPE Generic x-error for single double-pixel cluster + + float dummy; + + SiPixelGenError gtempl(thePixelGenError_); + int gtemplID = theDetParam.detTemplateId; + + theClusterParam.qBin_ = gtempl.qbin(gtemplID, + theClusterParam.cotalpha, + theClusterParam.cotbeta, + locBz, + locBx, + qclus, + false, + theClusterParam.pixmx, + theClusterParam.sigmay, + dummy, + theClusterParam.sigmax, + dummy, + theClusterParam.sy1, + dummy, + theClusterParam.sy2, + dummy, + theClusterParam.sx1, + dummy, + theClusterParam.sx2, + dummy); + + theClusterParam.sigmax = theClusterParam.sigmax * micronsToCm; + theClusterParam.sx1 = theClusterParam.sx1 * micronsToCm; + theClusterParam.sx2 = theClusterParam.sx2 * micronsToCm; + + theClusterParam.sigmay = theClusterParam.sigmay * micronsToCm; + theClusterParam.sy1 = theClusterParam.sy1 * micronsToCm; + theClusterParam.sy2 = theClusterParam.sy2 * micronsToCm; +} + +//----------------------------------------------------------------------------- +//! Hit position in the local frame (in cm). Unlike other CPE's, this +//! one converts everything from the measurement frame (in channel numbers) +//! into the local frame (in centimeters). +//----------------------------------------------------------------------------- +LocalPoint PixelCPEFast::localPosition(DetParam const& theDetParam, ClusterParam& theClusterParamBase) const { + ClusterParamGeneric& theClusterParam = static_cast(theClusterParamBase); + + assert(!theClusterParam.with_track_angle); + + if (useErrorsFromTemplates_) { + errorFromTemplates(theDetParam, theClusterParam, theClusterParam.theCluster->charge()); + } else { + theClusterParam.qBin_ = 0; + } + + int q_f_X; //!< Q of the first pixel in X + int q_l_X; //!< Q of the last pixel in X + int q_f_Y; //!< Q of the first pixel in Y + int q_l_Y; //!< Q of the last pixel in Y + collect_edge_charges(theClusterParam, q_f_X, q_l_X, q_f_Y, q_l_Y, useErrorsFromTemplates_ && truncatePixelCharge_); + + // do GPU like ... + pixelCPEforGPU::ClusParams cp; + + cp.minRow[0] = theClusterParam.theCluster->minPixelRow(); + cp.maxRow[0] = theClusterParam.theCluster->maxPixelRow(); + cp.minCol[0] = theClusterParam.theCluster->minPixelCol(); + cp.maxCol[0] = theClusterParam.theCluster->maxPixelCol(); + + cp.q_f_X[0] = q_f_X; + cp.q_l_X[0] = q_l_X; + cp.q_f_Y[0] = q_f_Y; + cp.q_l_Y[0] = q_l_Y; + + auto ind = theDetParam.theDet->index(); + pixelCPEforGPU::position(commonParamsGPU_, detParamsGPU_[ind], cp, 0); + auto xPos = cp.xpos[0]; + auto yPos = cp.ypos[0]; + + LogDebug("PixelCPEFast") << " in PixelCPEFast:localPosition - pos = " << xPos << " " << yPos << " size " + << cp.maxRow[0] - cp.minRow[0] << ' ' << cp.maxCol[0] - cp.minCol[0]; + + //--- Now put the two together + LocalPoint pos_in_local(xPos, yPos); + return pos_in_local; +} + +//----------------------------------------------------------------------------- +//! Collect the edge charges in x and y, in a single pass over the pixel vector. +//! Calculate charge in the first and last pixel projected in x and y +//! and the inner cluster charge, projected in x and y. +//----------------------------------------------------------------------------- +void PixelCPEFast::collect_edge_charges(ClusterParam& theClusterParamBase, //!< input, the cluster + int& q_f_X, //!< output, Q first in X + int& q_l_X, //!< output, Q last in X + int& q_f_Y, //!< output, Q first in Y + int& q_l_Y, //!< output, Q last in Y + bool truncate) { + ClusterParamGeneric& theClusterParam = static_cast(theClusterParamBase); + + // Initialize return variables. + q_f_X = q_l_X = 0; + q_f_Y = q_l_Y = 0; + + // Obtain boundaries in index units + int xmin = theClusterParam.theCluster->minPixelRow(); + int xmax = theClusterParam.theCluster->maxPixelRow(); + int ymin = theClusterParam.theCluster->minPixelCol(); + int ymax = theClusterParam.theCluster->maxPixelCol(); + + // Iterate over the pixels. + int isize = theClusterParam.theCluster->size(); + for (int i = 0; i != isize; ++i) { + auto const& pixel = theClusterParam.theCluster->pixel(i); + // ggiurgiu@fnal.gov: add pixel charge truncation + int pix_adc = pixel.adc; + if (truncate) + pix_adc = std::min(pix_adc, theClusterParam.pixmx); + + // + // X projection + if (pixel.x == xmin) + q_f_X += pix_adc; + if (pixel.x == xmax) + q_l_X += pix_adc; + // + // Y projection + if (pixel.y == ymin) + q_f_Y += pix_adc; + if (pixel.y == ymax) + q_l_Y += pix_adc; + } +} + +//============== INFLATED ERROR AND ERRORS FROM DB BELOW ================ + +//------------------------------------------------------------------------- +// Hit error in the local frame +//------------------------------------------------------------------------- +LocalError PixelCPEFast::localError(DetParam const& theDetParam, ClusterParam& theClusterParamBase) const { + ClusterParamGeneric& theClusterParam = static_cast(theClusterParamBase); + + // Default errors are the maximum error used for edge clusters. + // These are determined by looking at residuals for edge clusters + float xerr = edgeClusterErrorX_ * micronsToCm; + float yerr = edgeClusterErrorY_ * micronsToCm; + + // Find if cluster is at the module edge. + int maxPixelCol = theClusterParam.theCluster->maxPixelCol(); + int maxPixelRow = theClusterParam.theCluster->maxPixelRow(); + int minPixelCol = theClusterParam.theCluster->minPixelCol(); + int minPixelRow = theClusterParam.theCluster->minPixelRow(); + + bool edgex = phase1PixelTopology::isEdgeX(minPixelRow) | phase1PixelTopology::isEdgeX(maxPixelRow); + bool edgey = phase1PixelTopology::isEdgeY(minPixelCol) | phase1PixelTopology::isEdgeY(maxPixelCol); + + unsigned int sizex = theClusterParam.theCluster->sizeX(); + unsigned int sizey = theClusterParam.theCluster->sizeY(); + + // Find if cluster contains double (big) pixels. + bool bigInX = theDetParam.theRecTopol->containsBigPixelInX(minPixelRow, maxPixelRow); + bool bigInY = theDetParam.theRecTopol->containsBigPixelInY(minPixelCol, maxPixelCol); + + if (useErrorsFromTemplates_) { + // + // Use template errors + + if (!edgex) { // Only use this for non-edge clusters + if (sizex == 1) { + if (!bigInX) { + xerr = theClusterParam.sx1; + } else { + xerr = theClusterParam.sx2; + } + } else { + xerr = theClusterParam.sigmax; + } + } + + if (!edgey) { // Only use for non-edge clusters + if (sizey == 1) { + if (!bigInY) { + yerr = theClusterParam.sy1; + } else { + yerr = theClusterParam.sy2; + } + } else { + yerr = theClusterParam.sigmay; + } + } + + } else { // simple errors + + // This are the simple errors, hardcoded in the code + LogDebug("PixelCPEFast") << "Track angles are not known.\n" + << "Default angle estimation which assumes track from PV (0,0,0) does not work."; + + if (GeomDetEnumerators::isTrackerPixel(theDetParam.thePart)) { + if (GeomDetEnumerators::isBarrel(theDetParam.thePart)) { + DetId id = (theDetParam.theDet->geographicalId()); + int layer = ttopo_.layer(id); + if (layer == 1) { + if (!edgex) { + if (sizex <= xerr_barrel_l1_.size()) + xerr = xerr_barrel_l1_[sizex - 1]; + else + xerr = xerr_barrel_l1_def_; + } + + if (!edgey) { + if (sizey <= yerr_barrel_l1_.size()) + yerr = yerr_barrel_l1_[sizey - 1]; + else + yerr = yerr_barrel_l1_def_; + } + } else { // layer 2,3 + if (!edgex) { + if (sizex <= xerr_barrel_ln_.size()) + xerr = xerr_barrel_ln_[sizex - 1]; + else + xerr = xerr_barrel_ln_def_; + } + + if (!edgey) { + if (sizey <= yerr_barrel_ln_.size()) + yerr = yerr_barrel_ln_[sizey - 1]; + else + yerr = yerr_barrel_ln_def_; + } + } + + } else { // EndCap + + if (!edgex) { + if (sizex <= xerr_endcap_.size()) + xerr = xerr_endcap_[sizex - 1]; + else + xerr = xerr_endcap_def_; + } + + if (!edgey) { + if (sizey <= yerr_endcap_.size()) + yerr = yerr_endcap_[sizey - 1]; + else + yerr = yerr_endcap_def_; + } + } // end endcap + } + + } // end + + LogDebug("PixelCPEFast") << " errors " << xerr << " " << yerr; + + auto xerr_sq = xerr * xerr; + auto yerr_sq = yerr * yerr; + + return LocalError(xerr_sq, 0, yerr_sq); +} + +void PixelCPEFast::fillPSetDescription(edm::ParameterSetDescription& desc) {} diff --git a/RecoLocalTracker/SiPixelRecHits/src/PixelCPEGeneric.cc b/RecoLocalTracker/SiPixelRecHits/src/PixelCPEGeneric.cc index db5ed99ef8589..791e3abd48c9a 100644 --- a/RecoLocalTracker/SiPixelRecHits/src/PixelCPEGeneric.cc +++ b/RecoLocalTracker/SiPixelRecHits/src/PixelCPEGeneric.cc @@ -245,11 +245,11 @@ LocalPoint PixelCPEGeneric::localPosition(DetParam const& theDetParam, ClusterPa theClusterParam.qBin_ = 0; } - int Q_f_X; //!< Q of the first pixel in X - int Q_l_X; //!< Q of the last pixel in X - int Q_f_Y; //!< Q of the first pixel in Y - int Q_l_Y; //!< Q of the last pixel in Y - collect_edge_charges(theClusterParam, Q_f_X, Q_l_X, Q_f_Y, Q_l_Y); + int q_f_X; //!< Q of the first pixel in X + int q_l_X; //!< Q of the last pixel in X + int q_f_Y; //!< Q of the first pixel in Y + int q_l_Y; //!< Q of the last pixel in Y + collect_edge_charges(theClusterParam, q_f_X, q_l_X, q_f_Y, q_l_Y); //--- Find the inner widths along X and Y in one shot. We //--- compute the upper right corner of the inner pixels @@ -306,8 +306,8 @@ LocalPoint PixelCPEGeneric::localPosition(DetParam const& theDetParam, ClusterPa float xPos = SiPixelUtils::generic_position_formula( theClusterParam.theCluster->sizeX(), - Q_f_X, - Q_l_X, + q_f_X, + q_l_X, local_URcorn_LLpix.x(), local_LLcorn_URpix.x(), chargeWidthX, // lorentz shift in cm @@ -330,8 +330,8 @@ LocalPoint PixelCPEGeneric::localPosition(DetParam const& theDetParam, ClusterPa float yPos = SiPixelUtils::generic_position_formula( theClusterParam.theCluster->sizeY(), - Q_f_Y, - Q_l_Y, + q_f_Y, + q_l_Y, local_URcorn_LLpix.y(), local_LLcorn_URpix.y(), chargeWidthY, // lorentz shift in cm @@ -398,16 +398,16 @@ LocalPoint PixelCPEGeneric::localPosition(DetParam const& theDetParam, ClusterPa //! and the inner cluster charge, projected in x and y. //----------------------------------------------------------------------------- void PixelCPEGeneric::collect_edge_charges(ClusterParam& theClusterParamBase, //!< input, the cluster - int& Q_f_X, //!< output, Q first in X - int& Q_l_X, //!< output, Q last in X - int& Q_f_Y, //!< output, Q first in Y - int& Q_l_Y //!< output, Q last in Y + int& q_f_X, //!< output, Q first in X + int& q_l_X, //!< output, Q last in X + int& q_f_Y, //!< output, Q first in Y + int& q_l_Y //!< output, Q last in Y ) const { ClusterParamGeneric& theClusterParam = static_cast(theClusterParamBase); // Initialize return variables. - Q_f_X = Q_l_X = 0.0; - Q_f_Y = Q_l_Y = 0.0; + q_f_X = q_l_X = 0.0; + q_f_Y = q_l_Y = 0.0; // Obtain boundaries in index units int xmin = theClusterParam.theCluster->minPixelRow(); @@ -427,15 +427,15 @@ void PixelCPEGeneric::collect_edge_charges(ClusterParam& theClusterParamBase, / // // X projection if (pixel.x == xmin) - Q_f_X += pix_adc; + q_f_X += pix_adc; if (pixel.x == xmax) - Q_l_X += pix_adc; + q_l_X += pix_adc; // // Y projection if (pixel.y == ymin) - Q_f_Y += pix_adc; + q_f_Y += pix_adc; if (pixel.y == ymax) - Q_l_Y += pix_adc; + q_l_Y += pix_adc; } return; @@ -494,42 +494,40 @@ LocalError PixelCPEGeneric::localError(DetParam const& theDetParam, ClusterParam bool useTempErrors = UseErrorsFromTemplates_ && (!NoTemplateErrorsWhenNoTrkAngles_ || theClusterParam.with_track_angle); - if - LIKELY(useTempErrors) { - // - // Use template errors - - if (!edgex) { // Only use this for non-edge clusters - if (sizex == 1) { - if (!bigInX) { - xerr = theClusterParam.sx1; - } else { - xerr = theClusterParam.sx2; - } + if LIKELY (useTempErrors) { + // + // Use template errors + + if (!edgex) { // Only use this for non-edge clusters + if (sizex == 1) { + if (!bigInX) { + xerr = theClusterParam.sx1; } else { - xerr = theClusterParam.sigmax; + xerr = theClusterParam.sx2; } + } else { + xerr = theClusterParam.sigmax; } + } - if (!edgey) { // Only use for non-edge clusters - if (sizey == 1) { - if (!bigInY) { - yerr = theClusterParam.sy1; - } else { - yerr = theClusterParam.sy2; - } + if (!edgey) { // Only use for non-edge clusters + if (sizey == 1) { + if (!bigInY) { + yerr = theClusterParam.sy1; } else { - yerr = theClusterParam.sigmay; + yerr = theClusterParam.sy2; } + } else { + yerr = theClusterParam.sigmay; } + } - if (localPrint) { - cout << " in if " << edgex << " " << edgey << " " << sizex << " " << sizey << endl; - cout << " errors " << xerr << " " << yerr << " " << theClusterParam.sx1 << " " << theClusterParam.sx2 << " " - << theClusterParam.sigmax << endl; //dk - } + if (localPrint) { + cout << " in if " << edgex << " " << edgey << " " << sizex << " " << sizey << endl; + cout << " errors " << xerr << " " << yerr << " " << theClusterParam.sx1 << " " << theClusterParam.sx2 << " " + << theClusterParam.sigmax << endl; //dk } - else { // simple errors + } else { // simple errors // This are the simple errors, hardcoded in the code //cout << "Track angles are not known " << endl; diff --git a/RecoLocalTracker/SiPixelRecHits/src/PixelCPETemplateReco.cc b/RecoLocalTracker/SiPixelRecHits/src/PixelCPETemplateReco.cc index 3ba388e6042b7..9d90a41e606ad 100644 --- a/RecoLocalTracker/SiPixelRecHits/src/PixelCPETemplateReco.cc +++ b/RecoLocalTracker/SiPixelRecHits/src/PixelCPETemplateReco.cc @@ -94,10 +94,7 @@ PixelCPETemplateReco::PixelCPETemplateReco(edm::ParameterSet const& conf, //----------------------------------------------------------------------------- // Clean up. //----------------------------------------------------------------------------- -PixelCPETemplateReco::~PixelCPETemplateReco() { - for (auto x : thePixelTemp_) - x.destroy(); -} +PixelCPETemplateReco::~PixelCPETemplateReco() {} std::unique_ptr PixelCPETemplateReco::createClusterParam(const SiPixelCluster& cl) const { return std::make_unique(cl); diff --git a/RecoLocalTracker/SiStripClusterizer/plugins/SiStripClusterizer.cc b/RecoLocalTracker/SiStripClusterizer/plugins/SiStripClusterizer.cc index afdf791b648cc..200085bbfafba 100644 --- a/RecoLocalTracker/SiStripClusterizer/plugins/SiStripClusterizer.cc +++ b/RecoLocalTracker/SiStripClusterizer/plugins/SiStripClusterizer.cc @@ -3,6 +3,7 @@ #include "RecoLocalTracker/SiStripClusterizer/interface/StripClusterizerAlgorithmFactory.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Utilities/interface/transform.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" SiStripClusterizer::SiStripClusterizer(const edm::ParameterSet& conf) : inputTags(conf.getParameter>("DigiProducersList")), diff --git a/RecoLocalTracker/SiStripClusterizer/test/StripByStripTestDriver.cc b/RecoLocalTracker/SiStripClusterizer/test/StripByStripTestDriver.cc index 3646ad5542495..41ceffb4b84e8 100644 --- a/RecoLocalTracker/SiStripClusterizer/test/StripByStripTestDriver.cc +++ b/RecoLocalTracker/SiStripClusterizer/test/StripByStripTestDriver.cc @@ -3,6 +3,7 @@ #include "DataFormats/SiStripDigi/interface/SiStripDigi.h" #include "DataFormats/SiStripCluster/interface/SiStripCluster.h" #include "FWCore/Framework/interface/Event.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" StripByStripTestDriver::StripByStripTestDriver(const edm::ParameterSet& conf) : inputTag(conf.getParameter("DigiProducer")), diff --git a/RecoLocalTracker/SiStripRecHitConverter/plugins/SiStripRecHitConverter.cc b/RecoLocalTracker/SiStripRecHitConverter/plugins/SiStripRecHitConverter.cc index ca23f83f1c852..53de3d9492ba8 100644 --- a/RecoLocalTracker/SiStripRecHitConverter/plugins/SiStripRecHitConverter.cc +++ b/RecoLocalTracker/SiStripRecHitConverter/plugins/SiStripRecHitConverter.cc @@ -3,6 +3,7 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" SiStripRecHitConverter::SiStripRecHitConverter(edm::ParameterSet const& conf) : recHitConverterAlgorithm(conf, consumesCollector()), diff --git a/RecoLocalTracker/SiStripZeroSuppression/python/SiStripZeroSuppression_cfi.py b/RecoLocalTracker/SiStripZeroSuppression/python/SiStripZeroSuppression_cfi.py index b27178046a28f..365e7dc7dace3 100644 --- a/RecoLocalTracker/SiStripZeroSuppression/python/SiStripZeroSuppression_cfi.py +++ b/RecoLocalTracker/SiStripZeroSuppression/python/SiStripZeroSuppression_cfi.py @@ -24,7 +24,7 @@ # This part has to be clean up when they will be officially removed from the entire flow from Configuration.Eras.Modifier_phase2_tracker_cff import phase2_tracker phase2_tracker.toModify(siStripZeroSuppression, # FIXME - RawDigiProducersList = cms.VInputTag( cms.InputTag('simSiStripDigis','VirginRaw'), - cms.InputTag('simSiStripDigis','ProcessedRaw'), - cms.InputTag('simSiStripDigis','ScopeMode')) + RawDigiProducersList = [ 'simSiStripDigis:VirginRaw', + 'simSiStripDigis:ProcessedRaw', + 'simSiStripDigis:ScopeMode' ] ) diff --git a/RecoLocalTracker/SubCollectionProducers/interface/PixelClusterSelectorTopBottom.h b/RecoLocalTracker/SubCollectionProducers/interface/PixelClusterSelectorTopBottom.h index 09b8921740fd7..4b975a51bc45e 100644 --- a/RecoLocalTracker/SubCollectionProducers/interface/PixelClusterSelectorTopBottom.h +++ b/RecoLocalTracker/SubCollectionProducers/interface/PixelClusterSelectorTopBottom.h @@ -13,8 +13,6 @@ #include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" - #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" @@ -28,7 +26,8 @@ class PixelClusterSelectorTopBottom : public edm::global::EDProducer<> { public: explicit PixelClusterSelectorTopBottom(const edm::ParameterSet& cfg) - : token_(consumes(cfg.getParameter("label"))), + : tTrackerGeom_(esConsumes()), + token_(consumes(cfg.getParameter("label"))), y_(cfg.getParameter("y")) { produces(); } @@ -36,6 +35,7 @@ class PixelClusterSelectorTopBottom : public edm::global::EDProducer<> { void produce(edm::StreamID, edm::Event& event, const edm::EventSetup& setup) const override; private: + edm::ESGetToken const tTrackerGeom_; edm::EDGetTokenT token_; double y_; }; diff --git a/RecoLocalTracker/SubCollectionProducers/interface/StripClusterSelectorTopBottom.h b/RecoLocalTracker/SubCollectionProducers/interface/StripClusterSelectorTopBottom.h index b47abf504dfc4..dc50ef3d8ee41 100644 --- a/RecoLocalTracker/SubCollectionProducers/interface/StripClusterSelectorTopBottom.h +++ b/RecoLocalTracker/SubCollectionProducers/interface/StripClusterSelectorTopBottom.h @@ -13,7 +13,6 @@ #include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Framework/interface/Event.h" #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -29,7 +28,8 @@ class StripClusterSelectorTopBottom : public edm::global::EDProducer<> { public: explicit StripClusterSelectorTopBottom(const edm::ParameterSet& cfg) - : token_(consumes>(cfg.getParameter("label"))), + : tTrackerGeom_(esConsumes()), + token_(consumes>(cfg.getParameter("label"))), y_(cfg.getParameter("y")) { produces>(); } @@ -37,6 +37,7 @@ class StripClusterSelectorTopBottom : public edm::global::EDProducer<> { void produce(edm::StreamID, edm::Event& event, const edm::EventSetup& setup) const override; private: + edm::ESGetToken const tTrackerGeom_; edm::EDGetTokenT> token_; double y_; }; diff --git a/RecoLocalTracker/SubCollectionProducers/src/ClusterChargeMasker.cc b/RecoLocalTracker/SubCollectionProducers/src/ClusterChargeMasker.cc index 95de428b04218..b452db9567069 100644 --- a/RecoLocalTracker/SubCollectionProducers/src/ClusterChargeMasker.cc +++ b/RecoLocalTracker/SubCollectionProducers/src/ClusterChargeMasker.cc @@ -2,6 +2,7 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/SiStripCluster/interface/SiStripCluster.h" #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" diff --git a/RecoLocalTracker/SubCollectionProducers/src/HITrackClusterRemover.cc b/RecoLocalTracker/SubCollectionProducers/src/HITrackClusterRemover.cc index 9b965a27e53f3..76abb063a1d9c 100644 --- a/RecoLocalTracker/SubCollectionProducers/src/HITrackClusterRemover.cc +++ b/RecoLocalTracker/SubCollectionProducers/src/HITrackClusterRemover.cc @@ -1,7 +1,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" @@ -46,6 +45,7 @@ class HITrackClusterRemover : public edm::stream::EDProducer<> { void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override; private: + edm::ESGetToken const tTrackerGeom_; struct ParamBlock { ParamBlock() : isSet_(false), usesCharge_(false) {} ParamBlock(const edm::ParameterSet &iConfig) @@ -143,7 +143,8 @@ void HITrackClusterRemover::readPSet( } HITrackClusterRemover::HITrackClusterRemover(const ParameterSet &iConfig) - : doTracks_(iConfig.exists("trajectories")), + : tTrackerGeom_(esConsumes()), + doTracks_(iConfig.exists("trajectories")), doStrip_(iConfig.existsAs("doStrip") ? iConfig.getParameter("doStrip") : true), doPixel_(iConfig.existsAs("doPixel") ? iConfig.getParameter("doPixel") : true), mergeOld_(iConfig.exists("oldClusterRemovalInfo")), @@ -410,8 +411,7 @@ void HITrackClusterRemover::process(const TrackingRecHit *hit, unsigned char chi void HITrackClusterRemover::produce(Event &iEvent, const EventSetup &iSetup) { ProductID pixelOldProdID, stripOldProdID; - edm::ESHandle tgh; - iSetup.get().get(tgh); + const auto &tgh = &iSetup.getData(tTrackerGeom_); Handle > pixelClusters; if (doPixel_) { @@ -525,7 +525,7 @@ void HITrackClusterRemover::produce(Event &iEvent, const EventSetup &iSetup) { auto hit = *(hb + h); if (!hit->isValid()) continue; - process(hit, chi2sX5[h], tgh.product()); + process(hit, chi2sX5[h], tgh); } } } diff --git a/RecoLocalTracker/SubCollectionProducers/src/HLTTrackClusterRemoverNew.cc b/RecoLocalTracker/SubCollectionProducers/src/HLTTrackClusterRemoverNew.cc index a5f025fb7e833..3d46e5f4660ce 100644 --- a/RecoLocalTracker/SubCollectionProducers/src/HLTTrackClusterRemoverNew.cc +++ b/RecoLocalTracker/SubCollectionProducers/src/HLTTrackClusterRemoverNew.cc @@ -1,7 +1,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" @@ -43,6 +42,7 @@ class HLTTrackClusterRemoverNew final : public edm::stream::EDProducer<> { void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override; private: + edm::ESGetToken const tTrackerGeom_; struct ParamBlock { ParamBlock() : isSet_(false), usesCharge_(false) {} ParamBlock(const edm::ParameterSet &iConfig) @@ -132,7 +132,8 @@ void HLTTrackClusterRemoverNew::readPSet( } HLTTrackClusterRemoverNew::HLTTrackClusterRemoverNew(const ParameterSet &iConfig) - : doTracks_(iConfig.exists("trajectories")), + : tTrackerGeom_(esConsumes()), + doTracks_(iConfig.exists("trajectories")), doStrip_(iConfig.existsAs("doStrip") ? iConfig.getParameter("doStrip") : true), doPixel_(iConfig.existsAs("doPixel") ? iConfig.getParameter("doPixel") : true), mergeOld_(false), @@ -364,8 +365,7 @@ void HLTTrackClusterRemoverNew::process(const TrackingRecHit *hit, float chi2, c void HLTTrackClusterRemoverNew::produce(Event &iEvent, const EventSetup &iSetup) { ProductID pixelOldProdID, stripOldProdID; - edm::ESHandle tgh; - iSetup.get().get(tgh); + const auto &tgh = &iSetup.getData(tTrackerGeom_); edm::Handle > pixelClusters; if (doPixel_) { @@ -411,7 +411,7 @@ void HLTTrackClusterRemoverNew::produce(Event &iEvent, const EventSetup &iSetup) if (!hit->isValid()) continue; // std::cout<<"process hit"<estimate(), tgh.product()); + process(hit, itm->estimate(), tgh); } } diff --git a/RecoLocalTracker/SubCollectionProducers/src/JetCoreClusterSplitter.cc b/RecoLocalTracker/SubCollectionProducers/src/JetCoreClusterSplitter.cc index b6a69cae8037f..258f57e3cdee3 100644 --- a/RecoLocalTracker/SubCollectionProducers/src/JetCoreClusterSplitter.cc +++ b/RecoLocalTracker/SubCollectionProducers/src/JetCoreClusterSplitter.cc @@ -46,8 +46,11 @@ class JetCoreClusterSplitter : public edm::stream::EDProducer<> { std::multimap secondDistDiffScore(const std::vector>& distanceMap); std::multimap secondDistScore(const std::vector>& distanceMap); std::multimap distScore(const std::vector>& distanceMap); + + edm::ESGetToken const tTrackingGeom_; + edm::ESGetToken const tCPE_; + bool verbose; - std::string pixelCPE_; double ptMin_; double deltaR_; double chargeFracMin_; @@ -62,8 +65,9 @@ class JetCoreClusterSplitter : public edm::stream::EDProducer<> { }; JetCoreClusterSplitter::JetCoreClusterSplitter(const edm::ParameterSet& iConfig) - : verbose(iConfig.getParameter("verbose")), - pixelCPE_(iConfig.getParameter("pixelCPE")), + : tTrackingGeom_(esConsumes()), + tCPE_(esConsumes(edm::ESInputTag("", iConfig.getParameter("pixelCPE")))), + verbose(iConfig.getParameter("verbose")), ptMin_(iConfig.getParameter("ptMin")), deltaR_(iConfig.getParameter("deltaRmax")), chargeFracMin_(iConfig.getParameter("chargeFractionMin")), @@ -87,8 +91,7 @@ bool SortPixels(const SiPixelCluster::Pixel& i, const SiPixelCluster::Pixel& j) void JetCoreClusterSplitter::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { using namespace edm; - edm::ESHandle geometry; - iSetup.get().get(geometry); + const auto& geometry = &iSetup.getData(tTrackingGeom_); Handle> inputPixelClusters; iEvent.getByToken(pixelClusters_, inputPixelClusters); @@ -100,11 +103,7 @@ void JetCoreClusterSplitter::produce(edm::Event& iEvent, const edm::EventSetup& Handle> cores; iEvent.getByToken(cores_, cores); - edm::ESHandle pe; - const PixelClusterParameterEstimator* pp; - iSetup.get().get(pixelCPE_, pe); - pp = pe.product(); - + const PixelClusterParameterEstimator* pp = &iSetup.getData(tCPE_); auto output = std::make_unique>(); edmNew::DetSetVector::const_iterator detIt = inputPixelClusters->begin(); diff --git a/RecoLocalTracker/SubCollectionProducers/src/PixelClusterSelectorTopBottom.cc b/RecoLocalTracker/SubCollectionProducers/src/PixelClusterSelectorTopBottom.cc index ddff02e19af6c..feac4b993c8cf 100644 --- a/RecoLocalTracker/SubCollectionProducers/src/PixelClusterSelectorTopBottom.cc +++ b/RecoLocalTracker/SubCollectionProducers/src/PixelClusterSelectorTopBottom.cc @@ -5,9 +5,7 @@ void PixelClusterSelectorTopBottom::produce(edm::StreamID, edm::Event& event, co edm::Handle input; event.getByToken(token_, input); - edm::ESHandle geom; - setup.get().get(geom); - const TrackerGeometry& theTracker(*geom); + const TrackerGeometry& theTracker = setup.getData(tTrackerGeom_); auto output = std::make_unique(); diff --git a/RecoLocalTracker/SubCollectionProducers/src/SeedClusterRemover.cc b/RecoLocalTracker/SubCollectionProducers/src/SeedClusterRemover.cc index caa006c2012ce..478358b1b4d75 100644 --- a/RecoLocalTracker/SubCollectionProducers/src/SeedClusterRemover.cc +++ b/RecoLocalTracker/SubCollectionProducers/src/SeedClusterRemover.cc @@ -1,7 +1,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" @@ -39,6 +38,7 @@ class SeedClusterRemover : public edm::stream::EDProducer<> { void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override; private: + edm::ESGetToken const tTrackerGeom_; struct ParamBlock { ParamBlock() : isSet_(false), usesCharge_(false) {} ParamBlock(const edm::ParameterSet &iConfig) @@ -111,7 +111,8 @@ void SeedClusterRemover::readPSet( } SeedClusterRemover::SeedClusterRemover(const ParameterSet &iConfig) - : doStrip_(iConfig.existsAs("doStrip") ? iConfig.getParameter("doStrip") : true), + : tTrackerGeom_(esConsumes()), + doStrip_(iConfig.existsAs("doStrip") ? iConfig.getParameter("doStrip") : true), doPixel_(iConfig.existsAs("doPixel") ? iConfig.getParameter("doPixel") : true), mergeOld_(iConfig.exists("oldClusterRemovalInfo")) { fill(pblocks_, pblocks_ + NumberOfParamBlocks, ParamBlock()); @@ -235,8 +236,7 @@ void SeedClusterRemover::process(const TrackingRecHit *hit, float chi2, const Tr } void SeedClusterRemover::produce(Event &iEvent, const EventSetup &iSetup) { - edm::ESHandle tgh; - iSetup.get().get("", tgh); //is it correct to use "" ? + const auto &tgh = &iSetup.getData(tTrackerGeom_); Handle > pixelClusters; if (doPixel_) { @@ -283,7 +283,7 @@ void SeedClusterRemover::produce(Event &iEvent, const EventSetup &iSetup) { for (auto const &hit : seed.recHits()) { if (!hit.isValid()) continue; - process(&hit, 0., tgh.product()); + process(&hit, 0., tgh); } } diff --git a/RecoLocalTracker/SubCollectionProducers/src/SeedClusterRemoverPhase2.cc b/RecoLocalTracker/SubCollectionProducers/src/SeedClusterRemoverPhase2.cc index 24df700d80ed4..aa1bf43ddb213 100644 --- a/RecoLocalTracker/SubCollectionProducers/src/SeedClusterRemoverPhase2.cc +++ b/RecoLocalTracker/SubCollectionProducers/src/SeedClusterRemoverPhase2.cc @@ -1,7 +1,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" @@ -38,6 +37,7 @@ class SeedClusterRemoverPhase2 : public edm::stream::EDProducer<> { void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override; private: + edm::ESGetToken const tTrackerGeom_; bool doOuterTracker_, doPixel_; bool mergeOld_; typedef edm::ContainerMask > PixelMaskContainer; @@ -61,7 +61,8 @@ using namespace std; using namespace edm; SeedClusterRemoverPhase2::SeedClusterRemoverPhase2(const ParameterSet &iConfig) - : doOuterTracker_(iConfig.existsAs("doOuterTracker") ? iConfig.getParameter("doOuterTracker") : true), + : tTrackerGeom_(esConsumes()), + doOuterTracker_(iConfig.existsAs("doOuterTracker") ? iConfig.getParameter("doOuterTracker") : true), doPixel_(iConfig.existsAs("doPixel") ? iConfig.getParameter("doPixel") : true), mergeOld_(iConfig.exists("oldClusterRemovalInfo")) { produces > >(); @@ -163,8 +164,7 @@ void SeedClusterRemoverPhase2::process(const TrackingRecHit *hit, float chi2, co void SeedClusterRemoverPhase2::produce(Event &iEvent, const EventSetup &iSetup) { ProductID pixelOldProdID, stripOldProdID; - edm::ESHandle tgh; - iSetup.get().get("", tgh); //is it correct to use "" ? + const auto &tgh = &iSetup.getData(tTrackerGeom_); Handle > pixelClusters; if (doPixel_) { @@ -211,7 +211,7 @@ void SeedClusterRemoverPhase2::produce(Event &iEvent, const EventSetup &iSetup) for (auto const &hit : seed.recHits()) { if (!hit.isValid()) continue; - process(&hit, 0., tgh.product()); + process(&hit, 0., tgh); } } diff --git a/RecoLocalTracker/SubCollectionProducers/src/StripClusterSelectorTopBottom.cc b/RecoLocalTracker/SubCollectionProducers/src/StripClusterSelectorTopBottom.cc index ce7eaca7083bd..52e298f8b7093 100644 --- a/RecoLocalTracker/SubCollectionProducers/src/StripClusterSelectorTopBottom.cc +++ b/RecoLocalTracker/SubCollectionProducers/src/StripClusterSelectorTopBottom.cc @@ -5,9 +5,7 @@ void StripClusterSelectorTopBottom::produce(edm::StreamID, edm::Event& event, co edm::Handle> input; event.getByToken(token_, input); - edm::ESHandle geom; - setup.get().get(geom); - const TrackerGeometry& theTracker(*geom); + const TrackerGeometry& theTracker = setup.getData(tTrackerGeom_); auto output = std::make_unique>(); diff --git a/RecoLuminosity/LumiProducer/plugins/DIPLumiProducer.cc b/RecoLuminosity/LumiProducer/plugins/DIPLumiProducer.cc index 0cffbe23df746..fed14213f250f 100644 --- a/RecoLuminosity/LumiProducer/plugins/DIPLumiProducer.cc +++ b/RecoLuminosity/LumiProducer/plugins/DIPLumiProducer.cc @@ -56,9 +56,6 @@ Description: A essource/esproducer for lumi values from DIP via runtime logger D #include "Utilities/Xerces/interface/Xerces.h" #include -#include "boost/filesystem/path.hpp" -#include "boost/filesystem/operations.hpp" - DIPLumiProducer::DIPLumiProducer(const edm::ParameterSet& iConfig) : m_connectStr(""), m_summarycachedrun(0), m_detailcachedrun(0), m_cachesize(0) { setWhatProduced(this, &DIPLumiProducer::produceSummary); diff --git a/RecoLuminosity/LumiProducer/test/TestLumiProducerFromBrilcalc_cfg.py b/RecoLuminosity/LumiProducer/test/TestLumiProducerFromBrilcalc_cfg.py old mode 100755 new mode 100644 index c084efa38c1ac..8284d1df58f1d --- a/RecoLuminosity/LumiProducer/test/TestLumiProducerFromBrilcalc_cfg.py +++ b/RecoLuminosity/LumiProducer/test/TestLumiProducerFromBrilcalc_cfg.py @@ -4,12 +4,14 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring("cout"), - categories = cms.untracked.vstring("LumiProducerFromBrilcalc"), - debugModules = cms.untracked.vstring("LumiInfo"), - cout = cms.untracked.PSet( - threshold = cms.untracked.string('DEBUG') - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('DEBUG') + ), + debugModules = cms.untracked.vstring('LumiInfo') ) # just use a random relval which has meaningless run/LS numbers, and then a corresponding test file diff --git a/RecoLuminosity/LumiProducer/test/analysis/test/RunFromRAW_template.py b/RecoLuminosity/LumiProducer/test/analysis/test/RunFromRAW_template.py index 6c67175e20ca3..08bd639ceede0 100644 --- a/RecoLuminosity/LumiProducer/test/analysis/test/RunFromRAW_template.py +++ b/RecoLuminosity/LumiProducer/test/analysis/test/RunFromRAW_template.py @@ -11,8 +11,8 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' process.MessageLogger.cerr.FwkReport.reportEvery = 1000 -process.MessageLogger.categories.append('HLTrigReport') -process.MessageLogger.categories.append('L1GtTrigReport') +process.MessageLogger.HLTrigReport=dict() +process.MessageLogger.L1GtTrigReport=dict() process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) # -- Database configuration diff --git a/RecoLuminosity/LumiProducer/test/analysis/test/Run_AlCaLumiPixels_LS.py b/RecoLuminosity/LumiProducer/test/analysis/test/Run_AlCaLumiPixels_LS.py index 01388a378082f..078ce52e61047 100644 --- a/RecoLuminosity/LumiProducer/test/analysis/test/Run_AlCaLumiPixels_LS.py +++ b/RecoLuminosity/LumiProducer/test/analysis/test/Run_AlCaLumiPixels_LS.py @@ -11,8 +11,8 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' process.MessageLogger.cerr.FwkReport.reportEvery = 1000 -process.MessageLogger.categories.append('HLTrigReport') -process.MessageLogger.categories.append('L1GtTrigReport') +process.MessageLogger.HLTrigReport=dict() +process.MessageLogger.L1GtTrigReport=dict() process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) # -- Database configuration diff --git a/RecoLuminosity/LumiProducer/test/analysis/test/Run_PixVertex_DataCert.py b/RecoLuminosity/LumiProducer/test/analysis/test/Run_PixVertex_DataCert.py index e469c58a3143e..4fb2f8c116225 100644 --- a/RecoLuminosity/LumiProducer/test/analysis/test/Run_PixVertex_DataCert.py +++ b/RecoLuminosity/LumiProducer/test/analysis/test/Run_PixVertex_DataCert.py @@ -11,8 +11,8 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' process.MessageLogger.cerr.FwkReport.reportEvery = 1000 -process.MessageLogger.categories.append('HLTrigReport') -process.MessageLogger.categories.append('L1GtTrigReport') +process.MessageLogger.HLTrigReport=dict() +process.MessageLogger.L1GtTrigReport=dict() process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) # -- Database configuration diff --git a/RecoLuminosity/LumiProducer/test/analysis/test/Run_PixVertex_Event.py b/RecoLuminosity/LumiProducer/test/analysis/test/Run_PixVertex_Event.py index 1050b807a004b..fd89c5f11be73 100644 --- a/RecoLuminosity/LumiProducer/test/analysis/test/Run_PixVertex_Event.py +++ b/RecoLuminosity/LumiProducer/test/analysis/test/Run_PixVertex_Event.py @@ -11,8 +11,8 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' process.MessageLogger.cerr.FwkReport.reportEvery = 1000 -process.MessageLogger.categories.append('HLTrigReport') -process.MessageLogger.categories.append('L1GtTrigReport') +process.MessageLogger.HLTrigReport=dict() +process.MessageLogger.L1GtTrigReport=dict() process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) # -- Database configuration diff --git a/RecoLuminosity/LumiProducer/test/analysis/test/Run_template.py b/RecoLuminosity/LumiProducer/test/analysis/test/Run_template.py index bdfecafed7be8..d3fec87251af4 100644 --- a/RecoLuminosity/LumiProducer/test/analysis/test/Run_template.py +++ b/RecoLuminosity/LumiProducer/test/analysis/test/Run_template.py @@ -11,8 +11,8 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' process.MessageLogger.cerr.FwkReport.reportEvery = 1000 -process.MessageLogger.categories.append('HLTrigReport') -process.MessageLogger.categories.append('L1GtTrigReport') +process.MessageLogger.HLTrigReport=dict() +process.MessageLogger.L1GtTrigReport=dict() process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) # -- Database configuration diff --git a/RecoLuminosity/LumiProducer/test/testLumiCalculator_cfg.py b/RecoLuminosity/LumiProducer/test/testLumiCalculator_cfg.py old mode 100755 new mode 100644 index 0294783aa95e2..340abba06c78e --- a/RecoLuminosity/LumiProducer/test/testLumiCalculator_cfg.py +++ b/RecoLuminosity/LumiProducer/test/testLumiCalculator_cfg.py @@ -13,16 +13,23 @@ ) process.MessageLogger = cms.Service("MessageLogger", - suppressInfo = cms.untracked.vstring(), - destinations = cms.untracked.vstring('lumioutput'), - categories = cms.untracked.vstring('LumiReport'), - lumioutput = cms.untracked.PSet( - threshold = cms.untracked.string('INFO'), - noLineBreaks = cms.untracked.bool(True), - noTimeStamps = cms.untracked.bool(True), - INFO = cms.untracked.PSet( limit = cms.untracked.int32(0) ), - LumiReport = cms.untracked.PSet( limit = cms.untracked.int32(10000000) ) - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + files = cms.untracked.PSet( + lumioutput = cms.untracked.PSet( + INFO = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + LumiReport = cms.untracked.PSet( + limit = cms.untracked.int32(10000000) + ), + noLineBreaks = cms.untracked.bool(True), + noTimeStamps = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ) + ), + suppressInfo = cms.untracked.vstring() ) process.source= cms.Source("PoolSource", processingMode=cms.untracked.string('RunsAndLumis'), diff --git a/RecoLuminosity/LumiProducer/test/testLumiProd_cfg.py b/RecoLuminosity/LumiProducer/test/testLumiProd_cfg.py index 4b16f0a180a07..517ad7a3b2bff 100755 --- a/RecoLuminosity/LumiProducer/test/testLumiProd_cfg.py +++ b/RecoLuminosity/LumiProducer/test/testLumiProd_cfg.py @@ -1,9 +1,8 @@ import FWCore.ParameterSet.Config as cms -process.MessageLogger.categories.extend(["GetManyWithoutRegistration","GetByLabelWithoutRegistration"]) + _messageSettings = cms.untracked.PSet( reportEvery = cms.untracked.int32(1), - optionalPSet = cms.untracked.bool(True), limit = cms.untracked.int32(10000000) ) process.MessageLogger.cerr.GetManyWithoutRegistration = _messageSettings diff --git a/RecoLuminosity/LumiProducer/test/testLumiProd_cfg_dummy.py b/RecoLuminosity/LumiProducer/test/testLumiProd_cfg_dummy.py index 6a67f1325828f..8e148e686ac92 100755 --- a/RecoLuminosity/LumiProducer/test/testLumiProd_cfg_dummy.py +++ b/RecoLuminosity/LumiProducer/test/testLumiProd_cfg_dummy.py @@ -7,10 +7,9 @@ # wantSummary = cms.untracked.bool(True), Rethrow = FWCore.Framework.test.cmsExceptionsFatalOption_cff.Rethrow ) -process.MessageLogger.categories.extend(["GetManyWithoutRegistration","GetByLabelWithoutRegistration"]) + _messageSettings = cms.untracked.PSet( reportEvery = cms.untracked.int32(1), - optionalPSet = cms.untracked.bool(True), limit = cms.untracked.int32(10000000) ) process.MessageLogger.cerr.GetManyWithoutRegistration = _messageSettings diff --git a/RecoLuminosity/LumiProducer/test/validation/fastsimSampleWithHLT_1E31_cfg.py b/RecoLuminosity/LumiProducer/test/validation/fastsimSampleWithHLT_1E31_cfg.py index 93207a940aa46..a6384af53f3ac 100644 --- a/RecoLuminosity/LumiProducer/test/validation/fastsimSampleWithHLT_1E31_cfg.py +++ b/RecoLuminosity/LumiProducer/test/validation/fastsimSampleWithHLT_1E31_cfg.py @@ -111,13 +111,13 @@ process.schedule.append(process.outpath) process.load("FWCore/MessageService/MessageLogger_cfi") -process.MessageLogger.categories.append('L1GtTrigReport') -process.MessageLogger.categories.append('HLTrigReport') +process.MessageLogger.L1GtTrigReport=dict() +process.MessageLogger.HLTrigReport=dict() # Keep the logging output to a nice level # ##process.Timing = cms.Service("Timing") ##process.MessageLogger.destinations = cms.untracked.vstring("pyDetailedInfo.txt","cout") -##process.MessageLogger.categories.append("FamosManager") +## ##process.MessageLogger.cout = cms.untracked.PSet(threshold=cms.untracked.string("INFO"), ## default=cms.untracked.PSet(limit=cms.untracked.int32(0)), ## FamosManager=cms.untracked.PSet(limit=cms.untracked.int32(100000))) diff --git a/RecoMET/Configuration/python/RecoMET_Cosmics_cff.py b/RecoMET/Configuration/python/RecoMET_Cosmics_cff.py index e2ebcee15e98f..6712951818622 100644 --- a/RecoMET/Configuration/python/RecoMET_Cosmics_cff.py +++ b/RecoMET/Configuration/python/RecoMET_Cosmics_cff.py @@ -6,7 +6,7 @@ hcalnoise.fillTracks = False -CSCHaloData.CosmicMuonLabel = cms.InputTag("muons") +CSCHaloData.CosmicMuonLabel = "muons" ##____________________________________________________________________________|| metrecoCosmicsTask = cms.Task( diff --git a/RecoMET/METAlgorithms/BuildFile.xml b/RecoMET/METAlgorithms/BuildFile.xml index 615a4a22c5813..017f7c4f1fbed 100644 --- a/RecoMET/METAlgorithms/BuildFile.xml +++ b/RecoMET/METAlgorithms/BuildFile.xml @@ -17,6 +17,7 @@ + diff --git a/RecoMET/METAlgorithms/interface/HcalHaloAlgo.h b/RecoMET/METAlgorithms/interface/HcalHaloAlgo.h index 1ec1589092e22..e8381930c14a2 100644 --- a/RecoMET/METAlgorithms/interface/HcalHaloAlgo.h +++ b/RecoMET/METAlgorithms/interface/HcalHaloAlgo.h @@ -33,7 +33,7 @@ #include "DataFormats/CaloTowers/interface/CaloTower.h" #include "DataFormats/CaloTowers/interface/CaloTowerDetId.h" #include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" - +#include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/METReco/interface/HaloClusterCandidateHCAL.h" #include "FWCore/Framework/interface/FrameworkfwdMostUsed.h" diff --git a/RecoMET/METAlgorithms/interface/METSignificance.h b/RecoMET/METAlgorithms/interface/METSignificance.h index 2ba6ad30ac06a..6ad4846c3d383 100644 --- a/RecoMET/METAlgorithms/interface/METSignificance.h +++ b/RecoMET/METAlgorithms/interface/METSignificance.h @@ -16,8 +16,6 @@ Description: [one line class summary] #ifndef METAlgorithms_METSignificance_h #define METAlgorithms_METSignificance_h //____________________________________________________________________________|| -#include "CondFormats/JetMETObjects/interface/JetResolution.h" - #include "JetMETCorrections/Modules/interface/JetResolution.h" #include "DataFormats/JetReco/interface/Jet.h" diff --git a/RecoMET/METAlgorithms/src/METSignificance.cc b/RecoMET/METAlgorithms/src/METSignificance.cc index 47244f308fa0d..2dfe24763d86b 100644 --- a/RecoMET/METAlgorithms/src/METSignificance.cc +++ b/RecoMET/METAlgorithms/src/METSignificance.cc @@ -117,24 +117,25 @@ reco::METCovMatrix metsig::METSignificance::getCovariance(const edm::View jetThreshold_) { // high-pt jets enter into the covariance matrix via JER + double jeta = jet.eta(); + double feta = std::abs(jeta); + double c = jet.px() / jpt; + double s = jet.py() / jpt; + + JME::JetParameters parameters; + parameters.setJetPt(jpt).setJetEta(jeta).setRho(rho); + + // jet energy resolutions + double sigmapt = resPtObj.getResolution(parameters); + double sigmaphi = resPhiObj.getResolution(parameters); + // SF not needed since is already embedded in the sigma in the dataGlobalTag + // double sigmaSF = isRealData ? resSFObj.getScaleFactor(parameters) : 1.0; + double scale = 0; if (feta < jetEtas_[0]) scale = jetParams_[0]; @@ -166,8 +167,9 @@ reco::METCovMatrix metsig::METSignificance::getCovariance(const edm::View - + diff --git a/RecoMET/METPUSubtraction/interface/PFMETAlgorithmMVA.h b/RecoMET/METPUSubtraction/interface/PFMETAlgorithmMVA.h index f282c297a7af5..211cac8035348 100644 --- a/RecoMET/METPUSubtraction/interface/PFMETAlgorithmMVA.h +++ b/RecoMET/METPUSubtraction/interface/PFMETAlgorithmMVA.h @@ -13,7 +13,7 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "DataFormats/Candidate/interface/Candidate.h" #include "DataFormats/METReco/interface/MET.h" @@ -21,7 +21,6 @@ #include "RecoMET/METPUSubtraction/interface/MvaMEtUtilities.h" -//#include #include #include diff --git a/RecoMET/METPUSubtraction/interface/PFMEtSignInterfaceBase.h b/RecoMET/METPUSubtraction/interface/PFMEtSignInterfaceBase.h index 2d9add899ba7b..0de4eda7d99b3 100644 --- a/RecoMET/METPUSubtraction/interface/PFMEtSignInterfaceBase.h +++ b/RecoMET/METPUSubtraction/interface/PFMEtSignInterfaceBase.h @@ -14,6 +14,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "RecoMET/METAlgorithms/interface/SignAlgoResolutions.h" diff --git a/RecoMET/METPUSubtraction/plugins/PFMETProducerMVA.cc b/RecoMET/METPUSubtraction/plugins/PFMETProducerMVA.cc index ee80dd8e30316..3a9c3880cff9d 100644 --- a/RecoMET/METPUSubtraction/plugins/PFMETProducerMVA.cc +++ b/RecoMET/METPUSubtraction/plugins/PFMETProducerMVA.cc @@ -1,4 +1,5 @@ #include "RecoMET/METPUSubtraction/plugins/PFMETProducerMVA.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" using namespace reco; diff --git a/RecoMET/METPUSubtraction/python/mitigatedMETSequence_cff.py b/RecoMET/METPUSubtraction/python/mitigatedMETSequence_cff.py index 71db027f90a02..d4a894a42bfa6 100644 --- a/RecoMET/METPUSubtraction/python/mitigatedMETSequence_cff.py +++ b/RecoMET/METPUSubtraction/python/mitigatedMETSequence_cff.py @@ -72,25 +72,25 @@ verbosity = cms.int32(0) ) -pfMVAMEtSequence = cms.Sequence( - kt6PFJets* - calibratedAK4PFJetsForPFMVAMEt* +pfMVAMEtTask = cms.Task( + kt6PFJets, + calibratedAK4PFJetsForPFMVAMEt, pfMVAMEt ) - +pfMVAMEtSequence = cms.Sequence(pfMVAMEtTask) ##================================================ ## Pf No Pileup MET sequence ##================================================ -pfNoPUMEtSequence = cms.Sequence() +pfNoPUMEtTask = cms.Task() from JetMETCorrections.Configuration.JetCorrectionServices_cff import * calibratedAK4PFJetsForPFNoPUMEt = cms.EDProducer('PFJetCorrectionProducer', src = cms.InputTag('ak4PFJets'), correctors = cms.vstring('ak4PFL1FastL2L3Residual') # NOTE: use "ak4PFL1FastL2L3" for MC / "ak4PFL1FastL2L3Residual" for Data ) -ak4PFJetSequenceForPFNoPUMEt = cms.Sequence(calibratedAK4PFJetsForPFNoPUMEt) -pfNoPUMEtSequence += ak4PFJetSequenceForPFNoPUMEt +ak4PFJetTaskForPFNoPUMEt = cms.Task(calibratedAK4PFJetsForPFNoPUMEt) +pfNoPUMEtTask.add(ak4PFJetTaskForPFNoPUMEt) from RecoJets.JetProducers.PileupJetID_cfi import * puJetIdForPFNoPUMEt = pileupJetId.clone( @@ -99,28 +99,28 @@ cutbased, PhilV1 ), -# label = cms.string("fullId"), #MM does not work for weird reasons, cannot be cloned properly +# label = "fullId", #MM does not work for weird reasons, cannot be cloned properly produceJetIds = True, runMvas = True, jets = "calibratedAK4PFJetsForPFNoPUMEt", applyJec = False, inputIsCorrected = True, ) -pfNoPUMEtSequence += puJetIdForPFNoPUMEt +pfNoPUMEtTask.add(puJetIdForPFNoPUMEt) from JetMETCorrections.Type1MET.pfMETCorrectionType0_cfi import * -pfNoPUMEtSequence += type0PFMEtCorrection +pfNoPUMEtTask.add(type0PFMEtCorrection) pfCandidateToVertexAssociationForPFNoPUMEt = pfCandidateToVertexAssociation.clone( MaxNumberOfAssociations = 1, doReassociation = False, FinalAssociation = 1, nTrackWeight = 0. ) -pfNoPUMEtSequence += pfCandidateToVertexAssociationForPFNoPUMEt +pfNoPUMEtTask.add(pfCandidateToVertexAssociationForPFNoPUMEt) pfMETcorrType0ForPFNoPUMEt = pfMETcorrType0.clone( srcPFCandidateToVertexAssociations = 'pfCandidateToVertexAssociationForPFNoPUMEt' ) -pfNoPUMEtSequence += pfMETcorrType0ForPFNoPUMEt +pfNoPUMEtTask.add(pfMETcorrType0ForPFNoPUMEt) jvfJetIdForPFNoPUMEt = cms.EDProducer("JVFJetIdProducer", srcJets = cms.InputTag('calibratedAK4PFJetsForPFNoPUMEt'), @@ -132,7 +132,7 @@ JVFcut = cms.double(0.75), neutralJetOption = cms.string("noPU") ) -pfNoPUMEtSequence += jvfJetIdForPFNoPUMEt +pfNoPUMEtTask.add(jvfJetIdForPFNoPUMEt) import RecoMET.METProducers.METSigParams_cfi as met_config pfNoPUMEtData = cms.EDProducer("NoPileUpPFMEtDataProducer", @@ -151,7 +151,7 @@ resolution = met_config.METSignificance_params, verbosity = cms.int32(0) ) -pfNoPUMEtSequence += pfNoPUMEtData +pfNoPUMEtTask.add(pfNoPUMEtData) pfNoPUMEt = cms.EDProducer("NoPileUpPFMEtProducer", srcMEt = cms.InputTag('pfMet'), @@ -180,11 +180,12 @@ saveInputs = cms.bool(True), verbosity = cms.int32(0) ) -pfNoPUMEtSequence += pfNoPUMEt - +pfNoPUMEtTask.add(pfNoPUMEt) +pfNoPUMEtSequence = cms.Sequence(pfNoPUMEtTask) -mitigatedMETSequence = cms.Sequence( -selectionSequenceForMVANoPUMET+ -pfMVAMEtSequence+ -pfNoPUMEtSequence +mitigatedMETTask = cms.Task( +selectionSequenceForMVANoPUMETTask, +pfMVAMEtTask, +pfNoPUMEtTask ) +mitigatedMETSequence = cms.Sequence(mitigatedMETTask) diff --git a/RecoMET/METPUSubtraction/python/mvaPFMET_Data_cff.py b/RecoMET/METPUSubtraction/python/mvaPFMET_Data_cff.py index a805a479bc18e..4d3230940f9f4 100644 --- a/RecoMET/METPUSubtraction/python/mvaPFMET_Data_cff.py +++ b/RecoMET/METPUSubtraction/python/mvaPFMET_Data_cff.py @@ -61,8 +61,9 @@ verbosity = cms.int32(0) ) -pfMEtMVAsequence = cms.Sequence( - #(isomuonseq+isotauseq+isoelectronseq)* - calibratedAK4PFJetsForPFMEtMVA* +pfMEtMVATask = cms.Task( + #isomuonTask, isotauTask, isoelectronTask, + calibratedAK4PFJetsForPFMEtMVA, pfMEtMVA ) +pfMEtMVAsequence = cms.Sequence(pfMEtMVATask) diff --git a/RecoMET/METPUSubtraction/python/mvaPFMET_cff.py b/RecoMET/METPUSubtraction/python/mvaPFMET_cff.py index d476835d5a610..68f844a89d5bd 100644 --- a/RecoMET/METPUSubtraction/python/mvaPFMET_cff.py +++ b/RecoMET/METPUSubtraction/python/mvaPFMET_cff.py @@ -91,7 +91,7 @@ ) pfMVAMEtTask = cms.Task( - #(isomuonseq+isotauseq+isoelectronseq)* + #isomuonTask,isotauTask,isoelectronTask, jetCorrectorsTask, calibratedAK4PFJetsForPFMVAMEt, puJetIdForPFMVAMEt, diff --git a/RecoMET/METPUSubtraction/python/mvaPFMET_db_cfi.py b/RecoMET/METPUSubtraction/python/mvaPFMET_db_cfi.py deleted file mode 100644 index dff77fa4ad420..0000000000000 --- a/RecoMET/METPUSubtraction/python/mvaPFMET_db_cfi.py +++ /dev/null @@ -1,29 +0,0 @@ -from CondCore.DBCommon.CondDBSetup_cfi import * - -## mvaPFMEtGBRForestsFromDB = cms.ESSource("PoolDBESSource", -## CondDBSetup, -## DumpStat = cms.untracked.bool(True), -## toGet = cms.VPSet( -## cms.PSet( -## record = cms.string('GBRWrapperRcd'), -## tag = cms.string('mvaPFMET_53_Dec2012_U'), -## label = cms.untracked.string('mvaPFMET_53_Dec2012_U') -## ), -## cms.PSet( -## record = cms.string('GBRWrapperRcd'), -## tag = cms.string('mvaPFMET_53_Dec2012_DPhi'), -## label = cms.untracked.string('mvaPFMET_53_Dec2012_DPhi') -## ), -## cms.PSet( -## record = cms.string('GBRWrapperRcd'), -## tag = cms.string('mvaPFMET_53_Dec2012_CovU1'), -## label = cms.untracked.string('mvaPFMET_53_Dec2012_CovU1') -## ), -## cms.PSet( -## record = cms.string('GBRWrapperRcd'), -## tag = cms.string('mvaPFMET_53_Dec2012_CovU2'), -## label = cms.untracked.string('mvaPFMET_53_Dec2012_CovU2') -## ) -## ), -## connect = cms.string('sqlite_fip:RecoMET/METPUSubtraction/data/mvaPFMEt_53_Dec2012.db') -## ) diff --git a/RecoMET/METPUSubtraction/python/mvaPFMET_leptons_cff.py b/RecoMET/METPUSubtraction/python/mvaPFMET_leptons_cff.py index 3a2d5d038bf35..f8beb118c597c 100644 --- a/RecoMET/METPUSubtraction/python/mvaPFMET_leptons_cff.py +++ b/RecoMET/METPUSubtraction/python/mvaPFMET_leptons_cff.py @@ -63,9 +63,12 @@ verbosity = cms.int32(0) ) -pfMEtMVAsequence = cms.Sequence( - (isomuonseq+isotauseq+isoelectronseq)* - calibratedAK4PFJetsForPFMEtMVA* +pfMEtMVATask = cms.Task( + isomuonTask, + isotauTask, + isoelectronTask, + calibratedAK4PFJetsForPFMEtMVA, pfMEtMVA ) +pfMEtMVAsequence = cms.Sequence(pfMEtMVATask) diff --git a/RecoMET/METPUSubtraction/python/mvaPFMET_leptons_cfi.py b/RecoMET/METPUSubtraction/python/mvaPFMET_leptons_cfi.py index 4b23f0b99be99..d5450cee81cb6 100644 --- a/RecoMET/METPUSubtraction/python/mvaPFMET_leptons_cfi.py +++ b/RecoMET/METPUSubtraction/python/mvaPFMET_leptons_cfi.py @@ -99,21 +99,24 @@ filter = cms.bool(False) ) -isomuonseq = cms.Sequence(isomuons) -isoelectronseq = cms.Sequence(isoelectrons) -isotauseq = cms.Sequence( - hpsPFTauDiscriminationByLooseCombinedIsolationDBSumPtCorr3Hits* - #kt6PFJetsForRhoComputationVoronoiMet* - #hpsPFTauDiscriminationByMVAIsolation* - hpsPFTauDiscriminationAgainstMuon2* +isomuonTask = cms.Task(isomuons) +isomuonseq = cms.Sequence(isomuonsTask) +isoelectronTask = cms.Task(isoelectrons) +isoelectronseq = cms.Sequence(isoelectronsTask) +isotauTask = cms.Task( + hpsPFTauDiscriminationByLooseCombinedIsolationDBSumPtCorr3Hits, + #kt6PFJetsForRhoComputationVoronoiMet, + #hpsPFTauDiscriminationByMVAIsolation, + hpsPFTauDiscriminationAgainstMuon2, isotaus ) +isotauseq = cms.Sequence(isotauTask) leptonSelection = cms.PSet( SelectEvents = cms.PSet( - SelectEvents = cms.vstring( - 'isomuonseq', - 'isoelectronseq', - 'isotauseq') - ) + SelectEvents = cms.vstring( + 'isomuonseq', + 'isoelectronseq', + 'isotauseq') ) +) diff --git a/RecoMET/METPUSubtraction/python/mvaPFMET_leptons_data_cff.py b/RecoMET/METPUSubtraction/python/mvaPFMET_leptons_data_cff.py index a8b995631f394..31fdf8f5f9ff9 100644 --- a/RecoMET/METPUSubtraction/python/mvaPFMET_leptons_data_cff.py +++ b/RecoMET/METPUSubtraction/python/mvaPFMET_leptons_data_cff.py @@ -60,9 +60,11 @@ verbosity = cms.int32(0) ) -pfMEtMVAsequence = cms.Sequence( - (isomuonseq+isotauseq+isoelectronseq)* - calibratedAK4PFJetsForPFMEtMVA* +pfMEtMVATask = cms.Task( + isomuonTask, + isotauTask, + isoelectronTask, + calibratedAK4PFJetsForPFMEtMVA, pfMEtMVA ) - +pfMEtMVAsequence = cms.Sequence(pfMEtMVATask) diff --git a/RecoMET/METPUSubtraction/python/pfNoPUMET_cff.py b/RecoMET/METPUSubtraction/python/pfNoPUMET_cff.py index 88ac0a400cb93..47226d2360257 100644 --- a/RecoMET/METPUSubtraction/python/pfNoPUMET_cff.py +++ b/RecoMET/METPUSubtraction/python/pfNoPUMET_cff.py @@ -1,14 +1,14 @@ import FWCore.ParameterSet.Config as cms -pfNoPUMEtSequence = cms.Sequence() +pfNoPUMEtTask = cms.Task() from JetMETCorrections.Configuration.JetCorrectionServices_cff import * calibratedAK4PFJetsForPFNoPUMEt = cms.EDProducer('PFJetCorrectionProducer', src = cms.InputTag('ak4PFJets'), correctors = cms.vstring('ak4PFL1FastL2L3') # NOTE: use "ak4PFL1FastL2L3" for MC / "ak4PFL1FastL2L3Residual" for Data ) -ak4PFJetSequenceForPFNoPUMEt = cms.Sequence(calibratedAK4PFJetsForPFNoPUMEt) -pfNoPUMEtSequence += ak4PFJetSequenceForPFNoPUMEt +ak4PFJetTaskForPFNoPUMEt = cms.Task(calibratedAK4PFJetsForPFNoPUMEt) +pfNoPUMEtTask.add(ak4PFJetTaskForPFNoPUMEt) from RecoJets.JetProducers.PileupJetID_cfi import * puJetIdForPFNoPUMEt = pileupJetId.clone( @@ -17,28 +17,28 @@ cutbased, PhilV1 ), -# label = cms.string("fullId"), #MM does not work for weird reasons, cannot be cloned properly +# label = "fullId", #MM does not work for weird reasons, cannot be cloned properly produceJetIds = True, runMvas = True, jets = "calibratedAK4PFJetsForPFNoPUMEt", applyJec = False, inputIsCorrected = True, ) -pfNoPUMEtSequence += puJetIdForPFNoPUMEt +pfNoPUMEtTask.add(puJetIdForPFNoPUMEt) from JetMETCorrections.Type1MET.pfMETCorrectionType0_cfi import * -pfNoPUMEtSequence += type0PFMEtCorrection +pfNoPUMEtTask.add(type0PFMEtCorrection) pfCandidateToVertexAssociationForPFNoPUMEt = pfCandidateToVertexAssociation.clone( MaxNumberOfAssociations = 1, doReassociation = False, FinalAssociation = 1, nTrackWeight = 0. ) -pfNoPUMEtSequence += pfCandidateToVertexAssociationForPFNoPUMEt +pfNoPUMEtTask.add(pfCandidateToVertexAssociationForPFNoPUMEt) pfMETcorrType0ForPFNoPUMEt = pfMETcorrType0.clone( srcPFCandidateToVertexAssociations = 'pfCandidateToVertexAssociationForPFNoPUMEt' ) -pfNoPUMEtSequence += pfMETcorrType0ForPFNoPUMEt +pfNoPUMEtTask.add(pfMETcorrType0ForPFNoPUMEt) jvfJetIdForPFNoPUMEt = cms.EDProducer("JVFJetIdProducer", srcJets = cms.InputTag('calibratedAK4PFJetsForPFNoPUMEt'), @@ -50,7 +50,7 @@ JVFcut = cms.double(0.75), neutralJetOption = cms.string("noPU") ) -pfNoPUMEtSequence += jvfJetIdForPFNoPUMEt +pfNoPUMEtTask.add(jvfJetIdForPFNoPUMEt) import RecoMET.METProducers.METSigParams_cfi as met_config pfNoPUMEtData = cms.EDProducer("NoPileUpPFMEtDataProducer", @@ -70,7 +70,7 @@ resolution = met_config.METSignificance_params, verbosity = cms.int32(0) ) -pfNoPUMEtSequence += pfNoPUMEtData +pfNoPUMEtTask.add(pfNoPUMEtData) pfNoPUMEt = cms.EDProducer("NoPileUpPFMEtProducer", srcMEt = cms.InputTag('pfMet'), @@ -96,4 +96,5 @@ saveInputs = cms.bool(True), verbosity = cms.int32(0) ) -pfNoPUMEtSequence += pfNoPUMEt +pfNoPUMEtTask.add(pfNoPUMEt) +pfNoPUMEtSequence = cms.Sequence(pfNoPUMEtTask) diff --git a/RecoMET/METPUSubtraction/python/pfNoPUchsMET_cff.py b/RecoMET/METPUSubtraction/python/pfNoPUchsMET_cff.py index 75e6d43a33ec3..5aba4e3475fca 100644 --- a/RecoMET/METPUSubtraction/python/pfNoPUchsMET_cff.py +++ b/RecoMET/METPUSubtraction/python/pfNoPUchsMET_cff.py @@ -1,17 +1,17 @@ import FWCore.ParameterSet.Config as cms -pfNoPUchsMEtSequence = cms.Sequence() +pfNoPUchsMEtTask = cms.Task() from JetMETCorrections.Type1MET.ak4PFchsJets_cff import * -pfNoPUchsMEtSequence += ak4PFchsJetsSequence +pfNoPUchsMEtTask.add(ak4PFchsJetsTask) from JetMETCorrections.Configuration.JetCorrectionServices_cff import * calibratedAK4PFchsJetsForPFNoPUchsMEt = cms.EDProducer('PFJetCorrectionProducer', src = cms.InputTag('ak4PFchsJets'), correctors = cms.vstring('ak4PFchsL1FastL2L3Residual') # NOTE: use "ak4PFchsL1FastL2L3" for MC / "ak4PFchsL1FastL2L3Residual" for Data ) -ak4PFJetSequenceForPFNoPUchsMEt = cms.Sequence(calibratedAK4PFchsJetsForPFNoPUchsMEt) -pfNoPUchsMEtSequence += ak4PFJetSequenceForPFNoPUchsMEt +ak4PFJetTaskForPFNoPUchsMEt = cms.Task(calibratedAK4PFchsJetsForPFNoPUchsMEt) +pfNoPUchsMEtTask.add(ak4PFJetTaskForPFNoPUchsMEt) from RecoJets.JetProducers.PileupJetID_cfi import * puJetIdForPFNoPUchsMEt = pileupJetId.clone( @@ -26,28 +26,28 @@ applyJec = False, inputIsCorrected = True, ) -pfNoPUchsMEtSequence += puJetIdForPFNoPUchsMEt +pfNoPUchsMEtTask.add(puJetIdForPFNoPUchsMEt) from JetMETCorrections.Type1MET.pfMETCorrectionType0_cfi import * -pfNoPUchsMEtSequence += type0PFMEtCorrection +pfNoPUchsMEtTask.add(type0PFMEtCorrection) pfCandidateToVertexAssociationForPFNoPUchsMEt = pfCandidateToVertexAssociation.clone( MaxNumberOfAssociations = 1, doReassociation = False, FinalAssociation = 1, nTrackWeight = 0. ) -pfNoPUchsMEtSequence += pfCandidateToVertexAssociationForPFNoPUchsMEt +pfNoPUchsMEtTask.add(pfCandidateToVertexAssociationForPFNoPUchsMEt) pfMETcorrType0ForPFNoPUchsMEt = pfMETcorrType0.clone( - srcPFCandidateToVertexAssociations = cms.InputTag('pfCandidateToVertexAssociationForPFNoPUchsMEt') + srcPFCandidateToVertexAssociations = 'pfCandidateToVertexAssociationForPFNoPUchsMEt' ) -pfNoPUchsMEtSequence += pfMETcorrType0ForPFNoPUchsMEt +pfNoPUchsMEtTask.add(pfMETcorrType0ForPFNoPUchsMEt) ##from CommonTools.RecoUtils.pfcand_assomap_cfi import PFCandAssoMap ##pfPileUpToVertexAssociation = PFCandAssoMap.clone( ## VertexTrackAssociationMap = cms.InputTag('trackToVertexAssociation'), -## PFCandidateCollection = cms.InputTag('pfPileUpForAK4PFchsJets') +## PFCandidateCollection = 'pfPileUpForAK4PFchsJets' ##) -##pfNoPUchsMEtSequence += pfPileUpToVertexAssociation +##pfNoPUchsMEtTask.add(pfPileUpToVertexAssociation) jvfJetIdForPFNoPUchsMEt = cms.EDProducer("JVFJetIdProducer", srcJets = cms.InputTag('calibratedAK4PFchsJetsForPFNoPUchsMEt'), @@ -59,7 +59,7 @@ JVFcut = cms.double(0.75), neutralJetOption = cms.string("noPU") ) -pfNoPUchsMEtSequence += jvfJetIdForPFNoPUchsMEt +pfNoPUchsMEtTask.add(jvfJetIdForPFNoPUchsMEt) import RecoMET.METProducers.METSigParams_cfi as met_config pfNoPUchsMEtData = cms.EDProducer("PFNoPUMEtDataProducer", @@ -80,7 +80,7 @@ resolution = met_config.METSignificance_params, verbosity = cms.int32(0) ) -pfNoPUchsMEtSequence += pfNoPUchsMEtData +pfNoPUchsMEtTask.add(pfNoPUchsMEtData) pfNoPUchsMEt = cms.EDProducer("PFNoPUMEtProducer", srcMEt = cms.InputTag('pfMet'), @@ -104,4 +104,5 @@ saveInputs = cms.bool(True), verbosity = cms.int32(0) ) -pfNoPUchsMEtSequence += pfNoPUchsMEt +pfNoPUchsMEtTask.add(pfNoPUchsMEt) +pfNoPUchsMEtSequence = cms.Sequence(pfNoPUchsMEtTask) diff --git a/RecoMET/METProducers/python/METSignificanceObjects_cfi.py b/RecoMET/METProducers/python/METSignificanceObjects_cfi.py index 53b78261dae84..3fe0818c9a85f 100644 --- a/RecoMET/METProducers/python/METSignificanceObjects_cfi.py +++ b/RecoMET/METProducers/python/METSignificanceObjects_cfi.py @@ -66,8 +66,10 @@ ) -selectionSequenceForMETSig = cms.Sequence( - selectedMuons+ - selectedElectrons+ +selectionTaskForMETSig = cms.Task( + selectedMuons, + selectedElectrons, selectedPhotons ) +selectionSequenceForMETSig = cms.Sequence(selectionTaskForMETSig) + diff --git a/RecoMTD/DetLayers/plugins/ETLDetLayerGeometryBuilder.cc b/RecoMTD/DetLayers/plugins/ETLDetLayerGeometryBuilder.cc index 810adc6fc948f..81f0597d9835b 100644 --- a/RecoMTD/DetLayers/plugins/ETLDetLayerGeometryBuilder.cc +++ b/RecoMTD/DetLayers/plugins/ETLDetLayerGeometryBuilder.cc @@ -66,7 +66,10 @@ pair, vector > ETLDetLayerGeometryBuilder::buildLay } } } - pair, vector > res_pair(result[0], result[1]); + // + // the first entry is Z+ ( MTD side 1), the second is Z- (MTD side 0) + // + pair, vector > res_pair(result[1], result[0]); return res_pair; } diff --git a/RecoMTD/DetLayers/test/MTDRecoGeometryAnalyzer.cc b/RecoMTD/DetLayers/test/MTDRecoGeometryAnalyzer.cc index f7f50a5454b41..cc146357fca6f 100644 --- a/RecoMTD/DetLayers/test/MTDRecoGeometryAnalyzer.cc +++ b/RecoMTD/DetLayers/test/MTDRecoGeometryAnalyzer.cc @@ -86,6 +86,20 @@ void MTDRecoGeometryAnalyzer::analyze(const Event& ev, const EventSetup& es) { LogVerbatim("MTDLayerDump") << " " << static_cast(dl - geo->allETLLayers().begin()) << " " << dumpLayer(*dl); } + LogVerbatim("MTDLayerDump") << "\n*** allForwardLayers(): " << std::fixed << std::setw(14) + << geo->allForwardLayers().size(); + for (auto dl = geo->allForwardLayers().begin(); dl != geo->allForwardLayers().end(); ++dl) { + LogVerbatim("MTDLayerDump") << " " << static_cast(dl - geo->allForwardLayers().begin()) << " " + << dumpLayer(*dl); + } + + LogVerbatim("MTDLayerDump") << "\n*** allBackwardLayers(): " << std::fixed << std::setw(14) + << geo->allBackwardLayers().size(); + for (auto dl = geo->allBackwardLayers().begin(); dl != geo->allBackwardLayers().end(); ++dl) { + LogVerbatim("MTDLayerDump") << " " << static_cast(dl - geo->allBackwardLayers().begin()) << " " + << dumpLayer(*dl); + } + LogVerbatim("MTDLayerDump") << "\n*** allLayers(): " << std::fixed << std::setw(14) << geo->allLayers().size(); for (auto dl = geo->allLayers().begin(); dl != geo->allLayers().end(); ++dl) { LogVerbatim("MTDLayerDump") << " " << static_cast(dl - geo->allLayers().begin()) << " " << dumpLayer(*dl); @@ -109,6 +123,21 @@ void MTDRecoGeometryAnalyzer::testBTLLayers(const MTDDetLayerGeometry* geo, cons << " rods = " << std::setw(14) << layer->rods().size() << " dets = " << std::setw(14) << layer->basicComponents().size(); + unsigned int irodInd(0); + for (const auto& irod : layer->rods()) { + irodInd++; + LogVerbatim("MTDLayerDump") << std::fixed << "\nRod " << irodInd << " dets = " << irod->basicComponents().size() + << "\n"; + for (const auto& imod : irod->basicComponents()) { + BTLDetId modId(imod->geographicalId().rawId()); + LogVerbatim("MTDLayerDump") << std::fixed << "BTLDetId " << modId.rawId() << " side = " << std::setw(4) + << modId.mtdSide() << " rod = " << modId.mtdRR() << " mod = " << std::setw(4) + << modId.module() << std::setw(14) << " R = " << imod->position().perp() + << std::setw(14) << " phi = " << imod->position().phi() << std::setw(14) + << " Z = " << imod->position().z(); + } + } + const BoundCylinder& cyl = layer->specificSurface(); double halfZ = cyl.bounds().length() / 2.; diff --git a/RecoMTD/DetLayers/test/mtd_cfg.py b/RecoMTD/DetLayers/test/mtd_cfg.py index e00dd3f23b0e0..36f1c074d2571 100644 --- a/RecoMTD/DetLayers/test/mtd_cfg.py +++ b/RecoMTD/DetLayers/test/mtd_cfg.py @@ -9,12 +9,8 @@ ) process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.statistics.append("debugs") -process.MessageLogger.categories.append("MTDLayerDump") -process.MessageLogger.categories.append("MTDDetLayers") -process.MessageLogger.destinations.append('debugs') process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.debugs = cms.untracked.PSet( +process.MessageLogger.files.debugs = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), INFO= cms.untracked.PSet( limit = cms.untracked.int32(0) @@ -28,10 +24,11 @@ MTDDetLayers = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), + enableStatistics = cms.untracked.bool(True) ) # Choose Tracker Geometry -process.load("Configuration.Geometry.GeometryExtended2026D50_cff") +process.load("Configuration.Geometry.GeometryExtended2026D76_cff") process.load("Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff") diff --git a/RecoMTD/TrackExtender/plugins/TrackExtenderWithMTD.cc b/RecoMTD/TrackExtender/plugins/TrackExtenderWithMTD.cc index 426eb04bce2ae..ea8b21f143d56 100644 --- a/RecoMTD/TrackExtender/plugins/TrackExtenderWithMTD.cc +++ b/RecoMTD/TrackExtender/plugins/TrackExtenderWithMTD.cc @@ -875,6 +875,14 @@ TransientTrackingRecHit::ConstRecHitContainer TrackExtenderWithMTDTglobalPosition().z()) > std::abs(output[1]->globalPosition().z())) { + std::reverse(output.begin(), output.end()); + } + } return output; } diff --git a/RecoMuon/Configuration/python/DisplacedMuonSeededStep_cff.py b/RecoMuon/Configuration/python/DisplacedMuonSeededStep_cff.py index 07a2138b13a98..f6892e055db72 100644 --- a/RecoMuon/Configuration/python/DisplacedMuonSeededStep_cff.py +++ b/RecoMuon/Configuration/python/DisplacedMuonSeededStep_cff.py @@ -7,43 +7,44 @@ #for displaced global muons import RecoTracker.SpecialSeedGenerators.outInSeedsFromStandaloneMuons_cfi muonSeededSeedsOutInDisplaced = RecoTracker.SpecialSeedGenerators.outInSeedsFromStandaloneMuons_cfi.outInSeedsFromStandaloneMuons.clone( - src = "earlyDisplacedMuons", + src = "earlyDisplacedMuons", + fromVertex = False ) -muonSeededSeedsOutInDisplaced.fromVertex = cms.bool(False) ###------------- MeasurementEstimator, defining the searcgh window for pattern recongnition ---------------- #for displaced global muons import TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi muonSeededMeasurementEstimatorForOutInDisplaced = TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi.Chi2MeasurementEstimator.clone( - ComponentName = cms.string('muonSeededMeasurementEstimatorForOutInDisplaced'), - MaxChi2 = cms.double(30.0), ## was 30 ## TO BE TUNED - nSigma = cms.double(3.), ## was 3 ## TO BE TUNED + ComponentName = 'muonSeededMeasurementEstimatorForOutInDisplaced', + MaxChi2 = 30.0, ## was 30 ## TO BE TUNED + nSigma = 3., ## was 3 ## TO BE TUNED ) ###------------- TrajectoryFilter, defining selections on the trajectories while building them ---------------- #for displaced global muons import RecoTracker.IterativeTracking.MuonSeededStep_cff -muonSeededTrajectoryFilterForOutInDisplaced = RecoTracker.IterativeTracking.MuonSeededStep_cff.muonSeededTrajectoryFilterForInOut.clone() -muonSeededTrajectoryFilterForOutInDisplaced.constantValueForLostHitsFractionFilter = 10 ## allow more lost hits -muonSeededTrajectoryFilterForOutInDisplaced.minimumNumberOfHits = 5 ## allow more lost hits +muonSeededTrajectoryFilterForOutInDisplaced = RecoTracker.IterativeTracking.MuonSeededStep_cff.muonSeededTrajectoryFilterForInOut.clone( + constantValueForLostHitsFractionFilter = 10, ## allow more lost hits + minimumNumberOfHits = 5 ## allow more lost hits +) ###------------- TrajectoryBuilders ---------------- #for displaced global muons muonSeededTrajectoryBuilderForOutInDisplaced = RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi.GroupedCkfTrajectoryBuilder.clone( - foundHitBonus = cms.double(1000.0), - lostHitPenalty = cms.double(1.0), - maxCand = cms.int32(3), - estimator = cms.string('muonSeededMeasurementEstimatorForOutInDisplaced'), - trajectoryFilter = cms.PSet(refToPSet_ = cms.string('muonSeededTrajectoryFilterForOutInDisplaced')), - inOutTrajectoryFilter = cms.PSet(refToPSet_ = cms.string('muonSeededTrajectoryFilterForOutInDisplaced')), # not sure if it is used - minNrOfHitsForRebuild = cms.int32(5), - requireSeedHitsInRebuild = cms.bool(True), - keepOriginalIfRebuildFails = cms.bool(False), + foundHitBonus = 1000.0, + lostHitPenalty = 1.0, + maxCand = 3, + estimator = 'muonSeededMeasurementEstimatorForOutInDisplaced', + trajectoryFilter = dict(refToPSet_ = 'muonSeededTrajectoryFilterForOutInDisplaced'), + inOutTrajectoryFilter = dict(refToPSet_ = 'muonSeededTrajectoryFilterForOutInDisplaced'), # not sure if it is used + minNrOfHitsForRebuild = 5, + requireSeedHitsInRebuild = True, + keepOriginalIfRebuildFails = False, ) ######## TRACK CANDIDATE MAKERS #for displaced global muons muonSeededTrackCandidatesOutInDisplaced = RecoTracker.CkfPattern.CkfTrackCandidates_cfi.ckfTrackCandidates.clone( - src = cms.InputTag("muonSeededSeedsOutInDisplaced"), - TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string("muonSeededTrajectoryBuilderForOutInDisplaced")), - TrajectoryCleaner = cms.string('muonSeededTrajectoryCleanerBySharedHits'), + src = "muonSeededSeedsOutInDisplaced", + TrajectoryBuilderPSet = dict(refToPSet_ = "muonSeededTrajectoryBuilderForOutInDisplaced"), + TrajectoryCleaner = 'muonSeededTrajectoryCleanerBySharedHits', numHitsForSeedCleaner = cms.int32(50), onlyPixelHitsForSeedCleaner = cms.bool(False), ) @@ -51,15 +52,15 @@ ######## TRACK PRODUCERS #for displaced global muon muonSeededTracksOutInDisplaced = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone( - src = cms.InputTag("muonSeededTrackCandidatesOutInDisplaced"), - AlgorithmName = cms.string('muonSeededStepOutIn'), - Fitter = cms.string("muonSeededFittingSmootherWithOutliersRejectionAndRK"), + src = "muonSeededTrackCandidatesOutInDisplaced", + AlgorithmName = 'muonSeededStepOutIn', + Fitter = "muonSeededFittingSmootherWithOutliersRejectionAndRK", ) #for displaced global muons -muonSeededTracksOutInDisplacedClassifier = RecoTracker.IterativeTracking.MuonSeededStep_cff.muonSeededTracksOutInClassifier.clone() -muonSeededTracksOutInDisplacedClassifier.src='muonSeededTracksOutInDisplaced' - +muonSeededTracksOutInDisplacedClassifier = RecoTracker.IterativeTracking.MuonSeededStep_cff.muonSeededTracksOutInClassifier.clone( + src='muonSeededTracksOutInDisplaced' +) #for displaced global muons muonSeededStepCoreDisplacedTask = cms.Task( diff --git a/RecoMuon/CosmicMuonProducer/src/CosmicMuonSmoother.cc b/RecoMuon/CosmicMuonProducer/src/CosmicMuonSmoother.cc index b09410e7399f7..331783d21a448 100644 --- a/RecoMuon/CosmicMuonProducer/src/CosmicMuonSmoother.cc +++ b/RecoMuon/CosmicMuonProducer/src/CosmicMuonSmoother.cc @@ -196,8 +196,8 @@ vector CosmicMuonSmoother::fit(const TrajectorySeed& seed, } else { LogTrace(category_) << "predicted state invalid"; } - if (!predTsos.isValid()) { - LogTrace(category_) << "Error: predTsos is still invalid forward fit."; + if (!predTsos.isValid() || predTsos.globalPosition().mag2() > 1.e12) { + LogTrace(category_) << "Error: predTsos is still invalid or too far in forward fit."; // return vector(); continue; } else if ((**ihit).isValid()) { diff --git a/RecoMuon/DetLayers/src/MuonGEMDetLayerGeometryBuilder.cc b/RecoMuon/DetLayers/src/MuonGEMDetLayerGeometryBuilder.cc index ce68183184fad..41e627894d354 100644 --- a/RecoMuon/DetLayers/src/MuonGEMDetLayerGeometryBuilder.cc +++ b/RecoMuon/DetLayers/src/MuonGEMDetLayerGeometryBuilder.cc @@ -9,7 +9,6 @@ #include #include -#include "Utilities/BinningTools/interface/ClusterizingHistogram.h" #include @@ -22,103 +21,78 @@ MuonGEMDetLayerGeometryBuilder::~MuonGEMDetLayerGeometryBuilder() {} // Builds the forward (first) and backward (second) layers // Builds etaPartitions (for rechits) pair, vector > MuonGEMDetLayerGeometryBuilder::buildEndcapLayers(const GEMGeometry& geo) { - vector result[2]; + vector endcapLayers[2]; - for (int endcap = -1; endcap <= 1; endcap += 2) { - int iendcap = (endcap == 1) ? 0 : 1; // +1: forward, -1: backward - - for (int station = GEMDetId::minStationId; station <= GEMDetId::maxStationId; ++station) { - for (int layer = GEMDetId::minLayerId + 1; layer <= GEMDetId::maxLayerId; ++layer) { - vector rolls, rings, chambers; - for (int ring = GEMDetId::minRingId; ring <= GEMDetId::maxRingId; ++ring) - rings.push_back(ring); - for (int chamber = GEMDetId::minChamberId + 1; chamber <= GEMDetId::maxChamberId; chamber++) - chambers.push_back(chamber); - for (int roll = GEMDetId::minRollId + 1; roll <= GEMDetId::maxRollId; ++roll) - rolls.push_back(roll); - - MuRingForwardDoubleLayer* ringLayer = buildLayer(endcap, rings, station, layer, chambers, rolls, geo); - - if (ringLayer) - result[iendcap].push_back(ringLayer); - } - } - } - pair, vector > res_pair(result[0], result[1]); - - return res_pair; -} - -MuRingForwardDoubleLayer* MuonGEMDetLayerGeometryBuilder::buildLayer(int endcap, - vector& rings, - int station, - int layer, - vector& chambers, - vector& rolls, - const GEMGeometry& geo) { const std::string metname = "Muon|RecoMuon|RecoMuonDetLayers|MuonGEMDetLayerGeometryBuilder"; - MuRingForwardDoubleLayer* result = nullptr; - vector frontRings, backRings; + for (auto st : geo.stations()) { + const int maxLayerId = (st->station() == GEMDetId::minStationId0) ? GEMDetId::maxLayerId0 : GEMDetId::maxLayerId; + for (int layer = GEMDetId::minLayerId + 1; layer <= maxLayerId; ++layer) { + ForwardDetLayer* forwardLayer = nullptr; + vector frontRings, backRings; - for (std::vector::iterator ring = rings.begin(); ring != rings.end() - 2; ring++) { - for (vector::iterator roll = rolls.begin(); roll != rolls.end(); roll++) { - vector frontDets, backDets; + for (int roll = GEMDetId::minRollId + 1; roll <= GEMDetId::maxRollId; ++roll) { + vector frontDets, backDets; - for (std::vector::iterator chamber = chambers.begin(); chamber < chambers.end(); chamber++) { - GEMDetId gemId(endcap, (*ring), station, layer, (*chamber), (*roll)); + for (auto sc : st->superChambers()) { + auto ch = sc->chamber(layer); + if (ch == nullptr) + continue; - const GeomDet* geomDet = geo.idToDet(gemId); + auto etaP = ch->etaPartition(roll); + if (etaP == nullptr) + continue; - if (geomDet != nullptr) { - bool isInFront = isFront(gemId); + bool isInFront = isFront(etaP->id()); if (isInFront) { - frontDets.push_back(geomDet); + frontDets.push_back(etaP); } else { - backDets.push_back(geomDet); + backDets.push_back(etaP); } - LogTrace(metname) << "get GEM Endcap roll " << gemId << (isInFront ? "front" : "back ") - << " at R=" << geomDet->position().perp() << ", phi=" << geomDet->position().phi() - << ", Z=" << geomDet->position().z(); + } + + if (!frontDets.empty()) { + precomputed_value_sort(frontDets.begin(), frontDets.end(), geomsort::DetPhi()); + frontRings.push_back(new MuDetRing(frontDets)); + LogTrace(metname) << "New front ring with " << frontDets.size() + << " chambers at z=" << frontRings.back()->position().z(); + } + if (!backDets.empty()) { + precomputed_value_sort(backDets.begin(), backDets.end(), geomsort::DetPhi()); + backRings.push_back(new MuDetRing(backDets)); + LogTrace(metname) << "New back ring with " << backDets.size() + << " chambers at z=" << backRings.back()->position().z(); } } - if (!frontDets.empty()) { - precomputed_value_sort(frontDets.begin(), frontDets.end(), geomsort::DetPhi()); - frontRings.push_back(new MuDetRing(frontDets)); - LogTrace(metname) << "New front ring with " << frontDets.size() - << " chambers at z=" << frontRings.back()->position().z(); + if (!frontRings.empty()) { + if (st->station() == GEMDetId::minStationId0) + forwardLayer = new MuRingForwardLayer(frontRings); + else if (!backRings.empty()) + forwardLayer = new MuRingForwardDoubleLayer(frontRings, backRings); } - if (!backDets.empty()) { - precomputed_value_sort(backDets.begin(), backDets.end(), geomsort::DetPhi()); - backRings.push_back(new MuDetRing(backDets)); - LogTrace(metname) << "New back ring with " << backDets.size() - << " chambers at z=" << backRings.back()->position().z(); + + if (forwardLayer != nullptr) { + LogTrace(metname) << "New MuRingForwardLayer with " << frontRings.size() << " and " << backRings.size() + << " rings, at Z " << forwardLayer->position().z() + << " R1: " << forwardLayer->specificSurface().innerRadius() + << " R2: " << forwardLayer->specificSurface().outerRadius(); + + int iendcap = (st->region() == 1) ? 0 : 1; + endcapLayers[iendcap].push_back(forwardLayer); } } } - // How should they be sorted? - // precomputed_value_sort(muDetRods.begin(), muDetRods.end(), geomsort::ExtractZ()); - if (!backRings.empty() && !frontRings.empty()) - result = new MuRingForwardDoubleLayer(frontRings, backRings); - else - result = nullptr; - if (result != nullptr) { - LogTrace(metname) << "New MuRingForwardLayer with " << frontRings.size() << " and " << backRings.size() - << " rings, at Z " << result->position().z() << " R1: " << result->specificSurface().innerRadius() - << " R2: " << result->specificSurface().outerRadius(); - } - return result; + pair, vector > res_pair(endcapLayers[0], endcapLayers[1]); + return res_pair; } bool MuonGEMDetLayerGeometryBuilder::isFront(const GEMDetId& gemId) { - bool result = false; - int chamber = gemId.chamber(); + // ME0s do not currently have an arrangement of which are front and which are back, going to always return true + if (gemId.station() == GEMDetId::minStationId0) + return true; - if (chamber % 2 == 0) - result = !result; - - return result; + return (gemId.chamber() % 2 == 0); } MuDetRing* MuonGEMDetLayerGeometryBuilder::makeDetRing(vector& geomDets) { diff --git a/RecoMuon/DetLayers/src/MuonGEMDetLayerGeometryBuilder.h b/RecoMuon/DetLayers/src/MuonGEMDetLayerGeometryBuilder.h index 28d3747baf9f6..39d6f8623716d 100644 --- a/RecoMuon/DetLayers/src/MuonGEMDetLayerGeometryBuilder.h +++ b/RecoMuon/DetLayers/src/MuonGEMDetLayerGeometryBuilder.h @@ -9,6 +9,8 @@ */ class DetLayer; +class ForwardDetLayer; +class MuRingForwardLayer; class MuRingForwardDoubleLayer; class MuDetRing; @@ -29,13 +31,6 @@ class MuonGEMDetLayerGeometryBuilder { static std::pair, std::vector > buildEndcapLayers(const GEMGeometry& geo); private: - static MuRingForwardDoubleLayer* buildLayer(int endcap, - std::vector& rings, - int station, - int layer, - std::vector& chambers, - std::vector& rolls, - const GEMGeometry& geo); static bool isFront(const GEMDetId& gemId); static MuDetRing* makeDetRing(std::vector& geomDets); }; diff --git a/RecoMuon/GlobalMuonProducer/python/globalMuons_cfi.py b/RecoMuon/GlobalMuonProducer/python/globalMuons_cfi.py index 57c440e5885c3..3b707ff8b0968 100644 --- a/RecoMuon/GlobalMuonProducer/python/globalMuons_cfi.py +++ b/RecoMuon/GlobalMuonProducer/python/globalMuons_cfi.py @@ -13,7 +13,7 @@ MuonCollectionLabel = cms.InputTag("standAloneMuons","UpdatedAtVtx") ) -globalMuons.GLBTrajBuilderParameters.GlobalMuonTrackMatcher.Propagator = cms.string('SmartPropagatorRK') +globalMuons.GLBTrajBuilderParameters.GlobalMuonTrackMatcher.Propagator = 'SmartPropagatorRK' globalMuons.GLBTrajBuilderParameters.TrackTransformer.Propagator = cms.string('SmartPropagatorAnyRK') # FastSim has no template fit on tracker hits diff --git a/RecoMuon/GlobalTrackingTools/plugins/GlobalTrackQualityProducer.cc b/RecoMuon/GlobalTrackingTools/plugins/GlobalTrackQualityProducer.cc index 73bb76d6824f7..abd24be66857a 100644 --- a/RecoMuon/GlobalTrackingTools/plugins/GlobalTrackQualityProducer.cc +++ b/RecoMuon/GlobalTrackingTools/plugins/GlobalTrackQualityProducer.cc @@ -143,14 +143,15 @@ void GlobalTrackQualityProducer::produce(edm::Event& iEvent, const edm::EventSet if (!staTrack.isNull()) LogTrace(theCategory) << "GLBQual: Used UpdatedAtVtx : " - << (iEvent.getProvenance(staTrack.id()).productInstanceName() == + << (iEvent.getStableProvenance(staTrack.id()).productInstanceName() == std::string("UpdatedAtVtx")); float maxFloat01 = std::numeric_limits::max() * 0.1; // a better solution would be to use float above .. m/be not reco::MuonQuality muQual; if (!staTrack.isNull()) - muQual.updatedSta = iEvent.getProvenance(staTrack.id()).productInstanceName() == std::string("UpdatedAtVtx"); + muQual.updatedSta = + iEvent.getStableProvenance(staTrack.id()).productInstanceName() == std::string("UpdatedAtVtx"); muQual.trkKink = thisKink.first > maxFloat01 ? maxFloat01 : thisKink.first; muQual.glbKink = thisKink.second > maxFloat01 ? maxFloat01 : thisKink.second; muQual.trkRelChi2 = relative_tracker_chi2 > maxFloat01 ? maxFloat01 : relative_tracker_chi2; diff --git a/RecoMuon/L2MuonProducer/python/L2Muons_cff.py b/RecoMuon/L2MuonProducer/python/L2Muons_cff.py index 1c87a98089424..470b4d5828046 100644 --- a/RecoMuon/L2MuonProducer/python/L2Muons_cff.py +++ b/RecoMuon/L2MuonProducer/python/L2Muons_cff.py @@ -5,25 +5,27 @@ # from Geometry.CommonTopologies.bareGlobalTrackingGeometry_cfi import * # from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * import TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi -EstimatorForSTA = TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi.Chi2MeasurementEstimator.clone() +EstimatorForSTA = TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi.Chi2MeasurementEstimator.clone( + ComponentName = 'Chi2STA', + MaxChi2 = 1000. +) import TrackingTools.TrackFitters.KFTrajectoryFitter_cfi -KFTrajectoryFitterForSTA = TrackingTools.TrackFitters.KFTrajectoryFitter_cfi.KFTrajectoryFitter.clone() +KFTrajectoryFitterForSTA = TrackingTools.TrackFitters.KFTrajectoryFitter_cfi.KFTrajectoryFitter.clone( + ComponentName = 'KFFitterSTA', + Propagator = 'SteppingHelixPropagatorAny', + Estimator = 'Chi2STA' +) import TrackingTools.TrackFitters.KFTrajectorySmoother_cfi -KFTrajectorySmootherForSTA = TrackingTools.TrackFitters.KFTrajectorySmoother_cfi.KFTrajectorySmoother.clone() +KFTrajectorySmootherForSTA = TrackingTools.TrackFitters.KFTrajectorySmoother_cfi.KFTrajectorySmoother.clone( + ComponentName = 'KFSmootherSTA', + Propagator = 'SteppingHelixPropagatorOpposite', + Estimator = 'Chi2STA' +) import TrackingTools.TrackFitters.KFFittingSmoother_cfi -KFFittingSmootheForSTA = TrackingTools.TrackFitters.KFFittingSmoother_cfi.KFFittingSmoother.clone() +KFFittingSmootheForSTA = TrackingTools.TrackFitters.KFFittingSmoother_cfi.KFFittingSmoother.clone( + ComponentName = 'KFFitterSmootherSTA', + Fitter = 'KFFitterSTA', + Smoother = 'KFSmootherSTA' +) # Stand Alone Muons Producer from RecoMuon.L2MuonProducer.L2Muons_cfi import * -EstimatorForSTA.ComponentName = 'Chi2STA' -EstimatorForSTA.MaxChi2 = 1000. -KFTrajectoryFitterForSTA.ComponentName = 'KFFitterSTA' -KFTrajectoryFitterForSTA.Propagator = 'SteppingHelixPropagatorAny' -KFTrajectoryFitterForSTA.Estimator = 'Chi2STA' -KFTrajectorySmootherForSTA.ComponentName = 'KFSmootherSTA' -KFTrajectorySmootherForSTA.Propagator = 'SteppingHelixPropagatorOpposite' -KFTrajectorySmootherForSTA.Estimator = 'Chi2STA' -KFFittingSmootheForSTA.ComponentName = 'KFFitterSmootherSTA' -KFFittingSmootheForSTA.Fitter = 'KFFitterSTA' -KFFittingSmootheForSTA.Smoother = 'KFSmootherSTA' - - diff --git a/RecoMuon/L2MuonSeedGenerator/plugins/BuildFile.xml b/RecoMuon/L2MuonSeedGenerator/plugins/BuildFile.xml new file mode 100644 index 0000000000000..ca4eb86f8e325 --- /dev/null +++ b/RecoMuon/L2MuonSeedGenerator/plugins/BuildFile.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/RecoMuon/L2MuonSeedGenerator/plugins/L2MuonSeedGeneratorFromL1TkMu.cc b/RecoMuon/L2MuonSeedGenerator/plugins/L2MuonSeedGeneratorFromL1TkMu.cc new file mode 100644 index 0000000000000..b3768cdb06a34 --- /dev/null +++ b/RecoMuon/L2MuonSeedGenerator/plugins/L2MuonSeedGeneratorFromL1TkMu.cc @@ -0,0 +1,477 @@ +/* \class L2MuonSeedGeneratorFromL1TkMu + * + * L2 muon seed generator: + * Transform the L1TkMuon informations in seeds + * for the L2 muon reconstruction + * (mimicking L2MuonSeedGeneratorFromL1T) + * + * Author: H. Kwon + * Modified by M. Oh + */ + +// Framework +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" + +// Data Formats +#include "DataFormats/MuonSeed/interface/L2MuonTrajectorySeed.h" +#include "DataFormats/MuonSeed/interface/L2MuonTrajectorySeedCollection.h" +#include "DataFormats/TrajectoryState/interface/PTrajectoryStateOnDet.h" +#include "DataFormats/MuonDetId/interface/DTChamberId.h" +#include "DataFormats/MuonDetId/interface/CSCDetId.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/GeometrySurface/interface/BoundCylinder.h" +#include "DataFormats/Math/interface/deltaR.h" +#include "DataFormats/L1Trigger/interface/Muon.h" +#include "DataFormats/L1TCorrelator/interface/TkMuon.h" +#include "DataFormats/L1TCorrelator/interface/TkMuonFwd.h" + +#include "CLHEP/Vector/ThreeVector.h" +#include "Geometry/CommonDetUnit/interface/GeomDetEnumerators.h" +#include "TrackingTools/TrajectoryParametrization/interface/GlobalTrajectoryParameters.h" +#include "TrackingTools/TrajectoryParametrization/interface/CurvilinearTrajectoryError.h" +#include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h" +#include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h" +#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" +#include "TrackingTools/KalmanUpdators/interface/Chi2MeasurementEstimator.h" +#include "TrackingTools/DetLayers/interface/DetLayer.h" + +#include "RecoMuon/TrackingTools/interface/MuonServiceProxy.h" +#include "RecoMuon/TrackingTools/interface/MuonPatternRecoDumper.h" + +using namespace std; +using namespace edm; +using namespace l1t; + +class L2MuonSeedGeneratorFromL1TkMu : public edm::stream::EDProducer<> { +public: + /// Constructor + explicit L2MuonSeedGeneratorFromL1TkMu(const edm::ParameterSet &); + + /// Destructor + ~L2MuonSeedGeneratorFromL1TkMu() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); + void produce(edm::Event &, const edm::EventSetup &) override; + +private: + edm::InputTag source_; + edm::EDGetTokenT muCollToken_; + + edm::InputTag offlineSeedLabel_; + edm::EDGetTokenT> offlineSeedToken_; + + std::string propagatorName_; + + const double l1MinPt_; + const double l1MaxEta_; + const double minPtBarrel_; + const double minPtEndcap_; + const double minPL1Tk_; + const double minPtL1TkBarrel_; + const bool useOfflineSeed_; + const bool useUnassociatedL1_; + std::vector matchingDR_; + std::vector etaBins_; + + // parameters used in propagating L1 tracker track + // to the second muon station, numbers are + // taken from L1TkMuonProducer::propagateToGMT + static constexpr float etaBoundary_{1.1}; + static constexpr float distMB2_{550.}; + static constexpr float distME2_{850.}; + static constexpr float phiCorr0_{1.464}; + static constexpr float phiCorr1_{1.7}; + static constexpr float phiCorr2_{144.}; + + /// the event setup proxy, it takes care the services update + std::unique_ptr service_; + std::unique_ptr estimator_; + + const TrajectorySeed *associateOfflineSeedToL1(edm::Handle> &, + std::vector &, + TrajectoryStateOnSurface &, + double); +}; + +// constructors +L2MuonSeedGeneratorFromL1TkMu::L2MuonSeedGeneratorFromL1TkMu(const edm::ParameterSet &iConfig) + : source_(iConfig.getParameter("InputObjects")), + muCollToken_(consumes(source_)), + propagatorName_(iConfig.getParameter("Propagator")), + l1MinPt_(iConfig.getParameter("L1MinPt")), + l1MaxEta_(iConfig.getParameter("L1MaxEta")), + minPtBarrel_(iConfig.getParameter("SetMinPtBarrelTo")), + minPtEndcap_(iConfig.getParameter("SetMinPtEndcapTo")), + minPL1Tk_(iConfig.getParameter("MinPL1Tk")), + minPtL1TkBarrel_(iConfig.getParameter("MinPtL1TkBarrel")), + useOfflineSeed_(iConfig.getUntrackedParameter("UseOfflineSeed", false)), + useUnassociatedL1_(iConfig.getParameter("UseUnassociatedL1")), + matchingDR_(iConfig.getParameter>("MatchDR")), + etaBins_(iConfig.getParameter>("EtaMatchingBins")) { + if (useOfflineSeed_) { + offlineSeedLabel_ = iConfig.getUntrackedParameter("OfflineSeedLabel"); + offlineSeedToken_ = consumes>(offlineSeedLabel_); + + // check that number of eta bins -1 matches number of dR cones + if (matchingDR_.size() != etaBins_.size() - 1) { + throw cms::Exception("Configuration") << "Size of MatchDR " + << "does not match number of eta bins." << endl; + } + } + + // service parameters + ParameterSet serviceParameters = iConfig.getParameter("ServiceParameters"); + + // the services + service_ = std::make_unique(serviceParameters, consumesCollector()); + + // the estimator + estimator_ = std::make_unique(10000.); + + produces(); +} + +void L2MuonSeedGeneratorFromL1TkMu::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { + edm::ParameterSetDescription desc; + desc.add("InputObjects", edm::InputTag("hltGmtStage2Digis")); + desc.add("Propagator", ""); + desc.add("L1MinPt", -1.); + desc.add("L1MaxEta", 5.0); + desc.add("SetMinPtBarrelTo", 3.5); + desc.add("SetMinPtEndcapTo", 1.0); + desc.add("MinPL1Tk", 3.5); + desc.add("MinPtL1TkBarrel", 3.5); + desc.addUntracked("UseOfflineSeed", false); + desc.add("UseUnassociatedL1", true); + desc.add>("MatchDR", {0.3}); + desc.add>("EtaMatchingBins", {0., 2.5}); + desc.addUntracked("OfflineSeedLabel", edm::InputTag("")); + + edm::ParameterSetDescription psd0; + psd0.addUntracked>("Propagators", {"SteppingHelixPropagatorAny"}); + psd0.add("RPCLayers", true); + psd0.addUntracked("UseMuonNavigation", true); + desc.add("ServiceParameters", psd0); + descriptions.add("L2MuonSeedGeneratorFromL1TkMu", desc); +} + +void L2MuonSeedGeneratorFromL1TkMu::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) { + const std::string metname = "Muon|RecoMuon|L2MuonSeedGeneratorFromL1TkMu"; + MuonPatternRecoDumper debug; + + auto output = std::make_unique(); + + edm::Handle muColl; + iEvent.getByToken(muCollToken_, muColl); + LogDebug(metname) << "Number of muons " << muColl->size() << endl; + + edm::Handle> offlineSeedHandle; + vector offlineSeedMap; + if (useOfflineSeed_) { + iEvent.getByToken(offlineSeedToken_, offlineSeedHandle); + offlineSeedMap = vector(offlineSeedHandle->size(), 0); + } + + for (auto const &tkmu : *muColl) { + // L1 tracker track + auto const &it = tkmu.trkPtr(); + + // propagate the L1 tracker track to GMT + auto p3 = it->momentum(); + + float tk_p = p3.mag(); + if (tk_p < minPL1Tk_) + continue; + + float tk_pt = p3.perp(); + float tk_eta = p3.eta(); + float tk_aeta = std::abs(tk_eta); + + bool barrel = tk_aeta < etaBoundary_; + if (barrel && tk_pt < minPtL1TkBarrel_) + continue; + + float tk_phi = p3.phi(); + float tk_q = it->rInv() > 0 ? 1. : -1.; + float tk_z = it->POCA().z(); + + float dzCorrPhi = 1.; + float deta = 0; + float etaProp = tk_aeta; + + if (barrel) { + etaProp = etaBoundary_; + deta = tk_z / distMB2_ / cosh(tk_aeta); + } else { + float delta = tk_z / distME2_; //roughly scales as distance to 2nd station + if (tk_eta > 0) + delta *= -1; + dzCorrPhi = 1. + delta; + + float zOzs = tk_z / distME2_; + if (tk_eta > 0) + deta = zOzs / (1. - zOzs); + else + deta = zOzs / (1. + zOzs); + deta = deta * tanh(tk_eta); + } + float resPhi = tk_phi - phiCorr0_ * tk_q * cosh(phiCorr1_) / cosh(etaProp) / tk_pt * dzCorrPhi - M_PI / phiCorr2_; + resPhi = reco::reduceRange(resPhi); + + float pt = tk_pt; //not corrected for eloss + float eta = tk_eta + deta; + float theta = 2 * atan(exp(-eta)); + float phi = resPhi; + int charge = it->rInv() > 0 ? 1 : -1; + + if (pt < l1MinPt_ || std::abs(eta) > l1MaxEta_) + continue; + + LogDebug(metname) << "New L2 Muon Seed"; + LogDebug(metname) << "Pt = " << pt << " GeV/c"; + LogDebug(metname) << "eta = " << eta; + LogDebug(metname) << "theta = " << theta << " rad"; + LogDebug(metname) << "phi = " << phi << " rad"; + LogDebug(metname) << "charge = " << charge; + LogDebug(metname) << "In Barrel? = " << barrel; + + // Update the services + service_->update(iSetup); + + const DetLayer *detLayer = nullptr; + float radius = 0.; + + CLHEP::Hep3Vector vec(0., 1., 0.); + vec.setTheta(theta); + vec.setPhi(phi); + + DetId theid; + // Get the det layer on which the state should be put + if (barrel) { + LogDebug(metname) << "The seed is in the barrel"; + + // MB2 + theid = DTChamberId(0, 2, 0); + detLayer = service_->detLayerGeometry()->idToLayer(theid); + LogDebug(metname) << "L2 Layer: " << debug.dumpLayer(detLayer); + + const BoundSurface *sur = &(detLayer->surface()); + const BoundCylinder *bc = dynamic_cast(sur); + + radius = std::abs(bc->radius() / sin(theta)); + + LogDebug(metname) << "radius " << radius; + + if (pt < minPtBarrel_) + pt = minPtBarrel_; + } else { + LogDebug(metname) << "The seed is in the endcap"; + + // ME2 + theid = theta < Geom::pi() / 2. ? CSCDetId(1, 2, 0, 0, 0) : CSCDetId(2, 2, 0, 0, 0); + + detLayer = service_->detLayerGeometry()->idToLayer(theid); + LogDebug(metname) << "L2 Layer: " << debug.dumpLayer(detLayer); + + radius = std::abs(detLayer->position().z() / cos(theta)); + + if (pt < minPtEndcap_) + pt = minPtEndcap_; + } + + vec.setMag(radius); + + GlobalPoint pos(vec.x(), vec.y(), vec.z()); + + GlobalVector mom(pt * cos(phi), pt * sin(phi), pt * cos(theta) / sin(theta)); + + GlobalTrajectoryParameters param(pos, mom, charge, &*service_->magneticField()); + AlgebraicSymMatrix55 mat; + + mat[0][0] = (0.25 / pt) * (0.25 / pt); // sigma^2(charge/abs_momentum) + if (!barrel) + mat[0][0] = (0.4 / pt) * (0.4 / pt); + + mat[1][1] = 0.05 * 0.05; // sigma^2(lambda) + mat[2][2] = 0.2 * 0.2; // sigma^2(phi) + mat[3][3] = 20. * 20.; // sigma^2(x_transverse)) + mat[4][4] = 20. * 20.; // sigma^2(y_transverse)) + + CurvilinearTrajectoryError error(mat); + + const FreeTrajectoryState state(param, error); + + LogDebug(metname) << "Free trajectory State from the parameters"; + LogDebug(metname) << debug.dumpFTS(state); + + // Propagate the state on the MB2/ME2 surface + TrajectoryStateOnSurface tsos = service_->propagator(propagatorName_)->propagate(state, detLayer->surface()); + + LogDebug(metname) << "State after the propagation on the layer"; + LogDebug(metname) << debug.dumpLayer(detLayer); + LogDebug(metname) << debug.dumpTSOS(tsos); + + double dRcone = matchingDR_[0]; + if (std::abs(eta) < etaBins_.back()) { + std::vector::iterator lowEdge = std::upper_bound(etaBins_.begin(), etaBins_.end(), std::abs(eta)); + dRcone = matchingDR_.at(lowEdge - etaBins_.begin() - 1); + } + + if (tsos.isValid()) { + edm::OwnVector container; + + if (useOfflineSeed_) { + // Get the compatible dets on the layer + std::vector> detsWithStates = + detLayer->compatibleDets(tsos, *service_->propagator(propagatorName_), *estimator_); + + if (detsWithStates.empty() && barrel) { + // Fallback solution using ME2, try again to propagate but using ME2 as reference + DetId fallback_id; + theta < Geom::pi() / 2. ? fallback_id = CSCDetId(1, 2, 0, 0, 0) : fallback_id = CSCDetId(2, 2, 0, 0, 0); + const DetLayer *ME2DetLayer = service_->detLayerGeometry()->idToLayer(fallback_id); + + tsos = service_->propagator(propagatorName_)->propagate(state, ME2DetLayer->surface()); + detsWithStates = ME2DetLayer->compatibleDets(tsos, *service_->propagator(propagatorName_), *estimator_); + } + + if (!detsWithStates.empty()) { + TrajectoryStateOnSurface newTSOS = detsWithStates.front().second; + const GeomDet *newTSOSDet = detsWithStates.front().first; + + LogDebug(metname) << "Most compatible det"; + LogDebug(metname) << debug.dumpMuonId(newTSOSDet->geographicalId()); + + if (newTSOS.isValid()) { + LogDebug(metname) << "pos: (r=" << newTSOS.globalPosition().mag() + << ", phi=" << newTSOS.globalPosition().phi() + << ", eta=" << newTSOS.globalPosition().eta() << ")"; + LogDebug(metname) << "mom: (q*pt=" << newTSOS.charge() * newTSOS.globalMomentum().perp() + << ", phi=" << newTSOS.globalMomentum().phi() + << ", eta=" << newTSOS.globalMomentum().eta() << ")"; + + const TrajectorySeed *assoOffseed = + associateOfflineSeedToL1(offlineSeedHandle, offlineSeedMap, newTSOS, dRcone); + + if (assoOffseed != nullptr) { + PTrajectoryStateOnDet const &seedTSOS = assoOffseed->startingState(); + for (auto const &recHit : assoOffseed->recHits()) { + container.push_back(recHit); + } + auto dummyRef = edm::Ref(); + output->emplace_back(L2MuonTrajectorySeed(seedTSOS, container, alongMomentum, dummyRef)); + } else { + if (useUnassociatedL1_) { + // convert the TSOS into a PTSOD + PTrajectoryStateOnDet const &seedTSOS = + trajectoryStateTransform::persistentState(newTSOS, newTSOSDet->geographicalId().rawId()); + auto dummyRef = edm::Ref(); + output->emplace_back(L2MuonTrajectorySeed(seedTSOS, container, alongMomentum, dummyRef)); + } + } + } + } + } else { + // convert the TSOS into a PTSOD + PTrajectoryStateOnDet const &seedTSOS = trajectoryStateTransform::persistentState(tsos, theid.rawId()); + auto dummyRef = edm::Ref(); + output->emplace_back(L2MuonTrajectorySeed(seedTSOS, container, alongMomentum, dummyRef)); + } + } + } + + iEvent.put(std::move(output)); +} + +// FIXME: does not resolve ambiguities yet! +const TrajectorySeed *L2MuonSeedGeneratorFromL1TkMu::associateOfflineSeedToL1( + edm::Handle> &offseeds, + std::vector &offseedMap, + TrajectoryStateOnSurface &newTsos, + double dRcone) { + if (dRcone < 0.) + return nullptr; + + const std::string metlabel = "Muon|RecoMuon|L2MuonSeedGeneratorFromL1TkMu"; + MuonPatternRecoDumper debugtmp; + + edm::View::const_iterator offseed, endOffseed = offseeds->end(); + const TrajectorySeed *selOffseed = nullptr; + double bestDr2 = 99999.; + unsigned int nOffseed(0); + int lastOffseed(-1); + + for (offseed = offseeds->begin(); offseed != endOffseed; ++offseed, ++nOffseed) { + if (offseedMap[nOffseed] != 0) + continue; + GlobalPoint glbPos = service_->trackingGeometry() + ->idToDet(offseed->startingState().detId()) + ->surface() + .toGlobal(offseed->startingState().parameters().position()); + GlobalVector glbMom = service_->trackingGeometry() + ->idToDet(offseed->startingState().detId()) + ->surface() + .toGlobal(offseed->startingState().parameters().momentum()); + + // Preliminary check + double preDr2 = deltaR2(newTsos.globalPosition().eta(), newTsos.globalPosition().phi(), glbPos.eta(), glbPos.phi()); + if (preDr2 > 1.0) + continue; + + const FreeTrajectoryState offseedFTS( + glbPos, glbMom, offseed->startingState().parameters().charge(), &*service_->magneticField()); + TrajectoryStateOnSurface offseedTsos = + service_->propagator(propagatorName_)->propagate(offseedFTS, newTsos.surface()); + LogDebug(metlabel) << "Offline seed info: Det and State" << std::endl; + LogDebug(metlabel) << debugtmp.dumpMuonId(offseed->startingState().detId()) << std::endl; + LogDebug(metlabel) << "pos: (r=" << offseedFTS.position().mag() << ", phi=" << offseedFTS.position().phi() + << ", eta=" << offseedFTS.position().eta() << ")" << std::endl; + LogDebug(metlabel) << "mom: (q*pt=" << offseedFTS.charge() * offseedFTS.momentum().perp() + << ", phi=" << offseedFTS.momentum().phi() << ", eta=" << offseedFTS.momentum().eta() << ")" + << std::endl + << std::endl; + + if (offseedTsos.isValid()) { + LogDebug(metlabel) << "Offline seed info after propagation to L1 layer:" << std::endl; + LogDebug(metlabel) << "pos: (r=" << offseedTsos.globalPosition().mag() + << ", phi=" << offseedTsos.globalPosition().phi() + << ", eta=" << offseedTsos.globalPosition().eta() << ")" << std::endl; + LogDebug(metlabel) << "mom: (q*pt=" << offseedTsos.charge() * offseedTsos.globalMomentum().perp() + << ", phi=" << offseedTsos.globalMomentum().phi() + << ", eta=" << offseedTsos.globalMomentum().eta() << ")" << std::endl + << std::endl; + double newDr2 = deltaR2(newTsos.globalPosition().eta(), + newTsos.globalPosition().phi(), + offseedTsos.globalPosition().eta(), + offseedTsos.globalPosition().phi()); + LogDebug(metlabel) << " -- DR = " << newDr2 << std::endl; + if (newDr2 < bestDr2 && newDr2 < dRcone * dRcone) { + LogDebug(metlabel) << " --> OK! " << newDr2 << std::endl << std::endl; + selOffseed = &*offseed; + bestDr2 = newDr2; + offseedMap[nOffseed] = 1; + if (lastOffseed > -1) + offseedMap[lastOffseed] = 0; + lastOffseed = nOffseed; + } else { + LogDebug(metlabel) << " --> Rejected. " << newDr2 << std::endl << std::endl; + } + } else { + LogDebug(metlabel) << "Invalid offline seed TSOS after propagation!" << std::endl << std::endl; + } + } + + return selOffseed; +} + +//define this as a plug-in +DEFINE_FWK_MODULE(L2MuonSeedGeneratorFromL1TkMu); diff --git a/RecoMuon/L3MuonProducer/src/L3TkMuonProducer.cc b/RecoMuon/L3MuonProducer/src/L3TkMuonProducer.cc index 12a9172028711..f1121655c7d62 100644 --- a/RecoMuon/L3MuonProducer/src/L3TkMuonProducer.cc +++ b/RecoMuon/L3MuonProducer/src/L3TkMuonProducer.cc @@ -143,7 +143,7 @@ void L3TkMuonProducer::produce(Event& event, const EventSetup& eventSetup) { //check whether there is a "shared" seed in addition if (!gotL3seeds) { //need to fetch the handle from the ref - const edm::Provenance& seedsProv = event.getProvenance(l3seedRef.id()); + const edm::StableProvenance& seedsProv = event.getStableProvenance(l3seedRef.id()); edm::InputTag l3seedsTag(seedsProv.moduleLabel(), seedsProv.productInstanceName(), seedsProv.processName()); event.getByLabel(l3seedsTag, l3seeds); gotL3seeds = true; diff --git a/RecoMuon/MuonIdentification/plugins/MuonIdProducer.cc b/RecoMuon/MuonIdentification/plugins/MuonIdProducer.cc index 6c5e60b1b053b..7901e86d6c6aa 100644 --- a/RecoMuon/MuonIdentification/plugins/MuonIdProducer.cc +++ b/RecoMuon/MuonIdentification/plugins/MuonIdProducer.cc @@ -682,7 +682,7 @@ void MuonIdProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) // Fill global quality information fillGlbQuality(iEvent, iSetup, muon); } - LogDebug("MuonIdentification"); + LogDebug("MuonIdentification") << ""; if (fillTrackerKink_) { fillTrackerKink(muon); diff --git a/RecoMuon/MuonIdentification/plugins/cuts/MuonDxyCut.cc b/RecoMuon/MuonIdentification/plugins/cuts/MuonDxyCut.cc index e4d9aacf8466c..6f1c9172accba 100644 --- a/RecoMuon/MuonIdentification/plugins/cuts/MuonDxyCut.cc +++ b/RecoMuon/MuonIdentification/plugins/cuts/MuonDxyCut.cc @@ -1,5 +1,6 @@ #include "PhysicsTools/SelectorUtils/interface/CutApplicatorBase.h" #include "PhysicsTools/SelectorUtils/interface/CutApplicatorWithEventContentBase.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/MuonReco/interface/Muon.h" #include "DataFormats/MuonReco/interface/MuonSelectors.h" diff --git a/RecoMuon/MuonIdentification/plugins/cuts/MuonDzCut.cc b/RecoMuon/MuonIdentification/plugins/cuts/MuonDzCut.cc index d303c06679aca..6bec05f46030f 100644 --- a/RecoMuon/MuonIdentification/plugins/cuts/MuonDzCut.cc +++ b/RecoMuon/MuonIdentification/plugins/cuts/MuonDzCut.cc @@ -1,5 +1,6 @@ #include "PhysicsTools/SelectorUtils/interface/CutApplicatorBase.h" #include "PhysicsTools/SelectorUtils/interface/CutApplicatorWithEventContentBase.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/MuonReco/interface/Muon.h" #include "DataFormats/MuonReco/interface/MuonSelectors.h" diff --git a/RecoMuon/MuonIdentification/plugins/cuts/MuonPOGStandardCut.cc b/RecoMuon/MuonIdentification/plugins/cuts/MuonPOGStandardCut.cc index 5c7230cc7d38f..88ea6d6b4f307 100644 --- a/RecoMuon/MuonIdentification/plugins/cuts/MuonPOGStandardCut.cc +++ b/RecoMuon/MuonIdentification/plugins/cuts/MuonPOGStandardCut.cc @@ -1,5 +1,6 @@ #include "PhysicsTools/SelectorUtils/interface/CutApplicatorBase.h" #include "PhysicsTools/SelectorUtils/interface/CutApplicatorWithEventContentBase.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/MuonReco/interface/Muon.h" #include "DataFormats/MuonReco/interface/MuonSelectors.h" diff --git a/RecoMuon/MuonIsolationProducers/python/muIsoDeposits_cff.py b/RecoMuon/MuonIsolationProducers/python/muIsoDeposits_cff.py index 9e60a5e116608..404884c074e18 100644 --- a/RecoMuon/MuonIsolationProducers/python/muIsoDeposits_cff.py +++ b/RecoMuon/MuonIsolationProducers/python/muIsoDeposits_cff.py @@ -10,27 +10,21 @@ #the default set of includes from RecoMuon.MuonIsolationProducers.muIsoDeposits_setup_cff import * #the default set of modules first -#from RecoMuon.MuonIsolationProducers.muIsoDepositTk_cfi import * -#from RecoMuon.MuonIsolationProducers.muIsoDepositJets_cfi import * -#from RecoMuon.MuonIsolationProducers.muIsoDepositCalByAssociatorTowers_cfi import * from RecoMuon.MuonIsolationProducers.muIsoDepositCopies_cfi import * from RecoMuon.MuonIsolationProducers.muIsoDepositCalByAssociatorHits_cfi import * import RecoMuon.MuonIsolationProducers.muIsoDepositTk_cfi -muParamGlobalIsoDepositCtfTk = RecoMuon.MuonIsolationProducers.muIsoDepositTk_cfi.muIsoDepositTk.clone() import RecoMuon.MuonIsolationProducers.muIsoDepositCalByAssociatorTowers_cfi -muParamGlobalIsoDepositCalByAssociatorTowers = RecoMuon.MuonIsolationProducers.muIsoDepositCalByAssociatorTowers_cfi.muIsoDepositCalByAssociatorTowers.clone() -import RecoMuon.MuonIsolationProducers.muIsoDepositCalByAssociatorHits_cfi -muParamGlobalIsoDepositCalByAssociatorHits = RecoMuon.MuonIsolationProducers.muIsoDepositCalByAssociatorHits_cfi.muIsoDepositCalByAssociatorHits.clone() import RecoMuon.MuonIsolationProducers.muIsoDepositJets_cfi -muParamGlobalIsoDepositJets = RecoMuon.MuonIsolationProducers.muIsoDepositJets_cfi.muIsoDepositJets.clone() -import RecoMuon.MuonIsolationProducers.muIsoDepositTk_cfi -muParamGlobalIsoDepositGsTk = RecoMuon.MuonIsolationProducers.muIsoDepositTk_cfi.muIsoDepositTk.clone() -import RecoMuon.MuonIsolationProducers.muIsoDepositTk_cfi -muParamGlobalIsoDepositTk = RecoMuon.MuonIsolationProducers.muIsoDepositTk_cfi.muIsoDepositTk.clone() import RecoMuon.MuonIsolationProducers.muIsoDepositCal_cfi + +muParamGlobalIsoDepositCtfTk = RecoMuon.MuonIsolationProducers.muIsoDepositTk_cfi.muIsoDepositTk.clone() +muParamGlobalIsoDepositJets = RecoMuon.MuonIsolationProducers.muIsoDepositJets_cfi.muIsoDepositJets.clone() +muParamGlobalIsoDepositGsTk = RecoMuon.MuonIsolationProducers.muIsoDepositTk_cfi.muIsoDepositTk.clone() +muParamGlobalIsoDepositTk = RecoMuon.MuonIsolationProducers.muIsoDepositTk_cfi.muIsoDepositTk.clone() muParamGlobalIsoDepositCalEcal = RecoMuon.MuonIsolationProducers.muIsoDepositCal_cfi.muIsoDepositCal.clone() -import RecoMuon.MuonIsolationProducers.muIsoDepositCal_cfi muParamGlobalIsoDepositCalHcal = RecoMuon.MuonIsolationProducers.muIsoDepositCal_cfi.muIsoDepositCal.clone() +muParamGlobalIsoDepositCalByAssociatorTowers = RecoMuon.MuonIsolationProducers.muIsoDepositCalByAssociatorTowers_cfi.muIsoDepositCalByAssociatorTowers.clone() +muParamGlobalIsoDepositCalByAssociatorHits = RecoMuon.MuonIsolationProducers.muIsoDepositCalByAssociatorHits_cfi.muIsoDepositCalByAssociatorHits.clone() # # and now sequences of the above # @@ -82,5 +76,3 @@ muParamGlobalIsoDepositCalHcal.ExtractorPSet = cms.PSet( MIsoCaloExtractorHcalBlock ) - - diff --git a/RecoMuon/MuonSeedGenerator/python/mcMuonSeeds_cff.py b/RecoMuon/MuonSeedGenerator/python/mcMuonSeeds_cff.py deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_31X_cfi.py b/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_31X_cfi.py index b451fed8dd503..7fdeb6a939fc2 100644 --- a/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_31X_cfi.py +++ b/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_31X_cfi.py @@ -1,97 +1,59 @@ import FWCore.ParameterSet.Config as cms ptSeedParameterization = cms.PSet( - SMB_21 = cms.vdouble(1.04575, -0.163287, 0.0, 0.183661, -0.049415, - 0.0), - SMB_20 = cms.vdouble(0.990194, -0.058027, 0.0, 0.157433, 0.049581, - 0.0), - SMB_22 = cms.vdouble(1.389607, -0.691458, 0.0, -0.204387, 0.471755, - 0.0), - OL_2213 = cms.vdouble(0.736644, -0.65969, 0.0, -0.429713, 0.813747, - 0.0), + SMB_21 = cms.vdouble(1.04575, -0.163287, 0.0, 0.183661, -0.049415, 0.0), + SMB_20 = cms.vdouble(0.990194, -0.058027, 0.0, 0.157433, 0.049581, 0.0), + SMB_22 = cms.vdouble(1.389607, -0.691458, 0.0, -0.204387, 0.471755, 0.0), + OL_2213 = cms.vdouble(0.736644, -0.65969, 0.0, -0.429713, 0.813747, 0.0), # Sigle CSC Segments # CSCDet_Id p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - SME_11 = cms.vdouble(2.612846, -0.976852, 0.0, -5.986027, 4.000885, - 0.0), - SME_13 = cms.vdouble(0.576629, 0.010521, 0.0, 0.624575, 1.518433, - 0.0), - SME_12 = cms.vdouble(0.02713, 0.623194, 0.0, 1.623888, -0.362265, - 0.0), - SME_32 = cms.vdouble(-0.242825, 0.163158, 0.0, 183.95999, -133.799119, - 0.0), - SME_31 = cms.vdouble(-0.4583, 0.2501, 0.0, -202.733432, 92.182385, - 0.0), - SME_42 = cms.vdouble(-0.242825, 0.163158, 0.0, 183.95999, -133.799119, - 0.0), + SME_11 = cms.vdouble(2.612846, -0.976852, 0.0, -5.986027, 4.000885, 0.0), + SME_13 = cms.vdouble(0.576629, 0.010521, 0.0, 0.624575, 1.518433, 0.0), + SME_12 = cms.vdouble(0.02713, 0.623194, 0.0, 1.623888, -0.362265, 0.0), + SME_32 = cms.vdouble(-0.242825, 0.163158, 0.0, 183.95999, -133.799119, 0.0), + SME_31 = cms.vdouble(-0.4583, 0.2501, 0.0, -202.733432, 92.182385, 0.0), + SME_42 = cms.vdouble(-0.242825, 0.163158, 0.0, 183.95999, -133.799119, 0.0), # OL Parameters # Det_Layers p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - OL_1213 = cms.vdouble(1.089127, -0.865182, 0.0, 0.307029, -0.056826, - 0.0), - DT_13 = cms.vdouble(0.333344, 0.089449, -0.171128, 0.149048, -0.097795, - 0.174794), + OL_1213 = cms.vdouble(1.089127, -0.865182, 0.0, 0.307029, -0.056826, 0.0), + DT_13 = cms.vdouble(0.333344, 0.089449, -0.171128, 0.149048, -0.097795, 0.174794), # DT Parameters # Det_Stations p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - DT_12 = cms.vdouble(0.192702, 0.067231, -0.1026, 0.13832, -0.120017, - 0.175494), - DT_14 = cms.vdouble(0.380675, 0.091873, -0.172667, 0.192447, -0.04005, - 0.100509), - OL_1232 = cms.vdouble(0.19594, -0.012048, 0.0, 0.366937, -0.002214, - 0.0), - CSC_23 = cms.vdouble(-0.095236, 0.122061, -0.029852, -11.396689, 15.933598, - -4.267065), - CSC_24 = cms.vdouble(-0.049769, 0.063087, -0.011029, -13.765978, 16.296143, - -4.241835), - CSC_03 = cms.vdouble(0.498992, -0.086235, -0.025772, 2.761006, -2.667607, - 0.72802), - SMB_31 = cms.vdouble(0.5905, -0.172563, 0.0, 0.591524, -0.051003, - 0.0), + DT_12 = cms.vdouble(0.192702, 0.067231, -0.1026, 0.13832, -0.120017, 0.175494), + DT_14 = cms.vdouble(0.380675, 0.091873, -0.172667, 0.192447, -0.04005, 0.100509), + OL_1232 = cms.vdouble(0.19594, -0.012048, 0.0, 0.366937, -0.002214, 0.0), + CSC_23 = cms.vdouble(-0.095236, 0.122061, -0.029852, -11.396689, 15.933598, -4.267065), + CSC_24 = cms.vdouble(-0.049769, 0.063087, -0.011029, -13.765978, 16.296143, -4.241835), + CSC_03 = cms.vdouble(0.498992, -0.086235, -0.025772, 2.761006, -2.667607, 0.72802), + SMB_31 = cms.vdouble(0.5905, -0.172563, 0.0, 0.591524, -0.051003, 0.0), # CSC Parameters # Det_Stations p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - CSC_01 = cms.vdouble(0.155906, -0.000406, 0.0, 0.194022, -0.010181, - 0.0), - SMB_32 = cms.vdouble(0.632907, -0.255332, 0.0, 0.951006, -0.216346, - 0.0), - SMB_30 = cms.vdouble(0.54032, -0.064278, 0.0, 0.579023, -0.090837, - 0.0), - OL_2222 = cms.vdouble(0.067377, 0.0, 0.0, 0.76627, 0.0, - 0.0), + CSC_01 = cms.vdouble(0.155906, -0.000406, 0.0, 0.194022, -0.010181, 0.0), + SMB_32 = cms.vdouble(0.632907, -0.255332, 0.0, 0.951006, -0.216346, 0.0), + SMB_30 = cms.vdouble(0.54032, -0.064278, 0.0, 0.579023, -0.090837, 0.0), + OL_2222 = cms.vdouble(0.067377, 0.0, 0.0, 0.76627, 0.0, 0.0), # Sigle DT Segments # DTDet_Id p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - SMB_10 = cms.vdouble(1.350718, -0.122906, 0.0, 0.118062, -0.079225, - 0.0), - SMB_11 = cms.vdouble(1.42858, -0.157879, 0.0, 0.075437, 0.031277, - 0.0), - SMB_12 = cms.vdouble(1.920222, -0.779074, 0.0, 0.065771, 0.066339, - 0.0), - DT_23 = cms.vdouble(0.136351, 0.04724, -0.089448, 0.220512, -0.056609, - 0.167122), - DT_24 = cms.vdouble(0.186817, 0.059153, -0.111626, 0.312139, -0.156575, - 0.469607), - SME_21 = cms.vdouble(1.155785, -0.364076, 0.0, -19.122395, 13.18083, - 0.0), - SME_22 = cms.vdouble(-0.739515, 0.769174, 0.0, 58.238261, -37.114818, - 0.0), - CSC_34 = cms.vdouble(0.144321, -0.142283, 0.035636, 190.260708, -180.888643, - 43.430395), - CSC_02 = cms.vdouble(0.600235, -0.205683, 0.001113, 0.655625, -0.682129, - 0.253916), - SME_41 = cms.vdouble(-0.698854, 0.306105, 0.0, -44.919988, 17.730305, - 0.0), - DT_34 = cms.vdouble(0.040386, 0.007193, -0.016506, 1.514816, -1.460786, - 1.555718), - CSC_14 = cms.vdouble(0.952517, -0.532733, 0.084601, 1.615881, -1.630744, - 0.514139), - OL_1222 = cms.vdouble(0.251087, 0.004875, 0.0, 0.282026, -0.001649, - 0.0), - CSC_13 = cms.vdouble(1.22495, -1.792358, 0.711378, 5.271848, -6.280625, - 2.0142), - CSC_12 = cms.vdouble(-0.363549, 0.569552, -0.173186, 7.777069, -10.203618, - 3.478874) + SMB_10 = cms.vdouble(1.350718, -0.122906, 0.0, 0.118062, -0.079225, 0.0), + SMB_11 = cms.vdouble(1.42858, -0.157879, 0.0, 0.075437, 0.031277, 0.0), + SMB_12 = cms.vdouble(1.920222, -0.779074, 0.0, 0.065771, 0.066339, 0.0), + DT_23 = cms.vdouble(0.136351, 0.04724, -0.089448, 0.220512, -0.056609, 0.167122), + DT_24 = cms.vdouble(0.186817, 0.059153, -0.111626, 0.312139, -0.156575, 0.469607), + SME_21 = cms.vdouble(1.155785, -0.364076, 0.0, -19.122395, 13.18083, 0.0), + SME_22 = cms.vdouble(-0.739515, 0.769174, 0.0, 58.238261, -37.114818, 0.0), + CSC_34 = cms.vdouble(0.144321, -0.142283, 0.035636, 190.260708, -180.888643, 43.430395), + CSC_02 = cms.vdouble(0.600235, -0.205683, 0.001113, 0.655625, -0.682129, 0.253916), + SME_41 = cms.vdouble(-0.698854, 0.306105, 0.0, -44.919988, 17.730305, 0.0), + DT_34 = cms.vdouble(0.040386, 0.007193, -0.016506, 1.514816, -1.460786, 1.555718), + CSC_14 = cms.vdouble(0.952517, -0.532733, 0.084601, 1.615881, -1.630744, 0.514139), + OL_1222 = cms.vdouble(0.251087, 0.004875, 0.0, 0.282026, -0.001649, 0.0), + CSC_13 = cms.vdouble(1.22495, -1.792358, 0.711378, 5.271848, -6.280625, 2.0142), + CSC_12 = cms.vdouble(-0.363549, 0.569552, -0.173186, 7.777069, -10.203618, 3.478874) ) diff --git a/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_38T_cfi.py b/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_38T_cfi.py index 61abbe8b77867..81c47f5d93e69 100644 --- a/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_38T_cfi.py +++ b/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_38T_cfi.py @@ -1,97 +1,59 @@ import FWCore.ParameterSet.Config as cms ptSeedParameterization = cms.PSet( - SMB_21 = cms.vdouble(0.918425, -0.141199, 0.0, 0.254515, -0.111848, - 0.0), - SMB_20 = cms.vdouble(0.861314, -0.16233, 0.0, 0.248879, -0.113879, - 0.0), - SMB_22 = cms.vdouble(1.308565, -0.701634, 0.0, -0.302861, 0.675785, - 0.0), - OL_2213 = cms.vdouble(0.563218, -0.493991, 0.0, 0.943776, -0.591751, - 0.0), + SMB_21 = cms.vdouble(0.918425, -0.141199, 0.0, 0.254515, -0.111848, 0.0), + SMB_20 = cms.vdouble(0.861314, -0.16233, 0.0, 0.248879, -0.113879, 0.0), + SMB_22 = cms.vdouble(1.308565, -0.701634, 0.0, -0.302861, 0.675785, 0.0), + OL_2213 = cms.vdouble(0.563218, -0.493991, 0.0, 0.943776, -0.591751, 0.0), # Sigle CSC Segments # CSCDet_Id p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - SME_11 = cms.vdouble(2.39479, -0.888663, 0.0, -4.604546, 3.623464, - 0.0), - SME_13 = cms.vdouble(0.398851, 0.028176, 0.0, 0.567015, 2.623232, - 0.0), - SME_12 = cms.vdouble(-0.277294, 0.7616, 0.0, -0.243326, 1.446792, - 0.0), - SME_32 = cms.vdouble(-0.021912, -0.008995, 0.0, -49.779764, 30.780972, - 0.0), - SME_31 = cms.vdouble(-0.588188, 0.316961, 0.0, -95.261732, 45.444051, - 0.0), - SME_42 = cms.vdouble(-0.021912, -0.008995, 0.0, -49.779764, 30.780972, - 0.0), + SME_11 = cms.vdouble(2.39479, -0.888663, 0.0, -4.604546, 3.623464, 0.0), + SME_13 = cms.vdouble(0.398851, 0.028176, 0.0, 0.567015, 2.623232, 0.0), + SME_12 = cms.vdouble(-0.277294, 0.7616, 0.0, -0.243326, 1.446792, 0.0), + SME_32 = cms.vdouble(-0.021912, -0.008995, 0.0, -49.779764, 30.780972, 0.0), + SME_31 = cms.vdouble(-0.588188, 0.316961, 0.0, -95.261732, 45.444051, 0.0), + SME_42 = cms.vdouble(-0.021912, -0.008995, 0.0, -49.779764, 30.780972, 0.0), # OL Parameters # Det_Layers p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - OL_1213 = cms.vdouble(0.960544, -0.75644, 0.0, 0.1636, 0.114178, - 0.0), - DT_13 = cms.vdouble(0.298842, 0.076531, -0.14293, 0.219923, -0.145026, - 0.155638), + OL_1213 = cms.vdouble(0.960544, -0.75644, 0.0, 0.1636, 0.114178, 0.0), + DT_13 = cms.vdouble(0.298842, 0.076531, -0.14293, 0.219923, -0.145026, 0.155638), # DT Parameters # Det_Stations p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - DT_12 = cms.vdouble(0.176182, 0.058535, -0.090549, 0.202363, -0.203126, - 0.222219), - DT_14 = cms.vdouble(0.388423, 0.068698, -0.145925, 0.159515, 0.124299, - -0.133269), - OL_1232 = cms.vdouble(0.162626, 0.000843, 0.0, 0.396271, 0.002791, - 0.0), - CSC_23 = cms.vdouble(-0.095236, 0.122061, -0.029852, -11.396689, 15.933598, - -4.267065), - CSC_24 = cms.vdouble(-0.049769, 0.063087, -0.011029, -13.765978, 16.296143, - -4.241835), - CSC_03 = cms.vdouble(0.498992, -0.086235, -0.025772, 2.761006, -2.667607, - 0.72802), - SMB_31 = cms.vdouble(0.398661, -0.024853, 0.0, 0.863324, -0.413048, - 0.0), + DT_12 = cms.vdouble(0.176182, 0.058535, -0.090549, 0.202363, -0.203126, 0.222219), + DT_14 = cms.vdouble(0.388423, 0.068698, -0.145925, 0.159515, 0.124299, -0.133269), + OL_1232 = cms.vdouble(0.162626, 0.000843, 0.0, 0.396271, 0.002791, 0.0), + CSC_23 = cms.vdouble(-0.095236, 0.122061, -0.029852, -11.396689, 15.933598, -4.267065), + CSC_24 = cms.vdouble(-0.049769, 0.063087, -0.011029, -13.765978, 16.296143, -4.241835), + CSC_03 = cms.vdouble(0.498992, -0.086235, -0.025772, 2.761006, -2.667607, 0.72802), + SMB_31 = cms.vdouble(0.398661, -0.024853, 0.0, 0.863324, -0.413048, 0.0), # CSC Parameters # Det_Stations p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - CSC_01 = cms.vdouble(0.155906, -0.000406, 0.0, 0.194022, -0.010181, - 0.0), - SMB_32 = cms.vdouble(0.421649, -0.111654, 0.0, -0.044613, 1.134858, - 0.0), - SMB_30 = cms.vdouble(0.399628, 0.014922, 0.0, 0.665622, 0.358439, - 0.0), - OL_2222 = cms.vdouble(0.087587, 0.005729, 0.0, 0.535169, -0.087675, - 0.0), + CSC_01 = cms.vdouble(0.155906, -0.000406, 0.0, 0.194022, -0.010181, 0.0), + SMB_32 = cms.vdouble(0.421649, -0.111654, 0.0, -0.044613, 1.134858, 0.0), + SMB_30 = cms.vdouble(0.399628, 0.014922, 0.0, 0.665622, 0.358439, 0.0), + OL_2222 = cms.vdouble(0.087587, 0.005729, 0.0, 0.535169, -0.087675, 0.0), # Sigle DT Segments # DTDet_Id p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - SMB_10 = cms.vdouble(1.160532, 0.148991, 0.0, 0.182785, -0.093776, - 0.0), - SMB_11 = cms.vdouble(1.289468, -0.139653, 0.0, 0.137191, 0.01217, - 0.0), - SMB_12 = cms.vdouble(1.923091, -0.913204, 0.0, 0.161556, 0.020215, - 0.0), - DT_23 = cms.vdouble(0.120647, 0.034743, -0.070855, 0.302427, -0.21417, - 0.261012), - DT_24 = cms.vdouble(0.189527, 0.037328, -0.088523, 0.251936, 0.032411, - 0.010984), - SME_21 = cms.vdouble(0.64895, -0.148762, 0.0, -5.07676, 6.284227, - 0.0), - SME_22 = cms.vdouble(-0.624708, 0.641043, 0.0, 32.581295, -19.604264, - 0.0), - CSC_34 = cms.vdouble(0.144321, -0.142283, 0.035636, 190.260708, -180.888643, - 43.430395), - CSC_02 = cms.vdouble(0.600235, -0.205683, 0.001113, 0.655625, -0.682129, - 0.253916), - SME_41 = cms.vdouble(-0.187116, 0.076415, 0.0, -58.552583, 27.933864, - 0.0), - DT_34 = cms.vdouble(0.049146, -0.003494, -0.010099, 0.672095, 0.36459, - -0.304346), - CSC_14 = cms.vdouble(0.952517, -0.532733, 0.084601, 1.615881, -1.630744, - 0.514139), - OL_1222 = cms.vdouble(0.215915, 0.002556, 0.0, 0.313596, -0.021465, - 0.0), - CSC_13 = cms.vdouble(1.22495, -1.792358, 0.711378, 5.271848, -6.280625, - 2.0142), - CSC_12 = cms.vdouble(-0.363549, 0.569552, -0.173186, 7.777069, -10.203618, - 3.478874) + SMB_10 = cms.vdouble(1.160532, 0.148991, 0.0, 0.182785, -0.093776, 0.0), + SMB_11 = cms.vdouble(1.289468, -0.139653, 0.0, 0.137191, 0.01217, 0.0), + SMB_12 = cms.vdouble(1.923091, -0.913204, 0.0, 0.161556, 0.020215, 0.0), + DT_23 = cms.vdouble(0.120647, 0.034743, -0.070855, 0.302427, -0.21417, 0.261012), + DT_24 = cms.vdouble(0.189527, 0.037328, -0.088523, 0.251936, 0.032411, 0.010984), + SME_21 = cms.vdouble(0.64895, -0.148762, 0.0, -5.07676, 6.284227, 0.0), + SME_22 = cms.vdouble(-0.624708, 0.641043, 0.0, 32.581295, -19.604264, 0.0), + CSC_34 = cms.vdouble(0.144321, -0.142283, 0.035636, 190.260708, -180.888643, 43.430395), + CSC_02 = cms.vdouble(0.600235, -0.205683, 0.001113, 0.655625, -0.682129, 0.253916), + SME_41 = cms.vdouble(-0.187116, 0.076415, 0.0, -58.552583, 27.933864, 0.0), + DT_34 = cms.vdouble(0.049146, -0.003494, -0.010099, 0.672095, 0.36459, -0.304346), + CSC_14 = cms.vdouble(0.952517, -0.532733, 0.084601, 1.615881, -1.630744, 0.514139), + OL_1222 = cms.vdouble(0.215915, 0.002556, 0.0, 0.313596, -0.021465, 0.0), + CSC_13 = cms.vdouble(1.22495, -1.792358, 0.711378, 5.271848, -6.280625, 2.0142), + CSC_12 = cms.vdouble(-0.363549, 0.569552, -0.173186, 7.777069, -10.203618, 3.478874) ) diff --git a/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_40T_851_cfi.py b/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_40T_851_cfi.py index 07b04e7a3cbe6..8b12976d4d44d 100644 --- a/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_40T_851_cfi.py +++ b/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_40T_851_cfi.py @@ -1,97 +1,59 @@ import FWCore.ParameterSet.Config as cms ptSeedParameterization = cms.PSet( - SMB_21 = cms.vdouble(0.982838, -0.181889, 0.0, 0.394683, -0.339892, - 0.0), - SMB_20 = cms.vdouble(0.89598, -0.07901, 0.0, 0.230235, -0.006089, - 0.0), - SMB_22 = cms.vdouble(1.378972, -0.736727, 0.0, -0.136466, 0.513675, - 0.0), - OL_2213 = cms.vdouble(0.653836, -0.585322, 0.0, 0.058185, 0.274112, - 0.0), + SMB_21 = cms.vdouble(0.982838, -0.181889, 0.0, 0.394683, -0.339892, 0.0), + SMB_20 = cms.vdouble(0.89598, -0.07901, 0.0, 0.230235, -0.006089, 0.0), + SMB_22 = cms.vdouble(1.378972, -0.736727, 0.0, -0.136466, 0.513675, 0.0), + OL_2213 = cms.vdouble(0.653836, -0.585322, 0.0, 0.058185, 0.274112, 0.0), # Sigle CSC Segments # CSCDet_Id p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - SME_11 = cms.vdouble(2.74557, -1.047071, 0.0, -12.438189, 7.901606, - 0.0), - SME_13 = cms.vdouble(0.40909, -0.015486, 0.0, 0.50943, 2.419695, - 0.0), - SME_12 = cms.vdouble(-0.115064, 0.666587, 0.0, 1.864145, -0.108712, - 0.0), - SME_32 = cms.vdouble(-0.123675, 0.0724, 0.0, -61.965417, 47.181913, - 0.0), - SME_31 = cms.vdouble(-0.44301, 0.241463, 0.0, 18.782915, -6.103203, - 0.0), - SME_42 = cms.vdouble(-0.123675, 0.0724, 0.0, -61.965417, 47.181913, - 0.0), + SME_11 = cms.vdouble(2.74557, -1.047071, 0.0, -12.438189, 7.901606, 0.0), + SME_13 = cms.vdouble(0.40909, -0.015486, 0.0, 0.50943, 2.419695, 0.0), + SME_12 = cms.vdouble(-0.115064, 0.666587, 0.0, 1.864145, -0.108712, 0.0), + SME_32 = cms.vdouble(-0.123675, 0.0724, 0.0, -61.965417, 47.181913, 0.0), + SME_31 = cms.vdouble(-0.44301, 0.241463, 0.0, 18.782915, -6.103203, 0.0), + SME_42 = cms.vdouble(-0.123675, 0.0724, 0.0, -61.965417, 47.181913, 0.0), # OL Parameters # Det_Layers p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - OL_1213 = cms.vdouble(1.02946, -0.815312, 0.0, 0.383779, -0.122652, - 0.0), - DT_13 = cms.vdouble(0.308217, 0.115029, -0.189501, 0.247424, -0.259089, - 0.254165), + OL_1213 = cms.vdouble(1.02946, -0.815312, 0.0, 0.383779, -0.122652, 0.0), + DT_13 = cms.vdouble(0.308217, 0.115029, -0.189501, 0.247424, -0.259089, 0.254165), # DT Parameters # Det_Stations p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - DT_12 = cms.vdouble(0.18377, 0.072535, -0.106303, 0.214783, -0.260733, - 0.251975), - DT_14 = cms.vdouble(0.388423, 0.068698, -0.145925, 0.159515, 0.124299, - -0.133269), - OL_1232 = cms.vdouble(0.162344, 0.004229, 0.0, 0.435151, 0.021102, - 0.0), - CSC_23 = cms.vdouble(-0.096102, 0.123296, -0.029944, 26.53004, -30.425446, - 8.432029), - CSC_24 = cms.vdouble(-0.291634, 0.287144, -0.061892, 24.535639, -20.958264, - 4.69219), - CSC_03 = cms.vdouble(0.333428, 0.107124, -0.076661, 0.828685, -0.809356, - 0.284652), - SMB_31 = cms.vdouble(0.472501, -0.141958, 0.0, 1.011733, -0.609072, - 0.0), + DT_12 = cms.vdouble(0.18377, 0.072535, -0.106303, 0.214783, -0.260733, 0.251975), + DT_14 = cms.vdouble(0.388423, 0.068698, -0.145925, 0.159515, 0.124299, -0.133269), + OL_1232 = cms.vdouble(0.162344, 0.004229, 0.0, 0.435151, 0.021102, 0.0), + CSC_23 = cms.vdouble(-0.096102, 0.123296, -0.029944, 26.53004, -30.425446, 8.432029), + CSC_24 = cms.vdouble(-0.291634, 0.287144, -0.061892, 24.535639, -20.958264, 4.69219), + CSC_03 = cms.vdouble(0.333428, 0.107124, -0.076661, 0.828685, -0.809356, 0.284652), + SMB_31 = cms.vdouble(0.472501, -0.141958, 0.0, 1.011733, -0.609072, 0.0), # CSC Parameters # Det_Stations p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - CSC_01 = cms.vdouble(0.164247, 0.003469, 0.0, 0.194849, 0.001297, - 0.0), - SMB_32 = cms.vdouble(0.63441, -0.384632, 0.0, 1.626055, -0.791262, - 0.0), - SMB_30 = cms.vdouble(0.399607, 0.204044, 0.0, 0.654936, -0.144121, - 0.0), - OL_2222 = cms.vdouble(0.093337, 0.010211, 0.0, 0.507105, -0.012159, - 0.0), + CSC_01 = cms.vdouble(0.164247, 0.003469, 0.0, 0.194849, 0.001297, 0.0), + SMB_32 = cms.vdouble(0.63441, -0.384632, 0.0, 1.626055, -0.791262, 0.0), + SMB_30 = cms.vdouble(0.399607, 0.204044, 0.0, 0.654936, -0.144121, 0.0), + OL_2222 = cms.vdouble(0.093337, 0.010211, 0.0, 0.507105, -0.012159, 0.0), # Sigle DT Segments # DTDet_Id p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - SMB_10 = cms.vdouble(1.238604, 0.077387, 0.0, 0.18914, -0.019523, - 0.0), - SMB_11 = cms.vdouble(1.283128, -0.022048, 0.0, 0.113762, 0.036688, - 0.0), - SMB_12 = cms.vdouble(2.080734, -1.0151, 0.0, -0.008602, 0.184733, - 0.0), - DT_23 = cms.vdouble(0.126967, 0.034511, -0.072707, 0.346017, -0.441869, - 0.477679), - DT_24 = cms.vdouble(0.189527, 0.037328, -0.088523, 0.251936, 0.032411, - 0.010984), - SME_21 = cms.vdouble(0.427743, -0.044944, 0.0, -1.552391, 4.823953, - 0.0), - SME_22 = cms.vdouble(-0.583124, 0.605138, 0.0, 39.469726, -24.276153, - 0.0), - CSC_34 = cms.vdouble(-0.203881, 0.185196, -0.040454, -157.042998, 164.144186, - -40.345536), - CSC_02 = cms.vdouble(0.715999, -0.300442, 0.022045, 0.687261, -0.687633, - 0.246137), - SME_41 = cms.vdouble(0.047325, -0.016319, 0.0, 39.982744, -19.953719, - 0.0), - DT_34 = cms.vdouble(0.049146, -0.003494, -0.010099, 0.672095, 0.36459, - -0.304346), - CSC_14 = cms.vdouble(0.590293, -0.15007, -0.011723, 0.964342, -0.858203, - 0.289029), - OL_1222 = cms.vdouble(0.221555, 0.009098, 0.0, 0.340439, -0.035132, - 0.0), - CSC_13 = cms.vdouble(-0.526928, 0.787257, -0.233089, -11.341927, 17.836639, - -6.706424), - CSC_12 = cms.vdouble(-0.39523, 0.601674, -0.177565, 6.353887, -8.25429, - 2.804363) + SMB_10 = cms.vdouble(1.238604, 0.077387, 0.0, 0.18914, -0.019523, 0.0), + SMB_11 = cms.vdouble(1.283128, -0.022048, 0.0, 0.113762, 0.036688, 0.0), + SMB_12 = cms.vdouble(2.080734, -1.0151, 0.0, -0.008602, 0.184733, 0.0), + DT_23 = cms.vdouble(0.126967, 0.034511, -0.072707, 0.346017, -0.441869, 0.477679), + DT_24 = cms.vdouble(0.189527, 0.037328, -0.088523, 0.251936, 0.032411, 0.010984), + SME_21 = cms.vdouble(0.427743, -0.044944, 0.0, -1.552391, 4.823953, 0.0), + SME_22 = cms.vdouble(-0.583124, 0.605138, 0.0, 39.469726, -24.276153, 0.0), + CSC_34 = cms.vdouble(-0.203881, 0.185196, -0.040454, -157.042998, 164.144186, -40.345536), + CSC_02 = cms.vdouble(0.715999, -0.300442, 0.022045, 0.687261, -0.687633, 0.246137), + SME_41 = cms.vdouble(0.047325, -0.016319, 0.0, 39.982744, -19.953719, 0.0), + DT_34 = cms.vdouble(0.049146, -0.003494, -0.010099, 0.672095, 0.36459, -0.304346), + CSC_14 = cms.vdouble(0.590293, -0.15007, -0.011723, 0.964342, -0.858203, 0.289029), + OL_1222 = cms.vdouble(0.221555, 0.009098, 0.0, 0.340439, -0.035132, 0.0), + CSC_13 = cms.vdouble(-0.526928, 0.787257, -0.233089, -11.341927, 17.836639, -6.706424), + CSC_12 = cms.vdouble(-0.39523, 0.601674, -0.177565, 6.353887, -8.25429, 2.804363) ) diff --git a/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_40T_cfi.py b/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_40T_cfi.py index 07b04e7a3cbe6..d241cf89cde13 100644 --- a/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_40T_cfi.py +++ b/RecoMuon/MuonSeedGenerator/python/ptSeedParameterization_40T_cfi.py @@ -1,97 +1,59 @@ import FWCore.ParameterSet.Config as cms ptSeedParameterization = cms.PSet( - SMB_21 = cms.vdouble(0.982838, -0.181889, 0.0, 0.394683, -0.339892, - 0.0), - SMB_20 = cms.vdouble(0.89598, -0.07901, 0.0, 0.230235, -0.006089, - 0.0), - SMB_22 = cms.vdouble(1.378972, -0.736727, 0.0, -0.136466, 0.513675, - 0.0), - OL_2213 = cms.vdouble(0.653836, -0.585322, 0.0, 0.058185, 0.274112, - 0.0), + SMB_21 = cms.vdouble(0.982838, -0.181889, 0.0, 0.394683, -0.339892, 0.0), + SMB_20 = cms.vdouble(0.89598, -0.07901, 0.0, 0.230235, -0.006089, 0.0), + SMB_22 = cms.vdouble(1.378972, -0.736727, 0.0, -0.136466, 0.513675, 0.0), + OL_2213 = cms.vdouble(0.653836, -0.585322, 0.0, 0.058185, 0.274112, 0.0), # Sigle CSC Segments # CSCDet_Id p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - SME_11 = cms.vdouble(2.74557, -1.047071, 0.0, -12.438189, 7.901606, - 0.0), - SME_13 = cms.vdouble(0.40909, -0.015486, 0.0, 0.50943, 2.419695, - 0.0), - SME_12 = cms.vdouble(-0.115064, 0.666587, 0.0, 1.864145, -0.108712, - 0.0), - SME_32 = cms.vdouble(-0.123675, 0.0724, 0.0, -61.965417, 47.181913, - 0.0), - SME_31 = cms.vdouble(-0.44301, 0.241463, 0.0, 18.782915, -6.103203, - 0.0), - SME_42 = cms.vdouble(-0.123675, 0.0724, 0.0, -61.965417, 47.181913, - 0.0), + SME_11 = cms.vdouble(2.74557, -1.047071, 0.0, -12.438189, 7.901606, 0.0), + SME_13 = cms.vdouble(0.40909, -0.015486, 0.0, 0.50943, 2.419695, 0.0), + SME_12 = cms.vdouble(-0.115064, 0.666587, 0.0, 1.864145, -0.108712, 0.0), + SME_32 = cms.vdouble(-0.123675, 0.0724, 0.0, -61.965417, 47.181913, 0.0), + SME_31 = cms.vdouble(-0.44301, 0.241463, 0.0, 18.782915, -6.103203, 0.0), + SME_42 = cms.vdouble(-0.123675, 0.0724, 0.0, -61.965417, 47.181913, 0.0), # OL Parameters # Det_Layers p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - OL_1213 = cms.vdouble(1.02946, -0.815312, 0.0, 0.383779, -0.122652, - 0.0), - DT_13 = cms.vdouble(0.308217, 0.115029, -0.189501, 0.247424, -0.259089, - 0.254165), + OL_1213 = cms.vdouble(1.02946, -0.815312, 0.0, 0.383779, -0.122652, 0.0), + DT_13 = cms.vdouble(0.308217, 0.115029, -0.189501, 0.247424, -0.259089, 0.254165), # DT Parameters # Det_Stations p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - DT_12 = cms.vdouble(0.18377, 0.072535, -0.106303, 0.214783, -0.260733, - 0.251975), - DT_14 = cms.vdouble(0.388423, 0.068698, -0.145925, 0.159515, 0.124299, - -0.133269), - OL_1232 = cms.vdouble(0.162344, 0.004229, 0.0, 0.435151, 0.021102, - 0.0), - CSC_23 = cms.vdouble(-0.096102, 0.123296, -0.029944, 26.53004, -30.425446, - 8.432029), - CSC_24 = cms.vdouble(-0.291634, 0.287144, -0.061892, 24.535639, -20.958264, - 4.69219), - CSC_03 = cms.vdouble(0.333428, 0.107124, -0.076661, 0.828685, -0.809356, - 0.284652), - SMB_31 = cms.vdouble(0.472501, -0.141958, 0.0, 1.011733, -0.609072, - 0.0), + DT_12 = cms.vdouble(0.18377, 0.072535, -0.106303, 0.214783, -0.260733, 0.251975), + DT_14 = cms.vdouble(0.388423, 0.068698, -0.145925, 0.159515, 0.124299, -0.133269), + OL_1232 = cms.vdouble(0.162344, 0.004229, 0.0, 0.435151, 0.021102, 0.0), + CSC_23 = cms.vdouble(-0.096102, 0.123296, -0.029944, 26.53004, -30.425446, 8.432029), + CSC_24 = cms.vdouble(-0.291634, 0.287144, -0.061892, 24.535639, -20.958264, 4.69219), + CSC_03 = cms.vdouble(0.333428, 0.107124, -0.076661, 0.828685, -0.809356, 0.284652), + SMB_31 = cms.vdouble(0.472501, -0.141958, 0.0, 1.011733, -0.609072, 0.0), # CSC Parameters # Det_Stations p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - CSC_01 = cms.vdouble(0.164247, 0.003469, 0.0, 0.194849, 0.001297, - 0.0), - SMB_32 = cms.vdouble(0.63441, -0.384632, 0.0, 1.626055, -0.791262, - 0.0), - SMB_30 = cms.vdouble(0.399607, 0.204044, 0.0, 0.654936, -0.144121, - 0.0), - OL_2222 = cms.vdouble(0.093337, 0.010211, 0.0, 0.507105, -0.012159, - 0.0), + CSC_01 = cms.vdouble(0.164247, 0.003469, 0.0, 0.194849, 0.001297, 0.0), + SMB_32 = cms.vdouble(0.63441, -0.384632, 0.0, 1.626055, -0.791262, 0.0), + SMB_30 = cms.vdouble(0.399607, 0.204044, 0.0, 0.654936, -0.144121, 0.0), + OL_2222 = cms.vdouble(0.093337, 0.010211, 0.0, 0.507105, -0.012159, 0.0), # Sigle DT Segments # DTDet_Id p1 p2 p3 ep1 ep2 ep3 #------------------------------------------------------------------------ # - SMB_10 = cms.vdouble(1.238604, 0.077387, 0.0, 0.18914, -0.019523, - 0.0), - SMB_11 = cms.vdouble(1.283128, -0.022048, 0.0, 0.113762, 0.036688, - 0.0), - SMB_12 = cms.vdouble(2.080734, -1.0151, 0.0, -0.008602, 0.184733, - 0.0), - DT_23 = cms.vdouble(0.126967, 0.034511, -0.072707, 0.346017, -0.441869, - 0.477679), - DT_24 = cms.vdouble(0.189527, 0.037328, -0.088523, 0.251936, 0.032411, - 0.010984), - SME_21 = cms.vdouble(0.427743, -0.044944, 0.0, -1.552391, 4.823953, - 0.0), - SME_22 = cms.vdouble(-0.583124, 0.605138, 0.0, 39.469726, -24.276153, - 0.0), - CSC_34 = cms.vdouble(-0.203881, 0.185196, -0.040454, -157.042998, 164.144186, - -40.345536), - CSC_02 = cms.vdouble(0.715999, -0.300442, 0.022045, 0.687261, -0.687633, - 0.246137), - SME_41 = cms.vdouble(0.047325, -0.016319, 0.0, 39.982744, -19.953719, - 0.0), - DT_34 = cms.vdouble(0.049146, -0.003494, -0.010099, 0.672095, 0.36459, - -0.304346), - CSC_14 = cms.vdouble(0.590293, -0.15007, -0.011723, 0.964342, -0.858203, - 0.289029), - OL_1222 = cms.vdouble(0.221555, 0.009098, 0.0, 0.340439, -0.035132, - 0.0), - CSC_13 = cms.vdouble(-0.526928, 0.787257, -0.233089, -11.341927, 17.836639, - -6.706424), - CSC_12 = cms.vdouble(-0.39523, 0.601674, -0.177565, 6.353887, -8.25429, - 2.804363) + SMB_10 = cms.vdouble(1.238604, 0.077387, 0.0, 0.18914, -0.019523, 0.0), + SMB_11 = cms.vdouble(1.283128, -0.022048, 0.0, 0.113762, 0.036688, 0.0), + SMB_12 = cms.vdouble(2.080734, -1.0151, 0.0, -0.008602, 0.184733, 0.0), + DT_23 = cms.vdouble(0.126967, 0.034511, -0.072707, 0.346017, -0.441869, 0.477679), + DT_24 = cms.vdouble(0.189527, 0.037328, -0.088523, 0.251936, 0.032411, 0.010984), + SME_21 = cms.vdouble(0.427743, -0.044944, 0.0, -1.552391, 4.823953, 0.0), + SME_22 = cms.vdouble(-0.583124, 0.605138, 0.0, 39.469726, -24.276153, 0.0), + CSC_34 = cms.vdouble(-0.203881, 0.185196, -0.040454, -157.042998, 164.144186, -40.345536), + CSC_02 = cms.vdouble(0.715999, -0.300442, 0.022045, 0.687261, -0.687633, 0.246137), + SME_41 = cms.vdouble(0.047325, -0.016319, 0.0, 39.982744, -19.953719, 0.0), + DT_34 = cms.vdouble(0.049146, -0.003494, -0.010099, 0.672095, 0.36459, -0.304346), + CSC_14 = cms.vdouble(0.590293, -0.15007, -0.011723, 0.964342, -0.858203, 0.289029), + OL_1222 = cms.vdouble(0.221555, 0.009098, 0.0, 0.340439, -0.035132, 0.0), + CSC_13 = cms.vdouble(-0.526928, 0.787257, -0.233089, -11.341927, 17.836639, -6.706424), + CSC_12 = cms.vdouble(-0.39523, 0.601674, -0.177565, 6.353887, -8.25429, 2.804363) ) diff --git a/RecoPPS/Configuration/python/recoCTPPS_cff.py b/RecoPPS/Configuration/python/recoCTPPS_cff.py index b6dfb835931bc..dde4ac1fa06d8 100644 --- a/RecoPPS/Configuration/python/recoCTPPS_cff.py +++ b/RecoPPS/Configuration/python/recoCTPPS_cff.py @@ -10,6 +10,7 @@ from RecoPPS.ProtonReconstruction.ctppsProtons_cff import * from Geometry.VeryForwardGeometry.geometryRPFromDB_cfi import * +from CalibPPS.ESProducers.ppsTopology_cff import * recoCTPPSTask = cms.Task( totemRPLocalReconstructionTask , @@ -19,4 +20,10 @@ ctppsLocalTrackLiteProducer , ctppsProtons ) + +#temporarily remove ctppsProtons in Run-3 (see issue #32340) +from Configuration.Eras.Modifier_ctpps_2021_cff import ctpps_2021 +_ctpps_2021_recoCTPPSTask = recoCTPPSTask.copyAndExclude([ctppsProtons]) +ctpps_2021.toReplaceWith(recoCTPPSTask, _ctpps_2021_recoCTPPSTask) + recoCTPPS = cms.Sequence(recoCTPPSTask) diff --git a/RecoPPS/Local/interface/CTPPSPixelClusterProducer.h b/RecoPPS/Local/interface/CTPPSPixelClusterProducer.h index 5b5e2876babd7..fdcc3161d121c 100644 --- a/RecoPPS/Local/interface/CTPPSPixelClusterProducer.h +++ b/RecoPPS/Local/interface/CTPPSPixelClusterProducer.h @@ -27,11 +27,12 @@ #include "DataFormats/CTPPSDetId/interface/CTPPSPixelDetId.h" -#include "CondFormats/DataRecord/interface/CTPPSPixelDAQMappingRcd.h" -#include "CondFormats/DataRecord/interface/CTPPSPixelAnalysisMaskRcd.h" #include "CondFormats/PPSObjects/interface/CTPPSPixelDAQMapping.h" +#include "CondFormats/DataRecord/interface/CTPPSPixelDAQMappingRcd.h" #include "CondFormats/PPSObjects/interface/CTPPSPixelAnalysisMask.h" -#include "RecoPPS/Local/interface/CTPPSPixelGainCalibrationDBService.h" +#include "CondFormats/DataRecord/interface/CTPPSPixelAnalysisMaskRcd.h" +#include "CondFormats/PPSObjects/interface/CTPPSPixelGainCalibrations.h" +#include "CondFormats/DataRecord/interface/CTPPSPixelGainCalibrationsRcd.h" #include "RecoPPS/Local/interface/RPixDetClusterizer.h" #include @@ -47,20 +48,17 @@ class CTPPSPixelClusterProducer : public edm::stream::EDProducer<> { static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); private: - edm::ParameterSet param_; - int verbosity_; - - edm::InputTag src_; edm::EDGetTokenT> tokenCTPPSPixelDigi_; edm::ESGetToken tokenCTPPSPixelAnalysisMask_; + edm::ESGetToken tokenGainCalib_; + int verbosity_; RPixDetClusterizer clusterizer_; void run(const edm::DetSetVector &input, edm::DetSetVector &output, - const CTPPSPixelAnalysisMask *mask); - - CTPPSPixelGainCalibrationDBService theGainCalibrationDB; + const CTPPSPixelAnalysisMask &mask, + const CTPPSPixelGainCalibrations &gainCalibration); }; #endif diff --git a/RecoPPS/Local/interface/CTPPSPixelGainCalibrationDBService.h b/RecoPPS/Local/interface/CTPPSPixelGainCalibrationDBService.h deleted file mode 100644 index 52eed2dc6d1fd..0000000000000 --- a/RecoPPS/Local/interface/CTPPSPixelGainCalibrationDBService.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef RecoPPS_Local_CTPPSPixelGainCalibrationDBService_h -#define RecoPPS_Local_CTPPSPixelGainCalibrationDBService_h -// -*- C++ -*- -// -// Package: RecoPPS/Local -// Class : CTPPSPixelGainCalibrationDBService -// -/**\class CTPPSPixelGainCalibrationDBService CTPPSPixelGainCalibrationDBService.h "RecoPPS/Local/interface/CTPPSPixelGainCalibrationDBService.h" - - Description: [one line class summary] - - Usage: - - -*/ -// -// Original Author: Helio Nogima -// Created: Thu, 23 Feb 2017 17:37:25 GMT -// -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "CondFormats/PPSObjects/interface/CTPPSPixelGainCalibrations.h" -class CTPPSPixelGainCalibrationDBService { -public: - CTPPSPixelGainCalibrationDBService(); - virtual ~CTPPSPixelGainCalibrationDBService(); - virtual void getDB(const edm::Event& e, const edm::EventSetup& c); - const CTPPSPixelGainCalibrations* getCalibs() const { return pPixelGainCalibrations; } - -private: - CTPPSPixelGainCalibrationDBService(const CTPPSPixelGainCalibrationDBService&) = delete; - const CTPPSPixelGainCalibrations* pPixelGainCalibrations; - const CTPPSPixelGainCalibrationDBService& operator=(const CTPPSPixelGainCalibrationDBService&) = delete; -}; - -#endif diff --git a/RecoPPS/Local/interface/CTPPSPixelRecHitProducer.h b/RecoPPS/Local/interface/CTPPSPixelRecHitProducer.h index b72db43212d16..ef51d012f860e 100644 --- a/RecoPPS/Local/interface/CTPPSPixelRecHitProducer.h +++ b/RecoPPS/Local/interface/CTPPSPixelRecHitProducer.h @@ -18,6 +18,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/Utilities/interface/ESGetToken.h" #include "DataFormats/CTPPSReco/interface/CTPPSPixelCluster.h" #include "DataFormats/CTPPSReco/interface/CTPPSPixelRecHit.h" @@ -26,6 +27,9 @@ #include "DataFormats/CTPPSDetId/interface/CTPPSPixelDetId.h" #include "RecoPPS/Local/interface/RPixClusterToHit.h" +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" +#include "CondFormats/DataRecord/interface/PPSPixelTopologyRcd.h" + class CTPPSPixelRecHitProducer : public edm::stream::EDProducer<> { public: explicit CTPPSPixelRecHitProducer(const edm::ParameterSet ¶m); @@ -42,10 +46,13 @@ class CTPPSPixelRecHitProducer : public edm::stream::EDProducer<> { edm::InputTag src_; edm::EDGetTokenT> tokenCTPPSPixelCluster_; + edm::ESGetToken pixelTopologyToken_; RPixClusterToHit cluster2hit_; - void run(const edm::DetSetVector &input, edm::DetSetVector &output); + void run(const edm::DetSetVector &input, + edm::DetSetVector &output, + const PPSPixelTopology &ppt); }; #endif diff --git a/RecoPPS/Local/interface/RPixClusterToHit.h b/RecoPPS/Local/interface/RPixClusterToHit.h index 897f72ba390c4..792b832311e74 100644 --- a/RecoPPS/Local/interface/RPixClusterToHit.h +++ b/RecoPPS/Local/interface/RPixClusterToHit.h @@ -10,7 +10,7 @@ #include "DataFormats/Common/interface/DetSetVector.h" #include "DataFormats/CTPPSReco/interface/CTPPSPixelCluster.h" #include "DataFormats/CTPPSReco/interface/CTPPSPixelRecHit.h" -#include "Geometry/VeryForwardGeometry/interface/CTPPSPixelSimTopology.h" +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" class RPixClusterToHit { public: @@ -18,8 +18,9 @@ class RPixClusterToHit { void buildHits(unsigned int detId, const std::vector &clusters, - std::vector &hits); - void make_hit(CTPPSPixelCluster aCluster, std::vector &hits); + std::vector &hits, + const PPSPixelTopology &ppt); + void make_hit(CTPPSPixelCluster aCluster, std::vector &hits, const PPSPixelTopology &ppt); ~RPixClusterToHit(); private: diff --git a/RecoPPS/Local/interface/RPixDetClusterizer.h b/RecoPPS/Local/interface/RPixDetClusterizer.h index 4230d34b60394..4a85c9a1f24ac 100644 --- a/RecoPPS/Local/interface/RPixDetClusterizer.h +++ b/RecoPPS/Local/interface/RPixDetClusterizer.h @@ -16,8 +16,6 @@ #include "DataFormats/CTPPSReco/interface/CTPPSPixelCluster.h" #include "CondFormats/PPSObjects/interface/CTPPSPixelGainCalibrations.h" -#include "RecoPPS/Local/interface/CTPPSPixelGainCalibrationDBService.h" - #include "CondFormats/PPSObjects/interface/CTPPSPixelAnalysisMask.h" #include diff --git a/RecoPPS/Local/plugins/CTPPSDiamondLocalTrackFitter.cc b/RecoPPS/Local/plugins/CTPPSDiamondLocalTrackFitter.cc index a07904ba9cce7..d9c3af54d031d 100644 --- a/RecoPPS/Local/plugins/CTPPSDiamondLocalTrackFitter.cc +++ b/RecoPPS/Local/plugins/CTPPSDiamondLocalTrackFitter.cc @@ -28,7 +28,6 @@ class CTPPSDiamondLocalTrackFitter : public edm::stream::EDProducer<> { public: explicit CTPPSDiamondLocalTrackFitter(const edm::ParameterSet&); - ~CTPPSDiamondLocalTrackFitter() override; static void fillDescriptions(edm::ConfigurationDescriptions&); @@ -36,65 +35,47 @@ class CTPPSDiamondLocalTrackFitter : public edm::stream::EDProducer<> { void produce(edm::Event&, const edm::EventSetup&) override; edm::EDGetTokenT > recHitsToken_; - CTPPSDiamondTrackRecognition trk_algo_45_; - CTPPSDiamondTrackRecognition trk_algo_56_; + const edm::ParameterSet trk_algo_params_; + std::unordered_map > trk_algo_; }; CTPPSDiamondLocalTrackFitter::CTPPSDiamondLocalTrackFitter(const edm::ParameterSet& iConfig) : recHitsToken_( consumes >(iConfig.getParameter("recHitsTag"))), - trk_algo_45_(iConfig.getParameter("trackingAlgorithmParams")), - trk_algo_56_(iConfig.getParameter("trackingAlgorithmParams")) { + trk_algo_params_(iConfig.getParameter("trackingAlgorithmParams")) { produces >(); } -CTPPSDiamondLocalTrackFitter::~CTPPSDiamondLocalTrackFitter() {} - void CTPPSDiamondLocalTrackFitter::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + // prepare the output auto pOut = std::make_unique >(); edm::Handle > recHits; iEvent.getByToken(recHitsToken_, recHits); - const CTPPSDiamondDetId id_45(0, 1, 6, 0, 0), id_56(1, 1, 6, 0, 0); - - pOut->find_or_insert(id_45); // tracks in 4-5 - edm::DetSet& tracks56 = pOut->find_or_insert(id_56); // tracks in 5-6 - - // workaround to retrieve the detset for 4-5 without losing the reference - edm::DetSet& tracks45 = pOut->operator[](id_45); + // clear all hits possibly inherited from previous event + for (auto& algo_vs_id : trk_algo_) + algo_vs_id.second->clear(); // feed hits to the track producers for (const auto& vec : *recHits) { - const CTPPSDiamondDetId detid(vec.detId()); - for (const auto& hit : vec) { + const CTPPSDiamondDetId raw_detid(vec.detId()), detid(raw_detid.arm(), raw_detid.station(), raw_detid.rp()); + // if algorithm is not found, build it + if (trk_algo_.count(detid) == 0) + trk_algo_[detid] = std::make_unique(trk_algo_params_); + for (const auto& hit : vec) // skip hits without a leading edge - if (hit.ootIndex() == CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING) - continue; - - switch (detid.arm()) { - case 0: { - trk_algo_45_.addHit(hit); - } break; - case 1: { - trk_algo_56_.addHit(hit); - } break; - default: - edm::LogWarning("CTPPSDiamondLocalTrackFitter") << "Invalid arm for rechit: " << detid.arm(); - break; - } - } + if (hit.ootIndex() != CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING) + trk_algo_[detid]->addHit(hit); } - // retrieve the tracks for both arms - trk_algo_45_.produceTracks(tracks45); - trk_algo_56_.produceTracks(tracks56); + // build the tracks for all stations + for (auto& algo_vs_id : trk_algo_) { + auto& tracks = pOut->find_or_insert(algo_vs_id.first); + algo_vs_id.second->produceTracks(tracks); + } iEvent.put(std::move(pOut)); - - // remove all hits from the track producers to prepare for the next event - trk_algo_45_.clear(); - trk_algo_56_.clear(); } void CTPPSDiamondLocalTrackFitter::fillDescriptions(edm::ConfigurationDescriptions& descr) { diff --git a/RecoPPS/Local/plugins/CTPPSPixelClusterProducer.cc b/RecoPPS/Local/plugins/CTPPSPixelClusterProducer.cc index 6bfe1ddf59255..f901c6a1940ba 100644 --- a/RecoPPS/Local/plugins/CTPPSPixelClusterProducer.cc +++ b/RecoPPS/Local/plugins/CTPPSPixelClusterProducer.cc @@ -2,13 +2,12 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "RecoPPS/Local/interface/CTPPSPixelClusterProducer.h" -CTPPSPixelClusterProducer::CTPPSPixelClusterProducer(const edm::ParameterSet &conf) : param_(conf), clusterizer_(conf) { - src_ = conf.getParameter("label"); - verbosity_ = conf.getUntrackedParameter("RPixVerbosity"); - - tokenCTPPSPixelDigi_ = consumes >(edm::InputTag(src_)); - tokenCTPPSPixelAnalysisMask_ = esConsumes(); - +CTPPSPixelClusterProducer::CTPPSPixelClusterProducer(const edm::ParameterSet &conf) + : tokenCTPPSPixelDigi_(consumes >(conf.getParameter("tag"))), + tokenCTPPSPixelAnalysisMask_(esConsumes()), + tokenGainCalib_(esConsumes()), + verbosity_(conf.getUntrackedParameter("RPixVerbosity")), + clusterizer_(conf) { produces >(); } @@ -17,7 +16,7 @@ CTPPSPixelClusterProducer::~CTPPSPixelClusterProducer() {} void CTPPSPixelClusterProducer::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { edm::ParameterSetDescription desc; desc.addUntracked("RPixVerbosity", 0); - desc.add("label", "ctppsPixelDigis"); + desc.add("tag", edm::InputTag("ctppsPixelDigis")); desc.add("SeedADCThreshold", 2); desc.add("ADCThreshold", 2); desc.add("ElectronADCGain", 135.0); @@ -32,19 +31,15 @@ void CTPPSPixelClusterProducer::produce(edm::Event &iEvent, const edm::EventSetu edm::Handle > rpd; iEvent.getByToken(tokenCTPPSPixelDigi_, rpd); - // get analysis mask to mask channels - edm::ESHandle aMask; - - if (!rpd->empty()) - aMask = iSetup.getHandle(tokenCTPPSPixelAnalysisMask_); - edm::DetSetVector output; - // run clusterisation if (!rpd->empty()) { + // get analysis mask to mask channels + const auto &mask = iSetup.getData(tokenCTPPSPixelAnalysisMask_); // get calibration DB - theGainCalibrationDB.getDB(iEvent, iSetup); - run(*rpd, output, aMask.product()); + const auto &gainCalibrations = iSetup.getData(tokenGainCalib_); + // run clusterisation + run(*rpd, output, mask, gainCalibrations); } // write output iEvent.put(std::make_unique >(output)); @@ -52,10 +47,11 @@ void CTPPSPixelClusterProducer::produce(edm::Event &iEvent, const edm::EventSetu void CTPPSPixelClusterProducer::run(const edm::DetSetVector &input, edm::DetSetVector &output, - const CTPPSPixelAnalysisMask *mask) { + const CTPPSPixelAnalysisMask &mask, + const CTPPSPixelGainCalibrations &gainCalibration) { for (const auto &ds_digi : input) { edm::DetSet &ds_cluster = output.find_or_insert(ds_digi.id); - clusterizer_.buildClusters(ds_digi.id, ds_digi.data, ds_cluster.data, theGainCalibrationDB.getCalibs(), mask); + clusterizer_.buildClusters(ds_digi.id, ds_digi.data, ds_cluster.data, &gainCalibration, &mask); if (verbosity_) { unsigned int cluN = 0; diff --git a/RecoPPS/Local/plugins/CTPPSPixelLocalTrackProducer.cc b/RecoPPS/Local/plugins/CTPPSPixelLocalTrackProducer.cc index 1958695182918..017bed075af7e 100644 --- a/RecoPPS/Local/plugins/CTPPSPixelLocalTrackProducer.cc +++ b/RecoPPS/Local/plugins/CTPPSPixelLocalTrackProducer.cc @@ -70,7 +70,7 @@ class CTPPSPixelLocalTrackProducer : public edm::stream::EDProducer<> { //------------------------------------------------------------------------------------------------// CTPPSPixelLocalTrackProducer::CTPPSPixelLocalTrackProducer(const edm::ParameterSet ¶meterSet) { - inputTag_ = parameterSet.getParameter("label"); + inputTag_ = parameterSet.getParameter("tag"); verbosity_ = parameterSet.getUntrackedParameter("verbosity"); maxHitPerRomanPot_ = parameterSet.getParameter("maxHitPerRomanPot"); maxHitPerPlane_ = parameterSet.getParameter("maxHitPerPlane"); @@ -104,7 +104,7 @@ CTPPSPixelLocalTrackProducer::CTPPSPixelLocalTrackProducer(const edm::ParameterS trackFinder_->setListOfPlanes(listOfAllPlanes_); trackFinder_->initialize(); - tokenCTPPSPixelRecHit_ = consumes>(edm::InputTag(inputTag_)); + tokenCTPPSPixelRecHit_ = consumes>(inputTag_); tokenCTPPSGeometry_ = esConsumes(); produces>(); @@ -119,8 +119,8 @@ CTPPSPixelLocalTrackProducer::~CTPPSPixelLocalTrackProducer() {} void CTPPSPixelLocalTrackProducer::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { edm::ParameterSetDescription desc; - desc.add("label", "ctppsPixelRecHits") - ->setComment("label of the RecHits input for the tracking algorithm"); + desc.add("tag", edm::InputTag("ctppsPixelRecHits")) + ->setComment("inputTag of the RecHits input for the tracking algorithm"); desc.add("patternFinderAlgorithm", "RPixRoadFinder")->setComment("algorithm type for pattern finder"); desc.add("trackFinderAlgorithm", "RPixPlaneCombinatoryTracking") ->setComment("algorithm type for track finder"); diff --git a/RecoPPS/Local/plugins/CTPPSPixelRecHitProducer.cc b/RecoPPS/Local/plugins/CTPPSPixelRecHitProducer.cc index 537756cd9f755..4def708f819bc 100644 --- a/RecoPPS/Local/plugins/CTPPSPixelRecHitProducer.cc +++ b/RecoPPS/Local/plugins/CTPPSPixelRecHitProducer.cc @@ -5,6 +5,7 @@ CTPPSPixelRecHitProducer::CTPPSPixelRecHitProducer(const edm::ParameterSet &conf verbosity_ = conf.getUntrackedParameter("RPixVerbosity"); tokenCTPPSPixelCluster_ = consumes >(src_); produces >(); + pixelTopologyToken_ = esConsumes(); } CTPPSPixelRecHitProducer::~CTPPSPixelRecHitProducer() {} @@ -20,22 +21,25 @@ void CTPPSPixelRecHitProducer::produce(edm::Event &iEvent, const edm::EventSetup edm::Handle > rpCl; iEvent.getByToken(tokenCTPPSPixelCluster_, rpCl); + edm::ESHandle thePixelTopology = iSetup.getHandle(pixelTopologyToken_); + edm::DetSetVector output; // run reconstruction if (!rpCl->empty()) - run(*rpCl, output); + run(*rpCl, output, *thePixelTopology); iEvent.put(std::make_unique >(output)); } void CTPPSPixelRecHitProducer::run(const edm::DetSetVector &input, - edm::DetSetVector &output) { + edm::DetSetVector &output, + const PPSPixelTopology &ppt) { for (const auto &ds_cluster : input) { edm::DetSet &ds_rechit = output.find_or_insert(ds_cluster.id); //calculate the cluster parameters and convert it into a rechit - cluster2hit_.buildHits(ds_cluster.id, ds_cluster.data, ds_rechit.data); + cluster2hit_.buildHits(ds_cluster.id, ds_cluster.data, ds_rechit.data, ppt); } } diff --git a/RecoPPS/Local/plugins/TotemRPUVPatternFinder.cc b/RecoPPS/Local/plugins/TotemRPUVPatternFinder.cc index 57bc3398293e3..7f1631067ad2c 100644 --- a/RecoPPS/Local/plugins/TotemRPUVPatternFinder.cc +++ b/RecoPPS/Local/plugins/TotemRPUVPatternFinder.cc @@ -46,7 +46,9 @@ class TotemRPUVPatternFinder : public edm::stream::EDProducer<> { private: edm::InputTag tagRecHit; edm::EDGetTokenT> detSetVectorTotemRPRecHitToken; + edm::ESGetToken ctppsGeometryToken; + edm::ESWatcher geometryWatcher; unsigned int verbosity; @@ -77,8 +79,6 @@ class TotemRPUVPatternFinder : public edm::stream::EDProducer<> { /// exceptional settings: RP Id --> settings std::map exceptionalSettings; - edm::ESWatcher geometryWatcher; - /// executes line recognition in a projection void recognizeAndSelect(TotemRPUVPattern::ProjectionType proj, double z0, @@ -97,6 +97,7 @@ using namespace edm; TotemRPUVPatternFinder::TotemRPUVPatternFinder(const edm::ParameterSet &conf) : tagRecHit(conf.getParameter("tagRecHit")), + ctppsGeometryToken(esConsumes()), verbosity(conf.getUntrackedParameter("verbosity", 0)), minPlanesPerProjectionToSearch(conf.getParameter("minPlanesPerProjectionToSearch")), minPlanesPerProjectionToFit(conf.getParameter("minPlanesPerProjectionToFit")), @@ -118,7 +119,6 @@ TotemRPUVPatternFinder::TotemRPUVPatternFinder(const edm::ParameterSet &conf) } detSetVectorTotemRPRecHitToken = consumes>(tagRecHit); - ctppsGeometryToken = esConsumes(); produces>(); } @@ -167,10 +167,9 @@ void TotemRPUVPatternFinder::produce(edm::Event &event, const edm::EventSetup &e << ">> TotemRPUVPatternFinder::produce " << event.id().run() << ":" << event.id().event(); // geometry - ESHandle geometry = es.getHandle(ctppsGeometryToken); - es.get().get(geometry); + const auto &geometry = es.getData(ctppsGeometryToken); if (geometryWatcher.check(es)) - lrcgn->resetGeometry(geometry.product()); + lrcgn->resetGeometry(&geometry); // get input edm::Handle> input; @@ -256,7 +255,7 @@ void TotemRPUVPatternFinder::produce(edm::Event &event, const edm::EventSetup &e DetSet &patterns = patternsVector.find_or_insert(rpId); // "typical" z0 for the RP - double z0 = geometry->rp(rpId)->translation().z(); + double z0 = geometry.rp(rpId)->translation().z(); // u then v recognition recognizeAndSelect(TotemRPUVPattern::projU, z0, threshold_U, minPlanesPerProjectionToFit_U, data.hits_U, patterns); diff --git a/RecoPPS/Local/src/CTPPSPixelGainCalibrationDBService.cc b/RecoPPS/Local/src/CTPPSPixelGainCalibrationDBService.cc deleted file mode 100644 index c894b833e1f4c..0000000000000 --- a/RecoPPS/Local/src/CTPPSPixelGainCalibrationDBService.cc +++ /dev/null @@ -1,35 +0,0 @@ -// -*- C++ -*- -// -// Package: RecoPPS/Local -// Class : CTPPSPixelGainCalibrationDBService -// -// Implementation: -// [Notes on implementation] -// -// Original Author: Helio Nogima -// Created: Thu, 23 Feb 2017 17:37:50 GMT -// - -#include "RecoPPS/Local/interface/CTPPSPixelGainCalibrationDBService.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "CondFormats/PPSObjects/interface/CTPPSPixelGainCalibrations.h" -#include "CondFormats/DataRecord/interface/CTPPSPixelGainCalibrationsRcd.h" - -CTPPSPixelGainCalibrationDBService::CTPPSPixelGainCalibrationDBService() {} - -CTPPSPixelGainCalibrationDBService::~CTPPSPixelGainCalibrationDBService() {} - -void CTPPSPixelGainCalibrationDBService::getDB(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - edm::eventsetup::EventSetupRecordKey recordKey( - edm::eventsetup::EventSetupRecordKey::TypeTag::findType("CTPPSPixelGainCalibrationsRcd")); - if (recordKey.type() == edm::eventsetup::EventSetupRecordKey::TypeTag()) { - //record not found - throw cms::Exception("CTPPSPixelGainCalibrationService") << "Record CTPPSPixelGainCalibrationsRcd does not exist"; - } - edm::ESHandle calhandle; - iSetup.get().get(calhandle); - pPixelGainCalibrations = calhandle.product(); -} diff --git a/RecoPPS/Local/src/RPixClusterToHit.cc b/RecoPPS/Local/src/RPixClusterToHit.cc index 80e50441e0cbe..4171bbc8d5c86 100644 --- a/RecoPPS/Local/src/RPixClusterToHit.cc +++ b/RecoPPS/Local/src/RPixClusterToHit.cc @@ -8,20 +8,20 @@ RPixClusterToHit::~RPixClusterToHit() {} void RPixClusterToHit::buildHits(unsigned int detId, const std::vector &clusters, - std::vector &hits) { + std::vector &hits, + const PPSPixelTopology &ppt) { if (verbosity_) - edm::LogInfo("RPixClusterToHit") << " RPixClusterToHit " << detId - << " received cluster array of size = " << clusters.size(); + edm::LogInfo("PPS") << " RPixClusterToHit " << detId << " received cluster array of size = " << clusters.size(); for (unsigned int i = 0; i < clusters.size(); i++) { - make_hit(clusters[i], hits); + make_hit(clusters[i], hits, ppt); } } -void RPixClusterToHit::make_hit(CTPPSPixelCluster aCluster, std::vector &hits) { +void RPixClusterToHit::make_hit(CTPPSPixelCluster aCluster, + std::vector &hits, + const PPSPixelTopology &ppt) { // take a cluster, generate a rec hit and push it in the rec hit vector - //call the topology - CTPPSPixelSimTopology topology; //call the numbering inside the ROC CTPPSPixelIndices pxlInd; // get information from the cluster @@ -67,18 +67,20 @@ void RPixClusterToHit::make_hit(CTPPSPixelCluster aCluster, std::vector()); + planeCombinations.emplace_back(); for (uint32_t i = 0; i < numberOfPlanes; ++i) { // [0..numberOfPlanes-1] integers if (bitmask[i]) planeCombinations.back().push_back(inputPlaneList.at(i)); diff --git a/RecoPPS/Local/src/RPixRoadFinder.cc b/RecoPPS/Local/src/RPixRoadFinder.cc index e8a223646a7ec..5917907d3f1cf 100644 --- a/RecoPPS/Local/src/RPixRoadFinder.cc +++ b/RecoPPS/Local/src/RPixRoadFinder.cc @@ -75,8 +75,7 @@ void RPixRoadFinder::findPattern() { theRotationTMatrix(2, 2)); math::Error<3>::type globalError = ROOT::Math::SimilarityT(theRotationTMatrix, localError); - PointInPlane thePointAndRecHit = {globalV, globalError, it_rh, myid}; - temp_all_hits.push_back(thePointAndRecHit); + temp_all_hits.emplace_back(PointInPlane{globalV, globalError, it_rh, myid}); } } diff --git a/RecoPPS/Local/src/TotemRPClusterProducerAlgorithm.cc b/RecoPPS/Local/src/TotemRPClusterProducerAlgorithm.cc index 90653fb9eb9bc..2e892eab75cc4 100644 --- a/RecoPPS/Local/src/TotemRPClusterProducerAlgorithm.cc +++ b/RecoPPS/Local/src/TotemRPClusterProducerAlgorithm.cc @@ -49,7 +49,7 @@ int TotemRPClusterProducerAlgorithm::buildClusters(unsigned int detId, iter_beg = false; } else if (non_continuity) { cluster_end = prev_strip; - clusters.push_back(TotemRPCluster((uint16_t)cluster_beg, (uint16_t)cluster_end)); + clusters.emplace_back((uint16_t)cluster_beg, (uint16_t)cluster_end); cluster_beg = cur_strip; } @@ -59,7 +59,7 @@ int TotemRPClusterProducerAlgorithm::buildClusters(unsigned int detId, if (!iter_beg) { cluster_end = prev_strip; - clusters.push_back(TotemRPCluster((uint16_t)cluster_beg, (uint16_t)cluster_end)); + clusters.emplace_back((uint16_t)cluster_beg, (uint16_t)cluster_end); } return clusters.size(); diff --git a/RecoPPS/Local/src/TotemRPRecHitProducerAlgorithm.cc b/RecoPPS/Local/src/TotemRPRecHitProducerAlgorithm.cc index ed131d2ead881..a0f623c8403ff 100644 --- a/RecoPPS/Local/src/TotemRPRecHitProducerAlgorithm.cc +++ b/RecoPPS/Local/src/TotemRPRecHitProducerAlgorithm.cc @@ -13,9 +13,8 @@ void TotemRPRecHitProducerAlgorithm::buildRecoHits(const edm::DetSet& input, edm::DetSet& output) { - for (edm::DetSet::const_iterator it = input.begin(); it != input.end(); ++it) { + for (const auto& clus : input) { constexpr double nominal_sigma = 0.0191; - output.push_back( - TotemRPRecHit(rp_topology_.GetHitPositionInReadoutDirection(it->centerStripPosition()), nominal_sigma)); + output.emplace_back(rp_topology_.GetHitPositionInReadoutDirection(clus.centerStripPosition()), nominal_sigma); } } diff --git a/RecoPPS/Local/src/TotemTimingRecHitProducerAlgorithm.cc b/RecoPPS/Local/src/TotemTimingRecHitProducerAlgorithm.cc index c26e4feca8ab2..87a5f3f23316a 100644 --- a/RecoPPS/Local/src/TotemTimingRecHitProducerAlgorithm.cc +++ b/RecoPPS/Local/src/TotemTimingRecHitProducerAlgorithm.cc @@ -85,18 +85,18 @@ void TotemTimingRecHitProducerAlgorithm::build(const CTPPSGeometry& geom, mode_ = TotemTimingRecHit::CFD; - rec_hits.push_back(TotemTimingRecHit(x_pos, - x_width, - y_pos, - y_width, - z_pos, - z_width, // spatial information - t, - triggerCellTimeInstant, - timePrecision, - *max_corrected_it, - baselineRegression.rms, - mode_)); + rec_hits.emplace_back(x_pos, + x_width, + y_pos, + y_width, + z_pos, + z_width, + t, + triggerCellTimeInstant, + timePrecision, + *max_corrected_it, + baselineRegression.rms, + mode_); } } } diff --git a/RecoPPS/Local/test/re_alignment/reco_align_corr_cfg.py b/RecoPPS/Local/test/re_alignment/reco_align_corr_cfg.py index 4c159477f6004..d98a81602518c 100644 --- a/RecoPPS/Local/test/re_alignment/reco_align_corr_cfg.py +++ b/RecoPPS/Local/test/re_alignment/reco_align_corr_cfg.py @@ -5,11 +5,13 @@ # minimum of logs process.MessageLogger = cms.Service("MessageLogger", - statistics = cms.untracked.vstring(), - destinations = cms.untracked.vstring("cout"), - cout = cms.untracked.PSet( - threshold = cms.untracked.string("WARNING") - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ) ) # raw data source diff --git a/RecoPPS/Local/test/re_alignment/reco_base_align_cfg.py b/RecoPPS/Local/test/re_alignment/reco_base_align_cfg.py index 9bf0472d63e06..30edbc2b698d6 100644 --- a/RecoPPS/Local/test/re_alignment/reco_base_align_cfg.py +++ b/RecoPPS/Local/test/re_alignment/reco_base_align_cfg.py @@ -5,11 +5,13 @@ # minimum of logs process.MessageLogger = cms.Service("MessageLogger", - statistics = cms.untracked.vstring(), - destinations = cms.untracked.vstring("cout"), - cout = cms.untracked.PSet( - threshold = cms.untracked.string("WARNING") - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ) ) # raw data source diff --git a/RecoPPS/Local/test/re_alignment/reco_full_align_cfg.py b/RecoPPS/Local/test/re_alignment/reco_full_align_cfg.py index b9450eb5a3a36..e6430bc6784f8 100644 --- a/RecoPPS/Local/test/re_alignment/reco_full_align_cfg.py +++ b/RecoPPS/Local/test/re_alignment/reco_full_align_cfg.py @@ -5,11 +5,13 @@ # minimum of logs process.MessageLogger = cms.Service("MessageLogger", - statistics = cms.untracked.vstring(), - destinations = cms.untracked.vstring("cout"), - cout = cms.untracked.PSet( - threshold = cms.untracked.string("WARNING") - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('WARNING') + ) ) # raw data source diff --git a/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_DB_real_mem.py b/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_DB_real_mem.py index c65a9af2f1c01..7da96d4ad718f 100644 --- a/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_DB_real_mem.py +++ b/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_DB_real_mem.py @@ -15,8 +15,14 @@ ) process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('cclu_info'), - cclu_info = cms.untracked.PSet( threshold = cms.untracked.string('INFO')) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + files = cms.untracked.PSet( + cclu_info = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) process.source = cms.Source("EmptyIOVSource", timetype = cms.string('runnumber'), diff --git a/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_REC_DAQ_TRK.py b/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_REC_DAQ_TRK.py index a51e45db1e5ee..e9af1ea5c1943 100644 --- a/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_REC_DAQ_TRK.py +++ b/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_REC_DAQ_TRK.py @@ -18,8 +18,13 @@ ) process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('cout'), - cout = cms.untracked.PSet( threshold = cms.untracked.string('ERROR')) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') + ) ) process.source = cms.Source("EmptyIOVSource", timetype = cms.string('runnumber'), diff --git a/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_REC_DB_real_mem.py b/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_REC_DB_real_mem.py index 7601a21caaefd..be87d88c54ef4 100644 --- a/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_REC_DB_real_mem.py +++ b/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_REC_DB_real_mem.py @@ -15,8 +15,14 @@ ) process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('rec_info'), - rec_info = cms.untracked.PSet( threshold = cms.untracked.string('INFO')) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + files = cms.untracked.PSet( + rec_info = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) ) process.source = cms.Source("EmptyIOVSource", timetype = cms.string('runnumber'), diff --git a/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_REC_mem_testDB_300811.py b/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_REC_mem_testDB_300811.py index 1ab8568dc67f9..eb390f723f576 100644 --- a/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_REC_mem_testDB_300811.py +++ b/RecoPPS/Local/test/run_only_CTPPS_cfg_CLU_REC_mem_testDB_300811.py @@ -18,8 +18,13 @@ ) process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('cout'), - cout = cms.untracked.PSet( threshold = cms.untracked.string('ERROR')) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('ERROR') + ) ) process.source = cms.Source("EmptyIOVSource", timetype = cms.string('runnumber'), diff --git a/RecoPPS/ProtonReconstruction/plugins/CTPPSProtonProducer.cc b/RecoPPS/ProtonReconstruction/plugins/CTPPSProtonProducer.cc index cba96e78b40c1..41f538d941fd5 100644 --- a/RecoPPS/ProtonReconstruction/plugins/CTPPSProtonProducer.cc +++ b/RecoPPS/ProtonReconstruction/plugins/CTPPSProtonProducer.cc @@ -411,8 +411,7 @@ void CTPPSProtonProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSe continue; // interpolation from tracking RPs - const double z_ti = - -hGeometry->rpTranslation(tr_ti.rpId()).z(); // the minus sign fixes a bug in the diamond geometry + const double z_ti = hGeometry->rpTranslation(tr_ti.rpId()).z(); const double f_i = (z_ti - z_j) / (z_i - z_j), f_j = (z_i - z_ti) / (z_i - z_j); const double x_inter = f_i * tr_i.x() + f_j * tr_j.x(); const double x_inter_unc_sq = @@ -499,7 +498,7 @@ void CTPPSProtonProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSe // save single-RP results (un-indexed) for (const auto &p : singleRPResultsIndexed) - pOutSingleRP->emplace_back(std::move(p.second)); + pOutSingleRP->emplace_back(p.second); } // dump log diff --git a/RecoPPS/ProtonReconstruction/plugins/PPSFilteredProtonProducer.cc b/RecoPPS/ProtonReconstruction/plugins/PPSFilteredProtonProducer.cc new file mode 100644 index 0000000000000..0a7ad2502ce8a --- /dev/null +++ b/RecoPPS/ProtonReconstruction/plugins/PPSFilteredProtonProducer.cc @@ -0,0 +1,268 @@ +/**************************************************************************** + * Authors: + * Jan Kaspar +****************************************************************************/ + +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/CTPPSDetId/interface/CTPPSDetId.h" +#include "DataFormats/CTPPSReco/interface/CTPPSLocalTrackLite.h" +#include "DataFormats/ProtonReco/interface/ForwardProton.h" +#include "DataFormats/ProtonReco/interface/ForwardProtonFwd.h" + +#include + +//---------------------------------------------------------------------------------------------------- + +/// Module to apply Proton POG quality criteria. +class PPSFilteredProtonProducer : public edm::stream::EDProducer<> { +public: + explicit PPSFilteredProtonProducer(const edm::ParameterSet &); + ~PPSFilteredProtonProducer() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); + +private: + void produce(edm::Event &, const edm::EventSetup &) override; + void endStream() override; + + edm::EDGetTokenT tracksToken_; + + bool verbosity_; + + double tracks_all_local_angle_x_max_, tracks_all_local_angle_y_max_; + + std::vector tracks_pixel_forbidden_RecoInfo_values_; + unsigned int tracks_pixel_number_of_hits_min_; + double tracks_pixel_normalised_chi_sq_max_; + + bool protons_single_rp_include_; + edm::EDGetTokenT protons_single_rp_input_token_; + std::string protons_single_rp_output_label_; + + bool protons_multi_rp_include_; + edm::EDGetTokenT protons_multi_rp_input_token_; + std::string protons_multi_rp_output_label_; + + bool protons_multi_rp_check_valid_fit_; + double protons_multi_rp_chi_sq_max_; + double protons_multi_rp_normalised_chi_sq_max_; + + /// counters + unsigned int n_protons_single_rp_all, n_protons_single_rp_kept; + unsigned int n_protons_multi_rp_all, n_protons_multi_rp_kept; + + /// check one track + bool IsTrackOK(const CTPPSLocalTrackLite &tr, unsigned int idx, std::ostringstream &log); +}; + +//---------------------------------------------------------------------------------------------------- + +PPSFilteredProtonProducer::PPSFilteredProtonProducer(const edm::ParameterSet &iConfig) + : verbosity_(iConfig.getUntrackedParameter("verbosity")), + n_protons_single_rp_all(0), + n_protons_single_rp_kept(0), + n_protons_multi_rp_all(0), + n_protons_multi_rp_kept(0) { + const auto &tracks_all = iConfig.getParameterSet("tracks_all"); + tracks_all_local_angle_x_max_ = tracks_all.getParameter("local_angle_x_max"); + tracks_all_local_angle_y_max_ = tracks_all.getParameter("local_angle_y_max"); + + const auto &tracks_pixel = iConfig.getParameterSet("tracks_pixel"); + tracks_pixel_forbidden_RecoInfo_values_ = + tracks_pixel.getParameter>("forbidden_RecoInfo_values"); + tracks_pixel_number_of_hits_min_ = tracks_pixel.getParameter("number_of_hits_min"); + tracks_pixel_normalised_chi_sq_max_ = tracks_pixel.getParameter("normalised_chi_sq_max"); + + const auto &protons_single_rp = iConfig.getParameterSet("protons_single_rp"); + protons_single_rp_include_ = protons_single_rp.getParameter("include"); + protons_single_rp_input_token_ = + consumes(protons_single_rp.getParameter("input_tag")); + protons_single_rp_output_label_ = protons_single_rp.getParameter("output_label"); + + const auto &protons_multi_rp = iConfig.getParameterSet("protons_multi_rp"); + protons_multi_rp_include_ = protons_multi_rp.getParameter("include"); + protons_multi_rp_input_token_ = + consumes(protons_multi_rp.getParameter("input_tag")); + protons_multi_rp_output_label_ = protons_multi_rp.getParameter("output_label"); + protons_multi_rp_check_valid_fit_ = protons_multi_rp.getParameter("check_valid_fit"); + protons_multi_rp_chi_sq_max_ = protons_multi_rp.getParameter("chi_sq_max"); + protons_multi_rp_normalised_chi_sq_max_ = protons_multi_rp.getParameter("normalised_chi_sq_max"); + + if (protons_single_rp_include_) + produces(protons_single_rp_output_label_); + + if (protons_multi_rp_include_) + produces(protons_multi_rp_output_label_); +} + +//---------------------------------------------------------------------------------------------------- + +void PPSFilteredProtonProducer::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { + edm::ParameterSetDescription desc; + + desc.addUntracked("verbosity", false)->setComment("verbosity"); + + edm::ParameterSetDescription tracks_all; + tracks_all.add("local_angle_x_max", 0.020) + ->setComment("maximum absolute value of local horizontal angle, in rad"); + tracks_all.add("local_angle_y_max", 0.020) + ->setComment("maximum absolute value of local horizontal angle, in rad"); + desc.add("tracks_all", tracks_all)->setComment("settings for all tracks"); + + edm::ParameterSetDescription tracks_pixel; + const std::vector def_for_RecoInfo_vals = { + (unsigned int)CTPPSpixelLocalTrackReconstructionInfo::allShiftedPlanes, + (unsigned int)CTPPSpixelLocalTrackReconstructionInfo::mixedPlanes}; + tracks_pixel.add>("forbidden_RecoInfo_values", def_for_RecoInfo_vals) + ->setComment("list of forbidden RecoInfo values"); + tracks_pixel.add("number_of_hits_min", 0)->setComment("minimum required number of hits"); + tracks_pixel.add("normalised_chi_sq_max", 1E100)->setComment("maximum tolerated chi square / ndof"); + desc.add("tracks_pixel", tracks_pixel) + ->setComment("specific settings for pixel-RP tracks"); + + edm::ParameterSetDescription protons_single_rp; + protons_single_rp.add("include", true)->setComment("flag whether single-RP protons should be processed"); + protons_single_rp.add("input_tag", edm::InputTag("ctppsProtons", "singleRP"))->setComment("input tag"); + protons_single_rp.add("output_label", "singleRP")->setComment("output label"); + desc.add("protons_single_rp", protons_single_rp) + ->setComment("settings for single-RP protons"); + + edm::ParameterSetDescription protons_multi_rp; + protons_multi_rp.add("include", true)->setComment("flag whether multi-RP protons should be processed"); + protons_multi_rp.add("input_tag", edm::InputTag("ctppsProtons", "multiRP"))->setComment("input tag"); + protons_multi_rp.add("output_label", "multiRP")->setComment("output label"); + protons_multi_rp.add("check_valid_fit", true)->setComment("flag whether validFit should be checked"); + protons_multi_rp.add("chi_sq_max", 1E-4)->setComment("maximum tolerated value of chi square"); + protons_multi_rp.add("normalised_chi_sq_max", 1E100) + ->setComment("maximum tolerated value of chi square / ndof, applied only if ndof > 0"); + desc.add("protons_multi_rp", protons_multi_rp) + ->setComment("settings for multi-RP protons"); + + descriptions.add("ppsFilteredProtonProducer", desc); +} + +//---------------------------------------------------------------------------------------------------- + +bool PPSFilteredProtonProducer::IsTrackOK(const CTPPSLocalTrackLite &tr, unsigned int idx, std::ostringstream &log) { + bool ok = true; + + // checks for all tracks + ok &= (std::abs(tr.tx()) < tracks_all_local_angle_x_max_); + ok &= (std::abs(tr.ty()) < tracks_all_local_angle_y_max_); + + // pixel checks + const CTPPSDetId rpId(tr.rpId()); + if (rpId.subdetId() == CTPPSDetId::sdTrackingPixel) { + ok &= (find(tracks_pixel_forbidden_RecoInfo_values_.begin(), + tracks_pixel_forbidden_RecoInfo_values_.end(), + (unsigned int)tr.pixelTrackRecoInfo()) == tracks_pixel_forbidden_RecoInfo_values_.end()); + ok &= (tr.numberOfPointsUsedForFit() >= tracks_pixel_number_of_hits_min_); + ok &= (tr.chiSquaredOverNDF() <= tracks_pixel_normalised_chi_sq_max_); + } + + if (!ok && verbosity_) + log << "track idx=" << idx << " does not fulfil criteria." << std::endl; + + return ok; +} + +//---------------------------------------------------------------------------------------------------- + +void PPSFilteredProtonProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) { + std::ostringstream ssLog; + + // process single-RP protons + if (protons_single_rp_include_) { + reco::ForwardProtonCollection const &hInputProtons = iEvent.get(protons_single_rp_input_token_); + std::unique_ptr pOutputProtons(new reco::ForwardProtonCollection); + + for (const auto &proton : hInputProtons) { + bool keep = true; + + // no specific checks for single-RP protons + + // test contributing tracks + for (const auto &tr_ref : proton.contributingLocalTracks()) { + if (!keep) + break; + + keep &= IsTrackOK(*tr_ref, tr_ref.key(), ssLog); + } + + n_protons_single_rp_all++; + + if (keep) { + n_protons_single_rp_kept++; + pOutputProtons->push_back(proton); + } else { + if (verbosity_) + ssLog << "single-RP proton idx=" << n_protons_single_rp_all - 1 << " excluded." << std::endl; + } + } + + iEvent.put(std::move(pOutputProtons), protons_single_rp_output_label_); + } + + // process multi-RP protons + if (protons_multi_rp_include_) { + reco::ForwardProtonCollection const &hInputProtons = iEvent.get(protons_multi_rp_input_token_); + std::unique_ptr pOutputProtons(new reco::ForwardProtonCollection); + + for (const auto &proton : hInputProtons) { + bool keep = true; + + // multi-RP proton checks + if (protons_multi_rp_check_valid_fit_) + keep &= proton.validFit(); + + keep &= (proton.chi2() <= protons_multi_rp_chi_sq_max_); + + if (proton.ndof() > 0) + keep &= (proton.normalizedChi2() <= protons_multi_rp_normalised_chi_sq_max_); + + // test contributing tracks + for (const auto &tr_ref : proton.contributingLocalTracks()) { + if (!keep) + break; + + keep &= IsTrackOK(*tr_ref, tr_ref.key(), ssLog); + } + + n_protons_multi_rp_all++; + + if (keep) { + n_protons_multi_rp_kept++; + pOutputProtons->push_back(proton); + } else { + if (verbosity_) + ssLog << "multi-RP proton idx=" << n_protons_multi_rp_all - 1 << " excluded." << std::endl; + } + } + + iEvent.put(std::move(pOutputProtons), protons_multi_rp_output_label_); + } + + if (verbosity_ && !ssLog.str().empty()) + edm::LogInfo("PPS") << ssLog.str(); +} + +//---------------------------------------------------------------------------------------------------- + +void PPSFilteredProtonProducer::endStream() { + edm::LogInfo("PPS") + << "single-RP protons: total=" << n_protons_single_rp_all << ", kept=" << n_protons_single_rp_kept + << " --> keep rate=" + << ((n_protons_single_rp_all > 0) ? double(n_protons_single_rp_kept) / n_protons_single_rp_all * 100. : 0.) + << "%\n" + << "multi-RP protons: total=" << n_protons_multi_rp_all << ", kept=" << n_protons_multi_rp_kept + << " --> keep rate=" + << ((n_protons_multi_rp_all > 0) ? double(n_protons_multi_rp_kept) / n_protons_multi_rp_all * 100. : 0.) << "%"; +} + +//---------------------------------------------------------------------------------------------------- + +DEFINE_FWK_MODULE(PPSFilteredProtonProducer); diff --git a/RecoParticleFlow/Configuration/python/RecoParticleFlow_EventContent_cff.py b/RecoParticleFlow/Configuration/python/RecoParticleFlow_EventContent_cff.py index d35456e4f2cf8..40b41d38c7767 100644 --- a/RecoParticleFlow/Configuration/python/RecoParticleFlow_EventContent_cff.py +++ b/RecoParticleFlow/Configuration/python/RecoParticleFlow_EventContent_cff.py @@ -87,3 +87,9 @@ outputCommands = RecoParticleFlowFEVT.outputCommands + ['keep recoPFRecHits_particleFlowClusterECAL__*', 'keep recoPFRecHits_particleFlowRecHitHGC__*', 'keep *_simPFProducer_*_*']) + +from Configuration.ProcessModifiers.mlpf_cff import mlpf +from RecoParticleFlow.PFProducer.mlpf_EventContent_cff import MLPF_RECO + +mlpf.toModify(RecoParticleFlowRECO, + outputCommands = RecoParticleFlowRECO.outputCommands + MLPF_RECO.outputCommands) diff --git a/RecoParticleFlow/Configuration/python/RecoParticleFlow_cff.py b/RecoParticleFlow/Configuration/python/RecoParticleFlow_cff.py index 3c91c95484e95..567c09b16ed19 100644 --- a/RecoParticleFlow/Configuration/python/RecoParticleFlow_cff.py +++ b/RecoParticleFlow/Configuration/python/RecoParticleFlow_cff.py @@ -14,7 +14,7 @@ #from RecoParticleFlow.PFProducer.pfGsfElectronCiCSelector_cff import * from RecoParticleFlow.PFProducer.pfGsfElectronMVASelector_cff import * -from RecoParticleFlow.PFProducer.pfLinker_cff import * +from RecoParticleFlow.PFProducer.pfLinker_cff import * from CommonTools.ParticleFlow.pfParticleSelection_cff import * @@ -34,7 +34,7 @@ particleFlowEGammaFullTask, particleFlowTmpTask, fixedGridRhoFastjetAllTmp, - particleFlowTmpPtrs, + particleFlowTmpPtrs, particleFlowEGammaFinalTask, pfParticleSelectionTask ) particleFlowReco = cms.Sequence(particleFlowRecoTask) @@ -42,31 +42,46 @@ particleFlowLinksTask = cms.Task( particleFlow, particleFlowPtrs, chargedHadronPFTrackIsolation, particleBasedIsolationTask) particleFlowLinks = cms.Sequence(particleFlowLinksTask) -from RecoParticleFlow.PFTracking.hgcalTrackCollection_cfi import * -from RecoParticleFlow.PFProducer.simPFProducer_cfi import * -from SimTracker.TrackerHitAssociation.tpClusterProducer_cfi import * -from SimTracker.TrackAssociatorProducers.quickTrackAssociatorByHits_cfi import * +# +# for phase 2 particleFlowTmpBarrel = particleFlowTmp.clone() _phase2_hgcal_particleFlowTmp = cms.EDProducer( "PFCandidateListMerger", src = cms.VInputTag("particleFlowTmpBarrel", - "simPFProducer") - + "pfTICL") + +) + +from Configuration.Eras.Modifier_phase2_hgcal_cff import phase2_hgcal +phase2_hgcal.toReplaceWith( particleFlowTmp, _phase2_hgcal_particleFlowTmp ) +phase2_hgcal.toModify( + particleFlowTmpBarrel, + vetoEndcap = True + # If true, PF(Muon)Algo will ignore muon candidates incorporated via pfTICL + # in addMissingMuons. This will prevent potential double-counting. ) +# +# for simPF +from RecoParticleFlow.PFTracking.hgcalTrackCollection_cfi import * +from RecoParticleFlow.PFProducer.simPFProducer_cff import * +from SimTracker.TrackerHitAssociation.tpClusterProducer_cfi import * +from SimTracker.TrackAssociatorProducers.quickTrackAssociatorByHits_cfi import * + _phase2_hgcal_simPFTask = cms.Task( pfTrack , - hgcalTrackCollection , + hgcalTrackCollection , tpClusterProducer , quickTrackAssociatorByHits , simPFProducer ) -_phase2_hgcal_simPFSequence = cms.Sequence(_phase2_hgcal_simPFTask) +_phase2_hgcal_simPFSequence = cms.Sequence(_phase2_hgcal_simPFTask) + _phase2_hgcal_particleFlowRecoTask = cms.Task( _phase2_hgcal_simPFTask , particleFlowRecoTask.copy() ) _phase2_hgcal_particleFlowRecoTask.replace( particleFlowTmpTask, cms.Task( particleFlowTmpBarrel, particleFlowTmp ) ) -from Configuration.Eras.Modifier_phase2_hgcal_cff import phase2_hgcal -phase2_hgcal.toReplaceWith( particleFlowTmp, _phase2_hgcal_particleFlowTmp ) phase2_hgcal.toReplaceWith( particleFlowRecoTask, _phase2_hgcal_particleFlowRecoTask ) +# +# for heavy ion from Configuration.Eras.Modifier_pp_on_XeXe_2017_cff import pp_on_XeXe_2017 from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA @@ -84,6 +99,46 @@ e.toModify(pfPileUpIso, enable = cms.bool(False)) e.toModify(pfNoPileUp, enable = cms.bool(False)) e.toModify(pfPileUp, enable = cms.bool(False)) - +# +# for MLPF +from Configuration.ProcessModifiers.mlpf_cff import mlpf +from RecoParticleFlow.PFProducer.mlpfProducer_cfi import mlpfProducer +_mlpfTask = cms.Task(mlpfProducer, particleFlowRecoTask.copy()) + +mlpf.toReplaceWith(particleFlowRecoTask, _mlpfTask) + +# +# switch from pfTICL to simPF +def _findIndicesByModule(process,name): + ret = [] + if hasattr(process,'particleFlowBlock'): + for i, pset in enumerate(process.particleFlowBlock.elementImporters): + if pset.importerName.value() == name: + ret.append(i) + return ret + +from Configuration.Eras.Modifier_phase2_hgcal_cff import phase2_hgcal +def replaceTICLwithSimPF(process): + if hasattr(process,'particleFlowTmp'): + process.particleFlowTmp.src = ['particleFlowTmpBarrel', 'simPFProducer'] + + if hasattr(process,'particleFlowTmpBarrel'): + process.particleFlowTmpBarrel.vetoEndcap = False + + _insertTrackImportersWithVeto = {} + _trackImporters = ['GeneralTracksImporter','ConvBremTrackImporter', + 'ConversionTrackImporter','NuclearInteractionTrackImporter'] + for importer in _trackImporters: + for idx in _findIndicesByModule(process,importer): + _insertTrackImportersWithVeto[idx] = dict( + vetoMode = cms.uint32(0), # HGCal-region PFTrack list for simPF + vetoSrc = cms.InputTag('hgcalTrackCollection:TracksInHGCal') + ) + phase2_hgcal.toModify( + process.particleFlowBlock, + elementImporters = _insertTrackImportersWithVeto + ) + + return process diff --git a/RecoParticleFlow/Configuration/test/IntegrationTestWithHLT_cfg.py b/RecoParticleFlow/Configuration/test/IntegrationTestWithHLT_cfg.py index da9f55016b3a8..42dda3ae6d013 100644 --- a/RecoParticleFlow/Configuration/test/IntegrationTestWithHLT_cfg.py +++ b/RecoParticleFlow/Configuration/test/IntegrationTestWithHLT_cfg.py @@ -133,10 +133,10 @@ # Keep the logging output to a nice level # # process.Timing = cms.Service("Timing") process.load("FWCore/MessageService/MessageLogger_cfi") -process.MessageLogger.categories.append('L1GtTrigReport') -process.MessageLogger.categories.append('HLTrigReport') +process.MessageLogger.L1GtTrigReport=dict() +process.MessageLogger.HLTrigReport=dict() #process.MessageLogger.destinations = cms.untracked.vstring("pyDetailedInfo.txt","cout") -#process.MessageLogger.categories.append("FamosManager") +# #process.MessageLogger.cout = cms.untracked.PSet(threshold=cms.untracked.string("INFO"), # default=cms.untracked.PSet(limit=cms.untracked.int32(0)), # FamosManager=cms.untracked.PSet(limit=cms.untracked.int32(100000))) diff --git a/RecoParticleFlow/PFClusterProducer/BuildFile.xml b/RecoParticleFlow/PFClusterProducer/BuildFile.xml index be5199e988a77..06ef529ae273b 100644 --- a/RecoParticleFlow/PFClusterProducer/BuildFile.xml +++ b/RecoParticleFlow/PFClusterProducer/BuildFile.xml @@ -1,6 +1,6 @@ - + diff --git a/RecoParticleFlow/PFClusterProducer/interface/PFClusterEMEnergyCorrector.h b/RecoParticleFlow/PFClusterProducer/interface/PFClusterEMEnergyCorrector.h index 1f7fe28aecbf6..0ba2e3a7a7c06 100644 --- a/RecoParticleFlow/PFClusterProducer/interface/PFClusterEMEnergyCorrector.h +++ b/RecoParticleFlow/PFClusterProducer/interface/PFClusterEMEnergyCorrector.h @@ -21,7 +21,7 @@ #include "RecoParticleFlow/PFClusterTools/interface/PFEnergyCalibration.h" #include "CondFormats/DataRecord/interface/GBRDWrapperRcd.h" -#include "CondFormats/EgammaObjects/interface/GBRForestD.h" +#include "CondFormats/GBRForest/interface/GBRForestD.h" class PFClusterEMEnergyCorrector { public: diff --git a/RecoParticleFlow/PFClusterProducer/plugins/Basic2DGenericPFlowPositionCalc.cc b/RecoParticleFlow/PFClusterProducer/plugins/Basic2DGenericPFlowPositionCalc.cc index 770ca0897090f..15771e496aede 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/Basic2DGenericPFlowPositionCalc.cc +++ b/RecoParticleFlow/PFClusterProducer/plugins/Basic2DGenericPFlowPositionCalc.cc @@ -6,7 +6,7 @@ #include #include "CommonTools/Utils/interface/DynArray.h" #include -#include +#include #include "vdt/vdtMath.h" @@ -69,11 +69,10 @@ void Basic2DGenericPFlowPositionCalc::calculateAndSetPositionActual(reco::PFClus const auto rh_rawenergy = rhf.energy; const auto rh_energy = rh_rawenergy * rh_fraction; #ifdef PF_DEBUG - if - UNLIKELY(edm::isNotFinite(rh_energy)) { - throw cms::Exception("PFClusterAlgo") << "rechit " << refhit.detId() << " has a NaN energy... " - << "The input of the particle flow clustering seems to be corrupted."; - } + if UNLIKELY (edm::isNotFinite(rh_energy)) { + throw cms::Exception("PFClusterAlgo") << "rechit " << refhit.detId() << " has a NaN energy... " + << "The input of the particle flow clustering seems to be corrupted."; + } #endif cl_energy += rh_energy; // If time resolution is given, calculated weighted average diff --git a/RecoParticleFlow/PFClusterProducer/plugins/LocalMaximumSeedFinder.cc b/RecoParticleFlow/PFClusterProducer/plugins/LocalMaximumSeedFinder.cc index 6b6ce0bb6e02d..894cf771bb4e0 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/LocalMaximumSeedFinder.cc +++ b/RecoParticleFlow/PFClusterProducer/plugins/LocalMaximumSeedFinder.cc @@ -3,6 +3,7 @@ #include #include #include +#include "DataFormats/Math/interface/deltaPhi.h" #include "CommonTools/Utils/interface/DynArray.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -140,8 +141,30 @@ void LocalMaximumSeedFinder::findSeeds(const edm::Handle dphicut && + std::abs(maybeseed.positionREP().eta() - nei.positionREP().eta()) > detacut) + continue; // masking is done only if the neighbor is on the swiss-cross w.r.t. the seed + break; + } + usable[neighbour] = false; - } + + } // for-loop } } diff --git a/RecoParticleFlow/PFClusterProducer/plugins/LocalMaximumSeedFinder.h b/RecoParticleFlow/PFClusterProducer/plugins/LocalMaximumSeedFinder.h index ee39d2f13f04b..e2fa5124b6543 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/LocalMaximumSeedFinder.h +++ b/RecoParticleFlow/PFClusterProducer/plugins/LocalMaximumSeedFinder.h @@ -25,6 +25,9 @@ class LocalMaximumSeedFinder final : public SeedFinderBase { std::array _thresholds; static constexpr int layerOffset = 15; + + static constexpr double detacut = 0.01; + static constexpr double dphicut = 0.01; }; DEFINE_EDM_PLUGIN(SeedFinderFactory, LocalMaximumSeedFinder, "LocalMaximumSeedFinder"); diff --git a/RecoParticleFlow/PFClusterProducer/python/particleFlowCluster_cff.py b/RecoParticleFlow/PFClusterProducer/python/particleFlowCluster_cff.py index a6f99cd036911..415c3b55d4b45 100644 --- a/RecoParticleFlow/PFClusterProducer/python/particleFlowCluster_cff.py +++ b/RecoParticleFlow/PFClusterProducer/python/particleFlowCluster_cff.py @@ -84,4 +84,4 @@ phase2_timing.toReplaceWith(particleFlowClusterECALTask, _phase2_timing_particleFlowClusterECALTask) phase2_timing.toModify(particleFlowClusterECAL, - inputECAL = cms.InputTag('particleFlowTimeAssignerECAL')) + inputECAL = 'particleFlowTimeAssignerECAL') diff --git a/RecoParticleFlow/PFClusterProducer/python/particleFlowRealisticSimClusterHGCCalibrations_cfi.py b/RecoParticleFlow/PFClusterProducer/python/particleFlowRealisticSimClusterHGCCalibrations_cfi.py index 2632a46b7068d..aa12021c9dcd8 100644 --- a/RecoParticleFlow/PFClusterProducer/python/particleFlowRealisticSimClusterHGCCalibrations_cfi.py +++ b/RecoParticleFlow/PFClusterProducer/python/particleFlowRealisticSimClusterHGCCalibrations_cfi.py @@ -5,8 +5,8 @@ hadronCorrections = cms.PSet(value = cms.vdouble(1.24, 1.24, 1.24, 1.23, 1.24, 1.25, 1.29, 1.29)) egammaCorrections = cms.PSet(value = cms.vdouble(1.00, 1.00, 1.01, 1.01, 1.02, 1.03, 1.04, 1.04)) -hadronCorrections_hgcalV10 = cms.vdouble(1.28, 1.28, 1.24, 1.19, 1.17, 1.17, 1.17, 1.17) -egammaCorrections_hgcalV10 = cms.vdouble(1.00, 1.00, 1.01, 1.01, 1.02, 1.01, 1.01, 1.01) +hadronCorrections_hgcalV10 = [1.28, 1.28, 1.24, 1.19, 1.17, 1.17, 1.17, 1.17] +egammaCorrections_hgcalV10 = [1.00, 1.00, 1.01, 1.01, 1.02, 1.01, 1.01, 1.01] from Configuration.Eras.Modifier_phase2_hgcalV10_cff import phase2_hgcalV10 phase2_hgcalV10.toModify(hadronCorrections, value = hadronCorrections_hgcalV10) diff --git a/RecoParticleFlow/PFProducer/BuildFile.xml b/RecoParticleFlow/PFProducer/BuildFile.xml index fc07e515bb655..1fc72d91072a0 100644 --- a/RecoParticleFlow/PFProducer/BuildFile.xml +++ b/RecoParticleFlow/PFProducer/BuildFile.xml @@ -1,4 +1,4 @@ - + diff --git a/RecoParticleFlow/PFProducer/interface/BlockElementImporterBase.h b/RecoParticleFlow/PFProducer/interface/BlockElementImporterBase.h index d50910342e9fa..3c313119373a8 100644 --- a/RecoParticleFlow/PFProducer/interface/BlockElementImporterBase.h +++ b/RecoParticleFlow/PFProducer/interface/BlockElementImporterBase.h @@ -26,6 +26,8 @@ class BlockElementImporterBase { const std::string& name() const { return _importerName; } + enum VetoMode { pfRecTrackCollection = 0, ticlSeedingRegion = 1, pfCandidateCollection = 2 }; + private: const std::string _importerName; }; diff --git a/RecoParticleFlow/PFProducer/interface/MLPFModel.h b/RecoParticleFlow/PFProducer/interface/MLPFModel.h new file mode 100644 index 0000000000000..9c850859981ef --- /dev/null +++ b/RecoParticleFlow/PFProducer/interface/MLPFModel.h @@ -0,0 +1,67 @@ +#ifndef RecoParticleFlow_PFProducer_interface_MLPFModel +#define RecoParticleFlow_PFProducer_interface_MLPFModel + +#include "FWCore/Framework/interface/Event.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlockElement.h" +#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" + +namespace reco::mlpf { + //The model takes the following number of features for each input PFElement + static constexpr unsigned int NUM_ELEMENT_FEATURES = 15; + + //these are defined at model creation time and set the random LSH codebook size + static constexpr int NUM_MAX_ELEMENTS_BATCH = 20000; + static constexpr int LSH_BIN_SIZE = 100; + + //In CPU mode, we only want to evaluate each event separately + static constexpr int BATCH_SIZE = 1; + + //The model has 12 outputs for each particle: + // out[0-7]: particle classification logits + // out[8]: regressed eta + // out[9]: regressed phi + // out[10]: regressed energy + // out[11]: regressed charge logit + static constexpr unsigned int NUM_OUTPUTS = 12; + static constexpr unsigned int NUM_CLASS = 7; + static constexpr unsigned int IDX_ETA = 8; + static constexpr unsigned int IDX_PHI = 9; + static constexpr unsigned int IDX_ENERGY = 10; + static constexpr unsigned int IDX_CHARGE = 11; + + //index [0, N_pdgids) -> PDGID + //this maps the absolute values of the predicted PDGIDs to an array of ascending indices + static const std::vector pdgid_encoding = {0, 1, 2, 11, 13, 22, 130, 211}; + + //PFElement::type -> index [0, N_types) + //this maps the type of the PFElement to an ascending index that is used by the model to distinguish between different elements + static const std::map elem_type_encoding = { + {0, 0}, + {1, 1}, + {2, 2}, + {3, 3}, + {4, 4}, + {5, 5}, + {6, 6}, + {7, 7}, + {8, 8}, + {9, 9}, + {10, 10}, + {11, 11}, + }; + + std::array getElementProperties(const reco::PFBlockElement& orig); + float normalize(float in); + + int argMax(std::vector const& vec); + + reco::PFCandidate makeCandidate(int pred_pid, int pred_charge, float pred_e, float pred_eta, float pred_phi); + + const std::vector getPFElements(const reco::PFBlockCollection& blocks); + + void setCandidateRefs(reco::PFCandidate& cand, + const std::vector elems, + size_t ielem_originator); +}; // namespace reco::mlpf + +#endif \ No newline at end of file diff --git a/RecoParticleFlow/PFProducer/interface/PFAlgo.h b/RecoParticleFlow/PFProducer/interface/PFAlgo.h index ca6880f9257da..143d127d5082a 100644 --- a/RecoParticleFlow/PFProducer/interface/PFAlgo.h +++ b/RecoParticleFlow/PFProducer/interface/PFAlgo.h @@ -63,7 +63,7 @@ class PFAlgo { const edm::ParameterSet& pset); void setHOTag(bool ho) { useHO_ = ho; } - void setMuonHandle(const edm::Handle&); + void setMuonHandle(const edm::Handle& muons) { muonHandle_ = muons; } void setCandConnectorParameters(const edm::ParameterSet& iCfgCandConnector) { connector_.setParameters(iCfgCandConnector); diff --git a/RecoParticleFlow/PFProducer/interface/PFEGammaAlgo.h b/RecoParticleFlow/PFProducer/interface/PFEGammaAlgo.h index 364aa4c5848da..63b4f844ead17 100644 --- a/RecoParticleFlow/PFProducer/interface/PFEGammaAlgo.h +++ b/RecoParticleFlow/PFProducer/interface/PFEGammaAlgo.h @@ -36,7 +36,7 @@ #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateEGammaExtraFwd.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateEGammaExtra.h" #include "DataFormats/EgammaReco/interface/ElectronSeed.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "CondFormats/ESObjects/interface/ESEEIntercalibConstants.h" #include "CondFormats/ESObjects/interface/ESChannelStatus.h" diff --git a/RecoParticleFlow/PFProducer/interface/PFMuonAlgo.h b/RecoParticleFlow/PFProducer/interface/PFMuonAlgo.h index 68775ad3c2720..616a53998dfca 100644 --- a/RecoParticleFlow/PFProducer/interface/PFMuonAlgo.h +++ b/RecoParticleFlow/PFProducer/interface/PFMuonAlgo.h @@ -51,6 +51,7 @@ class PFMuonAlgo { void setInputsForCleaning(reco::VertexCollection const&); void postClean(reco::PFCandidateCollection*); void addMissingMuons(edm::Handle, reco::PFCandidateCollection* cands); + void setVetoes(const reco::PFCandidateCollection& vetoes) { vetoes_ = &vetoes; } std::unique_ptr transferCleanedCosmicCandidates() { return std::move(pfCosmicsMuonCleanedCandidates_); @@ -80,6 +81,8 @@ class PFMuonAlgo { double maxDPtOPt = 1e+9, bool includeSA = false); + static int muAssocToTrack(const reco::TrackRef& trackref, const reco::MuonCollection& muons); + private: //Give the track with the smallest Dpt/Pt MuonTrackTypePair getTrackWithSmallestError(const std::vector&); @@ -114,6 +117,8 @@ class PFMuonAlgo { std::vector maskedIndices_; + const reco::PFCandidateCollection* vetoes_ = nullptr; + ////////////////////////////////////////////////////////////////////////////////////// const reco::VertexCollection* vertices_; diff --git a/RecoParticleFlow/PFProducer/plugins/BuildFile.xml b/RecoParticleFlow/PFProducer/plugins/BuildFile.xml index 676d8a1ecc962..3a6b62bee158b 100644 --- a/RecoParticleFlow/PFProducer/plugins/BuildFile.xml +++ b/RecoParticleFlow/PFProducer/plugins/BuildFile.xml @@ -79,5 +79,6 @@ + diff --git a/RecoParticleFlow/PFProducer/plugins/ChargedHadronPFTrackIsolationProducer.cc b/RecoParticleFlow/PFProducer/plugins/ChargedHadronPFTrackIsolationProducer.cc index e0bb6ac44c593..d955e4a639fa7 100644 --- a/RecoParticleFlow/PFProducer/plugins/ChargedHadronPFTrackIsolationProducer.cc +++ b/RecoParticleFlow/PFProducer/plugins/ChargedHadronPFTrackIsolationProducer.cc @@ -59,14 +59,17 @@ void ChargedHadronPFTrackIsolationProducer::produce(edm::StreamID, edm::Event& e ((c.rawEcalEnergy() + c.rawHcalEnergy()) > minRawCaloEnergy_)) { const reco::PFCandidate::ElementsInBlocks& theElements = c.elementsInBlocks(); if (theElements.empty()) - continue; - const reco::PFBlockRef blockRef = theElements[0].first; - const edm::OwnVector& elements = blockRef->elements(); - // Find the tracks in the block - for (auto const& ele : elements) { - reco::PFBlockElement::Type type = ele.type(); - if (type == reco::PFBlockElement::TRACK) - nTracks++; + nTracks = 1; // the PFBlockElements is empty for pfTICL charged candidates + // because they don't go through PFBlocks machanism. We consider each charged candidate to be well isolated for now. + else { + const reco::PFBlockRef blockRef = theElements[0].first; + const edm::OwnVector& elements = blockRef->elements(); + // Find the tracks in the block + for (auto const& ele : elements) { + reco::PFBlockElement::Type type = ele.type(); + if (type == reco::PFBlockElement::TRACK) + nTracks++; + } } } values.push_back((nTracks == 1)); diff --git a/RecoParticleFlow/PFProducer/plugins/MLPFProducer.cc b/RecoParticleFlow/PFProducer/plugins/MLPFProducer.cc new file mode 100644 index 0000000000000..add3f1e27ddd1 --- /dev/null +++ b/RecoParticleFlow/PFProducer/plugins/MLPFProducer.cc @@ -0,0 +1,139 @@ +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" +#include "PhysicsTools/TensorFlow/interface/TensorFlow.h" +#include "RecoParticleFlow/PFProducer/interface/MLPFModel.h" + +struct MLPFCache { + const tensorflow::GraphDef* graph_def; +}; + +class MLPFProducer : public edm::stream::EDProducer > { +public: + explicit MLPFProducer(const edm::ParameterSet&, const MLPFCache*); + void produce(edm::Event& event, const edm::EventSetup& setup) override; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + // static methods for handling the global cache + static std::unique_ptr initializeGlobalCache(const edm::ParameterSet&); + static void globalEndJob(MLPFCache*); + +private: + const edm::EDPutTokenT pfCandidatesPutToken_; + const edm::EDGetTokenT inputTagBlocks_; + const std::string model_path_; + tensorflow::Session* session_; +}; + +MLPFProducer::MLPFProducer(const edm::ParameterSet& cfg, const MLPFCache* cache) + : pfCandidatesPutToken_{produces()}, + inputTagBlocks_(consumes(cfg.getParameter("src"))), + model_path_(cfg.getParameter("model_path")) { + session_ = tensorflow::createSession(cache->graph_def); +} + +void MLPFProducer::produce(edm::Event& event, const edm::EventSetup& setup) { + using namespace reco::mlpf; + + const auto& blocks = event.get(inputTagBlocks_); + const auto& all_elements = getPFElements(blocks); + + const long long int num_elements_total = all_elements.size(); + + //tensor size must be a multiple of the bin size and larger than the number of elements + const auto tensor_size = LSH_BIN_SIZE * (num_elements_total / LSH_BIN_SIZE + 1); + assert(tensor_size <= NUM_MAX_ELEMENTS_BATCH); + + //Create the input tensor + tensorflow::TensorShape shape({BATCH_SIZE, tensor_size, NUM_ELEMENT_FEATURES}); + tensorflow::Tensor input(tensorflow::DT_FLOAT, shape); + input.flat().setZero(); + + //Fill the input tensor + unsigned int ielem = 0; + for (const auto* pelem : all_elements) { + const auto& elem = *pelem; + + //prepare the input array from the PFElement + const auto& props = getElementProperties(elem); + + //copy features to the input array + for (unsigned int iprop = 0; iprop < NUM_ELEMENT_FEATURES; iprop++) { + input.tensor()(0, ielem, iprop) = normalize(props[iprop]); + } + ielem += 1; + } + + //TF model input and output tensor names + const tensorflow::NamedTensorList input_list = {{"x:0", input}}; + const std::vector output_names = {"Identity:0"}; + + //Prepare the output tensor + std::vector outputs; + + //run the GNN inference, given the inputs and the output. + //Note that the GNN enables information transfer between the input PFElements, + //such that the output ML-PFCandidates are in general combinations of the input PFElements, in the form of + //y_out = Adj.x_in, where x_in is input matrix (num_elem, NUM_ELEMENT_FEATURES), y_out is the output matrix (num_elem, NUM_OUTPUT_FEATURES) + //and Adj is an adjacency matrix between the elements that is constructed on the fly during model inference. + tensorflow::run(session_, input_list, output_names, &outputs); + + //process the output tensor to ML-PFCandidates. + //The output can contain up to num_elem particles, with predicted PDGID=0 corresponding to no particles predicted. + const auto out_arr = outputs[0].tensor(); + + std::vector pOutputCandidateCollection; + for (unsigned int ielem = 0; ielem < all_elements.size(); ielem++) { + //get the coefficients in the output corresponding to the class probabilities (raw logits) + std::vector pred_id_logits; + for (unsigned int idx_id = 0; idx_id <= NUM_CLASS; idx_id++) { + pred_id_logits.push_back(out_arr(0, ielem, idx_id)); + } + + //get the most probable class PDGID + int pred_pid = pdgid_encoding[argMax(pred_id_logits)]; + + //get the predicted momentum components + float pred_eta = out_arr(0, ielem, IDX_ETA); + float pred_phi = out_arr(0, ielem, IDX_PHI); + float pred_charge = out_arr(0, ielem, IDX_CHARGE); + float pred_e = out_arr(0, ielem, IDX_ENERGY); + + //a particle was predicted for this PFElement, otherwise it was a spectator + if (pred_pid != 0) { + auto cand = makeCandidate(pred_pid, pred_charge, pred_e, pred_eta, pred_phi); + setCandidateRefs(cand, all_elements, ielem); + pOutputCandidateCollection.push_back(cand); + } + } //loop over PFElements + + event.emplace(pfCandidatesPutToken_, pOutputCandidateCollection); +} + +std::unique_ptr MLPFProducer::initializeGlobalCache(const edm::ParameterSet& params) { + // this method is supposed to create, initialize and return a MLPFCache instance + std::unique_ptr cache = std::make_unique(); + + //load the frozen TF graph of the GNN model + std::string path = params.getParameter("model_path"); + auto fullPath = edm::FileInPath(path).fullPath(); + LogDebug("MLPFProducer") << "Initializing MLPF model from " << fullPath; + + cache->graph_def = tensorflow::loadGraphDef(fullPath); + + return cache; +} + +void MLPFProducer::globalEndJob(MLPFCache* cache) { delete cache->graph_def; } + +void MLPFProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("src", edm::InputTag("particleFlowBlock")); + desc.add("model_path", "RecoParticleFlow/PFProducer/data/mlpf/mlpf_2020_11_04.pb"); + descriptions.addWithDefaultLabel(desc); +} + +DEFINE_FWK_MODULE(MLPFProducer); diff --git a/RecoParticleFlow/PFProducer/plugins/PFProducer.cc b/RecoParticleFlow/PFProducer/plugins/PFProducer.cc index a376e5030193b..e5ce1bcce42c4 100644 --- a/RecoParticleFlow/PFProducer/plugins/PFProducer.cc +++ b/RecoParticleFlow/PFProducer/plugins/PFProducer.cc @@ -3,6 +3,7 @@ #include "FWCore/Utilities/interface/EDPutToken.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/EmptyGroupDescription.h" #include "DataFormats/EgammaCandidates/interface/GsfElectron.h" #include "DataFormats/ParticleFlowReco/interface/PFRecHit.h" #include "DataFormats/ParticleFlowReco/interface/PFBlockElementSuperCluster.h" @@ -55,6 +56,9 @@ class PFProducer : public edm::stream::EDProducer<> { std::string electronExtraOutputCol_; std::string photonExtraOutputCol_; + bool vetoEndcap_; + edm::EDGetTokenT inputTagVetoes_; + // NEW EGamma Filters edm::EDGetTokenT> inputTagValueMapGedElectrons_; edm::EDGetTokenT> inputTagValueMapGedPhotons_; @@ -120,6 +124,9 @@ PFProducer::PFProducer(const edm::ParameterSet& iConfig) //Post cleaning of the muons inputTagMuons_ = consumes(iConfig.getParameter("muons")); postMuonCleaning_ = iConfig.getParameter("postMuonCleaning"); + vetoEndcap_ = iConfig.getParameter("vetoEndcap"); + if (vetoEndcap_) + inputTagVetoes_ = consumes(iConfig.getParameter("vetoes")); if (iConfig.existsAs("useEGammaFilters")) { use_EGammaFilters_ = iConfig.getParameter("useEGammaFilters"); @@ -234,9 +241,14 @@ void PFProducer::produce(Event& iEvent, const EventSetup& iSetup) { auto blocks = iEvent.getHandle(inputTagBlocks_); assert(blocks.isValid()); - // get the collection of muons - if (postMuonCleaning_) + // get and set the collection of muons (and collection of vetoes if specified) + if (postMuonCleaning_) { pfAlgo_.setMuonHandle(iEvent.getHandle(inputTagMuons_)); + if (vetoEndcap_) { + auto& muAlgo = *pfAlgo_.getPFMuonAlgo(); + muAlgo.setVetoes(iEvent.get(inputTagVetoes_)); + } + } if (use_EGammaFilters_) pfAlgo_.setEGammaCollections(iEvent.get(inputTagPFEGammaCandidates_), @@ -317,6 +329,12 @@ void PFProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) desc.add("muons", edm::InputTag("muons1stStep")); desc.add("postMuonCleaning", true); + // vetoEndcap flag and pf candidates for vetoes + edm::ParameterSetDescription emptyDescription; + desc.ifValue(edm::ParameterDescription("vetoEndcap", false, true), + true >> edm::ParameterDescription("vetoes", {"pfTICL"}, true) or + false >> edm::EmptyGroupDescription()); + // Vertices label desc.add("vertexCollection", edm::InputTag("offlinePrimaryVertices")); desc.add("useVerticesForNeutral", true); diff --git a/RecoParticleFlow/PFProducer/plugins/importers/GeneralTracksImporter.cc b/RecoParticleFlow/PFProducer/plugins/importers/GeneralTracksImporter.cc index ea4a432213bdd..7e32d38d16260 100644 --- a/RecoParticleFlow/PFProducer/plugins/importers/GeneralTracksImporter.cc +++ b/RecoParticleFlow/PFProducer/plugins/importers/GeneralTracksImporter.cc @@ -5,6 +5,7 @@ #include "DataFormats/TrackReco/interface/Track.h" #include "DataFormats/MuonReco/interface/Muon.h" #include "DataFormats/Common/interface/ValueMap.h" +#include "DataFormats/HGCalReco/interface/TICLSeedingRegion.h" #include "RecoParticleFlow/PFProducer/interface/PFMuonAlgo.h" #include "RecoParticleFlow/PFTracking/interface/PFTrackAlgoTools.h" @@ -13,26 +14,49 @@ class GeneralTracksImporter : public BlockElementImporterBase { GeneralTracksImporter(const edm::ParameterSet& conf, edm::ConsumesCollector& sumes) : BlockElementImporterBase(conf, sumes), src_(sumes.consumes(conf.getParameter("source"))), + vetoEndcap_(conf.getParameter("vetoEndcap")), muons_(sumes.consumes(conf.getParameter("muonSrc"))), trackQuality_(reco::TrackBase::qualityByName(conf.getParameter("trackQuality"))), - DPtovPtCut_(conf.getParameter >("DPtOverPtCuts_byTrackAlgo")), - NHitCut_(conf.getParameter >("NHitCuts_byTrackAlgo")), + DPtovPtCut_(conf.getParameter>("DPtOverPtCuts_byTrackAlgo")), + NHitCut_(conf.getParameter>("NHitCuts_byTrackAlgo")), useIterTracking_(conf.getParameter("useIterativeTracking")), cleanBadConvBrems_(conf.getParameter("cleanBadConvertedBrems")), - muonMaxDPtOPt_(conf.getParameter("muonMaxDPtOPt")) {} + muonMaxDPtOPt_(conf.getParameter("muonMaxDPtOPt")) { + if (vetoEndcap_) { + vetoMode_ = conf.getParameter("vetoMode"); + switch (vetoMode_) { + case pfRecTrackCollection: + vetoPFTracksSrc_ = sumes.consumes(conf.getParameter("vetoSrc")); + break; + case ticlSeedingRegion: + vetoTICLSeedingSrc_ = + sumes.consumes>(conf.getParameter("vetoSrc")); + tracksSrc_ = sumes.consumes(conf.getParameter("tracksSrc")); + break; + case pfCandidateCollection: + vetoPFCandidatesSrc_ = + sumes.consumes(conf.getParameter("vetoSrc")); + break; + } // switch + } + } void importToBlock(const edm::Event&, ElementList&) const override; private: - int muAssocToTrack(const reco::TrackRef& trackref, const edm::Handle& muonh) const; - - edm::EDGetTokenT src_; - edm::EDGetTokenT muons_; + const edm::EDGetTokenT src_; + const bool vetoEndcap_; + const edm::EDGetTokenT muons_; const reco::TrackBase::TrackQuality trackQuality_; const std::vector DPtovPtCut_; const std::vector NHitCut_; const bool useIterTracking_, cleanBadConvBrems_; const double muonMaxDPtOPt_; + unsigned int vetoMode_; + edm::EDGetTokenT vetoPFTracksSrc_; + edm::EDGetTokenT> vetoTICLSeedingSrc_; + edm::EDGetTokenT tracksSrc_; + edm::EDGetTokenT vetoPFCandidatesSrc_; }; DEFINE_EDM_PLUGIN(BlockElementImporterFactory, GeneralTracksImporter, "GeneralTracksImporter"); @@ -40,7 +64,41 @@ DEFINE_EDM_PLUGIN(BlockElementImporterFactory, GeneralTracksImporter, "GeneralTr void GeneralTracksImporter::importToBlock(const edm::Event& e, BlockElementImporterBase::ElementList& elems) const { typedef BlockElementImporterBase::ElementList::value_type ElementType; auto tracks = e.getHandle(src_); - auto muons = e.getHandle(muons_); + + typedef std::pair TrackProdIDKey; + std::vector vetoed; + if (vetoEndcap_) { + switch (vetoMode_) { + case pfRecTrackCollection: { + const auto& vetoes = e.get(vetoPFTracksSrc_); + for (const auto& veto : vetoes) + vetoed.emplace_back(veto.trackRef().id(), veto.trackRef().key()); + break; + } + case ticlSeedingRegion: { + const auto& vetoes = e.get(vetoTICLSeedingSrc_); + auto tracksH = e.getHandle(tracksSrc_); + for (const auto& veto : vetoes) { + assert(veto.collectionID == tracksH.id()); + reco::TrackRef trkref = reco::TrackRef(tracksH, veto.index); + vetoed.emplace_back(tracksH.id(), veto.index); // track prod id and key + } + break; + } + case pfCandidateCollection: { + const auto& vetoes = e.get(vetoPFCandidatesSrc_); + for (const auto& veto : vetoes) { + if (veto.trackRef().isNull()) + continue; + vetoed.emplace_back(veto.trackRef().id(), veto.trackRef().key()); + } + break; + } + } // switch + std::sort(vetoed.begin(), vetoed.end()); + } + const auto muonH = e.getHandle(muons_); + const auto muons = *muonH; elems.reserve(elems.size() + tracks->size()); std::vector mask(tracks->size(), true); reco::MuonRef muonref; @@ -84,9 +142,9 @@ void GeneralTracksImporter::importToBlock(const edm::Event& e, BlockElementImpor if (tk_elem != TKs_end) { mask[std::distance(tracks->cbegin(), track)] = false; // check and update if this track is a muon - const int muId = muAssocToTrack((*tk_elem)->trackRef(), muons); + const int muId = PFMuonAlgo::muAssocToTrack((*tk_elem)->trackRef(), muons); if (muId != -1) { - muonref = reco::MuonRef(muons, muId); + muonref = reco::MuonRef(muonH, muId); if (PFMuonAlgo::isLooseMuon(muonref) || PFMuonAlgo::isMuon(muonref)) { static_cast(tk_elem->get())->setMuonRef(muonref); } @@ -105,10 +163,10 @@ void GeneralTracksImporter::importToBlock(const edm::Event& e, BlockElementImpor muonref = reco::MuonRef(); pftrackref = reco::PFRecTrackRef(tracks, idx); // Get the eventual muon associated to this track - const int muId = muAssocToTrack(pftrackref->trackRef(), muons); + const int muId = PFMuonAlgo::muAssocToTrack(pftrackref->trackRef(), muons); bool thisIsAPotentialMuon = false; if (muId != -1) { - muonref = reco::MuonRef(muons, muId); + muonref = reco::MuonRef(muonH, muId); thisIsAPotentialMuon = ((PFMuonAlgo::hasValidTrack(muonref, true, muonMaxDPtOPt_) && PFMuonAlgo::isLooseMuon(muonref)) || (PFMuonAlgo::hasValidTrack(muonref, false, muonMaxDPtOPt_) && PFMuonAlgo::isMuon(muonref))); @@ -122,16 +180,23 @@ void GeneralTracksImporter::importToBlock(const edm::Event& e, BlockElementImpor } if (muId != -1) trkElem->setMuonRef(muonref); - elems.emplace_back(trkElem); + // + // if _vetoEndcap is false, add this trk automatically. + // if _vetoEndcap is true, veto against the hgcal region tracks or charged PF candidates. + // when simPF is used, we don't veto tracks with muonref even if they are in the hgcal region. + // + if (!vetoEndcap_) + elems.emplace_back(trkElem); + else { + TrackProdIDKey trk = std::make_pair(pftrackref->trackRef().id(), pftrackref->trackRef().key()); + auto lower = std::lower_bound(vetoed.begin(), vetoed.end(), trk); + bool inVetoList = (lower != vetoed.end() && *lower == trk); + if (!inVetoList || (vetoMode_ == pfRecTrackCollection && muonref.isNonnull())) { + elems.emplace_back(trkElem); + } else + delete trkElem; + } } } elems.shrink_to_fit(); } - -int GeneralTracksImporter::muAssocToTrack(const reco::TrackRef& trackref, - const edm::Handle& muonh) const { - auto muon = std::find_if(muonh->cbegin(), muonh->cend(), [&](const reco::Muon& m) { - return (m.track().isNonnull() && m.track() == trackref); - }); - return (muon != muonh->cend() ? std::distance(muonh->cbegin(), muon) : -1); -} diff --git a/RecoParticleFlow/PFProducer/plugins/importers/GeneralTracksImporterWithVeto.cc b/RecoParticleFlow/PFProducer/plugins/importers/GeneralTracksImporterWithVeto.cc deleted file mode 100644 index a244ebf141fa8..0000000000000 --- a/RecoParticleFlow/PFProducer/plugins/importers/GeneralTracksImporterWithVeto.cc +++ /dev/null @@ -1,148 +0,0 @@ -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "RecoParticleFlow/PFProducer/interface/BlockElementImporterBase.h" -#include "DataFormats/ParticleFlowReco/interface/PFBlockElementTrack.h" -#include "DataFormats/ParticleFlowReco/interface/PFRecTrack.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "RecoParticleFlow/PFProducer/interface/PFMuonAlgo.h" -#include "RecoParticleFlow/PFTracking/interface/PFTrackAlgoTools.h" - -class GeneralTracksImporterWithVeto : public BlockElementImporterBase { -public: - GeneralTracksImporterWithVeto(const edm::ParameterSet& conf, edm::ConsumesCollector& sumes) - : BlockElementImporterBase(conf, sumes), - src_(sumes.consumes(conf.getParameter("source"))), - veto_(sumes.consumes(conf.getParameter("veto"))), - muons_(sumes.consumes(conf.getParameter("muonSrc"))), - trackQuality_(reco::TrackBase::qualityByName(conf.getParameter("trackQuality"))), - DPtovPtCut_(conf.getParameter >("DPtOverPtCuts_byTrackAlgo")), - NHitCut_(conf.getParameter >("NHitCuts_byTrackAlgo")), - useIterTracking_(conf.getParameter("useIterativeTracking")), - cleanBadConvBrems_(conf.getParameter("cleanBadConvertedBrems")), - muonMaxDPtOPt_(conf.getParameter("muonMaxDPtOPt")) {} - - void importToBlock(const edm::Event&, ElementList&) const override; - -private: - int muAssocToTrack(const reco::TrackRef& trackref, const edm::Handle& muonh) const; - - edm::EDGetTokenT src_, veto_; - edm::EDGetTokenT muons_; - const reco::TrackBase::TrackQuality trackQuality_; - const std::vector DPtovPtCut_; - const std::vector NHitCut_; - const bool useIterTracking_, cleanBadConvBrems_; - const double muonMaxDPtOPt_; -}; - -DEFINE_EDM_PLUGIN(BlockElementImporterFactory, GeneralTracksImporterWithVeto, "GeneralTracksImporterWithVeto"); - -void GeneralTracksImporterWithVeto::importToBlock(const edm::Event& e, - BlockElementImporterBase::ElementList& elems) const { - typedef BlockElementImporterBase::ElementList::value_type ElementType; - auto tracks = e.getHandle(src_); - auto vetosH = e.getHandle(veto_); - const auto& vetos = *vetosH; - std::unordered_set vetoed; - for (unsigned i = 0; i < vetos.size(); ++i) { - vetoed.insert(vetos[i].trackRef().key()); - } - auto muons = e.getHandle(muons_); - elems.reserve(elems.size() + tracks->size()); - std::vector mask(tracks->size(), true); - reco::MuonRef muonref; - - // remove converted brems with bad pT resolution if requested - // this reproduces the old behavior of PFBlockAlgo - if (cleanBadConvBrems_) { - auto itr = elems.begin(); - while (itr != elems.end()) { - if ((*itr)->type() == reco::PFBlockElement::TRACK) { - const reco::PFBlockElementTrack* trkel = static_cast(itr->get()); - const reco::ConversionRefVector& cRef = trkel->convRefs(); - const reco::PFDisplacedTrackerVertexRef& dvRef = trkel->displacedVertexRef(reco::PFBlockElement::T_FROM_DISP); - const reco::VertexCompositeCandidateRef& v0Ref = trkel->V0Ref(); - // if there is no displaced vertex reference and it is marked - // as a conversion it's gotta be a converted brem - if (trkel->trackType(reco::PFBlockElement::T_FROM_GAMMACONV) && cRef.empty() && dvRef.isNull() && - v0Ref.isNull()) { - // if the Pt resolution is bad we kill this element - if (!PFTrackAlgoTools::goodPtResolution( - trkel->trackRef(), DPtovPtCut_, NHitCut_, useIterTracking_, trackQuality_)) { - itr = elems.erase(itr); - continue; - } - } - } - ++itr; - } // loop on existing elements - } - // preprocess existing tracks in the element list and create a mask - // so that we do not import tracks twice, tag muons we find - // in this collection - auto TKs_end = std::partition( - elems.begin(), elems.end(), [](const ElementType& a) { return a->type() == reco::PFBlockElement::TRACK; }); - auto btk_elems = elems.begin(); - auto btrack = tracks->cbegin(); - auto etrack = tracks->cend(); - for (auto track = btrack; track != etrack; ++track) { - auto tk_elem = - std::find_if(btk_elems, TKs_end, [&](const ElementType& a) { return (a->trackRef() == track->trackRef()); }); - if (tk_elem != TKs_end) { - mask[std::distance(tracks->cbegin(), track)] = false; - // check and update if this track is a muon - const int muId = muAssocToTrack((*tk_elem)->trackRef(), muons); - if (muId != -1) { - muonref = reco::MuonRef(muons, muId); - if (PFMuonAlgo::isLooseMuon(muonref) || PFMuonAlgo::isMuon(muonref)) { - static_cast(tk_elem->get())->setMuonRef(muonref); - } - } - } - } - // now we actually insert tracks, again tagging muons along the way - reco::PFRecTrackRef pftrackref; - reco::PFBlockElementTrack* trkElem = nullptr; - for (auto track = btrack; track != etrack; ++track) { - const unsigned idx = std::distance(btrack, track); - // since we already set muon refs in the previously imported tracks, - // here we can skip everything that is already imported - if (!mask[idx]) - continue; - muonref = reco::MuonRef(); - pftrackref = reco::PFRecTrackRef(tracks, idx); - // Get the eventual muon associated to this track - const int muId = muAssocToTrack(pftrackref->trackRef(), muons); - bool thisIsAPotentialMuon = false; - if (muId != -1) { - muonref = reco::MuonRef(muons, muId); - thisIsAPotentialMuon = - ((PFMuonAlgo::hasValidTrack(muonref, true, muonMaxDPtOPt_) && PFMuonAlgo::isLooseMuon(muonref)) || - (PFMuonAlgo::hasValidTrack(muonref, false, muonMaxDPtOPt_) && PFMuonAlgo::isMuon(muonref))); - } - if (thisIsAPotentialMuon || PFTrackAlgoTools::goodPtResolution( - pftrackref->trackRef(), DPtovPtCut_, NHitCut_, useIterTracking_, trackQuality_)) { - trkElem = new reco::PFBlockElementTrack(pftrackref); - if (thisIsAPotentialMuon) { - LogDebug("GeneralTracksImporterWithVeto") - << "Potential Muon P " << pftrackref->trackRef()->p() << " pt " << pftrackref->trackRef()->p() << std::endl; - } - if (muId != -1) - trkElem->setMuonRef(muonref); - if (vetoed.count(pftrackref->trackRef().key()) == 0 || muonref.isNonnull()) { - elems.emplace_back(trkElem); - } else - delete trkElem; - } - } - elems.shrink_to_fit(); -} - -int GeneralTracksImporterWithVeto::muAssocToTrack(const reco::TrackRef& trackref, - const edm::Handle& muonh) const { - auto muon = std::find_if(muonh->cbegin(), muonh->cend(), [&](const reco::Muon& m) { - return (m.track().isNonnull() && m.track() == trackref); - }); - return (muon != muonh->cend() ? std::distance(muonh->cbegin(), muon) : -1); -} diff --git a/RecoParticleFlow/PFProducer/plugins/importers/TrackFromParentImporter.h b/RecoParticleFlow/PFProducer/plugins/importers/TrackFromParentImporter.h index 682e24a9f838e..b45d1fb5409a6 100644 --- a/RecoParticleFlow/PFProducer/plugins/importers/TrackFromParentImporter.h +++ b/RecoParticleFlow/PFProducer/plugins/importers/TrackFromParentImporter.h @@ -2,8 +2,10 @@ #define __TrackFromParentImporter_H__ #include "RecoParticleFlow/PFProducer/interface/BlockElementImporterBase.h" +#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" #include "DataFormats/ParticleFlowReco/interface/PFBlockElementTrack.h" #include "DataFormats/ParticleFlowReco/interface/PFRecTrack.h" +#include "DataFormats/HGCalReco/interface/TICLSeedingRegion.h" namespace pflow { namespace noop { @@ -14,33 +16,96 @@ namespace pflow { public: static bool check_importable(const typename Collection::value_type&) { return true; } static const std::vector& get_track_refs(const typename Collection::value_type&) { - return _empty; + return empty_; } static void set_element_info(reco::PFBlockElement*, const typename edm::Ref&) {} - static const std::vector _empty; + static const std::vector empty_; }; } // namespace noop namespace importers { - template > + template > class TrackFromParentImporter : public BlockElementImporterBase { public: TrackFromParentImporter(const edm::ParameterSet& conf, edm::ConsumesCollector& sumes) : BlockElementImporterBase(conf, sumes), - _src(sumes.consumes(conf.getParameter("source"))) {} + src_(sumes.consumes(conf.getParameter("source"))), + vetoEndcap_(conf.getParameter("vetoEndcap")) { + if (vetoEndcap_) { + vetoMode_ = conf.getParameter("vetoMode"); + switch (vetoMode_) { + case pfRecTrackCollection: + vetoPFTracksSrc_ = + sumes.consumes(conf.getParameter("vetoSrc")); + break; + case ticlSeedingRegion: + vetoTICLSeedingSrc_ = + sumes.consumes>(conf.getParameter("vetoSrc")); + tracksSrc_ = sumes.consumes(conf.getParameter("tracksSrc")); + break; + case pfCandidateCollection: + vetoPFCandidatesSrc_ = + sumes.consumes(conf.getParameter("vetoSrc")); + break; + } // switch + } // vetoEndcap_ + } void importToBlock(const edm::Event&, ElementList&) const override; private: - edm::EDGetTokenT _src; + edm::EDGetTokenT src_; + edm::InputTag srcTag_; + const bool vetoEndcap_; + unsigned int vetoMode_; + edm::EDGetTokenT vetoPFTracksSrc_; + edm::EDGetTokenT> vetoTICLSeedingSrc_; + edm::EDGetTokenT tracksSrc_; + edm::EDGetTokenT vetoPFCandidatesSrc_; }; template void TrackFromParentImporter::importToBlock( const edm::Event& e, BlockElementImporterBase::ElementList& elems) const { typedef BlockElementImporterBase::ElementList::value_type ElementType; - auto pfparents = e.getHandle(_src); + auto pfparents = e.getHandle(src_); + // + // Store tracks to be vetoed + typedef std::pair TrackProdIDKey; + std::vector vetoed; + edm::ProductID prodIdForVeto; + if (vetoEndcap_) { + switch (vetoMode_) { + case pfRecTrackCollection: { + const auto& vetoes = e.get(vetoPFTracksSrc_); + for (const auto& veto : vetoes) { + vetoed.emplace_back(veto.trackRef().id(), veto.trackRef().key()); + } + break; + } + case ticlSeedingRegion: { + const auto& vetoes = e.get(vetoTICLSeedingSrc_); + auto tracksH = e.getHandle(tracksSrc_); + for (const auto& veto : vetoes) { + assert(veto.collectionID == tracksH.id()); + vetoed.emplace_back(tracksH.id(), veto.index); // track prod id and key + } + break; + } + case pfCandidateCollection: { + const auto& vetoes = e.get(vetoPFCandidatesSrc_); + for (const auto& veto : vetoes) { + if (veto.trackRef().isNull()) + continue; + vetoed.emplace_back(veto.trackRef().id(), veto.trackRef().key()); + } + break; + } + } // switch + std::sort(vetoed.begin(), vetoed.end()); + } + // elems.reserve(elems.size() + 2 * pfparents->size()); - // setup our elements so that all the SCs are grouped together + // auto TKs_end = std::partition( elems.begin(), elems.end(), [](const ElementType& a) { return a->type() == reco::PFBlockElement::TRACK; }); // insert tracks into the element list, updating tracks that exist already @@ -53,6 +118,15 @@ namespace pflow { parentRef = edm::Ref(pfparents, std::distance(bpar, pfparent)); const auto& pftracks = Adaptor::get_track_refs(*pfparent); for (const auto& pftrack : pftracks) { + if (vetoEndcap_) { // vetoEndcap flag + TrackProdIDKey trk = std::make_pair(pftrack->trackRef().id(), pftrack->trackRef().key()); + auto lower = std::lower_bound(vetoed.begin(), vetoed.end(), trk); + bool inVetoList = (lower != vetoed.end() && *lower == trk); + if (inVetoList) + continue; // found a track in a veto list + } + // + // Now try to update an entry in pfblock or import auto tk_elem = std::find_if( elems.begin(), TKs_end, [&](const ElementType& a) { return (a->trackRef() == pftrack->trackRef()); }); if (tk_elem != TKs_end) { // if found flag the track, otherwise import @@ -63,11 +137,11 @@ namespace pflow { TKs_end = elems.insert(TKs_end, ElementType(trkElem)); ++TKs_end; } - } - } - } // loop on tracking coming from common parent + } // daughter track loop ends + } // end of importable check + } // loop on tracking coming from common parent elems.shrink_to_fit(); - } - } // namespace importers + } // end of importToBlock + } // namespace importers } // namespace pflow #endif diff --git a/RecoParticleFlow/PFProducer/plugins/importers/TrackTimingImporter.cc b/RecoParticleFlow/PFProducer/plugins/importers/TrackTimingImporter.cc index 652b26ea92b14..763d0b9a6bd63 100644 --- a/RecoParticleFlow/PFProducer/plugins/importers/TrackTimingImporter.cc +++ b/RecoParticleFlow/PFProducer/plugins/importers/TrackTimingImporter.cc @@ -7,6 +7,7 @@ #include "DataFormats/Common/interface/ValueMap.h" #include "RecoParticleFlow/PFProducer/interface/PFMuonAlgo.h" #include "RecoParticleFlow/PFTracking/interface/PFTrackAlgoTools.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" // this doesn't actually import anything, // but rather applies time stamps to tracks after they are all inserted diff --git a/RecoParticleFlow/PFProducer/python/electronPFIsolationDeposits_cff.py b/RecoParticleFlow/PFProducer/python/electronPFIsolationDeposits_cff.py index 39d2a5a7449c0..619e557929f19 100644 --- a/RecoParticleFlow/PFProducer/python/electronPFIsolationDeposits_cff.py +++ b/RecoParticleFlow/PFProducer/python/electronPFIsolationDeposits_cff.py @@ -24,10 +24,10 @@ DepositLabel = cms.untracked.string('') ) ) -elPFIsoDepositCharged.ExtractorPSet.DR_Veto = cms.double(0) -elPFIsoDepositChargedAll.ExtractorPSet.DR_Veto = cms.double(0) -elPFIsoDepositNeutral.ExtractorPSet.DR_Veto = cms.double(0) -elPFIsoDepositPU.ExtractorPSet.DR_Veto = cms.double(0) +elPFIsoDepositCharged.ExtractorPSet.DR_Veto = 0 +elPFIsoDepositChargedAll.ExtractorPSet.DR_Veto = 0 +elPFIsoDepositNeutral.ExtractorPSet.DR_Veto = 0 +elPFIsoDepositPU.ExtractorPSet.DR_Veto = 0 electronPFIsolationDepositsTask = cms.Task( diff --git a/RecoParticleFlow/PFProducer/python/mlpf_EventContent_cff.py b/RecoParticleFlow/PFProducer/python/mlpf_EventContent_cff.py new file mode 100644 index 0000000000000..0e91687fa40a6 --- /dev/null +++ b/RecoParticleFlow/PFProducer/python/mlpf_EventContent_cff.py @@ -0,0 +1,8 @@ +import FWCore.ParameterSet.Config as cms + +MLPF_RECO = cms.PSet( + outputCommands = cms.untracked.vstring( + 'keep recoPFCandidates_mlpfProducer_*_*', + ) +) + diff --git a/RecoParticleFlow/PFProducer/python/particleFlowBlock_cfi.py b/RecoParticleFlow/PFProducer/python/particleFlowBlock_cfi.py index 26f85bfe3f38b..b491a3ffbcc6e 100644 --- a/RecoParticleFlow/PFProducer/python/particleFlowBlock_cfi.py +++ b/RecoParticleFlow/PFProducer/python/particleFlowBlock_cfi.py @@ -19,7 +19,8 @@ gsfsAreSecondary = cms.bool(False), superClustersArePF = cms.bool(True) ), cms.PSet( importerName = cms.string("ConvBremTrackImporter"), - source = cms.InputTag("pfTrackElec") ), + source = cms.InputTag("pfTrackElec"), + vetoEndcap = cms.bool(False)), cms.PSet( importerName = cms.string("SuperClusterImporter"), source_eb = cms.InputTag("particleFlowSuperClusterECAL:particleFlowSuperClusterECALBarrel"), source_ee = cms.InputTag("particleFlowSuperClusterECAL:particleFlowSuperClusterECALEndcapWithPreshower"), @@ -29,17 +30,21 @@ minPTforBypass = cms.double(100.0), superClustersArePF = cms.bool(True) ), cms.PSet( importerName = cms.string("ConversionTrackImporter"), - source = cms.InputTag("pfConversions") ), + source = cms.InputTag("pfConversions"), + vetoEndcap = cms.bool(False)), # V0's not actually used in particle flow block building so far #cms.PSet( importerName = cms.string("V0TrackImporter"), - # source = cms.InputTag("pfV0") ), + # source = cms.InputTag("pfV0"), + # vetoEndcap = cms.bool(False)), #NuclearInteraction's also come in Loose and VeryLoose varieties cms.PSet( importerName = cms.string("NuclearInteractionTrackImporter"), - source = cms.InputTag("pfDisplacedTrackerVertex") ), + source = cms.InputTag("pfDisplacedTrackerVertex"), + vetoEndcap = cms.bool(False)), #for best timing GeneralTracksImporter should come after # all secondary track importers cms.PSet( importerName = cms.string("GeneralTracksImporter"), source = cms.InputTag("pfTrack"), + vetoEndcap = cms.bool(False), muonSrc = cms.InputTag("muons1stStep"), trackQuality = cms.string("highPurity"), cleanBadConvertedBrems = cms.bool(True), @@ -69,7 +74,6 @@ source = cms.InputTag("particleFlowClusterHF") ), cms.PSet( importerName = cms.string("GenericClusterImporter"), source = cms.InputTag("particleFlowClusterPS") ), - ), #linking definitions @@ -153,6 +157,8 @@ minSuperClusterPt = 1.0, minPTforBypass = 0.0) +# +# kill pfTICL tracks def _findIndicesByModule(name): ret = [] for i, pset in enumerate(particleFlowBlock.elementImporters): @@ -160,37 +166,24 @@ def _findIndicesByModule(name): ret.append(i) return ret - from Configuration.Eras.Modifier_phase2_hgcal_cff import phase2_hgcal -# kill tracks in the HGCal -_insertGeneralTracksImporter = {} -for idx in _findIndicesByModule('GeneralTracksImporter'): - _insertGeneralTracksImporter[idx] = dict( - importerName = cms.string('GeneralTracksImporterWithVeto'), - veto = cms.InputTag('hgcalTrackCollection:TracksInHGCal') +_insertTrackImportersWithVeto = {} +_trackImporters = ['GeneralTracksImporter','ConvBremTrackImporter', + 'ConversionTrackImporter','NuclearInteractionTrackImporter'] +for importer in _trackImporters: + for idx in _findIndicesByModule(importer): + _insertTrackImportersWithVeto[idx] = dict( + vetoEndcap = True, + vetoMode = cms.uint32(2), # pfTICL candidate list + vetoSrc = cms.InputTag("pfTICL") ) phase2_hgcal.toModify( particleFlowBlock, - elementImporters = _insertGeneralTracksImporter + elementImporters = _insertTrackImportersWithVeto ) -### for later -#_phase2_hgcal_Linkers.append( -# cms.PSet( linkerName = cms.string("SCAndHGCalLinker"), -# linkType = cms.string("SC:HGCAL"), -# useKDTree = cms.bool(False), -# SuperClusterMatchByRef = cms.bool(True) ) -#) -#_phase2_hgcal_Linkers.append( -# cms.PSet( linkerName = cms.string("HGCalAndBREMLinker"), -# linkType = cms.string("HGCAL:BREM"), -# useKDTree = cms.bool(False) ) -#) -#_phase2_hgcal_Linkers.append( -# cms.PSet( linkerName = cms.string("GSFAndHGCalLinker"), -# linkType = cms.string("GSF:HGCAL"), -# useKDTree = cms.bool(False) ) -#) +# +# append track-HF linkers from Configuration.Eras.Modifier_phase2_tracker_cff import phase2_tracker _addTrackHFLinks = particleFlowBlock.linkDefinitions.copy() _addTrackHFLinks.append( @@ -216,6 +209,8 @@ def _findIndicesByModule(name): linkDefinitions = _addTrackHFLinks ) +# +# for precision timing from Configuration.Eras.Modifier_phase2_timing_cff import phase2_timing _addTiming = particleFlowBlock.elementImporters.copy() _addTiming.append( cms.PSet( importerName = cms.string("TrackTimingImporter"), diff --git a/RecoParticleFlow/PFProducer/python/particleFlowEGamma_cff.py b/RecoParticleFlow/PFProducer/python/particleFlowEGamma_cff.py index 942ec3a6a5866..1c7ca9989c6d6 100644 --- a/RecoParticleFlow/PFProducer/python/particleFlowEGamma_cff.py +++ b/RecoParticleFlow/PFProducer/python/particleFlowEGamma_cff.py @@ -9,7 +9,7 @@ from RecoEgamma.EgammaPhotonProducers.ootPhotonSequence_cff import * from RecoEgamma.EgammaElectronProducers.gedGsfElectronSequence_cff import * from RecoEgamma.EgammaElectronProducers.pfBasedElectronIso_cff import * -from RecoEgamma.EgammaIsolationAlgos.particleBasedIsoProducer_cfi import particleBasedIsolation as _particleBasedIsolation +from RecoEgamma.EgammaIsolationAlgos.particleBasedIsolation_cfi import particleBasedIsolation as _particleBasedIsolation from RecoEgamma.EgammaIsolationAlgos.egmPhotonIsolationAOD_cff import egmPhotonIsolation as _egmPhotonIsolationAOD from RecoEgamma.EgammaIsolationAlgos.egmGedGsfElectronPFIsolation_cff import egmGedGsfElectronPFNoPileUpIsolationMapBasedVeto as _egmElectronIsolationCITK from RecoEgamma.EgammaIsolationAlgos.egmGedGsfElectronPFIsolation_cff import egmGedGsfElectronPFPileUpIsolationMapBasedVeto as _egmElectronIsolationCITKPileUp diff --git a/RecoParticleFlow/PFProducer/python/particleFlowSimParticle_cff.py b/RecoParticleFlow/PFProducer/python/particleFlowSimParticle_cff.py index 4ec518f6dffea..8bfa025fead39 100644 --- a/RecoParticleFlow/PFProducer/python/particleFlowSimParticle_cff.py +++ b/RecoParticleFlow/PFProducer/python/particleFlowSimParticle_cff.py @@ -7,5 +7,8 @@ # are not stored in the event! from RecoTracker.TrackProducer.CTFFinalFitWithMaterial_cff import * from SimGeneral.HepPDTESSource.pythiapdt_cfi import * -from RecoParticleFlow.PFProducer.particleFlowSimParticle_cfi import * +from RecoParticleFlow.PFSimProducer.particleFlowSimParticle_cfi import * +from FastSimulation.Event.ParticleFilter_cfi import ParticleFilterBlock + +particleFlowSimParticle.ParticleFilter = ParticleFilterBlock.ParticleFilter.clone(chargedPtMin = 0, EMin = 0) diff --git a/RecoParticleFlow/PFProducer/python/particleFlowSimParticle_cfi.py b/RecoParticleFlow/PFProducer/python/particleFlowSimParticle_cfi.py deleted file mode 100644 index 040b05f93c594..0000000000000 --- a/RecoParticleFlow/PFProducer/python/particleFlowSimParticle_cfi.py +++ /dev/null @@ -1,33 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from FastSimulation.Event.ParticleFilter_cfi import ParticleFilterBlock - -particleFlowSimParticle = cms.EDProducer("PFSimParticleProducer", - # verbosity - verbose = cms.untracked.bool(False), - # Tracking parameters - Fitter = cms.string('KFFittingSmoother'), - # replace ParticleFilter.pTMin = 0.5 - # flags - process_RecTracks = cms.untracked.bool(False), - # - ParticleFilter = ParticleFilterBlock.ParticleFilter.clone(chargedPtMin = 0, EMin = 0), - # - TTRHBuilder = cms.string('WithTrackAngle'), - process_Particles = cms.untracked.bool(True), - Propagator = cms.string('PropagatorWithMaterial'), - # input collections ---------------------------------------- - # module label to find input sim tracks and sim vertices - sim = cms.InputTag("g4SimHits"), - #Monte Carlo Truth Matching Options, only in FASTSIM!: - #MC Truth Matching info (only if UnFoldedMode = true in FastSim) - MCTruthMatchingInfo = cms.untracked.bool(False), - #retrieving RecTracks - RecTracks = cms.InputTag("trackerDrivenElectronSeeds"), - #retrieving EcalRechits - ecalRecHitsEB = cms.InputTag('caloRecHits','EcalRecHitsEB'), - ecalRecHitsEE = cms.InputTag('caloRecHits','EcalRecHitsEE'), - #retrieving fastSim SimHits - fastSimProducer = cms.untracked.InputTag('fastSimProducer','EcalHitsEB') -) - diff --git a/RecoParticleFlow/PFProducer/python/pfGsfElectronMVASelector_cff.py b/RecoParticleFlow/PFProducer/python/pfGsfElectronMVASelector_cff.py index ffa3d1ca802bd..e2de76090562d 100644 --- a/RecoParticleFlow/PFProducer/python/pfGsfElectronMVASelector_cff.py +++ b/RecoParticleFlow/PFProducer/python/pfGsfElectronMVASelector_cff.py @@ -7,7 +7,7 @@ cut = cms.string("pt > 5 && ecalDrivenSeed && passingCutBasedPreselection"), ) -mvaElectrons.electronTag = cms.InputTag('electronsWithPresel') +mvaElectrons.electronTag = 'electronsWithPresel' pfGsfElectronMVASelectionTask = cms.Task( electronsWithPresel, diff --git a/RecoParticleFlow/PFProducer/python/photonPFIsolationDeposits_cff.py b/RecoParticleFlow/PFProducer/python/photonPFIsolationDeposits_cff.py index ad1c9d335b33e..564582c6eb492 100644 --- a/RecoParticleFlow/PFProducer/python/photonPFIsolationDeposits_cff.py +++ b/RecoParticleFlow/PFProducer/python/photonPFIsolationDeposits_cff.py @@ -25,10 +25,10 @@ ) ) -phPFIsoDepositCharged.ExtractorPSet.DR_Veto = 0 -phPFIsoDepositChargedAll.ExtractorPSet.DR_Veto = 0 -phPFIsoDepositNeutral.ExtractorPSet.DR_Veto = 0 -phPFIsoDepositPU.ExtractorPSet.DR_Veto = 0 +phPFIsoDepositCharged.ExtractorPSet.DR_Veto = 0 +phPFIsoDepositChargedAll.ExtractorPSet.DR_Veto = 0 +phPFIsoDepositNeutral.ExtractorPSet.DR_Veto = 0 +phPFIsoDepositPU.ExtractorPSet.DR_Veto = 0 photonPFIsolationDepositsTask = cms.Task( phPFIsoDepositCharged, diff --git a/RecoParticleFlow/PFProducer/python/simPFProducer_cff.py b/RecoParticleFlow/PFProducer/python/simPFProducer_cff.py new file mode 100644 index 0000000000000..e46c6bcabeacd --- /dev/null +++ b/RecoParticleFlow/PFProducer/python/simPFProducer_cff.py @@ -0,0 +1,32 @@ +from RecoParticleFlow.PFSimProducer.simPFProducer_cfi import * + +from Configuration.Eras.Modifier_phase2_timing_cff import phase2_timing +phase2_timing.toModify( + simPFProducer, + trackTimeValueMap = cms.InputTag("trackTimeValueMapProducer:generalTracksConfigurableFlatResolutionModel"), + trackTimeErrorMap = cms.InputTag("trackTimeValueMapProducer:generalTracksConfigurableFlatResolutionModelResolution"), + gsfTrackTimeValueMap = cms.InputTag("gsfTrackTimeValueMapProducer:electronGsfTracksConfigurableFlatResolutionModel"), + gsfTrackTimeErrorMap = cms.InputTag("gsfTrackTimeValueMapProducer:electronGsfTracksConfigurableFlatResolutionModelResolution"), +) + +from Configuration.Eras.Modifier_phase2_timing_layer_cff import phase2_timing_layer +phase2_timing_layer.toModify( + simPFProducer, + trackTimeValueMap = cms.InputTag("tofPID:t0"), + trackTimeErrorMap = cms.InputTag("tofPID:sigmat0"), + trackTimeQualityMap = cms.InputTag("mtdTrackQualityMVA:mtdQualMVA"), + timingQualityThreshold = cms.double(0.5), + #this will cause no time to be set for gsf tracks + #(since this is not available for the fullsim/reconstruction yet) + #*TODO* update when gsf times are available + gsfTrackTimeValueMap = cms.InputTag("tofPID:t0"), + gsfTrackTimeErrorMap = cms.InputTag("tofPID:sigmat0"), + gsfTrackTimeQualityMap = cms.InputTag("mtdTrackQualityMVA:mtdQualMVA"), +) + +from Configuration.ProcessModifiers.premix_stage2_cff import premix_stage2 +premix_stage2.toModify(simPFProducer, + trackingParticleSrc = "mixData:MergedTrackTruth", + caloParticlesSrc = "mixData:MergedCaloTruth", + simClusterTruthSrc = "mixData:MergedCaloTruth", +) diff --git a/RecoParticleFlow/PFProducer/python/simPFProducer_cfi.py b/RecoParticleFlow/PFProducer/python/simPFProducer_cfi.py deleted file mode 100644 index f236a1eb90058..0000000000000 --- a/RecoParticleFlow/PFProducer/python/simPFProducer_cfi.py +++ /dev/null @@ -1,48 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -simPFProducer = cms.EDProducer( - 'SimPFProducer', - superClusterThreshold = cms.double(4.0), - neutralEMThreshold = cms.double(0.250), - neutralHADThreshold = cms.double(0.250), - pfRecTrackSrc = cms.InputTag("hgcalTrackCollection:TracksInHGCal"), - trackSrc = cms.InputTag('generalTracks'), - gsfTrackSrc = cms.InputTag('electronGsfTracks'), - muonSrc = cms.InputTag("muons1stStep"), - trackingParticleSrc = cms.InputTag('mix:MergedTrackTruth'), - simClusterTruthSrc = cms.InputTag('mix:MergedCaloTruth'), - caloParticlesSrc = cms.InputTag('mix:MergedCaloTruth'), - simClustersSrc = cms.InputTag('particleFlowClusterHGCal'), - associators = cms.VInputTag(cms.InputTag('quickTrackAssociatorByHits') ) - ) - -from Configuration.Eras.Modifier_phase2_timing_cff import phase2_timing -phase2_timing.toModify( - simPFProducer, - trackTimeValueMap = cms.InputTag("trackTimeValueMapProducer:generalTracksConfigurableFlatResolutionModel"), - trackTimeErrorMap = cms.InputTag("trackTimeValueMapProducer:generalTracksConfigurableFlatResolutionModelResolution"), - gsfTrackTimeValueMap = cms.InputTag("gsfTrackTimeValueMapProducer:electronGsfTracksConfigurableFlatResolutionModel"), - gsfTrackTimeErrorMap = cms.InputTag("gsfTrackTimeValueMapProducer:electronGsfTracksConfigurableFlatResolutionModelResolution"), -) - -from Configuration.Eras.Modifier_phase2_timing_layer_cff import phase2_timing_layer -phase2_timing_layer.toModify( - simPFProducer, - trackTimeValueMap = cms.InputTag("tofPID:t0"), - trackTimeErrorMap = cms.InputTag("tofPID:sigmat0"), - trackTimeQualityMap = cms.InputTag("mtdTrackQualityMVA:mtdQualMVA"), - timingQualityThreshold = cms.double(0.5), - #this will cause no time to be set for gsf tracks - #(since this is not available for the fullsim/reconstruction yet) - #*TODO* update when gsf times are available - gsfTrackTimeValueMap = cms.InputTag("tofPID:t0"), - gsfTrackTimeErrorMap = cms.InputTag("tofPID:sigmat0"), - gsfTrackTimeQualityMap = cms.InputTag("mtdTrackQualityMVA:mtdQualMVA"), -) - -from Configuration.ProcessModifiers.premix_stage2_cff import premix_stage2 -premix_stage2.toModify(simPFProducer, - trackingParticleSrc = "mixData:MergedTrackTruth", - caloParticlesSrc = "mixData:MergedCaloTruth", - simClusterTruthSrc = "mixData:MergedCaloTruth", -) diff --git a/RecoParticleFlow/PFProducer/python/tauHadronDecayFilter_cfi.py b/RecoParticleFlow/PFProducer/python/tauHadronDecayFilter_cfi.py deleted file mode 100644 index b99068bb28e1e..0000000000000 --- a/RecoParticleFlow/PFProducer/python/tauHadronDecayFilter_cfi.py +++ /dev/null @@ -1,17 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -tauHadronDecayFilter = cms.EDFilter("TauHadronDecayFilter", - # using FastSimulation/Event - particles = cms.InputTag("particleFlowBlock"), - ParticleFilter = cms.PSet( - # Particles with |eta| > etaMax (momentum direction at primary vertex) - # are not simulated - etaMax = cms.double(10.0), - # Charged particles with pT < pTMin (GeV/c) are not simulated - pTMin = cms.double(0.0), - # Particles with energy smaller than EMin (GeV) are not simulated - EMin = cms.double(0.0) - ) -) - - diff --git a/RecoParticleFlow/PFProducer/src/MLPFModel.cc b/RecoParticleFlow/PFProducer/src/MLPFModel.cc new file mode 100644 index 0000000000000..220ecc9c97b1f --- /dev/null +++ b/RecoParticleFlow/PFProducer/src/MLPFModel.cc @@ -0,0 +1,219 @@ +#include "RecoParticleFlow/PFProducer/interface/MLPFModel.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlock.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlockElementSuperCluster.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlockElementGsfTrack.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlockElementTrack.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlockElementBrem.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlockElementCluster.h" + +namespace reco::mlpf { + + //Prepares the input array of floats for a single PFElement + std::array getElementProperties(const reco::PFBlockElement& orig) { + const auto type = orig.type(); + float pt = 0.0; + //these are placeholders for the the future + [[maybe_unused]] float deltap = 0.0; + [[maybe_unused]] float sigmadeltap = 0.0; + [[maybe_unused]] float px = 0.0; + [[maybe_unused]] float py = 0.0; + [[maybe_unused]] float pz = 0.0; + float eta = 0.0; + float phi = 0.0; + float energy = 0.0; + float trajpoint = 0.0; + float eta_ecal = 0.0; + float phi_ecal = 0.0; + float eta_hcal = 0.0; + float phi_hcal = 0.0; + float charge = 0; + float layer = 0; + float depth = 0; + float muon_dt_hits = 0.0; + float muon_csc_hits = 0.0; + + if (type == reco::PFBlockElement::TRACK) { + const auto& matched_pftrack = orig.trackRefPF(); + if (matched_pftrack.isNonnull()) { + const auto& atECAL = matched_pftrack->extrapolatedPoint(reco::PFTrajectoryPoint::ECALShowerMax); + const auto& atHCAL = matched_pftrack->extrapolatedPoint(reco::PFTrajectoryPoint::HCALEntrance); + if (atHCAL.isValid()) { + eta_hcal = atHCAL.positionREP().eta(); + phi_hcal = atHCAL.positionREP().phi(); + } + if (atECAL.isValid()) { + eta_ecal = atECAL.positionREP().eta(); + phi_ecal = atECAL.positionREP().phi(); + } + } + const auto& ref = ((const reco::PFBlockElementTrack*)&orig)->trackRef(); + pt = ref->pt(); + px = ref->px(); + py = ref->py(); + pz = ref->pz(); + eta = ref->eta(); + phi = ref->phi(); + energy = ref->p(); + charge = ref->charge(); + + reco::MuonRef muonRef = orig.muonRef(); + if (muonRef.isNonnull()) { + reco::TrackRef standAloneMu = muonRef->standAloneMuon(); + if (standAloneMu.isNonnull()) { + muon_dt_hits = standAloneMu->hitPattern().numberOfValidMuonDTHits(); + muon_csc_hits = standAloneMu->hitPattern().numberOfValidMuonCSCHits(); + } + } + + } else if (type == reco::PFBlockElement::BREM) { + const auto* orig2 = (const reco::PFBlockElementBrem*)&orig; + const auto& ref = orig2->GsftrackRef(); + if (ref.isNonnull()) { + deltap = orig2->DeltaP(); + sigmadeltap = orig2->SigmaDeltaP(); + pt = ref->pt(); + px = ref->px(); + py = ref->py(); + pz = ref->pz(); + eta = ref->eta(); + phi = ref->phi(); + energy = ref->p(); + trajpoint = orig2->indTrajPoint(); + charge = ref->charge(); + } + } else if (type == reco::PFBlockElement::GSF) { + //requires to keep GsfPFRecTracks + const auto* orig2 = (const reco::PFBlockElementGsfTrack*)&orig; + const auto& vec = orig2->Pin(); + pt = vec.pt(); + px = vec.px(); + py = vec.py(); + pz = vec.pz(); + eta = vec.eta(); + phi = vec.phi(); + energy = vec.energy(); + if (!orig2->GsftrackRefPF().isNull()) { + charge = orig2->GsftrackRefPF()->charge(); + } + } else if (type == reco::PFBlockElement::ECAL || type == reco::PFBlockElement::PS1 || + type == reco::PFBlockElement::PS2 || type == reco::PFBlockElement::HCAL || + type == reco::PFBlockElement::HO || type == reco::PFBlockElement::HFHAD || + type == reco::PFBlockElement::HFEM) { + const auto& ref = ((const reco::PFBlockElementCluster*)&orig)->clusterRef(); + if (ref.isNonnull()) { + eta = ref->eta(); + phi = ref->phi(); + px = ref->position().x(); + py = ref->position().y(); + pz = ref->position().z(); + energy = ref->energy(); + layer = ref->layer(); + depth = ref->depth(); + } + } else if (type == reco::PFBlockElement::SC) { + const auto& clref = ((const reco::PFBlockElementSuperCluster*)&orig)->superClusterRef(); + if (clref.isNonnull()) { + eta = clref->eta(); + phi = clref->phi(); + px = clref->position().x(); + py = clref->position().y(); + pz = clref->position().z(); + energy = clref->energy(); + } + } + + float typ_idx = static_cast(elem_type_encoding.at(orig.type())); + + //Must be the same order as in tf_model.py + return std::array({{typ_idx, + pt, + eta, + phi, + energy, + layer, + depth, + charge, + trajpoint, + eta_ecal, + phi_ecal, + eta_hcal, + phi_hcal, + muon_dt_hits, + muon_csc_hits}}); + } + + //to make sure DNN inputs are within numerical bounds, use the same in training + float normalize(float in) { + if (std::abs(in) > 1e4f) { + return 0.0; + } else if (std::isnan(in)) { + return 0.0; + } + return in; + } + + int argMax(std::vector const& vec) { + return static_cast(std::distance(vec.begin(), max_element(vec.begin(), vec.end()))); + } + + reco::PFCandidate makeCandidate(int pred_pid, int pred_charge, float pred_e, float pred_eta, float pred_phi) { + pred_phi = angle0to2pi::make0To2pi(pred_phi); + + //currently, set the pT from a massless approximation. + //later versions of the model may predict predict both the energy and pT of the particle + float pred_pt = pred_e / cosh(pred_eta); + + //set the charge to +1 or -1 for PFCandidates that are charged, according to the sign of the predicted charge + reco::PFCandidate::Charge charge = 0; + if (pred_pid == 11 || pred_pid == 13 || pred_pid == 211) { + charge = pred_charge > 0 ? +1 : -1; + } + + math::PtEtaPhiELorentzVectorD p4(pred_pt, pred_eta, pred_phi, pred_e); + + reco::PFCandidate cand( + 0, math::XYZTLorentzVector(p4.X(), p4.Y(), p4.Z(), p4.E()), reco::PFCandidate::ParticleType(0)); + cand.setPdgId(pred_pid); + cand.setCharge(charge); + + return cand; + } + + const std::vector getPFElements(const reco::PFBlockCollection& blocks) { + std::vector pOutputCandidateCollection; + + std::vector all_elements; + for (const auto& block : blocks) { + const auto& elems = block.elements(); + for (const auto& elem : elems) { + if (all_elements.size() < NUM_MAX_ELEMENTS_BATCH) { + all_elements.push_back(&elem); + } else { + //model needs to be created with a bigger LSH codebook size + edm::LogError("MLPFProducer") << "too many input PFElements for predefined model size: " << elems.size(); + break; + } + } + } + return all_elements; + } + + void setCandidateRefs(reco::PFCandidate& cand, + const std::vector elems, + size_t ielem_originator) { + const reco::PFBlockElement* elem = elems[ielem_originator]; + //set the track ref in case the originating element was a track + if (elem->type() == reco::PFBlockElement::TRACK && cand.charge() != 0 && elem->trackRef().isNonnull()) { + cand.setTrackRef(elem->trackRef()); + + //set the muon ref in case the originator was a muon + const auto& muonref = elem->muonRef(); + if (muonref.isNonnull()) { + cand.setMuonRef(muonref); + } + } + } + +}; // namespace reco::mlpf diff --git a/RecoParticleFlow/PFProducer/src/PFAlgo.cc b/RecoParticleFlow/PFProducer/src/PFAlgo.cc index a1fd59311643b..5fb624b0a046b 100644 --- a/RecoParticleFlow/PFProducer/src/PFAlgo.cc +++ b/RecoParticleFlow/PFProducer/src/PFAlgo.cc @@ -83,8 +83,6 @@ void PFAlgo::setEGammaCollections(const edm::View& pfEgammaCa } } -void PFAlgo::setMuonHandle(const edm::Handle& muons) { muonHandle_ = muons; } - void PFAlgo::setPostHFCleaningParameters(bool postHFCleaning, const edm::ParameterSet& pfHFCleaningParams) { postHFCleaning_ = postHFCleaning; minHFCleaningPt_ = pfHFCleaningParams.getParameter("minHFCleaningPt"); diff --git a/RecoParticleFlow/PFProducer/src/PFBlockAlgo.cc b/RecoParticleFlow/PFProducer/src/PFBlockAlgo.cc index bc377c5897dc8..06ab7ef94c6ee 100644 --- a/RecoParticleFlow/PFProducer/src/PFBlockAlgo.cc +++ b/RecoParticleFlow/PFProducer/src/PFBlockAlgo.cc @@ -1,9 +1,7 @@ #include "RecoParticleFlow/PFProducer/interface/PFBlockAlgo.h" -#include "FWCore/Framework/interface/ProductRegistryHelper.h" -#include "FWCore/Framework/src/WorkerMaker.h" -#include "FWCore/MessageLogger/interface/ErrorObj.h" -#include "FWCore/ParameterSet/interface/ParameterSetDescriptionFiller.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/PluginManager/interface/PluginFactory.h" +#include "FWCore/Utilities/interface/Exception.h" #include #include diff --git a/RecoParticleFlow/PFProducer/src/PFEGammaAlgo.cc b/RecoParticleFlow/PFProducer/src/PFEGammaAlgo.cc index ab85ef0da7452..c1a32ed96ec09 100644 --- a/RecoParticleFlow/PFProducer/src/PFEGammaAlgo.cc +++ b/RecoParticleFlow/PFProducer/src/PFEGammaAlgo.cc @@ -17,6 +17,7 @@ #include "RecoEcal/EgammaCoreTools/interface/Mustache.h" #include "DataFormats/Math/interface/deltaPhi.h" #include "DataFormats/Math/interface/deltaR.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include @@ -39,7 +40,7 @@ #define LOGERR(x) edm::LogError(x) #define LOGDRESSED(x) edm::LogInfo(x) #else -#define docast(x, y) reinterpret_cast(y) +#define docast(x, y) static_cast(y) #define LOGVERB(x) LogTrace(x) #define LOGWARN(x) edm::LogWarning(x) #define LOGERR(x) edm::LogError(x) @@ -88,13 +89,13 @@ namespace { const size_t test, const float EoPin_cut = 1.0e6) { constexpr reco::PFBlockElement::TrackType ConvType = reco::PFBlockElement::T_FROM_GAMMACONV; + auto elemkey = &(block->elements()[key]); // this is inside out but I just want something that works right now - switch (keytype) { + switch (elemkey->type()) { case reco::PFBlockElement::GSF: { - const reco::PFBlockElementGsfTrack* elemasgsf = - docast(const reco::PFBlockElementGsfTrack*, &(block->elements()[key])); + const reco::PFBlockElementGsfTrack* elemasgsf = docast(const reco::PFBlockElementGsfTrack*, elemkey); if (elemasgsf && valtype == PFBlockElement::ECAL) { - const ClusterElement* elemasclus = reinterpret_cast(&(block->elements()[test])); + const ClusterElement* elemasclus = static_cast(&(block->elements()[test])); float cluster_e = elemasclus->clusterRef()->correctedEnergy(); float trk_pin = elemasgsf->Pin().P(); if (cluster_e / trk_pin > EoPin_cut) { @@ -104,9 +105,9 @@ namespace { } } break; case reco::PFBlockElement::TRACK: { - const reco::PFBlockElementTrack* elemaskf = docast(const reco::PFBlockElementTrack*, &(block->elements()[key])); + const reco::PFBlockElementTrack* elemaskf = docast(const reco::PFBlockElementTrack*, elemkey); if (elemaskf && valtype == PFBlockElement::ECAL) { - const ClusterElement* elemasclus = reinterpret_cast(&(block->elements()[test])); + const ClusterElement* elemasclus = static_cast(&(block->elements()[test])); float cluster_e = elemasclus->clusterRef()->correctedEnergy(); float trk_pin = std::sqrt(elemaskf->trackRef()->innerMomentum().mag2()); if (cluster_e / trk_pin > EoPin_cut) { @@ -148,7 +149,7 @@ namespace { if (!useConvs && elemaskf->trackType(ConvType)) return false; if (elemaskf && valtype == PFBlockElement::ECAL) { - const ClusterElement* elemasclus = reinterpret_cast(&(block->elements()[test])); + const ClusterElement* elemasclus = static_cast(&(block->elements()[test])); float cluster_e = elemasclus->clusterRef()->correctedEnergy(); float trk_pin = std::sqrt(elemaskf->trackRef()->innerMomentum().mag2()); if (cluster_e / trk_pin > EoPin_cut) @@ -1998,8 +1999,7 @@ void PFEGammaAlgo::unlinkRefinableObjectKFandECALMatchedToHCAL(ProtoEGObject& RO if (RO.localMap.contains(ecal->get(), *secd_kf)) { auto hcal_matched = std::partition(hcal_begin, hcal_end, tracksToHCALs); for (auto hcalclus = hcal_begin; hcalclus != hcal_matched; ++hcalclus) { - const reco::PFBlockElementCluster* clusthcal = - dynamic_cast(hcalclus->get()); + const reco::PFBlockElementCluster* clusthcal = docast(const reco::PFBlockElementCluster*, hcalclus->get()); const double hcalenergy = clusthcal->clusterRef()->energy(); const double hpluse = ecalenergy + hcalenergy; const bool isHoHE = ((hcalenergy / hpluse) > 0.1 && goodTrack); diff --git a/RecoParticleFlow/PFProducer/src/PFMuonAlgo.cc b/RecoParticleFlow/PFProducer/src/PFMuonAlgo.cc index 70f7d63940098..58a4a2e6e5b26 100644 --- a/RecoParticleFlow/PFProducer/src/PFMuonAlgo.cc +++ b/RecoParticleFlow/PFProducer/src/PFMuonAlgo.cc @@ -476,6 +476,13 @@ void PFMuonAlgo::printMuonProperties(const reco::MuonRef& muonRef) { return; } +int PFMuonAlgo::muAssocToTrack(const reco::TrackRef& trackref, const reco::MuonCollection& muons) { + auto muon = std::find_if(muons.cbegin(), muons.cend(), [&](const reco::Muon& m) { + return (m.track().isNonnull() && m.track() == trackref); + }); + return (muon != muons.cend() ? std::distance(muons.cbegin(), muon) : -1); +} + std::vector PFMuonAlgo::muonTracks(const reco::MuonRef& muon, double maxDPtOPt, bool includeSA) { @@ -723,6 +730,18 @@ void PFMuonAlgo::addMissingMuons(edm::Handle muons, reco:: else pfAddedMuonCandidates_ = std::make_unique(); + // do not recover muons if they are in the veto list + typedef std::pair TrackProdIDKey; + std::vector vetoed; + if (vetoes_) { + for (const auto& veto : *vetoes_) { + if (veto.trackRef().isNull()) + continue; + vetoed.emplace_back(veto.trackRef().id(), veto.trackRef().key()); + } + std::sort(vetoed.begin(), vetoed.end()); + } + for (unsigned imu = 0; imu < muons->size(); ++imu) { reco::MuonRef muonRef(muons, imu); bool used = false; @@ -755,6 +774,14 @@ void PFMuonAlgo::addMissingMuons(edm::Handle muons, reco:: break; } + if (!vetoed.empty()) { + TrackProdIDKey trk = std::make_pair(muonRef->track().id(), muonRef->track().key()); + auto lower = std::lower_bound(vetoed.begin(), vetoed.end(), trk); + bool inVetoList = (lower != vetoed.end() && *lower == trk); + if (inVetoList) + used = true; + } + if (used || hadron || (!muonRef.isNonnull())) continue; diff --git a/RecoParticleFlow/PFProducer/test/mlpf_training/generate.sh b/RecoParticleFlow/PFProducer/test/mlpf_training/generate.sh new file mode 100755 index 0000000000000..ef8467080b48e --- /dev/null +++ b/RecoParticleFlow/PFProducer/test/mlpf_training/generate.sh @@ -0,0 +1,67 @@ +#!/bin/bash +set -e +set -x + +#sleep randomly up to 120s to stagger job start times +#sleep $((RANDOM % 120)) + +#seed must be greater than 0 +SAMPLE=$1 +SEED=$2 +N=$3 + +#examples: +#SAMPLE=TTbar_14TeV_TuneCUETP8M1_cfi +#SEED=1 +#N=5 + +PILEUP=Run3_Flat55To75_PoissonOOTPU +#PILEUP=NoPileUp + +#in case of locally downloaded minbias files, use the following +#PILEUP_INPUT=filelist:/storage/user/jpata/particleflow/test/pu_files.txt +PILEUP_INPUT=dbs:/MinBias_TuneCP5_13TeV-pythia8/RunIIFall18GS-102X_upgrade2018_realistic_v9-v1/GEN-SIM +#and add this line to cmsDriver for step2 +#--pileup_input $PILEUP_INPUT \ + +#Generate the MC +cmsDriver.py $SAMPLE \ + --conditions auto:phase1_2021_realistic \ + -n $N \ + --era Run3 \ + --eventcontent FEVTDEBUGHLT \ + -s GEN,SIM,DIGI,L1,DIGI2RAW,HLT \ + --datatier GEN-SIM \ + --geometry DB:Extended \ + --pileup $PILEUP \ + --pileup_input $PILEUP_INPUT \ + --no_exec \ + --fileout step2_phase1_new.root \ + --customise Validation/RecoParticleFlow/customize_pfanalysis.customize_step2 \ + --python_filename=step2_phase1_new.py + +#Run the reco sequences +cmsDriver.py step3 \ + --conditions auto:phase1_2021_realistic \ + --era Run3 \ + -n -1 \ + --eventcontent FEVTDEBUGHLT \ + --runUnscheduled \ + -s RAW2DIGI,L1Reco,RECO,RECOSIM \ + --datatier GEN-SIM-RECO \ + --geometry DB:Extended \ + --no_exec \ + --filein file:step2_phase1_new.root \ + --fileout step3_phase1_new.root \ + --customise Validation/RecoParticleFlow/customize_pfanalysis.customize_step3 \ + --python_filename=step3_phase1_new.py + +pwd +ls -lrt + +echo "process.RandomNumberGeneratorService.generator.initialSeed = $SEED" >> step2_phase1_new.py +cmsRun step2_phase1_new.py +cmsRun step3_phase1_new.py +cmsRun $CMSSW_BASE/src/Validation/RecoParticleFlow/test/pfanalysis_ntuple.py + +mv pfntuple.root pfntuple_${SEED}.root diff --git a/RecoParticleFlow/PFProducer/test/mlpf_training/preprocessing.py b/RecoParticleFlow/PFProducer/test/mlpf_training/preprocessing.py new file mode 100644 index 0000000000000..24212674716de --- /dev/null +++ b/RecoParticleFlow/PFProducer/test/mlpf_training/preprocessing.py @@ -0,0 +1,598 @@ +import sys +import pickle +import networkx as nx +import numpy as np +#import numba +import os +import uproot +import uproot_methods +import math + +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt + +import scipy +import scipy.sparse +from networkx.readwrite import json_graph +from networkx.drawing.nx_pydot import graphviz_layout + +map_candid_to_pdgid = { + 0: [0], + 211: [211, 2212, 321, -3112, 3222, -3312, -3334], + -211: [-211, -2212, -321, 3112, -3222, 3312, 3334], + 130: [111, 130, 2112, -2112, 310, 3122, -3122, 3322, -3322], + 22: [22], + 11: [11], + -11: [-11], + 13: [13], + -13: [-13] +} + +map_pdgid_to_candid = {} + +for candid, pdgids in map_candid_to_pdgid.items(): + for p in pdgids: + map_pdgid_to_candid[p] = candid + +#@numba.njit +def get_charge(pid): + abs_pid = abs(pid) + if pid == 130 or pid == 22 or pid == 1 or pid == 2: + return 0.0 + #13: mu-, 11: e- + elif abs_pid == 13 or abs_pid == 11: + return -math.copysign(1.0, pid) + #211: pi+ + elif abs_pid == 211: + return math.copysign(1.0, pid) + +def save_ego_graph(g, node, radius=4, undirected=False): + sg = nx.ego_graph(g, node, radius, undirected=undirected).reverse() + + #remove BREM PFElements from plotting + nodes_to_remove = [n for n in sg.nodes if (n[0]=="elem" and sg.nodes[n]["typ"] in [7,])] + sg.remove_nodes_from(nodes_to_remove) + + fig = plt.figure(figsize=(2*len(sg.nodes)+2, 10)) + sg_pos = graphviz_layout(sg, prog='dot') + + edge_labels = {} + for e in sg.edges: + if e[1][0] == "elem" and not (sg.nodes[e[1]]["typ"] in [1,10]): + edge_labels[e] = "{:.2f} GeV".format(sg.edges[e].get("weight", 0)) + else: + edge_labels[e] = "" + + node_labels = {} + for node in sg.nodes: + labels = {"sc": "SimCluster", "elem": "PFElement", "tp": "TrackingParticle", "pfcand": "PFCandidate"} + node_labels[node] = "[{label} {idx}] \ntype: {typ}\ne: {e:.4f} GeV\npt: {pt:.4f} GeV\neta: {eta:.4f}\nphi: {phi:.4f}\nc/p: {children}/{parents}".format( + label=labels[node[0]], idx=node[1], **sg.nodes[node]) + tp = sg.nodes[node]["typ"] + + nx.draw_networkx(sg, pos=sg_pos, node_shape=".", node_color="grey", edge_color="grey", node_size=0, alpha=0.5, labels={}) + nx.draw_networkx_labels(sg, pos=sg_pos, labels=node_labels) + nx.draw_networkx_edge_labels(sg, pos=sg_pos, edge_labels=edge_labels); + plt.tight_layout() + plt.axis("off") + + return fig + +def draw_event(g): + pos = {} + for node in g.nodes: + pos[node] = (g.nodes[node]["eta"], g.nodes[node]["phi"]) + + fig = plt.figure(figsize=(10,10)) + + nodes_to_draw = [n for n in g.nodes if n[0]=="elem"] + nx.draw_networkx(g, pos=pos, with_labels=False, node_size=5, nodelist=nodes_to_draw, edgelist=[], node_color="red", node_shape="s", alpha=0.5) + + nodes_to_draw = [n for n in g.nodes if n[0]=="pfcand"] + nx.draw_networkx(g, pos=pos, with_labels=False, node_size=10, nodelist=nodes_to_draw, edgelist=[], node_color="green", node_shape="x", alpha=0.5) + + nodes_to_draw = [n for n in g.nodes if (n[0]=="sc" or n[0]=="tp")] + nx.draw_networkx(g, pos=pos, with_labels=False, node_size=1, nodelist=nodes_to_draw, edgelist=[], node_color="blue", node_shape=".", alpha=0.5) + + #draw edges between genparticles and elements + edges_to_draw = [e for e in g.edges if e[0] in nodes_to_draw] + nx.draw_networkx_edges(g, pos, edgelist=edges_to_draw, arrows=False, alpha=0.1) + + plt.xlim(-6,6) + plt.ylim(-4,4) + plt.tight_layout() + plt.axis("on") + return fig + +def cleanup_graph(g, edge_energy_threshold=0.01, edge_fraction_threshold=0.05, genparticle_energy_threshold=0.2, genparticle_pt_threshold=0.01): + g = g.copy() + + edges_to_remove = [] + nodes_to_remove = [] + + #remove edges that contribute little + for edge in g.edges: + if edge[0][0] == "sc": + w = g.edges[edge]["weight"] + if w < edge_energy_threshold: + edges_to_remove += [edge] + if edge[0][0] == "sc" or edge[0][0] == "tp": + if g.nodes[edge[1]]["typ"] == 10: + g.edges[edge]["weight"] = 1.0 + + #remove genparticles below energy threshold + for node in g.nodes: + if (node[0]=="sc" or node[0]=="tp") and g.nodes[node]["e"] < genparticle_energy_threshold: + nodes_to_remove += [node] + + g.remove_edges_from(edges_to_remove) + g.remove_nodes_from(nodes_to_remove) + + rg = g.reverse() + + #for each element, remove the incoming edges that contribute less than 5% of the total + edges_to_remove = [] + nodes_to_remove = [] + for node in rg.nodes: + if node[0] == "elem": + ##check for generator pairs with very similar eta,phi, which can come from gamma->e+ e- + #if rg.nodes[node]["typ"] == 4: + # by_eta_phi = {} + # for neigh in rg.neighbors(node): + # k = (round(rg.nodes[neigh]["eta"], 2), round(rg.nodes[neigh]["phi"], 2)) + # if not k in by_eta_phi: + # by_eta_phi[k] = [] + # by_eta_phi[k] += [neigh] + + # for k in by_eta_phi: + # #if there were genparticles with the same eta,phi, assume it was a photon with nuclear interaction + # if len(by_eta_phi[k])>=2: + # #print(by_eta_phi[k][0]) + # rg.nodes[by_eta_phi[k][0]]["typ"] = 22 + # rg.nodes[by_eta_phi[k][0]]["e"] += sum(rg.nodes[n]["e"] for n in by_eta_phi[k][1:]) + # rg.nodes[by_eta_phi[k][0]]["pt"] = 0 #fixme + # nodes_to_remove += by_eta_phi[k][1:] + + #remove links that don't contribute above a threshold + ew = [((node, node2), rg.edges[node, node2]["weight"]) for node2 in rg.neighbors(node)] + ew = filter(lambda x: x[1] != 1.0, ew) + ew = sorted(ew, key=lambda x: x[1], reverse=True) + if len(ew) > 1: + max_in = ew[0][1] + for e, w in ew[1:]: + if w / max_in < edge_fraction_threshold: + edges_to_remove += [e] + + rg.remove_edges_from(edges_to_remove) + rg.remove_nodes_from(nodes_to_remove) + g = rg.reverse() + + #remove genparticles not linked to any elements + nodes_to_remove = [] + for node in g.nodes: + if node[0]=="sc" or node[0]=="tp": + deg = g.degree[node] + if deg==0: + nodes_to_remove += [node] + g.remove_nodes_from(nodes_to_remove) + + #compute number of children and parents, save on node for visualization + for node in g.nodes: + g.nodes[node]["children"] = len(list(g.neighbors(node))) + + rg = g.reverse() + + for node in rg.nodes: + g.nodes[node]["parents"] = len(list(rg.neighbors(node))) + rg.nodes[node]["parents"] = len(list(rg.neighbors(node))) + + return g + +def prepare_normalized_table(g, genparticle_energy_threshold=0.2): + rg = g.reverse() + + all_genparticles = [] + all_elements = [] + all_pfcandidates = [] + for node in rg.nodes: + if node[0] == "elem": + all_elements += [node] + for parent in rg.neighbors(node): + all_genparticles += [parent] + elif node[0] == "pfcand": + all_pfcandidates += [node] + all_genparticles = list(set(all_genparticles)) + all_elements = sorted(all_elements) + + #assign genparticles in reverse pt order uniquely to best element + elem_to_gp = {} + unmatched_gp = [] + for gp in sorted(all_genparticles, key=lambda x: g.nodes[x]["pt"], reverse=True): + elems = [e for e in g.neighbors(gp)] + + #don't assign any genparticle to these elements (PS, BREM, SC) + elems = [e for e in elems if not (g.nodes[e]["typ"] in [2,3,7,10])] + + #sort elements by energy from genparticle + elems_sorted = sorted([(g.edges[gp, e]["weight"], e) for e in elems], key=lambda x: x[0], reverse=True) + + if len(elems_sorted) == 0: + continue + + chosen_elem = None + for _, elem in elems_sorted: + if not (elem in elem_to_gp): + chosen_elem = elem + elem_to_gp[elem] = [] + break + if chosen_elem is None: + unmatched_gp += [gp] + else: + elem_to_gp[elem] += [gp] + + #assign unmatched genparticles to best element, allowing for overlaps + for gp in sorted(unmatched_gp, key=lambda x: g.nodes[x]["pt"], reverse=True): + elems = [e for e in g.neighbors(gp)] + #we don't want to assign any genparticles to PS, BREM or SC - links are not reliable + elems = [e for e in elems if not (g.nodes[e]["typ"] in [2,3,7,10])] + elems_sorted = sorted([(g.edges[gp, e]["weight"], e) for e in elems], key=lambda x: x[0], reverse=True) + _, elem = elems_sorted[0] + elem_to_gp[elem] += [gp] + + unmatched_cand = [] + elem_to_cand = {} + for cand in sorted(all_pfcandidates, key=lambda x: g.nodes[x]["pt"], reverse=True): + tp = g.nodes[cand]["typ"] + neighbors = list(rg.neighbors(cand)) + + chosen_elem = None + + #Pions and muons will be assigned to tracks + if abs(tp) == 211 or abs(tp) == 13: + for elem in neighbors: + tp_neighbor = g.nodes[elem]["typ"] + if tp_neighbor == 1: + if not (elem in elem_to_cand): + chosen_elem = elem + elem_to_cand[elem] = cand + break + #other particles will be assigned to the highest-energy cluster (ECAL, HCAL, HFEM, HFHAD, SC) + else: + neighbors = [n for n in neighbors if g.nodes[n]["typ"] in [4,5,8,9,10]] + sorted_neighbors = sorted(neighbors, key=lambda x: g.nodes[x]["e"], reverse=True) + for elem in sorted_neighbors: + if not (elem in elem_to_cand): + chosen_elem = elem + elem_to_cand[elem] = cand + break + + if chosen_elem is None: + print("unmatched candidate {}, {}".format(cand, g.nodes[cand])) + unmatched_cand += [cand] + + elem_branches = [ + "typ", "pt", "eta", "phi", "e", + "layer", "depth", "charge", "trajpoint", + "eta_ecal", "phi_ecal", "eta_hcal", "phi_hcal", "muon_dt_hits", "muon_csc_hits" + ] + target_branches = ["typ", "pt", "eta", "phi", "e", "px", "py", "pz", "charge"] + + Xelem = np.recarray((len(all_elements),), dtype=[(name, np.float32) for name in elem_branches]) + Xelem.fill(0.0) + ygen = np.recarray((len(all_elements),), dtype=[(name, np.float32) for name in target_branches]) + ygen.fill(0.0) + ycand = np.recarray((len(all_elements),), dtype=[(name, np.float32) for name in target_branches]) + ycand.fill(0.0) + + #find which elements should be linked together in the output when regressing to PFCandidates or GenParticles + graph_elem_cand = nx.Graph() + graph_elem_gen = nx.Graph() + for elem in all_elements: + graph_elem_cand.add_node(elem) + graph_elem_gen.add_node(elem) + + for cand in all_pfcandidates: + for elem1 in rg.neighbors(cand): + for elem2 in rg.neighbors(cand): + if (elem1 != elem2): + graph_elem_cand.add_edge(elem1, elem2) + + for gp in all_genparticles: + for elem1 in g.neighbors(gp): + for elem2 in g.neighbors(gp): + if (elem1 != elem2): + graph_elem_gen.add_edge(elem1, elem2) + + for ielem, elem in enumerate(all_elements): + elem_type = g.nodes[elem]["typ"] + elem_eta = g.nodes[elem]["eta"] + genparticles = sorted(elem_to_gp.get(elem, []), key=lambda x: g.nodes[x]["e"], reverse=True) + genparticles = [gp for gp in genparticles if g.nodes[gp]["e"] > genparticle_energy_threshold] + candidate = elem_to_cand.get(elem, None) + + lv = uproot_methods.TLorentzVector(0, 0, 0, 0) + + pid = 0 + if len(genparticles) > 0: + pid = map_pdgid_to_candid.get(g.nodes[genparticles[0]]["typ"], 0) + + for gp in genparticles: + try: + lv += uproot_methods.TLorentzVector.from_ptetaphie( + g.nodes[gp]["pt"], + g.nodes[gp]["eta"], + g.nodes[gp]["phi"], + g.nodes[gp]["e"] + ) + except OverflowError: + lv += uproot_methods.TLorentzVector.from_ptetaphie( + g.nodes[gp]["pt"], + np.nan, + g.nodes[gp]["phi"], + g.nodes[gp]["e"] + ) + + if len(genparticles) > 0: + if abs(elem_eta) > 3.0: + #HFHAD -> always produce hadronic candidate + if elem_type == 9: + pid = 1 + #HFEM -> decide based on pid + elif elem_type == 8: + if abs(pid) in [11, 22]: + pid = 2 #produce EM candidate + else: + pid = 1 #produce hadronic + + #remap PID in case of HCAL cluster + if elem_type == 5 and (pid == 22 or abs(pid) == 11): + pid = 130 + + #reproduce ROOT.TLorentzVector behavior (https://root.cern.ch/doc/master/TVector3_8cxx_source.html#l00320) + try: + eta = lv.eta + except ZeroDivisionError: + eta = np.sign(lv.z)*10e10 + + gp = { + "pt": lv.pt, "eta": eta, "phi": lv.phi, "e": lv.energy, "typ": pid, "px": lv.x, "py": lv.y, "pz": lv.z, "charge": get_charge(pid) + } + + for j in range(len(elem_branches)): + Xelem[elem_branches[j]][ielem] = g.nodes[elem][elem_branches[j]] + + for j in range(len(target_branches)): + if not (candidate is None): + ycand[target_branches[j]][ielem] = g.nodes[candidate][target_branches[j]] + ygen[target_branches[j]][ielem] = gp[target_branches[j]] + + dm_elem_cand = scipy.sparse.coo_matrix(nx.to_numpy_matrix(graph_elem_cand, nodelist=all_elements)) + dm_elem_gen = scipy.sparse.coo_matrix(nx.to_numpy_matrix(graph_elem_gen, nodelist=all_elements)) + return Xelem, ycand, ygen, dm_elem_cand, dm_elem_gen +#end of prepare_normalized_table + + +def process(args): + infile = args.input + outpath = os.path.join(args.outpath, os.path.basename(infile).split(".")[0]) + tf = uproot.open(infile) + tt = tf["ana/pftree"] + + events_to_process = [i for i in range(tt.numentries)] + if not (args.event is None): + events_to_process = [args.event] + + all_data = [] + ifile = 0 + for iev in events_to_process: + print("processing event {}".format(iev)) + + ev = tt.arrays(flatten=True,entrystart=iev,entrystop=iev+1) + + element_type = ev[b'element_type'] + element_pt = ev[b'element_pt'] + element_e = ev[b'element_energy'] + element_eta = ev[b'element_eta'] + element_phi = ev[b'element_phi'] + element_eta_ecal = ev[b'element_eta_ecal'] + element_phi_ecal = ev[b'element_phi_ecal'] + element_eta_hcal = ev[b'element_eta_hcal'] + element_phi_hcal = ev[b'element_phi_hcal'] + element_trajpoint = ev[b'element_trajpoint'] + element_layer = ev[b'element_layer'] + element_charge = ev[b'element_charge'] + element_depth = ev[b'element_depth'] + element_deltap = ev[b'element_deltap'] + element_sigmadeltap = ev[b'element_sigmadeltap'] + element_px = ev[b'element_px'] + element_py = ev[b'element_py'] + element_pz = ev[b'element_pz'] + element_muon_dt_hits = ev[b'element_muon_dt_hits'] + element_muon_csc_hits = ev[b'element_muon_csc_hits'] + + trackingparticle_pid = ev[b'trackingparticle_pid'] + trackingparticle_pt = ev[b'trackingparticle_pt'] + trackingparticle_e = ev[b'trackingparticle_energy'] + trackingparticle_eta = ev[b'trackingparticle_eta'] + trackingparticle_phi = ev[b'trackingparticle_phi'] + trackingparticle_phi = ev[b'trackingparticle_phi'] + trackingparticle_px = ev[b'trackingparticle_px'] + trackingparticle_py = ev[b'trackingparticle_py'] + trackingparticle_pz = ev[b'trackingparticle_pz'] + + simcluster_pid = ev[b'simcluster_pid'] + simcluster_pt = ev[b'simcluster_pt'] + simcluster_e = ev[b'simcluster_energy'] + simcluster_eta = ev[b'simcluster_eta'] + simcluster_phi = ev[b'simcluster_phi'] + simcluster_px = ev[b'simcluster_px'] + simcluster_py = ev[b'simcluster_py'] + simcluster_pz = ev[b'simcluster_pz'] + + simcluster_idx_trackingparticle = ev[b'simcluster_idx_trackingparticle'] + pfcandidate_pdgid = ev[b'pfcandidate_pdgid'] + pfcandidate_pt = ev[b'pfcandidate_pt'] + pfcandidate_e = ev[b'pfcandidate_energy'] + pfcandidate_eta = ev[b'pfcandidate_eta'] + pfcandidate_phi = ev[b'pfcandidate_phi'] + pfcandidate_px = ev[b'pfcandidate_px'] + pfcandidate_py = ev[b'pfcandidate_py'] + pfcandidate_pz = ev[b'pfcandidate_pz'] + + g = nx.DiGraph() + for iobj in range(len(element_type)): + g.add_node(("elem", iobj), + typ=element_type[iobj], + pt=element_pt[iobj], + e=element_e[iobj], + eta=element_eta[iobj], + phi=element_phi[iobj], + eta_ecal=element_eta_ecal[iobj], + phi_ecal=element_phi_ecal[iobj], + eta_hcal=element_eta_hcal[iobj], + phi_hcal=element_phi_hcal[iobj], + trajpoint=element_trajpoint[iobj], + layer=element_layer[iobj], + charge=element_charge[iobj], + depth=element_depth[iobj], + deltap=element_deltap[iobj], + sigmadeltap=element_sigmadeltap[iobj], + px=element_px[iobj], + py=element_py[iobj], + pz=element_pz[iobj], + muon_dt_hits=element_muon_dt_hits[iobj], + muon_csc_hits=element_muon_csc_hits[iobj], + ) + for iobj in range(len(trackingparticle_pid)): + g.add_node(("tp", iobj), + typ=trackingparticle_pid[iobj], + pt=trackingparticle_pt[iobj], + e=trackingparticle_e[iobj], + eta=trackingparticle_eta[iobj], + phi=trackingparticle_phi[iobj], + px=trackingparticle_px[iobj], + py=trackingparticle_py[iobj], + pz=trackingparticle_pz[iobj], + ) + for iobj in range(len(simcluster_pid)): + g.add_node(("sc", iobj), + typ=simcluster_pid[iobj], + pt=simcluster_pt[iobj], + e=simcluster_e[iobj], + eta=simcluster_eta[iobj], + phi=simcluster_phi[iobj], + px=simcluster_px[iobj], + py=simcluster_py[iobj], + pz=simcluster_pz[iobj], + ) + + trackingparticle_to_element_first = ev[b'trackingparticle_to_element.first'] + trackingparticle_to_element_second = ev[b'trackingparticle_to_element.second'] + #for trackingparticles associated to elements, set a very high edge weight + for tp, elem in zip(trackingparticle_to_element_first, trackingparticle_to_element_second): + g.add_edge(("tp", tp), ("elem", elem), weight=99999.0) + + simcluster_to_element_first = ev[b'simcluster_to_element.first'] + simcluster_to_element_second = ev[b'simcluster_to_element.second'] + simcluster_to_element_cmp = ev[b'simcluster_to_element_cmp'] + for sc, elem, c in zip(simcluster_to_element_first, simcluster_to_element_second, simcluster_to_element_cmp): + g.add_edge(("sc", sc), ("elem", elem), weight=c) + + print("contracting nodes: trackingparticle to simcluster") + nodes_to_remove = [] + for idx_sc, idx_tp in enumerate(simcluster_idx_trackingparticle): + if idx_tp != -1: + for elem in g.neighbors(("sc", idx_sc)): + g.add_edge(("tp", idx_tp), elem, weight=g.edges[("sc", idx_sc), elem]["weight"]) + g.nodes[("tp", idx_tp)]["idx_sc"] = idx_sc + nodes_to_remove += [("sc", idx_sc)] + g.remove_nodes_from(nodes_to_remove) + + for iobj in range(len(pfcandidate_pdgid)): + g.add_node(("pfcand", iobj), + typ=pfcandidate_pdgid[iobj], + pt=pfcandidate_pt[iobj], + e=pfcandidate_e[iobj], + eta=pfcandidate_eta[iobj], + phi=pfcandidate_phi[iobj], + px=pfcandidate_px[iobj], + py=pfcandidate_py[iobj], + pz=pfcandidate_pz[iobj], + charge=get_charge(pfcandidate_pdgid[iobj]), + ) + + element_to_candidate_first = ev[b'element_to_candidate.first'] + element_to_candidate_second = ev[b'element_to_candidate.second'] + for elem, pfcand in zip(element_to_candidate_first, element_to_candidate_second): + g.add_edge(("elem", elem), ("pfcand", pfcand), weight=1.0) + print("Graph created: {} nodes, {} edges".format(len(g.nodes), len(g.edges))) + + g = cleanup_graph(g) + rg = g.reverse() + + #make tree visualizations for PFCandidates + ncand = 0 + for node in sorted(filter(lambda x: x[0]=="pfcand", g.nodes), key=lambda x: g.nodes[x]["pt"], reverse=True): + if ncand < args.plot_candidates: + print(node, g.nodes[node]["pt"]) + fig = save_ego_graph(rg, node, 3, False) + plt.savefig(outpath + "_ev_{}_cand_{}_idx_{}.pdf".format(iev, ncand, node[1]), bbox_inches="tight") + plt.clf() + del fig + ncand += 1 + + #fig = draw_event(g) + #plt.savefig(outpath + "_ev_{}.pdf".format(iev)) + #plt.clf() + + #do one-to-one associations + Xelem, ycand, ygen, dm_elem_cand, dm_elem_gen = prepare_normalized_table(g) + #dm = prepare_elem_distance_matrix(ev) + data = {} + + if args.save_normalized_table: + data = { + "Xelem": Xelem, + "ycand": ycand, + "ygen": ygen, + #"dm": dm, + "dm_elem_cand": dm_elem_cand, + "dm_elem_gen": dm_elem_gen + } + + if args.save_full_graph: + data["full_graph"] = g + + all_data += [data] + + if args.events_per_file > 0: + if len(all_data) == args.events_per_file: + print(outpath + "_{}.pkl".format(ifile)) + with open(outpath + "_{}.pkl".format(ifile), "wb") as fi: + pickle.dump(all_data, fi) + ifile += 1 + all_data = [] + + if args.events_per_file == -1: + print(outpath) + with open(outpath + ".pkl", "wb") as fi: + pickle.dump(all_data, fi) + +def parse_args(): + import argparse + parser = argparse.ArgumentParser() + parser.add_argument("--input", type=str, help="Input file from PFAnalysis", required=True) + parser.add_argument("--event", type=int, default=None, help="event index to process, omit to process all") + parser.add_argument("--outpath", type=str, default="raw", help="output path") + parser.add_argument("--plot-candidates", type=int, default=0, help="number of PFCandidates to plot as trees in pt-descending order") + parser.add_argument("--events-per-file", type=int, default=-1, help="number of events per output file, -1 for all") + parser.add_argument("--save-full-graph", action="store_true", help="save the full event graph") + parser.add_argument("--save-normalized-table", action="store_true", help="save the uniquely identified table") + args = parser.parse_args() + return args + +if __name__ == "__main__": + args = parse_args() + process(args) + diff --git a/RecoParticleFlow/PFProducer/test/mlpf_training/run.sh b/RecoParticleFlow/PFProducer/test/mlpf_training/run.sh new file mode 100755 index 0000000000000..dee272ce416cd --- /dev/null +++ b/RecoParticleFlow/PFProducer/test/mlpf_training/run.sh @@ -0,0 +1,15 @@ +#!/bin/bash +set -e +set -x +mkdir -p TTbar_14TeV_TuneCUETP8M1_cfi/root +mkdir -p TTbar_14TeV_TuneCUETP8M1_cfi/raw +mkdir -p TTbar_14TeV_TuneCUETP8M1_cfi/tfr/cand + +./generate.sh TTbar_14TeV_TuneCUETP8M1_cfi 1 10 +cp pfntuple_1.root TTbar_14TeV_TuneCUETP8M1_cfi/root/ + +echo "now initialize TF 2.3" +source training_env/bin/activate +python3 preprocessing.py --input TTbar_14TeV_TuneCUETP8M1_cfi/root/pfntuple_1.root --save-normalized-table --outpath TTbar_14TeV_TuneCUETP8M1_cfi/raw/ --events-per-file 5 +python3 tf_data.py --datapath TTbar_14TeV_TuneCUETP8M1_cfi --target gen --num-files-per-tfr 1 +python3 tf_model.py --datapath TTbar_14TeV_TuneCUETP8M1_cfi --target gen --ntrain 5 --ntest 5 diff --git a/RecoParticleFlow/PFProducer/test/mlpf_training/tf_data.py b/RecoParticleFlow/PFProducer/test/mlpf_training/tf_data.py new file mode 100644 index 0000000000000..51cb89eea73f8 --- /dev/null +++ b/RecoParticleFlow/PFProducer/test/mlpf_training/tf_data.py @@ -0,0 +1,147 @@ +import numpy as np +import glob +import multiprocessing +import os + +import tensorflow as tf +from tf_model import load_one_file + +def parse_args(): + import argparse + parser = argparse.ArgumentParser() + parser.add_argument("--target", type=str, choices=["cand", "gen"], help="Regress to PFCandidates or GenParticles", default="cand") + parser.add_argument("--datapath", type=str, required=True, help="Input data path") + parser.add_argument("--num-files-per-tfr", type=int, default=100, help="Number of pickle files to merge to one TFRecord file") + args = parser.parse_args() + return args + +def chunks(lst, n): + """Yield successive n-sized chunks from lst.""" + for i in range(0, len(lst), n): + yield lst[i:i + n] + +#https://stackoverflow.com/questions/47861084/how-to-store-numpy-arrays-as-tfrecord +def _bytes_feature(value): + """Returns a bytes_list from a string / byte.""" + if isinstance(value, type(tf.constant(0))): # if value ist tensor + value = value.numpy() # get value of tensor + return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value])) + +def _parse_tfr_element(element): + parse_dic = { + 'X': tf.io.FixedLenFeature([], tf.string), + 'y': tf.io.FixedLenFeature([], tf.string), + 'w': tf.io.FixedLenFeature([], tf.string), + #'dm_row': tf.io.FixedLenFeature([], tf.string), + #'dm_col': tf.io.FixedLenFeature([], tf.string), + #'dm_data': tf.io.FixedLenFeature([], tf.string), + } + example_message = tf.io.parse_single_example(element, parse_dic) + + X = example_message['X'] + arr_X = tf.io.parse_tensor(X, out_type=tf.float32) + y = example_message['y'] + arr_y = tf.io.parse_tensor(y, out_type=tf.float32) + w = example_message['w'] + arr_w = tf.io.parse_tensor(w, out_type=tf.float32) + + #dm_row = example_message['dm_row'] + #arr_dm_row = tf.io.parse_tensor(dm_row, out_type=tf.int64) + #dm_col = example_message['dm_col'] + #arr_dm_col = tf.io.parse_tensor(dm_col, out_type=tf.int64) + #dm_data = example_message['dm_data'] + #arr_dm_data = tf.io.parse_tensor(dm_data, out_type=tf.float32) + + #https://github.com/tensorflow/tensorflow/issues/24520#issuecomment-577325475 + arr_X.set_shape(tf.TensorShape((None, 15))) + arr_y.set_shape(tf.TensorShape((None, 5))) + arr_w.set_shape(tf.TensorShape((None, ))) + #inds = tf.stack([arr_dm_row, arr_dm_col], axis=-1) + #dm_sparse = tf.SparseTensor(values=arr_dm_data, indices=inds, dense_shape=[tf.shape(arr_X)[0], tf.shape(arr_X)[0]]) + + return arr_X, arr_y, arr_w + +def serialize_X_y_w(writer, X, y, w): + feature = { + 'X': _bytes_feature(tf.io.serialize_tensor(X)), + 'y': _bytes_feature(tf.io.serialize_tensor(y)), + 'w': _bytes_feature(tf.io.serialize_tensor(w)), + #'dm_row': _bytes_feature(tf.io.serialize_tensor(np.array(dm.row, np.int64))), + #'dm_col': _bytes_feature(tf.io.serialize_tensor(np.array(dm.col, np.int64))), + #'dm_data': _bytes_feature(tf.io.serialize_tensor(dm.data)), + } + sample = tf.train.Example(features=tf.train.Features(feature=feature)) + writer.write(sample.SerializeToString()) + +def serialize_chunk(args): + path, files, ichunk, target = args + print(path, len(files), ichunk, target) + out_filename = os.path.join(path, "chunk_{}.tfrecords".format(ichunk)) + writer = tf.io.TFRecordWriter(out_filename) + Xs = [] + ys = [] + ws = [] + dms = [] + + for fi in files: + print(fi) + X, y, ycand = load_one_file(fi) + + Xs += X + if target == "cand": + ys += ycand + elif target == "gen": + ys += y + else: + raise Exception("Unknown target") + + #set weights for each sample to be equal to the number of samples of this type + #in the training script, this can be used to compute either inverse or class-balanced weights + uniq_vals, uniq_counts = np.unique(np.concatenate([y[:, 0] for y in ys]), return_counts=True) + for i in range(len(ys)): + w = np.ones(len(ys[i]), dtype=np.float32) + for uv, uc in zip(uniq_vals, uniq_counts): + w[ys[i][:, 0]==uv] = uc + ws += [w] + + for X, y, w in zip(Xs, ys, ws): + #print("serializing", X.shape, y.shape, w.shape) + serialize_X_y_w(writer, X, y, w) + + writer.close() + +if __name__ == "__main__": + args = parse_args() + #tf.config.experimental_run_functions_eagerly(True) + + datapath = args.datapath + + filelist = sorted(glob.glob("{}/raw/*.pkl".format(datapath))) + print("found {} files".format(len(filelist))) + assert(len(filelist) > 0) + #means, stds = extract_means_stds(filelist) + outpath = "{}/tfr/{}".format(datapath, args.target) + + if not os.path.isdir(outpath): + os.makedirs(outpath) + + pars = [] + for ichunk, files in enumerate(chunks(filelist, args.num_files_per_tfr)): + pars += [(outpath, files, ichunk, args.target)] + assert(len(pars) > 0) + #serialize_chunk(pars[0]) + #pool = multiprocessing.Pool(20) + for par in pars: + serialize_chunk(par) + + #Load and test the dataset + tfr_dataset = tf.data.TFRecordDataset(glob.glob(outpath + "/*.tfrecords")) + dataset = tfr_dataset.map(_parse_tfr_element) + num_ev = 0 + num_particles = 0 + for X, y, w in dataset: + num_ev += 1 + num_particles += len(X) + assert(num_ev > 0) + print("Created TFRecords dataset in {} with {} events, {} particles".format( + datapath, num_ev, num_particles)) diff --git a/RecoParticleFlow/PFProducer/test/mlpf_training/tf_model.py b/RecoParticleFlow/PFProducer/test/mlpf_training/tf_model.py new file mode 100644 index 0000000000000..2ae4b78c6dff5 --- /dev/null +++ b/RecoParticleFlow/PFProducer/test/mlpf_training/tf_model.py @@ -0,0 +1,1070 @@ +import os +import sys +import random +os.environ["KERAS_BACKEND"] = "tensorflow" + +import glob +try: + if not ("CUDA_VISIBLE_DEVICES" in os.environ): + print("importing setGPU") + import setGPU +except: + print("Could not import setGPU, please make sure you configure CUDA_VISIBLE_DEVICES manually") + pass + +try: + from comet_ml import Experiment + comet_enabled = True +except ImportError as e: + print("could not import comet, online dashboard disabled") + comet_enabled = False + +import pickle +import matplotlib.pyplot as plt +import numpy as np +from sklearn.metrics import confusion_matrix, accuracy_score +import pandas +import time +import itertools +import io +import tensorflow as tf + +#physical_devices = tf.config.list_physical_devices('GPU') +#tf.config.experimental.set_memory_growth(physical_devices[0], True) + +from numpy.lib.recfunctions import append_fields + +elem_labels = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] +class_labels = [0, 1, 2, 11, 13, 22, 130, 211] + +num_max_elems = 5000 + +mult_classification_loss = 1e3 +mult_charge_loss = 1.0 +mult_energy_loss = 10.0 +mult_phi_loss = 10.0 +mult_eta_loss = 10.0 +mult_total_loss = 1e3 + +def split_indices_to_bins(cmul, nbins, bin_size): + bin_idx = tf.argmax(cmul, axis=-1) + bins_split = tf.reshape(tf.argsort(bin_idx), (nbins, bin_size)) + return bins_split + +def pairwise_dist(A, B): + na = tf.reduce_sum(tf.square(A), -1) + nb = tf.reduce_sum(tf.square(B), -1) + + # na as a row and nb as a column vectors + na = tf.expand_dims(na, -1) + nb = tf.expand_dims(nb, -2) + + # return pairwise euclidead difference matrix + D = tf.sqrt(tf.maximum(na - 2*tf.matmul(A, B, False, True) + nb, 1e-6)) + return D + +""" +sp_a: (nbatch, nelem, nelem) sparse distance matrices +b: (nbatch, nelem, ncol) dense per-element feature matrices +""" +def sparse_dense_matmult_batch(sp_a, b): + + num_batches = tf.shape(b)[0] + def map_function(x): + i, dense_slice = x[0], x[1] + num_points = tf.shape(b)[1] + + sparse_slice = tf.sparse.reshape(tf.sparse.slice( + sp_a, [i, 0, 0], [1, num_points, num_points]), + [num_points, num_points]) + mult_slice = tf.sparse.sparse_dense_matmul(sparse_slice, dense_slice) + return mult_slice + + elems = (tf.range(0, tf.cast(num_batches, tf.int64), delta=1, dtype=tf.int64), b) + ret = tf.map_fn(map_function, elems, fn_output_signature=tf.float32, back_prop=True) + return ret + + +def summarize_dataset(dataset): + yclasses = [] + nev = 0.0 + ntot = 0.0 + sizes = [] + + for X, y, w in dataset: + yclasses += [y[:, 0]] + nev += 1 + ntot += len(y) + sizes += [len(y)] + + yclasses = np.concatenate(yclasses) + values, counts= np.unique(yclasses, return_counts=True) + print("nev={}".format(nev)) + print("sizes={}".format(np.percentile(sizes, [25, 50, 95, 99]))) + for v, c in zip(values, counts): + print("label={} count={} frac={:.6f}".format(class_labels[int(v)], c, c/ntot)) + +#https://arxiv.org/pdf/1901.05555.pdf +beta = 0.9999 #beta -> 1 means weight by inverse frequency, beta -> 0 means no reweighting +def compute_weights_classbalanced(X, y, w): + wn = (1.0 - beta)/(1.0 - tf.pow(beta, w)) + wn /= tf.reduce_sum(wn) + return X, y, wn + +#uniform weights +def compute_weights_uniform(X, y, w): + wn = tf.ones_like(w) + wn /= tf.reduce_sum(wn) + return X, y, wn + +#weight proportional to 1/sqrt(N) +def compute_weights_inverse(X, y, w): + wn = 1.0/tf.sqrt(w) + wn /= tf.reduce_sum(wn) + return X, y, wn + +weight_schemes = { + "uniform": compute_weights_uniform, + "inverse": compute_weights_inverse, + "classbalanced": compute_weights_classbalanced, +} + +def load_one_file(fn): + Xs = [] + ys = [] + ys_cand = [] + dms = [] + + data = pickle.load(open(fn, "rb"), encoding='iso-8859-1') + for event in data: + Xelem = event["Xelem"] + ygen = event["ygen"] + ycand = event["ycand"] + + #remove PS from inputs, they don't seem to be very useful + msk_ps = (Xelem["typ"] == 2) | (Xelem["typ"] == 3) + + Xelem = Xelem[~msk_ps] + ygen = ygen[~msk_ps] + ycand = ycand[~msk_ps] + + Xelem = append_fields(Xelem, "typ_idx", np.array([elem_labels.index(int(i)) for i in Xelem["typ"]], dtype=np.float32)) + ygen = append_fields(ygen, "typ_idx", np.array([class_labels.index(abs(int(i))) for i in ygen["typ"]], dtype=np.float32)) + ycand = append_fields(ycand, "typ_idx", np.array([class_labels.index(abs(int(i))) for i in ycand["typ"]], dtype=np.float32)) + + Xelem_flat = np.stack([Xelem[k].view(np.float32).data for k in [ + 'typ_idx', + 'pt', 'eta', 'phi', 'e', + 'layer', 'depth', 'charge', 'trajpoint', + 'eta_ecal', 'phi_ecal', 'eta_hcal', 'phi_hcal', + 'muon_dt_hits', 'muon_csc_hits']], axis=-1 + ) + ygen_flat = np.stack([ygen[k].view(np.float32).data for k in [ + 'typ_idx', + 'eta', 'phi', 'e', 'charge', + ]], axis=-1 + ) + ycand_flat = np.stack([ycand[k].view(np.float32).data for k in [ + 'typ_idx', + 'eta', 'phi', 'e', 'charge', + ]], axis=-1 + ) + + #take care of outliers + Xelem_flat[np.isnan(Xelem_flat)] = 0 + Xelem_flat[np.abs(Xelem_flat) > 1e4] = 0 + ygen_flat[np.isnan(ygen_flat)] = 0 + ygen_flat[np.abs(ygen_flat) > 1e4] = 0 + ycand_flat[np.isnan(ycand_flat)] = 0 + ycand_flat[np.abs(ycand_flat) > 1e4] = 0 + + Xs += [Xelem_flat[:num_max_elems]] + ys += [ygen_flat[:num_max_elems]] + ys_cand += [ycand_flat[:num_max_elems]] + + print("created {} blocks, max size {}".format(len(Xs), max([len(X) for X in Xs]))) + return Xs, ys, ys_cand + + +class InputEncoding(tf.keras.layers.Layer): + def __init__(self, num_input_classes): + super(InputEncoding, self).__init__() + self.num_input_classes = num_input_classes + + """ + X: [Nbatch, Nelem, Nfeat] array of all the input detector element feature data + """ + def call(self, X): + + #X[:, :, 0] - categorical index of the element type + Xid = tf.cast(tf.one_hot(tf.cast(X[:, :, 0], tf.int32), self.num_input_classes), dtype=tf.float32) + + #X[:, :, 1:] - all the other non-categorical features + Xprop = X[:, :, 1:] + return tf.concat([Xid, Xprop], axis=-1) + +#https://arxiv.org/pdf/2004.04635.pdf +#https://github.com/gcucurull/jax-ghnet/blob/master/models.py +class GHConv(tf.keras.layers.Layer): + def __init__(self, *args, **kwargs): + self.activation = kwargs.pop("activation") + self.hidden_dim = args[0] + + super(GHConv, self).__init__(*args, **kwargs) + + def build(self, input_shape): + self.W_t = self.add_weight(shape=(self.hidden_dim, self.hidden_dim), name="w_t", initializer="random_normal") + self.b_t = self.add_weight(shape=(self.hidden_dim, ), name="b_t", initializer="random_normal") + self.W_h = self.add_weight(shape=(self.hidden_dim, self.hidden_dim), name="w_h", initializer="random_normal") + self.theta = self.add_weight(shape=(self.hidden_dim, self.hidden_dim), name="theta", initializer="random_normal") + + def call(self, inputs): + x, adj = inputs + + #compute the normalization of the adjacency matrix + in_degrees = tf.sparse.reduce_sum(adj, axis=-1) + in_degrees = tf.reshape(in_degrees, (tf.shape(x)[0], tf.shape(x)[1])) + + #add epsilon to prevent numerical issues from 1/sqrt(x) + norm = tf.expand_dims(tf.pow(in_degrees + 1e-6, -0.5), -1) + + f_hom = tf.linalg.matmul(x, self.theta) + f_hom = sparse_dense_matmult_batch(adj, f_hom*norm)*norm + + f_het = tf.linalg.matmul(x, self.W_h) + gate = tf.nn.sigmoid(tf.linalg.matmul(x, self.W_t) + self.b_t) + + out = gate*f_hom + (1-gate)*f_het + return self.activation(out) + +class GHConvDense(tf.keras.layers.Layer): + def __init__(self, *args, **kwargs): + self.activation = kwargs.pop("activation") + self.hidden_dim = args[0] + super(GHConvDense, self).__init__(*args, **kwargs) + + def build(self, input_shape): + self.W_t = self.add_weight(shape=(self.hidden_dim, self.hidden_dim), name="w_t", initializer="random_normal") + self.b_t = self.add_weight(shape=(self.hidden_dim, ), name="b_t", initializer="random_normal") + self.W_h = self.add_weight(shape=(self.hidden_dim, self.hidden_dim), name="w_h", initializer="random_normal") + self.theta = self.add_weight(shape=(self.hidden_dim, self.hidden_dim), name="theta", initializer="random_normal") + + def call(self, inputs): + x, adj = inputs + + #compute the normalization of the adjacency matrix + in_degrees = tf.reduce_sum(adj, axis=-1) + in_degrees = tf.reshape(in_degrees, (tf.shape(x)[0], tf.shape(x)[1])) + + #add epsilon to prevent numerical issues from 1/sqrt(x) + norm = tf.expand_dims(tf.pow(in_degrees + 1e-6, -0.5), -1) + + f_hom = tf.linalg.matmul(x, self.theta) + f_hom = tf.linalg.matmul(adj, f_hom*norm)*norm + + f_het = tf.linalg.matmul(x, self.W_h) + gate = tf.nn.sigmoid(tf.linalg.matmul(x, self.W_t) + self.b_t) + + out = gate*f_hom + (1-gate)*f_het + return self.activation(out) + +class DenseDistance(tf.keras.layers.Layer): + def __init__(self, dist_mult=0.1, **kwargs): + super(DenseDistance, self).__init__(**kwargs) + self.dist_mult = dist_mult + + def call(self, inputs, training=True): + dm = pairwise_dist(inputs, inputs) + dm = tf.exp(-self.dist_mult*dm) + return dm + +class SparseHashedNNDistance(tf.keras.layers.Layer): + def __init__(self, max_num_bins=200, bin_size=500, num_neighbors=5, dist_mult=0.1, cosine_dist=False, **kwargs): + super(SparseHashedNNDistance, self).__init__(**kwargs) + self.num_neighbors = num_neighbors + self.dist_mult = dist_mult + + self.cosine_dist = cosine_dist + + #generate the codebook for LSH hashing at model instantiation for up to this many bins + #set this to a high-enough value at model generation to take into account the largest possible input + self.max_num_bins = max_num_bins + + #each bin will receive this many input elements, in total we can accept max_num_bins*bin_size input elements + #in each bin, we will do a dense top_k evaluation + self.bin_size = bin_size + + def build(self, input_shape): + #(n_batch, n_points, n_features) + + #generate the LSH codebook for random rotations (num_features, num_bins/2) + self.codebook_random_rotations = self.add_weight( + shape=(input_shape[-1], self.max_num_bins//2), initializer="random_normal", trainable=False, name="lsh_projections" + ) + + def call(self, inputs, training=True): + + #(n_batch, n_points, n_features) + point_embedding = inputs + + n_batches = tf.shape(point_embedding)[0] + n_points = tf.shape(point_embedding)[1] + + #cannot concat sparse tensors directly as that incorrectly destroys the gradient, see + #https://github.com/tensorflow/tensorflow/blob/df3a3375941b9e920667acfe72fb4c33a8f45503/tensorflow/python/ops/sparse_grad.py#L33 + #therefore, for training, we implement sparse concatenation by hand + indices_all = [] + values_all = [] + + def func(args): + ibatch, points_batch = args[0], args[1] + dm = self.construct_sparse_dm_batch(points_batch) + inds = tf.concat([tf.expand_dims(tf.cast(ibatch, tf.int64)*tf.ones(tf.shape(dm.indices)[0], dtype=tf.int64), -1), dm.indices], axis=-1) + vals = dm.values + return inds, vals + + elems = (tf.range(0, tf.cast(n_batches, tf.int64), delta=1, dtype=tf.int64), point_embedding) + ret = tf.map_fn(func, elems, fn_output_signature=(tf.int64, tf.float32), parallel_iterations=1) + shp = tf.shape(ret[0]) + # #now create a new SparseTensor that is a concatenation of the previous ones + dms = tf.SparseTensor( + tf.reshape(ret[0], (shp[0]*shp[1], shp[2])), + tf.reshape(ret[1], (shp[0]*shp[1],)), + (n_batches, n_points, n_points) + ) + + return tf.sparse.reorder(dms) + + def subpoints_to_sparse_matrix(self, n_points, subindices, subpoints): + + #find the distance matrix between the given points using dense matrix multiplication + if self.cosine_dist: + normed = tf.nn.l2_normalize(subpoints, axis=-1) + dm = tf.linalg.matmul(subpoints, subpoints, transpose_b=True) + else: + dm = pairwise_dist(subpoints, subpoints) + dm = tf.exp(-self.dist_mult*dm) + + dmshape = tf.shape(dm) + nbins = dmshape[0] + nelems = dmshape[1] + + #run KNN in the dense distance matrix, accumulate each index pair into a sparse distance matrix + top_k = tf.nn.top_k(dm, k=self.num_neighbors) + top_k_vals = tf.reshape(top_k.values, (nbins*nelems, self.num_neighbors)) + + indices_gathered = tf.vectorized_map( + lambda i: tf.gather_nd(subindices, top_k.indices[:, :, i:i+1], batch_dims=1), + tf.range(self.num_neighbors, dtype=tf.int64)) + + indices_gathered = tf.transpose(indices_gathered, [1,2,0]) + + #add the neighbors up to a big matrix using dense matrices, then convert to sparse (mainly for testing) + # sp_sum = tf.zeros((n_points, n_points)) + # for i in range(self.num_neighbors): + # dst_ind = indices_gathered[:, :, i] #(nbins, nelems) + # dst_ind = tf.reshape(dst_ind, (nbins*nelems, )) + # src_ind = tf.reshape(tf.stack(subindices), (nbins*nelems, )) + # src_dst_inds = tf.transpose(tf.stack([src_ind, dst_ind])) + # sp_sum += tf.scatter_nd(src_dst_inds, top_k_vals[:, i], (n_points, n_points)) + # spt_this = tf.sparse.from_dense(sp_sum) + # validate that the vectorized ops are doing what we want by hand while debugging + # dm = np.eye(n_points) + # for ibin in range(nbins): + # for ielem in range(nelems): + # idx0 = subindices[ibin][ielem] + # for ineigh in range(self.num_neighbors): + # idx1 = subindices[ibin][top_k.indices[ibin, ielem, ineigh]] + # val = top_k.values[ibin, ielem, ineigh] + # dm[idx0, idx1] += val + # assert(np.all(sp_sum.numpy() == dm)) + + #update the output using intermediate sparse matrices, which may result in some inconsistencies from duplicated indices + sp_sum = tf.sparse.SparseTensor(indices=tf.zeros((0,2), dtype=tf.int64), values=tf.zeros(0, tf.float32), dense_shape=(n_points, n_points)) + for i in range(self.num_neighbors): + dst_ind = indices_gathered[:, :, i] #(nbins, nelems) + dst_ind = tf.reshape(dst_ind, (nbins*nelems, )) + src_ind = tf.reshape(tf.stack(subindices), (nbins*nelems, )) + src_dst_inds = tf.cast(tf.transpose(tf.stack([src_ind, dst_ind])), dtype=tf.int64) + sp_sum = tf.sparse.add( + sp_sum, + tf.sparse.reorder(tf.sparse.SparseTensor(src_dst_inds, top_k_vals[:, i], (n_points, n_points))) + ) + spt_this = tf.sparse.reorder(sp_sum) + + return spt_this + + def construct_sparse_dm_batch(self, points): + + #points: (n_points, n_features) input elements for graph construction + n_points = tf.shape(points)[0] + n_features = tf.shape(points)[1] + + #compute the number of LSH bins to divide the input points into on the fly + #n_points must be divisible by bin_size exactly due to the use of reshape + n_bins = tf.math.floordiv(n_points, self.bin_size) + #tf.debugging.assert_greater(n_bins, 0) + + #put each input item into a bin defined by the softmax output across the LSH embedding + mul = tf.linalg.matmul(points, self.codebook_random_rotations[:, :n_bins//2]) + #tf.debugging.assert_greater(tf.shape(mul)[2], 0) + + cmul = tf.concat([mul, -mul], axis=-1) + + #cmul is now an integer in [0..nbins) for each input point + #bins_split: (n_bins, bin_size) of integer bin indices, which put each input point into a bin of size (n_points/n_bins) + bins_split = split_indices_to_bins(cmul, n_bins, self.bin_size) + + #parts: (n_bins, bin_size, n_features), the input points divided up into bins + parts = tf.gather(points, bins_split) + + #sparse_distance_matrix: (n_points, n_points) sparse distance matrix + #where higher values (closer to 1) are associated with points that are closely related + sparse_distance_matrix = self.subpoints_to_sparse_matrix(n_points, bins_split, parts) + + return sparse_distance_matrix + +class EncoderDecoderGNN(tf.keras.layers.Layer): + def __init__(self, encoders, decoders, dropout, activation, conv, **kwargs): + super(EncoderDecoderGNN, self).__init__(**kwargs) + name = kwargs.get("name") + + #assert(encoders[-1] == decoders[0]) + self.encoders = encoders + self.decoders = decoders + + self.encoding_layers = [] + for ilayer, nunits in enumerate(encoders): + self.encoding_layers.append( + tf.keras.layers.Dense(nunits, activation=activation, name="encoding_{}_{}".format(name, ilayer))) + if dropout > 0.0: + self.encoding_layers.append(tf.keras.layers.Dropout(dropout)) + + self.conv = conv + + self.decoding_layers = [] + for ilayer, nunits in enumerate(decoders): + self.decoding_layers.append( + tf.keras.layers.Dense(nunits, activation=activation, name="decoding_{}_{}".format(name, ilayer))) + if dropout > 0.0: + self.decoding_layers.append(tf.keras.layers.Dropout(dropout)) + + def call(self, inputs, distance_matrix, training=True): + x = inputs + + for layer in self.encoding_layers: + x = layer(x) + + for convlayer in self.conv: + x = convlayer([x, distance_matrix]) + + for layer in self.decoding_layers: + x = layer(x) + + return x + +class AddSparse(tf.keras.layers.Layer): + def __init__(self, **kwargs): + super(AddSparse, self).__init__(**kwargs) + + def call(self, matrices): + ret = matrices[0] + for mat in matrices[1:]: + ret = tf.sparse.add(ret, mat) + return ret + +#Simple message passing based on a matrix multiplication +class PFNet(tf.keras.Model): + def __init__(self, + activation=tf.nn.selu, + hidden_dim_id=256, + hidden_dim_reg=256, + distance_dim=256, + convlayer="ghconv", + dropout=0.1, + bin_size=10, + num_convs_id=1, + num_convs_reg=1, + num_hidden_id_enc=1, + num_hidden_id_dec=1, + num_hidden_reg_enc=1, + num_hidden_reg_dec=1, + num_neighbors=5, + dist_mult=0.1, + cosine_dist=False): + + super(PFNet, self).__init__() + self.activation = activation + self.num_dists = 1 + + encoding_id = [] + decoding_id = [] + encoding_reg = [] + decoding_reg = [] + + #the encoder outputs and decoder inputs have to have the hidden dim (convlayer size) + for ihidden in range(num_hidden_id_enc): + encoding_id.append(hidden_dim_id) + + for ihidden in range(num_hidden_id_dec): + decoding_id.append(hidden_dim_id) + + for ihidden in range(num_hidden_reg_enc): + encoding_reg.append(hidden_dim_reg) + + for ihidden in range(num_hidden_reg_dec): + decoding_reg.append(hidden_dim_reg) + + self.enc = InputEncoding(len(elem_labels)) + self.layer_embedding = tf.keras.layers.Dense(distance_dim, name="embedding_attention") + + self.embedding_dropout = None + if dropout > 0.0: + self.embedding_dropout = tf.keras.layers.Dropout(dropout) + + self.dists = [] + for idist in range(self.num_dists): + self.dists.append(SparseHashedNNDistance(bin_size=bin_size, num_neighbors=num_neighbors, dist_mult=dist_mult, cosine_dist=cosine_dist)) + self.addsparse = AddSparse() + #self.dist = DenseDistance(dist_mult=dist_mult) + + convs_id = [] + convs_reg = [] + + for iconv in range(num_convs_id): + convs_id.append(GHConv(26 if len(encoding_id)==0 else hidden_dim_id, activation=activation, name="conv_id{}".format(iconv))) + for iconv in range(num_convs_reg): + convs_reg.append(GHConv(35 if len(encoding_reg)==0 else hidden_dim_reg, activation=activation, name="conv_reg{}".format(iconv))) + + self.gnn_id = EncoderDecoderGNN(encoding_id, decoding_id, dropout, activation, convs_id, name="gnn_id") + self.layer_id = tf.keras.layers.Dense(len(class_labels), activation="linear", name="out_id") + self.layer_charge = tf.keras.layers.Dense(1, activation="linear", name="out_charge") + + self.gnn_reg = EncoderDecoderGNN(encoding_reg, decoding_reg, dropout, activation, convs_reg, name="gnn_reg") + self.layer_momentum = tf.keras.layers.Dense(3, activation="linear", name="out_momentum") + + def create_model(self, num_max_elems, training=True): + inputs = tf.keras.Input(shape=(num_max_elems,15,)) + return tf.keras.Model(inputs=[inputs], outputs=self.call(inputs, training), name="MLPFNet") + + def call(self, inputs, training=True): + X = tf.cast(inputs, tf.float32) + msk_input = tf.expand_dims(tf.cast(X[:, :, 0] != 0, tf.float32), -1) + + enc = self.enc(inputs) + + #embed inputs for graph structure prediction + embedding_attention = self.layer_embedding(enc) + if self.embedding_dropout: + embedding_attention = self.embedding_dropout(embedding_attention, training) + + #create graph structure by predicting a sparse distance matrix + dms = [dist(embedding_attention, training) for dist in self.dists] + dm = self.addsparse(dms) + + #run graph net for multiclass id prediction + x_id = self.gnn_id(enc, dm, training) + to_decode = tf.concat([enc, x_id], axis=-1) + out_id_logits = self.layer_id(to_decode) + out_charge = self.layer_charge(to_decode) + + #run graph net for regression output prediction, taking as an additonal input the ID predictions + x_reg = self.gnn_reg(tf.concat([enc, out_id_logits, out_charge], axis=-1), dm, training) + to_decode = tf.concat([enc, x_reg], axis=-1) + pred_corr = self.layer_momentum(to_decode) + + #soft-mask elements for which the id prediction was 0 + probabilistic_mask_good = 1.0 - tf.keras.activations.softmax(out_id_logits)[:, :, 0] + + out_momentum_eta = X[:, :, 2] + pred_corr[:, :, 0] + out_momentum_phi = X[:, :, 3] + pred_corr[:, :, 1] + out_momentum_E = X[:, :, 4] + pred_corr[:, :, 2] + + out_momentum = tf.stack([ + out_momentum_eta * probabilistic_mask_good, + out_momentum_phi * probabilistic_mask_good, + out_momentum_E * probabilistic_mask_good, + ], axis=-1) + + ret = tf.concat([out_id_logits, out_momentum, out_charge], axis=-1)*msk_input + return ret + + def set_trainable_classification(self): + self.gnn_reg.trainable = False + self.layer_momentum.trainable = False + + def set_trainable_regression(self): + for layer in self.layers: + layer.trainable = False + self.gnn_reg.trainable = True + self.layer_momentum.trainable = True + +#Just a dummy elementwise model +class PFNetDummy(tf.keras.Model): + def __init__(self, **kwargs): + super(PFNetDummy, self).__init__() + self.enc = InputEncoding(len(elem_labels)) + + self.flatten = tf.keras.layers.Flatten() + self.layer_hidden0 = tf.keras.layers.Dense(32, activation="elu") + self.layer_hidden1 = tf.keras.layers.Dense(64, activation="elu") + self.layer_hidden2 = tf.keras.layers.Dense(128, activation="elu") + self.layer_hidden3 = tf.keras.layers.Dense(256, activation="elu") + + self.layer_id = tf.keras.layers.Dense(len(class_labels), activation="linear", name="out_id") + self.layer_charge = tf.keras.layers.Dense(1, activation="linear", name="out_charge") + self.layer_momentum = tf.keras.layers.Dense(3, activation="linear", name="out_momentum") + + def call(self, inputs, training=True): + X = tf.cast(inputs, tf.float32) + msk_input = tf.expand_dims(tf.cast(X[:, :, 0] != 0, tf.float32), -1) + enc = self.enc(inputs) + + h = self.layer_hidden0(flat) + h = self.layer_hidden1(h) + h = self.layer_hidden2(h) + h = self.layer_hidden3(h) + + out_id_logits = self.layer_id(h) + out_charge = self.layer_charge(h) + pred_corr = self.layer_momentum(h) + + #soft-mask elements for which the id prediction was 0 + probabilistic_mask_good = 1.0 - tf.keras.activations.softmax(out_id_logits)[:, :, 0] + + out_momentum_eta = X[:, :, 2] + pred_corr[:, :, 0] + out_momentum_phi = X[:, :, 3] + pred_corr[:, :, 1] + out_momentum_E = X[:, :, 4] + pred_corr[:, :, 2] + + out_momentum = tf.stack([ + out_momentum_eta * probabilistic_mask_good, + out_momentum_phi * probabilistic_mask_good, + out_momentum_E * probabilistic_mask_good, + ], axis=-1) + + ret = tf.concat([out_id_logits, out_momentum, out_charge], axis=-1)*msk_input + return ret + + def set_trainable_classification(self): + self.layer_momentum.trainable = False + + def set_trainable_regression(self): + pass + + def create_model(self, num_max_elems, training=True): + inputs = tf.keras.Input(shape=(num_max_elems,15,)) + return tf.keras.Model(inputs=[inputs], outputs=self.call(inputs, training), name="MLPFNet") + +def separate_prediction(y_pred): + N = len(class_labels) + pred_id_logits = y_pred[:, :, :N] + pred_momentum = y_pred[:, :, N:N+3] + pred_charge = y_pred[:, :, N+3:N+4] + return pred_id_logits, pred_charge, pred_momentum + +def separate_truth(y_true): + true_id = tf.cast(y_true[:, :, :1], tf.int32) + true_momentum = y_true[:, :, 1:4] + true_charge = y_true[:, :, 4:5] + return true_id, true_charge, true_momentum + +def mse_unreduced(true, pred): + return tf.math.pow(true-pred,2) + +def msle_unreduced(true, pred): + return tf.math.pow(tf.math.log(tf.math.abs(true) + 1.0) - tf.math.log(tf.math.abs(pred) + 1.0), 2) + +def my_loss_cls(y_true, y_pred): + pred_id_logits, pred_charge, _ = separate_prediction(y_pred) + true_id, true_charge, _ = separate_truth(y_true) + + true_id_onehot = tf.one_hot(tf.cast(true_id, tf.int32), depth=len(class_labels)) + #predict the particle class labels + l1 = mult_classification_loss*tf.nn.softmax_cross_entropy_with_logits(true_id_onehot, pred_id_logits) + l3 = mult_charge_loss*mse_unreduced(true_charge, pred_charge)[:, :, 0] + + loss = l1 + l3 + return mult_total_loss*loss + +def my_loss_reg(y_true, y_pred): + _, _, pred_momentum = separate_prediction(y_pred) + _, true_charge, true_momentum = separate_truth(y_true) + + l2_0 = mult_eta_loss*mse_unreduced(true_momentum[:, :, 0], pred_momentum[:, :, 0]) + l2_1 = mult_phi_loss*mse_unreduced(tf.math.floormod(true_momentum[:, :, 1] - pred_momentum[:, :, 1] + np.pi, 2*np.pi) - np.pi, 0.0) + l2_2 = mult_energy_loss*mse_unreduced(true_momentum[:, :, 2], pred_momentum[:, :, 2]) + + loss = (l2_0 + l2_1 + l2_2) + + return 1e3*loss + +def my_loss_full(y_true, y_pred): + pred_id_logits, pred_charge, pred_momentum = separate_prediction(y_pred) + pred_id = tf.cast(tf.argmax(pred_id_logits, axis=-1), tf.int32) + true_id, true_charge, true_momentum = separate_truth(y_true) + true_id_onehot = tf.one_hot(tf.cast(true_id, tf.int32), depth=len(class_labels)) + + l1 = mult_classification_loss*tf.nn.softmax_cross_entropy_with_logits(true_id_onehot, pred_id_logits) + + l2_0 = mult_eta_loss*mse_unreduced(true_momentum[:, :, 0], pred_momentum[:, :, 0]) + l2_1 = mult_phi_loss*mse_unreduced(tf.math.floormod(true_momentum[:, :, 1] - pred_momentum[:, :, 1] + np.pi, 2*np.pi) - np.pi, 0.0) + l2_2 = mult_energy_loss*mse_unreduced(true_momentum[:, :, 2], pred_momentum[:, :, 2]) + + l2 = (l2_0 + l2_1 + l2_2) + + l3 = mult_charge_loss*mse_unreduced(true_charge, pred_charge)[:, :, 0] + loss = l1 + l2 + l3 + + return mult_total_loss*loss + +#TODO: put these in a class +def cls_130(y_true, y_pred): + pred_id_onehot, pred_charge, pred_momentum = separate_prediction(y_pred) + pred_id = tf.cast(tf.argmax(pred_id_onehot, axis=-1), tf.int32) + true_id, true_charge, true_momentum = separate_truth(y_true) + + msk_true = true_id[:, :, 0] == class_labels.index(130) + msk_pos = pred_id == class_labels.index(130) + num_true_pos = tf.reduce_sum(tf.cast(msk_true&msk_pos, tf.float32)) + num_true = tf.reduce_sum(tf.cast(msk_true, tf.float32)) + return num_true_pos/num_true + +def cls_211(y_true, y_pred): + pred_id_onehot, pred_charge, pred_momentum = separate_prediction(y_pred) + pred_id = tf.cast(tf.argmax(pred_id_onehot, axis=-1), tf.int32) + true_id, true_charge, true_momentum = separate_truth(y_true) + + msk_true = true_id[:, :, 0] == class_labels.index(211) + msk_pos = pred_id == class_labels.index(211) + num_true_pos = tf.reduce_sum(tf.cast(msk_true&msk_pos, tf.float32)) + num_true = tf.reduce_sum(tf.cast(msk_true, tf.float32)) + + return num_true_pos/num_true + +def cls_22(y_true, y_pred): + pred_id_onehot, pred_charge, pred_momentum = separate_prediction(y_pred) + pred_id = tf.cast(tf.argmax(pred_id_onehot, axis=-1), tf.int32) + true_id, true_charge, true_momentum = separate_truth(y_true) + + msk_true = true_id[:, :, 0] == class_labels.index(22) + msk_pos = pred_id == class_labels.index(22) + num_true_pos = tf.reduce_sum(tf.cast(msk_true&msk_pos, tf.float32)) + num_true = tf.reduce_sum(tf.cast(msk_true, tf.float32)) + + return num_true_pos/num_true + +def cls_11(y_true, y_pred): + pred_id_onehot, pred_charge, pred_momentum = separate_prediction(y_pred) + pred_id = tf.cast(tf.argmax(pred_id_onehot, axis=-1), tf.int32) + true_id, true_charge, true_momentum = separate_truth(y_true) + + msk_true = true_id[:, :, 0] == class_labels.index(11) + msk_pos = pred_id == class_labels.index(11) + num_true_pos = tf.reduce_sum(tf.cast(msk_true&msk_pos, tf.float32)) + num_true = tf.reduce_sum(tf.cast(msk_true, tf.float32)) + + return num_true_pos/num_true + +def cls_13(y_true, y_pred): + pred_id_onehot, pred_charge, pred_momentum = separate_prediction(y_pred) + pred_id = tf.cast(tf.argmax(pred_id_onehot, axis=-1), tf.int32) + true_id, true_charge, true_momentum = separate_truth(y_true) + + msk_true = true_id[:, :, 0] == class_labels.index(13) + msk_pos = pred_id == class_labels.index(13) + num_true_pos = tf.reduce_sum(tf.cast(msk_true&msk_pos, tf.float32)) + num_true = tf.reduce_sum(tf.cast(msk_true, tf.float32)) + + return num_true_pos/num_true + +def num_pred(y_true, y_pred): + pred_id_onehot, pred_charge, pred_momentum = separate_prediction(y_pred) + pred_id = tf.cast(tf.argmax(pred_id_onehot, axis=-1), tf.int32) + true_id, true_charge, true_momentum = separate_truth(y_true) + + ntrue = tf.reduce_sum(tf.cast(true_id[:, :, 0]!=0, tf.int32)) + npred = tf.reduce_sum(tf.cast(pred_id!=0, tf.int32)) + return tf.cast(ntrue - npred, tf.float32) + +def accuracy(y_true, y_pred): + pred_id_onehot, pred_charge, pred_momentum = separate_prediction(y_pred) + pred_id = tf.cast(tf.argmax(pred_id_onehot, axis=-1), tf.int32) + true_id, true_charge, true_momentum = separate_truth(y_true) + + is_true = true_id[:, :, 0]!=0 + is_same = true_id[:, :, 0] == pred_id + + acc = tf.reduce_sum(tf.cast(is_true&is_same, tf.int32)) / tf.reduce_sum(tf.cast(is_true, tf.int32)) + return tf.cast(acc, tf.float32) + +def eta_resolution(y_true, y_pred): + pred_id_onehot, pred_charge, pred_momentum = separate_prediction(y_pred) + pred_id = tf.cast(tf.argmax(pred_id_onehot, axis=-1), tf.int32) + true_id, true_charge, true_momentum = separate_truth(y_true) + + msk = true_id[:, :, 0]!=0 + return tf.reduce_mean(mse_unreduced(true_momentum[msk][:, 0], pred_momentum[msk][:, 0])) + +def phi_resolution(y_true, y_pred): + pred_id_onehot, pred_charge, pred_momentum = separate_prediction(y_pred) + pred_id = tf.cast(tf.argmax(pred_id_onehot, axis=-1), tf.int32) + true_id, true_charge, true_momentum = separate_truth(y_true) + + msk = true_id[:, :, 0]!=0 + return tf.reduce_mean(mse_unreduced(tf.math.floormod(true_momentum[msk][:, 1] - pred_momentum[msk][:, 1] + np.pi, 2*np.pi) - np.pi, 0.0)) + +def energy_resolution(y_true, y_pred): + pred_id_onehot, pred_charge, pred_momentum = separate_prediction(y_pred) + pred_id = tf.cast(tf.argmax(pred_id_onehot, axis=-1), tf.int32) + true_id, true_charge, true_momentum = separate_truth(y_true) + + msk = true_id[:, :, 0]!=0 + return tf.reduce_mean(mse_unreduced(true_momentum[msk][:, 2], pred_momentum[msk][:, 2])) + +def get_unique_run(): + previous_runs = os.listdir('experiments') + if len(previous_runs) == 0: + run_number = 1 + else: + run_number = max([int(s.split('run_')[1]) for s in previous_runs]) + 1 + return run_number + +def parse_args(): + import argparse + parser = argparse.ArgumentParser() + parser.add_argument("--model", type=str, default="PFNet", help="type of model to train", choices=["PFNet"]) + parser.add_argument("--ntrain", type=int, default=100, help="number of training events") + parser.add_argument("--ntest", type=int, default=100, help="number of testing events") + parser.add_argument("--nepochs", type=int, default=100, help="number of training epochs") + parser.add_argument("--hidden-dim-id", type=int, default=256, help="hidden dimension") + parser.add_argument("--hidden-dim-reg", type=int, default=256, help="hidden dimension") + parser.add_argument("--batch-size", type=int, default=1, help="number of events in training batch") + parser.add_argument("--num-convs-id", type=int, default=3, help="number of convolution layers") + parser.add_argument("--num-convs-reg", type=int, default=3, help="number of convolution layers") + parser.add_argument("--num-hidden-id-enc", type=int, default=2, help="number of encoder layers for multiclass") + parser.add_argument("--num-hidden-id-dec", type=int, default=2, help="number of decoder layers for multiclass") + parser.add_argument("--num-hidden-reg-enc", type=int, default=2, help="number of encoder layers for regression") + parser.add_argument("--num-hidden-reg-dec", type=int, default=2, help="number of decoder layers for regression") + parser.add_argument("--num-neighbors", type=int, default=5, help="number of knn neighbors") + parser.add_argument("--distance-dim", type=int, default=256, help="distance dimension") + parser.add_argument("--bin-size", type=int, default=100, help="number of points per LSH bin") + parser.add_argument("--dropout", type=float, default=0.1, help="Dropout rate") + parser.add_argument("--dist-mult", type=float, default=1.0, help="Exponential multiplier") + parser.add_argument("--target", type=str, choices=["cand", "gen"], help="Regress to PFCandidates or GenParticles", default="cand") + parser.add_argument("--weights", type=str, choices=["uniform", "inverse", "classbalanced"], help="Sample weighting scheme to use", default="inverse") + parser.add_argument("--name", type=str, default=None, help="where to store the output") + parser.add_argument("--convlayer", type=str, default="ghconv", choices=["ghconv"], help="Type of graph convolutional layer") + parser.add_argument("--load", type=str, default=None, help="model to load") + parser.add_argument("--datapath", type=str, help="Input data path", required=True) + parser.add_argument("--lr", type=float, default=1e-5, help="learning rate") + parser.add_argument("--lr-decay", type=float, default=0.0, help="learning rate decay") + parser.add_argument("--train-cls", action="store_true", help="Train only the classification part") + parser.add_argument("--train-reg", action="store_true", help="Train only the regression part") + parser.add_argument("--cosine-dist", action="store_true", help="Use cosine distance") + parser.add_argument("--eager", action="store_true", help="Run in eager mode for debugging") + args = parser.parse_args() + return args + +def assign_label(pred_id_onehot_linear): + ret2 = np.argmax(pred_id_onehot_linear, axis=-1) + return ret2 + +def prepare_df(model, data, outdir, target, save_raw=False): + print("prepare_df") + + dfs = [] + for iev, d in enumerate(data): + if iev%50==0: + tf.print(".", end="") + X, y, w = d + pred = model(X, training=False).numpy() + pred_id_onehot, pred_charge, pred_momentum = separate_prediction(pred) + pred_id = assign_label(pred_id_onehot).flatten() + + if save_raw: + np.savez_compressed("ev_{}.npz".format(iev), X=X.numpy(), y=y.numpy(), w=w.numpy(), y_pred=pred) + + pred_charge = pred_charge[:, :, 0].flatten() + pred_momentum = pred_momentum.reshape((pred_momentum.shape[0]*pred_momentum.shape[1], pred_momentum.shape[2])) + + true_id, true_charge, true_momentum = separate_truth(y) + true_id = true_id.numpy()[:, :, 0].flatten() + true_charge = true_charge.numpy()[:, :, 0].flatten() + true_momentum = true_momentum.numpy().reshape((true_momentum.shape[0]*true_momentum.shape[1], true_momentum.shape[2])) + + df = pandas.DataFrame() + df["pred_pid"] = np.array([int(class_labels[p]) for p in pred_id]) + df["pred_eta"] = np.array(pred_momentum[:, 0], dtype=np.float64) + df["pred_phi"] = np.array(pred_momentum[:, 1], dtype=np.float64) + df["pred_e"] = np.array(pred_momentum[:, 2], dtype=np.float64) + + df["{}_pid".format(target)] = np.array([int(class_labels[p]) for p in true_id]) + df["{}_eta".format(target)] = np.array(true_momentum[:, 0], dtype=np.float64) + df["{}_phi".format(target)] = np.array(true_momentum[:, 1], dtype=np.float64) + df["{}_e".format(target)] = np.array(true_momentum[:, 2], dtype=np.float64) + + df["iev"] = iev + dfs += [df] + df = pandas.concat(dfs, ignore_index=True) + fn = outdir + "/df.pkl.bz2" + df.to_pickle(fn) + print("prepare_df done", fn) + +def plot_to_image(figure): + """Converts the matplotlib plot specified by 'figure' to a PNG image and + returns it. The supplied figure is closed and inaccessible after this call.""" + # Save the plot to a PNG in memory. + buf = io.BytesIO() + plt.savefig(buf, format='png') + # Closing the figure prevents it from being displayed directly inside + # the notebook. + buf.seek(0) + # Convert PNG buffer to TF image + image = tf.image.decode_png(buf.getvalue(), channels=4) + # Add the batch dimension + image = tf.expand_dims(image, 0) + return image + +def load_dataset_ttbar(datapath, target): + from tf_data import _parse_tfr_element + path = datapath + "/tfr/{}/*.tfrecords".format(target) + tfr_files = glob.glob(path) + if len(tfr_files) == 0: + raise Exception("Could not find any files in {}".format(path)) + dataset = tf.data.TFRecordDataset(tfr_files).map(_parse_tfr_element, num_parallel_calls=tf.data.experimental.AUTOTUNE) + return dataset + +if __name__ == "__main__": + args = parse_args() + print(args) + + if comet_enabled: + experiment = Experiment(project_name="particleflow_tf") + + #tf.debugging.enable_check_numerics() + tf.config.experimental_run_functions_eagerly(args.eager) + + #batch size for loading data must be configured according to the number of distributed GPUs + global_batch_size = args.batch_size + try: + num_gpus = len(os.environ["CUDA_VISIBLE_DEVICES"].split(",")) + print("num_gpus=", num_gpus) + if num_gpus > 1: + strategy = tf.distribute.MirroredStrategy() + global_batch_size = num_gpus * args.batch_size + else: + strategy = tf.distribute.OneDeviceStrategy("gpu:0") + except Exception as e: + print("fallback to CPU") + strategy = tf.distribute.OneDeviceStrategy("cpu") + + filelist = sorted(glob.glob(args.datapath + "/raw/*.pkl"))[:args.ntrain+args.ntest] + + dataset = load_dataset_ttbar(args.datapath, args.target) + + #create padded input data + ps = (tf.TensorShape([num_max_elems, 15]), tf.TensorShape([num_max_elems, 5]), tf.TensorShape([num_max_elems, ])) + ds_train = dataset.take(args.ntrain).map(weight_schemes[args.weights]).padded_batch(global_batch_size, padded_shapes=ps) + ds_test = dataset.skip(args.ntrain).take(args.ntest).map(weight_schemes[args.weights]).padded_batch(global_batch_size, padded_shapes=ps) + + #repeat needed for keras api + ds_train_r = ds_train.repeat(args.nepochs) + ds_test_r = ds_test.repeat(args.nepochs) + + if args.lr_decay > 0: + lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay( + args.lr, + decay_steps=10*int(args.ntrain/global_batch_size), + decay_rate=args.lr_decay + ) + else: + lr_schedule = args.lr + + loss_fn = my_loss_full + + with strategy.scope(): + opt = tf.keras.optimizers.Adam(learning_rate=lr_schedule) + + model = PFNet( + hidden_dim_id=args.hidden_dim_id, + hidden_dim_reg=args.hidden_dim_reg, + num_convs_id=args.num_convs_id, + num_convs_reg=args.num_convs_reg, + num_hidden_id_enc=args.num_hidden_id_enc, + num_hidden_id_dec=args.num_hidden_id_dec, + num_hidden_reg_enc=args.num_hidden_reg_enc, + num_hidden_reg_dec=args.num_hidden_reg_dec, + distance_dim=args.distance_dim, + convlayer=args.convlayer, + dropout=args.dropout, + bin_size=args.bin_size, + num_neighbors=args.num_neighbors, + dist_mult=args.dist_mult + ) + + if args.train_cls: + loss_fn = my_loss_cls + model.set_trainable_classification() + elif args.train_reg: + loss_fn = my_loss_reg + model.set_trainable_regression() + + model(np.random.randn(args.batch_size, num_max_elems, 15).astype(np.float32)) + if not args.eager: + model = model.create_model(num_max_elems) + model.summary() + + if not os.path.isdir("experiments"): + os.makedirs("experiments") + + if args.name is None: + args.name = 'run_{:02}'.format(get_unique_run()) + + outdir = 'experiments/' + args.name + + if os.path.isdir(outdir): + print("Output directory exists: {}".format(outdir), file=sys.stderr) + sys.exit(1) + + print(outdir) + callbacks = [] + tb = tf.keras.callbacks.TensorBoard( + log_dir=outdir, histogram_freq=0, write_graph=False, write_images=False, + update_freq='epoch', + #profile_batch=(10,40), + profile_batch=0, + ) + tb.set_model(model) + callbacks += [tb] + + terminate_cb = tf.keras.callbacks.TerminateOnNaN() + callbacks += [terminate_cb] + + cp_callback = tf.keras.callbacks.ModelCheckpoint( + filepath=outdir + "/weights.{epoch:02d}-{val_loss:.6f}.hdf5", + save_weights_only=True, + verbose=0 + ) + cp_callback.set_model(model) + callbacks += [cp_callback] + + with strategy.scope(): + model.compile(optimizer=opt, loss=loss_fn, + metrics=[accuracy, cls_130, cls_211, cls_22, energy_resolution, eta_resolution, phi_resolution], + sample_weight_mode="temporal") + + if args.load: + #ensure model input size is known + for X, y, w in ds_train: + model(X) + break + + model.load_weights(args.load) + + if args.nepochs > 0: + ret = model.fit(ds_train_r, + validation_data=ds_test_r, epochs=args.nepochs, + steps_per_epoch=args.ntrain/global_batch_size, validation_steps=args.ntest/global_batch_size, + verbose=True, + callbacks=callbacks + ) diff --git a/RecoParticleFlow/PFSimProducer/plugins/BuildFile.xml b/RecoParticleFlow/PFSimProducer/plugins/BuildFile.xml index 4d11bb03c5ad0..c8ab8043b0d47 100644 --- a/RecoParticleFlow/PFSimProducer/plugins/BuildFile.xml +++ b/RecoParticleFlow/PFSimProducer/plugins/BuildFile.xml @@ -1,4 +1,4 @@ - + @@ -26,34 +26,18 @@ - - - - - - - - - - - - - - - - diff --git a/RecoParticleFlow/PFSimProducer/plugins/ConvBremSeedProducer.cc b/RecoParticleFlow/PFSimProducer/plugins/ConvBremSeedProducer.cc index 15ff8bd791331..e780f9a066770 100644 --- a/RecoParticleFlow/PFSimProducer/plugins/ConvBremSeedProducer.cc +++ b/RecoParticleFlow/PFSimProducer/plugins/ConvBremSeedProducer.cc @@ -1,50 +1,110 @@ -#include "RecoParticleFlow/PFSimProducer/plugins/ConvBremSeedProducer.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "TMath.h" - -///RECORD NEEDED -#include "FastSimulation/TrackerSetup/interface/TrackerInteractionGeometryRecord.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "RecoTracker/Record/interface/TrackerRecoGeometryRecord.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" -#include "FastSimulation/ParticlePropagator/interface/MagneticFieldMapRecord.h" -#include "TrackingTools/Records/interface/TransientRecHitRecord.h" - -///ESHANDLES -#include "FastSimulation/TrackerSetup/interface/TrackerInteractionGeometry.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "MagneticField/Engine/interface/MagneticField.h" -#include "RecoTracker/TransientTrackingRecHit/interface/TkTransientTrackingRecHitBuilder.h" - -///COLLECTION -#include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h" +#include "CommonTools/BaseParticlePropagator/interface/BaseParticlePropagator.h" +#include "DataFormats/GeometrySurface/interface/Surface.h" +#include "DataFormats/GeometrySurface/interface/TangentPlane.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" #include "DataFormats/ParticleFlowReco/interface/ConvBremSeed.h" #include "DataFormats/ParticleFlowReco/interface/ConvBremSeedFwd.h" -#include "DataFormats/ParticleFlowReco/interface/GsfPFRecTrackFwd.h" #include "DataFormats/ParticleFlowReco/interface/GsfPFRecTrack.h" -#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "DataFormats/ParticleFlowReco/interface/GsfPFRecTrackFwd.h" #include "DataFormats/ParticleFlowReco/interface/PFBrem.h" #include "DataFormats/ParticleFlowReco/interface/PFCluster.h" +#include "DataFormats/ParticleFlowReco/interface/PFClusterFwd.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h" +#include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2DCollection.h" +#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2DCollection.h" #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h" - -///PROPAGATION TOOLS -#include "TrackingTools/DetLayers/interface/DetLayer.h" -#include "TrackingTools/DetLayers/interface/BarrelDetLayer.h" -#include "TrackingTools/DetLayers/interface/ForwardDetLayer.h" -#include "DataFormats/GeometrySurface/interface/Surface.h" -#include "DataFormats/GeometrySurface/interface/TangentPlane.h" +#include "DataFormats/TrackingRecHit/interface/TrackingRecHitFwd.h" #include "DataFormats/TrajectorySeed/interface/TrajectorySeed.h" +#include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FastSimulation/ParticlePropagator/interface/MagneticFieldMapRecord.h" #include "FastSimulation/ParticlePropagator/interface/ParticlePropagator.h" -#include "TrackingTools/GeomPropagators/interface/AnalyticalPropagator.h" +#include "FastSimulation/TrackerSetup/interface/TrackerInteractionGeometry.h" +#include "FastSimulation/TrackerSetup/interface/TrackerInteractionGeometryRecord.h" #include "FastSimulation/TrajectoryManager/interface/InsideBoundsMeasurementEstimator.h" #include "FastSimulation/TrajectoryManager/interface/LocalMagneticField.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "RecoTracker/Record/interface/TrackerRecoGeometryRecord.h" +#include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h" #include "RecoTracker/TkSeedGenerator/interface/FastHelix.h" -#include "TrackingTools/MaterialEffects/interface/PropagatorWithMaterial.h" +#include "RecoTracker/TransientTrackingRecHit/interface/TkTransientTrackingRecHitBuilder.h" +#include "TrackingTools/DetLayers/interface/BarrelDetLayer.h" +#include "TrackingTools/DetLayers/interface/DetLayer.h" +#include "TrackingTools/DetLayers/interface/ForwardDetLayer.h" +#include "TrackingTools/GeomPropagators/interface/AnalyticalPropagator.h" #include "TrackingTools/KalmanUpdators/interface/KFUpdator.h" +#include "TrackingTools/MaterialEffects/interface/PropagatorWithMaterial.h" +#include "TrackingTools/Records/interface/TransientRecHitRecord.h" #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "TMath.h" + +#include + +class ConvBremSeedProducer : public edm::stream::EDProducer<> { +public: + explicit ConvBremSeedProducer(const edm::ParameterSet&); + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void beginRun(const edm::Run&, const edm::EventSetup&) override; + void produce(edm::Event&, const edm::EventSetup&) override; + void endRun(const edm::Run&, const edm::EventSetup&) override; + void initializeLayerMap(); + std::vector theLayerMap; + TrajectoryStateOnSurface makeTrajectoryState(const DetLayer* layer, + const ParticlePropagator& pp, + const MagneticField* field) const; + const DetLayer* detLayer(const TrackerLayer& layer, float zpos) const; + + bool isGsfTrack(const reco::Track&, const TrackingRecHit*); + + int GoodCluster(const BaseParticlePropagator& bpg, + const reco::PFClusterCollection& pfc, + float minep, + bool sec = false); + + std::vector sharedHits(const std::vector > >&); + + edm::ParameterSet conf_; + const GeometricSearchTracker* geomSearchTracker_; + const TrackerInteractionGeometry* geometry_; + const TrackerGeometry* tracker_; + const MagneticField* magfield_; + const MagneticFieldMap* fieldMap_; + const PropagatorWithMaterial* propagator_; + const KFUpdator* kfUpdator_; + const TransientTrackingRecHitBuilder* hitBuilder_; + std::vector layerMap_; + int negLayerOffset_; + ///B field + math::XYZVector B_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(ConvBremSeedProducer); + +void ConvBremSeedProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + // convBremSeeds + edm::ParameterSetDescription desc; + desc.add("pixelRecHits", edm::InputTag("gsPixelRecHits")); + desc.add("matchedrecHits", edm::InputTag("gsStripRecHits", "matchedRecHit")); + desc.add("TTRHBuilder", "WithTrackAngle"); + desc.add("rphirecHits", edm::InputTag("gsStripRecHits", "rphiRecHit")); + desc.add("PFClusters", edm::InputTag("particleFlowClusterECAL")); + desc.add("PFRecTrackLabel", edm::InputTag("pfTrackElec")); +} using namespace edm; using namespace std; @@ -55,12 +115,10 @@ ConvBremSeedProducer::ConvBremSeedProducer(const ParameterSet& iConfig) produces(); } -ConvBremSeedProducer::~ConvBremSeedProducer() {} - void ConvBremSeedProducer::produce(Event& iEvent, const EventSetup& iSetup) { LogDebug("ConvBremSeedProducerProducer") << "START event: " << iEvent.id().event() << " in run " << iEvent.id().run(); - float pfmass = 0.0005; + constexpr float pfmass = 0.0005; ///INPUT COLLECTIONS @@ -76,8 +134,6 @@ void ConvBremSeedProducer::produce(Event& iEvent, const EventSetup& iSetup) { ///STRIP Handle rphirecHits; iEvent.getByLabel(conf_.getParameter("rphirecHits"), rphirecHits); - Handle stereorecHits; - iEvent.getByLabel(conf_.getParameter("stereorecHits"), stereorecHits); Handle matchedrecHits; iEvent.getByLabel(conf_.getParameter("matchedrecHits"), matchedrecHits); @@ -169,30 +225,30 @@ void ConvBremSeedProducer::produce(Event& iEvent, const EventSetup& iSetup) { continue; TrajectoryStateOnSurface trajState = makeTrajectoryState(tkLayer, PP, &mf); - std::vector compat = tkLayer->compatibleDets(trajState, alongProp, est); + auto compat = tkLayer->compatibleDets(trajState, alongProp, est); vector temp; if (compat.empty()) continue; - for (std::vector::const_iterator i = compat.begin(); i != compat.end(); i++) { + for (auto i = compat.begin(); i != compat.end(); i++) { long int detid = i->first->geographicalId().rawId(); if (!GeomDetEnumerators::isTrackerPixel(tkLayer->subDetector())) { - StDetMatch DetMatch = (rphirecHits.product())->find((detid)); - MatDetMatch MDetMatch = (matchedrecHits.product())->find((detid)); + auto DetMatch = (rphirecHits.product())->find((detid)); + auto MDetMatch = (matchedrecHits.product())->find((detid)); long int DetID = (DetMatch != rphirecHits->end()) ? detid : 0; if ((MDetMatch != matchedrecHits->end()) && !MDetMatch->empty()) { long int pii = MDetMatch->begin()->monoId(); - StDetMatch CDetMatch = (rphirecHits.product())->find((pii)); + auto CDetMatch = (rphirecHits.product())->find((pii)); DetID = (CDetMatch != rphirecHits->end()) ? pii : 0; } temp.push_back(DetID); } else { - PiDetMatch DetMatch = (pixelHits.product())->find((detid)); + auto DetMatch = (pixelHits.product())->find((detid)); long int DetID = (DetMatch != pixelHits->end()) ? detid : 0; temp.push_back(DetID); } @@ -240,25 +296,25 @@ void ConvBremSeedProducer::produce(Event& iEvent, const EventSetup& iSetup) { TransientTrackingRecHit::ConstRecHitContainer glob_hits; OwnVector loc_hits; for (unsigned int i = 0; i < tripl.size(); i++) { - StDetMatch DetMatch1 = (rphirecHits.product())->find(tripl[i][0]); - StDetMatch DetMatch2 = (rphirecHits.product())->find(tripl[i][1]); - StDetMatch DetMatch3 = (rphirecHits.product())->find(tripl[i][2]); + auto DetMatch1 = (rphirecHits.product())->find(tripl[i][0]); + auto DetMatch2 = (rphirecHits.product())->find(tripl[i][1]); + auto DetMatch3 = (rphirecHits.product())->find(tripl[i][2]); if ((DetMatch1 == rphirecHits->end()) || (DetMatch2 == rphirecHits->end()) || (DetMatch3 == rphirecHits->end())) continue; - StDetSet DetSet1 = *DetMatch1; - StDetSet DetSet2 = *DetMatch2; - StDetSet DetSet3 = *DetMatch3; + auto DetSet1 = *DetMatch1; + auto DetSet2 = *DetMatch2; + auto DetSet3 = *DetMatch3; - for (StDetSet::const_iterator it1 = DetSet1.begin(); it1 != DetSet1.end(); ++it1) { + for (auto it1 = DetSet1.begin(); it1 != DetSet1.end(); ++it1) { GlobalPoint gp1 = tracker_->idToDet(tripl[i][0])->surface().toGlobal(it1->localPosition()); bool tak1 = isGsfTrack(gsfRecHits, &(*it1)); - for (StDetSet::const_iterator it2 = DetSet2.begin(); it2 != DetSet2.end(); ++it2) { + for (auto it2 = DetSet2.begin(); it2 != DetSet2.end(); ++it2) { GlobalPoint gp2 = tracker_->idToDet(tripl[i][1])->surface().toGlobal(it2->localPosition()); bool tak2 = isGsfTrack(gsfRecHits, &(*it2)); - for (StDetSet::const_iterator it3 = DetSet3.begin(); it3 != DetSet3.end(); ++it3) { + for (auto it3 = DetSet3.begin(); it3 != DetSet3.end(); ++it3) { // ips++; GlobalPoint gp3 = tracker_->idToDet(tripl[i][2])->surface().toGlobal(it3->localPosition()); bool tak3 = isGsfTrack(gsfRecHits, &(*it3)); diff --git a/RecoParticleFlow/PFSimProducer/plugins/ConvBremSeedProducer.h b/RecoParticleFlow/PFSimProducer/plugins/ConvBremSeedProducer.h deleted file mode 100644 index 12ef969164a38..0000000000000 --- a/RecoParticleFlow/PFSimProducer/plugins/ConvBremSeedProducer.h +++ /dev/null @@ -1,84 +0,0 @@ -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -//COLLECTION -#include "DataFormats/TrajectorySeed/interface/TrajectorySeed.h" -#include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h" -#include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2DCollection.h" -#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2DCollection.h" -#include "DataFormats/ParticleFlowReco/interface/PFClusterFwd.h" -#include "DataFormats/TrackReco/interface/Track.h" - -///ESHANDLE -#include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h" - -#include "DataFormats/TrackingRecHit/interface/TrackingRecHitFwd.h" -#include "CommonTools/BaseParticlePropagator/interface/BaseParticlePropagator.h" - -class DetLayer; -class TrajectoryStateOnSurface; -class ParticlePropagator; -class TrackerLayer; -class MagneticField; -class TrackerInteractionGeometry; -class TrackerGeometry; -class MagneticFieldMap; -class PropagatorWithMaterial; -class KFUpdator; -class TransientTrackingRecHitBuilder; - -class ConvBremSeedProducer : public edm::EDProducer { - typedef SiStripRecHit2DCollection::const_iterator StDetMatch; - typedef SiPixelRecHitCollection::const_iterator PiDetMatch; - typedef SiStripMatchedRecHit2DCollection::const_iterator MatDetMatch; - typedef SiStripRecHit2DCollection::DetSet StDetSet; - typedef SiPixelRecHitCollection::DetSet PiDetSet; - typedef SiStripMatchedRecHit2DCollection::DetSet MatDetSet; - typedef GeometricSearchDet::DetWithState DetWithState; - -public: - explicit ConvBremSeedProducer(const edm::ParameterSet&); - ~ConvBremSeedProducer() override; - -private: - void beginRun(const edm::Run&, const edm::EventSetup&) override; - void produce(edm::Event&, const edm::EventSetup&) override; - void endRun(const edm::Run&, const edm::EventSetup&) override; - void initializeLayerMap(); - std::vector theLayerMap; - TrajectoryStateOnSurface makeTrajectoryState(const DetLayer* layer, - const ParticlePropagator& pp, - const MagneticField* field) const; - const DetLayer* detLayer(const TrackerLayer& layer, float zpos) const; - - bool isGsfTrack(const reco::Track&, const TrackingRecHit*); - - int GoodCluster(const BaseParticlePropagator& bpg, - const reco::PFClusterCollection& pfc, - float minep, - bool sec = false); - - std::vector sharedHits(const std::vector > >&); - - edm::ParameterSet conf_; - const GeometricSearchTracker* geomSearchTracker_; - const TrackerInteractionGeometry* geometry_; - const TrackerGeometry* tracker_; - const MagneticField* magfield_; - const MagneticFieldMap* fieldMap_; - const PropagatorWithMaterial* propagator_; - const KFUpdator* kfUpdator_; - const TransientTrackingRecHitBuilder* hitBuilder_; - std::vector layerMap_; - int negLayerOffset_; - ///B field - math::XYZVector B_; -}; diff --git a/RecoParticleFlow/PFSimProducer/plugins/EcalBarrelClusterFastTimer.cc b/RecoParticleFlow/PFSimProducer/plugins/EcalBarrelClusterFastTimer.cc index 43f2ccc5ffb50..3906a1f1bfe71 100644 --- a/RecoParticleFlow/PFSimProducer/plugins/EcalBarrelClusterFastTimer.cc +++ b/RecoParticleFlow/PFSimProducer/plugins/EcalBarrelClusterFastTimer.cc @@ -2,40 +2,35 @@ // finds the corresponding fast-timing det IDs and attempts to // assign a reasonable time guess -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/global/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" - +#include "CLHEP/Units/SystemOfUnits.h" #include "DataFormats/Common/interface/ValueMap.h" #include "DataFormats/Common/interface/View.h" +#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" #include "DataFormats/ParticleFlowReco/interface/PFCluster.h" -#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" - #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" - -#include "Geometry/CaloGeometry/interface/TruncatedPyramid.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "Geometry/CaloGeometry/interface/CaloGeometry.h" #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" +#include "Geometry/CaloGeometry/interface/TruncatedPyramid.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "SimTracker/TrackAssociation/interface/ResolutionModel.h" #include #include -#include "SimTracker/TrackAssociation/interface/ResolutionModel.h" -#include "CLHEP/Units/SystemOfUnits.h" -#include "FWCore/Utilities/interface/isFinite.h" - class EcalBarrelClusterFastTimer : public edm::global::EDProducer<> { public: EcalBarrelClusterFastTimer(const edm::ParameterSet&); - ~EcalBarrelClusterFastTimer() override {} + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; @@ -55,8 +50,33 @@ class EcalBarrelClusterFastTimer : public edm::global::EDProducer<> { const CaloSubdetectorGeometry* ecalGeom) const; }; +#include "FWCore/Framework/interface/MakerMacros.h" DEFINE_FWK_MODULE(EcalBarrelClusterFastTimer); +void EcalBarrelClusterFastTimer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + // ecalBarrelClusterFastTimer + edm::ParameterSetDescription desc; + desc.add("ecalDepth", 7.0); + { + edm::ParameterSetDescription vpsd1; + vpsd1.add("modelName", "PerfectResolutionModel"); + std::vector temp1; + temp1.reserve(1); + { + edm::ParameterSet temp2; + temp2.addParameter("modelName", "PerfectResolutionModel"); + temp1.push_back(temp2); + } + desc.addVPSet("resolutionModels", vpsd1, temp1); + } + desc.add("timedVertices", edm::InputTag("offlinePrimaryVertices4D")); + desc.add("minFractionToConsider", 0.1); + desc.add("ebClusters", edm::InputTag("particleFlowClusterECALUncorrected")); + desc.add("minEnergyToConsider", 0.0); + desc.add("ebTimeHits", edm::InputTag("ecalDetailedTimeRecHit", "EcalRecHitsEB")); + descriptions.add("ecalBarrelClusterFastTimer", desc); +} + namespace { const std::string resolution("Resolution"); diff --git a/RecoParticleFlow/PFSimProducer/plugins/PFSimParticleProducer.cc b/RecoParticleFlow/PFSimProducer/plugins/PFSimParticleProducer.cc index 498a9a4a31249..2eb632b65e7d2 100644 --- a/RecoParticleFlow/PFSimProducer/plugins/PFSimParticleProducer.cc +++ b/RecoParticleFlow/PFSimProducer/plugins/PFSimParticleProducer.cc @@ -1,63 +1,138 @@ -#include "RecoParticleFlow/PFSimProducer/plugins/PFSimParticleProducer.h" +/**\class PFSimParticleProducer +\brief Producer for PFRecTracks and PFSimParticles -#include "RecoParticleFlow/PFClusterTools/interface/PFEnergyCalibration.h" -#include "RecoParticleFlow/PFClusterTools/interface/PFEnergyResolution.h" +\todo Remove the PFRecTrack part, which is now handled by PFTracking +\author Colin Bernet +\date April 2007 +*/ -#include "DataFormats/ParticleFlowReco/interface/PFLayer.h" +#include "DataFormats/EcalDetId/interface/EBDetId.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHit.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" +#include "DataFormats/GeometrySurface/interface/BoundCylinder.h" +#include "DataFormats/GeometrySurface/interface/SimpleCylinderBounds.h" +#include "DataFormats/GeometrySurface/interface/SimpleDiskBounds.h" +#include "DataFormats/GeometrySurface/interface/TkRotation.h" +#include "DataFormats/GeometryVector/interface/GlobalPoint.h" +#include "DataFormats/GeometryVector/interface/GlobalVector.h" #include "DataFormats/ParticleFlowReco/interface/PFCluster.h" - +#include "DataFormats/ParticleFlowReco/interface/PFLayer.h" +#include "DataFormats/ParticleFlowReco/interface/PFRecTrack.h" +#include "DataFormats/ParticleFlowReco/interface/PFRecTrackFwd.h" #include "DataFormats/ParticleFlowReco/interface/PFSimParticle.h" #include "DataFormats/ParticleFlowReco/interface/PFSimParticleFwd.h" - -// include files used for reconstructed tracks -// #include "DataFormats/TrackReco/interface/Track.h" -// #include "DataFormats/TrackReco/interface/TrackFwd.h" -// #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h" -// #include "DataFormats/TrackingRecHit/interface/TrackingRecHitFwd.h" -// #include "DataFormats/TrackCandidate/interface/TrackCandidate.h" -// #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h" -// #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h" - +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/TrackerRecHit2D/interface/FastTrackerRecHit.h" #include "FWCore/Framework/interface/ESHandle.h" -#include "MagneticField/Engine/interface/MagneticField.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/CommonDetUnit/interface/GeomDet.h" -#include "DataFormats/GeometryVector/interface/GlobalPoint.h" -#include "DataFormats/GeometryVector/interface/GlobalVector.h" -#include "DataFormats/GeometrySurface/interface/BoundCylinder.h" -#include "DataFormats/GeometrySurface/interface/TkRotation.h" -#include "DataFormats/GeometrySurface/interface/SimpleCylinderBounds.h" -#include "DataFormats/GeometrySurface/interface/SimpleDiskBounds.h" -#include "TrackingTools/Records/interface/TrackingComponentsRecord.h" -#include "TrackingTools/Records/interface/TransientRecHitRecord.h" -#include "TrackingTools/PatternTools/interface/Trajectory.h" -#include "TrackingTools/TrackFitters/interface/TrajectoryFitter.h" -// #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h" -#include "TrackingTools/GeomPropagators/interface/AnalyticalPropagator.h" - +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/EDGetToken.h" #include "FWCore/Utilities/interface/Exception.h" -#include "FWCore/Framework/interface/EventSetup.h" - -#include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h" #include "FastSimulation/Event/interface/FSimEvent.h" #include "FastSimulation/Event/interface/FSimTrack.h" #include "FastSimulation/Event/interface/FSimVertex.h" - +#include "Geometry/CommonDetUnit/interface/GeomDet.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "RecoParticleFlow/PFClusterTools/interface/PFEnergyCalibration.h" +#include "RecoParticleFlow/PFClusterTools/interface/PFEnergyResolution.h" +#include "RecoParticleFlow/PFProducer/interface/PFBlockAlgo.h" +#include "RecoParticleFlow/PFTracking/interface/PFGeometry.h" #include "SimDataFormats/CaloHit/interface/PCaloHit.h" #include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" -#include "DataFormats/EcalDetId/interface/EBDetId.h" -#include "DataFormats/EcalRecHit/interface/EcalRecHit.h" -#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" -#include "DataFormats/ParticleFlowReco/interface/PFRecTrack.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/TrackerRecHit2D/interface/FastTrackerRecHit.h" +#include "SimDataFormats/Track/interface/SimTrack.h" +#include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h" +#include "TrackingTools/GeomPropagators/interface/AnalyticalPropagator.h" +#include "TrackingTools/GeomPropagators/interface/Propagator.h" +#include "TrackingTools/PatternTools/interface/Trajectory.h" +#include "TrackingTools/Records/interface/TrackingComponentsRecord.h" +#include "TrackingTools/Records/interface/TransientRecHitRecord.h" +#include "TrackingTools/TrackFitters/interface/TrajectoryFitter.h" +#include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h" +#include #include #include +#include + +class PFSimParticleProducer : public edm::stream::EDProducer<> { +public: + explicit PFSimParticleProducer(const edm::ParameterSet&); + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + void produce(edm::Event&, const edm::EventSetup&) override; + + typedef edm::Handle TrackHandle; + void getSimIDs(const TrackHandle& trackh, std::vector& recTrackSimID); + +private: + /// module label for retrieving input simtrack and simvertex + edm::InputTag inputTagSim_; + edm::EDGetTokenT > tokenSim_; + edm::EDGetTokenT > tokenSimVertices_; + + //MC Truth Matching + //modif-beg + bool mctruthMatchingInfo_; + edm::InputTag inputTagFastSimProducer_; + edm::EDGetTokenT tokenFastSimProducer_; + //modif-end + + edm::InputTag inputTagRecTracks_; + edm::EDGetTokenT tokenRecTracks_; + edm::InputTag inputTagEcalRecHitsEB_; + edm::EDGetTokenT tokenEcalRecHitsEB_; + edm::InputTag inputTagEcalRecHitsEE_; + edm::EDGetTokenT tokenEcalRecHitsEE_; + + // parameters for retrieving true particles information -- + + edm::ParameterSet particleFilter_; + std::unique_ptr mySimEvent; + + // flags for the various tasks --------------------------- + + /// process particles on/off + bool processParticles_; + + /// verbose ? + bool verbose_; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(PFSimParticleProducer); + +void PFSimParticleProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + // particleFlowSimParticle + edm::ParameterSetDescription desc; + desc.addUntracked("fastSimProducer", edm::InputTag("fastSimProducer", "EcalHitsEB")); + desc.addUntracked("MCTruthMatchingInfo", false); + desc.add("RecTracks", edm::InputTag("trackerDrivenElectronSeeds")); + desc.add("Fitter", "KFFittingSmoother"); + desc.add("ecalRecHitsEE", edm::InputTag("caloRecHits", "EcalRecHitsEE")); + desc.add("ecalRecHitsEB", edm::InputTag("caloRecHits", "EcalRecHitsEB")); + desc.addUntracked("process_RecTracks", false); + { + edm::ParameterSetDescription psd0; + psd0.setUnknown(); + desc.add("ParticleFilter", psd0); + } + desc.add("TTRHBuilder", "WithTrackAngle"); + desc.addUntracked("process_Particles", true); + desc.add("Propagator", "PropagatorWithMaterial"); + desc.add("sim", edm::InputTag("g4SimHits")); + desc.addUntracked("verbose", false); + descriptions.add("particleFlowSimParticle", desc); +} using namespace std; using namespace edm; @@ -92,11 +167,9 @@ PFSimParticleProducer::PFSimParticleProducer(const edm::ParameterSet& iConfig) { particleFilter_ = iConfig.getParameter("ParticleFilter"); - mySimEvent = new FSimEvent(particleFilter_); + mySimEvent = std::make_unique(particleFilter_); } -PFSimParticleProducer::~PFSimParticleProducer() { delete mySimEvent; } - void PFSimParticleProducer::produce(Event& iEvent, const EventSetup& iSetup) { // init Particle data table (from Pythia) edm::ESHandle pdt; @@ -118,21 +191,14 @@ void PFSimParticleProducer::produce(Event& iEvent, const EventSetup& iSetup) { //the PCAloHit from FastSim. typedef std::pair hitSimID; - typedef std::list >::iterator ITM; std::vector > caloHitsEBID(62000); std::vector caloHitsEBTotE(62000, 0.0); if (mctruthMatchingInfo_) { //getting the PCAloHit - edm::Handle pcalohits; - // bool found_phit - // = iEvent.getByLabel("fastSimProducer","EcalHitsEB", - // pcalohits); - //modif-beg - bool found_phit = iEvent.getByToken(tokenFastSimProducer_, pcalohits); - //modif-end - - if (!found_phit) { + auto pcalohits = iEvent.getHandle(tokenFastSimProducer_); + + if (!pcalohits) { ostringstream err; err << "could not find pcaloHit " << "fastSimProducer:EcalHitsEB"; @@ -246,8 +312,8 @@ void PFSimParticleProducer::produce(Event& iEvent, const EventSetup& iSetup) { unsigned rhit_hi = EBDetId(it_rh->id()).hashedIndex(); EBDetId detid(it_rh->id()); - ITM it_phit = caloHitsEBID[rhit_hi].begin(); - ITM itend_phit = caloHitsEBID[rhit_hi].end(); + auto it_phit = caloHitsEBID[rhit_hi].begin(); + auto itend_phit = caloHitsEBID[rhit_hi].end(); for (; it_phit != itend_phit; ++it_phit) { if (i == it_phit->second) { //Alex (08/10/08) TO BE REMOVED, eliminating diff --git a/RecoParticleFlow/PFSimProducer/plugins/PFSimParticleProducer.h b/RecoParticleFlow/PFSimProducer/plugins/PFSimParticleProducer.h deleted file mode 100644 index dad3a8493f69b..0000000000000 --- a/RecoParticleFlow/PFSimProducer/plugins/PFSimParticleProducer.h +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef RecoParticleFlow_PFProducer_PFSimParticleProducer_h_ -#define RecoParticleFlow_PFProducer_PFSimParticleProducer_h_ - -// system include files -#include -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Utilities/interface/EDGetToken.h" - -#include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" -#include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h" -#include "TrackingTools/GeomPropagators/interface/Propagator.h" -#include "RecoParticleFlow/PFTracking/interface/PFGeometry.h" -#include "DataFormats/ParticleFlowReco/interface/PFSimParticle.h" -#include "DataFormats/ParticleFlowReco/interface/PFSimParticleFwd.h" -#include "SimDataFormats/Track/interface/SimTrack.h" -#include "DataFormats/ParticleFlowReco/interface/PFRecTrackFwd.h" -#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" -#include "FastSimulation/Event/interface/FSimVertex.h" - -#include "RecoParticleFlow/PFProducer/interface/PFBlockAlgo.h" - -/**\class PFSimParticleProducer -\brief Producer for PFRecTracks and PFSimParticles - -\todo Remove the PFRecTrack part, which is now handled by PFTracking -\author Colin Bernet -\date April 2007 -*/ - -class FSimEvent; - -class PFSimParticleProducer : public edm::stream::EDProducer<> { -public: - explicit PFSimParticleProducer(const edm::ParameterSet&); - - ~PFSimParticleProducer() override; - - void produce(edm::Event&, const edm::EventSetup&) override; - - typedef edm::Handle TrackHandle; - void getSimIDs(const TrackHandle& trackh, std::vector& recTrackSimID); - -private: - /// module label for retrieving input simtrack and simvertex - edm::InputTag inputTagSim_; - edm::EDGetTokenT > tokenSim_; - edm::EDGetTokenT > tokenSimVertices_; - - //MC Truth Matching - //modif-beg - bool mctruthMatchingInfo_; - edm::InputTag inputTagFastSimProducer_; - edm::EDGetTokenT tokenFastSimProducer_; - //modif-end - - edm::InputTag inputTagRecTracks_; - edm::EDGetTokenT tokenRecTracks_; - edm::InputTag inputTagEcalRecHitsEB_; - edm::EDGetTokenT tokenEcalRecHitsEB_; - edm::InputTag inputTagEcalRecHitsEE_; - edm::EDGetTokenT tokenEcalRecHitsEE_; - - // parameters for retrieving true particles information -- - - edm::ParameterSet particleFilter_; - FSimEvent* mySimEvent; - - // flags for the various tasks --------------------------- - - /// process particles on/off - bool processParticles_; - - /// verbose ? - bool verbose_; -}; - -#endif diff --git a/RecoParticleFlow/PFSimProducer/plugins/ResolutionModel.h b/RecoParticleFlow/PFSimProducer/plugins/ResolutionModel.h deleted file mode 100644 index 101507a844f68..0000000000000 --- a/RecoParticleFlow/PFSimProducer/plugins/ResolutionModel.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __RecoFTL_FastTimingKludge_ResolutionModel_h__ -#define __RecoFTL_FastTimingKludge_ResolutionModel_h__ - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" - -#include -#include - -class ResolutionModel { - public: - ResolutionModel(const edm::ParameterSet& conf): - _modelName(conf.getParameter("modelName")) { - } - virtual ~ResolutionModel() { } - // get rid of things we should never use... - ResolutionModel(const ResolutionModel&) = delete; - ResolutionModel& operator=(const ResolutionModel&) = delete; - - virtual float getTimeResolution(const reco::Track&) const { return -1.f; } - virtual float getTimeResolution(const reco::PFCluster&) const { return -1.f; } - - const std::string& name() const { return _modelName; } - - private: - const std::string _modelName; -}; - -#include "FWCore/PluginManager/interface/PluginFactory.h" -typedef edmplugin::PluginFactory< ResolutionModel* (const edm::ParameterSet&) > ResolutionModelFactory; - -#endif diff --git a/RecoParticleFlow/PFSimProducer/plugins/SealModuleSim.cc b/RecoParticleFlow/PFSimProducer/plugins/SealModuleSim.cc deleted file mode 100644 index 8967e9229a10b..0000000000000 --- a/RecoParticleFlow/PFSimProducer/plugins/SealModuleSim.cc +++ /dev/null @@ -1,11 +0,0 @@ - -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESProducer.h" -#include "FWCore/Framework/interface/ModuleFactory.h" -#include "FWCore/Utilities/interface/typelookup.h" - -#include "RecoParticleFlow/PFSimProducer/plugins/PFSimParticleProducer.h" -#include "RecoParticleFlow/PFSimProducer/plugins/TauHadronDecayFilter.h" - -DEFINE_FWK_MODULE(PFSimParticleProducer); -DEFINE_FWK_MODULE(TauHadronDecayFilter); diff --git a/RecoParticleFlow/PFSimProducer/plugins/SimPFProducer.cc b/RecoParticleFlow/PFSimProducer/plugins/SimPFProducer.cc index d89126779e327..bc73c145939de 100644 --- a/RecoParticleFlow/PFSimProducer/plugins/SimPFProducer.cc +++ b/RecoParticleFlow/PFSimProducer/plugins/SimPFProducer.cc @@ -2,63 +2,51 @@ // The times are produced as valuemaps associated to tracks, so the track dataformat doesn't // need to be modified. -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/global/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" - +#include "CLHEP/Units/SystemOfUnits.h" #include "DataFormats/Common/interface/ValueMap.h" #include "DataFormats/Common/interface/View.h" - -#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" - -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" #include "DataFormats/GsfTrackReco/interface/GsfTrack.h" #include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" +#include "DataFormats/MuonReco/interface/Muon.h" +#include "DataFormats/MuonReco/interface/MuonFwd.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" +#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlock.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlockElementCluster.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlockFwd.h" +#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/isFinite.h" +#include "FWCore/Utilities/interface/transform.h" +#include "SimDataFormats/Associations/interface/TrackToTrackingParticleAssociator.h" +#include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h" +#include "SimDataFormats/CaloAnalysis/interface/CaloParticleFwd.h" +#include "SimDataFormats/CaloAnalysis/interface/SimCluster.h" +#include "SimDataFormats/CaloAnalysis/interface/SimClusterFwd.h" #include "SimDataFormats/Track/interface/SimTrackContainer.h" -#include "SimDataFormats/Vertex/interface/SimVertexContainer.h" -#include "SimTracker/TrackerHitAssociation/interface/TrackerHitAssociator.h" #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertex.h" #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h" - -#include "DataFormats/MuonReco/interface/MuonFwd.h" -#include "DataFormats/MuonReco/interface/Muon.h" - -#include "SimDataFormats/CaloAnalysis/interface/SimClusterFwd.h" -#include "SimDataFormats/CaloAnalysis/interface/SimCluster.h" - -#include "SimDataFormats/CaloAnalysis/interface/CaloParticleFwd.h" -#include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h" - -#include "SimDataFormats/Associations/interface/TrackToTrackingParticleAssociator.h" - -#include "DataFormats/ParticleFlowReco/interface/PFBlockElementCluster.h" - -#include "DataFormats/ParticleFlowReco/interface/PFBlockFwd.h" -#include "DataFormats/ParticleFlowReco/interface/PFBlock.h" - -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "SimDataFormats/Vertex/interface/SimVertexContainer.h" +#include "SimTracker/TrackerHitAssociation/interface/TrackerHitAssociator.h" #include #include -#include "CLHEP/Units/SystemOfUnits.h" -#include "FWCore/Utilities/interface/isFinite.h" - -#include "FWCore/Utilities/interface/transform.h" - class SimPFProducer : public edm::global::EDProducer<> { public: SimPFProducer(const edm::ParameterSet&); - ~SimPFProducer() override {} + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; @@ -84,8 +72,40 @@ class SimPFProducer : public edm::global::EDProducer<> { const std::vector> associators_; }; +#include "FWCore/Framework/interface/MakerMacros.h" DEFINE_FWK_MODULE(SimPFProducer); +void SimPFProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + // simPFProducer + edm::ParameterSetDescription desc; + desc.add("simClustersSrc", {"particleFlowClusterHGCal"}); + desc.add("trackSrc", {"generalTracks"}); + desc.add>("associators", + { + {"quickTrackAssociatorByHits"}, + }); + desc.add("pfRecTrackSrc", {"hgcalTrackCollection", "TracksInHGCal"}); + desc.add("trackingParticleSrc", {"mix", "MergedTrackTruth"}); + desc.add("neutralEMThreshold", 0.25); + desc.add("caloParticlesSrc", {"mix", "MergedCaloTruth"}); + desc.add("superClusterThreshold", 4.0); + desc.add("simClusterTruthSrc", {"mix", "MergedCaloTruth"}); + desc.add("muonSrc", {"muons1stStep"}); + desc.add("neutralHADThreshold", 0.25); + desc.add("gsfTrackSrc", {"electronGsfTracks"}); + + // if useTiming_ + desc.addOptional("trackTimeValueMap"); + desc.addOptional("trackTimeErrorMap"); + desc.addOptional("trackTimeQualityMap"); + desc.addOptional("timingQualityThreshold"); + desc.addOptional("gsfTrackTimeValueMap"); + desc.addOptional("gsfTrackTimeErrorMap"); + desc.addOptional("gsfTrackTimeQualityMap"); + + descriptions.add("simPFProducer", desc); +} + namespace { template diff --git a/RecoParticleFlow/PFSimProducer/plugins/TauHadronDecayFilter.cc b/RecoParticleFlow/PFSimProducer/plugins/TauHadronDecayFilter.cc index 7ba550e30913b..eaceb3be8015b 100644 --- a/RecoParticleFlow/PFSimProducer/plugins/TauHadronDecayFilter.cc +++ b/RecoParticleFlow/PFSimProducer/plugins/TauHadronDecayFilter.cc @@ -1,27 +1,66 @@ -// system include files -#include -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -// #include "FWCore/Framework/interface/EDFilter.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" +// -*- C++ -*- +// +// Package: TauHadronDecayFilter +// Class: TauHadronDecayFilter +// +/**\class TauHadronDecayFilter + + Description: filters single tau events with a tau decaying hadronically +*/ +// +// Original Author: Colin BERNET +// Created: Mon Nov 13 11:06:39 CET 2006 +// +// + +#include "FWCore/Framework/interface/EDFilter.h" #include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" - +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "RecoParticleFlow/PFSimProducer/plugins/TauHadronDecayFilter.h" - +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FastSimulation/Event/interface/FSimEvent.h" #include "FastSimulation/Event/interface/FSimTrack.h" #include "FastSimulation/Event/interface/FSimVertex.h" - #include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include +#include + +class TauHadronDecayFilter : public edm::EDFilter { +public: + explicit TauHadronDecayFilter(const edm::ParameterSet&); + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void beginRun(const edm::Run&, const edm::EventSetup&) override; + bool filter(edm::Event&, const edm::EventSetup&) override; + + // ----------member data --------------------------- + edm::ParameterSet particleFilter_; + std::unique_ptr mySimEvent; +}; + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(TauHadronDecayFilter); + +void TauHadronDecayFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + // tauHadronDecayFilter + edm::ParameterSetDescription desc; + desc.add("particles", edm::InputTag("particleFlowBlock")); + { + edm::ParameterSetDescription psd0; + psd0.add("etaMax", 10.0); + psd0.add("pTMin", 0.0); + psd0.add("EMin", 0.0); + desc.add("ParticleFilter", psd0); + } + descriptions.add("tauHadronDecayFilter", desc); +} using namespace edm; using namespace std; @@ -31,13 +70,7 @@ TauHadronDecayFilter::TauHadronDecayFilter(const edm::ParameterSet& iConfig) { particleFilter_ = iConfig.getParameter("ParticleFilter"); - mySimEvent = new FSimEvent(particleFilter_); -} - -TauHadronDecayFilter::~TauHadronDecayFilter() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) - delete mySimEvent; + mySimEvent = std::make_unique(particleFilter_); } bool TauHadronDecayFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) { diff --git a/RecoParticleFlow/PFSimProducer/plugins/TauHadronDecayFilter.h b/RecoParticleFlow/PFSimProducer/plugins/TauHadronDecayFilter.h deleted file mode 100644 index 63a43e4ad2bb7..0000000000000 --- a/RecoParticleFlow/PFSimProducer/plugins/TauHadronDecayFilter.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef RecoParticleFlow_PFProducer_TauHadronDecayFilter_h_ -#define RecoParticleFlow_PFProducer_TauHadronDecayFilter_h_ - -#include "FWCore/Framework/interface/EDFilter.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -// -*- C++ -*- -// -// Package: TauHadronDecayFilter -// Class: TauHadronDecayFilter -// -/**\class TauHadronDecayFilter - - Description: filters single tau events with a tau decaying hadronically -*/ -// -// Original Author: Colin BERNET -// Created: Mon Nov 13 11:06:39 CET 2006 -// -// - -// -// class declaration -// - -class FSimEvent; - -class TauHadronDecayFilter : public edm::EDFilter { -public: - explicit TauHadronDecayFilter(const edm::ParameterSet&); - ~TauHadronDecayFilter() override; - -private: - void beginRun(const edm::Run&, const edm::EventSetup&) override; - bool filter(edm::Event&, const edm::EventSetup&) override; - - // ----------member data --------------------------- - edm::ParameterSet particleFilter_; - FSimEvent* mySimEvent; -}; - -#endif diff --git a/RecoParticleFlow/PFSimProducer/plugins/modulesSim.cc b/RecoParticleFlow/PFSimProducer/plugins/modulesSim.cc deleted file mode 100644 index 6282a721a44de..0000000000000 --- a/RecoParticleFlow/PFSimProducer/plugins/modulesSim.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "FWCore/Framework/interface/MakerMacros.h" -#include "RecoParticleFlow/PFSimProducer/plugins/ConvBremSeedProducer.h" - -DEFINE_FWK_MODULE(ConvBremSeedProducer); diff --git a/RecoParticleFlow/PFSimProducer/python/ecalBarrelClusterFastTimer_cfi.py b/RecoParticleFlow/PFSimProducer/python/ecalBarrelClusterFastTimer_cfi.py deleted file mode 100644 index 19132eb4f440d..0000000000000 --- a/RecoParticleFlow/PFSimProducer/python/ecalBarrelClusterFastTimer_cfi.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -ecalBarrelClusterFastTimer = cms.EDProducer( - 'EcalBarrelClusterFastTimer', - ebTimeHits = cms.InputTag('ecalDetailedTimeRecHit:EcalRecHitsEB'), - ebClusters = cms.InputTag('particleFlowClusterECALUncorrected'), - timedVertices = cms.InputTag('offlinePrimaryVertices4D'), - minFractionToConsider = cms.double(0.1), - minEnergyToConsider = cms.double(0.0), - ecalDepth = cms.double(7.0), - resolutionModels = cms.VPSet( cms.PSet( modelName = cms.string('PerfectResolutionModel') ) ) - ) diff --git a/RecoParticleFlow/PFTracking/BuildFile.xml b/RecoParticleFlow/PFTracking/BuildFile.xml index 7b3cc6e16fa1c..ce501d63482b8 100644 --- a/RecoParticleFlow/PFTracking/BuildFile.xml +++ b/RecoParticleFlow/PFTracking/BuildFile.xml @@ -25,7 +25,7 @@ - + diff --git a/RecoParticleFlow/PFTracking/interface/ConvBremHeavyObjectCache.h b/RecoParticleFlow/PFTracking/interface/ConvBremHeavyObjectCache.h index 1e12ffc4f2e91..7741ae9d9f5c5 100644 --- a/RecoParticleFlow/PFTracking/interface/ConvBremHeavyObjectCache.h +++ b/RecoParticleFlow/PFTracking/interface/ConvBremHeavyObjectCache.h @@ -2,7 +2,7 @@ #define __RecoParticleFlow_PFTracking_convbremhelpersHeavyObjectCache_h__ #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "RecoParticleFlow/PFClusterTools/interface/PFEnergyCalibration.h" #include diff --git a/RecoParticleFlow/PFTracking/interface/ConvBremPFTrackFinder.h b/RecoParticleFlow/PFTracking/interface/ConvBremPFTrackFinder.h index d66e6cb7fd271..1bea2afed2645 100644 --- a/RecoParticleFlow/PFTracking/interface/ConvBremPFTrackFinder.h +++ b/RecoParticleFlow/PFTracking/interface/ConvBremPFTrackFinder.h @@ -22,7 +22,7 @@ #include "DataFormats/ParticleFlowReco/interface/PFV0.h" #include "TMVA/Reader.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include #include "RecoParticleFlow/PFTracking/interface/ConvBremHeavyObjectCache.h" diff --git a/RecoParticleFlow/PFTracking/interface/PFTrackAlgoTools.h b/RecoParticleFlow/PFTracking/interface/PFTrackAlgoTools.h index 68310333742f6..de2204896b0cf 100644 --- a/RecoParticleFlow/PFTracking/interface/PFTrackAlgoTools.h +++ b/RecoParticleFlow/PFTracking/interface/PFTrackAlgoTools.h @@ -18,6 +18,5 @@ namespace PFTrackAlgoTools { const std::vector& DPtovPtCut, const std::vector& NHitCut, bool useIterTracking, - //const reco::TrackBase::TrackQuality trackQuality = reco::TrackBase::highPurity, const reco::TrackBase::TrackQuality trackQuality); } // namespace PFTrackAlgoTools diff --git a/RecoParticleFlow/PFTracking/plugins/GoodSeedProducer.cc b/RecoParticleFlow/PFTracking/plugins/GoodSeedProducer.cc index febe67147f743..564d415494ec3 100644 --- a/RecoParticleFlow/PFTracking/plugins/GoodSeedProducer.cc +++ b/RecoParticleFlow/PFTracking/plugins/GoodSeedProducer.cc @@ -21,7 +21,7 @@ #include "CommonTools/BaseParticlePropagator/interface/BaseParticlePropagator.h" #include "CommonTools/MVAUtils/interface/GBRForestTools.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "DataFormats/Common/interface/ValueMap.h" #include "DataFormats/EgammaReco/interface/ElectronSeed.h" #include "DataFormats/Math/interface/deltaR.h" @@ -345,6 +345,10 @@ void GoodSeedProducer::produce(Event& iEvent, const EventSetup& iSetup) { auto tketa = tkmom.eta(); auto tkpt = std::sqrt(tkmom.perp2()); auto const& Seed = (*trackRef->seedRef()); + if (Seed.nHits() == 0) { //if DeepCore is used in jetCore iteration the seed are hitless, in case skip + continue; + } + if (!disablePreId_) { int ipteta = getBin(Tk[i].eta(), Tk[i].pt()); int ibin = ipteta * 9; diff --git a/RecoParticleFlow/PFTracking/python/convBremSeeds_cfi.py b/RecoParticleFlow/PFTracking/python/convBremSeeds_cfi.py deleted file mode 100644 index 7e22fdb981be9..0000000000000 --- a/RecoParticleFlow/PFTracking/python/convBremSeeds_cfi.py +++ /dev/null @@ -1,18 +0,0 @@ -import FWCore.ParameterSet.Config as cms - - - -convBremSeeds =cms.EDFilter( - "ConvBremSeedProducer", - - TTRHBuilder = cms.string('WithTrackAngle'), - PFClusters = cms.InputTag("particleFlowClusterECAL"), - pixelRecHits = cms.InputTag("gsPixelRecHits"), - rphirecHits = cms.InputTag("gsStripRecHits","rphiRecHit"), - matchedrecHits = cms.InputTag("gsStripRecHits","matchedRecHit"), - stereorecHits = cms.InputTag("gsStripRecHits","stereoRecHit"), - PFRecTrackLabel = cms.InputTag("pfTrackElec") - ) - - - diff --git a/RecoParticleFlow/PFTracking/python/particleFlowDisplacedVertexCandidate_cff.py b/RecoParticleFlow/PFTracking/python/particleFlowDisplacedVertexCandidate_cff.py index 2ba52a1e83e5a..864e1e559e44b 100644 --- a/RecoParticleFlow/PFTracking/python/particleFlowDisplacedVertexCandidate_cff.py +++ b/RecoParticleFlow/PFTracking/python/particleFlowDisplacedVertexCandidate_cff.py @@ -1,8 +1,3 @@ import FWCore.ParameterSet.Config as cms from RecoParticleFlow.PFTracking.particleFlowDisplacedVertexCandidate_cfi import * - -from FWCore.MessageLogger.MessageLogger_cfi import * -MessageLogger.suppressWarning.extend(cms.untracked.vstring("particleFlowDisplacedVertexCandidate")); - - diff --git a/RecoParticleFlow/PFTracking/python/particleFlowDisplacedVertex_cff.py b/RecoParticleFlow/PFTracking/python/particleFlowDisplacedVertex_cff.py index 182485351a0b5..a55bf6c08ab19 100644 --- a/RecoParticleFlow/PFTracking/python/particleFlowDisplacedVertex_cff.py +++ b/RecoParticleFlow/PFTracking/python/particleFlowDisplacedVertex_cff.py @@ -1,7 +1,3 @@ import FWCore.ParameterSet.Config as cms from RecoParticleFlow.PFTracking.particleFlowDisplacedVertex_cfi import * - -from FWCore.MessageLogger.MessageLogger_cfi import * -#MessageLogger.suppressWarning = cms.untracked.vstring("particleFlowDisplacedVertexCandidate", "particleFlowDisplacedVertex"); -#MessageLogger.suppressWarning.extend(cms.untracked.vstring("particleFlowDisplacedVertex")); diff --git a/RecoParticleFlow/PFTracking/python/trackerDrivenElectronSeeds_cfi.py b/RecoParticleFlow/PFTracking/python/trackerDrivenElectronSeeds_cfi.py index c1657934f9f94..cdb6bdbf4357a 100644 --- a/RecoParticleFlow/PFTracking/python/trackerDrivenElectronSeeds_cfi.py +++ b/RecoParticleFlow/PFTracking/python/trackerDrivenElectronSeeds_cfi.py @@ -68,3 +68,4 @@ from Configuration.ProcessModifiers.egamma_lowPt_exclusive_cff import egamma_lowPt_exclusive egamma_lowPt_exclusive.toModify(trackerDrivenElectronSeeds,MinPt = 1.0) + diff --git a/RecoPixelVertexing/PixelLowPtUtilities/BuildFile.xml b/RecoPixelVertexing/PixelLowPtUtilities/BuildFile.xml index 2f8a06d1a81ce..75cc3e70c5ed7 100644 --- a/RecoPixelVertexing/PixelLowPtUtilities/BuildFile.xml +++ b/RecoPixelVertexing/PixelLowPtUtilities/BuildFile.xml @@ -1,17 +1,19 @@ + + + - - + - + + - - + diff --git a/RecoPixelVertexing/PixelLowPtUtilities/bin/PixelClusterShapeExtractor.cc b/RecoPixelVertexing/PixelLowPtUtilities/bin/PixelClusterShapeExtractor.cc index 4a71ff6428798..1ebfd5a365ea6 100644 --- a/RecoPixelVertexing/PixelLowPtUtilities/bin/PixelClusterShapeExtractor.cc +++ b/RecoPixelVertexing/PixelLowPtUtilities/bin/PixelClusterShapeExtractor.cc @@ -91,6 +91,10 @@ class PixelClusterShapeExtractor final : public edm::global::EDAnalyzer<> { void analyzeSimHits(const edm::Event& ev, const edm::EventSetup& es) const; void analyzeRecTracks(const edm::Event& ev, const edm::EventSetup& es) const; + /// Tokens for ESconsumes + const edm::ESGetToken topoToken_; + const edm::ESGetToken csfToken_; + TFile* file; const bool hasSimHits; @@ -143,7 +147,9 @@ void PixelClusterShapeExtractor::init() { /*****************************************************************************/ PixelClusterShapeExtractor::PixelClusterShapeExtractor(const edm::ParameterSet& pset) - : hasSimHits(pset.getParameter("hasSimHits")), + : topoToken_(esConsumes()), + csfToken_(esConsumes(edm::ESInputTag("", "ClusterShapeHitFilter"))), + hasSimHits(pset.getParameter("hasSimHits")), hasRecTracks(pset.getParameter("hasRecTracks")), noBPIX1(pset.getParameter("noBPIX1")), tracks_token(hasRecTracks ? consumes(pset.getParameter("tracks")) @@ -300,13 +306,8 @@ void PixelClusterShapeExtractor::processPixelRecHits(const SiPixelRecHitCollecti /*****************************************************************************/ void PixelClusterShapeExtractor::analyzeSimHits(const edm::Event& ev, const edm::EventSetup& es) const { - edm::ESHandle shape; - es.get().get("ClusterShapeHitFilter", shape); - auto const& theClusterShape = *shape.product(); - - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - auto const& tkTpl = *tTopoHandle; + auto const& theClusterShape = es.getData(csfToken_); + auto const& tkTpl = es.getData(topoToken_); edm::Handle clusterShapeCache; ev.getByToken(clusterShapeCache_token, clusterShapeCache); @@ -329,13 +330,8 @@ void PixelClusterShapeExtractor::analyzeSimHits(const edm::Event& ev, const edm: /*****************************************************************************/ void PixelClusterShapeExtractor::analyzeRecTracks(const edm::Event& ev, const edm::EventSetup& es) const { - edm::ESHandle shape; - es.get().get("ClusterShapeHitFilter", shape); - auto const& theClusterShape = *shape.product(); - - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - auto const& tkTpl = *tTopoHandle; + auto const& theClusterShape = es.getData(csfToken_); + auto const& tkTpl = es.getData(topoToken_); // Get tracks edm::Handle tracks; diff --git a/RecoPixelVertexing/PixelLowPtUtilities/interface/PixelTripletLowPtGenerator.h b/RecoPixelVertexing/PixelLowPtUtilities/interface/PixelTripletLowPtGenerator.h index 96f654937295e..1793db0b5129f 100644 --- a/RecoPixelVertexing/PixelLowPtUtilities/interface/PixelTripletLowPtGenerator.h +++ b/RecoPixelVertexing/PixelLowPtUtilities/interface/PixelTripletLowPtGenerator.h @@ -7,6 +7,11 @@ provided Layers */ +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" + #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/EDGetToken.h" @@ -41,6 +46,9 @@ class PixelTripletLowPtGenerator : public HitTripletGeneratorFromPairAndLayers { const int nThirdLayers) override; private: + edm::ESGetToken m_geomToken; + edm::ESGetToken m_topoToken; + void getTracker(const edm::EventSetup& es); GlobalPoint getGlobalPosition(const TrackingRecHit* recHit); diff --git a/RecoPixelVertexing/PixelLowPtUtilities/interface/StripSubClusterShapeTrajectoryFilter.h b/RecoPixelVertexing/PixelLowPtUtilities/interface/StripSubClusterShapeTrajectoryFilter.h index 17c154b8b10d4..fcd1e71e14970 100644 --- a/RecoPixelVertexing/PixelLowPtUtilities/interface/StripSubClusterShapeTrajectoryFilter.h +++ b/RecoPixelVertexing/PixelLowPtUtilities/interface/StripSubClusterShapeTrajectoryFilter.h @@ -9,6 +9,8 @@ #include "FWCore/Utilities/interface/EDGetToken.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "RecoTracker/TkSeedingLayers/interface/SeedComparitor.h" +#include "CondFormats/SiStripObjects/interface/SiStripNoises.h" +#include "CondFormats/DataRecord/interface/SiStripNoisesRcd.h" class ClusterShapeHitFilter; class TrackerTopology; @@ -40,6 +42,12 @@ class StripSubClusterShapeFilterBase { const GlobalVector &gdir, bool mustProject = false) const; + // esConsumes tokens + edm::ESGetToken topoToken_; + edm::ESGetToken csfToken_; + edm::ESGetToken geomToken_; + edm::ESGetToken stripNoiseToken_; + // who am i std::string label_; diff --git a/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerClusters.cc b/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerClusters.cc index 22dced0f36975..78f66a1d4c1d8 100644 --- a/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerClusters.cc +++ b/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerClusters.cc @@ -11,15 +11,12 @@ #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" + #include "Geometry/CommonDetUnit/interface/GeomDet.h" #include "DataFormats/GeometryVector/interface/LocalPoint.h" #include "DataFormats/GeometryVector/interface/GlobalPoint.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" - #include "SimDataFormats/Vertex/interface/SimVertexContainer.h" #include @@ -56,7 +53,7 @@ namespace { /*****************************************************************************/ PixelVertexProducerClusters::PixelVertexProducerClusters(const edm::ParameterSet& ps) - : pixelToken_(consumes(edm::InputTag("siPixelRecHits"))) { + : geomToken_(esConsumes()), pixelToken_(consumes(edm::InputTag("siPixelRecHits"))) { // Product produces(); } @@ -66,14 +63,8 @@ PixelVertexProducerClusters::~PixelVertexProducerClusters() {} /*****************************************************************************/ void PixelVertexProducerClusters::produce(edm::StreamID, edm::Event& ev, const edm::EventSetup& es) const { - //Retrieve tracker topology from geometry - edm::ESHandle tTopo; - es.get().get(tTopo); - // Get tracker geometry - edm::ESHandle trackerHandle; - es.get().get(trackerHandle); - const TrackerGeometry* theTracker = trackerHandle.product(); + const TrackerGeometry* theTracker = &es.getData(geomToken_); // Get pixel hit collections edm::Handle pixelColl; diff --git a/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerClusters.h b/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerClusters.h index 6515d65d04494..b0124c9223723 100644 --- a/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerClusters.h +++ b/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerClusters.h @@ -1,9 +1,10 @@ #ifndef PixelVertexProducerClusters_H #define PixelVertexProducerClusters_H +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" - #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h" namespace edm { @@ -21,6 +22,7 @@ class PixelVertexProducerClusters : public edm::global::EDProducer<> { void produce(edm::StreamID, edm::Event& ev, const edm::EventSetup& es) const override; private: + const edm::ESGetToken geomToken_; edm::EDGetTokenT pixelToken_; }; #endif diff --git a/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerMedian.cc b/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerMedian.cc index 54ee5d283606d..dd6f21b6da70e 100644 --- a/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerMedian.cc +++ b/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerMedian.cc @@ -27,6 +27,7 @@ struct ComparePairs { /*****************************************************************************/ PixelVertexProducerMedian::PixelVertexProducerMedian(const edm::ParameterSet& ps) : theConfig(ps) { + thePtMin = theConfig.getParameter("PtMin"); produces(); } @@ -34,15 +35,13 @@ PixelVertexProducerMedian::PixelVertexProducerMedian(const edm::ParameterSet& ps PixelVertexProducerMedian::~PixelVertexProducerMedian() {} /*****************************************************************************/ -void PixelVertexProducerMedian::produce(edm::Event& ev, const edm::EventSetup& es) { +void PixelVertexProducerMedian::produce(edm::StreamID, edm::Event& ev, const edm::EventSetup& es) const { // Get pixel tracks edm::Handle trackCollection; std::string trackCollectionName = theConfig.getParameter("TrackCollection"); ev.getByLabel(trackCollectionName, trackCollection); const reco::TrackCollection tracks_ = *(trackCollection.product()); - thePtMin = theConfig.getParameter("PtMin"); - // Select tracks std::vector tracks; for (unsigned int i = 0; i < tracks_.size(); i++) { diff --git a/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerMedian.h b/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerMedian.h index 3ab5228c079fe..1be2a44604a50 100644 --- a/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerMedian.h +++ b/RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerMedian.h @@ -1,7 +1,7 @@ #ifndef PixelVertexProducerMedian_H #define PixelVertexProducerMedian_H -#include "FWCore/Framework/interface/EDProducer.h" +#include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" namespace edm { @@ -9,11 +9,11 @@ namespace edm { class EventSetup; } // namespace edm -class PixelVertexProducerMedian : public edm::EDProducer { +class PixelVertexProducerMedian : public edm::global::EDProducer<> { public: explicit PixelVertexProducerMedian(const edm::ParameterSet& ps); ~PixelVertexProducerMedian() override; - void produce(edm::Event& ev, const edm::EventSetup& es) override; + void produce(edm::StreamID, edm::Event& ev, const edm::EventSetup& es) const override; private: edm::ParameterSet theConfig; diff --git a/RecoPixelVertexing/PixelLowPtUtilities/plugins/SiPixelClusterShapeCacheProducer.cc b/RecoPixelVertexing/PixelLowPtUtilities/plugins/SiPixelClusterShapeCacheProducer.cc index 373636d129ab5..dba9894b23c72 100644 --- a/RecoPixelVertexing/PixelLowPtUtilities/plugins/SiPixelClusterShapeCacheProducer.cc +++ b/RecoPixelVertexing/PixelLowPtUtilities/plugins/SiPixelClusterShapeCacheProducer.cc @@ -36,10 +36,11 @@ class SiPixelClusterShapeCacheProducer : public edm::global::EDProducer<> { using InputCollection = edmNew::DetSetVector; const edm::EDGetTokenT token_; + const edm::ESGetToken geomToken_; }; SiPixelClusterShapeCacheProducer::SiPixelClusterShapeCacheProducer(const edm::ParameterSet& iConfig) - : token_(consumes(iConfig.getParameter("src"))) { + : token_(consumes(iConfig.getParameter("src"))), geomToken_(esConsumes()) { if (iConfig.getParameter("onDemand")) { throw cms::Exception("OnDemandNotAllowed") << "Use of the `onDemand` feature of SiPixelClusterShapeCacheProducer is no longer supported"; @@ -60,8 +61,7 @@ void SiPixelClusterShapeCacheProducer::produce(edm::StreamID, edm::Event& iEvent edm::Handle input; iEvent.getByToken(token_, input); - edm::ESHandle geom; - iSetup.get().get(geom); + const auto& geom = &iSetup.getData(geomToken_); auto output = std::make_unique(input); output->resize(input->data().size()); diff --git a/RecoPixelVertexing/PixelLowPtUtilities/plugins/TrackFitterProducer.cc b/RecoPixelVertexing/PixelLowPtUtilities/plugins/TrackFitterProducer.cc index 5a240083547cd..73d61351507da 100644 --- a/RecoPixelVertexing/PixelLowPtUtilities/plugins/TrackFitterProducer.cc +++ b/RecoPixelVertexing/PixelLowPtUtilities/plugins/TrackFitterProducer.cc @@ -30,12 +30,16 @@ class TrackFitterProducer : public edm::global::EDProducer<> { private: void produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const override; - std::string theTTRHBuilderName; + const edm::ESGetToken geomToken_; + const edm::ESGetToken magFieldToken_; + const edm::ESGetToken ttrhToken_; edm::EDGetTokenT theBeamSpotToken; }; TrackFitterProducer::TrackFitterProducer(const edm::ParameterSet& iConfig) - : theTTRHBuilderName(iConfig.getParameter("TTRHBuilder")) { + : geomToken_(esConsumes()), + magFieldToken_(esConsumes()), + ttrhToken_(esConsumes(edm::ESInputTag("", iConfig.getParameter("TTRHBuilder")))) { produces(); } @@ -48,16 +52,11 @@ void TrackFitterProducer::fillDescriptions(edm::ConfigurationDescriptions& descr } void TrackFitterProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { - edm::ESHandle trackerESH; - iSetup.get().get(trackerESH); + const auto& tracker = &iSetup.getData(geomToken_); + const auto& field = &iSetup.getData(magFieldToken_); + const auto& ttrh = &iSetup.getData(ttrhToken_); - edm::ESHandle fieldESH; - iSetup.get().get(fieldESH); - - edm::ESHandle ttrhbESH; - iSetup.get().get(theTTRHBuilderName, ttrhbESH); - - auto impl = std::make_unique(trackerESH.product(), fieldESH.product(), ttrhbESH.product()); + auto impl = std::make_unique(tracker, field, ttrh); auto prod = std::make_unique(std::move(impl)); iEvent.put(std::move(prod)); } diff --git a/RecoPixelVertexing/PixelLowPtUtilities/python/AllPixelTracks_cfi.py b/RecoPixelVertexing/PixelLowPtUtilities/python/AllPixelTracks_cfi.py index 1791dbcda6d2a..37867549f0cc6 100644 --- a/RecoPixelVertexing/PixelLowPtUtilities/python/AllPixelTracks_cfi.py +++ b/RecoPixelVertexing/PixelLowPtUtilities/python/AllPixelTracks_cfi.py @@ -58,8 +58,9 @@ TTRHBuilder = 'TTRHBuilderWithoutAngle4PixelTriplets' ) -allPixelTracksSequence = cms.Sequence( - allPixelTracksFitter + - clusterShapeTrackFilter + +allPixelTracksTask = cms.Task( + allPixelTracksFitter, + clusterShapeTrackFilter, allPixelTracks ) +allPixelTracksSequence = cms.Sequence(allPixelTracksTask) diff --git a/RecoPixelVertexing/PixelLowPtUtilities/src/PixelTripletLowPtGenerator.cc b/RecoPixelVertexing/PixelLowPtUtilities/src/PixelTripletLowPtGenerator.cc index 0c499fad958a2..f5bf4ed86d4d9 100644 --- a/RecoPixelVertexing/PixelLowPtUtilities/src/PixelTripletLowPtGenerator.cc +++ b/RecoPixelVertexing/PixelLowPtUtilities/src/PixelTripletLowPtGenerator.cc @@ -6,14 +6,9 @@ #include "RecoTracker/TkMSParametrization/interface/PixelRecoPointRZ.h" #include "RecoTracker/TkHitPairs/interface/HitPairGeneratorFromLayerPair.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/ConsumesCollector.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" - #include "FWCore/Framework/interface/Event.h" #include "DataFormats/SiPixelCluster/interface/SiPixelClusterShapeCache.h" @@ -24,6 +19,8 @@ using namespace std; /*****************************************************************************/ PixelTripletLowPtGenerator::PixelTripletLowPtGenerator(const edm::ParameterSet& cfg, edm::ConsumesCollector& iC) : HitTripletGeneratorFromPairAndLayers(), // no theMaxElement used in this class + m_geomToken(iC.esConsumes()), + m_topoToken(iC.esConsumes()), theTracker(nullptr), theClusterShapeCacheToken( iC.consumes(cfg.getParameter("clusterShapeCacheSrc"))) { @@ -44,10 +41,7 @@ PixelTripletLowPtGenerator::~PixelTripletLowPtGenerator() {} void PixelTripletLowPtGenerator::getTracker(const edm::EventSetup& es) { if (theTracker == nullptr) { // Get tracker geometry - edm::ESHandle tracker; - es.get().get(tracker); - - theTracker = tracker.product(); + theTracker = &es.getData(m_geomToken); } if (!theFilter) { @@ -70,9 +64,7 @@ void PixelTripletLowPtGenerator::hitTriplets(const TrackingRegion& region, const SeedingLayerSetsHits::SeedingLayerSet& pairLayers, const std::vector& thirdLayers) { //Retrieve tracker topology from geometry - edm::ESHandle tTopoHand; - es.get().get(tTopoHand); - const TrackerTopology* tTopo = tTopoHand.product(); + const TrackerTopology* tTopo = &es.getData(m_topoToken); edm::Handle clusterShapeCache; ev.getByToken(theClusterShapeCacheToken, clusterShapeCache); diff --git a/RecoPixelVertexing/PixelLowPtUtilities/src/StripSubClusterShapeTrajectoryFilter.cc b/RecoPixelVertexing/PixelLowPtUtilities/src/StripSubClusterShapeTrajectoryFilter.cc index 2423dc6a880e1..a6bce194ce907 100644 --- a/RecoPixelVertexing/PixelLowPtUtilities/src/StripSubClusterShapeTrajectoryFilter.cc +++ b/RecoPixelVertexing/PixelLowPtUtilities/src/StripSubClusterShapeTrajectoryFilter.cc @@ -31,9 +31,6 @@ #include "RecoTracker/TkSeedingLayers/interface/SeedingHitSet.h" #include "DataFormats/SiStripDetId/interface/SiStripDetId.h" -#include "CondFormats/SiStripObjects/interface/SiStripNoises.h" -#include "CondFormats/DataRecord/interface/SiStripNoisesRcd.h" - #ifdef StripSubClusterShapeFilterBase_COUNTERS #define INC_COUNTER(X) X++; #else @@ -137,7 +134,12 @@ namespace { /*****************************************************************************/ StripSubClusterShapeFilterBase::StripSubClusterShapeFilterBase(const edm::ParameterSet &iCfg, edm::ConsumesCollector &iC) - : label_(iCfg.getUntrackedParameter("label", "")), + : topoToken_(iC.esConsumes()), + csfToken_( + iC.esConsumes(edm::ESInputTag("", "ClusterShapeHitFilter"))), + geomToken_(iC.esConsumes()), + stripNoiseToken_(iC.esConsumes()), + label_(iCfg.getUntrackedParameter("label", "")), maxNSat_(iCfg.getParameter("maxNSat")), trimMaxADC_(iCfg.getParameter("trimMaxADC")), trimMaxFracTotal_(iCfg.getParameter("trimMaxFracTotal")), @@ -322,14 +324,12 @@ bool StripSubClusterShapeFilterBase::testLastHit(const TrackingRecHit *hit, void StripSubClusterShapeFilterBase::setEventBase(const edm::Event &event, const edm::EventSetup &es) { // Get tracker geometry - es.get().get(theTracker); - - es.get().get("ClusterShapeHitFilter", theFilter); + theTracker = es.getHandle(geomToken_); + theFilter = es.getHandle(csfToken_); //Retrieve tracker topology from geometry - es.get().get(theTopology); - - es.get().get(theNoise); + theTopology = es.getHandle(topoToken_); + theNoise = es.getHandle(stripNoiseToken_); } /*****************************************************************************/ diff --git a/RecoPixelVertexing/PixelTrackFitting/src/PixelTrackBuilder.cc b/RecoPixelVertexing/PixelTrackFitting/src/PixelTrackBuilder.cc index 6de08b6be10f4..63ddf6fcfc717 100644 --- a/RecoPixelVertexing/PixelTrackFitting/src/PixelTrackBuilder.cc +++ b/RecoPixelVertexing/PixelTrackFitting/src/PixelTrackBuilder.cc @@ -130,7 +130,7 @@ reco::Track* PixelTrackBuilder::build(const Measurement1D& pt, const std::vector& hits, const MagneticField* mf, const GlobalPoint& origin) const { - LogDebug("PixelTrackBuilder::build"); + LogDebug("PixelTrackBuilder::build") << ""; LogTrace("") << "Reconstructed triplet kinematics: " << print(pt, phi, cotTheta, tip, zip, chi2, charge); double sinTheta = 1 / std::sqrt(1 + sqr(cotTheta.value())); diff --git a/RecoPixelVertexing/PixelTrackFitting/test/test_cfg.py b/RecoPixelVertexing/PixelTrackFitting/test/test_cfg.py index 5da35d8008f14..7ee9aa7547317 100644 --- a/RecoPixelVertexing/PixelTrackFitting/test/test_cfg.py +++ b/RecoPixelVertexing/PixelTrackFitting/test/test_cfg.py @@ -18,12 +18,14 @@ process.GlobalTag.globaltag = 'DESIGN_36_V3::All' process.MessageLogger = cms.Service("MessageLogger", - #debugModules = cms.untracked.vstring('pixelVertices'), - #debugModules = cms.untracked.vstring('pixelTracks'), - #debugModules = cms.untracked.vstring('*'), - debugModules = cms.untracked.vstring(''), - destinations = cms.untracked.vstring('cout'), - cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO')) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ), + debugModules = cms.untracked.vstring('') ) process.load("RecoTracker.Configuration.RecoTracker_cff") diff --git a/RecoPixelVertexing/PixelVertexFinding/plugins/PixelVertexCollectionTrimmer.cc b/RecoPixelVertexing/PixelVertexFinding/plugins/PixelVertexCollectionTrimmer.cc index c6747707ada73..b62137d1f0836 100644 --- a/RecoPixelVertexing/PixelVertexFinding/plugins/PixelVertexCollectionTrimmer.cc +++ b/RecoPixelVertexing/PixelVertexFinding/plugins/PixelVertexCollectionTrimmer.cc @@ -1,123 +1,99 @@ -// -*- C++ -*- -// -// Package: RecoPixelVertexing/PixelVertexFinding -// Class: PixelVertexCollectionTrimmer -// -/**\class PixelVertexCollectionTrimmer PixelVertexCollectionTrimmer.cc RecoPixelVertexing/PixelVertexFinding/src/PixelVertexCollectionTrimmer.cc - -Description: [one line class summary] - -Implementation: -[Notes on implementation] -*/ -// // Original Author: Riccardo Manzoni -// Created: Tue, 01 Apr 2014 10:11:16 GMT -// -// - -// system include files +#include #include +#include +#include -// user include files +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/stream/EDProducer.h" - #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "RecoPixelVertexing/PixelVertexFinding/interface/PVClusterComparer.h" - +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "RecoPixelVertexing/PixelVertexFinding/interface/PVClusterComparer.h" class PixelVertexCollectionTrimmer : public edm::stream::EDProducer<> { public: explicit PixelVertexCollectionTrimmer(const edm::ParameterSet&); - ~PixelVertexCollectionTrimmer() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: void produce(edm::Event&, const edm::EventSetup&) override; - edm::EDGetTokenT vtxToken_; - unsigned int maxVtx_; - double fractionSumPt2_; - double minSumPt2_; + edm::EDGetTokenT const vtxToken_; + uint const maxVtx_; + double const fractionSumPt2_; + double const minSumPt2_; - PVClusterComparer* pvComparer_; + std::unique_ptr pvComparer_; }; -PixelVertexCollectionTrimmer::PixelVertexCollectionTrimmer(const edm::ParameterSet& iConfig) { - edm::InputTag vtxInputTag = iConfig.getParameter("src"); - vtxToken_ = consumes(vtxInputTag); - maxVtx_ = iConfig.getParameter("maxVtx"); - fractionSumPt2_ = iConfig.getParameter("fractionSumPt2"); - minSumPt2_ = iConfig.getParameter("minSumPt2"); +PixelVertexCollectionTrimmer::PixelVertexCollectionTrimmer(const edm::ParameterSet& iConfig) + : vtxToken_(consumes(iConfig.getParameter("src"))), + maxVtx_(iConfig.getParameter("maxVtx")), + fractionSumPt2_(iConfig.getParameter("fractionSumPt2")), + minSumPt2_(iConfig.getParameter("minSumPt2")) { + if (fractionSumPt2_ > 1) + throw cms::Exception("PixelVertexConfiguration") << "value of \"fractionSumPt2\" is larger than 1."; + + auto const& pvComparerPSet = iConfig.getParameterSet("PVcomparer"); + auto const track_pt_min = pvComparerPSet.getParameter("track_pt_min"); + auto const track_pt_max = pvComparerPSet.getParameter("track_pt_max"); + auto const track_chi2_max = pvComparerPSet.getParameter("track_chi2_max"); + auto const track_prob_min = pvComparerPSet.getParameter("track_prob_min"); - edm::ParameterSet PVcomparerPSet = iConfig.getParameter("PVcomparer"); - double track_pt_min = PVcomparerPSet.getParameter("track_pt_min"); - double track_pt_max = PVcomparerPSet.getParameter("track_pt_max"); - double track_chi2_max = PVcomparerPSet.getParameter("track_chi2_max"); - double track_prob_min = PVcomparerPSet.getParameter("track_prob_min"); + if (track_pt_min >= track_pt_max) + throw cms::Exception("PixelVertexConfiguration") + << "PVcomparer.track_pt_min (" << track_pt_min << ") >= PVcomparer.track_pt_max (" << track_pt_max + << ") : PVClusterComparer will use pT=" << track_pt_max << " for all selected tracks."; - pvComparer_ = new PVClusterComparer(track_pt_min, track_pt_max, track_chi2_max, track_prob_min); + pvComparer_ = std::make_unique(track_pt_min, track_pt_max, track_chi2_max, track_prob_min); produces(); } -PixelVertexCollectionTrimmer::~PixelVertexCollectionTrimmer() {} - -// ------------ method called to produce the data ------------ void PixelVertexCollectionTrimmer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - auto vtxs_trim = std::make_unique(); - edm::Handle vtxs; - iEvent.getByToken(vtxToken_, vtxs); - - double sumpt2; - //double sumpt2previous = -99. ; - - // this is not the logic we want, at least for now - // if requires the sumpt2 for vtx_n to be > threshold * sumpt2 vtx_n-1 - // for (reco::VertexCollection::const_iterator vtx = vtxs->begin(); vtx != vtxs->end(); ++vtx, ++counter){ - // if (counter > maxVtx_) break ; - // sumpt2 = PVCluster.pTSquaredSum(*vtx) ; - // if (sumpt2 > sumpt2previous*fractionSumPt2_ && sumpt2 > minSumPt2_ ) vtxs_trim->push_back(*vtx) ; - // else if (counter == 0 ) vtxs_trim->push_back(*vtx) ; - // sumpt2previous = sumpt2 ; - // } - - double sumpt2first = pvComparer_->pTSquaredSum(*(vtxs->begin())); - - for (reco::VertexCollection::const_iterator vtx = vtxs->begin(), evtx = vtxs->end(); vtx != evtx; ++vtx) { - if (vtxs_trim->size() >= maxVtx_) - break; - sumpt2 = pvComparer_->pTSquaredSum(*vtx); - // std::cout << "sumpt2: " << sumpt2 << "[" << sumpt2first << "]" << std::endl; - // if (sumpt2 >= sumpt2first*fractionSumPt2_ && sumpt2 > minSumPt2_ ) vtxs_trim->push_back(*vtx) ; - if (sumpt2 >= sumpt2first * fractionSumPt2_ && sumpt2 > minSumPt2_) - vtxs_trim->push_back(*vtx); + auto const& vtxs = iEvent.get(vtxToken_); + + if (vtxs.empty()) + edm::LogWarning("PixelVertexInput") << "Input collection of vertices is empty. Output collection will be empty."; + else { + std::vector foms(vtxs.size()); + for (size_t idx = 0; idx < vtxs.size(); ++idx) + foms[idx] = pvComparer_->pTSquaredSum(vtxs[idx]); + + std::vector sortIdxs(vtxs.size()); + std::iota(sortIdxs.begin(), sortIdxs.end(), 0); + std::sort(sortIdxs.begin(), sortIdxs.end(), [&](size_t const i1, size_t const i2) { return foms[i1] > foms[i2]; }); + + auto const minFOM_fromFrac = foms[sortIdxs.front()] * fractionSumPt2_; + + vtxs_trim->reserve(std::min((size_t)maxVtx_, vtxs.size())); + for (auto const idx : sortIdxs) { + if (vtxs_trim->size() >= maxVtx_) + break; + if (foms[idx] >= minFOM_fromFrac and foms[idx] > minSumPt2_) + vtxs_trim->emplace_back(vtxs[idx]); + } + + if (vtxs_trim->empty()) + edm::LogInfo("PixelVertexOutput") << "Output collection is empty."; } - // std::cout << " ==> # vertices: " << vtxs_trim->size() << std::endl; + iEvent.put(std::move(vtxs_trim)); } -// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void PixelVertexCollectionTrimmer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - //The following says we do not know what parameters are allowed so do no validation - // Please change this to state exactly what you do use, even if it is no parameters edm::ParameterSetDescription desc; desc.add("src", edm::InputTag(""))->setComment("input (pixel) vertex collection"); - desc.add("maxVtx", 100)->setComment("max output collection size (number of accepted vertices)"); + desc.add("maxVtx", 100)->setComment("max output collection size (number of accepted vertices)"); desc.add("fractionSumPt2", 0.3)->setComment("threshold on sumPt2 fraction of the leading vertex"); desc.add("minSumPt2", 0.)->setComment("min sumPt2"); edm::ParameterSetDescription PVcomparerPSet; @@ -130,5 +106,4 @@ void PixelVertexCollectionTrimmer::fillDescriptions(edm::ConfigurationDescriptio descriptions.add("hltPixelVertexCollectionTrimmer", desc); } -//define this as a plug-in DEFINE_FWK_MODULE(PixelVertexCollectionTrimmer); diff --git a/RecoTauTag/Configuration/python/HPSPFTaus_cff.py b/RecoTauTag/Configuration/python/HPSPFTaus_cff.py index 4b606d71a5bde..5c0ee18df8d26 100644 --- a/RecoTauTag/Configuration/python/HPSPFTaus_cff.py +++ b/RecoTauTag/Configuration/python/HPSPFTaus_cff.py @@ -295,7 +295,7 @@ ) # Define the HPS selection discriminator used in cleaning -hpsSelectionDiscriminator.PFTauProducer = cms.InputTag("combinatoricRecoTaus") +hpsSelectionDiscriminator.PFTauProducer = "combinatoricRecoTaus" #---------------------------------------------------------------------------- # CV: disable 3Prong1Pi0 decay mode hpsSelectionDiscriminator.decayModes = cms.VPSet( diff --git a/RecoTauTag/RecoTau/BuildFile.xml b/RecoTauTag/RecoTau/BuildFile.xml index 70f6ab5b5d632..cc389831404fa 100644 --- a/RecoTauTag/RecoTau/BuildFile.xml +++ b/RecoTauTag/RecoTau/BuildFile.xml @@ -2,7 +2,7 @@ - + diff --git a/RecoTauTag/RecoTau/interface/AntiElectronIDMVA6.h b/RecoTauTag/RecoTau/interface/AntiElectronIDMVA6.h index e4d90d0a8a4a5..57adfaffc2c32 100644 --- a/RecoTauTag/RecoTau/interface/AntiElectronIDMVA6.h +++ b/RecoTauTag/RecoTau/interface/AntiElectronIDMVA6.h @@ -21,7 +21,7 @@ #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "DataFormats/GsfTrackReco/interface/GsfTrack.h" #include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "DataFormats/PatCandidates/interface/Tau.h" #include "DataFormats/PatCandidates/interface/Electron.h" #include "DataFormats/PatCandidates/interface/PackedCandidate.h" diff --git a/RecoTauTag/RecoTau/interface/DeepTauBase.h b/RecoTauTag/RecoTau/interface/DeepTauBase.h index fb824b1a35c38..6f487d102d880 100644 --- a/RecoTauTag/RecoTau/interface/DeepTauBase.h +++ b/RecoTauTag/RecoTau/interface/DeepTauBase.h @@ -84,7 +84,7 @@ namespace deep_tau { std::unique_ptr get_value(const edm::Handle& taus, const tensorflow::Tensor& pred, - const WPList& working_points, + const WPList* working_points, bool is_online) const; }; diff --git a/RecoTauTag/RecoTau/plugins/BuildFile.xml b/RecoTauTag/RecoTau/plugins/BuildFile.xml index 881640777f0b9..835155b5da213 100644 --- a/RecoTauTag/RecoTau/plugins/BuildFile.xml +++ b/RecoTauTag/RecoTau/plugins/BuildFile.xml @@ -20,7 +20,7 @@ - + diff --git a/RecoTauTag/RecoTau/plugins/DeepTauId.cc b/RecoTauTag/RecoTau/plugins/DeepTauId.cc index b7b475e633a38..252f2c4483f4c 100644 --- a/RecoTauTag/RecoTau/plugins/DeepTauId.cc +++ b/RecoTauTag/RecoTau/plugins/DeepTauId.cc @@ -4,12 +4,17 @@ * Tau identification using Deep NN. * * \author Konstantin Androsov, INFN Pisa + * Christian Veelken, Tallinn */ #include "RecoTauTag/RecoTau/interface/DeepTauBase.h" #include "FWCore/Utilities/interface/isFinite.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/TauReco/interface/PFTauTransverseImpactParameterAssociation.h" +#include +#include "tbb/concurrent_unordered_set.h" + namespace deep_tau { constexpr int NumberOfOutputs = 4; } @@ -415,6 +420,24 @@ namespace { } } // namespace dnn_inputs_2017_v2 + float getTauID(const pat::Tau& tau, const std::string& tauID, float default_value = -999., bool assert_input = true) { + static tbb::concurrent_unordered_set isFirstWarning; + if (tau.isTauIDAvailable(tauID)) { + return tau.tauID(tauID); + } else { + if (assert_input) { + throw cms::Exception("DeepTauId") + << "Exception in : No tauID '" << tauID << "' available in pat::Tau given as function argument."; + } + if (isFirstWarning.insert(tauID).second) { + edm::LogWarning("DeepTauID") << "Warning in : No tauID '" << tauID + << "' available in pat::Tau given as function argument." + << " Using default_value = " << default_value << " instead." << std::endl; + } + return default_value; + } + } + struct TauFunc { const reco::TauDiscriminatorContainer* basicTauDiscriminatorCollection; const reco::TauDiscriminatorContainer* basicTauDiscriminatordR03Collection; @@ -429,38 +452,38 @@ namespace { return (*basicTauDiscriminatorCollection)[tau_ref].rawValues.at(indexMap.at(BasicDiscr::ChargedIsoPtSum)); } const float getChargedIsoPtSum(const pat::Tau& tau, const edm::RefToBase tau_ref) const { - return tau.tauID("chargedIsoPtSum"); + return getTauID(tau, "chargedIsoPtSum"); } const float getChargedIsoPtSumdR03(const reco::PFTau& tau, const edm::RefToBase tau_ref) const { return (*basicTauDiscriminatordR03Collection)[tau_ref].rawValues.at(indexMapdR03.at(BasicDiscr::ChargedIsoPtSum)); } const float getChargedIsoPtSumdR03(const pat::Tau& tau, const edm::RefToBase tau_ref) const { - return tau.tauID("chargedIsoPtSumdR03"); + return getTauID(tau, "chargedIsoPtSumdR03"); } const float getFootprintCorrectiondR03(const reco::PFTau& tau, const edm::RefToBase tau_ref) const { return (*basicTauDiscriminatordR03Collection)[tau_ref].rawValues.at( indexMapdR03.at(BasicDiscr::FootprintCorrection)); } const float getFootprintCorrectiondR03(const pat::Tau& tau, const edm::RefToBase tau_ref) const { - return tau.tauID("footprintCorrectiondR03"); + return getTauID(tau, "footprintCorrectiondR03"); } const float getNeutralIsoPtSum(const reco::PFTau& tau, const edm::RefToBase tau_ref) const { return (*basicTauDiscriminatorCollection)[tau_ref].rawValues.at(indexMap.at(BasicDiscr::NeutralIsoPtSum)); } const float getNeutralIsoPtSum(const pat::Tau& tau, const edm::RefToBase tau_ref) const { - return tau.tauID("neutralIsoPtSum"); + return getTauID(tau, "neutralIsoPtSum"); } const float getNeutralIsoPtSumdR03(const reco::PFTau& tau, const edm::RefToBase tau_ref) const { return (*basicTauDiscriminatordR03Collection)[tau_ref].rawValues.at(indexMapdR03.at(BasicDiscr::NeutralIsoPtSum)); } const float getNeutralIsoPtSumdR03(const pat::Tau& tau, const edm::RefToBase tau_ref) const { - return tau.tauID("neutralIsoPtSumdR03"); + return getTauID(tau, "neutralIsoPtSumdR03"); } const float getNeutralIsoPtSumWeight(const reco::PFTau& tau, const edm::RefToBase tau_ref) const { return (*basicTauDiscriminatorCollection)[tau_ref].rawValues.at(indexMap.at(BasicDiscr::NeutralIsoPtSumWeight)); } const float getNeutralIsoPtSumWeight(const pat::Tau& tau, const edm::RefToBase tau_ref) const { - return tau.tauID("neutralIsoPtSumWeight"); + return getTauID(tau, "neutralIsoPtSumWeight"); } const float getNeutralIsoPtSumdR03Weight(const reco::PFTau& tau, const edm::RefToBase tau_ref) const { @@ -468,7 +491,7 @@ namespace { indexMapdR03.at(BasicDiscr::NeutralIsoPtSumWeight)); } const float getNeutralIsoPtSumdR03Weight(const pat::Tau& tau, const edm::RefToBase tau_ref) const { - return tau.tauID("neutralIsoPtSumWeightdR03"); + return getTauID(tau, "neutralIsoPtSumWeightdR03"); } const float getPhotonPtSumOutsideSignalCone(const reco::PFTau& tau, const edm::RefToBase tau_ref) const { @@ -477,7 +500,7 @@ namespace { } const float getPhotonPtSumOutsideSignalCone(const pat::Tau& tau, const edm::RefToBase tau_ref) const { - return tau.tauID("photonPtSumOutsideSignalCone"); + return getTauID(tau, "photonPtSumOutsideSignalCone"); } const float getPhotonPtSumOutsideSignalConedR03(const reco::PFTau& tau, const edm::RefToBase tau_ref) const { @@ -486,13 +509,13 @@ namespace { } const float getPhotonPtSumOutsideSignalConedR03(const pat::Tau& tau, const edm::RefToBase tau_ref) const { - return tau.tauID("photonPtSumOutsideSignalConedR03"); + return getTauID(tau, "photonPtSumOutsideSignalConedR03"); } const float getPuCorrPtSum(const reco::PFTau& tau, const edm::RefToBase tau_ref) const { return (*basicTauDiscriminatorCollection)[tau_ref].rawValues.at(indexMap.at(BasicDiscr::PUcorrPtSum)); } const float getPuCorrPtSum(const pat::Tau& tau, const edm::RefToBase tau_ref) const { - return tau.tauID("puCorrPtSum"); + return getTauID(tau, "puCorrPtSum"); } auto getdxyPCA(const reco::PFTau& tau, const size_t tau_index) const { @@ -587,16 +610,8 @@ namespace { }; namespace candFunc { - auto getTauDz(const reco::PFCandidate& cand, float default_value) { - return cand.bestTrack() != nullptr ? cand.bestTrack()->dz() : default_value; - } - auto getTauDz(const pat::PackedCandidate& cand, float default_value) { return cand.dz(); } - auto getTauDzError(const reco::PFCandidate& cand, float default_value) { - return cand.bestTrack() != nullptr ? cand.dzError() : default_value; - } - auto getTauDzError(const pat::PackedCandidate& cand, float default_value) { - return cand.hasTrackDetails() ? cand.dzError() : default_value; - } + auto getTauDz(const reco::PFCandidate& cand) { return cand.bestTrack()->dz(); } + auto getTauDz(const pat::PackedCandidate& cand) { return cand.dz(); } auto getTauDZSigValid(const reco::PFCandidate& cand) { return cand.bestTrack() != nullptr && std::isnormal(cand.bestTrack()->dz()) && std::isnormal(cand.dzError()) && cand.dzError() > 0; @@ -604,16 +619,16 @@ namespace { auto getTauDZSigValid(const pat::PackedCandidate& cand) { return cand.hasTrackDetails() && std::isnormal(cand.dz()) && std::isnormal(cand.dzError()) && cand.dzError() > 0; } - auto getTauDxy(const reco::PFCandidate& cand, float default_value) { - return cand.bestTrack() != nullptr ? cand.bestTrack()->dxy() : default_value; - } - auto getTauDxy(const pat::PackedCandidate& cand, float default_value) { return cand.dxy(); } + auto getTauDxy(const reco::PFCandidate& cand) { return cand.bestTrack()->dxy(); } + auto getTauDxy(const pat::PackedCandidate& cand) { return cand.dxy(); } auto getPvAssocationQuality(const reco::PFCandidate& cand) { return 0.7013f; } auto getPvAssocationQuality(const pat::PackedCandidate& cand) { return cand.pvAssociationQuality(); } - auto getPuppiWeight(const reco::PFCandidate& cand) { return 0.9907f; } - auto getPuppiWeight(const pat::PackedCandidate& cand) { return cand.puppiWeight(); } - auto getPuppiWeightNoLep(const reco::PFCandidate& cand) { return 0.8858f; } - auto getPuppiWeightNoLep(const pat::PackedCandidate& cand) { return cand.puppiWeightNoLep(); } + auto getPuppiWeight(const reco::PFCandidate& cand, const float aod_value) { return aod_value; } + auto getPuppiWeight(const pat::PackedCandidate& cand, const float aod_value) { return cand.puppiWeight(); } + auto getPuppiWeightNoLep(const reco::PFCandidate& cand, const float aod_value) { return aod_value; } + auto getPuppiWeightNoLep(const pat::PackedCandidate& cand, const float aod_value) { + return cand.puppiWeightNoLep(); + } auto getLostInnerHits(const reco::PFCandidate& cand, float default_value) { return cand.bestTrack() != nullptr ? cand.bestTrack()->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS) @@ -634,15 +649,22 @@ namespace { auto getPseudoTrack(const pat::PackedCandidate& cand) { return cand.pseudoTrack(); } auto getFromPV(const reco::PFCandidate& cand) { return 0.9994f; } auto getFromPV(const pat::PackedCandidate& cand) { return cand.fromPV(); } - auto getHCalFraction(const reco::PFCandidate& cand) { + auto getHCalFraction(const reco::PFCandidate& cand, bool disable_hcalFraction_workaround) { return cand.rawHcalEnergy() / (cand.rawHcalEnergy() + cand.rawEcalEnergy()); } - auto getHCalFraction(const pat::PackedCandidate& cand) { + auto getHCalFraction(const pat::PackedCandidate& cand, bool disable_hcalFraction_workaround) { float hcal_fraction = 0.; - if (cand.pdgId() == 1 || cand.pdgId() == 130) { + if (disable_hcalFraction_workaround) { + // CV: use consistent definition for pfCand_chHad_hcalFraction + // in DeepTauId.cc code and in TauMLTools/Production/plugins/TauTupleProducer.cc hcal_fraction = cand.hcalFraction(); - } else if (cand.isIsolatedChargedHadron()) { - hcal_fraction = cand.rawHcalFraction(); + } else { + // CV: backwards compatibility with DeepTau training v2p1 used during Run 2 + if (cand.pdgId() == 1 || cand.pdgId() == 130) { + hcal_fraction = cand.hcalFraction(); + } else if (cand.isIsolatedChargedHadron()) { + hcal_fraction = cand.rawHcalFraction(); + } } return hcal_fraction; } @@ -991,12 +1013,17 @@ namespace { using Map = std::map; using const_iterator = Map::const_iterator; - CellGrid(unsigned n_cells_eta, unsigned n_cells_phi, double cell_size_eta, double cell_size_phi) + CellGrid(unsigned n_cells_eta, + unsigned n_cells_phi, + double cell_size_eta, + double cell_size_phi, + bool disable_CellIndex_workaround) : nCellsEta(n_cells_eta), nCellsPhi(n_cells_phi), nTotal(nCellsEta * nCellsPhi), cellSizeEta(cell_size_eta), - cellSizePhi(cell_size_phi) { + cellSizePhi(cell_size_phi), + disable_CellIndex_workaround_(disable_CellIndex_workaround) { if (nCellsEta % 2 != 1 || nCellsEta < 1) throw cms::Exception("DeepTauId") << "Invalid number of eta cells."; if (nCellsPhi % 2 != 1 || nCellsPhi < 1) @@ -1013,11 +1040,19 @@ namespace { int getPhiTensorIndex(const CellIndex& cellIndex) const { return cellIndex.phi + maxPhiIndex(); } bool tryGetCellIndex(double deltaEta, double deltaPhi, CellIndex& cellIndex) const { - static auto getCellIndex = [](double x, double maxX, double size, int& index) { + const auto getCellIndex = [this](double x, double maxX, double size, int& index) { const double absX = std::abs(x); if (absX > maxX) return false; - const double absIndex = std::floor(std::abs(absX / size - 0.5)); + double absIndex; + if (disable_CellIndex_workaround_) { + // CV: use consistent definition for CellIndex + // in DeepTauId.cc code and new DeepTau trainings + absIndex = std::floor(absX / size + 0.5); + } else { + // CV: backwards compatibility with DeepTau training v2p1 used during Run 2 + absIndex = std::floor(std::abs(absX / size - 0.5)); + } index = static_cast(std::copysign(absIndex, x)); return true; }; @@ -1040,8 +1075,8 @@ namespace { private: std::map cells; + const bool disable_CellIndex_workaround_; }; - } // anonymous namespace using bd = deep_tau::DeepTauBase::BasicDiscriminator; @@ -1086,7 +1121,7 @@ class DeepTauId : public deep_tau::DeepTauBase { auto const aProv = aHandle.provenance(); if (aProv == nullptr) aHandle.whyFailed()->raise(); - const auto& psetsFromProvenance = edm::parameterSet(*aProv, event.processHistory()); + const auto& psetsFromProvenance = edm::parameterSet(aProv->stable(), event.processHistory()); auto const idlist = psetsFromProvenance.getParameter>("IDdefinitions"); for (size_t j = 0; j < idlist.size(); ++j) { std::string idname = idlist[j].getParameter("IDname"); @@ -1123,6 +1158,9 @@ class DeepTauId : public deep_tau::DeepTauBase { desc.add("version", 2); desc.add("debug_level", 0); desc.add("disable_dxy_pca", false); + desc.add("disable_hcalFraction_workaround", false); + desc.add("disable_CellIndex_workaround", false); + desc.add("save_inputs", false); desc.add("is_online", false); desc.add>("VSeWP"); @@ -1163,7 +1201,12 @@ class DeepTauId : public deep_tau::DeepTauBase { cfg.getParameter("pfTauTransverseImpactParameters"))), version_(cfg.getParameter("version")), debug_level(cfg.getParameter("debug_level")), - disable_dxy_pca_(cfg.getParameter("disable_dxy_pca")) { + disable_dxy_pca_(cfg.getParameter("disable_dxy_pca")), + disable_hcalFraction_workaround_(cfg.getParameter("disable_hcalFraction_workaround")), + disable_CellIndex_workaround_(cfg.getParameter("disable_CellIndex_workaround")), + save_inputs_(cfg.getParameter("save_inputs")), + json_file_(nullptr), + file_counter_(0) { if (version_ == 1) { input_layer_ = cache_->getGraph().node(0).name(); output_layer_ = cache_->getGraph().node(cache_->getGraph().node_size() - 1).name(); @@ -1260,25 +1303,120 @@ class DeepTauId : public deep_tau::DeepTauBase { return false; } - inline void checkInputs( - const tensorflow::Tensor& inputs, const char* block_name, int n_inputs, int n_eta = 1, int n_phi = 1) const { + inline void checkInputs(const tensorflow::Tensor& inputs, + const std::string& block_name, + int n_inputs, + const CellGrid* grid = nullptr) const { if (debug_level >= 1) { - for (int eta = 0; eta < n_eta; ++eta) { - for (int phi = 0; phi < n_phi; phi++) { - for (int k = 0; k < n_inputs; ++k) { - const float input = - n_eta == 1 && n_phi == 1 ? inputs.matrix()(0, k) : inputs.tensor()(0, eta, phi, k); - if (edm::isNotFinite(input)) - throw cms::Exception("DeepTauId") - << "in the " << block_name << ", input is not finite, i.e. infinite or NaN, for eta_index = " << n_eta - << ", phi_index = " << n_phi << ", input_index = " << k; - if (debug_level >= 2) - std::cout << block_name << "," << eta << "," << phi << "," << k << "," << std::setprecision(5) - << std::fixed << input << '\n'; + std::cout << ": block_name = " << block_name << std::endl; + if (block_name == "input_tau") { + for (int input_index = 0; input_index < n_inputs; ++input_index) { + float input = inputs.matrix()(0, input_index); + if (edm::isNotFinite(input)) { + throw cms::Exception("DeepTauId") + << "in the " << block_name + << ", input is not finite, i.e. infinite or NaN, for input_index = " << input_index; + } + if (debug_level >= 2) { + std::cout << block_name << "[var = " << input_index << "] = " << std::setprecision(5) << std::fixed << input + << std::endl; } } + } else { + assert(grid); + int n_eta, n_phi; + if (block_name.find("input_inner") != std::string::npos) { + n_eta = 5; + n_phi = 5; + } else if (block_name.find("input_outer") != std::string::npos) { + n_eta = 10; + n_phi = 10; + } else + assert(0); + int eta_phi_index = 0; + for (int eta = -n_eta; eta <= n_eta; ++eta) { + for (int phi = -n_phi; phi <= n_phi; ++phi) { + const CellIndex cell_index{eta, phi}; + const auto cell_iter = grid->find(cell_index); + if (cell_iter != grid->end()) { + for (int input_index = 0; input_index < n_inputs; ++input_index) { + float input = inputs.tensor()(eta_phi_index, 0, 0, input_index); + if (edm::isNotFinite(input)) { + throw cms::Exception("DeepTauId") + << "in the " << block_name << ", input is not finite, i.e. infinite or NaN, for eta = " << eta + << ", phi = " << phi << ", input_index = " << input_index; + } + if (debug_level >= 2) { + std::cout << block_name << "[eta = " << eta << "][phi = " << phi << "][var = " << input_index + << "] = " << std::setprecision(5) << std::fixed << input << std::endl; + } + } + eta_phi_index += 1; + } + } + } + } + } + } + + inline void saveInputs(const tensorflow::Tensor& inputs, + const std::string& block_name, + int n_inputs, + const CellGrid* grid = nullptr) { + if (debug_level >= 1) { + std::cout << ": block_name = " << block_name << std::endl; + } + if (!is_first_block_) + (*json_file_) << ", "; + (*json_file_) << "\"" << block_name << "\": ["; + if (block_name == "input_tau") { + for (int input_index = 0; input_index < n_inputs; ++input_index) { + float input = inputs.matrix()(0, input_index); + if (input_index != 0) + (*json_file_) << ", "; + (*json_file_) << input; + } + } else { + assert(grid); + int n_eta, n_phi; + if (block_name.find("input_inner") != std::string::npos) { + n_eta = 5; + n_phi = 5; + } else if (block_name.find("input_outer") != std::string::npos) { + n_eta = 10; + n_phi = 10; + } else + assert(0); + int eta_phi_index = 0; + for (int eta = -n_eta; eta <= n_eta; ++eta) { + if (eta != -n_eta) + (*json_file_) << ", "; + (*json_file_) << "["; + for (int phi = -n_phi; phi <= n_phi; ++phi) { + if (phi != -n_phi) + (*json_file_) << ", "; + (*json_file_) << "["; + const CellIndex cell_index{eta, phi}; + const auto cell_iter = grid->find(cell_index); + for (int input_index = 0; input_index < n_inputs; ++input_index) { + float input = 0.; + if (cell_iter != grid->end()) { + input = inputs.tensor()(eta_phi_index, 0, 0, input_index); + } + if (input_index != 0) + (*json_file_) << ", "; + (*json_file_) << input; + } + if (cell_iter != grid->end()) { + eta_phi_index += 1; + } + (*json_file_) << "]"; + } + (*json_file_) << "]"; } } + (*json_file_) << "]"; + is_first_block_ = false; } private: @@ -1423,14 +1561,29 @@ class DeepTauId : public deep_tau::DeepTauBase { double rho, std::vector& pred_vector, TauFunc tau_funcs) { - CellGrid inner_grid(dnn_inputs_2017_v2::number_of_inner_cell, dnn_inputs_2017_v2::number_of_inner_cell, 0.02, 0.02); - CellGrid outer_grid(dnn_inputs_2017_v2::number_of_outer_cell, dnn_inputs_2017_v2::number_of_outer_cell, 0.05, 0.05); + if (debug_level >= 2) { + std::cout << ":" << std::endl; + std::cout << " tau: pT = " << tau.pt() << ", eta = " << tau.eta() << ", phi = " << tau.phi() << std::endl; + } + CellGrid inner_grid(dnn_inputs_2017_v2::number_of_inner_cell, + dnn_inputs_2017_v2::number_of_inner_cell, + 0.02, + 0.02, + disable_CellIndex_workaround_); + CellGrid outer_grid(dnn_inputs_2017_v2::number_of_outer_cell, + dnn_inputs_2017_v2::number_of_outer_cell, + 0.05, + 0.05, + disable_CellIndex_workaround_); fillGrids(dynamic_cast(tau), *electrons, inner_grid, outer_grid); fillGrids(dynamic_cast(tau), *muons, inner_grid, outer_grid); fillGrids(dynamic_cast(tau), pfCands, inner_grid, outer_grid); createTauBlockInputs( dynamic_cast(tau), tau_index, tau_ref, pv, rho, tau_funcs); + using namespace dnn_inputs_2017_v2; + checkInputs(*tauBlockTensor_, "input_tau", TauBlockInputs::NumberOfInputs); createConvFeatures(dynamic_cast(tau), tau_index, tau_ref, @@ -1442,6 +1595,9 @@ class DeepTauId : public deep_tau::DeepTauBase { inner_grid, tau_funcs, true); + checkInputs(*eGammaTensor_[true], "input_inner_egamma", EgammaBlockInputs::NumberOfInputs, &inner_grid); + checkInputs(*muonTensor_[true], "input_inner_muon", MuonBlockInputs::NumberOfInputs, &inner_grid); + checkInputs(*hadronsTensor_[true], "input_inner_hadrons", HadronBlockInputs::NumberOfInputs, &inner_grid); createConvFeatures(dynamic_cast(tau), tau_index, tau_ref, @@ -1453,6 +1609,40 @@ class DeepTauId : public deep_tau::DeepTauBase { outer_grid, tau_funcs, false); + checkInputs(*eGammaTensor_[false], "input_outer_egamma", EgammaBlockInputs::NumberOfInputs, &outer_grid); + checkInputs(*muonTensor_[false], "input_outer_muon", MuonBlockInputs::NumberOfInputs, &outer_grid); + checkInputs(*hadronsTensor_[false], "input_outer_hadrons", HadronBlockInputs::NumberOfInputs, &outer_grid); + + if (save_inputs_) { + std::string json_file_name = "DeepTauId_" + std::to_string(file_counter_) + ".json"; + json_file_ = new std::ofstream(json_file_name.data()); + is_first_block_ = true; + (*json_file_) << "{"; + saveInputs(*tauBlockTensor_, "input_tau", dnn_inputs_2017_v2::TauBlockInputs::NumberOfInputs); + saveInputs(*eGammaTensor_[true], + "input_inner_egamma", + dnn_inputs_2017_v2::EgammaBlockInputs::NumberOfInputs, + &inner_grid); + saveInputs( + *muonTensor_[true], "input_inner_muon", dnn_inputs_2017_v2::MuonBlockInputs::NumberOfInputs, &inner_grid); + saveInputs(*hadronsTensor_[true], + "input_inner_hadrons", + dnn_inputs_2017_v2::HadronBlockInputs::NumberOfInputs, + &inner_grid); + saveInputs(*eGammaTensor_[false], + "input_outer_egamma", + dnn_inputs_2017_v2::EgammaBlockInputs::NumberOfInputs, + &outer_grid); + saveInputs( + *muonTensor_[false], "input_outer_muon", dnn_inputs_2017_v2::MuonBlockInputs::NumberOfInputs, &outer_grid); + saveInputs(*hadronsTensor_[false], + "input_outer_hadrons", + dnn_inputs_2017_v2::HadronBlockInputs::NumberOfInputs, + &outer_grid); + (*json_file_) << "}"; + delete json_file_; + ++file_counter_; + } tensorflow::run(&(cache_->getSession("core")), {{"input_tau", *tauBlockTensor_}, @@ -1460,6 +1650,26 @@ class DeepTauId : public deep_tau::DeepTauBase { {"input_outer", *convTensor_.at(false)}}, {"main_output/Softmax"}, &pred_vector); + if (debug_level >= 1) { + std::cout << "output = { "; + for (int idx = 0; idx < deep_tau::NumberOfOutputs; ++idx) { + if (idx > 0) + std::cout << ", "; + std::string label; + if (idx == 0) + label = "e"; + else if (idx == 1) + label = "mu"; + else if (idx == 2) + label = "tau"; + else if (idx == 3) + label = "jet"; + else + assert(0); + std::cout << label << " = " << pred_vector[0].flat()(idx); + } + std::cout << " }" << std::endl; + } } template @@ -1535,6 +1745,9 @@ class DeepTauId : public deep_tau::DeepTauBase { const CellGrid& grid, TauFunc tau_funcs, bool is_inner) { + if (debug_level >= 2) { + std::cout << ":" << std::endl; + } tensorflow::Tensor& convTensor = *convTensor_.at(is_inner); eGammaTensor_[is_inner] = std::make_unique( tensorflow::DT_FLOAT, @@ -1556,9 +1769,16 @@ class DeepTauId : public deep_tau::DeepTauBase { unsigned idx = 0; for (int eta = -grid.maxEtaIndex(); eta <= grid.maxEtaIndex(); ++eta) { for (int phi = -grid.maxPhiIndex(); phi <= grid.maxPhiIndex(); ++phi) { + if (debug_level >= 2) { + std::cout << "processing ( eta = " << eta << ", phi = " << phi << " )" << std::endl; + } const CellIndex cell_index{eta, phi}; const auto cell_iter = grid.find(cell_index); if (cell_iter != grid.end()) { + if (debug_level >= 2) { + std::cout << " creating inputs for ( eta = " << eta << ", phi = " << phi << " ): idx = " << idx + << std::endl; + } const Cell& cell = cell_iter->second; createEgammaBlockInputs( idx, tau, tau_index, tau_ref, pv, rho, electrons, pfCands, cell, tau_funcs, is_inner); @@ -1567,6 +1787,11 @@ class DeepTauId : public deep_tau::DeepTauBase { createHadronsBlockInputs( idx, tau, tau_index, tau_ref, pv, rho, pfCands, cell, tau_funcs, is_inner); idx += 1; + } else { + if (debug_level >= 2) { + std::cout << " skipping creation of inputs, because ( eta = " << eta << ", phi = " << phi + << " ) is not in the grid !!" << std::endl; + } } } } @@ -1595,8 +1820,9 @@ class DeepTauId : public deep_tau::DeepTauBase { unsigned batch_idx, int eta_index, int phi_index) { - for (int n = 0; n < dnn_inputs_2017_v2::number_of_conv_features; ++n) + for (int n = 0; n < dnn_inputs_2017_v2::number_of_conv_features; ++n) { convTensor.tensor()(0, eta_index, phi_index, n) = features.tensor()(batch_idx, 0, 0, n); + } } template @@ -1669,11 +1895,12 @@ class DeepTauId : public deep_tau::DeepTauBase { std::abs(tau_funcs.getip3d(tau, tau_index)) / tau_funcs.getip3dError(tau, tau_index), 2.928f, 4.466f); } if (leadChargedHadrCand) { - get(dnn::tau_dz) = getValueNorm(candFunc::getTauDz(*leadChargedHadrCand, default_value), 0.f, 0.0190f); + const bool hasTrackDetails = candFunc::getHasTrackDetails(*leadChargedHadrCand); + const float tau_dz = (is_online_ && !hasTrackDetails) ? 0 : candFunc::getTauDz(*leadChargedHadrCand); + get(dnn::tau_dz) = getValueNorm(tau_dz, 0.f, 0.0190f); get(dnn::tau_dz_sig_valid) = candFunc::getTauDZSigValid(*leadChargedHadrCand); - const double dzError = candFunc::getTauDzError(*leadChargedHadrCand, default_value); - get(dnn::tau_dz_sig) = - getValueNorm(std::abs(candFunc::getTauDz(*leadChargedHadrCand, default_value)) / dzError, 4.717f, 11.78f); + const double dzError = hasTrackDetails ? leadChargedHadrCand->dzError() : -999.; + get(dnn::tau_dz_sig) = getValueNorm(std::abs(tau_dz) / dzError, 4.717f, 11.78f); } get(dnn::tau_flightLength_x) = getValueNorm(tau_funcs.getFlightLength(tau, tau_index).x(), -0.0003f, 0.7362f); get(dnn::tau_flightLength_y) = getValueNorm(tau_funcs.getFlightLength(tau, tau_index).y(), -0.0009f, 0.7354f); @@ -1702,7 +1929,6 @@ class DeepTauId : public deep_tau::DeepTauBase { get(dnn::tau_inside_ecal_crack) = getValue(isInEcalCrack(tau.p4().eta())); get(dnn::leadChargedCand_etaAtEcalEntrance_minus_tau_eta) = getValueNorm(tau_funcs.getEtaAtEcalEntrance(tau) - tau.p4().eta(), 0.0042f, 0.0323f); - checkInputs(inputs, "tau_block", dnn::NumberOfInputs); } template @@ -1751,11 +1977,11 @@ class DeepTauId : public deep_tau::DeepTauBase { false); get(dnn::pfCand_ele_pvAssociationQuality) = getValueLinear(candFunc::getPvAssocationQuality(ele_cand), 0, 7, true); - get(dnn::pfCand_ele_puppiWeight) = getValue(candFunc::getPuppiWeight(ele_cand)); + get(dnn::pfCand_ele_puppiWeight) = is_inner ? getValue(candFunc::getPuppiWeight(ele_cand, 0.9906834f)) + : getValue(candFunc::getPuppiWeight(ele_cand, 0.9669586f)); get(dnn::pfCand_ele_charge) = getValue(ele_cand.charge()); - get(dnn::pfCand_ele_lostInnerHits) = getValue(candFunc::getLostInnerHits(ele_cand, default_value)); - get(dnn::pfCand_ele_numberOfPixelHits) = - getValueLinear(candFunc::getNumberOfPixelHits(ele_cand, default_value), 0, 10, true); + get(dnn::pfCand_ele_lostInnerHits) = getValue(candFunc::getLostInnerHits(ele_cand, 0)); + get(dnn::pfCand_ele_numberOfPixelHits) = getValueLinear(candFunc::getNumberOfPixelHits(ele_cand, 0), 0, 10, true); get(dnn::pfCand_ele_vertex_dx) = getValueNorm(pfCands.at(index_pf_ele).vertex().x() - pv.position().x(), 0.f, 0.1221f); get(dnn::pfCand_ele_vertex_dy) = @@ -1778,16 +2004,12 @@ class DeepTauId : public deep_tau::DeepTauBase { const bool hasTrackDetails = candFunc::getHasTrackDetails(ele_cand); if (hasTrackDetails) { get(dnn::pfCand_ele_hasTrackDetails) = hasTrackDetails; - get(dnn::pfCand_ele_dxy) = getValueNorm(candFunc::getTauDxy(ele_cand, default_value), 0.f, 0.171f); + get(dnn::pfCand_ele_dxy) = getValueNorm(candFunc::getTauDxy(ele_cand), 0.f, 0.171f); get(dnn::pfCand_ele_dxy_sig) = - getValueNorm(std::abs(candFunc::getTauDxy(ele_cand, default_value)) / pfCands.at(index_pf_ele).dxyError(), - 1.634f, - 6.45f); - get(dnn::pfCand_ele_dz) = getValueNorm(candFunc::getTauDz(ele_cand, default_value), 0.001f, 1.02f); - get(dnn::pfCand_ele_dz_sig) = getValueNorm( - std::abs(candFunc::getTauDz(ele_cand, default_value)) / candFunc::getTauDzError(ele_cand, default_value), - 24.56f, - 210.4f); + getValueNorm(std::abs(candFunc::getTauDxy(ele_cand)) / pfCands.at(index_pf_ele).dxyError(), 1.634f, 6.45f); + get(dnn::pfCand_ele_dz) = getValueNorm(candFunc::getTauDz(ele_cand), 0.001f, 1.02f); + get(dnn::pfCand_ele_dz_sig) = + getValueNorm(std::abs(candFunc::getTauDz(ele_cand)) / ele_cand.dzError(), 24.56f, 210.4f); get(dnn::pfCand_ele_track_chi2_ndof) = getValueNorm( candFunc::getPseudoTrack(ele_cand).chi2() / candFunc::getPseudoTrack(ele_cand).ndof(), 2.272f, 8.439f); get(dnn::pfCand_ele_track_ndof) = getValueNorm(candFunc::getPseudoTrack(ele_cand).ndof(), 15.18f, 3.203f); @@ -1812,11 +2034,14 @@ class DeepTauId : public deep_tau::DeepTauBase { get(dnn::pfCand_gamma_pvAssociationQuality) = getValueLinear(candFunc::getPvAssocationQuality(gamma_cand), 0, 7, true); get(dnn::pfCand_gamma_fromPV) = getValueLinear(candFunc::getFromPV(gamma_cand), 0, 3, true); - get(dnn::pfCand_gamma_puppiWeight) = getValue(candFunc::getPuppiWeight(gamma_cand)); - get(dnn::pfCand_gamma_puppiWeightNoLep) = getValue(candFunc::getPuppiWeightNoLep(gamma_cand)); - get(dnn::pfCand_gamma_lostInnerHits) = getValue(candFunc::getLostInnerHits(gamma_cand, default_value)); + get(dnn::pfCand_gamma_puppiWeight) = is_inner ? getValue(candFunc::getPuppiWeight(gamma_cand, 0.9084110f)) + : getValue(candFunc::getPuppiWeight(gamma_cand, 0.4211567f)); + get(dnn::pfCand_gamma_puppiWeightNoLep) = is_inner + ? getValue(candFunc::getPuppiWeightNoLep(gamma_cand, 0.8857716f)) + : getValue(candFunc::getPuppiWeightNoLep(gamma_cand, 0.3822604f)); + get(dnn::pfCand_gamma_lostInnerHits) = getValue(candFunc::getLostInnerHits(gamma_cand, 0)); get(dnn::pfCand_gamma_numberOfPixelHits) = - getValueLinear(candFunc::getNumberOfPixelHits(gamma_cand, default_value), 0, 7, true); + getValueLinear(candFunc::getNumberOfPixelHits(gamma_cand, 0), 0, 7, true); get(dnn::pfCand_gamma_vertex_dx) = getValueNorm(pfCands.at(index_pf_gamma).vertex().x() - pv.position().x(), 0.f, 0.0067f); get(dnn::pfCand_gamma_vertex_dy) = @@ -1838,14 +2063,12 @@ class DeepTauId : public deep_tau::DeepTauBase { const bool hasTrackDetails = candFunc::getHasTrackDetails(gamma_cand); if (hasTrackDetails) { get(dnn::pfCand_gamma_hasTrackDetails) = hasTrackDetails; - get(dnn::pfCand_gamma_dxy) = getValueNorm(candFunc::getTauDxy(gamma_cand, default_value), 0.0004f, 0.882f); - get(dnn::pfCand_gamma_dxy_sig) = getValueNorm( - std::abs(candFunc::getTauDxy(gamma_cand, default_value)) / gamma_cand.dxyError(), 4.271f, 63.78f); - get(dnn::pfCand_gamma_dz) = getValueNorm(candFunc::getTauDz(gamma_cand, default_value), 0.0071f, 5.285f); - get(dnn::pfCand_gamma_dz_sig) = getValueNorm(std::abs(candFunc::getTauDz(gamma_cand, default_value)) / - candFunc::getTauDzError(gamma_cand, default_value), - 162.1f, - 622.4f); + get(dnn::pfCand_gamma_dxy) = getValueNorm(candFunc::getTauDxy(gamma_cand), 0.0004f, 0.882f); + get(dnn::pfCand_gamma_dxy_sig) = + getValueNorm(std::abs(candFunc::getTauDxy(gamma_cand)) / gamma_cand.dxyError(), 4.271f, 63.78f); + get(dnn::pfCand_gamma_dz) = getValueNorm(candFunc::getTauDz(gamma_cand), 0.0071f, 5.285f); + get(dnn::pfCand_gamma_dz_sig) = + getValueNorm(std::abs(candFunc::getTauDz(gamma_cand)) / gamma_cand.dzError(), 162.1f, 622.4f); get(dnn::pfCand_gamma_track_chi2_ndof) = candFunc::getPseudoTrack(gamma_cand).ndof() > 0 ? getValueNorm(candFunc::getPseudoTrack(gamma_cand).chi2() / candFunc::getPseudoTrack(gamma_cand).ndof(), @@ -1942,8 +2165,6 @@ class DeepTauId : public deep_tau::DeepTauBase { getValueNorm(closestCtfTrack->numberOfValidHits(), 15.16f, 5.26f); } } - if (valid_index_ele or valid_index_pf_ele or valid_index_pf_gamma) - checkInputs(inputs, is_inner ? "egamma_inner_block" : "egamma_outer_block", dnn::NumberOfInputs); } template @@ -1992,11 +2213,12 @@ class DeepTauId : public deep_tau::DeepTauBase { get(dnn::pfCand_muon_pvAssociationQuality) = getValueLinear(candFunc::getPvAssocationQuality(muon_cand), 0, 7, true); get(dnn::pfCand_muon_fromPV) = getValueLinear(candFunc::getFromPV(muon_cand), 0, 3, true); - get(dnn::pfCand_muon_puppiWeight) = getValue(candFunc::getPuppiWeight(muon_cand)); + get(dnn::pfCand_muon_puppiWeight) = is_inner ? getValue(candFunc::getPuppiWeight(muon_cand, 0.9786588f)) + : getValue(candFunc::getPuppiWeight(muon_cand, 0.8132477f)); get(dnn::pfCand_muon_charge) = getValue(muon_cand.charge()); - get(dnn::pfCand_muon_lostInnerHits) = getValue(candFunc::getLostInnerHits(muon_cand, default_value)); + get(dnn::pfCand_muon_lostInnerHits) = getValue(candFunc::getLostInnerHits(muon_cand, 0)); get(dnn::pfCand_muon_numberOfPixelHits) = - getValueLinear(candFunc::getNumberOfPixelHits(muon_cand, default_value), 0, 11, true); + getValueLinear(candFunc::getNumberOfPixelHits(muon_cand, 0), 0, 11, true); get(dnn::pfCand_muon_vertex_dx) = getValueNorm(pfCands.at(index_pf_muon).vertex().x() - pv.position().x(), -0.0007f, 0.6869f); get(dnn::pfCand_muon_vertex_dy) = @@ -2019,14 +2241,12 @@ class DeepTauId : public deep_tau::DeepTauBase { const bool hasTrackDetails = candFunc::getHasTrackDetails(muon_cand); if (hasTrackDetails) { get(dnn::pfCand_muon_hasTrackDetails) = hasTrackDetails; - get(dnn::pfCand_muon_dxy) = getValueNorm(candFunc::getTauDxy(muon_cand, default_value), -0.0045f, 0.9655f); - get(dnn::pfCand_muon_dxy_sig) = getValueNorm( - std::abs(candFunc::getTauDxy(muon_cand, default_value)) / muon_cand.dxyError(), 4.575f, 42.36f); - get(dnn::pfCand_muon_dz) = getValueNorm(candFunc::getTauDz(muon_cand, default_value), -0.0117f, 4.097f); - get(dnn::pfCand_muon_dz_sig) = getValueNorm( - std::abs(candFunc::getTauDz(muon_cand, default_value)) / candFunc::getTauDzError(muon_cand, default_value), - 80.37f, - 343.3f); + get(dnn::pfCand_muon_dxy) = getValueNorm(candFunc::getTauDxy(muon_cand), -0.0045f, 0.9655f); + get(dnn::pfCand_muon_dxy_sig) = + getValueNorm(std::abs(candFunc::getTauDxy(muon_cand)) / muon_cand.dxyError(), 4.575f, 42.36f); + get(dnn::pfCand_muon_dz) = getValueNorm(candFunc::getTauDz(muon_cand), -0.0117f, 4.097f); + get(dnn::pfCand_muon_dz_sig) = + getValueNorm(std::abs(candFunc::getTauDz(muon_cand)) / muon_cand.dzError(), 80.37f, 343.3f); get(dnn::pfCand_muon_track_chi2_ndof) = getValueNorm( candFunc::getPseudoTrack(muon_cand).chi2() / candFunc::getPseudoTrack(muon_cand).ndof(), 0.69f, 1.711f); get(dnn::pfCand_muon_track_ndof) = getValueNorm(candFunc::getPseudoTrack(muon_cand).ndof(), 17.5f, 5.11f); @@ -2096,7 +2316,6 @@ class DeepTauId : public deep_tau::DeepTauBase { } } } - checkInputs(inputs, is_inner ? "muon_inner_block" : "muon_outer_block", dnn::NumberOfInputs); } template @@ -2146,12 +2365,18 @@ class DeepTauId : public deep_tau::DeepTauBase { get(dnn::pfCand_chHad_pvAssociationQuality) = getValueLinear(candFunc::getPvAssocationQuality(chH_cand), 0, 7, true); get(dnn::pfCand_chHad_fromPV) = getValueLinear(candFunc::getFromPV(chH_cand), 0, 3, true); - get(dnn::pfCand_chHad_puppiWeight) = getValue(candFunc::getPuppiWeight(chH_cand)); - get(dnn::pfCand_chHad_puppiWeightNoLep) = getValue(candFunc::getPuppiWeightNoLep(chH_cand)); + const float default_chH_pw_inner = 0.7614090f; + const float default_chH_pw_outer = 0.1974930f; + get(dnn::pfCand_chHad_puppiWeight) = is_inner + ? getValue(candFunc::getPuppiWeight(chH_cand, default_chH_pw_inner)) + : getValue(candFunc::getPuppiWeight(chH_cand, default_chH_pw_outer)); + get(dnn::pfCand_chHad_puppiWeightNoLep) = + is_inner ? getValue(candFunc::getPuppiWeightNoLep(chH_cand, default_chH_pw_inner)) + : getValue(candFunc::getPuppiWeightNoLep(chH_cand, default_chH_pw_outer)); get(dnn::pfCand_chHad_charge) = getValue(chH_cand.charge()); - get(dnn::pfCand_chHad_lostInnerHits) = getValue(candFunc::getLostInnerHits(chH_cand, default_value)); + get(dnn::pfCand_chHad_lostInnerHits) = getValue(candFunc::getLostInnerHits(chH_cand, 0)); get(dnn::pfCand_chHad_numberOfPixelHits) = - getValueLinear(candFunc::getNumberOfPixelHits(chH_cand, default_value), 0, 12, true); + getValueLinear(candFunc::getNumberOfPixelHits(chH_cand, 0), 0, 12, true); get(dnn::pfCand_chHad_vertex_dx) = getValueNorm(pfCands.at(index_chH).vertex().x() - pv.position().x(), 0.0005f, 1.735f); get(dnn::pfCand_chHad_vertex_dy) = @@ -2174,14 +2399,12 @@ class DeepTauId : public deep_tau::DeepTauBase { const bool hasTrackDetails = candFunc::getHasTrackDetails(chH_cand); if (hasTrackDetails) { get(dnn::pfCand_chHad_hasTrackDetails) = hasTrackDetails; - get(dnn::pfCand_chHad_dxy) = getValueNorm(candFunc::getTauDxy(chH_cand, default_value), -0.012f, 2.386f); + get(dnn::pfCand_chHad_dxy) = getValueNorm(candFunc::getTauDxy(chH_cand), -0.012f, 2.386f); get(dnn::pfCand_chHad_dxy_sig) = - getValueNorm(std::abs(candFunc::getTauDxy(chH_cand, default_value)) / chH_cand.dxyError(), 6.417f, 36.28f); - get(dnn::pfCand_chHad_dz) = getValueNorm(candFunc::getTauDz(chH_cand, default_value), -0.0246f, 7.618f); - get(dnn::pfCand_chHad_dz_sig) = getValueNorm( - std::abs(candFunc::getTauDz(chH_cand, default_value)) / candFunc::getTauDzError(chH_cand, default_value), - 301.3f, - 491.1f); + getValueNorm(std::abs(candFunc::getTauDxy(chH_cand)) / chH_cand.dxyError(), 6.417f, 36.28f); + get(dnn::pfCand_chHad_dz) = getValueNorm(candFunc::getTauDz(chH_cand), -0.0246f, 7.618f); + get(dnn::pfCand_chHad_dz_sig) = + getValueNorm(std::abs(candFunc::getTauDz(chH_cand)) / chH_cand.dzError(), 301.3f, 491.1f); get(dnn::pfCand_chHad_track_chi2_ndof) = candFunc::getPseudoTrack(chH_cand).ndof() > 0 ? getValueNorm(candFunc::getPseudoTrack(chH_cand).chi2() / candFunc::getPseudoTrack(chH_cand).ndof(), @@ -2193,7 +2416,7 @@ class DeepTauId : public deep_tau::DeepTauBase { ? getValueNorm(candFunc::getPseudoTrack(chH_cand).ndof(), 13.92f, 6.581f) : 0; } - float hcal_fraction = candFunc::getHCalFraction(chH_cand); + float hcal_fraction = candFunc::getHCalFraction(chH_cand, disable_hcalFraction_workaround_); get(dnn::pfCand_chHad_hcalFraction) = getValue(hcal_fraction); get(dnn::pfCand_chHad_rawCaloFraction) = getValueLinear(candFunc::getRawCaloFraction(chH_cand), 0.f, 2.6f, true); } @@ -2211,12 +2434,13 @@ class DeepTauId : public deep_tau::DeepTauBase { false); get(dnn::pfCand_nHad_dphi) = getValueLinear( dPhi(tau.polarP4(), pfCands.at(index_nH).polarP4()), is_inner ? -0.1f : -0.5f, is_inner ? 0.1f : 0.5f, false); - get(dnn::pfCand_nHad_puppiWeight) = getValue(candFunc::getPuppiWeight(nH_cand)); - get(dnn::pfCand_nHad_puppiWeightNoLep) = getValue(candFunc::getPuppiWeightNoLep(nH_cand)); - float hcal_fraction = candFunc::getHCalFraction(nH_cand); + get(dnn::pfCand_nHad_puppiWeight) = is_inner ? getValue(candFunc::getPuppiWeight(nH_cand, 0.9798355f)) + : getValue(candFunc::getPuppiWeight(nH_cand, 0.7813260f)); + get(dnn::pfCand_nHad_puppiWeightNoLep) = is_inner ? getValue(candFunc::getPuppiWeightNoLep(nH_cand, 0.9046796f)) + : getValue(candFunc::getPuppiWeightNoLep(nH_cand, 0.6554860f)); + float hcal_fraction = candFunc::getHCalFraction(nH_cand, disable_hcalFraction_workaround_); get(dnn::pfCand_nHad_hcalFraction) = getValue(hcal_fraction); } - checkInputs(inputs, is_inner ? "hadron_inner_block" : "hadron_outer_block", dnn::NumberOfInputs); } template @@ -2250,7 +2474,7 @@ class DeepTauId : public deep_tau::DeepTauBase { get(dnn::puCorrPtSum) = tau_funcs.getPuCorrPtSum(tau, tau_ref); get(dnn::dxy) = tau_funcs.getdxy(tau, tau_index); get(dnn::dxy_sig) = tau_funcs.getdxySig(tau, tau_index); - get(dnn::dz) = leadChargedHadrCand ? candFunc::getTauDz(*leadChargedHadrCand, default_value) : default_value; + get(dnn::dz) = leadChargedHadrCand ? candFunc::getTauDz(*leadChargedHadrCand) : default_value; get(dnn::ip3d) = tau_funcs.getip3d(tau, tau_index); get(dnn::ip3d_sig) = tau_funcs.getip3dSig(tau, tau_index); get(dnn::hasSecondaryVertex) = tau_funcs.getHasSecondaryVertex(tau, tau_index); @@ -2580,9 +2804,15 @@ class DeepTauId : public deep_tau::DeepTauBase { const unsigned version_; const int debug_level; const bool disable_dxy_pca_; + const bool disable_hcalFraction_workaround_; + const bool disable_CellIndex_workaround_; std::unique_ptr tauBlockTensor_; std::array, 2> eGammaTensor_, muonTensor_, hadronsTensor_, convTensor_, zeroOutputTensor_; + const bool save_inputs_; + std::ofstream* json_file_; + bool is_first_block_; + int file_counter_; //boolean to check if discriminator indices are already mapped bool discrIndicesMapped_ = false; diff --git a/RecoTauTag/RecoTau/plugins/PATTauDiscriminationByMVAIsolationRun2.cc b/RecoTauTag/RecoTau/plugins/PATTauDiscriminationByMVAIsolationRun2.cc index 7f34ea57cc8ed..0887c22f9cf98 100644 --- a/RecoTauTag/RecoTau/plugins/PATTauDiscriminationByMVAIsolationRun2.cc +++ b/RecoTauTag/RecoTau/plugins/PATTauDiscriminationByMVAIsolationRun2.cc @@ -35,7 +35,7 @@ #include "DataFormats/Math/interface/deltaR.h" #include "RecoTauTag/RecoTau/interface/PFRecoTauClusterVariables.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "CondFormats/DataRecord/interface/GBRWrapperRcd.h" #include "FWCore/Framework/interface/ESHandle.h" diff --git a/RecoTauTag/RecoTau/plugins/PFRecoTauChargedHadronFromPFCandidatePlugin.cc b/RecoTauTag/RecoTau/plugins/PFRecoTauChargedHadronFromPFCandidatePlugin.cc index 153d240496b40..ddd1e08cce44a 100644 --- a/RecoTauTag/RecoTau/plugins/PFRecoTauChargedHadronFromPFCandidatePlugin.cc +++ b/RecoTauTag/RecoTau/plugins/PFRecoTauChargedHadronFromPFCandidatePlugin.cc @@ -26,6 +26,7 @@ #include "DataFormats/Common/interface/RefToPtr.h" #include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "MagneticField/Engine/interface/MagneticField.h" #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" diff --git a/RecoTauTag/RecoTau/plugins/PFRecoTauChargedHadronProducer.cc b/RecoTauTag/RecoTau/plugins/PFRecoTauChargedHadronProducer.cc index 4aeacced9e497..24b9dda72ea0e 100644 --- a/RecoTauTag/RecoTau/plugins/PFRecoTauChargedHadronProducer.cc +++ b/RecoTauTag/RecoTau/plugins/PFRecoTauChargedHadronProducer.cc @@ -230,10 +230,16 @@ void PFRecoTauChargedHadronProducer::produce(edm::Event& evt, const edm::EventSe track = chargedPFCand->muonRef()->outerTrack().get(); else if (chargedPFCand->gsfTrackRef().isNonnull()) track = chargedPFCand->gsfTrackRef().get(); + } else { + track = nextChargedHadron->getChargedPFCandidate()->bestTrack(); } } - if (nextChargedHadron->getTrack().isNonnull() && !track) { - track = nextChargedHadron->getTrack().get(); + if (track == nullptr) { + if (nextChargedHadron->getTrack().isNonnull()) { + track = nextChargedHadron->getTrack().get(); + } else if (nextChargedHadron->getLostTrackCandidate().isNonnull()) { + track = nextChargedHadron->getLostTrackCandidate()->bestTrack(); + } } // discard candidate in case its track is "used" by any ChargedHadron in the clean collection diff --git a/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationAgainstMuon2Helper.cc b/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationAgainstMuon2Helper.cc index f1730790c2d96..e4cfb8c17058a 100644 --- a/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationAgainstMuon2Helper.cc +++ b/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationAgainstMuon2Helper.cc @@ -12,6 +12,7 @@ #include "RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationAgainstMuon2Helper.h" #include "RecoTauTag/RecoTau/interface/RecoTauMuonTools.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include diff --git a/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationAgainstMuonMVA.cc b/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationAgainstMuonMVA.cc index 60c2778738f60..b9b27bc942280 100644 --- a/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationAgainstMuonMVA.cc +++ b/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationAgainstMuonMVA.cc @@ -27,7 +27,7 @@ #include "DataFormats/MuonReco/interface/MuonFwd.h" #include "DataFormats/Math/interface/deltaR.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "CondFormats/DataRecord/interface/GBRWrapperRcd.h" #include "FWCore/Framework/interface/ESHandle.h" diff --git a/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByIsolation.cc b/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByIsolation.cc index 608bfdb1456e5..42457be6c1fac 100644 --- a/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByIsolation.cc +++ b/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByIsolation.cc @@ -38,6 +38,8 @@ class PFRecoTauDiscriminationByIsolation : public PFTauDiscriminationProducerBas calculateWeights_ = pset.getParameter("ApplyDiscriminationByWeightedECALIsolation"); + enableHGCalWorkaround_ = pset.getParameter("enableHGCalWorkaround"); + // RIC: multiply neutral isolation by a flat factor. // Useful, for instance, to combine charged and neutral isolations // with different relative weights @@ -201,6 +203,7 @@ class PFRecoTauDiscriminationByIsolation : public PFTauDiscriminationProducerBas bool includeTracks_; bool includeGammas_; bool calculateWeights_; + bool enableHGCalWorkaround_; double weightGammas_; bool applyOccupancyCut_; uint32_t maximumOccupancy_; @@ -500,7 +503,22 @@ double PFRecoTauDiscriminationByIsolation::discriminate(const PFTauRef& pfTau) c double neutralPt = 0.; double weightedNeutralPt = 0.; for (auto const& isoObject : isoCharged_) { - chargedPt += isoObject->pt(); + //------------------------------------------------------------------------- + // CV: fix for Phase-2 HLT tau trigger studies + // (pT of PFCandidates within HGCal acceptance is significantly higher than track pT !!) + if (enableHGCalWorkaround_) { + double trackPt = (isoObject->bestTrack()) ? isoObject->bestTrack()->pt() : 0.; + double pfCandPt = isoObject->pt(); + if (pfCandPt > trackPt) { + chargedPt += trackPt; + neutralPt += pfCandPt - trackPt; + } else { + chargedPt += isoObject->pt(); + } + } else { + chargedPt += isoObject->pt(); + } + //------------------------------------------------------------------------- } if (!calculateWeights_) { for (auto const& isoObject : isoNeutral_) { @@ -616,6 +634,7 @@ void PFRecoTauDiscriminationByIsolation::fillDescriptions(edm::ConfigurationDesc desc.add("ApplyDiscriminationByTrackerIsolation", true); desc.add("storeRawPhotonSumPt_outsideSignalCone", false); desc.add("rhoProducer", edm::InputTag("fixedGridRhoFastjetAll")); + desc.add("enableHGCalWorkaround", false); { edm::ParameterSetDescription vpsd1; diff --git a/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByMVAIsolation2.cc b/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByMVAIsolation2.cc index 69aef8ad1ccbb..d5916406ae41d 100644 --- a/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByMVAIsolation2.cc +++ b/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByMVAIsolation2.cc @@ -27,7 +27,7 @@ #include "DataFormats/TauReco/interface/PFTauTransverseImpactParameterAssociation.h" #include "DataFormats/Math/interface/deltaR.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "CondFormats/DataRecord/interface/GBRWrapperRcd.h" #include "FWCore/Framework/interface/ESHandle.h" diff --git a/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByMVAIsolationRun2.cc b/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByMVAIsolationRun2.cc index 4244790f28379..5b9dd857551a6 100644 --- a/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByMVAIsolationRun2.cc +++ b/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByMVAIsolationRun2.cc @@ -30,7 +30,7 @@ #include "DataFormats/Math/interface/deltaR.h" #include "RecoTauTag/RecoTau/interface/PFRecoTauClusterVariables.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "CondFormats/DataRecord/interface/GBRWrapperRcd.h" #include "FWCore/Framework/interface/ESHandle.h" @@ -196,7 +196,7 @@ namespace reco { phID_ = evt.processHistoryID(); const edm::Provenance* prov = basicTauDiscriminators_.provenance(); const std::vector psetsFromProvenance = - edm::parameterSet(*prov, evt.processHistory()) + edm::parameterSet(prov->stable(), evt.processHistory()) .getParameter>("IDdefinitions"); for (uint i = 0; i < psetsFromProvenance.size(); i++) { if (psetsFromProvenance[i].getParameter("IDname") == "ChargedIsoPtSum" + input_id_name_suffix_) diff --git a/RecoTauTag/RecoTau/plugins/PFRecoTauEnergyAlgorithmPlugin.cc b/RecoTauTag/RecoTau/plugins/PFRecoTauEnergyAlgorithmPlugin.cc index 0ac1262d2144d..db3757a227556 100644 --- a/RecoTauTag/RecoTau/plugins/PFRecoTauEnergyAlgorithmPlugin.cc +++ b/RecoTauTag/RecoTau/plugins/PFRecoTauEnergyAlgorithmPlugin.cc @@ -317,8 +317,13 @@ namespace reco { allTracksSumP += chargedHadronTrack->p(); allTracksSumPerr2 += getTrackPerr2(*chargedHadronTrack); } else { - edm::LogInfo("PFRecoTauEnergyAlgorithmPlugin::operator()") - << "PFRecoTauChargedHadron has no associated reco::Track !!"; + // don't print warning as it is caused by missing detailed track inforamtion in lostTrack in miniAOD + if (!(chargedHadron->algoIs(PFRecoTauChargedHadron::kTrack) && + chargedHadron->getLostTrackCandidate().isNonnull() && + chargedHadron->getLostTrackCandidate()->bestTrack() == nullptr)) { + edm::LogInfo("PFRecoTauEnergyAlgorithmPlugin::operator()") + << "PFRecoTauChargedHadron has no associated reco::Track !!"; + } if (verbosity_) { chargedHadron->print(); } @@ -344,13 +349,29 @@ namespace reco { << " HCAL = " << (pfCand)->hcalEnergy() << "," << " HO = " << (pfCand)->hoEnergy() << std::endl; } - // TauReco@MiniAOD: This info is not yet available in miniAOD. if (edm::isFinite(pfCand->ecalEnergy())) allNeutralsSumEn += pfCand->ecalEnergy(); if (edm::isFinite(pfCand->hcalEnergy())) allNeutralsSumEn += pfCand->hcalEnergy(); if (edm::isFinite(pfCand->hoEnergy())) allNeutralsSumEn += pfCand->hoEnergy(); + } else { + // TauReco@MiniAOD: individual ECAL and HCAL energies recovered from fractions. Info on HO energy is not (yet?) available in miniAOD. + const pat::PackedCandidate* packedCand = dynamic_cast(&*signalCand); + assert(packedCand); // Taus are built either from reco::PFCandidates or pat::PackedCandidates + double caloEn = packedCand->caloFraction() * packedCand->energy(); + double hcalEn = caloEn * packedCand->hcalFraction(); + double ecalEn = caloEn - hcalEn; + if (verbosity_) { + std::cout << "calorimeter energy:" + << " ECAL = " << ecalEn << "," + << " HCAL = " << hcalEn << "," + << " HO unknown for PackedCand" << std::endl; + } + if (edm::isFinite(ecalEn)) + allNeutralsSumEn += ecalEn; + if (edm::isFinite(hcalEn)) + allNeutralsSumEn += hcalEn; } } allNeutralsSumEn += addNeutralsSumP4.energy(); @@ -385,8 +406,13 @@ namespace reco { chargedHadronP4_modified = compChargedHadronP4fromPxPyPz( chargedHadronPx_modified, chargedHadronPy_modified, chargedHadronPz_modified); } else { - edm::LogWarning("PFRecoTauEnergyAlgorithmPlugin::operator()") - << "PFRecoTauChargedHadron has no associated reco::Track !!" << std::endl; + // don't print warning as it is caused by missing detailed track inforamtion in lostTrack in miniAOD + if (!(chargedHadron.algoIs(PFRecoTauChargedHadron::kTrack) && + chargedHadron.getLostTrackCandidate().isNonnull() && + chargedHadron.getLostTrackCandidate()->bestTrack() == nullptr)) { + edm::LogWarning("PFRecoTauEnergyAlgorithmPlugin::operator()") + << "PFRecoTauChargedHadron has no associated reco::Track !!" << std::endl; + } if (verbosity_) { chargedHadron.print(); } @@ -450,8 +476,13 @@ namespace reco { chargedHadronP4_modified = compChargedHadronP4fromPxPyPz( chargedHadronPx_modified, chargedHadronPy_modified, chargedHadronPz_modified); } else { - edm::LogInfo("PFRecoTauEnergyAlgorithmPlugin::operator()") - << "PFRecoTauChargedHadron has no associated reco::Track !!"; + // don't print warning as it is caused by missing detailed track inforamtion in lostTrack in miniAOD + if (!(chargedHadron.algoIs(PFRecoTauChargedHadron::kTrack) && + chargedHadron.getLostTrackCandidate().isNonnull() && + chargedHadron.getLostTrackCandidate()->bestTrack() == nullptr)) { + edm::LogInfo("PFRecoTauEnergyAlgorithmPlugin::operator()") + << "PFRecoTauChargedHadron has no associated reco::Track !!"; + } if (verbosity_) { chargedHadron.print(); } diff --git a/RecoTauTag/RecoTau/plugins/PFTauSelectorDefinition.h b/RecoTauTag/RecoTau/plugins/PFTauSelectorDefinition.h index 8ea50c1e1bab2..2fd693f6b6d6b 100644 --- a/RecoTauTag/RecoTau/plugins/PFTauSelectorDefinition.h +++ b/RecoTauTag/RecoTau/plugins/PFTauSelectorDefinition.h @@ -96,7 +96,7 @@ struct PFTauSelectorDefinition { if (phID_ != e.processHistoryID()) { phID_ = e.processHistoryID(); for (auto& disc : discriminatorContainers_) { - auto const& psetsFromProvenance = edm::parameterSet(*disc.handle.provenance(), e.processHistory()); + auto const& psetsFromProvenance = edm::parameterSet(disc.handle.provenance()->stable(), e.processHistory()); // find raw value indices if (psetsFromProvenance.exists("rawValues")) { auto const idlist = psetsFromProvenance.getParameter>("rawValues"); diff --git a/RecoTauTag/RecoTau/plugins/RecoTauPiZeroStripPlugin2.cc b/RecoTauTag/RecoTau/plugins/RecoTauPiZeroStripPlugin2.cc index 26bbb07d39227..1be64b49e9cce 100644 --- a/RecoTauTag/RecoTau/plugins/RecoTauPiZeroStripPlugin2.cc +++ b/RecoTauTag/RecoTau/plugins/RecoTauPiZeroStripPlugin2.cc @@ -25,6 +25,7 @@ #include "DataFormats/JetReco/interface/PFJet.h" #include "CommonTools/CandUtils/interface/AddFourMomenta.h" #include "DataFormats/Math/interface/deltaPhi.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "RecoTauTag/RecoTau/interface/RecoTauCommonUtilities.h" #include "RecoTauTag/RecoTau/interface/RecoTauQualityCuts.h" diff --git a/RecoTauTag/RecoTau/plugins/RecoTauPiZeroStripPlugin3.cc b/RecoTauTag/RecoTau/plugins/RecoTauPiZeroStripPlugin3.cc index 30145c0e76d1b..6c1f431686ee7 100644 --- a/RecoTauTag/RecoTau/plugins/RecoTauPiZeroStripPlugin3.cc +++ b/RecoTauTag/RecoTau/plugins/RecoTauPiZeroStripPlugin3.cc @@ -25,6 +25,7 @@ #include "DataFormats/JetReco/interface/PFJet.h" #include "CommonTools/CandUtils/interface/AddFourMomenta.h" #include "DataFormats/Math/interface/deltaPhi.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "RecoTauTag/RecoTau/interface/RecoTauCommonUtilities.h" #include "RecoTauTag/RecoTau/interface/RecoTauQualityCuts.h" diff --git a/RecoTauTag/RecoTau/src/DeepTauBase.cc b/RecoTauTag/RecoTau/src/DeepTauBase.cc index 19a0ea390bb0b..4db4610cf2706 100644 --- a/RecoTauTag/RecoTau/src/DeepTauBase.cc +++ b/RecoTauTag/RecoTau/src/DeepTauBase.cc @@ -54,7 +54,7 @@ namespace deep_tau { std::unique_ptr DeepTauBase::Output::get_value(const edm::Handle& taus, const tensorflow::Tensor& pred, - const WPList& working_points, + const WPList* working_points, bool is_online) const { std::vector outputbuffer(taus->size()); @@ -69,9 +69,11 @@ namespace deep_tau { x = den_val != 0 ? x / den_val : std::numeric_limits::max(); } outputbuffer[tau_index].rawValues.push_back(x); - for (const auto& wp : working_points) { - const bool pass = x > (*wp)(taus->at(tau_index), is_online); - outputbuffer[tau_index].workingPoints.push_back(pass); + if (working_points) { + for (const auto& wp : *working_points) { + const bool pass = x > (*wp)(taus->at(tau_index), is_online); + outputbuffer[tau_index].workingPoints.push_back(pass); + } } } std::unique_ptr output = std::make_unique(); @@ -174,7 +176,11 @@ namespace deep_tau { void DeepTauBase::createOutputs(edm::Event& event, const tensorflow::Tensor& pred, edm::Handle taus) { for (const auto& output_desc : outputs_) { - auto result = output_desc.second.get_value(taus, pred, workingPoints_.at(output_desc.first), is_online_); + const WPList* working_points = nullptr; + if (workingPoints_.find(output_desc.first) != workingPoints_.end()) { + working_points = &workingPoints_.at(output_desc.first); + } + auto result = output_desc.second.get_value(taus, pred, working_points, is_online_); event.put(std::move(result), output_desc.first); } } diff --git a/RecoTauTag/RecoTau/src/PFRecoTauClusterVariables.cc b/RecoTauTag/RecoTau/src/PFRecoTauClusterVariables.cc index 2d570a0c1f5d6..34b615798b75b 100644 --- a/RecoTauTag/RecoTau/src/PFRecoTauClusterVariables.cc +++ b/RecoTauTag/RecoTau/src/PFRecoTauClusterVariables.cc @@ -83,8 +83,14 @@ namespace reco { if (signal_pfcand != nullptr) { ecal_en_in_signal_pf_cands += signal_pfcand->ecalEnergy(); hcal_en_in_signal_pf_cands += signal_pfcand->hcalEnergy(); + } else { + // TauReco@MiniAOD: individual ECAL and HCAL energies recovered from fractions + const pat::PackedCandidate* signal_pcand = dynamic_cast(signal_cand.get()); + assert(signal_pcand); // Taus are built either from reco::PFCandidates or pat::PackedCandidates + float calo_en = signal_pcand->caloFraction() * signal_pcand->energy(); + ecal_en_in_signal_pf_cands += calo_en * (1. - signal_pcand->hcalFraction()); + hcal_en_in_signal_pf_cands += calo_en * signal_pcand->hcalFraction(); } - // TauReco@MiniAOD: recalculate for PackedCandidate if added to MiniAOD event content } float total = ecal_en_in_signal_pf_cands + hcal_en_in_signal_pf_cands; if (total == 0.) { diff --git a/RecoTauTag/RecoTau/src/RecoTauConstructor.cc b/RecoTauTag/RecoTau/src/RecoTauConstructor.cc index 42326c79431c9..c20c8d06a5e65 100644 --- a/RecoTauTag/RecoTau/src/RecoTauConstructor.cc +++ b/RecoTauTag/RecoTau/src/RecoTauConstructor.cc @@ -8,6 +8,7 @@ #include "DataFormats/Math/interface/deltaR.h" #include "RecoTauTag/RecoTau/interface/pfRecoTauChargedHadronAuxFunctions.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" namespace reco::tau { diff --git a/RecoTauTag/RecoTau/src/RecoTauVertexAssociator.cc b/RecoTauTag/RecoTau/src/RecoTauVertexAssociator.cc index 9d6993ef2c4b2..83c53762ec5c7 100644 --- a/RecoTauTag/RecoTau/src/RecoTauVertexAssociator.cc +++ b/RecoTauTag/RecoTau/src/RecoTauVertexAssociator.cc @@ -7,6 +7,7 @@ #include "DataFormats/PatCandidates/interface/PackedCandidate.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "RecoTauTag/RecoTau/interface/RecoTauCommonUtilities.h" #include "DataFormats/GsfTrackReco/interface/GsfTrack.h" #include "DataFormats/TrackReco/interface/Track.h" diff --git a/RecoTracker/Configuration/python/RecoTrackerTopBottom_cff.py b/RecoTracker/Configuration/python/RecoTrackerTopBottom_cff.py index d937f2c0f09f2..f0ffa9f85d812 100644 --- a/RecoTracker/Configuration/python/RecoTrackerTopBottom_cff.py +++ b/RecoTracker/Configuration/python/RecoTrackerTopBottom_cff.py @@ -81,13 +81,16 @@ SeedsFromNegativeY = False, ClusterCollectionLabel = 'siStripClustersTop', MaxNumberOfCosmicClusters = 150, + + OrderedHitsFactoryPSets = {0: dict(LayerSrc = "combinatorialcosmicseedingtripletsP5Top"), + 1: dict(LayerSrc = "combinatorialcosmicseedingpairsTOBP5Top"), + 2: dict(LayerSrc = "combinatorialcosmicseedingpairsTECposP5Top"), + 3: dict(LayerSrc = "combinatorialcosmicseedingpairsTECposP5Top"), + 4: dict(LayerSrc = "combinatorialcosmicseedingpairsTECnegP5Top"), + 5: dict(LayerSrc = "combinatorialcosmicseedingpairsTECnegP5Top") + } + ) -combinatorialcosmicseedfinderP5Top.OrderedHitsFactoryPSets[0].LayerSrc = "combinatorialcosmicseedingtripletsP5Top" -combinatorialcosmicseedfinderP5Top.OrderedHitsFactoryPSets[1].LayerSrc = "combinatorialcosmicseedingpairsTOBP5Top" -combinatorialcosmicseedfinderP5Top.OrderedHitsFactoryPSets[2].LayerSrc = "combinatorialcosmicseedingpairsTECposP5Top" -combinatorialcosmicseedfinderP5Top.OrderedHitsFactoryPSets[3].LayerSrc = "combinatorialcosmicseedingpairsTECposP5Top" -combinatorialcosmicseedfinderP5Top.OrderedHitsFactoryPSets[4].LayerSrc = "combinatorialcosmicseedingpairsTECnegP5Top" -combinatorialcosmicseedfinderP5Top.OrderedHitsFactoryPSets[5].LayerSrc = "combinatorialcosmicseedingpairsTECnegP5Top" simpleCosmicBONSeedingLayersTop = simpleCosmicBONSeedingLayers.clone( TIB = dict(matchedRecHits = 'siStripMatchedRecHitsTop:matchedRecHit'), @@ -179,20 +182,15 @@ SeedsFromPositiveY = False, SeedsFromNegativeY = True, ClusterCollectionLabel = 'siStripClustersBottom', - MaxNumberOfCosmicClusters = 150 + MaxNumberOfCosmicClusters = 150, + OrderedHitsFactoryPSets = {0: dict(PropagationDirection = 'oppositeToMomentum', LayerSrc = "combinatorialcosmicseedingtripletsP5Bottom"), + 1: dict(PropagationDirection = 'oppositeToMomentum', LayerSrc = "combinatorialcosmicseedingpairsTOBP5Bottom"), + 2: dict(PropagationDirection = 'oppositeToMomentum', LayerSrc = "combinatorialcosmicseedingpairsTECposP5Bottom"), + 3: dict(PropagationDirection = 'oppositeToMomentum', LayerSrc = "combinatorialcosmicseedingpairsTECposP5Bottom"), + 4: dict(PropagationDirection = 'oppositeToMomentum', LayerSrc = "combinatorialcosmicseedingpairsTECnegP5Bottom"), + 5: dict(PropagationDirection = 'oppositeToMomentum', LayerSrc = "combinatorialcosmicseedingpairsTECnegP5Bottom"), + } ) -combinatorialcosmicseedfinderP5Bottom.OrderedHitsFactoryPSets[0].PropagationDirection = 'oppositeToMomentum' -combinatorialcosmicseedfinderP5Bottom.OrderedHitsFactoryPSets[1].PropagationDirection = 'oppositeToMomentum' -combinatorialcosmicseedfinderP5Bottom.OrderedHitsFactoryPSets[2].PropagationDirection = 'oppositeToMomentum' -combinatorialcosmicseedfinderP5Bottom.OrderedHitsFactoryPSets[3].PropagationDirection = 'oppositeToMomentum' -combinatorialcosmicseedfinderP5Bottom.OrderedHitsFactoryPSets[4].PropagationDirection = 'oppositeToMomentum' -combinatorialcosmicseedfinderP5Bottom.OrderedHitsFactoryPSets[5].PropagationDirection = 'oppositeToMomentum' -combinatorialcosmicseedfinderP5Bottom.OrderedHitsFactoryPSets[0].LayerSrc = "combinatorialcosmicseedingtripletsP5Bottom" -combinatorialcosmicseedfinderP5Bottom.OrderedHitsFactoryPSets[1].LayerSrc = "combinatorialcosmicseedingpairsTOBP5Bottom" -combinatorialcosmicseedfinderP5Bottom.OrderedHitsFactoryPSets[2].LayerSrc = "combinatorialcosmicseedingpairsTECposP5Bottom" -combinatorialcosmicseedfinderP5Bottom.OrderedHitsFactoryPSets[3].LayerSrc = "combinatorialcosmicseedingpairsTECposP5Bottom" -combinatorialcosmicseedfinderP5Bottom.OrderedHitsFactoryPSets[4].LayerSrc = "combinatorialcosmicseedingpairsTECnegP5Bottom" -combinatorialcosmicseedfinderP5Bottom.OrderedHitsFactoryPSets[5].LayerSrc = "combinatorialcosmicseedingpairsTECnegP5Bottom" simpleCosmicBONSeedingLayersBottom = simpleCosmicBONSeedingLayers.clone( TIB = dict(matchedRecHits = 'siStripMatchedRecHitsBottom:matchedRecHit'), diff --git a/RecoTracker/ConversionSeedGenerators/python/ConversionStep2_cff.py b/RecoTracker/ConversionSeedGenerators/python/ConversionStep2_cff.py index b8a3fa27dc5fd..5028c95d83d39 100644 --- a/RecoTracker/ConversionSeedGenerators/python/ConversionStep2_cff.py +++ b/RecoTracker/ConversionSeedGenerators/python/ConversionStep2_cff.py @@ -188,8 +188,8 @@ ) -photonConvTrajSeedFromQuadruplets.TrackRefitter = cms.InputTag('generalTracks') -photonConvTrajSeedFromQuadruplets.primaryVerticesTag = cms.InputTag('pixelVertices') +photonConvTrajSeedFromQuadruplets.TrackRefitter = 'generalTracks' +photonConvTrajSeedFromQuadruplets.primaryVerticesTag = 'pixelVertices' # TRACKER DATA CONTROL diff --git a/RecoTracker/ConversionSeedGenerators/python/ConversionStep_cff.py b/RecoTracker/ConversionSeedGenerators/python/ConversionStep_cff.py index d07c6d1233926..33784db679d14 100644 --- a/RecoTracker/ConversionSeedGenerators/python/ConversionStep_cff.py +++ b/RecoTracker/ConversionSeedGenerators/python/ConversionStep_cff.py @@ -204,7 +204,7 @@ _convLayerPairsLayerListPhaseI.extend(_convLayerPairsStripOnlyLayers) from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(convLayerPairs, layerList = cms.vstring(_convLayerPairsLayerListPhaseI)) +trackingPhase1.toModify(convLayerPairs, layerList = _convLayerPairsLayerListPhaseI) trackingPhase2PU140.toReplaceWith(convLayerPairs, cms.EDProducer('SeedingLayersEDProducer', @@ -244,10 +244,10 @@ ) ) -photonConvTrajSeedFromSingleLeg.TrackRefitter = cms.InputTag('generalTracks') -photonConvTrajSeedFromSingleLeg.primaryVerticesTag = cms.InputTag('firstStepPrimaryVertices') -#photonConvTrajSeedFromQuadruplets.TrackRefitter = cms.InputTag('generalTracks') -#photonConvTrajSeedFromQuadruplets.primaryVerticesTag = cms.InputTag('pixelVertices') +photonConvTrajSeedFromSingleLeg.TrackRefitter = 'generalTracks' +photonConvTrajSeedFromSingleLeg.primaryVerticesTag = 'firstStepPrimaryVertices' +#photonConvTrajSeedFromQuadruplets.TrackRefitter = 'generalTracks' +#photonConvTrajSeedFromQuadruplets.primaryVerticesTag = 'pixelVertices' from Configuration.Eras.Modifier_trackingLowPU_cff import trackingLowPU trackingLowPU.toModify(photonConvTrajSeedFromSingleLeg, primaryVerticesTag = 'pixelVertices') from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA diff --git a/RecoTracker/DeDx/interface/ASmirnovDeDxDiscriminator.h b/RecoTracker/DeDx/interface/ASmirnovDeDxDiscriminator.h index 33f2a9a5ce5f2..191fbecaa741f 100644 --- a/RecoTracker/DeDx/interface/ASmirnovDeDxDiscriminator.h +++ b/RecoTracker/DeDx/interface/ASmirnovDeDxDiscriminator.h @@ -7,16 +7,17 @@ class ASmirnovDeDxDiscriminator : public BaseDeDxEstimator { public: - ASmirnovDeDxDiscriminator(const edm::ParameterSet& iConfig) { + ASmirnovDeDxDiscriminator(const edm::ParameterSet& iConfig, edm::ConsumesCollector& iCollector) + : token_(DeDxTools::esConsumes(iConfig.getParameter("Reccord"), iCollector)) { meVperADCStrip = iConfig.getParameter("MeVperADCStrip"); //currently needed until the map on the database are redone - Reccord = iConfig.getParameter("Reccord"); ProbabilityMode = iConfig.getParameter("ProbabilityMode"); Prob_ChargePath = nullptr; } void beginRun(edm::Run const& run, const edm::EventSetup& iSetup) override { - DeDxTools::buildDiscrimMap(run, iSetup, Reccord, ProbabilityMode, Prob_ChargePath); + auto const& histD3D = DeDxTools::getHistogramD3D(iSetup, token_); + DeDxTools::buildDiscrimMap(histD3D, ProbabilityMode, Prob_ChargePath); } std::pair dedx(const reco::DeDxHitCollection& Hits) override { @@ -50,7 +51,7 @@ class ASmirnovDeDxDiscriminator : public BaseDeDxEstimator { private: float meVperADCStrip; - std::string Reccord; + DeDxTools::ESGetTokenH3DDVariant token_; std::string ProbabilityMode; TH3F* Prob_ChargePath; }; diff --git a/RecoTracker/DeDx/interface/BTagLikeDeDxDiscriminator.h b/RecoTracker/DeDx/interface/BTagLikeDeDxDiscriminator.h index a69c8aa9fc962..e8722510c6cd6 100644 --- a/RecoTracker/DeDx/interface/BTagLikeDeDxDiscriminator.h +++ b/RecoTracker/DeDx/interface/BTagLikeDeDxDiscriminator.h @@ -7,16 +7,17 @@ class BTagLikeDeDxDiscriminator : public BaseDeDxEstimator { public: - BTagLikeDeDxDiscriminator(const edm::ParameterSet& iConfig) { + BTagLikeDeDxDiscriminator(const edm::ParameterSet& iConfig, edm::ConsumesCollector& iCollector) + : token_(DeDxTools::esConsumes(iConfig.getParameter("Reccord"), iCollector)) { meVperADCStrip = iConfig.getParameter("MeVperADCStrip"); //currently needed until the map on the database are redone - Reccord = iConfig.getParameter("Reccord"); ProbabilityMode = iConfig.getParameter("ProbabilityMode"); Prob_ChargePath = nullptr; } void beginRun(edm::Run const& run, const edm::EventSetup& iSetup) override { - DeDxTools::buildDiscrimMap(run, iSetup, Reccord, ProbabilityMode, Prob_ChargePath); + auto const& histD3D = DeDxTools::getHistogramD3D(iSetup, token_); + DeDxTools::buildDiscrimMap(histD3D, ProbabilityMode, Prob_ChargePath); } std::pair dedx(const reco::DeDxHitCollection& Hits) override { @@ -66,7 +67,7 @@ class BTagLikeDeDxDiscriminator : public BaseDeDxEstimator { private: float meVperADCStrip; - std::string Reccord; + DeDxTools::ESGetTokenH3DDVariant token_; std::string ProbabilityMode; TH3F* Prob_ChargePath; }; diff --git a/RecoTracker/DeDx/interface/DeDxTools.h b/RecoTracker/DeDx/interface/DeDxTools.h index e7ea7b3d621f1..70c304eec364c 100644 --- a/RecoTracker/DeDx/interface/DeDxTools.h +++ b/RecoTracker/DeDx/interface/DeDxTools.h @@ -4,9 +4,6 @@ #include #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "DataFormats/GeometryCommonDetAlgo/interface/Measurement1D.h" #include "DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h" @@ -46,16 +43,23 @@ namespace DeDxTools { int getCharge(const SiStripCluster* cluster, int& nSatStrip, const GeomDetUnit& detUnit, - const std::vector >& calibGains, + const std::vector>& calibGains, const unsigned int& m_off); void makeCalibrationMap(const std::string& m_calibrationPath, const TrackerGeometry& tkGeom, - std::vector >& calibGains, + std::vector>& calibGains, const unsigned int& m_off); - void buildDiscrimMap(edm::Run const& run, - const edm::EventSetup& iSetup, - std::string Reccord, - std::string ProbabilityMode, + + using H3DD = PhysicsTools::Calibration::HistogramD3D; + using ESGetTokenH3DDVariant = std::variant, + edm::ESGetToken, + edm::ESGetToken, + edm::ESGetToken, + edm::ESGetToken>; + ESGetTokenH3DDVariant esConsumes(std::string const& Reccord, edm::ConsumesCollector&); + PhysicsTools::Calibration::HistogramD3D const& getHistogramD3D(edm::EventSetup const&, ESGetTokenH3DDVariant const&); + void buildDiscrimMap(PhysicsTools::Calibration::HistogramD3D const&, + std::string const& ProbabilityMode, TH3F*& Prob_ChargePath); bool IsSpanningOver2APV(unsigned int FirstStrip, unsigned int ClusterSize); bool IsFarFromBorder(const TrajectoryStateOnSurface& trajState, const GeomDetUnit* it); diff --git a/RecoTracker/DeDx/interface/ProductDeDxDiscriminator.h b/RecoTracker/DeDx/interface/ProductDeDxDiscriminator.h index 5e9f931f83641..471f3e721d312 100644 --- a/RecoTracker/DeDx/interface/ProductDeDxDiscriminator.h +++ b/RecoTracker/DeDx/interface/ProductDeDxDiscriminator.h @@ -7,16 +7,17 @@ class ProductDeDxDiscriminator : public BaseDeDxEstimator { public: - ProductDeDxDiscriminator(const edm::ParameterSet& iConfig) { + ProductDeDxDiscriminator(const edm::ParameterSet& iConfig, edm::ConsumesCollector& iCollector) + : token_(DeDxTools::esConsumes(iConfig.getParameter("Reccord"), iCollector)) { meVperADCStrip = iConfig.getParameter("MeVperADCStrip"); //currently needed until the map on the database are redone - Reccord = iConfig.getParameter("Reccord"); ProbabilityMode = iConfig.getParameter("ProbabilityMode"); Prob_ChargePath = nullptr; } - void beginRun(edm::Run const& run, const edm::EventSetup& iSetup) override { - DeDxTools::buildDiscrimMap(run, iSetup, Reccord, ProbabilityMode, Prob_ChargePath); + void beginRun(edm::Run const&, const edm::EventSetup& iSetup) override { + auto const& histD3D = DeDxTools::getHistogramD3D(iSetup, token_); + DeDxTools::buildDiscrimMap(histD3D, ProbabilityMode, Prob_ChargePath); } std::pair dedx(const reco::DeDxHitCollection& Hits) override { @@ -52,7 +53,7 @@ class ProductDeDxDiscriminator : public BaseDeDxEstimator { private: float meVperADCStrip; - std::string Reccord; + DeDxTools::ESGetTokenH3DDVariant token_; std::string ProbabilityMode; TH3F* Prob_ChargePath; }; diff --git a/RecoTracker/DeDx/interface/SmirnovDeDxDiscriminator.h b/RecoTracker/DeDx/interface/SmirnovDeDxDiscriminator.h index 14fb588b11e43..e519f5fdc7a25 100644 --- a/RecoTracker/DeDx/interface/SmirnovDeDxDiscriminator.h +++ b/RecoTracker/DeDx/interface/SmirnovDeDxDiscriminator.h @@ -7,16 +7,17 @@ class SmirnovDeDxDiscriminator : public BaseDeDxEstimator { public: - SmirnovDeDxDiscriminator(const edm::ParameterSet& iConfig) { + SmirnovDeDxDiscriminator(const edm::ParameterSet& iConfig, edm::ConsumesCollector& iCollector) + : token_(DeDxTools::esConsumes(iConfig.getParameter("Reccord"), iCollector)) { meVperADCStrip = iConfig.getParameter("MeVperADCStrip"); //currently needed until the map on the database are redone - Reccord = iConfig.getParameter("Reccord"); ProbabilityMode = iConfig.getParameter("ProbabilityMode"); Prob_ChargePath = nullptr; } void beginRun(edm::Run const& run, const edm::EventSetup& iSetup) override { - DeDxTools::buildDiscrimMap(run, iSetup, Reccord, ProbabilityMode, Prob_ChargePath); + auto const& histD3D = DeDxTools::getHistogramD3D(iSetup, token_); + DeDxTools::buildDiscrimMap(histD3D, ProbabilityMode, Prob_ChargePath); } std::pair dedx(const reco::DeDxHitCollection& Hits) override { @@ -50,7 +51,7 @@ class SmirnovDeDxDiscriminator : public BaseDeDxEstimator { private: float meVperADCStrip; - std::string Reccord; + DeDxTools::ESGetTokenH3DDVariant token_; std::string ProbabilityMode; TH3F* Prob_ChargePath; }; diff --git a/RecoTracker/DeDx/plugins/DeDxEstimatorProducer.cc b/RecoTracker/DeDx/plugins/DeDxEstimatorProducer.cc index 028f38b72eca7..9e31867cd27f0 100644 --- a/RecoTracker/DeDx/plugins/DeDxEstimatorProducer.cc +++ b/RecoTracker/DeDx/plugins/DeDxEstimatorProducer.cc @@ -20,6 +20,7 @@ // system include files #include "RecoTracker/DeDx/plugins/DeDxEstimatorProducer.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" using namespace reco; using namespace std; @@ -44,28 +45,30 @@ void DeDxEstimatorProducer::fillDescriptions(edm::ConfigurationDescriptions& des descriptions.add("DeDxEstimatorProducer", desc); } -DeDxEstimatorProducer::DeDxEstimatorProducer(const edm::ParameterSet& iConfig) { +DeDxEstimatorProducer::DeDxEstimatorProducer(const edm::ParameterSet& iConfig) + : tkGeomToken(esConsumes()) { produces>(); + auto cCollector = consumesCollector(); string estimatorName = iConfig.getParameter("estimator"); if (estimatorName == "median") - m_estimator = new MedianDeDxEstimator(iConfig); + m_estimator = std::make_unique(iConfig); else if (estimatorName == "generic") - m_estimator = new GenericAverageDeDxEstimator(iConfig); + m_estimator = std::make_unique(iConfig); else if (estimatorName == "truncated") - m_estimator = new TruncatedAverageDeDxEstimator(iConfig); + m_estimator = std::make_unique(iConfig); else if (estimatorName == "genericTruncated") - m_estimator = new GenericTruncatedAverageDeDxEstimator(iConfig); + m_estimator = std::make_unique(iConfig); else if (estimatorName == "unbinnedFit") - m_estimator = new UnbinnedFitDeDxEstimator(iConfig); + m_estimator = std::make_unique(iConfig); else if (estimatorName == "productDiscrim") - m_estimator = new ProductDeDxDiscriminator(iConfig); + m_estimator = std::make_unique(iConfig, cCollector); else if (estimatorName == "btagDiscrim") - m_estimator = new BTagLikeDeDxDiscriminator(iConfig); + m_estimator = std::make_unique(iConfig, cCollector); else if (estimatorName == "smirnovDiscrim") - m_estimator = new SmirnovDeDxDiscriminator(iConfig); + m_estimator = std::make_unique(iConfig, cCollector); else if (estimatorName == "asmirnovDiscrim") - m_estimator = new ASmirnovDeDxDiscriminator(iConfig); + m_estimator = std::make_unique(iConfig, cCollector); //Commented for now, might be used in the future // MaxNrStrips = iConfig.getUntrackedParameter("maxNrStrips" , 255); @@ -86,11 +89,11 @@ DeDxEstimatorProducer::DeDxEstimatorProducer(const edm::ParameterSet& iConfig) { << "Pixel Hits AND Strip Hits will not be used to estimate dEdx --> BUG, Please Update the config file"; } -DeDxEstimatorProducer::~DeDxEstimatorProducer() { delete m_estimator; } +DeDxEstimatorProducer::~DeDxEstimatorProducer() {} // ------------ method called once each job just before starting event loop ------------ void DeDxEstimatorProducer::beginRun(edm::Run const& run, const edm::EventSetup& iSetup) { - iSetup.get().get(tkGeom); + tkGeom = &iSetup.getData(tkGeomToken); if (useCalibration && calibGains.empty()) { m_off = tkGeom->offsetDU(GeomDetEnumerators::PixelBarrel); //index start at the first pixel diff --git a/RecoTracker/DeDx/plugins/DeDxEstimatorProducer.h b/RecoTracker/DeDx/plugins/DeDxEstimatorProducer.h index 7ffc324dad515..a77e88a84eaf1 100644 --- a/RecoTracker/DeDx/plugins/DeDxEstimatorProducer.h +++ b/RecoTracker/DeDx/plugins/DeDxEstimatorProducer.h @@ -60,7 +60,7 @@ class DeDxEstimatorProducer : public edm::stream::EDProducer<> { int& NClusterSaturating); // ----------member data --------------------------- - BaseDeDxEstimator* m_estimator; + std::unique_ptr m_estimator; edm::EDGetTokenT m_tracksTag; @@ -78,7 +78,8 @@ class DeDxEstimatorProducer : public edm::stream::EDProducer<> { std::vector > calibGains; unsigned int m_off; - edm::ESHandle tkGeom; + const edm::ESGetToken tkGeomToken; + const TrackerGeometry* tkGeom = nullptr; }; #endif diff --git a/RecoTracker/DeDx/python/dedxEstimatorsFromRefitter_cff.py b/RecoTracker/DeDx/python/dedxEstimatorsFromRefitter_cff.py index e64a36f8a20d8..6f1e3b503cf99 100644 --- a/RecoTracker/DeDx/python/dedxEstimatorsFromRefitter_cff.py +++ b/RecoTracker/DeDx/python/dedxEstimatorsFromRefitter_cff.py @@ -8,32 +8,32 @@ from RecoTracker.DeDx.dedxEstimators_cff import * -dedxHitInfo.tracks=cms.InputTag("RefitterForDeDx") -dedxHitInfo.trajectoryTrackAssociation = cms.InputTag("RefitterForDeDx") +dedxHitInfo.tracks="RefitterForDeDx" +dedxHitInfo.trajectoryTrackAssociation = "RefitterForDeDx" -dedxHarmonic2.tracks=cms.InputTag("RefitterForDeDx") -dedxHarmonic2.trajectoryTrackAssociation = cms.InputTag("RefitterForDeDx") +dedxHarmonic2.tracks="RefitterForDeDx" +dedxHarmonic2.trajectoryTrackAssociation = "RefitterForDeDx" -dedxTruncated40.tracks=cms.InputTag("RefitterForDeDx") -dedxTruncated40.trajectoryTrackAssociation = cms.InputTag("RefitterForDeDx") +dedxTruncated40.tracks="RefitterForDeDx" +dedxTruncated40.trajectoryTrackAssociation = "RefitterForDeDx" -dedxMedian.tracks=cms.InputTag("RefitterForDeDx") -dedxMedian.trajectoryTrackAssociation = cms.InputTag("RefitterForDeDx") +dedxMedian.tracks="RefitterForDeDx" +dedxMedian.trajectoryTrackAssociation = "RefitterForDeDx" -dedxUnbinned.tracks=cms.InputTag("RefitterForDeDx") -dedxUnbinned.trajectoryTrackAssociation = cms.InputTag("RefitterForDeDx") +dedxUnbinned.tracks="RefitterForDeDx" +dedxUnbinned.trajectoryTrackAssociation = "RefitterForDeDx" -dedxDiscrimProd.tracks=cms.InputTag("RefitterForDeDx") -dedxDiscrimProd.trajectoryTrackAssociation = cms.InputTag("RefitterForDeDx") +dedxDiscrimProd.tracks="RefitterForDeDx" +dedxDiscrimProd.trajectoryTrackAssociation = "RefitterForDeDx" -dedxDiscrimBTag.tracks=cms.InputTag("RefitterForDeDx") -dedxDiscrimBTag.trajectoryTrackAssociation = cms.InputTag("RefitterForDeDx") +dedxDiscrimBTag.tracks="RefitterForDeDx" +dedxDiscrimBTag.trajectoryTrackAssociation = "RefitterForDeDx" -dedxDiscrimSmi.tracks=cms.InputTag("RefitterForDeDx") -dedxDiscrimSmi.trajectoryTrackAssociation = cms.InputTag("RefitterForDeDx") +dedxDiscrimSmi.tracks="RefitterForDeDx" +dedxDiscrimSmi.trajectoryTrackAssociation = "RefitterForDeDx" -dedxDiscrimASmi.tracks=cms.InputTag("RefitterForDeDx") -dedxDiscrimASmi.trajectoryTrackAssociation = cms.InputTag("RefitterForDeDx") +dedxDiscrimASmi.tracks="RefitterForDeDx" +dedxDiscrimASmi.trajectoryTrackAssociation = "RefitterForDeDx" doAlldEdXEstimatorsTask = cms.Task(RefitterForDeDx, dedxTruncated40, dedxHarmonic2, dedxHitInfo ) doAlldEdXEstimators = cms.Sequence(doAlldEdXEstimatorsTask) diff --git a/RecoTracker/DeDx/src/DeDxTools.cc b/RecoTracker/DeDx/src/DeDxTools.cc index 04c072e226257..bbd85befd8b0c 100644 --- a/RecoTracker/DeDx/src/DeDxTools.cc +++ b/RecoTracker/DeDx/src/DeDxTools.cc @@ -1,3 +1,6 @@ +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Framework/interface/ESHandle.h" + #include "RecoTracker/DeDx/interface/DeDxTools.h" #include @@ -277,44 +280,63 @@ namespace DeDxTools { t1->Delete(); } - void buildDiscrimMap(edm::Run const& run, - const edm::EventSetup& iSetup, - std::string Reccord, - std::string ProbabilityMode, - TH3F*& Prob_ChargePath) { - edm::ESHandle deDxMapHandle; - if (strcmp(Reccord.c_str(), "SiStripDeDxMip_3D_Rcd") == 0) { - iSetup.get().get(deDxMapHandle); - } else if (strcmp(Reccord.c_str(), "SiStripDeDxPion_3D_Rcd") == 0) { - iSetup.get().get(deDxMapHandle); - } else if (strcmp(Reccord.c_str(), "SiStripDeDxKaon_3D_Rcd") == 0) { - iSetup.get().get(deDxMapHandle); - } else if (strcmp(Reccord.c_str(), "SiStripDeDxProton_3D_Rcd") == 0) { - iSetup.get().get(deDxMapHandle); - } else if (strcmp(Reccord.c_str(), "SiStripDeDxElectron_3D_Rcd") == 0) { - iSetup.get().get(deDxMapHandle); - } else { - throw cms::Exception("WrongReccord for dEdx") << "The reccord : " << Reccord << "is unknown\n"; + ESGetTokenH3DDVariant esConsumes(std::string const& Reccord, edm::ConsumesCollector& iCC) { + if (Reccord == "SiStripDeDxMip_3D_Rcd") { + return iCC.esConsumes(); + } + if (Reccord == "SiStripDeDxPion_3D_Rcd") { + return iCC.esConsumes(); + } + if (Reccord == "SiStripDeDxKaon_3D_Rcd") { + return iCC.esConsumes(); + } + if (Reccord == "SiStripDeDxProton_3D_Rcd") { + return iCC.esConsumes(); } + if (Reccord == "SiStripDeDxElectron_3D_Rcd") { + return iCC.esConsumes(); + } + throw cms::Exception("WrongReccord for dEdx") << "The reccord : " << Reccord << "is unknown\n"; + } + + PhysicsTools::Calibration::HistogramD3D const& getHistogramD3D(edm::EventSetup const& iES, + ESGetTokenH3DDVariant const& iToken) { + switch (iToken.index()) { + case 0: + return iES.getData(std::get<0>(iToken)); + case 1: + return iES.getData(std::get<1>(iToken)); + case 2: + return iES.getData(std::get<2>(iToken)); + case 3: + return iES.getData(std::get<3>(iToken)); + case 4: + return iES.getData(std::get<4>(iToken)); + } + throw cms::Exception("HistogramD3DTokenUnset"); + } - float xmin = deDxMapHandle->rangeX().min; - float xmax = deDxMapHandle->rangeX().max; - float ymin = deDxMapHandle->rangeY().min; - float ymax = deDxMapHandle->rangeY().max; - float zmin = deDxMapHandle->rangeZ().min; - float zmax = deDxMapHandle->rangeZ().max; + void buildDiscrimMap(PhysicsTools::Calibration::HistogramD3D const& deDxMap, + std::string const& ProbabilityMode, + TH3F*& Prob_ChargePath) { + float xmin = deDxMap.rangeX().min; + float xmax = deDxMap.rangeX().max; + float ymin = deDxMap.rangeY().min; + float ymax = deDxMap.rangeY().max; + float zmin = deDxMap.rangeZ().min; + float zmax = deDxMap.rangeZ().max; if (Prob_ChargePath) delete Prob_ChargePath; Prob_ChargePath = new TH3F("Prob_ChargePath", "Prob_ChargePath", - deDxMapHandle->numberOfBinsX(), + deDxMap.numberOfBinsX(), xmin, xmax, - deDxMapHandle->numberOfBinsY(), + deDxMap.numberOfBinsY(), ymin, ymax, - deDxMapHandle->numberOfBinsZ(), + deDxMap.numberOfBinsZ(), zmin, zmax); @@ -323,12 +345,12 @@ namespace DeDxTools { for (int j = 0; j <= Prob_ChargePath->GetYaxis()->GetNbins() + 1; j++) { float Ni = 0; for (int k = 0; k <= Prob_ChargePath->GetZaxis()->GetNbins() + 1; k++) { - Ni += deDxMapHandle->binContent(i, j, k); + Ni += deDxMap.binContent(i, j, k); } for (int k = 0; k <= Prob_ChargePath->GetZaxis()->GetNbins() + 1; k++) { float tmp = 0; for (int l = 0; l <= k; l++) { - tmp += deDxMapHandle->binContent(i, j, l); + tmp += deDxMap.binContent(i, j, l); } if (Ni > 0) { Prob_ChargePath->SetBinContent(i, j, k, tmp / Ni); @@ -343,10 +365,10 @@ namespace DeDxTools { for (int j = 0; j <= Prob_ChargePath->GetYaxis()->GetNbins() + 1; j++) { float Ni = 0; for (int k = 0; k <= Prob_ChargePath->GetZaxis()->GetNbins() + 1; k++) { - Ni += deDxMapHandle->binContent(i, j, k); + Ni += deDxMap.binContent(i, j, k); } for (int k = 0; k <= Prob_ChargePath->GetZaxis()->GetNbins() + 1; k++) { - float tmp = deDxMapHandle->binContent(i, j, k); + float tmp = deDxMap.binContent(i, j, k); if (Ni > 0) { Prob_ChargePath->SetBinContent(i, j, k, tmp / Ni); } else { diff --git a/RecoTracker/FinalTrackSelectors/BuildFile.xml b/RecoTracker/FinalTrackSelectors/BuildFile.xml index e6243faae53a8..c3b79de3f91c6 100644 --- a/RecoTracker/FinalTrackSelectors/BuildFile.xml +++ b/RecoTracker/FinalTrackSelectors/BuildFile.xml @@ -4,9 +4,11 @@ - + + + diff --git a/RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h b/RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h new file mode 100644 index 0000000000000..1ecee9699ed8b --- /dev/null +++ b/RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h @@ -0,0 +1,21 @@ +#ifndef RecoTracker_FinalTrackSelectors_TfGraphDefWrapper_h +#define RecoTracker_FinalTrackSelectors_TfGraphDefWrapper_h + +#include "PhysicsTools/TensorFlow/interface/TensorFlow.h" + +class TfGraphDefWrapper { +public: + TfGraphDefWrapper(tensorflow::Session*, tensorflow::GraphDef*); + ~TfGraphDefWrapper(); + TfGraphDefWrapper(const TfGraphDefWrapper&) = delete; + TfGraphDefWrapper& operator=(const TfGraphDefWrapper&) = delete; + TfGraphDefWrapper(TfGraphDefWrapper&&) = delete; + TfGraphDefWrapper& operator=(TfGraphDefWrapper&&) = delete; + const tensorflow::Session* getSession() const; + +private: + tensorflow::Session* session_; + std::unique_ptr graph_; +}; + +#endif diff --git a/RecoTracker/FinalTrackSelectors/interface/TrackMVAClassifier.h b/RecoTracker/FinalTrackSelectors/interface/TrackMVAClassifier.h index e433fe5bed0cd..e394d9f694a0a 100644 --- a/RecoTracker/FinalTrackSelectors/interface/TrackMVAClassifier.h +++ b/RecoTracker/FinalTrackSelectors/interface/TrackMVAClassifier.h @@ -13,7 +13,7 @@ #include "FWCore/Utilities/interface/InputTag.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include #include diff --git a/RecoTracker/FinalTrackSelectors/plugins/BuildFile.xml b/RecoTracker/FinalTrackSelectors/plugins/BuildFile.xml index d1cb9b44440dc..a86a5ebe517ce 100644 --- a/RecoTracker/FinalTrackSelectors/plugins/BuildFile.xml +++ b/RecoTracker/FinalTrackSelectors/plugins/BuildFile.xml @@ -27,7 +27,7 @@ - + diff --git a/RecoTracker/FinalTrackSelectors/plugins/DuplicateTrackMerger.cc b/RecoTracker/FinalTrackSelectors/plugins/DuplicateTrackMerger.cc index 0bd101844174c..100d6d9d7bc25 100644 --- a/RecoTracker/FinalTrackSelectors/plugins/DuplicateTrackMerger.cc +++ b/RecoTracker/FinalTrackSelectors/plugins/DuplicateTrackMerger.cc @@ -30,7 +30,7 @@ #include #include -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" #include "CondFormats/DataRecord/interface/GBRWrapperRcd.h" #include "TrackingTools/Records/interface/TrackingComponentsRecord.h" diff --git a/RecoTracker/FinalTrackSelectors/plugins/MultiTrackSelector.h b/RecoTracker/FinalTrackSelectors/plugins/MultiTrackSelector.h index 95eaf57e689ec..a4884a3a1b51c 100644 --- a/RecoTracker/FinalTrackSelectors/plugins/MultiTrackSelector.h +++ b/RecoTracker/FinalTrackSelectors/plugins/MultiTrackSelector.h @@ -30,7 +30,7 @@ #include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit1D.h" #include "CommonTools/Utils/interface/StringCutObjectSelector.h" -#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "CondFormats/GBRForest/interface/GBRForest.h" class dso_hidden MultiTrackSelector : public edm::stream::EDProducer<> { private: diff --git a/RecoTracker/FinalTrackSelectors/plugins/TfGraphDefProducer.cc b/RecoTracker/FinalTrackSelectors/plugins/TfGraphDefProducer.cc new file mode 100644 index 0000000000000..22377cb7468ab --- /dev/null +++ b/RecoTracker/FinalTrackSelectors/plugins/TfGraphDefProducer.cc @@ -0,0 +1,64 @@ +// -*- C++ -*- +// +// Package: RecoTracker/FinalTrackSelectors +// Class: TFGraphDefProducer +// +/**\class TFGraphDefProducer + Description: Produces TfGraphRecord into the event containing a tensorflow GraphDef object that can be used for running inference on a pretrained network +*/ +// +// Original Author: Joona Havukainen +// Created: Fri, 24 Jul 2020 08:04:00 GMT +// +// + +// system include files +#include + +// user include files +#include "FWCore/Framework/interface/ModuleFactory.h" +#include "FWCore/Framework/interface/ESProducer.h" + +#include "FWCore/Framework/interface/ESHandle.h" +#include "TrackingTools/Records/interface/TfGraphRecord.h" +#include "RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h" + +// class declaration + +class TfGraphDefProducer : public edm::ESProducer { +public: + TfGraphDefProducer(const edm::ParameterSet&); + using ReturnType = std::unique_ptr; + + ReturnType produce(const TfGraphRecord&); + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + const std::string filename_; + // ----------member data --------------------------- +}; + +TfGraphDefProducer::TfGraphDefProducer(const edm::ParameterSet& iConfig) + : filename_(iConfig.getParameter("FileName").fullPath()) { + auto componentName = iConfig.getParameter("ComponentName"); + setWhatProduced(this, componentName); +} + +// ------------ method called to produce the data ------------ +TfGraphDefProducer::ReturnType TfGraphDefProducer::produce(const TfGraphRecord& iRecord) { + auto* graph = tensorflow::loadGraphDef(filename_); + return std::make_unique(tensorflow::createSession(graph, 1), graph); +} + +void TfGraphDefProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("ComponentName", "tfGraphDef"); + desc.add("FileName"); + descriptions.add("tfGraphDefProducer", desc); +} + +//define this as a plug-in +#include "FWCore/PluginManager/interface/ModuleDef.h" +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_EVENTSETUP_MODULE(TfGraphDefProducer); diff --git a/RecoTracker/FinalTrackSelectors/plugins/TrackListMerger.cc b/RecoTracker/FinalTrackSelectors/plugins/TrackListMerger.cc index 00f14892810ff..afa5c02518d2e 100644 --- a/RecoTracker/FinalTrackSelectors/plugins/TrackListMerger.cc +++ b/RecoTracker/FinalTrackSelectors/plugins/TrackListMerger.cc @@ -761,7 +761,7 @@ void TrackListMerger::produce(edm::Event& e, const edm::EventSetup& es) { // the cluster collection either produced a removalInfo or mot //get the clusterremoval info from the provenance: will rekey if this is found edm::Handle CRIh; - edm::Provenance prov = e.getProvenance(pID); + edm::StableProvenance const& prov = e.getStableProvenance(pID); clusterRemovalInfos = edm::InputTag(prov.moduleLabel(), prov.productInstanceName(), prov.processName()); doRekeyOnThisSeed = e.getByLabel(clusterRemovalInfos, CRIh); } //valid hit diff --git a/RecoTracker/FinalTrackSelectors/plugins/TrackMerger.cc b/RecoTracker/FinalTrackSelectors/plugins/TrackMerger.cc index 2395903655bf7..e26eb719b3a9b 100644 --- a/RecoTracker/FinalTrackSelectors/plugins/TrackMerger.cc +++ b/RecoTracker/FinalTrackSelectors/plugins/TrackMerger.cc @@ -21,6 +21,7 @@ TrackMerger::TrackMerger(const edm::ParameterSet &iConfig, edm::ConsumesCollector cc) : useInnermostState_(iConfig.getParameter("useInnermostState")), + debug_(false), theBuilderName(iConfig.getParameter("ttrhBuilderName")), geometryToken_(cc.esConsumes()), magFieldToken_(cc.esConsumes()), diff --git a/RecoTracker/FinalTrackSelectors/plugins/TrackTfClassifier.cc b/RecoTracker/FinalTrackSelectors/plugins/TrackTfClassifier.cc new file mode 100644 index 0000000000000..9052194f5b606 --- /dev/null +++ b/RecoTracker/FinalTrackSelectors/plugins/TrackTfClassifier.cc @@ -0,0 +1,107 @@ +#include "RecoTracker/FinalTrackSelectors/interface/TrackMVAClassifier.h" + +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "getBestVertex.h" + +#include "TrackingTools/Records/interface/TfGraphRecord.h" +#include "PhysicsTools/TensorFlow/interface/TensorFlow.h" +#include "RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h" + +namespace { + class TfDnn { + public: + TfDnn(const edm::ParameterSet& cfg) + : tfDnnLabel_(cfg.getParameter("tfDnnLabel")), + session_(nullptr) + + {} + + static const char* name() { return "TrackTfClassifier"; } + + static void fillDescriptions(edm::ParameterSetDescription& desc) { + desc.add("tfDnnLabel", "trackSelectionTf"); + } + + void beginStream() {} + + void initEvent(const edm::EventSetup& es) { + if (session_ == nullptr) { + edm::ESHandle tfDnnHandle; + es.get().get(tfDnnLabel_, tfDnnHandle); + session_ = tfDnnHandle.product()->getSession(); + } + } + + float operator()(reco::Track const& trk, + reco::BeamSpot const& beamSpot, + reco::VertexCollection const& vertices) const { + const auto& bestVertex = getBestVertex(trk, vertices); + + tensorflow::Tensor input1(tensorflow::DT_FLOAT, {1, 29}); + tensorflow::Tensor input2(tensorflow::DT_FLOAT, {1, 1}); + + input1.matrix()(0, 0) = trk.pt(); + input1.matrix()(0, 1) = trk.innerMomentum().x(); + input1.matrix()(0, 2) = trk.innerMomentum().y(); + input1.matrix()(0, 3) = trk.innerMomentum().z(); + input1.matrix()(0, 4) = trk.innerMomentum().rho(); + input1.matrix()(0, 5) = trk.outerMomentum().x(); + input1.matrix()(0, 6) = trk.outerMomentum().y(); + input1.matrix()(0, 7) = trk.outerMomentum().z(); + input1.matrix()(0, 8) = trk.outerMomentum().rho(); + input1.matrix()(0, 9) = trk.ptError(); + input1.matrix()(0, 10) = trk.dxy(bestVertex); + input1.matrix()(0, 11) = trk.dz(bestVertex); + input1.matrix()(0, 12) = trk.dxy(beamSpot.position()); + input1.matrix()(0, 13) = trk.dz(beamSpot.position()); + input1.matrix()(0, 14) = trk.dxyError(); + input1.matrix()(0, 15) = trk.dzError(); + input1.matrix()(0, 16) = trk.normalizedChi2(); + input1.matrix()(0, 17) = trk.eta(); + input1.matrix()(0, 18) = trk.phi(); + input1.matrix()(0, 19) = trk.etaError(); + input1.matrix()(0, 20) = trk.phiError(); + input1.matrix()(0, 21) = trk.hitPattern().numberOfValidPixelHits(); + input1.matrix()(0, 22) = trk.hitPattern().numberOfValidStripHits(); + input1.matrix()(0, 23) = trk.ndof(); + input1.matrix()(0, 24) = trk.hitPattern().numberOfLostTrackerHits(reco::HitPattern::MISSING_INNER_HITS); + input1.matrix()(0, 25) = trk.hitPattern().numberOfLostTrackerHits(reco::HitPattern::MISSING_OUTER_HITS); + input1.matrix()(0, 26) = + trk.hitPattern().trackerLayersTotallyOffOrBad(reco::HitPattern::MISSING_INNER_HITS); + input1.matrix()(0, 27) = + trk.hitPattern().trackerLayersTotallyOffOrBad(reco::HitPattern::MISSING_OUTER_HITS); + input1.matrix()(0, 28) = trk.hitPattern().trackerLayersWithoutMeasurement(reco::HitPattern::TRACK_HITS); + + //Original algo as its own input, it will enter the graph so that it gets one-hot encoded, as is the preferred + //format for categorical inputs, where the labels do not have any metric amongst them + input2.matrix()(0, 0) = trk.originalAlgo(); + + //The names for the input tensors get locked when freezing the trained tensorflow model. The NamedTensors must + //match those names + tensorflow::NamedTensorList inputs; + inputs.resize(2); + inputs[0] = tensorflow::NamedTensor("x", input1); + inputs[1] = tensorflow::NamedTensor("y", input2); + std::vector outputs; + + //evaluate the input + tensorflow::run(const_cast(session_), inputs, {"Identity"}, &outputs); + //scale output to be [-1, 1] due to convention + float output = 2.0 * outputs[0].matrix()(0, 0) - 1.0; + return output; + } + + const std::string tfDnnLabel_; + const tensorflow::Session* session_; + }; + + using TrackTfClassifier = TrackMVAClassifier; +} // namespace +#include "FWCore/PluginManager/interface/ModuleDef.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +DEFINE_FWK_MODULE(TrackTfClassifier); diff --git a/RecoTracker/FinalTrackSelectors/python/earlyGeneralTracks_cfi.py b/RecoTracker/FinalTrackSelectors/python/earlyGeneralTracks_cfi.py index 294008807c0df..c33f6cbfd71a9 100644 --- a/RecoTracker/FinalTrackSelectors/python/earlyGeneralTracks_cfi.py +++ b/RecoTracker/FinalTrackSelectors/python/earlyGeneralTracks_cfi.py @@ -75,6 +75,12 @@ ) trackingPhase1.toModify(earlyGeneralTracks, **_forPhase1) +from Configuration.ProcessModifiers.displacedTracking_cff import displacedTracking +def _extend_displacedGeneral(x): + x.trackProducers += ['displacedGeneralStepTracks'] + x.inputClassifiers += ['displacedGeneralStep'] +(trackingPhase1 & displacedTracking).toModify(earlyGeneralTracks, _extend_displacedGeneral) + # For Phase2PU140 from Configuration.Eras.Modifier_trackingPhase2PU140_cff import trackingPhase2PU140 from RecoTracker.FinalTrackSelectors.trackListMerger_cfi import trackListMerger as _trackListMerger diff --git a/RecoTracker/FinalTrackSelectors/python/preDuplicateMergingGeneralTracks_cfi.py b/RecoTracker/FinalTrackSelectors/python/preDuplicateMergingGeneralTracks_cfi.py index cf441f13f99e6..78bf165ec907a 100644 --- a/RecoTracker/FinalTrackSelectors/python/preDuplicateMergingGeneralTracks_cfi.py +++ b/RecoTracker/FinalTrackSelectors/python/preDuplicateMergingGeneralTracks_cfi.py @@ -24,15 +24,11 @@ selectedTrackQuals = ["muonSeededTracksInOutSelector:muonSeededTracksInOutHighPurity", # not used but needed "muonSeededTracksInOutSelector:muonSeededTracksInOutHighPurity", "muonSeededTracksOutInSelector:muonSeededTracksOutInHighPurity"], -# mvaValueTags = ["earlyGeneralTracks:MVAVals", -# "muonSeededTracksInOutSelector:MVAVals", -# "muonSeededTracksOutInSelector:MVAVals"], mvaValueTags = cms.VInputTag( cms.InputTag("earlyGeneralTracks","MVAVals"), cms.InputTag("muonSeededTracksInOutSelector","MVAVals"), cms.InputTag("muonSeededTracksOutInSelector","MVAVals"), ), - #setsToMerge = dict(pQual = False, tLists = [0, 1, 2]), setsToMerge = cms.VPSet(cms.PSet(pQual = cms.bool(False), tLists = cms.vint32(0, 1, 2))), FoundHitBonus = 100.0, LostHitPenalty = 1.0, diff --git a/RecoTracker/FinalTrackSelectors/python/trackSelectionTf_cfi.py b/RecoTracker/FinalTrackSelectors/python/trackSelectionTf_cfi.py new file mode 100644 index 0000000000000..cf4f536adceae --- /dev/null +++ b/RecoTracker/FinalTrackSelectors/python/trackSelectionTf_cfi.py @@ -0,0 +1,5 @@ +from RecoTracker.FinalTrackSelectors.tfGraphDefProducer_cfi import tfGraphDefProducer as _tfGraphDefProducer +trackSelectionTf = _tfGraphDefProducer.clone( + ComponentName = "trackSelectionTf", + FileName = "RecoTracker/FinalTrackSelectors/data/TrackTfClassifier/QCDFlatPU_QCDHighPt_ZEE_DisplacedSUSY_2020.pb" +) diff --git a/RecoTracker/FinalTrackSelectors/src/ES_TfGraphDefWrapper.cc b/RecoTracker/FinalTrackSelectors/src/ES_TfGraphDefWrapper.cc new file mode 100644 index 0000000000000..112e741062ed4 --- /dev/null +++ b/RecoTracker/FinalTrackSelectors/src/ES_TfGraphDefWrapper.cc @@ -0,0 +1,4 @@ +#include "RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(TfGraphDefWrapper); diff --git a/RecoTracker/FinalTrackSelectors/src/TfGraphDefWrapper.cc b/RecoTracker/FinalTrackSelectors/src/TfGraphDefWrapper.cc new file mode 100644 index 0000000000000..cd025e2dacf12 --- /dev/null +++ b/RecoTracker/FinalTrackSelectors/src/TfGraphDefWrapper.cc @@ -0,0 +1,7 @@ +#include "RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h" + +TfGraphDefWrapper::TfGraphDefWrapper(tensorflow::Session* session, tensorflow::GraphDef* graph) + : session_(session), graph_(graph) {} +const tensorflow::Session* TfGraphDefWrapper::getSession() const { return session_; } + +TfGraphDefWrapper::~TfGraphDefWrapper() { tensorflow::closeSession(session_); }; diff --git a/RecoTracker/FinalTrackSelectors/src/trackAlgoPriorityOrder.h b/RecoTracker/FinalTrackSelectors/src/trackAlgoPriorityOrder.h index 699be7d912c72..44d7836e37838 100644 --- a/RecoTracker/FinalTrackSelectors/src/trackAlgoPriorityOrder.h +++ b/RecoTracker/FinalTrackSelectors/src/trackAlgoPriorityOrder.h @@ -39,6 +39,7 @@ namespace impl { reco::TrackBase::mixedTripletStep, reco::TrackBase::pixelLessStep, reco::TrackBase::tobTecStep, + reco::TrackBase::displacedGeneralStep, reco::TrackBase::jetCoreRegionalStep, reco::TrackBase::conversionStep, reco::TrackBase::muonSeededStepInOut, @@ -50,7 +51,6 @@ namespace impl { reco::TrackBase::globalMuon, reco::TrackBase::cosmicStandAloneMuon, reco::TrackBase::cosmicGlobalMuon, - reco::TrackBase::reservedForUpgrades1, reco::TrackBase::reservedForUpgrades2, reco::TrackBase::bTagGhostTracks, reco::TrackBase::beamhalo, diff --git a/RecoTracker/GeometryESProducer/test/testTrackerRecoGeometry_cfg.py b/RecoTracker/GeometryESProducer/test/testTrackerRecoGeometry_cfg.py index 2163beb43fb9a..9ee7f10a57c15 100644 --- a/RecoTracker/GeometryESProducer/test/testTrackerRecoGeometry_cfg.py +++ b/RecoTracker/GeometryESProducer/test/testTrackerRecoGeometry_cfg.py @@ -12,13 +12,16 @@ process.load('FWCore.MessageLogger.MessageLogger_cfi') process.MessageLogger = cms.Service("MessageLogger", - debugModules = cms.untracked.vstring('TrackerRecoGeometryAnalyzer'), - destinations = cms.untracked.vstring('TrackerRecoGeometryAnalyzer_infos'), - TrackerRecoGeometryAnalyzer_infos = cms.untracked.PSet( - threshold = cms.untracked.string('INFO') - ), - categories = cms.untracked.vstring('TrackerRecoGeometryAnalyzer') - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + debugModules = cms.untracked.vstring('TrackerRecoGeometryAnalyzer'), + files = cms.untracked.PSet( + TrackerRecoGeometryAnalyzer_infos = cms.untracked.PSet( + threshold = cms.untracked.string('INFO') + ) + ) +) process.source = cms.Source("EmptySource") diff --git a/RecoTracker/IterativeTracking/python/DetachedQuadStep_cff.py b/RecoTracker/IterativeTracking/python/DetachedQuadStep_cff.py index df61a9fb7bad1..8f0f7e466fb3a 100644 --- a/RecoTracker/IterativeTracking/python/DetachedQuadStep_cff.py +++ b/RecoTracker/IterativeTracking/python/DetachedQuadStep_cff.py @@ -4,6 +4,7 @@ #for dnn classifier from Configuration.ProcessModifiers.trackdnn_cff import trackdnn +from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary ############################################### # Low pT and detached tracks from pixel quadruplets @@ -211,11 +212,11 @@ qualityCuts = [-0.5,0.0,0.5] ) -from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import * -from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import * -trackdnn.toReplaceWith(detachedQuadStep, TrackLwtnnClassifier.clone( - src = 'detachedQuadStepTracks', - qualityCuts = [-0.6, 0.05, 0.7] +from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import * +from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import * +trackdnn.toReplaceWith(detachedQuadStep, TrackTfClassifier.clone( + src = 'detachedQuadStepTracks', + qualityCuts = qualityCutDictionary['DetachedQuadStep'] )) highBetaStar_2018.toModify(detachedQuadStep,qualityCuts = [-0.7,0.0,0.5]) diff --git a/RecoTracker/IterativeTracking/python/DetachedTripletStep_cff.py b/RecoTracker/IterativeTracking/python/DetachedTripletStep_cff.py index 658878cd8f8fd..a97483e20256f 100644 --- a/RecoTracker/IterativeTracking/python/DetachedTripletStep_cff.py +++ b/RecoTracker/IterativeTracking/python/DetachedTripletStep_cff.py @@ -8,6 +8,7 @@ #for dnn classifier from Configuration.ProcessModifiers.trackdnn_cff import trackdnn +from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary ############################################### # Low pT and detached tracks from pixel triplets @@ -259,11 +260,11 @@ qualityCuts = [-0.2,0.3,0.8] )) -from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import * -from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import * -trackdnn.toReplaceWith(detachedTripletStep, TrackLwtnnClassifier.clone( +from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import * +from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import * +trackdnn.toReplaceWith(detachedTripletStep, TrackTfClassifier.clone( src = 'detachedTripletStepTracks', - qualityCuts = [0.0, 0.4, 0.8], + qualityCuts = qualityCutDictionary['DetachedTripletStep'], )) (trackdnn & fastSim).toModify(detachedTripletStep,vertices = 'firstStepPrimaryVerticesBeforeMixing') diff --git a/RecoTracker/IterativeTracking/python/DisplacedGeneralStep_cff.py b/RecoTracker/IterativeTracking/python/DisplacedGeneralStep_cff.py new file mode 100644 index 0000000000000..2c36c5bdca0ea --- /dev/null +++ b/RecoTracker/IterativeTracking/python/DisplacedGeneralStep_cff.py @@ -0,0 +1,226 @@ +import FWCore.ParameterSet.Config as cms +import RecoTracker.IterativeTracking.iterativeTkConfig as _cfg + +#----------------------------------------- NEW CLUSTERS (remove previously used clusters) +displacedGeneralStepClusters = _cfg.clusterRemoverForIter("DisplacedGeneralStep") +for _eraName, _postfix, _era in _cfg.nonDefaultEras(): + _era.toReplaceWith(displacedGeneralStepClusters, _cfg.clusterRemoverForIter("DisplacedGeneralStep", _eraName, _postfix)) + +#----------------------------------------- SEEDING LAYERS +import RecoTracker.TkSeedingLayers.DisplacedGeneralLayerTriplet_cfi +displacedGeneralStepSeedLayers = RecoTracker.TkSeedingLayers.DisplacedGeneralLayerTriplet_cfi.DisplacedGeneralLayerTriplet.clone() + + +#----------------------------------------- TrackingRegion +from RecoTracker.TkTrackingRegions.globalTrackingRegion_cfi import globalTrackingRegion as _globalTrackingRegion +displacedGeneralStepTrackingRegions = _globalTrackingRegion.clone( + RegionPSet = dict( + precise = True, + useMultipleScattering = True, + originHalfLength = 55, + originRadius = 10, + ptMin = 1 + ) +) + + + + +#----------------------------------------- Triplet seeding + +from RecoPixelVertexing.PixelLowPtUtilities.ClusterShapeHitFilterESProducer_cfi import ClusterShapeHitFilterESProducer as _ClusterShapeHitFilterESProducer +displacedGeneralStepClusterShapeHitFilter = _ClusterShapeHitFilterESProducer.clone( + ComponentName = 'displacedGeneralStepClusterShapeHitFilter', + doStripShapeCut = cms.bool(False), + clusterChargeCut = dict(refToPSet_ = 'SiStripClusterChargeCutTight') +) + +from RecoTracker.TkHitPairs.hitPairEDProducer_cfi import hitPairEDProducer as _hitPairEDProducer +displacedGeneralStepHitDoublets = _hitPairEDProducer.clone( + seedingLayers = "displacedGeneralStepSeedLayers", + trackingRegions = "displacedGeneralStepTrackingRegions", + maxElement = 50000000, + produceIntermediateHitDoublets = True, +) + +from RecoTracker.TkSeedGenerator.multiHitFromChi2EDProducer_cfi import multiHitFromChi2EDProducer as _multiHitFromChi2EDProducer +displacedGeneralStepHitTriplets = _multiHitFromChi2EDProducer.clone( + doublets = "displacedGeneralStepHitDoublets", + extraPhiKDBox = 0.01, +) + + +from RecoTracker.TkSeedGenerator.seedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer_cff import seedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer as _seedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer +from RecoPixelVertexing.PixelLowPtUtilities.StripSubClusterShapeSeedFilter_cfi import StripSubClusterShapeSeedFilter as _StripSubClusterShapeSeedFilter +displacedGeneralStepSeeds = _seedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer.clone( + seedingHitSets = "displacedGeneralStepHitTriplets", + SeedComparitorPSet = dict( + ComponentName = 'CombinedSeedComparitor', + mode = cms.string("and"), + comparitors = cms.VPSet( + cms.PSet(# FIXME: is this defined in any cfi that could be imported instead of copy-paste? + ComponentName = cms.string('PixelClusterShapeSeedComparitor'), + FilterAtHelixStage = cms.bool(True), + FilterPixelHits = cms.bool(False), + FilterStripHits = cms.bool(True), + ClusterShapeHitFilterName = cms.string('displacedGeneralStepClusterShapeHitFilter'), + ClusterShapeCacheSrc = cms.InputTag("siPixelClusterShapeCache") # not really needed here since FilterPixelHits=False + ), + _StripSubClusterShapeSeedFilter.clone() + ) + ) +) + + + +#----------------------------------------- QUALITY CUTS DURING TRACK BUILDING +import TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff as _TrajectoryFilter_cff +_displacedGeneralStepTrajectoryFilterBase = _TrajectoryFilter_cff.CkfBaseTrajectoryFilter_block.clone( + maxLostHits = 1, + minimumNumberOfHits = 4, + minPt = 1, +) + +displacedGeneralStepTrajectoryFilter = _displacedGeneralStepTrajectoryFilterBase.clone( + seedPairPenalty = 1, +) + + +displacedGeneralStepTrajectoryFilterInOut = displacedGeneralStepTrajectoryFilter.clone() + +import RecoTracker.MeasurementDet.Chi2ChargeMeasurementEstimator_cfi +displacedGeneralStepChi2Est = RecoTracker.MeasurementDet.Chi2ChargeMeasurementEstimator_cfi.Chi2ChargeMeasurementEstimator.clone( + ComponentName = 'displacedGeneralStepChi2Est', + nSigma = 3.0, + MaxChi2 = 10.0, + clusterChargeCut = cms.PSet(refToPSet_ = cms.string('SiStripClusterChargeCutTight')), +) + + + +#----------------------------------------- TRACK BUILDING +import RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi +displacedGeneralStepTrajectoryBuilder = RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi.GroupedCkfTrajectoryBuilder.clone( + MeasurementTrackerName = '', + trajectoryFilter = cms.PSet(refToPSet_ = cms.string('displacedGeneralStepTrajectoryFilter')), + inOutTrajectoryFilter = cms.PSet(refToPSet_ = cms.string('displacedGeneralStepTrajectoryFilterInOut')), + useSameTrajFilter = False, + minNrOfHitsForRebuild = 4, + maxCand = 2, + estimator = 'displacedGeneralStepChi2Est' + ) + + + +#----------------------------------------- MAKING OF TRACK CANDIDATES +import RecoTracker.CkfPattern.CkfTrackCandidates_cfi +displacedGeneralStepTrackCandidates = RecoTracker.CkfPattern.CkfTrackCandidates_cfi.ckfTrackCandidates.clone( + src = 'displacedGeneralStepSeeds', + TrajectoryCleaner = 'displacedGeneralStepTrajectoryCleanerBySharedHits', + ### these two parameters are relevant only for the CachingSeedCleanerBySharedInput + numHitsForSeedCleaner = cms.int32(50), + onlyPixelHitsForSeedCleaner = cms.bool(False), + + TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('displacedGeneralStepTrajectoryBuilder')), + clustersToSkip = cms.InputTag('displacedGeneralStepClusters'), + doSeedingRegionRebuilding = True, + useHitsSplitting = True, + cleanTrajectoryAfterInOut = True +) + +from TrackingTools.TrajectoryCleaning.TrajectoryCleanerBySharedHits_cfi import trajectoryCleanerBySharedHits +displacedGeneralStepTrajectoryCleanerBySharedHits = trajectoryCleanerBySharedHits.clone( + ComponentName = 'displacedGeneralStepTrajectoryCleanerBySharedHits', + fractionShared = 0.25, + allowSharedFirstHit = True +) + + + + + +# ----------------------------------------- TRACK FITTING AND SMOOTHING OPTIONS +import TrackingTools.TrackFitters.RungeKuttaFitters_cff +displacedGeneralStepFitterSmoother = TrackingTools.TrackFitters.RungeKuttaFitters_cff.KFFittingSmootherWithOutliersRejectionAndRK.clone( + ComponentName = 'displacedGeneralStepFitterSmoother', + EstimateCut = 30, + MinNumberOfHits = 8, + Fitter = 'displacedGeneralStepRKFitter', + Smoother = 'displacedGeneralStepRKSmoother' + ) + + + +# Also necessary to specify minimum number of hits after final track fit +displacedGeneralStepRKTrajectoryFitter = TrackingTools.TrackFitters.RungeKuttaFitters_cff.RKTrajectoryFitter.clone( + ComponentName = 'displacedGeneralStepRKFitter', + minHits = 8 +) + + + +displacedGeneralStepRKTrajectorySmoother = TrackingTools.TrackFitters.RungeKuttaFitters_cff.RKTrajectorySmoother.clone( + ComponentName = 'displacedGeneralStepRKSmoother', + errorRescaling = 10.0, + minHits = 8 +) + + + +import TrackingTools.TrackFitters.FlexibleKFFittingSmoother_cfi +generalDisplacedFlexibleKFFittingSmoother = TrackingTools.TrackFitters.FlexibleKFFittingSmoother_cfi.FlexibleKFFittingSmoother.clone( + ComponentName = 'generalDisplacedFlexibleKFFittingSmoother', + standardFitter = 'displacedGeneralStepFitterSmoother', +) + + + + +import RecoTracker.TrackProducer.TrackProducer_cfi +displacedGeneralStepTracks = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone( + src = 'displacedGeneralStepTrackCandidates', + AlgorithmName = 'displacedGeneralStep', + Fitter = 'generalDisplacedFlexibleKFFittingSmoother', + ) + + +#---------------------------------------- TRACK SELECTION AND QUALITY FLAG SETTING. + +from RecoTracker.FinalTrackSelectors.TrackMVAClassifierPrompt_cfi import * +from RecoTracker.FinalTrackSelectors.TrackMVAClassifierDetached_cfi import * +displacedGeneralStepClassifier1 = TrackMVAClassifierDetached.clone( + src = 'displacedGeneralStepTracks', + mva = dict(GBRForestLabel = 'MVASelectorIter6_13TeV'), + qualityCuts = [-0.6,-0.45,-0.3] +) +displacedGeneralStepClassifier2 = TrackMVAClassifierPrompt.clone( +src = 'displacedGeneralStepTracks', + mva = dict(GBRForestLabel = 'MVASelectorIter0_13TeV'), + qualityCuts = [0.0,0.0,0.0] +) + +from RecoTracker.FinalTrackSelectors.ClassifierMerger_cfi import * +displacedGeneralStep = ClassifierMerger.clone( + inputClassifiers=['displacedGeneralStepClassifier1','displacedGeneralStepClassifier2'] +) + +from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 +trackingPhase1.toReplaceWith(displacedGeneralStep, displacedGeneralStepClassifier1.clone( + mva = dict(GBRForestLabel = 'MVASelectorTobTecStep_Phase1'), + qualityCuts = [-0.6,-0.45,-0.3], +)) + + + +DisplacedGeneralStepTask = cms.Task(displacedGeneralStepClusters, + displacedGeneralStepSeedLayers, + displacedGeneralStepTrackingRegions, + displacedGeneralStepHitDoublets, + displacedGeneralStepHitTriplets, + displacedGeneralStepSeeds, + displacedGeneralStepTrackCandidates, + displacedGeneralStepTracks, + displacedGeneralStepClassifier1,displacedGeneralStepClassifier2, + displacedGeneralStep) + +DisplacedGeneralStep = cms.Sequence(DisplacedGeneralStepTask) diff --git a/RecoTracker/IterativeTracking/python/HighPtTripletStep_cff.py b/RecoTracker/IterativeTracking/python/HighPtTripletStep_cff.py index efe2111bd5462..a249bad2528c6 100644 --- a/RecoTracker/IterativeTracking/python/HighPtTripletStep_cff.py +++ b/RecoTracker/IterativeTracking/python/HighPtTripletStep_cff.py @@ -4,6 +4,7 @@ #for dnn classifier from Configuration.ProcessModifiers.trackdnn_cff import trackdnn +from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary ### high-pT triplets ### @@ -253,11 +254,11 @@ qualityCuts = [0.2,0.3,0.4] ) -from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import * -from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import * -trackdnn.toReplaceWith(highPtTripletStep, TrackLwtnnClassifier.clone( - src = 'highPtTripletStepTracks', - qualityCuts = [0.75, 0.775, 0.8], +from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import * +from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import * +trackdnn.toReplaceWith(highPtTripletStep, TrackTfClassifier.clone( + src = 'highPtTripletStepTracks', + qualityCuts = qualityCutDictionary['HighPtTripletStep'], )) highBetaStar_2018.toModify(highPtTripletStep,qualityCuts = [-0.2,0.3,0.4]) diff --git a/RecoTracker/IterativeTracking/python/InitialStep_cff.py b/RecoTracker/IterativeTracking/python/InitialStep_cff.py index c3296859b1a0e..fb77d3ce0acaf 100644 --- a/RecoTracker/IterativeTracking/python/InitialStep_cff.py +++ b/RecoTracker/IterativeTracking/python/InitialStep_cff.py @@ -4,6 +4,7 @@ #for dnn classifier from Configuration.ProcessModifiers.trackdnn_cff import trackdnn +from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary ### STEP 0 ### @@ -110,10 +111,10 @@ from FastSimulation.Tracking.SeedingMigration import _hitSetProducerToFactoryPSet _fastSim_initialStepSeeds = FastSimulation.Tracking.TrajectorySeedProducer_cfi.trajectorySeedProducer.clone( trackingRegions = 'initialStepTrackingRegions', - seedFinderSelector = dict( pixelTripletGeneratorFactory = _hitSetProducerToFactoryPSet(initialStepHitTriplets), - layerList = initialStepSeedLayers.layerList.value()) + seedFinderSelector = dict( pixelTripletGeneratorFactory = _hitSetProducerToFactoryPSet(initialStepHitTriplets).clone(SeedComparitorPSet = dict(ComponentName = 'none')), + layerList = initialStepSeedLayers.layerList.value() + ) ) -_fastSim_initialStepSeeds.seedFinderSelector.pixelTripletGeneratorFactory.SeedComparitorPSet.ComponentName = 'none' #new for phase1 trackingPhase1.toModify(_fastSim_initialStepSeeds, seedFinderSelector = dict( pixelTripletGeneratorFactory = None, @@ -315,11 +316,11 @@ qualityCuts = [-0.95,-0.85,-0.75] )) -from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import * -from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import * -trackdnn.toReplaceWith(initialStep, TrackLwtnnClassifier.clone( +from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import * +from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import * +trackdnn.toReplaceWith(initialStep, TrackTfClassifier.clone( src = 'initialStepTracks', - qualityCuts = [0.0, 0.3, 0.6] + qualityCuts = qualityCutDictionary["InitialStep"] )) (trackdnn & fastSim).toModify(initialStep,vertices = 'firstStepPrimaryVerticesBeforeMixing') diff --git a/RecoTracker/IterativeTracking/python/JetCoreRegionalStep_cff.py b/RecoTracker/IterativeTracking/python/JetCoreRegionalStep_cff.py index 7df01c115c676..8984deb616a59 100644 --- a/RecoTracker/IterativeTracking/python/JetCoreRegionalStep_cff.py +++ b/RecoTracker/IterativeTracking/python/JetCoreRegionalStep_cff.py @@ -2,6 +2,7 @@ #for dnn classifier from Configuration.ProcessModifiers.trackdnn_cff import trackdnn +from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary # This step runs over all clusters @@ -95,6 +96,14 @@ minPt = 0.1 ) +from Configuration.ProcessModifiers.seedingDeepCore_cff import seedingDeepCore +seedingDeepCore.toModify(jetCoreRegionalStepTrajectoryFilter, + minimumNumberOfHits = 2, + maxConsecLostHits = 2, + maxLostHitsFraction = 1.1, + minPt = 0.9 + ) + from Configuration.Eras.Modifier_pp_on_XeXe_2017_cff import pp_on_XeXe_2017 from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA (pp_on_XeXe_2017 | pp_on_AA).toModify(jetCoreRegionalStepTrajectoryFilter, minPt=5.0) @@ -118,6 +127,28 @@ estimator = 'jetCoreRegionalStepChi2Est', maxDPhiForLooperReconstruction = cms.double(2.0), maxPtForLooperReconstruction = cms.double(0.7) + ) + +seedingDeepCore.toModify(jetCoreRegionalStepTrajectoryBuilder, + maxPtForLooperReconstruction = 0., + keepOriginalIfRebuildFails = True, + lockHits = False, + requireSeedHitsInRebuild = False, +) + +#customized cleaner for DeepCore +from TrackingTools.TrajectoryCleaning.TrajectoryCleanerBySharedHits_cfi import trajectoryCleanerBySharedHits +jetCoreRegionalStepDeepCoreTrajectoryCleaner = trajectoryCleanerBySharedHits.clone( + ComponentName = 'jetCoreRegionalStepDeepCoreTrajectoryCleaner', + fractionShared = 0.45 +) + +import RecoTracker.TkSeedGenerator.deepCoreSeedGenerator_cfi +import Validation.RecoTrack.JetCoreMCtruthSeedGenerator_cfi +seedingDeepCore.toReplaceWith(jetCoreRegionalStepSeeds, + RecoTracker.TkSeedGenerator.deepCoreSeedGenerator_cfi.deepCoreSeedGenerator.clone(#to run MCtruthSeedGenerator clone here from Validation.RecoTrack + vertices="firstStepPrimaryVertices" + ) ) # MAKING OF TRACK CANDIDATES @@ -131,6 +162,10 @@ #numHitsForSeedCleaner = cms.int32(50), #onlyPixelHitsForSeedCleaner = cms.bool(True), ) +seedingDeepCore.toModify(jetCoreRegionalStepTrackCandidates, + TrajectoryCleaner = 'jetCoreRegionalStepDeepCoreTrajectoryCleaner', + doSeedingRegionRebuilding = True, +) # TRACK FITTING @@ -197,11 +232,11 @@ qualityCuts = [-0.2,0.0,0.4] )) -from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import * -from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import * -trackdnn.toReplaceWith(jetCoreRegionalStep, TrackLwtnnClassifier.clone( - src = 'jetCoreRegionalStepTracks', - qualityCuts = [0.6, 0.7, 0.8], +from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import * +from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import * +trackdnn.toReplaceWith(jetCoreRegionalStep, TrackTfClassifier.clone( + src = 'jetCoreRegionalStepTracks', + qualityCuts = qualityCutDictionary["JetCoreRegionalStep"], )) fastSim.toModify(jetCoreRegionalStep,vertices = 'firstStepPrimaryVerticesBeforeMixing') @@ -219,6 +254,7 @@ # jetCoreRegionalStepClassifier1,jetCoreRegionalStepClassifier2, jetCoreRegionalStep) JetCoreRegionalStep = cms.Sequence(JetCoreRegionalStepTask) +seedingDeepCore.toReplaceWith(JetCoreRegionalStep,JetCoreRegionalStep.copyAndExclude([jetCoreRegionalStepHitDoublets])) fastSim.toReplaceWith(JetCoreRegionalStepTask, cms.Task(jetCoreRegionalStepTracks, jetCoreRegionalStep)) diff --git a/RecoTracker/IterativeTracking/python/LowPtForwardTripletStep_cff.py b/RecoTracker/IterativeTracking/python/LowPtForwardTripletStep_cff.py index 20e13eb2a5390..067cb54f754b5 100644 --- a/RecoTracker/IterativeTracking/python/LowPtForwardTripletStep_cff.py +++ b/RecoTracker/IterativeTracking/python/LowPtForwardTripletStep_cff.py @@ -27,20 +27,21 @@ from RecoTracker.TkTrackingRegions.GlobalTrackingRegionFromBeamSpot_cfi import RegionPsetFomBeamSpotBlock lowPtForwardTripletStepSeeds = RecoTracker.TkSeedGenerator.GlobalSeedsFromTriplets_cff.globalSeedsFromTriplets.clone( RegionFactoryPSet = RegionPsetFomBeamSpotBlock.clone( - ComponentName = 'GlobalRegionProducerFromBeamSpot', - RegionPSet = RegionPsetFomBeamSpotBlock.RegionPSet.clone( - ptMin = 0.2, - originRadius = 0.03, - nSigmaZ = 4.0) + ComponentName = 'GlobalRegionProducerFromBeamSpot', + RegionPSet = RegionPsetFomBeamSpotBlock.RegionPSet.clone( + ptMin = 0.2, + originRadius = 0.03, + nSigmaZ = 4.0) + ), + OrderedHitsFactoryPSet = dict( + SeedingLayers = 'lowPtForwardTripletStepSeedLayers' ) ) -lowPtForwardTripletStepSeeds.OrderedHitsFactoryPSet.SeedingLayers = 'lowPtForwardTripletStepSeedLayers' from RecoPixelVertexing.PixelLowPtUtilities.ClusterShapeHitFilterESProducer_cfi import * import RecoPixelVertexing.PixelLowPtUtilities.LowPtClusterShapeSeedComparitor_cfi lowPtForwardTripletStepSeeds.OrderedHitsFactoryPSet.GeneratorPSet.SeedComparitorPSet = RecoPixelVertexing.PixelLowPtUtilities.LowPtClusterShapeSeedComparitor_cfi.LowPtClusterShapeSeedComparitor - # QUALITY CUTS DURING TRACK BUILDING import TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff lowPtForwardTripletStepTrajectoryFilter = TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff.CkfBaseTrajectoryFilter_block.clone( diff --git a/RecoTracker/IterativeTracking/python/LowPtQuadStep_cff.py b/RecoTracker/IterativeTracking/python/LowPtQuadStep_cff.py index 6d1e137901549..93ad826dd28c6 100644 --- a/RecoTracker/IterativeTracking/python/LowPtQuadStep_cff.py +++ b/RecoTracker/IterativeTracking/python/LowPtQuadStep_cff.py @@ -4,6 +4,7 @@ #for dnn classifier from Configuration.ProcessModifiers.trackdnn_cff import trackdnn +from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary # NEW CLUSTERS (remove previously used clusters) lowPtQuadStepClusters = _cfg.clusterRemoverForIter('LowPtQuadStep') @@ -94,8 +95,6 @@ layerPairs = lowPtQuadStepHitDoublets.layerPairs.value() ) ) - -_fastSim_lowPtQuadStepSeeds.seedFinderSelector.CAHitQuadrupletGeneratorFactory.SeedComparitorPSet.ComponentName = 'none' fastSim.toReplaceWith(lowPtQuadStepSeeds,_fastSim_lowPtQuadStepSeeds) # QUALITY CUTS DURING TRACK BUILDING @@ -204,11 +203,11 @@ qualityCuts = [-0.7,-0.35,-0.15] ) -from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import * -from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import * -trackdnn.toReplaceWith(lowPtQuadStep, TrackLwtnnClassifier.clone( - src = 'lowPtQuadStepTracks', - qualityCuts = [0.2, 0.425, 0.75] +from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import * +from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import * +trackdnn.toReplaceWith(lowPtQuadStep, TrackTfClassifier.clone( + src = 'lowPtQuadStepTracks', + qualityCuts = qualityCutDictionary["LowPtQuadStep"] )) highBetaStar_2018.toModify(lowPtQuadStep,qualityCuts = [-0.9,-0.35,-0.15]) diff --git a/RecoTracker/IterativeTracking/python/LowPtTripletStep_cff.py b/RecoTracker/IterativeTracking/python/LowPtTripletStep_cff.py index 9ebd3a52da078..b20d60df49116 100644 --- a/RecoTracker/IterativeTracking/python/LowPtTripletStep_cff.py +++ b/RecoTracker/IterativeTracking/python/LowPtTripletStep_cff.py @@ -5,6 +5,7 @@ #for dnn classifier from Configuration.ProcessModifiers.trackdnn_cff import trackdnn +from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary # NEW CLUSTERS (remove previously used clusters) lowPtTripletStepClusters = _cfg.clusterRemoverForIter('LowPtTripletStep') @@ -279,11 +280,11 @@ qualityCuts = [-0.4,0.0,0.3], )) -from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import * -from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import * -trackdnn.toReplaceWith(lowPtTripletStep, TrackLwtnnClassifier.clone( - src = 'lowPtTripletStepTracks', - qualityCuts = [0.2, 0.5, 0.8] +from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import * +from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import * +trackdnn.toReplaceWith(lowPtTripletStep, TrackTfClassifier.clone( + src = 'lowPtTripletStepTracks', + qualityCuts = qualityCutDictionary['LowPtTripletStep'] )) highBetaStar_2018.toModify(lowPtTripletStep,qualityCuts = [-0.7,-0.3,-0.1]) diff --git a/RecoTracker/IterativeTracking/python/MixedTripletStep_cff.py b/RecoTracker/IterativeTracking/python/MixedTripletStep_cff.py index 2795d77035499..c3051b3053241 100644 --- a/RecoTracker/IterativeTracking/python/MixedTripletStep_cff.py +++ b/RecoTracker/IterativeTracking/python/MixedTripletStep_cff.py @@ -5,6 +5,7 @@ #for dnn classifier from Configuration.ProcessModifiers.trackdnn_cff import trackdnn +from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary ############################################################### # Large impact parameter Tracking using mixed-triplet seeding # @@ -344,11 +345,11 @@ qualityCuts = [-0.5,0.0,0.5] )) -from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import * -from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import * -trackdnn.toReplaceWith(mixedTripletStep, TrackLwtnnClassifier.clone( +from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import * +from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import * +trackdnn.toReplaceWith(mixedTripletStep, TrackTfClassifier.clone( src = 'mixedTripletStepTracks', - qualityCuts = [-0.8, -0.35, 0.1] + qualityCuts = qualityCutDictionary['MixedTripletStep'] )) (trackdnn & fastSim).toModify(mixedTripletStep,vertices = 'firstStepPrimaryVerticesBeforeMixing') diff --git a/RecoTracker/IterativeTracking/python/PixelLessStep_cff.py b/RecoTracker/IterativeTracking/python/PixelLessStep_cff.py index 1d76dc3b1fe80..de8694abee81b 100644 --- a/RecoTracker/IterativeTracking/python/PixelLessStep_cff.py +++ b/RecoTracker/IterativeTracking/python/PixelLessStep_cff.py @@ -5,6 +5,7 @@ #for dnn classifier from Configuration.ProcessModifiers.trackdnn_cff import trackdnn +from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary ########################################################################## # Large impact parameter tracking using TIB/TID/TEC stereo layer seeding # @@ -112,18 +113,18 @@ 'TID1_pos+TID2_pos', 'TID1_neg+TID2_neg' ], TOB = cms.PSet( - TTRHBuilder = cms.string('WithTrackAngle'), + TTRHBuilder = cms.string('WithTrackAngle'), clusterChargeCut = cms.PSet(refToPSet_ = cms.string('SiStripClusterChargeCutNone')), - vectorRecHits = cms.InputTag("siPhase2VectorHits", 'vectorHitsAccepted'), - skipClusters = cms.InputTag('pixelLessStepClusters') + vectorRecHits = cms.InputTag("siPhase2VectorHits", 'vectorHitsAccepted'), + skipClusters = cms.InputTag('pixelLessStepClusters') ), TIB = None, TID = dict( - clusterChargeCut = dict(refToPSet_ = cms.string('SiStripClusterChargeCutNone')), - vectorRecHits = cms.InputTag("siPhase2VectorHits", 'accepted'), - maxRing = cms.int32(8) + clusterChargeCut = dict(refToPSet_ = 'SiStripClusterChargeCutNone'), + vectorRecHits = cms.InputTag("siPhase2VectorHits", 'accepted'), + maxRing = 8 ), - TEC = None, + TEC = None, MTIB = None, MTID = None, MTEC = None, @@ -344,11 +345,11 @@ qualityCuts = [-0.4,0.0,0.4] )) -from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import * -from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import * -trackdnn.toReplaceWith(pixelLessStep, TrackLwtnnClassifier.clone( +from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import * +from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import * +trackdnn.toReplaceWith(pixelLessStep, TrackTfClassifier.clone( src = 'pixelLessStepTracks', - qualityCuts = [-0.6, -0.05, 0.5] + qualityCuts = qualityCutDictionary['PixelLessStep'] )) (trackdnn & fastSim).toModify(pixelLessStep,vertices = 'firstStepPrimaryVerticesBeforeMixing') diff --git a/RecoTracker/IterativeTracking/python/PixelPairStep_cff.py b/RecoTracker/IterativeTracking/python/PixelPairStep_cff.py index e945486cbb2cc..0b9d5c6dc5a77 100644 --- a/RecoTracker/IterativeTracking/python/PixelPairStep_cff.py +++ b/RecoTracker/IterativeTracking/python/PixelPairStep_cff.py @@ -5,6 +5,7 @@ #for dnn classifier from Configuration.ProcessModifiers.trackdnn_cff import trackdnn +from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary # NEW CLUSTERS (remove previously used clusters) pixelPairStepClusters = _cfg.clusterRemoverForIter('PixelPairStep') @@ -53,14 +54,14 @@ BPix = dict( useErrorsFromParam = cms.bool(True), hitErrorRPhi = cms.double(0.0016), - hitErrorRZ = cms.double(0.0035), - TTRHBuilder = cms.string('TTRHBuilderWithoutAngle4PixelPairs'), + hitErrorRZ = cms.double(0.0035), + TTRHBuilder = 'TTRHBuilderWithoutAngle4PixelPairs', ), FPix = dict( useErrorsFromParam = cms.bool(True), hitErrorRPhi = cms.double(0.0030), - hitErrorRZ = cms.double(0.0020), - TTRHBuilder = cms.string('TTRHBuilderWithoutAngle4PixelPairs'), + hitErrorRZ = cms.double(0.0020), + TTRHBuilder = 'TTRHBuilderWithoutAngle4PixelPairs', ) ) @@ -338,11 +339,11 @@ ) trackingPhase1.toModify(pixelPairStep, mva=dict(GBRForestLabel = 'MVASelectorPixelPairStep_Phase1')) -from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import * -from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import * -trackdnn.toReplaceWith(pixelPairStep, TrackLwtnnClassifier.clone( - src = 'pixelPairStepTracks', - qualityCuts = [-0.6, -0.1, 0.4] +from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import * +from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import * +trackdnn.toReplaceWith(pixelPairStep, TrackTfClassifier.clone( + src='pixelPairStepTracks', + qualityCuts=qualityCutDictionary['PixelPairStep'] )) highBetaStar_2018.toModify(pixelPairStep,qualityCuts = [-0.95,0.0,0.3]) diff --git a/RecoTracker/IterativeTracking/python/TobTecStep_cff.py b/RecoTracker/IterativeTracking/python/TobTecStep_cff.py index f452ce46244d0..af527c2b64769 100644 --- a/RecoTracker/IterativeTracking/python/TobTecStep_cff.py +++ b/RecoTracker/IterativeTracking/python/TobTecStep_cff.py @@ -4,6 +4,7 @@ #for dnn classifier from Configuration.ProcessModifiers.trackdnn_cff import trackdnn +from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary ####################################################################### # Very large impact parameter tracking using TOB + TEC ring 5 seeding # @@ -259,7 +260,7 @@ clustersToSkip = cms.InputTag('tobTecStepClusters'), ### these two parameters are relevant only for the CachingSeedCleanerBySharedInput numHitsForSeedCleaner = cms.int32(50), - onlyPixelHitsForSeedCleaner = cms.bool(True), + onlyPixelHitsForSeedCleaner = cms.bool(False), TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('tobTecStepTrajectoryBuilder')), doSeedingRegionRebuilding = True, @@ -372,11 +373,11 @@ qualityCuts = [-0.6,-0.45,-0.3] )) -from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import * -from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import * -trackdnn.toReplaceWith(tobTecStep, TrackLwtnnClassifier.clone( +from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import * +from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import * +trackdnn.toReplaceWith(tobTecStep, TrackTfClassifier.clone( src = 'tobTecStepTracks', - qualityCuts = [-0.4, -0.25, -0.1] + qualityCuts = qualityCutDictionary["TobTecStep"] )) (trackdnn & fastSim).toModify(tobTecStep,vertices = 'firstStepPrimaryVerticesBeforeMixing') diff --git a/RecoTracker/IterativeTracking/python/dnnQualityCuts.py b/RecoTracker/IterativeTracking/python/dnnQualityCuts.py new file mode 100644 index 0000000000000..315e2a9e94dd3 --- /dev/null +++ b/RecoTracker/IterativeTracking/python/dnnQualityCuts.py @@ -0,0 +1,14 @@ +# https://indico.cern.ch/event/947686/contributions/3981867/attachments/2090510/3512658/TrackingDNN_24_8_2020.pdf +qualityCutDictionary = { + 'InitialStep': [-0.2, 0.15, 0.40], + 'LowPtQuadStep': [-0.2, 0.10, 0.45], + 'HighPtTripletStep': [0.55, 0.60, 0.65], + 'LowPtTripletStep': [-0.2, -0.1, 0.10], + 'DetachedQuadStep': [-0.3, 0.20, 0.55], + 'DetachedTripletStep': [-0.5, -0.1, 0.40], + 'PixelPairStep': [-0.4, -0.35, -0.3], + 'MixedTripletStep': [-0.7, -0.5, -0.3], + 'PixelLessStep': [-0.8, -0.7, -0.6], + 'TobTecStep': [-0.6, -0.55, -0.5], + 'JetCoreRegionalStep': [0.20, 0.30, 0.50] +} diff --git a/RecoTracker/IterativeTracking/python/iterativeTkConfig.py b/RecoTracker/IterativeTracking/python/iterativeTkConfig.py index 7af0227d97cb7..7060c51219a32 100644 --- a/RecoTracker/IterativeTracking/python/iterativeTkConfig.py +++ b/RecoTracker/IterativeTracking/python/iterativeTkConfig.py @@ -46,8 +46,13 @@ "MixedTripletStep", "PixelLessStep", "TobTecStep", - "JetCoreRegionalStep", ] + +from Configuration.ProcessModifiers.displacedTracking_cff import displacedTracking +displacedTracking.toModify(_iterations_trackingPhase1, func=lambda x: x.append('DisplacedGeneralStep')) + +_iterations_trackingPhase1.append('JetCoreRegionalStep') + _iterations_trackingPhase2PU140 = [ "InitialStep", "HighPtTripletStep", diff --git a/RecoTracker/IterativeTracking/python/iterativeTkUtils.py b/RecoTracker/IterativeTracking/python/iterativeTkUtils.py index 1cf5d937276a9..dbaead72d3951 100644 --- a/RecoTracker/IterativeTracking/python/iterativeTkUtils.py +++ b/RecoTracker/IterativeTracking/python/iterativeTkUtils.py @@ -22,7 +22,7 @@ def getMVASelectors(postfix): classifiers = [] if typeName == "ClassifierMerger": classifiers = mod.inputClassifiers.value() - elif "TrackMVAClassifier" in typeName or "TrackLwtnnClassifier" in typeName: + elif "TrackMVAClassifier" in typeName or "TrackLwtnnClassifier" or "TrackTfClassifier" in typeName: classifiers = [iterName] if len(classifiers) > 0: ret[iterName] = (iterName+"Tracks", classifiers) diff --git a/RecoTracker/IterativeTracking/python/iterativeTk_cff.py b/RecoTracker/IterativeTracking/python/iterativeTk_cff.py index e73188b8ff67b..89efb64bd62aa 100644 --- a/RecoTracker/IterativeTracking/python/iterativeTk_cff.py +++ b/RecoTracker/IterativeTracking/python/iterativeTk_cff.py @@ -9,6 +9,7 @@ from RecoTracker.IterativeTracking.MixedTripletStep_cff import * from RecoTracker.IterativeTracking.PixelLessStep_cff import * from RecoTracker.IterativeTracking.TobTecStep_cff import * +from RecoTracker.IterativeTracking.DisplacedGeneralStep_cff import * from RecoTracker.IterativeTracking.JetCoreRegionalStep_cff import * # Phase1 specific iterations @@ -23,7 +24,10 @@ from RecoTracker.ConversionSeedGenerators.ConversionStep_cff import * import RecoTracker.IterativeTracking.iterativeTkConfig as _cfg +from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import * + +trackdnn_source = cms.ESSource("EmptyESSource", recordName = cms.string("TfGraphRecord"), firstValid = cms.vuint32(1), iovIsRunNotTime = cms.bool(True) ) iterTrackingEarlyTask = _cfg.createEarlyTask("", "", globals()) for _eraName, _postfix, _era in _cfg.nonDefaultEras(): _era.toReplaceWith(iterTrackingEarlyTask, _cfg.createEarlyTask(_eraName, _postfix, globals())) @@ -39,4 +43,8 @@ ConvStepTask, conversionStepTracks ) + +_iterTrackingTask_trackdnn = iterTrackingTask.copy() +_iterTrackingTask_trackdnn.add(trackdnn_source) +trackdnn.toReplaceWith(iterTrackingTask, _iterTrackingTask_trackdnn) iterTracking = cms.Sequence(iterTrackingTask) diff --git a/RecoTracker/MeasurementDet/python/MeasurementTrackerEventProducer_cfi.py b/RecoTracker/MeasurementDet/python/MeasurementTrackerEventProducer_cfi.py index 2d4e807b21872..83a33b2313769 100644 --- a/RecoTracker/MeasurementDet/python/MeasurementTrackerEventProducer_cfi.py +++ b/RecoTracker/MeasurementDet/python/MeasurementTrackerEventProducer_cfi.py @@ -19,14 +19,14 @@ fastSim.toModify(MeasurementTrackerEvent, pixelClusterProducer = '', stripClusterProducer = '', - inactivePixelDetectorLabels = cms.VInputTag(), - inactiveStripDetectorLabels = cms.VInputTag(), + inactivePixelDetectorLabels = [], + inactiveStripDetectorLabels = [], switchOffPixelsIfEmpty = False ) from Configuration.ProcessModifiers.vectorHits_cff import vectorHits vectorHits.toModify(MeasurementTrackerEvent, - vectorHits = ("siPhase2VectorHits", "accepted"), - vectorHitsRej = ("siPhase2VectorHits", "rejected"), + vectorHits = "siPhase2VectorHits:accepted", + vectorHitsRej = "siPhase2VectorHits:rejected", ) MeasurementTrackerEventPreSplitting = MeasurementTrackerEvent.clone( diff --git a/RecoTracker/TkDetLayers/src/TECLayer.cc b/RecoTracker/TkDetLayers/src/TECLayer.cc index 77b33d0614b94..e5db5ff5e61e5 100644 --- a/RecoTracker/TkDetLayers/src/TECLayer.cc +++ b/RecoTracker/TkDetLayers/src/TECLayer.cc @@ -144,7 +144,7 @@ SubLayerCrossings TECLayer::computeCrossings(const TrajectoryStateOnSurface& sta pair frontPath = crossing.pathLength(*theFrontDisk); if (!frontPath.first) - SubLayerCrossings(); + return SubLayerCrossings(); GlobalPoint gFrontPoint(crossing.position(frontPath.second)); @@ -156,7 +156,7 @@ SubLayerCrossings TECLayer::computeCrossings(const TrajectoryStateOnSurface& sta pair backPath = crossing.pathLength(*theBackDisk); if (!backPath.first) - SubLayerCrossings(); + return SubLayerCrossings(); GlobalPoint gBackPoint(crossing.position(backPath.second)); LogDebug("TkDetLayers") << "in TECLayer,back crossing point: r,z,phi: (" << gBackPoint.perp() << "," diff --git a/RecoTracker/TkDetLayers/test/TkDetLayersAnalyzer.py b/RecoTracker/TkDetLayers/test/TkDetLayersAnalyzer.py index 01d164c371229..f17b46d2b9184 100644 --- a/RecoTracker/TkDetLayers/test/TkDetLayersAnalyzer.py +++ b/RecoTracker/TkDetLayers/test/TkDetLayersAnalyzer.py @@ -17,7 +17,7 @@ process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'DEBUG' -# process.MessageLogger.categories = ['TkDetLayers'] +# process.MessageLogger.debugModules = ['analyzer'] #process.MessageLogger.cerr.DEBUG = cms.untracked.PSet( # threshold = cms.untracked.string('DEBUG'), diff --git a/RecoTracker/TkSeedGenerator/plugins/BuildFile.xml b/RecoTracker/TkSeedGenerator/plugins/BuildFile.xml index abaa5754e68c7..4dc0bfafbb439 100644 --- a/RecoTracker/TkSeedGenerator/plugins/BuildFile.xml +++ b/RecoTracker/TkSeedGenerator/plugins/BuildFile.xml @@ -1,3 +1,4 @@ + @@ -30,7 +31,7 @@ - + diff --git a/RecoTracker/TkSeedGenerator/plugins/ClusterCheckerEDProducer.cc b/RecoTracker/TkSeedGenerator/plugins/ClusterCheckerEDProducer.cc index 1725ceff28d19..a6e4dab820b44 100644 --- a/RecoTracker/TkSeedGenerator/plugins/ClusterCheckerEDProducer.cc +++ b/RecoTracker/TkSeedGenerator/plugins/ClusterCheckerEDProducer.cc @@ -3,6 +3,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "RecoTracker/TkSeedGenerator/interface/ClusterChecker.h" diff --git a/RecoTracker/TkSeedGenerator/plugins/DeepCoreSeedGenerator.cc b/RecoTracker/TkSeedGenerator/plugins/DeepCoreSeedGenerator.cc new file mode 100644 index 0000000000000..6ffb2349d5c00 --- /dev/null +++ b/RecoTracker/TkSeedGenerator/plugins/DeepCoreSeedGenerator.cc @@ -0,0 +1,577 @@ +// -*- C++ -*- +// +// Package: trackJet/DeepCoreSeedGenerator +// Class: DeepCoreSeedGenerator +// +/**\class DeepCoreSeedGenerator DeepCoreSeedGenerator.cc trackJet/DeepCoreSeedGenerator/plugins/DeepCoreSeedGenerator.cc + + Description: [one line class summary] + + Implementation: + [Notes on implementation] +*/ +// +// Original Author: Valerio Bertacchi +// Created: Mon, 18 Dec 2017 16:35:04 GMT +// +// + +// system include files + +#include + +// user include files + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h" +#include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h" +#include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" + +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/DetSetVector.h" +#include "DataFormats/Common/interface/DetSet.h" +#include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" +#include "DataFormats/JetReco/interface/Jet.h" +#include "DataFormats/SiPixelDigi/interface/PixelDigi.h" +#include "DataFormats/GeometryVector/interface/VectorUtil.h" +#include "DataFormats/Math/interface/Point3D.h" +#include "DataFormats/Math/interface/Vector3D.h" +#include "DataFormats/Candidate/interface/Candidate.h" + +#include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelClusterParameterEstimator.h" +#include "RecoLocalTracker/Records/interface/TkPixelCPERecord.h" + +#include "TrackingTools/GeomPropagators/interface/StraightLinePlaneCrossing.h" +#include "TrackingTools/GeomPropagators/interface/Propagator.h" +#include "TrackingTools/Records/interface/TrackingComponentsRecord.h" + +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" + +#include "FWCore/ServiceRegistry/interface/Service.h" + +#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" + +#include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h" + +#include "PhysicsTools/TensorFlow/interface/TensorFlow.h" + +// +// class declaration +// +struct DeepCoreCache { + const tensorflow::GraphDef* graph_def; +}; + +class DeepCoreSeedGenerator : public edm::stream::EDProducer> { +public: + explicit DeepCoreSeedGenerator(const edm::ParameterSet&, const DeepCoreCache*); + ~DeepCoreSeedGenerator() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + // A pointer to a cluster and a list of tracks on it + + // static methods for handling the global cache + static std::unique_ptr initializeGlobalCache(const edm::ParameterSet&); + static void globalEndJob(DeepCoreCache*); + + double jetPt_; + double jetEta_; + double pitchX_ = 0.01; //100 um (pixel pitch in X) + double pitchY_ = 0.015; //150 um (pixel pitch in Y) + static constexpr int jetDimX = 30; //pixel dimension of NN window on layer2 + static constexpr int jetDimY = 30; //pixel dimension of NN window on layer2 + static constexpr int Nlayer = 4; //Number of layer used in DeepCore + static constexpr int Nover = 3; //Max number of tracks recorded per pixel + static constexpr int Npar = 5; //Number of track parameter + +private: + void beginJob(); + void produce(edm::Event&, const edm::EventSetup&) override; + void endJob(); + + // ----------member data --------------------------- + std::string propagatorName_; + edm::ESHandle magfield_; + edm::ESHandle geometry_; + edm::ESHandle propagator_; + + edm::EDGetTokenT> vertices_; + edm::EDGetTokenT> pixelClusters_; + edm::Handle> inputPixelClusters_; + edm::EDGetTokenT> cores_; + const edm::ESGetToken topoToken_; + + double ptMin_; + double deltaR_; + double chargeFracMin_; + double centralMIPCharge_; + std::string pixelCPE_; + std::string weightfilename_; + std::vector inputTensorName_; + std::vector outputTensorName_; + double probThr_; + tensorflow::Session* session_; + + std::pair> findIntersection(const GlobalVector&, + const reco::Candidate::Point&, + const GeomDet*); + + void fillPixelMatrix(const SiPixelCluster&, + int, + Point3DBase, + const GeomDet*, + tensorflow::NamedTensorList); //if not working,: args=2 auto + + std::pair local2Pixel(double, double, const GeomDet*); + + LocalPoint pixel2Local(int, int, const GeomDet*); + + int pixelFlipper(const GeomDet*); + + const GeomDet* DetectorSelector(int, + const reco::Candidate&, + GlobalVector, + const reco::Vertex&, + const TrackerTopology* const, + const edmNew::DetSetVector&); + + std::vector splittedClusterDirections( + const reco::Candidate&, + const TrackerTopology* const, + const PixelClusterParameterEstimator*, + const reco::Vertex&, + int, + const edmNew::DetSetVector&); //if not working,: args=2 auto + + std::pair SeedEvaluation( + tensorflow::NamedTensorList, std::vector); +}; + +DeepCoreSeedGenerator::DeepCoreSeedGenerator(const edm::ParameterSet& iConfig, const DeepCoreCache* cache) + : vertices_(consumes(iConfig.getParameter("vertices"))), + pixelClusters_( + consumes>(iConfig.getParameter("pixelClusters"))), + cores_(consumes>(iConfig.getParameter("cores"))), + topoToken_(esConsumes()), + ptMin_(iConfig.getParameter("ptMin")), + deltaR_(iConfig.getParameter("deltaR")), + chargeFracMin_(iConfig.getParameter("chargeFractionMin")), + centralMIPCharge_(iConfig.getParameter("centralMIPCharge")), + pixelCPE_(iConfig.getParameter("pixelCPE")), + weightfilename_(iConfig.getParameter("weightFile").fullPath()), + inputTensorName_(iConfig.getParameter>("inputTensorName")), + outputTensorName_(iConfig.getParameter>("outputTensorName")), + probThr_(iConfig.getParameter("probThr")), + session_(tensorflow::createSession(cache->graph_def)) + +{ + produces(); + produces(); +} + +DeepCoreSeedGenerator::~DeepCoreSeedGenerator() {} + +void DeepCoreSeedGenerator::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + auto result = std::make_unique(); + auto resultTracks = std::make_unique(); + + const tensorflow::TensorShape input_size_eta({1, 1}); + const tensorflow::TensorShape input_size_pt({1, 1}); + const tensorflow::TensorShape input_size_cluster({1, jetDimX, jetDimY, Nlayer}); + std::vector output_names; + output_names.push_back(outputTensorName_[0]); + output_names.push_back(outputTensorName_[1]); + + using namespace edm; + using namespace reco; + + iSetup.get().get(magfield_); + iSetup.get().get(geometry_); + iSetup.get().get("AnalyticalPropagator", propagator_); + + const auto& inputPixelClusters_ = iEvent.get(pixelClusters_); + const auto& vertices = iEvent.get(vertices_); + const auto& cores = iEvent.get(cores_); + + edm::ESHandle pixelCPEhandle; + const PixelClusterParameterEstimator* pixelCPE; + iSetup.get().get(pixelCPE_, pixelCPEhandle); + pixelCPE = pixelCPEhandle.product(); + + const TrackerTopology* const tTopo = &iSetup.getData(topoToken_); + auto output = std::make_unique>(); + + for (const auto& jet : cores) { // jet loop + + if (jet.pt() > ptMin_) { + std::set ids; + const reco::Vertex& jetVertex = vertices[0]; + + std::vector splitClustDirSet = + splittedClusterDirections(jet, tTopo, pixelCPE, jetVertex, 1, inputPixelClusters_); + bool l2off = (splitClustDirSet.empty()); + if (splitClustDirSet.empty()) { //if layer 1 is broken find direcitons on layer 2 + splitClustDirSet = splittedClusterDirections(jet, tTopo, pixelCPE, jetVertex, 2, inputPixelClusters_); + } + splitClustDirSet.emplace_back(GlobalVector(jet.px(), jet.py(), jet.pz())); + for (int cc = 0; cc < (int)splitClustDirSet.size(); cc++) { + tensorflow::NamedTensorList input_tensors; //TensorFlow tensors init + input_tensors.resize(3); + input_tensors[0] = + tensorflow::NamedTensor(inputTensorName_[0], tensorflow::Tensor(tensorflow::DT_FLOAT, input_size_eta)); + input_tensors[1] = + tensorflow::NamedTensor(inputTensorName_[1], tensorflow::Tensor(tensorflow::DT_FLOAT, input_size_pt)); + input_tensors[2] = tensorflow::NamedTensor(inputTensorName_[2], + tensorflow::Tensor(tensorflow::DT_FLOAT, {input_size_cluster})); + + //put all the input tensor to 0 + input_tensors[0].second.matrix()(0, 0) = 0.0; + input_tensors[1].second.matrix()(0, 0) = 0.0; + for (int x = 0; x < jetDimX; x++) { + for (int y = 0; y < jetDimY; y++) { + for (int l = 0; l < 4; l++) { + input_tensors[2].second.tensor()(0, x, y, l) = 0.0; + } + } + } //end of TensorFlow tensors init + + GlobalVector bigClustDir = splitClustDirSet[cc]; + + jetEta_ = jet.eta(); + jetPt_ = jet.pt(); + input_tensors[0].second.matrix()(0, 0) = jet.eta(); + input_tensors[1].second.matrix()(0, 0) = jet.pt(); + + const GeomDet* globDet = DetectorSelector( + 2, jet, bigClustDir, jetVertex, tTopo, inputPixelClusters_); //det. aligned to bigClustDir on L2 + + if (globDet == nullptr) //no intersection between bigClustDir and pixel detector modules found + continue; + + const GeomDet* goodDet1 = DetectorSelector(1, jet, bigClustDir, jetVertex, tTopo, inputPixelClusters_); + const GeomDet* goodDet3 = DetectorSelector(3, jet, bigClustDir, jetVertex, tTopo, inputPixelClusters_); + const GeomDet* goodDet4 = DetectorSelector(4, jet, bigClustDir, jetVertex, tTopo, inputPixelClusters_); + + for (const auto& detset : inputPixelClusters_) { + const GeomDet* det = geometry_->idToDet(detset.id()); + + for (const auto& aCluster : detset) { + det_id_type aClusterID = detset.id(); + if (DetId(aClusterID).subdetId() != 1) + continue; + + int lay = tTopo->layer(det->geographicalId()); + + std::pair> interPair = + findIntersection(bigClustDir, (reco::Candidate::Point)jetVertex.position(), det); + if (interPair.first == false) + continue; + Basic3DVector inter = interPair.second; + auto localInter = det->specificSurface().toLocal((GlobalPoint)inter); + + GlobalPoint pointVertex(jetVertex.position().x(), jetVertex.position().y(), jetVertex.position().z()); + + LocalPoint clustPos_local = + pixelCPE->localParametersV(aCluster, (*geometry_->idToDetUnit(detset.id())))[0].first; + + if (std::abs(clustPos_local.x() - localInter.x()) / pitchX_ <= jetDimX / 2 && + std::abs(clustPos_local.y() - localInter.y()) / pitchY_ <= + jetDimY / 2) { //used the baricenter, better description maybe useful + + if (det == goodDet1 || det == goodDet3 || det == goodDet4 || det == globDet) { + fillPixelMatrix(aCluster, lay, localInter, det, input_tensors); + } + } //cluster in ROI + } //cluster + } //detset + + //here the NN produce the seed from the filled input + std::pair seedParamNN = + DeepCoreSeedGenerator::SeedEvaluation(input_tensors, output_names); + + for (int i = 0; i < jetDimX; i++) { + for (int j = 0; j < jetDimY; j++) { + for (int o = 0; o < Nover; o++) { + if (seedParamNN.second[i][j][o] > (probThr_ - o * 0.1 - (l2off ? 0.35 : 0))) { + std::pair> interPair = + findIntersection(bigClustDir, (reco::Candidate::Point)jetVertex.position(), globDet); + auto localInter = globDet->specificSurface().toLocal((GlobalPoint)interPair.second); + + int flip = pixelFlipper(globDet); // 1=not flip, -1=flip + int nx = i - jetDimX / 2; + int ny = j - jetDimY / 2; + nx = flip * nx; + std::pair pixInter = local2Pixel(localInter.x(), localInter.y(), globDet); + nx = nx + pixInter.first; + ny = ny + pixInter.second; + LocalPoint xyLocal = pixel2Local(nx, ny, globDet); + + double xx = xyLocal.x() + seedParamNN.first[i][j][o][0] * 0.01; //0.01=internal normalization of NN + double yy = xyLocal.y() + seedParamNN.first[i][j][o][1] * 0.01; //0.01=internal normalization of NN + LocalPoint localSeedPoint = LocalPoint(xx, yy, 0); + + double track_eta = + seedParamNN.first[i][j][o][2] * 0.01 + bigClustDir.eta(); //pay attention to this 0.01 + double track_theta = 2 * std::atan(std::exp(-track_eta)); + double track_phi = + seedParamNN.first[i][j][o][3] * 0.01 + bigClustDir.phi(); //pay attention to this 0.01 + + double pt = 1. / seedParamNN.first[i][j][o][4]; + double normdirR = pt / sin(track_theta); + + const GlobalVector globSeedDir( + GlobalVector::Polar(Geom::Theta(track_theta), Geom::Phi(track_phi), normdirR)); + LocalVector localSeedDir = globDet->surface().toLocal(globSeedDir); + int64_t seedid = (int64_t(xx * 200.) << 0) + (int64_t(yy * 200.) << 16) + + (int64_t(track_eta * 400.) << 32) + (int64_t(track_phi * 400.) << 48); + if (ids.count(seedid) != 0) { + continue; + } + //to disable jetcore iteration comment from here to probability block end---> + //seeing iteration skipped, useful to total eff and FakeRate comparison + ids.insert(seedid); + + //Covariance matrix, the hadrcoded variances = NN residuals width + //(see https://twiki.cern.ch/twiki/bin/view/CMSPublic/NNJetCoreAtCtD2019) + float em[15] = {0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0}; // (see LocalTrajectoryError for details), order as follow: + em[0] = 0.15 * 0.15; // q/pt + em[2] = 0.5e-5; // dxdz + em[5] = 0.5e-5; // dydz + em[9] = 2e-5; // x + em[14] = 2e-5; // y + long int detId = globDet->geographicalId(); + LocalTrajectoryParameters localParam(localSeedPoint, localSeedDir, TrackCharge(1)); + result->emplace_back(TrajectorySeed(PTrajectoryStateOnDet(localParam, pt, em, detId, /*surfaceSide*/ 0), + edm::OwnVector(), + PropagationDirection::alongMomentum)); + + GlobalPoint globalSeedPoint = globDet->surface().toGlobal(localSeedPoint); + reco::Track::CovarianceMatrix mm; + resultTracks->emplace_back( + reco::Track(1, + 1, + reco::Track::Point(globalSeedPoint.x(), globalSeedPoint.y(), globalSeedPoint.z()), + reco::Track::Vector(globSeedDir.x(), globSeedDir.y(), globSeedDir.z()), + 1, + mm)); + } //probability + } + } + } + } //bigcluster + } //jet > pt + } //jet + iEvent.put(std::move(result)); + iEvent.put(std::move(resultTracks)); +} + +std::pair> DeepCoreSeedGenerator::findIntersection(const GlobalVector& dir, + const reco::Candidate::Point& vertex, + const GeomDet* det) { + StraightLinePlaneCrossing vertexPlane(Basic3DVector(vertex.x(), vertex.y(), vertex.z()), + Basic3DVector(dir.x(), dir.y(), dir.z())); + + std::pair> pos = vertexPlane.position(det->specificSurface()); + + return pos; +} + +std::pair DeepCoreSeedGenerator::local2Pixel(double locX, double locY, const GeomDet* det) { + LocalPoint locXY(locX, locY); + float pixX = (dynamic_cast(det))->specificTopology().pixel(locXY).first; + float pixY = (dynamic_cast(det))->specificTopology().pixel(locXY).second; + std::pair out(pixX, pixY); + return out; +} + +LocalPoint DeepCoreSeedGenerator::pixel2Local(int pixX, int pixY, const GeomDet* det) { + float locX = (dynamic_cast(det))->specificTopology().localX(pixX); + float locY = (dynamic_cast(det))->specificTopology().localY(pixY); + LocalPoint locXY(locX, locY); + return locXY; +} + +int DeepCoreSeedGenerator::pixelFlipper(const GeomDet* det) { + int out = 1; + LocalVector locZdir(0, 0, 1); + GlobalVector globZdir = det->specificSurface().toGlobal(locZdir); + const GlobalPoint& globDetCenter = det->position(); + float direction = + globZdir.x() * globDetCenter.x() + globZdir.y() * globDetCenter.y() + globZdir.z() * globDetCenter.z(); + if (direction < 0) + out = -1; + return out; +} + +void DeepCoreSeedGenerator::fillPixelMatrix(const SiPixelCluster& cluster, + int layer, + Point3DBase inter, + const GeomDet* det, + tensorflow::NamedTensorList input_tensors) { + int flip = pixelFlipper(det); // 1=not flip, -1=flip + + for (int i = 0; i < cluster.size(); i++) { + SiPixelCluster::Pixel pix = cluster.pixel(i); + std::pair pixInter = local2Pixel(inter.x(), inter.y(), det); + int nx = pix.x - pixInter.first; + int ny = pix.y - pixInter.second; + nx = flip * nx; + + if (abs(nx) < jetDimX / 2 && abs(ny) < jetDimY / 2) { + nx = nx + jetDimX / 2; + ny = ny + jetDimY / 2; + //14000 = normalization of ACD counts used in the NN + input_tensors[2].second.tensor()(0, nx, ny, layer - 1) += (pix.adc) / (14000.f); + } + } +} + +std::pair +DeepCoreSeedGenerator::SeedEvaluation(tensorflow::NamedTensorList input_tensors, + std::vector output_names) { + std::vector outputs; + tensorflow::run(session_, input_tensors, output_names, &outputs); + auto matrix_output_par = outputs.at(0).tensor(); + auto matrix_output_prob = outputs.at(1).tensor(); + + std::pair output_combined; + + for (int x = 0; x < jetDimX; x++) { + for (int y = 0; y < jetDimY; y++) { + for (int trk = 0; trk < Nover; trk++) { + output_combined.second[x][y][trk] = + matrix_output_prob(0, x, y, trk, 0); //outputs.at(1).matrix()(0,x,y,trk); + + for (int p = 0; p < Npar; p++) { + output_combined.first[x][y][trk][p] = + matrix_output_par(0, x, y, trk, p); //outputs.at(0).matrix()(0,x,y,trk,p); + } + } + } + } + return output_combined; +} + +const GeomDet* DeepCoreSeedGenerator::DetectorSelector(int llay, + const reco::Candidate& jet, + GlobalVector jetDir, + const reco::Vertex& jetVertex, + const TrackerTopology* const tTopo, + const edmNew::DetSetVector& clusters) { + double minDist = 0.0; + GeomDet* output = (GeomDet*)nullptr; + for (const auto& detset : clusters) { + auto aClusterID = detset.id(); + if (DetId(aClusterID).subdetId() != 1) + continue; + const GeomDet* det = geometry_->idToDet(aClusterID); + int lay = tTopo->layer(det->geographicalId()); + if (lay != llay) + continue; + std::pair> interPair = + findIntersection(jetDir, (reco::Candidate::Point)jetVertex.position(), det); + if (interPair.first == false) + continue; + Basic3DVector inter = interPair.second; + auto localInter = det->specificSurface().toLocal((GlobalPoint)inter); + if ((minDist == 0.0 || std::abs(localInter.x()) < minDist) && std::abs(localInter.y()) < 3.35) { + minDist = std::abs(localInter.x()); + output = (GeomDet*)det; + } + } //detset + return output; +} + +std::vector DeepCoreSeedGenerator::splittedClusterDirections( + const reco::Candidate& jet, + const TrackerTopology* const tTopo, + const PixelClusterParameterEstimator* pixelCPE, + const reco::Vertex& jetVertex, + int layer, + const edmNew::DetSetVector& clusters) { + std::vector clustDirs; + for (const auto& detset_int : clusters) { + const GeomDet* det_int = geometry_->idToDet(detset_int.id()); + int lay = tTopo->layer(det_int->geographicalId()); + if (lay != layer) + continue; //NB: saved bigClusters on all the layers!! + auto detUnit = geometry_->idToDetUnit(detset_int.id()); + for (const auto& aCluster : detset_int) { + GlobalPoint clustPos = det_int->surface().toGlobal(pixelCPE->localParametersV(aCluster, (*detUnit))[0].first); + GlobalPoint vertexPos(jetVertex.position().x(), jetVertex.position().y(), jetVertex.position().z()); + GlobalVector clusterDir = clustPos - vertexPos; + GlobalVector jetDir(jet.px(), jet.py(), jet.pz()); + if (Geom::deltaR(jetDir, clusterDir) < deltaR_) { + clustDirs.emplace_back(clusterDir); + } + } + } + return clustDirs; +} + +std::unique_ptr DeepCoreSeedGenerator::initializeGlobalCache(const edm::ParameterSet& iConfig) { + // this method is supposed to create, initialize and return a DeepCoreCache instance + std::unique_ptr cache = std::make_unique(); + std::string graphPath = iConfig.getParameter("weightFile").fullPath(); + cache->graph_def = tensorflow::loadGraphDef(graphPath); + return cache; +} + +void DeepCoreSeedGenerator::globalEndJob(DeepCoreCache* cache) { delete cache->graph_def; } + +// ------------ method called once each job just before starting event loop ------------ +void DeepCoreSeedGenerator::beginJob() {} + +// ------------ method called once each job just after ending the event loop ------------ +void DeepCoreSeedGenerator::endJob() {} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ +void DeepCoreSeedGenerator::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("vertices", edm::InputTag("offlinePrimaryVertices")); + desc.add("pixelClusters", edm::InputTag("siPixelClustersPreSplitting")); + desc.add("cores", edm::InputTag("jetsForCoreTracking")); + desc.add("ptMin", 300); + desc.add("deltaR", 0.1); + desc.add("chargeFractionMin", 18000.0); + desc.add("centralMIPCharge", 2); + desc.add("pixelCPE", "PixelCPEGeneric"); + desc.add( + "weightFile", + edm::FileInPath("RecoTracker/TkSeedGenerator/data/DeepCore/DeepCoreSeedGenerator_TrainedModel_barrel_2017.pb")); + desc.add>("inputTensorName", {"input_1", "input_2", "input_3"}); + desc.add>("outputTensorName", {"output_node0", "output_node1"}); + desc.add("probThr", 0.85); + descriptions.add("deepCoreSeedGenerator", desc); +} + +DEFINE_FWK_MODULE(DeepCoreSeedGenerator); diff --git a/RecoTracker/TkSeedingLayers/python/DisplacedGeneralLayerTriplet_cfi.py b/RecoTracker/TkSeedingLayers/python/DisplacedGeneralLayerTriplet_cfi.py new file mode 100644 index 0000000000000..dd63dd7ac0dab --- /dev/null +++ b/RecoTracker/TkSeedingLayers/python/DisplacedGeneralLayerTriplet_cfi.py @@ -0,0 +1,116 @@ +import FWCore.ParameterSet.Config as cms + +from RecoTracker.TkSeedingLayers.seedingLayersEDProducer_cfi import * + +DisplacedGeneralLayerTriplet = seedingLayersEDProducer.clone( + layerList = cms.vstring( + #---------- + #TIB + #---------- + + 'TIB1+TIB2+MTIB3', + 'TIB1+TIB2+MTIB4', + 'TIB1+MTIB3+MTIB4', + 'TIB2+MTIB3+MTIB4', + + #---------- + #TOB + #---------- + 'TOB1+TOB2+MTOB3', + 'TOB2+MTOB3+MTOB4', + 'MTOB3+MTOB4+MTOB5', + 'MTOB4+MTOB5+MTOB6', + + #---------- + #TIB+TOB + #---------- + 'MTIB4+TOB1+TOB2', + 'MTIB4+TOB2+MTOB3', + 'MTIB3+TOB1+TOB2', + + #---------- + #TID+TOB + #---------- + + 'MTID1_pos+TOB1+TOB2','MTID1_neg+TOB1+TOB2', + 'MTID1_pos+TOB1+TOB2','MTID1_neg+TOB1+TOB2', + 'MTID2_pos+TOB1+TOB2','MTID2_neg+TOB1+TOB2', + 'MTID3_pos+TOB1+TOB2','MTID3_neg+TOB1+TOB2', + + #TOB+MTEC + 'TOB1+TOB2+MTEC1_pos','TOB1+TOB2+MTEC1_neg', + + #TID+TEC + 'TID1+TID2+TEC1_pos', 'TID1+TID2+TEC1_neg', + 'TID2+MTID3+TEC1_pos', 'TID2+MTID3+TEC1_neg', + 'MTID3+TEC1_pos+MTEC2_pos', 'MTID3+TEC1_neg+MTEC2_neg'), + + + TOB = cms.PSet( + TTRHBuilder = cms.string('WithTrackAngle'), + clusterChargeCut = cms.PSet(refToPSet_ = cms.string('SiStripClusterChargeCutTight')), + matchedRecHits = cms.InputTag("siStripMatchedRecHits","matchedRecHit"), + skipClusters = cms.InputTag('displacedGeneralStepClusters') + ), + + MTOB = cms.PSet( + TTRHBuilder = cms.string('WithTrackAngle'), + clusterChargeCut = cms.PSet(refToPSet_ = cms.string('SiStripClusterChargeCutTight')), + rphiRecHits = cms.InputTag("siStripMatchedRecHits","rphiRecHit"), + skipClusters = cms.InputTag('displacedGeneralStepClusters') + ), + + TIB = cms.PSet( + TTRHBuilder = cms.string('WithTrackAngle'), + clusterChargeCut = cms.PSet(refToPSet_ = cms.string('SiStripClusterChargeCutTight')), + matchedRecHits = cms.InputTag('siStripMatchedRecHits','matchedRecHit'), + skipClusters = cms.InputTag('displacedGeneralStepClusters') + ), + + MTIB = cms.PSet( + TTRHBuilder = cms.string('WithTrackAngle'), + clusterChargeCut = cms.PSet(refToPSet_ = cms.string('SiStripClusterChargeCutTight')), + rphiRecHits = cms.InputTag('siStripMatchedRecHits','rphiRecHit'), + skipClusters = cms.InputTag('displacedGeneralStepClusters') + ), + + TID = cms.PSet( + TTRHBuilder = cms.string('WithTrackAngle'), + clusterChargeCut = cms.PSet(refToPSet_ = cms.string('SiStripClusterChargeCutTight')), + matchedRecHits = cms.InputTag('siStripMatchedRecHits','matchedRecHit'), + skipClusters = cms.InputTag('displacedGeneralStepClusters'), + useRingSlector = cms.bool(True), + minRing = cms.int32(1), + maxRing = cms.int32(2) + ), + + MTID = cms.PSet( + TTRHBuilder = cms.string('WithTrackAngle'), + clusterChargeCut = cms.PSet(refToPSet_ = cms.string('SiStripClusterChargeCutTight')), + rphiRecHits = cms.InputTag('siStripMatchedRecHits','rphiRecHit'), + skipClusters = cms.InputTag('displacedGeneralStepClusters'), + useRingSlector = cms.bool(True), + minRing = cms.int32(3), + maxRing = cms.int32(3) + ), + + TEC = cms.PSet( + TTRHBuilder = cms.string('WithTrackAngle'), + clusterChargeCut = cms.PSet(refToPSet_ = cms.string('SiStripClusterChargeCutTight')), + matchedRecHits = cms.InputTag('siStripMatchedRecHits','matchedRecHit'), + skipClusters = cms.InputTag('displacedGeneralStepClusters'), + useRingSlector = cms.bool(True), + minRing = cms.int32(5), + maxRing = cms.int32(5) + ), + + MTEC = cms.PSet( + TTRHBuilder = cms.string('WithTrackAngle'), + clusterChargeCut = cms.PSet(refToPSet_ = cms.string('SiStripClusterChargeCutTight')), + rphiRecHits = cms.InputTag('siStripMatchedRecHits','rphiRecHit'), + skipClusters = cms.InputTag('displacedGeneralStepClusters'), + useRingSlector = cms.bool(True), + minRing = cms.int32(6), + maxRing = cms.int32(7) + ) +) diff --git a/RecoTracker/TrackProducer/python/TrackRefitters_cff.py b/RecoTracker/TrackProducer/python/TrackRefitters_cff.py index dd1a8edbf714a..a9d8e15f94978 100644 --- a/RecoTracker/TrackProducer/python/TrackRefitters_cff.py +++ b/RecoTracker/TrackProducer/python/TrackRefitters_cff.py @@ -1,10 +1,11 @@ import FWCore.ParameterSet.Config as cms +from RecoLocalTracker.Configuration.RecoLocalTracker_cff import * + from RecoTracker.Configuration.RecoTracker_cff import * from RecoTracker.Configuration.RecoTrackerP5_cff import * from RecoTracker.Configuration.RecoTrackerBHM_cff import * - from RecoTracker.TrackProducer.TrackRefitter_cfi import * from RecoTracker.TrackProducer.TrackRefitterP5_cfi import * from RecoTracker.TrackProducer.TrackRefitterBHM_cfi import * diff --git a/RecoTracker/TransientTrackingRecHit/python/TTRHBuilderWithTemplate_cfi.py b/RecoTracker/TransientTrackingRecHit/python/TTRHBuilderWithTemplate_cfi.py index 8113dc7a133ba..7cf614b244009 100644 --- a/RecoTracker/TransientTrackingRecHit/python/TTRHBuilderWithTemplate_cfi.py +++ b/RecoTracker/TransientTrackingRecHit/python/TTRHBuilderWithTemplate_cfi.py @@ -16,5 +16,5 @@ phase1Pixel.toModify(TTRHBuilderAngleAndTemplate, PixelCPE = 'PixelCPEClusterRepair') # Turn off template reco for phase 2 (when not supported) -from Configuration.ProcessModifiers.phase2_PixelCPEGeneric_cff import phase2_PixelCPEGeneric -phase2_PixelCPEGeneric.toModify(TTRHBuilderAngleAndTemplate, PixelCPE = 'PixelCPEGeneric') +from Configuration.ProcessModifiers.PixelCPEGeneric_cff import PixelCPEGeneric +PixelCPEGeneric.toModify(TTRHBuilderAngleAndTemplate, PixelCPE = 'PixelCPEGeneric') diff --git a/RecoVertex/AdaptiveVertexFinder/python/inclusiveVertexing_cff.py b/RecoVertex/AdaptiveVertexFinder/python/inclusiveVertexing_cff.py index 7c16f4c6705b2..51f69495b36e5 100644 --- a/RecoVertex/AdaptiveVertexFinder/python/inclusiveVertexing_cff.py +++ b/RecoVertex/AdaptiveVertexFinder/python/inclusiveVertexing_cff.py @@ -43,7 +43,7 @@ ) candidateVertexArbitratorCvsL = candidateVertexArbitrator.clone( - secondaryVertices = cms.InputTag("candidateVertexMergerCvsL") + secondaryVertices = "candidateVertexMergerCvsL" ) inclusiveCandidateSecondaryVerticesCvsL = candidateVertexMerger.clone( diff --git a/RecoVertex/BeamSpotProducer/test/readOnlineBeamSpotFromDB.py b/RecoVertex/BeamSpotProducer/test/readOnlineBeamSpotFromDB.py index d5b0db285c24e..8d8be4a01c62a 100644 --- a/RecoVertex/BeamSpotProducer/test/readOnlineBeamSpotFromDB.py +++ b/RecoVertex/BeamSpotProducer/test/readOnlineBeamSpotFromDB.py @@ -37,8 +37,8 @@ process.BeamSpotESProducer = cms.ESProducer("OfflineToTransientBeamSpotESProducer") -process.MessageLogger.destinations = cms.untracked.vstring('detailedInfo') -process.MessageLogger.detailedInfo = cms.untracked.PSet(threshold = cms.untracked.string('INFO')) +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.detailedInfo = cms.untracked.PSet(threshold = cms.untracked.string('INFO')) process.source = cms.Source("EmptySource") process.source.numberEventsInRun=cms.untracked.uint32(2) diff --git a/RecoVertex/BeamSpotProducer/test/test_scalars.py b/RecoVertex/BeamSpotProducer/test/test_scalars.py index 8b56aaba8fdac..2f57cc6958a8f 100644 --- a/RecoVertex/BeamSpotProducer/test/test_scalars.py +++ b/RecoVertex/BeamSpotProducer/test/test_scalars.py @@ -85,9 +85,14 @@ process.MessageLogger = cms.Service("MessageLogger", - destinations = cms.untracked.vstring('cout'), - cout = cms.untracked.PSet(threshold = cms.untracked.string('INFO')) - ) + cerr = cms.untracked.PSet( + enable = cms.untracked.bool(False) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), + threshold = cms.untracked.string('INFO') + ) +) process.scalersRawToDigi = cms.EDProducer('ScalersRawToDigi') diff --git a/RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZT_vect.h b/RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZT_vect.h index 14eb3d258c96c..b1c61fa9e6f6e 100644 --- a/RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZT_vect.h +++ b/RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZT_vect.h @@ -1,5 +1,5 @@ -#ifndef DAClusterizerInZT_vect_h -#define DAClusterizerInZT_vect_h +#ifndef RecoVertex_PrimaryVertexProducer_DAClusterizerInZT_vect_h +#define RecoVertex_PrimaryVertexProducer_DAClusterizerInZT_vect_h /**\class DAClusterizerInZT_vect @@ -12,6 +12,7 @@ #include "RecoVertex/PrimaryVertexProducer/interface/TrackClusterizerInZ.h" #include "TrackingTools/TransientTrack/interface/TransientTrack.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include #include "DataFormats/Math/interface/Error.h" #include "RecoVertex/VertexTools/interface/VertexDistanceXY.h" @@ -19,119 +20,144 @@ #include +//#define USEVTXDT2 + class DAClusterizerInZT_vect final : public TrackClusterizerInZ { public: - // Internal data structure to + // internal data structure for tracks struct track_t { - void addItem( - double new_z, double new_t, double new_dz2, double new_dt2, const reco::TransientTrack *new_tt, double new_pi) { - z.push_back(new_z); - t.push_back(new_t); - dz2.push_back(new_dz2); - dt2.push_back(new_dt2); - tt.push_back(new_tt); + std::vector zpca_vec; // z-coordinate at point of closest approach to the beamline + std::vector tpca_vec; // t-coordinate at point of closest approach to the beamline + std::vector dz2_vec; // square of the error of z(pca) + std::vector dt2_vec; // square of the error of t(pca) + std::vector sum_Z_vec; // track contribution to the partition function, Z + std::vector tkwt_vec; // track weight, close to 1.0 for most tracks + std::vector kmin; // index of the first cluster within zrange + std::vector kmax; // 1 + index of the last cluster within zrange + std::vector tt; // a pointer to the Transient Track - pi.push_back(new_pi); // track weight - Z_sum.push_back(1.0); // Z[i] for DA clustering, initial value as done in ::fill + double osumtkwt; // 1. / (sum of all track weights) + + void addItem(double new_zpca, + double new_tpca, + double new_dz2, + double new_dt2, + const reco::TransientTrack *new_tt, + double new_tkwt) { + zpca_vec.push_back(new_zpca); + tpca_vec.push_back(new_tpca); + dz2_vec.push_back(new_dz2); + dt2_vec.push_back(new_dt2); + tt.push_back(new_tt); + tkwt_vec.push_back(new_tkwt); + sum_Z_vec.push_back(1.0); kmin.push_back(0); kmax.push_back(0); } - unsigned int getSize() const { return z.size(); } + void insertItem(unsigned int i, + double new_zpca, + double new_tpca, + double new_dz2, + double new_dt2, + const reco::TransientTrack *new_tt, + double new_tkwt) { + zpca_vec.insert(zpca_vec.begin() + i, new_zpca); + tpca_vec.insert(tpca_vec.begin() + i, new_tpca); + dz2_vec.insert(dz2_vec.begin() + i, new_dz2); + dt2_vec.insert(dt2_vec.begin() + i, new_dt2); + tt.insert(tt.begin() + i, new_tt); + tkwt_vec.insert(tkwt_vec.begin() + i, new_tkwt); + sum_Z_vec.insert(sum_Z_vec.begin() + i, 1.0); + kmin.insert(kmin.begin() + i, 0); + kmax.insert(kmax.begin() + i, 0); + } + + unsigned int getSize() const { return zpca_vec.size(); } // has to be called everytime the items are modified void extractRaw() { - z_ptr = &z.front(); - t_ptr = &t.front(); - dz2_ptr = &dz2.front(); - dt2_ptr = &dt2.front(); - pi_ptr = &pi.front(); - Z_sum_ptr = &Z_sum.front(); + zpca = &zpca_vec.front(); + tpca = &tpca_vec.front(); + dz2 = &dz2_vec.front(); + dt2 = &dt2_vec.front(); + tkwt = &tkwt_vec.front(); + sum_Z = &sum_Z_vec.front(); } - double *z_ptr; // z-coordinate at point of closest approach to the beamline - double *t_ptr; // t-coordinate at point of closest approach to the beamline - double *pi_ptr; // track weight - - double *dz2_ptr; // square of the error of z(pca) - double *dt2_ptr; // square of the error of t(pca) - double *Z_sum_ptr; // Z[i] for DA clustering - - std::vector z; // z-coordinate at point of closest approach to the beamline - std::vector t; // t-coordinate at point of closest approach to the beamline - std::vector dz2; // square of the error of z(pca) - std::vector dt2; // square of the error of t(pca) - std::vector Z_sum; // Z[i] for DA clustering - std::vector pi; // track weight - std::vector kmin; - std::vector kmax; - std::vector tt; // a pointer to the Transient Track + // pointers to the first element of vectors, needed for vectorized code + double *__restrict__ zpca; + double *__restrict__ tpca; + double *__restrict__ dz2; + double *__restrict__ dt2; + double *__restrict__ tkwt; + double *__restrict__ sum_Z; }; + // internal data structure for clusters struct vertex_t { - void addItem(double new_z, double new_t, double new_pk) { - z.push_back(new_z); - t.push_back(new_t); - pk.push_back(new_pk); - - ei_cache.push_back(0.0); - ei.push_back(0.0); - swz.push_back(0.0); - swt.push_back(0.0); - se.push_back(0.0); - nuz.push_back(0.0); - nut.push_back(0.0); - szz.push_back(0.0); - stt.push_back(0.0); - szt.push_back(0.0); - - dt2.push_back(0.0); - sumw.push_back(0.0); + std::vector zvtx_vec; // z coordinate + std::vector tvtx_vec; // t coordinate + std::vector rho_vec; // vertex "mass" for mass-constrained clustering +#ifdef USEVTXDT2 + std::vector dt2_vec; // only used with vertex time uncertainties + std::vector sumw_vec; // only used with vertex time uncertainties +#endif + // --- temporary numbers, used during update + std::vector exp_arg_vec; + std::vector exp_vec; + std::vector sw_vec; + std::vector swz_vec; + std::vector swt_vec; + std::vector se_vec; + std::vector nuz_vec; + std::vector nut_vec; + std::vector szz_vec; + std::vector stt_vec; + std::vector szt_vec; + + unsigned int getSize() const { return zvtx_vec.size(); } + + void addItem(double new_zvtx, double new_tvtx, double new_rho) { + zvtx_vec.push_back(new_zvtx); + tvtx_vec.push_back(new_tvtx); + rho_vec.push_back(new_rho); + exp_arg_vec.push_back(0.0); + exp_vec.push_back(0.0); + swz_vec.push_back(0.0); + swt_vec.push_back(0.0); + se_vec.push_back(0.0); + nuz_vec.push_back(0.0); + nut_vec.push_back(0.0); + szz_vec.push_back(0.0); + stt_vec.push_back(0.0); + szt_vec.push_back(0.0); +#ifdef USEVTXDT2 + dt2_vec.push_back(0.0); + sumw_vec.push_back(0.0); +#endif extractRaw(); } - unsigned int getSize() const { return z.size(); } - - // has to be called everytime the items are modified - void extractRaw() { - z_ptr = &z.front(); - t_ptr = &t.front(); - pk_ptr = &pk.front(); - dt2_ptr = &dt2.front(); - sumw_ptr = &sumw.front(); - - ei_ptr = &ei.front(); - swz_ptr = &swz.front(); - swt_ptr = &swt.front(); - se_ptr = &se.front(); - nuz_ptr = &nuz.front(); - nut_ptr = &nut.front(); - szz_ptr = &szz.front(); - stt_ptr = &stt.front(); - szt_ptr = &szt.front(); - - ei_cache_ptr = &ei_cache.front(); - } - - void insertItem(unsigned int k, double new_z, double new_t, double new_pk, track_t &tks) { - z.insert(z.begin() + k, new_z); - t.insert(t.begin() + k, new_t); - pk.insert(pk.begin() + k, new_pk); - dt2.insert(dt2.begin() + k, 0.0); - sumw.insert(sumw.begin() + k, 0.0); - - ei_cache.insert(ei_cache.begin() + k, 0.0); - ei.insert(ei.begin() + k, 0.0); - swz.insert(swz.begin() + k, 0.0); - swt.insert(swt.begin() + k, 0.0); - se.insert(se.begin() + k, 0.0); - - nuz.insert(nuz.begin() + k, 0.0); - nut.insert(nut.begin() + k, 0.0); - szz.insert(szz.begin() + k, 0.0); - stt.insert(stt.begin() + k, 0.0); - szt.insert(szt.begin() + k, 0.0); + void insertItem(unsigned int k, double new_zvtx, double new_tvtx, double new_rho, track_t &tks) { + zvtx_vec.insert(zvtx_vec.begin() + k, new_zvtx); + tvtx_vec.insert(tvtx_vec.begin() + k, new_tvtx); + rho_vec.insert(rho_vec.begin() + k, new_rho); + exp_arg_vec.insert(exp_arg_vec.begin() + k, 0.0); + exp_vec.insert(exp_vec.begin() + k, 0.0); + swz_vec.insert(swz_vec.begin() + k, 0.0); + swt_vec.insert(swt_vec.begin() + k, 0.0); + se_vec.insert(se_vec.begin() + k, 0.0); + nuz_vec.insert(nuz_vec.begin() + k, 0.0); + nut_vec.insert(nut_vec.begin() + k, 0.0); + szz_vec.insert(szz_vec.begin() + k, 0.0); + stt_vec.insert(stt_vec.begin() + k, 0.0); + szt_vec.insert(szt_vec.begin() + k, 0.0); +#ifdef USEVTXDT2 + dt2_vec.insert(dt2_vec.begin() + k, 0.0); + sumw_vec.insert(sumw_vec.begin() + k, 0.0); +#endif // adjust vertex lists of tracks for (unsigned int i = 0; i < tks.getSize(); i++) { @@ -145,24 +171,25 @@ class DAClusterizerInZT_vect final : public TrackClusterizerInZ { extractRaw(); } + void removeItem(unsigned int k, track_t &tks) { - z.erase(z.begin() + k); - t.erase(t.begin() + k); - pk.erase(pk.begin() + k); - dt2.erase(dt2.begin() + k); - sumw.erase(sumw.begin() + k); - - ei_cache.erase(ei_cache.begin() + k); - ei.erase(ei.begin() + k); - swz.erase(swz.begin() + k); - swt.erase(swt.begin() + k); - se.erase(se.begin() + k); - - nuz.erase(nuz.begin() + k); - nut.erase(nut.begin() + k); - szz.erase(szz.begin() + k); - stt.erase(stt.begin() + k); - szt.erase(szt.begin() + k); + zvtx_vec.erase(zvtx_vec.begin() + k); + tvtx_vec.erase(tvtx_vec.begin() + k); + rho_vec.erase(rho_vec.begin() + k); + exp_arg_vec.erase(exp_arg_vec.begin() + k); + exp_vec.erase(exp_vec.begin() + k); + swz_vec.erase(swz_vec.begin() + k); + swt_vec.erase(swt_vec.begin() + k); + se_vec.erase(se_vec.begin() + k); + nuz_vec.erase(nuz_vec.begin() + k); + nut_vec.erase(nut_vec.begin() + k); + szz_vec.erase(szz_vec.begin() + k); + stt_vec.erase(stt_vec.begin() + k); + szt_vec.erase(szt_vec.begin() + k); +#ifdef USEVTXDT2 + dt2_vec.erase(dt2_vec.begin() + k); + sumw_vec.erase(sumw_vec.begin() + k); +#endif // adjust vertex lists of tracks for (unsigned int i = 0; i < tks.getSize(); i++) { @@ -177,71 +204,67 @@ class DAClusterizerInZT_vect final : public TrackClusterizerInZ { extractRaw(); } - unsigned int insertOrdered(double z, double t, double pk, track_t &tks) { + unsigned int insertOrdered(double zvtx, double tvtx, double rho, track_t &tks) { // insert a new cluster according to it's z-position, return the index at which it was inserted unsigned int k = 0; for (; k < getSize(); k++) { - if (z < z_ptr[k]) + if (zvtx < zvtx_vec[k]) break; } - insertItem(k, z, t, pk, tks); + insertItem(k, zvtx, tvtx, rho, tks); return k; } - void debugOut() { - std::cout << "vertex_t size: " << getSize() << std::endl; + // pointers to the first element of vectors, needed for vectorized code + double *__restrict__ zvtx; + double *__restrict__ tvtx; + double *__restrict__ rho; + double *__restrict__ exp_arg; + double *__restrict__ exp; + double *__restrict__ swt; + double *__restrict__ swz; + double *__restrict__ se; + double *__restrict__ nuz; + double *__restrict__ nut; + double *__restrict__ szz; + double *__restrict__ stt; + double *__restrict__ szt; +#ifdef USEVTXDT2 + double *__restrict__ dt2; + double *__restrict__ sumw; +#endif - for (unsigned int i = 0; i < getSize(); ++i) { - std::cout << " z = " << z_ptr[i] << " t = " << t_ptr[i] << " pk = " << pk_ptr[i] << std::endl; - } + // has to be called everytime the items are modified + void extractRaw() { + zvtx = &zvtx_vec.front(); + tvtx = &tvtx_vec.front(); + rho = &rho_vec.front(); + exp_arg = &exp_arg_vec.front(); + exp = &exp_vec.front(); + swz = &swz_vec.front(); + swt = &swt_vec.front(); + se = &se_vec.front(); + nuz = &nuz_vec.front(); + nut = &nut_vec.front(); + szz = &szz_vec.front(); + stt = &stt_vec.front(); + szt = &szt_vec.front(); +#ifdef USEVTXDT2 + dt2 = &dt2_vec.front(); + sumw = &sumw_vec.front(); +#endif } - - std::vector z; // z coordinate - std::vector t; // t coordinate - std::vector pk; // vertex weight for "constrained" clustering - std::vector dt2; // only used with vertex time uncertainties - std::vector sumw; // only used with vertex time uncertainties - - double *z_ptr; - double *t_ptr; - double *pk_ptr; - double *dt2_ptr; - double *sumw_ptr; - - double *ei_cache_ptr; - double *ei_ptr; - double *swz_ptr; - double *swt_ptr; - double *se_ptr; - double *szz_ptr; - double *stt_ptr; - double *szt_ptr; - double *nuz_ptr; - double *nut_ptr; - - // --- temporary numbers, used during update - std::vector ei_cache; - std::vector ei; - std::vector swz; - std::vector swt; - std::vector se; - std::vector nuz; - std::vector nut; - std::vector szz; - std::vector stt; - std::vector szt; - - // copy made at the beginning of thermalize - std::vector z0; // z coordinate at last vtx range fixing }; DAClusterizerInZT_vect(const edm::ParameterSet &conf); + static void fillPSetDescription(edm::ParameterSetDescription &desc); + std::vector > clusterize( const std::vector &tracks) const override; - std::vector vertices(const std::vector &tracks, const int verbosity = 0) const; + std::vector vertices(const std::vector &tracks) const; track_t fill(const std::vector &tracks) const; @@ -252,7 +275,8 @@ class DAClusterizerInZT_vect final : public TrackClusterizerInZ { unsigned int thermalize( double beta, track_t >racks, vertex_t &gvertices, const double delta_max, const double rho0 = 0.) const; - double update(double beta, track_t >racks, vertex_t &gvertices, const double rho0 = 0) const; + double update( + double beta, track_t >racks, vertex_t &gvertices, const double rho0 = 0, const bool updateTc = false) const; void dump(const double beta, const vertex_t &y, const track_t &tks, const int verbosity = 0) const; bool zorder(vertex_t &y) const; @@ -267,7 +291,6 @@ class DAClusterizerInZT_vect final : public TrackClusterizerInZ { void verify(const vertex_t &v, const track_t &tks, unsigned int nv = 999999, unsigned int nt = 999999) const; private: - bool verbose_; double zdumpcenter_; double zdumpwidth_; @@ -284,6 +307,7 @@ class DAClusterizerInZT_vect final : public TrackClusterizerInZ { double mintrkweight_; double uniquetrkweight_; + double uniquetrkminp_; double zmerge_; double tmerge_; double betapurge_; diff --git a/RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZ_vect.h b/RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZ_vect.h index 5dac9b5ce89a1..ce45577aca261 100644 --- a/RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZ_vect.h +++ b/RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZ_vect.h @@ -1,5 +1,5 @@ -#ifndef DAClusterizerInZ_vect_h -#define DAClusterizerInZ_vect_h +#ifndef RecoVertex_PrimaryVertexProducer_DAClusterizerInZ_vect_h +#define RecoVertex_PrimaryVertexProducer_DAClusterizerInZ_vect_h /**\class DAClusterizerInZ_vect @@ -11,6 +11,7 @@ #include "RecoVertex/PrimaryVertexProducer/interface/TrackClusterizerInZ.h" #include "TrackingTools/TransientTrack/interface/TransientTrack.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include #include "DataFormats/Math/interface/Error.h" @@ -19,118 +20,95 @@ class DAClusterizerInZ_vect final : public TrackClusterizerInZ { public: - // Internal data structure to + static void fillPSetDescription(edm::ParameterSetDescription &desc); + + // internal data structure for tracks struct track_t { - void addItem(double new_z, double new_dz2, const reco::TransientTrack *new_tt, double new_pi) { - z.push_back(new_z); - dz2.push_back(new_dz2); - tt.push_back(new_tt); + std::vector zpca_vec; // z-coordinate at point of closest approach to the beamline + std::vector dz2_vec; // square of the error of z(pca) + std::vector sum_Z_vec; // track contribution to the partition function, Z + std::vector tkwt_vec; // track weight, close to 1.0 for most tracks + std::vector kmin; // index of the first cluster within zrange + std::vector kmax; // 1 + index of the last cluster within zrange + std::vector tt; // a pointer to the Transient Track - pi.push_back(new_pi); // track weight - Z_sum.push_back(1.0); // Z[i] for DA clustering, initial value as done in ::fill + double osumtkwt; // 1. / (sum of all track weights) - kmin.push_back(0); - kmax.push_back(0); - } - - void addItemSorted(double new_z, double new_dz2, const reco::TransientTrack *new_tt, double new_pi) { + void addItemSorted(double new_zpca, double new_dz2, const reco::TransientTrack *new_tt, double new_tkwt) { // sort tracks with decreasing resolution (note that dz2 = 1/sigma^2) unsigned int i = 0; - for (i = 0; i < z.size(); i++) { - if (new_dz2 > dz2[i]) + for (i = 0; i < zpca_vec.size(); i++) { + if (new_dz2 > dz2_vec[i]) break; } - insertItem(i, new_z, new_dz2, new_tt, new_pi); + insertItem(i, new_zpca, new_dz2, new_tt, new_tkwt); } - void insertItem(unsigned int i, double new_z, double new_dz2, const reco::TransientTrack *new_tt, double new_pi) { - z.insert(z.begin() + i, new_z); - dz2.insert(dz2.begin() + i, new_dz2); + void insertItem( + unsigned int i, double new_zpca, double new_dz2, const reco::TransientTrack *new_tt, double new_tkwt) { + zpca_vec.insert(zpca_vec.begin() + i, new_zpca); + dz2_vec.insert(dz2_vec.begin() + i, new_dz2); tt.insert(tt.begin() + i, new_tt); - pi.insert(pi.begin() + i, new_pi); // track weight - - Z_sum.insert(Z_sum.begin() + i, 1.0); // Z[i] for DA clustering, initial value as done in ::fill + tkwt_vec.insert(tkwt_vec.begin() + i, new_tkwt); + sum_Z_vec.insert(sum_Z_vec.begin() + i, 1.0); kmin.insert(kmin.begin() + i, 0); kmax.insert(kmax.begin() + i, 0); } - unsigned int getSize() const { return z.size(); } + unsigned int getSize() const { return zpca_vec.size(); } // has to be called everytime the items are modified void extractRaw() { - z_ptr = &z.front(); - dz2_ptr = &dz2.front(); - Z_sum_ptr = &Z_sum.front(); - pi_ptr = &pi.front(); + zpca = &zpca_vec.front(); + dz2 = &dz2_vec.front(); + tkwt = &tkwt_vec.front(); + sum_Z = &sum_Z_vec.front(); } - double *__restrict__ z_ptr; // z-coordinate at point of closest approach to the beamline - double *__restrict__ dz2_ptr; // square of the error of z(pca) - - double *__restrict__ Z_sum_ptr; // Z[i] for DA clustering - double *__restrict__ pi_ptr; // track weight - - std::vector z; // z-coordinate at point of closest approach to the beamline - std::vector dz2; // square of the error of z(pca) - std::vector Z_sum; // Z[i] for DA clustering - std::vector pi; // track weight - std::vector kmin; - std::vector kmax; - std::vector tt; // a pointer to the Transient Track + // pointers to the first element of vectors, needed for vectorized code + double *__restrict__ zpca; + double *__restrict__ dz2; + double *__restrict__ tkwt; + double *__restrict__ sum_Z; }; + // internal data structure for clusters struct vertex_t { - std::vector z; // z coordinate - std::vector pk; // vertex weight for "constrained" clustering - + std::vector zvtx_vec; // z coordinate + std::vector rho_vec; // vertex "mass" for mass-constrained clustering // --- temporary numbers, used during update - std::vector ei_cache; - std::vector ei; - std::vector sw; - std::vector swz; - std::vector se; - std::vector swE; - - unsigned int getSize() const { return z.size(); } - - void addItem(double new_z, double new_pk) { - z.push_back(new_z); - pk.push_back(new_pk); - - ei_cache.push_back(0.0); - ei.push_back(0.0); - sw.push_back(0.0); - swz.push_back(0.0); - se.push_back(0.0); - swE.push_back(0.0); + std::vector exp_arg_vec; + std::vector exp_vec; + std::vector sw_vec; + std::vector swz_vec; + std::vector se_vec; + std::vector swE_vec; + + unsigned int getSize() const { return zvtx_vec.size(); } + + void addItem(double new_zvtx, double new_rho) { + zvtx_vec.push_back(new_zvtx); + rho_vec.push_back(new_rho); + exp_arg_vec.push_back(0.0); + exp_vec.push_back(0.0); + sw_vec.push_back(0.0); + swz_vec.push_back(0.0); + se_vec.push_back(0.0); + swE_vec.push_back(0.0); extractRaw(); } - void insertItem(unsigned int k, double new_z, double new_pk) { - z.insert(z.begin() + k, new_z); - pk.insert(pk.begin() + k, new_pk); + void insertItem(unsigned int k, double new_zvtx, double new_rho, track_t &tks) { + zvtx_vec.insert(zvtx_vec.begin() + k, new_zvtx); + rho_vec.insert(rho_vec.begin() + k, new_rho); - ei_cache.insert(ei_cache.begin() + k, 0.0); - ei.insert(ei.begin() + k, 0.0); - sw.insert(sw.begin() + k, 0.0); - swz.insert(swz.begin() + k, 0.0); - se.insert(se.begin() + k, 0.0); - swE.insert(swE.begin() + k, 0.0); - - extractRaw(); - } - - void insertItem(unsigned int k, double new_z, double new_pk, track_t &tks) { - z.insert(z.begin() + k, new_z); - pk.insert(pk.begin() + k, new_pk); - - ei_cache.insert(ei_cache.begin() + k, 0.0); - ei.insert(ei.begin() + k, 0.0); - sw.insert(sw.begin() + k, 0.0); - swz.insert(swz.begin() + k, 0.0); - se.insert(se.begin() + k, 0.0); - swE.insert(swE.begin() + k, 0.0); + exp_arg_vec.insert(exp_arg_vec.begin() + k, 0.0); + exp_vec.insert(exp_vec.begin() + k, 0.0); + sw_vec.insert(sw_vec.begin() + k, 0.0); + swz_vec.insert(swz_vec.begin() + k, 0.0); + se_vec.insert(se_vec.begin() + k, 0.0); + swE_vec.insert(swE_vec.begin() + k, 0.0); // adjust vertex lists of tracks for (unsigned int i = 0; i < tks.getSize(); i++) { @@ -146,15 +124,15 @@ class DAClusterizerInZ_vect final : public TrackClusterizerInZ { } void removeItem(unsigned int k, track_t &tks) { - z.erase(z.begin() + k); - pk.erase(pk.begin() + k); + zvtx_vec.erase(zvtx_vec.begin() + k); + rho_vec.erase(rho_vec.begin() + k); - ei_cache.erase(ei_cache.begin() + k); - ei.erase(ei.begin() + k); - sw.erase(sw.begin() + k); - swz.erase(swz.begin() + k); - se.erase(se.begin() + k); - swE.erase(swE.begin() + k); + exp_arg_vec.erase(exp_arg_vec.begin() + k); + exp_vec.erase(exp_vec.begin() + k); + sw_vec.erase(sw_vec.begin() + k); + swz_vec.erase(swz_vec.begin() + k); + se_vec.erase(se_vec.begin() + k); + swE_vec.erase(swE_vec.begin() + k); // adjust vertex lists of tracks for (unsigned int i = 0; i < tks.getSize(); i++) { @@ -169,36 +147,27 @@ class DAClusterizerInZ_vect final : public TrackClusterizerInZ { extractRaw(); } - void DebugOut() { - std::cout << "vertex_t size: " << getSize() << std::endl; - - for (unsigned int i = 0; i < getSize(); ++i) { - std::cout << " z = " << z_ptr[i] << " pk = " << pk_ptr[i] << std::endl; - } - } + // pointers to the first element of vectors, needed for vectorized code + double *__restrict__ zvtx; + double *__restrict__ rho; + double *__restrict__ exp_arg; + double *__restrict__ exp; + double *__restrict__ sw; + double *__restrict__ swz; + double *__restrict__ se; + double *__restrict__ swE; // has to be called everytime the items are modified void extractRaw() { - z_ptr = &z.front(); - pk_ptr = &pk.front(); - - ei_ptr = &ei.front(); - sw_ptr = &sw.front(); - swz_ptr = &swz.front(); - se_ptr = &se.front(); - swE_ptr = &swE.front(); - ei_cache_ptr = &ei_cache.front(); + zvtx = &zvtx_vec.front(); + rho = &rho_vec.front(); + exp = &exp_vec.front(); + sw = &sw_vec.front(); + swz = &swz_vec.front(); + se = &se_vec.front(); + swE = &swE_vec.front(); + exp_arg = &exp_arg_vec.front(); } - - double *__restrict__ z_ptr; - double *__restrict__ pk_ptr; - - double *__restrict__ ei_cache_ptr; - double *__restrict__ ei_ptr; - double *__restrict__ sw_ptr; - double *__restrict__ swz_ptr; - double *__restrict__ se_ptr; - double *__restrict__ swE_ptr; }; DAClusterizerInZ_vect(const edm::ParameterSet &conf); @@ -206,7 +175,7 @@ class DAClusterizerInZ_vect final : public TrackClusterizerInZ { std::vector > clusterize( const std::vector &tracks) const override; - std::vector vertices(const std::vector &tracks, const int verbosity = 0) const; + std::vector vertices(const std::vector &tracks) const; track_t fill(const std::vector &tracks) const; @@ -217,8 +186,8 @@ class DAClusterizerInZ_vect final : public TrackClusterizerInZ { unsigned int thermalize( double beta, track_t >racks, vertex_t &gvertices, const double delta_max, const double rho0 = 0.) const; - double update(double beta, track_t >racks, vertex_t &gvertices, const double rho0 = 0) const; - double updateTc(double beta, track_t >racks, vertex_t &gvertices, const double rho0 = 0) const; + double update( + double beta, track_t >racks, vertex_t &gvertices, const double rho0 = 0, const bool updateTc = false) const; void dump(const double beta, const vertex_t &y, const track_t &tks, const int verbosity = 0) const; bool merge(vertex_t &y, track_t &tks, double &beta) const; @@ -226,11 +195,9 @@ class DAClusterizerInZ_vect final : public TrackClusterizerInZ { bool split(const double beta, track_t &t, vertex_t &y, double threshold = 1.) const; double beta0(const double betamax, track_t const &tks, vertex_t const &y) const; - double evalF(const double beta, track_t const &tks, vertex_t const &v) const; void verify(const vertex_t &v, const track_t &tks, unsigned int nv = 999999, unsigned int nt = 999999) const; private: - bool verbose_; double zdumpcenter_; double zdumpwidth_; @@ -244,6 +211,7 @@ class DAClusterizerInZ_vect final : public TrackClusterizerInZ { double mintrkweight_; double uniquetrkweight_; + double uniquetrkminp_; double zmerge_; double betapurge_; diff --git a/RecoVertex/PrimaryVertexProducer/interface/GapClusterizerInZ.h b/RecoVertex/PrimaryVertexProducer/interface/GapClusterizerInZ.h index 68cecfaa6a296..d70d2e0291aa7 100644 --- a/RecoVertex/PrimaryVertexProducer/interface/GapClusterizerInZ.h +++ b/RecoVertex/PrimaryVertexProducer/interface/GapClusterizerInZ.h @@ -10,11 +10,14 @@ #include "TrackingTools/TransientTrack/interface/TransientTrack.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" class GapClusterizerInZ : public TrackClusterizerInZ { public: GapClusterizerInZ(const edm::ParameterSet& conf); + static void fillPSetDescription(edm::ParameterSetDescription& desc); + std::vector > clusterize( const std::vector& tracks) const override; diff --git a/RecoVertex/PrimaryVertexProducer/interface/HITrackFilterForPVFinding.h b/RecoVertex/PrimaryVertexProducer/interface/HITrackFilterForPVFinding.h index 8d0f515829e9d..9b2a0a48a6a39 100644 --- a/RecoVertex/PrimaryVertexProducer/interface/HITrackFilterForPVFinding.h +++ b/RecoVertex/PrimaryVertexProducer/interface/HITrackFilterForPVFinding.h @@ -29,6 +29,11 @@ class HITrackFilterForPVFinding : public TrackFilterForPVFinding { return seltks; } } + + static void fillPSetDescription(edm::ParameterSetDescription& desc) { + TrackFilterForPVFinding::fillPSetDescription(desc); + desc.add("numTracksThreshold", 0); // HI only + } }; #endif diff --git a/RecoVertex/PrimaryVertexProducer/interface/PrimaryVertexProducer.h b/RecoVertex/PrimaryVertexProducer/interface/PrimaryVertexProducer.h index 4405178d579da..035e7d2f4ce40 100644 --- a/RecoVertex/PrimaryVertexProducer/interface/PrimaryVertexProducer.h +++ b/RecoVertex/PrimaryVertexProducer/interface/PrimaryVertexProducer.h @@ -30,6 +30,8 @@ //#include "RecoVertex/PrimaryVertexProducer/interface/PrimaryVertexProducerAlgorithm.h" #include "TrackingTools/TransientTrack/interface/TransientTrack.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" +#include "TrackingTools/Records/interface/TransientTrackRecord.h" #include "RecoVertex/PrimaryVertexProducer/interface/TrackFilterForPVFindingBase.h" #include "RecoVertex/PrimaryVertexProducer/interface/TrackClusterizerInZ.h" #include "RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZ_vect.h" @@ -65,6 +67,8 @@ class PrimaryVertexProducer : public edm::stream::EDProducer<> { private: // ----------member data --------------------------- + const edm::ESGetToken theTTBToken; + TrackFilterForPVFindingBase* theTrackFilter; TrackClusterizerInZ* theTrackClusterizer; diff --git a/RecoVertex/PrimaryVertexProducer/interface/TrackFilterForPVFinding.h b/RecoVertex/PrimaryVertexProducer/interface/TrackFilterForPVFinding.h index 37f6bbf7713a0..ebb603bb0dce4 100644 --- a/RecoVertex/PrimaryVertexProducer/interface/TrackFilterForPVFinding.h +++ b/RecoVertex/PrimaryVertexProducer/interface/TrackFilterForPVFinding.h @@ -9,11 +9,15 @@ #include "RecoVertex/PrimaryVertexProducer/interface/TrackFilterForPVFindingBase.h" #include "TrackingTools/TransientTrack/interface/TransientTrack.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include class TrackFilterForPVFinding : public TrackFilterForPVFindingBase { public: TrackFilterForPVFinding(const edm::ParameterSet& conf); + + static void fillPSetDescription(edm::ParameterSetDescription& desc); + bool operator()(const reco::TransientTrack& tracks) const; std::vector select(const std::vector& tracks) const override; diff --git a/RecoVertex/PrimaryVertexProducer/plugins/PrimaryVertexProducer.cc b/RecoVertex/PrimaryVertexProducer/plugins/PrimaryVertexProducer.cc index abdb054a95f8c..464bf1d663dce 100644 --- a/RecoVertex/PrimaryVertexProducer/plugins/PrimaryVertexProducer.cc +++ b/RecoVertex/PrimaryVertexProducer/plugins/PrimaryVertexProducer.cc @@ -11,13 +11,12 @@ #include "RecoVertex/VertexTools/interface/VertexDistanceXY.h" #include "FWCore/Framework/interface/ESHandle.h" -#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" -#include "TrackingTools/Records/interface/TransientTrackRecord.h" #include "DataFormats/BeamSpot/interface/BeamSpot.h" #include "RecoVertex/VertexTools/interface/GeometricAnnealing.h" -PrimaryVertexProducer::PrimaryVertexProducer(const edm::ParameterSet& conf) : theConfig(conf) { +PrimaryVertexProducer::PrimaryVertexProducer(const edm::ParameterSet& conf) + : theTTBToken(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))), theConfig(conf) { fVerbose = conf.getUntrackedParameter("verbose", false); trkToken = consumes(conf.getParameter("TrackLabel")); @@ -32,8 +31,7 @@ PrimaryVertexProducer::PrimaryVertexProducer(const edm::ParameterSet& conf) : th } else if (trackSelectionAlgorithm == "filterWithThreshold") { theTrackFilter = new HITrackFilterForPVFinding(conf.getParameter("TkFilterParameters")); } else { - throw VertexException("PrimaryVertexProducerAlgorithm: unknown track selection algorithm: " + - trackSelectionAlgorithm); + throw VertexException("PrimaryVertexProducer: unknown track selection algorithm: " + trackSelectionAlgorithm); } // select and configure the track clusterizer @@ -57,7 +55,7 @@ PrimaryVertexProducer::PrimaryVertexProducer(const edm::ParameterSet& conf) : th } else { - throw VertexException("PrimaryVertexProducerAlgorithm: unknown clustering algorithm: " + clusteringAlgorithm); + throw VertexException("PrimaryVertexProducer: unknown clustering algorithm: " + clusteringAlgorithm); } if (f4D) { @@ -80,7 +78,7 @@ PrimaryVertexProducer::PrimaryVertexProducer(const edm::ParameterSet& conf) : th } else if (fitterAlgorithm == "AdaptiveVertexFitter") { algorithm.fitter = new AdaptiveVertexFitter(GeometricAnnealing(algoconf->getParameter("chi2cutoff"))); } else { - throw VertexException("PrimaryVertexProducerAlgorithm: unknown algorithm: " + fitterAlgorithm); + throw VertexException("PrimaryVertexProducer: unknown algorithm: " + fitterAlgorithm); } algorithm.label = algoconf->getParameter("label"); algorithm.minNdof = algoconf->getParameter("minNdof"); @@ -120,10 +118,10 @@ PrimaryVertexProducer::PrimaryVertexProducer(const edm::ParameterSet& conf) : th fRecoveryIteration = conf.getParameter("isRecoveryIteration"); if (fRecoveryIteration) { if (algorithms.empty()) { - throw VertexException("PrimaryVertexProducerAlgorithm: No algorithm specified. "); + throw VertexException("PrimaryVertexProducer: No algorithm specified. "); } else if (algorithms.size() > 1) { throw VertexException( - "PrimaryVertexProducerAlgorithm: Running in Recovery mode and more than one algorithm specified. Please " + "PrimaryVertexProducer: Running in Recovery mode and more than one algorithm specified. Please " "only one algorithm."); } recoveryVtxToken = consumes(conf.getParameter("recoveryVtxCollection")); @@ -144,7 +142,7 @@ PrimaryVertexProducer::~PrimaryVertexProducer() { } void PrimaryVertexProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - // get the BeamSpot, it will alwys be needed, even when not used as a constraint + // get the BeamSpot, it will always be needed, even when not used as a constraint reco::BeamSpot beamSpot; edm::Handle recoBeamSpotHandle; iEvent.getByToken(bsToken, recoBeamSpotHandle); @@ -184,8 +182,7 @@ void PrimaryVertexProducer::produce(edm::Event& iEvent, const edm::EventSetup& i iEvent.getByToken(trkToken, tks); // interface RECO tracks to vertex reconstruction - edm::ESHandle theB; - iSetup.get().get("TransientTrackBuilder", theB); + const auto& theB = &iSetup.getData(theTTBToken); std::vector t_tks; if (f4D) { @@ -251,8 +248,10 @@ void PrimaryVertexProducer::produce(edm::Event& iEvent, const edm::EventSetup& i if (f4D) { if (v.isValid()) { auto err = v.positionError().matrix4D(); + auto trkweightMap3d = v.weightMap(); // copy the 3 fit weights err(3, 3) = vartime; v = TransientVertex(v.position(), meantime, err, v.originalTracks(), v.totalChiSquared()); + v.weightMap(trkweightMap3d); } } @@ -390,16 +389,7 @@ void PrimaryVertexProducer::fillDescriptions(edm::ConfigurationDescriptions& des desc.addUntracked("verbose", false); { edm::ParameterSetDescription psd0; - psd0.add("maxNormalizedChi2", 10.0); - psd0.add("minPt", 0.0); - psd0.add("algorithm", "filter"); - psd0.add("maxEta", 2.4); - psd0.add("maxD0Significance", 4.0); - psd0.add("maxD0Error", 1.0); - psd0.add("maxDzError", 1.0); - psd0.add("trackQuality", "any"); - psd0.add("minPixelLayersWithHits", 2); - psd0.add("minSiliconLayersWithHits", 5); + TrackFilterForPVFinding::fillPSetDescription(psd0); psd0.add("numTracksThreshold", 0); // HI only desc.add("TkFilterParameters", psd0); } @@ -407,42 +397,22 @@ void PrimaryVertexProducer::fillDescriptions(edm::ConfigurationDescriptions& des desc.add("TrackLabel", edm::InputTag("generalTracks")); desc.add("TrackTimeResosLabel", edm::InputTag("dummy_default")); // 4D only desc.add("TrackTimesLabel", edm::InputTag("dummy_default")); // 4D only + { edm::ParameterSetDescription psd0; { edm::ParameterSetDescription psd1; - psd1.addUntracked("verbose", false); - psd1.addUntracked("zdumpcenter", 0.); - psd1.addUntracked("zdumpwidth", 20.); - psd1.addUntracked("use_vdt", false); // obsolete, appears in HLT configs - psd1.add("d0CutOff", 3.0); - psd1.add("Tmin", 2.0); - psd1.add("delta_lowT", 0.001); - psd1.add("zmerge", 0.01); - psd1.add("dzCutOff", 3.0); - psd1.add("Tpurge", 2.0); - psd1.add("convergence_mode", 0); - psd1.add("delta_highT", 0.01); - psd1.add("Tstop", 0.5); - psd1.add("coolingFactor", 0.6); - psd1.add("vertexSize", 0.006); - psd1.add("uniquetrkweight", 0.8); - psd1.add("zrange", 4.0); - - psd1.add("tmerge", 0.01); // 4D only - psd1.add("dtCutOff", 4.); // 4D only - psd1.add("t0Max", 1.0); // 4D only - psd1.add("vertexSizeTime", 0.008); // 4D only - + DAClusterizerInZT_vect::fillPSetDescription(psd1); psd0.add("TkDAClusParameters", psd1); edm::ParameterSetDescription psd2; - psd2.add("zSeparation", 1.0); + GapClusterizerInZ::fillPSetDescription(psd2); psd0.add("TkGapClusParameters", psd2); } psd0.add("algorithm", "DA_vect"); desc.add("TkClusParameters", psd0); } + desc.add("isRecoveryIteration", false); desc.add("recoveryVtxCollection", {""}); diff --git a/RecoVertex/PrimaryVertexProducer/python/TkClusParameters_cff.py b/RecoVertex/PrimaryVertexProducer/python/TkClusParameters_cff.py index 9706b61ba909d..075d4c3481fe0 100644 --- a/RecoVertex/PrimaryVertexProducer/python/TkClusParameters_cff.py +++ b/RecoVertex/PrimaryVertexProducer/python/TkClusParameters_cff.py @@ -15,7 +15,8 @@ d0CutOff = cms.double(3.), # downweight high IP tracks dzCutOff = cms.double(3.), # outlier rejection after freeze-out (T("verbose", false); +#ifdef DEBUG zdumpcenter_ = conf.getUntrackedParameter("zdumpcenter", 0.); zdumpwidth_ = conf.getUntrackedParameter("zdumpwidth", 20.); +#endif // configurable parameters double minT = conf.getParameter("Tmin"); @@ -41,60 +41,60 @@ DAClusterizerInZT_vect::DAClusterizerInZT_vect(const edm::ParameterSet& conf) { dtCutOff_ = conf.getParameter("dtCutOff"); t0Max_ = conf.getParameter("t0Max"); uniquetrkweight_ = conf.getParameter("uniquetrkweight"); + uniquetrkminp_ = conf.getParameter("uniquetrkminp"); zmerge_ = conf.getParameter("zmerge"); tmerge_ = conf.getParameter("tmerge"); - sel_zrange_ = conf.getParameter("zrange"); convergence_mode_ = conf.getParameter("convergence_mode"); delta_lowT_ = conf.getParameter("delta_lowT"); delta_highT_ = conf.getParameter("delta_highT"); - if (verbose_) { - std::cout << "DAClusterizerInZT_vect: mintrkweight = " << mintrkweight_ << std::endl; - std::cout << "DAClusterizerInZT_vect: uniquetrkweight = " << uniquetrkweight_ << std::endl; - std::cout << "DAClusterizerInZT_vect: zmerge = " << zmerge_ << std::endl; - std::cout << "DAClusterizerInZT_vect: tmerge = " << tmerge_ << std::endl; - std::cout << "DAClusterizerInZT_vect: Tmin = " << minT << std::endl; - std::cout << "DAClusterizerInZT_vect: Tpurge = " << purgeT << std::endl; - std::cout << "DAClusterizerInZT_vect: Tstop = " << stopT << std::endl; - std::cout << "DAClusterizerInZT_vect: vertexSize = " << vertexSize_ << std::endl; - std::cout << "DAClusterizerInZT_vect: vertexSizeTime = " << vertexSizeTime_ << std::endl; - std::cout << "DAClusterizerInZT_vect: coolingFactor = " << coolingFactor_ << std::endl; - std::cout << "DAClusterizerInZT_vect: d0CutOff = " << d0CutOff_ << std::endl; - std::cout << "DAClusterizerInZT_vect: dzCutOff = " << dzCutOff_ << std::endl; - std::cout << "DAClusterizerInZT_vect: dtCutoff = " << dtCutOff_ << std::endl; - std::cout << "DAClusterizerInZT_vect: zrange = " << sel_zrange_ << std::endl; - std::cout << "DAClusterizerinZT_vect: convergence mode = " << convergence_mode_ << std::endl; - std::cout << "DAClusterizerinZT_vect: delta_highT = " << delta_highT_ << std::endl; - std::cout << "DAClusterizerinZT_vect: delta_lowT = " << delta_lowT_ << std::endl; - } #ifdef DEBUG + std::cout << "DAClusterizerInZT_vect: mintrkweight = " << mintrkweight_ << std::endl; + std::cout << "DAClusterizerInZT_vect: uniquetrkweight = " << uniquetrkweight_ << std::endl; + std::cout << "DAClusterizerInZT_vect: uniquetrkminp = " << uniquetrkminp_ << std::endl; + std::cout << "DAClusterizerInZT_vect: zmerge = " << zmerge_ << std::endl; + std::cout << "DAClusterizerInZT_vect: tmerge = " << tmerge_ << std::endl; + std::cout << "DAClusterizerInZT_vect: Tmin = " << minT << std::endl; + std::cout << "DAClusterizerInZT_vect: Tpurge = " << purgeT << std::endl; + std::cout << "DAClusterizerInZT_vect: Tstop = " << stopT << std::endl; + std::cout << "DAClusterizerInZT_vect: vertexSize = " << vertexSize_ << std::endl; + std::cout << "DAClusterizerInZT_vect: vertexSizeTime = " << vertexSizeTime_ << std::endl; + std::cout << "DAClusterizerInZT_vect: coolingFactor = " << coolingFactor_ << std::endl; + std::cout << "DAClusterizerInZT_vect: d0CutOff = " << d0CutOff_ << std::endl; + std::cout << "DAClusterizerInZT_vect: dzCutOff = " << dzCutOff_ << std::endl; + std::cout << "DAClusterizerInZT_vect: dtCutoff = " << dtCutOff_ << std::endl; + std::cout << "DAClusterizerInZT_vect: zrange = " << sel_zrange_ << std::endl; + std::cout << "DAClusterizerinZT_vect: convergence mode = " << convergence_mode_ << std::endl; + std::cout << "DAClusterizerinZT_vect: delta_highT = " << delta_highT_ << std::endl; + std::cout << "DAClusterizerinZT_vect: delta_lowT = " << delta_lowT_ << std::endl; std::cout << "DAClusterizerinZT_vect: DEBUGLEVEL " << DEBUGLEVEL << std::endl; #endif if (convergence_mode_ > 1) { edm::LogWarning("DAClusterizerinZT_vect") - << "DAClusterizerInZT_vect: invalid convergence_mode" << convergence_mode_ << " reset to default " << 0; + << "DAClusterizerInZT_vect: invalid convergence_mode " << convergence_mode_ << " reset to default " << 0; convergence_mode_ = 0; } if (minT == 0) { + betamax_ = 1.0; edm::LogWarning("DAClusterizerinZT_vect") - << "DAClusterizerInZT_vect: invalid Tmin" << minT << " reset to default " << 1. / betamax_; + << "DAClusterizerInZT_vect: invalid Tmin " << minT << " reset to default " << 1. / betamax_; } else { betamax_ = 1. / minT; } if ((purgeT > minT) || (purgeT == 0)) { edm::LogWarning("DAClusterizerinZT_vect") - << "DAClusterizerInZT_vect: invalid Tpurge" << purgeT << " set to " << minT; + << "DAClusterizerInZT_vect: invalid Tpurge " << purgeT << " set to " << minT; purgeT = minT; } betapurge_ = 1. / purgeT; if ((stopT > purgeT) || (stopT == 0)) { edm::LogWarning("DAClusterizerinZT_vect") - << "DAClusterizerInZT_vect: invalid Tstop" << stopT << " set to " << max(1., purgeT); + << "DAClusterizerInZT_vect: invalid Tstop " << stopT << " set to " << max(1., purgeT); stopT = max(1., purgeT); } betastop_ = 1. / stopT; @@ -103,11 +103,6 @@ DAClusterizerInZT_vect::DAClusterizerInZT_vect(const edm::ParameterSet& conf) { namespace { inline double local_exp(double const& inp) { return vdt::fast_exp(inp); } - inline void local_exp_list(double const* __restrict__ arg_inp, double* __restrict__ arg_out, const int arg_arr_size) { - for (auto i = 0; i != arg_arr_size; ++i) - arg_out[i] = vdt::fast_exp(arg_inp[i]); - } - inline void local_exp_list_range(double const* __restrict__ arg_inp, double* __restrict__ arg_out, const int kmin, @@ -132,71 +127,68 @@ void DAClusterizerInZT_vect::verify(const vertex_t& v, const track_t& tks, unsig } // clusters - assert(v.z.size() == nv); - assert(v.t.size() == nv); + assert(v.zvtx_vec.size() == nv); + assert(v.tvtx_vec.size() == nv); #ifdef USEVTXDT2 - assert(v.dt2.size() == nv); + assert(v.dt2_vec.size() == nv); + assert(v.sumw_vec.size() == nv); #endif - assert(v.sumw.size() == nv); - assert(v.pk.size() == nv); - assert(v.swz.size() == nv); - assert(v.swt.size() == nv); - assert(v.ei_cache.size() == nv); - assert(v.ei.size() == nv); - assert(v.se.size() == nv); - assert(v.nuz.size() == nv); - assert(v.nut.size() == nv); - assert(v.szz.size() == nv); - assert(v.stt.size() == nv); - assert(v.szt.size() == nv); - - assert(v.z_ptr == &v.z.front()); - assert(v.t_ptr == &v.t.front()); - assert(v.pk_ptr == &v.pk.front()); - assert(v.ei_cache_ptr == &v.ei_cache.front()); - assert(v.swz_ptr == &v.swz.front()); - assert(v.swt_ptr == &v.swt.front()); - assert(v.se_ptr == &v.se.front()); - assert(v.nuz_ptr == &v.nuz.front()); - assert(v.nut_ptr == &v.nut.front()); - assert(v.szz_ptr == &v.szz.front()); - assert(v.stt_ptr == &v.stt.front()); - assert(v.szt_ptr == &v.szt.front()); - assert(v.sumw_ptr == &v.sumw.front()); - + assert(v.rho_vec.size() == nv); + assert(v.swz_vec.size() == nv); + assert(v.swt_vec.size() == nv); + assert(v.exp_arg_vec.size() == nv); + assert(v.exp_vec.size() == nv); + assert(v.se_vec.size() == nv); + assert(v.nuz_vec.size() == nv); + assert(v.nut_vec.size() == nv); + assert(v.szz_vec.size() == nv); + assert(v.stt_vec.size() == nv); + assert(v.szt_vec.size() == nv); + + assert(v.zvtx == &v.zvtx_vec.front()); + assert(v.tvtx == &v.tvtx_vec.front()); + assert(v.rho == &v.rho_vec.front()); + assert(v.exp_arg == &v.exp_arg_vec.front()); + assert(v.swz == &v.swz_vec.front()); + assert(v.swt == &v.swt_vec.front()); + assert(v.se == &v.se_vec.front()); + assert(v.nuz == &v.nuz_vec.front()); + assert(v.nut == &v.nut_vec.front()); + assert(v.szz == &v.szz_vec.front()); + assert(v.stt == &v.stt_vec.front()); + assert(v.szt == &v.szt_vec.front()); #ifdef USEVTXDT2 - assert(v.dt2_ptr == &v.dt2.front()); + assert(v.sumw == &v.sumw_vec.front()); + assert(v.dt2 == &v.dt2_vec.front()); #endif for (unsigned int k = 0; k < nv - 1; k++) { - if (v.z[k] <= v.z[k + 1]) + if (v.zvtx[k] <= v.zvtx[k + 1]) continue; - cout << " ZT, cluster z-ordering assertion failure z[" << k << "] =" << v.z[k] << " z[" << k + 1 - << "] =" << v.z[k + 1] << endl; + cout << " ZT, cluster z-ordering assertion failure z[" << k << "] =" << v.zvtx[k] << " z[" << k + 1 + << "] =" << v.zvtx[k + 1] << endl; } //for(unsigned int k=0; k< nv-1; k++){ //assert( v.z[k] <= v.z[k+1]); //} // tracks - assert(nt == tks.z.size()); - assert(nt == tks.t.size()); - assert(nt == tks.dz2.size()); -#ifdef USEVTXDT2 - assert(nt == tks.dt2.size()); -#endif + assert(nt == tks.zpca_vec.size()); + assert(nt == tks.tpca_vec.size()); + assert(nt == tks.dz2_vec.size()); + assert(nt == tks.dt2_vec.size()); assert(nt == tks.tt.size()); - assert(nt == tks.pi.size()); - assert(nt == tks.Z_sum.size()); + assert(nt == tks.tkwt_vec.size()); + assert(nt == tks.sum_Z_vec.size()); assert(nt == tks.kmin.size()); assert(nt == tks.kmax.size()); - assert(tks.z_ptr == &tks.z.front()); - assert(tks.t_ptr == &tks.t.front()); - assert(tks.dz2_ptr == &tks.dz2.front()); - assert(tks.dt2_ptr == &tks.dt2.front()); - assert(tks.pi_ptr == &tks.pi.front()); - assert(tks.Z_sum_ptr == &tks.Z_sum.front()); + assert(tks.zpca == &tks.zpca_vec.front()); + assert(tks.tpca == &tks.tpca_vec.front()); + assert(tks.dz2 == &tks.dz2_vec.front()); + assert(tks.dt2 == &tks.dt2_vec.front()); + assert(tks.tkwt == &tks.tkwt_vec.front()); + assert(tks.sum_Z == &tks.sum_Z_vec.front()); for (unsigned int i = 0; i < nt; i++) { if ((tks.kmin[i] < tks.kmax[i]) && (tks.kmax[i] <= nv)) @@ -214,10 +206,12 @@ void DAClusterizerInZT_vect::verify(const vertex_t& v, const track_t& tks, unsig DAClusterizerInZT_vect::track_t DAClusterizerInZT_vect::fill(const vector& tracks) const { // prepare track data for clustering track_t tks; + double sumtkwt = 0.; + for (const auto& tk : tracks) { if (!tk.isValid()) continue; - double t_pi = 1.; + double t_tkwt = 1.; double t_z = tk.stateAtBeamLine().trackStateAtPCA().position().z(); double t_t = tk.timeExt(); @@ -237,7 +231,7 @@ DAClusterizerInZT_vect::track_t DAClusterizerInZT_vect::fill(const vector::min()) { - std::cout << "DAClusterizerInZT_vect.fill rejected track t_dz2 " << t_dz2 << std::endl; + edm::LogWarning("DAClusterizerinZT_vect") << "rejected track t_dz2 " << t_dz2; continue; } @@ -249,24 +243,28 @@ DAClusterizerInZT_vect::track_t DAClusterizerInZT_vect::fill(const vector::min()) { - std::cout << "DAClusterizerInZT_vect.fill rejected track t_dt2 " << t_dt2 << std::endl; + edm::LogWarning("DAClusterizerinZT_vect") << "rejected track t_dt2 " << t_dt2; continue; } } if (d0CutOff_ > 0) { Measurement1D atIP = tk.stateAtBeamLine().transverseImpactParameter(); // error contains beamspot - t_pi = 1. / (1. + local_exp(std::pow(atIP.value() / atIP.error(), 2) - - std::pow(d0CutOff_, 2))); // reduce weight for high ip tracks - if (edm::isNotFinite(t_pi) || t_pi < std::numeric_limits::epsilon()) { - std::cout << "DAClusterizerInZT_vect.fill rejected track t_pu " << t_pi << std::endl; + t_tkwt = 1. / (1. + local_exp(std::pow(atIP.value() / atIP.error(), 2) - + std::pow(d0CutOff_, 2))); // reduce weight for high ip tracks + if (edm::isNotFinite(t_tkwt) || t_tkwt < std::numeric_limits::epsilon()) { + edm::LogWarning("DAClusterizerinZT_vect") << "rejected track t_tkwt " << t_tkwt; continue; // usually is > 0.99 } } - tks.addItem(t_z, t_t, t_dz2, t_dt2, &tk, t_pi); + tks.addItem(t_z, t_t, t_dz2, t_dt2, &tk, t_tkwt); + sumtkwt += t_tkwt; } + tks.extractRaw(); + tks.osumtkwt = sumtkwt > 0 ? 1. / sumtkwt : 0.; + #ifdef DEBUG if (DEBUGLEVEL > 0) { std::cout << "Track count (ZT) filled " << tks.getSize() << " initial " << tracks.size() << std::endl; @@ -294,29 +292,29 @@ void DAClusterizerInZT_vect::set_vtx_range(double beta, track_t& gtracks, vertex for (auto itrack = 0U; itrack < nt; ++itrack) { double zrange = max(sel_zrange_ / sqrt(beta * gtracks.dz2[itrack]), zrange_min_); - double zmin = gtracks.z_ptr[itrack] - zrange; + double zmin = gtracks.zpca[itrack] - zrange; unsigned int kmin = min(nv - 1, gtracks.kmin[itrack]); // find the smallest vertex_z that is larger than zmin - if (gvertices.z_ptr[kmin] > zmin) { - while ((kmin > 0) && (gvertices.z_ptr[kmin - 1] > zmin)) { + if (gvertices.zvtx[kmin] > zmin) { + while ((kmin > 0) && (gvertices.zvtx[kmin - 1] > zmin)) { kmin--; } } else { - while ((kmin < (nv - 1)) && (gvertices.z_ptr[kmin] < zmin)) { + while ((kmin < (nv - 1)) && (gvertices.zvtx[kmin] < zmin)) { kmin++; } } - double zmax = gtracks.z_ptr[itrack] + zrange; + double zmax = gtracks.zpca[itrack] + zrange; unsigned int kmax = min(nv - 1, gtracks.kmax[itrack] - 1); // note: kmax points to the last vertex in the range, while gtracks.kmax points to the entry BEHIND the last vertex // find the largest vertex_z that is smaller than zmax - if (gvertices.z_ptr[kmax] < zmax) { - while ((kmax < (nv - 1)) && (gvertices.z_ptr[kmax + 1] < zmax)) { + if (gvertices.zvtx[kmax] < zmax) { + while ((kmax < (nv - 1)) && (gvertices.zvtx[kmax + 1] < zmax)) { kmax++; } } else { - while ((kmax > 0) && (gvertices.z_ptr[kmax] > zmax)) { + while ((kmax > 0) && (gvertices.zvtx[kmax] > zmax)) { kmax--; } } @@ -348,23 +346,17 @@ void DAClusterizerInZT_vect::clear_vtx_range(track_t& gtracks, vertex_t& gvertic } } -double DAClusterizerInZT_vect::update(double beta, track_t& gtracks, vertex_t& gvertices, const double rho0) const { +double DAClusterizerInZT_vect::update( + double beta, track_t& gtracks, vertex_t& gvertices, const double rho0, const bool updateTc) const { //update weights and vertex positions - // mass constrained annealing without noise // returns the maximum of changes of vertex positions + // sums needed for Tc are only updated if updateTC == true const unsigned int nt = gtracks.getSize(); const unsigned int nv = gvertices.getSize(); + auto osumtkwt = gtracks.osumtkwt; - //initialize sums - double sumpi = 0.; - - // to return how much the prototype moved - double delta = 0.; - - // intial value of a sum double Z_init = 0; - // independpent of loop if (rho0 > 0) { Z_init = rho0 * local_exp(-beta * dzCutOff_ * dzCutOff_); // cut-off } @@ -376,21 +368,21 @@ double DAClusterizerInZT_vect::update(double beta, track_t& gtracks, vertex_t& g vertex_t const& vertices, const unsigned int kmin, const unsigned int kmax) { - const auto track_z = tracks.z_ptr[itrack]; - const auto track_t = tracks.t_ptr[itrack]; - const auto botrack_dz2 = -beta * tracks.dz2_ptr[itrack]; + const auto track_z = tracks.zpca[itrack]; + const auto track_t = tracks.tpca[itrack]; + const auto botrack_dz2 = -beta * tracks.dz2[itrack]; #ifndef USEVTXDT2 - const auto botrack_dt2 = -beta * tracks.dt2_ptr[itrack]; + const auto botrack_dt2 = -beta * tracks.dt2[itrack]; #endif // auto-vectorized for (unsigned int ivertex = kmin; ivertex < kmax; ++ivertex) { - const auto mult_resz = track_z - vertices.z_ptr[ivertex]; - const auto mult_rest = track_t - vertices.t_ptr[ivertex]; + const auto mult_resz = track_z - vertices.zvtx[ivertex]; + const auto mult_rest = track_t - vertices.tvtx[ivertex]; #ifdef USEVTXDT2 - const auto botrack_dt2 = -beta * tracks.dt2_ptr[itrack] * vertices.dt2_ptr[ivertex] / - (tracks.dt2_ptr[itrack] + vertices.dt2_ptr[ivertex] + 1.e-10); + const auto botrack_dt2 = + -beta * tracks.dt2[itrack] * vertices.dt2[ivertex] / (tracks.dt2[itrack] + vertices.dt2[ivertex] + 1.e-10); #endif - vertices.ei_cache_ptr[ivertex] = botrack_dz2 * (mult_resz * mult_resz) + botrack_dt2 * (mult_rest * mult_rest); + vertices.exp_arg[ivertex] = botrack_dz2 * (mult_resz * mult_resz) + botrack_dt2 * (mult_rest * mult_rest); } }; @@ -398,134 +390,148 @@ double DAClusterizerInZT_vect::update(double beta, track_t& gtracks, vertex_t& g vertex_t const& vertices, const unsigned int kmin, const unsigned int kmax) -> double { double ZTemp = Z_init; for (unsigned int ivertex = kmin; ivertex < kmax; ++ivertex) { - ZTemp += vertices.pk_ptr[ivertex] * vertices.ei_ptr[ivertex]; + ZTemp += vertices.rho[ivertex] * vertices.exp[ivertex]; } return ZTemp; }; - auto kernel_calc_normalization_range = [](const unsigned int track_num, - track_t& tks_vec, - vertex_t& y_vec, - const unsigned int kmin, - const unsigned int kmax) { - auto tmp_trk_pi = tks_vec.pi_ptr[track_num]; - auto o_trk_Z_sum = 1. / tks_vec.Z_sum_ptr[track_num]; - auto o_trk_err_z = tks_vec.dz2_ptr[track_num]; - auto o_trk_err_t = tks_vec.dt2_ptr[track_num]; - auto tmp_trk_z = tks_vec.z_ptr[track_num]; - auto tmp_trk_t = tks_vec.t_ptr[track_num]; + auto kernel_calc_normalization_range = [updateTc](const unsigned int track_num, + track_t& tracks, + vertex_t& vertices, + const unsigned int kmin, + const unsigned int kmax) { + auto tmp_trk_tkwt = tracks.tkwt[track_num]; + auto o_trk_sum_Z = 1. / tracks.sum_Z[track_num]; + auto o_trk_err_z = tracks.dz2[track_num]; + auto o_trk_err_t = tracks.dt2[track_num]; + auto tmp_trk_z = tracks.zpca[track_num]; + auto tmp_trk_t = tracks.tpca[track_num]; // auto-vectorized + if (updateTc) { #pragma GCC ivdep - for (unsigned int k = kmin; k < kmax; ++k) { - // parens are important for numerical stability - y_vec.se_ptr[k] += tmp_trk_pi * (y_vec.ei_ptr[k] * o_trk_Z_sum); - const auto w = tmp_trk_pi * (y_vec.pk_ptr[k] * y_vec.ei_ptr[k] * o_trk_Z_sum); // p_{ik} - const auto wz = w * o_trk_err_z; - const auto wt = w * o_trk_err_t; + for (unsigned int k = kmin; k < kmax; ++k) { + // parens are important for numerical stability + vertices.se[k] += tmp_trk_tkwt * (vertices.exp[k] * o_trk_sum_Z); + const auto w = tmp_trk_tkwt * (vertices.rho[k] * vertices.exp[k] * o_trk_sum_Z); // p_{ik} + const auto wz = w * o_trk_err_z; + const auto wt = w * o_trk_err_t; #ifdef USEVTXDT2 - y_vec.sumw_ptr[k] += w; // for vtxdt2 + vertices.sumw[k] += w; // for vtxdt2 #endif - y_vec.nuz_ptr[k] += wz; - y_vec.nut_ptr[k] += wt; - y_vec.swz_ptr[k] += wz * tmp_trk_z; - y_vec.swt_ptr[k] += wt * tmp_trk_t; - /* this is really only needed when we want to get Tc too, maybe better to do it elsewhere? */ - const auto dsz = (tmp_trk_z - y_vec.z_ptr[k]) * o_trk_err_z; - const auto dst = (tmp_trk_t - y_vec.t_ptr[k]) * o_trk_err_t; - y_vec.szz_ptr[k] += w * dsz * dsz; - y_vec.stt_ptr[k] += w * dst * dst; - y_vec.szt_ptr[k] += w * dsz * dst; + vertices.nuz[k] += wz; + vertices.nut[k] += wt; + vertices.swz[k] += wz * tmp_trk_z; + vertices.swt[k] += wt * tmp_trk_t; + // the following lines are only needed for Tc updates + const auto dsz = (tmp_trk_z - vertices.zvtx[k]) * o_trk_err_z; + const auto dst = (tmp_trk_t - vertices.tvtx[k]) * o_trk_err_t; + vertices.szz[k] += w * dsz * dsz; + vertices.stt[k] += w * dst * dst; + vertices.szt[k] += w * dsz * dst; + } + } else { +#pragma GCC ivdep + for (unsigned int k = kmin; k < kmax; ++k) { + vertices.se[k] += tmp_trk_tkwt * (vertices.exp[k] * o_trk_sum_Z); + const auto w = tmp_trk_tkwt * (vertices.rho[k] * vertices.exp[k] * o_trk_sum_Z); // p_{ik} + const auto wz = w * o_trk_err_z; + const auto wt = w * o_trk_err_t; +#ifdef USEVTXDT2 + vertices.sumw[k] += w; // for vtxdt2 +#endif + vertices.nuz[k] += wz; + vertices.nut[k] += wt; + vertices.swz[k] += wz * tmp_trk_z; + vertices.swt[k] += wt * tmp_trk_t; + } } }; for (auto ivertex = 0U; ivertex < nv; ++ivertex) { - gvertices.se_ptr[ivertex] = 0.0; - gvertices.nuz_ptr[ivertex] = 0.0; - gvertices.nut_ptr[ivertex] = 0.0; - gvertices.swz_ptr[ivertex] = 0.0; - gvertices.swt_ptr[ivertex] = 0.0; - gvertices.szz_ptr[ivertex] = 0.0; - gvertices.stt_ptr[ivertex] = 0.0; - gvertices.szt_ptr[ivertex] = 0.0; + gvertices.se[ivertex] = 0.0; + gvertices.nuz[ivertex] = 0.0; + gvertices.nut[ivertex] = 0.0; + gvertices.swz[ivertex] = 0.0; + gvertices.swt[ivertex] = 0.0; + gvertices.szz[ivertex] = 0.0; + gvertices.stt[ivertex] = 0.0; + gvertices.szt[ivertex] = 0.0; #ifdef USEVTXDT2 - gvertices.sumw_ptr[k] = 0.0; + gvertices.sumw[ivertex] = 0.0; #endif } // loop over tracks for (auto itrack = 0U; itrack < nt; ++itrack) { - unsigned int kmin = gtracks.kmin[itrack]; - unsigned int kmax = gtracks.kmax[itrack]; + const unsigned int kmin = gtracks.kmin[itrack]; + const unsigned int kmax = gtracks.kmax[itrack]; #ifdef DEBUG assert((kmin < kmax) && (kmax <= nv)); - assert(itrack < gtracks.Z_sum.size()); + assert(itrack < gtracks.sum_Z_vec.size()); #endif kernel_calc_exp_arg_range(itrack, gtracks, gvertices, kmin, kmax); - local_exp_list_range(gvertices.ei_cache_ptr, gvertices.ei_ptr, kmin, kmax); + local_exp_list_range(gvertices.exp_arg, gvertices.exp, kmin, kmax); + gtracks.sum_Z[itrack] = kernel_add_Z_range(gvertices, kmin, kmax); - gtracks.Z_sum_ptr[itrack] = kernel_add_Z_range(gvertices, kmin, kmax); - if (edm::isNotFinite(gtracks.Z_sum_ptr[itrack])) - gtracks.Z_sum_ptr[itrack] = 0.0; - // used in the next major loop to follow - sumpi += gtracks.pi_ptr[itrack]; + if (edm::isNotFinite(gtracks.sum_Z[itrack])) + gtracks.sum_Z[itrack] = 0.0; - if (gtracks.Z_sum_ptr[itrack] > 1.e-100) { + if (gtracks.sum_Z[itrack] > 1.e-100) { kernel_calc_normalization_range(itrack, gtracks, gvertices, kmin, kmax); } } - // now update z, t, and pk - auto kernel_calc_zt = [sumpi, nv](vertex_t& vertices) -> double { + // now update z, t, and rho + auto kernel_calc_zt = [osumtkwt, nv](vertex_t& vertices) -> double { double delta = 0; - // does not vectorizes + // does not vectorize for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (vertices.nuz_ptr[ivertex] > 0.) { - auto znew = vertices.swz_ptr[ivertex] / vertices.nuz_ptr[ivertex]; - delta = max(std::abs(vertices.z_ptr[ivertex] - znew), delta); - vertices.z_ptr[ivertex] = znew; + if (vertices.nuz[ivertex] > 0.) { + auto znew = vertices.swz[ivertex] / vertices.nuz[ivertex]; + delta = max(std::abs(vertices.zvtx[ivertex] - znew), delta); + vertices.zvtx[ivertex] = znew; } - if (vertices.nut_ptr[ivertex] > 0.) { - auto tnew = vertices.swt_ptr[ivertex] / vertices.nut_ptr[ivertex]; - //delta = max(std::abs(vertices.t_ptr[ ivertex ] - tnew), delta); // FIXME - vertices.t_ptr[ivertex] = tnew; + if (vertices.nut[ivertex] > 0.) { + auto tnew = vertices.swt[ivertex] / vertices.nut[ivertex]; + //delta = max(std::abs(vertices.t[ ivertex ] - tnew), delta); // FIXME + vertices.tvtx[ivertex] = tnew; #ifdef USEVTXDT2 - vertices.dt2_ptr[ivertex] = vertices.nut_ptr[ivertex] / vertices.sumw_ptr[ivertex]; + vertices.dt2[ivertex] = vertices.nut[ivertex] / vertices.sumw[ivertex]; #endif } else { // FIXME // apparently this cluster has not timing info attached // this should be taken into account somehow, otherwise we might fail to attach // new tracks that do have timing information - vertices.t_ptr[ivertex] = 0; + vertices.tvtx[ivertex] = 0; #ifdef USEVTXDT2 - vertices.dt2_ptr[ivertex] = 0; + vertices.dt2[ivertex] = 0; #endif } #ifdef DEBUG - if ((vertices.nut_ptr[ivertex] <= 0.) && (vertices.nuz_ptr[ivertex] <= 0.)) { + if ((vertices.nut[ivertex] <= 0.) && (vertices.nuz[ivertex] <= 0.)) { edm::LogInfo("sumw") << "invalid sum of weights in fit: " << endl; std::cout << " a cluster melted away ? " - << " zk=" << vertices.z_ptr[ivertex] << " pk=" << vertices.pk_ptr[ivertex] - << " sumw(z,t) =" << vertices.nuz_ptr[ivertex] << "," << vertices.nut_ptr[ivertex] << endl; + << " zk=" << vertices.zvtx[ivertex] << " rho=" << vertices.rho[ivertex] + << " sumw(z,t) =" << vertices.nuz[ivertex] << "," << vertices.nut[ivertex] << endl; // FIXME: discard this cluster } #endif } - auto osumpi = 1. / sumpi; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - vertices.pk_ptr[ivertex] = vertices.pk_ptr[ivertex] * vertices.se_ptr[ivertex] * osumpi; + vertices.rho[ivertex] = vertices.rho[ivertex] * vertices.se[ivertex] * osumtkwt; } return delta; }; - delta += kernel_calc_zt(gvertices); + double delta = kernel_calc_zt(gvertices); if (zorder(gvertices)) { set_vtx_range(beta, gtracks, gvertices); @@ -539,10 +545,9 @@ bool DAClusterizerInZT_vect::zorder(vertex_t& y) const { const unsigned int nv = y.getSize(); #ifdef DEBUG - assert(y.z.size() == nv); - assert(y.t.size() == nv); - // assert(y.dt2.size() == nv); - assert(y.pk.size() == nv); + assert(y.zvtx_vec.size() == nv); + assert(y.tvtx_vec.size() == nv); + assert(y.rho_vec.size() == nv); #endif if (nv < 2) @@ -554,21 +559,21 @@ bool DAClusterizerInZT_vect::zorder(vertex_t& y) const { while (reordering) { reordering = false; for (unsigned int k = 0; (k + 1) < nv; k++) { - if (y.z[k + 1] < y.z[k]) { - auto ztemp = y.z[k]; - y.z[k] = y.z[k + 1]; - y.z[k + 1] = ztemp; - auto ttemp = y.t[k]; - y.t[k] = y.t[k + 1]; - y.t[k + 1] = ttemp; + if (y.zvtx[k + 1] < y.zvtx[k]) { + auto ztemp = y.zvtx[k]; + y.zvtx[k] = y.zvtx[k + 1]; + y.zvtx[k + 1] = ztemp; + auto ttemp = y.tvtx[k]; + y.tvtx[k] = y.tvtx[k + 1]; + y.tvtx[k + 1] = ttemp; #ifdef USEVTXDT2 auto dt2temp = y.dt2[k]; y.dt2[k] = y.dt2[k + 1]; y.dt2[k + 1] = dt2temp; #endif - auto ptemp = y.pk[k]; - y.pk[k] = y.pk[k + 1]; - y.pk[k + 1] = ptemp; + auto ptemp = y.rho[k]; + y.rho[k] = y.rho[k + 1]; + y.rho[k + 1] = ptemp; reordering = true; } } @@ -599,7 +604,7 @@ bool DAClusterizerInZT_vect::find_nearest( // find nearest in z, binary search later unsigned int k = 0; for (unsigned int k0 = 1; k0 < nv; k0++) { - if (std::abs(y.z_ptr[k0] - z) < std::abs(y.z_ptr[k] - z)) { + if (std::abs(y.zvtx[k0] - z) < std::abs(y.zvtx[k] - z)) { k = k0; } } @@ -608,8 +613,8 @@ bool DAClusterizerInZT_vect::find_nearest( //search left unsigned int k1 = k; - while ((k1 > 0) && ((y.z[k] - y.z[--k1]) < dz)) { - auto delta = std::pow((y.z_ptr[k] - y.z_ptr[k1]) / dz, 2) + std::pow((y.t_ptr[k] - y.t_ptr[k1]) / dt, 2); + while ((k1 > 0) && ((y.zvtx[k] - y.zvtx[--k1]) < dz)) { + auto delta = std::pow((y.zvtx[k] - y.zvtx[k1]) / dz, 2) + std::pow((y.tvtx[k] - y.tvtx[k1]) / dt, 2); if (delta < delta_min) { k_min = k1; delta_min = delta; @@ -618,8 +623,8 @@ bool DAClusterizerInZT_vect::find_nearest( //search right k1 = k; - while (((++k1) < nv) && ((y.z[k1] - y.z[k]) < dz)) { - auto delta = std::pow((y.z_ptr[k1] - y.z_ptr[k]) / dz, 2) + std::pow((y.t_ptr[k1] - y.t_ptr[k]) / dt, 2); + while (((++k1) < nv) && ((y.zvtx[k1] - y.zvtx[k]) < dz)) { + auto delta = std::pow((y.zvtx[k1] - y.zvtx[k]) / dz, 2) + std::pow((y.tvtx[k1] - y.tvtx[k]) / dt, 2); if (delta < delta_min) { k_min = k1; delta_min = delta; @@ -645,7 +650,7 @@ unsigned int DAClusterizerInZT_vect::thermalize( set_vtx_range(beta, tks, v); double delta_sum_range = 0; // accumulate max(|delta-z|) as a lower bound - std::vector z0 = v.z; + std::vector z0 = v.zvtx_vec; while (niter++ < maxIterations_) { delta = update(beta, tks, v, rho0); @@ -653,11 +658,11 @@ unsigned int DAClusterizerInZT_vect::thermalize( if (delta_sum_range > zrange_min_) { for (unsigned int k = 0; k < v.getSize(); k++) { - if (std::abs(v.z[k] - z0[k]) > zrange_min_) { + if (std::abs(v.zvtx_vec[k] - z0[k]) > zrange_min_) { zorder(v); set_vtx_range(beta, tks, v); delta_sum_range = 0; - z0 = v.z; + z0 = v.zvtx_vec; break; } } @@ -694,9 +699,8 @@ bool DAClusterizerInZT_vect::merge(vertex_t& y, track_t& tks, double& beta) cons for (unsigned int k1 = 0; (k1 + 1) < nv; k1++) { unsigned int k2 = k1; - while ((++k2 < nv) && (std::fabs(y.z[k2] - y.z_ptr[k1]) < zmerge_)) { - auto delta = - std::pow((y.z_ptr[k2] - y.z_ptr[k1]) / zmerge_, 2) + std::pow((y.t_ptr[k2] - y.t_ptr[k1]) / tmerge_, 2); + while ((++k2 < nv) && (std::fabs(y.zvtx[k2] - y.zvtx[k1]) < zmerge_)) { + auto delta = std::pow((y.zvtx[k2] - y.zvtx[k1]) / zmerge_, 2) + std::pow((y.tvtx[k2] - y.tvtx[k1]) / tmerge_, 2); if ((delta < delta_min) || (k1_min == k2_min)) { k1_min = k1; k2_min = k2; @@ -709,28 +713,28 @@ bool DAClusterizerInZT_vect::merge(vertex_t& y, track_t& tks, double& beta) cons return false; } - double rho = y.pk_ptr[k1_min] + y.pk_ptr[k2_min]; + double rho = y.rho[k1_min] + y.rho[k2_min]; #ifdef DEBUG assert((k1_min < nv) && (k2_min < nv)); if (DEBUGLEVEL > 1) { - std::cout << "merging (" << setw(8) << fixed << setprecision(4) << y.z_ptr[k1_min] << ',' << y.t_ptr[k1_min] - << ") and (" << y.z_ptr[k2_min] << ',' << y.t_ptr[k2_min] << ")" + std::cout << "merging (" << setw(8) << fixed << setprecision(4) << y.zvtx[k1_min] << ',' << y.tvtx[k1_min] + << ") and (" << y.zvtx[k2_min] << ',' << y.tvtx[k2_min] << ")" << " idx=" << k1_min << "," << k2_min << std::endl; } #endif if (rho > 0) { - y.z_ptr[k1_min] = (y.pk_ptr[k1_min] * y.z_ptr[k1_min] + y.pk_ptr[k2_min] * y.z_ptr[k2_min]) / rho; - y.t_ptr[k1_min] = (y.pk_ptr[k1_min] * y.t_ptr[k1_min] + y.pk_ptr[k2_min] * y.t_ptr[k2_min]) / rho; + y.zvtx[k1_min] = (y.rho[k1_min] * y.zvtx[k1_min] + y.rho[k2_min] * y.zvtx[k2_min]) / rho; + y.tvtx[k1_min] = (y.rho[k1_min] * y.tvtx[k1_min] + y.rho[k2_min] * y.tvtx[k2_min]) / rho; #ifdef USEVTXDT2 - y.dt2_ptr[k1_min] = (y.pk_ptr[k1_min] * y.dt2_ptr[k1_min] + y.pk_ptr[k2_min] * y.dt2_ptr[k2_min]) / rho; + y.dt2[k1_min] = (y.rho[k1_min] * y.dt2[k1_min] + y.rho[k2_min] * y.dt2[k2_min]) / rho; #endif } else { - y.z_ptr[k1_min] = 0.5 * (y.z_ptr[k1_min] + y.z_ptr[k2_min]); - y.t_ptr[k1_min] = 0.5 * (y.t_ptr[k1_min] + y.t_ptr[k2_min]); + y.zvtx[k1_min] = 0.5 * (y.zvtx[k1_min] + y.zvtx[k2_min]); + y.tvtx[k1_min] = 0.5 * (y.tvtx[k1_min] + y.tvtx[k2_min]); } - y.pk_ptr[k1_min] = rho; + y.rho[k1_min] = rho; y.removeItem(k2_min, tks); zorder(y); @@ -748,53 +752,59 @@ bool DAClusterizerInZT_vect::purge(vertex_t& y, track_t& tks, double& rho0, cons if (nv < 2) return false; - double sumpmin = nt; - unsigned int k0 = nv; - - int nUnique = 0; - double sump = 0; - - std::vector inverse_zsums(nt), arg_cache(nt), eik_cache(nt), pcut_cache(nt); - double* __restrict__ pinverse_zsums; + std::vector sump_v(nv), arg_cache_v(nv), exp_cache_v(nv), pcut_cache_v(nv); + std::vector nUnique_v(nv); double* __restrict__ parg_cache; - double* __restrict__ peik_cache; + double* __restrict__ pexp_cache; double* __restrict__ ppcut_cache; - pinverse_zsums = inverse_zsums.data(); - parg_cache = arg_cache.data(); - peik_cache = eik_cache.data(); - ppcut_cache = pcut_cache.data(); - for (unsigned i = 0; i < nt; ++i) { - inverse_zsums[i] = tks.Z_sum_ptr[i] > eps ? 1. / tks.Z_sum_ptr[i] : 0.0; - } + double* __restrict__ psump; + int* __restrict__ pnUnique; + int constexpr nunique_min_ = 2; + + zorder(y); + set_vtx_range(beta, tks, y); + + parg_cache = arg_cache_v.data(); + pexp_cache = exp_cache_v.data(); + ppcut_cache = pcut_cache_v.data(); + psump = sump_v.data(); + pnUnique = nUnique_v.data(); + const auto rhoconst = rho0 * local_exp(-beta * dzCutOff_ * dzCutOff_); for (unsigned int k = 0; k < nv; ++k) { - const double pmax = y.pk_ptr[k] / (y.pk_ptr[k] + rhoconst); + const double pmax = y.rho[k] / (y.rho[k] + rhoconst); ppcut_cache[k] = uniquetrkweight_ * pmax; } - for (unsigned int k = 0; k < nv; ++k) { - for (unsigned i = 0; i < nt; ++i) { - const auto track_z = tks.z_ptr[i]; - const auto track_t = tks.t_ptr[i]; - const auto botrack_dz2 = -beta * tks.dz2_ptr[i]; - const auto botrack_dt2 = -beta * tks.dt2_ptr[i]; // FIXME usevtxdt2? - - const auto mult_resz = track_z - y.z_ptr[k]; - const auto mult_rest = track_t - y.t_ptr[k]; - parg_cache[i] = botrack_dz2 * (mult_resz * mult_resz) + botrack_dt2 * (mult_rest * mult_rest); + for (unsigned int i = 0; i < nt; i++) { + const auto invZ = ((tks.sum_Z[i] > eps) && (tks.tkwt[i] > uniquetrkminp_)) ? 1. / tks.sum_Z[i] : 0.; + const auto track_z = tks.zpca[i]; + const auto track_t = tks.tpca[i]; + const auto botrack_dz2 = -beta * tks.dz2[i]; + const auto botrack_dt2 = -beta * tks.dt2[i]; + const auto kmin = tks.kmin[i]; + const auto kmax = tks.kmax[i]; + + for (unsigned int k = kmin; k < kmax; k++) { + const auto mult_resz = track_z - y.zvtx[k]; + const auto mult_rest = track_t - y.tvtx[k]; + parg_cache[k] = botrack_dz2 * (mult_resz * mult_resz) + botrack_dt2 * (mult_rest * mult_rest); } - local_exp_list(parg_cache, peik_cache, nt); - nUnique = 0; - sump = 0; - for (unsigned int i = 0; i < nt; ++i) { - const auto p = y.pk_ptr[k] * peik_cache[i] * pinverse_zsums[i]; - sump += p; - nUnique += ((p > ppcut_cache[k]) & (tks.pi_ptr[i] > 0)) ? 1 : 0; + local_exp_list_range(parg_cache, pexp_cache, kmin, kmax); + + for (unsigned int k = kmin; k < kmax; k++) { + const double p = y.rho[k] * pexp_cache[k] * invZ; + psump[k] += p; + pnUnique[k] += (p > ppcut_cache[k]) ? 1 : 0; } + } - if ((nUnique < 2) && (sump < sumpmin)) { - sumpmin = sump; + double sumpmin = nt; + unsigned int k0 = nv; + for (unsigned k = 0; k < nv; k++) { + if ((pnUnique[k] < nunique_min_) && (psump[k] < sumpmin)) { + sumpmin = psump[k]; k0 = k; } } @@ -803,8 +813,8 @@ bool DAClusterizerInZT_vect::purge(vertex_t& y, track_t& tks, double& rho0, cons #ifdef DEBUG assert(k0 < y.getSize()); if (DEBUGLEVEL > 1) { - std::cout << "eliminating prototype at " << std::setw(10) << std::setprecision(4) << y.z_ptr[k0] << "," - << y.t_ptr[k0] << " with sump=" << sumpmin << " rho*nt =" << y.pk_ptr[k0] * nt << endl; + std::cout << "eliminating prototype at " << std::setw(10) << std::setprecision(4) << y.zvtx[k0] << "," + << y.tvtx[k0] << " with sump=" << sumpmin << " rho*nt =" << y.rho[k0] * nt << endl; } #endif y.removeItem(k0, tks); @@ -828,28 +838,28 @@ double DAClusterizerInZT_vect::beta0(double betamax, track_t const& tks, vertex_ double sumw_z = 0; double sumw_t = 0; for (unsigned int i = 0; i < nt; i++) { - double w_z = tks.pi_ptr[i] * tks.dz2_ptr[i]; - double w_t = tks.pi_ptr[i] * tks.dt2_ptr[i]; - sumwz += w_z * tks.z_ptr[i]; - sumwt += w_t * tks.t_ptr[i]; + double w_z = tks.tkwt[i] * tks.dz2[i]; + double w_t = tks.tkwt[i] * tks.dt2[i]; + sumwz += w_z * tks.zpca[i]; + sumwt += w_t * tks.tpca[i]; sumw_z += w_z; sumw_t += w_t; } - y.z_ptr[k] = sumwz / sumw_z; - y.t_ptr[k] = sumwt / sumw_t; + y.zvtx[k] = sumwz / sumw_z; + y.tvtx[k] = sumwt / sumw_t; // estimate Tc, eventually do this in the same loop double szz = 0, stt = 0, szt = 0; double nuz = 0, nut = 0; for (unsigned int i = 0; i < nt; i++) { - double dz = (tks.z_ptr[i] - y.z_ptr[k]) * tks.dz2_ptr[i]; - double dt = (tks.t_ptr[i] - y.t_ptr[k]) * tks.dt2_ptr[i]; - double w = tks.pi_ptr[i]; + double dz = (tks.zpca[i] - y.zvtx[k]) * tks.dz2[i]; + double dt = (tks.tpca[i] - y.tvtx[k]) * tks.dt2[i]; + double w = tks.tkwt[i]; szz += w * dz * dz; stt += w * dt * dt; szt += w * dz * dt; - nuz += w * tks.dz2_ptr[i]; - nut += w * tks.dt2_ptr[i]; + nuz += w * tks.dz2[i]; + nut += w * tks.dt2[i]; } double Tz = szz / nuz; double Tt = 0; @@ -883,11 +893,11 @@ double DAClusterizerInZT_vect::beta0(double betamax, track_t const& tks, vertex_ } double DAClusterizerInZT_vect::get_Tc(const vertex_t& y, int k) const { - double Tz = y.szz_ptr[k] / y.nuz_ptr[k]; // actually 0.5*Tc(z) + double Tz = y.szz[k] / y.nuz[k]; // actually 0.5*Tc(z) double Tt = 0.; - if (y.nut_ptr[k] > 0) { - Tt = y.stt_ptr[k] / y.nut_ptr[k]; - double mx = y.szt_ptr[k] / y.nuz_ptr[k] * y.szt_ptr[k] / y.nut_ptr[k]; + if (y.nut[k] > 0) { + Tt = y.stt[k] / y.nut[k]; + double mx = y.szt[k] / y.nuz[k] * y.szt[k] / y.nut[k]; return Tz + Tt + sqrt(pow(Tz - Tt, 2) + 4 * mx); } return 2 * Tz; @@ -925,16 +935,16 @@ bool DAClusterizerInZT_vect::split(const double beta, track_t& tks, vertex_t& y, // split direction in the (z,t)-plane - double Mzz = y.nuz_ptr[k] - twoBeta * y.szz_ptr[k]; - double Mtt = y.nut_ptr[k] - twoBeta * y.stt_ptr[k]; - double Mzt = -twoBeta * y.szt_ptr[k]; + double Mzz = y.nuz[k] - twoBeta * y.szz[k]; + double Mtt = y.nut[k] - twoBeta * y.stt[k]; + double Mzt = -twoBeta * y.szt[k]; const double twoMzt = 2.0 * Mzt; double D = sqrt(pow(Mtt - Mzz, 2) + twoMzt * twoMzt); double q1 = atan2(-Mtt + Mzz + D, -twoMzt); double l1 = 0.5 * (-Mzz - Mtt + D); double l2 = 0.5 * (-Mzz - Mtt - D); if ((std::abs(l1) < 1e-4) && (std::abs(l2) < 1e-4)) { - edm::LogWarning("DAClusterizerInZT_vect") << "warning, bad eigenvalues! idx=" << k << " z= " << y.z_ptr[k] + edm::LogWarning("DAClusterizerInZT_vect") << "warning, bad eigenvalues! idx=" << k << " z= " << y.zvtx[k] << " Mzz=" << Mzz << " Mtt=" << Mtt << " Mzt=" << Mzt << endl; } @@ -950,34 +960,33 @@ bool DAClusterizerInZT_vect::split(const double beta, track_t& tks, vertex_t& y, double p1 = 0, z1 = 0, t1 = 0, wz1 = 0, wt1 = 0; double p2 = 0, z2 = 0, t2 = 0, wz2 = 0, wt2 = 0; for (unsigned int i = 0; i < nt; ++i) { - if (tks.Z_sum_ptr[i] > 1.e-100) { - double lr = (tks.z_ptr[i] - y.z_ptr[k]) * cq + (tks.t[i] - y.t_ptr[k]) * sq; + if (tks.sum_Z[i] > 1.e-100) { + double lr = (tks.zpca[i] - y.zvtx[k]) * cq + (tks.tpca[i] - y.tvtx[k]) * sq; // winner-takes-all, usually overestimates splitting double tl = lr < 0 ? 1. : 0.; double tr = 1. - tl; // soften it, especially at low T - double arg = lr * std::sqrt(beta * (cq * cq * tks.dz2_ptr[i] + sq * sq * tks.dt2_ptr[i])); + double arg = lr * std::sqrt(beta * (cq * cq * tks.dz2[i] + sq * sq * tks.dt2[i])); if (std::abs(arg) < 20) { double t = local_exp(-arg); tl = t / (t + 1.); tr = 1 / (t + 1.); } - double p = - y.pk_ptr[k] * tks.pi_ptr[i] * - local_exp(-beta * Eik(tks.z_ptr[i], y.z_ptr[k], tks.dz2_ptr[i], tks.t_ptr[i], y.t_ptr[k], tks.dt2_ptr[i])) / - tks.Z_sum_ptr[i]; - double wz = p * tks.dz2_ptr[i]; - double wt = p * tks.dt2_ptr[i]; + double p = y.rho[k] * tks.tkwt[i] * + local_exp(-beta * Eik(tks.zpca[i], y.zvtx[k], tks.dz2[i], tks.tpca[i], y.tvtx[k], tks.dt2[i])) / + tks.sum_Z[i]; + double wz = p * tks.dz2[i]; + double wt = p * tks.dt2[i]; p1 += p * tl; - z1 += wz * tl * tks.z_ptr[i]; - t1 += wt * tl * tks.t_ptr[i]; + z1 += wz * tl * tks.zpca[i]; + t1 += wt * tl * tks.tpca[i]; wz1 += wz * tl; wt1 += wt * tl; p2 += p * tr; - z2 += wz * tr * tks.z_ptr[i]; - t2 += wt * tr * tks.t_ptr[i]; + z2 += wz * tr * tks.zpca[i]; + t2 += wt * tr * tks.tpca[i]; wz2 += wz * tr; wt2 += wt * tr; } @@ -986,25 +995,25 @@ bool DAClusterizerInZT_vect::split(const double beta, track_t& tks, vertex_t& y, if (wz1 > 0) { z1 /= wz1; } else { - z1 = y.z_ptr[k] - epsilonz * cq; + z1 = y.zvtx[k] - epsilonz * cq; edm::LogWarning("DAClusterizerInZT_vect") << "warning, wz1 = " << scientific << wz1 << endl; } if (wt1 > 0) { t1 /= wt1; } else { - t1 = y.t_ptr[k] - epsilont * sq; + t1 = y.tvtx[k] - epsilont * sq; edm::LogWarning("DAClusterizerInZT_vect") << "warning, wt1 = " << scientific << wt1 << endl; } if (wz2 > 0) { z2 /= wz2; } else { - z2 = y.z_ptr[k] + epsilonz * cq; + z2 = y.zvtx[k] + epsilonz * cq; edm::LogWarning("DAClusterizerInZT_vect") << "warning, wz2 = " << scientific << wz2 << endl; } if (wt2 > 0) { t2 /= wt2; } else { - t2 = y.t_ptr[k] + epsilont * sq; + t2 = y.tvtx[k] + epsilont * sq; edm::LogWarning("DAClusterizerInZT_vect") << "warning, wt2 = " << scientific << wt2 << endl; } @@ -1013,19 +1022,19 @@ bool DAClusterizerInZT_vect::split(const double beta, track_t& tks, vertex_t& y, while (((find_nearest(z1, t1, y, k_min1, epsilonz, epsilont) && (k_min1 != k)) || (find_nearest(z2, t2, y, k_min2, epsilonz, epsilont) && (k_min2 != k))) && (std::abs(z2 - z1) > spliteps || std::abs(t2 - t1) > spliteps)) { - z1 = 0.5 * (z1 + y.z_ptr[k]); - t1 = 0.5 * (t1 + y.t_ptr[k]); - z2 = 0.5 * (z2 + y.z_ptr[k]); - t2 = 0.5 * (t2 + y.t_ptr[k]); + z1 = 0.5 * (z1 + y.zvtx[k]); + t1 = 0.5 * (t1 + y.tvtx[k]); + z2 = 0.5 * (z2 + y.zvtx[k]); + t2 = 0.5 * (t2 + y.tvtx[k]); } #ifdef DEBUG assert(k < nv); if (DEBUGLEVEL > 1) { - if (std::fabs(y.z_ptr[k] - zdumpcenter_) < zdumpwidth_) { + if (std::fabs(y.zvtx[k] - zdumpcenter_) < zdumpwidth_) { std::cout << " T= " << std::setw(10) << std::setprecision(1) << 1. / beta << " Tc= " << critical[ic].first << " direction =" << std::setprecision(4) << qsplit << " splitting (" << std::setw(8) << std::fixed - << std::setprecision(4) << y.z_ptr[k] << "," << y.t_ptr[k] << ")" + << std::setprecision(4) << y.zvtx[k] << "," << y.tvtx[k] << ")" << " --> (" << z1 << ',' << t1 << "),(" << z2 << ',' << t2 << ") [" << p1 << "," << p2 << "]"; if (std::fabs(z2 - z1) > epsilonz || std::fabs(t2 - t1) > epsilont) { std::cout << std::endl; @@ -1053,12 +1062,12 @@ bool DAClusterizerInZT_vect::split(const double beta, track_t& tks, vertex_t& y, // split if the new subclusters are significantly separated if (std::fabs(z2 - z1) > epsilonz || std::fabs(t2 - t1) > epsilont) { split = true; - double pk1 = p1 * y.pk_ptr[k] / (p1 + p2); - double pk2 = p2 * y.pk_ptr[k] / (p1 + p2); + double rho1 = p1 * y.rho[k] / (p1 + p2); + double rho2 = p2 * y.rho[k] / (p1 + p2); // replace the original by (z2,t2) y.removeItem(k, tks); - unsigned int k2 = y.insertOrdered(z2, t2, pk2, tks); + unsigned int k2 = y.insertOrdered(z2, t2, rho2, tks); #ifdef DEBUG if (k2 < k) { @@ -1079,27 +1088,26 @@ bool DAClusterizerInZT_vect::split(const double beta, track_t& tks, vertex_t& y, } // insert (z1,t1) where it belongs - unsigned int k1 = y.insertOrdered(z1, t1, pk1, tks); + unsigned int k1 = y.insertOrdered(z1, t1, rho1, tks); nv++; // adjust remaining pointers for (unsigned int jc = ic; jc < critical.size(); jc++) { if (critical[jc].second >= k1) { critical[jc].second++; - } // need to backport the ">-"? + } } - } else { #ifdef DEBUG std::cout << "warning ! split rejected, too small." << endl; #endif } } + return split; } -vector DAClusterizerInZT_vect::vertices(const vector& tracks, - const int verbosity) const { +vector DAClusterizerInZT_vect::vertices(const vector& tracks) const { track_t&& tks = fill(tracks); tks.extractRaw(); @@ -1130,11 +1138,11 @@ vector DAClusterizerInZT_vect::vertices(const vector DAClusterizerInZT_vect::vertices(const vector DAClusterizerInZT_vect::vertices(const vector DAClusterizerInZT_vect::vertices(const vector DAClusterizerInZT_vect::vertices(const vector > vtx_track_indices(nv); + for (unsigned int i = 0; i < nt; i++) { + const auto kmin = tks.kmin[i]; + const auto kmax = tks.kmax[i]; + for (auto k = kmin; k < kmax; k++) { + y.exp_arg[k] = -beta * Eik(tks.zpca[i], y.zvtx[k], tks.dz2[i], tks.tpca[i], y.tvtx[k], tks.dt2[i]); + } - // improve vectorization (does not require reduction ....) - for (unsigned int k = 0; k < nv; k++) { - for (unsigned int i = 0; i < nt; i++) - tks.Z_sum_ptr[i] += - y.pk_ptr[k] * - local_exp(-beta * Eik(tks.z_ptr[i], y.z_ptr[k], tks.dz2_ptr[i], tks.t_ptr[i], y.t_ptr[k], tks.dt2_ptr[i])); - } + local_exp_list_range(y.exp_arg, y.exp, kmin, kmax); - for (unsigned int k = 0; k < nv; k++) { - GlobalPoint pos(0, 0, y.z_ptr[k]); + tks.sum_Z[i] = z_sum_init; + for (auto k = kmin; k < kmax; k++) { + tks.sum_Z[i] += y.rho[k] * y.exp[k]; + } + const double invZ = tks.sum_Z[i] > 1e-100 ? 1. / tks.sum_Z[i] : 0.0; + + for (auto k = kmin; k < kmax; k++) { + double p = y.rho[k] * y.exp[k] * invZ; + if (p > mintrkweight_) { + // assign track i -> vertex k (hard, mintrkweight_ should be >= 0.5 here + vtx_track_indices[k].push_back(i); + break; + } + } - vector vertexTracks; - for (unsigned int i = 0; i < nt; i++) { - if (tks.Z_sum_ptr[i] > 1e-100) { - double p = - y.pk_ptr[k] * - local_exp(-beta * Eik(tks.z_ptr[i], y.z_ptr[k], tks.dz2_ptr[i], tks.t_ptr[i], y.t_ptr[k], tks.dt2_ptr[i])) / - tks.Z_sum_ptr[i]; - if ((tks.pi_ptr[i] > 0) && (p > mintrkweight_)) { - vertexTracks.push_back(*(tks.tt[i])); - tks.Z_sum_ptr[i] = 0; // setting Z=0 excludes double assignment - } + } // track loop + + GlobalError dummyError(0.01, 0, 0.01, 0., 0., 0.01); + for (unsigned int k = 0; k < nv; k++) { + if (!vtx_track_indices[k].empty()) { + GlobalPoint pos(0, 0, y.zvtx[k]); + vector vertexTracks; + for (auto i : vtx_track_indices[k]) { + vertexTracks.push_back(*(tks.tt[i])); } + TransientVertex v(pos, dummyError, vertexTracks, 0); + clusters.push_back(v); } - TransientVertex v(pos, y.t_ptr[k], dummyError, vertexTracks, 0); - clusters.push_back(v); } return clusters; @@ -1371,13 +1388,13 @@ void DAClusterizerInZT_vect::dump(const double beta, const vertex_t& y, const tr for (unsigned int j = 0; j < nt; j++) { iz.push_back(j); } - std::sort(iz.begin(), iz.end(), [tks](unsigned int a, unsigned int b) { return tks.z_ptr[a] < tks.z_ptr[b]; }); + std::sort(iz.begin(), iz.end(), [tks](unsigned int a, unsigned int b) { return tks.zpca[a] < tks.zpca[b]; }); std::cout << std::endl; std::cout << "-----DAClusterizerInZT::dump ----" << nv << " clusters " << std::endl; string h = " "; std::cout << h << " k= "; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) < zdumpwidth_) { + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) < zdumpwidth_) { std::cout << setw(8) << fixed << ivertex; } } @@ -1386,8 +1403,8 @@ void DAClusterizerInZT_vect::dump(const double beta, const vertex_t& y, const tr std::cout << h << " z= "; std::cout << setprecision(4); for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) < zdumpwidth_) { - std::cout << setw(8) << fixed << y.z_ptr[ivertex]; + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) < zdumpwidth_) { + std::cout << setw(8) << fixed << y.zvtx[ivertex]; } } std::cout << endl; @@ -1395,8 +1412,8 @@ void DAClusterizerInZT_vect::dump(const double beta, const vertex_t& y, const tr std::cout << h << " t= "; std::cout << setprecision(4); for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) < zdumpwidth_) { - std::cout << setw(8) << fixed << y.t_ptr[ivertex]; + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) < zdumpwidth_) { + std::cout << setw(8) << fixed << y.tvtx[ivertex]; } } std::cout << endl; @@ -1404,29 +1421,29 @@ void DAClusterizerInZT_vect::dump(const double beta, const vertex_t& y, const tr std::cout << "T=" << setw(15) << 1. / beta << " Tmin =" << setw(10) << 1. / betamax_ << " Tc= "; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) < zdumpwidth_) { + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) < zdumpwidth_) { double Tc = get_Tc(y, ivertex); std::cout << setw(8) << fixed << setprecision(1) << Tc; } } std::cout << endl; - std::cout << h << "pk= "; - double sumpk = 0; + std::cout << h << "rho= "; + double sumrho = 0; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - sumpk += y.pk_ptr[ivertex]; - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) > zdumpwidth_) + sumrho += y.rho[ivertex]; + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) > zdumpwidth_) continue; - std::cout << setw(8) << setprecision(4) << fixed << y.pk_ptr[ivertex]; + std::cout << setw(8) << setprecision(4) << fixed << y.rho[ivertex]; } std::cout << endl; std::cout << h << "nt= "; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - sumpk += y.pk_ptr[ivertex]; - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) > zdumpwidth_) + sumrho += y.rho[ivertex]; + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) > zdumpwidth_) continue; - std::cout << setw(8) << setprecision(1) << fixed << y.pk_ptr[ivertex] * nt; + std::cout << setw(8) << setprecision(1) << fixed << y.rho[ivertex] * nt; } std::cout << endl; @@ -1438,19 +1455,18 @@ void DAClusterizerInZT_vect::dump(const double beta, const vertex_t& y, const tr std::cout << setprecision(4); for (unsigned int i0 = 0; i0 < nt; i0++) { unsigned int i = iz[i0]; - if (tks.Z_sum_ptr[i] > 0) { - F -= std::log(tks.Z_sum_ptr[i]) / beta; + if (tks.sum_Z[i] > 0) { + F -= std::log(tks.sum_Z[i]) / beta; } - double tz = tks.z_ptr[i]; + double tz = tks.zpca[i]; if (std::fabs(tz - zdumpcenter_) > zdumpwidth_) continue; std::cout << setw(4) << i << ")" << setw(8) << fixed << setprecision(4) << tz << " +/-" << setw(6) - << sqrt(1. / tks.dz2_ptr[i]); + << sqrt(1. / tks.dz2[i]); - if (tks.dt2_ptr[i] > 0) { - std::cout << setw(8) << fixed << setprecision(4) << tks.t_ptr[i] << " +/-" << setw(6) - << sqrt(1. / tks.dt2_ptr[i]); + if (tks.dt2[i] > 0) { + std::cout << setw(8) << fixed << setprecision(4) << tks.tpca[i] << " +/-" << setw(6) << sqrt(1. / tks.dt2[i]); } else { std::cout << " "; } @@ -1486,16 +1502,15 @@ void DAClusterizerInZT_vect::dump(const double beta, const vertex_t& y, const tr double sump = 0.; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) > zdumpwidth_) + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) > zdumpwidth_) continue; - if ((tks.pi_ptr[i] > 0) && (tks.Z_sum_ptr[i] > 0)) { + if ((tks.tkwt[i] > 0) && (tks.sum_Z[i] > 0)) { double p = - y.pk_ptr[ivertex] * - local_exp( - -beta * - Eik(tks.z_ptr[i], y.z_ptr[ivertex], tks.dz2_ptr[i], tks.t_ptr[i], y.t_ptr[ivertex], tks.dt2_ptr[i])) / - tks.Z_sum_ptr[i]; + y.rho[ivertex] * + local_exp(-beta * + Eik(tks.zpca[i], y.zvtx[ivertex], tks.dz2[i], tks.tpca[i], y.tvtx[ivertex], tks.dt2[i])) / + tks.sum_Z[i]; if ((ivertex >= tks.kmin[i]) && (ivertex < tks.kmax[i])) { if (p > 0.0001) { @@ -1503,8 +1518,7 @@ void DAClusterizerInZT_vect::dump(const double beta, const vertex_t& y, const tr } else { std::cout << " _ "; // tiny but in the cluster list } - E += - p * Eik(tks.z_ptr[i], y.z_ptr[ivertex], tks.dz2_ptr[i], tks.t_ptr[i], y.t_ptr[ivertex], tks.dt2_ptr[i]); + E += p * Eik(tks.zpca[i], y.zvtx[ivertex], tks.dz2[i], tks.tpca[i], y.tvtx[ivertex], tks.dt2[i]); sump += p; } else { if (p > 0.1) { @@ -1524,7 +1538,7 @@ void DAClusterizerInZT_vect::dump(const double beta, const vertex_t& y, const tr } std::cout << " "; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) < zdumpwidth_) { + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) < zdumpwidth_) { std::cout << " " << setw(3) << ivertex << " "; } } @@ -1532,8 +1546,8 @@ void DAClusterizerInZT_vect::dump(const double beta, const vertex_t& y, const tr std::cout << " z= "; std::cout << setprecision(4); for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) < zdumpwidth_) { - std::cout << setw(8) << fixed << y.z_ptr[ivertex]; + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) < zdumpwidth_) { + std::cout << setw(8) << fixed << y.zvtx[ivertex]; } } std::cout << endl; @@ -1543,3 +1557,11 @@ void DAClusterizerInZT_vect::dump(const double beta, const vertex_t& y, const tr } #endif } + +void DAClusterizerInZT_vect::fillPSetDescription(edm::ParameterSetDescription& desc) { + DAClusterizerInZ_vect::fillPSetDescription(desc); + desc.add("tmerge", 0.01); // 4D only + desc.add("dtCutOff", 4.); // 4D only + desc.add("t0Max", 1.0); // 4D only + desc.add("vertexSizeTime", 0.008); // 4D only +} diff --git a/RecoVertex/PrimaryVertexProducer/src/DAClusterizerInZ_vect.cc b/RecoVertex/PrimaryVertexProducer/src/DAClusterizerInZ_vect.cc index df61b4660b225..f9312dcebc26a 100644 --- a/RecoVertex/PrimaryVertexProducer/src/DAClusterizerInZ_vect.cc +++ b/RecoVertex/PrimaryVertexProducer/src/DAClusterizerInZ_vect.cc @@ -10,8 +10,6 @@ #include "FWCore/Utilities/interface/isFinite.h" #include "vdt/vdtMath.h" -#include - using namespace std; //#define DEBUG @@ -24,10 +22,11 @@ DAClusterizerInZ_vect::DAClusterizerInZ_vect(const edm::ParameterSet& conf) { maxIterations_ = 1000; mintrkweight_ = 0.5; - // configurable debug outptut debug output - verbose_ = conf.getUntrackedParameter("verbose", false); + // configurable debug output +#ifdef DEBUG zdumpcenter_ = conf.getUntrackedParameter("zdumpcenter", 0.); zdumpwidth_ = conf.getUntrackedParameter("zdumpwidth", 20.); +#endif // configurable parameters double Tmin = conf.getParameter("Tmin"); @@ -38,55 +37,56 @@ DAClusterizerInZ_vect::DAClusterizerInZ_vect(const edm::ParameterSet& conf) { d0CutOff_ = conf.getParameter("d0CutOff"); dzCutOff_ = conf.getParameter("dzCutOff"); uniquetrkweight_ = conf.getParameter("uniquetrkweight"); + uniquetrkminp_ = conf.getParameter("uniquetrkminp"); zmerge_ = conf.getParameter("zmerge"); sel_zrange_ = conf.getParameter("zrange"); convergence_mode_ = conf.getParameter("convergence_mode"); delta_lowT_ = conf.getParameter("delta_lowT"); delta_highT_ = conf.getParameter("delta_highT"); - if (verbose_) { - std::cout << "DAClusterizerinZ_vect: mintrkweight = " << mintrkweight_ << std::endl; - std::cout << "DAClusterizerinZ_vect: uniquetrkweight = " << uniquetrkweight_ << std::endl; - std::cout << "DAClusterizerinZ_vect: zmerge = " << zmerge_ << std::endl; - std::cout << "DAClusterizerinZ_vect: Tmin = " << Tmin << std::endl; - std::cout << "DAClusterizerinZ_vect: Tpurge = " << Tpurge << std::endl; - std::cout << "DAClusterizerinZ_vect: Tstop = " << Tstop << std::endl; - std::cout << "DAClusterizerinZ_vect: vertexSize = " << vertexSize_ << std::endl; - std::cout << "DAClusterizerinZ_vect: coolingFactor = " << coolingFactor_ << std::endl; - std::cout << "DAClusterizerinZ_vect: d0CutOff = " << d0CutOff_ << std::endl; - std::cout << "DAClusterizerinZ_vect: dzCutOff = " << dzCutOff_ << std::endl; - std::cout << "DAClusterizerInZ_vect: zrange = " << sel_zrange_ << std::endl; - std::cout << "DAClusterizerinZ_vect: convergence mode = " << convergence_mode_ << std::endl; - std::cout << "DAClusterizerinZ_vect: delta_highT = " << delta_highT_ << std::endl; - std::cout << "DAClusterizerinZ_vect: delta_lowT = " << delta_lowT_ << std::endl; - } #ifdef DEBUG + std::cout << "DAClusterizerinZ_vect: mintrkweight = " << mintrkweight_ << std::endl; + std::cout << "DAClusterizerinZ_vect: uniquetrkweight = " << uniquetrkweight_ << std::endl; + std::cout << "DAClusterizerInZ_vect: uniquetrkminp = " << uniquetrkminp_ << std::endl; + std::cout << "DAClusterizerinZ_vect: zmerge = " << zmerge_ << std::endl; + std::cout << "DAClusterizerinZ_vect: Tmin = " << Tmin << std::endl; + std::cout << "DAClusterizerinZ_vect: Tpurge = " << Tpurge << std::endl; + std::cout << "DAClusterizerinZ_vect: Tstop = " << Tstop << std::endl; + std::cout << "DAClusterizerinZ_vect: vertexSize = " << vertexSize_ << std::endl; + std::cout << "DAClusterizerinZ_vect: coolingFactor = " << coolingFactor_ << std::endl; + std::cout << "DAClusterizerinZ_vect: d0CutOff = " << d0CutOff_ << std::endl; + std::cout << "DAClusterizerinZ_vect: dzCutOff = " << dzCutOff_ << std::endl; + std::cout << "DAClusterizerInZ_vect: zrange = " << sel_zrange_ << std::endl; + std::cout << "DAClusterizerinZ_vect: convergence mode = " << convergence_mode_ << std::endl; + std::cout << "DAClusterizerinZ_vect: delta_highT = " << delta_highT_ << std::endl; + std::cout << "DAClusterizerinZ_vect: delta_lowT = " << delta_lowT_ << std::endl; std::cout << "DAClusterizerinZ_vect: DEBUGLEVEL " << DEBUGLEVEL << std::endl; #endif if (convergence_mode_ > 1) { edm::LogWarning("DAClusterizerinZ_vect") - << "DAClusterizerInZ_vect: invalid convergence_mode" << convergence_mode_ << " reset to default " << 0; + << "DAClusterizerInZ_vect: invalid convergence_mode " << convergence_mode_ << " reset to default " << 0; convergence_mode_ = 0; } if (Tmin == 0) { + betamax_ = 1.0; edm::LogWarning("DAClusterizerinZ_vect") - << "DAClusterizerInZ_vect: invalid Tmin" << Tmin << " reset to default " << 1. / betamax_; + << "DAClusterizerInZ_vect: invalid Tmin " << Tmin << " reset to default " << 1. / betamax_; } else { betamax_ = 1. / Tmin; } if ((Tpurge > Tmin) || (Tpurge == 0)) { edm::LogWarning("DAClusterizerinZ_vect") - << "DAClusterizerInZ_vect: invalid Tpurge" << Tpurge << " set to " << Tmin; + << "DAClusterizerInZ_vect: invalid Tpurge " << Tpurge << " set to " << Tmin; Tpurge = Tmin; } betapurge_ = 1. / Tpurge; if ((Tstop > Tpurge) || (Tstop == 0)) { edm::LogWarning("DAClusterizerinZ_vect") - << "DAClusterizerInZ_vect: invalid Tstop" << Tstop << " set to " << max(1., Tpurge); + << "DAClusterizerInZ_vect: invalid Tstop " << Tstop << " set to " << max(1., Tpurge); Tstop = max(1., Tpurge); } betastop_ = 1. / Tstop; @@ -95,11 +95,6 @@ DAClusterizerInZ_vect::DAClusterizerInZ_vect(const edm::ParameterSet& conf) { namespace { inline double local_exp(double const& inp) { return vdt::fast_exp(inp); } - inline void local_exp_list(double const* __restrict__ arg_inp, double* __restrict__ arg_out, const int arg_arr_size) { - for (auto i = 0; i != arg_arr_size; ++i) - arg_out[i] = vdt::fast_exp(arg_inp[i]); - } - inline void local_exp_list_range(double const* __restrict__ arg_inp, double* __restrict__ arg_out, const int kmin, @@ -123,44 +118,42 @@ void DAClusterizerInZ_vect::verify(const vertex_t& v, const track_t& tks, unsign nt = tks.getSize(); } - assert(v.z.size() == nv); - assert(v.pk.size() == nv); - assert(v.swz.size() == nv); - assert(v.ei_cache.size() == nv); - assert(v.ei.size() == nv); - assert(v.se.size() == nv); - assert(v.swz.size() == nv); - assert(v.swE.size() == nv); - - assert(v.z_ptr == &v.z.front()); - assert(v.pk_ptr == &v.pk.front()); - assert(v.ei_cache_ptr == &v.ei_cache.front()); - assert(v.swz_ptr == &v.swz.front()); - assert(v.se_ptr == &v.se.front()); - assert(v.swE_ptr == &v.swE.front()); + assert(v.zvtx_vec.size() == nv); + assert(v.rho_vec.size() == nv); + assert(v.swz_vec.size() == nv); + assert(v.exp_arg_vec.size() == nv); + assert(v.exp_vec.size() == nv); + assert(v.se_vec.size() == nv); + assert(v.swz_vec.size() == nv); + assert(v.swE_vec.size() == nv); + + assert(v.zvtx == &v.zvtx_vec.front()); + assert(v.rho == &v.rho_vec.front()); + assert(v.exp_arg == &v.exp_arg_vec.front()); + assert(v.sw == &v.sw_vec.front()); + assert(v.swz == &v.swz_vec.front()); + assert(v.se == &v.se_vec.front()); + assert(v.swE == &v.swE_vec.front()); for (unsigned int k = 0; k < nv - 1; k++) { - if (v.z[k] <= v.z[k + 1]) + if (v.zvtx_vec[k] <= v.zvtx_vec[k + 1]) continue; - cout << " Z, cluster z-ordering assertion failure z[" << k << "] =" << v.z[k] << " z[" << k + 1 - << "] =" << v.z[k + 1] << endl; + cout << " Z, cluster z-ordering assertion failure z[" << k << "] =" << v.zvtx_vec[k] << " z[" << k + 1 + << "] =" << v.zvtx_vec[k + 1] << endl; } - //for(unsigned int k=0; k< nv-1; k++){ - // assert( v.z[k] <= v.z[k+1]); - //} - assert(nt == tks.z.size()); - assert(nt == tks.dz2.size()); + assert(nt == tks.zpca_vec.size()); + assert(nt == tks.dz2_vec.size()); assert(nt == tks.tt.size()); - assert(nt == tks.pi.size()); - assert(nt == tks.Z_sum.size()); + assert(nt == tks.tkwt_vec.size()); + assert(nt == tks.sum_Z_vec.size()); assert(nt == tks.kmin.size()); assert(nt == tks.kmax.size()); - assert(tks.z_ptr == &tks.z.front()); - assert(tks.dz2_ptr == &tks.dz2.front()); - assert(tks.pi_ptr == &tks.pi.front()); - assert(tks.Z_sum_ptr == &tks.Z_sum.front()); + assert(tks.zpca == &tks.zpca_vec.front()); + assert(tks.dz2 == &tks.dz2_vec.front()); + assert(tks.tkwt == &tks.tkwt_vec.front()); + assert(tks.sum_Z == &tks.sum_Z_vec.front()); for (unsigned int i = 0; i < nt; i++) { if ((tks.kmin[i] < tks.kmax[i]) && (tks.kmax[i] <= nv)) @@ -174,14 +167,14 @@ void DAClusterizerInZ_vect::verify(const vertex_t& v, const track_t& tks, unsign } } -//todo: use r-value possibility of c++11 here DAClusterizerInZ_vect::track_t DAClusterizerInZ_vect::fill(const vector& tracks) const { // prepare track data for clustering track_t tks; + double sumtkwt = 0.; for (auto it = tracks.begin(); it != tracks.end(); it++) { if (!(*it).isValid()) continue; - double t_pi = 1.; + double t_tkwt = 1.; double t_z = ((*it).stateAtBeamLine().trackStateAtPCA()).position().z(); if (std::fabs(t_z) > 1000.) continue; @@ -197,16 +190,20 @@ DAClusterizerInZ_vect::track_t DAClusterizerInZ_vect::fill(const vector 0) { Measurement1D atIP = (*it).stateAtBeamLine().transverseImpactParameter(); // error contains beamspot - t_pi = 1. / (1. + local_exp(std::pow(atIP.value() / atIP.error(), 2) - - std::pow(d0CutOff_, 2))); // reduce weight for high ip tracks - if (edm::isNotFinite(t_pi) || t_pi < std::numeric_limits::epsilon()) + t_tkwt = 1. / (1. + local_exp(std::pow(atIP.value() / atIP.error(), 2) - + std::pow(d0CutOff_, 2))); // reduce weight for high ip tracks + if (edm::isNotFinite(t_tkwt) || t_tkwt < std::numeric_limits::epsilon()) { + edm::LogWarning("DAClusterizerinZ_vect") << "rejected track t_tkwt " << t_tkwt; continue; // usually is > 0.99 + } } - LogTrace("DAClusterizerinZ_vect") << t_z << ' ' << t_dz2 << ' ' << t_pi; - tks.addItemSorted(t_z, t_dz2, &(*it), t_pi); + tks.addItemSorted(t_z, t_dz2, &(*it), t_tkwt); + sumtkwt += t_tkwt; } tks.extractRaw(); + tks.osumtkwt = sumtkwt > 0 ? 1. / sumtkwt : 0.; + #ifdef DEBUG if (DEBUGLEVEL > 0) { std::cout << "Track count (Z) " << tks.getSize() << std::endl; @@ -232,29 +229,29 @@ void DAClusterizerInZ_vect::set_vtx_range(double beta, track_t& gtracks, vertex_ for (auto itrack = 0U; itrack < nt; ++itrack) { double zrange = max(sel_zrange_ / sqrt(beta * gtracks.dz2[itrack]), zrange_min_); - double zmin = gtracks.z[itrack] - zrange; + double zmin = gtracks.zpca[itrack] - zrange; unsigned int kmin = min(nv - 1, gtracks.kmin[itrack]); // find the smallest vertex_z that is larger than zmin - if (gvertices.z_ptr[kmin] > zmin) { - while ((kmin > 0) && (gvertices.z_ptr[kmin - 1] > zmin)) { + if (gvertices.zvtx[kmin] > zmin) { + while ((kmin > 0) && (gvertices.zvtx[kmin - 1] > zmin)) { kmin--; } } else { - while ((kmin < (nv - 1)) && (gvertices.z_ptr[kmin] < zmin)) { + while ((kmin < (nv - 1)) && (gvertices.zvtx[kmin] < zmin)) { kmin++; } } - double zmax = gtracks.z[itrack] + zrange; + double zmax = gtracks.zpca[itrack] + zrange; unsigned int kmax = min(nv - 1, gtracks.kmax[itrack] - 1); // note: kmax points to the last vertex in the range, while gtracks.kmax points to the entry BEHIND the last vertex // find the largest vertex_z that is smaller than zmax - if (gvertices.z_ptr[kmax] < zmax) { - while ((kmax < (nv - 1)) && (gvertices.z_ptr[kmax + 1] < zmax)) { + if (gvertices.zvtx[kmax] < zmax) { + while ((kmax < (nv - 1)) && (gvertices.zvtx[kmax + 1] < zmax)) { kmax++; } } else { - while ((kmax > 0) && (gvertices.z_ptr[kmax] > zmax)) { + while ((kmax > 0) && (gvertices.zvtx[kmax] > zmax)) { kmax--; } } @@ -278,26 +275,19 @@ void DAClusterizerInZ_vect::clear_vtx_range(track_t& gtracks, vertex_t& gvertice } } -double DAClusterizerInZ_vect::update(double beta, track_t& gtracks, vertex_t& gvertices, const double rho0) const { - //update weights and vertex positions - // mass constrained annealing without noise +double DAClusterizerInZ_vect::update( + double beta, track_t& gtracks, vertex_t& gvertices, const double rho0, const bool updateTc) const { + // update weights and vertex positions // returns the maximum of changes of vertex positions - // identical to updateTC but without updating swE needed for Tc + // sums needed for Tc are only updated if updateTC == true const unsigned int nt = gtracks.getSize(); const unsigned int nv = gvertices.getSize(); + auto osumtkwt = gtracks.osumtkwt; - //initialize sums - double sumpi = 0; - - // to return how much the prototype moved - double delta = 0; - - // intial value of a sum double Z_init = 0; - // independpent of loop if (rho0 > 0) { - Z_init = rho0 * local_exp(-beta * dzCutOff_ * dzCutOff_); + Z_init = rho0 * local_exp(-beta * dzCutOff_ * dzCutOff_); // cut-off } // define kernels @@ -306,13 +296,13 @@ double DAClusterizerInZ_vect::update(double beta, track_t& gtracks, vertex_t& gv vertex_t const& vertices, const unsigned int kmin, const unsigned int kmax) { - const double track_z = tracks.z_ptr[itrack]; - const double botrack_dz2 = -beta * tracks.dz2_ptr[itrack]; + const double track_z = tracks.zpca[itrack]; + const double botrack_dz2 = -beta * tracks.dz2[itrack]; // auto-vectorized for (unsigned int ivertex = kmin; ivertex < kmax; ++ivertex) { - auto mult_res = track_z - vertices.z_ptr[ivertex]; - vertices.ei_cache_ptr[ivertex] = botrack_dz2 * (mult_res * mult_res); + auto mult_res = track_z - vertices.zvtx[ivertex]; + vertices.exp_arg[ivertex] = botrack_dz2 * (mult_res * mult_res); } }; @@ -320,223 +310,107 @@ double DAClusterizerInZ_vect::update(double beta, track_t& gtracks, vertex_t& gv vertex_t const& vertices, const unsigned int kmin, const unsigned int kmax) -> double { double ZTemp = Z_init; for (unsigned int ivertex = kmin; ivertex < kmax; ++ivertex) { - ZTemp += vertices.pk_ptr[ivertex] * vertices.ei_ptr[ivertex]; + ZTemp += vertices.rho[ivertex] * vertices.exp[ivertex]; } return ZTemp; }; - auto kernel_calc_normalization_range = [](const unsigned int track_num, - track_t& tks_vec, - vertex_t& y_vec, - const unsigned int kmin, - const unsigned int kmax) { - auto tmp_trk_pi = tks_vec.pi_ptr[track_num]; - auto o_trk_Z_sum = 1. / tks_vec.Z_sum_ptr[track_num]; - auto o_trk_dz2 = tks_vec.dz2_ptr[track_num]; - auto tmp_trk_z = tks_vec.z_ptr[track_num]; + auto kernel_calc_normalization_range = [updateTc](const unsigned int track_num, + track_t& tracks, + vertex_t& vertices, + const unsigned int kmin, + const unsigned int kmax) { + auto o_trk_sum_Z = tracks.tkwt[track_num] / tracks.sum_Z[track_num]; + auto o_trk_dz2 = tracks.dz2[track_num]; + auto tmp_trk_z = tracks.zpca[track_num]; // auto-vectorized - for (unsigned int k = kmin; k < kmax; ++k) { - y_vec.se_ptr[k] += y_vec.ei_ptr[k] * (tmp_trk_pi * o_trk_Z_sum); - auto w = y_vec.pk_ptr[k] * y_vec.ei_ptr[k] * (tmp_trk_pi * o_trk_Z_sum * o_trk_dz2); - y_vec.sw_ptr[k] += w; - y_vec.swz_ptr[k] += w * tmp_trk_z; + if (updateTc) { +#pragma GCC ivdep + for (unsigned int k = kmin; k < kmax; ++k) { + vertices.se[k] += vertices.exp[k] * o_trk_sum_Z; + auto w = vertices.rho[k] * vertices.exp[k] * (o_trk_sum_Z * o_trk_dz2); + vertices.sw[k] += w; + vertices.swz[k] += w * tmp_trk_z; + vertices.swE[k] += w * vertices.exp_arg[k]; + } + } else { + // same loop but without updating sWE +#pragma GCC ivdep + for (unsigned int k = kmin; k < kmax; ++k) { + vertices.se[k] += vertices.exp[k] * o_trk_sum_Z; + auto w = vertices.rho[k] * vertices.exp[k] * (o_trk_sum_Z * o_trk_dz2); + vertices.sw[k] += w; + vertices.swz[k] += w * tmp_trk_z; + } } }; - for (auto ivertex = 0U; ivertex < nv; ++ivertex) { - gvertices.se_ptr[ivertex] = 0.0; - gvertices.sw_ptr[ivertex] = 0.0; - gvertices.swz_ptr[ivertex] = 0.0; + if (updateTc) { + for (auto ivertex = 0U; ivertex < nv; ++ivertex) { + gvertices.se[ivertex] = 0.0; + gvertices.sw[ivertex] = 0.0; + gvertices.swz[ivertex] = 0.0; + gvertices.swE[ivertex] = 0.0; + } + } else { + for (auto ivertex = 0U; ivertex < nv; ++ivertex) { + gvertices.se[ivertex] = 0.0; + gvertices.sw[ivertex] = 0.0; + gvertices.swz[ivertex] = 0.0; + } } // loop over tracks for (auto itrack = 0U; itrack < nt; ++itrack) { - unsigned int kmin = gtracks.kmin[itrack]; - unsigned int kmax = gtracks.kmax[itrack]; - -#ifdef DEBUG - assert((kmin < kmax) && (kmax <= nv)); - assert(itrack < gtracks.Z_sum.size()); -#endif + const unsigned int kmin = gtracks.kmin[itrack]; + const unsigned int kmax = gtracks.kmax[itrack]; kernel_calc_exp_arg_range(itrack, gtracks, gvertices, kmin, kmax); - local_exp_list_range(gvertices.ei_cache_ptr, gvertices.ei_ptr, kmin, kmax); - gtracks.Z_sum_ptr[itrack] = kernel_add_Z_range(gvertices, kmin, kmax); + local_exp_list_range(gvertices.exp_arg, gvertices.exp, kmin, kmax); + gtracks.sum_Z[itrack] = kernel_add_Z_range(gvertices, kmin, kmax); - if (edm::isNotFinite(gtracks.Z_sum_ptr[itrack])) - gtracks.Z_sum_ptr[itrack] = 0.0; - // used in the next major loop to follow - sumpi += gtracks.pi_ptr[itrack]; + if (edm::isNotFinite(gtracks.sum_Z[itrack])) + gtracks.sum_Z[itrack] = 0.0; - if (gtracks.Z_sum_ptr[itrack] > 1.e-100) { + if (gtracks.sum_Z[itrack] > 1.e-100) { kernel_calc_normalization_range(itrack, gtracks, gvertices, kmin, kmax); } } - // now update z and pk - auto kernel_calc_z = [sumpi, nv](vertex_t& vertices) -> double { - double delta = 0; - // does not vectorize(?) - for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (vertices.sw_ptr[ivertex] > 0) { - auto znew = vertices.swz_ptr[ivertex] / vertices.sw_ptr[ivertex]; - delta = max(std::abs(vertices.z_ptr[ivertex] - znew), delta); - vertices.z_ptr[ivertex] = znew; - } - } - - auto osumpi = 1. / sumpi; - for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) - vertices.pk_ptr[ivertex] = vertices.pk_ptr[ivertex] * vertices.se_ptr[ivertex] * osumpi; - - return delta; - }; - - delta = kernel_calc_z(gvertices); - - // return how much the prototypes moved - return delta; -} - -double DAClusterizerInZ_vect::updateTc(double beta, track_t& gtracks, vertex_t& gvertices, const double rho0) const { - // update weights and vertex positions and Tc input - // returns the squared sum of changes of vertex positions - - const unsigned int nt = gtracks.getSize(); - const unsigned int nv = gvertices.getSize(); - - //initialize sums - double sumpi = 0; - - // to return how much the prototype moved - double delta = 0; - - // independpent of loop - double Z_init = 0; - if (rho0 > 0) { - Z_init = rho0 * local_exp(-beta * dzCutOff_ * dzCutOff_); // cut-off - } - - // define kernels - auto kernel_calc_exp_arg_range = [beta](const unsigned int itrack, - track_t const& tracks, - vertex_t const& vertices, - const unsigned int kmin, - const unsigned int kmax) { - const double track_z = tracks.z_ptr[itrack]; - const double botrack_dz2 = -beta * tracks.dz2_ptr[itrack]; - - // auto-vectorized - for (unsigned int ivertex = kmin; ivertex < kmax; ++ivertex) { - auto mult_res = track_z - vertices.z_ptr[ivertex]; - vertices.ei_cache_ptr[ivertex] = botrack_dz2 * (mult_res * mult_res); - } - }; - - auto kernel_add_Z_range = [Z_init]( - vertex_t const& vertices, const unsigned int kmin, const unsigned int kmax) -> double { - double ZTemp = Z_init; - for (unsigned int ivertex = kmin; ivertex < kmax; ++ivertex) { - ZTemp += vertices.pk_ptr[ivertex] * vertices.ei_ptr[ivertex]; - } - return ZTemp; - }; - - auto kernel_calc_normalization_range = [beta](const unsigned int track_num, - track_t& tks_vec, - vertex_t& y_vec, - const unsigned int kmin, - const unsigned int kmax) { - auto tmp_trk_pi = tks_vec.pi_ptr[track_num]; - auto o_trk_Z_sum = 1. / tks_vec.Z_sum_ptr[track_num]; - auto o_trk_dz2 = tks_vec.dz2_ptr[track_num]; - auto tmp_trk_z = tks_vec.z_ptr[track_num]; + // (un-)apply the factor -beta which is needed in exp_arg, but not in swE + if (updateTc) { auto obeta = -1. / beta; - - // auto-vectorized - for (unsigned int k = kmin; k < kmax; ++k) { - y_vec.se_ptr[k] += y_vec.ei_ptr[k] * (tmp_trk_pi * o_trk_Z_sum); - auto w = y_vec.pk_ptr[k] * y_vec.ei_ptr[k] * (tmp_trk_pi * o_trk_Z_sum * o_trk_dz2); - y_vec.sw_ptr[k] += w; - y_vec.swz_ptr[k] += w * tmp_trk_z; - y_vec.swE_ptr[k] += w * y_vec.ei_cache_ptr[k] * obeta; + for (auto ivertex = 0U; ivertex < nv; ++ivertex) { + gvertices.swE[ivertex] *= obeta; } - }; - - for (auto ivertex = 0U; ivertex < nv; ++ivertex) { - gvertices.se_ptr[ivertex] = 0.0; - gvertices.sw_ptr[ivertex] = 0.0; - gvertices.swz_ptr[ivertex] = 0.0; - gvertices.swE_ptr[ivertex] = 0.0; } - // loop over tracks - for (auto itrack = 0U; itrack < nt; ++itrack) { - unsigned int kmin = gtracks.kmin[itrack]; - unsigned int kmax = gtracks.kmax[itrack]; - - kernel_calc_exp_arg_range(itrack, gtracks, gvertices, kmin, kmax); - local_exp_list_range(gvertices.ei_cache_ptr, gvertices.ei_ptr, kmin, kmax); - gtracks.Z_sum_ptr[itrack] = kernel_add_Z_range(gvertices, kmin, kmax); - - if (edm::isNotFinite(gtracks.Z_sum_ptr[itrack])) - gtracks.Z_sum_ptr[itrack] = 0.0; - // used in the next major loop to follow - sumpi += gtracks.pi_ptr[itrack]; - - if (gtracks.Z_sum_ptr[itrack] > 1.e-100) { - kernel_calc_normalization_range(itrack, gtracks, gvertices, kmin, kmax); - } - } - - // now update z and pk - auto kernel_calc_z = [sumpi, nv](vertex_t& vertices) -> double { + // now update z and rho + auto kernel_calc_z = [osumtkwt, nv](vertex_t& vertices) -> double { double delta = 0; - // does not vectorizes + // does not vectorize for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (vertices.sw_ptr[ivertex] > 0) { - auto znew = vertices.swz_ptr[ivertex] / vertices.sw_ptr[ivertex]; + if (vertices.sw[ivertex] > 0) { + auto znew = vertices.swz[ivertex] / vertices.sw[ivertex]; // prevents from vectorizing if - delta = max(std::abs(vertices.z_ptr[ivertex] - znew), delta); - vertices.z_ptr[ivertex] = znew; + delta = max(std::abs(vertices.zvtx[ivertex] - znew), delta); + vertices.zvtx[ivertex] = znew; } } - auto osumpi = 1. / sumpi; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) - vertices.pk_ptr[ivertex] = vertices.pk_ptr[ivertex] * vertices.se_ptr[ivertex] * osumpi; + vertices.rho[ivertex] = vertices.rho[ivertex] * vertices.se[ivertex] * osumtkwt; return delta; }; - delta = kernel_calc_z(gvertices); + double delta = kernel_calc_z(gvertices); // return how much the prototypes moved return delta; } -double DAClusterizerInZ_vect::evalF(const double beta, track_t const& tks, vertex_t const& v) const { - // temporary : evaluate the original F - auto nt = tks.getSize(); - auto nv = v.getSize(); - double F = 0; - for (auto i = 0U; i < nt; i++) { - double Z = 0; - for (auto k = 0u; k < nv; k++) { - double Eik = (tks.z[k] - v.z[i]) * (tks.z[k] - v.z[i]) * tks.dz2[i]; - if ((beta * Eik) < 30) { - Z += v.pk[k] * local_exp(-beta * Eik); - } - } - if (Z > 0) { - F += tks.pi[i] * log(Z); - } - } - std::cout << "F(full) = " << -F / beta << std::endl; - return -F / beta; -} - unsigned int DAClusterizerInZ_vect::thermalize( double beta, track_t& tks, vertex_t& v, const double delta_max0, const double rho0) const { unsigned int niter = 0; @@ -551,7 +425,7 @@ unsigned int DAClusterizerInZ_vect::thermalize( set_vtx_range(beta, tks, v); double delta_sum_range = 0; // accumulate max(|delta-z|) as a lower bound - std::vector z0 = v.z; + std::vector z0 = v.zvtx_vec; while (niter++ < maxIterations_) { delta = update(beta, tks, v, rho0); @@ -559,10 +433,10 @@ unsigned int DAClusterizerInZ_vect::thermalize( if (delta_sum_range > zrange_min_) { for (unsigned int k = 0; k < v.getSize(); k++) { - if (std::abs(v.z[k] - z0[k]) > zrange_min_) { + if (std::abs(v.zvtx_vec[k] - z0[k]) > zrange_min_) { set_vtx_range(beta, tks, v); delta_sum_range = 0; - z0 = v.z; + z0 = v.zvtx_vec; break; } } @@ -597,8 +471,8 @@ bool DAClusterizerInZ_vect::merge(vertex_t& y, track_t& tks, double& beta) const // merge the smallest distance clusters first std::vector > critical; for (unsigned int k = 0; (k + 1) < nv; k++) { - if (std::fabs(y.z_ptr[k + 1] - y.z_ptr[k]) < zmerge_) { - critical.push_back(make_pair(std::fabs(y.z_ptr[k + 1] - y.z_ptr[k]), k)); + if (std::fabs(y.zvtx[k + 1] - y.zvtx[k]) < zmerge_) { + critical.push_back(make_pair(std::fabs(y.zvtx[k + 1] - y.zvtx[k]), k)); } } if (critical.empty()) @@ -608,28 +482,27 @@ bool DAClusterizerInZ_vect::merge(vertex_t& y, track_t& tks, double& beta) const for (unsigned int ik = 0; ik < critical.size(); ik++) { unsigned int k = critical[ik].second; - double rho = y.pk_ptr[k] + y.pk_ptr[k + 1]; - double swE = y.swE_ptr[k] + y.swE_ptr[k + 1] - - y.pk_ptr[k] * y.pk_ptr[k + 1] / rho * std::pow(y.z_ptr[k + 1] - y.z_ptr[k], 2); - double Tc = 2 * swE / (y.sw_ptr[k] + y.sw_ptr[k + 1]); + double rho = y.rho[k] + y.rho[k + 1]; + double swE = y.swE[k] + y.swE[k + 1] - y.rho[k] * y.rho[k + 1] / rho * std::pow(y.zvtx[k + 1] - y.zvtx[k], 2); + double Tc = 2 * swE / (y.sw[k] + y.sw[k + 1]); if (Tc * beta < 1) { #ifdef DEBUG assert((k + 1) < nv); if (DEBUGLEVEL > 1) { - std::cout << "merging " << fixed << setprecision(4) << y.z_ptr[k + 1] << " and " << y.z_ptr[k] - << " Tc = " << Tc << " sw = " << y.sw_ptr[k] + y.sw_ptr[k + 1] << std::endl; + std::cout << "merging " << fixed << setprecision(4) << y.zvtx[k + 1] << " and " << y.zvtx[k] << " Tc = " << Tc + << " sw = " << y.sw[k] + y.sw[k + 1] << std::endl; } #endif if (rho > 0) { - y.z_ptr[k] = (y.pk_ptr[k] * y.z_ptr[k] + y.pk_ptr[k + 1] * y.z_ptr[k + 1]) / rho; + y.zvtx[k] = (y.rho[k] * y.zvtx[k] + y.rho[k + 1] * y.zvtx[k + 1]) / rho; } else { - y.z_ptr[k] = 0.5 * (y.z_ptr[k] + y.z_ptr[k + 1]); + y.zvtx[k] = 0.5 * (y.zvtx[k] + y.zvtx[k + 1]); } - y.pk_ptr[k] = rho; - y.sw_ptr[k] += y.sw_ptr[k + 1]; - y.swE_ptr[k] = swE; + y.rho[k] = rho; + y.sw[k] += y.sw[k + 1]; + y.swE[k] = swE; y.removeItem(k + 1, tks); set_vtx_range(beta, tks, y); y.extractRaw(); @@ -649,46 +522,55 @@ bool DAClusterizerInZ_vect::purge(vertex_t& y, track_t& tks, double& rho0, const if (nv < 2) return false; - double sumpmin = nt; - unsigned int k0 = nv; - - std::vector inverse_zsums(nt), arg_cache(nt), eik_cache(nt), pcut_cache(nv); - double* __restrict__ pinverse_zsums; + std::vector sump_v(nv), arg_cache_v(nv), exp_cache_v(nv), pcut_cache_v(nv); + std::vector nUnique_v(nv); double* __restrict__ parg_cache; - double* __restrict__ peik_cache; + double* __restrict__ pexp_cache; double* __restrict__ ppcut_cache; - pinverse_zsums = inverse_zsums.data(); - parg_cache = arg_cache.data(); - peik_cache = eik_cache.data(); - ppcut_cache = pcut_cache.data(); - for (unsigned i = 0; i < nt; ++i) { - inverse_zsums[i] = tks.Z_sum_ptr[i] > eps ? 1. / tks.Z_sum_ptr[i] : 0.0; - } + double* __restrict__ psump; + int* __restrict__ pnUnique; + int constexpr nunique_min_ = 2; + + set_vtx_range(beta, tks, y); + + parg_cache = arg_cache_v.data(); + pexp_cache = exp_cache_v.data(); + ppcut_cache = pcut_cache_v.data(); + psump = sump_v.data(); + pnUnique = nUnique_v.data(); + const auto rhoconst = rho0 * local_exp(-beta * dzCutOff_ * dzCutOff_); for (unsigned int k = 0; k < nv; k++) { - const double pmax = y.pk_ptr[k] / (y.pk_ptr[k] + rhoconst); + const double pmax = y.rho[k] / (y.rho[k] + rhoconst); ppcut_cache[k] = uniquetrkweight_ * pmax; } - for (unsigned int k = 0; k < nv; k++) { - for (unsigned int i = 0; i < nt; ++i) { - const auto track_z = tks.z_ptr[i]; - const auto botrack_dz2 = -beta * tks.dz2_ptr[i]; - const auto mult_resz = track_z - y.z_ptr[k]; - parg_cache[i] = botrack_dz2 * (mult_resz * mult_resz); + for (unsigned int i = 0; i < nt; i++) { + const auto invZ = ((tks.sum_Z[i] > eps) && (tks.tkwt[i] > uniquetrkminp_)) ? 1. / tks.sum_Z[i] : 0.; + const auto track_z = tks.zpca[i]; + const auto botrack_dz2 = -beta * tks.dz2[i]; + const auto kmin = tks.kmin[i]; + const auto kmax = tks.kmax[i]; + + for (unsigned int k = kmin; k < kmax; k++) { + const auto mult_resz = track_z - y.zvtx[k]; + parg_cache[k] = botrack_dz2 * (mult_resz * mult_resz); } - local_exp_list(parg_cache, peik_cache, nt); - - int nUnique = 0; - double sump = 0; - for (unsigned int i = 0; i < nt; ++i) { - const auto p = y.pk_ptr[k] * peik_cache[i] * pinverse_zsums[i]; - sump += p; - nUnique += ((p > ppcut_cache[k]) & (tks.pi_ptr[i] > 0)) ? 1 : 0; + + local_exp_list_range(parg_cache, pexp_cache, kmin, kmax); + + for (unsigned int k = kmin; k < kmax; k++) { + const double p = y.rho[k] * pexp_cache[k] * invZ; + psump[k] += p; + pnUnique[k] += (p > ppcut_cache[k]) ? 1 : 0; } + } - if ((nUnique < 2) && (sump < sumpmin)) { - sumpmin = sump; + double sumpmin = nt; + unsigned int k0 = nv; + for (unsigned k = 0; k < nv; k++) { + if ((pnUnique[k] < nunique_min_) && (psump[k] < sumpmin)) { + sumpmin = psump[k]; k0 = k; } } @@ -697,8 +579,8 @@ bool DAClusterizerInZ_vect::purge(vertex_t& y, track_t& tks, double& rho0, const #ifdef DEBUG assert(k0 < y.getSize()); if (DEBUGLEVEL > 1) { - std::cout << "eliminating prototype at " << std::setw(10) << std::setprecision(4) << y.z_ptr[k0] - << " with sump=" << sumpmin << " rho*nt =" << y.pk_ptr[k0] * nt << endl; + std::cout << "eliminating prototype at " << std::setw(10) << std::setprecision(4) << y.zvtx[k0] + << " with sump=" << sumpmin << " rho*nt =" << y.rho[k0] * nt << endl; } #endif @@ -721,19 +603,19 @@ double DAClusterizerInZ_vect::beta0(double betamax, track_t const& tks, vertex_t double sumwz = 0; double sumw = 0; for (unsigned int i = 0; i < nt; i++) { - double w = tks.pi_ptr[i] * tks.dz2_ptr[i]; - sumwz += w * tks.z_ptr[i]; + double w = tks.tkwt[i] * tks.dz2[i]; + sumwz += w * tks.zpca[i]; sumw += w; } - y.z_ptr[k] = sumwz / sumw; + y.zvtx[k] = sumwz / sumw; // estimate Tcrit double a = 0, b = 0; for (unsigned int i = 0; i < nt; i++) { - double dx = tks.z_ptr[i] - y.z_ptr[k]; - double w = tks.pi_ptr[i] * tks.dz2_ptr[i]; - a += w * std::pow(dx, 2) * tks.dz2_ptr[i]; + double dx = tks.zpca[i] - y.zvtx[k]; + double w = tks.tkwt[i] * tks.dz2[i]; + a += w * std::pow(dx, 2) * tks.dz2[i]; b += w; } double Tc = 2. * a / b; // the critical temperature of this vertex @@ -773,7 +655,7 @@ bool DAClusterizerInZ_vect::split(const double beta, track_t& tks, vertex_t& y, std::vector > critical; for (unsigned int k = 0; k < nv; k++) { - double Tc = 2 * y.swE_ptr[k] / y.sw_ptr[k]; + double Tc = 2 * y.swE[k] / y.sw[k]; if (beta * Tc > threshold) { critical.push_back(make_pair(Tc, k)); } @@ -793,27 +675,26 @@ bool DAClusterizerInZ_vect::split(const double beta, track_t& tks, vertex_t& y, double p1 = 0, z1 = 0, w1 = 0; double p2 = 0, z2 = 0, w2 = 0; for (unsigned int i = 0; i < nt; i++) { - if (tks.Z_sum_ptr[i] > 1.e-100) { + if (tks.sum_Z[i] > 1.e-100) { // winner-takes-all, usually overestimates splitting - double tl = tks.z_ptr[i] < y.z_ptr[k] ? 1. : 0.; + double tl = tks.zpca[i] < y.zvtx[k] ? 1. : 0.; double tr = 1. - tl; // soften it, especially at low T - double arg = (tks.z_ptr[i] - y.z_ptr[k]) * sqrt(beta * tks.dz2_ptr[i]); + double arg = (tks.zpca[i] - y.zvtx[k]) * sqrt(beta * tks.dz2[i]); if (std::fabs(arg) < 20) { double t = local_exp(-arg); tl = t / (t + 1.); tr = 1 / (t + 1.); } - double p = y.pk_ptr[k] * tks.pi_ptr[i] * local_exp(-beta * Eik(tks.z_ptr[i], y.z_ptr[k], tks.dz2_ptr[i])) / - tks.Z_sum_ptr[i]; - double w = p * tks.dz2_ptr[i]; + double p = y.rho[k] * tks.tkwt[i] * local_exp(-beta * Eik(tks.zpca[i], y.zvtx[k], tks.dz2[i])) / tks.sum_Z[i]; + double w = p * tks.dz2[i]; p1 += p * tl; - z1 += w * tl * tks.z_ptr[i]; + z1 += w * tl * tks.zpca[i]; w1 += w * tl; p2 += p * tr; - z2 += w * tr * tks.z_ptr[i]; + z2 += w * tr * tks.zpca[i]; w2 += w * tr; } } @@ -821,28 +702,28 @@ bool DAClusterizerInZ_vect::split(const double beta, track_t& tks, vertex_t& y, if (w1 > 0) { z1 = z1 / w1; } else { - z1 = y.z_ptr[k] - epsilon; + z1 = y.zvtx[k] - epsilon; } if (w2 > 0) { z2 = z2 / w2; } else { - z2 = y.z_ptr[k] + epsilon; + z2 = y.zvtx[k] + epsilon; } // reduce split size if there is not enough room - if ((k > 0) && (z1 < (0.6 * y.z_ptr[k] + 0.4 * y.z_ptr[k - 1]))) { - z1 = 0.6 * y.z_ptr[k] + 0.4 * y.z_ptr[k - 1]; + if ((k > 0) && (z1 < (0.6 * y.zvtx[k] + 0.4 * y.zvtx[k - 1]))) { + z1 = 0.6 * y.zvtx[k] + 0.4 * y.zvtx[k - 1]; } - if ((k + 1 < nv) && (z2 > (0.6 * y.z_ptr[k] + 0.4 * y.z_ptr[k + 1]))) { - z2 = 0.6 * y.z_ptr[k] + 0.4 * y.z_ptr[k + 1]; + if ((k + 1 < nv) && (z2 > (0.6 * y.zvtx[k] + 0.4 * y.zvtx[k + 1]))) { + z2 = 0.6 * y.zvtx[k] + 0.4 * y.zvtx[k + 1]; } #ifdef DEBUG assert(k < nv); if (DEBUGLEVEL > 1) { - if (std::fabs(y.z_ptr[k] - zdumpcenter_) < zdumpwidth_) { + if (std::fabs(y.zvtx[k] - zdumpcenter_) < zdumpwidth_) { std::cout << " T= " << std::setw(8) << 1. / beta << " Tc= " << critical[ic].first << " splitting " - << std::fixed << std::setprecision(4) << y.z_ptr[k] << " --> " << z1 << "," << z2 << " [" << p1 + << std::fixed << std::setprecision(4) << y.zvtx[k] << " --> " << z1 << "," << z2 << " [" << p1 << "," << p2 << "]"; if (std::fabs(z2 - z1) > epsilon) { std::cout << std::endl; @@ -856,10 +737,10 @@ bool DAClusterizerInZ_vect::split(const double beta, track_t& tks, vertex_t& y, // split if the new subclusters are significantly separated if ((z2 - z1) > epsilon) { split = true; - double pk1 = p1 * y.pk_ptr[k] / (p1 + p2); - double pk2 = p2 * y.pk_ptr[k] / (p1 + p2); - y.z_ptr[k] = z2; - y.pk_ptr[k] = pk2; + double pk1 = p1 * y.rho[k] / (p1 + p2); + double pk2 = p2 * y.rho[k] / (p1 + p2); + y.zvtx[k] = z2; + y.rho[k] = pk2; y.insertItem(k, z1, pk1, tks); if (k == 0) y.extractRaw(); @@ -872,14 +753,17 @@ bool DAClusterizerInZ_vect::split(const double beta, track_t& tks, vertex_t& y, critical[jc].second++; } } + } else { +#ifdef DEBUG + std::cout << "warning ! split rejected, too small." << endl; +#endif } } return split; } -vector DAClusterizerInZ_vect::vertices(const vector& tracks, - const int verbosity) const { +vector DAClusterizerInZ_vect::vertices(const vector& tracks) const { track_t&& tks = fill(tracks); tks.extractRaw(); @@ -910,14 +794,13 @@ vector DAClusterizerInZ_vect::vertices(const vector DAClusterizerInZ_vect::vertices(const vector DAClusterizerInZ_vect::vertices(const vector 0) { - rho0 = 1. / nt; //1. / y.getSize();?? + rho0 = 1. / nt; for (unsigned int a = 0; a < 5; a++) { update(beta, tks, y, a * rho0 / 5.); // adiabatic turn-on } } thermalize(beta, tks, y, delta_lowT_, rho0); + update(beta, tks, y, rho0, true); #ifdef DEBUG verify(y, tks); @@ -983,7 +866,7 @@ vector DAClusterizerInZ_vect::vertices(const vector DAClusterizerInZ_vect::vertices(const vector DAClusterizerInZ_vect::vertices(const vector DAClusterizerInZ_vect::vertices(const vector > vtx_track_indices(nv); + for (unsigned int i = 0; i < nt; i++) { + const auto kmin = tks.kmin[i]; + const auto kmax = tks.kmax[i]; + for (auto k = kmin; k < kmax; k++) { + y.exp_arg[k] = -beta * Eik(tks.zpca[i], y.zvtx[k], tks.dz2[i]); + } - // improve vectorization (does not require reduction ....) - for (unsigned int k = 0; k < nv; k++) { - for (unsigned int i = 0; i < nt; i++) - tks.Z_sum_ptr[i] += y.pk_ptr[k] * local_exp(-beta * Eik(tks.z_ptr[i], y.z_ptr[k], tks.dz2_ptr[i])); - } + local_exp_list_range(y.exp_arg, y.exp, kmin, kmax); - for (unsigned int k = 0; k < nv; k++) { - GlobalPoint pos(0, 0, y.z_ptr[k]); + tks.sum_Z[i] = z_sum_init; + for (auto k = kmin; k < kmax; k++) { + tks.sum_Z[i] += y.rho[k] * y.exp[k]; + } + const double invZ = tks.sum_Z[i] > 1e-100 ? 1. / tks.sum_Z[i] : 0.0; + + for (auto k = kmin; k < kmax; k++) { + double p = y.rho[k] * y.exp[k] * invZ; + if (p > mintrkweight_) { + // assign track i -> vertex k (hard, mintrkweight_ should be >= 0.5 here + vtx_track_indices[k].push_back(i); + break; + } + } - vector vertexTracks; - for (unsigned int i = 0; i < nt; i++) { - if (tks.Z_sum_ptr[i] > 1e-100) { - double p = y.pk_ptr[k] * local_exp(-beta * Eik(tks.z_ptr[i], y.z_ptr[k], tks.dz2_ptr[i])) / tks.Z_sum_ptr[i]; - if ((tks.pi_ptr[i] > 0) && (p > mintrkweight_)) { - vertexTracks.push_back(*(tks.tt[i])); - tks.Z_sum_ptr[i] = 0; // setting Z=0 excludes double assignment - } + } // track loop + + GlobalError dummyError(0.01, 0, 0.01, 0., 0., 0.01); + for (unsigned int k = 0; k < nv; k++) { + if (!vtx_track_indices[k].empty()) { + GlobalPoint pos(0, 0, y.zvtx[k]); + vector vertexTracks; + for (auto i : vtx_track_indices[k]) { + vertexTracks.push_back(*(tks.tt[i])); } + TransientVertex v(pos, dummyError, vertexTracks, 0); + clusters.push_back(v); } - TransientVertex v(pos, dummyError, vertexTracks, 0); - clusters.push_back(v); } return clusters; @@ -1133,12 +1029,12 @@ void DAClusterizerInZ_vect::dump(const double beta, const vertex_t& y, const tra for (unsigned int j = 0; j < nt; j++) { iz.push_back(j); } - std::sort(iz.begin(), iz.end(), [tks](unsigned int a, unsigned int b) { return tks.z_ptr[a] < tks.z_ptr[b]; }); + std::sort(iz.begin(), iz.end(), [tks](unsigned int a, unsigned int b) { return tks.zpca[a] < tks.zpca[b]; }); std::cout << std::endl; std::cout << "-----DAClusterizerInZ::dump ----" << nv << " clusters " << std::endl; std::cout << " "; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) < zdumpwidth_) { + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) < zdumpwidth_) { std::cout << " " << setw(3) << ivertex << " "; } } @@ -1146,16 +1042,16 @@ void DAClusterizerInZ_vect::dump(const double beta, const vertex_t& y, const tra std::cout << " z= "; std::cout << setprecision(4); for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) < zdumpwidth_) { - std::cout << setw(8) << fixed << y.z_ptr[ivertex]; + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) < zdumpwidth_) { + std::cout << setw(8) << fixed << y.zvtx[ivertex]; } } std::cout << endl << "T=" << setw(15) << 1. / beta << " Tmin =" << setw(10) << 1. / betamax_ << " Tc= "; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) < zdumpwidth_) { - double Tc = 2 * y.swE_ptr[ivertex] / y.sw_ptr[ivertex]; + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) < zdumpwidth_) { + double Tc = 2 * y.swE[ivertex] / y.sw[ivertex]; std::cout << setw(8) << fixed << setprecision(1) << Tc; } } @@ -1164,18 +1060,18 @@ void DAClusterizerInZ_vect::dump(const double beta, const vertex_t& y, const tra std::cout << " pk= "; double sumpk = 0; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - sumpk += y.pk_ptr[ivertex]; - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) > zdumpwidth_) + sumpk += y.rho[ivertex]; + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) > zdumpwidth_) continue; - std::cout << setw(8) << setprecision(4) << fixed << y.pk_ptr[ivertex]; + std::cout << setw(8) << setprecision(4) << fixed << y.rho[ivertex]; } std::cout << endl; std::cout << " nt= "; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) > zdumpwidth_) + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) > zdumpwidth_) continue; - std::cout << setw(8) << setprecision(1) << fixed << y.pk_ptr[ivertex] * nt; + std::cout << setw(8) << setprecision(1) << fixed << y.rho[ivertex] * nt; } std::cout << endl; @@ -1186,15 +1082,15 @@ void DAClusterizerInZ_vect::dump(const double beta, const vertex_t& y, const tra std::cout << setprecision(4); for (unsigned int i0 = 0; i0 < nt; i0++) { unsigned int i = iz[i0]; - if (tks.Z_sum_ptr[i] > 0) { - F -= std::log(tks.Z_sum_ptr[i]) / beta; + if (tks.sum_Z[i] > 0) { + F -= std::log(tks.sum_Z[i]) / beta; } - double tz = tks.z_ptr[i]; + double tz = tks.zpca[i]; if (std::fabs(tz - zdumpcenter_) > zdumpwidth_) continue; std::cout << setw(4) << i << ")" << setw(8) << fixed << setprecision(4) << tz << " +/-" << setw(6) - << sqrt(1. / tks.dz2_ptr[i]); + << sqrt(1. / tks.dz2[i]); if ((tks.tt[i] == nullptr)) { std::cout << " effective track "; } else { @@ -1230,19 +1126,18 @@ void DAClusterizerInZ_vect::dump(const double beta, const vertex_t& y, const tra double sump = 0.; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) > zdumpwidth_) + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) > zdumpwidth_) continue; - if ((tks.pi_ptr[i] > 0) && (tks.Z_sum_ptr[i] > 0)) { + if ((tks.tkwt[i] > 0) && (tks.sum_Z[i] > 0)) { //double p=pik(beta,tks[i],*k); - double p = y.pk_ptr[ivertex] * local_exp(-beta * Eik(tks.z_ptr[i], y.z_ptr[ivertex], tks.dz2_ptr[i])) / - tks.Z_sum_ptr[i]; + double p = y.rho[ivertex] * local_exp(-beta * Eik(tks.zpca[i], y.zvtx[ivertex], tks.dz2[i])) / tks.sum_Z[i]; if (p > 0.0001) { std::cout << setw(8) << setprecision(3) << p; } else { std::cout << " . "; } - E += p * Eik(tks.z_ptr[i], y.z_ptr[ivertex], tks.dz2_ptr[i]); + E += p * Eik(tks.zpca[i], y.zvtx[ivertex], tks.dz2[i]); sump += p; } else { std::cout << " "; @@ -1253,7 +1148,7 @@ void DAClusterizerInZ_vect::dump(const double beta, const vertex_t& y, const tra } std::cout << " "; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) < zdumpwidth_) { + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) < zdumpwidth_) { std::cout << " " << setw(3) << ivertex << " "; } } @@ -1261,8 +1156,8 @@ void DAClusterizerInZ_vect::dump(const double beta, const vertex_t& y, const tra std::cout << " z= "; std::cout << setprecision(4); for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { - if (std::fabs(y.z_ptr[ivertex] - zdumpcenter_) < zdumpwidth_) { - std::cout << setw(8) << fixed << y.z_ptr[ivertex]; + if (std::fabs(y.zvtx[ivertex] - zdumpcenter_) < zdumpwidth_) { + std::cout << setw(8) << fixed << y.zvtx[ivertex]; } } std::cout << endl; @@ -1272,3 +1167,22 @@ void DAClusterizerInZ_vect::dump(const double beta, const vertex_t& y, const tra } #endif } + +void DAClusterizerInZ_vect::fillPSetDescription(edm::ParameterSetDescription& desc) { + desc.addUntracked("zdumpcenter", 0.); + desc.addUntracked("zdumpwidth", 20.); + desc.add("d0CutOff", 3.0); + desc.add("Tmin", 2.0); + desc.add("delta_lowT", 0.001); + desc.add("zmerge", 0.01); + desc.add("dzCutOff", 3.0); + desc.add("Tpurge", 2.0); + desc.add("convergence_mode", 0); + desc.add("delta_highT", 0.01); + desc.add("Tstop", 0.5); + desc.add("coolingFactor", 0.6); + desc.add("vertexSize", 0.006); + desc.add("uniquetrkweight", 0.8); + desc.add("uniquetrkminp", 0.0); + desc.add("zrange", 4.0); +} diff --git a/RecoVertex/PrimaryVertexProducer/src/GapClusterizerInZ.cc b/RecoVertex/PrimaryVertexProducer/src/GapClusterizerInZ.cc index 0e5bd3d4c4e97..9a3d6c0b33ed9 100644 --- a/RecoVertex/PrimaryVertexProducer/src/GapClusterizerInZ.cc +++ b/RecoVertex/PrimaryVertexProducer/src/GapClusterizerInZ.cc @@ -60,3 +60,8 @@ vector > GapClusterizerInZ::clusterize(const vector return clusters; } + +void GapClusterizerInZ::fillPSetDescription(edm::ParameterSetDescription& desc) { + desc.add("zSeparation", 1.0); + desc.addUntracked("verbose", false); +} diff --git a/RecoVertex/PrimaryVertexProducer/src/TrackFilterForPVFinding.cc b/RecoVertex/PrimaryVertexProducer/src/TrackFilterForPVFinding.cc index f091e9ead13be..d8b8f7154533c 100644 --- a/RecoVertex/PrimaryVertexProducer/src/TrackFilterForPVFinding.cc +++ b/RecoVertex/PrimaryVertexProducer/src/TrackFilterForPVFinding.cc @@ -47,3 +47,16 @@ std::vector TrackFilterForPVFinding::select( } return seltks; } + +void TrackFilterForPVFinding::fillPSetDescription(edm::ParameterSetDescription& desc) { + desc.add("maxNormalizedChi2", 10.0); + desc.add("minPt", 0.0); + desc.add("algorithm", "filter"); + desc.add("maxEta", 2.4); + desc.add("maxD0Significance", 4.0); + desc.add("maxD0Error", 1.0); + desc.add("maxDzError", 1.0); + desc.add("trackQuality", "any"); + desc.add("minPixelLayersWithHits", 2); + desc.add("minSiliconLayersWithHits", 5); +} diff --git a/SLHCUpgradeSimulations/Geometry/test/BuildFile.xml b/SLHCUpgradeSimulations/Geometry/test/BuildFile.xml index 78e14e010b003..5c259382e5acf 100644 --- a/SLHCUpgradeSimulations/Geometry/test/BuildFile.xml +++ b/SLHCUpgradeSimulations/Geometry/test/BuildFile.xml @@ -31,6 +31,13 @@ + + + + + + + diff --git a/SLHCUpgradeSimulations/Geometry/test/Phase2PixelNtuple.cc b/SLHCUpgradeSimulations/Geometry/test/Phase2PixelNtuple.cc index 61cb4018b7218..1daf3e791ba3f 100644 --- a/SLHCUpgradeSimulations/Geometry/test/Phase2PixelNtuple.cc +++ b/SLHCUpgradeSimulations/Geometry/test/Phase2PixelNtuple.cc @@ -1,6 +1,6 @@ /* - \class Phase2PixelNtuple -*/ + class Phase2PixelNtuple + */ // DataFormats #include "DataFormats/Common/interface/DetSetVector.h" @@ -15,6 +15,22 @@ #include "DataFormats/TrackReco/interface/Track.h" +#include "TrackingTools/Records/interface/TransientTrackRecord.h" +#include "TrackingTools/Records/interface/TransientRecHitRecord.h" + +#include "TrackingTools/TransientTrack/interface/TransientTrack.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" +#include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHitBuilder.h" +#include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h" +#include "TrackingTools/TrackFitters/interface/TrajectoryStateCombiner.h" +#include "RecoTracker/TransientTrackingRecHit/interface/TkTransientTrackingRecHitBuilder.h" + +#include "TrackingTools/TrackAssociator/interface/TrackDetectorAssociator.h" +#include "TrackingTools/PatternTools/interface/Trajectory.h" +#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" +#include "TrackingTools/TransientTrack/interface/TransientTrack.h" +#include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" + #include "SimDataFormats/TrackingHit/interface/PSimHit.h" #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" #include "SimTracker/TrackerHitAssociation/interface/TrackerHitAssociator.h" @@ -96,10 +112,13 @@ class Phase2PixelNtuple : public edm::one::EDAnalyzer<> { const int blade_num, const int panel_num, const int side_num, - trackingRecHit_iterator pixeliter, + const TrackingRecHit* transRecHit, + const SiPixelRecHit* pixHit, const int num_simhit, const PSimHit* closest_simhit, - const GeomDet* PixGeom); + const GeomDet* PixGeom, + const TrajectoryStateOnSurface tsos); + std::pair computeAnglesFromDetPosition(const SiPixelCluster& cl, const PixelTopology& top, const GeomDetUnit& det) const; @@ -107,12 +126,18 @@ class Phase2PixelNtuple : public edm::one::EDAnalyzer<> { private: edm::ParameterSet const conf_; TrackerHitAssociator::Config trackerHitAssociatorConfig_; - edm::EDGetTokenT> pixelRecHits_token; - edm::EDGetTokenT> token_recoTracks; + edm::EDGetTokenT> pixelRecHits_token_; + std::string ttrhBuilder_; + edm::EDGetTokenT> recoTracks_token_; + edm::EDGetTokenT tta_token_; + bool verbose_; bool picky_; static const int DGPERCLMAX = 100; + float trkPt_, trkEta_, trkTheta_, trkPhi_; + int trkIsHighPurity_; + //--- Structures for ntupling: struct evt { int run; @@ -130,6 +155,10 @@ class Phase2PixelNtuple : public edm::one::EDAnalyzer<> { float xx; float xy; float yy; + + float probQ; + float probXY; + float row; float col; float gx; @@ -154,6 +183,8 @@ class Phase2PixelNtuple : public edm::one::EDAnalyzer<> { // local angles from det position float cotAlphaFromDet, cotBetaFromDet; + // local angles from track trajectory + float cotAlphaFromTrack, cotBetaFromTrack; // digis int fDgN; @@ -171,8 +202,10 @@ class Phase2PixelNtuple : public edm::one::EDAnalyzer<> { Phase2PixelNtuple::Phase2PixelNtuple(edm::ParameterSet const& conf) : trackerHitAssociatorConfig_(conf, consumesCollector()), - pixelRecHits_token(consumes>(edm::InputTag("siPixelRecHits"))), - token_recoTracks(consumes>(conf.getParameter("trackProducer"))), + pixelRecHits_token_(consumes>(edm::InputTag("siPixelRecHits"))), + ttrhBuilder_(conf.getParameter("ttrhBuilder")), //ttrhBuilder_token def + recoTracks_token_(consumes>(conf.getParameter("trackProducer"))), + tta_token_(consumes(conf.getParameter("trajectoryInput"))), verbose_(conf.getUntrackedParameter("verbose", false)), picky_(conf.getUntrackedParameter("picky", false)), pixeltree_(0), @@ -229,7 +262,7 @@ void Phase2PixelNtuple::beginJob() { pixeltree_->Branch("pitchy", &recHit_.pitchy, "pitchy/F"); pixeltree_->Branch("thickness", &recHit_.thickness, "thickness/F"); pixeltree_->Branch("cotAlphaFromDet", &recHit_.cotAlphaFromDet, "cotAlphaFromDet/F"); - pixeltree_->Branch("cotBetaFromDet", &recHit_.cotBetaFromDet, "cotBetaFraomDet/F"); + pixeltree_->Branch("cotBetaFromDet", &recHit_.cotBetaFromDet, "cotBetaFromDet/F"); pixeltree_->Branch("DgN", &recHit_.fDgN, "DgN/I"); pixeltree_->Branch("DgRow", recHit_.fDgRow, "DgRow[DgN]/I"); @@ -248,6 +281,9 @@ void Phase2PixelNtuple::beginJob() { pixeltreeOnTrack_->Branch("xx", &recHit_.xx, "xx/F"); pixeltreeOnTrack_->Branch("xy", &recHit_.xy, "xy/F"); pixeltreeOnTrack_->Branch("yy", &recHit_.yy, "yy/F"); + pixeltreeOnTrack_->Branch("probQ", &recHit_.probQ); + pixeltreeOnTrack_->Branch("probXY", &recHit_.probXY); + pixeltreeOnTrack_->Branch("row", &recHit_.row, "row/F"); pixeltreeOnTrack_->Branch("col", &recHit_.col, "col/F"); pixeltreeOnTrack_->Branch("gx", &recHit_.gx, "gx/F"); @@ -280,7 +316,15 @@ void Phase2PixelNtuple::beginJob() { pixeltreeOnTrack_->Branch("pitchy", &recHit_.pitchy, "pitchy/F"); pixeltreeOnTrack_->Branch("thickness", &recHit_.thickness, "thickness/F"); pixeltreeOnTrack_->Branch("cotAlphaFromDet", &recHit_.cotAlphaFromDet, "cotAlphaFromDet/F"); - pixeltreeOnTrack_->Branch("cotBetaFromDet", &recHit_.cotBetaFromDet, "cotBetaFraomDet/F"); + pixeltreeOnTrack_->Branch("cotBetaFromDet", &recHit_.cotBetaFromDet, "cotBetaFromDet/F"); + + pixeltreeOnTrack_->Branch("trkPt", &trkPt_); + pixeltreeOnTrack_->Branch("trkEta", &trkEta_); + pixeltreeOnTrack_->Branch("trkTheta", &trkTheta_); + pixeltreeOnTrack_->Branch("trkPhi", &trkPhi_); + pixeltreeOnTrack_->Branch("trkIsHighPurity", &trkIsHighPurity_); + pixeltreeOnTrack_->Branch("cotAlphaFromTrack", &recHit_.cotAlphaFromTrack, "cotAlphaFromTrack/F"); + pixeltreeOnTrack_->Branch("cotBetaFromTrack", &recHit_.cotBetaFromTrack, "cotBetaFromTrack/F"); pixeltreeOnTrack_->Branch("DgN", &recHit_.fDgN, "DgN/I"); pixeltreeOnTrack_->Branch("DgRow", recHit_.fDgRow, "DgRow[DgN]/I"); @@ -307,10 +351,22 @@ void Phase2PixelNtuple::analyze(const edm::Event& e, const edm::EventSetup& es) const PSimHit* closest_simhit = nullptr; edm::Handle recHitColl; - e.getByToken(pixelRecHits_token, recHitColl); + e.getByToken(pixelRecHits_token_, recHitColl); + // for finding matched simhit TrackerHitAssociator associate(e, trackerHitAssociatorConfig_); + //Transient Rechit Builders + edm::ESHandle theB; + es.get().get("TransientTrackBuilder", theB); + + //ttrh builder def + ESHandle hitBuilder; + es.get().get(ttrhBuilder_, hitBuilder); + const TkTransientTrackingRecHitBuilder* builder = + static_cast(hitBuilder.product()); + auto hitCloner = builder->cloner(); + if ((recHitColl.product())->dataSize() > 0) { std::string detname; @@ -378,6 +434,7 @@ void Phase2PixelNtuple::analyze(const edm::Event& e, const edm::EventSetup& es) } int num_simhit = matched.size(); recHit_.init(); + // filling in on ALL track rechits fillPRecHit(detid_db, subid, layer_num, @@ -399,110 +456,143 @@ void Phase2PixelNtuple::analyze(const edm::Event& e, const edm::EventSetup& es) // Now loop over recotracks edm::Handle> trackCollection; - e.getByToken(token_recoTracks, trackCollection); + e.getByToken(recoTracks_token_, trackCollection); + + // -- Track trajectory association map + edm::Handle hTTAC; + e.getByToken(tta_token_, hTTAC); + TrajectoryStateCombiner tsoscomb; if (!trackCollection.isValid()) { if (picky_) { throw cms::Exception("ProductNotValid") << "TrackCollection product not valid"; } else { + std::cout << "TrackCollection product not valid" << endl; ; } + + } else if (!hTTAC.isValid()) { + if (picky_) { + throw cms::Exception("ProductNotValid") << "TrajectoryAssociationCollection product not valid"; + } else { + std::cout << "TrajectoryAssociationCollection product not valid" << endl; + } + } else { int rT = 0; - for (View::size_type i = 0; i < trackCollection->size(); ++i) { + const TrajTrackAssociationCollection ttac = *(hTTAC.product()); + for (TrajTrackAssociationCollection::const_iterator it = ttac.begin(); it != ttac.end(); ++it) { ++rT; - RefToBase track(trackCollection, i); + const edm::Ref> refTraj = it->key; + auto track = it->val; + trkIsHighPurity_ = track->quality(reco::TrackBase::highPurity); + trkPt_ = track->pt(); + trkEta_ = track->eta(); + trkTheta_ = track->theta(); + trkPhi_ = track->phi(); + int iT = 0; #ifdef EDM_ML_DEBUG std::cout << " num of hits for track " << rT << " = " << track->recHitsSize() << std::endl; #endif - for (trackingRecHit_iterator ih = track->recHitsBegin(); ih != track->recHitsEnd(); ++ih) { + + std::vector tmeasColl = refTraj->measurements(); + for (auto const& tmeasIt : tmeasColl) { + if (!tmeasIt.updatedState().isValid()) + continue; + if (!tmeasIt.recHit()->isValid()) + continue; + + const TrackingRecHit* hit = tmeasIt.recHit()->hit(); + const SiPixelRecHit* pixhit = dynamic_cast(hit); + if (pixhit == nullptr) + continue; + if (!pixhit->isValid()) + continue; ++iT; - TrackingRecHit* hit = (*ih)->clone(); + TrajectoryStateOnSurface tsos = tsoscomb(tmeasIt.forwardPredictedState(), tmeasIt.backwardPredictedState()); const DetId& detId = hit->geographicalId(); const GeomDet* geomDet(theGeometry->idToDet(detId)); - const SiPixelRecHit* pixhit = dynamic_cast(hit); - if (pixhit) { - if (pixhit->isValid()) { - // get matched simhit - matched.clear(); - matched = associate.associateHit(*pixhit); - - if (!matched.empty()) { - float closest = 9999.9; - LocalPoint lp = pixhit->localPosition(); - float rechit_x = lp.x(); - float rechit_y = lp.y(); - - //loop over simhits and find closest - //for (std::vector::const_iterator m = matched.begin(); mpxbLayer(detId.rawId()); - ladder_num = tTopo->pxbLadder(detId.rawId()); - module_num = tTopo->pxbModule(detId.rawId()); + // get matched simhit + matched.clear(); + matched = associate.associateHit(*pixhit); + + if (!matched.empty()) { + float closest = 9999.9; + LocalPoint lp = pixhit->localPosition(); + float rechit_x = lp.x(); + float rechit_y = lp.y(); + + //loop over simhits and find closest + //for (std::vector::const_iterator m = matched.begin(); mpxbLayer(detId.rawId()); + ladder_num = tTopo->pxbLadder(detId.rawId()); + module_num = tTopo->pxbModule(detId.rawId()); #ifdef EDM_ML_DEBUG - std::cout << "\ndetId = " << subid << " : " << tTopo->pxbLayer(detId.rawId()) << " , " - << tTopo->pxbLadder(detId.rawId()) << " , " << tTopo->pxbModule(detId.rawId()) << std::endl; + std::cout << "\ndetId = " << subid << " : " << tTopo->pxbLayer(detId.rawId()) << " , " + << tTopo->pxbLadder(detId.rawId()) << " , " << tTopo->pxbModule(detId.rawId()) << std::endl; #endif - } else if (subid == PixelSubdetector::PixelEndcap) { - module_num = tTopo->pxfModule(detId()); - disk_num = tTopo->pxfDisk(detId()); - blade_num = tTopo->pxfBlade(detId()); - panel_num = tTopo->pxfPanel(detId()); - side_num = tTopo->pxfSide(detId()); - } + } else if (subid == PixelSubdetector::PixelEndcap) { + module_num = tTopo->pxfModule(detId()); + disk_num = tTopo->pxfDisk(detId()); + blade_num = tTopo->pxfBlade(detId()); + panel_num = tTopo->pxfPanel(detId()); + side_num = tTopo->pxfSide(detId()); + } - recHit_.init(); - fillPRecHit(detid_db, - subid, - layer_num, - ladder_num, - module_num, - disk_num, - blade_num, - panel_num, - side_num, - ih, - num_simhit, - closest_simhit, - geomDet); - pixeltreeOnTrack_->Fill(); - } // if ( (subid==1)||(subid==2) ) - } // if SiPixelHit is valid - } // if cast is possible to SiPixelHit - delete pixhit; - } //end of loop on tracking rechits - } // end of loop on recotracks - } // else track collection is valid + recHit_.init(); + // fill on track rechits + fillPRecHit(detid_db, + subid, + layer_num, + ladder_num, + module_num, + disk_num, + blade_num, + panel_num, + side_num, + hit, // TransientTrackingRecHit * + pixhit, // SiPixelRecHit * + num_simhit, + closest_simhit, + geomDet, + tsos); + pixeltreeOnTrack_->Fill(); + } // if ( (subid==1)||(subid==2) ) + } // if cast is possible to SiPixelHit + } //end of loop on tracking rechits + } // end of loop on recotracks + } // else track collection is valid } // end analyze function // Function for filling in all the rechits @@ -528,7 +618,7 @@ void Phase2PixelNtuple::fillPRecHit(const int detid_db, recHit_.xx = le.xx(); recHit_.xy = le.xy(); recHit_.yy = le.yy(); - GlobalPoint GP = PixGeom->surface().toGlobal(pixeliter->localPosition()); + GlobalPoint GP = PixGeom->surface().toGlobal(lp); recHit_.gx = GP.x(); recHit_.gy = GP.y(); recHit_.gz = GP.z(); @@ -647,20 +737,26 @@ void Phase2PixelNtuple::fillPRecHit(const int detid_db, const int blade_num, const int panel_num, const int side_num, - trackingRecHit_iterator ih, + const TrackingRecHit* recHit, + const SiPixelRecHit* pixHit, const int num_simhit, const PSimHit* closest_simhit, - const GeomDet* PixGeom) { - TrackingRecHit* pixeliter = (*ih)->clone(); - LocalPoint lp = pixeliter->localPosition(); - LocalError le = pixeliter->localPositionError(); + const GeomDet* PixGeom, + const TrajectoryStateOnSurface tsos) { + LocalPoint lp = recHit->localPosition(); + LocalError le = recHit->localPositionError(); recHit_.x = lp.x(); recHit_.y = lp.y(); recHit_.xx = le.xx(); recHit_.xy = le.xy(); recHit_.yy = le.yy(); - GlobalPoint GP = PixGeom->surface().toGlobal(pixeliter->localPosition()); + + recHit_.probQ = pixHit->probabilityQ(); + recHit_.probXY = pixHit->probabilityXY(); + //std::cout << "printing pixHit_.xxloc " << recHit_.xxloc << std::endl; + + GlobalPoint GP = PixGeom->surface().toGlobal(recHit->localPosition()); recHit_.gx = GP.x(); recHit_.gy = GP.y(); recHit_.gz = GP.z(); @@ -669,7 +765,7 @@ void Phase2PixelNtuple::fillPRecHit(const int detid_db, recHit_.phi = GP0.phi(); recHit_.subid = subid; - SiPixelRecHit::ClusterRef const& Cluster = dynamic_cast(pixeliter)->cluster(); + SiPixelRecHit::ClusterRef const& Cluster = pixHit->cluster(); recHit_.q = Cluster->charge(); recHit_.spreadx = Cluster->sizeX(); recHit_.spready = Cluster->sizeY(); @@ -700,6 +796,10 @@ void Phase2PixelNtuple::fillPRecHit(const int detid_db, recHit_.cotAlphaFromDet = local_angles.first; recHit_.cotBetaFromDet = local_angles.second; + // compute local angles from track trajectory + recHit_.cotAlphaFromTrack = tsos.localParameters().dxdz(); + recHit_.cotBetaFromTrack = tsos.localParameters().dydz(); + // -- Get digis of this cluster const std::vector& pixvector = Cluster->pixels(); #ifdef EDM_ML_DEBUG @@ -754,8 +854,6 @@ void Phase2PixelNtuple::fillPRecHit(const int detid_db, std::cout << "num_simhit x, y = " << 0.5 * (sim_x1 + sim_x2) << " " << 0.5 * (sim_y1 + sim_y2) << std::endl; #endif } - - delete pixeliter; } void Phase2PixelNtuple::fillEvt(const edm::Event& E) { @@ -780,6 +878,7 @@ void Phase2PixelNtuple::RecHit::init() { xx = dummy_float; xy = dummy_float; yy = dummy_float; + row = dummy_float; col = dummy_float; gx = dummy_float; @@ -813,7 +912,6 @@ void Phase2PixelNtuple::RecHit::init() { } fDgN = 0; } - std::pair Phase2PixelNtuple::computeAnglesFromDetPosition(const SiPixelCluster& cl, const PixelTopology& theTopol, const GeomDetUnit& theDet) const { @@ -826,56 +924,16 @@ std::pair Phase2PixelNtuple::computeAnglesFromDetPosition(const Si // ggiurgiu@jhu.edu 12/09/2010 : This function is called without track info, therefore there are no track // angles to provide here. Call the default localPosition (without track info) LocalPoint lp = theTopol.localPosition(MeasurementPoint(xcenter, ycenter)); + const Local3DPoint origin = theDet.surface().toLocal(GlobalPoint(0, 0, 0)); // can be computed once... - // get the cluster position in global coordinates (cm) - GlobalPoint gp = theDet.surface().toGlobal(lp); - float gp_mod = sqrt(gp.x() * gp.x() + gp.y() * gp.y() + gp.z() * gp.z()); - - // normalize - float gpx = gp.x() / gp_mod; - float gpy = gp.y() / gp_mod; - float gpz = gp.z() / gp_mod; - - // make a global vector out of the global point; this vector will point from the - // origin of the detector to the cluster - GlobalVector gv(gpx, gpy, gpz); - - // make local unit vector along local X axis - const Local3DVector lvx(1.0, 0.0, 0.0); - - // get the unit X vector in global coordinates/ - GlobalVector gvx = theDet.surface().toGlobal(lvx); - - // make local unit vector along local Y axis - const Local3DVector lvy(0.0, 1.0, 0.0); - - // get the unit Y vector in global coordinates - GlobalVector gvy = theDet.surface().toGlobal(lvy); - - // make local unit vector along local Z axis - const Local3DVector lvz(0.0, 0.0, 1.0); - - // get the unit Z vector in global coordinates - GlobalVector gvz = theDet.surface().toGlobal(lvz); - - // calculate the components of gv (the unit vector pointing to the cluster) - // in the local coordinate system given by the basis {gvx, gvy, gvz} - // note that both gv and the basis {gvx, gvy, gvz} are given in global coordinates - float gv_dot_gvx = gv.x() * gvx.x() + gv.y() * gvx.y() + gv.z() * gvx.z(); - float gv_dot_gvy = gv.x() * gvy.x() + gv.y() * gvy.y() + gv.z() * gvy.z(); - float gv_dot_gvz = gv.x() * gvz.x() + gv.y() * gvz.y() + gv.z() * gvz.z(); - - /* all the above is equivalent to - const Local3DPoint origin = theDet->surface().toLocal(GlobalPoint(0,0,0)); // can be computed once... - auto gvx = lp.x()-origin.x(); - auto gvy = lp.y()-origin.y(); - auto gvz = -origin.z(); - * normalization not required as only ratio used... - */ + auto gvx = lp.x() - origin.x(); + auto gvy = lp.y() - origin.y(); + auto gvz = -1.f / origin.z(); + // normalization not required as only ratio used... // calculate angles - float cotalpha_ = gv_dot_gvx / gv_dot_gvz; - float cotbeta_ = gv_dot_gvy / gv_dot_gvz; + float cotalpha_ = gvx * gvz; + float cotbeta_ = gvy * gvz; return std::make_pair(cotalpha_, cotbeta_); } diff --git a/SLHCUpgradeSimulations/Geometry/test/phase2_digi_reco_pixelntuple_cfg.py b/SLHCUpgradeSimulations/Geometry/test/phase2_digi_reco_pixelntuple_cfg.py index 713d424998b18..a6a8ae4a82d43 100644 --- a/SLHCUpgradeSimulations/Geometry/test/phase2_digi_reco_pixelntuple_cfg.py +++ b/SLHCUpgradeSimulations/Geometry/test/phase2_digi_reco_pixelntuple_cfg.py @@ -1,13 +1,8 @@ -# Auto generated configuration file -# using: -# Revision: 1.19 -# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v -# with command line options: step2 --conditions auto:phase2_realistic -s DIGI:pdigi_valid,L1,L1TrackTrigger,DIGI2RAW,HLT:@fake2,RAW2DIGI,L1Reco,RECO --datatier GEN-SIM-RECO -n 10 --geometry Extended2023D41 --era Phase2 --eventcontent FEVTDEBUGHLT --filein file:SingleMuPt1000_pythia8_cfi_GEN_SIM.root --runUnscheduled --no_exec import FWCore.ParameterSet.Config as cms from Configuration.Eras.Era_Phase2C9_cff import Phase2C9 -process = cms.Process('Phase2PixelNtuple',Phase2C9) +process = cms.Process('USER',Phase2C9) # import of standard configurations process.load('Configuration.StandardSequences.Services_cff') @@ -35,7 +30,7 @@ process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring( - '/store/relval/CMSSW_11_2_0_pre1/RelValSingleMuPt10/GEN-SIM/110X_mcRun4_realistic_v3_2026D49noPU-v1/10000/743B02CC-F5B9-5642-A7EF-EE222E18C54F.root' + '/store/relval/CMSSW_11_2_0_pre8/RelValSingleMuPt10/GEN-SIM-RECO/112X_mcRun4_realistic_v3_2026D49noPU-v1/00000/007d817e-9c59-4dec-959b-0f227942cdf0.root' ) ) @@ -66,22 +61,30 @@ # outputCommands = process.FEVTDEBUGHLTEventContent.outputCommands, # splitLevel = cms.untracked.int32(0) #) + +# # # -- Trajectory producer +process.load("RecoTracker.TrackProducer.TrackRefitters_cff") +process.TrackRefitter.src = 'generalTracks' +process.TrackRefitter.NavigationSchool = "" + process.ReadLocalMeasurement = cms.EDAnalyzer("Phase2PixelNtuple", - trackProducer = cms.InputTag("generalTracks"), - #verbose = cms.untracked.bool(True), - #picky = cms.untracked.bool(False), - ### for using track hit association - associatePixel = cms.bool(True), - associateStrip = cms.bool(False), - associateRecoTracks = cms.bool(False), - ROUList = cms.vstring('TrackerHitsPixelBarrelLowTof', - 'TrackerHitsPixelBarrelHighTof', - 'TrackerHitsPixelEndcapLowTof', - 'TrackerHitsPixelEndcapHighTof'), - usePhase2Tracker = cms.bool(True), - pixelSimLinkSrc = cms.InputTag("simSiPixelDigis", "Pixel"), - phase2TrackerSimLinkSrc = cms.InputTag("simSiPixelDigis", "Tracker") -) + trackProducer = cms.InputTag("generalTracks"), + trajectoryInput = cms.InputTag('TrackRefitter::USER'), + #verbose = cms.untracked.bool(True), + #picky = cms.untracked.bool(False), + ### for using track hit association + associatePixel = cms.bool(True), + associateStrip = cms.bool(False), + associateRecoTracks = cms.bool(False), + ROUList = cms.vstring('TrackerHitsPixelBarrelLowTof', + 'TrackerHitsPixelBarrelHighTof', + 'TrackerHitsPixelEndcapLowTof', + 'TrackerHitsPixelEndcapHighTof'), + ttrhBuilder = cms.string("WithTrackAngle"), + usePhase2Tracker = cms.bool(True), + pixelSimLinkSrc = cms.InputTag("simSiPixelDigis", "Pixel"), + phase2TrackerSimLinkSrc = cms.InputTag("simSiPixelDigis", "Tracker") + ) # Additional output definition @@ -92,15 +95,6 @@ # This pset is specific for producing simulated events for the designers of the PROC (InnerTracker) # They need pixel RecHits where the charge is stored with high-granularity and large dinamic range -# digitizer -process.mix.digitizers.pixel.PixelDigitizerAlgorithm.AdcFullScale = cms.int32(255) -process.mix.digitizers.pixel.PixelDigitizerAlgorithm.ElectronPerAdc = cms.double(135.) -process.mix.digitizers.pixel.PixelDigitizerAlgorithm.AddXTalk = cms.bool(False) - -# clusterizer -process.siPixelClusters.ElectronPerADCGain = cms.double(135.) -process.siPixelClustersPreSplitting.ElectronPerADCGain = cms.double(135.) - from Configuration.AlCa.GlobalTag import GlobalTag process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic_T15', '') @@ -112,7 +106,7 @@ process.raw2digi_step = cms.Path(process.RawToDigi) process.L1Reco_step = cms.Path(process.L1Reco) process.reconstruction_step = cms.Path(process.reconstruction) -process.user_step = cms.Path(process.ReadLocalMeasurement + process.mcverticesanalyzer) +process.user_step = cms.Path(process.TrackRefitter * process.ReadLocalMeasurement * process.mcverticesanalyzer) process.endjob_step = cms.EndPath(process.endOfProcess) #process.FEVTDEBUGHLToutput_step = cms.EndPath(process.FEVTDEBUGHLToutput) diff --git a/SLHCUpgradeSimulations/Geometry/test/phase2_reco_pixelntuple_cfg.py b/SLHCUpgradeSimulations/Geometry/test/phase2_reco_pixelntuple_cfg.py index b1be5af325f31..1a73ffde66381 100644 --- a/SLHCUpgradeSimulations/Geometry/test/phase2_reco_pixelntuple_cfg.py +++ b/SLHCUpgradeSimulations/Geometry/test/phase2_reco_pixelntuple_cfg.py @@ -2,12 +2,12 @@ # using: # Revision: 1.19 # Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v -# with command line options: step2 --conditions auto:phase2_realistic -s DIGI:pdigi_valid,L1,L1TrackTrigger,DIGI2RAW,HLT:@fake2,RAW2DIGI,L1Reco,RECO --datatier GEN-SIM-RECO -n 10 --geometry Extended2026D41 --era Phase2 --eventcontent FEVTDEBUGHLT --filein file:SingleMuPt1000_pythia8_cfi_GEN_SIM.root --runUnscheduled --no_exec +# with command line options: step3 --conditions auto:phase2_realistic_T21 -s RAW2DIGI,L1Reco,RECO,RECOSIM,PAT,VALIDATION:@phase2Validation+@miniAODValidation,DQM:@phase2+@miniAODDQM --datatier GEN-SIM-RECO,MINIAODSIM,DQMIO -n 10 --geometry Extended2026D66 --era Phase2C11 --eventcontent FEVTDEBUGHLT,MINIAODSIM,DQM --filein file:step2.root --fileout file:step3.root import FWCore.ParameterSet.Config as cms -from Configuration.Eras.Era_Phase2C9_cff import Phase2C9 -process = cms.Process('Phase2PixelNtuple',Phase2C9) +from Configuration.Eras.Era_Phase2C11_cff import Phase2C11 +process = cms.Process('USER',Phase2C11) # import of standard configurations process.load('Configuration.StandardSequences.Services_cff') @@ -15,18 +15,19 @@ process.load('FWCore.MessageService.MessageLogger_cfi') process.load('Configuration.EventContent.EventContent_cff') process.load('SimGeneral.MixingModule.mixNoPU_cfi') -process.load('Configuration.Geometry.GeometryExtended2026D49Reco_cff') +process.load('Configuration.Geometry.GeometryExtended2026D66Reco_cff') process.load('Configuration.StandardSequences.MagneticField_cff') -process.load('Configuration.StandardSequences.Digi_cff') -process.load('Configuration.StandardSequences.SimL1Emulator_cff') -process.load('Configuration.StandardSequences.L1TrackTrigger_cff') -process.load('Configuration.StandardSequences.DigiToRaw_cff') -process.load('HLTrigger.Configuration.HLT_Fake2_cff') process.load('Configuration.StandardSequences.RawToDigi_cff') process.load('Configuration.StandardSequences.L1Reco_cff') process.load('Configuration.StandardSequences.Reconstruction_cff') -process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.RecoSim_cff') +process.load('PhysicsTools.PatAlgos.slimming.metFilterPaths_cff') +process.load('Configuration.StandardSequences.PATMC_cff') +process.load('Configuration.StandardSequences.Validation_cff') +process.load('DQMServices.Core.DQMStoreNonLegacy_cff') +process.load('DQMOffline.Configuration.DQMOfflineMC_cff') process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10) @@ -34,7 +35,7 @@ process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring( - '/store/relval/CMSSW_11_2_0_pre1/RelValSingleMuPt10/GEN-SIM-DIGI-RAW/110X_mcRun4_realistic_v3_2026D49noPU-v1/10000/8A7349B5-D01D-2249-BCBA-92754DBD1127.root', + 'file:step2.root' ) ) @@ -43,6 +44,20 @@ ) +#process.MessageLogger = cms.Service( +# "MessageLogger", +# destinations = cms.untracked.vstring( +# 'detailedInfo', +# ), +# detailedInfo = cms.untracked.PSet( +# threshold = cms.untracked.string('DEBUG') +# ), +# debugModules = cms.untracked.vstring( +# 'reconstruction_step', +# ) +# ) +# + # Production Info process.configurationMetadata = cms.untracked.PSet( annotation = cms.untracked.string('step2 nevts:10'), @@ -50,68 +65,84 @@ version = cms.untracked.string('$Revision: 1.19 $') ) -# Output definition - -#process.FEVTDEBUGHLToutput = cms.OutputModule("PoolOutputModule", -# dataset = cms.untracked.PSet( -# dataTier = cms.untracked.string('GEN-SIM-RECO'), -# filterName = cms.untracked.string('') -# ), -# fileName = cms.untracked.string('step2_DIGI_L1_L1TrackTrigger_DIGI2RAW_HLT_RAW2DIGI_L1Reco_RECO.root'), -# outputCommands = process.FEVTDEBUGHLTEventContent.outputCommands, -# splitLevel = cms.untracked.int32(0) -#) +# MC vertice analyzer +process.load("Validation.RecoVertex.mcverticesanalyzer_cfi") +process.mcverticesanalyzer.pileupSummaryCollection = cms.InputTag("addPileupInfo","","HLT") + +# # # -- Trajectory producer +process.load("RecoTracker.TrackProducer.TrackRefitters_cff") +process.TrackRefitter.src = 'generalTracks' +process.TrackRefitter.NavigationSchool = "" + process.ReadLocalMeasurement = cms.EDAnalyzer("Phase2PixelNtuple", - trackProducer = cms.InputTag("generalTracks"), - #verbose = cms.untracked.bool(True), - #picky = cms.untracked.bool(False), - ### for using track hit association - associatePixel = cms.bool(True), - associateStrip = cms.bool(False), - associateRecoTracks = cms.bool(False), - ROUList = cms.vstring('TrackerHitsPixelBarrelLowTof', - 'TrackerHitsPixelBarrelHighTof', - 'TrackerHitsPixelEndcapLowTof', - 'TrackerHitsPixelEndcapHighTof'), - usePhase2Tracker = cms.bool(True), - pixelSimLinkSrc = cms.InputTag("simSiPixelDigis", "Pixel"), - phase2TrackerSimLinkSrc = cms.InputTag("simSiPixelDigis", "Tracker") -) + trackProducer = cms.InputTag("generalTracks"), + trajectoryInput = cms.InputTag('TrackRefitter::USER'), + #verbose = cms.untracked.bool(True), + #picky = cms.untracked.bool(False), + ### for using track hit association + associatePixel = cms.bool(True), + associateStrip = cms.bool(False), + associateRecoTracks = cms.bool(False), + ROUList = cms.vstring('TrackerHitsPixelBarrelLowTof', + 'TrackerHitsPixelBarrelHighTof', + 'TrackerHitsPixelEndcapLowTof', + 'TrackerHitsPixelEndcapHighTof'), + ttrhBuilder = cms.string("WithTrackAngle"), + usePhase2Tracker = cms.bool(True), + pixelSimLinkSrc = cms.InputTag("simSiPixelDigis", "Pixel"), + phase2TrackerSimLinkSrc = cms.InputTag("simSiPixelDigis", "Tracker") + ) # Additional output definition # Other statements -process.mix.digitizers = cms.PSet(process.theDigitizersValid) +process.mix.playback = True +process.mix.digitizers = cms.PSet() +for a in process.aliases: delattr(process, a) +process.RandomNumberGeneratorService.restoreStateLabel=cms.untracked.string("randomEngineStateProducer") from Configuration.AlCa.GlobalTag import GlobalTag -process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic_T15', '') +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic_T21', '') + +# Uncomment to use CPE generic instead of template in final fit +#process.load("RecoTracker.TransientTrackingRecHit.TTRHBuilderWithTemplate_cfi") +#process.TTRHBuilderAngleAndTemplate.PixelCPE = cms.string("PixelCPEGeneric") + +# Uncomment CPE Template for every step (including seeding) +#process.load("RecoLocalTracker.SiPixelRecHits.SiPixelRecHits_cfi") +#process.siPixelRecHits.CPE = cms.string('PixelCPETemplateReco') +#process.load("RecoTracker.TransientTrackingRecHit.TransientTrackingRecHitBuilder_cfi") +#process.ttrhbwr.PixelCPE = cms.string('PixelCPETemplateReco') # Path and EndPath definitions -process.digitisation_step = cms.Path(process.pdigi_valid) -process.L1simulation_step = cms.Path(process.SimL1Emulator) -process.L1TrackTrigger_step = cms.Path(process.L1TrackTrigger) -process.digi2raw_step = cms.Path(process.DigiToRaw) process.raw2digi_step = cms.Path(process.RawToDigi) process.L1Reco_step = cms.Path(process.L1Reco) process.reconstruction_step = cms.Path(process.reconstruction) -process.user_step = cms.Path(process.ReadLocalMeasurement) +process.user_step = cms.Path(process.TrackRefitter * process.ReadLocalMeasurement * process.mcverticesanalyzer) process.endjob_step = cms.EndPath(process.endOfProcess) -#process.FEVTDEBUGHLToutput_step = cms.EndPath(process.FEVTDEBUGHLToutput) # Schedule definition -process.schedule = cms.Schedule() -process.schedule.extend(process.HLTSchedule) -process.schedule.extend([process.raw2digi_step,process.L1Reco_step,process.reconstruction_step,process.user_step,process.endjob_step]) +process.schedule = cms.Schedule(process.raw2digi_step,process.L1Reco_step,process.reconstruction_step,process.user_step,process.endjob_step) from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask associatePatAlgosToolsTask(process) # customisation of the process. -# Automatic addition of the customisation function from HLTrigger.Configuration.customizeHLTforMC -from HLTrigger.Configuration.customizeHLTforMC import customizeHLTforMC +# Automatic addition of the customisation function from SimGeneral.MixingModule.fullMixCustomize_cff +from SimGeneral.MixingModule.fullMixCustomize_cff import setCrossingFrameOn -#call to customisation function customizeHLTforMC imported from HLTrigger.Configuration.customizeHLTforMC -process = customizeHLTforMC(process) +#call to customisation function setCrossingFrameOn imported from SimGeneral.MixingModule.fullMixCustomize_cff +process = setCrossingFrameOn(process) + +# End of customisation functions + +# customisation of the process. + +# Automatic addition of the customisation function from PhysicsTools.PatAlgos.slimming.miniAOD_tools +from PhysicsTools.PatAlgos.slimming.miniAOD_tools import miniAOD_customizeAllMC + +#call to customisation function miniAOD_customizeAllMC imported from PhysicsTools.PatAlgos.slimming.miniAOD_tools +process = miniAOD_customizeAllMC(process) # End of customisation functions @@ -124,7 +155,8 @@ # Add early deletion of temporary data products to reduce peak memory need from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete process = customiseEarlyDelete(process) + # End adding early deletion -process.TFileService = cms.Service('TFileService', -fileName = cms.string("pixelntuple.root") +process.TFileService = cms.Service('TFileService', fileName = cms.string("pixelntuple.root") ) + diff --git a/SLHCUpgradeSimulations/Geometry/test/writeFile_phase1_cfg.py b/SLHCUpgradeSimulations/Geometry/test/writeFile_phase1_cfg.py index 75e3c88e78505..066ef71ebb2c2 100644 --- a/SLHCUpgradeSimulations/Geometry/test/writeFile_phase1_cfg.py +++ b/SLHCUpgradeSimulations/Geometry/test/writeFile_phase1_cfg.py @@ -21,8 +21,8 @@ ) process.load("FWCore/MessageService/MessageLogger_cfi") -process.MessageLogger.destinations = cms.untracked.vstring("logfile") -process.MessageLogger.logfile = cms.untracked.PSet(threshold = cms.untracked.string('INFO')) +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.logfile = cms.untracked.PSet(threshold = cms.untracked.string('INFO')) process.Timing = cms.Service("Timing") diff --git a/SLHCUpgradeSimulations/Geometry/test/writeFile_phase2_cfg.py b/SLHCUpgradeSimulations/Geometry/test/writeFile_phase2_cfg.py index 81950b63ccdb0..4a5a369520862 100644 --- a/SLHCUpgradeSimulations/Geometry/test/writeFile_phase2_cfg.py +++ b/SLHCUpgradeSimulations/Geometry/test/writeFile_phase2_cfg.py @@ -18,8 +18,8 @@ ) process.load("FWCore/MessageService/MessageLogger_cfi") -process.MessageLogger.destinations = cms.untracked.vstring("logfile") -process.MessageLogger.logfile = cms.untracked.PSet(threshold = cms.untracked.string('INFO')) +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.logfile = cms.untracked.PSet(threshold = cms.untracked.string('INFO')) process.Timing = cms.Service("Timing") diff --git a/SUSYBSMAnalysis/HSCP/BuildFile.xml b/SUSYBSMAnalysis/HSCP/BuildFile.xml deleted file mode 100644 index b95183c1fbe2b..0000000000000 --- a/SUSYBSMAnalysis/HSCP/BuildFile.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/SUSYBSMAnalysis/HSCP/data/Data7TeV_Deco_SiStripDeDxMip_3D_Rcd.db b/SUSYBSMAnalysis/HSCP/data/Data7TeV_Deco_SiStripDeDxMip_3D_Rcd.db deleted file mode 100644 index 548874cf0d902..0000000000000 Binary files a/SUSYBSMAnalysis/HSCP/data/Data7TeV_Deco_SiStripDeDxMip_3D_Rcd.db and /dev/null differ diff --git a/SUSYBSMAnalysis/HSCP/data/Data7TeV_Deco_SiStripDeDxMip_3D_Rcd.root b/SUSYBSMAnalysis/HSCP/data/Data7TeV_Deco_SiStripDeDxMip_3D_Rcd.root deleted file mode 100644 index 33bae01aa66c2..0000000000000 Binary files a/SUSYBSMAnalysis/HSCP/data/Data7TeV_Deco_SiStripDeDxMip_3D_Rcd.root and /dev/null differ diff --git a/SUSYBSMAnalysis/HSCP/data/MC7TeVGains.root b/SUSYBSMAnalysis/HSCP/data/MC7TeVGains.root deleted file mode 100644 index e7f004f2bdf18..0000000000000 Binary files a/SUSYBSMAnalysis/HSCP/data/MC7TeVGains.root and /dev/null differ diff --git a/SUSYBSMAnalysis/HSCP/data/MC7TeV_Deco_SiStripDeDxMip_3D_Rcd.db b/SUSYBSMAnalysis/HSCP/data/MC7TeV_Deco_SiStripDeDxMip_3D_Rcd.db deleted file mode 100644 index 0b9d8244b86ea..0000000000000 Binary files a/SUSYBSMAnalysis/HSCP/data/MC7TeV_Deco_SiStripDeDxMip_3D_Rcd.db and /dev/null differ diff --git a/SUSYBSMAnalysis/HSCP/data/MC7TeV_Deco_SiStripDeDxMip_3D_Rcd.root b/SUSYBSMAnalysis/HSCP/data/MC7TeV_Deco_SiStripDeDxMip_3D_Rcd.root deleted file mode 100644 index bdfb231827d9f..0000000000000 Binary files a/SUSYBSMAnalysis/HSCP/data/MC7TeV_Deco_SiStripDeDxMip_3D_Rcd.root and /dev/null differ diff --git a/SUSYBSMAnalysis/HSCP/data/MuonTimeShift_2011.txt b/SUSYBSMAnalysis/HSCP/data/MuonTimeShift_2011.txt deleted file mode 100644 index 923249bab92bc..0000000000000 --- a/SUSYBSMAnalysis/HSCP/data/MuonTimeShift_2011.txt +++ /dev/null @@ -1,3106 +0,0 @@ -637566980 -0.54825 -637599748 0.949943 -637632516 -2.93543 -637566982 3.11989 -637599750 4.01475 -637632518 -3.15935 -637566984 -15.8282 -637599752 5.31518 -637632520 0.671882 -637566986 -5.8648 -637599754 2.22948 -637632522 -5.24969 -637566989 5.47475 -637632525 2.32308 -637566993 -4.86417 -637632529 -0.886712 -637566997 6.20121 -637632533 -3.39547 -637567001 -7.79198 -637632537 4.77651 -637567005 0.678291 -637632541 1.1537 -637567108 2.25723 -637599876 -1.32955 -637632644 7.13276 -637567110 -1.32297 -637599878 -5.09807 -637632646 9.66427 -637567112 4.04016 -637599880 4.97838 -637632648 11.7094 -637567114 5.28602 -637599882 4.52049 -637632650 5.52124 -637567117 4.32638 -637632653 -0.416447 -637567121 5.10487 -637632657 -5.87838 -637567125 8.50734 -637632661 -3.97512 -637567129 -3.44312 -637632665 0.705437 -637567133 3.19274 -637632669 4.14705 -637567236 5.38406 -637600004 6.53442 -637632772 1.8919 -637567238 2.87289 -637600006 1.40396 -637632774 -7.64573 -637567240 1.52575 -637600008 -6.24801 -637632776 1.94148 -637567242 -5.62642 -637600010 3.77316 -637632778 -2.21807 -637567245 -0.927925 -637632781 1.98242 -637567249 0.469939 -637632785 3.35778 -637567253 3.40025 -637632789 0.0247274 -637567257 0.669699 -637632793 -6.50361 -637567261 10.1999 -637632797 -3.8703 -637567364 -10.0033 -637600132 -3.73939 -637632900 -5.90777 -637567366 -4.8132 -637600134 10.0657 -637632902 4.36448 -637567368 9.69303 -637600136 -4.69573 -637632904 -8.17894 -637567370 0.277902 -637600138 -3.3577 -637632906 -1.58948 -637567373 -0.571988 -637632909 -0.129552 -637567377 -7.0785 -637632913 0.43841 -637567381 6.61704 -637632917 -1.73842 -637567385 0.317941 -637632921 1.8316 -637567389 1.85351 -637632925 8.57226 -637567492 1.08777 -637600260 -3.03081 -637633028 -7.64577 -637567494 4.85243 -637600262 2.41655 -637633030 0.463351 -637567496 -7.24735 -637600264 -12.533 -637633032 6.66279 -637567498 1.86912 -637600266 -0.255423 -637633034 3.60769 -637567501 3.92872 -637633037 1.31557 -637567505 -4.85149 -637633041 0.113582 -637567509 -2.9909 -637633045 3.13101 -637567513 0.770356 -637633049 1.50866 -637567517 -4.88241 -637633053 -1.24616 -637567620 -4.62485 -637600388 4.17009 -637633156 -4.15142 -637567622 1.74261 -637600390 1.631 -637633158 -0.835259 -637567624 -1.90584 -637600392 1.93343 -637633160 -4.27454 -637567626 -4.03159 -637600394 -1.90478 -637633162 -5.9056 -637567629 9.33487 -637633165 2.22477 -637567633 -4.97273 -637633169 -3.39858 -637567637 -1.4782 -637633173 6.30623 -637567641 -14.1326 -637633177 7.55448 -637567645 2.56901 -637633181 8.69499 -637567757 0.0251438 -637633293 6.15146 -637567761 7.54069 -637633297 0.00331819 -637567765 -10.1268 -637633301 -4.5161 -637567769 2.83008 -637633305 -5.79594 -637567773 -9.55809 -637633309 -10.869 -637567885 4.60449 -637633421 2.74938 -637567889 5.84943 -637633425 9.32703 -637567893 6.52935 -637633429 0.765314 -637567897 2.55962 -637633433 -3.1393 -637567901 3.50424 -637633437 2.64584 -637568013 -2.81008 -637633549 3.2293 -637568017 4.04131 -637633553 -9.74897 -637568021 -5.40237 -637633557 -1.55474 -637568025 7.40741 -637633561 -3.59782 -637568029 2.42784 -637633565 0.0298086 -637568141 -0.336222 -637633677 8.53511 -637568145 -6.22653 -637633681 4.13591 -637568149 3.49544 -637633685 -4.61481 -637568153 1.79503 -637633689 -1.06422 -637568157 0.0718886 -637633693 -1.95245 -637568269 2.46336 -637633805 -1.99954 -637568273 -1.10068 -637633809 0.180165 -637568277 -0.14968 -637633813 -0.0668611 -637568281 -0.26237 -637633817 5.14512 -637568285 -1.79736 -637633821 -1.9808 -637568397 -2.6767 -637633933 -2.26294 -637568401 9.36669 -637633937 -2.52591 -637568405 6.76381 -637633941 2.11004 -637568409 -3.83077 -637633945 -12.3055 -637568413 -6.1029 -637633949 -1.7245 -637571076 -0.964312 -637603844 1.30948 -637636612 2.00939 -637571078 -2.79966 -637603846 2.95257 -637636614 7.79661 -637571080 2.43369 -637603848 1.32935 -637636616 -0.614873 -637571082 1.5531 -637603850 -7.74007 -637636618 -14.6045 -637571204 -4.1763 -637603972 -3.83262 -637636740 8.61637 -637571206 2.4631 -637603974 -7.22921 -637636742 1.98934 -637571208 -6.83659 -637603976 -3.61622 -637636744 2.51258 -637571210 -1.17684 -637603978 -2.93719 -637636746 -5.90492 -637571332 -1.30733 -637604100 4.10243 -637636868 -3.30163 -637571334 2.74197 -637604102 -9.74734 -637636870 -3.09347 -637571336 1.96458 -637604104 4.14566 -637636872 -3.49542 -637571338 -2.9031 -637604106 -1.07744 -637636874 -2.28438 -637571460 7.84067 -637604228 -1.82744 -637636996 -1.23245 -637571462 -2.10323 -637604230 -2.88649 -637636998 -6.16042 -637571464 -7.84099 -637604232 -3.20089 -637637000 6.64647 -637571466 -3.31898 -637604234 1.22743 -637637002 8.29804 -637571588 -1.41747 -637604356 0.62095 -637637124 0.670404 -637571590 -2.21146 -637604358 -2.11718 -637637126 -0.208664 -637571592 5.68841 -637604360 -7.25456 -637637128 6.9089 -637571594 -7.22151 -637604362 -4.18985 -637637130 1.94308 -637571716 2.48212 -637604484 -3.6147 -637637252 3.65236 -637571718 4.14743 -637604486 1.43399 -637637254 9.63188 -637571720 -2.59887 -637604488 2.65129 -637637256 -6.50771 -637571722 -7.27841 -637604490 -0.778229 -637637258 3.95056 -637575172 -6.33595 -637607940 -1.03366 -637640708 -4.92394 -637575174 -4.79788 -637607942 9.89951 -637640710 1.51517 -637575176 -1.79888 -637607944 0.405213 -637640712 -6.33561 -637575178 -0.0748711 -637607946 5.56466 -637640714 6.26123 -637575300 -0.0882322 -637608068 -6.60782 -637640836 1.66932 -637575302 -4.74806 -637608070 -0.72546 -637640838 -6.31267 -637575304 -3.39001 -637608072 -1.88332 -637640840 3.76965 -637575306 -1.60423 -637608074 -2.50018 -637640842 -7.33383 -637575428 -5.15268 -637608196 -1.55812 -637640964 -10.7352 -637575430 -5.82587 -637608198 -1.18181 -637640966 -7.03436 -637575432 1.58461 -637608200 3.52565 -637640968 -4.8347 -637575434 0.745435 -637608202 -4.22216 -637640970 -0.198822 -637575556 8.72811 -637608324 4.13306 -637641092 -1.93093 -637575558 0.504006 -637608326 -4.66653 -637641094 4.47765 -637575560 -8.24046 -637608328 -0.483929 -637641096 3.97375 -637575562 0.917794 -637608330 -3.05788 -637641098 1.63833 -637575684 -6.1682 -637608452 -6.66116 -637641220 3.18669 -637575686 -3.4679 -637608454 5.42775 -637641222 1.48455 -637575688 5.43826 -637608456 -3.94814 -637641224 4.93566 -637575690 -3.92341 -637608458 1.1025 -637641226 1.18038 -637575812 -7.4948 -637608580 1.83546 -637641348 7.55707 -637575814 -8.39462 -637608582 1.06256 -637641350 6.04283 -637575816 -5.68661 -637608584 8.3923 -637641352 2.85884 -637575818 -3.4662 -637608586 8.01506 -637641354 0.424497 -637579268 0.765138 -637612036 -4.76876 -637644804 3.89189 -637579270 5.34724 -637612038 -1.76508 -637644806 0.332866 -637579272 5.51425 -637612040 -4.97524 -637644808 -8.04122 -637579274 5.52362 -637612042 3.84446 -637644810 -3.97011 -637579396 7.44973 -637612164 1.6487 -637644932 8.32166 -637579398 0.491653 -637612166 1.18992 -637644934 2.27996 -637579400 -0.107862 -637612168 1.26844 -637644936 6.20492 -637579402 -1.09422 -637612170 0.0401733 -637644938 4.46886 -637579524 -2.5008 -637612292 -9.22931 -637645060 0.862653 -637579526 -1.6866 -637612294 -0.836017 -637645062 5.81386 -637579528 -3.93464 -637612296 -1.63098 -637645064 0.511446 -637579530 -5.67424 -637612298 -4.11606 -637645066 -10.2008 -637579652 3.21899 -637612420 -8.93435 -637645188 4.30834 -637579654 -4.37931 -637612422 4.85541 -637645190 -8.20157 -637579656 -8.02274 -637612424 -1.72229 -637645192 -3.50858 -637579658 -3.2426 -637612426 -9.18281 -637645194 4.91979 -637579780 0.282365 -637612548 1.10628 -637645316 -6.77544 -637579782 -2.59312 -637612550 0.968924 -637645318 -9.24824 -637579784 -4.81591 -637612552 -3.44662 -637645320 1.98027 -637579786 4.82379 -637612554 -2.01366 -637645322 6.90943 -637579908 5.40352 -637612676 -5.38882 -637645444 0.524653 -637579910 2.39057 -637612678 -5.35561 -637645446 0.415672 -637579912 -6.43054 -637612680 -1.16537 -637645448 1.72145 -637579914 2.69822 -637612682 -1.04053 -637645450 3.06885 -637583364 3.91677 -637616132 -7.20584 -637648900 0.596132 -637583366 -4.28312 -637616134 -2.68661 -637648902 8.98275 -637583368 4.38057 -637616136 1.58621 -637648904 7.98315 -637583370 5.10259 -637616138 -1.61969 -637648906 -0.982994 -637583492 -5.24587 -637616260 -0.591482 -637649028 -4.80903 -637583494 -10.3164 -637616262 -8.04172 -637649030 3.47256 -637583496 -2.08386 -637616264 -6.71123 -637649032 3.13604 -637583498 -4.93018 -637616266 7.95757 -637649034 -0.678979 -637583620 -2.74742 -637616388 -2.75983 -637649156 1.79837 -637583622 8.54086 -637616390 3.09743 -637649158 10.6154 -637583624 7.0988 -637616392 1.05579 -637649160 -0.5626 -637583626 -4.36058 -637616394 2.67402 -637649162 -3.04797 -637583748 9.00403 -637616516 2.14851 -637649284 -3.64874 -637583750 1.22719 -637616518 -2.54111 -637649286 2.76716 -637583752 3.34759 -637616520 -2.67625 -637649288 0.383747 -637583754 4.00793 -637616522 -1.477 -637649290 1.96655 -637583876 -10.8557 -637616644 4.60437 -637649412 2.22306 -637583878 -2.60309 -637616646 5.00627 -637649414 8.35409 -637583880 -3.80216 -637616648 -1.82328 -637649416 1.44324 -637583882 1.8768 -637616650 11.4619 -637649418 4.32182 -637584004 2.5049 -637616772 -4.50782 -637649540 1.13013 -637584006 -6.66699 -637616774 -4.31316 -637649542 -2.2929 -637584008 3.32935 -637616776 1.36242 -637649544 0.28473 -637584010 5.71837 -637616778 2.17353 -637649546 2.00345 -637587460 2.20414 -637620228 -3.85812 -637652996 -6.4373 -637587462 1.1966 -637620230 4.75233 -637652998 1.79686 -637587464 -2.62672 -637620232 -5.3272 -637653000 0.880106 -637587466 2.30799 -637620234 1.68841 -637653002 -3.36382 -637587588 -0.627363 -637620356 9.3687 -637653124 1.75695 -637587590 -4.53461 -637620358 2.7622 -637653126 0.958532 -637587592 -3.20002 -637620360 2.84104 -637653128 -1.88095 -637587594 -10.6919 -637620362 -9.36646 -637653130 -2.10317 -637587716 -3.69495 -637620484 -0.613713 -637653252 -3.15007 -637587718 -4.69565 -637620486 -4.32493 -637653254 -4.80023 -637587720 2.21372 -637620488 -0.87906 -637653256 -8.7906 -637587722 -1.83006 -637620490 -1.79431 -637653258 -6.1714 -637587844 2.6109 -637620612 -4.84081 -637653380 -2.57124 -637587846 -5.2613 -637620614 -4.9587 -637653382 4.33851 -637587848 6.78394 -637620616 -5.20678 -637653384 5.79193 -637587850 3.02566 -637620618 -0.0737251 -637653386 1.05147 -637587972 -12.3171 -637620740 -7.38983 -637653508 6.96771 -637587974 0.478712 -637620742 -2.43457 -637653510 1.77061 -637587976 2.31474 -637620744 -0.568067 -637653512 10.0303 -637587978 -6.68392 -637620746 4.80617 -637653514 8.14234 -637588100 -0.578392 -637620868 -3.58589 -637653636 4.8912 -637588102 -1.93483 -637620870 -8.96537 -637653638 7.34389 -637588104 4.80965 -637620872 2.36795 -637653640 3.56476 -637588106 6.74037 -637620874 8.56063 -637653642 6.45055 -637569037 -1.40058 -637634573 -1.66342 -637569041 1.03053 -637634577 4.38958 -637569045 14.0513 -637634581 -0.115735 -637569049 0.433612 -637634585 10.5141 -637569053 -5.31033 -637634589 -6.58589 -637569165 -9.4821 -637634701 3.29065 -637569169 9.53897 -637634705 -2.23044 -637569173 -5.19275 -637634709 -1.88744 -637569177 3.25538 -637634713 -2.41946 -637569181 1.86303 -637634717 3.35213 -637569293 -2.47989 -637634829 4.71531 -637569297 6.37194 -637634833 2.47024 -637569301 -2.79159 -637634837 -4.39933 -637569305 0.120204 -637634841 -1.34416 -637569309 -5.67875 -637634845 -5.50263 -637569421 7.66378 -637634957 -7.40463 -637569425 -7.67853 -637634961 3.2624 -637569429 -4.43217 -637634965 -2.36009 -637569433 3.14271 -637634969 8.30328 -637569437 -3.06829 -637634973 0.58363 -637569549 -7.12342 -637635085 -7.47465 -637569553 2.34774 -637635089 -5.13436 -637569557 -4.07156 -637635093 11.5021 -637569561 -3.9247 -637635097 1.31454 -637569565 -1.57977 -637635101 3.15488 -637569677 -3.61592 -637635213 -5.14304 -637569681 1.76213 -637635217 6.94876 -637569685 5.30907 -637635221 -1.07233 -637569689 6.64069 -637635225 -2.49184 -637569693 -1.52343 -637635229 1.4716 -637569805 0.697328 -637635341 5.11447 -637569809 -0.78532 -637635345 -4.70059 -637569813 -0.889819 -637635349 -2.608 -637569817 -6.13829 -637635353 2.4109 -637569821 1.15355 -637635357 -0.670533 -637569933 8.07542 -637635469 10.7987 -637569937 5.33386 -637635473 -6.04296 -637569941 -0.310374 -637635477 -6.31196 -637569945 2.05802 -637635481 -5.77593 -637569949 2.51641 -637635485 -1.38074 -637570061 8.78131 -637635597 -1.74917 -637570065 -5.83978 -637635601 7.33768 -637570069 6.67261 -637635605 -5.94483 -637570073 0.570371 -637635609 9.12798 -637570077 0.466451 -637635613 1.89271 -637570189 0.538561 -637635725 2.19573 -637570193 -2.83092 -637635729 10.5243 -637570197 0.784778 -637635733 -3.09858 -637570201 6.96165 -637635737 2.15107 -637570205 1.07838 -637635741 -0.599663 -637570317 5.20164 -637635853 2.47448 -637570321 4.98447 -637635857 -3.57837 -637570325 1.48539 -637635861 -1.05006 -637570329 0.284051 -637635865 -0.104213 -637570333 -3.83373 -637635869 0.472037 -637570445 -1.17203 -637635981 -1.49497 -637570449 -6.32186 -637635985 4.24793 -637570453 -4.64299 -637635989 3.53618 -637570457 -5.48346 -637635993 5.66016 -637570461 -2.35404 -637635997 6.93627 -637567012 2.55194 -637599780 -2.55185 -637632548 0.650249 -637567014 7.35478 -637599782 -2.86672 -637632550 2.13922 -637567016 4.92785 -637599784 -1.9431 -637632552 6.15835 -637567018 2.54482 -637599786 -3.34368 -637632554 -6.77141 -637567021 -0.432436 -637632557 -0.566149 -637567025 0.491478 -637599793 -1.31324 -637632561 -3.27748 -637567029 0.635068 -637599797 -0.918134 -637632565 2.24436 -637567033 2.71832 -637599801 1.76764 -637632569 -7.09806 -637567037 0.705728 -637632573 -3.62464 -637567140 4.65699 -637599908 9.1784 -637632676 -3.03216 -637567142 -1.97991 -637599910 8.13425 -637632678 -5.45238 -637567144 3.24324 -637599912 -0.80503 -637632680 4.18706 -637567146 -1.16718 -637599914 3.66135 -637632682 2.27936 -637567149 1.87652 -637632685 -3.10032 -637567153 -0.832569 -637599921 9.16033 -637632689 -0.647561 -637567157 4.57215 -637599925 -4.71841 -637632693 -1.62149 -637567161 3.11847 -637599929 3.07312 -637632697 -7.15776 -637567165 -1.19949 -637632701 3.96635 -637567268 -6.45604 -637600036 -4.32158 -637632804 7.77485 -637567270 11.9852 -637600038 -3.42922 -637632806 -3.92669 -637567272 4.77994 -637600040 -8.14715 -637632808 3.09504 -637567274 -3.2702 -637600042 -5.10388 -637632810 -3.41113 -637567277 4.51393 -637632813 7.41892 -637567281 1.35133 -637600049 2.55154 -637632817 -4.90282 -637567285 7.58922 -637600053 -2.03227 -637632821 2.74213 -637567289 0.235447 -637600057 -0.0454762 -637632825 -2.93607 -637567293 4.00439 -637632829 -2.73172 -637567396 2.24239 -637600164 3.5466 -637632932 -0.93074 -637567398 6.63827 -637600166 2.15053 -637632934 -0.751094 -637567400 -2.83714 -637600168 -0.786629 -637632936 0.627926 -637567402 -4.57982 -637600170 -1.54031 -637632938 -5.04178 -637567405 -5.36065 -637632941 8.47125 -637567409 9.72273 -637600177 -2.88832 -637632945 -6.44361 -637567413 -3.12012 -637600181 1.13076 -637632949 -2.69126 -637567417 -10.8377 -637600185 -0.711493 -637632953 1.39733 -637567421 -4.78476 -637632957 -8.19408 -637567524 -1.1308 -637600292 6.94307 -637633060 -7.15574 -637567526 0.103061 -637600294 -2.11959 -637633062 0.108212 -637567528 7.23231 -637600296 7.24377 -637633064 0.242693 -637567530 0.168677 -637600298 8.1504 -637633066 3.59255 -637567533 -6.19443 -637633069 -2.44399 -637567537 8.99957 -637600305 1.10842 -637633073 0.0803913 -637567541 -0.825005 -637600309 -8.36781 -637633077 8.77578 -637567545 4.19786 -637600313 7.39292 -637633081 -4.72117 -637567549 0.862949 -637633085 1.20873 -637567652 -9.7234 -637600420 7.99697 -637633188 1.35487 -637567654 8.24246 -637600422 -1.17154 -637633190 4.27213 -637567656 -5.52633 -637600424 -6.55684 -637633192 -5.6293 -637567658 8.69403 -637600426 -3.89107 -637633194 -5.76237 -637567661 1.92521 -637633197 -6.32594 -637567665 -7.65684 -637600433 -2.22025 -637633201 -1.26894 -637567669 8.21723 -637600437 -6.9022 -637633205 5.91116 -637567673 4.1 -637600441 -2.52032 -637633209 12.6542 -637567677 -1.11402 -637633213 -7.59657 -637567789 0.88361 -637633325 -1.96344 -637567793 -0.429656 -637600561 -2.34706 -637633329 1.90177 -637567797 4.26777 -637600565 -6.88411 -637633333 -3.41253 -637567801 4.95288 -637600569 5.82909 -637633337 2.0374 -637567805 0.790624 -637633341 -0.403845 -637567917 2.18364 -637633453 -7.75924 -637567921 -4.37603 -637600689 -1.06091 -637633457 -2.39383 -637567925 0.618183 -637600693 2.96435 -637633461 -8.64822 -637567929 1.58474 -637600697 4.54272 -637633465 -7.50829 -637567933 5.39234 -637633469 3.97525 -637568045 2.32245 -637633581 4.94347 -637568049 2.78488 -637600817 -3.19391 -637633585 -1.69567 -637568053 -0.935527 -637600821 -4.63996 -637633589 -3.21743 -637568057 1.08091 -637600825 3.6008 -637633593 -0.123215 -637568061 0.359735 -637633597 -4.84655 -637568173 0.126894 -637633709 0.48143 -637568177 8.06279 -637600945 4.26403 -637633713 -2.2689 -637568181 -2.13643 -637600949 1.68417 -637633717 5.92982 -637568185 4.95441 -637600953 2.01023 -637633721 3.45976 -637568189 11.4651 -637633725 3.61925 -637568301 0.741023 -637633837 2.76244 -637568305 -5.16148 -637601073 -2.24535 -637633841 -1.42847 -637568309 1.69973 -637601077 7.96455 -637633845 4.31094 -637568313 9.09913 -637601081 -0.232772 -637633849 1.07634 -637568317 -1.97497 -637633853 2.43239 -637568429 7.36599 -637633965 2.04155 -637568433 -2.40397 -637601201 -2.32407 -637633969 -2.72856 -637568437 -0.975447 -637601205 -8.15139 -637633973 -2.50445 -637568441 11.349 -637601209 0.795294 -637633977 5.89215 -637568445 -5.62808 -637633981 -0.839428 -637571108 4.84519 -637603876 -1.37107 -637636644 -6.96878 -637571110 11.7085 -637603878 -0.826095 -637636646 3.36007 -637571112 1.91452 -637603880 -3.33548 -637636648 -10.9151 -637571114 -4.75357 -637603882 1.51555 -637636650 1.23981 -637571236 -7.23892 -637604004 1.24208 -637636772 5.76077 -637571238 -0.199481 -637604006 -4.05821 -637636774 0.755676 -637571240 -3.96103 -637604008 -9.59677 -637636776 7.08903 -637571242 0.914797 -637604010 -2.92922 -637636778 -3.35629 -637571364 3.67051 -637604132 -2.39494 -637636900 -2.99231 -637571366 -1.79346 -637604134 -1.83694 -637636902 1.53633 -637571368 -7.76622 -637604136 -4.07152 -637636904 4.76844 -637571370 -7.30509 -637604138 0.483891 -637636906 4.51364 -637571492 -1.04959 -637604260 -0.963029 -637637028 -3.10425 -637571494 -13.7708 -637604262 11.87 -637637030 -1.44643 -637571496 -9.06338 -637604264 9.2239 -637637032 -8.26703 -637571498 9.12057 -637604266 -1.30471 -637637034 -1.79452 -637571620 9.16382 -637604388 4.0483 -637637156 -4.73096 -637571622 2.76485 -637604390 -7.22604 -637637158 11.1607 -637571624 -4.98797 -637604392 7.76556 -637637160 -3.66994 -637571626 4.08293 -637604394 -5.79989 -637637162 1.50438 -637571748 1.87062 -637604516 2.91401 -637637284 -5.5289 -637571750 -7.05595 -637604518 -5.04092 -637637286 3.94694 -637571752 2.1682 -637604520 -1.87501 -637637288 -5.9375 -637571754 -8.6758 -637604522 -9.98652 -637637290 -0.921451 -637575204 -8.47902 -637607972 -5.37614 -637640740 4.63229 -637575206 6.34904 -637607974 -2.1639 -637640742 12.0304 -637575208 -6.21529 -637607976 -6.4498 -637640744 -0.0663373 -637575210 -7.8237 -637607978 -13.1385 -637640746 2.66977 -637575332 1.16903 -637608100 3.12282 -637640868 -1.17691 -637575334 10.901 -637608102 13.3244 -637640870 11.6391 -637575336 -3.32358 -637608104 -7.72015 -637640872 -3.0822 -637575338 -2.83478 -637608106 0.520802 -637640874 0.838208 -637575460 3.76086 -637608228 -5.86507 -637640996 -3.44849 -637575462 -4.08416 -637608230 1.68883 -637640998 4.28489 -637575464 -5.58702 -637608232 -6.29782 -637641000 -2.64148 -637575466 -4.93016 -637608234 -6.33828 -637641002 5.91971 -637575588 7.67439 -637608356 -9.40671 -637641124 2.8087 -637575590 0.894566 -637608358 5.062 -637641126 12.7649 -637575592 4.36666 -637608360 -3.1381 -637641128 0.2388 -637575594 2.50141 -637608362 -1.43872 -637641130 -1.52518 -637575716 10.8738 -637608484 -6.07607 -637641252 7.94337 -637575718 7.23394 -637608486 -0.154209 -637641254 -7.0034 -637575720 0.865809 -637608488 7.30733 -637641256 2.01571 -637575722 8.98586 -637608490 3.85018 -637641258 -4.74799 -637575844 -6.61579 -637608612 2.69666 -637641380 -2.70175 -637575846 -3.75998 -637608614 -3.66616 -637641382 -10.2029 -637575848 0.34782 -637608616 -3.85712 -637641384 -0.973215 -637575850 1.7853 -637608618 0.954332 -637641386 -4.03845 -637579300 -2.64881 -637612068 -1.50174 -637644836 2.06657 -637579302 -2.73617 -637612070 0.73776 -637644838 -1.10521 -637579304 -0.282195 -637612072 8.85609 -637644840 -7.86795 -637579306 5.1101 -637612074 -0.707379 -637644842 6.69735 -637579428 -5.87414 -637612196 4.74699 -637644964 5.36343 -637579430 -4.06726 -637612198 0.602187 -637644966 0.245853 -637579432 3.37666 -637612200 -2.10426 -637644968 -4.99732 -637579434 1.50747 -637612202 4.78385 -637644970 5.55762 -637579556 3.4789 -637612324 10.1022 -637645092 -0.865703 -637579558 7.14573 -637612326 4.47953 -637645094 5.48837 -637579560 2.24604 -637612328 -2.1389 -637645096 2.60925 -637579562 -1.23188 -637612330 -2.30387 -637645098 -4.13743 -637579684 1.18105 -637612452 7.61986 -637645220 -4.72273 -637579686 3.2641 -637612454 1.40675 -637645222 2.11205 -637579688 -2.03921 -637612456 -7.97148 -637645224 5.72756 -637579690 6.04361 -637612458 2.89079 -637645226 -0.767458 -637579812 4.1982 -637612580 2.33123 -637645348 -2.65255 -637579814 3.18403 -637612582 6.05237 -637645350 1.81278 -637579816 -6.35976 -637612584 -2.8909 -637645352 -1.27265 -637579818 1.16523 -637612586 0.645376 -637645354 -6.19782 -637579940 8.62265 -637612708 -1.68587 -637645476 4.18905 -637579942 -10.3347 -637612710 4.48996 -637645478 -0.977447 -637579944 0.0938128 -637612712 -8.63967 -637645480 -3.76405 -637579946 2.33471 -637612714 0.331974 -637645482 7.05232 -637583396 1.73364 -637616164 1.39427 -637648932 5.82313 -637583398 -2.62308 -637616166 2.01976 -637648934 -0.481746 -637583400 -4.3382 -637616168 -2.19592 -637648936 -11.6299 -637583402 -2.17603 -637616170 14.5504 -637648938 2.58523 -637583524 -2.29212 -637616292 -4.96686 -637649060 -0.809088 -637583526 8.18749 -637616294 0.755719 -637649062 13.5646 -637583528 6.18713 -637616296 -8.7121 -637649064 -6.34082 -637583530 -1.20955 -637616298 9.78602 -637649066 3.70577 -637583652 -7.47831 -637616420 2.09562 -637649188 -0.526827 -637583654 6.31681 -637616422 -7.03176 -637649190 4.59977 -637583656 3.4913 -637616424 7.00943 -637649192 -1.61803 -637583658 8.93119 -637616426 -6.46067 -637649194 1.65675 -637583780 -0.494756 -637616548 -9.50728 -637649316 -5.53945 -637583782 3.21481 -637616550 -2.73983 -637649318 8.46883 -637583784 -7.18672 -637616552 0.338675 -637649320 -4.96537 -637583786 -0.782125 -637616554 0.831303 -637649322 -5.53911 -637583908 -4.65217 -637616676 -10.6041 -637649444 0.348023 -637583910 2.6059 -637616678 2.05631 -637649446 0.175053 -637583912 -1.52471 -637616680 1.47921 -637649448 2.83641 -637583914 -0.0563914 -637616682 2.82793 -637649450 -0.259688 -637584036 4.17356 -637616804 -0.572427 -637649572 -1.8362 -637584038 -8.03762 -637616806 9.03399 -637649574 4.58581 -637584040 -1.76833 -637616808 1.08967 -637649576 -1.48544 -637584042 4.91388 -637616810 -1.13457 -637649578 -9.05298 -637587492 -11.156 -637620260 -1.1462 -637653028 2.62052 -637587494 -3.72378 -637620262 -3.59525 -637653030 1.75017 -637587496 -5.41452 -637620264 -1.98721 -637653032 2.70044 -637587498 14.3044 -637620266 -5.78026 -637653034 -9.08405 -637587620 -10.5439 -637620388 4.73355 -637653156 9.29414 -637587622 -1.65067 -637620390 1.36635 -637653158 5.26656 -637587624 -0.449938 -637620392 1.83865 -637653160 3.35567 -637587626 -4.25921 -637620394 0.54285 -637653162 1.0488 -637587748 8.15176 -637620516 1.71282 -637653284 -4.01811 -637587750 -10.1132 -637620518 -0.272404 -637653286 3.4495 -637587752 2.50399 -637620520 1.59899 -637653288 -0.859246 -637587754 -5.47321 -637620522 1.4297 -637653290 3.8221 -637587876 -3.11263 -637620644 8.6127 -637653412 6.50327 -637587878 -3.03278 -637620646 2.80454 -637653414 -0.217104 -637587880 -1.46679 -637620648 2.50377 -637653416 -6.21659 -637587882 0.23028 -637620650 0.563443 -637653418 -1.29345 -637588004 -9.39387 -637620772 0.335233 -637653540 -1.33934 -637588006 -9.60143 -637620774 7.52775 -637653542 -5.46113 -637588008 -3.89029 -637620776 -5.44938 -637653544 0.658035 -637588010 -5.26683 -637620778 -2.36669 -637653546 4.25287 -637588132 -5.85404 -637620900 1.43539 -637653668 3.59295 -637588134 0.732752 -637620902 1.16547 -637653670 -4.8489 -637588136 4.75373 -637620904 -0.735252 -637653672 2.74255 -637588138 5.85943 -637620906 2.08634 -637653674 -1.07988 -637569069 -0.149211 -637601837 5.52023 -637634605 -3.07696 -637569073 3.28933 -637634609 0.916099 -637569077 -3.08305 -637634613 2.43509 -637569081 0.838049 -637634617 -4.56406 -637569085 4.59313 -637601853 9.10778 -637634621 7.08599 -637569197 10.2195 -637601965 -6.97062 -637634733 1.75171 -637569201 1.52304 -637634737 8.48474 -637569205 -7.69302 -637634741 -1.17723 -637569209 -3.88743 -637634745 -3.2283 -637569213 -0.506909 -637601981 6.2705 -637634749 -5.00332 -637569325 6.02154 -637602093 -2.42383 -637634861 -0.776444 -637569329 -6.08778 -637634865 -1.44965 -637569333 0.412793 -637634869 1.29793 -637569337 0.0162198 -637634873 -11.8172 -637569341 -7.64125 -637602109 -3.9 -637634877 9.45985 -637569453 -3.9176 -637602221 -2.92809 -637634989 4.71191 -637569457 -3.83212 -637634993 -3.75671 -637569461 -1.16054 -637634997 -12.0736 -637569465 0.191253 -637635001 2.805 -637569469 -2.02181 -637602237 -8.0597 -637635005 -5.70522 -637569581 -5.71951 -637602349 4.1747 -637635117 -2.9255 -637569585 10.6355 -637635121 4.70883 -637569589 -3.62257 -637635125 0.909066 -637569593 0.819475 -637635129 -1.64116 -637569597 -1.41705 -637602365 1.22114 -637635133 9.26074 -637569709 6.62115 -637602477 5.51925 -637635245 6.76602 -637569713 0.0103386 -637635249 -15.1778 -637569717 0.913175 -637635253 -3.22627 -637569721 -1.87813 -637635257 0.624317 -637569725 4.63932 -637602493 -13.0733 -637635261 1.24209 -637569837 7.6138 -637602605 4.9538 -637635373 1.84104 -637569841 -0.671191 -637635377 1.86375 -637569845 2.43019 -637635381 4.97484 -637569849 -0.266644 -637635385 2.02549 -637569853 -7.32004 -637602621 -2.56998 -637635389 5.85655 -637569965 -5.55435 -637602733 2.95911 -637635501 -2.42386 -637569969 1.24339 -637635505 -3.49884 -637569973 3.39917 -637635509 -3.80452 -637569977 -5.41713 -637635513 4.04364 -637569981 0.112981 -637602749 0.099068 -637635517 5.58393 -637570093 -0.35856 -637602861 -8.67298 -637635629 1.32735 -637570097 -1.08062 -637635633 6.66962 -637570101 1.16607 -637635637 3.40504 -637570105 1.12131 -637635641 -5.19747 -637570109 -6.34946 -637602877 -2.00517 -637635645 5.21684 -637570221 6.79642 -637602989 -0.184994 -637635757 -2.04961 -637570225 9.01368 -637635761 5.9395 -637570229 4.57097 -637635765 1.72827 -637570233 -1.29668 -637635769 -7.76166 -637570237 6.66702 -637603005 1.68167 -637635773 4.52691 -637570349 7.44072 -637603117 6.1771 -637635885 -5.58441 -637570353 1.69668 -637635889 2.87723 -637570357 1.92944 -637635893 -0.780204 -637570361 4.83966 -637635897 -0.172631 -637570365 -0.673455 -637603133 -0.220438 -637635901 2.2052 -637570477 4.9296 -637603245 -3.99146 -637636013 5.64423 -637570481 1.08124 -637636017 -13.2667 -637570485 -2.71508 -637636021 4.80077 -637570489 -3.56992 -637636025 7.13619 -637570493 8.66622 -637603261 -2.97787 -637636029 -1.82936 -637567044 -3.50679 -637599812 -7.23392 -637632580 -0.950269 -637567046 10.4973 -637599814 6.0576 -637632582 -1.50175 -637567048 0.0467581 -637599816 -8.62072 -637632584 -7.83183 -637567050 -0.856855 -637599818 9.80011 -637632586 3.14825 -637567053 0.434042 -637632589 9.41489 -637567057 -1.28917 -637632593 -3.7985 -637567061 4.03584 -637632597 -6.68082 -637567065 -9.85595 -637632601 -2.81629 -637567069 4.3935 -637632605 -0.333433 -637567172 0.425769 -637599940 3.56586 -637632708 -2.26245 -637567174 -6.48139 -637599942 6.53209 -637632710 -8.05328 -637567176 -2.73921 -637599944 -1.79558 -637632712 9.82359 -637567178 8.61348 -637599946 3.13522 -637632714 -6.77053 -637567181 8.82444 -637632717 -2.78464 -637567185 0.643933 -637632721 0.529574 -637567189 0.506817 -637632725 4.83914 -637567193 -1.18718 -637632729 -0.113078 -637567197 9.88177 -637632733 -1.48657 -637567300 -6.01894 -637600068 1.43446 -637632836 0.466809 -637567302 2.23113 -637600070 0.471803 -637632838 3.50802 -637567304 -0.359965 -637600072 -6.31344 -637632840 -1.60038 -637567306 3.60512 -637600074 2.81383 -637632842 2.25302 -637567309 -3.45881 -637632845 -5.72358 -637567313 -1.6876 -637632849 -4.02444 -637567317 -2.66162 -637632853 3.78016 -637567321 3.8152 -637632857 7.34989 -637567325 1.54176 -637632861 1.08558 -637567428 -5.91976 -637600196 2.72436 -637632964 -0.396718 -637567430 -3.30007 -637600198 -6.3861 -637632966 3.54585 -637567432 5.35544 -637600200 -0.12386 -637632968 5.0063 -637567434 -1.56026 -637600202 -7.29867 -637632970 5.3776 -637567437 6.5631 -637632973 8.83539 -637567441 -3.1551 -637632977 -1.41736 -637567445 0.442557 -637632981 -0.469271 -637567449 8.09634 -637632985 0.45442 -637567453 -6.2365 -637632989 1.95342 -637567556 -2.22863 -637600324 10.2476 -637633092 -1.79068 -637567558 4.00087 -637600326 -5.9701 -637633094 0.993078 -637567560 -1.74706 -637600328 8.54552 -637633096 -7.47874 -637567562 2.68511 -637600330 6.06002 -637633098 1.4611 -637567565 8.52627 -637633101 -3.68559 -637567569 -1.47523 -637633105 2.76211 -637567573 -2.5384 -637633109 -6.44832 -637567577 -7.86129 -637633113 -4.65368 -637567581 4.6494 -637633117 1.27935 -637567684 4.09771 -637600452 -1.98543 -637633220 5.89032 -637567686 -11.4754 -637600454 1.98723 -637633222 4.17494 -637567688 3.50189 -637600456 -1.78917 -637633224 -5.9782 -637567690 -0.056643 -637600458 -2.38528 -637633226 7.78622 -637567693 6.12202 -637633229 2.50041 -637567697 -4.19474 -637633233 -1.80806 -637567701 -14.8473 -637633237 -9.29901 -637567705 -2.61111 -637633241 4.99692 -637567709 -0.545113 -637633245 4.37314 -637567821 -1.32553 -637633357 -7.91587 -637567825 0.704215 -637633361 8.86209 -637567829 13.7362 -637633365 -4.46277 -637567833 -4.21103 -637633369 0.20118 -637567837 1.12045 -637633373 -5.58328 -637567949 -0.978394 -637633485 2.38201 -637567953 3.95708 -637633489 0.455481 -637567957 0.612084 -637633493 6.53394 -637567961 7.72739 -637633497 -5.47149 -637567965 -6.70956 -637633501 -0.582614 -637568077 2.96541 -637633613 -7.22523 -637568081 4.60013 -637633617 0.618189 -637568085 4.61727 -637633621 1.9233 -637568089 2.32077 -637633625 -4.30743 -637568093 -2.72759 -637633629 2.46979 -637568205 -4.43672 -637633741 -5.89269 -637568209 -2.53318 -637633745 -0.657026 -637568213 4.2879 -637633749 -0.763421 -637568217 4.71251 -637633753 -0.163837 -637568221 -7.60692 -637633757 3.94279 -637568333 -1.54119 -637633869 3.37988 -637568337 0.677407 -637633873 -3.22571 -637568341 4.61652 -637633877 2.44291 -637568345 3.63121 -637633881 -0.664801 -637568349 -1.42951 -637633885 1.34971 -637568461 -2.86731 -637633997 -3.50436 -637568465 2.23212 -637634001 -11.3165 -637568469 5.68803 -637634005 2.49442 -637568473 4.27306 -637634009 1.71725 -637568477 -6.25931 -637634013 8.0085 -637571140 10.3305 -637603908 10.377 -637636676 2.72715 -637571142 -0.246426 -637603910 -5.5239 -637636678 4.00271 -637571144 -8.03618 -637603912 9.66712 -637636680 -0.92125 -637571146 -1.6769 -637603914 6.32846 -637636682 1.10504 -637571149 -2.39264 -637636685 4.54378 -637571153 9.78245 -637636689 -9.1197 -637571157 -6.94656 -637636693 -2.02348 -637571161 1.75744 -637636697 -5.24673 -637571165 7.5177 -637636701 3.30281 -637571268 -3.84015 -637604036 -5.6761 -637636804 1.89419 -637571270 -1.97124 -637604038 -2.65894 -637636806 -3.39155 -637571272 1.83247 -637604040 -5.16683 -637636808 5.79122 -637571274 -5.5427 -637604042 -1.33796 -637636810 2.72943 -637571277 -8.02047 -637636813 5.17738 -637571281 -3.51653 -637636817 -0.702168 -637571285 -8.72799 -637636821 1.58386 -637571289 -0.935545 -637636825 -0.165209 -637571293 -7.38429 -637636829 2.43781 -637571396 1.73856 -637604164 2.58247 -637636932 -0.815853 -637571398 6.09098 -637604166 -0.18728 -637636934 7.12369 -637571400 -0.492857 -637604168 4.60612 -637636936 0.779806 -637571402 9.51133 -637604170 10.2285 -637636938 -4.16142 -637571405 -1.03771 -637636941 1.41187 -637571409 2.51197 -637636945 2.78577 -637571413 4.3169 -637636949 -8.46113 -637571417 9.64182 -637636953 11.5226 -637571421 0.541407 -637636957 4.87229 -637571524 -1.26547 -637604292 -1.38268 -637637060 -5.41353 -637571526 9.81776 -637604294 1.9392 -637637062 4.81889 -637571528 5.21436 -637604296 -6.50308 -637637064 1.27169 -637571530 1.03454 -637604298 1.3652 -637637066 5.1634 -637571533 -9.4176 -637637069 1.73724 -637571537 4.35305 -637637073 2.48484 -637571541 8.21794 -637637077 -5.03874 -637571545 -8.2576 -637637081 -11.1268 -637571549 -3.55051 -637637085 1.2243 -637571652 -4.7746 -637604420 8.17418 -637637188 2.21396 -637571654 -9.48472 -637604422 7.29972 -637637190 -2.43009 -637571656 4.05655 -637604424 -3.78216 -637637192 -3.81211 -637571658 8.96921 -637604426 -3.65301 -637637194 -1.85937 -637571661 9.21826 -637637197 0.394787 -637571665 0.435809 -637637201 0.670543 -637571669 -3.26967 -637637205 3.72135 -637571673 -10.0767 -637637209 4.89864 -637571677 0.819228 -637637213 1.88208 -637571780 10.91 -637604548 -3.50288 -637637316 2.64003 -637571782 4.9765 -637604550 1.59788 -637637318 -3.66491 -637571784 -3.9753 -637604552 0.780538 -637637320 -7.59104 -637571786 0.946468 -637604554 2.56301 -637637322 0.905493 -637571789 2.75234 -637637325 -1.605 -637571793 1.64242 -637637329 5.59905 -637571797 -4.89059 -637637333 -2.9646 -637571801 -1.49782 -637637337 -9.75422 -637571805 -6.56521 -637637341 -3.2352 -637571917 3.22578 -637637453 21.1606 -637571921 4.93794 -637637457 2.05854 -637571925 13.8344 -637637461 6.67107 -637571929 -1.85681 -637637465 2.04831 -637571933 -1.02714 -637637469 -5.35897 -637572045 -1.54597 -637637581 -7.23261 -637572049 4.63658 -637637585 -6.48979 -637572053 -3.21904 -637637589 2.57039 -637572057 2.39627 -637637593 2.53041 -637572061 1.87443 -637637597 -0.134923 -637572173 6.74608 -637637709 8.87974 -637572177 4.52471 -637637713 0.938788 -637572181 -5.46798 -637637717 -6.7242 -637572185 -1.70628 -637637721 1.90151 -637572189 0.916001 -637637725 6.53431 -637572301 5.35194 -637637837 2.18995 -637572305 -2.97959 -637637841 4.74279 -637572309 -8.56076 -637637845 6.59618 -637572313 0.269783 -637637849 -2.13872 -637572317 2.53646 -637637853 -6.75826 -637572429 1.40805 -637637965 -5.98419 -637572433 5.69658 -637637969 -3.19307 -637572437 0.873466 -637637973 -2.23667 -637572441 -3.36241 -637637977 -4.45148 -637572445 1.55599 -637637981 -6.07981 -637572557 0.188331 -637638093 -0.915522 -637572561 4.05094 -637638097 -4.99674 -637572565 6.48066 -637638101 -2.27462 -637572569 -1.98494 -637638105 3.5013 -637572573 -0.838747 -637638109 -2.45643 -637575236 9.5982 -637608004 2.19387 -637640772 2.29608 -637575238 11.1321 -637608006 -5.28526 -637640774 3.16202 -637575240 1.09443 -637608008 11.0247 -637640776 -4.27966 -637575242 6.9847 -637608010 -1.02197 -637640778 -0.891213 -637575364 -2.16905 -637608132 -2.17188 -637640900 1.36086 -637575366 -1.74117 -637608134 6.30699 -637640902 -2.54467 -637575368 -2.41996 -637608136 1.45554 -637640904 -4.62635 -637575370 -12.6961 -637608138 5.83009 -637640906 6.19315 -637575492 -9.5225 -637608260 -7.44509 -637641028 4.73128 -637575494 2.38461 -637608262 4.17217 -637641030 7.2563 -637575496 10.4334 -637608264 -1.5007 -637641032 6.04736 -637575498 -5.64556 -637608266 -1.76799 -637641034 3.06889 -637575620 6.52181 -637608388 1.56696 -637641156 -3.62709 -637575622 -0.465307 -637608390 -6.90488 -637641158 -9.15821 -637575624 2.34541 -637608392 8.01526 -637641160 5.68002 -637575626 12.9686 -637608394 2.18456 -637641162 3.69238 -637575748 0.841124 -637608516 -0.628392 -637641284 -3.59603 -637575750 1.71203 -637608518 2.46098 -637641286 -6.95864 -637575752 3.83741 -637608520 -4.79698 -637641288 -7.96345 -637575754 5.79298 -637608522 2.61227 -637641290 -6.74625 -637575876 11.8253 -637608644 3.16624 -637641412 -2.51537 -637575878 5.07301 -637608646 4.04681 -637641414 0.559114 -637575880 -0.983411 -637608648 5.7311 -637641416 0.292729 -637575882 -6.93887 -637608650 2.1696 -637641418 -6.13099 -637579332 -5.98872 -637612100 -3.97657 -637644868 -7.4906 -637579334 -3.22018 -637612102 1.06915 -637644870 3.34928 -637579336 -3.49405 -637612104 1.45186 -637644872 6.14421 -637579338 -1.92218 -637612106 5.44485 -637644874 9.08542 -637579460 -11.4303 -637612228 -15.1895 -637644996 2.00763 -637579462 3.77243 -637612230 -2.01572 -637644998 4.4683 -637579464 6.00796 -637612232 11.0613 -637645000 -0.167487 -637579466 11.726 -637612234 4.40902 -637645002 8.70371 -637579588 1.71647 -637612356 3.16014 -637645124 -4.22075 -637579590 8.78713 -637612358 -3.91066 -637645126 6.24052 -637579592 -4.36018 -637612360 3.08687 -637645128 3.49377 -637579594 2.79666 -637612362 0.193993 -637645130 6.57722 -637579716 -3.77566 -637612484 -13.7725 -637645252 -0.940127 -637579718 2.60303 -637612486 6.72714 -637645254 0.681932 -637579720 -2.70878 -637612488 -0.432353 -637645256 -13.0321 -637579722 -2.96072 -637612490 -3.53864 -637645258 8.86958 -637579844 -2.8002 -637612612 0.884311 -637645380 -3.80932 -637579846 -6.88001 -637612614 1.0925 -637645382 0.880233 -637579848 0.254426 -637612616 1.84367 -637645384 -8.2322 -637579850 -0.41692 -637612618 -1.90983 -637645386 -3.76438 -637579972 -7.91822 -637612740 -0.791483 -637645508 -10.0577 -637579974 -4.53526 -637612742 -5.02862 -637645510 -2.6074 -637579976 -1.46741 -637612744 5.32592 -637645512 -0.869825 -637579978 4.2777 -637612746 -0.0579055 -637645514 -1.92479 -637583428 5.79861 -637616196 4.55392 -637648964 -3.45429 -637583430 -1.47592 -637616198 -0.249955 -637648966 5.45745 -637583432 -1.59085 -637616200 -3.69791 -637648968 -0.881328 -637583434 4.14641 -637616202 5.39055 -637648970 4.44524 -637583556 7.19789 -637616324 4.54838 -637649092 -3.02768 -637583558 -0.245642 -637616326 -4.86518 -637649094 1.53605 -637583560 -7.43886 -637616328 0.457181 -637649096 -0.74375 -637583562 -5.58049 -637616330 2.84642 -637649098 2.09959 -637583684 -1.58854 -637616452 9.20286 -637649220 1.02884 -637583686 0.722568 -637616454 -2.90618 -637649222 -5.38299 -637583688 2.96537 -637616456 1.64902 -637649224 3.33647 -637583690 -0.118509 -637616458 -8.43208 -637649226 -2.87851 -637583812 5.3231 -637616580 -7.19027 -637649348 -1.29059 -637583814 0.583078 -637616582 3.35781 -637649350 4.27675 -637583816 2.03829 -637616584 4.05944 -637649352 0.783966 -637583818 9.05561 -637616586 -10.6287 -637649354 -0.775539 -637583940 -1.17958 -637616708 6.8317 -637649476 -2.33933 -637583942 -1.40826 -637616710 -0.0233849 -637649478 3.50307 -637583944 5.12772 -637616712 -0.809561 -637649480 6.42092 -637583946 -7.45597 -637616714 -1.83291 -637649482 -4.79554 -637584068 -7.47267 -637616836 -2.60016 -637649604 3.14271 -637584070 4.29636 -637616838 -1.32213 -637649606 -0.0596502 -637584072 -5.04268 -637616840 4.41629 -637649608 8.13296 -637584074 -5.54222 -637616842 -7.60557 -637649610 2.46082 -637587524 -3.44266 -637620292 4.26491 -637653060 10.3782 -637587526 -1.8969 -637620294 -2.08028 -637653062 -0.483761 -637587528 0.482675 -637620296 -4.61901 -637653064 -0.730321 -637587530 2.33703 -637620298 3.67705 -637653066 6.24756 -637587652 9.85623 -637620420 -1.60951 -637653188 5.00972 -637587654 -1.53264 -637620422 7.10811 -637653190 12.1731 -637587656 3.89712 -637620424 -1.75103 -637653192 7.89877 -637587658 -5.14154 -637620426 -8.5663 -637653194 2.37674 -637587780 -0.661188 -637620548 1.02025 -637653316 -8.31347 -637587782 -0.343512 -637620550 -3.76709 -637653318 0.170582 -637587784 0.205904 -637620552 2.42727 -637653320 0.552751 -637587786 -6.32436 -637620554 -7.03301 -637653322 -4.80875 -637587908 5.46471 -637620676 1.11393 -637653444 6.6064 -637587910 5.64066 -637620678 1.014 -637653446 -2.35201 -637587912 -1.69866 -637620680 7.24257 -637653448 -6.32317 -637587914 -5.17034 -637620682 3.1259 -637653450 -6.30544 -637588036 0.61766 -637620804 -7.48051 -637653572 0.455599 -637588038 -0.351461 -637620806 3.53202 -637653574 -3.20235 -637588040 4.05828 -637620808 -9.66692 -637653576 7.41173 -637588042 5.09441 -637620810 -3.98497 -637653578 -1.16998 -637588164 1.73733 -637620932 -3.45249 -637653700 3.43009 -637588166 0.0165831 -637620934 8.51736 -637653702 2.98251 -637588168 -0.201005 -637620936 4.29028 -637653704 -2.06712 -637588170 4.89844 -637620938 8.04464 -637653706 8.80197 -637567085 10.9439 -637632621 -4.85257 -637567089 3.16693 -637632625 -7.18755 -637567093 -5.34454 -637632629 2.28676 -637567097 -1.03622 -637632633 -8.79231 -637567101 -3.25807 -637632637 -3.67395 -637567213 -5.05096 -637632749 -6.38775 -637567217 -7.81795 -637632753 -8.31542 -637567221 2.00943 -637632757 -0.267547 -637567225 -0.642453 -637632761 4.26405 -637567229 7.16563 -637632765 5.29686 -637567341 -1.39233 -637632877 -3.77469 -637567345 2.28371 -637632881 -1.03289 -637567349 3.74006 -637632885 -1.00025 -637567353 4.10139 -637632889 -1.14653 -637567357 -3.72207 -637632893 -0.696971 -637567469 -5.20967 -637633005 8.33159 -637567473 4.69662 -637633009 2.7744 -637567477 -6.35459 -637633013 2.31296 -637567481 -4.18405 -637633017 -8.00328 -637567485 3.01621 -637633021 -7.79327 -637567597 9.46288 -637633133 16.1628 -637567601 1.90471 -637633137 -3.72418 -637567605 13.1425 -637633141 -5.92364 -637567609 5.44195 -637633145 2.48264 -637567613 8.76035 -637633149 -1.52369 -637567725 4.8839 -637633261 5.5538 -637567729 -1.82259 -637633265 -1.87012 -637567733 9.41833 -637633269 2.09551 -637567737 -1.81504 -637633273 2.40416 -637567741 -5.82343 -637633277 3.40344 -637567853 -0.605268 -637633389 -9.52387 -637567857 -10.165 -637633393 -9.38622 -637567861 -4.00616 -637633397 -2.17357 -637567865 -0.835445 -637633401 3.13114 -637567869 7.77424 -637633405 6.05917 -637567981 1.78746 -637633517 3.05524 -637567985 -6.41495 -637633521 -7.24695 -637567989 -4.80658 -637633525 4.40116 -637567993 -4.3298 -637633529 -0.904969 -637567997 -1.04535 -637633533 -2.39584 -637568109 1.80052 -637633645 1.23029 -637568113 4.6312 -637633649 3.91214 -637568117 5.24665 -637633653 -2.74272 -637568121 0.36085 -637633657 5.10848 -637568125 -2.47278 -637633661 -2.20196 -637568237 6.82792 -637633773 2.04754 -637568241 1.71844 -637633777 -4.0589 -637568245 4.60622 -637633781 0.281126 -637568249 -8.81348 -637633785 10.475 -637568253 -0.00163626 -637633789 3.5289 -637568365 2.72638 -637633901 4.97607 -637568369 7.52884 -637633905 -3.51544 -637568373 0.707639 -637633909 0.949534 -637568377 -5.80981 -637633913 3.75482 -637568381 -0.555195 -637633917 7.05815 -637568493 -2.20433 -637634029 -10.6383 -637568497 1.29303 -637634033 1.47295 -637568501 1.27062 -637634037 5.1098 -637568505 -4.91862 -637634041 -3.84983 -637568509 0.798554 -637634045 -0.57096 -637571181 4.79221 -637636717 4.18888 -637571185 -2.43518 -637636721 7.54256 -637571189 1.94476 -637636725 -7.44005 -637571193 -1.95883 -637636729 -2.15249 -637571197 -4.60316 -637636733 9.81809 -637571309 1.36933 -637636845 4.80106 -637571313 6.21126 -637636849 8.55153 -637571317 11.0722 -637636853 -1.95764 -637571321 -2.50082 -637636857 1.1757 -637571325 2.60303 -637636861 1.64552 -637571437 -4.82029 -637636973 7.0917 -637571441 3.1754 -637636977 -4.37514 -637571445 0.604749 -637636981 -11.1681 -637571449 -6.18296 -637636985 2.5366 -637571453 1.00519 -637636989 0.503773 -637571565 8.43662 -637637101 2.91062 -637571569 1.95163 -637637105 0.431577 -637571573 -0.897824 -637637109 -2.57969 -637571577 -6.65637 -637637113 -1.78498 -637571581 -10.0546 -637637117 -0.0460516 -637571693 4.8107 -637637229 -5.62636 -637571697 -5.30239 -637637233 -3.17359 -637571701 0.324077 -637637237 0.752312 -637571705 3.8515 -637637241 -2.05431 -637571709 3.09462 -637637245 8.16815 -637571821 -4.27642 -637637357 -1.59691 -637571825 -9.33393 -637637361 9.17965 -637571829 11.069 -637637365 1.75163 -637571833 -1.99258 -637637369 4.91932 -637571837 -8.4639 -637637373 5.37045 -637571949 2.51284 -637637485 0.80714 -637571953 0.390914 -637637489 -1.94886 -637571957 -11.4699 -637637493 2.15421 -637571961 8.43792 -637637497 8.90405 -637571965 -3.36245 -637637501 -0.687769 -637572077 -7.88435 -637637613 4.53539 -637572081 -2.66111 -637637617 7.31574 -637572085 -3.61703 -637637621 2.19413 -637572089 -1.361 -637637625 5.47526 -637572093 -7.60882 -637637629 -1.89811 -637572333 0.146311 -637637869 -0.163403 -637572337 8.0623 -637637873 0.396415 -637572341 -4.14593 -637637877 1.25117 -637572345 -3.60442 -637637881 -2.08299 -637572349 2.79398 -637637885 -5.92851 -637572589 4.59003 -637638125 -6.27569 -637572593 -5.15753 -637638129 -5.0917 -637572597 2.3198 -637638133 11.8918 -637572601 4.03088 -637638137 3.76169 -637572605 1.23695 -637638141 -6.50976 -637575661 -14.0394 -637641197 2.31152 -637575665 6.12977 -637641201 -3.89852 -637575669 4.15378 -637641205 0.882231 -637575673 -5.60964 -637641209 -2.119 -637575677 7.5783 -637641213 -0.242101 -637579757 -1.41596 -637645293 -1.05882 -637579761 4.59742 -637645297 0.523507 -637579765 5.48184 -637645301 -1.41796 -637579769 -2.53847 -637645305 -2.44634 -637579773 -1.85998 -637645309 -5.42834 -574914560 1.4816 -575176704 1.15087 -575438848 1.19551 -575700992 0.965557 -575963136 0.223023 -576225280 -1.02309 -576487424 1.58335 -576749568 0.0435336 -577011712 -0.585078 -577273856 0.37937 -577536000 0.501323 -577798144 1.59442 -579108864 0.04829 -579371008 2.24735 -579633152 1.21881 -579895296 2.29907 -580157440 0.585826 -580419584 -0.371138 -580681728 -0.784067 -580943872 -0.780065 -581206016 0.900997 -581468160 1.63037 -581730304 1.91388 -581992448 -0.680433 -583303168 0.478206 -583565312 -0.729319 -583827456 0.506768 -584089600 0.835964 -584351744 0.533669 -584613888 1.52413 -584876032 0.783291 -585138176 1.37809 -585400320 1.63119 -585662464 2.97563 -585924608 2.33858 -586186752 -0.583533 -587497472 0.734584 -587759616 -0.183901 -588021760 1.32067 -588283904 0.38393 -590643200 0.025526 -588546048 0.628978 -588808192 0.655558 -589070336 -0.358367 -589332480 0.405967 -589594624 1.245 -589856768 0.000832399 -590905344 1.2446 -590118912 -0.837512 -590381056 -1.01581 -574947328 0.77815 -575209472 3.02376 -575471616 -0.382007 -575733760 0.113068 -575995904 1.07598 -576258048 0.0902802 -576520192 1.0383 -576782336 1.47143 -577044480 1.62586 -577306624 0.858101 -577568768 -0.277764 -577830912 -0.936056 -579141632 -1.44164 -579403776 0.515206 -579665920 0.796663 -579928064 0.712763 -580190208 0.902406 -580452352 -1.11337 -580714496 1.67182 -580976640 -1.75267 -581238784 0.404312 -581500928 -0.458022 -581763072 0.8757 -582025216 0.627996 -583335936 0.174612 -583598080 0.155462 -583860224 0.347457 -584122368 0.727693 -584384512 -1.21808 -584646656 0.881855 -584908800 -1.57624 -585170944 1.23444 -585433088 1.18804 -585695232 -0.900637 -585957376 -0.850452 -586219520 0.85038 -587530240 0.402755 -587792384 1.15312 -588054528 -0.593254 -588316672 -1.30475 -590675968 -0.599093 -588578816 -1.81122 -588840960 0.804804 -589103104 1.30828 -589365248 1.83105 -589627392 1.0785 -589889536 1.83589 -590938112 1.15603 -590151680 1.73046 -590413824 -1.26972 -574980096 0.352297 -576028672 0.116715 -577077248 1.36887 -575242240 0.482301 -576290816 0.504571 -577339392 2.04972 -575504384 0.925508 -576552960 0.828655 -577601536 -0.935985 -575766528 -0.186126 -576815104 1.15827 -577863680 0.7047 -579174400 0.444614 -580222976 1.0881 -581271552 1.06957 -579436544 0.960754 -580485120 0.857428 -581533696 1.2123 -579698688 0.388513 -580747264 0.137898 -581795840 -0.583071 -579960832 1.11219 -581009408 1.31436 -582057984 0.509476 -583368704 1.1675 -584417280 0.490363 -585465856 -1.05861 -583630848 -0.768873 -584679424 0.181837 -585728000 -0.0141009 -583892992 2.16157 -584941568 1.49475 -585990144 2.4093 -584155136 -0.891009 -585203712 -1.04179 -586252288 -0.568035 -587563008 -0.341604 -587825152 1.83629 -588087296 1.81688 -588349440 0.825708 -590708736 1.43302 -588611584 0.0464914 -588873728 0.175284 -589135872 0.407462 -589398016 0.325634 -589660160 1.1291 -589922304 0.606164 -590970880 0.838954 -590184448 0.58415 -590446592 -1.15643 -575012864 0.357422 -575275008 0.987336 -575537152 0.776167 -575799296 2.16154 -576061440 0.601252 -576323584 -0.0025591 -576585728 -0.0711347 -576847872 0.250211 -577110016 -0.282646 -577372160 0.391809 -577634304 0.743716 -577896448 0.274828 -579207168 -1.1328 -579469312 2.31447 -579731456 2.02462 -579993600 1.30062 -580255744 0.456765 -580517888 0.124148 -580780032 0.803798 -581042176 -0.287346 -581304320 0.949558 -581566464 0.67316 -581828608 1.10189 -582090752 1.28785 -583401472 2.20478 -583663616 -0.22223 -583925760 -1.20568 -584187904 0.0149705 -584450048 0.793184 -584712192 -0.147296 -584974336 0.757433 -585236480 1.53418 -585498624 -0.102433 -585760768 1.63918 -586022912 0.388957 -586285056 0.109066 -587595776 1.57753 -587857920 1.49463 -588120064 1.81493 -588382208 -0.833509 -590741504 -0.656034 -588644352 -0.570791 -588906496 0.396371 -589168640 0.175378 -589430784 0.128522 -589692928 0.514887 -589955072 0.247087 -591003648 2.001 -590217216 1.54964 -590479360 1.90081 -575045632 -1.03644 -575307776 -1.21489 -575569920 -0.020565 -575832064 1.83937 -576094208 -0.0764598 -576356352 0.788257 -576618496 0.731987 -576880640 -1.03018 -577142784 2.75401 -577404928 0.560813 -577667072 1.23473 -577929216 0.694355 -579239936 -0.851857 -579502080 1.01199 -579764224 0.800888 -580026368 0.0867209 -580288512 2.10413 -580550656 1.605 -580812800 1.65063 -581074944 2.96054 -581337088 1.52459 -581599232 -0.386601 -581861376 0.279763 -582123520 1.16737 -583434240 -0.233972 -583696384 1.79449 -583958528 1.66452 -584220672 -0.813391 -584482816 0.773123 -584744960 0.115383 -585007104 1.12577 -585269248 1.3905 -585531392 0.0127318 -585793536 0.727783 -586055680 0.543869 -586317824 0.643478 -587628544 -0.89577 -587890688 0.0989628 -588152832 2.05043 -588414976 0.203489 -590774272 1.32207 -588677120 1.45415 -588939264 0.57996 -589201408 0.382282 -589463552 2.67474 -589725696 0.244932 -589987840 -0.438003 -591036416 -1.41455 -590249984 1.40473 -590512128 2.35476 -604017672 -0.747412 -604017744 2.11434 -604017752 -0.367206 -604017760 -0.741788 -604017768 0.816503 -604017776 0.257917 -604017784 -1.61957 -604017792 0.492985 -604017800 -1.65446 -604017808 0.881928 -604017816 1.83025 -604017680 -0.622634 -604017824 1.84239 -604017832 -0.00210472 -604017840 -0.144927 -604017848 -1.27232 -604017856 -0.574888 -604017864 -1.58616 -604017872 -0.315006 -604017880 1.64256 -604017888 -0.15866 -604017896 -0.35138 -604017688 -1.27106 -604017904 0.0804429 -604017912 -0.398203 -604017920 1.03885 -604017928 1.85043 -604017936 0.297691 -604017944 -0.651275 -604017952 1.0453 -604017696 2.31682 -604017704 0.525299 -604017712 1.25912 -604017720 0.1758 -604017728 -0.809983 -604017736 0.422992 -604018184 2.13154 -604018256 -0.160399 -604018264 -0.547289 -604018272 0.155706 -604018280 -0.839041 -604018288 -0.440843 -604018296 -1.87033 -604018304 0.235274 -604018312 0.30939 -604018320 -0.137865 -604018328 0.205751 -604018192 0.612084 -604018336 -0.289135 -604018344 0.238289 -604018352 0.13601 -604018360 1.20405 -604018368 1.49587 -604018376 -0.445203 -604018384 0.49562 -604018392 0.901932 -604018400 0.0127786 -604018408 0.3465 -604018200 1.48825 -604018416 1.81686 -604018424 -0.324473 -604018432 -1.76123 -604018440 2.28903 -604018448 0.113197 -604018456 -0.305627 -604018464 -0.0742065 -604018208 0.0856636 -604018216 -0.824123 -604018224 -1.79446 -604018232 0.240421 -604018240 -0.392399 -604018248 -0.538427 -604018696 0.244599 -604018768 -0.58461 -604018776 -1.30745 -604018784 0.937849 -604018792 0.219265 -604018800 -0.503902 -604018808 0.587169 -604018816 -0.648749 -604018824 -0.900399 -604018832 0.712949 -604018840 1.22379 -604018704 0.245697 -604018848 -0.0821123 -604018856 0.581357 -604018864 -1.58309 -604018872 -0.469881 -604018880 -1.31963 -604018888 1.29364 -604018896 -0.308163 -604018904 1.83054 -604018912 1.11253 -604018920 0.857127 -604018712 0.539802 -604018928 -0.491196 -604018936 0.739698 -604018944 0.333891 -604018952 -0.290787 -604018960 -1.41559 -604018968 -0.476439 -604018976 1.92291 -604018720 0.067465 -604018728 0.390015 -604018736 -1.01674 -604018744 1.75671 -604018752 -0.217459 -604018760 -0.827597 -604021256 1.08337 -604021328 -0.048234 -604021336 -1.82011 -604021344 2.16225 -604021352 0.275204 -604021360 1.34354 -604021368 -0.24149 -604021376 -0.035944 -604021384 0.189351 -604021392 -1.45376 -604021264 0.295136 -604021272 -0.664037 -604021280 0.43865 -604021288 -0.00902675 -604021296 -0.251902 -604021304 -0.322987 -604021312 -0.638415 -604021320 1.88503 -604021768 -0.439065 -604021840 0.180166 -604021848 -1.66991 -604021856 -0.931346 -604021864 -1.42266 -604021872 0.503882 -604021880 -0.934735 -604021888 -0.425118 -604021896 0.849743 -604021904 -0.674678 -604021912 -1.78805 -604021776 -0.198858 -604021920 -0.213637 -604021928 1.67056 -604021936 2.12001 -604021944 0.303654 -604021952 0.739858 -604021960 2.07508 -604021968 0.612264 -604021976 -1.25785 -604021984 1.29412 -604021992 0.535546 -604021784 -0.482285 -604022000 -2.05821 -604022008 -2.98202 -604022016 0.200096 -604022024 0.165692 -604022032 -1.22116 -604022040 -1.09853 -604022048 -1.15976 -604021792 -0.917646 -604021800 -0.364079 -604021808 -1.05961 -604021816 -0.302541 -604021824 -1.47541 -604021832 -0.596911 -604025352 0.377606 -604025424 -0.609038 -604025432 -1.94591 -604025440 1.44146 -604025448 -0.0122539 -604025456 0.130664 -604025464 -0.644908 -604025472 0.448587 -604025480 0.495391 -604025488 0.144433 -604025360 -0.435815 -604025368 0.373845 -604025376 0.264609 -604025384 0.602992 -604025392 1.68767 -604025400 -0.00991631 -604025408 -0.102934 -604025416 -0.466201 -604025864 1.24191 -604025936 -1.18427 -604025944 -0.99246 -604025952 -1.66524 -604025960 -0.994203 -604025968 2.0694 -604025976 2.45587 -604025984 -1.47658 -604025992 0.0552066 -604026000 0.248039 -604026008 0.841863 -604025872 0.654142 -604026016 -1.8237 -604026024 0.141449 -604026032 0.148777 -604026040 -0.980293 -604026048 -0.303472 -604026056 -0.0786655 -604026064 -1.88778 -604026072 -0.170068 -604026080 -0.446993 -604026088 -1.16093 -604025880 -0.599332 -604026096 0.57865 -604026104 -0.359656 -604026112 0.88545 -604026120 0.372144 -604026128 -0.424142 -604026136 0.287629 -604026144 -0.935984 -604025888 0.11699 -604025896 -0.0521623 -604025904 -0.901195 -604025912 0.910813 -604025920 1.79955 -604025928 0.254747 -604029448 -1.15146 -604029520 -0.24039 -604029528 -0.189052 -604029536 1.02941 -604029544 -0.285932 -604029552 0.849706 -604029560 1.00424 -604029568 0.408177 -604029576 -1.1069 -604029584 0.165629 -604029456 1.95291 -604029464 -1.71136 -604029472 0.27577 -604029480 1.22009 -604029488 0.356263 -604029496 2.18166 -604029504 1.91645 -604029512 -1.00778 -604029960 0.964629 -604030032 -0.000220725 -604030040 1.53195 -604030048 0.319498 -604030056 1.1741 -604030064 -0.948035 -604030072 -0.32346 -604030080 0.00715619 -604030088 1.72774 -604030096 0.948863 -604030104 -0.658851 -604029968 -0.929223 -604030112 -0.73252 -604030120 0.796749 -604030128 1.31719 -604030136 0.381213 -604030144 1.92842 -604030152 -0.578217 -604030160 0.263609 -604030168 1.95976 -604030176 -1.37759 -604030184 -0.926582 -604029976 -1.09994 -604030192 -0.477964 -604030200 -0.339108 -604030208 0.678254 -604030216 -0.454256 -604030224 1.03971 -604030232 1.61455 -604030240 -0.498027 -604029984 -0.522683 -604029992 0.383873 -604030000 -0.861039 -604030008 -1.70948 -604030016 0.853293 -604030024 -0.237771 -604050440 -0.521464 -604050512 -0.488043 -604050520 0.137355 -604050528 0.0461277 -604050536 -0.38112 -604050544 -0.668602 -604050552 -2.39012 -604050560 -2.86945 -604050568 -1.15822 -604050576 0.0289681 -604050584 -0.150598 -604050448 -0.0466519 -604050592 0.651795 -604050600 -0.665237 -604050608 0.945631 -604050616 0.743595 -604050624 -0.106427 -604050632 -0.390106 -604050640 0.193084 -604050648 0.679766 -604050656 0.924132 -604050664 1.47249 -604050456 -0.231041 -604050672 -1.76336 -604050680 0.0530994 -604050688 -0.673563 -604050696 0.183783 -604050704 -0.542686 -604050712 0.831796 -604050720 1.98085 -604050464 -0.471567 -604050472 -0.956991 -604050480 -1.00802 -604050488 -0.147604 -604050496 0.219663 -604050504 1.52349 -604050952 -0.162731 -604051024 0.155692 -604051032 1.09008 -604051040 -1.19086 -604051048 -0.397087 -604051056 1.41474 -604051064 -1.06385 -604051072 0.947344 -604051080 0.851732 -604051088 0.748917 -604051096 1.45315 -604050960 3.16297 -604051104 -0.338165 -604051112 -1.2001 -604051120 -0.0844665 -604051128 0.877521 -604051136 1.55967 -604051144 -1.72922 -604051152 0.335576 -604051160 -0.162815 -604051168 -0.125093 -604051176 -0.60045 -604050968 0.214323 -604051184 -1.36512 -604051192 0.150283 -604051200 0.268566 -604051208 0.341079 -604051216 -0.743962 -604051224 0.417663 -604051232 0.944757 -604050976 0.0205936 -604050984 -1.08243 -604050992 -0.183656 -604051000 0.427201 -604051008 -0.0786786 -604051016 -1.37655 -604051464 1.80345 -604051536 0.613426 -604051544 0.021484 -604051552 -0.225418 -604051560 0.304345 -604051568 1.89221 -604051576 1.5109 -604051584 0.998976 -604051592 1.11096 -604051600 -0.717739 -604051608 0.675623 -604051472 -0.119593 -604051616 0.0156988 -604051624 1.06334 -604051632 -0.202636 -604051640 -0.268824 -604051648 0.803301 -604051656 1.40557 -604051664 -0.658838 -604051672 -0.615191 -604051680 -1.21345 -604051688 0.129743 -604051480 -0.842927 -604051696 2.10897 -604051704 0.944944 -604051712 0.658792 -604051720 -0.944244 -604051728 0.225104 -604051736 0.676393 -604051744 -1.61431 -604051488 0.275854 -604051496 1.04106 -604051504 2.03363 -604051512 0.247035 -604051520 1.89062 -604051528 -0.0368116 -604054024 -1.47248 -604054096 -0.536961 -604054104 0.647325 -604054112 0.198795 -604054120 0.0711933 -604054128 -1.07379 -604054136 0.161752 -604054144 0.0852185 -604054152 0.518203 -604054160 -1.5295 -604054032 -0.644401 -604054040 0.311726 -604054048 -1.29373 -604054056 -0.559863 -604054064 0.696683 -604054072 0.451588 -604054080 0.703991 -604054088 -0.768621 -604054536 0.460462 -604054608 0.34539 -604054616 0.663968 -604054624 -0.613825 -604054632 1.24186 -604054640 0.675246 -604054648 1.37945 -604054656 0.892173 -604054664 0.158644 -604054672 0.157965 -604054680 0.0823201 -604054544 0.497764 -604054688 -0.192224 -604054696 -1.08168 -604054704 1.16042 -604054712 1.34181 -604054720 -0.32399 -604054728 0.579327 -604054736 -0.57278 -604054744 -1.83309 -604054752 -0.0197497 -604054760 3.19371 -604054552 0.122734 -604054768 1.84478 -604054776 -0.385666 -604054784 1.07261 -604054792 -0.397012 -604054800 -1.4666 -604054808 -0.517326 -604054816 -0.0179102 -604054560 -0.0423333 -604054568 -0.312391 -604054576 0.27353 -604054584 0.41307 -604054592 1.42923 -604054600 0.654553 -604058120 0.352229 -604058192 -1.74424 -604058200 -0.344782 -604058208 -1.78398 -604058216 -2.44587 -604058224 1.71197 -604058232 -0.968967 -604058240 -0.903038 -604058248 -0.539815 -604058256 -0.21737 -604058128 0.266333 -604058136 0.309896 -604058144 1.04117 -604058152 -0.44394 -604058160 -0.703057 -604058168 1.02004 -604058176 -1.06699 -604058184 1.60189 -604058632 0.702471 -604058704 -0.565101 -604058712 0.905924 -604058720 1.68986 -604058728 -1.10964 -604058736 1.09278 -604058744 -0.831218 -604058752 -2.30393 -604058760 -0.980352 -604058768 0.937099 -604058776 -0.0112871 -604058640 0.160891 -604058784 -0.21495 -604058792 0.0965705 -604058800 0.753165 -604058808 -0.463806 -604058816 0.0348022 -604058824 -0.542185 -604058832 -0.628563 -604058840 1.37116 -604058848 -0.495301 -604058856 -0.356918 -604058648 0.885219 -604058864 0.569657 -604058872 1.66248 -604058880 -0.847595 -604058888 2.46648 -604058896 -0.0836056 -604058904 0.581149 -604058912 -1.66792 -604058656 -0.0952022 -604058664 -0.26986 -604058672 0.353998 -604058680 -1.10148 -604058688 0.298206 -604058696 -0.684225 -604062216 1.13987 -604062288 -0.670674 -604062296 1.61364 -604062304 -0.898036 -604062312 0.104853 -604062320 1.13573 -604062328 -0.186924 -604062336 1.51388 -604062344 -0.836594 -604062352 -0.544603 -604062224 -0.978412 -604062232 -0.513883 -604062240 -1.16332 -604062248 -0.117236 -604062256 -0.672903 -604062264 0.0198159 -604062272 1.90088 -604062280 0.170261 -604062728 -1.56735 -604062800 0.561224 -604062808 -0.221612 -604062816 0.461516 -604062824 -0.0539649 -604062832 -0.236176 -604062840 1.37834 -604062848 -1.65948 -604062856 0.947621 -604062864 -1.29676 -604062872 -0.678323 -604062736 1.55504 -604062880 0.634817 -604062888 -0.30638 -604062896 1.24868 -604062904 -1.94895 -604062912 -1.79885 -604062920 0.812137 -604062928 0.00813503 -604062936 0.384534 -604062944 -0.0726509 -604062952 2.83231 -604062744 -0.172606 -604062960 2.84618 -604062968 -0.250267 -604062976 -2.22286 -604062984 -0.844648 -604062992 2.3677 -604063000 -2.02831 -604063008 -0.731793 -604062752 -0.826737 -604062760 -0.460668 -604062768 0.549934 -604062776 -0.0616808 -604062784 0.249816 -604062792 -0.440363 diff --git a/SUSYBSMAnalysis/HSCP/data/MuonTimeShift_2012.txt b/SUSYBSMAnalysis/HSCP/data/MuonTimeShift_2012.txt deleted file mode 100644 index a6fc4e8f17532..0000000000000 --- a/SUSYBSMAnalysis/HSCP/data/MuonTimeShift_2012.txt +++ /dev/null @@ -1,3106 +0,0 @@ -637566980 -0.72904 -637599748 0.751866 -637632516 -3.08868 -637566982 2.89678 -637599750 3.78131 -637632518 -3.31001 -637566984 -15.8326 -637599752 5.06673 -637632520 0.477014 -637566986 -5.98424 -637599754 2.01664 -637632522 -5.37623 -637566989 5.22446 -637632525 2.10916 -637566993 -4.99516 -637632529 -1.0636 -637566997 5.94255 -637632533 -3.5434 -637567001 -7.88919 -637632537 4.53428 -637567005 0.483349 -637632541 0.953273 -637567108 2.04407 -637599876 -1.50133 -637632644 6.86335 -637567110 -1.49482 -637599878 -5.22636 -637632646 9.36564 -637567112 3.80643 -637599880 4.73382 -637632648 11.3872 -637567114 5.03791 -637599882 4.28121 -637632650 5.27042 -637567117 4.08935 -637632653 -0.598757 -637567121 4.85885 -637632657 -5.99767 -637567125 8.22207 -637632661 -4.11636 -637567129 -3.59051 -637632665 0.510182 -637567133 2.96879 -637632669 3.91209 -637567236 5.13482 -637600004 6.27191 -637632772 1.68296 -637567238 2.65263 -637600006 1.20065 -637632774 -7.74463 -637567240 1.32103 -637600008 -6.36303 -637632776 1.73196 -637567242 -5.74862 -637600010 3.54251 -637632778 -2.37959 -637567245 -1.10433 -637632781 1.77243 -637567249 0.277401 -637632785 3.13192 -637567253 3.1739 -637632789 -0.162673 -637567257 0.474856 -637632793 -6.61568 -637567261 9.89509 -637632797 -4.01276 -637567364 -10.075 -637600132 -3.88336 -637632900 -6.02672 -637567366 -4.94478 -637600134 9.7624 -637632902 4.127 -637567368 9.39407 -637600136 -4.82866 -637632904 -8.27168 -637567370 0.0875797 -637600138 -3.50607 -637632906 -1.75826 -637567373 -0.752504 -637632909 -0.315173 -637567377 -7.18394 -637632913 0.246236 -637567381 6.35358 -637632917 -1.90547 -637567385 0.127157 -637632921 1.62335 -637567389 1.645 -637632925 8.28623 -637567492 0.888103 -637600260 -3.18296 -637633028 -7.74467 -637567494 4.60932 -637600262 2.20155 -637633030 0.270889 -637567496 -7.35084 -637600264 -12.5755 -637633032 6.3988 -637567498 1.66043 -637600266 -0.439591 -637633034 3.37895 -637567501 3.69627 -637633037 1.11327 -637567505 -4.98262 -637633041 -0.0748442 -637567509 -3.1435 -637633045 2.90777 -637567513 0.574352 -637633049 1.30413 -637567517 -5.01319 -637633053 -1.4189 -637567620 -4.7586 -637600388 3.93486 -637633156 -4.29063 -637567622 1.53539 -637600390 1.42506 -637633158 -1.01274 -637567624 -2.07096 -637600392 1.72401 -637633160 -4.41233 -637567626 -4.17218 -637600394 -2.06992 -637633162 -6.02457 -637567629 9.04005 -637633165 2.01198 -637567633 -5.10246 -637633169 -3.54648 -637567637 -1.64826 -637633173 6.04635 -637567641 -14.1566 -637633177 7.28019 -637567645 2.35225 -637633181 8.40755 -637567757 -0.162262 -637633293 5.89336 -637567761 7.26657 -637633297 -0.183835 -637567765 -10.1971 -637633301 -4.65111 -637567769 2.61031 -637633305 -5.91618 -637567773 -9.63492 -637633309 -10.9307 -637567885 4.36425 -637633421 2.53054 -637567889 5.59482 -637633425 9.0323 -637567893 6.26689 -637633429 0.569368 -637567897 2.34297 -637633433 -3.2902 -637567901 3.27669 -637633437 2.42819 -637568013 -2.96477 -637633549 3.00492 -637568017 3.80757 -637633553 -9.8236 -637568021 -5.52715 -637633557 -1.72392 -637568025 7.13483 -637633561 -3.74342 -637568029 2.21271 -637633565 -0.157651 -637568141 -0.519458 -637633677 8.24951 -637568145 -6.3418 -637633681 3.90107 -637568149 3.26799 -637633685 -4.74868 -637568153 1.5872 -637633689 -1.23906 -637568157 -0.116056 -637633693 -2.11704 -637568269 2.24782 -637633805 -2.16358 -637568273 -1.2751 -637633809 -0.00902959 -637568277 -0.335068 -637633813 -0.253205 -637568281 -0.446458 -637633817 4.89864 -637568285 -1.96374 -637633821 -2.14506 -637568397 -2.83293 -637633933 -2.42395 -637568401 9.0715 -637633937 -2.68388 -637568405 6.49865 -637633941 1.89858 -637568409 -3.97368 -637633945 -12.3506 -637568413 -6.2196 -637633949 -1.89172 -637571076 -1.1403 -637603844 1.10725 -637636612 1.79909 -637571078 -2.95447 -637603846 2.73138 -637636614 7.51953 -637571080 2.21849 -637603848 1.1269 -637636616 -0.794894 -637571082 1.34806 -637603850 -7.83788 -637636618 -14.6231 -637571204 -4.31522 -637603972 -3.97552 -637636740 8.32983 -637571206 2.24756 -637603974 -7.33292 -637636742 1.77927 -637571208 -6.94482 -637603976 -3.76161 -637636744 2.29647 -637571210 -1.35038 -637603978 -3.09041 -637636746 -6.0239 -637571332 -1.47936 -637604100 3.86798 -637636868 -3.45065 -637571334 2.52322 -637604102 -9.82199 -637636870 -3.24489 -637571336 1.7548 -637604104 3.91071 -637636872 -3.6422 -637571338 -3.05672 -637604106 -1.25212 -637636874 -2.44514 -637571460 7.56308 -637604228 -1.99347 -637636996 -1.40534 -637571462 -2.26608 -637604230 -3.0403 -637636998 -6.27645 -637571464 -7.93763 -637604232 -3.35107 -637637000 6.38266 -637571466 -3.4678 -637604234 1.02615 -637637002 8.01518 -637571588 -1.58823 -637604356 0.42667 -637637124 0.475554 -637571590 -2.37306 -637604358 -2.27987 -637637126 -0.393371 -637571592 5.43566 -637604360 -7.35797 -637637128 6.64206 -637571594 -7.3253 -637604362 -4.32862 -637637130 1.73354 -637571716 2.26637 -637604484 -3.7601 -637637252 3.42311 -637571718 3.91246 -637604486 1.23032 -637637254 9.33363 -637571720 -2.756 -637604488 2.43358 -637637256 -6.61973 -637571722 -7.38155 -637604490 -0.956365 -637637258 3.71786 -637575172 -6.44996 -637607940 -1.20885 -637640708 -5.05424 -637575174 -4.92963 -637607942 9.59817 -637640710 1.31057 -637575176 -1.96524 -637607944 0.213422 -637640712 -6.44962 -637575178 -0.261123 -637607946 5.31333 -637640714 6.00186 -637575300 -0.27433 -637608068 -6.71869 -637640836 1.46295 -637575302 -4.88039 -637608070 -0.904205 -637640838 -6.42695 -637575304 -3.53801 -637608072 -2.0487 -637640840 3.53903 -637575306 -1.77283 -637608074 -2.65845 -637640842 -7.43632 -637575428 -5.28034 -637608196 -1.72725 -637640964 -10.7984 -637575430 -5.94576 -637608198 -1.35529 -637640966 -7.14031 -637575432 1.37921 -637608200 3.29785 -637640968 -4.96603 -637575434 0.549718 -637608202 -4.36056 -637640970 -0.383644 -637575556 8.44028 -637608324 3.89826 -637641092 -2.09576 -637575558 0.311075 -637608326 -4.7998 -637641094 4.23887 -637575560 -8.33249 -637608328 -0.665461 -637641096 3.74078 -637575562 0.720088 -637608330 -3.20972 -637641098 1.43231 -637575684 -6.28414 -637608452 -6.77141 -637641220 2.96281 -637575686 -3.61501 -637608454 5.17801 -637641222 1.2803 -637575688 5.1884 -637608456 -4.0897 -637641224 4.69159 -637575690 -4.06526 -637608458 0.902667 -637641226 0.979644 -637575812 -7.59543 -637608580 1.62717 -637641348 7.28276 -637575814 -8.48488 -637608582 0.863181 -637641350 5.78599 -637575816 -5.80811 -637608584 8.10835 -637641352 2.63874 -637575818 -3.61333 -637608586 7.73547 -637641354 0.232484 -637579268 0.569195 -637612036 -4.90085 -637644804 3.65987 -637579270 5.09842 -637612038 -1.93183 -637644806 0.14191 -637579272 5.26351 -637612040 -5.10495 -637644808 -8.13555 -637579274 5.27278 -637612042 3.61299 -637644810 -4.11142 -637579396 7.17666 -637612164 1.44256 -637644932 8.03853 -637579398 0.298864 -637612166 0.98907 -637644934 2.06653 -637579400 -0.293733 -637612168 1.06669 -637644936 5.94621 -637579402 -1.26871 -637612170 -0.147406 -637644938 4.23018 -637579524 -2.65906 -637612292 -9.30993 -637645060 0.665584 -637579526 -1.85425 -637612294 -1.01349 -637645062 5.55966 -637579528 -4.07636 -637612296 -1.79928 -637645064 0.31843 -637579530 -5.79589 -637612298 -4.25568 -637645066 -10.2703 -637579652 2.99474 -637612420 -9.01838 -637645188 4.07151 -637579654 -4.5159 -637612422 4.61227 -637645190 -8.29405 -637579656 -8.11729 -637612424 -1.88953 -637645192 -3.65522 -637579658 -3.3923 -637612426 -9.26397 -637645194 4.6759 -637579780 0.091992 -637612548 0.9064 -637645316 -6.88438 -637579782 -2.75032 -637612550 0.770629 -637645318 -9.32864 -637579784 -4.94746 -637612552 -3.59396 -637645320 1.77031 -637579786 4.58101 -637612554 -2.17755 -637645322 6.64259 -637579908 5.15406 -637612676 -5.51375 -637645444 0.331484 -637579910 2.17587 -637612678 -5.48093 -637645446 0.22376 -637579912 -6.54346 -637612680 -1.33904 -637645448 1.51448 -637579914 2.47997 -637612682 -1.21564 -637645450 2.84633 -637583364 3.68446 -637616132 -7.30981 -637648900 0.402138 -637583366 -4.42081 -637616134 -2.84272 -637648902 8.69199 -637583368 4.14291 -637616136 1.38079 -637648904 7.70392 -637583370 4.8566 -637616138 -1.78812 -637648906 -1.15877 -637583492 -5.37246 -637616260 -0.771772 -637649028 -4.94066 -637583494 -10.3845 -637616262 -8.13605 -637649030 3.24537 -637583496 -2.24693 -637616264 -6.82091 -637649032 2.91274 -637583498 -5.06041 -637616266 7.67864 -637649034 -0.85826 -637583620 -2.90283 -637616388 -2.9151 -637649156 1.59051 -637583622 8.25519 -637616390 2.87458 -637649158 10.3058 -637583624 6.82977 -637616392 0.85649 -637649160 -0.743223 -637583626 -4.49738 -637616394 2.45605 -637649162 -3.19992 -637583748 8.71302 -637616516 1.93661 -637649284 -3.79376 -637583750 1.02592 -637616518 -2.6989 -637649286 2.54811 -637583752 3.12185 -637616520 -2.83249 -637649288 0.192204 -637583754 3.77457 -637616522 -1.64707 -637649290 1.75674 -637583876 -10.9175 -637616644 4.36412 -637649412 2.0103 -637583878 -2.76017 -637616646 4.76139 -637649414 8.07058 -637583880 -3.94541 -637616648 -1.98936 -637649416 1.23948 -637583882 1.66803 -637616650 11.1426 -637649418 4.08484 -637584004 2.28888 -637616772 -4.64293 -637649540 0.929976 -637584006 -6.77718 -637616774 -4.45051 -637649542 -2.45356 -637584008 3.10382 -637616776 1.15958 -637649544 0.0943293 -637584010 5.46527 -637616778 1.96134 -637649546 1.79322 -637587460 1.99159 -637620228 -4.00072 -637652996 -6.55014 -637587462 0.995674 -637620230 4.51038 -637652998 1.58901 -637587464 -2.78352 -637620232 -5.45285 -637653000 0.682835 -637587466 2.09425 -637620234 1.48181 -637653002 -3.51212 -637587588 -0.807239 -637620356 9.07348 -637653124 1.54956 -637587590 -4.6694 -637620358 2.54321 -637653126 0.760356 -637587592 -3.35021 -637620360 2.62115 -637653128 -2.04636 -637587594 -10.7557 -637620362 -9.4455 -637653130 -2.26602 -637587716 -3.83944 -637620484 -0.793747 -637653252 -3.30084 -637587718 -4.82858 -637620486 -4.46214 -637653254 -4.93196 -637587720 2.00106 -637620488 -1.05603 -637653256 -8.87629 -637587722 -1.99606 -637620490 -1.96073 -637653258 -6.2873 -637587844 2.39366 -637620612 -4.97207 -637653380 -2.72868 -637587846 -5.38771 -637620614 -5.0886 -637653382 4.10134 -637587848 6.51855 -637620616 -5.33381 -637653384 5.53799 -637587850 2.80364 -637620618 -0.25999 -637653386 0.852222 -637587972 -12.3621 -637620740 -7.49168 -637653508 6.7002 -637587974 0.286073 -637620742 -2.5936 -637653510 1.56307 -637587976 2.10092 -637620744 -0.748628 -637653512 9.7275 -637587978 -6.79391 -637620746 4.5636 -637653514 7.86127 -637588100 -0.758834 -637620868 -3.73163 -637653636 4.64765 -637588102 -2.09962 -637620870 -9.04904 -637653638 7.07204 -637588104 4.56703 -637620872 2.15351 -637653640 3.33651 -637588106 6.47548 -637620874 8.27473 -637653642 6.189 -637569037 -1.57153 -637634573 -1.83134 -637569041 0.831521 -637634577 4.15181 -637569045 13.702 -637634581 -0.301515 -637569049 0.241494 -637634585 10.2057 -637569053 -5.43617 -637634589 -6.69702 -637569165 -9.55981 -637634701 3.06557 -637569169 9.24179 -637634705 -2.39182 -637569173 -5.31995 -637634709 -2.05278 -637569177 3.0307 -637634713 -2.57866 -637569181 1.65442 -637634717 3.12634 -637569293 -2.63839 -637634829 4.47379 -637569297 6.11131 -637634833 2.25463 -637569301 -2.94649 -637634837 -4.53569 -637569305 -0.0682986 -637634841 -1.51577 -637569309 -5.80034 -637634845 -5.62626 -637569421 7.38824 -637634957 -7.50631 -637569425 -7.77705 -637634961 3.03765 -637569429 -4.56815 -637634965 -2.51997 -637569433 2.91934 -637634969 8.02036 -637569437 -3.22 -637634973 0.38978 -637569549 -7.22834 -637635085 -7.57552 -637569553 2.13354 -637635089 -5.26223 -637569557 -4.2117 -637635093 11.1823 -637569561 -4.06653 -637635097 1.11226 -637569565 -1.74865 -637635101 2.93136 -637569677 -3.76132 -637635213 -5.27081 -637569681 1.55468 -637635217 6.68147 -637569685 5.06069 -637635221 -1.24707 -637569689 6.37695 -637635225 -2.6502 -637569693 -1.69297 -637635229 1.2675 -637569805 0.502167 -637635341 4.86834 -637569809 -0.963374 -637635345 -4.83347 -637569813 -1.06667 -637635349 -2.76503 -637569817 -6.25458 -637635353 2.19597 -637569821 0.953126 -637635357 -0.849912 -637569933 7.79513 -637635469 10.487 -637569937 5.0852 -637635473 -6.16034 -637569941 -0.493908 -637635477 -6.42624 -637569945 1.84716 -637635481 -5.8964 -637569949 2.30026 -637635485 -1.55193 -637570061 8.49287 -637635597 -1.9161 -637570065 -5.95951 -637635601 7.0659 -637570069 6.4085 -637635605 -6.06335 -637570073 0.376674 -637635609 8.83555 -637570077 0.273953 -637635613 1.68376 -637570189 0.345232 -637635725 1.98328 -637570193 -2.98537 -637635729 10.2158 -637570197 0.588608 -637635733 -3.24994 -637570201 6.69421 -637635737 1.93913 -637570205 0.878819 -637635741 -0.779859 -637570317 4.9545 -637635853 2.25881 -637570321 4.73984 -637635857 -3.72419 -637570325 1.28113 -637635861 -1.22506 -637570329 0.0936576 -637635865 -0.290126 -637570333 -3.97661 -637635869 0.279475 -637570445 -1.34562 -637635981 -1.66484 -637570449 -6.43603 -637635985 4.0118 -637570453 -4.77653 -637635989 3.30826 -637570457 -5.60731 -637635993 5.40773 -637570461 -2.51399 -637635997 6.66912 -637567012 2.33538 -637599780 -2.70952 -637632548 0.455631 -637567014 7.0828 -637599782 -3.02076 -637632550 1.92743 -637567016 4.68388 -637599784 -2.1078 -637632552 5.90017 -637567018 2.32834 -637599786 -3.49221 -637632554 -6.88039 -637567021 -0.614561 -637632557 -0.746732 -637567025 0.298691 -637599793 -1.4852 -637632561 -3.42678 -637567029 0.440625 -637599797 -1.09466 -637632565 2.03135 -637567033 2.49984 -637599801 1.56013 -637632569 -7.20328 -637567037 0.510469 -637632573 -3.76993 -637567140 4.41614 -637599908 8.88538 -637632676 -3.18429 -637567142 -2.14418 -637599910 7.85328 -637632678 -5.57658 -637567144 3.0187 -637599912 -0.982856 -637632680 3.95164 -637567146 -1.34083 -637599914 3.43199 -637632682 2.06594 -637567149 1.66775 -637632685 -3.25166 -637567153 -1.01008 -637599921 8.86752 -637632689 -0.827204 -637567157 4.33228 -637599925 -4.85108 -637632693 -1.78989 -637567161 2.89537 -637599929 2.85054 -637632697 -7.26228 -637567165 -1.37277 -637632701 3.73347 -637567268 -6.56866 -637600036 -4.45883 -637632804 7.49802 -637567270 11.6598 -637600038 -3.57676 -637632806 -4.0685 -637567272 4.53767 -637600040 -8.24026 -637632808 2.87222 -637567274 -3.41958 -637600042 -5.2321 -637632810 -3.55889 -637567277 4.27473 -637632813 7.1462 -637567281 1.14862 -637600049 2.33498 -637632817 -5.03336 -637567285 7.31453 -637600053 -2.19594 -637632821 2.52338 -637567289 0.0456153 -637600057 -0.232067 -637632825 -3.08931 -637567293 3.77107 -637632829 -2.88731 -637567396 2.0294 -637600164 3.31856 -637632932 -1.10712 -637567398 6.37456 -637600166 1.9386 -637632934 -0.929543 -637567400 -2.99152 -637600168 -0.964668 -637632936 0.433565 -637567402 -4.71409 -637600170 -1.70965 -637632938 -5.17072 -637567405 -5.48591 -637632941 8.18639 -637567409 9.42343 -637600177 -3.04211 -637632945 -6.55637 -637567413 -3.27123 -637600181 0.9306 -637632949 -2.84732 -637567417 -10.8997 -637600185 -0.890399 -637632953 1.19409 -637567421 -4.91666 -637632957 -8.28665 -637567524 -1.30487 -637600292 6.67585 -637633060 -7.26028 -637567526 -0.0852436 -637600294 -2.28225 -637633062 -0.0801521 -637567528 6.96175 -637600296 6.97307 -637633064 0.0527773 -637567530 -0.0203842 -637600298 7.86924 -637633066 3.36398 -637567533 -6.31007 -637633069 -2.60291 -637567537 8.70861 -637600305 0.90852 -637633073 -0.107652 -637567541 -1.0026 -637600309 -8.45838 -637633077 8.48741 -637567545 3.96231 -637600313 7.12051 -637633081 -4.85381 -637567549 0.665877 -637633085 1.00766 -637567652 -9.79832 -637600420 7.71758 -637633188 1.15212 -637567654 7.96024 -637600422 -1.34514 -637633190 4.03572 -637567656 -5.64968 -637600424 -6.6683 -637633192 -5.75147 -637567658 8.4066 -637600426 -4.03329 -637633194 -5.883 -637567661 1.71588 -637633197 -6.44006 -637567665 -7.7556 -637600433 -2.38175 -637633201 -1.44141 -637567669 7.9353 -637600437 -7.00968 -637633205 5.65584 -637567673 3.86558 -637600441 -2.67835 -637633209 12.321 -637567677 -1.28828 -637633213 -7.69603 -637567789 0.686299 -637633325 -2.1279 -637567793 -0.611814 -637600561 -2.5071 -637633329 1.69271 -637567797 4.03141 -637600565 -6.9918 -637633333 -3.56027 -637567801 4.70862 -637600569 5.57471 -637633337 1.82678 -637567805 0.594386 -637633341 -0.586301 -637567917 1.97133 -637633453 -7.85683 -637567921 -4.51266 -637600689 -1.23578 -637633457 -2.55333 -637567925 0.423935 -637600693 2.74303 -637633461 -8.73555 -637567929 1.37934 -637600697 4.30318 -637633465 -7.60878 -637567933 5.14301 -637633469 3.74227 -637568045 2.10853 -637633581 4.69931 -637568049 2.56564 -637600817 -3.34417 -637633585 -1.86322 -637568053 -1.11185 -637600821 -4.77354 -637633589 -3.36742 -637568057 0.881318 -637600825 3.37214 -637633593 -0.308908 -637568061 0.168469 -637633597 -4.97774 -637568173 -0.0616854 -637633709 0.288759 -637568177 7.78264 -637600945 4.02771 -637633713 -2.42984 -637568181 -2.29889 -637600949 1.47762 -637633717 5.67428 -637568185 4.71013 -637600953 1.79992 -637633721 3.23272 -637568189 11.1457 -637633725 3.39038 -637568301 0.545357 -637633837 2.54345 -637568305 -5.28904 -637601073 -2.40655 -637633841 -1.5991 -637568309 1.49301 -637601077 7.68553 -637633845 4.07408 -637568313 8.80702 -637601081 -0.417202 -637633849 0.876801 -637568317 -2.1393 -637633853 2.2172 -637568429 7.09388 -637633965 1.83088 -637568433 -2.56334 -637601201 -2.48436 -637633969 -2.88419 -637568437 -1.15131 -637601205 -8.24445 -637633973 -2.66267 -637568441 11.031 -637601209 0.599002 -637633977 5.63704 -637568445 -5.75026 -637633981 -1.01686 -637571108 4.60216 -637603876 -1.54236 -637636644 -7.07549 -637571110 11.3863 -637603878 -1.00368 -637636646 3.13418 -637571112 1.70531 -637603880 -3.48411 -637636648 -10.9763 -637571114 -4.88584 -637603882 1.31095 -637636650 1.03839 -637571236 -7.34251 -637604004 1.04063 -637636772 5.50718 -637571238 -0.384294 -637604006 -4.1985 -637636774 0.559841 -637571240 -4.10244 -637604008 -9.67315 -637636776 6.82011 -637571242 0.717127 -637604010 -3.08254 -637636778 -3.50468 -637571364 3.44105 -637604132 -2.55442 -637636900 -3.1449 -637571366 -1.95988 -637604134 -2.00286 -637636902 1.33149 -637571368 -7.86373 -637604136 -4.21165 -637636904 4.5263 -637571370 -7.40792 -637604138 0.291192 -637636906 4.27444 -637571492 -1.22459 -637604260 -1.13903 -637637028 -3.25555 -637571494 -13.799 -637604262 11.5459 -637637030 -1.61686 -637571496 -9.14592 -637604264 8.93036 -637637032 -8.35876 -637571498 8.82822 -637604266 -1.47677 -637637034 -1.96093 -637571620 8.87097 -637604388 3.81447 -637637156 -4.86349 -637571622 2.54583 -637604390 -7.32977 -637637158 10.8448 -637571624 -5.11753 -637604392 7.48884 -637637160 -3.81471 -637571626 3.8487 -637604394 -5.92008 -637637162 1.2999 -637571748 1.66192 -637604516 2.69328 -637637284 -5.65222 -637571750 -7.16165 -637604518 -5.16987 -637637286 3.71428 -637571752 1.95606 -637604520 -2.04049 -637637288 -6.05611 -637571754 -8.76281 -637604522 -10.0584 -637637290 -1.09793 -637575204 -8.5683 -637607972 -5.50123 -637640740 4.39173 -637575206 6.08867 -637607974 -2.32605 -637640742 11.7045 -637575208 -6.3307 -637607976 -6.56249 -637640744 -0.252687 -637575210 -7.92054 -637607978 -13.174 -637640746 2.45185 -637575332 0.968429 -637608100 2.89967 -637640868 -1.35045 -637575334 10.5882 -637608102 12.9835 -637640870 11.3177 -637575336 -3.47235 -637608104 -7.81819 -637640872 -3.23375 -637575338 -2.98918 -637608106 0.327677 -637640874 0.641421 -637575460 3.53035 -637608228 -5.98451 -637640996 -3.59582 -637575462 -4.22415 -637608230 1.48223 -637640998 4.04833 -637575464 -5.70967 -637608232 -6.41227 -637641000 -2.79811 -637575466 -5.06039 -637608234 -6.45226 -637641002 5.66429 -637575588 7.39873 -637608356 -9.48528 -637641124 2.58917 -637575590 0.697128 -637608358 4.81648 -637641126 12.4305 -637575592 4.12916 -637608360 -3.28901 -637641128 0.0489296 -637575594 2.28544 -637608362 -1.60923 -637641130 -1.6947 -637575716 10.5612 -637608484 -6.19307 -637641252 7.6646 -637575718 6.96336 -637608486 -0.339545 -637641254 -7.1097 -637575720 0.668703 -637608488 7.0359 -637641256 1.80533 -637575722 8.69506 -637608490 3.61864 -637641258 -4.88032 -637575844 -6.72657 -637608612 2.47843 -637641380 -2.85769 -637575846 -3.90371 -637608614 -3.81098 -637641382 -10.2723 -637575848 0.156691 -637608616 -3.99973 -637641384 -1.1491 -637575850 1.57759 -637608618 0.756205 -637641386 -4.17896 -637579300 -2.80537 -637612068 -1.67153 -637644836 1.85561 -637579302 -2.89171 -637612070 0.542132 -637644838 -1.27957 -637579304 -0.466054 -637612072 8.56679 -637644840 -7.96428 -637579306 4.86402 -637612074 -0.886333 -637644842 6.43296 -637579428 -5.99348 -637612196 4.5051 -637644964 5.11442 -637579430 -4.20745 -637612198 0.408123 -637644966 0.0559012 -637579432 3.15059 -637612200 -2.2671 -637644968 -5.12677 -637579434 1.30296 -637612202 4.54154 -637644970 5.30637 -637579556 3.25165 -637612324 9.79856 -637645092 -1.04283 -637579558 6.87616 -637612326 4.24072 -637645094 5.23793 -637579560 2.03301 -637612328 -2.30133 -637645096 2.39203 -637579562 -1.40478 -637612330 -2.4644 -637645098 -4.2768 -637579684 0.980307 -637612452 7.34482 -637645220 -4.85535 -637579686 3.03932 -637612454 1.20341 -637645222 1.90057 -637579688 -2.2028 -637612456 -8.06662 -637645224 5.47436 -637579690 5.78676 -637612458 2.67032 -637645226 -0.945718 -637579812 3.96264 -637612580 2.11722 -637645348 -2.80906 -637579814 2.96018 -637612582 5.79542 -637645350 1.60475 -637579816 -6.47349 -637612584 -3.04466 -637645352 -1.44508 -637579818 0.964668 -637612586 0.450814 -637645354 -6.31342 -637579940 8.33604 -637612708 -1.85353 -637645476 3.9536 -637579942 -10.4026 -637612710 4.25103 -637645478 -1.15328 -637579944 -0.0943851 -637612712 -8.7271 -637645480 -3.90774 -637579946 2.12065 -637612714 0.141028 -637645482 6.78383 -637583396 1.52652 -637616164 1.19106 -637648932 5.56882 -637583398 -2.77993 -637616166 1.80934 -637648934 -0.663303 -637583400 -4.47526 -637616168 -2.3577 -637648936 -11.6829 -637583402 -2.33804 -637616170 14.1954 -637648938 2.36829 -637583524 -2.45279 -637616292 -5.09666 -637649060 -0.986868 -637583526 7.9059 -637616294 0.559884 -637649062 13.2209 -637583528 5.92863 -637616296 -8.79869 -637649064 -6.45477 -637583530 -1.38271 -637616298 9.48599 -637649066 3.4759 -637583652 -7.57913 -637616420 1.88433 -637649188 -0.707863 -637583654 6.0568 -637616422 -7.13774 -637649190 4.35959 -637583656 3.2639 -637616424 6.74143 -637649192 -1.78647 -637583658 8.64103 -637616426 -6.57324 -637649194 1.45052 -637583780 -0.676162 -637616548 -9.5847 -637649316 -5.66264 -637583782 2.9906 -637616550 -2.89533 -637649318 8.184 -637583784 -7.29092 -637616552 0.147652 -637649320 -5.09519 -637583786 -0.960216 -637616554 0.634596 -637649322 -5.66231 -637583908 -4.7856 -637616676 -10.6688 -637649444 0.156892 -637583910 2.38872 -637616678 1.84547 -637649446 -0.0140825 -637583912 -1.69423 -637616680 1.27503 -637649448 2.61656 -637583914 -0.242856 -637616682 2.60818 -637649450 -0.443807 -637584036 3.93828 -637616804 -0.752937 -637649572 -2.00212 -637584038 -8.13199 -637616806 8.74264 -637649574 4.34578 -637584040 -1.93505 -637616808 0.889981 -637649576 -1.65541 -637584042 4.67007 -637616810 -1.30859 -637649578 -9.13563 -637587492 -11.2144 -637620260 -1.32009 -637653028 2.40317 -637587494 -3.86793 -637620262 -3.74089 -637653030 1.54286 -637587496 -5.53916 -637620264 -2.1514 -637653032 2.48217 -637587498 13.9522 -637620266 -5.90068 -637653034 -9.16635 -637587620 -10.6094 -637620388 4.49182 -637653156 8.99979 -637587622 -1.81874 -637620390 1.16346 -637653158 5.01868 -637587624 -0.631862 -637620392 1.63032 -637653160 3.12984 -637587626 -4.39718 -637620394 0.349471 -637653162 0.84958 -637587748 7.87059 -637620516 1.50594 -637653284 -4.15886 -637587750 -10.1836 -637620518 -0.456376 -637653286 3.22258 -637587752 2.28798 -637620520 1.39343 -637653288 -1.03645 -637587754 -5.59717 -637620522 1.22609 -637653290 3.59088 -637587876 -3.26383 -637620644 8.32621 -637653412 6.24111 -637587878 -3.18491 -637620646 2.58506 -637653414 -0.401715 -637587880 -1.63698 -637620648 2.28776 -637653416 -6.33198 -637587882 0.0405078 -637620650 0.369827 -637653418 -1.46564 -637588004 -9.47259 -637620772 0.14425 -637653540 -1.511 -637588006 -9.67776 -637620774 7.25378 -637653542 -5.58523 -637588008 -4.03251 -637620776 -5.57362 -637653544 0.463327 -637588010 -5.39317 -637620778 -2.5265 -637653546 4.01668 -637588132 -5.97361 -637620900 1.23171 -637653668 3.36438 -637588134 0.537181 -637620902 0.964903 -637653670 -4.98007 -637588136 4.51176 -637620904 -0.913884 -637653672 2.52379 -637588138 5.6047 -637620906 1.87515 -637653674 -1.25453 -637569069 -0.334605 -637601837 5.26942 -637634605 -3.22857 -637569073 3.06427 -637634609 0.718413 -637569077 -3.23459 -637634613 2.21987 -637569081 0.641264 -637634617 -4.69852 -637569085 4.35302 -637601853 8.81557 -637634621 6.81712 -637569197 9.91443 -637601965 -7.07731 -637634733 1.54438 -637569201 1.31836 -637634737 8.19973 -637569205 -7.79137 -637634741 -1.35077 -637569209 -4.02969 -637634745 -3.37817 -637569213 -0.688175 -637601981 6.01103 -637634749 -5.1327 -637569325 5.76495 -637602093 -2.58298 -637634861 -0.954601 -637569329 -6.20465 -637634865 -1.62004 -637569333 0.220914 -637634869 1.09584 -637569337 -0.171083 -637634873 -11.868 -637569341 -7.74019 -637602109 -4.04211 -637634877 9.16358 -637569453 -4.05952 -637602221 -3.08142 -637634989 4.47042 -637569457 -3.97501 -637634993 -3.90048 -637569461 -1.33426 -637634997 -12.1214 -637569465 0.00193117 -637635001 2.58552 -637569469 -2.1856 -637602237 -8.15382 -637635005 -5.8265 -637569581 -5.84063 -637602349 3.93941 -637635117 -3.07886 -637569585 10.3256 -637635121 4.46739 -637569589 -3.76789 -637635125 0.711461 -637569593 0.622904 -637635129 -1.80934 -637569597 -1.58782 -637602365 1.01993 -637635133 8.96677 -637569709 6.35764 -637602477 5.26845 -637635245 6.50084 -637569713 -0.176896 -637635249 -15.1898 -637569717 0.715523 -637635253 -3.37616 -637569721 -2.04358 -637635257 0.429998 -637569725 4.39867 -637602493 -13.1096 -637635261 1.04065 -637569837 7.33884 -637602605 4.70952 -637635373 1.63268 -637569841 -0.850562 -637635377 1.65513 -637569845 2.21504 -637635381 4.73032 -637569849 -0.450683 -637635385 1.815 -637569853 -7.42269 -637602621 -2.72744 -637635389 5.60186 -637569965 -5.67738 -637602733 2.73785 -637635501 -2.58301 -637569969 1.04193 -637635505 -3.64559 -637569973 3.17284 -637635509 -3.94774 -637569977 -5.54174 -637635513 3.80987 -637569981 -0.0754381 -637602749 -0.0891905 -637635517 5.33238 -637570093 -0.541538 -637602861 -8.76002 -637635629 1.12492 -637570097 -1.25526 -637635633 6.40555 -637570101 0.965496 -637635637 3.17864 -637570105 0.921254 -637635641 -5.32462 -637570109 -6.46331 -637602877 -2.16915 -637635645 4.96954 -637570221 6.53089 -637602989 -0.369975 -637635757 -2.21308 -637570225 8.72256 -637635761 5.68385 -637570229 4.33112 -637635765 1.52121 -637570233 -1.46883 -637635769 -7.85922 -637570237 6.40298 -637603005 1.47515 -637635773 4.28756 -637570349 7.16775 -637603117 5.91871 -637635885 -5.70709 -637570353 1.48999 -637635889 2.65692 -637570357 1.72006 -637635893 -0.958317 -637570361 4.5967 -637635897 -0.357754 -637570365 -0.8528 -637603133 -0.405009 -637635901 1.99264 -637570477 4.6856 -637603245 -4.13252 -637636013 5.39198 -637570481 0.881652 -637636017 -13.3007 -637570485 -2.87087 -637636021 4.55826 -637570489 -3.71585 -637636025 6.86673 -637570493 8.3791 -637603261 -3.13062 -637636029 -1.99536 -637567044 -3.65344 -637599812 -7.33757 -637632580 -1.12642 -637567046 10.1891 -637599814 5.80059 -637632582 -1.67153 -637567048 -0.140897 -637599816 -8.70837 -637632584 -7.92858 -637567050 -1.03408 -637599818 9.49991 -637632586 2.92481 -637567053 0.241918 -637632589 9.11914 -637567057 -1.46141 -637632593 -3.94179 -637567061 3.80215 -637632597 -6.79085 -637567065 -9.92934 -637632601 -2.9709 -637567069 4.15569 -637632605 -0.516702 -637567172 0.233741 -637599940 3.3376 -637632708 -2.42346 -637567174 -6.59372 -637599942 6.26961 -637632710 -8.14747 -637567176 -2.89472 -637599944 -1.96197 -637632712 9.52313 -637567178 8.32698 -637599946 2.91193 -637632714 -6.87953 -637567181 8.53551 -637632717 -2.93963 -637567185 0.449388 -637632721 0.336348 -637567189 0.313853 -637632725 4.59619 -637567193 -1.3606 -637632729 -0.298889 -637567197 9.58063 -637632733 -1.65653 -637567300 -6.1366 -637600068 1.2308 -637632836 0.274308 -637567302 2.01828 -637600070 0.279244 -637632838 3.28043 -637567304 -0.542927 -637600072 -6.42771 -637632840 -1.76903 -637567306 3.3764 -637600074 2.59425 -637632842 2.03991 -637567309 -3.60602 -637632845 -5.84466 -637567313 -1.85525 -637632849 -4.16512 -637567317 -2.81803 -637632853 3.54943 -637567321 3.58406 -637632857 7.07797 -637567325 1.33685 -637632861 0.885943 -637567428 -6.03857 -637600196 2.50581 -637632964 -0.579256 -637567430 -3.4491 -637600198 -6.49953 -637632966 3.31782 -637567432 5.10653 -637600200 -0.309546 -637632968 4.76142 -637567434 -1.72938 -637600202 -7.40157 -637632970 5.12844 -637567437 6.30026 -637632973 8.54633 -637567441 -3.30581 -637632977 -1.58812 -637567445 0.250335 -637632981 -0.650971 -637567449 7.8158 -637632985 0.262062 -637567453 -6.35166 -637632989 1.74377 -637567556 -2.39003 -637600324 9.94222 -637633092 -1.95713 -637567558 3.76759 -637600326 -6.08833 -637633094 0.794505 -637567560 -1.91402 -637600328 8.25981 -637633096 -7.57956 -637567562 2.46702 -637600330 5.80298 -637633098 1.25712 -637567565 8.24078 -637633101 -3.83018 -637567569 -1.64532 -637633105 2.54312 -637567573 -2.69622 -637633109 -6.56103 -637567577 -7.9577 -637633113 -4.7871 -637567581 4.40864 -637633117 1.07747 -637567684 3.86332 -637600452 -2.14963 -637633220 5.63524 -637567686 -11.5301 -637600454 1.77718 -637633222 3.93966 -637567688 3.27437 -637600456 -1.95564 -637633224 -6.09633 -637567690 -0.243105 -637600458 -2.54488 -637633226 7.50926 -637567693 5.86427 -637633229 2.28444 -637567697 -4.33346 -637633233 -1.97431 -637567701 -14.8631 -637633237 -9.37883 -637567705 -2.76809 -637633241 4.75215 -637567709 -0.725939 -637633245 4.13556 -637567821 -1.49735 -637633357 -8.01165 -637567825 0.508974 -637633361 8.57272 -637567829 13.3906 -637633365 -4.59839 -637567833 -4.34956 -637633369 0.0117435 -637567837 0.920405 -637633373 -5.70597 -637567949 -1.15422 -637633485 2.16741 -637567953 3.7243 -637633489 0.26311 -637567957 0.417906 -637633493 6.27143 -637567961 7.45111 -637633497 -5.59547 -637567965 -6.81926 -637633501 -0.763007 -637568077 2.74408 -637633613 -7.32897 -637568081 4.35994 -637633617 0.42394 -637568085 4.37688 -637633621 1.714 -637568089 2.10688 -637633625 -4.44484 -637568093 -2.88323 -637633629 2.25417 -637568205 -4.57264 -637633741 -6.01181 -637568209 -2.69107 -637633745 -0.836561 -637568213 4.05131 -637633749 -0.941728 -637568217 4.47102 -637633753 -0.349062 -637568221 -7.70626 -637633757 3.71018 -637568333 -1.71052 -637633869 3.15377 -637568337 0.482476 -637633873 -3.3756 -637568341 4.37613 -637633877 2.2276 -637568345 3.4022 -637633881 -0.844246 -637568349 -1.60013 -637633885 1.14702 -637568461 -3.02134 -637633997 -3.65104 -637568465 2.01925 -637634001 -11.373 -637568469 5.43529 -637634005 2.27852 -637568473 4.03664 -637634009 1.51032 -637568477 -6.3742 -637634013 7.72898 -637571140 10.0242 -637603908 10.0701 -637636676 2.50856 -637571142 -0.430698 -637603910 -5.64728 -637636678 3.76941 -637571144 -8.13058 -637603912 9.36846 -637636680 -1.09774 -637571146 -1.84467 -637603914 6.06832 -637636682 0.905171 -637571149 -2.55214 -637636685 4.30423 -637571153 9.48246 -637636689 -9.20159 -637571157 -7.05352 -637636693 -2.18725 -637571161 1.55004 -637636697 -5.37331 -637571165 7.24384 -637636701 3.07759 -637571268 -3.98295 -637604036 -5.79772 -637636804 1.68521 -637571270 -2.13561 -637604038 -2.81538 -637636806 -3.53953 -637571272 1.62421 -637604040 -5.29433 -637636808 5.53728 -637571274 -5.66586 -637604042 -1.50964 -637636810 2.51082 -637571277 -8.11505 -637636813 4.93053 -637571281 -3.66307 -637636817 -0.881182 -637571285 -8.8144 -637636821 1.37847 -637571289 -1.11187 -637636825 -0.350418 -637571293 -7.48621 -637636829 2.22257 -637571396 1.53138 -637604164 2.36555 -637636932 -0.993555 -637571398 5.83359 -637604166 -0.372235 -637636934 6.85438 -637571400 -0.674285 -637604168 4.36586 -637636936 0.583692 -637571402 9.21447 -637604170 9.92338 -637636938 -4.30052 -637571405 -1.21285 -637636941 1.20846 -637571409 2.29587 -637636945 2.56651 -637571413 4.07997 -637636949 -8.55062 -637571417 9.34345 -637636953 11.2026 -637571421 0.348044 -637636957 4.62895 -637571524 -1.43798 -637604292 -1.55384 -637637060 -5.53818 -637571526 9.51736 -637604294 1.72971 -637637062 4.57617 -637571528 4.96708 -637604296 -6.61516 -637637064 1.0699 -637571530 0.835489 -637604298 1.16233 -637637066 4.91671 -637571533 -9.49605 -637637069 1.53008 -637571537 4.11571 -637637073 2.26905 -637571541 7.936 -637637077 -5.16771 -637571545 -8.34944 -637637081 -11.1855 -637571549 -3.69666 -637637085 1.02306 -637571652 -4.90662 -637604420 7.89275 -637637188 2.0013 -637571654 -9.56239 -637604422 7.02838 -637637190 -2.58917 -637571656 3.82263 -637604424 -3.92563 -637637192 -3.95524 -637571658 8.6786 -637604426 -3.79797 -637637194 -2.02503 -637571661 8.92478 -637637197 0.203117 -637571665 0.243665 -637637201 0.475691 -637571669 -3.41906 -637637205 3.4913 -637571673 -10.1476 -637637209 4.655 -637571677 0.62266 -637637213 1.67325 -637571780 10.597 -637604548 -3.64958 -637637316 2.42245 -637571782 4.73196 -637604550 1.39232 -637637318 -3.80974 -637571784 -4.11655 -637604552 0.584416 -637637320 -7.69057 -637571786 0.748432 -637604554 2.34633 -637637322 0.70793 -637571789 2.53347 -637637325 -1.7736 -637571793 1.43636 -637637329 5.34733 -637571797 -5.02128 -637637333 -3.11751 -637571801 -1.66765 -637637337 -9.82879 -637571805 -6.67657 -637637341 -3.38498 -637571917 3.00145 -637637453 20.7293 -637571921 4.69385 -637637457 1.84767 -637571925 13.4877 -637637461 6.40698 -637571929 -2.0225 -637637465 1.83756 -637571933 -1.2024 -637637469 -5.48425 -637572045 -1.71525 -637637581 -7.33628 -637572049 4.39596 -637637585 -6.60202 -637572053 -3.36901 -637637589 2.35362 -637572057 2.18151 -637637593 2.3141 -637572061 1.66569 -637637597 -0.320481 -637572173 6.48112 -637637709 8.59016 -637572177 4.28539 -637637713 0.74084 -637572181 -5.59201 -637637717 -6.83373 -637572185 -1.87371 -637637721 1.69245 -637572189 0.718316 -637637725 6.2718 -637572301 5.10307 -637637837 1.97756 -637572305 -3.13232 -637637841 4.50095 -637572309 -8.6491 -637637845 6.33296 -637572313 0.079555 -637637849 -2.30116 -637572317 2.32008 -637637853 -6.8674 -637572429 1.20468 -637637965 -6.10226 -637572433 5.44373 -637637969 -3.34334 -637572437 0.676272 -637637973 -2.39798 -637572441 -3.51073 -637637977 -4.58723 -637572445 1.35092 -637637981 -6.19677 -637572557 -0.000957864 -637638093 -1.09207 -637572561 3.81708 -637638097 -5.1262 -637572565 6.21877 -637638101 -2.43549 -637572569 -2.14915 -637638105 3.27379 -637572573 -1.01618 -637638109 -2.6152 -637575236 9.30033 -637608004 1.98144 -637640772 2.08247 -637575238 10.8166 -637608006 -5.41139 -637640774 2.93842 -637575240 0.894685 -637608008 10.7104 -637640776 -4.4174 -637575242 6.71699 -637608010 -1.1973 -637640778 -1.06805 -637575364 -2.33114 -637608132 -2.33394 -637640900 1.15804 -637575366 -1.9082 -637608134 6.04711 -637640902 -2.70242 -637575368 -2.57915 -637608136 1.25163 -637640904 -4.76008 -637575370 -12.7367 -637608138 5.57571 -637640906 5.93457 -637575492 -9.59974 -637608260 -7.5463 -637641028 4.48958 -637575494 2.16998 -637608262 3.93692 -637641030 6.98546 -637575496 10.1259 -637608264 -1.6705 -637641032 5.79047 -637575498 -5.76753 -637608266 -1.93471 -637641034 2.84637 -637575620 6.25944 -637608388 1.36177 -637641156 -3.77235 -637575622 -0.647053 -637608390 -7.01232 -637641158 -9.23965 -637575624 2.13123 -637608392 7.73566 -637641160 5.42736 -637575626 12.6319 -637608394 1.97224 -637641162 3.46266 -637575748 0.644304 -637608516 -0.808257 -637641284 -3.74166 -637575750 1.50516 -637608518 2.24547 -637641286 -7.06546 -637575752 3.60601 -637608520 -4.92875 -637641288 -8.05868 -637575754 5.53902 -637608522 2.39501 -637641290 -6.85553 -637575876 11.5017 -637608644 2.94259 -637641412 -2.67346 -637575878 4.82736 -637608646 3.813 -637641414 0.365547 -637575880 -1.15918 -637608648 5.47785 -637641416 0.102236 -637575882 -7.04592 -637608650 1.95745 -637641418 -6.24736 -637579332 -6.10673 -637612100 -4.1178 -637644868 -7.59128 -637579334 -3.37014 -637612102 0.869702 -637644870 3.12352 -637579336 -3.64085 -637612104 1.24799 -637644872 5.8862 -637579338 -2.08712 -637612106 5.19491 -637644874 8.79347 -637579460 -11.4856 -637612228 -15.2014 -637644996 1.79735 -637579462 3.54179 -637612230 -2.17958 -637644998 4.22963 -637579464 5.75152 -637612232 10.7466 -637645000 -0.35267 -637579466 11.4036 -637612234 4.17103 -637645002 8.41617 -637579588 1.50955 -637612356 2.93656 -637645124 -4.35917 -637579590 8.49862 -637612358 -4.05266 -637645126 5.9814 -637579592 -4.49698 -637612360 2.86414 -637645128 3.26634 -637579594 2.57727 -637612362 0.00463949 -637645130 6.31421 -637579716 -3.91921 -637612484 -13.8007 -637645252 -1.11639 -637579718 2.38588 -637612486 6.4624 -637645254 0.486948 -637579720 -2.86464 -637612488 -0.61448 -637645256 -13.0688 -637579722 -3.11367 -637612490 -3.68493 -637645258 8.58012 -637579844 -2.95501 -637612612 0.686992 -637645380 -3.95248 -637579846 -6.98774 -637612614 0.892783 -637645382 0.682961 -637579848 0.0643746 -637612616 1.63529 -637645384 -8.32433 -637579850 -0.599224 -637612618 -2.07491 -637645386 -3.90806 -637579972 -8.01397 -637612740 -0.969466 -637645508 -10.1288 -637579974 -4.67004 -637612742 -5.15772 -637645510 -2.76443 -637579976 -1.63759 -637612744 5.07735 -637645512 -1.0469 -637579978 4.04123 -637612746 -0.244353 -637645514 -2.0897 -637583428 5.54458 -637616196 4.31426 -637648964 -3.60155 -637583430 -1.646 -637616198 -0.434186 -637648966 5.20736 -637583432 -1.75961 -637616200 -3.84236 -637648968 -1.05827 -637583434 3.91145 -637616202 5.14123 -637648970 4.20684 -637583556 6.92772 -637616324 4.30879 -637649092 -3.17986 -637583558 -0.429923 -637616326 -4.99616 -637649094 1.33122 -637583560 -7.54014 -637616328 0.264791 -637649096 -0.922284 -637583562 -5.70322 -637616330 2.62646 -637649098 1.88825 -637583684 -1.75733 -637616452 8.90956 -637649220 0.829855 -637583686 0.527115 -637616454 -3.05976 -637649222 -5.50799 -637583688 2.74404 -637616456 1.44288 -637649224 3.11086 -637583690 -0.304257 -637616458 -8.5219 -637649226 -3.03241 -637583812 5.07456 -637616580 -7.29442 -637649348 -1.46281 -637583814 0.389235 -637616582 3.13195 -637649350 4.04029 -637583816 1.82765 -637616584 3.82549 -637649352 0.587805 -637583818 8.764 -637616586 -10.6932 -637649354 -0.953706 -637583940 -1.35308 -637616708 6.56576 -637649476 -2.49945 -637583942 -1.57913 -637616710 -0.21023 -637649478 3.27554 -637583944 4.88144 -637616712 -0.987335 -637649480 6.15972 -637583946 -7.55705 -637616714 -1.99888 -637649482 -4.92732 -637584068 -7.57356 -637616836 -2.75728 -637649604 2.91933 -637584070 4.05968 -637616838 -1.49399 -637649606 -0.246077 -637584072 -5.17161 -637616840 4.17822 -637649608 7.852 -637584074 -5.66538 -637616842 -7.70493 -637649610 2.24531 -637587524 -3.59005 -637620292 4.02859 -637653060 10.0714 -637587526 -2.06213 -637620294 -2.24339 -637653062 -0.665295 -637587528 0.28999 -637620296 -4.75283 -637653064 -0.909009 -637587530 2.12295 -637620298 3.44751 -637653066 5.98836 -637587652 9.55539 -637620420 -1.77806 -637653188 4.7648 -637587654 -1.70207 -637620422 6.83898 -637653190 11.8456 -637587656 3.66503 -637620424 -1.91794 -637653192 7.62051 -637587658 -5.26933 -637620426 -8.65457 -637653194 2.1622 -637587780 -0.840674 -637620548 0.821366 -637653316 -8.40466 -637587782 -0.526663 -637620550 -3.91073 -637653318 -0.018502 -637587784 0.0164132 -637620552 2.21214 -637653320 0.359258 -637587786 -6.4385 -637620554 -7.13898 -637653322 -4.94038 -637587908 5.21454 -637620676 0.913966 -637653444 6.34305 -637587910 5.38846 -637620678 0.815184 -637653446 -2.51199 -637587912 -1.86618 -637620680 6.97189 -637653448 -6.43733 -637587914 -5.2978 -637620682 2.90272 -637653450 -6.4198 -637588036 0.423418 -637620804 -7.58131 -637653572 0.263227 -637588038 -0.534521 -637620806 3.30415 -637653574 -3.35252 -637588040 3.82434 -637620808 -9.74249 -637653576 7.1391 -637588042 4.84851 -637620810 -4.12611 -637653578 -1.34359 -637588164 1.53017 -637620932 -3.59977 -637653700 3.20339 -637588166 -0.170724 -637620934 8.23196 -637653702 2.76098 -637588168 -0.385801 -637620936 4.05366 -637653704 -2.23038 -637588170 4.6548 -637620938 7.76471 -637653706 8.5133 -637567085 10.6305 -637632621 -4.98369 -637567089 2.94327 -637632625 -7.29174 -637567093 -5.46998 -637632629 2.07326 -637567097 -1.21138 -637632633 -8.87797 -637567101 -3.4076 -637632637 -3.81867 -637567213 -5.1798 -637632749 -6.50116 -637567217 -7.91486 -637632753 -8.40659 -637567221 1.79913 -637632757 -0.451575 -637567225 -0.822156 -637632761 4.02774 -637567229 6.89583 -637632765 5.04863 -637567341 -1.56338 -637632877 -3.91825 -637567345 2.07024 -637632881 -1.20809 -637567349 3.50979 -637632885 -1.17582 -637567353 3.86695 -637632889 -1.32041 -637567357 -3.86624 -637632893 -0.876045 -637567469 -5.33667 -637633005 8.04834 -637567473 4.45532 -637633009 2.55527 -637567477 -6.46838 -637633013 2.09916 -637567481 -4.32288 -637633017 -8.09805 -637567485 2.7943 -637633021 -7.89046 -637567597 9.16658 -637633133 15.7892 -637567601 1.69562 -637633137 -3.86832 -637567605 12.8038 -637633141 -6.0424 -637567609 5.19204 -637633145 2.26688 -637567613 8.47216 -637633149 -1.69323 -637567725 4.64043 -637633261 5.3026 -637567729 -1.98868 -637633265 -2.03566 -637567733 9.12254 -637633269 1.88422 -637567737 -1.98121 -637633273 2.1893 -637567741 -5.94335 -637633277 3.17705 -637567853 -0.7854 -637633389 -9.6011 -637567857 -10.2349 -637633393 -9.46503 -637567861 -4.14705 -637633397 -2.33561 -637567865 -1.01292 -637633401 2.9079 -637567869 7.49742 -637633405 5.80214 -637567981 1.57972 -637633517 2.83287 -637567985 -6.52804 -637633521 -7.35044 -637567989 -4.93823 -637633525 4.16326 -637567993 -4.46695 -637633529 -1.08164 -637567997 -1.22041 -637633533 -2.55531 -637568109 1.59263 -637633645 1.02898 -637568113 4.39065 -637633649 3.67988 -637568117 4.99899 -637633653 -2.89819 -637568121 0.169571 -637633657 4.86242 -637568125 -2.63137 -637633661 -2.36367 -637568237 6.56202 -637633773 1.8368 -637568241 1.5115 -637633777 -4.19918 -637568245 4.36595 -637633781 0.0907669 -637568249 -8.8989 -637633785 10.167 -637568253 -0.188733 -637633789 3.30107 -637568365 2.5078 -637633901 4.73154 -637568369 7.25485 -637633905 -3.66199 -637568373 0.512358 -637633909 0.751462 -637568377 -5.92989 -637633913 3.52438 -637568381 -0.735905 -637633917 6.7896 -637568493 -2.36601 -637634029 -10.7027 -637568497 1.09099 -637634033 1.26884 -637568501 1.06884 -637634037 4.86373 -637568505 -5.04899 -637634041 -3.99253 -637568509 0.602224 -637634045 -0.751487 -637571181 4.5498 -637636717 3.95343 -637571185 -2.5942 -637636721 7.26842 -637571189 1.73521 -637636725 -7.54132 -637571193 -2.12334 -637636729 -2.31477 -637571197 -4.73717 -637636733 9.51769 -637571309 1.16642 -637636845 4.55855 -637571313 5.95248 -637636849 8.26575 -637571317 10.7574 -637636853 -2.12216 -637571321 -2.65908 -637636857 0.975016 -637571325 2.38588 -637636861 1.43941 -637571437 -4.95178 -637636973 6.82276 -637571441 2.95164 -637636977 -4.51178 -637571445 0.410655 -637636981 -11.2264 -637571449 -6.29873 -637636985 2.32021 -637571453 0.80648 -637636989 0.310845 -637571565 8.15215 -637637101 2.68992 -637571569 1.742 -637637105 0.239482 -637571573 -1.07458 -637637109 -2.73704 -637571577 -6.76668 -637637113 -1.9515 -637571581 -10.1257 -637637117 -0.232636 -637571693 4.56808 -637637229 -5.74855 -637571697 -5.42832 -637637233 -3.32408 -637571701 0.133222 -637637237 0.556516 -637571705 3.61994 -637637241 -2.21772 -637571709 2.87179 -637637245 7.88679 -637571821 -4.41419 -637637357 -1.7656 -637571825 -9.41335 -637637361 8.88661 -637571829 10.7542 -637637365 1.54431 -637571833 -2.15671 -637637369 4.67544 -637571837 -8.55336 -637637373 5.12136 -637571949 2.29673 -637637485 0.610712 -637571953 0.199288 -637637489 -2.11349 -637571957 -11.5247 -637637493 1.94224 -637571961 8.15345 -637637497 8.61419 -637571965 -3.51076 -637637501 -0.866949 -637572077 -7.98049 -637637613 4.29595 -637572081 -2.81752 -637637617 7.04421 -637572085 -3.76241 -637637621 1.9817 -637572089 -1.53242 -637637625 5.22497 -637572093 -7.70815 -637637629 -2.06332 -637572333 -0.0424923 -637637869 -0.348633 -637572337 7.78216 -637637873 0.204725 -637572341 -4.28521 -637637877 1.04962 -637572345 -3.74994 -637637881 -2.24608 -637572349 2.57462 -637637885 -6.04722 -637572589 4.34996 -637638125 -6.39039 -637572593 -5.28514 -637638129 -5.22007 -637572597 2.10592 -637638133 11.5675 -637572601 3.79726 -637638137 3.53118 -637572605 1.03556 -637638141 -6.62176 -637575661 -14.0646 -637641197 2.09773 -637575665 5.87192 -637641201 -4.04066 -637575669 3.91873 -637641205 0.684936 -637575673 -5.73203 -637641209 -2.28167 -637575677 7.30374 -637641213 -0.426423 -637579757 -1.58674 -637645293 -1.23372 -637579761 4.35726 -637645297 0.330351 -637579765 5.23147 -637645301 -1.58871 -637579769 -2.69629 -637645305 -2.60523 -637579773 -2.02564 -637645309 -5.55283 -574914560 1.4816 -575176704 1.15087 -575438848 1.19551 -575700992 0.965557 -575963136 0.223023 -576225280 -1.02309 -576487424 1.58335 -576749568 0.0435336 -577011712 -0.585078 -577273856 0.37937 -577536000 0.501323 -577798144 1.59442 -579108864 0.04829 -579371008 2.24735 -579633152 1.21881 -579895296 2.29907 -580157440 0.585826 -580419584 -0.371138 -580681728 -0.784067 -580943872 -0.780065 -581206016 0.900997 -581468160 1.63037 -581730304 1.91388 -581992448 -0.680433 -583303168 0.478206 -583565312 -0.729319 -583827456 0.506768 -584089600 0.835964 -584351744 0.533669 -584613888 1.52413 -584876032 0.783291 -585138176 1.37809 -585400320 1.63119 -585662464 2.97563 -585924608 2.33858 -586186752 -0.583533 -587497472 0.734584 -587759616 -0.183901 -588021760 1.32067 -588283904 0.38393 -590643200 0.025526 -588546048 0.628978 -588808192 0.655558 -589070336 -0.358367 -589332480 0.405967 -589594624 1.245 -589856768 0.000832399 -590905344 1.2446 -590118912 -0.837512 -590381056 -1.01581 -574947328 0.77815 -575209472 3.02376 -575471616 -0.382007 -575733760 0.113068 -575995904 1.07598 -576258048 0.0902802 -576520192 1.0383 -576782336 1.47143 -577044480 1.62586 -577306624 0.858101 -577568768 -0.277764 -577830912 -0.936056 -579141632 -1.44164 -579403776 0.515206 -579665920 0.796663 -579928064 0.712763 -580190208 0.902406 -580452352 -1.11337 -580714496 1.67182 -580976640 -1.75267 -581238784 0.404312 -581500928 -0.458022 -581763072 0.8757 -582025216 0.627996 -583335936 0.174612 -583598080 0.155462 -583860224 0.347457 -584122368 0.727693 -584384512 -1.21808 -584646656 0.881855 -584908800 -1.57624 -585170944 1.23444 -585433088 1.18804 -585695232 -0.900637 -585957376 -0.850452 -586219520 0.85038 -587530240 0.402755 -587792384 1.15312 -588054528 -0.593254 -588316672 -1.30475 -590675968 -0.599093 -588578816 -1.81122 -588840960 0.804804 -589103104 1.30828 -589365248 1.83105 -589627392 1.0785 -589889536 1.83589 -590938112 1.15603 -590151680 1.73046 -590413824 -1.26972 -574980096 0.352297 -576028672 0.116715 -577077248 1.36887 -575242240 0.482301 -576290816 0.504571 -577339392 2.04972 -575504384 0.925508 -576552960 0.828655 -577601536 -0.935985 -575766528 -0.186126 -576815104 1.15827 -577863680 0.7047 -579174400 0.444614 -580222976 1.0881 -581271552 1.06957 -579436544 0.960754 -580485120 0.857428 -581533696 1.2123 -579698688 0.388513 -580747264 0.137898 -581795840 -0.583071 -579960832 1.11219 -581009408 1.31436 -582057984 0.509476 -583368704 1.1675 -584417280 0.490363 -585465856 -1.05861 -583630848 -0.768873 -584679424 0.181837 -585728000 -0.0141009 -583892992 2.16157 -584941568 1.49475 -585990144 2.4093 -584155136 -0.891009 -585203712 -1.04179 -586252288 -0.568035 -587563008 -0.341604 -587825152 1.83629 -588087296 1.81688 -588349440 0.825708 -590708736 1.43302 -588611584 0.0464914 -588873728 0.175284 -589135872 0.407462 -589398016 0.325634 -589660160 1.1291 -589922304 0.606164 -590970880 0.838954 -590184448 0.58415 -590446592 -1.15643 -575012864 0.357422 -575275008 0.987336 -575537152 0.776167 -575799296 2.16154 -576061440 0.601252 -576323584 -0.0025591 -576585728 -0.0711347 -576847872 0.250211 -577110016 -0.282646 -577372160 0.391809 -577634304 0.743716 -577896448 0.274828 -579207168 -1.1328 -579469312 2.31447 -579731456 2.02462 -579993600 1.30062 -580255744 0.456765 -580517888 0.124148 -580780032 0.803798 -581042176 -0.287346 -581304320 0.949558 -581566464 0.67316 -581828608 1.10189 -582090752 1.28785 -583401472 2.20478 -583663616 -0.22223 -583925760 -1.20568 -584187904 0.0149705 -584450048 0.793184 -584712192 -0.147296 -584974336 0.757433 -585236480 1.53418 -585498624 -0.102433 -585760768 1.63918 -586022912 0.388957 -586285056 0.109066 -587595776 1.57753 -587857920 1.49463 -588120064 1.81493 -588382208 -0.833509 -590741504 -0.656034 -588644352 -0.570791 -588906496 0.396371 -589168640 0.175378 -589430784 0.128522 -589692928 0.514887 -589955072 0.247087 -591003648 2.001 -590217216 1.54964 -590479360 1.90081 -575045632 -1.03644 -575307776 -1.21489 -575569920 -0.020565 -575832064 1.83937 -576094208 -0.0764598 -576356352 0.788257 -576618496 0.731987 -576880640 -1.03018 -577142784 2.75401 -577404928 0.560813 -577667072 1.23473 -577929216 0.694355 -579239936 -0.851857 -579502080 1.01199 -579764224 0.800888 -580026368 0.0867209 -580288512 2.10413 -580550656 1.605 -580812800 1.65063 -581074944 2.96054 -581337088 1.52459 -581599232 -0.386601 -581861376 0.279763 -582123520 1.16737 -583434240 -0.233972 -583696384 1.79449 -583958528 1.66452 -584220672 -0.813391 -584482816 0.773123 -584744960 0.115383 -585007104 1.12577 -585269248 1.3905 -585531392 0.0127318 -585793536 0.727783 -586055680 0.543869 -586317824 0.643478 -587628544 -0.89577 -587890688 0.0989628 -588152832 2.05043 -588414976 0.203489 -590774272 1.32207 -588677120 1.45415 -588939264 0.57996 -589201408 0.382282 -589463552 2.67474 -589725696 0.244932 -589987840 -0.438003 -591036416 -1.41455 -590249984 1.40473 -590512128 2.35476 -604017672 1.55259 -604017744 4.41434 -604017752 1.93279 -604017760 1.55821 -604017768 3.1165 -604017776 2.55792 -604017784 0.680428 -604017792 2.79299 -604017800 0.64554 -604017808 3.18193 -604017816 4.13025 -604017680 1.67737 -604017824 4.14239 -604017832 2.2979 -604017840 2.15507 -604017848 1.02768 -604017856 1.72511 -604017864 0.71384 -604017872 1.98499 -604017880 3.94256 -604017888 2.14134 -604017896 1.94862 -604017688 1.02894 -604017904 2.38044 -604017912 1.9018 -604017920 3.33885 -604017928 4.15043 -604017936 2.59769 -604017944 1.64873 -604017952 3.3453 -604017696 4.61682 -604017704 2.8253 -604017712 3.55912 -604017720 2.4758 -604017728 1.49002 -604017736 2.72299 -604018184 4.43154 -604018256 2.1396 -604018264 1.75271 -604018272 2.45571 -604018280 1.46096 -604018288 1.85916 -604018296 0.429667 -604018304 2.53527 -604018312 2.60939 -604018320 2.16214 -604018328 2.50575 -604018192 2.91208 -604018336 2.01087 -604018344 2.53829 -604018352 2.43601 -604018360 3.50405 -604018368 3.79587 -604018376 1.8548 -604018384 2.79562 -604018392 3.20193 -604018400 2.31278 -604018408 2.6465 -604018200 3.78825 -604018416 4.11686 -604018424 1.97553 -604018432 0.538769 -604018440 4.58903 -604018448 2.4132 -604018456 1.99437 -604018464 2.22579 -604018208 2.38566 -604018216 1.47588 -604018224 0.505544 -604018232 2.54042 -604018240 1.9076 -604018248 1.76157 -604018696 2.5446 -604018768 1.71539 -604018776 0.992546 -604018784 3.23785 -604018792 2.51926 -604018800 1.7961 -604018808 2.88717 -604018816 1.65125 -604018824 1.3996 -604018832 3.01295 -604018840 3.52379 -604018704 2.5457 -604018848 2.21789 -604018856 2.88136 -604018864 0.716905 -604018872 1.83012 -604018880 0.980368 -604018888 3.59364 -604018896 1.99184 -604018904 4.13054 -604018912 3.41253 -604018920 3.15713 -604018712 2.8398 -604018928 1.8088 -604018936 3.0397 -604018944 2.63389 -604018952 2.00921 -604018960 0.88441 -604018968 1.82356 -604018976 4.22291 -604018720 2.36746 -604018728 2.69002 -604018736 1.28326 -604018744 4.05671 -604018752 2.08254 -604018760 1.4724 -604021256 3.38337 -604021328 2.25177 -604021336 0.479889 -604021344 4.46225 -604021352 2.5752 -604021360 3.64354 -604021368 2.05851 -604021376 2.26406 -604021384 2.48935 -604021392 0.846236 -604021264 2.59514 -604021272 1.63596 -604021280 2.73865 -604021288 2.29097 -604021296 2.0481 -604021304 1.97701 -604021312 1.66158 -604021320 4.18503 -604021768 1.86093 -604021840 2.48017 -604021848 0.630095 -604021856 1.36865 -604021864 0.877344 -604021872 2.80388 -604021880 1.36526 -604021888 1.87488 -604021896 3.14974 -604021904 1.62532 -604021912 0.511952 -604021776 2.10114 -604021920 2.08636 -604021928 3.97056 -604021936 4.42001 -604021944 2.60365 -604021952 3.03986 -604021960 4.37508 -604021968 2.91226 -604021976 1.04215 -604021984 3.59412 -604021992 2.83555 -604021784 1.81771 -604022000 0.241794 -604022008 -0.682016 -604022016 2.5001 -604022024 2.46569 -604022032 1.07884 -604022040 1.20147 -604022048 1.14024 -604021792 1.38235 -604021800 1.93592 -604021808 1.24039 -604021816 1.99746 -604021824 0.824587 -604021832 1.70309 -604025352 2.67761 -604025424 1.69096 -604025432 0.354091 -604025440 3.74146 -604025448 2.28775 -604025456 2.43066 -604025464 1.65509 -604025472 2.74859 -604025480 2.79539 -604025488 2.44443 -604025360 1.86419 -604025368 2.67385 -604025376 2.56461 -604025384 2.90299 -604025392 3.98767 -604025400 2.29008 -604025408 2.19707 -604025416 1.8338 -604025864 3.54191 -604025936 1.11573 -604025944 1.30754 -604025952 0.634763 -604025960 1.3058 -604025968 4.3694 -604025976 4.75587 -604025984 0.823417 -604025992 2.35521 -604026000 2.54804 -604026008 3.14186 -604025872 2.95414 -604026016 0.476298 -604026024 2.44145 -604026032 2.44878 -604026040 1.31971 -604026048 1.99653 -604026056 2.22133 -604026064 0.412224 -604026072 2.12993 -604026080 1.85301 -604026088 1.13907 -604025880 1.70067 -604026096 2.87865 -604026104 1.94034 -604026112 3.18545 -604026120 2.67214 -604026128 1.87586 -604026136 2.58763 -604026144 1.36402 -604025888 2.41699 -604025896 2.24784 -604025904 1.39881 -604025912 3.21081 -604025920 4.09955 -604025928 2.55475 -604029448 1.14854 -604029520 2.05961 -604029528 2.11095 -604029536 3.32941 -604029544 2.01407 -604029552 3.14971 -604029560 3.30424 -604029568 2.70818 -604029576 1.1931 -604029584 2.46563 -604029456 4.25291 -604029464 0.588643 -604029472 2.57577 -604029480 3.52009 -604029488 2.65626 -604029496 4.48166 -604029504 4.21645 -604029512 1.29222 -604029960 3.26463 -604030032 2.29978 -604030040 3.83195 -604030048 2.6195 -604030056 3.4741 -604030064 1.35196 -604030072 1.97654 -604030080 2.30716 -604030088 4.02774 -604030096 3.24886 -604030104 1.64115 -604029968 1.37078 -604030112 1.56748 -604030120 3.09675 -604030128 3.61719 -604030136 2.68121 -604030144 4.22842 -604030152 1.72178 -604030160 2.56361 -604030168 4.25976 -604030176 0.922411 -604030184 1.37342 -604029976 1.20006 -604030192 1.82204 -604030200 1.96089 -604030208 2.97825 -604030216 1.84574 -604030224 3.33971 -604030232 3.91455 -604030240 1.80197 -604029984 1.77732 -604029992 2.68387 -604030000 1.43896 -604030008 0.590523 -604030016 3.15329 -604030024 2.06223 -604050440 1.77854 -604050512 1.81196 -604050520 2.43735 -604050528 2.34613 -604050536 1.91888 -604050544 1.6314 -604050552 -0.09012 -604050560 -0.569445 -604050568 1.14178 -604050576 2.32897 -604050584 2.1494 -604050448 2.25335 -604050592 2.9518 -604050600 1.63476 -604050608 3.24563 -604050616 3.0436 -604050624 2.19357 -604050632 1.90989 -604050640 2.49308 -604050648 2.97977 -604050656 3.22413 -604050664 3.77249 -604050456 2.06896 -604050672 0.536637 -604050680 2.3531 -604050688 1.62644 -604050696 2.48378 -604050704 1.75731 -604050712 3.1318 -604050720 4.28085 -604050464 1.82843 -604050472 1.34301 -604050480 1.29198 -604050488 2.1524 -604050496 2.51966 -604050504 3.82349 -604050952 2.13727 -604051024 2.45569 -604051032 3.39008 -604051040 1.10914 -604051048 1.90291 -604051056 3.71474 -604051064 1.23615 -604051072 3.24734 -604051080 3.15173 -604051088 3.04892 -604051096 3.75315 -604050960 5.46297 -604051104 1.96184 -604051112 1.0999 -604051120 2.21553 -604051128 3.17752 -604051136 3.85967 -604051144 0.570779 -604051152 2.63558 -604051160 2.13718 -604051168 2.17491 -604051176 1.69955 -604050968 2.51432 -604051184 0.934878 -604051192 2.45028 -604051200 2.56857 -604051208 2.64108 -604051216 1.55604 -604051224 2.71766 -604051232 3.24476 -604050976 2.32059 -604050984 1.21757 -604050992 2.11634 -604051000 2.7272 -604051008 2.22132 -604051016 0.923446 -604051464 4.10345 -604051536 2.91343 -604051544 2.32148 -604051552 2.07458 -604051560 2.60435 -604051568 4.19221 -604051576 3.8109 -604051584 3.29898 -604051592 3.41096 -604051600 1.58226 -604051608 2.97562 -604051472 2.18041 -604051616 2.3157 -604051624 3.36334 -604051632 2.09736 -604051640 2.03118 -604051648 3.1033 -604051656 3.70557 -604051664 1.64116 -604051672 1.68481 -604051680 1.08655 -604051688 2.42974 -604051480 1.45707 -604051696 4.40897 -604051704 3.24494 -604051712 2.95879 -604051720 1.35576 -604051728 2.5251 -604051736 2.97639 -604051744 0.685691 -604051488 2.57585 -604051496 3.34106 -604051504 4.33363 -604051512 2.54704 -604051520 4.19062 -604051528 2.26319 -604054024 0.827515 -604054096 1.76304 -604054104 2.94733 -604054112 2.49879 -604054120 2.37119 -604054128 1.22621 -604054136 2.46175 -604054144 2.38522 -604054152 2.8182 -604054160 0.770496 -604054032 1.6556 -604054040 2.61173 -604054048 1.00627 -604054056 1.74014 -604054064 2.99668 -604054072 2.75159 -604054080 3.00399 -604054088 1.53138 -604054536 2.76046 -604054608 2.64539 -604054616 2.96397 -604054624 1.68617 -604054632 3.54186 -604054640 2.97525 -604054648 3.67945 -604054656 3.19217 -604054664 2.45864 -604054672 2.45797 -604054680 2.38232 -604054544 2.79776 -604054688 2.10778 -604054696 1.21832 -604054704 3.46042 -604054712 3.64181 -604054720 1.97601 -604054728 2.87933 -604054736 1.72722 -604054744 0.46691 -604054752 2.28025 -604054760 5.49371 -604054552 2.42273 -604054768 4.14478 -604054776 1.91433 -604054784 3.37261 -604054792 1.90299 -604054800 0.833405 -604054808 1.78267 -604054816 2.28209 -604054560 2.25767 -604054568 1.98761 -604054576 2.57353 -604054584 2.71307 -604054592 3.72923 -604054600 2.95455 -604058120 2.65223 -604058192 0.555761 -604058200 1.95522 -604058208 0.516024 -604058216 -0.145868 -604058224 4.01197 -604058232 1.33103 -604058240 1.39696 -604058248 1.76018 -604058256 2.08263 -604058128 2.56633 -604058136 2.6099 -604058144 3.34117 -604058152 1.85606 -604058160 1.59694 -604058168 3.32004 -604058176 1.23301 -604058184 3.90189 -604058632 3.00247 -604058704 1.7349 -604058712 3.20592 -604058720 3.98986 -604058728 1.19036 -604058736 3.39278 -604058744 1.46878 -604058752 -0.00393421 -604058760 1.31965 -604058768 3.2371 -604058776 2.28871 -604058640 2.46089 -604058784 2.08505 -604058792 2.39657 -604058800 3.05317 -604058808 1.83619 -604058816 2.3348 -604058824 1.75781 -604058832 1.67144 -604058840 3.67116 -604058848 1.8047 -604058856 1.94308 -604058648 3.18522 -604058864 2.86966 -604058872 3.96248 -604058880 1.45241 -604058888 4.76648 -604058896 2.21639 -604058904 2.88115 -604058912 0.632078 -604058656 2.2048 -604058664 2.03014 -604058672 2.654 -604058680 1.19852 -604058688 2.59821 -604058696 1.61578 -604062216 3.43987 -604062288 1.62933 -604062296 3.91364 -604062304 1.40196 -604062312 2.40485 -604062320 3.43573 -604062328 2.11308 -604062336 3.81388 -604062344 1.46341 -604062352 1.7554 -604062224 1.32159 -604062232 1.78612 -604062240 1.13668 -604062248 2.18276 -604062256 1.6271 -604062264 2.31982 -604062272 4.20088 -604062280 2.47026 -604062728 0.732653 -604062800 2.86122 -604062808 2.07839 -604062816 2.76152 -604062824 2.24604 -604062832 2.06382 -604062840 3.67834 -604062848 0.640519 -604062856 3.24762 -604062864 1.00324 -604062872 1.62168 -604062736 3.85504 -604062880 2.93482 -604062888 1.99362 -604062896 3.54868 -604062904 0.351049 -604062912 0.501146 -604062920 3.11214 -604062928 2.30813 -604062936 2.68453 -604062944 2.22735 -604062952 5.13231 -604062744 2.12739 -604062960 5.14618 -604062968 2.04973 -604062976 0.0771425 -604062984 1.45535 -604062992 4.6677 -604063000 0.27169 -604063008 1.56821 -604062752 1.47326 -604062760 1.83933 -604062768 2.84993 -604062776 2.23832 -604062784 2.54982 -604062792 1.85964 diff --git a/SUSYBSMAnalysis/HSCP/interface/BetaCalculatorECAL.h b/SUSYBSMAnalysis/HSCP/interface/BetaCalculatorECAL.h deleted file mode 100644 index e66d6f38de410..0000000000000 --- a/SUSYBSMAnalysis/HSCP/interface/BetaCalculatorECAL.h +++ /dev/null @@ -1,69 +0,0 @@ -// system include files -#include -#include -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/DetId/interface/DetId.h" -#include "DataFormats/GeometryVector/interface/GlobalPoint.h" -#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" - -#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/CaloTopology/interface/CaloTopology.h" - -#include "TrackingTools/TrackAssociator/interface/TrackDetectorAssociator.h" -#include "TrackingTools/TrackAssociator/interface/TrackAssociatorParameters.h" -#include "TrackingTools/TrackAssociator/interface/DetIdAssociator.h" -#include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h" - -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" - -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCParticle.h" -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCPCaloInfo.h" - -class BetaCalculatorECAL { -public: - BetaCalculatorECAL(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC); - void addInfoToCandidate(susybsm::HSCParticle& candidate, - edm::Handle& tracks, - edm::Event& iEvent, - const edm::EventSetup& iSetup, - susybsm::HSCPCaloInfo& caloInfo); - -private: - int getDetailedTrackLengthInXtals(std::map& trackExitPositionMap, - std::map& trackCrossedXtalMap, - double& totalLengthCurved, - GlobalPoint& internalPointCurved, - GlobalPoint& externalPointCurved, - const CaloGeometry* theGeometry, - const CaloTopology* theTopology, - const std::vector& neckLace); - std::vector calcEcalDeposit(const FreeTrajectoryState* tkInnerState, - const DetIdAssociator& associator); - void addStepToXtal(std::map& trackExitPositionMap, - std::map& trackCrossedXtalMap, - DetId aDetId, - float step, - GlobalPoint point, - const CaloSubdetectorGeometry* theSubdetGeometry); - - // Data members - TrackDetectorAssociator trackAssociator_; - TrackAssociatorParameters parameters_; - edm::EDGetTokenT EBRecHitCollectionToken_; - edm::EDGetTokenT EERecHitCollectionToken_; - - edm::ESGetToken ecalDetIdAssociatorToken_; - edm::ESGetToken bFieldToken_; - edm::ESGetToken theCaloGeometryToken_; - edm::ESGetToken caloTopologyToken_; - const MagneticField* bField_; -}; diff --git a/SUSYBSMAnalysis/HSCP/interface/BetaCalculatorMUON.h b/SUSYBSMAnalysis/HSCP/interface/BetaCalculatorMUON.h deleted file mode 100644 index 21d04f43af3a4..0000000000000 --- a/SUSYBSMAnalysis/HSCP/interface/BetaCalculatorMUON.h +++ /dev/null @@ -1,30 +0,0 @@ -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "DataFormats/MuonReco/interface/MuonTimeExtra.h" -#include "DataFormats/MuonReco/interface/MuonTimeExtraMap.h" - -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCParticle.h" - -class BetaCalculatorMUON { -public: - BetaCalculatorMUON(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC); - void addInfoToCandidate(susybsm::HSCParticle& candidate, edm::Event& iEvent, const edm::EventSetup& iSetup); - - edm::EDGetTokenT m_muontiming_dt; - edm::EDGetTokenT m_muontiming_csc; - edm::EDGetTokenT m_muontiming_combined; -}; diff --git a/SUSYBSMAnalysis/HSCP/interface/BetaCalculatorRPC.h b/SUSYBSMAnalysis/HSCP/interface/BetaCalculatorRPC.h deleted file mode 100644 index 4476bb443fac1..0000000000000 --- a/SUSYBSMAnalysis/HSCP/interface/BetaCalculatorRPC.h +++ /dev/null @@ -1,47 +0,0 @@ -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCParticle.h" - -class BetaCalculatorRPC { -public: - BetaCalculatorRPC(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC); - void algo(const std::vector& HSCPRPCRecHits); - void addInfoToCandidate(susybsm::HSCParticle& candidate, const edm::Event& iEvent, const edm::EventSetup& iSetup); - float beta() { return betavalue; } - -private: - bool foundvalue; - float phivalue; - float etavalue; - float betavalue; - - float etarange(float eta1, float eta2, float eta3); - float dist(float phi1, float phi2); - float dist3(float phi1, float phi2, float phi3); - - edm::EDGetTokenT rpcRecHitsToken; -}; diff --git a/SUSYBSMAnalysis/HSCP/interface/BetaCalculatorTK.h b/SUSYBSMAnalysis/HSCP/interface/BetaCalculatorTK.h deleted file mode 100644 index de23cc597c1de..0000000000000 --- a/SUSYBSMAnalysis/HSCP/interface/BetaCalculatorTK.h +++ /dev/null @@ -1,38 +0,0 @@ -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "DataFormats/TrackReco/interface/DeDxData.h" - -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCParticle.h" - -class BetaCalculatorTK { -public: - BetaCalculatorTK(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC); - void addInfoToCandidate(susybsm::HSCParticle& candidate, edm::Event& iEvent, const edm::EventSetup& iSetup); - - edm::EDGetTokenT m_dedxEstimator1Token; - edm::EDGetTokenT m_dedxEstimator2Token; - edm::EDGetTokenT m_dedxEstimator3Token; - edm::EDGetTokenT m_dedxEstimator4Token; - edm::EDGetTokenT m_dedxEstimator5Token; - edm::EDGetTokenT m_dedxEstimator6Token; - edm::EDGetTokenT m_dedxDiscriminator1Token; - edm::EDGetTokenT m_dedxDiscriminator2Token; - edm::EDGetTokenT m_dedxDiscriminator3Token; - edm::EDGetTokenT m_dedxDiscriminator4Token; - edm::EDGetTokenT m_dedxDiscriminator5Token; - edm::EDGetTokenT m_dedxDiscriminator6Token; -}; diff --git a/SUSYBSMAnalysis/HSCP/interface/CandidateSelector.h b/SUSYBSMAnalysis/HSCP/interface/CandidateSelector.h deleted file mode 100644 index 1826b031159b7..0000000000000 --- a/SUSYBSMAnalysis/HSCP/interface/CandidateSelector.h +++ /dev/null @@ -1,51 +0,0 @@ -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCParticle.h" - -class CandidateSelector { -public: - CandidateSelector(const edm::ParameterSet& iConfig); - bool isSelected(susybsm::HSCParticle& candidate); - - bool isTrack; - bool isMuon; - bool isMuonSTA; - bool isMuonGB; - bool isMuonTK; - bool isMTMuon; - bool isRpc; - bool isEcal; - - int minTrackHits; - float minTrackP; - float minTrackPt; - float minDedx; - - float minMuonP; - float minMuonPt; - float minSAMuonPt; - float minMTMuonPt; - - float maxMuTimeDtBeta; - float minMuTimeDtNdof; - float maxMuTimeCscBeta; - float minMuTimeCscNdof; - float maxMuTimeCombinedBeta; - float minMuTimeCombinedNdof; - - float maxBetaRpc; - float maxBetaEcal; -}; diff --git a/SUSYBSMAnalysis/HSCP/plugins/BuildFile.xml b/SUSYBSMAnalysis/HSCP/plugins/BuildFile.xml deleted file mode 100644 index 2ac621e976d65..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/BuildFile.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/SUSYBSMAnalysis/HSCP/plugins/HSCPDeDxInfoProducer.cc b/SUSYBSMAnalysis/HSCP/plugins/HSCPDeDxInfoProducer.cc deleted file mode 100644 index bf5618ebea598..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/HSCPDeDxInfoProducer.cc +++ /dev/null @@ -1,217 +0,0 @@ -// -*- C++ -*- -// -// Package: HSCPDeDxInfoProducer -// Class: HSCPDeDxInfoProducer -// -/**\class HSCPDeDxInfoProducer HSCPDeDxInfoProducer.cc RecoTracker/HSCPDeDxInfoProducer/src/HSCPDeDxInfoProducer.cc - - Description: - - Implementation: - -*/ -// -// Original Author: andrea -// Created: Thu May 31 14:09:02 CEST 2007 -// Code Updates: loic Quertenmont (querten) -// Created: Thu May 10 14:09:02 CEST 2008 -// -// - -#include "SUSYBSMAnalysis/HSCP/plugins/HSCPDeDxInfoProducer.h" - -// system include files - -using namespace reco; -using namespace std; -using namespace edm; - -HSCPDeDxInfoProducer::HSCPDeDxInfoProducer(const edm::ParameterSet& iConfig) { - produces >(); - - MaxNrStrips = iConfig.getUntrackedParameter("maxNrStrips", 255); - MinTrackHits = iConfig.getUntrackedParameter("MinTrackHits", 4); - MinTrackMomentum = iConfig.getUntrackedParameter("minTrackMomentum", 0.0); - MaxTrackMomentum = iConfig.getUntrackedParameter("maxTrackMomentum", 99999.0); - MinTrackEta = iConfig.getUntrackedParameter("minTrackEta", -5.0); - MaxTrackEta = iConfig.getUntrackedParameter("maxTrackEta", 5.0); - - m_tracksTag = consumes(iConfig.getParameter("tracks")); - m_trajTrackAssociationTag = - consumes(iConfig.getParameter("trajectoryTrackAssociation")); - useTrajectory = iConfig.getUntrackedParameter("UseTrajectory", true); - - usePixel = iConfig.getParameter("UsePixel"); - useStrip = iConfig.getParameter("UseStrip"); - meVperADCPixel = iConfig.getParameter("MeVperADCPixel"); - meVperADCStrip = iConfig.getParameter("MeVperADCStrip"); - - shapetest = iConfig.getParameter("ShapeTest"); - useCalibration = iConfig.getParameter("UseCalibration"); - m_calibrationPath = iConfig.getParameter("calibrationPath"); - - // Reccord = iConfig.getUntrackedParameter ("Reccord" , "SiStripDeDxMip_3D_Rcd"); - // ProbabilityMode = iConfig.getUntrackedParameter ("ProbabilityMode" , "Accumulation"); - // Prob_ChargePath = NULL; - - if (!usePixel && !useStrip) - edm::LogWarning("DeDxHitsProducer") - << "Pixel Hits AND Strip Hits will not be used to estimate dEdx --> BUG, Please Update the config file"; -} - -HSCPDeDxInfoProducer::~HSCPDeDxInfoProducer() {} - -// ------------ method called once each job just before starting event loop ------------ -void HSCPDeDxInfoProducer::beginRun(edm::Run const& run, const edm::EventSetup& iSetup) { - if (useCalibration && calibGains.empty()) { - edm::ESHandle tkGeom; - iSetup.get().get(tkGeom); - m_off = tkGeom->offsetDU(GeomDetEnumerators::PixelBarrel); //index start at the first pixel - - DeDxTools::makeCalibrationMap(m_calibrationPath, *tkGeom, calibGains, m_off); - } - - // DeDxTools::buildDiscrimMap(run, iSetup, Reccord, ProbabilityMode, Prob_ChargePath); -} - -void HSCPDeDxInfoProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - unique_ptr > trackDeDxAssociation(new ValueMap); - ValueMap::Filler filler(*trackDeDxAssociation); - - edm::Handle trackCollectionHandle; - iEvent.getByToken(m_tracksTag, trackCollectionHandle); - - Handle trajTrackAssociationHandle; - if (useTrajectory) - iEvent.getByToken(m_trajTrackAssociationTag, trajTrackAssociationHandle); - - std::vector dEdxInfos(trackCollectionHandle->size()); - - TrajTrackAssociationCollection::const_iterator cit; - if (useTrajectory) - cit = trajTrackAssociationHandle->begin(); - for (unsigned int j = 0; j < trackCollectionHandle->size(); j++) { - const reco::TrackRef track = reco::TrackRef(trackCollectionHandle.product(), j); - - susybsm::HSCPDeDxInfo hscpDeDxInfo; - - if (useTrajectory) { //trajectory allows to take into account the local direction of the particle on the module sensor --> muc much better 'dx' measurement - const edm::Ref > traj = cit->key; - cit++; - const vector& measurements = traj->measurements(); - for (vector::const_iterator it = measurements.begin(); it != measurements.end(); it++) { - TrajectoryStateOnSurface trajState = it->updatedState(); - if (!trajState.isValid()) - continue; - - const TrackingRecHit* recHit = (*it->recHit()).hit(); - if (!recHit) - continue; - LocalVector trackDirection = trajState.localDirection(); - float cosine = trackDirection.z() / trackDirection.mag(); - - processHit(recHit, trajState.localMomentum().mag(), cosine, hscpDeDxInfo, trajState.localPosition()); - } - - } else { //assume that the particles trajectory is a straight line originating from the center of the detector (can be improved) - for (unsigned int h = 0; h < track->recHitsSize(); h++) { - const TrackingRecHit* recHit = &(*(track->recHit(h))); - auto const& thit = static_cast(*recHit); - if (!thit.isValid()) - continue; //make sure it's a tracker hit - - const GlobalVector& ModuleNormal = recHit->detUnit()->surface().normalVector(); - float cosine = - (track->px() * ModuleNormal.x() + track->py() * ModuleNormal.y() + track->pz() * ModuleNormal.z()) / - track->p(); - - processHit(recHit, track->p(), cosine, hscpDeDxInfo, LocalPoint(0.0, 0.0)); - } - } - - dEdxInfos[j] = hscpDeDxInfo; - } - /////////////////////////////////////// - - filler.insert(trackCollectionHandle, dEdxInfos.begin(), dEdxInfos.end()); - filler.fill(); - iEvent.put(std::move(trackDeDxAssociation)); -} - -void HSCPDeDxInfoProducer::processHit(const TrackingRecHit* recHit, - float trackMomentum, - float& cosine, - susybsm::HSCPDeDxInfo& hscpDeDxInfo, - LocalPoint HitLocalPos) { - auto const& thit = static_cast(*recHit); - if (!thit.isValid()) - return; - - auto const& clus = thit.firstClusterRef(); - if (!clus.isValid()) - return; - - if (clus.isPixel()) { - if (!usePixel) - return; - - auto& detUnit = *(recHit->detUnit()); - float pathLen = detUnit.surface().bounds().thickness() / fabs(cosine); - float chargeAbs = clus.pixelCluster().charge(); - hscpDeDxInfo.charges.push_back(chargeAbs); - hscpDeDxInfo.pathlengths.push_back(pathLen); - hscpDeDxInfo.detIds.push_back(thit.geographicalId()); - hscpDeDxInfo.localPosXs.push_back(HitLocalPos.x()); - hscpDeDxInfo.localPosYs.push_back(HitLocalPos.y()); - hscpDeDxInfo.clusterIndices.push_back(clus.key()); - } else if (clus.isStrip() && !thit.isMatched()) { - if (!useStrip) - return; - - auto& detUnit = *(recHit->detUnit()); - int NSaturating = 0; - float pathLen = detUnit.surface().bounds().thickness() / fabs(cosine); - float chargeAbs = DeDxTools::getCharge(&(clus.stripCluster()), NSaturating, detUnit, calibGains, m_off); - hscpDeDxInfo.charges.push_back(chargeAbs); - hscpDeDxInfo.pathlengths.push_back(pathLen); - hscpDeDxInfo.detIds.push_back(thit.geographicalId()); - hscpDeDxInfo.localPosXs.push_back(HitLocalPos.x()); - hscpDeDxInfo.localPosYs.push_back(HitLocalPos.y()); - hscpDeDxInfo.clusterIndices.push_back(clus.key()); - } else if (clus.isStrip() && thit.isMatched()) { - if (!useStrip) - return; - const SiStripMatchedRecHit2D* matchedHit = dynamic_cast(recHit); - if (!matchedHit) - return; - - auto& detUnitM = *(matchedHit->monoHit().detUnit()); - int NSaturating = 0; - float pathLen = detUnitM.surface().bounds().thickness() / fabs(cosine); - float chargeAbs = - DeDxTools::getCharge(&(matchedHit->monoHit().stripCluster()), NSaturating, detUnitM, calibGains, m_off); - hscpDeDxInfo.charges.push_back(chargeAbs); - hscpDeDxInfo.pathlengths.push_back(pathLen); - hscpDeDxInfo.detIds.push_back(thit.geographicalId()); - hscpDeDxInfo.localPosXs.push_back(HitLocalPos.x()); - hscpDeDxInfo.localPosYs.push_back(HitLocalPos.y()); - const OmniClusterRef monoClusterRef = matchedHit->monoClusterRef(); - hscpDeDxInfo.clusterIndices.push_back(monoClusterRef.key()); - - auto& detUnitS = *(matchedHit->stereoHit().detUnit()); - NSaturating = 0; - pathLen = detUnitS.surface().bounds().thickness() / fabs(cosine); - chargeAbs = - DeDxTools::getCharge(&(matchedHit->stereoHit().stripCluster()), NSaturating, detUnitS, calibGains, m_off); - hscpDeDxInfo.charges.push_back(chargeAbs); - hscpDeDxInfo.pathlengths.push_back(pathLen); - hscpDeDxInfo.detIds.push_back(thit.geographicalId()); - hscpDeDxInfo.localPosXs.push_back(HitLocalPos.x()); - hscpDeDxInfo.localPosYs.push_back(HitLocalPos.y()); - const OmniClusterRef stereoClusterRef = matchedHit->stereoClusterRef(); - hscpDeDxInfo.clusterIndices.push_back(stereoClusterRef.key()); - } -} - -//define this as a plug-in -DEFINE_FWK_MODULE(HSCPDeDxInfoProducer); diff --git a/SUSYBSMAnalysis/HSCP/plugins/HSCPDeDxInfoProducer.h b/SUSYBSMAnalysis/HSCP/plugins/HSCPDeDxInfoProducer.h deleted file mode 100644 index 3da1232bac5b8..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/HSCPDeDxInfoProducer.h +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef TrackRecoDeDx_HSCPDeDxInfoProducer_H -#define TrackRecoDeDx_HSCPDeDxInfoProducer_H -// user include files - -#include - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h" -#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" - -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/TrackReco/interface/DeDxData.h" -#include "DataFormats/TrackReco/interface/TrackDeDxHits.h" -#include "DataFormats/TrackReco/interface/DeDxHit.h" -#include "DataFormats/TrackReco/interface/Track.h" - -#include "RecoTracker/DeDx/interface/DeDxTools.h" -#include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" - -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCPDeDxInfo.h" - -// -// class declaration -// - -class HSCPDeDxInfoProducer : public edm::stream::EDProducer<> { -public: - explicit HSCPDeDxInfoProducer(const edm::ParameterSet&); - ~HSCPDeDxInfoProducer() override; - -private: - void beginRun(edm::Run const& run, const edm::EventSetup&) override; - void produce(edm::Event&, const edm::EventSetup&) override; - - void makeCalibrationMap(const TrackerGeometry& tkGeom); - void processHit(const TrackingRecHit* recHit, - float trackMomentum, - float& cosine, - susybsm::HSCPDeDxInfo& hscpDeDxInfo, - LocalPoint HitLocalPos); - - // ----------member data --------------------------- - - edm::EDGetTokenT m_trajTrackAssociationTag; - edm::EDGetTokenT m_tracksTag; - - bool useTrajectory; - bool usePixel; - bool useStrip; - float meVperADCPixel; - float meVperADCStrip; - - unsigned int MaxNrStrips; - unsigned int MinTrackHits; - float MinTrackMomentum; - float MaxTrackMomentum; - float MinTrackEta; - float MaxTrackEta; - float MaxTrackChiOverNdf; - - std::string m_calibrationPath; - bool useCalibration; - bool shapetest; - - std::vector > calibGains; - unsigned int m_off; - - std::string Reccord; - std::string ProbabilityMode; - TH3F* Prob_ChargePath; -}; - -#endif diff --git a/SUSYBSMAnalysis/HSCP/plugins/HSCPHLTFilter.cc b/SUSYBSMAnalysis/HSCP/plugins/HSCPHLTFilter.cc deleted file mode 100644 index 0ab06761be06e..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/HSCPHLTFilter.cc +++ /dev/null @@ -1,435 +0,0 @@ -#include -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/EDFilter.h" -#include "FWCore/Framework/interface/Event.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Common/interface/View.h" - -#include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" - -#include "FWCore/Common/interface/TriggerResultsByName.h" -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/Common/interface/TriggerResults.h" -#include "DataFormats/HLTReco/interface/TriggerObject.h" - -// -// class declaration -// - -using namespace edm; - -class HSCPHLTFilter : public edm::EDFilter { -public: - explicit HSCPHLTFilter(const edm::ParameterSet&); - ~HSCPHLTFilter() override; - -private: - void beginJob() override; - bool filter(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - bool isDuplicate(unsigned int Run, unsigned int Event); - - bool IncreasedTreshold(const trigger::TriggerEvent& trEv, - const edm::InputTag& InputPath, - double NewThreshold, - double etaCut, - int NObjectAboveThreshold, - bool averageThreshold); - - std::string TriggerProcess; - edm::EDGetTokenT triggerResultsToken_; - edm::EDGetTokenT trEvToken; - std::map DuplicateMap; - - unsigned int CountEvent; - unsigned int MaxPrint; - bool RemoveDuplicates; - int MuonTrigger1Mask; - int MuonTrigger2Mask; - int PFMetTriggerMask; - int CaloMetTriggerMask; - int L2MuMETTriggerMask; -}; - -///////////////////////////////////////////////////////////////////////////////////// -HSCPHLTFilter::HSCPHLTFilter(const edm::ParameterSet& iConfig) { - RemoveDuplicates = iConfig.getParameter("RemoveDuplicates"); - - TriggerProcess = iConfig.getParameter("TriggerProcess"); - triggerResultsToken_ = consumes(edm::InputTag("TriggerResults", "", TriggerProcess)); - - trEvToken = consumes(edm::InputTag("hltTriggerSummaryAOD")); - MuonTrigger1Mask = iConfig.getParameter("MuonTrigger1Mask"); - PFMetTriggerMask = iConfig.getParameter("PFMetTriggerMask"); - L2MuMETTriggerMask = iConfig.getParameter("L2MuMETTriggerMask"); - - CountEvent = 0; - MaxPrint = 10000; -} - -///////////////////////////////////////////////////////////////////////////////////// -HSCPHLTFilter::~HSCPHLTFilter() {} - -///////////////////////////////////////////////////////////////////////////////////// -void HSCPHLTFilter::beginJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void HSCPHLTFilter::endJob() {} - -bool HSCPHLTFilter::isDuplicate(unsigned int Run, unsigned int Event) { - char tmp[255]; - sprintf(tmp, "%i_%i", Run, Event); - std::map::iterator it = DuplicateMap.find(std::string(tmp)); - if (it == DuplicateMap.end()) { - DuplicateMap[std::string(tmp)] = true; - return false; - } - return true; -} - -///////////////////////////////////////////////////////////////////////////////////// -bool HSCPHLTFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) { - edm::Handle triggerResults; - iEvent.getByToken(triggerResultsToken_, triggerResults); - - edm::TriggerResultsByName tr(nullptr, nullptr); - if (triggerResults.isValid()) { - tr = iEvent.triggerResultsByName(*triggerResults); - } - if (!tr.isValid()) { - printf("NoValidTrigger\n"); - } - - if (RemoveDuplicates) { - if (isDuplicate(iEvent.eventAuxiliary().run(), iEvent.eventAuxiliary().event())) - return false; - else - return true; - } - - //for(unsigned int i=0;i %1i\n",i, tr.triggerName(i).c_str(),tr.accept(i)); - //}fflush(stdout); - - edm::Handle trEvHandle; - iEvent.getByToken(trEvToken, trEvHandle); - trigger::TriggerEvent trEv = *trEvHandle; - - CountEvent++; - //if(CountEvent HLT_Mu30_v1 not found\n"); - for (unsigned int i = 0; i < tr.size(); i++) { - printf("Path %3i %50s --> %1i\n", i, tr.triggerName(i).c_str(), tr.accept(i)); - } - fflush(stdout); - exit(0); - } - } - } - } - } - } - } - } - } - } - } - } - - // HLT TRIGGER BASED ON PF MET! - //Only look for trigger if we are making a decision based on it - if (PFMetTriggerMask != 0) { - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v17")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v17"))) { - PFMetTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v16")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v16"))) { - PFMetTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v12")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v12"))) { - PFMetTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v11")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v11"))) { - PFMetTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v10")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v10"))) { - PFMetTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v9")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v9"))) { - PFMetTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v8")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v8"))) { - PFMetTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v7")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v7"))) { - PFMetTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v6")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v6"))) { - PFMetTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v5")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v5"))) { - PFMetTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v4")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v4"))) { - PFMetTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v3")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v3"))) { - PFMetTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v2")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v2"))) { - PFMetTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v1")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v1"))) { - PFMetTrigger = true; - } - } else { - printf("HSCPHLTFilter --> HLT_PFMHT150_v2 or v1 not found\n"); - for (unsigned int i = 0; i < tr.size(); i++) { - printf("Path %3i %50s --> %1i\n", i, tr.triggerName(i).c_str(), tr.accept(i)); - } - fflush(stdout); - exit(0); - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - - // HLT TRIGGER BASED ON L2Mu + MET! - //Only look for trigger if we are making a decision based on it - if (L2MuMETTriggerMask != 0) { - //Early 2011 running had a L2Mu60_1Hit_MET40 which was prescaled away, need to raise threshold - - if (TrIndex_Unknown != tr.triggerIndex("HLT_L2Mu60_1Hit_MET60_v6")) { - if (tr.accept(tr.triggerIndex("HLT_L2Mu60_1Hit_MET60_v6"))) { - L2MuMETTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_L2Mu60_1Hit_MET60_v5")) { - if (tr.accept(tr.triggerIndex("HLT_L2Mu60_1Hit_MET60_v5"))) { - L2MuMETTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_L2Mu60_1Hit_MET60_v4")) { - if (tr.accept(tr.triggerIndex("HLT_L2Mu60_1Hit_MET60_v4"))) { - L2MuMETTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_L2Mu60_1Hit_MET60_v3")) { - if (tr.accept(tr.triggerIndex("HLT_L2Mu60_1Hit_MET60_v3"))) { - L2MuMETTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_L2Mu60_1Hit_MET60_v2")) { - if (tr.accept(tr.triggerIndex("HLT_L2Mu60_1Hit_MET60_v2"))) { - L2MuMETTrigger = true; - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_L2Mu60_1Hit_MET60_v1")) { - if (tr.accept(tr.triggerIndex("HLT_L2Mu60_1Hit_MET60_v1"))) { - L2MuMETTrigger = true; - } - } - } - } - } - } - } - - if (L2MuMETTriggerMask == 2) { - //Special case for background MC in 2011 as it does not have trigger included in menu. Background MC only used as cross check - //so make approximation of trigger to collect similar events for checks - if (IncreasedTreshold(trEv, InputTag("hltL2Mu20L2Filtered20", "", TriggerProcess), 60, 2.1, 1, false) && - IncreasedTreshold(trEv, InputTag("hltMET80", "", TriggerProcess), 80, 2.1, 1, false)) { - L2MuMETTrigger = true; - } - } - } - - //printf("Bits = %1i %1i %1i X Mask = %+2i %+2i %+2i -->",MuonTrigger,CaloMetTrigger,CaloMetTrigger,MuonTriggerMask,CaloMetTriggerMask,CaloMetTriggerMask); - - if (MuonTrigger1Mask == 0) - MuonTrigger1 = false; - if (PFMetTriggerMask == 0) - PFMetTrigger = false; - if (L2MuMETTriggerMask == 0) - L2MuMETTrigger = false; - - //Allow option of requiring that one of the triggers did NOT fire to remove duplicated events - if (MuonTrigger1Mask < 0 && MuonTrigger1) - return false; - if (PFMetTriggerMask < 0 && PFMetTrigger) - return false; - if (L2MuMETTriggerMask < 0 && L2MuMETTrigger) - return false; - - bool d = (MuonTrigger1 | PFMetTrigger | L2MuMETTrigger); - /* printf("%i\n",d);*/ return d; -} - -bool HSCPHLTFilter::IncreasedTreshold(const trigger::TriggerEvent& trEv, - const edm::InputTag& InputPath, - double NewThreshold, - double etaCut, - int NObjectAboveThreshold, - bool averageThreshold) { - unsigned int filterIndex = trEv.filterIndex(InputPath); - //if(filterIndex %s XXX %s\n",filterIndex,trEv.filterTag(filterIndex).label().c_str(), trEv.filterTag(filterIndex).process().c_str()); - - if (filterIndex < trEv.sizeFilters()) { - const trigger::Vids& VIDS(trEv.filterIds(filterIndex)); - const trigger::Keys& KEYS(trEv.filterKeys(filterIndex)); - const int nI(VIDS.size()); - const int nK(KEYS.size()); - assert(nI == nK); - const int n(std::max(nI, nK)); - const trigger::TriggerObjectCollection& TOC(trEv.getObjects()); - - if (!averageThreshold) { - int NObjectAboveThresholdObserved = 0; - for (int i = 0; i != n; ++i) { - if (TOC[KEYS[i]].pt() > NewThreshold && fabs(TOC[KEYS[i]].eta()) < etaCut) - NObjectAboveThresholdObserved++; - //cout << " " << i << " " << VIDS[i] << "/" << KEYS[i] << ": "<< TOC[KEYS[i]].id() << " " << TOC[KEYS[i]].pt() << " " << TOC[KEYS[i]].eta() << " " << TOC[KEYS[i]].phi() << " " << TOC[KEYS[i]].mass()<< endl; - } - if (NObjectAboveThresholdObserved >= NObjectAboveThreshold) - return true; - - } else { - std::vector ObjPt; - - for (int i = 0; i != n; ++i) { - ObjPt.push_back(TOC[KEYS[i]].pt()); - //cout << " " << i << " " << VIDS[i] << "/" << KEYS[i] << ": "<< TOC[KEYS[i]].id() << " " << TOC[KEYS[i]].pt() << " " << TOC[KEYS[i]].eta() << " " << TOC[KEYS[i]].phi() << " " << TOC[KEYS[i]].mass()<< endl; - } - if ((int)(ObjPt.size()) < NObjectAboveThreshold) - return false; - std::sort(ObjPt.begin(), ObjPt.end()); - - double Average = 0; - for (int i = 0; i < NObjectAboveThreshold; i++) { - Average += ObjPt[ObjPt.size() - 1 - i]; - } - Average /= NObjectAboveThreshold; - //cout << "AVERAGE = " << Average << endl; - - if (Average > NewThreshold) - return true; - } - } - return false; -} - -DEFINE_FWK_MODULE(HSCPHLTFilter); diff --git a/SUSYBSMAnalysis/HSCP/plugins/HSCPTreeBuilder.cc b/SUSYBSMAnalysis/HSCP/plugins/HSCPTreeBuilder.cc deleted file mode 100644 index 2f56bac53c9fb..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/HSCPTreeBuilder.cc +++ /dev/null @@ -1,623 +0,0 @@ -// -*- C++ -*- -// -// Package: HSCPTreeBuilder -// Class: HSCPTreeBuilder -// -/**\class HSCPTreeBuilder HSCPTreeBuilder.cc SUSYBSMAnalysis/HSCP/src/HSCPTreeBuilder.cc - - Description: - - Implementation: - -*/ -// -// Original Author: Loic QUERTENMONT -// Created: Thu Mar 11 12:19:07 CEST 2010 -// - -#include -#include - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Utilities/interface/Exception.h" - -#include "DataFormats/TrackReco/interface/DeDxData.h" - -#include -#include - -#include "Geometry/CommonDetUnit/interface/GeomDet.h" -#include "Geometry/CommonDetUnit/interface/GeomDetType.h" -#include "Geometry/CommonTopologies/interface/StripTopology.h" -#include "DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h" -#include "DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h" - -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h" -#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h" -#include "Geometry/CommonDetUnit/interface/TrackingGeometry.h" - -#include "DataFormats/SiStripCluster/interface/SiStripClusterCollection.h" - -#include "DataFormats/MuonReco/interface/Muon.h" -#include "DataFormats/MuonReco/interface/MuonFwd.h" - -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h" -#include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2D.h" -#include "DataFormats/DetId/interface/DetId.h" -#include "DataFormats/SiStripDetId/interface/StripSubdetector.h" - -#include "TrackingTools/PatternTools/interface/Trajectory.h" -#include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" - -#include "DataFormats/TrackReco/interface/TrackFwd.h" - -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "DataFormats/Common/interface/TriggerResults.h" -#include "FWCore/Common/interface/TriggerNames.h" -#include "FWCore/Framework/interface/TriggerNamesService.h" - -#include "DataFormats/BeamSpot/interface/BeamSpot.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" - -#include "CommonTools/UtilAlgos/interface/DeltaR.h" - -#include "CondFormats/DataRecord/interface/L1GtTriggerMaskTechTrigRcd.h" -#include "CondFormats/DataRecord/interface/L1GtTriggerMaskAlgoTrigRcd.h" -#include "CondFormats/L1TObjects/interface/L1GtTriggerMask.h" -#include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h" - -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" - -#include "DataFormats/MuonReco/interface/MuonTimeExtra.h" -#include "DataFormats/MuonReco/interface/MuonTimeExtraMap.h" - -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCParticle.h" - -#include "TFile.h" -#include "TObjString.h" -#include "TString.h" -#include "TH1F.h" -#include "TH2F.h" -#include "TProfile.h" -#include "TF1.h" -#include "TTree.h" -#include "TROOT.h" - -#include - -using namespace edm; -using namespace reco; -using namespace std; -using namespace __gnu_cxx; - -#define MAX_VERTICES 1000 -#define MAX_HSCPS 10000 -#define MAX_GENS 10000 -#define MAX_ECALCRYS 10 - -class HSCPTreeBuilder : public edm::EDFilter { -public: - explicit HSCPTreeBuilder(const edm::ParameterSet&); - ~HSCPTreeBuilder() override; - -private: - void beginJob() override; - bool filter(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - int ClosestMuonIndex(reco::TrackRef track, std::vector); - - const edm::EventSetup* iSetup_; - const edm::Event* iEvent_; - - edm::Service tfs; - - EDGetTokenT m_gtReadoutRecordToken; - EDGetTokenT m_trToken; - EDGetTokenT m_recoVertexToken; - EDGetTokenT m_genParticlesToken; - EDGetTokenT m_HSCPsToken; - bool reccordVertexInfo; - bool reccordGenInfo; - - TTree* MyTree; - bool Event_triggerL1Bits[192]; - bool Event_triggerHLTBits[128]; - bool Event_technicalBits[64]; - unsigned int Event_EventNumber; - unsigned int Event_RunNumber; - unsigned int Event_LumiSection; - unsigned int Event_BXCrossing; - unsigned int Event_Orbit; - unsigned int Event_Store; - unsigned int Event_Time; - bool Event_PhysicsDeclared; - float Event_BField; - - unsigned int NVertices; - float Vertex_x[MAX_VERTICES]; - float Vertex_y[MAX_VERTICES]; - float Vertex_z[MAX_VERTICES]; - float Vertex_x_err[MAX_VERTICES]; - float Vertex_y_err[MAX_VERTICES]; - float Vertex_z_err[MAX_VERTICES]; - int Vertex_TrackSize[MAX_VERTICES]; - float Vertex_chi2[MAX_VERTICES]; - float Vertex_ndof[MAX_VERTICES]; - bool Vertex_isFake[MAX_VERTICES]; - - unsigned int NHSCPs; - bool Hscp_hasTrack[MAX_HSCPS]; - bool Hscp_hasMuon[MAX_HSCPS]; - bool Hscp_hasRpc[MAX_HSCPS]; - bool Hscp_hasCalo[MAX_HSCPS]; - int Hscp_type[MAX_HSCPS]; - unsigned int Track_NOH[MAX_HSCPS]; - float Track_p[MAX_HSCPS]; - float Track_pt[MAX_HSCPS]; - float Track_pt_err[MAX_HSCPS]; - float Track_chi2[MAX_HSCPS]; - unsigned int Track_ndof[MAX_HSCPS]; - float Track_eta[MAX_HSCPS]; - float Track_eta_err[MAX_HSCPS]; - float Track_phi[MAX_HSCPS]; - float Track_phi_err[MAX_HSCPS]; - float Track_dz[MAX_HSCPS]; - float Track_d0[MAX_HSCPS]; - int Track_quality[MAX_HSCPS]; - int Track_charge[MAX_HSCPS]; - float Track_dEdxE1[MAX_HSCPS]; - float Track_dEdxE1_NOS[MAX_HSCPS]; - unsigned int Track_dEdxE1_NOM[MAX_HSCPS]; - float Track_dEdxE2[MAX_HSCPS]; - float Track_dEdxE2_NOS[MAX_HSCPS]; - unsigned int Track_dEdxE2_NOM[MAX_HSCPS]; - float Track_dEdxE3[MAX_HSCPS]; - float Track_dEdxE3_NOS[MAX_HSCPS]; - unsigned int Track_dEdxE3_NOM[MAX_HSCPS]; - float Track_dEdxD1[MAX_HSCPS]; - float Track_dEdxD1_NOS[MAX_HSCPS]; - unsigned int Track_dEdxD1_NOM[MAX_HSCPS]; - float Track_dEdxD2[MAX_HSCPS]; - float Track_dEdxD2_NOS[MAX_HSCPS]; - unsigned int Track_dEdxD2_NOM[MAX_HSCPS]; - float Track_dEdxD3[MAX_HSCPS]; - float Track_dEdxD3_NOS[MAX_HSCPS]; - unsigned int Track_dEdxD3_NOM[MAX_HSCPS]; - float Muon_p[MAX_HSCPS]; - float Muon_pt[MAX_HSCPS]; - float Muon_eta[MAX_HSCPS]; - float Muon_phi[MAX_HSCPS]; - int Muon_type[MAX_HSCPS]; - bool Muon_qualityValid[MAX_HSCPS]; - int Muon_charge[MAX_HSCPS]; - float Muon_dt_IBeta[MAX_HSCPS]; - float Muon_dt_IBeta_err[MAX_HSCPS]; - float Muon_dt_fIBeta[MAX_HSCPS]; - float Muon_dt_fIBeta_err[MAX_HSCPS]; - int Muon_dt_ndof[MAX_HSCPS]; - float Muon_csc_IBeta[MAX_HSCPS]; - float Muon_csc_IBeta_err[MAX_HSCPS]; - float Muon_csc_fIBeta[MAX_HSCPS]; - float Muon_csc_fIBeta_err[MAX_HSCPS]; - int Muon_csc_ndof[MAX_HSCPS]; - float Muon_cb_IBeta[MAX_HSCPS]; - float Muon_cb_IBeta_err[MAX_HSCPS]; - float Muon_cb_fIBeta[MAX_HSCPS]; - float Muon_cb_fIBeta_err[MAX_HSCPS]; - int Muon_cb_ndof[MAX_HSCPS]; - float Rpc_beta[MAX_HSCPS]; - - float Calo_ecal_crossedE[MAX_HSCPS]; - float Calo_ecal_beta[MAX_HSCPS]; - float Calo_ecal_beta_err[MAX_HSCPS]; - float Calo_ecal_invBeta_err[MAX_HSCPS]; - float Calo_ecal_dEdx[MAX_HSCPS]; - float Calo_ecal_time[MAX_HSCPS]; - float Calo_ecal_time_err[MAX_HSCPS]; - int Calo_ecal_numCrysCrossed[MAX_HSCPS]; - float Calo_ecal_swissCrossKs[MAX_HSCPS][MAX_ECALCRYS]; - float Calo_ecal_e1OverE9s[MAX_HSCPS][MAX_ECALCRYS]; - float Calo_ecal_trackLengths[MAX_HSCPS][MAX_ECALCRYS]; - float Calo_ecal_trackExitEtas[MAX_HSCPS][MAX_ECALCRYS]; - float Calo_ecal_trackExitPhis[MAX_HSCPS][MAX_ECALCRYS]; - float Calo_ecal_energies[MAX_HSCPS][MAX_ECALCRYS]; - float Calo_ecal_outOfTimeEnergies[MAX_HSCPS][MAX_ECALCRYS]; - float Calo_ecal_chi2s[MAX_HSCPS][MAX_ECALCRYS]; - float Calo_ecal_outOfTimeChi2s[MAX_HSCPS][MAX_ECALCRYS]; - float Calo_ecal_times[MAX_HSCPS][MAX_ECALCRYS]; - float Calo_ecal_timeErrors[MAX_HSCPS][MAX_ECALCRYS]; - unsigned int Calo_ecal_detIds[MAX_HSCPS][MAX_ECALCRYS]; - - unsigned int NGens; - int Gen_pdgId[MAX_GENS]; - float Gen_charge[MAX_GENS]; - float Gen_p[MAX_GENS]; - float Gen_px[MAX_GENS]; - float Gen_py[MAX_GENS]; - float Gen_pz[MAX_GENS]; - float Gen_pt[MAX_GENS]; - float Gen_eta[MAX_GENS]; - float Gen_phi[MAX_GENS]; - float Gen_beta[MAX_GENS]; - float Gen_mass[MAX_GENS]; -}; - -HSCPTreeBuilder::HSCPTreeBuilder(const edm::ParameterSet& iConfig) { - m_gtReadoutRecordToken = consumes(InputTag("gtDigis")); - m_trToken = consumes(InputTag("TriggerResults")); - m_recoVertexToken = consumes(InputTag("offlinePrimaryVertices")); - m_genParticlesToken = mayConsume(InputTag("genParticles")); - m_HSCPsToken = consumes(iConfig.getParameter("HSCParticles")); - - reccordVertexInfo = iConfig.getUntrackedParameter("reccordVertexInfo", true); - reccordGenInfo = iConfig.getUntrackedParameter("reccordGenInfo", false); - - std::cout << "######################################################" << endl; - std::cout << " USE OF THE HSCPTreeBuilder is deprecated! " << endl; - std::cout << "better to use the HSCParticle Producer and then FWLite" << endl; - std::cout << "######################################################" << endl; -} - -HSCPTreeBuilder::~HSCPTreeBuilder() {} - -void HSCPTreeBuilder::beginJob() { - TTree::SetMaxTreeSize(1000 * Long64_t(2000000000)); // authorize Trees up to 2 Terabytes - MyTree = tfs->make("HscpTree", "HscpTree"); - - MyTree->Branch("Event_EventNumber", &Event_EventNumber, "Event_EventNumber/i"); - MyTree->Branch("Event_RunNumber", &Event_RunNumber, "Event_RunNumber/i"); - MyTree->Branch("Event_LumiSection", &Event_LumiSection, "Event_LumiSection/i"); - MyTree->Branch("Event_BXCrossing", &Event_BXCrossing, "Event_BXCrossing/i"); - MyTree->Branch("Event_Orbit", &Event_Orbit, "Event_Orbit/i"); - MyTree->Branch("Event_Store", &Event_Store, "Event_Store/i"); - MyTree->Branch("Event_Time", &Event_Time, "Event_Time/i"); - MyTree->Branch("Event_PhysicsDeclared", &Event_PhysicsDeclared, "Event_PhysicsDeclared/O"); - MyTree->Branch("Event_technicalBits", Event_technicalBits, "Event_technicalBits[64]/O"); - MyTree->Branch("Event_triggerL1Bits", Event_triggerL1Bits, "Event_triggerL1Bits[192]/O"); - MyTree->Branch("Event_triggerHLTBits", Event_triggerHLTBits, "Event_triggerHLTBits[128]/O"); - MyTree->Branch("Event_BField", &Event_BField, "Event_BField/F"); - - if (reccordVertexInfo) { - MyTree->Branch("NVertices", &NVertices, "NVertices/I"); - MyTree->Branch("Vertex_x", Vertex_x, "Vertex_x[NVertices]/F"); - MyTree->Branch("Vertex_y", Vertex_y, "Vertex_y[NVertices]/F"); - MyTree->Branch("Vertex_z", Vertex_z, "Vertex_z[NVertices]/F"); - MyTree->Branch("Vertex_x_err", Vertex_x_err, "Vertex_x_err[NVertices]/F"); - MyTree->Branch("Vertex_y_err", Vertex_y_err, "Vertex_y_err[NVertices]/F"); - MyTree->Branch("Vertex_z_err", Vertex_z_err, "Vertex_z_err[NVertices]/F"); - MyTree->Branch("Vertex_TrackSize", Vertex_TrackSize, "Vertex_TrackSize[NVertices]/I"); - MyTree->Branch("Vertex_chi2", Vertex_chi2, "Vertex_chi2[NVertices]/F"); - MyTree->Branch("Vertex_ndof", Vertex_ndof, "Vertex_ndof[NVertices]/F"); - MyTree->Branch("Vertex_isFake", Vertex_isFake, "Vertex_isFake[NVertices]/O"); - } - - MyTree->Branch("NHSCPs", &NHSCPs, "NHSCPs/I"); - MyTree->Branch("Hscp_hasTrack", Hscp_hasTrack, "Hscp_hasTrack[NHSCPs]/O"); - MyTree->Branch("Hscp_hasMuon", Hscp_hasMuon, "Hscp_hasMuon[NHSCPs]/O"); - MyTree->Branch("Hscp_hasRpc", Hscp_hasRpc, "Hscp_hasRpc[NHSCPs]/O"); - MyTree->Branch("Hscp_hasCalo", Hscp_hasCalo, "Hscp_hasCalo[NHSCPs]/O"); - MyTree->Branch("Hscp_type", Hscp_type, "Hscp_type[NHSCPs]/I"); - MyTree->Branch("Track_NOH", Track_NOH, "Track_NOH[NHSCPs]/I"); - MyTree->Branch("Track_p", Track_p, "Track_p[NHSCPs]/F"); - MyTree->Branch("Track_pt", Track_pt, "Track_pt[NHSCPs]/F"); - MyTree->Branch("Track_pt_err", Track_pt_err, "Track_pt_err[NHSCPs]/F"); - MyTree->Branch("Track_chi2", Track_chi2, "Track_chi2[NHSCPs]/F"); - MyTree->Branch("Track_ndof", Track_ndof, "Track_ndof[NHSCPs]/F"); - MyTree->Branch("Track_eta", Track_eta, "Track_eta[NHSCPs]/F"); - MyTree->Branch("Track_eta_err", Track_eta_err, "Track_eta_err[NHSCPs]/F"); - MyTree->Branch("Track_phi", Track_phi, "Track_phi[NHSCPs]/F"); - MyTree->Branch("Track_phi_err", Track_phi_err, "Track_phi_err[NHSCPs]/F"); - MyTree->Branch("Track_d0", Track_d0, "Track_d0[NHSCPs]/F"); - MyTree->Branch("Track_dz", Track_dz, "Track_dz[NHSCPs]/F"); - MyTree->Branch("Track_quality", Track_quality, "Track_quality[NHSCPs]/I"); - MyTree->Branch("Track_charge", Track_charge, "Track_charge[NHSCPs]/I"); - MyTree->Branch("Track_dEdxE1", Track_dEdxE1, "Track_dEdxE1[NHSCPs]/F"); - MyTree->Branch("Track_dEdxE1_NOS", Track_dEdxE1_NOS, "Track_dEdxE1_NOS[NHSCPs]/F"); - MyTree->Branch("Track_dEdxE1_NOM", Track_dEdxE1_NOM, "Track_dEdxE1_NOM[NHSCPs]/I"); - MyTree->Branch("Track_dEdxE2", Track_dEdxE2, "Track_dEdxE2[NHSCPs]/F"); - MyTree->Branch("Track_dEdxE2_NOS", Track_dEdxE2_NOS, "Track_dEdxE2_NOS[NHSCPs]/F"); - MyTree->Branch("Track_dEdxE2_NOM", Track_dEdxE2_NOM, "Track_dEdxE2_NOM[NHSCPs]/I"); - MyTree->Branch("Track_dEdxE3", Track_dEdxE3, "Track_dEdxE3[NHSCPs]/F"); - MyTree->Branch("Track_dEdxE3_NOS", Track_dEdxE3_NOS, "Track_dEdxE3_NOS[NHSCPs]/F"); - MyTree->Branch("Track_dEdxE3_NOM", Track_dEdxE3_NOM, "Track_dEdxE3_NOM[NHSCPs]/I"); - MyTree->Branch("Track_dEdxD1", Track_dEdxD1, "Track_dEdxD1[NHSCPs]/F"); - MyTree->Branch("Track_dEdxD1_NOS", Track_dEdxD1_NOS, "Track_dEdxD1_NOS[NHSCPs]/F"); - MyTree->Branch("Track_dEdxD1_NOM", Track_dEdxD1_NOM, "Track_dEdxD1_NOM[NHSCPs]/I"); - MyTree->Branch("Track_dEdxD2", Track_dEdxD2, "Track_dEdxD2[NHSCPs]/F"); - MyTree->Branch("Track_dEdxD2_NOS", Track_dEdxD2_NOS, "Track_dEdxD2_NOS[NHSCPs]/F"); - MyTree->Branch("Track_dEdxD2_NOM", Track_dEdxD2_NOM, "Track_dEdxD2_NOM[NHSCPs]/I"); - MyTree->Branch("Track_dEdxD3", Track_dEdxD3, "Track_dEdxD3[NHSCPs]/F"); - MyTree->Branch("Track_dEdxD3_NOS", Track_dEdxD3_NOS, "Track_dEdxD3_NOS[NHSCPs]/F"); - MyTree->Branch("Track_dEdxD3_NOM", Track_dEdxD3_NOM, "Track_dEdxD3_NOM[NHSCPs]/I"); - MyTree->Branch("Muon_p", Muon_p, "Muon_p[NHSCPs]/F"); - MyTree->Branch("Muon_pt", Muon_pt, "Muon_pt[NHSCPs]/F"); - MyTree->Branch("Muon_eta", Muon_eta, "Muon_eta[NHSCPs]/F"); - MyTree->Branch("Muon_phi", Muon_phi, "Muon_phi[NHSCPs]/F"); - MyTree->Branch("Muon_type", Muon_type, "Muon_type[NHSCPs]/i"); - MyTree->Branch("Muon_qualityValid", Muon_qualityValid, "Muon_qualityValid[NHSCPs]/O"); - MyTree->Branch("Muon_charge", Muon_charge, "Muon_charge[NHSCPs]/i"); - MyTree->Branch("Muon_dt_IBeta", Muon_dt_IBeta, "Muon_dt_IBeta[NHSCPs]/F"); - MyTree->Branch("Muon_dt_IBeta_err", Muon_dt_IBeta_err, "Muon_dt_IBeta_err[NHSCPs]/F"); - MyTree->Branch("Muon_dt_fIBeta", Muon_dt_fIBeta, "Muon_dt_fIBeta[NHSCPs]/F"); - MyTree->Branch("Muon_dt_fIBeta_err", Muon_dt_fIBeta_err, "Muon_dt_fIBeta_err[NHSCPs]/F"); - MyTree->Branch("Muon_dt_ndof", Muon_dt_ndof, "Muon_dt_ndof[NHSCPs]/I"); - MyTree->Branch("Muon_csc_IBeta", Muon_csc_IBeta, "Muon_csc_IBeta[NHSCPs]/F"); - MyTree->Branch("Muon_csc_IBeta_err", Muon_csc_IBeta_err, "Muon_csc_IBeta_err[NHSCPs]/F"); - MyTree->Branch("Muon_csc_fIBeta", Muon_csc_fIBeta, "Muon_csc_fIBeta[NHSCPs]/F"); - MyTree->Branch("Muon_csc_fIBeta_err", Muon_csc_fIBeta_err, "Muon_csc_fIBeta_err[NHSCPs]/F"); - MyTree->Branch("Muon_csc_ndof", Muon_csc_ndof, "Muon_csc_ndof[NHSCPs]/I"); - MyTree->Branch("Muon_cb_IBeta", Muon_cb_IBeta, "Muon_cb_IBeta[NHSCPs]/F"); - MyTree->Branch("Muon_cb_IBeta_err", Muon_cb_IBeta_err, "Muon_cb_IBeta_err[NHSCPs]/F"); - MyTree->Branch("Muon_cb_fIBeta", Muon_cb_fIBeta, "Muon_cb_fIBeta[NHSCPs]/F"); - MyTree->Branch("Muon_cb_fIBeta_err", Muon_cb_fIBeta_err, "Muon_cb_fIBeta_err[NHSCPs]/F"); - MyTree->Branch("Muon_cb_ndof", Muon_cb_ndof, "Muon_cb_ndof[NHSCPs]/I"); - - MyTree->Branch("Rpc_beta", Rpc_beta, "Rpc_beta[NHSCPs]/F"); - - MyTree->Branch("Calo_ecal_crossedE", Calo_ecal_crossedE, "Calo_ecal_crossedE[NHSCPs]/F"); - MyTree->Branch("Calo_ecal_beta", Calo_ecal_beta, "Calo_ecal_beta[NHSCPs]/F"); - MyTree->Branch("Calo_ecal_beta_err", Calo_ecal_beta_err, "Calo_ecal_beta_err[NHSCPs]/F"); - MyTree->Branch("Calo_ecal_invBeta_err", Calo_ecal_invBeta_err, "Calo_ecal_invBeta_err[NHSCPs]/F"); - MyTree->Branch("Calo_ecal_dEdx", Calo_ecal_dEdx, "Calo_ecal_dEdx[NHSCPs]/F"); - MyTree->Branch("Calo_ecal_time", Calo_ecal_time, "Calo_ecal_time[NHSCPs]/F"); - MyTree->Branch("Calo_ecal_time_err", Calo_ecal_time_err, "Calo_ecal_time_err[NHSCPs]/F"); - MyTree->Branch("Calo_ecal_numCrysCrossed", Calo_ecal_numCrysCrossed, "Calo_ecal_numCrysCrossed[NHSCPs]/I"); - MyTree->Branch("Calo_ecal_swissCrossKs", Calo_ecal_swissCrossKs, "Calo_ecal_swissCrossKs[NHSCPs][10]/F"); - MyTree->Branch("Calo_ecal_e1OverE9s", Calo_ecal_e1OverE9s, "Calo_ecal_e1OverE9s[NHSCPs][10]/F"); - MyTree->Branch("Calo_ecal_trackLengths", Calo_ecal_trackLengths, "Calo_ecal_trackLengths[NHSCPs][10]/F"); - MyTree->Branch("Calo_ecal_trackExitEtas", Calo_ecal_trackExitEtas, "Calo_ecal_trackExitEtas[NHSCPs][10]/F"); - MyTree->Branch("Calo_ecal_trackExitPhis", Calo_ecal_trackExitPhis, "Calo_ecal_trackExitPhis[NHSCPs][10]/F"); - MyTree->Branch("Calo_ecal_energies", Calo_ecal_energies, "Calo_ecal_energies[NHSCPs][10]/F"); - MyTree->Branch( - "Calo_ecal_outOfTimeEnergies", Calo_ecal_outOfTimeEnergies, "Calo_ecal_outOfTimeEnergies[NHSCPs][10]/F"); - MyTree->Branch("Calo_ecal_chi2s", Calo_ecal_chi2s, "Calo_ecal_chi2s[NHSCPs][10]/F"); - MyTree->Branch("Calo_ecal_outOfTimeChi2s", Calo_ecal_outOfTimeChi2s, "Calo_ecal_outOfTimeChi2s[NHSCPs][10]/F"); - MyTree->Branch("Calo_ecal_times", Calo_ecal_times, "Calo_ecal_times[NHSCPs][10]/F"); - MyTree->Branch("Calo_ecal_timeErrors", Calo_ecal_timeErrors, "Calo_ecal_timeErrors[NHSCPs][10]/F"); - MyTree->Branch("Calo_ecal_detIds", Calo_ecal_detIds, "Calo_ecal_detIds[NHSCPs][10]/I"); - - if (reccordGenInfo) { - MyTree->Branch("NGens", &NGens, "NGens/I"); - MyTree->Branch("Gen_pdgId", Gen_pdgId, "Gen_pdgId[NGens]/i"); - MyTree->Branch("Gen_charge", Gen_charge, "Gen_charge[NGens]/F"); - MyTree->Branch("Gen_p", Gen_p, "Gen_p[NGens]/F"); - MyTree->Branch("Gen_px", Gen_px, "Gen_px[NGens]/F"); - MyTree->Branch("Gen_py", Gen_py, "Gen_py[NGens]/F"); - MyTree->Branch("Gen_pz", Gen_pz, "Gen_pz[NGens]/F"); - MyTree->Branch("Gen_pt", Gen_pt, "Gen_pt[NGens]/F"); - MyTree->Branch("Gen_eta", Gen_eta, "Gen_eta[NGens]/F"); - MyTree->Branch("Gen_phi", Gen_phi, "Gen_phi[NGens]/F"); - MyTree->Branch("Gen_beta", Gen_beta, "Gen_beta[NGens]/F"); - MyTree->Branch("Gen_mass", Gen_mass, "Gen_mass[NGens]/F"); - } -} - -void HSCPTreeBuilder::endJob() {} - -bool HSCPTreeBuilder::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) { - bool debug = false; - if (debug) - cout << "I'm in HSCPTreeBuilder::analyze!" << endl; - - Event_EventNumber = iEvent.id().event(); - Event_RunNumber = iEvent.id().run(); - Event_LumiSection = iEvent.eventAuxiliary().luminosityBlock(); - Event_BXCrossing = iEvent.eventAuxiliary().bunchCrossing(); - Event_Orbit = iEvent.eventAuxiliary().orbitNumber(); - Event_Store = iEvent.eventAuxiliary().storeNumber(); - Event_Time = iEvent.eventAuxiliary().time().value(); - - // BField part: - ESHandle MF; - iSetup.get().get(MF); - const MagneticField* theMagneticField = MF.product(); - Event_BField = fabs(theMagneticField->inTesla(GlobalPoint(0, 0, 0)).z()); - - // L1 TRIGGER part: - edm::Handle h_gtReadoutRecord; - iEvent.getByToken(m_gtReadoutRecordToken, h_gtReadoutRecord); - L1GtFdlWord fdlWord = h_gtReadoutRecord->gtFdlWord(); - TechnicalTriggerWord L1technical = fdlWord.gtTechnicalTriggerWord(); - Event_PhysicsDeclared = h_gtReadoutRecord->gtFdlWord().physicsDeclared(); - for (unsigned int i = 0; i < 64; ++i) { - Event_technicalBits[i] = L1technical[i]; - } - DecisionWord L1decision = fdlWord.gtDecisionWord(); - for (unsigned int i = 0; i < 128; ++i) { - Event_triggerL1Bits[i] = L1decision[i]; - } - DecisionWordExtended L1decisionE = fdlWord.gtDecisionWordExtended(); - for (unsigned int i = 0; i < 64; ++i) { - Event_triggerL1Bits[128 + i] = L1decisionE[i]; - } - - // HLT TRIGGER part: - edm::Handle trh; - iEvent.getByToken(m_trToken, trh); - for (unsigned int i = 0; i < trh->size() && i < 128; ++i) { - Event_triggerHLTBits[i] = trh->at(i).accept(); - } - - edm::Handle recoVertexHandle; - iEvent.getByToken(m_recoVertexToken, recoVertexHandle); - reco::VertexCollection recoVertex = *recoVertexHandle; - - if (reccordVertexInfo) { - NVertices = 0; - for (unsigned int i = 0; i < recoVertex.size(); i++) { - Vertex_x[NVertices] = recoVertex[i].x(); - Vertex_y[NVertices] = recoVertex[i].y(); - Vertex_z[NVertices] = recoVertex[i].z(); - Vertex_x_err[NVertices] = recoVertex[i].xError(); - Vertex_y_err[NVertices] = recoVertex[i].yError(); - Vertex_z_err[NVertices] = recoVertex[i].zError(); - Vertex_TrackSize[NVertices] = recoVertex[i].tracksSize(); - Vertex_chi2[NVertices] = recoVertex[i].chi2(); - Vertex_ndof[NVertices] = recoVertex[i].ndof(); - Vertex_isFake[NVertices] = recoVertex[i].isFake(); - NVertices++; - } - } - - // Source Collection - edm::Handle HSCPCollectionHandle; - iEvent.getByToken(m_HSCPsToken, HSCPCollectionHandle); - susybsm::HSCParticleCollection HSCPCollection = *HSCPCollectionHandle.product(); - - NHSCPs = 0; - for (unsigned int i = 0; i < HSCPCollection.size(); i++) { - susybsm::HSCParticle hscp = HSCPCollection[i]; - reco::MuonRef muon = hscp.muonRef(); - reco::TrackRef track = hscp.trackRef(); - ; - - Hscp_hasTrack[NHSCPs] = hscp.hasTrackRef(); - Hscp_hasMuon[NHSCPs] = hscp.hasMuonRef(); - Hscp_hasRpc[NHSCPs] = hscp.hasRpcInfo(); - Hscp_hasCalo[NHSCPs] = hscp.hasCaloInfo(); - Hscp_type[NHSCPs] = hscp.type(); - - if (track.isNonnull() && Hscp_hasTrack[NHSCPs]) { - Track_p[NHSCPs] = track->p(); - Track_pt[NHSCPs] = track->pt(); - Track_pt_err[NHSCPs] = track->ptError(); - Track_eta[NHSCPs] = track->eta(); - Track_eta_err[NHSCPs] = track->etaError(); - Track_phi[NHSCPs] = track->phi(); - Track_phi_err[NHSCPs] = track->phiError(); - Track_NOH[NHSCPs] = track->found(); - Track_chi2[NHSCPs] = track->chi2(); - Track_ndof[NHSCPs] = track->ndof(); - Track_d0[NHSCPs] = -1.0f * track->dxy(recoVertex[0].position()); - Track_dz[NHSCPs] = -1.0f * track->dz(recoVertex[0].position()); - Track_quality[NHSCPs] = track->qualityMask(); - Track_charge[NHSCPs] = track->charge(); - /* Track_dEdxE1 [NHSCPs] = hscp.dedxEstimator1().dEdx(); - Track_dEdxE1_NOM [NHSCPs] = hscp.dedxEstimator1().numberOfMeasurements(); - Track_dEdxE1_NOS [NHSCPs] = hscp.dedxEstimator1().numberOfSaturatedMeasurements(); - Track_dEdxE2 [NHSCPs] = hscp.dedxEstimator2().dEdx(); - Track_dEdxE2_NOM [NHSCPs] = hscp.dedxEstimator2().numberOfMeasurements(); - Track_dEdxE2_NOS [NHSCPs] = hscp.dedxEstimator2().numberOfSaturatedMeasurements(); - Track_dEdxE3 [NHSCPs] = hscp.dedxEstimator3().dEdx(); - Track_dEdxE3_NOM [NHSCPs] = hscp.dedxEstimator3().numberOfMeasurements(); - Track_dEdxE3_NOS [NHSCPs] = hscp.dedxEstimator3().numberOfSaturatedMeasurements(); - Track_dEdxD1 [NHSCPs] = hscp.dedxDiscriminator1().dEdx(); - Track_dEdxD1_NOM [NHSCPs] = hscp.dedxDiscriminator1().numberOfMeasurements(); - Track_dEdxD1_NOS [NHSCPs] = hscp.dedxDiscriminator1().numberOfSaturatedMeasurements(); - Track_dEdxD2 [NHSCPs] = hscp.dedxDiscriminator2().dEdx(); - Track_dEdxD2_NOM [NHSCPs] = hscp.dedxDiscriminator2().numberOfMeasurements(); - Track_dEdxD2_NOS [NHSCPs] = hscp.dedxDiscriminator2().numberOfSaturatedMeasurements(); - Track_dEdxD3 [NHSCPs] = hscp.dedxDiscriminator3().dEdx(); - Track_dEdxD3_NOM [NHSCPs] = hscp.dedxDiscriminator3().numberOfMeasurements(); - Track_dEdxD3_NOS [NHSCPs] = hscp.dedxDiscriminator3().numberOfSaturatedMeasurements(); -*/ - } - - if (muon.isNonnull() && Hscp_hasMuon[NHSCPs]) { - Muon_p[NHSCPs] = muon->p(); - Muon_pt[NHSCPs] = muon->pt(); - Muon_eta[NHSCPs] = muon->eta(); - Muon_phi[NHSCPs] = muon->phi(); - Muon_type[NHSCPs] = muon->type(); - Muon_qualityValid[NHSCPs] = muon->isQualityValid(); - Muon_charge[NHSCPs] = muon->charge(); - /* Muon_dt_IBeta [NHSCPs] = hscp.muonTimeDt().inverseBeta(); - Muon_dt_IBeta_err [NHSCPs] = hscp.muonTimeDt().inverseBetaErr(); - Muon_dt_fIBeta [NHSCPs] = hscp.muonTimeDt().freeInverseBeta(); - Muon_dt_fIBeta_err [NHSCPs] = hscp.muonTimeDt().freeInverseBetaErr(); - Muon_dt_ndof [NHSCPs] = hscp.muonTimeDt().nDof(); - Muon_csc_IBeta [NHSCPs] = hscp.muonTimeCsc().inverseBeta(); - Muon_csc_IBeta_err [NHSCPs] = hscp.muonTimeCsc().inverseBetaErr(); - Muon_csc_fIBeta [NHSCPs] = hscp.muonTimeCsc().freeInverseBeta(); - Muon_csc_fIBeta_err[NHSCPs] = hscp.muonTimeCsc().freeInverseBetaErr(); - Muon_csc_ndof [NHSCPs] = hscp.muonTimeCsc().nDof(); - Muon_cb_IBeta [NHSCPs] = hscp.muonTimeCombined().inverseBeta(); - Muon_cb_IBeta_err [NHSCPs] = hscp.muonTimeCombined().inverseBetaErr(); - Muon_cb_fIBeta [NHSCPs] = hscp.muonTimeCombined().freeInverseBeta(); - Muon_cb_fIBeta_err [NHSCPs] = hscp.muonTimeCombined().freeInverseBetaErr(); - Muon_cb_ndof [NHSCPs] = hscp.muonTimeCombined().nDof(); -*/ - } - - if (hscp.hasCaloInfo()) { - // Calo_ecal_crossedE [NHSCPs] = hscp.calo().ecalCrossedEnergy; - // Calo_ecal_beta [NHSCPs] = hscp.calo().ecalBeta; - // Calo_ecal_beta_err [NHSCPs] = hscp.calo().ecalBetaError; - // Calo_ecal_invBeta_err [NHSCPs] = hscp.calo().ecalInvBetaError; - // Calo_ecal_dEdx [NHSCPs] = hscp.calo().ecalDeDx; - // Calo_ecal_time [NHSCPs] = hscp.calo().ecalTime; - // Calo_ecal_time_err [NHSCPs] = hscp.calo().ecalTimeError; - // Calo_ecal_numCrysCrossed[NHSCPs] = hscp.calo().ecalCrysCrossed; - /* for(int i=0; i < Calo_ecal_numCrysCrossed[NHSCPs] && i < MAX_ECALCRYS; ++i) - { - Calo_ecal_swissCrossKs [NHSCPs][i] = hscp.calo().ecalSwissCrossKs[i]; - Calo_ecal_e1OverE9s [NHSCPs][i] = hscp.calo().ecalE1OverE9s[i]; - Calo_ecal_trackLengths [NHSCPs][i] = hscp.calo().ecalTrackLengths[i]; - GlobalPoint exitPosition = hscp.calo().ecalTrackExitPositions[i]; - Calo_ecal_trackExitEtas [NHSCPs][i] = exitPosition.eta(); - Calo_ecal_trackExitPhis [NHSCPs][i] = exitPosition.phi(); - Calo_ecal_energies [NHSCPs][i] = hscp.calo().ecalEnergies[i]; - Calo_ecal_outOfTimeEnergies[NHSCPs][i] = hscp.calo().ecalOutOfTimeEnergies[i]; - Calo_ecal_chi2s [NHSCPs][i] = hscp.calo().ecalChi2s[i]; - Calo_ecal_outOfTimeChi2s [NHSCPs][i] = hscp.calo().ecalOutOfTimeChi2s[i]; - Calo_ecal_times [NHSCPs][i] = hscp.calo().ecalTimes[i]; - Calo_ecal_timeErrors [NHSCPs][i] = hscp.calo().ecalTimeErrors[i]; - Calo_ecal_detIds [NHSCPs][i] = hscp.calo().ecalDetIds[i]; - } -*/ - } - - if (Hscp_hasRpc[NHSCPs]) { - Rpc_beta[NHSCPs] = hscp.rpc().beta; - } - - NHSCPs++; - } - - if (reccordGenInfo) { - Handle genParticles; - iEvent.getByToken(m_genParticlesToken, genParticles); - NGens = 0; - for (unsigned int i = 0; i < genParticles->size(); i++) { - const GenParticle& part = (*genParticles)[i]; - if (part.status() != 1) - continue; - if (part.pt() < 5) - continue; - // if(fabs(part.pdgId())<1000000) continue; - - Gen_pdgId[NGens] = part.pdgId(); - Gen_charge[NGens] = part.charge(); - Gen_p[NGens] = part.p(); - Gen_px[NGens] = part.px(); - Gen_py[NGens] = part.py(); - Gen_pz[NGens] = part.pz(); - Gen_pt[NGens] = part.pt(); - Gen_eta[NGens] = part.eta(); - Gen_phi[NGens] = part.phi(); - Gen_beta[NGens] = part.p() / part.energy(); - Gen_mass[NGens] = part.mass(); - NGens++; - } - } - - MyTree->Fill(); - return true; -} - -//define this as a plug-in -DEFINE_FWK_MODULE(HSCPTreeBuilder); diff --git a/SUSYBSMAnalysis/HSCP/plugins/HSCPValidator.cc b/SUSYBSMAnalysis/HSCP/plugins/HSCPValidator.cc deleted file mode 100644 index 869cfd9127c8f..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/HSCPValidator.cc +++ /dev/null @@ -1,893 +0,0 @@ -// -*- C++ -*- -// -// Package: HSCP -// Class: HSCPValidator -// -/**\class HSCPValidator HSCPValidator.cc HSCPValidation/HSCPValidator/src/HSCPValidator.cc - - Description: [one line class summary] - - Implementation: - [Notes on implementation] -*/ -// -// Original Author: Seth Cooper,27 1-024,+41227672342, -// Created: Wed Apr 14 14:27:52 CEST 2010 -// -// - -// system include files -#include -#include -#include -#include - -// user include files -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/EcalDetId/interface/EBDetId.h" -#include "DataFormats/EcalDetId/interface/EEDetId.h" -#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" -#include "DataFormats/RPCDigi/interface/RPCDigi.h" -#include "DataFormats/RPCDigi/interface/RPCDigiCollection.h" -#include "DataFormats/RPCRecHit/interface/RPCRecHit.h" -#include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h" -#include "DataFormats/MuonDetId/interface/RPCDetId.h" -#include -#include -#include "DataFormats/GeometrySurface/interface/Surface.h" -#include "DataFormats/DetId/interface/DetId.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include -#include -#include "DataFormats/GeometrySurface/interface/Surface.h" -#include "DataFormats/MuonDetId/interface/MuonSubdetId.h" -#include "Geometry/RPCGeometry/interface/RPCRoll.h" -#include "Geometry/Records/interface/MuonGeometryRecord.h" -#include "Geometry/RPCGeometry/interface/RPCGeomServ.h" -#include "Geometry/CommonDetUnit/interface/GeomDet.h" -#include -#include "Geometry/RPCGeometry/interface/RPCGeomServ.h" -#include -#include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h" -#include "Geometry/CommonDetUnit/interface/GeomDet.h" -#include "MagneticField/Engine/interface/MagneticField.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" -#include "RecoMuon/TrackingTools/interface/MuonPatternRecoDumper.h" -#include "SimDataFormats/TrackingHit/interface/PSimHit.h" -#include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" -#include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" -#include "SimDataFormats/Track/interface/SimTrackContainer.h" -#include "SimDataFormats/Track/interface/SimTrack.h" -#include "SimDataFormats/Track/interface/SimTrackContainer.h" -#include "SimDataFormats/Vertex/interface/SimVertex.h" -#include "SimDataFormats/Vertex/interface/SimVertexContainer.h" -#include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h" -#include "TrackPropagation/SteppingHelixPropagator/interface/SteppingHelixPropagator.h" -#include "TrackingTools/TransientTrack/interface/TransientTrack.h" -#include "TrackingTools/GeomPropagators/interface/Propagator.h" -#include "TrackingTools/GeomPropagators/interface/AnalyticalPropagator.h" -#include "TrackingTools/Records/interface/TrackingComponentsRecord.h" - -#include "DataFormats/TrackReco/interface/DeDxData.h" -#include "DataFormats/TrackReco/interface/TrackToTrackMap.h" - -#include "TH1.h" -#include "TGraph.h" -#include "TCanvas.h" - -#include "SUSYBSMAnalysis/HSCP/plugins/HSCPValidator.h" - -// -// constants, enums and typedefs -// - -// -// static data member definitions -// -edm::Service fileService; - -// -// constructors and destructor -// -HSCPValidator::HSCPValidator(const edm::ParameterSet& iConfig) - : doGenPlots_(iConfig.getParameter("MakeGenPlots")), - doHLTPlots_(iConfig.getParameter("MakeHLTPlots")), - doSimTrackPlots_(iConfig.getParameter("MakeSimTrackPlots")), - doSimDigiPlots_(iConfig.getParameter("MakeSimDigiPlots")), - doRecoPlots_(iConfig.getParameter("MakeRecoPlots")), - token_(consumes(iConfig.getParameter("generatorLabel"))), - simTracksToken_(consumes(edm::InputTag("g4SimHits"))), - trEvToken_(consumes(edm::InputTag("hltTriggerSummaryAOD"))), - tkTracksToken_(consumes(edm::InputTag("generalTracks"))), - dEdxTrackToken_(consumes >(edm::InputTag("dedxHarmonic2"))), - rpcRecHitsToken_(consumes(edm::InputTag("rpcRecHits"))), - triggerResultsToken_(consumes(edm::InputTag("TriggerResults", "", "HLT"))), - particleIds_(iConfig.getParameter >("particleIds")), - particleStatus_(iConfig.getUntrackedParameter("particleStatus", 1)), - ebSimHitToken_(consumes(iConfig.getParameter("EBSimHitCollection"))), - eeSimHitToken_(consumes(iConfig.getParameter("EESimHitCollection"))), - simTrackToken_(consumes(iConfig.getParameter("SimTrackCollection"))), - EBDigiCollectionToken_(consumes(iConfig.getParameter("EBDigiCollection"))), - EEDigiCollectionToken_(consumes(iConfig.getParameter("EEDigiCollection"))) { - //now do what ever initialization is needed - // GEN - particleEtaHist_ = fileService->make("particleEta", "Eta of gen particle", 100, -5, 5); - particlePhiHist_ = fileService->make("particlePhi", "Phi of gen particle", 180, -3.15, 3.15); - particlePHist_ = fileService->make("particleP", "Momentum of gen particle", 500, 0, 2000); - particlePtHist_ = fileService->make("particlePt", "P_{T} of gen particle", 500, 0, 2000); - particleMassHist_ = fileService->make("particleMass", "Mass of gen particle", 1000, 0, 2000); - particleStatusHist_ = fileService->make("particleStatus", "Status of gen particle", 10, 0, 10); - particleBetaHist_ = fileService->make("particleBeta", "Beta of gen particle", 100, 0, 1); - particleBetaInverseHist_ = fileService->make("particleBetaInverse", "1/#beta of gen particle", 100, 0, 5); - - h_genhscp_met = fileService->make("hscp_met", "missing E_{T} hscp", 100, 0., 1500.); - h_genhscp_met_nohscp = fileService->make("hscp_met_nohscp", "missing E_{T} w/o hscp", 100, 0., 1500.); - h_genhscp_scaloret = fileService->make("hscp_scaloret", "scalor E_{T} sum", 100, 0., 1500.); - h_genhscp_scaloret_nohscp = - fileService->make("hscp_scaloret_nohscp", "scalor E_{T} sum w/o hscp", 100, 0., 1500.); - - //SIM track Info - simTrackParticleEtaHist_ = fileService->make("simTrackParticleEta", "Eta of simTrackParticle", 100, -5, 5); - simTrackParticlePhiHist_ = - fileService->make("simTrackParticlePhi", "Phi of simTrackParticle", 180, -3.15, 3.15); - simTrackParticlePHist_ = fileService->make("simTrackParticleP", "Momentum of simTrackParticle", 500, 0, 2000); - simTrackParticlePtHist_ = fileService->make("simTrackParticlePt", "P_{T} of simTrackParticle", 500, 0, 2000); - simTrackParticleBetaHist_ = fileService->make("simTrackParticleBeta", "Beta of simTrackParticle", 100, 0, 1); - //reco track Info - - RecoHSCPPtVsGenPt = fileService->make("Recovsgenpt", "RecovsGen", 100, 0, 1000, 100, 0, 1000); - dedxVsp = fileService->make("dedxvsp", "dedxvsp", 100, 0, 1000, 100, 0, 10); - //HLT Info - hltmet = fileService->make("HLT_MET", "MET", 3, -1, 2); - hltjet = fileService->make("HLT_JET", "JET", 3, -1, 2); - hltmu = fileService->make("HLT_Mu", "Mu", 3, -1, 2); - - // SIM-DIGI: ECAL - simHitsEcalEnergyHistEB_ = - fileService->make("ecalEnergyOfSimHitsEB", "HSCP SimTrack-matching SimHit energy EB [GeV]", 125, -1, 4); - simHitsEcalEnergyHistEE_ = - fileService->make("ecalEnergyOfSimHitsEE", "HSCP SimTrack-matching SimHit energy EE [GeV]", 125, -1, 4); - simHitsEcalTimeHistEB_ = - fileService->make("ecalTimingOfSimHitsEB", "HSCP SimTrack-matching SimHit time EB [ns]", 115, -15, 100); - simHitsEcalTimeHistEE_ = - fileService->make("ecalTimingOfSimHitsEE", "HSCP SimTrack-matching SimHit time EE [ns]", 115, -15, 100); - simHitsEcalNumHistEB_ = fileService->make( - "ecalNumberOfSimHitsEB", "Number of HSCP SimTrack-matching EB sim hits in event", 100, 0, 200); - simHitsEcalNumHistEE_ = fileService->make( - "ecalNumberOfSimHitsEE", "Number of HSCP SimTrack-matching EE sim hits in event", 100, 0, 200); - simHitsEcalEnergyVsTimeHistEB_ = - fileService->make("ecalEnergyVsTimeOfSimHitsEB", - "Energy vs. time of HSCP SimTrack-matching EB sim hits in event", - 115, - -15, - 100, - 125, - -1, - 4); - simHitsEcalEnergyVsTimeHistEE_ = - fileService->make("ecalEnergyVsTimeOfSimHitsEE", - "Energy vs. time of HSCP SimTrack-matching EE sim hits in event", - 115, - -15, - 100, - 125, - -1, - 4); - simHitsEcalDigiMatchEnergyHistEB_ = - fileService->make("ecalEnergyOfDigiMatSimHitsEB", "HSCP digi-matching SimHit energy EB [GeV]", 125, -1, 4); - simHitsEcalDigiMatchEnergyHistEE_ = - fileService->make("ecalEnergyOfDigiMatSimHitsEE", "HSCP digi-matching SimHit energy EE [GeV]", 125, -1, 4); - simHitsEcalDigiMatchTimeHistEB_ = - fileService->make("ecalTimingOfDigiMatSimHitsEB", "HSCP digi-matching SimHit time EB [ns]", 115, -15, 100); - simHitsEcalDigiMatchTimeHistEE_ = - fileService->make("ecalTimingOfDigiMatSimHitsEE", "HSCP digi-matching SimHit time EE [ns]", 115, -15, 100); - simHitsEcalDigiMatchEnergyVsTimeHistEB_ = fileService->make( - "ecalEnergyVsTimeOfDigiMatSimHitsEB", "HSCP digi-matching EB SimHit energy vs. time", 115, -15, 100, 125, -1, 4); - simHitsEcalDigiMatchEnergyVsTimeHistEE_ = fileService->make( - "ecalEnergyVsTimeOfDigiMatSimHitsEE", "HSCP digi-matching EE SimHit energy vs. time", 115, -15, 100, 125, -1, 4); - simHitsEcalDigiMatchIEtaHist_ = - fileService->make("ecalIEtaOfDigiMatchSimHits", "iEta of digi-matching Ecal simHits (EB)", 171, -85, 86); - simHitsEcalDigiMatchIPhiHist_ = - fileService->make("ecalIPhiOfDigiMatchSimHits", "iPhi of digi-matching Ecal simHits (EB)", 360, 1, 361); - digisEcalNumHistEB_ = - fileService->make("ecalDigisNumberEB", "Number of EB digis matching simhits in event", 200, 0, 1000); - digisEcalNumHistEE_ = - fileService->make("ecalDigisNumberEE", "Number of EE digis matching simhits in event", 200, 0, 1000); - digiOccupancyMapEB_ = fileService->make( - "ecalDigiOccupancyMapEB", "Occupancy of simhit-matching digis EB;i#phi;i#eta", 360, 1, 361, 171, -85, 86); - digiOccupancyMapEEP_ = fileService->make( - "ecalDigiOccupancyMapEEM", "Occupancy of simhit-matching digis EEM;ix;iy", 100, 1, 100, 100, 1, 100); - digiOccupancyMapEEM_ = fileService->make( - "ecalDigiOccupancyMapEEP", "Occupancy of simhit-matching digis EEP;ix;iy", 100, 1, 100, 100, 1, 100); - - // SIM-DIGI: RPC - residualsRPCRecHitSimDigis_ = - fileService->make("residualsRPCRecHitSimDigis", "HSCP SimHit - Clossest RPC RecHit", 100, -5, 5); - efficiencyRPCRecHitSimDigis_ = - fileService->make("efficiencyRPCRecHitSimDigis", "HSCP SimHits RecHits Efficiency", 2, -0.5, 1.5); - cluSizeDistribution_ = fileService->make("RPCCluSizeDistro", "RPC HSCP CluSize Distribution", 11, -0.5, 10.5); - rpcTimeOfFlightBarrel_[0] = fileService->make("RPCToFLayer1", "RPC HSCP Time Of Flight Layer 1", 50, 5, 100); - rpcTimeOfFlightBarrel_[1] = fileService->make("RPCToFLayer2", "RPC HSCP Time Of Flight Layer 2", 50, 5, 100); - rpcTimeOfFlightBarrel_[2] = fileService->make("RPCToFLayer3", "RPC HSCP Time Of Flight Layer 3", 50, 5, 100); - rpcTimeOfFlightBarrel_[3] = fileService->make("RPCToFLayer4", "RPC HSCP Time Of Flight Layer 4", 50, 5, 100); - rpcTimeOfFlightBarrel_[4] = fileService->make("RPCToFLayer5", "RPC HSCP Time Of Flight Layer 5", 50, 5, 100); - rpcTimeOfFlightBarrel_[5] = fileService->make("RPCToFLayer6", "RPC HSCP Time Of Flight Layer 6", 50, 5, 100); - rpcBXBarrel_[0] = fileService->make("RPCBXLayer1", "RPC HSCP BX Layer 1", 5, -0.5, 4.5); - rpcBXBarrel_[1] = fileService->make("RPCBXLayer2", "RPC HSCP BX Layer 2", 5, -0.5, 4.5); - rpcBXBarrel_[2] = fileService->make("RPCBXLayer3", "RPC HSCP BX Layer 3", 5, -0.5, 4.5); - rpcBXBarrel_[3] = fileService->make("RPCBXLayer4", "RPC HSCP BX Layer 4", 5, -0.5, 4.5); - rpcBXBarrel_[4] = fileService->make("RPCBXLayer5", "RPC HSCP BX Layer 5", 5, -0.5, 4.5); - rpcBXBarrel_[5] = fileService->make("RPCBXLayer6", "RPC HSCP BX Layer 6", 5, -0.5, 4.5); - rpcTimeOfFlightEndCap_[0] = fileService->make("RPCToFDisk1", "RPC HSCP Time Of Flight Disk 1", 50, 5, 100); - rpcTimeOfFlightEndCap_[1] = fileService->make("RPCToFDisk2", "RPC HSCP Time Of Flight Disk 2", 50, 5, 100); - rpcTimeOfFlightEndCap_[2] = fileService->make("RPCToFDisk3", "RPC HSCP Time Of Flight Disk 3", 50, 5, 100); - rpcBXEndCap_[0] = fileService->make("RPCBXDisk1", "RPC HSCP BX Disk 1", 5, -0.5, 4.5); - rpcBXEndCap_[1] = fileService->make("RPCBXDisk2", "RPC HSCP BX Disk 2", 5, -0.5, 4.5); - rpcBXEndCap_[2] = fileService->make("RPCBXDisk3", "RPC HSCP BX Disk 3", 5, -0.5, 4.5); -} - -HSCPValidator::~HSCPValidator() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) - // particleEtaHist_ = fileService->make("particleEta","Eta of gen particle",100,-5,5); - // particlePhiHist_ = fileService->make("particlePhi","Phi of gen particle",180,-3.15,3.15); - // particlePHist_ = fileService->make("particleP","Momentum of gen particle",500,0,2000); - // particlePtHist_ = fileService->make("particlePt","P_{T} of gen particle",500,0,2000); - // particleMassHist_ = fileService->make("particleMass","Mass of gen particle",1000,0,2000); - // particleStatusHist_ = fileService->make("particleStatus","Status of gen particle",10,0,10); - // particleBetaHist_ = fileService->make("particleBeta","Beta of gen particle",100,0,1); - // particleBetaInverseHist_ = fileService->make("particleBetaInverse","1/#beta of gen particle",100,0,5); -} - -// -// member functions -// - -// ------------ method called to for each event ------------ -void HSCPValidator::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - iSetup.get().get(rpcGeo); - - if (doGenPlots_) - makeGenPlots(iEvent); - if (doSimTrackPlots_) - makeSimTrackPlots(iEvent); - if (doSimDigiPlots_) { - makeSimDigiPlotsECAL(iEvent); - makeSimDigiPlotsRPC(iEvent); - } - if (doHLTPlots_) { - makeHLTPlots(iEvent); - } - if (doRecoPlots_) { - makeRecoPlots(iEvent); - } -} - -// ------------ method called once each job just before starting event loop ------------ -void HSCPValidator::beginJob() {} - -// ------------ method called once each job just after ending the event loop ------------ -void HSCPValidator::endJob() { - std::string frequencies = ""; - for (std::map::const_iterator itr = particleIdsFoundMap_.begin(); itr != particleIdsFoundMap_.end(); - ++itr) { - frequencies += "PDG ID: "; - frequencies += intToString(itr->first); - frequencies += " Frequency: "; - frequencies += intToString(itr->second); - frequencies += "\n"; - } - std::cout << "Found PDGIds: " - << "\n\n" - << frequencies << std::endl; -} - -// ------------- Make gen plots --------------------------------------------------------- -void HSCPValidator::makeGenPlots(const edm::Event& iEvent) { - using namespace edm; - - double missingpx = 0; - double missingpy = 0; - double missingpx_nohscp = 0; - double missingpy_nohscp = 0; - double scalorEt = 0; - double scalorEt_nohscp = 0; - - Handle evt; - iEvent.getByToken(token_, evt); - - HepMC::GenEvent* myGenEvent = new HepMC::GenEvent(*(evt->GetEvent())); - for (HepMC::GenEvent::particle_iterator p = myGenEvent->particles_begin(); p != myGenEvent->particles_end(); ++p) { - if ((*p)->status() != particleStatus_) - continue; - //calculate MET(neutrino as MET) - if (abs((*p)->pdg_id()) != 12 && abs((*p)->pdg_id()) != 14 && - abs((*p)->pdg_id()) != 16) { //for non-neutrino particles. - missingpx -= (*p)->momentum().px(); - missingpy -= (*p)->momentum().py(); - scalorEt += (*p)->momentum().perp(); - } - - // Check if the particleId is in our R-hadron list - std::vector::const_iterator partIdItr = find(particleIds_.begin(), particleIds_.end(), (*p)->pdg_id()); - if (partIdItr == particleIds_.end()) { - //calculate MET(neutrino+ HSCP as MET) - if (abs((*p)->pdg_id()) != 12 && abs((*p)->pdg_id()) != 14 && - abs((*p)->pdg_id()) != 16) { //for non-neutrino particles. - missingpx_nohscp -= (*p)->momentum().px(); - missingpy_nohscp -= (*p)->momentum().py(); - scalorEt_nohscp += (*p)->momentum().perp(); - } - } else { - particleStatusHist_->Fill((*p)->status()); - - std::pair::iterator, bool> pair = - particleIdsFoundMap_.insert(std::make_pair((*p)->pdg_id(), 1)); - if (!pair.second) { - ++(pair.first->second); - } - - double mag = sqrt(pow((*p)->momentum().px(), 2) + pow((*p)->momentum().py(), 2) + pow((*p)->momentum().pz(), 2)); - particleEtaHist_->Fill((*p)->momentum().eta()); - particlePhiHist_->Fill((*p)->momentum().phi()); - particlePHist_->Fill(mag); - particlePtHist_->Fill((*p)->momentum().perp()); - particleMassHist_->Fill((*p)->generated_mass()); - float particleP = mag; - float particleM = (*p)->generated_mass(); - particleBetaHist_->Fill(particleP / sqrt(particleP * particleP + particleM * particleM)); - particleBetaInverseHist_->Fill(sqrt(particleP * particleP + particleM * particleM) / particleP); - } - } - - h_genhscp_met->Fill(sqrt(missingpx * missingpx + missingpy * missingpy)); - h_genhscp_met_nohscp->Fill(sqrt(missingpx_nohscp * missingpx_nohscp + missingpy_nohscp * missingpy_nohscp)); - h_genhscp_scaloret->Fill(scalorEt); - h_genhscp_scaloret_nohscp->Fill(scalorEt_nohscp); - - delete myGenEvent; -} - -// ------------- Make SimTrack plots --------------------------------------------------------- -void HSCPValidator::makeSimTrackPlots(const edm::Event& iEvent) { - using namespace edm; - //get sim track infos - Handle simTracksHandle; - iEvent.getByToken(simTracksToken_, simTracksHandle); - const SimTrackContainer simTracks = *(simTracksHandle.product()); - - SimTrackContainer::const_iterator simTrack; - - for (simTrack = simTracks.begin(); simTrack != simTracks.end(); ++simTrack) { - // Check if the particleId is in our list - std::vector::const_iterator partIdItr = find(particleIds_.begin(), particleIds_.end(), simTrack->type()); - if (partIdItr == particleIds_.end()) - continue; - - simTrackParticleEtaHist_->Fill((*simTrack).momentum().eta()); - simTrackParticlePhiHist_->Fill((*simTrack).momentum().phi()); - simTrackParticlePHist_->Fill((*simTrack).momentum().P()); - - simTrackParticlePtHist_->Fill((*simTrack).momentum().pt()); - - simTrackParticleBetaHist_->Fill((*simTrack).momentum().P() / (*simTrack).momentum().e()); - - // std::cout<<"Particle:"<type()<<" Charge:"<charge()< triggerResults; - iEvent.getByToken(triggerResultsToken_, triggerResults); - - edm::TriggerResultsByName tr(nullptr, nullptr); - if (triggerResults.isValid()) { - tr = iEvent.triggerResultsByName(*triggerResults); - } - - if (!tr.isValid()) { - std::cout << "Trigger Results not available" << std::endl; - } - - edm::Handle trEvHandle; - iEvent.getByToken(trEvToken_, trEvHandle); - trigger::TriggerEvent trEv = *trEvHandle; - - unsigned int TrIndex_Unknown = tr.size(); - - // HLT TRIGGER BASED ON 1 MUON! - if (TrIndex_Unknown != tr.triggerIndex("HLT_Mu40_v1")) { - if (tr.accept(tr.triggerIndex("HLT_Mu40_v1"))) - hltmu->Fill(1); - else { - hltmu->Fill(0); - } - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_Mu30_v1")) { - if (IncreasedTreshold(trEv, InputTag("hltSingleMu30L3Filtered30", "", "HLT"), 40, 2.1, 1, false)) - hltmu->Fill(1); - else - hltmu->Fill(0); - } else { - printf("BUG with HLT_Mu\n"); - std::cout << "trigger names are : "; - for (unsigned int i = 0; i < tr.size(); i++) { - std::cout << " " << tr.triggerName(i); - } - std::cout << std::endl; - } - } - - // HLT TRIGGER BASED ON MET! - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v3")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v3"))) - hltmet->Fill(1); - else - hltmet->Fill(0); - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v2")) { - if (tr.accept(tr.triggerIndex("HLT_PFMHT150_v2"))) - hltmet->Fill(1); - else - hltmet->Fill(0); - } else { - printf("BUG with HLT_MET\n"); - } - } - - // HLT TRIGGER BASED ON 1 JET! - if (TrIndex_Unknown != tr.triggerIndex("HLT_Jet370_v1")) { - if (tr.accept(tr.triggerIndex("HLT_Jet370_v1"))) - hltjet->Fill(1); - else - hltjet->Fill(0); - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_Jet100U")) { - if (IncreasedTreshold(trEv, InputTag("hlt1jet100U", "", "HLT"), 140, 5., 1, false)) - hltjet->Fill(1); - else - hltjet->Fill(0); - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_Jet70U")) { - if (IncreasedTreshold(trEv, InputTag("hlt1jet70U", "", "HLT"), 140, 5., 1, false)) - hltjet->Fill(1); - else - hltjet->Fill(0); - } else { - if (TrIndex_Unknown != tr.triggerIndex("HLT_Jet50U")) { - if (IncreasedTreshold(trEv, InputTag("hlt1jet50U", "", "HLT"), 140, 2.5, 1, false)) - hltjet->Fill(1); - else - hltjet->Fill(0); - } else { - printf("BUG with HLT_Jet\n"); - } - } - } - } -} - -// ------------- Make simDigi plots ECAL ------------------------------------------------ -void HSCPValidator::makeSimDigiPlotsECAL(const edm::Event& iEvent) { - using namespace edm; - // EB SimHits - Handle ebSimHits; - iEvent.getByToken(ebSimHitToken_, ebSimHits); - if (!ebSimHits.isValid()) { - std::cout << "Cannot get EBSimHits from event!" << std::endl; - return; - } - // EE SimHits - Handle eeSimHits; - iEvent.getByToken(eeSimHitToken_, eeSimHits); - if (!eeSimHits.isValid()) { - std::cout << "Cannot get EESimHits from event!" << std::endl; - return; - } - // SimTracks - Handle simTracks; - iEvent.getByToken(simTrackToken_, simTracks); - if (!simTracks.isValid()) { - std::cout << "Cannot get SimTracks from event!" << std::endl; - return; - } - // EB Digis - Handle ebDigis; - iEvent.getByToken(EBDigiCollectionToken_, ebDigis); - if (!ebDigis.isValid()) { - std::cout << "Cannot get EBDigis from event!" << std::endl; - return; - } - // EE Digis - Handle eeDigis; - iEvent.getByToken(EEDigiCollectionToken_, eeDigis); - if (!eeDigis.isValid()) { - std::cout << "Cannot get EEDigis from event!" << std::endl; - return; - } - - // EB first - // 1) Look at SimTracks, getting only the HSCP tracks - // 2) Match to PCaloHits - // 3) Match to digis - int numMatchedSimHitsEventEB = 0; - int numMatchedDigisEventEB = 0; - const PCaloHitContainer* phitsEB = nullptr; - phitsEB = ebSimHits.product(); - for (SimTrackContainer::const_iterator simTrack = simTracks->begin(); simTrack != simTracks->end(); ++simTrack) { - // Check if the particleId is in our list - std::vector::const_iterator partIdItr = find(particleIds_.begin(), particleIds_.end(), simTrack->type()); - if (partIdItr == particleIds_.end()) - continue; - - PCaloHitContainer mySimHitsEB; - std::vector myDigisEB; - - //int particleId = simTrack->type(); - int trackId = simTrack->trackId(); - PCaloHitContainer::const_iterator simHitItr = phitsEB->begin(); - while (simHitItr != phitsEB->end()) { - if (simHitItr->geantTrackId() == trackId) - mySimHitsEB.push_back(*simHitItr); - ++simHitItr; - } - if (mySimHitsEB.empty()) { - std::cout << "Could not find matching EB PCaloHits for SimTrack id: " << trackId << ". Skipping this SimTrack" - << std::endl; - continue; - } - - // Loop over matching PCaloHits - for (simHitItr = mySimHitsEB.begin(); simHitItr != mySimHitsEB.end(); ++simHitItr) { - simHitsEcalEnergyHistEB_->Fill(simHitItr->energy()); - simHitsEcalTimeHistEB_->Fill(simHitItr->time()); - simHitsEcalEnergyVsTimeHistEB_->Fill(simHitItr->time(), simHitItr->energy()); - EBDetId simHitId = EBDetId(simHitItr->id()); - std::cout << "SimHit DetId found: " << simHitId << " for PDGid: " << simTrack->type() << std::endl; - //std::cout << "SimHit hashedIndex: " << simHitId.hashedIndex() << std::endl; - std::cout << "SimHit energy: " << simHitItr->energy() << " time: " << simHitItr->time() << std::endl; - ++numMatchedSimHitsEventEB; - - EBDigiCollection::const_iterator digiItr = ebDigis->begin(); - while (digiItr != ebDigis->end() && (digiItr->id() != simHitId)) - ++digiItr; - if (digiItr == ebDigis->end()) { - // Commented out for debugging ease, Aug 3 2009 - std::cout << "Could not find simHit detId: " << simHitId << "in EBDigiCollection!" << std::endl; - continue; - } - std::vector::const_iterator myDigiItr = myDigisEB.begin(); - while (myDigiItr != myDigisEB.end() && (digiItr->id() != myDigiItr->id())) - ++myDigiItr; - if (myDigiItr != myDigisEB.end()) - continue; // if this digi is already in the list, skip it - - ++numMatchedDigisEventEB; - EBDataFrame df = *digiItr; - myDigisEB.push_back(df); - std::cout << "SAMPLE ADCs: " - << "\t"; - for (int i = 0; i < 10; ++i) - std::cout << i << "\t"; - std::cout << std::endl << "\t\t"; - for (int i = 0; i < df.size(); ++i) { - std::cout << df.sample(i).adc() << "\t"; - } - std::cout << std::endl << std::endl; - - simHitsEcalDigiMatchEnergyHistEB_->Fill(simHitItr->energy()); - simHitsEcalDigiMatchTimeHistEB_->Fill(simHitItr->time()); - simHitsEcalDigiMatchEnergyVsTimeHistEB_->Fill(simHitItr->time(), simHitItr->energy()); - simHitsEcalDigiMatchIEtaHist_->Fill(((EBDetId)digiItr->id()).ieta()); - simHitsEcalDigiMatchIPhiHist_->Fill(((EBDetId)digiItr->id()).iphi()); - digiOccupancyMapEB_->Fill(((EBDetId)digiItr->id()).iphi(), ((EBDetId)digiItr->id()).ieta()); - } - } - simHitsEcalNumHistEB_->Fill(numMatchedSimHitsEventEB); - digisEcalNumHistEB_->Fill(numMatchedDigisEventEB); - - // EE next - int numMatchedSimHitsEventEE = 0; - int numMatchedDigisEventEE = 0; - const PCaloHitContainer* phitsEE = nullptr; - phitsEE = eeSimHits.product(); - for (SimTrackContainer::const_iterator simTrack = simTracks->begin(); simTrack != simTracks->end(); ++simTrack) { - // Check if the particleId is in our list - std::vector::const_iterator partIdItr = find(particleIds_.begin(), particleIds_.end(), simTrack->type()); - if (partIdItr == particleIds_.end()) - continue; - - PCaloHitContainer mySimHitsEE; - std::vector myDigisEE; - - //int particleId = simTrack->type(); - int trackId = simTrack->trackId(); - PCaloHitContainer::const_iterator simHitItr = phitsEE->begin(); - while (simHitItr != phitsEE->end()) { - if (simHitItr->geantTrackId() == trackId) - mySimHitsEE.push_back(*simHitItr); - ++simHitItr; - } - if (mySimHitsEE.empty()) { - std::cout << "Could not find matching EE PCaloHits for SimTrack id: " << trackId << ". Skipping this SimTrack" - << std::endl; - continue; - } - - // Loop over matching PCaloHits - for (simHitItr = mySimHitsEE.begin(); simHitItr != mySimHitsEE.end(); ++simHitItr) { - simHitsEcalEnergyHistEE_->Fill(simHitItr->energy()); - simHitsEcalTimeHistEE_->Fill(simHitItr->time()); - simHitsEcalEnergyVsTimeHistEE_->Fill(simHitItr->time(), simHitItr->energy()); - EEDetId simHitId = EEDetId(simHitItr->id()); - std::cout << "SimHit DetId found: " << simHitId << " for PDGid: " << simTrack->type() << std::endl; - //std::cout << "SimHit hashedIndex: " << simHitId.hashedIndex() << std::endl; - std::cout << "SimHit energy: " << simHitItr->energy() << " time: " << simHitItr->time() << std::endl; - ++numMatchedSimHitsEventEE; - - EEDigiCollection::const_iterator digiItr = eeDigis->begin(); - while (digiItr != eeDigis->end() && (digiItr->id() != simHitId)) - ++digiItr; - if (digiItr == eeDigis->end()) { - // Commented out for debugging ease, Aug 3 2009 - std::cout << "Could not find simHit detId: " << simHitId << "in EEDigiCollection!" << std::endl; - continue; - } - std::vector::const_iterator myDigiItr = myDigisEE.begin(); - while (myDigiItr != myDigisEE.end() && (digiItr->id() != myDigiItr->id())) - ++myDigiItr; - if (myDigiItr != myDigisEE.end()) - continue; // if this digi is already in the list, skip it - - ++numMatchedDigisEventEE; - EEDataFrame df = *digiItr; - myDigisEE.push_back(df); - std::cout << "SAMPLE ADCs: " - << "\t"; - for (int i = 0; i < 10; ++i) - std::cout << i << "\t"; - std::cout << std::endl << "\t\t"; - for (int i = 0; i < df.size(); ++i) { - std::cout << df.sample(i).adc() << "\t"; - } - std::cout << std::endl << std::endl; - - simHitsEcalDigiMatchEnergyHistEE_->Fill(simHitItr->energy()); - simHitsEcalDigiMatchTimeHistEE_->Fill(simHitItr->time()); - simHitsEcalDigiMatchEnergyVsTimeHistEE_->Fill(simHitItr->time(), simHitItr->energy()); - if (((EEDetId)digiItr->id()).zside() > 0) - digiOccupancyMapEEP_->Fill(((EEDetId)digiItr->id()).ix(), ((EEDetId)digiItr->id()).iy()); - else if (((EEDetId)digiItr->id()).zside() < 0) - digiOccupancyMapEEM_->Fill(((EEDetId)digiItr->id()).ix(), ((EEDetId)digiItr->id()).iy()); - } - } - simHitsEcalNumHistEE_->Fill(numMatchedSimHitsEventEE); - digisEcalNumHistEE_->Fill(numMatchedDigisEventEE); -} -// ------------- Make Reco plots --------------------------------------------------------- -void HSCPValidator::makeRecoPlots(const edm::Event& iEvent) { - using namespace edm; - using namespace reco; - - Handle evt; - iEvent.getByToken(token_, evt); - - Handle tkTracks; - iEvent.getByToken(tkTracksToken_, tkTracks); - const reco::TrackCollection tkTC = *(tkTracks.product()); - - Handle > dEdxTrackHandle; - iEvent.getByToken(dEdxTrackToken_, dEdxTrackHandle); - const ValueMap dEdxTrack = *dEdxTrackHandle.product(); - - for (size_t i = 0; i < tkTracks->size(); i++) { - reco::TrackRef trkRef = reco::TrackRef(tkTracks, i); - - if (trkRef->pt() < 5 || trkRef->normalizedChi2() > 10) - continue; - - double minR = 999; - double hscpgenPt = -1; - - HepMC::GenEvent* myGenEvent = new HepMC::GenEvent(*(evt->GetEvent())); - for (HepMC::GenEvent::particle_iterator p = myGenEvent->particles_begin(); p != myGenEvent->particles_end(); ++p) { - if ((*p)->status() != particleStatus_) - continue; - // Check if the particleId is in our R-hadron list - std::vector::const_iterator partIdItr = find(particleIds_.begin(), particleIds_.end(), (*p)->pdg_id()); - if (partIdItr != particleIds_.end()) { - //calculate DeltaR - double distance = - pow((*p)->momentum().eta() - trkRef->eta(), 2) + pow((*p)->momentum().phi() - trkRef->phi(), 2); - distance = sqrt(distance); - if (distance < minR) { - minR = distance; - hscpgenPt = (*p)->momentum().perp(); - } - } - } - RecoHSCPPtVsGenPt->Fill(trkRef->pt(), hscpgenPt); - - delete myGenEvent; - double dedx = dEdxTrack[trkRef].dEdx(); - dedxVsp->Fill(trkRef->p(), dedx); - } -} - -// ------------- Make simDigi plots RPC ------------------------------------------------- -void HSCPValidator::makeSimDigiPlotsRPC(const edm::Event& iEvent) { - using namespace edm; - - //std::cout << " Getting the SimHits " < > theSimHitContainers; - iEvent.getManyByType(theSimHitContainers); - //std::cout << " The Number of sim Hits is " << theSimHitContainers.size() < rpcRecHits; - iEvent.getByToken(rpcRecHitsToken_, rpcRecHits); - - //SimTrack Stuff - std::vector theSimHits; - - for (int i = 0; i < int(theSimHitContainers.size()); i++) { - theSimHits.insert(theSimHits.end(), theSimHitContainers.at(i)->begin(), theSimHitContainers.at(i)->end()); - } - - for (std::vector::const_iterator iHit = theSimHits.begin(); iHit != theSimHits.end(); iHit++) { - std::vector::const_iterator partIdItr = find(particleIds_.begin(), particleIds_.end(), (*iHit).particleType()); - if (partIdItr == particleIds_.end()) - continue; - - DetId theDetUnitId((*iHit).detUnitId()); - - DetId simdetid = DetId((*iHit).detUnitId()); - - if (simdetid.det() == DetId::Muon && simdetid.subdetId() == MuonSubdetId::RPC) { //Only RPCs - - RPCDetId rollId(theDetUnitId); - RPCGeomServ rpcsrv(rollId); - - //std::cout << " Reading the Roll"<roll(rollId); - - //std::cout << " Getting the Surface"<surface(); - - GlobalPoint SimHitInGlobal = RPCSurface.toGlobal((*iHit).localPosition()); - - std::cout << "\t\t We have an RPC Sim Hit! in t=" << (*iHit).timeOfFlight() << "ns " << rpcsrv.name() - << " Global postition=" << SimHitInGlobal << std::endl; - - int layer = 0; - - if (rollId.station() == 1 && rollId.layer() == 1) - layer = 1; - else if (rollId.station() == 1 && rollId.layer() == 2) - layer = 2; - else if (rollId.station() == 2 && rollId.layer() == 1) - layer = 3; - else if (rollId.station() == 2 && rollId.layer() == 2) - layer = 4; - else if (rollId.station() == 3) - layer = 5; - else if (rollId.station() == 4) - layer = 6; - - if (rollId.region() == 0) { - rpcTimeOfFlightBarrel_[layer - 1]->Fill((*iHit).timeOfFlight()); - } else { - rpcTimeOfFlightEndCap_[rollId.station() - 1]->Fill((*iHit).timeOfFlight()); - } - - std::cout << "\t\t r=" << SimHitInGlobal.mag() << " phi=" << SimHitInGlobal.phi() - << " eta=" << SimHitInGlobal.eta() << std::endl; - - int cluSize = 0; - int bx = 100; - float minres = 3000.; - - std::cout << "\t \t \t \t Getting RecHits in Roll Asociated" << std::endl; - - typedef std::pair rangeRecHits; - rangeRecHits recHitCollection = rpcRecHits->get(rollId); - RPCRecHitCollection::const_iterator recHit; - - efficiencyRPCRecHitSimDigis_->Fill(0); - - for (recHit = recHitCollection.first; recHit != recHitCollection.second; recHit++) { - LocalPoint recHitPos = recHit->localPosition(); - float res = (*iHit).localPosition().x() - recHitPos.x(); - if (fabs(res) < fabs(minres)) { - minres = res; - cluSize = recHit->clusterSize(); - bx = recHit->BunchX(); - std::cout << "\t New Min Res " << res << "cm." << std::endl; - } - } - - if (minres < 3000.) { - residualsRPCRecHitSimDigis_->Fill(minres); - efficiencyRPCRecHitSimDigis_->Fill(1); - cluSizeDistribution_->Fill(cluSize); - if (rollId.region() == 0) - rpcBXBarrel_[layer - 1]->Fill(bx); - else - rpcBXEndCap_[rollId.station() - 1]->Fill(bx); - } - } - } -} - -// ------------- Convert int to string for printing ------------------------------------- -std::string HSCPValidator::intToString(int num) { - using namespace std; - ostringstream myStream; - myStream << num << flush; - return (myStream.str()); //returns the string form of the stringstream object -} - -//------Increase trigger thresold---- - -bool HSCPValidator::IncreasedTreshold(const trigger::TriggerEvent& trEv, - const edm::InputTag& InputPath, - double NewThreshold, - double etaCut, - int NObjectAboveThreshold, - bool averageThreshold) { - unsigned int filterIndex = trEv.filterIndex(InputPath); - //if(filterIndex %s XXX %s\n",filterIndex,trEv.filterTag(filterIndex).label().c_str(), trEv.filterTag(filterIndex).process().c_str()); - - if (filterIndex < trEv.sizeFilters()) { - const trigger::Vids& VIDS(trEv.filterIds(filterIndex)); - const trigger::Keys& KEYS(trEv.filterKeys(filterIndex)); - const int nI(VIDS.size()); - const int nK(KEYS.size()); - assert(nI == nK); - const int n(std::max(nI, nK)); - const trigger::TriggerObjectCollection& TOC(trEv.getObjects()); - - if (!averageThreshold) { - int NObjectAboveThresholdObserved = 0; - for (int i = 0; i != n; ++i) { - if (TOC[KEYS[i]].pt() > NewThreshold && fabs(TOC[KEYS[i]].eta()) < etaCut) - NObjectAboveThresholdObserved++; - //cout << " " << i << " " << VIDS[i] << "/" << KEYS[i] << ": "<< TOC[KEYS[i]].id() << " " << TOC[KEYS[i]].pt() << " " << TOC[KEYS[i]].eta() << " " << TOC[KEYS[i]].phi() << " " << TOC[KEYS[i]].mass()<< endl; - } - if (NObjectAboveThresholdObserved >= NObjectAboveThreshold) - return true; - - } else { - std::vector ObjPt; - - for (int i = 0; i != n; ++i) { - ObjPt.push_back(TOC[KEYS[i]].pt()); - //cout << " " << i << " " << VIDS[i] << "/" << KEYS[i] << ": "<< TOC[KEYS[i]].id() << " " << TOC[KEYS[i]].pt() << " " << TOC[KEYS[i]].eta() << " " << TOC[KEYS[i]].phi() << " " << TOC[KEYS[i]].mass()<< endl; - } - if ((int)(ObjPt.size()) < NObjectAboveThreshold) - return false; - std::sort(ObjPt.begin(), ObjPt.end()); - - double Average = 0; - for (int i = 0; i < NObjectAboveThreshold; i++) { - Average += ObjPt[ObjPt.size() - 1 - i]; - } - Average /= NObjectAboveThreshold; - //cout << "AVERAGE = " << Average << endl; - - if (Average > NewThreshold) - return true; - } - } - return false; -} - -//define this as a plug-in -DEFINE_FWK_MODULE(HSCPValidator); diff --git a/SUSYBSMAnalysis/HSCP/plugins/HSCPValidator.h b/SUSYBSMAnalysis/HSCP/plugins/HSCPValidator.h deleted file mode 100644 index 7c02041f393e9..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/HSCPValidator.h +++ /dev/null @@ -1,150 +0,0 @@ -// -*- C++ -*- -// -// Package: HSCP -// Class: HSCPValidator -// -/**\class HSCPValidator HSCPValidator.cc HSCPValidation/HSCPValidator/src/HSCPValidator.cc - - Description: [one line class summary] - - Implementation: - [Notes on implementation] -*/ -// -// Original Author: Seth Cooper,27 1-024,+41227672342, -// Created: Wed Apr 14 14:27:52 CEST 2010 -// -// -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "Geometry/RPCGeometry/interface/RPCGeometry.h" -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" -#include "FWCore/Common/interface/TriggerResultsByName.h" -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/Common/interface/TriggerResults.h" -#include "DataFormats/HLTReco/interface/TriggerObject.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/TrackReco/interface/DeDxData.h" -#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" -#include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h" -#include "SimDataFormats/Track/interface/SimTrackContainer.h" -#include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" - -// - -#include "TH2F.h" -// -// class declaration -// - -class HSCPValidator : public edm::EDAnalyzer { -public: - explicit HSCPValidator(const edm::ParameterSet&); - ~HSCPValidator() override; - -private: - void beginJob() override; - void analyze(const edm::Event&, const edm::EventSetup&) override; - void endJob() override; - std::string intToString(int num); - void makeGenPlots(const edm::Event& iEvent); - void makeSimTrackPlots(const edm::Event& iEvent); - void makeSimDigiPlotsECAL(const edm::Event& iEvent); - void makeSimDigiPlotsRPC(const edm::Event& iEvent); - void makeHLTPlots(const edm::Event& iEvent); - void makeRecoPlots(const edm::Event& iEvent); - bool IncreasedTreshold(const trigger::TriggerEvent& trEv, - const edm::InputTag& InputPath, - double NewThreshold, - double etaCut, - int NObjectAboveThreshold, - bool averageThreshold); - // ----------member data --------------------------- - bool doGenPlots_; - bool doHLTPlots_; - bool doSimTrackPlots_; - bool doSimDigiPlots_; - bool doRecoPlots_; - - // GEN section - edm::EDGetTokenT token_; - edm::EDGetTokenT simTracksToken_; - edm::EDGetTokenT trEvToken_; - edm::EDGetTokenT tkTracksToken_; - edm::EDGetTokenT > dEdxTrackToken_; - edm::EDGetTokenT rpcRecHitsToken_; - edm::EDGetTokenT triggerResultsToken_; - std::vector particleIds_; - int particleStatus_; - std::map particleIdsFoundMap_; - TH1F* particleEtaHist_; - TH1F* particlePhiHist_; - TH1F* particlePHist_; - TH1F* particlePtHist_; - TH1F* particleMassHist_; - TH1F* particleStatusHist_; - TH1F* particleBetaHist_; - TH1F* particleBetaInverseHist_; - TH1F* h_genhscp_met; - TH1F* h_genhscp_met_nohscp; - TH1F* h_genhscp_scaloret; - TH1F* h_genhscp_scaloret_nohscp; - - //SIM-Track section - TH1F* simTrackParticleEtaHist_; - TH1F* simTrackParticlePhiHist_; - TH1F* simTrackParticlePHist_; - TH1F* simTrackParticlePtHist_; - TH1F* simTrackParticleBetaHist_; - - // SIM-DIGI section - edm::EDGetTokenT ebSimHitToken_; - edm::EDGetTokenT eeSimHitToken_; - edm::EDGetTokenT simTrackToken_; - edm::EDGetTokenT EBDigiCollectionToken_; - edm::EDGetTokenT EEDigiCollectionToken_; - edm::ESHandle rpcGeo; - // ECAL - TH1F* simHitsEcalEnergyHistEB_; - TH1F* simHitsEcalTimeHistEB_; - TH1F* simHitsEcalNumHistEB_; - TH2F* simHitsEcalEnergyVsTimeHistEB_; - TH1F* simHitsEcalEnergyHistEE_; - TH1F* simHitsEcalTimeHistEE_; - TH1F* simHitsEcalNumHistEE_; - TH2F* simHitsEcalEnergyVsTimeHistEE_; - TH1F* simHitsEcalDigiMatchEnergyHistEB_; - TH1F* simHitsEcalDigiMatchTimeHistEB_; - TH2F* simHitsEcalDigiMatchEnergyVsTimeHistEB_; - TH1F* simHitsEcalDigiMatchEnergyHistEE_; - TH1F* simHitsEcalDigiMatchTimeHistEE_; - TH2F* simHitsEcalDigiMatchEnergyVsTimeHistEE_; - TH1F* simHitsEcalDigiMatchIEtaHist_; - TH1F* simHitsEcalDigiMatchIPhiHist_; - TH1F* digisEcalNumHistEB_; - TH1F* digisEcalNumHistEE_; - TH2F* digiOccupancyMapEB_; - TH2F* digiOccupancyMapEEP_; - TH2F* digiOccupancyMapEEM_; - // RPC - TH1F* residualsRPCRecHitSimDigis_; - TH1F* efficiencyRPCRecHitSimDigis_; - TH1F* cluSizeDistribution_; - TH1F* rpcTimeOfFlightBarrel_[6]; - TH1F* rpcBXBarrel_[6]; - TH1F* rpcTimeOfFlightEndCap_[3]; - TH1F* rpcBXEndCap_[3]; - //HLT - TH1F* hltmet; - TH1F* hltjet; - TH1F* hltmu; - //RECO - TH2F* RecoHSCPPtVsGenPt; - TH2F* dedxVsp; -}; diff --git a/SUSYBSMAnalysis/HSCP/plugins/HSCParticleProducer.cc b/SUSYBSMAnalysis/HSCP/plugins/HSCParticleProducer.cc deleted file mode 100644 index 3933f177d839a..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/HSCParticleProducer.cc +++ /dev/null @@ -1,363 +0,0 @@ -// -*- C++ -*- -// -// Package: HSCParticleProducer -// Class: HSCParticleProducer -// -/**\class HSCParticleProducer HSCParticleProducer.cc SUSYBSMAnalysis/HSCParticleProducer/src/HSCParticleProducer.cc - - Description: Producer for HSCP candidates, merging tracker dt information and rpc information - - Implementation: - -*/ -// -// Original Author: Loic Quertenmont -// Created: Wed Oct 10 12:01:28 CEST 2007 -// -// - -// user include files -#include "SUSYBSMAnalysis/HSCP/plugins/HSCParticleProducer.h" - -using namespace susybsm; -using namespace reco; - -HSCParticleProducer::HSCParticleProducer(const edm::ParameterSet& iConfig) { - using namespace edm; - using namespace std; - - // the Act as Event filter - Filter_ = iConfig.getParameter("filter"); - - // the input collections - m_trackToken = consumes(iConfig.getParameter("tracks")); - m_muonsToken = consumes(iConfig.getParameter("muons")); - m_MTmuonsToken = consumes(iConfig.getParameter("MTmuons")); - m_trackIsoToken = consumes(iConfig.getParameter("tracksIsolation")); - - useBetaFromTk = iConfig.getParameter("useBetaFromTk"); - useBetaFromMuon = iConfig.getParameter("useBetaFromMuon"); - useBetaFromRpc = iConfig.getParameter("useBetaFromRpc"); - useBetaFromEcal = iConfig.getParameter("useBetaFromEcal"); - - // the parameters - minTkP = iConfig.getParameter("minTkP"); // 30 - maxTkChi2 = iConfig.getParameter("maxTkChi2"); // 5 - minTkHits = iConfig.getParameter("minTkHits"); // 9 - minMuP = iConfig.getParameter("minMuP"); // 30 - minDR = iConfig.getParameter("minDR"); // 0.1 - minSAMuPt = iConfig.getParameter("minSAMuPt"); // 70 - minMTMuPt = iConfig.getParameter("minMTMuPt"); // 70 - minMTDR = iConfig.getParameter("minMTDR"); // 0.3 - maxInvPtDiff = iConfig.getParameter("maxInvPtDiff"); // 0.005 - - if (useBetaFromTk) - beta_calculator_TK = new BetaCalculatorTK(iConfig, consumesCollector()); - if (useBetaFromMuon) - beta_calculator_MUON = new BetaCalculatorMUON(iConfig, consumesCollector()); - if (useBetaFromRpc) - beta_calculator_RPC = new BetaCalculatorRPC(iConfig, consumesCollector()); - if (useBetaFromEcal) - beta_calculator_ECAL = new BetaCalculatorECAL(iConfig, consumesCollector()); - - // Load all the selections - std::vector SelectionParameters = - iConfig.getParameter >("SelectionParameters"); - for (unsigned int i = 0; i < SelectionParameters.size(); i++) { - Selectors.push_back(new CandidateSelector(SelectionParameters[i])); - } - - // what I produce - produces(); - if (useBetaFromEcal) - produces(); -} - -HSCParticleProducer::~HSCParticleProducer() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - -// -// member functions -// - -// ------------ method called to produce the data ------------ -bool HSCParticleProducer::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - using namespace reco; - using namespace std; - using namespace susybsm; - - // information from the muons - edm::Handle muonCollectionHandle; - iEvent.getByToken(m_muonsToken, muonCollectionHandle); - - //information from the mean timer muons - edm::Handle MTmuonCollectionHandle; - iEvent.getByToken(m_MTmuonsToken, MTmuonCollectionHandle); - - // information from the tracks - edm::Handle trackCollectionHandle; - iEvent.getByToken(m_trackToken, trackCollectionHandle); - - // information from the tracks iso - edm::Handle trackIsoCollectionHandle; - iEvent.getByToken(m_trackIsoToken, trackIsoCollectionHandle); - - // creates the output collection - susybsm::HSCParticleCollection* hscp = new susybsm::HSCParticleCollection; - std::unique_ptr result(hscp); - - susybsm::HSCPCaloInfoCollection* caloInfoColl = new susybsm::HSCPCaloInfoCollection; - std::unique_ptr caloInfoCollaptr(caloInfoColl); - - // Fill the output collection with HSCP Candidate (the candiate only contains ref to muon AND/OR track object) - *hscp = getHSCPSeedCollection(trackCollectionHandle, muonCollectionHandle, MTmuonCollectionHandle); - - // find the track ref for isolation purposed (main track is supposed to be the Iso track after refitting) - for (susybsm::HSCParticleCollection::iterator hscpcandidate = hscp->begin(); hscpcandidate != hscp->end(); - ++hscpcandidate) { - // Matching is needed because input track collection and muon inner track may lightly differs due to track refit - reco::TrackRef track = hscpcandidate->trackRef(); - if (track.isNull()) - continue; - float dRMin = 1000; - int found = -1; - for (unsigned int t = 0; t < trackIsoCollectionHandle->size(); t++) { - reco::TrackRef Isotrack = reco::TrackRef(trackIsoCollectionHandle, t); - if (fabs((1.0 / track->pt()) - (1.0 / Isotrack->pt())) > maxInvPtDiff) - continue; - float dR = deltaR(track->momentum(), Isotrack->momentum()); - if (dR <= minDR && dR < dRMin) { - dRMin = dR; - found = t; - } - } - if (found >= 0) - hscpcandidate->setTrackIso(reco::TrackRef(trackIsoCollectionHandle, found)); - } - - // compute the TRACKER contribution - if (useBetaFromTk) { - for (susybsm::HSCParticleCollection::iterator hscpcandidate = hscp->begin(); hscpcandidate != hscp->end(); - ++hscpcandidate) { - beta_calculator_TK->addInfoToCandidate(*hscpcandidate, iEvent, iSetup); - } - } - - // compute the MUON contribution - if (useBetaFromMuon) { - for (susybsm::HSCParticleCollection::iterator hscpcandidate = hscp->begin(); hscpcandidate != hscp->end(); - ++hscpcandidate) { - beta_calculator_MUON->addInfoToCandidate(*hscpcandidate, iEvent, iSetup); - } - } - - // compute the RPC contribution - if (useBetaFromRpc) { - for (susybsm::HSCParticleCollection::iterator hscpcandidate = hscp->begin(); hscpcandidate != hscp->end(); - ++hscpcandidate) { - beta_calculator_RPC->addInfoToCandidate(*hscpcandidate, iEvent, iSetup); - } - } - - // compute the ECAL contribution - if (useBetaFromEcal) { - int Index = 0; - caloInfoColl->resize(hscp->size()); - for (susybsm::HSCParticleCollection::iterator hscpcandidate = hscp->begin(); hscpcandidate != hscp->end(); - ++hscpcandidate, Index++) { - beta_calculator_ECAL->addInfoToCandidate( - *hscpcandidate, trackCollectionHandle, iEvent, iSetup, (*caloInfoColl)[Index]); - } - } - - // cleanup the collection based on the input selection - for (int i = 0; i < (int)hscp->size(); i++) { - susybsm::HSCParticleCollection::iterator hscpcandidate = hscp->begin() + i; - bool decision = false; - for (unsigned int s = 0; s < Selectors.size(); s++) { - decision |= Selectors[s]->isSelected(*hscpcandidate); - } - if (!decision) { - hscp->erase(hscpcandidate); - if (useBetaFromEcal) - caloInfoColl->erase(caloInfoColl->begin() + i); - i--; - } - } - bool filterResult = !Filter_ || (Filter_ && !hscp->empty()); - - // output result - if (useBetaFromEcal) { - edm::OrphanHandle caloInfoHandle = iEvent.put(std::move(caloInfoCollaptr)); - // adding the reftoCaloInfoObject to the HSCP Object - for (int i = 0; i < (int)hscp->size(); i++) { - susybsm::HSCParticleCollection::iterator hscpcandidate = hscp->begin() + i; - hscpcandidate->setCaloInfo(HSCPCaloInfoRef(caloInfoHandle, i)); - } - } - - // output result - - edm::OrphanHandle putHandle = iEvent.put(std::move(result)); - // if(useBetaFromEcal){ - // edm::RefProd hscpCollectionHandle = iEvent.getRefBeforePut(); - // filler.insert(putHandle, CaloInfoColl.begin(), CaloInfoColl.end()); - // filler.fill(); - // iEvent.put(std::move(CaloInfoMap)); - // } - - return filterResult; -} - -// ------------ method called once each job just before starting event loop ------------ -void HSCParticleProducer::beginJob() {} - -// ------------ method called once each job just after ending the event loop ------------ -void HSCParticleProducer::endJob() {} - -std::vector HSCParticleProducer::getHSCPSeedCollection( - edm::Handle& trackCollectionHandle, - edm::Handle& muonCollectionHandle, - edm::Handle& MTmuonCollectionHandle) { - std::vector HSCPCollection; - - // Store a local vector of track ref (that can be modified if matching) - std::vector tracks; - for (unsigned int i = 0; i < trackCollectionHandle->size(); i++) { - TrackRef track = reco::TrackRef(trackCollectionHandle, i); - - //If track is from muon always keep it - bool isMuon = false; - for (unsigned int m = 0; m < muonCollectionHandle->size(); m++) { - reco::MuonRef muon = reco::MuonRef(muonCollectionHandle, m); - TrackRef innertrack = muon->innerTrack(); - if (innertrack.isNull()) - continue; - if (fabs((1.0 / innertrack->pt()) - (1.0 / track->pt())) > maxInvPtDiff) - continue; - float dR = deltaR(innertrack->momentum(), track->momentum()); - if (dR <= minDR) - isMuon = true; - } - - if ((track->p() < minTkP || (track->chi2() / track->ndof()) > maxTkChi2 || track->found() < minTkHits) && !isMuon) - continue; - tracks.push_back(track); - } - - // Loop on muons with inner track ref and create Muon HSCP Candidate - for (unsigned int m = 0; m < muonCollectionHandle->size(); m++) { - reco::MuonRef muon = reco::MuonRef(muonCollectionHandle, m); - double SApt = -1; - if (muon->isStandAloneMuon()) - SApt = muon->standAloneMuon()->pt(); - if (muon->p() < minMuP && SApt < minSAMuPt) - continue; - TrackRef innertrack = muon->innerTrack(); - if (innertrack.isNull()) - continue; - - // Check if the inner track match any track in order to create a Muon+Track HSCP Candidate - // Matching is needed because input track collection and muon inner track may lightly differs due to track refit - float dRMin = 1000; - int found = -1; - for (unsigned int t = 0; t < tracks.size(); t++) { - reco::TrackRef track = tracks[t]; - if (fabs((1.0 / innertrack->pt()) - (1.0 / track->pt())) > maxInvPtDiff) - continue; - float dR = deltaR(innertrack->momentum(), track->momentum()); - if (dR <= minDR && dR < dRMin) { - dRMin = dR; - found = t; - } - } - - HSCParticle candidate; - candidate.setMuon(muon); - if (found >= 0) { - // printf("MUON with Inner Track Matching --> DR = %6.2f (%6.2f %+6.2f %+6.2f):(%6.2f %+6.2f %+6.2f) vs (%6.2f %+6.2f %+6.2f)\n",dRMin,muon->pt(), muon->eta(), muon->phi(), innertrack->pt(), innertrack->eta(), innertrack->phi(), tracks[found]->pt(), tracks[found]->eta(), tracks[found]->phi() ); - candidate.setTrack(tracks[found]); - tracks.erase(tracks.begin() + found); - } - HSCPCollection.push_back(candidate); - } - - // Loop on muons without inner tracks and create Muon HSCP Candidate - for (unsigned int m = 0; m < muonCollectionHandle->size(); m++) { - reco::MuonRef muon = reco::MuonRef(muonCollectionHandle, m); - double SApt = -1; - if (muon->isStandAloneMuon()) - SApt = muon->standAloneMuon()->pt(); - if (muon->p() < minMuP && SApt < minSAMuPt) - continue; - TrackRef innertrack = muon->innerTrack(); - if (innertrack.isNonnull()) - continue; - - // Check if the muon match any track in order to create a Muon+Track HSCP Candidate - float dRMin = 1000; - int found = -1; - for (unsigned int t = 0; t < tracks.size(); t++) { - reco::TrackRef track = tracks[t]; - if (fabs((1.0 / muon->pt()) - (1.0 / track->pt())) > maxInvPtDiff) - continue; - float dR = deltaR(muon->momentum(), track->momentum()); - if (dR <= minDR && dR < dRMin) { - dRMin = dR; - found = t; - } - } - - HSCParticle candidate; - candidate.setMuon(muon); - if (found >= 0) { - // printf("MUON without Inner Track Matching --> DR = %6.2f (%6.2f %+6.2f %+6.2f) vs (%6.2f %+6.2f %+6.2f)\n",dRMin,muon->pt(), muon->eta(), muon->phi(), tracks[found]->pt(), tracks[found]->eta(), tracks[found]->phi() ); - candidate.setTrack(tracks[found]); - tracks.erase(tracks.begin() + found); - } - HSCPCollection.push_back(candidate); - } - - //Loop on MT muons and add to collection - for (unsigned int m = 0; m < MTmuonCollectionHandle->size(); m++) { - reco::MuonRef MTmuon = reco::MuonRef(MTmuonCollectionHandle, m); - if (MTmuon->pt() < minMTMuPt) - continue; - - //Check if matches muon HSCP candidate and add reference - float dRMin = 1000; - int found = -1; - for (unsigned int i = 0; i < HSCPCollection.size(); i++) { - if (!HSCPCollection[i].hasMuonRef()) - continue; - reco::MuonRef muon = HSCPCollection[i].muonRef(); - float dR = deltaR(muon->momentum(), MTmuon->momentum()); - if (dR <= minMTDR && dR < dRMin) { - dRMin = dR; - found = i; - } - } - if (found > -1) - HSCPCollection[found].setMTMuon(MTmuon); - else { - HSCParticle candidate; - candidate.setMTMuon(MTmuon); - HSCPCollection.push_back(candidate); - } - } - - // Loop on tracks not matching muon and create Track HSCP Candidate - for (unsigned int i = 0; i < tracks.size(); i++) { - HSCParticle candidate; - candidate.setTrack(tracks[i]); - HSCPCollection.push_back(candidate); - } - - return HSCPCollection; -} - -//define this as a plug-in -DEFINE_FWK_MODULE(HSCParticleProducer); diff --git a/SUSYBSMAnalysis/HSCP/plugins/HSCParticleProducer.h b/SUSYBSMAnalysis/HSCP/plugins/HSCParticleProducer.h deleted file mode 100644 index 7b9a2a3d568cf..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/HSCParticleProducer.h +++ /dev/null @@ -1,95 +0,0 @@ -// -*- C++ -*- -// -// Package: HSCParticleProducer -// Class: HSCParticleProducer -// -/**\class HSCParticleProducer HSCParticleProducer.h SUSYBSMAnalysis/HSCParticleProducer/interface/HSCParticleProducer.h - - Description: Producer for HSCP candidates, merging tracker dt information and rpc information - - Implementation: - -*/ -// -// Original Author: Loic Quertenmont -// Created: Wed Oct 10 12:01:28 CEST 2007 - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "CommonTools/UtilAlgos/interface/DeltaR.h" - -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "SUSYBSMAnalysis/HSCP/interface/BetaCalculatorTK.h" -#include "SUSYBSMAnalysis/HSCP/interface/BetaCalculatorMUON.h" -#include "SUSYBSMAnalysis/HSCP/interface/BetaCalculatorRPC.h" -#include "SUSYBSMAnalysis/HSCP/interface/BetaCalculatorECAL.h" -#include "SUSYBSMAnalysis/HSCP/interface/CandidateSelector.h" - -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCParticle.h" -#include "Math/GenVector/VectorUtil.h" - -#include -#include - -#include -#include - -// -// class decleration -// -class HSCParticleProducer : public edm::EDFilter { -public: - explicit HSCParticleProducer(const edm::ParameterSet&); - ~HSCParticleProducer() override; - -private: - void beginJob() override; - bool filter(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - std::vector getHSCPSeedCollection(edm::Handle& trackCollectionHandle, - edm::Handle& muonCollectionHandle, - edm::Handle& MTmuonCollectionHandle); - - // ----------member data --------------------------- - bool Filter_; - - edm::EDGetTokenT m_trackToken; - edm::EDGetTokenT m_trackIsoToken; - edm::EDGetTokenT m_muonsToken; - edm::EDGetTokenT m_MTmuonsToken; - - bool useBetaFromTk; - bool useBetaFromMuon; - bool useBetaFromRpc; - bool useBetaFromEcal; - - float minTkP; - float maxTkChi2; - unsigned int minTkHits; - float minMuP; - float minSAMuPt; - float minMTMuPt; - float minDR; - float minMTDR; - float maxInvPtDiff; - - BetaCalculatorTK* beta_calculator_TK; - BetaCalculatorMUON* beta_calculator_MUON; - BetaCalculatorRPC* beta_calculator_RPC; - BetaCalculatorECAL* beta_calculator_ECAL; - - std::vector Selectors; -}; diff --git a/SUSYBSMAnalysis/HSCP/plugins/HSCParticleSelector.cc b/SUSYBSMAnalysis/HSCP/plugins/HSCParticleSelector.cc deleted file mode 100644 index 83006d412f6b9..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/HSCParticleSelector.cc +++ /dev/null @@ -1,92 +0,0 @@ -#include -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/EDFilter.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Common/interface/View.h" - -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCParticle.h" -#include "SUSYBSMAnalysis/HSCP/interface/CandidateSelector.h" - -// -// class declaration -// -class HSCParticleSelector : public edm::EDFilter { -public: - explicit HSCParticleSelector(const edm::ParameterSet&); - ~HSCParticleSelector() override; - -private: - void beginJob() override; - bool filter(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - edm::EDGetTokenT sourceToken_; - - bool Filter_; - std::vector Selectors; -}; - -///////////////////////////////////////////////////////////////////////////////////// -HSCParticleSelector::HSCParticleSelector(const edm::ParameterSet& iConfig) { - // What is being produced - produces(); - - // Input products - sourceToken_ = consumes(iConfig.getParameter("source")); - Filter_ = iConfig.getParameter("filter"); - - // Load all the selections - std::vector SelectionParameters = - iConfig.getParameter >("SelectionParameters"); - for (unsigned int i = 0; i < SelectionParameters.size(); i++) { - Selectors.push_back(new CandidateSelector(SelectionParameters[i])); - } -} - -///////////////////////////////////////////////////////////////////////////////////// -HSCParticleSelector::~HSCParticleSelector() {} - -///////////////////////////////////////////////////////////////////////////////////// -void HSCParticleSelector::beginJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -void HSCParticleSelector::endJob() {} - -///////////////////////////////////////////////////////////////////////////////////// -bool HSCParticleSelector::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) { - // Source Collection - edm::Handle SourceHandle; - if (!iEvent.getByToken(sourceToken_, SourceHandle)) { - edm::LogError("") << ">>> HSCParticleCollection does not exist !!!"; - return false; - } - susybsm::HSCParticleCollection Source = *SourceHandle.product(); - - // Output Collection - susybsm::HSCParticleCollection* output = new susybsm::HSCParticleCollection; - std::unique_ptr result(output); - - // cleanup the collection based on the input selection - for (susybsm::HSCParticleCollection::iterator hscpcandidate = Source.begin(); hscpcandidate < Source.end(); - ++hscpcandidate) { - bool decision = false; - for (unsigned int i = 0; i < Selectors.size(); i++) { - decision |= Selectors[i]->isSelected(*hscpcandidate); - } - if (decision) { - susybsm::HSCParticle* newhscp = new susybsm::HSCParticle(*hscpcandidate); - output->push_back(*newhscp); - } - } - - bool filterResult = !Filter_ || (Filter_ && !output->empty()); - - iEvent.put(std::move(result)); - - return filterResult; -} - -DEFINE_FWK_MODULE(HSCParticleSelector); diff --git a/SUSYBSMAnalysis/HSCP/plugins/MuonSegmentProducer.cc b/SUSYBSMAnalysis/HSCP/plugins/MuonSegmentProducer.cc deleted file mode 100644 index 09fc65cf524c3..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/MuonSegmentProducer.cc +++ /dev/null @@ -1,136 +0,0 @@ -// -*- C++ -*- -// -// Package: MuonSegmentProducer -// Class: MuonSegmentProducer -// -/**\class MuonSegmentProducer MuonSegmentProducer.cc SUSYBSMAnalysis/MuonSegmentProducer/src/MuonSegmentProducer.cc - - Description: Producer muon segments with global position info to be used in FWLite - - Implementation: - -*/ -// -// Original Author: Rizzi Andrea -// Reworked and Ported to CMSSW_3_0_0 by Christophe Delaere -// Created: Wed Oct 10 12:01:28 CEST 2007 -// $Id: MuonSegmentProducer.cc,v 1.1 2012/04/27 20:49:41 farrell3 Exp $ -// -// - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "AnalysisDataFormats/SUSYBSMObjects/interface/MuonSegment.h" - -#include "Geometry/Records/interface/MuonGeometryRecord.h" -#include "DataFormats/MuonDetId/interface/MuonSubdetId.h" -#include "Geometry/DTGeometry/interface/DTGeometry.h" -#include "Geometry/DTGeometry/interface/DTLayer.h" -#include "Geometry/DTGeometry/interface/DTChamber.h" -#include "Geometry/DTGeometry/interface/DTSuperLayer.h" -#include "Geometry/CSCGeometry/interface/CSCGeometry.h" -#include "TrackingTools/Records/interface/TrackingComponentsRecord.h" - -#include -#include - -// -// class decleration -// -class MuonSegmentProducer : public edm::EDProducer { -public: - explicit MuonSegmentProducer(const edm::ParameterSet&); - ~MuonSegmentProducer() override; - -private: - void beginJob() override; - void produce(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - edm::EDGetTokenT m_cscSegmentToken; - edm::EDGetTokenT m_dtSegmentToken; -}; - -using namespace susybsm; - -MuonSegmentProducer::MuonSegmentProducer(const edm::ParameterSet& iConfig) { - using namespace edm; - using namespace std; - - m_cscSegmentToken = consumes(iConfig.getParameter("CSCSegments")); - m_dtSegmentToken = consumes(iConfig.getParameter("DTSegments")); - - produces(); -} - -MuonSegmentProducer::~MuonSegmentProducer() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - -// -// member functions -// - -// ------------ method called to produce the data ------------ -void MuonSegmentProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - using namespace std; - using namespace susybsm; - - susybsm::MuonSegmentCollection* segments = new susybsm::MuonSegmentCollection; - std::unique_ptr resultSeg(segments); - - edm::ESHandle dtGeom; - iSetup.get().get(dtGeom); - - edm::ESHandle cscGeom; - iSetup.get().get(cscGeom); - - edm::Handle dtSegments; - iEvent.getByToken(m_dtSegmentToken, dtSegments); - - for (unsigned int d = 0; d < dtSegments->size(); d++) { - DTRecSegment4DRef SegRef = DTRecSegment4DRef(dtSegments, d); - MuonSegment muonSegment; - muonSegment.setDTSegmentRef(SegRef); - - const GeomDet* dtDet = dtGeom->idToDet(SegRef->geographicalId()); - GlobalPoint point = dtDet->toGlobal(SegRef->localPosition()); - muonSegment.setGP(point); - segments->push_back(muonSegment); - } - - edm::Handle cscSegments; - iEvent.getByToken(m_cscSegmentToken, cscSegments); - - for (unsigned int c = 0; c < cscSegments->size(); c++) { - CSCSegmentRef SegRef = CSCSegmentRef(cscSegments, c); - MuonSegment muonSegment; - muonSegment.setCSCSegmentRef(SegRef); - - const GeomDet* cscDet = cscGeom->idToDet(SegRef->geographicalId()); - GlobalPoint point = cscDet->toGlobal(SegRef->localPosition()); - muonSegment.setGP(point); - segments->push_back(muonSegment); - } - - edm::OrphanHandle putHandleSeg = iEvent.put(std::move(resultSeg)); -} - -// ------------ method called once each job just before starting event loop ------------ -void MuonSegmentProducer::beginJob() {} - -// ------------ method called once each job just after ending the event loop ------------ -void MuonSegmentProducer::endJob() {} - -//define this as a plug-in -DEFINE_FWK_MODULE(MuonSegmentProducer); diff --git a/SUSYBSMAnalysis/HSCP/plugins/SimHitShifter.cc b/SUSYBSMAnalysis/HSCP/plugins/SimHitShifter.cc deleted file mode 100644 index 2b81e915fd09a..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/SimHitShifter.cc +++ /dev/null @@ -1,308 +0,0 @@ -// -*- C++ -*- -// -// Package: SimHitShifter -// Class: SimHitShifter -// -/**\class SimHitShifter SimHitShifter.cc simhitshifter/SimHitShifter/src/SimHitShifter.cc - - Description: [one line class summary] - - Implementation: - [Notes on implementation] -*/ -// -// Original Author: Camilo Andres Carrillo Montoya,40 2-B15,+41227671625, -// Created: Mon Aug 30 18:35:05 CEST 2010 -// -// - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "DataFormats/RPCDigi/interface/RPCDigi.h" -#include "DataFormats/RPCDigi/interface/RPCDigiCollection.h" -#include -#include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h" -#include -#include -#include "Geometry/RPCGeometry/interface/RPCGeomServ.h" -#include -#include -#include "DataFormats/GeometrySurface/interface/Surface.h" -#include "DataFormats/DetId/interface/DetId.h" -#include -#include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h" -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" -#include "DataFormats/Candidate/interface/CandidateFwd.h" -#include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h" - -#include "MagneticField/Engine/interface/MagneticField.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" -#include "Geometry/CommonDetUnit/interface/GeomDet.h" -#include -#include -#include "DataFormats/GeometrySurface/interface/Surface.h" -#include "TrackingTools/TransientTrack/interface/TransientTrack.h" - -#include "TrackingTools/GeomPropagators/interface/Propagator.h" -#include "TrackingTools/GeomPropagators/interface/AnalyticalPropagator.h" -#include "TrackPropagation/SteppingHelixPropagator/interface/SteppingHelixPropagator.h" - -#include "SimDataFormats/Track/interface/SimTrack.h" -#include "SimDataFormats/Track/interface/SimTrackContainer.h" -#include "SimDataFormats/Vertex/interface/SimVertex.h" -#include "SimDataFormats/Vertex/interface/SimVertexContainer.h" - -#include "TrackingTools/Records/interface/TrackingComponentsRecord.h" -#include "RecoMuon/TrackingTools/interface/MuonPatternRecoDumper.h" - -#include "DataFormats/MuonDetId/interface/MuonSubdetId.h" - -#include "DataFormats/MuonDetId/interface/CSCDetId.h" - -#include "Geometry/RPCGeometry/interface/RPCGeometry.h" -#include -#include -#include -#include - -#include - -//Root -#include "TFile.h" -#include "TF1.h" -#include "TH1F.h" -#include "TH1.h" -#include "TH2F.h" -#include "TROOT.h" -#include "TMath.h" -#include "TCanvas.h" - -//Track -#include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h" -#include "TrackingTools/PatternTools/interface/Trajectory.h" -#include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" -#include "DataFormats/TrackCandidate/interface/TrackCandidate.h" -#include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" - -#include - -// -// class declaration -// - -class SimHitShifter : public edm::EDProducer { -public: - explicit SimHitShifter(const edm::ParameterSet&); - ~SimHitShifter() override; - //edm::ESHandle rpcGeo; - void beginRun(const edm::Run&, const edm::EventSetup&) override; - std::map shiftinfo; - -private: - std::string ShiftFileName; - void beginJob() override; - void produce(edm::Event&, const edm::EventSetup&) override; - void endJob() override; -}; - -SimHitShifter::SimHitShifter(const edm::ParameterSet& iConfig) { - std::cout << "in the constructor" << std::endl; - - ShiftFileName = - iConfig.getUntrackedParameter("ShiftFileName", - "/afs/cern.ch/user/c/carrillo/simhits/CMSSW_3_5_8_patch2/src/" - "simhitshifter/SimHitShifter/Merged_Muon_RawId_Shift.txt"); - - //iSetup.get().get(rpcGeo); - - std::ifstream ifin(ShiftFileName.c_str()); - - int rawId; - float offset; - - std::cout << "In the constructor, The name of the file is " << ShiftFileName.c_str() << std::endl; - - if (!ifin) - std::cout << "Problem reading the map rawId shift " << ShiftFileName.c_str() << std::endl; - assert(ifin); - - while (ifin.good()) { - ifin >> rawId >> offset; - shiftinfo[rawId] = offset; - std::cout << "rawId =" << rawId << " offset=" << offset << std::endl; - } - - produces("MuonCSCHits"); - produces("MuonDTHits"); - produces("MuonRPCHits"); -} - -SimHitShifter::~SimHitShifter() {} - -void SimHitShifter::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - - //std::cout << " Getting the SimHits " < > theSimHitContainers; - iEvent.getManyByType(theSimHitContainers); - //std::cout << " The Number of sim Hits is " << theSimHitContainers.size() < pcsc(new edm::PSimHitContainer); - std::unique_ptr pdt(new edm::PSimHitContainer); - std::unique_ptr prpc(new edm::PSimHitContainer); - - std::vector theSimHits; - - using std::dec; - using std::oct; - - for (int i = 0; i < int(theSimHitContainers.size()); i++) { - theSimHits.insert(theSimHits.end(), theSimHitContainers.at(i)->begin(), theSimHitContainers.at(i)->end()); - } - - for (std::vector::const_iterator iHit = theSimHits.begin(); iHit != theSimHits.end(); iHit++) { - DetId theDetUnitId((*iHit).detUnitId()); - DetId simdetid = DetId((*iHit).detUnitId()); - - if (simdetid.det() != DetId::Muon) - continue; - - float newtof = 0; - - if (simdetid.det() == DetId::Muon && simdetid.subdetId() == MuonSubdetId::RPC) { //Only RPCs - //std::cout<<"\t\t We have an RPC Sim Hit! in t="<<(*iHit).timeOfFlight()<<" DetId="<<(*iHit).detUnitId()<push_back(hit); - } else if (simdetid.det() == DetId::Muon && simdetid.subdetId() == MuonSubdetId::DT) { //Only DTs - int RawId = simdetid.rawId(); - std::cout << "We found a DT simhit the RawId in Dec is"; - std::cout << dec << RawId << std::endl; - std::cout << "and in oct" << std::endl; - std::cout << oct << RawId << std::endl; - std::cout << "once masked in oct " << std::endl; - int compressedRawId = RawId / 8 / 8 / 8 / 8 / 8; - std::cout << compressedRawId << std::endl; - std::cout << "extendedRawId" << std::endl; - int extendedRawId = compressedRawId * 8 * 8 * 8 * 8 * 8; - std::cout << extendedRawId << std::endl; - std::cout << "converted again in decimal" << std::endl; - std::cout << dec << extendedRawId << std::endl; - - if (shiftinfo.find(extendedRawId) == shiftinfo.end()) { - //std::cout<<"DT Warning the RawId = "<push_back(hit); - } - } - - std::cout << "Putting collections in the event" << std::endl; - - iEvent.put(std::move(pcsc), "MuonCSCHits"); - iEvent.put(std::move(pdt), "MuonDTHits"); - iEvent.put(std::move(prpc), "MuonRPCHits"); -} - -void SimHitShifter::beginRun(const edm::Run& run, const edm::EventSetup& iSetup) {} - -// ------------ method called once each job just before starting event loop ------------ -void SimHitShifter::beginJob() {} - -// ------------ method called once each job just after ending the event loop ------------ -void SimHitShifter::endJob() {} - -//define this as a plug-in -DEFINE_FWK_MODULE(SimHitShifter); diff --git a/SUSYBSMAnalysis/HSCP/plugins/Skim_HSCPFilter.cc b/SUSYBSMAnalysis/HSCP/plugins/Skim_HSCPFilter.cc deleted file mode 100644 index 7134b1135c7d7..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/Skim_HSCPFilter.cc +++ /dev/null @@ -1,163 +0,0 @@ -// -*- C++ -*- -// -// Package: HSCPFilter -// Class: HSCPFilter -// -/**\class HSCPFilter HSCPFilter.cc HSCPFilter/HSCPFilter/src/HSCPFilter.cc - - Description: [one line class summary] - - Implementation: - [Notes on implementation] -*/ -// -// Original Author: Jie Chen -// Created: Thu Apr 29 16:32:10 CDT 2010 -// -// - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/global/EDFilter.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/TrackReco/interface/TrackExtra.h" - -#include "DataFormats/TrackReco/interface/TrackToTrackMap.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "DataFormats/MuonReco/interface/MuonFwd.h" - -#include "DataFormats/TrackReco/interface/DeDxData.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" - -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" - -// -// class declaration -// - -class HSCPFilter : public edm::global::EDFilter<> { -public: - explicit HSCPFilter(const edm::ParameterSet&); - -private: - bool filter(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; - bool filterFlag; - edm::EDGetTokenT recoVertexToken; - edm::EDGetTokenT input_muon_collectionToken; - edm::EDGetTokenT input_track_collectionToken; - edm::EDGetTokenT > input_dedx_collectionToken; - int ndedxHits; - double dedxMin, dedxMaxLeft, trkPtMin, SAMuPtMin, etaMin, etaMax, chi2nMax, dxyMax, dzMax; - - // ----------member data --------------------------- -}; - -// -// constants, enums and typedefs -// - -// -// static data member definitions -// - -// -// constructors and destructor -// -HSCPFilter::HSCPFilter(const edm::ParameterSet& iConfig) { - filterFlag = iConfig.getParameter("filter"); - recoVertexToken = consumes(edm::InputTag("offlinePrimaryVertices")); - input_muon_collectionToken = - consumes(iConfig.getParameter("inputMuonCollection")); - input_track_collectionToken = - consumes(iConfig.getParameter("inputTrackCollection")); - input_dedx_collectionToken = - consumes >(iConfig.getParameter("inputDedxCollection")); - dedxMin = iConfig.getParameter("dedxMin"); - dedxMaxLeft = iConfig.getParameter("dedxMaxLeft"); - trkPtMin = iConfig.getParameter("trkPtMin"); - etaMin = iConfig.getParameter("etaMin"); - etaMax = iConfig.getParameter("etaMax"); - ndedxHits = iConfig.getParameter("ndedxHits"); - chi2nMax = iConfig.getParameter("chi2nMax"); - dxyMax = iConfig.getParameter("dxyMax"); - dzMax = iConfig.getParameter("dzMax"); - SAMuPtMin = iConfig.getParameter("SAMuPtMin"); -} - -// -// member functions -// - -// ------------ method called on each new Event ------------ -bool HSCPFilter::filter(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { - using namespace edm; - - using namespace reco; - - reco::VertexCollection const& recoVertex = iEvent.get(recoVertexToken); - - if (!filterFlag) - return true; - - if (recoVertex.empty()) - return false; - - const reco::MuonCollection& muonC = iEvent.get(input_muon_collectionToken); - for (auto const& muon : muonC) { - if (!muon.standAloneMuon().isNull()) { - TrackRef SATrack = muon.standAloneMuon(); - if (SATrack->pt() > SAMuPtMin) - return true; - } - } - - Handle tkTracks = iEvent.getHandle(input_track_collectionToken); - - const ValueMap& dEdxTrack = iEvent.get(input_dedx_collectionToken); - - for (size_t i = 0; i < tkTracks->size(); i++) { - reco::TrackRef trkRef = reco::TrackRef(tkTracks, i); - - if (trkRef->pt() > trkPtMin && trkRef->eta() < etaMax && trkRef->eta() > etaMin && - trkRef->normalizedChi2() < chi2nMax) { - double dz = trkRef->dz(recoVertex[0].position()); - double dxy = trkRef->dxy(recoVertex[0].position()); - double distancemin = sqrt(dxy * dxy + dz * dz); - int closestvertex = 0; - for (unsigned int i = 1; i < recoVertex.size(); i++) { - dz = trkRef->dz(recoVertex[i].position()); - dxy = trkRef->dxy(recoVertex[i].position()); - double distance = sqrt(dxy * dxy + dz * dz); - if (distance < distancemin) { - distancemin = distance; - closestvertex = i; - } - } - - dz = trkRef->dz(recoVertex[closestvertex].position()); - dxy = trkRef->dxy(recoVertex[closestvertex].position()); - - if (fabs(dz) < dzMax && fabs(dxy) < dxyMax) { - double dedx = dEdxTrack[trkRef].dEdx(); - int dedxnhits = dEdxTrack[trkRef].numberOfMeasurements(); - if ((dedx > dedxMin || dedx < dedxMaxLeft) && dedxnhits > ndedxHits) - return true; - } - } - } - return false; -} - -//define this as a plug-in -DEFINE_FWK_MODULE(HSCPFilter); diff --git a/SUSYBSMAnalysis/HSCP/plugins/Skim_HighPtTrackEcalDetIdProducer.cc b/SUSYBSMAnalysis/HSCP/plugins/Skim_HighPtTrackEcalDetIdProducer.cc deleted file mode 100644 index 32905afc9ee8f..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/Skim_HighPtTrackEcalDetIdProducer.cc +++ /dev/null @@ -1,141 +0,0 @@ -// -*- C++ -*- -// -// Package: HighPtTrackEcalDetIdProducer -// Class: HighPtTrackEcalDetIdProducer -// -/*\class HighPtTrackEcalDetIdProducer HighPtTrackEcalDetIdProducer.cc - - Description: [one line class summary] - - Implementation: - [Notes on implementation] -*/ -// -// Original Author: Jie Chen -// Created: Mon Apr 12 16:41:46 CDT 2010 -// -// - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/TrackReco/interface/TrackExtra.h" - -#include "DataFormats/EcalRecHit/interface/EcalRecHit.h" -#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" - -#include "TrackingTools/TrackAssociator/interface/TrackDetectorAssociator.h" -#include "TrackingTools/TrackAssociator/interface/TrackAssociatorParameters.h" -#include "TrackingTools/TrackAssociator/interface/TrackDetMatchInfo.h" - -#include "DataFormats/EcalDetId/interface/EBDetId.h" -#include "DataFormats/EcalDetId/interface/EEDetId.h" -#include "DataFormats/DetId/interface/DetIdCollection.h" - -#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" -#include "Geometry/CaloTopology/interface/CaloTopology.h" -#include "Geometry/CaloTopology/interface/CaloSubdetectorTopology.h" - -// -// class declaration -// - -class HighPtTrackEcalDetIdProducer : public edm::stream::EDProducer<> { -public: - explicit HighPtTrackEcalDetIdProducer(const edm::ParameterSet&); - ~HighPtTrackEcalDetIdProducer() override; - void beginRun(const edm::Run&, const edm::EventSetup&) override; - void produce(edm::Event&, const edm::EventSetup&) override; - -private: - edm::EDGetTokenT inputCollectionToken_; - const CaloTopology* caloTopology_; - TrackDetectorAssociator trackAssociator_; - TrackAssociatorParameters parameters_; - double ptcut_; - // ----------member data --------------------------- -}; - -// -// constants, enums and typedefs -// - -// -// static data member definitions -// - -// -// constructors and destructor -// -HighPtTrackEcalDetIdProducer::HighPtTrackEcalDetIdProducer(const edm::ParameterSet& iConfig) { - inputCollectionToken_ = consumes(iConfig.getParameter("inputCollection")); - ptcut_ = iConfig.getParameter("TrackPt"); - - produces(); - // TrackAssociator parameters - edm::ParameterSet parameters = iConfig.getParameter("TrackAssociatorParameters"); - edm::ConsumesCollector iC = consumesCollector(); - parameters_.loadParameters(parameters, iC); - trackAssociator_.useDefaultPropagator(); -} - -HighPtTrackEcalDetIdProducer::~HighPtTrackEcalDetIdProducer() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - -// -// member functions -// - -void HighPtTrackEcalDetIdProducer::beginRun(const edm::Run& run, const edm::EventSetup& iSetup) { - edm::ESHandle theCaloTopology; - iSetup.get().get(theCaloTopology); - caloTopology_ = &(*theCaloTopology); -} - -// ------------ method called to produce the data ------------ -void HighPtTrackEcalDetIdProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - using reco::TrackCollection; - // if(!iSetup) continue; - Handle tkTracks; - iEvent.getByToken(inputCollectionToken_, tkTracks); - std::unique_ptr interestingDetIdCollection(new DetIdCollection()); - for (TrackCollection::const_iterator itTrack = tkTracks->begin(); itTrack != tkTracks->end(); ++itTrack) { - if (itTrack->pt() > ptcut_) { - TrackDetMatchInfo info = - trackAssociator_.associate(iEvent, iSetup, *itTrack, parameters_, TrackDetectorAssociator::InsideOut); - if (info.crossedEcalIds.empty()) - break; - - if (!info.crossedEcalIds.empty()) { - DetId centerId = info.crossedEcalIds.front(); - - const CaloSubdetectorTopology* topology = - caloTopology_->getSubdetectorTopology(DetId::Ecal, centerId.subdetId()); - const std::vector& ids = topology->getWindow(centerId, 5, 5); - for (std::vector::const_iterator id = ids.begin(); id != ids.end(); ++id) - if (std::find(interestingDetIdCollection->begin(), interestingDetIdCollection->end(), *id) == - interestingDetIdCollection->end()) - interestingDetIdCollection->push_back(*id); - } - } - } - iEvent.put(std::move(interestingDetIdCollection)); -} -//define this as a plug-in -DEFINE_FWK_MODULE(HighPtTrackEcalDetIdProducer); diff --git a/SUSYBSMAnalysis/HSCP/plugins/Skim_MonoPhotonSkimmer.cc b/SUSYBSMAnalysis/HSCP/plugins/Skim_MonoPhotonSkimmer.cc deleted file mode 100644 index 63fcaf5b34e2e..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/Skim_MonoPhotonSkimmer.cc +++ /dev/null @@ -1,190 +0,0 @@ -// -*- C++ -*- -// -// Package: MonoPhotonSkimmer -// Class: MonoPhotonSkimmer -// -/**\class MonoPhotonSkimmer MonoPhotonSkimmer.cc MonoPhotonSkimmer/MonoPhotonSkimmer/src/MonoPhotonSkimmer.cc - - Description: [one line class summary] - - Implementation: - [Notes on implementation] -*/ -// -// Original Author: Jie Chen -// Created: Wed Nov 17 14:33:08 CST 2010 -// -// - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" -#include "DataFormats/Common/interface/View.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include - -// -// class declaration -// - -class MonoPhotonSkimmer : public edm::EDFilter { -public: - explicit MonoPhotonSkimmer(const edm::ParameterSet&); - ~MonoPhotonSkimmer() override; - -private: - void beginJob() override; - bool filter(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - // ----------member data --------------------------- - edm::EDGetTokenT _phoToken; - bool _selectEE; //Do you want to select EE photons? - //True enables this. - - double _ecalisoOffsetEB; //Photon Preselection has linearized cuts. - double _ecalisoSlopeEB; //slope * photonpt + offset is the isolation - //threshold. This is ECAL EB. - - double _hcalisoOffsetEB; //Linearized cut on HCAL towers, EB. - double _hcalisoSlopeEB; - - double _hadoveremEB; //Flat selection cut on HadOverEM. - - double _minPhoEtEB; //Minimum Photon ET threshold, EB. - - double _trackisoOffsetEB; //Linearized cut on track isolation EB - double _trackisoSlopeEB; - - double _etawidthEB; //eta width for EB - - double _ecalisoOffsetEE; //As above, but separately set for EE. - double _ecalisoSlopeEE; - double _hcalisoOffsetEE; - double _hcalisoSlopeEE; - double _hadoveremEE; - double _minPhoEtEE; - double _trackisoOffsetEE; - double _trackisoSlopeEE; - double _etawidthEE; -}; - -// -// constants, enums and typedefs -// - -// -// static data member definitions -// - -// -// constructors and destructor -// -MonoPhotonSkimmer::MonoPhotonSkimmer(const edm::ParameterSet& iConfig) { - //now do what ever initialization is needed - _phoToken = consumes(iConfig.getParameter("phoTag")); - _selectEE = iConfig.getParameter("selectEE"); - - _ecalisoOffsetEB = iConfig.getParameter("ecalisoOffsetEB"); - _ecalisoSlopeEB = iConfig.getParameter("ecalisoSlopeEB"); - - _hcalisoOffsetEB = iConfig.getParameter("hcalisoOffsetEB"); - _hcalisoSlopeEB = iConfig.getParameter("hcalisoSlopeEB"); - - _hadoveremEB = iConfig.getParameter("hadoveremEB"); - _minPhoEtEB = iConfig.getParameter("minPhoEtEB"); - - _trackisoOffsetEB = iConfig.getParameter("trackIsoOffsetEB"); - _trackisoSlopeEB = iConfig.getParameter("trackIsoSlopeEB"); - _etawidthEB = iConfig.getParameter("etaWidthEB"); - - _ecalisoOffsetEE = iConfig.getParameter("ecalisoOffsetEE"); - _ecalisoSlopeEE = iConfig.getParameter("ecalisoSlopeEE"); - - _hcalisoOffsetEE = iConfig.getParameter("hcalisoOffsetEE"); - _hcalisoSlopeEE = iConfig.getParameter("hcalisoSlopeEE"); - - _hadoveremEE = iConfig.getParameter("hadoveremEE"); - _minPhoEtEE = iConfig.getParameter("minPhoEtEE"); - - _trackisoOffsetEE = iConfig.getParameter("trackIsoOffsetEE"); - _trackisoSlopeEE = iConfig.getParameter("trackIsoSlopeEE"); - - _etawidthEE = iConfig.getParameter("etaWidthEE"); -} - -MonoPhotonSkimmer::~MonoPhotonSkimmer() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - -// -// member functions -// - -// ------------ method called on each new Event ------------ -bool MonoPhotonSkimmer::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - Handle photonColl; - iEvent.getByToken(_phoToken, photonColl); - const reco::PhotonCollection* photons = photonColl.product(); - //Iterate over photon collection. - // std::vector PreselPhotons; - int PreselPhotons = 0; - reco::PhotonCollection::const_iterator pho; - for (pho = (*photons).begin(); pho != (*photons).end(); pho++) { - if (!pho->isEB() && !_selectEE) - continue; - - double ecalisocut = 0; - double hcalisocut = 0; - double hadoverem = 0; - double minphoet = 0; - double trackiso = 0; - double etawidth = 0; - if (pho->isEB()) { - ecalisocut = _ecalisoOffsetEB + _ecalisoSlopeEB * pho->pt(); - hcalisocut = _hcalisoOffsetEB + _hcalisoSlopeEB * pho->pt(); - hadoverem = _hadoveremEB; - minphoet = _minPhoEtEB; - trackiso = _trackisoOffsetEB + _trackisoSlopeEB * pho->pt(); - etawidth = _etawidthEB; - } else { - ecalisocut = _ecalisoOffsetEE + _ecalisoSlopeEE * pho->pt(); - hcalisocut = _hcalisoOffsetEE + _hcalisoSlopeEE * pho->pt(); - hadoverem = _hadoveremEE; - minphoet = _minPhoEtEE; - trackiso = _trackisoOffsetEE + _trackisoSlopeEE * pho->pt(); - etawidth = _etawidthEE; - } - - if (pho->ecalRecHitSumEtConeDR04() < ecalisocut && pho->hcalTowerSumEtConeDR04() < hcalisocut && - pho->hadronicOverEm() < hadoverem && pho->pt() > minphoet && pho->trkSumPtHollowConeDR04() < trackiso && - pho->sigmaIetaIeta() < etawidth) - PreselPhotons++; - - } //Loop over Photons - if (PreselPhotons > 0) - return true; - return false; -} - -// ------------ method called once each job just before starting event loop ------------ -void MonoPhotonSkimmer::beginJob() {} - -// ------------ method called once each job just after ending the event loop ------------ -void MonoPhotonSkimmer::endJob() {} - -//define this as a plug-in -DEFINE_FWK_MODULE(MonoPhotonSkimmer); diff --git a/SUSYBSMAnalysis/HSCP/plugins/Skim_ProduceIsolationMap.cc b/SUSYBSMAnalysis/HSCP/plugins/Skim_ProduceIsolationMap.cc deleted file mode 100644 index 633456eb59222..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/Skim_ProduceIsolationMap.cc +++ /dev/null @@ -1,175 +0,0 @@ -// -*- C++ -*- -// -// Package: ProduceIsolationMap -// Class: ProduceIsolationMap -// -/*\class ProduceIsolationMap ProduceIsolationMap.cc - - Description: [one line class summary] - - Implementation: - [Notes on implementation] -*/ -// -// Original Author: Loic Quertenmont -// Created: Wed Nov 10 16:41:46 CDT 2010 -// -// - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/TrackReco/interface/TrackExtra.h" - -#include "DataFormats/EcalRecHit/interface/EcalRecHit.h" -#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" -#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" -#include "DataFormats/HcalDetId/interface/HcalSubdetector.h" -#include "DataFormats/HcalDetId/interface/HcalDetId.h" -#include "TrackingTools/TrackAssociator/interface/TrackDetectorAssociator.h" -#include "TrackingTools/TrackAssociator/interface/TrackAssociatorParameters.h" -#include "TrackingTools/TrackAssociator/interface/TrackDetMatchInfo.h" - -#include "DataFormats/EcalDetId/interface/EBDetId.h" -#include "DataFormats/EcalDetId/interface/EEDetId.h" -#include "DataFormats/DetId/interface/DetIdCollection.h" - -#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" -#include "Geometry/CaloTopology/interface/CaloTopology.h" -#include "Geometry/CaloTopology/interface/CaloSubdetectorTopology.h" - -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCPIsolation.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/Math/interface/deltaR.h" -#include - -// -// class declaration -// - -using namespace susybsm; -using namespace edm; - -class ProduceIsolationMap : public edm::stream::EDProducer<> { -public: - explicit ProduceIsolationMap(const edm::ParameterSet&); - ~ProduceIsolationMap() override; - void produce(edm::Event&, const edm::EventSetup&) override; - -private: - edm::EDGetTokenT TKToken_; - edm::EDGetTokenT inputCollectionToken_; - double TKIsolationPtcut_; - double IsolationConeDR_; - TrackDetectorAssociator trackAssociator_; - TrackAssociatorParameters parameters_; - // ----------member data --------------------------- -}; - -// -// constants, enums and typedefs -// - -// -// static data member definitions -// - -// -// constructors and destructor -// -ProduceIsolationMap::ProduceIsolationMap(const edm::ParameterSet& iConfig) { - TKToken_ = consumes(iConfig.getParameter("TKLabel")); - inputCollectionToken_ = consumes(iConfig.getParameter("inputCollection")); - TKIsolationPtcut_ = iConfig.getParameter("TkIsolationPtCut"); - IsolationConeDR_ = iConfig.getParameter("IsolationConeDR"); - - // TrackAssociator parameters - edm::ParameterSet parameters = iConfig.getParameter("TrackAssociatorParameters"); - edm::ConsumesCollector iC = consumesCollector(); - parameters_.loadParameters(parameters, iC); - trackAssociator_.useDefaultPropagator(); - - //register your products - produces >(); -} - -ProduceIsolationMap::~ProduceIsolationMap() {} - -void ProduceIsolationMap::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - using namespace std; - - using reco::TrackCollection; - - Handle TKHandle; - iEvent.getByToken(TKToken_, TKHandle); - if (!TKHandle.isValid()) { - edm::LogError("ProduceIsolationMap") << "TK Tracks collection not found"; - return; - } - - //Create empty output collections - unique_ptr > trackHSCPIsolMap(new ValueMap); - ValueMap::Filler filler(*trackHSCPIsolMap); - - //loop through tracks. - Handle tkTracks; - iEvent.getByToken(inputCollectionToken_, tkTracks); - std::vector IsolationInfoColl(tkTracks->size()); - - int TkIndex = 0; - for (TrackCollection::const_iterator itTrack = tkTracks->begin(); itTrack != tkTracks->end(); ++itTrack, TkIndex++) { - TrackDetMatchInfo info = - trackAssociator_.associate(iEvent, iSetup, *itTrack, parameters_, TrackDetectorAssociator::InsideOut); - - if (!info.ecalRecHits.empty()) { - IsolationInfoColl[TkIndex].Set_ECAL_Energy(info.coneEnergy(IsolationConeDR_, TrackDetMatchInfo::EcalRecHits)); - } - if (!info.hcalRecHits.empty()) { - IsolationInfoColl[TkIndex].Set_HCAL_Energy(info.coneEnergy(IsolationConeDR_, TrackDetMatchInfo::HcalRecHits)); - } - // if(info.hcalRecHits.size()>0){IsolationInfoColl[TkIndex].Set_HCAL_Energy(info.hcalConeEnergy());} - // if(info.ecalRecHits.size()>0){IsolationInfoColl[TkIndex].Set_ECAL_Energy(info.ecalConeEnergy());} - - double SumPt = 0; - double Count = 0; - double CountHighPt = 0; - for (TrackCollection::const_iterator itTrack2 = TKHandle->begin(); itTrack2 != TKHandle->end(); ++itTrack2) { - if (fabs(itTrack->pt() - itTrack2->pt()) < 0.1 && fabs(itTrack->eta() - itTrack2->eta()) < 0.05) - continue; - float dR = deltaR(itTrack->momentum(), itTrack2->momentum()); - if (dR > IsolationConeDR_) - continue; - SumPt += itTrack2->pt(); - Count++; - if (itTrack2->pt() < TKIsolationPtcut_) - continue; - CountHighPt++; - } - IsolationInfoColl[TkIndex].Set_TK_CountHighPt(CountHighPt); - IsolationInfoColl[TkIndex].Set_TK_Count(Count); - IsolationInfoColl[TkIndex].Set_TK_SumEt(SumPt); - } - - filler.insert(tkTracks, IsolationInfoColl.begin(), IsolationInfoColl.end()); - filler.fill(); - iEvent.put(std::move(trackHSCPIsolMap)); -} -//define this as a plug-in -DEFINE_FWK_MODULE(ProduceIsolationMap); diff --git a/SUSYBSMAnalysis/HSCP/plugins/Skim_ReduceHcalRecHitCollectionProducer.cc b/SUSYBSMAnalysis/HSCP/plugins/Skim_ReduceHcalRecHitCollectionProducer.cc deleted file mode 100644 index 7a33d0b82e746..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/Skim_ReduceHcalRecHitCollectionProducer.cc +++ /dev/null @@ -1,162 +0,0 @@ -// -*- C++ -*- -// -// Package: ReduceHcalRecHitCollectionProducer -// Class: ReduceHcalRecHitCollectionProducer -// -/*\class ReduceHcalRecHitCollectionProducer ReduceHcalRecHitCollectionProducer.cc - - Description: [one line class summary] - - Implementation: - [Notes on implementation] -*/ -// -// Original Author: Jie Chen -// Created: Mon Apr 12 16:41:46 CDT 2010 -// -// - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/TrackReco/interface/TrackExtra.h" - -#include "DataFormats/EcalRecHit/interface/EcalRecHit.h" -#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" -#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" -#include "DataFormats/HcalDetId/interface/HcalSubdetector.h" -#include "DataFormats/HcalDetId/interface/HcalDetId.h" -#include "TrackingTools/TrackAssociator/interface/TrackDetectorAssociator.h" -#include "TrackingTools/TrackAssociator/interface/TrackAssociatorParameters.h" -#include "TrackingTools/TrackAssociator/interface/TrackDetMatchInfo.h" - -#include "DataFormats/EcalDetId/interface/EBDetId.h" -#include "DataFormats/EcalDetId/interface/EEDetId.h" -#include "DataFormats/DetId/interface/DetIdCollection.h" - -#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h" -#include "Geometry/CaloTopology/interface/CaloTopology.h" -#include "Geometry/CaloTopology/interface/CaloSubdetectorTopology.h" - -#include - -// -// class declaration -// - -class ReduceHcalRecHitCollectionProducer : public edm::stream::EDProducer<> { -public: - explicit ReduceHcalRecHitCollectionProducer(const edm::ParameterSet&); - ~ReduceHcalRecHitCollectionProducer() override; - void produce(edm::Event&, const edm::EventSetup&) override; - -private: - edm::EDGetTokenT recHitsToken_; - std::string reducedHitsCollection_; - edm::EDGetTokenT inputCollectionToken_; - TrackDetectorAssociator trackAssociator_; - TrackAssociatorParameters parameters_; - double ptcut_; - // ----------member data --------------------------- -}; - -// -// constants, enums and typedefs -// - -// -// static data member definitions -// - -// -// constructors and destructor -// -ReduceHcalRecHitCollectionProducer::ReduceHcalRecHitCollectionProducer(const edm::ParameterSet& iConfig) { - recHitsToken_ = consumes(iConfig.getParameter("recHitsLabel")); - - reducedHitsCollection_ = iConfig.getParameter("reducedHitsCollection"); - - //register your products - produces(reducedHitsCollection_); - - inputCollectionToken_ = consumes(iConfig.getParameter("inputCollection")); - ptcut_ = iConfig.getParameter("TrackPt"); - - produces(); - // TrackAssociator parameters - edm::ParameterSet parameters = iConfig.getParameter("TrackAssociatorParameters"); - edm::ConsumesCollector iC = consumesCollector(); - parameters_.loadParameters(parameters, iC); - trackAssociator_.useDefaultPropagator(); -} - -ReduceHcalRecHitCollectionProducer::~ReduceHcalRecHitCollectionProducer() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - -// -// member functions -// - -// ------------ method called to produce the data ------------ -void ReduceHcalRecHitCollectionProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - - using namespace std; - - using reco::TrackCollection; - - Handle recHitsHandle; - iEvent.getByToken(recHitsToken_, recHitsHandle); - if (!recHitsHandle.isValid()) { - edm::LogError("ReduceHcalRecHitCollectionProducer") << "RecHit collection not found"; - return; - } - - //Create empty output collections - std::unique_ptr miniRecHitCollection(new HBHERecHitCollection); - - //loop through tracks. - Handle tkTracks; - iEvent.getByToken(inputCollectionToken_, tkTracks); - std::unique_ptr interestingDetIdCollection(new DetIdCollection()); - for (TrackCollection::const_iterator itTrack = tkTracks->begin(); itTrack != tkTracks->end(); ++itTrack) { - if (itTrack->pt() > ptcut_) { - TrackDetMatchInfo info = - trackAssociator_.associate(iEvent, iSetup, *itTrack, parameters_, TrackDetectorAssociator::InsideOut); - - if (!info.crossedHcalIds.empty()) { - //loop through hits in the cone - for (std::vector::const_iterator hit = info.hcalRecHits.begin(); - hit != info.hcalRecHits.end(); - ++hit) { - DetId hitid = (*hit)->id(); - HBHERecHitCollection::const_iterator iRecHit = recHitsHandle->find(hitid); - if ((iRecHit != recHitsHandle->end()) && (miniRecHitCollection->find(hitid) == miniRecHitCollection->end())) - miniRecHitCollection->push_back(*iRecHit); - } - } - } - } - - iEvent.put(std::move(miniRecHitCollection), reducedHitsCollection_); -} -//define this as a plug-in -DEFINE_FWK_MODULE(ReduceHcalRecHitCollectionProducer); diff --git a/SUSYBSMAnalysis/HSCP/plugins/Skim_UpdatedMuonInnerTrackRef.cc b/SUSYBSMAnalysis/HSCP/plugins/Skim_UpdatedMuonInnerTrackRef.cc deleted file mode 100644 index 27b9f786d7fb6..0000000000000 --- a/SUSYBSMAnalysis/HSCP/plugins/Skim_UpdatedMuonInnerTrackRef.cc +++ /dev/null @@ -1,126 +0,0 @@ -#include -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/global/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Common/interface/View.h" -#include "DataFormats/MuonReco/interface/Muon.h" -#include "DataFormats/MuonReco/interface/MuonFwd.h" -#include "DataFormats/TrackReco/interface/Track.h" - -#include "CommonTools/UtilAlgos/interface/DeltaR.h" - -// -// class declaration -// -class UpdatedMuonInnerTrackRef : public edm::global::EDProducer<> { -public: - explicit UpdatedMuonInnerTrackRef(const edm::ParameterSet&); - -private: - void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; - - reco::TrackRef findNewRef(reco::TrackRef const& oldTrackRef, - edm::Handle const& newTrackCollection) const; - - edm::EDGetTokenT > muonToken_; - edm::EDGetTokenT oldTrackToken_; - edm::EDGetTokenT newTrackToken_; - - double maxInvPtDiff; - double minDR; -}; - -///////////////////////////////////////////////////////////////////////////////////// -UpdatedMuonInnerTrackRef::UpdatedMuonInnerTrackRef(const edm::ParameterSet& pset) { - // What is being produced - produces >(); - - // Input products - muonToken_ = - consumes >(pset.getUntrackedParameter("MuonTag", edm::InputTag("muons"))); - oldTrackToken_ = consumes( - pset.getUntrackedParameter("OldTrackTag", edm::InputTag("generalTracks"))); - newTrackToken_ = consumes( - pset.getUntrackedParameter("NewTrackTag", edm::InputTag("generalTracksSkim"))); - - // matching criteria products - maxInvPtDiff = pset.getUntrackedParameter("maxInvPtDiff", 0.005); - minDR = pset.getUntrackedParameter("minDR", 0.1); -} - -///////////////////////////////////////////////////////////////////////////////////// -void UpdatedMuonInnerTrackRef::produce(edm::StreamID, edm::Event& ev, const edm::EventSetup& iSetup) const { - // Muon collection - edm::Handle > muonCollectionHandle; - if (!ev.getByToken(muonToken_, muonCollectionHandle)) { - edm::LogError("") << ">>> Muon collection does not exist !!!"; - return; - } - - edm::Handle oldTrackCollection; - if (!ev.getByToken(oldTrackToken_, oldTrackCollection)) { - edm::LogError("") << ">>> Old Track collection does not exist !!!"; - return; - } - - edm::Handle newTrackCollection; - if (!ev.getByToken(newTrackToken_, newTrackCollection)) { - edm::LogError("") << ">>> New Track collection does not exist !!!"; - return; - } - - unsigned int muonCollectionSize = muonCollectionHandle->size(); - std::unique_ptr newmuons(new reco::MuonCollection); - - for (unsigned int i = 0; i < muonCollectionSize; i++) { - edm::RefToBase mu = muonCollectionHandle->refAt(i); - std::unique_ptr newmu{mu->clone()}; - - if (mu->innerTrack().isNonnull()) { - reco::TrackRef newTrackRef = findNewRef(mu->innerTrack(), newTrackCollection); - /* printf(" %6.2f %+6.2f %+6.2f --> ",mu->innerTrack()->pt (), mu->innerTrack()->eta(), mu->innerTrack()->phi()); - if(newTrackRef.isNonnull()){ - printf(" %6.2f %+6.2f %+6.2f\n",newTrackRef->pt (), newTrackRef->eta(), newTrackRef->phi()); - }else{ - printf("\n"); - } -*/ - newmu->setInnerTrack(newTrackRef); - } - - newmuons->push_back(*newmu); - } - - ev.put(std::move(newmuons)); -} - -reco::TrackRef UpdatedMuonInnerTrackRef::findNewRef( - reco::TrackRef const& oldTrackRef, edm::Handle const& newTrackCollection) const { - float dRMin = 1000; - int found = -1; - for (unsigned int i = 0; i < newTrackCollection->size(); i++) { - reco::TrackRef newTrackRef = reco::TrackRef(newTrackCollection, i); - if (newTrackRef.isNull()) - continue; - - if (fabs((1.0 / newTrackRef->pt()) - (1.0 / oldTrackRef->pt())) > maxInvPtDiff) - continue; - float dR = deltaR(newTrackRef->momentum(), oldTrackRef->momentum()); - if (dR <= minDR && dR < dRMin) { - dRMin = dR; - found = i; - } - } - - if (found >= 0) { - return reco::TrackRef(newTrackCollection, found); - } else { - return reco::TrackRef(); - } -} - -DEFINE_FWK_MODULE(UpdatedMuonInnerTrackRef); diff --git a/SUSYBSMAnalysis/HSCP/python/HSCPSelections_cff.py b/SUSYBSMAnalysis/HSCP/python/HSCPSelections_cff.py deleted file mode 100644 index 9672c3f0f17eb..0000000000000 --- a/SUSYBSMAnalysis/HSCP/python/HSCPSelections_cff.py +++ /dev/null @@ -1,59 +0,0 @@ - -import FWCore.ParameterSet.Config as cms - -HSCPSelectionEmpty = cms.PSet( - cms.PSet( - onlyConsiderTrack = cms.bool(False), - onlyConsiderMuon = cms.bool(False), - onlyConsiderMuonSTA = cms.bool(False), - onlyConsiderMuonGB = cms.bool(False), - onlyConsiderMuonTK = cms.bool(False), - onlyConsiderMTMuon = cms.bool(False), - onlyConsiderRpc = cms.bool(False), - onlyConsiderEcal = cms.bool(False), - - minTrackHits = cms.int32 (-1), - minTrackP = cms.double(-1), - minTrackPt = cms.double(-1), - - minDedx = cms.double(-1), - - minMuonP = cms.double(-1), - minMuonPt = cms.double(-1), - minMTMuonPt = cms.double(-1), - minSAMuonPt = cms.double(-1), - - maxMuTimeDtBeta = cms.double(-1), - minMuTimeDtNdof = cms.double(-1), - maxMuTimeCscBeta = cms.double(-1), - minMuTimeCscNdof = cms.double(-1), - maxMuTimeCombinedBeta = cms.double(-1), - minMuTimeCombinedNdof = cms.double(-1), - - maxBetaRpc = cms.double(-1), - maxBetaEcal = cms.double(-1), - ), -) - - -HSCPSelectionDefault = HSCPSelectionEmpty.clone() -HSCPSelectionDefault.minTrackHits = cms.int32(3) -HSCPSelectionDefault.minTrackPt = cms.double(45.0) -HSCPSelectionDefault.minMuonPt = cms.double(5.0) - -HSCPSelectionHighdEdx = HSCPSelectionDefault.clone() -HSCPSelectionHighdEdx.onlyConsiderTrack = cms.bool(True) -HSCPSelectionHighdEdx.minDedxEstimator1 = cms.double(3.5) - -HSCPSelectionHighTOF = HSCPSelectionDefault.clone() -HSCPSelectionHighTOF.onlyConsiderMuon = cms.bool(True) -HSCPSelectionHighTOF.maxMuTimeDtBeta = cms.double(0.9) - -HSCPSelectionMTMuonOnly = HSCPSelectionEmpty.clone() -HSCPSelectionMTMuonOnly.onlyConsiderMTMuon = cms.bool(True) -HSCPSelectionMTMuonOnly.minMTMuonPt = cms.double(70.0) - - -HSCPSelectionSAMuonOnly = HSCPSelectionEmpty.clone() -HSCPSelectionSAMuonOnly.onlyConsiderMuonSTA = cms.bool(True) -HSCPSelectionSAMuonOnly.minSAMuonPt = cms.double(70.0) \ No newline at end of file diff --git a/SUSYBSMAnalysis/HSCP/python/HSCPVersion_cff.py b/SUSYBSMAnalysis/HSCP/python/HSCPVersion_cff.py deleted file mode 100644 index 4d1747cc0298b..0000000000000 --- a/SUSYBSMAnalysis/HSCP/python/HSCPVersion_cff.py +++ /dev/null @@ -1,3 +0,0 @@ -#Set whether running in CMSSW4_2 or CMSSW5 -CMSSW4_2=False -CMSSW4_4=False diff --git a/SUSYBSMAnalysis/HSCP/python/HSCParticleProducerFromSkim_cff.py b/SUSYBSMAnalysis/HSCP/python/HSCParticleProducerFromSkim_cff.py deleted file mode 100644 index 2d142f86ffe1b..0000000000000 --- a/SUSYBSMAnalysis/HSCP/python/HSCParticleProducerFromSkim_cff.py +++ /dev/null @@ -1,17 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from SUSYBSMAnalysis.HSCP.HSCParticleProducer_cff import * - -TrackRefitter.src = "generalTracksSkim" -muontiming.MuonCollection = cms.InputTag("muonsSkim") -HSCParticleProducer.tracksIsolation = cms.InputTag("generalTracksSkim") -HSCParticleProducer.muons = cms.InputTag("muonsSkim") -HSCParticleProducer.MTmuons = cms.InputTag("muonsSkim") -HSCParticleProducer.EBRecHitCollection = cms.InputTag("reducedHSCPEcalRecHitsEB") -HSCParticleProducer.EERecHitCollection = cms.InputTag("reducedHSCPEcalRecHitsEE") - -HSCParticleProducer.TrackAssociatorParameters.EBRecHitCollectionLabel = 'reducedHSCPEcalRecHitsEB' -HSCParticleProducer.TrackAssociatorParameters.EERecHitCollectionLabel = 'reducedHSCPEcalRecHitsEE' -HSCParticleProducer.TrackAssociatorParameters.HBHERecHitCollectionLabel = 'reducedHSCPhbhereco' -HSCParticleProducer.TrackAssociatorParameters.HBHERecHitCollectionLabel = 'reducedHSCPhbhereco' -HSCParticleProducer.TrackAssociatorParameters.useHO = False diff --git a/SUSYBSMAnalysis/HSCP/python/HSCParticleProducer_cff.py b/SUSYBSMAnalysis/HSCP/python/HSCParticleProducer_cff.py deleted file mode 100644 index a2e7f899ae2fc..0000000000000 --- a/SUSYBSMAnalysis/HSCP/python/HSCParticleProducer_cff.py +++ /dev/null @@ -1,116 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -#################################################################################### -# BEAMSPOT + TRAJECTORY BUILDERS -#################################################################################### - -from RecoTracker.MeasurementDet.MeasurementTrackerEventProducer_cfi import * -from RecoVertex.BeamSpotProducer.BeamSpot_cff import * -from RecoTracker.TrackProducer.TrackRefitters_cff import * - -#################################################################################### -# HIT-DEDX Information -#################################################################################### - -dedxHitInfo = cms.EDProducer("HSCPDeDxInfoProducer", - tracks = cms.InputTag("TrackRefitter"), - trajectoryTrackAssociation = cms.InputTag("TrackRefitter"), - - Reccord = cms.untracked.string("SiStripDeDxMip_3D_Rcd"), - Formula = cms.untracked.uint32(0), - ProbabilityMode = cms.untracked.string("Accumulation"), - - UseStrip = cms.bool(True), - UsePixel = cms.bool(True), - MeVperADCStrip = cms.double(3.61e-06*265), - MeVperADCPixel = cms.double(3.61e-06), - - UseCalibration = cms.bool(False), - calibrationPath = cms.string("file:Gains.root"), - ShapeTest = cms.bool(True), -) - - -#################################################################################### -# MUON TIMING -#################################################################################### - -from RecoMuon.MuonIdentification.muonTiming_cfi import * -muontiming.MuonCollection = cms.InputTag("muons") -muontiming.TimingFillerParameters.UseECAL=False - -#################################################################################### -# HSCParticle Producer -#################################################################################### - -#ALL THIS IS NEEDED BY ECAL BETA CALCULATOR (TrackAssociator) -from TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff import * -from TrackingTools.TrackAssociator.default_cfi import * -from TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi import * -from TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi import * -from TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi import * - -from SUSYBSMAnalysis.HSCP.HSCPSelections_cff import * -HSCParticleProducer = cms.EDFilter("HSCParticleProducer", - TrackAssociatorParameterBlock, #Needed for ECAL/Track Matching - - #DOES THE PRODUCER ACT AS AN EDFILTER? - filter = cms.bool(True), - - #WHAT (BETA) INFORMATION TO COMPUTE - useBetaFromTk = cms.bool(True), - useBetaFromMuon = cms.bool(True), - useBetaFromRpc = cms.bool(True), - useBetaFromEcal = cms.bool(True), - - #TAG OF THE REQUIRED INPUT COLLECTION (ONLY ACTIVATED CALCULATOR) - tracks = cms.InputTag("TrackRefitter"), - tracksIsolation = cms.InputTag("generalTracks"), - muons = cms.InputTag("muons"), - MTmuons = cms.InputTag("muons"), - EBRecHitCollection = cms.InputTag("ecalRecHit:EcalRecHitsEB"), - EERecHitCollection = cms.InputTag("ecalRecHit:EcalRecHitsEE"), - rpcRecHits = cms.InputTag("rpcRecHits"), - - #TRACK SELECTION FOR THE HSCP SEED - minMuP = cms.double(25), - minTkP = cms.double(25), - maxTkChi2 = cms.double(25), - minTkHits = cms.uint32(3), - minSAMuPt = cms.double(70), - minMTMuPt = cms.double(70), - - #MUON/TRACK MATCHING THRESHOLDS (ONLY IF NO MUON INNER TRACK) - minDR = cms.double(0.1), - maxInvPtDiff = cms.double(0.005), - minMTDR = cms.double(0.3), - - #SELECTION ON THE PRODUCED HSCP CANDIDATES (WILL STORE ONLY INTERESTING CANDIDATES) - SelectionParameters = cms.VPSet( - HSCPSelectionDefault, - HSCPSelectionMTMuonOnly, - HSCPSelectionSAMuonOnly, - ), -) - -#################################################################################### -# HSCParticle Selector (Just an Example of what we can do) -#################################################################################### - -HSCParticleSelector = cms.EDFilter("HSCParticleSelector", - source = cms.InputTag("HSCParticleProducer"), - filter = cms.bool(True), - - SelectionParameters = cms.VPSet( - HSCPSelectionHighdEdx, #THE OR OF THE TWO SELECTION WILL BE APPLIED - HSCPSelectionHighTOF, - ), -) - -#################################################################################### -# HSCP Candidate Sequence -#################################################################################### - -HSCParticleProducerSeq = cms.Sequence(offlineBeamSpot + MeasurementTrackerEvent + TrackRefitter + dedxHitInfo + muontiming + HSCParticleProducer) - - diff --git a/SUSYBSMAnalysis/HSCP/python/LaunchOnCondor.py b/SUSYBSMAnalysis/HSCP/python/LaunchOnCondor.py deleted file mode 100644 index c14b514f3e45c..0000000000000 --- a/SUSYBSMAnalysis/HSCP/python/LaunchOnCondor.py +++ /dev/null @@ -1,379 +0,0 @@ -#!/usr/bin/env python - -from __future__ import print_function -import urllib -import string -import os -import sys -import glob -import fnmatch -import commands - -CopyRights = '####################################\n' -CopyRights += '# LaunchOnFarm Script #\n' -CopyRights += '# Loic.quertenmont@cern.ch #\n' -CopyRights += '# April 2010 #\n' -CopyRights += '####################################\n' - -Farm_Directories = [] -Path_Cmd = '' -Path_Shell = '' -Path_Log = '' -Path_Cfg = '' -Jobs_Count = 0 -Jobs_Name = '' -Jobs_Index = '' -Jobs_Seed = 0 -Jobs_NEvent =-1 -Jobs_Skip = 0 -Jobs_Queue = '8nh' -Jobs_Inputs = [] -Jobs_FinalCmds = [] -Jobs_RunHere = 0 - -useLSF = True -LSFlog = True -runInteractively = False - -def CreateTheConfigFile(argv): - global Jobs_Name - global Jobs_Index - global Jobs_Count - global Jobs_Seed - global Jobs_Skip - global Jobs_NEvent - global Jobs_Inputs - global Jobs_FinalCmds - global Path_Cfg - global CopyRights - Path_Cfg = Farm_Directories[1]+Jobs_Index+Jobs_Name+'_cfg.py' - - config_file=open(argv[1],'r') - config_txt = '\n\n' + CopyRights + '\n\n' - config_txt += config_file.read() - config_file.close() - i = 2 - while i < len(argv)-1: - config_txt = config_txt.replace(argv[i],argv[i+1]) - i+=2 - - #Default Replacements - config_txt = config_txt.replace("XXX_I_XXX" ,"%04i"%Jobs_Count) - config_txt = config_txt.replace("XXX_PATH_XXX" ,os.getcwd()) - config_txt = config_txt.replace("XXX_OUTPUT_XXX" ,Jobs_Name) - config_txt = config_txt.replace("XXX_NAME_XXX" ,Jobs_Index+Jobs_Name) - config_txt = config_txt.replace("XXX_SEED_XXX" ,str(Jobs_Seed+Jobs_Count)) - config_txt = config_txt.replace("XXX_NEVENTS_XXX" ,str(Jobs_NEvent)) - config_txt = config_txt.replace("XXX_SKIP_XXX" ,str(Jobs_Skip)) - if Jobs_Count < len(Jobs_Inputs): - config_txt = config_txt.replace("XXX_INPUT_XXX" ,Jobs_Inputs[Jobs_Count]) - - config_file=open(Path_Cfg,'w') - config_file.write(config_txt) - config_file.close() - -def CreateTheShellFile(argv): - global Path_Shell - global Path_Cfg - global CopyRights - global Jobs_RunHere - global Jobs_FinalCmds - Path_Shell = Farm_Directories[1]+Jobs_Index+Jobs_Name+'.sh' - - function_argument='(' - for i in range(2,len(argv)): - function_argument+="%s" % argv[i] - if i != len(argv)-1: - function_argument+=', ' - function_argument+=')' - - shell_file=open(Path_Shell,'w') - shell_file.write('#! /bin/sh\n') - shell_file.write(CopyRights + '\n') - shell_file.write('export SCRAM_ARCH='+os.getenv("SCRAM_ARCH","slc5_amd64_gcc462")+'\n') - shell_file.write('export BUILD_ARCH='+os.getenv("BUILD_ARCH","slc5_amd64_gcc462")+'\n') - shell_file.write('export VO_CMS_SW_DIR='+os.getenv("VO_CMS_SW_DIR","/nfs/soft/cms")+'\n') - #shell_file.write('source /nfs/soft/cms/cmsset_default.sh\n') - shell_file.write('cd ' + os.getcwd() + '\n') - shell_file.write('eval `scramv1 runtime -sh`\n') - - if argv[0]=='BASH': - if Jobs_RunHere==0: - shell_file.write('cd -\n') - shell_file.write(argv[1] + " %s\n" % function_argument) - elif argv[0]=='ROOT': - if Jobs_RunHere==0: - shell_file.write('cd -\n') - shell_file.write('root -l -b << EOF\n') - shell_file.write(' TString makeshared(gSystem->GetMakeSharedLib());\n') - shell_file.write(' TString dummy = makeshared.ReplaceAll("-W ", "-Wno-deprecated-declarations -Wno-deprecated -Wno-unused-local-typedefs ");\n') - shell_file.write(' TString dummy = makeshared.ReplaceAll("-Wshadow ", " -std=c++0x -D__USE_XOPEN2K8 ");\n') - shell_file.write(' cout << "Compilling with the following arguments: " << makeshared << endl;\n') - shell_file.write(' gSystem->SetMakeSharedLib(makeshared);\n') - shell_file.write(' gSystem->SetIncludePath( "-I$ROOFITSYS/include" );\n') - shell_file.write(' .x %s+' % argv[1] + function_argument + '\n') - shell_file.write(' .q\n') - shell_file.write('EOF\n\n') - elif argv[0]=='FWLITE': - if Jobs_RunHere==0: - shell_file.write('cd -\n') - shell_file.write('root -l -b << EOF\n') - shell_file.write(' TString makeshared(gSystem->GetMakeSharedLib());\n') - shell_file.write(' TString dummy = makeshared.ReplaceAll("-W ", "-Wno-deprecated-declarations -Wno-deprecated ");\n') - shell_file.write(' TString dummy = makeshared.ReplaceAll("-Wshadow ", " -std=c++0x -D__USE_XOPEN2K8 ");\n') - shell_file.write(' cout << "Compilling with the following arguments: " << makeshared << endl;\n') - shell_file.write(' gSystem->SetMakeSharedLib(makeshared);\n') - shell_file.write(' gSystem->SetIncludePath("-I$ROOFITSYS/include");\n') - shell_file.write(' gSystem->Load("libFWCoreFWLite");\n') - shell_file.write(' FWLiteEnabler::enable();\n') - shell_file.write(' gSystem->Load("libDataFormatsFWLite.so");\n') - shell_file.write(' gSystem->Load("libAnalysisDataFormatsSUSYBSMObjects.so");\n') - shell_file.write(' gSystem->Load("libDataFormatsVertexReco.so");\n') - shell_file.write(' gSystem->Load("libDataFormatsHepMCCandidate.so");\n') - shell_file.write(' gSystem->Load("libPhysicsToolsUtilities.so");\n') - shell_file.write(' gSystem->Load("libdcap.so");\n') - shell_file.write(' .x %s+' % argv[1] + function_argument + '\n') - shell_file.write(' .q\n') - shell_file.write('EOF\n\n') - elif argv[0]=='CMSSW': - CreateTheConfigFile(argv); - if Jobs_RunHere==0: - shell_file.write('cd -\n') - shell_file.write('cmsRun ' + os.getcwd() + '/'+Path_Cfg + '\n') - else: - print() #Program to use is not specified... Guess it is bash command - shell_file.write('#Program to use is not specified... Guess it is bash command\n') - shell_file.write(argv[1] + " %s\n" % function_argument) - - for i in range(len(Jobs_FinalCmds)): - shell_file.write(Jobs_FinalCmds[i]+'\n') - shell_file.write('mv '+ Jobs_Name+'* '+os.getcwd()+'/'+Farm_Directories[3]+'\n') - shell_file.close() - os.system("chmod 777 "+Path_Shell) - - -def CreateTheCmdFile(): - global useLSF - global Path_Cmd - global CopyRights - Path_Cmd = Farm_Directories[1]+Jobs_Name+'.cmd' - cmd_file=open(Path_Cmd,'w') - - if useLSF: - cmd_file.write(CopyRights + '\n') - else: - cmd_file.write('Universe = vanilla\n') - cmd_file.write('Environment = CONDORJOBID=$(Process)\n') - cmd_file.write('notification = Error\n') - #code specific for louvain - if(commands.getstatusoutput("uname -n")[1].find("ucl.ac.be")!=-1): - cmd_file.write('requirements = (CMSFARM=?=True)&&(Memory > 200)\n') - else: - cmd_file.write('requirements = (Memory > 200)\n') - cmd_file.write('should_transfer_files = YES\n') - cmd_file.write('when_to_transfer_output = ON_EXIT\n') - cmd_file.close() - -def AddJobToCmdFile(): - global runInteractively - global useLSF - global Path_Shell - global Path_Cmd - global Path_Log - Path_Log = Farm_Directories[2]+Jobs_Index+Jobs_Name - cmd_file=open(Path_Cmd,'a') - - if runInteractively: - cmd_file.write("sh "+ os.getcwd() + "/"+Path_Shell + "\n") - elif useLSF: - if LSFlog : - cmd_file.write("bsub -q " + Jobs_Queue + " -J " + Jobs_Name+Jobs_Index + " '" + os.getcwd() + "/"+Path_Shell + " 0 ele'\n") - else : - cmd_file.write("bsub -o /dev/null -q " + Jobs_Queue + " -J " + Jobs_Name+Jobs_Index + " '" + os.getcwd() + "/"+Path_Shell + " 0 ele'\n") - else: - cmd_file.write('\n') - cmd_file.write('Executable = %s\n' % Path_Shell) - cmd_file.write('output = %s.out\n' % Path_Log) - cmd_file.write('error = %s.err\n' % Path_Log) - cmd_file.write('log = %s.log\n' % Path_Log) - cmd_file.write('Queue 1\n') - cmd_file.close() - -def CreateDirectoryStructure(FarmDirectory): - global Jobs_Name - global Farm_Directories - Farm_Directories = [FarmDirectory+'/', FarmDirectory+'/inputs/', FarmDirectory+'/logs/', FarmDirectory+'/outputs/'] - for i in range(0,len(Farm_Directories)): - if os.path.isdir(Farm_Directories[i]) == False: - os.system('mkdir ' + Farm_Directories[i]) - -def SendCluster_LoadInputFiles(path, NJobs): - global Jobs_Inputs - input_file = open(path,'r') - input_lines = input_file.readlines() - input_file.close() - #input_lines.sort() - - BlockSize = (len(input_lines)/NJobs) - LineIndex = 0 - JobIndex = 0 - BlockIndex = 0 - Jobs_Inputs = [""] - while LineIndex < len(input_lines): - Jobs_Inputs[JobIndex] += input_lines[LineIndex] - LineIndex +=1 - BlockIndex+=1 - if BlockIndex>BlockSize: - BlockIndex = 0 - JobIndex += 1 - Jobs_Inputs.append("") - return JobIndex+1 - -def SendCluster_Create(FarmDirectory, JobName): - global useLSF - global Jobs_Name - global Jobs_Count - global Farm_Directories - global runInteractively - - if(runInteractively): useLSF=True - - #determine if the submission system is LSF batch or condor - command_out = commands.getstatusoutput("bjobs")[1] - if(command_out.find("command not found")<0): useLSF = True - else: useLSF = False; - - Jobs_Name = JobName - Jobs_Count = 0 - CreateDirectoryStructure(FarmDirectory) - CreateTheCmdFile() - -def SendCluster_Push(Argv): - global Farm_Directories - global Jobs_Count - global Jobs_Index - global Path_Shell - global Path_Log - - Jobs_Index = "%04i_" % Jobs_Count - if Jobs_Count==0 and (Argv[0]=="ROOT" or Argv[0]=="FWLITE"): - #First Need to Compile the macro --> Create a temporary shell path with no arguments - print("Compiling the Macro...") - CreateTheShellFile([Argv[0],Argv[1]]) - os.system('sh '+Path_Shell) - os.system('rm '+Path_Shell) - print("Getting the jobs...") - print(Argv) - CreateTheShellFile(Argv) - AddJobToCmdFile() - Jobs_Count = Jobs_Count+1 - -def SendCluster_Submit(): - global useLSF - global CopyRights - global Jobs_Count - global Path_Cmd - - if useLSF: - os.system("sh " + Path_Cmd) - else: - os.system("condor_submit " + Path_Cmd) - - print('\n'+CopyRights) - print('%i Job(s) has/have been submitted on the Computing Cluster' % Jobs_Count) - -def SendSingleJob(FarmDirectory, JobName, Argv): - SendCluster_Create(FarmDirectory, JobName, Argv) - SendCluster_Push(FarmDirectory, JobName, Argv) - SendCluster_Submit(FarmDirectory, JobName,Argv) - -def SendCMSJobs(FarmDirectory, JobName, ConfigFile, InputFiles, NJobs, Argv): - SendCluster_Create(FarmDirectory, JobName) - NJobs = SendCluster_LoadInputFiles(InputFiles, NJobs) - for i in range(NJobs): - LaunchOnCondor.SendCluster_Push (["CMSSW", ConfigFile]) - LaunchOnCondor.SendCluster_Submit() - - - -def GetListOfFiles(Prefix, InputPattern, Suffix): - List = [] - - if(InputPattern.find('/store/cmst3')==0) : - index = InputPattern.rfind('/') - Listtmp = commands.getstatusoutput('cmsLs ' + InputPattern[0:index] + ' | awk \'{print $5}\'')[1].split('\n') - pattern = InputPattern[index+1:len(InputPattern)] - for file in Listtmp: - if fnmatch.fnmatch(file, pattern): List.append(InputPattern[0:index]+'/'+file) - elif(InputPattern.find('/castor/')==0): - index = InputPattern.rfind('/') - Listtmp = commands.getstatusoutput('rfdir ' + InputPattern[0:index] + ' | awk \'{print $9}\'')[1].split('\n') - pattern = InputPattern[index+1:len(InputPattern)] - for file in Listtmp: - if fnmatch.fnmatch(file, pattern): List.append(InputPattern[0:index]+'/'+file) - else : - List = glob.glob(InputPattern) - - List = sorted(List) - for i in range(len(List)): - List[i] = Prefix + List[i] + Suffix - return List - - -def ListToString(InputList): - outString = "" - for i in range(len(InputList)): - outString += InputList[i] - return outString - -def ListToFile(InputList, outputFile): - out_file=open(outputFile,'w') - for i in range(len(InputList)): - out_file.write(' ' + InputList[i] + '\n') - out_file.close() - -def FileToList(path): - input_file = open(path,'r') - input_lines = input_file.readlines() - input_file.close() - input_lines.sort() - return input_lines - - -def SendCMSMergeJob(FarmDirectory, JobName, InputFiles, OutputFile, KeepStatement): - SendCluster_Create(FarmDirectory, JobName) - Temp_Cfg = Farm_Directories[1]+Jobs_Index+Jobs_Name+'_TEMP_cfg.py' - - if len(InputFiles)==0: - print('Empty InputFile List for Job named "%s", Job will not be submitted' % JobName) - return - - InputFilesString = "" - for i in range(len(InputFiles)): - InputFilesString += " " + InputFiles[i] + '\n' - - cfg_file=open(Temp_Cfg,'w') - cfg_file.write('import FWCore.ParameterSet.Config as cms\n') - cfg_file.write('process = cms.Process("Merge")\n') - cfg_file.write('\n') - cfg_file.write('process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) )\n') - cfg_file.write('process.load("FWCore.MessageService.MessageLogger_cfi")\n') - cfg_file.write('\n') - cfg_file.write('process.MessageLogger.cerr.FwkReport.reportEvery = 50000\n') - cfg_file.write('process.source = cms.Source("PoolSource",\n') - cfg_file.write(' fileNames = cms.untracked.vstring(\n') - cfg_file.write('%s' % InputFilesString) - cfg_file.write(' )\n') - cfg_file.write(')\n') - cfg_file.write('\n') - cfg_file.write('process.OUT = cms.OutputModule("PoolOutputModule",\n') - cfg_file.write(' outputCommands = cms.untracked.vstring(%s),\n' % KeepStatement) - cfg_file.write(' fileName = cms.untracked.string(%s)\n' % OutputFile) - cfg_file.write(')\n') - cfg_file.write('\n') - cfg_file.write('process.endPath = cms.EndPath(process.OUT)\n') - cfg_file.close() - SendCluster_Push (["CMSSW", Temp_Cfg]) - SendCluster_Submit() - os.system('rm '+ Temp_Cfg) - diff --git a/SUSYBSMAnalysis/HSCP/src/BetaCalculatorECAL.cc b/SUSYBSMAnalysis/HSCP/src/BetaCalculatorECAL.cc deleted file mode 100644 index 57ef23068b9c9..0000000000000 --- a/SUSYBSMAnalysis/HSCP/src/BetaCalculatorECAL.cc +++ /dev/null @@ -1,336 +0,0 @@ -#include "DataFormats/EcalDetId/interface/EBDetId.h" -#include "DataFormats/EcalDetId/interface/EEDetId.h" - -#include "Geometry/CaloGeometry/interface/TruncatedPyramid.h" -#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "Geometry/CaloTopology/interface/CaloSubdetectorTopology.h" -#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" -#include "TrackingTools/Records/interface/DetIdAssociatorRecord.h" -#include "TrackPropagation/SteppingHelixPropagator/interface/SteppingHelixStateInfo.h" -#include "TrackPropagation/SteppingHelixPropagator/interface/SteppingHelixPropagator.h" - -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" - -#include "SUSYBSMAnalysis/HSCP/interface/BetaCalculatorECAL.h" - -using namespace susybsm; - -BetaCalculatorECAL::BetaCalculatorECAL(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC) - : EBRecHitCollectionToken_( - iC.consumes(iConfig.getParameter("EBRecHitCollection"))), - EERecHitCollectionToken_( - iC.consumes(iConfig.getParameter("EERecHitCollection"))), - ecalDetIdAssociatorToken_(iC.esConsumes(edm::ESInputTag("", "EcalDetIdAssociator"))), - bFieldToken_(iC.esConsumes()), - theCaloGeometryToken_(iC.esConsumes()), - caloTopologyToken_(iC.esConsumes()) { - edm::ParameterSet trkParameters = iConfig.getParameter("TrackAssociatorParameters"); - parameters_.loadParameters(trkParameters, iC); - trackAssociator_.useDefaultPropagator(); -} - -void BetaCalculatorECAL::addInfoToCandidate(HSCParticle& candidate, - edm::Handle& tracks, - edm::Event& iEvent, - const edm::EventSetup& iSetup, - HSCPCaloInfo& caloInfo) { - bool setCalo = false; - HSCPCaloInfo result; - - // EcalDetIdAssociator - const auto& ecalDetIdAssociator_ = iSetup.getData(ecalDetIdAssociatorToken_); - // Get the Bfield - bField_ = &iSetup.getData(bFieldToken_); - // Geometry - const CaloGeometry* theGeometry = &iSetup.getData(theCaloGeometryToken_); - // Topology - const CaloTopology* theCaloTopology = &iSetup.getData(caloTopologyToken_); - // EcalRecHits - edm::Handle ebRecHits; - iEvent.getByToken(EBRecHitCollectionToken_, ebRecHits); - edm::Handle eeRecHits; - iEvent.getByToken(EERecHitCollectionToken_, eeRecHits); - - // select the track - reco::Track track; - if (candidate.hasTrackRef()) - track = *(candidate.trackRef()); - else - return; // in case there is no track ref, we can't do much - - // compute the track isolation - result.trkIsoDr = 100; - for (reco::TrackCollection::const_iterator ndTrack = tracks->begin(); ndTrack != tracks->end(); ++ndTrack) { - double dr = - sqrt(pow((track.outerEta() - ndTrack->outerEta()), 2) + pow((track.outerPhi() - ndTrack->outerPhi()), 2)); - if (dr > 0.00001 && dr < result.trkIsoDr) - result.trkIsoDr = dr; - } - - // use the track associator to propagate to the calo - TrackDetMatchInfo info = - trackAssociator_.associate(iEvent, iSetup, trackAssociator_.getFreeTrajectoryState(bField_, track), parameters_); - - // do a custom propagation through Ecal - std::map trackExitPositionMap; // rawId to exit position (subtracting cry center) - std::map trackCrossedXtalCurvedMap; // rawId to trackLength - - FreeTrajectoryState tkInnerState = trajectoryStateTransform::innerFreeState(track, bField_); - // Build set of points in Ecal (necklace) using the propagator - std::vector neckLace; - neckLace = calcEcalDeposit(&tkInnerState, ecalDetIdAssociator_); - // Initialize variables to be filled by the track-length function - double totalLengthCurved = 0.; - GlobalPoint internalPointCurved(0., 0., 0.); - GlobalPoint externalPointCurved(0., 0., 0.); - if (neckLace.size() > 1) { - getDetailedTrackLengthInXtals(trackExitPositionMap, - trackCrossedXtalCurvedMap, - totalLengthCurved, - internalPointCurved, - externalPointCurved, - &(*theGeometry), - &(*theCaloTopology), - neckLace); - } - - // Make weighted sum of times - float sumWeightedTime = 0; - float sumTimeErrorSqr = 0; - float sumEnergy = 0; - float sumTrackLength = 0; - std::vector crossedRecHits; - EcalRecHitCollection::const_iterator thisHit; - - std::map::const_iterator trackExitMapIt = trackExitPositionMap.begin(); - for (std::map::const_iterator mapIt = trackCrossedXtalCurvedMap.begin(); - mapIt != trackCrossedXtalCurvedMap.end(); - ++mapIt) { - if (DetId(mapIt->first).subdetId() == EcalBarrel) { - EBDetId ebDetId(mapIt->first); - thisHit = ebRecHits->find(ebDetId); - if (thisHit == ebRecHits->end()) { - //std::cout << "\t Could not find crossedEcal detId: " << ebDetId << " in EBRecHitCollection!" << std::endl; - continue; - } - const EcalRecHit hit = *thisHit; - // Cut out badly-reconstructed hits - if (!hit.isTimeValid()) - continue; - uint32_t rhFlag = hit.recoFlag(); - if ((rhFlag != EcalRecHit::kGood) && (rhFlag != EcalRecHit::kOutOfTime) && (rhFlag != EcalRecHit::kPoorCalib)) - continue; - - float errorOnThis = hit.timeError(); - sumTrackLength += mapIt->second; - sumEnergy += hit.energy(); - crossedRecHits.push_back(hit); - // result.ecalSwissCrossKs.push_back(EcalSeverityLevelAlgo::spikeFromNeighbours(ebDetId,(*ebRecHits),0.2,EcalSeverityLevelAlgo::kSwissCross)); - // result.ecalE1OverE9s.push_back(EcalSeverityLevelAlgo::spikeFromNeighbours(ebDetId,(*ebRecHits),0.2,EcalSeverityLevelAlgo::kE1OverE9)); - result.ecalTrackLengths.push_back(mapIt->second); - result.ecalTrackExitPositions.push_back(trackExitMapIt->second); - result.ecalEnergies.push_back(hit.energy()); - result.ecalTimes.push_back(hit.time()); - result.ecalTimeErrors.push_back(hit.timeError()); - result.ecalOutOfTimeEnergies.push_back(0.); - result.ecalOutOfTimeChi2s.push_back(0.); - result.ecalChi2s.push_back(hit.chi2()); - result.ecalDetIds.push_back(ebDetId); - // SIC DEBUG - //std::cout << " SIC DEBUG: time error on this crossed RecHit: " << errorOnThis << " energy of hit: " - // << hit.energy() << " time of hit: " << hit.time() << " trackLength: " << mapIt->second << std::endl; - - if (hit.isTimeErrorValid()) // use hit time for weighted time average - { - sumWeightedTime += hit.time() / (errorOnThis * errorOnThis); - sumTimeErrorSqr += 1 / (errorOnThis * errorOnThis); - } - } - trackExitMapIt++; - } - - if (!crossedRecHits.empty()) { - setCalo = true; - sort(crossedRecHits.begin(), crossedRecHits.end(), [](auto& x, auto& y) { return (x.energy() > y.energy()); }); - result.ecalCrossedEnergy = sumEnergy; - result.ecalCrysCrossed = crossedRecHits.size(); - result.ecalDeDx = sumEnergy / sumTrackLength; - // replace the below w/o trackassociator quantities? - result.ecal3by3dir = info.nXnEnergy(TrackDetMatchInfo::EcalRecHits, 1); - result.ecal5by5dir = info.nXnEnergy(TrackDetMatchInfo::EcalRecHits, 2); - - if (sumTimeErrorSqr > 0) { - result.ecalTime = sumWeightedTime / sumTimeErrorSqr; - result.ecalTimeError = sqrt(1 / sumTimeErrorSqr); - DetId maxEnergyId = crossedRecHits.begin()->id(); - - if (maxEnergyId != DetId()) // double check - { - // To get beta, we assume photon propagation time is about the same for muons and e/gamma - // Since the typical path length is >> crystal length, this shouldn't be too bad - GlobalPoint position = info.getPosition(maxEnergyId); // position of crystal center on front face - double frontFaceR = sqrt(pow(position.x(), 2) + pow(position.y(), 2) + pow(position.z(), 2)); - double muonShowerMax = frontFaceR + 11.5; // assume muon "showerMax" is halfway into the crystal - double gammaShowerMax = frontFaceR + 6.23; // 7 X0 for e/gamma showerMax - double speedOfLight = 29.979; // cm/ns - result.ecalBeta = (muonShowerMax) / (result.ecalTime * speedOfLight + gammaShowerMax); - result.ecalBetaError = (speedOfLight * muonShowerMax * result.ecalTimeError) / - pow(speedOfLight * result.ecalTime + gammaShowerMax, 2); - result.ecalInvBetaError = speedOfLight * result.ecalTimeError / muonShowerMax; - } - // SIC debug - //std::cout << "BetaCalcEcal: CrossedRecHits: " << crossedRecHits.size() - // << " ecalTime: " << result.ecalTime << " timeError: " << result.ecalTimeError - // << " ecalCrossedEnergy: " << result.ecalCrossedEnergy << " ecalBeta: " << result.ecalBeta - // << " ecalBetaError: " << result.ecalBetaError << " ecalDeDx (MeV/cm): " << 1000*result.ecalDeDx << std::endl; - } - } - - if (!info.crossedHcalRecHits.empty()) { - // HCAL (not ECAL) info - result.hcalCrossedEnergy = info.crossedEnergy(TrackDetMatchInfo::HcalRecHits); - result.hoCrossedEnergy = info.crossedEnergy(TrackDetMatchInfo::HORecHits); - //maxEnergyId = info.findMaxDeposition(TrackDetMatchInfo::HcalRecHits); - result.hcal3by3dir = info.nXnEnergy(TrackDetMatchInfo::HcalRecHits, 1); - result.hcal5by5dir = info.nXnEnergy(TrackDetMatchInfo::HcalRecHits, 2); - } - - if (setCalo) - caloInfo = result; -} - -std::vector BetaCalculatorECAL::calcEcalDeposit(const FreeTrajectoryState* tkInnerState, - const DetIdAssociator& associator) { - // Set some parameters - double minR = associator.volume().minR(); - double minZ = associator.volume().minZ(); - double maxR = associator.volume().maxR(); - double maxZ = associator.volume().maxZ(); - - // Define the TrackOrigin (where the propagation starts) - SteppingHelixStateInfo trackOrigin(*tkInnerState); - - // Define Propagator - auto prop = std::make_unique(bField_, alongMomentum); - prop->setMaterialMode(false); - prop->applyRadX0Correction(true); - - return propagateThoughFromIP(trackOrigin, prop.get(), associator.volume(), 500, 0.1, minR, minZ, maxR, maxZ); -} - -int BetaCalculatorECAL::getDetailedTrackLengthInXtals(std::map& trackExitPositionMap, - std::map& trackCrossedXtalMap, - double& totalLengthCurved, - GlobalPoint& internalPointCurved, - GlobalPoint& externalPointCurved, - const CaloGeometry* theGeometry, - const CaloTopology* theTopology, - const std::vector& neckLace) { - GlobalPoint origin(0., 0., 0.); - internalPointCurved = origin; - externalPointCurved = origin; - - bool firstPoint = false; - trackCrossedXtalMap.clear(); - - const CaloSubdetectorGeometry* theBarrelSubdetGeometry = theGeometry->getSubdetectorGeometry(DetId::Ecal, 1); - const CaloSubdetectorGeometry* theEndcapSubdetGeometry = theGeometry->getSubdetectorGeometry(DetId::Ecal, 2); - - for (std::vector::const_iterator itr = (neckLace.begin() + 1); itr != neckLace.end(); ++itr) { - GlobalPoint probe_gp = (*itr).position(); - std::vector surroundingMatrix; - - EBDetId closestBarrelDetIdToProbe = ((theBarrelSubdetGeometry->getClosestCell(probe_gp)).rawId()); - EEDetId closestEndcapDetIdToProbe = ((theEndcapSubdetGeometry->getClosestCell(probe_gp)).rawId()); - - // check if the probe is inside the xtal - if ((closestEndcapDetIdToProbe) && (theGeometry->getSubdetectorGeometry(closestEndcapDetIdToProbe) - ->getGeometry(closestEndcapDetIdToProbe) - ->inside(probe_gp))) { - double step = ((*itr).position() - (*(itr - 1)).position()).mag(); - GlobalPoint point = itr->position(); - addStepToXtal( - trackExitPositionMap, trackCrossedXtalMap, closestEndcapDetIdToProbe, step, point, theEndcapSubdetGeometry); - totalLengthCurved += step; - - if (firstPoint == false) { - internalPointCurved = probe_gp; - firstPoint = true; - } - - externalPointCurved = probe_gp; - } - - if ((closestBarrelDetIdToProbe) && (theGeometry->getSubdetectorGeometry(closestBarrelDetIdToProbe) - ->getGeometry(closestBarrelDetIdToProbe) - ->inside(probe_gp))) { - double step = ((*itr).position() - (*(itr - 1)).position()).mag(); - GlobalPoint point = itr->position(); - addStepToXtal( - trackExitPositionMap, trackCrossedXtalMap, closestBarrelDetIdToProbe, step, point, theBarrelSubdetGeometry); - totalLengthCurved += step; - - if (firstPoint == false) { - internalPointCurved = probe_gp; - firstPoint = true; - } - - externalPointCurved = probe_gp; - } else { - // 3x3 matrix surrounding the probe - surroundingMatrix = - theTopology->getSubdetectorTopology(closestBarrelDetIdToProbe)->getWindow(closestBarrelDetIdToProbe, 3, 3); - - for (unsigned int k = 0; k < surroundingMatrix.size(); ++k) { - if (theGeometry->getSubdetectorGeometry(surroundingMatrix.at(k)) - ->getGeometry(surroundingMatrix.at(k)) - ->inside(probe_gp)) { - double step = ((*itr).position() - (*(itr - 1)).position()).mag(); - GlobalPoint point = itr->position(); - addStepToXtal(trackExitPositionMap, - trackCrossedXtalMap, - surroundingMatrix[k], - step, - point, - theGeometry->getSubdetectorGeometry(surroundingMatrix.at(k))); - totalLengthCurved += step; - - if (firstPoint == false) { - internalPointCurved = probe_gp; - firstPoint = true; - } - - externalPointCurved = probe_gp; - } - } - - // clear neighborhood matrix - surroundingMatrix.clear(); - } - } - - return 0; -} - -void BetaCalculatorECAL::addStepToXtal(std::map& trackExitPositionMap, - std::map& trackCrossedXtalMap, - DetId aDetId, - float step, - GlobalPoint point, - const CaloSubdetectorGeometry* theSubdetGeometry) { - auto cell_p = theSubdetGeometry->getGeometry(aDetId); - GlobalPoint p = cell_p->getPosition(23); - GlobalPoint diff(point.x() - p.x(), point.y() - p.y(), point.z() - p.z()); - - std::map::iterator xtal = trackExitPositionMap.find(aDetId.rawId()); - if (xtal != trackExitPositionMap.end()) - ((*xtal).second) = diff; - else - trackExitPositionMap.insert(std::pair(aDetId.rawId(), diff)); - - std::map::iterator xtal2 = trackCrossedXtalMap.find(aDetId.rawId()); - if (xtal2 != trackCrossedXtalMap.end()) - ((*xtal2).second) += step; - else - trackCrossedXtalMap.insert(std::pair(aDetId.rawId(), step)); -} diff --git a/SUSYBSMAnalysis/HSCP/src/BetaCalculatorMUON.cc b/SUSYBSMAnalysis/HSCP/src/BetaCalculatorMUON.cc deleted file mode 100644 index 20ac60e11be7a..0000000000000 --- a/SUSYBSMAnalysis/HSCP/src/BetaCalculatorMUON.cc +++ /dev/null @@ -1,36 +0,0 @@ -#include "SUSYBSMAnalysis/HSCP/interface/BetaCalculatorMUON.h" - -using namespace edm; -using namespace reco; -using namespace susybsm; - -BetaCalculatorMUON::BetaCalculatorMUON(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC) { - // m_muontiming_dt = iC.consumes(iConfig.getParameter("muontimingDt" )); - // m_muontiming_csc = iC.consumes(iConfig.getParameter("muontimingCsc" )); - // m_muontiming_combined = iC.consumes(iConfig.getParameter("muontimingCombined")); -} - -void BetaCalculatorMUON::addInfoToCandidate(HSCParticle& candidate, edm::Event& iEvent, const edm::EventSetup& iSetup) { - //Do nothing since all muonTiming object are external and get be accessed via reference - return; - /* - if(!candidate.hasMuonRef())return; - reco::MuonRef muon = candidate.muonRef(); - - Handle timeMap_Dt_h; - iEvent.getByToken(m_muontiming_dt,timeMap_Dt_h); - const reco::MuonTimeExtraMap& timeMap_Dt = *timeMap_Dt_h; - - Handle timeMap_Csc_h; - iEvent.getByToken(m_muontiming_dt,timeMap_Csc_h); - const reco::MuonTimeExtraMap& timeMap_Csc = *timeMap_Csc_h; - - Handle timeMap_Combined_h; - iEvent.getByToken(m_muontiming_dt,timeMap_Combined_h); - const reco::MuonTimeExtraMap& timeMap_Combined = *timeMap_Combined_h; - - candidate.setMuonTimeDt (timeMap_Dt [muon]); - candidate.setMuonTimeCsc (timeMap_Csc [muon]); - candidate.setMuonTimeCombined(timeMap_Combined[muon]); -*/ -} diff --git a/SUSYBSMAnalysis/HSCP/src/BetaCalculatorRPC.cc b/SUSYBSMAnalysis/HSCP/src/BetaCalculatorRPC.cc deleted file mode 100644 index 441ed344f349f..0000000000000 --- a/SUSYBSMAnalysis/HSCP/src/BetaCalculatorRPC.cc +++ /dev/null @@ -1,200 +0,0 @@ -#include "SUSYBSMAnalysis/HSCP/interface/BetaCalculatorRPC.h" - -using namespace susybsm; - -BetaCalculatorRPC::BetaCalculatorRPC(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC) { - rpcRecHitsToken = iC.consumes(iConfig.getParameter("rpcRecHits")); -} - -void BetaCalculatorRPC::algo(const std::vector& uHSCPRPCRecHits) { - std::vector HSCPRPCRecHits = uHSCPRPCRecHits; - int lastbx = -7; - bool outOfTime = false; - bool increasing = true; - bool anydifferentzero = true; - bool anydifferentone = true; - - //std::cout<<"Inside BetaCalculatorRPC \t \t Preliminar loop on the RPCHit4D!!!"<::iterator point = HSCPRPCRecHits.begin(); point < HSCPRPCRecHits.end(); ++point) { - outOfTime |= (point->bx != 0); //condition 1: at least one measurement must have BX!=0 - increasing &= (point->bx >= lastbx); //condition 2: BX must be increase when going inside-out. - anydifferentzero &= (!(point->bx == 0)); //to check one knee withoutzeros - anydifferentone &= (!(point->bx == 1)); //to check one knee withoutones - lastbx = point->bx; - //float r=point->gp.mag(); - //std::cout<<"Inside BetaCalculatorRPC \t \t r="<::iterator point = HSCPRPCRecHits.begin(); point < HSCPRPCRecHits.end(); ++point) { - if (lastbx == -7) { - maginfirstknee = point->gp.mag(); - } else if ((lastbx != point->bx)) { - //std::cout<<"Inside BetaCalculatorRPC \t \t \t one knee between"<bx<gp.mag(); - knees++; - } - lastbx = point->bx; - } - - if (knees == 0) { - //std::cout<<"Inside BetaCalculatorRPC \t \t \t \t knees="<bx<gp.mag(); - betavalue1 = maginknee / (25 - delay + maginknee / 30.) / 30.; - float dr = (maginknee - maginsecondknee); - betavalue2 = dr / (25. + dr / 30.); - //std::cout<<"Inside BetaCalculatorRPC \t \t \t \t \t betavalue1="< rpcGeo; - iSetup.get().get(rpcGeo); - - edm::Handle rpcHits; - iEvent.getByToken(rpcRecHitsToken, rpcHits); - - // here we do basically as in RPCHSCPCANDIDATE.cc, but just for the hits on the muon of interest - RPCBetaMeasurement result; - std::vector hits; - // so, loop on the RPC hits of the muon - trackingRecHit_iterator start, stop; - reco::Track track; - - if (candidate.hasMuonRef() && candidate.muonRef()->combinedMuon().isNonnull()) { - start = candidate.muonRef()->combinedMuon()->recHitsBegin(); - stop = candidate.muonRef()->combinedMuon()->recHitsEnd(); - } else if (candidate.hasMuonRef() && candidate.muonRef()->standAloneMuon().isNonnull()) { - track = *(candidate.muonRef()->standAloneMuon()); - start = candidate.muonRef()->standAloneMuon()->recHitsBegin(); - stop = candidate.muonRef()->standAloneMuon()->recHitsEnd(); - } else - return; - /* - if(candidate.hasMuonCombinedTrack()) { - start = candidate.combinedTrack().recHitsBegin(); - stop = candidate.combinedTrack().recHitsEnd(); - } else if(candidate.hasMuonStaTrack()) { - start = candidate.staTrack().recHitsBegin(); - stop = candidate.staTrack().recHitsEnd(); - } else return; -*/ - - for (trackingRecHit_iterator recHit = start; recHit != stop; ++recHit) { - if ((*recHit)->geographicalId().subdetId() != MuonSubdetId::RPC) - continue; - if ((*recHit)->geographicalId().det() != DetId::Muon) - continue; - if (!(*recHit)->isValid()) - continue; //Is Valid? - - RPCDetId rollId = (RPCDetId)(*recHit)->geographicalId(); - - typedef std::pair rangeRecHits; - rangeRecHits recHitCollection = rpcHits->get(rollId); - RPCRecHitCollection::const_iterator recHitC; - int size = 0; - int clusterS = 0; - - for (recHitC = recHitCollection.first; recHitC != recHitCollection.second; recHitC++) { - clusterS = (*recHitC).clusterSize(); - // RPCDetId rollId = (RPCDetId)(*recHitC).geographicalId(); - // std::cout<<"\t \t \t \t"< 1) - continue; //Is the only RecHit in this roll.? - if (clusterS > 4) - continue; //Is the Cluster Size 5 or bigger? - - LocalPoint recHitPos = (*recHit)->localPosition(); - const RPCRoll* rollasociated = rpcGeo->roll(rollId); - const BoundPlane& RPCSurface = rollasociated->surface(); - - RPCHit4D ThisHit; - ThisHit.bx = ((RPCRecHit*)(&(**recHit)))->BunchX(); - ThisHit.gp = RPCSurface.toGlobal(recHitPos); - ThisHit.id = (RPCDetId)(*recHit)->geographicalId().rawId(); - hits.push_back(ThisHit); - } - // here we go on with the RPC procedure - std::sort(hits.begin(), hits.end()); - int lastbx = -7; - bool increasing = true; - bool outOfTime = false; - for (std::vector::iterator point = hits.begin(); point < hits.end(); ++point) { - outOfTime |= (point->bx != 0); //condition 1: at least one measurement must have BX!=0 - increasing &= (point->bx >= lastbx); //condition 2: BX must increase when going inside-out. - lastbx = point->bx; - } - result.isCandidate = (outOfTime && increasing); - - //result.beta = 1; // here we should get some pattern-based estimate - algo(hits); - result.beta = beta(); - candidate.setRpc(result); -} diff --git a/SUSYBSMAnalysis/HSCP/src/BetaCalculatorTK.cc b/SUSYBSMAnalysis/HSCP/src/BetaCalculatorTK.cc deleted file mode 100644 index ca60849deae24..0000000000000 --- a/SUSYBSMAnalysis/HSCP/src/BetaCalculatorTK.cc +++ /dev/null @@ -1,92 +0,0 @@ -#include "SUSYBSMAnalysis/HSCP/interface/BetaCalculatorTK.h" - -using namespace edm; -using namespace reco; -using namespace susybsm; - -BetaCalculatorTK::BetaCalculatorTK(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC) { - /* - m_dedxEstimator1Token = consumes(iConfig.getParameter("dedxEstimator1")); - m_dedxEstimator2Token = consumes(iConfig.getParameter("dedxEstimator2")); - m_dedxEstimator3Token = consumes(iConfig.getParameter("dedxEstimator3")); - m_dedxEstimator4Token = consumes(iConfig.getParameter("dedxEstimator4")); - m_dedxEstimator5Token = consumes(iConfig.getParameter("dedxEstimator5")); - m_dedxEstimator6Token = consumes(iConfig.getParameter("dedxEstimator6")); - m_dedxDiscriminator1Token = consumes(iConfig.getParameter("dedxDiscriminator1")); - m_dedxDiscriminator2Token = consumes(iConfig.getParameter("dedxDiscriminator2")); - m_dedxDiscriminator3Token = consumes(iConfig.getParameter("dedxDiscriminator3")); - m_dedxDiscriminator4Token = consumes(iConfig.getParameter("dedxDiscriminator4")); - m_dedxDiscriminator5Token = consumes(iConfig.getParameter("dedxDiscriminator5")); - m_dedxDiscriminator6Token = consumes(iConfig.getParameter("dedxDiscriminator6")); -*/ -} - -void BetaCalculatorTK::addInfoToCandidate(HSCParticle& candidate, edm::Event& iEvent, const edm::EventSetup& iSetup) { - //Do nothing since all dE/dx object are external and get be accessed via reference - return; - /* - if(!candidate.hasTrackRef())return; - - edm::Handle Estimator1H; - iEvent.getByToken(m_dedxEstimator1Token,Estimator1H); - const ValueMap Estimator1 = *Estimator1H.product(); - - edm::Handle Estimator2H; - iEvent.getByToken(m_dedxEstimator2Token,Estimator2H); - const ValueMap Estimator2 = *Estimator2H.product(); - - edm::Handle Estimator3H; - iEvent.getByToken(m_dedxEstimator3Token,Estimator3H); - const ValueMap Estimator3 = *Estimator3H.product(); - - edm::Handle Estimator4H; - iEvent.getByToken(m_dedxEstimator4Token,Estimator4H); - const ValueMap Estimator4 = *Estimator4H.product(); - - edm::Handle Estimator5H; - iEvent.getByToken(m_dedxEstimator5Token,Estimator5H); - const ValueMap Estimator5 = *Estimator5H.product(); - - edm::Handle Estimator6H; - iEvent.getByToken(m_dedxEstimator6Token,Estimator6H); - const ValueMap Estimator6 = *Estimator6H.product(); - - edm::Handle Discriminator1H; - iEvent.getByToken(m_dedxDiscriminator1Token,Discriminator1H); - const ValueMap Discriminator1 = *Discriminator1H.product(); - - edm::Handle Discriminator2H; - iEvent.getByToken(m_dedxDiscriminator2Token,Discriminator2H); - const ValueMap Discriminator2 = *Discriminator2H.product(); - - edm::Handle Discriminator3H; - iEvent.getByToken(m_dedxDiscriminator3Token,Discriminator3H); - const ValueMap Discriminator3 = *Discriminator3H.product(); - - edm::Handle Discriminator4H; - iEvent.getByToken(m_dedxDiscriminator4Token,Discriminator4H); - const ValueMap Discriminator4 = *Discriminator4H.product(); - - edm::Handle Discriminator5H; - iEvent.getByToken(m_dedxDiscriminator5Token,Discriminator5H); - const ValueMap Discriminator5 = *Discriminator5H.product(); - - edm::Handle Discriminator6H; - iEvent.getByToken(m_dedxDiscriminator6Token,Discriminator6H); - const ValueMap Discriminator6 = *Discriminator6H.product(); - - reco::TrackRef track = candidate.trackRef(); - candidate.setDedxEstimator1 (Estimator1 [track]); - candidate.setDedxEstimator2 (Estimator2 [track]); - candidate.setDedxEstimator3 (Estimator3 [track]); - candidate.setDedxEstimator4 (Estimator4 [track]); - candidate.setDedxEstimator5 (Estimator5 [track]); - candidate.setDedxEstimator6 (Estimator6 [track]); - candidate.setDedxDiscriminator1(Discriminator1[track]); - candidate.setDedxDiscriminator2(Discriminator2[track]); - candidate.setDedxDiscriminator3(Discriminator3[track]); - candidate.setDedxDiscriminator4(Discriminator4[track]); - candidate.setDedxDiscriminator5(Discriminator5[track]); - candidate.setDedxDiscriminator6(Discriminator6[track]); -*/ -} diff --git a/SUSYBSMAnalysis/HSCP/src/CandidateSelector.cc b/SUSYBSMAnalysis/HSCP/src/CandidateSelector.cc deleted file mode 100644 index 33b63c2daed3e..0000000000000 --- a/SUSYBSMAnalysis/HSCP/src/CandidateSelector.cc +++ /dev/null @@ -1,120 +0,0 @@ -#include "SUSYBSMAnalysis/HSCP/interface/CandidateSelector.h" - -using namespace edm; -using namespace reco; -using namespace susybsm; - -CandidateSelector::CandidateSelector(const edm::ParameterSet& iConfig) { - isTrack = iConfig.getParameter("onlyConsiderTrack"); - isMuon = iConfig.getParameter("onlyConsiderMuon"); - isMuonSTA = iConfig.getParameter("onlyConsiderMuonSTA"); - isMuonGB = iConfig.getParameter("onlyConsiderMuonGB"); - isMuonTK = iConfig.getParameter("onlyConsiderMuonTK"); - isMTMuon = iConfig.getParameter("onlyConsiderMTMuon"); - isRpc = iConfig.getParameter("onlyConsiderRpc"); - isEcal = iConfig.getParameter("onlyConsiderEcal"); - - minTrackHits = iConfig.getParameter("minTrackHits"); - minTrackP = iConfig.getParameter("minTrackP"); - minTrackPt = iConfig.getParameter("minTrackPt"); - - minDedx = iConfig.getParameter("minDedx"); - - minMuonP = iConfig.getParameter("minMuonP"); - minMuonPt = iConfig.getParameter("minMuonPt"); - minSAMuonPt = iConfig.getParameter("minMTMuonPt"); - minMTMuonPt = iConfig.getParameter("minMTMuonPt"); - - maxMuTimeDtBeta = iConfig.getParameter("maxMuTimeDtBeta"); - minMuTimeDtNdof = iConfig.getParameter("minMuTimeDtNdof"); - maxMuTimeCscBeta = iConfig.getParameter("maxMuTimeCscBeta"); - minMuTimeCscNdof = iConfig.getParameter("minMuTimeCscNdof"); - maxMuTimeCombinedBeta = iConfig.getParameter("maxMuTimeCombinedBeta"); - minMuTimeCombinedNdof = iConfig.getParameter("minMuTimeCombinedNdof"); - - maxBetaRpc = iConfig.getParameter("maxBetaRpc"); - maxBetaEcal = iConfig.getParameter("maxBetaEcal"); -} - -bool CandidateSelector::isSelected(HSCParticle& candidate) { - if (isTrack && !candidate.hasTrackRef()) { - return false; - } - if (isMuon && !candidate.hasMuonRef()) { - return false; - } - if (isMuonSTA && (!candidate.hasMuonRef() || candidate.muonRef()->standAloneMuon().isNull())) { - return false; - } - if (isMuonGB && (!candidate.hasMuonRef() || candidate.muonRef()->combinedMuon().isNull())) { - return false; - } - if (isMuonTK && (!candidate.hasMuonRef() || candidate.muonRef()->innerTrack().isNull())) { - return false; - } - if (isMTMuon && !candidate.hasMTMuonRef()) { - return false; - } - if (isRpc && !candidate.hasRpcInfo()) { - return false; - } - if (isEcal && !candidate.hasCaloInfo()) { - return false; - } - - if (candidate.hasTrackRef()) { - if (candidate.trackRef()->found() < minTrackHits) { - return false; - } - if (candidate.trackRef()->p() < minTrackP) { - return false; - } - if (candidate.trackRef()->pt() < minTrackPt) { - return false; - } - - // Need to be implemented using external dE/dx object - // if(candidate.hasDedxEstim1() && minDedxEstimator1>=0 && candidate.dedxEstimator1 ().dEdx()=0 && candidate.dedxDiscriminator1().dEdx()p() < minMuonP) { - return false; - } - if (candidate.muonRef()->pt() < minMuonPt) { - return false; - } - - // Need to be implemented using external timing object - // if(maxMuTimeDtBeta >=0 && 1.0/candidate.muonTimeDt().inverseBeta() > maxMuTimeDtBeta ){return false;} - // if(minMuTimeDtNdof >=0 && 1.0/candidate.muonTimeDt().nDof() < minMuTimeDtNdof ){return false;} - // if(maxMuTimeCscBeta >=0 && 1.0/candidate.muonTimeCsc().inverseBeta() > maxMuTimeCscBeta ){return false;} - // if(minMuTimeCscNdof >=0 && 1.0/candidate.muonTimeCsc().nDof() < minMuTimeCscNdof ){return false;} - // if(maxMuTimeCombinedBeta>=0 && 1.0/candidate.muonTimeCombined().inverseBeta() > maxMuTimeCombinedBeta){return false;} - // if(minMuTimeCombinedNdof>=0 && 1.0/candidate.muonTimeCombined().nDof() < minMuTimeCombinedNdof){return false;} - } - - if (candidate.hasRpcInfo() && maxBetaRpc >= 0 && candidate.rpc().beta > maxBetaRpc) { - return false; - } - - if (candidate.hasMuonRef() && candidate.muonRef()->isStandAloneMuon()) { - if (candidate.muonRef()->standAloneMuon()->pt() < minSAMuonPt) { - return false; - } - } - - if (candidate.hasMTMuonRef()) { - if (!candidate.MTMuonRef()->standAloneMuon().isNull()) { - if (candidate.MTMuonRef()->standAloneMuon()->pt() < minMTMuonPt) { - return false; - } - } - } - - // Need to be implemented using external dE/dx object - // if(candidate.hasCaloInfo() && maxBetaEcal>=0 && candidate.calo().ecalBeta > maxBetaEcal){return false;} - - return true; -} diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/HSCParticleProducer_cfg.py b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/HSCParticleProducer_cfg.py deleted file mode 100644 index e71898e901915..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/HSCParticleProducer_cfg.py +++ /dev/null @@ -1,199 +0,0 @@ -from __future__ import print_function -import FWCore.ParameterSet.Config as cms - -process = cms.Process("HSCPAnalysis") - -from SUSYBSMAnalysis.HSCP.HSCPVersion_cff import * - -process.load("FWCore.MessageService.MessageLogger_cfi") -if CMSSW4_2 or CMSSW4_4:process.load("Configuration.StandardSequences.Geometry_cff") -else: process.load("Configuration.Geometry.GeometryIdeal_cff") - -process.load("Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) -process.MessageLogger.cerr.FwkReport.reportEvery = 1000 - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100) ) - -if CMSSW4_4: process.GlobalTag.globaltag = 'FT_R_44_V11::All' -elif CMSSW4_2: process.GlobalTag.globaltag = 'GR_P_V14::All' -else: - import FWCore.ParameterSet.VarParsing as VarParsing - options = VarParsing.VarParsing("analysis") - options.register("globalTag", - "GR_P_V32::All", # default value - VarParsing.VarParsing.multiplicity.singleton, # singleton or list - VarParsing.VarParsing.varType.string, # string, int, or float - "Global tag to be used." - ) - # get and parse the command line arguments - options.parseArguments() - process.GlobalTag.globaltag = options.globalTag - -readFiles = cms.untracked.vstring() -process.source = cms.Source("PoolSource", - fileNames = readFiles -) - -if CMSSW4_2: readFiles.extend(['/store/data/Run2011B/SingleMu/USER/EXOHSCP-PromptSkim-v1/0000/FC298F26-65FF-E011-977F-00237DA13C76.root']) -else: readFiles.extend(['/store/data/Run2012D/SingleMu/USER/EXOHSCP-PromptSkim-v1/000/208/391/00000/78225FEA-B23E-E211-B4DE-485B39800C17.root']) - -process.source.inputCommands = cms.untracked.vstring("keep *", "drop *_MEtoEDMConverter_*_*") - -######################################################################## -process.load("SUSYBSMAnalysis.HSCP.HSCParticleProducerFromSkim_cff") #IF RUNNING ON HSCP SKIM - -if CMSSW4_2: - process.load('SUSYBSMAnalysis.Skimming.EXOHSCP_cff') - process.load('SUSYBSMAnalysis.Skimming.EXOHSCP_EventContent_cfi') - -else: - process.load('Configuration.Skimming.PDWG_EXOHSCP_cff') - -######################################################################## INCREASING HSCP TRIGGER TRESHOLD FOR OLD DATA -process.load('HLTrigger.HLTfilters.hltHighLevel_cfi') -if CMSSW4_2 or CMSSW4_4: - process.HSCPTrigger = cms.EDFilter("HSCPHLTFilter", - RemoveDuplicates = cms.bool(False), - TriggerProcess = cms.string("HLT"), - MuonTrigger1Mask = cms.int32(1), #Activated - PFMetTriggerMask = cms.int32(1), #Activated - L2MuMETTriggerMask = cms.int32(1), #Activated - ) -else: - process.HSCPTrigger = process.hltHighLevel.clone() - process.HSCPTrigger.TriggerResultsTag = cms.InputTag( "TriggerResults", "", "HLT" ) - process.HSCPTrigger.HLTPaths = [ - "HLT_*_dEdx*", - "HLT_Mu40_eta2p1*", - "HLT_Mu50_eta2p1*", - "HLT_HT650_*", - "HLT_MET80_*", - "HLT_L2Mu*MET*", - "HLT_L2Mu*NoBPTX*", - "HLT_PFMET150_*", - ] - process.HSCPTrigger.andOr = cms.bool( True ) #OR - process.HSCPTrigger.throw = cms.bool( False ) - -######################################################################## SPECIAL CASE FOR DATA -process.GlobalTag.toGet = cms.VPSet( - cms.PSet( record = cms.string('SiStripDeDxMip_3D_Rcd'), - tag = cms.string('Data7TeV_Deco_3D_Rcd_38X'), - connect = cms.untracked.string("sqlite_file:Data7TeV_Deco_SiStripDeDxMip_3D_Rcd.db")), -) - -if not CMSSW4_2 and not CMSSW4_4: - print ("WARNING: You are using Data7TeV_Deco_SiStripDeDxMip_3D_Rcd.db for dEdx computation... These constants are a priori not valid for 2012 samples\nThe constants need to be redone for 2012 samples") - - -######################################################################## -process.nEventsBefSkim = cms.EDProducer("EventCountProducer") -process.nEventsBefEDM = cms.EDProducer("EventCountProducer") -######################################################################## - -if not CMSSW4_2 and not CMSSW4_4: - #bug fix in 52 - process.HSCParticleProducer.useBetaFromEcal = cms.bool(False) - - #skim the jet collection to keep only 15GeV jets - process.ak5PFJetsPt15 = cms.EDFilter( "EtMinPFJetSelector", - src = cms.InputTag( "ak5PFJets" ), - filter = cms.bool( False ), - etMin = cms.double( 15.0 ) - ) - -process.Out = cms.OutputModule("PoolOutputModule", - outputCommands = cms.untracked.vstring( - "drop *", - 'keep EventAux_*_*_*', - 'keep LumiSummary_*_*_*', - 'keep edmMergeableCounter_*_*_*', - "keep *_genParticles_*_*", - "keep GenEventInfoProduct_generator_*_*", - "keep *_offlinePrimaryVertices_*_*", - "keep SiStripClusteredmNewDetSetVector_generalTracksSkim_*_*", - "keep SiPixelClusteredmNewDetSetVector_generalTracksSkim_*_*", - "keep *_TrackRefitter_*_*", - "keep *_standAloneMuons_*_*", - "keep *_globalMuons_*_*", # - "keep *_muonsSkim_*_*", - "keep edmTriggerResults_TriggerResults_*_*", - "keep *_ak5PFJetsPt15__*", # - "keep recoPFMETs_pfMet__*", # - "keep *_HSCParticleProducer_*_*", - "keep *_HSCPIsolation01__*", - "keep *_HSCPIsolation03__*", - "keep *_HSCPIsolation05__*", - "keep *_dedx*_*_HSCPAnalysis", - "keep *_muontiming_*_HSCPAnalysis", - "keep triggerTriggerEvent_hltTriggerSummaryAOD_*_*", - "keep *_RefitMTSAMuons_*_*", - "keep *_MTMuons_*_*", - "keep *_MTSAMuons_*_*", - "keep *_MTmuontiming_*_*", - "keep *_refittedStandAloneMuons_*_*", - "keep *_offlineBeamSpot_*_*", - "keep *_MuonSegmentProducer_*_*", - "drop TrajectorysToOnerecoTracksAssociation_TrackRefitter__", - "drop recoTrackExtras_*_*_*", - "keep recoTrackExtras_TrackRefitter_*_*", - "drop TrackingRecHitsOwned_*Muon*_*_*", - ), - fileName = cms.untracked.string('HSCP.root'), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('p1') - ), -) - -if CMSSW4_2: - process.Out.outputCommands.extend(["keep recoPFJets_ak5PFJets__*"]) - - from CondCore.DBCommon.CondDBSetup_cfi import CondDBSetup - process.tTrigDB = cms.ESSource("PoolDBESSource", - CondDBSetup, - timetype = cms.string('runnumber'), - toGet = cms.VPSet(cms.PSet( - record = cms.string('DTTtrigRcd'), - tag = cms.string('DTTtrig_offline_prep_V03'), - label = cms.untracked.string('') - )), - connect = cms.string('frontier://FrontierPrep/CMS_COND_DT'), - authenticationMethod = cms.untracked.uint32(0) - ) - #process.tTrigDB.DBParameters.authenticationPath = '/afs/cern.ch/cms/DB/conddb' - process.es_prefer_tTrigDB = cms.ESPrefer('PoolDBESSource','tTrigDB') - - process.vDriftDB = cms.ESSource("PoolDBESSource", - CondDBSetup, - timetype = cms.string('runnumber'), - toGet = cms.VPSet(cms.PSet( - record = cms.string('DTMtimeRcd'), - tag = cms.string('DTVdrift_offline_prep_V03'), - label = cms.untracked.string('') - )), - connect = cms.string('frontier://FrontierPrep/CMS_COND_DT'), - authenticationMethod = cms.untracked.uint32(0) - ) - #process.vDriftDB.DBParameters.authenticationPath = '/afs/cern.ch/cms/DB/conddb' - process.es_prefer_vDriftDB = cms.ESPrefer('PoolDBESSource','vDriftDB') - - - -######################################################################## - - -#LOOK AT SD PASSED PATH IN ORDER to avoid as much as possible duplicated events (make the merging of .root file faster) -#The module ak5PFJetsPt15 does not exist in CMSSW4 -if CMSSW4_2 or CMSSW4_4: process.p1 = cms.Path(process.nEventsBefSkim * process.HSCPTrigger * process.nEventsBefEDM * process.HSCParticleProducerSeq) -else: process.p1 = cms.Path(process.nEventsBefSkim * process.HSCPTrigger * process.nEventsBefEDM * process.ak5PFJetsPt15 * process.HSCParticleProducerSeq) - -#If you are not running from the HSCP skim you need to redo the skim -#process.p1 = cms.Path(process.nEventsBefSkim * process.HSCPTrigger * process.exoticaHSCPSeq * process.nEventsBefEDM * process.ak5PFJetsPt15 * process.HSCParticleProducerSeq) - -process.endPath1 = cms.EndPath(process.Out) -process.schedule = cms.Schedule( process.p1, process.endPath1) - - diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/Merge.py b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/Merge.py deleted file mode 100644 index d58f4b8b3c56a..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/Merge.py +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env python - -import urllib -import string -import os -import sys -import LaunchOnCondor - -Jobs = [ -#["RunA_*_190645_190999","RunA_190645_190999"], -#["RunA_*_191000_191999","RunA_191000_191999"], -#["RunA_*_192000_192999","RunA_192000_192999"], -#["RunA_*_193000_193621","RunA_193000_193621"], -#["RunB_*_193622_193999","RunB_193622_193999"], -#["RunB_*_194000_194999","RunB_194000_194999"], -#["RunB_*_195000_195999","RunB_195000_195999"], -#["RunB_*_196000_196531","RunB_196000_196531"], -#["RunC_*_197000_197999","RunC_196532_197999"], -#["RunC_*_198000_198345","RunC_198000_198345"], -#["RunC_*_198488_198919","RunC_198488_198919"], -#["RunC_*_198920_198999","RunC_198920_198999"], -#["RunC_*_199000_199999","RunC_199000_199999"], -#["RunC_*_200000_200532","RunC_200000_200532"], -#["RunC_*_200533_202016","RunC_200533_202016"], -#["Run2012C_*_202017_203002","RunC_202017_203002"], - -#["RunD_*_203003_203300","RunD_203003_203300"], -#["RunD_*_203301_203600","RunD_203301_203600"], -#["RunD_*_203601_203900","RunD_203601_203900"], -#["RunD_*_203901_204200","RunD_203901_204200"], -#["RunD_*_204201_204500","RunD_204201_204500"], -#["RunD_*_204501_204800","RunD_204501_204800"], -#["RunD_*_204801_205100","RunD_204801_205100"], -#["RunD_*_205101_205400","RunD_205101_205400"], -#["RunD_*_205401_205700","RunD_205401_205700"], -#["RunD_*_205701_206000","RunD_205701_206000"], -#["RunD_*_206001_206300","RunD_206001_206300"], -#["RunD_*_206301_206600","RunD_206301_206600"], -#["RunD_*_206601_206900","RunD_206601_206900"], -#["RunD_*_206901_207200","RunD_206901_207200"], -#["RunD_*_207201_207500","RunD_207201_207500"], -#["RunD_*_207501_207800","RunD_207501_207800"], -#["RunD_*_207801_208100","RunD_207801_208100"], -#["RunD_*_208101_208357","RunD_208101_208357"], -["RunD_*_208358_208686","RunD_208358_208686"] -] - -FarmDirectory = "MERGE" -for j in Jobs: - LaunchOnCondor.ListToFile(LaunchOnCondor.GetListOfFiles('"dcache:','/pnfs/cms/WAX/11/store/user/farrell3/HSCPEDMUpdateData2012_30Nov2012/'+j[0]+'/HSCP_*.root','",'), FarmDirectory + "InputFile.txt") - #LaunchOnCondor.SendCMSJobs(FarmDirectory, j[1], "Merge_cfg.py", FarmDirectory + "InputFile.txt", 1, ['XXX_SAVEPATH_XXX','file:/storage/data/cms/users/quertenmont/HSCP/CMSSW_4_2_8/12_08_16/']) - LaunchOnCondor.SendCMSJobs(FarmDirectory, j[1], "Merge_cfg.py", FarmDirectory + "InputFile.txt", 1, ['XXX_SAVEPATH_XXX','/uscmst1b_scratch/lpc1/3DayLifetime/farrell/2012Data_04Sep2012']) -os.system("rm " + FarmDirectory + "InputFile.txt") diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/Merge_cfg.py b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/Merge_cfg.py deleted file mode 100644 index df313357ddeab..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/Merge_cfg.py +++ /dev/null @@ -1,140 +0,0 @@ -import FWCore.ParameterSet.Config as cms -process = cms.Process("MergeHLT") - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) -process.load("FWCore.MessageService.MessageLogger_cfi") -from SUSYBSMAnalysis.HSCP.HSCPVersion_cff import * - -process.MessageLogger.cerr.FwkReport.reportEvery = 5000 -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( -XXX_INPUT_XXX - ) -) - -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -process.HSCPHLTDuplicate = cms.EDFilter("HSCPHLTFilter", - RemoveDuplicates = cms.bool(True), - TriggerProcess = cms.string("HLT"), - MuonTrigger1Mask = cms.int32(0), #Activated - PFMetTriggerMask = cms.int32(0), #Activated - L2MuMETTriggerMask = cms.int32(0), #Activated -) -process.DuplicateFilter = cms.Path(process.HSCPHLTDuplicate ) - -process.load('HLTrigger.HLTfilters.hltHighLevel_cfi') -process.HSCPHLTTriggerMuDeDx = process.hltHighLevel.clone() -process.HSCPHLTTriggerMuDeDx.TriggerResultsTag = cms.InputTag( "TriggerResults", "", "HLT" ) -process.HSCPHLTTriggerMuDeDx.andOr = cms.bool( True ) #OR -process.HSCPHLTTriggerMuDeDx.throw = cms.bool( False ) -process.HSCPHLTTriggerMuDeDx.HLTPaths = ["HLT_Mu*_dEdx*"] -process.HSCPHLTTriggerMuDeDxFilter = cms.Path(process.HSCPHLTTriggerMuDeDx ) - -process.HSCPHLTTriggerMetDeDx = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerMetDeDx.HLTPaths = ["HLT_MET*_dEdx*"] -process.HSCPHLTTriggerMetDeDxFilter = cms.Path(process.HSCPHLTTriggerMetDeDx ) - -process.HSCPHLTTriggerHtDeDx = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerHtDeDx.HLTPaths = ["HLT_HT*_dEdx*"] -process.HSCPHLTTriggerHtDeDxFilter = cms.Path(process.HSCPHLTTriggerHtDeDx ) - -#process.HSCPHLTTriggerMu -if CMSSW4_2 or CMSSW4_4: - #This needs to be done differently for 2011 data because HLT_Mu40 did not exist in trigger menu at beginning of run - process.HSCPHLTTriggerMu = cms.EDFilter("HSCPHLTFilter", - RemoveDuplicates = cms.bool(False), - TriggerProcess = cms.string("HLT"), - MuonTrigger1Mask = cms.int32(1), #Activated - PFMetTriggerMask = cms.int32(0), #Activated - L2MuMETTriggerMask = cms.int32(0), #Activated - ) -else: - process.HSCPHLTTriggerMu = process.HSCPHLTTriggerMuDeDx.clone() - process.HSCPHLTTriggerMu.HLTPaths = ["HLT_Mu40_*"] - -process.HSCPHLTTriggerMuFilter = cms.Path(process.HSCPHLTTriggerMu ) - -process.HSCPHLTTriggerMet = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerMet.HLTPaths = ["HLT_MET80_*"] -process.HSCPHLTTriggerMetFilter = cms.Path(process.HSCPHLTTriggerMet ) - -process.HSCPHLTTriggerPFMet = process.HSCPHLTTriggerMuDeDx.clone() -#Name change from 2011 to 2012 -if CMSSW4_2 or CMSSW4_4: - process.HSCPHLTTriggerPFMet.HLTPaths = ["HLT_PFMHT150_*"] -else: - process.HSCPHLTTriggerPFMet.HLTPaths = ["HLT_PFMET150_*"] -process.HSCPHLTTriggerPFMetFilter = cms.Path(process.HSCPHLTTriggerPFMet ) - -process.HSCPHLTTriggerHt = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerHt.HLTPaths = ["HLT_HT650_*"] -process.HSCPHLTTriggerHtFilter = cms.Path(process.HSCPHLTTriggerHt ) - -if CMSSW4_2 or CMSSW4_4: - #Needs to be done separately as had lower threshold prescaled trigger in menu in 2011 - process.HSCPHLTTriggerL2Mu = cms.EDFilter("HSCPHLTFilter", - RemoveDuplicates = cms.bool(False), - TriggerProcess = cms.string("HLT"), - MuonTrigger1Mask = cms.int32(0), #Activated - PFMetTriggerMask = cms.int32(0), #Activated - L2MuMETTriggerMask = cms.int32(1), #Activated - ) -else: - process.HSCPHLTTriggerL2Mu = process.HSCPHLTTriggerMuDeDx.clone() - process.HSCPHLTTriggerL2Mu.HLTPaths = ["HLT_L2Mu*MET*"] - -process.HSCPHLTTriggerL2MuFilter = cms.Path(process.HSCPHLTTriggerL2Mu ) - - -process.HSCPHLTTriggerCosmic = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerCosmic.HLTPaths = ["HLT_L2Mu*NoBPTX*"] -process.HSCPHLTTriggerCosmicFilter = cms.Path(process.HSCPHLTTriggerCosmic ) - -process.Out = cms.OutputModule("PoolOutputModule", - outputCommands = cms.untracked.vstring( - "drop *", - "keep EventAux_*_*_*", - "keep LumiSummary_*_*_*", - "keep edmMergeableCounter_*_*_*", - "keep *_genParticles_*_*", - "keep GenEventInfoProduct_generator_*_*", - "keep *_offlinePrimaryVertices_*_*", - "keep SiStripClusteredmNewDetSetVector_generalTracksSkim_*_*", - "keep SiPixelClusteredmNewDetSetVector_generalTracksSkim_*_*", - "keep *_TrackRefitter_*_*", - "keep *_standAloneMuons_*_*", - "keep *_globalMuons_*_*", - "keep *_muonsSkim_*_*", - "keep edmTriggerResults_TriggerResults_*_*", - "keep *_ak5PFJetsPt15__*", - "keep recoPFMETs_pfMet__*", - "keep *_HSCParticleProducer_*_*", - "keep *_HSCPIsolation01__*", - "keep *_HSCPIsolation03__*", - "keep *_HSCPIsolation05__*", - "keep *_dedx*_*_HSCPAnalysis", - "keep *_muontiming_*_HSCPAnalysis", - "keep triggerTriggerEvent_hltTriggerSummaryAOD_*_*", - "keep *_RefitMTSAMuons_*_*", - "keep *_MTMuons_*_*", - "keep *_MTSAMuons_*_*", - "keep *_MTmuontiming_*_*", - "keep *_refittedStandAloneMuons_*_*", - "keep *_offlineBeamSpot_*_*", - "keep *_MuonSegmentProducer_*_*", - "drop TrajectorysToOnerecoTracksAssociation_TrackRefitter__", - "drop recoTrackExtras_*_*_*", - "keep recoTrackExtras_TrackRefitter_*_*", - "drop TrackingRecHitsOwned_*Muon*_*_*", - ), - #fileName = cms.untracked.string('/uscmst1b_scratch/lpc1/3DayLifetime/farrell/HSCPEDMUpdateData2012_30Nov2012/XXX_OUTPUT_XXX.root'), - fileName = cms.untracked.string('XXX_SAVEPATH_XXX/XXX_OUTPUT_XXX.root'), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('DuplicateFilter') - ), -) - -process.endPath = cms.EndPath(process.Out) - -process.schedule = cms.Schedule(process.DuplicateFilter, process.HSCPHLTTriggerMuDeDxFilter, process.HSCPHLTTriggerMetDeDxFilter, process.HSCPHLTTriggerHtDeDxFilter, process.HSCPHLTTriggerMuFilter, process.HSCPHLTTriggerMetFilter, process.HSCPHLTTriggerPFMetFilter, process.HSCPHLTTriggerHtFilter, process.HSCPHLTTriggerL2MuFilter, process.HSCPHLTTriggerCosmicFilter, process.endPath) diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/OfficialLumi.json b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/OfficialLumi.json deleted file mode 100644 index a6bb7018583d4..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/OfficialLumi.json +++ /dev/null @@ -1 +0,0 @@ -{"190645": [[10, 110]], "190704": [[1, 3]], "190705": [[1, 5], [7, 65], [81, 336], [338, 350], [353, 383]], "190738": [[1, 130], [133, 226], [229, 355]], "191043": [[45, 47]], "191046": [[1, 21], [24, 82], [84, 88], [92, 116], [119, 180], [183, 183], [185, 239]], "191056": [[1, 1], [4, 9], [16, 17], [19, 19]], "191057": [[1, 1], [4, 40]], "191062": [[1, 1], [3, 3], [5, 214], [216, 549]], "191090": [[1, 55]], "191201": [[38, 49], [52, 79]], "191202": [[1, 64], [66, 68], [87, 105], [108, 118]], "191226": [[77, 78], [81, 831], [833, 1454], [1456, 1466], [1469, 1507], [1510, 1686]], "191247": [[1, 153], [156, 280], [283, 606], [608, 620], [622, 818], [821, 834], [837, 1031], [1034, 1046], [1049, 1140], [1143, 1187], [1190, 1214], [1217, 1224]], "191248": [[1, 103]], "191264": [[59, 79], [82, 152], [155, 189]], "191271": [[56, 158]], "191276": [[1, 16]], "191277": [[1, 28], [30, 164], [167, 253], [255, 457], [460, 535], [537, 576], [579, 775], [778, 811], [813, 849]], "191367": [[1, 2]], "191411": [[1, 23]], "191695": [[1, 1]], "191718": [[43, 95], [98, 207]], "191720": [[1, 1], [3, 15], [17, 181]], "191721": [[1, 1], [3, 34], [36, 183], [186, 189]], "191726": [[1, 13]], "191810": [[15, 15], [22, 49], [52, 92]], "191830": [[54, 242], [245, 301], [304, 393]], "191833": [[1, 1], [3, 103]], "191834": [[1, 30], [33, 74], [77, 299], [302, 352]], "191837": [[1, 44], [47, 53], [56, 65]], "191856": [[1, 133]], "191859": [[1, 28], [31, 126]], "193093": [[1, 33]], "193123": [[1, 27]], "193124": [[1, 52]], "193207": [[54, 182]], "193334": [[29, 172]], "193336": [[1, 264], [267, 492], [495, 684], [687, 729], [732, 951]], "193541": [[77, 101], [103, 413], [416, 575], [578, 619]], "193556": [[41, 83]], "193557": [[1, 84]], "193575": [[48, 173], [176, 349], [351, 394], [397, 415], [417, 658], [660, 752]], "193621": [[60, 570], [573, 769], [772, 976], [979, 1053], [1056, 1137], [1139, 1193], [1195, 1371], [1373, 1654]], "193834": [[1, 35]], "193835": [[1, 20], [22, 26]], "193836": [[1, 2]], "193998": [[66, 113], [115, 278]], "193999": [[1, 50]], "194027": [[53, 115]], "194050": [[53, 113], [116, 273], [275, 355], [357, 369], [372, 391], [394, 490], [492, 814], [816, 1435], [1437, 1735], [1760, 1888]], "194051": [[1, 12]], "194052": [[1, 99], [102, 166]], "194075": [[48, 101], [103, 111]], "194076": [[1, 9], [11, 55], [58, 163], [165, 228], [230, 264], [267, 507], [509, 527], [530, 538], [541, 562], [565, 748]], "194108": [[81, 161], [164, 264], [266, 373], [376, 396], [398, 433], [436, 452], [454, 577], [579, 590], [593, 668], [671, 875]], "194115": [[66, 184], [186, 338], [340, 346], [348, 493], [496, 731], [819, 857]], "194117": [[1, 38]], "194119": [[1, 229], [232, 261]], "194120": [[1, 162], [165, 406]], "194150": [[42, 127], [129, 261], [264, 311]], "194151": [[47, 72], [75, 191], [193, 238], [240, 619], [621, 624], [627, 627]], "194153": [[1, 119]], "194199": [[92, 227], [229, 336], [339, 402]], "194210": [[3, 195], [198, 217], [220, 359], [361, 555]], "194223": [[61, 112]], "194224": [[1, 126], [129, 206], [208, 250], [253, 309], [312, 386], [389, 412]], "194225": [[1, 23], [26, 47], [49, 85], [88, 156], [177, 178]], "194270": [[56, 73]], "194303": [[56, 66], [69, 102]], "194304": [[1, 43], [46, 46]], "194305": [[1, 86]], "194314": [[52, 130], [133, 301]], "194315": [[1, 10], [13, 314], [317, 428], [431, 452], [455, 467]], "194317": [[1, 33]], "194424": [[63, 141], [144, 195], [198, 266], [268, 421], [424, 478], [481, 531], [534, 553], [556, 708]], "194428": [[1, 85], [87, 122], [125, 294], [296, 465]], "194429": [[1, 4], [7, 54], [57, 147], [150, 411], [413, 742], [745, 986], [988, 1023]], "194439": [[46, 77], [79, 106]], "194455": [[45, 64], [67, 140], [142, 255], [293, 303]], "194464": [[1, 127], [130, 142], [145, 210]], "194479": [[1, 44], [165, 232], [235, 262], [265, 374], [377, 431], [434, 489], [492, 529], [531, 566]], "194480": [[1, 32], [34, 205], [207, 375], [377, 387], [389, 759], [762, 956], [959, 1402]], "194533": [[46, 379], [382, 415], [417, 618], [620, 872]], "194619": [[31, 110]], "194631": [[1, 42], [44, 100], [102, 169], [171, 222]], "194643": [[1, 287]], "194644": [[1, 168], [171, 181], [184, 185], [187, 319], [321, 424]], "194691": [[61, 104], [107, 155], [158, 251], [254, 268], [271, 272], [275, 289], [292, 313]], "194699": [[1, 30], [32, 52], [55, 64], [67, 71], [73, 154], [157, 215], [218, 238], [241, 259]], "194702": [[1, 138], [141, 191]], "194704": [[1, 41], [44, 545], [548, 592]], "194711": [[1, 7], [9, 619]], "194712": [[1, 56], [61, 418], [420, 625], [627, 759]], "194735": [[44, 71], [74, 101], [104, 130], [133, 136]], "194778": [[60, 118], [120, 219]], "194789": [[1, 18], [21, 32], [34, 80], [82, 166], [168, 269], [272, 405], [409, 414], [417, 427], [430, 566]], "194790": [[1, 45]], "194825": [[72, 117], [120, 221]], "194896": [[34, 55], [58, 79], [82, 103]], "194897": [[1, 6], [8, 78], [80, 107]], "194912": [[53, 70], [72, 96], [98, 444], [446, 450], [453, 467], [470, 561], [564, 660], [663, 813], [815, 840], [843, 864], [866, 1004], [1007, 1025], [1027, 1067], [1069, 1137], [1140, 1166], [1168, 1249], [1251, 1304], [1307, 1444], [1447, 1487], [1489, 1503], [1506, 1662]], "194914": [[1, 38]], "194915": [[1, 74]], "195013": [[94, 144], [146, 185], [187, 206], [208, 299], [302, 324], [326, 366], [369, 447], [450, 526], [528, 541]], "195014": [[1, 6], [9, 119], [121, 148]], "195015": [[1, 13]], "195016": [[1, 21], [23, 55], [58, 63], [65, 174], [177, 184], [186, 241], [243, 246], [248, 251], [254, 367], [370, 422], [425, 560], [563, 569]], "195099": [[70, 144], [147, 186], [189, 208], [211, 224], [227, 265]], "195109": [[98, 241]], "195112": [[1, 12], [15, 26]], "195113": [[1, 209], [212, 388], [391, 403], [406, 419], [422, 492], [495, 579]], "195114": [[1, 69], [72, 103]], "195115": [[1, 7], [10, 36]], "195147": [[132, 282], [285, 294], [297, 331], [334, 363], [366, 442], [445, 536], [539, 562]], "195163": [[72, 138], [140, 224], [227, 240], [243, 243], [246, 347]], "195164": [[1, 64]], "195165": [[1, 4], [7, 41], [44, 54], [56, 153], [156, 260], [263, 277]], "195251": [[1, 131], [134, 137], [140, 152], [154, 165], [167, 249]], "195303": [[109, 191], [194, 277], [280, 310], [312, 316], [318, 409]], "195304": [[1, 3], [6, 22], [27, 80], [83, 100], [103, 154], [157, 341], [344, 588], [590, 727], [729, 1003], [1006, 1079], [1083, 1140], [1143, 1229]], "195378": [[90, 117], [120, 127], [130, 185], [187, 204], [206, 302], [305, 542], [544, 565], [567, 645], [647, 701], [703, 734], [737, 1120], [1122, 1133]], "195390": [[1, 1], [4, 27], [30, 145], [147, 183], [186, 187], [190, 208], [210, 213], [215, 410]], "195396": [[49, 55], [58, 63], [66, 131]], "195397": [[1, 10], [12, 89], [92, 120], [123, 141], [143, 251], [253, 253], [256, 475], [478, 525], [527, 608], [611, 776], [779, 970], [972, 1121], [1123, 1181], [1184, 1198], [1200, 1209]], "195398": [[3, 137], [139, 494], [497, 585], [587, 817], [820, 824], [827, 1225], [1228, 1307], [1309, 1712], [1721, 1736], [1741, 1752], [1767, 1795]], "195399": [[1, 192], [194, 382], [384, 394]], "195530": [[1, 80], [82, 104], [107, 156], [159, 300], [302, 405]], "195540": [[68, 123], [126, 137], [140, 283], [286, 323]], "195551": [[91, 106]], "195552": [[1, 21], [23, 27], [30, 147], [149, 155], [158, 182], [185, 287], [290, 349], [352, 469], [472, 815], [818, 823], [825, 883], [885, 1152], [1154, 1300], [1303, 1789]], "195633": [[40, 42]], "195647": [[1, 41]], "195649": [[1, 69], [72, 151], [154, 181], [183, 247]], "195655": [[1, 129], [131, 184], [186, 260], [263, 350], [353, 446], [448, 483], [485, 498]], "195656": [[1, 362]], "195658": [[1, 37], [40, 362], [364, 382], [384, 386]], "195749": [[1, 8], [10, 33], [36, 131]], "195757": [[1, 82], [85, 115], [118, 161], [163, 206]], "195758": [[1, 18]], "195774": [[1, 13], [16, 137], [139, 151], [154, 162], [164, 256], [258, 276], [279, 362], [365, 466], [469, 618], [620, 649], [651, 830]], "195775": [[1, 57], [60, 100], [103, 170]], "195776": [[1, 63], [66, 283], [286, 337], [340, 399], [401, 409], [411, 477]], "195841": [[74, 90]], "195868": [[1, 88], [90, 107], [110, 205]], "195915": [[1, 109], [111, 275], [278, 390], [393, 417], [419, 429], [432, 505], [507, 747], [749, 785], [787, 828], [830, 850]], "195916": [[1, 16], [19, 68], [71, 212]], "195917": [[1, 4]], "195918": [[1, 44], [46, 46], [49, 64]], "195919": [[1, 15]], "195923": [[1, 14]], "195925": [[1, 12]], "195926": [[1, 1], [3, 19], [21, 34]], "195929": [[1, 29]], "195930": [[1, 77], [80, 176], [179, 526], [529, 596]], "195937": [[1, 28], [31, 186], [188, 400]], "195947": [[23, 62], [64, 88]], "195948": [[51, 116], [119, 144], [147, 147], [150, 352], [355, 369], [372, 402], [404, 500], [503, 540], [543, 565], [567, 602], [605, 615]], "195950": [[1, 71], [73, 138], [141, 169], [172, 332], [335, 350], [353, 382], [385, 421], [424, 450], [453, 483], [485, 616], [619, 715], [718, 787], [789, 800], [803, 829], [831, 831], [833, 1587]], "195963": [[54, 61]], "195970": [[44, 49], [51, 85]], "196019": [[54, 68]], "196027": [[1, 55], [58, 119], [121, 155], [158, 190]], "196046": [[12, 40]], "196047": [[1, 64], [70, 75]], "196048": [[1, 44], [46, 48], [51, 52]], "196197": [[58, 122], [125, 179], [181, 311], [313, 516], [519, 562]], "196199": [[1, 33], [36, 83], [86, 118], [121, 147], [150, 237], [239, 285], [287, 534]], "196200": [[1, 68]], "196202": [[3, 61], [64, 108]], "196203": [[1, 102], [107, 135]], "196218": [[55, 199], [201, 224], [226, 393], [396, 494], [496, 741], [744, 752], [754, 757], [759, 820]], "196239": [[1, 59], [62, 154], [157, 272], [274, 373], [375, 432], [435, 465], [468, 647], [650, 706], [709, 1025]], "196249": [[63, 77], [80, 99]], "196250": [[1, 2], [5, 265], [267, 426], [430, 430]], "196252": [[1, 38]], "196334": [[59, 111], [113, 123], [126, 132], [135, 167], [170, 193], [196, 257], [259, 267], [270, 289], [292, 348]], "196349": [[65, 84], [86, 154], [157, 244], [246, 258]], "196357": [[1, 4]], "196359": [[1, 2]], "196362": [[1, 88]], "196363": [[1, 8], [11, 34]], "196364": [[1, 93], [96, 136], [139, 365], [368, 380], [382, 601], [603, 795], [798, 884], [887, 1196], [1199, 1200], [1203, 1302]], "196437": [[1, 1], [3, 74], [77, 169]], "196438": [[1, 181], [184, 699], [701, 1269]], "196452": [[82, 112], [114, 490], [493, 586], [589, 618], [622, 668], [671, 716], [718, 726], [728, 956], [958, 1004], [1007, 1091]], "196453": [[1, 74], [77, 145], [147, 669], [673, 714], [717, 799], [802, 988], [991, 1178], [1180, 1180], [1182, 1248], [1250, 1528], [1531, 1647]], "196495": [[114, 180], [182, 272]], "196509": [[1, 68]], "196531": [[62, 150], [152, 253], [256, 285], [288, 302], [305, 422], [425, 440]], "198049": [[1, 11], [14, 57]], "198050": [[2, 155]], "198063": [[1, 37], [40, 72], [74, 124], [127, 294]], "198116": [[36, 52], [54, 55], [58, 96], [98, 112]], "198207": [[1, 97]], "198208": [[1, 92], [94, 134], [137, 147], [150, 209]], "198210": [[1, 221]], "198212": [[1, 574]], "198213": [[1, 107]], "198215": [[1, 12]], "198230": [[1, 33], [36, 57], [60, 235], [237, 324], [326, 388], [390, 459], [462, 625], [627, 651], [653, 805], [808, 811], [814, 948], [950, 1090], [1093, 1103], [1106, 1332], [1335, 1380]], "198249": [[1, 7]], "198269": [[3, 199], [201, 201], [203, 203]], "198271": [[1, 91], [93, 170], [173, 299], [301, 450], [453, 513], [516, 616], [619, 628], [631, 791], [793, 797]], "198272": [[1, 185], [188, 245], [248, 314], [317, 433], [436, 444], [454, 625]], "198346": [[44, 57]], "198372": [[57, 114]], "198485": [[68, 109], [112, 134], [136, 181], [184, 239]], "198487": [[1, 145], [147, 514], [517, 668], [671, 733], [736, 757], [760, 852], [854, 994], [997, 1434], [1437, 1612]], "198522": [[65, 144], [147, 208]], "198941": [[102, 189], [191, 220], [222, 241], [243, 249], [252, 291]], "198954": [[108, 156], [159, 277]], "198955": [[1, 45], [47, 50], [53, 220], [223, 269], [271, 284], [286, 338], [340, 580], [583, 742], [744, 910], [913, 946], [949, 1162], [1165, 1169], [1172, 1182], [1185, 1188], [1190, 1246], [1249, 1304], [1306, 1467], [1470, 1485], [1487, 1552]], "198969": [[58, 81], [84, 247], [249, 323], [325, 365], [367, 413], [416, 466], [468, 643], [646, 918], [920, 1011], [1013, 1175], [1178, 1236], [1239, 1277]], "199008": [[75, 93], [95, 121], [124, 208], [211, 331], [333, 373], [376, 482], [485, 605], [608, 644]], "199011": [[1, 11], [13, 27]], "199021": [[59, 88], [91, 128], [130, 133], [136, 309], [311, 333], [335, 410], [414, 469], [471, 533], [535, 563], [565, 1223], [1226, 1479], [1481, 1494]], "199318": [[65, 138]], "199319": [[1, 7], [9, 223], [226, 277], [280, 348], [351, 358], [360, 422], [424, 490], [492, 493], [496, 612], [615, 642], [645, 720], [723, 728], [730, 731], [734, 741], [744, 943], [945, 997]], "199336": [[1, 33], [36, 122], [125, 231], [234, 614], [617, 789], [791, 977]], "199356": [[95, 121], [123, 168], [171, 205], [208, 233]], "199409": [[25, 54], [56, 89], [91, 204], [206, 290], [293, 583], [586, 602], [604, 1014], [1016, 1300]], "199428": [[61, 197], [200, 210], [212, 382], [387, 414], [417, 436], [439, 530], [533, 648]], "199429": [[1, 28], [30, 36], [39, 55], [58, 101], [103, 148], [151, 156]], "199435": [[63, 106], [109, 261], [263, 579], [582, 654], [656, 696], [699, 1034], [1037, 1144], [1147, 1327], [1330, 1411], [1414, 1431], [1434, 1441], [1444, 1487], [1489, 1610]], "199436": [[1, 113], [116, 254], [257, 675], [678, 748]], "199564": [[1, 3]], "199569": [[1, 2], [5, 136], [139, 367]], "199570": [[1, 17]], "199571": [[1, 184], [186, 360], [363, 561]], "199572": [[1, 317]], "199573": [[1, 22]], "199574": [[1, 53], [56, 153], [156, 246]], "199608": [[60, 157], [159, 209], [211, 341], [344, 390], [392, 461], [464, 800], [802, 1064], [1067, 1392], [1395, 1630], [1633, 1904], [1907, 1962], [1965, 2252], [2255, 2422]], "199698": [[72, 94], [96, 127]], "199699": [[1, 154], [157, 169], [172, 410], [412, 756]], "199703": [[1, 94], [97, 482], [485, 539]], "199739": [[66, 174]], "199745": [[137, 143]], "199751": [[103, 119], [121, 127]], "199752": [[1, 141], [144, 180], [182, 186], [188, 211], [214, 322]], "199753": [[1, 59]], "199754": [[1, 203], [205, 325], [328, 457], [459, 607], [610, 613], [615, 806], [808, 998]], "199804": [[78, 88], [90, 181], [183, 235], [238, 278], [281, 290], [292, 519], [522, 575], [577, 628], [631, 638]], "199812": [[70, 141], [144, 163], [182, 211], [214, 471], [474, 505], [508, 557], [560, 571], [574, 623], [626, 751], [754, 802]], "199833": [[1, 13], [16, 103], [105, 250], [253, 493], [496, 794], [797, 1032], [1034, 1185], [1188, 1239]], "199862": [[59, 142]], "199864": [[1, 87], [89, 89], [92, 103], [106, 372], [374, 385], [388, 486]], "199867": [[1, 134], [136, 172], [174, 218], [221, 320]], "199868": [[1, 26]], "199875": [[70, 150], [152, 334]], "199876": [[1, 19], [22, 95], [97, 249], [252, 272], [274, 340], [343, 362], [365, 376]], "199877": [[1, 173], [175, 605], [607, 701], [703, 873]], "199960": [[72, 139], [141, 197], [204, 232], [235, 363], [365, 367], [370, 380], [383, 459], [461, 466], [469, 485]], "199961": [[1, 211], [213, 292]], "199973": [[73, 96]], "200041": [[62, 83], [85, 157], [162, 274], [277, 318], [321, 335], [337, 386], [388, 389], [392, 400], [402, 568], [571, 593], [595, 646], [649, 728], [731, 860], [862, 930], [932, 1096]], "200042": [[1, 110], [112, 536]], "200049": [[1, 177]], "200075": [[76, 139], [142, 232], [256, 326], [329, 422], [425, 431], [434, 500], [502, 605]], "200091": [[67, 67], [70, 151], [154, 172], [174, 187], [190, 196], [199, 201], [204, 425], [428, 535], [537, 607], [610, 879], [881, 943], [946, 999], [1001, 1025], [1027, 1132], [1135, 1339], [1341, 1433], [1435, 1450], [1453, 1523], [1526, 1664], [1667, 1680], [1683, 1710]], "200152": [[74, 152]], "200180": [[1, 18]], "200188": [[1, 24], [27, 28], [31, 76], [79, 271], [274, 352]], "200190": [[1, 4], [6, 76], [79, 143], [146, 159], [162, 256], [258, 321], [324, 401], [403, 453], [456, 457], [460, 565], [567, 588], [591, 591], [593, 595], [597, 646], [649, 880]], "200229": [[1, 33], [41, 219], [222, 244], [247, 290], [293, 624], [627, 629]], "200243": [[69, 103], [106, 139]], "200244": [[3, 304], [307, 442], [445, 507], [510, 619]], "200245": [[1, 103], [105, 128], [131, 248], [251, 357]], "200368": [[72, 180]], "200369": [[1, 5], [8, 61], [64, 360], [363, 439], [441, 578], [580, 603], [606, 684], [686, 686]], "200381": [[8, 15], [18, 36], [38, 89], [91, 198]], "200466": [[134, 274]], "200473": [[96, 157], [159, 224], [226, 304], [306, 469], [472, 524], [527, 542], [545, 619], [622, 688], [691, 730], [733, 738], [740, 1324]], "200491": [[87, 107], [110, 149], [152, 157], [160, 197], [199, 237], [240, 270], [273, 273], [276, 334], [336, 360], [363, 448]], "200515": [[97, 183]], "200519": [[1, 111], [114, 126], [129, 136], [138, 224], [227, 258], [261, 350], [353, 611], [613, 757]], "200525": [[77, 149], [151, 164], [166, 190], [193, 276], [278, 311], [314, 464], [467, 488], [491, 674], [676, 704], [707, 755], [757, 895], [898, 937], [939, 990]], "200532": [[1, 59]], "200599": [[75, 129], [132, 137]], "200600": [[1, 183], [186, 299], [302, 313], [316, 324], [327, 334], [336, 397], [399, 417], [420, 526], [529, 591], [594, 609], [611, 660], [663, 823], [826, 900], [902, 943], [945, 1139], [1141, 1142]], "200961": [[1, 115]], "200976": [[94, 164]], "200990": [[75, 143]], "200991": [[1, 42], [44, 44], [47, 80], [83, 175], [178, 181], [184, 252], [255, 632], [635, 916], [918, 1017], [1019, 1049]], "200992": [[1, 405], [408, 434], [436, 581]], "201062": [[78, 270]], "201097": [[83, 136], [138, 245], [248, 300], [303, 370], [372, 429], [432, 502]], "201114": [[1, 14]], "201115": [[1, 75]], "201159": [[70, 211]], "201164": [[1, 8], [10, 94], [96, 125], [128, 178], [180, 198], [200, 271], [274, 416], [418, 418]], "201168": [[1, 37], [39, 275], [278, 481], [483, 558], [560, 730]], "201173": [[1, 194], [197, 586]], "201174": [[1, 214], [216, 263], [265, 339], [342, 451]], "201193": [[1, 19]], "201196": [[1, 238], [241, 278], [286, 299], [302, 338], [341, 515], [518, 720], [723, 789], [803, 841]], "201197": [[1, 23]], "201202": [[1, 437]], "201229": [[1, 5], [8, 26], [29, 77]], "201278": [[62, 163], [166, 229], [232, 256], [259, 316], [318, 595], [598, 938], [942, 974], [976, 1160], [1163, 1304], [1306, 1793], [1796, 1802], [1805, 1906], [1909, 1929], [1932, 2174]], "201554": [[70, 86], [88, 114], [116, 127]], "201602": [[76, 81], [83, 194], [196, 494], [496, 614], [617, 639]], "201611": [[87, 145], [149, 182], [184, 186]], "201613": [[1, 42], [44, 49], [53, 210], [213, 215], [218, 225], [228, 659]], "201624": [[83, 92], [95, 240], [270, 270]], "201625": [[211, 312], [315, 348], [351, 416], [418, 588], [591, 671], [673, 758], [760, 791], [793, 952]], "201657": [[77, 93], [95, 108], [110, 118]], "201658": [[1, 19], [21, 118], [121, 136], [139, 292]], "201668": [[78, 157]], "201669": [[1, 9], [12, 136], [139, 141], [143, 165]], "201671": [[1, 120], [122, 174], [177, 462], [464, 482], [485, 499], [501, 545], [547, 571], [574, 614], [617, 766], [768, 896], [899, 911], [914, 1007]], "201678": [[1, 120]], "201679": [[1, 110], [112, 241], [244, 298], [302, 321], [324, 461], [463, 493]], "201692": [[78, 81], [83, 180]], "201705": [[65, 73], [75, 109], [111, 187]], "201706": [[1, 62]], "201707": [[1, 23], [26, 42], [45, 115], [118, 130], [133, 160], [163, 276], [279, 471], [473, 511], [514, 545], [547, 570], [572, 622], [625, 735], [738, 806], [809, 876], [879, 964]], "201708": [[1, 87]], "201718": [[58, 113]], "201727": [[67, 185]], "201729": [[6, 20], [22, 75], [77, 126], [129, 154], [156, 216], [219, 244]], "201794": [[58, 100]], "201802": [[68, 209], [211, 214], [216, 220], [223, 288], [290, 296]], "201816": [[1, 72], [74, 105], [107, 157]], "201817": [[1, 274]], "201818": [[1, 1]], "201819": [[1, 94], [96, 241]], "201824": [[1, 139], [141, 176], [179, 286], [289, 492]], "202012": [[98, 121], [126, 131]], "202013": [[1, 2], [5, 35], [38, 57]], "202014": [[1, 5], [8, 14], [16, 18], [20, 77], [79, 102], [104, 174], [177, 190], [192, 196]], "202016": [[1, 48], [51, 134], [137, 177], [179, 743], [745, 831], [834, 890], [893, 896], [898, 932], [934, 1016]], "202044": [[84, 101], [104, 266], [268, 461], [463, 466]], "202045": [[1, 30], [33, 72], [75, 528], [531, 601], [603, 785], [788, 809], [822, 825]], "202054": [[6, 266], [268, 489], [492, 605], [608, 631]], "202060": [[76, 142], [144, 154], [156, 244], [246, 497], [499, 642], [644, 682], [684, 743], [746, 941]], "202074": [[66, 174]], "202075": [[1, 18], [21, 187], [189, 214], [217, 247], [250, 342], [345, 406], [409, 497], [500, 537], [539, 539], [542, 560], [562, 615], [618, 630]], "202084": [[83, 156], [159, 177], [179, 180], [182, 239]], "202087": [[1, 25], [28, 208], [210, 357], [359, 652], [655, 853], [856, 1093]], "202088": [[1, 286]], "202093": [[1, 104], [107, 320], [322, 360]], "202116": [[59, 64]], "202178": [[67, 78], [80, 88], [91, 177], [180, 186], [188, 337], [340, 377], [379, 425], [428, 475], [478, 548], [551, 717], [720, 965], [967, 1444], [1447, 1505], [1508, 1519], [1522, 1558]], "202205": [[94, 114]], "202209": [[1, 48], [51, 159]], "202237": [[39, 128], [131, 131], [134, 219], [222, 235], [238, 275], [277, 289], [291, 316], [319, 419], [422, 538], [540, 936], [939, 950], [952, 976], [979, 1081]], "202272": [[76, 112], [115, 141], [144, 185], [188, 205], [208, 305], [307, 313], [315, 371], [436, 480], [483, 555], [558, 577], [579, 683], [686, 705], [707, 740], [742, 890], [937, 1295], [1299, 1481]], "202299": [[68, 84], [87, 141], [143, 193], [196, 358], [361, 379], [382, 414], [416, 452], [455, 555]], "202305": [[1, 89], [92, 130], [133, 323]], "202314": [[67, 104], [107, 265], [268, 284]], "202328": [[46, 89], [92, 156], [158, 276], [278, 291], [294, 434], [437, 460], [463, 586], [588, 610], [612, 614]], "202333": [[1, 251]], "202389": [[81, 182], [185, 190], [192, 203]], "202469": [[87, 158], [160, 174], [177, 352]], "202472": [[1, 96], [99, 112]], "202477": [[1, 129], [131, 150]], "202478": [[1, 177], [180, 183], [186, 219], [222, 360], [362, 506], [509, 531], [534, 718], [720, 927], [929, 973], [975, 1029], [1031, 1186], [1189, 1212], [1215, 1248]], "202504": [[77, 96], [99, 133], [135, 182], [184, 211], [213, 241], [243, 392], [395, 527], [529, 617], [620, 715], [718, 763], [766, 1172], [1174, 1247], [1250, 1471], [1474, 1679], [1682, 1704]], "202972": [[1, 30], [33, 184], [186, 290], [292, 295], [298, 371], [374, 429], [431, 544]], "202973": [[1, 234], [237, 305], [308, 437], [439, 530], [532, 541], [544, 552], [555, 851], [853, 1408]], "203002": [[77, 128], [130, 141], [144, 207], [209, 267], [270, 360], [362, 501], [504, 641], [643, 669], [671, 671], [674, 717], [720, 1034], [1037, 1070], [1073, 1370], [1372, 1392], [1395, 1410], [1413, 1596]], "203894": [[82, 272], [275, 477], [480, 902], [905, 1322]], "203909": [[79, 113], [116, 117], [120, 140], [143, 382]], "203912": [[1, 306], [308, 566], [569, 609], [611, 698], [701, 820], [823, 865], [867, 1033], [1035, 1321]], "203985": [[1, 10]], "203986": [[1, 45]], "203987": [[1, 9], [12, 241], [243, 339], [342, 781], [784, 1014]], "203991": [[1, 3]], "203992": [[1, 15]], "203994": [[1, 56], [59, 136], [139, 304], [306, 342], [344, 425]], "204100": [[117, 139]], "204101": [[1, 83]], "204113": [[82, 96], [98, 102], [105, 127], [129, 191], [194, 258], [261, 327], [329, 388], [390, 400], [402, 583], [585, 690], [693, 693], [696, 696]], "204114": [[1, 364]], "204238": [[23, 52], [55, 60]], "204250": [[92, 118], [121, 177], [179, 285], [287, 336], [339, 400], [403, 521], [524, 543], [546, 682], [684, 803]], "204511": [[1, 60]], "204541": [[5, 39], [42, 42], [44, 139], [142, 149], [151, 204]], "204544": [[1, 11], [13, 93], [96, 195], [197, 224], [226, 334], [337, 426]], "204552": [[1, 9]], "204553": [[1, 51], [53, 60], [63, 101], [103, 104]], "204554": [[1, 5], [7, 221], [224, 455], [458, 470], [472, 481], [483, 514]], "204555": [[1, 329], [331, 334]], "204563": [[91, 99], [102, 178], [180, 219], [222, 229], [231, 364], [366, 366], [369, 470], [473, 524], [527, 571]], "204564": [[1, 84], [87, 89], [92, 159], [161, 187], [190, 191], [193, 293], [296, 315], [317, 340], [343, 427], [429, 434], [437, 735], [737, 855], [858, 1206], [1209, 1248], [1251, 1284]], "204565": [[1, 48]], "204566": [[1, 12]], "204567": [[1, 38]], "204576": [[49, 192], [195, 301]], "204577": [[1, 46], [49, 64], [67, 105], [107, 170], [173, 181], [183, 193], [196, 653], [656, 669], [671, 740], [742, 913], [915, 1057], [1059, 1115], [1117, 1287]], "204599": [[73, 83], [85, 94], [97, 121], [124, 125], [128, 173], [175, 240], [243, 245], [248, 264], [266, 292], [294, 335]], "204601": [[1, 25], [28, 62], [65, 80], [83, 89], [92, 290], [292, 563], [565, 591], [593, 652], [655, 780], [783, 812], [814, 892], [894, 984], [986, 1003], [1006, 1038], [1040, 1088], [1091, 1102], [1105, 1161], [1164, 1255]], "205086": [[95, 149]], "205111": [[88, 390], [392, 441], [444, 449]], "205158": [[81, 289], [292, 313], [315, 473], [476, 591], [594, 595], [597, 612], [615, 663], [665, 667], [672, 685], [687, 733], [736, 741]], "205193": [[80, 109], [111, 349], [352, 486], [488, 650], [652, 712], [714, 902]], "205217": [[1, 12], [16, 111], [113, 171], [174, 250], [253, 322]], "205233": [[94, 153]], "205236": [[1, 190], [193, 207], [209, 260], [263, 331], [334, 352]], "205238": [[1, 6], [9, 199], [202, 254], [256, 304], [306, 355], [358, 381], [384, 596], [598, 621]], "205303": [[35, 54], [90, 132], [135, 153]], "205310": [[76, 306], [309, 313], [316, 316], [319, 321], [324, 457], [460, 559]], "205311": [[1, 85], [88, 92], [95, 183], [186, 395], [397, 592], [595, 910], [913, 1260]], "205339": [[71, 175], [178, 213], [216, 230], [233, 262], [265, 404]], "205344": [[1, 83], [86, 104], [106, 359], [362, 431], [433, 949], [951, 967], [969, 1127], [1129, 1346], [1348, 1586]], "205515": [[82, 201], [203, 216]], "205519": [[1, 47], [50, 172], [175, 367], [370, 386], [389, 472]], "205526": [[1, 269], [272, 277], [280, 332]], "205614": [[1, 4], [7, 40]], "205617": [[1, 29], [32, 102], [105, 123], [125, 140], [143, 264], [266, 448], [451, 532], [534, 547]], "205618": [[1, 12]], "205620": [[1, 175]], "205666": [[60, 119], [122, 165], [168, 259], [261, 322], [325, 578], [580, 594], [597, 721], [724, 739]], "205667": [[1, 165], [168, 282], [285, 318], [321, 412], [415, 689], [692, 751], [754, 774], [777, 1109]], "205683": [[76, 82], [85, 178], [181, 198], [201, 305]], "205690": [[1, 40]], "205694": [[1, 205], [208, 230], [233, 347], [350, 452], [455, 593], [595, 890]], "205718": [[49, 75], [78, 97], [100, 103], [105, 176], [178, 338], [341, 361], [363, 524], [527, 531], [534, 589], [591, 734]], "205774": [[1, 80]], "205777": [[1, 9]], "205781": [[1, 89], [91, 197], [200, 509]], "205826": [[80, 232], [235, 303], [306, 469]], "205833": [[84, 86], [89, 121], [123, 155], [157, 165], [167, 173], [176, 219], [221, 267], [270, 312], [315, 346], [350, 355], [360, 366]], "205834": [[1, 12], [14, 202]], "205908": [[68, 200], [202, 214]], "205921": [[22, 73], [76, 268], [271, 394], [397, 401], [410, 428], [431, 498], [500, 571], [574, 779], [782, 853]], "206066": [[89, 155]], "206088": [[86, 159], [161, 178], [181, 199], [202, 286]], "206102": [[83, 116], [120, 130], [133, 208], [211, 235], [238, 246], [249, 278], [281, 349]], "206187": [[107, 169], [172, 242], [245, 288], [290, 340], [343, 427], [429, 435], [437, 486], [489, 569], [571, 647], [649, 662], [664, 708]], "206188": [[1, 40], [42, 58]], "206199": [[1, 75], [77, 82], [85, 117]], "206207": [[82, 130], [132, 176], [179, 194], [196, 388], [390, 419], [422, 447], [450, 569], [572, 690]], "206208": [[1, 470], [472, 518]], "206210": [[11, 25], [28, 275], [277, 298], [300, 383], [386, 469]], "206243": [[62, 169], [172, 196], [199, 354], [357, 433], [435, 448], [451, 533], [536, 554], [557, 723], [726, 905]], "206245": [[1, 62]], "206246": [[1, 14], [16, 237], [240, 285], [288, 407], [412, 676], [678, 704], [706, 785], [787, 962], [965, 997], [1000, 1198], [1201, 1290]], "206257": [[1, 29]], "206258": [[1, 36], [39, 223], [226, 249]], "206302": [[1, 8], [11, 33], [36, 44], [47, 82], [84, 108], [110, 149], [151, 186], [189, 229], [231, 232], [234, 241], [243, 276]], "206303": [[1, 19], [23, 286]], "206304": [[1, 4], [6, 70]], "206331": [[91, 222], [225, 314]], "206389": [[88, 185], [187, 249], [252, 272], [275, 392]], "206391": [[1, 55], [57, 98]], "206401": [[69, 90], [92, 194], [197, 210], [212, 249], [251, 265], [267, 411]], "206446": [[92, 141], [143, 159], [162, 205], [208, 301], [304, 442], [445, 445], [448, 474], [476, 616], [619, 872], [874, 910], [912, 948], [950, 989], [992, 1030], [1033, 1075], [1109, 1149]], "206448": [[1, 143], [145, 559], [561, 1170], [1173, 1231], [1235, 1237]], "206466": [[24, 137], [140, 277], [280, 296], [299, 303], [306, 405], [407, 419], [422, 477], [480, 511], [514, 682]], "206476": [[73, 129], [133, 137], [140, 141], [143, 219]], "206477": [[1, 14], [16, 31], [33, 41], [44, 51], [53, 70], [73, 75], [77, 89], [91, 94], [97, 115], [118, 184]], "206478": [[1, 27], [29, 136], [139, 147]], "206484": [[73, 95], [98, 133], [136, 163], [166, 186], [189, 384], [387, 463], [465, 551], [554, 554], [556, 673]], "206512": [[91, 123], [125, 133], [136, 161], [163, 190], [193, 201], [203, 212], [214, 332], [334, 584], [587, 604], [607, 1005], [1008, 1123], [1126, 1163], [1165, 1211]], "206513": [[3, 39], [42, 188], [191, 234], [237, 238], [241, 329]], "206542": [[1, 115], [117, 165], [168, 511], [514, 547], [550, 603], [606, 668], [671, 727], [730, 739], [741, 836]], "206550": [[77, 132], [135, 155]], "206572": [[37, 47]], "206573": [[2, 14]], "206574": [[1, 87]], "206575": [[1, 7], [10, 10], [12, 75]], "206594": [[72, 107], [110, 246], [249, 281]], "206595": [[1, 34], [37, 42], [45, 193]], "206596": [[1, 13], [15, 220], [222, 228], [231, 236], [239, 292], [295, 695], [697, 728], [730, 810]], "206598": [[1, 81], [83, 103], [105, 588], [591, 657], [659, 719]], "206605": [[1, 36], [39, 82]], "206744": [[49, 157], [160, 192], [195, 395], [398, 452]], "206745": [[1, 81], [84, 199], [202, 224], [227, 237], [240, 304], [306, 318], [321, 720], [723, 796], [799, 894], [897, 944], [946, 1106], [1108, 1524], [1527, 1862], [1988, 1996]], "206859": [[79, 210], [212, 258], [260, 323], [325, 356], [359, 609], [612, 681], [684, 732], [734, 768], [771, 808], [811, 827], [830, 848]], "206866": [[1, 30], [33, 113], [115, 274]], "206868": [[1, 3], [10, 16]], "206869": [[1, 251], [253, 271], [274, 502], [507, 520], [522, 566], [568, 752]], "206897": [[1, 34], [38, 61], [63, 102], [109, 109], [111, 112], [114, 131], [133, 137]], "206901": [[1, 98]], "206906": [[1, 31], [38, 94], [96, 136], [138, 139], [142, 149], [151, 175], [177, 218]], "206940": [[1, 151], [153, 153], [155, 298], [301, 382], [384, 712], [715, 803], [805, 960], [963, 1027]], "207099": [[83, 134], [137, 172], [175, 213], [216, 314], [316, 320], [323, 330], [333, 367], [370, 481], [484, 602], [605, 755], [757, 1046], [1048, 1171]], "207100": [[1, 91], [94, 98]], "207214": [[57, 112], [114, 177], [179, 181], [184, 196], [199, 220], [223, 262], [265, 405], [408, 482], [485, 640], [643, 708], [718, 757], [759, 808], [811, 829]], "207217": [[1, 32]], "207219": [[1, 112]], "207220": [[1, 160]], "207221": [[1, 102]], "207222": [[1, 17], [20, 289]], "207231": [[70, 84], [86, 121], [123, 184], [187, 189], [192, 303], [306, 354], [357, 481], [484, 504], [508, 549], [552, 626], [628, 690], [693, 875], [878, 1000], [1003, 1170], [1173, 1187], [1189, 1227], [1229, 1415], [1418, 1445], [1447, 1505]], "207233": [[1, 119], [121, 155]], "207269": [[80, 394], [397, 436], [439, 463], [466, 551], [568, 577]], "207273": [[3, 877]], "207279": [[68, 138], [141, 149], [151, 237], [240, 266], [269, 307], [309, 416], [498, 551], [554, 640], [643, 961], [963, 1095], [1098, 1160]], "207320": [[1, 110], [112, 350]], "207371": [[72, 117], [120, 124]], "207372": [[1, 27], [30, 113], [116, 154], [156, 174], [176, 478], [480, 501]], "207397": [[32, 77], [80, 140], [143, 179]], "207398": [[1, 14], [16, 35]], "207454": [[79, 95], [98, 123], [126, 259], [261, 363], [365, 458], [461, 498], [501, 609], [612, 632], [635, 781], [784, 866], [869, 974], [977, 1064], [1067, 1079], [1081, 1321], [1323, 1464], [1467, 1569], [1571, 1604], [1607, 1712], [1714, 1988]], "207469": [[1, 31], [34, 51]], "207477": [[76, 104], [107, 111], [114, 147], [150, 295], [298, 483], [486, 494], [497, 527], [530, 563], [565, 570]], "207487": [[50, 98], [101, 311], [313, 359], [363, 468], [471, 472]], "207488": [[1, 63], [66, 92], [95, 113], [116, 198], [200, 250], [252, 288], [291, 365], [368, 377], [379, 440]], "207490": [[1, 48], [51, 111]], "207491": [[1, 176], [179, 458]], "207492": [[1, 20], [23, 298]], "207515": [[79, 109], [112, 132], [134, 208], [211, 225], [228, 320], [322, 381], [383, 498], [500, 730], [733, 849], [851, 954], [957, 994], [997, 1052], [1055, 1143], [1145, 1211]], "207517": [[1, 12], [15, 57]], "207518": [[1, 59], [61, 83]], "207882": [[22, 45]], "207883": [[1, 1], [3, 4], [7, 75]], "207884": [[1, 106], [108, 183]], "207885": [[1, 90]], "207886": [[1, 30], [32, 90], [92, 156], [158, 166], [168, 171]], "207889": [[1, 43], [47, 57], [60, 303], [306, 442], [445, 445], [447, 551], [553, 731], [733, 907], [910, 945]], "207898": [[1, 33], [36, 57], [60, 235], [239, 257], [260, 288]], "207905": [[75, 196], [198, 281], [284, 329], [331, 402], [404, 565], [568, 672], [675, 805], [807, 850], [852, 861], [864, 884], [886, 1180], [1183, 1283], [1285, 1331], [1333, 1515], [1518, 1734], [1737, 1796]], "207920": [[84, 146], [149, 241], [243, 261], [264, 291], [294, 486], [489, 518], [520, 598], [600, 708], [710, 826]], "207921": [[1, 37], [40, 58]], "207922": [[1, 69], [71, 100], [103, 126], [129, 242], [274, 291]], "207924": [[1, 52], [54, 171], [173, 178], [181, 339]], "208307": [[2, 42], [45, 45], [47, 70], [72, 147], [150, 252], [256, 259], [262, 275], [278, 342], [345, 450], [453, 527], [530, 583], [586, 605], [608, 616], [618, 667], [670, 761], [763, 798], [800, 889], [891, 893], [896, 1055], [1057, 1205], [1208, 1294], [1297, 1328]], "208339": [[77, 89], [91, 122], [125, 208], [211, 346], [349, 363]], "208341": [[1, 84], [86, 117], [120, 513], [515, 685], [688, 693], [695, 775], [777, 824]], "208351": [[83, 97], [100, 356], [359, 369]], "208353": [[1, 76], [78, 269], [271, 348]], "208357": [[1, 70], [73, 507]], "208390": [[72, 128], [130, 169]], "208391": [[52, 82], [84, 162], [164, 216], [219, 493], [495, 498], [500, 523], [526, 533], [535, 588], [591, 660], [663, 869]], "208427": [[49, 89], [92, 161], [164, 164], [166, 173], [175, 268], [271, 312], [315, 315], [317, 335], [337, 361], [364, 402], [404, 422], [425, 577], [580, 647]], "208428": [[1, 58], [61, 68], [70, 156], [159, 227]], "208429": [[1, 56], [59, 139], [141, 159], [162, 237], [240, 440], [442, 452], [455, 589], [592, 712], [715, 922]], "208487": [[2, 26], [29, 159], [161, 307], [309, 459], [462, 476], [479, 632]], "208509": [[71, 232]], "208538": [[2, 43]], "208540": [[1, 26], [29, 98]], "208541": [[1, 57], [59, 173], [175, 376], [378, 417]], "208551": [[119, 193], [195, 212], [215, 300], [303, 354], [356, 554], [557, 580]], "208686": [[73, 79], [82, 181], [183, 224], [227, 243], [246, 311], [313, 463]]} \ No newline at end of file diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/crab.cfg b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/crab.cfg deleted file mode 100644 index 751898d9fbdfd..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/crab.cfg +++ /dev/null @@ -1,57 +0,0 @@ -[CRAB] - -jobtype = cmssw -scheduler = condor -#scheduler = glite -#scheduler = glidein -#scheduler = lsf -use_server = 0 - - -[CMSSW] -dbs_url = http://cmsdbsprod.cern.ch/cms_dbs_prod_global/servlet/DBSServlet -datasetpath=/Mu/querten-EXOHSCPSkim7TeV-0bc44962c8c6b23d45ce69c867f520ea-EXOHSCP/USER -pset=HSCParticleProducer_cfg.py - -lumi_mask=OfficialLumi.json -total_number_of_lumis =-1 -lumis_per_job = 50 -runselection = 100000-900000 - -pycfg_params=globalTag=GR_P_V42B::All - -### The output files (comma separated list) -#output_file = HSCP.root, HSCP_tree.root -output_file = HSCP.root - -[USER] -return_data = 0 -copy_data = 1 - -#storage_element = ingrid-se02.cism.ucl.ac.be -#storage_path = /srm/managerv2?SFN=/storage/data/cms -#storage_port = 8444 -#user_remote_dir = /store/user/quertenmont/12_08_16_HSCP_EDM2011/FWLite_Data12 -#check_user_remote_dir = 0 -#publish_data = 0 - -check_user_remote_dir = 0 -publish_data = 0 -user_remote_dir = HSCPEDMUpdateData2012_30Nov2012 -storage_element = T3_US_FNALLPC - -additional_input_files = Data7TeV_Deco_SiStripDeDxMip_3D_Rcd.db - -#[GRID] -#ce_black_list = -#rb = CERN -#virtual_organization = cms -#role = priorityuser -#ce_black_list = grid.icm.edu.pl -#ce_white_list = ucl.ac.be,T2_BE_UCL - - -#[LSF] -#queue=8nh - - diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/multicrab.cfg b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/multicrab.cfg deleted file mode 100644 index 994a85ea15dc7..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Data/multicrab.cfg +++ /dev/null @@ -1,733 +0,0 @@ -####################################################### 2012 DATA ####################################################### - -[MULTICRAB] -cfg=crab.cfg - -[COMMON] -CMSSW.pset = HSCParticleProducer_cfg.py -CMSSW.lumi_mask = OfficialLumi.json -CMSSW.dbs_url = http://cmsdbsprod.cern.ch/cms_dbs_prod_global/servlet/DBSServlet - - -#####SingleMu PD - -#[RunA_SingleMu_190645_190999] -#CMSSW.datasetpath = /SingleMu/Run2012A-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 190645-190999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunA_SingleMu_191000_191999] -#CMSSW.datasetpath = /SingleMu/Run2012A-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 191000-191999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -[RunA_SingleMu_192000_192999] -CMSSW.datasetpath = /SingleMu/Run2012A-EXOHSCP-13Jul2012-v1/USER -CMSSW.runselection = 192000-192999 -CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunA_SingleMu_193000_193621] -#CMSSW.datasetpath = /SingleMu/Run2012A-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 193000-193621 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunB_SingleMu_193622_193999] -#CMSSW.datasetpath = /SingleMu/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 193622-193999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunB_SingleMu_194000_194999] -#CMSSW.datasetpath = /SingleMu/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 194000-194999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunB_SingleMu_195000_195999] -#CMSSW.datasetpath = /SingleMu/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 195000-195999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunB_SingleMu_196000_196531] -#CMSSW.datasetpath = /SingleMu/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 196000-196531 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunC_SingleMu_196532_197999] -#CMSSW.datasetpath = /SingleMu/Run2012C-EXOHSCP-PromptSkim-v2/USER -#CMSSW.runselection = 196532-197999 -##To correct bad DT timing calibrations -#CMSSW.pycfg_params=globalTag=FT_53_V10_AN2::All -# -##remove run 198346 to 198487 because of RPC trigger problem -#[RunC_SingleMu_198000_198345] -#CMSSW.datasetpath = /SingleMu/Run2012C-EXOHSCP-PromptSkim-v2/USER -#CMSSW.runselection = 198000-198345 -##To correct bad DT timing calibrations -#CMSSW.pycfg_params=globalTag=FT_53_V10_AN2::All -# -#[RunC_SingleMu_198488_198919] -#CMSSW.datasetpath = /SingleMu/Run2012C-EXOHSCP-PromptSkim-v2/USER -#CMSSW.runselection = 198488-198919 -# -##move to PrompV3 -#[RunC_SingleMu_198920_198999] -#CMSSW.datasetpath = /SingleMu/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 198920-198999 -# -# -#[RunC_SingleMu_199000_199999] -#CMSSW.datasetpath = /SingleMu/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 199000-199999 -# -#[RunC_SingleMu_200000_200532] -#CMSSW.datasetpath = /SingleMu/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 200000-200532 -# -#[RunC_SingleMu_200533_202016] -#CMSSW.datasetpath = /SingleMu/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 200533-202016 -# -#[RunC_SingleMu_202017_203002] -#CMSSW.datasetpath = /SingleMu/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 202017-203002 - -#[RunD_SingleMu_203003_203300] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203003-203300 - -#[RunD_SingleMu_203301_203600] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203301-203600 - -#[RunD_SingleMu_203601_203900] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203601-203900 - -#[RunD_SingleMu_203901_204200] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203901-204200 - -#[RunD_SingleMu_204201_204500] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 204201-204500 - -#[RunD_SingleMu_204501_204800] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 204501-204800 - -#[RunD_SingleMu_204801_205100] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 204801-205100 - -#[RunD_SingleMu_205101_205400] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 205101-205400 - -#[RunD_SingleMu_205401_205700] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 205401-205700 - -#[RunD_SingleMu_205701_206000] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 205701-206000 - -#[RunD_SingleMu_206001_206300] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206001-206300 - -#[RunD_SingleMu_206301_206600] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206301-206600 - -#[RunD_SingleMu_206601_206900] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206601-206900 - -#[RunD_SingleMu_206901_207200] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206901-207200 - -#[RunD_SingleMu_207201_207500] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 207201-207500 - -#[RunD_SingleMu_207501_207800] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 207501-207800 - -#[RunD_SingleMu_207801_208100] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 207801-208100 - -#[RunD_SingleMu_208101_208357] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 208101-208357 - -#[RunD_SingleMu_208358_208686] -#CMSSW.datasetpath = /SingleMu/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 208358-208686 - -######MET PD -# -#[RunA_MET_190645_190999] -#CMSSW.datasetpath = /MET/Run2012A-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 190645-190999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunA_MET_191000_191999] -#CMSSW.datasetpath = /MET/Run2012A-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 191000-191999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -[RunA_MET_192000_192999] -CMSSW.datasetpath = /MET/Run2012A-EXOHSCP-13Jul2012-v1/USER -CMSSW.runselection = 192000-192999 -CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunA_MET_193000_193621] -#CMSSW.datasetpath = /MET/Run2012A-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 193000-193621 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunB_MET_193622_193999] -#CMSSW.datasetpath = /MET/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 193622-193999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunB_MET_194000_194999] -#CMSSW.datasetpath = /MET/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 194000-194999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunB_MET_195000_195999] -#CMSSW.datasetpath = /MET/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 195000-195999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunB_MET_196000_196531] -#CMSSW.datasetpath = /MET/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 196000-196531 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunC_MET_196532_197999] -#CMSSW.datasetpath = /MET/Run2012C-EXOHSCP-PromptSkim-v2/USER -#CMSSW.runselection = 196532-197999 -##To correct bad DT timing calibrations -#CMSSW.pycfg_params=globalTag=FT_53_V10_AN2::All -# -##remove run 198346 to 198487 because of RPC trigger problem -#[RunC_MET_198000_198345] -#CMSSW.datasetpath = /MET/Run2012C-EXOHSCP-PromptSkim-v2/USER -#CMSSW.runselection = 198000-198345 -##To correct bad DT timing calibrations -#CMSSW.pycfg_params=globalTag=FT_53_V10_AN2::All -# -#[RunC_MET_198488_198919] -#CMSSW.datasetpath = /MET/Run2012C-EXOHSCP-PromptSkim-v2/USER -#CMSSW.runselection = 198488-198919 -# -##move to PrompV3 -#[RunC_MET_198920_198999] -#CMSSW.datasetpath = /MET/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 198920-198999 -# -# -#[RunC_MET_199000_199999] -#CMSSW.datasetpath = /MET/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 199000-199999 -# -#[RunC_MET_200000_200532] -#CMSSW.datasetpath = /MET/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 200000-200532 -# -#[RunC_MET_200533_202016] -#CMSSW.datasetpath = /MET/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 200533-202016 -# -#[RunC_MET_202017_203002] -#CMSSW.datasetpath = /MET/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 202017-203002 -# - -#[RunD_MET_203003_203300] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203003-203300 - -#[RunD_MET_203301_203600] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203301-203600 - -#[RunD_MET_203601_203900] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203601-203900 - -#[RunD_MET_203901_204200] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203901-204200 - -#[RunD_MET_204201_204500] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 204201-204500 - -#[RunD_MET_204501_204800] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 204501-204800 - -#[RunD_MET_204801_205100] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 204801-205100 - -#[RunD_MET_205101_205400] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 205101-205400 - -#[RunD_MET_205401_205700] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 205401-205700 - -#[RunD_MET_205701_206000] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 205701-206000 - -#[RunD_MET_206001_206300] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206001-206300 - -#[RunD_MET_206301_206600] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206301-206600 - -#[RunD_MET_206601_206900] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206601-206900 - -#[RunD_MET_206901_207200] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206901-207200 - -#[RunD_MET_207201_207500] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 207201-207500 - -#[RunD_MET_207501_207800] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 207501-207800 - -#[RunD_MET_207801_208100] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 207801-208100 - -#[RunD_MET_208101_208357] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 208101-208357 - -#[RunD_MET_208358_208686] -#CMSSW.datasetpath = /MET/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 208358-208686 - -######NoBPTX PD -# -##missing dataset -##[RunA_NoBPTX_190645_190999] -##CMSSW.datasetpath = /NoBPTX/Run2012A-EXOHSCP-13Jul2012-v1/USER -##CMSSW.runselection = 190645-190999 -##CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -##missing dataset -##[RunA_NoBPTX_191000_191999] -##CMSSW.datasetpath = /NoBPTX/Run2012A-EXOHSCP-13Jul2012-v1/USER -##CMSSW.runselection = 191000-191999 -##CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -##missing dataset -##[RunA_NoBPTX_192000_192999] -##CMSSW.datasetpath = /NoBPTX/Run2012A-EXOHSCP-13Jul2012-v1/USER -##CMSSW.runselection = 192000-192999 -##CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -##missing dataset -##[RunA_NoBPTX_193000_193621] -##CMSSW.datasetpath = /NoBPTX/Run2012A-EXOHSCP-13Jul2012-v1/USER -##CMSSW.runselection = 193000-193621 -##CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunB_NoBPTX_193622_193999] -#CMSSW.datasetpath = /NoBPTX/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 193622-193999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunB_NoBPTX_194000_194999] -#CMSSW.datasetpath = /NoBPTX/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 194000-194999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunB_NoBPTX_195000_195999] -#CMSSW.datasetpath = /NoBPTX/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 195000-195999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunB_NoBPTX_196000_196531] -#CMSSW.datasetpath = /NoBPTX/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 196000-196531 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunC_NoBPTX_196532_197999] -#CMSSW.datasetpath = /NoBPTX/Run2012C-EXOHSCP-PromptSkim-v2/USER -#CMSSW.runselection = 196532-197999 -##To correct bad DT timing calibrations -#CMSSW.pycfg_params=globalTag=FT_53_V10_AN2::All -# -##remove run 198346 to 198487 because of RPC trigger problem -#[RunC_NoBPTX_198000_198345] -#CMSSW.datasetpath = /NoBPTX/Run2012C-EXOHSCP-PromptSkim-v2/USER -#CMSSW.runselection = 198000-198345 -##To correct bad DT timing calibrations -#CMSSW.pycfg_params=globalTag=FT_53_V10_AN2::All -# -#[RunC_NoBPTX_198488_198919] -#CMSSW.datasetpath = /NoBPTX/Run2012C-EXOHSCP-PromptSkim-v2/USER -#CMSSW.runselection = 198488-198919 -# -##move to PrompV3 -#[RunC_NoBPTX_198920_198999] -#CMSSW.datasetpath = /NoBPTX/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 198920-198999 -# -# -#[RunC_NoBPTX_199000_199999] -#CMSSW.datasetpath = /NoBPTX/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 199000-199999 -# -#[RunC_NoBPTX_200000_200532] -#CMSSW.datasetpath = /NoBPTX/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 200000-200532 -# -#[RunC_NoBPTX_200533_202016] -#CMSSW.datasetpath = /NoBPTX/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 200533-202016 -# -#[RunC_NoBPTX_202017_203002] -#CMSSW.datasetpath = /NoBPTX/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 202017-203002 -# - -#[RunD_NoBPTX_203003_203300] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203003-203300 - -#[RunD_NoBPTX_203301_203600] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203301-203600 - -#[RunD_NoBPTX_203601_203900] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203601-203900 - -#[RunD_NoBPTX_203901_204200] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203901-204200 - -#[RunD_NoBPTX_204201_204500] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 204201-204500 - -#[RunD_NoBPTX_204501_204800] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 204501-204800 - -#[RunD_NoBPTX_204801_205100] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 204801-205100 - -#[RunD_NoBPTX_205101_205400] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 205101-205400 - -#[RunD_NoBPTX_205401_205700] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 205401-205700 - -#[RunD_NoBPTX_205701_206000] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 205701-206000 - -#[RunD_NoBPTX_206001_206300] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206001-206300 - -#[RunD_NoBPTX_206301_206600] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206301-206600 - -#[RunD_NoBPTX_206601_206900] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206601-206900 - -#[RunD_NoBPTX_206901_207200] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206901-207200 - -#[RunD_NoBPTX_207201_207500] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 207201-207500 - -#[RunD_NoBPTX_207501_207800] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 207501-207800 - -#[RunD_NoBPTX_207801_208100] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 207801-208100 - -#[RunD_NoBPTX_208101_208357] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 208101-208357 - -#[RunD_NoBPTX_208358_208686] -#CMSSW.datasetpath = /NoBPTX/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 208358-208686 - -######JetHT PD -# -##missing dataset -##[RunA_JetHT_190645_190999] -##CMSSW.datasetpath = /JetHT/Run2012A-EXOHSCP-13Jul2012-v1/USER -##CMSSW.runselection = 190645-190999 -# -##missing dataset -##[RunA_JetHT_191000_191999] -##CMSSW.datasetpath = /JetHT/Run2012A-EXOHSCP-13Jul2012-v1/USER -##CMSSW.runselection = 191000-191999 -# -##missing dataset -##[RunA_JetHT_192000_192999] -##CMSSW.datasetpath = /JetHT/Run2012A-EXOHSCP-13Jul2012-v1/USER -##CMSSW.runselection = 192000-192999 -# -##missing dataset -##[RunA_JetHT_193000_193621] -##CMSSW.datasetpath = /JetHT/Run2012A-EXOHSCP-13Jul2012-v1/USER -##CMSSW.runselection = 193000-193621 -# -#[RunB_JetHT_193622_193999] -#CMSSW.datasetpath = /JetHT/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 193622-193999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunB_JetHT_194000_194999] -#CMSSW.datasetpath = /JetHT/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 194000-194999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunB_JetHT_195000_195999] -#CMSSW.datasetpath = /JetHT/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 195000-195999 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunB_JetHT_196000_196531] -#CMSSW.datasetpath = /JetHT/Run2012B-EXOHSCP-13Jul2012-v1/USER -#CMSSW.runselection = 196000-196531 -#CMSSW.pycfg_params=globalTag=FT_53_V6_AN2::All -# -#[RunC_JetHT_196532_197999] -#CMSSW.datasetpath = /JetHT/Run2012C-EXOHSCP-PromptSkim-v2/USER -#CMSSW.runselection = 196532-197999 -##To correct bad DT timing calibrations -#CMSSW.pycfg_params=globalTag=FT_53_V10_AN2::All -# -##remove run 198346 to 198487 because of RPC trigger problem -#[RunC_JetHT_198000_198345] -#CMSSW.datasetpath = /JetHT/Run2012C-EXOHSCP-PromptSkim-v2/USER -#CMSSW.runselection = 198000-198345 -##To correct bad DT timing calibrations -#CMSSW.pycfg_params=globalTag=FT_53_V10_AN2::All -# -#[RunC_JetHT_198488_198919] -#CMSSW.datasetpath = /JetHT/Run2012C-EXOHSCP-PromptSkim-v2/USER -#CMSSW.runselection = 198488-198919 -# -##move to PrompV3 -#[RunC_JetHT_198920_198999] -#CMSSW.datasetpath = /JetHT/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 198920-198999 -# -# -#[RunC_JetHT_199000_199999] -#CMSSW.datasetpath = /JetHT/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 199000-199999 -# -#[RunC_JetHT_200000_200532] -#CMSSW.datasetpath = /JetHT/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 200000-200532 -# -#[RunC_JetHT_200533_202016] -#CMSSW.datasetpath = /JetHT/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 200533-202016 -# -#[RunC_JetHT_202017_203002] -#CMSSW.datasetpath = /JetHT/Run2012C-EXOHSCP-PromptSkim-v3/USER -#CMSSW.runselection = 202017-203002 -# - -#[RunD_JetHT_203003_203300] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203003-203300 - -#[RunD_JetHT_203301_203600] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203301-203600 - -#[RunD_JetHT_203601_203900] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203601-203900 - -#[RunD_JetHT_203901_204200] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 203901-204200 - -#[RunD_JetHT_204201_204500] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 204201-204500 - -#[RunD_JetHT_204501_204800] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 204501-204800 - -#[RunD_JetHT_204801_205100] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 204801-205100 - -#[RunD_JetHT_205101_205400] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 205101-205400 - -#[RunD_JetHT_205401_205700] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 205401-205700 - -#[RunD_JetHT_205701_206000] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 205701-206000 - -#[RunD_JetHT_206001_206300] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206001-206300 - -#[RunD_JetHT_206301_206600] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206301-206600 - -#[RunD_JetHT_206601_206900] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206601-206900 - -#[RunD_JetHT_206901_207200] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 206901-207200 - -#[RunD_JetHT_207201_207500] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 207201-207500 - -#[RunD_JetHT_207501_207800] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 207501-207800 - -#[RunD_JetHT_207801_208100] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 207801-208100 - -#[RunD_JetHT_208101_208357] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 208101-208357 - -#[RunD_JetHT_208358_208686] -#CMSSW.datasetpath = /JetHT/Run2012D-EXOHSCP-PromptSkim-v1/USER -#CMSSW.runselection = 208358-208686 - -######################################################## 2011 DATA ####################################################### -## -## -##[MULTICRAB] -##cfg=crab.cfg -## -##[COMMON] -##CMSSW.pset = HSCParticleProducer_cfg.py -##CMSSW.lumi_mask = OfficialLumi_2011.json -##CMSSW.dbs_url = http://cmsdbsprod.cern.ch/cms_dbs_prod_global/servlet/DBSServlet -## -######MET PD -## -###run on METBTag PD (this PD is then split on MET and BTAG) -##[RunA_MET_160329_164236] -##CMSSW.datasetpath = /METBTag/Run2011A-EXOHSCP-08Nov2011-v1/USER -##CMSSW.runselection = 160329-164236 -## -###run on MET dataset after we corrected the track max pT cut in the skim (had to rerun the skim by hand) -##[RunA_MET_165071_166033] -##CMSSW.datasetpath = /MET/exotica-EXOHSCPSkimMET2011RunA-v4-V2-bebb20aee6c411fa6cbaa468cdc55ea1-EXOHSCP/USER -##CMSSW.dbs_url = http://cmsdbsprod.cern.ch/cms_dbs_ph_analysis_02/servlet/DBSServlet -##CMSSW.runselection = 165071-166033 -## -###run on MET dataset with latest skim config -##[RunA_MET_166034_168437] -##CMSSW.datasetpath = /MET/Run2011A-EXOHSCP-PromptSkim-v4/USER -##CMSSW.runselection = 166034-168437 -## -###take rereco data where available -##[RunA_MET_170053_172619] -##CMSSW.datasetpath = /MET/Run2011A-EXOHSCP-05Aug2011-v1/USER -##CMSSW.runselection = 170053-172619 -## -###no rereco data available for that period -##[RunA_MET_172791_175770] -##CMSSW.datasetpath = /MET/Run2011A-EXOHSCP-PromptSkim-v6/USER -##CMSSW.runselection = 172791-175770 -## -###rereco data (the following is split in subsamples to keep the final file size reasonable) -##[RunB_MET_175831_177999] -##CMSSW.datasetpath = /MET/Run2011B-EXOHSCP-03Feb2012-v1/USER -##CMSSW.runselection = 175831-177999 -## -##[RunB_MET_178000_178999] -##CMSSW.datasetpath = /MET/Run2011B-EXOHSCP-03Feb2012-v1/USER -##CMSSW.runselection = 178000-178999 -## -##[RunB_MET_179000_180296] -##CMSSW.datasetpath = /MET/Run2011B-EXOHSCP-03Feb2012-v1/USER -##CMSSW.runselection = 179000-180296 -## -######SingleMU PD (here we have rereco everywher, but we split the same way as in MET PD) -## -##[RunA_SingleMu_160329_164236] -##CMSSW.datasetpath = /SingleMu/Run2011A-EXOHSCP-08Nov2011-v1/USER -##CMSSW.runselection = 160329-164236 -## -##[RunA_SingleMu_165071_166033] -##CMSSW.datasetpath = /SingleMu/Run2011A-EXOHSCP-08Nov2011-v1/USER -##CMSSW.runselection = 165071-166033 -## -##[RunA_SingleMu_166034_168437] -##CMSSW.datasetpath = /SingleMu/Run2011A-EXOHSCP-08Nov2011-v1/USER -##CMSSW.runselection = 166034-168437 -## -##[RunA_SingleMu_170053_172619] -##CMSSW.datasetpath = /SingleMu/Run2011A-EXOHSCP-08Nov2011-v1/USER -##CMSSW.runselection = 170053-172619 -## -##[RunA_SingleMu_172791_175770] -##CMSSW.datasetpath = /SingleMu/Run2011A-EXOHSCP-08Nov2011-v1/USER -##CMSSW.runselection = 172791-175770 -## -##[RunB_SingleMu_175831_177999] -##CMSSW.datasetpath = /SingleMu/Run2011B-EXOHSCP-19Nov2011-v1/USER -##CMSSW.runselection = 175831-177999 -## -##[RunB_SingleMu_178000_178999] -##CMSSW.datasetpath = /SingleMu/Run2011B-EXOHSCP-19Nov2011-v1/USER -##CMSSW.runselection = 178000-178999 -## -##[RunB_SingleMu_179000_180296] -##CMSSW.datasetpath = /SingleMu/Run2011B-EXOHSCP-19Nov2011-v1/USER -##CMSSW.runselection = 179000-180296 -## -# \ No newline at end of file diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/HSCParticleProducer_Bckg_cfg.py b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/HSCParticleProducer_Bckg_cfg.py deleted file mode 100644 index 5de3726001f48..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/HSCParticleProducer_Bckg_cfg.py +++ /dev/null @@ -1,27 +0,0 @@ -import sys, os -import FWCore.ParameterSet.Config as cms - -isSignal = False -isBckg = True -isData = False -isSkimmedSample = False -GTAG = 'POSTLS172_V3::All' - -#debug input files -#this list is overwritten by CRAB -InputFileList = cms.untracked.vstring( - '/store/relval/CMSSW_7_2_0_pre3/RelValZmumuJets_Pt_20_300_13/GEN-SIM-RECO/PU25ns_POSTLS172_V3_CondDBv2-v1/00000/2C7EF234-5E21-E411-99D8-0025905A60C6.root', - '/store/relval/CMSSW_7_2_0_pre3/RelValZmumuJets_Pt_20_300_13/GEN-SIM-RECO/PU25ns_POSTLS172_V3_CondDBv2-v1/00000/38D93E91-6221-E411-ADF4-0025905A60F4.root', - '/store/relval/CMSSW_7_2_0_pre3/RelValZmumuJets_Pt_20_300_13/GEN-SIM-RECO/PU25ns_POSTLS172_V3_CondDBv2-v1/00000/66520EC6-5C21-E411-9A49-0025905A48F2.root', - '/store/relval/CMSSW_7_2_0_pre3/RelValZmumuJets_Pt_20_300_13/GEN-SIM-RECO/PU25ns_POSTLS172_V3_CondDBv2-v1/00000/6E65F2CA-6221-E411-88B0-0025905B85F6.root', - '/store/relval/CMSSW_7_2_0_pre3/RelValZmumuJets_Pt_20_300_13/GEN-SIM-RECO/PU25ns_POSTLS172_V3_CondDBv2-v1/00000/A0FE331B-5B21-E411-AE0C-0025905A48D6.root', - '/store/relval/CMSSW_7_2_0_pre3/RelValZmumuJets_Pt_20_300_13/GEN-SIM-RECO/PU25ns_POSTLS172_V3_CondDBv2-v1/00000/AC325A29-5F21-E411-87C5-0025905B8576.root', - '/store/relval/CMSSW_7_2_0_pre3/RelValZmumuJets_Pt_20_300_13/GEN-SIM-RECO/PU25ns_POSTLS172_V3_CondDBv2-v1/00000/B2185429-A121-E411-B6B1-0025905A6088.root', - '/store/relval/CMSSW_7_2_0_pre3/RelValZmumuJets_Pt_20_300_13/GEN-SIM-RECO/PU25ns_POSTLS172_V3_CondDBv2-v1/00000/B40BDDCF-9F21-E411-8926-0025905B85E8.root', - '/store/relval/CMSSW_7_2_0_pre3/RelValZmumuJets_Pt_20_300_13/GEN-SIM-RECO/PU25ns_POSTLS172_V3_CondDBv2-v1/00000/B467B1A5-5D21-E411-AA34-0025905A611E.root', - '/store/relval/CMSSW_7_2_0_pre3/RelValZmumuJets_Pt_20_300_13/GEN-SIM-RECO/PU25ns_POSTLS172_V3_CondDBv2-v1/00000/B4E1729F-6421-E411-B76E-0025905A6122.root', - '/store/relval/CMSSW_7_2_0_pre3/RelValZmumuJets_Pt_20_300_13/GEN-SIM-RECO/PU25ns_POSTLS172_V3_CondDBv2-v1/00000/F2B25D76-5C21-E411-973A-0025905A6136.root', -) - -#main EDM tuple cfg that depends on the above parameters -execfile( os.path.expandvars('${CMSSW_BASE}/src/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/HSCParticleProducer_cfg.py') ) diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/HSCParticleProducer_Data_cfg.py b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/HSCParticleProducer_Data_cfg.py deleted file mode 100644 index ffc5471383482..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/HSCParticleProducer_Data_cfg.py +++ /dev/null @@ -1,39 +0,0 @@ -import sys, os -import FWCore.ParameterSet.Config as cms - -isSignal = False -isBckg = False -isData = True -isSkimmedSample = False -GTAG = 'GR_R_72_V2::All' - -#debug input files -#this list is overwritten by CRAB -InputFileList = cms.untracked.vstring( - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/00346527-C91C-E411-AB5E-02163E00ECEF.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/00ADAB1A-BC1C-E411-8EF1-002590494C40.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/0200D6AF-D41C-E411-8420-0025904B0FC0.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/0268317F-AB1C-E411-8022-02163E00ECFB.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/02F71E4D-B61C-E411-888D-02163E00CFB4.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/02FCA65D-AF1C-E411-BED1-18A90555637A.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/0405F2E2-B01C-E411-BC20-02163E00E5B2.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/041A1E18-C21C-E411-A77A-00259029EF3E.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/044F878E-E91C-E411-B9D8-02163E00CAA2.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/04C9C6B8-D31C-E411-88E9-003048F0E7BE.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/0634987C-A91C-E411-A9B5-02163E009C1E.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/0637E986-BE1C-E411-ACFF-02163E00EF94.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/0644EC20-C91C-E411-A376-02163E008EEA.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/068E6015-CB1C-E411-96C8-02163E00E95C.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/06D99999-BD1C-E411-896E-0025B3203748.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/08361980-BC1C-E411-97CB-003048C9C1D4.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/0836D993-B61C-E411-B245-02163E009BA7.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/08A1A887-C41C-E411-9BCB-02163E00FEC3.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/08B88B4E-D11C-E411-9EDB-02163E00B7A3.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/08CE58CE-EB1C-E411-BABA-02163E010110.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/08D1A881-9F1C-E411-8E09-02163E00ECE6.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/08F06953-BB1C-E411-8F27-003048C9C1D0.root', - '/store/relval/CMSSW_7_2_0_pre3/SingleMu/RECO/GR_R_72_V2_frozenHLT_RelVal_mu2012D-v1/00000/0A44FE81-A71C-E411-862A-02163E0104C0.root', -) - -#main EDM tuple cfg that depends on the above parameters -execfile( os.path.expandvars('${CMSSW_BASE}/src/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/HSCParticleProducer_cfg.py') ) diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/HSCParticleProducer_Signal_cfg.py b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/HSCParticleProducer_Signal_cfg.py deleted file mode 100644 index a632d364f0b41..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/HSCParticleProducer_Signal_cfg.py +++ /dev/null @@ -1,17 +0,0 @@ -import sys, os -import FWCore.ParameterSet.Config as cms - -isSignal = True -isBckg = False -isData = False -isSkimmedSample = False -GTAG = 'START72_V1::All' -InputFileList = cms.untracked.vstring() - -#debug input files -#this list is overwritten by CRAB -for i in range(0,10): - InputFileList.extend(["file:" + os.path.expandvars("${CMSSW_BASE}/src/") + "SampleProd/FARM_RECO/outputs/gluino1TeV_RECO_%04i.root" % i]) - -#main EDM tuple cfg that depends on the above parameters -execfile( os.path.expandvars('${CMSSW_BASE}/src/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/HSCParticleProducer_cfg.py') ) diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/HSCParticleProducer_cfg.py b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/HSCParticleProducer_cfg.py deleted file mode 100644 index 843987cccbfc2..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/HSCParticleProducer_cfg.py +++ /dev/null @@ -1,159 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("HSCPAnalysis") - -#The following parameters need to be provided -#isSignal, isBckg, isData, isSkimmedSample, GTAG, InputFileList -#isSignal = True -#isBckg = False -#isData = False -#isSkimmedSample = False -#GTAG = 'START72_V1::All' - -process.load("FWCore.MessageService.MessageLogger_cfi") -process.load('Configuration.Geometry.GeometryExtended2015Reco_cff') -process.load('Configuration.StandardSequences.MagneticField_cff') -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.load('Configuration.StandardSequences.Services_cff') - -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True), - SkipEvent = cms.untracked.vstring('ProductNotFound'), -) -process.MessageLogger.cerr.FwkReport.reportEvery = 1000 - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) -process.source = cms.Source("PoolSource", - fileNames = InputFileList, - inputCommands = cms.untracked.vstring("keep *", "drop *_MEtoEDMConverter_*_*") -) -if(isSignal): process.source.duplicateCheckMode = cms.untracked.string("noDuplicateCheck") - - -#for i in range(0,25): -# process.source.fileNames.extend(["file:/afs/cern.ch/user/q/querten/workspace/public/14_08_12_Run2HSCP/CMSSW_7_2_X_2014-08-18-0200/src/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Signals/../../../../../SampleProd/FARM_RECO/outputs/gluino1TeV_RECO_%04i.root" % i]) - -process.GlobalTag.globaltag = GTAG - -process.HSCPTuplePath = cms.Path() - -######################################################################## -#Run the Skim sequence if necessary -if(not isSkimmedSample): - process.nEventsBefSkim = cms.EDProducer("EventCountProducer") - - process.load('Configuration.Skimming.PDWG_EXOHSCP_cff') - process.load('HLTrigger.HLTfilters.hltHighLevel_cfi') - process.HSCPTrigger = process.hltHighLevel.clone() - process.HSCPTrigger.TriggerResultsTag = cms.InputTag( "TriggerResults", "", "HLT" ) - process.HSCPTrigger.andOr = cms.bool( True ) #OR - process.HSCPTrigger.throw = cms.bool( False ) - if(isData): - process.HSCPTrigger.HLTPaths = [ - "HLT_*_dEdx*", - "HLT_Mu40_eta2p1*", - "HLT_Mu50_eta2p1*", - "HLT_HT650_*", - "HLT_MET80_*", - "HLT_L2Mu*MET*", - "HLT_L2Mu*NoBPTX*", - "HLT_PFMET150_*", - ] - elif(isBckg): - #to be updated to Run2 Triggers, in the meanwhile keep all of them to study trigger efficiency - process.HSCPTrigger.HLTPaths = ["*"] - else: - #do not apply trigger filter on signal - process.HSCPTrigger.HLTPaths = ["*"] - - - - - process.HSCPTuplePath += process.nEventsBefSkim + process.HSCPTrigger + process.exoticaHSCPSeq - -######################################################################## - -#Run the HSCP EDM-tuple Sequence on skimmed sample -process.nEventsBefEDM = cms.EDProducer("EventCountProducer") -process.load("SUSYBSMAnalysis.HSCP.HSCParticleProducerFromSkim_cff") -process.HSCPTuplePath += process.nEventsBefEDM + process.HSCParticleProducerSeq - -######################################################################## -# Only for MC samples, save skimmed genParticles - -if(isSignal or isBckg): - process.load("PhysicsTools.HepMCCandAlgos.genParticles_cfi") - process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") - process.allGenParticles = cms.EDProducer("GenParticleProducer", - saveBarCodes = cms.untracked.bool(False), - src = cms.InputTag("VtxSmeared"), - abortOnUnknownPDGCode = cms.untracked.bool(False) - ) - process.genParticles = cms.EDFilter("GenParticleSelector", - filter = cms.bool(False), - src = cms.InputTag("allGenParticles"), - cut = cms.string('charge != 0 & pt > 5.0'), - stableOnly = cms.bool(True) - ) - - process.HSCPTuplePath += process.allGenParticles + process.genParticles - -######################################################################## - -#make the pool output -process.Out = cms.OutputModule("PoolOutputModule", - outputCommands = cms.untracked.vstring( - "drop *", - "keep EventAux_*_*_*", - "keep LumiSummary_*_*_*", - "keep edmMergeableCounter_*_*_*", - "keep GenRunInfoProduct_*_*_*", - "keep *_genParticles_*_HSCPAnalysis", - "keep GenEventInfoProduct_generator_*_*", - "keep *_offlinePrimaryVertices_*_*", - "keep SiStripClusteredmNewDetSetVector_generalTracksSkim_*_*", - "keep SiPixelClusteredmNewDetSetVector_generalTracksSkim_*_*", - "keep *_TrackRefitter_*_*", - "keep *_standAloneMuons_*_*", - "keep *_globalMuons_*_*", - "keep *_muonsSkim_*_*", - "keep edmTriggerResults_TriggerResults_*_*", - "keep *_ak5PFJetsPt15__*", - "keep recoPFMETs_pfMet__*", - "keep *_HSCParticleProducer_*_*", - "keep *_HSCPIsolation01__*", - "keep *_HSCPIsolation03__*", - "keep *_HSCPIsolation05__*", - "keep *_dedx*_*_HSCPAnalysis", - "keep *_muontiming_*_HSCPAnalysis", - "keep triggerTriggerEvent_hltTriggerSummaryAOD_*_*", - "keep *_RefitMTSAMuons_*_*", - "keep *_MTMuons_*_*", - "keep *_MTSAMuons_*_*", - "keep *_MTmuontiming_*_*", - "keep *_refittedStandAloneMuons_*_*", - "keep *_offlineBeamSpot_*_*", - "drop *_offlineBeamSpot_*_HSCPAnalysis", #no need to save the BS from this process - "keep *_MuonSegmentProducer_*_*", - "drop TrajectorysToOnerecoTracksAssociation_TrackRefitter__", - "drop recoTrackExtras_*_*_*", - "keep recoTrackExtras_TrackRefitter_*_*", - "drop TrackingRecHitsOwned_*Muon*_*_*", - "keep *_g4SimHits_StoppedParticles*_*", - "keep PileupSummaryInfos_addPileupInfo_*_*" - ), - fileName = cms.untracked.string('HSCP.root'), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('') - ), -) - -if(isBckg or isData): - process.Out.SelectEvents.SelectEvents = cms.vstring('HSCPTuplePath') - - -######################################################################## - -#schedule the sequence -process.endPath1 = cms.EndPath(process.Out) -process.schedule = cms.Schedule(process.HSCPTuplePath, process.endPath1) diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/MC/HSCParticleProducer_cfg.py b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/MC/HSCParticleProducer_cfg.py deleted file mode 100644 index e639e4193619c..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/MC/HSCParticleProducer_cfg.py +++ /dev/null @@ -1,183 +0,0 @@ -from __future__ import print_function -import FWCore.ParameterSet.Config as cms - -process = cms.Process("HSCPAnalysis") - -process.load("FWCore.MessageService.MessageLogger_cfi") -process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) -process.MessageLogger.cerr.FwkReport.reportEvery = 1000 -from SUSYBSMAnalysis.HSCP.HSCPVersion_cff import * - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(25000) ) - -if CMSSW4_2: process.GlobalTag.globaltag = 'START42_V9::All' -else: process.GlobalTag.globaltag = 'START53_V7A::All' - - -readFiles = cms.untracked.vstring() -process.source = cms.Source("PoolSource", - fileNames = readFiles -) - -if CMSSW4_2: readFiles.extend(['/store/user/quertenmont/11_07_30_ExoticaMCSkim//QCD_1400to1800/querten/QCD_Pt-1400to1800_TuneZ2_7TeV_pythia6/EXOHSCPMCSkim_V4_QCD_1400to1800/42f0c8f1e4a9169b4429628ad9032dfb/EXOHSCP_103_1_aV8.root']) -else: readFiles.extend(['/store/mc/Summer12_DR53X/WToMuNu_TuneZ2star_8TeV_pythia6/GEN-SIM-RECO/PU_S10_START53_V7A-v1/0001/FE638700-BDE3-E111-A928-002618943906.root']) - - - -process.source.inputCommands = cms.untracked.vstring("keep *", "drop *_MEtoEDMConverter_*_*") - -######################################################################## - -process.load("SUSYBSMAnalysis.HSCP.HSCParticleProducerFromSkim_cff") #IF RUNNING ON HSCP SKIM - - -process.load('HLTrigger.HLTfilters.hltHighLevel_cfi') -if CMSSW4_2: - process.load('SUSYBSMAnalysis.Skimming.EXOHSCP_cff') - process.load('SUSYBSMAnalysis.Skimming.EXOHSCP_EventContent_cfi') - - process.HSCPTrigger = cms.EDFilter("HSCPHLTFilter", - RemoveDuplicates = cms.bool(False), - TriggerProcess = cms.string("HLT"), - MuonTrigger1Mask = cms.int32(1), #Activated - PFMetTriggerMask = cms.int32(1), #Activated - L2MuMETTriggerMask = cms.int32(1), #Activated - ) -else: - process.load('Configuration.Skimming.PDWG_EXOHSCP_cff') - process.HSCParticleProducer.useBetaFromEcal = cms.bool(False) - - process.HSCPTrigger = process.hltHighLevel.clone() - process.HSCPTrigger.TriggerResultsTag = cms.InputTag( "TriggerResults", "", "HLT" ) - process.HSCPTrigger.HLTPaths = [ - "HLT_*_dEdx*", - "HLT_Mu40_eta2p1*", - "HLT_Mu50_eta2p1*", - "HLT_HT650_*", - "HLT_MET80_*", - "HLT_L2Mu*MET*", - "HLT_L2Mu*NoBPTX*", - "HLT_PFMET150_*", - ] - process.HSCPTrigger.andOr = cms.bool( True ) #OR - process.HSCPTrigger.throw = cms.bool( False ) - - #skim the jet collection to keep only 15GeV jets - process.ak5PFJetsPt15 = cms.EDFilter( "EtMinPFJetSelector", - src = cms.InputTag( "ak5PFJets" ), - filter = cms.bool( False ), - etMin = cms.double( 15.0 ) - ) - -######################################################################## SPECIAL CASE FOR MC - -process.load("PhysicsTools.HepMCCandAlgos.genParticles_cfi") -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") -process.genParticles.abortOnUnknownPDGCode = cms.untracked.bool(False) - -process.GlobalTag.toGet = cms.VPSet( - cms.PSet( record = cms.string('SiStripDeDxMip_3D_Rcd'), - tag = cms.string('MC7TeV_Deco_3D_Rcd_38X'), - connect = cms.untracked.string("sqlite_file:MC7TeV_Deco_SiStripDeDxMip_3D_Rcd.db")), -) - -process.dedxHarm2.calibrationPath = cms.string("file:MC7TeVGains.root") -process.dedxTru40.calibrationPath = cms.string("file:MC7TeVGains.root") -process.dedxProd.calibrationPath = cms.string("file:MC7TeVGains.root") -process.dedxASmi.calibrationPath = cms.string("file:MC7TeVGains.root") -process.dedxNPHarm2.calibrationPath = cms.string("file:MC7TeVGains.root") -process.dedxNPTru40.calibrationPath = cms.string("file:MC7TeVGains.root") -process.dedxNSHarm2.calibrationPath = cms.string("file:MC7TeVGains.root") -process.dedxNSTru40.calibrationPath = cms.string("file:MC7TeVGains.root") -process.dedxNPProd.calibrationPath = cms.string("file:MC7TeVGains.root") -process.dedxNPASmi.calibrationPath = cms.string("file:MC7TeVGains.root") -process.dedxHitInfo.calibrationPath = cms.string("file:MC7TeVGains.root") - -process.dedxHarm2.UseCalibration = cms.bool(True) -process.dedxTru40.UseCalibration = cms.bool(True) -process.dedxProd.UseCalibration = cms.bool(True) -process.dedxASmi.UseCalibration = cms.bool(True) -process.dedxNPHarm2.UseCalibration = cms.bool(True) -process.dedxNPTru40.UseCalibration = cms.bool(True) -process.dedxNSHarm2.UseCalibration = cms.bool(True) -process.dedxNSTru40.UseCalibration = cms.bool(True) -process.dedxNPProd.UseCalibration = cms.bool(True) -process.dedxNPASmi.UseCalibration = cms.bool(True) -process.dedxHitInfo.UseCalibration = cms.bool(True) - -if not CMSSW4_2: - print ("WARNING: You are using MC7TeV_Deco_3D_Rcd_38X and MC7TeVGains.root for dEdx computation... These constants are a priori not valid for 2012 MC samples\nThe constants need to be redone for 2012 samples") - -######################################################################## -process.nEventsBefEDM = cms.EDProducer("EventCountProducer") -process.nEventsBefSkim = cms.EDProducer("EventCountProducer") -######################################################################## - -process.Out = cms.OutputModule("PoolOutputModule", - outputCommands = cms.untracked.vstring( - "drop *", - "keep EventAux_*_*_*", - "keep LumiSummary_*_*_*", - "keep edmMergeableCounter_*_*_*", - "keep *_genParticles_*_HSCPAnalysis", - "keep GenEventInfoProduct_generator_*_*", - "keep *_offlinePrimaryVertices_*_*", - "keep SiStripClusteredmNewDetSetVector_generalTracksSkim_*_*", - "keep SiPixelClusteredmNewDetSetVector_generalTracksSkim_*_*", - "keep *_TrackRefitter_*_*", - "keep *_standAloneMuons_*_*", - "keep *_globalMuons_*_*", - "keep *_muonsSkim_*_*", - "keep edmTriggerResults_TriggerResults_*_*", - "keep *_ak5PFJetsPt15__*", - "keep recoPFMETs_pfMet__*", - "keep *_HSCParticleProducer_*_*", - "keep *_HSCPIsolation01__*", - "keep *_HSCPIsolation03__*", - "keep *_HSCPIsolation05__*", - "keep *_dedx*_*_HSCPAnalysis", - "keep *_muontiming_*_HSCPAnalysis", - "keep triggerTriggerEvent_hltTriggerSummaryAOD_*_*", - "keep *_RefitMTSAMuons_*_*", - "keep *_MTMuons_*_*", - "keep *_MTSAMuons_*_*", - "keep *_MTmuontiming_*_*", - "keep *_refittedStandAloneMuons_*_*", - "keep *_offlineBeamSpot_*_*", - "keep *_MuonSegmentProducer_*_*", - "drop TrajectorysToOnerecoTracksAssociation_TrackRefitter__", - "drop recoTrackExtras_*_*_*", - "keep recoTrackExtras_TrackRefitter_*_*", - "drop TrackingRecHitsOwned_*Muon*_*_*", - "keep *_g4SimHits_StoppedParticles*_*", - "keep PileupSummaryInfos_addPileupInfo_*_*" - ), - fileName = cms.untracked.string('HSCP.root'), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('p1') - ), -) - -if CMSSW4_2: - process.Out.outputCommands.extend(["keep recoPFJets_ak5PFJets__*"]) - - -######################################################################## - -#LOOK AT SD PASSED PATH IN ORDER to avoid as much as possible duplicated events (make the merging of .root file faster) -#The module ak5PFJetsPt15 does not exist in CMSSW4 -if CMSSW4_2: process.p1 = cms.Path(process.nEventsBefEDM + process.HSCPTrigger + process.HSCParticleProducerSeq) -#else: process.p1 = cms.Path(process.nEventsBefEDM + process.HSCPTrigger + process.ak5PFJetsPt15 + process.HSCParticleProducerSeq) -else: process.p1 = cms.Path(process.nEventsBefSkim * process.HSCPTrigger * process.exoticaHSCPSeq * process.nEventsBefEDM * process.ak5PFJetsPt15 * process.HSCParticleProducerSeq) - -print("You are going to run the following sequence: " + str(process.p1)) - -#process.p1 = cms.Path(process.HSCParticleProducerSeq) -process.endPath1 = cms.EndPath(process.Out) -process.schedule = cms.Schedule( process.p1, process.endPath1) - - diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/MC/Merge.py b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/MC/Merge.py deleted file mode 100644 index ed50d9e7f793c..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/MC/Merge.py +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env python - -import urllib -import string -import os -import sys -import LaunchOnCondor - - - - - -#Jobs = ["MC_7TeV_ZZ", "MC_7TeV_ZJetToMuMu_Pt-80to120", "MC_7TeV_ZJetToMuMu_Pt-50to80", "MC_7TeV_ZJetToMuMu_Pt-30to50", "MC_7TeV_ZJetToMuMu_Pt-300", "MC_7TeV_ZJetToMuMu_Pt-230to300", "MC_7TeV_ZJetToMuMu_Pt-20to30", "MC_7TeV_ZJetToMuMu_Pt-170to230", "MC_7TeV_ZJetToMuMu_Pt-15to20", "MC_7TeV_ZJetToMuMu_Pt-120to170", "MC_7TeV_ZJetToMuMu_Pt-0to15", "MC_7TeV_WZ", "MC_7TeV_WW", "MC_7TeV_WJetsToLNu", "MC_7TeV_TTJets", "MC_7TeV_QCD_Pt-80to120", "MC_7TeV_QCD_Pt-800to1000", "MC_7TeV_QCD_Pt-600to800", "MC_7TeV_QCD_Pt-50to80", "MC_7TeV_QCD_Pt-470to600", "MC_7TeV_QCD_Pt-30to50", "MC_7TeV_QCD_Pt-300to470", "MC_7TeV_QCD_Pt-1800", "MC_7TeV_QCD_Pt-170to300", "MC_7TeV_QCD_Pt-1400to1800", "MC_7TeV_QCD_Pt-120to170", "MC_7TeV_QCD_Pt-1000to1400", "MC_7TeV_DYToTauTau", "MC_7TeV_DYToMuMu"] - -Jobs = ["MC_8TeV_DYToMuMu"] - -FarmDirectory = "MERGE" -for JobName in Jobs: - LaunchOnCondor.ListToFile(LaunchOnCondor.GetListOfFiles('"file:','/storage/data/cms/store/user/quertenmont/12_08_16_HSCP_EDM2011/FWLite_MC/' + JobName + '/HSCP_*.root','",'), FarmDirectory + "InputFile.txt") - #LaunchOnCondor.ListToFile(LaunchOnCondor.GetListOfFiles('"dcache:','/pnfs/cms/WAX/11/store/user/farrell3/HSCPEDMUpdateData2012_12Sep2012/'+ JobName +'/HSCP_*.root','",'), FarmDirectory + "InputFile.txt") - LaunchOnCondor.SendCMSJobs(FarmDirectory, JobName, "Merge_cfg.py", FarmDirectory + "InputFile.txt", 1, ['XXX_SAVEPATH_XXX','file:/storage/data/cms/users/quertenmont/HSCP/CMSSW_4_2_8/12_08_16/']) - - -os.system("rm " + FarmDirectory + "InputFile.txt") diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/MC/Merge_cfg.py b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/MC/Merge_cfg.py deleted file mode 100644 index bd5d53797c014..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/MC/Merge_cfg.py +++ /dev/null @@ -1,144 +0,0 @@ -import FWCore.ParameterSet.Config as cms -process = cms.Process("MergeHLT") - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) -process.load("FWCore.MessageService.MessageLogger_cfi") -from SUSYBSMAnalysis.HSCP.HSCPVersion_cff import * - -process.MessageLogger.cerr.FwkReport.reportEvery = 5000 -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( -XXX_INPUT_XXX - ) -) - -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -process.HSCPHLTDuplicate = cms.EDFilter("HSCPHLTFilter", - RemoveDuplicates = cms.bool(True), - TriggerProcess = cms.string("HLT"), - MuonTrigger1Mask = cms.int32(0), #Activated - PFMetTriggerMask = cms.int32(0), #Activated - L2MuMETTriggerMask = cms.int32(0), #Activated -) -process.DuplicateFilter = cms.Path(process.HSCPHLTDuplicate ) - - -process.load('HLTrigger.HLTfilters.hltHighLevel_cfi') -process.HSCPHLTTriggerMuDeDx = process.hltHighLevel.clone() -process.HSCPHLTTriggerMuDeDx.TriggerResultsTag = cms.InputTag( "TriggerResults", "", "HLT" ) -process.HSCPHLTTriggerMuDeDx.andOr = cms.bool( True ) #OR -process.HSCPHLTTriggerMuDeDx.throw = cms.bool( False ) -process.HSCPHLTTriggerMuDeDx.HLTPaths = ["HLT_Mu*_dEdx*"] -process.HSCPHLTTriggerMuDeDxFilter = cms.Path(process.HSCPHLTTriggerMuDeDx ) - -process.HSCPHLTTriggerMetDeDx = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerMetDeDx.HLTPaths = ["HLT_MET*_dEdx*"] -process.HSCPHLTTriggerMetDeDxFilter = cms.Path(process.HSCPHLTTriggerMetDeDx ) - -process.HSCPHLTTriggerHtDeDx = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerHtDeDx.HLTPaths = ["HLT_HT*_dEdx*"] -process.HSCPHLTTriggerHtDeDxFilter = cms.Path(process.HSCPHLTTriggerHtDeDx ) - -process.HSCPHLTTriggerMu = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerMu.HLTPaths = ["HLT_Mu40_*"] -process.HSCPHLTTriggerMuFilter = cms.Path(process.HSCPHLTTriggerMu ) - -process.HSCPHLTTriggerMet = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerMet.HLTPaths = ["HLT_MET80_*"] -process.HSCPHLTTriggerMetFilter = cms.Path(process.HSCPHLTTriggerMet ) - -process.HSCPHLTTriggerPFMet = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerPFMet.HLTPaths = ["HLT_PFMET150_*"] -process.HSCPHLTTriggerPFMetFilter = cms.Path(process.HSCPHLTTriggerPFMet ) - -process.HSCPHLTTriggerHt = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerHt.HLTPaths = ["HLT_HT650_*"] -process.HSCPHLTTriggerHtFilter = cms.Path(process.HSCPHLTTriggerHt ) - -process.HSCPHLTTriggerL2Mu = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerL2Mu.HLTPaths = ["HLT_L2Mu*MET*"] -process.HSCPHLTTriggerL2MuFilter = cms.Path(process.HSCPHLTTriggerL2Mu ) - -process.HSCPHLTTriggerCosmic = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerCosmic.HLTPaths = ["HLT_L2Mu*NoBPTX*"] -process.HSCPHLTTriggerCosmicFilter = cms.Path(process.HSCPHLTTriggerCosmic ) - -if CMSSW4_2: - #special treatment for SingleMu and PFMet trigger in 42X (2011 analysis) because threshold have changed over the year - process.HSCPHLTTriggerPFMet = cms.EDFilter("HSCPHLTFilter", - RemoveDuplicates = cms.bool(False), - TriggerProcess = cms.string("HLT"), - MuonTrigger1Mask = cms.int32(0), #Activated - PFMetTriggerMask = cms.int32(1), #Activated - L2MuMETTriggerMask = cms.int32(0), #Activated - ) - process.HSCPHLTTriggerPFMetFilter = cms.Path(process.HSCPHLTTriggerPFMet ) - - process.HSCPHLTTriggerMu = cms.EDFilter("HSCPHLTFilter", - RemoveDuplicates = cms.bool(False), - TriggerProcess = cms.string("HLT"), - MuonTrigger1Mask = cms.int32(1), #Activated - PFMetTriggerMask = cms.int32(0), #Activated - L2MuMETTriggerMask = cms.int32(0), #Activated - ) - process.HSCPHLTTriggerMuFilter = cms.Path(process.HSCPHLTTriggerMu ) - - process.HSCPHLTTriggerL2Mu = cms.EDFilter("HSCPHLTFilter", - RemoveDuplicates = cms.bool(False), - TriggerProcess = cms.string("HLT"), - MuonTrigger1Mask = cms.int32(0), #Activated - PFMetTriggerMask = cms.int32(0), #Activated - L2MuMETTriggerMask = cms.int32(2), #Activated for special case of background MC - ) - - process.HSCPHLTTriggerL2MuFilter = cms.Path(process.HSCPHLTTriggerL2Mu ) - - -process.Out = cms.OutputModule("PoolOutputModule", - outputCommands = cms.untracked.vstring( - "drop *", - "keep EventAux_*_*_*", - "keep LumiSummary_*_*_*", - "keep edmMergeableCounter_*_*_*", - "keep *_genParticles_*_*", - "keep GenEventInfoProduct_generator_*_*", - "keep *_offlinePrimaryVertices_*_*", - "keep SiStripClusteredmNewDetSetVector_generalTracksSkim_*_*", - "keep SiPixelClusteredmNewDetSetVector_generalTracksSkim_*_*", - "keep *_TrackRefitter_*_*", - "keep *_standAloneMuons_*_*", - "keep *_globalMuons_*_*", - "keep *_muonsSkim_*_*", - "keep edmTriggerResults_TriggerResults_*_*", - "keep *_ak5PFJetsPt15__*", - "keep recoPFMETs_pfMet__*", - "keep *_HSCParticleProducer_*_*", - "keep *_HSCPIsolation01__*", - "keep *_HSCPIsolation03__*", - "keep *_HSCPIsolation05__*", - "keep *_dedx*_*_HSCPAnalysis", - "keep *_muontiming_*_HSCPAnalysis", - "keep triggerTriggerEvent_hltTriggerSummaryAOD_*_*", - "keep *_RefitMTSAMuons_*_*", - "keep *_MTMuons_*_*", - "keep *_MTSAMuons_*_*", - "keep *_MTmuontiming_*_*", - "keep *_refittedStandAloneMuons_*_*", - "keep *_offlineBeamSpot_*_*", - "keep *_MuonSegmentProducer_*_*", - "drop TrajectorysToOnerecoTracksAssociation_TrackRefitter__", - "drop recoTrackExtras_*_*_*", - "keep recoTrackExtras_TrackRefitter_*_*", - "drop TrackingRecHitsOwned_*Muon*_*_*", - "keep *_g4SimHits_StoppedParticles*_*", - "keep PileupSummaryInfos_addPileupInfo_*_*" - ), - fileName = cms.untracked.string('XXX_SAVEPATH_XXX/XXX_OUTPUT_XXX.root'), -) - -if CMSSW4_2: - process.Out.outputCommands.extend(["keep recoPFJets_ak5PFJets__*"]) - -process.endPath = cms.EndPath(process.Out) -process.schedule = cms.Schedule(process.DuplicateFilter, process.HSCPHLTTriggerMuDeDxFilter, process.HSCPHLTTriggerMetDeDxFilter, process.HSCPHLTTriggerHtDeDxFilter, process.HSCPHLTTriggerMuFilter, process.HSCPHLTTriggerMetFilter, process.HSCPHLTTriggerPFMetFilter, process.HSCPHLTTriggerHtFilter, process.HSCPHLTTriggerL2MuFilter, process.HSCPHLTTriggerCosmicFilter, process.endPath) diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/MC/crab.cfg b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/MC/crab.cfg deleted file mode 100644 index 18334a622e193..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/MC/crab.cfg +++ /dev/null @@ -1,41 +0,0 @@ -[CMSSW] -dbs_url = http://cmsdbsprod.cern.ch/cms_dbs_ph_analysis_02/servlet/DBSServlet -pset = HSCParticleProducer_cfg.py -datasetpath = /EXO_HSCP_stau126_3112_GEN_SIM_HLT/exotica-EXO_HSCP_Stau126_3112_GEN_SIM_RECO-50be3cf8c18545830b9f25e393ea078f/USER -output_file = HSCP.root -total_number_of_events = -1 -number_of_jobs = 1 - -[USER] -additional_input_files = MC7TeVGains.root, MC7TeV_Deco_SiStripDeDxMip_3D_Rcd.db -copy_data = 1 -publish_data = 0 -check_user_remote_dir = 0 -return_data = 0 - -#stage out to UCL -storage_element = ingrid-se02.cism.ucl.ac.be -storage_port = 8444 -user_remote_dir = /store/user/quertenmont/12_08_16_HSCP_EDM2011/FWLite_MC/ -storage_path = /srm/managerv2?SFN=/storage/data/cms - -#stage out the result to FNAL -#storage_element = cmssrm.fnal.gov -#storage_path = /srm/managerv2?SFN=/11 -#user_remote_dir = /store/user/jchen/HSCP -#user_remote_dir = HSCPEDMSignal23Dec2011 -#storage_element = T3_US_FNALLPC -#check_user_remote_dir = 0 - -[CRAB] -cfg = crab.cfg -scheduler = glite -jobtype = cmssw -use_server = 0 - -[GRID] -role = priorityuser -virtual_organization = cms -rb = CERN - - diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/MC/multicrab.cfg b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/MC/multicrab.cfg deleted file mode 100644 index 7b0fec6073603..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/MC/multicrab.cfg +++ /dev/null @@ -1,99 +0,0 @@ -[MULTICRAB] -cfg=crab.cfg - -[COMMON] -#USER.user_remote_dir = /store/user/quertenmont/11_07_31_HSCP2011/FWLite_MC -CMSSW.number_of_jobs = 20 - -[MC_8TeV_DYToMuMu] -CMSSW.datasetpath = /DYToMuMu_M_20_TuneZ2star_8TeV_pythia6/Summer12_DR53X-PU_S10_START53_V7A-v1/GEN-SIM-RECO - -[MC_7TeV_ZZ] -CMSSW.datasetpath = /ZZ_TuneZ2_7TeV_pythia6_tauola/querten-EXOHSCPMCSkim_V4_ZZ-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_ZJetToMuMu_Pt-80to120] -CMSSW.datasetpath = /ZJetToMuMu_Pt-80to120_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_ZJetToMuMu_Pt_80to120-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_ZJetToMuMu_Pt-50to80] -CMSSW.datasetpath = /ZJetToMuMu_Pt-50to80_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_ZJetToMuMu_Pt_50to80-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_ZJetToMuMu_Pt-30to50] -CMSSW.datasetpath = /ZJetToMuMu_Pt-30to50_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_ZJetToMuMu_Pt_30to50-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_ZJetToMuMu_Pt-300] -CMSSW.datasetpath = /ZJetToMuMu_Pt-300_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_ZJetToMuMu_Pt_300toInf-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_ZJetToMuMu_Pt-230to300] -CMSSW.datasetpath = /ZJetToMuMu_Pt-230to300_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_ZJetToMuMu_Pt_230to300-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_ZJetToMuMu_Pt-20to30] -CMSSW.datasetpath = /ZJetToMuMu_Pt-20to30_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_ZJetToMuMu_Pt_20to30-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_ZJetToMuMu_Pt-170to230] -CMSSW.datasetpath = /ZJetToMuMu_Pt-170to230_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_ZJetToMuMu_Pt_170to230-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_ZJetToMuMu_Pt-15to20] -CMSSW.datasetpath = /ZJetToMuMu_Pt-15to20_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_ZJetToMuMu_Pt_15to20-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_ZJetToMuMu_Pt-120to170] -CMSSW.datasetpath = /ZJetToMuMu_Pt-120to170_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_ZJetToMuMu_Pt_120to170-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_ZJetToMuMu_Pt-0to15] -CMSSW.datasetpath = /ZJetToMuMu_Pt-0to15_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_ZJetToMuMu_Pt_0to15-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_WZ] -CMSSW.datasetpath = /WZ_TuneZ2_7TeV_pythia6_tauola/querten-EXOHSCPMCSkim_V4_WZ-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_WW] -CMSSW.datasetpath = /WW_TuneZ2_7TeV_pythia6_tauola/querten-EXOHSCPMCSkim_V4_WW-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_WJetsToLNu] -CMSSW.datasetpath = /WJetsToLNu_TuneZ2_7TeV-madgraph-tauola/querten-EXOHSCPMCSkim_V4_WJetsToLNu-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_TTJets] -CMSSW.datasetpath = /TTJets_TuneZ2_7TeV-madgraph-tauola/querten-EXOHSCPMCSkim_V4_TTBar-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_QCD_Pt-80to120] -CMSSW.datasetpath = /QCD_Pt-80to120_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_QCD_80to120-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_QCD_Pt-800to1000] -CMSSW.datasetpath = /QCD_Pt-800to1000_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_QCD_800to1000-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_QCD_Pt-600to800] -CMSSW.datasetpath = /QCD_Pt-600to800_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_QCD_600to800-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_QCD_Pt-50to80] -CMSSW.datasetpath = /QCD_Pt-50to80_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_QCD_Pt-50to80-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_QCD_Pt-470to600] -CMSSW.datasetpath = /QCD_Pt-470to600_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_QCD_470to600-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_QCD_Pt-30to50] -CMSSW.datasetpath = /QCD_Pt-30to50_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_QCD_30to50-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_QCD_Pt-300to470] -CMSSW.datasetpath = /QCD_Pt-300to470_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_QCD_300to470-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_QCD_Pt-1800] -CMSSW.datasetpath = /QCD_Pt-1800_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_1800toInf-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_QCD_Pt-170to300] -CMSSW.datasetpath = /QCD_Pt-170to300_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_QCD_170to300-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_QCD_Pt-15to30] -CMSSW.datasetpath = /QCD_Pt-15to30_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_QCD_15to30-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_QCD_Pt-1400to1800] -CMSSW.datasetpath = /QCD_Pt-1400to1800_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_QCD_1400to1800-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_QCD_Pt-120to170] -CMSSW.datasetpath = /QCD_Pt-120to170_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_QCD_120to170-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_QCD_Pt-1000to1400] -CMSSW.datasetpath = /QCD_Pt-1000to1400_TuneZ2_7TeV_pythia6/querten-EXOHSCPMCSkim_V4_QCD_1000to1400-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_DYToTauTau] -CMSSW.datasetpath = /DYToTauTau_M-20_TuneZ2_7TeV-pythia6-tauola/querten-EXOHSCPMCSkim_V4_DYToTauTau-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER - -[MC_7TeV_DYToMuMu] -CMSSW.datasetpath = /DYToMuMu_M-20_TuneZ2_7TeV-pythia6/querten-EXOHSCPMCSkim_V4_DYToMuMu-42f0c8f1e4a9169b4429628ad9032dfb-EXOHSCP/USER diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Signals/Merge.py b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Signals/Merge.py deleted file mode 100644 index d5f59591414ae..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Signals/Merge.py +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env python - -import urllib -import string -import os -import sys -import LaunchOnCondor - -Jobs = ["GMStau_8TeV_M557", "PPStau_8TeV_M557"] - -FarmDirectory = "MERGE" -for JobName in Jobs: - LaunchOnCondor.ListToFile(LaunchOnCondor.GetListOfFiles('"file:','/afs/cern.ch/user/q/querten/workspace/public/GMSB_XSec/EDMproduction/CMSSW_5_3_2_patch4/src/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Signals/'+ JobName + '/res/HSCP_*.root','",'), FarmDirectory + "InputFile.txt") -# LaunchOnCondor.ListToFile(LaunchOnCondor.GetListOfFiles('"dcache:','/pnfs/cms/WAX/11/store/user/farrell3/store/user/jchen/11_10_28_HSCP2011/FWLite_Signal/'+ JobName + '/HSCP_*.root','",'), FarmDirectory + "InputFile.txt") -# LaunchOnCondor.ListToFile(LaunchOnCondor.GetListOfFiles('"file:','/uscmst1b_scratch/lpc1/lpcphys/jchen/HSCPEDM_08_02_11/'+ JobName + '.root','",'), FarmDirectory + "InputFile.txt") - LaunchOnCondor.SendCMSJobs(FarmDirectory, JobName, "Merge_cfg.py", FarmDirectory + "InputFile.txt", 1, []) - -os.system("rm " + FarmDirectory + "InputFile.txt") diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Signals/Merge_cfg.py b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Signals/Merge_cfg.py deleted file mode 100644 index 139b5a01fdc20..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Signals/Merge_cfg.py +++ /dev/null @@ -1,144 +0,0 @@ -import FWCore.ParameterSet.Config as cms -process = cms.Process("MergeHLT") - -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) -process.load("FWCore.MessageService.MessageLogger_cfi") -from SUSYBSMAnalysis.HSCP.HSCPVersion_cff import * - -process.MessageLogger.cerr.FwkReport.reportEvery = 5000 -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( -XXX_INPUT_XXX - ) -) - -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -process.HSCPHLTDuplicate = cms.EDFilter("HSCPHLTFilter", - RemoveDuplicates = cms.bool(True), - TriggerProcess = cms.string("HLT"), - MuonTrigger1Mask = cms.int32(0), #Activated - PFMetTriggerMask = cms.int32(0), #Activated - L2MuMETTriggerMask = cms.int32(0), -) -process.DuplicateFilter = cms.Path(process.HSCPHLTDuplicate ) - - -process.load('HLTrigger.HLTfilters.hltHighLevel_cfi') -process.HSCPHLTTriggerMuDeDx = process.hltHighLevel.clone() -process.HSCPHLTTriggerMuDeDx.TriggerResultsTag = cms.InputTag( "TriggerResults", "", "HLT" ) -process.HSCPHLTTriggerMuDeDx.andOr = cms.bool( True ) #OR -process.HSCPHLTTriggerMuDeDx.throw = cms.bool( False ) -process.HSCPHLTTriggerMuDeDx.HLTPaths = ["HLT_Mu*_dEdx*"] -process.HSCPHLTTriggerMuDeDxFilter = cms.Path(process.HSCPHLTTriggerMuDeDx ) - -process.HSCPHLTTriggerMetDeDx = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerMetDeDx.HLTPaths = ["HLT_MET*_dEdx*"] -process.HSCPHLTTriggerMetDeDxFilter = cms.Path(process.HSCPHLTTriggerMetDeDx ) - -process.HSCPHLTTriggerHtDeDx = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerHtDeDx.HLTPaths = ["HLT_HT*_dEdx*"] -process.HSCPHLTTriggerHtDeDxFilter = cms.Path(process.HSCPHLTTriggerHtDeDx ) - -process.HSCPHLTTriggerMu = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerMu.HLTPaths = ["HLT_Mu40_*"] -process.HSCPHLTTriggerMuFilter = cms.Path(process.HSCPHLTTriggerMu ) - -process.HSCPHLTTriggerMet = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerMet.HLTPaths = ["HLT_MET80_*"] -process.HSCPHLTTriggerMetFilter = cms.Path(process.HSCPHLTTriggerMet ) - -process.HSCPHLTTriggerPFMet = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerPFMet.HLTPaths = ["HLT_PFMET150_*"] -process.HSCPHLTTriggerPFMetFilter = cms.Path(process.HSCPHLTTriggerPFMet ) - -process.HSCPHLTTriggerHt = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerHt.HLTPaths = ["HLT_HT650_*"] -process.HSCPHLTTriggerHtFilter = cms.Path(process.HSCPHLTTriggerHt ) - -process.HSCPHLTTriggerL2Mu = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerL2Mu.HLTPaths = ["HLT_L2Mu*MET*"] -process.HSCPHLTTriggerL2MuFilter = cms.Path(process.HSCPHLTTriggerL2Mu ) - -process.HSCPHLTTriggerCosmic = process.HSCPHLTTriggerMuDeDx.clone() -process.HSCPHLTTriggerCosmic.HLTPaths = ["HLT_L2Mu*NoBPTX*"] -process.HSCPHLTTriggerCosmicFilter = cms.Path(process.HSCPHLTTriggerCosmic ) - -if CMSSW4_2: - #special treatment for SingleMu and PFMet trigger in 42X (2011 analysis) because threshold have changed over the year - process.HSCPHLTTriggerPFMet = cms.EDFilter("HSCPHLTFilter", - RemoveDuplicates = cms.bool(False), - TriggerProcess = cms.string("HLT"), - MuonTrigger1Mask = cms.int32(0), #Activated - PFMetTriggerMask = cms.int32(1), #Activated - L2MuMETTriggerMask = cms.int32(0), - ) - process.HSCPHLTTriggerPFMetFilter = cms.Path(process.HSCPHLTTriggerPFMet ) - - process.HSCPHLTTriggerMu = cms.EDFilter("HSCPHLTFilter", - RemoveDuplicates = cms.bool(False), - TriggerProcess = cms.string("HLT"), - MuonTrigger1Mask = cms.int32(1), #Activated - PFMetTriggerMask = cms.int32(0), #Activated - L2MuMETTriggerMask = cms.int32(0), - ) - process.HSCPHLTTriggerMuFilter = cms.Path(process.HSCPHLTTriggerMu ) - - process.HSCPHLTTriggerL2Mu = cms.EDFilter("HSCPHLTFilter", - RemoveDuplicates = cms.bool(False), - TriggerProcess = cms.string("HSCPAnalysis"), - MuonTrigger1Mask = cms.int32(0), #Activated - PFMetTriggerMask = cms.int32(0), #Activated - L2MuMETTriggerMask = cms.int32(1), #Activated - ) - - process.HSCPHLTTriggerL2MuFilter = cms.Path(process.HSCPHLTTriggerL2Mu ) - - -process.Out = cms.OutputModule("PoolOutputModule", - outputCommands = cms.untracked.vstring( - "drop *", - "keep EventAux_*_*_*", - "keep LumiSummary_*_*_*", - "keep edmMergeableCounter_*_*_*", - "keep *_genParticles_*_*", - "keep GenEventInfoProduct_generator_*_*", - "keep *_offlinePrimaryVertices_*_*", - "keep SiStripClusteredmNewDetSetVector_generalTracksSkim_*_*", - "keep SiPixelClusteredmNewDetSetVector_generalTracksSkim_*_*", - "keep *_TrackRefitter_*_*", - "keep *_standAloneMuons_*_*", - "keep *_globalMuons_*_*", - "keep *_muonsSkim_*_*", - "keep edmTriggerResults_TriggerResults_*_*", - "keep *_ak5PFJetsPt15__*", - "keep recoPFMETs_pfMet__*", - "keep *_HSCParticleProducer_*_*", - "keep *_HSCPIsolation01__*", - "keep *_HSCPIsolation03__*", - "keep *_HSCPIsolation05__*", - "keep *_dedx*_*_HSCPAnalysis", - "keep *_muontiming_*_HSCPAnalysis", - "keep triggerTriggerEvent_hltTriggerSummaryAOD_*_*", - "keep *_RefitMTSAMuons_*_*", - "keep *_MTMuons_*_*", - "keep *_MTSAMuons_*_*", - "keep *_MTmuontiming_*_*", - "keep *_refittedStandAloneMuons_*_*", - "keep *_offlineBeamSpot_*_*", - "keep *_MuonSegmentProducer_*_*", - "drop TrajectorysToOnerecoTracksAssociation_TrackRefitter__", - "drop recoTrackExtras_*_*_*", - "keep recoTrackExtras_TrackRefitter_*_*", - "drop TrackingRecHitsOwned_*Muon*_*_*", - "keep *_g4SimHits_StoppedParticles*_*", - "keep PileupSummaryInfos_addPileupInfo_*_*" - ), - fileName = cms.untracked.string('XXX_OUTPUT_XXX.root'), -) - -if CMSSW4_2: - process.Out.outputCommands.extend(["keep recoPFJets_ak5PFJets__*"]) - -process.endPath = cms.EndPath(process.Out) -process.schedule = cms.Schedule(process.DuplicateFilter, process.HSCPHLTTriggerMuDeDxFilter, process.HSCPHLTTriggerMetDeDxFilter, process.HSCPHLTTriggerHtDeDxFilter, process.HSCPHLTTriggerMuFilter, process.HSCPHLTTriggerMetFilter, process.HSCPHLTTriggerPFMetFilter, process.HSCPHLTTriggerHtFilter, process.HSCPHLTTriggerL2MuFilter, process.HSCPHLTTriggerCosmicFilter, process.endPath) diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Signals/crab.cfg b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Signals/crab.cfg deleted file mode 100644 index fcb7155351cdf..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Signals/crab.cfg +++ /dev/null @@ -1,47 +0,0 @@ -[CMSSW] -#dbs_url = http://cmsdbsprod.cern.ch/cms_dbs_prod_global/servlet/DBSServlet -dbs_url = http://cmsdbsprod.cern.ch/cms_dbs_ph_analysis_02/servlet/DBSServlet -pset = HSCParticleProducer_cfg.py -datasetpath = /EXO_HSCP_stau126_3112_GEN_SIM_HLT/exotica-EXO_HSCP_Stau126_3112_GEN_SIM_RECO-50be3cf8c18545830b9f25e393ea078f/USER -output_file = HSCP.root -total_number_of_events = -1 -#number_of_jobs = 1 -events_per_job = 10000 -#use_parent = 1 - -[USER] -additional_input_files = MC7TeVGains.root, MC7TeV_Deco_SiStripDeDxMip_3D_Rcd.db -#ui_working_dir = GMStau126 -copy_data = 0 -publish_data = 0 -check_user_remote_dir = 0 -return_data = 1 - -#stage out to UCL -#storage_element = ingrid-se02.cism.ucl.ac.be -#storage_port = 8444 -#user_remote_dir = /store/user/quertenmont/11_03_31_HSCP2011/FWLite_Sign/ -#storage_path = /srm/managerv2?SFN=/storage/data/cms - -#stage out the result to FNAL -#storage_element = cmssrm.fnal.gov -#storage_path = /srm/managerv2?SFN=/11 -#user_remote_dir = /store/user/jchen/HSCP - -check_user_remote_dir = 0 -publish_data = 0 -user_remote_dir = HSCPToBeMerged_09Oct2012 -storage_element = T3_US_FNALLPC -check_user_remote_dir = 0 - -[CRAB] -scheduler = glite -jobtype = cmssw -use_server = 0 - -#[GRID] -#role = priorityuser -#virtual_organization = cms -#rb = CERN - - diff --git a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Signals/multicrab.cfg b/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Signals/multicrab.cfg deleted file mode 100644 index ae329545c4785..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/BuildHSCParticles/Signals/multicrab.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[MULTICRAB] -cfg=crab.cfg - -[COMMON] -#USER.user_remote_dir = /store/user/jchen/11_10_28_HSCP2011/FWLite_Signal -#CMSSW.number_of_jobs = 3 -CMSSW.events_per_job=1000 - -[GMStau_8TeV_M557] -CMSSW.datasetpath = /EXOHSCP2012_gmstauM557_GEN_SIM/querten-EXOHSCP2012_gmstauM557_RECO-34bad132481b136881b4ce69c955de16/USER - -[PPStau_8TeV_M557] -CMSSW.datasetpath = /EXOHSCP2012_ppstauM557_GEN_SIM/querten-EXOHSCP2012_ppstauM557_RECO-34bad132481b136881b4ce69c955de16/USER - - diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_CommonFunction.h b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_CommonFunction.h deleted file mode 100644 index c797b764d0482..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_CommonFunction.h +++ /dev/null @@ -1,206 +0,0 @@ - -#include "Analysis_Global.h" -#include "Analysis_PlotFunction.h" - - - -/////////////////////////////////////////////////////////////////////////////////////// STUFF RELATED TO THE SUBSAMPLES - - -double Efficiency(TH1* Histo, double CutX){ - double Entries = Histo->Integral(0,Histo->GetNbinsX()+1); - double Integral = Histo->Integral(Histo->GetXaxis()->FindBin(CutX),Histo->GetNbinsX()+1); - return Integral/Entries; -} - -double Efficiency(TH2* Histo, double CutX, double CutY){ - double Entries = Histo->Integral(0,Histo->GetNbinsX()+1, 0,Histo->GetNbinsY()+1); - double Integral = Histo->Integral(Histo->GetXaxis()->FindBin(CutX),Histo->GetNbinsX()+1, Histo->GetYaxis()->FindBin(CutY),Histo->GetNbinsY()+1); - return Integral/Entries; -} - - -double EfficiencyAndError(TH1* Histo, double CutX, double& error){ - double Entries = Histo->Integral(0,Histo->GetNbinsX()+1); - double Integral = 0; - error = 0; - for(Int_t binx = Histo->GetXaxis()->FindBin(CutX); binx<= Histo->GetNbinsX()+1; ++binx){ - Integral += Histo->GetBinContent(binx); - error += Histo->GetBinError(binx)*Histo->GetBinError(binx); - } - error = sqrt(error); - error /= Entries; - return Integral/Entries; -} - - - - -double GetEventInRange(double min, double max, TH1D* hist, double& error){ - int binMin = hist->GetXaxis()->FindBin(min); - int binMax = hist->GetXaxis()->FindBin(max); - error = 0; for(int i=binMin;iGetBinError(i),2); } error = sqrt(error); - return hist->Integral(binMin,binMax); -} - -double GetMassFromBeta(double P, double beta){ - double gamma = 1/sqrt(1-beta*beta); - return P/(beta*gamma); -} - -double GetTOFMass(double P, double TOF){ - return GetMassFromBeta(P, 1/TOF); -} - - -double GetIBeta(double I, bool MC=false){ - double K, C; - - if(MC){ - K = dEdxK_MC; - C = dEdxC_MC; - }else{ - K = dEdxK_Data; - C = dEdxC_Data; - } - - double a = K / (I-C); - double b2 = a / (a+1); - - if(b2<0)return -1*sqrt(b2); - return sqrt(b2); -} - - - -double GetMass(double P, double I, bool MC=false){ - if(MC){ - const double& K = dEdxK_MC; - const double& C = dEdxC_MC; - - if(I-C<0)return -1; - return sqrt((I-C)/K)*P; - }else{ - const double& K = dEdxK_Data; - const double& C = dEdxC_Data; - - if(I-C<0)return -1; - return sqrt((I-C)/K)*P; - } - - return -1; -} - -TF1* GetMassLine(double M, bool MC=false) -{ - double K; double C; - if(MC){ - K = dEdxK_MC; - C = dEdxC_MC; - }else{ - K = dEdxK_Data; - C = dEdxC_Data; - } - - double BetaMax = 0.9; - double PMax = sqrt((BetaMax*BetaMax*M*M)/(1-BetaMax*BetaMax)); - - double BetaMin = 0.2; - double PMin = sqrt((BetaMin*BetaMin*M*M)/(1-BetaMin*BetaMin)); - - TF1* MassLine = new TF1("MassLine","[2] + ([0]*[0]*[1])/(x*x)", PMin, PMax); - MassLine->SetParName (0,"M"); - MassLine->SetParName (1,"K"); - MassLine->SetParName (2,"C"); - MassLine->SetParameter(0, M); - MassLine->SetParameter(1, K); - MassLine->SetParameter(2, C); - MassLine->SetLineWidth(2); - return MassLine; -} - - - -double deltaR(double eta1, double phi1, double eta2, double phi2) { - double deta = eta1 - eta2; - double dphi = phi1 - phi2; - while (dphi > M_PI) dphi -= 2*M_PI; - while (dphi <= -M_PI) dphi += 2*M_PI; - return sqrt(deta*deta + dphi*dphi); -} - - -std::string LegendFromType(const std::string& InputPattern){ - if(InputPattern.find("Type0",0) DValue; - std::vector PValue; - - for(float WP_Pt=0;WP_Pt>=-5;WP_Pt-=0.5f){ - for(float WP_I =0;WP_I >=-5;WP_I -=0.5f){ - char Buffer[2048]; - sprintf(Buffer,"%sWPPt%+03i/WPI%+03i/DumpHistos.root",InputPattern.c_str(),(int)(10*WP_Pt),(int)(10*WP_I)); - TFile* InputFile = new TFile(Buffer); - if(!InputFile || InputFile->IsZombie() || !InputFile->IsOpen() || InputFile->TestBit(TFile::kRecovered) )continue; - - double d=0, p=0;//, m=0; - double error =0; - TH1D* Hd = (TH1D*)GetObjectFromPath(InputFile, "Mass_Data");if(Hd){d=GetEventInRange(0,75,Hd,error);delete Hd;} - TH1D* Hp = (TH1D*)GetObjectFromPath(InputFile, "Mass_Pred");if(Hp){p=GetEventInRange(0,75,Hp,error);delete Hp;} -// TH1D* Hm = (TH1D*)GetObjectFromPath(InputFile, "Mass_MCTr");if(Hm){m=GetEventInRange(0,75,Hm);delete Hm;} - -// if(!(d!=d) && p>0 && d>10 && (WP_Pt+WP_I)<=-3){ -// if(!(d!=d) && p>0 && d>20 && (WP_Pt+WP_I)<=-3){ - if(!(d!=d) && p>0 && d>20 && (WP_Pt+WP_I)<=-2){ -// if(!(d!=d) && p>0 && d>500 && (WP_Pt+WP_I)<=-2){ - DValue.push_back(d); - PValue.push_back(p); - printf("%6.2f %6.2f (eff=%6.2E) --> %f (d=%6.2E)\n",WP_Pt,WP_I, pow(10,WP_Pt+WP_I),d/p, d); - Rescale += (d/p); - NPoints++; - } - InputFile->Close(); - }} - printf("----------------------------\n"); - Rescale /= NPoints; - - for(unsigned int i=0;iGet(firstPart.c_str()); - if(TMP!=NULL)return GetObjectFromPath(TMP,endPart,GetACopy); - - printf("BUG: %s\n",Path.c_str()); - return NULL; - }else{ - if(GetACopy){ - return (File->Get(Path.c_str()))->Clone(); - }else{ - return File->Get(Path.c_str()); - } - } -} - -TObject* GetObjectFromPath(TDirectory* Container, TDirectory* File, std::string Path, bool GetACopy=false){ - TObject* toreturn = GetObjectFromPath(File,Path,GetACopy); - if(TH1* th1 = dynamic_cast(toreturn))th1->SetDirectory(Container); - return toreturn; -} - - -void MakeDirectories(std::string path){ -/* size_t pos = 0; - - while(pos!=std::string::npos){ - pos = path.find("/",pos+1); - if(pos!=std::string::npos){ - system( (std::string("mkdir -p ") + path.substr(0,pos)).c_str()); - } - } -*/ - - system( (std::string("mkdir -p ") + path).c_str()); -} - -void SaveCanvas(TCanvas* c, std::string path, std::string name, bool OnlyPPNG=false){ - std::string tmppath = path; - if(tmppath[tmppath.length()-1]!='/')tmppath += "_"; - tmppath += name; - - std::string filepath; - filepath = tmppath + ".png"; c->SaveAs(filepath.c_str()); if(OnlyPPNG)return; - filepath = tmppath + ".eps"; c->SaveAs(filepath.c_str()); - filepath = tmppath + ".C" ; c->SaveAs(filepath.c_str()); - filepath = tmppath + ".pdf"; c->SaveAs(filepath.c_str()); -} - -//void DrawPreliminary(int Type, double X=0.28, double Y=0.98, double W=0.85, double H=0.95){ -//void DrawPreliminary(double Lumi, double X=0.12, double Y=1.00, double W=0.80, double H=0.945){ //USED FOR PAS -//void DrawPreliminary(double Lumi, double X=0.42, double Y=0.98, double W=0.82, double H=0.945){ -void DrawPreliminary(double Lumi, double X=0.40, double Y=0.995, double W=0.82, double H=0.945){ - TPaveText* T = new TPaveText(X,Y,W,H, "NDC"); - T->SetFillColor(0); - T->SetTextAlign(22); - if(Lumi<0 )T->AddText("CMS Preliminary #sqrt{s} = 7 TeV"); - - if(Lumi>0 ){ - char tmp[2048]; -// sprintf(tmp,"CMS Preliminary 2010 : L_{int} =%4.1f nb^{-1} at #sqrt{s} = 7 TeV",Lumi*1000.0); -// sprintf(tmp,"CMS Preliminary 2010 : %4.1f nb^{-1} #sqrt{s} = 7 TeV",Lumi*1000.0); -// sprintf(tmp,"CMS Preliminary 2010 #sqrt{s} = 7TeV %4.1f nb ^{-1}",Lumi*1000.0); -// sprintf(tmp,"CMS Preliminary 2010 #sqrt{s} = 7TeV %3.0f nb ^{-1}",Lumi*1000.0); -// sprintf(tmp,"CMS Preliminary 2010 #sqrt{s} = 7TeV %4.2f pb ^{-1}",Lumi*1.0); //USED FOR PAS -// sprintf(tmp,"CMS 2010 #sqrt{s} = 7 TeV %4.2f pb ^{-1}",Lumi*1.0); -// sprintf(tmp,"CMS #sqrt{s} = 7 TeV %4.2f pb ^{-1}",Lumi*1.0); - sprintf(tmp,"CMS Preliminary #sqrt{s} = 7 TeV %1.1f fb ^{-1}",Lumi*0.001); - - T->AddText(tmp); - } - T->Draw("same"); -} - -void DrawLegend (TObject** Histos, std::vector legend, std::string Title, std::string Style, double X=0.79, double Y=0.92, double W=0.20, double H=0.05) -{ - int N = legend.size(); - - if(legend[0]!=""){ - TLegend* leg; - leg = new TLegend(X,Y,X-W,Y - N*H); - leg->SetFillColor(0); - leg->SetBorderSize(0); - //leg->SetTextAlign(32); - if(Title!="")leg->SetHeader(Title.c_str()); - - if(Style=="DataMC"){ - for(int i=0;iClone(); - temp->SetMarkerSize(1.3); - if(i==0){ - leg->AddEntry(temp, legend[i].c_str() ,"P"); - }else{ - leg->AddEntry(temp, legend[i].c_str() ,"L"); - } - } - }else{ - for(int i=0;iClone(); - temp->SetMarkerSize(1.3); - leg->AddEntry(temp, legend[i].c_str() ,Style.c_str()); - } - } - leg->Draw(); - } -} - - -void DrawStatBox(TObject** Histos, std::vector legend, bool Mean, double X=0.15, double Y=0.93, double W=0.15, double H=0.03) -{ - int N = legend.size(); - char buffer[255]; - - if(Mean)H*=3; - for(int i=0;iGetEntries()); - stat->AddText(buffer); - - if(Mean){ - sprintf(buffer,"Mean : %6.2f\n",Histo->GetMean()); - stat->AddText(buffer); - - sprintf(buffer,"RMS : %6.2f\n",Histo->GetRMS()); - stat->AddText(buffer); - } - - stat->SetFillColor(0); - stat->SetLineColor(Color[i]); - stat->SetTextColor(Color[i]); - stat->SetBorderSize(0); - stat->SetMargin(0.05); - stat->SetTextAlign(12); - stat->Draw(); - } -} - - - -void DrawTH2D(TH2D** Histos, std::vector legend, std::string Style, std::string Xlegend, std::string Ylegend, double xmin, double xmax, double ymin, double ymax) -{ - int N = legend.size(); - - for(int i=0;iSetTitle(""); - Histos[i]->SetStats(kFALSE); - Histos[i]->GetXaxis()->SetTitle(Xlegend.c_str()); - Histos[i]->GetYaxis()->SetTitle(Ylegend.c_str()); - Histos[i]->GetYaxis()->SetTitleOffset(1.60); - if(xmin!=xmax)Histos[i]->SetAxisRange(xmin,xmax,"X"); - if(ymin!=ymax)Histos[i]->SetAxisRange(ymin,ymax,"Y"); - Histos[i]->SetMarkerStyle(Marker[i]); - Histos[i]->SetMarkerColor(Color[i]); - Histos[i]->SetMarkerSize(0.3); - } - - char Buffer[256]; - Histos[0]->Draw(Style.c_str()); - for(int i=1;iDraw(Buffer); - } -} - - -void DrawSuperposedHistos(TH1** Histos, std::vector legend, std::string Style, std::string Xlegend, std::string Ylegend, double xmin, double xmax, double ymin, double ymax, bool Normalize=false) -{ - int N = legend.size(); - - double HistoMax = -1; - int HistoHeighest = -1; - - for(int i=0;iIntegral()!=0)Histos[i]->Scale(1.0/Histos[i]->Integral()); - Histos[i]->SetTitle(""); - Histos[i]->SetStats(kFALSE); - Histos[i]->GetXaxis()->SetTitle(Xlegend.c_str()); - Histos[i]->GetYaxis()->SetTitle(Ylegend.c_str()); - Histos[i]->GetXaxis()->SetTitleOffset(1.1); - Histos[i]->GetYaxis()->SetTitleOffset(1.70); - Histos[i]->GetXaxis()->SetNdivisions(505); - Histos[i]->GetYaxis()->SetNdivisions(505); - if(xmin!=xmax)Histos[i]->SetAxisRange(xmin,xmax,"X"); - if(ymin!=ymax)Histos[i]->SetAxisRange(ymin,ymax,"Y"); - Histos[i]->SetFillColor(0); - Histos[i]->SetMarkerStyle(Marker[i]); - Histos[i]->SetMarkerColor(Color[i]); - Histos[i]->SetMarkerSize(1.5); - Histos[i]->SetLineColor(Color[i]); - Histos[i]->SetLineWidth(2); - if(Style=="DataMC" && i==0){ - Histos[i]->SetFillColor(0); - Histos[i]->SetMarkerStyle(20); - Histos[i]->SetMarkerColor(1); - Histos[i]->SetMarkerSize(1); - Histos[i]->SetLineColor(1); - Histos[i]->SetLineWidth(2); - } - - if(Histos[i]->GetMaximum() >= HistoMax){ - HistoMax = Histos[i]->GetMaximum(); - HistoHeighest = i; - } - - } - - char Buffer[256]; - if(Style=="DataMC"){ - if(HistoHeighest==0){ - Histos[HistoHeighest]->Draw("E1"); - }else{ - Histos[HistoHeighest]->Draw("HIST"); - } - for(int i=0;iDraw("same E1"); - }else{ - Histos[i]->Draw("same"); - } - } - }else{ - Histos[HistoHeighest]->Draw(Style.c_str()); - for(int i=0;iDraw(Buffer); - } - } -} - - -void Smart_SetAxisRange(TH2D* histo){ - double Min=1E50; - double Max=1E-50; - for(int x=1;x<=histo->GetNbinsX();x++){ - for(int y=1;y<=histo->GetNbinsY();y++){ - double c = histo->GetBinContent(x,y); - if(c0)Min=c; - if(c>Max)Max=c; - }} - if(Max/Min<10 ){Max*= 5.0; Min/= 5.0;} - else if(Max/Min<100){Max*=10.0; Min/=10.0;} - histo->SetAxisRange(Min,Max,"Z"); -} - - -#endif diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_PlotStructure.h b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_PlotStructure.h deleted file mode 100644 index 0472e2e7136e6..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_PlotStructure.h +++ /dev/null @@ -1,965 +0,0 @@ - -#include "Analysis_Samples.h" - - -struct stPlots { - bool SelPlot; - std::string Name; - TDirectory* Directory; - TTree* Tree; - unsigned int NCuts; - unsigned int Tree_Run; - unsigned int Tree_Event; - unsigned int Tree_Hscp; - float Tree_Pt; - float Tree_I; - float Tree_TOF; - float Tree_Mass; - - TH2F* Mass; - TH2F* MassTOF; - TH2F* MassComb; - TH2F* MaxEventMass; - - TH2F* Mass_SystP; - TH2F* MassTOF_SystP; - TH2F* MassComb_SystP; - TH2F* MaxEventMass_SystP; - - TH2F* Mass_SystI; - TH2F* MassTOF_SystI; - TH2F* MassComb_SystI; - TH2F* MaxEventMass_SystI; - - TH2F* Mass_SystM; - TH2F* MassTOF_SystM; - TH2F* MassComb_SystM; - TH2F* MaxEventMass_SystM; - - TH2F* Mass_SystT; - TH2F* MassTOF_SystT; - TH2F* MassComb_SystT; - TH2F* MaxEventMass_SystT; - - TH1F* TotalE; - TH1F* TotalTE; - TH1F* Total; - TH1F* V3D; - TH1F* Chi2; - TH1F* Qual; - TH1F* TNOH; - TH1F* TNOM; - TH1F* nDof; - TH1F* Pterr; - TH1F* MPt; - TH1F* MI; - TH1F* MTOF; - TH1F* TIsol; - TH1F* EIsol; - TH1F* Pt; - TH1F* I; - TH1F* TOF; - TH1F* HSCPE; - - TH1F* HSCPE_SystP; - TH1F* HSCPE_SystI; - TH1F* HSCPE_SystM; - TH1F* HSCPE_SystT; - - TH1F* Beta_Gen; - TH1F* Beta_GenCharged; - TH1F* Beta_Triggered; - TH1F* Beta_Matched; - TH1F* Beta_PreselectedA; - TH1F* Beta_PreselectedB; - TH1F* Beta_PreselectedC; - TH2F* Beta_SelectedP; - TH2F* Beta_SelectedI; - TH2F* Beta_SelectedT; - - TH1F* BS_V3D; - TH1F* BS_Chi2; - TH1F* BS_Qual; - TH1F* BS_TNOH; - TH1F* BS_TNOHFraction; - TH1F* BS_Eta; - TH1F* BS_TNOM; - TH1F* BS_nDof; - TH1F* BS_Pterr; - TH1F* BS_MPt; - TH1F* BS_MIs; - TH1F* BS_MIm; - TH1F* BS_MTOF; - TH1F* BS_TIsol; - TH1F* BS_EIsol; - - TH1F* BS_P; TH2F* AS_P; - TH1F* BS_Pt; TH2F* AS_Pt; - TH1F* BS_Is; TH2F* AS_Is; - TH1F* BS_Im; TH2F* AS_Im; - TH1F* BS_TOF; TH2F* AS_TOF; - - TH2F* BS_EtaIs; //TH3F* AS_EtaIs; - TH2F* BS_EtaIm; //TH3F* AS_EtaIm; - TH2F* BS_EtaP; //TH3F* AS_EtaP; - TH2F* BS_EtaPt; //TH3F* AS_EtaPt; - TH2F* BS_EtaTOF; //TH3F* AS_EtaTOF; - - TH2F* BS_PIs; TH3F* AS_PIs; - TH2F* BS_PIm; TH3F* AS_PIm; - TH2F* BS_PtIs; TH3F* AS_PtIs; - TH2F* BS_PtIm; TH3F* AS_PtIm; - TH2F* BS_TOFIs; TH3F* AS_TOFIs; - TH2F* BS_TOFIm; TH3F* AS_TOFIm; -}; - -void stPlots_Init(TFile* HistoFile, stPlots& st, std::string BaseName, unsigned int NCuts, bool SkipSelectionPlot=false) -{ - st.SelPlot = !SkipSelectionPlot; - st.Name = BaseName; - st.NCuts = NCuts; - - std::string Name; - Name = BaseName; st.Directory = HistoFile->mkdir(Name.c_str(), Name.c_str()); - st.Directory->cd(); - - Name = "TotalE"; st.TotalE = new TH1F(Name.c_str(), Name.c_str(), 1 , 0, 1); - Name = "TotalTE"; st.TotalTE= new TH1F(Name.c_str(), Name.c_str(), 1 , 0, 1); - Name = "Total"; st.Total = new TH1F(Name.c_str(), Name.c_str(), 1 , 0, 1); - Name = "V3D"; st.V3D = new TH1F(Name.c_str(), Name.c_str(), 1 , 0, 1); - Name = "Chi2"; st.Chi2 = new TH1F(Name.c_str(), Name.c_str(), 1 , 0, 1); - Name = "Qual"; st.Qual = new TH1F(Name.c_str(), Name.c_str(), 1 , 0, 1); - Name = "TNOH"; st.TNOH = new TH1F(Name.c_str(), Name.c_str(), 1 , 0, 1); - Name = "TNOM"; st.TNOM = new TH1F(Name.c_str(), Name.c_str(), 1 , 0, 1); - Name = "nDof"; st.nDof = new TH1F(Name.c_str(), Name.c_str(), 1 , 0, 1); - Name = "Pterr"; st.Pterr = new TH1F(Name.c_str(), Name.c_str(), 1 , 0, 1); - Name = "TIsol"; st.TIsol = new TH1F(Name.c_str(), Name.c_str(), 1 , 0, 1); - Name = "EIsol"; st.EIsol = new TH1F(Name.c_str(), Name.c_str(), 1 , 0, 1); - Name = "MPt"; st.MPt = new TH1F(Name.c_str(), Name.c_str(), 1 , 0, 1); - Name = "MI"; st.MI = new TH1F(Name.c_str(), Name.c_str(), 1 , 0, 1); - Name = "MTOF"; st.MTOF = new TH1F(Name.c_str(), Name.c_str(), 1 , 0, 1); - Name = "Pt"; st.Pt = new TH1F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts); - Name = "I"; st.I = new TH1F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts); - Name = "TOF"; st.TOF = new TH1F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts); - Name = "HSCPE"; st.HSCPE = new TH1F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts); - - Name = "HSCPE_SystP"; st.HSCPE_SystP = new TH1F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts); - Name = "HSCPE_SystI"; st.HSCPE_SystI = new TH1F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts); - Name = "HSCPE_SystM"; st.HSCPE_SystM = new TH1F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts); - Name = "HSCPE_SystT"; st.HSCPE_SystT = new TH1F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts); - - - - Name = "Mass"; st.Mass = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.Mass ->Sumw2(); - Name = "MassTOF"; st.MassTOF = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.MassTOF ->Sumw2(); - Name = "MassComb"; st.MassComb = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.MassComb->Sumw2(); - Name = "MaxEventMass"; st.MaxEventMass = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.MaxEventMass ->Sumw2(); - - Name = "Mass_SystP"; st.Mass_SystP = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.Mass_SystP ->Sumw2(); - Name = "MassTOF_SystP"; st.MassTOF_SystP = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.MassTOF_SystP ->Sumw2(); - Name = "MassComb_SystP"; st.MassComb_SystP = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.MassComb_SystP->Sumw2(); - Name = "MaxEventMass_SystP"; st.MaxEventMass_SystP = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound);st.MaxEventMass_SystP->Sumw2(); - - Name = "Mass_SystI"; st.Mass_SystI = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.Mass_SystI ->Sumw2(); - Name = "MassTOF_SystI"; st.MassTOF_SystI = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.MassTOF_SystI ->Sumw2(); - Name = "MassComb_SystI"; st.MassComb_SystI = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.MassComb_SystI->Sumw2(); - Name = "MaxEventMass_SystI"; st.MaxEventMass_SystI = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound);st.MaxEventMass_SystI->Sumw2(); - - Name = "Mass_SystM"; st.Mass_SystM = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.Mass_SystM ->Sumw2(); - Name = "MassTOF_SystM"; st.MassTOF_SystM = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.MassTOF_SystM ->Sumw2(); - Name = "MassComb_SystM"; st.MassComb_SystM = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.MassComb_SystM->Sumw2(); - Name = "MaxEventMass_SystM"; st.MaxEventMass_SystM = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound);st.MaxEventMass_SystM->Sumw2(); - - Name = "Mass_SystT"; st.Mass_SystT = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.Mass_SystT ->Sumw2(); - Name = "MassTOF_SystT"; st.MassTOF_SystT = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.MassTOF_SystT ->Sumw2(); - Name = "MassComb_SystT"; st.MassComb_SystT = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound); st.MassComb_SystT->Sumw2(); - Name = "MaxEventMass_SystT"; st.MaxEventMass_SystT = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, MassNBins, 0, MassHistoUpperBound);st.MaxEventMass_SystT->Sumw2(); - - - if(SkipSelectionPlot)return; - Name = "Beta_Gen" ; st.Beta_Gen = new TH1F(Name.c_str(), Name.c_str(), 20, 0, 1); st.Beta_Gen ->Sumw2(); - Name = "Beta_GenChaged" ; st.Beta_GenCharged = new TH1F(Name.c_str(), Name.c_str(), 20, 0, 1); st.Beta_GenCharged ->Sumw2(); - Name = "Beta_Triggered" ; st.Beta_Triggered = new TH1F(Name.c_str(), Name.c_str(), 20, 0, 1); st.Beta_Triggered ->Sumw2(); - Name = "Beta_Matched" ; st.Beta_Matched = new TH1F(Name.c_str(), Name.c_str(), 20, 0, 1); st.Beta_Matched ->Sumw2(); - Name = "Beta_PreselectedA"; st.Beta_PreselectedA= new TH1F(Name.c_str(), Name.c_str(), 20, 0, 1); st.Beta_PreselectedA->Sumw2(); - Name = "Beta_PreselectedB"; st.Beta_PreselectedB= new TH1F(Name.c_str(), Name.c_str(), 20, 0, 1); st.Beta_PreselectedB->Sumw2(); - Name = "Beta_PreselectedC"; st.Beta_PreselectedC= new TH1F(Name.c_str(), Name.c_str(), 20, 0, 1); st.Beta_PreselectedC->Sumw2(); - Name = "Beta_SelectedP" ; st.Beta_SelectedP = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, 20, 0, 1); st.Beta_SelectedP ->Sumw2(); - Name = "Beta_SelectedI" ; st.Beta_SelectedI = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, 20, 0, 1); st.Beta_SelectedI ->Sumw2(); - Name = "Beta_SelectedT" ; st.Beta_SelectedT = new TH2F(Name.c_str(), Name.c_str(),NCuts,0,NCuts, 20, 0, 1); st.Beta_SelectedT ->Sumw2(); - - Name = "BS_V3D" ; st.BS_V3D = new TH1F(Name.c_str(), Name.c_str(), 20, 0, 5); st.BS_V3D->Sumw2(); - Name = "BS_Chi2" ; st.BS_Chi2 = new TH1F(Name.c_str(), Name.c_str(), 20, 0, 5); st.BS_Chi2->Sumw2(); - Name = "BS_Qual" ; st.BS_Qual = new TH1F(Name.c_str(), Name.c_str(), 20, 0, 20); st.BS_Qual->Sumw2(); - Name = "BS_TNOH" ; st.BS_TNOH = new TH1F(Name.c_str(), Name.c_str(), 50, 0, 40); st.BS_TNOH->Sumw2(); - Name = "BS_TNOHFraction" ; st.BS_TNOHFraction = new TH1F(Name.c_str(), Name.c_str(), 50, 0, 1); st.BS_TNOHFraction->Sumw2(); - Name = "BS_Eta" ; st.BS_Eta = new TH1F(Name.c_str(), Name.c_str(), 50, -2.6, 2.6); st.BS_Eta->Sumw2(); - Name = "BS_TNOM" ; st.BS_TNOM = new TH1F(Name.c_str(), Name.c_str(), 40, 0, 40); st.BS_TNOM->Sumw2(); - Name = "BS_nDof" ; st.BS_nDof = new TH1F(Name.c_str(), Name.c_str(), 20, 0, 40); st.BS_nDof->Sumw2(); - Name = "BS_PtErr"; st.BS_Pterr = new TH1F(Name.c_str(), Name.c_str(), 40, 0, 1); st.BS_Pterr->Sumw2(); - Name = "BS_MPt" ; st.BS_MPt = new TH1F(Name.c_str(), Name.c_str(), 50, 0, PtHistoUpperBound); st.BS_MPt->Sumw2(); - Name = "BS_MIs" ; st.BS_MIs = new TH1F(Name.c_str(), Name.c_str(), 50, 0, dEdxS_UpLim); st.BS_MIs->Sumw2(); - Name = "BS_MIm" ; st.BS_MIm = new TH1F(Name.c_str(), Name.c_str(), 50, 0, dEdxM_UpLim); st.BS_MIm->Sumw2(); - Name = "BS_MTOF" ; st.BS_MTOF = new TH1F(Name.c_str(), Name.c_str(), 50, -2, 5); st.BS_MTOF->Sumw2(); - Name = "BS_TIsol"; st.BS_TIsol = new TH1F(Name.c_str(), Name.c_str(), 25, 0, 100); st.BS_TIsol->Sumw2(); - Name = "BS_EIsol"; st.BS_EIsol = new TH1F(Name.c_str(), Name.c_str(), 25, 0, 1.5); st.BS_EIsol->Sumw2(); - - Name = "BS_P" ; st.BS_P = new TH1F(Name.c_str(), Name.c_str(), 50, 0, PtHistoUpperBound); st.BS_P->Sumw2(); - Name = "BS_Pt" ; st.BS_Pt = new TH1F(Name.c_str(), Name.c_str(), 50, 0, PtHistoUpperBound); st.BS_Pt->Sumw2(); - Name = "BS_Is" ; st.BS_Is = new TH1F(Name.c_str(), Name.c_str(), 50, 0, dEdxS_UpLim); st.BS_Is->Sumw2(); - Name = "BS_Im" ; st.BS_Im = new TH1F(Name.c_str(), Name.c_str(), 50, 0, dEdxM_UpLim); st.BS_Im->Sumw2(); - Name = "BS_TOF" ; st.BS_TOF = new TH1F(Name.c_str(), Name.c_str(), 50, 1, 5); st.BS_TOF->Sumw2(); - - Name = "AS_P" ; st.AS_P = new TH2F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50, 0, PtHistoUpperBound); st.AS_P->Sumw2(); - Name = "AS_Pt" ; st.AS_Pt = new TH2F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50, 0, PtHistoUpperBound); st.AS_Pt->Sumw2(); - Name = "AS_Is" ; st.AS_Is = new TH2F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50, 0, dEdxS_UpLim); st.AS_Is->Sumw2(); - Name = "AS_Im" ; st.AS_Im = new TH2F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50, 0, dEdxM_UpLim); st.AS_Im->Sumw2(); - Name = "AS_TOF" ; st.AS_TOF = new TH2F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50, 1, 5); st.AS_TOF->Sumw2(); - - - Name = "BS_EtaIs"; st.BS_EtaIs = new TH2F(Name.c_str(), Name.c_str(), 50,-3, 3, 50, 0, dEdxS_UpLim); - Name = "BS_EtaIm"; st.BS_EtaIm = new TH2F(Name.c_str(), Name.c_str(), 50,-3, 3, 50, 2.8, dEdxM_UpLim); - Name = "BS_EtaP" ; st.BS_EtaP = new TH2F(Name.c_str(), Name.c_str(), 50,-3, 3, 50, 0, PtHistoUpperBound); - Name = "BS_EtaPt"; st.BS_EtaPt = new TH2F(Name.c_str(), Name.c_str(), 50,-3, 3, 50, 0, PtHistoUpperBound); - Name = "BS_EtaTOF" ; st.BS_EtaTOF = new TH2F(Name.c_str(), Name.c_str(), 50,-3, 3, 50, 0, 3); - Name = "BS_PIs" ; st.BS_PIs = new TH2F(Name.c_str(), Name.c_str(), 50, 0, PtHistoUpperBound, 50, 0, dEdxS_UpLim); - Name = "BS_PIm" ; st.BS_PIm = new TH2F(Name.c_str(), Name.c_str(), 50, 0, PtHistoUpperBound, 50, 0, dEdxM_UpLim); - Name = "BS_PtIs" ; st.BS_PtIs = new TH2F(Name.c_str(), Name.c_str(), 50, 0, PtHistoUpperBound, 50, 0, dEdxS_UpLim); - Name = "BS_PtIm" ; st.BS_PtIm = new TH2F(Name.c_str(), Name.c_str(), 50, 0, PtHistoUpperBound, 50, 0, dEdxM_UpLim); - Name = "BS_TOFIs"; st.BS_TOFIs = new TH2F(Name.c_str(), Name.c_str(), 50, 1, 5, 50, 0, dEdxS_UpLim); - Name = "BS_TOFIm"; st.BS_TOFIm = new TH2F(Name.c_str(), Name.c_str(), 50, 1, 5, 50, 0, dEdxM_UpLim); - -// Name = "AS_EtaIs"; st.AS_EtaIs = new TH3F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50,-3, 3, 50, 0, dEdxS_UpLim); -// Name = "AS_EtaIm"; st.AS_EtaIm = new TH3F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50,-3, 3, 50, 0, dEdxM_UpLim); -// Name = "AS_EtaP" ; st.AS_EtaP = new TH3F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50,-3, 3, 50, 0, PtHistoUpperBound); -// Name = "AS_EtaPt"; st.AS_EtaPt = new TH3F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50,-3, 3, 50, 0, PtHistoUpperBound); -// Name = "AS_EtaTOF"; st.AS_EtaTOF = new TH3F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50,-3, 3, 50, 0, 3); - Name = "AS_PIs" ; st.AS_PIs = new TH3F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50, 0, PtHistoUpperBound, 50, 0, dEdxS_UpLim); - Name = "AS_PIm" ; st.AS_PIm = new TH3F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50, 0, PtHistoUpperBound, 50, 0, dEdxM_UpLim); - Name = "AS_PtIs" ; st.AS_PtIs = new TH3F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50, 0, PtHistoUpperBound, 50, 0, dEdxS_UpLim); - Name = "AS_PtIm" ; st.AS_PtIm = new TH3F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50, 0, PtHistoUpperBound, 50, 0, dEdxM_UpLim); - Name = "AS_TOFIs"; st.AS_TOFIs = new TH3F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50, 1, 5, 50, 0, dEdxS_UpLim); - Name = "AS_TOFIm"; st.AS_TOFIm = new TH3F(Name.c_str(), Name.c_str(), NCuts, 0, NCuts, 50, 1, 5, 50, 0, dEdxM_UpLim); - - - st.Tree = new TTree("HscpCandidates", "HscpCandidates"); - st.Tree->SetDirectory(0); - st.Tree->Branch("Run" ,&st.Tree_Run ,"Run/i"); - st.Tree->Branch("Event" ,&st.Tree_Event ,"Event/i"); - st.Tree->Branch("Hscp" ,&st.Tree_Hscp ,"Hscp/i"); - st.Tree->Branch("Pt" ,&st.Tree_Pt ,"Pt/F"); - st.Tree->Branch("I" ,&st.Tree_I ,"I/F"); - st.Tree->Branch("TOF" ,&st.Tree_TOF ,"TOF/F"); - st.Tree->Branch("Mass" ,&st.Tree_Mass ,"Mass/F"); - - HistoFile->cd(); -} - - -void stPlots_InitFromFile(TFile* HistoFile, stPlots& st, std::string BaseName, TFile* InputFile) -{ - st.Name = BaseName; - std::string Name; - Name = BaseName; - - st.Directory = new TDirectory((Name+"ReadFromFile").c_str(), (Name+"ReadFromFile").c_str()); - st.Directory->cd(); - TDirectory::AddDirectory(kTRUE); - TH1::AddDirectory(kTRUE); - - st.TotalE = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/TotalE"); - st.TotalTE = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/TotalTE"); - st.Total = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Total"); - st.V3D = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/V3D"); - st.Chi2 = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Chi2"); - st.Qual = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Qual"); - st.TNOH = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/TNOH"); - st.TNOM = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/TNOM"); - st.nDof = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/nDof"); - st.Pterr = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Pterr"); - st.TIsol = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/TIsol"); - st.EIsol = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/EIsol"); - st.MPt = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/MPt"); - st.MI = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/MI"); - st.MTOF = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/MTOF"); - st.Pt = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Pt"); - st.I = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/I"); - st.TOF = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/TOF"); - st.HSCPE = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/HSCPE"); - - st.HSCPE_SystP = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/HSCPE_SystP"); - st.HSCPE_SystI = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/HSCPE_SystI"); - st.HSCPE_SystM = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/HSCPE_SystM"); - st.HSCPE_SystT = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/HSCPE_SystT"); - - st.Mass = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Mass"); - st.MassTOF = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/MassTOF"); - st.MassComb = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/MassComb"); - st.MaxEventMass = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/MaxEventMass"); - - st.Mass_SystP = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Mass_SystP"); - st.MassTOF_SystP = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/MassTOF_SystP"); - st.MassComb_SystP = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/MassComb_SystP"); - st.MaxEventMass_SystP= (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/MaxEventMass_SystP"); - - st.Mass_SystI = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Mass_SystI"); - st.MassTOF_SystI = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/MassTOF_SystI"); - st.MassComb_SystI = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/MassComb_SystI"); - st.MaxEventMass_SystI = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/MaxEventMass_SystI"); - - st.Mass_SystT = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Mass_SystT"); - st.MassTOF_SystT = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/MassTOF_SystT"); - st.MassComb_SystT = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/MassComb_SystT"); - st.MaxEventMass_SystT = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/MaxEventMass_SystT"); - - - st.Beta_Gen = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Beta_Gen"); - st.Beta_GenCharged = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Beta_GenCharged"); - st.Beta_Triggered = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Beta_Triggered"); - st.Beta_Matched = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Beta_Matched"); - st.Beta_PreselectedA = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Beta_PreselectedA"); - st.Beta_PreselectedB = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Beta_PreselectedB"); - st.Beta_PreselectedC = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Beta_PreselectedC"); - st.Beta_SelectedP = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Beta_SelectedP"); - st.Beta_SelectedI = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Beta_SelectedI"); - st.Beta_SelectedT = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/Beta_SelectedT"); - - st.BS_V3D = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_V3D"); - st.BS_Chi2 = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_Chi2"); - st.BS_Qual = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_Qual"); - st.BS_TNOH = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_TNOH"); - st.BS_TNOHFraction = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_TNOHFraction"); - st.BS_Eta = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_Eta"); - st.BS_TNOM = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_TNOM"); - st.BS_nDof = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_nDof"); - st.BS_Pterr = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_PtErr"); - st.BS_MPt = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_MPt"); - st.BS_MIm = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_MIm"); - st.BS_MIs = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_MIs"); - st.BS_MTOF = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_MTOF"); - st.BS_TIsol = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_TIsol"); - st.BS_EIsol = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_EIsol"); - st.BS_P = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_P"); - st.AS_P = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_P"); - st.BS_Pt = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_Pt"); - st.AS_Pt = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_Pt"); - st.BS_Im = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_Im"); - st.AS_Im = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_Im"); - st.BS_Is = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_Is"); - st.AS_Is = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_Is"); - st.BS_TOF = (TH1F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_TOF"); - st.AS_TOF = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_TOF"); - st.BS_EtaIs = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_EtaIs"); - //st.AS_EtaIs = (TH3F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_EtaIs"); - st.BS_EtaIm = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_EtaIm"); - //st.AS_EtaIm = (TH3F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_EtaIm"); - st.BS_EtaP = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_EtaP"); - //st.AS_EtaP = (TH3F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_EtaP"); - st.BS_EtaPt = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_EtaPt"); - //st.AS_EtaPt = (TH3F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_EtaPt"); - st.BS_EtaTOF = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_EtaTOF"); - //st.AS_EtaTOF = (TH3F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_EtaTOF"); - st.BS_PIs = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_PIs"); - st.AS_PIs = (TH3F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_PIs"); - st.BS_PIm = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_PIm"); - st.AS_PIm = (TH3F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_PIm"); - st.BS_PtIs = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_PtIs"); - st.AS_PtIs = (TH3F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_PtIs"); - st.BS_PtIm = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_PtIm"); - st.AS_PtIm = (TH3F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_PtIm"); - st.BS_TOFIs = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_TOFIs"); - st.AS_TOFIs = (TH3F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_TOFIs"); - st.BS_TOFIm = (TH2F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/BS_TOFIm"); - st.AS_TOFIm = (TH3F*)GetObjectFromPath(st.Directory, InputFile, BaseName + "/AS_TOFIm"); - HistoFile->cd(); -} - -void stPlots_Clear(stPlots& st, bool WriteFirst=false) -{ - if(WriteFirst){ - st.Tree->SetDirectory(st.Directory); - st.Directory->Write(); - } - delete st.Directory; -} - - -void stPlots_FillTree(stPlots& st, unsigned int Run, unsigned int Event, unsigned int Hscp, double Pt, double I, double TOF, double Mass, int MaxEntry=20000){ - if(MaxEntry>0 && st.Tree->GetEntries()>=MaxEntry)return; - st.Tree_Run = Run; - st.Tree_Event = Event; - st.Tree_Hscp = Hscp; - st.Tree_Pt = Pt; - st.Tree_I = I; - st.Tree_TOF = TOF; - st.Tree_Mass = Mass; - st.Tree->Fill(); -} - - -void stPlots_Dump(stPlots& st, FILE* pFile, int CutIndex){ - - fprintf(pFile,"---------- %10s ----------\n",st.Name.c_str()); - fprintf(pFile,"#Events = %4.2E\n",st.TotalE->GetBinContent(1 )); - fprintf(pFile,"#Triggered Events = %4.2E Eff=%4.3E\n",st.TotalTE->GetBinContent(1 ),st.TotalTE->GetBinContent(1 )/st.TotalE->GetBinContent(1 )); - fprintf(pFile,"#Tracks = %4.2E\n",st.Total->GetBinContent(1 )); - fprintf(pFile,"#Tracks passing TNOH cuts = %4.2E Eff=%4.3E\n",st.TNOH ->GetBinContent(1 ), st.TNOH ->GetBinContent(1 ) /st.Total->GetBinContent(1 )); - fprintf(pFile,"#Tracks passing TNOM cuts = %4.2E Eff=%4.3E\n",st.TNOM ->GetBinContent(1 ), st.TNOM ->GetBinContent(1 ) /st.TNOH ->GetBinContent(1 )); - fprintf(pFile,"#Tracks passing nDof cuts = %4.2E Eff=%4.3E\n",st.nDof ->GetBinContent(1 ), st.nDof ->GetBinContent(1 ) /st.TNOM ->GetBinContent(1 )); - fprintf(pFile,"#Tracks passing Qual cuts = %4.2E Eff=%4.3E\n",st.Qual ->GetBinContent(1 ), st.Qual ->GetBinContent(1 ) /st.nDof ->GetBinContent(1 )); - fprintf(pFile,"#Tracks passing Chi2 cuts = %4.2E Eff=%4.3E\n",st.Chi2 ->GetBinContent(1 ), st.Chi2 ->GetBinContent(1 ) /st.Qual ->GetBinContent(1 )); - fprintf(pFile,"#Tracks passing Min Pt cuts = %4.2E Eff=%4.3E\n",st.MPt ->GetBinContent(1 ), st.MPt ->GetBinContent(1 ) /st.Chi2 ->GetBinContent(1 )); - fprintf(pFile,"#Tracks passing Min I cuts = %4.2E Eff=%4.3E\n",st.MI ->GetBinContent(1 ), st.MI ->GetBinContent(1 ) /st.MPt ->GetBinContent(1 )); - fprintf(pFile,"#Tracks passing Min TOFcuts = %4.2E Eff=%4.3E\n",st.MTOF ->GetBinContent(1 ), st.MTOF ->GetBinContent(1 ) /st.MI ->GetBinContent(1 )); - fprintf(pFile,"#Tracks passing V3D cuts = %4.2E Eff=%4.3E\n",st.V3D ->GetBinContent(1 ), st.V3D ->GetBinContent(1 ) /st.MI ->GetBinContent(1 )); - fprintf(pFile,"#Tracks passing TIsol cuts = %4.2E Eff=%4.3E\n",st.TIsol->GetBinContent(1 ), st.TIsol->GetBinContent(1 ) /st.V3D ->GetBinContent(1 )); - fprintf(pFile,"#Tracks passing EIsol cuts = %4.2E Eff=%4.3E\n",st.EIsol->GetBinContent(1 ), st.EIsol->GetBinContent(1 ) /st.TIsol->GetBinContent(1 )); - fprintf(pFile,"#Tracks passing PtErr cuts = %4.2E Eff=%4.3E\n",st.Pterr->GetBinContent(1 ), st.Pterr->GetBinContent(1 ) /st.EIsol->GetBinContent(1 )); - fprintf(pFile,"#Tracks passing Basic cuts = %4.2E Eff=%4.3E\n",st.Pterr->GetBinContent(1 ), st.Pterr->GetBinContent(1 ) /st.Total->GetBinContent(1 )); - fprintf(pFile,"#Tracks passing Pt cuts = %4.2E Eff=%4.3E\n",st.Pt ->GetBinContent(CutIndex+1), st.Pt ->GetBinContent(CutIndex+1) /st.Pterr->GetBinContent(1 )); - fprintf(pFile,"#Tracks passing I cuts = %4.2E Eff=%4.3E\n",st.I ->GetBinContent(CutIndex+1), st.I ->GetBinContent(CutIndex+1) /st.Pt ->GetBinContent(CutIndex+1)); - fprintf(pFile,"#Tracks passing TOF cuts = %4.2E Eff=%4.3E\n",st.TOF ->GetBinContent(CutIndex+1), st.TOF ->GetBinContent(CutIndex+1) /st.I ->GetBinContent(CutIndex+1)); - fprintf(pFile,"#Tracks passing selection = %4.2E Eff=%4.3E\n",st.TOF ->GetBinContent(CutIndex+1), st.TOF ->GetBinContent(CutIndex+1) /st.Total->GetBinContent(1 )); - fprintf(pFile,"--------------------\n"); - fprintf(pFile,"HSCP Detection Efficiency Before Trigger Eff=%4.3E\n",st.TOF->GetBinContent(CutIndex+1) /(2*st.TotalE ->GetBinContent(1 ))); - fprintf(pFile,"HSCP Detection Efficiency After Trigger Eff=%4.3E\n",st.TOF->GetBinContent(CutIndex+1) /(2*st.TotalTE->GetBinContent(1 ))); - fprintf(pFile,"#HSCPTrack per HSCPEvent (with at least one HSCPTrack) Eff=%4.3E\n",st.TOF->GetBinContent(CutIndex+1) /( st.HSCPE ->GetBinContent(CutIndex+1))); - fprintf(pFile,"--------------------\n"); -} - - -void stPlots_Draw(stPlots& st, std::string SavePath, std::string LegendTitle, unsigned int CutIndex) -{ - TObject** Histos = new TObject*[10]; - std::vector legend; - TCanvas* c1; - - char CutIndexStr[255];sprintf(CutIndexStr,"_%03i",CutIndex); - - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - Histos[0] = (TH1*)st.BS_EtaIs; legend.push_back("Before Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "#eta", dEdxS_Legend.c_str(), 0,0, 0,0, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"EtaIs_BS", true); - delete c1; - -// c1 = new TCanvas("c1","c1,",600,600); legend.clear(); -// st.AS_EtaIs->GetXaxis()->SetRange(CutIndex+1,CutIndex+1); -// Histos[0] = (TH1*)st.AS_EtaIs->Project3D("zy"); legend.push_back("After Cut"); -// DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "#eta", dEdxS_Legend.c_str(), 0,0, 0,0, false); -// c1->SetLogz(true); -// DrawPreliminary(IntegratedLuminosity); -// SaveCanvas(c1,SavePath,std::string("EtaIs_AS")+CutIndexStr, true); -// delete Histos[0]; -// delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - Histos[0] = (TH1*)st.BS_EtaIm; legend.push_back("Before Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "#eta", dEdxM_Legend.c_str(), 0,0, 0,0, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"EtaIm_BS", true); - delete c1; - -// c1 = new TCanvas("c1","c1,",600,600); legend.clear(); -// st.AS_EtaIm->GetXaxis()->SetRange(CutIndex+1,CutIndex+1); -// Histos[0] = (TH1*)st.AS_EtaIm->Project3D("zy");legend.push_back("After Cut"); -// DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "#eta", dEdxM_Legend.c_str(), 0,0, 0,0, false); -// c1->SetLogz(true); -// DrawPreliminary(IntegratedLuminosity); -// SaveCanvas(c1,SavePath,std::string("EtaIm_AS")+CutIndexStr, true); -// delete Histos[0]; -// delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - Histos[0] = (TH1*)st.BS_EtaP; legend.push_back("Before Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "#eta", "p (GeV/c)", 0,0, 0,0, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"EtaP_BS", true); - delete c1; - -// c1 = new TCanvas("c1","c1,",600,600); legend.clear(); -// st.AS_EtaP->GetXaxis()->SetRange(CutIndex+1,CutIndex+1); -// Histos[0] = (TH1*)st.AS_EtaP->Project3D("zy"); legend.push_back("After Cut"); -// DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "#eta", "p (GeV/c)", 0,0, 0,0, false); -// c1->SetLogz(true); -// DrawPreliminary(IntegratedLuminosity); -// SaveCanvas(c1,SavePath,std::string("EtaP_AS")+CutIndexStr, true); -// delete Histos[0]; -// delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - Histos[0] = (TH1*)st.BS_EtaPt; legend.push_back("Before Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "#eta", "p_{T} (GeV/c)", 0,0, 0,0, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"EtaPt_BS", true); - delete c1; - -// c1 = new TCanvas("c1","c1,",600,600); legend.clear(); -// st.AS_EtaPt->GetXaxis()->SetRange(CutIndex+1,CutIndex+1); -// Histos[0] = (TH1*)st.AS_EtaPt->Project3D("zy");legend.push_back("After Cut"); -// DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "#eta", "p_{T} (GeV/c)", 0,0, 0,0, false); -// c1->SetLogz(true); -// DrawPreliminary(IntegratedLuminosity); -// SaveCanvas(c1,SavePath,std::string("EtaPt_AS")+CutIndexStr, true); -// delete Histos[0]; -// delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - Histos[0] = (TH1*)st.BS_EtaTOF; legend.push_back("Before Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "#eta", "1/#beta", 0,0, 0,0, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"EtaTOF_BS", true); - delete c1; - -// c1 = new TCanvas("c1","c1,",600,600); legend.clear(); -// st.AS_EtaTOF->GetXaxis()->SetRange(CutIndex+1,CutIndex+1); -// Histos[0] = (TH1*)st.AS_EtaTOF->Project3D("zy");legend.push_back("After Cut"); -// DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "#eta", "1/#beta", 0,0, 0,0, false); -// c1->SetLogz(true); -// DrawPreliminary(IntegratedLuminosity); -// SaveCanvas(c1,SavePath,std::string("EtaTOF_AS")+CutIndexStr, true); -// delete Histos[0]; -// delete c1; - - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - Histos[0] = (TH1*)st.BS_PIs; legend.push_back("Before Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "p (GeV/c)", dEdxS_Legend.c_str(), 0,0, 0,0, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"PIs_BS", true); - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - Histos[0] = (TH1*)st.BS_PIm; legend.push_back("Before Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "p (GeV/c)", dEdxM_Legend.c_str(), 0,0, 0,15, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"PIm_BS", true); - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - Histos[0] = (TH1*)st.BS_PtIs; legend.push_back("Before Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "p_{T} (GeV/c)", dEdxS_Legend.c_str(), 0,0, 0,0, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"PtIs_BS", true); - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - Histos[0] = (TH1*)st.BS_PtIm; legend.push_back("Before Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "p_{T} (GeV/c)", dEdxM_Legend.c_str(), 0,0, 0,15, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"PtIm_BS", true); - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - st.AS_PIs->GetXaxis()->SetRange(CutIndex+1,CutIndex+1); - Histos[0] = (TH1*)st.AS_PIs->Project3D("zy"); legend.push_back("After Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "p (GeV/c)", dEdxS_Legend.c_str(), 0,0, 0,0, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,std::string("PIs_AS")+CutIndexStr, true); - delete Histos[0]; - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - st.AS_PIm->GetXaxis()->SetRange(CutIndex+1,CutIndex+1); - Histos[0] = (TH1*)st.AS_PIm->Project3D("zy"); legend.push_back("After Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "p (GeV/c)", dEdxM_Legend.c_str(), 0,0, 0,15, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,std::string("PIm_AS")+CutIndexStr, true); - delete Histos[0]; - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - st.AS_PtIs->GetXaxis()->SetRange(CutIndex+1,CutIndex+1); - Histos[0] = (TH1*)st.AS_PtIs->Project3D("zy"); legend.push_back("After Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "p_{T} (GeV/c)", dEdxS_Legend.c_str(), 0,0, 0,0, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,std::string("PtIs_AS")+CutIndexStr, true); - delete Histos[0]; - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - st.AS_PtIm->GetXaxis()->SetRange(CutIndex+1,CutIndex+1); - Histos[0] = (TH1*)st.AS_PtIm->Project3D("zy"); legend.push_back("After Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "p_{T} (GeV/c)", dEdxM_Legend.c_str(), 0,0, 0,15, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,std::string("PtIm_AS")+CutIndexStr, true); - delete Histos[0]; - delete c1; - - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - Histos[0] = (TH1*)st.BS_TOFIs; legend.push_back("Before Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "1/#beta", dEdxS_Legend.c_str(), 0,0, 0,0, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"TOFIs_BS", true); - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - Histos[0] = (TH1*)st.BS_TOFIm; legend.push_back("Before Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "1/#beta", dEdxM_Legend.c_str(), 0,0, 0,15, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"TOFIm_BS", true); - delete c1; - - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - st.AS_TOFIs->GetXaxis()->SetRange(CutIndex+1,CutIndex+1); - Histos[0] = (TH1*)st.AS_TOFIs->Project3D("zy");legend.push_back("After Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "1/#beta", dEdxS_Legend.c_str(), 0,0, 0,0, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,std::string("TOFIs_AS")+CutIndexStr, true); - delete Histos[0]; - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - st.AS_TOFIm->GetXaxis()->SetRange(CutIndex+1,CutIndex+1); - Histos[0] = (TH1*)st.AS_TOFIm->Project3D("zy");legend.push_back("After Cut"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "1/#beta", dEdxM_Legend.c_str(), 0,0, 0,15, false); - c1->SetLogz(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,std::string("TOFIm_AS")+CutIndexStr, true); - delete Histos[0]; - delete c1; -} - -void stPlots_DrawComparison(std::string SavePath, std::string LegendTitle, unsigned int CutIndex, stPlots* st1, stPlots* st2=NULL, stPlots* st3=NULL, stPlots* st4=NULL, stPlots* st5=NULL, stPlots* st6=NULL, stPlots* st7=NULL) -{ - char CutIndexStr[255];sprintf(CutIndexStr,"_%03i",CutIndex); - - bool IsTkOnly = (SavePath.find("Type0",0) lg; - std::vector st; - if(st1)st.push_back(st1); - if(st2)st.push_back(st2); - if(st3)st.push_back(st3); - if(st4)st.push_back(st4); - if(st5)st.push_back(st5); - if(st6)st.push_back(st6); - if(st7)st.push_back(st7); - - std::vector signals; - GetSignalDefinition(signals); - for(unsigned int i=0;iName){Index=s;break;} - } - if(st[i]->Name=="MCTr"){lg.push_back("MC");}else if(Index==-1){lg.push_back(st[i]->Name);}else{lg.push_back(signals[Index].Legend);} - } - - TH1** Histos = new TH1*[10]; - std::vector legend; - TCanvas* c1; - - for(unsigned int i=0;iName=="Data")continue; - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - Histos[0] = (TH1*)st[i]->Beta_Gen; legend.push_back("Gen"); -// Histos[1] = (TH1*)st[i]->Beta_GenCharged; legend.push_back("Charged Gen"); - Histos[1] = (TH1*)st[i]->Beta_Triggered; legend.push_back("Triggered"); - DrawSuperposedHistos((TH1**)Histos, legend,"HIST E1", "#beta", "# HSCP", 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,"","P", 0.36, 0.92, 0.20, 0.04); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,st[i]->Name + "_GenBeta", true); - delete c1; - } - - for(unsigned int i=0;iName=="Data")continue; - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); -// Histos[0] = (TH1*)st[i]->Beta_Gen; legend.push_back("Gen"); -// Histos[1] = (TH1*)st[i]->Beta_GenCharged; legend.push_back("Charged Gen"); - Histos[0] = (TH1*)st[i]->Beta_Triggered; legend.push_back("Triggered"); - Histos[1] = (TH1*)st[i]->Beta_Matched; legend.push_back("Reconstructed"); -// Histos[0] = (TH1*)st[i]->Beta_PreselectedA; legend.push_back("PreselectedA"); -// Histos[0] = (TH1*)st[i]->Beta_PreselectedB; legend.push_back("PreselectedB"); - Histos[2] = (TH1*)st[i]->Beta_PreselectedC; legend.push_back("Preselected"); - Histos[3] = (TH1*)st[i]->Beta_SelectedP->ProjectionY("A",CutIndex+1,CutIndex+1); legend.push_back("p_{T}>Cut"); - Histos[4] = (TH1*)st[i]->Beta_SelectedI->ProjectionY("B",CutIndex+1,CutIndex+1); legend.push_back("I >Cut"); - if(!IsTkOnly){Histos[5] = (TH1*)st[i]->Beta_SelectedT->ProjectionY("C",CutIndex+1,CutIndex+1); legend.push_back("ToF>Cut");} - DrawSuperposedHistos((TH1**)Histos, legend,"HIST E1", "#beta", "# HSCP", 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P", 0.36, 0.92, 0.20, 0.025); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,st[i]->Name + "_Beta", true); - delete Histos[3]; delete Histos[4]; - if(!IsTkOnly)delete Histos[5]; - delete c1; - } - - - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - for(unsigned int i=0;iBS_V3D->Clone(); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "V3D (cm)", "arbitrary units", 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"V3D_BS", true); - for(unsigned int i=0;iBS_Chi2->Clone(); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "#chi^{2}/ndof", "arbitrary units", 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"Chi2_BS", true); - for(unsigned int i=0;iBS_Qual->Clone(); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "quality", "arbitrary units", 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"Quality_BS", true); - for(unsigned int i=0;iBS_TNOH->Clone(); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "#NOH", "arbitrary units", 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"NOH_BS", true); - for(unsigned int i=0;iBS_TNOHFraction->Clone(); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "Fraction of hits", "arbitrary units", 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P",0.49); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"NOHFraction_BS", true); - for(unsigned int i=0;iBS_Eta->Clone(); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "#eta", "arbitrary units", 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"Eta_BS", true); - for(unsigned int i=0;iBS_TNOM->Clone(); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "#NOM", "arbitrary units", 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"NOM_BS", true); - for(unsigned int i=0;iBS_nDof->Clone(); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "TOF_{nDof}", "arbitrary units", 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"nDof_BS", true); - for(unsigned int i=0;iBS_Pterr->Clone(); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "p_{T} Err / p_{T}", "arbitrary units", 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"Pterr_BS", true); - for(unsigned int i=0;iBS_MPt->Clone(); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "p_{T} (GeV/c)", "arbitrary units", 0,1250, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"MPt_BS", true); - for(unsigned int i=0;iBS_MIs->Clone(); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", dEdxS_Legend.c_str(), "arbitrary units", 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P", 0.79, 0.19); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"MIs_BS", true); - for(unsigned int i=0;iBS_MIm->Clone(); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", dEdxM_Legend.c_str(), "arbitrary units", 0,20, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"MIm_BS", true); - for(unsigned int i=0;iBS_MTOF->Clone(); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "1/#beta", "arbitrary units", -2,5, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - //DrawLegend((TObject**)Histos,legend,LegendTitle,"P",0.35); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"MTOF_BS", true); - for(unsigned int i=0;iBS_TIsol->Clone(); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "Isolation: Track SumPt (GeV/c)", "arbitrary units", 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"IsolT_BS", true); - for(unsigned int i=0;iBS_EIsol->Clone(); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "Isolation: (Ecal + Hcal) Energy / p", "arbitrary units", 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"IsolE_BS", true); - for(unsigned int i=0;iBS_Is; legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - char tmp[2048]; - sprintf(tmp,"Fraction of tracks/%0.2f",Histos[0]->GetBinWidth(1)); - DrawSuperposedHistos((TH1**)Histos, legend, "E1", dEdxS_Legend.c_str(), tmp, 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P", 0.76, 0.65); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"Is_BS"); - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - for(unsigned int i=0;iBS_Im; legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", dEdxM_Legend.c_str(), "arbitrary units", 0,20, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"Im_BS"); - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - for(unsigned int i=0;iAS_Is->ProjectionY((st[i]->Name+"A").c_str(),CutIndex+1,CutIndex+1)); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", dEdxS_Legend.c_str(), "arbitrary units", 0,0, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P", 0.79, 0.35); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,std::string("Is_AS")+CutIndexStr); - for(unsigned int i=0;iAS_Im->ProjectionY((st[i]->Name+"B").c_str(),CutIndex+1,CutIndex+1); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", dEdxM_Legend.c_str(), "arbitrary units", 0,20, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,std::string("Im_AS")+CutIndexStr); - for(unsigned int i=0;iBS_Pt; legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - sprintf(tmp,"Fraction of tracks/%2.0f GeV/c",Histos[0]->GetBinWidth(1)); - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "p_{T} (GeV/c)", tmp, 0,1250, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P", 0.86, 0.94); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"Pt_BS"); - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - for(unsigned int i=0;iAS_Pt->ProjectionY((st[i]->Name+"C").c_str(),CutIndex+1,CutIndex+1); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "p_{T} (GeV/c)", "arbitrary units", 0,1250, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P"); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,std::string("Pt_AS")+CutIndexStr); - for(unsigned int i=0;iBS_TOF; legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - //char tmp[2048]; - sprintf(tmp,"Fraction of tracks/%0.2f",Histos[0]->GetBinWidth(1)); - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "1/#beta", tmp, 1,4, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P", 0.82);//,0.35); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"TOF_BS", true); - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - for(unsigned int i=0;iAS_TOF->ProjectionY((st[i]->Name+"D").c_str(),CutIndex+1,CutIndex+1); legend.push_back(lg[i]); if(Histos[i]->Integral()>0) Histos[i]->Scale(1.0/Histos[i]->Integral()); } - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "1/#beta", "arbitrary units", 1,4, 0,0); - DrawLegend((TObject**)Histos,legend,LegendTitle,"P");//, 0.35); - c1->SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,std::string("TOF_AS")+CutIndexStr, true); - for(unsigned int i=0;i& signals){ - signals.push_back(stSignal("Gluino", "Gluino300", "Gluino300" , "#tilde{g} 300" , 300, 1, 1, 65.800000) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino400", "Gluino400" , "#tilde{g} 400" , 400, 1, 1, 11.20000) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino500", "Gluino500" , "#tilde{g} 500" , 500, 1, 1, 2.540000) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino600", "Gluino600" , "#tilde{g} 600" , 600, 1, 1, 0.693000) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino700", "Gluino700" , "#tilde{g} 700" , 700, 1, 1, 0.214000) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino800", "Gluino800" , "#tilde{g} 800" , 800, 1, 1, 0.072500) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino900", "Gluino900" , "#tilde{g} 900" , 900, 1, 1, 0.026200) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino1000", "Gluino1000" , "#tilde{g} 1000" ,1000, 1, 1, 0.0098700) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino1100", "Gluino1100" , "#tilde{g} 1100" ,1100, 1, 1, 0.0038600) ); //NLO - //signals.push_back(stSignal("Gluino", "Gluino1200", "Gluino1200" , "#tilde{g} 1200" ,1200, 1, 1, 0.004300) ); //NLO - - signals.push_back(stSignal("Gluino", "Gluino300N", "Gluinoneutralonly300" , "#tilde{g} 300 CS" , 300, 1, 1, 65.800000) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino400N", "Gluinoneutralonly400" , "#tilde{g} 400 CS" , 400, 1, 1, 11.20000) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino500N", "Gluinoneutralonly500" , "#tilde{g} 500 CS" , 500, 1, 1, 2.540000) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino600N", "Gluinoneutralonly600" , "#tilde{g} 600 CS" , 600, 1, 1, 0.693000) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino700N", "Gluinoneutralonly700" , "#tilde{g} 700 CS" , 700, 1, 1, 0.214000) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino800N", "Gluinoneutralonly800" , "#tilde{g} 800 CS" , 800, 1, 1, 0.072500) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino900N", "Gluinoneutralonly900" , "#tilde{g} 900 CS" , 900, 1, 1, 0.026200) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino1000N", "Gluinoneutralonly1000" , "#tilde{g} 1000 CS" ,1000, 1, 1, 0.0098700) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino1100N", "Gluinoneutralonly1100" , "#tilde{g} 1100 CS" ,1100, 1, 1, 0.0038600) ); //NLO - //signals.push_back(stSignal("Gluino", "Gluino1200N", "Gluinoneutralonly1200" , "#tilde{g} 1200 CS" ,1200, 1, 1, ) ); //NLO - - //signals.push_back(stSignal("Gluino", "Gluino600Z" , "#tilde{g} 600 Z2" , 600, 1, 1, 0.465000) ); //NLO - //signals.push_back(stSignal("Gluino", "Gluino700Z" , "#tilde{g} 700 Z2" , 700, 1, 1, 0.130000) ); //NLO - //signals.push_back(stSignal("Gluino", "Gluino800Z" , "#tilde{g} 800 Z2" , 800, 1, 1, 0.039600) ); //NLO - - signals.push_back(stSignal("Stop" , "Stop130", "stop_M-130" , "#tilde{t}_{1} 130" , 130, 1, 1, 120.000000) ); //NLO - signals.push_back(stSignal("Stop" , "Stop200", "stop_M-200" , "#tilde{t}_{1} 200" , 200, 1, 1, 13.000000) ); //NLO - signals.push_back(stSignal("Stop" , "Stop300", "stop_M-300" , "#tilde{t}_{1} 300" , 300, 1, 1, 1.310000) ); //NLO - signals.push_back(stSignal("Stop" , "Stop400", "stop_M-400" , "#tilde{t}_{1} 400" , 400, 1, 1, 0.218000) ); //NLO - signals.push_back(stSignal("Stop" , "Stop500", "stop_M-500" , "#tilde{t}_{1} 500" , 500, 0, 1, 0.047800) ); //NLO - signals.push_back(stSignal("Stop" , "Stop600", "stop_M-600" , "#tilde{t}_{1} 600" , 600, 1, 1, 0.012500) ); //NLO - signals.push_back(stSignal("Stop" , "Stop700", "stop_M-700" , "#tilde{t}_{1} 700" , 700, 1, 1, 0.003560) ); //NLO - signals.push_back(stSignal("Stop" , "Stop800", "stop_M-800" , "#tilde{t}_{1} 800" , 800, 1, 1, 0.001140) ); //NLO - - signals.push_back(stSignal("Stop" , "Stop130N", "stoponlyneutral_M-130" , "#tilde{t}_{1} 130 CS" , 130, 1, 1, 120.000000) ); //NLO - signals.push_back(stSignal("Stop" , "Stop200N", "stoponlyneutral_M-200" , "#tilde{t}_{1} 200 CS" , 200, 1, 1, 13.000000) ); //NLO - signals.push_back(stSignal("Stop" , "Stop300N", "stoponlyneutral_M-300" , "#tilde{t}_{1} 300 CS" , 300, 1, 1, 1.310000) ); //NLO - signals.push_back(stSignal("Stop" , "Stop400N", "stoponlyneutral_M-400" , "#tilde{t}_{1} 400 CS" , 400, 1, 1, 0.218000) ); //NLO - signals.push_back(stSignal("Stop" , "Stop500N", "stoponlyneutral_M-500" , "#tilde{t}_{1} 500 CS" , 500, 0, 1, 0.047800) ); //NLO - signals.push_back(stSignal("Stop" , "Stop600N", "stoponlyneutral_M-600" , "#tilde{t}_{1} 600 CS" , 600, 1, 1, 0.012500) ); //NLO - signals.push_back(stSignal("Stop" , "Stop700N", "stoponlyneutral_M-700" , "#tilde{t}_{1} 700 CS" , 700, 1, 1, 0.003560) ); //NLO - signals.push_back(stSignal("Stop" , "Stop800N", "stoponlyneutral_M-800" , "#tilde{t}_{1} 800 CS" , 800, 1, 1, 0.001140) ); //NLO - - //signals.push_back(stSignal("Stop" , "Stop300Z" , "#tilde{t}_{1} 300 Z2" , 300, 1, 1, 1.310000) ); //NLO - //signals.push_back(stSignal("Stop" , "Stop400Z" , "#tilde{t}_{1} 400 Z2" , 400, 1, 1, 0.218000) ); //NLO - //signals.push_back(stSignal("Stop" , "Stop500Z" , "#tilde{t}_{1} 500 Z2" , 500, 0, 0.047800) ); //NLO - - signals.push_back(stSignal("Stau" , "GMStau100", "stau_M-100" , "GMSB #tilde{#tau}_{1} 100" , 100, 1, 1, 1.3398) ); //NLO - signals.push_back(stSignal("Stau" , "GMStau126", "stau_M-126" , "GMSB #tilde{#tau}_{1} 126" , 126, 1, 1, 0.274591) ); //NLO - signals.push_back(stSignal("Stau" , "GMStau156", "stau_M-156" , "GMSB #tilde{#tau}_{1} 156" , 156, 0, 1, 0.0645953) ); //NLO - signals.push_back(stSignal("Stau" , "GMStau200", "stau_M-200" , "GMSB #tilde{#tau}_{1} 200" , 200, 1, 1, 0.0118093) ); //NLO - signals.push_back(stSignal("Stau" , "GMStau247", "stau_M-247" , "GMSB #tilde{#tau}_{1} 247" , 247, 0, 1, 0.00342512) ); //NLO - signals.push_back(stSignal("Stau" , "GMStau308", "stau_M-308" , "GMSB #tilde{#tau}_{1} 308" , 308, 1, 1, 0.00098447 ) ); //NLO - signals.push_back(stSignal("Stau" , "GMStau370", "stau_M-370" , "GMSB #tilde{#tau}_{1} 370" , 370, 1, 1, 0.000353388) ); //NLO - signals.push_back(stSignal("Stau" , "GMStau432", "stau_M-432" , "GMSB #tilde{#tau}_{1} 432" , 432, 1, 1, 0.000141817) ); //NLO - signals.push_back(stSignal("Stau" , "GMStau494", "stau_M-494" , "GMSB #tilde{#tau}_{1} 494" , 494, 1, 1, 0.00006177) ); //NLO - - signals.push_back(stSignal("Stau" , "PPStau100", "PPStau100", "Pair #tilde{#tau}_{1} 100" , 100, 1, 1, 0.0382) ); //NLO - signals.push_back(stSignal("Stau" , "PPStau126", "PPStau126", "Pair #tilde{#tau}_{1} 126" , 126, 0, 1, 0.0161) ); //NLO - signals.push_back(stSignal("Stau" , "PPStau156", "PPStau156", "Pair #tilde{#tau}_{1} 156" , 156, 0, 1, 0.00704) ); //NLO - signals.push_back(stSignal("Stau" , "PPStau200", "PPStau200", "Pair #tilde{#tau}_{1} 200" , 200, 1, 1, 0.00247) ); //NLO - signals.push_back(stSignal("Stau" , "PPStau247", "PPStau247", "Pair #tilde{#tau}_{1} 247" , 247, 0, 1, 0.00101) ); //NLO - signals.push_back(stSignal("Stau" , "PPStau308", "PPStau308", "Pair #tilde{#tau}_{1} 308" , 308, 0, 1, 0.000353) ); //NLO - - signals.push_back(stSignal("DCRho08HyperK" , "DCRho08HyperK100" , "DCRho08HyperK100" , "DICHAMP #tilde{K} 100" , 100, 1, 1, 1.405000) ); //LO - signals.push_back(stSignal("DCRho08HyperK" , "DCRho08HyperK121" , "DCRho08HyperK121" , "DICHAMP #tilde{K} 121" , 121, 1, 1, 0.979000) ); //LO - signals.push_back(stSignal("DCRho08HyperK" , "DCRho08HyperK182" , "DCRho08HyperK182" , "DICHAMP #tilde{K} 182" , 182, 0, 1, 0.560000) ); //LO - signals.push_back(stSignal("DCRho08HyperK" , "DCRho08HyperK242" , "DCRho08HyperK242" , "DICHAMP #tilde{K} 242" , 242, 0, 1, 0.489000) ); //LO - signals.push_back(stSignal("DCRho08HyperK" , "DCRho08HyperK302" , "DCRho08HyperK302" , "DICHAMP #tilde{K} 302" , 302, 1, 1, 0.463000) ); //LO - signals.push_back(stSignal("DCRho08HyperK" , "DCRho08HyperK350" , "DCRho08HyperK350" , "DICHAMP #tilde{K} 350" , 350, 1, 1, 0.473000) ); //LO - signals.push_back(stSignal("DCRho08HyperK" , "DCRho08HyperK370" , "DCRho08HyperK370" , "DICHAMP #tilde{K} 370" , 370, 1, 1, 0.48288105) ); //LO - signals.push_back(stSignal("DCRho08HyperK" , "DCRho08HyperK390" , "DCRho08HyperK390" , "DICHAMP #tilde{K} 390" , 390, 1, 1, 0.47132496) ); //LO - signals.push_back(stSignal("DCRho08HyperK" , "DCRho08HyperK395" , "DCRho08HyperK395" , "DICHAMP #tilde{K} 395" , 395, 1, 1, 0.420000) ); //LO - signals.push_back(stSignal("DCRho08HyperK" , "DCRho08HyperK400" , "DCRho08HyperK400" , "DICHAMP #tilde{K} 400" , 400, 1, 1, 0.473000) ); //LO - signals.push_back(stSignal("DCRho08HyperK" , "DCRho08HyperK410" , "DCRho08HyperK410" , "DICHAMP #tilde{K} 410" , 410, 1, 1, 0.0060812129) ); //LO - signals.push_back(stSignal("DCRho08HyperK" , "DCRho08HyperK420" , "DCRho08HyperK420" , "DICHAMP #tilde{K} 420" , 420, 1, 1, 0.003500) ); //LO - signals.push_back(stSignal("DCRho08HyperK" , "DCRho08HyperK500" , "DCRho08HyperK500" , "DICHAMP #tilde{K} 500" , 500, 1, 1, 0.0002849) ); //LO - - signals.push_back(stSignal("DCRho12HyperK" , "DCRho12HyperK100" , "DCRho12HyperK100" , "DICHAMP #tilde{K} 100" , 100, 1, 1, 0.8339415992) ); //LO - signals.push_back(stSignal("DCRho12HyperK" , "DCRho12HyperK182" , "DCRho12HyperK182" , "DICHAMP #tilde{K} 182" , 182, 1, 1, 0.168096952140) ); //LO - signals.push_back(stSignal("DCRho12HyperK" , "DCRho12HyperK302" , "DCRho12HyperK302" , "DICHAMP #tilde{K} 302" , 302, 1, 1, 0.079554948387) ); //LO - signals.push_back(stSignal("DCRho12HyperK" , "DCRho12HyperK500" , "DCRho12HyperK500" , "DICHAMP #tilde{K} 500" , 500, 1, 1, 0.063996737) ); //LO - signals.push_back(stSignal("DCRho12HyperK" , "DCRho12HyperK530" , "DCRho12HyperK530" , "DICHAMP #tilde{K} 530" , 530, 1, 1, 0.064943882) ); //LO - signals.push_back(stSignal("DCRho12HyperK" , "DCRho12HyperK570" , "DCRho12HyperK570" , "DICHAMP #tilde{K} 570" , 570, 1, 1, 0.0662920530) ); //LO - signals.push_back(stSignal("DCRho12HyperK" , "DCRho12HyperK590" , "DCRho12HyperK590" , "DICHAMP #tilde{K} 590" , 590, 1, 1, 0.060748383) ); //LO - signals.push_back(stSignal("DCRho12HyperK" , "DCRho12HyperK595" , "DCRho12HyperK595" , "DICHAMP #tilde{K} 595" , 595, 1, 1, 0.04968409) ); //LO - signals.push_back(stSignal("DCRho12HyperK" , "DCRho12HyperK600" , "DCRho12HyperK600" , "DICHAMP #tilde{K} 600" , 600, 1, 1, 0.0026232721237) ); //LO - signals.push_back(stSignal("DCRho12HyperK" , "DCRho12HyperK610" , "DCRho12HyperK610" , "DICHAMP #tilde{K} 610" , 610, 1, 1, 0.00127431) ); //LO - signals.push_back(stSignal("DCRho12HyperK" , "DCRho12HyperK620" , "DCRho12HyperK620" , "DICHAMP #tilde{K} 620" , 620, 1, 1, 0.00056965104319) ); //LO - signals.push_back(stSignal("DCRho12HyperK" , "DCRho12HyperK700" , "DCRho12HyperK700" , "DICHAMP #tilde{K} 700" , 700, 1, 1, 0.00006122886211) ); //LO - - signals.push_back(stSignal("DCRho16HyperK" , "DCRho16HyperK100" , "DCRho16HyperK100" , "DICHAMP #tilde{K} 100" , 100, 1, 1, 0.711518686800) ); //LO - signals.push_back(stSignal("DCRho16HyperK" , "DCRho16HyperK182" , "DCRho16HyperK182" , "DICHAMP #tilde{K} 182" , 182, 1, 1, 0.089726059780) ); //LO - signals.push_back(stSignal("DCRho16HyperK" , "DCRho16HyperK302" , "DCRho16HyperK302" , "DICHAMP #tilde{K} 302" , 302, 1, 1, 0.019769637301) ); //LO - signals.push_back(stSignal("DCRho16HyperK" , "DCRho16HyperK500" , "DCRho16HyperK500" , "DICHAMP #tilde{K} 500" , 500, 1, 1, 0.0063302286576) ); //LO - signals.push_back(stSignal("DCRho16HyperK" , "DCRho16HyperK700" , "DCRho16HyperK700" , "DICHAMP #tilde{K} 700" , 700, 1, 1, 0.002536779850) ); //LO - signals.push_back(stSignal("DCRho16HyperK" , "DCRho16HyperK730" , "DCRho16HyperK730" , "DICHAMP #tilde{K} 730" , 730, 1, 1, 0.00213454921) ); //LO - signals.push_back(stSignal("DCRho16HyperK" , "DCRho16HyperK770" , "DCRho16HyperK770" , "DICHAMP #tilde{K} 770" , 770, 1, 1, 0.001737551) ); //LO - signals.push_back(stSignal("DCRho16HyperK" , "DCRho16HyperK790" , "DCRho16HyperK790" , "DICHAMP #tilde{K} 790" , 790, 1, 1, 0.00161578593) ); //LO - signals.push_back(stSignal("DCRho16HyperK" , "DCRho16HyperK795" , "DCRho16HyperK795" , "DICHAMP #tilde{K} 795" , 795, 1, 1, 0.00153513713) ); //LO - signals.push_back(stSignal("DCRho16HyperK" , "DCRho16HyperK800" , "DCRho16HyperK800" , "DICHAMP #tilde{K} 800" , 800, 1, 1, 0.000256086965) ); //LO - signals.push_back(stSignal("DCRho16HyperK" , "DCRho16HyperK810" , "DCRho16HyperK810" , "DICHAMP #tilde{K} 810" , 810, 1, 1, 0.000140664) ); //LO - signals.push_back(stSignal("DCRho16HyperK" , "DCRho16HyperK820" , "DCRho16HyperK820" , "DICHAMP #tilde{K} 820" , 820, 1, 1, 0.000097929923655) ); //LO - signals.push_back(stSignal("DCRho16HyperK" , "DCRho16HyperK900" , "DCRho16HyperK900" , "DICHAMP #tilde{K} 900" , 900, 1, 1, 0.000013146066) ); //LO - -} - -struct stMC{ - std::string Name; - double XSection; - double MaxPtHat; - double MaxEvent; - bool IsS4PileUp; - - stMC(); - stMC(std::string Name_, double XSection_, double MaxPtHat_, int MaxEvent_, bool IsS4PileUp_){Name = Name_; XSection = XSection_; MaxPtHat = MaxPtHat_; MaxEvent = MaxEvent_;IsS4PileUp = IsS4PileUp_;} -}; - -void GetMCDefinition(std::vector& MC){ - - MC.push_back(stMC("MC_DYToTauTau" , 1.300E3 , -1, -1, 0)); - MC.push_back(stMC("MC_DYToMuMu" , 1.300E3 , -1, -1, 0)); - MC.push_back(stMC("MC_WJetsToLNu" , 2.777E4 , -1, -1, 1)); - MC.push_back(stMC("MC_TTJets" , 9.400E1 , -1, -1, 1)); - MC.push_back(stMC("MC_QCD_Pt-15to30" , 8.16E8 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-30to50" , 5.310E7 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-50to80" , 6.360E6 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-80to120" , 7.840E5 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-120to170" , 1.150E5 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-170to300" , 2.430E4 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-300to470" , 1.170E3 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-470to600" , 7.020E1 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-600to800" , 1.560E1 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-800to1000" , 1.84 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-1000to1400" , 3.320E-1 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-1400to1800" , 1.090E-2 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-1800" , 3.580E-4 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-0to15" , 4.280E3 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-15to20" , 1.450E2 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-20to30" , 1.310E2 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-30to50" , 8.400E1 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-50to80" , 3.220E1 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-80to120" , 9.98 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-120to170", 2.73 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-170to230", 7.21E-1 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-230to300", 1.94E-1 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-300" , 7.59E-2 , -1, -1, 0)); - MC.push_back(stMC("MC_ZZ" , 4.287 , -1, -1, 1)); - MC.push_back(stMC("MC_WW" , 2.783E1 , -1, -1, 1)); - MC.push_back(stMC("MC_WZ" , 1.47E1 , -1, -1, 1)); -} - -void GetInputFiles(std::vector& inputFiles, std::string SampleName, int period=0){ -// std::string BaseDirectory = "/storage/data/cms/users/quertenmont/HSCP/CMSSW_4_2_3/11_08_03/"; -// std::string BaseDirectory = "dcache:/pnfs/cms/WAX/11/store/user/jchen/11_09_13_HSCP2011EDM/"; - std::string BaseDirectory = "/uscmst1b_scratch/lpc1/lpcphys/jchen/HSCPEDM_11_01_11/"; - if(SampleName=="Data"){ - inputFiles.push_back(BaseDirectory + "Data_RunA_160404_163869.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_165001_166033.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_166034_166500.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_166501_166893.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_166894_167151.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_167153_167913.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_170826_171500.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_171501_172619.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_172620_172790.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_172791_172802.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_172803_172900.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_172901_173243.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_173244_173692.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_175860_176099.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_176100_176309.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_176467_176800.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_176801_177053.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_177074_177783.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_177788_178380.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_178420_179411.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_179434_180252.root"); - }else if(SampleName.find("MC_",0) - -#include "TROOT.h" -#include "TFile.h" -#include "TDirectory.h" -#include "TChain.h" -#include "TObject.h" -#include "TCanvas.h" -#include "TMath.h" -#include "TLegend.h" -#include "TGraph.h" -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include "TTree.h" -#include "TF1.h" -#include "TGraphAsymmErrors.h" -#include "TPaveText.h" -#include "tdrstyle.C" -#include "TRandom3.h" -#include "TProfile.h" -#include "TDirectory.h" - -namespace reco { class Vertex; class Track; class GenParticle; class DeDxData; class MuonTimeExtra;} -namespace susybsm { class HSCParticle; class HSCPIsolation;} -namespace fwlite { class ChainEvent;} -namespace trigger { class TriggerEvent;} -namespace edm {class TriggerResults; class TriggerResultsByName; class InputTag; class LumiReWeighting;} - -#if !defined(__CINT__) && !defined(__MAKECINT__) -#include "DataFormats/FWLite/interface/Handle.h" -#include "DataFormats/FWLite/interface/Event.h" -#include "DataFormats/FWLite/interface/ChainEvent.h" -#include "DataFormats/Common/interface/MergeableCounter.h" - -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCParticle.h" -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCPIsolation.h" -#include "DataFormats/MuonReco/interface/MuonTimeExtraMap.h" -#include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" - -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/HLTReco/interface/TriggerObject.h" -#include "DataFormats/Common/interface/TriggerResults.h" -#include "PhysicsTools/Utilities/interface/LumiReWeighting.h" -#include "SimDataFormats/PileupSummaryInfo/interface/PileupSummaryInfo.h" - -using namespace fwlite; -using namespace reco; -using namespace susybsm; -using namespace std; -using namespace edm; -using namespace trigger; -#endif - -#include "Analysis_Global.h" -#include "Analysis_CommonFunction.h" -#include "Analysis_PlotFunction.h" -#include "Analysis_PlotStructure.h" -#include "Analysis_Samples.h" - -/////////////////////////// FUNCTION DECLARATION ///////////////////////////// - -void Analysis_Step3(char* SavePath); -void Analysis_Step4(char* SavePath); - -void InitHistos(); - -double DistToHSCP (const susybsm::HSCParticle& hscp, const std::vector& genColl, int& IndexOfClosest); -int HowManyChargedHSCP (const std::vector& genColl); -void GetGenHSCPBeta (const std::vector& genColl, double& beta1, double& beta2, bool onlyCharged=true); -bool PassPreselection(const susybsm::HSCParticle& hscp, const reco::DeDxData& dedxSObj, const reco::DeDxData& dedxMObj, const reco::MuonTimeExtra* tof, const reco::MuonTimeExtra* dttof, const reco::MuonTimeExtra* csctof, const fwlite::ChainEvent& ev, stPlots* st=NULL, const double& GenBeta=-1, bool RescaleP=false, const double& RescaleI=0.0, const double& RescaleT=0.0); -bool PassSelection(const susybsm::HSCParticle& hscp, const reco::DeDxData& dedxSObj, const reco::DeDxData& dedxMObj, const reco::MuonTimeExtra* tof, const fwlite::ChainEvent& ev, const int& CutIndex=0, stPlots* st=NULL, const double& GenBeta=-1, bool RescaleP=false, const double& RescaleI=0.0, const double& RescaleT=0.0); - -bool PassTrigger (const fwlite::ChainEvent& ev); -bool hasGoodPtHat (const fwlite::ChainEvent& ev, const double& PtMax); - -double GetPUWeight(const fwlite::ChainEvent& ev, const bool& Iss4pileup); -double GetSampleWeight(const double& IntegratedLuminosityInPb=-1, const double& IntegratedLuminosityInPbBeforeTriggerChange=-1, const double& CrossSection=0, const double& MCEvents=0, int period=0); -double GetSampleWeightMC(const double& IntegratedLuminosityInPb, const std::vector fileNames, const double& XSection, const double& SampleSize, double MaxEvent); -double RescaledPt(const double& pt, const double& eta, const double& phi, const int& charge); -unsigned long GetInitialNumberOfMCEvent(const vector& fileNames); -/////////////////////////// VARIABLE DECLARATION ///////////////////////////// - -class DuplicatesClass{ - private : - typedef std::map, bool > RunEventHashMap; - RunEventHashMap map; - public : - DuplicatesClass(){} - ~DuplicatesClass(){} - void Clear(){map.clear();} - bool isDuplicate(unsigned int Run, unsigned int Event){ - RunEventHashMap::iterator it = map.find(std::make_pair(Run,Event)); - if(it==map.end()){ - map[std::make_pair(Run,Event)] = true; - return false; - } - return true; - } -}; - - -TFile* HistoFile; - -TH1D* Hist_Pt ; -TH1D* Hist_Is ; -TH1D* Hist_TOF; - -TH2D* Pred_Mass; -TH2D* Pred_MassTOF; -TH2D* Pred_MassComb; - -TH1D* H_A; -TH1D* H_B; -TH1D* H_C; -TH1D* H_D; -TH1D* H_E; -TH1D* H_F; -TH1D* H_G; -TH1D* H_H; -TH1D* H_P; - -std::vector CutPt ; -std::vector CutI ; -std::vector CutTOF; - -TH1D* HCuts_Pt; -TH1D* HCuts_I; -TH1D* HCuts_TOF; - -TH3D* Pred_EtaP ; -TH2D* Pred_I ; -TH2D* Pred_TOF ; -TH2D* Pred_EtaB; -TH2D* Pred_EtaS; -TH2D* Pred_EtaS2; - -TH2D* RegionD_P ; -TH2D* RegionD_I ; -TH2D* RegionD_TOF ; - -TH1D* CtrlPt_S1_Is; -TH1D* CtrlPt_S1_Im; -TH1D* CtrlPt_S1_TOF; -TH1D* CtrlPt_S2_Is; -TH1D* CtrlPt_S2_Im; -TH1D* CtrlPt_S2_TOF; -TH1D* CtrlPt_S3_Is; -TH1D* CtrlPt_S3_Im; -TH1D* CtrlPt_S3_TOF; -TH1D* CtrlPt_S4_Is; -TH1D* CtrlPt_S4_Im; -TH1D* CtrlPt_S4_TOF; -TH1D* CtrlIs_S1_TOF; -TH1D* CtrlIs_S2_TOF; -TH1D* CtrlIs_S3_TOF; -TH1D* CtrlIs_S4_TOF; - -std::vector signals; -std::vector MCsample; -std::vector DataFileName; - -stPlots DataPlots; -std::vector SignPlots; -std::vector MCPlots; -stPlots MCTrPlots; -//for initializing PileUpReweighting utility. -const float TrueDist2011_f[35] = {0.00285942, 0.0125603, 0.0299631, 0.051313, 0.0709713, 0.0847864, 0.0914627, 0.0919255, 0.0879994, 0.0814127, 0.0733995, 0.0647191, 0.0558327, 0.0470663, 0.0386988, 0.0309811, 0.0241175, 0.018241, 0.0133997, 0.00956071, 0.00662814, 0.00446735, 0.00292946, 0.00187057, 0.00116414, 0.000706805, 0.000419059, 0.000242856, 0.0001377, 7.64582e-05, 4.16101e-05, 2.22135e-05, 1.16416e-05, 5.9937e-06, 5.95542e-06};//from 2011 Full dataset - -const float Pileup_MC[35]= {1.45346E-01, 6.42802E-02, 6.95255E-02, 6.96747E-02, 6.92955E-02, 6.84997E-02, 6.69528E-02, 6.45515E-02, 6.09865E-02, 5.63323E-02, 5.07322E-02, 4.44681E-02, 3.79205E-02, 3.15131E-02, 2.54220E-02, 2.00184E-02, 1.53776E-02, 1.15387E-02, 8.47608E-03, 6.08715E-03, 4.28255E-03, 2.97185E-03, 2.01918E-03, 1.34490E-03, 8.81587E-04, 5.69954E-04, 3.61493E-04, 2.28692E-04, 1.40791E-04, 8.44606E-05, 5.10204E-05, 3.07802E-05, 1.81401E-05, 1.00201E-05, 5.80004E-06}; - - -edm::LumiReWeighting LumiWeightsMC_; -std::vector< float > BgLumiMC; //MC -std::vector< float > TrueDist2011; - -/////////////////////////// CODE PARAMETERS ///////////////////////////// - -void Analysis_Step234(string MODE="COMPILE", int TypeMode_=0, string dEdxSel_="dedxASmi", string dEdxMass_="dedxHarm2", string TOF_Label_="combined", double CutPt_=-1.0, double CutI_=-1, double CutTOF_=-1, float MinPt_=GlobalMinPt, float MaxEta_=GlobalMaxEta, float MaxPtErr_=GlobalMaxPterr) -{ - if(MODE=="COMPILE")return; - - setTDRStyle(); - gStyle->SetPadTopMargin (0.05); - gStyle->SetPadBottomMargin(0.10); - gStyle->SetPadRightMargin (0.18); - gStyle->SetPadLeftMargin (0.13); - gStyle->SetTitleSize(0.04, "XYZ"); - gStyle->SetTitleXOffset(1.1); - gStyle->SetTitleYOffset(1.35); - gStyle->SetPalette(1); - gStyle->SetNdivisions(505); - TH1::AddDirectory(kTRUE); - - GetSignalDefinition(signals); - GetMCDefinition(MCsample); - - char Buffer[2048]; - char Command[2048]; - DataFileName.clear(); - GetInputFiles(DataFileName, "Data"); - - dEdxS_Label = dEdxSel_; - dEdxM_Label = dEdxMass_; - TOF_Label = TOF_Label_; - InitdEdx(dEdxS_Label); - - TypeMode = TypeMode_; - GlobalMaxEta = MaxEta_; - GlobalMaxPterr = MaxPtErr_; - GlobalMinPt = MinPt_; - - if(TypeMode!=2){ - GlobalMinNDOF = 0; - GlobalMinTOF = 0; - }else{ - GlobalMaxTIsol *= 2; - GlobalMaxEIsol *= 2; - } - - CutPt .push_back(GlobalMinPt); CutI .push_back(GlobalMinIs); CutTOF.push_back(GlobalMinTOF); - - if(TypeMode!=2){ - for(double Pt =GlobalMinPt+5 ; Pt <200;Pt+=5){ - for(double I =GlobalMinIs+0.025 ; I <0.45 ;I+=0.025){ - CutPt .push_back(Pt); CutI .push_back(I); CutTOF.push_back(-1); - }} - }else{ - for(double Pt =GlobalMinPt+5 ; Pt <120; Pt+=5){ - for(double I =GlobalMinIs +0.025; I <0.40; I+=0.025){ - for(double TOF=GlobalMinTOF+0.025; TOF<1.35;TOF+=0.025){ - CutPt .push_back(Pt); CutI .push_back(I); CutTOF.push_back(TOF); - }}} - } - printf("%i Different Final Selection will be tested\n",(int)CutPt.size()); - - //initialize LumiReWeighting - for(int i=0; i<35; ++i) BgLumiMC.push_back(Pileup_MC[i]); - for(int i=0; i<35; ++i) TrueDist2011.push_back(TrueDist2011_f[i]); - LumiWeightsMC_ = edm::LumiReWeighting(BgLumiMC, TrueDist2011); - - sprintf(Buffer,"Results/" ); sprintf(Command,"mkdir %s",Buffer); system(Command); - sprintf(Buffer,"%s%s/" ,Buffer,dEdxS_Label.c_str()); sprintf(Command,"mkdir %s",Buffer); system(Command); - sprintf(Buffer,"%s%s/" ,Buffer,TOF_Label.c_str()); sprintf(Command,"mkdir %s",Buffer); system(Command); - sprintf(Buffer,"%sEta%02.0f/" ,Buffer,10.0*GlobalMaxEta); sprintf(Command,"mkdir %s",Buffer); system(Command); - sprintf(Buffer,"%sPtMin%02.0f/",Buffer,GlobalMinPt); sprintf(Command,"mkdir %s",Buffer); system(Command); - sprintf(Buffer,"%sType%i/" ,Buffer,TypeMode); sprintf(Command,"mkdir %s",Buffer); system(Command); -// sprintf(Buffer,"%sPt%03.0f/" ,Buffer,CutPt [0]); sprintf(Command,"mkdir %s",Buffer); system(Command); -// sprintf(Buffer,"%sI%05.2f/" ,Buffer,CutI [0]); sprintf(Command,"mkdir %s",Buffer); system(Command); -// sprintf(Buffer,"%sTOF%05.2f/" ,Buffer,CutTOF[0]); sprintf(Command,"mkdir %s",Buffer); system(Command); - - time_t start = time(NULL); - if(MODE=="ANALYSE_DATA"){ - signals.clear(); //Remove all signal samples - MCsample.clear(); - HistoFile = new TFile((string(Buffer) + "/Histos_Data.root").c_str(),"RECREATE"); - }else if(MODE=="ANALYSE_SIGNAL"){ - DataFileName.clear(); //Remove all data files - MCsample.clear(); - HistoFile = new TFile((string(Buffer) + "/Histos.root").c_str(),"RECREATE"); - }else if(MODE=="ANALYSE_MC"){ - DataFileName.clear(); //Remove all data files - signals.clear(); //Remove all signal samples - HistoFile = new TFile((string(Buffer) + "/Histos_MC.root").c_str(),"RECREATE"); - }else{ - printf("You must select a MODE:\n"); - printf("MODE='ANALYSE_DATA' : Will run the analysis on Data\n"); - printf("MODE='ANALYSE_SIGNAL' : Will run the analysis on Signal MC\n"); - printf("MODE='ANALYSE_MC' : Will run the analysis on Background MC\n"); - return; - } - - InitHistos(); - Analysis_Step3(Buffer); - Analysis_Step4(Buffer); - HistoFile->Write(); - HistoFile->Close(); - time_t end = time(NULL); - printf("RUN TIME = %i sec\n",(int)(end-start)); - return; -} - -bool hasGoodPtHat(const fwlite::ChainEvent& ev, const double& PtMax){ - if(PtMax<0)return true; - fwlite::Handle< GenEventInfoProduct > genInfo; - genInfo.getByLabel(ev, "generator"); - if(!genInfo.isValid()){printf("genInfo NotFound\n");return false;} - if((genInfo->binningValues()[0]) hTriggerResults; - hTriggerResults.getByLabel(ev, "TriggerResults", "", "MergeHLT"); - if(!hTriggerResults.isValid()) return false; - - edm::TriggerResultsByName tr = ev.triggerResultsByName(*hTriggerResults); - if(!tr.isValid())return false; - - if(tr.accept(tr.triggerIndex("HscpPathSingleMu")))return true; -// if(tr.accept(tr.triggerIndex("HscpPathDoubleMu")))return true; - if(tr.accept(tr.triggerIndex("HscpPathPFMet")))return true; -// if(tr.accept(tr.triggerIndex("HscpPathCaloMet")))return true; - return false; -} - -bool PassPreselection(const susybsm::HSCParticle& hscp, const reco::DeDxData& dedxSObj, const reco::DeDxData& dedxMObj, const reco::MuonTimeExtra* tof, const reco::MuonTimeExtra* dttof, const reco::MuonTimeExtra* csctof, const fwlite::ChainEvent& ev, stPlots* st, const double& GenBeta, bool RescaleP, const double& RescaleI, const double& RescaleT) -{ - if(TypeMode==1 && !(hscp.type() == HSCParticleType::trackerMuon || hscp.type() == HSCParticleType::globalMuon))return false; - if(TypeMode==2 && hscp.type() != HSCParticleType::globalMuon)return false; - reco::TrackRef track = hscp.trackRef(); if(track.isNull())return false; - - if(st){st->Total->Fill(0.0,Event_Weight); - if(GenBeta>=0)st->Beta_Matched->Fill(GenBeta, Event_Weight); - st->BS_TNOH->Fill(track->found(),Event_Weight); - st->BS_TNOHFraction->Fill(track->validFraction(),Event_Weight); - } - - if(track->found()validFraction()<0.80)return false; - if(track->hitPattern().numberOfValidPixelHits()<2)return false; - - if(st){st->TNOH ->Fill(0.0,Event_Weight); - st->BS_TNOM->Fill(dedxSObj.numberOfMeasurements(),Event_Weight); - } - if(dedxSObj.numberOfMeasurements()TNOM ->Fill(0.0,Event_Weight);} - - if(tof){ - if(st){st->BS_nDof->Fill(tof->nDof(),Event_Weight);} - if(TypeMode==2 && tof->nDof()nDof()nDof()nDof ->Fill(0.0,Event_Weight); - st->BS_Qual->Fill(track->qualityMask(),Event_Weight); - } - - if(track->qualityMask()Qual ->Fill(0.0,Event_Weight); - st->BS_Chi2->Fill(track->chi2()/track->ndof(),Event_Weight); - } - if(track->chi2()/track->ndof()>GlobalMaxChi2 )return false; - if(st){st->Chi2 ->Fill(0.0,Event_Weight);} - - if(st && GenBeta>=0)st->Beta_PreselectedA->Fill(GenBeta, Event_Weight); - - if(st){st->BS_MPt ->Fill(track->pt(),Event_Weight);} - if(RescaleP){ if(RescaledPt(track->pt(),track->eta(),track->phi(),track->charge())pt()MPt ->Fill(0.0,Event_Weight); - st->BS_MIs->Fill(dedxSObj.dEdx(),Event_Weight); - st->BS_MIm->Fill(dedxMObj.dEdx(),Event_Weight); - } - if(dedxSObj.dEdx()+RescaleIMI ->Fill(0.0,Event_Weight);} - if(tof){ - if(st){st->BS_MTOF ->Fill(tof->inverseBeta(),Event_Weight);} - if(TypeMode==2 && tof->inverseBeta()+RescaleTinverseBetaErr()>GlobalMaxTOFErr)return false; - } - if(st){st->MTOF ->Fill(0.0,Event_Weight); - if(GenBeta>=0)st->Beta_PreselectedB->Fill(GenBeta, Event_Weight); - } - - fwlite::Handle< std::vector > vertexCollHandle; - vertexCollHandle.getByLabel(ev,"offlinePrimaryVertices"); - if(!vertexCollHandle.isValid()){printf("Vertex Collection NotFound\n");return false;} - const std::vector& vertexColl = *vertexCollHandle; - if(vertexColl.size()<1){printf("NO VERTEX\n"); return false;} - - double dz = track->dz (vertexColl[0].position()); - double dxy = track->dxy(vertexColl[0].position()); - for(unsigned int i=1;idz (vertexColl[i].position())) < fabs(dz) ){ - dz = track->dz (vertexColl[i].position()); - dxy = track->dxy(vertexColl[i].position()); - } - } - double v3d = sqrt(dz*dz+dxy*dxy); - - if(st){st->BS_V3D->Fill(v3d,Event_Weight);} - if(v3d>GlobalMaxV3D )return false; - if(st){st->V3D ->Fill(0.0,Event_Weight);} - - fwlite::Handle IsolationH; - IsolationH.getByLabel(ev, "HSCPIsolation03"); - if(!IsolationH.isValid()){printf("Invalid IsolationH\n");return false;} - const ValueMap& IsolationMap = *IsolationH.product(); - - HSCPIsolation hscpIso = IsolationMap.get((size_t)track.key()); - - if(st){st->BS_TIsol ->Fill(hscpIso.Get_TK_SumEt(),Event_Weight);} - if(hscpIso.Get_TK_SumEt()>GlobalMaxTIsol)return false; - if(st){st->TIsol ->Fill(0.0,Event_Weight);} - - double EoP = (hscpIso.Get_ECAL_Energy() + hscpIso.Get_HCAL_Energy())/track->p(); - if(st){st->BS_EIsol ->Fill(EoP,Event_Weight);} - if(EoP>GlobalMaxEIsol)return false; - if(st){st->EIsol ->Fill(0.0,Event_Weight);} - - if(st){st->BS_Pterr ->Fill(track->ptError()/track->pt(),Event_Weight);} - if((track->ptError()/track->pt())>GlobalMaxPterr)return false; - - if(std::max(0.0,track->pt())Pterr ->Fill(0.0,Event_Weight);} - - if(st){st->BS_EtaIs->Fill(track->eta(),dedxSObj.dEdx(),Event_Weight); - st->BS_EtaIm->Fill(track->eta(),dedxMObj.dEdx(),Event_Weight); - st->BS_EtaP ->Fill(track->eta(),track->p(),Event_Weight); - st->BS_EtaPt->Fill(track->eta(),track->pt(),Event_Weight); - if(tof)st->BS_EtaTOF->Fill(track->eta(),tof->inverseBeta(),Event_Weight); - st->BS_Eta->Fill(track->eta(),Event_Weight); - } - if(fabs(track->eta())>GlobalMaxEta) return false; - - if(st){if(GenBeta>=0)st->Beta_PreselectedC->Fill(GenBeta, Event_Weight); - st->BS_P ->Fill(track->p(),Event_Weight); - st->BS_Pt ->Fill(track->pt(),Event_Weight); - st->BS_Is ->Fill(dedxSObj.dEdx(),Event_Weight); - st->BS_Im ->Fill(dedxMObj.dEdx(),Event_Weight); - if(tof)st->BS_TOF->Fill(tof->inverseBeta(),Event_Weight); - st->BS_PIs ->Fill(track->p() ,dedxSObj.dEdx(),Event_Weight); - st->BS_PIm ->Fill(track->p() ,dedxMObj.dEdx(),Event_Weight); - st->BS_PtIs ->Fill(track->pt() ,dedxSObj.dEdx(),Event_Weight); - st->BS_PtIm ->Fill(track->pt() ,dedxMObj.dEdx(),Event_Weight); - if(tof)st->BS_TOFIs->Fill(tof->inverseBeta(),dedxSObj.dEdx(),Event_Weight); - if(tof)st->BS_TOFIm->Fill(tof->inverseBeta(),dedxMObj.dEdx(),Event_Weight); - } - - return true; -} - -bool PassSelection(const susybsm::HSCParticle& hscp, const reco::DeDxData& dedxSObj, const reco::DeDxData& dedxMObj, const reco::MuonTimeExtra* tof, const fwlite::ChainEvent& ev, const int& CutIndex, stPlots* st, const double& GenBeta, bool RescaleP, const double& RescaleI, const double& RescaleT){ - reco::TrackRef track = hscp.trackRef(); if(track.isNull())return false; - - double MuonTOF = GlobalMinTOF; - double NDOF = 9999; - if(tof){ - MuonTOF = tof->inverseBeta(); - NDOF = tof->nDof(); - } - - if(RescaleP) - { - if(RescaledPt(track->pt(),track->eta(),track->phi(),track->charge())pt() - track->ptError(),track->eta(),track->phi(),track->charge()))pt()pt() - track->ptError()))Pt ->Fill(CutIndex,Event_Weight); - if(GenBeta>=0)st->Beta_SelectedP->Fill(CutIndex,GenBeta, Event_Weight); - } - - if(dedxSObj.dEdx()+RescaleII ->Fill(CutIndex,Event_Weight); - if(GenBeta>=0)st->Beta_SelectedI->Fill(CutIndex, GenBeta, Event_Weight); - } - - if(TypeMode==2 && MuonTOF+RescaleTTOF ->Fill(CutIndex,Event_Weight); - if(GenBeta>=0)st->Beta_SelectedT->Fill(CutIndex, GenBeta, Event_Weight); - st->AS_P ->Fill(CutIndex,track->p(),Event_Weight); - st->AS_Pt ->Fill(CutIndex,track->pt(),Event_Weight); - st->AS_Is ->Fill(CutIndex,dedxSObj.dEdx(),Event_Weight); - st->AS_Im ->Fill(CutIndex,dedxMObj.dEdx(),Event_Weight); - st->AS_TOF->Fill(CutIndex,MuonTOF,Event_Weight); -// st->AS_EtaIs->Fill(CutIndex,track->eta(),dedxSObj.dEdx(),Event_Weight); -// st->AS_EtaIm->Fill(CutIndex,track->eta(),dedxMObj.dEdx(),Event_Weight); -// st->AS_EtaP ->Fill(CutIndex,track->eta(),track->p(),Event_Weight); -// st->AS_EtaPt->Fill(CutIndex,track->eta(),track->pt(),Event_Weight); - st->AS_PIs ->Fill(CutIndex,track->p() ,dedxSObj.dEdx(),Event_Weight); - st->AS_PIm ->Fill(CutIndex,track->p() ,dedxMObj.dEdx(),Event_Weight); - st->AS_PtIs ->Fill(CutIndex,track->pt() ,dedxSObj.dEdx(),Event_Weight); - st->AS_PtIm ->Fill(CutIndex,track->pt() ,dedxMObj.dEdx(),Event_Weight); - st->AS_TOFIs->Fill(CutIndex,MuonTOF ,dedxSObj.dEdx(),Event_Weight); - st->AS_TOFIm->Fill(CutIndex,MuonTOF ,dedxMObj.dEdx(),Event_Weight); - } - - return true; -} - -void Analysis_FillControlAndPredictionHist(const susybsm::HSCParticle& hscp, const reco::DeDxData& dedxSObj, const reco::DeDxData& dedxMObj, const reco::MuonTimeExtra* tof){ - reco::TrackRef track = hscp.trackRef(); if(track.isNull())return; - - double MuonTOF = GlobalMinTOF; - if(tof){MuonTOF = tof->inverseBeta(); } - - Hist_Pt->Fill(track->pt(),Event_Weight); - Hist_Is->Fill(dedxSObj.dEdx(),Event_Weight); - Hist_TOF->Fill(MuonTOF,Event_Weight); - - -// /\ I -// /\ |---------------------------- -// | | | | | -// | | | | | -// | | | B | D | -// | | | | | -// | ------------------------------ -// | | | | | -// | | | A | C | -// | | | | | -// | |---|-----------|-------------| -// | | | | | -// | /---15---------------------------> PT -// | / -// /-------------------------------> -// / -// TOF - - if(track->pt()>100){ - CtrlPt_S4_Is->Fill(dedxSObj.dEdx(), Event_Weight); - CtrlPt_S4_Im->Fill(dedxMObj.dEdx(), Event_Weight); - if(tof)CtrlPt_S4_TOF->Fill(MuonTOF, Event_Weight); - }else if(track->pt()>60){ - CtrlPt_S3_Is->Fill(dedxSObj.dEdx(), Event_Weight); - CtrlPt_S3_Im->Fill(dedxMObj.dEdx(), Event_Weight); - if(tof)CtrlPt_S3_TOF->Fill(MuonTOF, Event_Weight); - }else if(track->pt()>45){ - CtrlPt_S2_Is->Fill(dedxSObj.dEdx(), Event_Weight); - CtrlPt_S2_Im->Fill(dedxMObj.dEdx(), Event_Weight); - if(tof)CtrlPt_S2_TOF->Fill(MuonTOF, Event_Weight); - }else{ - CtrlPt_S1_Is->Fill(dedxSObj.dEdx(), Event_Weight); - CtrlPt_S1_Im->Fill(dedxMObj.dEdx(), Event_Weight); - if(tof)CtrlPt_S1_TOF->Fill(MuonTOF, Event_Weight); - } - - if(dedxSObj.dEdx()>0.4){ if(tof)CtrlIs_S4_TOF->Fill(MuonTOF, Event_Weight); - }else if(dedxSObj.dEdx()>0.3){ if(tof)CtrlIs_S3_TOF->Fill(MuonTOF, Event_Weight); - }else if(dedxSObj.dEdx()>0.2){ if(tof)CtrlIs_S2_TOF->Fill(MuonTOF, Event_Weight); - }else{ if(tof)CtrlIs_S1_TOF->Fill(MuonTOF, Event_Weight); - } - - - for(unsigned int CutIndex=0;CutIndexpt()>=CutPt[CutIndex]; - bool PassICut = (dedxSObj.dEdx()>=CutI[CutIndex]); - bool PassTOFCut = MuonTOF>=CutTOF[CutIndex]; - if( PassTOFCut && PassPtCut && PassICut){ //Region D - H_D ->Fill(CutIndex, Event_Weight); - RegionD_P ->Fill(CutIndex,track->p(), Event_Weight); - RegionD_I ->Fill(CutIndex,dedxMObj.dEdx(),Event_Weight); - RegionD_TOF->Fill(CutIndex,MuonTOF, Event_Weight); - }else if( PassTOFCut && PassPtCut && !PassICut){ //Region C - H_C ->Fill(CutIndex, Event_Weight); - if(TypeMode!=2)Pred_EtaP ->Fill(CutIndex,track->eta(), track->p(), Event_Weight); -// Pred_TOF->Fill(CutIndex,MuonTOF, Event_Weight); - }else if( PassTOFCut && !PassPtCut && PassICut){ //Region B - H_B ->Fill(CutIndex, Event_Weight); - if(TypeMode!=2)Pred_I ->Fill(CutIndex,dedxMObj.dEdx(), Event_Weight); - if(TypeMode!=2)Pred_EtaS->Fill(CutIndex,track->eta(), Event_Weight); -// Pred_TOF->Fill(CutIndex,MuonTOF, Event_Weight); - }else if( PassTOFCut && !PassPtCut && !PassICut){ //Region A - H_A ->Fill(CutIndex, Event_Weight); - if(TypeMode==2)Pred_TOF->Fill(CutIndex,MuonTOF, Event_Weight); - if(TypeMode!=2)Pred_EtaB->Fill(CutIndex,track->eta(), Event_Weight); - if(TypeMode==2)Pred_EtaS2->Fill(CutIndex,track->eta(), Event_Weight); - }else if(!PassTOFCut && PassPtCut && PassICut){ //Region H - H_H ->Fill(CutIndex, Event_Weight); -// Pred_P->Fill(CutIndex,track->p(), Event_Weight); -// Pred_I->Fill(CutIndex,dedxMObj.dEdx(), Event_Weight); - }else if(!PassTOFCut && PassPtCut && !PassICut){ //Region G - H_G ->Fill(CutIndex, Event_Weight); - if(TypeMode==2)Pred_EtaP ->Fill(CutIndex,track->eta(),track->p(), Event_Weight); - }else if(!PassTOFCut && !PassPtCut && PassICut){ //Region F - H_F ->Fill(CutIndex, Event_Weight); - if(TypeMode==2)Pred_I ->Fill(CutIndex,dedxMObj.dEdx(), Event_Weight); - if(TypeMode==2)Pred_EtaS->Fill(CutIndex,track->eta(), Event_Weight); - }else if(!PassTOFCut && !PassPtCut && !PassICut){ //Region E - H_E ->Fill(CutIndex, Event_Weight); - if(TypeMode==2)Pred_EtaB->Fill(CutIndex,track->eta(), Event_Weight); - } - } - -} - - - - - -void Analysis_Step3(char* SavePath) -{ - printf("Step3: Building Mass Spectrum for B and S\n"); - - int TreeStep; - ////////////////////////////////////////////////// BUILD BACKGROUND MASS SPECTRUM - - if(DataFileName.size())stPlots_Init(HistoFile, DataPlots,"Data", CutPt.size()); - HistoFile->cd(); - - DuplicatesClass Duplicates; - Duplicates.Clear(); - - fwlite::ChainEvent treeD(DataFileName); - double SampleWeight = GetSampleWeight(-1); - Event_Weight = SampleWeight; - printf("Progressing Bar :0%% 20%% 40%% 60%% 80%% 100%%\n"); - printf("Building Mass Spectrum for D :"); - TreeStep = treeD.size()/50;if(TreeStep==0)TreeStep=1; - - bool* HSCPTk = new bool[CutPt.size()]; - double* MaxMass = new double[CutPt.size()]; - for(Long64_t ientry=0;ientry0 && ientry>MaxEntry)break; - if(ientry%TreeStep==0){printf(".");fflush(stdout);} - - if(Duplicates.isDuplicate(treeD.eventAuxiliary().run(),treeD.eventAuxiliary().event())){continue;} - - DataPlots.TotalE->Fill(0.0,Event_Weight); - if(!PassTrigger(treeD) )continue; - DataPlots.TotalTE->Fill(0.0,Event_Weight); - - fwlite::Handle hscpCollHandle; - hscpCollHandle.getByLabel(treeD,"HSCParticleProducer"); - if(!hscpCollHandle.isValid()){printf("HSCP Collection NotFound\n");continue;} - const susybsm::HSCParticleCollection& hscpColl = *hscpCollHandle; - - fwlite::Handle dEdxSCollH; - dEdxSCollH.getByLabel(treeD, dEdxS_Label.c_str()); - if(!dEdxSCollH.isValid()){printf("Invalid dEdx Selection collection\n");continue;} - - fwlite::Handle dEdxMCollH; - dEdxMCollH.getByLabel(treeD, dEdxM_Label.c_str()); - if(!dEdxMCollH.isValid()){printf("Invalid dEdx Mass collection\n");continue;} - - fwlite::Handle TOFCollH; - TOFCollH.getByLabel(treeD, "muontiming",TOF_Label.c_str()); - if(!TOFCollH.isValid()){printf("Invalid TOF collection\n");return;} - - fwlite::Handle TOFDTCollH; - TOFDTCollH.getByLabel(treeD, "muontiming",TOFdt_Label.c_str()); - if(!TOFDTCollH.isValid()){printf("Invalid DT TOF collection\n");return;} - - fwlite::Handle TOFCSCCollH; - TOFCSCCollH.getByLabel(treeD, "muontiming",TOFcsc_Label.c_str()); - if(!TOFCSCCollH.isValid()){printf("Invalid CSC TOF collection\n");return;} - - for(unsigned int CutIndex=0;CutIndexget(track.key()); - const DeDxData& dedxMObj = dEdxMCollH->get(track.key()); - const reco::MuonTimeExtra* tof = NULL; - const reco::MuonTimeExtra* dttof = NULL; - const reco::MuonTimeExtra* csctof = NULL; - if(TypeMode==2 && !hscp.muonRef().isNull()){ tof = &TOFCollH->get(hscp.muonRef().key()); dttof = &TOFDTCollH->get(hscp.muonRef().key()); csctof = &TOFCSCCollH->get(hscp.muonRef().key());} - - - double MuonTOF = GlobalMinTOF; - if(tof){MuonTOF = tof->inverseBeta(); } - - if(!PassPreselection(hscp, dedxSObj, dedxMObj, tof, dttof, csctof, treeD, &DataPlots))continue; - - Analysis_FillControlAndPredictionHist(hscp, dedxSObj, dedxMObj, tof); - - - double Mass = GetMass(track->p(),dedxMObj.dEdx()); - double MassTOF = -1; if(tof)MassTOF=GetTOFMass(track->p(),tof->inverseBeta()); - double MassComb = Mass;if(tof)MassComb=GetMassFromBeta(track->p(), (GetIBeta(dedxMObj.dEdx()) + (1/tof->inverseBeta()))*0.5 ) ; - bool PassNonTrivialSelection=false; - for(unsigned int CutIndex=0;CutIndexMaxMass[CutIndex]) MaxMass[CutIndex]=Mass; - - DataPlots.Mass->Fill(CutIndex, Mass,Event_Weight); - if(tof){ - DataPlots.MassTOF ->Fill(CutIndex, MassTOF , Event_Weight); - } - DataPlots.MassComb->Fill(CutIndex, MassComb, Event_Weight); - } //end of Cut loop -// if(track->pt()>40 && Mass>75)stPlots_FillTree(DataPlots, treeD.eventAuxiliary().run(),treeD.eventAuxiliary().event(), c, track->pt(), dedxSObj.dEdx(), tof ? tof->inverseBeta() : -1); - if (PassNonTrivialSelection) stPlots_FillTree(DataPlots, treeD.eventAuxiliary().run(),treeD.eventAuxiliary().event(), c, track->pt(), dedxSObj.dEdx(), tof ? tof->inverseBeta() : -1, Mass, -1); - } // end of Track Loop - for(unsigned int CutIndex=0;CutIndexFill(CutIndex,Event_Weight); DataPlots.MaxEventMass->Fill(CutIndex,MaxMass[CutIndex],Event_Weight);} } - }// end of Event Loop - delete [] HSCPTk; - delete [] MaxMass; - printf("\n"); - if(DataFileName.size())stPlots_Clear(DataPlots, true); - - - ////////////////////////////////////////////////// BUILD MCTRUTH MASS SPECTRUM - if(MCsample.size())stPlots_Init(HistoFile, MCTrPlots,"MCTr", CutPt.size()); - - for(unsigned int m=0;m FileName; - GetInputFiles(FileName, MCsample[m].Name); - - fwlite::ChainEvent treeM(FileName); - double SampleWeight = GetSampleWeightMC(IntegratedLuminosity,FileName, MCsample[m].XSection, treeM.size(), MCsample[m].MaxEvent); - - printf("Progressing Bar :0%% 20%% 40%% 60%% 80%% 100%%\n"); - printf("Building Mass for %10s :",MCsample[m].Name.c_str()); - TreeStep = treeM.size()/50;if(TreeStep==0)TreeStep=1; - - bool* HSCPTk = new bool[CutPt.size()]; - double* MaxMass = new double[CutPt.size()]; - for(Long64_t ientry=0;ientry0 && ientry>MaxEntry)break; - if(MCsample[m].MaxEvent>0 && ientry>MCsample[m].MaxEvent)break; - if(ientry%TreeStep==0){printf(".");fflush(stdout);} - - if(!hasGoodPtHat(treeM, MCsample[m].MaxPtHat)){continue;} - Event_Weight = SampleWeight * GetPUWeight(treeM, MCsample[m].IsS4PileUp); - - MCTrPlots .TotalE->Fill(0.0,Event_Weight); - MCPlots[m].TotalE->Fill(0.0,Event_Weight); - if(!PassTrigger(treeM) )continue; - MCTrPlots .TotalTE->Fill(0.0,Event_Weight); - MCPlots[m].TotalTE->Fill(0.0,Event_Weight); - - fwlite::Handle hscpCollHandle; - hscpCollHandle.getByLabel(treeM,"HSCParticleProducer"); - if(!hscpCollHandle.isValid()){printf("HSCP Collection NotFound\n");continue;} - const susybsm::HSCParticleCollection& hscpColl = *hscpCollHandle; - - fwlite::Handle dEdxSCollH; - dEdxSCollH.getByLabel(treeM, dEdxS_Label.c_str()); - if(!dEdxSCollH.isValid()){printf("Invalid dEdx Selection collection\n");continue;} - - fwlite::Handle dEdxMCollH; - dEdxMCollH.getByLabel(treeM, dEdxM_Label.c_str()); - if(!dEdxMCollH.isValid()){printf("Invalid dEdx Mass collection\n");continue;} - - fwlite::Handle TOFCollH; - TOFCollH.getByLabel(treeM, "muontiming",TOF_Label.c_str()); - if(!TOFCollH.isValid()){printf("Invalid TOF collection\n");continue;} - - fwlite::Handle TOFDTCollH; - TOFDTCollH.getByLabel(treeM, "muontiming",TOFdt_Label.c_str()); - if(!TOFDTCollH.isValid()){printf("Invalid DT TOF collection\n");continue;} - - fwlite::Handle TOFCSCCollH; - TOFCSCCollH.getByLabel(treeM, "muontiming",TOFcsc_Label.c_str()); - if(!TOFCSCCollH.isValid()){printf("Invalid CSCTOF collection\n");continue;} - - for(unsigned int CutIndex=0;CutIndexget(track.key()); - const DeDxData& dedxMObj = dEdxMCollH->get(track.key()); - const reco::MuonTimeExtra* tof = NULL; - const reco::MuonTimeExtra* dttof = NULL; - const reco::MuonTimeExtra* csctof = NULL; - if(TypeMode==2 && !hscp.muonRef().isNull()){ tof = &TOFCollH->get(hscp.muonRef().key()); dttof = &TOFDTCollH->get(hscp.muonRef().key()); csctof = &TOFCSCCollH->get(hscp.muonRef().key());} - - PassPreselection(hscp, dedxSObj, dedxMObj, tof, dttof, csctof, treeM, &MCPlots[m]); - if(!PassPreselection(hscp, dedxSObj, dedxMObj, tof, dttof, csctof, treeM, &MCTrPlots))continue; - Analysis_FillControlAndPredictionHist(hscp, dedxSObj, dedxMObj, tof); - - double Mass = GetMass(track->p(),dedxMObj.dEdx()); - double MassTOF = -1; if(tof)MassTOF = GetTOFMass(track->p(),tof->inverseBeta()); - double MassComb = Mass;if(tof)MassComb=GetMassFromBeta(track->p(), (GetIBeta(dedxMObj.dEdx()) + (1/tof->inverseBeta()))*0.5 ) ; - - - for(unsigned int CutIndex=0;CutIndexMaxMass[CutIndex]) MaxMass[CutIndex]=Mass; - - MCTrPlots .Mass->Fill(CutIndex , Mass,Event_Weight); - MCPlots[m].Mass->Fill(CutIndex, Mass,Event_Weight); - - if(tof){ - MCTrPlots .MassTOF ->Fill(CutIndex, MassTOF , Event_Weight); - MCPlots[m].MassTOF ->Fill(CutIndex, MassTOF , Event_Weight); - } - MCTrPlots .MassComb->Fill(CutIndex, MassComb, Event_Weight); - MCPlots[m].MassComb->Fill(CutIndex, MassComb, Event_Weight); - } //end of Cut loo - if(track->pt()>35)stPlots_FillTree(MCTrPlots , treeM.eventAuxiliary().run(),treeM.eventAuxiliary().event(), c, track->pt(), dedxSObj.dEdx(), tof ? tof->inverseBeta() : -1, Mass); - if(track->pt()>35)stPlots_FillTree(MCPlots[m], treeM.eventAuxiliary().run(),treeM.eventAuxiliary().event(), c, track->pt(), dedxSObj.dEdx(), tof ? tof->inverseBeta() : -1, Mass); - - } // end of Track Loop - for(unsigned int CutIndex=0;CutIndexFill(CutIndex,Event_Weight);MCPlots[m].HSCPE->Fill(CutIndex,Event_Weight); - MCTrPlots.MaxEventMass->Fill(CutIndex,MaxMass[CutIndex],Event_Weight);MCPlots[m].MaxEventMass->Fill(CutIndex,MaxMass[CutIndex],Event_Weight); - } } - }// end of Event Loop - delete [] HSCPTk; - delete [] MaxMass; - stPlots_Clear(MCPlots[m], true); - printf("\n"); - } - if(MCsample.size())stPlots_Clear(MCTrPlots, true); - - - ////////////////////////////////////////////////// BUILD SIGNAL MASS SPECTRUM - - for(unsigned int s=0;s SignFileName; -// GetInputFiles(SignFileName, signals[s].FileName, period); - GetInputFiles(SignFileName, signals[s].Name, period); - - fwlite::ChainEvent treeS(SignFileName); - - if (period==0) printf("Building Mass for %10s for before RPC change :",signals[s].Name.c_str()); - if (period==1) printf("\nBuilding Mass for %10s for after RPC change :",signals[s].Name.c_str()); - TreeStep = treeS.size()/50;if(TreeStep==0)TreeStep=1; - - double SampleWeight = GetSampleWeight(IntegratedLuminosity,IntegratedLuminosityBeforeTriggerChange,signals[s].XSec,(double)treeS.size(), period); - for(Long64_t ientry=0;ientry0 && ientry>MaxEntry)break; - if(ientry%TreeStep==0){printf(".");fflush(stdout);} - Event_Weight = SampleWeight * GetPUWeight(treeS, signals[s].IsS4PileUp); - - fwlite::Handle< std::vector > genCollHandle; - genCollHandle.getByLabel(treeS, "genParticles"); - if(!genCollHandle.isValid()){printf("GenParticle Collection NotFound\n");continue;} - std::vector genColl = *genCollHandle; - int NChargedHSCP=HowManyChargedHSCP(genColl); - - double HSCPGenBeta1, HSCPGenBeta2; - GetGenHSCPBeta(genColl,HSCPGenBeta1,HSCPGenBeta2,false); - if(HSCPGenBeta1>=0)SignPlots[4*s].Beta_Gen->Fill(HSCPGenBeta1, Event_Weight); if(HSCPGenBeta2>=0)SignPlots[4*s].Beta_Gen->Fill(HSCPGenBeta2, Event_Weight); - GetGenHSCPBeta(genColl,HSCPGenBeta1,HSCPGenBeta2,true); - if(HSCPGenBeta1>=0)SignPlots[4*s].Beta_GenCharged->Fill(HSCPGenBeta1, Event_Weight); if(HSCPGenBeta2>=0)SignPlots[4*s].Beta_GenCharged->Fill(HSCPGenBeta2, Event_Weight); - - SignPlots[4*s] .TotalE ->Fill(0.0,Event_Weight); - SignPlots[4*s+NChargedHSCP+1].TotalE ->Fill(0.0,Event_Weight); - if(!PassTrigger(treeS) )continue; - SignPlots[4*s] .TotalTE->Fill(0.0,Event_Weight); - SignPlots[4*s+NChargedHSCP+1].TotalTE->Fill(0.0,Event_Weight); - - if(HSCPGenBeta1>=0)SignPlots[4*s].Beta_Triggered->Fill(HSCPGenBeta1, Event_Weight); if(HSCPGenBeta2>=0)SignPlots[4*s].Beta_Triggered->Fill(HSCPGenBeta2, Event_Weight); - - fwlite::Handle hscpCollHandle; - hscpCollHandle.getByLabel(treeS,"HSCParticleProducer"); - if(!hscpCollHandle.isValid()){printf("HSCP Collection NotFound\n");continue;} - const susybsm::HSCParticleCollection& hscpColl = *hscpCollHandle; - - fwlite::Handle dEdxSCollH; - dEdxSCollH.getByLabel(treeS, dEdxS_Label.c_str()); - if(!dEdxSCollH.isValid()){printf("Invalid dEdx Selection collection\n");continue;} - - fwlite::Handle dEdxMCollH; - dEdxMCollH.getByLabel(treeS, dEdxM_Label.c_str()); - if(!dEdxMCollH.isValid()){printf("Invalid dEdx Mass collection\n");continue;} - - fwlite::Handle TOFCollH; - TOFCollH.getByLabel(treeS, "muontiming",TOF_Label.c_str()); - if(!TOFCollH.isValid()){printf("Invalid TOF collection\n");continue;} - - fwlite::Handle TOFDTCollH; - TOFDTCollH.getByLabel(treeS, "muontiming",TOFdt_Label.c_str()); - if(!TOFDTCollH.isValid()){printf("Invalid DT TOF collection\n");continue;} - - fwlite::Handle TOFCSCCollH; - TOFCSCCollH.getByLabel(treeS, "muontiming",TOFcsc_Label.c_str()); - if(!TOFCSCCollH.isValid()){printf("Invalid CSC TOF collection\n");continue;} - - for(unsigned int CutIndex=0;CutIndex0.03)continue; - - const DeDxData& dedxSObj = dEdxSCollH->get(track.key()); - const DeDxData& dedxMObj = dEdxMCollH->get(track.key()); - const reco::MuonTimeExtra* tof = NULL; - const reco::MuonTimeExtra* dttof = NULL; - const reco::MuonTimeExtra* csctof = NULL; - if(TypeMode==2 && !hscp.muonRef().isNull()){ tof = &TOFCollH->get(hscp.muonRef().key()); dttof = &TOFDTCollH->get(hscp.muonRef().key()); csctof = &TOFCSCCollH->get(hscp.muonRef().key()); } - - - ///////////// START COMPUTATION OF THE SYSTEMATIC ////////// - bool PRescale = true; - double IRescale = -0.0438; // added to the Ias value - double MRescale = 0.97; - double TRescale = -0.00694; // added to the 1/beta value - - // Systematic on P - if(PassPreselection(hscp, dedxSObj, dedxMObj, tof, dttof, csctof, treeS, NULL, -1, PRescale, 0, 0)){ - double Mass = GetMass(track->p()*PRescale,dedxMObj.dEdx()); - double MassTOF = -1; if(tof)MassTOF = GetTOFMass(track->p()*PRescale,tof->inverseBeta()); - double MassComb = Mass;if(tof)MassComb=GetMassFromBeta(track->p()*PRescale, (GetIBeta(dedxMObj.dEdx()) + (1/tof->inverseBeta()))*0.5 ) ; - - for(unsigned int CutIndex=0;CutIndexMaxMass_SystP[CutIndex]) MaxMass_SystP[CutIndex]=Mass; - SignPlots[4*s ].Mass_SystP->Fill(CutIndex, Mass,Event_Weight); - SignPlots[4*s+NChargedHSCP+1].Mass_SystP->Fill(CutIndex, Mass,Event_Weight); - if(tof){ - SignPlots[4*s ].MassTOF_SystP ->Fill(CutIndex, MassTOF , Event_Weight); - SignPlots[4*s+NChargedHSCP+1].MassTOF_SystP ->Fill(CutIndex, MassTOF , Event_Weight); - } - SignPlots[4*s ].MassComb_SystP->Fill(CutIndex, MassComb, Event_Weight); - SignPlots[4*s+NChargedHSCP+1].MassComb_SystP->Fill(CutIndex, MassComb, Event_Weight); - } - } - } - - // Systematic on I - if(PassPreselection(hscp, dedxSObj, dedxMObj, tof, dttof, csctof, treeS, NULL, -1, 0, IRescale, 0)){ - double Mass = GetMass(track->p(),dedxMObj.dEdx()); - double MassTOF = -1; if(tof)MassTOF = GetTOFMass(track->p(),tof->inverseBeta()); - double MassComb = Mass;if(tof)MassComb=GetMassFromBeta(track->p(), (GetIBeta(dedxMObj.dEdx()) + (1/tof->inverseBeta()))*0.5 ) ; - - for(unsigned int CutIndex=0;CutIndexMaxMass_SystI[CutIndex]) MaxMass_SystI[CutIndex]=Mass; - SignPlots[4*s ].Mass_SystI->Fill(CutIndex, Mass,Event_Weight); - SignPlots[4*s+NChargedHSCP+1].Mass_SystI->Fill(CutIndex, Mass,Event_Weight); - if(tof){ - SignPlots[4*s ].MassTOF_SystI ->Fill(CutIndex, MassTOF , Event_Weight); - SignPlots[4*s+NChargedHSCP+1].MassTOF_SystI ->Fill(CutIndex, MassTOF , Event_Weight); - } - SignPlots[4*s ].MassComb_SystI->Fill(CutIndex, MassComb, Event_Weight); - SignPlots[4*s+NChargedHSCP+1].MassComb_SystI->Fill(CutIndex, MassComb, Event_Weight); - } - } - } - - - // Systematic on M - if(PassPreselection(hscp, dedxSObj, dedxMObj, tof, dttof, csctof, treeS, NULL, -1, 0, 0, 0)){ - double Mass = GetMass(track->p(),dedxMObj.dEdx()*MRescale); - double MassTOF = -1; if(tof)MassTOF = GetTOFMass(track->p(),tof->inverseBeta()); - double MassComb = Mass;if(tof)MassComb=GetMassFromBeta(track->p(), (GetIBeta(dedxMObj.dEdx()*MRescale) + (1/tof->inverseBeta()))*0.5 ) ; - - for(unsigned int CutIndex=0;CutIndexMaxMass_SystM[CutIndex]) MaxMass_SystM[CutIndex]=Mass; - SignPlots[4*s ].Mass_SystM->Fill(CutIndex, Mass,Event_Weight); - SignPlots[4*s+NChargedHSCP+1].Mass_SystM->Fill(CutIndex, Mass,Event_Weight); - if(tof){ - SignPlots[4*s ].MassTOF_SystM ->Fill(CutIndex, MassTOF , Event_Weight); - SignPlots[4*s+NChargedHSCP+1].MassTOF_SystM ->Fill(CutIndex, MassTOF , Event_Weight); - } - SignPlots[4*s ].MassComb_SystM->Fill(CutIndex, MassComb, Event_Weight); - SignPlots[4*s+NChargedHSCP+1].MassComb_SystM->Fill(CutIndex, MassComb, Event_Weight); - } - } - } - - - // Systematic on T - if(PassPreselection(hscp, dedxSObj, dedxMObj, tof, dttof, csctof, treeS, NULL, -1, 0, 0, TRescale)){ - double Mass = GetMass(track->p(),dedxMObj.dEdx()); - double MassTOF = -1; if(tof)MassTOF = GetTOFMass(track->p(),tof->inverseBeta()*TRescale); - double MassComb = Mass;if(tof)MassComb=GetMassFromBeta(track->p(), (GetIBeta(dedxMObj.dEdx()) + ((1/tof->inverseBeta())*TRescale ))*0.5 ) ; - - for(unsigned int CutIndex=0;CutIndexMaxMass_SystT[CutIndex]) MaxMass_SystT[CutIndex]=Mass; - SignPlots[4*s ].Mass_SystT->Fill(CutIndex, Mass,Event_Weight); - SignPlots[4*s+NChargedHSCP+1].Mass_SystT->Fill(CutIndex, Mass,Event_Weight); - if(tof){ - SignPlots[4*s ].MassTOF_SystT ->Fill(CutIndex, MassTOF , Event_Weight); - SignPlots[4*s+NChargedHSCP+1].MassTOF_SystT ->Fill(CutIndex, MassTOF , Event_Weight); - } - SignPlots[4*s ].MassComb_SystT->Fill(CutIndex, MassComb, Event_Weight); - SignPlots[4*s+NChargedHSCP+1].MassComb_SystT->Fill(CutIndex, MassComb, Event_Weight); - } - } - } - - ///////////// END COMPUTATION OF THE SYSTEMATIC ////////// - - - - PassPreselection(hscp, dedxSObj, dedxMObj, tof, dttof, csctof, treeS, &SignPlots[4*s+NChargedHSCP+1], genColl[ClosestGen].p()/genColl[ClosestGen].energy()); - if(!PassPreselection(hscp, dedxSObj, dedxMObj, tof, dttof, csctof, treeS, &SignPlots[4*s ], genColl[ClosestGen].p()/genColl[ClosestGen].energy()))continue; - - double Mass = GetMass(track->p(),dedxMObj.dEdx()); - double MassTOF = -1; if(tof)MassTOF = GetTOFMass(track->p(),tof->inverseBeta()); - double MassComb = Mass;if(tof)MassComb=GetMassFromBeta(track->p(), (GetIBeta(dedxMObj.dEdx()) + (1/tof->inverseBeta()))*0.5 ) ; - - - for(unsigned int CutIndex=0;CutIndexMaxMass[CutIndex]) MaxMass[CutIndex]=Mass; - - SignPlots[4*s ].Mass->Fill(CutIndex, Mass,Event_Weight); - SignPlots[4*s+NChargedHSCP+1].Mass->Fill(CutIndex, Mass,Event_Weight); - if(tof){ - SignPlots[4*s ].MassTOF ->Fill(CutIndex, MassTOF , Event_Weight); - SignPlots[4*s+NChargedHSCP+1].MassTOF ->Fill(CutIndex, MassTOF , Event_Weight); - } - SignPlots[4*s ].MassComb->Fill(CutIndex, MassComb, Event_Weight); - SignPlots[4*s+NChargedHSCP+1].MassComb->Fill(CutIndex, MassComb, Event_Weight); - } //end of Cut loop - if(track->pt()>35 && Mass>35)stPlots_FillTree(SignPlots[4*s ] , treeS.eventAuxiliary().run(),treeS.eventAuxiliary().event(), c, track->pt(), dedxSObj.dEdx(), tof ? tof->inverseBeta() : -1, Mass); - } // end of Track Loop - for(unsigned int CutIndex=0;CutIndexFill(CutIndex,Event_Weight); - SignPlots[4*s+NChargedHSCP+1].HSCPE ->Fill(CutIndex,Event_Weight); - SignPlots[4*s ].MaxEventMass ->Fill(CutIndex,MaxMass[CutIndex],Event_Weight); - SignPlots[4*s+NChargedHSCP+1].MaxEventMass ->Fill(CutIndex,MaxMass[CutIndex],Event_Weight); } } - for(unsigned int CutIndex=0;CutIndexFill(CutIndex,Event_Weight); - SignPlots[4*s+NChargedHSCP+1].HSCPE_SystP ->Fill(CutIndex,Event_Weight); - SignPlots[4*s ].MaxEventMass_SystP->Fill(CutIndex,MaxMass_SystP[CutIndex],Event_Weight); - SignPlots[4*s+NChargedHSCP+1].MaxEventMass_SystP->Fill(CutIndex,MaxMass_SystP[CutIndex],Event_Weight); } } - for(unsigned int CutIndex=0;CutIndexFill(CutIndex,Event_Weight); - SignPlots[4*s+NChargedHSCP+1].HSCPE_SystI ->Fill(CutIndex,Event_Weight); - SignPlots[4*s ].MaxEventMass_SystI->Fill(CutIndex,MaxMass_SystI[CutIndex],Event_Weight); - SignPlots[4*s+NChargedHSCP+1].MaxEventMass_SystI->Fill(CutIndex,MaxMass_SystI[CutIndex],Event_Weight); } } - for(unsigned int CutIndex=0;CutIndexFill(CutIndex,Event_Weight); - SignPlots[4*s+NChargedHSCP+1].HSCPE_SystM ->Fill(CutIndex,Event_Weight); - SignPlots[4*s ].MaxEventMass_SystM->Fill(CutIndex,MaxMass_SystM[CutIndex],Event_Weight); - SignPlots[4*s+NChargedHSCP+1].MaxEventMass_SystM->Fill(CutIndex,MaxMass_SystM[CutIndex],Event_Weight); } } - for(unsigned int CutIndex=0;CutIndexFill(CutIndex,Event_Weight); - SignPlots[4*s+NChargedHSCP+1].HSCPE_SystT ->Fill(CutIndex,Event_Weight); - SignPlots[4*s ].MaxEventMass_SystT->Fill(CutIndex,MaxMass_SystT[CutIndex],Event_Weight); - SignPlots[4*s+NChargedHSCP+1].MaxEventMass_SystT->Fill(CutIndex,MaxMass_SystT[CutIndex],Event_Weight); } } - - }// end of Event Loop - } - printf("\n"); - delete [] HSCPTk; - delete [] HSCPTk_SystP; - delete [] HSCPTk_SystI; - delete [] HSCPTk_SystT; - delete [] HSCPTk_SystM; - delete [] MaxMass; - delete [] MaxMass_SystP; - delete [] MaxMass_SystI; - delete [] MaxMass_SystT; - delete [] MaxMass_SystM; - - - stPlots_Clear(SignPlots[4*s+0], true); - stPlots_Clear(SignPlots[4*s+1], true); - stPlots_Clear(SignPlots[4*s+2], true); - stPlots_Clear(SignPlots[4*s+3], true); - }// end of signal Type loop -} - -TH1D* GetPDF(TH1D* pdf){ - char NewName[2048]; - sprintf(NewName,"%s_PDF", pdf->GetName()); - - TH1D* PDF = new TH1D(NewName,NewName,pdf->GetNbinsX(),pdf->GetXaxis()->GetXmin(),pdf->GetXaxis()->GetXmax()); - for(int i=0;i<=pdf->GetNbinsX();i++){ - if(i==0){ - PDF->SetBinContent(i, pdf->GetBinContent(i) ); - }else{ - PDF->SetBinContent(i, pdf->GetBinContent(i)+PDF->GetBinContent(i-1) ); - } - } - PDF->Scale(1.0/PDF->GetBinContent(PDF->GetNbinsX())); - return PDF; -} - -double GetRandValue(TH1D* PDF){ - int randNumber = rand(); - double uniform = randNumber / (double)RAND_MAX; - for(int i=1;i<=PDF->GetNbinsX();i++){ - if(PDF->GetBinContent(i)>uniform){ - return PDF->GetXaxis()->GetBinUpEdge(i); -// return PDF->GetXaxis()->GetBinUpEdge(i-1)+(rand()/(double)RAND_MAX)*PDF->GetXaxis()->GetBinWidth(i-1); - } - } - return PDF->GetXaxis()->GetBinLowEdge(PDF->GetNbinsX()); -} - -void Analysis_Step4(char* SavePath) -{ - if(! (DataFileName.size() || MCsample.size()))return; - printf("Step4: Doing final computations\n"); - - ////////////////////////////////////////////////// MAKING THE PREDICTION - for(unsigned int CutIndex=0;CutIndexGetBinContent(CutIndex+1); - const double& B=H_B->GetBinContent(CutIndex+1); - const double& C=H_C->GetBinContent(CutIndex+1); - const double& D=H_D->GetBinContent(CutIndex+1); - const double& E=H_E->GetBinContent(CutIndex+1); - const double& F=H_F->GetBinContent(CutIndex+1); - const double& G=H_G->GetBinContent(CutIndex+1); - const double& H=H_H->GetBinContent(CutIndex+1); - double P=0; - double Perr=0; - - printf("%4i --> Pt>%7.2f I>%6.2f TOF>%+5.2f --> A=%6.2E B=%6.E C=%6.2E D=%6.2E E=%6.2E F=%6.2E G=%6.2E H=%6.2E\n",CutIndex,CutPt[CutIndex], CutI[CutIndex], CutTOF[CutIndex],A, B, C, D, E, F, G, H ); - - if(E>0){ - P = (A*F*G)/(E*E); - Perr = sqrt( ((pow(F*G,2)* A + pow(A*G,2)*F + pow(A*F,2)*G)/pow(E,4)) + (pow((2*A*F*G)/pow(E,3),2)*E)); - }else if(A>0){ - P = ((C*B)/A); - Perr = sqrt( (pow(B/A,2)*C) + (pow(C/A,2)*B) + (pow((B*(C)/(A*A)),2)*A) ); - } - - H_P->SetBinContent(CutIndex+1,P); - H_P->SetBinError (CutIndex+1,Perr); - if(P==0 || isnan(P))continue; //Skip this CutIndex --> No Prediction possible - - printf("%4i --> Pt>%7.2f I>%6.2f TOF>%+5.2f --> D=%6.2E vs Pred = %6.2E +- %6.2E (%6.2E%%)\n", CutIndex,CutPt[CutIndex], CutI[CutIndex], CutTOF[CutIndex],D, P, Perr, 100.0*Perr/P ); - - TH1D* Pred_EtaB_Proj = Pred_EtaB->ProjectionY("ProjEtaB",CutIndex+1,CutIndex+1); // Pred_EtaB_Proj->Scale(1.0/Pred_EtaB_Proj->Integral()); - TH1D* Pred_EtaS_Proj = Pred_EtaS->ProjectionY("ProjEtaS",CutIndex+1,CutIndex+1); // Pred_EtaS_Proj->Scale(1.0/Pred_EtaS_Proj->Integral()); - TH1D* Pred_EtaS2_Proj = Pred_EtaS2->ProjectionY("ProjEtaS2",CutIndex+1,CutIndex+1);// Pred_EtaS2_Proj->Scale(1.0/Pred_EtaS2_Proj->Integral()); - TH1D* Pred_EtaB_Proj_PE = (TH1D*)Pred_EtaB_Proj->Clone("Pred_EtaB_Proj_PE"); Pred_EtaB_Proj_PE->Reset(); - TH1D* Pred_EtaS_Proj_PE = (TH1D*)Pred_EtaS_Proj->Clone("Pred_EtaS_Proj_PE"); Pred_EtaS_Proj_PE->Reset(); - TH1D* Pred_EtaS2_Proj_PE = (TH1D*)Pred_EtaS2_Proj->Clone("Pred_EtaS2_Proj_PE"); Pred_EtaS2_Proj_PE->Reset(); - - Pred_EtaP->GetXaxis()->SetRange(CutIndex+1,CutIndex+1); - TH2D* Pred_EtaPWeighted = (TH2D*)Pred_EtaP->Project3D("zy"); - TH2D* Pred_EtaPWeighted_PE = (TH2D*)Pred_EtaPWeighted->Clone("Pred_EtaPWeightedPE"); Pred_EtaPWeighted_PE->Reset(); - -/* - for(int x=0;x<=Pred_EtaPWeighted->GetXaxis()->GetNbins();x++){ - double WeightP = 0.0; - if(Pred_EtaB_Proj->GetBinContent(x)>0){ - WeightP = Pred_EtaS_Proj->GetBinContent(x)/Pred_EtaB_Proj->GetBinContent(x); - if(TypeMode==2)WeightP*= Pred_EtaS2_Proj->GetBinContent(x)/Pred_EtaB_Proj->GetBinContent(x); - } - - for(int y=0;y<=Pred_EtaPWeighted->GetYaxis()->GetNbins();y++){ - Pred_EtaPWeighted->SetBinContent(x,y,Pred_EtaPWeighted->GetBinContent(x,y)*WeightP); - } - } -*/ -// TH1D* Pred_P_Proj = Pred_EtaPWeighted->ProjectionY("ProjP"); - TH1D* Pred_I_Proj = Pred_I->ProjectionY("ProjI",CutIndex+1,CutIndex+1); - TH1D* Pred_T_Proj = Pred_TOF->ProjectionY("ProjT",CutIndex+1,CutIndex+1); - TH1D* Pred_I_ProjPE = (TH1D*) Pred_I_Proj->Clone("Pred_I_ProjPE"); Pred_I_ProjPE->Reset(); - TH1D* Pred_T_ProjPE = (TH1D*) Pred_T_Proj->Clone("Pred_T_ProjPE"); Pred_T_ProjPE->Reset(); - - -// TH1D* Pred_P_PDF = GetPDF(Pred_P_Proj); -// TH1D* Pred_I_PDF = GetPDF(Pred_I_Proj); -// TH1D* Pred_T_PDF = GetPDF(Pred_T_Proj); - - TH2D* Pred_Prof_Mass = new TH2D("Pred_Prof_Mass" ,"Pred_Prof_Mass" ,MassNBins,0,MassHistoUpperBound, 100, 0, 100); - TH2D* Pred_Prof_MassTOF = new TH2D("Pred_Prof_MassTOF" ,"Pred_Prof_MassTOF" ,MassNBins,0,MassHistoUpperBound, 100, 0, 100); - TH2D* Pred_Prof_MassComb = new TH2D("Pred_Prof_MassComb","Pred_Prof_MassComb",MassNBins,0,MassHistoUpperBound, 100, 0, 100); - - - for(int x=0;xGetNbinsY()+1;x++){ - for(unsigned int pe=0;pe<100;pe++){ - Pred_Prof_Mass ->SetBinContent(x, pe, 0); - Pred_Prof_MassTOF ->SetBinContent(x, pe, 0); - Pred_Prof_MassComb->SetBinContent(x, pe, 0); - } - } - - - - TRandom3* RNG = new TRandom3(); - printf("Predicting (%4i / %4i) :",CutIndex+1,(int)CutPt.size()); - int TreeStep = 100/50;if(TreeStep==0)TreeStep=1; - for(unsigned int pe=0;pe<100;pe++){ - if(pe%TreeStep==0){printf(".");fflush(stdout);} - - TH1D* tmpH_Mass = new TH1D("tmpH_Mass" ,"tmpH_Mass" ,MassNBins,0,MassHistoUpperBound); - TH1D* tmpH_MassTOF = new TH1D("tmpH_MassTOF" ,"tmpH_MassTOF" ,MassNBins,0,MassHistoUpperBound); - TH1D* tmpH_MassComb = new TH1D("tmpH_MassComb","tmpH_MassComb",MassNBins,0,MassHistoUpperBound); - - - double PE_A=RNG->Poisson(A); - double PE_B=RNG->Poisson(B); - double PE_C=RNG->Poisson(C); - //double PE_D=RNG->Poisson(D); - double PE_E=RNG->Poisson(E); - double PE_F=RNG->Poisson(F); - double PE_G=RNG->Poisson(G); - //double PE_H=RNG->Poisson(H); - double PE_P = 0; - - if(E>0){ - PE_P = (PE_E>0 ? (PE_A*PE_F*PE_G)/(PE_E*PE_E) : 0); - }else if(A>0){ - PE_P = (PE_A>0 ? ((PE_C*PE_B)/PE_A) : 0); - } - - for(int i=0;iGetNbinsX()+1;i++){Pred_EtaB_Proj_PE->SetBinContent(i,RNG->Poisson(Pred_EtaB_Proj->GetBinContent(i)) );} Pred_EtaB_Proj_PE->Scale(1.0/Pred_EtaB_Proj_PE->Integral()); - for(int i=0;iGetNbinsX()+1;i++){Pred_EtaS_Proj_PE->SetBinContent(i,RNG->Poisson(Pred_EtaS_Proj->GetBinContent(i)) );} Pred_EtaS_Proj_PE->Scale(1.0/Pred_EtaS_Proj_PE->Integral()); - for(int i=0;iGetNbinsX()+1;i++){Pred_EtaS2_Proj_PE->SetBinContent(i,RNG->Poisson(Pred_EtaS2_Proj->GetBinContent(i)) );} Pred_EtaS2_Proj_PE->Scale(1.0/Pred_EtaS2_Proj_PE->Integral()); - - - for(int i=0;iGetNbinsX()+1;i++){ - for(int j=0;jGetNbinsY()+1;j++){ - Pred_EtaPWeighted_PE->SetBinContent(i,j,RNG->Poisson(Pred_EtaPWeighted->GetBinContent(i,j))); - }} - - double WeightP = 0.0; - for(int x=0;x<=Pred_EtaPWeighted_PE->GetXaxis()->GetNbins();x++){ - WeightP = 0.0; - if(Pred_EtaB_Proj_PE->GetBinContent(x)>0){ - WeightP = Pred_EtaS_Proj_PE ->GetBinContent(x)/Pred_EtaB_Proj_PE->GetBinContent(x); - if(TypeMode==2)WeightP*= Pred_EtaS2_Proj_PE->GetBinContent(x)/Pred_EtaB_Proj_PE->GetBinContent(x); - } - - for(int y=0;y<=Pred_EtaPWeighted_PE->GetYaxis()->GetNbins();y++){ - Pred_EtaPWeighted_PE->SetBinContent(x,y,Pred_EtaPWeighted_PE->GetBinContent(x,y)*WeightP); - } - } - TH1D* Pred_P_ProjPE = Pred_EtaPWeighted_PE->ProjectionY("Pred_P_ProjPE"); Pred_P_ProjPE->Scale(1.0/Pred_P_ProjPE->Integral()); - for(int i=0;iGetNbinsX()+1;i++){Pred_I_ProjPE->SetBinContent(i,RNG->Poisson(Pred_I_Proj->GetBinContent(i)) );} Pred_I_ProjPE->Scale(1.0/Pred_I_ProjPE->Integral()); - for(int i=0;iGetNbinsX()+1;i++){Pred_T_ProjPE->SetBinContent(i,RNG->Poisson(Pred_T_Proj->GetBinContent(i)) );} Pred_T_ProjPE->Scale(1.0/Pred_T_ProjPE->Integral()); - - double Proba, MI, MComb, MT=0, ProbaT=0; - for(int x=0;xGetNbinsX()+1;x++){ if(Pred_P_ProjPE->GetBinContent(x)<=0.0){continue;} const double& p = Pred_P_ProjPE->GetBinCenter(x); - for(int y=0;yGetNbinsX()+1;y++){ if(Pred_I_ProjPE->GetBinContent(y)<=0.0){continue;} const double& i = Pred_I_ProjPE->GetBinCenter(y); - Proba = Pred_P_ProjPE->GetBinContent(x) * Pred_I_ProjPE->GetBinContent(y); if(Proba<=0 || isnan(Proba))continue; - MI = GetMass(p,i); - MComb = MI; - tmpH_Mass->Fill(MI,Proba); - -// if(TypeMode==2){ -// for(int z=0;zGetNbinsX()+1;z++){ if(Pred_T_ProjPE->GetBinContent(z)<=0.0){continue;} const double& t = Pred_T_ProjPE->GetBinCenter(z); -// ProbaT = Proba * Pred_T_ProjPE->GetBinContent(z); if(ProbaT<=0 || isnan(ProbaT))continue; -// MT = GetTOFMass(p,t); -// tmpH_MassTOF->Fill(MT,ProbaT); -// MComb = GetMassFromBeta(p, (GetIBeta(i) + (1/t))*0.5 ); -// tmpH_MassComb->Fill(MComb,ProbaT); -// }}else{ - tmpH_MassComb->Fill(MComb,Proba); -// } - }} - -// printf("PE_P = %f\n",PE_P); - - for(int x=0;xGetNbinsX()+1;x++){ - //const double& M = tmpH_Mass->GetXaxis()->GetBinCenter(x); - Pred_Prof_Mass ->SetBinContent(x, pe, tmpH_Mass ->GetBinContent(x) * PE_P); - Pred_Prof_MassTOF ->SetBinContent(x, pe, tmpH_MassTOF ->GetBinContent(x) * PE_P); - Pred_Prof_MassComb->SetBinContent(x, pe, tmpH_MassComb->GetBinContent(x) * PE_P); - if(isnan(tmpH_Mass ->GetBinContent(x) * PE_P)){printf("%f x %f\n",tmpH_Mass ->GetBinContent(x),PE_P); fflush(stdout);exit(0);} - } - - delete Pred_P_ProjPE; - delete tmpH_Mass; - delete tmpH_MassTOF; - delete tmpH_MassComb; - }printf("\n"); - - for(int x=0;xGetNbinsY()+1;x++){ -// Pred_Mass ->SetBinContent(CutIndex+1,x,Pred_Prof_Mass ->GetBinContent(x)); Pred_Mass ->SetBinError(CutIndex+1,x,sqrt(pow(Pred_Prof_Mass ->GetBinError(x),2) + Pred_Prof_Mass ->GetBinContent(x)*(Perr/P))); -// Pred_MassTOF ->SetBinContent(CutIndex+1,x,Pred_Prof_MassTOF ->GetBinContent(x)); Pred_MassTOF ->SetBinError(CutIndex+1,x,sqrt(pow(Pred_Prof_MassTOF ->GetBinError(x),2) + Pred_Prof_MassTOF ->GetBinContent(x)*(Perr/P))); -// Pred_MassComb->SetBinContent(CutIndex+1,x,Pred_Prof_MassComb->GetBinContent(x)); Pred_MassComb ->SetBinError(CutIndex+1,x,sqrt(pow(Pred_Prof_MassComb->GetBinError(x),2) + Pred_Prof_MassComb->GetBinContent(x)*(Perr/P))); - - double Mean=0, MeanTOF=0, MeanComb=0; - for(unsigned int pe=0;pe<100;pe++){ - //if(CutIndex==4){printf("Bin=%4i pe=%3i --> BinCOntent=%f\n",x,pe,Pred_Prof_Mass ->GetBinContent(x, pe));} - Mean += Pred_Prof_Mass ->GetBinContent(x, pe); - MeanTOF += Pred_Prof_MassTOF ->GetBinContent(x, pe); - MeanComb += Pred_Prof_MassComb->GetBinContent(x, pe); - }Mean/=100.0; MeanTOF/=100.0; MeanComb/=100.0; - - //if(CutIndex==4){printf("MEAN = %f\n",Mean);} - - - double Err=0, ErrTOF=0, ErrComb=0; - for(unsigned int pe=0;pe<100;pe++){ - //if(CutIndex==4){printf("Bin=%4i pe=%3i --> DeltaM=%f\n",x,pe,sqrt(pow(Mean - Pred_Prof_Mass ->GetBinContent(x, pe),2)));} - Err += pow(Mean - Pred_Prof_Mass ->GetBinContent(x, pe),2); - ErrTOF += pow(MeanTOF - Pred_Prof_MassTOF ->GetBinContent(x, pe),2); - ErrComb += pow(MeanComb - Pred_Prof_MassComb->GetBinContent(x, pe),2); - }Err=sqrt(Err/99.0); ErrTOF=sqrt(ErrTOF/99.0); ErrComb=sqrt(ErrComb/99.0); - //if(CutIndex==4){printf("ERROR = %f\n",Err);} - - - Pred_Mass ->SetBinContent(CutIndex+1,x,Mean ); Pred_Mass ->SetBinError(CutIndex+1,x,Err ); - Pred_MassTOF ->SetBinContent(CutIndex+1,x,MeanTOF ); Pred_MassTOF ->SetBinError(CutIndex+1,x,ErrTOF ); - Pred_MassComb->SetBinContent(CutIndex+1,x,MeanComb); Pred_MassComb ->SetBinError(CutIndex+1,x,ErrComb); - } -// printf("MassInt %f\n",Pred_Prof_Mass->Integral()); - - - delete Pred_EtaB_Proj_PE; - delete Pred_EtaS_Proj_PE; - delete Pred_EtaS2_Proj_PE; - - delete Pred_Prof_Mass; - delete Pred_Prof_MassTOF; - delete Pred_Prof_MassComb; - delete Pred_EtaPWeighted_PE; - delete Pred_I_ProjPE; - delete Pred_T_ProjPE; - -// delete Pred_P_PDF; -// delete Pred_I_PDF; -// delete Pred_T_PDF; -// delete Pred_P_Proj; - delete Pred_I_Proj; - delete Pred_T_Proj; - delete Pred_EtaB_Proj; - delete Pred_EtaS_Proj; - delete Pred_EtaS2_Proj; - delete Pred_EtaPWeighted; - } - - - ////////////////////////////////////////////////// DUMP USEFUL INFORMATION - if(DataFileName.size()>0 || MCsample.size()){ //Dump info only if we are looking at some datasamples. - char Buffer[2048]; - if(DataFileName.size()>0){sprintf(Buffer,"%s/Info.txt",SavePath); - }else{ sprintf(Buffer,"%s/Info_MC.txt",SavePath);} - FILE* pFile = fopen(Buffer,"w"); - fprintf(pFile,"Selection = %s\n",dEdxS_Label.c_str()); - fprintf(pFile,"Mass = %s\n",dEdxM_Label.c_str()); - fprintf(pFile,"TOF = %s\n",TOF_Label.c_str()); - fprintf(pFile,"|eta| < %f\n",GlobalMaxEta); - fprintf(pFile,"pT_err/pT < %f\n",GlobalMaxPterr); - fprintf(pFile,"#Hit > %02i\n",GlobalMinNOH); - fprintf(pFile,"#dEdx Hit > %02i\n",GlobalMinNOM); - fprintf(pFile,"nDoF > %02i\n",GlobalMinNOH); - fprintf(pFile,"Chi2/ndf < %6.2f\n",GlobalMaxChi2); - fprintf(pFile,"SumPt < %6.2f\n",GlobalMaxTIsol); - fprintf(pFile,"E/p < %6.2f\n",GlobalMaxEIsol); - - for(unsigned int CutIndex=0;CutIndexGetBinContent(CutIndex+1); - const double& B=H_B->GetBinContent(CutIndex+1); - const double& C=H_C->GetBinContent(CutIndex+1); - const double& D=H_D->GetBinContent(CutIndex+1); - const double& E=H_E->GetBinContent(CutIndex+1); - const double& F=H_F->GetBinContent(CutIndex+1); - const double& G=H_G->GetBinContent(CutIndex+1); - const double& H=H_H->GetBinContent(CutIndex+1); - - fprintf(pFile ,"CutIndex=%4i --> (Pt>%6.2f I>%6.3f TOF>%6.3f) Ndata=%+6.2E NPred=%6.3E+-%6.3E <--> A=%6.2E B=%6.E C=%6.2E D=%6.2E E=%6.2E F=%6.2E G=%6.2E H=%6.2E\n",CutIndex,HCuts_Pt ->GetBinContent(CutIndex+1), HCuts_I ->GetBinContent(CutIndex+1), HCuts_TOF->GetBinContent(CutIndex+1), D,H_P->GetBinContent(CutIndex+1),H_P->GetBinError(CutIndex+1) ,A, B, C, D, E, F, G, H); - } - fprintf(pFile,"--------------------\n"); - fclose(pFile); - } - ////////////////////////////////////////////////// CREATE EFFICIENCY FILE - - fflush(stdout); -} - - -void InitHistos(){ - for(unsigned int m=0;mcd(); - - HCuts_Pt = new TH1D("HCuts_Pt" ,"HCuts_Pt" ,CutPt.size(),0,CutPt.size()); - HCuts_I = new TH1D("HCuts_I" ,"HCuts_I" ,CutPt.size(),0,CutPt.size()); - HCuts_TOF = new TH1D("HCuts_TOF","HCuts_TOF",CutPt.size(),0,CutPt.size()); - for(unsigned int i=0;iFill(i,CutPt[i]); HCuts_I->Fill(i,CutI[i]); HCuts_TOF->Fill(i,CutTOF[i]); } - - if(DataFileName.size() || MCsample.size()){ - H_A = new TH1D("H_A" ,"H_A" ,CutPt.size(),0,CutPt.size()); - H_B = new TH1D("H_B" ,"H_B" ,CutPt.size(),0,CutPt.size()); - H_C = new TH1D("H_C" ,"H_C" ,CutPt.size(),0,CutPt.size()); - H_D = new TH1D("H_D" ,"H_D" ,CutPt.size(),0,CutPt.size()); - H_E = new TH1D("H_E" ,"H_E" ,CutPt.size(),0,CutPt.size()); - H_F = new TH1D("H_F" ,"H_F" ,CutPt.size(),0,CutPt.size()); - H_G = new TH1D("H_G" ,"H_G" ,CutPt.size(),0,CutPt.size()); - H_H = new TH1D("H_H" ,"H_H" ,CutPt.size(),0,CutPt.size()); - H_P = new TH1D("H_P" ,"H_P" ,CutPt.size(),0,CutPt.size()); - - CtrlPt_S1_Is = new TH1D("CtrlPt_S1_Is" ,"CtrlPt_S1_Is" ,200,0,dEdxS_UpLim); CtrlPt_S1_Is ->Sumw2(); - CtrlPt_S1_Im = new TH1D("CtrlPt_S1_Im" ,"CtrlPt_S1_Im" ,200,0,dEdxM_UpLim); CtrlPt_S1_Im ->Sumw2(); - CtrlPt_S1_TOF = new TH1D("CtrlPt_S1_TOF","CtrlPt_S1_TOF",200,0,5); CtrlPt_S1_TOF->Sumw2(); - CtrlPt_S2_Is = new TH1D("CtrlPt_S2_Is" ,"CtrlPt_S2_Is" ,200,0,dEdxS_UpLim); CtrlPt_S2_Is ->Sumw2(); - CtrlPt_S2_Im = new TH1D("CtrlPt_S2_Im" ,"CtrlPt_S2_Im" ,200,0,dEdxM_UpLim); CtrlPt_S2_Im ->Sumw2(); - CtrlPt_S2_TOF = new TH1D("CtrlPt_S2_TOF","CtrlPt_S2_TOF",200,0,5); CtrlPt_S2_TOF->Sumw2(); - CtrlPt_S3_Is = new TH1D("CtrlPt_S3_Is" ,"CtrlPt_S3_Is" ,200,0,dEdxS_UpLim); CtrlPt_S3_Is ->Sumw2(); - CtrlPt_S3_Im = new TH1D("CtrlPt_S3_Im" ,"CtrlPt_S3_Im" ,200,0,dEdxM_UpLim); CtrlPt_S3_Im ->Sumw2(); - CtrlPt_S3_TOF = new TH1D("CtrlPt_S3_TOF","CtrlPt_S3_TOF",200,0,5); CtrlPt_S3_TOF->Sumw2(); - CtrlPt_S4_Is = new TH1D("CtrlPt_S4_Is" ,"CtrlPt_S4_Is" ,200,0,dEdxS_UpLim); CtrlPt_S4_Is ->Sumw2(); - CtrlPt_S4_Im = new TH1D("CtrlPt_S4_Im" ,"CtrlPt_S4_Im" ,200,0,dEdxM_UpLim); CtrlPt_S4_Im ->Sumw2(); - CtrlPt_S4_TOF = new TH1D("CtrlPt_S4_TOF","CtrlPt_S4_TOF",200,0,5); CtrlPt_S4_TOF->Sumw2(); - - CtrlIs_S1_TOF = new TH1D("CtrlIs_S1_TOF","CtrlIs_S1_TOF",200,0,5); CtrlIs_S1_TOF->Sumw2(); - CtrlIs_S2_TOF = new TH1D("CtrlIs_S2_TOF","CtrlIs_S2_TOF",200,0,5); CtrlIs_S2_TOF->Sumw2(); - CtrlIs_S3_TOF = new TH1D("CtrlIs_S3_TOF","CtrlIs_S3_TOF",200,0,5); CtrlIs_S3_TOF->Sumw2(); - CtrlIs_S4_TOF = new TH1D("CtrlIs_S4_TOF","CtrlIs_S4_TOF",200,0,5); CtrlIs_S4_TOF->Sumw2(); - - char Name [1024]; - sprintf(Name,"Is"); - Hist_Is = new TH1D(Name,Name, 200,0,dEdxS_UpLim); - Hist_Is->Sumw2(); - - sprintf(Name,"Pt"); - Hist_Pt = new TH1D(Name,Name,200,0,PtHistoUpperBound); - Hist_Pt->Sumw2(); - - sprintf(Name,"TOF"); - Hist_TOF = new TH1D(Name,Name,200,-10,20); - Hist_TOF->Sumw2(); - - sprintf(Name,"Pred_Mass"); - Pred_Mass = new TH2D(Name,Name,CutPt.size(),0,CutPt.size(),MassNBins,0,MassHistoUpperBound); - Pred_Mass->Sumw2(); - - sprintf(Name,"Pred_MassTOF"); - Pred_MassTOF = new TH2D(Name,Name,CutPt.size(),0,CutPt.size(), MassNBins,0,MassHistoUpperBound); - Pred_MassTOF->Sumw2(); - - sprintf(Name,"Pred_MassComb"); - Pred_MassComb = new TH2D(Name,Name,CutPt.size(),0,CutPt.size(),MassNBins,0,MassHistoUpperBound); - Pred_MassComb->Sumw2(); - - sprintf(Name,"Pred_I"); - Pred_I = new TH2D(Name,Name,CutPt.size(),0,CutPt.size(), 200,GlobalMinIm,dEdxM_UpLim); - Pred_I->Sumw2(); - - sprintf(Name,"Pred_EtaB"); - Pred_EtaB = new TH2D(Name,Name,CutPt.size(),0,CutPt.size(), 50,-3,3); - Pred_EtaB->Sumw2(); - - sprintf(Name,"Pred_EtaS"); - Pred_EtaS = new TH2D(Name,Name,CutPt.size(),0,CutPt.size(), 50,-3,3); - Pred_EtaS->Sumw2(); - - sprintf(Name,"Pred_EtaS2"); - Pred_EtaS2 = new TH2D(Name,Name,CutPt.size(),0,CutPt.size(), 50,-3,3); - Pred_EtaS2->Sumw2(); - - - sprintf(Name,"Pred_EtaP"); - Pred_EtaP = new TH3D(Name,Name,CutPt.size(),0,CutPt.size(), 50, -3, 3, 200,GlobalMinPt,PtHistoUpperBound); - Pred_EtaP->Sumw2(); - - sprintf(Name,"Pred_TOF"); - Pred_TOF = new TH2D(Name,Name,CutPt.size(),0,CutPt.size(), 200,GlobalMinTOF,5); - Pred_TOF->Sumw2(); - - - sprintf(Name,"RegionD_I"); - RegionD_I = new TH2D(Name,Name,CutPt.size(),0,CutPt.size(), 200,GlobalMinIm,dEdxM_UpLim); - RegionD_I->Sumw2(); - - sprintf(Name,"RegionD_P"); - RegionD_P = new TH2D(Name,Name,CutPt.size(),0,CutPt.size(), 200,GlobalMinPt,PtHistoUpperBound); - RegionD_P->Sumw2(); - - sprintf(Name,"RegionD_TOF"); - RegionD_TOF = new TH2D(Name,Name,CutPt.size(),0,CutPt.size(), 200,GlobalMinTOF,5); - RegionD_TOF->Sumw2(); - } -} - - -double DistToHSCP (const susybsm::HSCParticle& hscp, const std::vector& genColl, int& IndexOfClosest){ - reco::TrackRef track = hscp.trackRef(); if(track.isNull())return false; - - double RMin = 9999; IndexOfClosest=-1; - for(unsigned int g=0;geta(), track->phi(), genColl[g].eta(), genColl[g].phi()); - if(dR=IntegratedLuminosityInPbBeforeTriggerChange && IntegratedLuminosityInPb>0){ - double NMCEvents = MCEvents; - if(MaxEntry>0)NMCEvents=std::min(MCEvents,(double)MaxEntry); - if (period==0)Weight = (CrossSection * IntegratedLuminosityInPbBeforeTriggerChange) / NMCEvents; - else if (period==1)Weight = (CrossSection * (IntegratedLuminosityInPb-IntegratedLuminosityInPbBeforeTriggerChange)) / NMCEvents; - } - return Weight; -} - - -double GetSampleWeightMC(const double& IntegratedLuminosityInPb, const std::vector fileNames, const double& XSection, const double& SampleSize, double MaxEvent){ - double Weight = 1.0; - unsigned long InitNumberOfEvents = GetInitialNumberOfMCEvent(fileNames); - double SampleEquivalentLumi = InitNumberOfEvents / XSection; - if(MaxEvent<0)MaxEvent=SampleSize; - printf("GetSampleWeight MC: IntLumi = %6.2E SampleLumi = %6.2E --> EventWeight = %6.2E --> ",IntegratedLuminosityInPb,SampleEquivalentLumi, IntegratedLuminosityInPb/SampleEquivalentLumi); -// printf("Sample NEvent = %6.2E SampleEventUsed = %6.2E --> Weight Rescale = %6.2E\n",SampleSize, MaxEvent, SampleSize/MaxEvent); - Weight = (IntegratedLuminosityInPb/SampleEquivalentLumi) * (SampleSize/MaxEvent); - printf("FinalWeight = %6.2f\n",Weight); - return Weight; -} - -double GetPUWeight(const fwlite::ChainEvent& ev, const bool& Iss4pileup){ - //get pile up weight for this event - fwlite::Handle > PupInfo; - PupInfo.getByLabel(ev, "addPileupInfo"); - if(!PupInfo.isValid()){printf("PileupSummaryInfo Collection NotFound\n");return 1.0;} - double PUWeight_thisevent=1; - std::vector::const_iterator PVI; - int npv = -1; - if(Iss4pileup){ - float sum_nvtx = 0; - for(PVI = PupInfo->begin(); PVI != PupInfo->end(); ++PVI) { - npv = PVI->getPU_NumInteractions(); - sum_nvtx += float(npv); - } - float ave_nvtx = sum_nvtx/3.; - PUWeight_thisevent = LumiWeightsMC_.weight3BX( ave_nvtx ); - }else{ - for(PVI = PupInfo->begin(); PVI != PupInfo->end(); ++PVI) { - int BX = PVI->getBunchCrossing(); - if(BX == 0) { - npv = PVI->getPU_NumInteractions(); - continue; - } - } - PUWeight_thisevent = LumiWeightsMC_.weight( npv ); - } - return PUWeight_thisevent; -} - - -int HowManyChargedHSCP (const std::vector& genColl){ - int toReturn = 0; - for(unsigned int g=0;g& genColl, double& beta1, double& beta2, bool onlyCharged){ - beta1=-1; beta2=-1; - for(unsigned int g=0;g& fileNames) -{ - unsigned long Total = 0; - fwlite::ChainEvent tree(fileNames); - - for(unsigned int f=0;f nEventsTotalCounter; - nEventsTotalCounter.getByLabel(ls,"nEventsBefSkim"); - if(!nEventsTotalCounter.isValid()){printf("Invalid nEventsTotalCounterH\n");continue;} - Total+= nEventsTotalCounter->value; - } - } - return Total; -} diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_Step234.sh b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_Step234.sh deleted file mode 100644 index 8c9fb713fad7e..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_Step234.sh +++ /dev/null @@ -1,18 +0,0 @@ -root -l -b << EOF - TString makeshared(gSystem->GetMakeSharedLib()); - TString dummy = makeshared.ReplaceAll("-W ", ""); - TString dummy = makeshared.ReplaceAll("-Wshadow ", ""); - gSystem->SetMakeSharedLib(makeshared); - gSystem->Load("libFWCoreFWLite"); - FWLiteEnabler::enable(); - gSystem->Load("libDataFormatsFWLite.so"); - gSystem->Load("libAnalysisDataFormatsSUSYBSMObjects.so"); - gSystem->Load("libDataFormatsVertexReco.so"); - gSystem->Load("libDataFormatsCommon.so"); - gSystem->Load("libDataFormatsHepMCCandidate.so"); - gSystem->Load("libPhysicsToolsUtilities.so"); - .x Analysis_Step234.C++("ANALYSE_DATA", 2, "dedxASmi", "dedxHarm2", "combined", 0, 0, 0, 45.0, 2.1); - //.x Analysis_Step234.C++("ANALYSE_SIGNAL", 2, "dedxASmi", "dedxHarm2", "combined", 40.0, 0.10, 2.1); - //.x Analysis_Step234.C++("PLOT" , 2, 0, "dedxASmi", "dedxHarm2", "combined", -0.6,-0.6,-0.6); -EOF - diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_Step5.C b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_Step5.C deleted file mode 100644 index 892c01f86df30..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_Step5.C +++ /dev/null @@ -1,1762 +0,0 @@ - -#include -#include - -#include "TROOT.h" -#include "TFile.h" -#include "TDirectory.h" -#include "TChain.h" -#include "TObject.h" -#include "TCanvas.h" -#include "TMath.h" -#include "TLegend.h" -#include "TGraph.h" -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include "TTree.h" -#include "TF1.h" -#include "TGraphErrors.h" -#include "TGraphAsymmErrors.h" -#include "TMultiGraph.h" -#include "TPaveText.h" -#include "tdrstyle.C" - - -#include "Analysis_CommonFunction.h" -#include "Analysis_Global.h" -#include "Analysis_PlotFunction.h" -#include "Analysis_PlotStructure.h" -#include "Analysis_Samples.h" - -using namespace std; - -/////////////////////////// FUNCTION DECLARATION ///////////////////////////// - -void CutFlow(string InputPattern, unsigned int CutIndex=0); -void SelectionPlot (string InputPattern, unsigned int CutIndex, unsigned int GluinoCutIndex); -void MassPrediction(string InputPattern, unsigned int CutIndex, string HistoSuffix="Mass"); -void PredictionAndControlPlot(string InputPattern, unsigned int CutIndex); -void Make2DPlot_Core(string ResultPattern, unsigned int CutIndex); -void SignalMassPlot(string InputPattern, unsigned int CutIndex); -void GetSystematicOnPrediction(string InputPattern); -int JobIdToIndex(string JobId); -void MassPredictionTight(string InputPattern, unsigned int CutIndex, string HistoSuffix="Mass"); -void MakeExpLimitpLot(string Input, string Output); - -std::vector signals; -std::vector MCsample; - -string LegendTitle; - -/////////////////////////// CODE PARAMETERS ///////////////////////////// - -void Analysis_Step5() -{ - setTDRStyle(); - gStyle->SetPadTopMargin (0.06); - gStyle->SetPadBottomMargin(0.12); - gStyle->SetPadRightMargin (0.16); - gStyle->SetPadLeftMargin (0.14); - gStyle->SetTitleSize(0.04, "XYZ"); - gStyle->SetTitleXOffset(1.1); - gStyle->SetTitleYOffset(1.45); - gStyle->SetPalette(1); - gStyle->SetNdivisions(505); - - - GetSignalDefinition(signals); - GetMCDefinition(MCsample); - - string InputDir; unsigned int CutIndex; - std::vector Legends; std::vector Inputs; - int GluinoCutIndex; -/* - MakeExpLimitpLot("Results_1toys_lp/dedxASmi/combined/Eta15/PtMin35/Type0/EXCLUSION/Stop200.info","tmp1.png"); - MakeExpLimitpLot("Results_3toys_lp/dedxASmi/combined/Eta15/PtMin35/Type0/EXCLUSION/Stop200.info","tmp3.png"); - MakeExpLimitpLot("Results/dedxASmi/combined/Eta15/PtMin35/Type0/EXCLUSION/Stop200.info","tmp10.png"); - return; -*/ - - -// InputDir = "Results/dedxASmi/combined/Eta25/PtMin15/Type0/SplitMode0/WPPt20/WPI20/WPTOF00/"; -// InputDir = "Results/dedxASmi/combined/Eta25/PtMin20/Type2/SplitMode0/WPPt05/WPI05/WPTOF05/"; -// InputDir = "Results/dedxASmi/combined/Eta25/PtMin20/Type2/SplitMode0/WPPt20/WPI20/WPTOF20/"; -// MassPrediction(InputDir); -// Make2DPlot_Core(InputDir); -// SelectionPlot(InputDir); -// PredictionAndControlPlot(InputDir); - - - //InputDir = "Results/dedxASmi/combined/Eta15/PtMin35/Type0/"; CutIndex = 4;//25;//24;//41 -// Make2DPlot_Core(InputDir,CutIndex); -// CutFlow(InputDir); -// SelectionPlot(InputDir, CutIndex); - //MassPrediction(InputDir, CutIndex, "Mass"); -// MassPrediction(InputDir, CutIndex, "MassTOF"); -// MassPrediction(InputDir, CutIndex, "MassComb"); -// PredictionAndControlPlot(InputDir, CutIndex); -// SignalMassPlot(InputDir,0);return; -// GetSystematicOnPrediction(InputDir); - - InputDir = "Results/dedxASmi/combined/Eta15/PtMin45/Type0/"; CutIndex = 4; - MassPrediction(InputDir, CutIndex, "Mass"); - PredictionAndControlPlot(InputDir, CutIndex); -// CutFlow(InputDir); -// SelectionPlot(InputDir, CutIndex, 0); - InputDir = "Results/dedxASmi/combined/Eta15/PtMin45/Type2/"; CutIndex = 16; - MassPrediction(InputDir, CutIndex, "Mass"); -// CutFlow(InputDir); -// SelectionPlot(InputDir, CutIndex, 0);return; - //GetSystematicOnPrediction(InputDir); - //PredictionAndControlPlot(InputDir, CutIndex); - - //SelectionPlot(InputDir, CutIndex); - //PredictionAndControlPlot(InputDir, CutIndex); - //GetSystematicOnPrediction(InputDir); - return; - - InputDir = "Results/dedxASmi/combined/Eta15/PtMin45/Type0/"; CutIndex = 11;/*65;*//*39;*/ MassPredictionTight(InputDir, CutIndex, "Mass"); - CutIndex=50; - GluinoCutIndex=11; - SelectionPlot(InputDir, CutIndex, GluinoCutIndex); - - InputDir = "Results/dedxASmi/combined/Eta15/PtMin45/Type2/"; CutIndex = 275;/*211;*//*167;95;*/ MassPredictionTight(InputDir, CutIndex, "Mass"); - GluinoCutIndex=845; - SelectionPlot(InputDir, CutIndex, GluinoCutIndex); -// InputDir = "Results/dedxASmi/combined/Eta25/PtMin45/Type0/"; CutIndex = 64; Make2DPlot_Core(InputDir,CutIndex); - - -// 31, 65, 44, 64 - - return; -} - - - -TH2D* GetCutIndexSliceFromTH3(TH3D* tmp, unsigned int CutIndex, string Name="zy"){ - tmp->GetXaxis()->SetRange(CutIndex+1,CutIndex+1); - return (TH2D*)tmp->Project3D(Name.c_str()); -} - - -TH1D* GetCutIndexSliceFromTH2(TH2D* tmp, unsigned int CutIndex, string Name="_py"){ - return tmp->ProjectionY(Name.c_str(),CutIndex+1,CutIndex+1); -} - - -////////////////////////////////////////////////// CREATE PLOTS OF SELECTION - -void GetSystematicOnPrediction(string InputPattern){ - string Input = InputPattern + "Histos_Data.root"; - TFile* InputFile = new TFile(Input.c_str()); - string SavePath = InputPattern + "Systematic/"; - - MakeDirectories(SavePath); - - TH1D* HCuts_Pt = (TH1D*)GetObjectFromPath(InputFile, "HCuts_Pt"); - TH1D* HCuts_I = (TH1D*)GetObjectFromPath(InputFile, "HCuts_I"); - TH1D* HCuts_TOF = (TH1D*)GetObjectFromPath(InputFile, "HCuts_TOF"); - TH1D* H_A = (TH1D*)GetObjectFromPath(InputFile, "H_A"); - TH1D* H_B = (TH1D*)GetObjectFromPath(InputFile, "H_B"); - TH1D* H_C = (TH1D*)GetObjectFromPath(InputFile, "H_C"); - TH1D* H_D = (TH1D*)GetObjectFromPath(InputFile, "H_D"); - TH1D* H_E = (TH1D*)GetObjectFromPath(InputFile, "H_E"); - TH1D* H_F = (TH1D*)GetObjectFromPath(InputFile, "H_F"); - TH1D* H_G = (TH1D*)GetObjectFromPath(InputFile, "H_G"); - TH1D* H_H = (TH1D*)GetObjectFromPath(InputFile, "H_H"); - TH1D* H_P = (TH1D*)GetObjectFromPath(InputFile, "H_P"); - - int ArrN[6]; ArrN[0] = 0; ArrN[1] = 0; ArrN[2] = 0; ArrN[3] = 0; ArrN[4] = 0; ArrN[5] = 0; - double ArrPred[5][6][20]; double ArrErr[5][6][20]; int ArrPredN[5][6]; for(unsigned int i=0;i<5;i++){for(unsigned int j=0;j<6;j++){ArrPredN[i][j]=0;}} - double ArrMean[6][20]; - double ArrSigma[6][20]; - double ArrDist[6][20]; - double ArrMaxDist[6][20]; - double ArrSum[6][20]; - double ArrSyst[6][20]; - double ArrStat[6][20]; - double ArrStatB[6][20]; - double ArrPt[6][20]; - double ArrI[6][20]; - double ArrT[6][20]; - - - std::vector Index; std::vector Plot; -//vary respective to TOF cut 50, 0.05 1.05->1.2 - Index.push_back(16); Plot.push_back(0); - Index.push_back(17); Plot.push_back(0); - Index.push_back(18); Plot.push_back(0); - Index.push_back(19); Plot.push_back(0); - Index.push_back(20); Plot.push_back(0); - Index.push_back(21); Plot.push_back(0); - Index.push_back(22); Plot.push_back(0); -//vary respective to I cut 50, 0.05->0.225 1.05 - Index.push_back(16); Plot.push_back(1); - Index.push_back(30); Plot.push_back(1); - Index.push_back(44); Plot.push_back(1); - Index.push_back(58); Plot.push_back(1); - Index.push_back(72); Plot.push_back(1); - Index.push_back(86); Plot.push_back(1); - Index.push_back(100); Plot.push_back(1); - Index.push_back(114); Plot.push_back(1); -//vary respective to Pt cut 50->115 0.05 1.05 - Index.push_back(16); Plot.push_back(2); - Index.push_back(436); Plot.push_back(2); - Index.push_back(856); Plot.push_back(2); - Index.push_back(1276); Plot.push_back(2); - Index.push_back(1696); Plot.push_back(2); - Index.push_back(2116); Plot.push_back(2); - Index.push_back(2536); Plot.push_back(2); - Index.push_back(2746); Plot.push_back(2); -//vary respective to Pt cut 50->115 0.1 1.1 - Index.push_back(46); Plot.push_back(3); - Index.push_back(466); Plot.push_back(3); - Index.push_back(886); Plot.push_back(3); - Index.push_back(1306); Plot.push_back(3); - Index.push_back(1726); Plot.push_back(3); - Index.push_back(2146); Plot.push_back(3); - Index.push_back(2566); Plot.push_back(3); - Index.push_back(2776); Plot.push_back(3); -//vary respective to Pt cut 50->115 0.15 1.05 - Index.push_back(72); Plot.push_back(4); - Index.push_back(492); Plot.push_back(4); - Index.push_back(912); Plot.push_back(4); - Index.push_back(1332); Plot.push_back(4); - Index.push_back(1752); Plot.push_back(4); - Index.push_back(2172); Plot.push_back(4); - Index.push_back(2592); Plot.push_back(4); - Index.push_back(2802); Plot.push_back(4); - //Not used - Index.push_back(82 + 4); Plot.push_back(5); - Index.push_back(154+ 4); Plot.push_back(5); - Index.push_back(226+ 4); Plot.push_back(5); - Index.push_back(298+ 4); Plot.push_back(5); - Index.push_back(370+ 4); Plot.push_back(5); - Index.push_back(442+ 4); Plot.push_back(5); - Index.push_back(514+ 4); Plot.push_back(5); - Index.push_back(586+ 4); Plot.push_back(5); - Index.push_back(658+ 4); Plot.push_back(5); - Index.push_back(730+ 4); Plot.push_back(5); - Index.push_back(802+ 4); Plot.push_back(5); - - - for(unsigned int i=0;iGetBinContent(CutIndex+1); - const double& B=H_B->GetBinContent(CutIndex+1); - const double& C=H_C->GetBinContent(CutIndex+1); - const double& D=H_D->GetBinContent(CutIndex+1); - const double& E=H_E->GetBinContent(CutIndex+1); - const double& F=H_F->GetBinContent(CutIndex+1); - const double& G=H_G->GetBinContent(CutIndex+1); - const double& H=H_H->GetBinContent(CutIndex+1); - - - double Pred[5]; - double Err [5]; - double N = 0; - double Sigma = 0; - double Mean = 0; - - for(unsigned int p=0;p<4;p++){ - Pred[p] = -1; - Err [p] = -1; - if(p==0){ - if(A<25 || F<25 || G<25 || E<25)continue; - Pred[p] = (A*F*G)/(E*E); - Err [p] = Pred [p] * sqrt( 1/A + 1/F + 1/G + 4/E); - }else if(p==1){ - if(A<25 || H<25 || E<25)continue; - Pred[p] = ((A*H)/E); - Err [p] = Pred[p] * sqrt( 1/A+1/H+1/E ); - }else if (p==2){ - if(B<25 || G<25 || E<25)continue; - Pred[p] = ((B*G)/E); - Err [p] = Pred[p] * sqrt( 1/B+ 1/G+ 1/E ); - }else if (p==3){ - if(F<25 || C<25 || E<25)continue; - Pred[p] = ((F*C)/E); - Err [p] = Pred[p] * sqrt( 1/F + 1/C + 1/E ); - } - - if(Pred[p]>=0){ - N++; - Mean += Pred[p]/pow(Err [p],2); - Sigma += 1 /pow(Err [p],2); - } - - ArrPred [p][Plot[i]][ArrN[Plot[i]]] = Pred[p]; - ArrErr [p][Plot[i]][ArrN[Plot[i]]] = Err [p]; - if(Pred[p]>=0)ArrPredN[p][Plot[i]]++; - } - - Mean = Mean/Sigma; - Sigma = sqrt(Sigma); - - double Dist = fabs(Pred[0] - Mean); - double Sum=0, Stat=0, Syst=0, StatB=0; - - for(unsigned int p=0;p<4;p++){ - if(Pred[p]>=0){ - Sum += pow(Pred[p]-Mean,2); - Stat += pow(Err [p],2); - StatB += Err [p]; - } - } - Sum = sqrt(Sum/(N-1)); - Stat = sqrt(Stat)/N; - StatB= StatB/N; - Syst = sqrt(Sum*Sum - Stat*Stat); - -// printf("pT>%6.2f I> %6.2f TOF>%6.2f : ", HCuts_Pt ->GetBinContent(CutIndex+1), HCuts_I ->GetBinContent(CutIndex+1), HCuts_TOF->GetBinContent(CutIndex+1)); -// printf("A =%6.2E, B=%6.2E, C=%6.2E, D=%6.2E E =%6.2E, F=%6.2E, G=%6.2E, H=%6.2E\n", A,B,C,D, E, F, G, H); - -// for(unsigned int p=0;p<4;p++){printf("Method %i --> P =%6.2E+-%6.2E\n", p,Pred[p], Err [p]);} - printf("--> N = %1.0f Mean = %8.2E Sigma=%8.2E Dist=%8.2E Sum=%8.2E Stat=%8.2E Syst=%8.2E\n", N, Mean, Sigma/Mean, Dist/Mean, Sum/Mean, Stat/Mean, Syst/Mean); - if(N>0){ - ArrMean [Plot[i]][ArrN[Plot[i]]] = Mean; - ArrSigma [Plot[i]][ArrN[Plot[i]]] = Sigma/Mean; - ArrDist [Plot[i]][ArrN[Plot[i]]] = Dist/Mean; - ArrSum [Plot[i]][ArrN[Plot[i]]] = Sum/Mean; - ArrSyst [Plot[i]][ArrN[Plot[i]]] = Syst/Mean; - ArrStat [Plot[i]][ArrN[Plot[i]]] = Stat/Mean; - ArrStatB [Plot[i]][ArrN[Plot[i]]] = StatB/Mean; - ArrPt [Plot[i]][ArrN[Plot[i]]] = HCuts_Pt ->GetBinContent(CutIndex+1); ; - ArrI [Plot[i]][ArrN[Plot[i]]] = HCuts_I ->GetBinContent(CutIndex+1); ; - ArrT [Plot[i]][ArrN[Plot[i]]] = HCuts_TOF->GetBinContent(CutIndex+1); ; - ArrN[Plot[i]]++; - } - } - - - TGraphErrors* graph_T0 = new TGraphErrors(ArrPredN[0][0],ArrT [0],ArrPred[0][0],0,ArrErr[0][0]); graph_T0->SetLineColor(1); graph_T0->SetMarkerColor(1); graph_T0->SetMarkerStyle(20); - TGraphErrors* graph_T1 = new TGraphErrors(ArrPredN[1][0],ArrT [0],ArrPred[1][0],0,ArrErr[1][0]); graph_T1->SetLineColor(2); graph_T1->SetMarkerColor(2); graph_T1->SetMarkerStyle(21); - TGraphErrors* graph_T2 = new TGraphErrors(ArrPredN[2][0],ArrT [0],ArrPred[2][0],0,ArrErr[2][0]); graph_T2->SetLineColor(4); graph_T2->SetMarkerColor(4); graph_T2->SetMarkerStyle(22); - TGraphErrors* graph_T3 = new TGraphErrors(ArrPredN[3][0],ArrT [0],ArrPred[3][0],0,ArrErr[3][0]); graph_T3->SetLineColor(8); graph_T3->SetMarkerColor(8); graph_T3->SetMarkerStyle(23); - - TGraphErrors* graph_I0 = new TGraphErrors(ArrPredN[0][1],ArrI [1],ArrPred[0][1],0,ArrErr[0][1]); graph_I0->SetLineColor(1); graph_I0->SetMarkerColor(1); graph_I0->SetMarkerStyle(20); - TGraphErrors* graph_I1 = new TGraphErrors(ArrPredN[1][1],ArrI [1],ArrPred[1][1],0,ArrErr[1][1]); graph_I1->SetLineColor(2); graph_I1->SetMarkerColor(2); graph_I1->SetMarkerStyle(21); - TGraphErrors* graph_I2 = new TGraphErrors(ArrPredN[2][1],ArrI [1],ArrPred[2][1],0,ArrErr[2][1]); graph_I2->SetLineColor(4); graph_I2->SetMarkerColor(4); graph_I2->SetMarkerStyle(22); - TGraphErrors* graph_I3 = new TGraphErrors(ArrPredN[3][1],ArrI [1],ArrPred[3][1],0,ArrErr[3][1]); graph_I3->SetLineColor(8); graph_I3->SetMarkerColor(8); graph_I3->SetMarkerStyle(23); - - TGraphErrors* graph_P0 = new TGraphErrors(ArrPredN[0][2],ArrPt[2],ArrPred[0][2],0,ArrErr[0][2]); graph_P0->SetLineColor(1); graph_P0->SetMarkerColor(1); graph_P0->SetMarkerStyle(20); - TGraphErrors* graph_P1 = new TGraphErrors(ArrPredN[1][2],ArrPt[2],ArrPred[1][2],0,ArrErr[1][2]); graph_P1->SetLineColor(2); graph_P1->SetMarkerColor(2); graph_P1->SetMarkerStyle(21); - TGraphErrors* graph_P2 = new TGraphErrors(ArrPredN[2][2],ArrPt[2],ArrPred[2][2],0,ArrErr[2][2]); graph_P2->SetLineColor(4); graph_P2->SetMarkerColor(4); graph_P2->SetMarkerStyle(22); - TGraphErrors* graph_P3 = new TGraphErrors(ArrPredN[3][2],ArrPt[2],ArrPred[3][2],0,ArrErr[3][2]); graph_P3->SetLineColor(8); graph_P3->SetMarkerColor(8); graph_P3->SetMarkerStyle(23); - - TLegend* LEG = new TLegend(0.50,0.65,0.80,0.90); - LEG->SetFillColor(0); - LEG->SetBorderSize(0); - LEG->AddEntry(graph_T0, "D=AFG/EE" ,"LP"); - LEG->AddEntry(graph_T1, "D=AH/E" ,"LP"); - LEG->AddEntry(graph_T2, "D=BG/E" ,"LP"); - LEG->AddEntry(graph_T3, "D=FC/E" ,"LP"); - - TCanvas* c1; - c1 = new TCanvas("c1", "c1",600,600); - c1->SetLogy(true); - TMultiGraph* MGTOF = new TMultiGraph(); - MGTOF->Add(graph_T0 ,"LP"); - MGTOF->Add(graph_T1 ,"LP"); - MGTOF->Add(graph_T2 ,"LP"); - MGTOF->Add(graph_T3 ,"LP"); - MGTOF->Draw("A"); - MGTOF->SetTitle(""); - MGTOF->GetXaxis()->SetTitle("1/#beta cut"); - MGTOF->GetYaxis()->SetTitle("Number of expected backgrounds"); - MGTOF->GetYaxis()->SetTitleOffset(1.70); - MGTOF->GetYaxis()->SetRangeUser(10,1E6); - LEG->Draw(); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"TOF_Value","true"); - delete c1; - - c1 = new TCanvas("c1", "c1",600,600); - TMultiGraph* MGI = new TMultiGraph(); - c1->SetLogy(true); - MGI->Add(graph_I0 ,"LP"); - MGI->Add(graph_I1 ,"LP"); - MGI->Add(graph_I2 ,"LP"); - MGI->Add(graph_I3 ,"LP"); - MGI->Draw("A"); - MGI->SetTitle(""); - MGI->GetXaxis()->SetTitle("I_{as} cut"); - MGI->GetYaxis()->SetTitle("Number of expected backgrounds"); - MGI->GetYaxis()->SetTitleOffset(1.70); - MGI->GetYaxis()->SetRangeUser(10,1E6); - LEG->Draw(); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"I_Value","true"); - delete c1; - - c1 = new TCanvas("c1", "c1",600,600); - c1->SetLogy(true); - TMultiGraph* MGP = new TMultiGraph(); - MGP->Add(graph_P0 ,"LP"); - MGP->Add(graph_P1 ,"LP"); - MGP->Add(graph_P2 ,"LP"); - MGP->Add(graph_P3 ,"LP"); - MGP->Draw("A"); - MGP->SetTitle(""); - MGP->GetXaxis()->SetTitle("p_{T} cut"); - MGP->GetYaxis()->SetTitle("Number of expected backgrounds"); - MGP->GetYaxis()->SetTitleOffset(1.70); - MGP->GetYaxis()->SetRangeUser(10,1E6); - LEG->Draw(); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"P_Value","true"); - delete c1; - - - - - - for(unsigned int p=0;p<3;p++){ - string Title; string Name; - if(p==0){ Title = "1/#beta cut"; Name="TOF_"; } - if(p==1){ Title = "dEdx cut"; Name="I_"; } - if(p==2){ Title = "p_{T} cut"; Name="pT_"; } - - - c1 = new TCanvas("c1","c1", 600, 600); - TGraph* graph_s; - if(p==0)graph_s = new TGraph(ArrN[p],ArrT [p],ArrSigma[p]); - if(p==1)graph_s = new TGraph(ArrN[p],ArrI [p],ArrSigma[p]); - if(p==2)graph_s = new TGraph(ArrN[p],ArrPt[p],ArrSigma[p]); - graph_s->SetTitle(""); - graph_s->GetYaxis()->SetTitle("Prediction #sigma/#mu"); - graph_s->GetYaxis()->SetTitleOffset(1.70); - graph_s->GetXaxis()->SetTitle(Title.c_str()); - graph_s->Draw("AC*"); - SaveCanvas(c1,SavePath,Name+"Sigma","true"); - delete c1; - - - c1 = new TCanvas("c1","c1", 600, 600); - TGraph* graph_d; - if(p==0)graph_d = new TGraph(ArrN[p],ArrT [p],ArrDist[p]); - if(p==1)graph_d = new TGraph(ArrN[p],ArrI [p],ArrDist[p]); - if(p==2)graph_d = new TGraph(ArrN[p],ArrPt[p],ArrDist[p]); - graph_d->SetTitle(""); - graph_d->GetYaxis()->SetTitle("Prediction Dist/#mu"); - graph_d->GetYaxis()->SetTitleOffset(1.70); - graph_d->GetXaxis()->SetTitle(Title.c_str()); - graph_d->Draw("AC*"); - SaveCanvas(c1,SavePath,Name+"Dist","true"); - delete c1; - - c1 = new TCanvas("c1","c1", 600, 600); - TGraph* graph_sum; - if(p==0)graph_sum = new TGraph(ArrN[p],ArrT [p],ArrSum[p]); - if(p==1)graph_sum = new TGraph(ArrN[p],ArrI [p],ArrSum[p]); - if(p==2)graph_sum = new TGraph(ArrN[p+2],ArrPt[p+2],ArrSum[p+2]); - graph_sum->SetTitle(""); - graph_sum->GetYaxis()->SetTitle("Prediction #sigma_{Stat+Syst}/#mu"); - graph_sum->GetYaxis()->SetTitleOffset(1.70); - graph_sum->GetXaxis()->SetTitle(Title.c_str()); - - graph_sum->Draw("AC*"); - graph_sum->GetYaxis()->SetRangeUser(0,0.25); - - if(p==2){ - TGraph* graph_sum2 = new TGraph(ArrN[p+1],ArrPt[p+1],ArrSum[p+1]); - graph_sum2->SetLineColor(2); - graph_sum2->SetMarkerColor(2); - graph_sum2->Draw("C*"); - - TGraph* graph_sum3 = new TGraph(ArrN[p+0],ArrPt[p+0],ArrSum[p+0]); - graph_sum3->SetLineColor(4); - graph_sum3->SetMarkerColor(4); - graph_sum3->Draw("C*"); -/* - TGraph* graph_sum4 = new TGraph(ArrN[p+3],ArrPt[p+3],ArrSum[p+3]); - graph_sum4->SetLineColor(8); - graph_sum4->SetMarkerColor(8); - graph_sum4->Draw("C*"); -*/ - - TLegend* LEG = new TLegend(0.50,0.65,0.80,0.90); - LEG->SetFillColor(0); - LEG->SetBorderSize(0); - LEG->AddEntry(graph_sum, "I_{as}>0.15 & 1/#beta>1.05", "L"); - LEG->AddEntry(graph_sum2, "I_{as}>0.05 & 1/#beta>1.05", "L"); - LEG->AddEntry(graph_sum3, "I_{as}>0.10 & 1/#beta>1.10", "L"); - LEG->Draw(); - } - SaveCanvas(c1,SavePath,Name+"Sum","true"); - delete c1; - - - - - c1 = new TCanvas("c1","c1", 600, 600); - TGraph* graph_stat; - if(p==0)graph_stat = new TGraph(ArrN[p],ArrT [p],ArrStat[p]); - if(p==1)graph_stat = new TGraph(ArrN[p],ArrI [p],ArrStat[p]); - if(p==2)graph_stat = new TGraph(ArrN[p+2],ArrPt[p+2],ArrStat[p+2]); - graph_stat->SetTitle(""); - graph_stat->GetYaxis()->SetTitle("Prediction #sigma_{Stat}/#mu"); - graph_stat->GetYaxis()->SetTitleOffset(1.70); - graph_stat->GetXaxis()->SetTitle(Title.c_str()); - - graph_stat->Draw("AC*"); - graph_stat->GetYaxis()->SetRangeUser(0,0.25); - - if(p==2){ - TGraph* graph_stat2 = new TGraph(ArrN[p+1],ArrPt[p+1],ArrStat[p+1]); - graph_stat2->SetLineColor(2); - graph_stat2->SetMarkerColor(2); - graph_stat2->Draw("C*"); - - TGraph* graph_stat3 = new TGraph(ArrN[p+0],ArrPt[p+0],ArrStat[p+0]); - graph_stat3->SetLineColor(4); - graph_stat3->SetMarkerColor(4); - graph_stat3->Draw("C*"); -/* - TGraph* graph_stat4 = new TGraph(ArrN[p+3],ArrPt[p+3],ArrStat[p+3]); - graph_stat4->SetLineColor(8); - graph_stat4->SetMarkerColor(8); - graph_stat4->Draw("C*"); -*/ - - TLegend* LEG = new TLegend(0.50,0.65,0.80,0.90); - LEG->SetFillColor(0); - LEG->SetBorderSize(0); - LEG->AddEntry(graph_stat, "I_{as}>0.15 & 1/#beta>1.05", "L"); - LEG->AddEntry(graph_stat2, "I_{as}>0.05 & 1/#beta>1.05", "L"); - LEG->AddEntry(graph_stat3, "I_{as}>0.10 & 1/#beta>1.10", "L"); - LEG->Draw(); - } - SaveCanvas(c1,SavePath,Name+"Stat","true"); - delete c1; - - - - - c1 = new TCanvas("c1","c1", 600, 600); - TGraph* graph_statB; - if(p==0)graph_statB = new TGraph(ArrN[p],ArrT [p],ArrStat[p]); - if(p==1)graph_statB = new TGraph(ArrN[p],ArrI [p],ArrStat[p]); - if(p==2)graph_statB = new TGraph(ArrN[p+2],ArrPt[p+2],ArrStatB[p+2]); - graph_statB->SetTitle(""); - graph_statB->GetYaxis()->SetTitle("Prediction #sigma_{Stat}/#mu"); - graph_statB->GetYaxis()->SetTitleOffset(1.70); - graph_statB->GetXaxis()->SetTitle(Title.c_str()); - - graph_statB->Draw("AC*"); - graph_statB->GetYaxis()->SetRangeUser(0,0.25); - - if(p==2){ - TGraph* graph_statB2 = new TGraph(ArrN[p+1],ArrPt[p+1],ArrStatB[p+1]); - graph_statB2->SetLineColor(2); - graph_statB2->SetMarkerColor(2); - graph_statB2->Draw("C*"); - - TGraph* graph_statB3 = new TGraph(ArrN[p+0],ArrPt[p+0],ArrStatB[p+0]); - graph_statB3->SetLineColor(4); - graph_statB3->SetMarkerColor(4); - graph_statB3->Draw("C*"); -/* - TGraph* graph_statB4 = new TGraph(ArrN[p+3],ArrPt[p+3],ArrStat[p+3]); - graph_statB4->SetLineColor(8); - graph_statB4->SetMarkerColor(8); - graph_statB4->Draw("C*"); -*/ - - TLegend* LEG = new TLegend(0.50,0.65,0.80,0.90); - LEG->SetFillColor(0); - LEG->SetBorderSize(0); - LEG->AddEntry(graph_statB, "I_{as}>0.15 & 1/#beta>1.05", "L"); - LEG->AddEntry(graph_statB2, "I_{as}>0.05 & 1/#beta>1.05", "L"); - LEG->AddEntry(graph_statB3, "I_{as}>0.10 & 1/#beta>1.10", "L"); - LEG->Draw(); - } - SaveCanvas(c1,SavePath,Name+"StatB","true"); - delete c1; - - - - - - - - - - c1 = new TCanvas("c1","c1", 600, 600); - TGraph* graph_syst; - if(p==0)graph_syst = new TGraph(ArrN[p],ArrT [p],ArrSyst[p]); - if(p==1)graph_syst = new TGraph(ArrN[p],ArrI [p],ArrSyst[p]); - if(p==2)graph_syst = new TGraph(ArrN[p+2],ArrPt[p+2],ArrSyst[p+2]); - graph_syst->SetTitle(""); - graph_syst->GetYaxis()->SetTitle("Prediction #sigma_{Syst}/#mu"); - graph_syst->GetYaxis()->SetTitleOffset(1.70); - graph_syst->GetXaxis()->SetTitle(Title.c_str()); - - graph_syst->Draw("AC*"); - graph_syst->GetXaxis()->SetRangeUser(40,100); - graph_syst->GetYaxis()->SetRangeUser(0,0.25); - - if(p==2){ - TGraph* graph_syst2 = new TGraph(ArrN[p+1],ArrPt[p+1],ArrSyst[p+1]); - graph_syst2->SetLineColor(2); - graph_syst2->SetMarkerColor(2); - graph_syst2->Draw("C*"); - - TGraph* graph_syst3 = new TGraph(ArrN[p+0],ArrPt[p+0],ArrSyst[p+0]); - graph_syst3->SetLineColor(4); - graph_syst3->SetMarkerColor(4); - graph_syst3->Draw("C*"); -/* - TGraph* graph_syst4 = new TGraph(ArrN[p+3],ArrPt[p+3],ArrSyst[p+3]); - graph_syst4->SetLineColor(8); - graph_syst4->SetMarkerColor(8); - graph_syst4->Draw("C*"); -*/ - - TLegend* LEG = new TLegend(0.50,0.65,0.80,0.90); - LEG->SetFillColor(0); - LEG->SetBorderSize(0); - LEG->AddEntry(graph_syst, "I_{as}>0.15 & 1/#beta>1.05", "L"); - LEG->AddEntry(graph_syst2, "I_{as}>0.05 & 1/#beta>1.05", "L"); - LEG->AddEntry(graph_syst3, "I_{as}>0.10 & 1/#beta>1.10", "L"); - LEG->Draw(); - } - - - SaveCanvas(c1,SavePath,Name+"Syst","true"); - delete c1; - - - } -} - - -void CutFlow(string InputPattern, unsigned int CutIndex){ - string Input = InputPattern + "Histos.root"; - string SavePath = InputPattern + "/CutFlow/"; - MakeDirectories(SavePath); - - TFile* InputFile = new TFile(Input.c_str()); - TFile* InputFileData = new TFile((InputPattern + "Histos_Data.root").c_str()); - TFile* InputFileMC = new TFile((InputPattern + "Histos_MC.root").c_str()); - if(!InputFileMC)std::cout << "FileProblem\n"; - - TH1D* HCuts_Pt = (TH1D*)GetObjectFromPath(InputFileData, "HCuts_Pt"); - TH1D* HCuts_I = (TH1D*)GetObjectFromPath(InputFileData, "HCuts_I"); - TH1D* HCuts_TOF = (TH1D*)GetObjectFromPath(InputFileData, "HCuts_TOF"); - - char Buffer[1024]; sprintf(Buffer,"%s/CutFlow_%03i_Pt%03.0f_I%05.3f_TOF%04.3f.txt",SavePath.c_str(),CutIndex,HCuts_Pt->GetBinContent(CutIndex+1),HCuts_I->GetBinContent(CutIndex+1),HCuts_TOF->GetBinContent(CutIndex+1)); - FILE* pFile = fopen(Buffer,"w"); - stPlots DataPlots; - stPlots_InitFromFile(InputFile, DataPlots,"Data", InputFileData); - stPlots_Dump(DataPlots, pFile, CutIndex); - stPlots_Clear(DataPlots); - - stPlots MCTrPlots; - stPlots_InitFromFile(InputFile, MCTrPlots,"MCTr", InputFileMC); - stPlots_Dump(MCTrPlots, pFile, CutIndex); - stPlots_Clear(MCTrPlots); - - for(unsigned int s=0;sScale(1.0/Mass->Integral()); - - char YAxisLegend[1024]; - sprintf(YAxisLegend,"#tracks / %2.0f GeV/c^{2}",Mass->GetXaxis()->GetBinWidth(1)); - - - TCanvas* c1 = new TCanvas("c1","c1", 600, 600); - Mass->SetAxisRange(0,1250,"X"); -// Mass->SetAxisRange(Min,Max,"Y"); - Mass->SetTitle(""); -// Mass->SetStats(kFALSE); - Mass->GetXaxis()->SetTitle("m (GeV/c^{2})"); - Mass->GetYaxis()->SetTitle(YAxisLegend); - Mass->SetLineWidth(2); - Mass->SetLineColor(Color[0]); - Mass->SetMarkerColor(Color[0]); - Mass->SetMarkerStyle(Marker[0]); - Mass->Draw("HIST E1"); - c1->SetLogy(true); - SaveCanvas(c1,SavePath,signals[s].Name,"true"); - delete c1; - } -} - - - -void SelectionPlot(string InputPattern, unsigned int CutIndex, unsigned int GluinoCutIndex){ - - string LegendTitle = LegendFromType(InputPattern);; - - string Input = InputPattern + "Histos.root"; - string SavePath = InputPattern; - MakeDirectories(SavePath); - - TFile* InputFile = new TFile(Input.c_str()); - TFile* InputFileData = new TFile((InputPattern + "Histos_Data.root").c_str()); - TFile* InputFileMC = new TFile((InputPattern + "Histos_MC.root").c_str()); - - stPlots DataPlots, MCTrPlots, SignPlots[signals.size()]; - stPlots_InitFromFile(InputFile, DataPlots,"Data", InputFileData); - stPlots_InitFromFile(InputFile, MCTrPlots,"MCTr", InputFileMC); - - for(unsigned int s=0;s legend; - - string LegendTitle = LegendFromType(InputPattern);; - string Input = InputPattern + "Histos_Data.root"; - string SavePath = InputPattern; - MakeDirectories(SavePath); - - TFile* InputFile = new TFile(Input.c_str()); - TH2D* Pred_P = (TH2D*)GetObjectFromPath(InputFile, "Pred_P"); - TH2D* Pred_I = (TH2D*)GetObjectFromPath(InputFile, "Pred_I"); - TH2D* Pred_TOF = (TH2D*)GetObjectFromPath(InputFile, "Pred_TOF"); - TH2D* Data_I = (TH2D*)GetObjectFromPath(InputFile, "RegionD_I"); - TH2D* Data_P = (TH2D*)GetObjectFromPath(InputFile, "RegionD_P"); - TH2D* Data_TOF = (TH2D*)GetObjectFromPath(InputFile, "RegionD_TOF"); - - TH1D* H_A = (TH1D*)GetObjectFromPath(InputFile, "H_A"); - TH1D* H_B = (TH1D*)GetObjectFromPath(InputFile, "H_B"); - TH1D* H_C = (TH1D*)GetObjectFromPath(InputFile, "H_C"); - TH1D* H_D = (TH1D*)GetObjectFromPath(InputFile, "H_D"); - TH1D* H_E = (TH1D*)GetObjectFromPath(InputFile, "H_E"); - TH1D* H_F = (TH1D*)GetObjectFromPath(InputFile, "H_F"); - TH1D* H_G = (TH1D*)GetObjectFromPath(InputFile, "H_G"); - TH1D* H_H = (TH1D*)GetObjectFromPath(InputFile, "H_H"); - TH1D* H_P = (TH1D*)GetObjectFromPath(InputFile, "H_P"); - - TH1D* HCuts_Pt = (TH1D*)GetObjectFromPath(InputFile, "HCuts_Pt"); - TH1D* HCuts_I = (TH1D*)GetObjectFromPath(InputFile, "HCuts_I"); - TH1D* HCuts_TOF = (TH1D*)GetObjectFromPath(InputFile, "HCuts_TOF"); - - TH1D* CtrlPt_S1_Is = (TH1D*)GetObjectFromPath(InputFile, "CtrlPt_S1_Is" ); CtrlPt_S1_Is ->Rebin(5); - TH1D* CtrlPt_S1_Im = (TH1D*)GetObjectFromPath(InputFile, "CtrlPt_S1_Im" ); CtrlPt_S1_Im ->Rebin(1); - TH1D* CtrlPt_S1_TOF = (TH1D*)GetObjectFromPath(InputFile, "CtrlPt_S1_TOF"); CtrlPt_S1_TOF->Rebin(1); - TH1D* CtrlPt_S2_Is = (TH1D*)GetObjectFromPath(InputFile, "CtrlPt_S2_Is" ); CtrlPt_S2_Is ->Rebin(5); - TH1D* CtrlPt_S2_Im = (TH1D*)GetObjectFromPath(InputFile, "CtrlPt_S2_Im" ); CtrlPt_S2_Im ->Rebin(1); - TH1D* CtrlPt_S2_TOF = (TH1D*)GetObjectFromPath(InputFile, "CtrlPt_S2_TOF"); CtrlPt_S2_TOF->Rebin(1); - TH1D* CtrlPt_S3_Is = (TH1D*)GetObjectFromPath(InputFile, "CtrlPt_S3_Is" ); CtrlPt_S3_Is ->Rebin(5); - TH1D* CtrlPt_S3_Im = (TH1D*)GetObjectFromPath(InputFile, "CtrlPt_S3_Im" ); CtrlPt_S3_Im ->Rebin(1); - TH1D* CtrlPt_S3_TOF = (TH1D*)GetObjectFromPath(InputFile, "CtrlPt_S3_TOF"); CtrlPt_S3_TOF->Rebin(1); - TH1D* CtrlPt_S4_Is = (TH1D*)GetObjectFromPath(InputFile, "CtrlPt_S4_Is" ); CtrlPt_S4_Is ->Rebin(5); - TH1D* CtrlPt_S4_Im = (TH1D*)GetObjectFromPath(InputFile, "CtrlPt_S4_Im" ); CtrlPt_S4_Im ->Rebin(1); - TH1D* CtrlPt_S4_TOF = (TH1D*)GetObjectFromPath(InputFile, "CtrlPt_S4_TOF"); CtrlPt_S4_TOF->Rebin(1); - - TH1D* CtrlIs_S1_TOF = (TH1D*)GetObjectFromPath(InputFile, "CtrlIs_S1_TOF"); CtrlIs_S1_TOF->Rebin(1); - TH1D* CtrlIs_S2_TOF = (TH1D*)GetObjectFromPath(InputFile, "CtrlIs_S2_TOF"); CtrlIs_S2_TOF->Rebin(1); - TH1D* CtrlIs_S3_TOF = (TH1D*)GetObjectFromPath(InputFile, "CtrlIs_S3_TOF"); CtrlIs_S3_TOF->Rebin(1); - TH1D* CtrlIs_S4_TOF = (TH1D*)GetObjectFromPath(InputFile, "CtrlIs_S4_TOF"); CtrlIs_S4_TOF->Rebin(1); - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - if(CtrlPt_S1_Is->Integral()>0)CtrlPt_S1_Is->Scale(1/CtrlPt_S1_Is->Integral()); - if(CtrlPt_S2_Is->Integral()>0)CtrlPt_S2_Is->Scale(1/CtrlPt_S2_Is->Integral()); - if(CtrlPt_S3_Is->Integral()>0)CtrlPt_S3_Is->Scale(1/CtrlPt_S3_Is->Integral()); - if(CtrlPt_S4_Is->Integral()>0)CtrlPt_S4_Is->Scale(1/CtrlPt_S4_Is->Integral()); -// Histos[0] = CtrlPt_S1_Is; legend.push_back(" 25SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"ControlPt_IsSpectrum"); - delete c1; - - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - if(CtrlPt_S1_Im->Integral()>0)CtrlPt_S1_Im->Scale(1/CtrlPt_S1_Im->Integral()); - if(CtrlPt_S2_Im->Integral()>0)CtrlPt_S2_Im->Scale(1/CtrlPt_S2_Im->Integral()); - if(CtrlPt_S3_Im->Integral()>0)CtrlPt_S3_Im->Scale(1/CtrlPt_S3_Im->Integral()); - if(CtrlPt_S4_Im->Integral()>0)CtrlPt_S4_Im->Scale(1/CtrlPt_S4_Im->Integral()); -// Histos[0] = CtrlPt_S1_Im; legend.push_back(" 25SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"ControlPt_ImSpectrum"); - delete c1; - - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - if(CtrlPt_S1_TOF->Integral()>0)CtrlPt_S1_TOF->Scale(1/CtrlPt_S1_TOF->Integral()); - if(CtrlPt_S2_TOF->Integral()>0)CtrlPt_S2_TOF->Scale(1/CtrlPt_S2_TOF->Integral()); - if(CtrlPt_S3_TOF->Integral()>0)CtrlPt_S3_TOF->Scale(1/CtrlPt_S3_TOF->Integral()); - if(CtrlPt_S4_TOF->Integral()>0)CtrlPt_S4_TOF->Scale(1/CtrlPt_S4_TOF->Integral()); -// Histos[0] = CtrlPt_S1_TOF; legend.push_back(" 25SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"ControlPt_TOFSpectrum"); - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - if(CtrlIs_S1_TOF->Integral()>0)CtrlIs_S1_TOF->Scale(1/CtrlIs_S1_TOF->Integral()); - if(CtrlIs_S2_TOF->Integral()>0)CtrlIs_S2_TOF->Scale(1/CtrlIs_S2_TOF->Integral()); - if(CtrlIs_S3_TOF->Integral()>0)CtrlIs_S3_TOF->Scale(1/CtrlIs_S3_TOF->Integral()); - if(CtrlIs_S4_TOF->Integral()>0)CtrlIs_S4_TOF->Scale(1/CtrlIs_S4_TOF->Integral()); - Histos[0] = CtrlIs_S1_TOF; legend.push_back("0.0SetLogy(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"ControlIs_TOFSpectrum"); - delete c1; - -/* - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - c1->SetLogy(true); - Histos[0] = (TH1D*)(Data_P->ProjectionY("PA",CutIndex+1,CutIndex+1,"o")); legend.push_back("Observed"); - Histos[1] = (TH1D*)(Pred_P->ProjectionY("PB",CutIndex+1,CutIndex+1,"o")); legend.push_back("Predicted"); - ((TH1D*)Histos[0])->Scale(1/std::max(((TH1D*)Histos[0])->Integral(),1.0)); - ((TH1D*)Histos[1])->Scale(1/std::max(((TH1D*)Histos[1])->Integral(),1.0)); - ((TH1D*)Histos[0])->Rebin(10); - ((TH1D*)Histos[1])->Rebin(10); - DrawSuperposedHistos((TH1**)Histos, legend, "Hist E1", "p (Gev/c)", "u.a.", 0,1500, 0,0); - DrawLegend(Histos,legend,LegendTitle,"P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"Prediction_PSpectrum"); - delete Histos[0]; delete Histos[1]; - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - c1->SetLogy(true); - Histos[0] = (TH1D*)(Data_I->ProjectionY("IA",CutIndex+1,CutIndex+1,"o")); legend.push_back("Observed"); - Histos[1] = (TH1D*)(Pred_I->ProjectionY("IB",CutIndex+1,CutIndex+1,"o")); legend.push_back("Predicted"); - ((TH1D*)Histos[0])->Scale(1/std::max(((TH1D*)Histos[0])->Integral(),1.0)); - ((TH1D*)Histos[1])->Scale(1/std::max(((TH1D*)Histos[1])->Integral(),1.0)); - ((TH1D*)Histos[0])->Rebin(2); - ((TH1D*)Histos[1])->Rebin(2); - DrawSuperposedHistos((TH1**)Histos, legend, "Hist E1", dEdxM_Legend, "u.a.", 0,15, 0,0); - DrawLegend(Histos,legend,LegendTitle,"P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"Prediction_ISpectrum"); - delete Histos[0]; delete Histos[1]; - delete c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - c1->SetLogy(true); - Histos[0] = (TH1D*)(Data_TOF->ProjectionY("TA",CutIndex+1,CutIndex+1,"o")); legend.push_back("Observed"); - Histos[1] = (TH1D*)(Pred_TOF->ProjectionY("TB",CutIndex+1,CutIndex+1,"o")); legend.push_back("Predicted"); - ((TH1D*)Histos[0])->Scale(1/std::max(((TH1D*)Histos[0])->Integral(),1.0)); - ((TH1D*)Histos[1])->Scale(1/std::max(((TH1D*)Histos[1])->Integral(),1.0)); - ((TH1D*)Histos[0])->Rebin(2); - ((TH1D*)Histos[1])->Rebin(2); - DrawSuperposedHistos((TH1**)Histos, legend, "Hist E1", "1/#beta", "u.a.", 0,0, 0,0); - DrawLegend(Histos,legend,LegendTitle,"P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"Prediction_TOFSpectrum"); - delete Histos[0]; delete Histos[1]; - delete c1; - - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - TH2D* DataVsPred = new TH2D("DataVsPred","DataVsPred",17,30,200, 8,0.05,0.5); - TH2D* DataMap = new TH2D("DataMap" ,"DataMap" ,17,30,200, 8,0.05,0.5); - TH2D* PredMap = new TH2D("PredMap" ,"PredMap" ,17,30,200, 8,0.05,0.5); - for(unsigned int CutIndex=0;CutIndexGetNbinsX();CutIndex++){ - double P = H_P->GetBinContent(CutIndex+1); - double D = H_D->GetBinContent(CutIndex+1); - double Err = sqrt( pow(H_P->GetBinError(CutIndex+1),2) + std::max(D,1.0) ); -// double Err = sqrt( pow(H_P->GetBinError(CutIndex+1),2) + pow(P*0.1,2) ); - double NSigma = (D-P)/Err; - - DataMap->SetBinContent(DataVsPred->GetXaxis()->FindBin(HCuts_Pt->GetBinContent(CutIndex+1)), DataVsPred->GetYaxis()->FindBin(HCuts_I->GetBinContent(CutIndex+1)), D); - PredMap->SetBinContent(DataVsPred->GetXaxis()->FindBin(HCuts_Pt->GetBinContent(CutIndex+1)), DataVsPred->GetYaxis()->FindBin(HCuts_I->GetBinContent(CutIndex+1)), P); - - -// if(D==0)continue; - if(isnan(P))continue; - if(P<=0){continue;} //Is <=0 only when prediction failed or is not meaningful (i.e. WP=(0,0,0) ) - //if( H_B->GetBinContent(CutIndex+1)>=H_A->GetBinContent(CutIndex+1) || H_C->GetBinContent(CutIndex+1)>=H_A->GetBinContent(CutIndex+1))continue; - - printf("CutIndex=%3i Pt>%6.2f I>%6.2f --> D=%6.2E P=%6.2E+-%6.2E(%6.2f+%6.2f) (%f Sigma)\n",CutIndex, HCuts_Pt->GetBinContent(CutIndex+1),HCuts_I->GetBinContent(CutIndex+1),D,P,Err,H_P->GetBinError(CutIndex+1),sqrt(D),NSigma); - DataVsPred->SetBinContent(DataVsPred->GetXaxis()->FindBin(HCuts_Pt->GetBinContent(CutIndex+1)), DataVsPred->GetYaxis()->FindBin(HCuts_I->GetBinContent(CutIndex+1)), NSigma); -// DataVsPred->Fill(HCuts_Pt->GetBinContent(CutIndex+1), HCuts_I->GetBinContent(CutIndex+1), NSigma); - } - DataVsPred->SetMinimum(-3); - DataVsPred->SetMaximum(3); - Histos[0] = DataVsPred; legend.push_back("Observed"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "PtCut", "ICut", 0,0, 0,0); - //DrawLegend(Histos,legend,LegendTitle,"P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"Prediction_PredVsObs"); - delete c1; - - PredMap->SetMinimum(1E-2); - DataMap->SetMinimum(1E-2); - PredMap->SetMaximum(std::max(PredMap->GetMaximum(),DataMap->GetMaximum())); - DataMap->SetMaximum(std::max(PredMap->GetMaximum(),DataMap->GetMaximum())); - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - c1->SetLogz(true); - Histos[0] = PredMap; legend.push_back("Observed"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "PtCut", "ICut", 0,0, 0,0); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"Prediction_Pred"); - delete c1; - - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - c1->SetLogz(true); - Histos[0] = DataMap; legend.push_back("Observed"); - DrawSuperposedHistos((TH1**)Histos, legend, "COLZ", "PtCut", "ICut", 0,0, 0,0); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,SavePath,"Prediction_Data"); - delete c1; - -*/ - -} - - - -void Make2DPlot_Core(string InputPattern, unsigned int CutIndex){ - TCanvas* c1; - TLegend* leg; - - - string Input = InputPattern + "Histos.root"; - string outpath = InputPattern; - MakeDirectories(outpath); - - TFile* InputFile = new TFile(Input.c_str()); - TFile* InputFileData = new TFile((InputPattern + "Histos_Data.root").c_str()); - - - TH1D* Gluino300_Mass = GetCutIndexSliceFromTH2((TH2D*)GetObjectFromPath(InputFile, "Gluino300/Mass" ), CutIndex, "G300Mass"); - TH2D* Gluino300_PIs = GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFile, "Gluino300/AS_PIs" ), CutIndex, "G300PIs_zy"); - TH2D* Gluino300_PIm = GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFile, "Gluino300/AS_PIm" ), CutIndex, "G300PIm_zy"); - TH2D* Gluino300_TOFIs= GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFile, "Gluino300/AS_TOFIs"), CutIndex, "G300TIs_zy"); - TH2D* Gluino300_TOFIm= GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFile, "Gluino300/AS_TOFIm"), CutIndex, "G300TIm_zy"); - TH1D* Gluino500_Mass = GetCutIndexSliceFromTH2((TH2D*)GetObjectFromPath(InputFile, "Gluino500/Mass" ), CutIndex, "G500Mass"); - TH2D* Gluino500_PIs = GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFile, "Gluino500/AS_PIs" ), CutIndex, "G500PIs_zy"); - TH2D* Gluino500_PIm = GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFile, "Gluino500/AS_PIm" ), CutIndex, "G500PIm_zy"); - TH2D* Gluino500_TOFIs= GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFile, "Gluino500/AS_TOFIs"), CutIndex, "G500TIs_zy"); - TH2D* Gluino500_TOFIm= GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFile, "Gluino500/AS_TOFIm"), CutIndex, "G500TIm_zy"); - TH1D* Gluino800_Mass = GetCutIndexSliceFromTH2((TH2D*)GetObjectFromPath(InputFile, "Gluino800/Mass" ), CutIndex, "G800Mass"); - TH2D* Gluino800_PIs = GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFile, "Gluino800/AS_PIs" ), CutIndex, "G800PIs_zy"); - TH2D* Gluino800_PIm = GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFile, "Gluino800/AS_PIm" ), CutIndex, "G800PIm_zy"); - TH2D* Gluino800_TOFIs= GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFile, "Gluino800/AS_TOFIs"), CutIndex, "G800TIs_zy"); - TH2D* Gluino800_TOFIm= GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFile, "Gluino800/AS_TOFIm"), CutIndex, "G800TIm_zy"); - TH2D* Data_PIs = GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFileData, "Data/AS_PIs" ), CutIndex); - TH2D* Data_PIm = GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFileData, "Data/AS_PIm" ), CutIndex); - TH2D* Data_TOFIs = GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFileData, "Data/AS_TOFIs" ), CutIndex); - TH2D* Data_TOFIm = GetCutIndexSliceFromTH3((TH3D*)GetObjectFromPath(InputFileData, "Data/AS_TOFIm" ), CutIndex); - TH2D* Data_PIm_075 = (TH2D*)Data_PIm->Clone(); Data_PIm_075->Reset(); - TH2D* Data_PIm_150 = (TH2D*)Data_PIm->Clone(); Data_PIm_150->Reset(); - TH2D* Data_PIm_300 = (TH2D*)Data_PIm->Clone(); Data_PIm_300->Reset(); - TH2D* Data_PIm_450 = (TH2D*)Data_PIm->Clone(); Data_PIm_450->Reset(); - TH2D* Data_PIm_All = (TH2D*)Data_PIm->Clone(); Data_PIm_All->Reset(); - - for(unsigned int i=0;i<(unsigned int)Data_PIm->GetNbinsX();i++){ - for(unsigned int j=0;j<(unsigned int)Data_PIm->GetNbinsY();j++){ - if(Data_PIm->GetBinContent(i,j)<=0)continue; - double M = GetMass(Data_PIm->GetXaxis ()->GetBinCenter(i), Data_PIm->GetYaxis ()->GetBinCenter(j)); - if(isnan(M))continue; - if (M<100){ Data_PIm_075->SetBinContent(i,j, Data_PIm->GetBinContent(i,j) ); } - else if(M<200){ Data_PIm_150->SetBinContent(i,j, Data_PIm->GetBinContent(i,j) ); } - else if(M<300){ Data_PIm_300->SetBinContent(i,j, Data_PIm->GetBinContent(i,j) ); } - else if(M<395){ Data_PIm_450->SetBinContent(i,j, Data_PIm->GetBinContent(i,j) ); } - else { Data_PIm_All->SetBinContent(i,j, Data_PIm->GetBinContent(i,j) ); } - }} - - Gluino300_Mass = (TH1D*) Gluino300_Mass->Rebin(2); - Gluino500_Mass = (TH1D*) Gluino500_Mass->Rebin(2); - Gluino800_Mass = (TH1D*) Gluino800_Mass->Rebin(2); - - double Min = 1E-3; - double Max = 1E4; - - char YAxisLegend[1024]; - sprintf(YAxisLegend,"#tracks / %2.0f GeV/c^{2}",Gluino300_Mass->GetXaxis()->GetBinWidth(1)); - - - c1 = new TCanvas("c1","c1", 600, 600); - Gluino300_Mass->SetAxisRange(0,1250,"X"); - Gluino300_Mass->SetAxisRange(Min,Max,"Y"); - Gluino300_Mass->SetTitle(""); - Gluino300_Mass->SetStats(kFALSE); - Gluino300_Mass->GetXaxis()->SetTitle("m (GeV/c^{2})"); - Gluino300_Mass->GetYaxis()->SetTitle(YAxisLegend); - Gluino300_Mass->SetLineWidth(2); - Gluino300_Mass->SetLineColor(Color[0]); - Gluino300_Mass->SetMarkerColor(Color[0]); - Gluino300_Mass->SetMarkerStyle(Marker[0]); - Gluino300_Mass->Draw("HIST E1"); - Gluino500_Mass->Draw("HIST E1 same"); - Gluino500_Mass->SetLineColor(Color[1]); - Gluino500_Mass->SetMarkerColor(Color[1]); - Gluino500_Mass->SetMarkerStyle(Marker[1]); - Gluino500_Mass->SetLineWidth(2); - Gluino800_Mass->SetLineWidth(2); - Gluino800_Mass->SetLineColor(Color[2]); - Gluino800_Mass->SetMarkerColor(Color[2]); - Gluino800_Mass->SetMarkerStyle(Marker[2]); - Gluino800_Mass->Draw("HIST E1 same"); - c1->SetLogy(true); - - TLine* line300 = new TLine(300, Min, 300, Max); - line300->SetLineWidth(2); - line300->SetLineColor(Color[0]); - line300->SetLineStyle(2); - line300->Draw("same"); - - TLine* line500 = new TLine(500, Min, 500, Max); - line500->SetLineWidth(2); - line500->SetLineColor(Color[1]); - line500->SetLineStyle(2); - line500->Draw("same"); - - TLine* line800 = new TLine(800, Min, 800, Max); - line800->SetLineWidth(2); - line800->SetLineColor(Color[2]); - line800->SetLineStyle(2); - line800->Draw("same"); - - leg = new TLegend(0.80,0.93,0.80 - 0.20,0.93 - 6*0.03); - leg->SetHeader(LegendFromType(InputPattern).c_str()); - leg->SetFillColor(0); - leg->SetBorderSize(0); - leg->AddEntry(Gluino300_Mass, "Gluino300" ,"P"); - leg->AddEntry(Gluino500_Mass, "Gluino500" ,"P"); - leg->AddEntry(Gluino800_Mass, "Gluino800" ,"P"); - leg->Draw(); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1, outpath, "Gluino_Mass"); - delete c1; - - - c1 = new TCanvas("c1","c1", 600, 600); - c1->SetLogz(true); - Data_PIs->SetTitle(""); - Data_PIs->SetStats(kFALSE); - Data_PIs->GetXaxis()->SetTitle("p (GeV/c)"); - Data_PIs->GetYaxis()->SetTitle(dEdxS_Legend.c_str()); - Data_PIs->SetAxisRange(0,1250,"X"); - Data_PIs->SetMarkerSize (0.2); - Data_PIs->SetMarkerColor(Color[4]); - Data_PIs->SetFillColor(Color[4]); - Data_PIs->Draw("COLZ"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1, outpath, "Data_PIs", true); - delete c1; - - c1 = new TCanvas("c1","c1", 600, 600); - c1->SetLogz(true); - Data_PIm->SetTitle(""); - Data_PIm->SetStats(kFALSE); - Data_PIm->GetXaxis()->SetTitle("p (GeV/c)"); - Data_PIm->GetYaxis()->SetTitle(dEdxM_Legend.c_str()); - Data_PIm->SetAxisRange(0,1250,"X"); - Data_PIm->SetAxisRange(0,15,"Y"); - Data_PIm->SetMarkerSize (0.2); - Data_PIm->SetMarkerColor(Color[4]); - Data_PIm->SetFillColor(Color[4]); - Data_PIm->Draw("COLZ"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1, outpath, "Data_PIm", true); - delete c1; - - - c1 = new TCanvas("c1","c1", 600, 600); - c1->SetLogz(true); - Data_TOFIs->SetTitle(""); - Data_TOFIs->SetStats(kFALSE); - Data_TOFIs->GetXaxis()->SetTitle("1/#beta_{TOF}"); - Data_TOFIs->GetYaxis()->SetTitle(dEdxS_Legend.c_str()); - Data_TOFIs->SetAxisRange(0,1250,"X"); - Data_TOFIs->SetMarkerSize (0.2); - Data_TOFIs->SetMarkerColor(Color[4]); - Data_TOFIs->SetFillColor(Color[4]); - Data_TOFIs->Draw("COLZ"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1, outpath, "Data_TOFIs", true); - delete c1; - - - c1 = new TCanvas("c1","c1", 600, 600); - c1->SetLogz(true); - Data_TOFIm->SetTitle(""); - Data_TOFIm->SetStats(kFALSE); - Data_TOFIm->GetXaxis()->SetTitle("1/#beta_{TOF}"); - Data_TOFIm->GetYaxis()->SetTitle(dEdxM_Legend.c_str()); - Data_TOFIm->SetAxisRange(0,15,"Y"); - Data_TOFIm->SetMarkerSize (0.2); - Data_TOFIm->SetMarkerColor(Color[4]); - Data_TOFIm->SetFillColor(Color[4]); - Data_TOFIm->Draw("COLZ"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1, outpath, "Data_TOFIm", true); - delete c1; - - c1 = new TCanvas("c1","c1", 600, 600); - Gluino800_PIs->SetTitle(""); - Gluino800_PIs->SetStats(kFALSE); - Gluino800_PIs->GetXaxis()->SetTitle("p (GeV/c)"); - Gluino800_PIs->GetYaxis()->SetTitle(dEdxS_Legend.c_str()); - Gluino800_PIs->SetAxisRange(0,1250,"X"); - Gluino800_PIs->Scale(1/Gluino800_PIs->Integral()); - Gluino800_PIs->SetMarkerSize (0.2); - Gluino800_PIs->SetMarkerColor(Color[2]); - Gluino800_PIs->SetFillColor(Color[2]); - Gluino800_PIs->Draw("BOX"); - Gluino500_PIs->Scale(1/Gluino500_PIs->Integral()); - Gluino500_PIs->SetMarkerSize (0.2); - Gluino500_PIs->SetMarkerColor(Color[1]); - Gluino500_PIs->SetFillColor(Color[1]); - Gluino500_PIs->Draw("BOX same"); - Gluino300_PIs->Scale(1/Gluino300_PIs->Integral()); - Gluino300_PIs->SetMarkerSize (0.2); - Gluino300_PIs->SetMarkerColor(Color[0]); - Gluino300_PIs->SetFillColor(Color[0]); - Gluino300_PIs->Draw("BOX same"); - - leg = new TLegend(0.80,0.93,0.80 - 0.20,0.93 - 6*0.03); - leg->SetHeader(LegendFromType(InputPattern).c_str()); - leg->SetFillColor(0); - leg->SetBorderSize(0); - leg->AddEntry(Gluino300_PIs, "Gluino300" ,"F"); - leg->AddEntry(Gluino500_PIs, "Gluino500" ,"F"); - leg->AddEntry(Gluino800_PIs, "Gluino800" ,"F"); - leg->Draw(); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1, outpath, "Gluino_PIs", true); - delete c1; - - c1 = new TCanvas("c1","c1", 600, 600); - Gluino300_PIm->SetTitle(""); - Gluino300_PIm->SetStats(kFALSE); - Gluino300_PIm->GetXaxis()->SetTitle("p (GeV/c)"); - Gluino300_PIm->GetYaxis()->SetTitle(dEdxM_Legend.c_str()); - Gluino300_PIm->SetAxisRange(0,1250,"X"); - Gluino300_PIm->SetAxisRange(0,15,"Y"); - Gluino300_PIm->Scale(1/Gluino300_PIm->Integral()); - Gluino300_PIm->SetMarkerSize (0.2); - Gluino300_PIm->SetMarkerColor(Color[2]); - Gluino300_PIm->SetFillColor(Color[2]); - Gluino300_PIm->Draw("BOX"); - Gluino500_PIm->Scale(1/Gluino500_PIm->Integral()); - Gluino500_PIm->SetMarkerSize (0.2); - Gluino500_PIm->SetMarkerColor(Color[1]); - Gluino500_PIm->SetFillColor(Color[1]); - Gluino500_PIm->Draw("BOX same"); - Gluino800_PIm->Scale(1/Gluino800_PIm->Integral()); - Gluino800_PIm->SetMarkerSize (0.2); - Gluino800_PIm->SetMarkerColor(Color[0]); - Gluino800_PIm->SetFillColor(Color[0]); - Gluino800_PIm->Draw("BOX same"); - - TF1* MassLine800 = GetMassLine(800, true); - MassLine800->SetLineColor(kGray+3); - MassLine800->SetLineWidth(2); - MassLine800->Draw("same"); - TF1* MassLine500 = GetMassLine(500, true); - MassLine500->SetLineColor(kBlue-7); - MassLine500->SetLineWidth(2); - MassLine500->Draw("same"); - TF1* MassLine300 = GetMassLine(300, true); - MassLine300->SetLineColor(kRed-7); - MassLine300->SetLineWidth(2); - MassLine300->Draw("same"); - - leg = new TLegend(0.80,0.93,0.80 - 0.20,0.93 - 6*0.03); - leg->SetHeader(LegendFromType(InputPattern).c_str()); - leg->SetFillColor(0); - leg->SetBorderSize(0); - leg->AddEntry(Gluino300_PIm, "Gluino300" ,"F"); - leg->AddEntry(Gluino500_PIm, "Gluino500" ,"F"); - leg->AddEntry(Gluino800_PIm, "Gluino800" ,"F"); - leg->Draw(); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1, outpath, "Gluino_PIm", true); - delete c1; - - c1 = new TCanvas("c1","c1", 600, 600); - Gluino800_TOFIs->SetTitle(""); - Gluino800_TOFIs->SetStats(kFALSE); - Gluino800_TOFIs->GetXaxis()->SetTitle("1/#beta_{TOF}"); - Gluino800_TOFIs->GetYaxis()->SetTitle(dEdxS_Legend.c_str()); - Gluino800_TOFIs->SetAxisRange(0,1250,"X"); - Gluino800_TOFIs->Scale(1/Gluino800_TOFIs->Integral()); - Gluino800_TOFIs->SetMarkerSize (0.2); - Gluino800_TOFIs->SetMarkerColor(Color[2]); - Gluino800_TOFIs->SetFillColor(Color[2]); - Gluino800_TOFIs->Draw("BOX"); - Gluino500_TOFIs->Scale(1/Gluino500_TOFIs->Integral()); - Gluino500_TOFIs->SetMarkerSize (0.2); - Gluino500_TOFIs->SetMarkerColor(Color[1]); - Gluino500_TOFIs->SetFillColor(Color[1]); - Gluino500_TOFIs->Draw("BOX same"); - Gluino300_TOFIs->Scale(1/Gluino300_TOFIs->Integral()); - Gluino300_TOFIs->SetMarkerSize (0.2); - Gluino300_TOFIs->SetMarkerColor(Color[0]); - Gluino300_TOFIs->SetFillColor(Color[0]); - Gluino300_TOFIs->Draw("BOX same"); - - leg = new TLegend(0.80,0.93,0.80 - 0.20,0.93 - 6*0.03); - leg->SetHeader(LegendFromType(InputPattern).c_str()); - leg->SetFillColor(0); - leg->SetBorderSize(0); - leg->AddEntry(Gluino300_TOFIs, "Gluino300" ,"F"); - leg->AddEntry(Gluino500_TOFIs, "Gluino500" ,"F"); - leg->AddEntry(Gluino800_TOFIs, "Gluino800" ,"F"); - leg->Draw(); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1, outpath, "Gluino_TOFIs", true); - delete c1; - - c1 = new TCanvas("c1","c1", 600, 600); - Gluino800_TOFIm->SetTitle(""); - Gluino800_TOFIm->SetStats(kFALSE); - Gluino800_TOFIm->GetXaxis()->SetTitle("1/#beta_{TOF}"); - Gluino800_TOFIm->GetYaxis()->SetTitle(dEdxM_Legend.c_str()); - Gluino800_TOFIm->SetAxisRange(0,1250,"X"); - Gluino800_TOFIm->SetAxisRange(0,15,"Y"); - Gluino800_TOFIm->Scale(1/Gluino800_TOFIm->Integral()); - Gluino800_TOFIm->SetMarkerSize (0.2); - Gluino800_TOFIm->SetMarkerColor(Color[2]); - Gluino800_TOFIm->SetFillColor(Color[2]); - Gluino800_TOFIm->Draw("BOX"); - Gluino500_TOFIm->Scale(1/Gluino500_TOFIm->Integral()); - Gluino500_TOFIm->SetMarkerSize (0.2); - Gluino500_TOFIm->SetMarkerColor(Color[1]); - Gluino500_TOFIm->SetFillColor(Color[1]); - Gluino500_TOFIm->Draw("BOX same"); - Gluino300_TOFIm->Scale(1/Gluino300_TOFIm->Integral()); - Gluino300_TOFIm->SetMarkerSize (0.2); - Gluino300_TOFIm->SetMarkerColor(Color[0]); - Gluino300_TOFIm->SetFillColor(Color[0]); - Gluino300_TOFIm->Draw("BOX same"); - - leg = new TLegend(0.80,0.93,0.80 - 0.20,0.93 - 6*0.03); - leg->SetHeader(LegendFromType(InputPattern).c_str()); - leg->SetFillColor(0); - leg->SetBorderSize(0); - leg->AddEntry(Gluino300_TOFIm, "Gluino300" ,"F"); - leg->AddEntry(Gluino500_TOFIm, "Gluino500" ,"F"); - leg->AddEntry(Gluino800_TOFIm, "Gluino800" ,"F"); - leg->Draw(); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1, outpath, "Gluino_TOFIm", true); - delete c1; - - c1 = new TCanvas("c1","c1", 600, 600); - Data_PIm_075->SetTitle(""); - Data_PIm_075->SetStats(kFALSE); - Data_PIm_075->GetXaxis()->SetTitle("p (GeV/c)"); - Data_PIm_075->GetYaxis()->SetTitle(dEdxM_Legend.c_str()); -// Data_PIm_075->SetAxisRange(0,15,"Y"); -// Data_PIm_075->SetAxisRange(0,1250,"X"); - Data_PIm_075->SetAxisRange(3,10,"Y"); - Data_PIm_075->SetAxisRange(0,2000,"X"); - Data_PIm_075->SetMarkerSize (0.6); - Data_PIm_075->SetMarkerColor(Color[4]); - Data_PIm_075->SetMarkerStyle(Marker[4]); - Data_PIm_075->SetFillColor(Color[4]); - Data_PIm_075->Draw(""); - Data_PIm_150->SetMarkerSize (0.8); - Data_PIm_150->SetMarkerColor(Color[3]); - Data_PIm_150->SetMarkerStyle(Marker[3]); - Data_PIm_150->SetFillColor(Color[3]); - Data_PIm_150->Draw("same"); - Data_PIm_300->SetMarkerSize (1.0); - Data_PIm_300->SetMarkerColor(Color[2]); - Data_PIm_300->SetMarkerStyle(Marker[2]); - Data_PIm_300->SetFillColor(Color[2]); - Data_PIm_300->Draw("same"); - Data_PIm_450->SetMarkerSize (1.2); - Data_PIm_450->SetMarkerColor(Color[1]); - Data_PIm_450->SetMarkerStyle(Marker[1]); - Data_PIm_450->SetFillColor(Color[1]); - Data_PIm_450->Draw("same"); - Data_PIm_All->SetMarkerSize (1.4); - Data_PIm_All->SetMarkerColor(Color[0]); - Data_PIm_All->SetFillColor(Color[0]); - Data_PIm_All->Draw("same"); - - for(double m=100;m<1000;m+=100){ - TF1* MassLine = GetMassLine(m); - MassLine->SetLineColor(1); - MassLine->SetLineWidth(1); - MassLine->Draw("same"); - } - - leg = new TLegend(0.80,0.93,0.80 - 0.30,0.93 - 6*0.03); - leg->SetHeader(LegendFromType(InputPattern).c_str()); - leg->SetFillColor(0); - leg->SetBorderSize(0); - leg->AddEntry(Data_PIm_075, "M < 100 GeV","P"); - leg->AddEntry(Data_PIm_150, "100 < M < 200 GeV","P"); - leg->AddEntry(Data_PIm_300, "200 < M < 300 GeV","P"); - leg->AddEntry(Data_PIm_450, "300 < M < 400 GeV","P"); - leg->AddEntry(Data_PIm_All, "400 < M GeV" ,"P"); - leg->Draw(); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1, outpath, "Data_PIm_Colored", true); - delete c1; -} - -void MassPrediction(string InputPattern, unsigned int CutIndex, string HistoSuffix) -{ - bool IsTkOnly = (InputPattern.find("Type0",0) legend; - TCanvas* c1; - - char Buffer[2048]; - sprintf(Buffer,"%s/Histos_Data.root",InputPattern.c_str()); - - InputFile_Data = new TFile(Buffer); - - if(!InputFile_Data || InputFile_Data->IsZombie() || !InputFile_Data->IsOpen() || InputFile_Data->TestBit(TFile::kRecovered) )return; - TH1D* Pred = ((TH2D*)GetObjectFromPath(InputFile_Data, string("Pred_") + HistoSuffix ))->ProjectionY("TmpPredMass" ,CutIndex+1,CutIndex+1,"o"); - TH1D* Data = ((TH2D*)GetObjectFromPath(InputFile_Data, string("Data/") + HistoSuffix ))->ProjectionY("TmpDataMass" ,CutIndex+1,CutIndex+1,"o"); - - TFile* InputFile = new TFile((InputPattern+"/Histos.root").c_str()); - TH1D* Gluino600 = ((TH2D*)GetObjectFromPath(InputFile, string("Gluino600/") + HistoSuffix ))->ProjectionY("TmpG600Mass" ,CutIndex+1,CutIndex+1,"o"); - TH1D* GMStau156 = ((TH2D*)GetObjectFromPath(InputFile, string("GMStau156/") + HistoSuffix ))->ProjectionY("TmpS156Mass" ,CutIndex+1,CutIndex+1,"o"); - - TFile* InputFile_MC = new TFile((InputPattern+"/Histos_MC.root").c_str()); - TH1D* MC = ((TH2D*)GetObjectFromPath(InputFile_MC, string("MCTr/") + HistoSuffix ))->ProjectionY("TmpMCMass" ,CutIndex+1,CutIndex+1,"o"); - TH1D* MCPred = ((TH2D*)GetObjectFromPath(InputFile_MC, string("Pred_") + HistoSuffix ))->ProjectionY("TmpMCPred" ,CutIndex+1,CutIndex+1,"o"); - - TH1D* H_A = (TH1D*)GetObjectFromPath(InputFile_Data, "H_A"); - TH1D* H_B = (TH1D*)GetObjectFromPath(InputFile_Data, "H_B"); - TH1D* H_C = (TH1D*)GetObjectFromPath(InputFile_Data, "H_C"); - TH1D* H_D = (TH1D*)GetObjectFromPath(InputFile_Data, "H_D"); - TH1D* H_E = (TH1D*)GetObjectFromPath(InputFile_Data, "H_E"); - TH1D* H_F = (TH1D*)GetObjectFromPath(InputFile_Data, "H_F"); - TH1D* H_G = (TH1D*)GetObjectFromPath(InputFile_Data, "H_G"); - TH1D* H_H = (TH1D*)GetObjectFromPath(InputFile_Data, "H_H"); - TH1D* H_P = (TH1D*)GetObjectFromPath(InputFile_Data, "H_P"); - printf("OBSERVED EVENTS = %6.2E\n",H_D->GetBinContent(CutIndex+1)); - printf("PREDICTED EVENTS = %6.2E+-%6.2E\n",H_P->GetBinContent(CutIndex+1), H_P->GetBinError(CutIndex+1)); - - - //MCPred->Scale(H_P->GetBinContent(CutIndex+1)/MC->Integral()); - //MC ->Scale(H_P->GetBinContent(CutIndex+1)/MC->Integral()); - - MC ->Scale(H_P->GetBinContent(CutIndex+1)/MCPred->Integral()); - MCPred->Scale(H_P->GetBinContent(CutIndex+1)/MCPred->Integral()); - - for(double M=0;M<=1000;M+=200){ - double D,P,Perr; - D = Data->Integral( Data->GetXaxis()->FindBin(M), Data->GetXaxis()->FindBin(2000.0)); - P = Pred->Integral( Pred->GetXaxis()->FindBin(M), Pred->GetXaxis()->FindBin(2000.0)); - Perr = 0; for(int i=Pred->GetXaxis()->FindBin(M);iGetXaxis()->FindBin(2000.0);i++){ Perr += pow(Pred->GetBinError(i),2); } Perr = sqrt(Perr); - double MD,MDerr, MP,MPerr; - MD = MC->Integral( MC->GetXaxis()->FindBin(M), MC->GetXaxis()->FindBin(2000.0)); - MP = MCPred->Integral( MCPred->GetXaxis()->FindBin(M), MCPred->GetXaxis()->FindBin(2000.0)); - MDerr = 0; for(int i=MC->GetXaxis()->FindBin(M);iGetXaxis()->FindBin(2000.0);i++){ MDerr += pow(MC->GetBinError(i),2); } MDerr = sqrt(MDerr); - MPerr = 0; for(int i=MCPred->GetXaxis()->FindBin(M);iGetXaxis()->FindBin(2000.0);i++){ MPerr += pow(MCPred->GetBinError(i),2); } MPerr = sqrt(MPerr); - printf("%4.0f Obs=%9.3f Data-Pred = %9.3f +- %8.3f(syst+stat) %9.3f (syst) %9.3f (stat) MC=%9.3f+-%8.3f MC-Pred = %8.3f +- %9.3f (syst+stat) %9.3f (syst) %9.3f (stat)\n", M, D, P, sqrt(Perr*Perr + pow(P*(2*RMS),2)), P*(2*RMS), Perr, MD, MDerr, MP, sqrt(MPerr*MPerr + pow(MP*(2*RMS),2)), MP*(2*RMS), MPerr ); - } - printf("FullSpectrum --> D=%9.3f P = %9.3f +- %6.3f(stat) +- %6.3f(syst) (=%6.3f)\n", Data->Integral(), Pred->Integral(), 0.0, 0.0, 0.0 ); - printf("UnderFlow = %6.2f OverFlow = %6.2f\n", Pred->GetBinContent(0), Pred->GetBinContent(Pred->GetNbinsX()+1) ); - - Pred->Rebin(4); - Data->Rebin(4); - TH1D* Signal = Gluino600; - if(!IsTkOnly)Signal = GMStau156; - Signal->Rebin(4); - MC->Rebin(4); - MCPred->Rebin(4); - - double Max = 2.0 * std::max(std::max(Data->GetMaximum(), Pred->GetMaximum()), Signal->GetMaximum()); - double Min = 0.01;// 0.1 * std::min(0.01,Pred->GetMaximum()); - - TLegend* leg; - c1 = new TCanvas("c1","c1,",600,600); - - char YAxisLegend[1024]; - sprintf(YAxisLegend,"Tracks / %2.0f GeV/c^{2}",Data->GetXaxis()->GetBinWidth(1)); - - TH1D* PredErr = (TH1D*) Pred->Clone("PredErr"); - TH1D* MCPredErr = (TH1D*) MCPred->Clone("MCPredErr"); - for(unsigned int i=0;i<(unsigned int)Pred->GetNbinsX();i++){ - double error = sqrt(pow(PredErr->GetBinError(i),2) + pow(PredErr->GetBinContent(i)*2*RMS,2)); - PredErr->SetBinError(i,error); - if(PredErr->GetBinContent(i)5){for(unsigned int j=i+1;j<(unsigned int)PredErr->GetNbinsX();j++)PredErr->SetBinContent(j,0);} - - error = sqrt(pow(MCPredErr->GetBinError(i),2) + pow(MCPredErr->GetBinContent(i)*2*RMS,2)); - MCPredErr->SetBinError(i,error); - if(MCPredErr->GetBinContent(i)5){for(unsigned int j=i+1;j<(unsigned int)MCPredErr->GetNbinsX();j++)MCPredErr->SetBinContent(j,0);} - } - PredErr->SetLineColor(8); - PredErr->SetFillColor(8); - PredErr->SetFillStyle(3001); - PredErr->SetMarkerStyle(22); - PredErr->SetMarkerColor(2); - PredErr->SetMarkerSize(1.0); - PredErr->GetXaxis()->SetNdivisions(505); - PredErr->SetTitle(""); - PredErr->SetStats(kFALSE); - PredErr->GetXaxis()->SetTitle("Mass (GeV/c^{2})"); - PredErr->GetYaxis()->SetTitle(YAxisLegend); - PredErr->GetYaxis()->SetTitleOffset(1.50); - PredErr->SetMaximum(Max); - PredErr->SetMinimum(Min); - PredErr->SetAxisRange(0,1400,"X"); - PredErr->Draw("AXIS"); - - Signal->SetMarkerStyle(21); - Signal->SetMarkerColor(4); - Signal->SetMarkerSize(1.5); - Signal->SetLineColor(4); - Signal->SetFillColor(38); - Signal->Draw("same HIST"); - - MCPredErr->SetLineColor(5); - MCPredErr->SetFillColor(5); - MCPredErr->SetFillStyle(3017); - MCPredErr->SetMarkerStyle(23); - MCPredErr->SetMarkerColor(5); - MCPredErr->SetMarkerSize(1.0); - MCPredErr->Draw("same E5"); - - MCPred->SetMarkerStyle(23); - MCPred->SetMarkerColor(5); - MCPred->SetMarkerSize(1.5); - MCPred->SetLineColor(5); - MCPred->SetFillColor(0); - MCPred->Draw("same HIST P"); - - //MC->SetFillStyle(3002); - //MC->SetLineColor(22); - //MC->SetFillColor(11); - //MC->SetMarkerStyle(0); - //MC->Draw("same HIST E1"); - PredErr->Draw("same E5"); - - Pred->SetMarkerStyle(22); - Pred->SetMarkerColor(2); - Pred->SetMarkerSize(1.5); - Pred->SetLineColor(2); - Pred->SetFillColor(0); - Pred->Draw("same HIST P"); - - Data->SetBinContent(Data->GetNbinsX(), Data->GetBinContent(Data->GetNbinsX()) + Data->GetBinContent(Data->GetNbinsX()+1)); - Data->SetMarkerStyle(20); - Data->SetMarkerColor(1); - Data->SetMarkerSize(1.0); - Data->SetLineColor(1); - Data->SetFillColor(0); - Data->Draw("E1 same"); - - leg = new TLegend(0.79,0.93,0.40,0.68); - leg->SetHeader(LegendFromType(InputPattern).c_str()); - leg->SetFillColor(0); - leg->SetBorderSize(0); - TH1D* PredLeg = (TH1D*) Pred->Clone("RescLeg"); - PredLeg->SetFillColor(PredErr->GetFillColor()); - PredLeg->SetFillStyle(PredErr->GetFillStyle()); - leg->AddEntry(Data, "Data" ,"P"); - leg->AddEntry(PredLeg, "Data-based SM prediction" ,"PF"); - //leg->AddEntry(MC, "Simulation" ,"LF"); - TH1D* MCPredLeg = (TH1D*) MCPred->Clone("RescMCLeg"); - MCPredLeg->SetFillColor(MCPredErr->GetFillColor()); - MCPredLeg->SetFillStyle(MCPredErr->GetFillStyle()); - leg->AddEntry(MCPredLeg, "SM prediction (MC)" ,"PF"); - if(IsTkOnly)leg->AddEntry(Signal, "MC - Gluino (M=600 GeV/c^{2})" ,"F"); - else leg->AddEntry(Signal, "MC - Stau (M=156 GeV/c^{2})" ,"F"); - leg->Draw(); - - DrawPreliminary(IntegratedLuminosity); - c1->SetLogy(true); - SaveCanvas(c1, outpath, string("Rescale_") + HistoSuffix); - delete c1; - InputFile->Close(); -} - -void MassPredictionTight(string InputPattern, unsigned int CutIndex, string HistoSuffix) -{ - bool IsTkOnly = (InputPattern.find("Type0",0) legend; - TCanvas* c1; - - char Buffer[2048]; - sprintf(Buffer,"%s/Histos_Data.root",InputPattern.c_str()); - InputFile_Data = new TFile(Buffer); - if(!InputFile_Data || InputFile_Data->IsZombie() || !InputFile_Data->IsOpen() || InputFile_Data->TestBit(TFile::kRecovered) )return; - TH1D* Pred = ((TH2D*)GetObjectFromPath(InputFile_Data, string("Pred_") + HistoSuffix ))->ProjectionY("TmpPredMass" ,CutIndex+1,CutIndex+1,"o"); - TH1D* Data = ((TH2D*)GetObjectFromPath(InputFile_Data, string("Data/") + HistoSuffix ))->ProjectionY("TmpDataMass" ,CutIndex+1,CutIndex+1,"o"); - - TFile* InputFile = new TFile((InputPattern+"/Histos.root").c_str()); - TH1D* GMStau247 = ((TH2D*)GetObjectFromPath(InputFile, string("GMStau247/") + HistoSuffix ))->ProjectionY("TmpS247Mass" ,CutIndex+1,CutIndex+1,"o"); - TH1D* GMStau156 = ((TH2D*)GetObjectFromPath(InputFile, string("GMStau156/") + HistoSuffix ))->ProjectionY("TmpS156Mass" ,CutIndex+1,CutIndex+1,"o"); - - TH1D* Gluino800 = ((TH2D*)GetObjectFromPath(InputFile, string("Gluino800/") + HistoSuffix ))->ProjectionY("TmpG800Mass" ,CutIndex+1,CutIndex+1,"o"); - - - Pred->Rebin(4); - Data->Rebin(4); - TH1D* Signal = GMStau156; - if(!IsTkOnly)Signal = GMStau247; - Signal->Rebin(4); - Gluino800->Rebin(4); - - double Max = 10.0 * std::max(std::max(Data->GetMaximum(), Pred->GetMaximum()), std::max(Signal->GetMaximum(), Gluino800->GetMaximum())); - double Min = 0.01;// 0.1 * std::min(0.01,Pred->GetMaximum()); - double maxRange=1200; - - TLegend* leg; - c1 = new TCanvas("c1","c1,",600,600); - - char YAxisLegend[1024]; - sprintf(YAxisLegend,"Tracks / %2.0f GeV/c^{2}",Data->GetXaxis()->GetBinWidth(1)); - - - double predOverFlow=0; - for (int i=Pred->GetNbinsX(); i>0; i--) { - if(Pred->GetBinLowEdge(i)>maxRange) predOverFlow+=Pred->GetBinContent(i); - else {Pred->SetBinContent(i,predOverFlow+Pred->GetBinContent(i)); i=-1;} - } - - double dataOverFlow=0; - for (int i=Data->GetNbinsX(); i=0; i--) { - if(Data->GetBinLowEdge(i)>maxRange) dataOverFlow+=Data->GetBinContent(i); - else { - Data->SetBinContent(i,dataOverFlow+Data->GetBinContent(i)); - Data->SetBinError(i,sqrt(dataOverFlow+Data->GetBinContent(i))); - i=-1; - } - } - - - TH1D* PredErr = (TH1D*) Pred->Clone("PredErr"); - for(unsigned int i=0;i<(unsigned int)Pred->GetNbinsX();i++){ - double error = sqrt(pow(PredErr->GetBinError(i+1),2) + pow(PredErr->GetBinContent(i+1)*2*RMS,2)); - PredErr->SetBinError(i+1,error); - if((PredErr->GetBinContent(i+1)5) || Pred->GetBinLowEdge(i+2)>maxRange){ - for(unsigned int j=i+1;j<(unsigned int)PredErr->GetNbinsX();j++)PredErr->SetBinContent(j+1,0); - i=(unsigned int)Pred->GetNbinsX()+1; - } - } - - PredErr->SetLineColor(8); - PredErr->SetFillColor(8); - PredErr->SetFillStyle(3001); - PredErr->SetMarkerStyle(22); - PredErr->SetMarkerColor(2); - PredErr->SetMarkerSize(1.0); - PredErr->GetXaxis()->SetNdivisions(505); - PredErr->SetTitle(""); - PredErr->SetStats(kFALSE); - PredErr->GetXaxis()->SetTitle("Mass (GeV/c^{2})"); - PredErr->GetYaxis()->SetTitle(YAxisLegend); - PredErr->GetYaxis()->SetTitleOffset(1.50); - PredErr->SetMaximum(Max); - PredErr->SetMinimum(Min); - PredErr->SetAxisRange(0,maxRange,"X"); - PredErr->Draw("AXIS"); - - Gluino800->SetMarkerStyle(21); - Gluino800->SetMarkerColor(46); - Gluino800->SetMarkerSize(1.5); - Gluino800->SetLineColor(46); - Gluino800->SetFillColor(46); - Gluino800->Draw("same HIST"); - - Signal->SetMarkerStyle(21); - Signal->SetMarkerColor(4); - Signal->SetMarkerSize(1.5); - Signal->SetLineColor(4); - Signal->SetFillColor(38); - Signal->Draw("same HIST"); - - - PredErr->Draw("same E5"); - - Pred->SetMarkerStyle(22); - Pred->SetMarkerColor(2); - Pred->SetMarkerSize(1.5); - Pred->SetLineColor(2); - Pred->SetFillColor(0); - Pred->Draw("same HIST P"); - - Data->SetBinContent(Data->GetNbinsX(), Data->GetBinContent(Data->GetNbinsX()) + Data->GetBinContent(Data->GetNbinsX()+1)); - Data->SetMarkerStyle(20); - Data->SetMarkerColor(1); - Data->SetMarkerSize(1.0); - Data->SetLineColor(1); - Data->SetFillColor(0); - Data->Draw("E1 same"); - - leg = new TLegend(0.79,0.93,0.40,0.68); - leg->SetHeader(LegendFromType(InputPattern).c_str()); - leg->SetFillColor(0); - leg->SetBorderSize(0); - TH1D* PredLeg = (TH1D*) Pred->Clone("RescLeg"); - PredLeg->SetFillColor(PredErr->GetFillColor()); - PredLeg->SetFillStyle(PredErr->GetFillStyle()); - leg->AddEntry(Data, "Data" ,"P"); - leg->AddEntry(PredLeg, "Data-based prediction" ,"PF"); - if(IsTkOnly)leg->AddEntry(Signal, "MC - Stau (M=156 GeV/c^{2})" ,"F"); - else leg->AddEntry(Signal, "MC - Stau (M=247 GeV/c^{2})" ,"F"); - leg->AddEntry(Gluino800, "MC - Gluino (M=800 GeV/c^{2})" ,"F"); - leg->Draw(); - - DrawPreliminary(IntegratedLuminosity); - c1->SetLogy(true); - SaveCanvas(c1, outpath, string("RescaleTight_") + HistoSuffix); - delete c1; - - InputFile->Close(); -} - - - -int JobIdToIndex(string JobId){ - for(unsigned int s=0;s VectPt; - std::vector VectI; - std::vector VectExpLim; - FILE* pFile = fopen(Input.c_str(),"r"); - if(!pFile){ - printf("Not Found: %s\n",Input.c_str()); - return; - } - - unsigned int Index; - double Pt, I, TOF, MassMin, MassMax; - double NData, NPred, NPredErr, SignalEff; - double ExpLimit; - char Model[256], Tmp[2048]; - while ( ! feof (pFile) ){ - fscanf(pFile,"%s Testing CutIndex= %d (Pt>%lf I>%lf TOF>%lf) %lf %lE expected",Model,&Index,&Pt,&I,&TOF,&MassMin,&MassMax,&NData,&NPred,&NPredErr,&SignalEff,&ExpLimit); - fgets(Tmp, 256 , pFile); -// if(Pt<80 && I<0.38)printf("%s Testing CutIndex= %d (Pt>%f I>%f TOF>%f) %f %E expected %s",Model,Index,Pt,I,TOF,MassMin,MassMax,NData,NPred,NPredErr,SignalEff,ExpLimit, Tmp); -// ExpLimitPlot->SetBinContent(PtMap[Pt],IsMap[I],ExpLimit); - ExpLimitPlot->Fill(Pt,I,ExpLimit); - } - fclose(pFile); - - - TCanvas* c1 = new TCanvas("c1","c1",600,600); - c1->SetLogz(true); - ExpLimitPlot->SetTitle(""); - ExpLimitPlot->SetStats(kFALSE); - ExpLimitPlot->GetXaxis()->SetTitle("Pt Cut"); - ExpLimitPlot->GetYaxis()->SetTitle("I Cut"); - ExpLimitPlot->GetXaxis()->SetTitleOffset(1.1); - ExpLimitPlot->GetYaxis()->SetTitleOffset(1.70); - ExpLimitPlot->GetXaxis()->SetNdivisions(505); - ExpLimitPlot->GetYaxis()->SetNdivisions(505); - ExpLimitPlot->SetMaximum(1E0); - ExpLimitPlot->SetMinimum(1E-2); - ExpLimitPlot->Draw("COLZ"); - c1->SaveAs(Output.c_str()); - delete c1; - return; -} diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_Step6.C b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_Step6.C deleted file mode 100644 index ad2f3d12a3b64..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_Step6.C +++ /dev/null @@ -1,2002 +0,0 @@ -#include - -#include "TROOT.h" -#include "TFile.h" -#include "TDirectory.h" -#include "TChain.h" -#include "TObject.h" -#include "TCanvas.h" -#include "TMath.h" -#include "TLegend.h" -#include "TLegendEntry.h" -#include "TGraph.h" -#include "TMultiGraph.h" -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include "TTree.h" -#include "TF1.h" -#include "TGraphErrors.h" -#include "TGraphAsymmErrors.h" -#include "TCutG.h" -#include "TPaveText.h" -#include "tdrstyle.C" -#include "Analysis_CommonFunction.h" -#include "Analysis_PlotFunction.h" -#include "Analysis_Samples.h" -//#include "CL95.h" -#include "roostats_cl95.C" -#include "nSigma.C" - -using namespace std; - - - -struct stAllInfo{ - double Mass; - double MassMean; - double MassSigma; - double MassCut; - double XSec_Th; - double XSec_Err; - double XSec_Exp; - double XSec_ExpUp; - double XSec_ExpDown; - double XSec_Exp2Up; - double XSec_Exp2Down; - double XSec_Obs; - double Eff; - double Eff_SYSTP; - double Eff_SYSTI; - double Eff_SYSTM; - double Eff_SYSTT; - double Significance; - double Index; - double WP_Pt; - double WP_I; - double WP_TOF; - float NData; - float NPred; - float NPredErr; - float NSign; - - stAllInfo(string path=""){ - Mass=-1; XSec_Th=-1; XSec_Err=-1; XSec_Exp=-1; XSec_ExpUp=-1;XSec_ExpDown=-1;XSec_Exp2Up=-1;XSec_Exp2Down=-1; XSec_Obs=-1; Eff=-1; Eff_SYSTP=-1; Eff_SYSTI=-1; Eff_SYSTM=-1; Eff_SYSTT=-1; - if(path=="")return; - FILE* pFile = fopen(path.c_str(),"r"); - if(!pFile){printf("Can't open %s\n",path.c_str()); return;} - fscanf(pFile,"Mass : %lf\n",&Mass); - fscanf(pFile,"MassMean : %lf\n",&MassMean); - fscanf(pFile,"MassSigma : %lf\n",&MassSigma); - fscanf(pFile,"MassCut : %lf\n",&MassCut); - fscanf(pFile,"Index : %lf\n",&Index); - fscanf(pFile,"WP_Pt : %lf\n",&WP_Pt); - fscanf(pFile,"WP_I : %lf\n",&WP_I); - fscanf(pFile,"WP_TOF : %lf\n",&WP_TOF); - fscanf(pFile,"Eff : %lf\n",&Eff); - fscanf(pFile,"Eff_SystP : %lf\n",&Eff_SYSTP); - fscanf(pFile,"Eff_SystI : %lf\n",&Eff_SYSTI); - fscanf(pFile,"Eff_SystM : %lf\n",&Eff_SYSTM); - fscanf(pFile,"Eff_SystT : %lf\n",&Eff_SYSTT); - fscanf(pFile,"Signif : %lf\n",&Significance); - fscanf(pFile,"XSec_Th : %lf\n",&XSec_Th); - fscanf(pFile,"XSec_Exp : %lf\n",&XSec_Exp); - fscanf(pFile,"XSec_ExpUp : %lf\n",&XSec_ExpUp); - fscanf(pFile,"XSec_ExpDown : %lf\n",&XSec_ExpDown); - fscanf(pFile,"XSec_Exp2Up : %lf\n",&XSec_Exp2Up); - fscanf(pFile,"XSec_Exp2Down: %lf\n",&XSec_Exp2Down); - fscanf(pFile,"XSec_Obs : %lf\n",&XSec_Obs); - fscanf(pFile,"NData : %E\n" ,&NData); - fscanf(pFile,"NPred : %E\n" ,&NPred); - fscanf(pFile,"NPredErr : %E\n" ,&NPredErr); - fscanf(pFile,"NSign : %E\n" ,&NSign); - fclose(pFile); - } - -}; - - -struct stGraph{ - TGraph* Stop; - TGraph* StopN; - TGraph* GluinoF0; - TGraph* GluinoF1; - TGraph* GluinoF5; - TGraph* GluinoNF0; - TGraph* GluinoNF1; - TGraph* GluinoNF5; - TGraph* GMStau; - TGraph* PPStau; - TGraph* DCRho08HyperK; - TGraph* DCRho12HyperK; - TGraph* DCRho16HyperK; - TGraph* GluinoTh; - TGraph* StopTh; - TGraph* GMStauTh; - TCutG* GluinoThErr; - TCutG* StopThErr; -}; - -double PlotMinScale = 0.0005; -double PlotMaxScale = 3; - -TGraph* MakePlot(FILE* pFile, FILE* talkFile, string InputPattern, string syst, string ModelName, int XSectionType=2, string Mass0="", string Mass1="", string Mass2="", string Mass3="", string Mass4="", string Mass5="", string Mass6="", string Mass7="", string Mass8="", string Mass9="",string Mass10="", string Mass11="", string Mass12="", string Mass13=""); - - -stAllInfo Exclusion(string pattern, string modelName, string signal, double Ratio_0C=-1, double Ratio_1C=-1, double Ratio_2C=-1, string syst=""); -int JobIdToIndex(string JobId); - -void GetSignalMeanHSCPPerEvent(string InputPattern, unsigned int CutIndex, double MinRange, double MaxRange); -double FindIntersection(TGraph* obs, TGraph* th, double Min, double Max, double Step, double ThUncertainty=0, bool debug=false); -int ReadXSection(string InputFile, double* Mass, double* XSec, double* Low, double* High, double* ErrLow, double* ErrHigh); -TCutG* GetErrorBand(string name, int N, double* Mass, double* Low, double* High, double MinLow=PlotMinScale, double MaxHigh=PlotMaxScale); -void CheckSignalUncertainty(FILE* pFile, FILE* talkFile, string InputPattern); -void DrawModelLimitWithBand(string InputPattern, string inputmodel); -std::vector GetModels(string inputmodel); -string GetModelName(string inputmodel); -void DrawRatioBands(string InputPattern, string inputmodel); - -double MinRange = 0; -double MaxRange = 1999; - -char Buffer[2048]; - -int CurrentSampleIndex; -string InputPath; -string OutputPath; - -TH1D* MassSign = NULL; -TH1D* MassMCTr = NULL; -TH1D* MassData = NULL; -TH1D* MassPred = NULL; -TH1D* MassSignPDF = NULL; -TH1D* MassPredPDF = NULL; -double FitParam[10]; -TF1* Stau_MMC_Fit = NULL; -TF1* Stop_MMC_Fit = NULL; -TF1* MGStop_MMC_Fit = NULL; -TF1* Gluino_MMC_Fit = NULL; -TF1* Stau_SMC_Fit = NULL; -TF1* Stop_SMC_Fit = NULL; -TF1* MGStop_SMC_Fit = NULL; -TF1* Gluino_SMC_Fit = NULL; - -std::vector signals; -std::vector signalsMeanHSCPPerEvent; -std::vector signalsMeanHSCPPerEvent_SYSTP; -std::vector signalsMeanHSCPPerEvent_SYSTT; -std::vector signalsMeanHSCPPerEvent_SYSTM; -std::vector signalsMeanHSCPPerEvent_SYSTI; - -double RescaleFactor; -double RescaleError; -int Mode=0; -void Analysis_Step6(string MODE="COMPILE", string InputPattern="", string modelName="", string signal="", double Ratio_0C=-1, double Ratio_1C=-1, double Ratio_2C=-1, string syst=""){ - setTDRStyle(); - gStyle->SetPadTopMargin (0.06); - gStyle->SetPadBottomMargin(0.10); - gStyle->SetPadRightMargin (0.18); - gStyle->SetPadLeftMargin (0.12); - gStyle->SetTitleSize(0.04, "XYZ"); - gStyle->SetTitleXOffset(1.1); - gStyle->SetTitleYOffset(1.35); - gStyle->SetPalette(1); - gStyle->SetNdivisions(505,"X"); - gStyle->SetNdivisions(550,"Y"); - - if(MODE=="COMPILE")return; - - if(MODE=="ANALYSE"){ - stAllInfo result = Exclusion(InputPattern, modelName, signal, Ratio_0C, Ratio_1C, Ratio_2C, syst); - return; - } - - string MuPattern = "Results/dedxASmi/combined/Eta15/PtMin45/Type2/"; - string TkPattern = "Results/dedxASmi/combined/Eta15/PtMin45/Type0/"; - - string outpath = string("Results/EXCLUSION/"); - MakeDirectories(outpath); - - std::vector ModelNames; -// ModelNames.push_back("Hyperk"); - ModelNames.push_back("All"); - - for(int i=0;i Models; - Models.push_back("Gluinof1"); - Models.push_back("Gluinof5"); - Models.push_back("GluinoN"); - Models.push_back("Stop"); - Models.push_back("StopN"); - Models.push_back("GMStau"); - Models.push_back("PPStau"); - Models.push_back("DCRho08"); - Models.push_back("DCRho12"); - Models.push_back("DCRho16"); - - for(int i=0;iSetTitle(""); - GluinoXSec->GetYaxis()->SetTitleOffset(1.70); - TCutG* GluinoXSecErr = GetErrorBand("gluinoErr",ThGluinoN,ThGluinoMass,ThGluinoLow,ThGluinoHigh); - - double ThStopMass [100]; double ThStopXSec [100]; double ThStopLow [100]; double ThStopHigh [100]; double ThStopErrLow [100]; double ThStopErrHigh [100]; - int ThStopN = ReadXSection("stop_XSec.txt", ThStopMass,ThStopXSec,ThStopLow,ThStopHigh, ThStopErrLow, ThStopErrHigh); - TGraph* StopXSec = new TGraph(ThStopN,ThStopMass,ThStopXSec); - TGraph* StopXSecLow = new TGraph(ThStopN,ThStopMass,ThStopLow); - StopXSec->SetTitle(""); - StopXSec->GetYaxis()->SetTitleOffset(1.70); - TCutG* StopXSecErr = GetErrorBand("StopErr", ThStopN,ThStopMass,ThStopLow,ThStopHigh); - - - int ThStauN = 9 ; double ThStauMass [100]; double ThStauXSec [100]; double ThStauLow [100]; double ThStauHigh [100]; - ThStauMass[0] = 100; ThStauXSec[0] = 1.3398; ThStauLow[0] = 1.18163; ThStauHigh[0] = 1.48684; - ThStauMass[1] = 126; ThStauXSec[1] = 0.274591; ThStauLow[1] = 0.242982; ThStauHigh[1] = 0.304386; - ThStauMass[2] = 156; ThStauXSec[2] = 0.0645953; ThStauLow[2] = 0.0581651; ThStauHigh[2] = 0.0709262; - ThStauMass[3] = 200; ThStauXSec[3] = 0.0118093; ThStauLow[3] = 0.0109992; ThStauHigh[3] = 0.012632; - ThStauMass[4] = 247; ThStauXSec[4] = 0.00342512; ThStauLow[4] = 0.00324853; ThStauHigh[4] = 0.00358232; - ThStauMass[5] = 308; ThStauXSec[5] = 0.00098447; ThStauLow[5] = 0.00093519; ThStauHigh[5] = 0.00102099; - ThStauMass[6] = 370; ThStauXSec[6] = 0.000353388; ThStauLow[6] = 0.000335826; ThStauHigh[6] = 0.000366819; - ThStauMass[7] = 432; ThStauXSec[7] = 0.000141817; ThStauLow[7] = 0.000134024; ThStauHigh[7] = 0.000147665; - ThStauMass[8] = 494; ThStauXSec[8] = 6.17749e-05; ThStauLow[8] =5.83501e-05 ; ThStauHigh[8] = 6.45963e-05; - TCutG* StauXSecErr = GetErrorBand("StauErr", ThStauN,ThStauMass,ThStauLow,ThStauHigh); - - int ThPPStauN = 6 ; double ThPPStauMass [100]; double ThPPStauXSec [100]; double ThPPStauLow [100]; double ThPPStauHigh [100]; - ThPPStauMass[0] = 100; ThPPStauXSec[0] = 0.038200; ThPPStauLow[0] = 0.037076; ThPPStauHigh[0] = 0.0391443; - ThPPStauMass[1] = 126; ThPPStauXSec[1] = 0.0161; ThPPStauLow[1] = 0.0155927; ThPPStauHigh[1] = 0.016527; - ThPPStauMass[2] = 156; ThPPStauXSec[2] = 0.007040; ThPPStauLow[2] = 0.0067891; ThPPStauHigh[2] = 0.00723151; - ThPPStauMass[3] = 200; ThPPStauXSec[3] = 0.002470; ThPPStauLow[3] = 0.00237277; ThPPStauHigh[3] = 0.00253477; - ThPPStauMass[4] = 247; ThPPStauXSec[4] = 0.001010; ThPPStauLow[4] = 0.00096927; ThPPStauHigh[4] = 0.00103844; - ThPPStauMass[5] = 308; ThPPStauXSec[5] = 0.000353; ThPPStauLow[5] = 0.000335308; ThPPStauHigh[5] = 0.000363699; - TCutG* PPStauXSecErr = GetErrorBand("PPStauErr", ThPPStauN,ThPPStauMass,ThPPStauLow,ThPPStauHigh); - - int ThDCRho08HyperKN = 13; double ThDCRho08HyperKMass [100]; double ThDCRho08HyperKXSec [100]; double ThDCRho08HyperKLow [100]; double ThDCRho08HyperKHigh [100]; - ThDCRho08HyperKMass[0] = 100; ThDCRho08HyperKXSec[0] = 1.405000; ThDCRho08HyperKLow[0] = ThDCRho08HyperKXSec[0]*0.85; ThDCRho08HyperKHigh[0] = ThDCRho08HyperKXSec[0]*1.15; - ThDCRho08HyperKMass[1] = 121; ThDCRho08HyperKXSec[1] = 0.979000; ThDCRho08HyperKLow[1] = ThDCRho08HyperKXSec[1]*0.85; ThDCRho08HyperKHigh[1] = ThDCRho08HyperKXSec[1]*1.15; - ThDCRho08HyperKMass[2] = 182; ThDCRho08HyperKXSec[2] = 0.560000; ThDCRho08HyperKLow[2] = ThDCRho08HyperKXSec[2]*0.85; ThDCRho08HyperKHigh[2] = ThDCRho08HyperKXSec[2]*1.15; - ThDCRho08HyperKMass[3] = 242; ThDCRho08HyperKXSec[3] = 0.489000; ThDCRho08HyperKLow[3] = ThDCRho08HyperKXSec[3]*0.85; ThDCRho08HyperKHigh[3] = ThDCRho08HyperKXSec[3]*1.15; - ThDCRho08HyperKMass[4] = 302; ThDCRho08HyperKXSec[4] = 0.463000; ThDCRho08HyperKLow[4] = ThDCRho08HyperKXSec[4]*0.85; ThDCRho08HyperKHigh[4] = ThDCRho08HyperKXSec[4]*1.15; - ThDCRho08HyperKMass[5] = 350; ThDCRho08HyperKXSec[5] = 0.473000; ThDCRho08HyperKLow[5] = ThDCRho08HyperKXSec[5]*0.85; ThDCRho08HyperKHigh[5] = ThDCRho08HyperKXSec[5]*1.15; - ThDCRho08HyperKMass[6] = 370; ThDCRho08HyperKXSec[6] = 0.48288105; ThDCRho08HyperKLow[6] = ThDCRho08HyperKXSec[6]*0.85; ThDCRho08HyperKHigh[6] = ThDCRho08HyperKXSec[6]*1.15; - ThDCRho08HyperKMass[7] = 390; ThDCRho08HyperKXSec[7] = 0.47132496; ThDCRho08HyperKLow[7] = ThDCRho08HyperKXSec[7]*0.85; ThDCRho08HyperKHigh[7] = ThDCRho08HyperKXSec[7]*1.15; - ThDCRho08HyperKMass[8] = 395; ThDCRho08HyperKXSec[8] = 0.420000; ThDCRho08HyperKLow[8] = ThDCRho08HyperKXSec[8]*0.85; ThDCRho08HyperKHigh[8] = ThDCRho08HyperKXSec[8]*1.15; - ThDCRho08HyperKMass[9] = 400; ThDCRho08HyperKXSec[9] = 0.473000; ThDCRho08HyperKLow[9] = ThDCRho08HyperKXSec[9]*0.85; ThDCRho08HyperKHigh[9] = ThDCRho08HyperKXSec[9]*1.15; - ThDCRho08HyperKMass[10] = 410; ThDCRho08HyperKXSec[10] = 0.0060812129; ThDCRho08HyperKLow[10] = ThDCRho08HyperKXSec[10]*0.85; ThDCRho08HyperKHigh[10] = ThDCRho08HyperKXSec[10]*1.15; - ThDCRho08HyperKMass[11] = 420; ThDCRho08HyperKXSec[11] = 0.0035; ThDCRho08HyperKLow[11] = ThDCRho08HyperKXSec[11]*0.85; ThDCRho08HyperKHigh[11] = ThDCRho08HyperKXSec[11]*1.15; - ThDCRho08HyperKMass[12] = 500; ThDCRho08HyperKXSec[12] = 0.0002849; ThDCRho08HyperKLow[12] = ThDCRho08HyperKXSec[12]*0.85; ThDCRho08HyperKHigh[12] = ThDCRho08HyperKXSec[12]*1.15; - TCutG* DCRho08HyperKXSecErr = GetErrorBand("DCRho08HyperKErr", ThDCRho08HyperKN,ThDCRho08HyperKMass,ThDCRho08HyperKLow,ThDCRho08HyperKHigh); - - int ThDCRho12HyperKN = 12; double ThDCRho12HyperKMass [100]; double ThDCRho12HyperKXSec [100]; double ThDCRho12HyperKLow [100]; double ThDCRho12HyperKHigh [100]; - ThDCRho12HyperKMass[0] = 100; ThDCRho12HyperKXSec[0] = 0.8339415992; ThDCRho12HyperKLow[0] = ThDCRho12HyperKXSec[0]*0.85; ThDCRho12HyperKHigh[0] = ThDCRho12HyperKXSec[0]*1.15; - ThDCRho12HyperKMass[1] = 182; ThDCRho12HyperKXSec[1] = 0.168096952140; ThDCRho12HyperKLow[1] = ThDCRho12HyperKXSec[1]*0.85; ThDCRho12HyperKHigh[1] = ThDCRho12HyperKXSec[1]*1.15; - ThDCRho12HyperKMass[2] = 302; ThDCRho12HyperKXSec[2] = 0.079554948387; ThDCRho12HyperKLow[2] = ThDCRho12HyperKXSec[2]*0.85; ThDCRho12HyperKHigh[2] = ThDCRho12HyperKXSec[2]*1.15; - ThDCRho12HyperKMass[3] = 500; ThDCRho12HyperKXSec[3] = 0.063996737; ThDCRho12HyperKLow[3] = ThDCRho12HyperKXSec[3]*0.85; ThDCRho12HyperKHigh[3] = ThDCRho12HyperKXSec[3]*1.15; - ThDCRho12HyperKMass[4] = 530; ThDCRho12HyperKXSec[4] = 0.064943882; ThDCRho12HyperKLow[4] = ThDCRho12HyperKXSec[4]*0.85; ThDCRho12HyperKHigh[4] = ThDCRho12HyperKXSec[4]*1.15; - ThDCRho12HyperKMass[5] = 570; ThDCRho12HyperKXSec[5] = 0.0662920530; ThDCRho12HyperKLow[5] = ThDCRho12HyperKXSec[5]*0.85; ThDCRho12HyperKHigh[5] = ThDCRho12HyperKXSec[5]*1.15; - ThDCRho12HyperKMass[6] = 590; ThDCRho12HyperKXSec[6] = 0.060748383; ThDCRho12HyperKLow[6] = ThDCRho12HyperKXSec[6]*0.85; ThDCRho12HyperKHigh[6] = ThDCRho12HyperKXSec[6]*1.15; - ThDCRho12HyperKMass[7] = 595; ThDCRho12HyperKXSec[7] = 0.04968409; ThDCRho12HyperKLow[7] = ThDCRho12HyperKXSec[7]*0.85; ThDCRho12HyperKHigh[7] = ThDCRho12HyperKXSec[7]*1.15; - ThDCRho12HyperKMass[8] = 600; ThDCRho12HyperKXSec[8] = 0.0026232721237; ThDCRho12HyperKLow[8] = ThDCRho12HyperKXSec[8]*0.85; ThDCRho12HyperKHigh[8] = ThDCRho12HyperKXSec[8]*1.15; - ThDCRho12HyperKMass[9] = 610; ThDCRho12HyperKXSec[9] = 0.00127431; ThDCRho12HyperKLow[9] = ThDCRho12HyperKXSec[9]*0.85; ThDCRho12HyperKHigh[9] = ThDCRho12HyperKXSec[9]*1.15; - ThDCRho12HyperKMass[10] = 620; ThDCRho12HyperKXSec[10] = 0.00056965104319; ThDCRho12HyperKLow[10] = ThDCRho12HyperKXSec[10]*0.85; ThDCRho12HyperKHigh[10] = ThDCRho12HyperKXSec[10]*1.15; - ThDCRho12HyperKMass[11] = 700; ThDCRho12HyperKXSec[11] = 0.00006122886211; ThDCRho12HyperKLow[11] = ThDCRho12HyperKXSec[11]*0.85; ThDCRho12HyperKHigh[11] = ThDCRho12HyperKXSec[11]*1.15; - TCutG* DCRho12HyperKXSecErr = GetErrorBand("DCRho12HyperKErr", ThDCRho12HyperKN,ThDCRho12HyperKMass,ThDCRho12HyperKLow,ThDCRho12HyperKHigh); - - int ThDCRho16HyperKN = 12; double ThDCRho16HyperKMass [100]; double ThDCRho16HyperKXSec [100]; double ThDCRho16HyperKLow [100]; double ThDCRho16HyperKHigh [100]; - ThDCRho16HyperKMass[0] = 100; ThDCRho16HyperKXSec[0] = 0.711518686800; ThDCRho16HyperKLow[0] = ThDCRho16HyperKXSec[0]*0.85; ThDCRho16HyperKHigh[0] = ThDCRho16HyperKXSec[0]*1.15; - ThDCRho16HyperKMass[1] = 182; ThDCRho16HyperKXSec[1] = 0.089726059780; ThDCRho16HyperKLow[1] = ThDCRho16HyperKXSec[1]*0.85; ThDCRho16HyperKHigh[1] = ThDCRho16HyperKXSec[1]*1.15; - ThDCRho16HyperKMass[2] = 302; ThDCRho16HyperKXSec[2] = 0.019769637301; ThDCRho16HyperKLow[2] = ThDCRho16HyperKXSec[2]*0.85; ThDCRho16HyperKHigh[2] = ThDCRho16HyperKXSec[2]*1.15; - ThDCRho16HyperKMass[3] = 500; ThDCRho16HyperKXSec[3] = 0.0063302286576; ThDCRho16HyperKLow[3] = ThDCRho16HyperKXSec[3]*0.85; ThDCRho16HyperKHigh[3] = ThDCRho16HyperKXSec[3]*1.15; - ThDCRho16HyperKMass[4] = 700; ThDCRho16HyperKXSec[4] = 0.002536779850; ThDCRho16HyperKLow[4] = ThDCRho16HyperKXSec[4]*0.85; ThDCRho16HyperKHigh[4] = ThDCRho16HyperKXSec[4]*1.15; - ThDCRho16HyperKMass[5] = 730; ThDCRho16HyperKXSec[5] = 0.00213454921; ThDCRho16HyperKLow[5] = ThDCRho16HyperKXSec[5]*0.85; ThDCRho16HyperKHigh[5] = ThDCRho16HyperKXSec[5]*1.15; - ThDCRho16HyperKMass[6] = 770; ThDCRho16HyperKXSec[6] = 0.001737551; ThDCRho16HyperKLow[6] = ThDCRho16HyperKXSec[6]*0.85; ThDCRho16HyperKHigh[6] = ThDCRho16HyperKXSec[6]*1.15; - ThDCRho16HyperKMass[7] = 790; ThDCRho16HyperKXSec[7] =0.00161578593 ; ThDCRho16HyperKLow[7] = ThDCRho16HyperKXSec[7]*0.85; ThDCRho16HyperKHigh[7] = ThDCRho16HyperKXSec[7]*1.15; - ThDCRho16HyperKMass[8] = 795; ThDCRho16HyperKXSec[8] = 0.00153513713; ThDCRho16HyperKLow[8] = ThDCRho16HyperKXSec[8]*0.85; ThDCRho16HyperKHigh[8] = ThDCRho16HyperKXSec[8]*1.15; - ThDCRho16HyperKMass[9] = 800; ThDCRho16HyperKXSec[9] = 0.000256086965; ThDCRho16HyperKLow[9] = ThDCRho16HyperKXSec[9]*0.85; ThDCRho16HyperKHigh[9] = ThDCRho16HyperKXSec[9]*1.15; - ThDCRho16HyperKMass[10] = 820; ThDCRho16HyperKXSec[10] = 0.000097929923655; ThDCRho16HyperKLow[10] = ThDCRho16HyperKXSec[10]*0.85; ThDCRho16HyperKHigh[10] = ThDCRho16HyperKXSec[10]*1.15; - ThDCRho16HyperKMass[11] = 900; ThDCRho16HyperKXSec[11] = 0.000013146066; ThDCRho16HyperKLow[11] = ThDCRho16HyperKXSec[11]*0.85; ThDCRho16HyperKHigh[11] = ThDCRho16HyperKXSec[11]*1.15; - TCutG* DCRho16HyperKXSecErr = GetErrorBand("DCRho16HyperKErr", ThDCRho16HyperKN,ThDCRho16HyperKMass,ThDCRho16HyperKLow,ThDCRho16HyperKHigh); - - - -/* - fprintf(pFile,"-----------------------\n0%% TK ONLY \n-------------------------\n"); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Gluino2C \n", FindIntersection(Tk_Obs_Gluino2C, GluinoXSecLow, 300, 1000, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF0 \n", FindIntersection(Tk_Obs_GluinoF0, GluinoXSecLow, 300, 1000, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF1 \n", FindIntersection(Tk_Obs_GluinoF1, GluinoXSecLow, 300, 1100, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF1 Z2\n",FindIntersection(Tk_Obs_GluinoZF1, GluinoXSecLow, 600,800, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF5 \n", FindIntersection(Tk_Obs_GluinoF5, GluinoXSecLow, 300, 1100, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoNF0\n", FindIntersection(Tk_Obs_GluinoNF0, GluinoXSecLow, 300, 1000, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoNF1\n", FindIntersection(Tk_Obs_GluinoNF1, GluinoXSecLow, 300, 1100, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoNF5\n", FindIntersection(Tk_Obs_GluinoNF5, GluinoXSecLow, 300, 1000, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Stop2C \n", FindIntersection(Tk_Obs_Stop2C , StopXSecLow , 130, 800, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Stop \n", FindIntersection(Tk_Obs_Stop , StopXSecLow , 130, 800, 1, 0.00)); - //fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Stop Z2 \n", FindIntersection(Tk_Obs_StopZ , StopXSecLow , 300, 500, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for StopN \n", FindIntersection(Tk_Obs_StopN , StopXSecLow , 130, 800, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GMStau \n", FindIntersection(Tk_Obs_GMStau , GMStauXSec , 100, 494, 1, 0.15)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for PPStau \n", FindIntersection(Tk_Obs_PPStau , PPStauXSec , 100, 308, 1, 0.15)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for DCStau \n", FindIntersection(Tk_Obs_DCStau , DCStauXSec , 121, 302, 1, 0.15)); - - fprintf(pFile,"-----------------------\n0%% TK TOF \n-------------------------\n"); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Gluino2C \n", FindIntersection(Mu_Obs_Gluino2C, GluinoXSecLow, 300, 1000, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF0 \n", FindIntersection(Mu_Obs_GluinoF0, GluinoXSecLow, 300, 1000, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF1 \n", FindIntersection(Mu_Obs_GluinoF1, GluinoXSecLow, 300, 1100, 1, 0.00)); - //fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF1 Z2\n",FindIntersection(Mu_Obs_GluinoZF1, GluinoXSecLow, 600,800, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF5 \n", FindIntersection(Mu_Obs_GluinoF5, GluinoXSecLow, 300, 1100, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoNF0\n", FindIntersection(Mu_Obs_GluinoNF0, GluinoXSecLow, 300, 1000, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoNF1\n", FindIntersection(Mu_Obs_GluinoNF1, GluinoXSecLow, 300, 1100, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoNF5\n", FindIntersection(Mu_Obs_GluinoNF5, GluinoXSecLow, 300, 1000, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Stop2C \n", FindIntersection(Mu_Obs_Stop2C , StopXSecLow , 130, 800, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Stop \n", FindIntersection(Mu_Obs_Stop , StopXSecLow , 130, 800, 1, 0.00)); - //fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Stop Z2 \n", FindIntersection(Mu_Obs_StopZ , StopXSecLow , 300, 500, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for StopN \n", FindIntersection(Mu_Obs_StopN , StopXSecLow , 130, 800, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GMStau \n", FindIntersection(Mu_Obs_GMStau , GMStauXSec , 100, 494, 1, 0.15)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for PPStau \n", FindIntersection(Mu_Obs_PPStau , PPStauXSec , 100, 308, 1, 0.15)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for DCStau \n", FindIntersection(Mu_Obs_DCStau , DCStauXSec , 121, 302, 1, 0.15)); - -*/ - fprintf(pFile,"-----------------------\nNO TH UNCERTAINTY ACCOUNTED FOR \n-------------------------\n"); - - fprintf(pFile,"-----------------------\n0%% TK ONLY \n-------------------------\n"); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Gluino2C \n", FindIntersection(Tk_Obs_Gluino2C, GluinoXSec, 300, 900, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF0 \n", FindIntersection(Tk_Obs_GluinoF0, GluinoXSec, 300, 900, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF1 \n", FindIntersection(Tk_Obs_GluinoF1, GluinoXSec, 300, 1100, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF1 Z2\n",FindIntersection(Tk_Obs_GluinoZF1, GluinoXSec, 600,800, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF5 \n", FindIntersection(Tk_Obs_GluinoF5, GluinoXSec, 300, 1100, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoNF0\n", FindIntersection(Tk_Obs_GluinoNF0, GluinoXSec, 300, 900, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoNF1\n", FindIntersection(Tk_Obs_GluinoNF1, GluinoXSec, 300, 1100, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoNF5\n", FindIntersection(Tk_Obs_GluinoNF5, GluinoXSec, 300, 900, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Stop2C \n", FindIntersection(Tk_Obs_Stop2C , StopXSec , 130, 800, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Stop \n", FindIntersection(Tk_Obs_Stop , StopXSec , 130, 800, 1, 0.00)); - //fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Stop Z2 \n", FindIntersection(Tk_Obs_StopZ , StopXSec , 300, 500, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for StopN \n", FindIntersection(Tk_Obs_StopN , StopXSec , 130, 800, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GMStau \n", FindIntersection(Tk_Obs_GMStau , GMStauXSec, 100, 494, 1, 0.0)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for PPStau \n", FindIntersection(Tk_Obs_PPStau , PPStauXSec, 100, 308, 1, 0.0)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for DCRho08HyperK \n", FindIntersection(Tk_Obs_DCRho08HyperK , DCRho08HyperKXSec, 100, 500, 1, 0.0)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for DCRho12HyperK \n", FindIntersection(Tk_Obs_DCRho12HyperK , DCRho12HyperKXSec, 100, 700, 1, 0.0)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for DCRho16HyperK \n", FindIntersection(Tk_Obs_DCRho16HyperK , DCRho16HyperKXSec, 100, 900, 1, 0.0)); - - - - - fprintf(pFile,"-----------------------\n0%% TK TOF \n-------------------------\n"); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Gluino2C \n", FindIntersection(Mu_Obs_Gluino2C, GluinoXSec, 300,1000, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF0 \n", FindIntersection(Mu_Obs_GluinoF0, GluinoXSec, 300,1000, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF1 \n", FindIntersection(Mu_Obs_GluinoF1, GluinoXSec, 300,1100, 1, 0.00)); - //fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF1 Z2\n",FindIntersection(Mu_Obs_GluinoZF1, GluinoXSec, 600,800, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoF5 \n", FindIntersection(Mu_Obs_GluinoF5, GluinoXSec, 300,1100, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoNF0\n", FindIntersection(Mu_Obs_GluinoNF0, GluinoXSec, 300,1000, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoNF1\n", FindIntersection(Mu_Obs_GluinoNF1, GluinoXSec, 300,1100, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GluinoNF5\n", FindIntersection(Mu_Obs_GluinoNF5, GluinoXSec, 300,1000, 1, 0.00)); -// fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Stop2C \n", FindIntersection(Mu_Obs_Stop2C , StopXSec , 130, 800, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Stop \n", FindIntersection(Mu_Obs_Stop , StopXSec , 130, 800, 1, 0.00)); - //fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for Stop Z2 \n", FindIntersection(Mu_Obs_StopZ , StopXSec , 300, 500, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for StopN \n", FindIntersection(Mu_Obs_StopN , StopXSec , 130, 800, 1, 0.00)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for GMStau \n", FindIntersection(Mu_Obs_GMStau , GMStauXSec, 100, 494, 1, 0.0)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for PPStau \n", FindIntersection(Mu_Obs_PPStau , PPStauXSec, 100, 308, 1, 0.0)); - - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for DCRho08HyperK \n", FindIntersection(Mu_Obs_DCRho08HyperK , DCRho08HyperKXSec, 100, 500, 1, 0.0)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for DCRho12HyperK \n", FindIntersection(Mu_Obs_DCRho12HyperK , DCRho12HyperKXSec, 100, 700, 1, 0.0)); - fprintf(pFile,"MASS EXCLUDED UP TO %8.3fGeV for DCRho16HyperK \n", FindIntersection(Mu_Obs_DCRho16HyperK , DCRho16HyperKXSec, 100, 900, 1, 0.0)); - - fclose(pFile); - if(syst!="")return; - - - GluinoXSec ->SetLineColor(4); GluinoXSec ->SetMarkerColor(4); GluinoXSec ->SetLineWidth(1); GluinoXSec ->SetLineStyle(3); GluinoXSec ->SetMarkerStyle(1); - Mu_Obs_GluinoF1 ->SetLineColor(4); Mu_Obs_GluinoF1 ->SetMarkerColor(4); Mu_Obs_GluinoF1 ->SetLineWidth(2); Mu_Obs_GluinoF1 ->SetLineStyle(1); Mu_Obs_GluinoF1 ->SetMarkerStyle(22); - Mu_Obs_GluinoF5 ->SetLineColor(4); Mu_Obs_GluinoF5 ->SetMarkerColor(4); Mu_Obs_GluinoF5 ->SetLineWidth(2); Mu_Obs_GluinoF5 ->SetLineStyle(1); Mu_Obs_GluinoF5 ->SetMarkerStyle(23); - Mu_Obs_GluinoNF1->SetLineColor(4); Mu_Obs_GluinoNF1->SetMarkerColor(4); Mu_Obs_GluinoNF1->SetLineWidth(2); Mu_Obs_GluinoNF1->SetLineStyle(1); Mu_Obs_GluinoNF1->SetMarkerStyle(26); - Tk_Obs_GluinoF1 ->SetLineColor(4); Tk_Obs_GluinoF1 ->SetMarkerColor(4); Tk_Obs_GluinoF1 ->SetLineWidth(2); Tk_Obs_GluinoF1 ->SetLineStyle(1); Tk_Obs_GluinoF1 ->SetMarkerStyle(22); - Tk_Obs_GluinoF5 ->SetLineColor(4); Tk_Obs_GluinoF5 ->SetMarkerColor(4); Tk_Obs_GluinoF5 ->SetLineWidth(2); Tk_Obs_GluinoF5 ->SetLineStyle(1); Tk_Obs_GluinoF5 ->SetMarkerStyle(23); - Tk_Obs_GluinoNF1->SetLineColor(4); Tk_Obs_GluinoNF1->SetMarkerColor(4); Tk_Obs_GluinoNF1->SetLineWidth(2); Tk_Obs_GluinoNF1->SetLineStyle(1); Tk_Obs_GluinoNF1->SetMarkerStyle(26); - StopXSec ->SetLineColor(2); StopXSec ->SetMarkerColor(2); StopXSec ->SetLineWidth(1); StopXSec ->SetLineStyle(2); StopXSec ->SetMarkerStyle(1); - Mu_Obs_Stop ->SetLineColor(2); Mu_Obs_Stop ->SetMarkerColor(2); Mu_Obs_Stop ->SetLineWidth(2); Mu_Obs_Stop ->SetLineStyle(1); Mu_Obs_Stop ->SetMarkerStyle(21); - Mu_Obs_StopN ->SetLineColor(2); Mu_Obs_StopN ->SetMarkerColor(2); Mu_Obs_StopN ->SetLineWidth(2); Mu_Obs_StopN ->SetLineStyle(1); Mu_Obs_StopN ->SetMarkerStyle(25); - Tk_Obs_Stop ->SetLineColor(2); Tk_Obs_Stop ->SetMarkerColor(2); Tk_Obs_Stop ->SetLineWidth(2); Tk_Obs_Stop ->SetLineStyle(1); Tk_Obs_Stop ->SetMarkerStyle(21); - Tk_Obs_StopN ->SetLineColor(2); Tk_Obs_StopN ->SetMarkerColor(2); Tk_Obs_StopN ->SetLineWidth(2); Tk_Obs_StopN ->SetLineStyle(1); Tk_Obs_StopN ->SetMarkerStyle(25); - GMStauXSec ->SetLineColor(1); GMStauXSec ->SetMarkerColor(1); GMStauXSec ->SetLineWidth(1); GMStauXSec ->SetLineStyle(1); GMStauXSec ->SetMarkerStyle(1); - PPStauXSec ->SetLineColor(6); PPStauXSec ->SetMarkerColor(6); PPStauXSec ->SetLineWidth(1); PPStauXSec ->SetLineStyle(4); PPStauXSec ->SetMarkerStyle(1); - DCRho08HyperKXSec ->SetLineColor(4); DCRho08HyperKXSec ->SetMarkerColor(4); DCRho08HyperKXSec ->SetLineWidth(1); DCRho08HyperKXSec ->SetLineStyle(3); DCRho08HyperKXSec ->SetMarkerStyle(1); - DCRho12HyperKXSec ->SetLineColor(2); DCRho12HyperKXSec ->SetMarkerColor(2); DCRho12HyperKXSec ->SetLineWidth(1); DCRho12HyperKXSec ->SetLineStyle(2); DCRho12HyperKXSec ->SetMarkerStyle(1); - DCRho16HyperKXSec ->SetLineColor(1); DCRho16HyperKXSec ->SetMarkerColor(1); DCRho16HyperKXSec ->SetLineWidth(1); DCRho16HyperKXSec ->SetLineStyle(1); DCRho16HyperKXSec ->SetMarkerStyle(1); - - - Mu_Obs_GMStau ->SetLineColor(1); Mu_Obs_GMStau ->SetMarkerColor(1); Mu_Obs_GMStau ->SetLineWidth(2); Mu_Obs_GMStau ->SetLineStyle(1); Mu_Obs_GMStau ->SetMarkerStyle(23); - Mu_Obs_PPStau ->SetLineColor(6); Mu_Obs_PPStau ->SetMarkerColor(6); Mu_Obs_PPStau ->SetLineWidth(2); Mu_Obs_PPStau ->SetLineStyle(1); Mu_Obs_PPStau ->SetMarkerStyle(23); - Mu_Obs_DCRho08HyperK ->SetLineColor(4); Mu_Obs_DCRho08HyperK ->SetMarkerColor(4); Mu_Obs_DCRho08HyperK ->SetLineWidth(2); Mu_Obs_DCRho08HyperK ->SetLineStyle(1); Mu_Obs_DCRho08HyperK ->SetMarkerStyle(22); - Mu_Obs_DCRho12HyperK ->SetLineColor(2); Mu_Obs_DCRho12HyperK ->SetMarkerColor(2); Mu_Obs_DCRho12HyperK ->SetLineWidth(2); Mu_Obs_DCRho12HyperK ->SetLineStyle(1); Mu_Obs_DCRho12HyperK ->SetMarkerStyle(23); - Mu_Obs_DCRho16HyperK ->SetLineColor(1); Mu_Obs_DCRho16HyperK ->SetMarkerColor(1); Mu_Obs_DCRho16HyperK ->SetLineWidth(2); Mu_Obs_DCRho16HyperK ->SetLineStyle(1); Mu_Obs_DCRho16HyperK ->SetMarkerStyle(26); - - - Tk_Obs_GMStau ->SetLineColor(1); Tk_Obs_GMStau ->SetMarkerColor(1); Tk_Obs_GMStau ->SetLineWidth(2); Tk_Obs_GMStau ->SetLineStyle(1); Tk_Obs_GMStau ->SetMarkerStyle(20); - Tk_Obs_PPStau ->SetLineColor(6); Tk_Obs_PPStau ->SetMarkerColor(6); Tk_Obs_PPStau ->SetLineWidth(2); Tk_Obs_PPStau ->SetLineStyle(1); Tk_Obs_PPStau ->SetMarkerStyle(20); - Tk_Obs_DCRho08HyperK ->SetLineColor(4); Tk_Obs_DCRho08HyperK ->SetMarkerColor(4); Tk_Obs_DCRho08HyperK ->SetLineWidth(2); Tk_Obs_DCRho08HyperK ->SetLineStyle(1); Tk_Obs_DCRho08HyperK ->SetMarkerStyle(22); - Tk_Obs_DCRho12HyperK ->SetLineColor(2); Tk_Obs_DCRho12HyperK ->SetMarkerColor(2); Tk_Obs_DCRho12HyperK ->SetLineWidth(2); Tk_Obs_DCRho12HyperK ->SetLineStyle(1); Tk_Obs_DCRho12HyperK ->SetMarkerStyle(23); - Tk_Obs_DCRho16HyperK ->SetLineColor(1); Tk_Obs_DCRho16HyperK ->SetMarkerColor(1); Tk_Obs_DCRho16HyperK ->SetLineWidth(2); Tk_Obs_DCRho16HyperK ->SetLineStyle(1); Tk_Obs_DCRho16HyperK ->SetMarkerStyle(26); - - - - c1 = new TCanvas("c1", "c1",600,600); - TMultiGraph* MGMu = new TMultiGraph(); - MGMu->Add(GluinoXSec ,"L"); - MGMu->Add(StopXSec ,"L"); - MGMu->Add(GMStauXSec ,"L"); - MGMu->Add(PPStauXSec ,"L"); - MGMu->Add(Mu_Obs_GluinoF1 ,"LP"); - MGMu->Add(Mu_Obs_GluinoF5 ,"LP"); -// MGMu->Add(Mu_Obs_GluinoNF1 ,"LP"); - MGMu->Add(Mu_Obs_Stop ,"LP"); -// MGMu->Add(Mu_Obs_StopN ,"LP"); - MGMu->Add(Mu_Obs_GMStau ,"LP"); - MGMu->Add(Mu_Obs_PPStau ,"LP"); - MGMu->Draw("A"); - GluinoXSecErr->Draw("f"); - StopXSecErr ->Draw("f"); - StauXSecErr ->Draw("f"); - PPStauXSecErr ->Draw("f"); - MGMu->Draw("same"); - MGMu->SetTitle(""); - MGMu->GetXaxis()->SetTitle("Mass (GeV/c^{2})"); - MGMu->GetYaxis()->SetTitle("#sigma (pb)"); - MGMu->GetYaxis()->SetTitleOffset(1.70); - MGMu->GetYaxis()->SetRangeUser(PlotMinScale,PlotMaxScale); - - DrawPreliminary(IntegratedLuminosity); - TLegend* LEGMu = new TLegend(0.44,0.65,0.67,0.90); -// LEGMu->SetHeader("95% C.L. Limits"); - LEGMu->SetHeader("Tk + TOF"); - LEGMu->SetFillColor(0); - LEGMu->SetBorderSize(0); - LEGMu->AddEntry(Mu_Obs_GluinoF5 , "gluino; 50% #tilde{g}g" ,"LP"); - LEGMu->AddEntry(Mu_Obs_GluinoF1 , "gluino; 10% #tilde{g}g" ,"LP"); -// LEGMu->AddEntry(Mu_Obs_GluinoNF1, "gluino; 10% #tilde{g}g; ch. suppr.","LP"); - LEGMu->AddEntry(Mu_Obs_Stop , "stop" ,"LP"); -// LEGMu->AddEntry(Mu_Obs_StopN , "stop; ch. suppr.","LP"); - LEGMu->AddEntry(Mu_Obs_PPStau , "Pair Prod. stau" ,"LP"); - LEGMu->AddEntry(Mu_Obs_GMStau , "GMSB stau" ,"LP"); - LEGMu->Draw(); - - TLegend* LEGTh = new TLegend(0.14,0.73,0.44,0.93); - LEGTh->SetHeader("Theoretical Prediction"); - LEGTh->SetFillColor(0); - LEGTh->SetBorderSize(0); - TGraph* GlThLeg = (TGraph*) GluinoXSec->Clone("GluinoThLeg"); - GlThLeg->SetFillColor(GluinoXSecErr->GetFillColor()); - LEGTh->AddEntry(GlThLeg, "gluino (NLO+NLL)" ,"LF"); - TGraph* StThLeg = (TGraph*) StopXSec->Clone("StopThLeg"); - StThLeg->SetFillColor(GluinoXSecErr->GetFillColor()); - LEGTh->AddEntry(StThLeg ,"stop (NLO+NLL)" ,"LF"); - - TGraph* PPStauThLeg = (TGraph*) PPStauXSec->Clone("PPStauThLeg"); - PPStauThLeg->SetFillColor(GluinoXSecErr->GetFillColor()); - LEGTh->AddEntry(PPStauThLeg ,"Pair Prod. stau (NLO)" ,"LF"); - TGraph* StauThLeg = (TGraph*) GMStauXSec->Clone("StauThLeg"); - StauThLeg->SetFillColor(GluinoXSecErr->GetFillColor()); - LEGTh->AddEntry(StauThLeg ,"GMSB stau (NLO)" ,"LF"); - - LEGTh->Draw(); - -// c1->SetGridx(true); -// c1->SetGridy(true); - SaveCanvas(c1, outpath, string("MuExclusion")); - c1->SetLogy(true); - SaveCanvas(c1, outpath, string("MuExclusionLog")); - delete c1; - - - c1 = new TCanvas("c1", "c1",600,600); - TMultiGraph* MGTk = new TMultiGraph(); - MGTk->Add(GluinoXSec ,"L"); - MGTk->Add(StopXSec ,"L"); - MGTk->Add(GMStauXSec ,"L"); - MGTk->Add(PPStauXSec ,"L"); - MGTk->Add(Tk_Obs_GluinoF1 ,"LP"); - MGTk->Add(Tk_Obs_GluinoF5 ,"LP"); - MGTk->Add(Tk_Obs_GluinoNF1 ,"LP"); - MGTk->Add(Tk_Obs_Stop ,"LP"); - MGTk->Add(Tk_Obs_StopN ,"LP"); - MGTk->Add(Tk_Obs_GMStau ,"LP"); - MGTk->Add(Tk_Obs_PPStau ,"LP"); - MGTk->Draw("A"); - GluinoXSecErr->Draw("f"); - StopXSecErr ->Draw("f"); - StauXSecErr ->Draw("f"); - PPStauXSecErr ->Draw("f"); - MGTk->Draw("same"); - MGTk->SetTitle(""); - MGTk->GetXaxis()->SetTitle("Mass (GeV/c^{2})"); - MGTk->GetYaxis()->SetTitle("#sigma (pb)"); - MGTk->GetYaxis()->SetTitleOffset(1.70); - MGTk->GetYaxis()->SetRangeUser(PlotMinScale,PlotMaxScale); - - DrawPreliminary(IntegratedLuminosity); - - TLegend* LEGTk = new TLegend(0.44,0.58,0.82,0.9); -// LEGTk->SetHeader("95% C.L. Limits"); - LEGTk->SetHeader("Tracker - Only"); - LEGTk->SetFillColor(0); - LEGTk->SetBorderSize(0); - LEGTk->AddEntry(Tk_Obs_GluinoF5 , "gluino; 50% #tilde{g}g" ,"LP"); - LEGTk->AddEntry(Tk_Obs_GluinoF1 , "gluino; 10% #tilde{g}g" ,"LP"); - LEGTk->AddEntry(Tk_Obs_GluinoNF1, "gluino; 10% #tilde{g}g; ch. suppr.","LP"); - LEGTk->AddEntry(Tk_Obs_Stop , "stop" ,"LP"); - LEGTk->AddEntry(Tk_Obs_StopN , "stop; ch. suppr.","LP"); - LEGTk->AddEntry(Tk_Obs_PPStau , "Pair Prod. stau" ,"LP"); - LEGTk->AddEntry(Tk_Obs_GMStau , "GMSB stau" ,"LP"); - LEGTk->Draw(); - - LEGTh->Draw(); - -// c1->SetGridx(true); -// c1->SetGridy(true); - SaveCanvas(c1, outpath, string("TkExclusion")); - c1->SetLogy(true); - SaveCanvas(c1, outpath, string("TkExclusionLog")); - delete c1; - - c1 = new TCanvas("c1", "c1",600,600); - TMultiGraph* MGDCMu = new TMultiGraph(); - MGDCMu->Add(DCRho08HyperKXSec ,"L"); - MGDCMu->Add(Mu_Obs_DCRho08HyperK ,"LP"); - MGDCMu->Add(DCRho12HyperKXSec ,"L"); - MGDCMu->Add(Mu_Obs_DCRho12HyperK ,"LP"); - MGDCMu->Add(DCRho16HyperKXSec ,"L"); - MGDCMu->Add(Mu_Obs_DCRho16HyperK ,"LP"); - MGDCMu->Draw("A"); -// DCRho08HyperKXSecErr ->Draw("f"); -// DCRho12HyperKXSecErr ->Draw("f"); -// DCRho16HyperKXSecErr ->Draw("f"); - MGDCMu->Draw("same"); - MGDCMu->SetTitle(""); - MGDCMu->GetXaxis()->SetTitle("Mass (GeV/c^{2})"); - MGDCMu->GetYaxis()->SetTitle("#sigma (pb)"); - MGDCMu->GetYaxis()->SetTitleOffset(1.70); - MGDCMu->GetYaxis()->SetRangeUser(PlotMinScale,PlotMaxScale); - - DrawPreliminary(IntegratedLuminosity); - - TLegend* LEGDCMu = new TLegend(0.50,0.65,0.80,0.90); - LEGDCMu->SetHeader("Tk + TOF"); - LEGDCMu->SetFillColor(0); - LEGDCMu->SetBorderSize(0); - LEGDCMu->AddEntry(Mu_Obs_DCRho08HyperK , "Hyperk #tilde{#rho} = 0.8 TeV" ,"LP"); - LEGDCMu->AddEntry(Mu_Obs_DCRho12HyperK , "Hyperk #tilde{#rho} = 1.2 TeV" ,"LP"); - LEGDCMu->AddEntry(Mu_Obs_DCRho16HyperK , "Hyperk #tilde{#rho} = 1.6 TeV" ,"LP"); - LEGDCMu->Draw(); - - TLegend* LEGDCTh = new TLegend(0.15,0.73,0.46,0.93); - LEGDCTh->SetHeader("Theoretical Prediction"); - LEGDCTh->SetFillColor(0); - LEGDCTh->SetBorderSize(0); - TGraph* DCRho08HyperKThLeg = (TGraph*) DCRho08HyperKXSec->Clone("DCRho08HyperKThLeg"); - DCRho08HyperKThLeg->SetFillColor(GluinoXSecErr->GetFillColor()); - LEGDCTh->AddEntry(DCRho08HyperKThLeg ,"Hyperk #tilde{#rho} = 0.8 TeV (LO)" ,"L"); - TGraph* DCRho12HyperKThLeg = (TGraph*) DCRho12HyperKXSec->Clone("DCRho12HyperKThLeg"); - DCRho12HyperKThLeg->SetFillColor(GluinoXSecErr->GetFillColor()); - LEGDCTh->AddEntry(DCRho12HyperKThLeg ,"Hyperk #tilde{#rho} = 1.2 TeV (LO)" ,"L"); - TGraph* DCRho16HyperKThLeg = (TGraph*) DCRho16HyperKXSec->Clone("DCRho16HyperKThLeg"); - DCRho16HyperKThLeg->SetFillColor(GluinoXSecErr->GetFillColor()); - LEGDCTh->AddEntry(DCRho16HyperKThLeg ,"Hyperk #tilde{#rho} = 1.6 TeV (LO)" ,"L"); - LEGDCTh->Draw(); - SaveCanvas(c1, outpath, string("MuDCExclusion")); - c1->SetLogy(true); - SaveCanvas(c1, outpath, string("MuDCExclusionLog")); - delete c1; - - c1 = new TCanvas("c1", "c1",600,600); - TMultiGraph* MGDCTk = new TMultiGraph(); - MGDCTk->Add(DCRho08HyperKXSec ,"L"); - MGDCTk->Add(Tk_Obs_DCRho08HyperK ,"LP"); - MGDCTk->Add(DCRho12HyperKXSec ,"L"); - MGDCTk->Add(Tk_Obs_DCRho12HyperK ,"LP"); - MGDCTk->Add(DCRho16HyperKXSec ,"L"); - MGDCTk->Add(Tk_Obs_DCRho16HyperK ,"LP"); - MGDCTk->Draw("A"); -// DCRho08HyperKXSecErr ->Draw("f"); -// DCRho12HyperKXSecErr ->Draw("f"); -// DCRho16HyperKXSecErr ->Draw("f"); - MGDCTk->Draw("same"); - MGDCTk->SetTitle(""); - MGDCTk->GetXaxis()->SetTitle("Mass (GeV/c^{2})"); - MGDCTk->GetYaxis()->SetTitle("#sigma (pb)"); - MGDCTk->GetYaxis()->SetTitleOffset(1.70); - MGDCTk->GetYaxis()->SetRangeUser(PlotMinScale,PlotMaxScale); - DrawPreliminary(IntegratedLuminosity); - - TLegend* LEGDCTk = new TLegend(0.50,0.65,0.80,0.90); -// LEGDCTk->SetHeader("95% C.L. Limits"); - LEGDCTk->SetHeader("Tracker - Only"); - LEGDCTk->SetFillColor(0); - LEGDCTk->SetBorderSize(0); - LEGDCTk->AddEntry(Tk_Obs_DCRho08HyperK , "Hyperk #tilde{#rho} = 0.8 TeV" ,"LP"); - LEGDCTk->AddEntry(Tk_Obs_DCRho12HyperK , "Hyperk #tilde{#rho} = 1.2 TeV" ,"LP"); - LEGDCTk->AddEntry(Tk_Obs_DCRho16HyperK , "Hyperk #tilde{#rho} = 1.6 TeV" ,"LP"); - LEGDCTk->Draw(); - - LEGDCTh->Draw(); - - SaveCanvas(c1, outpath, string("TkDCExclusion")); - c1->SetLogy(true); - SaveCanvas(c1, outpath, string("TkDCExclusionLog")); - delete c1; - - - - return; -} - - -void CheckSignalUncertainty(FILE* pFile, FILE* talkFile, string InputPattern){ - - bool IsTkOnly = (InputPattern.find("Type0",0) Models; - Models.push_back("Gluino300_f1"); - Models.push_back("Gluino400_f1"); - Models.push_back("Gluino500_f1"); - Models.push_back("Gluino600_f1"); - Models.push_back("Gluino700_f1"); - Models.push_back("Gluino800_f1"); - Models.push_back("Gluino900_f1"); - Models.push_back("Gluino1000_f1"); - Models.push_back("Gluino1100_f1"); - Models.push_back("Gluino300_f5"); - Models.push_back("Gluino400_f5"); - Models.push_back("Gluino500_f5"); - Models.push_back("Gluino600_f5"); - Models.push_back("Gluino700_f5"); - Models.push_back("Gluino800_f5"); - Models.push_back("Gluino900_f5"); - Models.push_back("Gluino1000_f5"); - Models.push_back("Gluino1100_f5"); - Models.push_back("Gluino300N_f1"); - Models.push_back("Gluino400N_f1"); - Models.push_back("Gluino500N_f1"); - Models.push_back("Gluino600N_f1"); - Models.push_back("Gluino700N_f1"); - Models.push_back("Gluino800N_f1"); - Models.push_back("Gluino900N_f1"); - Models.push_back("Gluino1000N_f1"); - Models.push_back("Gluino1100N_f1"); - Models.push_back("Stop130"); - Models.push_back("Stop200"); - Models.push_back("Stop300"); - Models.push_back("Stop400"); - Models.push_back("Stop500"); - Models.push_back("Stop600"); - Models.push_back("Stop700"); - Models.push_back("Stop800"); - Models.push_back("Stop130N"); - Models.push_back("Stop200N"); - Models.push_back("Stop300N"); - Models.push_back("Stop400N"); - Models.push_back("Stop500N"); - Models.push_back("Stop600N"); - Models.push_back("Stop700N"); - Models.push_back("Stop800N"); - Models.push_back("GMStau100"); - Models.push_back("GMStau126"); - Models.push_back("GMStau156"); - Models.push_back("GMStau200"); - Models.push_back("GMStau247"); - Models.push_back("GMStau308"); - Models.push_back("GMStau370"); - Models.push_back("GMStau432"); - Models.push_back("GMStau494"); - Models.push_back("PPStau100"); - Models.push_back("PPStau126"); - Models.push_back("PPStau156"); - Models.push_back("PPStau200"); - Models.push_back("PPStau247"); - Models.push_back("PPStau308"); - Models.push_back("DCRho08HyperK100"); - Models.push_back("DCRho08HyperK121"); - Models.push_back("DCRho08HyperK182"); - Models.push_back("DCRho08HyperK242"); - Models.push_back("DCRho08HyperK302"); - Models.push_back("DCRho08HyperK350"); - Models.push_back("DCRho08HyperK370"); - Models.push_back("DCRho08HyperK390"); - Models.push_back("DCRho08HyperK395"); - Models.push_back("DCRho08HyperK400"); - Models.push_back("DCRho08HyperK410"); - Models.push_back("DCRho08HyperK420"); - Models.push_back("DCRho08HyperK500"); - Models.push_back("DCRho12HyperK100"); - Models.push_back("DCRho12HyperK182"); - Models.push_back("DCRho12HyperK302"); - Models.push_back("DCRho12HyperK500"); - Models.push_back("DCRho12HyperK530"); - Models.push_back("DCRho12HyperK570"); - Models.push_back("DCRho12HyperK590"); - Models.push_back("DCRho12HyperK595"); - Models.push_back("DCRho12HyperK600"); - Models.push_back("DCRho12HyperK610"); - Models.push_back("DCRho12HyperK620"); - Models.push_back("DCRho12HyperK700"); - Models.push_back("DCRho16HyperK100"); - Models.push_back("DCRho16HyperK182"); - Models.push_back("DCRho16HyperK302"); - Models.push_back("DCRho16HyperK500"); - Models.push_back("DCRho16HyperK700"); - Models.push_back("DCRho16HyperK730"); - Models.push_back("DCRho16HyperK770"); - Models.push_back("DCRho16HyperK790"); - Models.push_back("DCRho16HyperK795"); - Models.push_back("DCRho16HyperK800"); - Models.push_back("DCRho16HyperK820"); - Models.push_back("DCRho16HyperK900"); - - - if(IsTkOnly){ - fprintf(pFile, "%20s Eff --> PScale | EstimScale | DiscrimScale || TotalUncertainty\n","Model"); - fprintf(talkFile, "\\hline\n%20s & Eff & PScale & EstimScale & DiscrimScale & TotalUncertainty \\\\\n","Model"); - } - else { - fprintf(pFile, "%20s Eff --> PScale | EstimScale | DiscrimScale | TOFScale || TotalUncertainty\n","Model"); - fprintf(talkFile, "\\hline\n%20s & Eff & PScale & EstimScale & DiscrimScale & TOFScale & TotalUncertainty \\\\\n","Model"); - } - - for(unsigned int s=0;s %7.3f | %7.3f | %7.3f || %7.3f\n",+Models[s].c_str(), tmp.Eff, P/tmp.Eff, M/tmp.Eff, I/tmp.Eff, sqrt(P*P + I*I + M*M + T*T)/tmp.Eff); - - else if(!IsNeutral) fprintf(pFile, "%20s %7.3f --> %7.3f | %7.3f | %7.3f | %7.3f || %7.3f\n",+Models[s].c_str(), tmp.Eff, P/tmp.Eff, M/tmp.Eff, I/tmp.Eff, T/tmp.Eff, sqrt(P*P + I*I + M*M + T*T)/tmp.Eff); - - if(IsTkOnly && (IsStau || (int)tmp.Mass%200==0)) { - fprintf(talkFile, "\\hline\n%20s & %7.1f\\% & %7.1f\\% & %7.1f\\% & %7.1f\\% & %7.1f\\% \\\\\n",+Models[s].c_str(), 100.*tmp.Eff, 100.*P/tmp.Eff, 100.*M/tmp.Eff, 100.*I/tmp.Eff, 100.*sqrt(P*P + I*I + M*M + T*T)/tmp.Eff); - } - if(!IsTkOnly && !IsNeutral) fprintf(talkFile, "\\hline\n%20s & %7.1f\\% & %7.1f\\% & %7.1f\\% & %7.1f\\% & %7.1f\\% & %7.1f\\% \\\\\n",+Models[s].c_str(), 100.*tmp.Eff, 100.*P/tmp.Eff, 100.*M/tmp.Eff, 100.*I/tmp.Eff, 100.*T/tmp.Eff, 100.*sqrt(P*P + I*I + M*M + T*T)/tmp.Eff); - - } -} - - - -TGraph* MakePlot(FILE* pFile, FILE* talkFile, string InputPattern, string syst, string ModelName, int XSectionType, string Mass0, string Mass1, string Mass2, string Mass3, string Mass4, string Mass5, string Mass6, string Mass7, string Mass8, string Mass9,string Mass10, string Mass11, string Mass12, string Mass13){ - unsigned int N=0; - stAllInfo Infos[14]; - - if(Mass0!=""){Infos[0] = stAllInfo(InputPattern+"/EXCLUSION" + syst + "/"+Mass0+".txt"); N=1;} - if(Mass1!=""){Infos[1] = stAllInfo(InputPattern+"/EXCLUSION" + syst + "/"+Mass1+".txt"); N=2;} - if(Mass2!=""){Infos[2] = stAllInfo(InputPattern+"/EXCLUSION" + syst + "/"+Mass2+".txt"); N=3;} - if(Mass3!=""){Infos[3] = stAllInfo(InputPattern+"/EXCLUSION" + syst + "/"+Mass3+".txt"); N=4;} - if(Mass4!=""){Infos[4] = stAllInfo(InputPattern+"/EXCLUSION" + syst + "/"+Mass4+".txt"); N=5;} - if(Mass5!=""){Infos[5] = stAllInfo(InputPattern+"/EXCLUSION" + syst + "/"+Mass5+".txt"); N=6;} - if(Mass6!=""){Infos[6] = stAllInfo(InputPattern+"/EXCLUSION" + syst + "/"+Mass6+".txt"); N=7;} - if(Mass7!=""){Infos[7] = stAllInfo(InputPattern+"/EXCLUSION" + syst + "/"+Mass7+".txt"); N=8;} - if(Mass8!=""){Infos[8] = stAllInfo(InputPattern+"/EXCLUSION" + syst + "/"+Mass8+".txt"); N=9;} - if(Mass9!=""){Infos[9] = stAllInfo(InputPattern+"/EXCLUSION" + syst + "/"+Mass9+".txt"); N=10;} - if(Mass10!=""){Infos[10] = stAllInfo(InputPattern+"/EXCLUSION" + syst + "/"+Mass10+".txt"); N=11;} - if(Mass11!=""){Infos[11] = stAllInfo(InputPattern+"/EXCLUSION" + syst + "/"+Mass11+".txt"); N=12;} - if(Mass12!=""){Infos[12] = stAllInfo(InputPattern+"/EXCLUSION" + syst + "/"+Mass12+".txt"); N=13;} - if(Mass13!=""){Infos[13] = stAllInfo(InputPattern+"/EXCLUSION" + syst + "/"+Mass13+".txt"); N=14;} - - double Mass [14];for(unsigned int i=0;i<14;i++){Mass [i]=Infos[i].Mass; } - double XSecTh [14];for(unsigned int i=0;i<14;i++){XSecTh [i]=Infos[i].XSec_Th; } - double XSecObs[14];for(unsigned int i=0;i<14;i++){XSecObs[i]=Infos[i].XSec_Obs;} - double XSecExp[14];for(unsigned int i=0;i<14;i++){XSecExp[i]=Infos[i].XSec_Exp;} - - - -/* - if(pFile){ - fprintf(pFile,"%40s",(ModelName + " mass (GeV/$c^2$)").c_str());for(unsigned int i=0;i0 && syst=="")for(unsigned int i=0;i Pt>%+6.1f & I>%+5.3f & TOF>%+4.3f & M>%3.0f--> NData=%2.0f NPred=%6.1E+-%6.1E NSign=%6.1E (Eff=%3.2f) Local Significance %3.2f\n",ModelName.c_str(),Infos[i].Mass,Infos[i].WP_Pt,Infos[i].WP_I,Infos[i].WP_TOF,Infos[i].MassCut, Infos[i].NData, Infos[i].NPred, Infos[i].NPredErr, Infos[i].NSign, Infos[i].Eff, Infos[i].Significance); - - if(XSectionType>0){ - for(unsigned int i=0;iSetTitle(""); - graph->GetYaxis()->SetTitle("CrossSection ( pb )"); - graph->GetYaxis()->SetTitleOffset(1.70); - return graph; -} - -stAllInfo Exclusion(string pattern, string modelName, string signal, double Ratio_0C, double Ratio_1C, double Ratio_2C, string syst){ - GetSignalDefinition(signals); - CurrentSampleIndex = JobIdToIndex(signal); if(CurrentSampleIndex<0){ printf("There is no signal corresponding to the JobId Given\n"); return stAllInfo(); } - - stAllInfo toReturn; - toReturn.Mass = signals[JobIdToIndex(signal)].Mass; - toReturn.MassMean = 0; - toReturn.MassSigma = 0; - toReturn.MassCut = 0; - toReturn.Index = 0; - toReturn.WP_Pt = 0; - toReturn.WP_I = 0; - toReturn.WP_TOF = 0; - toReturn.XSec_Th = signals[JobIdToIndex(signal)].XSec; - toReturn.XSec_Err = signals[JobIdToIndex(signal)].XSec * 0.15; - toReturn.XSec_Exp = 1E50; - toReturn.XSec_ExpUp = 1E50; - toReturn.XSec_ExpDown = 1E50; - toReturn.XSec_Exp2Up = 1E50; - toReturn.XSec_Exp2Down = 1E50; - toReturn.XSec_Obs = 1E50; - toReturn.Eff = 0; - toReturn.Eff_SYSTP = 0; - toReturn.Eff_SYSTI = 0; - toReturn.Eff_SYSTM = 0; - toReturn.Eff_SYSTT = 0; - toReturn.NData = 0; - toReturn.NPred = 0; - toReturn.NPredErr = 0; - toReturn.NSign = 0; - - - - double RescaleFactor = 1.0; - double RescaleError = 0.1; - - double RatioValue[] = {Ratio_0C, Ratio_1C, Ratio_2C}; - - double MaxSOverB=-1; - int MaxSOverBIndex=-1; - - string outpath = pattern + "/EXCLUSION/"; - if(syst!=""){outpath = pattern + "/EXCLUSION" + syst + "/";} - MakeDirectories(outpath); - - FILE* pFile = fopen((outpath+"/"+modelName+".info").c_str(),"w"); - if(!pFile)printf("Can't open file : %s\n",(outpath+"/"+modelName+".info").c_str()); - - string InputPath = pattern + "Histos_Data.root"; - TFile* InputFile = new TFile(InputPath.c_str()); - - TH1D* HCuts_Pt = (TH1D*)GetObjectFromPath(InputFile, "HCuts_Pt"); - TH1D* HCuts_I = (TH1D*)GetObjectFromPath(InputFile, "HCuts_I"); - TH1D* HCuts_TOF = (TH1D*)GetObjectFromPath(InputFile, "HCuts_TOF"); - TH1D* H_A = (TH1D*)GetObjectFromPath(InputFile, "H_A"); - TH1D* H_B = (TH1D*)GetObjectFromPath(InputFile, "H_B"); - TH1D* H_C = (TH1D*)GetObjectFromPath(InputFile, "H_C"); - TH1D* H_D = (TH1D*)GetObjectFromPath(InputFile, "H_D"); - TH1D* H_E = (TH1D*)GetObjectFromPath(InputFile, "H_E"); - TH1D* H_F = (TH1D*)GetObjectFromPath(InputFile, "H_F"); - TH1D* H_G = (TH1D*)GetObjectFromPath(InputFile, "H_G"); - TH1D* H_H = (TH1D*)GetObjectFromPath(InputFile, "H_H"); - TH2D* MassData = (TH2D*)GetObjectFromPath(InputFile, "Data/Mass"); - TH2D* MassPred = (TH2D*)GetObjectFromPath(InputFile, "Pred_Mass"); - TH2D* MassSign[4]; - TH2D* MassSignP[4]; - TH2D* MassSignI[4]; - TH2D* MassSignM[4]; - TH2D* MassSignT[4]; - - string InputPathSign = pattern + "Histos.root"; - TFile* InputFileSign = new TFile(InputPathSign.c_str()); - - MassSign[0] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "/Mass" + syst); - MassSign[1] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "_NC0/Mass" + syst); - MassSign[2] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "_NC1/Mass" + syst); - MassSign[3] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "_NC2/Mass" + syst); - - MassSignP[0] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "/Mass_SystP"); - MassSignP[1] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "_NC0/Mass_SystP"); - MassSignP[2] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "_NC1/Mass_SystP"); - MassSignP[3] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "_NC2/Mass_SystP"); - - MassSignI[0] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "/Mass_SystI"); - MassSignI[1] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "_NC0/Mass_SystI"); - MassSignI[2] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "_NC1/Mass_SystI"); - MassSignI[3] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "_NC2/Mass_SystI"); - - MassSignM[0] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "/Mass_SystM"); - MassSignM[1] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "_NC0/Mass_SystM"); - MassSignM[2] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "_NC1/Mass_SystM"); - MassSignM[3] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "_NC2/Mass_SystM"); - - MassSignT[0] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "/Mass_SystT"); - MassSignT[1] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "_NC0/Mass_SystT"); - MassSignT[2] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "_NC1/Mass_SystT"); - MassSignT[3] = (TH2D*)GetObjectFromPath(InputFileSign, signals[CurrentSampleIndex].Name + "_NC2/Mass_SystT"); - - - TH1D* MassSignProj[4]; - TH1D* MassSignPProj[4]; - TH1D* MassSignIProj[4]; - TH1D* MassSignMProj[4]; - TH1D* MassSignTProj[4]; - ///##############################################################################" - MassSignProj[0] = MassSign[0]->ProjectionY("MassSignProj0",1,1); - double Mean = MassSignProj[0]->GetMean(); - double Width = MassSignProj[0]->GetRMS(); - MinRange = std::max(0.0, Mean-2*Width); - MinRange = MassSignProj[0]->GetXaxis()->GetBinLowEdge(MassSignProj[0]->GetXaxis()->FindBin(MinRange)); //Round to a bin value to avoid counting prpoblem due to the binning. - delete MassSignProj[0]; - ///##############################################################################" - - //Going to first loop and find the cut with the min S over sqrt(B) because this is quick and normally gives a cut with a reach near the minimum - stAllInfo CutInfo[MassData->GetNbinsX()]; - for(int CutIndex=0;CutIndexGetNbinsX();CutIndex++) CutInfo[CutIndex]=toReturn; - - for(int CutIndex=0;CutIndexGetNbinsX();CutIndex++){ - if(HCuts_Pt ->GetBinContent(CutIndex+1) < 45 ) continue; // Be sure the pT cut is high enough to get some statistic for both ABCD and mass shape - if(H_E->GetBinContent(CutIndex+1) >0 && (H_A->GetBinContent(CutIndex+1)<25 || H_F->GetBinContent(CutIndex+1)<25 || H_G->GetBinContent(CutIndex+1)<25))continue; //Skip events where Prediction (AFG/EE) is not reliable - if(H_E->GetBinContent(CutIndex+1)==0 && (H_C->GetBinContent(CutIndex+1)<25 || H_B->GetBinContent(CutIndex+1)<25))continue; //Skip events where Prediction (CB/A) is not reliable - GetSignalMeanHSCPPerEvent(pattern,CutIndex, MinRange, MaxRange); - TH1D* MassDataProj = MassData->ProjectionY("MassDataProj",CutIndex+1,CutIndex+1); - TH1D* MassPredProj = MassPred->ProjectionY("MassPredProj",CutIndex+1,CutIndex+1); - MassSignProj[0] = MassSign [0]->ProjectionY("MassSignProj0",CutIndex+1,CutIndex+1); - MassSignProj[1] = MassSign [1]->ProjectionY("MassSignProj1",CutIndex+1,CutIndex+1); - MassSignProj[2] = MassSign [2]->ProjectionY("MassSignProj2",CutIndex+1,CutIndex+1); - MassSignProj[3] = MassSign [3]->ProjectionY("MassSignProj3",CutIndex+1,CutIndex+1); - - MassSignPProj[0] = MassSignP[0]->ProjectionY("MassSignProP0",CutIndex+1,CutIndex+1); - MassSignPProj[1] = MassSignP[1]->ProjectionY("MassSignProP1",CutIndex+1,CutIndex+1); - MassSignPProj[2] = MassSignP[2]->ProjectionY("MassSignProP2",CutIndex+1,CutIndex+1); - MassSignPProj[3] = MassSignP[3]->ProjectionY("MassSignProP3",CutIndex+1,CutIndex+1); - MassSignIProj[0] = MassSignI[0]->ProjectionY("MassSignProI0",CutIndex+1,CutIndex+1); - MassSignIProj[1] = MassSignI[1]->ProjectionY("MassSignProI1",CutIndex+1,CutIndex+1); - MassSignIProj[2] = MassSignI[2]->ProjectionY("MassSignProI2",CutIndex+1,CutIndex+1); - MassSignIProj[3] = MassSignI[3]->ProjectionY("MassSignProI3",CutIndex+1,CutIndex+1); - MassSignMProj[0] = MassSignM[0]->ProjectionY("MassSignProM0",CutIndex+1,CutIndex+1); - MassSignMProj[1] = MassSignM[1]->ProjectionY("MassSignProM1",CutIndex+1,CutIndex+1); - MassSignMProj[2] = MassSignM[2]->ProjectionY("MassSignProM2",CutIndex+1,CutIndex+1); - MassSignMProj[3] = MassSignM[3]->ProjectionY("MassSignProM3",CutIndex+1,CutIndex+1); - MassSignTProj[0] = MassSignT[0]->ProjectionY("MassSignProT0",CutIndex+1,CutIndex+1); - MassSignTProj[1] = MassSignT[1]->ProjectionY("MassSignProT1",CutIndex+1,CutIndex+1); - MassSignTProj[2] = MassSignT[2]->ProjectionY("MassSignProT2",CutIndex+1,CutIndex+1); - MassSignTProj[3] = MassSignT[3]->ProjectionY("MassSignProT3",CutIndex+1,CutIndex+1); - - - double NData = MassDataProj->Integral(MassDataProj->GetXaxis()->FindBin(MinRange), MassDataProj->GetXaxis()->FindBin(MaxRange)); - double NPred = MassPredProj->Integral(MassPredProj->GetXaxis()->FindBin(MinRange), MassPredProj->GetXaxis()->FindBin(MaxRange)); - double NPredErr = pow(NPred*RescaleError,2); - for(int i=MassPredProj->GetXaxis()->FindBin(MinRange); i<=MassPredProj->GetXaxis()->FindBin(MaxRange) ;i++){NPredErr+=pow(MassPredProj->GetBinError(i),2);}NPredErr=sqrt(NPredErr); - - if(isnan(NPred))continue; - if(NPred<=0){continue;} //Is <=0 only when prediction failed or is not meaningful (i.e. WP=(0,0,0) ) -// if(NPred<1E-4){continue;} //This will never be the selection which gives the best expected limit (cutting too much on signal) --> Slowdown computation for nothing... - if(NPred>1000){continue;} //When NPred is too big, expected limits just take an infinite time! - - double Eff = 0; - double EffP = 0; - double EffI = 0; - double EffM = 0; - double EffT = 0; - if(RatioValue[0]<0 && RatioValue[1]<0 && RatioValue[2]<0){ - CurrentSampleIndex = JobIdToIndex(signal); if(CurrentSampleIndex<0){ printf("There is no signal corresponding to the JobId Given\n"); return toReturn; } - double INTERN_ESign = MassSignProj[0]->Integral(MassSignProj[0] ->GetXaxis()->FindBin(MinRange), MassSignProj[0] ->GetXaxis()->FindBin(MaxRange))/signalsMeanHSCPPerEvent [0]; - double INTERN_Eff = INTERN_ESign / (signals[CurrentSampleIndex].XSec*IntegratedLuminosity); - Eff = INTERN_Eff; - //fprintf(pFile ,"%10s: INTERN_ESign=%6.2E INTERN_Eff=%6.E XSec=%6.2E Lumi=%6.2E\n",signal.c_str(),INTERN_ESign,INTERN_Eff,signals[CurrentSampleIndex].XSec, IntegratedLuminosity);fflush(stdout); - - double INTERN_ESignP = MassSignPProj[0]->Integral(MassSignPProj[0] ->GetXaxis()->FindBin(MinRange), MassSignPProj[0] ->GetXaxis()->FindBin(MaxRange))/signalsMeanHSCPPerEvent [0]; - double INTERN_EffP = INTERN_ESignP / (signals[CurrentSampleIndex].XSec*IntegratedLuminosity); - EffP = INTERN_EffP; - - double INTERN_ESignI = MassSignIProj[0]->Integral(MassSignIProj[0] ->GetXaxis()->FindBin(MinRange), MassSignIProj[0] ->GetXaxis()->FindBin(MaxRange))/signalsMeanHSCPPerEvent [0]; - double INTERN_EffI = INTERN_ESignI / (signals[CurrentSampleIndex].XSec*IntegratedLuminosity); - EffI = INTERN_EffI; - - double INTERN_ESignM = MassSignMProj[0]->Integral(MassSignMProj[0] ->GetXaxis()->FindBin(MinRange), MassSignMProj[0] ->GetXaxis()->FindBin(MaxRange))/signalsMeanHSCPPerEvent [0]; - double INTERN_EffM = INTERN_ESignM / (signals[CurrentSampleIndex].XSec*IntegratedLuminosity); - EffM = INTERN_EffM; - - double INTERN_ESignT = MassSignTProj[0]->Integral(MassSignTProj[0] ->GetXaxis()->FindBin(MinRange), MassSignTProj[0] ->GetXaxis()->FindBin(MaxRange))/signalsMeanHSCPPerEvent [0]; - double INTERN_EffT = INTERN_ESignT / (signals[CurrentSampleIndex].XSec*IntegratedLuminosity); - EffT = INTERN_EffT; - }else{ - for(unsigned int i=0;i<3;i++){ - CurrentSampleIndex = JobIdToIndex(signal); if(CurrentSampleIndex<0){ printf("There is no signal corresponding to the JobId Given\n"); return toReturn; } - double INTERN_ESign = MassSignProj[i+1]->Integral(MassSignProj[i+1] ->GetXaxis()->FindBin(MinRange), MassSignProj[i+1] ->GetXaxis()->FindBin(MaxRange))/signalsMeanHSCPPerEvent [1+i]; - double INTERN_Eff = INTERN_ESign / (signals[CurrentSampleIndex].XSec*IntegratedLuminosity); - Eff += INTERN_Eff * RatioValue[i]; - - double INTERN_ESignP = MassSignPProj[i+1]->Integral(MassSignPProj[i+1] ->GetXaxis()->FindBin(MinRange), MassSignPProj[i+1] ->GetXaxis()->FindBin(MaxRange))/signalsMeanHSCPPerEvent [1+i]; - double INTERN_EffP = INTERN_ESignP / (signals[CurrentSampleIndex].XSec*IntegratedLuminosity); - EffP += INTERN_EffP * RatioValue[i]; - - double INTERN_ESignI = MassSignIProj[i+1]->Integral(MassSignIProj[i+1] ->GetXaxis()->FindBin(MinRange), MassSignIProj[i+1] ->GetXaxis()->FindBin(MaxRange))/signalsMeanHSCPPerEvent [1+i]; - double INTERN_EffI = INTERN_ESignI / (signals[CurrentSampleIndex].XSec*IntegratedLuminosity); - EffI += INTERN_EffI * RatioValue[i]; - - double INTERN_ESignM = MassSignMProj[i+1]->Integral(MassSignMProj[i+1] ->GetXaxis()->FindBin(MinRange), MassSignMProj[i+1] ->GetXaxis()->FindBin(MaxRange))/signalsMeanHSCPPerEvent [1+i]; - double INTERN_EffM = INTERN_ESignM / (signals[CurrentSampleIndex].XSec*IntegratedLuminosity); - EffM += INTERN_EffM * RatioValue[i]; - - double INTERN_ESignT = MassSignTProj[i+1]->Integral(MassSignTProj[i+1] ->GetXaxis()->FindBin(MinRange), MassSignTProj[i+1] ->GetXaxis()->FindBin(MaxRange))/signalsMeanHSCPPerEvent [1+i]; - double INTERN_EffT = INTERN_ESignT / (signals[CurrentSampleIndex].XSec*IntegratedLuminosity); - EffT += INTERN_EffT * RatioValue[i]; - } - } - if(Eff==0)continue; - NPred*=RescaleFactor; - - - - //fprintf(pFile ,"CutIndex=%4i ManHSCPPerEvents = %6.2f %6.2f %6.2f %6.2f NTracks = %6.3f %6.3f %6.3f %6.3f\n",CutIndex,signalsMeanHSCPPerEvent[0], signalsMeanHSCPPerEvent[1],signalsMeanHSCPPerEvent[2],signalsMeanHSCPPerEvent[3], MassSignProj[0]->Integral(), MassSignProj[1]->Integral(), MassSignProj[2]->Integral(), MassSignProj[3]->Integral()); - - fprintf(pFile ,"%10s: Testing CutIndex=%4i (Pt>%6.2f I>%6.3f TOF>%6.3f) %3.0fGetBinContent(CutIndex+1), HCuts_I ->GetBinContent(CutIndex+1), HCuts_TOF->GetBinContent(CutIndex+1), MinRange,NData,NPred, NPredErr,Eff);fflush(stdout); - fprintf(stdout ,"%10s: Testing CutIndex=%4i (Pt>%6.2f I>%6.3f TOF>%6.3f) %3.0fGetBinContent(CutIndex+1), HCuts_I ->GetBinContent(CutIndex+1), HCuts_TOF->GetBinContent(CutIndex+1), MinRange,NData,NPred, NPredErr,Eff);fflush(stdout); - - if(Eff/sqrt(max(0.1, NPred))>MaxSOverB) {MaxSOverB=Eff/sqrt(max(0.1, NPred)); MaxSOverBIndex=CutIndex;} - - toReturn.MassMean = Mean; - toReturn.MassSigma = Width; - toReturn.MassCut = MinRange; - toReturn.Index = CutIndex; - toReturn.WP_Pt = HCuts_Pt ->GetBinContent(CutIndex+1); - toReturn.WP_I = HCuts_I ->GetBinContent(CutIndex+1); - toReturn.WP_TOF = HCuts_TOF->GetBinContent(CutIndex+1); - toReturn.XSec_Th = signals[JobIdToIndex(signal)].XSec; - toReturn.XSec_Err = signals[JobIdToIndex(signal)].XSec * 0.15; - toReturn.Eff = Eff; - toReturn.Eff_SYSTP = EffP; - toReturn.Eff_SYSTI = EffI; - toReturn.Eff_SYSTM = EffM; - toReturn.Eff_SYSTT = EffT; - toReturn.NData = NData; - toReturn.NPred = NPred; - toReturn.NPredErr = NPredErr; - toReturn.NSign = Eff*(signals[CurrentSampleIndex].XSec*IntegratedLuminosity); - - CutInfo[CutIndex]=toReturn; - } - - fclose(pFile); - - //Find reach for point with best S Over sqrt(B) first. - double NPredSB=CutInfo[MaxSOverBIndex].NPred; - double NPredErrSB=CutInfo[MaxSOverBIndex].NPredErr; - double EffSB=CutInfo[MaxSOverBIndex].Eff; - - double FiveSigma=1E50; - for (int n_obs=5; n_obs<1000; n_obs++) { - if(nSigma(NPredSB, n_obs, NPredErrSB/NPredSB)>=5) { - FiveSigma=n_obs; - break; - } - } - - double MinReach=(FiveSigma-NPredSB)/(EffSB*IntegratedLuminosity); - toReturn=CutInfo[MaxSOverBIndex]; // In case this point does give the best reach avoids rounding errors - - for(int CutIndex=0;CutIndexGetNbinsX();CutIndex++){ - double NPred=CutInfo[CutIndex].NPred; - double NPredErr=CutInfo[CutIndex].NPredErr; - double Eff=CutInfo[CutIndex].Eff; - if(Eff==0) continue; //Eliminate points where prediction could not be made - double FiveSigma=1E50; - for (int n_obs=5; n_obs<1000; n_obs++) { - if(n_obs<(NPred+3*sqrt(NPred))) continue; //5 sigma implies more than 5 times sqrt(B) excess so can cut these points, put it at 3 to be safe - double thisReach=(n_obs-NPred)/(Eff*IntegratedLuminosity); - if(thisReach>=MinReach) break; // This selection point will not give the optimum reach so move on - if(nSigma(NPred, n_obs, NPredErr/NPred)>=5) { - FiveSigma=n_obs; - break; - } - } - - double Reach=(FiveSigma-NPred)/(Eff*IntegratedLuminosity); - if(Reach>MinReach) continue; - MinReach=Reach; - toReturn=CutInfo[CutIndex]; - } - - LimitResult CLMResults; - double signalUncertainty=0.10; - if (signals[JobIdToIndex(signal)].Mass<450) signalUncertainty=0.15; - double NPred=toReturn.NPred; - double NPredErr=toReturn.NPredErr; - double Eff=toReturn.Eff; - double NData=toReturn.NData; - - CLMResults = roostats_limit(IntegratedLuminosity, IntegratedLuminosity*0.06, Eff, Eff*signalUncertainty,NPred, NPredErr, NData, false, 1, "cls", "", 12345); - - double ExpLimit=CLMResults.GetExpectedLimit(); - double ExpLimitup = CLMResults.GetOneSigmaHighRange(); - double ExpLimitdown = CLMResults.GetOneSigmaLowRange(); - double ExpLimit2up = CLMResults.GetTwoSigmaHighRange(); - double ExpLimit2down = CLMResults.GetTwoSigmaLowRange(); - double ObsLimit = CLMResults.GetObservedLimit(); - - toReturn.XSec_Exp = CLMResults.GetExpectedLimit(); - toReturn.XSec_ExpUp = CLMResults.GetOneSigmaHighRange(); - toReturn.XSec_ExpDown = CLMResults.GetOneSigmaLowRange(); - toReturn.XSec_Exp2Up = CLMResults.GetTwoSigmaHighRange(); - toReturn.XSec_Exp2Down = CLMResults.GetTwoSigmaLowRange(); - toReturn.XSec_Obs = CLMResults.GetObservedLimit(); - toReturn.Significance = nSigma(NPred, NData, NPredErr/NPred); - - FILE* pFile2 = fopen((outpath+"/"+modelName+".txt").c_str(),"w"); - if(!pFile2)printf("Can't open file : %s\n",(outpath+"/"+modelName+".txt").c_str()); - fprintf(pFile2,"Mass : %f\n",signals[JobIdToIndex(signal)].Mass); - fprintf(pFile2,"MassMean : %f\n",toReturn.MassMean); - fprintf(pFile2,"MassSigma : %f\n",toReturn.MassSigma); - fprintf(pFile2,"MassCut : %f\n",toReturn.MassCut); - fprintf(pFile2,"Index : %f\n",toReturn.Index); - fprintf(pFile2,"WP_Pt : %f\n",toReturn.WP_Pt); - fprintf(pFile2,"WP_I : %f\n",toReturn.WP_I); - fprintf(pFile2,"WP_TOF : %f\n",toReturn.WP_TOF); - fprintf(pFile2,"Eff : %f\n",toReturn.Eff); - fprintf(pFile2,"Eff_SystP : %f\n",toReturn.Eff_SYSTP); - fprintf(pFile2,"Eff_SystI : %f\n",toReturn.Eff_SYSTI); - fprintf(pFile2,"Eff_SystM : %f\n",toReturn.Eff_SYSTM); - fprintf(pFile2,"Eff_SystT : %f\n",toReturn.Eff_SYSTT); - fprintf(pFile2,"Signif : %f\n",toReturn.Significance); - fprintf(pFile2,"XSec_Th : %f\n",toReturn.XSec_Th); - fprintf(pFile2,"XSec_Exp : %f\n",toReturn.XSec_Exp); - fprintf(pFile2,"XSec_ExpUp : %f\n",toReturn.XSec_ExpUp); - fprintf(pFile2,"XSec_ExpDown : %f\n",toReturn.XSec_ExpDown); - fprintf(pFile2,"XSec_Exp2Up : %f\n",toReturn.XSec_Exp2Up); - fprintf(pFile2,"XSec_Exp2Down: %f\n",toReturn.XSec_Exp2Down); - fprintf(pFile2,"XSec_Obs : %f\n",toReturn.XSec_Obs); - fprintf(pFile2,"NData : %+6.2E\n",toReturn.NData); - fprintf(pFile2,"NPred : %+6.2E\n",toReturn.NPred); - fprintf(pFile2,"NPredErr : %+6.2E\n",toReturn.NPredErr); - fprintf(pFile2,"NSign : %+6.2E\n",toReturn.NSign); - - fclose(pFile2); - - return toReturn; -} - - - - - - -int JobIdToIndex(string JobId){ - for(unsigned int s=0;sProjectionY("NTracksPassingSelection",CutIndex+1,CutIndex+1); - TH1D* NEventsPassingSelection = MaxEventMass->ProjectionY("NEventsPassingSelection",CutIndex+1,CutIndex+1); - - TH2D* Mass_NC0 = (TH2D*)GetObjectFromPath(InputFile, signals[CurrentSampleIndex].Name + "_NC0/Mass"); - TH2D* MaxEventMass_NC0 = (TH2D*)GetObjectFromPath(InputFile, signals[CurrentSampleIndex].Name + "_NC0/MaxEventMass"); - TH1D* NTracksPassingSelection_NC0 = Mass_NC0->ProjectionY("NTracksPassingSelection_NC0",CutIndex+1,CutIndex+1); - TH1D* NEventsPassingSelection_NC0 = MaxEventMass_NC0->ProjectionY("NEventsPassingSelection_NC0",CutIndex+1,CutIndex+1); - - TH2D* Mass_NC1 = (TH2D*)GetObjectFromPath(InputFile, signals[CurrentSampleIndex].Name + "_NC1/Mass"); - TH2D* MaxEventMass_NC1 = (TH2D*)GetObjectFromPath(InputFile, signals[CurrentSampleIndex].Name + "_NC1/MaxEventMass"); - TH1D* NTracksPassingSelection_NC1 = Mass_NC1->ProjectionY("NTracksPassingSelection_NC1",CutIndex+1,CutIndex+1); - TH1D* NEventsPassingSelection_NC1 = MaxEventMass_NC1->ProjectionY("NEventsPassingSelection_NC1",CutIndex+1,CutIndex+1); - - TH2D* Mass_NC2 = (TH2D*)GetObjectFromPath(InputFile, signals[CurrentSampleIndex].Name + "_NC2/Mass"); - TH2D* MaxEventMass_NC2 = (TH2D*)GetObjectFromPath(InputFile, signals[CurrentSampleIndex].Name + "_NC2/MaxEventMass"); - TH1D* NTracksPassingSelection_NC2 = Mass_NC2->ProjectionY("NTracksPassingSelection_NC2",CutIndex+1,CutIndex+1); - TH1D* NEventsPassingSelection_NC2 = MaxEventMass_NC2->ProjectionY("NEventsPassingSelection_NC2",CutIndex+1,CutIndex+1); - - double NTracks = NTracksPassingSelection->Integral(NTracksPassingSelection->GetXaxis()->FindBin(MinRange), NTracksPassingSelection->GetXaxis()->FindBin(MaxRange)); - double NEvents = NEventsPassingSelection->Integral(NEventsPassingSelection->GetXaxis()->FindBin(MinRange), NEventsPassingSelection->GetXaxis()->FindBin(MaxRange)); - double NTracks_NC0 = NTracksPassingSelection_NC0->Integral(NTracksPassingSelection_NC0->GetXaxis()->FindBin(MinRange), NTracksPassingSelection_NC0->GetXaxis()->FindBin(MaxRange)); - double NEvents_NC0 = NEventsPassingSelection_NC0->Integral(NEventsPassingSelection_NC0->GetXaxis()->FindBin(MinRange), NEventsPassingSelection_NC0->GetXaxis()->FindBin(MaxRange)); - - double NTracks_NC1 = NTracksPassingSelection_NC1->Integral(NTracksPassingSelection_NC1->GetXaxis()->FindBin(MinRange), NTracksPassingSelection_NC1->GetXaxis()->FindBin(MaxRange)); - double NEvents_NC1 = NEventsPassingSelection_NC1->Integral(NEventsPassingSelection_NC1->GetXaxis()->FindBin(MinRange), NEventsPassingSelection_NC1->GetXaxis()->FindBin(MaxRange)); - - double NTracks_NC2 = NTracksPassingSelection_NC2->Integral(NTracksPassingSelection_NC2->GetXaxis()->FindBin(MinRange), NTracksPassingSelection_NC2->GetXaxis()->FindBin(MaxRange)); - double NEvents_NC2 = NEventsPassingSelection_NC2->Integral(NEventsPassingSelection_NC2->GetXaxis()->FindBin(MinRange), NEventsPassingSelection_NC2->GetXaxis()->FindBin(MaxRange)); - - signalsMeanHSCPPerEvent[0] = (float)std::max(1.0,NTracks/ NEvents); - signalsMeanHSCPPerEvent[1] = (float)std::max(1.0,NTracks_NC0/ NEvents_NC0); - signalsMeanHSCPPerEvent[2] = (float)std::max(1.0,NTracks_NC1/ NEvents_NC1); - signalsMeanHSCPPerEvent[3] = (float)std::max(1.0,NTracks_NC2/ NEvents_NC2); - - delete Mass; - delete MaxEventMass; - delete Mass_NC0; - delete MaxEventMass_NC0; - delete Mass_NC1; - delete MaxEventMass_NC1; - delete Mass_NC2; - delete MaxEventMass_NC2; - delete NTracksPassingSelection; - delete NEventsPassingSelection; - delete NTracksPassingSelection_NC0; - delete NEventsPassingSelection_NC0; - delete NTracksPassingSelection_NC1; - delete NEventsPassingSelection_NC1; - delete NTracksPassingSelection_NC2; - delete NEventsPassingSelection_NC2; - - delete InputFile; - return; -} - -double FindIntersection(TGraph* obs, TGraph* th, double Min, double Max, double Step, double ThUncertainty, bool debug){ - - double Intersection = -1; - - double ThShift = 1.0-ThUncertainty; - double PreviousX = Min; - double PreviousV = obs->Eval(PreviousX, 0, "") - (ThShift * th->Eval(PreviousX, 0, "")) ; - if(PreviousV>0)return -1; - for(double x=Min+=Step;xEval(x, 0, "") - (ThShift * th->Eval(x, 0, "") ); - if(debug){ - printf("%7.2f --> Obs=%6.2E Th=%6.2E",x,obs->Eval(x, 0, ""),ThShift * th->Eval(x, 0, "")); - if(V>=0)printf(" X\n"); - else printf("\n"); - } - if(V<0){ - PreviousX = x; - PreviousV = V; - }else{ - Intersection = PreviousX; - } - } - return Intersection; -} - - - -int ReadXSection(string InputFile, double* Mass, double* XSec, double* Low, double* High, double* ErrLow, double* ErrHigh) -{ - FILE* pFile = fopen(InputFile.c_str(),"r"); - if(!pFile){ - printf("Not Found: %s\n",InputFile.c_str()); - return -1; - } - - float tmpM, tmpX, tmpL, tmpH; - - int NPoints = 0; - while ( ! feof (pFile) ){ - fscanf(pFile,"%f %E %E %E\n",&tmpM,&tmpX,&tmpH,&tmpL); - Mass [NPoints] = tmpM; - XSec [NPoints] = tmpX; - Low [NPoints] = tmpL; - High [NPoints] = tmpH; - ErrLow [NPoints] = tmpX-tmpL; - ErrHigh[NPoints] = tmpH-tmpX; - NPoints++; - - //printf("%fGeV --> Error = %f\n", tmpM, 0.5*(tmpH-tmpL)/tmpX); - } - - fclose(pFile); - - return NPoints; -} - - -TCutG* GetErrorBand(string name, int N, double* Mass, double* Low, double* High, double MinLow, double MaxHigh) -{ - TCutG* cutg = new TCutG(name.c_str(),2*N); - cutg->SetFillColor(kGreen-7); - for(int i=0;iSetPoint( i,Mass[i], Min); - } - for(int i=0;iSetPoint(N+i,Mass[N-1-i], Max); - } - return cutg; -} - -void DrawModelLimitWithBand(string InputPattern, string inputmodel) -{ - std::vector Models; - string modelname; - if(inputmodel == "Gluinof1"){ - Models.push_back("Gluino300_f1"); - Models.push_back("Gluino400_f1"); - Models.push_back("Gluino500_f1"); - Models.push_back("Gluino600_f1"); - Models.push_back("Gluino700_f1"); - Models.push_back("Gluino800_f1"); - Models.push_back("Gluino900_f1"); - Models.push_back("Gluino1000_f1"); - modelname="gluino; 10% #tilde{g}g (NLO+NLL)"; - } - else if(inputmodel == "Gluinof5"){ - Models.push_back("Gluino300_f5"); - Models.push_back("Gluino400_f5"); - Models.push_back("Gluino500_f5"); - Models.push_back("Gluino600_f5"); - Models.push_back("Gluino700_f5"); - Models.push_back("Gluino800_f5"); - Models.push_back("Gluino900_f5"); - Models.push_back("Gluino1000_f5"); - modelname="gluino; 50% #tilde{g}g (NLO+NLL)"; - } - else if(inputmodel == "GluinoN"){ - Models.push_back("Gluino300N_f1"); - Models.push_back("Gluino400N_f1"); - Models.push_back("Gluino500N_f1"); - Models.push_back("Gluino600N_f1"); - Models.push_back("Gluino700N_f1"); - Models.push_back("Gluino800N_f1"); - Models.push_back("Gluino900N_f1"); - Models.push_back("Gluino1000N_f1"); - modelname="gluino; 10% #tilde{g}g; ch. suppr.(NLO+NLL)"; - - } - else if(inputmodel == "Stop"){ - Models.push_back("Stop130"); - Models.push_back("Stop200"); - Models.push_back("Stop300"); - Models.push_back("Stop400"); - Models.push_back("Stop500"); - Models.push_back("Stop600"); - Models.push_back("Stop700"); - Models.push_back("Stop800"); - modelname="stop (NLO+NLL)"; - } - else if(inputmodel == "StopN"){ - Models.push_back("Stop130N"); - Models.push_back("Stop200N"); - Models.push_back("Stop300N"); - Models.push_back("Stop400N"); - Models.push_back("Stop500N"); - Models.push_back("Stop600N"); - Models.push_back("Stop700N"); - Models.push_back("Stop800N"); - modelname="stop;ch. suppr. (NLO+NLL)"; - } - else if(inputmodel == "GMStau"){ - Models.push_back("GMStau100"); - Models.push_back("GMStau126"); - Models.push_back("GMStau156"); - Models.push_back("GMStau200"); - Models.push_back("GMStau247"); - Models.push_back("GMStau308"); - Models.push_back("GMStau370"); - Models.push_back("GMStau432"); - Models.push_back("GMStau494"); - modelname="GMSB stau (NLO)"; - } - else if(inputmodel == "PPStau"){ - Models.push_back("PPStau100"); - Models.push_back("PPStau126"); - Models.push_back("PPStau156"); - Models.push_back("PPStau200"); - Models.push_back("PPStau247"); - Models.push_back("PPStau308"); - modelname="Pair Prod. stau (NLO)"; - } - else if(inputmodel == "DCRho08"){ - Models.push_back("DCRho08HyperK100"); - Models.push_back("DCRho08HyperK121"); - Models.push_back("DCRho08HyperK182"); - Models.push_back("DCRho08HyperK242"); - Models.push_back("DCRho08HyperK302"); - Models.push_back("DCRho08HyperK350"); - Models.push_back("DCRho08HyperK370"); - Models.push_back("DCRho08HyperK390"); - Models.push_back("DCRho08HyperK395"); - Models.push_back("DCRho08HyperK400"); - Models.push_back("DCRho08HyperK410"); - Models.push_back("DCRho08HyperK420"); - Models.push_back("DCRho08HyperK500"); - modelname="Hyperk #tilde{#rho} = 0.8 TeV (LO)"; - } - else if(inputmodel == "DCRho12"){ - Models.push_back("DCRho12HyperK100"); - Models.push_back("DCRho12HyperK182"); - Models.push_back("DCRho12HyperK302"); - Models.push_back("DCRho12HyperK500"); - Models.push_back("DCRho12HyperK530"); - Models.push_back("DCRho12HyperK570"); - Models.push_back("DCRho12HyperK590"); - Models.push_back("DCRho12HyperK595"); - Models.push_back("DCRho12HyperK600"); - Models.push_back("DCRho12HyperK610"); - Models.push_back("DCRho12HyperK620"); - Models.push_back("DCRho12HyperK700"); - modelname="Hyperk #tilde{#rho} = 1.2 TeV (LO)"; - } - else if(inputmodel == "DCRho16"){ - Models.push_back("DCRho16HyperK100"); - Models.push_back("DCRho16HyperK182"); - Models.push_back("DCRho16HyperK302"); - Models.push_back("DCRho16HyperK500"); - Models.push_back("DCRho16HyperK700"); - Models.push_back("DCRho16HyperK730"); - Models.push_back("DCRho16HyperK770"); - Models.push_back("DCRho16HyperK790"); - Models.push_back("DCRho16HyperK795"); - Models.push_back("DCRho16HyperK800"); - Models.push_back("DCRho16HyperK820"); - Models.push_back("DCRho16HyperK900"); - modelname="Hyperk #tilde{#rho} = 1.6 TeV (LO)"; - } - else{cout<<"no model specified"<SetLineStyle(3); - graphtheory->SetFillColor(kBlue); - graphexp->SetLineStyle(4); - graphexp->SetLineColor(kRed); - graphexp->SetMarkerStyle(); - graphexp->SetMarkerSize(0.); - Exp2SigmaErr->SetFillColor(kYellow); - Exp2SigmaErr->SetLineColor(kWhite); - ExpErr->SetFillColor(kGreen); - ExpErr->SetLineColor(kWhite); - graphobs->SetLineColor(kBlack); - graphobs->SetLineWidth(2); - graphobs->SetMarkerColor(kBlack); - graphobs->SetMarkerStyle(23); - - TCanvas* c1 = new TCanvas("c1", "c1",600,600); - TMultiGraph* MG = new TMultiGraph(); - - MG->Add(graphexp ,"LP"); - MG->Add(graphobs ,"LP"); - MG->Add(graphtheory ,"L"); - MG->Draw("A"); - Exp2SigmaErr->Draw("f"); - ExpErr ->Draw("f"); - MG->Draw("same"); - MG->SetTitle(""); - MG->GetXaxis()->SetTitle("Mass (GeV/c^{2})"); - MG->GetYaxis()->SetTitle("#sigma (pb)"); - MG->GetYaxis()->SetTitleOffset(1.70); - MG->GetYaxis()->SetRangeUser(PlotMinScale,PlotMaxScale); - DrawPreliminary(IntegratedLuminosity); - - TLegend* LEG = new TLegend(0.40,0.65,0.8,0.90); - string headerstr; - headerstr = "95% C.L. Limits (Tk + TOF)"; - if(IsTkOnly) headerstr = "95% C.L. Limits (Tracker - Only)"; - LEG->SetHeader(headerstr.c_str()); - LEG->SetFillColor(0); - LEG->SetBorderSize(0); - LEG->AddEntry(graphtheory, modelname.c_str() ,"L"); - LEG->AddEntry(graphexp, "Expected" ,"L"); - LEG->AddEntry(ExpErr, "Expected #pm 1#sigma","F"); - LEG->AddEntry(Exp2SigmaErr, "Expected #pm 2#sigma " ,"F"); - LEG->AddEntry(graphobs, "Observed" ,"LP"); - LEG->Draw(); - - c1->SetLogy(true); - - - if(IsTkOnly) SaveCanvas(c1,"Results/EXCLUSION/", string("Tk"+ inputmodel + "ExclusionLog")); - else SaveCanvas(c1,"Results/EXCLUSION/", string("Mu"+ inputmodel + "ExclusionLog")); - delete c1; - - -} -std::vector GetModels(string inputmodel) -{ - std::vector Models; - string modelname; - if(inputmodel == "Gluinof1"){ - Models.push_back("Gluino300_f1"); - Models.push_back("Gluino400_f1"); - Models.push_back("Gluino500_f1"); - Models.push_back("Gluino600_f1"); - Models.push_back("Gluino700_f1"); - Models.push_back("Gluino800_f1"); - Models.push_back("Gluino900_f1"); - Models.push_back("Gluino1000_f1"); -// Models.push_back("Gluino1100_f1"); - modelname="gluino; 10% #tilde{g}g (NLO+NLL)"; - } - else if(inputmodel == "Gluinof5"){ - Models.push_back("Gluino300_f5"); - Models.push_back("Gluino400_f5"); - Models.push_back("Gluino500_f5"); - Models.push_back("Gluino600_f5"); - Models.push_back("Gluino700_f5"); - Models.push_back("Gluino800_f5"); - Models.push_back("Gluino900_f5"); - Models.push_back("Gluino1000_f5"); -// Models.push_back("Gluino1100_f5"); - modelname="gluino; 50% #tilde{g}g (NLO+NLL)"; - } - else if(inputmodel == "GluinoN"){ - Models.push_back("Gluino300N_f1"); - Models.push_back("Gluino400N_f1"); - Models.push_back("Gluino500N_f1"); - Models.push_back("Gluino600N_f1"); - Models.push_back("Gluino700N_f1"); - Models.push_back("Gluino800N_f1"); - Models.push_back("Gluino900N_f1"); - Models.push_back("Gluino1000N_f1"); -// Models.push_back("Gluino1100N_f1"); - modelname="gluino; 10% #tilde{g}g; ch. suppr.(NLO+NLL)"; - } - else if(inputmodel == "Stop"){ - Models.push_back("Stop130"); - Models.push_back("Stop200"); - Models.push_back("Stop300"); - Models.push_back("Stop400"); - Models.push_back("Stop500"); - Models.push_back("Stop600"); - Models.push_back("Stop700"); - Models.push_back("Stop800"); - modelname="stop (NLO+NLL)"; - } - else if(inputmodel == "StopN"){ - Models.push_back("Stop130N"); - Models.push_back("Stop200N"); - Models.push_back("Stop300N"); - Models.push_back("Stop400N"); - Models.push_back("Stop500N"); - Models.push_back("Stop600N"); - Models.push_back("Stop700N"); - Models.push_back("Stop800N"); - modelname="stop;ch. suppr. (NLO+NLL)"; - } - else if(inputmodel == "GMStau"){ - Models.push_back("GMStau100"); - Models.push_back("GMStau126"); - Models.push_back("GMStau156"); - Models.push_back("GMStau200"); - Models.push_back("GMStau247"); - Models.push_back("GMStau308"); - Models.push_back("GMStau370"); - Models.push_back("GMStau432"); - Models.push_back("GMStau494"); - modelname="GMSB stau (NLO)"; - } - else if(inputmodel == "PPStau"){ - Models.push_back("PPStau100"); - Models.push_back("PPStau126"); - Models.push_back("PPStau156"); - Models.push_back("PPStau200"); - Models.push_back("PPStau247"); - Models.push_back("PPStau308"); - modelname="Pair Prod. stau (NLO)"; - } - else if(inputmodel == "DCRho08"){ - Models.push_back("DCRho08HyperK100"); - Models.push_back("DCRho08HyperK121"); - Models.push_back("DCRho08HyperK182"); - Models.push_back("DCRho08HyperK242"); - Models.push_back("DCRho08HyperK302"); - Models.push_back("DCRho08HyperK350"); - Models.push_back("DCRho08HyperK370"); - Models.push_back("DCRho08HyperK390"); - Models.push_back("DCRho08HyperK395"); - Models.push_back("DCRho08HyperK400"); - Models.push_back("DCRho08HyperK410"); - Models.push_back("DCRho08HyperK420"); - Models.push_back("DCRho08HyperK500"); - modelname="Hyperk #tilde{#rho} = 0.8 TeV (LO)"; - } - else if(inputmodel == "DCRho12"){ - Models.push_back("DCRho12HyperK100"); - Models.push_back("DCRho12HyperK182"); - Models.push_back("DCRho12HyperK302"); - Models.push_back("DCRho12HyperK500"); - Models.push_back("DCRho12HyperK530"); - Models.push_back("DCRho12HyperK570"); - Models.push_back("DCRho12HyperK590"); - Models.push_back("DCRho12HyperK595"); - Models.push_back("DCRho12HyperK600"); - Models.push_back("DCRho12HyperK610"); - Models.push_back("DCRho12HyperK620"); - Models.push_back("DCRho12HyperK700"); - modelname="Hyperk #tilde{#rho} = 1.2 TeV (LO)"; - } - else if(inputmodel == "DCRho16"){ - Models.push_back("DCRho16HyperK100"); - Models.push_back("DCRho16HyperK182"); - Models.push_back("DCRho16HyperK302"); - Models.push_back("DCRho16HyperK500"); - Models.push_back("DCRho16HyperK700"); - Models.push_back("DCRho16HyperK730"); - Models.push_back("DCRho16HyperK770"); - Models.push_back("DCRho16HyperK790"); - Models.push_back("DCRho16HyperK795"); - Models.push_back("DCRho16HyperK800"); - Models.push_back("DCRho16HyperK820"); - Models.push_back("DCRho16HyperK900"); - modelname="Hyperk #tilde{#rho} = 1.6 TeV (LO)"; - } - else{cout<<"no model specified"< TModels; - if(inputmodel == "Gluino"){ - TModels.push_back("Gluinof1"); - TModels.push_back("Gluinof5"); - if(IsTkOnly) TModels.push_back("GluinoN"); - } - - else if(inputmodel == "Stop"){ - TModels.push_back("Stop"); - if(IsTkOnly) TModels.push_back("StopN"); - } - - else if(inputmodel == "Stau"){ - TModels.push_back("GMStau"); - TModels.push_back("PPStau"); - } - else if(inputmodel == "Hyperk"){ - TModels.push_back("DCRho08"); - TModels.push_back("DCRho12"); - TModels.push_back("DCRho16"); - } - else if(inputmodel == "All"){ - TModels.push_back("Gluinof1"); - TModels.push_back("Gluinof5"); - if(IsTkOnly) TModels.push_back("GluinoN"); - TModels.push_back("Stop"); - if(IsTkOnly) TModels.push_back("StopN"); - TModels.push_back("GMStau"); - TModels.push_back("PPStau"); - TModels.push_back("DCRho08"); - TModels.push_back("DCRho12"); - TModels.push_back("DCRho16"); - } - - - else { - cout<<"no model specified"<SetBottomMargin(0.); - pad->SetLeftMargin(0.1); - pad->SetRightMargin(0.); - pad->SetTopMargin(0.); - padA[k] = pad; - padA[k]->Draw(); - } - - for(int k=0;k Models = GetModels(TModels[k]); - ModelNames[k]=GetModelName(TModels[k]); - - TMultiGraph* MG = new TMultiGraph(); - unsigned int N = Models.size(); - stAllInfo Infos;double Mass[N], XSecTh[N], XSecExp[N],XSecObs[N], XSecExpUp[N],XSecExpDown[N],XSecExp2Up[N],XSecExp2Down[N]; - for(int i=0;iSetLineStyle(3); - graphAexp[k]->SetLineStyle(4); - graphAexp[k]->SetLineColor(kRed); - graphAexp[k]->SetMarkerStyle(); - graphAexp[k]->SetMarkerSize(0.); - Exp2SigmaAErr[k]->SetFillColor(kYellow); - Exp2SigmaAErr[k]->SetLineColor(kWhite); - ExpAErr[k]->SetFillColor(kGreen); - ExpAErr[k]->SetLineColor(kWhite); - graphAobs[k]->SetLineColor(kBlack); - graphAobs[k]->SetLineWidth(2); - graphAobs[k]->SetMarkerColor(kBlack); - graphAobs[k]->SetMarkerStyle(23); - - - padA[k]->cd(); - - int masst[2] = {50,1050}; - int xsect[2] = {2, 1}; - TGraph* graph = new TGraph(2,masst,xsect); //fake graph to set xaxis right - graph->SetMarkerSize(0.); - MG->Add(graph ,"P"); - MG->Add(graphAobs[k] ,"LP"); - MG->Draw("A"); - if(k==0){ - TLegend* LEG = new TLegend(0.11,0.01,0.7,0.99); - string headerstr; - headerstr = " Tk + TOF"; - if(IsTkOnly) headerstr = " Tracker - Only"; - LEG->SetHeader(headerstr.c_str()); - LEG->SetFillColor(0); - LEG->SetBorderSize(0); - LEG->AddEntry(ExpAErr[0], "Expected #pm 1#sigma","F"); - LEG->AddEntry(Exp2SigmaAErr[0], "Expected #pm 2#sigma " ,"F"); - LEG->AddEntry(graphAobs[0],"Observed" ,"LP"); - LEG->SetMargin(0.1); - LEG->Draw(); - } - - Exp2SigmaAErr[k]->Draw("f"); - ExpAErr[k] ->Draw("f"); - MG->Draw("same"); - MG->SetTitle(""); - if(k==TModels.size()-1) { - MG->GetXaxis()->SetTitle("Mass (GeV/c^{2})"); - MG->GetXaxis()->SetTitleSize(0.4); - MG->GetXaxis()->SetLabelSize(0.4); - } - - TPaveText *pt; - if(IsTkOnly) pt = new TPaveText(0.45, 0.6, 0.95, 0.87,"LBNDC"); - else pt = new TPaveText(0.65, 0.7, 0.95, 0.85,"LBNDC"); - pt->SetBorderSize(0); - pt->SetLineWidth(0); - pt->SetFillColor(kWhite); - TText *text = pt->AddText(ModelNames[k].c_str()); - text ->SetTextAlign(11); - text ->SetTextSize(0.3); - if(IsTkOnly) text ->SetTextSize(0.35); - pt->Draw(); - - MG->GetXaxis()->SetRangeUser(50,1050); - MG->GetXaxis()->SetNdivisions(506,"Z"); - - MG->GetYaxis()->SetRangeUser(0.5,2.5); - MG->GetYaxis()->SetNdivisions(202,"Z"); - MG->GetYaxis()->SetLabelSize(0.2); - - - } - c1->cd(); - DrawPreliminary(IntegratedLuminosity); - - TPaveText *pt = new TPaveText(0.1, 0.01, 0.15, 0.85,"NDC"); - string tmp = "95% C.L. Limits (Relative to Expected Limit)"; - TText *text = pt->AddText(tmp.c_str()); - text ->SetTextAlign(11); - text ->SetTextAngle(90); - text ->SetTextSize(0.025); - pt->SetBorderSize(0); - pt->SetFillColor(0); - pt->Draw(); - - - - if(IsTkOnly) SaveCanvas(c1,"Results/EXCLUSION/", string("Tk"+ inputmodel + "LimitsRatio")); - else SaveCanvas(c1,"Results/EXCLUSION/", string("Mu"+ inputmodel + "LimitsRatio")); - - delete c1; - - -} - - - diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_Step6.sh b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_Step6.sh deleted file mode 100644 index aa92c2259cd74..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Analysis_Step6.sh +++ /dev/null @@ -1,8 +0,0 @@ -root -l -b << EOF - .x Analysis_Step6.C++("Final", "", "", "", -1, -1, -1, ""); -// .x Analysis_Step6.C+ ("Final", "", "", "", -1, -1, -1, "_SystP"); -// .x Analysis_Step6.C+ ("Final", "", "", "", -1, -1, -1, "_SystI"); -// .x Analysis_Step6.C+ ("Final", "", "", "", -1, -1, -1, "_SystM"); -// .x Analysis_Step6.C+ ("Final", "", "", "", -1, -1, -1, "_SystT"); -EOF - diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/CL95.h b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/CL95.h deleted file mode 100644 index 572c422b93f3d..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/CL95.h +++ /dev/null @@ -1,437 +0,0 @@ -/* -------------------------------------------------------------------------------- - Bayesian 95% CL limit and expected (average) 95% CL limit calculator for Poisson statistics - - The code shoudl be run from root in the compiled mode: - -.L cl95cms.c++ - - Usage: sigma95 = CL95(ilum, slum, eff, seff, bck, sbck, n, gauss = false, bckmodel = 0) - sigma95A = CLA(ilum, slum, eff, seff, bck, sbck, bckmodel = 0) - - Inputs: ilum - Nominal integrated luminosity (pb^-1) - slum - Absolute error on the integrated luminosity - eff - Nominal value of the efficiency times acceptance - seff - Absolute error on the efficiency times acceptance - bck - Nominal value of the background estimate - sbck - Absolute error on the background - n - Number of observed events (not used for the expected limit) - gauss - if true, use Gaussian statistics; automatically false for n = 0. Always false for expected limit calculations - bckmodel - distribution function used in integration over nuisance parameters: - 0 - Gaussian, 1 - lognormal, 2 - gamma; automatically 0 for gauss == true - - Written by Greg Landsberg; v1.0 February 27, 2003 - Modified by Greg Landsberg; v1.1 March 18, 2003 - some bugs fixed; - automatic graph scaling - Modified by Greg Landsberg; v1.2 May 15, 2003 - clean-up of the code - Modified by Greg Landsberg; v1.3 June 2, 2005 - further clean-up; - protection against numeric instability; - increased table for Poisson distribution; - Modified by Greg Landsberg; v1.3 June 2, 2010 - lognormal and Gamma nuisance - parameter integration --------------------------------------------------------------------------------- */ -#include -#include -#include "TMath.h" -#include "TF1.h" -#include "TArrow.h" -#include "TCanvas.h" - -static Double_t A0, sA, B0, sB, epsilon, MaxSig = 100.; -static Double_t MinLike = 1.e-6, Precision = 1.e-5; -static Int_t N; -static bool lGauss = kFALSE, plot = kFALSE; -static Int_t I = 0; -static Double_t sigma_a = 0., sigma_b = 0., tau_a = 0., tau_b = 0.; - -Double_t Likelihood(Double_t *x, Double_t *p); -Double_t Inner(Double_t *x, Double_t *par); -Double_t Outer(Double_t *x, Double_t *p); -Double_t Poisson(Double_t Mu, Int_t n); -Double_t CL95(Double_t ilum, Double_t slum, Double_t eff, Double_t seff, Double_t bck, Double_t sbck, Int_t n, Bool_t gauss = kFALSE, Int_t bckmodel = 0); -Double_t CLA(Double_t ilum, Double_t slum, Double_t eff, Double_t seff, Double_t bck, Double_t sbck, Int_t bckint = 0); - -Double_t CL95(Double_t ilum, Double_t slum, Double_t eff, Double_t seff, Double_t bck, Double_t sbck, Int_t n, Bool_t gauss, Int_t bckmodel) -{ - Double_t xmax = MaxSig; - Double_t x[1], p[1]; -// - A0 = ilum*eff; - sA = sqrt(ilum*seff*ilum*seff + eff*slum*eff*slum); - B0 = bck; - sB = sbck; - epsilon = TMath::Max(Precision/ilum,1.e-4); - // - lGauss = gauss; - if (n == 0) lGauss = kFALSE; - - if (!gauss) - { - if (bckmodel < 0 || bckmodel > 2) - { - //cout << "Incorrect nuissance parameter integration model. Gaussian will be used." << endl; - bckmodel = 0; - } - //if (plot) cout << "Poisson 95% CL limit with "; - I = bckmodel; - if (bckmodel == 0) - { - // if (plot) cout << "Gaussian "; - } - else if (bckmodel == 1) // Lognormal distribution is used - { - if (B0 > 0) sigma_b = TMath::Log(1. + sB/B0); - sigma_a = TMath::Log(1. + sA/A0); - // if (plot) cout << "Lognormal "; - } - else if (bckmodel == 2) // Gamma distribution is used - { - // if (plot) cout << "Gamma "; - if (sA > 0) - { - sigma_a = 1. + A0*A0/sA/sA; - tau_a = A0/sA/sA; - } - if (sB > 0) - { - sigma_b = 1. + B0*B0/sB/sB; - tau_b = B0/sB/sB; - } - } - }// else if (plot) cout << "Gaussian 95% CL limit with Gaussian "; -// if (plot) cout << "nuisance parameter integration will be used" << endl; - // - N = n; - x[0] = xmax; - p[0] = 0.; - // - Double_t delta = (Likelihood(x,p) - MinLike)/MinLike; - while (delta > 0) - { -// if (plot) cout << "delta = " << delta << endl; - - xmax = 2.*xmax; - x[0] = xmax; - delta = (Likelihood(x,p) - MinLike)/MinLike; - } - // - Double_t x1 = 0, x2 = xmax; - while (fabs(delta) > epsilon) - { - if (delta > 0) x1 = x[0]; - else x2 = x[0]; - x[0] = (x1 + x2)/2.; - delta = (Likelihood(x,p) - MinLike)/MinLike; - } - xmax = x[0]; - // - Int_t i = 0; - if (xmax > 1) - { - while (xmax > 10.) - { - xmax /= 10.; - i++; - } - xmax = (Int_t)(xmax + 1)*pow(10,i); - } - else - { - while (xmax < 1.) - { - xmax *= 10.; - i++; - } - xmax = (Int_t)(xmax + 1)*pow(10,-i); - } - // - TF1 like("Likelihood",Likelihood,0.,xmax,0); -// if (plot) cout << "Likelihood function is evaluated over [0," << xmax << "] " << endl; - // - Double_t Norm = like.Integral(0.,xmax,p,epsilon); -// if (plot) cout << "likelihood normalization: " << Norm << endl; - // - // Double_t x1, x2, delta; - x1 = 0; - x2 = xmax; - xmax = (x1 + x2)/2.; - delta = like.Integral(0,xmax,p,epsilon)/Norm - 0.95; - // - while (fabs(delta) > epsilon) - { - if (delta < 0) x1 = xmax; - else x2 = xmax; - xmax = (x1 + x2)/2.; - delta = like.Integral(0,xmax,p,epsilon)/Norm - 0.95; - } - - x[0] = like.GetMaximumX(0.,MaxSig); - if (plot) - { - TCanvas c("Likelihood"); - like.Draw(); - TArrow arrow(xmax,Likelihood(x,p)/7.,xmax,0,0.04); - arrow.SetLineWidth(3.); - arrow.Draw(); - c.Print("Likelihood.eps"); - } - if (plot) std::cout << "Upper 95% C.L. limit on signal = " << xmax << " pb" << std::endl; - // - return xmax; -} - -Double_t Likelihood(Double_t *x, Double_t *p) -{ - p=p; - Double_t retval = 0.; - if (sB == 0.) - { - if (sA == 0.) - { - if (lGauss) retval = TMath::Gaus(N-B0-x[0]*A0,0.,TMath::Sqrt(N),kTRUE); - else retval = Poisson(B0+x[0]*A0,N); - } - else - { - Double_t par[2]; - // TF1 *in = new TF1("Inner",Inner,0.,TMath::Max(A0 + 5.*sA,2); - TF1 *in = new TF1("Inner",Inner,0.,A0 + 5.*sA,2); - par[0]=B0; // background value - par[1]=x[0]; // signal cross section value - if (I == 0) - { - Double_t low = A0 > 5.*sA ? A0 - 5.*sA : 0.; - retval = in->Integral(low,A0+5.*sA,par,epsilon); - } else { - Double_t low = 0., high = A0 + 5.*sA, tmp = 1.; - while (tmp > epsilon) - { - tmp = in->Integral(low,high,par,epsilon); - retval += tmp; - low = high; - high *= 2; - } - } - delete in; - } - } - else - { - // TF1 *out = new TF1("Outer",Outer,0.,TMath::Max(B0 + 5.*sB,1000.),1); - TF1 *out = new TF1("Outer",Outer,0.,B0 + 5.*sB,1); - if (I == 0) - { - Double_t low = B0 > 5.*sB ? B0 - 5.*sB : 0.; - retval = out->Integral(low,B0+5.*sB,x,epsilon); - } else { - Double_t low = 0., high = B0 + 5.*sB, tmp = 1.; - while (tmp > epsilon) - { - tmp = out->Integral(low,high,x,epsilon); - retval += tmp; - low = high; - high *= 2; - } - } - delete out; - } - return retval; -} - -Double_t Outer(Double_t *x, Double_t *p) -{ - Double_t retval; - if (sA == 0.) - { - // cout << "x, sigma_b, B0 = " << x[0] << ", " << sigma_b << ", " << B0 << endl; - if (lGauss) retval = TMath::Gaus(x[0],B0,sB,kTRUE)*TMath::Gaus(N-x[0]-p[0]*A0,0.,TMath::Sqrt(N),kTRUE); - else if (I == 0) retval = TMath::Gaus(x[0],B0,sB,kTRUE)*Poisson(x[0]+p[0]*A0,N); - else if (I == 1) retval = TMath::LogNormal(x[0], sigma_b, 0., B0)*Poisson(x[0]+p[0]*A0,N); - else if (I == 2) retval = TMath::GammaDist(x[0], sigma_b, 0., 1./tau_b)*Poisson(x[0]+p[0]*A0,N); - else return 0; - } - else - { - Double_t par[2]; - // TF1 *in = new TF1("Inner",Inner,0.,TMath::Max(A0 + 5.*sA,1000.),2); - TF1 *in = new TF1("Inner",Inner,0.,A0 + 5.*sA,2); - par[0]=x[0]; // background value - par[1]=p[0]; // signal cross section value - Double_t low = A0 > 5.*sA ? A0 - 5.*sA : 0.; - if (I == 0) retval = TMath::Gaus(x[0],B0,sB,kTRUE)*in->Integral(low,A0+5.*sA,par,epsilon); - else if (I == 1) retval = TMath::LogNormal(x[0], sigma_b, 0., B0)*in->Integral(0.,A0+5.*sA,par,epsilon); - else if (I == 2) retval = TMath::GammaDist(x[0], sigma_b, 0., 1./tau_b)*in->Integral(0.,A0+5.*sA,par,epsilon); - else return 0; - delete in; - } - return retval; -} - -Double_t Inner(Double_t *x, Double_t *par) -{ - Double_t sigma, B; - // - B = par[0]; - sigma = par[1]; - if (lGauss) return TMath::Gaus(x[0],A0,sA,kTRUE)*TMath::Gaus(N-B-sigma*x[0],0.,TMath::Sqrt(N),kTRUE); - else if (I == 0) return TMath::Gaus(x[0],A0,sA,kTRUE)*Poisson(B+sigma*x[0],N); - else if (I == 1) return TMath::LogNormal(x[0], sigma_a, 0., A0)*Poisson(B+sigma*x[0],N); - else if (I == 2) return TMath::GammaDist(x[0], sigma_a, 0., 1./tau_a)*Poisson(B+sigma*x[0],N); - else return 0; -} - -Double_t Poisson(Double_t Mu, Int_t n) -{ - Double_t logP; - // - // Tabulate values of -\sum log(i+2) up to n=1000 for faster calculation - // - - // Double_t sum = 0.; - // for (Int_t j = 0; j < 999; j++) - // { - // sum -= log(j+2.); - // printf("%10f, ",sum); - // if (((j+1)/10)*10 == j + 1) printf("\n"); - // } - - Double_t logTable[999] = {-0.693147, -1.791759, -3.178054, -4.787492, -6.579251, -8.525161, -10.604603, -12.801827, -15.104413, -17.502308, - -19.987214, -22.552164, -25.191221, -27.899271, -30.671860, -33.505073, -36.395445, -39.339884, -42.335616, -45.380139, - -48.471181, -51.606676, -54.784729, -58.003605, -61.261702, -64.557539, -67.889743, -71.257039, -74.658236, -78.092224, - -81.557959, -85.054467, -88.580828, -92.136176, -95.719695, -99.330612, -102.968199, -106.631760, -110.320640, -114.034212, - -117.771881, -121.533082, -125.317271, -129.123934, -132.952575, -136.802723, -140.673924, -144.565744, -148.477767, -152.409593, - -156.360836, -160.331128, -164.320112, -168.327445, -172.352797, -176.395848, -180.456291, -184.533829, -188.628173, -192.739047, - -196.866182, -201.009316, -205.168199, -209.342587, -213.532241, -217.736934, -221.956442, -226.190548, -230.439044, -234.701723, - -238.978390, -243.268849, -247.572914, -251.890402, -256.221136, -260.564941, -264.921650, -269.291098, -273.673124, -278.067573, - -282.474293, -286.893133, -291.323950, -295.766601, -300.220949, -304.686857, -309.164194, -313.652830, -318.152640, -322.663499, - -327.185288, -331.717887, -336.261182, -340.815059, -345.379407, -349.954118, -354.539086, -359.134205, -363.739376, -368.354496, - -372.979469, -377.614198, -382.258589, -386.912549, -391.575988, -396.248817, -400.930948, -405.622296, -410.322777, -415.032307, - -419.750806, -424.478193, -429.214392, -433.959324, -438.712914, -443.475088, -448.245773, -453.024896, -457.812388, -462.608179, - -467.412200, -472.224384, -477.044665, -481.872979, -486.709261, -491.553448, -496.405478, -501.265291, -506.132825, -511.008023, - -515.890825, -520.781174, -525.679014, -530.584288, -535.496943, -540.416924, -545.344178, -550.278652, -555.220294, -560.169054, - -565.124881, -570.087726, -575.057539, -580.034273, -585.017879, -590.008312, -595.005524, -600.009471, -605.020106, -610.037386, - -615.061266, -620.091704, -625.128657, -630.172082, -635.221938, -640.278184, -645.340779, -650.409683, -655.484857, -660.566261, - -665.653857, -670.747608, -675.847474, -680.953420, -686.065407, -691.183401, -696.307365, -701.437264, -706.573062, -711.714726, - -716.862220, -722.015512, -727.174567, -732.339353, -737.509837, -742.685987, -747.867770, -753.055156, -758.248113, -763.446610, - -768.650617, -773.860103, -779.075039, -784.295395, -789.521141, -794.752250, -799.988692, -805.230439, -810.477463, -815.729736, - -820.987232, -826.249922, -831.517780, -836.790780, -842.068894, -847.352098, -852.640365, -857.933670, -863.231987, -868.535292, - -873.843560, -879.156766, -884.474886, -889.797896, -895.125772, -900.458491, -905.796029, -911.138363, -916.485471, -921.837329, - -927.193915, -932.555207, -937.921183, -943.291821, -948.667100, -954.046997, -959.431492, -964.820564, -970.214191, -975.612354, - -981.015031, -986.422203, -991.833849, -997.249950, -1002.670485, -1008.095435, -1013.524780, -1018.958502, -1024.396582, -1029.838999, - -1035.285737, -1040.736775, -1046.192096, -1051.651682, -1057.115514, -1062.583574, -1068.055844, -1073.532308, -1079.012947, -1084.497744, - -1089.986681, -1095.479743, -1100.976911, -1106.478169, -1111.983501, -1117.492889, -1123.006318, -1128.523771, -1134.045232, -1139.570685, - -1145.100114, -1150.633503, -1156.170838, -1161.712101, -1167.257279, -1172.806355, -1178.359314, -1183.916142, -1189.476824, -1195.041344, - -1200.609689, -1206.181843, -1211.757792, -1217.337522, -1222.921018, -1228.508267, -1234.099254, -1239.693965, -1245.292387, -1250.894506, - -1256.500308, -1262.109780, -1267.722908, -1273.339679, -1278.960080, -1284.584097, -1290.211718, -1295.842930, -1301.477720, -1307.116075, - -1312.757982, -1318.403428, -1324.052403, -1329.704892, -1335.360884, -1341.020366, -1346.683326, -1352.349753, -1358.019634, -1363.692957, - -1369.369711, -1375.049884, -1380.733463, -1386.420439, -1392.110798, -1397.804530, -1403.501624, -1409.202067, -1414.905850, -1420.612960, - -1426.323387, -1432.037120, -1437.754148, -1443.474460, -1449.198045, -1454.924892, -1460.654992, -1466.388333, -1472.124906, -1477.864699, - -1483.607702, -1489.353905, -1495.103298, -1500.855871, -1506.611613, -1512.370515, -1518.132566, -1523.897757, -1529.666078, -1535.437519, - -1541.212071, -1546.989723, -1552.770467, -1558.554292, -1564.341189, -1570.131149, -1575.924163, -1581.720221, -1587.519313, -1593.321432, - -1599.126567, -1604.934709, -1610.745850, -1616.559981, -1622.377092, -1628.197175, -1634.020221, -1639.846221, -1645.675166, -1651.507049, - -1657.341860, -1663.179590, -1669.020232, -1674.863776, -1680.710215, -1686.559540, -1692.411742, -1698.266814, -1704.124747, -1709.985533, - -1715.849165, -1721.715633, -1727.584930, -1733.457047, -1739.331978, -1745.209714, -1751.090247, -1756.973569, -1762.859673, -1768.748551, - -1774.640196, -1780.534598, -1786.431752, -1792.331650, -1798.234283, -1804.139645, -1810.047728, -1815.958524, -1821.872027, -1827.788229, - -1833.707123, -1839.628702, -1845.552957, -1851.479884, -1857.409473, -1863.341718, -1869.276612, -1875.214148, -1881.154319, -1887.097119, - -1893.042539, -1898.990574, -1904.941217, -1910.894460, -1916.850298, -1922.808722, -1928.769728, -1934.733307, -1940.699454, -1946.668161, - -1952.639423, -1958.613233, -1964.589584, -1970.568470, -1976.549884, -1982.533820, -1988.520272, -1994.509233, -2000.500698, -2006.494659, - -2012.491111, -2018.490048, -2024.491463, -2030.495350, -2036.501703, -2042.510516, -2048.521784, -2054.535499, -2060.551656, -2066.570249, - -2072.591272, -2078.614720, -2084.640586, -2090.668864, -2096.699550, -2102.732636, -2108.768117, -2114.805988, -2120.846243, -2126.888876, - -2132.933881, -2138.981253, -2145.030987, -2151.083076, -2157.137515, -2163.194299, -2169.253423, -2175.314879, -2181.378665, -2187.444773, - -2193.513198, -2199.583936, -2205.656981, -2211.732327, -2217.809969, -2223.889902, -2229.972121, -2236.056620, -2242.143395, -2248.232440, - -2254.323750, -2260.417320, -2266.513144, -2272.611219, -2278.711537, -2284.814096, -2290.918889, -2297.025912, -2303.135160, -2309.246627, - -2315.360309, -2321.476201, -2327.594299, -2333.714596, -2339.837089, -2345.961772, -2352.088641, -2358.217692, -2364.348918, -2370.482316, - -2376.617881, -2382.755608, -2388.895493, -2395.037530, -2401.181716, -2407.328045, -2413.476513, -2419.627116, -2425.779849, -2431.934707, - -2438.091686, -2444.250781, -2450.411988, -2456.575303, -2462.740721, -2468.908238, -2475.077848, -2481.249549, -2487.423335, -2493.599202, - -2499.777146, -2505.957163, -2512.139248, -2518.323397, -2524.509606, -2530.697870, -2536.888185, -2543.080548, -2549.274953, -2555.471397, - -2561.669876, -2567.870385, -2574.072920, -2580.277478, -2586.484054, -2592.692644, -2598.903244, -2605.115850, -2611.330458, -2617.547065, - -2623.765665, -2629.986255, -2636.208831, -2642.433390, -2648.659926, -2654.888437, -2661.118919, -2667.351367, -2673.585777, -2679.822147, - -2686.060472, -2692.300747, -2698.542971, -2704.787138, -2711.033244, -2717.281287, -2723.531263, -2729.783166, -2736.036995, -2742.292745, - -2748.550413, -2754.809994, -2761.071486, -2767.334884, -2773.600185, -2779.867386, -2786.136482, -2792.407471, -2798.680348, -2804.955110, - -2811.231753, -2817.510275, -2823.790671, -2830.072937, -2836.357071, -2842.643070, -2848.930928, -2855.220644, -2861.512213, -2867.805632, - -2874.100898, -2880.398007, -2886.696957, -2892.997742, -2899.300361, -2905.604810, -2911.911085, -2918.219184, -2924.529102, -2930.840837, - -2937.154385, -2943.469743, -2949.786908, -2956.105876, -2962.426644, -2968.749209, -2975.073568, -2981.399718, -2987.727655, -2994.057376, - -3000.388877, -3006.722157, -3013.057211, -3019.394037, -3025.732631, -3032.072990, -3038.415112, -3044.758992, -3051.104629, -3057.452018, - -3063.801157, -3070.152043, -3076.504672, -3082.859042, -3089.215150, -3095.572992, -3101.932566, -3108.293868, -3114.656896, -3121.021647, - -3127.388118, -3133.756305, -3140.126206, -3146.497818, -3152.871137, -3159.246162, -3165.622889, -3172.001315, -3178.381438, -3184.763254, - -3191.146760, -3197.531955, -3203.918834, -3210.307396, -3216.697636, -3223.089553, -3229.483144, -3235.878406, -3242.275335, -3248.673930, - -3255.074188, -3261.476105, -3267.879679, -3274.284908, -3280.691788, -3287.100316, -3293.510491, -3299.922310, -3306.335768, -3312.750865, - -3319.167598, -3325.585963, -3332.005958, -3338.427580, -3344.850827, -3351.275696, -3357.702184, -3364.130290, -3370.560009, -3376.991340, - -3383.424280, -3389.858827, -3396.294977, -3402.732729, -3409.172079, -3415.613026, -3422.055566, -3428.499697, -3434.945417, -3441.392723, - -3447.841612, -3454.292083, -3460.744132, -3467.197757, -3473.652955, -3480.109725, -3486.568063, -3493.027968, -3499.489436, -3505.952465, - -3512.417053, -3518.883198, -3525.350897, -3531.820147, -3538.290947, -3544.763293, -3551.237184, -3557.712616, -3564.189589, -3570.668098, - -3577.148143, -3583.629720, -3590.112827, -3596.597463, -3603.083624, -3609.571308, -3616.060512, -3622.551236, -3629.043476, -3635.537230, - -3642.032495, -3648.529270, -3655.027552, -3661.527339, -3668.028629, -3674.531419, -3681.035707, -3687.541491, -3694.048769, -3700.557538, - -3707.067797, -3713.579542, -3720.092772, -3726.607485, -3733.123678, -3739.641349, -3746.160496, -3752.681117, -3759.203210, -3765.726773, - -3772.251802, -3778.778297, -3785.306255, -3791.835674, -3798.366551, -3804.898886, -3811.432675, -3817.967916, -3824.504607, -3831.042747, - -3837.582333, -3844.123363, -3850.665835, -3857.209747, -3863.755097, -3870.301882, -3876.850101, -3883.399752, -3889.950832, -3896.503340, - -3903.057274, -3909.612630, -3916.169409, -3922.727607, -3929.287222, -3935.848253, -3942.410697, -3948.974552, -3955.539817, -3962.106490, - -3968.674567, -3975.244049, -3981.814932, -3988.387214, -3994.960895, -4001.535970, -4008.112440, -4014.690301, -4021.269553, -4027.850192, - -4034.432217, -4041.015626, -4047.600417, -4054.186589, -4060.774139, -4067.363066, -4073.953367, -4080.545040, -4087.138085, -4093.732498, - -4100.328279, -4106.925425, -4113.523934, -4120.123804, -4126.725034, -4133.327622, -4139.931566, -4146.536864, -4153.143514, -4159.751515, - -4166.360864, -4172.971560, -4179.583601, -4186.196985, -4192.811711, -4199.427776, -4206.045179, -4212.663918, -4219.283991, -4225.905397, - -4232.528133, -4239.152198, -4245.777591, -4252.404308, -4259.032350, -4265.661713, -4272.292396, -4278.924398, -4285.557717, -4292.192350, - -4298.828297, -4305.465555, -4312.104122, -4318.743998, -4325.385180, -4332.027667, -4338.671457, -4345.316548, -4351.962938, -4358.610627, - -4365.259611, -4371.909890, -4378.561462, -4385.214325, -4391.868478, -4398.523918, -4405.180645, -4411.838656, -4418.497950, -4425.158525, - -4431.820380, -4438.483512, -4445.147921, -4451.813605, -4458.480562, -4465.148790, -4471.818288, -4478.489054, -4485.161087, -4491.834385, - -4498.508947, -4505.184770, -4511.861853, -4518.540196, -4525.219795, -4531.900649, -4538.582758, -4545.266119, -4551.950731, -4558.636592, - -4565.323700, -4572.012055, -4578.701654, -4585.392497, -4592.084580, -4598.777904, -4605.472466, -4612.168265, -4618.865299, -4625.563567, - -4632.263068, -4638.963799, -4645.665759, -4652.368947, -4659.073361, -4665.779001, -4672.485863, -4679.193947, -4685.903251, -4692.613774, - -4699.325515, -4706.038471, -4712.752642, -4719.468025, -4726.184620, -4732.902424, -4739.621438, -4746.341658, -4753.063083, -4759.785713, - -4766.509546, -4773.234579, -4779.960813, -4786.688244, -4793.416873, -4800.146697, -4806.877715, -4813.609926, -4820.343328, -4827.077919, - -4833.813700, -4840.550666, -4847.288819, -4854.028156, -4860.768675, -4867.510376, -4874.253256, -4880.997315, -4887.742552, -4894.488964, - -4901.236550, -4907.985310, -4914.735241, -4921.486343, -4928.238613, -4934.992051, -4941.746655, -4948.502424, -4955.259356, -4962.017451, - -4968.776706, -4975.537121, -4982.298694, -4989.061423, -4995.825308, -5002.590347, -5009.356539, -5016.123882, -5022.892375, -5029.662017, - -5036.432806, -5043.204742, -5049.977822, -5056.752046, -5063.527412, -5070.303919, -5077.081566, -5083.860351, -5090.640273, -5097.421330, - -5104.203522, -5110.986848, -5117.771305, -5124.556892, -5131.343609, -5138.131454, -5144.920426, -5151.710523, -5158.501745, -5165.294089, - -5172.087555, -5178.882142, -5185.677848, -5192.474671, -5199.272612, -5206.071668, -5212.871838, -5219.673121, -5226.475515, -5233.279021, - -5240.083635, -5246.889358, -5253.696187, -5260.504122, -5267.313161, -5274.123304, -5280.934548, -5287.746893, -5294.560338, -5301.374881, - -5308.190521, -5315.007257, -5321.825087, -5328.644011, -5335.464028, -5342.285135, -5349.107333, -5355.930619, -5362.754992, -5369.580452, - -5376.406998, -5383.234627, -5390.063339, -5396.893133, -5403.724007, -5410.555960, -5417.388992, -5424.223101, -5431.058286, -5437.894545, - -5444.731878, -5451.570283, -5458.409759, -5465.250306, -5472.091921, -5478.934605, -5485.778355, -5492.623170, -5499.469050, -5506.315993, - -5513.163998, -5520.013065, -5526.863191, -5533.714376, -5540.566618, -5547.419917, -5554.274272, -5561.129681, -5567.986143, -5574.843657, - -5581.702222, -5588.561837, -5595.422500, -5602.284212, -5609.146970, -5616.010773, -5622.875621, -5629.741512, -5636.608445, -5643.476419, - -5650.345434, -5657.215487, -5664.086579, -5670.958707, -5677.831871, -5684.706069, -5691.581301, -5698.457566, -5705.334862, -5712.213188, - -5719.092544, -5725.972928, -5732.854339, -5739.736777, -5746.620240, -5753.504726, -5760.390236, -5767.276768, -5774.164320, -5781.052893, - -5787.942484, -5794.833093, -5801.724719, -5808.617361, -5815.511017, -5822.405687, -5829.301370, -5836.198064, -5843.095769, -5849.994483, - -5856.894207, -5863.794937, -5870.696674, -5877.599417, -5884.503164, -5891.407915, -5898.313668, -5905.220423, -5912.128178 }; - - logP = -Mu + n*log(Mu); - if (n >= 2) logP += logTable[TMath::Min(n,1000)-2]; - - for (Int_t i = 1001; i <= n; i++) logP -= log((Double_t) i); - - return exp(logP); -}// - -Double_t CLA(Double_t ilum, Double_t slum, Double_t eff, Double_t seff, Double_t bck, Double_t sbck, Int_t bckint) -{ - plot = kFALSE; - Double_t CL95A = 0, precision = 1.e-4; - Int_t i; - for (i = bck; i >= 0; i--) - { -// - Double_t s95 = CL95(ilum, slum, eff, seff, bck, sbck, i, kFALSE, bckint); - Double_t s95w =s95*Poisson(bck,i); - CL95A += s95w; -// cout << "n = " << i << "; 95% C.L. = " << s95 << " pb; weighted 95% C.L. = " << s95w << " pb; running = " << CL95A << " pb" << endl; -// - if (s95w < CL95A*precision) break; - } -// cout << "Lower bound on n has been found at " << i+1 << endl; -// - for (i = bck+1; ; i++) - { - Double_t s95 = CL95(ilum, slum, eff, seff, bck, sbck, i, kFALSE, bckint); - Double_t s95w =s95*Poisson(bck,i); - CL95A += s95w; -// cout << "n = " << i << "; 95% C.L. = " << s95 << " pb; weighted 95% C.L. = " << s95w << " pb; running = " << CL95A << " pb" << endl; -// - if (s95w < CL95A*precision) break; - } -// cout << "Upper bound on n has been found at " << i << endl; -// -// cout << "Average upper 95% C.L. limit = " << CL95A << " pb" << endl; - return CL95A; -} - diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/DumpInfo.C b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/DumpInfo.C deleted file mode 100644 index 56b66aa0450c5..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/DumpInfo.C +++ /dev/null @@ -1,551 +0,0 @@ - -#include - -#include "TROOT.h" -#include "TFile.h" -#include "TDirectory.h" -#include "TChain.h" -#include "TObject.h" -#include "TCanvas.h" -#include "TMath.h" -#include "TLegend.h" -#include "TGraph.h" -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include "TTree.h" -#include "TF1.h" -#include "TGraphAsymmErrors.h" -#include "TPaveText.h" -#include "tdrstyle.C" -#include "TRandom3.h" -#include "TProfile.h" -#include "TDirectory.h" - - -class SiStripCluster; -namespace reco { class Vertex; class Track; class GenParticle; class DeDxData; class MuonTimeExtra;} -namespace susybsm { class HSCParticle; class HSCPIsolation;} -namespace fwlite { class ChainEvent;} -namespace trigger { class TriggerEvent;} -namespace edm {class TriggerResults; class TriggerResultsByName; class InputTag;} - - -#if !defined(__CINT__) && !defined(__MAKECINT__) -#include "DataFormats/FWLite/interface/Handle.h" -#include "DataFormats/FWLite/interface/Event.h" -#include "DataFormats/FWLite/interface/ChainEvent.h" - -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCParticle.h" -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCPIsolation.h" -#include "DataFormats/MuonReco/interface/MuonTimeExtraMap.h" -#include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" - -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/HLTReco/interface/TriggerObject.h" -#include "DataFormats/Common/interface/TriggerResults.h" - -#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h" -#include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2D.h" -#include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h" -#include "DataFormats/TrackerRecHit2D/interface/ProjectedSiStripRecHit2D.h" -#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit1D.h" - -using namespace fwlite; -using namespace reco; -using namespace susybsm; -using namespace std; -using namespace edm; -using namespace trigger; -#endif - - -#include "Analysis_Global.h" -#include "Analysis_CommonFunction.h" -#include "Analysis_PlotFunction.h" -#include "Analysis_PlotStructure.h" -#include "Analysis_Samples.h" - - -std::vector signals; -std::vector MCsample; -std::vector DataFileName; -double CutMass; - -double CutPt; -double CutI; -double CutTOF; - -bool shapeSelection(const std::vector & ampls) -{ - // ---------------- COMPTAGE DU NOMBRE DE MAXIMA -------------------------- - //---------------------------------------------------------------------------- -// printf("ShapeTest \n"); - Int_t NofMax=0; Int_t recur255=1; Int_t recur254=1; - bool MaxOnStart=false;bool MaxInMiddle=false, MaxOnEnd =false; - Int_t MaxPos=0; - // Début avec max - if(ampls.size()!=1 && ((ampls[0]>ampls[1]) - || (ampls.size()>2 && ampls[0]==ampls[1] && ampls[1]>ampls[2] && ampls[0]!=254 && ampls[0]!=255) - || (ampls.size()==2 && ampls[0]==ampls[1] && ampls[0]!=254 && ampls[0]!=255)) ){ - NofMax=NofMax+1; MaxOnStart=true; } - - // Maximum entouré - if(ampls.size()>2){ - for (unsigned int i =1; i < ampls.size()-1; i++) { - if( (ampls[i]>ampls[i-1] && ampls[i]>ampls[i+1]) - || (ampls.size()>3 && i>0 && iampls[i-1] && ampls[i]>ampls[i+2] && ampls[i]!=254 && ampls[i]!=255) ){ - NofMax=NofMax+1; MaxInMiddle=true; MaxPos=i; - } - if(ampls[i]==255 && ampls[i]==ampls[i-1]) { - recur255=recur255+1; - MaxPos=i-(recur255/2); - if(ampls[i]>ampls[i+1]){NofMax=NofMax+1;MaxInMiddle=true;} - } - if(ampls[i]==254 && ampls[i]==ampls[i-1]) { - recur254=recur254+1; - MaxPos=i-(recur254/2); - if(ampls[i]>ampls[i+1]){NofMax=NofMax+1;MaxInMiddle=true;} - } - } - } - // Fin avec un max - if(ampls.size()>1){ - if(ampls[ampls.size()-1]>ampls[ampls.size()-2] - || (ampls.size()>2 && ampls[ampls.size()-1]==ampls[ampls.size()-2] && ampls[ampls.size()-2]>ampls[ampls.size()-3] ) - || ampls[ampls.size()-1]==255){ - NofMax=NofMax+1; MaxOnEnd=true; } - } - // Si une seule strip touchée - if(ampls.size()==1){ NofMax=1;} - - // --- SELECTION EN FONCTION DE LA FORME POUR LES MAXIMA UNIQUES --------- - //------------------------------------------------------------------------ - /* - ____ - | |____ - ____| | | - | | | |____ - ____| | | | | - | | | | | |____ - __|____|____|____|____|____|____|__ - C_Mnn C_Mn C_M C_D C_Dn C_Dnn - */ -// bool shapetest=true; - bool shapecdtn=false; - -// Float_t C_M; Float_t C_D; Float_t C_Mn; Float_t C_Dn; Float_t C_Mnn; Float_t C_Dnn; - Float_t C_M=0.0; Float_t C_D=0.0; Float_t C_Mn=10000; Float_t C_Dn=10000; Float_t C_Mnn=10000; Float_t C_Dnn=10000; - Int_t CDPos; - Float_t coeff1=1.7; Float_t coeff2=2.0; - Float_t coeffn=0.10; Float_t coeffnn=0.02; Float_t noise=4.0; - - if(NofMax==1){ - - if(MaxOnStart==true){ - C_M=(Float_t)ampls[0]; C_D=(Float_t)ampls[1]; - if(ampls.size()<3) shapecdtn=true ; - else if(ampls.size()==3){C_Dn=(Float_t)ampls[2] ; if(C_Dn<=coeff1*coeffn*C_D+coeff2*coeffnn*C_M+2*noise || C_D==255) shapecdtn=true;} - else if(ampls.size()>3){ C_Dn=(Float_t)ampls[2]; C_Dnn=(Float_t)ampls[3] ; - if((C_Dn<=coeff1*coeffn*C_D+coeff2*coeffnn*C_M+2*noise || C_D==255) - && C_Dnn<=coeff1*coeffn*C_Dn+coeff2*coeffnn*C_D+2*noise){ - shapecdtn=true;} - } - } - - if(MaxOnEnd==true){ - C_M=(Float_t)ampls[ampls.size()-1]; C_D=(Float_t)ampls[ampls.size()-2]; - if(ampls.size()<3) shapecdtn=true ; - else if(ampls.size()==3){C_Dn=(Float_t)ampls[0] ; if(C_Dn<=coeff1*coeffn*C_D+coeff2*coeffnn*C_M+2*noise || C_D==255) shapecdtn=true;} - else if(ampls.size()>3){C_Dn=(Float_t)ampls[ampls.size()-3] ; C_Dnn=(Float_t)ampls[ampls.size()-4] ; - if((C_Dn<=coeff1*coeffn*C_D+coeff2*coeffnn*C_M+2*noise || C_D==255) - && C_Dnn<=coeff1*coeffn*C_Dn+coeff2*coeffnn*C_D+2*noise){ - shapecdtn=true;} - } - } - if(MaxInMiddle==true){ - C_M=(Float_t)ampls[MaxPos]; - int LeftOfMaxPos=MaxPos-1;if(LeftOfMaxPos<=0)LeftOfMaxPos=0; - int RightOfMaxPos=MaxPos+1;if(RightOfMaxPos>=(int)ampls.size())RightOfMaxPos=ampls.size()-1; - //int after = RightOfMaxPos; int before = LeftOfMaxPos; if (after>=(int)ampls.size() || before<0) std::cout<<"invalid read MaxPos:"<3){ - if(CDPos>MaxPos){ - if(ampls.size()-CDPos-1==0){ - C_Dn=0; C_Dnn=0; - } - if(ampls.size()-CDPos-1==1){ - C_Dn=(Float_t)ampls[CDPos+1]; - C_Dnn=0; - } - if(ampls.size()-CDPos-1>1){ - C_Dn=(Float_t)ampls[CDPos+1]; - C_Dnn=(Float_t)ampls[CDPos+2]; - } - if(MaxPos>=2){ - C_Mnn=(Float_t)ampls[MaxPos-2]; - } - else if(MaxPos<2) C_Mnn=0; - } - if(CDPos1){ - C_Dn=(Float_t)ampls[CDPos-1]; - C_Dnn=(Float_t)ampls[CDPos-2]; - } - if(ampls.size()-LeftOfMaxPos>1 && MaxPos+2<(int)(ampls.size())-1){ - C_Mnn=(Float_t)ampls[MaxPos+2]; - }else C_Mnn=0; - } - if((C_Dn<=coeff1*coeffn*C_D+coeff2*coeffnn*C_M+2*noise || C_D==255) - && C_Mnn<=coeff1*coeffn*C_Mn+coeff2*coeffnn*C_M+2*noise - && C_Dnn<=coeff1*coeffn*C_Dn+coeff2*coeffnn*C_D+2*noise) { - shapecdtn=true; - } - - } - } - } - } - if(ampls.size()==1){shapecdtn=true;} - - return shapecdtn; -} - - -void printCluster(FILE* pFile, const SiStripCluster* Cluster) -{ -// const vector& Ampls = Cluster->amplitudes(); - const vector& Ampls = Cluster->amplitudes(); - uint32_t DetId = Cluster->geographicalId(); - - int Charge=0; - for(unsigned int i=0;i %4i = %3i ",DetId,Charge,Ampls[0]); - for(unsigned int i=1;i > vertexCollHandle; - vertexCollHandle.getByLabel(ev,"offlinePrimaryVertices"); - if(!vertexCollHandle.isValid()){printf("Vertex Collection NotFound\n");return;} - std::vector vertexColl = *vertexCollHandle; - if(vertexColl.size()<1){printf("NO VERTEX\n"); return;} - const reco::Vertex& vertex = vertexColl[0]; - - fwlite::Handle dEdxSCollH; - dEdxSCollH.getByLabel(ev, dEdxS_Label.c_str()); - if(!dEdxSCollH.isValid()){printf("Invalid dEdx Selection collection\n");return;} - DeDxData dedxSObj = dEdxSCollH->get(track.key()); - - fwlite::Handle dEdxMCollH; - dEdxMCollH.getByLabel(ev, dEdxM_Label.c_str()); - if(!dEdxMCollH.isValid()){printf("Invalid dEdx Mass collection\n");return;} - DeDxData dedxMObj = dEdxMCollH->get(track.key()); - - fwlite::Handle dEdxMNPCollH; - dEdxMNPCollH.getByLabel(ev, "dedxNPHarm2"); - if(!dEdxMNPCollH.isValid()){printf("Invalid dEdx Mass collection\n");return;} - DeDxData dedxMNPObj = dEdxMNPCollH->get(track.key()); - - fwlite::Handle TOFDTCollH; - TOFDTCollH.getByLabel(ev, "muontiming","dt"); - if(!TOFDTCollH.isValid()){printf("Invalid TOF DT collection\n");return;} - - fwlite::Handle TOFCSCCollH; - TOFCSCCollH.getByLabel(ev, "muontiming","csc"); - if(!TOFDTCollH.isValid()){printf("Invalid TOF CSC collection\n");return;} - - fwlite::Handle TOFCombCollH; - TOFCombCollH.getByLabel(ev, "muontiming","combined"); - if(!TOFCombCollH.isValid()){printf("Invalid TOF Combined collection\n");return;} - const reco::MuonTimeExtra* tof = NULL; - if(!hscp.muonRef().isNull()){ tof = &TOFCombCollH->get(hscp.muonRef().key()); } - - - if(track->pt()<=CutPt || dedxSObj.dEdx()<=CutI)return; - if(CutTOF>-1 && tof && tof->inverseBeta()<=CutTOF)return; - - double Mass = GetMass(track->p(),dedxMObj.dEdx()); - if(Massdz (vertex.position()); - double dxy = track->dxy(vertex.position()); - for(unsigned int i=1;idz (vertexColl[i].position())) < fabs(dz) ){ - dz = track->dz (vertexColl[i].position()); - dxy = track->dxy(vertexColl[i].position()); - } - } - double v3d = sqrt(dz*dz+dxy*dxy); - - fprintf(pFile,"\n"); - fprintf(pFile,"---------------------------------------------------------------------------------------------------\n"); - fprintf(pFile,"Candidate Type = %i --> Mass : %7.2f\n",hscp.type(),Mass); - fprintf(pFile,"------------------------------------------ EVENT INFO ---------------------------------------------\n"); - fprintf(pFile,"Run=%i Lumi=%i Event=%i BX=%i Orbit=%i Store=%i\n",ev.eventAuxiliary().run(),ev.eventAuxiliary().luminosityBlock(),ev.eventAuxiliary().event(),ev.eventAuxiliary().luminosityBlock(),ev.eventAuxiliary().orbitNumber(),ev.eventAuxiliary().storeNumber()); - //edm::TriggerResultsByName tr = ev.triggerResultsByName("Merge"); - //fprintf(pFile,"Trigger: SingleMu=%i DoubleMu=%i PFMHT=%i (CaloMET=%i)\n",(int)tr.accept(tr.triggerIndex("HscpPathSingleMu")), (int)tr.accept(tr.triggerIndex("HscpPathDoubleMu")), (int)tr.accept(tr.triggerIndex("HscpPathPFMet")), (int)tr.accept(tr.triggerIndex("HscpPathCaloMet"))); - fprintf(pFile,"------------------------------------------ INNER TRACKER ------------------------------------------\n"); - fprintf(pFile,"Quality = %i Chi2/NDF=%6.2f dz=+%6.2f dxy=%+6.2f V3D=%+6.2f charge:%+i\n",track->qualityMask(), track->chi2()/track->ndof(), dz, dxy, v3d, track->charge()); - fprintf(pFile,"P=%7.2f Pt=%7.2f+-%6.2f (Cut=%6.2f) Eta=%+6.2f Phi=%+6.2f NOH=%2i\n",track->p(),track->pt(), track->ptError(), CutPt, track->eta(), track->phi(), track->found() ); - - fprintf(pFile,"------------------------------------------ DEDX INFO ----------------------------------------------\n"); - fprintf(pFile,"dEdx for selection :%6.2f (Cut=%6.2f) NOM %2i NOS %2i\n",dedxSObj.dEdx(),CutI,dedxSObj.numberOfMeasurements(),dedxSObj.numberOfSaturatedMeasurements()); - fprintf(pFile,"dEdx for mass reco :%6.2f NOM %2i NOS %2i --> Beta dEdx = %6.2f\n",dedxMObj.dEdx(),dedxMObj.numberOfMeasurements(),dedxMObj.numberOfSaturatedMeasurements(), GetIBeta(dedxMObj.dEdx()) ); - fprintf(pFile,"dEdx for mass reco (NP):%6.2f NOM %2i NOS %2i --> Beta dEdx = %6.2f\n",dedxMNPObj.dEdx(),dedxMNPObj.numberOfMeasurements(),dedxMNPObj.numberOfSaturatedMeasurements(), GetIBeta(dedxMNPObj.dEdx()) ); - - fprintf(pFile,"dEdx mass error :%6.2f (1Sigma dEdx) or %6.2f (1Sigma P)\n", GetMass(track->p(),0.95*dedxMObj.dEdx()), GetMass(track->p()*(1-track->ptError()/track->pt()),dedxMObj.dEdx()) ); - - for(unsigned int h=0;hrecHitsSize();h++){ - TrackingRecHit* recHit = (track->recHit(h))->clone(); - if(const SiStripMatchedRecHit2D* matchedHit=dynamic_cast(recHit)){ - fprintf(pFile,"Mono Hit "); printCluster(pFile,(matchedHit->monoHit()->cluster()).get()); - fprintf(pFile,"StereoHit ");printCluster(pFile,(matchedHit->stereoHit()->cluster()).get()); - }else if(const SiStripRecHit2D* singleHit=dynamic_cast(recHit)){ - fprintf(pFile,"2D Hit ");printCluster(pFile,(singleHit->cluster()).get()); - }else if(const SiStripRecHit1D* single1DHit=dynamic_cast(recHit)){ - fprintf(pFile,"1D Hit ");printCluster(pFile,(single1DHit->cluster()).get()); - }else if(const SiPixelRecHit* pixelHit=dynamic_cast(recHit)){ - fprintf(pFile,"Pixel Hit --> Charge = %i\n",(int)pixelHit->cluster()->charge()); - } - } - - if(!muon.isNull()){ - fprintf(pFile,"------------------------------------------ MUON INFO ----------------------------------------------\n"); - MuonTimeExtra tofDT = TOFDTCollH->get(hscp.muonRef().key()); - MuonTimeExtra tofCSC = TOFCSCCollH->get(hscp.muonRef().key()); - MuonTimeExtra tofComb = TOFCombCollH->get(hscp.muonRef().key()); - - fprintf(pFile,"MassTOF = %7.2fGeV\n",GetTOFMass(track->p(),tofComb.inverseBeta())); - - fprintf(pFile,"Quality=%i type=%i P=%7.2f Pt=%7.2f Eta=%+6.2f Phi=%+6.2f #Chambers=%i\n" ,muon->isQualityValid(),muon->type(),muon->p(),muon->pt(),muon->eta(),muon->phi(),muon->numberOfChambers()); - fprintf(pFile,"muonTimeDT : NDOF=%2i InvBeta=%6.2f+-%6.2f (Cut=%6.2f) --> beta=%6.2f FreeInvBeta=%6.2f+-%6.2f\n",tofDT .nDof(),tofDT .inverseBeta(), tofDT .inverseBetaErr(), CutTOF, (1.0/tofDT .inverseBeta()), tofDT .freeInverseBeta(),tofDT .freeInverseBetaErr()); - fprintf(pFile,"muonTimeCSC : NDOF=%2i InvBeta=%6.2f+-%6.2f (Cut=%6.2f) --> beta=%6.2f FreeInvBeta=%6.2f+-%6.2f\n",tofCSC .nDof(),tofCSC .inverseBeta(), tofCSC .inverseBetaErr(), CutTOF, (1.0/tofCSC .inverseBeta()), tofCSC .freeInverseBeta(),tofCSC .freeInverseBetaErr()); - fprintf(pFile,"muonTimeCombined: NDOF=%2i InvBeta=%6.2f+-%6.2f (Cut=%6.2f) --> beta=%6.2f FreeInvBeta=%6.2f+-%6.2f\n",tofComb.nDof(),tofComb.inverseBeta(), tofComb.inverseBetaErr(), CutTOF, (1.0/tofComb.inverseBeta()), tofComb.freeInverseBeta(),tofComb.freeInverseBetaErr()); - } - if(hscp.hasRpcInfo()){ - fprintf(pFile,"------------------------------------------ RPC INFO -----------------------------------------------\n"); - fprintf(pFile,"isCandidate %i Beta=%6.2f\n",hscp.rpc().isCandidate,hscp.rpc().beta); - } - if(hscp.hasCaloInfo() && hscp.caloInfoRef()->ecalTime!=-9999){ - fprintf(pFile,"------------------------------------------ CALO INFO ----------------------------------------------\n"); - fprintf(pFile,"HCAL: E=%6.2f E3x3=%6.2f E5x5=%6.2f HO E=%6.2f\n",hscp.caloInfoRef()->hcalCrossedEnergy,hscp.caloInfoRef()->hcal3by3dir, hscp.caloInfoRef()->hcal5by5dir, hscp.caloInfoRef()->hoCrossedEnergy); - fprintf(pFile,"ECAL: E=%6.2f E3x3=%6.2f E5x5=%6.2f\n" ,hscp.caloInfoRef()->ecalCrossedEnergy,hscp.caloInfoRef()->ecal3by3dir, hscp.caloInfoRef()->ecal5by5dir); - fprintf(pFile,"ECAL: time=%6.2f beta=%6.2f trkisodr=%6.2f\n" ,hscp.caloInfoRef()->ecalTime ,hscp.caloInfoRef()->ecalBeta , hscp.caloInfoRef()->trkIsoDr); - } - - fprintf(pFile,"------------------------------------------ ISOL INFO ----------------------------------------------\n"); - fwlite::Handle IsolationH05; - IsolationH05.getByLabel(ev, "HSCPIsolation05"); - if(!IsolationH05.isValid()){printf("Invalid IsolationH\n");return;} - const ValueMap& IsolationMap05 = *IsolationH05.product(); - - fwlite::Handle IsolationH03; - IsolationH03.getByLabel(ev, "HSCPIsolation03"); - if(!IsolationH03.isValid()){printf("Invalid IsolationH\n");return;} - const ValueMap& IsolationMap03 = *IsolationH03.product(); - - fwlite::Handle IsolationH01; - IsolationH01.getByLabel(ev, "HSCPIsolation01"); - if(!IsolationH01.isValid()){printf("Invalid IsolationH\n");return;} - const ValueMap& IsolationMap01 = *IsolationH01.product(); - - HSCPIsolation hscpIso05 = IsolationMap05.get((size_t)track.key()); - HSCPIsolation hscpIso03 = IsolationMap03.get((size_t)track.key()); - HSCPIsolation hscpIso01 = IsolationMap01.get((size_t)track.key()); - fprintf(pFile,"Isolation05 --> TkCount=%6.2f TkSumEt=%6.2f EcalE/P=%6.2f HcalE/P=%6.2f --> E/P=%6.2f\n",hscpIso05.Get_TK_Count(), hscpIso05.Get_TK_SumEt(), hscpIso05.Get_ECAL_Energy()/track->p(), hscpIso05.Get_HCAL_Energy()/track->p(), (hscpIso05.Get_ECAL_Energy()+hscpIso05.Get_HCAL_Energy())/track->p()); - fprintf(pFile,"Isolation03 --> TkCount=%6.2f TkSumEt=%6.2f EcalE/P=%6.2f HcalE/P=%6.2f --> E/P=%6.2f\n",hscpIso03.Get_TK_Count(), hscpIso03.Get_TK_SumEt(), hscpIso03.Get_ECAL_Energy()/track->p(), hscpIso03.Get_HCAL_Energy()/track->p(), (hscpIso03.Get_ECAL_Energy()+hscpIso03.Get_HCAL_Energy())/track->p()); - fprintf(pFile,"Isolation01 --> TkCount=%6.2f TkSumEt=%6.2f EcalE/P=%6.2f HcalE/P=%6.2f --> E/P=%6.2f\n",hscpIso01.Get_TK_Count(), hscpIso01.Get_TK_SumEt(), hscpIso01.Get_ECAL_Energy()/track->p(), hscpIso01.Get_HCAL_Energy()/track->p(), (hscpIso01.Get_ECAL_Energy()+hscpIso01.Get_HCAL_Energy())/track->p()); - fprintf(pFile,"\n"); -} - -bool PassTrigger(const fwlite::ChainEvent& ev) -{ - fwlite::Handle hTriggerResults; - hTriggerResults.getByLabel(ev, "TriggerResults", "", "Merge"); - if(!hTriggerResults.isValid()) return false; - - edm::TriggerResultsByName tr = ev.triggerResultsByName(*hTriggerResults); - if(!tr.isValid())return false; - if(tr.accept(tr.triggerIndex("HscpPathMu")))return true; - if(tr.accept(tr.triggerIndex("HscpPathMet")))return true; - return false; -} - - -void DumpInfo(string Pattern, int CutIndex=0, double MassMin=0) -{ - CutMass = MassMin; - - - setTDRStyle(); - gStyle->SetPadTopMargin (0.05); - gStyle->SetPadBottomMargin(0.10); - gStyle->SetPadRightMargin (0.18); - gStyle->SetPadLeftMargin (0.13); - gStyle->SetTitleSize(0.04, "XYZ"); - gStyle->SetTitleXOffset(1.1); - gStyle->SetTitleYOffset(1.35); - gStyle->SetPalette(1); - gStyle->SetNdivisions(505); - TH1::AddDirectory(kTRUE); - - - GetSignalDefinition(signals); - GetMCDefinition(MCsample); - GetInputFiles(DataFileName, "Data"); - - TFile* InputFile = new TFile((Pattern + "/Histos_Data.root").c_str()); - TH1D* HCuts_Pt = (TH1D*)GetObjectFromPath(InputFile, "HCuts_Pt"); - TH1D* HCuts_I = (TH1D*)GetObjectFromPath(InputFile, "HCuts_I"); - TH1D* HCuts_TOF = (TH1D*)GetObjectFromPath(InputFile, "HCuts_TOF"); - TH1D* H_A = (TH1D*)GetObjectFromPath(InputFile, "H_A"); - TH1D* H_B = (TH1D*)GetObjectFromPath(InputFile, "H_B"); - TH1D* H_C = (TH1D*)GetObjectFromPath(InputFile, "H_C"); - TH1D* H_D = (TH1D*)GetObjectFromPath(InputFile, "H_D"); - TH1D* H_E = (TH1D*)GetObjectFromPath(InputFile, "H_E"); - TH1D* H_F = (TH1D*)GetObjectFromPath(InputFile, "H_F"); - TH1D* H_G = (TH1D*)GetObjectFromPath(InputFile, "H_G"); - TH1D* H_H = (TH1D*)GetObjectFromPath(InputFile, "H_H"); - TH1D* H_P = (TH1D*)GetObjectFromPath(InputFile, "H_P"); - CutPt = HCuts_Pt ->GetBinContent(CutIndex+1); - CutI = HCuts_I ->GetBinContent(CutIndex+1); - CutTOF = HCuts_TOF->GetBinContent(CutIndex+1); - - - - TTree* tree = (TTree*)GetObjectFromPath(InputFile, "Data/HscpCandidates"); - printf("Tree Entries=%lli\n",tree->GetEntries()); - - fwlite::ChainEvent ev(DataFileName); - - - unsigned int Run, Event, HscpI; - float Pt, I, TOF; - - tree->SetBranchAddress("Run" ,&Run); - tree->SetBranchAddress("Event",&Event); - tree->SetBranchAddress("Hscp" ,&HscpI); - tree->SetBranchAddress("Pt" ,&Pt); - tree->SetBranchAddress("I" ,&I); - tree->SetBranchAddress("TOF" ,&TOF); - - FILE* pFile = fopen("DumpInfo.txt","w"); - fprintf(pFile, "A = %6.2E\n",H_A->GetBinContent(CutIndex+1)); - fprintf(pFile, "B = %6.2E\n",H_B->GetBinContent(CutIndex+1)); - fprintf(pFile, "C = %6.2E\n",H_C->GetBinContent(CutIndex+1)); - fprintf(pFile, "D = %6.2E\n",H_D->GetBinContent(CutIndex+1)); - fprintf(pFile, "E = %6.2E\n",H_E->GetBinContent(CutIndex+1)); - fprintf(pFile, "F = %6.2E\n",H_F->GetBinContent(CutIndex+1)); - fprintf(pFile, "G = %6.2E\n",H_G->GetBinContent(CutIndex+1)); - fprintf(pFile, "H = %6.2E\n",H_H->GetBinContent(CutIndex+1)); - fprintf(pFile, "OBSERVED EVENTS = %6.2E\n",H_D->GetBinContent(CutIndex+1)); - fprintf(pFile, "PREDICTED EVENTS = %6.2E+-%6.2E\n",H_P->GetBinContent(CutIndex+1), H_P->GetBinError(CutIndex+1)); - - - printf("Progressing Bar :0%% 20%% 40%% 60%% 80%% 100%%\n"); - printf("Scanning D :"); - int TreeStep = tree->GetEntries()/50;if(TreeStep==0)TreeStep=1; - for (Int_t i=0;iGetEntries();i++){ - if(i%TreeStep==0){printf(".");fflush(stdout);} - tree->GetEntry(i); -// printf("%6i %9i %1i %6.2f %6.2f %6.2f\n",Run,Event,HscpI,Pt,I,TOF); - - if(Pt<=CutPt || I<=CutI || (CutTOF>-1 && TOF<=CutTOF))continue; - - ev.to(Run, Event); - fwlite::Handle hscpCollHandle; - hscpCollHandle.getByLabel(ev,"HSCParticleProducer"); - if(!hscpCollHandle.isValid()){printf("HSCP Collection NotFound\n");continue;} - const susybsm::HSCParticleCollection& hscpColl = *hscpCollHandle; - - susybsm::HSCParticle hscp = hscpColl[HscpI]; - DumpCandidateInfo(hscp, ev, pFile); - - }printf("\n"); - fclose(pFile); - - - - - -/* - fwlite::ChainEvent treeD(DataFileName); - SetWeight(-1); - printf("Progressing Bar :0%% 20%% 40%% 60%% 80%% 100%%\n"); - printf("Scanning D :"); - TreeStep = treeD.size()/50;if(TreeStep==0)TreeStep=1; - - for(Long64_t ientry=0;ientry0 && ientry>MaxEntry)break; - if(ientry%TreeStep==0){printf(".");fflush(stdout);} - - DataPlots.TotalE->Fill(0.0,Event_Weight); - if(!PassTrigger(treeD) )continue; - DataPlots.TotalTE->Fill(0.0,Event_Weight); - - fwlite::Handle hscpCollHandle; - hscpCollHandle.getByLabel(treeD,"HSCParticleProducer"); - if(!hscpCollHandle.isValid()){printf("HSCP Collection NotFound\n");continue;} - const susybsm::HSCParticleCollection& hscpColl = *hscpCollHandle; - - fwlite::Handle dEdxSCollH; - dEdxSCollH.getByLabel(treeD, dEdxS_Label.c_str()); - if(!dEdxSCollH.isValid()){printf("Invalid dEdx Selection collection\n");continue;} - - fwlite::Handle dEdxMCollH; - dEdxMCollH.getByLabel(treeD, dEdxM_Label.c_str()); - if(!dEdxMCollH.isValid()){printf("Invalid dEdx Mass collection\n");continue;} - - fwlite::Handle TOFCollH; - TOFCollH.getByLabel(treeD, "muontiming",TOF_Label.c_str()); - if(!TOFCollH.isValid()){printf("Invalid TOF collection\n");return;} - - bool* HSCPTk = new bool[CutPt.size()]; for(unsigned int CutIndex=0;CutIndexget(track.key()); - const DeDxData& dedxMObj = dEdxMCollH->get(track.key()); - const reco::MuonTimeExtra* tof = NULL; - if(TypeMode==2 && !hscp.muonRef().isNull()){ tof = &TOFCollH->get(hscp.muonRef().key()); } - - - double MuonTOF = GlobalMinTOF; - if(tof){MuonTOF = tof->inverseBeta(); } - if(track->pt()>40 && Mass>75)stPlots_FillTree(DataPlots, treeD.eventAuxiliary().run(),treeD.eventAuxiliary().event(), c, track->pt(), dedxSObj.dEdx(), tof ? tof->inverseBeta() : -1); - } // end of Track Loop - for(unsigned int CutIndex=0;CutIndexFill(CutIndex,Event_Weight); } } - }// end of Event Loop - //stPlots_CloseTree(DataPlots); - printf("\n"); -*/ -} diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/DumpInfo.sh b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/DumpInfo.sh deleted file mode 100644 index d464ec66c43e9..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/DumpInfo.sh +++ /dev/null @@ -1,16 +0,0 @@ -root -l -b << EOF - TString makeshared(gSystem->GetMakeSharedLib()); - TString dummy = makeshared.ReplaceAll("-W ", ""); - TString dummy = makeshared.ReplaceAll("-Wshadow ", ""); - gSystem->SetMakeSharedLib(makeshared); - gSystem->Load("libFWCoreFWLite"); - FWLiteEnabler::enable(); - gSystem->Load("libDataFormatsFWLite.so"); - gSystem->Load("libAnalysisDataFormatsSUSYBSMObjects.so"); - gSystem->Load("libDataFormatsVertexReco.so"); - gSystem->Load("libDataFormatsCommon.so"); - gSystem->Load("libDataFormatsHepMCCandidate.so"); - gSystem->Load("libDataFormatsTrackerRecHit2D.so"); - .x DumpInfo.C++("Results/dedxASmi/combined/Eta15/PtMin35/Type0/",2,500); -EOF - diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Launch.py b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Launch.py deleted file mode 100644 index ba90f857ff6ed..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/Launch.py +++ /dev/null @@ -1,232 +0,0 @@ -#!/usr/bin/env python - -from __future__ import print_function -import urllib -import string -import os -import sys -import LaunchOnCondor -import glob - -def ComputeLimits(InputPattern, syst): -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino300_2C"' , '"Gluino300"', 0.0 / 0.3029 , 0.0 / 0.4955 , 1.0 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino400_2C"' , '"Gluino400"', 0.0 / 0.3029 , 0.0 / 0.4955 , 1.0 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino500_2C"' , '"Gluino500"', 0.0 / 0.3029 , 0.0 / 0.4955 , 1.0 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino600_2C"' , '"Gluino600"', 0.0 / 0.3029 , 0.0 / 0.4955 , 1.0 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino700_2C"' , '"Gluino700"', 0.0 / 0.3029 , 0.0 / 0.4955 , 1.0 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino800_2C"' , '"Gluino800"', 0.0 / 0.3029 , 0.0 / 0.4955 , 1.0 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino900_2C"' , '"Gluino900"', 0.0 / 0.3029 , 0.0 / 0.4955 , 1.0 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino1000_2C"', '"Gluino1000"',0.0 / 0.3029 , 0.0 / 0.4955 , 1.0 / 0.2015 , syst]) - -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino300_f0"' , '"Gluino300"', 0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino400_f0"' , '"Gluino400"', 0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino500_f0"' , '"Gluino500"', 0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino600_f0"' , '"Gluino600"', 0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino700_f0"' , '"Gluino700"', 0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino800_f0"' , '"Gluino800"', 0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino900_f0"' , '"Gluino900"', 0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino1000_f0"', '"Gluino1000"',0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) - - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino300_f1"' , '"Gluino300"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino400_f1"' , '"Gluino400"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino500_f1"' , '"Gluino500"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino600_f1"' , '"Gluino600"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino700_f1"' , '"Gluino700"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino800_f1"' , '"Gluino800"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino900_f1"' , '"Gluino900"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino1000_f1"', '"Gluino1000"',0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino1100_f1"', '"Gluino1100"',0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino300_f5"' , '"Gluino300"', 0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino400_f5"' , '"Gluino400"', 0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino500_f5"' , '"Gluino500"', 0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino600_f5"' , '"Gluino600"', 0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino700_f5"' , '"Gluino700"', 0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino800_f5"' , '"Gluino800"', 0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino900_f5"' , '"Gluino900"', 0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino1000_f5"', '"Gluino1000"',0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino1100_f5"', '"Gluino1100"',0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) - -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino300N_f0"', '"Gluino300N"', 0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino400N_f0"', '"Gluino400N"', 0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino500N_f0"', '"Gluino500N"', 0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino600N_f0"', '"Gluino600N"', 0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino700N_f0"', '"Gluino700N"', 0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino800N_f0"', '"Gluino800N"', 0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino900N_f0"', '"Gluino900N"', 0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) -# launchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino1000N_f0"','"Gluino1000N"',0.2524 / 0.3029 , 0.4893 / 0.4955 , 0.2583 / 0.2015 , syst]) - - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino300N_f1"', '"Gluino300N"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino400N_f1"', '"Gluino400N"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino500N_f1"', '"Gluino500N"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino600N_f1"', '"Gluino600N"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino700N_f1"', '"Gluino700N"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino800N_f1"', '"Gluino800N"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino900N_f1"', '"Gluino900N"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino1000N_f1"','"Gluino1000N"',0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino1100N_f1"','"Gluino1100N"',0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino300N_f5"', '"Gluino300N"', 0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino400N_f5"', '"Gluino400N"', 0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino500N_f5"', '"Gluino500N"', 0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) -# launchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino600N_f5"', '"Gluino600N"', 0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino700N_f5"', '"Gluino700N"', 0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino800N_f5"', '"Gluino800N"', 0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino900N_f5"', '"Gluino900N"', 0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino1000N_f5"','"Gluino1000N"',0.5739 / 0.3029 , 0.3704 / 0.4955 , 0.0557 / 0.2015 , syst]) - -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino600Z_f1"' , '"Gluino600Z"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino700Z_f1"' , '"Gluino700Z"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Gluino800Z_f1"' , '"Gluino800Z"', 0.3029 / 0.3029 , 0.4955 / 0.4955 , 0.2015 / 0.2015 , syst]) - -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop130_2C"' , '"Stop130"', 0.0 / 0.1705 , 0.0 / 0.4868 , 1.0 / 0.3427 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop200_2C"' , '"Stop200"', 0.0 / 0.1705 , 0.0 / 0.4868 , 1.0 / 0.3427 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop300_2C"' , '"Stop300"', 0.0 / 0.1705 , 0.0 / 0.4868 , 1.0 / 0.3427 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop400_2C"' , '"Stop400"', 0.0 / 0.1705 , 0.0 / 0.4868 , 1.0 / 0.3427 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop500_2C"' , '"Stop500"', 0.0 / 0.1705 , 0.0 / 0.4868 , 1.0 / 0.3427 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop600_2C"' , '"Stop600"', 0.0 / 0.1705 , 0.0 / 0.4868 , 1.0 / 0.3427 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop700_2C"' , '"Stop700"', 0.0 / 0.1705 , 0.0 / 0.4868 , 1.0 / 0.3427 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop800_2C"' , '"Stop800"', 0.0 / 0.1705 , 0.0 / 0.4868 , 1.0 / 0.3427 , syst]) - - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop130"' , '"Stop130"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop200"' , '"Stop200"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop300"' , '"Stop300"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop400"' , '"Stop400"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop500"' , '"Stop500"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop600"' , '"Stop600"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop700"' , '"Stop700"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop800"' , '"Stop800"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop130N"' , '"Stop130N"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop200N"' , '"Stop200N"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop300N"' , '"Stop300N"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop400N"' , '"Stop400N"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop500N"' , '"Stop500N"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop600N"' , '"Stop600N"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop700N"' , '"Stop700N"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop800N"' , '"Stop800N"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop300Z"' , '"Stop300Z"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop400Z"' , '"Stop400Z"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) -# LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"Stop500Z"' , '"Stop500Z"', 0.1705 / 0.1705 , 0.4868 / 0.4868 , 0.3427 / 0.3427 , syst]) - - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"GMStau100"', '"GMStau100"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"GMStau126"', '"GMStau126"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"GMStau156"', '"GMStau156"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"GMStau200"', '"GMStau200"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"GMStau247"', '"GMStau247"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"GMStau308"', '"GMStau308"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"GMStau370"', '"GMStau370"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"GMStau432"', '"GMStau432"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"GMStau494"', '"GMStau494"' ,-1, -1, -1 , syst]) - - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"PPStau100"', '"PPStau100"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"PPStau126"', '"PPStau126"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"PPStau156"', '"PPStau156"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"PPStau200"', '"PPStau200"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"PPStau247"', '"PPStau247"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"PPStau308"', '"PPStau308"' ,-1, -1, -1 , syst]) - - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho08HyperK100"', '"DCRho08HyperK100"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho08HyperK121"', '"DCRho08HyperK121"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho08HyperK182"', '"DCRho08HyperK182"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho08HyperK242"', '"DCRho08HyperK242"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho08HyperK302"', '"DCRho08HyperK302"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho08HyperK350"', '"DCRho08HyperK350"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho08HyperK370"', '"DCRho08HyperK370"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho08HyperK390"', '"DCRho08HyperK390"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho08HyperK395"', '"DCRho08HyperK395"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho08HyperK400"', '"DCRho08HyperK400"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho08HyperK410"', '"DCRho08HyperK410"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho08HyperK420"', '"DCRho08HyperK420"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho08HyperK500"', '"DCRho08HyperK500"' ,-1, -1, -1 , syst]) - - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho12HyperK100"', '"DCRho12HyperK100"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho12HyperK182"', '"DCRho12HyperK182"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho12HyperK302"', '"DCRho12HyperK302"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho12HyperK500"', '"DCRho12HyperK500"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho12HyperK530"', '"DCRho12HyperK530"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho12HyperK570"', '"DCRho12HyperK570"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho12HyperK590"', '"DCRho12HyperK590"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho12HyperK595"', '"DCRho12HyperK595"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho12HyperK600"', '"DCRho12HyperK600"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho12HyperK610"', '"DCRho12HyperK610"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho12HyperK620"', '"DCRho12HyperK620"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho12HyperK700"', '"DCRho12HyperK700"' ,-1, -1, -1 , syst]) - - - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho16HyperK100"', '"DCRho16HyperK100"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho16HyperK182"', '"DCRho16HyperK182"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho16HyperK302"', '"DCRho16HyperK302"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho16HyperK500"', '"DCRho16HyperK500"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho16HyperK700"', '"DCRho16HyperK700"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho16HyperK730"', '"DCRho16HyperK730"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho16HyperK770"', '"DCRho16HyperK770"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho16HyperK790"', '"DCRho16HyperK790"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho16HyperK795"', '"DCRho16HyperK795"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho16HyperK800"', '"DCRho16HyperK800"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho16HyperK810"', '"DCRho16HyperK810"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho16HyperK820"', '"DCRho16HyperK820"' ,-1, -1, -1 , syst]) - LaunchOnCondor.SendCluster_Push(["ROOT", os.getcwd()+"/Analysis_Step6.C", '"ANALYSE"', InputPattern, '"DCRho16HyperK900"', '"DCRho16HyperK900"' ,-1, -1, -1 , syst]) - - -if len(sys.argv)==1: - print("Please pass in argument a number between 0 and 2") - print(" 0 - Submit the Core of the (TkOnly+TkTOF) Analysis --> submitting 2x 3 jobs") - print(" 1 - Run the control plot macro --> submitting 0 jobs") - print(" 2 - Run the Optimization macro based on best Exp Limit --> submitting 2xSignalPoints jobs") - print(" 3 - Run the exclusion plot macro --> submitting 0 jobs") - sys.exit() - -elif sys.argv[1]=='0': - print('ANALYSIS') - FarmDirectory = "FARM" - JobName = "HscpAnalysis" - LaunchOnCondor.Jobs_RunHere = 1 - LaunchOnCondor.SendCluster_Create(FarmDirectory, JobName) - LaunchOnCondor.SendCluster_Push(["FWLITE", os.getcwd()+"/Analysis_Step234.C", '"ANALYSE_DATA"' , 0, '"dedxASmi"' ,'"dedxHarm2"' , '"combined"', 0.0, 0.0, 0.0, 45, 1.5]) #TkOnly - LaunchOnCondor.SendCluster_Push(["FWLITE", os.getcwd()+"/Analysis_Step234.C", '"ANALYSE_SIGNAL"', 0, '"dedxASmi"' ,'"dedxHarm2"' , '"combined"', 0.0, 0.0, 0.0, 45, 1.5]) #TkOnly - LaunchOnCondor.SendCluster_Push(["FWLITE", os.getcwd()+"/Analysis_Step234.C", '"ANALYSE_MC"' , 0, '"dedxASmi"' ,'"dedxHarm2"' , '"combined"', 0.0, 0.0, 0.0, 45, 1.5]) #TkOnly - LaunchOnCondor.SendCluster_Push(["FWLITE", os.getcwd()+"/Analysis_Step234.C", '"ANALYSE_DATA"' , 2, '"dedxASmi"' ,'"dedxHarm2"' , '"combined"', 0.0, 0.0, 0.0, 45, 1.5]) #TkTOF - LaunchOnCondor.SendCluster_Push(["FWLITE", os.getcwd()+"/Analysis_Step234.C", '"ANALYSE_SIGNAL"', 2, '"dedxASmi"' ,'"dedxHarm2"' , '"combined"', 0.0, 0.0, 0.0, 45, 1.5]) #TkTOF - LaunchOnCondor.SendCluster_Push(["FWLITE", os.getcwd()+"/Analysis_Step234.C", '"ANALYSE_MC"' , 2, '"dedxASmi"' ,'"dedxHarm2"' , '"combined"', 0.0, 0.0, 0.0, 45, 1.5]) #TkTOF - LaunchOnCondor.SendCluster_Submit() - -elif sys.argv[1]=='1': - print('PLOTTING') - os.system('root Analysis_Step5.C++ -l -b -q') - - -elif sys.argv[1]=='2': - print('OPTIMIZATION') - FarmDirectory = "FARM" - JobName = "HscpLimits" - LaunchOnCondor.Jobs_RunHere = 1 - LaunchOnCondor.SendCluster_Create(FarmDirectory, JobName) -# ComputeLimits('"Results/dedxASmi/combined/Eta25/PtMin45/Type0/"', '""') -# ComputeLimits('"Results/dedxASmi/combined/Eta25/PtMin45/Type2/"', '""') -# ComputeLimits('"Results/dedxASmi/combined/Eta20/PtMin45/Type0/"', '""') -# ComputeLimits('"Results/dedxASmi/combined/Eta20/PtMin45/Type2/"', '""') - ComputeLimits('"Results/dedxASmi/combined/Eta15/PtMin45/Type0/"', '""') - ComputeLimits('"Results/dedxASmi/combined/Eta15/PtMin45/Type2/"', '""') - -# ComputeLimits('"Results/dedxASmi/combined/Eta25/PtMin45/Type0/"', '"_SystP"') -# ComputeLimits('"Results/dedxASmi/combined/Eta25/PtMin45/Type2/"', '"_SystP"') -# ComputeLimits('"Results/dedxASmi/combined/Eta25/PtMin45/Type0/"', '"_SystI"') -# ComputeLimits('"Results/dedxASmi/combined/Eta25/PtMin45/Type2/"', '"_SystI"') -# ComputeLimits('"Results/dedxASmi/combined/Eta25/PtMin45/Type0/"', '"_SystM"') -# ComputeLimits('"Results/dedxASmi/combined/Eta25/PtMin45/Type2/"', '"_SystM"') -# ComputeLimits('"Results/dedxASmi/combined/Eta25/PtMin45/Type0/"', '"_SystT"') -# ComputeLimits('"Results/dedxASmi/combined/Eta25/PtMin45/Type2/"', '"_SystT"') - LaunchOnCondor.SendCluster_Submit() - - -elif sys.argv[1]=='3': - print('EXCLUSION') -# os.system('root Analysis_Step6.C++\'(\"tmp\")\' -l -b -q') - os.system('sh Analysis_Step6.sh') -else: - print('Unknwon case: use an other argument or no argument to get help') - - - diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/LaunchOnCondor.py b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/LaunchOnCondor.py deleted file mode 100644 index c98ccce6134d9..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/LaunchOnCondor.py +++ /dev/null @@ -1,299 +0,0 @@ -#!/usr/bin/env python - -from __future__ import print_function -import urllib -import string -import os -import sys -import glob - -CopyRights = '####################################\n' -CopyRights += '# LaunchOnFarm Script #\n' -CopyRights += '# Loic.quertenmont@cern.ch #\n' -CopyRights += '# April 2010 #\n' -CopyRights += '####################################\n' - -Farm_Directories = [] -Path_Cmd = '' -Path_Shell = '' -Path_Log = '' -Path_Cfg = '' -Jobs_Count = 0 -Jobs_Name = '' -Jobs_Index = '' -Jobs_Seed = 0 -Jobs_NEvent =-1 -Jobs_Skip = 0 -Jobs_Inputs = [] -Jobs_FinalCmds = [] -Jobs_RunHere = 0 - -def CreateTheConfigFile(argv): - global Jobs_Name - global Jobs_Index - global Jobs_Count - global Jobs_Seed - global Jobs_Skip - global Jobs_NEvent - global Jobs_Inputs - global Jobs_FinalCmds - global Path_Cfg - global CopyRights - Path_Cfg = Farm_Directories[1]+Jobs_Index+Jobs_Name+'_cfg.py' - - config_file=open(argv[1],'r') - config_txt = '\n\n' + CopyRights + '\n\n' - config_txt += config_file.read() - config_file.close() - i = 2 - while i < len(argv)-1: - config_txt = config_txt.replace(argv[i],argv[i+1]) - i+=2 - - #Default Replacements - config_txt = config_txt.replace("XXX_I_XXX" ,"%04i"%Jobs_Count) - config_txt = config_txt.replace("XXX_PATH_XXX" ,os.getcwd()) - config_txt = config_txt.replace("XXX_OUTPUT_XXX" ,Jobs_Name) - config_txt = config_txt.replace("XXX_NAME_XXX" ,Jobs_Index+Jobs_Name) - config_txt = config_txt.replace("XXX_SEED_XXX" ,str(Jobs_Seed+Jobs_Count)) - config_txt = config_txt.replace("XXX_NEVENTS_XXX" ,str(Jobs_NEvent)) - config_txt = config_txt.replace("XXX_SKIP_XXX" ,str(Jobs_Skip)) - if Jobs_Count < len(Jobs_Inputs): - config_txt = config_txt.replace("XXX_INPUT_XXX" ,Jobs_Inputs[Jobs_Count]) - - config_file=open(Path_Cfg,'w') - config_file.write(config_txt) - config_file.close() - -def CreateTheShellFile(argv): - global Path_Shell - global Path_Cfg - global CopyRights - global Jobs_RunHere - global Jobs_FinalCmds - Path_Shell = Farm_Directories[1]+Jobs_Index+Jobs_Name+'.sh' - - function_argument='(' - for i in range(2,len(argv)): - function_argument+="%s" % argv[i] - if i != len(argv)-1: - function_argument+=', ' - function_argument+=')' - - shell_file=open(Path_Shell,'w') - shell_file.write('#! /bin/sh\n') - shell_file.write(CopyRights + '\n') - shell_file.write('export SCRAM_ARCH=slc5_amd64_gcc434\n') - shell_file.write('export BUILD_ARCH=slc5_amd64_gcc434\n') - shell_file.write('export VO_CMS_SW_DIR=/nfs/soft/cms\n') - #shell_file.write('source /nfs/soft/cms/cmsset_default.sh\n') - shell_file.write('cd ' + os.getcwd() + '\n') - shell_file.write('eval `scramv1 runtime -sh`\n') - - if argv[0]=='BASH': - if Jobs_RunHere==0: - shell_file.write('cd -\n') - shell_file.write(argv[1] + " %s\n" % function_argument) - elif argv[0]=='ROOT': - if Jobs_RunHere==0: - shell_file.write('cd -\n') - shell_file.write('source setstandaloneroot.sh\n') - shell_file.write('root -l -b << EOF\n') - shell_file.write(' TString makeshared(gSystem->GetMakeSharedLib());\n') - shell_file.write(' TString dummy = makeshared.ReplaceAll("-W ", "");\n') - shell_file.write(' TString dummy = makeshared.ReplaceAll("-Wshadow ", "");\n') - shell_file.write(' gSystem->SetMakeSharedLib(makeshared);\n') - shell_file.write(' .x %s+' % argv[1] + function_argument + '\n') -# shell_file.write("root -l -b -q %s" % argv[1] + "+'%s'\n" % function_argument) - shell_file.write(' .q\n') - shell_file.write('EOF\n\n') - elif argv[0]=='FWLITE': - if Jobs_RunHere==0: - shell_file.write('cd -\n') -# shell_file.write('eval `scramv1 runtime -sh`\n') - shell_file.write('root -l -b << EOF\n') - shell_file.write(' TString makeshared(gSystem->GetMakeSharedLib());\n') - shell_file.write(' TString dummy = makeshared.ReplaceAll("-W ", "");\n') - shell_file.write(' TString dummy = makeshared.ReplaceAll("-Wshadow ", "");\n') - shell_file.write(' gSystem->SetMakeSharedLib(makeshared);\n') - shell_file.write(' gSystem->SetIncludePath("-I$ROOFITSYS/include");\n') - shell_file.write(' gSystem->Load("libFWCoreFWLite");\n') - shell_file.write(' FWLiteEnabler::enable();\n') - shell_file.write(' gSystem->Load("libDataFormatsFWLite.so");\n') - shell_file.write(' gSystem->Load("libAnalysisDataFormatsSUSYBSMObjects.so");\n') - shell_file.write(' gSystem->Load("libDataFormatsVertexReco.so");\n') - shell_file.write(' gSystem->Load("libDataFormatsHepMCCandidate.so");\n') - shell_file.write(' gSystem->Load("libPhysicsToolsUtilities.so");\n') - shell_file.write(' .x %s+' % argv[1] + function_argument + '\n') - shell_file.write(' .q\n') - shell_file.write('EOF\n\n') - elif argv[0]=='CMSSW': - CreateTheConfigFile(argv); - if Jobs_RunHere==0: - shell_file.write('cd -\n') - shell_file.write('cmsRun ' + os.getcwd() + '/'+Path_Cfg + '\n') - else: - print() #Program to use is not specified... Guess it is bash command - shell_file.write('#Program to use is not specified... Guess it is bash command\n') - shell_file.write(argv[1] + " %s\n" % function_argument) - - for i in range(len(Jobs_FinalCmds)): - shell_file.write(Jobs_FinalCmds[i]+'\n') - shell_file.write('mv '+ Jobs_Name+'* '+os.getcwd()+'/'+Farm_Directories[3]+'\n') - shell_file.close() - os.system("chmod 777 "+Path_Shell) - - -def CreateTheCmdFile(): - global Path_Cmd - global CopyRights - Path_Cmd = Farm_Directories[1]+Jobs_Name+'.cmd' - cmd_file=open(Path_Cmd,'w') - cmd_file.write(CopyRights + '\n') - cmd_file.write('Universe = vanilla\n') - cmd_file.write('Environment = CONDORJOBID=$(Process)\n') - cmd_file.write('notification = Error\n') - #cmd_file.write('requirements = (CMSFARM=?=True)&&(Memory > 200)\n') - cmd_file.write('requirements = (Memory > 200)\n') - cmd_file.write('should_transfer_files = YES\n') - cmd_file.write('when_to_transfer_output = ON_EXIT\n') - cmd_file.close() - -def AddJobToCmdFile(): - global Path_Shell - global Path_Cmd - global Path_Log - Path_Log = Farm_Directories[2]+Jobs_Index+Jobs_Name - cmd_file=open(Path_Cmd,'a') - cmd_file.write('\n') - cmd_file.write('Executable = %s\n' % Path_Shell) - cmd_file.write('output = %s.out\n' % Path_Log) - cmd_file.write('error = %s.err\n' % Path_Log) - cmd_file.write('log = %s.log\n' % Path_Log) - cmd_file.write('Queue 1\n') - cmd_file.close() - -def CreateDirectoryStructure(FarmDirectory): - global Jobs_Name - global Farm_Directories - Farm_Directories = [FarmDirectory+'/', FarmDirectory+'/inputs/', FarmDirectory+'/logs/', FarmDirectory+'/outputs/'] - for i in range(0,len(Farm_Directories)): - if os.path.isdir(Farm_Directories[i]) == False: - os.system('mkdir ' + Farm_Directories[i]) - -def SendCluster_LoadInputFiles(path, NJobs): - global Jobs_Inputs - input_file = open(path,'r') - input_lines = input_file.readlines() - input_file.close() - #input_lines.sort() - - BlockSize = (len(input_lines)/NJobs) - LineIndex = 0 - JobIndex = 0 - BlockIndex = 0 - Jobs_Inputs = [""] - while LineIndex < len(input_lines): - Jobs_Inputs[JobIndex] += input_lines[LineIndex] - LineIndex +=1 - BlockIndex+=1 - if BlockIndex>BlockSize: - BlockIndex = 0 - JobIndex += 1 - Jobs_Inputs.append("") - return JobIndex+1 - -def SendCluster_Create(FarmDirectory, JobName): - global Jobs_Name - global Jobs_Count - global Farm_Directories - Jobs_Name = JobName - Jobs_Count = 0 - CreateDirectoryStructure(FarmDirectory) - CreateTheCmdFile() - -def SendCluster_Push(Argv): - global Farm_Directories - global Jobs_Count - global Jobs_Index - global Path_Shell - global Path_Log - - Jobs_Index = "%04i_" % Jobs_Count - if Jobs_Count==0 and (Argv[0]=="ROOT" or Argv[0]=="FWLITE"): - #First Need to Compile the macro --> Create a temporary shell path with no arguments - print("Compiling the Macro...") - CreateTheShellFile([Argv[0],Argv[1]]) - os.system('sh '+Path_Shell) - os.system('rm '+Path_Shell) - print("Getting the jobs...") - print(Argv) - CreateTheShellFile(Argv) - AddJobToCmdFile() - Jobs_Count = Jobs_Count+1 - -def SendCluster_Submit(): - global CopyRights - global Jobs_Count - global Path_Cmd - os.system("condor_submit " + Path_Cmd) - print('\n'+CopyRights) - print('%i Job(s) has/have been submitted on the Computing Cluster' % Jobs_Count) - -def SendSingleJob(FarmDirectory, JobName, Argv): - SendCluster_Create(FarmDirectory, JobName, Argv) - SendCluster_Push(FarmDirectory, JobName, Argv) - SendCluster_Submit(FarmDirectory, JobName,Argv) - -def SendCMSJobs(FarmDirectory, JobName, ConfigFile, InputFiles, NJobs, Argv): - SendCluster_Create(FarmDirectory, JobName) - NJobs = SendCluster_LoadInputFiles(InputFiles, NJobs) - for i in range(NJobs): - LaunchOnCondor.SendCluster_Push (["CMSSW", ConfigFile]) - LaunchOnCondor.SendCluster_Submit() - - - -def GetListOfFiles(Prefix, InputPattern, Suffix): - List = sorted(glob.glob(InputPattern)) - for i in range(len(List)): - List[i] = Prefix + List[i] + Suffix - return List - -def SendCMSMergeJob(FarmDirectory, JobName, InputFiles, OutputFile, KeepStatement): - SendCluster_Create(FarmDirectory, JobName) - Temp_Cfg = Farm_Directories[1]+Jobs_Index+Jobs_Name+'_TEMP_cfg.py' - - if len(InputFiles)==0: - print('Empty InputFile List for Job named "%s", Job will not be submitted' % JobName) - return - - InputFilesString = "" - for i in range(len(InputFiles)): - InputFilesString += " " + InputFiles[i] + '\n' - - cfg_file=open(Temp_Cfg,'w') - cfg_file.write('import FWCore.ParameterSet.Config as cms\n') - cfg_file.write('process = cms.Process("Merge")\n') - cfg_file.write('\n') - cfg_file.write('process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) )\n') - cfg_file.write('process.load("FWCore.MessageService.MessageLogger_cfi")\n') - cfg_file.write('\n') - cfg_file.write('process.MessageLogger.cerr.FwkReport.reportEvery = 50000\n') - cfg_file.write('process.source = cms.Source("PoolSource",\n') - cfg_file.write(' fileNames = cms.untracked.vstring(\n') - cfg_file.write('%s' % InputFilesString) - cfg_file.write(' )\n') - cfg_file.write(')\n') - cfg_file.write('\n') - cfg_file.write('process.OUT = cms.OutputModule("PoolOutputModule",\n') - cfg_file.write(' outputCommands = cms.untracked.vstring(%s),\n' % KeepStatement) - cfg_file.write(' fileName = cms.untracked.string(%s)\n' % OutputFile) - cfg_file.write(')\n') - cfg_file.write('\n') - cfg_file.write('process.endPath = cms.EndPath(process.OUT)\n') - cfg_file.close() - SendCluster_Push (["CMSSW", Temp_Cfg]) - SendCluster_Submit() - os.system('rm '+ Temp_Cfg) - diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/gluino_XSec.txt b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/gluino_XSec.txt deleted file mode 100644 index 7cfe569c0b0c8..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/gluino_XSec.txt +++ /dev/null @@ -1,41 +0,0 @@ - 300.000000 6.580000E+01 7.553474E+01 5.742197E+01 - 320.000000 4.480000E+01 5.146393E+01 3.883067E+01 - 340.000000 3.100000E+01 3.566432E+01 2.678981E+01 - 360.000000 2.170000E+01 2.512864E+01 1.876433E+01 - 380.000000 1.550000E+01 1.804830E+01 1.338010E+01 - 400.000000 1.120000E+01 1.304305E+01 9.580894E+00 - 420.000000 8.150000E+00 9.556500E+00 6.973463E+00 - 440.000000 6.010000E+00 7.044302E+00 5.091237E+00 - 460.000000 4.470000E+00 5.271630E+00 3.788946E+00 - 480.000000 3.360000E+00 3.988566E+00 2.845079E+00 - 500.000000 2.540000E+00 3.018432E+00 2.130996E+00 - 520.000000 1.930000E+00 2.308958E+00 1.626191E+00 - 540.000000 1.480000E+00 1.773087E+00 1.243271E+00 - 560.000000 1.140000E+00 1.374688E+00 9.589442E-01 - 580.000000 8.880000E-01 1.070057E+00 7.381439E-01 - 600.000000 6.930000E-01 8.414255E-01 5.751390E-01 - 620.000000 5.430000E-01 6.640146E-01 4.515518E-01 - 640.000000 4.280000E-01 5.237697E-01 3.522239E-01 - 660.000000 3.390000E-01 4.145975E-01 2.787396E-01 - 680.000000 2.690000E-01 3.315876E-01 2.208681E-01 - 700.000000 2.140000E-01 2.657578E-01 1.759448E-01 - 720.000000 1.720000E-01 2.134368E-01 1.397393E-01 - 740.000000 1.370000E-01 1.716366E-01 1.116011E-01 - 760.000000 1.110000E-01 1.387783E-01 8.996432E-02 - 780.000000 8.950000E-02 1.127959E-01 7.195999E-02 - 800.000000 7.250000E-02 9.142058E-02 5.827633E-02 - 820.000000 5.880000E-02 7.469319E-02 4.733762E-02 - 840.000000 4.790000E-02 6.086165E-02 3.809243E-02 - 860.000000 3.910000E-02 4.999024E-02 3.105941E-02 - 880.000000 3.200000E-02 4.092504E-02 2.538284E-02 - 900.000000 2.620000E-02 3.378647E-02 2.054873E-02 - 920.000000 2.150000E-02 2.791464E-02 1.688133E-02 - 940.000000 1.760000E-02 2.286025E-02 1.379495E-02 - 960.000000 1.450000E-02 1.896689E-02 1.136371E-02 - 980.000000 1.190000E-02 1.560576E-02 9.251707E-03 - 1000.000000 9.870000E-03 1.300309E-02 7.653260E-03 - 1020.000000 8.150000E-03 1.082652E-02 6.325800E-03 - 1040.000000 6.740000E-03 8.957356E-03 5.168580E-03 - 1060.000000 5.590000E-03 7.480351E-03 4.283127E-03 - 1080.000000 4.640000E-03 6.255235E-03 3.515531E-03 - 1100.000000 3.860000E-03 5.204033E-03 2.919556E-03 diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/nSigma.C b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/nSigma.C deleted file mode 100644 index 55207b3a2c52d..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/nSigma.C +++ /dev/null @@ -1,99 +0,0 @@ -//-------------------------------------------------------------------------------------------- -// -// nSigma.cc -// v1.1, updated by Greg Landsberg 5/21/09 -// -// This Root code computes the probability for the expectd background Bkgr with the FRACTIONAL -// uncertainty sFfrac (i.e., B = Bkgr*(1 +/- sBfrac)) to fluctuate to or above the -// observed number of events nobs -// -// To find 3/5 sigma evidence/discovery points, one should use nobs = int(), -// where is the expected mean of the signal + background. -// -// Usage: nSigma(Double_t Bkgr, Int_t nobs, Double_t sBfrac) returns the one sided probability -// of an upward backround fluctuations, expressed in Gaussian sigmas. It is suggested to run -// this code in the compiled mode, i.e. .L nSigma.cc++ -// -// 5 sigma corresponds to the p-value of 2.85E-7; 3 sigma corresponds to p-value of 1.35E-3 -// -//--------------------------------------------------------------------------------------------- -#include "TMath.h" -#include "TF1.h" - -Double_t nSigma(Double_t Bkgr, Int_t nobs, Double_t sBfrac); -Double_t Poisson(Double_t Mu, Int_t n); -Double_t PoissonAve(Double_t Mu, Int_t n, Double_t ErrMu); -Double_t Inner(Double_t *x, Double_t *par); -Double_t ErfcInverse(Double_t x); - -static const Double_t Eps = 1.e-9; - -Double_t nSigma(Double_t Bkgr, Int_t nobs, Double_t sBfrac) { - //caluculate poisson probability - Double_t probLess = 0.; - Int_t i = nobs; - Double_t eps = 0; - do { - eps = 2.*PoissonAve(Bkgr, i++, sBfrac*Bkgr); - probLess += eps; - } while (eps > 0.); -// - return TMath::Sqrt(2.)*ErfcInverse(probLess); -} - -Double_t Poisson(Double_t Mu, Int_t n) -{ - Double_t logP; -// - logP = -Mu + n*TMath::Log(Mu); - for (Int_t i = 2; i <= n; i++) logP -= TMath::Log((Double_t) i); -// - return TMath::Exp(logP); -} - -Double_t PoissonAve(Double_t Mu, Int_t n, Double_t ErrMu) -{ - Double_t par[3], retval; - par[0]=Mu; // background value - par[1]=ErrMu; // background error - par[2]=n; // n - TF1 *in = new TF1("Inner",Inner,0.,Mu + 5.*ErrMu,3); - Double_t low = Mu > 5.*ErrMu ? Mu - 5.*ErrMu : 0.; - if (ErrMu < Eps) { - Double_t x[1]; - x[0] = Mu; - par[1] = 1./sqrt(2.*TMath::Pi()); - retval = Inner(x,par); - } else retval = in->Integral(low,Mu+5.*ErrMu,par); - delete in; - return retval; -} - -Double_t Inner(Double_t *x, Double_t *par) -{ - Double_t B, sB; - B = par[0]; - sB = par[1]; - Int_t n = par[2]; -// - return 1./sqrt(2.*TMath::Pi())/sB*exp(-(x[0]-B)*(x[0]-B)/2./sB/sB)*Poisson(x[0],n); -} - -Double_t ErfcInverse(Double_t x) -{ - Double_t xmin = 0., xmax = 20.; - Double_t sig = xmin; - if (x >=1) return sig; -// - do { - Double_t erf = TMath::Erfc(sig); - if (erf > x) { - xmin = sig; - sig = (sig+xmax)/2.; - } else { - xmax = sig; - sig = (xmin + sig)/2.; - } - } while (xmax - xmin > Eps); - return sig; -} \ No newline at end of file diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/roostats_cl95.C b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/roostats_cl95.C deleted file mode 100644 index b94dcb091503a..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/roostats_cl95.C +++ /dev/null @@ -1,2065 +0,0 @@ -static const char* desc = -"=====================================================================\n" -"| \n" -"|\033[1m roostats_cl95.C version 1.15 \033[0m\n" -"| \n" -"| Standard c++ routine for 95% C.L. limit calculation \n" -"| for cross section in a 'counting experiment' \n" -"| Fully backwards-compatible with the CL95 macro \n" -"| \n" -"| also known as 'CL95 with RooStats' \n" -"| \n" -"|\033[1m Gena Kukartsev, Stefan Schmitz, Gregory Schott \033[0m\n" -"|\033[1m Lorenzo Moneta (CLs core) \033[0m\n" -"|\033[1m Michael Segala (Feldman-Cousins) \033[0m\n" -"| \n" -"| July 2010: first version \n" -"| March 2011: restructuring, interface change, expected limits \n" -"| May 2011: added expected limit median, \n" -"| 68%, 95% quantile bands and actual coverage \n" -"| July 2011: added CLs observed and expected limits \n" -"| added option to run using Feldman Cousins \n" -"| \n" -"=====================================================================\n" -" \n" -"Prerequisites: \n" -" ROOT version 5.30.00 or higher \n" -" \n" -" \n" -" \n" -"The code should be compiled in ROOT: \n" -" \n" -"root -l \n" -" \n" -".L roostats_cl95.C+ \n" -" \n" -"Usage: \n" -" Double_t limit = roostats_cl95(ilum, slum, eff, seff, bck, sbck, n, gauss = false, nuisanceModel, method, plotFileName, seed); \n" -" LimitResult expected_limit = roostats_clm(ilum, slum, eff, seff, bck, sbck, ntoys, nuisanceModel, method, seed); \n" -" Double_t average_limit = roostats_cla(ilum, slum, eff, seff, bck, sbck, nuisanceModel, method, seed); \n" -" \n" -" LimitResult limit = roostats_limit(ilum, slum, eff, seff, bck, sbck, n, gauss = false, nuisanceModel, method, plotFileName, seed); \n" -" Double_t obs_limit = limit.GetObservedLimit(); \n" -" Double_t exp_limit = limit.GetExpectedLimit(); \n" -" Double_t exp_up = limit.GetOneSigmaHighRange(); \n" -" Double_t exp_down = limit.GetOneSigmaLowRange(); \n" -" Double_t exp_2up = limit.GetTwoSigmaHighRange(); \n" -" Double_t exp_2down = limit.GetTwoSigmaLowRange(); \n" -" \n" -"Inputs: \n" -" ilum - Nominal integrated luminosity (pb^-1) \n" -" slum - Absolute error on the integrated luminosity \n" -" eff - Nominal value of the efficiency times \n" -" acceptance (in range 0 to 1) \n" -" seff - Absolute error on the efficiency times \n" -" acceptance \n" -" bck - Nominal value of the background estimate \n" -" sbck - Absolute error on the background \n" -" n - Number of observed events (not used for the \n" -" expected limit) \n" -" ntoys - Number of pseudoexperiments to perform for \n" -" expected limit calculation) \n" -" gauss - if true, use Gaussian statistics for signal \n" -" instead of Poisson; automatically false \n" -" for n = 0. \n" -" Always false for expected limit calculations \n" -" nuisanceModel - distribution function used in integration over\n" -" nuisance parameters: \n" -" 0 - Gaussian (default), 1 - lognormal, \n" -" 2 - gamma; \n" -" (automatically 0 when gauss == true) \n" -" method - method of statistical inference: \n" -" \"bayesian\" - Bayesian with numeric \n" -" integration (default), \n" -" \"mcmc\" - another implementation of \n" -" Bayesian, not optimized, \n" -" to be used for cross checks \n" -" only! \n" -" \"cls\" - CLs observed limit. We suggest\n" -" using the dedicated interface \n" -" roostats_cls() instead \n" -" \"fc\" - Feldman Cousins with numeric \n" -" integration, \n" -" \"workspace\" - only create workspace and save\n" -" to file, no interval calculation\n" -" plotFileName - file name for the control plot to be created \n" -" file name extension will define the format, \n" -" is the default value, \n" -" specify empty string if you do not want \n" -" the plot to be created (saves time) \n" -" seed - seed for random number generation, \n" -" specify 0 for unique irreproducible seed \n" -" \n" -" \n" -"The statistics model in this routine: the routine addresses the task \n" -"of a Bayesian evaluation of limits for a one-bin counting experiment \n" -"with systematic uncertainties on luminosity and efficiency for the \n" -"signal and a global uncertainty on the expected background (implying \n" -"no correlated error on the luminosity for signal and background, \n" -"which will not be suitable for all use cases!). The observable is the\n" -"measured number of events. \n" -" \n" -"For more details see \n" -" https://twiki.cern.ch/twiki/bin/view/CMS/RooStatsCl95 \n" -" \n" -"\033[1m Note! \033[0m\n" -"If you are running nonstandard ROOT environment, e.g. in CMSSW, \n" -"you need to make sure that the RooFit and RooStats header files \n" -"can be found since they might be in a nonstandard location. \n" -" \n" -"For CMSSW_4_2_0_pre8 and later, add the following line to your \n" -"rootlogon.C: \n" -" gSystem -> SetIncludePath( \"-I$ROOFITSYS/include\" ); \n"; - - -#include - -#include "TCanvas.h" -#include "TMath.h" -#include "TRandom3.h" -#include "TUnixSystem.h" -#include "TStopwatch.h" -#include "TFile.h" -#include "TGraphErrors.h" -#include "TGraphAsymmErrors.h" -#include "TLine.h" - -#include "RooPlot.h" -#include "RooRealVar.h" -#include "RooProdPdf.h" -#include "RooWorkspace.h" -#include "RooDataSet.h" -#include "RooFitResult.h" -#include "RooRandom.h" - -#include "RooStats/ModelConfig.h" -#include "RooStats/SimpleInterval.h" -#include "RooStats/BayesianCalculator.h" -#include "RooStats/MCMCCalculator.h" -#include "RooStats/MCMCInterval.h" -#include "RooStats/MCMCIntervalPlot.h" -#include "RooStats/FeldmanCousins.h" -#include "RooStats/PointSetInterval.h" -#include "RooStats/ConfidenceBelt.h" -#include "RooStats/ProposalHelper.h" -#include "RooStats/HybridCalculator.h" -#include "RooStats/FrequentistCalculator.h" -#include "RooStats/ToyMCSampler.h" -#include "RooStats/HypoTestPlot.h" -#include "RooStats/NumEventsTestStat.h" -#include "RooStats/ProfileLikelihoodTestStat.h" -#include "RooStats/SimpleLikelihoodRatioTestStat.h" -#include "RooStats/RatioOfProfiledLikelihoodsTestStat.h" -#include "RooStats/MaxLikelihoodEstimateTestStat.h" -#include "RooStats/HypoTestInverter.h" -#include "RooStats/HypoTestInverterResult.h" -#include "RooStats/HypoTestInverterPlot.h" - -// FIXME: remove namespaces -using namespace RooFit; -using namespace RooStats; -using namespace std; - -class LimitResult; - -Double_t roostats_cl95(Double_t ilum, Double_t slum, - Double_t eff, Double_t seff, - Double_t bck, Double_t sbck, - Int_t n, - Bool_t gauss = kFALSE, - Int_t nuisanceModel = 0, - std::string method = "bayesian", - std::string plotFileName = "plot_cl95.pdf", - UInt_t seed = 12345, - LimitResult * pLimitResult = 0); - -LimitResult roostats_clm(Double_t ilum, Double_t slum, - Double_t eff, Double_t seff, - Double_t bck, Double_t sbck, - Int_t nit = 200, Int_t nuisanceModel = 0, - std::string method = "bayesian", - UInt_t seed = 12345); - -// legacy support: use roostats_clm() instead -Double_t roostats_cla(Double_t ilum, Double_t slum, - Double_t eff, Double_t seff, - Double_t bck, Double_t sbck, - Int_t nuisanceModel = 0, - std::string method = "bayesian", - UInt_t seed = 12345); - - - - -// ---> implementation below -------------------------------------------- - - -class LimitResult{ - - friend class CL95Calc; - -public: - LimitResult(): - _observed_limit(0), - _observed_limit_error(0), - _expected_limit(0), - _low68(0), - _high68(0), - _low95(0), - _high95(0), - _cover68(0), - _cover95(0){}; - - // copy constructor - LimitResult(const LimitResult & other): - _observed_limit(other._observed_limit), - _observed_limit_error(other._observed_limit_error), - _expected_limit(other._expected_limit), - _low68(other._low68), - _high68(other._high68), - _low95(other._low95), - _high95(other._high95), - _cover68(other._cover68), - _cover95(other._cover95){} - - ~LimitResult(){}; - - Double_t GetObservedLimit(){return _observed_limit;}; - Double_t GetObservedLimitError(){return _observed_limit_error;}; - Double_t GetExpectedLimit(){return _expected_limit;}; - - Double_t GetOneSigmaLowRange(){return _low68;}; - Double_t GetOneSigmaHighRange(){return _high68;}; - Double_t GetOneSigmaCoverage(){return _cover68;}; - - Double_t GetTwoSigmaLowRange(){return _low95;}; - Double_t GetTwoSigmaHighRange(){return _high95;}; - Double_t GetTwoSigmaCoverage(){return _cover95;}; - -private: - Double_t _observed_limit; - Double_t _observed_limit_error; - Double_t _expected_limit; - Double_t _low68; - Double_t _high68; - Double_t _low95; - Double_t _high95; - Double_t _cover68; - Double_t _cover95; -}; - - -class CL95Calc{ - -public: - CL95Calc(); - CL95Calc( UInt_t seed ); - ~CL95Calc(); - - RooWorkspace * makeWorkspace(Double_t ilum, Double_t slum, - Double_t eff, Double_t seff, - Double_t bck, Double_t sbck, - Bool_t gauss, - Int_t nuisanceModel); - RooWorkspace * getWorkspace(){ return ws;} - - RooAbsData * makeData(Int_t n); - - Double_t cl95(std::string method = "bayesian", LimitResult * result = 0); - - Double_t cla( Double_t ilum, Double_t slum, - Double_t eff, Double_t seff, - Double_t bck, Double_t sbck, - Int_t nuisanceModel, - std::string method ); - - LimitResult clm(Double_t ilum, Double_t slum, - Double_t eff, Double_t seff, - Double_t bck, Double_t sbck, - Int_t nit = 200, Int_t nuisanceModel = 0, - std::string method = "bayesian"); - - int makePlot( std::string method, - std::string plotFileName = "plot_cl95.pdf" ); - - Double_t FC_calc(int Nbins, float conf_int, float ULprecision, bool UseAdaptiveSampling = true, bool CreateConfidenceBelt = true); - -private: - - void init( UInt_t seed ); // to be called by constructor - - // methods - Double_t GetRandom( std::string pdf, std::string var ); - Long64_t LowBoundarySearch(std::vector * cdf, Double_t value); - Long64_t HighBoundarySearch(std::vector * cdf, Double_t value); - MCMCInterval * GetMcmcInterval(double conf_level, - int n_iter, - int n_burn, - double left_side_tail_fraction, - int n_bins); - void makeMcmcPosteriorPlot( std::string filename ); - double printMcmcUpperLimit( std::string filename = "" ); - - Double_t RoundUpperBound(Double_t bound); - - // data members - RooWorkspace * ws; - RooStats::ModelConfig SbModel; - RooStats::ModelConfig BModel; - RooAbsData * data; - BayesianCalculator * bcalc; - RooStats::SimpleInterval * sInt; - double nsig_rel_err; - double nbkg_rel_err; - Int_t _nuisance_model; - - // attributes - bool hasSigErr; - bool hasBgErr; - - // for Bayesian MCMC calculation - MCMCInterval * mcInt; - - // for Feldman-Cousins Calculator - FeldmanCousins * fcCalc; - - // random numbers - TRandom3 r; - - // expected limits - Double_t _expected_limit; - Double_t _low68; - Double_t _high68; - Double_t _low95; - Double_t _high95; - -}; - - - -// CLs limit calculator -std::vector -GetClsLimits(RooWorkspace * pWs, - const char * modelSBName = "SbModel", - const char * modelBName = "BModel", - const char * dataName = "observed_data", - int calculatorType = 0, // calculator type - int testStatType = 3, // test stat type - bool useCls = true, - int npoints = 10, - double poimin = 1, // use default is poimin >= poimax - double poimax = 0, - int ntoys=10000, - std::string suffix = "test"); - - - -// default constructor -CL95Calc::CL95Calc(){ - init(0); -} - - -CL95Calc::CL95Calc(UInt_t seed){ - init(seed); -} - - -void CL95Calc::init(UInt_t seed){ - ws = new RooWorkspace("ws"); - data = 0; - - sInt = 0; - bcalc = 0; - mcInt = 0; - fcCalc = 0; - SbModel.SetName("SbModel"); - SbModel.SetTitle("ModelConfig for roostats_cl95"); - - nsig_rel_err = -1.0; // default non-initialized value - nbkg_rel_err = -1.0; // default non-initialized value - - // set random seed - if (seed == 0){ - r.SetSeed(); - UInt_t _seed = r.GetSeed(); - UInt_t _pid = gSystem->GetPid(); - std::cout << "[CL95Calc]: random seed: " << _seed << std::endl; - std::cout << "[CL95Calc]: process ID: " << _pid << std::endl; - _seed = 31*_seed+_pid; - std::cout << "[CL95Calc]: new random seed (31*seed+pid): " << _seed << std::endl; - r.SetSeed(_seed); - - // set RooFit random seed (it has a private copy) - RooRandom::randomGenerator()->SetSeed(_seed); - } - else{ - std::cout << "[CL95Calc]: random seed: " << seed << std::endl; - r.SetSeed(seed); - - // set RooFit random seed (it has a private copy) - RooRandom::randomGenerator()->SetSeed(seed); - } - - // default Gaussian nuisance model - _nuisance_model = 0; - - // set default attributes - hasSigErr = false; - hasBgErr = false; -} - - -CL95Calc::~CL95Calc(){ - delete ws; - delete data; - delete sInt; - delete bcalc; - delete mcInt; - delete fcCalc; -} - - -RooWorkspace * CL95Calc::makeWorkspace(Double_t ilum, Double_t slum, - Double_t eff, Double_t seff, - Double_t bck, Double_t sbck, - Bool_t gauss, - Int_t nuisanceModel){ - - if ( bck>0.0 && (sbck/bck)<5.0 ){ - // check that bck is not too close to zero, - // so lognormal and gamma modls still make sense - std::cout << "[CL95Calc]: checking background expectation and its uncertainty - ok" << std::endl; - _nuisance_model = nuisanceModel; - } - else{ - _nuisance_model = 0; - std::cout << "[CL95Calc]: background expectation is too close to zero compared to its uncertainty" << std::endl; - std::cout << "[CL95Calc]: switching to the Gaussian nuisance model" << std::endl; - - // FIXME: is this appropriate fix for 0 bg expectation? - if (bck<0.001){ - bck = std::max(bck,sbck/1000.0); - } - } - - // Workspace - // RooWorkspace * ws = new RooWorkspace("ws",true); - - // observable: number of events - ws->factory( "n[0]" ); - - // integrated luminosity - ws->factory( "lumi[0]" ); - - // cross section - parameter of interest - ws->factory( "xsec[0]" ); - - // selection efficiency * acceptance - ws->factory( "efficiency[0]" ); - - // nuisance parameter: factor 1 with combined relative uncertainty - ws->factory( "nsig_nuis[1.0]" ); // will adjust range below - - // signal yield - ws->factory( "prod::nsig(lumi,xsec,efficiency, nsig_nuis)" ); - - // estimated background yield - ws->factory( "bkg_est[1.0]" ); - ws->factory( "lbkg_est[0]" ); // for special case of lognormal prior - - // nuisance parameter: factor 1 with background relative uncertainty - //ws->factory( "nbkg_nuis[1.0]" ); // will adjust range below - - // background yield - ws->factory( "nbkg[1.0]" ); // will adjust value and range below - - // core model: - ws->factory("sum::yield(nsig,nbkg)"); - if (gauss){ - // Poisson probability with mean signal+bkg - std::cout << "[CL95Calc]: creating Gaussian probability as core model..." << std::endl; - ws->factory( "Gaussian::model_core(n,yield,expr('sqrt(yield)',yield))" ); - } - else{ - // Poisson probability with mean signal+bkg - std::cout << "[CL95Calc]: creating Poisson probability as core model..." << std::endl; - ws->factory( "Poisson::model_core(n,yield)" ); - } - - - // systematic uncertainties - nsig_rel_err = sqrt(slum*slum/ilum/ilum+seff*seff/eff/eff); - nbkg_rel_err = sbck/bck; - if (nsig_rel_err > 1.0e-10) hasSigErr = true; - if (nbkg_rel_err > 1.0e-10) hasBgErr = true; - - if (_nuisance_model == 0){ // gaussian model for nuisance parameters - - std::cout << "[roostats_cl95]: Gaussian PDFs for nuisance parameters" << endl; - - // cumulative signal uncertainty - ws->factory( "nsig_sigma[0.1]" ); - ws->factory( "nsig_global[1.0,0.1,10.0]" ); // mean of the nsig nuisance par - if (hasSigErr){ - // non-zero overall signal sensitivity systematics: need to create - // the corresponding constraint term for the likelihood - std::cout << "[roostats_cl95]: non-zero systematics on overall signal sensitivity, creating constraint term" << endl; - ws->factory( "Gaussian::syst_nsig(nsig_nuis, nsig_global, nsig_sigma)" ); - } - // background uncertainty - ws->factory( "nbkg_sigma[0.1]" ); - if (hasBgErr){ - // non-zero background systematics: need to create - // the corresponding constraint term for the likelihood - std::cout << "[roostats_cl95]: non-zero background systematics, creating constraint term" << endl; - ws->factory( "Gaussian::syst_nbkg(nbkg, bkg_est, nbkg_sigma)" ); - } - - ws->var("nsig_sigma")->setVal(nsig_rel_err); - ws->var("nbkg_sigma")->setVal(sbck); - ws->var("nsig_global")->setConstant(kTRUE); - ws->var("nsig_sigma")->setConstant(kTRUE); - ws->var("nbkg_sigma")->setConstant(kTRUE); - } - else if (_nuisance_model == 1){// Lognormal model for nuisance parameters - // this is the "old" implementation of the lognormal model, better use - // the new one, nuisance_model=3 - - std::cout << "[roostats_cl95]: Lognormal PDFs for nuisance parameters" << endl; - - // cumulative signal uncertainty - ws->factory( "nsig_kappa[1.1]" ); - ws->factory( "nsig_global[1.0,0.1,10.0]" ); // mean of the nsig nuisance par - - if (hasSigErr){ - // non-zero overall signal sensitivity systematics: need to create - // the corresponding constraint term for the likelihood - std::cout << "[roostats_cl95]: non-zero systematics on overall signal sensitivity, creating constraint term" << endl; - ws->factory( "Lognormal::syst_nsig(nsig_nuis, nsig_global, nsig_kappa)" ); - } - - // background uncertainty - ws->factory( "nbkg_kappa[1.1]" ); - if (hasBgErr){ - // non-zero background systematics: need to create - // the corresponding constraint term for the likelihood - std::cout << "[roostats_cl95]: non-zero background systematics, creating constraint term" << endl; - ws->factory( "Lognormal::syst_nbkg(nbkg, bkg_est, nbkg_kappa)" ); - } - - ws->var("nsig_kappa")->setVal(1.0 + nsig_rel_err); - ws->var("nbkg_kappa")->setVal(1.0 + nbkg_rel_err); - ws->var("nsig_global")->setConstant(kTRUE); - ws->var("nsig_kappa")->setConstant(kTRUE); - ws->var("nbkg_kappa")->setConstant(kTRUE); - } - else if (_nuisance_model == 3){ - // - // Lognormal nuisance model implemented as Gaussian of - // a log of the parameter. The corresponding global observable - // is the log of the estimate for the parameter. - // - - std::cout << "[roostats_cl95]: Lognormal PDFs for nuisance parameters" << endl; - - // cumulative signal uncertainty - ws->factory( "lnsig_sigma[0.1]" ); - ws->factory( "nsig_global[0.0,-0.5,0.5]" ); // log of mean of the nsig nuisance par - //ws->factory( "Gaussian::syst_nsig(cexpr::lnsig('log(nsig_nuis)', nsig_nuis), nsig_global, lnsig_sigma)" ); - if (hasSigErr){ - // non-zero overall signal sensitivity systematics: need to create - // the corresponding constraint term for the likelihood - std::cout << "[roostats_cl95]: non-zero systematics on overall signal sensitivity, creating constraint term" << endl; - ws->factory( "Gaussian::syst_nsig(cexpr::lnsig('log(nsig_nuis)', nsig_nuis), nsig_global, lnsig_sigma)" ); - } - - // background uncertainty - ws->factory( "lnbkg_sigma[0.1]" ); - if (hasBgErr){ - // non-zero background systematics: need to create - // the corresponding constraint term for the likelihood - std::cout << "[roostats_cl95]: non-zero background systematics, creating constraint term" << endl; - ws->factory( "Gaussian::syst_nbkg(cexpr::lnbkg('log(nbkg)',nbkg), lbkg_est, lnbkg_sigma)" ); - } - - ws->var("lnsig_sigma")->setVal(nsig_rel_err); - ws->var("lnbkg_sigma")->setVal(nbkg_rel_err); - ws->var("nsig_global")->setConstant(kTRUE); - ws->var("lnsig_sigma")->setConstant(kTRUE); - ws->var("lnbkg_sigma")->setConstant(kTRUE); - } - else if (_nuisance_model == 2){ // Gamma model for nuisance parameters - - std::cout << "[roostats_cl95]: Gamma PDFs for nuisance parameters" << endl; - - // cumulative signal uncertainty - ws->factory( "nsig_global[1.0,0.1,10.0]" ); // mean of the nsig nuisance par - ws->factory( "nsig_rel_err[0.1, 0.0, 1.0]" ); - ws->factory( "expr::nsig_beta('nsig_rel_err*nsig_rel_err/nsig_global',nsig_rel_err,nsig_global)" ); - ws->factory( "expr::nsig_gamma('nsig_global*nsig_global/nsig_rel_err/nsig_rel_err+1.0',nsig_global,nsig_rel_err)" ); - ws->var("nsig_rel_err") ->setVal(nsig_rel_err); - if (hasSigErr){ - // non-zero overall signal sensitivity systematics: need to create - // the corresponding constraint term for the likelihood - std::cout << "[roostats_cl95]: non-zero systematics on overall signal sensitivity, creating constraint term" << endl; - ws->factory( "Gamma::syst_nsig(nsig_nuis, nsig_gamma, nsig_beta, 0.0)" ); - } - - // background uncertainty - //ws->factory( "nbkg_global[1.0]" ); // mean of the nbkg nuisance par - ws->factory( "nbkg_rel_err[0.1, 0.0, 1.0]" ); - ws->factory( "expr::nbkg_beta('nbkg_rel_err*nbkg_rel_err/bkg_est',nbkg_rel_err,bkg_est)" ); - ws->factory( "expr::nbkg_gamma('bkg_est*bkg_est/nbkg_rel_err/nbkg_rel_err+1.0',bkg_est,nbkg_rel_err)" ); - //ws->var("nbkg_global") ->setVal( bck ); - ws->var("nbkg_rel_err")->setVal(nbkg_rel_err); - if (hasBgErr){ - // non-zero background systematics: need to create - // the corresponding constraint term for the likelihood - std::cout << "[roostats_cl95]: non-zero background systematics, creating constraint term" << endl; - ws->factory( "Gamma::syst_nbkg(nbkg, nbkg_gamma, nbkg_beta, 0.0)" ); - } - - ws->var("nsig_rel_err")->setConstant(kTRUE); - ws->var("nsig_global")->setConstant(kTRUE); - ws->var("nbkg_rel_err")->setConstant(kTRUE); - //ws->var("nbkg_global")->setConstant(kTRUE); - - } - else{ - std::cout <<"[roostats_cl95]: undefined nuisance parameter model specified, exiting" << std::endl; - } - - // model with systematics - if (hasSigErr && hasBgErr){ - std::cout << "[roostats_cl95]: factoring in signal sensitivity and background rate systematics constraint terms" << endl; - ws->factory( "PROD::model(model_core, syst_nsig, syst_nbkg)" ); - ws->var("nsig_nuis") ->setConstant(kFALSE); // nuisance - ws->var("nbkg") ->setConstant(kFALSE); // nuisance - ws->factory( "PROD::nuis_prior(syst_nsig,syst_nbkg)" ); - } - else if (hasSigErr && !hasBgErr){ - std::cout << "[roostats_cl95]: factoring in signal sensitivity systematics constraint term" << endl; - ws->factory( "PROD::model(model_core, syst_nsig)" ); - ws->var("nsig_nuis") ->setConstant(kFALSE); // nuisance - ws->var("nbkg") ->setConstant(kTRUE); // nuisance - ws->factory( "PROD::nuis_prior(syst_nsig)" ); - } - else if (!hasSigErr && hasBgErr){ - std::cout << "[roostats_cl95]: factoring in background rate systematics constraint term" << endl; - ws->factory( "PROD::model(model_core, syst_nbkg)" ); - ws->var("nsig_nuis") ->setConstant(kTRUE); // nuisance - ws->var("nbkg") ->setConstant(kFALSE); // nuisance - ws->factory( "PROD::nuis_prior(syst_nbkg)" ); - } - else{ - ws->factory( "PROD::model(model_core)" ); - ws->var("nsig_nuis") ->setConstant(kTRUE); // nuisance - ws->var("nbkg") ->setConstant(kTRUE); // nuisance - } - - // flat prior for the parameter of interest - ws->factory( "Uniform::prior(xsec)" ); - - // parameter values - ws->var("lumi") ->setVal(ilum); - ws->var("efficiency")->setVal(eff); - ws->var("bkg_est") ->setVal(bck); - ws->var("lbkg_est") ->setVal(TMath::Log(bck)); - ws->var("xsec") ->setVal(0.0); - ws->var("nsig_nuis") ->setVal(1.0); - ws->var("nbkg") ->setVal(bck); - - // set some parameters as constants - ws->var("lumi") ->setConstant(kTRUE); - ws->var("efficiency")->setConstant(kTRUE); - ws->var("bkg_est") ->setConstant(kTRUE); - ws->var("lbkg_est") ->setConstant(kTRUE); - ws->var("n") ->setConstant(kFALSE); // observable - ws->var("xsec") ->setConstant(kFALSE); // parameter of interest - //ws->var("nsig_nuis") ->setConstant(kFALSE); // nuisance - //ws->var("nbkg") ->setConstant(kFALSE); // nuisance - - // floating parameters ranges - // crude estimates! Need to know data to do better - ws->var("n") ->setRange( 0.0, bck+(5.0*sbck)+10.0); // ad-hoc range for obs - ws->var("xsec") ->setRange( 0.0, 15.0*(1.0+nsig_rel_err)/ilum/eff ); // ad-hoc range for POI - ws->var("nsig_nuis")->setRange( std::max(0.0, 1.0 - 5.0*nsig_rel_err), 1.0 + 5.0*nsig_rel_err); - ws->var("nbkg") ->setRange( std::max(0.0, bck - 5.0*sbck), bck + 5.0*sbck); - ws->var("bkg_est") ->setRange( std::max(0.0, bck - 5.0*sbck), bck + 5.0*sbck); - // FIXME: check for zeros in the log - ws->var("lbkg_est") ->setRange( TMath::Log(ws->var("bkg_est")->getMin()), TMath::Log(ws->var("bkg_est")->getMin())); - - // Definition of observables and parameters of interest - - // observables - RooArgSet obs(*ws->var("n"), "obs"); - - // global observables - //RooArgSet globalObs(*ws->var("nsig_global"), *ws->var("bkg_est"), "global_obs"); - //RooArgSet globalObs(*ws->var("nsig_global"), "global_obs"); - RooArgSet globalObs("global_obs"); - if (hasSigErr) globalObs.add( *ws->var("nsig_global") ); - if (hasBgErr){ - if (_nuisance_model == 3){ - globalObs.add( *ws->var("lbkg_est") ); - } - else{ - globalObs.add( *ws->var("bkg_est") ); - } - } - - // parameters of interest - RooArgSet poi(*ws->var("xsec"), "poi"); - - // nuisance parameters - //RooArgSet nuis(*ws->var("nsig_nuis"), *ws->var("nbkg"), "nuis"); - RooArgSet nuis("nuis"); - if (hasSigErr) nuis.add( *ws->var("nsig_nuis") ); - if (hasBgErr) nuis.add( *ws->var("nbkg") ); - - // setup the S+B model - SbModel.SetWorkspace(*ws); - SbModel.SetPdf(*(ws->pdf("model"))); - SbModel.SetParametersOfInterest(poi); - SbModel.SetPriorPdf(*(ws->pdf("prior"))); - SbModel.SetNuisanceParameters(nuis); - SbModel.SetObservables(obs); - SbModel.SetGlobalObservables(globalObs); - - // will import the model config once the snapshot is saved - - // background-only model - // use the same PDF as s+b, with xsec=0 - // (poi zero value will be set in the snapshot) - //BModel = *(RooStats::ModelConfig *)ws->obj("SbModel"); - BModel = SbModel; - BModel.SetName("BModel"); - BModel.SetWorkspace(*ws); - - // We also need to set up parameter snapshots for the models - // but we need data for that, so it is done in makeData() - - return ws; -} - - -RooAbsData * CL95Calc::makeData( Int_t n ){ - // - // make the dataset owned by the class - // the current one is deleted - // - // set ranges as well - // - - // make RooFit quiet - // cash the current message level first - RooFit::MsgLevel msglevel = RooMsgService::instance().globalKillBelow(); - RooMsgService::instance().setGlobalKillBelow(RooFit::FATAL); - - // floating parameters ranges - if (nsig_rel_err < 0.0 || nbkg_rel_err < 0.0){ - std::cout << "[roostats_cl95]: Workspace not initialized, cannot create a dataset" << std::endl; - return 0; - } - - double ilum = ws->var("lumi")->getVal(); - double eff = ws->var("efficiency")->getVal(); - double bck = ws->var("bkg_est")->getVal(); - double sbck = nbkg_rel_err*bck; - - ws->var("n") ->setRange( 0.0, bck+(5.0*sbck)+10.0*(n+1.0)); // ad-hoc range for obs - Double_t xsec_upper_bound = 4.0*(std::max(3.0,n-bck)+sqrt(n)+sbck)/ilum/eff; // ad-hoc range for POI - xsec_upper_bound = RoundUpperBound(xsec_upper_bound); - ws->var("xsec") ->setRange( 0.0, xsec_upper_bound ); - ws->var("nsig_nuis")->setRange( std::max(0.0, 1.0 - 5.0*nsig_rel_err), 1.0 + 5.0*nsig_rel_err); - ws->var("nbkg") ->setRange( std::max(0.0, bck - 5.0*sbck), bck + 5.0*sbck); - - // create data - ws->var("n") ->setVal(n); - delete data; - data = new RooDataSet("data","",*(SbModel.GetObservables())); - data->add( *(SbModel.GetObservables())); - - - // Now set up parameter snapshots for the S+B and B models - - // find global maximum with the signal+background model - // with conditional MLEs for nuisance parameters - // and save the parameter point snapshot in the Workspace - // - safer to keep a default name because some RooStats calculators - // will anticipate it - RooAbsReal * pNll = SbModel.GetPdf()->createNLL(*data); - RooAbsReal * pProfile = pNll->createProfile(RooArgSet()); - pProfile->getVal(); // this will do fit and set POI and nuisance parameters to fitted values - RooArgSet * pPoiAndNuisance = new RooArgSet("poiAndNuisance"); - if(SbModel.GetNuisanceParameters()) - pPoiAndNuisance->add(*SbModel.GetNuisanceParameters()); - pPoiAndNuisance->add(*SbModel.GetParametersOfInterest()); - std::cout << "\nWill save these parameter points that correspond to the fit to data" << std::endl; - pPoiAndNuisance->Print("v"); - SbModel.SetSnapshot(*pPoiAndNuisance); - delete pProfile; - delete pNll; - delete pPoiAndNuisance; - - // Find a parameter point for generating pseudo-data - // with the background-only data. - // Save the parameter point snapshot in the Workspace - // - // POI value under the background hypothesis - Double_t poiValueForBModel = 0.0; - pNll = BModel.GetPdf()->createNLL(*data); - const RooArgSet * poi = BModel.GetParametersOfInterest(); - pProfile = pNll->createProfile(*poi); - ((RooRealVar *)poi->first())->setVal(poiValueForBModel); - pProfile->getVal(); // this will do fit and set nuisance parameters to profiled values - pPoiAndNuisance = new RooArgSet("poiAndNuisance"); - if(BModel.GetNuisanceParameters()) - pPoiAndNuisance->add(*BModel.GetNuisanceParameters()); - pPoiAndNuisance->add(*BModel.GetParametersOfInterest()); - std::cout << "\nShould use these parameter points to generate pseudo data for bkg only" << std::endl; - pPoiAndNuisance->Print("v"); - BModel.SetSnapshot(*pPoiAndNuisance); - delete pProfile; - delete pNll; - delete pPoiAndNuisance; - - // import the model configs, has to be after all snapshots are saved - ws->import(SbModel); - ws->import(BModel); - - // restore RooFit messaging level - RooMsgService::instance().setGlobalKillBelow(msglevel); - - return data; -} - - -MCMCInterval * CL95Calc::GetMcmcInterval(double conf_level, - int n_iter, - int n_burn, - double left_side_tail_fraction, - int n_bins){ - // use MCMCCalculator (takes about 1 min) - // Want an efficient proposal function, so derive it from covariance - // matrix of fit - - RooFitResult * fit = ws->pdf("model")->fitTo(*data,Save(), - Verbose(kFALSE), - PrintLevel(-1), - Warnings(0), - PrintEvalErrors(-1)); - ProposalHelper ph; - ph.SetVariables((RooArgSet&)fit->floatParsFinal()); - ph.SetCovMatrix(fit->covarianceMatrix()); - ph.SetUpdateProposalParameters(kTRUE); // auto-create mean vars and add mappings - ph.SetCacheSize(100); - ProposalFunction* pf = ph.GetProposalFunction(); - - MCMCCalculator mcmc( *data, SbModel ); - mcmc.SetConfidenceLevel(conf_level); - mcmc.SetNumIters(n_iter); // Metropolis-Hastings algorithm iterations - mcmc.SetProposalFunction(*pf); - mcmc.SetNumBurnInSteps(n_burn); // first N steps to be ignored as burn-in - mcmc.SetLeftSideTailFraction(left_side_tail_fraction); - mcmc.SetNumBins(n_bins); - - delete mcInt; - mcInt = mcmc.GetInterval(); - - return mcInt; -} - - -void CL95Calc::makeMcmcPosteriorPlot( std::string filename ){ - - TCanvas c1("c1"); - MCMCIntervalPlot plot(*mcInt); - plot.Draw(); - c1.SaveAs(filename.c_str()); - - return; -} - - -double CL95Calc::printMcmcUpperLimit( std::string filename ){ - // - // print out the upper limit on the first Parameter of Interest - // - - RooRealVar * firstPOI = (RooRealVar*) SbModel.GetParametersOfInterest()->first(); - double _limit = mcInt->UpperLimit(*firstPOI); - cout << "\n95% upper limit on " <GetName()<<" is : "<< - _limit <var("xsec")->getMin() << ", " - << ws->var("xsec")->getMax() << "]" << std::endl; - - - //prepare Feldman-Cousins Calulator - - delete fcCalc; - fcCalc = new FeldmanCousins(*data,SbModel); - - fcCalc->SetConfidenceLevel(conf_int); // confidence interval - //fcCalc->AdditionalNToysFactor(0.1); // to speed up the result - fcCalc->UseAdaptiveSampling(UseAdaptiveSampling); // speed it up a bit - fcCalc->SetNBins(Nbins); // set how many points per parameter of interest to scan - fcCalc->CreateConfBelt(CreateConfidenceBelt); // save the information in the belt for plotting - - - if(!SbModel.GetPdf()->canBeExtended()){ - if(data->numEntries()==1) - fcCalc->FluctuateNumDataEntries(false); - else - cout <<"Not sure what to do about this model" <first(); - - double max = firstPOI->getMax(); - double min = firstPOI->getMin(); - double med = (max + min)/2.0; - - double maxPerm = firstPOI->getMax(); - double minPerm = firstPOI->getMin(); - - double UpperLimit = 0; - - PointSetInterval* interval = 0; - - while ( 1 ){ - - ++cnt; - firstPOI->setMax( max ); - firstPOI->setMin( min ); - - if ( verbose ) std::cout << "[FeldmanCousins]: Setting max/min/med to = " << max << " / " << min << " / " << med << std::endl; - - interval = fcCalc->GetInterval(); - interval -> Delete(); - - UpperLimit = interval -> UpperLimit(*firstPOI); - if ( verbose ) std::cout <<"[FeldmanCousins]: Updating Upper Limt to = "<< UpperLimit << std::endl; - - if ( UpperLimit > 0.000001 ){ - - min = med; - med = (max + min)/2.0; - - } - else{ - - max = med; - med = (max + min)/2.0; - - } - - if ( ( UpperLimit > 0.000001 ) && ( (max - min) < ULprecision) ) { - upper_limit = UpperLimit; - std::cout <<"[FeldmanCousins]: In "<< cnt << " steps Upper Limt converged to " << upper_limit << std::endl; - break; - } - - if ( cnt > 50 ) { - upper_limit = -1; - std::cout << std::endl; - std::cout <<"[FeldmanCousins WARNING!!!!!!!!!!!! ]: Calculator could not converge in under 50 steps. Returning Upper Limit of -1." << std::endl; - std::cout << std::endl; - break; - } - - } - - ws->var("xsec")->setMax( maxPerm ); - ws->var("xsec")->setMin( minPerm ); - - return upper_limit; - -} - - - - - -Double_t CL95Calc::cl95( std::string method, LimitResult * result ){ - // - // Compute the observed limit - // For some methods - CLs - compute the expected limts too. - // Extended results are returned via reference as LimitResul object - // - // this method assumes that the workspace, - // data and model config are ready - // - - Double_t upper_limit = -1.0; - - // make RooFit quiet - // cash the current message level first - RooFit::MsgLevel msglevel = RooMsgService::instance().globalKillBelow(); - // get ugly RooFit print out of the way - // FIXME: uncomment - RooMsgService::instance().setGlobalKillBelow(RooFit::FATAL); - - Int_t _attempt = 0; // allow several attempts for limit calculation, stop after that - while(1){ - - ++_attempt; - - // too many attempts - if (_attempt > 5){ - std::cout << "[roostats_cl95]: limit calculation did not converge, exiting..." << std::endl; - return -1.0; - } - - if (method.find("bayesian") != std::string::npos){ - - std::cout << "[roostats_cl95]: Range of allowed cross section values: [" - << ws->var("xsec")->getMin() << ", " - << ws->var("xsec")->getMax() << "]" << std::endl; - - //prepare Bayesian Calulator - delete bcalc; - bcalc = new BayesianCalculator(*data, SbModel); - TString namestring = "mybc"; - bcalc->SetName(namestring); - bcalc->SetConfidenceLevel(0.95); - bcalc->SetLeftSideTailFraction(0.0); - //bcalc->SetIntegrationType("ROOFIT"); - - delete sInt; - sInt = bcalc->GetInterval(); - upper_limit = sInt->UpperLimit(); - delete sInt; - sInt = 0; - - } - else if (method.find("mcmc") != std::string::npos){ - - std::cout << "[roostats_cl95]: Bayesian MCMC calculation is still experimental in this context!!!" << std::endl; - - std::cout << "[roostats_cl95]: Range of allowed cross section values: [" - << ws->var("xsec")->getMin() << ", " - << ws->var("xsec")->getMax() << "]" << std::endl; - - //prepare Bayesian Markov Chain MC Calulator - mcInt = GetMcmcInterval(0.95, 50000, 100, 0.0, 40); - upper_limit = printMcmcUpperLimit(); - } - else if (method.find("cls") != std::string::npos){ - // - // testing CLs - // - - std::cout << "[roostats_cl95]: CLs calculation is still experimental in this context!!!" << std::endl; - - std::cout << "[roostats_cl95]: Range of allowed cross section values: [" - << ws->var("xsec")->getMin() << ", " - << ws->var("xsec")->getMax() << "]" << std::endl; - - // timer - TStopwatch t; - t.Start(); - - // load parameter point with the best fit to data - SbModel.LoadSnapshot(); - RooRealVar * pPoi = (RooRealVar *)(SbModel.GetParametersOfInterest()->first()); - // get POI upper error from the fit - Double_t poi_err = pPoi->getErrorHi(); - // get POI upper range boundary - Double_t poi_upper_range = pPoi->getMax(); - // get the upper range boundary for CLs as min of poi range and 5*error - Double_t upper_range = std::min(10.0*poi_err,poi_upper_range); - // debug output - //std::cout << "range, error, new range " << poi_upper_range << ", "<< poi_err << ", " << upper_range << std::endl; - - RooMsgService::instance().setGlobalKillBelow(RooFit::PROGRESS); - - std::vector lim = - GetClsLimits( ws, - "SbModel", - "BModel", - "observed_data", - 0, // calculator type, 0-freq, 1-hybrid - 3, // test statistic, 0-lep, 1-tevatron, 2-PL, 3-PL 1-sided - true, // useCls - 10, // npoints in the scan - 0, // poimin: use default is poimin >= poimax - upper_range, - 10000,// ntoys - "test" ); - - t.Stop(); - t.Print(); - - if (result){ - result->_observed_limit = lim[0]; - result->_observed_limit_error = lim[1]; - result->_expected_limit = lim[2]; - result->_low68 = lim[3]; - result->_high68 = lim[4]; - result->_low95 = lim[5]; - result->_high95 = lim[6]; - result->_cover68 = -1.0; - result->_cover95 = -1.0; - } - - upper_limit = lim[0]; - - } // end of the CLs block - else if (method.find("fc") != std::string::npos){ - - int Nbins = 1; - float conf_int = 0.95; - float ULprecision = 0.1; - bool UseAdaptiveSampling = true; - bool CreateConfidenceBelt = true; - - - upper_limit = FC_calc(Nbins, conf_int, ULprecision, UseAdaptiveSampling, CreateConfidenceBelt); - - } // end of the FC block - else{ - - std::cout << "[roostats_cl95]: method " << method - << " is not implemented, exiting" <var("xsec")->getMax(); - - if (method.find("cls")!=std::string::npos) break; - if (method.find("fc") != std::string::npos ) break; - // range too wide - else if (upper_limit < _poi_max_range/10.0){ - std::cout << "[roostats_cl95]: POI range is too wide, will narrow the range and rerun" << std::endl; - ws->var("xsec")->setMax(RoundUpperBound(_poi_max_range/2.0)); - } - // range too narrow - else if (upper_limit > _poi_max_range/2.0){ - std::cout << "[roostats_cl95]: upper limit is too narrow, will widen the range and rerun" << std::endl; - ws->var("xsec")->setMax(RoundUpperBound(2.0*_poi_max_range)); - } - // all good, limit is ready - else{ - break; - } - - } // end of while(1) loop - - // restore RooFit messaging level - RooMsgService::instance().setGlobalKillBelow(msglevel); - - return upper_limit; - -} - - -Double_t CL95Calc::cla( Double_t ilum, Double_t slum, - Double_t eff, Double_t seff, - Double_t bck, Double_t sbck, - Int_t nuisanceModel, - std::string method ){ - - makeWorkspace( ilum, slum, - eff, seff, - bck, sbck, - kFALSE, - nuisanceModel ); - - Double_t CL95A = 0, precision = 1.e-4; - - Int_t i; - for (i = bck; i >= 0; i--) - { - makeData( i ); - - Double_t s95 = cl95( method ); - Double_t s95w =s95*TMath::Poisson( (Double_t)i, bck ); - CL95A += s95w; - cout << "[roostats_cla]: n = " << i << "; 95% C.L. = " << s95 << " pb; weighted 95% C.L. = " << s95w << " pb; running = " << CL95A << " pb" << endl; - - if (s95w < CL95A*precision) break; - } - cout << "[roostats_cla]: Lower bound on n has been found at " << i+1 << endl; - - for (i = bck+1; ; i++) - { - makeData( i ); - Double_t s95 = cl95( method ); - Double_t s95w =s95*TMath::Poisson( (Double_t)i, bck ); - CL95A += s95w; - cout << "[roostats_cla]: n = " << i << "; 95% C.L. = " << s95 << " pb; weighted 95% C.L. = " << s95w << " pb; running = " << CL95A << " pb" << endl; - - if (s95w < CL95A*precision) break; - } - cout << "[roostats_cla]: Upper bound on n has been found at " << i << endl; - cout << "[roostats_cla]: Average upper 95% C.L. limit = " << CL95A << " pb" << endl; - - return CL95A; -} - - - -LimitResult CL95Calc::clm( Double_t ilum, Double_t slum, - Double_t eff, Double_t seff, - Double_t bck, Double_t sbck, - Int_t nit, Int_t nuisanceModel, - std::string method ){ - - makeWorkspace( ilum, slum, - eff, seff, - bck, sbck, - kFALSE, - nuisanceModel ); - - Double_t CLM = 0.0; - LimitResult _result; - - Double_t b68[2] = {0.0, 0.0}; // 1-sigma expected band - Double_t b95[2] = {0.0, 0.0}; // 2-sigma expected band - - std::vector pe; - - // timer - TStopwatch t; - t.Start(); // start timer - Double_t _realtime = 0.0; - Double_t _cputime = 0.0; - Double_t _realtime_last = 0.0; - Double_t _cputime_last = 0.0; - Double_t _realtime_average = 0.0; - Double_t _cputime_average = 0.0; - - // throw pseudoexperiments - if (nit <= 0)return _result; - std::map cached_limit; - for (Int_t i = 0; i < nit; i++) - { - // throw random nuisance parameter (bkg yield) - Double_t bmean = GetRandom("syst_nbkg", "nbkg"); - - std::cout << "[roostats_clm]: generatin pseudo-data with bmean = " << bmean << std::endl; - Int_t n = r.Poisson(bmean); - - // check if the limit for this n is already cached - Double_t _pe = -1.0; - if (cached_limit.find(n)==cached_limit.end()){ - - makeData( n ); - std::cout << "[roostats_clm]: invoking CL95 with n = " << n << std::endl; - - _pe = cl95( method ); - cached_limit[n] = _pe; - } - else{ - std::cout << "[roostats_clm]: returning previously cached limit for n = " << n << std::endl; - _pe = cached_limit[n]; - } - - pe.push_back(_pe); - CLM += pe[i]; - - _realtime_last = t.RealTime() - _realtime; - _cputime_last = t.CpuTime() - _cputime; - _realtime = t.RealTime(); - _cputime = t.CpuTime(); - t.Continue(); - _realtime_average = _realtime/((Double_t)(i+1)); - _cputime_average = _cputime/((Double_t)(i+1)); - - std::cout << "n = " << n << "; 95% C.L. = " << _pe << " pb; running = " << CLM/(i+1.) << std::endl; - std::cout << "Real time (s), this iteration: " << _realtime_last << ", average per iteration: " << _realtime_average << ", total: " << _realtime << std::endl; - std::cout << "CPU time (s), this iteration: " << _cputime_last << ", average per iteration: " << _cputime_average << ", total: " << _cputime << std::endl << std::endl; - } - - CLM /= nit; - - // sort the vector with limits - std::sort(pe.begin(), pe.end()); - - // median for the expected limit - Double_t _median = TMath::Median(nit, &pe[0]); - - // quantiles for the expected limit bands - Double_t _prob[4]; // array with quantile boundaries - _prob[0] = 0.021; - _prob[1] = 0.159; - _prob[2] = 0.841; - _prob[3] = 0.979; - - Double_t _quantiles[4]; // array for the results - - TMath::Quantiles(nit, 4, &pe[0], _quantiles, _prob); // evaluate quantiles - - b68[0] = _quantiles[1]; - b68[1] = _quantiles[2]; - b95[0] = _quantiles[0]; - b95[1] = _quantiles[3]; - - // let's get actual coverages now - - Long64_t lc68 = LowBoundarySearch(&pe, _quantiles[1]); - Long64_t uc68 = HighBoundarySearch(&pe, _quantiles[2]); - Long64_t lc95 = LowBoundarySearch(&pe, _quantiles[0]); - Long64_t uc95 = HighBoundarySearch(&pe, _quantiles[3]); - - Double_t _cover68 = (nit - lc68 - uc68)*100./nit; - Double_t _cover95 = (nit - lc95 - uc95)*100./nit; - - std::cout << "[CL95Calc::clm()]: median limit: " << _median << std::endl; - std::cout << "[CL95Calc::clm()]: 1 sigma band: [" << b68[0] << "," << b68[1] << - "]; actual coverage: " << _cover68 << - "%; lower/upper percentile: " << lc68*100./nit <<"/" << uc68*100./nit << std::endl; - std::cout << "[CL95Calc::clm()]: 2 sigma band: [" << b95[0] << "," << b95[1] << - "]; actual coverage: " << _cover95 << - "%; lower/upper percentile: " << lc95*100./nit <<"/" << uc95*100./nit << std::endl; - - t.Print(); - - _result._expected_limit = _median; - _result._low68 = b68[0]; - _result._high68 = b68[1]; - _result._low95 = b95[0]; - _result._high95 = b95[1]; - _result._cover68 = _cover68; - _result._cover95 = _cover95; - - return _result; -} - - - -int CL95Calc::makePlot( std::string method, - std::string plotFileName ){ - - if (method.find("bayesian") != std::string::npos){ - - std::cout << "[roostats_cl95]: making Bayesian posterior plot" << endl; - - TCanvas c1("posterior"); - bcalc->SetScanOfPosterior(100); - RooPlot * plot = bcalc->GetPosteriorPlot(); - plot->Draw(); - c1.SaveAs(plotFileName.c_str()); - } - else if (method.find("mcmc") != std::string::npos){ - - std::cout << "[roostats_cl95]: making Bayesian MCMC posterior plot" << endl; - - makeMcmcPosteriorPlot(plotFileName); - - } - else{ - std::cout << "[roostats_cl95]: plot for method " << method - << " is not implemented" <pdf(pdf.c_str())->generate(*ws->var(var.c_str()), 1); - - Double_t _result = ((RooRealVar *)(_ds->get(0)->first()))->getVal(); - delete _ds; - - return _result; -} - - -Long64_t CL95Calc::LowBoundarySearch(std::vector * cdf, Double_t value){ - // - // return number of elements which are < value with precision 1e-10 - // - - Long64_t result = 0; - std::vector::const_iterator i = cdf->begin(); - while( (*i1.0e-10 && (i!=cdf->end()) ){ - ++i; - ++result; - } - return result; -} - - -Long64_t CL95Calc::HighBoundarySearch(std::vector * cdf, Double_t value){ - // - // return number of elements which are > value with precision 1e-10 - // - - Long64_t result = 0; - std::vector::const_iterator i = cdf->end(); - while(1){ // (*ibegin()) ){ - --i; - if (*i>value && fabs(*i-value)>1.0e-10 ){ - ++result; - } - else break; - if (i==cdf->begin()) break; - } - return result; -} - - - -Double_t CL95Calc::RoundUpperBound(Double_t bound){ - // - // find a round upper bound for a floating point - // - Double_t power = log10(bound); - Int_t int_power = power>0.0 ? (Int_t)power : (Int_t)(power-1.0); - Int_t int_bound = (Int_t)(bound/pow(10,(Double_t)int_power) * 10.0 + 1.0); - bound = (Double_t)(int_bound/10.0*pow(10,(Double_t)int_power)); - return bound; -} - - - -Int_t banner(){ - //#define __ROOFIT_NOBANNER // banner temporary off -#ifndef __EXOST_NOBANNER -// std::cout << desc << std::endl; -#endif - return 0 ; -} -static Int_t dummy_ = banner() ; - - - -Double_t roostats_cl95(Double_t ilum, Double_t slum, - Double_t eff, Double_t seff, - Double_t bck, Double_t sbck, - Int_t n, - Bool_t gauss, - Int_t nuisanceModel, - std::string method, - std::string plotFileName, - UInt_t seed, - LimitResult * result){ - // - // Global function to run the CL95 routine - // - // If a non-null pointer to a LimitResult object is provided, - // it will be filled, and the caller keeps the ownership of - // the object. This is mainly an internal interface design solution, - // users are not expected to use that (but they can of course) - // - - std::cout << "[roostats_cl95]: estimating 95% C.L. upper limit" << endl; - if (method.find("bayesian") != std::string::npos){ - std::cout << "[roostats_cl95]: using Bayesian calculation via numeric integration" << endl; - } - else if (method.find("mcmc") != std::string::npos){ - std::cout << "[roostats_cl95]: using Bayesian calculation via numeric integration" << endl; - } - else if (method.find("cls") != std::string::npos){ - std::cout << "[roostats_cl95]: using CLs calculation" << endl; - } - else if (method.find("fc") != std::string::npos){ - std::cout << "[roostats_cl95]: using Feldman-Cousins approach" << endl; - } - else if (method.find("workspace") != std::string::npos){ - std::cout << "[roostats_cl95]: no interval calculation, only create and save workspace" << endl; - } - else{ - std::cout << "[roostats_cl95]: method " << method - << " is not implemented, exiting" <Clone() ); - data->SetName("observed_data"); - ws->import(*data); - - //ws->Print(); - - ws->SaveAs("ws.root"); - - // if only workspace requested, exit here - if ( method.find("workspace") != std::string::npos ) return 0.0; - - Double_t limit = theCalc.cl95( method, &limitResult ); - std::cout << "[roostats_cl95]: 95% C.L. upper limit: " << limit << std::endl; - - // check if the plot is requested - if (plotFileName.size() != 0){ - theCalc.makePlot(method, plotFileName); - } - - if (result) *result = limitResult; - - return limit; -} - - - -LimitResult roostats_limit(Double_t ilum, Double_t slum, - Double_t eff, Double_t seff, - Double_t bck, Double_t sbck, - Int_t n, - Bool_t gauss, - Int_t nuisanceModel, - std::string method, - std::string plotFileName, - UInt_t seed){ - // - // Global function to run the CL95 routine - // - - LimitResult limitResult; - - roostats_cl95(ilum, slum, - eff, seff, - bck, sbck, - n, - gauss, - nuisanceModel, - method, - plotFileName, - seed, - &limitResult); - - std::cout << " expected limit (median) " << limitResult.GetExpectedLimit() << std::endl; - std::cout << " expected limit (-1 sig) " << limitResult.GetOneSigmaLowRange() << std::endl; - std::cout << " expected limit (+1 sig) " << limitResult.GetOneSigmaHighRange() << std::endl; - std::cout << " expected limit (-2 sig) " << limitResult.GetTwoSigmaLowRange() << std::endl; - std::cout << " expected limit (+2 sig) " << limitResult.GetTwoSigmaHighRange() << std::endl; - - return limitResult; -} - - - -Double_t roostats_cla(Double_t ilum, Double_t slum, - Double_t eff, Double_t seff, - Double_t bck, Double_t sbck, - Int_t nuisanceModel, - std::string method, - UInt_t seed){ - // - // Global function to run old-style average limit routine. - // Please use roostats_clm() instead. - // - - Double_t limit = -1.0; - - std::cout << "[roostats_cla]: estimating average 95% C.L. upper limit" << endl; - if (method.find("bayesian") != std::string::npos){ - std::cout << "[roostats_cla]: using Bayesian calculation via numeric integration" << endl; - } - else if (method.find("mcmc") != std::string::npos){ - std::cout << "[roostats_cl95]: using Bayesian calculation via numeric integration" << endl; - } - else if (method.find("cls") != std::string::npos){ - std::cout << "[roostats_cl95]: using CLs calculation" << endl; - } - else if (method.find("fc") != std::string::npos){ - std::cout << "[roostats_cl95]: using Feldman-Cousins approach" << endl; - } - else{ - std::cout << "[roostats_cla]: method " << method - << " is not implemented, exiting" < -GetClsLimits(RooWorkspace * pWs, - const char * modelSBName, - const char * modelBName, - const char * dataName, - int calculatorType, // calculator type - int testStatType, // test stat type - bool useCls, - int npoints, - double poimin, // use default is poimin >= poimax - double poimax, - int ntoys, - std::string suffix) -{ - - // - // Return a vector of numbers (terrible design, I know) ordered as - // - observed limit - // - observed limit error - // - expected limit median - // - expected limit -1 sigma - // - expected limit +1 sigma - // - expected limit -2 sigma - // - expected limit +2 sigma - // - -/* - - Other Parameter to pass in tutorial - apart from standard for filename, ws, modelconfig and data - - type = 0 Freq calculator - type = 1 Hybrid - - testStatType = 0 LEP - = 1 Tevatron - = 2 Profile Likelihood - = 3 Profile Likelihood one sided (i.e. = 0 if mu < mu_hat) - - useCLs scan for CLs (otherwise for CLs+b) - - npoints: number of points to scan , for autoscan set npoints = -1 - - poimin,poimax: min/max value to scan in case of fixed scans - (if min >= max, try to find automatically) - - ntoys: number of toys to use - - extra options are available as global paramters of the macro. They are: - - plotHypoTestResult plot result of tests at each point (TS distributions) - useProof = true; - writeResult = true; - nworkers = 4; - - - */ - - - // result - std::vector result; - - // check that workspace is present - if (!pWs){ - std::cout << "No workspace found, null pointer" << std::endl; - return result; - } - - HypoTestInverterResult * r = 0; - HypoTestInverterResult * r2 = 0; - - // terrible hack to check appending results - if (suffix.find("merge")!=std::string::npos){ - std::string resFile = "Freq_CLs_grid_ts2_test_1.root"; - std::string resFile2 = "Freq_CLs_grid_ts2_test_2.root"; - std::string resName = "result_xsec"; - //std::cout << "Reading an HypoTestInverterResult with name " << resName << " from file " << resFile << std::endl; - TFile * file = new TFile(resFile.c_str(), "read"); - TFile * file2 = new TFile(resFile2.c_str(), "read"); - r = dynamic_cast( file->Get(resName.c_str()) ); - r2 = dynamic_cast( file2->Get(resName.c_str()) ); - r->Add(*r2); - } - else{ - r = RunInverter(pWs, modelSBName, modelBName, dataName, calculatorType, testStatType, npoints, poimin, poimax, ntoys, useCls ); - if (!r) { - std::cerr << "Error running the HypoTestInverter - Exit " << std::endl; - return result; - } - } - - - double upperLimit = r->UpperLimit(); - double ulError = r->UpperLimitEstimatedError(); - result.push_back(upperLimit); - result.push_back(ulError); - - - //std::cout << "The computed upper limit is: " << upperLimit << " +/- " << ulError << std::endl; - - // const int nEntries = r->ArraySize(); - - const char * limitType = (useCls) ? "CLs" : "Cls+b"; - const char * scanType = (npoints < 0) ? "auto" : "grid"; - - const char * typeName = (calculatorType == 0) ? "Frequentist" : "Hybrid"; - const char * resultName = (pWs) ? pWs->GetName() : r->GetName(); - TString plotTitle = TString::Format("%s CL Scan for workspace %s",typeName,resultName); - - /* - HypoTestInverterPlot *plot = new HypoTestInverterPlot("HTI_Result_Plot",plotTitle,r); - TCanvas c1; - //plot->Draw("CLb 2CL"); // plot all and Clb - plot->Draw("2CL"); // plot all and Clb - TString resultFileName = TString::Format("%s_%s_ts%d_scan_",limitType,scanType,testStatType); - resultFileName += suffix; - resultFileName += ".pdf"; - c1.SaveAs(resultFileName); - - if (plotHypoTestResult) { - TCanvas * c2 = new TCanvas(); - c2->Divide( 2, TMath::Ceil(nEntries/2)); - for (int i=0; icd(i+1); - SamplingDistPlot * pl = plot->MakeTestStatPlot(i); - pl->SetLogYaxis(true); - pl->Draw(); - } - } - */ - - Double_t q[5]; - q[0] = r->GetExpectedUpperLimit(0); - q[1] = r->GetExpectedUpperLimit(-1); - q[2] = r->GetExpectedUpperLimit(1); - q[3] = r->GetExpectedUpperLimit(-2); - q[4] = r->GetExpectedUpperLimit(2); - //std::cout << " expected limit (median) " << q[0] << std::endl; - //std::cout << " expected limit (-1 sig) " << q[1] << std::endl; - //std::cout << " expected limit (+1 sig) " << q[2] << std::endl; - //std::cout << " expected limit (-2 sig) " << q[3] << std::endl; - //std::cout << " expected limit (+2 sig) " << q[4] << std::endl; - result.push_back(q[0]); - result.push_back(q[1]); - result.push_back(q[2]); - result.push_back(q[3]); - result.push_back(q[4]); - - - if (pWs != NULL && writeResult) { - - // write to a file the results - const char * calcType = (calculatorType == 0) ? "Freq" : "Hybr"; - //const char * limitType = (useCls) ? "CLs" : "Cls+b"; - //const char * scanType = (npoints < 0) ? "auto" : "grid"; - TString resultFileName = TString::Format("%s_%s_%s_ts%d_",calcType,limitType,scanType,testStatType); - //resultFileName += fileName; - resultFileName += suffix; - resultFileName += ".root"; - - TFile * fileOut = new TFile(resultFileName,"RECREATE"); - r->Write(); - fileOut->Close(); - } - - return result; -} - - -// internal routine to run the inverter -HypoTestInverterResult * RunInverter(RooWorkspace * w, const char * modelSBName, const char * modelBName, - const char * dataName, int type, int testStatType, - int npoints, double poimin, double poimax, - int ntoys, bool useCls ) -{ - - //std::cout << "Running HypoTestInverter on the workspace " << w->GetName() << std::endl; - - //w->Print(); - - - RooAbsData * data = w->data(dataName); - if (!data) { - Error("StandardHypoTestDemo","Not existing data %s",dataName); - return 0; - } - //else - // std::cout << "Using data set " << dataName << std::endl; - - - // get models from WS - // get the modelConfig out of the file - ModelConfig* bModel = (ModelConfig*) w->obj(modelBName); - ModelConfig* sbModel = (ModelConfig*) w->obj(modelSBName); - - if (!sbModel) { - Error("StandardHypoTestDemo","Not existing ModelConfig %s",modelSBName); - return 0; - } - // check the model - if (!sbModel->GetPdf()) { - Error("StandardHypoTestDemo","Model %s has no pdf ",modelSBName); - return 0; - } - if (!sbModel->GetParametersOfInterest()) { - Error("StandardHypoTestDemo","Model %s has no poi ",modelSBName); - return 0; - } - if (!sbModel->GetParametersOfInterest()) { - Error("GetClsLimits","Model %s has no poi ",modelSBName); - return 0; - } - if (!sbModel->GetSnapshot() ) { - Info("GetClsLimits","Model %s has no snapshot - make one using model poi",modelSBName); - sbModel->SetSnapshot( *sbModel->GetParametersOfInterest() ); - } - - - if (!bModel || bModel == sbModel) { - Info("GetClsLimits","The background model %s does not exist",modelBName); - Info("GetClsLimits","Copy it from ModelConfig %s and set POI to zero",modelSBName); - bModel = (ModelConfig*) sbModel->Clone(); - bModel->SetName(TString(modelSBName)+TString("_with_poi_0")); - RooRealVar * var = dynamic_cast(bModel->GetParametersOfInterest()->first()); - if (!var) return 0; - double oldval = var->getVal(); - var->setVal(0); - bModel->SetSnapshot( RooArgSet(*var) ); - var->setVal(oldval); - } - else { - if (!bModel->GetSnapshot() ) { - Info("GetClsLimits","Model %s has no snapshot - make one using model poi and 0 values ",modelBName); - RooRealVar * var = dynamic_cast(bModel->GetParametersOfInterest()->first()); - if (var) { - double oldval = var->getVal(); - var->setVal(0); - bModel->SetSnapshot( RooArgSet(*var) ); - var->setVal(oldval); - } - else { - Error("GetClsLimits","Model %s has no valid poi",modelBName); - return 0; - } - } - } - - - SimpleLikelihoodRatioTestStat slrts(*sbModel->GetPdf(),*bModel->GetPdf()); - if (sbModel->GetSnapshot()) slrts.SetNullParameters(*sbModel->GetSnapshot()); - if (bModel->GetSnapshot()) slrts.SetAltParameters(*bModel->GetSnapshot()); - - // ratio of profile likelihood - need to pass snapshot for the alt - RatioOfProfiledLikelihoodsTestStat - ropl(*sbModel->GetPdf(), *bModel->GetPdf(), bModel->GetSnapshot()); - ropl.SetSubtractMLE(false); - - ProfileLikelihoodTestStat profll(*sbModel->GetPdf()); - if (testStatType == 3) profll.SetOneSided(1); - if (optimize) profll.SetReuseNLL(true); - - TestStatistic * testStat = &slrts; - if (testStatType == 1) testStat = &ropl; - if (testStatType == 2 || testStatType == 3) testStat = &profll; - - - HypoTestCalculatorGeneric * hc = 0; - if (type == 0) hc = new FrequentistCalculator(*data, *bModel, *sbModel); - else hc = new HybridCalculator(*data, *bModel, *sbModel); - - ToyMCSampler *toymcs = (ToyMCSampler*)hc->GetTestStatSampler(); - // FIXME: - toymcs->SetNEventsPerToy(1); - toymcs->SetTestStatistic(testStat); - if (optimize) toymcs->SetUseMultiGen(true); - - - if (type == 1) { - HybridCalculator *hhc = (HybridCalculator*) hc; - hhc->SetToys(ntoys,ntoys); - - // check for nuisance prior pdf - //if (bModel->GetPriorPdf() && sbModel->GetPriorPdf() ) { - // hhc->ForcePriorNuisanceAlt(*bModel->GetPriorPdf()); - // hhc->ForcePriorNuisanceNull(*sbModel->GetPriorPdf()); - //} - RooAbsPdf * nuis_prior = w->pdf("nuis_prior"); - if (nuis_prior ) { - hhc->ForcePriorNuisanceAlt(*nuis_prior); - hhc->ForcePriorNuisanceNull(*nuis_prior); - } - else { - if (bModel->GetNuisanceParameters() || sbModel->GetNuisanceParameters() ) { - Error("GetClsLimits","Cannnot run Hybrid calculator because no prior on the nuisance parameter is specified"); - return 0; - } - } - } - else - ((FrequentistCalculator*) hc)->SetToys(ntoys,ntoys); - - // Get the result - RooMsgService::instance().getStream(1).removeTopic(RooFit::NumIntegration); - - - TStopwatch tw; tw.Start(); - const RooArgSet * poiSet = sbModel->GetParametersOfInterest(); - RooRealVar *poi = (RooRealVar*)poiSet->first(); - - // fit the data first - - sbModel->GetPdf()->fitTo(*data, - Verbose(0), PrintLevel(-1), Warnings(0), PrintEvalErrors(-1)); - - double poihat = poi->getVal(); - - - HypoTestInverter calc(*hc); - calc.SetConfidenceLevel(0.95); - - calc.UseCLs(useCls); - calc.SetVerbose(true); - - // can speed up using proof-lite - if (useProof && nworkers > 1) { - ProofConfig pc(*w, nworkers, "", kFALSE); - toymcs->SetProofConfig(&pc); // enable proof - } - - - if (npoints > 0) { - if (poimin >= poimax) { - // if no min/max given scan between MLE and +4 sigma - poimin = int(poihat); - poimax = int(poihat + 4 * poi->getError()); - } - //std::cout << "Doing a fixed scan in interval : " << poimin << " , " << poimax << std::endl; - calc.SetFixedScan(npoints,poimin,poimax); - } - else { - //poi->setMax(10*int( (poihat+ 10 *poi->getError() )/10 ) ); - //std::cout << "Doing an automatic scan in interval : " << poi->getMin() << " , " << poi->getMax() << std::endl; - } - - HypoTestInverterResult * r = calc.GetInterval(); - - return r; -} diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/setstandaloneroot.csh b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/setstandaloneroot.csh deleted file mode 100644 index 226852edfdca4..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/setstandaloneroot.csh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/tcsh -# -set arch = slc5_ia32_gcc434 -setenv CMS_PATH /uscmst1/prod/sw/cms - -setenv PYTHONDIR /uscmst1/prod/sw/cms/slc5_ia32_gcc434/external/python/2.6.4-cms6 -setenv PATH ${PYTHONDIR}/bin:/uscmst1b_scratch/lpc1/lpcphys/jchen/root/root_v5.30.02/bin:$PATH -setenv ROOTSYS /uscmst1b_scratch/lpc1/lpcphys/jchen/root/root_v5.30.02 -setenv PYTHONPATH ${ROOTSYS}/lib:${PYTHONPATH} -setenv LD_LIBRARY_PATH ${PYTHONDIR}/lib:${CMS_PATH}/$arch/external/gcc/4.3.4/lib:${ROOTSYS}:${ROOTSYS}/lib:${LD_LIBRARY_PATH} -setenv ROOT_INCLUDE ${ROOTSYS}/include diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/setstandaloneroot.sh b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/setstandaloneroot.sh deleted file mode 100755 index 3f907e7a3155a..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/setstandaloneroot.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# -arch=slc5_ia32_gcc434 -export CMS_PATH=/uscmst1/prod/sw/cms - -export PYTHONDIR=/uscmst1/prod/sw/cms/slc5_ia32_gcc434/external/python/2.6.4-cms6 -export PATH=${PYTHONDIR}/bin:/uscmst1b_scratch/lpc1/lpcphys/jchen/root/root_v5.30.02/bin:$PATH -export ROOTSYS=/uscmst1b_scratch/lpc1/lpcphys/jchen/root/root_v5.30.02 -export PYTHONPATH=${ROOTSYS}/lib:${PYTHONPATH} -export LD_LIBRARY_PATH=${PYTHONDIR}/lib:${CMS_PATH}/$arch/external/gcc/4.3.4/lib:${ROOTSYS}:${ROOTSYS}/lib:${LD_LIBRARY_PATH} -export ROOT_INCLUDE=${ROOTSYS}/include diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/stop_XSec.txt b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/stop_XSec.txt deleted file mode 100644 index 47290723480a0..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/stop_XSec.txt +++ /dev/null @@ -1,45 +0,0 @@ - 100. 4.23E+02 4.86E+02 3.74E+02 - 120. 1.77E+02 2.02E+02 1.56E+02 - 140. 8.27E+01 9.41E+01 7.29E+01 - 160. 4.20E+01 4.76E+01 3.70E+01 - 180. 2.27E+01 2.57E+01 2.01E+01 - 200. 1.30E+01 1.47E+01 1.14E+01 - 220. 7.71E+00 8.72E+00 6.77E+00 - 240. 4.75E+00 5.37E+00 4.17E+00 - 260. 3.02E+00 3.41E+00 2.65E+00 - 280. 1.97E+00 2.22E+00 1.72E+00 - 300. 1.31E+00 1.48E+00 1.14E+00 - 320. 8.86E-01 1.00E+00 7.73E-01 - 340. 6.11E-01 6.92E-01 5.31E-01 - 360. 4.28E-01 4.84E-01 3.70E-01 - 380. 3.03E-01 3.44E-01 2.63E-01 - 400. 2.18E-01 2.47E-01 1.88E-01 - 420. 1.58E-01 1.79E-01 1.36E-01 - 440. 1.16E-01 1.32E-01 9.93E-02 - 460. 8.55E-02 9.75E-02 7.31E-02 - 480. 6.37E-02 7.28E-02 5.44E-02 - 500. 4.78E-02 5.47E-02 4.06E-02 - 520. 3.62E-02 4.15E-02 3.07E-02 - 540. 2.75E-02 3.15E-02 2.33E-02 - 560. 2.10E-02 2.42E-02 1.77E-02 - 580. 1.62E-02 1.87E-02 1.36E-02 - 600. 1.25E-02 1.44E-02 1.05E-02 - 620. 9.68E-03 1.12E-02 8.11E-03 - 640. 7.51E-03 8.71E-03 6.27E-03 - 660. 5.84E-03 6.78E-03 4.87E-03 - 680. 4.55E-03 5.29E-03 3.78E-03 - 700. 3.56E-03 4.14E-03 2.95E-03 - 720. 2.78E-03 3.23E-03 2.30E-03 - 740. 2.17E-03 2.52E-03 1.79E-03 - 760. 1.67E-03 1.94E-03 1.38E-03 - 800. 1.14E-03 1.35E-03 9.31E-04 - 820. 9.14E-04 1.08E-03 7.42E-04 - 840. 7.33E-04 8.68E-04 5.93E-04 - 860. 5.89E-04 7.01E-04 4.74E-04 - 880. 4.75E-04 5.65E-04 3.81E-04 - 900. 3.82E-04 4.56E-04 3.06E-04 - 920. 3.09E-04 3.69E-04 2.47E-04 - 940. 2.50E-04 3.00E-04 1.98E-04 - 960. 2.03E-04 2.44E-04 1.60E-04 - 980. 1.64E-04 1.98E-04 1.29E-04 - 1000. 1.33E-04 1.61E-04 1.04E-04 diff --git a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/tdrstyle.C b/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/tdrstyle.C deleted file mode 100644 index 6e2de47e66928..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/ICHEP_Analysis/tdrstyle.C +++ /dev/null @@ -1,169 +0,0 @@ -// -// TDR style macro for plots in ROOT -// .L tdrstyle.C -// setTDRStyle() -// -#include "TStyle.h" -#include "TPad.h" - -/* -// tdrGrid: Turns the grid lines on (true) or off (false) - -void tdrGrid(bool gridOn) { - tdrStyle->SetPadGridX(gridOn); - tdrStyle->SetPadGridY(gridOn); -} -*/ - -// fixOverlay: Redraws the axis - -void fixOverlay() { - gPad->RedrawAxis(); -} - -void setTDRStyle() { -// TStyle *tdrStyle = new TStyle("tdrStyle","Style for P-TDR"); - -// For the canvas: - gStyle->SetCanvasBorderMode(0); - gStyle->SetCanvasColor(kWhite); - gStyle->SetCanvasDefH(600); //Height of canvas - gStyle->SetCanvasDefW(600); //Width of canvas - gStyle->SetCanvasDefX(0); //POsition on screen - gStyle->SetCanvasDefY(0); - -// For the Pad: - gStyle->SetPadBorderMode(0); - // gStyle->SetPadBorderSize(Width_t size = 1); - gStyle->SetPadColor(kWhite); - gStyle->SetPadGridX(false); - gStyle->SetPadGridY(false); - gStyle->SetGridColor(0); - gStyle->SetGridStyle(3); - gStyle->SetGridWidth(1); - -// For the frame: - gStyle->SetFrameBorderMode(0); - gStyle->SetFrameBorderSize(1); - gStyle->SetFrameFillColor(0); - gStyle->SetFrameFillStyle(0); - gStyle->SetFrameLineColor(1); - gStyle->SetFrameLineStyle(1); - gStyle->SetFrameLineWidth(1); - -// For the histo: - // gStyle->SetHistFillColor(1); - // gStyle->SetHistFillStyle(0); - gStyle->SetHistLineColor(1); - gStyle->SetHistLineStyle(0); - gStyle->SetHistLineWidth(1); - // gStyle->SetLegoInnerR(Float_t rad = 0.5); - // gStyle->SetNumberContours(Int_t number = 20); - - gStyle->SetEndErrorSize(2); - //gStyle->SetErrorMarker(20); - gStyle->SetErrorX(0.); - - gStyle->SetMarkerStyle(20); - -//For the fit/function: - gStyle->SetOptFit(1); - gStyle->SetFitFormat("5.4g"); - gStyle->SetFuncColor(2); - gStyle->SetFuncStyle(1); - gStyle->SetFuncWidth(1); - -//For the date: - gStyle->SetOptDate(0); - // gStyle->SetDateX(Float_t x = 0.01); - // gStyle->SetDateY(Float_t y = 0.01); - -// For the statistics box: - gStyle->SetOptFile(0); - //gStyle->SetOptStat(0); - gStyle->SetOptStat("mr"); - gStyle->SetStatColor(kWhite); - gStyle->SetStatFont(42); - gStyle->SetStatFontSize(0.04);///---> gStyle->SetStatFontSize(0.025); - gStyle->SetStatTextColor(1); - gStyle->SetStatFormat("6.4g"); - gStyle->SetStatBorderSize(1); - gStyle->SetStatH(0.1); - gStyle->SetStatW(0.2);///---> gStyle->SetStatW(0.15); - - // gStyle->SetStatStyle(Style_t style = 1001); - // gStyle->SetStatX(Float_t x = 0); - // gStyle->SetStatY(Float_t y = 0); - -// Margins: - gStyle->SetPadTopMargin(0.05); - gStyle->SetPadBottomMargin(0.13); - gStyle->SetPadLeftMargin(0.16); - gStyle->SetPadRightMargin(0.02); - -// For the Global title: - - gStyle->SetOptTitle(0); - gStyle->SetTitleFont(42); - gStyle->SetTitleColor(1); - gStyle->SetTitleTextColor(1); - gStyle->SetTitleFillColor(10); - gStyle->SetTitleFontSize(0.05); - // gStyle->SetTitleH(0); // Set the height of the title box - // gStyle->SetTitleW(0); // Set the width of the title box - // gStyle->SetTitleX(0); // Set the position of the title box - // gStyle->SetTitleY(0.985); // Set the position of the title box - // gStyle->SetTitleStyle(Style_t style = 1001); - // gStyle->SetTitleBorderSize(2); - -// For the axis titles: - - gStyle->SetTitleColor(1, "XYZ"); - gStyle->SetTitleFont(42, "XYZ"); - gStyle->SetTitleSize(0.06, "XYZ"); - // gStyle->SetTitleXSize(Float_t size = 0.02); // Another way to set the size? - // gStyle->SetTitleYSize(Float_t size = 0.02); - gStyle->SetTitleXOffset(0.9); - gStyle->SetTitleYOffset(1.25); - // gStyle->SetTitleOffset(1.1, "Y"); // Another way to set the Offset - -// For the axis labels: - - gStyle->SetLabelColor(1, "XYZ"); - gStyle->SetLabelFont(42, "XYZ"); - gStyle->SetLabelOffset(0.007, "XYZ"); - gStyle->SetLabelSize(0.05, "XYZ"); - -// For the axis: - - gStyle->SetAxisColor(1, "XYZ"); - gStyle->SetStripDecimals(kTRUE); - gStyle->SetTickLength(0.03, "XYZ"); - gStyle->SetNdivisions(510, "XYZ"); - gStyle->SetPadTickX(1); // To get tick marks on the opposite side of the frame - gStyle->SetPadTickY(1); - -// Change for log plots: - gStyle->SetOptLogx(0); - gStyle->SetOptLogy(0); - gStyle->SetOptLogz(0); - -// Postscript options: - gStyle->SetPaperSize(20.,20.); - // gStyle->SetLineScalePS(Float_t scale = 3); - // gStyle->SetLineStyleString(Int_t i, const char* text); - // gStyle->SetHeaderPS(const char* header); - // gStyle->SetTitlePS(const char* pstitle); - - // gStyle->SetBarOffset(Float_t baroff = 0.5); - // gStyle->SetBarWidth(Float_t barwidth = 0.5); - // gStyle->SetPaintTextFormat(const char* format = "g"); - // gStyle->SetPalette(Int_t ncolors = 0, Int_t* colors = 0); - // gStyle->SetTimeOffset(Double_t toffset); - // gStyle->SetHistMinimumZero(kTRUE); - -// gStyle->cd(); - - gROOT->ForceStyle(); - -} diff --git a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/GetLuminosity/GetLuminosity.C b/SUSYBSMAnalysis/HSCP/test/UsefulScripts/GetLuminosity/GetLuminosity.C deleted file mode 100644 index ded1ba86b25f6..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/GetLuminosity/GetLuminosity.C +++ /dev/null @@ -1,131 +0,0 @@ - -#include -#include - -#include "TROOT.h" -#include "TFile.h" -#include "TDirectory.h" -#include "TChain.h" -#include "TObject.h" -#include "TCanvas.h" -#include "TMath.h" -#include "TLegend.h" -#include "TGraph.h" -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include "TTree.h" -#include "TF1.h" -#include "TGraphAsymmErrors.h" -#include "TPaveText.h" - - -#if !defined(__CINT__) && !defined(__MAKECINT__) -#include "DataFormats/FWLite/interface/Handle.h" -#include "DataFormats/FWLite/interface/Event.h" - -#include "DataFormats/FWLite/interface/LuminosityBlock.h" -#include "DataFormats/FWLite/interface/Run.h" -#include "DataFormats/Luminosity/interface/LumiSummary.h" - -#include "../../ICHEP_Analysis/Analysis_Samples.h" - -using namespace fwlite; - -#endif - -struct stRun { - unsigned int runId; - std::vector lumiId; -}; - -void GetLumiBlocks_Core(vector& fileNames, std::vector& RunMap); -void DumpJson(const std::vector& RunMap, char* FileName); -void RemoveRunsAfter(unsigned int RunMax, const std::vector& RunMap, std::vector& NewRunMap); - -void GetLuminosity() -{ - //std::string BaseDirectory = "/storage/data/cms/users/quertenmont/HSCP/CMSSW_4_2_3/11_08_03/"; - vector inputFiles; - GetInputFiles(inputFiles, "Data"); - std::vector RunMap; - GetLumiBlocks_Core(inputFiles, RunMap); - DumpJson(RunMap, "out.json"); - - std::vector RunMapBefRPC; - RemoveRunsAfter(165970, RunMap, RunMapBefRPC); - DumpJson(RunMapBefRPC, "out_beforeRPCChange.json"); -} - -void GetLumiBlocks_Core(vector& fileNames, std::vector& RunMap) -{ - printf("Running\n"); - for(unsigned int f=0;f Lumi =%lu\n",ls.luminosityBlockAuxiliary().run(), (unsigned long)ls.luminosityBlockAuxiliary().id().value()); - int RunIndex = -1; - for(unsigned int r=0;rrunId==ls.luminosityBlockAuxiliary().run()){ - RunIndex = (int)r; - break; - } - } - - if(RunIndex<0){ - stRun* tmp = new stRun(); - tmp->runId=ls.luminosityBlockAuxiliary().run(); - tmp->lumiId.push_back(ls.luminosityBlockAuxiliary().id().value()); - RunMap.push_back(tmp); - //std::sort(RunMap.begin(), RunMap.end(), stRunLess); - }else{ - stRun* tmp = RunMap[RunIndex]; - int LumiIndex = -1; - for(unsigned int l=0;llumiId.size();l++){ - //printf("%lu vs %lu\n",tmp->lumiId[l], (unsigned long) ls.luminosityBlockAuxiliary().id().value() ); - if(tmp->lumiId[l]== (unsigned int) ls.luminosityBlockAuxiliary().id().value()){ - LumiIndex = (int)l; - break; - } - } - if(LumiIndex<0){ - tmp->lumiId.push_back((unsigned int) ls.luminosityBlockAuxiliary().id().value()); - std::sort(tmp->lumiId.begin(), tmp->lumiId.end()); - } - } - }printf("\n"); - } -} - -void RemoveRunsAfter(unsigned int RunMax, const std::vector& RunMap, std::vector& NewRunMap){ - for(unsigned int r=0;rrunId& RunMap, char* FileName){ - FILE* json = fopen(FileName,"w"); - fprintf(json,"{"); - for(unsigned int r=0;rrunId); - unsigned int l=0; - while(llumiId.size()){ - unsigned int FirstLumi = tmp->lumiId[l]; - unsigned Size=0; - for(unsigned int l2=l;l2lumiId.size() && FirstLumi+l2-l==tmp->lumiId[l2]; l2++){Size++;} - fprintf(json,"[%i, %i]",FirstLumi,FirstLumi+Size-1); - l+=Size; - if(llumiId.size()) fprintf(json,","); - } - fprintf(json,"] "); - if(rGetMakeSharedLib()); - TString dummy = makeshared.ReplaceAll("-W ", ""); - gSystem->SetMakeSharedLib(makeshared); - gSystem->Load("libFWCoreFWLite"); - FWLiteEnabler::enable();; - gSystem->Load("libDataFormatsFWLite.so"); - gSystem->Load("libDataFormatsCommon.so"); - .x GetLuminosity.C+ -EOF -lumiCalc2.py --nowarning -c frontier://LumiCalc/CMS_LUMI_PROD -i out.json overview -b stable > LUMI_TABLE -lumiCalc2.py --nowarning -c frontier://LumiCalc/CMS_LUMI_PROD -i out_beforeRPCChange.json overview -b stable > LUMI_TABLE_BEFORE_RPC_CHANGE diff --git a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/Launch.py b/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/Launch.py deleted file mode 100644 index 1ab6dbfce7c90..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/Launch.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python - -from __future__ import print_function -import urllib -import string -import os -import sys -import LaunchOnCondor -import glob - -print('OPTIMIZATION') -FarmDirectory = "FARM" -JobName = "HSCPStability" -LaunchOnCondor.Jobs_RunHere = 1 -LaunchOnCondor.SendCluster_Create(FarmDirectory, JobName) -LaunchOnCondor.SendCluster_Push(["FWLITE", os.getcwd()+"/StabilityCheck.C", '"ANALYSE"']) -LaunchOnCondor.SendCluster_Submit() diff --git a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/LaunchOnCondor.py b/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/LaunchOnCondor.py deleted file mode 100644 index cb1a3d28b3a37..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/LaunchOnCondor.py +++ /dev/null @@ -1,300 +0,0 @@ -#!/usr/bin/env python - -from __future__ import print_function -import urllib -import string -import os -import sys -import glob - -CopyRights = '####################################\n' -CopyRights += '# LaunchOnFarm Script #\n' -CopyRights += '# Loic.quertenmont@cern.ch #\n' -CopyRights += '# April 2010 #\n' -CopyRights += '####################################\n' - -Farm_Directories = [] -Path_Cmd = '' -Path_Shell = '' -Path_Log = '' -Path_Cfg = '' -Jobs_Count = 0 -Jobs_Name = '' -Jobs_Index = '' -Jobs_Seed = 0 -Jobs_NEvent =-1 -Jobs_Skip = 0 -Jobs_Inputs = [] -Jobs_FinalCmds = [] -Jobs_RunHere = 0 - -def CreateTheConfigFile(argv): - global Jobs_Name - global Jobs_Index - global Jobs_Count - global Jobs_Seed - global Jobs_Skip - global Jobs_NEvent - global Jobs_Inputs - global Jobs_FinalCmds - global Path_Cfg - global CopyRights - Path_Cfg = Farm_Directories[1]+Jobs_Index+Jobs_Name+'_cfg.py' - - config_file=open(argv[1],'r') - config_txt = '\n\n' + CopyRights + '\n\n' - config_txt += config_file.read() - config_file.close() - i = 2 - while i < len(argv)-1: - config_txt = config_txt.replace(argv[i],argv[i+1]) - i+=2 - - #Default Replacements - config_txt = config_txt.replace("XXX_I_XXX" ,"%04i"%Jobs_Count) - config_txt = config_txt.replace("XXX_PATH_XXX" ,os.getcwd()) - config_txt = config_txt.replace("XXX_OUTPUT_XXX" ,Jobs_Name) - config_txt = config_txt.replace("XXX_NAME_XXX" ,Jobs_Index+Jobs_Name) - config_txt = config_txt.replace("XXX_SEED_XXX" ,str(Jobs_Seed+Jobs_Count)) - config_txt = config_txt.replace("XXX_NEVENTS_XXX" ,str(Jobs_NEvent)) - config_txt = config_txt.replace("XXX_SKIP_XXX" ,str(Jobs_Skip)) - if Jobs_Count < len(Jobs_Inputs): - config_txt = config_txt.replace("XXX_INPUT_XXX" ,Jobs_Inputs[Jobs_Count]) - - config_file=open(Path_Cfg,'w') - config_file.write(config_txt) - config_file.close() - -def CreateTheShellFile(argv): - global Path_Shell - global Path_Cfg - global CopyRights - global Jobs_RunHere - global Jobs_FinalCmds - Path_Shell = Farm_Directories[1]+Jobs_Index+Jobs_Name+'.sh' - - function_argument='(' - for i in range(2,len(argv)): - function_argument+="%s" % argv[i] - if i != len(argv)-1: - function_argument+=', ' - function_argument+=')' - - shell_file=open(Path_Shell,'w') - shell_file.write('#! /bin/sh\n') - shell_file.write(CopyRights + '\n') - shell_file.write('export SCRAM_ARCH=slc5_amd64_gcc434\n') - shell_file.write('export BUILD_ARCH=slc5_amd64_gcc434\n') - shell_file.write('export VO_CMS_SW_DIR=/nfs/soft/cms\n') - #shell_file.write('source /nfs/soft/cms/cmsset_default.sh\n') - shell_file.write('cd ' + os.getcwd() + '\n') - shell_file.write('eval `scramv1 runtime -sh`\n') - - if argv[0]=='BASH': - if Jobs_RunHere==0: - shell_file.write('cd -\n') - shell_file.write(argv[1] + " %s\n" % function_argument) - elif argv[0]=='ROOT': - if Jobs_RunHere==0: - shell_file.write('cd -\n') - shell_file.write('source setstandaloneroot.sh\n') - shell_file.write('root -l -b << EOF\n') - shell_file.write(' TString makeshared(gSystem->GetMakeSharedLib());\n') - shell_file.write(' TString dummy = makeshared.ReplaceAll("-W ", "");\n') - shell_file.write(' TString dummy = makeshared.ReplaceAll("-Wshadow ", "");\n') - shell_file.write(' gSystem->SetMakeSharedLib(makeshared);\n') - shell_file.write(' .x %s+' % argv[1] + function_argument + '\n') -# shell_file.write("root -l -b -q %s" % argv[1] + "+'%s'\n" % function_argument) - shell_file.write(' .q\n') - shell_file.write('EOF\n\n') - elif argv[0]=='FWLITE': - if Jobs_RunHere==0: - shell_file.write('cd -\n') -# shell_file.write('eval `scramv1 runtime -sh`\n') - shell_file.write('root -l -b << EOF\n') - shell_file.write(' TString makeshared(gSystem->GetMakeSharedLib());\n') - shell_file.write(' TString dummy = makeshared.ReplaceAll("-W ", "");\n') - shell_file.write(' TString dummy = makeshared.ReplaceAll("-Wshadow ", "");\n') - shell_file.write(' gSystem->SetMakeSharedLib(makeshared);\n') - shell_file.write(' gSystem->SetIncludePath("-I$ROOFITSYS/include");\n') - shell_file.write(' gSystem->Load("libFWCoreFWLite");\n') - shell_file.write(' FWLiteEnabler::enable();;\n') - shell_file.write(' gSystem->Load("libDataFormatsFWLite.so");\n') - shell_file.write(' gSystem->Load("libAnalysisDataFormatsSUSYBSMObjects.so");\n') - shell_file.write(' gSystem->Load("libDataFormatsVertexReco.so");\n') - shell_file.write(' gSystem->Load("libDataFormatsHepMCCandidate.so");\n') - shell_file.write(' gSystem->Load("libPhysicsToolsUtilities.so");\n') - shell_file.write(' .x %s+' % argv[1] + function_argument + '\n') - shell_file.write(' .q\n') - shell_file.write('EOF\n\n') - elif argv[0]=='CMSSW': - CreateTheConfigFile(argv); - if Jobs_RunHere==0: - shell_file.write('cd -\n') - shell_file.write('cmsRun ' + os.getcwd() + '/'+Path_Cfg + '\n') - else: - print() #Program to use is not specified... Guess it is bash command - shell_file.write('#Program to use is not specified... Guess it is bash command\n') - shell_file.write(argv[1] + " %s\n" % function_argument) - - for i in range(len(Jobs_FinalCmds)): - shell_file.write(Jobs_FinalCmds[i]+'\n') - shell_file.write('mv '+ Jobs_Name+'* '+os.getcwd()+'/'+Farm_Directories[3]+'\n') - shell_file.close() - os.system("chmod 777 "+Path_Shell) - - -def CreateTheCmdFile(): - global Path_Cmd - global CopyRights - Path_Cmd = Farm_Directories[1]+Jobs_Name+'.cmd' - cmd_file=open(Path_Cmd,'w') - cmd_file.write(CopyRights + '\n') - cmd_file.write('Universe = vanilla\n') - cmd_file.write('Environment = CONDORJOBID=$(Process)\n') - cmd_file.write('notification = Error\n') - #cmd_file.write('requirements = (CMSFARM=?=True)&&(Memory > 200)\n') - cmd_file.write('requirements = (Memory > 200)\n') - cmd_file.write('should_transfer_files = YES\n') - cmd_file.write('when_to_transfer_output = ON_EXIT\n') - cmd_file.close() - -def AddJobToCmdFile(): - global Path_Shell - global Path_Cmd - global Path_Log - Path_Log = Farm_Directories[2]+Jobs_Index+Jobs_Name - cmd_file=open(Path_Cmd,'a') - cmd_file.write('\n') - cmd_file.write('Executable = %s\n' % Path_Shell) - cmd_file.write('output = %s.out\n' % Path_Log) - cmd_file.write('error = %s.err\n' % Path_Log) - cmd_file.write('log = %s.log\n' % Path_Log) - cmd_file.write('Queue 1\n') - cmd_file.close() - -def CreateDirectoryStructure(FarmDirectory): - global Jobs_Name - global Farm_Directories - Farm_Directories = [FarmDirectory+'/', FarmDirectory+'/inputs/', FarmDirectory+'/logs/', FarmDirectory+'/outputs/'] - for i in range(0,len(Farm_Directories)): - if os.path.isdir(Farm_Directories[i]) == False: - os.system('mkdir ' + Farm_Directories[i]) - -def SendCluster_LoadInputFiles(path, NJobs): - global Jobs_Inputs - input_file = open(path,'r') - input_lines = input_file.readlines() - input_file.close() - #input_lines.sort() - - BlockSize = (len(input_lines)/NJobs) - LineIndex = 0 - JobIndex = 0 - BlockIndex = 0 - Jobs_Inputs = [""] - while LineIndex < len(input_lines): - Jobs_Inputs[JobIndex] += input_lines[LineIndex] - LineIndex +=1 - BlockIndex+=1 - if BlockIndex>BlockSize: - BlockIndex = 0 - JobIndex += 1 - Jobs_Inputs.append("") - return JobIndex+1 - -def SendCluster_Create(FarmDirectory, JobName): - global Jobs_Name - global Jobs_Count - global Farm_Directories - Jobs_Name = JobName - Jobs_Count = 0 - CreateDirectoryStructure(FarmDirectory) - CreateTheCmdFile() - -def SendCluster_Push(Argv): - global Farm_Directories - global Jobs_Count - global Jobs_Index - global Path_Shell - global Path_Log - - Jobs_Index = "%04i_" % Jobs_Count - if Jobs_Count==0 and (Argv[0]=="ROOT" or Argv[0]=="FWLITE"): - #First Need to Compile the macro --> Create a temporary shell path with no arguments - print("Compiling the Macro...") - CreateTheShellFile([Argv[0],Argv[1]]) - os.system('sh '+Path_Shell) - os.system('rm '+Path_Shell) - print("Getting the jobs...") - print(Argv) - CreateTheShellFile(Argv) - AddJobToCmdFile() - Jobs_Count = Jobs_Count+1 - -def SendCluster_Submit(): - global CopyRights - global Jobs_Count - global Path_Cmd - print("condor_submit " + Path_Cmd) - os.system("condor_submit " + Path_Cmd) - print('\n'+CopyRights) - print('%i Job(s) has/have been submitted on the Computing Cluster' % Jobs_Count) - -def SendSingleJob(FarmDirectory, JobName, Argv): - SendCluster_Create(FarmDirectory, JobName, Argv) - SendCluster_Push(FarmDirectory, JobName, Argv) - SendCluster_Submit(FarmDirectory, JobName,Argv) - -def SendCMSJobs(FarmDirectory, JobName, ConfigFile, InputFiles, NJobs, Argv): - SendCluster_Create(FarmDirectory, JobName) - NJobs = SendCluster_LoadInputFiles(InputFiles, NJobs) - for i in range(NJobs): - LaunchOnCondor.SendCluster_Push (["CMSSW", ConfigFile]) - LaunchOnCondor.SendCluster_Submit() - - - -def GetListOfFiles(Prefix, InputPattern, Suffix): - List = sorted(glob.glob(InputPattern)) - for i in range(len(List)): - List[i] = Prefix + List[i] + Suffix - return List - -def SendCMSMergeJob(FarmDirectory, JobName, InputFiles, OutputFile, KeepStatement): - SendCluster_Create(FarmDirectory, JobName) - Temp_Cfg = Farm_Directories[1]+Jobs_Index+Jobs_Name+'_TEMP_cfg.py' - - if len(InputFiles)==0: - print('Empty InputFile List for Job named "%s", Job will not be submitted' % JobName) - return - - InputFilesString = "" - for i in range(len(InputFiles)): - InputFilesString += " " + InputFiles[i] + '\n' - - cfg_file=open(Temp_Cfg,'w') - cfg_file.write('import FWCore.ParameterSet.Config as cms\n') - cfg_file.write('process = cms.Process("Merge")\n') - cfg_file.write('\n') - cfg_file.write('process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) )\n') - cfg_file.write('process.load("FWCore.MessageService.MessageLogger_cfi")\n') - cfg_file.write('\n') - cfg_file.write('process.MessageLogger.cerr.FwkReport.reportEvery = 50000\n') - cfg_file.write('process.source = cms.Source("PoolSource",\n') - cfg_file.write(' fileNames = cms.untracked.vstring(\n') - cfg_file.write('%s' % InputFilesString) - cfg_file.write(' )\n') - cfg_file.write(')\n') - cfg_file.write('\n') - cfg_file.write('process.OUT = cms.OutputModule("PoolOutputModule",\n') - cfg_file.write(' outputCommands = cms.untracked.vstring(%s),\n' % KeepStatement) - cfg_file.write(' fileName = cms.untracked.string(%s)\n' % OutputFile) - cfg_file.write(')\n') - cfg_file.write('\n') - cfg_file.write('process.endPath = cms.EndPath(process.OUT)\n') - cfg_file.close() - SendCluster_Push (["CMSSW", Temp_Cfg]) - SendCluster_Submit() - os.system('rm '+ Temp_Cfg) - diff --git a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/MakePlot.C b/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/MakePlot.C deleted file mode 100644 index 69e5efd7e96f3..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/MakePlot.C +++ /dev/null @@ -1,659 +0,0 @@ - -#include - -#include "TROOT.h" -#include "TFile.h" -#include "TDirectory.h" -#include "TChain.h" -#include "TObject.h" -#include "TCanvas.h" -#include "TMath.h" -#include "TLegend.h" -#include "TGraph.h" -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include "TTree.h" -#include "TF1.h" -#include "TGraphErrors.h" -#include "TGraphAsymmErrors.h" -#include "TPaveText.h" -#include "tdrstyle.C" -#include "TProfile.h" - -#include "../../ICHEP_Analysis/Analysis_PlotFunction.h" -#include "../../ICHEP_Analysis/Analysis_Samples.h" - -std::map RunToIntLumi; - -bool LoadLumiToRun() -{ - float TotalIntLuminosity = 0; - - FILE* pFile = fopen("out.txt","r"); - if(!pFile){ - printf("Not Found: %s\n","out.txt"); - return false; - } - - unsigned int Run; float IntLumi; - unsigned int DeliveredLs; double DeliveredLumi; - char Line[2048], Tmp1[2048], Tmp2[2048], Tmp3[2048]; - while ( ! feof (pFile) ){ - fscanf(pFile,"%s\n",Line); -// printf("%s\n",Line); - for(unsigned int i=0;Line[i]!='\0';i++){if(Line[i]==',')Line[i]=' ';} - sscanf(Line,"%d %s %s %s %f\n",&Run,Tmp1,Tmp2,Tmp3,&IntLumi); - TotalIntLuminosity+= IntLumi/1000000.0; -// printf("%6i --> %f/pb (%s | %s | %s)\n",Run,TotalIntLuminosity,Tmp1,Tmp2,Tmp3); - RunToIntLumi[Run] = TotalIntLuminosity; - } - fclose(pFile); - return true; -} - - -TGraph* ConvertFromRunToIntLumi(TProfile* Object, const char* DrawOption, string YLabel, double YRange_Min=3.1, double YRange_Max=3.7){ - TGraphErrors* graph = new TGraphErrors(Object->GetXaxis()->GetNbins()); - for(unsigned int i=1;iGetXaxis()->GetNbins()+1;i++){ - int RunNumber; - sscanf(Object->GetXaxis()->GetBinLabel(i),"%d",&RunNumber); - graph->SetPoint(i-1, RunToIntLumi[RunNumber], Object->GetBinContent(i)); - graph->SetPointError(i-1, 0.0*RunToIntLumi[RunNumber], Object->GetBinError(i)); - } - graph->Draw(DrawOption); - graph->SetTitle(""); - graph->GetYaxis()->SetTitle(Object->GetYaxis()->GetTitle()); - graph->GetYaxis()->SetTitleOffset(1.10); - graph->GetXaxis()->SetTitle("Int. Luminosity (/pb)"); - graph->GetYaxis()->SetTitle(YLabel.c_str()); - graph->SetMarkerColor(Object->GetMarkerColor()); - graph->SetMarkerStyle(Object->GetMarkerStyle()); - graph->GetXaxis()->SetNdivisions(510); - if(YRange_Min!=YRange_Max)graph->GetYaxis()->SetRangeUser(YRange_Min,YRange_Max); - return graph; -} - -void MakedEdxPlot() -{ - setTDRStyle(); - gStyle->SetPadTopMargin (0.06); - gStyle->SetPadBottomMargin(0.15); - gStyle->SetPadRightMargin (0.03); - gStyle->SetPadLeftMargin (0.09); - gStyle->SetTitleSize(0.04, "XYZ"); - gStyle->SetTitleXOffset(1.1); - gStyle->SetTitleYOffset(1.35); - gStyle->SetPalette(1); - gStyle->SetNdivisions(505); - - TCanvas* c1; - TObject** Histos = new TObject*[10]; - std::vector legend; - - TFile* InputFile = new TFile("pictures/Histos.root"); - - TProfile* SingleMu_PtProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMuPtProf"); - TProfile* SingleMu_dEdxProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxProf"); - TProfile* SingleMu_dEdxMProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxMProf"); - TProfile* SingleMu_dEdxMSProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxMSProf"); - TProfile* SingleMu_dEdxMPProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxMPProf"); - TProfile* SingleMu_dEdxMSCProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxMSCProf"); - TProfile* SingleMu_dEdxMPCProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxMPCProf"); - TProfile* SingleMu_dEdxMSFProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxMSFProf"); - TProfile* SingleMu_dEdxMPFProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxMPFProf"); - - TProfile* SingleMu_NVertProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMuNVertProf"); - - SingleMu_NVertProf->LabelsDeflate("X"); - SingleMu_NVertProf->LabelsOption("av","X"); - -/* - TFile* InputFileLumi166380 = new TFile("pictures/HistosLumi166380.root"); - TFile* InputFileLumi166512 = new TFile("pictures/HistosLumi166512.root"); - TFile* InputFileLumi167807 = new TFile("pictures/HistosLumi167807.root"); - TFile* InputFileLumi167898 = new TFile("pictures/HistosLumi167898.root"); - - TProfile* SingleMu_dEdxMProfLumi166380 = (TProfile*)GetObjectFromPath(InputFileLumi166380, "HscpPathSingleMudEdxMProf"); - TProfile* SingleMu_dEdxMProfLumi166512 = (TProfile*)GetObjectFromPath(InputFileLumi166512, "HscpPathSingleMudEdxMProf"); - TProfile* SingleMu_dEdxMProfLumi167807 = (TProfile*)GetObjectFromPath(InputFileLumi167807, "HscpPathSingleMudEdxMProf"); - TProfile* SingleMu_dEdxMProfLumi167898 = (TProfile*)GetObjectFromPath(InputFileLumi167898, "HscpPathSingleMudEdxMProf"); -*/ - - if(LoadLumiToRun()){ - TLegend* leg; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - TGraph* graph = ConvertFromRunToIntLumi(SingleMu_dEdxMProf , "A*", "I_{h} (MeV/cm)"); - TGraph* graphS = ConvertFromRunToIntLumi(SingleMu_dEdxMSProf, "*" , "I_{h} (MeV/cm)"); - TGraph* graphP = ConvertFromRunToIntLumi(SingleMu_dEdxMPProf, "*" , "I_{h} (MeV/cm)"); - graphS->SetMarkerColor(2); graphS->SetMarkerStyle(26); - graphP->SetMarkerColor(4); graphP->SetMarkerStyle(32); - - - TF1* myfunc = new TF1("Fitgraph" ,"pol1",250,5000); graph ->Fit(myfunc ,"QN","",250,5000); myfunc ->SetLineWidth(2); myfunc ->SetLineColor(graph ->GetMarkerColor()); myfunc ->Draw("same"); - TF1* myfuncS= new TF1("FitgraphS","pol1",250,5000); graphS->Fit(myfuncS,"QN","",250,5000); myfuncS->SetLineWidth(2); myfuncS->SetLineColor(graphS->GetMarkerColor()); myfuncS->Draw("same"); - TF1* myfuncP= new TF1("FitgraphP","pol1",250,5000); graphP->Fit(myfuncP,"QN","",250,5000); myfuncP->SetLineWidth(2); myfuncP->SetLineColor(graphP->GetMarkerColor()); myfuncP->Draw("same"); - printf("%25s --> Chi2/ndf = %6.2f --> a=%6.2E+-%6.2E b=%6.2E+-%6.2E\n","dE/dx (Strip+Pixel)", myfunc ->GetChisquare()/ myfunc ->GetNDF(), myfunc ->GetParameter(0),myfunc ->GetParError(0),myfunc ->GetParameter(1),myfunc ->GetParError(1)); - printf("%25s --> Chi2/ndf = %6.2f --> a=%6.2E+-%6.2E b=%6.2E+-%6.2E\n","dE/dx (Strip)" , myfuncS->GetChisquare()/ myfuncS->GetNDF(), myfuncS->GetParameter(0),myfuncS->GetParError(0),myfuncS->GetParameter(1),myfuncS->GetParError(1)); - printf("%25s --> Chi2/ndf = %6.2f --> a=%6.2E+-%6.2E b=%6.2E+-%6.2E\n","dE/dx (Pixel)" , myfuncP->GetChisquare()/ myfuncP->GetNDF(), myfuncP->GetParameter(0),myfuncP->GetParError(0),myfuncP->GetParameter(1),myfuncP->GetParError(1)); - leg = new TLegend(0.79,0.92,0.79-0.20,0.92 - 3*0.05); leg->SetFillColor(0); leg->SetBorderSize(0); - leg->AddEntry(graph, "dE/dx (Strip+Pixel)" ,"P"); - leg->AddEntry(graphS, "dE/dx (Strip)" ,"P"); - leg->AddEntry(graphP, "dE/dx (Pixel)" ,"P"); - leg->Draw(); - SaveCanvas(c1,"pictures/","GraphdEdx_Profile_dEdxM"); - delete c1; delete leg; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - TGraph* graphSC = ConvertFromRunToIntLumi(SingleMu_dEdxMSCProf, "A*", "I_{h} (MeV/cm)"); - TGraph* graphSF = ConvertFromRunToIntLumi(SingleMu_dEdxMSFProf, "*" , "I_{h} (MeV/cm)"); - graphSC->SetMarkerColor(2); graphSC->SetMarkerStyle(26); - graphSF->SetMarkerColor(4); graphSF->SetMarkerStyle(32); - TF1* myfuncSC= new TF1("FitgraphSC","pol1",250,5000); graphSC->Fit(myfuncSC,"QN","",250,5000); myfuncSC->SetLineWidth(2); myfuncSC->SetLineColor(graphSC->GetMarkerColor()); myfuncSC->Draw("same"); - TF1* myfuncSF= new TF1("FitgraphSF","pol1",250,5000); graphSF->Fit(myfuncSF,"QN","",250,5000); myfuncSF->SetLineWidth(2); myfuncSF->SetLineColor(graphSF->GetMarkerColor()); myfuncSF->Draw("same"); - printf("%25s --> Chi2/ndf = %6.2f --> a=%6.2E+-%6.2E b=%6.2E+-%6.2E\n","dE/dx (Strip) |eta|<0.5", myfuncSC->GetChisquare()/ myfuncSC->GetNDF(), myfuncSC->GetParameter(0),myfuncSC->GetParError(0),myfuncSC->GetParameter(1),myfuncSC->GetParError(1)); - printf("%25s --> Chi2/ndf = %6.2f --> a=%6.2E+-%6.2E b=%6.2E+-%6.2E\n","dE/dx (Strip) |eta|>1.5", myfuncSF->GetChisquare()/ myfuncSF->GetNDF(), myfuncSF->GetParameter(0),myfuncSF->GetParError(0),myfuncSF->GetParameter(1),myfuncSF->GetParError(1)); - leg = new TLegend(0.79,0.92,0.79-0.20,0.92 - 3*0.05); leg->SetFillColor(0); leg->SetBorderSize(0); - leg->AddEntry(graphSC, "dE/dx (Strip) |#eta|<0.5" ,"P"); - leg->AddEntry(graphSF, "dE/dx (Strip) |#eta|>1.5" ,"P"); - leg->Draw(); - SaveCanvas(c1,"pictures/","GraphdEdx_Profile_dEdxMS"); - delete c1; delete leg; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - TGraph* graphPC = ConvertFromRunToIntLumi(SingleMu_dEdxMPCProf, "A*", "I_{h} (MeV/cm)"); - TGraph* graphPF = ConvertFromRunToIntLumi(SingleMu_dEdxMPFProf, "*" , "I_{h} (MeV/cm)"); - graphPC->SetMarkerColor(2); graphPC->SetMarkerStyle(26); - graphPF->SetMarkerColor(4); graphPF->SetMarkerStyle(32); - TF1* myfuncPC= new TF1("FitgraphPC","pol1",250,5000); graphPC->Fit(myfuncPC,"QN","",250,5000); myfuncPC->SetLineWidth(2); myfuncPC->SetLineColor(graphPC->GetMarkerColor()); myfuncPC->Draw("same"); - TF1* myfuncPF= new TF1("FitgraphPF","pol1",250,5000); graphPF->Fit(myfuncPF,"QN","",250,5000); myfuncPF->SetLineWidth(2); myfuncPF->SetLineColor(graphPF->GetMarkerColor()); myfuncPF->Draw("same"); - printf("%25s --> Chi2/ndf = %6.2f --> a=%6.2E+-%6.2E b=%6.2E+-%6.2E\n","dE/dx (Pixel) |eta|<0.5", myfuncPC->GetChisquare()/ myfuncPC->GetNDF(), myfuncPC->GetParameter(0),myfuncPC->GetParError(0),myfuncPC->GetParameter(1),myfuncPC->GetParError(1)); - printf("%25s --> Chi2/ndf = %6.2f --> a=%6.2E+-%6.2E b=%6.2E+-%6.2E\n","dE/dx (Pixel) |eta|>1.5", myfuncPF->GetChisquare()/ myfuncPF->GetNDF(), myfuncPF->GetParameter(0),myfuncPF->GetParError(0),myfuncPF->GetParameter(1),myfuncPF->GetParError(1)); - leg = new TLegend(0.79,0.92,0.79-0.20,0.92 - 3*0.05); leg->SetFillColor(0); leg->SetBorderSize(0); - leg->AddEntry(graphPC, "dE/dx (Pixel) |#eta|<0.5" ,"P"); - leg->AddEntry(graphPF, "dE/dx (Pixel) |#eta|>1.5" ,"P"); - leg->Draw(); - SaveCanvas(c1,"pictures/","GraphdEdx_Profile_dEdxMP"); - delete c1; delete leg; - - - - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - TGraph* graphNV = ConvertFromRunToIntLumi(SingleMu_NVertProf, "A*" , "<#Reco Vertices>",0,0); - SaveCanvas(c1,"pictures/","GraphdEdx_Profile_Vert"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - TGraph* graphpT = ConvertFromRunToIntLumi(SingleMu_PtProf, "A*" , " (GeV/c)",0,0); - SaveCanvas(c1,"pictures/","GraphdEdx_Profile_pT"); - delete c1; - - - }else{ - printf("TEST TEST TEST\n"); - } - - - for(unsigned int i=0;iGetXaxis()->GetNbins();i++){ - if((i+3)%4==0)continue; - SingleMu_PtProf->GetXaxis()->SetBinLabel(i,""); - SingleMu_dEdxProf->GetXaxis()->SetBinLabel(i,""); - SingleMu_dEdxMProf->GetXaxis()->SetBinLabel(i,""); - SingleMu_NVertProf->GetXaxis()->SetBinLabel(i,""); - } - - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = SingleMu_NVertProf; legend.push_back("SingleMu40"); - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "<#Reco Vertices>", 0,0, 0,0); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","dEdx_Profile_NVert"); - delete c1; - - - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = SingleMu_PtProf; legend.push_back("SingleMu40"); - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "p_{T} (GeV/c)", 0,0, 0,0); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","dEdx_Profile_Pt"); - delete c1; - - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = SingleMu_dEdxProf; legend.push_back("SingleMu40"); - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "I_{as}", 0,0, 0.02,0.06); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","dEdx_Profile_dEdx"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = SingleMu_dEdxMProf; legend.push_back("SingleMu40"); - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "I_{h}", 0,0, 3.2,3.4); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","dEdx_Profile_dEdxM"); - delete c1; - -/* - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = SingleMu_dEdxMProfLumi166380; legend.push_back("SingleMu40 - Run166380"); - Histos[1] = SingleMu_dEdxMProfLumi166512; legend.push_back("SingleMu40 - Run166512"); - Histos[2] = SingleMu_dEdxMProfLumi167807; legend.push_back("SingleMu40 - Run167807"); - Histos[3] = SingleMu_dEdxMProfLumi167898; legend.push_back("SingleMu40 - Run167898"); - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "Lumi", "I_{h}", 0,0, 3.2,3.4); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","dEdx_Profile_dEdxMRun"); - delete c1; -*/ - - -} - - - - - -void MakePlot() -{ - setTDRStyle(); - gStyle->SetPadTopMargin (0.06); - gStyle->SetPadBottomMargin(0.15); - gStyle->SetPadRightMargin (0.03); - gStyle->SetPadLeftMargin (0.07); - gStyle->SetTitleSize(0.04, "XYZ"); - gStyle->SetTitleXOffset(1.1); - gStyle->SetTitleYOffset(1.35); - gStyle->SetPalette(1); - gStyle->SetNdivisions(505); - - TCanvas* c1; - TObject** Histos = new TObject*[10]; - std::vector legend; - - TFile* InputFile = new TFile("pictures/Histos.root"); - - TProfile* Any_PtProf = (TProfile*)GetObjectFromPath(InputFile, "AnyPtProf"); - TProfile* SingleMu_PtProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMuPtProf"); - TProfile* PFMet_PtProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetPtProf"); - - TProfile* Any_dEdxProf = (TProfile*)GetObjectFromPath(InputFile, "AnydEdxProf"); - TProfile* SingleMu_dEdxProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxProf"); - TProfile* PFMet_dEdxProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetdEdxProf"); - - TProfile* Any_dEdxMProf = (TProfile*)GetObjectFromPath(InputFile, "AnydEdxMProf"); - TProfile* SingleMu_dEdxMProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxMProf"); - TProfile* PFMet_dEdxMProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetdEdxMProf"); - - TProfile* Any_dEdxMSProf = (TProfile*)GetObjectFromPath(InputFile, "AnydEdxMSProf"); - TProfile* SingleMu_dEdxMSProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxMSProf"); - TProfile* PFMet_dEdxMSProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetdEdxMSProf"); - - TProfile* Any_dEdxMPProf = (TProfile*)GetObjectFromPath(InputFile, "AnydEdxMPProf"); - TProfile* SingleMu_dEdxMPProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxMPProf"); - TProfile* PFMet_dEdxMPProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetdEdxMPProf"); - - TProfile* Any_dEdxMSCProf = (TProfile*)GetObjectFromPath(InputFile, "AnydEdxMSCProf"); - TProfile* SingleMu_dEdxMSCProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxMSCProf"); - TProfile* PFMet_dEdxMSCProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetdEdxMSCProf"); - - TProfile* Any_dEdxMPCProf = (TProfile*)GetObjectFromPath(InputFile, "AnydEdxMPCProf"); - TProfile* SingleMu_dEdxMPCProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxMPCProf"); - TProfile* PFMet_dEdxMPCProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetdEdxMPCProf"); - - TProfile* Any_dEdxMSFProf = (TProfile*)GetObjectFromPath(InputFile, "AnydEdxMSFProf"); - TProfile* SingleMu_dEdxMSFProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxMSFProf"); - TProfile* PFMet_dEdxMSFProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetdEdxMSFProf"); - - TProfile* Any_dEdxMPFProf = (TProfile*)GetObjectFromPath(InputFile, "AnydEdxMPFProf"); - TProfile* SingleMu_dEdxMPFProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMudEdxMPFProf"); - TProfile* PFMet_dEdxMPFProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetdEdxMPFProf"); - - TProfile* Any_TOFProf = (TProfile*)GetObjectFromPath(InputFile, "AnyTOFProf"); - TProfile* SingleMu_TOFProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMuTOFProf"); - TProfile* PFMet_TOFProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetTOFProf"); - - TProfile* Any_TOFDTProf = (TProfile*)GetObjectFromPath(InputFile, "AnyTOFDTProf"); - TProfile* SingleMu_TOFDTProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMuTOFDTProf"); - TProfile* PFMet_TOFDTProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetTOFDTProf"); - - TProfile* Any_TOFCSCProf = (TProfile*)GetObjectFromPath(InputFile, "AnyTOFCSCProf"); - TProfile* SingleMu_TOFCSCProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMuTOFCSCProf"); - TProfile* PFMet_TOFCSCProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetTOFCSCProf"); - - TProfile* Any_VertexProf = (TProfile*)GetObjectFromPath(InputFile, "AnyVertexProf"); - TProfile* SingleMu_VertexProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMuVertexProf"); - TProfile* PFMet_VertexProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetVertexProf"); - - TProfile* Any_VertexDTProf = (TProfile*)GetObjectFromPath(InputFile, "AnyVertexDTProf"); - TProfile* SingleMu_VertexDTProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMuVertexDTProf"); - TProfile* PFMet_VertexDTProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetVertexDTProf"); - - TProfile* Any_VertexCSCProf = (TProfile*)GetObjectFromPath(InputFile, "AnyVertexCSCProf"); - TProfile* SingleMu_VertexCSCProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMuVertexCSCProf"); - TProfile* PFMet_VertexCSCProf = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetVertexCSCProf"); - - TProfile* Any_HdEdx = (TProfile*)GetObjectFromPath(InputFile, "AnyHdEdx"); - TProfile* SingleMu_HdEdx = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMuHdEdx"); - TProfile* PFMet_HdEdx = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetHdEdx"); - - TProfile* Any_HPt = (TProfile*)GetObjectFromPath(InputFile, "AnyHPt"); - TProfile* SingleMu_HPt = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMuHPt"); - TProfile* PFMet_HPt = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetHPt"); - - TProfile* Any_HTOF = (TProfile*)GetObjectFromPath(InputFile, "AnyHTOF"); - TProfile* SingleMu_HTOF = (TProfile*)GetObjectFromPath(InputFile, "HscpPathSingleMuHTOF"); - TProfile* PFMet_HTOF = (TProfile*)GetObjectFromPath(InputFile, "HscpPathPFMetHTOF"); - - for(unsigned int i=0;iGetXaxis()->GetNbins();i++){ - if((i+3)%12==0)continue; - Any_PtProf ->GetXaxis()->SetBinLabel(i,""); - SingleMu_PtProf ->GetXaxis()->SetBinLabel(i,""); - PFMet_PtProf ->GetXaxis()->SetBinLabel(i,""); - - Any_dEdxProf ->GetXaxis()->SetBinLabel(i,""); - SingleMu_dEdxProf ->GetXaxis()->SetBinLabel(i,""); - PFMet_dEdxProf ->GetXaxis()->SetBinLabel(i,""); - - Any_dEdxMProf ->GetXaxis()->SetBinLabel(i,""); - SingleMu_dEdxMProf ->GetXaxis()->SetBinLabel(i,""); - PFMet_dEdxMProf ->GetXaxis()->SetBinLabel(i,""); - - Any_dEdxMSProf ->GetXaxis()->SetBinLabel(i,""); - SingleMu_dEdxMSProf ->GetXaxis()->SetBinLabel(i,""); - PFMet_dEdxMSProf ->GetXaxis()->SetBinLabel(i,""); - - Any_dEdxMPProf ->GetXaxis()->SetBinLabel(i,""); - SingleMu_dEdxMPProf ->GetXaxis()->SetBinLabel(i,""); - PFMet_dEdxMPProf ->GetXaxis()->SetBinLabel(i,""); - - Any_dEdxMSCProf ->GetXaxis()->SetBinLabel(i,""); - SingleMu_dEdxMSCProf->GetXaxis()->SetBinLabel(i,""); - PFMet_dEdxMSCProf ->GetXaxis()->SetBinLabel(i,""); - - Any_dEdxMPCProf ->GetXaxis()->SetBinLabel(i,""); - SingleMu_dEdxMPCProf->GetXaxis()->SetBinLabel(i,""); - PFMet_dEdxMPCProf ->GetXaxis()->SetBinLabel(i,""); - - Any_dEdxMSFProf ->GetXaxis()->SetBinLabel(i,""); - SingleMu_dEdxMSFProf->GetXaxis()->SetBinLabel(i,""); - PFMet_dEdxMSFProf ->GetXaxis()->SetBinLabel(i,""); - - Any_dEdxMPFProf ->GetXaxis()->SetBinLabel(i,""); - SingleMu_dEdxMPFProf->GetXaxis()->SetBinLabel(i,""); - PFMet_dEdxMPFProf ->GetXaxis()->SetBinLabel(i,""); - - Any_TOFProf ->GetXaxis()->SetBinLabel(i,""); - SingleMu_TOFProf ->GetXaxis()->SetBinLabel(i,""); - PFMet_TOFProf ->GetXaxis()->SetBinLabel(i,""); - - Any_TOFDTProf ->GetXaxis()->SetBinLabel(i,""); - SingleMu_TOFDTProf ->GetXaxis()->SetBinLabel(i,""); - PFMet_TOFDTProf ->GetXaxis()->SetBinLabel(i,""); - - Any_TOFCSCProf ->GetXaxis()->SetBinLabel(i,""); - SingleMu_TOFCSCProf->GetXaxis()->SetBinLabel(i,""); - PFMet_TOFCSCProf ->GetXaxis()->SetBinLabel(i,""); - - Any_VertexProf ->GetXaxis()->SetBinLabel(i,""); - SingleMu_VertexProf ->GetXaxis()->SetBinLabel(i,""); - PFMet_VertexProf ->GetXaxis()->SetBinLabel(i,""); - - Any_VertexDTProf ->GetXaxis()->SetBinLabel(i,""); - SingleMu_VertexDTProf ->GetXaxis()->SetBinLabel(i,""); - PFMet_VertexDTProf ->GetXaxis()->SetBinLabel(i,""); - - Any_VertexCSCProf ->GetXaxis()->SetBinLabel(i,""); - SingleMu_VertexCSCProf->GetXaxis()->SetBinLabel(i,""); - PFMet_VertexCSCProf ->GetXaxis()->SetBinLabel(i,""); - - Any_HdEdx ->GetXaxis()->SetBinLabel(i,""); - SingleMu_HdEdx ->GetXaxis()->SetBinLabel(i,""); - PFMet_HdEdx ->GetXaxis()->SetBinLabel(i,""); - - Any_HPt ->GetXaxis()->SetBinLabel(i,""); - SingleMu_HPt ->GetXaxis()->SetBinLabel(i,""); - PFMet_HPt ->GetXaxis()->SetBinLabel(i,""); - - Any_HTOF ->GetXaxis()->SetBinLabel(i,""); - SingleMu_HTOF ->GetXaxis()->SetBinLabel(i,""); - PFMet_HTOF ->GetXaxis()->SetBinLabel(i,""); - } - - - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = Any_PtProf; legend.push_back("Any"); - //Histos[1] = SingleMu_PtProf; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_PtProf; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "p_{T} (GeV/c)", 0,0, 0,150); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_Profile_Pt"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = Any_dEdxProf; legend.push_back("Any"); - //Histos[1] = SingleMu_dEdxProf; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_dEdxProf; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "I_{as}", 0,0, 0.02,0.05); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_Profile_dEdx"); - delete c1; - - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = Any_dEdxMProf; legend.push_back("Any"); - //Histos[1] = SingleMu_dEdxMProf; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_dEdxMProf; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "I_{h}", 0,0, 3.1,3.6); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_Profile_dEdxM"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = Any_dEdxMSProf; legend.push_back("Any"); - //Histos[1] = SingleMu_dEdxMSProf; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_dEdxMSProf; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "I_{h} S", 0,0, 3.1,3.6); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_Profile_dEdxMS"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = Any_dEdxMPProf; legend.push_back("Any"); - //Histos[1] = SingleMu_dEdxMPProf; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_dEdxMPProf; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "I_{h} P", 0,0, 3.1,3.6); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_Profile_dEdxMP"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = Any_dEdxMSCProf; legend.push_back("Any"); - //Histos[1] = SingleMu_dEdxMSCProf; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_dEdxMSCProf; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "I_{h} SC", 0,0, 3.1,3.6); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_Profile_dEdxMSC"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = Any_dEdxMPCProf; legend.push_back("Any"); - //Histos[1] = SingleMu_dEdxMPCProf; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_dEdxMPCProf; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "I_{h} PC", 0,0, 3.1,3.6); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_Profile_dEdxMPC"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = Any_dEdxMSFProf; legend.push_back("Any"); - //Histos[1] = SingleMu_dEdxMSFProf; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_dEdxMSFProf; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "I_{h} SF", 0,0, 3.1,3.6); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_Profile_dEdxMSF"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = Any_dEdxMPFProf; legend.push_back("Any"); - //Histos[1] = SingleMu_dEdxMPFProf; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_dEdxMPFProf; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "I_{h} PF", 0,0, 3.1,3.6); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_Profile_dEdxMPF"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = Any_TOFProf; legend.push_back("Any"); - //Histos[1] = SingleMu_TOFProf; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_TOFProf; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "1/#beta_{TOF}", 0,0, 0.95,1.05); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_Profile_TOF"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = Any_TOFDTProf; legend.push_back("Any"); - //Histos[1] = SingleMu_TOFDTProf; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_TOFDTProf; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "1/#beta_{TOF_DT}", 0,0, 0.95,1.05); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_Profile_TOFDT"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = Any_TOFCSCProf; legend.push_back("Any"); - //Histos[1] = SingleMu_TOFCSCProf; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_TOFCSCProf; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "1/#beta_{TOF_CSC}", 0,0, 0.95,1.05); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_Profile_TOFCSC"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = Any_VertexProf; legend.push_back("Any"); - //Histos[1] = SingleMu_VertexProf; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_VertexProf; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "Vertex time [ns]", 0,0, -2,2); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_Profile_Vertex"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = Any_VertexDTProf; legend.push_back("Any"); - //Histos[1] = SingleMu_VertexDTProf; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_VertexDTProf; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "Vertex Time DT [ns]", 0,0, -2,2); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_Profile_VertexDT"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - Histos[0] = Any_VertexCSCProf; legend.push_back("Any"); - //Histos[1] = SingleMu_VertexCSCProf; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_VertexCSCProf; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "Vertex Time CSC [ns]", 0,0, -2,2); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_Profile_VertexCSC"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - //Histos[0] = Any_HdEdx; legend.push_back("Any"); - Histos[0] = Any_HdEdx; legend.push_back("I_{as} > 0.15"); - //Histos[1] = SingleMu_HdEdx; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_HdEdx; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "I_{h} ROT", 0,0, 0,0.05); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_ROT_dEdx"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - //Histos[0] = Any_HPt; legend.push_back("Any"); - Histos[0] = Any_HPt; legend.push_back("p_{T} > 60 GeV/c"); - //Histos[1] = SingleMu_HPt; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_HPt; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "Pt ROT", 0,0, 0.15,0.5); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_ROT_Pt"); - delete c1; - - c1 = new TCanvas("c1","c1,",1200,600); legend.clear(); - //Histos[0] = Any_HTOF; legend.push_back("Any"); - Histos[0] = Any_HTOF; legend.push_back("1/#beta > 1.1"); - //Histos[1] = SingleMu_HTOF; legend.push_back("SingleMu40"); - //Histos[2] = PFMet_HTOF; legend.push_back("PFMHT150"); - - DrawSuperposedHistos((TH1**)Histos, legend, "E1", "", "1/#beta_{TOF} ROT", 0,0, 0,0.2); - for(unsigned int i=0;iSetMarkerSize(0.5); ((TProfile*)Histos[i])->GetYaxis()->SetTitleOffset(0.9);} - //DrawLegend(Histos,legend,"","P"); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,"pictures/","Summary_ROT_TOF"); - delete c1; - - MakedEdxPlot(); -} - - diff --git a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/MakePlot.sh b/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/MakePlot.sh deleted file mode 100755 index d498f59b296c2..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/MakePlot.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -root -l -b << EOF - TString makeshared(gSystem->GetMakeSharedLib()); - TString dummy = makeshared.ReplaceAll("-W ", ""); - TString dummy = makeshared.ReplaceAll("-Wshadow ", ""); - gSystem->SetMakeSharedLib(makeshared); - gSystem->Load("libFWCoreFWLite"); - FWLiteEnabler::enable();; - gSystem->Load("libDataFormatsFWLite.so"); - gSystem->Load("libDataFormatsHepMCCandidate.so"); - gSystem->Load("libDataFormatsCommon.so"); - gSystem->Load("libDataFormatsTrackerRecHit2D.so"); - gSystem->Load("libAnalysisDataFormatsSUSYBSMObjects.so"); - .x MakePlot.C+ -EOF diff --git a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/StabilityCheck.C b/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/StabilityCheck.C deleted file mode 100644 index c85b817119a92..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/StabilityCheck.C +++ /dev/null @@ -1,1005 +0,0 @@ - -#include -#include - -#include "TROOT.h" -#include "TFile.h" -#include "TDirectory.h" -#include "TChain.h" -#include "TObject.h" -#include "TCanvas.h" -#include "TMath.h" -#include "TLegend.h" -#include "TGraph.h" -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include "TTree.h" -#include "TF1.h" -#include "TGraphAsymmErrors.h" -#include "TProfile.h" -#include "TPaveText.h" -#include "tdrstyle.C" - - -namespace reco { class Vertex; class Track; class GenParticle; class DeDxData; class MuonTimeExtra;} -namespace susybsm { class HSCParticle;} -namespace fwlite { class ChainEvent;} -namespace trigger { class TriggerEvent;} -namespace edm {class TriggerResults; class TriggerResultsByName; class InputTag;} - -#if !defined(__CINT__) && !defined(__MAKECINT__) -#include "DataFormats/FWLite/interface/Handle.h" -#include "DataFormats/FWLite/interface/Event.h" -#include "DataFormats/FWLite/interface/ChainEvent.h" - -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCParticle.h" -#include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" -#include "FWCore/Common/interface/TriggerResultsByName.h" - -#include "DataFormats/MuonReco/interface/MuonTimeExtraMap.h" -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCPIsolation.h" - -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/HLTReco/interface/TriggerObject.h" -#include "DataFormats/Common/interface/TriggerResults.h" - -using namespace fwlite; -using namespace reco; -using namespace susybsm; -using namespace std; -using namespace edm; -using namespace trigger; - - -#include "../../ICHEP_Analysis/Analysis_PlotFunction.h" -#include "../../ICHEP_Analysis/Analysis_Samples.h" -#include "../../ICHEP_Analysis/Analysis_Global.h" - - -#endif - - -bool PassPreselection(const susybsm::HSCParticle& hscp, const reco::DeDxData& dedxSObj, const reco::DeDxData& dedxMObj, const reco::MuonTimeExtra* tof, const reco::MuonTimeExtra* dttof, const reco::MuonTimeExtra* csctof, const fwlite::ChainEvent& ev); -bool IncreasedTreshold(const trigger::TriggerEvent& trEv, const edm::InputTag& InputPath, double NewThreshold, int NObjectAboveThreshold, bool averageThreshold=false); - - -bool PassPreselection(const susybsm::HSCParticle& hscp, const reco::DeDxData& dedxSObj, const reco::DeDxData& dedxMObj, const reco::MuonTimeExtra* tof, const reco::MuonTimeExtra* dttof, const reco::MuonTimeExtra* csctof, const fwlite::ChainEvent& ev) -{ - if(TypeMode==1 && !(hscp.type() == HSCParticleType::trackerMuon || hscp.type() == HSCParticleType::globalMuon))return false; - if(TypeMode==2 && hscp.type() != HSCParticleType::globalMuon)return false; - reco::TrackRef track = hscp.trackRef(); if(track.isNull())return false; - - if(fabs(track->eta())>GlobalMaxEta) return false; - if(track->found()hitPattern().numberOfValidPixelHits()<2)return false; - if(dedxSObj.numberOfMeasurements()nDof()nDof()nDof()qualityMask()chi2()/track->ndof()>GlobalMaxChi2 )return false; - if(track->pt()inverseBeta()inverseBetaErr()>GlobalMaxTOFErr)return false; - - fwlite::Handle< std::vector > vertexCollHandle; - vertexCollHandle.getByLabel(ev,"offlinePrimaryVertices"); - if(!vertexCollHandle.isValid()){printf("Vertex Collection NotFound\n");return false;} - const std::vector& vertexColl = *vertexCollHandle; - if(vertexColl.size()<1){printf("NO VERTEX\n"); return false;} - - double dz = track->dz (vertexColl[0].position()); - double dxy = track->dxy(vertexColl[0].position()); - for(unsigned int i=1;idz (vertexColl[i].position())) < fabs(dz) ){ - dz = track->dz (vertexColl[i].position()); - dxy = track->dxy(vertexColl[i].position()); - } - } - double v3d = sqrt(dz*dz+dxy*dxy); - if(v3d>GlobalMaxV3D )return false; - - fwlite::Handle IsolationH; - IsolationH.getByLabel(ev, "HSCPIsolation03"); - if(!IsolationH.isValid()){printf("Invalid IsolationH\n");return false;} - const ValueMap& IsolationMap = *IsolationH.product(); - - HSCPIsolation hscpIso = IsolationMap.get((size_t)track.key()); - if(hscpIso.Get_TK_SumEt()>GlobalMaxTIsol)return false; - - double EoP = (hscpIso.Get_ECAL_Energy() + hscpIso.Get_HCAL_Energy())/track->p(); - if(EoP>GlobalMaxEIsol)return false; - - if((track->ptError()/track->pt())>GlobalMaxPterr)return false; - if(std::max(0.0,track->pt() - track->ptError()) hTriggerResults; - hTriggerResults.getByLabel(ev, "TriggerResults", "", "MergeHLT"); - if(!hTriggerResults.isValid()) return false; - - edm::TriggerResultsByName tr = ev.triggerResultsByName(*hTriggerResults); - if(!tr.isValid())return false; - - bool Accept = false; - if(TriggerName=="Any"){ - Accept = true; - }else{ - Accept = tr.accept(tr.triggerIndex(TriggerName.c_str())); - } - - return Accept; -} - - - - -void StabilityCheck(string MODE="COMPILE") -{ - if(MODE=="COMPILE") return; - - Event_Weight = 1; - MaxEntry = -1; - - - system("mkdir pictures"); - - setTDRStyle(); - gStyle->SetPadTopMargin (0.06); - gStyle->SetPadBottomMargin(0.15); - gStyle->SetPadRightMargin (0.03); - gStyle->SetPadLeftMargin (0.07); - gStyle->SetTitleSize(0.04, "XYZ"); - gStyle->SetTitleXOffset(1.1); - gStyle->SetTitleYOffset(1.35); - gStyle->SetPalette(1); - gStyle->SetNdivisions(505,"X"); - TH1::AddDirectory(kTRUE); - - std::map RunBinIndex; - unsigned int NextIndex=0; - - vector DataFileName; - GetInputFiles(DataFileName, "Data"); -// DataFileName.push_back(" /storage/data/cms/users/quertenmont/HSCP/CMSSW_3_8_6/10_01_11/Data_135821_141887.root"); -// DataFileName.push_back(" /storage/data/cms/users/quertenmont/HSCP/CMSSW_3_8_6/10_01_11/Data_141888_144114.root"); -// DataFileName.push_back(" /storage/data/cms/users/quertenmont/HSCP/CMSSW_3_8_6/10_01_11/Data_146240_148000.root"); -// DataFileName.push_back(" /storage/data/cms/users/quertenmont/HSCP/CMSSW_3_8_6/10_01_11/Data_148001_149711.root"); - - - std::vector triggers; - triggers.push_back("Any"); -// triggers.push_back("HscpPathMu"); -// triggers.push_back("HscpPathMet"); - - triggers.push_back("HscpPathSingleMu"); -// triggers.push_back("HscpPathDoubleMu"); - triggers.push_back("HscpPathPFMet"); -// triggers.push_back("HscpPathCaloMet"); - - -/* triggers.push_back("HLT_MET100"); - triggers.push_back("HLT_Jet140U"); - triggers.push_back("HLT_DiJetAve140U"); - triggers.push_back("HLT_QuadJet25U"); - triggers.push_back("HLT_QuadJet30U"); - triggers.push_back("HLT_QuadJet35U"); - triggers.push_back("HLT_Mu15"); - triggers.push_back("HLT_DoubleMu3"); -*/ - - TProfile** NVertProf = new TProfile*[triggers.size()]; - TProfile** dEdxProf = new TProfile*[triggers.size()]; - TProfile** dEdxMProf = new TProfile*[triggers.size()]; - TProfile** dEdxMSProf = new TProfile*[triggers.size()]; - TProfile** dEdxMPProf = new TProfile*[triggers.size()]; - TProfile** dEdxMSCProf = new TProfile*[triggers.size()]; - TProfile** dEdxMPCProf = new TProfile*[triggers.size()]; - TProfile** dEdxMSFProf = new TProfile*[triggers.size()]; - TProfile** dEdxMPFProf = new TProfile*[triggers.size()]; - TProfile** PtProf = new TProfile*[triggers.size()]; - TProfile** TOFProf = new TProfile*[triggers.size()]; - TProfile** TOFDTProf = new TProfile*[triggers.size()]; - TProfile** TOFCSCProf = new TProfile*[triggers.size()]; - TProfile** TOFOverMinProf = new TProfile*[triggers.size()]; - TProfile** TOFDTOverMinProf = new TProfile*[triggers.size()]; - TProfile** TOFCSCOverMinProf = new TProfile*[triggers.size()]; - TProfile** VertexProf = new TProfile*[triggers.size()]; - TProfile** VertexDTProf = new TProfile*[triggers.size()]; - TProfile** VertexCSCProf = new TProfile*[triggers.size()]; - TH1D** Count = new TH1D* [triggers.size()]; - TH1D** CountMu = new TH1D* [triggers.size()]; - TH1D** HdEdx = new TH1D* [triggers.size()]; - TH1D** HPt = new TH1D* [triggers.size()]; - TH1D** HTOF = new TH1D* [triggers.size()]; - - - - system("mkdir pictures/"); - TFile* OutputHisto = new TFile((string("pictures/") + "/Histos.root").c_str(),"RECREATE"); - for(unsigned int i=0;iSumw2(); - CountMu [i] = new TH1D( (triggers[i] + "CountMu" ).c_str(), "CountMu" , 10000 ,0, 10000); CountMu[i]->Sumw2(); - HdEdx [i] = new TH1D( (triggers[i] + "HdEdx" ).c_str(), "HdEdx" , 10000 ,0, 10000); HdEdx [i]->Sumw2(); - HPt [i] = new TH1D( (triggers[i] + "HPt" ).c_str(), "HPt" , 10000 ,0, 10000); HPt [i]->Sumw2(); - HTOF [i] = new TH1D( (triggers[i] + "HTOF" ).c_str(), "HTOF" , 10000 ,0, 10000); HTOF [i]->Sumw2(); - } - - TypeMode = 0; - - fwlite::ChainEvent tree(DataFileName); - printf("Progressing Bar :0%% 20%% 40%% 60%% 80%% 100%%\n"); - printf("Looping on Tree :"); - int TreeStep = tree.size()/50;if(TreeStep==0)TreeStep=1; - for(Long64_t e=0;e10)break; - tree.to(e); - if(e%TreeStep==0){printf(".");fflush(stdout);} -// if(!PassTrigger(tree))continue; - - if(RunBinIndex.find(tree.eventAuxiliary().run()) == RunBinIndex.end()){ - RunBinIndex[tree.eventAuxiliary().run()] = NextIndex; - for(unsigned int i=0;iGetXaxis()->FindBin(NextIndex); - char Label[2048]; sprintf(Label,"%6i",tree.eventAuxiliary().run()); - HdEdx[i]->GetXaxis()->SetBinLabel(Bin, Label); - HPt[i]->GetXaxis()->SetBinLabel(Bin, Label); - HTOF[i]->GetXaxis()->SetBinLabel(Bin, Label); - Count[i]->GetXaxis()->SetBinLabel(Bin, Label); - NVertProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - dEdxProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - dEdxMProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - dEdxMSProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - dEdxMPProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - dEdxMSCProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - dEdxMPCProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - dEdxMSFProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - dEdxMPFProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - PtProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - TOFProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - TOFDTProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - TOFCSCProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - TOFOverMinProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - TOFDTOverMinProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - TOFCSCOverMinProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - VertexProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - VertexDTProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - VertexCSCProf[i]->GetXaxis()->SetBinLabel(Bin, Label); - } - NextIndex++; - } - unsigned int CurrentRunIndex = RunBinIndex[tree.eventAuxiliary().run()]; - - fwlite::Handle hscpCollHandle; - hscpCollHandle.getByLabel(tree,"HSCParticleProducer"); - if(!hscpCollHandle.isValid()){printf("HSCP Collection NotFound\n");continue;} - susybsm::HSCParticleCollection hscpColl = *hscpCollHandle; - - fwlite::Handle dEdxSCollH; - dEdxSCollH.getByLabel(tree, dEdxS_Label.c_str()); - if(!dEdxSCollH.isValid()){printf("Invalid dEdx Selection collection\n");continue;} - - fwlite::Handle dEdxMCollH; - dEdxMCollH.getByLabel(tree, dEdxM_Label.c_str()); - if(!dEdxMCollH.isValid()){printf("Invalid dEdx Mass collection\n");continue;} - - fwlite::Handle dEdxMSCollH; - dEdxMSCollH.getByLabel(tree, "dedxNPHarm2"); - if(!dEdxMSCollH.isValid()){printf("Invalid dEdx Mass collection\n");continue;} - - fwlite::Handle dEdxMPCollH; - dEdxMPCollH.getByLabel(tree, "dedxNSHarm2"); - if(!dEdxMPCollH.isValid()){printf("Invalid dEdx Mass collection\n");continue;} - - - fwlite::Handle TOFCollH; - TOFCollH.getByLabel(tree, "muontiming",TOF_Label.c_str()); - if(!TOFCollH.isValid()){printf("Invalid TOF collection\n");return;} - - - fwlite::Handle TOFDTCollH; - TOFDTCollH.getByLabel(tree, "muontiming",TOFdt_Label.c_str()); - if(!TOFDTCollH.isValid()){printf("Invalid DT TOF collection\n");continue;} - - fwlite::Handle TOFCSCCollH; - TOFCSCCollH.getByLabel(tree, "muontiming",TOFcsc_Label.c_str()); - if(!TOFCSCCollH.isValid()){printf("Invalid CSCTOF collection\n");continue;} - - fwlite::Handle< std::vector > vertexCollHandle; - vertexCollHandle.getByLabel(tree,"offlinePrimaryVertices"); - if(!vertexCollHandle.isValid()){printf("Vertex Collection NotFound\n");continue;} - const std::vector& vertexColl = *vertexCollHandle; - - - for(unsigned int c=0;cget(track.key()); - const DeDxData& dedxMObj = dEdxMCollH->get(track.key()); - const DeDxData& dedxMSObj = dEdxMSCollH->get(track.key()); - const DeDxData& dedxMPObj = dEdxMPCollH->get(track.key()); - const reco::MuonTimeExtra* tof = NULL; - const reco::MuonTimeExtra* dttof = NULL; - const reco::MuonTimeExtra* csctof = NULL; - if(!hscp.muonRef().isNull()){ tof = &TOFCollH->get(hscp.muonRef().key()); dttof = &TOFDTCollH->get(hscp.muonRef().key()); csctof = &TOFCSCCollH->get(hscp.muonRef().key());} - - - if(!PassPreselection(hscp, dedxSObj, dedxMObj, tof, dttof, csctof, tree))continue; - - for(unsigned int i=0;iFill(CurrentRunIndex, vertexColl.size()); - - if(tof && tof->nDof()>=GlobalMinNDOF && (dttof->nDof()>=GlobalMinNDOFDT || csctof->nDof()>=GlobalMinNDOFCSC) && tof->inverseBetaErr()<=GlobalMaxTOFErr){ - if(tof->inverseBeta()>=GlobalMinTOF)CountMu[i]->Fill(CurrentRunIndex); - if(tof->inverseBeta()>=GlobalMinTOF)TOFOverMinProf[i]->Fill(CurrentRunIndex, tof->inverseBeta()); - if(dttof->inverseBeta()>=GlobalMinTOF)TOFDTOverMinProf[i]->Fill(CurrentRunIndex, dttof->inverseBeta()); - if(csctof->inverseBeta()>=GlobalMinTOF)TOFCSCOverMinProf[i]->Fill(CurrentRunIndex, csctof->inverseBeta()); - TOFProf[i]->Fill(CurrentRunIndex, tof->inverseBeta()); - if(dttof->nDof()>=GlobalMinNDOFDT) TOFDTProf[i]->Fill(CurrentRunIndex, dttof->inverseBeta()); - if(csctof->nDof()>=GlobalMinNDOFCSC) TOFCSCProf[i]->Fill(CurrentRunIndex, csctof->inverseBeta()); - if(tof->inverseBeta() > 1.1 ) HTOF[i]->Fill(CurrentRunIndex); - VertexProf[i]->Fill(CurrentRunIndex, tof->timeAtIpInOut()); - if(dttof->nDof()>=GlobalMinNDOFDT) VertexDTProf[i]->Fill(CurrentRunIndex, dttof->timeAtIpInOut()); - if(csctof->nDof()>=GlobalMinNDOFCSC) VertexCSCProf[i]->Fill(CurrentRunIndex, csctof->timeAtIpInOut()); - } - - if(hscp.trackRef()->pt() >60 ) HPt[i]->Fill(CurrentRunIndex); - if(dedxSObj.dEdx() > 0.15 ) HdEdx[i]->Fill(CurrentRunIndex); - Count[i]->Fill(CurrentRunIndex); - - dEdxProf[i]->Fill(CurrentRunIndex, dedxSObj.dEdx()); - dEdxMProf[i]->Fill(CurrentRunIndex, dedxMObj.dEdx()); - dEdxMSProf[i]->Fill(CurrentRunIndex, dedxMSObj.dEdx()); - dEdxMPProf[i]->Fill(CurrentRunIndex, dedxMPObj.dEdx()); - if(fabs(track->eta())<0.5){ - dEdxMSCProf[i]->Fill(CurrentRunIndex, dedxMSObj.dEdx()); - dEdxMPCProf[i]->Fill(CurrentRunIndex, dedxMPObj.dEdx()); - } - if(fabs(track->eta())>1.5){ - dEdxMSFProf[i]->Fill(CurrentRunIndex, dedxMSObj.dEdx()); - dEdxMPFProf[i]->Fill(CurrentRunIndex, dedxMPObj.dEdx()); - } - PtProf[i]->Fill(CurrentRunIndex, hscp.trackRef()->pt()); - } - - } - }printf("\n"); - - TCanvas* c1; - TLegend* leg; - - for(unsigned int i=0;iDivide(Count[i]); - HdEdx[i]->LabelsDeflate("X"); - HdEdx[i]->LabelsOption("av","X"); - HdEdx[i]->GetXaxis()->SetNdivisions(505); - HdEdx[i]->SetTitle(""); - HdEdx[i]->SetStats(kFALSE); - HdEdx[i]->GetXaxis()->SetTitle(""); - HdEdx[i]->GetYaxis()->SetTitle("Ratio over Threshold"); - HdEdx[i]->GetYaxis()->SetTitleOffset(0.9); - HdEdx[i]->GetXaxis()->SetLabelSize(0.04); - HdEdx[i]->SetLineColor(Color[0]); - HdEdx[i]->SetFillColor(Color[0]); - HdEdx[i]->SetMarkerSize(0.4); - HdEdx[i]->SetMarkerStyle(Marker[0]); - HdEdx[i]->SetMarkerColor(Color[0]); - HdEdx[i]->Draw("E1"); - - leg = new TLegend(0.55,0.86,0.79,0.93,NULL,"brNDC"); - leg->SetBorderSize(0); - leg->SetFillColor(0); - leg->AddEntry(HdEdx[i],"I_{as} > 0.15","P"); - leg->Draw(); - - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"ROT_Is"); - delete c1; - - c1 = new TCanvas("c1","c1",600,600); - HPt[i]->Divide(Count[i]); - HPt[i]->LabelsDeflate("X"); - HPt[i]->LabelsOption("av","X"); - HPt[i]->GetXaxis()->SetNdivisions(505); - HPt[i]->SetTitle(""); - HPt[i]->SetStats(kFALSE); - HPt[i]->GetXaxis()->SetTitle(""); - HPt[i]->GetYaxis()->SetTitle("Ratio over Threshold"); - HPt[i]->GetYaxis()->SetTitleOffset(0.9); - HPt[i]->GetXaxis()->SetLabelSize(0.04); - HPt[i]->SetLineColor(Color[0]); - HPt[i]->SetFillColor(Color[0]); - HPt[i]->SetMarkerSize(0.4); - HPt[i]->SetMarkerStyle(Marker[0]); - HPt[i]->SetMarkerColor(Color[0]); - HPt[i]->Draw("E1"); - - leg = new TLegend(0.55,0.86,0.79,0.93,NULL,"brNDC"); - leg->SetBorderSize(0); - leg->SetFillColor(0); - leg->AddEntry(HPt[i],"p_{T} > 60 GeV/c","P"); - leg->Draw(); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"ROT_Pt"); - delete c1; - - - - c1 = new TCanvas("c1","c1",600,600); - HTOF[i]->Divide(CountMu[i]); - HTOF[i]->LabelsDeflate("X"); - HTOF[i]->LabelsOption("av","X"); - HTOF[i]->GetXaxis()->SetNdivisions(505); - HTOF[i]->SetTitle(""); - HTOF[i]->SetStats(kFALSE); - HTOF[i]->GetXaxis()->SetTitle(""); - HTOF[i]->GetYaxis()->SetTitle("Ratio over Threshold"); - HTOF[i]->GetYaxis()->SetTitleOffset(0.9); - HTOF[i]->GetXaxis()->SetLabelSize(0.04); - HTOF[i]->SetLineColor(Color[0]); - HTOF[i]->SetFillColor(Color[0]); - HTOF[i]->SetMarkerSize(0.4); - HTOF[i]->SetMarkerStyle(Marker[0]); - HTOF[i]->SetMarkerColor(Color[0]); - HTOF[i]->Draw("E1"); - - leg = new TLegend(0.55,0.86,0.79,0.93,NULL,"brNDC"); - leg->SetBorderSize(0); - leg->SetFillColor(0); - leg->AddEntry(HTOF[i],"1/#beta > 1.1","P"); - leg->Draw(); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"ROT_TOF"); - delete c1; - - - c1 = new TCanvas("c1","c1",600,600); - c1->SetLogy(true); - Count[i]->LabelsDeflate("X"); - Count[i]->LabelsOption("av","X"); - Count[i]->GetXaxis()->SetNdivisions(505); - Count[i]->SetTitle(""); - Count[i]->SetStats(kFALSE); - Count[i]->GetXaxis()->SetTitle(""); - Count[i]->GetYaxis()->SetTitle("#Tracks"); - Count[i]->GetYaxis()->SetTitleOffset(0.9); - Count[i]->GetXaxis()->SetLabelSize(0.04); - Count[i]->SetLineColor(Color[0]); - Count[i]->SetFillColor(Color[0]); - Count[i]->SetMarkerSize(0.4); - Count[i]->SetMarkerStyle(Marker[0]); - Count[i]->SetMarkerColor(Color[0]); - Count[i]->Draw("E1"); - - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Count"); - delete c1; - - c1 = new TCanvas("c1","c1",600,600); - NVertProf[i]->LabelsDeflate("X"); - NVertProf[i]->LabelsOption("av","X"); - NVertProf[i]->GetXaxis()->SetNdivisions(505); - NVertProf[i]->SetTitle(""); - NVertProf[i]->SetStats(kFALSE); - NVertProf[i]->GetXaxis()->SetTitle(""); - NVertProf[i]->GetYaxis()->SetTitle("#RecoVertex"); - NVertProf[i]->GetYaxis()->SetTitleOffset(0.9); - NVertProf[i]->GetXaxis()->SetLabelSize(0.04); - NVertProf[i]->SetLineColor(Color[0]); - NVertProf[i]->SetFillColor(Color[0]); - NVertProf[i]->SetMarkerSize(0.4); - NVertProf[i]->SetMarkerStyle(Marker[0]); - NVertProf[i]->SetMarkerColor(Color[0]); - NVertProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_NVert"); - delete c1; - - - c1 = new TCanvas("c1","c1",600,600); - dEdxProf[i]->LabelsDeflate("X"); - dEdxProf[i]->LabelsOption("av","X"); - dEdxProf[i]->GetXaxis()->SetNdivisions(505); - dEdxProf[i]->SetTitle(""); - dEdxProf[i]->SetStats(kFALSE); - dEdxProf[i]->GetXaxis()->SetTitle(""); - dEdxProf[i]->GetYaxis()->SetTitle("dE/dx discriminator"); - dEdxProf[i]->GetYaxis()->SetTitleOffset(0.9); - dEdxProf[i]->GetXaxis()->SetLabelSize(0.04); - dEdxProf[i]->SetLineColor(Color[0]); - dEdxProf[i]->SetFillColor(Color[0]); - dEdxProf[i]->SetMarkerSize(0.4); - dEdxProf[i]->SetMarkerStyle(Marker[0]); - dEdxProf[i]->SetMarkerColor(Color[0]); - dEdxProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_Is"); - delete c1; - - - - c1 = new TCanvas("c1","c1",600,600); - dEdxMProf[i]->LabelsDeflate("X"); - dEdxMProf[i]->LabelsOption("av","X"); - dEdxMProf[i]->GetXaxis()->SetNdivisions(505); - dEdxMProf[i]->SetTitle(""); - dEdxMProf[i]->SetStats(kFALSE); - dEdxMProf[i]->GetXaxis()->SetTitle(""); - dEdxMProf[i]->GetYaxis()->SetTitle("dE/dx estimator"); - dEdxMProf[i]->GetYaxis()->SetTitleOffset(0.9); - dEdxMProf[i]->GetXaxis()->SetLabelSize(0.04); - dEdxMProf[i]->SetLineColor(Color[0]); - dEdxMProf[i]->SetFillColor(Color[0]); - dEdxMProf[i]->SetMarkerSize(0.4); - dEdxMProf[i]->SetMarkerStyle(Marker[0]); - dEdxMProf[i]->SetMarkerColor(Color[0]); - dEdxMProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_Im"); - delete c1; - - c1 = new TCanvas("c1","c1",600,600); - dEdxMSProf[i]->LabelsDeflate("X"); - dEdxMSProf[i]->LabelsOption("av","X"); - dEdxMSProf[i]->GetXaxis()->SetNdivisions(505); - dEdxMSProf[i]->SetTitle(""); - dEdxMSProf[i]->SetStats(kFALSE); - dEdxMSProf[i]->GetXaxis()->SetTitle(""); - dEdxMSProf[i]->GetYaxis()->SetTitle("dE/dx estimator"); - dEdxMSProf[i]->GetYaxis()->SetTitleOffset(0.9); - dEdxMSProf[i]->GetXaxis()->SetLabelSize(0.04); - dEdxMSProf[i]->SetLineColor(Color[0]); - dEdxMSProf[i]->SetFillColor(Color[0]); - dEdxMSProf[i]->SetMarkerSize(0.4); - dEdxMSProf[i]->SetMarkerStyle(Marker[0]); - dEdxMSProf[i]->SetMarkerColor(Color[0]); - dEdxMSProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_ImS"); - delete c1; - - c1 = new TCanvas("c1","c1",600,600); - dEdxMPProf[i]->LabelsDeflate("X"); - dEdxMPProf[i]->LabelsOption("av","X"); - dEdxMPProf[i]->GetXaxis()->SetNdivisions(505); - dEdxMPProf[i]->SetTitle(""); - dEdxMPProf[i]->SetStats(kFALSE); - dEdxMPProf[i]->GetXaxis()->SetTitle(""); - dEdxMPProf[i]->GetYaxis()->SetTitle("dE/dx estimator"); - dEdxMPProf[i]->GetYaxis()->SetTitleOffset(0.9); - dEdxMPProf[i]->GetXaxis()->SetLabelSize(0.04); - dEdxMPProf[i]->SetLineColor(Color[0]); - dEdxMPProf[i]->SetFillColor(Color[0]); - dEdxMPProf[i]->SetMarkerSize(0.4); - dEdxMPProf[i]->SetMarkerStyle(Marker[0]); - dEdxMPProf[i]->SetMarkerColor(Color[0]); - dEdxMPProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_ImP"); - delete c1; - - c1 = new TCanvas("c1","c1",600,600); - dEdxMSCProf[i]->LabelsDeflate("X"); - dEdxMSCProf[i]->LabelsOption("av","X"); - dEdxMSCProf[i]->GetXaxis()->SetNdivisions(505); - dEdxMSCProf[i]->SetTitle(""); - dEdxMSCProf[i]->SetStats(kFALSE); - dEdxMSCProf[i]->GetXaxis()->SetTitle(""); - dEdxMSCProf[i]->GetYaxis()->SetTitle("dE/dx estimator"); - dEdxMSCProf[i]->GetYaxis()->SetTitleOffset(0.9); - dEdxMSCProf[i]->GetXaxis()->SetLabelSize(0.04); - dEdxMSCProf[i]->SetLineColor(Color[0]); - dEdxMSCProf[i]->SetFillColor(Color[0]); - dEdxMSCProf[i]->SetMarkerSize(0.4); - dEdxMSCProf[i]->SetMarkerStyle(Marker[0]); - dEdxMSCProf[i]->SetMarkerColor(Color[0]); - dEdxMSCProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_ImSC"); - delete c1; - - c1 = new TCanvas("c1","c1",600,600); - dEdxMPCProf[i]->LabelsDeflate("X"); - dEdxMPCProf[i]->LabelsOption("av","X"); - dEdxMPCProf[i]->GetXaxis()->SetNdivisions(505); - dEdxMPCProf[i]->SetTitle(""); - dEdxMPCProf[i]->SetStats(kFALSE); - dEdxMPCProf[i]->GetXaxis()->SetTitle(""); - dEdxMPCProf[i]->GetYaxis()->SetTitle("dE/dx estimator"); - dEdxMPCProf[i]->GetYaxis()->SetTitleOffset(0.9); - dEdxMPCProf[i]->GetXaxis()->SetLabelSize(0.04); - dEdxMPCProf[i]->SetLineColor(Color[0]); - dEdxMPCProf[i]->SetFillColor(Color[0]); - dEdxMPCProf[i]->SetMarkerSize(0.4); - dEdxMPCProf[i]->SetMarkerStyle(Marker[0]); - dEdxMPCProf[i]->SetMarkerColor(Color[0]); - dEdxMPCProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_ImPC"); - delete c1; - - c1 = new TCanvas("c1","c1",600,600); - dEdxMSFProf[i]->LabelsDeflate("X"); - dEdxMSFProf[i]->LabelsOption("av","X"); - dEdxMSFProf[i]->GetXaxis()->SetNdivisions(505); - dEdxMSFProf[i]->SetTitle(""); - dEdxMSFProf[i]->SetStats(kFALSE); - dEdxMSFProf[i]->GetXaxis()->SetTitle(""); - dEdxMSFProf[i]->GetYaxis()->SetTitle("dE/dx estimator"); - dEdxMSFProf[i]->GetYaxis()->SetTitleOffset(0.9); - dEdxMSFProf[i]->GetXaxis()->SetLabelSize(0.04); - dEdxMSFProf[i]->SetLineColor(Color[0]); - dEdxMSFProf[i]->SetFillColor(Color[0]); - dEdxMSFProf[i]->SetMarkerSize(0.4); - dEdxMSFProf[i]->SetMarkerStyle(Marker[0]); - dEdxMSFProf[i]->SetMarkerColor(Color[0]); - dEdxMSFProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_ImSF"); - delete c1; - - c1 = new TCanvas("c1","c1",600,600); - dEdxMPFProf[i]->LabelsDeflate("X"); - dEdxMPFProf[i]->LabelsOption("av","X"); - dEdxMPFProf[i]->GetXaxis()->SetNdivisions(505); - dEdxMPFProf[i]->SetTitle(""); - dEdxMPFProf[i]->SetStats(kFALSE); - dEdxMPFProf[i]->GetXaxis()->SetTitle(""); - dEdxMPFProf[i]->GetYaxis()->SetTitle("dE/dx estimator"); - dEdxMPFProf[i]->GetYaxis()->SetTitleOffset(0.9); - dEdxMPFProf[i]->GetXaxis()->SetLabelSize(0.04); - dEdxMPFProf[i]->SetLineColor(Color[0]); - dEdxMPFProf[i]->SetFillColor(Color[0]); - dEdxMPFProf[i]->SetMarkerSize(0.4); - dEdxMPFProf[i]->SetMarkerStyle(Marker[0]); - dEdxMPFProf[i]->SetMarkerColor(Color[0]); - dEdxMPFProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_ImPF"); - delete c1; - - - - c1 = new TCanvas("c1","c1",600,600); - PtProf[i]->LabelsDeflate("X"); - PtProf[i]->LabelsOption("av","X"); - PtProf[i]->GetXaxis()->SetNdivisions(505); - PtProf[i]->SetTitle(""); - PtProf[i]->SetStats(kFALSE); - PtProf[i]->GetXaxis()->SetTitle(""); - PtProf[i]->GetYaxis()->SetTitle("p_{T} (GeV/c)"); - PtProf[i]->GetYaxis()->SetTitleOffset(0.9); - PtProf[i]->GetXaxis()->SetLabelSize(0.04); - PtProf[i]->SetLineColor(Color[0]); - PtProf[i]->SetFillColor(Color[0]); - PtProf[i]->SetMarkerSize(0.4); - PtProf[i]->SetMarkerStyle(Marker[0]); - PtProf[i]->SetMarkerColor(Color[0]); - PtProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_Pt"); - delete c1; - - - c1 = new TCanvas("c1","c1",600,600); - TOFProf[i]->LabelsDeflate("X"); - TOFProf[i]->LabelsOption("av","X"); - TOFProf[i]->GetXaxis()->SetNdivisions(505); - TOFProf[i]->SetTitle(""); - TOFProf[i]->SetStats(kFALSE); - TOFProf[i]->GetXaxis()->SetTitle(""); - TOFProf[i]->GetYaxis()->SetTitle("1/#beta"); - TOFProf[i]->GetYaxis()->SetTitleOffset(0.9); - TOFProf[i]->GetXaxis()->SetLabelSize(0.04); - TOFProf[i]->SetLineColor(Color[0]); - TOFProf[i]->SetFillColor(Color[0]); - TOFProf[i]->SetMarkerSize(0.4); - TOFProf[i]->SetMarkerStyle(Marker[0]); - TOFProf[i]->SetMarkerColor(Color[0]); - TOFProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_TOF"); - delete c1; - - - c1 = new TCanvas("c1","c1",600,600); - TOFDTProf[i]->LabelsDeflate("X"); - TOFDTProf[i]->LabelsOption("av","X"); - TOFDTProf[i]->GetXaxis()->SetNdivisions(505); - TOFDTProf[i]->SetTitle(""); - TOFDTProf[i]->SetStats(kFALSE); - TOFDTProf[i]->GetXaxis()->SetTitle(""); - TOFDTProf[i]->GetYaxis()->SetTitle("1/#beta"); - TOFDTProf[i]->GetYaxis()->SetTitleOffset(0.9); - TOFDTProf[i]->GetXaxis()->SetLabelSize(0.04); - TOFDTProf[i]->SetLineColor(Color[0]); - TOFDTProf[i]->SetFillColor(Color[0]); - TOFDTProf[i]->SetMarkerSize(0.4); - TOFDTProf[i]->SetMarkerStyle(Marker[0]); - TOFDTProf[i]->SetMarkerColor(Color[0]); - TOFDTProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_TOFDT"); - delete c1; - - c1 = new TCanvas("c1","c1",600,600); - TOFCSCProf[i]->LabelsDeflate("X"); - TOFCSCProf[i]->LabelsOption("av","X"); - TOFCSCProf[i]->GetXaxis()->SetNdivisions(505); - TOFCSCProf[i]->SetTitle(""); - TOFCSCProf[i]->SetStats(kFALSE); - TOFCSCProf[i]->GetXaxis()->SetTitle(""); - TOFCSCProf[i]->GetYaxis()->SetTitle("1/#beta"); - TOFCSCProf[i]->GetYaxis()->SetTitleOffset(0.9); - TOFCSCProf[i]->GetXaxis()->SetLabelSize(0.04); - TOFCSCProf[i]->SetLineColor(Color[0]); - TOFCSCProf[i]->SetFillColor(Color[0]); - TOFCSCProf[i]->SetMarkerSize(0.4); - TOFCSCProf[i]->SetMarkerStyle(Marker[0]); - TOFCSCProf[i]->SetMarkerColor(Color[0]); - TOFCSCProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_TOFCSC"); - delete c1; - - c1 = new TCanvas("c1","c1",600,600); - TOFOverMinProf[i]->LabelsDeflate("X"); - TOFOverMinProf[i]->LabelsOption("av","X"); - TOFOverMinProf[i]->GetXaxis()->SetNdivisions(505); - TOFOverMinProf[i]->SetTitle(""); - TOFOverMinProf[i]->SetStats(kFALSE); - TOFOverMinProf[i]->GetXaxis()->SetTitle(""); - TOFOverMinProf[i]->GetYaxis()->SetTitle("1/#beta"); - TOFOverMinProf[i]->GetYaxis()->SetTitleOffset(0.9); - TOFOverMinProf[i]->GetXaxis()->SetLabelSize(0.04); - TOFOverMinProf[i]->SetLineColor(Color[0]); - TOFOverMinProf[i]->SetFillColor(Color[0]); - TOFOverMinProf[i]->SetMarkerSize(0.4); - TOFOverMinProf[i]->SetMarkerStyle(Marker[0]); - TOFOverMinProf[i]->SetMarkerColor(Color[0]); - TOFOverMinProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_TOFOverMin"); - delete c1; - - - c1 = new TCanvas("c1","c1",600,600); - TOFDTOverMinProf[i]->LabelsDeflate("X"); - TOFDTOverMinProf[i]->LabelsOption("av","X"); - TOFDTOverMinProf[i]->GetXaxis()->SetNdivisions(505); - TOFDTOverMinProf[i]->SetTitle(""); - TOFDTOverMinProf[i]->SetStats(kFALSE); - TOFDTOverMinProf[i]->GetXaxis()->SetTitle(""); - TOFDTOverMinProf[i]->GetYaxis()->SetTitle("1/#beta"); - TOFDTOverMinProf[i]->GetYaxis()->SetTitleOffset(0.9); - TOFDTOverMinProf[i]->GetXaxis()->SetLabelSize(0.04); - TOFDTOverMinProf[i]->SetLineColor(Color[0]); - TOFDTOverMinProf[i]->SetFillColor(Color[0]); - TOFDTOverMinProf[i]->SetMarkerSize(0.4); - TOFDTOverMinProf[i]->SetMarkerStyle(Marker[0]); - TOFDTOverMinProf[i]->SetMarkerColor(Color[0]); - TOFDTOverMinProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_TOFDTOverMin"); - delete c1; - - c1 = new TCanvas("c1","c1",600,600); - TOFCSCOverMinProf[i]->LabelsDeflate("X"); - TOFCSCOverMinProf[i]->LabelsOption("av","X"); - TOFCSCOverMinProf[i]->GetXaxis()->SetNdivisions(505); - TOFCSCOverMinProf[i]->SetTitle(""); - TOFCSCOverMinProf[i]->SetStats(kFALSE); - TOFCSCOverMinProf[i]->GetXaxis()->SetTitle(""); - TOFCSCOverMinProf[i]->GetYaxis()->SetTitle("1/#beta"); - TOFCSCOverMinProf[i]->GetYaxis()->SetTitleOffset(0.9); - TOFCSCOverMinProf[i]->GetXaxis()->SetLabelSize(0.04); - TOFCSCOverMinProf[i]->SetLineColor(Color[0]); - TOFCSCOverMinProf[i]->SetFillColor(Color[0]); - TOFCSCOverMinProf[i]->SetMarkerSize(0.4); - TOFCSCOverMinProf[i]->SetMarkerStyle(Marker[0]); - TOFCSCOverMinProf[i]->SetMarkerColor(Color[0]); - TOFCSCOverMinProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_TOFCSCOverMin"); - delete c1; - - - c1 = new TCanvas("c1","c1",600,600); - VertexProf[i]->LabelsDeflate("X"); - VertexProf[i]->LabelsOption("av","X"); - VertexProf[i]->GetXaxis()->SetNdivisions(505); - VertexProf[i]->SetTitle(""); - VertexProf[i]->SetStats(kFALSE); - VertexProf[i]->GetXaxis()->SetTitle(""); - VertexProf[i]->GetYaxis()->SetTitle("1/#beta"); - VertexProf[i]->GetYaxis()->SetTitleOffset(0.9); - VertexProf[i]->GetXaxis()->SetLabelSize(0.04); - VertexProf[i]->SetLineColor(Color[0]); - VertexProf[i]->SetFillColor(Color[0]); - VertexProf[i]->SetMarkerSize(0.4); - VertexProf[i]->SetMarkerStyle(Marker[0]); - VertexProf[i]->SetMarkerColor(Color[0]); - VertexProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_Vertex"); - delete c1; - - - c1 = new TCanvas("c1","c1",600,600); - VertexDTProf[i]->LabelsDeflate("X"); - VertexDTProf[i]->LabelsOption("av","X"); - VertexDTProf[i]->GetXaxis()->SetNdivisions(505); - VertexDTProf[i]->SetTitle(""); - VertexDTProf[i]->SetStats(kFALSE); - VertexDTProf[i]->GetXaxis()->SetTitle(""); - VertexDTProf[i]->GetYaxis()->SetTitle("1/#beta"); - VertexDTProf[i]->GetYaxis()->SetTitleOffset(0.9); - VertexDTProf[i]->GetXaxis()->SetLabelSize(0.04); - VertexDTProf[i]->SetLineColor(Color[0]); - VertexDTProf[i]->SetFillColor(Color[0]); - VertexDTProf[i]->SetMarkerSize(0.4); - VertexDTProf[i]->SetMarkerStyle(Marker[0]); - VertexDTProf[i]->SetMarkerColor(Color[0]); - VertexDTProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_VertexDT"); - delete c1; - - c1 = new TCanvas("c1","c1",600,600); - VertexCSCProf[i]->LabelsDeflate("X"); - VertexCSCProf[i]->LabelsOption("av","X"); - VertexCSCProf[i]->GetXaxis()->SetNdivisions(505); - VertexCSCProf[i]->SetTitle(""); - VertexCSCProf[i]->SetStats(kFALSE); - VertexCSCProf[i]->GetXaxis()->SetTitle(""); - VertexCSCProf[i]->GetYaxis()->SetTitle("1/#beta"); - VertexCSCProf[i]->GetYaxis()->SetTitleOffset(0.9); - VertexCSCProf[i]->GetXaxis()->SetLabelSize(0.04); - VertexCSCProf[i]->SetLineColor(Color[0]); - VertexCSCProf[i]->SetFillColor(Color[0]); - VertexCSCProf[i]->SetMarkerSize(0.4); - VertexCSCProf[i]->SetMarkerStyle(Marker[0]); - VertexCSCProf[i]->SetMarkerColor(Color[0]); - VertexCSCProf[i]->Draw("E1"); - c1->Modified(); - c1->SetGridx(true); - DrawPreliminary(IntegratedLuminosity); - SaveCanvas(c1,string("pictures/") + triggers[i],"Profile_VertexCSC"); - delete c1; - } - - - OutputHisto->Write(); - OutputHisto->Close(); -} - - - -bool IncreasedTreshold(const trigger::TriggerEvent& trEv, const edm::InputTag& InputPath, double NewThreshold, int NObjectAboveThreshold, bool averageThreshold) -{ - unsigned int filterIndex = trEv.filterIndex(InputPath); - //if(filterIndex %s XXX %s\n",filterIndex,trEv.filterTag(filterIndex).label().c_str(), trEv.filterTag(filterIndex).process().c_str()); - - if (filterIndex NewThreshold) NObjectAboveThresholdObserved++; - //cout << " " << i << " " << VIDS[i] << "/" << KEYS[i] << ": "<< TO.id() << " " << TO.pt() << " " << TO.eta() << " " << TO.phi() << " " << TO.mass()<< endl; - } - if(NObjectAboveThresholdObserved>=NObjectAboveThreshold)return true; - - }else{ - std::vector ObjPt; - - for (size_type i=0; i!=n; ++i) { - const TriggerObject& TO(TOC[KEYS[i]]); - ObjPt.push_back(TO.pt()); - //cout << " " << i << " " << VIDS[i] << "/" << KEYS[i] << ": "<< TO.id() << " " << TO.pt() << " " << TO.eta() << " " << TO.phi() << " " << TO.mass()<< endl; - } - if((int)(ObjPt.size())SetMakeSharedLib(makeshared); - gSystem->Load("libFWCoreFWLite"); - FWLiteEnabler::enable();; - gSystem->Load("libDataFormatsFWLite.so"); - gSystem->Load("libDataFormatsHepMCCandidate.so"); - gSystem->Load("libDataFormatsCommon.so"); - gSystem->Load("libDataFormatsTrackerRecHit2D.so"); - gSystem->Load("libAnalysisDataFormatsSUSYBSMObjects.so"); - .x StabilityCheck.C+("Analyze"); - .x MakePlot.C+ -EOF diff --git a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/out.txt b/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/out.txt deleted file mode 100644 index ab3188471bcb3..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/out.txt +++ /dev/null @@ -1,276 +0,0 @@ -160431,231,8414.98074055,[19-218],7321.79470587 -160577,330,10968.7166384,[254-306],1623.35908951 -160578,457,13618.2091939,"[6-53274-400]",4931.22827091 -160871,185,140756.85364,[68-208],104581.580536 -160872,76,55684.168438,"[1-925-3538-55]",23604.4895365 -160873,200,139342.567973,[1-147],101535.788089 -160874,131,86059.2956471,"[1-5197-113]",42010.6046365 -160939,147,182287.159989,[1-123],149609.289563 -160940,88,105176.111857,[2-79],90806.8680228 -160942,25,29302.2104804,[1-12],12209.2417212 -160943,68,77824.2878847,[2-54],59003.2284764 -160955,227,778968.167484,"[1-130133-138140-151153-154156-172175-201204-206]",413915.671739 -160956,72,232412.877625,[2-65],198545.794749 -160957,966,2638347.89871,[2-953],2506557.3968 -160998,284,779254.065083,[2-252],679400.910206 -161008,282,704933.165052,"[1-25-77]",188103.746213 -161016,326,742078.294109,[2-300],671576.539449 -161103,111,437926.743029,[2-100],379484.837111 -161106,39,145837.891222,[2-26],92352.2665127 -161107,39,142131.502676,[2-29],100872.579052 -161113,44,154974.140743,[2-24],79631.6551331 -161116,20,69466.13694,[2-11],34416.2304419 -161117,30,102992.319763,[2-24],77689.7359027 -161176,44,120750.881458,[2-31],83271.8576996 -161217,787,3881878.24921,[37-753],3487478.24949 -161222,135,562214.235386,[1-97],401163.352428 -161223,408,1568134.8395,[1-375],1432966.45402 -161233,39,195776.637456,[33-49],94093.2460692 -161310,95,537554.591315,[39-116],434664.277615 -161311,703,3364438.68966,"[1-554559-649]",3095074.95215 -161312,1049,3761445.21315,"[2-826835-1027]",3648710.88836 -162762,110,414308.25972,[1-102],377521.039903 -162765,22,81373.3325653,[2-23],77304.3841435 -162803,94,497305.042136,"[60-124135-139]",369886.695019 -162808,62,330898.717075,[1-51],263374.813721 -162811,346,1678742.05495,[1-340],1652215.312 -162822,246,1280178.91271,[73-307],1207529.21619 -162825,201,966964.568504,[1-184],869533.642256 -162826,42,195316.7254,[1-24],104126.210228 -162828,83,358042.003648,[2-84],354227.766274 -162909,249,1847126.78874,[54-290],1788678.89091 -163046,247,1623362.60773,"[1-133135-238]",1592748.91553 -163069,583,4197607.19171,"[73-452468-633]",3897614.77322 -163071,193,1254503.95955,[1-161],1035106.72479 -163078,36,223131.14959,[2-23],134938.961088 -163232,76,513403.287392,"[128-128130-134129-129136-149135-135110-127]",265598.164599 -163233,301,1940034.91078,[1-283],1802189.81456 -163234,73,444371.099063,[1-66],390925.090137 -163235,473,2684945.08337,[1-461],2591070.40918 -163237,219,1134882.57917,[1-213],1090349.13325 -163238,13,56783.1776908,[9-14],21147.7406896 -163252,101,908360.326195,[60-137],676648.137586 -163255,1066,7977222.73868,"[1-359412-844846-846848-977]",6872321.70854 -163261,138,901848.577884,"[2-310-126]",771047.274478 -163270,926,8228118.07035,"[2-7679-9699-475479-527529-685695-927]",7975359.86541 -163286,306,2003344.73722,[112-401],1883655.7274 -163289,386,2248731.9923,[2-387],2207535.47476 -163296,562,5505622.34885,"[59-230232-585]",5090286.80243 -163297,226,1993499.00479,[1-219],1902939.61413 -163300,622,4965283.36319,[1-616],4870837.25868 -163301,197,1442737.91233,[1-192],1387738.08642 -163302,252,1775292.60947,[1-190],1329960.8688 -163332,775,8030210.86007,"[43-118224-264266-599601-639641-801]",6518025.20815 -163333,111,1039916.31203,[2-106],969457.547016 -163334,562,4921466.57723,"[1-3537-37156-556]",3762186.31263 -163337,474,3797972.31658,"[2-1827-201203-426434-461]",3520933.8843 -163338,170,1288643.16507,[1-164],1224274.68623 -163339,187,1376114.75994,[1-172],1250985.87565 -163340,486,3334046.54206,[2-487],3311117.53762 -163358,28,253658.997981,[39-62],210049.295014 -163369,103,1093590.02262,[2-94],978081.270359 -163370,175,1771034.94222,[1-147],1469069.3552 -163371,374,3371677.61543,"[1-107148-363]",2916936.28265 -163372,111,973269.032662,[1-52],450198.526043 -163374,872,6834028.93577,"[1-599603-863]",6693696.94849 -163375,16,113609.902852,[1-10],65474.7863691 -163376,251,1755691.37546,"[2-2022-246]",1689867.60792 -163378,628,4047982.6421,"[1-8189-272306-615]",3675226.22696 -163385,389,3521201.74558,"[52-240244-406]",3165808.77395 -163387,254,2076076.37534,[2-255],2060762.55659 -163402,793,7635208.01101,"[37-582586-801]",6888939.50202 -163475,284,3172838.47889,[30-295],2801262.39679 -163476,235,2428706.21862,"[1-9498-212]",2047895.27265 -163478,82,804552.227683,[1-70],461653.491416 -163479,185,1795900.01149,[2-175],1675799.42056 -163480,198,1844561.41078,"[1-9296-188190-191]",1698481.89359 -163481,88,792243.919594,"[2-7274-7779-79]",648811.541224 -163482,57,504899.518386,"[1-2748-48]",232276.056673 -163483,55,375949.423158,[2-56],373030.956776 -163582,65,1013636.50931,[1-22],250115.492378 -163583,231,3440059.87874,"[2-6365-9296-155157-173175-219]",2833201.86859 -163584,84,1202621.48761,[1-56],763846.716298 -163585,41,576618.4866,[1-32],435016.313849 -163586,102,1408523.17576,[1-75],1018116.91406 -163587,84,1133718.087,[1-52],688476.842977 -163588,455,5779331.08272,"[1-810-446]",5581423.0508 -163589,165,1961718.11817,"[1-4951-160]",1870697.03347 -163596,27,259084.232793,[2-28],256517.221653 -163630,113,1498884.94972,"[76-164176-184]",1267218.24566 -163655,38,603852.461485,[15-23],131570.030415 -163657,152,2344200.26022,[1-140],2112593.51136 -163658,18,270262.942714,[1-3],6227.23645473 -163659,717,9766460.40928,"[1-374376-650652-705]",9398580.59537 -163660,84,1037427.41973,[1-74],742331.459513 -163661,26,317176.810141,[1-17],112647.246935 -163662,175,2090156.5458,[1-154],1811893.02787 -163663,250,2844227.37148,"[1-106109-246]",2650543.3342 -163664,188,2041698.17162,"[1-119121-178]",1865904.23544 -163668,226,2276933.12766,"[2-5357-136140-213]",2043000.97521 -163738,282,4155550.63346,[34-311],4045672.73443 -163757,46,681739.781555,[1-40],567118.406647 -163758,599,8200161.03384,"[1-1719-220222-224236-276283-374376-466468-591]",7374737.28907 -163759,525,6340800.36054,"[1-6062-7274-456458-461463-482504-510]",5771647.53825 -163760,362,3988897.39878,"[1-162165-340]",3663314.39213 -163761,228,2369179.52662,[1-203],2092341.83111 -163763,92,927458.312591,[1-79],785421.820916 -163765,319,2997046.19532,[2-320],2958872.96734 -163795,48,907464.969632,"[10-3436-3638-43]",455200.645017 -163796,181,3201354.94312,[1-181],3140248.24833 -163817,934,16331051.1045,"[50-140154-205216-295305-346358-457561-603618-966]",12995056.8558 -163869,62,794784.26904,[79-123],703226.284048 -165088,200,5033.14315988,[107-266],4027.24667231 -165098,320,31634.0241532,"[124-187190-193195-248250-254256-331333-367369-415]",27494.7168256 -165099,125,10722.9234966,[1-105],8853.81811289 -165102,200,17821.2059787,[1-185],16471.5121216 -165103,451,47752.2640626,"[1-111113-185187-440]",46318.7727982 -165120,56,271064.353653,[82-97],76376.0541126 -165121,483,2150273.48546,[1-466],2049530.29623 -165205,195,2014997.13583,[80-248],1718665.04037 -165208,113,1092776.42376,[1-101],947586.544961 -165364,1260,19663072.2591,"[45-111114-147160-807809-12201260-1300]",18325190.0912 -165402,27,453343.958084,[1-27],416093.259316 -165415,1342,20342180.2248,"[58-8588-640643-707712-777780-13561360-1383]",19461690.7405 -165467,701,12981980.9996,[39-708],11771142.6807 -165472,897,13552369.6526,"[1-184186-882]",12975111.1141 -165486,89,1982783.83758,[37-102],1401620.65209 -165487,153,3081718.29317,[1-151],2951557.70338 -165506,123,2132631.49734,[54-170],1915687.36581 -165514,501,11719375.565,"[72-244246-560562-567]",10989892.4374 -165548,630,9555553.26693,"[1-363365-381384-589]",8692129.23393 -165558,74,1041015.97316,[1-62],817620.165532 -165567,601,13100586.7931,"[54-109114-309315-631]",11997559.9979 -165570,951,16975291.303,"[1-25-8388-942944-946]",16353284.4565 -165617,395,9373634.75478,"[26-5254-143145-288]",5961626.51143 -165620,62,1254769.02217,[14-19],126889.333296 -165633,460,10508290.8339,"[56-6264-6466-317319-500]",9736393.7879 -165970,273,6726395.74181,"[67-329331-334]",6455019.12668 -165993,1655,33003329.6806,"[71-873879-16601665-1697]",31886444.6556 -166011,82,1908392.56233,[1-81],1824319.05591 -166033,1234,31401148.8941,"[35-5359-330336-355360-444450-606613-707713-1233]",29217718.715 -166034,392,7837380.88704,"[1-109115-228234-307]",6139717.61151 -166049,874,22459338.1616,"[53-8688-236242-674]",15977693.5883 -166149,30,861685.881379,[1-2],2056.72166173 -166150,115,2816687.36122,"[1-99101-115]",2685688.33148 -166161,103,2830140.20353,"[38-120122-123126-126]",2036315.14558 -166163,45,1210484.32114,"[1-1214-33]",618588.576263 -166164,39,871554.061007,"[1-3234-39]",779210.082154 -166346,173,4514561.46041,"[48-210212-214]",4262681.13703 -166374,166,4455219.70279,"[46-6466-188]",3703035.44929 -166380,1816,36195478.4924,"[1-367373-711715-14001406-1809]",35285507.369 -166408,1174,28610880.3156,"[67-283291-947953-1235]",27659856.2856 -166429,60,1570155.08353,[33-88],1384676.41161 -166438,861,19223685.2747,"[32-8587-856858-866]",18299957.1097 -166462,453,9998790.23799,"[78-102108-317323-525]",9373541.59329 -166486,126,2599067.05988,"[54-7580-9597-173]",2309576.38181 -166502,72,1732666.52134,"[43-7883-108]",1418875.44372 -166512,1870,39555515.9139,"[42-430432-487491-605611-12791281-18181821-18621868-18681870-18711873-1874]",37881928.6552 -166514,464,7478831.59355,"[1-455460-464]",7344050.04666 -166530,25,609102.443212,[43-62],458028.421126 -166554,709,17157550.1772,"[46-218224-287290-317320-595597-730732-734736-736]",16048597.2305 -166563,582,11724479.6912,"[1-276492-748]",10602518.9622 -166565,897,15311356.7324,"[1-147153-312316-467469-897]",14947492.1784 -166699,868,18561429.42,"[55-234240-415421-477483-677681-912]",17714966.7498 -166701,791,13447916.7688,"[1-1316-319324-506513-551557-672681-705712-724731-757764-777783-791]",12494070.256 -166763,608,13783356.9884,"[46-168174-649]",13382624.1316 -166781,356,8619467.7499,"[41-111115-115117-233236-253255-382]",7883392.38339 -166782,581,12298792.1961,[1-569],11874764.2749 -166784,389,7416940.7984,"[1-114119-276281-365]",6529162.53148 -166787,363,6298378.04801,"[1-5560-127132-363]",6067651.4651 -166839,277,7063757.67623,"[43-173178-297299-302]",5661014.60968 -166841,1023,22258235.6607,"[1-845851-876882-977984-984988-992998-1015]",21326298.0351 -166842,186,3105464.09973,[1-170],3050240.7266 -166859,394,9801079.65832,"[62-418421-421423-423]",8592344.53354 -166860,36,836026.225779,[1-21],404800.810106 -166861,50,1144319.09115,"[1-68-13]",183308.79539 -166864,536,11229730.3099,"[1-2931-7779-99102-119125-247249-307311-365367-374378-454478-536]",9656523.5075 -166888,434,11159142.8508,"[56-9093-154156-394398-470]",10197877.9395 -166889,241,5657210.41872,"[1-7379-228]",5033271.34576 -166890,548,11686248.4227,[1-441],9352932.45564 -166894,219,4235575.43356,[1-190],3567642.91208 -166895,601,10583831.2684,"[1-6672-597599-601]",10324470.1823 -166911,53,1310844.48819,"[58-7681-103]",985533.830822 -166922,789,19323827.1208,"[1-3941-105110-340345-418423-747752-769773-773]",18087372.9961 -166923,469,9834537.63758,"[1-382389-469]",9574934.68799 -166946,177,4676804.5692,"[41-7275-201]",4094190.37932 -166950,1450,31152027.7464,"[1-18-3136-210216-877883-950956-10121018-13211327-13451347-1438]",29471678.2293 -166960,199,3581057.01068,"[1-137143-166]",2848308.38991 -166966,254,4369662.00153,[1-238],3982274.53867 -166967,219,3523537.41869,[1-219],3470552.49649 -167039,235,5794662.11932,"[20-9298-228]",4966266.48301 -167041,676,14236404.4617,"[1-336339-391396-462467-663]",13557524.5216 -167043,236,4190348.15069,"[1-125130-235]",4047396.54368 -167078,142,3442631.50535,[40-174],3199550.88808 -167098,420,9203275.90808,"[62-9092-162167-406448-461]",8268219.81867 -167102,440,8696024.53956,"[1-4248-233235-317323-430]",7994765.7512 -167103,94,1672790.55089,[1-94],1620367.7347 -167151,68,1609365.35366,[1-42],986514.520111 -167281,597,15162351.0877,"[18-140146-315317-593]",14228353.6823 -167282,457,9430205.46987,[1-441],8978024.9576 -167284,1708,27121997.5517,"[1-315320-346356-395399-474476-11571160-16281633-1644]",25661201.6712 -167551,424,11486598.7976,"[56-190196-471]",10901788.5107 -167673,308,8124158.63429,"[210-236239-305309-418423-447]",5835658.36445 -167674,355,8581257.29186,[1-345],8154943.75729 -167675,1069,22077738.8337,"[1-129133-299301-617690-707710-712715-716719-719721-725740-741748-758762-770774-787793-797811-1062]",19135324.1219 -167676,452,7852382.43856,"[1-278289-450]",7573033.78584 -167740,104,2568626.74124,"[79-126132-168170-173]",2182348.10028 -167746,351,8663533.21295,[56-384],8356871.77556 -167754,50,1178506.79916,[62-103],994275.70673 -167784,100,2700042.04841,[51-67],428485.824255 -167786,176,4437277.5523,"[1-111-7581-176]",3976056.0921 -167807,1824,42747050.3904,"[60-159178-204210-482484-558560-872878-14411444-1842]",40518266.8011 -167830,1248,20891346.9366,"[1-437442-587590-828834-1242]",20338891.2263 -167898,1692,39842133.3829,"[108-619621-9951001-10101013-10531057-12951298-1762]",37970327.1026 -167913,440,7880615.44492,"[1-126128-432]",7609374.18581 -170826,289,8176812.71389,"[50-122139-310]",6838185.02805 -170842,350,8636294.71965,"[1-2732-96102-331]",7832462.97876 -170854,659,13659370.1765,"[1-336341-578]",11820091.9338 -170876,520,9025941.52699,"[1-110115-516518-518]",8824636.25454 -170896,212,3396899.02642,[1-212],3332858.05116 -170899,84,1282584.15701,[1-84],1266554.03064 -170901,199,2770920.83266,"[1-153159-199]",2661567.52209 -171050,625,19258906.5893,"[54-7480-337342-369371-379384-423427-467471-648]",17363625.4134 -171091,147,3786658.42276,[1-135],3345608.29696 -171098,32,803962.60649,[1-8],90585.1509462 -171102,34,844793.879269,[1-19],419904.054386 -171106,303,7138755.0006,"[1-2732-288]",6579464.16195 -171117,83,1730554.27722,"[1-5456-7880-83]",1636907.43193 -171156,722,21052680.4516,"[212-686688-692]",12994621.3644 -171178,1043,22802573.3225,"[1-9297-205210-1043]",22220414.9807 -171219,120,4088921.68085,"[48-151153-162]",3841882.55076 -171274,78,3112909.3225,"[128-137140-14388-127]",1981402.07353 -171282,171,6363145.07024,"[1-1214-99104-134140-171]",5826810.06001 -171315,178,6298546.9338,[53-225],6021751.92429 -171369,125,4359551.21303,"[61-138144-161]",3229311.99736 -171446,812,26116093.9103,"[58-394401-451456-645650-750754-864]",25110648.6991 -171484,377,13177251.2439,"[80-202207-371376-432]",11817950.3291 -171578,935,24019521.705,"[47-150156-174179-315319-347353-481487-572578-974]",22801716.2136 -171812,384,13505109.9103,"[59-296301-437]",12900860.3738 -171921,116,4758943.12785,[51-141],3645079.75593 -171926,264,9500127.56857,"[1-4951-155161-172177-264]",8840320.06649 -172014,256,10491393.5551,"[1-6466-143149-243]",9162063.37357 -172024,161,6011174.87354,[1-74],2706268.06439 -172033,749,23844058.2451,"[1-6571-277282-473478-749]",23111389.8996 -172163,758,27325645.613,"[36-109115-784]",26360824.9395 -172208,145,6022619.06373,[61-199],5631834.48805 -172252,41,1886732.36233,[32-54],1002278.24955 -172254,51,2297020.74473,[1-42],1747445.29588 -172255,39,1588560.76608,[1-39],1469308.07169 -172268,118,5195362.65314,[56-169],4901026.50334 -172286,176,6858085.79775,"[52-177184-216]",6323228.14862 -172389,431,17038858.3827,"[34-144150-429433-460]",16277584.869 -172399,195,8207447.93789,[57-226],7011462.71572 -172400,720,25016318.6045,"[1-495500-691696-705]",23740997.6608 -172401,147,4346538.14924,"[1-25-147]",4129319.70644 -172411,897,32249709.3678,[85-349],10822034.5957 -172478,154,3960810.52744,[1-110],2808787.97451 -172619,97,1934690.19692,[1-77],1490279.97138 -172620,501,9429412.62173,[1-495],9223673.6403 -172630,146,6495846.52015,"[36-6468-135139-160]",5157011.2129 -172635,267,10673883.2373,"[1-1824-267]",10203002.4754 -172778,57,2356692.19507,[48-97],1986746.54585 -172791,1624,54163297.7466,"[68-413418-569571-715720-12961300-15371542-16451649-1658]",51814818.7692 -172798,36,930462.220239,[1-31],721446.731769 -172799,379,9325201.55334,[1-367],8913553.28481 -172801,1155,24025859.2164,"[1-679681-750753-766768-815819-837839-861863-909911-1139]",22775746.8358 -172802,796,13681208.5952,"[1-629634-784]",13203586.6448 diff --git a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/tdrstyle.C b/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/tdrstyle.C deleted file mode 100644 index 6e2de47e66928..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/StabilityCheck/tdrstyle.C +++ /dev/null @@ -1,169 +0,0 @@ -// -// TDR style macro for plots in ROOT -// .L tdrstyle.C -// setTDRStyle() -// -#include "TStyle.h" -#include "TPad.h" - -/* -// tdrGrid: Turns the grid lines on (true) or off (false) - -void tdrGrid(bool gridOn) { - tdrStyle->SetPadGridX(gridOn); - tdrStyle->SetPadGridY(gridOn); -} -*/ - -// fixOverlay: Redraws the axis - -void fixOverlay() { - gPad->RedrawAxis(); -} - -void setTDRStyle() { -// TStyle *tdrStyle = new TStyle("tdrStyle","Style for P-TDR"); - -// For the canvas: - gStyle->SetCanvasBorderMode(0); - gStyle->SetCanvasColor(kWhite); - gStyle->SetCanvasDefH(600); //Height of canvas - gStyle->SetCanvasDefW(600); //Width of canvas - gStyle->SetCanvasDefX(0); //POsition on screen - gStyle->SetCanvasDefY(0); - -// For the Pad: - gStyle->SetPadBorderMode(0); - // gStyle->SetPadBorderSize(Width_t size = 1); - gStyle->SetPadColor(kWhite); - gStyle->SetPadGridX(false); - gStyle->SetPadGridY(false); - gStyle->SetGridColor(0); - gStyle->SetGridStyle(3); - gStyle->SetGridWidth(1); - -// For the frame: - gStyle->SetFrameBorderMode(0); - gStyle->SetFrameBorderSize(1); - gStyle->SetFrameFillColor(0); - gStyle->SetFrameFillStyle(0); - gStyle->SetFrameLineColor(1); - gStyle->SetFrameLineStyle(1); - gStyle->SetFrameLineWidth(1); - -// For the histo: - // gStyle->SetHistFillColor(1); - // gStyle->SetHistFillStyle(0); - gStyle->SetHistLineColor(1); - gStyle->SetHistLineStyle(0); - gStyle->SetHistLineWidth(1); - // gStyle->SetLegoInnerR(Float_t rad = 0.5); - // gStyle->SetNumberContours(Int_t number = 20); - - gStyle->SetEndErrorSize(2); - //gStyle->SetErrorMarker(20); - gStyle->SetErrorX(0.); - - gStyle->SetMarkerStyle(20); - -//For the fit/function: - gStyle->SetOptFit(1); - gStyle->SetFitFormat("5.4g"); - gStyle->SetFuncColor(2); - gStyle->SetFuncStyle(1); - gStyle->SetFuncWidth(1); - -//For the date: - gStyle->SetOptDate(0); - // gStyle->SetDateX(Float_t x = 0.01); - // gStyle->SetDateY(Float_t y = 0.01); - -// For the statistics box: - gStyle->SetOptFile(0); - //gStyle->SetOptStat(0); - gStyle->SetOptStat("mr"); - gStyle->SetStatColor(kWhite); - gStyle->SetStatFont(42); - gStyle->SetStatFontSize(0.04);///---> gStyle->SetStatFontSize(0.025); - gStyle->SetStatTextColor(1); - gStyle->SetStatFormat("6.4g"); - gStyle->SetStatBorderSize(1); - gStyle->SetStatH(0.1); - gStyle->SetStatW(0.2);///---> gStyle->SetStatW(0.15); - - // gStyle->SetStatStyle(Style_t style = 1001); - // gStyle->SetStatX(Float_t x = 0); - // gStyle->SetStatY(Float_t y = 0); - -// Margins: - gStyle->SetPadTopMargin(0.05); - gStyle->SetPadBottomMargin(0.13); - gStyle->SetPadLeftMargin(0.16); - gStyle->SetPadRightMargin(0.02); - -// For the Global title: - - gStyle->SetOptTitle(0); - gStyle->SetTitleFont(42); - gStyle->SetTitleColor(1); - gStyle->SetTitleTextColor(1); - gStyle->SetTitleFillColor(10); - gStyle->SetTitleFontSize(0.05); - // gStyle->SetTitleH(0); // Set the height of the title box - // gStyle->SetTitleW(0); // Set the width of the title box - // gStyle->SetTitleX(0); // Set the position of the title box - // gStyle->SetTitleY(0.985); // Set the position of the title box - // gStyle->SetTitleStyle(Style_t style = 1001); - // gStyle->SetTitleBorderSize(2); - -// For the axis titles: - - gStyle->SetTitleColor(1, "XYZ"); - gStyle->SetTitleFont(42, "XYZ"); - gStyle->SetTitleSize(0.06, "XYZ"); - // gStyle->SetTitleXSize(Float_t size = 0.02); // Another way to set the size? - // gStyle->SetTitleYSize(Float_t size = 0.02); - gStyle->SetTitleXOffset(0.9); - gStyle->SetTitleYOffset(1.25); - // gStyle->SetTitleOffset(1.1, "Y"); // Another way to set the Offset - -// For the axis labels: - - gStyle->SetLabelColor(1, "XYZ"); - gStyle->SetLabelFont(42, "XYZ"); - gStyle->SetLabelOffset(0.007, "XYZ"); - gStyle->SetLabelSize(0.05, "XYZ"); - -// For the axis: - - gStyle->SetAxisColor(1, "XYZ"); - gStyle->SetStripDecimals(kTRUE); - gStyle->SetTickLength(0.03, "XYZ"); - gStyle->SetNdivisions(510, "XYZ"); - gStyle->SetPadTickX(1); // To get tick marks on the opposite side of the frame - gStyle->SetPadTickY(1); - -// Change for log plots: - gStyle->SetOptLogx(0); - gStyle->SetOptLogy(0); - gStyle->SetOptLogz(0); - -// Postscript options: - gStyle->SetPaperSize(20.,20.); - // gStyle->SetLineScalePS(Float_t scale = 3); - // gStyle->SetLineStyleString(Int_t i, const char* text); - // gStyle->SetHeaderPS(const char* header); - // gStyle->SetTitlePS(const char* pstitle); - - // gStyle->SetBarOffset(Float_t baroff = 0.5); - // gStyle->SetBarWidth(Float_t barwidth = 0.5); - // gStyle->SetPaintTextFormat(const char* format = "g"); - // gStyle->SetPalette(Int_t ncolors = 0, Int_t* colors = 0); - // gStyle->SetTimeOffset(Double_t toffset); - // gStyle->SetHistMinimumZero(kTRUE); - -// gStyle->cd(); - - gROOT->ForceStyle(); - -} diff --git a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/TriggerStudy/Analysis_Samples.h b/SUSYBSMAnalysis/HSCP/test/UsefulScripts/TriggerStudy/Analysis_Samples.h deleted file mode 100644 index 091e1a1da0dd9..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/TriggerStudy/Analysis_Samples.h +++ /dev/null @@ -1,214 +0,0 @@ - -#ifndef HSCP_ANALYSIS_SAMPLE -#define HSCP_ANALYSIS_SAMPLE - -#define SID_GL300 0 -#define SID_GL400 1 -#define SID_GL500 2 -#define SID_GL600 3 -#define SID_GL700 4 -#define SID_GL800 5 -#define SID_GL900 6 -#define SID_GL1000 7 -#define SID_GL1100 8 -#define SID_GL300N 9 -#define SID_GL400N 10 -#define SID_GL500N 11 -#define SID_GL600N 12 -#define SID_GL700N 13 -#define SID_GL800N 14 -#define SID_GL900N 15 -#define SID_GL1000N 16 -#define SID_GL1100N 17 -#define SID_ST130 18 -#define SID_ST200 19 -#define SID_ST300 20 -#define SID_ST400 21 -#define SID_ST500 22 -#define SID_ST600 23 -#define SID_ST700 24 -#define SID_ST800 25 -#define SID_ST130N 26 -#define SID_ST200N 27 -#define SID_ST300N 28 -#define SID_ST400N 29 -#define SID_ST500N 30 -#define SID_ST600N 31 -#define SID_ST700N 32 -#define SID_ST800N 33 -#define SID_GS100 34 -#define SID_GS126 35 -#define SID_GS156 36 -#define SID_GS200 37 -#define SID_GS247 38 -#define SID_GS308 39 -#define SID_GS370 40 -#define SID_GS432 41 -#define SID_GS494 42 -#define SID_PS100 43 -#define SID_PS126 44 -#define SID_PS156 45 -#define SID_PS200 46 -#define SID_PS247 47 -#define SID_PS308 48 -#define SID_D08K100 49 -#define SID_D08K121 50 -#define SID_D08K182 51 -#define SID_D08K242 52 -#define SID_D08K302 53 -#define SID_D08K350 54 -#define SID_D08K370 55 -#define SID_D08K390 56 -#define SID_D08K395 57 -#define SID_D08K400 58 -#define SID_D08K410 59 -#define SID_D08K420 60 -#define SID_D08K500 61 -#define SID_D12K100 62 -#define SID_D12K182 63 -#define SID_D12K302 64 -#define SID_D12K500 65 -#define SID_D12K530 66 -#define SID_D12K570 67 -#define SID_D12K590 68 -#define SID_D12K595 69 -#define SID_D12K600 70 -#define SID_D12K610 71 -#define SID_D12K620 72 -#define SID_D12K700 73 -#define SID_D16K100 74 -#define SID_D16K182 75 -#define SID_D16K302 76 -#define SID_D16K500 77 -#define SID_D16K700 78 -#define SID_D16K730 79 -#define SID_D16K770 80 -#define SID_D16K790 81 -#define SID_D16K795 82 -#define SID_D16K800 83 -#define SID_D16K820 84 -#define SID_D16K900 85 - - -int RunningPeriods = 2; -double IntegratedLuminosity = 4679;//2125; //2080; //1912; //1947; //1631; //976.204518023; //705.273820; //342.603275; //204.160928; //191.04; -double IntegratedLuminosityBeforeTriggerChange = 353.494; // Total luminosity taken before RPC L1 trigger change (went into effect on run 165970) -float Event_Weight = 1; -int MaxEntry = 10000; - - -class stSignal{ - public: - std::string Type; - std::string Name; - std::string FileName; - std::string Legend; - double Mass; - double XSec; - bool MakePlot; - bool IsS4PileUp; - - stSignal(); - stSignal(std::string Type_, std::string Name_, std::string FileName_, std::string Legend_, double Mass_, bool MakePlot_, bool IsS4PileUp_, double XSec_){Type=Type_; Name=Name_; FileName=FileName_; Legend=Legend_; Mass=Mass_; MakePlot=MakePlot_; IsS4PileUp=IsS4PileUp_;XSec=XSec_;} -}; - - -void GetSignalDefinition(std::vector& signals){ - signals.push_back(stSignal("Gluino", "Gluino300", "Gluino300" , "#tilde{g} 300" , 300, 1, 1, 65.800000) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino300S", "Gluino300S" , "#tilde{g} 300S" , 300, 1, 1, 65.800000) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino600", "Gluino600" , "#tilde{g} 600" , 600, 1, 1, 0.693000) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino600S", "Gluino600S" , "#tilde{g} 600S" , 600, 1, 1, 0.693000) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino1100", "Gluino1100" , "#tilde{g} 1100" ,1100, 1, 1, 0.0038600) ); //NLO - signals.push_back(stSignal("Gluino", "Gluino1100S", "Gluino1100S" , "#tilde{g} 1100S" ,1100, 1, 1, 0.0038600) ); //NLO - - signals.push_back(stSignal("Stau" , "GMStau100", "stau_M-100" , "GMSB #tilde{#tau}_{1} 100" , 100, 1, 1, 1.3398) ); //NLO - signals.push_back(stSignal("Stau" , "GMStau100S", "stau_M-100S" , "GMSB #tilde{#tau}_{1} 100S" , 100, 1, 1, 1.3398) ); //NLO - signals.push_back(stSignal("Stau" , "GMStau200", "stau_M-200" , "GMSB #tilde{#tau}_{1} 200" , 200, 1, 1, 0.0118093) ); //NLO - signals.push_back(stSignal("Stau" , "GMStau200S", "stau_M-200S" , "GMSB #tilde{#tau}_{1} 200S" , 200, 1, 1, 0.0118093) ); //NLO - signals.push_back(stSignal("Stau" , "GMStau308", "stau_M-308" , "GMSB #tilde{#tau}_{1} 308" , 308, 1, 1, 0.00098447 ) ); //NLO - signals.push_back(stSignal("Stau" , "GMStau308S", "stau_M-308S" , "GMSB #tilde{#tau}_{1} 308S" , 308, 1, 1, 0.00098447 ) ); //NLO - - signals.push_back(stSignal("Stau" , "PPStau100", "PPStau100", "Pair #tilde{#tau}_{1} 100" , 100, 1, 1, 0.0382) ); //NLO - signals.push_back(stSignal("Stau" , "PPStau100S", "PPStau100S", "Pair #tilde{#tau}_{1} 100S" , 100, 1, 1, 0.0382) ); //NLO - signals.push_back(stSignal("Stau" , "PPStau200", "PPStau200", "Pair #tilde{#tau}_{1} 200" , 200, 1, 1, 0.00247) ); //NLO - signals.push_back(stSignal("Stau" , "PPStau200S", "PPStau200S", "Pair #tilde{#tau}_{1} 200S" , 200, 1, 1, 0.00247) ); //NLO - signals.push_back(stSignal("Stau" , "PPStau308", "PPStau308", "Pair #tilde{#tau}_{1} 308" , 308, 0, 1, 0.000353) ); //NLO - signals.push_back(stSignal("Stau" , "PPStau308S", "PPStau308S", "Pair #tilde{#tau}_{1} 308S" , 308, 0, 1, 0.000353) ); //NLO - - -} - -struct stMC{ - std::string Name; - double XSection; - double MaxPtHat; - double MaxEvent; - bool IsS4PileUp; - - stMC(); - stMC(std::string Name_, double XSection_, double MaxPtHat_, int MaxEvent_, bool IsS4PileUp_){Name = Name_; XSection = XSection_; MaxPtHat = MaxPtHat_; MaxEvent = MaxEvent_;IsS4PileUp = IsS4PileUp_;} -}; - -void GetMCDefinition(std::vector& MC){ - - MC.push_back(stMC("MC_DYToTauTau" , 1.300E3 , -1, -1, 0)); - MC.push_back(stMC("MC_DYToMuMu" , 1.300E3 , -1, -1, 0)); - MC.push_back(stMC("MC_WJetsToLNu" , 2.777E4 , -1, -1, 1)); - MC.push_back(stMC("MC_TTJets" , 9.400E1 , -1, -1, 1)); - MC.push_back(stMC("MC_QCD_Pt-15to30" , 8.16E8 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-30to50" , 5.310E7 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-50to80" , 6.360E6 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-80to120" , 7.840E5 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-120to170" , 1.150E5 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-170to300" , 2.430E4 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-300to470" , 1.170E3 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-470to600" , 7.020E1 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-600to800" , 1.560E1 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-800to1000" , 1.84 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-1000to1400" , 3.320E-1 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-1400to1800" , 1.090E-2 , -1, -1, 0)); - MC.push_back(stMC("MC_QCD_Pt-1800" , 3.580E-4 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-0to15" , 4.280E3 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-15to20" , 1.450E2 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-20to30" , 1.310E2 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-30to50" , 8.400E1 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-50to80" , 3.220E1 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-80to120" , 9.98 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-120to170", 2.73 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-170to230", 7.21E-1 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-230to300", 1.94E-1 , -1, -1, 0)); - MC.push_back(stMC("MC_ZJetToMuMu_Pt-300" , 7.59E-2 , -1, -1, 0)); - MC.push_back(stMC("MC_ZZ" , 4.287 , -1, -1, 1)); - MC.push_back(stMC("MC_WW" , 2.783E1 , -1, -1, 1)); - MC.push_back(stMC("MC_WZ" , 1.47E1 , -1, -1, 1)); -} - -void GetInputFiles(std::vector& inputFiles, std::string SampleName, int period=0){ -// std::string BaseDirectory = "/storage/data/cms/users/quertenmont/HSCP/CMSSW_4_2_3/11_08_03/"; -// std::string BaseDirectory = "dcache:/pnfs/cms/WAX/11/store/user/jchen/11_09_13_HSCP2011EDM/"; - std::string BaseDirectory = "/uscmst1b_scratch/lpc1/lpcphys/jchen/HSCPEDM_11_01_11/"; - if(SampleName=="Data"){ - inputFiles.push_back(BaseDirectory + "Data_RunA_160404_163869.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_165001_166033.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_166034_166500.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_166501_166893.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_166894_167151.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_167153_167913.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_170826_171500.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_171501_172619.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_172620_172790.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_172791_172802.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_172803_172900.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_172901_173243.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_173244_173692.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_175860_176099.root"); - inputFiles.push_back(BaseDirectory + "Data_RunA_176100_176309.root"); - }else if(SampleName.find("MC_",0) -#include -#include - -#include "TROOT.h" -#include "TFile.h" -#include "TDirectory.h" -#include "TChain.h" -#include "TObject.h" -#include "TCanvas.h" -#include "TMath.h" -#include "TLegend.h" -#include "TGraph.h" -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include "TTree.h" -#include "TF1.h" -#include "TGraphAsymmErrors.h" -#include "TPaveText.h" -#include "tdrstyle.C" - - class stSignal; - namespace edm {class TriggerResults; class TriggerResultsByName; class InputTag;} - namespace reco { class Vertex; class Track; class GenParticle;} - namespace susybsm {class HSCParticle;} - namespace fwlite { class ChainEvent;} - namespace trigger {class TriggerEvent;} - - -#if !defined(__CINT__) && !defined(__MAKECINT__) -#include "DataFormats/FWLite/interface/Handle.h" -#include "DataFormats/FWLite/interface/Event.h" -#include "DataFormats/FWLite/interface/ChainEvent.h" - - -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCParticle.h" -#include "FWCore/Common/interface/TriggerResultsByName.h" - -#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h" -#include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2D.h" -#include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h" -#include "DataFormats/TrackerRecHit2D/interface/ProjectedSiStripRecHit2D.h" -#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit1D.h" - -#include "DataFormats/HLTReco/interface/TriggerEvent.h" -#include "DataFormats/Common/interface/TriggerResults.h" -#include "DataFormats/HLTReco/interface/TriggerObject.h" - - - using namespace fwlite; - using namespace reco; - using namespace edm; - using namespace std; - using namespace trigger; - -#include "Analysis_Samples.h" -#include "../../ICHEP_Analysis/Analysis_PlotFunction.h" - - -#endif - -std::vector signals; -vector JetMetSD_triggers; -vector MuSD_triggers; -vector All_triggers; -map All_mask; - -class stPlot{ - public: - TH1D* Histo; - TH1D* HistoInc; - TH1D* BetaCount; - TH1D* BetaTotal; - TH1D* BetaMuon; - TH1D* BetaJet; - - stPlot(string SignalName){ - int numberofbins=JetMetSD_triggers.size()+MuSD_triggers.size()+1; - Histo = new TH1D((SignalName + "Abs").c_str(),(SignalName + "Abs").c_str(),numberofbins,0,numberofbins); - HistoInc = new TH1D((SignalName + "Inc").c_str(),(SignalName + "Inc").c_str(),numberofbins,0,numberofbins); - - for(unsigned int i=0;iGetXaxis()->SetBinLabel(i+1,MuSD_triggers[i].c_str()); } - for(unsigned int i=0;iGetXaxis()->SetBinLabel(MuSD_triggers.size()+1+i,JetMetSD_triggers[i].c_str()); } -// Histo->GetXaxis()->SetBinLabel(numberofbins-2,"Mu Paths"); -// Histo->GetXaxis()->SetBinLabel(numberofbins-1,"JetMET Paths"); - Histo->GetXaxis()->SetBinLabel(numberofbins,"Total"); - - for(unsigned int i=0;iGetXaxis()->SetBinLabel(i+1,MuSD_triggers[i].c_str()); } - for(unsigned int i=0;iGetXaxis()->SetBinLabel(MuSD_triggers.size()+1+i,JetMetSD_triggers[i].c_str()); } -// HistoInc->GetXaxis()->SetBinLabel(numberofbins-2,"Mu Paths"); -// HistoInc->GetXaxis()->SetBinLabel(numberofbins-1,"JetMET Paths"); - HistoInc->GetXaxis()->SetBinLabel(numberofbins,"Total"); - - Histo->Sumw2(); - HistoInc->Sumw2(); - - BetaCount = new TH1D((SignalName + "BetaMuCount").c_str() ,(SignalName + "BetaCount").c_str() ,20,0,1); BetaCount ->Sumw2(); - BetaTotal = new TH1D((SignalName + "BetaTotal" ).c_str() ,(SignalName + "BetaTotal").c_str() ,20,0,1); BetaTotal ->Sumw2(); - BetaMuon = new TH1D((SignalName + "BetaMuon" ).c_str() ,(SignalName + "BetaMuon" ).c_str() ,20,0,1); BetaMuon ->Sumw2(); - BetaJet = new TH1D((SignalName + "BetaJet" ).c_str() ,(SignalName + "BetaJet" ).c_str() ,20,0,1); BetaJet ->Sumw2(); - } - -}; - - -void TriggerStudy_Core(string SignalName, FILE* pFile, stPlot* plot); -double FastestHSCP(const fwlite::ChainEvent& ev); -bool IncreasedTreshold(const trigger::TriggerEvent& trEv, const edm::InputTag& InputPath, double NewThreshold, double etaCut,int NObjectAboveThreshold, bool averageThreshold=false); -void layout(vector& plots, vector& sigs, string name); -int JobIdToIndex(string JobId); -void SetWeight(const double& IntegratedLuminosityInPb=-1, const double& IntegratedLuminosityInPbBeforeTriggerChange=-1, const double& CrossSection=0, const double& MCEvents=0, int period=0); - - -void SetWeight(const double& IntegratedLuminosityInPb, const double& IntegratedLuminosityInPbBeforeTriggerChange, const double& CrossSection, const double& MCEvents, int period){ - if(IntegratedLuminosityInPb>=IntegratedLuminosityInPbBeforeTriggerChange && IntegratedLuminosityInPb>0){ - double NMCEvents = MCEvents; - if(MaxEntry>0)NMCEvents=std::min(MCEvents,(double)MaxEntry); - if (period==0) Event_Weight = (CrossSection * IntegratedLuminosityInPbBeforeTriggerChange) / NMCEvents; - else if (period==1)Event_Weight = (CrossSection * (IntegratedLuminosityInPb-IntegratedLuminosityInPbBeforeTriggerChange)) / NMCEvents; - }else{ - Event_Weight=1; - } -} - - - -void TriggerStudy() -{ - system("mkdir pictures"); - - setTDRStyle(); - gStyle->SetPadTopMargin (0.06); - gStyle->SetPadBottomMargin(0.10); - gStyle->SetPadRightMargin (0.18); - gStyle->SetPadLeftMargin (0.14); - gStyle->SetTitleSize(0.04, "XYZ"); - gStyle->SetTitleXOffset(1.1); - gStyle->SetTitleYOffset(1.35); - gStyle->SetPalette(1); - gStyle->SetNdivisions(505,"X"); - -// std::vector signals; - GetSignalDefinition(signals); - - - /////////////////////////////////////////////////////// - JetMetSD_triggers.push_back("HLT_PFMHT150_v2"); -// JetMetSD_triggers.push_back("HLT_MET100_v1"); - - MuSD_triggers.push_back("HLT_Mu40_eta2p1_v1"); -// MuSD_triggers.push_back("HLT_DoubleMu7_v1"); - - All_triggers.clear(); - for(unsigned int i=0;i objs; vector leg; - - objs.clear(); leg.clear(); - Id = JobIdToIndex("Gluino300"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("Gluino600"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("Gluino1100"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - layout(objs, leg, "summary_Gluino"); - - objs.clear(); leg.clear(); - Id = JobIdToIndex("Gluino300S"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("Gluino600S"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("Gluino1100S"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - layout(objs, leg, "summary_GluinoS"); - - - objs.clear(); leg.clear(); - Id = JobIdToIndex("GMStau100"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("GMStau200"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("GMStau308"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - layout(objs, leg, "summary_GMStau"); - - objs.clear(); leg.clear(); - Id = JobIdToIndex("GMStau100S"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("GMStau200S"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("GMStau308S"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - layout(objs, leg, "summary_GMStauS"); - - - - objs.clear(); leg.clear(); - Id = JobIdToIndex("PPStau100"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("PPStau200"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("PPStau308"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - layout(objs, leg, "summary_PPStau"); - - objs.clear(); leg.clear(); - Id = JobIdToIndex("PPStau100S"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("PPStau200S"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("PPStau308S"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - layout(objs, leg, "summary_PPStauS"); - - - -/* - - objs.clear(); leg.clear(); - Id = JobIdToIndex("DCStau121"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("DCStau242"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("DCStau302"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - layout(objs, leg, "summary_DCStau"); - - int Id; vector objs; vector leg; - - objs.clear(); leg.clear(); - Id = JobIdToIndex("Gluino300"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("Gluino500"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("Gluino800"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("Gluino900"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("Gluino1000"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - layout(objs, leg, "summary_Gluino"); - - - - objs.clear(); leg.clear(); - Id = JobIdToIndex("Gluino600"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - objs.push_back(plotsG600Z2);leg.push_back("Gluino600 Z2"); - Id = JobIdToIndex("Stop300"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - Id = JobIdToIndex("GMStau126"); objs.push_back(plots[Id]); leg.push_back(signals[Id].Name); - layout(objs, leg, "summary_Mixed"); -*/ - - fflush(pFile); - fclose(pFile); - -} - -void TriggerStudy_Core(string SignalName, FILE* pFile, stPlot* plot) -{ - - double Total = 0; - double SDJetMET = 0; - double SDMu = 0; - double SDBoth = 0; - double SDJetMETInc = 0; - double SDMuInc = 0; - double TrJetMET = 0; - double TrMu = 0; - double TrBoth = 0; - - int MaxPrint = 0; - for (int period=0; period fileNames; - GetInputFiles(fileNames,SignalName, period); - string thisname = fileNames[0]; - bool simhitshifted =0; - if(thisname.find("S.",0)0 && e>MaxEntry)break; - ev.to(e); - - fwlite::Handle hTriggerResults; - hTriggerResults.getByLabel(ev, "TriggerResults", "", "HLT"); - edm::TriggerResultsByName tr(nullptr, nullptr); - if(hTriggerResults.isValid()) { - tr = ev.triggerResultsByName(*hTriggerResults); - } - - if(simhitshifted) { - - fwlite::Handle hTriggerResults1; - hTriggerResults1.getByLabel(ev, "TriggerResults", "", "HLTSIMHITSHIFTER"); - tr = edm::TriggerResultsByName(nullptr, nullptr); - if(hTriggerResults1.isValid()) { - tr = ev.triggerResultsByName(*hTriggerResults1); - } - } -// edm::TriggerResultsByName tr = ev.triggerResultsByName("HLT"); if(!tr.isValid())continue; - // for(unsigned int i=0;i %1i\n",i, tr.triggerName(i).c_str(),tr.accept(i)); - //}fflush(stdout); - - fwlite::Handle< trigger::TriggerEvent > trEvHandle; - trEvHandle.getByLabel(ev,"hltTriggerSummaryAOD"); - trigger::TriggerEvent trEv = *trEvHandle; - - //for(unsigned int i=0;isizeFilters();i++){ - // if(strncmp(trEvHandle->filterTag(i).label().c_str(),"hltL1",5)==0)continue; - // printf("%i - %s\n",i,trEvHandle->filterTag(i).label().c_str()); - //} - - - bool JetMetSD = false; - bool MuSD = false; - bool JetMetSDInc = false; - bool MuSDInc = false; - bool JetMetTr = false; - bool MuTr = false; - - - unsigned int TrIndex_Unknown = tr.size(); - - bool AlreadyAccepted = false; - - for(unsigned int i=0;i::iterator whereMuSD = find(MuSD_triggers .begin(), MuSD_triggers .end(),All_triggers[i].c_str() ); - vector::iterator whereJetMetSD = find(JetMetSD_triggers.begin(), JetMetSD_triggers.end(),All_triggers[i].c_str() ); - - - bool Accept = false; - bool Accept2 = false; - - if(All_triggers[i]=="HLT_PFMHT150_v2"){ - if(TrIndex_Unknown != tr.triggerIndex("HLT_PFMHT150_v2")){ - if(eHisto ->Fill(All_triggers[i].c_str(),Event_Weight);} - if(Accept && !AlreadyAccepted){plot->HistoInc->Fill(All_triggers[i].c_str(),Event_Weight);} - - if (whereJetMetSD!=JetMetSD_triggers.end()){ JetMetSD |= Accept; if(!AlreadyAccepted)JetMetSDInc |= Accept;} - else if(whereMuSD !=MuSD_triggers.end()) { MuSD |= Accept; if(!AlreadyAccepted)MuSDInc |= Accept;} - - if (whereJetMetSD!=JetMetSD_triggers.end()){ JetMetTr |= Accept2; } - else if(whereMuSD !=MuSD_triggers.end()) { MuTr |= Accept2; } - - - AlreadyAccepted |= Accept; - } - fflush(stdout); - - - if(JetMetSD||MuSD){ - plot->Histo->Fill("Total",Event_Weight); - plot->HistoInc->Fill("Total",Event_Weight); - } - -// JetMetTr = JetMetSD & ((rand()%100)<90); -// MuTr = MuSD & ((rand()%100)<90); - - Total+=Event_Weight; - if(JetMetSD)SDJetMET+=Event_Weight; - if(MuSD)SDMu+=Event_Weight; - if(JetMetSDInc)SDJetMETInc+=Event_Weight; - if(MuSDInc)SDMuInc+=Event_Weight; - if(JetMetSD||MuSD)SDBoth+=Event_Weight; - if(JetMetTr)TrJetMET+=Event_Weight; - if(MuTr)TrMu+=Event_Weight; - if(JetMetTr||MuTr)TrBoth+=Event_Weight; - - double Beta = 1.0; - if(SignalName!="Data")Beta = FastestHSCP(ev); - plot->BetaCount->Fill(Beta,Event_Weight); - if(MuSD||JetMetSD)plot->BetaTotal->Fill(Beta,Event_Weight); - if(MuSD)plot->BetaMuon->Fill(Beta,Event_Weight); - if(JetMetSD)plot->BetaJet->Fill(Beta,Event_Weight); - - }printf("\n"); - } - -// fprintf(pFile, "%15s --> JetMET = %5.2f%% (was %5.2f%%) Mu = %5.2f%% (was %5.2f%%) JetMET||Mu = %5.2f%% (%5.2f%%)\n",SignalName.c_str(), (100.0*TrJetMET)/Total, (100.0*SDJetMET)/Total, (100.0*TrMu)/Total, (100.0*SDMu)/Total, (100.0*TrBoth)/Total, (100.0*SDBoth)/Total); -// fprintf(stdout, "%15s --> JetMET = %5.2f%% (was %5.2f%%) Mu = %5.2f%% (was %5.2f%%) JetMET||Mu = %5.2f%% (%5.2f%%)\n",SignalName.c_str(), (100.0*TrJetMET)/Total, (100.0*SDJetMET)/Total, (100.0*TrMu)/Total, (100.0*SDMu)/Total, (100.0*TrBoth)/Total, (100.0*SDBoth)/Total); - - - fprintf(pFile, "%15s --> MET = %5.2f%% (modified %5.2f%%) Mu = %5.2f%% (modified %5.2f%%) JetMET||Mu = %5.2f%% (%5.2f%%)\n",SignalName.c_str(), (100.0*SDJetMET)/Total, (100.0*TrJetMET)/Total, (100.0*SDMu)/Total, (100.0*TrMu)/Total, (100.0*SDBoth)/Total, (100.0*TrBoth)/Total); - fprintf(stdout, "%15s --> MET = %5.2f%% (modified %5.2f%%) Mu = %5.2f%% (modified %5.2f%%) JetMET||Mu = %5.2f%% (%5.2f%%)\n",SignalName.c_str(), (100.0*SDJetMET)/Total, (100.0*TrJetMET)/Total, (100.0*SDMu)/Total, (100.0*TrMu)/Total, (100.0*SDBoth)/Total, (100.0*TrBoth)/Total); - - - -// printf("Total %i \n",Total); - plot->Histo->SetStats(0) ; - plot->Histo->LabelsOption("v"); - plot->Histo->Scale(100./Total); - - - plot->HistoInc->SetStats(0) ; - plot->HistoInc->LabelsOption("v"); - plot->HistoInc->Scale(100./Total); - - - plot->BetaTotal->Divide(plot->BetaCount); - plot->BetaMuon ->Divide(plot->BetaCount); - plot->BetaJet ->Divide(plot->BetaCount); - - plot->BetaTotal->Scale(100.0); - plot->BetaMuon ->Scale(100.0); - plot->BetaJet ->Scale(100.0); - - TH1** Histos = new TH1*[10]; - std::vector legend; - TCanvas* c1; - - c1 = new TCanvas("c1","c1,",600,600); legend.clear(); - Histos[0] = (TH1*)plot->BetaMuon; legend.push_back("Muon"); - Histos[1] = (TH1*)plot->BetaTotal; legend.push_back("Overall"); - DrawSuperposedHistos((TH1**)Histos, legend, "HIST E1", "#beta of the fastest HSCP", "Trigger Efficiency (%)", 0,1, 0,100); - DrawLegend((TObject**)Histos,legend,"Trigger:","LP",0.35, 0.93, 0.18, 0.04); - c1->Modified(); - DrawPreliminary(-1); - SaveCanvas(c1,"pictures/",SignalName); - delete c1; -} - -void layout(vector& plots, vector& sigs, string name){ - unsigned int NPath = 0+3; - - std::vector legend; - TObject** Histos1 = new TObject*[plots.size()]; - - -// TLine* line1 = new TLine(plots[0]->Histo->GetBinLowEdge(NPath+1), 0, plots[0]->Histo->GetBinLowEdge(NPath+1), 100); -// line1->SetLineWidth(2); line1->SetLineStyle(1); -// TLine* line2 = new TLine(plots[0]->Histo->GetBinLowEdge(NPath+3), 0, plots[0]->Histo->GetBinLowEdge(NPath+3), 100); -// line2->SetLineWidth(2); line2->SetLineStyle(1); - - TCanvas* c1 = new TCanvas("MyC","Histo",600,600); - legend.clear(); - c1->SetGrid(); - c1->SetBottomMargin(0.3); - - for(unsigned int i=0;iHisto; legend.push_back(sigs[i]); - } -// DrawSuperposedHistos((TH1**)Histos1, legend, "E1", "", "Efficiency (%)", 0,0, 0,100); - if(name=="summary_Gluino")DrawSuperposedHistos((TH1**)Histos1, legend, "E1", "", "Efficiency (%)", 0,0, 0,30); - else DrawSuperposedHistos((TH1**)Histos1, legend, "E1", "", "Efficiency (%)", 0,0, 0,100); - DrawLegend(Histos1,legend,"","P", 0.98, 0.90, 0.13, 0.07); - DrawPreliminary(-1); - - for(unsigned int i=0;iHisto->GetYaxis()->SetTitleOffset(1.55); - plots[i]->Histo->SetMarkerSize(0.8); - } -// line1->Draw(); -// line2->Draw(); - SaveCanvas(c1,"pictures/",name); - delete c1; - - c1 = new TCanvas("MyC","Histo",600,600); - legend.clear(); - c1->SetGrid(); - c1->SetBottomMargin(0.3); - - for(unsigned int i=0;iHistoInc; legend.push_back(sigs[i]); - } - if(name=="summary_Gluino")DrawSuperposedHistos((TH1**)Histos1, legend, "E1", "", "Incremental Efficiency (%)", 0,0, 0,30); - else DrawSuperposedHistos((TH1**)Histos1, legend, "E1", "", "Incremental Efficiency (%)", 0,0, 0,100); - DrawLegend(Histos1,legend,"","P", 0.98, 0.90, 0.13, 0.07); - DrawPreliminary(-1); - - for(unsigned int i=0;iHistoInc->GetYaxis()->SetTitleOffset(1.55); - plots[i]->HistoInc->SetMarkerSize(0.8); - } - -// line1->Draw(); -// line2->Draw(); - SaveCanvas(c1,"pictures/",name + "_inc"); - delete c1; -} - - -double FastestHSCP(const fwlite::ChainEvent& ev){ - fwlite::Handle< std::vector > genCollHandle; - genCollHandle.getByLabel(ev, "genParticles"); - if(!genCollHandle.isValid()){printf("GenParticle Collection NotFound\n");return -1;} - std::vector genColl = *genCollHandle; - - double MaxBeta=-1; - for(unsigned int g=0;g %s XXX %s\n",filterIndex,trEv.filterTag(filterIndex).label().c_str(), trEv.filterTag(filterIndex).process().c_str()); - - if (filterIndex NewThreshold && fabs(TOC[KEYS[i]].eta())=NObjectAboveThreshold)return true; - - }else{ - std::vector ObjPt; - - for (int i=0; i!=n; ++i) { - ObjPt.push_back(TOC[KEYS[i]].pt()); - //cout << " " << i << " " << VIDS[i] << "/" << KEYS[i] << ": "<< TOC[KEYS[i]].id() << " " << TOC[KEYS[i]].pt() << " " << TOC[KEYS[i]].eta() << " " << TOC[KEYS[i]].phi() << " " << TOC[KEYS[i]].mass()<< endl; - } - if((int)(ObjPt.size())SetMakeSharedLib(makeshared); - TString dummy = makeshared.ReplaceAll("-Wshadow ", ""); - gSystem->SetMakeSharedLib(makeshared); - gSystem->Load("libFWCoreFWLite"); - FWLiteEnabler::enable();; - gSystem->Load("libDataFormatsFWLite.so"); - gSystem->Load("libDataFormatsHepMCCandidate.so"); - gSystem->Load("libDataFormatsCommon.so"); - gSystem->Load("libDataFormatsTrackerRecHit2D.so"); - gSystem->Load("libAnalysisDataFormatsSUSYBSMObjects.so"); - .x TriggerStudy.C+ -EOF diff --git a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/TriggerStudy/tdrstyle.C b/SUSYBSMAnalysis/HSCP/test/UsefulScripts/TriggerStudy/tdrstyle.C deleted file mode 100644 index 6e2de47e66928..0000000000000 --- a/SUSYBSMAnalysis/HSCP/test/UsefulScripts/TriggerStudy/tdrstyle.C +++ /dev/null @@ -1,169 +0,0 @@ -// -// TDR style macro for plots in ROOT -// .L tdrstyle.C -// setTDRStyle() -// -#include "TStyle.h" -#include "TPad.h" - -/* -// tdrGrid: Turns the grid lines on (true) or off (false) - -void tdrGrid(bool gridOn) { - tdrStyle->SetPadGridX(gridOn); - tdrStyle->SetPadGridY(gridOn); -} -*/ - -// fixOverlay: Redraws the axis - -void fixOverlay() { - gPad->RedrawAxis(); -} - -void setTDRStyle() { -// TStyle *tdrStyle = new TStyle("tdrStyle","Style for P-TDR"); - -// For the canvas: - gStyle->SetCanvasBorderMode(0); - gStyle->SetCanvasColor(kWhite); - gStyle->SetCanvasDefH(600); //Height of canvas - gStyle->SetCanvasDefW(600); //Width of canvas - gStyle->SetCanvasDefX(0); //POsition on screen - gStyle->SetCanvasDefY(0); - -// For the Pad: - gStyle->SetPadBorderMode(0); - // gStyle->SetPadBorderSize(Width_t size = 1); - gStyle->SetPadColor(kWhite); - gStyle->SetPadGridX(false); - gStyle->SetPadGridY(false); - gStyle->SetGridColor(0); - gStyle->SetGridStyle(3); - gStyle->SetGridWidth(1); - -// For the frame: - gStyle->SetFrameBorderMode(0); - gStyle->SetFrameBorderSize(1); - gStyle->SetFrameFillColor(0); - gStyle->SetFrameFillStyle(0); - gStyle->SetFrameLineColor(1); - gStyle->SetFrameLineStyle(1); - gStyle->SetFrameLineWidth(1); - -// For the histo: - // gStyle->SetHistFillColor(1); - // gStyle->SetHistFillStyle(0); - gStyle->SetHistLineColor(1); - gStyle->SetHistLineStyle(0); - gStyle->SetHistLineWidth(1); - // gStyle->SetLegoInnerR(Float_t rad = 0.5); - // gStyle->SetNumberContours(Int_t number = 20); - - gStyle->SetEndErrorSize(2); - //gStyle->SetErrorMarker(20); - gStyle->SetErrorX(0.); - - gStyle->SetMarkerStyle(20); - -//For the fit/function: - gStyle->SetOptFit(1); - gStyle->SetFitFormat("5.4g"); - gStyle->SetFuncColor(2); - gStyle->SetFuncStyle(1); - gStyle->SetFuncWidth(1); - -//For the date: - gStyle->SetOptDate(0); - // gStyle->SetDateX(Float_t x = 0.01); - // gStyle->SetDateY(Float_t y = 0.01); - -// For the statistics box: - gStyle->SetOptFile(0); - //gStyle->SetOptStat(0); - gStyle->SetOptStat("mr"); - gStyle->SetStatColor(kWhite); - gStyle->SetStatFont(42); - gStyle->SetStatFontSize(0.04);///---> gStyle->SetStatFontSize(0.025); - gStyle->SetStatTextColor(1); - gStyle->SetStatFormat("6.4g"); - gStyle->SetStatBorderSize(1); - gStyle->SetStatH(0.1); - gStyle->SetStatW(0.2);///---> gStyle->SetStatW(0.15); - - // gStyle->SetStatStyle(Style_t style = 1001); - // gStyle->SetStatX(Float_t x = 0); - // gStyle->SetStatY(Float_t y = 0); - -// Margins: - gStyle->SetPadTopMargin(0.05); - gStyle->SetPadBottomMargin(0.13); - gStyle->SetPadLeftMargin(0.16); - gStyle->SetPadRightMargin(0.02); - -// For the Global title: - - gStyle->SetOptTitle(0); - gStyle->SetTitleFont(42); - gStyle->SetTitleColor(1); - gStyle->SetTitleTextColor(1); - gStyle->SetTitleFillColor(10); - gStyle->SetTitleFontSize(0.05); - // gStyle->SetTitleH(0); // Set the height of the title box - // gStyle->SetTitleW(0); // Set the width of the title box - // gStyle->SetTitleX(0); // Set the position of the title box - // gStyle->SetTitleY(0.985); // Set the position of the title box - // gStyle->SetTitleStyle(Style_t style = 1001); - // gStyle->SetTitleBorderSize(2); - -// For the axis titles: - - gStyle->SetTitleColor(1, "XYZ"); - gStyle->SetTitleFont(42, "XYZ"); - gStyle->SetTitleSize(0.06, "XYZ"); - // gStyle->SetTitleXSize(Float_t size = 0.02); // Another way to set the size? - // gStyle->SetTitleYSize(Float_t size = 0.02); - gStyle->SetTitleXOffset(0.9); - gStyle->SetTitleYOffset(1.25); - // gStyle->SetTitleOffset(1.1, "Y"); // Another way to set the Offset - -// For the axis labels: - - gStyle->SetLabelColor(1, "XYZ"); - gStyle->SetLabelFont(42, "XYZ"); - gStyle->SetLabelOffset(0.007, "XYZ"); - gStyle->SetLabelSize(0.05, "XYZ"); - -// For the axis: - - gStyle->SetAxisColor(1, "XYZ"); - gStyle->SetStripDecimals(kTRUE); - gStyle->SetTickLength(0.03, "XYZ"); - gStyle->SetNdivisions(510, "XYZ"); - gStyle->SetPadTickX(1); // To get tick marks on the opposite side of the frame - gStyle->SetPadTickY(1); - -// Change for log plots: - gStyle->SetOptLogx(0); - gStyle->SetOptLogy(0); - gStyle->SetOptLogz(0); - -// Postscript options: - gStyle->SetPaperSize(20.,20.); - // gStyle->SetLineScalePS(Float_t scale = 3); - // gStyle->SetLineStyleString(Int_t i, const char* text); - // gStyle->SetHeaderPS(const char* header); - // gStyle->SetTitlePS(const char* pstitle); - - // gStyle->SetBarOffset(Float_t baroff = 0.5); - // gStyle->SetBarWidth(Float_t barwidth = 0.5); - // gStyle->SetPaintTextFormat(const char* format = "g"); - // gStyle->SetPalette(Int_t ncolors = 0, Int_t* colors = 0); - // gStyle->SetTimeOffset(Double_t toffset); - // gStyle->SetHistMinimumZero(kTRUE); - -// gStyle->cd(); - - gROOT->ForceStyle(); - -} diff --git a/SimCalorimetry/EcalEBTrigPrimProducers/test/test_EBTrigPrim_cfg.py b/SimCalorimetry/EcalEBTrigPrimProducers/test/test_EBTrigPrim_cfg.py index c647ce57fd0f2..37c615436becb 100644 --- a/SimCalorimetry/EcalEBTrigPrimProducers/test/test_EBTrigPrim_cfg.py +++ b/SimCalorimetry/EcalEBTrigPrimProducers/test/test_EBTrigPrim_cfg.py @@ -5,7 +5,7 @@ process.load('Configuration.StandardSequences.Services_cff') process.load("FWCore.MessageService.MessageLogger_cfi") process.load('Configuration.EventContent.EventContent_cff') -process.MessageLogger.categories = cms.untracked.vstring('EBPhaseIITPStudies', 'FwkReport') +process.MessageLogger.EBPhaseIITPStudies = dict() process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( reportEvery = cms.untracked.int32(1) ) diff --git a/SimCalorimetry/EcalElectronicsEmulation/src/EcalSimpleProducer.cc b/SimCalorimetry/EcalElectronicsEmulation/src/EcalSimpleProducer.cc index 9d168fe1b0592..5b402fbd978e3 100644 --- a/SimCalorimetry/EcalElectronicsEmulation/src/EcalSimpleProducer.cc +++ b/SimCalorimetry/EcalElectronicsEmulation/src/EcalSimpleProducer.cc @@ -86,7 +86,7 @@ void EcalSimpleProducer::produce(edm::Event &evt, const edm::EventSetup &) { double em = simHitFormula_->Eval(iEta0, iPhi0, ievt - 1); double eh = 0.; double t = 0.; - const PCaloHit hit(EBDetId(iEta1, iPhi).rawId(), em, eh, t, 0); + const PCaloHit hit(EBDetId(iEta1, iPhi).rawId(), em, eh, t, 0, 0); hits->push_back(hit); } } diff --git a/SimCalorimetry/EcalSelectiveReadoutProducers/src/EcalSelectiveReadoutProducer.cc b/SimCalorimetry/EcalSelectiveReadoutProducers/src/EcalSelectiveReadoutProducer.cc index bc5702d7aefa7..b47f0f45fbd04 100644 --- a/SimCalorimetry/EcalSelectiveReadoutProducers/src/EcalSelectiveReadoutProducer.cc +++ b/SimCalorimetry/EcalSelectiveReadoutProducers/src/EcalSelectiveReadoutProducer.cc @@ -339,7 +339,7 @@ bool EcalSelectiveReadoutProducer::getBinOfMax(const edm::Event& evt, const edm::ProductID& noZsDigiId, int& binOfMax) const { bool rc; - const edm::Provenance p = evt.getProvenance(noZsDigiId); + const edm::StableProvenance& p = evt.getStableProvenance(noZsDigiId); const edm::ParameterSet& result = parameterSet(p, evt.processHistory()); vector ebDigiParamList = result.getParameterNames(); string bofm("binOfMaximum"); diff --git a/SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.icc b/SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.icc index a416605d67bfc..83487bb635314 100644 --- a/SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.icc +++ b/SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.icc @@ -10,6 +10,7 @@ #include "CLHEP/Random/RandGaussQ.h" #include "DataFormats/EcalDetId/interface/EBDetId.h" #include "SimDataFormats/CaloHit/interface/PCaloHit.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/isFinite.h" #include "FWCore/Utilities/interface/Exception.h" diff --git a/SimCalorimetry/EcalSimProducers/plugins/EcalLiteDTUPedestalsESProducer.cc b/SimCalorimetry/EcalSimProducers/plugins/EcalLiteDTUPedestalsESProducer.cc index 6b17ea87a543f..b9b18061497bf 100644 --- a/SimCalorimetry/EcalSimProducers/plugins/EcalLiteDTUPedestalsESProducer.cc +++ b/SimCalorimetry/EcalSimProducers/plugins/EcalLiteDTUPedestalsESProducer.cc @@ -21,9 +21,7 @@ class EcalLiteDTUPedestalsESProducer : public edm::ESProducer { typedef std::unique_ptr ReturnType; ReturnType produce(const EcalLiteDTUPedestalsRcd& iRecord); - //Add 2 nov 2020: - edm::ESGetToken pedestalToken_; - /////////////////////////////// + private: double meanPedestalsGain10_; double rmsPedestalsGain10_; @@ -39,8 +37,7 @@ EcalLiteDTUPedestalsESProducer::EcalLiteDTUPedestalsESProducer(const edm::Parame rmsPedestalsGain10_ = p.getParameter("RMSPedestalsGain10"); meanPedestalsGain1_ = p.getParameter("MeanPedestalsGain1"); rmsPedestalsGain1_ = p.getParameter("RMSPedestalsGain1"); - auto cc = setWhatProduced(this); - pedestalToken_ = cc.consumes(); + setWhatProduced(this); } //// EcalLiteDTUPedestalsESProducer::ReturnType EcalLiteDTUPedestalsESProducer::produce( diff --git a/SimCalorimetry/EcalTestBeam/python/ecalTB2006H4_GenSimDigiReco_cfg.py b/SimCalorimetry/EcalTestBeam/python/ecalTB2006H4_GenSimDigiReco_cfg.py index 021ef65ced43b..d3bca5e7d82ff 100644 --- a/SimCalorimetry/EcalTestBeam/python/ecalTB2006H4_GenSimDigiReco_cfg.py +++ b/SimCalorimetry/EcalTestBeam/python/ecalTB2006H4_GenSimDigiReco_cfg.py @@ -259,28 +259,10 @@ # modify the default behavior of the MessageLogger -process.MessageLogger.destinations=cms.untracked.vstring('cout' - ,'cerr' - ,'G4msg' - ) -process.MessageLogger.categories=cms.untracked.vstring('FwkJob' - ,'FwkReport' - ,'FwkSummary' - ,'Root_NoDictionary' - ,'TimeReport' - ,'TimeModule' - ,'TimeEvent' - ,'MemoryCheck' - ,'PhysicsList' - ,'G4cout' - ,'G4cerr' - ,'BeamProfileVtxGenerator' - ) - #process.MessageLogger.debugModule = cms.untracked.vstring('g4SimHits','generatorSmeared') #Configuring the G4msg.log output -process.MessageLogger.G4msg = cms.untracked.PSet( +process.MessageLogger.files = dict(G4msg = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(True) #First eliminate unneeded output ,threshold = cms.untracked.string('INFO') @@ -304,6 +286,7 @@ ,G4cerr = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ,BeamProfileVtxGenerator = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ) +) #Add these 3 lines to put back the summary for timing information at the end of the logfile #(needed for TimeReport report) diff --git a/SimCalorimetry/EcalTestBeam/python/gensimdigi_H4EEtest_cfg.py b/SimCalorimetry/EcalTestBeam/python/gensimdigi_H4EEtest_cfg.py index 6a8007d7a1d55..879d6150060c0 100644 --- a/SimCalorimetry/EcalTestBeam/python/gensimdigi_H4EEtest_cfg.py +++ b/SimCalorimetry/EcalTestBeam/python/gensimdigi_H4EEtest_cfg.py @@ -168,28 +168,10 @@ # modify the default behavior of the MessageLogger -process.MessageLogger.destinations=cms.untracked.vstring('cout' - ,'cerr' - ,'G4msg' - ) -process.MessageLogger.categories=cms.untracked.vstring('FwkJob' - ,'FwkReport' - ,'FwkSummary' - ,'Root_NoDictionary' - ,'TimeReport' - ,'TimeModule' - ,'TimeEvent' - ,'MemoryCheck' - ,'PhysicsList' - ,'G4cout' - ,'G4cerr' - ,'BeamProfileVtxGenerator' - ) - process.MessageLogger.debugModules = cms.untracked.vstring('g4SimHits','generatorSmeared') #Configuring the G4msg.log output -process.MessageLogger.G4msg = cms.untracked.PSet( +process.MessageLogger.files = dict(G4msg = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(True) #First eliminate unneeded output ,threshold = cms.untracked.string('INFO') @@ -213,6 +195,7 @@ ,G4cerr = cms.untracked.PSet(limit = cms.untracked.int32(99999)) ,BeamProfileVtxGenerator = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ) +) #Add these 3 lines to put back the summary for timing information at the end of the logfile #(needed for TimeReport report) @@ -221,7 +204,7 @@ ) #process.load("FWCore.MessageLogger.MessageLogger_cfi") -#process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +#process.MessageLogger.cout.enable = cms.untracked.bool(True) #process.MessageLogger.cout.threshold = cms.untracked.string('DEBUG') #process.MessageLogger.debugModules = cms.untracked.vstring('*') diff --git a/SimCalorimetry/EcalTestBeam/src/EcalTBDigiProducer.cc b/SimCalorimetry/EcalTestBeam/src/EcalTBDigiProducer.cc index fc84ffae55068..3e8d3271a72b1 100644 --- a/SimCalorimetry/EcalTestBeam/src/EcalTBDigiProducer.cc +++ b/SimCalorimetry/EcalTestBeam/src/EcalTBDigiProducer.cc @@ -5,6 +5,7 @@ #include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Geometry/CaloGeometry/interface/CaloGeometry.h" #include "Geometry/Records/interface/CaloGeometryRecord.h" #include "SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.h" diff --git a/SimCalorimetry/EcalTrigPrimAlgos/interface/EcalFenixStrip.h b/SimCalorimetry/EcalTrigPrimAlgos/interface/EcalFenixStrip.h index 4b0f32dbb8290..082c7346fa649 100644 --- a/SimCalorimetry/EcalTrigPrimAlgos/interface/EcalFenixStrip.h +++ b/SimCalorimetry/EcalTrigPrimAlgos/interface/EcalFenixStrip.h @@ -8,8 +8,6 @@ #include #include "DataFormats/EcalDetId/interface/EcalTriggerElectronicsId.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/EventSetup.h" #include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h" #include #include @@ -30,12 +28,7 @@ class EcalTPGStripStatus; class EcalFenixStrip { public: // constructor, destructor - EcalFenixStrip(const edm::EventSetup &setup, - const EcalElectronicsMapping *theMapping, - bool debug, - bool famos, - int maxNrSamples, - int nbMaxXtals); + EcalFenixStrip(const EcalElectronicsMapping *theMapping, bool debug, bool famos, int maxNrSamples, int nbMaxXtals); virtual ~EcalFenixStrip(); private: @@ -100,10 +93,8 @@ class EcalFenixStrip { // main methods // process method is splitted in 2 parts: - // the first one is templated, the same except input + // the first one is overloaded, the same except input // the second part is slightly different for barrel/endcap - template - void process(const edm::EventSetup &, std::vector &, int nrxtals, std::vector &out); void process_part2_barrel(uint32_t stripid, const EcalTPGSlidingWindow *ecaltpgSlidW, const EcalTPGFineGrainStripEE *ecaltpgFgStripEE); @@ -130,7 +121,7 @@ class EcalFenixStrip { // ========================= implementations // ============================================================== - void process(const edm::EventSetup &setup, std::vector &samples, int nrXtals, std::vector &out) { + void process(std::vector &samples, int nrXtals, std::vector &out) { // now call processing if (samples.empty()) { std::cout << " Warning: 0 size vector found in EcalFenixStripProcess!!!!!" << std::endl; @@ -155,7 +146,7 @@ class EcalFenixStrip { out = format_out_; } - void process(const edm::EventSetup &setup, std::vector &samples, int nrXtals, std::vector &out) { + void process(std::vector &samples, int nrXtals, std::vector &out) { // now call processing if (samples.empty()) { std::cout << " Warning: 0 size vector found in EcalFenixStripProcess!!!!!" << std::endl; diff --git a/SimCalorimetry/EcalTrigPrimAlgos/interface/EcalFenixTcp.h b/SimCalorimetry/EcalTrigPrimAlgos/interface/EcalFenixTcp.h index 50a01a1387beb..f61a82c1401b8 100644 --- a/SimCalorimetry/EcalTrigPrimAlgos/interface/EcalFenixTcp.h +++ b/SimCalorimetry/EcalTrigPrimAlgos/interface/EcalFenixTcp.h @@ -13,8 +13,6 @@ #include #include -#include "FWCore/Framework/interface/EventSetup.h" - #include #include @@ -71,25 +69,17 @@ class EcalFenixTcp { } // end temporary, for timing tests - EcalFenixTcp(const edm::EventSetup &setup, - bool tcpFormat, - bool debug, - bool famos, - int binOfMax, - int maxNrSamples, - int nbMaxStrips); + EcalFenixTcp(bool tcpFormat, bool debug, bool famos, int binOfMax, int maxNrSamples, int nbMaxStrips); virtual ~EcalFenixTcp(); - void process(const edm::EventSetup &setup, - std::vector &bid, // dummy argument for template call + void process(std::vector &bid, // dummy argument for template call std::vector> &tpframetow, int nStr, std::vector &tptow, std::vector &tptow2, bool isInInnerRings, EcalTrigTowerDetId thisTower); - void process(const edm::EventSetup &setup, - std::vector &bid, // dummy argument for template call + void process(std::vector &bid, // dummy argument for template call std::vector> &tpframetow, int nStr, std::vector &tptow, diff --git a/SimCalorimetry/EcalTrigPrimAlgos/interface/EcalTrigPrimFunctionalAlgo.h b/SimCalorimetry/EcalTrigPrimAlgos/interface/EcalTrigPrimFunctionalAlgo.h index e24b344fe65e3..e7952eea1a762 100644 --- a/SimCalorimetry/EcalTrigPrimAlgos/interface/EcalTrigPrimFunctionalAlgo.h +++ b/SimCalorimetry/EcalTrigPrimAlgos/interface/EcalTrigPrimFunctionalAlgo.h @@ -27,8 +27,6 @@ #include "DataFormats/Common/interface/SortedCollection.h" #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include @@ -46,24 +44,27 @@ class EcalElectronicsMapping; class EcalTrigPrimFunctionalAlgo { public: + //Not barrelOnly + EcalTrigPrimFunctionalAlgo(const EcalTrigTowerConstituentsMap *eTTmap, + const CaloSubdetectorGeometry *endcapGeometry, + const EcalElectronicsMapping *theMapping, + int binofmax, + bool tcpFormat, + bool debug, + bool famos); + + //barrel only explicit EcalTrigPrimFunctionalAlgo( - const edm::EventSetup &setup, int binofmax, bool tcpFormat, bool barrelOnly, bool debug, bool famos); + const EcalElectronicsMapping *theMapping, int binofmax, bool tcpFormat, bool debug, bool famos); virtual ~EcalTrigPrimFunctionalAlgo(); - void run(const edm::EventSetup &, - const EBDigiCollection *col, - EcalTrigPrimDigiCollection &result, - EcalTrigPrimDigiCollection &resultTcp); - void run(const edm::EventSetup &, - const EEDigiCollection *col, - EcalTrigPrimDigiCollection &result, - EcalTrigPrimDigiCollection &resultTcp); + void run(const EBDigiCollection *col, EcalTrigPrimDigiCollection &result, EcalTrigPrimDigiCollection &resultTcp); + void run(const EEDigiCollection *col, EcalTrigPrimDigiCollection &result, EcalTrigPrimDigiCollection &resultTcp); void run_part1_EB(EBDigiCollection const *col); void run_part1_EE(EEDigiCollection const *col); template - void run_part2(const edm::EventSetup &, - Coll const *col, + void run_part2(Coll const *col, std::vector>>> &towerMap, EcalTrigPrimDigiCollection &result, EcalTrigPrimDigiCollection &resultTcp); @@ -102,7 +103,7 @@ class EcalTrigPrimFunctionalAlgo { } private: - void init(const edm::EventSetup &); + void init(); template void initStructures(std::vector>>> &towMap); template @@ -122,11 +123,11 @@ class EcalTrigPrimFunctionalAlgo { return ind; } - EcalFenixStrip *estrip_; - EcalFenixTcp *etcp_; + std::unique_ptr estrip_; + std::unique_ptr etcp_; - edm::ESHandle eTTmap_; - const CaloSubdetectorGeometry *theEndcapGeometry; + const EcalTrigTowerConstituentsMap *eTTmap_ = nullptr; + const CaloSubdetectorGeometry *theEndcapGeometry_ = nullptr; const EcalElectronicsMapping *theMapping_; float threshold; @@ -165,7 +166,6 @@ class EcalTrigPrimFunctionalAlgo { template void EcalTrigPrimFunctionalAlgo::run_part2( - const edm::EventSetup &setup, Coll const *col, std::vector>>> &towerMap, EcalTrigPrimDigiCollection &result, @@ -194,14 +194,14 @@ void EcalTrigPrimFunctionalAlgo::run_part2( // size; nr of crystals/strip if ((towerMap[index])[i].first > 0) { - estrip_->process(setup, df, (towerMap[index])[i].first, striptp_[nstr++]); + estrip_->process(df, (towerMap[index])[i].first, striptp_[nstr++]); } } // loop over strips in one tower bool isInInnerRings = false; if (thisTower.subDet() == EcalEndcap && (thisTower.ietaAbs() == 27 || thisTower.ietaAbs() == 28)) isInInnerRings = true; - etcp_->process(setup, dummy, striptp_, nstr, towtp_, towtp2_, isInInnerRings, thisTower); + etcp_->process(dummy, striptp_, nstr, towtp_, towtp2_, isInInnerRings, thisTower); // prepare TP-s // special treatment for 2 inner endcap rings diff --git a/SimCalorimetry/EcalTrigPrimAlgos/src/EcalFenixStrip.cc b/SimCalorimetry/EcalTrigPrimAlgos/src/EcalFenixStrip.cc index 2e54905595de2..32667292d7277 100644 --- a/SimCalorimetry/EcalTrigPrimAlgos/src/EcalFenixStrip.cc +++ b/SimCalorimetry/EcalTrigPrimAlgos/src/EcalFenixStrip.cc @@ -8,12 +8,8 @@ #include //------------------------------------------------------------------------------------- -EcalFenixStrip::EcalFenixStrip(const edm::EventSetup &setup, - const EcalElectronicsMapping *theMapping, - bool debug, - bool famos, - int maxNrSamples, - int nbMaxXtals) +EcalFenixStrip::EcalFenixStrip( + const EcalElectronicsMapping *theMapping, bool debug, bool famos, int maxNrSamples, int nbMaxXtals) : theMapping_(theMapping), debug_(debug), famos_(famos), nbMaxXtals_(nbMaxXtals) { linearizer_.resize(nbMaxXtals_); for (int i = 0; i < nbMaxXtals_; i++) diff --git a/SimCalorimetry/EcalTrigPrimAlgos/src/EcalFenixTcp.cc b/SimCalorimetry/EcalTrigPrimAlgos/src/EcalFenixTcp.cc index e552c1128c323..7a3f1d82d2c86 100644 --- a/SimCalorimetry/EcalTrigPrimAlgos/src/EcalFenixTcp.cc +++ b/SimCalorimetry/EcalTrigPrimAlgos/src/EcalFenixTcp.cc @@ -11,13 +11,7 @@ #include //---------------------------------------------------------------------------------------- -EcalFenixTcp::EcalFenixTcp(const edm::EventSetup &setup, - bool tcpFormat, - bool debug, - bool famos, - int binOfMax, - int maxNrSamples, - int nbMaxStrips) +EcalFenixTcp::EcalFenixTcp(bool tcpFormat, bool debug, bool famos, int binOfMax, int maxNrSamples, int nbMaxStrips) : debug_(debug), nbMaxStrips_(nbMaxStrips) { bypasslin_.resize(nbMaxStrips_); for (int i = 0; i < nbMaxStrips_; i++) @@ -51,8 +45,7 @@ EcalFenixTcp::~EcalFenixTcp() { } //----------------------------------------------------------------------------------------- -void EcalFenixTcp::process(const edm::EventSetup &setup, - std::vector &bid, // dummy argument for template call +void EcalFenixTcp::process(std::vector &bid, // dummy argument for template call std::vector> &tpframetow, int nStr, std::vector &tptow, @@ -77,8 +70,7 @@ void EcalFenixTcp::process(const edm::EventSetup &setup, } //----------------------------------------------------------------------------------------- -void EcalFenixTcp::process(const edm::EventSetup &setup, - std::vector &bid, // dummy argument for template call +void EcalFenixTcp::process(std::vector &bid, // dummy argument for template call std::vector> &tpframetow, int nStr, std::vector &tptow, diff --git a/SimCalorimetry/EcalTrigPrimAlgos/src/EcalTrigPrimFunctionalAlgo.cc b/SimCalorimetry/EcalTrigPrimAlgos/src/EcalTrigPrimFunctionalAlgo.cc index 7f3951f3fb24b..9877047d07e43 100644 --- a/SimCalorimetry/EcalTrigPrimAlgos/src/EcalTrigPrimFunctionalAlgo.cc +++ b/SimCalorimetry/EcalTrigPrimAlgos/src/EcalTrigPrimFunctionalAlgo.cc @@ -48,11 +48,36 @@ const unsigned int EcalTrigPrimFunctionalAlgo::maxNrTPs_ = 2448; // FIXME?? //---------------------------------------------------------------------- +EcalTrigPrimFunctionalAlgo::EcalTrigPrimFunctionalAlgo(const EcalTrigTowerConstituentsMap *eTTmap, + const CaloSubdetectorGeometry *endcapGeometry, + const EcalElectronicsMapping *theMapping, + int binofmax, + bool tcpFormat, + bool debug, + bool famos) + : eTTmap_(eTTmap), + theEndcapGeometry_(endcapGeometry), + theMapping_(theMapping), + binOfMaximum_(binofmax), + tcpFormat_(tcpFormat), + barrelOnly_(true), + debug_(debug), + famos_(famos) + +{ + if (famos_) + maxNrSamples_ = 1; // get from input?? + else + maxNrSamples_ = 10; + this->init(); +} + EcalTrigPrimFunctionalAlgo::EcalTrigPrimFunctionalAlgo( - const edm::EventSetup &setup, int binofmax, bool tcpFormat, bool barrelOnly, bool debug, bool famos) - : binOfMaximum_(binofmax), + const EcalElectronicsMapping *theMapping, int binofmax, bool tcpFormat, bool debug, bool famos) + : theMapping_(theMapping), + binOfMaximum_(binofmax), tcpFormat_(tcpFormat), - barrelOnly_(barrelOnly), + barrelOnly_(true), debug_(debug), famos_(famos) @@ -61,27 +86,14 @@ EcalTrigPrimFunctionalAlgo::EcalTrigPrimFunctionalAlgo( maxNrSamples_ = 1; // get from input?? else maxNrSamples_ = 10; - this->init(setup); + this->init(); } //---------------------------------------------------------------------- -void EcalTrigPrimFunctionalAlgo::init(const edm::EventSetup &setup) { - if (!barrelOnly_) { - edm::ESHandle theGeometry; - edm::ESHandle theEndcapGeometry_handle; - setup.get().get(theGeometry); - setup.get().get("EcalEndcap", theEndcapGeometry_handle); - theEndcapGeometry = &(*theEndcapGeometry_handle); - setup.get().get(eTTmap_); - } - // endcap mapping - edm::ESHandle ecalmapping; - setup.get().get(ecalmapping); - theMapping_ = ecalmapping.product(); - +void EcalTrigPrimFunctionalAlgo::init() { // create main sub algos - estrip_ = new EcalFenixStrip(setup, theMapping_, debug_, famos_, maxNrSamples_, nbMaxXtals_); - etcp_ = new EcalFenixTcp(setup, tcpFormat_, debug_, famos_, binOfMaximum_, maxNrSamples_, nbMaxStrips_); + estrip_ = std::make_unique(theMapping_, debug_, famos_, maxNrSamples_, nbMaxXtals_); + etcp_ = std::make_unique(tcpFormat_, debug_, famos_, binOfMaximum_, maxNrSamples_, nbMaxStrips_); // initialise data structures initStructures(towerMapEB_); @@ -93,26 +105,21 @@ void EcalTrigPrimFunctionalAlgo::init(const edm::EventSetup &setup) { } //---------------------------------------------------------------------- -EcalTrigPrimFunctionalAlgo::~EcalTrigPrimFunctionalAlgo() { - delete estrip_; - delete etcp_; -} +EcalTrigPrimFunctionalAlgo::~EcalTrigPrimFunctionalAlgo() {} //---------------------------------------------------------------------- -void EcalTrigPrimFunctionalAlgo::run(const edm::EventSetup &setup, - EBDigiCollection const *col, +void EcalTrigPrimFunctionalAlgo::run(EBDigiCollection const *col, EcalTrigPrimDigiCollection &result, EcalTrigPrimDigiCollection &resultTcp) { run_part1_EB(col); - run_part2(setup, col, towerMapEB_, result, resultTcp); + run_part2(col, towerMapEB_, result, resultTcp); } //---------------------------------------------------------------------- -void EcalTrigPrimFunctionalAlgo::run(const edm::EventSetup &setup, - EEDigiCollection const *col, +void EcalTrigPrimFunctionalAlgo::run(EEDigiCollection const *col, EcalTrigPrimDigiCollection &result, EcalTrigPrimDigiCollection &resultTcp) { run_part1_EE(col); - run_part2(setup, col, towerMapEE_, result, resultTcp); + run_part2(col, towerMapEE_, result, resultTcp); } //---------------------------------------------------------------------- int EcalTrigPrimFunctionalAlgo::findStripNr(const EBDetId &id) { diff --git a/SimCalorimetry/EcalTrigPrimProducers/plugins/EcalTrigPrimProducer.cc b/SimCalorimetry/EcalTrigPrimProducers/plugins/EcalTrigPrimProducer.cc index 640b2fe102fec..0e9cadce08b77 100644 --- a/SimCalorimetry/EcalTrigPrimProducers/plugins/EcalTrigPrimProducer.cc +++ b/SimCalorimetry/EcalTrigPrimProducers/plugins/EcalTrigPrimProducer.cc @@ -18,8 +18,10 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/EDGetToken.h" #include "FWCore/Utilities/interface/InputTag.h" #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" @@ -42,6 +44,7 @@ #include "CondFormats/DataRecord/interface/EcalTPGTowerStatusRcd.h" #include "CondFormats/DataRecord/interface/EcalTPGWeightGroupRcd.h" #include "CondFormats/DataRecord/interface/EcalTPGWeightIdMapRcd.h" +#include "CondFormats/DataRecord/interface/EcalTPGPedestalsRcd.h" #include "CondFormats/EcalObjects/interface/EcalTPGCrystalStatus.h" #include "CondFormats/EcalObjects/interface/EcalTPGFineGrainEBGroup.h" #include "CondFormats/EcalObjects/interface/EcalTPGFineGrainEBIdMap.h" @@ -58,12 +61,70 @@ #include "CondFormats/EcalObjects/interface/EcalTPGWeightGroup.h" #include "CondFormats/EcalObjects/interface/EcalTPGWeightIdMap.h" -#include "EcalTrigPrimProducer.h" +#include "Geometry/EcalMapping/interface/EcalMappingRcd.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" #include #include "SimCalorimetry/EcalTrigPrimAlgos/interface/EcalTrigPrimFunctionalAlgo.h" +class EcalTrigPrimProducer : public edm::stream::EDProducer<> { +public: + explicit EcalTrigPrimProducer(const edm::ParameterSet &conf); + + ~EcalTrigPrimProducer() override; + + void beginRun(const edm::Run &run, const edm::EventSetup &es) override; + void endRun(const edm::Run &, const edm::EventSetup &) override; + void produce(edm::Event &e, const edm::EventSetup &c) override; + + static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); + +private: + std::unique_ptr algo_; + bool barrelOnly_; + bool tcpFormat_; + bool debug_; + bool famos_; + edm::EDGetTokenT tokenEB_; + edm::EDGetTokenT tokenEE_; + + const edm::ESGetToken tokenEcalMapping_; + //these are only used if we also handle the endcap + edm::ESGetToken tokenEndcapGeom_; + edm::ESGetToken tokenETTMap_; + + // for EcalFenixStrip... + // get parameter records for xtals + edm::ESGetToken tokenEcalTPGLinearization_; + edm::ESGetToken tokenEcalTPGPedestals_; + edm::ESGetToken tokenEcalTPGCrystalStatus_; + + // for strips + edm::ESGetToken tokenEcalTPGSlidingWindow_; + edm::ESGetToken tokenEcalTPGWEightIdMap_; + edm::ESGetToken tokenEcalTPGWEightGroup_; + edm::ESGetToken tokenEcalTPGFineGrainStripEE_; + edm::ESGetToken tokenEcalTPGStripStatus_; + + // .. and for EcalFenixTcp + // get parameter records for towers + edm::ESGetToken tokenEcalTPGFineGrainEBGroup_; + edm::ESGetToken tokenEcalTPGLutGroup_; + edm::ESGetToken tokenEcalTPGLutIdMap_; + edm::ESGetToken tokenEcalTPGFineGrainEBIdMap_; + edm::ESGetToken tokenEcalTPGFineGrainTowerEE_; + edm::ESGetToken tokenEcalTPGTowerStatus_; + edm::ESGetToken tokenEcalTPGSpike_; + + int binOfMaximum_; + bool fillBinOfMaximumFromHistory_; + + // method to get EventSetupRecords + unsigned long long getRecords(edm::EventSetup const &setup); + unsigned long long cacheID_; +}; + EcalTrigPrimProducer::EcalTrigPrimProducer(const edm::ParameterSet &iConfig) : barrelOnly_(iConfig.getParameter("BarrelOnly")), tcpFormat_(iConfig.getParameter("TcpOutput")), @@ -73,12 +134,33 @@ EcalTrigPrimProducer::EcalTrigPrimProducer(const edm::ParameterSet &iConfig) edm::InputTag(iConfig.getParameter("Label"), iConfig.getParameter("InstanceEB")))), tokenEE_(consumes( edm::InputTag(iConfig.getParameter("Label"), iConfig.getParameter("InstanceEE")))), + tokenEcalMapping_(esConsumes()), + tokenEcalTPGLinearization_(esConsumes()), + tokenEcalTPGPedestals_(esConsumes()), + tokenEcalTPGCrystalStatus_(esConsumes()), + tokenEcalTPGSlidingWindow_(esConsumes()), + tokenEcalTPGWEightIdMap_(esConsumes()), + tokenEcalTPGWEightGroup_(esConsumes()), + tokenEcalTPGFineGrainStripEE_(esConsumes()), + tokenEcalTPGStripStatus_(esConsumes()), + tokenEcalTPGFineGrainEBGroup_(esConsumes()), + tokenEcalTPGLutGroup_(esConsumes()), + tokenEcalTPGLutIdMap_(esConsumes()), + tokenEcalTPGFineGrainEBIdMap_(esConsumes()), + tokenEcalTPGFineGrainTowerEE_(esConsumes()), + tokenEcalTPGTowerStatus_(esConsumes()), + tokenEcalTPGSpike_(esConsumes()), binOfMaximum_(iConfig.getParameter("binOfMaximum")), - fillBinOfMaximumFromHistory_(-1 == binOfMaximum_) { + fillBinOfMaximumFromHistory_(-1 == binOfMaximum_), + cacheID_(0) { // register your products produces(); if (tcpFormat_) produces("formatTCP"); + if (not barrelOnly_) { + tokenEndcapGeom_ = esConsumes(edm::ESInputTag("", "EcalEndcap")); + tokenETTMap_ = esConsumes(); + } } static int findBinOfMaximum(bool iFillFromHistory, int iPSetValue, edm::ProcessHistory const &iHistory) { @@ -126,45 +208,37 @@ void EcalTrigPrimProducer::beginRun(edm::Run const &run, edm::EventSetup const & // ProcessHistory is guaranteed to be constant for an entire Run binOfMaximum_ = findBinOfMaximum(fillBinOfMaximumFromHistory_, binOfMaximum_, run.processHistory()); - algo_ = std::make_unique(setup, binOfMaximum_, tcpFormat_, barrelOnly_, debug_, famos_); - - // get a first version of the records - cacheID_ = this->getRecords(setup); + auto const &ecalmapping = setup.getData(tokenEcalMapping_); + if (barrelOnly_) { + algo_ = std::make_unique(&ecalmapping, binOfMaximum_, tcpFormat_, debug_, famos_); + } else { + auto const &endcapGeometry = setup.getData(tokenEndcapGeom_); + auto const &eTTmap = setup.getData(tokenETTMap_); + algo_ = std::make_unique( + &eTTmap, &endcapGeometry, &ecalmapping, binOfMaximum_, tcpFormat_, debug_, famos_); + } } -void EcalTrigPrimProducer::endRun(edm::Run const &run, edm::EventSetup const &setup) { algo_.reset(); } +void EcalTrigPrimProducer::endRun(edm::Run const &run, edm::EventSetup const &setup) { + algo_.reset(); + cacheID_ = 0; +} unsigned long long EcalTrigPrimProducer::getRecords(edm::EventSetup const &setup) { // get Eventsetup records // for EcalFenixStrip... // get parameter records for xtals - edm::ESHandle theEcalTPGLinearization_handle; - setup.get().get(theEcalTPGLinearization_handle); - const EcalTPGLinearizationConst *ecaltpLin = theEcalTPGLinearization_handle.product(); - edm::ESHandle theEcalTPGPedestals_handle; - setup.get().get(theEcalTPGPedestals_handle); - const EcalTPGPedestals *ecaltpPed = theEcalTPGPedestals_handle.product(); - edm::ESHandle theEcalTPGCrystalStatus_handle; - setup.get().get(theEcalTPGCrystalStatus_handle); - const EcalTPGCrystalStatus *ecaltpgBadX = theEcalTPGCrystalStatus_handle.product(); + const EcalTPGLinearizationConst *ecaltpLin = &setup.getData(tokenEcalTPGLinearization_); + const EcalTPGPedestals *ecaltpPed = &setup.getData(tokenEcalTPGPedestals_); + const EcalTPGCrystalStatus *ecaltpgBadX = &setup.getData(tokenEcalTPGCrystalStatus_); // for strips - edm::ESHandle theEcalTPGSlidingWindow_handle; - setup.get().get(theEcalTPGSlidingWindow_handle); - const EcalTPGSlidingWindow *ecaltpgSlidW = theEcalTPGSlidingWindow_handle.product(); - edm::ESHandle theEcalTPGWEightIdMap_handle; - setup.get().get(theEcalTPGWEightIdMap_handle); - const EcalTPGWeightIdMap *ecaltpgWeightMap = theEcalTPGWEightIdMap_handle.product(); - edm::ESHandle theEcalTPGWEightGroup_handle; - setup.get().get(theEcalTPGWEightGroup_handle); - const EcalTPGWeightGroup *ecaltpgWeightGroup = theEcalTPGWEightGroup_handle.product(); - edm::ESHandle theEcalTPGFineGrainStripEE_handle; - setup.get().get(theEcalTPGFineGrainStripEE_handle); - const EcalTPGFineGrainStripEE *ecaltpgFgStripEE = theEcalTPGFineGrainStripEE_handle.product(); - edm::ESHandle theEcalTPGStripStatus_handle; - setup.get().get(theEcalTPGStripStatus_handle); - const EcalTPGStripStatus *ecaltpgStripStatus = theEcalTPGStripStatus_handle.product(); + const EcalTPGSlidingWindow *ecaltpgSlidW = &setup.getData(tokenEcalTPGSlidingWindow_); + const EcalTPGWeightIdMap *ecaltpgWeightMap = &setup.getData(tokenEcalTPGWEightIdMap_); + const EcalTPGWeightGroup *ecaltpgWeightGroup = &setup.getData(tokenEcalTPGWEightGroup_); + const EcalTPGFineGrainStripEE *ecaltpgFgStripEE = &setup.getData(tokenEcalTPGFineGrainStripEE_); + const EcalTPGStripStatus *ecaltpgStripStatus = &setup.getData(tokenEcalTPGStripStatus_); algo_->setPointers(ecaltpLin, ecaltpPed, @@ -177,33 +251,13 @@ unsigned long long EcalTrigPrimProducer::getRecords(edm::EventSetup const &setup // .. and for EcalFenixTcp // get parameter records for towers - edm::ESHandle theEcalTPGFineGrainEBGroup_handle; - setup.get().get(theEcalTPGFineGrainEBGroup_handle); - const EcalTPGFineGrainEBGroup *ecaltpgFgEBGroup = theEcalTPGFineGrainEBGroup_handle.product(); - - edm::ESHandle theEcalTPGLutGroup_handle; - setup.get().get(theEcalTPGLutGroup_handle); - const EcalTPGLutGroup *ecaltpgLutGroup = theEcalTPGLutGroup_handle.product(); - - edm::ESHandle theEcalTPGLutIdMap_handle; - setup.get().get(theEcalTPGLutIdMap_handle); - const EcalTPGLutIdMap *ecaltpgLut = theEcalTPGLutIdMap_handle.product(); - - edm::ESHandle theEcalTPGFineGrainEBIdMap_handle; - setup.get().get(theEcalTPGFineGrainEBIdMap_handle); - const EcalTPGFineGrainEBIdMap *ecaltpgFineGrainEB = theEcalTPGFineGrainEBIdMap_handle.product(); - - edm::ESHandle theEcalTPGFineGrainTowerEE_handle; - setup.get().get(theEcalTPGFineGrainTowerEE_handle); - const EcalTPGFineGrainTowerEE *ecaltpgFineGrainTowerEE = theEcalTPGFineGrainTowerEE_handle.product(); - - edm::ESHandle theEcalTPGTowerStatus_handle; - setup.get().get(theEcalTPGTowerStatus_handle); - const EcalTPGTowerStatus *ecaltpgBadTT = theEcalTPGTowerStatus_handle.product(); - - edm::ESHandle theEcalTPGSpike_handle; - setup.get().get(theEcalTPGSpike_handle); - const EcalTPGSpike *ecaltpgSpike = theEcalTPGSpike_handle.product(); + const EcalTPGFineGrainEBGroup *ecaltpgFgEBGroup = &setup.getData(tokenEcalTPGFineGrainEBGroup_); + const EcalTPGLutGroup *ecaltpgLutGroup = &setup.getData(tokenEcalTPGLutGroup_); + const EcalTPGLutIdMap *ecaltpgLut = &setup.getData(tokenEcalTPGLutIdMap_); + const EcalTPGFineGrainEBIdMap *ecaltpgFineGrainEB = &setup.getData(tokenEcalTPGFineGrainEBIdMap_); + const EcalTPGFineGrainTowerEE *ecaltpgFineGrainTowerEE = &setup.getData(tokenEcalTPGFineGrainTowerEE_); + const EcalTPGTowerStatus *ecaltpgBadTT = &setup.getData(tokenEcalTPGTowerStatus_); + const EcalTPGSpike *ecaltpgSpike = &setup.getData(tokenEcalTPGSpike_); algo_->setPointers2(ecaltpgFgEBGroup, ecaltpgLutGroup, @@ -274,12 +328,12 @@ void EcalTrigPrimProducer::produce(edm::Event &e, const edm::EventSetup &iSetup) const EEDigiCollection *eedc = nullptr; if (barrel) { ebdc = ebDigis.product(); - algo_->run(iSetup, ebdc, *pOut, *pOutTcp); + algo_->run(ebdc, *pOut, *pOutTcp); } if (endcap) { eedc = eeDigis.product(); - algo_->run(iSetup, eedc, *pOut, *pOutTcp); + algo_->run(eedc, *pOut, *pOutTcp); } edm::LogInfo("produce") << "For Barrel + Endcap, " << pOut->size() << " TP Digis were produced"; @@ -327,3 +381,5 @@ void EcalTrigPrimProducer::fillDescriptions(edm::ConfigurationDescriptions &desc desc.add("binOfMaximum", -1)->setComment(kComment); descriptions.addDefault(desc); } + +DEFINE_FWK_MODULE(EcalTrigPrimProducer); diff --git a/SimCalorimetry/EcalTrigPrimProducers/plugins/EcalTrigPrimProducer.h b/SimCalorimetry/EcalTrigPrimProducers/plugins/EcalTrigPrimProducer.h deleted file mode 100644 index 63cf6d232200e..0000000000000 --- a/SimCalorimetry/EcalTrigPrimProducers/plugins/EcalTrigPrimProducer.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef EcaltrigprimProducer_h -#define EcaltrigprimProducer_h - -/** \class EcalTrigPrimProducer - * - * EcalTrigPrimProducer produces a EcalTrigPrimDigiCollection - * Simulation as close as possible to hardware - * Main algorithm is EcalTrigPrimFunctionalAlgo which is now - * templated to take EBdataFrames/EEDataFrames as input - * - * \author Ursula Berthon, Stephanie Baffioni, Pascal Paganini, LLR Palaiseau - * - * \version 1st Version may 2006 - * \version 2nd Version jul 2006 - * \version 3rd Version nov 2006 - * \version 4th Version apr 2007 full endcap - * - ************************************************************/ - -#include - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/Utilities/interface/EDGetToken.h" - -#include "DataFormats/Common/interface/Handle.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -class EcalTrigPrimFunctionalAlgo; -class EBDigiCollection; -class EEDigiCollection; - -class EcalTrigPrimProducer : public edm::stream::EDProducer<> { -public: - explicit EcalTrigPrimProducer(const edm::ParameterSet &conf); - - ~EcalTrigPrimProducer() override; - - void beginRun(const edm::Run &run, const edm::EventSetup &es) override; - void endRun(const edm::Run &, const edm::EventSetup &) override; - void produce(edm::Event &e, const edm::EventSetup &c) override; - - static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); - -private: - std::unique_ptr algo_; - bool barrelOnly_; - bool tcpFormat_; - bool debug_; - bool famos_; - edm::EDGetTokenT tokenEB_; - edm::EDGetTokenT tokenEE_; - - int binOfMaximum_; - bool fillBinOfMaximumFromHistory_; - - // method to get EventSetupRecords - unsigned long long getRecords(edm::EventSetup const &setup); - unsigned long long cacheID_; -}; - -#endif diff --git a/SimCalorimetry/EcalTrigPrimProducers/plugins/SealModules.cc b/SimCalorimetry/EcalTrigPrimProducers/plugins/SealModules.cc index 75abc362112a8..cf90bacf0bb6a 100644 --- a/SimCalorimetry/EcalTrigPrimProducers/plugins/SealModules.cc +++ b/SimCalorimetry/EcalTrigPrimProducers/plugins/SealModules.cc @@ -4,10 +4,8 @@ #include "EcalTPInputAnalyzer.h" #include "EcalTrigPrimAnalyzer.h" #include "EcalTrigPrimESProducer.h" -#include "EcalTrigPrimProducer.h" #include "EcalTrigPrimSpikeESProducer.h" -DEFINE_FWK_MODULE(EcalTrigPrimProducer); DEFINE_FWK_MODULE(EcalTPInputAnalyzer); DEFINE_FWK_MODULE(EcalTrigPrimAnalyzer); DEFINE_FWK_MODULE(EcalTPCondAnalyzer); diff --git a/SimCalorimetry/HGCalAssociatorProducers/interface/AssociatorTools.h b/SimCalorimetry/HGCalAssociatorProducers/interface/AssociatorTools.h new file mode 100644 index 0000000000000..5a0b2b04d0f1f --- /dev/null +++ b/SimCalorimetry/HGCalAssociatorProducers/interface/AssociatorTools.h @@ -0,0 +1,22 @@ +#if !defined(SimCalorimetry_HGCalAssociatorProducers_interface_AssociatorTools_h) +#define SimCalorimetry_HGCalAssociatorProducers_interface_AssociatorTools_h +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h" +#include + +void removeCPFromPU(const std::vector& caloParticles, std::vector& cPIndices) { + //Consider CaloParticles coming from the hard scatterer + //excluding the PU contribution and save the indices. + for (unsigned int cpId = 0; cpId < caloParticles.size(); ++cpId) { + if (caloParticles[cpId].g4Tracks()[0].eventId().event() != 0 or + caloParticles[cpId].g4Tracks()[0].eventId().bunchCrossing() != 0) { + LogDebug("HGCalValidator") << "Excluding CaloParticles from event: " + << caloParticles[cpId].g4Tracks()[0].eventId().event() + << " with BX: " << caloParticles[cpId].g4Tracks()[0].eventId().bunchCrossing() + << std::endl; + continue; + } + cPIndices.emplace_back(cpId); + } +} +#endif diff --git a/SimCalorimetry/HGCalAssociatorProducers/plugins/LayerClusterAssociatorByEnergyScoreImpl.cc b/SimCalorimetry/HGCalAssociatorProducers/plugins/LayerClusterAssociatorByEnergyScoreImpl.cc index bb49fbf40e304..2a63778286cef 100644 --- a/SimCalorimetry/HGCalAssociatorProducers/plugins/LayerClusterAssociatorByEnergyScoreImpl.cc +++ b/SimCalorimetry/HGCalAssociatorProducers/plugins/LayerClusterAssociatorByEnergyScoreImpl.cc @@ -7,6 +7,8 @@ #include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h" #include "SimDataFormats/CaloAnalysis/interface/SimCluster.h" +#include "SimCalorimetry/HGCalAssociatorProducers/interface/AssociatorTools.h" + LayerClusterAssociatorByEnergyScoreImpl::LayerClusterAssociatorByEnergyScoreImpl( edm::EDProductGetter const& productGetter, bool hardScatterOnly, @@ -23,21 +25,11 @@ hgcal::association LayerClusterAssociatorByEnergyScoreImpl::makeConnections( const auto& caloParticles = *cPCH.product(); auto nLayerClusters = clusters.size(); //Consider CaloParticles coming from the hard scatterer, excluding the PU contribution. - auto nCaloParticles = caloParticles.size(); std::vector cPIndices; //Consider CaloParticles coming from the hard scatterer //excluding the PU contribution and save the indices. - for (unsigned int cpId = 0; cpId < nCaloParticles; ++cpId) { - if (hardScatterOnly_ && (caloParticles[cpId].g4Tracks()[0].eventId().event() != 0 or - caloParticles[cpId].g4Tracks()[0].eventId().bunchCrossing() != 0)) { - LogDebug("LayerClusterAssociatorByEnergyScoreImpl") - << "Excluding CaloParticles from event: " << caloParticles[cpId].g4Tracks()[0].eventId().event() - << " with BX: " << caloParticles[cpId].g4Tracks()[0].eventId().bunchCrossing() << std::endl; - continue; - } - cPIndices.emplace_back(cpId); - } - nCaloParticles = cPIndices.size(); + removeCPFromPU(caloParticles, cPIndices); + auto nCaloParticles = cPIndices.size(); // Initialize cPOnLayer. To be returned outside, since it contains the // information to compute the CaloParticle-To-LayerCluster score. diff --git a/SimCalorimetry/HGCalAssociatorProducers/plugins/SimClusterAssociatorByEnergyScoreImpl.cc b/SimCalorimetry/HGCalAssociatorProducers/plugins/SimClusterAssociatorByEnergyScoreImpl.cc new file mode 100644 index 0000000000000..935898ccd6af1 --- /dev/null +++ b/SimCalorimetry/HGCalAssociatorProducers/plugins/SimClusterAssociatorByEnergyScoreImpl.cc @@ -0,0 +1,523 @@ +#include "SimClusterAssociatorByEnergyScoreImpl.h" + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "SimDataFormats/CaloAnalysis/interface/SimCluster.h" + +SimClusterAssociatorByEnergyScoreImpl::SimClusterAssociatorByEnergyScoreImpl( + edm::EDProductGetter const& productGetter, + bool hardScatterOnly, + std::shared_ptr recHitTools, + const std::unordered_map* hitMap) + : hardScatterOnly_(hardScatterOnly), recHitTools_(recHitTools), hitMap_(hitMap), productGetter_(&productGetter) { + layers_ = recHitTools_->lastLayerBH(); +} + +hgcal::association SimClusterAssociatorByEnergyScoreImpl::makeConnections( + const edm::Handle& cCCH, const edm::Handle& sCCH) const { + // Get collections + const auto& clusters = *cCCH.product(); + const auto& simClusters = *sCCH.product(); + auto nLayerClusters = clusters.size(); + + //There shouldn't be any SimTracks from different crossings, but maybe they will be added later. + //At the moment there should be one SimTrack in each SimCluster. + auto nSimClusters = simClusters.size(); + std::vector sCIndices; + for (unsigned int scId = 0; scId < nSimClusters; ++scId) { + if (hardScatterOnly_ && (simClusters[scId].g4Tracks()[0].eventId().event() != 0 or + simClusters[scId].g4Tracks()[0].eventId().bunchCrossing() != 0)) { + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << "Excluding SimCluster from event: " << simClusters[scId].g4Tracks()[0].eventId().event() + << " with BX: " << simClusters[scId].g4Tracks()[0].eventId().bunchCrossing() << std::endl; + continue; + } + sCIndices.emplace_back(scId); + } + nSimClusters = sCIndices.size(); + + // Initialize lcsInSimCluster. To be returned outside, since it contains the + // information to compute the SimCluster-To-LayerCluster score. + // lcsInSimCluster[scId][layerId]: + hgcal::simClusterToLayerCluster lcsInSimCluster; + lcsInSimCluster.resize(nSimClusters); + for (unsigned int i = 0; i < nSimClusters; ++i) { + lcsInSimCluster[i].resize(layers_ * 2); + for (unsigned int j = 0; j < layers_ * 2; ++j) { + lcsInSimCluster[i][j].simClusterId = i; + lcsInSimCluster[i][j].energy = 0.f; + lcsInSimCluster[i][j].hits_and_fractions.clear(); + } + } + + // Fill detIdToSimClusterId_Map and update lcsInSimCluster + std::unordered_map> detIdToSimClusterId_Map; + for (const auto& scId : sCIndices) { + const auto& hits_and_fractions = simClusters[scId].hits_and_fractions(); + for (const auto& it_haf : hits_and_fractions) { + const auto hitid = (it_haf.first); + const auto scLayerId = + recHitTools_->getLayerWithOffset(hitid) + layers_ * ((recHitTools_->zside(hitid) + 1) >> 1) - 1; + + const auto itcheck = hitMap_->find(hitid); + if (itcheck != hitMap_->end()) { + auto hit_find_it = detIdToSimClusterId_Map.find(hitid); + if (hit_find_it == detIdToSimClusterId_Map.end()) { + detIdToSimClusterId_Map[hitid] = std::vector(); + } + detIdToSimClusterId_Map[hitid].emplace_back(scId, it_haf.second); + + const HGCRecHit* hit = itcheck->second; + lcsInSimCluster[scId][scLayerId].energy += it_haf.second * hit->energy(); + lcsInSimCluster[scId][scLayerId].hits_and_fractions.emplace_back(hitid, it_haf.second); + } + } + } // end of loop over SimClusters + +#ifdef EDM_ML_DEBUG + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << "lcsInSimCluster INFO (Only SimCluster filled at the moment)" << std::endl; + for (size_t sc = 0; sc < lcsInSimCluster.size(); ++sc) { + LogDebug("SimClusterAssociatorByEnergyScoreImpl") << "For SimCluster Idx: " << sc << " we have: " << std::endl; + for (size_t sclay = 0; sclay < lcsInSimCluster[sc].size(); ++sclay) { + LogDebug("SimClusterAssociatorByEnergyScoreImpl") << " On Layer: " << sclay << " we have:" << std::endl; + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << " SimClusterIdx: " << lcsInSimCluster[sc][sclay].simClusterId << std::endl; + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << " Energy: " << lcsInSimCluster[sc][sclay].energy << std::endl; + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << " # of clusters : " << nLayerClusters << std::endl; + double tot_energy = 0.; + for (auto const& haf : lcsInSimCluster[sc][sclay].hits_and_fractions) { + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << " Hits/fraction/energy: " << (uint32_t)haf.first << "/" << haf.second << "/" + << haf.second * hitMap_->at(haf.first)->energy() << std::endl; + tot_energy += haf.second * hitMap_->at(haf.first)->energy(); + } + LogDebug("SimClusterAssociatorByEnergyScoreImpl") << " Tot Sum haf: " << tot_energy << std::endl; + for (auto const& lc : lcsInSimCluster[sc][sclay].layerClusterIdToEnergyAndScore) { + LogDebug("SimClusterAssociatorByEnergyScoreImpl") << " lcIdx/energy/score: " << lc.first << "/" + << lc.second.first << "/" << lc.second.second << std::endl; + } + } + } + + LogDebug("SimClusterAssociatorByEnergyScoreImpl") << "detIdToSimClusterId_Map INFO" << std::endl; + for (auto const& sc : detIdToSimClusterId_Map) { + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << "For detId: " << (uint32_t)sc.first + << " we have found the following connections with SimClusters:" << std::endl; + for (auto const& sclu : sc.second) { + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << " SimCluster Id: " << sclu.clusterId << " with fraction: " << sclu.fraction + << " and energy: " << sclu.fraction * hitMap_->at(sc.first)->energy() << std::endl; + } + } +#endif + + // Fill detIdToLayerClusterId_Map and scsInLayerCluster; update lcsInSimCluster + std::unordered_map> detIdToLayerClusterId_Map; + // this contains the ids of the simclusters contributing with at least one + // hit to the layer cluster and the reconstruction error. To be returned + // since this contains the information to compute the + // LayerCluster-To-SimCluster score. + hgcal::layerClusterToSimCluster scsInLayerCluster; //[lcId][scId]->(energy,score) + scsInLayerCluster.resize(nLayerClusters); + + for (unsigned int lcId = 0; lcId < nLayerClusters; ++lcId) { + const std::vector>& hits_and_fractions = clusters[lcId].hitsAndFractions(); + unsigned int numberOfHitsInLC = hits_and_fractions.size(); + const auto firstHitDetId = hits_and_fractions[0].first; + int lcLayerId = + recHitTools_->getLayerWithOffset(firstHitDetId) + layers_ * ((recHitTools_->zside(firstHitDetId) + 1) >> 1) - 1; + + for (unsigned int hitId = 0; hitId < numberOfHitsInLC; hitId++) { + const auto rh_detid = hits_and_fractions[hitId].first; + const auto rhFraction = hits_and_fractions[hitId].second; + + auto hit_find_in_LC = detIdToLayerClusterId_Map.find(rh_detid); + if (hit_find_in_LC == detIdToLayerClusterId_Map.end()) { + detIdToLayerClusterId_Map[rh_detid] = std::vector(); + } + detIdToLayerClusterId_Map[rh_detid].emplace_back(lcId, rhFraction); + + auto hit_find_in_SC = detIdToSimClusterId_Map.find(rh_detid); + + if (hit_find_in_SC != detIdToSimClusterId_Map.end()) { + const auto itcheck = hitMap_->find(rh_detid); + const HGCRecHit* hit = itcheck->second; + //Loops through all the simclusters that have the layer cluster rechit under study + //Here is time to update the lcsInSimCluster and connect the SimCluster with all + //the layer clusters that have the current rechit detid matched. + for (auto& h : hit_find_in_SC->second) { + //lcsInSimCluster[simclusterId][layerId][layerclusterId]-> (energy,score) + //SC_i - > LC_j, LC_k, ... + lcsInSimCluster[h.clusterId][lcLayerId].layerClusterIdToEnergyAndScore[lcId].first += + h.fraction * hit->energy(); + //LC_i -> SC_j, SC_k, ... + scsInLayerCluster[lcId].emplace_back(h.clusterId, 0.f); + } + } + } // End loop over hits on a LayerCluster + } // End of loop over LayerClusters + +#ifdef EDM_ML_DEBUG + for (unsigned int lcId = 0; lcId < nLayerClusters; ++lcId) { + const auto& hits_and_fractions = clusters[lcId].hitsAndFractions(); + unsigned int numberOfHitsInLC = hits_and_fractions.size(); + const auto firstHitDetId = hits_and_fractions[0].first; + int lcLayerId = + recHitTools_->getLayerWithOffset(firstHitDetId) + layers_ * ((recHitTools_->zside(firstHitDetId) + 1) >> 1) - 1; + + // This vector will store, for each hit in the Layercluster, the index of + // the SimCluster that contributed the most, in terms of energy, to it. + // Special values are: + // + // -2 --> the reconstruction fraction of the RecHit is 0 (used in the past to monitor Halo Hits) + // -3 --> same as before with the added condition that no SimCluster has been linked to this RecHit + // -1 --> the reco fraction is >0, but no SimCluster has been linked to it + // >=0 --> index of the linked SimCluster + std::vector hitsToSimClusterId(numberOfHitsInLC); + // This will store the index of the SimCluster linked to the LayerCluster that has the most number of hits in common. + int maxSCId_byNumberOfHits = -1; + // This will store the maximum number of shared hits between a Layercluster and a SimCluster + unsigned int maxSCNumberOfHitsInLC = 0; + // This will store the index of the SimCluster linked to the LayerCluster that has the most energy in common. + int maxSCId_byEnergy = -1; + // This will store the maximum number of shared energy between a Layercluster and a SimCluster + float maxEnergySharedLCandSC = 0.f; + // This will store the fraction of the LayerCluster energy shared with the best(energy) SimCluster: e_shared/lc_energy + float energyFractionOfLCinSC = 0.f; + // This will store the fraction of the SimCluster energy shared with the LayerCluster: e_shared/sc_energy + float energyFractionOfSCinLC = 0.f; + std::unordered_map occurrencesSCinLC; + unsigned int numberOfNoiseHitsInLC = 0; + std::unordered_map SCEnergyInLC; + + for (unsigned int hitId = 0; hitId < numberOfHitsInLC; hitId++) { + const auto rh_detid = hits_and_fractions[hitId].first; + const auto rhFraction = hits_and_fractions[hitId].second; + + auto hit_find_in_SC = detIdToSimClusterId_Map.find(rh_detid); + + // if the fraction is zero or the hit does not belong to any simcluster + // set the caloparticleId for the hit to -1 this will + // contribute to the number of noise hits + + // MR Remove the case in which the fraction is 0, since this could be a + // real hit that has been marked as halo. + if (rhFraction == 0.) { + hitsToSimClusterId[hitId] = -2; + } + //Now check if there are SimClusters linked to this rechit of the layercluster + if (hit_find_in_SC == detIdToSimClusterId_Map.end()) { + hitsToSimClusterId[hitId] -= 1; + } else { + const auto itcheck = hitMap_->find(rh_detid); + const HGCRecHit* hit = itcheck->second; + auto maxSCEnergyInLC = 0.f; + auto maxSCId = -1; + //Loop through all the linked SimClusters + for (auto& h : hit_find_in_SC->second) { + SCEnergyInLC[h.clusterId] += h.fraction * hit->energy(); + // Keep track of which SimCluster ccontributed the most, in terms + // of energy, to this specific LayerCluster. + if (SCEnergyInLC[h.clusterId] > maxSCEnergyInLC) { + maxSCEnergyInLC = SCEnergyInLC[h.clusterId]; + maxSCId = h.clusterId; + } + } + hitsToSimClusterId[hitId] = maxSCId; + } + } // End loop over hits on a LayerCluster + + for (const auto& c : hitsToSimClusterId) { + if (c < 0) { + numberOfNoiseHitsInLC++; + } else { + occurrencesSCinLC[c]++; + } + } + + for (const auto& c : occurrencesSCinLC) { + if (c.second > maxSCNumberOfHitsInLC) { + maxSCId_byNumberOfHits = c.first; + maxSCNumberOfHitsInLC = c.second; + } + } + + for (const auto& c : SCEnergyInLC) { + if (c.second > maxEnergySharedLCandSC) { + maxSCId_byEnergy = c.first; + maxEnergySharedLCandSC = c.second; + } + } + + float totalSCEnergyOnLayer = 0.f; + if (maxSCId_byEnergy >= 0) { + totalSCEnergyOnLayer = lcsInSimCluster[maxSCId_byEnergy][lcLayerId].energy; + energyFractionOfSCinLC = maxEnergySharedLCandSC / totalSCEnergyOnLayer; + if (clusters[lcId].energy() > 0.f) { + energyFractionOfLCinSC = maxEnergySharedLCandSC / clusters[lcId].energy(); + } + } + + LogDebug("SimClusterAssociatorByEnergyScoreImpl") << std::setw(10) << "LayerId:" + << "\t" << std::setw(12) << "layerCluster" + << "\t" << std::setw(10) << "lc energy" + << "\t" << std::setw(5) << "nhits" + << "\t" << std::setw(12) << "noise hits" + << "\t" << std::setw(22) << "maxSCId_byNumberOfHits" + << "\t" << std::setw(8) << "nhitsSC" + << "\t" << std::setw(13) << "maxSCId_byEnergy" + << "\t" << std::setw(20) << "maxEnergySharedLCandSC" + << "\t" << std::setw(22) << "totalSCEnergyOnLayer" + << "\t" << std::setw(22) << "energyFractionOfLCinSC" + << "\t" << std::setw(25) << "energyFractionOfSCinLC" + << "\t" + << "\n"; + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << std::setw(10) << lcLayerId << "\t" << std::setw(12) << lcId << "\t" << std::setw(10) + << clusters[lcId].energy() << "\t" << std::setw(5) << numberOfHitsInLC << "\t" << std::setw(12) + << numberOfNoiseHitsInLC << "\t" << std::setw(22) << maxSCId_byNumberOfHits << "\t" << std::setw(8) + << maxSCNumberOfHitsInLC << "\t" << std::setw(13) << maxSCId_byEnergy << "\t" << std::setw(20) + << maxEnergySharedLCandSC << "\t" << std::setw(22) << totalSCEnergyOnLayer << "\t" << std::setw(22) + << energyFractionOfLCinSC << "\t" << std::setw(25) << energyFractionOfSCinLC << "\n"; + } // End of loop over LayerClusters + + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << "Improved lcsInSimCluster INFO (Now containing the linked layer clusters id and energy - score still empty)" + << std::endl; + for (size_t sc = 0; sc < lcsInSimCluster.size(); ++sc) { + LogDebug("SimClusterAssociatorByEnergyScoreImpl") << "For SimCluster Idx: " << sc << " we have: " << std::endl; + for (size_t sclay = 0; sclay < lcsInSimCluster[sc].size(); ++sclay) { + LogDebug("SimClusterAssociatorByEnergyScoreImpl") << " On Layer: " << sclay << " we have:" << std::endl; + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << " SimClusterIdx: " << lcsInSimCluster[sc][sclay].simClusterId << std::endl; + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << " Energy: " << lcsInSimCluster[sc][sclay].energy << std::endl; + double tot_energy = 0.; + for (auto const& haf : lcsInSimCluster[sc][sclay].hits_and_fractions) { + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << " Hits/fraction/energy: " << (uint32_t)haf.first << "/" << haf.second << "/" + << haf.second * hitMap_->at(haf.first)->energy() << std::endl; + tot_energy += haf.second * hitMap_->at(haf.first)->energy(); + } + LogDebug("SimClusterAssociatorByEnergyScoreImpl") << " Tot Sum haf: " << tot_energy << std::endl; + for (auto const& lc : lcsInSimCluster[sc][sclay].layerClusterIdToEnergyAndScore) { + LogDebug("SimClusterAssociatorByEnergyScoreImpl") << " lcIdx/energy/score: " << lc.first << "/" + << lc.second.first << "/" << lc.second.second << std::endl; + } + } + } + + LogDebug("SimClusterAssociatorByEnergyScoreImpl") << "Improved detIdToSimClusterId_Map INFO" << std::endl; + for (auto const& sc : detIdToSimClusterId_Map) { + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << "For detId: " << (uint32_t)sc.first + << " we have found the following connections with SimClusters:" << std::endl; + for (auto const& sclu : sc.second) { + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << " SimCluster Id: " << sclu.clusterId << " with fraction: " << sclu.fraction + << " and energy: " << sclu.fraction * hitMap_->at(sc.first)->energy() << std::endl; + } + } +#endif + + // Update scsInLayerCluster; compute the score LayerCluster-to-SimCluster, + // together with the returned AssociationMap + for (unsigned int lcId = 0; lcId < nLayerClusters; ++lcId) { + // The simclusters contributing to the layer clusters should already be unique. + // find the unique simclusters id contributing to the layer clusters + std::sort(scsInLayerCluster[lcId].begin(), scsInLayerCluster[lcId].end()); + auto last = std::unique(scsInLayerCluster[lcId].begin(), scsInLayerCluster[lcId].end()); + scsInLayerCluster[lcId].erase(last, scsInLayerCluster[lcId].end()); + const auto& hits_and_fractions = clusters[lcId].hitsAndFractions(); + unsigned int numberOfHitsInLC = hits_and_fractions.size(); + // If a reconstructed LayerCluster has energy 0 but is linked to a + // SimCluster, assigned score 1 + if (clusters[lcId].energy() == 0. && !scsInLayerCluster[lcId].empty()) { + for (auto& scPair : scsInLayerCluster[lcId]) { + scPair.second = 1.; + LogDebug("SimClusterAssociatorByEnergyScoreImpl") << "layerClusterId : \t " << lcId << "\t SC id : \t" + << scPair.first << "\t score \t " << scPair.second << "\n"; + } + continue; + } + + // Compute the correct normalization + float invLayerClusterEnergyWeight = 0.f; + for (auto const& haf : clusters[lcId].hitsAndFractions()) { + invLayerClusterEnergyWeight += + (haf.second * hitMap_->at(haf.first)->energy()) * (haf.second * hitMap_->at(haf.first)->energy()); + } + invLayerClusterEnergyWeight = 1.f / invLayerClusterEnergyWeight; + for (unsigned int i = 0; i < numberOfHitsInLC; ++i) { + DetId rh_detid = hits_and_fractions[i].first; + float rhFraction = hits_and_fractions[i].second; + + bool hitWithSC = (detIdToSimClusterId_Map.find(rh_detid) != detIdToSimClusterId_Map.end()); + + auto itcheck = hitMap_->find(rh_detid); + const HGCRecHit* hit = itcheck->second; + float hitEnergyWeight = hit->energy() * hit->energy(); + + for (auto& scPair : scsInLayerCluster[lcId]) { + float scFraction = 0.f; + if (hitWithSC) { + auto findHitIt = std::find(detIdToSimClusterId_Map[rh_detid].begin(), + detIdToSimClusterId_Map[rh_detid].end(), + hgcal::detIdInfoInCluster{scPair.first, 0.f}); + if (findHitIt != detIdToSimClusterId_Map[rh_detid].end()) + scFraction = findHitIt->fraction; + } + scPair.second += + (rhFraction - scFraction) * (rhFraction - scFraction) * hitEnergyWeight * invLayerClusterEnergyWeight; +#ifdef EDM_ML_DEBUG + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << "rh_detid:\t" << (uint32_t)rh_detid << "\tlayerClusterId:\t" << lcId << "\t" + << "rhfraction,scfraction:\t" << rhFraction << ", " << scFraction << "\t" + << "hitEnergyWeight:\t" << hitEnergyWeight << "\t" + << "current score:\t" << scPair.second << "\t" + << "invLayerClusterEnergyWeight:\t" << invLayerClusterEnergyWeight << "\n"; +#endif + } + } // End of loop over Hits within a LayerCluster +#ifdef EDM_ML_DEBUG + if (scsInLayerCluster[lcId].empty()) + LogDebug("SimClusterAssociatorByEnergyScoreImpl") << "layerCluster Id: \t" << lcId << "\tSC id:\t-1 " + << "\t score \t-1" + << "\n"; +#endif + } // End of loop over LayerClusters + + // Compute the SimCluster-To-LayerCluster score + for (const auto& scId : sCIndices) { + for (unsigned int layerId = 0; layerId < layers_ * 2; ++layerId) { + unsigned int SCNumberOfHits = lcsInSimCluster[scId][layerId].hits_and_fractions.size(); + if (SCNumberOfHits == 0) + continue; +#ifdef EDM_ML_DEBUG + int lcWithMaxEnergyInSC = -1; + //energy of the most energetic LC from all that were linked to SC + float maxEnergyLCinSC = 0.f; + float SCenergy = lcsInSimCluster[scId][layerId].energy; + //most energetic LC from all LCs linked to SC over SC energy. + float SCEnergyFractionInLC = 0.f; + for (auto& lc : lcsInSimCluster[scId][layerId].layerClusterIdToEnergyAndScore) { + if (lc.second.first > maxEnergyLCinSC) { + maxEnergyLCinSC = lc.second.first; + lcWithMaxEnergyInSC = lc.first; + } + } + if (SCenergy > 0.f) + SCEnergyFractionInLC = maxEnergyLCinSC / SCenergy; + + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << std::setw(8) << "LayerId:\t" << std::setw(12) << "simcluster\t" << std::setw(15) << "sc total energy\t" + << std::setw(15) << "scEnergyOnLayer\t" << std::setw(14) << "SCNhitsOnLayer\t" << std::setw(18) + << "lcWithMaxEnergyInSC\t" << std::setw(15) << "maxEnergyLCinSC\t" << std::setw(20) << "SCEnergyFractionInLC" + << "\n"; + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << std::setw(8) << layerId << "\t" << std::setw(12) << scId << "\t" << std::setw(15) + << simClusters[scId].energy() << "\t" << std::setw(15) << SCenergy << "\t" << std::setw(14) << SCNumberOfHits + << "\t" << std::setw(18) << lcWithMaxEnergyInSC << "\t" << std::setw(15) << maxEnergyLCinSC << "\t" + << std::setw(20) << SCEnergyFractionInLC << "\n"; +#endif + // Compute the correct normalization + float invSCEnergyWeight = 0.f; + for (auto const& haf : lcsInSimCluster[scId][layerId].hits_and_fractions) { + invSCEnergyWeight += std::pow(haf.second * hitMap_->at(haf.first)->energy(), 2); + } + invSCEnergyWeight = 1.f / invSCEnergyWeight; + for (unsigned int i = 0; i < SCNumberOfHits; ++i) { + auto& sc_hitDetId = lcsInSimCluster[scId][layerId].hits_and_fractions[i].first; + auto& scFraction = lcsInSimCluster[scId][layerId].hits_and_fractions[i].second; + + bool hitWithLC = false; + if (scFraction == 0.f) + continue; //hopefully this should never happen + auto hit_find_in_LC = detIdToLayerClusterId_Map.find(sc_hitDetId); + if (hit_find_in_LC != detIdToLayerClusterId_Map.end()) + hitWithLC = true; + auto itcheck = hitMap_->find(sc_hitDetId); + const HGCRecHit* hit = itcheck->second; + float hitEnergyWeight = hit->energy() * hit->energy(); + for (auto& lcPair : lcsInSimCluster[scId][layerId].layerClusterIdToEnergyAndScore) { + unsigned int layerClusterId = lcPair.first; + float lcFraction = 0.f; + + if (hitWithLC) { + auto findHitIt = std::find(detIdToLayerClusterId_Map[sc_hitDetId].begin(), + detIdToLayerClusterId_Map[sc_hitDetId].end(), + hgcal::detIdInfoInCluster{layerClusterId, 0.f}); + if (findHitIt != detIdToLayerClusterId_Map[sc_hitDetId].end()) + lcFraction = findHitIt->fraction; + } + lcPair.second.second += + (lcFraction - scFraction) * (lcFraction - scFraction) * hitEnergyWeight * invSCEnergyWeight; +#ifdef EDM_ML_DEBUG + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << "scDetId:\t" << (uint32_t)sc_hitDetId << "\tlayerClusterId:\t" << layerClusterId << "\t" + << "lcfraction,scfraction:\t" << lcFraction << ", " << scFraction << "\t" + << "hitEnergyWeight:\t" << hitEnergyWeight << "\t" + << "current score:\t" << lcPair.second.second << "\t" + << "invSCEnergyWeight:\t" << invSCEnergyWeight << "\n"; +#endif + } // End of loop over LayerClusters linked to hits of this SimCluster + } // End of loop over hits of SimCluster on a Layer +#ifdef EDM_ML_DEBUG + if (lcsInSimCluster[scId][layerId].layerClusterIdToEnergyAndScore.empty()) + LogDebug("SimClusterAssociatorByEnergyScoreImpl") << "SC Id: \t" << scId << "\tLC id:\t-1 " + << "\t score \t-1" + << "\n"; + + for (const auto& lcPair : lcsInSimCluster[scId][layerId].layerClusterIdToEnergyAndScore) { + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << "SC Id: \t" << scId << "\t LC id: \t" << lcPair.first << "\t score \t" << lcPair.second.second + << "\t shared energy:\t" << lcPair.second.first << "\t shared energy fraction:\t" + << (lcPair.second.first / SCenergy) << "\n"; + } +#endif + } + } + return {scsInLayerCluster, lcsInSimCluster}; +} + +hgcal::RecoToSimCollectionWithSimClusters SimClusterAssociatorByEnergyScoreImpl::associateRecoToSim( + const edm::Handle& cCCH, const edm::Handle& sCCH) const { + hgcal::RecoToSimCollectionWithSimClusters returnValue(productGetter_); + const auto& links = makeConnections(cCCH, sCCH); + + const auto& scsInLayerCluster = std::get<0>(links); + for (size_t lcId = 0; lcId < scsInLayerCluster.size(); ++lcId) { + for (auto& scPair : scsInLayerCluster[lcId]) { + LogDebug("SimClusterAssociatorByEnergyScoreImpl") + << "layerCluster Id: \t" << lcId << "\t SC id: \t" << scPair.first << "\t score \t" << scPair.second << "\n"; + // Fill AssociationMap + returnValue.insert(edm::Ref(cCCH, lcId), // Ref to LC + std::make_pair(edm::Ref(sCCH, scPair.first), + scPair.second) // Pair + ); + } + } + return returnValue; +} + +hgcal::SimToRecoCollectionWithSimClusters SimClusterAssociatorByEnergyScoreImpl::associateSimToReco( + const edm::Handle& cCCH, const edm::Handle& sCCH) const { + hgcal::SimToRecoCollectionWithSimClusters returnValue(productGetter_); + const auto& links = makeConnections(cCCH, sCCH); + const auto& lcsInSimCluster = std::get<1>(links); + for (size_t scId = 0; scId < lcsInSimCluster.size(); ++scId) { + for (size_t layerId = 0; layerId < lcsInSimCluster[scId].size(); ++layerId) { + for (auto& lcPair : lcsInSimCluster[scId][layerId].layerClusterIdToEnergyAndScore) { + returnValue.insert( + edm::Ref(sCCH, scId), // Ref to SC + std::make_pair(edm::Ref(cCCH, lcPair.first), // Pair > + ); + } + } + } + return returnValue; +} diff --git a/SimCalorimetry/HGCalAssociatorProducers/plugins/SimClusterAssociatorByEnergyScoreImpl.h b/SimCalorimetry/HGCalAssociatorProducers/plugins/SimClusterAssociatorByEnergyScoreImpl.h new file mode 100644 index 0000000000000..3bee92f577b83 --- /dev/null +++ b/SimCalorimetry/HGCalAssociatorProducers/plugins/SimClusterAssociatorByEnergyScoreImpl.h @@ -0,0 +1,70 @@ +// Original Author: Marco Rovere + +#include +#include +#include +#include // shared_ptr + +#include "DataFormats/ForwardDetId/interface/HGCalDetId.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHit.h" +#include "SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociator.h" +#include "RecoLocalCalo/HGCalRecAlgos/interface/RecHitTools.h" + +namespace edm { + class EDProductGetter; +} + +namespace hgcal { + struct detIdInfoInCluster { + bool operator==(const detIdInfoInCluster &o) const { return clusterId == o.clusterId; }; + long unsigned int clusterId; + float fraction; + detIdInfoInCluster(long unsigned int cId, float fr) { + clusterId = cId; + fraction = fr; + } + }; + + struct detIdInfoInMultiCluster { + bool operator==(const detIdInfoInMultiCluster &o) const { return multiclusterId == o.multiclusterId; }; + unsigned int multiclusterId; + long unsigned int clusterId; + float fraction; + }; + + struct simClusterOnLayer { + unsigned int simClusterId; + float energy = 0; + std::vector> hits_and_fractions; + std::unordered_map> layerClusterIdToEnergyAndScore; + }; + + typedef std::vector>> layerClusterToSimCluster; + typedef std::vector> simClusterToLayerCluster; + typedef std::tuple association; +} // namespace hgcal + +class SimClusterAssociatorByEnergyScoreImpl : public hgcal::LayerClusterToSimClusterAssociatorBaseImpl { +public: + explicit SimClusterAssociatorByEnergyScoreImpl(edm::EDProductGetter const &, + bool, + std::shared_ptr, + const std::unordered_map *); + + hgcal::RecoToSimCollectionWithSimClusters associateRecoToSim( + const edm::Handle &cCH, + const edm::Handle &sCCH) const override; + + hgcal::SimToRecoCollectionWithSimClusters associateSimToReco( + const edm::Handle &cCH, + const edm::Handle &sCCH) const override; + +private: + const bool hardScatterOnly_; + std::shared_ptr recHitTools_; + const std::unordered_map *hitMap_; + unsigned layers_; + edm::EDProductGetter const *productGetter_; + hgcal::association makeConnections(const edm::Handle &cCH, + const edm::Handle &sCCH) const; +}; diff --git a/SimCalorimetry/HGCalAssociatorProducers/plugins/SimClusterAssociatorByEnergyScoreProducer.cc b/SimCalorimetry/HGCalAssociatorProducers/plugins/SimClusterAssociatorByEnergyScoreProducer.cc new file mode 100644 index 0000000000000..bb4a6784da136 --- /dev/null +++ b/SimCalorimetry/HGCalAssociatorProducers/plugins/SimClusterAssociatorByEnergyScoreProducer.cc @@ -0,0 +1,67 @@ +// Original author: Marco Rovere + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/global/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/ESGetToken.h" + +#include "SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociator.h" +#include "SimClusterAssociatorByEnergyScoreImpl.h" + +class SimClusterAssociatorByEnergyScoreProducer : public edm::global::EDProducer<> { +public: + explicit SimClusterAssociatorByEnergyScoreProducer(const edm::ParameterSet &); + ~SimClusterAssociatorByEnergyScoreProducer() override; + + static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); + +private: + void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override; + edm::EDGetTokenT> hitMap_; + edm::ESGetToken caloGeometry_; + const bool hardScatterOnly_; + std::shared_ptr rhtools_; +}; + +SimClusterAssociatorByEnergyScoreProducer::SimClusterAssociatorByEnergyScoreProducer(const edm::ParameterSet &ps) + : hitMap_(consumes>(ps.getParameter("hitMapTag"))), + caloGeometry_(esConsumes()), + hardScatterOnly_(ps.getParameter("hardScatterOnly")) { + rhtools_.reset(new hgcal::RecHitTools()); + + // Register the product + produces(); +} + +SimClusterAssociatorByEnergyScoreProducer::~SimClusterAssociatorByEnergyScoreProducer() {} + +void SimClusterAssociatorByEnergyScoreProducer::produce(edm::StreamID, + edm::Event &iEvent, + const edm::EventSetup &es) const { + edm::ESHandle geom = es.getHandle(caloGeometry_); + rhtools_->setGeometry(*geom); + + const std::unordered_map *hitMap = &iEvent.get(hitMap_); + + auto impl = std::make_unique( + iEvent.productGetter(), hardScatterOnly_, rhtools_, hitMap); + auto toPut = std::make_unique(std::move(impl)); + iEvent.put(std::move(toPut)); +} + +void SimClusterAssociatorByEnergyScoreProducer::fillDescriptions(edm::ConfigurationDescriptions &cfg) { + edm::ParameterSetDescription desc; + desc.add("hitMapTag", edm::InputTag("hgcalRecHitMapProducer")); + desc.add("hardScatterOnly", true); + + cfg.add("simClusterAssociatorByEnergyScore", desc); +} + +//define this as a plug-in +DEFINE_FWK_MODULE(SimClusterAssociatorByEnergyScoreProducer); diff --git a/SimCalorimetry/HGCalAssociatorProducers/python/LCToCPAssociation_cfi.py b/SimCalorimetry/HGCalAssociatorProducers/python/LCToCPAssociation_cfi.py new file mode 100644 index 0000000000000..ca29d5bd8eb10 --- /dev/null +++ b/SimCalorimetry/HGCalAssociatorProducers/python/LCToCPAssociation_cfi.py @@ -0,0 +1,12 @@ +import FWCore.ParameterSet.Config as cms + +layerClusterCaloParticleAssociation = cms.EDProducer("LCToCPAssociatorEDProducer", + associator = cms.InputTag('lcAssocByEnergyScoreProducer'), + label_cp = cms.InputTag("mix","MergedCaloTruth"), + label_lc = cms.InputTag("hgcalLayerClusters") +) + +from Configuration.ProcessModifiers.premix_stage2_cff import premix_stage2 +premix_stage2.toModify(layerClusterCaloParticleAssociation, + label_cp = "mixData:MergedCaloTruth" +) diff --git a/SimCalorimetry/HGCalAssociatorProducers/python/LCToSCAssociation_cfi.py b/SimCalorimetry/HGCalAssociatorProducers/python/LCToSCAssociation_cfi.py new file mode 100644 index 0000000000000..4d2515b0e0191 --- /dev/null +++ b/SimCalorimetry/HGCalAssociatorProducers/python/LCToSCAssociation_cfi.py @@ -0,0 +1,12 @@ +import FWCore.ParameterSet.Config as cms + +layerClusterSimClusterAssociation = cms.EDProducer("LCToSCAssociatorEDProducer", + associator = cms.InputTag('scAssocByEnergyScoreProducer'), + label_scl = cms.InputTag("mix","MergedCaloTruth"), + label_lcl = cms.InputTag("hgcalLayerClusters") +) + +from Configuration.ProcessModifiers.premix_stage2_cff import premix_stage2 +premix_stage2.toModify(layerClusterSimClusterAssociation, + label_scl = "mixData:MergedCaloTruth" +) diff --git a/SimCalorimetry/HGCalSimProducers/BuildFile.xml b/SimCalorimetry/HGCalSimProducers/BuildFile.xml index 7e74720874e7c..6860254dcc3b5 100644 --- a/SimCalorimetry/HGCalSimProducers/BuildFile.xml +++ b/SimCalorimetry/HGCalSimProducers/BuildFile.xml @@ -1,10 +1,7 @@ - - - diff --git a/SimCalorimetry/HGCalSimProducers/interface/HFNoseDigitizer.h b/SimCalorimetry/HGCalSimProducers/interface/HFNoseDigitizer.h deleted file mode 100644 index 36ad5a2f83ffe..0000000000000 --- a/SimCalorimetry/HGCalSimProducers/interface/HFNoseDigitizer.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef SimCalorimetry_HGCSimProducers_hfnosedigitizer -#define SimCalorimetry_HGCSimProducers_hfnosedigitizer - -#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h" -#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" - -class HFNoseDigitizer : public HGCDigitizerBase { -public: - HFNoseDigitizer(const edm::ParameterSet& ps); - void runDigitizer(std::unique_ptr& digiColl, - hgc::HGCSimHitDataAccumulator& simData, - const CaloSubdetectorGeometry* theGeom, - const std::unordered_set& validIds, - uint32_t digitizationType, - CLHEP::HepRandomEngine* engine) override; - ~HFNoseDigitizer() override; - -private: -}; - -#endif diff --git a/SimCalorimetry/HGCalSimProducers/interface/HGCDigitizer.h b/SimCalorimetry/HGCalSimProducers/interface/HGCDigitizer.h index 17cfb663d162f..6ec3ac4191ae3 100644 --- a/SimCalorimetry/HGCalSimProducers/interface/HGCDigitizer.h +++ b/SimCalorimetry/HGCalSimProducers/interface/HGCDigitizer.h @@ -8,10 +8,7 @@ #include "SimDataFormats/CaloHit/interface/PCaloHit.h" #include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" -#include "SimCalorimetry/HGCalSimProducers/interface/HGCEEDigitizer.h" -#include "SimCalorimetry/HGCalSimProducers/interface/HGCHEfrontDigitizer.h" -#include "SimCalorimetry/HGCalSimProducers/interface/HGCHEbackDigitizer.h" -#include "SimCalorimetry/HGCalSimProducers/interface/HFNoseDigitizer.h" +#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h" #include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" #include "DataFormats/HGCDigi/interface/PHGCSimAccumulator.h" #include "FWCore/Framework/interface/ESHandle.h" @@ -58,15 +55,13 @@ class HGCDigitizer { void accumulate(PileUpEventPrincipal const& e, edm::EventSetup const& c, CLHEP::HepRandomEngine* hre); void accumulate_forPreMix(PileUpEventPrincipal const& e, edm::EventSetup const& c, CLHEP::HepRandomEngine* hre); - template void accumulate(edm::Handle const& hits, int bxCrossing, - const GEOM* geom, + const HGCalGeometry* geom, CLHEP::HepRandomEngine* hre); - template void accumulate_forPreMix(edm::Handle const& hits, int bxCrossing, - const GEOM* geom, + const HGCalGeometry* geom, CLHEP::HepRandomEngine* hre); void accumulate_forPreMix(const PHGCSimAccumulator& simAccumulator, const bool minbiasFlag); @@ -76,14 +71,7 @@ class HGCDigitizer { void initializeEvent(edm::Event const& e, edm::EventSetup const& c); void finalizeEvent(edm::Event& e, edm::EventSetup const& c, CLHEP::HepRandomEngine* hre); - /** - */ - bool producesEEDigis() { return ((mySubDet_ == ForwardSubdetector::HGCEE) || (myDet_ == DetId::HGCalEE)); } - bool producesHEfrontDigis() { return ((mySubDet_ == ForwardSubdetector::HGCHEF) || (myDet_ == DetId::HGCalHSi)); } - bool producesHEbackDigis() { return ((mySubDet_ == ForwardSubdetector::HGCHEB) || (myDet_ == DetId::HGCalHSc)); } - bool producesHFNoseDigis() { return ((mySubDet_ == ForwardSubdetector::HFNose) && (myDet_ == DetId::Forward)); } std::string digiCollection() { return digiCollection_; } - int geometryType() { return geometryType_; } /** @short actions at the start/end of run @@ -93,12 +81,8 @@ class HGCDigitizer { private: uint32_t getType() const; - bool getWeight(std::array& tdcForToAOnset, float& keV2fC) const; std::string hitCollection_, digiCollection_; - //geometry type (0 pre-TDR; 1 TDR) - int geometryType_; - //digitization type (it's up to the specializations to decide it's meaning) int digitizationType_; @@ -120,20 +104,12 @@ class HGCDigitizer { //debug position void checkPosition(const HGCalDigiCollection* digis) const; - //digitizers - std::unique_ptr theHGCEEDigitizer_; - std::unique_ptr theHGCHEbackDigitizer_; - std::unique_ptr theHGCHEfrontDigitizer_; - std::unique_ptr theHFNoseDigitizer_; + //digitizer + std::unique_ptr theDigitizer_; //geometries std::unordered_set validIds_; const HGCalGeometry* gHGCal_; - const HcalGeometry* gHcal_; - - //detector and subdetector id - DetId::Detector myDet_; - ForwardSubdetector mySubDet_; //misc switches uint32_t verbosity_; diff --git a/SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h b/SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h index 4118ae9178ec2..1922498a26b31 100644 --- a/SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h +++ b/SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h @@ -28,12 +28,6 @@ namespace hgc = hgc_digi; namespace hgc_digi_utils { using hgc::HGCCellInfo; - inline void addCellMetadata(HGCCellInfo& info, const HcalGeometry* geom, const DetId& detid) { - //base time samples for each DetId, initialized to 0 - info.size = 1.0; - info.thickness = 1.0; - } - inline void addCellMetadata(HGCCellInfo& info, const HGCalGeometry* geom, const DetId& detid) { const auto& dddConst = geom->topology().dddConstants(); bool isHalf = (((dddConst.geomMode() == HGCalGeometryMode::Hexagon) || @@ -57,11 +51,9 @@ namespace hgc_digi_utils { } // namespace hgc_digi_utils -template class HGCDigitizerBase { public: - typedef DFr DigiType; - + typedef HGCalDataFrame DFr; typedef edm::SortedCollection DColl; /** @@ -89,9 +81,11 @@ class HGCDigitizerBase { bool toaModeByEnergy() const { return (myFEelectronics_->toaMode() == HGCFEElectronics::WEIGHTEDBYE); } float tdcOnset() const { return myFEelectronics_->getTDCOnset(); } std::array tdcForToAOnset() const { return myFEelectronics_->getTDCForToAOnset(); } + DetId::Detector det() const { return det_; } + ForwardSubdetector subdet() const { return subdet_; } /** - @short a trivial digitization: sum energies and digitize without noise + @short a trivial digitization: sum energies and digitize */ void runSimple(std::unique_ptr& coll, hgc::HGCSimHitDataAccumulator& simData, @@ -111,11 +105,7 @@ class HGCDigitizerBase { hgc::HGCSimHitDataAccumulator& simData, const CaloSubdetectorGeometry* theGeom, const std::unordered_set& validIds, - uint32_t digitizerType, - CLHEP::HepRandomEngine* engine) { - throw cms::Exception("HGCDigitizerBaseException") << " Failed to find specialization of runDigitizer"; - } - + CLHEP::HepRandomEngine* engine) = 0; /** @short DTOR */ @@ -159,6 +149,17 @@ class HGCDigitizerBase { //if set to true, threshold will be computed based on the expected meap peak/2 bool thresholdFollowsMIP_; + // Identify the detector components, i.e. DetIds, that will be managed by + // this digitizer. This information will be used to fetch the correct + // geometry and the full list of detids for which a digitization is + // requested. + DetId::Detector det_; + + // Identify the subdetector components that will be managed by this + // digitizer. This information will be used to fetch the correct geometry and + // the full list of detids for which a digitization is requested. + ForwardSubdetector subdet_; + // New NoiseArray Parameters const double NoiseMean_, NoiseStd_; diff --git a/SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerPluginFactory.h b/SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerPluginFactory.h new file mode 100644 index 0000000000000..0ab25ebaf4bdd --- /dev/null +++ b/SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerPluginFactory.h @@ -0,0 +1,10 @@ +#ifndef SimCalorimetry_HGCalSimProducers_HGCDigitizerPluginFactory_H +#define SimCalorimetry_HGCalSimProducers_HGCDigitizerPluginFactory_H + +#include "FWCore/PluginManager/interface/PluginFactory.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h" + +typedef edmplugin::PluginFactory HGCDigitizerPluginFactory; + +#endif diff --git a/SimCalorimetry/HGCalSimProducers/interface/HGCEEDigitizer.h b/SimCalorimetry/HGCalSimProducers/interface/HGCEEDigitizer.h deleted file mode 100644 index 539e5ce1c95da..0000000000000 --- a/SimCalorimetry/HGCalSimProducers/interface/HGCEEDigitizer.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef SimCalorimetry_HGCSimProducers_hgceedigitizer -#define SimCalorimetry_HGCSimProducers_hgceedigitizer - -#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h" -#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" - -class HGCEEDigitizer : public HGCDigitizerBase { -public: - HGCEEDigitizer(const edm::ParameterSet& ps); - void runDigitizer(std::unique_ptr& digiColl, - hgc::HGCSimHitDataAccumulator& simData, - const CaloSubdetectorGeometry* theGeom, - const std::unordered_set& validIds, - uint32_t digitizationType, - CLHEP::HepRandomEngine* engine) override; - ~HGCEEDigitizer() override; - -private: -}; - -#endif diff --git a/SimCalorimetry/HGCalSimProducers/interface/HGCHEbackDigitizer.h b/SimCalorimetry/HGCalSimProducers/interface/HGCHEbackDigitizer.h deleted file mode 100644 index 707f06a175575..0000000000000 --- a/SimCalorimetry/HGCalSimProducers/interface/HGCHEbackDigitizer.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef SimCalorimetry_HGCSimProducers_hgchebackdigitizer -#define SimCalorimetry_HGCSimProducers_hgchebackdigitizer - -#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h" -#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" -#include "DataFormats/ForwardDetId/interface/HGCScintillatorDetId.h" -#include "SimCalorimetry/HGCalSimAlgos/interface/HGCalSciNoiseMap.h" - -class HGCHEbackDigitizer : public HGCDigitizerBase { -public: - HGCHEbackDigitizer(const edm::ParameterSet& ps); - void runDigitizer(std::unique_ptr& digiColl, - hgc::HGCSimHitDataAccumulator& simData, - const CaloSubdetectorGeometry* theGeom, - const std::unordered_set& validIds, - uint32_t digitizationType, - CLHEP::HepRandomEngine* engine) override; - ~HGCHEbackDigitizer() override; - -private: - //calice-like digitization parameters - uint32_t algo_; - bool scaleByTileArea_, scaleBySipmArea_, scaleByDose_, thresholdFollowsMIP_; - float keV2MIP_, noise_MIP_; - float nPEperMIP_, nTotalPE_, xTalk_, sdPixels_; - std::string doseMapFile_, sipmMapFile_; - HGCalSciNoiseMap scal_; - - void runEmptyDigitizer(std::unique_ptr& digiColl, - hgc::HGCSimHitDataAccumulator& simData, - const CaloSubdetectorGeometry* theGeom, - const std::unordered_set& validIds, - CLHEP::HepRandomEngine* engine); - - void runRealisticDigitizer(std::unique_ptr& digiColl, - hgc::HGCSimHitDataAccumulator& simData, - const CaloSubdetectorGeometry* theGeom, - const std::unordered_set& validIds, - CLHEP::HepRandomEngine* engine); - - void runCaliceLikeDigitizer(std::unique_ptr& digiColl, - hgc::HGCSimHitDataAccumulator& simData, - const CaloSubdetectorGeometry* theGeom, - const std::unordered_set& validIds, - CLHEP::HepRandomEngine* engine); -}; - -#endif diff --git a/SimCalorimetry/HGCalSimProducers/interface/HGCHEfrontDigitizer.h b/SimCalorimetry/HGCalSimProducers/interface/HGCHEfrontDigitizer.h deleted file mode 100644 index 6206614a4565e..0000000000000 --- a/SimCalorimetry/HGCalSimProducers/interface/HGCHEfrontDigitizer.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef SimCalorimetry_HGCSimProducers_hgchefrontdigitizer -#define SimCalorimetry_HGCSimProducers_hgchefrontdigitizer - -#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h" -#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" - -class HGCHEfrontDigitizer : public HGCDigitizerBase { -public: - HGCHEfrontDigitizer(const edm::ParameterSet& ps); - void runDigitizer(std::unique_ptr& digiColl, - hgc::HGCSimHitDataAccumulator& simData, - const CaloSubdetectorGeometry* theGeom, - const std::unordered_set& validIds, - uint32_t digitizationType, - CLHEP::HepRandomEngine* engine) override; - ~HGCHEfrontDigitizer() override; - -private: -}; - -#endif diff --git a/SimCalorimetry/HGCalSimProducers/plugins/BuildFile.xml b/SimCalorimetry/HGCalSimProducers/plugins/BuildFile.xml index 10210b61c0be2..7c684aac304c7 100644 --- a/SimCalorimetry/HGCalSimProducers/plugins/BuildFile.xml +++ b/SimCalorimetry/HGCalSimProducers/plugins/BuildFile.xml @@ -1,7 +1,9 @@ + + + - diff --git a/SimCalorimetry/HGCalSimProducers/plugins/HFNoseDigitizer.cc b/SimCalorimetry/HGCalSimProducers/plugins/HFNoseDigitizer.cc new file mode 100644 index 0000000000000..0c8b70f0986eb --- /dev/null +++ b/SimCalorimetry/HGCalSimProducers/plugins/HFNoseDigitizer.cc @@ -0,0 +1,35 @@ +#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h" +#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerPluginFactory.h" +#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" + +using namespace hgc_digi; + +class HFNoseDigitizer : public HGCDigitizerBase { +public: + HFNoseDigitizer(const edm::ParameterSet& ps); + void runDigitizer(std::unique_ptr& digiColl, + hgc::HGCSimHitDataAccumulator& simData, + const CaloSubdetectorGeometry* theGeom, + const std::unordered_set& validIds, + CLHEP::HepRandomEngine* engine) override; + ~HFNoseDigitizer() override; + +private: +}; + +HFNoseDigitizer::HFNoseDigitizer(const edm::ParameterSet& ps) : HGCDigitizerBase(ps) { + this->det_ = DetId::Forward; + this->subdet_ = ForwardSubdetector::HFNose; +} + +// +void HFNoseDigitizer::runDigitizer(std::unique_ptr& digiColl, + HGCSimHitDataAccumulator& simData, + const CaloSubdetectorGeometry* theGeom, + const std::unordered_set& validIds, + CLHEP::HepRandomEngine* engine) {} + +// +HFNoseDigitizer::~HFNoseDigitizer() {} + +DEFINE_EDM_PLUGIN(HGCDigitizerPluginFactory, HFNoseDigitizer, "HFNoseDigitizer"); diff --git a/SimCalorimetry/HGCalSimProducers/plugins/HGCDigitizer.cc b/SimCalorimetry/HGCalSimProducers/plugins/HGCDigitizer.cc new file mode 100644 index 0000000000000..4da032651a17e --- /dev/null +++ b/SimCalorimetry/HGCalSimProducers/plugins/HGCDigitizer.cc @@ -0,0 +1,787 @@ +#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizer.h" +#include "DataFormats/ForwardDetId/interface/ForwardSubdetector.h" +#include "DataFormats/ForwardDetId/interface/HFNoseDetId.h" +#include "DataFormats/ForwardDetId/interface/HGCalDetId.h" +#include "SimDataFormats/CaloTest/interface/HGCalTestNumbering.h" +#include "SimGeneral/MixingModule/interface/PileUpEventPrincipal.h" +#include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" +#include "SimDataFormats/CaloHit/interface/PCaloHit.h" +#include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" +#include "SimDataFormats/CrossingFrame/interface/MixCollection.h" +#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerPluginFactory.h" +#include "FWCore/Utilities/interface/RandomNumberGenerator.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "Geometry/HGCalCommonData/interface/HGCalGeometryMode.h" +#include "DataFormats/Math/interface/liblogintpack.h" +#include +#include +#include "FWCore/Utilities/interface/transform.h" + +//#define EDM_ML_DEBUG +using namespace std; +using namespace hgc_digi; + +typedef std::unordered_map>> IdHit_Map; +typedef std::tuple hit_timeStamp; +typedef std::unordered_map> hitRec_container; + +namespace { + + constexpr std::array occupancyGuesses = {{0.5, 0.2, 0.2, 0.8}}; + + float getPositionDistance(const HGCalGeometry* geom, const DetId& id) { return geom->getPosition(id).mag(); } + + int getCellThickness(const HGCalGeometry* geom, const DetId& detid) { + const auto& dddConst = geom->topology().dddConstants(); + return (1 + dddConst.waferType(detid)); + } + + void getValidDetIds(const HGCalGeometry* geom, std::unordered_set& valid) { + const std::vector& ids = geom->getValidDetIds(); + valid.reserve(ids.size()); + valid.insert(ids.begin(), ids.end()); + } + + DetId simToReco(const HGCalGeometry* geom, unsigned simId) { + DetId result(0); + const auto& topo = geom->topology(); + const auto& dddConst = topo.dddConstants(); + + if (dddConst.waferHexagon8() || dddConst.tileTrapezoid()) { + result = DetId(simId); + } else { + int subdet(DetId(simId).subdetId()), layer, cell, sec, subsec, zp; + HGCalTestNumbering::unpackHexagonIndex(simId, subdet, zp, layer, sec, subsec, cell); + //sec is wafer and subsec is celltyp + //skip this hit if after ganging it is not valid + auto recoLayerCell = dddConst.simToReco(cell, layer, sec, topo.detectorType()); + cell = recoLayerCell.first; + layer = recoLayerCell.second; + if (layer < 0 || cell < 0) { + return result; + } else { + //assign the RECO DetId + result = HGCalDetId((ForwardSubdetector)subdet, zp, layer, subsec, sec, cell); + } + } + return result; + } + + void saveSimHitAccumulator_forPreMix(PHGCSimAccumulator& simResult, + const hgc::HGCPUSimHitDataAccumulator& simData, + const std::unordered_set& validIds, + const float minCharge, + const float maxCharge) { + constexpr auto nEnergies = std::tuple_size::value; + static_assert(nEnergies <= PHGCSimAccumulator::SimHitCollection::energyMask + 1, + "PHGCSimAccumulator bit pattern needs to updated"); + static_assert(hgc_digi::nSamples <= PHGCSimAccumulator::SimHitCollection::sampleMask + 1, + "PHGCSimAccumulator bit pattern needs to updated"); + const float minPackChargeLog = minCharge > 0.f ? std::log(minCharge) : -2; + const float maxPackChargeLog = std::log(maxCharge); + constexpr uint16_t base = 1 << PHGCSimAccumulator::SimHitCollection::sampleOffset; + + simResult.reserve(simData.size()); + + for (const auto& id : validIds) { + auto found = simData.find(id); + if (found == simData.end()) + continue; + + const hgc_digi::PUSimHitData& accCharge_across_bxs = found->second.PUhit_info[0]; + const hgc_digi::PUSimHitData& timing_across_bxs = found->second.PUhit_info[1]; + for (size_t iSample = 0; iSample < hgc_digi::nSamples; ++iSample) { + const std::vector& accCharge_inthis_bx = accCharge_across_bxs[iSample]; + const std::vector& timing_inthis_bx = timing_across_bxs[iSample]; + std::vector vc, vt; + size_t nhits = accCharge_inthis_bx.size(); + + for (size_t ihit = 0; ihit < nhits; ++ihit) { + if (accCharge_inthis_bx[ihit] > minCharge) { + unsigned short c = + logintpack::pack16log(accCharge_inthis_bx[ihit], minPackChargeLog, maxPackChargeLog, base); + unsigned short t = logintpack::pack16log(timing_inthis_bx[ihit], minPackChargeLog, maxPackChargeLog, base); + vc.emplace_back(c); + vt.emplace_back(t); + } + } + simResult.emplace_back(id.rawId(), iSample, vc, vt); + } + } + simResult.shrink_to_fit(); + } + + void loadSimHitAccumulator_forPreMix(hgc::HGCSimHitDataAccumulator& simData, + hgc::HGCPUSimHitDataAccumulator& PUSimData, + const HGCalGeometry* geom, + IdHit_Map& hitRefs_bx0, + const PHGCSimAccumulator& simAccumulator, + const float minCharge, + const float maxCharge, + bool setIfZero, + const std::array& tdcForToAOnset, + const bool minbiasFlag, + std::unordered_map& hitOrder_monitor, + const unsigned int thisBx) { + const float minPackChargeLog = minCharge > 0.f ? std::log(minCharge) : -2; + const float maxPackChargeLog = std::log(maxCharge); + constexpr uint16_t base = 1 << PHGCSimAccumulator::SimHitCollection::sampleOffset; + for (const auto& detIdIndexHitInfo : simAccumulator) { + unsigned int detId = detIdIndexHitInfo.detId(); + + auto simIt = simData.emplace(detId, HGCCellInfo()).first; + size_t nhits = detIdIndexHitInfo.nhits(); + + hitOrder_monitor[detId] = false; + if (nhits > 0) { + unsigned short iSample = detIdIndexHitInfo.sampleIndex(); + + const auto& unsigned_charge_array = detIdIndexHitInfo.chargeArray(); + const auto& unsigned_time_array = detIdIndexHitInfo.timeArray(); + + float p_charge, p_time; + unsigned short unsigned_charge, unsigned_time; + + for (size_t ihit = 0; ihit < nhits; ++ihit) { + unsigned_charge = (unsigned_charge_array[ihit] & PHGCSimAccumulator::SimHitCollection::dataMask); + unsigned_time = (unsigned_time_array[ihit] & PHGCSimAccumulator::SimHitCollection::dataMask); + p_time = logintpack::unpack16log(unsigned_time, minPackChargeLog, maxPackChargeLog, base); + p_charge = logintpack::unpack16log(unsigned_charge, minPackChargeLog, maxPackChargeLog, base); + + (simIt->second).hit_info[0][iSample] += p_charge; + if (iSample == (unsigned short)thisBx) { + if (hitRefs_bx0[detId].empty()) { + hitRefs_bx0[detId].emplace_back(p_charge, p_time); + } else { + if (p_time < hitRefs_bx0[detId].back().second) { + auto findPos = std::upper_bound(hitRefs_bx0[detId].begin(), + hitRefs_bx0[detId].end(), + std::make_pair(0.f, p_time), + [](const auto& i, const auto& j) { return i.second < j.second; }); + + auto insertedPos = findPos; + if (findPos == hitRefs_bx0[detId].begin()) { + insertedPos = hitRefs_bx0[detId].emplace(insertedPos, p_charge, p_time); + } else { + auto prevPos = findPos - 1; + if (prevPos->second == p_time) { + prevPos->first = prevPos->first + p_charge; + insertedPos = prevPos; + } else if (prevPos->second < p_time) { + insertedPos = hitRefs_bx0[detId].emplace(findPos, (prevPos)->first + p_charge, p_time); + } + } + + for (auto step = insertedPos; step != hitRefs_bx0[detId].end(); ++step) { + if (step != insertedPos) + step->first += p_charge; + } + + hitOrder_monitor[detId] = true; + + } else if (p_time == hitRefs_bx0[detId].back().second) { + hitRefs_bx0[detId].back().first += p_charge; + } else if (p_time > hitRefs_bx0[detId].back().second) { + hitRefs_bx0[detId].emplace_back(hitRefs_bx0[detId].back().first + p_charge, p_time); + } + } + } + } + } + } + + if (minbiasFlag) { + for (const auto& hitmapIterator : hitRefs_bx0) { + unsigned int detectorId = hitmapIterator.first; + auto simIt = simData.emplace(detectorId, HGCCellInfo()).first; + const bool orderChanged = hitOrder_monitor[detectorId]; + int waferThickness = getCellThickness(geom, detectorId); + float cell_threshold = tdcForToAOnset[waferThickness - 1]; + const auto& hitRec = hitmapIterator.second; + float accChargeForToA(0.f), fireTDC(0.f); + const auto aboveThrPos = std::upper_bound( + hitRec.begin(), hitRec.end(), std::make_pair(cell_threshold, 0.f), [](const auto& i, const auto& j) { + return i.first < j.first; + }); + + if (aboveThrPos == hitRec.end()) { + accChargeForToA = hitRec.back().first; + fireTDC = 0.f; + } else if (hitRec.end() - aboveThrPos > 0 || orderChanged) { + accChargeForToA = aboveThrPos->first; + fireTDC = aboveThrPos->second; + if (aboveThrPos - hitRec.begin() >= 1) { + const auto& belowThrPos = aboveThrPos - 1; + float chargeBeforeThr = belowThrPos->first; + float timeBeforeThr = belowThrPos->second; + float deltaQ = accChargeForToA - chargeBeforeThr; + float deltaTOF = fireTDC - timeBeforeThr; + fireTDC = (cell_threshold - chargeBeforeThr) * deltaTOF / deltaQ + timeBeforeThr; + } + } + (simIt->second).hit_info[1][9] = fireTDC; + } + } + } +} //namespace + +HGCDigitizer::HGCDigitizer(const edm::ParameterSet& ps, edm::ConsumesCollector& iC) + : simHitAccumulator_(new HGCSimHitDataAccumulator()), + pusimHitAccumulator_(new HGCPUSimHitDataAccumulator()), + refSpeed_(0.1 * CLHEP::c_light), //[CLHEP::c_light]=mm/ns convert to cm/ns + averageOccupancies_(occupancyGuesses), + nEvents_(1) { + //configure from cfg + + hitCollection_ = ps.getParameter("hitCollection"); + digiCollection_ = ps.getParameter("digiCollection"); + maxSimHitsAccTime_ = ps.getParameter("maxSimHitsAccTime"); + bxTime_ = ps.getParameter("bxTime"); + digitizationType_ = ps.getParameter("digitizationType"); + verbosity_ = ps.getUntrackedParameter("verbosity", 0); + tofDelay_ = ps.getParameter("tofDelay"); + premixStage1_ = ps.getParameter("premixStage1"); + premixStage1MinCharge_ = ps.getParameter("premixStage1MinCharge"); + premixStage1MaxCharge_ = ps.getParameter("premixStage1MaxCharge"); + std::unordered_set().swap(validIds_); + iC.consumes>(edm::InputTag("g4SimHits", hitCollection_)); + const auto& myCfg_ = ps.getParameter("digiCfg"); + + if (myCfg_.existsAs("chargeCollectionEfficiencies")) { + cce_.clear(); + const auto& temp = myCfg_.getParameter("chargeCollectionEfficiencies") + .getParameter>("values"); + for (double cce : temp) { + cce_.emplace_back(cce); + } + } else { + std::vector().swap(cce_); + } + + auto const& pluginName = ps.getParameter("digitizer"); + theDigitizer_ = HGCDigitizerPluginFactory::get()->create(pluginName, ps); +} + +// +void HGCDigitizer::initializeEvent(edm::Event const& e, edm::EventSetup const& es) { + // reserve memory for a full detector + unsigned idx = getType(); + simHitAccumulator_->reserve(averageOccupancies_[idx] * validIds_.size()); + pusimHitAccumulator_->reserve(averageOccupancies_[idx] * validIds_.size()); +} + +// +void HGCDigitizer::finalizeEvent(edm::Event& e, edm::EventSetup const& es, CLHEP::HepRandomEngine* hre) { + hitRefs_bx0.clear(); + PhitRefs_bx0.clear(); + hitOrder_monitor.clear(); + + const CaloSubdetectorGeometry* theGeom = static_cast(gHGCal_); + + ++nEvents_; + + unsigned idx = getType(); + // release memory for unfilled parts of hash table + if (validIds_.size() * averageOccupancies_[idx] > simHitAccumulator_->size()) { + simHitAccumulator_->reserve(simHitAccumulator_->size()); + pusimHitAccumulator_->reserve(simHitAccumulator_->size()); + } + //update occupancy guess + const double thisOcc = simHitAccumulator_->size() / ((double)validIds_.size()); + averageOccupancies_[idx] = (averageOccupancies_[idx] * (nEvents_ - 1) + thisOcc) / nEvents_; + + if (premixStage1_) { + auto simRecord = std::make_unique(); + + if (!pusimHitAccumulator_->empty()) { + saveSimHitAccumulator_forPreMix( + *simRecord, *pusimHitAccumulator_, validIds_, premixStage1MinCharge_, premixStage1MaxCharge_); + } + + e.put(std::move(simRecord), digiCollection()); + + } else { + auto digiResult = std::make_unique(); + theDigitizer_->run(digiResult, *simHitAccumulator_, theGeom, validIds_, digitizationType_, hre); + edm::LogVerbatim("HGCDigitizer") << "HGCDigitizer:: finalize event - produced " << digiResult->size() + << " hits in det/subdet " << theDigitizer_->det() << "/" + << theDigitizer_->subdet(); +#ifdef EDM_ML_DEBUG + checkPosition(&(*digiResult)); +#endif + e.put(std::move(digiResult), digiCollection()); + } + + hgc::HGCSimHitDataAccumulator().swap(*simHitAccumulator_); + hgc::HGCPUSimHitDataAccumulator().swap(*pusimHitAccumulator_); +} +void HGCDigitizer::accumulate_forPreMix(edm::Event const& e, + edm::EventSetup const& eventSetup, + CLHEP::HepRandomEngine* hre) { + //get inputs + + edm::Handle hits; + e.getByLabel(edm::InputTag("g4SimHits", hitCollection_), hits); + if (!hits.isValid()) { + edm::LogError("HGCDigitizer") << " @ accumulate_minbias : can't find " << hitCollection_ + << " collection of g4SimHits"; + return; + } + + //accumulate in-time the main event + if (nullptr != gHGCal_) { + accumulate_forPreMix(hits, 0, gHGCal_, hre); + } else { + throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!"; + } +} + +// +void HGCDigitizer::accumulate(edm::Event const& e, edm::EventSetup const& eventSetup, CLHEP::HepRandomEngine* hre) { + //get inputs + edm::Handle hits; + e.getByLabel(edm::InputTag("g4SimHits", hitCollection_), hits); + if (!hits.isValid()) { + edm::LogError("HGCDigitizer") << " @ accumulate : can't find " << hitCollection_ << " collection of g4SimHits"; + return; + } + + //accumulate in-time the main event + if (nullptr != gHGCal_) { + accumulate(hits, 0, gHGCal_, hre); + } else { + throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!"; + } +} + +// +void HGCDigitizer::accumulate_forPreMix(PileUpEventPrincipal const& e, + edm::EventSetup const& eventSetup, + CLHEP::HepRandomEngine* hre) { + edm::Handle hits; + e.getByLabel(edm::InputTag("g4SimHits", hitCollection_), hits); + + if (!hits.isValid()) { + edm::LogError("HGCDigitizer") << " @ accumulate : can't find " << hitCollection_ << " collection of g4SimHits"; + return; + } + + if (nullptr != gHGCal_) { + accumulate_forPreMix(hits, e.bunchCrossing(), gHGCal_, hre); + } else { + throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!"; + } +} + +// +void HGCDigitizer::accumulate(PileUpEventPrincipal const& e, + edm::EventSetup const& eventSetup, + CLHEP::HepRandomEngine* hre) { + //get inputs + edm::Handle hits; + e.getByLabel(edm::InputTag("g4SimHits", hitCollection_), hits); + + if (!hits.isValid()) { + edm::LogError("HGCDigitizer") << " @ accumulate : can't find " << hitCollection_ << " collection of g4SimHits"; + return; + } + + //accumulate for the simulated bunch crossing + if (nullptr != gHGCal_) { + accumulate(hits, e.bunchCrossing(), gHGCal_, hre); + } else { + throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!"; + } +} + +// +void HGCDigitizer::accumulate_forPreMix(edm::Handle const& hits, + int bxCrossing, + const HGCalGeometry* geom, + CLHEP::HepRandomEngine* hre) { + if (nullptr == geom) + return; + + auto keV2fC = theDigitizer_->keV2fC(); + auto tdcForToAOnset = theDigitizer_->tdcForToAOnset(); + + int nchits = (int)hits->size(); + int count_thisbx = 0; + std::vector hitRefs; + hitRefs.reserve(nchits); + for (int i = 0; i < nchits; ++i) { + const auto& the_hit = hits->at(i); + DetId id = simToReco(geom, the_hit.id()); + // to be written the verbosity block + if (id.rawId() != 0) { + hitRefs.emplace_back(i, id.rawId(), (float)the_hit.time()); + } + } + std::sort(hitRefs.begin(), hitRefs.end(), this->orderByDetIdThenTime); + + nchits = hitRefs.size(); + for (int i = 0; i < nchits; ++i) { + const int hitidx = std::get<0>(hitRefs[i]); + const uint32_t id = std::get<1>(hitRefs[i]); + if (!validIds_.count(id)) + continue; + + if (id == 0) + continue; + + const float toa = std::get<2>(hitRefs[i]); + const PCaloHit& hit = hits->at(hitidx); + const float charge = hit.energy() * 1e6 * keV2fC; // * getCCE(geom, id, cce_); + + const float dist2center(getPositionDistance(geom, id)); + const float tof = toa - dist2center / refSpeed_ + tofDelay_; + const int itime = std::floor(tof / bxTime_) + 9; + + if (itime < 0 || itime > (int)maxBx_) + continue; + + if (itime >= (int)(maxBx_ + 1)) + continue; + + int waferThickness = getCellThickness(geom, id); + if (itime == (int)thisBx_) { + ++count_thisbx; + if (PhitRefs_bx0[id].empty()) { + PhitRefs_bx0[id].emplace_back(charge, charge, tof); + } else if (tof > std::get<2>(PhitRefs_bx0[id].back())) { + PhitRefs_bx0[id].emplace_back(charge, charge + std::get<1>(PhitRefs_bx0[id].back()), tof); + } else if (tof == std::get<2>(PhitRefs_bx0[id].back())) { + std::get<0>(PhitRefs_bx0[id].back()) += charge; + std::get<1>(PhitRefs_bx0[id].back()) += charge; + } else { + //find position to insert new entry preserving time sorting + auto findPos = std::upper_bound(PhitRefs_bx0[id].begin(), + PhitRefs_bx0[id].end(), + hit_timeStamp(charge, 0.f, tof), + [](const auto& i, const auto& j) { return std::get<2>(i) <= std::get<2>(j); }); + + auto insertedPos = findPos; + + if (tof == std::get<2>(*(findPos - 1))) { + std::get<0>(*(findPos - 1)) += charge; + std::get<1>(*(findPos - 1)) += charge; + + } else { + insertedPos = PhitRefs_bx0[id].insert(findPos, + (findPos == PhitRefs_bx0[id].begin()) + ? hit_timeStamp(charge, charge, tof) + : hit_timeStamp(charge, charge + std::get<1>(*(findPos - 1)), tof)); + } + //cumulate the charge of new entry for all elements that follow in the sorted list + //and resize list accounting for cases when the inserted element itself crosses the threshold + + for (auto step = insertedPos; step != PhitRefs_bx0[id].end(); ++step) { + if (step != insertedPos) + std::get<1>(*(step)) += charge; + + // resize the list stopping with the first timeStamp with cumulative charge above threshold + if (std::get<1>(*step) > tdcForToAOnset[waferThickness - 1] && + std::get<2>(*step) != std::get<2>(PhitRefs_bx0[id].back())) { + PhitRefs_bx0[id].resize( + std::upper_bound(PhitRefs_bx0[id].begin(), + PhitRefs_bx0[id].end(), + hit_timeStamp(charge, 0.f, std::get<2>(*step)), + [](const auto& i, const auto& j) { return std::get<2>(i) < std::get<2>(j); }) - + PhitRefs_bx0[id].begin()); + for (auto stepEnd = step + 1; stepEnd != PhitRefs_bx0[id].end(); ++stepEnd) + std::get<1>(*stepEnd) += charge; + break; + } + } + } + } + } + + for (const auto& hitCollection : PhitRefs_bx0) { + const uint32_t detectorId = hitCollection.first; + auto simHitIt = pusimHitAccumulator_->emplace(detectorId, HGCCellHitInfo()).first; + + for (const auto& hit_timestamp : PhitRefs_bx0[detectorId]) { + (simHitIt->second).PUhit_info[1][thisBx_].push_back(std::get<2>(hit_timestamp)); + (simHitIt->second).PUhit_info[0][thisBx_].push_back(std::get<0>(hit_timestamp)); + } + } + + if (nchits == 0) { + HGCPUSimHitDataAccumulator::iterator simHitIt = pusimHitAccumulator_->emplace(0, HGCCellHitInfo()).first; + (simHitIt->second).PUhit_info[1][9].push_back(0.0); + (simHitIt->second).PUhit_info[0][9].push_back(0.0); + } + hitRefs.clear(); + PhitRefs_bx0.clear(); +} + +// +void HGCDigitizer::accumulate(edm::Handle const& hits, + int bxCrossing, + const HGCalGeometry* geom, + CLHEP::HepRandomEngine* hre) { + if (nullptr == geom) + return; + + //configuration to apply for the computation of time-of-flight + auto weightToAbyEnergy = theDigitizer_->toaModeByEnergy(); + auto tdcForToAOnset = theDigitizer_->tdcForToAOnset(); + auto keV2fC = theDigitizer_->keV2fC(); + + //create list of tuples (pos in container, RECO DetId, time) to be sorted first + int nchits = (int)hits->size(); + + std::vector hitRefs; + hitRefs.reserve(nchits); + for (int i = 0; i < nchits; ++i) { + const auto& the_hit = hits->at(i); + DetId id = simToReco(geom, the_hit.id()); + + if (verbosity_ > 0) { + edm::LogVerbatim("HGCDigitizer") << "HGCDigitizer::i/p " << std::hex << the_hit.id() << " o/p " << id.rawId() + << std::dec; + } + + if (0 != id.rawId()) { + hitRefs.emplace_back(i, id.rawId(), (float)the_hit.time()); + } + } + + std::sort(hitRefs.begin(), hitRefs.end(), this->orderByDetIdThenTime); + //loop over sorted hits + nchits = hitRefs.size(); + for (int i = 0; i < nchits; ++i) { + const int hitidx = std::get<0>(hitRefs[i]); + const uint32_t id = std::get<1>(hitRefs[i]); + + //get the data for this cell, if not available then we skip it + + if (!validIds_.count(id)) + continue; + HGCSimHitDataAccumulator::iterator simHitIt = simHitAccumulator_->emplace(id, HGCCellInfo()).first; + + if (id == 0) + continue; // to be ignored at RECO level + + const float toa = std::get<2>(hitRefs[i]); + const PCaloHit& hit = hits->at(hitidx); + const float charge = hit.energy() * 1e6 * keV2fC; + + //distance to the center of the detector + const float dist2center(getPositionDistance(geom, id)); + + //hit time: [time()]=ns [centerDist]=cm [refSpeed_]=cm/ns + delay by 1ns + //accumulate in 15 buckets of 25ns (9 pre-samples, 1 in-time, 5 post-samples) + const float tof = toa - dist2center / refSpeed_ + tofDelay_; + const int itime = std::floor(tof / bxTime_) + 9; + + //no need to add bx crossing - tof comes already corrected from the mixing module + //itime += bxCrossing; + //itime += 9; + + if (itime < 0 || itime > (int)maxBx_) + continue; + + //check if time index is ok and store energy + if (itime >= (int)simHitIt->second.hit_info[0].size()) + continue; + + (simHitIt->second).hit_info[0][itime] += charge; + + //for time-of-arrival: save the time-sorted list of timestamps with cumulative charge just above threshold + //working version with pileup only for in-time hits + int waferThickness = getCellThickness(geom, id); + bool orderChanged = false; + if (itime == (int)thisBx_) { + //if start empty => just add charge and time + if (hitRefs_bx0[id].empty()) { + hitRefs_bx0[id].emplace_back(charge, tof); + + } else if (tof <= hitRefs_bx0[id].back().second) { + //find position to insert new entry preserving time sorting + std::vector>::iterator findPos = + std::upper_bound(hitRefs_bx0[id].begin(), + hitRefs_bx0[id].end(), + std::pair(0.f, tof), + [](const auto& i, const auto& j) { return i.second <= j.second; }); + + std::vector>::iterator insertedPos = findPos; + if (findPos->second == tof) { + //just merge timestamps with exact timing + findPos->first += charge; + } else { + //insert new element cumulating the charge + insertedPos = hitRefs_bx0[id].insert(findPos, + (findPos == hitRefs_bx0[id].begin()) + ? std::pair(charge, tof) + : std::pair((findPos - 1)->first + charge, tof)); + } + + //cumulate the charge of new entry for all elements that follow in the sorted list + //and resize list accounting for cases when the inserted element itself crosses the threshold + for (std::vector>::iterator step = insertedPos; step != hitRefs_bx0[id].end(); ++step) { + if (step != insertedPos) + step->first += charge; + // resize the list stopping with the first timeStamp with cumulative charge above threshold + if (step->first > tdcForToAOnset[waferThickness - 1] && step->second != hitRefs_bx0[id].back().second) { + hitRefs_bx0[id].resize(std::upper_bound(hitRefs_bx0[id].begin(), + hitRefs_bx0[id].end(), + std::pair(0.f, step->second), + [](const auto& i, const auto& j) { return i.second < j.second; }) - + hitRefs_bx0[id].begin()); + for (auto stepEnd = step + 1; stepEnd != hitRefs_bx0[id].end(); ++stepEnd) + stepEnd->first += charge; + break; + } + } + + orderChanged = true; + } else { + //add new entry at the end of the list + if (hitRefs_bx0[id].back().first <= tdcForToAOnset[waferThickness - 1]) { + hitRefs_bx0[id].emplace_back(hitRefs_bx0[id].back().first + charge, tof); + } + } + } + float accChargeForToA = hitRefs_bx0[id].empty() ? 0.f : hitRefs_bx0[id].back().first; + //now compute the firing ToA through the interpolation of the consecutive time-stamps at threshold + if (weightToAbyEnergy) + (simHitIt->second).hit_info[1][itime] += charge * tof; + else if (accChargeForToA > tdcForToAOnset[waferThickness - 1] && + ((simHitIt->second).hit_info[1][itime] == 0 || orderChanged == true)) { + float fireTDC = hitRefs_bx0[id].back().second; + if (hitRefs_bx0[id].size() > 1) { + float chargeBeforeThr = (hitRefs_bx0[id].end() - 2)->first; + float tofchargeBeforeThr = (hitRefs_bx0[id].end() - 2)->second; + + float deltaQ = accChargeForToA - chargeBeforeThr; + float deltaTOF = fireTDC - tofchargeBeforeThr; + fireTDC = (tdcForToAOnset[waferThickness - 1] - chargeBeforeThr) * deltaTOF / deltaQ + tofchargeBeforeThr; + } + (simHitIt->second).hit_info[1][itime] = fireTDC; + } + } + hitRefs.clear(); +} +void HGCDigitizer::accumulate_forPreMix(const PHGCSimAccumulator& simAccumulator, const bool minbiasFlag) { + //configuration to apply for the computation of time-of-flight + auto weightToAbyEnergy = theDigitizer_->toaModeByEnergy(); + auto tdcForToAOnset = theDigitizer_->tdcForToAOnset(); + + if (nullptr != gHGCal_) { + loadSimHitAccumulator_forPreMix(*simHitAccumulator_, + *pusimHitAccumulator_, + gHGCal_, + hitRefs_bx0, + simAccumulator, + premixStage1MinCharge_, + premixStage1MaxCharge_, + !weightToAbyEnergy, + tdcForToAOnset, + minbiasFlag, + hitOrder_monitor, + thisBx_); + } +} + +// +void HGCDigitizer::beginRun(const edm::EventSetup& es) { + //get geometry + edm::ESHandle geom; + es.get().get(geom); + + gHGCal_ = nullptr; + + gHGCal_ = + dynamic_cast(geom->getSubdetectorGeometry(theDigitizer_->det(), theDigitizer_->subdet())); + + int nadded(0); + //valid ID lists + if (nullptr != gHGCal_) { + getValidDetIds(gHGCal_, validIds_); + } else { + throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!"; + } + + if (verbosity_ > 0) + edm::LogInfo("HGCDigitizer") << "Added " << nadded << ":" << validIds_.size() << " detIds without " + << hitCollection_ << " in first event processed" << std::endl; +} + +// +void HGCDigitizer::endRun() { std::unordered_set().swap(validIds_); } + +// +void HGCDigitizer::resetSimHitDataAccumulator() { + for (HGCSimHitDataAccumulator::iterator it = simHitAccumulator_->begin(); it != simHitAccumulator_->end(); it++) { + it->second.hit_info[0].fill(0.); + it->second.hit_info[1].fill(0.); + } +} + +uint32_t HGCDigitizer::getType() const { + uint32_t idx = std::numeric_limits::max(); + switch (theDigitizer_->det()) { + case DetId::HGCalEE: + idx = 0; + break; + case DetId::HGCalHSi: + idx = 1; + break; + case DetId::HGCalHSc: + idx = 2; + break; + case DetId::Forward: + idx = 3; + break; + default: + break; + } + return idx; +} + +void HGCDigitizer::checkPosition(const HGCalDigiCollection* digis) const { + const double tol(0.5); + if (nullptr != gHGCal_) { + for (const auto& digi : *(digis)) { + const DetId& id = digi.id(); + const GlobalPoint& global = gHGCal_->getPosition(id); + double r = global.perp(); + double z = std::abs(global.z()); + std::pair zrange = gHGCal_->topology().dddConstants().rangeZ(true); + std::pair rrange = gHGCal_->topology().dddConstants().rangeR(z, true); + bool ok = ((r >= rrange.first) && (r <= rrange.second) && (z >= zrange.first) && (z <= zrange.second)); + std::string ck = (((r < rrange.first - tol) || (r > rrange.second + tol) || (z < zrange.first - tol) || + (z > zrange.second + tol)) + ? "***** ERROR *****" + : ""); + bool val = gHGCal_->topology().valid(id); + if ((!ok) || (!val)) { + if (id.det() == DetId::HGCalEE || id.det() == DetId::HGCalHSi) { + edm::LogVerbatim("HGCDigitizer") << "Check " << HGCSiliconDetId(id) << " " << global << " R " << r << ":" + << rrange.first << ":" << rrange.second << " Z " << z << ":" << zrange.first + << ":" << zrange.second << " Flag " << ok << ":" << val << " " << ck; + } else if (id.det() == DetId::HGCalHSc) { + edm::LogVerbatim("HGCDigitizer") << "Check " << HGCScintillatorDetId(id) << " " << global << " R " << r << ":" + << rrange.first << ":" << rrange.second << " Z " << z << ":" << zrange.first + << ":" << zrange.second << " Flag " << ok << ":" << val << " " << ck; + } else if ((id.det() == DetId::Forward) && (id.subdetId() == static_cast(HFNose))) { + edm::LogVerbatim("HGCDigitizer") << "Check " << HFNoseDetId(id) << " " << global << " R " << r << ":" + << rrange.first << ":" << rrange.second << " Z " << z << ":" << zrange.first + << ":" << zrange.second << " Flag " << ok << ":" << val << " " << ck; + } else { + edm::LogVerbatim("HGCDigitizer") + << "Check " << std::hex << id.rawId() << std::dec << " " << id.det() << ":" << id.subdetId() << " " + << global << " R " << r << ":" << rrange.first << ":" << rrange.second << " Z " << z << ":" + << zrange.first << ":" << zrange.second << " Flag " << ok << ":" << val << " " << ck; + } + } + } + } +} diff --git a/SimCalorimetry/HGCalSimProducers/src/HGCDigitizerBase.cc b/SimCalorimetry/HGCalSimProducers/plugins/HGCDigitizerBase.cc similarity index 82% rename from SimCalorimetry/HGCalSimProducers/src/HGCDigitizerBase.cc rename to SimCalorimetry/HGCalSimProducers/plugins/HGCDigitizerBase.cc index 7c4955ebf4ecb..718ce88ffb313 100644 --- a/SimCalorimetry/HGCalSimProducers/src/HGCDigitizerBase.cc +++ b/SimCalorimetry/HGCalSimProducers/plugins/HGCDigitizerBase.cc @@ -1,13 +1,17 @@ +#include + #include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h" #include "Geometry/HGCalGeometry/interface/HGCalGeometry.h" -#include "Geometry/HcalTowerAlgo/interface/HcalGeometry.h" using namespace hgc_digi; using namespace hgc_digi_utils; -template -HGCDigitizerBase::HGCDigitizerBase(const edm::ParameterSet& ps) - : scaleByDose_(false), NoiseMean_(0.0), NoiseStd_(1.0) { +HGCDigitizerBase::HGCDigitizerBase(const edm::ParameterSet& ps) + : scaleByDose_(false), + det_(DetId::Forward), + subdet_(ForwardSubdetector::ForwardEmpty), + NoiseMean_(0.0), + NoiseStd_(1.0) { bxTime_ = ps.getParameter("bxTime"); myCfg_ = ps.getParameter("digiCfg"); NoiseGeneration_Method_ = ps.getParameter("NoiseGeneration_Method"); @@ -63,7 +67,7 @@ HGCDigitizerBase::HGCDigitizerBase(const edm::ParameterSet& ps) } edm::ParameterSet feCfg = myCfg_.getParameter("feCfg"); - myFEelectronics_ = std::unique_ptr>(new HGCFEElectronics(feCfg)); + myFEelectronics_ = std::make_unique>(feCfg); myFEelectronics_->SetNoiseValues(noise_fC_); //override the "default ADC pulse" with the one with which was configured the FE electronics class @@ -73,10 +77,9 @@ HGCDigitizerBase::HGCDigitizerBase(const edm::ParameterSet& ps) RandNoiseGenerationFlag_ = false; } -template -void HGCDigitizerBase::GenerateGaussianNoise(CLHEP::HepRandomEngine* engine, - const double NoiseMean, - const double NoiseStd) { +void HGCDigitizerBase::GenerateGaussianNoise(CLHEP::HepRandomEngine* engine, + const double NoiseMean, + const double NoiseStd) { for (size_t i = 0; i < NoiseArrayLength_; i++) { for (size_t j = 0; j < samplesize_; j++) { GaussianNoiseArray_[i][j] = CLHEP::RandGaussQ::shoot(engine, NoiseMean, NoiseStd); @@ -84,13 +87,12 @@ void HGCDigitizerBase::GenerateGaussianNoise(CLHEP::HepRandomEngine* engine } } -template -void HGCDigitizerBase::run(std::unique_ptr& digiColl, - HGCSimHitDataAccumulator& simData, - const CaloSubdetectorGeometry* theGeom, - const std::unordered_set& validIds, - uint32_t digitizationType, - CLHEP::HepRandomEngine* engine) { +void HGCDigitizerBase::run(std::unique_ptr& digiColl, + HGCSimHitDataAccumulator& simData, + const CaloSubdetectorGeometry* theGeom, + const std::unordered_set& validIds, + uint32_t digitizationType, + CLHEP::HepRandomEngine* engine) { if (scaleByDose_) { scal_.setGeometry(theGeom, HGCalSiNoiseMap::AUTO, myFEelectronics_->getTargetMipValue()); scalHFNose_.setGeometry(theGeom, HGCalSiNoiseMap::AUTO, myFEelectronics_->getTargetMipValue()); @@ -104,15 +106,14 @@ void HGCDigitizerBase::run(std::unique_ptr& digiCo if (digitizationType == 0) runSimple(digiColl, simData, theGeom, validIds, engine); else - runDigitizer(digiColl, simData, theGeom, validIds, digitizationType, engine); + runDigitizer(digiColl, simData, theGeom, validIds, engine); } -template -void HGCDigitizerBase::runSimple(std::unique_ptr& coll, - HGCSimHitDataAccumulator& simData, - const CaloSubdetectorGeometry* theGeom, - const std::unordered_set& validIds, - CLHEP::HepRandomEngine* engine) { +void HGCDigitizerBase::runSimple(std::unique_ptr& coll, + HGCSimHitDataAccumulator& simData, + const CaloSubdetectorGeometry* theGeom, + const std::unordered_set& validIds, + CLHEP::HepRandomEngine* engine) { HGCSimHitData chargeColl, toa; // this represents a cell with no signal charge @@ -211,8 +212,7 @@ void HGCDigitizerBase::runSimple(std::unique_ptr& } } -template -void HGCDigitizerBase::updateOutput(std::unique_ptr& coll, const DFr& rawDataFrame) { +void HGCDigitizerBase::updateOutput(std::unique_ptr& coll, const DFr& rawDataFrame) { // 9th is the sample of hte intime amplitudes int itIdx(9); if (rawDataFrame.size() <= itIdx + 2) @@ -233,9 +233,3 @@ void HGCDigitizerBase::updateOutput(std::unique_ptrpush_back(dataFrame); } - -// cause the compiler to generate the appropriate code -#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" -template class HGCDigitizerBase; -template class HGCDigitizerBase; -template class HGCDigitizerBase; diff --git a/SimCalorimetry/HGCalSimProducers/plugins/HGCDigitizerPluginFactory.cc b/SimCalorimetry/HGCalSimProducers/plugins/HGCDigitizerPluginFactory.cc new file mode 100644 index 0000000000000..3691cfef07738 --- /dev/null +++ b/SimCalorimetry/HGCalSimProducers/plugins/HGCDigitizerPluginFactory.cc @@ -0,0 +1,3 @@ +#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerPluginFactory.h" + +EDM_REGISTER_PLUGINFACTORY(HGCDigitizerPluginFactory, "HGCDigitizerPluginFactory"); diff --git a/SimCalorimetry/HGCalSimProducers/plugins/HGCEEDigitizer.cc b/SimCalorimetry/HGCalSimProducers/plugins/HGCEEDigitizer.cc new file mode 100644 index 0000000000000..a787996d39a01 --- /dev/null +++ b/SimCalorimetry/HGCalSimProducers/plugins/HGCEEDigitizer.cc @@ -0,0 +1,34 @@ +#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h" +#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" +#include "FWCore/PluginManager/interface/PluginFactory.h" +#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerPluginFactory.h" + +class HGCEEDigitizer : public HGCDigitizerBase { +public: + HGCEEDigitizer(const edm::ParameterSet& ps); + void runDigitizer(std::unique_ptr& digiColl, + hgc::HGCSimHitDataAccumulator& simData, + const CaloSubdetectorGeometry* theGeom, + const std::unordered_set& validIds, + CLHEP::HepRandomEngine* engine) override; + ~HGCEEDigitizer() override; + +private: +}; + +using namespace hgc_digi; + +// +HGCEEDigitizer::HGCEEDigitizer(const edm::ParameterSet& ps) : HGCDigitizerBase(ps) { this->det_ = DetId::HGCalEE; } + +// +void HGCEEDigitizer::runDigitizer(std::unique_ptr& digiColl, + HGCSimHitDataAccumulator& simData, + const CaloSubdetectorGeometry* theGeom, + const std::unordered_set& validIds, + CLHEP::HepRandomEngine* engine) {} + +// +HGCEEDigitizer::~HGCEEDigitizer() {} + +DEFINE_EDM_PLUGIN(HGCDigitizerPluginFactory, HGCEEDigitizer, "HGCEEDigitizer"); diff --git a/SimCalorimetry/HGCalSimProducers/src/HGCHEbackDigitizer.cc b/SimCalorimetry/HGCalSimProducers/plugins/HGCHEbackDigitizer.cc similarity index 83% rename from SimCalorimetry/HGCalSimProducers/src/HGCHEbackDigitizer.cc rename to SimCalorimetry/HGCalSimProducers/plugins/HGCHEbackDigitizer.cc index f6c7186bf39b6..2fde4d03427f4 100644 --- a/SimCalorimetry/HGCalSimProducers/src/HGCHEbackDigitizer.cc +++ b/SimCalorimetry/HGCalSimProducers/plugins/HGCHEbackDigitizer.cc @@ -1,17 +1,55 @@ -#include "SimCalorimetry/HGCalSimProducers/interface/HGCHEbackDigitizer.h" +#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h" +#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" +#include "DataFormats/ForwardDetId/interface/HGCScintillatorDetId.h" +#include "SimCalorimetry/HGCalSimAlgos/interface/HGCalSciNoiseMap.h" +#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h" +#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerPluginFactory.h" #include "CLHEP/Random/RandPoissonQ.h" #include "CLHEP/Random/RandGaussQ.h" - -#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h" -#include "Geometry/HcalTowerAlgo/interface/HcalGeometry.h" - #include "vdt/vdtMath.h" using namespace hgc_digi; using namespace hgc_digi_utils; -// +class HGCHEbackDigitizer : public HGCDigitizerBase { +public: + HGCHEbackDigitizer(const edm::ParameterSet& ps); + void runDigitizer(std::unique_ptr& digiColl, + hgc::HGCSimHitDataAccumulator& simData, + const CaloSubdetectorGeometry* theGeom, + const std::unordered_set& validIds, + CLHEP::HepRandomEngine* engine) override; + ~HGCHEbackDigitizer() override; + +private: + //calice-like digitization parameters + uint32_t algo_; + bool scaleByTileArea_, scaleBySipmArea_, scaleByDose_, thresholdFollowsMIP_; + float keV2MIP_, noise_MIP_; + float nPEperMIP_, nTotalPE_, xTalk_, sdPixels_; + std::string doseMapFile_, sipmMapFile_; + HGCalSciNoiseMap scal_; + + void runEmptyDigitizer(std::unique_ptr& digiColl, + hgc::HGCSimHitDataAccumulator& simData, + const CaloSubdetectorGeometry* theGeom, + const std::unordered_set& validIds, + CLHEP::HepRandomEngine* engine); + + void runRealisticDigitizer(std::unique_ptr& digiColl, + hgc::HGCSimHitDataAccumulator& simData, + const CaloSubdetectorGeometry* theGeom, + const std::unordered_set& validIds, + CLHEP::HepRandomEngine* engine); + + void runCaliceLikeDigitizer(std::unique_ptr& digiColl, + hgc::HGCSimHitDataAccumulator& simData, + const CaloSubdetectorGeometry* theGeom, + const std::unordered_set& validIds, + CLHEP::HepRandomEngine* engine); +}; + HGCHEbackDigitizer::HGCHEbackDigitizer(const edm::ParameterSet& ps) : HGCDigitizerBase(ps) { edm::ParameterSet cfg = ps.getParameter("digiCfg"); algo_ = cfg.getParameter("algo"); @@ -26,6 +64,7 @@ HGCHEbackDigitizer::HGCHEbackDigitizer(const edm::ParameterSet& ps) : HGCDigitiz thresholdFollowsMIP_ = cfg.getParameter("thresholdFollowsMIP"); keV2MIP_ = cfg.getParameter("keV2MIP"); this->keV2fC_ = 1.0; //keV2MIP_; // hack for HEB + this->det_ = DetId::HGCalHSc; nPEperMIP_ = cfg.getParameter("nPEperMIP"); nTotalPE_ = cfg.getParameter("nTotalPE"); xTalk_ = cfg.getParameter("xTalk"); @@ -41,7 +80,6 @@ void HGCHEbackDigitizer::runDigitizer(std::unique_ptr& digi HGCSimHitDataAccumulator& simData, const CaloSubdetectorGeometry* theGeom, const std::unordered_set& validIds, - uint32_t digitizationType, CLHEP::HepRandomEngine* engine) { if (algo_ == 0) runEmptyDigitizer(digiColl, simData, theGeom, validIds, engine); @@ -268,3 +306,5 @@ void HGCHEbackDigitizer::runCaliceLikeDigitizer(std::unique_ptr& digiColl, + hgc::HGCSimHitDataAccumulator& simData, + const CaloSubdetectorGeometry* theGeom, + const std::unordered_set& validIds, + CLHEP::HepRandomEngine* engine) override; + ~HGCHEfrontDigitizer() override; + +private: +}; + +HGCHEfrontDigitizer::HGCHEfrontDigitizer(const edm::ParameterSet& ps) : HGCDigitizerBase(ps) { + this->det_ = DetId::HGCalHSi; +} + +// +void HGCHEfrontDigitizer::runDigitizer(std::unique_ptr& digiColl, + HGCSimHitDataAccumulator& simData, + const CaloSubdetectorGeometry* theGeom, + const std::unordered_set& validIds, + CLHEP::HepRandomEngine* engine) {} + +// +HGCHEfrontDigitizer::~HGCHEfrontDigitizer() {} +DEFINE_EDM_PLUGIN(HGCDigitizerPluginFactory, HGCHEfrontDigitizer, "HGCHEfrontDigitizer"); diff --git a/SimCalorimetry/HGCalSimProducers/python/hgcHitAssociation_cfi.py b/SimCalorimetry/HGCalSimProducers/python/hgcHitAssociation_cfi.py index 78623b341303f..50513c49e9384 100644 --- a/SimCalorimetry/HGCalSimProducers/python/hgcHitAssociation_cfi.py +++ b/SimCalorimetry/HGCalSimProducers/python/hgcHitAssociation_cfi.py @@ -1 +1,3 @@ from SimCalorimetry.HGCalAssociatorProducers.layerClusterAssociatorByEnergyScore_cfi import layerClusterAssociatorByEnergyScore as lcAssocByEnergyScoreProducer + +from SimCalorimetry.HGCalAssociatorProducers.simClusterAssociatorByEnergyScore_cfi import simClusterAssociatorByEnergyScore as scAssocByEnergyScoreProducer diff --git a/SimCalorimetry/HGCalSimProducers/python/hgcalDigitizer_cfi.py b/SimCalorimetry/HGCalSimProducers/python/hgcalDigitizer_cfi.py index 1515f698632ae..c4fd452157fc5 100644 --- a/SimCalorimetry/HGCalSimProducers/python/hgcalDigitizer_cfi.py +++ b/SimCalorimetry/HGCalSimProducers/python/hgcalDigitizer_cfi.py @@ -35,7 +35,7 @@ # scaling the ddfz curve to match Timo's 800V measuremetn at 3.5E15 cceParamFine_epi800 = [3.5e+15, -1.4285714e-17, 0.263812] #120 # line+log tdr 600V EPI -cceParamFine_epi600 = [3.5e+15, -3.428571e-17, 0.263812] #120 - scaling the ddfz curve to match Timo's 600V measurement at 3.5E15 +cceParamFine_epi600 = [3.5e+15, -3.428571e-17, 0.263812] #120 - scaling the ddfz curve to match Timo's 600V measurement at 3.5E15 cceParamThin_epi600 = [1.5e+15, -3.09878e-16, 0.211207] #200 cceParamThick_epi600 = [6e+14, -7.96539e-16, 0.251751] #300 @@ -73,6 +73,7 @@ # ECAL hgceeDigitizer = cms.PSet( accumulatorType = cms.string("HGCDigiProducer"), + digitizer = cms.string("HGCEEDigitizer"), hitCollection = cms.string("HGCHitsEE"), digiCollection = cms.string("HGCDigisEE"), NoiseGeneration_Method = cms.bool(True), @@ -80,7 +81,6 @@ bxTime = cms.double(25), eVPerEleHolePair = cms.double(eV_per_eh_pair), tofDelay = cms.double(5), - geometryType = cms.uint32(1), digitizationType = cms.uint32(0), makeDigiSimLinks = cms.bool(False), premixStage1 = cms.bool(False), @@ -103,13 +103,13 @@ # HCAL front hgchefrontDigitizer = cms.PSet( accumulatorType = cms.string("HGCDigiProducer"), + digitizer = cms.string("HGCHEfrontDigitizer"), hitCollection = cms.string("HGCHitsHEfront"), digiCollection = cms.string("HGCDigisHEfront"), NoiseGeneration_Method = cms.bool(True), maxSimHitsAccTime = cms.uint32(100), bxTime = cms.double(25), tofDelay = cms.double(5), - geometryType = cms.uint32(1), digitizationType = cms.uint32(0), makeDigiSimLinks = cms.bool(False), premixStage1 = cms.bool(False), @@ -132,13 +132,13 @@ # HCAL back hgchebackDigitizer = cms.PSet( accumulatorType = cms.string("HGCDigiProducer"), + digitizer = cms.string("HGCHEbackDigitizer"), hitCollection = cms.string("HGCHitsHEback"), digiCollection = cms.string("HGCDigisHEback"), NoiseGeneration_Method = cms.bool(True), maxSimHitsAccTime = cms.uint32(100), bxTime = cms.double(25), tofDelay = cms.double(1), - geometryType = cms.uint32(1), digitizationType = cms.uint32(1), makeDigiSimLinks = cms.bool(False), premixStage1 = cms.bool(False), @@ -176,6 +176,7 @@ # HFNose hfnoseDigitizer = cms.PSet( accumulatorType = cms.string("HGCDigiProducer"), + digitizer = cms.string("HFNoseDigitizer"), hitCollection = cms.string("HFNoseHits"), digiCollection = cms.string("HFNoseDigis"), NoiseGeneration_Method = cms.bool(True), @@ -183,7 +184,6 @@ bxTime = cms.double(25), eVPerEleHolePair = cms.double(eV_per_eh_pair), tofDelay = cms.double(5), - geometryType = cms.uint32(1), digitizationType = cms.uint32(0), makeDigiSimLinks = cms.bool(False), premixStage1 = cms.bool(False), diff --git a/SimCalorimetry/HGCalSimProducers/src/HFNoseDigitizer.cc b/SimCalorimetry/HGCalSimProducers/src/HFNoseDigitizer.cc deleted file mode 100644 index 681b6584792ab..0000000000000 --- a/SimCalorimetry/HGCalSimProducers/src/HFNoseDigitizer.cc +++ /dev/null @@ -1,17 +0,0 @@ -#include "SimCalorimetry/HGCalSimProducers/interface/HFNoseDigitizer.h" - -using namespace hgc_digi; - -// -HFNoseDigitizer::HFNoseDigitizer(const edm::ParameterSet& ps) : HGCDigitizerBase(ps) {} - -// -void HFNoseDigitizer::runDigitizer(std::unique_ptr& digiColl, - HGCSimHitDataAccumulator& simData, - const CaloSubdetectorGeometry* theGeom, - const std::unordered_set& validIds, - uint32_t digitizationType, - CLHEP::HepRandomEngine* engine) {} - -// -HFNoseDigitizer::~HFNoseDigitizer() {} diff --git a/SimCalorimetry/HGCalSimProducers/src/HGCDigitizer.cc b/SimCalorimetry/HGCalSimProducers/src/HGCDigitizer.cc deleted file mode 100644 index 02f1eb20d5191..0000000000000 --- a/SimCalorimetry/HGCalSimProducers/src/HGCDigitizer.cc +++ /dev/null @@ -1,1021 +0,0 @@ -#include "DataFormats/ForwardDetId/interface/ForwardSubdetector.h" -#include "DataFormats/ForwardDetId/interface/HFNoseDetId.h" -#include "DataFormats/ForwardDetId/interface/HGCalDetId.h" -#include "SimDataFormats/CaloTest/interface/HGCalTestNumbering.h" -#include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizer.h" -#include "SimGeneral/MixingModule/interface/PileUpEventPrincipal.h" -#include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" -#include "SimDataFormats/CaloHit/interface/PCaloHit.h" -#include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" -#include "SimDataFormats/CrossingFrame/interface/MixCollection.h" -#include "FWCore/Utilities/interface/RandomNumberGenerator.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "Geometry/Records/interface/IdealGeometryRecord.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "Geometry/HGCalCommonData/interface/HGCalGeometryMode.h" -#include "Geometry/HcalCommonData/interface/HcalHitRelabeller.h" -#include "DataFormats/Math/interface/liblogintpack.h" -#include -#include -#include "FWCore/Utilities/interface/transform.h" - -//#define EDM_ML_DEBUG -using namespace std; -using namespace hgc_digi; - -typedef std::vector>::iterator itr; -typedef std::unordered_map>> IdHit_Map; -typedef std::tuple hit_timeStamp; -typedef std::unordered_map> hitRec_container; -typedef std::vector::iterator hitRec_itr; - -namespace { - - constexpr std::array occupancyGuesses = {{0.5, 0.2, 0.2, 0.8}}; - - float getPositionDistance(const HGCalGeometry* geom, const DetId& id) { return geom->getPosition(id).mag(); } - - float getPositionDistance(const HcalGeometry* geom, const DetId& id) { - return geom->getGeometry(id)->getPosition().mag(); - } - - int getCellThickness(const HGCalGeometry* geom, const DetId& detid) { - const auto& dddConst = geom->topology().dddConstants(); - return (1 + dddConst.waferType(detid)); - } - - int getCellThickness(const HcalGeometry* geom, const DetId& detid) { return 1; } - - void getValidDetIds(const HGCalGeometry* geom, std::unordered_set& valid) { - const std::vector& ids = geom->getValidDetIds(); - valid.reserve(ids.size()); - valid.insert(ids.begin(), ids.end()); - } - - void getValidDetIds(const HcalGeometry* geom, std::unordered_set& valid) { - const std::vector& ids = geom->getValidDetIds(); - for (const auto& id : ids) { - if (HcalEndcap == id.subdetId() && DetId::Hcal == id.det()) - valid.emplace(id); - } - valid.reserve(valid.size()); - } - - DetId simToReco(const HcalGeometry* geom, unsigned simid) { - DetId result(0); - const auto& topo = geom->topology(); - const auto* dddConst = topo.dddConstants(); - HcalDetId id = HcalHitRelabeller::relabel(simid, dddConst); - - if (id.subdet() == int(HcalEndcap)) { - result = id; - } - - return result; - } - - DetId simToReco(const HGCalGeometry* geom, unsigned simId) { - DetId result(0); - const auto& topo = geom->topology(); - const auto& dddConst = topo.dddConstants(); - - if (dddConst.waferHexagon8() || dddConst.tileTrapezoid()) { - result = DetId(simId); - } else { - int subdet(DetId(simId).subdetId()), layer, cell, sec, subsec, zp; - HGCalTestNumbering::unpackHexagonIndex(simId, subdet, zp, layer, sec, subsec, cell); - //sec is wafer and subsec is celltyp - //skip this hit if after ganging it is not valid - auto recoLayerCell = dddConst.simToReco(cell, layer, sec, topo.detectorType()); - cell = recoLayerCell.first; - layer = recoLayerCell.second; - if (layer < 0 || cell < 0) { - return result; - } else { - //assign the RECO DetId - result = HGCalDetId((ForwardSubdetector)subdet, zp, layer, subsec, sec, cell); - } - } - return result; - } - - void saveSimHitAccumulator_forPreMix(PHGCSimAccumulator& simResult, - const hgc::HGCPUSimHitDataAccumulator& simData, - const std::unordered_set& validIds, - const float minCharge, - const float maxCharge) { - constexpr auto nEnergies = std::tuple_size::value; - static_assert(nEnergies <= PHGCSimAccumulator::SimHitCollection::energyMask + 1, - "PHGCSimAccumulator bit pattern needs to updated"); - static_assert(hgc_digi::nSamples <= PHGCSimAccumulator::SimHitCollection::sampleMask + 1, - "PHGCSimAccumulator bit pattern needs to updated"); - const float minPackChargeLog = minCharge > 0.f ? std::log(minCharge) : -2; - const float maxPackChargeLog = std::log(maxCharge); - constexpr uint16_t base = 1 << PHGCSimAccumulator::SimHitCollection::sampleOffset; - - simResult.reserve(simData.size()); - - for (const auto& id : validIds) { - auto found = simData.find(id); - if (found == simData.end()) - continue; - - const hgc_digi::PUSimHitData& accCharge_across_bxs = found->second.PUhit_info[0]; - const hgc_digi::PUSimHitData& timing_across_bxs = found->second.PUhit_info[1]; - for (size_t iSample = 0; iSample < hgc_digi::nSamples; ++iSample) { - const std::vector& accCharge_inthis_bx = accCharge_across_bxs[iSample]; - const std::vector& timing_inthis_bx = timing_across_bxs[iSample]; - std::vector vc, vt; - size_t nhits = accCharge_inthis_bx.size(); - - for (size_t ihit = 0; ihit < nhits; ++ihit) { - if (accCharge_inthis_bx[ihit] > minCharge) { - unsigned short c = - logintpack::pack16log(accCharge_inthis_bx[ihit], minPackChargeLog, maxPackChargeLog, base); - unsigned short t = logintpack::pack16log(timing_inthis_bx[ihit], minPackChargeLog, maxPackChargeLog, base); - vc.emplace_back(c); - vt.emplace_back(t); - } - } - simResult.emplace_back(id.rawId(), iSample, vc, vt); - } - } - simResult.shrink_to_fit(); - } - - template - void loadSimHitAccumulator_forPreMix(hgc::HGCSimHitDataAccumulator& simData, - hgc::HGCPUSimHitDataAccumulator& PUSimData, - const GEOM* geom, - IdHit_Map& hitRefs_bx0, - const PHGCSimAccumulator& simAccumulator, - const float minCharge, - const float maxCharge, - bool setIfZero, - const std::array& tdcForToAOnset, - const bool minbiasFlag, - std::unordered_map& hitOrder_monitor, - const unsigned int thisBx) { - const float minPackChargeLog = minCharge > 0.f ? std::log(minCharge) : -2; - const float maxPackChargeLog = std::log(maxCharge); - constexpr uint16_t base = 1 << PHGCSimAccumulator::SimHitCollection::sampleOffset; - for (const auto& detIdIndexHitInfo : simAccumulator) { - unsigned int detId = detIdIndexHitInfo.detId(); - - auto simIt = simData.emplace(detId, HGCCellInfo()).first; - size_t nhits = detIdIndexHitInfo.nhits(); - - hitOrder_monitor[detId] = false; - if (nhits > 0) { - unsigned short iSample = detIdIndexHitInfo.sampleIndex(); - - const auto& unsigned_charge_array = detIdIndexHitInfo.chargeArray(); - const auto& unsigned_time_array = detIdIndexHitInfo.timeArray(); - - float p_charge, p_time; - unsigned short unsigned_charge, unsigned_time; - - for (size_t ihit = 0; ihit < nhits; ++ihit) { - unsigned_charge = (unsigned_charge_array[ihit] & PHGCSimAccumulator::SimHitCollection::dataMask); - unsigned_time = (unsigned_time_array[ihit] & PHGCSimAccumulator::SimHitCollection::dataMask); - p_time = logintpack::unpack16log(unsigned_time, minPackChargeLog, maxPackChargeLog, base); - p_charge = logintpack::unpack16log(unsigned_charge, minPackChargeLog, maxPackChargeLog, base); - - (simIt->second).hit_info[0][iSample] += p_charge; - if (iSample == (unsigned short)thisBx) { - if (hitRefs_bx0[detId].empty()) { - hitRefs_bx0[detId].emplace_back(p_charge, p_time); - } else { - if (p_time < hitRefs_bx0[detId].back().second) { - auto findPos = std::upper_bound(hitRefs_bx0[detId].begin(), - hitRefs_bx0[detId].end(), - std::make_pair(0.f, p_time), - [](const auto& i, const auto& j) { return i.second < j.second; }); - - auto insertedPos = findPos; - if (findPos == hitRefs_bx0[detId].begin()) { - insertedPos = hitRefs_bx0[detId].emplace(insertedPos, p_charge, p_time); - } else { - itr prevPos = findPos - 1; - if (prevPos->second == p_time) { - prevPos->first = prevPos->first + p_charge; - insertedPos = prevPos; - } else if (prevPos->second < p_time) { - insertedPos = hitRefs_bx0[detId].emplace(findPos, (prevPos)->first + p_charge, p_time); - } - } - - for (itr step = insertedPos; step != hitRefs_bx0[detId].end(); ++step) { - if (step != insertedPos) - step->first += p_charge; - } - - hitOrder_monitor[detId] = true; - - } else if (p_time == hitRefs_bx0[detId].back().second) { - hitRefs_bx0[detId].back().first += p_charge; - } else if (p_time > hitRefs_bx0[detId].back().second) { - hitRefs_bx0[detId].emplace_back(hitRefs_bx0[detId].back().first + p_charge, p_time); - } - } - } - } - } - } - - if (minbiasFlag) { - for (const auto& hitmapIterator : hitRefs_bx0) { - unsigned int detectorId = hitmapIterator.first; - auto simIt = simData.emplace(detectorId, HGCCellInfo()).first; - const bool orderChanged = hitOrder_monitor[detectorId]; - int waferThickness = getCellThickness(geom, detectorId); - float cell_threshold = tdcForToAOnset[waferThickness - 1]; - const auto& hitRec = hitmapIterator.second; - float accChargeForToA(0.f), fireTDC(0.f); - const auto aboveThrPos = std::upper_bound( - hitRec.begin(), hitRec.end(), std::make_pair(cell_threshold, 0.f), [](const auto& i, const auto& j) { - return i.first < j.first; - }); - - if (aboveThrPos == hitRec.end()) { - accChargeForToA = hitRec.back().first; - fireTDC = 0.f; - } else if (hitRec.end() - aboveThrPos > 0 || orderChanged) { - accChargeForToA = aboveThrPos->first; - fireTDC = aboveThrPos->second; - if (aboveThrPos - hitRec.begin() >= 1) { - const auto& belowThrPos = aboveThrPos - 1; - float chargeBeforeThr = belowThrPos->first; - float timeBeforeThr = belowThrPos->second; - float deltaQ = accChargeForToA - chargeBeforeThr; - float deltaTOF = fireTDC - timeBeforeThr; - fireTDC = (cell_threshold - chargeBeforeThr) * deltaTOF / deltaQ + timeBeforeThr; - } - } - (simIt->second).hit_info[1][9] = fireTDC; - } - } - } -} //namespace - -HGCDigitizer::HGCDigitizer(const edm::ParameterSet& ps, edm::ConsumesCollector& iC) - : simHitAccumulator_(new HGCSimHitDataAccumulator()), - pusimHitAccumulator_(new HGCPUSimHitDataAccumulator()), - myDet_(DetId::Forward), - mySubDet_(ForwardSubdetector::ForwardEmpty), - refSpeed_(0.1 * CLHEP::c_light), //[CLHEP::c_light]=mm/ns convert to cm/ns - averageOccupancies_(occupancyGuesses), - nEvents_(1) { - //configure from cfg - - hitCollection_ = ps.getParameter("hitCollection"); - digiCollection_ = ps.getParameter("digiCollection"); - maxSimHitsAccTime_ = ps.getParameter("maxSimHitsAccTime"); - bxTime_ = ps.getParameter("bxTime"); - geometryType_ = ps.getParameter("geometryType"); - digitizationType_ = ps.getParameter("digitizationType"); - verbosity_ = ps.getUntrackedParameter("verbosity", 0); - tofDelay_ = ps.getParameter("tofDelay"); - premixStage1_ = ps.getParameter("premixStage1"); - premixStage1MinCharge_ = ps.getParameter("premixStage1MinCharge"); - premixStage1MaxCharge_ = ps.getParameter("premixStage1MaxCharge"); - std::unordered_set().swap(validIds_); - iC.consumes>(edm::InputTag("g4SimHits", hitCollection_)); - const auto& myCfg_ = ps.getParameter("digiCfg"); - - if (myCfg_.existsAs("chargeCollectionEfficiencies")) { - cce_.clear(); - const auto& temp = myCfg_.getParameter("chargeCollectionEfficiencies") - .getParameter>("values"); - for (double cce : temp) { - cce_.emplace_back(cce); - } - } else { - std::vector().swap(cce_); - } - - if (hitCollection_.find("HitsEE") != std::string::npos) { - if (geometryType_ == 0) { - mySubDet_ = ForwardSubdetector::HGCEE; - } else { - myDet_ = DetId::HGCalEE; - } - theHGCEEDigitizer_ = std::make_unique(ps); - } - if (hitCollection_.find("HitsHEfront") != std::string::npos) { - if (geometryType_ == 0) { - mySubDet_ = ForwardSubdetector::HGCHEF; - } else { - myDet_ = DetId::HGCalHSi; - } - theHGCHEfrontDigitizer_ = std::make_unique(ps); - } - if (hitCollection_.find("HcalHits") != std::string::npos and geometryType_ == 0) { - mySubDet_ = ForwardSubdetector::HGCHEB; - theHGCHEbackDigitizer_ = std::make_unique(ps); - } - if (hitCollection_.find("HitsHEback") != std::string::npos and geometryType_ == 1) { - myDet_ = DetId::HGCalHSc; - theHGCHEbackDigitizer_ = std::make_unique(ps); - } - if (hitCollection_.find("HFNoseHits") != std::string::npos) { - mySubDet_ = ForwardSubdetector::HFNose; - myDet_ = DetId::Forward; - theHFNoseDigitizer_ = std::make_unique(ps); - } -} - -// -void HGCDigitizer::initializeEvent(edm::Event const& e, edm::EventSetup const& es) { - // reserve memory for a full detector - unsigned idx = getType(); - simHitAccumulator_->reserve(averageOccupancies_[idx] * validIds_.size()); - pusimHitAccumulator_->reserve(averageOccupancies_[idx] * validIds_.size()); -} - -// -void HGCDigitizer::finalizeEvent(edm::Event& e, edm::EventSetup const& es, CLHEP::HepRandomEngine* hre) { - hitRefs_bx0.clear(); - PhitRefs_bx0.clear(); - hitOrder_monitor.clear(); - - const CaloSubdetectorGeometry* theGeom = (nullptr == gHGCal_ ? static_cast(gHcal_) - : static_cast(gHGCal_)); - - ++nEvents_; - - unsigned idx = getType(); - // release memory for unfilled parts of hash table - if (validIds_.size() * averageOccupancies_[idx] > simHitAccumulator_->size()) { - simHitAccumulator_->reserve(simHitAccumulator_->size()); - pusimHitAccumulator_->reserve(simHitAccumulator_->size()); - } - //update occupancy guess - const double thisOcc = simHitAccumulator_->size() / ((double)validIds_.size()); - averageOccupancies_[idx] = (averageOccupancies_[idx] * (nEvents_ - 1) + thisOcc) / nEvents_; - - if (premixStage1_) { - auto simRecord = std::make_unique(); - - if (!pusimHitAccumulator_->empty()) { - saveSimHitAccumulator_forPreMix( - *simRecord, *pusimHitAccumulator_, validIds_, premixStage1MinCharge_, premixStage1MaxCharge_); - } - - e.put(std::move(simRecord), digiCollection()); - - } else { - if (producesEEDigis()) { - auto digiResult = std::make_unique(); - - theHGCEEDigitizer_->run(digiResult, *simHitAccumulator_, theGeom, validIds_, digitizationType_, hre); - - edm::LogVerbatim("HGCDigitizer") << "HGCDigitizer:: finalize event - produced " << digiResult->size() - << " EE hits"; -#ifdef EDM_ML_DEBUG - checkPosition(&(*digiResult)); -#endif - e.put(std::move(digiResult), digiCollection()); - } - if (producesHEfrontDigis()) { - auto digiResult = std::make_unique(); - theHGCHEfrontDigitizer_->run(digiResult, *simHitAccumulator_, theGeom, validIds_, digitizationType_, hre); - edm::LogVerbatim("HGCDigitizer") << "HGCDigitizer:: finalize event - produced " << digiResult->size() - << " HE silicon hits"; -#ifdef EDM_ML_DEBUG - checkPosition(&(*digiResult)); -#endif - e.put(std::move(digiResult), digiCollection()); - } - if (producesHEbackDigis()) { - auto digiResult = std::make_unique(); - theHGCHEbackDigitizer_->run(digiResult, *simHitAccumulator_, theGeom, validIds_, digitizationType_, hre); - edm::LogVerbatim("HGCDigitizer") << "HGCDigitizer:: finalize event - produced " << digiResult->size() - << " HE Scintillator hits"; -#ifdef EDM_ML_DEBUG - checkPosition(&(*digiResult)); -#endif - e.put(std::move(digiResult), digiCollection()); - } - if (producesHFNoseDigis()) { - auto digiResult = std::make_unique(); - theHFNoseDigitizer_->run(digiResult, *simHitAccumulator_, theGeom, validIds_, digitizationType_, hre); - edm::LogVerbatim("HGCDigitizer") << "HGCDigitizer:: finalize event - produced " << digiResult->size() - << " HFNose hits"; -#ifdef EDM_ML_DEBUG - checkPosition(&(*digiResult)); -#endif - e.put(std::move(digiResult), digiCollection()); - } - } - - hgc::HGCSimHitDataAccumulator().swap(*simHitAccumulator_); - hgc::HGCPUSimHitDataAccumulator().swap(*pusimHitAccumulator_); -} -void HGCDigitizer::accumulate_forPreMix(edm::Event const& e, - edm::EventSetup const& eventSetup, - CLHEP::HepRandomEngine* hre) { - //get inputs - - edm::Handle hits; - e.getByLabel(edm::InputTag("g4SimHits", hitCollection_), hits); - if (!hits.isValid()) { - edm::LogError("HGCDigitizer") << " @ accumulate_minbias : can't find " << hitCollection_ - << " collection of g4SimHits"; - return; - } - - //accumulate in-time the main event - if (nullptr != gHGCal_) { - accumulate_forPreMix(hits, 0, gHGCal_, hre); - } else if (nullptr != gHcal_) { - accumulate_forPreMix(hits, 0, gHcal_, hre); - } else { - throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!"; - } -} - -// -void HGCDigitizer::accumulate(edm::Event const& e, edm::EventSetup const& eventSetup, CLHEP::HepRandomEngine* hre) { - //get inputs - edm::Handle hits; - e.getByLabel(edm::InputTag("g4SimHits", hitCollection_), hits); - if (!hits.isValid()) { - edm::LogError("HGCDigitizer") << " @ accumulate : can't find " << hitCollection_ << " collection of g4SimHits"; - return; - } - - //accumulate in-time the main event - if (nullptr != gHGCal_) { - accumulate(hits, 0, gHGCal_, hre); - } else if (nullptr != gHcal_) { - accumulate(hits, 0, gHcal_, hre); - } else { - throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!"; - } -} - -// -void HGCDigitizer::accumulate_forPreMix(PileUpEventPrincipal const& e, - edm::EventSetup const& eventSetup, - CLHEP::HepRandomEngine* hre) { - edm::Handle hits; - e.getByLabel(edm::InputTag("g4SimHits", hitCollection_), hits); - - if (!hits.isValid()) { - edm::LogError("HGCDigitizer") << " @ accumulate : can't find " << hitCollection_ << " collection of g4SimHits"; - return; - } - - if (nullptr != gHGCal_) { - accumulate_forPreMix(hits, e.bunchCrossing(), gHGCal_, hre); - } else if (nullptr != gHcal_) { - accumulate_forPreMix(hits, e.bunchCrossing(), gHcal_, hre); - } else { - throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!"; - } -} - -// -void HGCDigitizer::accumulate(PileUpEventPrincipal const& e, - edm::EventSetup const& eventSetup, - CLHEP::HepRandomEngine* hre) { - //get inputs - edm::Handle hits; - e.getByLabel(edm::InputTag("g4SimHits", hitCollection_), hits); - - if (!hits.isValid()) { - edm::LogError("HGCDigitizer") << " @ accumulate : can't find " << hitCollection_ << " collection of g4SimHits"; - return; - } - - //accumulate for the simulated bunch crossing - if (nullptr != gHGCal_) { - accumulate(hits, e.bunchCrossing(), gHGCal_, hre); - } else if (nullptr != gHcal_) { - accumulate(hits, e.bunchCrossing(), gHcal_, hre); - } else { - throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!"; - } -} - -// -template -void HGCDigitizer::accumulate_forPreMix(edm::Handle const& hits, - int bxCrossing, - const GEOM* geom, - CLHEP::HepRandomEngine* hre) { - if (nullptr == geom) - return; - - float keV2fC(0.f); - //configuration to apply for the computation of time-of-flight - std::array tdcForToAOnset{{0.f, 0.f, 0.f}}; - - int nchits = (int)hits->size(); - int count_thisbx = 0; - std::vector hitRefs; - hitRefs.reserve(nchits); - for (int i = 0; i < nchits; ++i) { - const auto& the_hit = hits->at(i); - DetId id = simToReco(geom, the_hit.id()); - // to be written the verbosity block - if (id.rawId() != 0) { - hitRefs.emplace_back(i, id.rawId(), (float)the_hit.time()); - } - } - std::sort(hitRefs.begin(), hitRefs.end(), this->orderByDetIdThenTime); - - nchits = hitRefs.size(); - for (int i = 0; i < nchits; ++i) { - const int hitidx = std::get<0>(hitRefs[i]); - const uint32_t id = std::get<1>(hitRefs[i]); - if (!validIds_.count(id)) - continue; - - if (id == 0) - continue; - - const float toa = std::get<2>(hitRefs[i]); - const PCaloHit& hit = hits->at(hitidx); - const float charge = hit.energy() * 1e6 * keV2fC; // * getCCE(geom, id, cce_); - - const float dist2center(getPositionDistance(geom, id)); - const float tof = toa - dist2center / refSpeed_ + tofDelay_; - const int itime = std::floor(tof / bxTime_) + 9; - - if (itime < 0 || itime > (int)maxBx_) - continue; - - if (itime >= (int)(maxBx_ + 1)) - continue; - - int waferThickness = getCellThickness(geom, id); - if (itime == (int)thisBx_) { - ++count_thisbx; - if (PhitRefs_bx0[id].empty()) { - PhitRefs_bx0[id].emplace_back(charge, charge, tof); - } else if (tof > std::get<2>(PhitRefs_bx0[id].back())) { - PhitRefs_bx0[id].emplace_back(charge, charge + std::get<1>(PhitRefs_bx0[id].back()), tof); - } else if (tof == std::get<2>(PhitRefs_bx0[id].back())) { - std::get<0>(PhitRefs_bx0[id].back()) += charge; - std::get<1>(PhitRefs_bx0[id].back()) += charge; - } else { - //find position to insert new entry preserving time sorting - hitRec_itr findPos = - std::upper_bound(PhitRefs_bx0[id].begin(), - PhitRefs_bx0[id].end(), - hit_timeStamp(charge, 0.f, tof), - [](const auto& i, const auto& j) { return std::get<2>(i) <= std::get<2>(j); }); - - hitRec_itr insertedPos = findPos; - - if (tof == std::get<2>(*(findPos - 1))) { - std::get<0>(*(findPos - 1)) += charge; - std::get<1>(*(findPos - 1)) += charge; - - } else { - insertedPos = PhitRefs_bx0[id].insert(findPos, - (findPos == PhitRefs_bx0[id].begin()) - ? hit_timeStamp(charge, charge, tof) - : hit_timeStamp(charge, charge + std::get<1>(*(findPos - 1)), tof)); - } - //cumulate the charge of new entry for all elements that follow in the sorted list - //and resize list accounting for cases when the inserted element itself crosses the threshold - - for (hitRec_itr step = insertedPos; step != PhitRefs_bx0[id].end(); ++step) { - if (step != insertedPos) - std::get<1>(*(step)) += charge; - - // resize the list stopping with the first timeStamp with cumulative charge above threshold - if (std::get<1>(*step) > tdcForToAOnset[waferThickness - 1] && - std::get<2>(*step) != std::get<2>(PhitRefs_bx0[id].back())) { - PhitRefs_bx0[id].resize( - std::upper_bound(PhitRefs_bx0[id].begin(), - PhitRefs_bx0[id].end(), - hit_timeStamp(charge, 0.f, std::get<2>(*step)), - [](const auto& i, const auto& j) { return std::get<2>(i) < std::get<2>(j); }) - - PhitRefs_bx0[id].begin()); - for (auto stepEnd = step + 1; stepEnd != PhitRefs_bx0[id].end(); ++stepEnd) - std::get<1>(*stepEnd) += charge; - break; - } - } - } - } - } - - for (const auto& hitCollection : PhitRefs_bx0) { - const uint32_t detectorId = hitCollection.first; - auto simHitIt = pusimHitAccumulator_->emplace(detectorId, HGCCellHitInfo()).first; - - for (const auto& hit_timestamp : PhitRefs_bx0[detectorId]) { - (simHitIt->second).PUhit_info[1][thisBx_].push_back(std::get<2>(hit_timestamp)); - (simHitIt->second).PUhit_info[0][thisBx_].push_back(std::get<0>(hit_timestamp)); - } - } - - if (nchits == 0) { - HGCPUSimHitDataAccumulator::iterator simHitIt = pusimHitAccumulator_->emplace(0, HGCCellHitInfo()).first; - (simHitIt->second).PUhit_info[1][9].push_back(0.0); - (simHitIt->second).PUhit_info[0][9].push_back(0.0); - } - hitRefs.clear(); - PhitRefs_bx0.clear(); -} - -// -template -void HGCDigitizer::accumulate(edm::Handle const& hits, - int bxCrossing, - const GEOM* geom, - CLHEP::HepRandomEngine* hre) { - if (nullptr == geom) - return; - - //configuration to apply for the computation of time-of-flight - std::array tdcForToAOnset{{0.f, 0.f, 0.f}}; - float keV2fC(0.f); - bool weightToAbyEnergy = getWeight(tdcForToAOnset, keV2fC); - - //create list of tuples (pos in container, RECO DetId, time) to be sorted first - int nchits = (int)hits->size(); - - std::vector hitRefs; - hitRefs.reserve(nchits); - for (int i = 0; i < nchits; ++i) { - const auto& the_hit = hits->at(i); - DetId id = simToReco(geom, the_hit.id()); - - if (verbosity_ > 0) { - if (producesEEDigis()) - edm::LogVerbatim("HGCDigitizer") << "HGCDigitizer::i/p " << std::hex << the_hit.id() << " o/p " << id.rawId() - << std::dec; - else - edm::LogVerbatim("HGCDigitizer") << "HGCDigitizer::i/p " << std::hex << the_hit.id() << " o/p " << id.rawId() - << std::dec; - } - - if (0 != id.rawId()) { - hitRefs.emplace_back(i, id.rawId(), (float)the_hit.time()); - } - } - - std::sort(hitRefs.begin(), hitRefs.end(), this->orderByDetIdThenTime); - //loop over sorted hits - nchits = hitRefs.size(); - for (int i = 0; i < nchits; ++i) { - const int hitidx = std::get<0>(hitRefs[i]); - const uint32_t id = std::get<1>(hitRefs[i]); - - //get the data for this cell, if not available then we skip it - - if (!validIds_.count(id)) - continue; - HGCSimHitDataAccumulator::iterator simHitIt = simHitAccumulator_->emplace(id, HGCCellInfo()).first; - - if (id == 0) - continue; // to be ignored at RECO level - - const float toa = std::get<2>(hitRefs[i]); - const PCaloHit& hit = hits->at(hitidx); - const float charge = hit.energy() * 1e6 * keV2fC; - - //distance to the center of the detector - const float dist2center(getPositionDistance(geom, id)); - - //hit time: [time()]=ns [centerDist]=cm [refSpeed_]=cm/ns + delay by 1ns - //accumulate in 15 buckets of 25ns (9 pre-samples, 1 in-time, 5 post-samples) - const float tof = toa - dist2center / refSpeed_ + tofDelay_; - const int itime = std::floor(tof / bxTime_) + 9; - - //no need to add bx crossing - tof comes already corrected from the mixing module - //itime += bxCrossing; - //itime += 9; - - if (itime < 0 || itime > (int)maxBx_) - continue; - - //check if time index is ok and store energy - if (itime >= (int)simHitIt->second.hit_info[0].size()) - continue; - - (simHitIt->second).hit_info[0][itime] += charge; - - //for time-of-arrival: save the time-sorted list of timestamps with cumulative charge just above threshold - //working version with pileup only for in-time hits - int waferThickness = getCellThickness(geom, id); - bool orderChanged = false; - if (itime == (int)thisBx_) { - //if start empty => just add charge and time - if (hitRefs_bx0[id].empty()) { - hitRefs_bx0[id].emplace_back(charge, tof); - - } else if (tof <= hitRefs_bx0[id].back().second) { - //find position to insert new entry preserving time sorting - std::vector>::iterator findPos = - std::upper_bound(hitRefs_bx0[id].begin(), - hitRefs_bx0[id].end(), - std::pair(0.f, tof), - [](const auto& i, const auto& j) { return i.second <= j.second; }); - - std::vector>::iterator insertedPos = findPos; - if (findPos->second == tof) { - //just merge timestamps with exact timing - findPos->first += charge; - } else { - //insert new element cumulating the charge - insertedPos = hitRefs_bx0[id].insert(findPos, - (findPos == hitRefs_bx0[id].begin()) - ? std::pair(charge, tof) - : std::pair((findPos - 1)->first + charge, tof)); - } - - //cumulate the charge of new entry for all elements that follow in the sorted list - //and resize list accounting for cases when the inserted element itself crosses the threshold - for (std::vector>::iterator step = insertedPos; step != hitRefs_bx0[id].end(); ++step) { - if (step != insertedPos) - step->first += charge; - // resize the list stopping with the first timeStamp with cumulative charge above threshold - if (step->first > tdcForToAOnset[waferThickness - 1] && step->second != hitRefs_bx0[id].back().second) { - hitRefs_bx0[id].resize(std::upper_bound(hitRefs_bx0[id].begin(), - hitRefs_bx0[id].end(), - std::pair(0.f, step->second), - [](const auto& i, const auto& j) { return i.second < j.second; }) - - hitRefs_bx0[id].begin()); - for (auto stepEnd = step + 1; stepEnd != hitRefs_bx0[id].end(); ++stepEnd) - stepEnd->first += charge; - break; - } - } - - orderChanged = true; - } else { - //add new entry at the end of the list - if (hitRefs_bx0[id].back().first <= tdcForToAOnset[waferThickness - 1]) { - hitRefs_bx0[id].emplace_back(hitRefs_bx0[id].back().first + charge, tof); - } - } - } - float accChargeForToA = hitRefs_bx0[id].empty() ? 0.f : hitRefs_bx0[id].back().first; - //now compute the firing ToA through the interpolation of the consecutive time-stamps at threshold - if (weightToAbyEnergy) - (simHitIt->second).hit_info[1][itime] += charge * tof; - else if (accChargeForToA > tdcForToAOnset[waferThickness - 1] && - ((simHitIt->second).hit_info[1][itime] == 0 || orderChanged == true)) { - float fireTDC = hitRefs_bx0[id].back().second; - if (hitRefs_bx0[id].size() > 1) { - float chargeBeforeThr = (hitRefs_bx0[id].end() - 2)->first; - float tofchargeBeforeThr = (hitRefs_bx0[id].end() - 2)->second; - - float deltaQ = accChargeForToA - chargeBeforeThr; - float deltaTOF = fireTDC - tofchargeBeforeThr; - fireTDC = (tdcForToAOnset[waferThickness - 1] - chargeBeforeThr) * deltaTOF / deltaQ + tofchargeBeforeThr; - } - (simHitIt->second).hit_info[1][itime] = fireTDC; - } - } - hitRefs.clear(); -} -void HGCDigitizer::accumulate_forPreMix(const PHGCSimAccumulator& simAccumulator, const bool minbiasFlag) { - //configuration to apply for the computation of time-of-flight - std::array tdcForToAOnset{{0.f, 0.f, 0.f}}; - float keV2fC(0.f); - bool weightToAbyEnergy = getWeight(tdcForToAOnset, keV2fC); - - if (nullptr != gHGCal_) { - loadSimHitAccumulator_forPreMix(*simHitAccumulator_, - *pusimHitAccumulator_, - gHGCal_, - hitRefs_bx0, - simAccumulator, - premixStage1MinCharge_, - premixStage1MaxCharge_, - !weightToAbyEnergy, - tdcForToAOnset, - minbiasFlag, - hitOrder_monitor, - thisBx_); - } else if (nullptr != gHcal_) { - loadSimHitAccumulator_forPreMix(*simHitAccumulator_, - *pusimHitAccumulator_, - gHcal_, - hitRefs_bx0, - simAccumulator, - premixStage1MinCharge_, - premixStage1MaxCharge_, - !weightToAbyEnergy, - tdcForToAOnset, - minbiasFlag, - hitOrder_monitor, - thisBx_); - } -} - -// -void HGCDigitizer::beginRun(const edm::EventSetup& es) { - //get geometry - edm::ESHandle geom; - es.get().get(geom); - - gHGCal_ = nullptr; - gHcal_ = nullptr; - - if (producesEEDigis()) - gHGCal_ = dynamic_cast(geom->getSubdetectorGeometry(myDet_, mySubDet_)); - if (producesHEfrontDigis()) - gHGCal_ = dynamic_cast(geom->getSubdetectorGeometry(myDet_, mySubDet_)); - if (producesHFNoseDigis()) - gHGCal_ = dynamic_cast(geom->getSubdetectorGeometry(myDet_, mySubDet_)); - - if (producesHEbackDigis()) { - if (geometryType_ == 0) { - gHcal_ = dynamic_cast(geom->getSubdetectorGeometry(DetId::Hcal, HcalEndcap)); - } else { - gHGCal_ = dynamic_cast(geom->getSubdetectorGeometry(myDet_, mySubDet_)); - } - } - - int nadded(0); - //valid ID lists - if (nullptr != gHGCal_) { - getValidDetIds(gHGCal_, validIds_); - } else if (nullptr != gHcal_) { - getValidDetIds(gHcal_, validIds_); - } else { - throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!"; - } - - if (verbosity_ > 0) - edm::LogInfo("HGCDigitizer") << "Added " << nadded << ":" << validIds_.size() << " detIds without " - << hitCollection_ << " in first event processed" << std::endl; -} - -// -void HGCDigitizer::endRun() { std::unordered_set().swap(validIds_); } - -// -void HGCDigitizer::resetSimHitDataAccumulator() { - for (HGCSimHitDataAccumulator::iterator it = simHitAccumulator_->begin(); it != simHitAccumulator_->end(); it++) { - it->second.hit_info[0].fill(0.); - it->second.hit_info[1].fill(0.); - } -} - -uint32_t HGCDigitizer::getType() const { - uint32_t idx = std::numeric_limits::max(); - if (geometryType_ == 0) { - switch (mySubDet_) { - case ForwardSubdetector::HGCEE: - idx = 0; - break; - case ForwardSubdetector::HGCHEF: - idx = 1; - break; - case ForwardSubdetector::HGCHEB: - idx = 2; - break; - case ForwardSubdetector::HFNose: - idx = 3; - break; - default: - break; - } - } else { - switch (myDet_) { - case DetId::HGCalEE: - idx = 0; - break; - case DetId::HGCalHSi: - idx = 1; - break; - case DetId::HGCalHSc: - idx = 2; - break; - case DetId::Forward: - idx = 3; - break; - default: - break; - } - } - return idx; -} - -bool HGCDigitizer::getWeight(std::array& tdcForToAOnset, float& keV2fC) const { - bool weightToAbyEnergy(false); - if (geometryType_ == 0) { - switch (mySubDet_) { - case ForwardSubdetector::HGCEE: - weightToAbyEnergy = theHGCEEDigitizer_->toaModeByEnergy(); - tdcForToAOnset = theHGCEEDigitizer_->tdcForToAOnset(); - keV2fC = theHGCEEDigitizer_->keV2fC(); - break; - case ForwardSubdetector::HGCHEF: - weightToAbyEnergy = theHGCHEfrontDigitizer_->toaModeByEnergy(); - tdcForToAOnset = theHGCHEfrontDigitizer_->tdcForToAOnset(); - keV2fC = theHGCHEfrontDigitizer_->keV2fC(); - break; - case ForwardSubdetector::HGCHEB: - weightToAbyEnergy = theHGCHEbackDigitizer_->toaModeByEnergy(); - tdcForToAOnset = theHGCHEbackDigitizer_->tdcForToAOnset(); - keV2fC = theHGCHEbackDigitizer_->keV2fC(); - break; - case ForwardSubdetector::HFNose: - weightToAbyEnergy = theHFNoseDigitizer_->toaModeByEnergy(); - tdcForToAOnset = theHFNoseDigitizer_->tdcForToAOnset(); - keV2fC = theHFNoseDigitizer_->keV2fC(); - break; - default: - break; - } - } else { - switch (myDet_) { - case DetId::HGCalEE: - weightToAbyEnergy = theHGCEEDigitizer_->toaModeByEnergy(); - tdcForToAOnset = theHGCEEDigitizer_->tdcForToAOnset(); - keV2fC = theHGCEEDigitizer_->keV2fC(); - break; - case DetId::HGCalHSi: - weightToAbyEnergy = theHGCHEfrontDigitizer_->toaModeByEnergy(); - tdcForToAOnset = theHGCHEfrontDigitizer_->tdcForToAOnset(); - keV2fC = theHGCHEfrontDigitizer_->keV2fC(); - break; - case DetId::HGCalHSc: - weightToAbyEnergy = theHGCHEbackDigitizer_->toaModeByEnergy(); - tdcForToAOnset = theHGCHEbackDigitizer_->tdcForToAOnset(); - keV2fC = theHGCHEbackDigitizer_->keV2fC(); - break; - case DetId::Forward: - weightToAbyEnergy = theHFNoseDigitizer_->toaModeByEnergy(); - tdcForToAOnset = theHFNoseDigitizer_->tdcForToAOnset(); - keV2fC = theHFNoseDigitizer_->keV2fC(); - break; - default: - break; - } - } - return weightToAbyEnergy; -} - -void HGCDigitizer::checkPosition(const HGCalDigiCollection* digis) const { - const double tol(0.5); - if (geometryType_ != 0 && nullptr != gHGCal_) { - for (const auto& digi : *(digis)) { - const DetId& id = digi.id(); - const GlobalPoint& global = gHGCal_->getPosition(id); - double r = global.perp(); - double z = std::abs(global.z()); - std::pair zrange = gHGCal_->topology().dddConstants().rangeZ(true); - std::pair rrange = gHGCal_->topology().dddConstants().rangeR(z, true); - bool ok = ((r >= rrange.first) && (r <= rrange.second) && (z >= zrange.first) && (z <= zrange.second)); - std::string ck = (((r < rrange.first - tol) || (r > rrange.second + tol) || (z < zrange.first - tol) || - (z > zrange.second + tol)) - ? "***** ERROR *****" - : ""); - bool val = gHGCal_->topology().valid(id); - if ((!ok) || (!val)) { - if (id.det() == DetId::HGCalEE || id.det() == DetId::HGCalHSi) { - edm::LogVerbatim("HGCDigitizer") << "Check " << HGCSiliconDetId(id) << " " << global << " R " << r << ":" - << rrange.first << ":" << rrange.second << " Z " << z << ":" << zrange.first - << ":" << zrange.second << " Flag " << ok << ":" << val << " " << ck; - } else if (id.det() == DetId::HGCalHSc) { - edm::LogVerbatim("HGCDigitizer") << "Check " << HGCScintillatorDetId(id) << " " << global << " R " << r << ":" - << rrange.first << ":" << rrange.second << " Z " << z << ":" << zrange.first - << ":" << zrange.second << " Flag " << ok << ":" << val << " " << ck; - } else if ((id.det() == DetId::Forward) && (id.subdetId() == static_cast(HFNose))) { - edm::LogVerbatim("HGCDigitizer") << "Check " << HFNoseDetId(id) << " " << global << " R " << r << ":" - << rrange.first << ":" << rrange.second << " Z " << z << ":" << zrange.first - << ":" << zrange.second << " Flag " << ok << ":" << val << " " << ck; - } else { - edm::LogVerbatim("HGCDigitizer") - << "Check " << std::hex << id.rawId() << std::dec << " " << id.det() << ":" << id.subdetId() << " " - << global << " R " << r << ":" << rrange.first << ":" << rrange.second << " Z " << z << ":" - << zrange.first << ":" << zrange.second << " Flag " << ok << ":" << val << " " << ck; - } - } - } - } -} - -template void HGCDigitizer::accumulate_forPreMix(edm::Handle const& hits, - int bxCrossing, - const HcalGeometry* geom, - CLHEP::HepRandomEngine* hre); - -template void HGCDigitizer::accumulate_forPreMix(edm::Handle const& hits, - int bxCrossing, - const HGCalGeometry* geom, - CLHEP::HepRandomEngine* hre); - -template void HGCDigitizer::accumulate(edm::Handle const& hits, - int bxCrossing, - const HcalGeometry* geom, - CLHEP::HepRandomEngine* hre); -template void HGCDigitizer::accumulate(edm::Handle const& hits, - int bxCrossing, - const HGCalGeometry* geom, - CLHEP::HepRandomEngine* hre); diff --git a/SimCalorimetry/HGCalSimProducers/src/HGCEEDigitizer.cc b/SimCalorimetry/HGCalSimProducers/src/HGCEEDigitizer.cc deleted file mode 100644 index 0155910a753b5..0000000000000 --- a/SimCalorimetry/HGCalSimProducers/src/HGCEEDigitizer.cc +++ /dev/null @@ -1,17 +0,0 @@ -#include "SimCalorimetry/HGCalSimProducers/interface/HGCEEDigitizer.h" - -using namespace hgc_digi; - -// -HGCEEDigitizer::HGCEEDigitizer(const edm::ParameterSet& ps) : HGCDigitizerBase(ps) {} - -// -void HGCEEDigitizer::runDigitizer(std::unique_ptr& digiColl, - HGCSimHitDataAccumulator& simData, - const CaloSubdetectorGeometry* theGeom, - const std::unordered_set& validIds, - uint32_t digitizationType, - CLHEP::HepRandomEngine* engine) {} - -// -HGCEEDigitizer::~HGCEEDigitizer() {} diff --git a/SimCalorimetry/HGCalSimProducers/src/HGCHEfrontDigitizer.cc b/SimCalorimetry/HGCalSimProducers/src/HGCHEfrontDigitizer.cc deleted file mode 100644 index bd5814356944a..0000000000000 --- a/SimCalorimetry/HGCalSimProducers/src/HGCHEfrontDigitizer.cc +++ /dev/null @@ -1,17 +0,0 @@ -#include "SimCalorimetry/HGCalSimProducers/interface/HGCHEfrontDigitizer.h" - -using namespace hgc_digi; - -// -HGCHEfrontDigitizer::HGCHEfrontDigitizer(const edm::ParameterSet& ps) : HGCDigitizerBase(ps) {} - -// -void HGCHEfrontDigitizer::runDigitizer(std::unique_ptr& digiColl, - HGCSimHitDataAccumulator& simData, - const CaloSubdetectorGeometry* theGeom, - const std::unordered_set& validIds, - uint32_t digitizationType, - CLHEP::HepRandomEngine* engine) {} - -// -HGCHEfrontDigitizer::~HGCHEfrontDigitizer() {} diff --git a/SimCalorimetry/HcalSimAlgos/src/HcalTDC.cc b/SimCalorimetry/HcalSimAlgos/src/HcalTDC.cc index 3623851f923a7..08375134b419c 100644 --- a/SimCalorimetry/HcalSimAlgos/src/HcalTDC.cc +++ b/SimCalorimetry/HcalSimAlgos/src/HcalTDC.cc @@ -21,16 +21,15 @@ void HcalTDC::timing(const CaloSamples& lf, QIE11DataFrame& digi) const { for (int ibin = 0; ibin < lf.size(); ++ibin) { /* If in a given 25ns bunch/time sample, the pulse is above - TDC_Thresh already, then TDC_RisingEdge=0 if it was low in the - last precision bin on the previous bunch crossing, otherwise, - TDC_RisingEdge=63 if the pulse never crosses the threshold - having started off, then the special code is 62 and then - one can still have a TDC_FallingEdge that is valid. If the pulse - never falls below threshold having started above threshold (or - goes above threshold in the bunch crossing and doesn't come down), - then TDC_FallingEdge=. If the pulse never went above - threshold, then TDC_RisingEdge=63 and - TDC_FallingEdge=62. + TDC_Thresh, then TDC_RisingEdge set to time when threshold + was crossed. + TDC_RisingEdge=0 if it was low in the last precision bin + on the previous bunch crossing, but above by first precision + bin in current bunch crossing. + TDC_RisingEdge=62 if pulse starts above threshold by end of + previous bunch crossing and stays above threshold in current + bunch crossing. + TDC_RisingEdge=63 if the pulse never crosses the threshold. */ // special codes int TDC_RisingEdge = (risingReady) ? theTDCParameters.noTransitionCode() : theTDCParameters.alreadyTransitionCode(); @@ -38,32 +37,30 @@ void HcalTDC::timing(const CaloSamples& lf, QIE11DataFrame& digi) const { int preciseEnd = preciseBegin + tdcBins; if (hasTDCValues) { - for (int i = preciseBegin; i < preciseEnd; ++i) { //find the TDC time value in each TS - + for (int i = preciseBegin; i < preciseEnd; ++i) { if ((!risingReady) && (i == preciseBegin) && (i != 0)) { - if (((lf.preciseAt(i + 1) - lf.preciseAt(i - 1)) > TDC_Threshold)) { + if (lf.preciseAt(i) / theTDCParameters.deltaT() > TDC_Threshold) { TDC_RisingEdge = theTDCParameters.alreadyTransitionCode(); - break; - } else + } else { risingReady = true; + } } if (risingReady) { - if (i != (lf.size() * tdcBins - 1) && i != 0 && (lf.preciseAt(i + 1) - lf.preciseAt(i - 1)) > TDC_Threshold) { - risingReady = false; + if (lf.preciseAt(i) / theTDCParameters.deltaT() > TDC_Threshold) { TDC_RisingEdge = i - preciseBegin; - } else if (i == 0 && (lf.preciseAt(i + 1) - lf.preciseAt(i)) / 0.5 > TDC_Threshold) { risingReady = false; - TDC_RisingEdge = i - preciseBegin; - } else if (i == (preciseEnd - 1)) + } else if (i == (preciseEnd - 1)) { TDC_RisingEdge = theTDCParameters.noTransitionCode(); + } } - if ((!risingReady) && (i == (preciseEnd - 1)) && (i != (lf.size() * tdcBins - 1))) { - if (((lf.preciseAt(i + 1) - lf.preciseAt(i - 1)) < TDC_Threshold)) { + if ((!risingReady) && (i == (preciseEnd - 1))) { + if (lf.preciseAt(i) / theTDCParameters.deltaT() < TDC_Threshold) { risingReady = true; } } + } //end of looping precise bins } diff --git a/SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociator.h b/SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociator.h new file mode 100644 index 0000000000000..a5509353f22a8 --- /dev/null +++ b/SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociator.h @@ -0,0 +1,48 @@ +#ifndef SimDataFormats_Associations_LayerClusterToSimClusterAssociator_h +#define SimDataFormats_Associations_LayerClusterToSimClusterAssociator_h +// Original Author: Marco Rovere + +// system include files +#include + +// user include files + +#include "SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociatorBaseImpl.h" + +// forward declarations + +namespace hgcal { + + class LayerClusterToSimClusterAssociator { + public: + LayerClusterToSimClusterAssociator(std::unique_ptr); + LayerClusterToSimClusterAssociator() = default; + LayerClusterToSimClusterAssociator(LayerClusterToSimClusterAssociator &&) = default; + LayerClusterToSimClusterAssociator &operator=(LayerClusterToSimClusterAssociator &&) = default; + ~LayerClusterToSimClusterAssociator() = default; + + // ---------- const member functions --------------------- + /// Associate a LayerCluster to SimClusters + hgcal::RecoToSimCollectionWithSimClusters associateRecoToSim(const edm::Handle &cCCH, + const edm::Handle &sCCH) const { + return m_impl->associateRecoToSim(cCCH, sCCH); + }; + + /// Associate a SimCluster to LayerClusters + hgcal::SimToRecoCollectionWithSimClusters associateSimToReco(const edm::Handle &cCCH, + const edm::Handle &sCCH) const { + return m_impl->associateSimToReco(cCCH, sCCH); + } + + private: + LayerClusterToSimClusterAssociator(const LayerClusterToSimClusterAssociator &) = delete; // stop default + + const LayerClusterToSimClusterAssociator &operator=(const LayerClusterToSimClusterAssociator &) = + delete; // stop default + + // ---------- member data -------------------------------- + std::unique_ptr m_impl; + }; +} // namespace hgcal + +#endif diff --git a/SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociatorBaseImpl.h b/SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociatorBaseImpl.h new file mode 100644 index 0000000000000..6045bc6cdf0c7 --- /dev/null +++ b/SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociatorBaseImpl.h @@ -0,0 +1,44 @@ +#ifndef SimDataFormats_Associations_LayerClusterToSimClusterAssociatorBaseImpl_h +#define SimDataFormats_Associations_LayerClusterToSimClusterAssociatorBaseImpl_h + +/** \class LayerClusterToSimClusterAssociatorBaseImpl + * + * Base class for LayerClusterToSimClusterAssociators. Methods take as input + * the handle of LayerClusters and the SimCluster collections and return an + * AssociationMap (oneToManyWithQuality) + * + * \author Marco Rovere + */ + +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/AssociationMap.h" +#include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h" + +#include "SimDataFormats/CaloAnalysis/interface/SimClusterFwd.h" + +namespace hgcal { + + typedef edm::AssociationMap< + edm::OneToManyWithQualityGeneric>> + SimToRecoCollectionWithSimClusters; + typedef edm::AssociationMap> + RecoToSimCollectionWithSimClusters; + + class LayerClusterToSimClusterAssociatorBaseImpl { + public: + /// Constructor + LayerClusterToSimClusterAssociatorBaseImpl(); + /// Destructor + virtual ~LayerClusterToSimClusterAssociatorBaseImpl(); + + /// Associate a LayerCluster to SimClusters + virtual hgcal::RecoToSimCollectionWithSimClusters associateRecoToSim( + const edm::Handle &cCH, const edm::Handle &sCCH) const; + + /// Associate a SimCluster to LayerClusters + virtual hgcal::SimToRecoCollectionWithSimClusters associateSimToReco( + const edm::Handle &cCH, const edm::Handle &sCCH) const; + }; +} // namespace hgcal + +#endif diff --git a/SimDataFormats/Associations/plugins/BuildFile.xml b/SimDataFormats/Associations/plugins/BuildFile.xml new file mode 100644 index 0000000000000..bd62ae6ee8f1b --- /dev/null +++ b/SimDataFormats/Associations/plugins/BuildFile.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/SimDataFormats/Associations/plugins/LCToCPAssociatorEDProducer.cc b/SimDataFormats/Associations/plugins/LCToCPAssociatorEDProducer.cc new file mode 100644 index 0000000000000..f88b4dc625be6 --- /dev/null +++ b/SimDataFormats/Associations/plugins/LCToCPAssociatorEDProducer.cc @@ -0,0 +1,92 @@ +// +// Original Author: Leonardo Cristella +// Created: Thu Dec 3 10:52:11 CET 2020 +// +// + +// system include files +#include +#include + +// user include files +#include "FWCore/Framework/interface/global/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/Framework/interface/ESHandle.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "SimDataFormats/Associations/interface/LayerClusterToCaloParticleAssociator.h" + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "SimDataFormats/CaloAnalysis/interface/CaloParticleFwd.h" +#include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h" + +#include "FWCore/Utilities/interface/EDGetToken.h" + +// +// class decleration +// + +class LCToCPAssociatorEDProducer : public edm::global::EDProducer<> { +public: + explicit LCToCPAssociatorEDProducer(const edm::ParameterSet &); + ~LCToCPAssociatorEDProducer() override; + +private: + void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override; + + edm::EDGetTokenT CPCollectionToken_; + edm::EDGetTokenT LCCollectionToken_; + edm::EDGetTokenT associatorToken_; +}; + +LCToCPAssociatorEDProducer::LCToCPAssociatorEDProducer(const edm::ParameterSet &pset) { + produces(); + produces(); + + CPCollectionToken_ = consumes(pset.getParameter("label_cp")); + LCCollectionToken_ = consumes(pset.getParameter("label_lc")); + associatorToken_ = + consumes(pset.getParameter("associator")); +} + +LCToCPAssociatorEDProducer::~LCToCPAssociatorEDProducer() {} + +// +// member functions +// + +// ------------ method called to produce the data ------------ +void LCToCPAssociatorEDProducer::produce(edm::StreamID, edm::Event &iEvent, const edm::EventSetup &iSetup) const { + using namespace edm; + + edm::Handle theAssociator; + iEvent.getByToken(associatorToken_, theAssociator); + + Handle CPCollection; + iEvent.getByToken(CPCollectionToken_, CPCollection); + + Handle LCCollection; + iEvent.getByToken(LCCollectionToken_, LCCollection); + + // associate LC and CP + LogTrace("AssociatorValidator") << "Calling associateRecoToSim method" + << "\n"; + hgcal::RecoToSimCollection recSimColl = theAssociator->associateRecoToSim(LCCollection, CPCollection); + + LogTrace("AssociatorValidator") << "Calling associateSimToReco method" + << "\n"; + hgcal::SimToRecoCollection simRecColl = theAssociator->associateSimToReco(LCCollection, CPCollection); + + auto rts = std::make_unique(recSimColl); + auto str = std::make_unique(simRecColl); + + iEvent.put(std::move(rts)); + iEvent.put(std::move(str)); +} + +// define this as a plug-in +DEFINE_FWK_MODULE(LCToCPAssociatorEDProducer); diff --git a/SimDataFormats/Associations/plugins/LCToSCAssociatorEDProducer.cc b/SimDataFormats/Associations/plugins/LCToSCAssociatorEDProducer.cc new file mode 100644 index 0000000000000..2a0e71e0cd730 --- /dev/null +++ b/SimDataFormats/Associations/plugins/LCToSCAssociatorEDProducer.cc @@ -0,0 +1,91 @@ +// +// Original Author: Leonardo Cristella +// Created: Thu Dec 3 10:52:11 CET 2020 +// +// + +// system include files +#include +#include + +// user include files +#include "FWCore/Framework/interface/global/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/Framework/interface/ESHandle.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociator.h" + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h" + +#include "FWCore/Utilities/interface/EDGetToken.h" + +// +// class decleration +// + +class LCToSCAssociatorEDProducer : public edm::global::EDProducer<> { +public: + explicit LCToSCAssociatorEDProducer(const edm::ParameterSet &); + ~LCToSCAssociatorEDProducer() override; + +private: + void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override; + + edm::EDGetTokenT SCCollectionToken_; + edm::EDGetTokenT LCCollectionToken_; + edm::EDGetTokenT associatorToken_; +}; + +LCToSCAssociatorEDProducer::LCToSCAssociatorEDProducer(const edm::ParameterSet &pset) { + produces(); + produces(); + + SCCollectionToken_ = consumes(pset.getParameter("label_scl")); + LCCollectionToken_ = consumes(pset.getParameter("label_lcl")); + associatorToken_ = + consumes(pset.getParameter("associator")); +} + +LCToSCAssociatorEDProducer::~LCToSCAssociatorEDProducer() {} + +// +// member functions +// + +// ------------ method called to produce the data ------------ +void LCToSCAssociatorEDProducer::produce(edm::StreamID, edm::Event &iEvent, const edm::EventSetup &iSetup) const { + using namespace edm; + + edm::Handle theAssociator; + iEvent.getByToken(associatorToken_, theAssociator); + + Handle SCCollection; + iEvent.getByToken(SCCollectionToken_, SCCollection); + + Handle LCCollection; + iEvent.getByToken(LCCollectionToken_, LCCollection); + + // associate LC and SC + LogTrace("AssociatorValidator") << "Calling associateRecoToSim method" + << "\n"; + hgcal::RecoToSimCollectionWithSimClusters recSimColl = theAssociator->associateRecoToSim(LCCollection, SCCollection); + + LogTrace("AssociatorValidator") << "Calling associateSimToReco method" + << "\n"; + hgcal::SimToRecoCollectionWithSimClusters simRecColl = theAssociator->associateSimToReco(LCCollection, SCCollection); + + auto rts = std::make_unique(recSimColl); + auto str = std::make_unique(simRecColl); + + iEvent.put(std::move(rts)); + iEvent.put(std::move(str)); +} + +// define this as a plug-in +DEFINE_FWK_MODULE(LCToSCAssociatorEDProducer); diff --git a/SimDataFormats/Associations/src/LayerClusterToSimClusterAssociator.cc b/SimDataFormats/Associations/src/LayerClusterToSimClusterAssociator.cc new file mode 100644 index 0000000000000..cca007e3af4ab --- /dev/null +++ b/SimDataFormats/Associations/src/LayerClusterToSimClusterAssociator.cc @@ -0,0 +1,7 @@ +// Original Author: Marco Rovere + +#include "SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociator.h" + +hgcal::LayerClusterToSimClusterAssociator::LayerClusterToSimClusterAssociator( + std::unique_ptr ptr) + : m_impl(std::move(ptr)) {} diff --git a/SimDataFormats/Associations/src/LayerClusterToSimClusterAssociatorBaseImpl.cc b/SimDataFormats/Associations/src/LayerClusterToSimClusterAssociatorBaseImpl.cc new file mode 100644 index 0000000000000..5590214fda76f --- /dev/null +++ b/SimDataFormats/Associations/src/LayerClusterToSimClusterAssociatorBaseImpl.cc @@ -0,0 +1,19 @@ +// Original Author: Marco Rovere + +#include "SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociatorBaseImpl.h" + +namespace hgcal { + LayerClusterToSimClusterAssociatorBaseImpl::LayerClusterToSimClusterAssociatorBaseImpl(){}; + LayerClusterToSimClusterAssociatorBaseImpl::~LayerClusterToSimClusterAssociatorBaseImpl(){}; + + hgcal::RecoToSimCollectionWithSimClusters LayerClusterToSimClusterAssociatorBaseImpl::associateRecoToSim( + const edm::Handle &cCCH, const edm::Handle &sCCH) const { + return hgcal::RecoToSimCollectionWithSimClusters(); + } + + hgcal::SimToRecoCollectionWithSimClusters LayerClusterToSimClusterAssociatorBaseImpl::associateSimToReco( + const edm::Handle &cCCH, const edm::Handle &sCCH) const { + return hgcal::SimToRecoCollectionWithSimClusters(); + } + +} // namespace hgcal diff --git a/SimDataFormats/Associations/src/classes.h b/SimDataFormats/Associations/src/classes.h index 20edf2497569e..6e12db392a0a9 100644 --- a/SimDataFormats/Associations/src/classes.h +++ b/SimDataFormats/Associations/src/classes.h @@ -7,6 +7,7 @@ #include "SimDataFormats/Associations/interface/VertexAssociation.h" #include "SimDataFormats/Associations/interface/VertexToTrackingVertexAssociator.h" #include "SimDataFormats/Associations/interface/LayerClusterToCaloParticleAssociator.h" +#include "SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociator.h" namespace SimDataFormats_Associations { struct SimDataFormats_Associations { @@ -19,6 +20,8 @@ namespace SimDataFormats_Associations { edm::Wrapper dummy5; + edm::Wrapper dummy6; + reco::VertexSimToRecoCollection vstrc; reco::VertexSimToRecoCollection::const_iterator vstrci; edm::Wrapper wvstrc; diff --git a/SimDataFormats/Associations/src/classes_def.xml b/SimDataFormats/Associations/src/classes_def.xml index 5080eb4b92b75..3c66509430337 100644 --- a/SimDataFormats/Associations/src/classes_def.xml +++ b/SimDataFormats/Associations/src/classes_def.xml @@ -12,6 +12,9 @@ + + + @@ -20,4 +23,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SimDataFormats/CaloAnalysis/BuildFile.xml b/SimDataFormats/CaloAnalysis/BuildFile.xml index 381060c1ff791..992a01ec1331c 100644 --- a/SimDataFormats/CaloAnalysis/BuildFile.xml +++ b/SimDataFormats/CaloAnalysis/BuildFile.xml @@ -3,6 +3,7 @@ + diff --git a/SimDataFormats/CaloHit/src/PCaloHit.cc b/SimDataFormats/CaloHit/src/PCaloHit.cc index bf2c76c9055c0..02dd8506b7b31 100644 --- a/SimDataFormats/CaloHit/src/PCaloHit.cc +++ b/SimDataFormats/CaloHit/src/PCaloHit.cc @@ -3,13 +3,13 @@ PCaloHit::PCaloHit(float eEM, float eHad, float t, int i, uint16_t d) : myTime(t), myItra(i), myDepth(d) { myEnergy = eEM + eHad; - myEMFraction = (myEnergy <= 0. ? 1. : eEM / myEnergy); + myEMFraction = (myEnergy <= 0.f ? 1.f : eEM / myEnergy); } PCaloHit::PCaloHit(unsigned int id, float eEM, float eHad, float t, int i, uint16_t d) : myTime(t), myItra(i), detId(id), myDepth(d) { myEnergy = eEM + eHad; - myEMFraction = (myEnergy <= 0. ? 1. : eEM / myEnergy); + myEMFraction = (myEnergy <= 0.f ? 1.f : eEM / myEnergy); } std::ostream& operator<<(std::ostream& o, const PCaloHit& hit) { diff --git a/SimDataFormats/CaloTest/BuildFile.xml b/SimDataFormats/CaloTest/BuildFile.xml index aee6233e8d1e8..7ce66398ef5d1 100644 --- a/SimDataFormats/CaloTest/BuildFile.xml +++ b/SimDataFormats/CaloTest/BuildFile.xml @@ -2,6 +2,7 @@ + diff --git a/SimDataFormats/CaloTest/interface/HcalTestHistoClass.h b/SimDataFormats/CaloTest/interface/HcalTestHistoClass.h index 31df040645f4f..65082a97f24f8 100644 --- a/SimDataFormats/CaloTest/interface/HcalTestHistoClass.h +++ b/SimDataFormats/CaloTest/interface/HcalTestHistoClass.h @@ -5,7 +5,6 @@ // Histogram handling class for analysis in HcalTest /////////////////////////////////////////////////////////////////////////////// -#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "SimDataFormats/CaloHit/interface/CaloHit.h" #include diff --git a/SimDataFormats/CaloTest/src/HGCalTestNumbering.cc b/SimDataFormats/CaloTest/src/HGCalTestNumbering.cc index b6fd2cb96ecab..2bdd4ca0870ba 100644 --- a/SimDataFormats/CaloTest/src/HGCalTestNumbering.cc +++ b/SimDataFormats/CaloTest/src/HGCalTestNumbering.cc @@ -1,8 +1,7 @@ #include "SimDataFormats/CaloTest/interface/HGCalTestNumbering.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include -//#define EDM_ML_DEBUG - uint32_t HGCalTestNumbering::packSquareIndex(int zp, int lay, int sec, int subsec, int cell) { if (!HGCalTestNumbering::isValidSquare(zp, lay, sec, subsec, lay)) { zp = lay = sec = subsec = cell = 0; @@ -69,11 +68,10 @@ bool HGCalTestNumbering::isValidSquare(int zp, int lay, int sec, int subsec, int bool HGCalTestNumbering::isValidHexagon(int subdet, int zp, int lay, int wafer, int celltyp, int cell) { if (cell > kHGCalCellHMask || celltyp > kHGCalCellTypHMask || wafer > kHGCalWaferHMask || lay > kHGCalLayerSMask || subdet > kHGCalSubdetHMask) { -#ifdef EDM_ML_DEBUG - std::cout << "[HGCalTestNumbering] request for new id for layer=" << lay << " zp=" << zp << " wafer=" << wafer - << " celltyp=" << celltyp << " cell=" << cell << " for subdet=" << subdet - << " has one or more fields out of bounds and will be reset" << std::endl; -#endif + edm::LogWarning("HGCSim") << "[HGCalTestNumbering] request for new id for layer=" << lay << " zp=" << zp + << " wafer=" << wafer << " celltyp=" << celltyp << " cell=" << cell + << " for subdet=" << subdet + << " has one or more fields out of bounds and will be reset *****"; return false; } return true; diff --git a/SimDataFormats/CaloTest/src/HcalTestHistoClass.cc b/SimDataFormats/CaloTest/src/HcalTestHistoClass.cc index 0b96d3c17c463..c5ea49d8df0e7 100644 --- a/SimDataFormats/CaloTest/src/HcalTestHistoClass.cc +++ b/SimDataFormats/CaloTest/src/HcalTestHistoClass.cc @@ -5,6 +5,7 @@ #include "SimDataFormats/CaloTest/interface/HcalTestHistoClass.h" #include "DataFormats/HcalDetId/interface/HcalTestNumbering.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include diff --git a/SimDataFormats/CrossingFrame/BuildFile.xml b/SimDataFormats/CrossingFrame/BuildFile.xml index d28289e9b01f3..2090bf1896b36 100644 --- a/SimDataFormats/CrossingFrame/BuildFile.xml +++ b/SimDataFormats/CrossingFrame/BuildFile.xml @@ -1,6 +1,5 @@ - diff --git a/SimDataFormats/CrossingFrame/interface/CrossingFrame.h b/SimDataFormats/CrossingFrame/interface/CrossingFrame.h index 1c9f4a63f6795..6ff1e71cbc748 100644 --- a/SimDataFormats/CrossingFrame/interface/CrossingFrame.h +++ b/SimDataFormats/CrossingFrame/interface/CrossingFrame.h @@ -22,7 +22,6 @@ #include "DataFormats/Provenance/interface/EventID.h" #include "DataFormats/Common/interface/Wrapper.h" #include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" template class PCrossingFrame; diff --git a/SimDataFormats/CrossingFrame/interface/CrossingFramePlaybackInfoExtended.h b/SimDataFormats/CrossingFrame/interface/CrossingFramePlaybackInfoExtended.h index 432c3eaeedafd..eb5897af55f02 100644 --- a/SimDataFormats/CrossingFrame/interface/CrossingFramePlaybackInfoExtended.h +++ b/SimDataFormats/CrossingFrame/interface/CrossingFramePlaybackInfoExtended.h @@ -14,7 +14,6 @@ ************************************************************/ #include "DataFormats/Provenance/interface/EventID.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include diff --git a/SimDataFormats/CrossingFrame/interface/CrossingFramePlaybackInfoNew.h b/SimDataFormats/CrossingFrame/interface/CrossingFramePlaybackInfoNew.h index 5cf5b1b164700..5f62954b158f4 100644 --- a/SimDataFormats/CrossingFrame/interface/CrossingFramePlaybackInfoNew.h +++ b/SimDataFormats/CrossingFrame/interface/CrossingFramePlaybackInfoNew.h @@ -15,7 +15,6 @@ #include "DataFormats/Common/interface/SecondaryEventIDAndFileInfo.h" #include "DataFormats/Provenance/interface/EventID.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include #include diff --git a/SimDataFormats/CrossingFrame/interface/MixCollection.h b/SimDataFormats/CrossingFrame/interface/MixCollection.h index 981c513e17040..5d10f8d228452 100644 --- a/SimDataFormats/CrossingFrame/interface/MixCollection.h +++ b/SimDataFormats/CrossingFrame/interface/MixCollection.h @@ -4,7 +4,6 @@ #include #include -#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" template @@ -156,8 +155,8 @@ MixCollection::MixCollection(const CrossingFrame *cf, const std::pair diff --git a/SimDataFormats/DigiSimLinks/BuildFile.xml b/SimDataFormats/DigiSimLinks/BuildFile.xml index 1faac2de53359..28b680e20592b 100644 --- a/SimDataFormats/DigiSimLinks/BuildFile.xml +++ b/SimDataFormats/DigiSimLinks/BuildFile.xml @@ -1,6 +1,7 @@ + diff --git a/SimDataFormats/GeneratorProducts/interface/HepMCProduct.h b/SimDataFormats/GeneratorProducts/interface/HepMCProduct.h index 8bc9154779034..e77afc2d45d1b 100644 --- a/SimDataFormats/GeneratorProducts/interface/HepMCProduct.h +++ b/SimDataFormats/GeneratorProducts/interface/HepMCProduct.h @@ -6,13 +6,16 @@ * \author Joanna Weng, Filip Moortgat */ +#include "DataFormats/Common/interface/Ref.h" #include - -#include #include -#include +#include -#include "DataFormats/Common/interface/Ref.h" +namespace HepMC { + class FourVector; + class GenParticle; + class GenVertex; +} // namespace HepMC namespace edm { class HepMCProduct { diff --git a/SimDataFormats/GeneratorProducts/src/HepMCProduct.cc b/SimDataFormats/GeneratorProducts/src/HepMCProduct.cc index 0bdd054a22d8f..6a37507b265e0 100644 --- a/SimDataFormats/GeneratorProducts/src/HepMCProduct.cc +++ b/SimDataFormats/GeneratorProducts/src/HepMCProduct.cc @@ -7,8 +7,8 @@ #include #include // because we use std::swap -//#include "CLHEP/Vector/ThreeVector.h" - +#include +#include #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" using namespace edm; diff --git a/SimDataFormats/GeneratorProducts/src/classes_def.xml b/SimDataFormats/GeneratorProducts/src/classes_def.xml index 665a75ab79e8f..8713c2309ca58 100644 --- a/SimDataFormats/GeneratorProducts/src/classes_def.xml +++ b/SimDataFormats/GeneratorProducts/src/classes_def.xml @@ -41,7 +41,8 @@ - + + diff --git a/SimDataFormats/HiGenData/BuildFile.xml b/SimDataFormats/HiGenData/BuildFile.xml index 91637d7429b6e..d6f7ade76558f 100644 --- a/SimDataFormats/HiGenData/BuildFile.xml +++ b/SimDataFormats/HiGenData/BuildFile.xml @@ -1,4 +1,5 @@ + diff --git a/SimDataFormats/JetMatching/BuildFile.xml b/SimDataFormats/JetMatching/BuildFile.xml index 3d9db25dc4883..52c1ff3471571 100644 --- a/SimDataFormats/JetMatching/BuildFile.xml +++ b/SimDataFormats/JetMatching/BuildFile.xml @@ -1,6 +1,7 @@ + diff --git a/SimDataFormats/SimHitMaker/interface/CaloSlaveSD.h b/SimDataFormats/SimHitMaker/interface/CaloSlaveSD.h index e89a3ceee7742..ab45def228803 100644 --- a/SimDataFormats/SimHitMaker/interface/CaloSlaveSD.h +++ b/SimDataFormats/SimHitMaker/interface/CaloSlaveSD.h @@ -6,7 +6,6 @@ #ifndef CaloSlaveSD_h #define CaloSlaveSD_h -#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "SimDataFormats/CaloHit/interface/PCaloHit.h" #include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" diff --git a/SimDataFormats/SimHitMaker/src/CaloSlaveSD.cc b/SimDataFormats/SimHitMaker/src/CaloSlaveSD.cc index e8bb371bbc75f..eeb8d2a6045fe 100644 --- a/SimDataFormats/SimHitMaker/src/CaloSlaveSD.cc +++ b/SimDataFormats/SimHitMaker/src/CaloSlaveSD.cc @@ -7,6 +7,7 @@ /////////////////////////////////////////////////////////////////////////////// #include "SimDataFormats/SimHitMaker/interface/CaloSlaveSD.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include diff --git a/SimDataFormats/Track/BuildFile.xml b/SimDataFormats/Track/BuildFile.xml index 2ad60e9bfd76b..a9f8fc715dac6 100644 --- a/SimDataFormats/Track/BuildFile.xml +++ b/SimDataFormats/Track/BuildFile.xml @@ -1,6 +1,7 @@ + diff --git a/SimDataFormats/Track/interface/SimTrack.h b/SimDataFormats/Track/interface/SimTrack.h index 3cedee725b3ee..dc5dce6ca3646 100644 --- a/SimDataFormats/Track/interface/SimTrack.h +++ b/SimDataFormats/Track/interface/SimTrack.h @@ -2,6 +2,9 @@ #define SimTrack_H #include "SimDataFormats/Track/interface/CoreSimTrack.h" +#include "DataFormats/Math/interface/Vector3D.h" +#include "DataFormats/Math/interface/LorentzVector.h" +#include "FWCore/Utilities/interface/Exception.h" class SimTrack : public CoreSimTrack { public: @@ -44,12 +47,31 @@ class SimTrack : public CoreSimTrack { inline void setVertexIndex(const int v) { ivert = v; } + void setCrossedBoundaryVars(bool crossedBoundary, + int idAtBoundary, + math::XYZTLorentzVectorF positionAtBoundary, + math::XYZTLorentzVectorF momentumAtBoundary) { + crossedBoundary_ = crossedBoundary; + idAtBoundary_ = idAtBoundary; + positionAtBoundary_ = positionAtBoundary; + momentumAtBoundary_ = momentumAtBoundary; + } + bool crossedBoundary() const { return crossedBoundary_; } + const math::XYZTLorentzVectorF& getPositionAtBoundary() const { return positionAtBoundary_; } + const math::XYZTLorentzVectorF& getMomentumAtBoundary() const { return momentumAtBoundary_; } + int getIDAtBoundary() const { return idAtBoundary_; } + private: int ivert; int igenpart; math::XYZVectorD tkposition; math::XYZTLorentzVectorD tkmomentum; + + bool crossedBoundary_; + int idAtBoundary_; + math::XYZTLorentzVectorF positionAtBoundary_; + math::XYZTLorentzVectorF momentumAtBoundary_; }; #include diff --git a/SimDataFormats/Track/src/SimTrack.cc b/SimDataFormats/Track/src/SimTrack.cc index 0fe3d889c10cd..52b3441e719b6 100644 --- a/SimDataFormats/Track/src/SimTrack.cc +++ b/SimDataFormats/Track/src/SimTrack.cc @@ -1,11 +1,12 @@ #include "SimDataFormats/Track/interface/SimTrack.h" -SimTrack::SimTrack() : ivert(-1), igenpart(-1) {} +SimTrack::SimTrack() : ivert(-1), igenpart(-1), crossedBoundary_(false) {} -SimTrack::SimTrack(int ipart, const math::XYZTLorentzVectorD& p) : Core(ipart, p), ivert(-1), igenpart(-1) {} +SimTrack::SimTrack(int ipart, const math::XYZTLorentzVectorD& p) + : Core(ipart, p), ivert(-1), igenpart(-1), crossedBoundary_(false) {} SimTrack::SimTrack(int ipart, const math::XYZTLorentzVectorD& p, int iv, int ig) - : Core(ipart, p), ivert(iv), igenpart(ig) {} + : Core(ipart, p), ivert(iv), igenpart(ig), crossedBoundary_(false) {} SimTrack::SimTrack(int ipart, const math::XYZTLorentzVectorD& p, @@ -13,9 +14,9 @@ SimTrack::SimTrack(int ipart, int ig, const math::XYZVectorD& tkp, const math::XYZTLorentzVectorD& tkm) - : Core(ipart, p), ivert(iv), igenpart(ig), tkposition(tkp), tkmomentum(tkm) {} + : Core(ipart, p), ivert(iv), igenpart(ig), tkposition(tkp), tkmomentum(tkm), crossedBoundary_(false) {} -SimTrack::SimTrack(const CoreSimTrack& t, int iv, int ig) : Core(t), ivert(iv), igenpart(ig) {} +SimTrack::SimTrack(const CoreSimTrack& t, int iv, int ig) : Core(t), ivert(iv), igenpart(ig), crossedBoundary_(false) {} std::ostream& operator<<(std::ostream& o, const SimTrack& t) { return o << (SimTrack::Core)(t) << ", " << t.vertIndex() << ", " << t.genpartIndex(); diff --git a/SimDataFormats/Track/src/classes_def.xml b/SimDataFormats/Track/src/classes_def.xml index a2a52b4a404be..d76801ad762c7 100644 --- a/SimDataFormats/Track/src/classes_def.xml +++ b/SimDataFormats/Track/src/classes_def.xml @@ -4,7 +4,8 @@ - + + diff --git a/SimDataFormats/TrackingAnalysis/BuildFile.xml b/SimDataFormats/TrackingAnalysis/BuildFile.xml index b311f418f8eac..7b8a910f93033 100644 --- a/SimDataFormats/TrackingAnalysis/BuildFile.xml +++ b/SimDataFormats/TrackingAnalysis/BuildFile.xml @@ -6,6 +6,7 @@ + diff --git a/SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h b/SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h index 8ce7e93de2e45..9b1ebbd9f4b1f 100644 --- a/SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h +++ b/SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h @@ -1,12 +1,14 @@ #ifndef TrackingAnalysis_TrackingParticleFwd_h #define TrackingAnalysis_TrackingParticleFwd_h #include +#include "DataFormats/Common/interface/Ptr.h" #include "DataFormats/Common/interface/Ref.h" #include "DataFormats/Common/interface/RefVector.h" #include "DataFormats/Common/interface/RefProd.h" class TrackingParticle; typedef std::vector TrackingParticleCollection; +typedef edm::Ptr TrackingParticlePtr; typedef edm::Ref TrackingParticleRef; typedef edm::RefVector TrackingParticleRefVector; typedef edm::RefProd TrackingParticleRefProd; diff --git a/SimFastTiming/FastTimingCommon/python/mtdDigitizer_cfi.py b/SimFastTiming/FastTimingCommon/python/mtdDigitizer_cfi.py index c3b26ccc8d283..d353cb3a6b178 100644 --- a/SimFastTiming/FastTimingCommon/python/mtdDigitizer_cfi.py +++ b/SimFastTiming/FastTimingCommon/python/mtdDigitizer_cfi.py @@ -85,7 +85,7 @@ ) from Configuration.Eras.Modifier_phase2_etlV4_cff import phase2_etlV4 -phase2_etlV4.toModify(_endcap_MTDDigitizer.DeviceSimulation, meVPerMIP = 0.001 ) +phase2_etlV4.toModify(_endcap_MTDDigitizer.DeviceSimulation, meVPerMIP = 0.015 ) from Configuration.ProcessModifiers.premix_stage1_cff import premix_stage1 for _m in [_barrel_MTDDigitizer, _endcap_MTDDigitizer]: diff --git a/SimFastTiming/FastTimingCommon/src/BTLDeviceSim.cc b/SimFastTiming/FastTimingCommon/src/BTLDeviceSim.cc index 88fe8315e0bca..812bd6f4321b3 100644 --- a/SimFastTiming/FastTimingCommon/src/BTLDeviceSim.cc +++ b/SimFastTiming/FastTimingCommon/src/BTLDeviceSim.cc @@ -1,4 +1,5 @@ #include "SimFastTiming/FastTimingCommon/interface/BTLDeviceSim.h" +#include "DataFormats/Math/interface/GeantUnits.h" #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/ForwardDetId/interface/MTDDetId.h" #include "DataFormats/ForwardDetId/interface/BTLDetId.h" @@ -35,6 +36,8 @@ void BTLDeviceSim::getHitsResponse(const std::vector& hits, mtd_digitizer::MTDSimHitDataAccumulator* simHitAccumulator, CLHEP::HepRandomEngine* hre) { + using namespace geant_units::operators; + //loop over sorted simHits for (auto const& hitRef : hitRefs) { const int hitidx = std::get<0>(hitRef); @@ -62,7 +65,7 @@ void BTLDeviceSim::getHitsResponse(const std::vector(topoproxy.specificTopology()); // calculate the simhit row and column const auto& pentry = hit.entryPoint(); - Local3DPoint simscaled(0.1 * pentry.x(), 0.1 * pentry.y(), 0.1 * pentry.z()); // mm -> cm here is the switch + Local3DPoint simscaled(convertMmToCm(pentry.x()), convertMmToCm(pentry.y()), convertMmToCm(pentry.z())); // translate from crystal-local coordinates to module-local coordinates to get the row and column simscaled = topo.pixelToModuleLocalPoint(simscaled, btlid.row(topo.nrows()), btlid.column(topo.nrows())); const auto& thepixel = topo.pixel(simscaled); @@ -82,11 +85,11 @@ void BTLDeviceSim::getHitsResponse(const std::vectoremplace(mtd_digitizer::MTDCellId(id, row, col), mtd_digitizer::MTDCellInfo()).first; // --- Get the simHit energy and convert it from MeV to photo-electrons - float Npe = 1000. * hit.energyLoss() * LightYield_ * LightCollEff_ * PDE_; + float Npe = convertGeVToMeV(hit.energyLoss()) * LightYield_ * LightCollEff_ * PDE_; // --- Calculate the light propagation time to the crystal bases (labeled L and R) - double distR = 0.5 * topo.pitch().first - 0.1 * hit.localPosition().x(); - double distL = 0.5 * topo.pitch().first + 0.1 * hit.localPosition().x(); + double distR = 0.5 * topo.pitch().first - convertMmToCm(hit.localPosition().x()); + double distL = 0.5 * topo.pitch().first + convertMmToCm(hit.localPosition().x()); double tR = std::get<2>(hitRef) + LightCollSlopeR_ * distR; double tL = std::get<2>(hitRef) + LightCollSlopeL_ * distL; diff --git a/SimFastTiming/FastTimingCommon/src/ETLDeviceSim.cc b/SimFastTiming/FastTimingCommon/src/ETLDeviceSim.cc index 54421db944e19..5e5df0868e313 100644 --- a/SimFastTiming/FastTimingCommon/src/ETLDeviceSim.cc +++ b/SimFastTiming/FastTimingCommon/src/ETLDeviceSim.cc @@ -1,5 +1,6 @@ #include "CLHEP/Units/GlobalPhysicalConstants.h" #include "SimFastTiming/FastTimingCommon/interface/ETLDeviceSim.h" +#include "DataFormats/Math/interface/GeantUnits.h" #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/ForwardDetId/interface/MTDDetId.h" #include "DataFormats/ForwardDetId/interface/ETLDetId.h" @@ -23,6 +24,8 @@ void ETLDeviceSim::getHitsResponse(const std::vector& hits, mtd_digitizer::MTDSimHitDataAccumulator* simHitAccumulator, CLHEP::HepRandomEngine* hre) { + using namespace geant_units::operators; + //loop over sorted hits const int nchits = hitRefs.size(); for (int i = 0; i < nchits; ++i) { @@ -50,13 +53,13 @@ void ETLDeviceSim::getHitsResponse(const std::vector(hitRefs[i]) + tofDelay_; const PSimHit& hit = hits->at(hitidx); - const float charge = 1000.f * hit.energyLoss() * MIPPerMeV_; + const float charge = convertGeVToMeV(hit.energyLoss()) * MIPPerMeV_; // calculate the simhit row and column const auto& pentry = hit.entryPoint(); // ETL is already in module-local coordinates so just scale to cm from mm - Local3DPoint simscaled(0.1 * pentry.x(), 0.1 * pentry.y(), 0.1 * pentry.z()); - const auto& thepixel = topo.pixel(simscaled); // mm -> cm here is the switch + Local3DPoint simscaled(convertMmToCm(pentry.x()), convertMmToCm(pentry.y()), convertMmToCm(pentry.z())); + const auto& thepixel = topo.pixel(simscaled); const uint8_t row(thepixel.first), col(thepixel.second); auto simHitIt = diff --git a/SimG4CMS/Calo/interface/CaloG4Hit.h b/SimG4CMS/Calo/interface/CaloG4Hit.h index 55e22de003429..f96f2e7d4986e 100644 --- a/SimG4CMS/Calo/interface/CaloG4Hit.h +++ b/SimG4CMS/Calo/interface/CaloG4Hit.h @@ -62,6 +62,7 @@ class CaloG4Hit : public G4VHit { void setIncidentEnergy(double e) { theIncidentEnergy = e; } int getTrackID() const { return hitID.trackID(); } + uint32_t getUnitID() const { return hitID.unitID(); } double getTimeSlice() const { return hitID.timeSlice(); } int getTimeSliceID() const { return hitID.timeSliceID(); } @@ -97,6 +98,8 @@ class CaloG4HitLess { return (a->getUnitID() < b->getUnitID()); } else if (a->getDepth() != b->getDepth()) { return (a->getDepth() < b->getDepth()); + } else if (a->getID().fineTrackID() != b->getID().fineTrackID()) { + return (a->getID().fineTrackID() < b->getID().fineTrackID()); } else { return (a->getTimeSliceID() < b->getTimeSliceID()); } @@ -107,7 +110,7 @@ class CaloG4HitEqual { public: bool operator()(const CaloG4Hit* a, const CaloG4Hit* b) { return (a->getTrackID() == b->getTrackID() && a->getUnitID() == b->getUnitID() && a->getDepth() == b->getDepth() && - a->getTimeSliceID() == b->getTimeSliceID()); + a->getTimeSliceID() == b->getTimeSliceID() && a->getID().fineTrackID() == b->getID().fineTrackID()); } }; diff --git a/SimG4CMS/Calo/interface/CaloHitID.h b/SimG4CMS/Calo/interface/CaloHitID.h index 5f644f93d6421..d44a4b61f79f5 100644 --- a/SimG4CMS/Calo/interface/CaloHitID.h +++ b/SimG4CMS/Calo/interface/CaloHitID.h @@ -25,6 +25,11 @@ class CaloHitID { void setID(uint32_t unitID, double timeSlice, int trackID, uint16_t depth = 0); void reset(); + void setTrackID(int trackID) { theTrackID = trackID; } + bool hasFineTrackID() const { return theFineTrackID != -1; } + void setFineTrackID(int fineTrackID) { theFineTrackID = fineTrackID; } + int fineTrackID() const { return hasFineTrackID() ? theFineTrackID : theTrackID; } + bool operator==(const CaloHitID&) const; bool operator<(const CaloHitID&) const; bool operator>(const CaloHitID&) const; @@ -37,6 +42,7 @@ class CaloHitID { uint16_t theDepth; float timeSliceUnit; bool ignoreTrackID; + int theFineTrackID; }; std::ostream& operator<<(std::ostream&, const CaloHitID&); diff --git a/SimG4CMS/Calo/interface/CaloSD.h b/SimG4CMS/Calo/interface/CaloSD.h index b35ccb72ffd5a..d8fa50d3531a0 100644 --- a/SimG4CMS/Calo/interface/CaloSD.h +++ b/SimG4CMS/Calo/interface/CaloSD.h @@ -84,6 +84,9 @@ class CaloSD : public SensitiveCaloDetector, void resetForNewPrimary(const G4Step*); double getAttenuation(const G4Step* aStep, double birk1, double birk2, double birk3) const; + static std::string printableDecayChain(const std::vector& decayChain); + void hitBookkeepingFineCalo(const G4Step* step, const G4Track* currentTrack, CaloG4Hit* hit); + void update(const BeginOfRun*) override; void update(const BeginOfEvent*) override; void update(const BeginOfTrack* trk) override; @@ -174,7 +177,8 @@ class CaloSD : public SensitiveCaloDetector, float timeSlice; double eminHitD; double correctT; - bool useFineCaloID_; + bool doFineCalo_; + double eMinFine_; std::map hitMap; std::map tkMap; diff --git a/SimG4CMS/Calo/interface/CaloTrkProcessing.h b/SimG4CMS/Calo/interface/CaloTrkProcessing.h index fd436d0de7a87..34fc6d225ce1a 100644 --- a/SimG4CMS/Calo/interface/CaloTrkProcessing.h +++ b/SimG4CMS/Calo/interface/CaloTrkProcessing.h @@ -7,6 +7,8 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "G4VTouchable.hh" +#include "G4Track.hh" +#include "DataFormats/Math/interface/LorentzVector.h" #include #include @@ -58,7 +60,7 @@ class CaloTrkProcessing : public SensitiveCaloDetector, void detectorLevel(const G4VTouchable*, int&, int*, G4String*) const; bool testBeam_, putHistory_, doFineCalo_; - double eMin_, eMinFine_, eMinFinePhoton_; + double eMin_, eMinFine_; int lastTrackID_; std::vector detectors_, fineDetectors_; }; diff --git a/SimG4CMS/Calo/plugins/BuildFile.xml b/SimG4CMS/Calo/plugins/BuildFile.xml index 9957d5d37862e..f75182a06fe4b 100644 --- a/SimG4CMS/Calo/plugins/BuildFile.xml +++ b/SimG4CMS/Calo/plugins/BuildFile.xml @@ -8,6 +8,7 @@ + diff --git a/SimG4CMS/Calo/plugins/HGCalHitIdCheck.cc b/SimG4CMS/Calo/plugins/HGCalHitIdCheck.cc new file mode 100644 index 0000000000000..7aa3b028c3f55 --- /dev/null +++ b/SimG4CMS/Calo/plugins/HGCalHitIdCheck.cc @@ -0,0 +1,127 @@ +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Utilities/interface/Exception.h" + +#include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h" +#include "DataFormats/ForwardDetId/interface/HGCScintillatorDetId.h" + +#include "SimDataFormats/CaloHit/interface/PCaloHit.h" +#include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" + +#include "Geometry/CaloTopology/interface/HGCalTopology.h" +#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" + +#include +#include +#include + +class HGcalHitIdCheck : public edm::one::EDAnalyzer<> { +public: + HGcalHitIdCheck(const edm::ParameterSet& ps); + ~HGcalHitIdCheck() override {} + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +protected: + void analyze(edm::Event const&, edm::EventSetup const&) override; + void beginJob() override {} + void endJob() override {} + +private: + const std::string g4Label_, caloHitSource_, nameSense_, nameDetector_; + const int verbosity_; + const edm::EDGetTokenT tok_calo_; + const edm::ESGetToken geomToken_; +}; + +HGcalHitIdCheck::HGcalHitIdCheck(const edm::ParameterSet& ps) + : g4Label_(ps.getParameter("moduleLabel")), + caloHitSource_(ps.getParameter("caloHitSource")), + nameSense_(ps.getParameter("nameSense")), + nameDetector_(ps.getParameter("nameDevice")), + verbosity_(ps.getParameter("Verbosity")), + tok_calo_(consumes(edm::InputTag(g4Label_, caloHitSource_))), + geomToken_(esConsumes(edm::ESInputTag{"", nameSense_})) { + edm::LogVerbatim("HitStudy") << "Test Hit ID for " << nameDetector_ << " using SimHits for " << nameSense_ + << " with module Label: " << g4Label_ << " Hits: " << caloHitSource_; +} + +void HGcalHitIdCheck::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("moduleLabel", "g4SimHits"); + desc.add("caloHitSource", "HGCHitsEE"); + desc.add("nameSense", "HGCalEESensitive"); + desc.add("nameDevice", "HGCal EE"); + desc.add("Verbosity", 0); + descriptions.add("hgcalHitIdCheckEE", desc); +} + +void HGcalHitIdCheck::analyze(const edm::Event& e, const edm::EventSetup& iS) { + if (verbosity_ > 0) + edm::LogVerbatim("HitStudy") << "Run = " << e.id().run() << " Event = " << e.id().event(); + + // get hcalGeometry + const HGCalGeometry* geom = &iS.getData(geomToken_); + const std::vector& validIds = geom->getValidDetIds(); + + edm::Handle hitsCalo; + e.getByToken(tok_calo_, hitsCalo); + bool getHits = (hitsCalo.isValid()); + uint32_t nhits = (getHits) ? hitsCalo->size() : 0; + uint32_t good(0), all(0); + if (verbosity_ > 1) + edm::LogVerbatim("HitStudy") << "HGcalHitIdCheck: Input flags Hits " << getHits << " with " << nhits << " hits"; + + if (getHits) { + std::vector hits; + hits.insert(hits.end(), hitsCalo->begin(), hitsCalo->end()); + if (!hits.empty()) { + for (auto hit : hits) { + ++all; + DetId id(hit.id()); + if (std::find(validIds.begin(), validIds.end(), id) != validIds.end()) { + ++good; + if (verbosity_ > 2) { + if ((id.det() == DetId::HGCalEE) || (id.det() == DetId::HGCalHSi)) { + edm::LogVerbatim("HitStudy") << "Hit[" << all << ":" << good << "]" << HGCSiliconDetId(id); + } else if (id.det() == DetId::HGCalHSc) { + edm::LogVerbatim("HitStudy") << "Hit[" << all << ":" << good << "]" << HGCScintillatorDetId(id); + } else { + edm::LogVerbatim("HitStudy") << "Hit[" << all << ":" << good << "]" << std::hex << id.rawId() << std::dec; + } + } + } else { + if (verbosity_ > 0) { + if ((id.det() == DetId::HGCalEE) || (id.det() == DetId::HGCalHSi)) { + edm::LogVerbatim("HitStudy") + << "Hit[" << all << ":" << good << "]" << HGCSiliconDetId(id) << " not valid *****"; + } else if (id.det() == DetId::HGCalHSc) { + HGCScintillatorDetId hid1(id); + HGCScintillatorDetId hid2(hid1.type(), hid1.layer(), hid1.ring(), hid1.iphi(), false, 0); + bool ok = (std::find(validIds.begin(), validIds.end(), DetId(hid2)) != validIds.end()); + edm::LogVerbatim("HitStudy") << "Hit[" << all << ":" << good << "]" << hid1 << " not valid ***** but " + << hid2 << " in list " << ok; + } else { + edm::LogVerbatim("HitStudy") + << "Hit[" << all << ":" << good << "]" << std::hex << id.rawId() << std::dec << " not valid *****"; + } + } + } + } + } + } + edm::LogVerbatim("HitStudy") << "Total hits = " << all << ":" << nhits << " Good DetIds = " << good + << " Invalid DetIds = " << (all - good); +} + +//define this as a plug-in +DEFINE_FWK_MODULE(HGcalHitIdCheck); diff --git a/SimG4CMS/Calo/plugins/HcalSimHitDump.cc b/SimG4CMS/Calo/plugins/HcalSimHitDump.cc index 055a6772fbbc1..a1a791270386c 100644 --- a/SimG4CMS/Calo/plugins/HcalSimHitDump.cc +++ b/SimG4CMS/Calo/plugins/HcalSimHitDump.cc @@ -1,5 +1,5 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" @@ -7,6 +7,7 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/Utilities/interface/InputTag.h" #include "FWCore/Utilities/interface/Exception.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -28,10 +29,11 @@ #include #include -class HcalSimHitDump : public edm::EDAnalyzer { +class HcalSimHitDump : public edm::one::EDAnalyzer<> { public: HcalSimHitDump(const edm::ParameterSet& ps); ~HcalSimHitDump() override {} + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); protected: void beginJob() override {} @@ -41,21 +43,33 @@ class HcalSimHitDump : public edm::EDAnalyzer { void analyzeHits(std::vector&); private: - std::string g4Label_, hitLab_; + const std::string g4Label_, hitLab_; + const int maxEvent_; + const bool testNumber_; edm::EDGetTokenT toks_calo_; - int nevt_, maxEvent_; + int nevt_; }; -HcalSimHitDump::HcalSimHitDump(const edm::ParameterSet& ps) : nevt_(0) { - g4Label_ = ps.getUntrackedParameter("ModuleLabel", "g4SimHits"); - hitLab_ = ps.getUntrackedParameter("HCCollection", "HcalHits"); - maxEvent_ = ps.getUntrackedParameter("MaxEvent", 10); - +HcalSimHitDump::HcalSimHitDump(const edm::ParameterSet& ps) + : g4Label_(ps.getParameter("ModuleLabel")), + hitLab_(ps.getParameter("HCCollection")), + maxEvent_(ps.getParameter("MaxEvent")), + testNumber_(ps.getParameter("TestNumber")), + nevt_(0) { // register for data access toks_calo_ = consumes(edm::InputTag(g4Label_, hitLab_)); edm::LogVerbatim("HitStudy") << "HcalSimHitDump::Module Label: " << g4Label_ << " Hits: " << hitLab_ << " MaxEvent " - << maxEvent_; + << maxEvent_ << " TestNumbering " << testNumber_; +} + +void HcalSimHitDump::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("ModuleLabel", "g4SimHits"); + desc.add("HCCollection", "HcalHits"); + desc.add("MaxEvent", 10); + desc.add("TestNumber", true); + descriptions.add("hcalSimHitDump", desc); } void HcalSimHitDump::analyze(const edm::Event& e, const edm::EventSetup&) { @@ -78,22 +92,12 @@ void HcalSimHitDump::analyze(const edm::Event& e, const edm::EventSetup&) { } void HcalSimHitDump::analyzeHits(std::vector& hits) { - bool testN(false); - for (unsigned int k = 1; k < hits.size(); ++k) { - int det = (((hits[k].id()) >> 28) & 0xF); - if (det != 4) { - testN = true; - break; - } - } - edm::LogVerbatim("HitStudy") << "Hit ID uses numbering scheme " << testN << " (0 normal; 1 test)"; - //Now the dump for (unsigned int i = 0; i < hits.size(); i++) { double edep = hits[i].energy(); double time = hits[i].time(); unsigned int id_ = hits[i].id(); - if (testN) { + if (testNumber_) { int det, z, depth, eta, phi, lay; HcalTestNumbering::unpackHcalIndex(id_, det, z, depth, eta, phi, lay); std::string sub("HX"); diff --git a/SimG4CMS/Calo/python/hgcalHitIdCheck_cff.py b/SimG4CMS/Calo/python/hgcalHitIdCheck_cff.py new file mode 100644 index 0000000000000..3f51229c0cee6 --- /dev/null +++ b/SimG4CMS/Calo/python/hgcalHitIdCheck_cff.py @@ -0,0 +1,13 @@ +import FWCore.ParameterSet.Config as cms + +from SimG4CMS.Calo.hgcalHitIdCheckEE_cfi import * + +hgcalHitIdCheckHEF = hgcalHitIdCheckEE.clone( + nameDevice = cms.string("HGCal HE Silicon"), + nameSense = cms.string("HGCalHESiliconSensitive"), + caloHitSource = cms.string("HGCHitsHEfront")) + +hgcalHitIdCheckHEB = hgcalHitIdCheckEE.clone( + nameDevice = cms.string("HGCal HE Scinitillator"), + nameSense = cms.string("HGCalHEScintillatorSensitive"), + caloHitSource = cms.string("HGCHitsHEback")) diff --git a/SimG4CMS/Calo/src/CaloHitID.cc b/SimG4CMS/Calo/src/CaloHitID.cc index fa64c6f07e136..2854a27f68909 100644 --- a/SimG4CMS/Calo/src/CaloHitID.cc +++ b/SimG4CMS/Calo/src/CaloHitID.cc @@ -1,4 +1,4 @@ -/////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// // File: CaloHitID.cc // Description: Identifier for a calorimetric hit /////////////////////////////////////////////////////////////////////////////// @@ -7,7 +7,7 @@ #include CaloHitID::CaloHitID(uint32_t unitID, double timeSlice, int trackID, uint16_t depth, float tSlice, bool ignoreTkID) - : timeSliceUnit(tSlice), ignoreTrackID(ignoreTkID) { + : timeSliceUnit(tSlice), ignoreTrackID(ignoreTkID), theFineTrackID(-1) { setID(unitID, timeSlice, trackID, depth); } @@ -21,6 +21,7 @@ CaloHitID::CaloHitID(const CaloHitID& id) { theDepth = id.theDepth; timeSliceUnit = id.timeSliceUnit; ignoreTrackID = id.ignoreTrackID; + theFineTrackID = id.theFineTrackID; } const CaloHitID& CaloHitID::operator=(const CaloHitID& id) { @@ -31,7 +32,7 @@ const CaloHitID& CaloHitID::operator=(const CaloHitID& id) { theDepth = id.theDepth; timeSliceUnit = id.timeSliceUnit; ignoreTrackID = id.ignoreTrackID; - + theFineTrackID = id.theFineTrackID; return *this; } @@ -51,11 +52,12 @@ void CaloHitID::reset() { theTrackID = -2; theTimeSliceID = (int)(theTimeSlice / timeSliceUnit); theDepth = 0; + theFineTrackID = -1; } bool CaloHitID::operator==(const CaloHitID& id) const { return ((theUnitID == id.unitID()) && (theTrackID == id.trackID() || ignoreTrackID) && - (theTimeSliceID == id.timeSliceID()) && (theDepth == id.depth())) + (theTimeSliceID == id.timeSliceID()) && (theDepth == id.depth()) && (fineTrackID() == id.fineTrackID())) ? true : false; } @@ -63,6 +65,8 @@ bool CaloHitID::operator==(const CaloHitID& id) const { bool CaloHitID::operator<(const CaloHitID& id) const { if (theTrackID != id.trackID()) { return (theTrackID > id.trackID()); + } else if (fineTrackID() != id.fineTrackID()) { + return (fineTrackID() > id.fineTrackID()); } else if (theUnitID != id.unitID()) { return (theUnitID > id.unitID()); } else if (theDepth != id.depth()) { @@ -75,6 +79,8 @@ bool CaloHitID::operator<(const CaloHitID& id) const { bool CaloHitID::operator>(const CaloHitID& id) const { if (theTrackID != id.trackID()) { return (theTrackID < id.trackID()); + } else if (fineTrackID() != id.fineTrackID()) { + return (fineTrackID() < id.fineTrackID()); } else if (theUnitID != id.unitID()) { return (theUnitID < id.unitID()); } else if (theDepth != id.depth()) { @@ -87,5 +93,7 @@ bool CaloHitID::operator>(const CaloHitID& id) const { std::ostream& operator<<(std::ostream& os, const CaloHitID& id) { os << "UnitID 0x" << std::hex << id.unitID() << std::dec << " Depth " << std::setw(6) << id.depth() << " Time " << std::setw(6) << id.timeSlice() << " TrackID " << std::setw(8) << id.trackID(); + if (id.hasFineTrackID()) + os << " fineTrackID " << id.fineTrackID(); return os; } diff --git a/SimG4CMS/Calo/src/CaloSD.cc b/SimG4CMS/Calo/src/CaloSD.cc index d322a2147e72c..e3ef252b27292 100644 --- a/SimG4CMS/Calo/src/CaloSD.cc +++ b/SimG4CMS/Calo/src/CaloSD.cc @@ -11,6 +11,7 @@ #include "Geometry/Records/interface/HcalParametersRcd.h" #include "CondFormats/GeometryObjects/interface/CaloSimulationParameters.h" #include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Utilities/interface/Exception.h" #include "G4EventManager.hh" #include "G4LogicalVolumeStore.hh" @@ -21,12 +22,13 @@ #include "G4VProcess.hh" #include "G4GFlashSpot.hh" #include "G4ParticleTable.hh" - #include "G4SystemOfUnits.hh" #include "G4PhysicalConstants.hh" +#include "DD4hep/Filter.h" #include #include +#include //#define EDM_ML_DEBUG @@ -48,6 +50,8 @@ CaloSD::CaloSD(const std::string& name, timeSlice(timeSliceUnit), eminHitD(0.) { //Parameters + bool dd4hep = p.getParameter("g4GeometryDD4hepSource"); + int addlevel = dd4hep ? 1 : 0; edm::ParameterSet m_CaloSD = p.getParameter("CaloSD"); energyCut = m_CaloSD.getParameter("EminTrack") * CLHEP::GeV; tmaxHit = m_CaloSD.getParameter("TmaxHit") * CLHEP::ns; @@ -66,7 +70,13 @@ CaloSD::CaloSD(const std::string& name, corrTOFBeam = m_CaloSD.getParameter("CorrectTOFBeam"); double beamZ = m_CaloSD.getParameter("BeamPosition") * CLHEP::cm; correctT = beamZ / CLHEP::c_light / CLHEP::nanosecond; - useFineCaloID_ = m_CaloSD.getParameter("UseFineCaloID"); + doFineCalo_ = m_CaloSD.getParameter("DoFineCalo"); + eMinFine_ = m_CaloSD.getParameter("EminFineTrack") * CLHEP::MeV; + std::vector fineNames = m_CaloSD.getParameter>("FineCaloNames"); + std::vector fineLevels = m_CaloSD.getParameter>("FineCaloLevels"); + std::vector useFines = m_CaloSD.getParameter>("UseFineCalo"); + for (auto& level : fineLevels) + level += addlevel; SetVerboseLevel(verbn); meanResponse.reset(nullptr); @@ -104,49 +114,46 @@ CaloSD::CaloSD(const std::string& name, << " ns (Flag =" << corrTOFBeam << ")\n Save hits recorded before " << tmaxHit << " ns and if energy is above " << eminHit / CLHEP::MeV << " MeV (for depth 0) or " << eminHitD / CLHEP::MeV << " MeV (for nonzero depths);\n Time Slice Unit " - << timeSlice << "\nIgnore TrackID Flag " << ignoreTrackID << " UseFineCaloID flag " - << useFineCaloID_; - - // Get pointer to CaloSimulationParameters - edm::ESHandle csps; - es.get().get(csps); - if (csps.isValid()) { - const CaloSimulationParameters* csp = csps.product(); - edm::LogVerbatim("CaloSim") << "CaloSD: " << csp->fCaloNames_.size() << " entries for fineCalorimeters:"; - for (unsigned int i = 0; i < csp->fCaloNames_.size(); i++) - edm::LogVerbatim("CaloSim") << " [" << i << "] " << csp->fCaloNames_[i] << ":" << csp->fLevels_[i]; - - const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance(); - std::vector::const_iterator lvcite; - for (unsigned int i = 0; i < csp->fCaloNames_.size(); i++) { - G4LogicalVolume* lv = nullptr; - G4String name = static_cast(csp->fCaloNames_[i]); - for (lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++) { - if ((*lvcite)->GetName() == name) { - lv = (*lvcite); - break; - } - } - if (lv != nullptr) { - CaloSD::Detector detector; - detector.name = name; - detector.lv = lv; - detector.level = csp->fLevels_[i]; - fineDetectors_.emplace_back(detector); + << timeSlice << "\nIgnore TrackID Flag " << ignoreTrackID << " doFineCalo flag " + << doFineCalo_; + + // Treat fine calorimeters + edm::LogVerbatim("CaloSim") << "CaloSD: Have a possibility of " << fineNames.size() << " fine calorimeters of which " + << useFines.size() << " are selected"; + for (unsigned int k = 0; k < fineNames.size(); ++k) + edm::LogVerbatim("CaloSim") << "[" << k << "] " << fineNames[k] << " at " << fineLevels[k]; + std::ostringstream st1; + for (unsigned int k = 0; k < useFines.size(); ++k) + st1 << " [" << k << "] " << useFines[k] << ":" << fineNames[useFines[k]]; + edm::LogVerbatim("CaloSim") << "CaloSD used calorimeters" << st1.str(); + const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance(); + std::vector::const_iterator lvcite; + for (unsigned int i = 0; i < useFines.size(); i++) { + G4LogicalVolume* lv = nullptr; + G4String name = static_cast(fineNames[useFines[i]]); + for (lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++) { + G4String namx(static_cast(dd4hep::dd::noNamespace((*lvcite)->GetName()))); + if (namx == name) { + lv = (*lvcite); + break; } } -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("CaloSim") << "CaloSD::Loads information for " << fineDetectors_.size() << " fine detectors"; - unsigned int k(0); - for (const auto& detector : fineDetectors_) { - edm::LogVerbatim("CaloSim") << "Detector[" << k << "] " << detector.name << " at level " << detector.level - << " pointer to LV: " << detector.lv; + if (lv != nullptr) { + CaloSD::Detector detector; + detector.name = name; + detector.lv = lv; + detector.level = fineLevels[useFines[i]]; + fineDetectors_.emplace_back(detector); } -#endif - } else { - edm::LogError("CaloSim") << "CaloSD: Cannot find CaloSimulationParameters"; - throw cms::Exception("Unknown", "CaloSD") << "Cannot find CaloSimulationParameters\n"; } +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("CaloSim") << "CaloSD::Loads information for " << fineDetectors_.size() << " fine detectors"; + unsigned int k(0); + for (const auto& detector : fineDetectors_) { + edm::LogVerbatim("CaloSim") << "Detector[" << k << "] " << detector.name << " at level " << detector.level + << " pointer to LV: " << detector.lv; + } +#endif } CaloSD::~CaloSD() {} @@ -223,6 +230,10 @@ G4bool CaloSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) { #endif if (!hitExists(aStep)) { currentHit = createNewHit(aStep, aStep->GetTrack()); + } else { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("DoFineCalo") << "Not creating new hit, only updating currentHit " << currentHit->getUnitID(); +#endif } return true; } @@ -344,7 +355,10 @@ void CaloSD::EndOfEvent(G4HCofThisEvent*) { cleanHitCollection(); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("CaloSim") << "CaloSD: EndofEvent entered with " << theHC->entries() << " entries"; + if (theHC == nullptr) + edm::LogVerbatim("CaloSim") << "CaloSD: EndofEvent entered with no entries"; + else + edm::LogVerbatim("CaloSim") << "CaloSD: EndofEvent entered with " << theHC->entries() << " entries"; #endif } @@ -385,6 +399,12 @@ bool CaloSD::hitExists(const G4Step* aStep) { return true; } + // Note T. Klijnsma: + // This is a rather strange place to set these class variables. + // The code would be much more readable if all logic for determining + // whether to update a hit or create a new hit is done in one place, + // and only then perform the actual updating or creating of the hit. + // Reset entry point for new primary posGlobal = aStep->GetPreStepPoint()->GetPosition(); if (currentID.trackID() != previousID.trackID()) { @@ -424,6 +444,127 @@ bool CaloSD::checkHit() { int CaloSD::getNumberOfHits() { return theHC->entries(); } +std::string CaloSD::printableDecayChain(const std::vector& decayChain) { + /* + Takes a vector of ints (representing trackIDs), and returns a formatted string + for debugging purposes + */ + std::stringstream ss; + for (long unsigned int i = 0; i < decayChain.size(); i++) { + if (i > 0) + ss << " <- "; + ss << decayChain[i]; + } + return ss.str(); +} + +void CaloSD::hitBookkeepingFineCalo(const G4Step* step, const G4Track* currentTrack, CaloG4Hit* hit) { + /* + Performs bookkeeping: Determines what trackIDs are to be recorded for the hit (typically some + some parent trackID), and also sets the right flags on either the TrackInformation object or + the TrackWithHistory object to make sure the right track is saved to the SimTrack collection. + + `currentTrack` is the track that is currently being processed by Geant + */ + TrackInformation* trkInfo = cmsTrackInformation(currentTrack); + // Copy the class's currentID so we can freely modify it without influencing + // hits created later in possibly non-fine detectors by the same track + CaloHitID hitID = currentID; + // First check if the current currentTrack passes criteria + if (trkInfo->crossedBoundary()) { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("DoFineCalo") << "currentTrack " << currentTrack->GetTrackID() + << " itself has crossedBoundary=" << trkInfo->crossedBoundary() + << " ; recording it for hit " << hit->getUnitID(); +#endif + hitID.setFineTrackID(currentTrack->GetTrackID()); + hit->setID(hitID); // Actually overwrite the ID for the hit + trkInfo->storeTrack(true); + return; + } + // currentTrack itself does not pass thresholds / does not cross boundary; go through its history to find a track that does + TrackWithHistory* recordTrackWithHistory; + // Keep track of decay chain of this track for debugging purposes + std::vector decayChain; + decayChain.push_back(currentTrack->GetTrackID()); + // Find the first parent of this track that passes the required criteria + // Start from first parent + unsigned int recordTrackID = currentTrack->GetParentID(); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("DoFineCalo") << "Trying to find the first parent of hit " << hit->getUnitID() + << " that passes saving criterion (crosses boundary or specific criterion)" + << "; starting with first parent track " << recordTrackID; +#endif + // Check whether this first parent actually exists + if (recordTrackID <= 0) { + // Track ID 0 is not a track; + // This means the current currentTrack has no parent, but apparently it also didn't fit saving criteria + throw cms::Exception("Unknown", "CaloSD") << "ERROR: Track " << currentTrack->GetTrackID() + << " has no parent, does not fit saving criteria, but left hit " + << hit->getUnitID() << "; recording it but it's weird!"; + } + // Start progressing through the track's history + while (true) { + // Record the decay chain for debugging purposes + decayChain.push_back(recordTrackID); + recordTrackWithHistory = m_trackManager->getTrackByID(recordTrackID); + if (recordTrackID < (unsigned int)hitID.trackID()) { + // A parent of the currentTrack has a lower trackID than the current + // hitID.trackID(). This means the current hitID.trackID() does not point + // to the earliest ancestor of the currentTrack. + // The current hitID.trackID() might not be a saved track yet, but the + // ancestor is *always* a saved track. + // Fix this by overwriting the hitID's track ID. +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("DoFineCalo") << "History-tracking progressed to track " << recordTrackID + << ", which is an earlier ancestor than current primary " << hitID.trackID() + << "; overwriting it."; +#endif + hitID.setTrackID(recordTrackID); + } + // Check if this parent fits the boundary-crossing criteria + if (recordTrackWithHistory->crossedBoundary() && recordTrackWithHistory->getIDAtBoundary() == (int)recordTrackID) { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("DoFineCalo") << "Recording track " << recordTrackID << " as source of hit " << hit->getUnitID() + << "; crossed boundary at pos=(" + << recordTrackWithHistory->getPositionAtBoundary().x() << "," + << recordTrackWithHistory->getPositionAtBoundary().y() << "," + << recordTrackWithHistory->getPositionAtBoundary().z() << ")" + << " mom=(" << recordTrackWithHistory->getMomentumAtBoundary().x() << "," + << recordTrackWithHistory->getMomentumAtBoundary().y() << "," + << recordTrackWithHistory->getMomentumAtBoundary().z() << "," + << recordTrackWithHistory->getMomentumAtBoundary().e() << ")" + << " id@boundary=" << recordTrackWithHistory->getIDAtBoundary() + << "; decayChain: " << printableDecayChain(decayChain); +#endif + break; + } + // This parent track did not fit criteria - go to the next parent +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("DoFineCalo") << "Track " << recordTrackID << " did not cross the boundary or fit other criteria"; +#endif + recordTrackID = recordTrackWithHistory->parentID(); + if (recordTrackID <= 0) { + // Track ID 0 is not a track; + // This means that no parent of the currentTrack fitted the criteria + throw cms::Exception("Unknown", "CaloSD") + << "Hit " << hit->getUnitID() << " does not have any parent track that passes the criteria!" + << " decayChain so far: " << printableDecayChain(decayChain); + } + } + // Parentage traversal done - do the bookeeping for the found ancestor track + recordTrackWithHistory->save(); + hitID.setFineTrackID(recordTrackID); + hit->setID(hitID); // Actually overwrite the ID for the hit +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("DoFineCalo") << "Stored the following bookeeping for hit " << hit->getUnitID() + << " hitID.trackID()=" << hitID.trackID() + << " hitID.fineTrackID()=" << hitID.fineTrackID() + << " recordTrackWithHistory->trackID()=" << recordTrackWithHistory->trackID() + << " recordTrackWithHistory->saved()=" << recordTrackWithHistory->saved(); +#endif +} + CaloG4Hit* CaloSD::createNewHit(const G4Step* aStep, const G4Track* theTrack) { #ifdef EDM_ML_DEBUG edm::LogVerbatim("CaloSim") << "CaloSD::CreateNewHit " << getNumberOfHits() << " for " << GetName() @@ -455,36 +596,63 @@ CaloG4Hit* CaloSD::createNewHit(const G4Step* aStep, const G4Track* theTrack) { updateHit(aHit); storeHit(aHit); - double etrack = 0; - if (currentID.trackID() == primIDSaved) { // The track is saved; nothing to be done - } else if (currentID.trackID() == theTrack->GetTrackID()) { - etrack = theTrack->GetKineticEnergy(); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("CaloSim") << "CaloSD: set save the track " << currentID.trackID() << " etrack " << etrack - << " eCut " << energyCut << " force: " << forceSave - << " save: " << (etrack >= energyCut || forceSave); -#endif - if (etrack >= energyCut || forceSave) { - TrackInformation* trkInfo = cmsTrackInformation(theTrack); - trkInfo->storeTrack(true); - trkInfo->putInHistory(); - } - } else { - TrackWithHistory* trkh = tkMap[currentID.trackID()]; + TrackInformation* trkInfo = cmsTrackInformation(theTrack); + + bool currentlyInsideFineVolume = isItFineCalo(aStep->GetPostStepPoint()->GetTouchable()); + +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("DoFineCalo") << "Creating new hit " << aHit->getUnitID() << " using " + << (currentlyInsideFineVolume ? "FINECALO" : "normal CaloSD") + << "; currentID.trackID=" << currentID.trackID() + << " currentID.fineTrackID=" << currentID.fineTrackID() + << " isItFineCalo(aStep->GetPostStepPoint()->GetTouchable())=" + << isItFineCalo(aStep->GetPostStepPoint()->GetTouchable()) + << " isItFineCalo(aStep->GetPreStepPoint()->GetTouchable())=" + << isItFineCalo(aStep->GetPreStepPoint()->GetTouchable()) + << " theTrack=" << theTrack->GetTrackID() << " (" + << " parentTrackId=" << theTrack->GetParentID() + << " getIDonCaloSurface=" << trkInfo->getIDonCaloSurface() << ")" + << " primIDSaved=" << primIDSaved; +#endif + + // If fine calo is activated for the current volume, perform track/hit + // saving logic for fineCalo + if (doFineCalo_ && currentlyInsideFineVolume) { + hitBookkeepingFineCalo(aStep, theTrack, aHit); + } + // 'Traditional', non-fine history bookkeeping + else { + double etrack = 0; + if (currentID.trackID() == primIDSaved) { // The track is saved; nothing to be done + } else if (currentID.trackID() == theTrack->GetTrackID()) { + etrack = theTrack->GetKineticEnergy(); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("CaloSim") << "CaloSD: set save the track " << currentID.trackID() << " etrack " << etrack + << " eCut " << energyCut << " force: " << forceSave + << " save: " << (etrack >= energyCut || forceSave); +#endif + if (etrack >= energyCut || forceSave) { + trkInfo->storeTrack(true); + trkInfo->putInHistory(); + } + } else { + TrackWithHistory* trkh = tkMap[currentID.trackID()]; #ifdef EDM_ML_DEBUG - edm::LogVerbatim("CaloSim") << "CaloSD : TrackwithHistory pointer for " << currentID.trackID() << " is " << trkh; + edm::LogVerbatim("CaloSim") << "CaloSD : TrackWithHistory pointer for " << currentID.trackID() << " is " << trkh; #endif - if (trkh != nullptr) { - etrack = sqrt(trkh->momentum().Mag2()); - if (etrack >= energyCut) { - trkh->save(); + if (trkh != nullptr) { + etrack = sqrt(trkh->momentum().Mag2()); + if (etrack >= energyCut) { + trkh->save(); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("CaloSim") << "CaloSD: set save the track " << currentID.trackID() << " with Hit"; + edm::LogVerbatim("CaloSim") << "CaloSD: set save the track " << currentID.trackID() << " with Hit"; #endif + } } } + primIDSaved = currentID.trackID(); } - primIDSaved = currentID.trackID(); + if (useMap) ++totalHits; return aHit; @@ -654,13 +822,12 @@ void CaloSD::endEvent() {} int CaloSD::getTrackID(const G4Track* aTrack) { int primaryID = 0; - forceSave = false; TrackInformation* trkInfo = cmsTrackInformation(aTrack); if (trkInfo) { - primaryID = (useFineCaloID_) ? trkInfo->getIDfineCalo() : trkInfo->getIDonCaloSurface(); + primaryID = trkInfo->getIDonCaloSurface(); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("CaloSim") << "Track ID: " << trkInfo->getIDfineCalo() << ":" << trkInfo->getIDonCaloSurface() - << ":" << aTrack->GetTrackID() << ":" << primaryID; + edm::LogVerbatim("CaloSim") << "Track ID: " << trkInfo->getIDonCaloSurface() << ":" << aTrack->GetTrackID() << ":" + << primaryID; #endif } else { primaryID = aTrack->GetTrackID(); @@ -674,13 +841,13 @@ int CaloSD::getTrackID(const G4Track* aTrack) { int CaloSD::setTrackID(const G4Step* aStep) { auto const theTrack = aStep->GetTrack(); TrackInformation* trkInfo = cmsTrackInformation(theTrack); - int primaryID = (useFineCaloID_) ? trkInfo->getIDfineCalo() : trkInfo->getIDonCaloSurface(); + int primaryID = trkInfo->getIDonCaloSurface(); if (primaryID <= 0) { primaryID = theTrack->GetTrackID(); } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("CaloSim") << "Track ID: " << trkInfo->getIDfineCalo() << ":" << trkInfo->getIDonCaloSurface() << ":" - << theTrack->GetTrackID() << ":" << primaryID; + edm::LogVerbatim("CaloSim") << "Track ID: " << trkInfo->getIDonCaloSurface() << ":" << theTrack->GetTrackID() << ":" + << primaryID; #endif if (primaryID != previousID.trackID()) { @@ -730,30 +897,62 @@ void CaloSD::storeHit(CaloG4Hit* hit) { bool CaloSD::saveHit(CaloG4Hit* aHit) { int tkID; bool ok = true; - if (m_trackManager) { - tkID = m_trackManager->giveMotherNeeded(aHit->getTrackID()); - if (tkID == 0) { - if (m_trackManager->trackExists(aHit->getTrackID())) - tkID = (aHit->getTrackID()); - else { + + double time = aHit->getTimeSlice(); + if (corrTOFBeam) + time += correctT; + + // Do track bookkeeping a little differently for fine tracking + if (doFineCalo_ && aHit->getID().hasFineTrackID()) { + tkID = aHit->getID().fineTrackID(); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("DoFineCalo") << "Saving hit " << aHit->getUnitID() << " with trackID=" << tkID; +#endif + // Check if the track is actually in the trackManager + if (m_trackManager) { + if (!m_trackManager->trackExists(tkID)) { ok = false; + throw cms::Exception("Unknown", "CaloSD") + << "aHit " << aHit->getUnitID() << " has fine trackID " << tkID << ", which is NOT IN THE TRACK MANAGER"; } + } else { + ok = false; + throw cms::Exception("Unknown", "CaloSD") << "m_trackManager not set, saveHit ok=false!"; } - } else { - tkID = aHit->getTrackID(); - ok = false; + // Take the aHit-information and move it to the actual PCaloHitContainer + slave.get()->processHits( + aHit->getUnitID(), aHit->getEM() / CLHEP::GeV, aHit->getHadr() / CLHEP::GeV, time, tkID, aHit->getDepth()); } + // Regular, not-fine way: + else { + if (m_trackManager) { + tkID = m_trackManager->giveMotherNeeded(aHit->getTrackID()); + if (tkID == 0) { + if (m_trackManager->trackExists(aHit->getTrackID())) + tkID = (aHit->getTrackID()); + else { + ok = false; + } + } + } else { + tkID = aHit->getTrackID(); + ok = false; + } +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("DoFineCalo") << "Saving hit " << aHit->getUnitID() << " with trackID=" << tkID + << " (no fineTrackID)"; +#endif + slave.get()->processHits( + aHit->getUnitID(), aHit->getEM() / CLHEP::GeV, aHit->getHadr() / CLHEP::GeV, time, tkID, aHit->getDepth()); + } + #ifdef EDM_ML_DEBUG if (!ok) edm::LogWarning("CaloSim") << "CaloSD:Cannot find track ID for " << aHit->getTrackID(); edm::LogVerbatim("CaloSim") << "CalosD: Track ID " << aHit->getTrackID() << " changed to " << tkID << " by SimTrackManager Status " << ok; #endif - double time = aHit->getTimeSlice(); - if (corrTOFBeam) - time += correctT; - slave.get()->processHits( - aHit->getUnitID(), aHit->getEM() / CLHEP::GeV, aHit->getHadr() / CLHEP::GeV, time, tkID, aHit->getDepth()); + #ifdef EDM_ML_DEBUG edm::LogVerbatim("CaloSim") << "CaloSD: Store Hit at " << std::hex << aHit->getUnitID() << std::dec << " " << aHit->getDepth() << " due to " << tkID << " in time " << time << " of energy " @@ -804,8 +1003,12 @@ void CaloSD::cleanHitCollection() { #ifdef EDM_ML_DEBUG edm::LogVerbatim("CaloSim") << "CaloSD::cleanHitCollection: sort hits in buffer starting from " << "element = " << cleanIndex; - for (unsigned int i = 0; i < hitvec.size(); ++i) - edm::LogVerbatim("CaloSim") << i << " " << *hitvec[i]; + for (unsigned int i = 0; i < hitvec.size(); ++i) { + if (hitvec[i] == nullptr) + edm::LogVerbatim("CaloSim") << i << " has a null pointer"; + else + edm::LogVerbatim("CaloSim") << i << " " << *hitvec[i]; + } #endif CaloG4HitEqual equal; for (unsigned int i = cleanIndex; i < hitvec.size(); ++i) { @@ -823,8 +1026,12 @@ void CaloSD::cleanHitCollection() { } #ifdef EDM_ML_DEBUG edm::LogVerbatim("CaloSim") << "CaloSD: cleanHitCollection merge the hits in buffer "; - for (unsigned int i = 0; i < hitvec.size(); ++i) - edm::LogVerbatim("CaloSim") << i << " " << *hitvec[i]; + for (unsigned int i = 0; i < hitvec.size(); ++i) { + if (hitvec[i] == nullptr) + edm::LogVerbatim("CaloSim") << i << " has a null pointer"; + else + edm::LogVerbatim("CaloSim") << i << " " << *hitvec[i]; + } #endif //move all nullptr to end of list and then remove them hitvec.erase( @@ -833,8 +1040,6 @@ void CaloSD::cleanHitCollection() { #ifdef EDM_ML_DEBUG edm::LogVerbatim("CaloSim") << "CaloSD::cleanHitCollection: remove the merged hits in buffer," << " new size = " << hitvec.size(); - for (unsigned int i = 0; i < hitvec.size(); ++i) - edm::LogVerbatim("CaloSim") << i << " " << *hitvec[i]; #endif hitvec.swap(*theCollection); totalHits = theHC->entries(); diff --git a/SimG4CMS/Calo/src/CaloTrkProcessing.cc b/SimG4CMS/Calo/src/CaloTrkProcessing.cc index 8a22f6a553883..9aa88f201e7d6 100644 --- a/SimG4CMS/Calo/src/CaloTrkProcessing.cc +++ b/SimG4CMS/Calo/src/CaloTrkProcessing.cc @@ -12,14 +12,14 @@ #include "FWCore/Utilities/interface/Exception.h" #include "G4EventManager.hh" - #include "G4LogicalVolumeStore.hh" #include "G4LogicalVolume.hh" #include "G4Step.hh" #include "G4Track.hh" - #include "G4SystemOfUnits.hh" +#include "DD4hep/Filter.h" +#include //#define EDM_ML_DEBUG CaloTrkProcessing::CaloTrkProcessing(const std::string& name, @@ -29,17 +29,30 @@ CaloTrkProcessing::CaloTrkProcessing(const std::string& name, const SimTrackManager*) : SensitiveCaloDetector(name, es, clg, p), lastTrackID_(-1) { //Initialise the parameter set + bool dd4hep = p.getParameter("g4GeometryDD4hepSource"); + int addlevel = dd4hep ? 1 : 0; edm::ParameterSet m_p = p.getParameter("CaloTrkProcessing"); testBeam_ = m_p.getParameter("TestBeam"); eMin_ = m_p.getParameter("EminTrack") * CLHEP::MeV; putHistory_ = m_p.getParameter("PutHistory"); doFineCalo_ = m_p.getParameter("DoFineCalo"); eMinFine_ = m_p.getParameter("EminFineTrack") * CLHEP::MeV; - eMinFinePhoton_ = m_p.getParameter("EminFinePhoton") * CLHEP::MeV; + std::vector fineNames = m_p.getParameter >("FineCaloNames"); + std::vector fineLevels = m_p.getParameter >("FineCaloLevels"); + std::vector useFines = m_p.getParameter >("UseFineCalo"); + for (auto& level : fineLevels) + level += addlevel; - edm::LogVerbatim("CaloSim") << "CaloTrkProcessing: Initailised with TestBeam = " << testBeam_ << " Emin = " << eMin_ - << ":" << eMinFine_ << ":" << eMinFinePhoton_ << " MeV and Flags " << putHistory_ - << " (History), " << doFineCalo_ << " (Special Calorimeter)"; + edm::LogVerbatim("CaloSim") << "CaloTrkProcessing: Initialised with TestBeam = " << testBeam_ << " Emin = " << eMin_ + << " Flags " << putHistory_ << " (History), " << doFineCalo_ << " (Special Calorimeter)"; + edm::LogVerbatim("CaloSim") << "CaloTrkProcessing: Have a possibility of " << fineNames.size() + << " fine calorimeters of which " << useFines.size() << " are selected"; + for (unsigned int k = 0; k < fineNames.size(); ++k) + edm::LogVerbatim("CaloSim") << "[" << k << "] " << fineNames[k] << " at " << fineLevels[k]; + std::ostringstream st1; + for (unsigned int k = 0; k < useFines.size(); ++k) + st1 << " [" << k << "] " << useFines[k] << ":" << fineNames[useFines[k]]; + edm::LogVerbatim("CaloSim") << "CaloTrkProcessing used calorimeters" << st1.str(); // Get pointer to CaloSimulationParameters edm::ESHandle csps; @@ -52,7 +65,7 @@ CaloTrkProcessing::CaloTrkProcessing(const std::string& name, edm::LogVerbatim("CaloSim") << " (" << i << ") " << csp->caloNames_[i]; edm::LogVerbatim("CaloSim") << "CaloTrkProcessing: " << csp->levels_.size() << " entries for levels:"; for (unsigned int i = 0; i < csp->levels_.size(); i++) - edm::LogVerbatim("CaloSim") << " (" << i << ") " << csp->levels_[i]; + edm::LogVerbatim("CaloSim") << " (" << i << ") " << (csp->levels_[i] + addlevel); edm::LogVerbatim("CaloSim") << "CaloTrkProcessing: " << csp->neighbours_.size() << " entries for neighbours:"; for (unsigned int i = 0; i < csp->neighbours_.size(); i++) edm::LogVerbatim("CaloSim") << " (" << i << ") " << csp->neighbours_[i]; @@ -61,15 +74,7 @@ CaloTrkProcessing::CaloTrkProcessing(const std::string& name, edm::LogVerbatim("CaloSim") << " (" << i << ") " << csp->insideNames_[i]; edm::LogVerbatim("CaloSim") << "CaloTrkProcessing: " << csp->insideLevel_.size() << " entries for insideLevel:"; for (unsigned int i = 0; i < csp->insideLevel_.size(); i++) - edm::LogVerbatim("CaloSim") << " (" << i << ") " << csp->insideLevel_[i]; - edm::LogVerbatim("CaloSim") << "CaloTrkProcessing: " << csp->fCaloNames_.size() - << " entries for fineCalorimeterNames:"; - for (unsigned int i = 0; i < csp->fCaloNames_.size(); i++) - edm::LogVerbatim("CaloSim") << " (" << i << ") " << csp->fCaloNames_[i]; - edm::LogVerbatim("CaloSim") << "CaloTrkProcessing: " << csp->fLevels_.size() - << " entries for fineCalorimeterLevels:"; - for (unsigned int i = 0; i < csp->fLevels_.size(); i++) - edm::LogVerbatim("CaloSim") << " (" << i << ") " << csp->fLevels_[i]; + edm::LogVerbatim("CaloSim") << " (" << i << ") " << (csp->insideLevel_[i] + addlevel); #endif if (csp->caloNames_.size() < csp->neighbours_.size()) { @@ -84,9 +89,10 @@ CaloTrkProcessing::CaloTrkProcessing(const std::string& name, int istart = 0; for (unsigned int i = 0; i < csp->caloNames_.size(); i++) { G4LogicalVolume* lv = nullptr; - G4String name = static_cast(csp->caloNames_[i]); + G4String name(csp->caloNames_[i]); for (lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++) { - if ((*lvcite)->GetName() == name) { + G4String namx(static_cast(dd4hep::dd::noNamespace((*lvcite)->GetName()))); + if (namx == name) { lv = (*lvcite); break; } @@ -95,7 +101,7 @@ CaloTrkProcessing::CaloTrkProcessing(const std::string& name, CaloTrkProcessing::Detector detector; detector.name = name; detector.lv = lv; - detector.level = csp->levels_[i]; + detector.level = (csp->levels_[i] + addlevel); if (istart + csp->neighbours_[i] > static_cast(csp->insideNames_.size())) { edm::LogError("CaloSim") << "CaloTrkProcessing: # of InsideNames bins " << csp->insideNames_.size() << " too few compaerd to " << istart + csp->neighbours_[i] @@ -110,14 +116,15 @@ CaloTrkProcessing::CaloTrkProcessing(const std::string& name, lv = nullptr; name = static_cast(csp->insideNames_[istart + k]); for (lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++) { - if ((*lvcite)->GetName() == name) { + G4String namx(static_cast(dd4hep::dd::noNamespace((*lvcite)->GetName()))); + if (namx == name) { lv = (*lvcite); break; } } inside.push_back(name); insideLV.push_back(lv); - insideLevels.push_back(csp->insideLevel_[istart + k]); + insideLevels.push_back(csp->insideLevel_[istart + k] + addlevel); } detector.fromDets = inside; detector.fromDetL = insideLV; @@ -127,11 +134,12 @@ CaloTrkProcessing::CaloTrkProcessing(const std::string& name, istart += csp->neighbours_[i]; } - for (unsigned int i = 0; i < csp->fCaloNames_.size(); i++) { + for (unsigned int i = 0; i < useFines.size(); i++) { G4LogicalVolume* lv = nullptr; - G4String name = static_cast(csp->fCaloNames_[i]); + G4String name = static_cast(fineNames[useFines[i]]); for (lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++) { - if ((*lvcite)->GetName() == name) { + G4String namx(static_cast(dd4hep::dd::noNamespace((*lvcite)->GetName()))); + if (namx == name) { lv = (*lvcite); break; } @@ -140,7 +148,7 @@ CaloTrkProcessing::CaloTrkProcessing(const std::string& name, CaloTrkProcessing::Detector detector; detector.name = name; detector.lv = lv; - detector.level = csp->fLevels_[i]; + detector.level = fineLevels[useFines[i]]; detector.fromDets.clear(); detector.fromDetL.clear(); detector.fromLevels.clear(); @@ -162,7 +170,7 @@ CaloTrkProcessing::CaloTrkProcessing(const std::string& name, << detectors_[i].fromDetL[k] << " at level " << detectors_[i].fromLevels[k]; } - doFineCalo_ = !(fineDetectors_.empty()); + doFineCalo_ = doFineCalo_ && !(fineDetectors_.empty()); edm::LogVerbatim("CaloSim") << "CaloTrkProcessing: with " << fineDetectors_.size() << " special calorimetric volumes"; for (unsigned int i = 0; i < detectors_.size(); i++) edm::LogVerbatim("CaloSim") << "CaloTrkProcessing: Calorimeter volume " << i << " " << detectors_[i].name << " LV " @@ -186,6 +194,55 @@ void CaloTrkProcessing::update(const G4Step* aStep) { throw cms::Exception("Unknown", "CaloTrkProcessing") << "cannot get trkInfo for Track " << id << "\n"; } + if (doFineCalo_) { + // Boundary-crossing logic + int prestepLV = isItCalo(aStep->GetPreStepPoint()->GetTouchable(), fineDetectors_); + int poststepLV = isItCalo(aStep->GetPostStepPoint()->GetTouchable(), fineDetectors_); + if (prestepLV < 0 && poststepLV >= 0 + // Allow back-scattering and filter it out later; ensure consistency during the SIM step + // && std::abs(theTrack->GetStep()->GetPreStepPoint()->GetPosition().z()) < std::abs(theTrack->GetPosition().z()) + ) { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("DoFineCalo") << "Entered fine volume " << poststepLV << ":" + << " Track " << id << " pdgid=" << theTrack->GetDefinition()->GetPDGEncoding() + << " prestepLV=" << prestepLV << " poststepLV=" << poststepLV + << " GetKineticEnergy[GeV]=" << theTrack->GetKineticEnergy() / CLHEP::GeV + << " GetVertexKineticEnergy[GeV]=" + << theTrack->GetVertexKineticEnergy() / CLHEP::GeV << " prestepPosition[cm]=(" + << theTrack->GetStep()->GetPreStepPoint()->GetPosition().x() / CLHEP::cm << "," + << theTrack->GetStep()->GetPreStepPoint()->GetPosition().y() / CLHEP::cm << "," + << theTrack->GetStep()->GetPreStepPoint()->GetPosition().z() / CLHEP::cm << ")" + << " poststepPosition[cm]=(" + << theTrack->GetStep()->GetPostStepPoint()->GetPosition().x() / CLHEP::cm << "," + << theTrack->GetStep()->GetPostStepPoint()->GetPosition().y() / CLHEP::cm << "," + << theTrack->GetStep()->GetPostStepPoint()->GetPosition().z() / CLHEP::cm << ")" + << " position[cm]=(" << theTrack->GetPosition().x() / CLHEP::cm << "," + << theTrack->GetPosition().y() / CLHEP::cm << "," + << theTrack->GetPosition().z() / CLHEP::cm << ")" + << " vertex_position[cm]=(" << theTrack->GetVertexPosition().x() / CLHEP::cm << "," + << theTrack->GetVertexPosition().y() / CLHEP::cm << "," + << theTrack->GetVertexPosition().z() / CLHEP::cm << ")"; +#endif + trkInfo->setCrossedBoundary(theTrack); + } +#ifdef EDM_ML_DEBUG + else if (prestepLV >= 0 && poststepLV < 0) { + edm::LogVerbatim("DoFineCalo") << "Exited fine volume " << prestepLV << ":" + << " Track " << id + << " GetKineticEnergy[GeV]=" << theTrack->GetKineticEnergy() / CLHEP::GeV + << " GetVertexKineticEnergy[GeV]=" + << theTrack->GetVertexKineticEnergy() / CLHEP::GeV << " prestepPosition[cm]=(" + << theTrack->GetStep()->GetPreStepPoint()->GetPosition().x() / CLHEP::cm << "," + << theTrack->GetStep()->GetPreStepPoint()->GetPosition().y() / CLHEP::cm << "," + << theTrack->GetStep()->GetPreStepPoint()->GetPosition().z() / CLHEP::cm << ")" + << " poststepPosition[cm]=(" + << theTrack->GetStep()->GetPostStepPoint()->GetPosition().x() / CLHEP::cm << "," + << theTrack->GetStep()->GetPostStepPoint()->GetPosition().y() / CLHEP::cm << "," + << theTrack->GetStep()->GetPostStepPoint()->GetPosition().z() / CLHEP::cm << ")"; + } +#endif + } + if (testBeam_) { if (trkInfo->getIDonCaloSurface() == 0) { #ifdef EDM_ML_DEBUG @@ -230,6 +287,7 @@ void CaloTrkProcessing::update(const G4Step* aStep) { trkInfo->setIDonCaloSurface( id, ical, inside, theTrack->GetDefinition()->GetPDGEncoding(), theTrack->GetMomentum().mag()); trkInfo->setCaloIDChecked(true); + trkInfo->setCrossedBoundary(theTrack); lastTrackID_ = id; if (theTrack->GetKineticEnergy() / CLHEP::MeV > eMin_) trkInfo->putInHistory(); @@ -242,23 +300,6 @@ void CaloTrkProcessing::update(const G4Step* aStep) { } } } - if (doFineCalo_ && (!trkInfo->isInHistory())) { - const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable(); - if (isItCalo(touch, fineDetectors_) >= 0) { - int pdg = aStep->GetTrack()->GetDefinition()->GetPDGEncoding(); - double cut = (pdg == 22) ? eMinFinePhoton_ : eMinFine_; - if (aStep->GetTrack()->GetKineticEnergy() / CLHEP::MeV > cut) { - trkInfo->putInHistory(); - trkInfo->setIDfineCalo(id); - } -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("CaloSim") << "CaloTrkProcessing: the track " << aStep->GetTrack()->GetTrackID() - << " with PDGID " << pdg << " and kinetic energy " - << aStep->GetTrack()->GetKineticEnergy() / CLHEP::MeV << " is tested against " << cut - << " to be put in history"; -#endif - } - } } int CaloTrkProcessing::isItCalo(const G4VTouchable* touch, const std::vector& detectors) { @@ -386,4 +427,10 @@ void CaloTrkProcessing::detectorLevel(const G4VTouchable* touch, int& level, int copyno[ii] = touch->GetReplicaNumber(i); } } +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("CaloSimX") << "CaloTrkProcessing::detectorLevel " + << " with " << level << ":" << detLevels(touch) << " levels"; + for (int ii = 0; ii < level; ii++) + edm::LogVerbatim("CaloSimX") << "[" << ii << "] " << name[ii] << ":" << copyno[ii]; +#endif } diff --git a/SimG4CMS/Calo/src/HCalSD.cc b/SimG4CMS/Calo/src/HCalSD.cc index 6d4f41b1e0904..25044764681c2 100644 --- a/SimG4CMS/Calo/src/HCalSD.cc +++ b/SimG4CMS/Calo/src/HCalSD.cc @@ -78,6 +78,7 @@ HCalSD::HCalSD(const std::string& name, //static SimpleConfigurable bk3(1.75, "HCalSD:BirkC3"); // Values from NIM 80 (1970) 239-244: as implemented in Geant3 + bool dd4hep = p.getParameter("g4GeometryDD4hepSource"); edm::ParameterSet m_HC = p.getParameter("HCalSD"); useBirk = m_HC.getParameter("UseBirkLaw"); double bunit = (CLHEP::g / (CLHEP::MeV * CLHEP::cm2)); @@ -192,6 +193,7 @@ HCalSD::HCalSD(const std::string& name, std::stringstream ss0; ss0 << "HCalSD: Names to be tested for Volume = HF has " << hfNames.size() << " elements"; #endif + int addlevel = dd4hep ? 1 : 0; for (unsigned int i = 0; i < hfNames.size(); ++i) { G4String namv(static_cast(dd4hep::dd::noNamespace(hfNames[i]))); lv = nullptr; @@ -202,9 +204,9 @@ HCalSD::HCalSD(const std::string& name, } } hfLV.emplace_back(lv); - hfLevels.emplace_back(temp[i]); + hfLevels.emplace_back(temp[i] + addlevel); #ifdef EDM_ML_DEBUG - ss0 << "\n HF[" << i << "] = " << namv << " LV " << lv << " at level " << temp[i]; + ss0 << "\n HF[" << i << "] = " << namv << " LV " << lv << " at level " << (temp[i] + addlevel); #endif } #ifdef EDM_ML_DEBUG @@ -366,6 +368,13 @@ bool HCalSD::getFromLibrary(const G4Step* aStep) { weight_ = 1.0; bool kill(false); isHF = isItHF(aStep); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HcalSim") << "GetFromLibrary: isHF " << isHF << " darken " << (m_HFDarkening != nullptr) + << " useParam " << useParam << " useShowerLibrary " << useShowerLibrary << " Muon? " + << G4TrackToParticleID::isMuon(track) << " electron? " + << G4TrackToParticleID::isGammaElectronPositron(track) << " Stable Hadron? " + << G4TrackToParticleID::isStableHadronIon(track); +#endif if (isHF) { if (m_HFDarkening) { G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition(); @@ -985,7 +994,9 @@ double HCalSD::layerWeight(int det, const G4ThreeVector& pos, int depth, int lay void HCalSD::plotProfile(const G4Step* aStep, const G4ThreeVector& global, double edep, double time, int id) { const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable(); - static const G4String modName[8] = {"HEModule", "HVQF", "HBModule", "MBAT", "MBBT", "MBBTC", "MBBT_R1P", "MBBT_R1M"}; + static const unsigned int names = 10; + static const G4String modName[names] = { + "HEModule", "HVQF", "HBModule", "MBAT", "MBBT", "MBBTC", "MBBT_R1P", "MBBT_R1M", "MBBT_R1PX", "MBBT_R1MX"}; G4ThreeVector local; bool found = false; double depth = -2000; @@ -995,7 +1006,7 @@ void HCalSD::plotProfile(const G4Step* aStep, const G4ThreeVector& global, doubl #ifdef EDM_ML_DEBUG edm::LogVerbatim("HcalSim") << "plotProfile Depth " << n << " Name " << name; #endif - for (unsigned int ii = 0; ii < 8; ++ii) { + for (unsigned int ii = 0; ii < names; ++ii) { if (name == modName[ii]) { found = true; int dn = touch->GetHistoryDepth() - n; diff --git a/SimG4CMS/Calo/src/HGCSD.cc b/SimG4CMS/Calo/src/HGCSD.cc index ec50b5656bf6e..b841b89d50b0d 100644 --- a/SimG4CMS/Calo/src/HGCSD.cc +++ b/SimG4CMS/Calo/src/HGCSD.cc @@ -190,8 +190,10 @@ uint32_t HGCSD::setDetUnitId(const G4Step* aStep) { int det, z, lay, wafer, type, ic; HGCalTestNumbering::unpackHexagonIndex(id, det, z, lay, wafer, type, ic); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCSim") << "ID " << std::hex << id << std::dec << " Decode " << det << ":" << z << ":" << lay - << ":" << wafer << ":" << type << ":" << ic; + edm::LogVerbatim("HGCSim") << "ID " << std::hex << id << std::dec << " Input " << subdet << ":" << layer << ":" + << module << ":" << cell << ":" << iz << localpos.x() << ":" << localpos.y() + << " Decode " << det << ":" << z << ":" << lay << ":" << wafer << ":" << type << ":" + << ic; #endif if (mouseBite_->exclude(hitPoint, z, wafer, 0)) id = 0; diff --git a/SimG4CMS/Calo/src/HGCalNumberingScheme.cc b/SimG4CMS/Calo/src/HGCalNumberingScheme.cc index f7533e66a316b..12f5efa797906 100644 --- a/SimG4CMS/Calo/src/HGCalNumberingScheme.cc +++ b/SimG4CMS/Calo/src/HGCalNumberingScheme.cc @@ -76,10 +76,18 @@ uint32_t HGCalNumberingScheme::getUnitID(int layer, int module, int cell, int iz } else if (hgcons_.tileTrapezoid()) { std::array id = hgcons_.assignCellTrap(pos.x(), pos.y(), pos.z(), layer, false); if (id[2] >= 0) { - index = HGCScintillatorDetId(id[2], layer, iz * id[0], id[1]).rawId(); + std::pair typm = hgcons_.tileType(layer, id[0], 0); + HGCScintillatorDetId detId(id[2], layer, iz * id[0], id[1], false, 0); + if (typm.first >= 0) { + detId.setType(typm.first); + detId.setSiPM(typm.second); + } + index = detId.rawId(); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCSim") << "Radius/Phi " << id[0] << ":" << id[1] << " Type " << id[2] << " Layer|iz " << layer - << ":" << iz << " " << HGCScintillatorDetId(index); + int lay = layer + hgcons_.getLayerOffset(); + edm::LogVerbatim("HGCSim") << "Radius/Phi " << id[0] << ":" << id[1] << " Type " << id[2] << ":" << typm.first + << " SiPM " << typm.second << ":" << hgcons_.tileSiPM(typm.second) << " Layer " + << layer << ":" << lay << " z " << iz << " " << detId; } else { edm::LogVerbatim("HGCSim") << "Radius/Phi " << id[0] << ":" << id[1] << " Type " << id[2] << " Layer|iz " << layer << ":" << iz << " ERROR"; diff --git a/SimG4CMS/Calo/src/HcalTestHistoManager.cc b/SimG4CMS/Calo/src/HcalTestHistoManager.cc index f89f30daebe00..2aa9bfb2273ab 100644 --- a/SimG4CMS/Calo/src/HcalTestHistoManager.cc +++ b/SimG4CMS/Calo/src/HcalTestHistoManager.cc @@ -6,6 +6,7 @@ #include "SimG4CMS/Calo/interface/HcalTestHistoManager.h" #include "FWCore/PluginManager/interface/PluginManager.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include diff --git a/SimG4CMS/Calo/test/python/calostepAnalysis_cfg.py b/SimG4CMS/Calo/test/python/calostepAnalysis_cfg.py index 6e45ee3e77709..9382c461b51c8 100644 --- a/SimG4CMS/Calo/test/python/calostepAnalysis_cfg.py +++ b/SimG4CMS/Calo/test/python/calostepAnalysis_cfg.py @@ -12,7 +12,7 @@ process.GlobalTag.globaltag = autoCond['run2_mc'] if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HitStudy') + process.MessageLogger.HitStudy=dict() process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring( diff --git a/SimG4CMS/Calo/test/python/calostep_cfg.py b/SimG4CMS/Calo/test/python/calostep_cfg.py index 8879e79ae2945..edf94cf0feb58 100644 --- a/SimG4CMS/Calo/test/python/calostep_cfg.py +++ b/SimG4CMS/Calo/test/python/calostep_cfg.py @@ -19,10 +19,10 @@ process.GlobalTag.globaltag = autoCond['run2_mc'] if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('Step') - process.MessageLogger.categories.append('HCalGeom') - process.MessageLogger.categories.append('HcalSim') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.Step=dict() + process.MessageLogger.HCalGeom=dict() + process.MessageLogger.HcalSim=dict() process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10000) diff --git a/SimG4CMS/Calo/test/python/dd4hep_SingleMuon_Step1_cfg.py b/SimG4CMS/Calo/test/python/dd4hep_SingleMuon_Step1_cfg.py index 101cdf5be58ad..76cb73ec3430c 100644 --- a/SimG4CMS/Calo/test/python/dd4hep_SingleMuon_Step1_cfg.py +++ b/SimG4CMS/Calo/test/python/dd4hep_SingleMuon_Step1_cfg.py @@ -21,7 +21,7 @@ if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('EcalSimX') + process.MessageLogger.EcalSimX=dict() process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100), diff --git a/SimG4CMS/Calo/test/python/ddd_SingleMuon_Step1_cfg.py b/SimG4CMS/Calo/test/python/ddd_SingleMuon_Step1_cfg.py index c21ba8837074a..ac5801cb301f3 100644 --- a/SimG4CMS/Calo/test/python/ddd_SingleMuon_Step1_cfg.py +++ b/SimG4CMS/Calo/test/python/ddd_SingleMuon_Step1_cfg.py @@ -20,7 +20,7 @@ process.load('Configuration.Geometry.GeometryExtended2021_cff') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('EcalSimX') + process.MessageLogger.EcalSimX=dict() process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100), diff --git a/SimG4CMS/Calo/test/python/minbias_cfg.py b/SimG4CMS/Calo/test/python/minbias_cfg.py index 536a51f354fec..545efbdaaf663 100644 --- a/SimG4CMS/Calo/test/python/minbias_cfg.py +++ b/SimG4CMS/Calo/test/python/minbias_cfg.py @@ -22,7 +22,7 @@ process.GlobalTag.globaltag = autoCond['run2_mc'] if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') + process.MessageLogger.G4cerr=dict() process.source = cms.Source("EmptySource") diff --git a/SimG4CMS/Calo/test/python/qcdpt3000_3500_cfg.py b/SimG4CMS/Calo/test/python/qcdpt3000_3500_cfg.py index b00b2ec6cc9d5..a7e8680641eec 100644 --- a/SimG4CMS/Calo/test/python/qcdpt3000_3500_cfg.py +++ b/SimG4CMS/Calo/test/python/qcdpt3000_3500_cfg.py @@ -26,7 +26,7 @@ ) if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') + process.MessageLogger.G4cerr=dict() process.Timing = cms.Service("Timing") diff --git a/SimG4CMS/Calo/test/python/run2018Step1_cfg.py b/SimG4CMS/Calo/test/python/run2018Step1_cfg.py index 656237ff05039..fdda2d2de3898 100644 --- a/SimG4CMS/Calo/test/python/run2018Step1_cfg.py +++ b/SimG4CMS/Calo/test/python/run2018Step1_cfg.py @@ -26,9 +26,9 @@ ) if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('ParticleGun') + process.MessageLogger.G4cout=dict() + process.MessageLogger.G4cerr=dict() + process.MessageLogger.ParticleGun=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/SimG4CMS/Calo/test/python/runAPD_cfg.py b/SimG4CMS/Calo/test/python/runAPD_cfg.py index 61fc866879189..a9854cf2bfb37 100644 --- a/SimG4CMS/Calo/test/python/runAPD_cfg.py +++ b/SimG4CMS/Calo/test/python/runAPD_cfg.py @@ -17,10 +17,10 @@ process.GlobalTag.globaltag = autoCond['run1_mc'] if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('FlatThetaGun') - process.MessageLogger.categories.append('EcalGeom') - process.MessageLogger.categories.append('EcalSim') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.FlatThetaGun=dict() + process.MessageLogger.EcalGeom=dict() + process.MessageLogger.EcalSim=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/SimG4CMS/Calo/test/python/runDetID_cfg.py b/SimG4CMS/Calo/test/python/runDetID_cfg.py index 33ff0eac87601..7661757ab3c56 100644 --- a/SimG4CMS/Calo/test/python/runDetID_cfg.py +++ b/SimG4CMS/Calo/test/python/runDetID_cfg.py @@ -16,7 +16,7 @@ process.GlobalTag.globaltag = autoCond['run2_mc'] if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') + process.MessageLogger.G4cerr=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/SimG4CMS/Calo/test/python/runEcalGeom_cfg.py b/SimG4CMS/Calo/test/python/runEcalGeom_cfg.py index a8ed6449ba005..16cfbe5f0e751 100644 --- a/SimG4CMS/Calo/test/python/runEcalGeom_cfg.py +++ b/SimG4CMS/Calo/test/python/runEcalGeom_cfg.py @@ -21,9 +21,9 @@ process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('EcalGeom') - process.MessageLogger.categories.append('EcalSim') - process.MessageLogger.categories.append('G4cout') + process.MessageLogger.EcalGeom = dict() + process.MessageLogger.EcalSim = dict() + process.MessageLogger.G4cout = dict() process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1), diff --git a/SimG4CMS/Calo/test/python/runEcalSimHitDump_cfg.py b/SimG4CMS/Calo/test/python/runEcalSimHitDump_cfg.py index f434b6043e3a2..9c0c9fce0f5ad 100644 --- a/SimG4CMS/Calo/test/python/runEcalSimHitDump_cfg.py +++ b/SimG4CMS/Calo/test/python/runEcalSimHitDump_cfg.py @@ -10,7 +10,7 @@ process.load('SimG4CMS.Calo.ecalSimHitDump_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HitStudy') + process.MessageLogger.HitStudy=dict() process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10), diff --git a/SimG4CMS/Calo/test/python/runEcalStudy_cfg.py b/SimG4CMS/Calo/test/python/runEcalStudy_cfg.py index ee8ee3a58434a..8e7f9db3cae38 100644 --- a/SimG4CMS/Calo/test/python/runEcalStudy_cfg.py +++ b/SimG4CMS/Calo/test/python/runEcalStudy_cfg.py @@ -15,8 +15,8 @@ from Configuration.AlCa.autoCond import autoCond process.GlobalTag.globaltag = autoCond['run2_mc'] -#if 'MessageLogger' in process.__dict__: -# process.MessageLogger.categories.append('HitStudy') +# +# process.load("IOMC.RandomEngine.IOMC_cff") diff --git a/SimG4CMS/Calo/test/python/runEta13_cfg.py b/SimG4CMS/Calo/test/python/runEta13_cfg.py index ac84447002c32..e13ca581818d1 100644 --- a/SimG4CMS/Calo/test/python/runEta13_cfg.py +++ b/SimG4CMS/Calo/test/python/runEta13_cfg.py @@ -1,30 +1,32 @@ import FWCore.ParameterSet.Config as cms -process = cms.Process("PROD") +from Configuration.Eras.Era_Run3_cff import Run3 +process = cms.Process("PROD",Run3) +process.load("Configuration.Geometry.GeometryExtended2021Reco_cff") + +#from Configuration.Eras.Era_Run3_dd4hep_cff import Run3_dd4hep +#process = cms.Process("PROD",Run3_dd4hep) +#process.load("Configuration.Geometry.GeometryDD4hepExtended2021Reco_cff") + process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") process.load('FWCore.MessageService.MessageLogger_cfi') process.load("IOMC.EventVertexGenerators.VtxSmearedGauss_cfi") -process.load("Geometry.CMSCommonData.cmsSimIdealGeometryXML_cfi") -process.load("Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi") -process.load("Geometry.EcalCommonData.ecalSimulationParameters_cff") -process.load("Geometry.HcalCommonData.hcalDDDSimConstants_cff") process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.EventContent.EventContent_cff") process.load('Configuration.StandardSequences.Generator_cff') process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') + process.MessageLogger.G4cerr=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 process.RandomNumberGeneratorService.g4SimHits.initialSeed = 9876 process.RandomNumberGeneratorService.VtxSmeared.initialSeed = 123456789 -process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['run1_mc'] - process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(5000) ) diff --git a/SimG4CMS/Calo/test/python/runEta2_cfg.py b/SimG4CMS/Calo/test/python/runEta2_cfg.py index 0166121758189..2c3fc7cd51a15 100644 --- a/SimG4CMS/Calo/test/python/runEta2_cfg.py +++ b/SimG4CMS/Calo/test/python/runEta2_cfg.py @@ -1,24 +1,27 @@ import FWCore.ParameterSet.Config as cms -process = cms.Process("PROD") +from Configuration.Eras.Era_Run3_cff import Run3 +process = cms.Process("PROD",Run3) +process.load("Configuration.Geometry.GeometryExtended2021Reco_cff") + +#from Configuration.Eras.Era_Run3_dd4hep_cff import Run3_dd4hep +#process = cms.Process("PROD",Run3_dd4hep) +#process.load("Configuration.Geometry.GeometryDD4hepExtended2021Reco_cff") + process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") process.load('FWCore.MessageService.MessageLogger_cfi') process.load("IOMC.EventVertexGenerators.VtxSmearedGauss_cfi") -process.load("Geometry.CMSCommonData.cmsSimIdealGeometryXML_cfi") -process.load("Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi") -process.load("Geometry.EcalCommonData.ecalSimulationParameters_cff") -process.load("Geometry.HcalCommonData.hcalDDDSimConstants_cff") process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.EventContent.EventContent_cff") process.load('Configuration.StandardSequences.Generator_cff') process.load('Configuration.StandardSequences.SimIdeal_cff') process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff" ) -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['run1_mc'] +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') + process.MessageLogger.G4cerr=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/SimG4CMS/Calo/test/python/runEta7_cfg.py b/SimG4CMS/Calo/test/python/runEta7_cfg.py index b79e857f9832d..e5afe6e6cc075 100644 --- a/SimG4CMS/Calo/test/python/runEta7_cfg.py +++ b/SimG4CMS/Calo/test/python/runEta7_cfg.py @@ -1,24 +1,30 @@ import FWCore.ParameterSet.Config as cms -process = cms.Process("PROD") +from Configuration.Eras.Era_Run3_cff import Run3 +process = cms.Process("PROD",Run3) +process.load("Configuration.Geometry.GeometryExtended2021Reco_cff") + +#from Configuration.Eras.Era_Run3_dd4hep_cff import Run3_dd4hep +#process = cms.Process("PROD",Run3_dd4hep) +#process.load("Configuration.Geometry.GeometryDD4hepExtended2021Reco_cff") + process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") process.load('FWCore.MessageService.MessageLogger_cfi') process.load("IOMC.EventVertexGenerators.VtxSmearedGauss_cfi") -process.load("Geometry.CMSCommonData.cmsSimIdealGeometryXML_cfi") -process.load("Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi") -process.load("Geometry.EcalCommonData.ecalSimulationParameters_cff") -process.load("Geometry.HcalCommonData.hcalDDDSimConstants_cff") process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.EventContent.EventContent_cff") process.load('Configuration.StandardSequences.Generator_cff') process.load('Configuration.StandardSequences.SimIdeal_cff') process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff" ) -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['run1_mc'] +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') -if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') +process.MessageLogger.cerr.FwkReport.reportEvery = 5 +if hasattr(process,'MessageLogger'): + process.MessageLogger.G4cerr=dict() +# process.MessageLogger.CaloSim=dict() +# process.MessageLogger.CaloSimX=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 @@ -57,7 +63,7 @@ process.simulation_step = cms.Path(process.psim) process.out_step = cms.EndPath(process.output) -process.g4SimHits.Physics.type = 'SimG4Core/Physics/QGSP_FTFP_BERT_EML' +process.g4SimHits.Physics.type = 'SimG4Core/Physics/FTFP_BERT_EMM' #process.g4SimHits.G4Commands = ['/tracking/verbose 1'] # Schedule definition diff --git a/SimG4CMS/Calo/test/python/runHFDD4HEP_cfg.py b/SimG4CMS/Calo/test/python/runHFDD4HEP_cfg.py new file mode 100644 index 0000000000000..f323bedb2183d --- /dev/null +++ b/SimG4CMS/Calo/test/python/runHFDD4HEP_cfg.py @@ -0,0 +1,132 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Run3_dd4hep_cff import Run3_dd4hep + +process = cms.Process('SIM',Run3_dd4hep) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedRun3RoundOptics25ns13TeVLowSigmaZ_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +process.load('Configuration.Geometry.GeometryDD4hepExtended2021_cff') # there w + + +if hasattr(process,'MessageLogger'): + process.MessageLogger.HcalSim=dict() + process.MessageLogger.HFShower=dict() + process.MessageLogger.HitStudy=dict() + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(10), + output = cms.optional.untracked.allowed(cms.int32,cms.PSet) +) + +# Input source +process.source = cms.Source("EmptySource") + +process.options = cms.untracked.PSet( + FailPath = cms.untracked.vstring(), + IgnoreCompletely = cms.untracked.vstring(), + Rethrow = cms.untracked.vstring(), + SkipEvent = cms.untracked.vstring(), + allowUnscheduled = cms.obsolete.untracked.bool, + canDeleteEarly = cms.untracked.vstring(), + emptyRunLumiMode = cms.obsolete.untracked.string, + eventSetup = cms.untracked.PSet( + forceNumberOfConcurrentIOVs = cms.untracked.PSet( + + ), + numberOfConcurrentIOVs = cms.untracked.uint32(1) + ), + fileMode = cms.untracked.string('FULLMERGE'), + forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False), + makeTriggerResults = cms.obsolete.untracked.bool, + numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(1), + numberOfConcurrentRuns = cms.untracked.uint32(1), + numberOfStreams = cms.untracked.uint32(0), + numberOfThreads = cms.untracked.uint32(1), + printDependencies = cms.untracked.bool(False), + sizeOfStackForThreadsInKB = cms.optional.untracked.uint32, + throwIfIllegalParameter = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(False) +) + +# Production Info +process.configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('SinglePion_cfi nevts:10'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +# Output definition + +process.FEVTDEBUGoutput = cms.OutputModule("PoolOutputModule", + SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring('generation_step') + ), + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('GEN-SIM'), + filterName = cms.untracked.string('') + ), + fileName = cms.untracked.string('file:step1_dd4hep.root'), + outputCommands = process.FEVTDEBUGEventContent.outputCommands, + splitLevel = cms.untracked.int32(0) +) + +# Additional output definition + +# Other statements +process.genstepfilter.triggerConditions=cms.vstring("generation_step") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') + + +process.generator = cms.EDProducer("FlatRandomEGunProducer", + PGunParameters = cms.PSet( + PartID = cms.vint32(211), + MinEta = cms.double(3.1), + MaxEta = cms.double(4.6), + MinPhi = cms.double(-3.1415926), + MaxPhi = cms.double(-1.5707963), + MinE = cms.double(100.00), + MaxE = cms.double(100.00) + ), + Verbosity = cms.untracked.int32(0), + AddAntiParticle = cms.bool(True) +) + +process.load("SimG4CMS.Calo.hcalSimHitDump_cfi") +process.ProductionFilterSequence = cms.Sequence(process.generator) + +# Path and EndPath definitions +process.generation_step = cms.Path(process.pgen) +process.simulation_step = cms.Path(process.psim) +process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) +process.analysis_step = cms.Path(process.hcalSimHitDump) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.FEVTDEBUGoutput_step = cms.EndPath(process.FEVTDEBUGoutput) + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step,process.genfiltersummary_step,process.simulation_step,process.endjob_step,process.analysis_step,process.FEVTDEBUGoutput_step) +from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask +associatePatAlgosToolsTask(process) +# filter all path with the production filter sequence +for path in process.paths: + getattr(process,path).insert(0, process.ProductionFilterSequence) + + +# Customisation from command line + +# Add early deletion of temporary data products to reduce peak memory need +from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete +process = customiseEarlyDelete(process) +# End adding early deletion diff --git a/SimG4CMS/Calo/test/python/runHFDDD_cfg.py b/SimG4CMS/Calo/test/python/runHFDDD_cfg.py new file mode 100644 index 0000000000000..09bc793f24301 --- /dev/null +++ b/SimG4CMS/Calo/test/python/runHFDDD_cfg.py @@ -0,0 +1,130 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Run3_cff import Run3 + +process = cms.Process('SIM',Run3) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedRun3RoundOptics25ns13TeVLowSigmaZ_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +process.load('Configuration.Geometry.GeometryExtended2021_cff') # there w + +if hasattr(process,'MessageLogger'): + process.MessageLogger.HcalSim=dict() + process.MessageLogger.HFShower=dict() + process.MessageLogger.HitStudy=dict() + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(10), + output = cms.optional.untracked.allowed(cms.int32,cms.PSet) +) + +# Input source +process.source = cms.Source("EmptySource") + +process.options = cms.untracked.PSet( + FailPath = cms.untracked.vstring(), + IgnoreCompletely = cms.untracked.vstring(), + Rethrow = cms.untracked.vstring(), + SkipEvent = cms.untracked.vstring(), + allowUnscheduled = cms.obsolete.untracked.bool, + canDeleteEarly = cms.untracked.vstring(), + emptyRunLumiMode = cms.obsolete.untracked.string, + eventSetup = cms.untracked.PSet( + forceNumberOfConcurrentIOVs = cms.untracked.PSet( + + ), + numberOfConcurrentIOVs = cms.untracked.uint32(1) + ), + fileMode = cms.untracked.string('FULLMERGE'), + forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False), + makeTriggerResults = cms.obsolete.untracked.bool, + numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(1), + numberOfConcurrentRuns = cms.untracked.uint32(1), + numberOfStreams = cms.untracked.uint32(0), + numberOfThreads = cms.untracked.uint32(1), + printDependencies = cms.untracked.bool(False), + sizeOfStackForThreadsInKB = cms.optional.untracked.uint32, + throwIfIllegalParameter = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(False) +) + +# Production Info +process.configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('SinglePion_cfi nevts:10'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +# Output definition + +process.FEVTDEBUGoutput = cms.OutputModule("PoolOutputModule", + SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring('generation_step') + ), + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('GEN-SIM'), + filterName = cms.untracked.string('') + ), + fileName = cms.untracked.string('file:step1_ddd.root'), + outputCommands = process.FEVTDEBUGEventContent.outputCommands, + splitLevel = cms.untracked.int32(0) +) + +# Additional output definition + +# Other statements +process.genstepfilter.triggerConditions=cms.vstring("generation_step") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') + +process.generator = cms.EDProducer("FlatRandomEGunProducer", + PGunParameters = cms.PSet( + PartID = cms.vint32(211), + MinEta = cms.double(3.1), + MaxEta = cms.double(4.6), + MinPhi = cms.double(-3.1415926), + MaxPhi = cms.double(-1.5707963), + MinE = cms.double(100.00), + MaxE = cms.double(100.00) + ), + Verbosity = cms.untracked.int32(0), + AddAntiParticle = cms.bool(True) +) + +process.load("SimG4CMS.Calo.hcalSimHitDump_cfi") +process.ProductionFilterSequence = cms.Sequence(process.generator) + +# Path and EndPath definitions +process.generation_step = cms.Path(process.pgen) +process.simulation_step = cms.Path(process.psim) +process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) +process.analysis_step = cms.Path(process.hcalSimHitDump) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.FEVTDEBUGoutput_step = cms.EndPath(process.FEVTDEBUGoutput) + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step,process.genfiltersummary_step,process.simulation_step,process.endjob_step,process.analysis_step,process.FEVTDEBUGoutput_step) +from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask +associatePatAlgosToolsTask(process) +# filter all path with the production filter sequence +for path in process.paths: + getattr(process,path).insert(0, process.ProductionFilterSequence) + + +# Customisation from command line + +# Add early deletion of temporary data products to reduce peak memory need +from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete +process = customiseEarlyDelete(process) +# End adding early deletion diff --git a/SimG4CMS/Calo/test/python/runHFNose_cfg.py b/SimG4CMS/Calo/test/python/runHFNose_cfg.py index 6aaa2d663b357..834605b6c7f89 100644 --- a/SimG4CMS/Calo/test/python/runHFNose_cfg.py +++ b/SimG4CMS/Calo/test/python/runHFNose_cfg.py @@ -22,9 +22,9 @@ process.GlobalTag.globaltag = autoCond['phase2_realistic'] if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') - process.MessageLogger.categories.append('HFNSim') - process.MessageLogger.categories.append('HGCalValidation') + process.MessageLogger.HGCalGeom=dict() + process.MessageLogger.HFNSim=dict() + process.MessageLogger.HGCalValidation=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/SimG4CMS/Calo/test/python/runHGC2_cfg.py b/SimG4CMS/Calo/test/python/runHGC2_cfg.py index a3406025369c7..4ddd814d01dbb 100644 --- a/SimG4CMS/Calo/test/python/runHGC2_cfg.py +++ b/SimG4CMS/Calo/test/python/runHGC2_cfg.py @@ -17,8 +17,8 @@ process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic_T15', '') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') - process.MessageLogger.categories.append('HGCSim') + process.MessageLogger.HGCalGeom = dict() + process.MessageLogger.HGCSim = dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/SimG4CMS/Calo/test/python/runHGC3_cfg.py b/SimG4CMS/Calo/test/python/runHGC3_cfg.py index 2231a67872f34..a24ca0117ec44 100644 --- a/SimG4CMS/Calo/test/python/runHGC3_cfg.py +++ b/SimG4CMS/Calo/test/python/runHGC3_cfg.py @@ -17,8 +17,8 @@ process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic_T21', '') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') - process.MessageLogger.categories.append('HGCSim') + process.MessageLogger.HGCalGeom=dict() + process.MessageLogger.HGCSim=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/SimG4CMS/Calo/test/python/runHGC4_cfg.py b/SimG4CMS/Calo/test/python/runHGC4_cfg.py index dd2d88a4bfb97..3fa07935f620c 100644 --- a/SimG4CMS/Calo/test/python/runHGC4_cfg.py +++ b/SimG4CMS/Calo/test/python/runHGC4_cfg.py @@ -4,21 +4,23 @@ process = cms.Process("PROD",Phase2C11) process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") process.load("IOMC.EventVertexGenerators.VtxSmearedGauss_cfi") -process.load("Configuration.Geometry.GeometryExtended2026D71_cff") +process.load("Configuration.Geometry.GeometryExtended2026D71Reco_cff") process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.EventContent.EventContent_cff") process.load('Configuration.StandardSequences.Generator_cff') process.load('Configuration.StandardSequences.SimIdeal_cff') process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('SimG4CMS.Calo.hgcalHitIdCheck_cff') process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") from Configuration.AlCa.autoCond import autoCond process.GlobalTag.globaltag = autoCond['phase2_realistic'] if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') - process.MessageLogger.categories.append('HGCSim') - process.MessageLogger.categories.append('CaloSim') -# process.MessageLogger.categories.append('SimG4CoreGeometry') + process.MessageLogger.HGCalGeom=dict() + process.MessageLogger.HGCSim=dict() + process.MessageLogger.CaloSim=dict() + process.MessageLogger.HitStudy=dict() +# process.MessageLogger.SimG4CoreGeometry=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 @@ -28,7 +30,7 @@ process.Timing = cms.Service("Timing") process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(10) + input = cms.untracked.int32(5) ) process.source = cms.Source("EmptySource", @@ -38,11 +40,13 @@ process.generator = cms.EDProducer("FlatRandomEGunProducer", PGunParameters = cms.PSet( - PartID = cms.vint32(11), + PartID = cms.vint32(211), # MinEta = cms.double(2.95), # MaxEta = cms.double(3.01), - MinEta = cms.double(1.69), - MaxEta = cms.double(2.32), +# MinEta = cms.double(1.69), +# MaxEta = cms.double(2.32), + MinEta = cms.double(1.50), + MaxEta = cms.double(2.00), MinPhi = cms.double(-3.1415926), MaxPhi = cms.double(-1.5707963), MinE = cms.double(100.00), @@ -59,19 +63,27 @@ process.generation_step = cms.Path(process.pgen) process.simulation_step = cms.Path(process.psim) +process.analysis_step = cms.Path(process.hgcalHitIdCheckEE+process.hgcalHitIdCheckHEF+process.hgcalHitIdCheckHEB) process.out_step = cms.EndPath(process.output) process.g4SimHits.Physics.type = 'SimG4Core/Physics/FTFP_BERT_EMM' process.g4SimHits.Physics.DefaultCutValue = 0.1 process.g4SimHits.HGCSD.CornerMinMask = 3 -process.g4SimHits.CaloSD.UseFineCaloID = True +process.g4SimHits.CaloSD.UseFineCalo = [2] +process.g4SimHits.CaloTrkProcessing.UseFineCalo = [2] +process.g4SimHits.TrackingAction.UseFineCalo = [2] +process.g4SimHits.CaloSD.DoFineCalo = True process.g4SimHits.CaloTrkProcessing.DoFineCalo = True +process.g4SimHits.TrackingAction.DoFineCalo = True +process.g4SimHits.CaloSD.EminFineTrack = 1000.0 process.g4SimHits.CaloTrkProcessing.EminFineTrack = 1000.0 -process.g4SimHits.CaloTrkProcessing.EminFinePhoton = 500.0 +process.g4SimHits.TrackingAction.EminFineTrack = 1000.0 +process.hgcalHitIdCheckHEB.Verbosity = 1 # Schedule definition process.schedule = cms.Schedule(process.generation_step, process.simulation_step, + process.analysis_step, process.out_step ) diff --git a/SimG4CMS/Calo/test/python/runHcalGeom_cfg.py b/SimG4CMS/Calo/test/python/runHcalGeom_cfg.py index 06c7958821793..08b1a37f657f0 100644 --- a/SimG4CMS/Calo/test/python/runHcalGeom_cfg.py +++ b/SimG4CMS/Calo/test/python/runHcalGeom_cfg.py @@ -21,8 +21,8 @@ process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - process.MessageLogger.categories.append('HcalSim') + process.MessageLogger.HCalGeom=dict() + process.MessageLogger.HcalSim=dict() process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1), diff --git a/SimG4CMS/Calo/test/python/runHcalSimHitDump_cfg.py b/SimG4CMS/Calo/test/python/runHcalSimHitDump_cfg.py index 085ff6e086249..c96e459b0fed4 100644 --- a/SimG4CMS/Calo/test/python/runHcalSimHitDump_cfg.py +++ b/SimG4CMS/Calo/test/python/runHcalSimHitDump_cfg.py @@ -3,6 +3,7 @@ process = cms.Process("Sim") process.load("SimG4CMS.Calo.PythiaMinBias_cfi") process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") +process.load('FWCore.MessageService.MessageLogger_cfi') process.load("Configuration.Geometry.GeometryExtended2017Reco_cff") process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.EventContent.EventContent_cff") @@ -21,20 +22,8 @@ input = cms.untracked.int32(200) ) -process.MessageLogger = cms.Service("MessageLogger", - cerr = cms.untracked.PSet( - enable = cms.untracked.bool(False) - ), - cout = cms.untracked.PSet( - HitStudy = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ), - default = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - enable = cms.untracked.bool(True) - ) -) +if hasattr(process,'MessageLogger'): + process.MessageLogger.HitStudy=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 @@ -42,11 +31,9 @@ process.RandomNumberGeneratorService.VtxSmeared.initialSeed = 123456789 process.rndmStore = cms.EDProducer("RandomEngineStateProducer") -process.analyze = cms.EDAnalyzer("HcalSimHitDump", - ModuleLabel = cms.untracked.string('g4SimHits'), - HCCollection = cms.untracked.string('HcalHits'), - MaxEvent = cms.untracked.int32(20) - ) +process.load("SimG4CMS.Calo.hcalSimHitDump_cfi") + +process.hcalSimHitDump.MaxEvent = 20 -process.schedule = cms.Path(process.analyze) +process.schedule = cms.Path(process.hcalSimHitDump) diff --git a/SimG4CMS/Calo/test/python/runMakeGDML_cfg.py b/SimG4CMS/Calo/test/python/runMakeGDML_cfg.py index ddf68996e095f..cf6aff7b06cf3 100644 --- a/SimG4CMS/Calo/test/python/runMakeGDML_cfg.py +++ b/SimG4CMS/Calo/test/python/runMakeGDML_cfg.py @@ -17,8 +17,8 @@ process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run1_mc', '') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('G4cerr') + process.MessageLogger.G4cout=dict() + process.MessageLogger.G4cerr=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/SimG4CMS/Calo/test/python/runMuon_cfg.py b/SimG4CMS/Calo/test/python/runMuon_cfg.py index 5c41079d8a512..dc4ff16db2425 100644 --- a/SimG4CMS/Calo/test/python/runMuon_cfg.py +++ b/SimG4CMS/Calo/test/python/runMuon_cfg.py @@ -19,8 +19,8 @@ process.GlobalTag.globaltag = autoCond['run2_mc'] if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('HitStudy') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.HitStudy=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/SimG4CMS/Calo/test/python/runScale_cfg.py b/SimG4CMS/Calo/test/python/runScale_cfg.py index de67c444627dd..5f28bc6fb01c5 100644 --- a/SimG4CMS/Calo/test/python/runScale_cfg.py +++ b/SimG4CMS/Calo/test/python/runScale_cfg.py @@ -19,8 +19,8 @@ process.GlobalTag.globaltag = autoCond['run1_mc'] if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('HitStudy') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.HitStudy=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/SimG4CMS/Calo/test/python/runWithAPDTest_cfg.py b/SimG4CMS/Calo/test/python/runWithAPDTest_cfg.py index 6ea4dc180cf84..0921545de9a8f 100644 --- a/SimG4CMS/Calo/test/python/runWithAPDTest_cfg.py +++ b/SimG4CMS/Calo/test/python/runWithAPDTest_cfg.py @@ -21,8 +21,8 @@ process.GlobalTag.globaltag = autoCond['run1_mc'] if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('HitParentTest') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.HitParentTest=dict() process.load("IOMC.RandomEngine.IOMC_cff") diff --git a/SimG4CMS/Calo/test/python/runWithGun_cfg.py b/SimG4CMS/Calo/test/python/runWithGun_cfg.py index 3196e5342cbd0..2cb3c2e5fc59c 100644 --- a/SimG4CMS/Calo/test/python/runWithGun_cfg.py +++ b/SimG4CMS/Calo/test/python/runWithGun_cfg.py @@ -18,8 +18,8 @@ process.GlobalTag.globaltag = autoCond['run2_mc'] if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('EcalSim') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.EcalSim=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/SimG4CMS/Calo/test/python/ttbar_cfg.py b/SimG4CMS/Calo/test/python/ttbar_cfg.py index 142b4dad400fa..26a670b1f698d 100644 --- a/SimG4CMS/Calo/test/python/ttbar_cfg.py +++ b/SimG4CMS/Calo/test/python/ttbar_cfg.py @@ -26,7 +26,7 @@ ) if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') + process.MessageLogger.G4cerr=dict() process.Timing = cms.Service("Timing") diff --git a/SimG4CMS/Calo/test/python/zee_cfg.py b/SimG4CMS/Calo/test/python/zee_cfg.py index 35217633d7886..ef5a846076376 100644 --- a/SimG4CMS/Calo/test/python/zee_cfg.py +++ b/SimG4CMS/Calo/test/python/zee_cfg.py @@ -25,7 +25,7 @@ ) if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') + process.MessageLogger.G4cerr=dict() process.Timing = cms.Service("Timing") diff --git a/SimG4CMS/CherenkovAnalysis/BuildFile.xml b/SimG4CMS/CherenkovAnalysis/BuildFile.xml index 5d3398db0a212..a12305460cc41 100644 --- a/SimG4CMS/CherenkovAnalysis/BuildFile.xml +++ b/SimG4CMS/CherenkovAnalysis/BuildFile.xml @@ -5,6 +5,7 @@ + diff --git a/SimG4CMS/CherenkovAnalysis/data/SingleDREAMDD4Hep.xml b/SimG4CMS/CherenkovAnalysis/data/SingleDREAMDD4Hep.xml new file mode 100644 index 0000000000000..09671bbbc84f8 --- /dev/null +++ b/SimG4CMS/CherenkovAnalysis/data/SingleDREAMDD4Hep.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/SimG4CMS/CherenkovAnalysis/data/singleDREAM.xml b/SimG4CMS/CherenkovAnalysis/data/singleDREAM.xml index 13b194b0124af..239e87c842921 100644 --- a/SimG4CMS/CherenkovAnalysis/data/singleDREAM.xml +++ b/SimG4CMS/CherenkovAnalysis/data/singleDREAM.xml @@ -1,5 +1,5 @@ - + @@ -39,14 +39,16 @@ - + - - - - - - + + + + + + + + diff --git a/SimG4CMS/CherenkovAnalysis/interface/DreamSD.h b/SimG4CMS/CherenkovAnalysis/interface/DreamSD.h index df844550bc886..8d3928ad1b039 100644 --- a/SimG4CMS/CherenkovAnalysis/interface/DreamSD.h +++ b/SimG4CMS/CherenkovAnalysis/interface/DreamSD.h @@ -6,6 +6,8 @@ #include "G4PhysicsOrderedFreeVector.hh" +#include + #include const int MAXPHOTONS = 500; // Maximum number of photons we can store @@ -50,7 +52,7 @@ class DreamSD : public CaloSD { bool setPbWO2MaterialProperties_(G4Material *aMaterial); static constexpr double k_ScaleFromDDDToG4 = 1.0; - static constexpr double k_ScaleFromDD4HepToG4 = 10.0; + static constexpr double k_ScaleFromDD4HepToG4 = 1.0 / dd4hep::mm; bool useBirk_, doCherenkov_, readBothSide_, dd4hep_; double birk1_, birk2_, birk3_; diff --git a/SimG4CMS/CherenkovAnalysis/python/SingleDREAMXML_cfi.py b/SimG4CMS/CherenkovAnalysis/python/SingleDREAMXML_cfi.py index 859a9b63897fe..f61ed78b83ef9 100644 --- a/SimG4CMS/CherenkovAnalysis/python/SingleDREAMXML_cfi.py +++ b/SimG4CMS/CherenkovAnalysis/python/SingleDREAMXML_cfi.py @@ -1,7 +1,8 @@ import FWCore.ParameterSet.Config as cms XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", - geomXMLFiles = cms.vstring('Geometry/CMSCommonData/data/materials.xml', + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v2/materials.xml', 'SimG4CMS/CherenkovAnalysis/data/singleDREAM.xml'), rootNodeName = cms.string('singleDREAM:DREAM') ) diff --git a/SimG4CMS/CherenkovAnalysis/src/DreamSD.cc b/SimG4CMS/CherenkovAnalysis/src/DreamSD.cc index 77f3e672f7bbf..249ef8a029b10 100644 --- a/SimG4CMS/CherenkovAnalysis/src/DreamSD.cc +++ b/SimG4CMS/CherenkovAnalysis/src/DreamSD.cc @@ -31,7 +31,7 @@ #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" -#define EDM_ML_DEBUG +//#define EDM_ML_DEBUG //________________________________________________________________________________________ DreamSD::DreamSD(const std::string &name, @@ -43,12 +43,12 @@ DreamSD::DreamSD(const std::string &name, edm::ParameterSet m_EC = p.getParameter("ECalSD"); useBirk_ = m_EC.getParameter("UseBirkLaw"); doCherenkov_ = m_EC.getParameter("doCherenkov"); - birk1_ = m_EC.getParameter("BirkC1") * (g / (MeV * cm2)); + birk1_ = m_EC.getParameter("BirkC1") * (CLHEP::g / (CLHEP::MeV * CLHEP::cm2)); birk2_ = m_EC.getParameter("BirkC2"); birk3_ = m_EC.getParameter("BirkC3"); slopeLY_ = m_EC.getParameter("SlopeLightYield"); readBothSide_ = m_EC.getUntrackedParameter("ReadBothSide", false); - dd4hep_ = m_EC.getUntrackedParameter("DD4Hep", false); + dd4hep_ = p.getParameter("g4GeometryDD4hepSource"); chAngleIntegrals_.reset(nullptr); @@ -58,7 +58,13 @@ DreamSD::DreamSD(const std::string &name, << "\n Slope for Light yield is set to " << slopeLY_ << "\n Parameterization of Cherenkov is set to " << doCherenkov_ << ", readout both sides is " << readBothSide_ << " and dd4hep flag " << dd4hep_; - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalSim") << GetName() << " initialized"; + const G4LogicalVolumeStore *lvs = G4LogicalVolumeStore::GetInstance(); + unsigned int k(0); + for (auto lvcite = lvs->begin(); lvcite != lvs->end(); ++lvcite, ++k) + edm::LogVerbatim("EcalSim") << "Volume[" << k << "] " << (*lvcite)->GetName(); +#endif initMap(name, es); } @@ -88,8 +94,10 @@ void DreamSD::initRun() { DimensionMap::const_iterator ite = xtalLMap_.begin(); const G4LogicalVolume *lv = (ite->first); G4Material *material = lv->GetMaterial(); +#ifdef EDM_ML_DEBUG edm::LogVerbatim("EcalSim") << "DreamSD::initRun: Initializes for material " << material->GetName() << " in " << lv->GetName(); +#endif materialPropertiesTable_ = material->GetMaterialPropertiesTable(); if (!materialPropertiesTable_) { if (!setPbWO2MaterialProperties_(material)) { @@ -138,12 +146,13 @@ void DreamSD::initMap(const std::string &sd, const edm::EventSetup &es) { es.get().get(cpv); DDSpecificsMatchesValueFilter filter{DDValue("ReadOutName", sd, 0)}; DDFilteredView fv((*cpv), filter); - - bool dodet = fv.firstChild(); + fv.firstChild(); + bool dodet = true; + const G4LogicalVolumeStore *lvs = G4LogicalVolumeStore::GetInstance(); while (dodet) { const DDSolid &sol = fv.logicalPart().solid(); std::vector paras(sol.parameters()); - std::string name = sol.name().name(); + G4String name = sol.name().name(); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EcalSim") << "DreamSD::initMap (for " << sd << "): Solid " << name << " Shape " << sol.shape() << " Parameter 0 = " << paras[0]; @@ -152,7 +161,16 @@ void DreamSD::initMap(const std::string &sd, const edm::EventSetup &es) { std::sort(paras.begin(), paras.end()); double length = 2.0 * k_ScaleFromDDDToG4 * paras.back(); double width = 2.0 * k_ScaleFromDDDToG4 * paras.front(); - fillMap(name, length, width); + G4LogicalVolume *lv = nullptr; + for (auto lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++) + if ((*lvcite)->GetName() == name) { + lv = (*lvcite); + break; + } + xtalLMap_.insert(std::pair(lv, Doubles(length, width))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalSim") << "DreamSD " << name << ":" << lv << ":" << length << ":" << width; +#endif dodet = fv.next(); } } @@ -175,9 +193,10 @@ void DreamSD::initMap(const std::string &sd, const edm::EventSetup &es) { //________________________________________________________________________________________ void DreamSD::fillMap(const std::string &name, double length, double width) { const G4LogicalVolumeStore *lvs = G4LogicalVolumeStore::GetInstance(); - std::vector::const_iterator lvcite; + edm::LogVerbatim("EcalSim") << "LV Store with " << lvs->size() << " elements"; G4LogicalVolume *lv = nullptr; - for (lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++) { + for (auto lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++) { + edm::LogVerbatim("EcalSim") << name << " vs " << (*lvcite)->GetName(); if ((*lvcite)->GetName() == static_cast(name)) { lv = (*lvcite); break; @@ -409,10 +428,8 @@ double DreamSD::getAverageNumberOfPhotons_(const double charge, // Calculate number of photons double numPhotons = rFact * charge / eplus * charge / eplus * (dp - ge * BetaInverse * BetaInverse); -#ifdef EDM_ML_DEBUG edm::LogVerbatim("EcalSim") << "@SUB=getAverageNumberOfPhotons\nCAImin = " << CAImin << "\nCAImax = " << CAImax << "\ndp = " << dp << ", ge = " << ge << "\nnumPhotons = " << numPhotons; -#endif return numPhotons; } diff --git a/SimG4CMS/CherenkovAnalysis/test/runSingleDREAMDD4Hep_cfg.py b/SimG4CMS/CherenkovAnalysis/test/runSingleDREAMDD4Hep_cfg.py new file mode 100644 index 0000000000000..d7f5f7125f08a --- /dev/null +++ b/SimG4CMS/CherenkovAnalysis/test/runSingleDREAMDD4Hep_cfg.py @@ -0,0 +1,61 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("CaloTest") +process.load("SimGeneral.HepPDTESSource.pdt_cfi") +process.load("Configuration.EventContent.EventContent_cff") +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load("SimG4CMS.CherenkovAnalysis.gun_cff") +process.load("Configuration.Geometry.GeometryDD4hep_cff") +process.load("Geometry.HcalCommonData.caloSimulationParameters_cff") +process.load('GeneratorInterface.Core.generatorSmeared_cfi') +process.load("SimG4Core.Application.g4SimHits_cfi") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(10) +) + +process.TFileService = cms.Service("TFileService", + fileName = cms.string('Cherenkov-e10-a0-dd4hep.root') +) + + +process.MessageLogger.cerr.FwkReport.reportEvery = 5 +if hasattr(process,'MessageLogger'): + process.MessageLogger.EcalSim=dict() + process.MessageLogger.HCalGeom=dict() + process.MessageLogger.CherenkovAnalysis=dict() + process.MessageLogger.SimG4CoreGeometry=dict() + +process.load("IOMC.RandomEngine.IOMC_cff") +process.RandomNumberGeneratorService.generator.initialSeed = 456789 +process.RandomNumberGeneratorService.g4SimHits.initialSeed = 9876 +process.RandomNumberGeneratorService.VtxSmeared.initialSeed = 123456789 + +process.analyzer = cms.EDAnalyzer("CherenkovAnalysis", + maxEnergy = cms.double(2.0), + caloHitSource = cms.InputTag("g4SimHits","EcalHitsEB"), + nBinsEnergy = cms.uint32(50) +) + +process.p1 = cms.Path(process.generator*process.VtxSmeared*process.generatorSmeared*process.g4SimHits*process.analyzer) + +process.DDDetectorESProducer.confGeomXMLFiles = cms.FileInPath("SimG4CMS/CherenkovAnalysis/data/SingleDREAMDD4Hep.xml") +process.generator.PGunParameters.MinE = 10.0 +process.generator.PGunParameters.MaxE = 10.0 +process.g4SimHits.UseMagneticField = False +process.g4SimHits.g4GeometryDD4hepSource = True +process.g4SimHits.Physics.type = 'SimG4Core/Physics/QGSP_FTFP_BERT_EML' +process.g4SimHits.ECalSD = cms.PSet( + TestBeam = cms.untracked.bool(False), + ReadBothSide = cms.untracked.bool(True), + BirkL3Parametrization = cms.bool(False), + doCherenkov = cms.bool(True), + BirkCut = cms.double(0.1), + BirkC1 = cms.double(0.013), + BirkC3 = cms.double(0.0), + BirkC2 = cms.double(9.6e-06), + SlopeLightYield = cms.double(0.0), + UseBirkLaw = cms.bool(False), + BirkSlope = cms.double(0.253694) +) + diff --git a/SimG4CMS/CherenkovAnalysis/test/runSingleDREAMDDD_cfg.py b/SimG4CMS/CherenkovAnalysis/test/runSingleDREAMDDD_cfg.py new file mode 100644 index 0000000000000..599e24a360149 --- /dev/null +++ b/SimG4CMS/CherenkovAnalysis/test/runSingleDREAMDDD_cfg.py @@ -0,0 +1,60 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("CaloTest") +process.load("SimGeneral.HepPDTESSource.pdt_cfi") +process.load("Configuration.EventContent.EventContent_cff") +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load("SimG4CMS.CherenkovAnalysis.gun_cff") +process.load("SimG4CMS.CherenkovAnalysis.SingleDREAMXML_cfi") +process.load("Geometry.HcalCommonData.caloSimulationParameters_cff") +process.load('GeneratorInterface.Core.generatorSmeared_cfi') +process.load("SimG4Core.Application.g4SimHits_cfi") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(10) +) + +process.TFileService = cms.Service("TFileService", + fileName = cms.string('Cherenkov-e10-a0-ddd.root') +) + + +process.MessageLogger.cerr.FwkReport.reportEvery = 5 +if hasattr(process,'MessageLogger'): + process.MessageLogger.EcalSim=dict() + process.MessageLogger.HCalGeom=dict() + process.MessageLogger.CherenkovAnalysis=dict() + process.MessageLogger.SimG4CoreGeometry=dict() + +process.load("IOMC.RandomEngine.IOMC_cff") +process.RandomNumberGeneratorService.generator.initialSeed = 456789 +process.RandomNumberGeneratorService.g4SimHits.initialSeed = 9876 +process.RandomNumberGeneratorService.VtxSmeared.initialSeed = 123456789 + +process.analyzer = cms.EDAnalyzer("CherenkovAnalysis", + maxEnergy = cms.double(2.0), + caloHitSource = cms.InputTag("g4SimHits","EcalHitsEB"), + nBinsEnergy = cms.uint32(50) +) + +process.p1 = cms.Path(process.generator*process.VtxSmeared*process.generatorSmeared*process.g4SimHits*process.analyzer) + +process.generator.PGunParameters.MinE = 10.0 +process.generator.PGunParameters.MaxE = 10.0 +process.g4SimHits.UseMagneticField = False +process.g4SimHits.Physics.type = 'SimG4Core/Physics/QGSP_FTFP_BERT_EML' +process.g4SimHits.ECalSD = cms.PSet( + TestBeam = cms.untracked.bool(False), + ReadBothSide = cms.untracked.bool(True), + DD4Hep = cms.untracked.bool(False), + BirkL3Parametrization = cms.bool(False), + doCherenkov = cms.bool(True), + BirkCut = cms.double(0.1), + BirkC1 = cms.double(0.013), + BirkC3 = cms.double(0.0), + BirkC2 = cms.double(9.6e-06), + SlopeLightYield = cms.double(0.0), + UseBirkLaw = cms.bool(False), + BirkSlope = cms.double(0.253694) +) + diff --git a/SimG4CMS/CherenkovAnalysis/test/runSingleDREAM_cfg.py b/SimG4CMS/CherenkovAnalysis/test/runSingleDREAM_cfg.py deleted file mode 100644 index 9dbc76503062e..0000000000000 --- a/SimG4CMS/CherenkovAnalysis/test/runSingleDREAM_cfg.py +++ /dev/null @@ -1,57 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("CaloTest") -process.load("Configuration.EventContent.EventContent_cff") -process.load('FWCore.MessageService.MessageLogger_cfi') -process.load('GeneratorInterface.Core.generatorSmeared_cfi') -process.load("SimG4CMS.CherenkovAnalysis.gun_cff") -process.load("SimGeneral.HepPDTESSource.pdt_cfi") -process.load("SimG4CMS.CherenkovAnalysis.SingleDREAMXML_cfi") -process.load("Geometry.HcalCommonData.hcalDDDSimConstants_cff") -process.load("SimG4Core.Application.g4SimHits_cfi") - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(10) -) - -process.TFileService = cms.Service("TFileService", - fileName = cms.string('Cherenkov-e10-a0.root') -) - - -process.MessageLogger.cerr.FwkReport.reportEvery = 5 -if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('EcalSim') - process.MessageLogger.categories.append('CherenkovAnalysis') - -process.load("IOMC.RandomEngine.IOMC_cff") -process.RandomNumberGeneratorService.generator.initialSeed = 456789 -process.RandomNumberGeneratorService.g4SimHits.initialSeed = 9876 -process.RandomNumberGeneratorService.VtxSmeared.initialSeed = 123456789 - -process.analyzer = cms.EDAnalyzer("CherenkovAnalysis", - maxEnergy = cms.double(2.0), - caloHitSource = cms.InputTag("g4SimHits","EcalHitsEB"), - nBinsEnergy = cms.uint32(50) -) - -process.p1 = cms.Path(process.generator*process.VtxSmeared*process.generatorSmeared*process.g4SimHits*process.analyzer) -process.generator.PGunParameters.MinE = 10.0 -process.generator.PGunParameters.MaxE = 10.0 -process.g4SimHits.UseMagneticField = False -process.g4SimHits.Physics.type = 'SimG4Core/Physics/QGSP_FTFP_BERT_EML' -process.g4SimHits.ECalSD = cms.PSet( - TestBeam = cms.untracked.bool(False), - ReadBothSide = cms.untracked.bool(True), - DD4Hep = cms.untracked.bool(False), - BirkL3Parametrization = cms.bool(False), - doCherenkov = cms.bool(True), - BirkCut = cms.double(0.1), - BirkC1 = cms.double(0.013), - BirkC3 = cms.double(0.0), - BirkC2 = cms.double(9.6e-06), - SlopeLightYield = cms.double(0.0), - UseBirkLaw = cms.bool(False), - BirkSlope = cms.double(0.253694) -) - diff --git a/SimG4CMS/CherenkovAnalysis/test/testMuon_cfg.py b/SimG4CMS/CherenkovAnalysis/test/testMuon_cfg.py index 3976b889c5e43..082b16a9afd21 100644 --- a/SimG4CMS/CherenkovAnalysis/test/testMuon_cfg.py +++ b/SimG4CMS/CherenkovAnalysis/test/testMuon_cfg.py @@ -52,8 +52,8 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('EcalSim') - process.MessageLogger.categories.append('CherenkovAnalysis') + process.MessageLogger.EcalSim=dict() + process.MessageLogger.CherenkovAnalysis=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/SimG4CMS/Forward/interface/CastorShowerLibrary.h b/SimG4CMS/Forward/interface/CastorShowerLibrary.h index 2e8c1f1212684..ac0683b71ecf4 100644 --- a/SimG4CMS/Forward/interface/CastorShowerLibrary.h +++ b/SimG4CMS/Forward/interface/CastorShowerLibrary.h @@ -22,7 +22,7 @@ class G4Step; class TFile; -class TBranchObject; +class TBranch; class CastorShowerLibrary { public: @@ -38,19 +38,14 @@ class CastorShowerLibrary { protected: void initFile(edm::ParameterSet const &); - void getRecord(int, int); - void loadEventInfo(TBranchObject *); + CastorShowerEvent getRecord(int, int); + void loadEventInfo(TBranch *); // if eta or phi is not given, take into account only the binning in energy - void select(int, double, double = 0, double = 9); + CastorShowerEvent select(int, double, double = 0, double = 9); private: TFile *hf; - TBranchObject *evtInfo; // pointer to CastorShowerLibraryInfo-type branch - TBranchObject *emBranch, *hadBranch; // pointer to CastorShowerEvent-type branch - - // User defined classes in Root Dictionary - CastorShowerLibraryInfo *eventInfo; - CastorShowerEvent *showerEvent; + TBranch *emBranch, *hadBranch; // pointer to CastorShowerEvent-type branch bool verbose; unsigned int nMomBin, totEvents, evtPerBin; diff --git a/SimG4CMS/Forward/python/test/runZdc_cfg.py b/SimG4CMS/Forward/python/test/runZdc_cfg.py index 28f90b7e36222..a93b04788c5bf 100644 --- a/SimG4CMS/Forward/python/test/runZdc_cfg.py +++ b/SimG4CMS/Forward/python/test/runZdc_cfg.py @@ -90,29 +90,10 @@ def customise(process): #Tweak Message logger to dump G4cout and G4cerr messages in G4msg.log #print process.MessageLogger.__dict__ - process.MessageLogger.destinations=cms.untracked.vstring('cout' - ,'cerr' - ,'G4msg' - ) - process.MessageLogger.categories=cms.untracked.vstring('FwkJob' - ,'FwkReport' - ,'FwkSummary' - ,'Root_NoDictionary' - ,'TimeReport' - ,'TimeModule' - ,'TimeEvent' - ,'MemoryCheck' - ,'PhysicsList' - ,'G4cout' - ,'G4cerr' - ,'CaloSim' - ,'ForwardSim' - ) - process.MessageLogger.debugModules=cms.untracked.vstring('g4SimHits') #Configuring the G4msg.log output - process.MessageLogger.G4msg = cms.untracked.PSet( + process.MessageLogger.files = dict(G4msg = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(True) #First eliminate unneeded output ,threshold = cms.untracked.string('INFO') @@ -137,6 +118,7 @@ def customise(process): ,CaloSim = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ,ForwardSim = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ) +) #Add these 3 lines to put back the summary for timing information at the end of the logfile #(needed for TimeReport report) diff --git a/SimG4CMS/Forward/src/CastorShowerLibrary.cc b/SimG4CMS/Forward/src/CastorShowerLibrary.cc index 0907573aaf0ef..27a6537f4b817 100644 --- a/SimG4CMS/Forward/src/CastorShowerLibrary.cc +++ b/SimG4CMS/Forward/src/CastorShowerLibrary.cc @@ -23,15 +23,15 @@ #include "TROOT.h" #include "TFile.h" #include "TTree.h" -#include "TBranchObject.h" +#include "TBranch.h" //#define DebugLog CastorShowerLibrary::CastorShowerLibrary(const std::string& name, edm::ParameterSet const& p) : hf(nullptr), - evtInfo(nullptr), emBranch(nullptr), hadBranch(nullptr), + verbose(false), nMomBin(0), totEvents(0), evtPerBin(0), @@ -91,9 +91,9 @@ void CastorShowerLibrary::initFile(edm::ParameterSet const& p) { } // Check for the TBranch holding EventVerbatim in "Events" TTree - TTree* event = (TTree*)hf->Get("CastorCherenkovPhotons"); + TTree* event = hf->Get("CastorCherenkovPhotons"); if (event) { - evtInfo = (TBranchObject*)event->GetBranch(branchEvInfo.c_str()); + auto evtInfo = event->GetBranch(branchEvInfo.c_str()); if (evtInfo) { loadEventInfo(evtInfo); } else { @@ -107,10 +107,10 @@ void CastorShowerLibrary::initFile(edm::ParameterSet const& p) { } // Get EM and HAD Branchs - emBranch = (TBranchObject*)event->GetBranch(branchEM.c_str()); + emBranch = event->GetBranch(branchEM.c_str()); if (verbose) emBranch->Print(); - hadBranch = (TBranchObject*)event->GetBranch(branchHAD.c_str()); + hadBranch = event->GetBranch(branchHAD.c_str()); if (verbose) hadBranch->Print(); edm::LogVerbatim("CastorShower") << "CastorShowerLibrary: Branch " << branchEM << " has " << emBranch->GetEntries() @@ -120,7 +120,7 @@ void CastorShowerLibrary::initFile(edm::ParameterSet const& p) { //============================================================================================= -void CastorShowerLibrary::loadEventInfo(TBranchObject* branch) { +void CastorShowerLibrary::loadEventInfo(TBranch* branch) { ////////////////////////////////////////////////////////// // // Get EventInfo from the "TBranch* branch" of Root file @@ -130,7 +130,8 @@ void CastorShowerLibrary::loadEventInfo(TBranchObject* branch) { // ////////////////////////////////////////////////////////// - eventInfo = new CastorShowerLibraryInfo(); + CastorShowerLibraryInfo tempInfo; + auto* eventInfo = &tempInfo; branch->SetAddress(&eventInfo); branch->GetEntry(0); // Initialize shower library general parameters @@ -215,18 +216,17 @@ CastorShowerEvent CastorShowerLibrary::getShowerHits(const G4Step* aStep, bool& // "showerEvent" instance of class CastorShowerEvent if (isEM) { - select(0, pin, etain, phiin); + hit = select(0, pin, etain, phiin); } else { - select(1, pin, etain, phiin); + hit = select(1, pin, etain, phiin); } - hit = (*showerEvent); return hit; } //============================================================================================= -void CastorShowerLibrary::getRecord(int type, int record) { +CastorShowerEvent CastorShowerLibrary::getRecord(int type, int record) { ////////////////////////////////////////////////////////////// // // Retrieve event # "record" from the library and stores it @@ -242,7 +242,8 @@ void CastorShowerLibrary::getRecord(int type, int record) { LogDebug("CastorShower") << "CastorShowerLibrary::getRecord: "; #endif int nrc = record; - showerEvent = new CastorShowerEvent(); + CastorShowerEvent retValue; + CastorShowerEvent* showerEvent = &retValue; if (type > 0) { hadBranch->SetAddress(&showerEvent); hadBranch->GetEntry(nrc); @@ -257,11 +258,12 @@ void CastorShowerLibrary::getRecord(int type, int record) { << nHit << " CastorShowerHits"; #endif + return retValue; } //======================================================================================= -void CastorShowerLibrary::select(int type, double pin, double etain, double phiin) { +CastorShowerEvent CastorShowerLibrary::select(int type, double pin, double etain, double phiin) { //////////////////////////////////////////////////////// // // Selects an event from the library based on @@ -321,7 +323,7 @@ void CastorShowerLibrary::select(int type, double pin, double etain, double phii #endif // Retrieve record number "irec" from the library - getRecord(type, irec); + return getRecord(type, irec); } //======================================================================================= diff --git a/SimG4CMS/Forward/test/python/runTotemT22021_cfg.py b/SimG4CMS/Forward/test/python/runTotemT22021_cfg.py index 2aa3b220c0211..3a8fde45eb0e5 100644 --- a/SimG4CMS/Forward/test/python/runTotemT22021_cfg.py +++ b/SimG4CMS/Forward/test/python/runTotemT22021_cfg.py @@ -14,10 +14,10 @@ process.GlobalTag.globaltag = autoCond['phase2_realistic'] if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('ForwardGeom') - process.MessageLogger.categories.append('ForwardSim') - process.MessageLogger.categories.append('CaloSim') -# process.MessageLogger.categories.append('SimG4CoreGeometry') + process.MessageLogger.ForwardGeom=dict() + process.MessageLogger.ForwardSim=dict() + process.MessageLogger.CaloSim=dict() +# process.MessageLogger.SimG4CoreGeometry=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/SimG4CMS/HGCalTestBeam/plugins/HGCalTBAnalyzer.cc b/SimG4CMS/HGCalTestBeam/plugins/HGCalTBAnalyzer.cc index 308f61aa3b988..1b576ea32c656 100644 --- a/SimG4CMS/HGCalTestBeam/plugins/HGCalTBAnalyzer.cc +++ b/SimG4CMS/HGCalTestBeam/plugins/HGCalTBAnalyzer.cc @@ -812,7 +812,7 @@ void HGCalTBAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& i void HGCalTBAnalyzer::analyzeSimHits(int type, std::vector& hits, double zFront) { std::map map_hits, map_hitn; std::map map_hittime_firsthit, map_hittime_lasthit, map_hittime_15Mip; - std::map map_hitDepth; + std::map map_hitDepth, map_hitWafer; std::map> map_hitLayer, map_hitCell; double entot(0); std::map nhits; @@ -854,9 +854,9 @@ void HGCalTBAnalyzer::analyzeSimHits(int type, std::vector& hits, doub idx = sector * 1000 + cell; #ifdef EDM_ML_DEBUG std::pair xy = hgcons_[type]->locateCell(cell, layer, sector, false); - edm::LogVerbatim("HGCSim") << "detId " << std::hex << id << std::dec << " Layer:Wafer:Cell " << layer << ":" - << sector << ":" << cell << " Position " << xy.first << ":" << xy.second << ":" - << hgcons_[type]->waferZ(layer, false); + edm::LogVerbatim("HGCSim") << "HGCalTBAnalyzer::detId " << std::hex << id << std::dec << " Layer:Wafer:Cell " + << layer << ":" << sector << ":" << cell << " Position " << xy.first << ":" + << xy.second << ":" << hgcons_[type]->waferZ(layer, false); #endif } #ifdef EDM_ML_DEBUG @@ -875,6 +875,10 @@ void HGCalTBAnalyzer::analyzeSimHits(int type, std::vector& hits, doub } else { map_hitLayer[layer] = std::make_pair(id, energy); } + if (map_hitWafer.count(sector) != 0) + map_hitWafer[sector] += energy; + else + map_hitWafer[sector] = energy; if (depth >= 0) { if (map_hitCell.count(idx) != 0) { double ee = energy + map_hitCell[idx].second; @@ -912,6 +916,9 @@ void HGCalTBAnalyzer::analyzeSimHits(int type, std::vector& hits, doub } if (type < 2) { //store only for EE and FH + edm::LogVerbatim("HGCSim") << "HGCalTAnalyzer:: " << map_hitWafer.size() << " wafers are hit in type " << type; + for (auto itr = map_hitWafer.begin(); itr != map_hitWafer.end(); ++itr) + edm::LogVerbatim("HGCSim") << "Wafer: " << itr->first << " Deposited Energy " << itr->second; ///now sort the vector of each cell hits for (const auto& itr : map_hitTimeEn) { uint32_t id = itr.first; diff --git a/SimG4CMS/HGCalTestBeam/python/HGCalTB181Oct4XML_cfi.py b/SimG4CMS/HGCalTestBeam/python/HGCalTB181Oct4XML_cfi.py new file mode 100644 index 0000000000000..d18f8d480c0a1 --- /dev/null +++ b/SimG4CMS/HGCalTestBeam/python/HGCalTB181Oct4XML_cfi.py @@ -0,0 +1,21 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring('Geometry/CMSCommonData/data/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v1/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/TB181/Oct181/cms.xml', + 'Geometry/HGCalCommonData/data/TB181/Oct184/hgcal.xml', + 'Geometry/HGCalCommonData/data/TB181/Oct184/hgcalEE.xml', + 'Geometry/HGCalCommonData/data/TB181/Oct181/hgcalHE.xml', + 'Geometry/HGCalCommonData/data/TB181/ahcal.xml', + 'Geometry/HGCalCommonData/data/TB181/Oct181/hgcalBeam.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v7/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/TB181/Oct181/hgcalsense.xml', + 'Geometry/HGCalCommonData/data/TB181/hgcProdCuts.xml', + 'Geometry/HGCalCommonData/data/TB181/Oct181/hgcalCons.xml' + ), + rootNodeName = cms.string('cms:OCMS') +) + + diff --git a/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN170_cfg.py b/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN170_cfg.py index 0dfa438b7dc9f..514629ddf2ab2 100644 --- a/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN170_cfg.py +++ b/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN170_cfg.py @@ -27,10 +27,10 @@ ) if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HGCSim') - process.MessageLogger.categories.append('HcalSim') - process.MessageLogger.categories.append('HcalTB06BeamSD') - process.MessageLogger.categories.append('ValidHGCal') + process.MessageLogger.HGCSim=dict() + process.MessageLogger.HcalSim=dict() + process.MessageLogger.HcalTB06BeamSD=dict() + process.MessageLogger.ValidHGCal=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct1_cfg.py b/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct1_cfg.py index 2bbaf8208f328..84cb605875426 100644 --- a/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct1_cfg.py +++ b/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct1_cfg.py @@ -27,11 +27,11 @@ ) if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HGCalGeom') - process.MessageLogger.categories.append('SimG4CoreGeometry') - process.MessageLogger.categories.append('HGCSim') - process.MessageLogger.categories.append('HcalSim') - process.MessageLogger.categories.append('HcalTB06BeamSD') + process.MessageLogger.HGCalGeom=dict() + process.MessageLogger.SimG4CoreGeometry=dict() + process.MessageLogger.HGCSim=dict() + process.MessageLogger.HcalSim=dict() + process.MessageLogger.HcalTB06BeamSD=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct1el100_cfg.py b/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct1el100_cfg.py index c3f17fd168b8e..a8e685c56e733 100644 --- a/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct1el100_cfg.py +++ b/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct1el100_cfg.py @@ -27,9 +27,9 @@ ) if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('BeamMomentumGun') - process.MessageLogger.categories.append('HGCSim') -# process.MessageLogger.categories.append('HcalSim') + process.MessageLogger.BeamMomentumGun=dict() + process.MessageLogger.HGCSim=dict() +# process.MessageLogger.HcalSim=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct2_cfg.py b/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct2_cfg.py index 167c53dc7fc67..dcbf3799956d4 100644 --- a/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct2_cfg.py +++ b/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct2_cfg.py @@ -27,11 +27,11 @@ ) if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HGCalGeom') - process.MessageLogger.categories.append('SimG4CoreGeometry') - process.MessageLogger.categories.append('HGCSim') - process.MessageLogger.categories.append('HcalSim') - process.MessageLogger.categories.append('HcalTB06BeamSD') + process.MessageLogger.HGCalGeom=dict() + process.MessageLogger.SimG4CoreGeometry=dict() + process.MessageLogger.HGCSim=dict() + process.MessageLogger.HcalSim=dict() + process.MessageLogger.HcalTB06BeamSD=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct3_cfg.py b/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct3_cfg.py index ccfcc0f3bfe92..a9d57cc97d905 100644 --- a/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct3_cfg.py +++ b/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct3_cfg.py @@ -27,11 +27,11 @@ ) if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HGCalGeom') - process.MessageLogger.categories.append('SimG4CoreGeometry') - process.MessageLogger.categories.append('HGCSim') - process.MessageLogger.categories.append('HcalSim') - process.MessageLogger.categories.append('HcalTB06BeamSD') + process.MessageLogger.HGCalGeom=dict() + process.MessageLogger.SimG4CoreGeometry=dict() + process.MessageLogger.HGCSim=dict() + process.MessageLogger.HcalSim=dict() + process.MessageLogger.HcalTB06BeamSD=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct4_cfg.py b/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct4_cfg.py new file mode 100644 index 0000000000000..2bc69899f0bff --- /dev/null +++ b/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181Oct4_cfg.py @@ -0,0 +1,143 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process('SIM') + +# import of standard configurations +process.load("FWCore.MessageService.MessageLogger_cfi") +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('SimG4CMS.HGCalTestBeam.HGCalTB181Oct4XML_cfi') +process.load('Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi') +process.load('Geometry.HGCalCommonData.hgcalParametersInitialization_cfi') +process.load('Geometry.HcalTestBeamData.hcalTB06Parameters_cff') +process.load('Configuration.StandardSequences.MagneticField_0T_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedFlat_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +process.load('SimG4CMS.HGCalTestBeam.HGCalTBAnalyzer_cfi') +process.load('SimG4CMS.HGCalTestBeam.HGCalTBCheckGunPosition_cfi') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(10) +) + +if 'MessageLogger' in process.__dict__: + process.MessageLogger.HGCalGeom=dict() +# process.MessageLogger.SimG4CoreGeometry=dict() + process.MessageLogger.HGCSim=dict() + process.MessageLogger.HcalSim=dict() + process.MessageLogger.HcalTB06BeamSD=dict() + +# Input source +process.source = cms.Source("EmptySource") + +process.options = cms.untracked.PSet( +) + +# Production Info +process.configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('SingleMuonE200_cfi nevts:10'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +# Output definition + +process.FEVTDEBUGoutput = cms.OutputModule("PoolOutputModule", + SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring('generation_step') + ), + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('GEN-SIM'), + filterName = cms.untracked.string('') + ), + fileName = cms.untracked.string('file:TBGenSim181Oct1.root'), + outputCommands = process.FEVTDEBUGEventContent.outputCommands, + splitLevel = cms.untracked.int32(0) +) + +# Additional output definition +process.TFileService = cms.Service("TFileService", + fileName = cms.string('TBGenSim.root') + ) + +# Other statements +process.genstepfilter.triggerConditions=cms.vstring("generation_step") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_mc', '') + +process.generator = cms.EDProducer("FlatRandomEThetaGunProducer", + AddAntiParticle = cms.bool(False), + PGunParameters = cms.PSet( + MinE = cms.double(99.99), + MaxE = cms.double(100.01), + MinTheta = cms.double(0.0), + MaxTheta = cms.double(0.0), + MinPhi = cms.double(-3.14159265359), + MaxPhi = cms.double(3.14159265359), + PartID = cms.vint32(11) + ), + Verbosity = cms.untracked.int32(0), + firstRun = cms.untracked.uint32(1), + psethack = cms.string('single muon E 100') +) +process.VtxSmeared.MinZ = -800.0 +process.VtxSmeared.MaxZ = -800.0 +process.VtxSmeared.MinX = -7.5 +process.VtxSmeared.MaxX = 7.5 +process.VtxSmeared.MinY = -7.5 +process.VtxSmeared.MaxY = 7.5 +process.g4SimHits.HGCSD.RejectMouseBite = True +process.g4SimHits.HGCSD.RotatedWafer = True +process.g4SimHits.Watchers = cms.VPSet(cms.PSet( + HGCPassive = cms.PSet( + LVNames = cms.vstring('HGCalEE','HGCalHE','HGCalAH', 'HGCalBeam', 'CMSE'), + MotherName = cms.string('OCMS'), + ), + type = cms.string('HGCPassive'), + ) + ) +process.HGCalTBAnalyzer.doDigis = False +process.HGCalTBAnalyzer.doRecHits = False +process.HGCalTBAnalyzer.useFH = True +process.HGCalTBAnalyzer.useBH = True +process.HGCalTBAnalyzer.useBeam = True +process.HGCalTBAnalyzer.zFrontEE = 1110.0 +process.HGCalTBAnalyzer.zFrontFH = 1176.5 +process.HGCalTBAnalyzer.zFrontFH = 1307.5 +process.HGCalTBAnalyzer.maxDepth = 39 +process.HGCalTBAnalyzer.deltaZ = 26.2 +process.HGCalTBAnalyzer.zFirst = 22.8 +process.HGCalTBAnalyzer.doPassive = True +process.HGCalTBAnalyzer.doPassiveEE = True +process.HGCalTBAnalyzer.doPassiveHE = True +process.HGCalTBAnalyzer.doPassiveBH = True + +# Path and EndPath definitions +process.generation_step = cms.Path(process.pgen) +process.gunfilter_step = cms.Path(process.HGCalTBCheckGunPostion) +process.simulation_step = cms.Path(process.psim) +process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) +process.analysis_step = cms.Path(process.HGCalTBAnalyzer) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.FEVTDEBUGoutput_step = cms.EndPath(process.FEVTDEBUGoutput) + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step, + process.genfiltersummary_step, + process.simulation_step, + process.gunfilter_step, + process.analysis_step, + process.endjob_step, + process.FEVTDEBUGoutput_step + ) +# filter all path with the production filter sequence +for path in process.paths: + getattr(process,path)._seq = process.generator * getattr(process,path)._seq + + diff --git a/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181_cfg.py b/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181_cfg.py index 025fb0a2a6624..c24eb3f85421b 100644 --- a/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181_cfg.py +++ b/SimG4CMS/HGCalTestBeam/test/HGCalTBCERN181_cfg.py @@ -25,9 +25,9 @@ ) if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HGCSim') - process.MessageLogger.categories.append('HcalSim') - process.MessageLogger.categories.append('HcalTB06BeamSD') + process.MessageLogger.HGCSim=dict() + process.MessageLogger.HcalSim=dict() + process.MessageLogger.HcalTB06BeamSD=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/SimG4CMS/HGCalTestBeam/test/HGCalTBGenSimCERNMB_cfg.py b/SimG4CMS/HGCalTestBeam/test/HGCalTBGenSimCERNMB_cfg.py index a65c53a50b95a..be3d3d2f87ba2 100644 --- a/SimG4CMS/HGCalTestBeam/test/HGCalTBGenSimCERNMB_cfg.py +++ b/SimG4CMS/HGCalTestBeam/test/HGCalTBGenSimCERNMB_cfg.py @@ -35,8 +35,8 @@ ) if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HGCalGeom') - process.MessageLogger.categories.append('HGCSim') + process.MessageLogger.HGCalGeom=dict() + process.MessageLogger.HGCSim=dict() # Input source diff --git a/SimG4CMS/HGCalTestBeam/test/dumpTBGeometry_cfg.py b/SimG4CMS/HGCalTestBeam/test/dumpTBGeometry_cfg.py index 0ad34f5b08ce5..930bfc315f0de 100644 --- a/SimG4CMS/HGCalTestBeam/test/dumpTBGeometry_cfg.py +++ b/SimG4CMS/HGCalTestBeam/test/dumpTBGeometry_cfg.py @@ -5,9 +5,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("EmptySource") diff --git a/SimG4CMS/HGCalTestBeam/test/runTBAnalCERN181Oct1_cfg.py b/SimG4CMS/HGCalTestBeam/test/runTBAnalCERN181Oct1_cfg.py index e8a7f60549358..a34cfc2684180 100644 --- a/SimG4CMS/HGCalTestBeam/test/runTBAnalCERN181Oct1_cfg.py +++ b/SimG4CMS/HGCalTestBeam/test/runTBAnalCERN181Oct1_cfg.py @@ -22,8 +22,8 @@ ) if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HGCalGeom') - process.MessageLogger.categories.append('HGCSim') + process.MessageLogger.HGCalGeom=dict() + process.MessageLogger.HGCSim=dict() # Input source process.source = cms.Source("PoolSource", diff --git a/SimG4CMS/HcalTestBeam/test/python/anal_tb06_noEcal_cfg.py b/SimG4CMS/HcalTestBeam/test/python/anal_tb06_noEcal_cfg.py index 27e26c3ffc7c7..4e749c62b8ab8 100644 --- a/SimG4CMS/HcalTestBeam/test/python/anal_tb06_noEcal_cfg.py +++ b/SimG4CMS/HcalTestBeam/test/python/anal_tb06_noEcal_cfg.py @@ -11,7 +11,8 @@ fileName = cms.string('tb_pi_50gevNOECAL.root') ) -process.MessageLogger.destinations = cms.untracked.vstring("tb_pi_50gevNOECAL.txt") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.tb_pi_50gevNOECAL = dict(extension="txt") process.common_beam_direction_parameters.MinE = cms.double(50.0) process.common_beam_direction_parameters.MaxE = cms.double(50.0) diff --git a/SimG4CMS/HcalTestBeam/test/python/run2004_cfg.py b/SimG4CMS/HcalTestBeam/test/python/run2004_cfg.py index 4e93a7c698132..b8422e3c81973 100644 --- a/SimG4CMS/HcalTestBeam/test/python/run2004_cfg.py +++ b/SimG4CMS/HcalTestBeam/test/python/run2004_cfg.py @@ -17,14 +17,14 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - process.MessageLogger.categories.append('EcalGeom') - process.MessageLogger.categories.append('HcalSim') - process.MessageLogger.categories.append('HcalTBSim') - process.MessageLogger.categories.append('EcalSim') - process.MessageLogger.categories.append('CaloSim') - process.MessageLogger.categories.append('SimHCalData') - process.MessageLogger.categories.append('VertexGenerator') + process.MessageLogger.HCalGeom=dict() + process.MessageLogger.EcalGeom=dict() + process.MessageLogger.HcalSim=dict() + process.MessageLogger.HcalTBSim=dict() + process.MessageLogger.EcalSim=dict() + process.MessageLogger.CaloSim=dict() + process.MessageLogger.SimHCalData=dict() + process.MessageLogger.VertexGenerator=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/SimG4CMS/HcalTestBeam/test/python/run2006_33_cfg.py b/SimG4CMS/HcalTestBeam/test/python/run2006_33_cfg.py index 47667db48761a..c6dbad03eef51 100644 --- a/SimG4CMS/HcalTestBeam/test/python/run2006_33_cfg.py +++ b/SimG4CMS/HcalTestBeam/test/python/run2006_33_cfg.py @@ -15,8 +15,8 @@ process.load('IOMC.RandomEngine.IOMC_cff') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - process.MessageLogger.categories.append('HcalSim') + process.MessageLogger.HCalGeom=dict() + process.MessageLogger.HcalSim=dict() process.TFileService = cms.Service("TFileService", fileName = cms.string('hcaltb06_33.root') diff --git a/SimG4CMS/HcalTestBeam/test/python/run2006_37_cfg.py b/SimG4CMS/HcalTestBeam/test/python/run2006_37_cfg.py index a05480699ddc5..ba7cc0f3cd570 100644 --- a/SimG4CMS/HcalTestBeam/test/python/run2006_37_cfg.py +++ b/SimG4CMS/HcalTestBeam/test/python/run2006_37_cfg.py @@ -15,8 +15,8 @@ process.load('IOMC.RandomEngine.IOMC_cff') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - process.MessageLogger.categories.append('HcalSim') + process.MessageLogger.HCalGeom=dict() + process.MessageLogger.HcalSim=dict() process.TFileService = cms.Service("TFileService", fileName = cms.string('hcaltb06_37.root') diff --git a/SimG4CMS/HcalTestBeam/test/python/run2006_77_cfg.py b/SimG4CMS/HcalTestBeam/test/python/run2006_77_cfg.py index 5b288fa661782..81fad5dc9a88d 100644 --- a/SimG4CMS/HcalTestBeam/test/python/run2006_77_cfg.py +++ b/SimG4CMS/HcalTestBeam/test/python/run2006_77_cfg.py @@ -15,8 +15,8 @@ process.load('IOMC.RandomEngine.IOMC_cff') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - process.MessageLogger.categories.append('HcalSim') + process.MessageLogger.HCalGeom=dict() + process.MessageLogger.HcalSim=dict() process.TFileService = cms.Service("TFileService", fileName = cms.string('hcaltb06_77.root') diff --git a/SimG4CMS/HcalTestBeam/test/python/run2006_cfg.py b/SimG4CMS/HcalTestBeam/test/python/run2006_cfg.py index 7b84e23d954da..b6a5ac45a4d5d 100644 --- a/SimG4CMS/HcalTestBeam/test/python/run2006_cfg.py +++ b/SimG4CMS/HcalTestBeam/test/python/run2006_cfg.py @@ -15,8 +15,8 @@ process.load('IOMC.RandomEngine.IOMC_cff') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - process.MessageLogger.categories.append('HcalSim') + process.MessageLogger.HCalGeom=dict() + process.MessageLogger.HcalSim=dict() process.TFileService = cms.Service("TFileService", fileName = cms.string('hcaltb06.root') diff --git a/SimG4CMS/HcalTestBeam/test/python/run2007_cfg.py b/SimG4CMS/HcalTestBeam/test/python/run2007_cfg.py index 9cf62d4aaaf9a..95627026b1ada 100644 --- a/SimG4CMS/HcalTestBeam/test/python/run2007_cfg.py +++ b/SimG4CMS/HcalTestBeam/test/python/run2007_cfg.py @@ -15,8 +15,8 @@ process.load('IOMC.RandomEngine.IOMC_cff') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - process.MessageLogger.categories.append('HcalSim') + process.MessageLogger.HCalGeom=dict() + process.MessageLogger.HcalSim=dict() process.TFileService = cms.Service("TFileService", fileName = cms.string('hcaltb07.root') diff --git a/SimG4CMS/HcalTestBeam/test/python/run2010_cfg.py b/SimG4CMS/HcalTestBeam/test/python/run2010_cfg.py index c0116a6a34da6..14a4dead7d7bc 100644 --- a/SimG4CMS/HcalTestBeam/test/python/run2010_cfg.py +++ b/SimG4CMS/HcalTestBeam/test/python/run2010_cfg.py @@ -15,8 +15,8 @@ process.load('IOMC.RandomEngine.IOMC_cff') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') - process.MessageLogger.categories.append('HcalSim') + process.MessageLogger.HCalGeom=dict() + process.MessageLogger.HcalSim=dict() process.TFileService = cms.Service("TFileService", fileName = cms.string('ehcaltb10.root') diff --git a/SimG4CMS/Muon/test/runMuonSimHitDump_cfg.py b/SimG4CMS/Muon/test/runMuonSimHitDump_cfg.py index d1f4560691fec..f343c2693bd1d 100644 --- a/SimG4CMS/Muon/test/runMuonSimHitDump_cfg.py +++ b/SimG4CMS/Muon/test/runMuonSimHitDump_cfg.py @@ -10,7 +10,7 @@ process.load('SimG4CMS.Muon.muonSimHitDump_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HitStudy') + process.MessageLogger.HitStudy=dict() process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10), diff --git a/SimG4CMS/Muon/test/runMuon_cfg.py b/SimG4CMS/Muon/test/runMuon_cfg.py index 1a0e38cf67c0c..f478f513081e4 100644 --- a/SimG4CMS/Muon/test/runMuon_cfg.py +++ b/SimG4CMS/Muon/test/runMuon_cfg.py @@ -23,9 +23,9 @@ process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('MuonSim') - process.MessageLogger.categories.append('MuonGeom') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.MuonSim=dict() + process.MessageLogger.MuonGeom=dict() process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/SimG4CMS/PPS/src/PPSDiamondOrganization.cc b/SimG4CMS/PPS/src/PPSDiamondOrganization.cc index e20ff8bd9c1b8..27566fee9bb37 100644 --- a/SimG4CMS/PPS/src/PPSDiamondOrganization.cc +++ b/SimG4CMS/PPS/src/PPSDiamondOrganization.cc @@ -15,16 +15,17 @@ //******************************************************************** Constructor and destructor PPSDiamondOrganization ::PPSDiamondOrganization() - : theArm_(-1), theStation_(-1), theRoman_pot_(-1), thePlane_(-1), theDetector_(-1) {} + : theArm_(0), theStation_(0), theRoman_pot_(0), thePlane_(0), theDetector_(0) {} uint32_t PPSDiamondOrganization::unitID(const G4Step* aStep) { G4VPhysicalVolume* physVol; const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable(); + bool foundVacuum = false; for (int ii = 0; ii < touch->GetHistoryDepth(); ii++) { physVol = touch->GetVolume(ii); - if (physVol->GetName() == "CTPPS_Diamond_Segment" || physVol->GetName() == "CTPPS_UFSD_Segment") { + if (physVol->GetName().contains("CTPPS_Diamond_Segment") || physVol->GetName().contains("CTPPS_UFSD_Segment")) { theDetector_ = physVol->GetCopyNo() % 100; thePlane_ = physVol->GetCopyNo() / 100; LogDebug("PPSSimDiamond") << "\n---------------------CTPPS_Diamond_Segment-------------------------------------" @@ -34,15 +35,18 @@ uint32_t PPSDiamondOrganization::unitID(const G4Step* aStep) { LogDebug("PPSSimDiamond") << "\t\t\t\t\tdetector= " << theDetector_ << " plane= " << thePlane_ << " ii = " << ii; } - else if (physVol->GetName() == "Primary_Vacuum") { + else if (physVol->GetName().contains("Primary_Vacuum")) { int cpy_no = physVol->GetCopyNo(); theArm_ = (cpy_no / 100) % 10; theStation_ = (cpy_no / 10) % 10; theRoman_pot_ = cpy_no % 10; + foundVacuum = true; } - LogDebug("PPSSimDiamond") << "Diamond" - << "physVol =" << physVol->GetName() << ", level=" << ii + LogDebug("PPSSimDiamond") << "Diamond physVol =" << physVol->GetName() << ", level=" << ii << ", physVol->GetCopyNo()=" << physVol->GetCopyNo() << std::endl; } + if (foundVacuum == false) { + edm::LogError("PPSSimDiamond") << "Physical volume Primary_Vacuum not found. Cannot determine CTPPSDiamondDetId."; + } return CTPPSDiamondDetId(theArm_, theStation_, theRoman_pot_, thePlane_, theDetector_).rawId(); } diff --git a/SimG4CMS/PPS/src/PPSPixelOrganization.cc b/SimG4CMS/PPS/src/PPSPixelOrganization.cc index 07454eda9d69c..dff728471527b 100644 --- a/SimG4CMS/PPS/src/PPSPixelOrganization.cc +++ b/SimG4CMS/PPS/src/PPSPixelOrganization.cc @@ -18,7 +18,7 @@ // constructors and destructor // PPSPixelOrganization ::PPSPixelOrganization() - : currentUnitID_(-1), currentArm_(-1), currentStation_(-1), currentRP_(-1), currentPlane_(-1) { + : currentUnitID_(0), currentArm_(0), currentStation_(0), currentRP_(0), currentPlane_(0) { edm::LogInfo("PPSSim") << "Creating PPSPixelOrganization"; } @@ -30,8 +30,10 @@ uint32_t PPSPixelOrganization ::unitID(const G4Step* aStep) { const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable(); G4VPhysicalVolume* physVol; int ii = 0; + bool foundEnvelop = false; + bool foundPhysVol = false; - for (ii = 0; ii < touch->GetHistoryDepth(); ii++) { + while (ii < touch->GetHistoryDepth() && (foundEnvelop == false || foundPhysVol == false)) { physVol = touch->GetVolume(ii); edm::LogInfo("PPSSim") << "physVol=" << physVol->GetName() << ", level=" << ii @@ -39,15 +41,22 @@ uint32_t PPSPixelOrganization ::unitID(const G4Step* aStep) { if (physVol->GetName().contains("Envelop")) { currentPlane_ = physVol->GetCopyNo() - 1; - } else if (physVol->GetName() == "RP_box_primary_vacuum") { + foundEnvelop = true; + } else if (physVol->GetName().contains("RP_box_primary_vacuum")) { int cpy_no = physVol->GetCopyNo(); currentArm_ = (cpy_no / 100) % 10; currentStation_ = (cpy_no / 10) % 10; currentRP_ = cpy_no % 10; + foundPhysVol = true; } + ++ii; } - edm::LogInfo("PPSSim") << currentArm_ << " " << currentRP_ << " " << currentPlane_; + if (foundPhysVol) { + edm::LogInfo("PPSSim") << "Arm, RP, plane = " << currentArm_ << " " << currentRP_ << " " << currentPlane_; + } else { + edm::LogError("PPSSim") << "Physical volume RP_box_primary_vacuum not found. Cannot determine CTPPSPixelDetId."; + } CTPPSPixelDetId id(currentArm_, currentStation_, currentRP_, currentPlane_); uint32_t kk = id.rawId(); diff --git a/SimG4CMS/PPS/src/PPSStripOrganization.cc b/SimG4CMS/PPS/src/PPSStripOrganization.cc index ba49094c5bd9a..2b568d6821585 100644 --- a/SimG4CMS/PPS/src/PPSStripOrganization.cc +++ b/SimG4CMS/PPS/src/PPSStripOrganization.cc @@ -20,9 +20,9 @@ uint32_t PPSStripOrganization::unitID(const G4Step* aStep) { for (int ii = 0; ii < touch->GetHistoryDepth(); ii++) { physVol = touch->GetVolume(ii); - if (physVol->GetName() == "RP_Silicon_Detector") { + if (physVol->GetName().contains("RP_Silicon_Detector")) { detector = physVol->GetCopyNo(); - } else if (physVol->GetName() == "RP_box_primary_vacuum") { + } else if (physVol->GetName().contains("RP_box_primary_vacuum")) { int cpy_no = physVol->GetCopyNo(); arm = (cpy_no / 100) % 10; station = (cpy_no / 10) % 10; diff --git a/SimG4CMS/ShowerLibraryProducer/python/hcalforwardshower_cfi.py b/SimG4CMS/ShowerLibraryProducer/python/hcalforwardshower_cfi.py index 29b6966c021bc..fa18291cc967c 100644 --- a/SimG4CMS/ShowerLibraryProducer/python/hcalforwardshower_cfi.py +++ b/SimG4CMS/ShowerLibraryProducer/python/hcalforwardshower_cfi.py @@ -3,7 +3,9 @@ XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", geomXMLFiles = cms.vstring('Geometry/CMSCommonData/data/materials.xml', 'Geometry/HcalCommonData/data/hcalforwardmaterial.xml', - 'Geometry/HcalCommonData/data/hcalforwardshower.xml'), + 'Geometry/HcalCommonData/data/hcalforwardshower/v2/hcalforwardshower.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/hfshower/v1/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/hfshower/v1/hcalRecNumbering.xml'), rootNodeName = cms.string('hcalforwardshower:HFWorld') ) diff --git a/SimG4CMS/ShowerLibraryProducer/src/FiberSD.cc b/SimG4CMS/ShowerLibraryProducer/src/FiberSD.cc index 74425939f8d07..49edfba1de82a 100644 --- a/SimG4CMS/ShowerLibraryProducer/src/FiberSD.cc +++ b/SimG4CMS/ShowerLibraryProducer/src/FiberSD.cc @@ -29,12 +29,13 @@ FiberSD::FiberSD(const std::string& iname, theShower(nullptr), theHCID(-1), theHC(nullptr) { - // Get pointer to HcalDDDConstant and HcalSimulationConstants + edm::LogVerbatim("FiberSim") << "FiberSD : Instantiating for " << iname; + // Get pointer to HcalDDDConstants and HcalSimulationConstants edm::ESHandle hdsc; es.get().get(hdsc); if (!hdsc.isValid()) { - edm::LogError("FiberSim") << "FiberSD : Cannot find HcalDDDSimulationConstant"; - throw cms::Exception("Unknown", "FiberSD") << "Cannot find HcalDDDSimulationConstant\n"; + edm::LogError("FiberSim") << "FiberSD : Cannot find HcalSimulationConstants"; + throw cms::Exception("Unknown", "FiberSD") << "Cannot find HcalSimulationConstants\n"; } const HcalSimulationConstants* hsps = hdsc.product(); edm::ESHandle hdc; @@ -54,11 +55,13 @@ FiberSD::~FiberSD() { } void FiberSD::Initialize(G4HCofThisEvent* HCE) { - LogDebug("FiberSim") << "FiberSD : Initialize called for " << GetName(); + edm::LogVerbatim("FiberSim") << "FiberSD : Initialize called for " << GetName() << " in collection " << HCE; theHC = new FiberG4HitsCollection(GetName(), collectionName[0]); if (theHCID < 0) theHCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]); HCE->AddHitsCollection(theHCID, theHC); + edm::LogVerbatim("FiberSim") << "FiberSD : Add hit collectrion for " << collectionName[0] << ":" << theHCID << ":" + << theHC; } G4bool FiberSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) { @@ -69,7 +72,7 @@ G4bool FiberSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) { if (!hits.empty()) { std::vector thePE; for (unsigned int i = 0; i < hits.size(); i++) { - //std::cout<<"hit position z "<GetPosition().x(), preStepPoint->GetPosition().y(), preStepPoint->GetPosition().z()); - //std::cout<<"presteppoint position z "<GetPosition().z()<GetPosition().z(); FiberG4Hit* aHit = new FiberG4Hit(lv, detID, depth, trackID); - std::cout << "hit size " << hits.size() << " npe" << aHit->npe() << std::endl; - std::cout << "pre hit position " << aHit->hitPos() << std::endl; + edm::LogVerbatim("FiberSim") << "FiberSD :hit size " << hits.size() << " npe" << aHit->npe(); + edm::LogVerbatim("FiberSim") << "FiberSD :pre hit position " << aHit->hitPos(); aHit->setNpe(hits.size()); aHit->setPos(theHitPos); aHit->setTime(preStepPoint->GetGlobalTime()); aHit->setPhoton(thePE); - std::cout << "ShowerPhoton position " << thePE[0].x() << " " << thePE[0].y() << " " << thePE[0].z() << std::endl; + edm::LogVerbatim("FiberSim") << "FiberSD :ShowerPhoton position " << thePE[0].x() << " " << thePE[0].y() << " " + << thePE[0].z(); - LogDebug("FiberSim") << "FiberSD: Hit created at " << lv->GetName() << " DetID: " << aHit->towerId() - << " Depth: " << aHit->depth() << " Track ID: " << aHit->trackId() - << " Nb. of Cerenkov Photons: " << aHit->npe() << " Time: " << aHit->time() << " at " - << aHit->hitPos(); + edm::LogVerbatim("FiberSim") << "FiberSD: Hit created at " << lv->GetName() << " DetID: " << aHit->towerId() + << " Depth: " << aHit->depth() << " Track ID: " << aHit->trackId() + << " Nb. of Cerenkov Photons: " << aHit->npe() << " Time: " << aHit->time() << " at " + << aHit->hitPos(); for (unsigned int i = 0; i < thePE.size(); i++) - LogDebug("FiberSim") << "FiberSD: PE[" << i << "] " << thePE[i]; + edm::LogVerbatim("FiberSim") << "FiberSD: PE[" << i << "] " << thePE[i]; theHC->insert(aHit); } @@ -106,9 +110,9 @@ G4bool FiberSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) { } void FiberSD::EndOfEvent(G4HCofThisEvent* HCE) { - LogDebug("FiberSim") << "FiberSD: Sees" << theHC->entries() << " hits"; + edm::LogVerbatim("FiberSim") << "FiberSD: finds " << theHC->entries() << " hits"; clear(); - std::cout << "theHC entries = " << theHC->entries() << std::endl; + edm::LogVerbatim("FiberSim") << "theHC entries = " << theHC->entries(); } void FiberSD::clear() {} diff --git a/SimG4CMS/ShowerLibraryProducer/src/HFChamberSD.cc b/SimG4CMS/ShowerLibraryProducer/src/HFChamberSD.cc index 0bccbeaf163a0..ae36c0f122c77 100644 --- a/SimG4CMS/ShowerLibraryProducer/src/HFChamberSD.cc +++ b/SimG4CMS/ShowerLibraryProducer/src/HFChamberSD.cc @@ -21,16 +21,20 @@ HFChamberSD::HFChamberSD(const std::string& name, const SensitiveDetectorCatalog& clg, edm::ParameterSet const& p, const SimTrackManager* manager) - : SensitiveCaloDetector(name, es, clg, p), m_trackManager(manager), theHCID(-1), theHC(nullptr), theNSteps(0) {} + : SensitiveCaloDetector(name, es, clg, p), m_trackManager(manager), theHCID(-1), theHC(nullptr), theNSteps(0) { + edm::LogVerbatim("FiberSim") << "HFChamberSD : Instantiated for " << name; +} HFChamberSD::~HFChamberSD() { delete theHC; } void HFChamberSD::Initialize(G4HCofThisEvent* HCE) { - LogDebug("FiberSim") << "HFChamberSD : Initialize called for " << GetName(); + edm::LogVerbatim("FiberSim") << "HFChamberSD : Initialize called for " << GetName() << " in collection " << HCE; theHC = new HFShowerG4HitsCollection(GetName(), collectionName[0]); if (theHCID < 0) theHCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]); HCE->AddHitsCollection(theHCID, theHC); + edm::LogVerbatim("FiberSim") << "HFChamberSD : Add hit collectrion for " << collectionName[0] << ":" << theHCID << ":" + << theHC; } G4bool HFChamberSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) { @@ -60,16 +64,17 @@ G4bool HFChamberSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) { aHit->setGlobalPos(globalPos); aHit->setPrimMomDir(momDir); - LogDebug("FiberSim") << "HFChamberSD: Hit created in (" << touch->GetVolume(0)->GetLogicalVolume()->GetName() << ") " - << " ID " << detID << " Track " << trackID << " Edep: " << edep / MeV << " MeV; Time: " << time - << " ns; Position (local) " << localPos << " (global ) " << globalPos << " direction " << momDir; + edm::LogVerbatim("FiberSim") << "HFChamberSD: Hit created in (" << touch->GetVolume(0)->GetLogicalVolume()->GetName() + << ") ID " << detID << " Track " << trackID << " Edep: " << edep / CLHEP::MeV + << " MeV; Time: " << time << " ns; Position (local) " << localPos << " (global ) " + << globalPos << " direction " << momDir; theHC->insert(aHit); return true; } void HFChamberSD::EndOfEvent(G4HCofThisEvent* HCE) { - LogDebug("FiberSim") << "HFChamberSD: Sees" << theHC->entries() << " hits"; + edm::LogVerbatim("FiberSim") << "HFChamberSD: Finds " << theHC->entries() << " hits"; clear(); } diff --git a/SimG4CMS/ShowerLibraryProducer/src/HFWedgeSD.cc b/SimG4CMS/ShowerLibraryProducer/src/HFWedgeSD.cc index c54126e8e7c0d..3de1b14f8b0c8 100644 --- a/SimG4CMS/ShowerLibraryProducer/src/HFWedgeSD.cc +++ b/SimG4CMS/ShowerLibraryProducer/src/HFWedgeSD.cc @@ -21,20 +21,20 @@ HFWedgeSD::HFWedgeSD(const std::string& iname, const SensitiveDetectorCatalog& clg, edm::ParameterSet const& p, const SimTrackManager* manager) - : SensitiveCaloDetector(iname, es, clg, p), - m_trackManager(manager), - hcID(-1), - theHC(nullptr), - currentHit(nullptr) {} + : SensitiveCaloDetector(iname, es, clg, p), m_trackManager(manager), hcID(-1), theHC(nullptr), currentHit(nullptr) { + edm::LogVerbatim("FiberSim") << "HFWedgeSD : Instantiated for " << iname; +} HFWedgeSD::~HFWedgeSD() { delete theHC; } void HFWedgeSD::Initialize(G4HCofThisEvent* HCE) { - LogDebug("FiberSim") << "HFWedgeSD : Initialize called for " << GetName(); + edm::LogVerbatim("FiberSim") << "HFWedgeSD : Initialize called for " << GetName() << " in collection " << HCE; theHC = new HFShowerG4HitsCollection(GetName(), collectionName[0]); if (hcID < 0) hcID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]); HCE->AddHitsCollection(hcID, theHC); + edm::LogVerbatim("FiberSim") << "HFWedgeSD : Add hit collectrion for " << collectionName[0] << ":" << hcID << ":" + << theHC; clearHits(); } @@ -59,7 +59,7 @@ G4bool HFWedgeSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) { } void HFWedgeSD::EndOfEvent(G4HCofThisEvent* HCE) { - LogDebug("FiberSim") << "HFWedgeSD: Sees" << theHC->entries() << " hits"; + edm::LogVerbatim("FiberSim") << "HFWedgeSD: Sees" << theHC->entries() << " hits"; clear(); } @@ -86,9 +86,9 @@ G4bool HFWedgeSD::hitExists() { } HFShowerG4Hit* HFWedgeSD::createNewHit() { - LogDebug("FiberSim") << "HFWedgeSD::CreateNewHit for ID " << currentID << " Track " << trackID - << " Edep: " << edep / MeV << " MeV; Time: " << time << " ns; Position (local) " << localPos - << " (global ) " << globalPos << " direction " << momDir; + edm::LogVerbatim("FiberSim") << "HFWedgeSD::CreateNewHit for ID " << currentID << " Track " << trackID + << " Edep: " << edep / CLHEP::MeV << " MeV; Time: " << time << " ns; Position (local) " + << localPos << " (global ) " << globalPos << " direction " << momDir; HFShowerG4Hit* aHit = new HFShowerG4Hit; aHit->setHitId(currentID); aHit->setTrackId(trackID); @@ -107,7 +107,8 @@ HFShowerG4Hit* HFWedgeSD::createNewHit() { void HFWedgeSD::updateHit(HFShowerG4Hit* aHit) { if (edep != 0) { aHit->updateEnergy(edep); - LogDebug("FiberSim") << "HFWedgeSD: Add energy deposit in " << currentID << " edep " << edep / MeV << " MeV"; + edm::LogVerbatim("FiberSim") << "HFWedgeSD: Add energy deposit in " << currentID << " edep " << edep / CLHEP::MeV + << " MeV"; } previousID = currentID; } diff --git a/SimG4CMS/ShowerLibraryProducer/src/HcalForwardAnalysis.cc b/SimG4CMS/ShowerLibraryProducer/src/HcalForwardAnalysis.cc index 6a4eecc142442..cf67c1749ae0c 100644 --- a/SimG4CMS/ShowerLibraryProducer/src/HcalForwardAnalysis.cc +++ b/SimG4CMS/ShowerLibraryProducer/src/HcalForwardAnalysis.cc @@ -52,7 +52,7 @@ HcalForwardAnalysis::~HcalForwardAnalysis() {} void HcalForwardAnalysis::produce(edm::Event& iEvent, const edm::EventSetup&) { //std::auto_ptr product(new HFShowerPhotonCollection); - //edm::LogInfo("HcalForwardLib") << "HcalForwardAnalysis: =====> Filling event"; + //edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis: =====> Filling event"; //fillEvent(*product); //iEvent.put(product); //std::auto_ptr product(new PHcalForwardLibInfo); @@ -86,13 +86,13 @@ void HcalForwardAnalysis::init() { void HcalForwardAnalysis::update(const BeginOfRun* run) { int irun = (*run)()->GetRunID(); - edm::LogInfo("HcalForwardLib") << " =====> Begin of Run = " << irun; + edm::LogVerbatim("HcalForwardLib") << " =====> Begin of Run = " << irun; } void HcalForwardAnalysis::update(const BeginOfEvent* evt) { evNum = (*evt)()->GetEventID(); clear(); - edm::LogInfo("HcalForwardLib") << "HcalForwardAnalysis: =====> Begin of event = " << evNum; + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis: =====> Begin of event = " << evNum; } void HcalForwardAnalysis::update(const G4Step* aStep) {} @@ -101,18 +101,18 @@ void HcalForwardAnalysis::update(const EndOfEvent* evt) { count++; //fill the buffer - LogDebug("HcalForwardLib") << "HcalForwardAnalysis::Fill event " << (*evt)()->GetEventID(); + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis::Fill event " << (*evt)()->GetEventID(); setPhotons(evt); int iEvt = (*evt)()->GetEventID(); if (iEvt < 10) - edm::LogInfo("HcalForwardLib") << "HcalForwardAnalysis:: Event " << iEvt; + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis:: Event " << iEvt; else if ((iEvt < 100) && (iEvt % 10 == 0)) - edm::LogInfo("HcalForwardLib") << "HcalForwardAnalysis:: Event " << iEvt; + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis:: Event " << iEvt; else if ((iEvt < 1000) && (iEvt % 100 == 0)) - edm::LogInfo("HcalForwardLib") << "HcalForwardAnalysis:: Event " << iEvt; + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis:: Event " << iEvt; else if ((iEvt < 10000) && (iEvt % 1000 == 0)) - edm::LogInfo("HcalForwardLib") << "HcalForwardAnalysis:: Event " << iEvt; + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis:: Event " << iEvt; } void HcalForwardAnalysis::setPhotons(const EndOfEvent* evt) { @@ -120,22 +120,30 @@ void HcalForwardAnalysis::setPhotons(const EndOfEvent* evt) { FiberG4HitsCollection* theHC; // Look for the Hit Collection of HCal G4HCofThisEvent* allHC = (*evt)()->GetHCofThisEvent(); + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis:: Has " << allHC->GetNumberOfCollections() + << " collections"; + for (int k = 0; k < allHC->GetNumberOfCollections(); ++k) { + G4String name = (allHC->GetHC(k) == nullptr) ? "Unknown" : allHC->GetHC(k)->GetName(); + G4String nameSD = (allHC->GetHC(k) == nullptr) ? "Unknown" : allHC->GetHC(k)->GetSDname(); + edm::LogVerbatim("HcalForwardLib") << "Collecttion[" << k << "] " << allHC->GetHC(k) << " " << name << ":" + << nameSD; + } std::string sdName = theNames[0]; //name for fiber hits idHC = G4SDManager::GetSDMpointer()->GetCollectionID(sdName); theHC = (FiberG4HitsCollection*)allHC->GetHC(idHC); - LogDebug("HcalForwardLib") << "HcalForwardAnalysis::setPhotons() Hit Collection for " << sdName << " of ID " << idHC - << " is obtained at " << theHC; + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis::setPhotons() Hit Collection for " << sdName << " of ID " + << idHC << " is obtained at " << theHC; std::vector ShortFiberPhotons; std::vector LongFiberPhotons; LongFiberPhotons.clear(); ShortFiberPhotons.clear(); - int thehc_entries = theHC->entries(); if (idHC >= 0 && theHC != nullptr) { - std::cout << "FiberhitSize " << thehc_entries << std::endl; + int thehc_entries = theHC->entries(); + edm::LogVerbatim("HcalForwardLib") << "FiberhitSize " << thehc_entries; for (j = 0; j < thehc_entries; j++) { FiberG4Hit* aHit = (*theHC)[j]; std::vector thePhotonsFromHit = aHit->photon(); - std::cout << "Fiberhit " << j << " has " << thePhotonsFromHit.size() << " photons." << std::endl; + edm::LogVerbatim("HcalForwardLib") << "Fiberhit " << j << " has " << thePhotonsFromHit.size() << " photons."; int fTowerId = -1; int fCellId = -1; int fFiberId = -1; @@ -146,18 +154,18 @@ void HcalForwardAnalysis::setPhotons(const EndOfEvent* evt) { if (aHit->depth() == 2) ShortFiberPhotons.push_back(thePhotonsFromHit[iph]); } - LogDebug("HcalForwardLib") << "HcalForwardAnalysis::setPhotons() NbPhotons " << thePhotonsFromHit.size() - << " towerId " << fTowerId << " cellId " << fCellId << " fiberId " << fFiberId - << " depth " << aHit->depth(); + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis::setPhotons() NbPhotons " << thePhotonsFromHit.size() + << " towerId " << fTowerId << " cellId " << fCellId << " fiberId " << fFiberId + << " depth " << aHit->depth(); } } else { - LogDebug("HcalForwardLib") << "HcalForwardAnalysis::setPhotons(): No Photons!"; + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis::setPhotons(): No Photons!"; return; } - LogDebug("HcalForwardLib") << "HcalForwardAnalysis::setPhotons() LongFibPhotons: " << LongFiberPhotons.size() - << " ShortFibPhotons: " << ShortFiberPhotons.size(); - std::cout << "HcalForwardAnalysis::setPhotons() LongFibPhotons: " << LongFiberPhotons.size() - << " ShortFibPhotons: " << ShortFiberPhotons.size() << std::endl; + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis::setPhotons() LongFibPhotons: " << LongFiberPhotons.size() + << " ShortFibPhotons: " << ShortFiberPhotons.size(); + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis::setPhotons() LongFibPhotons: " << LongFiberPhotons.size() + << " ShortFibPhotons: " << ShortFiberPhotons.size(); //Chamber hits to find information about primary particle on surface HFShowerG4HitsCollection* theChamberHC; @@ -172,19 +180,20 @@ void HcalForwardAnalysis::setPhotons(const EndOfEvent* evt) { // (in newer Geant4 versions) and as a result primary particle may have // multiple hits. We want to take last one which is close the HF absorber if (idHC >= 0 && theChamberHC != nullptr) { - LogDebug("HcalForwardLib") << "HcalForwardAnalysis::setPhotons() Chamber Hits size: " << theChamberHC->entries(); + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis::setPhotons() Chamber Hits size: " + << theChamberHC->entries(); int thec_hc_entries = theChamberHC->entries(); for (j = 0; j < thec_hc_entries; ++j) { HFShowerG4Hit* aHit = (*theChamberHC)[j]; - LogDebug("HcalForwardLib") << "HcalForwardAnalysis::setPhotons() Chamber Hit id " << aHit->hitId() << " track id " - << aHit->trackId() << " prim. pos. " << aHit->globalPosition() << " prom mom. dir. " - << aHit->primaryMomDir() << " time " << aHit->time(); + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis::setPhotons() Chamber Hit id " << aHit->hitId() + << " track id " << aHit->trackId() << " prim. pos. " << aHit->globalPosition() + << " prom mom. dir. " << aHit->primaryMomDir() << " time " << aHit->time(); primPosOnSurf.SetXYZ(aHit->globalPosition().x(), aHit->globalPosition().y(), aHit->globalPosition().z()); primMomDirOnSurf.SetXYZ(aHit->primaryMomDir().x(), aHit->primaryMomDir().y(), aHit->primaryMomDir().z()); primTimeOnSurf = aHit->time(); } } else { - LogDebug("HcalForwardLib") << "HcalForwardAnalysis::setPhotons(): No Chamber hits. Something is wrong!"; + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis::setPhotons(): No Chamber hits. Something is wrong!"; return; } primX = primPosOnSurf.x(); @@ -226,7 +235,7 @@ void HcalForwardAnalysis::setPhotons(const EndOfEvent* evt) { } void HcalForwardAnalysis::fillEvent() { /* - edm::LogInfo("HcalForwardLib") << "HcalForwardAnalysis: =====> filledEvent"; + edm::LogVerbatim("HcalForwardLib") << "HcalForwardAnalysis: =====> filledEvent"; */ nphot = int(thePhotons.size()); for (int i = 0; i < nphot; ++i) { diff --git a/SimG4CMS/ShowerLibraryProducer/test/python/runHFShowerAnalyzer_cfg.py b/SimG4CMS/ShowerLibraryProducer/test/python/runHFShowerAnalyzer_cfg.py index ea22918b836e5..510e5ce6b87bc 100644 --- a/SimG4CMS/ShowerLibraryProducer/test/python/runHFShowerAnalyzer_cfg.py +++ b/SimG4CMS/ShowerLibraryProducer/test/python/runHFShowerAnalyzer_cfg.py @@ -16,7 +16,7 @@ process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HFShower') + process.MessageLogger.HFShower = dict() process.Timing = cms.Service("Timing") diff --git a/SimG4CMS/ShowerLibraryProducer/test/python/runHFShowerTMP_cfg.py b/SimG4CMS/ShowerLibraryProducer/test/python/runHFShowerTMP_cfg.py new file mode 100644 index 0000000000000..adb0d2230fd15 --- /dev/null +++ b/SimG4CMS/ShowerLibraryProducer/test/python/runHFShowerTMP_cfg.py @@ -0,0 +1,100 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("HFShowerLib") +process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") +#process.load("Geometry.HcalCommonData.hcalforwardshowerLong_cfi") +process.load("SimG4CMS.ShowerLibraryProducer.hcalforwardshower_cfi") +process.load("Geometry.HcalCommonData.hcalDDDSimConstants_cff") +process.load("IOMC.EventVertexGenerators.VtxSmearedGauss_cfi") +process.load('Configuration.StandardSequences.Generator_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load("Configuration.StandardSequences.MagneticField_cff") +process.load("Configuration.StandardSequences.Services_cff") +process.load("FWCore.MessageLogger.MessageLogger_cfi") + +if 'MessageLogger' in process.__dict__: + process.MessageLogger.FiberSim=dict() + process.MessageLogger.FlatThetaGun=dict() + process.MessageLogger.HFShower=dict() + process.MessageLogger.HcalForwardLib=dict() + process.MessageLogger.SensitiveDetector=dict() + +process.RandomNumberGeneratorService.generator.initialSeed = 12345 + +from IOMC.RandomEngine.RandomServiceHelper import RandomNumberServiceHelper +randSvc = RandomNumberServiceHelper(process.RandomNumberGeneratorService) +randSvc.populate() + +process.Timing = cms.Service("Timing") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +process.source = cms.Source("EmptySource") + +process.generator = cms.EDProducer("FlatRandomEThetaGunProducer", + PGunParameters = cms.PSet( + PartID = cms.vint32(11), + #MinTheta = cms.double(-1.145762838), + #MaxTheta = cms.double(1.145762838), + MinTheta = cms.double(0.019997), + MaxTheta = cms.double(0.019997), + MinPhi = cms.double(3.14500926), + MaxPhi = cms.double(3.14500926), + MinE = cms.double(100.0), + MaxE = cms.double(100.0) + ), + Verbosity = cms.untracked.int32(2), + AddAntiParticle = cms.bool(False), + firstRun = cms.untracked.uint32(1) +) + +process.o1 = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string('simevent_50GeVElec.root') +) + +process.TFileService = cms.Service("TFileService", + fileName = cms.string('hfShowerLibSimu_extended2_50GeVElec_deneme.root') +) + +# for GEN produced since 760pre6, for older GEN - just "": +process.VtxSmeared.src = cms.InputTag("generator", "unsmeared") +process.generatorSmeared = cms.EDProducer("GeneratorSmearedProducer") +process.g4SimHits.Generator.HepMCProductLabel = cms.InputTag('VtxSmeared') + +process.p1 = cms.Path( + process.generator * + process.VtxSmeared * + process.generatorSmeared * + process.g4SimHits +) +process.outpath = cms.EndPath(process.o1) + +process.g4SimHits.HCalSD.UseShowerLibrary = True +process.g4SimHits.HCalSD.UseParametrize = False +process.g4SimHits.HCalSD.UsePMTHits = False +process.g4SimHits.HCalSD.UseFibreBundleHits = False + +process.g4SimHits.HFShower.UseShowerLibrary= True +process.g4SimHits.HFShower.UseR7600UPMT = True +process.g4SimHits.HFShower.UseHFGflash = False +process.g4SimHits.HFShower.ApplyFiducialCut = False +process.g4SimHits.UseMagneticField = False + +process.g4SimHits.NonBeamEvent = True +process.g4SimHits.Generator.ApplyPCuts = False +process.g4SimHits.Generator.ApplyEtaCuts = False +process.g4SimHits.Physics.type = 'SimG4Core/Physics/FTFP_BERT_EMM' +process.g4SimHits.Physics.DefaultCutValue = 0.1 +process.g4SimHits.G4Commands = ['/tracking/verbose 1'] +process.g4SimHits.Watchers = cms.VPSet(cms.PSet( + HFShowerLibraryProducer = cms.PSet( + Names = cms.vstring('FibreHits', + 'ChamberHits', + 'WedgeHits') + ), + type = cms.string('HcalForwardAnalysis') +)) + + diff --git a/SimG4CMS/ShowerLibraryProducer/test/python/runHFShowerTMP_cfg2.py b/SimG4CMS/ShowerLibraryProducer/test/python/runHFShowerTMP_cfg2.py deleted file mode 100644 index f4e044eee8a7b..0000000000000 --- a/SimG4CMS/ShowerLibraryProducer/test/python/runHFShowerTMP_cfg2.py +++ /dev/null @@ -1,121 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("HFShowerLib") -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") - -process.load("IOMC.EventVertexGenerators.VtxSmearedGauss_cfi") - -#process.load("Geometry.HcalCommonData.hcalforwardshowerLong_cfi") -process.load("SimG4CMS.ShowerLibraryProducer.hcalforwardshower_cfi") -process.load("SimG4Core.Application.g4SimHits_cfi") - -process.MessageLogger = cms.Service("MessageLogger", - cerr = cms.untracked.PSet( - enable = cms.untracked.bool(False) - ), - cout = cms.untracked.PSet( - DEBUG = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - FiberSim = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - FlatThetaGun = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - G4cerr = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - G4cout = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - HFShower = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - HcalForwardLib = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - INFO = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - enable = cms.untracked.bool(True), - threshold = cms.untracked.string('DEBUG') - ), - debugModules = cms.untracked.vstring('*') -) - -process.load("Configuration.StandardSequences.Services_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") - -process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService", - moduleSeeds = cms.PSet( - g4SimHits = cms.untracked.uint32(12341), - VtxSmeared = cms.untracked.uint32(39712), - generator = cms.untracked.uint32(23451) - ), - sourceSeed = cms.untracked.uint32(24124), -) - -process.Timing = cms.Service("Timing") - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(1) -) - -process.source = cms.Source("EmptySource") - -process.generator = cms.EDProducer("FlatRandomEThetaGunProducer", - PGunParameters = cms.PSet( - PartID = cms.vint32(11), - #MinTheta = cms.double(-1.145762838), - #MaxTheta = cms.double(1.145762838), - MinTheta = cms.double(0.019997), - MaxTheta = cms.double(0.019997), - MinPhi = cms.double(3.14500926), - MaxPhi = cms.double(3.14500926), - MinE = cms.double(100.0), - MaxE = cms.double(100.0) - ), - Verbosity = cms.untracked.int32(2), - AddAntiParticle = cms.bool(False), - firstRun = cms.untracked.uint32(1) -) - -process.o1 = cms.OutputModule("PoolOutputModule", - fileName = cms.untracked.string('/tmp/myucel/simevent_50GeVElec.root') -) - -process.TFileService = cms.Service("TFileService", - fileName = cms.string('/tmp/myucel/hfShowerLibSimu_extended2_50GeVElec_deneme.root') -) - -process.p1 = cms.Path(cms.SequencePlaceholder("randomEngineStateProducer")+process.generator*process.VtxSmeared*process.g4SimHits) -process.outpath = cms.EndPath(process.o1) - -process.g4SimHits.HCalSD.UseShowerLibrary = True -process.g4SimHits.HCalSD.UseParametrize = False -process.g4SimHits.HCalSD.UsePMTHits = False -process.g4SimHits.HCalSD.UseFibreBundleHits = False - -process.g4SimHits.HFShower.UseShowerLibrary= True -process.g4SimHits.HFShower.UseR7600UPMT = True -process.g4SimHits.HFShower.UseHFGflash = False -process.g4SimHits.HFShower.ApplyFiducialCut = False - - -process.g4SimHits.NonBeamEvent = True -process.g4SimHits.Generator.ApplyPCuts = False -process.g4SimHits.Generator.ApplyEtaCuts = False -process.g4SimHits.Physics.type = 'SimG4Core/Physics/LHEP_EMV' -process.g4SimHits.Physics.DefaultCutValue = 0.1 -process.g4SimHits.G4Commands = ['/tracking/verbose 1'] -process.g4SimHits.Watchers = cms.VPSet(cms.PSet( - HFShowerLibraryProducer = cms.PSet( - Names = cms.vstring('FibreHits', - 'ChamberHits', - 'WedgeHits') - ), - type = cms.string('HcalForwardAnalysis') -)) - - diff --git a/SimG4CMS/ShowerLibraryProducer/test/python/runHFShower_cfg.py b/SimG4CMS/ShowerLibraryProducer/test/python/runHFShower_cfg.py new file mode 100644 index 0000000000000..fc6b4fb92ca89 --- /dev/null +++ b/SimG4CMS/ShowerLibraryProducer/test/python/runHFShower_cfg.py @@ -0,0 +1,94 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("HFShowerLib") + +process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") +process.load("IOMC.EventVertexGenerators.VtxSmearedGauss_cfi") +process.load("Geometry.CMSCommonData.cmsExtendedGeometryHFLibraryXML_cfi") +process.load("Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff") +process.load("Geometry.EcalCommonData.ecalSimulationParameters_cff") +process.load("Geometry.HcalCommonData.hcalDDDSimConstants_cff") +process.load("Geometry.MuonNumbering.muonGeometryConstants_cff") +process.load("Geometry.MuonNumbering.muonOffsetESProducer_cff") + +process.load("Configuration.StandardSequences.MagneticField_cff") +process.load("Configuration.EventContent.EventContent_cff") +process.load('Configuration.StandardSequences.Generator_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') + +process.load("Configuration.StandardSequences.Services_cff") +process.load("Configuration.StandardSequences.MagneticField_cff") +process.g4SimHits.UseMagneticField = False + +process.load("Configuration.StandardSequences.Services_cff") +process.RandomNumberGeneratorService.generator.initialSeed = 12345 + +from IOMC.RandomEngine.RandomServiceHelper import RandomNumberServiceHelper +randSvc = RandomNumberServiceHelper(process.RandomNumberGeneratorService) +randSvc.populate() + +process.load('FWCore.MessageService.MessageLogger_cfi') +if hasattr(process,'MessageLogger'): + process.MessageLogger.FiberSim=dict() + process.MessageLogger.CaloSim=dict() + process.MessageLogger.HcalSim=dict() + process.MessageLogger.HFShower=dict() + process.MessageLogger.HcalForwardLib=dict() + process.MessageLogger.SensitiveDetector=dict() + +process.Timing = cms.Service("Timing") + +process.source = cms.Source("EmptySource") + +process.generator = cms.EDProducer("FlatRandomEGunProducer", + PGunParameters = cms.PSet( + PartID = cms.vint32(11), + MinEta = cms.double(4), + MaxEta = cms.double(4), + MinPhi = cms.double(0), + MaxPhi = cms.double(0), + MinE = cms.double(10), + MaxE = cms.double(10) + ), + Verbosity = cms.untracked.int32(0), + AddAntiParticle = cms.bool(False), + firstRun = cms.untracked.uint32(1) +) + +process.TFileService = cms.Service("TFileService", + fileName = cms.string('hfShowerLibSimu.root') +) + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(10) +) + +# --- make IP(0,0,0) +process.VtxSmeared.SigmaX = 0.0 +process.VtxSmeared.SigmaY = 0.0 +process.VtxSmeared.SigmaZ = 0.0 + +# for GEN produced since 760pre6, for older GEN - just "": +process.VtxSmeared.src = cms.InputTag("generator", "unsmeared") +process.generatorSmeared = cms.EDProducer("GeneratorSmearedProducer") +process.g4SimHits.Generator.HepMCProductLabel = cms.InputTag('VtxSmeared') + +process.p1 = cms.Path( + process.generator * + process.VtxSmeared * + process.generatorSmeared * + process.g4SimHits +) + + +#process.p1 = cms.Path(cms.SequencePlaceholder("randomEngineStateProducer")+process.VtxSmeared*process.g4SimHits) +#process.p1 = cms.Path(process.generator*process.g4SimHits) +#process.outpath = cms.EndPath(process.o1) +process.g4SimHits.NonBeamEvent = True +process.g4SimHits.Generator.ApplyPCuts = False +process.g4SimHits.Generator.ApplyEtaCuts = False +#process.g4SimHits.Physics.type = 'SimG4Core/Physics/FTFP_BERT_EMM' +process.g4SimHits.Physics.DefaultCutValue = 0.1 +process.g4SimHits.HFShower.ApplyFiducialCut = cms.bool(False) + + diff --git a/SimG4Core/Application/interface/EventAction.h b/SimG4Core/Application/interface/EventAction.h index fefd3f659450b..9fb323fcbb09d 100644 --- a/SimG4Core/Application/interface/EventAction.h +++ b/SimG4Core/Application/interface/EventAction.h @@ -36,6 +36,9 @@ class EventAction : public G4UserEventAction { m_trackManager->addTrack(iTrack, inHistory, withAncestor); } + bool trackExists(unsigned int id) const { return m_trackManager->trackExists(id); } + TrackWithHistory* getTrackByID(unsigned int id) const { return m_trackManager->getTrackByID(id); } + void addTkCaloStateInfo(uint32_t t, const std::pair& p); inline void prepareForNewPrimary() { m_trackManager->cleanTracksWithHistory(); } diff --git a/SimG4Core/Application/interface/RunManager.h b/SimG4Core/Application/interface/RunManager.h deleted file mode 100644 index 48a3ddeb238e9..0000000000000 --- a/SimG4Core/Application/interface/RunManager.h +++ /dev/null @@ -1,150 +0,0 @@ -#ifndef SimG4Core_RunManager_H -#define SimG4Core_RunManager_H - -#include "FWCore/Framework/interface/ESWatcher.h" -#include "FWCore/Utilities/interface/EDGetToken.h" - -#include "SimDataFormats/Forward/interface/LHCTransportLinkContainer.h" - -#include "SimG4Core/SensitiveDetector/interface/AttachSD.h" -#include "SimG4Core/SensitiveDetector/interface/SensitiveDetector.h" -#include "SimG4Core/SensitiveDetector/interface/SensitiveTkDetector.h" -#include "SimG4Core/SensitiveDetector/interface/SensitiveCaloDetector.h" -#include "SimG4Core/Notification/interface/SimActivityRegistry.h" - -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" -#include "Geometry/Records/interface/IdealGeometryRecord.h" - -#include - -namespace edm { - class ParameterSet; - class Event; - class EventSetup; - class ConsumesCollector; - class HepMCProduct; -} // namespace edm - -class PrimaryTransformer; -class Generator; -class PhysicsList; - -class SimWatcher; -class SimProducer; -class G4SimEvent; -class SimTrackManager; - -class RunAction; -class EventAction; -class TrackingAction; -class SteppingAction; -class CMSSteppingVerbose; - -class DDDWorld; -class CustomUIsession; - -class G4RunManagerKernel; -class G4Run; -class G4Event; -class G4Field; -class RunAction; - -class SimRunInterface; - -class RunManager { -public: - RunManager(edm::ParameterSet const& p, edm::ConsumesCollector&& i); - ~RunManager(); - void initG4(const edm::EventSetup& es); - void initializeUserActions(); - void initializeRun(); - - void stopG4(); - void terminateRun(); - void abortRun(bool softAbort = false); - - const G4Run* currentRun() const { return m_currentRun; } - void produce(edm::Event& inpevt, const edm::EventSetup& es); - void abortEvent(); - const Generator* generator() const { return m_generator; } - const G4Event* currentEvent() const { return m_currentEvent; } - G4SimEvent* simEvent() { return m_simEvent; } - std::vector& sensTkDetectors() { return m_sensTkDets; } - std::vector& sensCaloDetectors() { return m_sensCaloDets; } - std::vector > producers() const { return m_producers; } - - SimTrackManager* GetSimTrackManager(); - void Connect(RunAction*); - void Connect(EventAction*); - void Connect(TrackingAction*); - void Connect(SteppingAction*); - -protected: - G4Event* generateEvent(edm::Event& inpevt); - void resetGenParticleId(edm::Event& inpevt); - void DumpMagneticField(const G4Field*) const; - -private: - G4RunManagerKernel* m_kernel; - - Generator* m_generator; - - edm::EDGetTokenT m_HepMC; - edm::EDGetTokenT m_LHCtr; - - bool m_nonBeam; - CustomUIsession* m_UIsession; - std::unique_ptr m_physicsList; - PrimaryTransformer* m_primaryTransformer; - - bool m_managerInitialized; - bool m_runInitialized; - bool m_runTerminated; - bool m_runAborted; - bool firstRun; - bool m_pUseMagneticField; - bool m_hasWatchers; - - G4Run* m_currentRun; - G4Event* m_currentEvent; - G4SimEvent* m_simEvent; - RunAction* m_userRunAction; - SimRunInterface* m_runInterface; - - std::string m_PhysicsTablesDir; - bool m_StorePhysicsTables; - bool m_RestorePhysicsTables; - bool m_UseParametrisedEMPhysics; - int m_EvtMgrVerbosity; - bool m_check; - edm::ParameterSet m_pField; - edm::ParameterSet m_pGenerator; - edm::ParameterSet m_pPhysics; - edm::ParameterSet m_pRunAction; - edm::ParameterSet m_pEventAction; - edm::ParameterSet m_pStackingAction; - edm::ParameterSet m_pTrackingAction; - edm::ParameterSet m_pSteppingAction; - edm::ParameterSet m_g4overlap; - std::vector m_G4Commands; - edm::ParameterSet m_p; - - std::vector m_sensTkDets; - std::vector m_sensCaloDets; - - std::unique_ptr m_sVerbose; - SimActivityRegistry m_registry; - std::vector > m_watchers; - std::vector > m_producers; - - std::unique_ptr m_trackManager; - - edm::ESWatcher idealGeomRcdWatcher_; - edm::ESWatcher idealMagRcdWatcher_; - - std::string m_FieldFile; - std::string m_WriteFile; - std::string m_RegionFile; -}; - -#endif diff --git a/SimG4Core/Application/interface/SimRunInterface.h b/SimG4Core/Application/interface/SimRunInterface.h index 45d1ff6b69ab0..060bdff2ab5e3 100644 --- a/SimG4Core/Application/interface/SimRunInterface.h +++ b/SimG4Core/Application/interface/SimRunInterface.h @@ -5,7 +5,6 @@ // between Geant4 user actions and CMS SIM // infrastructure both for sequentional and MT runs -class RunManager; class RunManagerMT; class RunManagerMTWorker; class SimTrackManager; @@ -17,8 +16,6 @@ class G4SimEvent; class SimRunInterface { public: - SimRunInterface(RunManager* run, bool master); - SimRunInterface(RunManagerMT* run, bool master); SimRunInterface(RunManagerMTWorker* run, bool master); @@ -46,7 +43,6 @@ class SimRunInterface { G4SimEvent* simEvent(); private: - RunManager* m_runManager; RunManagerMT* m_runManagerMT; RunManagerMTWorker* m_runManagerMTWorker; diff --git a/SimG4Core/Application/interface/TrackingAction.h b/SimG4Core/Application/interface/TrackingAction.h index 059b3c07a8b16..e65176435570d 100644 --- a/SimG4Core/Application/interface/TrackingAction.h +++ b/SimG4Core/Application/interface/TrackingAction.h @@ -35,6 +35,9 @@ class TrackingAction : public G4UserTrackingAction { CMSSteppingVerbose* steppingVerbose_; const G4Track* g4Track_; bool checkTrack_; + bool doFineCalo_; + bool saveCaloBoundaryInformation_; + double eMinFine_; }; #endif diff --git a/SimG4Core/Application/plugins/BuildFile.xml b/SimG4Core/Application/plugins/BuildFile.xml index de5e2daf694f2..22a53115d9517 100644 --- a/SimG4Core/Application/plugins/BuildFile.xml +++ b/SimG4Core/Application/plugins/BuildFile.xml @@ -1,7 +1,5 @@ - - diff --git a/SimG4Core/Application/plugins/OscarProducer.cc b/SimG4Core/Application/plugins/OscarProducer.cc deleted file mode 100644 index d64a5ba041a6a..0000000000000 --- a/SimG4Core/Application/plugins/OscarProducer.cc +++ /dev/null @@ -1,226 +0,0 @@ -#include "FWCore/PluginManager/interface/PluginManager.h" - -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "OscarProducer.h" -#include "SimG4Core/Notification/interface/G4SimEvent.h" - -#include "SimDataFormats/Track/interface/SimTrackContainer.h" -#include "SimDataFormats/Vertex/interface/SimVertexContainer.h" -#include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" -#include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" - -#include "SimG4Core/Watcher/interface/SimProducer.h" - -#include "FWCore/Utilities/interface/Exception.h" -#include "SimG4Core/Notification/interface/SimG4Exception.h" - -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/Utilities/interface/RandomNumberGenerator.h" -#include "Randomize.hh" - -#include "FWCore/Concurrency/interface/SharedResourceNames.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include -#include - -namespace edm { - class StreamID; -} - -namespace { - // - // this machinery allows to set CLHEP static engine - // to the one defined by RandomNumberGenerator service - // at the beginning of an event, and reset it back to - // "default-default" at the end of the event; - // Dave D. has decided to implement it this way because - // we don't know if there're other modules using CLHEP - // static engine, thus we want to ensure that the one - // we use for OscarProducer is unique to OscarProducer - // - // !!! This not only sets the random engine used by GEANT. - // There are a few SimWatchers/SimProducers that generate - // random number and also use the global CLHEP random engine - // set by this code. If we ever change this design be careful - // not to forget about them!!! - - class StaticRandomEngineSetUnset { - public: - StaticRandomEngineSetUnset(edm::StreamID const&); - explicit StaticRandomEngineSetUnset(CLHEP::HepRandomEngine* engine); - ~StaticRandomEngineSetUnset(); - - private: - CLHEP::HepRandomEngine* m_currentEngine; - CLHEP::HepRandomEngine* m_previousEngine; - }; -} // namespace - -OscarProducer::OscarProducer(edm::ParameterSet const& p) { - // Random number generation not allowed here - StaticRandomEngineSetUnset random(nullptr); - - usesResource(edm::SharedResourceNames::kGEANT); - usesResource(edm::SharedResourceNames::kCLHEPRandomEngine); - - consumes(p.getParameter("HepMCProductLabel")); - m_runManager = std::make_unique(p, consumesCollector()); - - produces().setBranchAlias("SimTracks"); - produces().setBranchAlias("SimVertices"); - produces("TrackerHitsPixelBarrelLowTof"); - produces("TrackerHitsPixelBarrelHighTof"); - produces("TrackerHitsTIBLowTof"); - produces("TrackerHitsTIBHighTof"); - produces("TrackerHitsTIDLowTof"); - produces("TrackerHitsTIDHighTof"); - produces("TrackerHitsPixelEndcapLowTof"); - produces("TrackerHitsPixelEndcapHighTof"); - produces("TrackerHitsTOBLowTof"); - produces("TrackerHitsTOBHighTof"); - produces("TrackerHitsTECLowTof"); - produces("TrackerHitsTECHighTof"); - - produces("TotemHitsT1"); - produces("TotemHitsT2Gem"); - produces("TotemHitsRP"); - produces("CTPPSPixelHits"); - produces("CTPPSTimingHits"); - produces("FP420SI"); - produces("BSCHits"); - produces("PLTHits"); - produces("BCM1FHits"); - produces("BHMHits"); - produces("FastTimerHitsBarrel"); - produces("FastTimerHitsEndcap"); - - produces("EcalHitsEB"); - produces("EcalHitsEE"); - produces("EcalHitsES"); - produces("HcalHits"); - produces("CaloHitsTk"); - produces("HGCHitsEE"); - produces("HGCHitsHEfront"); - produces("HGCHitsHEback"); - - produces("MuonDTHits"); - produces("MuonCSCHits"); - produces("MuonRPCHits"); - produces("MuonGEMHits"); - produces("MuonME0Hits"); - - produces("CastorPL"); - produces("CastorFI"); - produces("CastorBU"); - produces("CastorTU"); - produces("EcalTBH4BeamHits"); - produces("HcalTB06BeamHits"); - produces("ZDCHITS"); - produces("ChamberHits"); - produces("FibreHits"); - produces("WedgeHits"); - produces("HFNoseHits"); - produces("TotemHitsT2Scint"); - - //register any products - m_producers = m_runManager->producers(); - - for (Producers::iterator itProd = m_producers.begin(); itProd != m_producers.end(); ++itProd) { - (*itProd)->registerProducts(producesCollector()); - } - - //UIsession manager for message handling - m_UIsession = std::make_unique(); -} - -OscarProducer::~OscarProducer() {} - -void OscarProducer::beginRun(const edm::Run&, const edm::EventSetup& es) { - // Random number generation not allowed here - StaticRandomEngineSetUnset random(nullptr); - m_runManager->initG4(es); -} - -void OscarProducer::endRun(const edm::Run&, const edm::EventSetup&) { m_runManager->stopG4(); } - -void OscarProducer::produce(edm::Event& e, const edm::EventSetup& es) { - StaticRandomEngineSetUnset random(e.streamID()); - - auto& sTk = m_runManager->sensTkDetectors(); - auto& sCalo = m_runManager->sensCaloDetectors(); - - try { - m_runManager->produce(e, es); - } catch (const SimG4Exception& simg4ex) { - edm::LogInfo("SimG4CoreApplication") << "SimG4Exception caght! " << simg4ex.what(); - m_runManager->stopG4(); - - throw edm::Exception(edm::errors::EventCorruption) - << "SimG4CoreApplication exception in generation of event " << e.id() << " in stream " << e.streamID() << " \n" - << simg4ex.what(); - } - - std::unique_ptr p1(new edm::SimTrackContainer); - std::unique_ptr p2(new edm::SimVertexContainer); - G4SimEvent* evt = m_runManager->simEvent(); - evt->load(*p1); - evt->load(*p2); - - e.put(std::move(p1)); - e.put(std::move(p2)); - - for (auto& tracker : sTk) { - const std::vector& v = tracker->getNames(); - for (auto& name : v) { - std::unique_ptr product(new edm::PSimHitContainer); - tracker->fillHits(*product, name); - e.put(std::move(product), name); - } - } - for (auto& calo : sCalo) { - const std::vector& v = calo->getNames(); - - for (auto& name : v) { - std::unique_ptr product(new edm::PCaloHitContainer); - calo->fillHits(*product, name); - e.put(std::move(product), name); - } - } - - for (auto& prod : m_producers) { - prod.get()->produce(e, es); - } -} - -StaticRandomEngineSetUnset::StaticRandomEngineSetUnset(edm::StreamID const& streamID) { - edm::Service rng; - if (!rng.isAvailable()) { - throw cms::Exception("Configuration") - << "The OscarProducer module requires the RandomNumberGeneratorService\n" - "which is not present in the configuration file. You must add the service\n" - "in the configuration file if you want to run OscarProducer"; - } - m_currentEngine = &(rng->getEngine(streamID)); - - // Must use G4Random instead of CLHEP::HepRandom even for the serial - // version if Geant4 has been built with MT enabled. If G4 was built - // with MT disabled G4Random is defined to be CLHEP::HepRandom, - // preserving the old behaviour. - m_previousEngine = G4Random::getTheEngine(); - G4Random::setTheEngine(m_currentEngine); -} - -StaticRandomEngineSetUnset::StaticRandomEngineSetUnset(CLHEP::HepRandomEngine* engine) { - m_currentEngine = engine; - m_previousEngine = G4Random::getTheEngine(); - G4Random::setTheEngine(m_currentEngine); -} - -StaticRandomEngineSetUnset::~StaticRandomEngineSetUnset() { G4Random::setTheEngine(m_previousEngine); } - -DEFINE_FWK_MODULE(OscarProducer); diff --git a/SimG4Core/Application/plugins/OscarProducer.h b/SimG4Core/Application/plugins/OscarProducer.h deleted file mode 100644 index 689708b0a2dcb..0000000000000 --- a/SimG4Core/Application/plugins/OscarProducer.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef SimG4Core_OscarProducer_H -#define SimG4Core_OscarProducer_H - -#include "FWCore/Framework/interface/one/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/Run.h" - -#include "SimG4Core/Application/interface/RunManager.h" -#include "SimG4Core/Geometry/interface/CustomUIsession.h" - -#include - -class OscarProducer : public edm::one::EDProducer { -public: - typedef std::vector > Producers; - - explicit OscarProducer(edm::ParameterSet const& p); - ~OscarProducer() override; - void beginRun(const edm::Run& r, const edm::EventSetup& c) override; - void endRun(const edm::Run& r, const edm::EventSetup& c) override; - void produce(edm::Event& e, const edm::EventSetup& c) override; - -private: - std::unique_ptr m_runManager; - Producers m_producers; - std::unique_ptr m_UIsession; -}; - -#endif diff --git a/SimG4Core/Application/python/customiseSequentialSim.py b/SimG4Core/Application/python/customiseSequentialSim.py deleted file mode 100644 index 48a8fc7afff95..0000000000000 --- a/SimG4Core/Application/python/customiseSequentialSim.py +++ /dev/null @@ -1,14 +0,0 @@ -import FWCore.ParameterSet.Config as cms -import six - -def customiseSequentialSim(process): - # Set numberOfStreams to allow cmsRun/cmsDriver.py -n to control - # also the number of streams - - for label, prod in six.iteritems(process.producers_()): - if prod.type_() == "OscarMTProducer": - # ugly hack - prod.__dict__['_TypedParameterizable__type'] = "OscarProducer" - - return process - diff --git a/SimG4Core/Application/python/g4SimHits_cfi.py b/SimG4Core/Application/python/g4SimHits_cfi.py index fba791736d924..20c3333abbeca 100644 --- a/SimG4Core/Application/python/g4SimHits_cfi.py +++ b/SimG4Core/Application/python/g4SimHits_cfi.py @@ -37,10 +37,32 @@ ) common_UseLuminosity = cms.PSet( - InstLuminosity = cms.double(0.), + InstLuminosity = cms.double(0.), DelivLuminosity = cms.double(5000.) ) +common_MCtruth = cms.PSet( + DoFineCalo = cms.bool(False), + SaveCaloBoundaryInformation = cms.bool(False), + # currently unused; left in place for future studies + EminFineTrack = cms.double(10000.0), + FineCaloNames = cms.vstring('ECAL', 'HCal', 'HGCal', 'HFNoseVol', 'VCAL'), + FineCaloLevels = cms.vint32(4, 4, 8, 3, 3), + UseFineCalo = cms.vint32(2, 3), +) + +## enable fine calorimeter functionality: must occur *before* common PSet is used below +from Configuration.ProcessModifiers.fineCalo_cff import fineCalo +fineCalo.toModify(common_MCtruth, + DoFineCalo = True +) + +## enable CaloBoundary information for all Phase2 workflows +from Configuration.Eras.Modifier_phase2_hgcal_cff import phase2_hgcal +phase2_hgcal.toModify(common_MCtruth, + SaveCaloBoundaryInformation =True +) + g4SimHits = cms.EDProducer("OscarMTProducer", g4GeometryDD4hepSource = cms.bool(False), NonBeamEvent = cms.bool(False), @@ -264,8 +286,9 @@ RusRoWorldProton = cms.double(1.0) ), TrackingAction = cms.PSet( + common_MCtruth, DetailedTiming = cms.untracked.bool(False), - CheckTrack = cms.untracked.bool(False) + CheckTrack = cms.untracked.bool(False), ), SteppingAction = cms.PSet( common_maximum_time, @@ -288,6 +311,7 @@ ), CaloSD = cms.PSet( common_heavy_suppression, + common_MCtruth, SuppressHeavy = cms.bool(False), EminTrack = cms.double(1.0), TmaxHit = cms.double(1000.0), @@ -298,7 +322,6 @@ UseResponseTables = cms.vint32(0,0,0,0,0), BeamPosition = cms.double(0.0), CorrectTOFBeam = cms.bool(False), - UseFineCaloID = cms.bool(False), DetailedTiming = cms.untracked.bool(False), UseMap = cms.untracked.bool(False), Verbosity = cms.untracked.int32(0), @@ -363,12 +386,10 @@ HFDarkeningParameterBlock = HFDarkeningParameterBlock ), CaloTrkProcessing = cms.PSet( + common_MCtruth, TestBeam = cms.bool(False), EminTrack = cms.double(0.01), PutHistory = cms.bool(False), - DoFineCalo = cms.bool(False), - EminFineTrack = cms.double(10000.0), - EminFinePhoton = cms.double(5000.0) ), HFShower = cms.PSet( common_UsePMT, diff --git a/SimG4Core/Application/src/OscarMTMasterThread.cc b/SimG4Core/Application/src/OscarMTMasterThread.cc index 0c39e210094d0..575665607901d 100644 --- a/SimG4Core/Application/src/OscarMTMasterThread.cc +++ b/SimG4Core/Application/src/OscarMTMasterThread.cc @@ -38,8 +38,6 @@ OscarMTMasterThread::OscarMTMasterThread(const edm::ParameterSet& iConfig) m_masterThread = std::thread([&]() { ///////////////// // Initialization - - std::shared_ptr runManagerMaster; std::unique_ptr uiSession; // Lock the mutex (i.e. wait until the creating thread has called cv.wait() @@ -51,10 +49,7 @@ OscarMTMasterThread::OscarMTMasterThread(const edm::ParameterSet& iConfig) uiSession = std::make_unique(); // Create the master run manager, and share it to the CMSSW thread - runManagerMaster = std::make_shared(iConfig); - m_runManagerMaster = runManagerMaster; - - edm::LogVerbatim("SimG4CoreApplication") << "OscarMTMasterThread: initialization of RunManagerMT finished"; + m_runManagerMaster = std::make_shared(iConfig); ///////////// // State loop @@ -76,12 +71,12 @@ OscarMTMasterThread::OscarMTMasterThread(const edm::ParameterSet& iConfig) if (m_masterThreadState == ThreadState::BeginRun) { // Initialize Geant4 edm::LogVerbatim("OscarMTMasterThread") << "Master thread: Initializing Geant4"; - runManagerMaster->initG4(m_pDD, m_pDD4hep, m_pTable); + m_runManagerMaster->initG4(m_pDD, m_pDD4hep, m_pTable); isG4Alive = true; } else if (m_masterThreadState == ThreadState::EndRun) { // Stop Geant4 edm::LogVerbatim("OscarMTMasterThread") << "Master thread: Stopping Geant4"; - runManagerMaster->stopG4(); + m_runManagerMaster->stopG4(); isG4Alive = false; } else if (m_masterThreadState == ThreadState::Destruct) { edm::LogVerbatim("OscarMTMasterThread") << "Master thread: Breaking out of state loop"; @@ -98,11 +93,9 @@ OscarMTMasterThread::OscarMTMasterThread(const edm::ParameterSet& iConfig) ////////// // Cleanup edm::LogVerbatim("SimG4CoreApplication") << "OscarMTMasterThread: start RunManagerMT destruction"; - LogDebug("OscarMTMasterThread") << "Master thread: Am I unique owner of runManagerMaster? " - << runManagerMaster.unique(); // must be done in this thread, segfault otherwise - runManagerMaster.reset(); + m_runManagerMaster.reset(); G4PhysicalVolumeStore::Clean(); edm::LogVerbatim("OscarMTMasterThread") << "Master thread: Reseted shared_ptr"; diff --git a/SimG4Core/Application/src/RunManager.cc b/SimG4Core/Application/src/RunManager.cc deleted file mode 100644 index 73147e82d3994..0000000000000 --- a/SimG4Core/Application/src/RunManager.cc +++ /dev/null @@ -1,631 +0,0 @@ -#include "SimG4Core/Application/interface/RunManager.h" -#include "SimG4Core/Application/interface/PrimaryTransformer.h" -#include "SimG4Core/Application/interface/SimRunInterface.h" -#include "SimG4Core/Application/interface/RunAction.h" -#include "SimG4Core/Application/interface/EventAction.h" -#include "SimG4Core/Application/interface/StackingAction.h" -#include "SimG4Core/Application/interface/TrackingAction.h" -#include "SimG4Core/Application/interface/SteppingAction.h" -#include "SimG4Core/Application/interface/ParametrisedEMPhysics.h" -#include "SimG4Core/Application/interface/CMSGDMLWriteStructure.h" -#include "SimG4Core/Application/interface/ExceptionHandler.h" - -#include "SimG4Core/Geometry/interface/DDDWorld.h" -#include "SimG4Core/Geometry/interface/SensitiveDetectorCatalog.h" - -#include "SimG4Core/SensitiveDetector/interface/AttachSD.h" - -#include "SimG4Core/Generators/interface/Generator.h" -#include "SimG4Core/Physics/interface/PhysicsListFactory.h" -#include "SimG4Core/PhysicsLists/interface/CMSMonopolePhysics.h" -#include "SimG4Core/CustomPhysics/interface/CMSExoticaPhysics.h" -#include "SimG4Core/Watcher/interface/SimWatcherFactory.h" -#include "SimG4Core/MagneticField/interface/FieldBuilder.h" -#include "SimG4Core/MagneticField/interface/Field.h" -#include "SimG4Core/MagneticField/interface/CMSFieldManager.h" - -#include "MagneticField/Engine/interface/MagneticField.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" - -#include "SimG4Core/Notification/interface/G4SimEvent.h" -#include "SimG4Core/Notification/interface/SimTrackManager.h" -#include "SimG4Core/Notification/interface/BeginOfJob.h" -#include "SimG4Core/Notification/interface/CurrentG4Track.h" -#include "SimG4Core/Notification/interface/SimG4Exception.h" -#include "SimG4Core/Notification/interface/CMSSteppingVerbose.h" - -#include "SimG4Core/Geometry/interface/CustomUIsession.h" -#include "SimG4Core/Geometry/interface/CMSG4CheckOverlap.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/ESTransientHandle.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Utilities/interface/EDMException.h" -#include "FWCore/ServiceRegistry/interface/Service.h" - -#include "Geometry/Records/interface/IdealGeometryRecord.h" -#include "DetectorDescription/Core/interface/DDCompactView.h" -#include "DetectorDescription/DDCMS/interface/DDCompactView.h" - -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" -#include "SimDataFormats/Forward/interface/LHCTransportLinkContainer.h" - -#include "HepPDT/ParticleDataTable.hh" -#include "SimGeneral/HepPDTRecord/interface/PDTRecord.h" - -#include "G4GeometryManager.hh" -#include "G4StateManager.hh" -#include "G4ApplicationState.hh" -#include "G4RunManagerKernel.hh" -#include "G4UImanager.hh" - -#include "G4EventManager.hh" -#include "G4Run.hh" -#include "G4Event.hh" -#include "G4TransportationManager.hh" -#include "G4ParticleTable.hh" -#include "G4Field.hh" -#include "G4FieldManager.hh" - -#include "G4LogicalVolume.hh" -#include "G4LogicalVolumeStore.hh" -#include "G4PhysicalVolumeStore.hh" -#include "G4Region.hh" -#include "G4RegionStore.hh" - -#include "G4GDMLParser.hh" -#include "G4SystemOfUnits.hh" - -#include -#include - -#include -#include -#include - -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -static void createWatchers(const edm::ParameterSet& iP, - SimActivityRegistry& iReg, - std::vector >& oWatchers, - std::vector >& oProds) { - using namespace std; - using namespace edm; - - vector watchers = iP.getParameter >("Watchers"); - - for (vector::iterator itWatcher = watchers.begin(); itWatcher != watchers.end(); ++itWatcher) { - std::shared_ptr maker( - SimWatcherFactory::get()->create(itWatcher->getParameter("type"))); - if (maker.get() == nullptr) { - throw edm::Exception(edm::errors::Configuration) << "Unable to find the requested Watcher"; - } - - std::shared_ptr watcherTemp; - std::shared_ptr producerTemp; - maker->make(*itWatcher, iReg, watcherTemp, producerTemp); - oWatchers.push_back(watcherTemp); - if (producerTemp) { - oProds.push_back(producerTemp); - } - } -} - -RunManager::RunManager(edm::ParameterSet const& p, edm::ConsumesCollector&& iC) - : m_generator(new Generator(p.getParameter("Generator"))), - m_HepMC(iC.consumes( - p.getParameter("Generator").getParameter("HepMCProductLabel"))), - m_LHCtr(iC.consumes(p.getParameter("theLHCTlinkTag"))), - m_nonBeam(p.getParameter("NonBeamEvent")), - m_primaryTransformer(nullptr), - m_managerInitialized(false), - m_runInitialized(false), - m_runTerminated(false), - m_runAborted(false), - firstRun(true), - m_pUseMagneticField(p.getParameter("UseMagneticField")), - m_currentRun(nullptr), - m_currentEvent(nullptr), - m_simEvent(nullptr), - m_PhysicsTablesDir(p.getUntrackedParameter("PhysicsTablesDirectory", "")), - m_StorePhysicsTables(p.getUntrackedParameter("StorePhysicsTables", false)), - m_RestorePhysicsTables(p.getUntrackedParameter("RestorePhysicsTables", false)), - m_UseParametrisedEMPhysics(p.getUntrackedParameter("UseParametrisedEMPhysics")), - m_EvtMgrVerbosity(p.getUntrackedParameter("G4EventManagerVerbosity", 0)), - m_pField(p.getParameter("MagneticField")), - m_pGenerator(p.getParameter("Generator")), - m_pPhysics(p.getParameter("Physics")), - m_pRunAction(p.getParameter("RunAction")), - m_pEventAction(p.getParameter("EventAction")), - m_pStackingAction(p.getParameter("StackingAction")), - m_pTrackingAction(p.getParameter("TrackingAction")), - m_pSteppingAction(p.getParameter("SteppingAction")), - m_g4overlap(p.getUntrackedParameter("G4CheckOverlap")), - m_G4Commands(p.getParameter >("G4Commands")), - m_p(p) { - m_UIsession = new CustomUIsession(); - m_kernel = new G4RunManagerKernel(); - G4StateManager::GetStateManager()->SetExceptionHandler(new ExceptionHandler()); - - m_physicsList.reset(nullptr); - - m_check = p.getUntrackedParameter("CheckGeometry", false); - m_WriteFile = p.getUntrackedParameter("FileNameGDML", ""); - m_FieldFile = p.getUntrackedParameter("FileNameField", ""); - m_RegionFile = p.getUntrackedParameter("FileNameRegions", ""); - - m_userRunAction = nullptr; - m_runInterface = nullptr; - - //Look for an outside SimActivityRegistry - // this is used by the visualization code - edm::Service otherRegistry; - if (otherRegistry) { - m_registry.connect(*otherRegistry); - } - m_sVerbose.reset(nullptr); - - std::vector watchers = p.getParameter >("Watchers"); - m_hasWatchers = (watchers.empty()) ? false : true; - - if (m_hasWatchers) { - createWatchers(m_p, m_registry, m_watchers, m_producers); - } -} - -RunManager::~RunManager() { - if (!m_runTerminated) { - terminateRun(); - } - G4StateManager::GetStateManager()->SetNewState(G4State_Quit); - G4GeometryManager::GetInstance()->OpenGeometry(); - // if (m_kernel!=0) delete m_kernel; - delete m_runInterface; - delete m_generator; -} - -void RunManager::initG4(const edm::EventSetup& es) { - bool geomChanged = idealGeomRcdWatcher_.check(es); - if (geomChanged && (!firstRun)) { - throw cms::Exception("BadConfig") << "[SimG4Core RunManager]\n" - << "The Geometry configuration is changed during the job execution\n" - << "this is not allowed, the geometry must stay unchanged\n"; - } - bool geoFromDD4hep = m_p.getParameter("g4GeometryDD4hepSource"); - bool cuts = m_pPhysics.getParameter("CutsPerRegion"); - bool protonCut = m_pPhysics.getParameter("CutsOnProton"); - int verb = std::max(m_pPhysics.getUntrackedParameter("Verbosity", 0), - m_p.getUntrackedParameter("SteppingVerbosity", 0)); - edm::LogVerbatim("SimG4CoreApplication") - << "RunManager: start initialising of geometry DD4Hep: " << geoFromDD4hep << "\n" - << " cutsPerRegion: " << cuts << " cutForProton: " << protonCut << "\n" - << " G4 verbosity: " << verb; - - if (m_pUseMagneticField) { - bool magChanged = idealMagRcdWatcher_.check(es); - if (magChanged && (!firstRun)) { - throw edm::Exception(edm::errors::Configuration) - << "[SimG4Core RunManager]\n" - << "The MagneticField configuration is changed during the job execution\n" - << "this is not allowed, the MagneticField must stay unchanged\n"; - } - } - - if (m_managerInitialized) - return; - - // initialise geometry - const DDCompactView* pDD = nullptr; - const cms::DDCompactView* pDD4hep = nullptr; - if (geoFromDD4hep) { - edm::ESTransientHandle ph; - es.get().get(ph); - pDD4hep = ph.product(); - } else { - edm::ESTransientHandle ph; - es.get().get(ph); - pDD = ph.product(); - } - SensitiveDetectorCatalog catalog; - const DDDWorld* world = new DDDWorld(pDD, pDD4hep, catalog, verb, cuts, protonCut); - G4VPhysicalVolume* pworld = world->GetWorldVolume(); - - const G4RegionStore* regStore = G4RegionStore::GetInstance(); - const G4PhysicalVolumeStore* pvs = G4PhysicalVolumeStore::GetInstance(); - const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance(); - unsigned int numPV = pvs->size(); - unsigned int numLV = lvs->size(); - unsigned int nn = regStore->size(); - edm::LogVerbatim("SimG4CoreApplication") - << "###RunManager: " << numPV << " PhysVolumes; " << numLV << " LogVolumes; " << nn << " Regions."; - - m_kernel->DefineWorldVolume(pworld, true); - m_registry.dddWorldSignal_(world); - - if (m_pUseMagneticField) { - // setup the magnetic field - edm::ESHandle pMF; - es.get().get(pMF); - const GlobalPoint g(0., 0., 0.); - - sim::FieldBuilder fieldBuilder(pMF.product(), m_pField); - CMSFieldManager* fieldManager = new CMSFieldManager(); - G4TransportationManager* tM = G4TransportationManager::GetTransportationManager(); - tM->SetFieldManager(fieldManager); - fieldBuilder.build(fieldManager, tM->GetPropagatorInField()); - - if (!m_FieldFile.empty()) { - DumpMagneticField(tM->GetFieldManager()->GetDetectorField()); - } - } - - // we need the track manager now - m_trackManager = std::make_unique(); - - // attach sensitive detector - AttachSD attach; - auto sensDets = attach.create(es, catalog, m_p, m_trackManager.get(), m_registry); - - m_sensTkDets.swap(sensDets.first); - m_sensCaloDets.swap(sensDets.second); - - edm::LogVerbatim("SimG4CoreApplication") - << " RunManager: Sensitive Detector " - << "building finished; found " << m_sensTkDets.size() << " Tk type Producers, and " << m_sensCaloDets.size() - << " Calo type producers "; - - edm::ESHandle fTable; - es.get().get(fTable); - const HepPDT::ParticleDataTable* fPDGTable = &(*fTable); - - m_primaryTransformer = new PrimaryTransformer(); - - std::unique_ptr physicsMaker( - PhysicsListFactory::get()->create(m_pPhysics.getParameter("type"))); - if (physicsMaker.get() == nullptr) { - throw edm::Exception(edm::errors::Configuration) << "Unable to find the Physics list requested"; - } - m_physicsList = physicsMaker->make(m_pPhysics, m_registry); - - PhysicsList* phys = m_physicsList.get(); - if (phys == nullptr) { - throw edm::Exception(edm::errors::Configuration) << "Physics list construction failed!"; - } - - // exotic particle physics - double monopoleMass = m_pPhysics.getUntrackedParameter("MonopoleMass", 0.); - if (monopoleMass > 0.0) { - phys->RegisterPhysics(new CMSMonopolePhysics(fPDGTable, m_pPhysics)); - } - bool exotica = m_pPhysics.getUntrackedParameter("ExoticaTransport", false); - if (exotica) { - CMSExoticaPhysics exo(phys, m_pPhysics); - } - - // adding GFlash, Russian Roulette for eletrons and gamma, - // step limiters on top of any Physics Lists - if (m_UseParametrisedEMPhysics) - phys->RegisterPhysics(new ParametrisedEMPhysics("EMoptions", m_pPhysics)); - - std::string tableDir = m_PhysicsTablesDir; - if (m_RestorePhysicsTables) { - m_physicsList->SetPhysicsTableRetrieved(tableDir); - } - edm::LogInfo("SimG4CoreApplication") << "RunManager: start initialisation of PhysicsList"; - - m_physicsList->SetDefaultCutValue(m_pPhysics.getParameter("DefaultCutValue") * CLHEP::cm); - m_physicsList->SetCutsWithDefault(); - m_kernel->SetPhysics(phys); - m_kernel->InitializePhysics(); - - if (m_kernel->RunInitialization()) { - m_managerInitialized = true; - } else { - throw edm::Exception(edm::errors::LogicError) << "G4RunManagerKernel initialization failed!"; - } - - if (m_StorePhysicsTables) { - std::ostringstream dir; - dir << tableDir << '\0'; - std::string cmd = std::string("/control/shell mkdir -p ") + tableDir; - if (!std::ifstream(dir.str().c_str(), std::ios::in)) - G4UImanager::GetUIpointer()->ApplyCommand(cmd); - m_physicsList->StorePhysicsTable(tableDir); - } - - //tell all interesting parties that we are beginning the job - BeginOfJob aBeginOfJob(&es); - m_registry.beginOfJobSignal_(&aBeginOfJob); - - G4int sv = m_p.getUntrackedParameter("SteppingVerbosity", 0); - G4double elim = m_p.getUntrackedParameter("StepVerboseThreshold", 0.1) * CLHEP::GeV; - std::vector ve = m_p.getUntrackedParameter >("VerboseEvents"); - std::vector vn = m_p.getUntrackedParameter >("VertexNumber"); - std::vector vt = m_p.getUntrackedParameter >("VerboseTracks"); - - if (sv > 0) { - m_sVerbose = std::make_unique(sv, elim, ve, vn, vt); - } - initializeUserActions(); - - if (!m_G4Commands.empty()) { - G4cout << "RunManager: Requested UI commands: " << G4endl; - for (unsigned it = 0; it < m_G4Commands.size(); ++it) { - G4cout << " " << m_G4Commands[it] << G4endl; - G4UImanager::GetUIpointer()->ApplyCommand(m_G4Commands[it]); - } - } - G4StateManager::GetStateManager()->SetNewState(G4State_Init); - - if (!m_WriteFile.empty()) { - G4GDMLParser gdml; - gdml.SetRegionExport(true); - gdml.SetEnergyCutsExport(true); - gdml.Write(m_WriteFile, pworld, true); - } - - // G4Region dump file name - auto regionFile = m_p.getUntrackedParameter("FileNameRegions", ""); - - // Geometry checks - if (m_check || !regionFile.empty()) { - CMSG4CheckOverlap check(m_g4overlap, regionFile, m_UIsession, pworld); - } - - // If the Geant4 particle table is needed, decomment the lines below - // - // G4cout << "Output of G4ParticleTable DumpTable:" << G4endl; - // G4ParticleTable::GetParticleTable()->DumpTable("ALL"); - - initializeRun(); - firstRun = false; -} - -void RunManager::stopG4() { - G4StateManager::GetStateManager()->SetNewState(G4State_Quit); - if (!m_runTerminated) { - terminateRun(); - } -} - -void RunManager::produce(edm::Event& inpevt, const edm::EventSetup&) { - m_currentEvent = generateEvent(inpevt); - m_simEvent = new G4SimEvent; - m_simEvent->hepEvent(m_generator->genEvent()); - m_simEvent->weight(m_generator->eventWeight()); - if (m_generator->genVertex() != nullptr) { - m_simEvent->collisionPoint(math::XYZTLorentzVectorD(m_generator->genVertex()->x() / centimeter, - m_generator->genVertex()->y() / centimeter, - m_generator->genVertex()->z() / centimeter, - m_generator->genVertex()->t() / second)); - } - if (m_currentEvent->GetNumberOfPrimaryVertex() == 0) { - std::stringstream ss; - ss << " RunManager::produce(): event " << inpevt.id().event() << " with no G4PrimaryVertices\n"; - throw SimG4Exception(ss.str()); - - abortRun(false); - } else { - edm::LogInfo("SimG4CoreApplication") << "RunManager::produce: start Event " << inpevt.id().event() << " of weight " - << m_simEvent->weight() << " with " << m_simEvent->nTracks() << " tracks and " - << m_simEvent->nVertices() << " vertices, generated by " - << m_simEvent->nGenParts() << " particles "; - - m_kernel->GetEventManager()->ProcessOneEvent(m_currentEvent); - - edm::LogInfo("SimG4CoreApplication") << " RunManager::produce: ended Event " << inpevt.id().event(); - } -} - -G4Event* RunManager::generateEvent(edm::Event& inpevt) { - if (m_currentEvent != nullptr) { - delete m_currentEvent; - } - m_currentEvent = nullptr; - if (m_simEvent != nullptr) { - delete m_simEvent; - } - m_simEvent = nullptr; - - // 64 bits event ID in CMSSW converted into Geant4 event ID - G4int evtid = (G4int)inpevt.id().event(); - G4Event* evt = new G4Event(evtid); - - edm::Handle HepMCEvt; - - inpevt.getByToken(m_HepMC, HepMCEvt); - - m_generator->setGenEvent(HepMCEvt->GetEvent()); - - // required to reset the GenParticle Id for particles transported - // along the beam pipe - // to their original value for SimTrack creation - resetGenParticleId(inpevt); - - if (!m_nonBeam) { - m_generator->HepMC2G4(HepMCEvt->GetEvent(), evt); - } else { - m_generator->nonCentralEvent2G4(HepMCEvt->GetEvent(), evt); - } - - return evt; -} - -void RunManager::abortEvent() { - if (m_runTerminated) { - return; - } - G4Track* t = m_kernel->GetEventManager()->GetTrackingManager()->GetTrack(); - t->SetTrackStatus(fStopAndKill); - - // CMS-specific act - // - TrackingAction* uta = (TrackingAction*)m_kernel->GetEventManager()->GetUserTrackingAction(); - uta->PostUserTrackingAction(t); - - m_currentEvent->SetEventAborted(); - m_kernel->GetEventManager()->GetStackManager()->clear(); - m_kernel->GetEventManager()->GetTrackingManager()->EventAborted(); - - G4StateManager* stateManager = G4StateManager::GetStateManager(); - stateManager->SetNewState(G4State_GeomClosed); -} - -void RunManager::initializeUserActions() { - m_runInterface = new SimRunInterface(this, false); - - m_userRunAction = new RunAction(m_pRunAction, m_runInterface, true); - Connect(m_userRunAction); - - G4EventManager* eventManager = m_kernel->GetEventManager(); - eventManager->SetVerboseLevel(m_EvtMgrVerbosity); - - if (m_generator != nullptr) { - EventAction* userEventAction = - new EventAction(m_pEventAction, m_runInterface, m_trackManager.get(), m_sVerbose.get()); - Connect(userEventAction); - eventManager->SetUserAction(userEventAction); - - TrackingAction* userTrackingAction = new TrackingAction(userEventAction, m_pTrackingAction, m_sVerbose.get()); - Connect(userTrackingAction); - eventManager->SetUserAction(userTrackingAction); - - SteppingAction* userSteppingAction = - new SteppingAction(userEventAction, m_pSteppingAction, m_sVerbose.get(), m_hasWatchers); - Connect(userSteppingAction); - eventManager->SetUserAction(userSteppingAction); - - eventManager->SetUserAction(new StackingAction(userTrackingAction, m_pStackingAction, m_sVerbose.get())); - - } else { - edm::LogWarning("SimG4CoreApplication") << " RunManager: WARNING : " - << "No generator; initialized " - << "only RunAction!"; - } -} - -void RunManager::initializeRun() { - m_runInitialized = false; - if (m_currentRun == nullptr) { - m_currentRun = new G4Run(); - } - G4StateManager::GetStateManager()->SetNewState(G4State_GeomClosed); - if (m_userRunAction != nullptr) { - m_userRunAction->BeginOfRunAction(m_currentRun); - } - m_runAborted = false; - m_runInitialized = true; -} - -void RunManager::terminateRun() { - if (m_runTerminated) { - return; - } - if (m_userRunAction != nullptr) { - m_userRunAction->EndOfRunAction(m_currentRun); - delete m_userRunAction; - m_userRunAction = nullptr; - } - delete m_currentEvent; - m_currentEvent = nullptr; - delete m_simEvent; - m_simEvent = nullptr; - if (m_kernel != nullptr) { - m_kernel->RunTermination(); - } - m_runInitialized = false; - m_runTerminated = true; -} - -void RunManager::abortRun(bool softAbort) { - if (m_runAborted) { - return; - } - if (!softAbort) { - abortEvent(); - } - if (m_currentRun != nullptr) { - delete m_currentRun; - m_currentRun = nullptr; - } - terminateRun(); - m_runAborted = true; -} - -void RunManager::resetGenParticleId(edm::Event& inpevt) { - edm::Handle theLHCTlink; - inpevt.getByToken(m_LHCtr, theLHCTlink); - if (theLHCTlink.isValid()) { - m_trackManager->setLHCTransportLink(theLHCTlink.product()); - } -} - -SimTrackManager* RunManager::GetSimTrackManager() { return m_trackManager.get(); } - -void RunManager::Connect(RunAction* runAction) { - runAction->m_beginOfRunSignal.connect(m_registry.beginOfRunSignal_); - runAction->m_endOfRunSignal.connect(m_registry.endOfRunSignal_); -} - -void RunManager::Connect(EventAction* eventAction) { - eventAction->m_beginOfEventSignal.connect(m_registry.beginOfEventSignal_); - eventAction->m_endOfEventSignal.connect(m_registry.endOfEventSignal_); -} - -void RunManager::Connect(TrackingAction* trackingAction) { - trackingAction->m_beginOfTrackSignal.connect(m_registry.beginOfTrackSignal_); - trackingAction->m_endOfTrackSignal.connect(m_registry.endOfTrackSignal_); -} - -void RunManager::Connect(SteppingAction* steppingAction) { - steppingAction->m_g4StepSignal.connect(m_registry.g4StepSignal_); -} - -void RunManager::DumpMagneticField(const G4Field* field) const { - std::ofstream fout(m_FieldFile.c_str(), std::ios::out); - if (fout.fail()) { - edm::LogWarning("SimG4CoreApplication") << " RunManager WARNING : " - << "error opening file <" << m_FieldFile << "> for magnetic field"; - } else { - double rmax = 9000 * mm; - double zmax = 16000 * mm; - - double dr = 5 * cm; - double dz = 20 * cm; - - int nr = (int)(rmax / dr); - int nz = 2 * (int)(zmax / dz); - - double r = 0.0; - double z0 = -zmax; - double z; - - double phi = 0.0; - double cosf = cos(phi); - double sinf = sin(phi); - - double point[4] = {0.0, 0.0, 0.0, 0.0}; - double bfield[3] = {0.0, 0.0, 0.0}; - - fout << std::setprecision(6); - for (int i = 0; i <= nr; ++i) { - z = z0; - for (int j = 0; j <= nz; ++j) { - point[0] = r * cosf; - point[1] = r * sinf; - point[2] = z; - field->GetFieldValue(point, bfield); - fout << "R(mm)= " << r / mm << " phi(deg)= " << phi / degree << " Z(mm)= " << z / mm - << " Bz(tesla)= " << bfield[2] / tesla << " Br(tesla)= " << (bfield[0] * cosf + bfield[1] * sinf) / tesla - << " Bphi(tesla)= " << (bfield[0] * sinf - bfield[1] * cosf) / tesla << G4endl; - z += dz; - } - r += dr; - } - - fout.close(); - } -} diff --git a/SimG4Core/Application/src/RunManagerMT.cc b/SimG4Core/Application/src/RunManagerMT.cc index 7e1529a2dc0fc..177bf0fd2d306 100644 --- a/SimG4Core/Application/src/RunManagerMT.cc +++ b/SimG4Core/Application/src/RunManagerMT.cc @@ -29,6 +29,7 @@ #include "HepPDT/ParticleDataTable.hh" +#include "G4Timer.hh" #include "G4GeometryManager.hh" #include "G4StateManager.hh" #include "G4ApplicationState.hh" @@ -111,9 +112,17 @@ void RunManagerMT::initG4(const DDCompactView* pDD, << " cutsPerRegion: " << cuts << " cutForProton: " << protonCut << "\n" << " G4 verbosity: " << verb; + G4Timer timer; + timer.Start(); + m_world = std::make_unique(pDD, pDD4hep, m_catalog, verb, cuts, protonCut); G4VPhysicalVolume* world = m_world.get()->GetWorldVolume(); + timer.Stop(); + G4cout.precision(4); + G4cout << "RunManagerMT: geometry is initialized: " << timer << G4endl; + timer.Start(); + m_kernel->SetVerboseLevel(verb); edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMT: Define cuts: " << cuts << " Geant4 run manager verbosity: " << verb; @@ -125,7 +134,7 @@ void RunManagerMT::initG4(const DDCompactView* pDD, unsigned int numLV = lvs->size(); unsigned int nn = regStore->size(); edm::LogVerbatim("SimG4CoreApplication") - << "###RunManagerMT: " << numPV << " PhysVolumes; " << numLV << " LogVolumes; " << nn << " Regions."; + << "RunManagerMT: " << numPV << " physical volumes; " << numLV << " logical volumes; " << nn << " regions."; if (m_check) { m_kernel->SetVerboseLevel(2); @@ -196,6 +205,11 @@ void RunManagerMT::initG4(const DDCompactView* pDD, throw edm::Exception(edm::errors::LogicError, "G4RunManagerKernel initialization failed!"); } + timer.Stop(); + G4cout.precision(4); + G4cout << "RunManagerMT: physics is initialized: " << timer << G4endl; + timer.Start(); + if (m_StorePhysicsTables) { std::ostringstream dir; dir << m_PhysicsTablesDir << '\0'; @@ -237,7 +251,9 @@ void RunManagerMT::initG4(const DDCompactView* pDD, m_stateManager->SetNewState(G4State_GeomClosed); m_currentRun = new G4Run(); m_userRunAction->BeginOfRunAction(m_currentRun); - edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMT:: initG4 done"; + timer.Stop(); + G4cout.precision(4); + G4cout << "RunManagerMT: initG4 done " << timer << G4endl; } void RunManagerMT::initializeUserActions() { diff --git a/SimG4Core/Application/src/RunManagerMTWorker.cc b/SimG4Core/Application/src/RunManagerMTWorker.cc index bd228e42ab983..6f584dc281c60 100644 --- a/SimG4Core/Application/src/RunManagerMTWorker.cc +++ b/SimG4Core/Application/src/RunManagerMTWorker.cc @@ -18,7 +18,6 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Concurrency/interface/FunctorTask.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/Utilities/interface/thread_safety_macros.h" @@ -49,6 +48,7 @@ #include "SimG4Core/SensitiveDetector/interface/SensitiveTkDetector.h" #include "SimG4Core/SensitiveDetector/interface/SensitiveCaloDetector.h" +#include "G4Timer.hh" #include "G4Event.hh" #include "G4Run.hh" #include "G4SystemOfUnits.hh" @@ -67,6 +67,7 @@ #include #include #include +#include "tbb/task_arena.h" static std::once_flag applyOnce; thread_local bool RunManagerMTWorker::dumpMF = false; @@ -195,8 +196,10 @@ void RunManagerMTWorker::resetTLS() { if (active_tlsdata != 0 and not tls_shutdown_timeout) { ++n_tls_shutdown_task; //need to run tasks on each thread which has set the tls - auto task = edm::make_functor_task(tbb::task::allocate_root(), []() { resetTLS(); }); - tbb::task::enqueue(*task); + { + tbb::task_arena arena(tbb::task_arena::attach{}); + arena.enqueue([]() { RunManagerMTWorker::resetTLS(); }); + } timespec s; s.tv_sec = 0; s.tv_nsec = 10000; @@ -246,6 +249,9 @@ void RunManagerMTWorker::initializeTLS() { } void RunManagerMTWorker::initializeG4(RunManagerMT* runManagerMaster, const edm::EventSetup& es) { + G4Timer timer; + timer.Start(); + // I guess everything initialized here should be in thread_local storage initializeTLS(); if (m_tls->threadInitialized) @@ -307,7 +313,7 @@ void RunManagerMTWorker::initializeG4(RunManagerMT* runManagerMaster, const edm: if (!fieldFile.empty()) { std::call_once(applyOnce, []() { dumpMF = true; }); if (dumpMF) { - edm::LogVerbatim("SimG4CoreApplication") << " RunManagerMTWorker: Dump magnetic field to file " << fieldFile; + edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker: Dump magnetic field to file " << fieldFile; DumpMagneticField(tM->GetFieldManager()->GetDetectorField(), fieldFile); } } @@ -322,13 +328,14 @@ void RunManagerMTWorker::initializeG4(RunManagerMT* runManagerMaster, const edm: m_tls->sensCaloDets.swap(sensDets.second); edm::LogVerbatim("SimG4CoreApplication") - << " RunManagerMTWorker: Sensitive Detector building finished; found " << m_tls->sensTkDets.size() - << " Tk type Producers, and " << m_tls->sensCaloDets.size() << " Calo type producers "; + << "RunManagerMTWorker: Sensitive Detectors are built in thread " << thisID << " found " + << m_tls->sensTkDets.size() << " Tk type SD, and " << m_tls->sensCaloDets.size() << " Calo type SD"; // Set the physics list for the worker, share from master PhysicsList* physicsList = runManagerMaster->physicsListForWorker(); - edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker: start initialisation of PhysicsList for the thread"; + edm::LogVerbatim("SimG4CoreApplication") + << "RunManagerMTWorker: start initialisation of PhysicsList for the thread " << thisID; // Geant4 UI commands in PreInit state if (!runManagerMaster->G4Commands().empty()) { @@ -346,7 +353,8 @@ void RunManagerMTWorker::initializeG4(RunManagerMT* runManagerMaster, const edm: const bool kernelInit = m_tls->kernel->RunInitialization(); if (!kernelInit) { - throw edm::Exception(edm::errors::Configuration) << "RunManagerMTWorker: Geant4 kernel initialization failed"; + throw edm::Exception(edm::errors::Configuration) + << "RunManagerMTWorker: Geant4 kernel initialization failed in thread " << thisID; } //tell all interesting parties that we are beginning the job BeginOfJob aBeginOfJob(&es); @@ -363,10 +371,12 @@ void RunManagerMTWorker::initializeG4(RunManagerMT* runManagerMaster, const edm: } initializeUserActions(); - edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::initializeThread done for the thread " << thisID; - G4StateManager::GetStateManager()->SetNewState(G4State_Idle); m_tls->threadInitialized = true; + + timer.Stop(); + edm::LogVerbatim("SimG4CoreApplication") + << "RunManagerMTWorker::initializeThread done for the thread " << thisID << " " << timer; } void RunManagerMTWorker::initializeUserActions() { diff --git a/SimG4Core/Application/src/SimRunInterface.cc b/SimG4Core/Application/src/SimRunInterface.cc index eaff79dbe6551..6699b03fa19d5 100644 --- a/SimG4Core/Application/src/SimRunInterface.cc +++ b/SimG4Core/Application/src/SimRunInterface.cc @@ -1,5 +1,4 @@ #include "SimG4Core/Application/interface/SimRunInterface.h" -#include "SimG4Core/Application/interface/RunManager.h" #include "SimG4Core/Application/interface/RunManagerMT.h" #include "SimG4Core/Application/interface/RunManagerMTWorker.h" #include "SimG4Core/Application/interface/RunAction.h" @@ -10,30 +9,11 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -SimRunInterface::SimRunInterface(RunManager* runm, bool master) - : m_runManager(runm), - m_runManagerMT(nullptr), - m_runManagerMTWorker(nullptr), - m_SimTrackManager(nullptr), - m_isMaster(master) { - if (m_runManager) { - m_SimTrackManager = m_runManager->GetSimTrackManager(); - } -} - SimRunInterface::SimRunInterface(RunManagerMT* runm, bool master) - : m_runManager(nullptr), - m_runManagerMT(runm), - m_runManagerMTWorker(nullptr), - m_SimTrackManager(nullptr), - m_isMaster(master) {} + : m_runManagerMT(runm), m_runManagerMTWorker(nullptr), m_SimTrackManager(nullptr), m_isMaster(master) {} SimRunInterface::SimRunInterface(RunManagerMTWorker* runm, bool master) - : m_runManager(nullptr), - m_runManagerMT(nullptr), - m_runManagerMTWorker(runm), - m_SimTrackManager(nullptr), - m_isMaster(master) { + : m_runManagerMT(nullptr), m_runManagerMTWorker(runm), m_SimTrackManager(nullptr), m_isMaster(master) { if (m_runManagerMTWorker) { m_SimTrackManager = m_runManagerMTWorker->GetSimTrackManager(); } @@ -44,9 +24,7 @@ SimRunInterface::~SimRunInterface() {} void SimRunInterface::setRunManagerMTWorker(RunManagerMTWorker* run) { m_runManagerMTWorker = run; } void SimRunInterface::Connect(RunAction* runAction) { - if (m_runManager) { - m_runManager->Connect(runAction); - } else if (m_runManagerMT) { + if (m_runManagerMT) { m_runManagerMT->Connect(runAction); } else if (m_runManagerMTWorker) { m_runManagerMTWorker->Connect(runAction); @@ -54,25 +32,19 @@ void SimRunInterface::Connect(RunAction* runAction) { } void SimRunInterface::Connect(EventAction* eventAction) { - if (m_runManager) { - m_runManager->Connect(eventAction); - } else if (m_runManagerMTWorker) { + if (m_runManagerMTWorker) { m_runManagerMTWorker->Connect(eventAction); } } void SimRunInterface::Connect(TrackingAction* trackAction) { - if (m_runManager) { - m_runManager->Connect(trackAction); - } else if (m_runManagerMTWorker) { + if (m_runManagerMTWorker) { m_runManagerMTWorker->Connect(trackAction); } } void SimRunInterface::Connect(SteppingAction* stepAction) { - if (m_runManager) { - m_runManager->Connect(stepAction); - } else if (m_runManagerMTWorker) { + if (m_runManagerMTWorker) { m_runManagerMTWorker->Connect(stepAction); } } @@ -80,26 +52,20 @@ void SimRunInterface::Connect(SteppingAction* stepAction) { SimTrackManager* SimRunInterface::GetSimTrackManager() { return m_SimTrackManager; } void SimRunInterface::abortEvent() { - if (m_runManager) { - m_runManager->abortEvent(); - } else if (m_runManagerMTWorker) { + if (m_runManagerMTWorker) { m_runManagerMTWorker->abortEvent(); } } void SimRunInterface::abortRun(bool softAbort) { - if (m_runManager) { - m_runManager->abortRun(softAbort); - } else if (m_runManagerMTWorker) { + if (m_runManagerMTWorker) { m_runManagerMTWorker->abortRun(softAbort); } } G4SimEvent* SimRunInterface::simEvent() { G4SimEvent* ptr = nullptr; - if (m_runManager) { - ptr = m_runManager->simEvent(); - } else if (m_runManagerMTWorker) { + if (m_runManagerMTWorker) { ptr = m_runManagerMTWorker->simEvent(); } return ptr; diff --git a/SimG4Core/Application/src/TrackingAction.cc b/SimG4Core/Application/src/TrackingAction.cc index ea899fb9ecee4..174a256d2b15a 100644 --- a/SimG4Core/Application/src/TrackingAction.cc +++ b/SimG4Core/Application/src/TrackingAction.cc @@ -12,6 +12,7 @@ #include "G4UImanager.hh" #include "G4TrackingManager.hh" +#include "G4SystemOfUnits.hh" //#define EDM_ML_DEBUG @@ -20,7 +21,10 @@ TrackingAction::TrackingAction(EventAction* e, const edm::ParameterSet& p, CMSSt currentTrack_(nullptr), steppingVerbose_(sv), g4Track_(nullptr), - checkTrack_(p.getUntrackedParameter("CheckTrack", false)) {} + checkTrack_(p.getUntrackedParameter("CheckTrack", false)), + doFineCalo_(p.getParameter("DoFineCalo")), + saveCaloBoundaryInformation_(p.getParameter("SaveCaloBoundaryInformation")), + eMinFine_(p.getParameter("EminFineTrack") * CLHEP::MeV) {} TrackingAction::~TrackingAction() {} @@ -38,21 +42,76 @@ void TrackingAction::PreUserTrackingAction(const G4Track* aTrack) { if (nullptr != steppingVerbose_) { steppingVerbose_->TrackStarted(aTrack, false); } + + if (doFineCalo_) { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("DoFineCalo") << "PreUserTrackingAction: Start processing track " << aTrack->GetTrackID() + << " pdgid=" << aTrack->GetDefinition()->GetPDGEncoding() + << " ekin[GeV]=" << aTrack->GetKineticEnergy() / CLHEP::GeV << " vertex[cm]=(" + << aTrack->GetVertexPosition().x() / CLHEP::cm << "," + << aTrack->GetVertexPosition().y() / CLHEP::cm << "," + << aTrack->GetVertexPosition().z() / CLHEP::cm << ")" + << " parentid=" << aTrack->GetParentID(); +#endif + // It is impossible to tell whether daughter tracks if this track may need to be saved at + // this point; Therefore, *every* track is put in history, so that it can potentially be saved + // later. + trkInfo->putInHistory(); + // Always save primaries + // Decays from primaries are marked as primaries (see NewTrackAction), but are not saved by + // default. The primary is the earliest ancestor, and it must be saved. + if (trkInfo->isPrimary()) + currentTrack_->save(); + } } void TrackingAction::PostUserTrackingAction(const G4Track* aTrack) { if (eventAction_->trackContainer() != nullptr) { - if (extractor_(aTrack).storeTrack()) { - currentTrack_->save(); + uint32_t id = aTrack->GetTrackID(); + math::XYZVectorD pos(aTrack->GetStep()->GetPostStepPoint()->GetPosition().x(), + aTrack->GetStep()->GetPostStepPoint()->GetPosition().y(), + aTrack->GetStep()->GetPostStepPoint()->GetPosition().z()); + math::XYZTLorentzVectorD mom; + std::pair p(pos, mom); - math::XYZVectorD pos((aTrack->GetStep()->GetPostStepPoint()->GetPosition()).x(), - (aTrack->GetStep()->GetPostStepPoint()->GetPosition()).y(), - (aTrack->GetStep()->GetPostStepPoint()->GetPosition()).z()); - math::XYZTLorentzVectorD mom; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("DoFineCalo") << "PostUserTrackingAction:" + << " aTrack->GetTrackID()=" << aTrack->GetTrackID() + << " currentTrack_->saved()=" << currentTrack_->saved() << " PostStepPosition=(" + << pos.x() << "," << pos.y() << "," << pos.z() << ")"; +#endif - uint32_t id = aTrack->GetTrackID(); + if (doFineCalo_) { + TrackInformation* trkInfo = (TrackInformation*)aTrack->GetUserInformation(); + // Add the post-step position for _every_ track + // in history to the TrackManager. Tracks in history _may_ be upgraded to stored + // tracks, at which point the post-step position is needed again. + eventAction_->addTkCaloStateInfo(id, p); + if (trkInfo->crossedBoundary()) { + currentTrack_->save(); + currentTrack_->setCrossedBoundaryPosMom(id, trkInfo->getPositionAtBoundary(), trkInfo->getMomentumAtBoundary()); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("DoFineCalo") << "PostUserTrackingAction:" + << " Track " << aTrack->GetTrackID() << " crossed boundary; pos=(" + << trkInfo->getPositionAtBoundary().x() << "," + << trkInfo->getPositionAtBoundary().y() << "," + << trkInfo->getPositionAtBoundary().z() << ")" + << " mom[GeV]=(" << trkInfo->getMomentumAtBoundary().x() << "," + << trkInfo->getMomentumAtBoundary().y() << "," + << trkInfo->getMomentumAtBoundary().z() << "," + << trkInfo->getMomentumAtBoundary().e() << ")"; +#endif + } + } + + TrackInformation* trkInfo = (TrackInformation*)aTrack->GetUserInformation(); + if (extractor_(aTrack).storeTrack() || currentTrack_->saved() || + (saveCaloBoundaryInformation_ && trkInfo->crossedBoundary())) { + if (trkInfo->crossedBoundary()) { + currentTrack_->setCrossedBoundaryPosMom(id, trkInfo->getPositionAtBoundary(), trkInfo->getMomentumAtBoundary()); + } + currentTrack_->save(); - std::pair p(pos, mom); eventAction_->addTkCaloStateInfo(id, p); #ifdef EDM_ML_DEBUG edm::LogVerbatim("SimTrackManager") @@ -61,8 +120,7 @@ void TrackingAction::PostUserTrackingAction(const G4Track* aTrack) { } bool withAncestor = - ((extractor_(aTrack).getIDonCaloSurface() == aTrack->GetTrackID()) || - (extractor_(aTrack).getIDfineCalo() == aTrack->GetTrackID()) || (extractor_(aTrack).isAncestor())); + ((extractor_(aTrack).getIDonCaloSurface() == aTrack->GetTrackID()) || (extractor_(aTrack).isAncestor())); if (extractor_(aTrack).isInHistory()) { // check with end-of-track information @@ -77,10 +135,6 @@ void TrackingAction::PostUserTrackingAction(const G4Track* aTrack) { << "TrackingAction addTrack " << currentTrack_->trackID() << " E(GeV)= " << aTrack->GetKineticEnergy() << " " << aTrack->GetDefinition()->GetParticleName() << " added= " << withAncestor << " at " << aTrack->GetPosition(); - - math::XYZVectorD pos((aTrack->GetStep()->GetPostStepPoint()->GetPosition()).x(), - (aTrack->GetStep()->GetPostStepPoint()->GetPosition()).y(), - (aTrack->GetStep()->GetPostStepPoint()->GetPosition()).z()); edm::LogVerbatim("SimTrackManager") << "TrackingAction addTrack " << currentTrack_->trackID() << " added with " << true << " and " << withAncestor << " at " << pos; #endif diff --git a/SimG4Core/Application/test/GeometryProducer_cfg.py b/SimG4Core/Application/test/GeometryProducer_cfg.py index 0b833b4cafc3a..2ca33bf4f0f8b 100644 --- a/SimG4Core/Application/test/GeometryProducer_cfg.py +++ b/SimG4Core/Application/test/GeometryProducer_cfg.py @@ -12,7 +12,8 @@ ) process.source = cms.Source("EmptySource") -process.MessageLogger.destinations = cms.untracked.vstring("geomprod.txt") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.geomprod = dict(extension="txt") common_heavy_suppression = cms.PSet( NeutronThreshold = cms.double(30.0), diff --git a/SimG4Core/Configuration/test/dd4hep_ZMM_Run3_Step1_cfg.py b/SimG4Core/Configuration/test/dd4hep_ZMM_Run3_Step1_cfg.py index 21f11c17da75f..051c7cc6ddc19 100644 --- a/SimG4Core/Configuration/test/dd4hep_ZMM_Run3_Step1_cfg.py +++ b/SimG4Core/Configuration/test/dd4hep_ZMM_Run3_Step1_cfg.py @@ -21,14 +21,14 @@ if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('EcalGeom') -# process.MessageLogger.categories.append('MuonSim') -# process.MessageLogger.categories.append('CaloSim') -# process.MessageLogger.categories.append('EcalSim') -# process.MessageLogger.categories.append('HcalSim') -# process.MessageLogger.categories.append('SimG4CoreApplication') -# process.MessageLogger.categories.append("TrackerGeometryBuilder"); -# process.MessageLogger.categories.append("TrackerSimInfoNumbering"); + process.MessageLogger.EcalGeom=dict() +# process.MessageLogger.MuonSim=dict() +# process.MessageLogger.CaloSim=dict() +# process.MessageLogger.EcalSim=dict() +# process.MessageLogger.HcalSim=dict() +# process.MessageLogger.SimG4CoreApplication=dict() +# process.MessageLogger.TrackerGeometryBuilder=dict() +# process.MessageLogger.TrackerSimInfoNumbering=dict() process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10), @@ -96,61 +96,58 @@ process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') process.generator = cms.EDFilter("Pythia8GeneratorFilter", - PythiaParameters = cms.PSet( - parameterSets = cms.vstring( - 'pythia8CommonSettings', - 'pythia8CP5Settings', - 'processParameters' - ), - processParameters = cms.vstring( - 'WeakSingleBoson:ffbar2gmZ = on', - '23:onMode = off', - '23:onIfAny = 13', - 'PhaseSpace:mHatMin = 75.' - ), - pythia8CP5Settings = cms.vstring( - 'Tune:pp 14', - 'Tune:ee 7', - 'MultipartonInteractions:ecmPow=0.03344', - 'MultipartonInteractions:bProfile=2', - 'MultipartonInteractions:pT0Ref=1.41', - 'MultipartonInteractions:coreRadius=0.7634', - 'MultipartonInteractions:coreFraction=0.63', - 'ColourReconnection:range=5.176', - 'SigmaTotal:zeroAXB=off', - 'SpaceShower:alphaSorder=2', - 'SpaceShower:alphaSvalue=0.118', - 'SigmaProcess:alphaSvalue=0.118', - 'SigmaProcess:alphaSorder=2', - 'MultipartonInteractions:alphaSvalue=0.118', - 'MultipartonInteractions:alphaSorder=2', - 'TimeShower:alphaSorder=2', - 'TimeShower:alphaSvalue=0.118', - 'SigmaTotal:mode = 0', - 'SigmaTotal:sigmaEl = 21.89', - 'SigmaTotal:sigmaTot = 100.309', - 'PDF:pSet=LHAPDF6:NNPDF31_nnlo_as_0118' - ), - pythia8CommonSettings = cms.vstring( - 'Tune:preferLHAPDF = 2', - 'Main:timesAllowErrors = 10000', - 'Check:epTolErr = 0.01', - 'Beams:setProductionScalesFromLHEF = off', - 'SLHA:keepSM = on', - 'SLHA:minMassSM = 1000.', - 'ParticleDecays:limitTau0 = on', - 'ParticleDecays:tau0Max = 10', - 'ParticleDecays:allowPhotonRadiation = on' - ) - ), - comEnergy = cms.double(14000.0), - filterEfficiency = cms.untracked.double(1.0), - maxEventsToPrint = cms.untracked.int32(0), - pythiaHepMCVerbosity = cms.untracked.bool(False), - pythiaPylistVerbosity = cms.untracked.int32(0) + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(14000.0), + PythiaParameters = cms.PSet( + pythia8CommonSettings = cms.vstring( + 'Tune:preferLHAPDF = 2', + 'Main:timesAllowErrors = 10000', + 'Check:epTolErr = 0.01', + 'Beams:setProductionScalesFromLHEF = off', + 'SLHA:minMassSM = 1000.', + 'ParticleDecays:limitTau0 = on', + 'ParticleDecays:tau0Max = 10', + 'ParticleDecays:allowPhotonRadiation = on', + ), + pythia8CP5Settings = cms.vstring( + 'Tune:pp 14', + 'Tune:ee 7', + 'MultipartonInteractions:ecmPow=0.03344', + 'MultipartonInteractions:bProfile=2', + 'MultipartonInteractions:pT0Ref=1.41', + 'MultipartonInteractions:coreRadius=0.7634', + 'MultipartonInteractions:coreFraction=0.63', + 'ColourReconnection:range=5.176', + 'SigmaTotal:zeroAXB=off', + 'SpaceShower:alphaSorder=2', + 'SpaceShower:alphaSvalue=0.118', + 'SigmaProcess:alphaSvalue=0.118', + 'SigmaProcess:alphaSorder=2', + 'MultipartonInteractions:alphaSvalue=0.118', + 'MultipartonInteractions:alphaSorder=2', + 'TimeShower:alphaSorder=2', + 'TimeShower:alphaSvalue=0.118', + 'SigmaTotal:mode = 0', + 'SigmaTotal:sigmaEl = 21.89', + 'SigmaTotal:sigmaTot = 100.309', + 'PDF:pSet=LHAPDF6:NNPDF31_nnlo_as_0118', + ), + processParameters = cms.vstring( + 'WeakSingleBoson:ffbar2gmZ = on', + '23:onMode = off', + '23:onIfAny = 13', + 'PhaseSpace:mHatMin = 75.', + ), + parameterSets = cms.vstring('pythia8CommonSettings', + 'pythia8CP5Settings', + 'processParameters', + ) + ) ) - process.mumugenfilter = cms.EDFilter("MCParticlePairFilter", MaxEta = cms.untracked.vdouble(4.0, 4.0), MinEta = cms.untracked.vdouble(-4.0, -4.0), diff --git a/SimG4Core/Configuration/test/dd4hep_ZMM_Run3_Step2_cfg.py b/SimG4Core/Configuration/test/dd4hep_ZMM_Run3_Step2_cfg.py index 10057df88c977..88e4600cac6b5 100644 --- a/SimG4Core/Configuration/test/dd4hep_ZMM_Run3_Step2_cfg.py +++ b/SimG4Core/Configuration/test/dd4hep_ZMM_Run3_Step2_cfg.py @@ -19,10 +19,10 @@ process.load('Configuration.StandardSequences.EndOfProcess_cff') process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') -#if hasattr(process,'MessageLogger'): -# process.MessageLogger.categories.append('EcalGeom') -# process.MessageLogger.categories.append('GEMGeometry') -# process.MessageLogger.categories.append('CaloGeometryBuilder') +# +# +# +# process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10), diff --git a/SimG4Core/Configuration/test/dd4hep_ZMM_Run3_Step3_cfg.py b/SimG4Core/Configuration/test/dd4hep_ZMM_Run3_Step3_cfg.py index 93de45c447dfe..8ea1b38579ab7 100644 --- a/SimG4Core/Configuration/test/dd4hep_ZMM_Run3_Step3_cfg.py +++ b/SimG4Core/Configuration/test/dd4hep_ZMM_Run3_Step3_cfg.py @@ -24,7 +24,7 @@ process.load('DQMOffline.Configuration.DQMOfflineMC_cff') process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') -process.MessageLogger.categories.append("TrackerGeometryBuilder"); +process.MessageLogger.TrackerGeometryBuilder=dict(); process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10), diff --git a/SimG4Core/Configuration/test/dd4hep_ttbar_2026D49_Step1_cfg.py b/SimG4Core/Configuration/test/dd4hep_ttbar_2026D49_Step1_cfg.py index cccb06a673820..0df81bd5a8d43 100644 --- a/SimG4Core/Configuration/test/dd4hep_ttbar_2026D49_Step1_cfg.py +++ b/SimG4Core/Configuration/test/dd4hep_ttbar_2026D49_Step1_cfg.py @@ -19,6 +19,10 @@ process.load('Configuration.StandardSequences.EndOfProcess_cff') process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +if hasattr(process,'MessageLogger'): + process.MessageLogger.cerr.Geometry=dict() + process.MessageLogger.cerr.SimG4CoreApplication=dict() + process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10), output = cms.optional.untracked.allowed(cms.int32,cms.PSet) @@ -123,7 +127,6 @@ 'Main:timesAllowErrors = 10000', 'Check:epTolErr = 0.01', 'Beams:setProductionScalesFromLHEF = off', - 'SLHA:keepSM = on', 'SLHA:minMassSM = 1000.', 'ParticleDecays:limitTau0 = on', 'ParticleDecays:tau0Max = 10', diff --git a/SimG4Core/Configuration/test/dd4hep_ttbar_Run3_Step1_cfg.py b/SimG4Core/Configuration/test/dd4hep_ttbar_Run3_Step1_cfg.py index 34308d76ac03b..6310d564e2840 100644 --- a/SimG4Core/Configuration/test/dd4hep_ttbar_Run3_Step1_cfg.py +++ b/SimG4Core/Configuration/test/dd4hep_ttbar_Run3_Step1_cfg.py @@ -123,7 +123,6 @@ 'Main:timesAllowErrors = 10000', 'Check:epTolErr = 0.01', 'Beams:setProductionScalesFromLHEF = off', - 'SLHA:keepSM = on', 'SLHA:minMassSM = 1000.', 'ParticleDecays:limitTau0 = on', 'ParticleDecays:tau0Max = 10', diff --git a/SimG4Core/Configuration/test/ddd_ZMM_Run3_Step1_cfg.py b/SimG4Core/Configuration/test/ddd_ZMM_Run3_Step1_cfg.py index 3cd66fc8dd629..de508fba1eacd 100644 --- a/SimG4Core/Configuration/test/ddd_ZMM_Run3_Step1_cfg.py +++ b/SimG4Core/Configuration/test/ddd_ZMM_Run3_Step1_cfg.py @@ -20,10 +20,10 @@ process.load('Configuration.Geometry.GeometryExtended2021_cff') # there w if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('EcalGeom') -# process.MessageLogger.categories.append('Geometry') -# process.MessageLogger.categories.append("TrackerGeometryBuilder"); -# process.MessageLogger.categories.append("TrackerSimInfoNumbering"); + process.MessageLogger.EcalGeom=dict() +# process.MessageLogger.Geometry=dict() +# process.MessageLogger.TrackerGeometryBuilder=dict() +# process.MessageLogger.TrackerSimInfoNumbering=dict() @@ -93,61 +93,58 @@ process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') process.generator = cms.EDFilter("Pythia8GeneratorFilter", - PythiaParameters = cms.PSet( - parameterSets = cms.vstring( - 'pythia8CommonSettings', - 'pythia8CP5Settings', - 'processParameters' - ), - processParameters = cms.vstring( - 'WeakSingleBoson:ffbar2gmZ = on', - '23:onMode = off', - '23:onIfAny = 13', - 'PhaseSpace:mHatMin = 75.' - ), - pythia8CP5Settings = cms.vstring( - 'Tune:pp 14', - 'Tune:ee 7', - 'MultipartonInteractions:ecmPow=0.03344', - 'MultipartonInteractions:bProfile=2', - 'MultipartonInteractions:pT0Ref=1.41', - 'MultipartonInteractions:coreRadius=0.7634', - 'MultipartonInteractions:coreFraction=0.63', - 'ColourReconnection:range=5.176', - 'SigmaTotal:zeroAXB=off', - 'SpaceShower:alphaSorder=2', - 'SpaceShower:alphaSvalue=0.118', - 'SigmaProcess:alphaSvalue=0.118', - 'SigmaProcess:alphaSorder=2', - 'MultipartonInteractions:alphaSvalue=0.118', - 'MultipartonInteractions:alphaSorder=2', - 'TimeShower:alphaSorder=2', - 'TimeShower:alphaSvalue=0.118', - 'SigmaTotal:mode = 0', - 'SigmaTotal:sigmaEl = 21.89', - 'SigmaTotal:sigmaTot = 100.309', - 'PDF:pSet=LHAPDF6:NNPDF31_nnlo_as_0118' - ), - pythia8CommonSettings = cms.vstring( - 'Tune:preferLHAPDF = 2', - 'Main:timesAllowErrors = 10000', - 'Check:epTolErr = 0.01', - 'Beams:setProductionScalesFromLHEF = off', - 'SLHA:keepSM = on', - 'SLHA:minMassSM = 1000.', - 'ParticleDecays:limitTau0 = on', - 'ParticleDecays:tau0Max = 10', - 'ParticleDecays:allowPhotonRadiation = on' - ) - ), - comEnergy = cms.double(14000.0), - filterEfficiency = cms.untracked.double(1.0), - maxEventsToPrint = cms.untracked.int32(0), - pythiaHepMCVerbosity = cms.untracked.bool(False), - pythiaPylistVerbosity = cms.untracked.int32(0) + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(14000.0), + PythiaParameters = cms.PSet( + pythia8CommonSettings = cms.vstring( + 'Tune:preferLHAPDF = 2', + 'Main:timesAllowErrors = 10000', + 'Check:epTolErr = 0.01', + 'Beams:setProductionScalesFromLHEF = off', + 'SLHA:minMassSM = 1000.', + 'ParticleDecays:limitTau0 = on', + 'ParticleDecays:tau0Max = 10', + 'ParticleDecays:allowPhotonRadiation = on', + ), + pythia8CP5Settings = cms.vstring( + 'Tune:pp 14', + 'Tune:ee 7', + 'MultipartonInteractions:ecmPow=0.03344', + 'MultipartonInteractions:bProfile=2', + 'MultipartonInteractions:pT0Ref=1.41', + 'MultipartonInteractions:coreRadius=0.7634', + 'MultipartonInteractions:coreFraction=0.63', + 'ColourReconnection:range=5.176', + 'SigmaTotal:zeroAXB=off', + 'SpaceShower:alphaSorder=2', + 'SpaceShower:alphaSvalue=0.118', + 'SigmaProcess:alphaSvalue=0.118', + 'SigmaProcess:alphaSorder=2', + 'MultipartonInteractions:alphaSvalue=0.118', + 'MultipartonInteractions:alphaSorder=2', + 'TimeShower:alphaSorder=2', + 'TimeShower:alphaSvalue=0.118', + 'SigmaTotal:mode = 0', + 'SigmaTotal:sigmaEl = 21.89', + 'SigmaTotal:sigmaTot = 100.309', + 'PDF:pSet=LHAPDF6:NNPDF31_nnlo_as_0118', + ), + processParameters = cms.vstring( + 'WeakSingleBoson:ffbar2gmZ = on', + '23:onMode = off', + '23:onIfAny = 13', + 'PhaseSpace:mHatMin = 75.', + ), + parameterSets = cms.vstring('pythia8CommonSettings', + 'pythia8CP5Settings', + 'processParameters', + ) + ) ) - process.mumugenfilter = cms.EDFilter("MCParticlePairFilter", MaxEta = cms.untracked.vdouble(4.0, 4.0), MinEta = cms.untracked.vdouble(-4.0, -4.0), diff --git a/SimG4Core/Configuration/test/ddd_ZMM_Run3_Step2_cfg.py b/SimG4Core/Configuration/test/ddd_ZMM_Run3_Step2_cfg.py index 3cfb0e3a015a8..b3e033c42b3c7 100644 --- a/SimG4Core/Configuration/test/ddd_ZMM_Run3_Step2_cfg.py +++ b/SimG4Core/Configuration/test/ddd_ZMM_Run3_Step2_cfg.py @@ -19,9 +19,9 @@ process.load('Configuration.StandardSequences.EndOfProcess_cff') process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') -#if hasattr(process,'MessageLogger'): -# process.MessageLogger.categories.append('GEMGeometry') -# process.MessageLogger.categories.append('CaloGeometryBuilder') +# +# +# process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10), diff --git a/SimG4Core/Configuration/test/ddd_ZMM_Run3_Step3_cfg.py b/SimG4Core/Configuration/test/ddd_ZMM_Run3_Step3_cfg.py index 7ad5f113682a8..be6fea7c9a2bc 100644 --- a/SimG4Core/Configuration/test/ddd_ZMM_Run3_Step3_cfg.py +++ b/SimG4Core/Configuration/test/ddd_ZMM_Run3_Step3_cfg.py @@ -24,7 +24,7 @@ process.load('DQMOffline.Configuration.DQMOfflineMC_cff') process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') -process.MessageLogger.categories.append("TrackerGeometryBuilder"); +process.MessageLogger.TrackerGeometryBuilder=dict(); process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10), diff --git a/SimG4Core/DD4hepGeometry/test/plugins/DD4hepTestDDDWorld.cc b/SimG4Core/DD4hepGeometry/test/plugins/DD4hepTestDDDWorld.cc index 86d2d5910ac5d..9e01bd8240912 100644 --- a/SimG4Core/DD4hepGeometry/test/plugins/DD4hepTestDDDWorld.cc +++ b/SimG4Core/DD4hepGeometry/test/plugins/DD4hepTestDDDWorld.cc @@ -28,7 +28,6 @@ using namespace std; using namespace cms; using namespace edm; using namespace dd4hep; -using geant_units::operators::convertCmToMm; namespace { bool sortByName(const std::pair& p1, @@ -108,13 +107,17 @@ void DD4hepTestDDDWorld::initialize(const dd4hep::sim::Geant4GeometryMaps::Volum LogVerbatim("Geometry").log([&](auto& log) { for (auto const& it : vmap) { for (auto const& fit : specs_) { - for (auto const& sit : fit.second->spars) { + for (auto const& sit : fit.second->numpars) { log << sit.first << " = " << sit.second[0] << "\n"; } for (auto const& pit : fit.second->paths) { - log << dd4hep::dd::realTopName(pit) << "\n"; - log << " compare equal to " << dd4hep::dd::noNamespace(it.first.name()) << " ... "; - if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first.name()), dd4hep::dd::realTopName(pit))) { + const std::string_view selection = dd4hep::dd::realTopName(pit); + const std::string_view name = dd4hep::dd::noNamespace(it.first.name()); + log << selection << "\n"; + log << " compare equal to " << name << " ... "; + if (!(dd4hep::dd::isRegex(selection)) + ? dd4hep::dd::compareEqual(name, selection) + : regex_match(name.begin(), name.end(), regex(std::string(selection)))) { vec_.emplace_back(std::make_pair(&*it.second, &*fit.second)); log << " are equal!\n"; } else @@ -142,7 +145,7 @@ void DD4hepTestDDDWorld::update() { log << "DD4hepTestDDDWorld::update()\n"; for (const auto& t : vec_) { log << t.first->GetName() << ":\n"; - for (const auto& kl : t.second->spars) { + for (const auto& kl : t.second->numpars) { log << kl.first << " = "; for (const auto& kil : kl.second) { log << kil << ", "; @@ -161,24 +164,16 @@ void DD4hepTestDDDWorld::update() { // search for production cuts // you must have four of them: e+ e- gamma proton // - auto gammacutStr = it.second->strValue("ProdCutsForGamma"); - // Geant4 expects mm units. DD4hep returns cm, so must convert to mm. - double gammacut = convertCmToMm(dd4hep::_toDouble({gammacutStr.data(), gammacutStr.size()})); - - auto electroncutStr = it.second->strValue("ProdCutsForElectrons"); - double electroncut = convertCmToMm(dd4hep::_toDouble({electroncutStr.data(), electroncutStr.size()})); - - auto positroncutStr = it.second->strValue("ProdCutsForPositrons"); - double positroncut = convertCmToMm(dd4hep::_toDouble({positroncutStr.data(), positroncutStr.size()})); - - double protoncut = 0.0; - auto protoncutStr = it.second->strValue("ProdCutsForProtons"); - if (it.second->hasValue("ProdCutsForProtons")) { - protoncut = convertCmToMm(dd4hep::_toDouble({protoncutStr.data(), protoncutStr.size()})); - } else { + // Geant4 expects mm units. DD4hep may return different units, so convert to mm. + double gammacut = it.second->dblValue("ProdCutsForGamma") / dd4hep::mm; + double electroncut = it.second->dblValue("ProdCutsForElectrons") / dd4hep::mm; + double positroncut = it.second->dblValue("ProdCutsForPositrons") / dd4hep::mm; + double protoncut = it.second->dblValue("ProdCutsForProtons") / dd4hep::mm; + if (protoncut == 0) { protoncut = electroncut; } + // // For the moment I assume all of the four are set // @@ -189,10 +184,8 @@ void DD4hepTestDDDWorld::update() { prodCuts->SetProductionCut(protoncut, idxG4ProtonCut); if (verbosity_ > 0) { LogVerbatim("Geometry") << "DDG4ProductionCuts : Setting cuts for " << regName - << "\n Electrons: " << electroncutStr << " (" << electroncut - << ")\n Positrons: " << positroncutStr << " (" << positroncut - << ")\n Gamma : " << gammacutStr << " (" << gammacut - << ")\n Protons : " << protoncutStr << " (" << protoncut << ")\n"; + << "\n Electrons: " << electroncut << " mm\n Positrons: " << positroncut + << " mm\n Gamma : " << gammacut << " mm\n Protons : " << protoncut << " mm\n"; } } } diff --git a/SimG4Core/DD4hepGeometry/test/python/testZMM_13TeV_TuneCUETP8M1_cfi_GEN_SIM.py b/SimG4Core/DD4hepGeometry/test/python/testZMM_13TeV_TuneCUETP8M1_cfi_GEN_SIM.py deleted file mode 100644 index d6302cb996740..0000000000000 --- a/SimG4Core/DD4hepGeometry/test/python/testZMM_13TeV_TuneCUETP8M1_cfi_GEN_SIM.py +++ /dev/null @@ -1,203 +0,0 @@ -# Auto generated configuration file -# using: -# Revision: 1.19 -# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v -# with command line options: ZMM_13TeV_TuneCUETP8M1_cfi --conditions auto:phase1_2017_realistic -n 10 --era Run2_2017 --eventcontent FEVTDEBUG --relval 18000,100 -s GEN,SIM --datatier GEN-SIM --beamspot Realistic25ns13TeVEarly2017Collision --geometry DB:Extended --fileout file:step1.root -import FWCore.ParameterSet.Config as cms - -from Configuration.Eras.Era_Run2_2017_cff import Run2_2017 - -process = cms.Process('SIM',Run2_2017) - -# import of standard configurations -process.load('Configuration.StandardSequences.Services_cff') -process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') -process.load('FWCore.MessageService.MessageLogger_cfi') -process.load('Configuration.EventContent.EventContent_cff') -process.load('SimGeneral.MixingModule.mixNoPU_cfi') -process.load('Configuration.StandardSequences.DD4hep_GeometrySim_cff') -process.load('Configuration.StandardSequences.GeometryRecoDB_cff') -process.load('Configuration.StandardSequences.MagneticField_cff') -process.load('Configuration.StandardSequences.Generator_cff') -process.load('IOMC.EventVertexGenerators.VtxSmearedRealistic25ns13TeVEarly2017Collision_cfi') -process.load('GeneratorInterface.Core.genFilterSummary_cff') -process.load('Configuration.StandardSequences.DD4hep_SimIdeal_cff') -process.load('Configuration.StandardSequences.EndOfProcess_cff') -process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') -process.g4SimHits.CheckGeometry = True -# Geant4 geometry check -process.g4SimHits.G4CheckOverlap.OutputBaseName = cms.string("Geom2021DD4hep") -process.g4SimHits.G4CheckOverlap.OverlapFlag = cms.bool(True) -process.g4SimHits.G4CheckOverlap.Tolerance = cms.double(0.0) -process.g4SimHits.G4CheckOverlap.Resolution = cms.int32(10000) -# tells if NodeName is G4Region or G4PhysicalVolume -process.g4SimHits.G4CheckOverlap.RegionFlag = cms.bool(True) -# list of names -#process.g4SimHits.G4CheckOverlap.NodeNames = cms.vstring('') -# enable dump gdml file -process.g4SimHits.G4CheckOverlap.gdmlFlag = cms.bool(True) -# if defined a G4PhysicsVolume info is printed -process.g4SimHits.G4CheckOverlap.PVname = '' -# if defined a list of daughter volumes is printed -process.g4SimHits.G4CheckOverlap.LVname = '' - -# extra output files, created if a name is not empty -process.g4SimHits.FileNameField = '' -process.g4SimHits.FileNameRegions = '' -process.g4SimHits.FileNameGDML = 'cmsDD4hepGeom2021.gdml' - -process.MessageLogger = cms.Service("MessageLogger", - statistics = cms.untracked.vstring('cout', 'simG4test'), - categories = cms.untracked.vstring('SimG4CoreApplication','SimG4CoreGeometry','Geometry','Physics'), - cout = cms.untracked.PSet( - threshold = cms.untracked.string('WARNING'), - noLineBreaks = cms.untracked.bool(True) - ), - simG4test = cms.untracked.PSet( - INFO = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - noLineBreaks = cms.untracked.bool(True), - DEBUG = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - WARNING = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - ERROR = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - threshold = cms.untracked.string('INFO'), - SimG4CoreApplication = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ), - SimG4CoreGeometry = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ), - Geometry = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ), - Physics = cms.untracked.PSet( - limit = cms.untracked.int32(-1) - ) - ), - destinations = cms.untracked.vstring('cout', - 'simG4test') -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(10) -) - -# Input source -process.source = cms.Source("EmptySource") - -process.options = cms.untracked.PSet( -) - -process. g4SimHits.Physics.Verbosity = 1 - -# Production Info -process.configurationMetadata = cms.untracked.PSet( - annotation = cms.untracked.string('ZMM_13TeV_TuneCUETP8M1_cfi nevts:10'), - name = cms.untracked.string('Applications'), - version = cms.untracked.string('$Revision: 1.19 $') -) - -# Output definition - -process.FEVTDEBUGoutput = cms.OutputModule("PoolOutputModule", - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('generation_step') - ), - dataset = cms.untracked.PSet( - dataTier = cms.untracked.string('GEN-SIM'), - filterName = cms.untracked.string('') - ), - fileName = cms.untracked.string('file:step1.root'), - outputCommands = process.FEVTDEBUGEventContent.outputCommands, - splitLevel = cms.untracked.int32(0) -) - -# Additional output definition - -# Other statements -process.genstepfilter.triggerConditions=cms.vstring("generation_step") -from Configuration.AlCa.GlobalTag import GlobalTag -process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2017_realistic', '') - -process.generator = cms.EDFilter("Pythia8GeneratorFilter", - PythiaParameters = cms.PSet( - parameterSets = cms.vstring( - 'pythia8CommonSettings', - 'pythia8CUEP8M1Settings', - 'processParameters' - ), - processParameters = cms.vstring( - 'WeakSingleBoson:ffbar2gmZ = on', - '23:onMode = off', - '23:onIfAny = 13', - 'PhaseSpace:mHatMin = 75.' - ), - pythia8CUEP8M1Settings = cms.vstring( - 'Tune:pp 14', - 'Tune:ee 7', - 'MultipartonInteractions:pT0Ref=2.4024', - 'MultipartonInteractions:ecmPow=0.25208', - 'MultipartonInteractions:expPow=1.6' - ), - pythia8CommonSettings = cms.vstring( - 'Tune:preferLHAPDF = 2', - 'Main:timesAllowErrors = 10000', - 'Check:epTolErr = 0.01', - 'Beams:setProductionScalesFromLHEF = off', - 'SLHA:keepSM = on', - 'SLHA:minMassSM = 1000.', - 'ParticleDecays:limitTau0 = on', - 'ParticleDecays:tau0Max = 10', - 'ParticleDecays:allowPhotonRadiation = on' - ) - ), - comEnergy = cms.double(13000.0), - filterEfficiency = cms.untracked.double(1.0), - maxEventsToPrint = cms.untracked.int32(0), - pythiaHepMCVerbosity = cms.untracked.bool(False), - pythiaPylistVerbosity = cms.untracked.int32(0) -) - - -process.mumugenfilter = cms.EDFilter("MCParticlePairFilter", - MaxEta = cms.untracked.vdouble(2.5, 2.5), - MinEta = cms.untracked.vdouble(-2.5, -2.5), - MinPt = cms.untracked.vdouble(2.5, 2.5), - ParticleCharge = cms.untracked.int32(-1), - ParticleID1 = cms.untracked.vint32(13), - ParticleID2 = cms.untracked.vint32(13), - Status = cms.untracked.vint32(1, 1) -) - - -process.ProductionFilterSequence = cms.Sequence(process.generator+process.mumugenfilter) - -# Path and EndPath definitions -process.generation_step = cms.Path(process.pgen) -process.simulation_step = cms.Path(process.psim) -process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) -process.endjob_step = cms.EndPath(process.endOfProcess) -process.FEVTDEBUGoutput_step = cms.EndPath(process.FEVTDEBUGoutput) - -# Schedule definition -process.schedule = cms.Schedule(process.generation_step,process.genfiltersummary_step,process.simulation_step,process.endjob_step,process.FEVTDEBUGoutput_step) -from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask -associatePatAlgosToolsTask(process) -# filter all path with the production filter sequence -for path in process.paths: - getattr(process,path).insert(0, process.ProductionFilterSequence) - - -# Customisation from command line - -# Add early deletion of temporary data products to reduce peak memory need -from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete -process = customiseEarlyDelete(process) -# End adding early deletion diff --git a/SimG4Core/DD4hepGeometry/test/runTest.sh b/SimG4Core/DD4hepGeometry/test/runTest.sh index 56964578f13bb..8344bc7e2bc1c 100755 --- a/SimG4Core/DD4hepGeometry/test/runTest.sh +++ b/SimG4Core/DD4hepGeometry/test/runTest.sh @@ -4,7 +4,6 @@ function die { echo $1: status $2 ; exit $2; } F1=${LOCAL_TEST_DIR}/python/testG4Geometry.py F2=${LOCAL_TEST_DIR}/python/testG4Regions.py -F3=${LOCAL_TEST_DIR}/python/testZMM_13TeV_TuneCUETP8M1_cfi_GEN_SIM.py echo " testing SimG4Core/DD4hepGeometry" @@ -13,5 +12,3 @@ echo "===== Test \"cmsRun testG4Geometry.py\" ====" (cmsRun $F1) || die "Failure using cmsRun $F1" $? echo "===== Test \"cmsRun testG4Regions.py\" ====" (cmsRun $F2) || die "Failure using cmsRun $F2" $? -echo "===== Test \"cmsRun testZMM_13TeV_TuneCUETP8M1_cfi_GEN_SIM.py\" ====" -######## FIXME: (cmsRun $F3) || die "Failure using cmsRun $F3" $? diff --git a/SimG4Core/Geometry/src/DD4hep_DDG4Builder.cc b/SimG4Core/Geometry/src/DD4hep_DDG4Builder.cc index 5e3e5dc985793..f7024f6a5023f 100644 --- a/SimG4Core/Geometry/src/DD4hep_DDG4Builder.cc +++ b/SimG4Core/Geometry/src/DD4hep_DDG4Builder.cc @@ -46,12 +46,19 @@ G4VPhysicalVolume *DDG4Builder::BuildGeometry(SensitiveDetectorCatalog &catalog) dd4hep::SpecParRefs specs; specPars.filter(specs, "SensitiveDetector"); for (auto const &it : map_) { + bool foundMatch = false; // Stop search at first occurrence for (auto const &fit : specs) { for (auto const &pit : fit.second->paths) { - if (dd4hep::dd::compareEqualName(dd4hep::dd::realTopName(pit), dd4hep::dd::noNamespace(it.first.name()))) { + if (dd4hep::dd::compareEqualName(dd4hep::dd::noNamespace(dd4hep::dd::realTopName(pit)), + dd4hep::dd::noNamespace(it.first.name()))) { dd4hepVec.emplace_back(&*it.second, &*fit.second); + + foundMatch = true; + break; } } + if (foundMatch) + break; } } diff --git a/SimG4Core/Geometry/src/DDG4ProductionCuts.cc b/SimG4Core/Geometry/src/DDG4ProductionCuts.cc index 67ed6ba1d89f8..fe3c068f84a31 100644 --- a/SimG4Core/Geometry/src/DDG4ProductionCuts.cc +++ b/SimG4Core/Geometry/src/DDG4ProductionCuts.cc @@ -1,21 +1,20 @@ #include "SimG4Core/Geometry/interface/DDG4ProductionCuts.h" #include "DetectorDescription/Core/interface/DDLogicalPart.h" -#include "DataFormats/Math/interface/GeantUnits.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" #include +#include #include "G4ProductionCuts.hh" #include "G4RegionStore.hh" #include "G4Region.hh" #include "G4LogicalVolume.hh" +#include "G4LogicalVolumeStore.hh" #include -using geant_units::operators::convertCmToMm; - namespace { /** helper function to compare parts through their name instead of comparing them by their pointers. @@ -114,15 +113,27 @@ void DDG4ProductionCuts::dd4hepInitialize() { dd4hep::SpecParRefs specs; specPars_->filter(specs, keywordRegion_); + // LOOP ON ALL LOGICAL VOLUMES for (auto const& it : *dd4hepMap_) { + bool foundMatch = false; // Same behavior as in DDD: when matching SpecPar is found, stop search! + // SEARCH ON ALL SPECPARS for (auto const& fit : specs) { for (auto const& pit : fit.second->paths) { - if (dd4hep::dd::compareEqualName(dd4hep::dd::realTopName(pit), dd4hep::dd::noNamespace(it.first.name()))) { + const std::string_view selection = dd4hep::dd::noNamespace(dd4hep::dd::realTopName(pit)); + const std::string_view name = dd4hep::dd::noNamespace(it.first.name()); + if (!(dd4hep::dd::isRegex(selection)) + ? dd4hep::dd::compareEqual(name, selection) + : std::regex_match(name.begin(), name.end(), std::regex(selection.begin(), selection.end()))) { dd4hepVec_.emplace_back(std::make_pair(&*it.second, &*fit.second)); + foundMatch = true; + break; } } - } - } + if (foundMatch) + break; + } // Search on all SpecPars + } // Loop on all logical volumes + // sort all root volumes - to get the same sequence at every run of the application. sort(begin(dd4hepVec_), end(dd4hepVec_), &sortByName); @@ -130,9 +141,26 @@ void DDG4ProductionCuts::dd4hepInitialize() { for (auto const& it : dd4hepVec_) { auto regName = it.second->strValue(keywordRegion_); G4Region* region = G4RegionStore::GetInstance()->FindOrCreateRegion({regName.data(), regName.size()}); + region->AddRootLogicalVolume(it.first); - edm::LogVerbatim("Geometry") << it.first->GetName() << ": " << it.second->strValue(keywordRegion_); + edm::LogVerbatim("Geometry") << it.first->GetName() << ": " << regName; edm::LogVerbatim("Geometry") << " MakeRegions: added " << it.first->GetName() << " to region " << region->GetName(); + + // Also treat reflected volumes + const G4String& nonReflectedG4Name = it.first->GetName(); + const G4String& reflectedG4Name = nonReflectedG4Name + "_refl"; + const G4LogicalVolumeStore* const allG4LogicalVolumes = G4LogicalVolumeStore::GetInstance(); + const auto reflectedG4LogicalVolumeIt = std::find_if( + allG4LogicalVolumes->begin(), allG4LogicalVolumes->end(), [&](const G4LogicalVolume* const aG4LogicalVolume) { + return (aG4LogicalVolume->GetName() == reflectedG4Name); + }); + // If G4 Logical volume has a reflected volume, add it to the region as well. + if (reflectedG4LogicalVolumeIt != allG4LogicalVolumes->end()) { + region->AddRootLogicalVolume(*reflectedG4LogicalVolumeIt); + edm::LogVerbatim("Geometry") << " MakeRegions: added " << (*reflectedG4LogicalVolumeIt)->GetName() + << " to region " << region->GetName(); + } + edm::LogVerbatim("Geometry").log([&](auto& log) { for (auto const& sit : it.second->spars) { log << sit.first << " = " << sit.second[0] << "\n"; @@ -222,52 +250,12 @@ void DDG4ProductionCuts::setProdCuts(const dd4hep::SpecPar* spec, G4Region* regi // search for production cuts // you must have four of them: e+ e- gamma proton // - double gammacut = 0.0; - double electroncut = 0.0; - double positroncut = 0.0; - double protoncut = 0.0; - - auto gammacutStr = spec->strValue("ProdCutsForGamma"); - if (gammacutStr.empty()) { - throw cms::Exception( - "SimG4CorePhysics", - " DDG4ProductionCuts::setProdCuts: Problem with Region tags - no/more than one ProdCutsForGamma."); - } - // Geant4 expects mm units. DD4hep returns cm, so must convert to mm. - gammacut = convertCmToMm(dd4hep::_toDouble({gammacutStr.data(), gammacutStr.size()})); - - auto electroncutStr = spec->strValue("ProdCutsForElectrons"); - if (electroncutStr.empty()) { - throw cms::Exception( - "SimG4CorePhysics", - " DDG4ProductionCuts::setProdCuts: Problem with Region tags - no/more than one ProdCutsForElectrons."); - } - electroncut = convertCmToMm(dd4hep::_toDouble({electroncutStr.data(), electroncutStr.size()})); - - auto positroncutStr = spec->strValue("ProdCutsForPositrons"); - if (positroncutStr.empty()) { - throw cms::Exception( - "SimG4CorePhysics", - " DDG4ProductionCuts::setProdCuts: Problem with Region tags - no/more than one ProdCutsForPositrons."); - } - positroncut = convertCmToMm(dd4hep::_toDouble({positroncutStr.data(), positroncutStr.size()})); - - if (!spec->hasValue("ProdCutsForProtons")) { - // There is no ProdCutsForProtons set in XML, - // check if it's a legacy geometry scenario without it - if (protonCut_) { - protoncut = electroncut; - } else { - protoncut = 0.; - } - } else { - auto protoncutStr = spec->strValue("ProdCutsForProtons"); - if (protoncutStr.empty()) { - throw cms::Exception( - "SimG4CorePhysics", - " DDG4ProductionCuts::setProdCuts: Problem with Region tags - more than one ProdCutsForProtons."); - } - protoncut = convertCmToMm(dd4hep::_toDouble({protoncutStr.data(), protoncutStr.size()})); + double gammacut = spec->dblValue("ProdCutsForGamma") / dd4hep::mm; // Convert from DD4hep units to mm + double electroncut = spec->dblValue("ProdCutsForElectrons") / dd4hep::mm; + double positroncut = spec->dblValue("ProdCutsForPositrons") / dd4hep::mm; + double protoncut = spec->dblValue("ProdCutsForProtons") / dd4hep::mm; + if (protoncut == 0) { + protoncut = electroncut; } prodCuts = new G4ProductionCuts(); diff --git a/SimG4Core/GeometryProducer/interface/GeometryProducer.h b/SimG4Core/GeometryProducer/interface/GeometryProducer.h index cd309b22645d0..4a217bb30659b 100644 --- a/SimG4Core/GeometryProducer/interface/GeometryProducer.h +++ b/SimG4Core/GeometryProducer/interface/GeometryProducer.h @@ -21,11 +21,16 @@ namespace sim { class FieldBuilder; } +namespace cms { + class DDCompactView; +} + class SimWatcher; class SimProducer; class DDDWorld; class G4RunManagerKernel; class SimTrackManager; +class DDCompactView; class GeometryProducer : public edm::one::EDProducer { public: @@ -46,9 +51,7 @@ class GeometryProducer : public edm::one::EDProducer> m_watchers; std::vector> m_producers; @@ -58,7 +61,14 @@ class GeometryProducer : public edm::one::EDProducer m_sensTkDets; std::vector m_sensCaloDets; edm::ParameterSet m_p; + + mutable const DDCompactView *m_pDD; + mutable const cms::DDCompactView *m_pDD4hep; + bool m_firstRun; + bool m_pUseMagneticField; + bool m_pUseSensitiveDetectors; + bool m_pGeoFromDD4hep; }; #endif diff --git a/SimG4Core/GeometryProducer/src/GeometryProducer.cc b/SimG4Core/GeometryProducer/src/GeometryProducer.cc index 85d2b1b88f855..ca3ef6f08f4a0 100644 --- a/SimG4Core/GeometryProducer/src/GeometryProducer.cc +++ b/SimG4Core/GeometryProducer/src/GeometryProducer.cc @@ -23,6 +23,7 @@ #include "Geometry/Records/interface/IdealGeometryRecord.h" #include "DetectorDescription/Core/interface/DDCompactView.h" +#include "DetectorDescription/DDCMS/interface/DDCompactView.h" #include "G4RunManagerKernel.hh" #include "G4TransportationManager.hh" @@ -60,12 +61,15 @@ static void createWatchers(const edm::ParameterSet &iP, GeometryProducer::GeometryProducer(edm::ParameterSet const &p) : m_kernel(nullptr), - m_pUseMagneticField(p.getParameter("UseMagneticField")), m_pField(p.getParameter("MagneticField")), - m_pUseSensitiveDetectors(p.getParameter("UseSensitiveDetectors")), m_attach(nullptr), m_p(p), - m_firstRun(true) { + m_pDD(nullptr), + m_pDD4hep(nullptr), + m_firstRun(true), + m_pUseMagneticField(p.getParameter("UseMagneticField")), + m_pUseSensitiveDetectors(p.getParameter("UseSensitiveDetectors")), + m_pGeoFromDD4hep(false) { // Look for an outside SimActivityRegistry // this is used by the visualization code edm::Service otherRegistry; @@ -111,21 +115,33 @@ void GeometryProducer::produce(edm::Event &e, const edm::EventSetup &es) { return; m_firstRun = false; - edm::LogInfo("GeometryProducer") << "Producing G4 Geom"; + edm::LogVerbatim("GeometryProducer") << "Producing G4 Geom"; m_kernel = G4RunManagerKernel::GetRunManagerKernel(); if (m_kernel == nullptr) m_kernel = new G4RunManagerKernel(); - edm::LogInfo("GeometryProducer") << " GeometryProducer initializing "; + edm::LogVerbatim("GeometryProducer") << " GeometryProducer initializing "; // DDDWorld: get the DDCV from the ES and use it to build the World - edm::ESTransientHandle pDD; - es.get().get(pDD); + if (m_pGeoFromDD4hep) { + edm::ESTransientHandle pDD; + es.get().get(pDD); + m_pDD4hep = pDD.product(); + } else { + edm::ESTransientHandle pDD; + es.get().get(pDD); + m_pDD = pDD.product(); + } + + SensitiveDetectorCatalog catalog; + const DDDWorld *dddworld = new DDDWorld(m_pDD, m_pDD4hep, catalog, 1, false, false); + G4VPhysicalVolume *world = dddworld->GetWorldVolume(); + if (nullptr != world) + edm::LogVerbatim("GeometryProducer") << " World Volume: " << world->GetName(); + m_kernel->DefineWorldVolume(world, true); - G4LogicalVolumeToDDLogicalPartMap map_; - SensitiveDetectorCatalog catalog_; - const DDDWorld *world = new DDDWorld(&(*pDD), map_, catalog_, false); - m_registry.dddWorldSignal_(world); + m_registry.dddWorldSignal_(dddworld); + edm::LogVerbatim("GeometryProducer") << " Magnetic field initialisation"; updateMagneticField(es); if (m_pUseSensitiveDetectors) { @@ -136,7 +152,7 @@ void GeometryProducer::produce(edm::Event &e, const edm::EventSetup &es) { m_attach = new AttachSD; { std::pair, std::vector> sensDets = - m_attach->create(es, catalog_, m_p, m_trackManager.get(), m_registry); + m_attach->create(es, catalog, m_p, m_trackManager.get(), m_registry); m_sensTkDets.swap(sensDets.first); m_sensCaloDets.swap(sensDets.second); diff --git a/SimG4Core/HelpfulWatchers/python/G4StepStatistics.py b/SimG4Core/HelpfulWatchers/python/G4StepStatistics.py index 21e139755299f..68474c0149f89 100644 --- a/SimG4Core/HelpfulWatchers/python/G4StepStatistics.py +++ b/SimG4Core/HelpfulWatchers/python/G4StepStatistics.py @@ -9,24 +9,8 @@ def customise(process): #Tweak Message logger to dump G4cout and G4cerr messages in G4msg.log #print process.MessageLogger.__dict__ - process.MessageLogger.destinations=cms.untracked.vstring('cout' - ,'cerr' - ,'G4msg' - ) - process.MessageLogger.categories=cms.untracked.vstring('FwkJob' - ,'FwkReport' - ,'FwkSummary' - ,'Root_NoDictionary' - ,'TimeReport' - ,'TimeModule' - ,'TimeEvent' - ,'MemoryCheck' - ,'PhysicsList' - ,'G4cout' - ,'G4cerr' - ) #Configuring the G4msg.log output - process.MessageLogger.G4msg = cms.untracked.PSet( + process.MessageLogger.files = dict(G4msg = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(True) #First eliminate unneeded output ,threshold = cms.untracked.string('INFO') @@ -48,6 +32,7 @@ def customise(process): ,G4cout = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ,G4cerr = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ) +) #Add these 3 lines to put back the summary for timing information at the end of the logfile #(needed for TimeReport report) diff --git a/SimG4Core/MagneticField/FieldParameters.xml b/SimG4Core/MagneticField/FieldParameters.xml deleted file mode 100644 index 56b583928320e..0000000000000 --- a/SimG4Core/MagneticField/FieldParameters.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/SimG4Core/Notification/interface/G4SimTrack.h b/SimG4Core/Notification/interface/G4SimTrack.h index 7de9040681a70..baafdf1bde4dc 100644 --- a/SimG4Core/Notification/interface/G4SimTrack.h +++ b/SimG4Core/Notification/interface/G4SimTrack.h @@ -3,6 +3,8 @@ #include "DataFormats/Math/interface/Vector3D.h" #include "DataFormats/Math/interface/LorentzVector.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "SimG4Core/Notification/interface/TrackWithHistory.h" #include #include @@ -20,7 +22,8 @@ class G4SimTrack { parentID_(-1), parentMomentum_(math::XYZVectorD(0., 0., 0.)), tkSurfacePosition_(math::XYZVectorD(0., 0., 0.)), - tkSurfaceMomentum_(math::XYZTLorentzVectorD(0., 0., 0., 0.)) {} + tkSurfaceMomentum_(math::XYZTLorentzVectorD(0., 0., 0., 0.)), + crossedBoundary_(false) {} G4SimTrack(int iid, int ipart, const math::XYZVectorD& ip, double ie, int iv, int ig, const math::XYZVectorD& ipmom) : id_(iid), @@ -31,7 +34,8 @@ class G4SimTrack { igenpart_(ig), parentMomentum_(ipmom), tkSurfacePosition_(math::XYZVectorD(0., 0., 0.)), - tkSurfaceMomentum_(math::XYZTLorentzVectorD(0., 0., 0., 0.)) {} + tkSurfaceMomentum_(math::XYZTLorentzVectorD(0., 0., 0., 0.)), + crossedBoundary_(false) {} G4SimTrack(int iid, int ipart, @@ -50,7 +54,8 @@ class G4SimTrack { igenpart_(ig), parentMomentum_(ipmom), tkSurfacePosition_(tkpos), - tkSurfaceMomentum_(tkmom) {} + tkSurfaceMomentum_(tkmom), + crossedBoundary_(false) {} ~G4SimTrack() {} @@ -69,6 +74,19 @@ class G4SimTrack { // is stored, else = -1) int parentID() const { return parentID_; } + void copyCrossedBoundaryVars(const TrackWithHistory* track) { + if (track->crossedBoundary()) { + crossedBoundary_ = track->crossedBoundary(); + idAtBoundary_ = track->getIDAtBoundary(); + positionAtBoundary_ = track->getPositionAtBoundary(); + momentumAtBoundary_ = track->getMomentumAtBoundary(); + } + } + bool crossedBoundary() const { return crossedBoundary_; } + const math::XYZTLorentzVectorF& getPositionAtBoundary() const { return positionAtBoundary_; } + const math::XYZTLorentzVectorF& getMomentumAtBoundary() const { return momentumAtBoundary_; } + int getIDAtBoundary() const { return idAtBoundary_; } + private: int id_; int ipart_; @@ -80,6 +98,10 @@ class G4SimTrack { math::XYZVectorD parentMomentum_; math::XYZVectorD tkSurfacePosition_; math::XYZTLorentzVectorD tkSurfaceMomentum_; + bool crossedBoundary_; + int idAtBoundary_; + math::XYZTLorentzVectorF positionAtBoundary_; + math::XYZTLorentzVectorF momentumAtBoundary_; }; #endif diff --git a/SimG4Core/Notification/interface/Signaler.h b/SimG4Core/Notification/interface/Signaler.h index 035d48f1b3695..cc945e31155f0 100644 --- a/SimG4Core/Notification/interface/Signaler.h +++ b/SimG4Core/Notification/interface/Signaler.h @@ -57,11 +57,10 @@ namespace sim_act { ///does not take ownership of memory void connect(Observer& iObs) { observers_.push_back(&iObs); } - private: - Signaler(const Signaler&) = delete; // stop default - + Signaler(const Signaler&) = delete; // stop default const Signaler& operator=(const Signaler&) = delete; // stop default + private: void update(const T* iData) override { this->operator()(iData); } // ---------- member data -------------------------------- std::vector*> observers_; diff --git a/SimG4Core/Notification/interface/SimActivityRegistry.h b/SimG4Core/Notification/interface/SimActivityRegistry.h index 00fd75a598fbd..61e50832aeb84 100644 --- a/SimG4Core/Notification/interface/SimActivityRegistry.h +++ b/SimG4Core/Notification/interface/SimActivityRegistry.h @@ -18,10 +18,6 @@ // Created: Sun Nov 13 11:43:40 EST 2005 // -// system include files -#include "boost/bind.hpp" -#include "boost/mem_fn.hpp" - // user include files #include "SimG4Core/Notification/interface/Signaler.h" @@ -93,12 +89,9 @@ class SimActivityRegistry { ///forwards our signals to slots connected to iOther void connect(SimActivityRegistry& iOther); -private: - SimActivityRegistry(const SimActivityRegistry&) = delete; // stop default - - const SimActivityRegistry& operator=(const SimActivityRegistry&) = delete; // stop default - - // ---------- member data -------------------------------- + // stop default + SimActivityRegistry(const SimActivityRegistry&) = delete; + const SimActivityRegistry& operator=(const SimActivityRegistry&) = delete; }; #endif diff --git a/SimG4Core/Notification/interface/SimActivityRegistryEnroller.h b/SimG4Core/Notification/interface/SimActivityRegistryEnroller.h index 548d49ff68f2d..9e8964e9eeb3d 100644 --- a/SimG4Core/Notification/interface/SimActivityRegistryEnroller.h +++ b/SimG4Core/Notification/interface/SimActivityRegistryEnroller.h @@ -17,17 +17,6 @@ // Original Author: Chris Jones // Created: Sun Nov 13 15:08:12 EST 2005 // - -// system include files -#include "boost/mpl/pop_back.hpp" -#include "boost/mpl/begin_end.hpp" -#include "boost/mpl/copy_if.hpp" -#include "boost/mpl/deref.hpp" -#include "boost/mpl/prior.hpp" -#include "boost/mpl/vector.hpp" -#include "boost/mpl/eval_if.hpp" -#include "boost/mpl/empty.hpp" - // user include files #include "SimG4Core/Notification/interface/Observer.h" #include "SimG4Core/Notification/interface/SimActivityRegistry.h" @@ -40,56 +29,41 @@ namespace enroller_helper { static void enroll(SimActivityRegistry&, void*) {} }; - //this class is used to terminate our recursion template - struct LastEnrollerHelper { - static void enroll(SimActivityRegistry&, T*) {} - }; - - template - struct EnrollerHelper { - typedef typename boost::mpl::pop_back::type RemainingVector; - static void enroll(SimActivityRegistry& iReg, T* iT) { - //Try to enroll the object if it inherits from the class at the - // end of TVector - Enrollment::type>::type>::type>::enroll(iReg, iT); - - //If TVector is not at its end, call EnrollerHelper with a vector - // that had our last type 'popped off' the end - typedef typename boost::mpl::eval_if< - boost::mpl::empty, - boost::mpl::identity >, - boost::mpl::identity::type> > >::type NextEnroller; - NextEnroller::enroll(iReg, iT); - } - }; + static void enroll(SimActivityRegistry& iReg, T* iT) {} + + template + static void enroll(SimActivityRegistry& iReg, T* iT) { + //Try to enroll the object if it inherits from the class at the + // start of TVector + Enrollment::enroll(iReg, iT); + enroll(iReg, iT); + } } // namespace enroller_helper class SimActivityRegistryEnroller { public: SimActivityRegistryEnroller() {} - //virtual ~SimActivityRegistryEnroller(); - typedef boost::mpl:: - vector - Signals; - - // ---------- const member functions --------------------- - // ---------- static member functions -------------------- template static void enroll(SimActivityRegistry& iReg, T* iObj) { - enroller_helper::EnrollerHelper::enroll(iReg, iObj); + enroller_helper::enroll(iReg, iObj); } - // ---------- member functions --------------------------- - -private: - SimActivityRegistryEnroller(const SimActivityRegistryEnroller&) = delete; // stop default - - const SimActivityRegistryEnroller& operator=(const SimActivityRegistryEnroller&) = delete; // stop default - // ---------- member data -------------------------------- + // stop default + SimActivityRegistryEnroller(const SimActivityRegistryEnroller&) = delete; + const SimActivityRegistryEnroller& operator=(const SimActivityRegistryEnroller&) = delete; }; #endif diff --git a/SimG4Core/Notification/interface/SimTrackManager.h b/SimG4Core/Notification/interface/SimTrackManager.h index 7df75d4b73cb7..e0dd47a5c5d07 100644 --- a/SimG4Core/Notification/interface/SimTrackManager.h +++ b/SimG4Core/Notification/interface/SimTrackManager.h @@ -25,8 +25,8 @@ // user include files #include "SimG4Core/Notification/interface/TrackWithHistory.h" #include "SimG4Core/Notification/interface/TrackContainer.h" - #include "SimDataFormats/Forward/interface/LHCTransportLinkContainer.h" +#include "FWCore/Utilities/interface/Exception.h" // forward declarations @@ -101,13 +101,37 @@ class SimTrackManager { } return flag; } + TrackWithHistory* getTrackByID(unsigned int trackID, bool strict = false) const { + bool trackFound = false; + TrackWithHistory* track; + if (m_trksForThisEvent == nullptr) { + throw cms::Exception("Unknown", "SimTrackManager") << "m_trksForThisEvent is a nullptr, cannot get any track!"; + } + for (unsigned int itr = 0; itr < (*m_trksForThisEvent).size(); ++itr) { + if ((*m_trksForThisEvent)[itr]->trackID() == trackID) { + track = (*m_trksForThisEvent)[itr]; + trackFound = true; + break; + } + } + if (!trackFound) { + if (strict) { + throw cms::Exception("Unknown", "SimTrackManager") + << "Attempted to get track " << trackID << " from SimTrackManager, but it's not in m_trksForThisEvent (" + << (*m_trksForThisEvent).size() << " tracks in m_trksForThisEvent)" + << "\n"; + } + return nullptr; + } + return track; + } void setLHCTransportLink(const edm::LHCTransportLinkContainer* thisLHCTlink) { theLHCTlink = thisLHCTlink; } -private: // stop default SimTrackManager(const SimTrackManager&) = delete; const SimTrackManager& operator=(const SimTrackManager&) = delete; +private: void saveTrackAndItsBranch(TrackWithHistory*); int getOrCreateVertex(TrackWithHistory*, int, G4SimEvent* simEvent); void cleanVertexMap(); diff --git a/SimG4Core/Notification/interface/TrackInformation.h b/SimG4Core/Notification/interface/TrackInformation.h index be840de56ebf5..d45c5e306058c 100644 --- a/SimG4Core/Notification/interface/TrackInformation.h +++ b/SimG4Core/Notification/interface/TrackInformation.h @@ -1,9 +1,13 @@ #ifndef SimG4Core_TrackInformation_H #define SimG4Core_TrackInformation_H +#include "FWCore/Utilities/interface/Exception.h" #include "G4VUserTrackInformation.hh" - #include "G4Allocator.hh" +#include "G4Track.hh" +#include "DataFormats/Math/interface/Vector3D.h" +#include "DataFormats/Math/interface/LorentzVector.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" class TrackInformation : public G4VUserTrackInformation { public: @@ -52,8 +56,24 @@ class TrackInformation : public G4VUserTrackInformation { void setCaloSurfaceParticlePID(int id) { caloSurfaceParticlePID_ = id; } double caloSurfaceParticleP() const { return caloSurfaceParticleP_; } void setCaloSurfaceParticleP(double p) { caloSurfaceParticleP_ = p; } - int getIDfineCalo() const { return ((idFineCalo_ > 0) ? idFineCalo_ : idOnCaloSurface_); } - void setIDfineCalo(int id) { idFineCalo_ = id; } + + // Boundary crossing variables + void setCrossedBoundary(const G4Track *track) { + crossedBoundary_ = true; + idAtBoundary_ = track->GetTrackID(); + positionAtBoundary_ = math::XYZTLorentzVectorF(track->GetPosition().x() / CLHEP::cm, + track->GetPosition().y() / CLHEP::cm, + track->GetPosition().z() / CLHEP::cm, + track->GetGlobalTime()); + momentumAtBoundary_ = math::XYZTLorentzVectorF(track->GetMomentum().x() / CLHEP::GeV, + track->GetMomentum().y() / CLHEP::GeV, + track->GetMomentum().z() / CLHEP::GeV, + track->GetKineticEnergy() / CLHEP::GeV); + } + bool crossedBoundary() const { return crossedBoundary_; } + const math::XYZTLorentzVectorF &getPositionAtBoundary() const { return positionAtBoundary_; } + const math::XYZTLorentzVectorF &getMomentumAtBoundary() const { return momentumAtBoundary_; } + int getIDAtBoundary() const { return idAtBoundary_; } // Generator information int genParticlePID() const { return genParticlePID_; } @@ -83,7 +103,11 @@ class TrackInformation : public G4VUserTrackInformation { int idCaloVolume_; int idLastVolume_; bool caloIDChecked_; - int idFineCalo_; + bool crossedBoundary_; + bool idAtBoundary_; + math::XYZTLorentzVectorF positionAtBoundary_; + math::XYZTLorentzVectorF momentumAtBoundary_; + int genParticlePID_, caloSurfaceParticlePID_; double genParticleP_, caloSurfaceParticleP_; @@ -103,7 +127,7 @@ class TrackInformation : public G4VUserTrackInformation { idCaloVolume_(-1), idLastVolume_(-1), caloIDChecked_(false), - idFineCalo_(-1), + crossedBoundary_(false), genParticlePID_(-1), caloSurfaceParticlePID_(0), genParticleP_(0), diff --git a/SimG4Core/Notification/interface/TrackWithHistory.h b/SimG4Core/Notification/interface/TrackWithHistory.h index 70709cc9f3c30..3070abe99622f 100644 --- a/SimG4Core/Notification/interface/TrackWithHistory.h +++ b/SimG4Core/Notification/interface/TrackWithHistory.h @@ -42,6 +42,20 @@ class TrackWithHistory { void setGenParticleID(int i) { genParticleID_ = i; } bool storeTrack() const { return storeTrack_; } bool saved() const { return saved_; } + + // Boundary crossing variables + void setCrossedBoundaryPosMom(int id, + const math::XYZTLorentzVectorF position, + const math::XYZTLorentzVectorF momentum) { + crossedBoundary_ = true; + idAtBoundary_ = id; + positionAtBoundary_ = position; + momentumAtBoundary_ = momentum; + } + bool crossedBoundary() const { return crossedBoundary_; } + const math::XYZTLorentzVectorF &getPositionAtBoundary() const { return positionAtBoundary_; } + const math::XYZTLorentzVectorF &getMomentumAtBoundary() const { return momentumAtBoundary_; } + int getIDAtBoundary() const { return idAtBoundary_; } /** Internal consistency check (optional). * Method called at PostUserTrackingAction time, to check * if the information is consistent with that provided @@ -64,6 +78,13 @@ class TrackWithHistory { double weight_; bool storeTrack_; bool saved_; + + bool isPrimary_; + bool crossedBoundary_; + int idAtBoundary_; + math::XYZTLorentzVectorF positionAtBoundary_; + math::XYZTLorentzVectorF momentumAtBoundary_; + int extractGenID(const G4Track *gt) const; }; diff --git a/SimG4Core/Notification/src/CMSSteppingVerbose.cc b/SimG4Core/Notification/src/CMSSteppingVerbose.cc index 9982e66589f35..f612dba1d232d 100644 --- a/SimG4Core/Notification/src/CMSSteppingVerbose.cc +++ b/SimG4Core/Notification/src/CMSSteppingVerbose.cc @@ -290,16 +290,20 @@ void CMSSteppingVerbose::NextStep(const G4Step* step, const G4SteppingManager* s << G4endl; const G4VPhysicalVolume* pv1 = preStep->GetPhysicalVolume(); const G4VPhysicalVolume* pv2 = postStep->GetPhysicalVolume(); + const G4RotationMatrix* rotm = pv1->GetFrameRotation(); G4cout << "PreStepVolume: " << pv1->GetName() << G4endl; G4cout << " Translation: " << pv1->GetObjectTranslation() << G4endl; - G4cout << " Rotation: " << pv1->GetObjectRotationValue() << G4endl; + if (nullptr != rotm) + G4cout << " Rotation: " << *rotm << G4endl; const G4VSolid* sv1 = pv1->GetLogicalVolume()->GetSolid(); sv1->StreamInfo(G4cout); G4cout << G4endl; - if (pv2) { + if (pv2 && pv2 != pv1) { G4cout << "PostStepVolume: " << pv2->GetName() << G4endl; G4cout << " Translation: " << pv2->GetObjectTranslation() << G4endl; - G4cout << " Rotation: " << pv2->GetObjectRotationValue() << G4endl; + rotm = pv2->GetFrameRotation(); + if (nullptr != rotm) + G4cout << " Rotation: " << *rotm << G4endl; const G4VSolid* sv2 = pv2->GetLogicalVolume()->GetSolid(); sv2->StreamInfo(G4cout); } @@ -313,7 +317,9 @@ void CMSSteppingVerbose::NextStep(const G4Step* step, const G4SteppingManager* s const G4VSolid* sol = pv->GetLogicalVolume()->GetSolid(); G4cout << " Depth # " << k << " PhysVolume " << pv->GetName() << G4endl; G4cout << " Translation: " << pv->GetObjectTranslation() << G4endl; - G4cout << " Rotation: " << pv->GetObjectRotationValue() << G4endl; + const G4RotationMatrix* rotm = pv->GetFrameRotation(); + if (nullptr != rotm) + G4cout << " Rotation: " << *rotm << G4endl; sol->StreamInfo(G4cout); } } diff --git a/SimG4Core/Notification/src/G4SimEvent.cc b/SimG4Core/Notification/src/G4SimEvent.cc index b8106bb6a8270..ac143e05727c6 100644 --- a/SimG4Core/Notification/src/G4SimEvent.cc +++ b/SimG4Core/Notification/src/G4SimEvent.cc @@ -57,6 +57,9 @@ void G4SimEvent::load(edm::SimTrackContainer& c) const { SimTrack t = SimTrack(ip, p, iv, ig, tkpos, tkmom); t.setTrackId(id); t.setEventId(EncodedEventId(0)); + if (trk->crossedBoundary()) + t.setCrossedBoundaryVars( + trk->crossedBoundary(), trk->getIDAtBoundary(), trk->getPositionAtBoundary(), trk->getMomentumAtBoundary()); c.push_back(t); } std::stable_sort(c.begin(), c.end(), IdSort()); diff --git a/SimG4Core/Notification/src/NewTrackAction.cc b/SimG4Core/Notification/src/NewTrackAction.cc index 14059fae54031..e46d95828b373 100644 --- a/SimG4Core/Notification/src/NewTrackAction.cc +++ b/SimG4Core/Notification/src/NewTrackAction.cc @@ -69,7 +69,6 @@ void NewTrackAction::addUserInfoToSecondary(G4Track *aTrack, const TrackInformat motherInfo.getIDLastVolume(), aTrack->GetDefinition()->GetPDGEncoding(), aTrack->GetMomentum().mag()); - trkInfo->setIDfineCalo(motherInfo.getIDfineCalo()); } else { // transfer calo ID from mother (to be checked in TrackingAction) trkInfo->setIDonCaloSurface(motherInfo.getIDonCaloSurface(), @@ -77,7 +76,6 @@ void NewTrackAction::addUserInfoToSecondary(G4Track *aTrack, const TrackInformat motherInfo.getIDLastVolume(), motherInfo.caloSurfaceParticlePID(), motherInfo.caloSurfaceParticleP()); - trkInfo->setIDfineCalo(motherInfo.getIDfineCalo()); } if (motherInfo.hasCastorHit()) { diff --git a/SimG4Core/Notification/src/SimTrackManager.cc b/SimG4Core/Notification/src/SimTrackManager.cc index d23ca80cd98d9..6e43d931363b8 100644 --- a/SimG4Core/Notification/src/SimTrackManager.cc +++ b/SimG4Core/Notification/src/SimTrackManager.cc @@ -136,15 +136,17 @@ void SimTrackManager::reallyStoreTracks(G4SimEvent* simEvent) { if (cit != mapTkCaloStateInfo.end()) { tcinfo = cit->second; } - simEvent->add(new G4SimTrack(trkH->trackID(), - trkH->particleID(), - trkH->momentum(), - trkH->totalEnergy(), - ivertex, - ig, - pm, - tcinfo.first, - tcinfo.second)); + G4SimTrack* g4simtrack = new G4SimTrack(trkH->trackID(), + trkH->particleID(), + trkH->momentum(), + trkH->totalEnergy(), + ivertex, + ig, + pm, + tcinfo.first, + tcinfo.second); + g4simtrack->copyCrossedBoundaryVars(trkH); + simEvent->add(g4simtrack); } } diff --git a/SimG4Core/Notification/src/TrackWithHistory.cc b/SimG4Core/Notification/src/TrackWithHistory.cc index d1cafdf02a477..cf46fac3f8934 100644 --- a/SimG4Core/Notification/src/TrackWithHistory.cc +++ b/SimG4Core/Notification/src/TrackWithHistory.cc @@ -42,6 +42,7 @@ TrackWithHistory::TrackWithHistory(const G4Track* g4trk) creatorProcess_ = g4trk->GetCreatorProcess(); storeTrack_ = extractor(g4trk).storeTrack(); saved_ = false; + crossedBoundary_ = false; genParticleID_ = extractGenID(g4trk); // V.I. weight is computed in the same way as before // without usage of G4Track::GetWeight() diff --git a/SimG4Core/Notification/test/BuildFile.xml b/SimG4Core/Notification/test/BuildFile.xml index 320879d37aba4..618ffe62d4312 100644 --- a/SimG4Core/Notification/test/BuildFile.xml +++ b/SimG4Core/Notification/test/BuildFile.xml @@ -1,4 +1,3 @@ - diff --git a/SimG4Core/Notification/test/simactivityregistryNew_t.cppunit.cpp b/SimG4Core/Notification/test/simactivityregistryNew_t.cppunit.cpp new file mode 100644 index 0000000000000..d5afc91c703e4 --- /dev/null +++ b/SimG4Core/Notification/test/simactivityregistryNew_t.cppunit.cpp @@ -0,0 +1,159 @@ +/* + * serviceregistry_t.cppunit.cc + * CMSSW + * + * Created by Chris Jones on 9/7/05. + * + */ + +//need to open a 'back door' to be able to setup the SimActivityRegistry +#include "SimG4Core/Notification/interface/SimActivityRegistry.h" +#include "SimG4Core/Notification/interface/SimActivityRegistryEnrollerNew.h" +#include "SimG4Core/Notification/interface/Observer.h" + +#include + +class testSimActivityRegistry : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(testSimActivityRegistry); + + CPPUNIT_TEST(signalTest); + CPPUNIT_TEST(signalForwardingTest); + CPPUNIT_TEST(enrollerTest); + + CPPUNIT_TEST_SUITE_END(); + +public: + void setUp() override {} + void tearDown() override {} + + void signalTest(); + void signalForwardingTest(); + void enrollerTest(); +}; + +///registration of the test so that the runner can find it +CPPUNIT_TEST_SUITE_REGISTRATION(testSimActivityRegistry); + +namespace { + template + struct MyObserver : public Observer { + mutable bool saw_; + MyObserver() : saw_(false) {} + void update(const T*) override { saw_ = true; } + }; +} // namespace + +#define TEST(signal, SIGNAL) \ + MyObserver watch##SIGNAL; \ + registry.connect(&watch##SIGNAL); \ + const SIGNAL* p##SIGNAL = 0; \ + registry.signal##Signal_(p##SIGNAL); \ + CPPUNIT_ASSERT(watch##SIGNAL.saw_); + +void testSimActivityRegistry::signalTest() { + SimActivityRegistry registry; + + for (int i = 0; i < 1000; i++) { + TEST(beginOfRun, BeginOfRun); + TEST(beginOfJob, BeginOfJob); + TEST(beginOfEvent, BeginOfEvent); + TEST(beginOfTrack, BeginOfTrack); + TEST(dddWorld, DDDWorld); + TEST(g4Step, G4Step); + + TEST(endOfRun, EndOfRun); + TEST(endOfEvent, EndOfEvent); + TEST(endOfTrack, EndOfTrack); + } +} + +#define TESTF(signal, SIGNAL) \ + MyObserver watch##SIGNAL; \ + registry2.connect(&watch##SIGNAL); \ + const SIGNAL* p##SIGNAL = 0; \ + registry.signal##Signal_(p##SIGNAL); \ + CPPUNIT_ASSERT(watch##SIGNAL.saw_); + +void testSimActivityRegistry::signalForwardingTest() { + SimActivityRegistry registry; + SimActivityRegistry registry2; + registry.connect(registry2); + + for (int i = 0; i < 1000; i++) { + TESTF(beginOfRun, BeginOfRun); + TESTF(beginOfJob, BeginOfJob); + TESTF(beginOfEvent, BeginOfEvent); + TESTF(beginOfTrack, BeginOfTrack); + TESTF(dddWorld, DDDWorld); + TESTF(g4Step, G4Step); + + TESTF(endOfRun, EndOfRun); + TESTF(endOfEvent, EndOfEvent); + TESTF(endOfTrack, EndOfTrack); + } +} + +namespace { + + template + struct Counting : public Observer { + int& count_; + Counting(int& iCount) : count_(iCount) {} + void update(const T*) override { ++count_; } + }; + struct NoSignal {}; + + struct OneSignal : public Counting { + OneSignal(int& iCount) : Counting(iCount) {} + }; + + struct TwoSignals : public Counting, public Counting { + TwoSignals(int& iCount) : Counting(iCount), Counting(iCount) {} + }; + +} // namespace + +#define TESTREG(signal, SIGNAL) \ + int count##SIGNAL = 0; \ + Counting watch##SIGNAL(count##SIGNAL); \ + enroller.enroll(registry, &watch##SIGNAL); \ + const SIGNAL* p##SIGNAL = 0; \ + registry.signal##Signal_(p##SIGNAL); \ + CPPUNIT_ASSERT(1 == watch##SIGNAL.count_); + +void testSimActivityRegistry::enrollerTest() { + SimActivityRegistry registry; + + NoSignal noSignal; + SimActivityRegistryEnrollerNew enroller; + enroller.enroll(registry, &noSignal); + + int int1Signal = 0; + OneSignal oneSignal(int1Signal); + enroller.enroll(registry, &oneSignal); + + int int2Signals = 0; + TwoSignals twoSignals(int2Signals); + enroller.enroll(registry, &twoSignals); + + const BeginOfEvent* pBegin = nullptr; + registry.beginOfEventSignal_(pBegin); + + const EndOfEvent* pEnd = nullptr; + registry.endOfEventSignal_(pEnd); + + CPPUNIT_ASSERT(1 == int1Signal); + CPPUNIT_ASSERT(2 == int2Signals); + + TESTREG(beginOfRun, BeginOfRun); + TESTREG(beginOfJob, BeginOfJob); + TESTREG(beginOfEvent, BeginOfEvent); + TESTREG(beginOfTrack, BeginOfTrack); + TESTREG(dddWorld, DDDWorld); + TESTREG(g4Step, G4Step); + + TESTREG(endOfRun, EndOfRun); + TESTREG(endOfEvent, EndOfEvent); + TESTREG(endOfTrack, EndOfTrack); +} +#include diff --git a/SimG4Core/Physics/interface/PhysicsListMaker.h b/SimG4Core/Physics/interface/PhysicsListMaker.h index a1876dc17dd18..de3d19251ddfa 100644 --- a/SimG4Core/Physics/interface/PhysicsListMaker.h +++ b/SimG4Core/Physics/interface/PhysicsListMaker.h @@ -40,7 +40,6 @@ class PhysicsListMaker : public PhysicsListMakerBase { return returnValue; } -private: PhysicsListMaker(const PhysicsListMaker&) = delete; const PhysicsListMaker& operator=(const PhysicsListMaker&) = delete; }; diff --git a/SimG4Core/Physics/interface/PhysicsListMakerBase.h b/SimG4Core/Physics/interface/PhysicsListMakerBase.h index 554efeff9baf0..7603b03f1d696 100644 --- a/SimG4Core/Physics/interface/PhysicsListMakerBase.h +++ b/SimG4Core/Physics/interface/PhysicsListMakerBase.h @@ -38,7 +38,6 @@ class PhysicsListMakerBase { virtual std::unique_ptr make(const edm::ParameterSet&, SimActivityRegistry&) const = 0; -private: PhysicsListMakerBase(const PhysicsListMakerBase&) = delete; const PhysicsListMakerBase& operator=(const PhysicsListMakerBase&) = delete; }; diff --git a/SimG4Core/PhysicsLists/interface/CMSHadronPhysicsFTFP_BERT_ATL.h b/SimG4Core/PhysicsLists/interface/CMSHadronPhysicsFTFP_BERT_ATL.h deleted file mode 100644 index 385d50dd89c3b..0000000000000 --- a/SimG4Core/PhysicsLists/interface/CMSHadronPhysicsFTFP_BERT_ATL.h +++ /dev/null @@ -1,77 +0,0 @@ -//--------------------------------------------------------------------------- -// Author: Alberto Ribon -// Date: April 2016 -// -// Hadron physics for the new physics list FTFP_BERT_ATL. -// This is a modified version of the FTFP_BERT hadron physics for ATLAS. -// The hadron physics of FTFP_BERT_ATL has the transition between Bertini -// (BERT) intra-nuclear cascade model and Fritiof (FTF) string model in the -// energy region [9, 12] GeV (instead of [4, 5] GeV as in FTFP_BERT). -//--------------------------------------------------------------------------- -// -#ifndef SimG4Core_PhysicsLists_CMSHadronPhysicsFTFP_BERT_ATL_h -#define SimG4Core_PhysicsLists_CMSHadronPhysicsFTFP_BERT_ATL_h - -#include "globals.hh" -#include "G4ios.hh" - -#include "G4VPhysicsConstructor.hh" - -#include "G4PiKBuilder.hh" -#include "G4BertiniPiKBuilder.hh" -#include "G4FTFPPiKBuilder.hh" - -#include "G4ProtonBuilder.hh" -#include "G4BertiniProtonBuilder.hh" -#include "G4FTFPNeutronBuilder.hh" -#include "G4FTFPProtonBuilder.hh" - -#include "G4NeutronBuilder.hh" -#include "G4BertiniNeutronBuilder.hh" -#include "G4FTFPNeutronBuilder.hh" - -#include "G4HyperonFTFPBuilder.hh" -#include "G4AntiBarionBuilder.hh" -#include "G4FTFPAntiBarionBuilder.hh" - -class G4ComponentGGHadronNucleusXsc; - -class CMSHadronPhysicsFTFP_BERT_ATL : public G4VPhysicsConstructor { -public: - CMSHadronPhysicsFTFP_BERT_ATL(G4int verbose = 1); - ~CMSHadronPhysicsFTFP_BERT_ATL() override; - - void ConstructParticle() override; - void ConstructProcess() override; - -private: - void CreateModels(); - G4bool QuasiElastic; - - // Simplify handling of TLS data, encapsulate everyhing in a structure - struct ThreadPrivate { - G4NeutronBuilder* theNeutrons; - G4BertiniNeutronBuilder* theBertiniNeutron; - G4FTFPNeutronBuilder* theFTFPNeutron; - - G4PiKBuilder* thePiK; - G4BertiniPiKBuilder* theBertiniPiK; - G4FTFPPiKBuilder* theFTFPPiK; - - G4ProtonBuilder* thePro; - G4BertiniProtonBuilder* theBertiniPro; - G4FTFPProtonBuilder* theFTFPPro; - - G4HyperonFTFPBuilder* theHyperon; - - G4AntiBarionBuilder* theAntiBaryon; - G4FTFPAntiBarionBuilder* theFTFPAntiBaryon; - - G4ComponentGGHadronNucleusXsc* xsKaon; - G4VCrossSectionDataSet* xsNeutronInelasticXS; - G4VCrossSectionDataSet* xsNeutronCaptureXS; - }; - static G4ThreadLocal ThreadPrivate* tpdata; -}; - -#endif diff --git a/SimG4Core/PhysicsLists/interface/HadronPhysicsCMS.h b/SimG4Core/PhysicsLists/interface/HadronPhysicsCMS.h deleted file mode 100644 index cea571050d01b..0000000000000 --- a/SimG4Core/PhysicsLists/interface/HadronPhysicsCMS.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef SimG4Core_PhysicsLists_HadronPhysicsCMS_h -#define SimG4Core_PhysicsLists_HadronPhysicsCMS_h 1 - -#include "globals.hh" -#include "G4ios.hh" - -#include "G4VPhysicsConstructor.hh" - -#include "G4PiKBuilder.hh" -#include "G4BertiniPiKBuilder.hh" -#include "G4BinaryPiKBuilder.hh" -#include "G4FTFPPiKBuilder.hh" -#include "G4QGSPPiKBuilder.hh" - -#include "G4ProtonBuilder.hh" -#include "G4BertiniProtonBuilder.hh" -#include "G4BinaryProtonBuilder.hh" -#include "G4FTFPProtonBuilder.hh" -#include "G4QGSPProtonBuilder.hh" - -#include "G4NeutronBuilder.hh" -#include "G4BertiniNeutronBuilder.hh" -#include "G4BinaryNeutronBuilder.hh" -#include "G4FTFPNeutronBuilder.hh" -#include "G4QGSPNeutronBuilder.hh" - -#include "G4FTFBinaryNeutronBuilder.hh" -#include "G4FTFBinaryPiKBuilder.hh" -#include "G4FTFBinaryProtonBuilder.hh" - -class HadronPhysicsCMS : public G4VPhysicsConstructor { -public: - HadronPhysicsCMS(const G4String& name = "QGSP", G4bool quasiElastic = true); - ~HadronPhysicsCMS() override; - - void ConstructParticle() override; - void ConstructProcess() override; - -private: - void CreateModels(); - - G4NeutronBuilder* theNeutrons; - G4BertiniNeutronBuilder* theBertiniNeutron; - G4BinaryNeutronBuilder* theBinaryNeutron; - G4FTFPNeutronBuilder* theFTFPNeutron; - G4QGSPNeutronBuilder* theQGSPNeutron; - - G4PiKBuilder* thePiK; - G4BertiniPiKBuilder* theBertiniPiK; - G4BinaryPiKBuilder* theBinaryPiK; - G4FTFPPiKBuilder* theFTFPPiK; - G4QGSPPiKBuilder* theQGSPPiK; - - G4ProtonBuilder* thePro; - G4BertiniProtonBuilder* theBertiniPro; - G4BinaryProtonBuilder* theBinaryPro; - G4FTFPProtonBuilder* theFTFPPro; - G4QGSPProtonBuilder* theQGSPPro; - - G4FTFBinaryNeutronBuilder* theFTFNeutron; - G4FTFBinaryPiKBuilder* theFTFPiK; - G4FTFBinaryProtonBuilder* theFTFPro; - - G4String modelName; - G4bool QuasiElastic; -}; - -#endif diff --git a/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_ATL_EMM.cc b/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_ATL_EMM.cc deleted file mode 100644 index ead0fa6cc3339..0000000000000 --- a/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_ATL_EMM.cc +++ /dev/null @@ -1,59 +0,0 @@ -#include "FTFPCMS_BERT_ATL_EMM.h" -#include "SimG4Core/PhysicsLists/interface/CMSEmStandardPhysicsLPM.h" -#include "SimG4Core/PhysicsLists/interface/CMSHadronPhysicsFTFP_BERT_ATL.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "G4DecayPhysics.hh" -#include "G4EmExtraPhysics.hh" -#include "G4IonPhysics.hh" -#include "G4StoppingPhysics.hh" -#include "G4HadronElasticPhysics.hh" -#include "G4NeutronTrackingCut.hh" -#include "G4HadronicProcessStore.hh" - -FTFPCMS_BERT_ATL_EMM::FTFPCMS_BERT_ATL_EMM(const edm::ParameterSet& p) : PhysicsList(p) { - int ver = p.getUntrackedParameter("Verbosity", 0); - bool emPhys = p.getUntrackedParameter("EMPhysics", true); - bool hadPhys = p.getUntrackedParameter("HadPhysics", true); - bool tracking = p.getParameter("TrackingCut"); - double timeLimit = p.getParameter("MaxTrackTime") * CLHEP::ns; - edm::LogVerbatim("PhysicsList") << "You are using the simulation engine: " - << "FTFP_BERT_ATL_EMM \n Flags for EM Physics " << emPhys << ", for Hadronic Physics " - << hadPhys << " and tracking cut " << tracking - << " t(ns)= " << timeLimit / CLHEP::ns; - - if (emPhys) { - // EM Physics - RegisterPhysics(new CMSEmStandardPhysicsLPM(ver)); - - // Synchroton Radiation & GN Physics - G4EmExtraPhysics* gn = new G4EmExtraPhysics(ver); - RegisterPhysics(gn); - } - - // Decays - this->RegisterPhysics(new G4DecayPhysics(ver)); - - if (hadPhys) { - G4HadronicProcessStore::Instance()->SetVerbose(ver); - - // Hadron Elastic scattering - RegisterPhysics(new G4HadronElasticPhysics(ver)); - - // Hadron Physics - RegisterPhysics(new CMSHadronPhysicsFTFP_BERT_ATL(ver)); - - // Stopping Physics - RegisterPhysics(new G4StoppingPhysics(ver)); - - // Ion Physics - RegisterPhysics(new G4IonPhysics(ver)); - - // Neutron tracking cut - if (tracking) { - G4NeutronTrackingCut* ncut = new G4NeutronTrackingCut(ver); - ncut->SetTimeLimit(timeLimit); - RegisterPhysics(ncut); - } - } -} diff --git a/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_ATL_EMM.h b/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_ATL_EMM.h deleted file mode 100644 index 0c60a432d5787..0000000000000 --- a/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_ATL_EMM.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef SimG4Core_PhysicsLists_FTFPCMS_BERT_ATL_EMM_H -#define SimG4Core_PhysicsLists_FTFPCMS_BERT_ATL_EMM_H - -#include "SimG4Core/Physics/interface/PhysicsList.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -class FTFPCMS_BERT_ATL_EMM : public PhysicsList { -public: - FTFPCMS_BERT_ATL_EMM(const edm::ParameterSet& p); -}; - -#endif diff --git a/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_EMM.cc b/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_EMM.cc index c8046c24782de..b022c7d8bc7c7 100644 --- a/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_EMM.cc +++ b/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_EMM.cc @@ -23,8 +23,8 @@ FTFPCMS_BERT_EMM::FTFPCMS_BERT_EMM(const edm::ParameterSet& p) : PhysicsList(p) edm::LogVerbatim("PhysicsList") << "You are using the simulation engine: FTFP_BERT_EMM: \n Flags for EM Physics: " << emPhys << "; Hadronic Physics: " << hadPhys << "; tracking cut: " << tracking << "; time limit(ns)= " << timeLimit / CLHEP::ns - << "\n transition energy Bertini/FTFP from " << minFTFP / CLHEP::GeV << " to " - << maxBERT / CLHEP::GeV << ":" << maxBERTpi / CLHEP::GeV << " GeV"; + << "\n Transition energy Bertini/FTFP from " << minFTFP / CLHEP::GeV << " to " + << maxBERT / CLHEP::GeV << "; for pions to " << maxBERTpi / CLHEP::GeV << " GeV"; if (emPhys) { // EM Physics diff --git a/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_EMV.cc b/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_EMV.cc deleted file mode 100644 index e38f21b526d27..0000000000000 --- a/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_EMV.cc +++ /dev/null @@ -1,63 +0,0 @@ -#include "FTFPCMS_BERT_EMV.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "SimG4Core/PhysicsLists/interface/CMSHadronPhysicsFTFP_BERT.h" - -#include "G4EmStandardPhysics_option1.hh" -#include "G4DecayPhysics.hh" -#include "G4EmExtraPhysics.hh" -#include "G4IonPhysics.hh" -#include "G4StoppingPhysics.hh" -#include "G4HadronElasticPhysics.hh" -#include "G4NeutronTrackingCut.hh" -#include "G4HadronicProcessStore.hh" - -FTFPCMS_BERT_EMV::FTFPCMS_BERT_EMV(const edm::ParameterSet& p) : PhysicsList(p) { - int ver = p.getUntrackedParameter("Verbosity", 0); - bool emPhys = p.getUntrackedParameter("EMPhysics", true); - bool hadPhys = p.getUntrackedParameter("HadPhysics", true); - bool tracking = p.getParameter("TrackingCut"); - double timeLimit = p.getParameter("MaxTrackTime") * CLHEP::ns; - double minFTFP = p.getParameter("EminFTFP") * CLHEP::GeV; - double maxBERT = p.getParameter("EmaxBERT") * CLHEP::GeV; - double maxBERTpi = p.getParameter("EmaxBERTpi") * CLHEP::GeV; - edm::LogVerbatim("PhysicsList") << "You are using the simulation engine: FTFP_BERT_EMV \n Flags for EM Physics " - << emPhys << ", for Hadronic Physics " << hadPhys << " and tracking cut " << tracking - << "; time limit(ns)= " << timeLimit / CLHEP::ns - << "\n transition energy Bertini/FTFP from " << minFTFP / CLHEP::GeV << " to " - << maxBERT / CLHEP::GeV << ":" << maxBERTpi / CLHEP::GeV << " GeV"; - - if (emPhys) { - // EM Physics - RegisterPhysics(new G4EmStandardPhysics_option1(ver)); - - // Synchroton Radiation & GN Physics - G4EmExtraPhysics* gn = new G4EmExtraPhysics(ver); - RegisterPhysics(gn); - } - - // Decays - this->RegisterPhysics(new G4DecayPhysics(ver)); - - if (hadPhys) { - G4HadronicProcessStore::Instance()->SetVerbose(ver); - - // Hadron Elastic scattering - RegisterPhysics(new G4HadronElasticPhysics(ver)); - - // Hadron Physics - RegisterPhysics(new CMSHadronPhysicsFTFP_BERT(minFTFP, maxBERT, maxBERTpi)); - - // Stopping Physics - RegisterPhysics(new G4StoppingPhysics(ver)); - - // Ion Physics - RegisterPhysics(new G4IonPhysics(ver)); - - // Neutron tracking cut - if (tracking) { - G4NeutronTrackingCut* ncut = new G4NeutronTrackingCut(ver); - ncut->SetTimeLimit(timeLimit); - RegisterPhysics(ncut); - } - } -} diff --git a/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_EMV.h b/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_EMV.h deleted file mode 100644 index 6fbc2b0acf909..0000000000000 --- a/SimG4Core/PhysicsLists/plugins/FTFPCMS_BERT_EMV.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef SimG4Core_PhysicsLists_FTFPCMS_BERT_EMV_H -#define SimG4Core_PhysicsLists_FTFPCMS_BERT_EMV_H - -#include "SimG4Core/Physics/interface/PhysicsList.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -class FTFPCMS_BERT_EMV : public PhysicsList { -public: - FTFPCMS_BERT_EMV(const edm::ParameterSet& p); -}; - -#endif diff --git a/SimG4Core/PhysicsLists/plugins/QGSPCMS_BERT.cc b/SimG4Core/PhysicsLists/plugins/QGSPCMS_BERT.cc deleted file mode 100644 index 1085d54d85adc..0000000000000 --- a/SimG4Core/PhysicsLists/plugins/QGSPCMS_BERT.cc +++ /dev/null @@ -1,56 +0,0 @@ -#include "QGSPCMS_BERT.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "G4EmStandardPhysics.hh" -#include "G4DecayPhysics.hh" -#include "G4EmExtraPhysics.hh" -#include "G4IonPhysics.hh" -#include "G4StoppingPhysics.hh" -#include "G4HadronElasticPhysics.hh" -#include "G4NeutronTrackingCut.hh" -#include "G4HadronicProcessStore.hh" - -#include "G4HadronPhysicsQGSP_BERT.hh" - -QGSPCMS_BERT::QGSPCMS_BERT(const edm::ParameterSet& p) : PhysicsList(p) { - int ver = p.getUntrackedParameter("Verbosity", 0); - bool emPhys = p.getUntrackedParameter("EMPhysics", true); - bool hadPhys = p.getUntrackedParameter("HadPhysics", true); - bool tracking = p.getParameter("TrackingCut"); - edm::LogInfo("PhysicsList") << "You are using the simulation engine: " - << "QGSP_BERT \n Flags for EM Physics " << emPhys << ", for Hadronic Physics " << hadPhys - << " and tracking cut " << tracking; - - if (emPhys) { - // EM Physics - RegisterPhysics(new G4EmStandardPhysics(ver)); - - // Synchroton Radiation & GN Physics - G4EmExtraPhysics* gn = new G4EmExtraPhysics(ver); - RegisterPhysics(gn); - } - - // Decays - this->RegisterPhysics(new G4DecayPhysics(ver)); - - if (hadPhys) { - G4HadronicProcessStore::Instance()->SetVerbose(ver); - - // Hadron Elastic scattering - RegisterPhysics(new G4HadronElasticPhysics(ver)); - - // Hadron Physics - RegisterPhysics(new G4HadronPhysicsQGSP_BERT(ver)); - - // Stopping Physics - RegisterPhysics(new G4StoppingPhysics(ver)); - - // Ion Physics - RegisterPhysics(new G4IonPhysics(ver)); - - // Neutron tracking cut - if (tracking) { - RegisterPhysics(new G4NeutronTrackingCut(ver)); - } - } -} diff --git a/SimG4Core/PhysicsLists/plugins/QGSPCMS_BERT.h b/SimG4Core/PhysicsLists/plugins/QGSPCMS_BERT.h deleted file mode 100644 index 00ce1ab9c4904..0000000000000 --- a/SimG4Core/PhysicsLists/plugins/QGSPCMS_BERT.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef SimG4Core_PhysicsLists_QGSPCMS_BERT_H -#define SimG4Core_PhysicsLists_QGSPCMS_BERT_H - -#include "SimG4Core/Physics/interface/PhysicsList.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -class QGSPCMS_BERT : public PhysicsList { -public: - QGSPCMS_BERT(const edm::ParameterSet& p); -}; - -#endif diff --git a/SimG4Core/PhysicsLists/plugins/QGSPCMS_BERT_EMV.cc b/SimG4Core/PhysicsLists/plugins/QGSPCMS_BERT_EMV.cc deleted file mode 100644 index af169a06ef389..0000000000000 --- a/SimG4Core/PhysicsLists/plugins/QGSPCMS_BERT_EMV.cc +++ /dev/null @@ -1,56 +0,0 @@ -#include "QGSPCMS_BERT_EMV.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "G4EmStandardPhysics_option1.hh" -#include "G4DecayPhysics.hh" -#include "G4EmExtraPhysics.hh" -#include "G4IonPhysics.hh" -#include "G4StoppingPhysics.hh" -#include "G4HadronElasticPhysics.hh" -#include "G4NeutronTrackingCut.hh" -#include "G4HadronicProcessStore.hh" - -#include "G4HadronPhysicsQGSP_BERT.hh" - -QGSPCMS_BERT_EMV::QGSPCMS_BERT_EMV(const edm::ParameterSet& p) : PhysicsList(p) { - int ver = p.getUntrackedParameter("Verbosity", 0); - bool emPhys = p.getUntrackedParameter("EMPhysics", true); - bool hadPhys = p.getUntrackedParameter("HadPhysics", true); - bool tracking = p.getParameter("TrackingCut"); - edm::LogInfo("PhysicsList") << "You are using the simulation engine: " - << "QGSP_BERT_EMV \n Flags for EM Physics " << emPhys << ", for Hadronic Physics " - << hadPhys << " and tracking cut " << tracking; - - if (emPhys) { - // EM Physics - RegisterPhysics(new G4EmStandardPhysics_option1(ver)); - - // Synchroton Radiation & GN Physics - G4EmExtraPhysics* gn = new G4EmExtraPhysics(ver); - RegisterPhysics(gn); - } - - // Decays - this->RegisterPhysics(new G4DecayPhysics(ver)); - - if (hadPhys) { - G4HadronicProcessStore::Instance()->SetVerbose(ver); - - // Hadron Elastic scattering - RegisterPhysics(new G4HadronElasticPhysics(ver)); - - // Hadron Physics - RegisterPhysics(new G4HadronPhysicsQGSP_BERT(ver)); - - // Stopping Physics - RegisterPhysics(new G4StoppingPhysics(ver)); - - // Ion Physics - RegisterPhysics(new G4IonPhysics(ver)); - - // Neutron tracking cut - if (tracking) { - RegisterPhysics(new G4NeutronTrackingCut(ver)); - } - } -} diff --git a/SimG4Core/PhysicsLists/plugins/QGSPCMS_BERT_EMV.h b/SimG4Core/PhysicsLists/plugins/QGSPCMS_BERT_EMV.h deleted file mode 100644 index 6576573f536ef..0000000000000 --- a/SimG4Core/PhysicsLists/plugins/QGSPCMS_BERT_EMV.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef SimG4Core_PhysicsLists_QGSPCMS_BERT_EMV_H -#define SimG4Core_PhysicsLists_QGSPCMS_BERT_EMV_H - -#include "SimG4Core/Physics/interface/PhysicsList.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -class QGSPCMS_BERT_EMV : public PhysicsList { -public: - QGSPCMS_BERT_EMV(const edm::ParameterSet& p); -}; - -#endif diff --git a/SimG4Core/PhysicsLists/plugins/QGSPCMS_FTFP_BERT_EMV.cc b/SimG4Core/PhysicsLists/plugins/QGSPCMS_FTFP_BERT_EMV.cc deleted file mode 100644 index 8a2920d14d51b..0000000000000 --- a/SimG4Core/PhysicsLists/plugins/QGSPCMS_FTFP_BERT_EMV.cc +++ /dev/null @@ -1,69 +0,0 @@ -#include "QGSPCMS_FTFP_BERT_EMV.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "SimG4Core/PhysicsLists/interface/HadronPhysicsQGSPCMS_FTFP_BERT.h" - -#include "G4EmStandardPhysics_option1.hh" -#include "G4DecayPhysics.hh" -#include "G4EmExtraPhysics.hh" -#include "G4IonPhysics.hh" -#include "G4StoppingPhysics.hh" -#include "G4HadronElasticPhysics.hh" -#include "G4NeutronTrackingCut.hh" -#include "G4HadronicProcessStore.hh" - -#include "G4HadronPhysicsQGSP_FTFP_BERT.hh" - -QGSPCMS_FTFP_BERT_EMV::QGSPCMS_FTFP_BERT_EMV(const edm::ParameterSet& p) : PhysicsList(p) { - int ver = p.getUntrackedParameter("Verbosity", 0); - bool emPhys = p.getUntrackedParameter("EMPhysics", true); - bool hadPhys = p.getUntrackedParameter("HadPhysics", true); - bool tracking = p.getParameter("TrackingCut"); - double timeLimit = p.getParameter("MaxTrackTime") * CLHEP::ns; - double minFTFP = p.getParameter("EminFTFP") * CLHEP::GeV; - double maxBERT = p.getParameter("EmaxBERT") * CLHEP::GeV; - double minQGSP = p.getParameter("EminQGSP") * CLHEP::GeV; - double maxFTFP = p.getParameter("EmaxFTFP") * CLHEP::GeV; - double maxBERTpi = p.getParameter("EmaxBERTpi") * CLHEP::GeV; - edm::LogVerbatim("PhysicsList") << "You are using the simulation engine: QGSP_FTFP_BERT_EMV \n Flags for EM Physics " - << emPhys << ", for Hadronic Physics " << hadPhys << " and tracking cut " << tracking - << " t(ns)= " << timeLimit / CLHEP::ns << "\n transition energy Bertini/FTFP from " - << minFTFP / CLHEP::GeV << " to " << maxBERTpi / CLHEP::GeV << ":" - << maxBERT / CLHEP::GeV << " GeV" - << "\n transition energy FTFP/QGSP from " << minQGSP / CLHEP::GeV << " to " - << maxFTFP / CLHEP::GeV << " GeV"; - - if (emPhys) { - // EM Physics - RegisterPhysics(new G4EmStandardPhysics_option1(ver)); - - // Synchroton Radiation & GN Physics - G4EmExtraPhysics* gn = new G4EmExtraPhysics(ver); - RegisterPhysics(gn); - } - - // Decays - this->RegisterPhysics(new G4DecayPhysics(ver)); - - if (hadPhys) { - G4HadronicProcessStore::Instance()->SetVerbose(ver); - - // Hadron Elastic scattering - RegisterPhysics(new G4HadronElasticPhysics(ver)); - - // Hadron Physics - RegisterPhysics(new HadronPhysicsQGSPCMS_FTFP_BERT(minFTFP, maxBERT, minQGSP, maxFTFP, maxBERTpi)); - - // Stopping Physics - RegisterPhysics(new G4StoppingPhysics(ver)); - - // Ion Physics - RegisterPhysics(new G4IonPhysics(ver)); - - // Neutron tracking cut - if (tracking) { - G4NeutronTrackingCut* ncut = new G4NeutronTrackingCut(ver); - ncut->SetTimeLimit(timeLimit); - RegisterPhysics(ncut); - } - } -} diff --git a/SimG4Core/PhysicsLists/plugins/QGSPCMS_FTFP_BERT_EMV.h b/SimG4Core/PhysicsLists/plugins/QGSPCMS_FTFP_BERT_EMV.h deleted file mode 100644 index 535720c9592a0..0000000000000 --- a/SimG4Core/PhysicsLists/plugins/QGSPCMS_FTFP_BERT_EMV.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef SimG4Core_PhysicsLists_QGSPCMS_FTFP_BERT_EMV_H -#define SimG4Core_PhysicsLists_QGSPCMS_FTFP_BERT_EMV_H - -#include "SimG4Core/Physics/interface/PhysicsList.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -class QGSPCMS_FTFP_BERT_EMV : public PhysicsList { -public: - QGSPCMS_FTFP_BERT_EMV(const edm::ParameterSet& p); -}; - -#endif diff --git a/SimG4Core/PhysicsLists/plugins/module.cc b/SimG4Core/PhysicsLists/plugins/module.cc index 063e4151a3e1b..f6eb1a618dd24 100644 --- a/SimG4Core/PhysicsLists/plugins/module.cc +++ b/SimG4Core/PhysicsLists/plugins/module.cc @@ -3,7 +3,6 @@ #include "DummyPhysics.h" #include "FTFCMS_BIC.h" #include "FTFPCMS_BERT.h" -#include "FTFPCMS_BERT_ATL_EMM.h" #include "FTFPCMS_BERT_EML.h" #include "FTFPCMS_BERT_EMM.h" #include "FTFPCMS_BERT_EMN.h" @@ -11,21 +10,17 @@ #include "FTFPCMS_BERT_HP_EMM.h" #include "FTFPCMS_BERT_HP_EML.h" #include "FTFPCMS_BERT_XS_EML.h" -#include "FTFPCMS_BERT_EMV.h" #include "FTFPCMS_BERT_EMY.h" #include "FTFPCMS_BERT_EMZ.h" #include "FTFPCMS_INCLXX_EMM.h" #include "FTFPCMS_INCLXX_HP_EMM.h" #include "QBBCCMS.h" -#include "QGSPCMS_BERT.h" #include "QGSPCMS_BERT_EML.h" -#include "QGSPCMS_BERT_EMV.h" #include "QGSPCMS_BERT_HP_EML.h" #include "QGSPCMS_FTFP_BERT.h" #include "QGSPCMS_FTFP_BERT_EML.h" #include "QGSPCMS_FTFP_BERT_EMM.h" #include "QGSPCMS_FTFP_BERT_EMN.h" -#include "QGSPCMS_FTFP_BERT_EMV.h" #include "QGSPCMS_FTFP_BERT_EMY.h" #include "QGSPCMS_FTFP_BERT_EMZ.h" @@ -34,8 +29,6 @@ typedef FTFCMS_BIC FTF_BIC; DEFINE_PHYSICSLIST(FTF_BIC); typedef FTFPCMS_BERT FTFP_BERT; DEFINE_PHYSICSLIST(FTFP_BERT); -typedef FTFPCMS_BERT_ATL_EMM FTFP_BERT_ATL_EMM; -DEFINE_PHYSICSLIST(FTFP_BERT_ATL_EMM); typedef FTFPCMS_BERT_EML FTFP_BERT_EML; DEFINE_PHYSICSLIST(FTFP_BERT_EML); typedef FTFPCMS_BERT_EMM FTFP_BERT_EMM; @@ -50,8 +43,6 @@ typedef FTFPCMS_BERT_HP_EML FTFP_BERT_HP_EML; DEFINE_PHYSICSLIST(FTFP_BERT_HP_EML); typedef FTFPCMS_BERT_XS_EML FTFP_BERT_XS_EML; DEFINE_PHYSICSLIST(FTFP_BERT_XS_EML); -typedef FTFPCMS_BERT_EMV FTFP_BERT_EMV; -DEFINE_PHYSICSLIST(FTFP_BERT_EMV); typedef FTFPCMS_BERT_EMY FTFP_BERT_EMY; DEFINE_PHYSICSLIST(FTFP_BERT_EMY); typedef FTFPCMS_BERT_EMZ FTFP_BERT_EMZ; @@ -62,12 +53,8 @@ typedef FTFPCMS_INCLXX_HP_EMM FTFP_INCLXX_HP_EMM; DEFINE_PHYSICSLIST(FTFP_INCLXX_HP_EMM); typedef QBBCCMS QBBC; DEFINE_PHYSICSLIST(QBBC); -typedef QGSPCMS_BERT QGSP_BERT; -DEFINE_PHYSICSLIST(QGSP_BERT); typedef QGSPCMS_BERT_EML QGSP_BERT_EML; DEFINE_PHYSICSLIST(QGSP_BERT_EML); -typedef QGSPCMS_BERT_EMV QGSP_BERT_EMV; -DEFINE_PHYSICSLIST(QGSP_BERT_EMV); typedef QGSPCMS_BERT_HP_EML QGSP_BERT_HP_EML; DEFINE_PHYSICSLIST(QGSP_BERT_HP_EML); typedef QGSPCMS_FTFP_BERT QGSP_FTFP_BERT; @@ -78,8 +65,6 @@ typedef QGSPCMS_FTFP_BERT_EMM QGSP_FTFP_BERT_EMM; DEFINE_PHYSICSLIST(QGSP_FTFP_BERT_EMM); typedef QGSPCMS_FTFP_BERT_EMN QGSP_FTFP_BERT_EMN; DEFINE_PHYSICSLIST(QGSP_FTFP_BERT_EMN); -typedef QGSPCMS_FTFP_BERT_EMV QGSP_FTFP_BERT_EMV; -DEFINE_PHYSICSLIST(QGSP_FTFP_BERT_EMV); typedef QGSPCMS_FTFP_BERT_EMY QGSP_FTFP_BERT_EMY; DEFINE_PHYSICSLIST(QGSP_FTFP_BERT_EMY); typedef QGSPCMS_FTFP_BERT_EMZ QGSP_FTFP_BERT_EMZ; diff --git a/SimG4Core/PhysicsLists/src/CMSHadronPhysicsFTFP_BERT_ATL.cc b/SimG4Core/PhysicsLists/src/CMSHadronPhysicsFTFP_BERT_ATL.cc deleted file mode 100644 index 1e22ff67227b6..0000000000000 --- a/SimG4Core/PhysicsLists/src/CMSHadronPhysicsFTFP_BERT_ATL.cc +++ /dev/null @@ -1,150 +0,0 @@ -//--------------------------------------------------------------------------- -// Author: Alberto Ribon -// Date: April 2016 -// -// Hadron physics for the new physics list FTFP_BERT_ATL. -// This is a modified version of the FTFP_BERT hadron physics for ATLAS. -// The hadron physics of FTFP_BERT_ATL has the transition between Bertini -// (BERT) intra-nuclear cascade model and Fritiof (FTF) string model in the -// energy region [9, 12] GeV (instead of [4, 5] GeV as in FTFP_BERT). -//--------------------------------------------------------------------------- -// -#include - -#include "SimG4Core/PhysicsLists/interface/CMSHadronPhysicsFTFP_BERT_ATL.h" - -#include "globals.hh" -#include "G4ios.hh" -#include "G4SystemOfUnits.hh" -#include "G4ParticleDefinition.hh" -#include "G4ParticleTable.hh" - -#include "G4MesonConstructor.hh" -#include "G4BaryonConstructor.hh" -#include "G4ShortLivedConstructor.hh" - -#include "G4ComponentGGHadronNucleusXsc.hh" -#include "G4CrossSectionInelastic.hh" -#include "G4HadronCaptureProcess.hh" -#include "G4NeutronRadCapture.hh" -#include "G4NeutronInelasticXS.hh" -#include "G4NeutronCaptureXS.hh" - -#include "G4CrossSectionDataSetRegistry.hh" - -#include "G4PhysListUtil.hh" - -G4ThreadLocal CMSHadronPhysicsFTFP_BERT_ATL::ThreadPrivate* CMSHadronPhysicsFTFP_BERT_ATL::tpdata = nullptr; - -CMSHadronPhysicsFTFP_BERT_ATL::CMSHadronPhysicsFTFP_BERT_ATL(G4int) - : G4VPhysicsConstructor("hInelastic FTFP_BERT_ATL"), QuasiElastic(false) {} - -void CMSHadronPhysicsFTFP_BERT_ATL::CreateModels() { - G4double minFTFP = 9.0 * GeV; - G4double maxBERT = 12.0 * GeV; - G4cout << " CMS_FTFP_BERT_ATL : new threshold between BERT and FTFP" - << " is over the interval " << minFTFP / GeV << " to " << maxBERT / GeV << " GeV." << G4endl; - QuasiElastic = false; - - tpdata->theNeutrons = new G4NeutronBuilder; - tpdata->theNeutrons->RegisterMe(tpdata->theFTFPNeutron = new G4FTFPNeutronBuilder(QuasiElastic)); - tpdata->theFTFPNeutron->SetMinEnergy(minFTFP); - tpdata->theNeutrons->RegisterMe(tpdata->theBertiniNeutron = new G4BertiniNeutronBuilder); - tpdata->theBertiniNeutron->SetMinEnergy(0.0 * GeV); - tpdata->theBertiniNeutron->SetMaxEnergy(maxBERT); - - tpdata->thePro = new G4ProtonBuilder; - tpdata->thePro->RegisterMe(tpdata->theFTFPPro = new G4FTFPProtonBuilder(QuasiElastic)); - tpdata->theFTFPPro->SetMinEnergy(minFTFP); - tpdata->thePro->RegisterMe(tpdata->theBertiniPro = new G4BertiniProtonBuilder); - tpdata->theBertiniPro->SetMaxEnergy(maxBERT); - - tpdata->thePiK = new G4PiKBuilder; - tpdata->thePiK->RegisterMe(tpdata->theFTFPPiK = new G4FTFPPiKBuilder(QuasiElastic)); - tpdata->theFTFPPiK->SetMinEnergy(minFTFP); - tpdata->thePiK->RegisterMe(tpdata->theBertiniPiK = new G4BertiniPiKBuilder); - tpdata->theBertiniPiK->SetMaxEnergy(maxBERT); - - tpdata->theHyperon = new G4HyperonFTFPBuilder; - - tpdata->theAntiBaryon = new G4AntiBarionBuilder; - tpdata->theAntiBaryon->RegisterMe(tpdata->theFTFPAntiBaryon = new G4FTFPAntiBarionBuilder(QuasiElastic)); -} - -CMSHadronPhysicsFTFP_BERT_ATL::~CMSHadronPhysicsFTFP_BERT_ATL() { - if (!tpdata) - return; - - delete tpdata->theNeutrons; - delete tpdata->theBertiniNeutron; - delete tpdata->theFTFPNeutron; - - delete tpdata->thePiK; - delete tpdata->theBertiniPiK; - delete tpdata->theFTFPPiK; - - delete tpdata->thePro; - delete tpdata->theBertiniPro; - delete tpdata->theFTFPPro; - - delete tpdata->theHyperon; - delete tpdata->theAntiBaryon; - delete tpdata->theFTFPAntiBaryon; - - //Note that here we need to set to 0 the pointer - //since tpdata is static and if thread are "reused" - //it can be problematic - delete tpdata; - tpdata = nullptr; -} - -void CMSHadronPhysicsFTFP_BERT_ATL::ConstructParticle() { - G4MesonConstructor pMesonConstructor; - pMesonConstructor.ConstructParticle(); - - G4BaryonConstructor pBaryonConstructor; - pBaryonConstructor.ConstructParticle(); - - G4ShortLivedConstructor pShortLivedConstructor; - pShortLivedConstructor.ConstructParticle(); -} - -#include "G4ProcessManager.hh" -void CMSHadronPhysicsFTFP_BERT_ATL::ConstructProcess() { - if (tpdata == nullptr) - tpdata = new ThreadPrivate; - CreateModels(); - tpdata->theNeutrons->Build(); - tpdata->thePro->Build(); - tpdata->thePiK->Build(); - - // --- Kaons --- - tpdata->xsKaon = new G4ComponentGGHadronNucleusXsc(); - G4VCrossSectionDataSet* kaonxs = new G4CrossSectionInelastic(tpdata->xsKaon); - G4PhysListUtil::FindInelasticProcess(G4KaonMinus::KaonMinus())->AddDataSet(kaonxs); - G4PhysListUtil::FindInelasticProcess(G4KaonPlus::KaonPlus())->AddDataSet(kaonxs); - G4PhysListUtil::FindInelasticProcess(G4KaonZeroShort::KaonZeroShort())->AddDataSet(kaonxs); - G4PhysListUtil::FindInelasticProcess(G4KaonZeroLong::KaonZeroLong())->AddDataSet(kaonxs); - - tpdata->theHyperon->Build(); - tpdata->theAntiBaryon->Build(); - - // --- Neutrons --- - tpdata->xsNeutronInelasticXS = new G4NeutronInelasticXS(); - - G4HadronicProcess* capture = nullptr; - G4ProcessManager* pmanager = G4Neutron::Neutron()->GetProcessManager(); - G4ProcessVector* pv = pmanager->GetProcessList(); - for (size_t i = 0; i < static_cast(pv->size()); ++i) { - if (fCapture == ((*pv)[i])->GetProcessSubType()) { - capture = static_cast((*pv)[i]); - } - } - if (!capture) { - capture = new G4HadronCaptureProcess("nCapture"); - pmanager->AddDiscreteProcess(capture); - } - tpdata->xsNeutronCaptureXS = new G4NeutronCaptureXS(); - capture->AddDataSet(tpdata->xsNeutronCaptureXS); - capture->RegisterMe(new G4NeutronRadCapture()); -} diff --git a/SimG4Core/PhysicsLists/src/HadronPhysicsCMS.cc b/SimG4Core/PhysicsLists/src/HadronPhysicsCMS.cc deleted file mode 100644 index 56f71b72b1cee..0000000000000 --- a/SimG4Core/PhysicsLists/src/HadronPhysicsCMS.cc +++ /dev/null @@ -1,146 +0,0 @@ -#include "SimG4Core/PhysicsLists/interface/HadronPhysicsCMS.h" - -#include "globals.hh" -#include "G4ios.hh" -#include -#include "G4ParticleDefinition.hh" -#include "G4ParticleTable.hh" - -#include "G4MesonConstructor.hh" -#include "G4BaryonConstructor.hh" -#include "G4ShortLivedConstructor.hh" -#include "G4SystemOfUnits.hh" - -HadronPhysicsCMS::HadronPhysicsCMS(const G4String& name, G4bool quasiElastic) - : G4VPhysicsConstructor("hadron"), - theNeutrons(nullptr), - theBertiniNeutron(nullptr), - theBinaryNeutron(nullptr), - theFTFPNeutron(nullptr), - theQGSPNeutron(nullptr), - thePiK(nullptr), - theBertiniPiK(nullptr), - theBinaryPiK(nullptr), - theFTFPPiK(nullptr), - theQGSPPiK(nullptr), - thePro(nullptr), - theBertiniPro(nullptr), - theBinaryPro(nullptr), - theFTFPPro(nullptr), - theQGSPPro(nullptr), - theFTFNeutron(nullptr), - theFTFPiK(nullptr), - theFTFPro(nullptr), - modelName(name), - QuasiElastic(quasiElastic) {} - -void HadronPhysicsCMS::CreateModels() { - theNeutrons = new G4NeutronBuilder; - thePro = new G4ProtonBuilder; - thePiK = new G4PiKBuilder; - - if (modelName == "Bertini") { - theBertiniNeutron = new G4BertiniNeutronBuilder(); - theBertiniNeutron->SetMaxEnergy(30.0 * GeV); - theNeutrons->RegisterMe(theBertiniNeutron); - theBertiniPro = new G4BertiniProtonBuilder(); - theBertiniPro->SetMaxEnergy(30.0 * GeV); - thePro->RegisterMe(theBertiniPro); - theBertiniPiK = new G4BertiniPiKBuilder(); - theBertiniPiK->SetMaxEnergy(30.0 * GeV); - thePiK->RegisterMe(theBertiniPiK); - } else if (modelName == "Binary") { - theBinaryNeutron = new G4BinaryNeutronBuilder(); - theBinaryNeutron->SetMaxEnergy(30.0 * GeV); - theNeutrons->RegisterMe(theBinaryNeutron); - theBinaryPro = new G4BinaryProtonBuilder(); - theBinaryPro->SetMaxEnergy(30.0 * GeV); - thePro->RegisterMe(theBinaryPro); - theBinaryPiK = new G4BinaryPiKBuilder(); - theBinaryPiK->SetMaxEnergy(30.0 * GeV); - thePiK->RegisterMe(theBinaryPiK); - } else if (modelName == "FTFP") { - theFTFPNeutron = new G4FTFPNeutronBuilder(); - theFTFPNeutron->SetMinEnergy(0.1 * GeV); - theNeutrons->RegisterMe(theFTFPNeutron); - theFTFPPro = new G4FTFPProtonBuilder(); - theFTFPPro->SetMinEnergy(0.1 * GeV); - thePro->RegisterMe(theFTFPPro); - theFTFPPiK = new G4FTFPPiKBuilder(); - theFTFPPiK->SetMinEnergy(0.1 * GeV); - thePiK->RegisterMe(theFTFPPiK); - } else if (modelName == "FTF") { - theFTFNeutron = new G4FTFBinaryNeutronBuilder(); - theNeutrons->RegisterMe(theFTFNeutron); - theFTFPro = new G4FTFBinaryProtonBuilder(); - thePro->RegisterMe(theFTFPro); - theFTFPiK = new G4FTFBinaryPiKBuilder(); - thePiK->RegisterMe(theFTFPiK); - } else { - theQGSPNeutron = new G4QGSPNeutronBuilder(QuasiElastic); - theQGSPNeutron->SetMinEnergy(0.1 * GeV); - theNeutrons->RegisterMe(theQGSPNeutron); - theQGSPPro = new G4QGSPProtonBuilder(QuasiElastic); - theQGSPPro->SetMinEnergy(0.1 * GeV); - thePro->RegisterMe(theQGSPPro); - theQGSPPiK = new G4QGSPPiKBuilder(QuasiElastic); - theQGSPPiK->SetMinEnergy(0.1 * GeV); - thePiK->RegisterMe(theQGSPPiK); - } -} - -HadronPhysicsCMS::~HadronPhysicsCMS() { - if (theBertiniNeutron) - delete theBertiniNeutron; - if (theBinaryNeutron) - delete theBinaryNeutron; - if (theFTFPNeutron) - delete theFTFPNeutron; - if (theQGSPNeutron) - delete theQGSPNeutron; - if (theFTFNeutron) - delete theFTFNeutron; - delete theNeutrons; - if (theBertiniPro) - delete theBertiniPro; - if (theBinaryPro) - delete theBinaryPro; - if (theFTFPPro) - delete theFTFPPro; - if (theQGSPPro) - delete theQGSPPro; - if (theFTFPro) - delete theFTFPro; - delete thePro; - if (theBertiniPiK) - delete theBertiniPiK; - if (theBinaryPiK) - delete theBinaryPiK; - if (theFTFPPiK) - delete theFTFPPiK; - if (theQGSPPiK) - delete theQGSPPiK; - if (theFTFPiK) - delete theFTFPiK; - delete thePiK; -} - -void HadronPhysicsCMS::ConstructParticle() { - G4MesonConstructor pMesonConstructor; - pMesonConstructor.ConstructParticle(); - - G4BaryonConstructor pBaryonConstructor; - pBaryonConstructor.ConstructParticle(); - - G4ShortLivedConstructor pShortLivedConstructor; - pShortLivedConstructor.ConstructParticle(); -} - -#include "G4ProcessManager.hh" -void HadronPhysicsCMS::ConstructProcess() { - CreateModels(); - theNeutrons->Build(); - thePro->Build(); - thePiK->Build(); - // theMiscLHEP->Build(); -} diff --git a/SimG4Core/PhysicsLists/test/minbias_cfg.py b/SimG4Core/PhysicsLists/test/minbias_cfg.py index 28ecaf16fa94b..dafc2ef7faf15 100644 --- a/SimG4Core/PhysicsLists/test/minbias_cfg.py +++ b/SimG4Core/PhysicsLists/test/minbias_cfg.py @@ -23,7 +23,7 @@ process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('PhysicsList') + process.MessageLogger.PhysicsList=dict() process.source = cms.Source("EmptySource") diff --git a/SimG4Core/PrintGeomInfo/BuildFile.xml b/SimG4Core/PrintGeomInfo/BuildFile.xml index 1cfa91274a996..653a8b3bee5f9 100644 --- a/SimG4Core/PrintGeomInfo/BuildFile.xml +++ b/SimG4Core/PrintGeomInfo/BuildFile.xml @@ -6,4 +6,5 @@ + diff --git a/SimG4Core/PrintGeomInfo/interface/PrintGeomInfoAction.h b/SimG4Core/PrintGeomInfo/interface/PrintGeomInfoAction.h index 0ced33ed1b722..769c384d34321 100644 --- a/SimG4Core/PrintGeomInfo/interface/PrintGeomInfoAction.h +++ b/SimG4Core/PrintGeomInfo/interface/PrintGeomInfoAction.h @@ -39,9 +39,11 @@ class PrintGeomInfoAction : public SimWatcher, public Observer& touches); std::string spacesFromLeafDepth(unsigned int leafDepth); - void dumpSolid(G4VSolid* sol, unsigned int leafDepth, std::ostream& out = std::cout); G4VPhysicalVolume* getTopPV(); G4LogicalVolume* getTopLV(); @@ -52,6 +54,7 @@ class PrintGeomInfoAction : public SimWatcher, public Observer names_; G4VPhysicalVolume* theTopPV_; G4NavigationHistory fHistory_; diff --git a/SimG4Core/PrintGeomInfo/python/customiseg4PrintGeomInfo.py b/SimG4Core/PrintGeomInfo/python/customiseg4PrintGeomInfo.py index e1e8e039a5530..87ed9269d4b22 100644 --- a/SimG4Core/PrintGeomInfo/python/customiseg4PrintGeomInfo.py +++ b/SimG4Core/PrintGeomInfo/python/customiseg4PrintGeomInfo.py @@ -26,8 +26,8 @@ def customise(process): )) if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') + process.MessageLogger.G4cerr = cms.untracked.PSet() + process.MessageLogger.G4cout = cms.untracked.PSet() return(process) diff --git a/SimG4Core/PrintGeomInfo/src/PrintGeomInfoAction.cc b/SimG4Core/PrintGeomInfo/src/PrintGeomInfoAction.cc index a27c25198550e..cd93c2609d491 100644 --- a/SimG4Core/PrintGeomInfo/src/PrintGeomInfoAction.cc +++ b/SimG4Core/PrintGeomInfo/src/PrintGeomInfoAction.cc @@ -5,6 +5,7 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/ESTransientHandle.h" +#include "DataFormats/Math/interface/angle_units.h" #include "Geometry/Records/interface/IdealGeometryRecord.h" #include "DetectorDescription/Core/interface/DDCompactView.h" #include "DetectorDescription/Core/interface/DDFilter.h" @@ -15,6 +16,9 @@ #include "DetectorDescription/DDCMS/interface/DDCompactView.h" #include "DetectorDescription/DDCMS/interface/DDFilteredView.h" +#include "DD4hep/DD4hepUnits.h" +#include "DD4hep/Filter.h" + #include "G4Run.hh" #include "G4PhysicalVolumeStore.hh" #include "G4LogicalVolumeStore.hh" @@ -27,8 +31,13 @@ #include "G4UserLimits.hh" #include "G4TransportationManager.hh" -#include +#include +#include #include +#include +#include + +using angle_units::operators::convertRadToDeg; PrintGeomInfoAction::PrintGeomInfoAction(const edm::ParameterSet &p) { dumpSummary_ = p.getUntrackedParameter("DumpSummary", true); @@ -48,6 +57,11 @@ PrintGeomInfoAction::PrintGeomInfoAction(const edm::ParameterSet &p) { nchar_ = name_.find('*'); name_.assign(name_, 0, nchar_); names_ = p.getUntrackedParameter >("Names"); + fileMat_ = p.getUntrackedParameter("MaterialFileName", ""); + fileSolid_ = p.getUntrackedParameter("SolidFileName", ""); + fileLV_ = p.getUntrackedParameter("LVFileName", ""); + filePV_ = p.getUntrackedParameter("PVFileName", ""); + fileTouch_ = p.getUntrackedParameter("TouchFileName", ""); G4cout << "PrintGeomInfoAction:: initialised for dd4hep " << dd4hep_ << " with verbosity levels:" << " Summary " << dumpSummary_ << " LVTree " << dumpLVTree_ << " LVList " << dumpLVList_ << " Material " << dumpMaterial_ << "\n " @@ -57,7 +71,9 @@ PrintGeomInfoAction::PrintGeomInfoAction(const edm::ParameterSet &p) { << "\n " << " Touchable " << dumpTouch_ << " for names (0-" << nchar_ << ") = " << name_ << "\n " - << " Sensitive " << dumpSense_ << " for " << names_.size() << " names:"; + << " Sensitive " << dumpSense_ << " Files " << fileMat_ << ":" << fileSolid_ << ":" << fileLV_ << ":" + << filePV_ << ":" << fileTouch_ << "\n " + << "for " << names_.size() << " names:"; for (unsigned int i = 0; i < names_.size(); i++) G4cout << " " << names_[i]; G4cout << G4endl; @@ -78,18 +94,19 @@ void PrintGeomInfoAction::update(const BeginOfJob *job) { const cms::DDFilter filter("ReadOutName", sd); cms::DDFilteredView fv(*pDD, filter); G4cout << "PrintGeomInfoAction:: Get Filtered view for ReadOutName = " << sd << G4endl; + G4cout << "Lengths are in mm, angles in degrees" << G4endl; std::string spaces = spacesFromLeafDepth(1); while (fv.firstChild()) { - auto tran = fv.translation(); + auto tran = fv.translation() / dd4hep::mm; std::vector copy = fv.copyNos(); auto lvname = fv.name(); unsigned int leafDepth = copy.size(); G4cout << leafDepth << spaces << "### VOLUME = " << lvname << " Copy No"; for (unsigned int k = 0; k < leafDepth; ++k) G4cout << " " << copy[k]; - G4cout << " Centre at " << tran << " (r = " << tran.Rho() << ", phi = " << tran.phi() / CLHEP::deg << ")" + G4cout << " Centre at " << tran << " (r = " << tran.Rho() << ", phi = " << convertRadToDeg(tran.phi()) << ")" << G4endl; } } @@ -105,6 +122,7 @@ void PrintGeomInfoAction::update(const BeginOfJob *job) { DDSpecificsMatchesValueFilter filter{DDValue(attribute, sd, 0)}; DDFilteredView fv(*pDD, filter); G4cout << "PrintGeomInfoAction:: Get Filtered view for " << attribute << " = " << sd << G4endl; + G4cout << "Lengths are in mm, angles in degrees" << G4endl; bool dodet = fv.firstChild(); std::string spaces = spacesFromLeafDepth(1); @@ -119,7 +137,7 @@ void PrintGeomInfoAction::update(const BeginOfJob *job) { G4cout << leafDepth << spaces << "### VOLUME = " << lvname << " Copy No"; for (int k = leafDepth - 1; k >= 0; k--) G4cout << " " << copy[k]; - G4cout << " Centre at " << tran << " (r = " << tran.Rho() << ", phi = " << tran.phi() / CLHEP::deg << ")" + G4cout << " Centre at " << tran << " (r = " << tran.Rho() << ", phi = " << convertRadToDeg(tran.phi()) << ")" << G4endl; dodet = fv.next(); } @@ -145,6 +163,8 @@ void PrintGeomInfoAction::update(const BeginOfRun *run) { //---------- Dump LV and PV information if (dumpLV_ || dumpPV_ || dumpTouch_) dumpHierarchyTreePVLV(G4cout); + + dumpInFile(); } void PrintGeomInfoAction::dumpSummary(std::ostream &out) { @@ -370,6 +390,11 @@ void PrintGeomInfoAction::dumpPV(G4VPhysicalVolume *pv, unsigned int leafDepth, } } +void PrintGeomInfoAction::dumpSolid(G4VSolid *sol, unsigned int leafDepth, std::ostream &out) { + std::string spaces = spacesFromLeafDepth(leafDepth); + out << spaces << *(sol) << G4endl; +} + void PrintGeomInfoAction::dumpTouch(G4VPhysicalVolume *pv, unsigned int leafDepth, std::ostream &out) { std::string spaces = spacesFromLeafDepth(leafDepth); if (leafDepth == 0) @@ -388,7 +413,7 @@ void PrintGeomInfoAction::dumpTouch(G4VPhysicalVolume *pv, unsigned int leafDept if (lvname == name_) out << leafDepth << spaces << "### VOLUME = " << lv->GetName() << " Copy No " << pv->GetCopyNo() << " in " << mother << " global position of centre " << globalpoint << " (r = " << globalpoint.perp() - << ", phi = " << globalpoint.phi() / CLHEP::deg << ")" << G4endl; + << ", phi = " << convertRadToDeg(globalpoint.phi()) << ")" << G4endl; int NoDaughters = lv->GetNoDaughters(); while ((NoDaughters--) > 0) { @@ -401,6 +426,83 @@ void PrintGeomInfoAction::dumpTouch(G4VPhysicalVolume *pv, unsigned int leafDept fHistory_.BackLevel(); } +void PrintGeomInfoAction::dumpInFile() { + //---------- Dump number objects of each class in a file + if (theTopPV_ != nullptr) { + if (!fileMat_.empty()) { + const G4MaterialTable *matTab = G4Material::GetMaterialTable(); + std::ofstream fout(fileMat_.c_str()); + for (std::vector::const_iterator matite = matTab->begin(); matite != matTab->end(); matite++) + fout << (*matite)->GetName() << "\n"; + fout.close(); + } + const G4LogicalVolumeStore *lvs = G4LogicalVolumeStore::GetInstance(); + if (!fileSolid_.empty()) { + std::ofstream fout(fileSolid_.c_str()); + for (std::vector::const_iterator lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++) + fout << (*lvcite)->GetSolid()->GetName() << "\n"; + fout.close(); + } + if (!fileLV_.empty()) { + std::ofstream fout(fileLV_.c_str()); + for (std::vector::const_iterator lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++) + fout << (*lvcite)->GetName() << "\n"; + fout.close(); + } + if (!filePV_.empty()) { + const G4PhysicalVolumeStore *pvs = G4PhysicalVolumeStore::GetInstance(); + std::ofstream fout(filePV_.c_str()); + for (std::vector::const_iterator pvcite = pvs->begin(); pvcite != pvs->end(); pvcite++) { + if (dd4hep_) + fout << (*pvcite)->GetName() << "\n"; + else + fout << (*pvcite)->GetName() << "_" << (*pvcite)->GetCopyNo() << "\n"; + } + fout.close(); + } + if (!fileTouch_.empty()) { + std::ofstream fout(fileTouch_.c_str()); + std::vector touches; + getTouch(theTopPV_, 0, 1, touches); + std::sort(touches.begin(), touches.end()); + for (const auto &touch : touches) + fout << touch << "\n"; + fout.close(); + } + } +} + +void PrintGeomInfoAction::getTouch(G4VPhysicalVolume *pv, + unsigned int leafDepth, + unsigned int copym, + std::vector &touches) { + if (leafDepth == 0) + fHistory_.SetFirstEntry(pv); + else + fHistory_.NewLevel(pv, kNormal, pv->GetCopyNo()); + + std::string mother = "World"; + if (pv->GetMotherLogical()) + mother = static_cast(dd4hep::dd::noNamespace(pv->GetMotherLogical()->GetName())); + + G4LogicalVolume *lv = pv->GetLogicalVolume(); + std::string lvname = static_cast(dd4hep::dd::noNamespace(lv->GetName())); + unsigned int copy = static_cast(pv->GetCopyNo()); + + std::string name = lvname + ":" + std::to_string(copy) + "_" + mother + ":" + std::to_string(copym); + touches.emplace_back(name); + + int NoDaughters = lv->GetNoDaughters(); + while ((NoDaughters--) > 0) { + G4VPhysicalVolume *pvD = lv->GetDaughter(NoDaughters); + if (!pvD->IsReplicated()) + getTouch(pvD, leafDepth + 1, copy, touches); + } + + if (leafDepth > 0) + fHistory_.BackLevel(); +} + std::string PrintGeomInfoAction::spacesFromLeafDepth(unsigned int leafDepth) { std::string spaces; unsigned int ii; @@ -410,11 +512,6 @@ std::string PrintGeomInfoAction::spacesFromLeafDepth(unsigned int leafDepth) { return spaces; } -void PrintGeomInfoAction::dumpSolid(G4VSolid *sol, unsigned int leafDepth, std::ostream &out) { - std::string spaces = spacesFromLeafDepth(leafDepth); - out << spaces << *(sol) << G4endl; -} - G4VPhysicalVolume *PrintGeomInfoAction::getTopPV() { return G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking()->GetWorldVolume(); } diff --git a/SimG4Core/PrintGeomInfo/test/BuildFile.xml b/SimG4Core/PrintGeomInfo/test/BuildFile.xml new file mode 100644 index 0000000000000..4ad302dcdeaef --- /dev/null +++ b/SimG4Core/PrintGeomInfo/test/BuildFile.xml @@ -0,0 +1,2 @@ + + diff --git a/SimG4Core/PrintGeomInfo/test/SimFileCompare.cpp b/SimG4Core/PrintGeomInfo/test/SimFileCompare.cpp new file mode 100644 index 0000000000000..ded68bfdce1a7 --- /dev/null +++ b/SimG4Core/PrintGeomInfo/test/SimFileCompare.cpp @@ -0,0 +1,138 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Compares output files from PrintGeomInfo created using DDD and DD4Hep +// inputs. Usage: +// +// SimFileCompare infile1 infile2 mode debug +// infile1 (const char*) File created using DDD +// infile2 (const char*) File created using DD4Hep +// mode (int) Treat (0) or not treat (1) names from DDD +// deug (int) Single digit number (0 minimum printout) +// +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include + +std::string removeExtraName(const std::string& name, int debug) { + std::string nam(name); + std::string nam1 = name.substr(0, 2); + if (((nam1 == "GE") || (nam1 == "GH") || (nam1 == "MB") || (nam1 == "ME") || (nam1 == "RE") || (nam1 == "RR") || + (nam1 == "RT")) && + (name.size() > 5)) { + uint32_t loc = name.size() - 5; + if ((name.substr(0, 15) != "MBCables_Wheels") && (name.substr(loc, 1) == "_")) { + std::string nam2 = (name.substr(loc + 3, 1) == "0") ? name.substr(loc + 4, 1) : name.substr(loc + 3, 2); + nam = name.substr(0, loc + 1) + nam2; + } + } + if (debug) + std::cout << name << " : " << nam1 << " " << nam << std::endl; + return nam; +} + +std::string reducedName(const std::string& name, int debug) { + std::string nam(name); + uint32_t first = ((name.find(":") == std::string::npos) ? 0 : (name.find(":") + 1)); + uint32_t last(name.size() + 1); + uint32_t loc(first); + while (1) { + if (name.find("_", loc) == std::string::npos) + break; + if (((loc + 5) < name.size()) && (name.substr(loc, 5) == "shape")) { + last = loc; + break; + } + loc = name.find("_", loc) + 1; + if (loc > name.size()) + break; + } + nam = name.substr(first, last - first - 1); + if ((last < name.size()) && (name.substr(name.size() - 5, 5) == "_refl")) + nam += "_refl"; + if (debug > 0) + std::cout << name << " col " << first << ":" << last << " " << nam << std::endl; + return nam; +} + +void CompareFiles(const char* fileDDD, const char* fileDD4Hep, int mode, int debug) { + std::map nameDDD, nameDD4Hep; + char buffer[100]; + std::string name; + std::ifstream fInput1(fileDDD); + if (!fInput1.good()) { + std::cout << "Cannot open file " << fileDDD << std::endl; + } else { + while (fInput1.getline(buffer, 100)) { + name = ((mode == 1) ? removeExtraName(std::string(buffer), debug) : std::string(buffer)); + auto it = nameDDD.find(name); + if (it == nameDDD.end()) + nameDDD[name] = 1; + else + ++(it->second); + } + fInput1.close(); + } + std::ifstream fInput2(fileDD4Hep); + if (!fInput2.good()) { + std::cout << "Cannot open file " << fileDD4Hep << std::endl; + } else { + while (fInput2.getline(buffer, 100)) { + name = reducedName(std::string(buffer), debug); + auto it = nameDD4Hep.find(name); + if (it == nameDD4Hep.end()) + nameDD4Hep[name] = 1; + else + ++(it->second); + } + fInput1.close(); + } + std::cout << "Reads " << nameDDD.size() << " names from " << fileDDD << " and " << nameDD4Hep.size() << " names from " + << fileDD4Hep << std::endl; + + std::cout << "\nMore than one entry for a given name in " << fileDDD << std::endl; + for (auto it : nameDDD) { + if (it.second > 1) + std::cout << it.first << " : " << it.second << std::endl; + } + std::cout << "\nMore than one entry for a given name in " << fileDD4Hep << std::endl; + for (auto it : nameDD4Hep) { + if (it.second > 1) + std::cout << it.first << " : " << it.second << std::endl; + } + std::cout << "\nEntry in " << fileDDD << " not in " << fileDD4Hep << std::endl; + for (auto it : nameDDD) { + if (nameDD4Hep.find(it.first) == nameDD4Hep.end()) + std::cout << it.first << " appearing " << it.second << " times" << std::endl; + } + std::cout << "\nEntry in " << fileDD4Hep << " not in " << fileDDD << std::endl; + for (auto it : nameDD4Hep) { + if (nameDDD.find(it.first) == nameDDD.end()) + std::cout << it.first << " appearing " << it.second << " times" << std::endl; + } +} + +int main(int argc, char* argv[]) { + if (argc <= 3) { + std::cout << "Please give a minimum of 2 arguments \n" + << "input file name from the DDD run\n" + << "input file name from the DD4Hep run\n" + << "mode (treat the name for DDD or not == needed for PV)\n" + << "debug flag (0 for minimum printout)\n" + << std::endl; + return 0; + } + + const char* infile1 = argv[1]; + const char* infile2 = argv[2]; + int mode = ((argc > 3) ? atoi(argv[3]) : 0); + int debug = ((argc > 4) ? atoi(argv[4]) : 0); + CompareFiles(infile1, infile2, mode, debug); + return 0; +} diff --git a/SimG4Core/PrintGeomInfo/test/python/g4DumpGeometry_cfg.py b/SimG4Core/PrintGeomInfo/test/python/g4DumpGeometry_cfg.py index dba26c9c77c82..31af188f60ad0 100644 --- a/SimG4Core/PrintGeomInfo/test/python/g4DumpGeometry_cfg.py +++ b/SimG4Core/PrintGeomInfo/test/python/g4DumpGeometry_cfg.py @@ -11,7 +11,8 @@ from SimG4Core.PrintGeomInfo.g4TestGeometry_cfi import * process = checkOverlap(process) -process.MessageLogger.destinations = cms.untracked.vstring("Ecal2017.info") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.Ecal2017 = dict(extension ="info") # enable Geant4 overlap check process.g4SimHits.CheckGeometry = cms.bool(True) diff --git a/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck_cfg.py b/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck_cfg.py index 1ea65e2594fe2..5eed221c8536c 100644 --- a/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck_cfg.py +++ b/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck_cfg.py @@ -1,17 +1,22 @@ - import FWCore.ParameterSet.Config as cms -process = cms.Process("G4PrintGeometry") - +#from Configuration.Eras.Era_Run2_cff import Run2 +#process = cms.Process('SIM',Run2) #process.load('Configuration.Geometry.GeometryExtended2015_cff') #process.load('Configuration.Geometry.GeometryExtended2017_cff') + +from Configuration.Eras.Era_Run3_cff import Run3 +process = cms.Process('SIM',Run3) process.load('Configuration.Geometry.GeometryExtended2021_cff') -#process.load('Configuration.Geometry.GeometryExtended2026D17_cff') -#process.load('Configuration.Geometry.GeometryExtended2026D45_cff') + +#from Configuration.Eras.Era_Phase2C11_cff import Phase2C11 +#process = cms.Process('SIM',Phase2C11) +#process.load('Configuration.Geometry.GeometryExtended2026D76_cff') + process.load('FWCore.MessageService.MessageLogger_cfi') -if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HCalGeom') +#if hasattr(process,'MessageLogger'): +# process.MessageLogger.HCalGeom=dict() from SimG4Core.PrintGeomInfo.g4TestGeometry_cfi import * process = checkOverlap(process) diff --git a/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck_dd4hep_cfg.py b/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck_dd4hep_cfg.py new file mode 100644 index 0000000000000..7003c91c10573 --- /dev/null +++ b/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck_dd4hep_cfg.py @@ -0,0 +1,43 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Run3_dd4hep_cff import Run3_dd4hep +process = cms.Process('G4PrintGeometry',Run3_dd4hep) +process.load('Configuration.Geometry.GeometryDD4hepExtended2021_cff') + +#from Configuration.Eras.Era_Phase2C11_dd4hep_cff import Phase2C11_dd4hep +#process = cms.Process('G4PrintGeometry',Phase2C11_dd4hep) +#process.load('Configuration.Geometry.GeometryDD4hepExtended2026D76_cff') + +process.load('FWCore.MessageService.MessageLogger_cfi') + +#if hasattr(process,'MessageLogger'): +# process.MessageLogger.HCalGeom=dict() + +from SimG4Core.PrintGeomInfo.g4TestGeometry_cfi import * +process = checkOverlap(process) + +# enable Geant4 overlap check +process.g4SimHits.CheckGeometry = True + +# Geant4 geometry check +process.g4SimHits.G4CheckOverlap.OutputBaseName = cms.string("cms2021") +process.g4SimHits.G4CheckOverlap.OverlapFlag = cms.bool(True) +process.g4SimHits.G4CheckOverlap.Tolerance = cms.double(0.01) +process.g4SimHits.G4CheckOverlap.Resolution = cms.int32(10000) +process.g4SimHits.G4CheckOverlap.Depth = cms.int32(-1) +# tells if NodeName is G4Region or G4PhysicalVolume +process.g4SimHits.G4CheckOverlap.RegionFlag = cms.bool(False) +# list of names +process.g4SimHits.G4CheckOverlap.NodeNames = cms.vstring('cms:OCMS_1') +# enable dump gdml file +process.g4SimHits.G4CheckOverlap.gdmlFlag = cms.bool(False) +# if defined a G4PhysicsVolume info is printed +process.g4SimHits.G4CheckOverlap.PVname = '' +# if defined a list of daughter volumes is printed +process.g4SimHits.G4CheckOverlap.LVname = '' + +# extra output files, created if a name is not empty +process.g4SimHits.FileNameField = '' +process.g4SimHits.FileNameGDML = '' +process.g4SimHits.FileNameRegions = '' +# diff --git a/SimG4Core/PrintGeomInfo/test/python/runDD4HEP_cfg.py b/SimG4Core/PrintGeomInfo/test/python/runDD4HEP_cfg.py index 37df56783bfc2..a5b840de3c96d 100644 --- a/SimG4Core/PrintGeomInfo/test/python/runDD4HEP_cfg.py +++ b/SimG4Core/PrintGeomInfo/test/python/runDD4HEP_cfg.py @@ -1,15 +1,12 @@ import FWCore.ParameterSet.Config as cms -process = cms.Process("G4PrintGeometry") +from Configuration.Eras.Era_Run3_dd4hep_cff import Run3_dd4hep +process = cms.Process('G4PrintGeometry',Run3_dd4hep) +process.load('Configuration.Geometry.GeometryDD4hepExtended2021_cff') -process.load('Configuration.ProcessModifiers.dd4hep_cff') -process.load('Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi') -process.load('SLHCUpgradeSimulations.Geometry.fakeConditions_phase2TkT14_cff') -process.load('Geometry.EcalCommonData.ecalSimulationParameters_cff') -process.load('Geometry.HcalCommonData.hcalDDDSimConstants_cff') -process.load('Geometry.HGCalCommonData.hgcalParametersInitialization_cfi') -process.load('Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi') -process.load('Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cfi') +#from Configuration.Eras.Era_Phase2C11_dd4hep_cff import Phase2C11_dd4hep +#process = cms.Process('G4PrintGeometry',Phase2C11_dd4hep) +#process.load('Configuration.Geometry.GeometryDD4hepExtended2026D76_cff') process.load('FWCore.MessageService.MessageLogger_cfi') from SimG4Core.PrintGeomInfo.g4PrintGeomInfo_cfi import * @@ -17,27 +14,28 @@ process = printGeomInfo(process) if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') - -process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", - confGeomXMLFiles = cms.FileInPath('Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021.xml'), - appendToDataLabel = cms.string('') -) - -process.DDCompactViewESProducer = cms.ESProducer("DDCompactViewESProducer", - appendToDataLabel = cms.string('') -) - -process.g4SimHits.g4GeometryDD4hepSource = cms.bool(True) -process.g4SimHits.Watchers.Names = cms.untracked.vstring('HcalBarrel') -process.g4SimHits.Watchers.DD4Hep = cms.untracked.bool(True) -process.hcalParameters.fromDD4Hep = cms.bool(True) -process.hcalSimulationParameters.fromDD4Hep = cms.bool(True) -process.caloSimulationParameters.fromDD4Hep = cms.bool(True) -process.ecalSimulationParametersEB.fromDD4Hep = cms.bool(True) -process.ecalSimulationParametersEE.fromDD4Hep = cms.bool(True) -process.ecalSimulationParametersES.fromDD4Hep = cms.bool(True) -process.hgcalEEParametersInitialize.fromDD4Hep = cms.bool(True) -process.hgcalHESiParametersInitialize.fromDD4Hep = cms.bool(True) -process.hgcalHEScParametersInitialize.fromDD4Hep = cms.bool(True) + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() +process.g4SimHits.Watchers = cms.VPSet(cms.PSet( + DumpSummary = cms.untracked.bool(True), + DumpLVTree = cms.untracked.bool(False), + DumpMaterial = cms.untracked.bool(False), + DumpLVList = cms.untracked.bool(False), + DumpLV = cms.untracked.bool(False), + DumpSolid = cms.untracked.bool(False), + DumpAttributes = cms.untracked.bool(False), + DumpPV = cms.untracked.bool(False), + DumpRotation = cms.untracked.bool(False), + DumpReplica = cms.untracked.bool(False), + DumpTouch = cms.untracked.bool(False), + DumpSense = cms.untracked.bool(False), + DD4Hep = cms.untracked.bool(True), + Name = cms.untracked.string(''), + Names = cms.untracked.vstring(''), + MaterialFileName = cms.untracked.string('matfileDD4Hep.txt'), + SolidFileName = cms.untracked.string('solidfileDD4Hep.txt'), + LVFileName = cms.untracked.string('lvfileDD4Hep.txt'), + PVFileName = cms.untracked.string('pvfileDD4Hep.txt'), + TouchFileName = cms.untracked.string('touchfileDD4Hep.txt'), + type = cms.string('PrintGeomInfoAction') +)) diff --git a/SimG4Core/PrintGeomInfo/test/python/runDDD_cfg.py b/SimG4Core/PrintGeomInfo/test/python/runDDD_cfg.py index d5ce96273638a..18af92f3380bd 100644 --- a/SimG4Core/PrintGeomInfo/test/python/runDDD_cfg.py +++ b/SimG4Core/PrintGeomInfo/test/python/runDDD_cfg.py @@ -1,22 +1,52 @@ import FWCore.ParameterSet.Config as cms -process = cms.Process("G4PrintGeometry") - -#process.load('SimG4Core.PrintGeomInfo.testTotemGeometryXML_cfi') -#process.load('Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi') -#process.load('Geometry.MuonNumbering.muonNumberingInitialization_cfi') -#process.load('Geometry.EcalCommonData.ecalSimulationParameters_cff') -#process.load('Geometry.HcalCommonData.hcalDDDSimConstants_cff') -process.load('Configuration.Geometry.GeometryExtended2026D41_cff') +#from Configuration.Eras.Era_Run2_cff import Run2 +#process = cms.Process('G4PrintGeometry',Run2) +#process.load('Configuration.Geometry.GeometryExtended2015_cff') +#process.load('Configuration.Geometry.GeometryExtended2017_cff') + +from Configuration.Eras.Era_Run3_cff import Run3 +process = cms.Process('G4PrintGeometry',Run3) +process.load('Configuration.Geometry.GeometryExtended2021_cff') + +#from Configuration.Eras.Era_Phase2C11_cff import Phase2C11 +#process = cms.Process('G4PrintGeometry',Phase2C11) +#process.load('Configuration.Geometry.GeometryExtended2026D76_cff') + process.load('FWCore.MessageService.MessageLogger_cfi') + from SimG4Core.PrintGeomInfo.g4PrintGeomInfo_cfi import * process = printGeomInfo(process) if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('G4cerr') - process.MessageLogger.categories.append('G4cout') + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + + -process.g4SimHits.Watchers.Names = cms.untracked.vstring('HGCalEE') -#process.g4SimHits.Watchers.Names = cms.untracked.vstring('Internal_CSC_for_TotemT1_Plane_0_0_5', 'Internal_CSC_for_TotemT1_Plane_1_0_5','Internal_CSC_for_TotemT1_Plane_2_0_5','Internal_CSC_for_TotemT1_Plane_3_0_5','Internal_CSC_for_TotemT1_Plane_4_0_5','Internal_CSC_for_TotemT1_Plane_0_5_5','Internal_CSC_for_TotemT1_Plane_1_5_5','Internal_CSC_for_TotemT1_Plane_2_5_5','Internal_CSC_for_TotemT1_Plane_3_5_5','Internal_CSC_for_TotemT1_Plane_4_5_5','TotemT2gem_driftspace7r') +process.g4SimHits.g4GeometryDD4hepSource = cms.bool(False) +process.g4SimHits.Watchers = cms.VPSet(cms.PSet( + DumpSummary = cms.untracked.bool(True), + DumpLVTree = cms.untracked.bool(False), + DumpMaterial = cms.untracked.bool(False), + DumpLVList = cms.untracked.bool(False), + DumpLV = cms.untracked.bool(False), + DumpSolid = cms.untracked.bool(False), + DumpAttributes = cms.untracked.bool(False), + DumpPV = cms.untracked.bool(False), + DumpRotation = cms.untracked.bool(False), + DumpReplica = cms.untracked.bool(False), + DumpTouch = cms.untracked.bool(False), + DumpSense = cms.untracked.bool(False), + DD4Hep = cms.untracked.bool(False), + Name = cms.untracked.string(''), + Names = cms.untracked.vstring(''), + MaterialFileName = cms.untracked.string('matfileDDD.txt'), + SolidFileName = cms.untracked.string('solidfileDDD.txt'), + LVFileName = cms.untracked.string('lvfileDDD.txt'), + PVFileName = cms.untracked.string('pvfileDDD.txt'), + TouchFileName = cms.untracked.string('touchfileDDD.txt'), + type = cms.string('PrintGeomInfoAction') +)) diff --git a/SimG4Core/PrintGeomInfo/test/python/runSens_cfg.py b/SimG4Core/PrintGeomInfo/test/python/runSens_cfg.py index 63d86ca961e95..078dfe5bb0c05 100644 --- a/SimG4Core/PrintGeomInfo/test/python/runSens_cfg.py +++ b/SimG4Core/PrintGeomInfo/test/python/runSens_cfg.py @@ -10,7 +10,8 @@ #process.load("Geometry.EcalCommonData.ecalSimulationParameters_cff") #process.load('Geometry.HcalCommonData.hcalDDDSimConstants_cff') -process.MessageLogger.destinations = cms.untracked.vstring("SensDet.txt") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.SensDet = dict(extension="txt") process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) diff --git a/SimG4Core/PrintGeomInfo/test/python/runSummary_cfg.py b/SimG4Core/PrintGeomInfo/test/python/runSummary_cfg.py index 70fddd162101f..975843e8dcafe 100644 --- a/SimG4Core/PrintGeomInfo/test/python/runSummary_cfg.py +++ b/SimG4Core/PrintGeomInfo/test/python/runSummary_cfg.py @@ -14,8 +14,8 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('G4cout') - process.MessageLogger.categories.append('G4cerr') + process.MessageLogger.G4cout=dict() + process.MessageLogger.G4cerr=dict() from SimG4Core.PrintGeomInfo.g4PrintGeomSummary_cfi import * diff --git a/SimG4Core/PrintGeomInfo/test/python/run_MaterialBudgeInfo_cfg.py b/SimG4Core/PrintGeomInfo/test/python/run_MaterialBudgeInfo_cfg.py index 44b95d264c5fa..8914396c92c3b 100644 --- a/SimG4Core/PrintGeomInfo/test/python/run_MaterialBudgeInfo_cfg.py +++ b/SimG4Core/PrintGeomInfo/test/python/run_MaterialBudgeInfo_cfg.py @@ -8,7 +8,8 @@ process.load("Geometry.EcalCommonData.ecalSimulationParameters_cff") process.load('Geometry.HcalCommonData.hcalDDDSimConstants_cff') -process.MessageLogger.destinations = cms.untracked.vstring("MatBudget.txt") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.MatBudget = dict(extension = "txt") process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) diff --git a/SimGeneral/Debugging/plugins/CaloParticleDebugger.cc b/SimGeneral/Debugging/plugins/CaloParticleDebugger.cc index 513c0c9f47662..8bee9068af44b 100644 --- a/SimGeneral/Debugging/plugins/CaloParticleDebugger.cc +++ b/SimGeneral/Debugging/plugins/CaloParticleDebugger.cc @@ -181,45 +181,51 @@ void CaloParticleDebugger::analyze(const edm::Event& iEvent, const edm::EventSet int idx = 0; std::map trackid_to_track_index; - std::cout << "Printing SimTracks information" << std::endl; - std::cout << "IDX\tTrackId\tPDGID\tMOMENTUM(x,y,z,E)\tVertexIdx\tGenPartIdx" << std::endl; + LogVerbatim("CaloParticleDebuggerSimTracks") << "\n\n**Printing SimTracks information **"; + LogVerbatim("CaloParticleDebuggerSimTracks") << "IDX\tTrackId\tPDGID\tMOMENTUM(x,y,z,E)\tVertexIdx\tGenPartIdx"; for (auto i : sorted_tracks_idx) { auto const& t = tracks[i]; - std::cout << idx << "\t" << t.trackId() << "\t" << t << std::endl; + LogVerbatim("CaloParticleDebuggerSimTracks") << idx << "\t" << t.trackId() << "\t" << t; + LogVerbatim("CaloParticleDebuggerSimTracks") + << "Crossed Boundary: " << t.crossedBoundary() << " Position Boundary: " << t.getPositionAtBoundary() + << " Momentum Boundary: " << t.getMomentumAtBoundary() << " Vtx: " << t.vertIndex() + << " Momemtum Origin: " << t.momentum(); trackid_to_track_index[t.trackId()] = idx; idx++; } - std::cout << "Printing GenParticles information" << std::endl; - std::cout << "IDX\tPDGID\tMOMENTUM(x,y,z)\tVertex(x,y,z)" << std::endl; + LogVerbatim("CaloParticleDebuggerGenParticles") << "\n\n**Printing GenParticles information **"; + LogVerbatim("CaloParticleDebuggerGenParticles") << "IDX\tPDGID\tMOMENTUM(x,y,z)\tVertex(x,y,z)"; for (auto i : sorted_genParticles_idx) { auto const& gp = genParticles[i]; - std::cout << i << "\t" << gp.pdgId() << "\t" << gp.momentum() << "\t" << gp.vertex() << std::endl; + LogVerbatim("CaloParticleDebuggerGenParticles") + << i << "\t" << gp.pdgId() << "\t" << gp.momentum() << "\t" << gp.vertex(); } - std::cout << "Printing SimVertex information" << std::endl; - std::cout << "IDX\tPOSITION(x,y,z)\tPARENT_INDEX\tVERTEX_ID" << std::endl; + LogVerbatim("CaloParticleDebuggerSimVertices") << "\n\n**Printing SimVertex information **"; + LogVerbatim("CaloParticleDebuggerSimVertices") << "IDX\tPOSITION(x,y,z)\tPARENT_INDEX\tVERTEX_ID"; for (auto i : sorted_vertices_idx) { auto const& v = vertices[i]; - std::cout << i << "\t" << v << std::endl; + LogVerbatim("CaloParticleDebuggerSimVertices") << i << "\t" << v; } - std::cout << "Printing TrackingParticles information" << std::endl; + + LogVerbatim("CaloParticleDebuggerTrackingParticles") << "\n\n**Printing TrackingParticles information **"; for (auto i : sorted_tp_idx) { auto const& tp = trackingpart[i]; - std::cout << i << "\t" << tp << std::endl; + LogVerbatim("CaloParticleDebuggerTrackingParticles") << i << "\t" << tp; } - std::cout << "Printing CaloParticles information" << std::endl; + LogVerbatim("CaloParticleDebuggerCaloParticles") << "\n\n**Printing CaloParticles information **"; idx = 0; for (auto i : sorted_cp_idx) { auto const& cp = calopart[i]; - std::cout << "\n\n" - << idx++ << " |Eta|: " << std::abs(cp.momentum().eta()) << "\tType: " << cp.pdgId() - << "\tEnergy: " << cp.energy() << "\tIdx: " << cp.g4Tracks()[0].trackId() - << std::endl; // << cp << std::endl; + LogVerbatim("CaloParticleDebuggerCaloParticles") + << "\n\n" + << idx++ << " |Eta|: " << std::abs(cp.momentum().eta()) << "\tType: " << cp.pdgId() + << "\tEnergy: " << cp.energy() << "\tIdx: " << cp.g4Tracks()[0].trackId(); // << cp ; double total_sim_energy = 0.; double total_cp_energy = 0.; - std::cout << "--> Overall simclusters's size: " << cp.simClusters().size() << std::endl; + LogVerbatim("CaloParticleDebuggerCaloParticles") << "--> Overall simclusters in CP: " << cp.simClusters().size(); // All the next mess just to print the simClusters ordered auto const& simcs = cp.simClusters(); std::vector sorted_sc_idx(simcs.size()); @@ -228,7 +234,7 @@ void CaloParticleDebugger::analyze(const edm::Event& iEvent, const edm::EventSet return simcs[i]->momentum().eta() < simcs[j]->momentum().eta(); }); for (auto i : sorted_sc_idx) { - std::cout << *(simcs[i]); + LogVerbatim("CaloParticleDebuggerCaloParticles") << *(simcs[i]); } for (auto const& sc : cp.simClusters()) { @@ -237,24 +243,32 @@ void CaloParticleDebugger::analyze(const edm::Event& iEvent, const edm::EventSet total_cp_energy += cp.energy() * cl.second; } } - std::cout << "--> Overall SC energy (sum using sim energies): " << total_sim_energy << std::endl; - std::cout << "--> Overall SC energy (sum using CaloP energies): " << total_cp_energy << std::endl; + LogVerbatim("CaloParticleDebuggerCaloParticles") + << "--> Overall SC energy (sum using sim energies): " << total_sim_energy; + LogVerbatim("CaloParticleDebuggerCaloParticles") + << "--> Overall SC energy (sum using CaloP energies): " << total_cp_energy; } idx = 0; - std::cout << "Printing SimClusters information" << std::endl; + LogVerbatim("CaloParticleDebuggerSimClusters") << "\n\n**Printing SimClusters information **"; for (auto i : sorted_simcl_idx) { auto const& simcl = simclusters[i]; - std::cout << "\n\n" - << idx++ << " |Eta|: " << std::abs(simcl.momentum().eta()) << "\tType: " << simcl.pdgId() - << "\tEnergy: " << simcl.energy() << "\tKey: " << i << std::endl; // << simcl << std::endl; + LogVerbatim("CaloParticleDebuggerSimClusters") + << "\n\n" + << idx++ << " |Eta|: " << std::abs(simcl.momentum().eta()) << "\tType: " << simcl.pdgId() + << "\tEnergy: " << simcl.energy() << "\tKey: " << i; // << simcl ; + auto const& simtrack = simcl.g4Tracks()[0]; + LogVerbatim("CaloParticleDebuggerSimClusters") << " Crossed Boundary: " << simtrack.crossedBoundary() + << " Position Boundary: " << simtrack.getPositionAtBoundary() + << " Momentum Boundary: " << simtrack.getMomentumAtBoundary(); double total_sim_energy = 0.; - std::cout << "--> Overall simclusters's size: " << simcl.numberOfRecHits() << std::endl; + LogVerbatim("CaloParticleDebuggerSimClusters") << "--> Overall simclusters's size: " << simcl.numberOfRecHits(); for (auto const& cl : simcl.hits_and_fractions()) { total_sim_energy += detIdToTotalSimEnergy[cl.first] * cl.second; } - std::cout << simcl << std::endl; - std::cout << "--> Overall SimCluster energy (sum using sim energies): " << total_sim_energy << std::endl; + LogVerbatim("CaloParticleDebuggerSimClusters") << simcl; + LogVerbatim("CaloParticleDebuggerSimClusters") + << "--> Overall SimCluster energy (sum using sim energies): " << total_sim_energy; } } diff --git a/SimGeneral/Debugging/python/caloParticleDebugger_cfg.py b/SimGeneral/Debugging/python/caloParticleDebugger_cfg.py index 2f5a38c6cb903..4245c4d463871 100644 --- a/SimGeneral/Debugging/python/caloParticleDebugger_cfg.py +++ b/SimGeneral/Debugging/python/caloParticleDebugger_cfg.py @@ -1,15 +1,27 @@ import FWCore.ParameterSet.Config as cms +# The line below always has to be included to make VarParsing work +from FWCore.ParameterSet.VarParsing import VarParsing +options = VarParsing ('analysis') +options.parseArguments() + process = cms.Process("Demo") process.load("FWCore.MessageService.MessageLogger_cfi") -process.load('Configuration.Geometry.GeometryExtended2023D17Reco_cff') +process.load('Configuration.Geometry.GeometryExtended2026D49Reco_cff') process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') from Configuration.AlCa.GlobalTag import GlobalTag process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic', '') process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) + +input_filename = 'default.root' if len(options.inputFiles) == 0 else options.inputFiles[0] +#input_filename='step2SingleElectronPt15Eta1p7_2p7_SimTracksters.root' +#input_filename='step2FineCaloSingleElectronPt15Eta1p7_2p7_SimTracksters.root' +#input_filename='step2SingleElectronPt15Eta1p7_2p7_CBWEAndSimTracksters.root' +#input_filename='step2FineCaloSingleElectronPt15Eta1p7_2p7_CBWEAndSimTracksters.root' + process.source = cms.Source("PoolSource", inputCommands = cms.untracked.vstring(['keep *', 'drop l1tEMTFHit2016Extras_simEmtfDigis_CSC_HLT', @@ -23,10 +35,31 @@ # 'file:/data/rovere/HGCAL/study/CMSSW_9_4_0/src/SimGeneral/Debugging/test/20824.0_TTbar_13+TTbar_13TeV_TuneCUETP8M1_2023D20_GenSimHLBeamSpotFull+DigiFull_2023D20+RecoFullGlobal_2023D20+HARVESTFullGlobal_2023D20/step2.root' # 'file:/data/rovere/HGCAL/study/CMSSW_9_4_0/src/SimGeneral/Debugging/test/20002.0_SingleElectronPt35+SingleElectronPt35_pythia8_2023D17_GenSimHLBeamSpotFull+DigiFullTrigger_2023D17+RecoFullGlobal_2023D17+HARVESTFullGlobal_2023D17/step2.root' # 'file:/data/rovere/HGCAL/study/CMSSW_9_4_0/src/SimGeneral/Debugging/test/20016.0_SingleGammaPt35Extended+DoubleGammaPt35Extended_pythia8_2023D17_GenSimHLBeamSpotFull+DigiFullTrigger_2023D17+RecoFullGlobal_2023D17+HARVESTFullGlobal_2023D17/step2.root' - 'file:/data/rovere/HGCAL/study/CMSSW_9_4_0/src/SimGeneral/Debugging/test/20088.0_SinglePiPt25Eta1p7_2p7+SinglePiPt25Eta1p7_2p7_2023D17_GenSimHLBeamSpotFull+DigiFullTrigger_2023D17+RecoFullGlobal_2023D17+HARVESTFullGlobal_2023D17/step2.root' +# 'file:/data/rovere/HGCAL/study/CMSSW_9_4_0/src/SimGeneral/Debugging/test/20088.0_SinglePiPt25Eta1p7_2p7+SinglePiPt25Eta1p7_2p7_2023D17_GenSimHLBeamSpotFull+DigiFullTrigger_2023D17+RecoFullGlobal_2023D17+HARVESTFullGlobal_2023D17/step2.root' + 'file:%s'%input_filename + ) ) process.load("SimGeneral.Debugging.caloParticleDebugger_cfi") +# MessageLogger customizations +process.MessageLogger.cerr.enable = False +process.MessageLogger.cout.enable = False +labels = ['SimTracks', 'SimVertices', 'GenParticles', 'TrackingParticles', 'CaloParticles', 'SimClusters'] +messageLogger = dict() +for category in labels: + main_key = '%sMessageLogger'%(category) + category_key = 'CaloParticleDebugger%s'%(category) + messageLogger[main_key] = dict( + filename = '%s_%s.log' % (input_filename.replace('.root',''), category), + threshold = 'INFO', + default = dict(limit=0) + ) + messageLogger[main_key][category_key] = dict(limit=-1) + # First create defaults + setattr(process.MessageLogger.files, category, dict()) + # Then modify them + setattr(process.MessageLogger.files, category, messageLogger[main_key]) + process.p = cms.Path(process.caloParticleDebugger) diff --git a/SimGeneral/HepPDTESSource/BuildFile.xml b/SimGeneral/HepPDTESSource/BuildFile.xml index baf26f18e1baa..5528da1781888 100644 --- a/SimGeneral/HepPDTESSource/BuildFile.xml +++ b/SimGeneral/HepPDTESSource/BuildFile.xml @@ -1,4 +1,3 @@ - diff --git a/SimGeneral/HepPDTESSource/src/HepPDTESSource.cc b/SimGeneral/HepPDTESSource/src/HepPDTESSource.cc index 3f8d917e47a4b..c09982f449274 100644 --- a/SimGeneral/HepPDTESSource/src/HepPDTESSource.cc +++ b/SimGeneral/HepPDTESSource/src/HepPDTESSource.cc @@ -1,26 +1,5 @@ #include "HepPDT/HeavyIonUnknownID.hh" #include "SimGeneral/HepPDTESSource/interface/HepPDTESSource.h" -#include "tbb/concurrent_vector.h" - -namespace { - - class CachingHeavyIonUnknownID : public HepPDT::ProcessUnknownID { - HepPDT::ParticleData *processUnknownID(HepPDT::ParticleID id, const HepPDT::ParticleDataTable &table) final { - // HeavyIonUnknownID constructs a new particle but does not delete it - // we need to do that ourselves - std::unique_ptr p{wrapped_.processUnknownID(id, table)}; - auto *pPtr = p.get(); - if (p) { - particles_.emplace_back(std::move(p)); - } - return pPtr; - } - - HepPDT::HeavyIonUnknownID wrapped_; - tbb::concurrent_vector> particles_; - }; - -} // namespace HepPDTESSource::HepPDTESSource(const edm::ParameterSet &cfg) : pdtFileName(cfg.getParameter("pdtFileName")) { @@ -32,7 +11,7 @@ HepPDTESSource::~HepPDTESSource() {} HepPDTESSource::ReturnType HepPDTESSource::produce(const PDTRecord &iRecord) { using namespace edm::es; - auto pdt = std::make_unique("PDG table", new CachingHeavyIonUnknownID); + auto pdt = std::make_unique("PDG table", new HepPDT::HeavyIonUnknownID); std::ifstream pdtFile(pdtFileName.fullPath().c_str()); if (!pdtFile) throw cms::Exception("FileNotFound", "can't open pdt file") << "cannot open " << pdtFileName.fullPath(); diff --git a/SimGeneral/HepPDTESSource/test/ParticleCheck.py b/SimGeneral/HepPDTESSource/test/ParticleCheck.py index ef5711cd03d94..0470ce54360a1 100644 --- a/SimGeneral/HepPDTESSource/test/ParticleCheck.py +++ b/SimGeneral/HepPDTESSource/test/ParticleCheck.py @@ -9,22 +9,8 @@ edm::LogInfo("SimG4CoreApplication") << "Output of G4ParticleTable DumpTable:"; G4ParticleTable::GetParticleTable()->DumpTable("ALL"); 2-Edit the Validation/Performance/python/TimeMemoryG4Info.py customise fragment (or you could create your own): - a-Add SimG4CoreApplication to the message logger categories: - process.MessageLogger.categories=cms.untracked.vstring('FwkJob' - ,'FwkReport' - ,'FwkSummary' - ,'Root_NoDictionary' - ,'TimeReport' - ,'TimeModule' - ,'TimeEvent' - ,'MemoryCheck' - ,'PhysicsList' - ,'G4cout' - ,'G4cerr' - ,'SimG4CoreApplication' - ) - b-Configure the output (in this case to the file G4msg.log) to include SimG4CoreApplication: - process.MessageLogger.G4msg = cms.untracked.PSet( + a-Configure the output (in this case to the file G4msg.log) to include SimG4CoreApplication: + process.MessageLogger.files = dict(G4msg = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(True) #First eliminate unneeded output ,threshold = cms.untracked.string('INFO') @@ -47,6 +33,7 @@ ,G4cerr = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ,SimG4CoreApplication = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ) + ) 3-Run any cmsDriver.py commands that entail simulation, e.g.(in CMSSW_3_1_0_pre4): cmsDriver.py MinBias.cfi -n 1 --step GEN,SIM --customise=Validation/Performance/TimeMemoryG4Info.py --eventcontent FEVTDEBUG --conditions FrontierConditions_GlobalTag,IDEAL_30X::All > & ! MinBias.log & The resulting file G4msg.log contains the dump of the G4 Particle Table. We run on it, extract the information we are interested in and we store it in 2 dictionaries: diff --git a/SimGeneral/PileupInformation/plugins/GenPUProtonProducer.cc b/SimGeneral/PileupInformation/plugins/GenPUProtonProducer.cc index 16a0c719c5980..0cc3a745c8a40 100644 --- a/SimGeneral/PileupInformation/plugins/GenPUProtonProducer.cc +++ b/SimGeneral/PileupInformation/plugins/GenPUProtonProducer.cc @@ -17,6 +17,7 @@ #include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h" #include "DataFormats/HepMCCandidate/interface/GenParticle.h" #include "FWCore/Utilities/interface/EDMException.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include #include diff --git a/SimGeneral/PreMixingModule/python/mixOne_premix_on_sim_cfi.py b/SimGeneral/PreMixingModule/python/mixOne_premix_on_sim_cfi.py index ebd9d6918675e..496635a86a715 100644 --- a/SimGeneral/PreMixingModule/python/mixOne_premix_on_sim_cfi.py +++ b/SimGeneral/PreMixingModule/python/mixOne_premix_on_sim_cfi.py @@ -207,6 +207,7 @@ from Configuration.Eras.Modifier_phase2_hgcal_cff import phase2_hgcal from Configuration.Eras.Modifier_phase2_hfnose_cff import phase2_hfnose from Configuration.Eras.Modifier_phase2_muon_cff import phase2_muon +from Configuration.Eras.Modifier_phase2_GE0_cff import phase2_GE0 phase2_common.toModify(mixData, input = dict(producers = [])) # we use digis directly, no need for raw2digi producers # Tracker @@ -302,9 +303,8 @@ ) ) - # Muon -phase2_muon.toModify(mixData, +(phase2_muon & ~phase2_GE0).toModify(mixData, workers = dict( me0 = cms.PSet( workerType = cms.string("PreMixingCrossingFramePSimHitWorker"), @@ -314,3 +314,4 @@ ), ) ) + diff --git a/SimGeneral/TrackingAnalysis/python/TrackingParticleSelection_cfi.py b/SimGeneral/TrackingAnalysis/python/TrackingParticleSelection_cfi.py index 24278b2e5ce13..60fe34dc9fc00 100644 --- a/SimGeneral/TrackingAnalysis/python/TrackingParticleSelection_cfi.py +++ b/SimGeneral/TrackingAnalysis/python/TrackingParticleSelection_cfi.py @@ -68,5 +68,6 @@ muon = trackingParticleSelection.simHitCollections.muon+["g4SimHitsMuonGEMHits"])) from Configuration.Eras.Modifier_phase2_muon_cff import phase2_muon -phase2_muon.toModify( trackingParticleSelection, simHitCollections = dict( +from Configuration.Eras.Modifier_phase2_GE0_cff import phase2_GE0 +(phase2_muon & ~phase2_GE0).toModify( trackingParticleSelection, simHitCollections = dict( muon = trackingParticleSelection.simHitCollections.muon+["g4SimHitsMuonME0Hits"])) diff --git a/SimMuon/CSCDigitizer/test/CSCDigiDump_cfg.py b/SimMuon/CSCDigitizer/test/CSCDigiDump_cfg.py index 306019f1fb0fd..df185f2c667c5 100644 --- a/SimMuon/CSCDigitizer/test/CSCDigiDump_cfg.py +++ b/SimMuon/CSCDigitizer/test/CSCDigiDump_cfg.py @@ -38,13 +38,12 @@ process.load('FWCore.MessageService.MessageLogger_cfi') # Activate LogVerbatim output in CSCDigitizer -##process.MessageLogger.categories.append("CSCDigitizer") - # Activate LogVerbatim output in CSC Digis and CSCDigiDump -process.MessageLogger.categories.append("CSCDigi") -process.MessageLogger.destinations = cms.untracked.vstring("cout") + +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/SimMuon/CSCDigitizer/test/CSCDigitizerTest_cfg.py b/SimMuon/CSCDigitizer/test/CSCDigitizerTest_cfg.py index 170c84289a0c5..a505358c289a6 100644 --- a/SimMuon/CSCDigitizer/test/CSCDigitizerTest_cfg.py +++ b/SimMuon/CSCDigitizer/test/CSCDigitizerTest_cfg.py @@ -42,13 +42,11 @@ process.load('FWCore.MessageService.MessageLogger_cfi') # Activate LogVerbatim output in CSCDigitizer -process.MessageLogger.categories.append("CSCDigitizer") - # Activate LogVerbatim output in CSC Digis and CSCDigiDump -##process.MessageLogger.categories.append("CSCDigi") -process.MessageLogger.destinations = cms.untracked.vstring("cout") +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("INFO"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/SimMuon/DTDigitizer/BuildFile.xml b/SimMuon/DTDigitizer/BuildFile.xml index 7bd047366fb1a..9f3b5c84ed100 100644 --- a/SimMuon/DTDigitizer/BuildFile.xml +++ b/SimMuon/DTDigitizer/BuildFile.xml @@ -1,6 +1,7 @@ + diff --git a/SimMuon/DTDigitizer/src/DTDriftTimeParametrization.cc b/SimMuon/DTDigitizer/src/DTDriftTimeParametrization.cc index 8e825b2d0cb63..fdd5207276deb 100644 --- a/SimMuon/DTDigitizer/src/DTDriftTimeParametrization.cc +++ b/SimMuon/DTDigitizer/src/DTDriftTimeParametrization.cc @@ -23,7 +23,7 @@ #else #include "SimMuon/DTDigitizer/src/DTDriftTimeParametrization.h" #endif -#include "DataFormats/MuonData/src/DTDriftTimeParameters.icc" +#include "DataFormats/DTRecHit/interface/DTDriftTimeParameters.icc" DTDriftTimeParametrization::DTDriftTimeParametrization() {} diff --git a/SimMuon/DTDigitizer/test/BuildFile.xml b/SimMuon/DTDigitizer/test/BuildFile.xml index 53127fafbc8ed..2351f87c02bde 100644 --- a/SimMuon/DTDigitizer/test/BuildFile.xml +++ b/SimMuon/DTDigitizer/test/BuildFile.xml @@ -11,6 +11,7 @@ + diff --git a/SimMuon/DTDigitizer/test/stubs/DTTime2DriftParametrization.cc b/SimMuon/DTDigitizer/test/stubs/DTTime2DriftParametrization.cc index 716e5f44fc793..d5c6f308632fe 100644 --- a/SimMuon/DTDigitizer/test/stubs/DTTime2DriftParametrization.cc +++ b/SimMuon/DTDigitizer/test/stubs/DTTime2DriftParametrization.cc @@ -20,10 +20,10 @@ #ifndef MB_DT_STANDALONE #include "DTTime2DriftParametrization.h" -#include "DataFormats/MuonData/src/DTDriftTimeParameters.icc" +#include "DataFormats/DTRecHit/interface/DTDriftTimeParameters.icc" #else #include "DTTime2DriftParametrization.h" -#include "DataFormats/MuonData/src/DTDriftTimeParameters.icc" +#include "DataFormats/DTRecHit/interface/DTDriftTimeParameters.icc" #endif DTTime2DriftParametrization::DTTime2DriftParametrization() {} diff --git a/SimMuon/GEMDigitizer/plugins/GEMDigiProducer.cc b/SimMuon/GEMDigitizer/plugins/GEMDigiProducer.cc index fb113b07ea172..0946fbc65017c 100644 --- a/SimMuon/GEMDigitizer/plugins/GEMDigiProducer.cc +++ b/SimMuon/GEMDigitizer/plugins/GEMDigiProducer.cc @@ -21,7 +21,6 @@ #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" #include "SimDataFormats/CrossingFrame/interface/MixCollection.h" #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" -#include "SimDataFormats/TrackerDigiSimLink/interface/StripDigiSimLink.h" #include "SimDataFormats/GEMDigiSimLink/interface/GEMDigiSimLink.h" #include "Geometry/Records/interface/MuonGeometryRecord.h" @@ -38,8 +37,6 @@ namespace CLHEP { class GEMDigiProducer : public edm::stream::EDProducer<> { public: - typedef edm::DetSetVector StripDigiSimLinks; - typedef edm::DetSetVector GEMDigiSimLinks; explicit GEMDigiProducer(const edm::ParameterSet& ps); @@ -64,7 +61,6 @@ class GEMDigiProducer : public edm::stream::EDProducer<> { GEMDigiProducer::GEMDigiProducer(const edm::ParameterSet& ps) : gemDigiModule_(std::make_unique(ps)) { produces(); - produces("GEM"); produces("GEM"); edm::Service rng; @@ -156,7 +152,6 @@ void GEMDigiProducer::produce(edm::Event& e, const edm::EventSetup& eventSetup) // Create empty output auto digis = std::make_unique(); - auto stripDigiSimLinks = std::make_unique(); auto gemDigiSimLinks = std::make_unique(); // arrange the hits by eta partition @@ -177,13 +172,11 @@ void GEMDigiProducer::produce(edm::Event& e, const edm::EventSetup& eventSetup) gemDigiModule_->simulate(roll, simHits, engine); gemDigiModule_->fillDigis(rawId, *digis); - (*stripDigiSimLinks).insert(gemDigiModule_->stripDigiSimLinks()); (*gemDigiSimLinks).insert(gemDigiModule_->gemDigiSimLinks()); } // store them in the event e.put(std::move(digis)); - e.put(std::move(stripDigiSimLinks), "GEM"); e.put(std::move(gemDigiSimLinks), "GEM"); } diff --git a/SimMuon/GEMDigitizer/plugins/ME0DigiProducer.cc b/SimMuon/GEMDigitizer/plugins/ME0DigiProducer.cc index 3fa1335d1e52c..ef2a0a119eabb 100644 --- a/SimMuon/GEMDigitizer/plugins/ME0DigiProducer.cc +++ b/SimMuon/GEMDigitizer/plugins/ME0DigiProducer.cc @@ -20,7 +20,6 @@ #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" #include "SimDataFormats/CrossingFrame/interface/MixCollection.h" #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" -#include "SimDataFormats/TrackerDigiSimLink/interface/StripDigiSimLink.h" #include "SimDataFormats/GEMDigiSimLink/interface/ME0DigiSimLink.h" #include "SimMuon/GEMDigitizer/interface/ME0DigiModelFactory.h" @@ -40,8 +39,6 @@ namespace CLHEP { class ME0DigiProducer : public edm::stream::EDProducer<> { public: - typedef edm::DetSetVector StripDigiSimLinks; - typedef edm::DetSetVector ME0DigiSimLinks; explicit ME0DigiProducer(const edm::ParameterSet& ps); @@ -64,7 +61,6 @@ ME0DigiProducer::ME0DigiProducer(const edm::ParameterSet& ps) : ME0DigiModel_{ ME0DigiModelFactory::get()->create("ME0" + ps.getParameter("digiModelString") + "Model", ps)} { produces(); - produces("ME0"); produces("ME0"); edm::Service rng; @@ -102,7 +98,6 @@ void ME0DigiProducer::produce(edm::Event& e, const edm::EventSetup& eventSetup) // Create empty output auto digis = std::make_unique(); - auto stripDigiSimLinks = std::make_unique(); auto me0DigiSimLinks = std::make_unique(); // arrange the hits by eta partition @@ -124,13 +119,11 @@ void ME0DigiProducer::produce(edm::Event& e, const edm::EventSetup& eventSetup) ME0DigiModel_->simulateSignal(roll, simHits, engine); ME0DigiModel_->simulateNoise(roll, engine); ME0DigiModel_->fillDigis(rawId, *digis); - (*stripDigiSimLinks).insert(ME0DigiModel_->stripDigiSimLinks()); (*me0DigiSimLinks).insert(ME0DigiModel_->me0DigiSimLinks()); } // store them in the event e.put(std::move(digis)); - e.put(std::move(stripDigiSimLinks), "ME0"); e.put(std::move(me0DigiSimLinks), "ME0"); } diff --git a/SimMuon/GEMDigitizer/src/ME0SimpleModel.cc b/SimMuon/GEMDigitizer/src/ME0SimpleModel.cc index 14fbe346758bf..813fd1a7fa573 100644 --- a/SimMuon/GEMDigitizer/src/ME0SimpleModel.cc +++ b/SimMuon/GEMDigitizer/src/ME0SimpleModel.cc @@ -5,6 +5,7 @@ #include "Geometry/GEMGeometry/interface/ME0EtaPartitionSpecs.h" #include "Geometry/CommonTopologies/interface/TrapezoidalStripTopology.h" #include "Geometry/GEMGeometry/interface/ME0Geometry.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" #include "CLHEP/Random/RandFlat.h" #include "CLHEP/Random/RandPoissonQ.h" diff --git a/SimMuon/MCTruth/interface/GEMHitAssociator.h b/SimMuon/MCTruth/interface/GEMHitAssociator.h index 048fbec774ac2..be538d721fdc2 100644 --- a/SimMuon/MCTruth/interface/GEMHitAssociator.h +++ b/SimMuon/MCTruth/interface/GEMHitAssociator.h @@ -9,7 +9,7 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Utilities/interface/InputTag.h" #include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h" -#include "SimDataFormats/TrackerDigiSimLink/interface/StripDigiSimLink.h" +#include "SimDataFormats/GEMDigiSimLink/interface/GEMDigiSimLink.h" #include "SimDataFormats/TrackingHit/interface/PSimHit.h" #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" @@ -32,8 +32,8 @@ class GEMHitAssociator { public: - typedef edm::DetSetVector DigiSimLinks; - typedef edm::DetSet LayerLinks; + typedef edm::DetSetVector DigiSimLinks; + typedef edm::DetSet LayerLinks; typedef std::pair SimHitIdpr; // Constructor with configurable parameters @@ -58,7 +58,7 @@ class GEMHitAssociator { edm::EDGetTokenT> GEMsimhitsXFToken_; edm::EDGetTokenT GEMsimhitsToken_; - edm::EDGetTokenT> GEMdigisimlinkToken_; + edm::EDGetTokenT> GEMdigisimlinkToken_; std::map _SimHitMap; }; diff --git a/SimMuon/MCTruth/src/GEMHitAssociator.cc b/SimMuon/MCTruth/src/GEMHitAssociator.cc index 04faaa8629b6e..248c7cb83a128 100644 --- a/SimMuon/MCTruth/src/GEMHitAssociator.cc +++ b/SimMuon/MCTruth/src/GEMHitAssociator.cc @@ -1,4 +1,5 @@ #include "SimMuon/MCTruth/interface/GEMHitAssociator.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" using namespace std; @@ -16,7 +17,7 @@ GEMHitAssociator::GEMHitAssociator(const edm::ParameterSet &conf, edm::ConsumesC GEMsimhitsToken_ = iC.consumes(GEMsimhitsTag); } - GEMdigisimlinkToken_ = iC.consumes>(GEMdigisimlinkTag); + GEMdigisimlinkToken_ = iC.consumes>(GEMdigisimlinkTag); } GEMHitAssociator::GEMHitAssociator(const edm::Event &e, @@ -82,11 +83,11 @@ std::vector GEMHitAssociator::associateRecHit(cons if (layerLinks != theDigiSimLinks->end()) { for (int i = fstrip; i < (fstrip + cls); ++i) { for (LayerLinks::const_iterator itlink = layerLinks->begin(); itlink != layerLinks->end(); ++itlink) { - int ch = static_cast(itlink->channel()); + int ch = static_cast(itlink->getStrip()); if (ch != i) continue; - SimHitIdpr currentId(itlink->SimTrackId(), itlink->eventId()); + SimHitIdpr currentId(itlink->getTrackId(), itlink->getEventId()); if (find(matched.begin(), matched.end(), currentId) == matched.end()) matched.push_back(currentId); } diff --git a/SimMuon/MCTruth/src/PSimHitMap.cc b/SimMuon/MCTruth/src/PSimHitMap.cc index 80141302df0a6..6c4cbc047f372 100644 --- a/SimMuon/MCTruth/src/PSimHitMap.cc +++ b/SimMuon/MCTruth/src/PSimHitMap.cc @@ -1,5 +1,6 @@ #include "SimDataFormats/CrossingFrame/interface/MixCollection.h" #include "SimMuon/MCTruth/interface/PSimHitMap.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" void PSimHitMap::fill(const edm::Event &e) { theMap.clear(); diff --git a/SimMuon/MCTruth/src/RPCHitAssociator.cc b/SimMuon/MCTruth/src/RPCHitAssociator.cc index 4b95e9cfa35b0..115ba41d74147 100644 --- a/SimMuon/MCTruth/src/RPCHitAssociator.cc +++ b/SimMuon/MCTruth/src/RPCHitAssociator.cc @@ -1,4 +1,5 @@ #include "SimMuon/MCTruth/interface/RPCHitAssociator.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" using namespace std; diff --git a/SimMuon/MCTruth/test/testAssociatorRecoMuon_cfg.py b/SimMuon/MCTruth/test/testAssociatorRecoMuon_cfg.py index eeb3143eb400c..47a22da062bc9 100644 --- a/SimMuon/MCTruth/test/testAssociatorRecoMuon_cfg.py +++ b/SimMuon/MCTruth/test/testAssociatorRecoMuon_cfg.py @@ -21,7 +21,7 @@ # MessageLogger process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.categories = cms.untracked.vstring('testAssociatorRecoMuon', 'muonAssociatorByHitsHelper') +process.MessageLogger.muonAssociatorByHitsHelper = dict() process.MessageLogger.cout = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(True), threshold = cms.untracked.string('INFO'), @@ -29,7 +29,7 @@ default = cms.untracked.PSet(limit = cms.untracked.int32(0)), testAssociatorRecoMuon = cms.untracked.PSet(limit = cms.untracked.int32(10000000)) ) -process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) +process.MessageLogger.cerr = cms.untracked.PSet(enable = cms.untracked.bool(False)) # Mixing Module process.load("SimGeneral.MixingModule.mixNoPU_cfi") diff --git a/SimMuon/MCTruth/test/testCosmics42X_cfg.py b/SimMuon/MCTruth/test/testCosmics42X_cfg.py index b2ce06255c0c5..0a2b616b02865 100644 --- a/SimMuon/MCTruth/test/testCosmics42X_cfg.py +++ b/SimMuon/MCTruth/test/testCosmics42X_cfg.py @@ -21,11 +21,6 @@ process.load("FWCore.MessageService.MessageLogger_cfi") #process.MessageLogger.debugModules = cms.untracked.vstring("testanalyzer","muonAssociatorByHits","process.muonTrackProducer") - -process.MessageLogger.categories = cms.untracked.vstring('testReader', 'MuonAssociatorEDProducer', 'MuonTrackProducer', - 'MuonAssociatorByHits', 'DTHitAssociator', 'RPCHitAssociator', 'MuonTruth', - 'MixingModule', 'FwkJob', 'FwkReport', 'FwkSummary', 'Root_NoDictionary') - process.MessageLogger.cerr = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(True), @@ -55,6 +50,7 @@ ) process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), noTimeStamps = cms.untracked.bool(True), # threshold = cms.untracked.string('DEBUG'), @@ -103,7 +99,7 @@ ) ) -#process.MessageLogger.statistics = cms.untracked.vstring('cout') +#process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True) #process.Tracer = cms.Service("Tracer") diff --git a/SimMuon/MCTruth/test/testMuonAssociatorEDProducer_cfg.py b/SimMuon/MCTruth/test/testMuonAssociatorEDProducer_cfg.py index 5872518a5fd91..6ce20007fdfb4 100644 --- a/SimMuon/MCTruth/test/testMuonAssociatorEDProducer_cfg.py +++ b/SimMuon/MCTruth/test/testMuonAssociatorEDProducer_cfg.py @@ -26,10 +26,6 @@ #process.MessageLogger.debugModules = cms.untracked.vstring("testanalyzer","muonAssociatorByHits","process.muonTrackProducer") -process.MessageLogger.categories = cms.untracked.vstring('testReader', 'MuonAssociatorEDProducer', 'MuonTrackProducer', - 'MuonAssociatorByHits', 'DTHitAssociator', 'RPCHitAssociator', 'MuonTruth', - 'FwkJob', 'FwkReport', 'FwkSummary', 'Root_NoDictionary') - process.MessageLogger.cerr = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(True), @@ -59,6 +55,7 @@ ) process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), noTimeStamps = cms.untracked.bool(True), # threshold = cms.untracked.string('DEBUG'), @@ -104,7 +101,7 @@ ) ) -#process.MessageLogger.statistics = cms.untracked.vstring('cout') +#process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True) #process.Tracer = cms.Service("Tracer") diff --git a/SimMuon/MCTruth/test/testReader_cfg.py b/SimMuon/MCTruth/test/testReader_cfg.py index f3394d08e5dd5..c948621073f6a 100644 --- a/SimMuon/MCTruth/test/testReader_cfg.py +++ b/SimMuon/MCTruth/test/testReader_cfg.py @@ -13,10 +13,8 @@ # MessageLogger process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.categories = cms.untracked.vstring('testReader', - 'FwkJob', 'FwkReport', 'FwkSummary', 'Root_NoDictionary') - process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), noTimeStamps = cms.untracked.bool(True), threshold = cms.untracked.string('INFO'), INFO = cms.untracked.PSet( @@ -41,13 +39,12 @@ ), Root_NoDictionary = cms.untracked.PSet( limit = cms.untracked.int32(0) - ) + ), + enableStatistics = cms.untracked.bool(True) ) -process.MessageLogger.statistics = cms.untracked.vstring('cout') - process.MessageLogger.cerr = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) + enable = cms.untracked.bool(False) ) process.testanalyzer = cms.EDAnalyzer("testReader", diff --git a/SimMuon/MCTruth/test/testSeedToTrackProducer_cfg.py b/SimMuon/MCTruth/test/testSeedToTrackProducer_cfg.py index cba52fa212a99..4fd66b71e0656 100644 --- a/SimMuon/MCTruth/test/testSeedToTrackProducer_cfg.py +++ b/SimMuon/MCTruth/test/testSeedToTrackProducer_cfg.py @@ -6,7 +6,7 @@ # MessageLogger process.load("FWCore.MessageService.MessageLogger_cfi") -'''process.MessageLogger.categories = cms.untracked.vstring('SeedToTrackProducer') +'''process.MessageLogger.SeedToTrackProducer = dict() process.MessageLogger.cout = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(True), threshold = cms.untracked.string('INFO'), diff --git a/SimMuon/RPCDigitizer/src/RPCSimAsymmetricCls.cc b/SimMuon/RPCDigitizer/src/RPCSimAsymmetricCls.cc index bef17885d2ddd..b7a1c899f8e18 100644 --- a/SimMuon/RPCDigitizer/src/RPCSimAsymmetricCls.cc +++ b/SimMuon/RPCDigitizer/src/RPCSimAsymmetricCls.cc @@ -156,6 +156,7 @@ void RPCSimAsymmetricCls::simulate(const RPCRoll* roll, std::vector veff = (getRPCSimSetUp())->getEff(rpcId.rawId()); +#ifdef EDM_ML_DEBUG std::stringstream veffstream; veffstream << "["; for (std::vector::iterator veffIt = veff.begin(); veffIt != veff.end(); ++veffIt) { @@ -164,6 +165,7 @@ void RPCSimAsymmetricCls::simulate(const RPCRoll* roll, veffstream << "]"; std::string veffstr = veffstream.str(); LogDebug("RPCSimAsymmetricCls") << "Get Eff from RPCSimSetup for detId = " << rpcId.rawId() << " :: " << veffstr; +#endif // Efficiency int centralStrip = topology.channel(entr) + 1; @@ -322,6 +324,7 @@ void RPCSimAsymmetricCls::simulateNoise(const RPCRoll* roll, CLHEP::HepRandomEng LogDebug("RPCSimAsymmetricCls") << "[RPCSimAsymmetricCls::simulateNoise] Treating DetId :: " << rpcId << " = " << rpcId.rawId() << " which has " << roll->nstrips() << " strips"; +#ifdef EDM_ML_DEBUG std::stringstream vnoisestream; vnoisestream << "["; for (std::vector::iterator vnoiseIt = vnoise.begin(); vnoiseIt != vnoise.end(); ++vnoiseIt) { @@ -331,6 +334,7 @@ void RPCSimAsymmetricCls::simulateNoise(const RPCRoll* roll, CLHEP::HepRandomEng std::string vnoisestr = vnoisestream.str(); LogDebug("RPCSimAsymmetricCls") << "Get Noise from RPCSimSetup for detId = " << rpcId.rawId() << " :: vector with " << vnoise.size() << "entries :: " << vnoisestr; +#endif unsigned int nstrips = roll->nstrips(); double area = 0.0; diff --git a/SimMuon/RPCDigitizer/src/RPCSimSetUp.cc b/SimMuon/RPCDigitizer/src/RPCSimSetUp.cc index 551a1fb6a6e74..cd0989bac13b0 100644 --- a/SimMuon/RPCDigitizer/src/RPCSimSetUp.cc +++ b/SimMuon/RPCDigitizer/src/RPCSimSetUp.cc @@ -103,25 +103,29 @@ void RPCSimSetUp::setRPCSetUp(const std::vector& vnoi unsigned int current_nStrips; LogDebug("RPCSimSetup") << "RPCSimSetUp::setRPCSetUp :: ClusterSizeItem :: begin" << std::endl; +#ifdef EDM_ML_DEBUG std::stringstream sslogclsitem; +#endif // ### ClusterSizeItem ####################################################### std::vector::const_iterator itCls; int clsCounter(1); std::vector clsVect; // ### loop for New Format (120 entries) for (itCls = vClusterSize.begin(); itCls != vClusterSize.end(); ++itCls) { - sslogclsitem << " Push back clustersize = " << itCls->clusterSize << std::endl; clsVect.push_back(((double)(itCls->clusterSize))); +#ifdef EDM_ML_DEBUG + sslogclsitem << " Push back clustersize = " << itCls->clusterSize << std::endl; sslogclsitem << "Filling cls in _mapDetCls[detId,clsVect] :: detId = " << detId; sslogclsitem << " --> will it be accepted? clsCounter = " << clsCounter << " accepted?"; sslogclsitem << " New Format ::" << ((!(clsCounter % 120)) && (clsCounter != 0)); // <dpid; _mapDetClsMap[detId] = clsVect; +#ifdef EDM_ML_DEBUG std::stringstream LogDebugClsVectString; LogDebugClsVectString << "["; for (std::vector::iterator itClsVect = clsVect.begin(); itClsVect != clsVect.end(); ++itClsVect) { @@ -137,27 +141,32 @@ void RPCSimSetUp::setRPCSetUp(const std::vector& vnoi sslogclsitem << "Filling cls in _mapDetClsMap[detId,clsVect] :: detId = " << detId; sslogclsitem << " --> will it be accepted? clsCounter = " << clsCounter << " accepted? " << ((!(clsCounter % 120)) && (clsCounter != 0)) << std::endl; +#endif clsVect.clear(); clsCounter = 0; } else { +#ifdef EDM_ML_DEBUG sslogclsitem << " --> not saved in map " << std::endl; +#endif } ++clsCounter; } // ### loop for Old Format (100 entries) for (itCls = vClusterSize.begin(); itCls != vClusterSize.end(); ++itCls) { - sslogclsitem << " Push back clustersize = " << itCls->clusterSize << std::endl; clsVect.push_back(((double)(itCls->clusterSize))); +#ifdef EDM_ML_DEBUG + sslogclsitem << " Push back clustersize = " << itCls->clusterSize << std::endl; sslogclsitem << "Filling cls in _mapDetClsMapLegacy[detId,clsVect] :: detId = " << detId; sslogclsitem << " --> will it be accepted? clsCounter = " << clsCounter << " accepted?"; sslogclsitem << " New Format ::" << ((!(clsCounter % 120)) && (clsCounter != 0)); // <dpid; _mapDetClsMapLegacy[detId] = clsVect; +#ifdef EDM_ML_DEBUG std::stringstream LogDebugClsVectString; LogDebugClsVectString << "["; for (std::vector::iterator itClsVect = clsVect.begin(); itClsVect != clsVect.end(); ++itClsVect) { @@ -173,14 +182,18 @@ void RPCSimSetUp::setRPCSetUp(const std::vector& vnoi sslogclsitem << "Filling cls in _mapDetClsMapLegacy[detId,clsVect] :: detId = " << detId; sslogclsitem << " --> will it be accepted? clsCounter = " << clsCounter << " accepted? " << ((!(clsCounter % 120)) && (clsCounter != 0)) << std::endl; +#endif clsVect.clear(); clsCounter = 0; } else { +#ifdef EDM_ML_DEBUG sslogclsitem << " --> not saved in map " << std::endl; +#endif } ++clsCounter; } // ########################################################################### +#ifdef EDM_ML_DEBUG std::string logclsitem = sslogclsitem.str(); sslogclsitem.clear(); LogDebug("RPCSimSetupClsLoopDetails") << logclsitem << std::endl; @@ -188,6 +201,7 @@ void RPCSimSetUp::setRPCSetUp(const std::vector& vnoi LogDebug("RPCSimSetup") << "RPCSimSetUp::setRPCSetUp :: NoiseItem :: begin" << std::endl; std::stringstream sslognoiseitem; +#endif // ### NoiseItem ############################################################# unsigned int count_strips = 1; unsigned int count_all = 1; @@ -207,26 +221,32 @@ void RPCSimSetUp::setRPCSetUp(const std::vector& vnoi // Test whether this roll (picked up from the conditions) is inside the RPC Geometry const RPCRoll* roll = theGeometry->roll(current_rpcId); if (roll == nullptr) { +#ifdef EDM_ML_DEBUG sslognoiseitem << "Searching for first valid detid :: current_detId = " << current_detId; sslognoiseitem << " aka " << current_rpcId << " is not in current Geometry --> Skip " << std::endl; +#endif continue; } else { +#ifdef EDM_ML_DEBUG sslognoiseitem << "Searching for first valid detid :: current_detId = " << current_detId; sslognoiseitem << " aka " << current_rpcId << " is the first (valid) roll in the current Geometry --> Accept, Assign & Quit Loop" << std::endl; +#endif current_roll = theGeometry->roll(current_rpcId); current_nStrips = current_roll->nstrips(); quitLoop = true; } } +#ifdef EDM_ML_DEBUG sslognoiseitem << "Start Position :: current_detId = " << current_detId << " aka " << current_rpcId; sslognoiseitem << " is a valid roll with pointer " << current_roll << " and has " << (current_roll ? current_roll->nstrips() : 0) << " strips" << std::endl; sslognoiseitem << " -------------------------------------------------------------------------------------------------" "------------------------------------ " << std::endl; +#endif for (std::vector::const_iterator it = vnoise.begin(); it != vnoise.end(); ++it) { // roll associated to the conditions of this strip (iterator) this_detId = it->dpid; @@ -234,31 +254,35 @@ void RPCSimSetUp::setRPCSetUp(const std::vector& vnoi // Test whether this roll (picked up from the conditions) is inside the RPC Geometry const RPCRoll* roll = theGeometry->roll(this_rpcId); if (roll == nullptr) { +#ifdef EDM_ML_DEBUG sslognoiseitem << "Inside Loop :: [" << std::setw(6) << count_all << "][" << std::setw(3) << count_strips << "] :: this_detId = " << this_detId << " aka " << this_rpcId << " which is not in current Geometry --> Skip " << std::endl; +#endif continue; } // Case 1 :: FIRST ENTRY // --------------------- if (this_detId == current_detId && count_strips == 1) { - sslognoiseitem << "RPCSimSetUp::setRPCSetUp :: NoiseItem :: case 1" << std::endl; - sslognoiseitem << this_detId << " = " << this_rpcId << " with " << roll->nstrips() << " strips" << std::endl; // fill bx in map _bxmap[current_detId] = it->time; - sslognoiseitem << "[NoiseItem :: n = " << count_all - << "] Filling time in _bxmap[detId] :: detId = " << RPCDetId(it->dpid) << " time = " << it->time - << std::endl; // clear vectors vveff.clear(); vvnoise.clear(); // fill the vectors vvnoise.push_back((it->noise)); vveff.push_back((it->eff)); +#ifdef EDM_ML_DEBUG + sslognoiseitem << "RPCSimSetUp::setRPCSetUp :: NoiseItem :: case 1" << std::endl; + sslognoiseitem << this_detId << " = " << this_rpcId << " with " << roll->nstrips() << " strips" << std::endl; + sslognoiseitem << "[NoiseItem :: n = " << count_all + << "] Filling time in _bxmap[detId] :: detId = " << RPCDetId(it->dpid) << " time = " << it->time + << std::endl; sslognoiseitem << "First Value :: [" << std::setw(6) << count_all << "][" << std::setw(3) << count_strips << "] :: this_detId = " << this_detId << " aka " << this_rpcId; sslognoiseitem << " Strip " << std::setw(3) << count_strips << " Noise = " << it->noise << " Hz/cm2" << std::endl; +#endif // update counter ++count_strips; ++count_all; @@ -266,10 +290,12 @@ void RPCSimSetUp::setRPCSetUp(const std::vector& vnoi // Case 2 :: 2ND ENTRY --> LAST-1 ENTRY // ------------------------------------ else if (this_detId == current_detId && count_strips > 1 && count_strips < current_nStrips) { +#ifdef EDM_ML_DEBUG sslognoiseitem << "RPCSimSetUp::setRPCSetUp :: NoiseItem :: case 2" << std::endl; sslognoiseitem << "Inside Loop :: [" << std::setw(6) << count_all << "][" << std::setw(3) << count_strips << "] :: this_detId = " << this_detId << " aka " << this_rpcId; sslognoiseitem << " Strip " << std::setw(3) << count_strips << " Noise = " << it->noise << " Hz/cm2" << std::endl; +#endif // fill the vectors vvnoise.push_back((it->noise)); vveff.push_back((it->eff)); @@ -281,21 +307,24 @@ void RPCSimSetUp::setRPCSetUp(const std::vector& vnoi // Case 3 :: LAST ENTRY // -------------------- else if (this_detId == current_detId && count_strips == current_nStrips) { +#ifdef EDM_ML_DEBUG sslognoiseitem << "RPCSimSetUp::setRPCSetUp :: NoiseItem :: case 3" << std::endl; - // fill last value in the vector sslognoiseitem << "Last Value :: [" << std::setw(6) << count_all << "][" << std::setw(3) << count_strips << "] :: this_detId = " << this_detId << " aka " << this_rpcId; sslognoiseitem << " Strip " << std::setw(3) << count_strips << " Noise = " << it->noise << " Hz/cm2" << std::endl; +#endif + // fill last value in the vector vvnoise.push_back((it->noise)); vveff.push_back((it->eff)); // update counter ++count_strips; ++count_all; // fill vectors into map - sslognoiseitem << " fill vectors into map" << std::endl; _mapDetIdNoise[current_detId] = vvnoise; _mapDetIdEff[current_detId] = vveff; +#ifdef EDM_ML_DEBUG + sslognoiseitem << " fill vectors into map" << std::endl; std::stringstream LogDebugNoiVectString, LogDebugEffVectString; LogDebugNoiVectString << "["; for (std::vector::iterator itNoiVect = vvnoise.begin(); itNoiVect != vvnoise.end(); ++itNoiVect) { @@ -313,12 +342,14 @@ void RPCSimSetUp::setRPCSetUp(const std::vector& vnoi << (RPCDetId(it->dpid)).rawId() << " vvnoise = " << LogDebugNoiVectStr; LogDebug("RPCSimSetup") << "Filling veff in _mapDetIdEff[detId] :: detId = " << RPCDetId(it->dpid) << " = " << (RPCDetId(it->dpid)).rawId() << " veff = " << LogDebugEffVectStr; - +#endif // look for next different detId and rename it to the current_detId // at this point we skip all the conditions for the strips that are not in this roll // and we will go to the conditions for the first strip of the next roll bool next_detId_found = false; +#ifdef EDM_ML_DEBUG sslognoiseitem << "look for next different detId" << std::endl; +#endif while (next_detId_found == 0 && it != vnoise.end() - 1) { ++it; this_detId = it->dpid; @@ -326,21 +357,27 @@ void RPCSimSetUp::setRPCSetUp(const std::vector& vnoi this_roll = theGeometry->roll(this_rpcId); if (!this_roll) continue; +#ifdef EDM_ML_DEBUG sslognoiseitem << "Inside While:: [" << std::setw(6) << count_all << "][" << std::setw(3) << count_strips << "] :: this_detId = " << this_detId << " aka " << this_rpcId << " Noise = " << it->noise << " Hz/cm2" << std::endl; +#endif ++count_strips; // ++count_all; if (this_detId != current_detId) { +#ifdef EDM_ML_DEBUG sslognoiseitem << "Different detId is found :: " << this_detId << " aka " << this_rpcId << " Noise = " << it->noise << " Hz/cm2"; +#endif // next roll is found. update current_detId to this newly found detId // and update also the number of strips current_detId = this_detId; current_rpcId = RPCDetId(current_detId); next_detId_found = true; current_nStrips = (theGeometry->roll(current_rpcId))->nstrips(); +#ifdef EDM_ML_DEBUG sslognoiseitem << " with " << current_nStrips << " strips" << std::endl; +#endif --it; // subtract one, because at the end of the loop the iterator will be increased with one // in fact the treatment for roll N stops when we find the first occurence of roll N+1 // however we want to start the treatment for roll N+1 with the first occurence of roll N+1 @@ -357,12 +394,14 @@ void RPCSimSetUp::setRPCSetUp(const std::vector& vnoi } } // ########################################################################### +#ifdef EDM_ML_DEBUG std::string lognoiseitem = sslognoiseitem.str(); sslognoiseitem.clear(); LogDebug("RPCSimSetupNoiseLoopDetails") << lognoiseitem << std::endl; LogDebug("RPCSimSetup") << "RPCSimSetUp::setRPCSetUp :: NoiseItem :: end" << std::endl; LogDebug("RPCSimSetup") << "RPCSimSetUp::setRPCSetUp :: end" << std::endl; +#endif } const std::vector& RPCSimSetUp::getNoise(uint32_t id) { diff --git a/SimMuon/RPCDigitizer/test/runRPCDigiProducer_cfg.py b/SimMuon/RPCDigitizer/test/runRPCDigiProducer_cfg.py index 79d9ee597410c..45b2d2622bb71 100644 --- a/SimMuon/RPCDigitizer/test/runRPCDigiProducer_cfg.py +++ b/SimMuon/RPCDigitizer/test/runRPCDigiProducer_cfg.py @@ -124,19 +124,11 @@ ### that can be activated independently ################################################################ process.load("FWCore.MessageLogger.MessageLogger_cfi") -## process.MessageLogger.categories.append("RPCGeometry") -process.MessageLogger.categories.append("RPCDigiProducer") -## process.MessageLogger.categories.append("RPCSimSetup") -## process.MessageLogger.categories.append("RPCSimSetupClsLoopDetails") -## process.MessageLogger.categories.append("RPCSimSetupNoiseLoopDetails") -## process.MessageLogger.categories.append("RPCSimSetupChecks") -process.MessageLogger.categories.append("RPCSynchronizer") -process.MessageLogger.categories.append("RPCDigitizer") -process.MessageLogger.categories.append("RPCSimAsymmetricCls") -## process.MessageLogger.categories.append("RPCSimAverageNoiseEffCls") process.MessageLogger.debugModules = cms.untracked.vstring("*") -process.MessageLogger.destinations = cms.untracked.vstring("cout","junk") +process.MessageLogger.cerr.enable = False +process.MessageLogger.files.junk = dict() process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), threshold = cms.untracked.string("DEBUG"), default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), diff --git a/SimPPS/Configuration/python/SimPPS_cff.py b/SimPPS/Configuration/python/SimPPS_cff.py index 92ed24fb7669d..92295d09946e8 100644 --- a/SimPPS/Configuration/python/SimPPS_cff.py +++ b/SimPPS/Configuration/python/SimPPS_cff.py @@ -3,6 +3,7 @@ # PPS Digitization from SimPPS.PPSPixelDigiProducer.RPixDetDigitizer_cfi import * from SimPPS.RPDigiProducer.RPSiDetDigitizer_cfi import * +from CalibPPS.ESProducers.ppsTopology_cff import * RPixDetDigitizerTask=cms.Task(RPixDetDigitizer) RPSiDetDigitizerTask=cms.Task(RPSiDetDigitizer) diff --git a/SimPPS/PPSPixelDigiProducer/BuildFile.xml b/SimPPS/PPSPixelDigiProducer/BuildFile.xml index ee49f845e8d7b..c652a2c295e37 100644 --- a/SimPPS/PPSPixelDigiProducer/BuildFile.xml +++ b/SimPPS/PPSPixelDigiProducer/BuildFile.xml @@ -1,5 +1,7 @@ + + + - diff --git a/SimPPS/PPSPixelDigiProducer/interface/RPixChargeShare.h b/SimPPS/PPSPixelDigiProducer/interface/RPixChargeShare.h index cf7c7aa088d3d..6eb1f2175d13b 100644 --- a/SimPPS/PPSPixelDigiProducer/interface/RPixChargeShare.h +++ b/SimPPS/PPSPixelDigiProducer/interface/RPixChargeShare.h @@ -3,18 +3,17 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include -#include "Geometry/VeryForwardGeometry/interface/CTPPSPixelSimTopology.h" +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" #include "SimPPS/PPSPixelDigiProducer/interface/RPixSignalPoint.h" class RPixChargeShare { public: - RPixChargeShare(const edm::ParameterSet ¶ms, uint32_t det_id); - std::map Share(const std::vector &charge_map); + RPixChargeShare(const edm::ParameterSet ¶ms, uint32_t det_id, const PPSPixelTopology &ppt); + std::map Share(const std::vector &charge_map, const PPSPixelTopology &ppt); private: uint32_t det_id_; std::vector signalCoupling_; - CTPPSPixelSimTopology theRPixDetTopology_; CTPPSPixelIndices pxlInd; const int pxlRowSize_ = pxlInd.getDefaultRowDetSize(); const int pxlColSize_ = pxlInd.getDefaultColDetSize(); diff --git a/SimPPS/PPSPixelDigiProducer/interface/RPixDetDigitizer.h b/SimPPS/PPSPixelDigiProducer/interface/RPixDetDigitizer.h index 07dbd6fbc95cf..b92fb529f858b 100644 --- a/SimPPS/PPSPixelDigiProducer/interface/RPixDetDigitizer.h +++ b/SimPPS/PPSPixelDigiProducer/interface/RPixDetDigitizer.h @@ -2,9 +2,6 @@ #define SimPPS_PPSPixelDigiProducer_RPix_DET_DIGITIZER_H #include "SimDataFormats/TrackingHit/interface/PSimHit.h" -#include -#include - #include "SimTracker/Common/interface/SiG4UniversalFluctuation.h" #include "SimGeneral/NoiseGenerators/interface/GaussianTailNoiseGenerator.h" @@ -17,12 +14,11 @@ #include "DataFormats/CTPPSDigi/interface/CTPPSPixelDigi.h" #include "DataFormats/CTPPSDigi/interface/CTPPSPixelDigiCollection.h" +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" #include "SimPPS/PPSPixelDigiProducer/interface/RPixPileUpSignals.h" #include "CondFormats/PPSObjects/interface/CTPPSPixelGainCalibrations.h" -#include "RecoPPS/Local/interface/CTPPSPixelGainCalibrationDBService.h" - #include "CondFormats/PPSObjects/interface/CTPPSPixelAnalysisMask.h" namespace CLHEP { @@ -34,13 +30,14 @@ class RPixDetDigitizer { RPixDetDigitizer(const edm::ParameterSet ¶ms, CLHEP::HepRandomEngine &eng, uint32_t det_id, - const edm::EventSetup &iSetup); + const PPSPixelTopology &ppt); void run(const std::vector &input, const std::vector &input_links, std::vector &output_digi, std::vector > > &output_digi_links, - const CTPPSPixelGainCalibrations *pcalibration); + const CTPPSPixelGainCalibrations *pcalibration, + const PPSPixelTopology *ppt); ~RPixDetDigitizer(); @@ -49,7 +46,6 @@ class RPixDetDigitizer { std::unique_ptr theRPixHitChargeConverter; std::unique_ptr theRPixDummyROCSimulator; - int numPixels; double theNoiseInElectrons; // Noise (RMS) in units of electrons. double thePixelThresholdInE; // Pixel noise treshold in electorns. bool noNoise; //if the nos is included diff --git a/SimPPS/PPSPixelDigiProducer/interface/RPixDummyROCSimulator.h b/SimPPS/PPSPixelDigiProducer/interface/RPixDummyROCSimulator.h index 9cfd009e67179..350919310f643 100644 --- a/SimPPS/PPSPixelDigiProducer/interface/RPixDummyROCSimulator.h +++ b/SimPPS/PPSPixelDigiProducer/interface/RPixDummyROCSimulator.h @@ -9,7 +9,6 @@ #include "DataFormats/CTPPSDigi/interface/CTPPSPixelDigiCollection.h" #include "CondFormats/PPSObjects/interface/CTPPSPixelGainCalibrations.h" #include "CondFormats/PPSObjects/interface/CTPPSPixelAnalysisMask.h" -#include "RecoPPS/Local/interface/CTPPSPixelGainCalibrationDBService.h" class RPixDummyROCSimulator { public: @@ -32,7 +31,6 @@ class RPixDummyROCSimulator { bool dead_pixels_simulation_on_; dead_pixel_set dead_pixels_; int verbosity_; - unsigned short pixels_no_; double threshold_; double electron_per_adc_; int VcaltoElectronGain_; diff --git a/SimPPS/PPSPixelDigiProducer/interface/RPixHitChargeConverter.h b/SimPPS/PPSPixelDigiProducer/interface/RPixHitChargeConverter.h index 10c5405de1b4e..890dea4a73cb1 100644 --- a/SimPPS/PPSPixelDigiProducer/interface/RPixHitChargeConverter.h +++ b/SimPPS/PPSPixelDigiProducer/interface/RPixHitChargeConverter.h @@ -5,13 +5,17 @@ #include "SimPPS/PPSPixelDigiProducer/interface/RPixLinearChargeCollectionDrifter.h" #include "SimPPS/PPSPixelDigiProducer/interface/RPixLinearChargeDivider.h" #include "SimPPS/PPSPixelDigiProducer/interface/RPixChargeShare.h" +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" class RPixHitChargeConverter { public: - RPixHitChargeConverter(const edm::ParameterSet ¶ms_, CLHEP::HepRandomEngine &eng, uint32_t det_id); + RPixHitChargeConverter(const edm::ParameterSet ¶ms_, + CLHEP::HepRandomEngine &eng, + uint32_t det_id, + const PPSPixelTopology &ppt); ~RPixHitChargeConverter() = default; - std::map processHit(const PSimHit &hit); + std::map processHit(const PSimHit &hit, const PPSPixelTopology &ppt); private: const uint32_t det_id_; diff --git a/SimPPS/PPSPixelDigiProducer/interface/RPixLinearChargeCollectionDrifter.h b/SimPPS/PPSPixelDigiProducer/interface/RPixLinearChargeCollectionDrifter.h index f1ddc6d9362b3..979b1e8a412e9 100644 --- a/SimPPS/PPSPixelDigiProducer/interface/RPixLinearChargeCollectionDrifter.h +++ b/SimPPS/PPSPixelDigiProducer/interface/RPixLinearChargeCollectionDrifter.h @@ -4,10 +4,11 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "SimPPS/PPSPixelDigiProducer/interface/RPixSignalPoint.h" #include "SimPPS/PPSPixelDigiProducer/interface/RPixEnergyDepositUnit.h" +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" class RPixLinearChargeCollectionDrifter { public: - RPixLinearChargeCollectionDrifter(const edm::ParameterSet ¶ms, uint32_t det_id); + RPixLinearChargeCollectionDrifter(const edm::ParameterSet ¶ms, uint32_t det_id, const PPSPixelTopology &ppt); std::vector Drift(const std::vector &energy_deposition); private: diff --git a/SimPPS/PPSPixelDigiProducer/plugins/BuildFile.xml b/SimPPS/PPSPixelDigiProducer/plugins/BuildFile.xml index b7aa1780988b3..3922dc1d2ef83 100644 --- a/SimPPS/PPSPixelDigiProducer/plugins/BuildFile.xml +++ b/SimPPS/PPSPixelDigiProducer/plugins/BuildFile.xml @@ -1,4 +1,5 @@ + diff --git a/SimPPS/PPSPixelDigiProducer/plugins/PPSPixelDigiAnalyzer.cc b/SimPPS/PPSPixelDigiProducer/plugins/PPSPixelDigiAnalyzer.cc index 02198a1c4eab0..c151d7ecabfc0 100644 --- a/SimPPS/PPSPixelDigiProducer/plugins/PPSPixelDigiAnalyzer.cc +++ b/SimPPS/PPSPixelDigiProducer/plugins/PPSPixelDigiAnalyzer.cc @@ -10,7 +10,6 @@ #include "SimDataFormats/TrackingHit/interface/PSimHit.h" #include "DataFormats/CTPPSDigi/interface/CTPPSPixelDigi.h" #include "DataFormats/CTPPSDigi/interface/CTPPSPixelDigiCollection.h" -#include "Geometry/VeryForwardGeometry/interface/CTPPSPixelSimTopology.h" #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" #include "SimDataFormats/CrossingFrame/interface/MixCollection.h" @@ -21,6 +20,8 @@ #include #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/GeometryVector/interface/LocalPoint.h" +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" +#include "CondFormats/DataRecord/interface/PPSPixelTopologyRcd.h" #include #include @@ -67,8 +68,8 @@ class PPSPixelDigiAnalyzer : public edm::one::EDAnalyzer psim_token; edm::EDGetTokenT> pixel_token; + edm::ESGetToken pixelTopologyToken_; - CTPPSPixelSimTopology theRPixDetTopology_; unsigned int found_corresponding_digi_count_; unsigned int cumulative_cluster_size_[3]; }; @@ -78,8 +79,7 @@ PPSPixelDigiAnalyzer::PPSPixelDigiAnalyzer(const ParameterSet &pset) hOneHitperEvent(nullptr), hOneHitperEvent2(nullptr), hOneHitperEventCenter(nullptr), - hOneHitperEvent2Center(nullptr), - theRPixDetTopology_() { + hOneHitperEvent2Center(nullptr) { label_ = pset.getUntrackedParameter("label"); verbosity_ = pset.getParameter("Verbosity"); edm::Service file; @@ -99,6 +99,7 @@ PPSPixelDigiAnalyzer::PPSPixelDigiAnalyzer(const ParameterSet &pset) psim_token = consumes(edm::InputTag("g4SimHits", "CTPPSPixelHits")); pixel_token = consumes>(edm::InputTag(label_, "")); //label=RPixDetDigitizer??? + pixelTopologyToken_ = esConsumes(); } PPSPixelDigiAnalyzer::~PPSPixelDigiAnalyzer() {} @@ -126,6 +127,8 @@ void PPSPixelDigiAnalyzer::analyze(const Event &event, const EventSetup &eventSe edm::Handle> CTPPSPixelDigis; event.getByToken(pixel_token, CTPPSPixelDigis); + edm::ESHandle thePixelTopology = eventSetup.getHandle(pixelTopologyToken_); + if (verbosity_ > 0) edm::LogInfo("PPSPixelDigiAnalyzer") << "\n=================== RPDA Starting SimHit access" << " ==================="; @@ -140,12 +143,12 @@ void PPSPixelDigiAnalyzer::analyze(const Event &event, const EventSetup &eventSe double myX = 0; double myY = 0; - theRPixDetTopology_.pixelRange(SELECTED_PIXEL_ROW, - SELECTED_PIXEL_COLUMN, - selected_pixel_lower_x, - selected_pixel_upper_x, - selected_pixel_lower_y, - selected_pixel_upper_y); + thePixelTopology->pixelRange(SELECTED_PIXEL_ROW, + SELECTED_PIXEL_COLUMN, + selected_pixel_lower_x, + selected_pixel_upper_x, + selected_pixel_lower_y, + selected_pixel_upper_y); double hit_inside_selected_pixel[2]; bool found_hit_inside_selected_pixel = false; @@ -229,7 +232,7 @@ void PPSPixelDigiAnalyzer::analyze(const Event &event, const EventSetup &eventSe double uy; unsigned int rr = di->row(); unsigned int cc = di->column(); - theRPixDetTopology_.pixelRange(rr, cc, lx, ux, ly, uy); + thePixelTopology->pixelRange(rr, cc, lx, ux, ly, uy); edm::LogInfo("PPSPixelDigiAnalyzer") << " pixel boundaries x low up, y low up " << lx << " " << ux << " " << ly << " " << uy; diff --git a/SimPPS/PPSPixelDigiProducer/plugins/PPSPixelDigiProducer.cc b/SimPPS/PPSPixelDigiProducer/plugins/PPSPixelDigiProducer.cc index 7221dde51e21f..88fd33fe8b5ce 100644 --- a/SimPPS/PPSPixelDigiProducer/plugins/PPSPixelDigiProducer.cc +++ b/SimPPS/PPSPixelDigiProducer/plugins/PPSPixelDigiProducer.cc @@ -47,11 +47,13 @@ // DB #include "CondFormats/DataRecord/interface/CTPPSPixelDAQMappingRcd.h" #include "CondFormats/DataRecord/interface/CTPPSPixelAnalysisMaskRcd.h" +#include "CondFormats/DataRecord/interface/CTPPSPixelGainCalibrationsRcd.h" #include "CondFormats/PPSObjects/interface/CTPPSPixelDAQMapping.h" #include "CondFormats/PPSObjects/interface/CTPPSPixelAnalysisMask.h" #include "CondFormats/PPSObjects/interface/CTPPSPixelGainCalibrations.h" -#include "RecoPPS/Local/interface/CTPPSPixelGainCalibrationDBService.h" +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" +#include "CondFormats/DataRecord/interface/PPSPixelTopologyRcd.h" // user include files #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" #include "SimDataFormats/TrackingHit/interface/PSimHit.h" @@ -95,12 +97,13 @@ class CTPPSPixelDigiProducer : public edm::stream::EDProducer<> { CLHEP::HepRandomEngine* rndEngine_ = nullptr; int verbosity_; - CTPPSPixelGainCalibrationDBService theGainCalibrationDB; - edm::EDGetTokenT> tokenCrossingFramePPSPixel; + edm::ESGetToken gainCalibESToken_; + edm::ESGetToken thePixelTopologyToken_; }; -CTPPSPixelDigiProducer::CTPPSPixelDigiProducer(const edm::ParameterSet& conf) : conf_(conf) { +CTPPSPixelDigiProducer::CTPPSPixelDigiProducer(const edm::ParameterSet& conf) + : conf_(conf), gainCalibESToken_(esConsumes()), thePixelTopologyToken_(esConsumes()) { produces>(); // register data to consume @@ -151,24 +154,18 @@ void CTPPSPixelDigiProducer::fillDescriptions(edm::ConfigurationDescriptions& de desc.add("RPixDeadPixelProbability", 0.001); desc.add("RPixDeadPixelSimulationOn", true); - // CTPPSPixelSimTopology - desc.add("RPixActiveEdgeSmearing", 0.020); - desc.add("RPixActiveEdgePosition", 0.150); - desc.add("mixLabel", "mix"); desc.add("InputCollection", "g4SimHitsCTPPSPixelHits"); descriptions.add("RPixDetDigitizer", desc); } -// // member functions // // ------------ method called to produce the data ------------ void CTPPSPixelDigiProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; if (!rndEngine_) { - Service rng; + edm::Service rng; if (!rng.isAvailable()) { throw cms::Exception("Configuration") << "This class requires the RandomNumberGeneratorService\n" @@ -179,7 +176,8 @@ void CTPPSPixelDigiProducer::produce(edm::Event& iEvent, const edm::EventSetup& } // get calibration DB - theGainCalibrationDB.getDB(iEvent, iSetup); + const auto& gainCalibration = iSetup.getData(gainCalibESToken_); + const auto& thePixelTopology = iSetup.getData(thePixelTopologyToken_); // Step A: Get Inputs edm::Handle> cf; @@ -187,20 +185,19 @@ void CTPPSPixelDigiProducer::produce(edm::Event& iEvent, const edm::EventSetup& iEvent.getByToken(tokenCrossingFramePPSPixel, cf); if (verbosity_) { - edm::LogInfo("PPSPixelDigiProducer") << "\n\n=================== Starting SimHit access" - << " ==================="; + edm::LogInfo("PPS") << "PixelDigiProducer \n\n=================== Starting SimHit access" + << " ==================="; MixCollection col{cf.product(), std::pair(-0, 0)}; - edm::LogInfo("PPSPixelDigiProducer") << col; MixCollection::iterator cfi; int count = 0; for (cfi = col.begin(); cfi != col.end(); cfi++) { - edm::LogInfo("PPSPixelDigiProducer") - << " Hit " << count << " has tof " << cfi->timeOfFlight() << " trackid " << cfi->trackId() << " bunchcr " - << cfi.bunch() << " trigger " << cfi.getTrigger() - << ", from EncodedEventId: " << cfi->eventId().bunchCrossing() << " " << cfi->eventId().event() - << " bcr from MixCol " << cfi.bunch(); - edm::LogInfo("PPSPixelDigiProducer") << " Hit: " << (*cfi) << " " << cfi->exitPoint(); + edm::LogInfo("PPS") << "PixelDigiProducer" + << " Hit " << count << " has tof " << cfi->timeOfFlight() << " trackid " << cfi->trackId() + << " bunchcr " << cfi.bunch() << " trigger " << cfi.getTrigger() + << ", from EncodedEventId: " << cfi->eventId().bunchCrossing() << " " + << cfi->eventId().event() << " bcr from MixCol " << cfi.bunch(); + edm::LogInfo("PPS") << " PixelDigiProducer Hit: " << (*cfi) << " " << cfi->exitPoint(); count++; } } @@ -208,7 +205,7 @@ void CTPPSPixelDigiProducer::produce(edm::Event& iEvent, const edm::EventSetup& MixCollection allRPixHits{cf.product(), std::pair(0, 0)}; if (verbosity_) - edm::LogInfo("PPSPixelDigiProducer") << "Input MixCollection size = " << allRPixHits.size(); + edm::LogInfo("PPS") << "PixelDigiProducer Input MixCollection size = " << allRPixHits.size(); //Loop on PSimHit simhit_map SimHitMap; @@ -228,16 +225,15 @@ void CTPPSPixelDigiProducer::produce(edm::Event& iEvent, const edm::EventSetup& edm::DetSet digi_collector(it->first); if (theAlgoMap.find(it->first) == theAlgoMap.end()) { - theAlgoMap[it->first] = - std::make_unique(conf_, *rndEngine_, it->first, iSetup); //a digitizer for eny detector + theAlgoMap[it->first] = std::make_unique( + conf_, *rndEngine_, it->first, thePixelTopology); //a digitizer for any detector } std::vector input_links; std::vector>> output_digi_links; // links to simhits - (theAlgoMap.find(it->first)->second) - ->run( - SimHitMap[it->first], input_links, digi_collector.data, output_digi_links, theGainCalibrationDB.getCalibs()); + theAlgoMap.at(it->first)->run( + SimHitMap[it->first], input_links, digi_collector.data, output_digi_links, &gainCalibration, &thePixelTopology); if (!digi_collector.data.empty()) { theDigiVector.push_back(digi_collector); @@ -247,7 +243,7 @@ void CTPPSPixelDigiProducer::produce(edm::Event& iEvent, const edm::EventSetup& std::unique_ptr> digi_output(new edm::DetSetVector(theDigiVector)); if (verbosity_) { - edm::LogInfo("PPSPixelDigiProducer") << "digi_output->size()=" << digi_output->size(); + edm::LogInfo("PPS") << "PixelDigiProducer digi_output->size()=" << digi_output->size(); } iEvent.put(std::move(digi_output)); diff --git a/SimPPS/PPSPixelDigiProducer/plugins/RPixDetDigitizer.cc b/SimPPS/PPSPixelDigiProducer/plugins/RPixDetDigitizer.cc index a948f0901d5a6..bda00bd4f7599 100644 --- a/SimPPS/PPSPixelDigiProducer/plugins/RPixDetDigitizer.cc +++ b/SimPPS/PPSPixelDigiProducer/plugins/RPixDetDigitizer.cc @@ -1,16 +1,11 @@ -#include -#include -#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "SimPPS/PPSPixelDigiProducer/interface/RPixDetDigitizer.h" -#include "Geometry/VeryForwardGeometry/interface/CTPPSPixelTopology.h" RPixDetDigitizer::RPixDetDigitizer(const edm::ParameterSet ¶ms, CLHEP::HepRandomEngine &eng, uint32_t det_id, - const edm::EventSetup &iSetup) + const PPSPixelTopology &ppt) : det_id_(det_id) { verbosity_ = params.getParameter("RPixVerbosity"); - numPixels = CTPPSPixelTopology().detPixelNo(); theNoiseInElectrons = params.getParameter("RPixEquivalentNoiseCharge"); thePixelThresholdInE = params.getParameter("RPixDummyROCThreshold"); noNoise = params.getParameter("RPixNoNoise"); @@ -19,7 +14,7 @@ RPixDetDigitizer::RPixDetDigitizer(const edm::ParameterSet ¶ms, theRPixPileUpSignals = std::make_unique(params, det_id_); theRPixDummyROCSimulator = std::make_unique(params, det_id_); - theRPixHitChargeConverter = std::make_unique(params, eng, det_id_); + theRPixHitChargeConverter = std::make_unique(params, eng, det_id_, ppt); } RPixDetDigitizer::~RPixDetDigitizer() {} @@ -28,18 +23,19 @@ void RPixDetDigitizer::run(const std::vector &input, const std::vector &input_links, std::vector &output_digi, std::vector > > &output_digi_links, - const CTPPSPixelGainCalibrations *pcalibrations) { + const CTPPSPixelGainCalibrations *pcalibrations, + const PPSPixelTopology *pixelTopology) { if (verbosity_) - edm::LogInfo("RPixDetDigitizer") << det_id_ << " received input.size()=" << input.size(); + edm::LogInfo("PPS") << "RPixDetDigitizer " << det_id_ << " received input.size()=" << input.size(); theRPixPileUpSignals->reset(); bool links_persistence_checked = links_persistence_ && input_links.size() == input.size(); int input_size = input.size(); for (int i = 0; i < input_size; ++i) { std::map the_pixel_charge_map; - the_pixel_charge_map = theRPixHitChargeConverter->processHit(input[i]); + the_pixel_charge_map = theRPixHitChargeConverter->processHit(input[i], *pixelTopology); if (verbosity_) - edm::LogInfo("RPixDetDigitizer") << det_id_ << " returned hits=" << the_pixel_charge_map.size(); + edm::LogInfo("PPS") << "RPixDetDigitizer " << det_id_ << " returned hits=" << the_pixel_charge_map.size(); if (links_persistence_checked) theRPixPileUpSignals->add(the_pixel_charge_map, input_links[i]); else diff --git a/SimPPS/PPSPixelDigiProducer/src/RPixChargeShare.cc b/SimPPS/PPSPixelDigiProducer/src/RPixChargeShare.cc index bae137e74bf1b..523d0a07f6f0b 100644 --- a/SimPPS/PPSPixelDigiProducer/src/RPixChargeShare.cc +++ b/SimPPS/PPSPixelDigiProducer/src/RPixChargeShare.cc @@ -3,8 +3,8 @@ #include #include -RPixChargeShare::RPixChargeShare(const edm::ParameterSet ¶ms, uint32_t det_id) - : det_id_(det_id), theRPixDetTopology_() { +RPixChargeShare::RPixChargeShare(const edm::ParameterSet ¶ms, uint32_t det_id, const PPSPixelTopology &ppt) + : det_id_(det_id) { verbosity_ = params.getParameter("RPixVerbosity"); signalCoupling_.clear(); ChargeMapFile2E_[0] = params.getParameter("ChargeMapFile2E"); @@ -17,7 +17,7 @@ RPixChargeShare::RPixChargeShare(const edm::ParameterSet ¶ms, uint32_t det_i signalCoupling_.push_back(coupling_constant_); signalCoupling_.push_back((1.0 - coupling_constant_) / 2); - no_of_pixels_ = theRPixDetTopology_.detPixelNo(); + no_of_pixels_ = ppt.getNoPixels(); double xMap, yMap; double chargeprobcollect; @@ -39,12 +39,13 @@ RPixChargeShare::RPixChargeShare(const edm::ParameterSet ¶ms, uint32_t det_i } } -std::map RPixChargeShare::Share(const std::vector &charge_map) { +std::map RPixChargeShare::Share(const std::vector &charge_map, + const PPSPixelTopology &ppt) { std::map thePixelChargeMap; if (verbosity_ > 1) - edm::LogInfo("RPixChargeShare") << det_id_ << " : Clouds to be induced= " << charge_map.size(); + edm::LogInfo("PPS") << "RPixChargeShare " << det_id_ << " : Clouds to be induced= " << charge_map.size(); - double CH = 0; + double cH = 0; for (std::vector::const_iterator i = charge_map.begin(); i != charge_map.end(); ++i) { double hit_pos_x, hit_pos_y; @@ -52,31 +53,32 @@ std::map RPixChargeShare::Share(const std::vector 16.6) { edm::LogInfo("RPixChargeShare") << "**** Attention ((*i).Position().x()+simX_width_/2.)<0||((*i).Position().x()+simX_width_/2.)>simX_width "; - edm::LogInfo("RPixChargeShare") << "(*i).Position().x() = " << (*i).Position().x(); + edm::LogInfo("PPS") << "RPixChargeShare " + << "(*i).Position().x() = " << (*i).Position().x(); continue; } if (((*i).Position().y() + 24.4 / 2.) < 0 || ((*i).Position().y() + 24.4 / 2.) > 24.4) { edm::LogInfo("RPixChargeShare") << "**** Attention ((*i).Position().y()+simY_width_/2.)<0||((*i).Position().y()+simY_width_/2.)>simY_width "; - edm::LogInfo("RPixChargeShare") << "(*i).Position().y() = " << (*i).Position().y(); + edm::LogInfo("PPS") << "RPixChargeShare " + << "(*i).Position().y() = " << (*i).Position().y(); continue; } - CTPPSPixelSimTopology::PixelInfo relevant_pixels = theRPixDetTopology_.getPixelsInvolved( - (*i).Position().x(), (*i).Position().y(), (*i).Sigma(), hit_pos_x, hit_pos_y); + PPSPixelTopology::PixelInfo relevant_pixels = + ppt.getPixelsInvolved((*i).Position().x(), (*i).Position().y(), (*i).Sigma(), hit_pos_x, hit_pos_y); double effic = relevant_pixels.effFactor(); - unsigned short pixel_no = relevant_pixels.pixelIndex(); + unsigned short pixel_no = ppt.pixelIndex(relevant_pixels); double charge_in_pixel = (*i).Charge() * effic; - CH += charge_in_pixel; + cH += charge_in_pixel; if (verbosity_ > 1) - edm::LogInfo("RPixChargeShare") << "Efficiency in detector " << det_id_ << " and pixel no " << pixel_no << " : " - << effic << " ch: " << charge_in_pixel << " CHtot: " << CH; - - // QUI SI POTREBBE INTRODURRE IL CHARGE SHARING TRA I PIXELS .................................. + edm::LogInfo("PPS") << "RPixChargeShare " + << "Efficiency in detector " << det_id_ << " and pixel no " << pixel_no << " : " << effic + << " ch: " << charge_in_pixel << " CHtot: " << cH; if (signalCoupling_[0] == 0.) { thePixelChargeMap[pixel_no] += charge_in_pixel; @@ -88,7 +90,7 @@ std::map RPixChargeShare::Share(const std::vector RPixChargeShare::Share(const std::vector #include "TRandom.h" #include @@ -12,7 +11,6 @@ RPixDummyROCSimulator::RPixDummyROCSimulator(const edm::ParameterSet ¶ms, ui doSingleCalibration_ = params.getParameter("doSingleCalibration"); dead_pixel_probability_ = params.getParameter("RPixDeadPixelProbability"); dead_pixels_simulation_on_ = params.getParameter("RPixDeadPixelSimulationOn"); - pixels_no_ = CTPPSPixelTopology().detPixelNo(); verbosity_ = params.getParameter("RPixVerbosity"); links_persistence_ = params.getParameter("CTPPSPixelDigiSimHitRelationsPersistence"); } @@ -27,7 +25,8 @@ void RPixDummyROCSimulator::ConvertChargeToHits( //one threshold per hybrid unsigned short pixel_no = i->first; if (verbosity_) - edm::LogInfo("RPixDummyROCSimulator") << "Dummy ROC adc and threshold : " << i->second << ", " << threshold_; + edm::LogInfo("PPS") << "RPixDummyROCSimulator " + << "Dummy ROC adc and threshold : " << i->second << ", " << threshold_; if (i->second > threshold_ && (!dead_pixels_simulation_on_ || dead_pixels_.find(pixel_no) == dead_pixels_.end())) { float gain = 0; float pedestal = 0; @@ -59,10 +58,12 @@ void RPixDummyROCSimulator::ConvertChargeToHits( if (links_persistence_) { output_digi_links.push_back(theSignalProvenance[pixel_no]); if (verbosity_) { - edm::LogInfo("RPixDummyROCSimulator") << "digi links size=" << theSignalProvenance[pixel_no].size(); + edm::LogInfo("PPS") << "RPixDummyROCSimulator " + << "digi links size=" << theSignalProvenance[pixel_no].size(); for (unsigned int u = 0; u < theSignalProvenance[pixel_no].size(); ++u) { - edm::LogInfo("RPixDummyROCSimulator") << " digi: particle=" << theSignalProvenance[pixel_no][u].first - << " energy [electrons]=" << theSignalProvenance[pixel_no][u].second; + edm::LogInfo("PPS") << "RPixDummyROCSimulator " + << " digi: particle=" << theSignalProvenance[pixel_no][u].first + << " energy [electrons]=" << theSignalProvenance[pixel_no][u].second; } } } diff --git a/SimPPS/PPSPixelDigiProducer/src/RPixHitChargeConverter.cc b/SimPPS/PPSPixelDigiProducer/src/RPixHitChargeConverter.cc index b451d617faa40..deec914cb1b34 100644 --- a/SimPPS/PPSPixelDigiProducer/src/RPixHitChargeConverter.cc +++ b/SimPPS/PPSPixelDigiProducer/src/RPixHitChargeConverter.cc @@ -1,22 +1,20 @@ #include "SimPPS/PPSPixelDigiProducer/interface/RPixHitChargeConverter.h" -#include "DataFormats/GeometryVector/interface/LocalPoint.h" -#include "SimPPS/PPSPixelDigiProducer/interface/RPixLinearChargeDivider.h" -#include "SimPPS/PPSPixelDigiProducer/interface/RPixLinearChargeCollectionDrifter.h" -#include "SimPPS/PPSPixelDigiProducer/interface/RPixChargeShare.h" RPixHitChargeConverter::RPixHitChargeConverter(const edm::ParameterSet ¶ms, CLHEP::HepRandomEngine &eng, - uint32_t det_id) + uint32_t det_id, + const PPSPixelTopology &ppt) : det_id_(det_id) { verbosity_ = params.getParameter("RPixVerbosity"); theRPixChargeDivider = std::make_unique(params, eng, det_id); - theRPixChargeCollectionDrifter = std::make_unique(params, det_id); - theRPixChargeShare = std::make_unique(params, det_id); + theRPixChargeCollectionDrifter = std::make_unique(params, det_id, ppt); + theRPixChargeShare = std::make_unique(params, det_id, ppt); } -std::map RPixHitChargeConverter::processHit(const PSimHit &hit) { +std::map RPixHitChargeConverter::processHit(const PSimHit &hit, const PPSPixelTopology &ppt) { std::vector ions_along_path = theRPixChargeDivider->divide(hit); if (verbosity_) - edm::LogInfo("RPixHitChargeConverter") << det_id_ << " clouds no generated on the path=" << ions_along_path.size(); - return theRPixChargeShare->Share(theRPixChargeCollectionDrifter->Drift(ions_along_path)); + edm::LogInfo("PPS") << "RPixHitChargeConverter " << det_id_ + << " clouds no generated on the path=" << ions_along_path.size(); + return theRPixChargeShare->Share(theRPixChargeCollectionDrifter->Drift(ions_along_path), ppt); } diff --git a/SimPPS/PPSPixelDigiProducer/src/RPixLinearChargeCollectionDrifter.cc b/SimPPS/PPSPixelDigiProducer/src/RPixLinearChargeCollectionDrifter.cc index ecfd92ccd97d0..a28df9920fe4c 100644 --- a/SimPPS/PPSPixelDigiProducer/src/RPixLinearChargeCollectionDrifter.cc +++ b/SimPPS/PPSPixelDigiProducer/src/RPixLinearChargeCollectionDrifter.cc @@ -1,14 +1,13 @@ #include "SimPPS/PPSPixelDigiProducer/interface/RPixLinearChargeCollectionDrifter.h" -#include "Geometry/VeryForwardGeometry/interface/CTPPSPixelTopology.h" -#include -#include -RPixLinearChargeCollectionDrifter::RPixLinearChargeCollectionDrifter(const edm::ParameterSet ¶ms, uint32_t det_id) { +RPixLinearChargeCollectionDrifter::RPixLinearChargeCollectionDrifter(const edm::ParameterSet ¶ms, + uint32_t det_id, + const PPSPixelTopology &ppt) { verbosity_ = params.getParameter("RPixVerbosity"); GeV_per_electron_ = params.getParameter("RPixGeVPerElectron"); charge_cloud_sigmas_vect_ = params.getParameter >("RPixInterSmearing"); - det_thickness_ = CTPPSPixelTopology().detThickness(); + det_thickness_ = ppt.getThickness(); det_id_ = det_id; } @@ -21,8 +20,8 @@ std::vector RPixLinearChargeCollectionDrifter::Drift( temp_[i].setSigma(getSigma_(energy_deposition[i].Position().z())); temp_[i].setCharge(energy_deposition[i].Energy() / GeV_per_electron_); if (verbosity_ > 1) { - edm::LogInfo("RPixLinearChargeCollectionDrifter") - << det_id_ << " :" << temp_[i].Position() << " " << temp_[i].Sigma() << " " << temp_[i].Charge(); + edm::LogInfo("PPS") << "RPixLinearChargeCollectionDrifter " << det_id_ << " :" << temp_[i].Position() << " " + << temp_[i].Sigma() << " " << temp_[i].Charge(); } } return temp_; diff --git a/SimPPS/PPSPixelDigiProducer/src/RPixLinearChargeDivider.cc b/SimPPS/PPSPixelDigiProducer/src/RPixLinearChargeDivider.cc index 734913db29755..000b7a691ef38 100644 --- a/SimPPS/PPSPixelDigiProducer/src/RPixLinearChargeDivider.cc +++ b/SimPPS/PPSPixelDigiProducer/src/RPixLinearChargeDivider.cc @@ -1,7 +1,7 @@ #include "SimPPS/PPSPixelDigiProducer/interface/RPixLinearChargeDivider.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/GeometryVector/interface/LocalPoint.h" #include "DataFormats/GeometryVector/interface/LocalVector.h" -#include "Geometry/VeryForwardGeometry/interface/CTPPSPixelTopology.h" RPixLinearChargeDivider::RPixLinearChargeDivider(const edm::ParameterSet& params, CLHEP::HepRandomEngine& eng, @@ -45,7 +45,7 @@ std::vector RPixLinearChargeDivider::divide(const PSimHit } if (verbosity_) { - edm::LogInfo("RPixLinearChargeDivider") << det_id_ << " charge along the track:"; + edm::LogInfo("PPS") << "RPixLinearChargeDivider " << det_id_ << " charge along the track:"; double sum = 0; for (unsigned int i = 0; i < the_energy_path_distribution_.size(); i++) { edm::LogInfo("RPixLinearChargeDivider") @@ -53,7 +53,8 @@ std::vector RPixLinearChargeDivider::divide(const PSimHit << " " << the_energy_path_distribution_[i].Position().z() << " " << the_energy_path_distribution_[i].Energy(); sum += the_energy_path_distribution_[i].Energy(); } - edm::LogInfo("RPixLinearChargeDivider") << "energy dep. sum=" << sum; + edm::LogInfo("PPS") << "RPixLinearChargeDivider " + << "energy dep. sum=" << sum; } return the_energy_path_distribution_; diff --git a/SimTracker/SiPhase2Digitizer/plugins/Pixel3DDigitizerAlgorithm.cc b/SimTracker/SiPhase2Digitizer/plugins/Pixel3DDigitizerAlgorithm.cc index 220858ae8ea8a..3d80a683a7cff 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/Pixel3DDigitizerAlgorithm.cc +++ b/SimTracker/SiPhase2Digitizer/plugins/Pixel3DDigitizerAlgorithm.cc @@ -126,10 +126,10 @@ std::vector Pixel3DDigitizerAlgorithm::diff // Check the group is near the edge of the pixel, so diffusion will // be relevant in order to migrate between pixel cells - if (std::abs(pos.x() - hpitches.first) < max_migration_radius) { + if (hpitches.first - std::abs(pos.x()) < max_migration_radius) { displ_ind = 0; pitch = hpitches.first; - } else if (std::abs(pos.y() - hpitches.second) < max_migration_radius) { + } else if (hpitches.second - std::abs(pos.y()) < max_migration_radius) { displ_ind = 1; pitch = hpitches.second; } else { @@ -175,12 +175,12 @@ std::vector Pixel3DDigitizerAlgorithm::diff float distance_edge = 0.0_um; do { std::transform(pos_moving.begin(), pos_moving.end(), do_step(i).begin(), pos_moving.begin(), std::plus()); - distance_edge = std::abs(pos_moving[displ_ind] - pitch); + distance_edge = pitch - std::abs(pos_moving[displ_ind]); // current diffusion value double sigma = std::sqrt(i * diffusion_step / distance0) * (distance0 / thickness) * sigma0; // Get the amount of charge on the neighbor pixel: note the // transformation to a Normal - float migrated_e = current_carriers * (1.0 - std::erf(distance_edge / sigma)); + float migrated_e = current_carriers * 0.5 * (1.0 - std::erf(distance_edge / sigma)); LogDebug("(super-)charge diffusion") << "step-" << i << ", Initial Ne= " << ncarriers << ", " << "r=(" << pos_moving[0] * 1.0_um_inv << ", " << pos_moving[1] * 1.0_um_inv @@ -206,7 +206,7 @@ std::vector Pixel3DDigitizerAlgorithm::diff } // Next step ++i; - } while (std::abs(distance_edge) < max_migration_radius); + } while (std::abs(distance_edge) < max_migration_radius && current_carriers > 0.5 * ncarriers); return migrated_charge; } @@ -338,6 +338,7 @@ std::vector Pixel3DDigitizerAlgorithm::drift( << "****************"; // Drift this charges on the other pixel auto mig_colpoints = drift(hit, pixdet, bfield, migrated_charges, false); + collection_points.insert(std::end(collection_points), mig_colpoints.begin(), mig_colpoints.end()); LogDebug("Pixel3DDigitizerAlgorithm::drift") << "*****************" << "DOME MIGRATION" << "****************"; diff --git a/SimTracker/SiPhase2Digitizer/test/PixelTestBeamValidator_cfg.py b/SimTracker/SiPhase2Digitizer/test/PixelTestBeamValidator_cfg.py index 6f4bd539d2af8..b8d778508ef42 100644 --- a/SimTracker/SiPhase2Digitizer/test/PixelTestBeamValidator_cfg.py +++ b/SimTracker/SiPhase2Digitizer/test/PixelTestBeamValidator_cfg.py @@ -1,9 +1,9 @@ import FWCore.ParameterSet.Config as cms from Configuration.Eras.Era_Phase2C9_cff import Phase2C9 -from Configuration.ProcessModifiers.phase2_PixelCPEGeneric_cff import phase2_PixelCPEGeneric +from Configuration.ProcessModifiers.PixelCPEGeneric_cff import PixelCPEGeneric -process = cms.Process('digiTest',Phase2C9,phase2_PixelCPEGeneric) +process = cms.Process('digiTest',Phase2C9,PixelCPEGeneric) import FWCore.ParameterSet.VarParsing as VarParsing options = VarParsing.VarParsing ("analysis") diff --git a/SimTracker/SiPixelDigitizer/test/PixelDigisTest.cc b/SimTracker/SiPixelDigitizer/test/PixelDigisTest.cc index 1408a69517340..edd80756fe045 100644 --- a/SimTracker/SiPixelDigitizer/test/PixelDigisTest.cc +++ b/SimTracker/SiPixelDigitizer/test/PixelDigisTest.cc @@ -115,6 +115,10 @@ class PixelDigisTest : public edm::EDAnalyzer { // ----------member data --------------------------- bool PRINT; edm::EDGetTokenT> tPixelDigi; + + edm::ESGetToken trackerTopoToken; + edm::ESGetToken trackerGeomToken; + #ifdef USE_SIM_LINKS edm::EDGetTokenT> tPixelDigiSimLink; #endif @@ -172,6 +176,10 @@ PixelDigisTest::PixelDigisTest(const edm::ParameterSet &iConfig) { PRINT = iConfig.getUntrackedParameter("Verbosity", false); src_ = iConfig.getParameter("src"); tPixelDigi = consumes>(src_); + + trackerTopoToken = esConsumes(); + trackerGeomToken = esConsumes(); + #ifdef USE_SIM_LINKS tPixelDigiSimLink = consumes>(src_); #endif @@ -322,8 +330,7 @@ void PixelDigisTest::beginJob() { // ------------ method called to produce the data ------------ void PixelDigisTest::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { //Retrieve tracker topology from geometry - edm::ESHandle tTopo; - iSetup.get().get(tTopo); + edm::ESHandle tTopo = iSetup.getHandle(trackerTopoToken); using namespace edm; if (PRINT) @@ -394,8 +401,7 @@ void PixelDigisTest::analyze(const edm::Event &iEvent, const edm::EventSetup &iS #endif // Get event setup (to get global transformation) - edm::ESHandle geom; - iSetup.get().get(geom); + edm::ESHandle geom = iSetup.getHandle(trackerGeomToken); const TrackerGeometry &theTracker(*geom); int numberOfDetUnits = 0; diff --git a/SimTracker/SiPixelDigitizer/test/PixelMixedSimHitsTest.cc b/SimTracker/SiPixelDigitizer/test/PixelMixedSimHitsTest.cc index 4d5fb7ed4c4d7..05ba8843ba4bd 100644 --- a/SimTracker/SiPixelDigitizer/test/PixelMixedSimHitsTest.cc +++ b/SimTracker/SiPixelDigitizer/test/PixelMixedSimHitsTest.cc @@ -74,10 +74,11 @@ class PixelMixedSimHitsTest : public edm::EDAnalyzer { private: // ----------member data --------------------------- edm::ParameterSet conf_; - edm::InputTag src_; const static bool PRINT = false; typedef std::vector vstring; vstring trackerContainers; + edm::ESGetToken trackerTopoToken; + edm::ESGetToken trackerGeomToken; // Histograms TFile *hFile; TH1F *hBunchCrossing, *htof1m, *htof0, *htof1p, *htof2p; @@ -112,6 +113,8 @@ class PixelMixedSimHitsTest : public edm::EDAnalyzer { }; // PixelMixedSimHitsTest::PixelMixedSimHitsTest(const edm::ParameterSet &iConfig) : conf_(iConfig) { + trackerTopoToken = esConsumes(); + trackerGeomToken = esConsumes(); trackerContainers.clear(); trackerContainers = iConfig.getParameter >("ROUList"); cout << " Construct PixelSimHitsTest " << endl; @@ -253,8 +256,7 @@ void PixelMixedSimHitsTest::beginJob() { // ------------ method called to produce the data ------------ void PixelMixedSimHitsTest::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { //Retrieve tracker topology from geometry - edm::ESHandle tTopo; - iSetup.get().get(tTopo); + edm::ESHandle tTopo = iSetup.getHandle(trackerTopoToken); const double PI = 3.142; @@ -263,8 +265,7 @@ void PixelMixedSimHitsTest::analyze(const edm::Event &iEvent, const edm::EventSe cout << " Analyze PixelSimHitsTest " << endl; // Get event setup (to get global transformation) - edm::ESHandle geom; - iSetup.get().get(geom); + edm::ESHandle geom = iSetup.getHandle(trackerGeomToken); const TrackerGeometry &theTracker(*geom); // Get input data diff --git a/SimTracker/SiPixelDigitizer/test/PixelSimHitsTest.cc b/SimTracker/SiPixelDigitizer/test/PixelSimHitsTest.cc index 6b2ba0b54c531..07941c6df93fc 100644 --- a/SimTracker/SiPixelDigitizer/test/PixelSimHitsTest.cc +++ b/SimTracker/SiPixelDigitizer/test/PixelSimHitsTest.cc @@ -84,6 +84,8 @@ class PixelSimHitsTest : public edm::EDAnalyzer { bool PRINT; string mode_; // select bpix/fpix edm::EDGetTokenT tPixelSimHits; + edm::ESGetToken trackerTopoToken; + edm::ESGetToken trackerGeomToken; int numEvents; double numSimHits, numSimHitsGood; @@ -122,6 +124,9 @@ PixelSimHitsTest::PixelSimHitsTest(const edm::ParameterSet &iConfig) : conf_(iCo edm::InputTag tag(src_, list_); // for the ByToken tPixelSimHits = consumes(tag); + trackerTopoToken = esConsumes(); + trackerGeomToken = esConsumes(); + mode_ = iConfig.getUntrackedParameter("mode", "bpix"); // select bpix or fpix PRINT = iConfig.getUntrackedParameter("Verbosity", false); // printout cout << " Construct PixelSimHitsTest " << endl; @@ -262,13 +267,11 @@ void PixelSimHitsTest::analyze(const edm::Event &iEvent, const edm::EventSetup & cout << " Analyze PixelSimHitsTest " << endl; // Get event setup (to get global transformation) - edm::ESHandle geom; - iSetup.get().get(geom); + edm::ESHandle geom = iSetup.getHandle(trackerGeomToken); const TrackerGeometry &theTracker(*geom); //Retrieve tracker topology from geometry (for det id) - edm::ESHandle tTopo; - iSetup.get().get(tTopo); + edm::ESHandle tTopo = iSetup.getHandle(trackerTopoToken); // Get input data int totalNumOfSimHits = 0; diff --git a/SimTracker/SiPixelDigitizer/test/PixelSimHitsTestForward.cc b/SimTracker/SiPixelDigitizer/test/PixelSimHitsTestForward.cc index a82f3ed4643d9..7574adaaee6c9 100644 --- a/SimTracker/SiPixelDigitizer/test/PixelSimHitsTestForward.cc +++ b/SimTracker/SiPixelDigitizer/test/PixelSimHitsTestForward.cc @@ -74,6 +74,9 @@ class PixelSimHitsTestForward : public edm::EDAnalyzer { // ----------member data --------------------------- const static bool PRINT = true; + edm::ESGetToken trackerTopoToken; + edm::ESGetToken trackerGeomToken; + TFile *hFile; TH1F *heloss1, *heloss2, *heloss3, *hdetunit, *hpabs, *hpid, *htof, *htid; TH1F *hpixid, *hpixsubid, *hlayerid, *hladder1id, *hladder2id, *hladder3id, *hz1id, *hz2id, *hz3id; @@ -120,6 +123,9 @@ PixelSimHitsTestForward::PixelSimHitsTestForward(const edm::ParameterSet &iConfi //daemon.operator->(); cout << " Construct PixelSimHitsTestForward " << endl; + + trackerTopoToken = esConsumes(); + trackerGeomToken = esConsumes(); } PixelSimHitsTestForward::~PixelSimHitsTestForward() { @@ -252,8 +258,7 @@ void PixelSimHitsTestForward::beginJob() { // ------------ method called to produce the data ------------ void PixelSimHitsTestForward::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { //Retrieve tracker topology from geometry - edm::ESHandle tTopo; - iSetup.get().get(tTopo); + edm::ESHandle tTopo = iSetup.getHandle(trackerTopoToken); const double PI = 3.142; @@ -262,8 +267,7 @@ void PixelSimHitsTestForward::analyze(const edm::Event &iEvent, const edm::Event cout << " Analyze PixelSimHitsTestForward " << endl; // Get event setup (to get global transformation) - edm::ESHandle geom; - iSetup.get().get(geom); + edm::ESHandle geom = iSetup.getHandle(trackerGeomToken); const TrackerGeometry &theTracker(*geom); // Get input data diff --git a/SimTracker/TrackAssociation/interface/trackHitsToClusterRefs.h b/SimTracker/TrackAssociation/interface/trackHitsToClusterRefs.h index 76a56e9f0ebd4..171a7eb6f2efe 100644 --- a/SimTracker/TrackAssociation/interface/trackHitsToClusterRefs.h +++ b/SimTracker/TrackAssociation/interface/trackHitsToClusterRefs.h @@ -10,6 +10,7 @@ #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h" #include "DataFormats/TrackerRecHit2D/interface/VectorHit.h" #include "DataFormats/TrackingRecHit/interface/TrackingRecHitFwd.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" namespace track_associator { const TrackingRecHit *getHitFromIter(trackingRecHit_iterator iter) { return &(**iter); } diff --git a/SimTracker/TrackAssociatorProducers/plugins/TrackAssociatorByPositionImpl.cc b/SimTracker/TrackAssociatorProducers/plugins/TrackAssociatorByPositionImpl.cc index 0773dc621fbe0..793a75b82aa91 100644 --- a/SimTracker/TrackAssociatorProducers/plugins/TrackAssociatorByPositionImpl.cc +++ b/SimTracker/TrackAssociatorProducers/plugins/TrackAssociatorByPositionImpl.cc @@ -116,7 +116,7 @@ double TrackAssociatorByPositionImpl::quality(const TrajectoryStateOnSurface& tr RecoToSimCollection TrackAssociatorByPositionImpl::associateRecoToSim( const edm::RefToBaseVector& tCH, const edm::RefVector& tPCH) const { - RecoToSimCollection outputCollection; + RecoToSimCollection outputCollection(productGetter_); //for each reco track find a matching tracking particle std::pair minPair; const double dQmin_default = 1542543; @@ -168,7 +168,7 @@ RecoToSimCollection TrackAssociatorByPositionImpl::associateRecoToSim( SimToRecoCollection TrackAssociatorByPositionImpl::associateSimToReco( const edm::RefToBaseVector& tCH, const edm::RefVector& tPCH) const { - SimToRecoCollection outputCollection; + SimToRecoCollection outputCollection(productGetter_); //for each tracking particle, find matching tracks. std::pair minPair; diff --git a/SimTracker/TrackAssociatorProducers/plugins/TrackAssociatorByPositionImpl.h b/SimTracker/TrackAssociatorProducers/plugins/TrackAssociatorByPositionImpl.h index 252ed66635e74..d03f57c8e34db 100644 --- a/SimTracker/TrackAssociatorProducers/plugins/TrackAssociatorByPositionImpl.h +++ b/SimTracker/TrackAssociatorProducers/plugins/TrackAssociatorByPositionImpl.h @@ -21,6 +21,7 @@ #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h" #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" +#include "DataFormats/Common/interface/EDProductGetter.h" #include @@ -33,7 +34,8 @@ class TrackAssociatorByPositionImpl : public reco::TrackToTrackingParticleAssoci typedef std::vector SimHitTPAssociationList; enum class Method { chi2, dist, momdr, posdr }; - TrackAssociatorByPositionImpl(const TrackingGeometry* geo, + TrackAssociatorByPositionImpl(edm::EDProductGetter const& productGetter, + const TrackingGeometry* geo, const Propagator* prop, const SimHitTPAssociationList* assocList, double qMinCut, @@ -42,7 +44,8 @@ class TrackAssociatorByPositionImpl : public reco::TrackToTrackingParticleAssoci Method method, bool minIfNoMatch, bool considerAllSimHits) - : theGeometry(geo), + : productGetter_(&productGetter), + theGeometry(geo), thePropagator(prop), theSimHitsTPAssoc(assocList), theQminCut(qMinCut), @@ -65,6 +68,7 @@ class TrackAssociatorByPositionImpl : public reco::TrackToTrackingParticleAssoci private: double quality(const TrajectoryStateOnSurface&, const TrajectoryStateOnSurface&) const; + edm::EDProductGetter const* productGetter_; const TrackingGeometry* theGeometry; const Propagator* thePropagator; const SimHitTPAssociationList* theSimHitsTPAssoc; diff --git a/SimTracker/TrackAssociatorProducers/plugins/TrackAssociatorByPositionProducer.cc b/SimTracker/TrackAssociatorProducers/plugins/TrackAssociatorByPositionProducer.cc index 4b4c116c306af..24748ee050e5a 100644 --- a/SimTracker/TrackAssociatorProducers/plugins/TrackAssociatorByPositionProducer.cc +++ b/SimTracker/TrackAssociatorProducers/plugins/TrackAssociatorByPositionProducer.cc @@ -121,7 +121,8 @@ void TrackAssociatorByPositionProducer::produce(edm::StreamID, iSetup.get().get(theG); std::unique_ptr impl{ - new TrackAssociatorByPositionImpl(theG.product(), + new TrackAssociatorByPositionImpl(iEvent.productGetter(), + theG.product(), theP.product(), assocList.product(), theQminCut, diff --git a/SimTracker/TrackTriggerAssociation/interface/TTClusterAssociationMap.h b/SimTracker/TrackTriggerAssociation/interface/TTClusterAssociationMap.h index 3c61c14b7b44a..698225829a3bc 100644 --- a/SimTracker/TrackTriggerAssociation/interface/TTClusterAssociationMap.h +++ b/SimTracker/TrackTriggerAssociation/interface/TTClusterAssociationMap.h @@ -1,13 +1,16 @@ /*! \class TTClusterAssociationMap - * \brief Class to store the MC truth of L1 Track Trigger clusters - * \details After moving from SimDataFormats to DataFormats, - * the template structure of the class was maintained - * in order to accomodate any types other than PixelDigis - * in case there is such a need in the future. + * \brief Stores association of Truth Particles (TP) to L1 Track-Trigger Clusters + * + * \details Contains two maps. One associates each cluster to a vector + * of all TPs that made its hits. The other associates each TP + * to a vector of all clusters it contributed to. + * + * (The template structure is used to accomodate types + * other than PixelDigis, in case they are needed in future). * * \author Nicola Pozzobon * \date 2013, Jul 19 - * + * (tidy up: Ian Tomalin, 2020) */ #ifndef L1_TRACK_TRIGGER_CLUSTER_ASSOCIATION_FORMAT_H @@ -15,6 +18,8 @@ #include "DataFormats/Common/interface/Ref.h" #include "DataFormats/Common/interface/Ptr.h" +#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" +#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" #include "DataFormats/Common/interface/DetSet.h" #include "DataFormats/Common/interface/DetSetVector.h" #include "DataFormats/Common/interface/DetSetVectorNew.h" @@ -29,6 +34,12 @@ #include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h" #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" +// Templated aliases +template +using MapClusToVecTP = std::map, std::vector>; +template +using MapTPToVecClus = std::map>>; + template class TTClusterAssociationMap { public: @@ -38,51 +49,47 @@ class TTClusterAssociationMap { /// Destructor ~TTClusterAssociationMap(); - /// Data members: getABC( ... ) - /// Helper methods: findABC( ... ) + /// Get/set cluster <-> truth association maps - /// Maps - std::map >, TTCluster >, std::vector > > - getTTClusterToTrackingParticlesMap() const { - return clusterToTrackingParticleVectorMap; - } - std::map, std::vector >, TTCluster > > > - getTrackingParticleToTTClustersMap() const { - return trackingParticleToClusterVectorMap; - } + const MapClusToVecTP& getTTClusterToTrackingParticlesMap() const { return clusterToTrackingParticleVectorMap_; } + const MapTPToVecClus& getTrackingParticleToTTClustersMap() const { return trackingParticleToClusterVectorMap_; } - void setTTClusterToTrackingParticlesMap(std::map >, TTCluster >, - std::vector > > aMap) { - clusterToTrackingParticleVectorMap = aMap; - } - void setTrackingParticleToTTClustersMap( - std::map, std::vector >, TTCluster > > > - aMap) { - trackingParticleToClusterVectorMap = aMap; - } + void setTTClusterToTrackingParticlesMap(const MapClusToVecTP& aMap) { clusterToTrackingParticleVectorMap_ = aMap; } + void setTrackingParticleToTTClustersMap(const MapTPToVecClus& aMap) { trackingParticleToClusterVectorMap_ = aMap; } + + /// Get all TPs associated to a cluster + const std::vector& findTrackingParticlePtrs(TTClusterRefT aCluster) const; + + /// Get main TP associated to a cluster. (Non-NULL if isGenuine() below is true). + const TrackingParticlePtr& findTrackingParticlePtr(TTClusterRefT aCluster) const; - /// Operations - std::vector > findTrackingParticlePtrs( - edm::Ref >, TTCluster > aCluster) const; - edm::Ptr findTrackingParticlePtr( - edm::Ref >, TTCluster > aCluster) const; - std::vector >, TTCluster > > findTTClusterRefs( - edm::Ptr aTrackingParticle) const; + // Get all clusters associated to TP. + const std::vector>& findTTClusterRefs(TrackingParticlePtr aTrackingParticle) const; - /// MC Truth methods - bool isGenuine(edm::Ref >, TTCluster > aCluster) const; - bool isCombinatoric(edm::Ref >, TTCluster > aCluster) const; - bool isUnknown(edm::Ref >, TTCluster > aCluster) const; + ///--- Get quality of L1 cluster based on truth info. + /// (exactly 1 of following 3 functions is always true) + + /// Cluster "genuine": i.e. cluster associated to exactly 1 TP. + /// (If other TPs are associated, but have in total < 1% of Pt of main TP, + /// or if they are null, then they are neglected here). + bool isGenuine(TTClusterRefT aCluster) const; + /// Cluster "unknown": i.e. not associated with any TP. + bool isUnknown(TTClusterRefT aCluster) const; + /// Cluster is not "genuine" or "unknown". + bool isCombinatoric(TTClusterRefT aCluster) const; private: /// Data members - std::map >, TTCluster >, std::vector > > - clusterToTrackingParticleVectorMap; - std::map, std::vector >, TTCluster > > > - trackingParticleToClusterVectorMap; + MapClusToVecTP clusterToTrackingParticleVectorMap_; + MapTPToVecClus trackingParticleToClusterVectorMap_; int nclus; + // Allow functions to return reference to null. + static const TrackingParticlePtr nullTrackingParticlePtr_; + static const std::vector nullVecTrackingParticlePtr_; + static const std::vector> nullVecClusterRef_; + }; /// Close class /*! \brief Implementation of methods @@ -92,13 +99,19 @@ class TTClusterAssociationMap { * in the source file. */ +// Static constant data members. +template +const TrackingParticlePtr TTClusterAssociationMap::nullTrackingParticlePtr_; +template +const std::vector TTClusterAssociationMap::nullVecTrackingParticlePtr_; +template +const std::vector> TTClusterAssociationMap::nullVecClusterRef_; + /// Default Constructor /// NOTE: to be used with setSomething(...) methods template TTClusterAssociationMap::TTClusterAssociationMap() { /// Set default data members - clusterToTrackingParticleVectorMap.clear(); - trackingParticleToClusterVectorMap.clear(); nclus = 0; } @@ -108,27 +121,32 @@ TTClusterAssociationMap::~TTClusterAssociationMap() {} /// Operations template -std::vector >, TTCluster > > -TTClusterAssociationMap::findTTClusterRefs(edm::Ptr aTrackingParticle) const { - if (trackingParticleToClusterVectorMap.find(aTrackingParticle) != trackingParticleToClusterVectorMap.end()) { - return trackingParticleToClusterVectorMap.find(aTrackingParticle)->second; +const std::vector>& TTClusterAssociationMap::findTTClusterRefs( + TrackingParticlePtr aTrackingParticle) const { + if (trackingParticleToClusterVectorMap_.find(aTrackingParticle) != trackingParticleToClusterVectorMap_.end()) { + return trackingParticleToClusterVectorMap_.find(aTrackingParticle)->second; + } else { + return nullVecClusterRef_; } - - std::vector >, TTCluster > > tempVector; - tempVector.clear(); - return tempVector; } template -std::vector > TTClusterAssociationMap::findTrackingParticlePtrs( - edm::Ref >, TTCluster > aCluster) const { - if (clusterToTrackingParticleVectorMap.find(aCluster) != clusterToTrackingParticleVectorMap.end()) { - return clusterToTrackingParticleVectorMap.find(aCluster)->second; +const std::vector& TTClusterAssociationMap::findTrackingParticlePtrs( + TTClusterRefT aCluster) const { + if (clusterToTrackingParticleVectorMap_.find(aCluster) != clusterToTrackingParticleVectorMap_.end()) { + return clusterToTrackingParticleVectorMap_.find(aCluster)->second; + } else { + return nullVecTrackingParticlePtr_; } +} - std::vector > tempVector; - tempVector.clear(); - return tempVector; +template +const TrackingParticlePtr& TTClusterAssociationMap::findTrackingParticlePtr(TTClusterRefT aCluster) const { + if (this->isGenuine(aCluster)) { + return this->findTrackingParticlePtrs(aCluster).at(0); + } else { + return nullTrackingParticlePtr_; + } } /// MC truth @@ -137,6 +155,8 @@ std::vector > TTClusterAssociationMap::findTrackin /// N = number of NULL TP pointers /// D = number of GOOD TP pointers different from each other /// +/// OLD DEFINITION +/// /// N / D--> | 0 | 1 | >1 /// ---------------------- /// 0 | U | G | C @@ -144,19 +164,19 @@ std::vector > TTClusterAssociationMap::findTrackin /// >0 | U | C | C /// -/// NEW SV 060617 +/// NEW DEFINITION SV 060617 /// -/// N / D--> | 0 | 1 | >1 (with 1 TP getting >99 of the total pT) | >1 +/// N / D--> | 0 | 1 | >1 (with 1 TP getting >99% of the total pT) | >1 /// ------------------------------------------------------------------- -/// 0 | U | G | G | C +/// 0 | U | G | G | C /// ------------------------------------------------------------------- -/// >0 | U | G | G | C +/// >0 | U | G | G | C /// template -bool TTClusterAssociationMap::isGenuine(edm::Ref >, TTCluster > aCluster) const { +bool TTClusterAssociationMap::isGenuine(TTClusterRefT aCluster) const { /// Get the TrackingParticles - std::vector > theseTrackingParticles = this->findTrackingParticlePtrs(aCluster); + const std::vector& theseTrackingParticles = this->findTrackingParticlePtrs(aCluster); /// If the vector is empty, then the cluster is UNKNOWN if (theseTrackingParticles.empty()) @@ -174,7 +194,7 @@ bool TTClusterAssociationMap::isGenuine(edm::Ref& curTP = tp; + const TrackingParticlePtr& curTP = tp; /// Count the NULL TrackingParticles if (curTP.isNull()) { @@ -191,7 +211,7 @@ bool TTClusterAssociationMap::isGenuine(edm::Ref curTP = theseTrackingParticles.at(itp); + TrackingParticlePtr curTP = theseTrackingParticles.at(itp); /// Count the NULL TrackingParticles if (tp_mom.at(itp) <= 0.01 * tp_tot) { @@ -212,9 +232,9 @@ bool TTClusterAssociationMap::isGenuine(edm::Ref -bool TTClusterAssociationMap::isUnknown(edm::Ref >, TTCluster > aCluster) const { +bool TTClusterAssociationMap::isUnknown(TTClusterRefT aCluster) const { /// Get the TrackingParticles - std::vector > theseTrackingParticles = this->findTrackingParticlePtrs(aCluster); + const std::vector& theseTrackingParticles = this->findTrackingParticlePtrs(aCluster); /// If the vector is empty, then the cluster is UNKNOWN if (theseTrackingParticles.empty()) @@ -227,7 +247,7 @@ bool TTClusterAssociationMap::isUnknown(edm::Ref curTP = theseTrackingParticles.at(itp); + TrackingParticlePtr curTP = theseTrackingParticles.at(itp); /// Count the non-NULL TrackingParticles if (!curTP.isNull()) { @@ -247,10 +267,9 @@ bool TTClusterAssociationMap::isUnknown(edm::Ref -bool TTClusterAssociationMap::isCombinatoric( - edm::Ref >, TTCluster > aCluster) const { +bool TTClusterAssociationMap::isCombinatoric(TTClusterRefT aCluster) const { /// Get the TrackingParticles - std::vector > theseTrackingParticles = this->findTrackingParticlePtrs(aCluster); + const std::vector& theseTrackingParticles = this->findTrackingParticlePtrs(aCluster); /// If the vector is empty, then the cluster is UNKNOWN if (theseTrackingParticles.empty()) @@ -272,7 +291,7 @@ bool TTClusterAssociationMap::isCombinatoric( /// Loop over the TrackingParticles for (unsigned int itp = 0; itp < theseTrackingParticles.size(); itp++) { /// Get the TrackingParticle - edm::Ptr curTP = theseTrackingParticles.at(itp); + TrackingParticlePtr curTP = theseTrackingParticles.at(itp); /// Count the NULL TrackingParticles if (curTP.isNull()) { @@ -295,15 +314,4 @@ bool TTClusterAssociationMap::isCombinatoric( return (goodDifferentTPs > 1); } -template -edm::Ptr TTClusterAssociationMap::findTrackingParticlePtr( - edm::Ref >, TTCluster > aCluster) const { - if (this->isGenuine(aCluster)) { - return this->findTrackingParticlePtrs(aCluster).at(0); - } - - edm::Ptr* temp = new edm::Ptr(); - return *temp; -} - #endif diff --git a/SimTracker/TrackTriggerAssociation/interface/TTStubAssociationMap.h b/SimTracker/TrackTriggerAssociation/interface/TTStubAssociationMap.h index b0d0ee293aee0..33ffe9daf46e9 100644 --- a/SimTracker/TrackTriggerAssociation/interface/TTStubAssociationMap.h +++ b/SimTracker/TrackTriggerAssociation/interface/TTStubAssociationMap.h @@ -1,13 +1,18 @@ /*! \class TTStubAssociationMap - * \brief Class to store the MC truth of L1 Track Trigger stubs - * \details After moving from SimDataFormats to DataFormats, - * the template structure of the class was maintained - * in order to accomodate any types other than PixelDigis - * in case there is such a need in the future. + * \brief Stores association of Truth Particles (TP) to L1 Track-Trigger Stubs + * + * \details Contains two maps. One associates each stub to its principle TP. + * (i.e. Not to all TP that contributed to it). + * The other associates each TP to a vector of all stubs + * it contributed to. The two maps are therefore not + * forward-backward symmetric. + * + * (The template structure is used to accomodate types + * other than PixelDigis, in case they are needed in future). * * \author Nicola Pozzobon * \date 2013, Jul 19 - * + * (tidy up: Ian Tomalin, 2020) */ #ifndef L1_TRACK_TRIGGER_STUB_ASSOCIATION_FORMAT_H @@ -16,6 +21,8 @@ #include "DataFormats/Common/interface/Ref.h" #include "DataFormats/Common/interface/RefProd.h" #include "DataFormats/Common/interface/Ptr.h" +#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" +#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" #include "DataFormats/Common/interface/DetSet.h" #include "DataFormats/Common/interface/DetSetVector.h" #include "DataFormats/Common/interface/DetSetVectorNew.h" @@ -32,6 +39,12 @@ #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" #include "SimTracker/TrackTriggerAssociation/interface/TTClusterAssociationMap.h" +// Templated aliases +template +using MapStubToTP = std::map, TrackingParticlePtr>; +template +using MapTPToVecStub = std::map>>; + template class TTStubAssociationMap { public: @@ -41,48 +54,59 @@ class TTStubAssociationMap { /// Destructor ~TTStubAssociationMap(); - /// Data members: getABC( ... ) - /// Helper methods: findABC( ... ) + /// Get/set stub <-> truth association maps - /// Maps - std::map >, TTStub >, edm::Ptr > - getTTStubToTrackingParticleMap() const { - return stubToTrackingParticleMap; - } - std::map, std::vector >, TTStub > > > - getTrackingParticleToTTStubsMap() const { - return trackingParticleToStubVectorMap; - } + const MapStubToTP& getTTStubToTrackingParticleMap() const { return stubToTrackingParticleMap_; } + const MapTPToVecStub& getTrackingParticleToTTStubsMap() const { return trackingParticleToStubVectorMap_; } - void setTTStubToTrackingParticleMap( - std::map >, TTStub >, edm::Ptr > aMap) { - stubToTrackingParticleMap = aMap; - } - void setTrackingParticleToTTStubsMap( - std::map, std::vector >, TTStub > > > aMap) { - trackingParticleToStubVectorMap = aMap; - } - void setTTClusterAssociationMap(edm::RefProd > aCluAssoMap) { - theClusterAssociationMap = aCluAssoMap; - } + void setTTStubToTrackingParticleMap(const MapStubToTP& aMap) { stubToTrackingParticleMap_ = aMap; } + void setTrackingParticleToTTStubsMap(const MapTPToVecStub& aMap) { trackingParticleToStubVectorMap_ = aMap; } - /// Operations - edm::Ptr findTrackingParticlePtr(edm::Ref >, TTStub > aStub) const; - std::vector >, TTStub > > findTTStubRefs( - edm::Ptr aTrackingParticle) const; + /// Set cluster <-> truth association object. + void setTTClusterAssociationMap(edm::RefProd> aCluAssoMap) { + theClusterAssociationMap_ = aCluAssoMap; + } - /// MC Truth methods - bool isGenuine(edm::Ref >, TTStub > aStub) const; - bool isCombinatoric(edm::Ref >, TTStub > aStub) const; - bool isUnknown(edm::Ref >, TTStub > aStub) const; + /// Get principle TP associated to a stub. (Non-NULL if isGenuine() below is true). + /// (N.B. There is no function returning all TP associated to a stub). + /// (P.S. As this function only returns principle TP, it is not used when constructing + /// the TTTrackAssociationMap). + const TrackingParticlePtr& findTrackingParticlePtr(TTStubRefT aStub) const; + + /// Get all stubs associated to a TP. + /// (Even if the TP just contributes to one cluster in stub, + /// and even if their are other such TP, it is still listed here). + const std::vector>& findTTStubRefs(TrackingParticlePtr aTrackingParticle) const; + + ///--- Get quality of stub based on truth info. + /// (N.B. Both genuine & combinatoric stubs contribute to "genuine" L1 tracks + /// associated by TTTrackAssociationMap). + /// (exactly 1 of following 3 functions is always true) + + /// If both clusters are unknown, the stub is "unknown". + /// If only one cluster is unknown, the stub is combinatoric. + /// If both clusters are genuine, and are associated to the same (main) TrackingParticle, + /// the stub is "genuine". + /// If both clusters are genuine, but are associated to different (main) TrackingParticles, + /// the stub is "combinatoric". + /// If one cluster is combinatoric and the other is genuine/combinatoric, and they both share exactly + /// one TrackingParticle in common, then the stub is "genuine". (The clusters can have other + /// TrackingParticles besides the shared one, as long as these are not shared). If instead the clusters + /// share 0 or ≥2 TrackingParticles in common, then the stub is "combinatoric". + + bool isGenuine(TTStubRefT aStub) const; + bool isCombinatoric(TTStubRefT aStub) const; + bool isUnknown(TTStubRefT aStub) const; private: /// Data members - std::map >, TTStub >, edm::Ptr > - stubToTrackingParticleMap; - std::map, std::vector >, TTStub > > > - trackingParticleToStubVectorMap; - edm::RefProd > theClusterAssociationMap; + MapStubToTP stubToTrackingParticleMap_; + MapTPToVecStub trackingParticleToStubVectorMap_; + edm::RefProd> theClusterAssociationMap_; + + // Allow functions to return reference to null. + static const TrackingParticlePtr nullTrackingParticlePtr_; + static const std::vector> nullVecStubRef_; }; /// Close class @@ -93,15 +117,17 @@ class TTStubAssociationMap { * in the source file. */ +// Static constant data members. +template +const TrackingParticlePtr TTStubAssociationMap::nullTrackingParticlePtr_; +template +const std::vector> TTStubAssociationMap::nullVecStubRef_; + /// Default Constructor /// NOTE: to be used with setSomething(...) methods template TTStubAssociationMap::TTStubAssociationMap() { /// Set default data members - stubToTrackingParticleMap.clear(); - trackingParticleToStubVectorMap.clear(); - edm::RefProd >* aRefProd = new edm::RefProd >(); - theClusterAssociationMap = *aRefProd; } /// Destructor @@ -110,32 +136,26 @@ TTStubAssociationMap::~TTStubAssociationMap() {} /// Operations template -edm::Ptr TTStubAssociationMap::findTrackingParticlePtr( - edm::Ref >, TTStub > aStub) const { - if (stubToTrackingParticleMap.find(aStub) != stubToTrackingParticleMap.end()) { - return stubToTrackingParticleMap.find(aStub)->second; +const TrackingParticlePtr& TTStubAssociationMap::findTrackingParticlePtr(TTStubRefT aStub) const { + if (stubToTrackingParticleMap_.find(aStub) != stubToTrackingParticleMap_.end()) { + return stubToTrackingParticleMap_.find(aStub)->second; + } else { + return nullTrackingParticlePtr_; } - - /// Default: return NULL - //edm::Ptr< TrackingParticle >* temp = new edm::Ptr< TrackingParticle >(); - return edm::Ptr(); } template -std::vector >, TTStub > > TTStubAssociationMap::findTTStubRefs( - edm::Ptr aTrackingParticle) const { - if (trackingParticleToStubVectorMap.find(aTrackingParticle) != trackingParticleToStubVectorMap.end()) { - return trackingParticleToStubVectorMap.find(aTrackingParticle)->second; +const std::vector>& TTStubAssociationMap::findTTStubRefs(TrackingParticlePtr aTrackingParticle) const { + if (trackingParticleToStubVectorMap_.find(aTrackingParticle) != trackingParticleToStubVectorMap_.end()) { + return trackingParticleToStubVectorMap_.find(aTrackingParticle)->second; + } else { + return nullVecStubRef_; } - - std::vector >, TTStub > > tempVector; - tempVector.clear(); - return tempVector; } /// MC truth template -bool TTStubAssociationMap::isGenuine(edm::Ref >, TTStub > aStub) const { +bool TTStubAssociationMap::isGenuine(TTStubRefT aStub) const { /// Check if there is a SimTrack if ((this->findTrackingParticlePtr(aStub)).isNull()) return false; @@ -144,7 +164,7 @@ bool TTStubAssociationMap::isGenuine(edm::Ref } template -bool TTStubAssociationMap::isCombinatoric(edm::Ref >, TTStub > aStub) const { +bool TTStubAssociationMap::isCombinatoric(TTStubRefT aStub) const { /// Defined by exclusion if (this->isGenuine(aStub)) return false; @@ -156,17 +176,16 @@ bool TTStubAssociationMap::isCombinatoric(edm::Ref -bool TTStubAssociationMap::isUnknown(edm::Ref >, TTStub > aStub) const { +bool TTStubAssociationMap::isUnknown(TTStubRefT aStub) const { /// UNKNOWN means that both clusters are unknown - //std::vector< edm::Ref< edmNew::DetSetVector< TTCluster< T > >, TTCluster< T > > > theseClusters = aStub->getClusterRefs(); /// Sanity check - if (theClusterAssociationMap.isNull()) { + if (theClusterAssociationMap_.isNull()) { return true; } - if (theClusterAssociationMap->isUnknown(aStub->clusterRef(0)) && - theClusterAssociationMap->isUnknown(aStub->clusterRef(1))) + if (theClusterAssociationMap_->isUnknown(aStub->clusterRef(0)) && + theClusterAssociationMap_->isUnknown(aStub->clusterRef(1))) return true; return false; diff --git a/SimTracker/TrackTriggerAssociation/interface/TTTrackAssociationMap.h b/SimTracker/TrackTriggerAssociation/interface/TTTrackAssociationMap.h index c1478740a3277..f4bb61bc78bb5 100644 --- a/SimTracker/TrackTriggerAssociation/interface/TTTrackAssociationMap.h +++ b/SimTracker/TrackTriggerAssociation/interface/TTTrackAssociationMap.h @@ -1,13 +1,18 @@ /*! \class TTTrackAssociationMap - * \brief Class to store the MC truth of L1 Track Trigger tracks - * \details After moving from SimDataFormats to DataFormats, - * the template structure of the class was maintained - * in order to accomodate any types other than PixelDigis - * in case there is such a need in the future. + * \brief Stores association of Truth Particles (TP) to L1 Track-Trigger Tracks + * + * \details Contains two maps. One associates each L1 track its principle TP. + * (i.e. Not to all TP that contributed to it). + * The other associates each TP to a vector of all L1 tracks + * it contributed to. The two maps are therefore not + * forward-backward symmetric. + * + * (The template structure is used to accomodate types + * other than PixelDigis, in case they are needed in future). * * \author Nicola Pozzobon * \date 2013, Jul 19 - * + * (tidy up: Ian Tomalin, 2020) */ #ifndef L1_TRACK_TRIGGER_TRACK_ASSOCIATION_FORMAT_H @@ -15,6 +20,8 @@ #include "DataFormats/Common/interface/Ref.h" #include "DataFormats/Common/interface/Ptr.h" +#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" +#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" #include "DataFormats/Common/interface/DetSet.h" #include "DataFormats/Common/interface/DetSetVector.h" #include "DataFormats/Common/interface/DetSetVectorNew.h" @@ -22,7 +29,6 @@ #include "DataFormats/Phase2TrackerDigi/interface/Phase2TrackerDigi.h" #include "DataFormats/GeometryCommonDetAlgo/interface/MeasurementPoint.h" #include "DataFormats/GeometryVector/interface/GlobalPoint.h" /// NOTE: this is needed even if it seems not -#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" #include "SimDataFormats/TrackerDigiSimLink/interface/PixelDigiSimLink.h" #include "SimDataFormats/Track/interface/SimTrack.h" #include "SimDataFormats/Track/interface/SimTrackContainer.h" @@ -30,6 +36,12 @@ #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" #include "SimTracker/TrackTriggerAssociation/interface/TTStubAssociationMap.h" +// Templated aliases +template +using MapL1TrackToTP = std::map, TrackingParticlePtr>; +template +using MapTPToVecL1Track = std::map>>; + template class TTTrackAssociationMap { public: @@ -39,49 +51,64 @@ class TTTrackAssociationMap { /// Destructor ~TTTrackAssociationMap(); - /// Data members: getABC( ... ) - /// Helper methods: findABC( ... ) - - /// Maps - std::map >, edm::Ptr > getTTTrackToTrackingParticleMap() const { - return trackToTrackingParticleMap; - } - std::map, std::vector > > > getTrackingParticleToTTTracksMap() const { - return trackingParticleToTrackVectorMap; - } + /// Get/set stub <-> truth association maps - void setTTTrackToTrackingParticleMap(std::map >, edm::Ptr > aMap) { - trackToTrackingParticleMap = aMap; - } - void setTrackingParticleToTTTracksMap( - std::map, std::vector > > > aMap) { - trackingParticleToTrackVectorMap = aMap; - } - void setTTStubAssociationMap(edm::RefProd > aStubAssoMap) { - theStubAssociationMap = aStubAssoMap; - } + const MapL1TrackToTP& getTTTrackToTrackingParticleMap() const { return trackToTrackingParticleMap_; } + const MapTPToVecL1Track& getTrackingParticleToTTTracksMap() const { return trackingParticleToTrackVectorMap_; } - /// Operations - edm::Ptr findTrackingParticlePtr(edm::Ptr > aTrack) const; - std::vector > > findTTTrackPtrs(edm::Ptr aTrackingParticle) const; + void setTTTrackToTrackingParticleMap(const MapL1TrackToTP& aMap) { trackToTrackingParticleMap_ = aMap; } + void setTrackingParticleToTTTracksMap(const MapTPToVecL1Track& aMap) { trackingParticleToTrackVectorMap_ = aMap; } - /// MC Truth methods - bool isGenuine(edm::Ptr > aTrack) const; - bool isLooselyGenuine(edm::Ptr > aTrack) const; - bool isCombinatoric(edm::Ptr > aTrack) const; - bool isUnknown(edm::Ptr > aTrack) const; + /// Set stub <-> truth association object. + void setTTStubAssociationMap(edm::RefProd> aStubAssoMap) { + theStubAssociationMap_ = aStubAssoMap; + } + /// Get principle TP associated to a L1 track. (Non-NULL if isLooselyGenuine() below is true). + /// (N.B. There is no function returning all TP associated to a L1 track). + const TrackingParticlePtr& findTrackingParticlePtr(TTTrackPtrT aTrack) const; + + /// Get all L1 tracks associated to a TP. + /// (Even if the TP just contributes to one cluster in one stub, + /// and even if their are other such TP, it is still listed here). + const std::vector>& findTTTrackPtrs(TrackingParticlePtr aTrackingParticle) const; + + ///--- Get quality of L1 track based on truth info. + /// (N.B. "genuine" tracks are used for official L1 track efficiency measurements). + + /// Exactly one (i.e. not 0 or >= 2) unique TP contributes to every stub on the track. + /// (even if it is not the principle TP in a stub, or contributes to only one cluster + /// in the stub, it still counts). + /// N.B. If cfg param getAllowOneFalse2SStub() is true, then one incorrect stub in + /// a 2S module is alowed + /// ISSUE: a track with 4 stubs can be accepted if only 3 of its stubs are correct! + /// ISSUE: isLooselyGenuine() must also be true. So if 2 TPs match track, one with + /// an incorrect PS stub, both isGenuine() & isLooselyGenuine() will be false! + bool isGenuine(TTTrackPtrT aTrack) const; + /// Same criteria as for "genuine" track, except that one incorrect stub in either + /// PS or 2S module is allowed, irrespective of value of cfg param getAllowOneFalse2SStub(). + bool isLooselyGenuine(TTTrackPtrT aTrack) const; + /// More than one stub on track is "unknown". + bool isUnknown(TTTrackPtrT aTrack) const; + /// Both isLooselyGenuine() & isUnknown() are false. + bool isCombinatoric(TTTrackPtrT aTrack) const; + + // Cfg param allowing one incorrect 2S stub in "genuine" tracks. void setAllowOneFalse2SStub(bool allowFalse2SStub); bool getAllowOneFalse2SStub(); private: /// Data members - std::map >, edm::Ptr > trackToTrackingParticleMap; - std::map, std::vector > > > trackingParticleToTrackVectorMap; - edm::RefProd > theStubAssociationMap; + MapL1TrackToTP trackToTrackingParticleMap_; + MapTPToVecL1Track trackingParticleToTrackVectorMap_; + edm::RefProd> theStubAssociationMap_; bool AllowOneFalse2SStub; + // Allow functions to return reference to null. + static const TrackingParticlePtr nullTrackingParticlePtr_; + static const std::vector nullVecTTTrackPtr_; + }; /// Close class /*! \brief Implementation of methods @@ -91,13 +118,17 @@ class TTTrackAssociationMap { * in the source file. */ +// Static constant data members. +template +const TrackingParticlePtr TTTrackAssociationMap::nullTrackingParticlePtr_; +template +const std::vector TTTrackAssociationMap::nullVecTTTrackPtr_; + /// Default Constructor /// NOTE: to be used with setSomething(...) methods template TTTrackAssociationMap::TTTrackAssociationMap() { /// Set default data members - trackToTrackingParticleMap.clear(); - trackingParticleToTrackVectorMap.clear(); } /// Destructor @@ -106,27 +137,25 @@ TTTrackAssociationMap::~TTTrackAssociationMap() {} /// Operations template <> -edm::Ptr TTTrackAssociationMap::findTrackingParticlePtr( - edm::Ptr > aTrack) const; +const TrackingParticlePtr& TTTrackAssociationMap::findTrackingParticlePtr( + TTTrackPtr aTrack) const; template <> -std::vector > > TTTrackAssociationMap::findTTTrackPtrs( - edm::Ptr aTrackingParticle) const; +const std::vector& TTTrackAssociationMap::findTTTrackPtrs( + TrackingParticlePtr aTrackingParticle) const; /// MC truth template <> -bool TTTrackAssociationMap::isLooselyGenuine( - edm::Ptr > aTrack) const; +bool TTTrackAssociationMap::isLooselyGenuine(TTTrackPtr aTrack) const; /// MC truth template <> -bool TTTrackAssociationMap::isGenuine(edm::Ptr > aTrack) const; +bool TTTrackAssociationMap::isGenuine(TTTrackPtr aTrack) const; template <> -bool TTTrackAssociationMap::isCombinatoric( - edm::Ptr > aTrack) const; +bool TTTrackAssociationMap::isCombinatoric(TTTrackPtr aTrack) const; template <> -bool TTTrackAssociationMap::isUnknown(edm::Ptr > aTrack) const; +bool TTTrackAssociationMap::isUnknown(TTTrackPtr aTrack) const; #endif diff --git a/SimTracker/TrackTriggerAssociation/plugins/TTClusterAssociator.cc b/SimTracker/TrackTriggerAssociation/plugins/TTClusterAssociator.cc index 25d395b03866b..82bc5cae2dc20 100644 --- a/SimTracker/TrackTriggerAssociation/plugins/TTClusterAssociator.cc +++ b/SimTracker/TrackTriggerAssociation/plugins/TTClusterAssociator.cc @@ -17,37 +17,32 @@ void TTClusterAssociator::produce(edm::Event& iEvent, co return; /// Get the PixelDigiSimLink - iEvent.getByToken(digisimLinkToken, thePixelDigiSimLinkHandle); + iEvent.getByToken(digisimLinkToken_, thePixelDigiSimLinkHandle_); /// Get the TrackingParticles - iEvent.getByToken(tpToken, TrackingParticleHandle); + iEvent.getByToken(tpToken_, trackingParticleHandle_); - // const TrackerTopology* const tTopo = theTrackerTopology.product(); - const TrackerGeometry* const theTrackerGeom = theTrackerGeometry.product(); + // const TrackerTopology* const tTopo = theTrackerTopology_.product(); + const TrackerGeometry* const theTrackerGeom = theTrackerGeometry_.product(); /// Preliminary task: map SimTracks by TrackingParticle /// Prepare the map - std::map, edm::Ptr> simTrackUniqueToTPMap; - simTrackUniqueToTPMap.clear(); + std::map, TrackingParticlePtr> simTrackUniqueToTPMap; - if (!TrackingParticleHandle->empty()) { + if (not trackingParticleHandle_->empty()) { /// Loop over TrackingParticles - unsigned int tpCnt = 0; - std::vector::const_iterator iterTPart; - for (iterTPart = TrackingParticleHandle->begin(); iterTPart != TrackingParticleHandle->end(); ++iterTPart) { + for (unsigned int tpCnt = 0; tpCnt < trackingParticleHandle_->size(); tpCnt++) { /// Make the pointer to the TrackingParticle - edm::Ptr tempTPPtr(TrackingParticleHandle, tpCnt++); + TrackingParticlePtr tempTPPtr(trackingParticleHandle_, tpCnt); /// Get the EncodedEventId EncodedEventId eventId = EncodedEventId(tempTPPtr->eventId()); /// Loop over SimTracks inside TrackingParticle - std::vector::const_iterator iterSimTrack; - for (iterSimTrack = tempTPPtr->g4Tracks().begin(); iterSimTrack != tempTPPtr->g4Tracks().end(); ++iterSimTrack) { - /// Build the unique SimTrack Id (which is SimTrack ID + EncodedEventId) - std::pair simTrackUniqueId(iterSimTrack->trackId(), eventId); - simTrackUniqueToTPMap.insert(std::make_pair(simTrackUniqueId, tempTPPtr)); + for (const auto& simTrack : tempTPPtr->g4Tracks()) { + /// Use the unique SimTrack Id (which is SimTrack ID + EncodedEventId) + simTrackUniqueToTPMap.emplace(std::make_pair(simTrack.trackId(), eventId), tempTPPtr); } } /// End of loop over TrackingParticles } @@ -56,29 +51,22 @@ void TTClusterAssociator::produce(edm::Event& iEvent, co int ncont1 = 0; - for (auto iTag = TTClustersTokens.begin(); iTag != TTClustersTokens.end(); iTag++) { + for (const auto& iTag : ttClustersTokens_) { /// Prepare output auto associationMapForOutput = std::make_unique>(); /// Get the Clusters already stored away - edm::Handle>> TTClusterHandle; + edm::Handle TTClusterHandle; - iEvent.getByToken(*iTag, TTClusterHandle); + iEvent.getByToken(iTag, TTClusterHandle); /// Prepare the necessary maps - std::map>, TTCluster>, - std::vector>> - clusterToTrackingParticleVectorMap; - std::map, - std::vector< - edm::Ref>, TTCluster>>> - trackingParticleToClusterVectorMap; - clusterToTrackingParticleVectorMap.clear(); - trackingParticleToClusterVectorMap.clear(); + std::map> clusterToTrackingParticleVectorMap; + std::map> trackingParticleToClusterVectorMap; /// Loop over the input Clusters - for (auto gd = theTrackerGeom->dets().begin(); gd != theTrackerGeom->dets().end(); gd++) { - DetId detid = (*gd)->geographicalId(); + for (const auto& gd : theTrackerGeom->dets()) { + DetId detid = gd->geographicalId(); if (detid.subdetId() != StripSubdetector::TOB && detid.subdetId() != StripSubdetector::TID) continue; // only run on OT @@ -90,19 +78,17 @@ void TTClusterAssociator::produce(edm::Event& iEvent, co for (auto contentIter = clusters.begin(); contentIter != clusters.end(); ++contentIter) { /// Make the reference to be put in the map - edm::Ref>, TTCluster> tempCluRef = - edmNew::makeRefTo(TTClusterHandle, contentIter); + TTClusterRef tempCluRef = edmNew::makeRefTo(TTClusterHandle, contentIter); /// Prepare the maps wrt TTCluster if (clusterToTrackingParticleVectorMap.find(tempCluRef) == clusterToTrackingParticleVectorMap.end()) { - std::vector> tpVector; - tpVector.clear(); - clusterToTrackingParticleVectorMap.insert(std::make_pair(tempCluRef, tpVector)); + std::vector tpVector; + clusterToTrackingParticleVectorMap.emplace(tempCluRef, tpVector); } /// Get the PixelDigiSimLink /// Safety check added after new digitizer (Oct 2014) - if (thePixelDigiSimLinkHandle->find(detid) == thePixelDigiSimLinkHandle->end()) { + if (thePixelDigiSimLinkHandle_->find(detid) == thePixelDigiSimLinkHandle_->end()) { /// Sensor is not found in DigiSimLink. /// Set MC truth to NULL for all hits in this sensor. Period. @@ -111,7 +97,7 @@ void TTClusterAssociator::produce(edm::Event& iEvent, co for (unsigned int i = 0; i < theseHits.size(); i++) { /// No SimLink is found by definition /// Then store NULL MC truth for all the digis - edm::Ptr tempTPPtr; // = new edm::Ptr< TrackingParticle >(); + TrackingParticlePtr tempTPPtr; clusterToTrackingParticleVectorMap.find(tempCluRef)->second.push_back(tempTPPtr); } @@ -119,7 +105,7 @@ void TTClusterAssociator::produce(edm::Event& iEvent, co continue; } - edm::DetSet thisDigiSimLink = (*(thePixelDigiSimLinkHandle))[detid]; + edm::DetSet thisDigiSimLink = (*(thePixelDigiSimLinkHandle_))[detid]; edm::DetSet::const_iterator iterSimLink; /// Get the Digis and loop over them @@ -140,7 +126,7 @@ void TTClusterAssociator::produce(edm::Event& iEvent, co /// Get the corresponding TrackingParticle if (simTrackUniqueToTPMap.find(thisUniqueId) != simTrackUniqueToTPMap.end()) { - edm::Ptr thisTrackingParticle = simTrackUniqueToTPMap.find(thisUniqueId)->second; + TrackingParticlePtr thisTrackingParticle = simTrackUniqueToTPMap.find(thisUniqueId)->second; /// Store the TrackingParticle clusterToTrackingParticleVectorMap.find(tempCluRef)->second.push_back(thisTrackingParticle); @@ -148,25 +134,22 @@ void TTClusterAssociator::produce(edm::Event& iEvent, co /// Prepare the maps wrt TrackingParticle if (trackingParticleToClusterVectorMap.find(thisTrackingParticle) == trackingParticleToClusterVectorMap.end()) { - std::vector< - edm::Ref>, TTCluster>> - clusterVector; - clusterVector.clear(); - trackingParticleToClusterVectorMap.insert(std::make_pair(thisTrackingParticle, clusterVector)); + std::vector clusterVector; + trackingParticleToClusterVectorMap.emplace(thisTrackingParticle, clusterVector); } trackingParticleToClusterVectorMap.find(thisTrackingParticle) ->second.push_back(tempCluRef); /// Fill the auxiliary map } else { /// In case no TrackingParticle is found, store a NULL pointer - edm::Ptr tempTPPtr; // = new edm::Ptr< TrackingParticle >(); + TrackingParticlePtr tempTPPtr; clusterToTrackingParticleVectorMap.find(tempCluRef)->second.push_back(tempTPPtr); } } /// End of loop over PixelDigiSimLink } /// End of loop over all the hits composing the Cluster /// Check that the cluster has a non-NULL TP pointer - std::vector> theseClusterTrackingParticlePtrs = + const std::vector& theseClusterTrackingParticlePtrs = clusterToTrackingParticleVectorMap.find(tempCluRef)->second; bool allOfThemAreNull = true; for (unsigned int tpi = 0; tpi < theseClusterTrackingParticlePtrs.size() && allOfThemAreNull; tpi++) { @@ -183,20 +166,13 @@ void TTClusterAssociator::produce(edm::Event& iEvent, co /// Clean the maps that need cleaning /// Prepare the output map wrt TrackingParticle - std::map, - std::vector>, - TTCluster>>>::iterator iterMapToClean; - for (iterMapToClean = trackingParticleToClusterVectorMap.begin(); - iterMapToClean != trackingParticleToClusterVectorMap.end(); - ++iterMapToClean) { + for (auto& p : trackingParticleToClusterVectorMap) { /// Get the vector of references to TTCluster - std::vector>, TTCluster>> - tempVector = iterMapToClean->second; + std::vector& tempVector = p.second; /// Sort and remove duplicates std::sort(tempVector.begin(), tempVector.end()); tempVector.erase(std::unique(tempVector.begin(), tempVector.end()), tempVector.end()); - iterMapToClean->second = tempVector; } /// Put the maps in the association object @@ -204,8 +180,7 @@ void TTClusterAssociator::produce(edm::Event& iEvent, co associationMapForOutput->setTrackingParticleToTTClustersMap(trackingParticleToClusterVectorMap); /// Put output in the event - // iEvent.put( associationMapForOutput, (*iTag).instance() ); - iEvent.put(std::move(associationMapForOutput), TTClustersInputTags.at(ncont1).instance()); + iEvent.put(std::move(associationMapForOutput), ttClustersInputTags_.at(ncont1).instance()); ++ncont1; diff --git a/SimTracker/TrackTriggerAssociation/plugins/TTClusterAssociator.h b/SimTracker/TrackTriggerAssociation/plugins/TTClusterAssociator.h index 6f2f54b9ab354..0ee48c37de463 100644 --- a/SimTracker/TrackTriggerAssociation/plugins/TTClusterAssociator.h +++ b/SimTracker/TrackTriggerAssociation/plugins/TTClusterAssociator.h @@ -7,6 +7,7 @@ * * \author Nicola Pozzobon * \date 2013, Jul 19 + * (tidy up: Ian Tomalin, 2020) * */ @@ -52,21 +53,17 @@ class TTClusterAssociator : public edm::stream::EDProducer<> { private: /// Data members - edm::Handle > thePixelDigiSimLinkHandle; - edm::Handle > TrackingParticleHandle; + edm::Handle > thePixelDigiSimLinkHandle_; + edm::Handle > trackingParticleHandle_; - std::vector TTClustersInputTags; + std::vector ttClustersInputTags_; - edm::EDGetTokenT > digisimLinkToken; - edm::EDGetTokenT > tpToken; - //std::vector< edm::EDGetTokenT< edm::DetSetVector< TTCluster< T > > > > TTClustersTokens; - std::vector > > > TTClustersTokens; + edm::EDGetTokenT > digisimLinkToken_; + edm::EDGetTokenT > tpToken_; + std::vector > > > ttClustersTokens_; - // const StackedTrackerGeometry *theStackedTrackers; - //unsigned int ADCThreshold; - - edm::ESHandle theTrackerGeometry; - edm::ESHandle theTrackerTopology; + edm::ESHandle theTrackerGeometry_; + edm::ESHandle theTrackerTopology_; /// Mandatory methods void beginRun(const edm::Run& run, const edm::EventSetup& iSetup) override; @@ -85,16 +82,16 @@ class TTClusterAssociator : public edm::stream::EDProducer<> { /// Constructors template TTClusterAssociator::TTClusterAssociator(const edm::ParameterSet& iConfig) { - digisimLinkToken = + digisimLinkToken_ = consumes >(iConfig.getParameter("digiSimLinks")); - tpToken = consumes >(iConfig.getParameter("trackingParts")); + tpToken_ = consumes >(iConfig.getParameter("trackingParts")); - TTClustersInputTags = iConfig.getParameter >("TTClusters"); + ttClustersInputTags_ = iConfig.getParameter >("TTClusters"); - for (auto iTag = TTClustersInputTags.begin(); iTag != TTClustersInputTags.end(); iTag++) { - TTClustersTokens.push_back(consumes > >(*iTag)); + for (const auto& iTag : ttClustersInputTags_) { + ttClustersTokens_.push_back(consumes > >(iTag)); - produces >((*iTag).instance()); + produces >(iTag.instance()); } } @@ -106,8 +103,8 @@ TTClusterAssociator::~TTClusterAssociator() {} template void TTClusterAssociator::beginRun(const edm::Run& run, const edm::EventSetup& iSetup) { /// Get the geometry - iSetup.get().get(theTrackerGeometry); - iSetup.get().get(theTrackerTopology); + iSetup.get().get(theTrackerGeometry_); + iSetup.get().get(theTrackerTopology_); /// Print some information when loaded edm::LogInfo("TTClusterAssociator< ") << templateNameFinder() << " > loaded."; diff --git a/SimTracker/TrackTriggerAssociation/plugins/TTStubAssociator.cc b/SimTracker/TrackTriggerAssociation/plugins/TTStubAssociator.cc index bd6dccecda8a8..a252f3c6e0c94 100644 --- a/SimTracker/TrackTriggerAssociation/plugins/TTStubAssociator.cc +++ b/SimTracker/TrackTriggerAssociation/plugins/TTStubAssociator.cc @@ -17,45 +17,39 @@ void TTStubAssociator::produce(edm::Event& iEvent, const return; /// Exit if the vectors are uncorrectly dimensioned - if (TTClusterTruthInputTags.size() != TTStubsInputTags.size()) { + if (ttClusterTruthInputTags_.size() != ttStubsInputTags_.size()) { edm::LogError("TTStubAsso ") << "E R R O R! the InputTag vectors have different size!"; return; } int ncont1 = 0; - const TrackerGeometry* const theTrackerGeom = theTrackerGeometry.product(); - const TrackerTopology* const tTopo = theTrackerTopology.product(); + const TrackerGeometry* const theTrackerGeom = theTrackerGeometry_.product(); + const TrackerTopology* const tTopo = theTrackerTopology_.product(); /// Loop over the InputTags to handle multiple collections - for (auto iTag = TTStubsTokens.begin(); iTag != TTStubsTokens.end(); iTag++) { + for (const auto& iTag : ttStubsTokens_) { /// Prepare output auto associationMapForOutput = std::make_unique>(); /// Get the Stubs already stored away - edm::Handle>> TTStubHandle; - iEvent.getByToken(*iTag, TTStubHandle); + edm::Handle ttStubHandle; + iEvent.getByToken(iTag, ttStubHandle); /// Get the Cluster MC truth - edm::Handle> TTClusterAssociationMapHandle; - iEvent.getByToken(TTClusterTruthTokens.at(ncont1), TTClusterAssociationMapHandle); + edm::Handle> ttClusterAssociationMapHandle; + iEvent.getByToken(ttClusterTruthTokens_.at(ncont1), ttClusterAssociationMapHandle); /// Prepare the necessary maps - std::map>, TTStub>, - edm::Ptr> - stubToTrackingParticleMap; - std::map, - std::vector>, TTStub>>> - trackingParticleToStubVectorMap; - stubToTrackingParticleMap.clear(); - trackingParticleToStubVectorMap.clear(); + std::map stubToTrackingParticleMap; + std::map> trackingParticleToStubVectorMap; /// Loop over the input Stubs - if (!TTStubHandle->empty()) { - for (auto gd = theTrackerGeom->dets().begin(); gd != theTrackerGeom->dets().end(); gd++) { - DetId detid = (*gd)->geographicalId(); + if (not ttStubHandle->empty()) { + for (const auto& gd : theTrackerGeom->dets()) { + DetId detid = gd->geographicalId(); if (detid.subdetId() != StripSubdetector::TOB && detid.subdetId() != StripSubdetector::TID) continue; // only run on OT @@ -64,38 +58,29 @@ void TTStubAssociator::produce(edm::Event& iEvent, const DetId stackDetid = tTopo->stack(detid); // Stub module detid - if (TTStubHandle->find(stackDetid) == TTStubHandle->end()) + if (ttStubHandle->find(stackDetid) == ttStubHandle->end()) continue; /// Get the DetSets of the Clusters - edmNew::DetSet> stubs = (*TTStubHandle)[stackDetid]; + edmNew::DetSet> stubs = (*ttStubHandle)[stackDetid]; for (auto contentIter = stubs.begin(); contentIter != stubs.end(); ++contentIter) { /// Make the reference to be put in the map - edm::Ref>, TTStub> tempStubRef = - edmNew::makeRefTo(TTStubHandle, contentIter); - - /// Get the two clusters - // std::vector< edm::Ref< edmNew::DetSetVector< TTCluster< Ref_Phase2TrackerDigi_ > >, TTCluster< Ref_Phase2TrackerDigi_ > > > theseClusters = tempStubRef->getClusterRefs(); + TTStubRef tempStubRef = edmNew::makeRefTo(ttStubHandle, contentIter); /// Fill the inclusive map which is careless of the stub classification for (unsigned int ic = 0; ic < 2; ic++) { - std::vector> tempTPs = - TTClusterAssociationMapHandle->findTrackingParticlePtrs(tempStubRef->clusterRef(ic)); - - for (unsigned int itp = 0; itp < tempTPs.size(); itp++) { - edm::Ptr testTP = tempTPs.at(itp); + const std::vector& tempTPs = + ttClusterAssociationMapHandle->findTrackingParticlePtrs(tempStubRef->clusterRef(ic)); + for (const TrackingParticlePtr& testTP : tempTPs) { if (testTP.isNull()) continue; /// Prepare the maps wrt TrackingParticle if (trackingParticleToStubVectorMap.find(testTP) == trackingParticleToStubVectorMap.end()) { - std::vector< - edm::Ref>, TTStub>> - stubVector; - stubVector.clear(); - trackingParticleToStubVectorMap.insert(std::make_pair(testTP, stubVector)); + std::vector stubVector; + trackingParticleToStubVectorMap.emplace(testTP, stubVector); } trackingParticleToStubVectorMap.find(testTP)->second.push_back(tempStubRef); /// Fill the auxiliary map } @@ -104,8 +89,8 @@ void TTStubAssociator::produce(edm::Event& iEvent, const /// GENUINE for clusters means not combinatoric and /// not unknown: same MC truth content MUST be found /// in both clusters composing the stub - if (TTClusterAssociationMapHandle->isUnknown(tempStubRef->clusterRef(0)) || - TTClusterAssociationMapHandle->isUnknown(tempStubRef->clusterRef(1))) { + if (ttClusterAssociationMapHandle->isUnknown(tempStubRef->clusterRef(0)) || + ttClusterAssociationMapHandle->isUnknown(tempStubRef->clusterRef(1))) { /// If at least one cluster is unknown, it means /// either unknown, either combinatoric /// Do nothing, and go to the next Stub @@ -114,20 +99,20 @@ void TTStubAssociator::produce(edm::Event& iEvent, const /// Here both are clusters are genuine/combinatoric /// If both clusters have some known SimTrack content /// they must be compared to each other - if (TTClusterAssociationMapHandle->isGenuine(tempStubRef->clusterRef(0)) && - TTClusterAssociationMapHandle->isGenuine(tempStubRef->clusterRef(1))) { + if (ttClusterAssociationMapHandle->isGenuine(tempStubRef->clusterRef(0)) && + ttClusterAssociationMapHandle->isGenuine(tempStubRef->clusterRef(1))) { /// If both clusters are genuine, they must be associated to the same TrackingParticle /// in order to return a genuine stub. Period. Note we can perform safely /// this comparison because, if both clusters are genuine, their TrackingParticle shall NEVER be NULL - if (TTClusterAssociationMapHandle->findTrackingParticlePtr(tempStubRef->clusterRef(0)).get() == - TTClusterAssociationMapHandle->findTrackingParticlePtr(tempStubRef->clusterRef(1)).get()) { + if (ttClusterAssociationMapHandle->findTrackingParticlePtr(tempStubRef->clusterRef(0)).get() == + ttClusterAssociationMapHandle->findTrackingParticlePtr(tempStubRef->clusterRef(1)).get()) { /// Two genuine clusters with same SimTrack content mean genuine - edm::Ptr testTP = - TTClusterAssociationMapHandle->findTrackingParticlePtr(tempStubRef->clusterRef(0)); + const TrackingParticlePtr& testTP = + ttClusterAssociationMapHandle->findTrackingParticlePtr(tempStubRef->clusterRef(0)); /// Fill the map: by construction, this will always be the first time the /// stub is inserted into the map: no need for "find" - stubToTrackingParticleMap.insert(std::make_pair(tempStubRef, testTP)); + stubToTrackingParticleMap.emplace(tempStubRef, testTP); /// At this point, go to the next Stub continue; @@ -141,10 +126,10 @@ void TTStubAssociator::produce(edm::Event& iEvent, const TrackingParticle* prevTPAddress = nullptr; unsigned int whichTP = 0; - std::vector> trackingParticles0 = - TTClusterAssociationMapHandle->findTrackingParticlePtrs(tempStubRef->clusterRef(0)); - std::vector> trackingParticles1 = - TTClusterAssociationMapHandle->findTrackingParticlePtrs(tempStubRef->clusterRef(1)); + const std::vector& trackingParticles0 = + ttClusterAssociationMapHandle->findTrackingParticlePtrs(tempStubRef->clusterRef(0)); + const std::vector& trackingParticles1 = + ttClusterAssociationMapHandle->findTrackingParticlePtrs(tempStubRef->clusterRef(1)); bool escape = false; @@ -188,11 +173,11 @@ void TTStubAssociator::produce(edm::Event& iEvent, const /// even if one of the clusters (or both) are combinatoric: /// this means there is only one track that participates in /// both clusters, hence the stub is genuine - edm::Ptr testTP = trackingParticles1.at(whichTP); + TrackingParticlePtr testTP = trackingParticles1.at(whichTP); /// Fill the map: by construction, this will always be the first time the /// stub is inserted into the map: no need for "find" - stubToTrackingParticleMap.insert(std::make_pair(tempStubRef, testTP)); + stubToTrackingParticleMap.emplace(tempStubRef, testTP); /// At this point, go to the next Stub continue; @@ -205,26 +190,17 @@ void TTStubAssociator::produce(edm::Event& iEvent, const /// Clean the only map that needs cleaning /// Prepare the output map wrt TrackingParticle - typename std::map, - std::vector>, - TTStub>>>::iterator iterMapToClean; - for (iterMapToClean = trackingParticleToStubVectorMap.begin(); - iterMapToClean != trackingParticleToStubVectorMap.end(); - ++iterMapToClean) { + for (auto& p : trackingParticleToStubVectorMap) { /// Get the vector of references to TTStub - std::vector>, TTStub>> - tempVector = iterMapToClean->second; + std::vector& tempVector = p.second; /// Sort and remove duplicates std::sort(tempVector.begin(), tempVector.end()); tempVector.erase(std::unique(tempVector.begin(), tempVector.end()), tempVector.end()); - - /// Put the vector in the output map - iterMapToClean->second = tempVector; } /// Also, create the pointer to the TTClusterAssociationMap - edm::RefProd> theCluAssoMap(TTClusterAssociationMapHandle); + edm::RefProd> theCluAssoMap(ttClusterAssociationMapHandle); /// Put the maps in the association object associationMapForOutput->setTTStubToTrackingParticleMap(stubToTrackingParticleMap); @@ -232,7 +208,7 @@ void TTStubAssociator::produce(edm::Event& iEvent, const associationMapForOutput->setTTClusterAssociationMap(theCluAssoMap); /// Put output in the event - iEvent.put(std::move(associationMapForOutput), TTStubsInputTags.at(ncont1).instance()); + iEvent.put(std::move(associationMapForOutput), ttStubsInputTags_.at(ncont1).instance()); ++ncont1; } /// End of loop over InputTags diff --git a/SimTracker/TrackTriggerAssociation/plugins/TTStubAssociator.h b/SimTracker/TrackTriggerAssociation/plugins/TTStubAssociator.h index 50a259e71b8f9..3fd21a8e37321 100644 --- a/SimTracker/TrackTriggerAssociation/plugins/TTStubAssociator.h +++ b/SimTracker/TrackTriggerAssociation/plugins/TTStubAssociator.h @@ -7,6 +7,7 @@ * * \author Nicola Pozzobon * \date 2013, Jul 19 + * (tidy up: Ian Tomalin, 2020) * */ @@ -53,14 +54,14 @@ class TTStubAssociator : public edm::stream::EDProducer<> { private: /// Data members - std::vector TTStubsInputTags; - std::vector TTClusterTruthInputTags; + std::vector ttStubsInputTags_; + std::vector ttClusterTruthInputTags_; - std::vector > > > TTStubsTokens; - std::vector > > TTClusterTruthTokens; + std::vector > > > ttStubsTokens_; + std::vector > > ttClusterTruthTokens_; - edm::ESHandle theTrackerGeometry; - edm::ESHandle theTrackerTopology; + edm::ESHandle theTrackerGeometry_; + edm::ESHandle theTrackerTopology_; /// Mandatory methods void beginRun(const edm::Run& run, const edm::EventSetup& iSetup) override; @@ -79,17 +80,17 @@ class TTStubAssociator : public edm::stream::EDProducer<> { /// Constructors template TTStubAssociator::TTStubAssociator(const edm::ParameterSet& iConfig) { - TTStubsInputTags = iConfig.getParameter >("TTStubs"); - TTClusterTruthInputTags = iConfig.getParameter >("TTClusterTruth"); + ttStubsInputTags_ = iConfig.getParameter >("TTStubs"); + ttClusterTruthInputTags_ = iConfig.getParameter >("TTClusterTruth"); - for (auto iTag = TTClusterTruthInputTags.begin(); iTag != TTClusterTruthInputTags.end(); iTag++) { - TTClusterTruthTokens.push_back(consumes >(*iTag)); + for (const auto& iTag : ttClusterTruthInputTags_) { + ttClusterTruthTokens_.push_back(consumes >(iTag)); } - for (auto iTag = TTStubsInputTags.begin(); iTag != TTStubsInputTags.end(); iTag++) { - TTStubsTokens.push_back(consumes > >(*iTag)); + for (const auto& iTag : ttStubsInputTags_) { + ttStubsTokens_.push_back(consumes > >(iTag)); - produces >((*iTag).instance()); + produces >(iTag.instance()); } } @@ -103,8 +104,8 @@ void TTStubAssociator::beginRun(const edm::Run& run, const edm::EventSetup& i /// Print some information when loaded edm::LogInfo("TTStubAssociator< ") << templateNameFinder() << " > loaded."; - iSetup.get().get(theTrackerTopology); - iSetup.get().get(theTrackerGeometry); + iSetup.get().get(theTrackerTopology_); + iSetup.get().get(theTrackerGeometry_); } /// End run diff --git a/SimTracker/TrackTriggerAssociation/plugins/TTTrackAssociator.cc b/SimTracker/TrackTriggerAssociation/plugins/TTTrackAssociator.cc index feebace089572..24e19cc5e7f66 100644 --- a/SimTracker/TrackTriggerAssociation/plugins/TTTrackAssociator.cc +++ b/SimTracker/TrackTriggerAssociation/plugins/TTTrackAssociator.cc @@ -4,7 +4,7 @@ * * \author Nicola Pozzobon * \date 2013, Jul 19 - * + * */ #include "SimTracker/TrackTriggerAssociation/plugins/TTTrackAssociator.h" @@ -17,160 +17,147 @@ void TTTrackAssociator::produce(edm::Event& iEvent, cons return; /// Get the Stub and Cluster MC truth - edm::Handle> TTClusterAssociationMapHandle; - iEvent.getByToken(TTClusterTruthToken, TTClusterAssociationMapHandle); - edm::Handle> TTStubAssociationMapHandle; - iEvent.getByToken(TTStubTruthToken, TTStubAssociationMapHandle); + edm::Handle> ttClusterAssociationMapHandle; + iEvent.getByToken(ttClusterTruthToken_, ttClusterAssociationMapHandle); + edm::Handle> ttStubAssociationMapHandle; + iEvent.getByToken(ttStubTruthToken_, ttStubAssociationMapHandle); int ncont1 = 0; /// Loop over InputTags to handle multiple collections - for (auto iTag = TTTracksTokens.begin(); iTag != TTTracksTokens.end(); iTag++) { + for (const auto& iTag : ttTracksTokens_) { /// Prepare output auto associationMapForOutput = std::make_unique>(); /// Get the Tracks already stored away edm::Handle>> TTTrackHandle; - iEvent.getByToken(*iTag, TTTrackHandle); + iEvent.getByToken(iTag, TTTrackHandle); /// Prepare the necessary maps - std::map>, edm::Ptr> trackToTrackingParticleMap; - std::map, std::vector>>> - trackingParticleToTrackVectorMap; - trackToTrackingParticleMap.clear(); - trackingParticleToTrackVectorMap.clear(); + std::map trackToTrackingParticleMap; + std::map> trackingParticleToTrackVectorMap; // Start the loop on tracks - unsigned int j = 0; /// Counter needed to build the edm::Ptr to the TTTrack - typename std::vector>::const_iterator inputIter; - for (inputIter = TTTrackHandle->begin(); inputIter != TTTrackHandle->end(); ++inputIter) { + for (unsigned int jTrk = 0; jTrk < TTTrackHandle->size(); jTrk++) { /// Make the pointer to be put in the map - edm::Ptr> tempTrackPtr(TTTrackHandle, j++); + TTTrackPtr tempTrackPtr(TTTrackHandle, jTrk); - /// Get the stubs of the TTTrack (theseStubs) - std::vector>, TTStub>> - theseStubs = tempTrackPtr->getStubRefs(); + /// Get all the stubs of the TTTrack (theseStubs) + const std::vector& theseStubs = tempTrackPtr->getStubRefs(); - /// Auxiliary map to store TP addresses and TP edm::Ptr - std::map> auxMap; - auxMap.clear(); + /// Auxiliary map to relate TP addresses and TP edm::Ptr + std::map auxMap; int mayCombinUnknown = 0; - /// Fill the inclusive map which is careless of the stub classification - for (unsigned int is = 0; is < theseStubs.size(); is++) { - // std::vector< edm::Ref< edmNew::DetSetVector< TTCluster< Ref_Phase2TrackerDigi_ > >, TTCluster< Ref_Phase2TrackerDigi_ > > > theseClusters = theseStubs.at(is)->getClusterRefs(); + /// Fill the map associating each TP to a vector of L1 tracks. + /// Do this using the association map of the clusters inside each stub, + /// as stub associator misses stub --> all TP map (FIX). + for (const TTStubRef& stub : theseStubs) { for (unsigned int ic = 0; ic < 2; ic++) { - std::vector> tempTPs = - TTClusterAssociationMapHandle->findTrackingParticlePtrs(theseStubs.at(is)->clusterRef(ic)); - for (unsigned int itp = 0; itp < tempTPs.size(); itp++) // List of TPs linked to stub clusters + const std::vector& tempTPs = + ttClusterAssociationMapHandle->findTrackingParticlePtrs(stub->clusterRef(ic)); + for (const TrackingParticlePtr& testTP : tempTPs) // List of TPs linked to stub clusters { - edm::Ptr testTP = tempTPs.at(itp); - if (testTP.isNull()) // No TP linked to this cluster continue; /// Prepare the maps wrt TrackingParticle if (trackingParticleToTrackVectorMap.find(testTP) == trackingParticleToTrackVectorMap.end()) { - std::vector>> trackVector; - trackVector.clear(); - trackingParticleToTrackVectorMap.insert(std::make_pair(testTP, trackVector)); + std::vector trackVector; + trackingParticleToTrackVectorMap.emplace(testTP, trackVector); } trackingParticleToTrackVectorMap.find(testTP)->second.push_back(tempTrackPtr); /// Fill the auxiliary map /// Fill the other auxiliary map if (auxMap.find(testTP.get()) == auxMap.end()) { - auxMap.insert(std::make_pair(testTP.get(), testTP)); + auxMap.emplace(testTP.get(), testTP); } } } /// End of loop over the clusters /// Check if the stub is unknown - if (TTStubAssociationMapHandle->isUnknown(theseStubs.at(is))) + if (ttStubAssociationMapHandle->isUnknown(stub)) ++mayCombinUnknown; } /// End of loop over the stubs - /// If there more than 2 unknown stubs, go to the next track + /// If there are >= 2 unknown stubs, go to the next track /// as this track may be COMBINATORIC or UNKNOWN + /// (One unknown is allowed, if in 2S module). if (mayCombinUnknown >= 2) continue; - /// If we are here, all the stubs are either combinatoric or genuine + /// If we are here, all the stubs on track are either combinatoric or genuine /// and there is no more than one fake stub in the track - /// Loop over all the TrackingParticle which have been found in the track at some point - /// (stored in auxMap) + /// Loop over all the TrackingParticle which have been found in the track + /// (stored in auxMap), to check if any are present in all stubs on Track. std::vector tpInAllStubs; - std::map>::const_iterator iterAuxMap; - for (iterAuxMap = auxMap.begin(); iterAuxMap != auxMap.end(); ++iterAuxMap) { - /// Get all the stubs from this TrackingParticle - std::vector>, TTStub>> - tempStubs = TTStubAssociationMapHandle->findTTStubRefs(iterAuxMap->second); + for (const auto& auxPair : auxMap) { + /// Get all associated stubs of this TrackingParticle + const std::vector& tempStubs = ttStubAssociationMapHandle->findTTStubRefs(auxPair.second); + // Count stubs on track that are not related to this TP int nnotfound = 0; - //bool allFound = true; - /// Loop over the stubs - // for ( unsigned int js = 0; js < theseStubs.size() && allFound; js++ ) - for (unsigned int js = 0; js < theseStubs.size(); js++) { + for (const TTStubRef& stub : theseStubs) { /// We want that all the stubs of the track are included in the container of /// all the stubs produced by this particular TrackingParticle which we /// already know is one of the TrackingParticles that released hits /// in this track we are evaluating right now - if (std::find(tempStubs.begin(), tempStubs.end(), theseStubs.at(js)) == tempStubs.end()) { - // allFound = false; + if (std::find(tempStubs.begin(), tempStubs.end(), stub) == tempStubs.end()) { ++nnotfound; } } - /// If the TrackingParticle does not appear in all stubs but one - /// then go to the next track + /// If this TP does not appear in all stubs (allowing one wrong stub) + /// then try next TP. if (nnotfound > 1) - //if (!allFound) continue; /// If we are here, it means that the TrackingParticle - /// generates hits in all stubs but one of the current track + /// generates hits in all stubs (allowing one incorrect one) of the current track /// so put it into the vector - tpInAllStubs.push_back(iterAuxMap->first); + tpInAllStubs.push_back(auxPair.first); } - /// Count how many TrackingParticles we do have + /// Count how many TrackingParticles were associated to all stubs on this track. + /// FIX: Could avoid this by using std::set for tpInAllStubs? std::sort(tpInAllStubs.begin(), tpInAllStubs.end()); tpInAllStubs.erase(std::unique(tpInAllStubs.begin(), tpInAllStubs.end()), tpInAllStubs.end()); unsigned int nTPs = tpInAllStubs.size(); - /// If only one TrackingParticle, GENUINE - /// if different than one, COMBINATORIC + /// If only one TP associated to all stubs (allowing one incorrect) on track: GENUINE or LOOSELY_GENUINE. + /// If 0 or >= 2 TP: COMBINATORIC + /// WARNING: This means if one TP matches all stubs, and another matches all STUBS except + /// one, then the trackToTrackingParticleMap will not be filled. + /// WARNING: This also means that trackToTrackingParticleMap will be filled if + /// one TP matches all stubs, except for an incorrect one in either PS or 2S modules. if (nTPs != 1) continue; - /// Here, the track may only be GENUINE - /// Fill the map - trackToTrackingParticleMap.insert(std::make_pair(tempTrackPtr, auxMap.find(tpInAllStubs.at(0))->second)); + /// Here, the track may only be GENUINE/LOOSELY_GENUINE + /// CHECK: Surely if one incorrect PS stub, it can also be COMBINATORIC? + /// Fill the map associating track to its principle TP. + trackToTrackingParticleMap.emplace(tempTrackPtr, auxMap.find(tpInAllStubs.at(0))->second); } /// End of loop over Tracks - /// Clean the only map that needs cleaning - /// Prepare the output map wrt TrackingParticle - typename std::map, std::vector>>>::iterator - iterMapToClean; - for (iterMapToClean = trackingParticleToTrackVectorMap.begin(); - iterMapToClean != trackingParticleToTrackVectorMap.end(); - ++iterMapToClean) { + /// Remove duplicates from the only output map that needs it. + /// (Map gets multiple entries per track if it has several stubs belonging to same TP). + for (auto& p : trackingParticleToTrackVectorMap) { /// Get the vector of edm::Ptr< TTTrack > - std::vector>> tempVector = iterMapToClean->second; + /// (CHECK: Couldn't this be done by reference, to save CPU?) + std::vector& tempVector = p.second; /// Sort and remove duplicates std::sort(tempVector.begin(), tempVector.end()); tempVector.erase(std::unique(tempVector.begin(), tempVector.end()), tempVector.end()); - - iterMapToClean->second = tempVector; } /// Also, create the pointer to the TTClusterAssociationMap - edm::RefProd> theStubAssoMap(TTStubAssociationMapHandle); + edm::RefProd> theStubAssoMap(ttStubAssociationMapHandle); /// Put the maps in the association object associationMapForOutput->setTTTrackToTrackingParticleMap(trackToTrackingParticleMap); @@ -179,7 +166,7 @@ void TTTrackAssociator::produce(edm::Event& iEvent, cons associationMapForOutput->setAllowOneFalse2SStub(TTTrackAllowOneFalse2SStub); /// Put output in the event - iEvent.put(std::move(associationMapForOutput), TTTracksInputTags.at(ncont1).instance()); + iEvent.put(std::move(associationMapForOutput), ttTracksInputTags_.at(ncont1).instance()); ++ncont1; } /// End of loop over InputTags diff --git a/SimTracker/TrackTriggerAssociation/plugins/TTTrackAssociator.h b/SimTracker/TrackTriggerAssociation/plugins/TTTrackAssociator.h index 5155714c71ed7..a936057ae03c6 100644 --- a/SimTracker/TrackTriggerAssociation/plugins/TTTrackAssociator.h +++ b/SimTracker/TrackTriggerAssociation/plugins/TTTrackAssociator.h @@ -7,6 +7,7 @@ * * \author Nicola Pozzobon * \date 2013, Jul 19 + * (tidy up: Ian Tomalin, 2020) * */ @@ -49,12 +50,11 @@ class TTTrackAssociator : public edm::stream::EDProducer<> { private: /// Data members - std::vector TTTracksInputTags; + std::vector ttTracksInputTags_; - std::vector > > > TTTracksTokens; - - edm::EDGetTokenT > TTStubTruthToken; - edm::EDGetTokenT > TTClusterTruthToken; + std::vector > > > ttTracksTokens_; + edm::EDGetTokenT > ttStubTruthToken_; + edm::EDGetTokenT > ttClusterTruthToken_; bool TTTrackAllowOneFalse2SStub; @@ -75,9 +75,9 @@ class TTTrackAssociator : public edm::stream::EDProducer<> { /// Constructors template TTTrackAssociator::TTTrackAssociator(const edm::ParameterSet& iConfig) { - TTTracksInputTags = iConfig.getParameter >("TTTracks"); - TTClusterTruthToken = consumes >(iConfig.getParameter("TTClusterTruth")); - TTStubTruthToken = consumes >(iConfig.getParameter("TTStubTruth")); + ttTracksInputTags_ = iConfig.getParameter >("TTTracks"); + ttClusterTruthToken_ = consumes >(iConfig.getParameter("TTClusterTruth")); + ttStubTruthToken_ = consumes >(iConfig.getParameter("TTStubTruth")); TTTrackAllowOneFalse2SStub = iConfig.getParameter("TTTrackAllowOneFalse2SStub"); if (TTTrackAllowOneFalse2SStub) { edm::LogInfo("TTTrackAssociator< ") << "Allow track if no more than one 2S stub doesn't match truth."; @@ -85,10 +85,10 @@ TTTrackAssociator::TTTrackAssociator(const edm::ParameterSet& iConfig) { edm::LogInfo("TTTrackAssociator< ") << "All 2S stubs must match truth."; } - for (auto iTag = TTTracksInputTags.begin(); iTag != TTTracksInputTags.end(); iTag++) { - TTTracksTokens.push_back(consumes > >(*iTag)); + for (const auto& iTag : ttTracksInputTags_) { + ttTracksTokens_.push_back(consumes > >(iTag)); - produces >((*iTag).instance()); + produces >(iTag.instance()); } } diff --git a/SimTracker/TrackTriggerAssociation/src/TTTrackAssociationMap.cc b/SimTracker/TrackTriggerAssociation/src/TTTrackAssociationMap.cc index 8ec629ce68167..0b1595a209d7b 100644 --- a/SimTracker/TrackTriggerAssociation/src/TTTrackAssociationMap.cc +++ b/SimTracker/TrackTriggerAssociation/src/TTTrackAssociationMap.cc @@ -9,34 +9,28 @@ /// Operations template <> -edm::Ptr TTTrackAssociationMap::findTrackingParticlePtr( - edm::Ptr > aTrack) const { - if (trackToTrackingParticleMap.find(aTrack) != trackToTrackingParticleMap.end()) { - return trackToTrackingParticleMap.find(aTrack)->second; +const TrackingParticlePtr& TTTrackAssociationMap::findTrackingParticlePtr( + TTTrackPtr aTrack) const { + if (trackToTrackingParticleMap_.find(aTrack) != trackToTrackingParticleMap_.end()) { + return trackToTrackingParticleMap_.find(aTrack)->second; + } else { + return nullTrackingParticlePtr_; } - - /// Default: return NULL - edm::Ptr* temp = new edm::Ptr(); - return *temp; } template <> -std::vector > > TTTrackAssociationMap::findTTTrackPtrs( - edm::Ptr aTrackingParticle) const { - if (trackingParticleToTrackVectorMap.find(aTrackingParticle) != trackingParticleToTrackVectorMap.end()) { - return trackingParticleToTrackVectorMap.find(aTrackingParticle)->second; +const std::vector& TTTrackAssociationMap::findTTTrackPtrs( + TrackingParticlePtr aTrackingParticle) const { + if (trackingParticleToTrackVectorMap_.find(aTrackingParticle) != trackingParticleToTrackVectorMap_.end()) { + return trackingParticleToTrackVectorMap_.find(aTrackingParticle)->second; + } else { + return nullVecTTTrackPtr_; } - - /// Default: return empty vector - std::vector > > tempVec; - tempVec.clear(); - return tempVec; } /// MC truth template <> -bool TTTrackAssociationMap::isLooselyGenuine( - edm::Ptr > aTrack) const { +bool TTTrackAssociationMap::isLooselyGenuine(TTTrackPtr aTrack) const { /// Check if there is a TrackingParticle if ((this->findTrackingParticlePtr(aTrack)).isNull()) return false; @@ -46,16 +40,15 @@ bool TTTrackAssociationMap::isLooselyGenuine( /// MC truth template <> -bool TTTrackAssociationMap::isGenuine(edm::Ptr > aTrack) const { - /// Check if there is a TrackingParticle +bool TTTrackAssociationMap::isGenuine(TTTrackPtr aTrack) const { + /// Check if there is an associated TrackingParticle if ((this->findTrackingParticlePtr(aTrack)).isNull()) return false; - /// Get all the stubs from this TrackingParticle - std::vector >, TTStub > > - TP_Stubs = theStubAssociationMap->findTTStubRefs(this->findTrackingParticlePtr(aTrack)); - std::vector >, TTStub > > - TRK_Stubs = aTrack->getStubRefs(); + /// Get all the stubs from this track & associated TrackingParticle + const std::vector& TRK_Stubs = aTrack->getStubRefs(); + const std::vector& TP_Stubs = + theStubAssociationMap_->findTTStubRefs(this->findTrackingParticlePtr(aTrack)); bool one2SStub = false; for (unsigned int js = 0; js < TRK_Stubs.size(); js++) { @@ -78,8 +71,7 @@ bool TTTrackAssociationMap::isGenuine(edm::Ptr -bool TTTrackAssociationMap::isCombinatoric( - edm::Ptr > aTrack) const { +bool TTTrackAssociationMap::isCombinatoric(TTTrackPtr aTrack) const { /// Defined by exclusion if (this->isLooselyGenuine(aTrack)) return false; @@ -91,14 +83,13 @@ bool TTTrackAssociationMap::isCombinatoric( } template <> -bool TTTrackAssociationMap::isUnknown(edm::Ptr > aTrack) const { - /// UNKNOWN means that more than 2 stubs are unknown +bool TTTrackAssociationMap::isUnknown(TTTrackPtr aTrack) const { + /// UNKNOWN means that >= 2 stubs are unknown int unknownstubs = 0; - std::vector >, TTStub > > - theseStubs = aTrack->getStubRefs(); + const std::vector& theseStubs = aTrack->getStubRefs(); for (unsigned int i = 0; i < theseStubs.size(); i++) { - if (theStubAssociationMap->isUnknown(theseStubs.at(i)) == false) { + if (theStubAssociationMap_->isUnknown(theseStubs.at(i)) == false) { ++unknownstubs; if (unknownstubs >= 2) return false; diff --git a/SimTracker/TrackerMaterialAnalysis/data/dd4hep_trackingMaterialGroups_ForPhaseII.xml b/SimTracker/TrackerMaterialAnalysis/data/dd4hep_trackingMaterialGroups_ForPhaseII.xml index fb3ac742ef89a..9d83317dc6c3e 100644 --- a/SimTracker/TrackerMaterialAnalysis/data/dd4hep_trackingMaterialGroups_ForPhaseII.xml +++ b/SimTracker/TrackerMaterialAnalysis/data/dd4hep_trackingMaterialGroups_ForPhaseII.xml @@ -9,7 +9,7 @@ - + @@ -23,7 +23,7 @@ - + @@ -37,7 +37,7 @@ - + @@ -51,7 +51,7 @@ - + @@ -65,7 +65,7 @@ - + @@ -73,7 +73,7 @@ - + @@ -81,7 +81,7 @@ - + @@ -89,7 +89,7 @@ - + @@ -97,7 +97,7 @@ - + @@ -105,7 +105,7 @@ - + @@ -113,7 +113,7 @@ - + @@ -121,7 +121,7 @@ - + @@ -129,7 +129,7 @@ - + @@ -138,7 +138,7 @@ - + @@ -147,7 +147,7 @@ - + @@ -156,7 +156,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -358,7 +358,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -414,7 +414,7 @@ - + @@ -442,7 +442,7 @@ - + @@ -476,7 +476,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -538,7 +538,7 @@ - + @@ -566,7 +566,7 @@ - + diff --git a/SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml b/SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml new file mode 100644 index 0000000000000..30067d2110e84 --- /dev/null +++ b/SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml @@ -0,0 +1,1273 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII.xml b/SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII.xml index 8084a4b118b58..f572bbc767ab2 100644 --- a/SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII.xml +++ b/SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII.xml @@ -2,7 +2,7 @@ - + @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ - + @@ -44,7 +44,7 @@ - + @@ -58,7 +58,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -74,7 +74,7 @@ - + @@ -82,7 +82,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -98,7 +98,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -114,7 +114,7 @@ - + @@ -122,7 +122,7 @@ - + @@ -131,7 +131,7 @@ - + @@ -140,7 +140,7 @@ - + @@ -149,7 +149,7 @@ - + @@ -159,7 +159,7 @@ - + @@ -219,7 +219,7 @@ - + @@ -283,7 +283,7 @@ - + @@ -351,7 +351,7 @@ - + @@ -379,7 +379,7 @@ - + @@ -407,7 +407,7 @@ - + @@ -435,7 +435,7 @@ - + @@ -469,7 +469,7 @@ - + @@ -503,7 +503,7 @@ - + @@ -531,7 +531,7 @@ - + @@ -559,7 +559,7 @@ - + diff --git a/SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII/v1/trackingMaterialGroups_ForPhaseII.xml b/SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII/v1/trackingMaterialGroups_ForPhaseII.xml new file mode 100644 index 0000000000000..6d8f644d0058b --- /dev/null +++ b/SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII/v1/trackingMaterialGroups_ForPhaseII.xml @@ -0,0 +1,499 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SimTracker/TrackerMaterialAnalysis/plugins/dd4hep/DD4hep_MaterialAccountingGroup.cc b/SimTracker/TrackerMaterialAnalysis/plugins/dd4hep/DD4hep_MaterialAccountingGroup.cc index 896eac59774e5..76286a492e282 100644 --- a/SimTracker/TrackerMaterialAnalysis/plugins/dd4hep/DD4hep_MaterialAccountingGroup.cc +++ b/SimTracker/TrackerMaterialAnalysis/plugins/dd4hep/DD4hep_MaterialAccountingGroup.cc @@ -9,6 +9,8 @@ #include #include +#include + #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/GeometryVector/interface/GlobalPoint.h" @@ -39,7 +41,7 @@ DD4hep_MaterialAccountingGroup::DD4hep_MaterialAccountingGroup(const std::string if (firstChild) { std::vector> children = fv.children(k); for (auto const& path : children) { - cms::Translation trans = fv.translation(path); + cms::Translation trans = fv.translation(path) / dd4hep::cm; GlobalPoint gp = GlobalPoint(trans.x(), trans.y(), trans.z()); m_elements.emplace_back(gp); edm::LogVerbatim("TrackerMaterialAnalysis") diff --git a/SimTracker/TrackerMaterialAnalysis/test/TrackingMaterialAnalyser_dd4hep.py b/SimTracker/TrackerMaterialAnalysis/test/TrackingMaterialAnalyser_dd4hep.py index f80faf90bebc5..c1dc8e2757cc7 100755 --- a/SimTracker/TrackerMaterialAnalysis/test/TrackingMaterialAnalyser_dd4hep.py +++ b/SimTracker/TrackerMaterialAnalysis/test/TrackingMaterialAnalyser_dd4hep.py @@ -162,7 +162,7 @@ input = cms.untracked.int32(-1) ) -process.MessageLogger.destinations.extend(["LogTrackingMaterialAnalysis"]) -process.MessageLogger.categories.append("TrackingMaterialAnalysis") +process.MessageLogger.files.LogTrackingMaterialAnalysis = dict() +process.MessageLogger.TrackingMaterialAnalysis=dict() process.path = cms.Path(process.trackingMaterialAnalyser) diff --git a/SimTracker/TrackerMaterialAnalysis/test/dumpFullXML_ForPhaseI.py b/SimTracker/TrackerMaterialAnalysis/test/dumpFullXML_ForPhaseI.py index 87cf298789c6f..7c9f2e64f43d2 100755 --- a/SimTracker/TrackerMaterialAnalysis/test/dumpFullXML_ForPhaseI.py +++ b/SimTracker/TrackerMaterialAnalysis/test/dumpFullXML_ForPhaseI.py @@ -31,10 +31,10 @@ def checkEnvironment(): def getTrackerRecoMaterialCopy(filename): tracker_reco_material = os.path.join(os.environ['CMSSW_BASE'], - 'src/Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml') + 'src/Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml') if not os.path.exists(tracker_reco_material): tracker_reco_material = os.path.join(os.environ['CMSSW_RELEASE_BASE'], - 'src/Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml') + 'src/Geometry/TrackerRecoData/data/PhaseI/v1/trackerRecoMaterial.xml') if not os.path.exists(tracker_reco_material): print('Something is wrong with the CMSSW installation. The file %s is missing. Quitting.\n' % tracker_reco_material) sys.exit(TRACKER_MATERIAL_FILE_MISSING) diff --git a/SimTracker/TrackerMaterialAnalysis/test/listGroups.py b/SimTracker/TrackerMaterialAnalysis/test/listGroups.py index cb5fa397d2014..38e1417a21c6b 100755 --- a/SimTracker/TrackerMaterialAnalysis/test/listGroups.py +++ b/SimTracker/TrackerMaterialAnalysis/test/listGroups.py @@ -15,7 +15,7 @@ elif options.geometry == 'Phase1': process.load('Configuration.Geometry.GeometryExtended2017Reco_cff') # Add our custom detector grouping to DDD - process.XMLIdealGeometryESSource.geomXMLFiles.extend(['SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI.xml']) + process.XMLIdealGeometryESSource.geomXMLFiles.extend(['SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml']) elif options.geometry == 'Phase2': process.load('Configuration.Geometry.GeometryExtended2026D41Reco_cff') # Add our custom detector grouping to DDD diff --git a/SimTracker/TrackerMaterialAnalysis/test/listGroups_dd4hep.py b/SimTracker/TrackerMaterialAnalysis/test/listGroups_dd4hep.py index d5e0a6deaaa6d..08413d02d49bd 100755 --- a/SimTracker/TrackerMaterialAnalysis/test/listGroups_dd4hep.py +++ b/SimTracker/TrackerMaterialAnalysis/test/listGroups_dd4hep.py @@ -10,7 +10,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('TrackingMaterialGroup') + process.MessageLogger.TrackingMaterialGroup=dict() process.source = cms.Source("EmptySource") diff --git a/SimTracker/TrackerMaterialAnalysis/test/listIds_dd4hep.py b/SimTracker/TrackerMaterialAnalysis/test/listIds_dd4hep.py index 0fd122a3ac183..d6587fdf379fb 100755 --- a/SimTracker/TrackerMaterialAnalysis/test/listIds_dd4hep.py +++ b/SimTracker/TrackerMaterialAnalysis/test/listIds_dd4hep.py @@ -9,8 +9,9 @@ process = cms.Process("MaterialAnalyser") process.load('FWCore.MessageService.MessageLogger_cfi') + if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('ListIds') + process.MessageLogger.ListIds=dict() process.source = cms.Source("EmptySource") diff --git a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser.py b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser.py index a69d047255e89..2e71f9c0a782c 100755 --- a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser.py +++ b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser.py @@ -43,24 +43,22 @@ def customizeMessageLogger(process): # label for all defined python modules process.MessageLogger.debugModules.extend(['*']) # 2. Define destination and its default logging properties - destination = 'debugTrackingMaterialAnalyzer' how_to_debug = cms.untracked.PSet(threshold = cms.untracked.string("DEBUG"), DEBUG = cms.untracked.PSet(limit = cms.untracked.int32(0)), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), ) # 3. Attach destination and its logging properties to the main process - process.MessageLogger.destinations.extend([destination]) - process.MessageLogger._Parameterizable__addParameter(destination, how_to_debug) + process.MessageLogger.files.debugTrackingMaterialAnalyzer = how_to_debug # 4. Define and extend the categories we would like to monitor log_debug_categories = ['TrackingMaterialAnalyser'] - process.MessageLogger.categories.extend(log_debug_categories) + # 5. Extend the configuration of the configured destination so that it # will trace all messages coming from the list of specified # categories. unlimit_debug = cms.untracked.PSet(limit = cms.untracked.int32(-1)) for val in log_debug_categories: - process.MessageLogger.debugTrackingMaterialAnalyzer._Parameterizable__addParameter(val, unlimit_debug) + setattr(process.MessageLogger.files.debugTrackingMaterialAnalyzer,val, unlimit_debug) return process diff --git a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForHFNosePhaseII.py b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForHFNosePhaseII.py index 3b5fab62cf2e6..e434ed5b0120c 100644 --- a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForHFNosePhaseII.py +++ b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForHFNosePhaseII.py @@ -46,24 +46,22 @@ def customizeMessageLogger(process): # label for all defined python modules process.MessageLogger.debugModules.extend(['*']) # 2. Define destination and its default logging properties - destination = 'debugTrackingMaterialAnalyzer' how_to_debug = cms.untracked.PSet(threshold = cms.untracked.string("DEBUG"), DEBUG = cms.untracked.PSet(limit = cms.untracked.int32(0)), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), ) # 3. Attach destination and its logging properties to the main process - process.MessageLogger.destinations.extend([destination]) - process.MessageLogger._Parameterizable__addParameter(destination, how_to_debug) + process.MessageLogger.files.debugTrackingMaterialAnalyzer = how_to_debug # 4. Define and extend the categories we would like to monitor log_debug_categories = ['TrackingMaterialAnalyser', 'MaterialAccountingGroup'] - process.MessageLogger.categories.extend(log_debug_categories) + # 5. Extend the configuration of the configured destination so that it # will trace all messages coming from the list of specified # categories. unlimit_debug = cms.untracked.PSet(limit = cms.untracked.int32(-1)) for val in log_debug_categories: - process.MessageLogger.debugTrackingMaterialAnalyzer._Parameterizable__addParameter(val, unlimit_debug) + setattr(process.MessageLogger.files.debugTrackingMaterialAnalyzer, val, unlimit_debug) return process diff --git a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForHGCalPhaseII.py b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForHGCalPhaseII.py index 2e57e5f442388..01e0c1f7c7b49 100644 --- a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForHGCalPhaseII.py +++ b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForHGCalPhaseII.py @@ -46,24 +46,22 @@ def customizeMessageLogger(process): # label for all defined python modules process.MessageLogger.debugModules.extend(['*']) # 2. Define destination and its default logging properties - destination = 'debugTrackingMaterialAnalyzer' how_to_debug = cms.untracked.PSet(threshold = cms.untracked.string("DEBUG"), DEBUG = cms.untracked.PSet(limit = cms.untracked.int32(0)), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), ) # 3. Attach destination and its logging properties to the main process - process.MessageLogger.destinations.extend([destination]) - process.MessageLogger._Parameterizable__addParameter(destination, how_to_debug) + process.MessageLogger.files.debugTrackingMaterialAnalyzer= how_to_debug # 4. Define and extend the categories we would like to monitor log_debug_categories = ['TrackingMaterialAnalyser', 'MaterialAccountingGroup'] - process.MessageLogger.categories.extend(log_debug_categories) + # 5. Extend the configuration of the configured destination so that it # will trace all messages coming from the list of specified # categories. unlimit_debug = cms.untracked.PSet(limit = cms.untracked.int32(-1)) for val in log_debug_categories: - process.MessageLogger.debugTrackingMaterialAnalyzer._Parameterizable__addParameter(val, unlimit_debug) + setattr(process.MessageLogger.files.debugTrackingMaterialAnalyzer,val, unlimit_debug) return process diff --git a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForPhaseI.py b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForPhaseI.py index 215da51b9d3b0..d23119ff4e080 100755 --- a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForPhaseI.py +++ b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForPhaseI.py @@ -11,17 +11,17 @@ # material-budget grouping into the DDD of the detector. So we need to read the # geometry using the XMLIdealGeometryRecord. if not readGeometryFromDB: - process.load('Configuration.Geometry.GeometryExtended2017Reco_cff') + process.load('Configuration.Geometry.GeometryExtended2021Reco_cff') else: # GlobalTag and geometry via it process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") from Configuration.AlCa.GlobalTag import GlobalTag - process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2017_design', '') + process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') process.load('FWCore.MessageService.MessageLogger_cfi') # Add our custom detector grouping to DDD -process.XMLIdealGeometryESSource.geomXMLFiles.extend(['SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI.xml']) +process.XMLIdealGeometryESSource.geomXMLFiles.extend(['SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseI/v1/trackingMaterialGroups_ForPhaseI.xml']) # Analyze and plot the tracking material process.load("SimTracker.TrackerMaterialAnalysis.trackingMaterialAnalyser_ForPhaseI_cff") @@ -46,24 +46,22 @@ def customizeMessageLogger(process): # label for all defined python modules process.MessageLogger.debugModules.extend(['*']) # 2. Define destination and its default logging properties - destination = 'debugTrackingMaterialAnalyzer' how_to_debug = cms.untracked.PSet(threshold = cms.untracked.string("DEBUG"), DEBUG = cms.untracked.PSet(limit = cms.untracked.int32(0)), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), ) # 3. Attach destination and its logging properties to the main process - process.MessageLogger.destinations.extend([destination]) - process.MessageLogger._Parameterizable__addParameter(destination, how_to_debug) + process.MessageLogger.files.debugTrackingMaterialAnalyzer = how_to_debug # 4. Define and extend the categories we would like to monitor log_debug_categories = ['TrackingMaterialAnalyser', 'MaterialAccountingGroup'] - process.MessageLogger.categories.extend(log_debug_categories) + # 5. Extend the configuration of the configured destination so that it # will trace all messages coming from the list of specified # categories. unlimit_debug = cms.untracked.PSet(limit = cms.untracked.int32(-1)) for val in log_debug_categories: - process.MessageLogger.debugTrackingMaterialAnalyzer._Parameterizable__addParameter(val, unlimit_debug) + setattr(process.MessageLogger.files.debugTrackingMaterialAnalyzer,val, unlimit_debug) return process diff --git a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForPhaseII.py b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForPhaseII.py index 2be15625b5785..c46eb10ad1f06 100755 --- a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForPhaseII.py +++ b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialAnalyser_ForPhaseII.py @@ -25,8 +25,8 @@ process.load('Configuration.Geometry.GeometryExtended2026D49Reco_cff') process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.destinations.extend(["LogTrackingMaterialAnalysis"]) -process.MessageLogger.categories.append("TrackingMaterialAnalysis") +process.MessageLogger.files.LogTrackingMaterialAnalysis = dict() +process.MessageLogger.TrackingMaterialAnalysis=dict() # Add our custom detector grouping to DDD process.XMLIdealGeometryESSource.geomXMLFiles.extend(['SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII.xml']) diff --git a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino.py b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino.py index 27d74b3b45eac..7a11ebabfcd63 100755 --- a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino.py +++ b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino.py @@ -64,24 +64,22 @@ def customizeMessageLogger(process): # label for all defined python modules process.MessageLogger.debugModules.extend(['*']) # 2. Define destination and its default logging properties - destination = 'debugTrackingMaterialProducer' how_to_debug = cms.untracked.PSet(threshold = cms.untracked.string("DEBUG"), DEBUG = cms.untracked.PSet(limit = cms.untracked.int32(0)), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), ) # 3. Attach destination and its logging properties to the main process - process.MessageLogger.destinations.extend([destination]) - process.MessageLogger._Parameterizable__addParameter(destination, how_to_debug) + process.MessageLogger.files.debugTrackingMaterialProducer = how_to_debug # 4. Define and extend the categories we would like to monitor log_debug_categories = ['TrackingMaterialProducer'] - process.MessageLogger.categories.extend(log_debug_categories) + # 5. Extend the configuration of the configured destination so that it # will trace all messages coming from the list of specified # categories. unlimit_debug = cms.untracked.PSet(limit = cms.untracked.int32(-1)) for val in log_debug_categories: - process.MessageLogger.debugTrackingMaterialProducer._Parameterizable__addParameter(val, unlimit_debug) + setattr(process.MessageLogger.files.debugTrackingMaterialProducer, val, unlimit_debug) return process diff --git a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForHFNosePhaseII.py b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForHFNosePhaseII.py index 0314a4027a3e4..e27e571a4a347 100755 --- a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForHFNosePhaseII.py +++ b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForHFNosePhaseII.py @@ -63,24 +63,22 @@ def customizeMessageLogger(process): # label for all defined python modules process.MessageLogger.debugModules.extend(['*']) # 2. Define destination and its default logging properties - destination = 'debugTrackingMaterialProducer' how_to_debug = cms.untracked.PSet(threshold = cms.untracked.string("DEBUG"), DEBUG = cms.untracked.PSet(limit = cms.untracked.int32(0)), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), ) # 3. Attach destination and its logging properties to the main process - process.MessageLogger.destinations.extend([destination]) - process.MessageLogger._Parameterizable__addParameter(destination, how_to_debug) + process.MessageLogger.files.debugTrackingMaterialProducer = how_to_debug # 4. Define and extend the categories we would like to monitor log_debug_categories = ['TrackingMaterialProducer'] - process.MessageLogger.categories.extend(log_debug_categories) + # 5. Extend the configuration of the configured destination so that it # will trace all messages coming from the list of specified # categories. unlimit_debug = cms.untracked.PSet(limit = cms.untracked.int32(-1)) for val in log_debug_categories: - process.MessageLogger.debugTrackingMaterialProducer._Parameterizable__addParameter(val, unlimit_debug) + setattr(process.MessageLogger.files.debugTrackingMaterialProducer, val, unlimit_debug) return process diff --git a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForHGCalPhaseII.py b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForHGCalPhaseII.py index 3c86f58bc3ec6..48c3ba38a947f 100755 --- a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForHGCalPhaseII.py +++ b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForHGCalPhaseII.py @@ -63,24 +63,22 @@ def customizeMessageLogger(process): # label for all defined python modules process.MessageLogger.debugModules.extend(['*']) # 2. Define destination and its default logging properties - destination = 'debugTrackingMaterialProducer' how_to_debug = cms.untracked.PSet(threshold = cms.untracked.string("DEBUG"), DEBUG = cms.untracked.PSet(limit = cms.untracked.int32(0)), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), ) # 3. Attach destination and its logging properties to the main process - process.MessageLogger.destinations.extend([destination]) - process.MessageLogger._Parameterizable__addParameter(destination, how_to_debug) + process.MessageLogger.files.debugTrackingMaterialProducer = how_to_debug # 4. Define and extend the categories we would like to monitor log_debug_categories = ['TrackingMaterialProducer'] - process.MessageLogger.categories.extend(log_debug_categories) + # 5. Extend the configuration of the configured destination so that it # will trace all messages coming from the list of specified # categories. unlimit_debug = cms.untracked.PSet(limit = cms.untracked.int32(-1)) for val in log_debug_categories: - process.MessageLogger.debugTrackingMaterialProducer._Parameterizable__addParameter(val, unlimit_debug) + setattr(process.MessageLogger.files.debugTrackingMaterialProducer, val, unlimit_debug) return process diff --git a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForPhaseI.py b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForPhaseI.py index 7f79baa97baad..c0efa3b9f4b38 100755 --- a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForPhaseI.py +++ b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForPhaseI.py @@ -64,24 +64,22 @@ def customizeMessageLogger(process): # label for all defined python modules process.MessageLogger.debugModules.extend(['*']) # 2. Define destination and its default logging properties - destination = 'debugTrackingMaterialProducer' how_to_debug = cms.untracked.PSet(threshold = cms.untracked.string("DEBUG"), DEBUG = cms.untracked.PSet(limit = cms.untracked.int32(0)), default = cms.untracked.PSet(limit = cms.untracked.int32(0)), ) # 3. Attach destination and its logging properties to the main process - process.MessageLogger.destinations.extend([destination]) - process.MessageLogger._Parameterizable__addParameter(destination, how_to_debug) + process.MessageLogger.files.debugTrackingMaterialProducer = how_to_debug # 4. Define and extend the categories we would like to monitor log_debug_categories = ['TrackingMaterialProducer'] - process.MessageLogger.categories.extend(log_debug_categories) + # 5. Extend the configuration of the configured destination so that it # will trace all messages coming from the list of specified # categories. unlimit_debug = cms.untracked.PSet(limit = cms.untracked.int32(-1)) for val in log_debug_categories: - process.MessageLogger.debugTrackingMaterialProducer._Parameterizable__addParameter(val, unlimit_debug) + setattr(process.MessageLogger.files.debugTrackingMaterialProducer, val, unlimit_debug) return process diff --git a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForPhaseII.py b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForPhaseII.py index 437446c6efe7a..369eb016864ad 100755 --- a/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForPhaseII.py +++ b/SimTracker/TrackerMaterialAnalysis/test/trackingMaterialProducer10GeVNeutrino_ForPhaseII.py @@ -8,8 +8,8 @@ process = cms.Process("Geometry") process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.destinations.extend(["debugTrackingMaterialProducer"]) -process.MessageLogger.categories.append("TrackingMaterialProducer") +process.MessageLogger.files.debugTrackingMaterialProducer = dict() +process.MessageLogger.TrackingMaterialProducer=dict() process.load('Configuration.EventContent.EventContent_cff') diff --git a/TauAnalysis/MCEmbeddingTools/python/customisers.py b/TauAnalysis/MCEmbeddingTools/python/customisers.py index d97a8484959af..5e806a2c0b414 100644 --- a/TauAnalysis/MCEmbeddingTools/python/customisers.py +++ b/TauAnalysis/MCEmbeddingTools/python/customisers.py @@ -408,11 +408,15 @@ def customiseMerging(process, changeProcessname=True,reselect=False): # process.merge_step.remove(process.gedPhotonsTmp) # process.merge_step.remove(process.particleFlowTmp) process.merge_step.remove(process.hcalnoise) + process.merge_step.remove(process.lowPtGsfElectronTask) + process.merge_step.remove(process.gsfTracksOpenConversions) process.load('CommonTools.ParticleFlow.genForPF2PAT_cff') process.merge_step += process.genForPF2PATSequence + process.slimmingTask.remove(process.slimmedLowPtElectronsTask) + process.schedule.insert(0,process.merge_step) # process.load('PhysicsTools.PatAlgos.slimming.slimmedGenJets_cfi') diff --git a/TopQuarkAnalysis/Examples/bin/BuildFile.xml b/TopQuarkAnalysis/Examples/bin/BuildFile.xml deleted file mode 100644 index 5f4223bc2f6b1..0000000000000 --- a/TopQuarkAnalysis/Examples/bin/BuildFile.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TopQuarkAnalysis/Examples/bin/NiceStyle.cc b/TopQuarkAnalysis/Examples/bin/NiceStyle.cc deleted file mode 100644 index a1803b4c6d228..0000000000000 --- a/TopQuarkAnalysis/Examples/bin/NiceStyle.cc +++ /dev/null @@ -1,39 +0,0 @@ -#include - -void setNiceStyle() { - TStyle *MyStyle = new TStyle("MyStyle", "My style for nicer plots"); - - Float_t xoff = MyStyle->GetLabelOffset("X"), yoff = MyStyle->GetLabelOffset("Y"), zoff = MyStyle->GetLabelOffset("Z"); - - MyStyle->SetCanvasBorderMode(0); - MyStyle->SetPadBorderMode(0); - MyStyle->SetPadColor(0); - MyStyle->SetCanvasColor(0); - MyStyle->SetTitleColor(0); - MyStyle->SetStatColor(0); - MyStyle->SetTitleBorderSize(0); - MyStyle->SetTitleFillColor(0); - MyStyle->SetTitleH(0.07); - MyStyle->SetTitleW(1.00); - MyStyle->SetTitleFont(132); - - MyStyle->SetLabelOffset(1.5 * xoff, "X"); - MyStyle->SetLabelOffset(1.5 * yoff, "Y"); - MyStyle->SetLabelOffset(1.5 * zoff, "Z"); - - MyStyle->SetTitleOffset(0.9, "X"); - MyStyle->SetTitleOffset(0.9, "Y"); - MyStyle->SetTitleOffset(0.9, "Z"); - - MyStyle->SetTitleSize(0.045, "X"); - MyStyle->SetTitleSize(0.045, "Y"); - MyStyle->SetTitleSize(0.045, "Z"); - - MyStyle->SetLabelFont(132, "X"); - MyStyle->SetLabelFont(132, "Y"); - MyStyle->SetLabelFont(132, "Z"); - - MyStyle->SetPalette(1); - - MyStyle->cd(); -} diff --git a/TopQuarkAnalysis/Examples/bin/TopElecFWLiteAnalyzer.cc b/TopQuarkAnalysis/Examples/bin/TopElecFWLiteAnalyzer.cc deleted file mode 100644 index 55103efa1927d..0000000000000 --- a/TopQuarkAnalysis/Examples/bin/TopElecFWLiteAnalyzer.cc +++ /dev/null @@ -1,116 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "FWCore/FWLite/interface/FWLiteEnabler.h" -#include "DataFormats/PatCandidates/interface/Electron.h" - -#include "TopQuarkAnalysis/Examples/bin/NiceStyle.cc" -#include "TopQuarkAnalysis/Examples/interface/RootSystem.h" -#include "TopQuarkAnalysis/Examples/interface/RootHistograms.h" -#include "TopQuarkAnalysis/Examples/interface/RootPostScript.h" - -int main(int argc, char* argv[]) { - if (argc < 3) { - // ------------------------------------------------- - std::cerr << "ERROR:: " - << "Wrong number of arguments! Please specify:" << std::endl - << " * filepath" << std::endl - << " * process name" << std::endl; - // ------------------------------------------------- - return -1; - } - - // load framework libraries - gSystem->Load("libFWCoreFWLite"); - FWLiteEnabler::enable(); - - // set nice style for histograms - setNiceStyle(); - - // define some histograms - TH1I* noElecs = new TH1I("noElecs", "N_{Elecs}", 10, 0, 10); - TH1F* ptElecs = new TH1F("ptElecs", "pt_{Elecs}", 100, 0., 300.); - TH1F* enElecs = new TH1F("enElecs", "energy_{Elecs}", 100, 0., 300.); - TH1F* etaElecs = new TH1F("etaElecs", "eta_{Elecs}", 100, -3., 3.); - TH1F* phiElecs = new TH1F("phiElecs", "phi_{Elecs}", 100, -5., 5.); - - // ------------------------------------------------- - std::cout << "open file: " << argv[1] << std::endl; - // ------------------------------------------------- - TFile* inFile = TFile::Open(argv[1]); - TTree* events_ = nullptr; - if (inFile) - inFile->GetObject("Events", events_); - if (events_ == nullptr) { - // ------------------------------------------------- - std::cerr << "ERROR:: " - << "Unable to retrieve TTree Events!" << std::endl - << " Eighter wrong file name or the the tree doesn't exists" << std::endl; - // ------------------------------------------------- - return -1; - } - - // acess branch of elecs - char elecName[50]; - sprintf(elecName, "patElectrons_selectedPatElectrons__%s.obj", argv[2]); - TBranch* elecs_ = events_->GetBranch(elecName); - assert(elecs_ != nullptr); - - // loop over events and fill histograms - std::vector elecs; - int nevt = events_->GetEntries(); - - // ------------------------------------------------- - std::cout << "start looping " << nevt << " events..." << std::endl; - // ------------------------------------------------- - for (int evt = 0; evt < nevt; ++evt) { - // set branch address - elecs_->SetAddress(&elecs); - // get event - elecs_->GetEntry(evt); - events_->GetEntry(evt, 0); - - // ------------------------------------------------- - if (evt > 0 && !(evt % 10)) - std::cout << " processing event: " << evt << std::endl; - // ------------------------------------------------- - - // fill histograms - noElecs->Fill(elecs.size()); - for (unsigned idx = 0; idx < elecs.size(); ++idx) { - // fill histograms - ptElecs->Fill(elecs[idx].pt()); - enElecs->Fill(elecs[idx].energy()); - etaElecs->Fill(elecs[idx].eta()); - phiElecs->Fill(elecs[idx].phi()); - } - } - // ------------------------------------------------- - std::cout << "close file" << std::endl; - // ------------------------------------------------- - inFile->Close(); - - // save histograms to file - TFile outFile("analyzeElecs.root", "recreate"); - outFile.mkdir("analyzeElec"); - outFile.cd("analyzeElec"); - noElecs->Write(); - ptElecs->Write(); - enElecs->Write(); - etaElecs->Write(); - phiElecs->Write(); - outFile.Close(); - - // free allocated space - delete noElecs; - delete ptElecs; - delete enElecs; - delete etaElecs; - delete phiElecs; - - return 0; -} diff --git a/TopQuarkAnalysis/Examples/bin/TopHypothesisFWLiteAnalyzer.cc b/TopQuarkAnalysis/Examples/bin/TopHypothesisFWLiteAnalyzer.cc deleted file mode 100644 index 5640fccdbdca9..0000000000000 --- a/TopQuarkAnalysis/Examples/bin/TopHypothesisFWLiteAnalyzer.cc +++ /dev/null @@ -1,159 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "FWCore/FWLite/interface/FWLiteEnabler.h" -#include "AnalysisDataFormats/TopObjects/interface/TtSemiLeptonicEvent.h" - -#include "TopQuarkAnalysis/Examples/bin/NiceStyle.cc" -#include "TopQuarkAnalysis/Examples/interface/RootSystem.h" -#include "TopQuarkAnalysis/Examples/interface/RootHistograms.h" -#include "TopQuarkAnalysis/Examples/interface/RootPostScript.h" - -int main(int argc, char* argv[]) { - if (argc < 4) { - // ------------------------------------------------- - std::cerr << "ERROR: Wrong number of arguments!" << std::endl - << "Please specify: * file name" << std::endl - << " * process name" << std::endl - << " * HypoClassKey" << std::endl - << "Example: TopHypothesisFWLiteAnalyzer ttSemiLepEvtBuilder.root TEST kGeom" << std::endl; - // ------------------------------------------------- - return -1; - } - - // get HypoClassKey - std::string hypoClassKey = argv[3]; - - // load framework libraries - gSystem->Load("libFWCoreFWLite"); - FWLiteEnabler::enable(); - - // set nice style for histograms - setNiceStyle(); - - // define some histograms - TH1F* hadWPt_ = new TH1F("hadWPt", "p_{t} (W_{had}) [GeV]", 100, 0., 500.); - TH1F* hadWMass_ = new TH1F("hadWMass", "M (W_{had}) [GeV]", 50, 0., 150.); - TH1F* hadTopPt_ = new TH1F("hadTopPt", "p_{t} (t_{had}) [GeV]", 100, 0., 500.); - TH1F* hadTopMass_ = new TH1F("hadTopMass", "M (t_{had}) [GeV]", 50, 50., 250.); - - TH1F* lepWPt_ = new TH1F("lepWPt", "p_{t} (W_{lep}) [GeV]", 100, 0., 500.); - TH1F* lepWMass_ = new TH1F("lepWMass", "M (W_{lep}) [GeV]", 50, 0., 150.); - TH1F* lepTopPt_ = new TH1F("lepTopPt", "p_{t} (t_{lep}) [GeV]", 100, 0., 500.); - TH1F* lepTopMass_ = new TH1F("lepTopMass", "M (t_{lep}) [GeV]", 50, 50., 250.); - - // ------------------------------------------------- - std::cout << "open file: " << argv[1] << std::endl; - // ------------------------------------------------- - TFile* inFile = TFile::Open(argv[1]); - TTree* events_ = nullptr; - if (inFile) - inFile->GetObject("Events", events_); - if (events_ == nullptr) { - // ------------------------------------------------- - std::cerr << "ERROR: Unable to retrieve TTree Events!" << std::endl - << "Either wrong file name or the tree doesn't exist." << std::endl; - // ------------------------------------------------- - return -1; - } - - // acess branch of ttSemiLepEvent - char decayName[50]; - sprintf(decayName, "recoGenParticles_decaySubset__%s.obj", argv[2]); - TBranch* decay_ = events_->GetBranch(decayName); // referred to from within TtGenEvent class - assert(decay_ != nullptr); - char genEvtName[50]; - sprintf(genEvtName, "TtGenEvent_genEvt__%s.obj", argv[2]); - TBranch* genEvt_ = events_->GetBranch(genEvtName); // referred to from within TtSemiLeptonicEvent class - assert(genEvt_ != nullptr); - char semiLepEvtName[50]; - sprintf(semiLepEvtName, "TtSemiLeptonicEvent_ttSemiLepEvent__%s.obj", argv[2]); - TBranch* semiLepEvt_ = events_->GetBranch(semiLepEvtName); - assert(semiLepEvt_ != nullptr); - - // loop over events and fill histograms - int nevt = events_->GetEntries(); - TtSemiLeptonicEvent semiLepEvt; - // ------------------------------------------------- - std::cout << "start looping " << nevt << " events..." << std::endl; - // ------------------------------------------------- - for (int evt = 0; evt < nevt; ++evt) { - // set branch address - semiLepEvt_->SetAddress(&semiLepEvt); - // get event - decay_->GetEntry(evt); - genEvt_->GetEntry(evt); - semiLepEvt_->GetEntry(evt); - events_->GetEntry(evt, 0); - - // ------------------------------------------------- - if (evt > 0 && !(evt % 10)) - std::cout << " processing event: " << evt << std::endl; - // ------------------------------------------------- - - // fill histograms - if (!semiLepEvt.isHypoAvailable(hypoClassKey)) { - std::cerr << "NonValidHyp:: " - << "Hypothesis not available for this event" << std::endl; - continue; - } - if (!semiLepEvt.isHypoValid(hypoClassKey)) { - std::cerr << "NonValidHyp::" - << "Hypothesis not valid for this event" << std::endl; - continue; - } - - const reco::Candidate* hadTop = semiLepEvt.hadronicDecayTop(hypoClassKey); - const reco::Candidate* hadW = semiLepEvt.hadronicDecayW(hypoClassKey); - const reco::Candidate* lepTop = semiLepEvt.leptonicDecayTop(hypoClassKey); - const reco::Candidate* lepW = semiLepEvt.leptonicDecayW(hypoClassKey); - - if (hadTop && hadW && lepTop && lepW) { - hadWPt_->Fill(hadW->pt()); - hadWMass_->Fill(hadW->mass()); - hadTopPt_->Fill(hadTop->pt()); - hadTopMass_->Fill(hadTop->mass()); - - lepWPt_->Fill(lepW->pt()); - lepWMass_->Fill(lepW->mass()); - lepTopPt_->Fill(lepTop->pt()); - lepTopMass_->Fill(lepTop->mass()); - } - } - // ------------------------------------------------- - std::cout << "close file" << std::endl; - // ------------------------------------------------- - inFile->Close(); - - // save histograms to file - TFile outFile("analyzeHypothesis.root", "recreate"); - // strip the leading "k" from the hypoClassKey to build directory name - TString outDir = "analyze" + std::string(hypoClassKey, 1, hypoClassKey.length()); - outFile.mkdir(outDir); - outFile.cd(outDir); - hadWPt_->Write(); - hadWMass_->Write(); - hadTopPt_->Write(); - hadTopMass_->Write(); - lepWPt_->Write(); - lepWMass_->Write(); - lepTopPt_->Write(); - lepTopMass_->Write(); - outFile.Close(); - - // free allocated space - delete hadWPt_; - delete hadWMass_; - delete hadTopPt_; - delete hadTopMass_; - delete lepWPt_; - delete lepWMass_; - delete lepTopPt_; - delete lepTopMass_; - - return 0; -} diff --git a/TopQuarkAnalysis/Examples/bin/TopJetFWLiteAnalyzer.cc b/TopQuarkAnalysis/Examples/bin/TopJetFWLiteAnalyzer.cc deleted file mode 100644 index 3fb2782652da2..0000000000000 --- a/TopQuarkAnalysis/Examples/bin/TopJetFWLiteAnalyzer.cc +++ /dev/null @@ -1,116 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "FWCore/FWLite/interface/FWLiteEnabler.h" -#include "DataFormats/PatCandidates/interface/Jet.h" - -#include "TopQuarkAnalysis/Examples/bin/NiceStyle.cc" -#include "TopQuarkAnalysis/Examples/interface/RootSystem.h" -#include "TopQuarkAnalysis/Examples/interface/RootHistograms.h" -#include "TopQuarkAnalysis/Examples/interface/RootPostScript.h" - -int main(int argc, char* argv[]) { - if (argc < 3) { - // ------------------------------------------------- - std::cerr << "ERROR:: " - << "Wrong number of arguments! Please specify:" << std::endl - << " * filepath" << std::endl - << " * process name" << std::endl; - // ------------------------------------------------- - return -1; - } - - // load framework libraries - gSystem->Load("libFWCoreFWLite"); - FWLiteEnabler::enable(); - - // set nice style for histograms - setNiceStyle(); - - // define some histograms - TH1I* noJets = new TH1I("noJets", "N_{Jets}", 10, 0, 10); - TH1F* ptJets = new TH1F("ptJets", "pt_{Jets}", 100, 0., 300.); - TH1F* enJets = new TH1F("enJets", "energy_{Jets}", 100, 0., 300.); - TH1F* etaJets = new TH1F("etaJets", "eta_{Jets}", 100, -3., 3.); - TH1F* phiJets = new TH1F("phiJets", "phi_{Jets}", 100, -5., 5.); - - // ------------------------------------------------- - std::cout << "open file: " << argv[1] << std::endl; - // ------------------------------------------------- - TFile* inFile = TFile::Open(argv[1]); - TTree* events_ = nullptr; - if (inFile) - inFile->GetObject("Events", events_); - if (events_ == nullptr) { - // ------------------------------------------------- - std::cerr << "ERROR:: " - << "Unable to retrieve TTree Events!" << std::endl - << " Eighter wrong file name or the the tree doesn't exists" << std::endl; - // ------------------------------------------------- - return -1; - } - - // acess branch of elecs - char jetsName[50]; - sprintf(jetsName, "patJets_selectedPatJets__%s.obj", argv[2]); - TBranch* jets_ = events_->GetBranch(jetsName); - assert(jets_ != nullptr); - - // loop over events and fill histograms - std::vector jets; - int nevt = events_->GetEntries(); - - // ------------------------------------------------- - std::cout << "start looping " << nevt << " events..." << std::endl; - // ------------------------------------------------- - for (int evt = 0; evt < nevt; ++evt) { - // set branch address - jets_->SetAddress(&jets); - // get event - jets_->GetEntry(evt); - events_->GetEntry(evt, 0); - - // ------------------------------------------------- - if (evt > 0 && !(evt % 10)) - std::cout << " processing event: " << evt << std::endl; - // ------------------------------------------------- - - // fill histograms - noJets->Fill(jets.size()); - for (unsigned idx = 0; idx < jets.size(); ++idx) { - // fill histograms - ptJets->Fill(jets[idx].pt()); - enJets->Fill(jets[idx].energy()); - etaJets->Fill(jets[idx].eta()); - phiJets->Fill(jets[idx].phi()); - } - } - // ------------------------------------------------- - std::cout << "close file" << std::endl; - // ------------------------------------------------- - inFile->Close(); - - // save histograms to file - TFile outFile("analyzeJets.root", "recreate"); - outFile.mkdir("analyzeJet"); - outFile.cd("analyzeJet"); - noJets->Write(); - ptJets->Write(); - enJets->Write(); - etaJets->Write(); - phiJets->Write(); - outFile.Close(); - - // free allocated space - delete noJets; - delete ptJets; - delete enJets; - delete etaJets; - delete phiJets; - - return 0; -} diff --git a/TopQuarkAnalysis/Examples/bin/TopMuonFWLiteAnalyzer.cc b/TopQuarkAnalysis/Examples/bin/TopMuonFWLiteAnalyzer.cc deleted file mode 100644 index a43795589107f..0000000000000 --- a/TopQuarkAnalysis/Examples/bin/TopMuonFWLiteAnalyzer.cc +++ /dev/null @@ -1,128 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "FWCore/FWLite/interface/FWLiteEnabler.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/Electron.h" - -#include "TopQuarkAnalysis/Examples/bin/NiceStyle.cc" -#include "TopQuarkAnalysis/Examples/interface/RootSystem.h" -#include "TopQuarkAnalysis/Examples/interface/RootHistograms.h" -#include "TopQuarkAnalysis/Examples/interface/RootPostScript.h" - -int main(int argc, char* argv[]) { - if (argc < 3) { - // ------------------------------------------------- - std::cerr << "ERROR:: " - << "Wrong number of arguments! Please specify:" << std::endl - << " * filepath" << std::endl - << " * process name" << std::endl; - // ------------------------------------------------- - return -1; - } - - // load framework libraries - gSystem->Load("libFWCoreFWLite"); - FWLiteEnabler::enable(); - - // set nice style for histograms - setNiceStyle(); - - // define some histograms - TH1I* noMuons = new TH1I("noMuons", "N(Muon)", 10, 0, 10); - TH1I* noLepts = new TH1I("noLepts", "N(Lepton)", 10, 0, 10); - TH1F* ptMuons = new TH1F("ptMuons", "pt_{Muons}", 100, 0., 300.); - TH1F* enMuons = new TH1F("enMuons", "energy_{Muons}", 100, 0., 300.); - TH1F* etaMuons = new TH1F("etaMuons", "eta_{Muons}", 100, -3., 3.); - TH1F* phiMuons = new TH1F("phiMuons", "phi_{Muons}", 100, -5., 5.); - - // ------------------------------------------------- - std::cout << "open file: " << argv[1] << std::endl; - // ------------------------------------------------- - TFile* inFile = TFile::Open(argv[1]); - TTree* events_ = nullptr; - if (inFile) - inFile->GetObject("Events", events_); - if (events_ == nullptr) { - // ------------------------------------------------- - std::cerr << "ERROR:: " - << "Unable to retrieve TTree Events!" << std::endl - << " Eighter wrong file name or the the tree doesn't exists" << std::endl; - // ------------------------------------------------- - return -1; - } - - // acess branch of muons and elecs - char muonName[50]; - sprintf(muonName, "patMuons_selectedPatMuons__%s.obj", argv[2]); - TBranch* muons_ = events_->GetBranch(muonName); - assert(muons_ != nullptr); - char elecName[50]; - sprintf(elecName, "patElectrons_selectedPatElectrons__%s.obj", argv[2]); - TBranch* elecs_ = events_->GetBranch(elecName); - assert(elecs_ != nullptr); - - // loop over events and fill histograms - std::vector muons; - std::vector elecs; - int nevt = events_->GetEntries(); - - // ------------------------------------------------- - std::cout << "start looping " << nevt << " events..." << std::endl; - // ------------------------------------------------- - for (int evt = 0; evt < nevt; ++evt) { - // set branch address - muons_->SetAddress(&muons); - elecs_->SetAddress(&elecs); - // get event - muons_->GetEntry(evt); - elecs_->GetEntry(evt); - events_->GetEntry(evt, 0); - - // ------------------------------------------------- - if (evt > 0 && !(evt % 10)) - std::cout << " processing event: " << evt << std::endl; - // ------------------------------------------------- - - // fill histograms - noMuons->Fill(muons.size()); - noLepts->Fill(muons.size() + elecs.size()); - for (unsigned idx = 0; idx < muons.size(); ++idx) { - // fill histograms - ptMuons->Fill(muons[idx].pt()); - enMuons->Fill(muons[idx].energy()); - etaMuons->Fill(muons[idx].eta()); - phiMuons->Fill(muons[idx].phi()); - } - } - // ------------------------------------------------- - std::cout << "close file" << std::endl; - // ------------------------------------------------- - inFile->Close(); - - // save histograms to file - TFile outFile("analyzeMuons.root", "recreate"); - outFile.mkdir("analyzeMuon"); - outFile.cd("analyzeMuon"); - noMuons->Write(); - noLepts->Write(); - ptMuons->Write(); - enMuons->Write(); - etaMuons->Write(); - phiMuons->Write(); - outFile.Close(); - - // free allocated space - delete noMuons; - delete noLepts; - delete ptMuons; - delete enMuons; - delete etaMuons; - delete phiMuons; - - return 0; -} diff --git a/TopQuarkAnalysis/Examples/interface/RootHistograms.h b/TopQuarkAnalysis/Examples/interface/RootHistograms.h deleted file mode 100644 index 7351c73e30385..0000000000000 --- a/TopQuarkAnalysis/Examples/interface/RootHistograms.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef RootHistograms_h -#define RootHistograms_h - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#endif diff --git a/TopQuarkAnalysis/Examples/interface/RootPostScript.h b/TopQuarkAnalysis/Examples/interface/RootPostScript.h deleted file mode 100644 index 4a9a4201640a4..0000000000000 --- a/TopQuarkAnalysis/Examples/interface/RootPostScript.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef RootPostScript_h -#define RootPostScript_h - -#include - -#endif diff --git a/TopQuarkAnalysis/Examples/interface/RootSystem.h b/TopQuarkAnalysis/Examples/interface/RootSystem.h deleted file mode 100644 index ef6a20f67ad5d..0000000000000 --- a/TopQuarkAnalysis/Examples/interface/RootSystem.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef RootSystem_h -#define RootSystem_h - -#include -#include -#include -#include - -#endif diff --git a/TopQuarkAnalysis/Examples/plugins/BuildFile.xml b/TopQuarkAnalysis/Examples/plugins/BuildFile.xml deleted file mode 100644 index 457fc6b29087f..0000000000000 --- a/TopQuarkAnalysis/Examples/plugins/BuildFile.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/TopQuarkAnalysis/Examples/plugins/HypothesisAnalyzer.cc b/TopQuarkAnalysis/Examples/plugins/HypothesisAnalyzer.cc deleted file mode 100644 index 96928bb82795b..0000000000000 --- a/TopQuarkAnalysis/Examples/plugins/HypothesisAnalyzer.cc +++ /dev/null @@ -1,194 +0,0 @@ -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "TopQuarkAnalysis/Examples/plugins/HypothesisAnalyzer.h" - -HypothesisAnalyzer::HypothesisAnalyzer(const edm::ParameterSet& cfg) - : semiLepEvtToken_(consumes(cfg.getParameter("semiLepEvent"))), - hypoClassKey_(cfg.getParameter("hypoClassKey")) {} - -void HypothesisAnalyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) { - ////////////////////////////////////////////////////////////////////////////////////////////////// - // get a handle for the TtSemiLeptonicEvent and a key to the hypothesis - ////////////////////////////////////////////////////////////////////////////////////////////////// - - edm::Handle semiLepEvt; - event.getByToken(semiLepEvtToken_, semiLepEvt); - - ////////////////////////////////////////////////////////////////////////////////////////////////// - // check if hypothesis is available and valid in this event - ////////////////////////////////////////////////////////////////////////////////////////////////// - - if (!semiLepEvt->isHypoValid(hypoClassKey_)) { - edm::LogInfo("HypothesisAnalyzer") << "Hypothesis " << hypoClassKey_ << " not valid for this event"; - return; - } - - ////////////////////////////////////////////////////////////////////////////////////////////////// - // get reconstructed top quarks, W bosons, the top pair and the neutrino from the hypothesis - ////////////////////////////////////////////////////////////////////////////////////////////////// - - const reco::Candidate* topPair = semiLepEvt->topPair(hypoClassKey_); - const reco::Candidate* lepTop = semiLepEvt->leptonicDecayTop(hypoClassKey_); - const reco::Candidate* lepW = semiLepEvt->leptonicDecayW(hypoClassKey_); - const reco::Candidate* hadTop = semiLepEvt->hadronicDecayTop(hypoClassKey_); - const reco::Candidate* hadW = semiLepEvt->hadronicDecayW(hypoClassKey_); - const reco::Candidate* neutrino = semiLepEvt->singleNeutrino(hypoClassKey_); - - ////////////////////////////////////////////////////////////////////////////////////////////////// - // fill simple histograms with kinematic variables of the reconstructed particles - ////////////////////////////////////////////////////////////////////////////////////////////////// - - if (topPair) - topPairMass_->Fill(topPair->mass()); - if (hadW) { - hadWPt_->Fill(hadW->pt()); - hadWEta_->Fill(hadW->eta()); - hadWMass_->Fill(hadW->mass()); - } - if (hadTop) { - hadTopPt_->Fill(hadTop->pt()); - hadTopEta_->Fill(hadTop->eta()); - hadTopMass_->Fill(hadTop->mass()); - } - if (lepW) { - lepWPt_->Fill(lepW->pt()); - lepWEta_->Fill(lepW->eta()); - lepWMass_->Fill(lepW->mass()); - } - if (lepTop) { - lepTopPt_->Fill(lepTop->pt()); - lepTopEta_->Fill(lepTop->eta()); - lepTopMass_->Fill(lepTop->mass()); - } - if (neutrino) - neutrinoEta_->Fill(neutrino->eta()); - - ////////////////////////////////////////////////////////////////////////////////////////////////// - // get corresponding genParticles - ////////////////////////////////////////////////////////////////////////////////////////////////// - - const math::XYZTLorentzVector* genTopPair = semiLepEvt->topPair(); - const reco::Candidate* genHadTop = semiLepEvt->hadronicDecayTop(); - const reco::Candidate* genHadW = semiLepEvt->hadronicDecayW(); - const reco::Candidate* genLepTop = semiLepEvt->leptonicDecayTop(); - const reco::Candidate* genLepW = semiLepEvt->leptonicDecayW(); - const reco::Candidate* genNeutrino = semiLepEvt->singleNeutrino(); - - ////////////////////////////////////////////////////////////////////////////////////////////////// - // fill pull histograms of kinematic variables with respect to the generated particles - ////////////////////////////////////////////////////////////////////////////////////////////////// - - if (topPair && genTopPair) - topPairPullMass_->Fill((topPair->mass() - genTopPair->mass()) / genTopPair->mass()); - if (hadW && genHadW) { - hadWPullPt_->Fill((hadW->pt() - genHadW->pt()) / genHadW->pt()); - hadWPullEta_->Fill((hadW->eta() - genHadW->eta()) / genHadW->eta()); - hadWPullMass_->Fill((hadW->mass() - genHadW->mass()) / genHadW->mass()); - } - - if (hadTop && genHadTop) { - hadTopPullPt_->Fill((hadTop->pt() - genHadTop->pt()) / genHadTop->pt()); - hadTopPullEta_->Fill((hadTop->eta() - genHadTop->eta()) / genHadTop->eta()); - hadTopPullMass_->Fill((hadTop->mass() - genHadTop->mass()) / genHadTop->mass()); - } - if (lepW && genLepW) { - lepWPullPt_->Fill((lepW->pt() - genLepW->pt()) / genLepW->pt()); - lepWPullEta_->Fill((lepW->eta() - genLepW->eta()) / genLepW->eta()); - lepWPullMass_->Fill((lepW->mass() - genLepW->mass()) / genLepW->mass()); - } - - if (lepTop && genLepTop) { - lepTopPullPt_->Fill((lepTop->pt() - genLepTop->pt()) / genLepTop->pt()); - lepTopPullEta_->Fill((lepTop->eta() - genLepTop->eta()) / genLepTop->eta()); - lepTopPullMass_->Fill((lepTop->mass() - genLepTop->mass()) / genLepTop->mass()); - } - if (neutrino && genNeutrino) - neutrinoPullEta_->Fill((neutrino->eta() - genNeutrino->eta()) / genNeutrino->eta()); - - ////////////////////////////////////////////////////////////////////////////////////////////////// - // fill histograms with variables describing the quality of the hypotheses - ////////////////////////////////////////////////////////////////////////////////////////////////// - - genMatchDr_->Fill(semiLepEvt->genMatchSumDR()); - kinFitProb_->Fill(semiLepEvt->fitProb()); - - if (hadTop && genHadTop) { - genMatchDrVsHadTopPullMass_->Fill((hadTop->mass() - genHadTop->mass()) / genHadTop->mass(), - semiLepEvt->genMatchSumDR()); - kinFitProbVsHadTopPullMass_->Fill((hadTop->mass() - genHadTop->mass()) / genHadTop->mass(), semiLepEvt->fitProb()); - } -} - -void HypothesisAnalyzer::beginJob() { - edm::Service fs; - if (!fs) - throw edm::Exception(edm::errors::Configuration, "TFile Service is not registered in cfg file"); - - ////////////////////////////////////////////////////////////////////////////////////////////////// - // book histograms - ////////////////////////////////////////////////////////////////////////////////////////////////// - - neutrinoEta_ = fs->make("neutrinoEta", "#eta (neutrino)", 21, -4., 4.); - neutrinoPullEta_ = fs->make("neutrinoPullEta", "(#eta_{rec}-#eta_{gen})/#eta_{gen} (neutrino)", 40, -1., 1.); - - hadWPt_ = fs->make("hadWPt", "p_{T} (W_{had}) [GeV]", 25, 0., 500.); - hadWEta_ = fs->make("hadWEta", "#eta (W_{had})", 21, -4., 4.); - hadWMass_ = fs->make("hadWMass", "M (W_{had}) [GeV]", 25, 0., 200.); - - hadTopPt_ = fs->make("hadTopPt", "p_{T} (t_{had}) [GeV]", 25, 0., 500.); - hadTopEta_ = fs->make("hadTopEta", "#eta (t_{had})", 21, -4., 4.); - hadTopMass_ = fs->make("hadTopMass", "M (t_{had}) [GeV]", 40, 0., 400.); - - lepWPt_ = fs->make("lepWPt", "p_{t} (W_{lep}) [GeV]", 25, 0., 500.); - lepWEta_ = fs->make("lepWEta", "#eta (W_{lep})", 21, -4., 4.); - lepWMass_ = fs->make("lepWMass", "M (W_{lep}) [GeV]", 25, 0., 200.); - - lepTopPt_ = fs->make("lepTopPt", "p_{T} (t_{lep}) [GeV]", 25, 0., 500.); - lepTopEta_ = fs->make("lepTopEta", "#eta (t_{lep})", 21, -4., 4.); - lepTopMass_ = fs->make("lepTopMass", "M (t_{lep}) [GeV]", 40, 0., 400.); - - hadWPullPt_ = fs->make("hadWPullPt", "(p_{T,rec}-p_{T,gen})/p_{T,gen} (W_{had})", 40, -1., 1.); - hadWPullEta_ = fs->make("hadWPullEta", "(#eta_{rec}-#eta_{gen})/#eta_{gen} (W_{had})", 40, -1., 1.); - hadWPullMass_ = fs->make("hadWPullMass", "(M_{rec}-M_{gen})/M_{gen} (W_{had})", 40, -1., 1.); - - hadTopPullPt_ = fs->make("hadTopPullPt", "(p_{T,rec}-p_{T,gen})/p_{T,gen} (t_{had})", 40, -1., 1.); - hadTopPullEta_ = fs->make("hadTopPullEta", "(#eta_{rec}-#eta_{gen})/#eta_{gen} (t_{had})", 40, -1., 1.); - hadTopPullMass_ = fs->make("hadTopPullMass", "(M_{rec}-M_{gen})/M_{gen} (t_{had})", 40, -1., 1.); - - lepWPullPt_ = fs->make("lepWPullPt", "(p_{T,rec}-p_{T,gen})/p_{T,gen} (W_{lep})", 40, -1., 1.); - lepWPullEta_ = fs->make("lepWPullEta", "(#eta_{rec}-#eta_{gen})/#eta_{gen} (W_{lep})", 40, -1., 1.); - lepWPullMass_ = fs->make("lepWPullMass", "(M_{rec}-M_{gen})/M_{gen} (W_{lep})", 40, -1., 1.); - - lepTopPullPt_ = fs->make("lepTopPullPt", "(p_{T,rec}-p_{T,gen})/p_{T,gen} (t_{lep})", 40, -1., 1.); - lepTopPullEta_ = fs->make("lepTopPullEta", "(#eta_{rec}-#eta_{gen})/#eta_{gen} (t_{lep})", 40, -1., 1.); - lepTopPullMass_ = fs->make("lepTopPullMass", "(M_{rec}-M_{gen})/M_{gen} (t_{lep})", 40, -1., 1.); - - topPairMass_ = fs->make("topPairMass", "M (t#bar{t})", 36, 340., 940.); - topPairPullMass_ = fs->make("topPairPullMass", "(M_{rec}-M_{gen})/M_{gen} (t#bar{t})", 40, -1., 1.); - - genMatchDr_ = fs->make("genMatchDr", "GenMatch #Sigma#DeltaR", 40, 0., 4.); - kinFitProb_ = fs->make("kinFitProb", "KinFit probability", 50, 0., 1.); - - genMatchDrVsHadTopPullMass_ = fs->make("genMatchDrVsHadTopPullMass", - "GenMatch #Sigma #Delta R vs. (M_{rec}-M_{gen})/M_{gen} (t_{had}))", - 40, - -1., - 1., - 40, - 0., - 4.); - kinFitProbVsHadTopPullMass_ = fs->make("kinFitProbVsHadTopPullMass", - "KinFit probability vs. (M_{rec}-M_{gen})/M_{gen} (t_{had}))", - 40, - -1., - 1., - 20, - 0., - 1.); -} - -void HypothesisAnalyzer::endJob() {} diff --git a/TopQuarkAnalysis/Examples/plugins/HypothesisAnalyzer.h b/TopQuarkAnalysis/Examples/plugins/HypothesisAnalyzer.h deleted file mode 100644 index c8a1d67622e47..0000000000000 --- a/TopQuarkAnalysis/Examples/plugins/HypothesisAnalyzer.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef HypothesisAnalyzer_h -#define HypothesisAnalyzer_h - -#include "TH1F.h" -#include "TH2F.h" - -#include "FWCore/Framework/interface/EDAnalyzer.h" - -#include "AnalysisDataFormats/TopObjects/interface/TtSemiLeptonicEvent.h" - -class HypothesisAnalyzer : public edm::EDAnalyzer { -public: - explicit HypothesisAnalyzer(const edm::ParameterSet&); - ~HypothesisAnalyzer() override{}; - -private: - void beginJob() override; - void analyze(const edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - const edm::EDGetTokenT semiLepEvtToken_; - const std::string hypoClassKey_; - - TH1F* neutrinoEta_; - TH1F* neutrinoPullEta_; - - TH1F* hadWPt_; - TH1F* hadWEta_; - TH1F* hadWMass_; - - TH1F* hadWPullPt_; - TH1F* hadWPullEta_; - TH1F* hadWPullMass_; - - TH1F* hadTopPt_; - TH1F* hadTopEta_; - TH1F* hadTopMass_; - - TH1F* hadTopPullPt_; - TH1F* hadTopPullEta_; - TH1F* hadTopPullMass_; - - TH1F* lepWPt_; - TH1F* lepWEta_; - TH1F* lepWMass_; - - TH1F* lepWPullPt_; - TH1F* lepWPullEta_; - TH1F* lepWPullMass_; - - TH1F* lepTopPt_; - TH1F* lepTopEta_; - TH1F* lepTopMass_; - - TH1F* topPairMass_; - TH1F* topPairPullMass_; - - TH1F* lepTopPullPt_; - TH1F* lepTopPullEta_; - TH1F* lepTopPullMass_; - - TH1F* genMatchDr_; - TH1F* kinFitProb_; - - TH2F* genMatchDrVsHadTopPullMass_; - TH2F* kinFitProbVsHadTopPullMass_; -}; - -#endif diff --git a/TopQuarkAnalysis/Examples/plugins/SealModule.cc b/TopQuarkAnalysis/Examples/plugins/SealModule.cc deleted file mode 100644 index ad75a7faa9665..0000000000000 --- a/TopQuarkAnalysis/Examples/plugins/SealModule.cc +++ /dev/null @@ -1,14 +0,0 @@ -#include "TopQuarkAnalysis/Examples/plugins/TopGenEventAnalyzer.h" -#include "TopQuarkAnalysis/Examples/plugins/HypothesisAnalyzer.h" -#include "TopQuarkAnalysis/Examples/plugins/TopMuonAnalyzer.h" -#include "TopQuarkAnalysis/Examples/plugins/TopElecAnalyzer.h" -#include "TopQuarkAnalysis/Examples/plugins/TopTauAnalyzer.h" -#include "TopQuarkAnalysis/Examples/plugins/TopJetAnalyzer.h" - -#include "FWCore/Framework/interface/MakerMacros.h" -DEFINE_FWK_MODULE(TopGenEventAnalyzer); -DEFINE_FWK_MODULE(HypothesisAnalyzer); -DEFINE_FWK_MODULE(TopMuonAnalyzer); -DEFINE_FWK_MODULE(TopElecAnalyzer); -DEFINE_FWK_MODULE(TopTauAnalyzer); -DEFINE_FWK_MODULE(TopJetAnalyzer); diff --git a/TopQuarkAnalysis/Examples/plugins/TopElecAnalyzer.cc b/TopQuarkAnalysis/Examples/plugins/TopElecAnalyzer.cc deleted file mode 100644 index 7647dd69118c3..0000000000000 --- a/TopQuarkAnalysis/Examples/plugins/TopElecAnalyzer.cc +++ /dev/null @@ -1,54 +0,0 @@ -#include "TopQuarkAnalysis/Examples/plugins/TopElecAnalyzer.h" - -TopElecAnalyzer::TopElecAnalyzer(const edm::ParameterSet& cfg) - : inputToken_(consumes >(cfg.getParameter("input"))), - verbose_(cfg.getParameter("verbose")) { - edm::Service fs; - - mult_ = fs->make("mult", "multiplicity (electrons)", 10, 0, 10); - en_ = fs->make("en", "energy (electrons)", 60, 0., 300.); - pt_ = fs->make("pt", "pt (electrons)", 60, 0., 300.); - eta_ = fs->make("eta", "eta (electrons)", 30, -3., 3.); - phi_ = fs->make("phi", "phi (electrons)", 40, -4., 4.); -} - -TopElecAnalyzer::~TopElecAnalyzer() {} - -void TopElecAnalyzer::analyze(const edm::Event& evt, const edm::EventSetup& setup) { - edm::Handle > elecs; - evt.getByToken(inputToken_, elecs); - - // fill histograms - - mult_->Fill(elecs->size()); - for (std::vector::const_iterator elec = elecs->begin(); elec != elecs->end(); ++elec) { - en_->Fill(elec->energy()); - pt_->Fill(elec->pt()); - eta_->Fill(elec->eta()); - phi_->Fill(elec->phi()); - } - - // produce printout if desired - - if (elecs->empty() || !verbose_) - return; - - unsigned i = 0; - - std::cout << "=======================================================" << std::endl; - std::cout << std::setw(5) << "ele :" << std::setw(13) << "et :" << std::setw(13) << "eta :" << std::setw(13) - << "phi :" << std::setw(11) << "relIso" << std::endl; - std::cout << "-------------------------------------------------------" << std::endl; - for (std::vector::const_iterator elec = elecs->begin(); elec != elecs->end(); ++elec) { - std::cout << std::setw(3) << i << " : " << std::setw(10) << elec->pt() << " : " << std::setw(10) << elec->eta() - << " : " << std::setw(10) << elec->phi() << " : " << std::setw(10) - << (elec->dr03TkSumPt() + elec->dr03EcalRecHitSumEt() + elec->dr03HcalTowerSumEt()) / elec->et() - << std::endl; - i++; - } - std::cout << "=======================================================" << std::endl; -} - -void TopElecAnalyzer::beginJob() {} - -void TopElecAnalyzer::endJob() {} diff --git a/TopQuarkAnalysis/Examples/plugins/TopElecAnalyzer.h b/TopQuarkAnalysis/Examples/plugins/TopElecAnalyzer.h deleted file mode 100644 index 651e38e73dbca..0000000000000 --- a/TopQuarkAnalysis/Examples/plugins/TopElecAnalyzer.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef TopElecAnalyzer_h -#define TopElecAnalyzer_h - -#include "TH1F.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "DataFormats/PatCandidates/interface/Electron.h" - -class TopElecAnalyzer : public edm::EDAnalyzer { -public: - explicit TopElecAnalyzer(const edm::ParameterSet &); - ~TopElecAnalyzer() override; - -private: - void beginJob() override; - void analyze(const edm::Event &, const edm::EventSetup &) override; - void endJob() override; - - edm::EDGetTokenT > inputToken_; - bool verbose_; - - TH1F *mult_; - TH1F *en_; - TH1F *pt_; - TH1F *eta_; - TH1F *phi_; -}; - -#endif diff --git a/TopQuarkAnalysis/Examples/plugins/TopGenEventAnalyzer.cc b/TopQuarkAnalysis/Examples/plugins/TopGenEventAnalyzer.cc deleted file mode 100644 index 0debc785767c9..0000000000000 --- a/TopQuarkAnalysis/Examples/plugins/TopGenEventAnalyzer.cc +++ /dev/null @@ -1,57 +0,0 @@ -#include "TopQuarkAnalysis/Examples/plugins/TopGenEventAnalyzer.h" - -TopGenEventAnalyzer::TopGenEventAnalyzer(const edm::ParameterSet& cfg) - : inputGenEventToken_(consumes(cfg.getParameter("genEvent"))) { - edm::Service fs; - nLep_ = fs->make("nLep", "N(Lepton)", 5, 0., 5.); - topPt_ = fs->make("topPt", "pt (top)", 100, 0., 500.); - topEta_ = fs->make("topEta", "eta(top)", 40, -5., 5.); - topPhi_ = fs->make("topPhi", "phi(top)", 60, -3.5, 3.5); - topBarPt_ = fs->make("topBarPt", "pt (topBar)", 100, 0., 500.); - topBarEta_ = fs->make("topBarEta", "eta(topBar)", 40, -5., 5.); - topBarPhi_ = fs->make("topBarPhi", "phi(topBar)", 60, -3.5, 3.5); - ttbarPt_ = fs->make("ttbarPt", "pt (ttbar)", 100, 0., 500.); - ttbarEta_ = fs->make("ttbarEta", "eta(ttbar)", 40, -5., 5.); - ttbarPhi_ = fs->make("ttbarPhi", "phi(ttbar)", 60, -3.5, 3.5); - prodChan_ = fs->make("prodChan", "production mode", 3, 0, 3); - prodChan_->GetXaxis()->SetBinLabel(1, "gg"); - prodChan_->GetXaxis()->SetBinLabel(2, "qqbar"); - prodChan_->GetXaxis()->SetBinLabel(3, "other"); -} - -TopGenEventAnalyzer::~TopGenEventAnalyzer() {} - -void TopGenEventAnalyzer::analyze(const edm::Event& evt, const edm::EventSetup& setup) { - edm::Handle genEvent; - evt.getByToken(inputGenEventToken_, genEvent); - - if (!genEvent->isTtBar()) - return; - - if (genEvent->fromGluonFusion()) - prodChan_->Fill("gg", 1); - else if (genEvent->fromQuarkAnnihilation()) - prodChan_->Fill("qqbar", 1); - else - prodChan_->Fill("other", 1); - - // fill BR's - nLep_->Fill(genEvent->numberOfLeptons()); - - //fill top kinematic - topPt_->Fill(genEvent->top()->pt()); - topEta_->Fill(genEvent->top()->eta()); - topPhi_->Fill(genEvent->top()->phi()); - topBarPt_->Fill(genEvent->topBar()->pt()); - topBarEta_->Fill(genEvent->topBar()->eta()); - topBarPhi_->Fill(genEvent->topBar()->phi()); - - //fill ttbar kinematics - ttbarPt_->Fill(genEvent->topPair()->pt()); - ttbarEta_->Fill(genEvent->topPair()->eta()); - ttbarPhi_->Fill(genEvent->topPair()->phi()); -} - -void TopGenEventAnalyzer::beginJob() {} - -void TopGenEventAnalyzer::endJob() {} diff --git a/TopQuarkAnalysis/Examples/plugins/TopGenEventAnalyzer.h b/TopQuarkAnalysis/Examples/plugins/TopGenEventAnalyzer.h deleted file mode 100644 index ee291cc930e0a..0000000000000 --- a/TopQuarkAnalysis/Examples/plugins/TopGenEventAnalyzer.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef TopGenEventAnalyzer_h -#define TopGenEventAnalyzer_h - -#include "TH1.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "AnalysisDataFormats/TopObjects/interface/TtGenEvent.h" - -class TopGenEventAnalyzer : public edm::EDAnalyzer { -public: - explicit TopGenEventAnalyzer(const edm::ParameterSet &); - ~TopGenEventAnalyzer() override; - -private: - void beginJob() override; - void analyze(const edm::Event &, const edm::EventSetup &) override; - void endJob() override; - - edm::EDGetTokenT inputGenEventToken_; - - TH1F *nLep_; - TH1F *topPt_; - TH1F *topEta_; - TH1F *topPhi_; - TH1F *topBarPt_; - TH1F *topBarEta_; - TH1F *topBarPhi_; - TH1F *ttbarPt_; - TH1F *ttbarEta_; - TH1F *ttbarPhi_; - TH1F *prodChan_; -}; - -#endif diff --git a/TopQuarkAnalysis/Examples/plugins/TopJetAnalyzer.cc b/TopQuarkAnalysis/Examples/plugins/TopJetAnalyzer.cc deleted file mode 100644 index 59d5870ace070..0000000000000 --- a/TopQuarkAnalysis/Examples/plugins/TopJetAnalyzer.cc +++ /dev/null @@ -1,80 +0,0 @@ -#include "TopQuarkAnalysis/Examples/plugins/TopJetAnalyzer.h" - -TopJetAnalyzer::TopJetAnalyzer(const edm::ParameterSet& cfg) - : inputToken_(consumes >(cfg.getParameter("input"))), - verbose_(cfg.getParameter("verbose")) { - edm::Service fs; - - mult_ = fs->make("mult", "multiplicity (jets)", 30, 0, 30); - en_ = fs->make("en", "energy (jets)", 60, 0., 300.); - pt_ = fs->make("pt", "pt (jets)", 60, 0., 300.); - eta_ = fs->make("eta", "eta (jets)", 30, -3., 3.); - phi_ = fs->make("phi", "phi (jets)", 40, -4., 4.); -} - -TopJetAnalyzer::~TopJetAnalyzer() {} - -void TopJetAnalyzer::analyze(const edm::Event& evt, const edm::EventSetup& setup) { - edm::Handle > jets; - evt.getByToken(inputToken_, jets); - - // fill histograms - - mult_->Fill(jets->size()); - for (std::vector::const_iterator jet = jets->begin(); jet != jets->end(); ++jet) { - pt_->Fill(jet->pt()); - en_->Fill(jet->energy()); - eta_->Fill(jet->eta()); - phi_->Fill(jet->phi()); - } - - // produce printout if desired - - if (jets->empty() || !verbose_) - return; - - int lineWidth = 75; - if (jets->begin()->isCaloJet()) - lineWidth = 100; - else if (jets->begin()->isPFJet()) - lineWidth = 120; - - std::cout << std::setfill('=') << std::setw(lineWidth) << "\n" << std::setfill(' '); - std::cout << std::setw(5) << "jet :" << std::setw(11) << "pt :" << std::setw(9) << "eta :" << std::setw(9) - << "phi :" << std::setw(11) << "TCHE :" << std::setw(11) << "TCHP :" << std::setw(9) - << "SSVHE :" << std::setw(9) << "SSVHP :"; - if (jets->begin()->isCaloJet()) { - std::cout << std::setw(8) << "emf :" << std::setw(10) << "n90Hits :" << std::setw(7) << "fHPD"; - } - if (jets->begin()->isPFJet()) { - std::cout << std::setw(9) << "chf : " << std::setw(8) << "nhf : " << std::setw(8) << "cef : " << std::setw(8) - << "nef : " << std::setw(6) << "nCh : " << std::setw(6) << "nConst"; - } - std::cout << std::endl << std::setfill('-') << std::setw(lineWidth) << "\n" << std::setfill(' '); - unsigned i = 0; - for (std::vector::const_iterator jet = jets->begin(); jet != jets->end(); ++jet) { - std::cout << std::setw(3) << i << " : " << std::setprecision(3) << std::fixed << std::setw(8) << jet->pt() << " : " - << std::setw(6) << jet->eta() << " : " << std::setw(6) << jet->phi() << " : " << std::setw(8) - << jet->bDiscriminator("trackCountingHighEffBJetTags") << " : " << std::setw(8) - << jet->bDiscriminator("trackCountingHighPurBJetTags") << " : " << std::setw(6) - << jet->bDiscriminator("simpleSecondaryVertexHighEffBJetTags") << " : " << std::setw(6) - << jet->bDiscriminator("simpleSecondaryVertexHighPurBJetTags") << " : "; - if (jet->isCaloJet()) { - std::cout << std::setw(5) << jet->emEnergyFraction() << " : " << std::setw(7) << jet->jetID().n90Hits << " : " - << std::setw(6) << jet->jetID().fHPD; - } - if (jet->isPFJet()) { - std::cout << std::setw(5) << jet->chargedHadronEnergyFraction() << " : " << std::setw(5) - << jet->neutralHadronEnergyFraction() << " : " << std::setw(5) << jet->chargedEmEnergyFraction() - << " : " << std::setw(5) << jet->neutralEmEnergyFraction() << " : " << std::setw(3) - << jet->chargedMultiplicity() << " : " << std::setw(6) << jet->nConstituents(); - } - std::cout << std::endl; - i++; - } - std::cout << std::setfill('=') << std::setw(lineWidth) << "\n" << std::setfill(' '); -} - -void TopJetAnalyzer::beginJob() {} - -void TopJetAnalyzer::endJob() {} diff --git a/TopQuarkAnalysis/Examples/plugins/TopJetAnalyzer.h b/TopQuarkAnalysis/Examples/plugins/TopJetAnalyzer.h deleted file mode 100644 index 7f0e2d3fb56e1..0000000000000 --- a/TopQuarkAnalysis/Examples/plugins/TopJetAnalyzer.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef TopJetAnalyzer_h -#define TopJetAnalyzer_h - -#include "TH1F.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "DataFormats/PatCandidates/interface/Jet.h" - -class TopJetAnalyzer : public edm::EDAnalyzer { -public: - explicit TopJetAnalyzer(const edm::ParameterSet &); - ~TopJetAnalyzer() override; - -private: - void beginJob() override; - void analyze(const edm::Event &, const edm::EventSetup &) override; - void endJob() override; - - edm::EDGetTokenT > inputToken_; - bool verbose_; - - TH1F *mult_; - TH1F *en_; - TH1F *pt_; - TH1F *eta_; - TH1F *phi_; -}; - -#endif diff --git a/TopQuarkAnalysis/Examples/plugins/TopMuonAnalyzer.cc b/TopQuarkAnalysis/Examples/plugins/TopMuonAnalyzer.cc deleted file mode 100644 index 02ee1ac814a2b..0000000000000 --- a/TopQuarkAnalysis/Examples/plugins/TopMuonAnalyzer.cc +++ /dev/null @@ -1,55 +0,0 @@ -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "TopQuarkAnalysis/Examples/plugins/TopMuonAnalyzer.h" - -TopMuonAnalyzer::TopMuonAnalyzer(const edm::ParameterSet& cfg) - : inputToken_(consumes >(cfg.getParameter("input"))), - verbose_(cfg.getParameter("verbose")) { - edm::Service fs; - - mult_ = fs->make("mult", "multiplicity (muons)", 10, 0, 10); - en_ = fs->make("en", "energy (muons)", 60, 0., 300.); - pt_ = fs->make("pt", "pt (muons)", 60, 0., 300.); - eta_ = fs->make("eta", "eta (muons)", 30, -3., 3.); - phi_ = fs->make("phi", "phi (muons)", 40, -4., 4.); -} - -TopMuonAnalyzer::~TopMuonAnalyzer() {} - -void TopMuonAnalyzer::analyze(const edm::Event& evt, const edm::EventSetup& setup) { - edm::Handle > muons; - evt.getByToken(inputToken_, muons); - - // fill histograms - - mult_->Fill(muons->size()); - for (std::vector::const_iterator muon = muons->begin(); muon != muons->end(); ++muon) { - pt_->Fill(muon->pt()); - en_->Fill(muon->energy()); - eta_->Fill(muon->eta()); - phi_->Fill(muon->phi()); - } - - // produce printout if desired - - if (muons->empty() || !verbose_) - return; - - unsigned i = 0; - - std::cout << "===================================================================" << std::endl; - std::cout << std::setw(5) << "mu :" << std::setw(13) << "pt :" << std::setw(13) << "eta :" << std::setw(13) - << "phi :" << std::setw(13) << "relIso :" << std::setw(6) << "GLB :" << std::setw(4) << "TRK" << std::endl; - std::cout << "-------------------------------------------------------------------" << std::endl; - for (std::vector::const_iterator muon = muons->begin(); muon != muons->end(); ++muon) { - std::cout << std::setw(3) << i << " : " << std::setw(10) << muon->pt() << " : " << std::setw(10) << muon->eta() - << " : " << std::setw(10) << muon->phi() << " : " << std::setw(10) - << (muon->trackIso() + muon->caloIso()) / muon->pt() << " : " << std::setw(3) << muon->isGlobalMuon() - << " : " << std::setw(3) << muon->isTrackerMuon() << std::endl; - i++; - } - std::cout << "===================================================================" << std::endl; -} - -void TopMuonAnalyzer::beginJob() {} - -void TopMuonAnalyzer::endJob() {} diff --git a/TopQuarkAnalysis/Examples/plugins/TopMuonAnalyzer.h b/TopQuarkAnalysis/Examples/plugins/TopMuonAnalyzer.h deleted file mode 100644 index ec324205b9842..0000000000000 --- a/TopQuarkAnalysis/Examples/plugins/TopMuonAnalyzer.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef TopMuonAnalyzer_h -#define TopMuonAnalyzer_h - -#include "TH1F.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "DataFormats/PatCandidates/interface/Muon.h" - -class TopMuonAnalyzer : public edm::EDAnalyzer { -public: - explicit TopMuonAnalyzer(const edm::ParameterSet &); - ~TopMuonAnalyzer() override; - -private: - void beginJob() override; - void analyze(const edm::Event &, const edm::EventSetup &) override; - void endJob() override; - - edm::EDGetTokenT > inputToken_; - bool verbose_; - - TH1F *mult_; - TH1F *en_; - TH1F *pt_; - TH1F *eta_; - TH1F *phi_; -}; - -#endif diff --git a/TopQuarkAnalysis/Examples/plugins/TopTauAnalyzer.cc b/TopQuarkAnalysis/Examples/plugins/TopTauAnalyzer.cc deleted file mode 100644 index f597335814be3..0000000000000 --- a/TopQuarkAnalysis/Examples/plugins/TopTauAnalyzer.cc +++ /dev/null @@ -1,33 +0,0 @@ -#include "TopQuarkAnalysis/Examples/plugins/TopTauAnalyzer.h" - -TopTauAnalyzer::TopTauAnalyzer(const edm::ParameterSet& cfg) - : inputToken_(consumes >(cfg.getParameter("input"))) { - edm::Service fs; - - mult_ = fs->make("mult", "multiplicity (taus)", 30, 0, 30); - en_ = fs->make("en", "energy (taus)", 60, 0., 300.); - pt_ = fs->make("pt", "pt (taus}", 60, 0., 300.); - eta_ = fs->make("eta", "eta (taus)", 30, -3., 3.); - phi_ = fs->make("phi", "phi (taus)", 40, -4., 4.); -} - -TopTauAnalyzer::~TopTauAnalyzer() {} - -void TopTauAnalyzer::analyze(const edm::Event& evt, const edm::EventSetup& setup) { - edm::Handle > taus; - evt.getByToken(inputToken_, taus); - - // fill histograms - - mult_->Fill(taus->size()); - for (std::vector::const_iterator tau = taus->begin(); tau != taus->end(); ++tau) { - en_->Fill(tau->energy()); - pt_->Fill(tau->pt()); - eta_->Fill(tau->eta()); - phi_->Fill(tau->phi()); - } -} - -void TopTauAnalyzer::beginJob() {} - -void TopTauAnalyzer::endJob() {} diff --git a/TopQuarkAnalysis/Examples/plugins/TopTauAnalyzer.h b/TopQuarkAnalysis/Examples/plugins/TopTauAnalyzer.h deleted file mode 100644 index a88cad0a74974..0000000000000 --- a/TopQuarkAnalysis/Examples/plugins/TopTauAnalyzer.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef TopTauAnalyzer_h -#define TopTauAnalyzer_h - -#include "TH1F.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "DataFormats/PatCandidates/interface/Tau.h" - -class TopTauAnalyzer : public edm::EDAnalyzer { -public: - explicit TopTauAnalyzer(const edm::ParameterSet &); - ~TopTauAnalyzer() override; - -private: - void beginJob() override; - void analyze(const edm::Event &, const edm::EventSetup &) override; - void endJob() override; - - edm::EDGetTokenT > inputToken_; - - TH1F *mult_; - TH1F *en_; - TH1F *pt_; - TH1F *eta_; - TH1F *phi_; -}; - -#endif diff --git a/TopQuarkAnalysis/Examples/python/HypothesisAnalyzer_cff.py b/TopQuarkAnalysis/Examples/python/HypothesisAnalyzer_cff.py deleted file mode 100644 index 738e73f300cd5..0000000000000 --- a/TopQuarkAnalysis/Examples/python/HypothesisAnalyzer_cff.py +++ /dev/null @@ -1,17 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# make simple analysis plots for a comparison -# between event hypothesis from different algorithms -# - -# initialize/configure analyzers -from TopQuarkAnalysis.Examples.HypothesisAnalyzer_cfi import * -analyzeGenMatch = analyzeHypothesis.clone(hypoClassKey = "kGenMatch") -analyzeMaxSumPtWMass = analyzeHypothesis.clone(hypoClassKey = "kMaxSumPtWMass") -analyzeKinFit = analyzeHypothesis.clone(hypoClassKey = "kKinFit") - -# define sequence -analyzeHypotheses = cms.Sequence(analyzeGenMatch * - analyzeMaxSumPtWMass * - analyzeKinFit) diff --git a/TopQuarkAnalysis/Examples/python/HypothesisAnalyzer_cfi.py b/TopQuarkAnalysis/Examples/python/HypothesisAnalyzer_cfi.py deleted file mode 100644 index 6479f84b30155..0000000000000 --- a/TopQuarkAnalysis/Examples/python/HypothesisAnalyzer_cfi.py +++ /dev/null @@ -1,11 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# module to make simple analyses of top event hypotheses -# -analyzeHypothesis = cms.EDAnalyzer("HypothesisAnalyzer", - semiLepEvent = cms.InputTag("ttSemiLepEvent"), - hypoClassKey = cms.string("kMaxSumPtWMass") -) - - diff --git a/TopQuarkAnalysis/Examples/python/TopElecAnalyzer_cfi.py b/TopQuarkAnalysis/Examples/python/TopElecAnalyzer_cfi.py deleted file mode 100644 index e5a959111ffec..0000000000000 --- a/TopQuarkAnalysis/Examples/python/TopElecAnalyzer_cfi.py +++ /dev/null @@ -1,11 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# module to make simple analyses of electrons -# -analyzeElec = cms.EDAnalyzer("TopElecAnalyzer", - input = cms.InputTag("selectedPatElectrons"), - verbose = cms.bool(True) -) - - diff --git a/TopQuarkAnalysis/Examples/python/TopGenEventAnalyzer_cfi.py b/TopQuarkAnalysis/Examples/python/TopGenEventAnalyzer_cfi.py deleted file mode 100644 index be0cf32cd10c1..0000000000000 --- a/TopQuarkAnalysis/Examples/python/TopGenEventAnalyzer_cfi.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# module to make simple analyses based on the TtGenEvent -# -analyzeTopGenEvent = cms.EDAnalyzer("TopGenEventAnalyzer", - genEvent = cms.InputTag("genEvt") -) - - diff --git a/TopQuarkAnalysis/Examples/python/TopJetAnalyzer_cfi.py b/TopQuarkAnalysis/Examples/python/TopJetAnalyzer_cfi.py deleted file mode 100644 index 15a80513c58d9..0000000000000 --- a/TopQuarkAnalysis/Examples/python/TopJetAnalyzer_cfi.py +++ /dev/null @@ -1,11 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# module to make simple analyses of jets -# -analyzeJet = cms.EDAnalyzer("TopJetAnalyzer", - input = cms.InputTag("selectedPatJets"), - verbose = cms.bool(True) -) - - diff --git a/TopQuarkAnalysis/Examples/python/TopMuonAnalyzer_cfi.py b/TopQuarkAnalysis/Examples/python/TopMuonAnalyzer_cfi.py deleted file mode 100644 index 1a5534f3b930d..0000000000000 --- a/TopQuarkAnalysis/Examples/python/TopMuonAnalyzer_cfi.py +++ /dev/null @@ -1,11 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# module to make simple analyses of muons -# -analyzeMuon = cms.EDAnalyzer("TopMuonAnalyzer", - input = cms.InputTag("selectedPatMuons"), - verbose = cms.bool(True) -) - - diff --git a/TopQuarkAnalysis/Examples/python/TopTauAnalyzer_cfi.py b/TopQuarkAnalysis/Examples/python/TopTauAnalyzer_cfi.py deleted file mode 100644 index e05b1a2d20cc1..0000000000000 --- a/TopQuarkAnalysis/Examples/python/TopTauAnalyzer_cfi.py +++ /dev/null @@ -1,11 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# -# module to make simple analyses of tautrons -# -analyzeTau = cms.EDAnalyzer("TopTauAnalyzer", - input = cms.InputTag("selectedPatTaus"), - verbose = cms.bool(True) -) - - diff --git a/TopQuarkAnalysis/Examples/test/BuildFile.xml b/TopQuarkAnalysis/Examples/test/BuildFile.xml deleted file mode 100644 index 36636d4cfa8a9..0000000000000 --- a/TopQuarkAnalysis/Examples/test/BuildFile.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/TopQuarkAnalysis/Examples/test/analyzeTopElectron_cfg.py b/TopQuarkAnalysis/Examples/test/analyzeTopElectron_cfg.py deleted file mode 100644 index 927da73bda200..0000000000000 --- a/TopQuarkAnalysis/Examples/test/analyzeTopElectron_cfg.py +++ /dev/null @@ -1,51 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("TEST") - -## configure message logger -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr.threshold = cms.untracked.string('INFO') -process.MessageLogger.categories = cms.untracked.vstring('TEST') - -## define input -from TopQuarkAnalysis.TopEventProducers.tqafInputFiles_cff import relValTTbar -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring(relValTTbar) -) - -## define maximal number of events to loop over -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(10) -) - -## configure process options -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -## configure geometry & conditions -process.load("Configuration.Geometry.GeometryRecoDB_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -from Configuration.AlCa.GlobalTag import GlobalTag -process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_mc') -process.load("Configuration.StandardSequences.MagneticField_cff") - -process.task = cms.Task() - -## std sequence for PAT -process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") -process.task.add(process.patCandidatesTask) -#Temporary customize to the unit tests that fail due to old input samples -process.patTaus.skipMissingTauID = True -process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") -process.task.add(process.selectedPatCandidatesTask) - -process.load("TopQuarkAnalysis.Examples.TopElecAnalyzer_cfi") - -# register TFileService -process.TFileService = cms.Service("TFileService", - fileName = cms.string('analyzeTopElec.root') -) - -## end path -process.p1 = cms.Path(process.analyzeElec, process.task) diff --git a/TopQuarkAnalysis/Examples/test/analyzeTopGenEvent_cfg.py b/TopQuarkAnalysis/Examples/test/analyzeTopGenEvent_cfg.py deleted file mode 100644 index 18ddcaf15640c..0000000000000 --- a/TopQuarkAnalysis/Examples/test/analyzeTopGenEvent_cfg.py +++ /dev/null @@ -1,42 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("TEST") - -## configure message logger -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr.threshold = cms.untracked.string('INFO') -## dump content of TopGenEvent -process.MessageLogger.categories.append('TopGenEvent') - -## define input -from TopQuarkAnalysis.TopEventProducers.tqafInputFiles_cff import relValTTbar -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring(relValTTbar) -) - -## define maximal number of events to loop over -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(100) -) - -## configure process options -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -process.task = cms.Task() - -## load modules to produce the TtGenEvent -process.load("TopQuarkAnalysis.TopEventProducers.sequences.ttGenEvent_cff") -process.task.add(process.makeGenEvtTask) - -## load analyzer -process.load("TopQuarkAnalysis.Examples.TopGenEventAnalyzer_cfi") - -## register TFileService -process.TFileService = cms.Service("TFileService", - fileName = cms.string('analyzeTopGenEvent.root') -) - -## end path -process.p1 = cms.Path(process.analyzeTopGenEvent, process.task) diff --git a/TopQuarkAnalysis/Examples/test/analyzeTopHypotheses.C b/TopQuarkAnalysis/Examples/test/analyzeTopHypotheses.C deleted file mode 100644 index 394702ef8214c..0000000000000 --- a/TopQuarkAnalysis/Examples/test/analyzeTopHypotheses.C +++ /dev/null @@ -1,112 +0,0 @@ -#include -#include -#include -#include -#include - -#include -#include - -void setHistStyles(std::vector* hists, const bool normalize) -{ - const int lineColors[3] = {kGreen+1, kBlue, kRed}; - const int lineStyles[3] = {1, 3, 1}; - const int fillColors[3] = {kGreen+1, kBlue, 0}; - const int fillStyles[3] = {3554, 0, 0}; - - for(unsigned h=0; hSetXTitle(hists[0][h]->GetTitle()); - if(normalize) - hists[0][h]->SetYTitle("a.u."); - else - hists[0][h]->SetYTitle("Events"); - hists[0][h]->SetTitle(""); - hists[0][h]->SetStats(kFALSE); - for(unsigned d=0; d<3; d++) { - if(normalize) - hists[d][h]->Scale(1/hists[d][h]->Integral()); - hists[d][h]->SetLineWidth(2); - hists[d][h]->SetLineColor(lineColors[d]); - hists[d][h]->SetLineStyle(lineStyles[d]); - hists[d][h]->SetFillColor(fillColors[d]); - hists[d][h]->SetFillStyle(fillStyles[d]); - } - } -} - -void setYmax() -{ - TIter iter(gPad->GetListOfPrimitives()); - TObject *obj; - TH1 *h_1=0; - TH1 *h_i=0; - Bool_t foundfirstHisto = kFALSE; - while ((obj = (TObject*)iter.Next())) { - if(obj->InheritsFrom("TH1")) { - if(foundfirstHisto == kFALSE) { - h_1 = (TH1*)obj; - foundfirstHisto = kTRUE; - } - else { - h_i = (TH1*)obj; - Double_t max_i = h_i->GetMaximum(); - if(max_i > h_1->GetMaximum()) h_1->SetMaximum(1.05 * max_i); - } - } - } -} - -void analyzeTopHypotheses() -{ - TFile* file = new TFile("analyzeTopHypothesis.root"); - - const bool normalize = true; - - gROOT->cd(); - gROOT->SetStyle("Plain"); - - const TString dirs[3] = {"analyzeGenMatch", - "analyzeMaxSumPtWMass", - "analyzeKinFit"}; - - std::vector hists[3]; - - TIter iter(((TDirectoryFile*) file->Get(dirs[0]))->GetListOfKeys()); - TObject *obj; - while((obj = (TObject*)iter.Next())) { - if(((TDirectoryFile*) file->Get(dirs[0]))->Get(obj->GetName())->InheritsFrom("TH1F")) { - for(unsigned d=0; d<3; d++) - hists[d].push_back((TH1F*) file->Get(dirs[d]+"/"+obj->GetName())->Clone()); - } - } - - file->Close(); - delete file; - - setHistStyles(hists, normalize); - - TCanvas* canvas = new TCanvas("canvas", "canvas", 900, 600); - canvas->Print("analyzeTopHypotheses.ps["); - - TLegend legend(0.6, 0.75, 0.9, 0.9); - legend.SetFillColor(0); - legend.AddEntry(hists[0][0], "GenMatch" , "F"); - legend.AddEntry(hists[1][0], "MaxSumPtWMass", "L"); - legend.AddEntry(hists[2][0], "KinFit" , "L"); - - for(unsigned h=0; hDraw(); - if(!((TString)hists[0][h]->GetName()).Contains("genMatch")) { - hists[1][h]->Draw("same"); - hists[2][h]->Draw("same"); - legend.Draw(); - setYmax(); - } - gPad->RedrawAxis(); - canvas->Print("analyzeTopHypotheses.ps"); - //canvas->Print((TString)"analyzeTopHypotheses/"+hists[0][h]->GetName()+".eps"); - } - - canvas->Print("analyzeTopHypotheses.ps]"); - delete canvas; -} diff --git a/TopQuarkAnalysis/Examples/test/analyzeTopHypotheses_cfg.py b/TopQuarkAnalysis/Examples/test/analyzeTopHypotheses_cfg.py deleted file mode 100644 index ea754929736e4..0000000000000 --- a/TopQuarkAnalysis/Examples/test/analyzeTopHypotheses_cfg.py +++ /dev/null @@ -1,90 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("TEST") - -## configure message logger -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append('TtSemiLeptonicEvent') -process.MessageLogger.categories.append('TtSemiLepKinFitter') - -## define input -from TopQuarkAnalysis.TopEventProducers.tqafInputFiles_cff import relValTTbar -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring(relValTTbar) -) -#process.source = cms.Source("PoolSource", -# fileNames = cms.untracked.vstring( -# ['rfio:///castor/cern.ch/user/s/snaumann/test/Spring12/TTJets_TuneZ2star_8TeV-madgraph-tauola_AODSIM_PU_S7_START52_V5-v1/PAT_muJets_1.root', -# 'rfio:///castor/cern.ch/user/s/snaumann/test/Spring12/TTJets_TuneZ2star_8TeV-madgraph-tauola_AODSIM_PU_S7_START52_V5-v1/PAT_muJets_2.root', -# 'rfio:///castor/cern.ch/user/s/snaumann/test/Spring12/TTJets_TuneZ2star_8TeV-madgraph-tauola_AODSIM_PU_S7_START52_V5-v1/PAT_muJets_3.root'] -# ) -#) - -## define maximal number of events to loop over -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(100) -) - -## configure process options -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -## configure geometry & conditions -process.load("Configuration.Geometry.GeometryRecoDB_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -from Configuration.AlCa.GlobalTag import GlobalTag -process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_mc') -process.load("Configuration.StandardSequences.MagneticField_cff") - -process.task = cms.Task() - -## std sequence for PAT -process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") -process.task.add(process.patCandidatesTask) -#Temporary customize to the unit tests that fail due to old input samples -process.patTaus.skipMissingTauID = True -process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") -process.task.add(process.selectedPatCandidatesTask) - -## use genParticles to select only muon+jets events -process.load("TopQuarkAnalysis.TopSkimming.ttDecayChannelFilters_cff") -process.task.add(process.ttDecayChannelFiltersTask) -process.ttSemiLeptonicFilter.allowedTopDecays.decayBranchA.electron = False - -## sequences for ttGenEvent and TtSemiLeptonicEvent -process.load("TopQuarkAnalysis.TopEventProducers.sequences.ttGenEvent_cff") -process.task.add(process.makeGenEvtTask) - -process.load("TopQuarkAnalysis.TopEventProducers.sequences.ttSemiLepEvtBuilder_cff") -process.task.add(process.makeTtSemiLepEventTask) -## enable additional per-event printout from the TtSemiLeptonicEvent -process.ttSemiLepEvent.verbosity = 1 - -## choose which hypotheses to produce -from TopQuarkAnalysis.TopEventProducers.sequences.ttSemiLepEvtBuilder_cff import * -addTtSemiLepHypotheses(process, ["kMaxSumPtWMass", "kKinFit"]) -## change some common parameters -#setForAllTtSemiLepHypotheses(process, "maxNJets", 5) -#setForAllTtSemiLepHypotheses(process, "neutrinoSolutionType", 2) -## use b-tagging for hypotheses (neglected for GenMatch) -#setForAllTtSemiLepHypotheses(process, "useBTagging", True) -#setForAllTtSemiLepHypotheses(process, "bTagAlgorithm", "combinedSecondaryVertexBJetTags") -#setForAllTtSemiLepHypotheses(process, "minBDiscBJets" , 0.679) -#setForAllTtSemiLepHypotheses(process, "maxBDiscLightJets", 0.679) - -## change jet-parton matching algorithm -#process.ttSemiLepJetPartonMatch.algorithm = "unambiguousOnly" -## change constraints used in kinematic fit -#process.kinFitTtSemiLepEventHypothesis.constraints = [1,2,6] - -## load HypothesisAnalyzer -process.load("TopQuarkAnalysis.Examples.HypothesisAnalyzer_cff") - -# register TFileService -process.TFileService = cms.Service("TFileService", - fileName = cms.string('analyzeTopHypothesis.root') -) - -## end path -process.path = cms.Path(process.analyzeHypotheses, process.task) diff --git a/TopQuarkAnalysis/Examples/test/analyzeTopJet_cfg.py b/TopQuarkAnalysis/Examples/test/analyzeTopJet_cfg.py deleted file mode 100644 index 4c53090e0aa8d..0000000000000 --- a/TopQuarkAnalysis/Examples/test/analyzeTopJet_cfg.py +++ /dev/null @@ -1,51 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("TEST") - -## configure message logger -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr.threshold = cms.untracked.string('INFO') -process.MessageLogger.categories = cms.untracked.vstring('TEST') - -## define input -from TopQuarkAnalysis.TopEventProducers.tqafInputFiles_cff import relValTTbar -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring(relValTTbar) -) - -## define maximal number of events to loop over -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(10) -) - -## configure process options -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -## configure geometry & conditions -process.load("Configuration.Geometry.GeometryRecoDB_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -from Configuration.AlCa.GlobalTag import GlobalTag -process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_mc') -process.load("Configuration.StandardSequences.MagneticField_cff") - -process.task = cms.Task() - -## std sequence for PAT -process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") -process.task.add(process.patCandidatesTask) -#Temporary customize to the unit tests that fail due to old input samples -process.patTaus.skipMissingTauID = True -process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") -process.task.add(process.selectedPatCandidatesTask) - -process.load("TopQuarkAnalysis.Examples.TopJetAnalyzer_cfi") - -# register TFileService -process.TFileService = cms.Service("TFileService", - fileName = cms.string('analyzeTopJet.root') -) - -## end path -process.p1 = cms.Path(process.analyzeJet, process.task) diff --git a/TopQuarkAnalysis/Examples/test/analyzeTopMuon_cfg.py b/TopQuarkAnalysis/Examples/test/analyzeTopMuon_cfg.py deleted file mode 100644 index b5b6f5eb13767..0000000000000 --- a/TopQuarkAnalysis/Examples/test/analyzeTopMuon_cfg.py +++ /dev/null @@ -1,51 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("TEST") - -## configure message logger -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr.threshold = cms.untracked.string('INFO') -process.MessageLogger.categories = cms.untracked.vstring('TEST') - -## define input -from TopQuarkAnalysis.TopEventProducers.tqafInputFiles_cff import relValTTbar -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring(relValTTbar) -) - -## define maximal number of events to loop over -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(10) -) - -## configure process options -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -## configure geometry & conditions -process.load("Configuration.Geometry.GeometryRecoDB_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -from Configuration.AlCa.GlobalTag import GlobalTag -process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_mc') -process.load("Configuration.StandardSequences.MagneticField_cff") - -process.task = cms.Task() - -## std sequence for PAT -process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") -process.task.add(process.patCandidatesTask) -#Temporary customize to the unit tests that fail due to old input samples -process.patTaus.skipMissingTauID = True -process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") -process.task.add(process.selectedPatCandidatesTask) - -process.load("TopQuarkAnalysis.Examples.TopMuonAnalyzer_cfi") - -# register TFileService -process.TFileService = cms.Service("TFileService", - fileName = cms.string('analyzeTopMuon.root') -) - -## end path -process.p1 = cms.Path(process.analyzeMuon, process.task) diff --git a/TopQuarkAnalysis/Examples/test/analyzeTopTau_cfg.py b/TopQuarkAnalysis/Examples/test/analyzeTopTau_cfg.py deleted file mode 100644 index b7b03ee9712b1..0000000000000 --- a/TopQuarkAnalysis/Examples/test/analyzeTopTau_cfg.py +++ /dev/null @@ -1,51 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("TEST") - -## configure message logger -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr.threshold = cms.untracked.string('INFO') -process.MessageLogger.categories = cms.untracked.vstring('TEST') - -## define input -from TopQuarkAnalysis.TopEventProducers.tqafInputFiles_cff import relValTTbar -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring(relValTTbar) -) - -## define maximal number of events to loop over -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(10) -) - -## configure process options -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) -) - -## configure geometry & conditions -process.load("Configuration.Geometry.GeometryRecoDB_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -from Configuration.AlCa.GlobalTag import GlobalTag -process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_mc') -process.load("Configuration.StandardSequences.MagneticField_cff") - -process.task = cms.Task() - -## std sequence for PAT -process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") -process.task.add(process.patCandidatesTask) -#Temporary customize to the unit tests that fail due to old input samples -process.patTaus.skipMissingTauID = True -process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") -process.task.add(process.selectedPatCandidatesTask) - -process.load("TopQuarkAnalysis.Examples.TopTauAnalyzer_cfi") - -# register TFileService -process.TFileService = cms.Service("TFileService", - fileName = cms.string('analyzeTopTau.root') -) - -## end path -process.p1 = cms.Path(process.analyzeTau, process.task) diff --git a/TopQuarkAnalysis/Examples/test/runtests.sh b/TopQuarkAnalysis/Examples/test/runtests.sh deleted file mode 100755 index 065bbfc6997bb..0000000000000 --- a/TopQuarkAnalysis/Examples/test/runtests.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -function die { echo $1: status $2 ; exit $2; } - -cmsRun ${LOCAL_TEST_DIR}/analyzeTopElectron_cfg.py || die 'Failure using analyzeTopElectron_cfg.py' $? - -cmsRun ${LOCAL_TEST_DIR}/analyzeTopJet_cfg.py || die 'Failure using analyzeTopJet_cfg.py' $? - -cmsRun ${LOCAL_TEST_DIR}/analyzeTopMuon_cfg.py || die 'Failure using analyzeTopMuon_cfg.py' $? - -cmsRun ${LOCAL_TEST_DIR}/analyzeTopTau_cfg.py || die 'Failure using analyzeTopTau_cfg.py' $? - -cmsRun ${LOCAL_TEST_DIR}/analyzeTopGenEvent_cfg.py || die 'Failure using analyzeTopGenEvent_cfg.py' $? - -cmsRun ${LOCAL_TEST_DIR}/analyzeTopHypotheses_cfg.py || die 'Failure using analyzeTopHypotheses_cfg.py' $? diff --git a/TopQuarkAnalysis/TopEventProducers/src/TopDecaySubset.cc b/TopQuarkAnalysis/TopEventProducers/src/TopDecaySubset.cc index 65670179ea083..68730351ccc95 100644 --- a/TopQuarkAnalysis/TopEventProducers/src/TopDecaySubset.cc +++ b/TopQuarkAnalysis/TopEventProducers/src/TopDecaySubset.cc @@ -245,7 +245,7 @@ TopDecaySubset::ShowerModel TopDecaySubset::checkShowerModel(edm::Event& event) std::string moduleName = ""; if (genEvtInfoProduct.isValid()) { - const edm::Provenance& prov = event.getProvenance(genEvtInfoProduct.id()); + const edm::StableProvenance& prov = event.getStableProvenance(genEvtInfoProduct.id()); moduleName = edm::moduleName(prov, event.processHistory()); } diff --git a/TopQuarkAnalysis/TopEventProducers/test/pseudoTop_cfg.py b/TopQuarkAnalysis/TopEventProducers/test/pseudoTop_cfg.py index 83329a92791fb..7ee74c6ec12cb 100644 --- a/TopQuarkAnalysis/TopEventProducers/test/pseudoTop_cfg.py +++ b/TopQuarkAnalysis/TopEventProducers/test/pseudoTop_cfg.py @@ -5,7 +5,7 @@ ## add message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") -#process.MessageLogger.categories.append('ParticleListDrawer') +# from TopQuarkAnalysis.TopEventProducers.tqafInputFiles_cff import relValTTbar process.source = cms.Source("PoolSource", diff --git a/TopQuarkAnalysis/TopEventProducers/test/stGenEvent_cfg.py b/TopQuarkAnalysis/TopEventProducers/test/stGenEvent_cfg.py index 9b524100539bf..8736f9bfe4a57 100644 --- a/TopQuarkAnalysis/TopEventProducers/test/stGenEvent_cfg.py +++ b/TopQuarkAnalysis/TopEventProducers/test/stGenEvent_cfg.py @@ -4,7 +4,7 @@ ## add message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append('ParticleListDrawer') +process.MessageLogger.ParticleListDrawer=dict() ## define input from TopQuarkAnalysis.TopEventProducers.tqafInputFiles_cff import relValTTbar diff --git a/TopQuarkAnalysis/TopEventProducers/test/ttDecaySubset_cfg.py b/TopQuarkAnalysis/TopEventProducers/test/ttDecaySubset_cfg.py index 05f99aa100fb8..fbfeb5384b522 100644 --- a/TopQuarkAnalysis/TopEventProducers/test/ttDecaySubset_cfg.py +++ b/TopQuarkAnalysis/TopEventProducers/test/ttDecaySubset_cfg.py @@ -4,7 +4,7 @@ ## add message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append('ParticleListDrawer') +process.MessageLogger.ParticleListDrawer=dict() ## define input from TopQuarkAnalysis.TopEventProducers.tqafInputFiles_cff import relValTTbar diff --git a/TopQuarkAnalysis/TopEventProducers/test/ttFullHadEvtBuilder_cfg.py b/TopQuarkAnalysis/TopEventProducers/test/ttFullHadEvtBuilder_cfg.py index e93195eea96bb..f9a1e12333a3e 100644 --- a/TopQuarkAnalysis/TopEventProducers/test/ttFullHadEvtBuilder_cfg.py +++ b/TopQuarkAnalysis/TopEventProducers/test/ttFullHadEvtBuilder_cfg.py @@ -5,7 +5,6 @@ ## add message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('TtFullHadronicEvent') process.MessageLogger.cerr.TtFullHadronicEvent = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/TopQuarkAnalysis/TopEventProducers/test/ttFullLepEvtBuilder_cfg.py b/TopQuarkAnalysis/TopEventProducers/test/ttFullLepEvtBuilder_cfg.py index 602d52f92305d..e03a4e5ae67b1 100644 --- a/TopQuarkAnalysis/TopEventProducers/test/ttFullLepEvtBuilder_cfg.py +++ b/TopQuarkAnalysis/TopEventProducers/test/ttFullLepEvtBuilder_cfg.py @@ -5,7 +5,6 @@ ## add message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('TtFullLeptonicEvent') process.MessageLogger.cerr.TtFullLeptonicEvent = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/TopQuarkAnalysis/TopEventProducers/test/ttSemiLepEvtBuilder_cfg.py b/TopQuarkAnalysis/TopEventProducers/test/ttSemiLepEvtBuilder_cfg.py index c76813ce00dc8..b39b7dc318bcc 100644 --- a/TopQuarkAnalysis/TopEventProducers/test/ttSemiLepEvtBuilder_cfg.py +++ b/TopQuarkAnalysis/TopEventProducers/test/ttSemiLepEvtBuilder_cfg.py @@ -5,9 +5,8 @@ ## add message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('TopHitFit') -process.MessageLogger.categories.append('TtSemiLepKinFitter') -process.MessageLogger.categories.append('TtSemiLeptonicEvent') +process.MessageLogger.TopHitFit=dict() +process.MessageLogger.TtSemiLepKinFitter=dict() process.MessageLogger.cerr.TtSemiLeptonicEvent = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/TopQuarkAnalysis/TopHitFit/test/ttSemiLepHitFitProducer_cfg.py b/TopQuarkAnalysis/TopHitFit/test/ttSemiLepHitFitProducer_cfg.py index 57fa9948f68b3..3560ca4c91c91 100644 --- a/TopQuarkAnalysis/TopHitFit/test/ttSemiLepHitFitProducer_cfg.py +++ b/TopQuarkAnalysis/TopHitFit/test/ttSemiLepHitFitProducer_cfg.py @@ -5,7 +5,7 @@ ## add message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('TopHitFit') +process.MessageLogger.TopHitFit=dict() ## define input from TopQuarkAnalysis.TopEventProducers.tqafInputFiles_cff import relValTTbar diff --git a/TopQuarkAnalysis/TopKinFitter/interface/CovarianceMatrix.h b/TopQuarkAnalysis/TopKinFitter/interface/CovarianceMatrix.h index 76300c7eee2b2..67f396ce0f80f 100644 --- a/TopQuarkAnalysis/TopKinFitter/interface/CovarianceMatrix.h +++ b/TopQuarkAnalysis/TopKinFitter/interface/CovarianceMatrix.h @@ -2,6 +2,7 @@ #define CovarianceMatrix_h #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/PatCandidates/interface/PATObject.h" #include "DataFormats/PatCandidates/interface/Electron.h" diff --git a/TopQuarkAnalysis/TopKinFitter/src/CovarianceMatrix.cc b/TopQuarkAnalysis/TopKinFitter/src/CovarianceMatrix.cc index 7566120714101..bb830cba8c854 100644 --- a/TopQuarkAnalysis/TopKinFitter/src/CovarianceMatrix.cc +++ b/TopQuarkAnalysis/TopKinFitter/src/CovarianceMatrix.cc @@ -2,6 +2,7 @@ #include "CommonTools/Utils/interface/StringObjectFunction.h" #include "CommonTools/Utils/interface/StringCutObjectSelector.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" CovarianceMatrix::CovarianceMatrix(const std::vector& udscResolutions, const std::vector& bResolutions, diff --git a/TopQuarkAnalysis/TopKinFitter/test/ttFullHadKinFitProducer_cfg.py b/TopQuarkAnalysis/TopKinFitter/test/ttFullHadKinFitProducer_cfg.py index 1a96b7bb63a22..c11c174de0ae7 100644 --- a/TopQuarkAnalysis/TopKinFitter/test/ttFullHadKinFitProducer_cfg.py +++ b/TopQuarkAnalysis/TopKinFitter/test/ttFullHadKinFitProducer_cfg.py @@ -5,8 +5,6 @@ ## add message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('TtFullHadKinFitter') -process.MessageLogger.categories.append('KinFitter') process.MessageLogger.cerr.TtFullHadKinFitter = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/TopQuarkAnalysis/TopKinFitter/test/ttSemiLepKinFitProducer_cfg.py b/TopQuarkAnalysis/TopKinFitter/test/ttSemiLepKinFitProducer_cfg.py index f2496803ce091..cbfd7c4a397b5 100644 --- a/TopQuarkAnalysis/TopKinFitter/test/ttSemiLepKinFitProducer_cfg.py +++ b/TopQuarkAnalysis/TopKinFitter/test/ttSemiLepKinFitProducer_cfg.py @@ -5,8 +5,6 @@ ## add message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('TtSemiLepKinFitter') -process.MessageLogger.categories.append('KinFitter') process.MessageLogger.cerr.TtSemiLepKinFitter = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/TopQuarkAnalysis/TopPairBSM/BuildFile.xml b/TopQuarkAnalysis/TopPairBSM/BuildFile.xml deleted file mode 100644 index c8b53e8718758..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/BuildFile.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/TopQuarkAnalysis/TopPairBSM/python/BoostedTopProducer_cfi.py b/TopQuarkAnalysis/TopPairBSM/python/BoostedTopProducer_cfi.py deleted file mode 100644 index a4bd11ce62bfb..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/python/BoostedTopProducer_cfi.py +++ /dev/null @@ -1,11 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -BoostedTopProducer = cms.EDProducer("BoostedTopProducer", - electronLabel = cms.InputTag("selectedLayer1Electrons"), - muonLabel = cms.InputTag("selectedLayer1Muons"), - jetLabel = cms.InputTag("selectedLayer1Jets"), - caloIsoCut = cms.double(0.2), - mTop = cms.double(175.0), - solLabel = cms.InputTag("solutions"), - metLabel = cms.InputTag("layer1METs") -) diff --git a/TopQuarkAnalysis/TopPairBSM/python/CATopJetTagger_cfi.py b/TopQuarkAnalysis/TopPairBSM/python/CATopJetTagger_cfi.py deleted file mode 100644 index 11aebbb6d03e4..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/python/CATopJetTagger_cfi.py +++ /dev/null @@ -1,18 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# Cambridge-Aachen top jet tagger parameters -# $Id -CATopCaloJetTagInfos = cms.EDProducer("CATopJetTagger", - src = cms.InputTag("caTopCaloJets"), - TopMass = cms.double(171), - WMass = cms.double(80.4), - verbose = cms.bool(False) - ) - - -CATopPFJetTagInfos = cms.EDProducer("CATopJetTagger", - src = cms.InputTag("caTopPFJets"), - TopMass = cms.double(171), - WMass = cms.double(80.4), - verbose = cms.bool(False) - ) diff --git a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_1000_cfi.py b/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_1000_cfi.py deleted file mode 100644 index 34d169ec6cd2c..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_1000_cfi.py +++ /dev/null @@ -1,33 +0,0 @@ -# Dataset path /QCDDiJetPt1000to14000/Summer08_IDEAL_V9_v1/GEN-SIM-RECO - -import FWCore.ParameterSet.Config as cms - -def RecoInput() : - - maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - readFiles = cms.untracked.vstring() - secFiles = cms.untracked.vstring() - source = cms.Source ("PoolSource",fileNames = readFiles, secondaryFileNames = secFiles) - readFiles.extend( ( - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0005/948F4772-C29E-DD11-A149-001EC9ED4FAA.root', - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0006/96E4C3A6-379F-DD11-AC24-0019B9E4FCA3.root', - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0006/D0B352A5-379F-DD11-B0FC-0019B9E4FC5D.root', - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0006/F4E391CC-369F-DD11-B8CF-0019B9E7C4D2.root', - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0009/94581C84-D2A2-DD11-AB01-00215AA62C2A.root', - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0009/9A39A082-D2A2-DD11-A755-00215A45F86A.root', - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0009/C20F7A87-D2A2-DD11-A989-0022640631AE.root', - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0009/C28AB37D-B9A2-DD11-98F9-00221981B410.root', - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0009/E2BE2986-D2A2-DD11-BE4A-00215A4909F6.root', - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0010/54204960-E7A2-DD11-A964-0015C5EC47A2.root', - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0010/8C2E8B5F-E7A2-DD11-81D6-0015C5E5B288.root', - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0010/A64BF360-E7A2-DD11-B221-0015C5EC47A2.root', - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0010/A8950B61-E7A2-DD11-AB5F-0015C5E5B335.root', - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0010/B8271362-E7A2-DD11-B1B4-0015C5E5B335.root', - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0010/EA535161-E7A2-DD11-8C3E-0015C5E5B335.root', - '/store/mc/Summer08/QCDDiJetPt1000to14000/GEN-SIM-RECO/IDEAL_V9_v1/0010/FE1F5584-D6A2-DD11-A5EB-001EC9ED840F.root' - ) ); - - secFiles.extend( ( - ) ) - - return source diff --git a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_3000_3500_RelVal_cfi.py b/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_3000_3500_RelVal_cfi.py deleted file mode 100644 index 6732d5fc1e66b..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_3000_3500_RelVal_cfi.py +++ /dev/null @@ -1,155 +0,0 @@ -# from /RelValQCD_Pt_3000_3500/CMSSW_2_1_0_pre6-RelVal-1213987236-IDEAL_V2-2nd/GEN-SIM-DIGI-RAW-HLTDEBUG-RECO - -import FWCore.ParameterSet.Config as cms - -# from - -def RecoInput() : - return cms.Source("PoolSource", - debugVerbosity = cms.untracked.uint32(200), - debugFlag = cms.untracked.bool(True), - - fileNames = cms.untracked.vstring( -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/00245ED2-B840-DD11-A538-001617DBD556.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/06419ADE-B640-DD11-A033-001617C3B6E8.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/069AB896-BE40-DD11-8A24-001617C3B6DE.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/0AF3DF03-BE40-DD11-A986-001617C3B79A.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/289B655D-BE40-DD11-9091-000423D6BA18.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/2A1BF1C2-B940-DD11-9CFE-001617DBD5B2.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/3A4F26A9-BE40-DD11-8C35-001617DBD472.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/3E338939-BB40-DD11-9523-000423D992DC.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/4A02ED44-B740-DD11-A693-001617E30D06.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/4E3C4DEC-B740-DD11-B7B9-000423D6CAF2.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/4EDB6C7A-AC40-DD11-885B-001D09F291D7.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/504F84F1-C040-DD11-8DE5-000423D6C8E6.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/52526255-BB40-DD11-8413-001617E30CA4.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/54687319-AB40-DD11-9930-001617E30CC8.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/58C9301E-C040-DD11-AF45-000423D6CAF2.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/5CBCB348-BC40-DD11-A545-001617DBD472.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/5EFE4BFE-BB40-DD11-9B3A-001617C3B70E.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/60475A8C-C040-DD11-828B-001617E30D52.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/60480812-B940-DD11-A7A7-001617E30E2C.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/6C779E46-B840-DD11-9F0A-000423D95030.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/6E704D16-B740-DD11-8DB6-001617E30D00.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/720EF4AD-BD40-DD11-83A2-001617C3B70E.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/7C38F23E-BE40-DD11-9376-001617E30D52.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/8A9C5FD8-BD40-DD11-9556-001617C3B6C6.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/8E42C849-BC40-DD11-901E-001617E30E2C.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/928CA538-AC40-DD11-B6A7-000423D8F63C.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/9A35C232-0C41-DD11-A82C-0030487A1FEC.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/9EB22EDA-BD40-DD11-95ED-000423D986A8.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/A2AA1643-BC40-DD11-9017-001617C3B710.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/A4F2213A-BB40-DD11-8112-000423D98DB4.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/B400DAEF-C040-DD11-AC92-000423D98DB4.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/BA01D8B0-BE40-DD11-9ADD-000423D6CA42.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/BC94A8B5-BD40-DD11-832E-001617E30D52.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/C2BE8FBE-C040-DD11-A162-001617E30F50.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/C2CC09BE-C040-DD11-8642-001617DBD5AC.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/CC874630-C040-DD11-8C8F-0019DB29C5FC.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/D87B70CE-B640-DD11-B3FD-001617C3B6CE.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/DABBCC99-C040-DD11-985A-001617E30CC8.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/DC0D6CE9-AA40-DD11-8686-001D09F252E9.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/DC950CA7-BF40-DD11-B67A-001617C3B6CE.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/DCEEF01C-BC40-DD11-AFA6-001617E30F48.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/DEE0DE2D-BA40-DD11-900A-001617DBD230.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/E022C9E9-C040-DD11-AE3B-000423D6CA02.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/E2B59F5C-BF40-DD11-B579-001617E30D06.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/E4D55F8A-BE40-DD11-AC15-001617C3B778.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/ECE7D536-B940-DD11-8E80-001617E30F50.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/F0AD0F72-BB40-DD11-8F68-001617C3B79A.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/F488383D-BB40-DD11-A245-000423D6CA72.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/FC152FF8-AB40-DD11-AED5-001D09F28EC1.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/FECB1CF3-BF40-DD11-B8F9-001617DBD556.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0003/FEF9BCE4-B940-DD11-A2EE-000423D6BA18.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/046D1063-F640-DD11-9222-000423D6AF24.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/0663F69B-C640-DD11-93C4-001617C3B6C6.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/06E4C246-C940-DD11-BD48-000423D6C8E6.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/0A8748B2-D640-DD11-9534-000423D9870C.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/0CB06240-C240-DD11-87D7-0019DB29C5FC.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/122B51C0-1841-DD11-8C55-001617E30F58.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/14EEBABC-0141-DD11-93E9-000423D6CA42.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/1AB5BF97-DC40-DD11-86D8-000423D6CA6E.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/24D31383-CF40-DD11-8985-000423DD2F34.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/260742E7-0141-DD11-8C6B-001617C3B6CC.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/2A2C32C4-CF40-DD11-9BA3-000423D6CA6E.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/2AA7E6B5-EA40-DD11-8A61-000423D992A4.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/2C3C0B79-C640-DD11-933A-001617C3B65A.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/2C5B81DA-0141-DD11-B224-001617DBD332.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/3448EFE3-E040-DD11-AB6F-000423D9880C.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/38C578C8-EC40-DD11-9496-000423D6C8E6.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/38E664CD-C640-DD11-922A-000423D985E4.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/3C49A8A5-C640-DD11-999E-001617E30CA4.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/3E83831A-0341-DD11-BC3D-001617E30E2C.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/3EB3A5DF-2C41-DD11-8F1A-000423D98804.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/407A124A-E740-DD11-A755-000423D6CA72.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/4C5D2F81-1C41-DD11-B4DA-000423D6AF24.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/5007B749-C940-DD11-A4EC-000423D9853C.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/629FEDAB-FE40-DD11-A431-001617E30D12.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/64020560-E240-DD11-A864-000423D6B358.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/660A2A4F-C440-DD11-93B6-001617E30E2C.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/6802E1EC-0141-DD11-B6E1-001617C3B778.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/68D84930-E940-DD11-A359-000423D6B358.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/722B15DE-E040-DD11-85D0-001617E30D0A.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/74B78303-CE40-DD11-986F-000423D6A6F4.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/82D8EEE6-F040-DD11-8738-000423D986A8.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/84280E17-E140-DD11-93DD-000423D98DB4.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/86A5CFE7-1541-DD11-B496-001617C3B710.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/8C8688EE-E240-DD11-98F1-001617DBD5B2.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/921FDB28-DF40-DD11-A393-001617C3B64C.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/94005236-FF40-DD11-8FA0-001617E30D0A.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/96FF4E3E-C240-DD11-9194-001617C3B6E8.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/98460046-C540-DD11-8E21-000423D6CA02.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/9A9D3912-0241-DD11-8394-000423D99F1E.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/9C14BC6F-2B41-DD11-832B-000423D6B42C.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/9ECF8D20-C940-DD11-A703-000423D6A6F4.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/AA44EE88-E340-DD11-9F99-000423D6BA18.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/AAA031EF-E240-DD11-B0B5-000423D6B358.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/B427504F-E740-DD11-9832-000423D6C8EE.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/B478B697-F640-DD11-BE71-000423D6CA02.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/B4AB91AE-EA40-DD11-9A21-000423D6B48C.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/B66F92E2-E040-DD11-A2B2-000423D985E4.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/BEA23698-F640-DD11-871D-000423D6B444.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/C26CAB9E-C640-DD11-88C6-001617C3B5D8.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/C40AA75F-F640-DD11-A366-000423DD2F34.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/C8FFB6FE-2541-DD11-A5ED-001617C3B6C6.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/CA21BADD-0141-DD11-BA44-001617E30F56.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/CA3F9129-CB40-DD11-B27F-00161757BF42.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/CCC22998-C640-DD11-87FA-001617C3B5E4.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/CE82FF01-1041-DD11-947B-000423D6BA18.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/CEA4B62C-E940-DD11-B77C-000423D6CA72.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/D05A1D99-C740-DD11-94ED-001617E30CE8.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/D2D2E6BD-D240-DD11-850D-000423D9870C.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/D6789E28-E340-DD11-A4B6-000423D6B444.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/D6A91A87-F040-DD11-8F9C-000423D6B48C.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/D6CAB298-C640-DD11-B87E-001617E30CC8.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/DA7D6E0E-1041-DD11-BF19-001617C3B6CE.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/DC212E18-F140-DD11-94D4-000423D6B358.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/DE2534AE-FE40-DD11-B2D8-000423D98804.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/DE4AA127-DF40-DD11-826C-001617E30D40.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/E0C782B6-EA40-DD11-A4FB-000423D98804.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/E26E1481-EA40-DD11-B126-000423D9870C.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/E4B5BBA9-C740-DD11-AA22-000423D6CA6E.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/E4E4472C-CB40-DD11-9F1F-000423D6BA18.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/E671C362-DF40-DD11-AE3C-000423D6CA02.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/EA2A75F0-E240-DD11-934D-001617E30D52.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/EA2AFA2D-E940-DD11-A6BE-000423D98DB4.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/EA76D495-EC40-DD11-AC5E-000423D6AF24.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/EC13854B-E740-DD11-AC29-000423D6B444.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/ECA2F249-C940-DD11-B34B-000423D6A6F4.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/F05A2447-C540-DD11-B7C7-001617C3B5E4.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/F428221E-C940-DD11-BBF5-000423D6B358.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/FA5F70D5-EA40-DD11-892C-000423D9939C.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/FAB238B3-EC40-DD11-A3EA-000423D6CAF2.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/FC7556E1-FE40-DD11-B6B6-000423D992DC.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/FCAAE5F5-E940-DD11-A3A9-000423D6BA18.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0004/FEA1AC47-C940-DD11-936C-000423D98804.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0005/008BCD3B-0F41-DD11-A275-000423D6B5C4.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0005/32474568-0441-DD11-A0CE-000423D99394.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0005/3C038B69-2E41-DD11-A157-001617C3B6E2.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0005/4C7C300F-1E41-DD11-B8DC-000423D6B358.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0005/54C1008A-0841-DD11-AD67-001617DBD316.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0005/A6DAD342-0241-DD11-A5C1-001617C3B5D8.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0005/C60EB11C-1A41-DD11-B8BD-001617DBD5AC.root', -'/store/relval/2008/6/22/RelVal-RelValQCD_Pt_3000_3500-1213987236-IDEAL_V2-2nd/0005/E8801EA4-0941-DD11-8450-001D09F29146.root' -) -) diff --git a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_470_cfi.py b/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_470_cfi.py deleted file mode 100644 index 9a615330ab486..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_470_cfi.py +++ /dev/null @@ -1,34 +0,0 @@ -# Dataset path /QCDDiJetPt470to600/Summer08_IDEAL_V9_v1/GEN-SIM-RECO - -import FWCore.ParameterSet.Config as cms - -def RecoInput() : - - maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - readFiles = cms.untracked.vstring() - secFiles = cms.untracked.vstring() - source = cms.Source ("PoolSource",fileNames = readFiles, secondaryFileNames = secFiles) - readFiles.extend( ( - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/1A3CF22E-F595-DD11-8A28-0019B9E4893C.root', - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/1A73AD50-F595-DD11-9F2E-0019B9E4527A.root', - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/22BE613A-F595-DD11-ACD8-0019B9E4ACE1.root', - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/3E517714-F295-DD11-A3AF-001125C472E4.root', - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/465F18C5-F895-DD11-9E6D-0019B9E7C51D.root', - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/4EF8AB34-F595-DD11-893C-0019B9E7C79F.root', - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/52EA201C-FD95-DD11-9C4C-0019B9E4FD57.root', - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/5EEA9C37-F595-DD11-AF61-0019B9E48B8C.root', - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/600BCE3A-FD95-DD11-A279-00145EDD7971.root', - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/64EED024-F295-DD11-A867-001125C49180.root', - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/6EDE172F-F295-DD11-9334-0019B9E48FFC.root', - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/7EEA911F-FD95-DD11-856A-0019B9E7E112.root', - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/949C2459-F595-DD11-BE17-0019B9E7CD78.root', - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/AED94115-F295-DD11-B586-001125C4664A.root', - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/C63D4F42-F595-DD11-8547-001125C464F6.root', - '/store/mc/Summer08/QCDDiJetPt470to600/GEN-SIM-RECO/IDEAL_V9_v1/0000/E065C04F-FD95-DD11-948D-00145EDD7381.root' - ) ); - - - secFiles.extend( ( - ) ) - - return source diff --git a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_500_1000_cfi.py b/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_500_1000_cfi.py deleted file mode 100644 index 0907ed3477ab0..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_500_1000_cfi.py +++ /dev/null @@ -1,247 +0,0 @@ -# from /RelValQCD_Pt_3000_3500/CMSSW_2_1_0_pre6-RelVal-1213987236-IDEAL_V2-2nd/GEN-SIM-DIGI-RAW-HLTDEBUG-RECO - -import FWCore.ParameterSet.Config as cms - -# from - -def RecoInput() : - return cms.Source("PoolSource", - debugVerbosity = cms.untracked.uint32(200), - debugFlag = cms.untracked.bool(True), - - fileNames = cms.untracked.vstring( - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_100.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_101.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_102.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_104.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_105.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_107.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_108.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_109.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_10.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_110.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_111.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_112.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_113.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_114.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_116.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_117.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_118.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_119.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_11.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_120.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_121.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_122.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_123.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_124.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_125.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_126.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_127.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_128.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_12.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_130.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_131.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_132.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_133.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_134.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_135.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_136.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_137.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_138.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_139.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_13.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_140.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_141.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_142.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_143.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_144.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_145.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_146.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_147.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_148.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_149.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_14.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_150.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_151.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_152.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_153.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_154.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_155.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_156.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_157.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_158.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_159.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_15.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_160.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_161.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_162.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_164.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_165.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_166.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_167.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_168.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_169.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_170.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_171.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_172.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_173.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_174.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_176.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_177.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_178.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_179.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_17.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_180.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_181.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_182.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_183.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_184.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_185.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_186.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_187.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_189.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_18.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_190.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_191.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_192.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_193.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_194.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_195.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_196.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_197.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_198.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_199.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_19.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_1.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_200.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_201.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_202.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_203.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_204.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_205.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_206.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_207.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_208.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_209.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_20.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_210.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_212.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_213.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_214.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_216.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_217.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_218.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_21.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_220.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_221.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_222.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_223.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_224.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_225.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_226.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_227.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_228.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_229.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_22.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_230.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_231.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_232.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_233.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_234.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_235.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_236.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_237.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_238.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_239.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_23.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_240.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_241.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_242.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_243.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_244.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_245.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_246.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_247.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_249.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_24.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_250.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_25.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_26.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_27.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_28.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_2.root', -# 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_30.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_31.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_32.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_33.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_34.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_35.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_36.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_37.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_38.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_39.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_3.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_40.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_41.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_42.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_43.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_44.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_45.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_46.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_47.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_48.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_49.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_4.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_50.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_51.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_52.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_53.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_55.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_56.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_57.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_58.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_59.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_5.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_60.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_61.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_62.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_63.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_64.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_65.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_67.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_68.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_69.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_6.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_71.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_72.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_73.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_74.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_75.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_76.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_77.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_78.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_79.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_7.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_80.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_81.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_82.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_83.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_84.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_85.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_86.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_87.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_89.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_8.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_90.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_91.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_92.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_94.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_95.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_96.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_97.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_98.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_99.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/qcd/qcd_500_1000_9.root' - - ) - ) diff --git a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_600_cfi.py b/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_600_cfi.py deleted file mode 100644 index 6a1d7b4bdd11e..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_600_cfi.py +++ /dev/null @@ -1,33 +0,0 @@ -# Dataset path /QCDDiJetPt600to800/Summer08_IDEAL_V9_v1/GEN-SIM-RECO - -import FWCore.ParameterSet.Config as cms - -def RecoInput() : - - maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - readFiles = cms.untracked.vstring() - secFiles = cms.untracked.vstring() - source = cms.Source ("PoolSource",fileNames = readFiles, secondaryFileNames = secFiles) - readFiles.extend( ( - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/181EF424-3196-DD11-8120-0019B9E494F3.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/2ECFCD0B-3196-DD11-989E-0019B9E4963E.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/40E116F5-FD95-DD11-A956-001125C49152.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/5CA3BB61-F595-DD11-859C-0019B9E495A4.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/6A0853CB-EF95-DD11-830F-001125C46418.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/7CE76841-F595-DD11-B927-0019B9E48991.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/88C56302-3196-DD11-9E86-0019B9E4FFFF.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/96CF8C67-EF95-DD11-8A51-001125C4910A.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/9E988C1E-F995-DD11-80BB-001D0966E1E9.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/A061971A-3196-DD11-833A-001125C48EE4.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/A414B974-EF95-DD11-9E7E-0019B9E50117.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/AC8F2845-F595-DD11-A709-0019B9E4896E.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/B69CB9F7-3096-DD11-98F7-001D0967D896.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/D0683153-F595-DD11-AC75-0019B9E49600.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/D8EF28E1-3096-DD11-8B24-0019B9E4FE56.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/EA4BD642-F595-DD11-9676-0019B9E48FC0.root', - '/store/mc/Summer08/QCDDiJetPt600to800/GEN-SIM-RECO/IDEAL_V9_v1/0000/FE455340-EF95-DD11-A054-0019B9E4B150.root') ); - - secFiles.extend( ( - ) ) - - return source diff --git a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_800_cfi.py b/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_800_cfi.py deleted file mode 100644 index dbf7b1a310b33..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_QCD_800_cfi.py +++ /dev/null @@ -1,29 +0,0 @@ -# Dataset path /QCDDiJetPt800to1000/Summer08_IDEAL_V9_v1/GEN-SIM-RECO - -import FWCore.ParameterSet.Config as cms - -def RecoInput() : - - maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - readFiles = cms.untracked.vstring() - secFiles = cms.untracked.vstring() - source = cms.Source ("PoolSource",fileNames = readFiles, secondaryFileNames = secFiles) - readFiles.extend( ( - '/store/mc/Summer08/QCDDiJetPt800to1000/GEN-SIM-RECO/IDEAL_V9_v1/0006/08043F8E-24A0-DD11-8F7B-001EC9ED88D8.root', - '/store/mc/Summer08/QCDDiJetPt800to1000/GEN-SIM-RECO/IDEAL_V9_v1/0006/1849B37F-23A0-DD11-8597-00145ED6E7C8.root', - '/store/mc/Summer08/QCDDiJetPt800to1000/GEN-SIM-RECO/IDEAL_V9_v1/0006/3215635E-22A0-DD11-9996-0030487C1154.root', - '/store/mc/Summer08/QCDDiJetPt800to1000/GEN-SIM-RECO/IDEAL_V9_v1/0006/3E0B8639-27A0-DD11-990D-001EC9ED7E46.root', - '/store/mc/Summer08/QCDDiJetPt800to1000/GEN-SIM-RECO/IDEAL_V9_v1/0006/3ED29688-E6A0-DD11-A2A5-001EC9ED88D8.root', - '/store/mc/Summer08/QCDDiJetPt800to1000/GEN-SIM-RECO/IDEAL_V9_v1/0006/700A2B80-23A0-DD11-A73E-001EC9ED8F2B.root', - '/store/mc/Summer08/QCDDiJetPt800to1000/GEN-SIM-RECO/IDEAL_V9_v1/0006/ACA05E81-26A0-DD11-97F2-003048C26CB6.root', - '/store/mc/Summer08/QCDDiJetPt800to1000/GEN-SIM-RECO/IDEAL_V9_v1/0006/AE8F64DA-30A0-DD11-B95F-0015C5E5B335.root', - '/store/mc/Summer08/QCDDiJetPt800to1000/GEN-SIM-RECO/IDEAL_V9_v1/0006/D017F01E-2FA0-DD11-8F66-00192165CCB4.root', - '/store/mc/Summer08/QCDDiJetPt800to1000/GEN-SIM-RECO/IDEAL_V9_v1/0006/F2BF165E-22A0-DD11-B63E-0030487C1154.root', - '/store/mc/Summer08/QCDDiJetPt800to1000/GEN-SIM-RECO/IDEAL_V9_v1/0008/B4566DA1-05A2-DD11-976A-001D09645B69.root', - '/store/mc/Summer08/QCDDiJetPt800to1000/GEN-SIM-RECO/IDEAL_V9_v1/0009/8EC9BC10-8BA2-DD11-8CB5-001D09645A9D.root' - ) ); - - secFiles.extend( ( - ) ) - - return source diff --git a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_ZPrime2000_cfi.py b/TopQuarkAnalysis/TopPairBSM/python/RecoInput_ZPrime2000_cfi.py deleted file mode 100644 index 8de56cc78ee99..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_ZPrime2000_cfi.py +++ /dev/null @@ -1,247 +0,0 @@ -# from /RelValQCD_Pt_3000_3500/CMSSW_2_1_0_pre6-RelVal-1213987236-IDEAL_V2-2nd/GEN-SIM-DIGI-RAW-HLTDEBUG-RECO - -import FWCore.ParameterSet.Config as cms - -# from - -def RecoInput() : - return cms.Source("PoolSource", - debugVerbosity = cms.untracked.uint32(200), - debugFlag = cms.untracked.bool(True), - - fileNames = cms.untracked.vstring( - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_100.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_101.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_102.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_104.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_105.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_107.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_108.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_109.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_10.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_110.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_111.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_112.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_113.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_114.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_116.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_117.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_118.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_119.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_11.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_120.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_121.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_122.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_123.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_124.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_125.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_126.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_127.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_128.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_12.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_130.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_131.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_132.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_133.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_134.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_135.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_136.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_137.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_138.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_139.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_13.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_140.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_141.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_142.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_143.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_144.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_145.root', -# 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_146.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_147.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_148.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_149.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_14.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_150.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_151.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_152.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_153.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_154.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_155.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_156.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_157.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_158.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_159.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_15.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_160.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_161.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_162.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_164.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_165.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_166.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_167.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_168.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_169.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_170.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_171.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_172.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_173.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_174.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_176.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_177.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_178.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_179.root', -# 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_17.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_180.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_181.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_182.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_183.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_184.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_185.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_186.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_187.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_189.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_18.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_190.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_191.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_192.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_193.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_194.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_195.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_196.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_197.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_198.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_199.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_19.root', -# 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_1.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_200.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_201.root', -# 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_202.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_203.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_204.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_205.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_206.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_207.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_208.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_209.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_20.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_210.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_212.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_213.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_214.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_216.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_217.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_218.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_21.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_220.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_221.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_222.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_223.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_224.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_225.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_226.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_227.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_228.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_229.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_22.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_230.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_231.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_232.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_233.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_234.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_235.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_236.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_237.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_238.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_239.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_23.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_240.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_241.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_242.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_243.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_244.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_245.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_246.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_247.root', -# 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_249.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_24.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_250.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_25.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_26.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_27.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_28.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_2.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_30.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_31.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_32.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_33.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_34.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_35.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_36.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_37.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_38.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_39.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_3.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_40.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_41.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_42.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_43.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_44.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_45.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_46.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_47.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_48.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_49.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_4.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_50.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_51.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_52.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_53.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_55.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_56.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_57.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_58.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_59.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_5.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_60.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_61.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_62.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_63.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_64.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_65.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_67.root', -# 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_68.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_69.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_6.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_71.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_72.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_73.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_74.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_75.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_76.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_77.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_78.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_79.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_7.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_80.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_81.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_82.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_83.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_84.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_85.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_86.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_87.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_89.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_8.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_90.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_91.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_92.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_94.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_95.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_96.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_97.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_98.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_99.root', - 'dcache:/pnfs/cms/WAX/resilient/rappocc/zprime/zprime_2000GeV_9.root' - - ) - ) diff --git a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_ZPrime5000JJ_RelVal_cfi.py b/TopQuarkAnalysis/TopPairBSM/python/RecoInput_ZPrime5000JJ_RelVal_cfi.py deleted file mode 100644 index 5e2a1baa79f64..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_ZPrime5000JJ_RelVal_cfi.py +++ /dev/null @@ -1,94 +0,0 @@ -# from /RelValZPrime5000JJ/CMSSW_2_1_0_pre6-RelVal-1214239099-STARTUP_V1-2nd/GEN-SIM-DIGI-RAW-HLTDEBUG-RECO - -import FWCore.ParameterSet.Config as cms - -# from - -def RecoInput() : - return cms.Source("PoolSource", - debugVerbosity = cms.untracked.uint32(200), - debugFlag = cms.untracked.bool(True), - - fileNames = cms.untracked.vstring( -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/02123B00-BC42-DD11-8A59-000423D6CA02.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/022373EC-B342-DD11-8E53-001617E30F4C.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/04E4364D-C242-DD11-8481-000423D6CA72.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/0A69E636-C142-DD11-9B5D-000423D992DC.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/0C050842-B542-DD11-B5D4-000423D94E70.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/0C156BF8-B842-DD11-A1E7-000423D9853C.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/0C82D302-B642-DD11-8910-0019DB29C5FC.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/0E63D7BD-B442-DD11-9E76-001617DBD332.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/10AB3A52-B442-DD11-9A6B-001617DBD288.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/1448781B-B742-DD11-883B-000423D998BA.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/145049C2-BE42-DD11-83C0-000423D9870C.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/1468D509-BF42-DD11-AE17-000423D6BA18.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/1497D214-B542-DD11-A818-001617E30D00.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/163B3739-BD42-DD11-B5E4-001617DBCF1E.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/1853C569-C142-DD11-B955-000423D6CAF2.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/1ACFE920-C242-DD11-8C90-000423D6B444.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/1ADE73A2-C042-DD11-9E30-001617DF785A.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/1E5AAFF3-B342-DD11-BC28-001617C3B6E8.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/22E86C41-B742-DD11-AAB8-000423D94A04.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/22F77CBD-C142-DD11-9761-000423D6AF24.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/269B56F8-B942-DD11-B20D-0019DB29C614.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/26CEEB02-B542-DD11-AF71-00161757BF42.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/2A86C27B-BD42-DD11-ABC5-001617C3B76A.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/2AC44294-B442-DD11-91F0-000423D9870C.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/2C145D12-C042-DD11-BFFB-001617E30F58.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/2C811DD2-B442-DD11-B501-001617DBD5B2.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/2ECD8DD9-DA42-DD11-AD6C-000423D6CAF2.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/34F4DD17-B642-DD11-9C7F-001617E30CC8.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/3E07AFA1-C042-DD11-94B6-001617E30E2C.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/423AF539-B542-DD11-AD01-000423D98E54.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/4C9EB506-B542-DD11-9DD5-000423D9853C.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/50C7B709-B542-DD11-9C50-000423D992DC.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/52644119-B442-DD11-B107-001617DF785A.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/52BA9CAB-B642-DD11-8678-000423D99A8E.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/5A8ED482-D042-DD11-AA45-000423D6B358.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/5E6B8E52-B642-DD11-91F4-000423D99CEE.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/6030B4FD-B442-DD11-B1B3-000423D6C8EE.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/6821370D-B642-DD11-9465-000423D990CC.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/6A575E8C-BE42-DD11-A534-000423D6CAF2.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/6E8B6FCE-BA42-DD11-86CB-000423D985E4.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/704C6DE2-BD42-DD11-857D-000423D9939C.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/7201E196-C042-DD11-8619-000423D6BA18.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/7AF8CA3B-B542-DD11-A56A-001617DBD332.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/8030EBE3-D642-DD11-A92F-000423D9870C.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/82CAEE7B-BD42-DD11-8075-001617C3B76A.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/861DDE4E-C242-DD11-A7DD-000423D9863C.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/88CD0478-0643-DD11-9F29-000423D9853C.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/90CC5B4C-B642-DD11-BF7B-0019DB2F3F9B.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/9238E2D5-BA42-DD11-8F68-000423D9939C.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/92466FF6-BD42-DD11-A013-001617E30F58.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/9A7E7932-B542-DD11-8DBD-001617DF785A.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/9C27E5CB-BE42-DD11-ABCB-000423D6B358.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/9C6F2DFC-BC42-DD11-8363-000423D992DC.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/A27F84F9-C042-DD11-BA4E-000423DD2F34.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/A287D080-B842-DD11-9B8D-001617E30D0A.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/A6298D5E-B442-DD11-BDD1-001617DBCF1E.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/AE42126E-BD42-DD11-B24F-001617C3B76E.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/B629193F-B542-DD11-8FA0-001617C3B710.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/BAA41619-B442-DD11-A8F1-001617E30D52.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/BAEF42C3-B542-DD11-8008-000423D98EA8.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/C49C9A04-C042-DD11-A1AD-001617E30F50.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/C66658E5-B442-DD11-A28D-000423D98950.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/CA974CA5-B242-DD11-AFE0-001617C3B5D8.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/CAB3A95C-B442-DD11-846A-001617C3B6CC.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/CE3CDA38-C042-DD11-9A73-000423D6C8E6.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/D2940B94-B442-DD11-B5F3-001617C3B706.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/D2DDA5BB-BD42-DD11-A491-001617DBD5AC.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/DAC11869-C042-DD11-8F79-000423D98DB4.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/DC682983-B542-DD11-8DB0-000423D95220.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/DCC90E90-B242-DD11-9969-001617E30D00.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/DCF131B7-C242-DD11-8A65-000423D9880C.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/DE3BC247-B542-DD11-BF36-001617C3B79A.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/DE4AA6E3-BC42-DD11-9F6E-001617C3B778.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/E0C7BA99-B442-DD11-8F2C-001617C3B778.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/E8D00DF6-B242-DD11-9C32-000423D992A4.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/EE7E76CB-BB42-DD11-BCC5-001617C3B6E2.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/F40F9434-B742-DD11-9344-000423D985B0.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/F6745063-BF42-DD11-8000-000423D6B444.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/FA726640-C042-DD11-9035-00161757BF42.root', -'/store/relval/2008/6/25/RelVal-RelValZPrime5000JJ-1214239099-STARTUP_V1-2nd/0007/FE6CFC98-B542-DD11-9608-000423D98BC4.root' -) -) diff --git a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_ttbar_cfi.py b/TopQuarkAnalysis/TopPairBSM/python/RecoInput_ttbar_cfi.py deleted file mode 100644 index fdb69192673c5..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/python/RecoInput_ttbar_cfi.py +++ /dev/null @@ -1,74 +0,0 @@ -# from /RelValQCD_Pt_3000_3500/CMSSW_2_1_0_pre6-RelVal-1213987236-IDEAL_V2-2nd/GEN-SIM-DIGI-RAW-HLTDEBUG-RECO - -import FWCore.ParameterSet.Config as cms - -# from - -def RecoInput() : - source = cms.Source("PoolSource", - debugVerbosity = cms.untracked.uint32(200), - debugFlag = cms.untracked.bool(True), - - fileNames = cms.untracked.vstring( - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0003/C4807780-C140-DD11-A03E-000423D94700.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/1E214499-FF40-DD11-8FB1-000423D6B48C.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/2C0910EE-0141-DD11-B889-000423D9A212.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/404AF710-1B41-DD11-BCAA-000423D9A2AE.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/44362DF5-0141-DD11-BE89-000423D94E70.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/4893E9E6-0141-DD11-BF9B-000423D174FE.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/4C747DCB-C240-DD11-9FFD-001617C3B654.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/5A8D6CDA-0141-DD11-8385-001617DBCF90.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/6CB037F2-1641-DD11-97F0-000423D60FF6.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/76868FAB-FD40-DD11-B004-000423D985E4.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/98503807-FE40-DD11-BAFD-000423D6B5C4.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/A62D04A2-2E41-DD11-A83A-001617C3B6E8.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/A66AEAF6-E840-DD11-BDAE-000423D6B48C.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/AE397234-CA40-DD11-9413-001617E30F48.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/BED974D0-FD40-DD11-9EE8-000423D992A4.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/DC2591DC-0141-DD11-9BC7-001617C3B710.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/E22815E1-0141-DD11-9A34-000423D94A20.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0004/E2D61307-0241-DD11-AD42-000423D99160.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/027AF342-2D41-DD11-B7C9-000423D6B42C.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/226FAD25-1C41-DD11-8F69-001617DBD556.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/288EEA34-0541-DD11-99F3-001617C3B706.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/2A206EAB-0D41-DD11-93F9-001617C3B77C.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/34AF420E-1A41-DD11-B3B3-000423D6B358.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/3AF6EB27-0A41-DD11-AD0F-001D09F2546F.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/3C5DCCD4-0441-DD11-9DAD-000423D9890C.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/3C7BD8C3-0941-DD11-8F0B-001D09F2525D.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/4448EBFB-1B41-DD11-BDBA-001617C3B6C6.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/4E4F6886-1C41-DD11-B609-001617C3B65A.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/60F01F12-0341-DD11-B2AF-000423D999CA.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/641734FF-0341-DD11-8CEF-001D09F29533.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/64C86292-1841-DD11-8B73-000423D985E4.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/7255AFEF-1941-DD11-B344-000423DD2F34.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/780CDBA3-1841-DD11-ADAA-000423D9870C.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/78FE44A1-0541-DD11-8F39-0016177CA7A0.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/7C0DF817-1E41-DD11-9E09-000423D9880C.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/7C70FC0D-1B41-DD11-935A-000423D9890C.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/7C9FC0F9-2C41-DD11-BD8F-000423D6B5C4.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/80FA9837-1741-DD11-AEF1-001617C3B778.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/8454634B-0341-DD11-BDFB-0019B9F72F97.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/869BFC18-0341-DD11-B513-001617DBD472.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/923E868A-0341-DD11-9140-0030487A18A4.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/92B94E04-0A41-DD11-BB83-001D09F23A84.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/9662B512-1F41-DD11-B784-000423D6B444.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/9C28266C-0B41-DD11-80B1-001D09F2523A.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/9CB53EA6-0841-DD11-B49B-00304879FBB2.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/9EE1C0A7-0641-DD11-9311-000423D98BE8.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/AA70BA5B-1341-DD11-B23B-000423D94534.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/B256FEFB-0941-DD11-BA0E-000423D98930.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/C09D9CC9-0741-DD11-AD14-001D09F232B9.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/C6ED94E3-0841-DD11-8BE5-001D09F2438A.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/C8374E0F-0541-DD11-BFD2-000423D98920.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/D656C8DD-1B41-DD11-AF3A-001617E30F56.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/DCF600E4-1841-DD11-B757-000423D98DB4.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/DE2546D0-0B41-DD11-9999-001D09F248F8.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/DED45D59-0741-DD11-8EB9-001D09F23A34.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/ECF91043-0A41-DD11-9B57-001D09F29538.root', - '/store/relval/2008/6/22/RelVal-RelValTTbar-1213987236-IDEAL_V2-2nd/0005/F25BD264-1E41-DD11-8381-000423D992DC.root' - ) - ) - - - return source diff --git a/TopQuarkAnalysis/TopPairBSM/python/TopAnalysis_Defaults.py b/TopQuarkAnalysis/TopPairBSM/python/TopAnalysis_Defaults.py deleted file mode 100644 index b1eb930a1f6ef..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/python/TopAnalysis_Defaults.py +++ /dev/null @@ -1,46 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -TopAnalyzer = cms.EDAnalyzer("BooLowMAnalyzer", - debug = cms.bool( False ), - IsMCTop = cms.bool( True ), - genEventSource = cms.InputTag('genEvt'), - muonSource = cms.InputTag('selectedLayer1Muons'), - electronSource = cms.InputTag('selectedLayer1Electrons'), - metSource = cms.InputTag('layer1METs'), - jetSource = cms.InputTag('selectedLayer1Jets'), - rootFilename = cms.string('TopAnalysis.root'), - PdfInfoTag = cms.untracked.InputTag("genEventPdfInfo"), - PdfSetName = cms.untracked.string("cteq66"), # Hard coded to use LHgrid - jetCuts = cms.PSet( - MinJetPt = cms.double( 30. ), - MaxJetEta = cms.double( 2.4), - ApplyAsymmetricCuts = cms.bool(False), - JES = cms.double( 1. ), - ApplyFlavorJEC = cms.bool(False) - ), - muonCuts = cms.PSet( - MinPt = cms.double( 20. ), - MaxEta = cms.double( 2.1 ), - ), - muonIsolation = cms.PSet( - RelIso = cms.double( 0.95 ), - MaxVetoEm = cms.double( 4.0 ), - MaxVetoHad = cms.double( 6.0 ) - ), - electronCuts = cms.PSet( - MinPt = cms.double( 20. ), - MaxEta = cms.double( 2.4 ), - RelIso = cms.double( 0.9 ) - ), - METCuts = cms. PSet( - MinMET = cms.double( 0. ), - Recalculate = cms.bool(False) - ), - UsebTagging = cms.bool(False), - UseMtopConstraint = cms.bool(True), - writeAscii = cms.bool( False), - asciiFilename = cms.string('TopAnalysis.txt'), - processOnlyEvent = cms.int32( -1 ), - makeJetLegoPlots = cms.bool( False ), - ) - diff --git a/TopQuarkAnalysis/TopPairBSM/python/TopAnalysis_sequences.py b/TopQuarkAnalysis/TopPairBSM/python/TopAnalysis_sequences.py deleted file mode 100644 index 3f6c76d8340f8..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/python/TopAnalysis_sequences.py +++ /dev/null @@ -1,58 +0,0 @@ -import FWCore.ParameterSet.Config as cms - - -## produce ttGenEvent -from TopQuarkAnalysis.TopEventProducers.sequences.ttGenEvent_cff import * -## semi-leptonic decay -import TopQuarkAnalysis.TopEventProducers.producers.TtDecaySelection_cfi - -ttMuonicFilter = TopQuarkAnalysis.TopEventProducers.producers.TtDecaySelection_cfi.ttDecaySelection.clone() -ttMuonicFilter.allowedTopDecays.decayBranchA.electron = cms.bool(False) -ttMuonicFilter.allowedTopDecays.decayBranchA.muon = cms.bool(True) -ttMuonicFilter.allowedTopDecays.decayBranchA.tau = cms.bool(False) -ttMuonicFilter.allowedTopDecays.decayBranchB.electron = cms.bool(False) -ttMuonicFilter.allowedTopDecays.decayBranchB.muon = cms.bool(False) -ttMuonicFilter.allowedTopDecays.decayBranchB.tau = cms.bool(False) -ttMuonicFilter.restrictTauDecays.leptonic = cms.bool(True) -ttMuonicFilter.restrictTauDecays.oneProng = cms.bool(True) -ttMuonicFilter.restrictTauDecays.threeProng = cms.bool(True) - -## invert selection -ttNoMuonicFilter = TopQuarkAnalysis.TopEventProducers.producers.TtDecaySelection_cfi.ttDecaySelection.clone() -ttNoMuonicFilter.allowedTopDecays.decayBranchA.electron = cms.bool(False) -ttNoMuonicFilter.allowedTopDecays.decayBranchA.muon = cms.bool(True) -ttNoMuonicFilter.allowedTopDecays.decayBranchA.tau = cms.bool(False) -ttNoMuonicFilter.allowedTopDecays.decayBranchB.electron = cms.bool(False) -ttNoMuonicFilter.allowedTopDecays.decayBranchB.muon = cms.bool(False) -ttNoMuonicFilter.allowedTopDecays.decayBranchB.tau = cms.bool(False) -ttNoMuonicFilter.restrictTauDecays.leptonic = cms.bool(True) -ttNoMuonicFilter.restrictTauDecays.oneProng = cms.bool(True) -ttNoMuonicFilter.restrictTauDecays.threeProng = cms.bool(True) -ttNoMuonicFilter.invert = cms.bool(True) - - -## setup HLT filter -from TopQuarkAnalysis.TopPairBSM.BooTopHLTFilter import * - -## Analyzer and setup default selection -from TopQuarkAnalysis.TopPairBSM.TopAnalysis_Defaults import * -from TopQuarkAnalysis.TopPairBSM.ABCDAnalysis_Defaults import * -from TopQuarkAnalysis.TopPairBSM.HighAnalysis_Defaults import * - - -TopAnalysisMuFilter = cms.Sequence( - ttMuonicFilter+ - BooTopHLTFilter+ - TopAnalyzer) - -TopAnalysisNoMuFilter = cms.Sequence( - ttNoMuonicFilter+ - BooTopHLTFilter+ - TopAnalyzer) - -TopAnalysis = cms.Sequence(BooTopHLTFilter+ - TopAnalyzer) - -ABCDAnalysis = cms.Sequence(ABCDAnalyzer) - -HighMAnalysis = cms.Sequence(HighMAnalyzer) diff --git a/TopQuarkAnalysis/TopPairBSM/python/caTopJets_cff.py b/TopQuarkAnalysis/TopPairBSM/python/caTopJets_cff.py deleted file mode 100644 index 7eb42129cc8d9..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/python/caTopJets_cff.py +++ /dev/null @@ -1,36 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from RecoJets.JetProducers.CATopJetParameters_cfi import * -from RecoJets.JetProducers.GenJetParameters_cfi import * -from RecoJets.JetProducers.CaloJetParameters_cfi import * -from RecoJets.JetProducers.PFJetParameters_cfi import * -from RecoJets.JetProducers.AnomalousCellParameters_cfi import * - - -caTopCaloJets = cms.EDProducer("CATopJetProducer", - CATopJetParameters, - CaloJetParameters, - AnomalousCellParameters, - jetAlgorithm = cms.string("CambridgeAachen"), - rParam = cms.double(0.0) #Parameter not used by CATopJetProducer but is necessary. use rbBins in CATopJetParameters_cfi.py - ) - - -caTopGenJets = cms.EDProducer("CATopJetProducer", - CATopJetParameters, - GenJetParameters, - AnomalousCellParameters, - jetAlgorithm = cms.string("CambridgeAachen"), - rParam = cms.double(0.0) #Parameter not used by CATopJetProducer but is necessary. use rbBins in CATopJetParameters_cfi.py - ) - - - -caTopPFJets = cms.EDProducer("CATopJetProducer", - CATopJetParameters, - PFJetParameters, - AnomalousCellParameters, - jetAlgorithm = cms.string("CambridgeAachen"), - rParam = cms.double(0.0) #Parameter not used by CATopJetProducer but is necessary. use rbBins in CATopJetParameters_cfi.py - ) - diff --git a/TopQuarkAnalysis/TopPairBSM/python/filters_cff.py b/TopQuarkAnalysis/TopPairBSM/python/filters_cff.py deleted file mode 100644 index 825c6aa09f1cb..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/python/filters_cff.py +++ /dev/null @@ -1,74 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -def applyFilters( process ) : - - - ## The beam scraping filter __________________________________________________|| - process.noscraping = cms.EDFilter( - "FilterOutScraping", - applyfilter = cms.untracked.bool(True), - debugOn = cms.untracked.bool(False), - numtrack = cms.untracked.uint32(10), - thresh = cms.untracked.double(0.25) - ) - - ## The iso-based HBHE noise filter ___________________________________________|| - #process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi') - - ## The CSC beam halo tight filter ____________________________________________|| - #process.load('RecoMET.METAnalyzers.CSCHaloFilter_cfi') - process.load("RecoMET.METFilters.metFilters_cff") - - ## The HCAL laser filter _____________________________________________________|| - process.load("RecoMET.METFilters.hcalLaserEventFilter_cfi") - process.hcalLaserEventFilter.vetoByRunEventNumber=cms.untracked.bool(False) - process.hcalLaserEventFilter.vetoByHBHEOccupancy=cms.untracked.bool(True) - - ## The ECAL dead cell trigger primitive filter _______________________________|| - process.load('RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi') - ## For AOD and RECO recommendation to use recovered rechits - process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag("ecalTPSkimNA") - - ## The EE bad SuperCrystal filter ____________________________________________|| - process.load('RecoMET.METFilters.eeBadScFilter_cfi') - - ## The Good vertices collection needed by the tracking failure filter ________|| - process.goodVertices = cms.EDFilter( - "VertexSelector", - filter = cms.bool(False), - src = cms.InputTag("offlinePrimaryVertices"), - cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2") - ) - - ## The tracking failure filter _______________________________________________|| - process.load('RecoMET.METFilters.trackingFailureFilter_cfi') - process.load('RecoMET.METFilters.trackingPOGFilters_cfi') - - - # Tracking TOBTEC fakes filter ## - # if true, only events passing filter (bad events) will pass - process.tobtecfakesfilter.filter=cms.bool(False) - - - - - ## The good primary vertex filter ____________________________________________|| - pvSrc = 'offlinePrimaryVertices' - process.primaryVertexFilter = cms.EDFilter( - "VertexSelector", - src = cms.InputTag("offlinePrimaryVertices"), - cut = cms.string("!isFake & ndof > 4 & abs(z) <= 24 & position.Rho <= 2"), - filter = cms.bool(True) - ) - - - from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector - process.goodOfflinePrimaryVertices = cms.EDFilter( - "PrimaryVertexObjectFilter", - filterParams = pvSelector.clone( maxZ = cms.double(24.0), - minNdof = cms.double(4.0) # this is >= 4 - ), - src=cms.InputTag(pvSrc) - ) - - diff --git a/TopQuarkAnalysis/TopPairBSM/src/BoostedTopProducer.cc b/TopQuarkAnalysis/TopPairBSM/src/BoostedTopProducer.cc deleted file mode 100644 index 752948416eff2..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/src/BoostedTopProducer.cc +++ /dev/null @@ -1,381 +0,0 @@ -#include "BoostedTopProducer.h" -#include "CommonTools/CandUtils/interface/AddFourMomenta.h" - -#include -#include -#include - -using std::cout; -using std::endl; -using std::string; - -// -// constants, enums and typedefs -// - -// -// static data member definitions -// - -// -// constructors and destructor -// -BoostedTopProducer::BoostedTopProducer(const edm::ParameterSet& iConfig) - : eleToken_(consumes >(iConfig.getParameter("electronLabel"))), - muoToken_(consumes >(iConfig.getParameter("muonLabel"))), - jetToken_(consumes >(iConfig.getParameter("jetLabel"))), - metToken_(consumes >(iConfig.getParameter("metLabel"))), - solToken_(mayConsume(iConfig.getParameter("solLabel"))), - caloIsoCut_(iConfig.getParameter("caloIsoCut")), - mTop_(iConfig.getParameter("mTop")) { - //register products - produces >(); -} - -BoostedTopProducer::~BoostedTopProducer() {} - -// -// member functions -// - -// ------------ method called to produce the data ------------ -void BoostedTopProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - - bool debug = false; - - // ----------------------------------------------------- - // get the bare PAT objects - // ----------------------------------------------------- - edm::Handle > muonHandle; - iEvent.getByToken(muoToken_, muonHandle); - std::vector const& muons = *muonHandle; - - edm::Handle > jetHandle; - iEvent.getByToken(jetToken_, jetHandle); - std::vector const& jets = *jetHandle; - - edm::Handle > electronHandle; - iEvent.getByToken(eleToken_, electronHandle); - std::vector const& electrons = *electronHandle; - - edm::Handle > metHandle; - iEvent.getByToken(metToken_, metHandle); - std::vector const& mets = *metHandle; - - // ----------------------------------------------------- - // Event Preselection: - // <= 1 isolated electron or muon - // >= 1 electron or muon - // >= 2 jets - // >= 1 missing et - // - // To explain: - // We want to look at leptons within "top jets" in some - // cases. This means the isolation will kill those events. - // However, if there IS an isolated lepton, we want only - // one of them. - // - // So to select the prompt W lepton, the logic is: - // 1. If there is an isolated lepton, accept it as the W lepton. - // 2. Else, take the highest Pt lepton (possibly non-isolated) - // - // ----------------------------------------------------- - bool preselection = true; - - // This will hold the prompt W lepton candidate, and a - // maximum pt decision variable - double maxWLeptonPt = -1; - //reco::Candidate const * Wlepton = 0; - - // ---------------------- - // Find isolated muons, and highest pt lepton - // ---------------------- - std::vector::const_iterator isolatedMuon = muons.end(); - std::vector::const_iterator muon = muons.end(); - unsigned int nIsolatedMuons = 0; - std::vector::const_iterator muonIt = muons.begin(), muonEnd = muons.end(); - for (; muonIt != muonEnd; ++muonIt) { - // Find highest pt lepton - double pt = muonIt->pt(); - if (pt > maxWLeptonPt) { - maxWLeptonPt = pt; - muon = muonIt; - } - - // Find any isolated muons - double caloIso = muonIt->caloIso(); - if (caloIso >= 0 && caloIso < caloIsoCut_) { - nIsolatedMuons++; - isolatedMuon = muonIt; - } - } - - // ---------------------- - // Find isolated electrons, and highest pt lepton - // ---------------------- - std::vector::const_iterator isolatedElectron = electrons.end(); - std::vector::const_iterator electron = electrons.end(); - unsigned int nIsolatedElectrons = 0; - std::vector::const_iterator electronIt = electrons.begin(), electronEnd = electrons.end(); - for (; electronIt != electronEnd; ++electronIt) { - // Find highest pt lepton - double pt = electronIt->pt(); - if (pt > maxWLeptonPt) { - maxWLeptonPt = pt; - electron = electronIt; - } - - // Find any isolated electrons - double caloIso = electronIt->caloIso(); - if (caloIso >= 0 && caloIso < caloIsoCut_) { - nIsolatedElectrons++; - isolatedElectron = electronIt; - } - } - - // ---------------------- - // Now decide on the "prompt" lepton from the W: - // Choose isolated leptons over all, and if no isolated, - // then take highest pt lepton. - // ---------------------- - bool isMuon = true; - if (isolatedMuon != muonEnd) { - muon = isolatedMuon; - isMuon = true; - } else if (isolatedElectron != electronEnd) { - electron = isolatedElectron; - isMuon = false; - } else { - // Set to the highest pt lepton - if (muon != muonEnd && electron == electronEnd) - isMuon = true; - else if (muon == muonEnd && electron != electronEnd) - isMuon = false; - else if (muon != muonEnd && electron != electronEnd) { - isMuon = muon->pt() > electron->pt(); - } - } - - // ---------------------- - // Veto events that have more than one isolated lepton - // ---------------------- - int nIsolatedLeptons = nIsolatedMuons + nIsolatedElectrons; - if (nIsolatedLeptons > 1) { - preselection = false; - } - - // ---------------------- - // Veto events that have no prompt lepton candidates - // ---------------------- - if (muon == muonEnd && electron == electronEnd) { - preselection = false; - } - - // ---------------------- - // Veto events with < 2 jets or no missing et - // ---------------------- - if (jets.size() < 2 || mets.empty()) { - preselection = false; - } - - bool write = false; - - // ----------------------------------------------------- - // - // CompositeCandidates to store the event solution. - // This will take one of two forms: - // a) lv jj jj Full reconstruction. - // - // ttbar-> - // (hadt -> (hadW -> hadp + hadq) + hadb) + - // (lept -> (lepW -> lepton + neutrino) + lepb) - // - // b) lv jj (j) Partial reconstruction, associate - // at least 1 jet to the lepton - // hemisphere, and at least one jet in - // the opposite hemisphere. - // - // ttbar-> - // (hadt -> (hadJet1 [+ hadJet2] ) ) + - // (lept -> (lepW -> lepton + neutrino) + lepJet1 ) - // - // There will also be two subcategories of (b) that - // will correspond to physics cases: - // - // b1) Lepton is isolated: Moderate ttbar mass. - // b2) Lepton is nonisolated: High ttbar mass. - // - // ----------------------------------------------------- - reco::CompositeCandidate ttbar("ttbar"); - AddFourMomenta addFourMomenta; - - // Main decisions after preselection - if (preselection) { - if (debug) - cout << "Preselection is satisfied" << endl; - - if (debug) - cout << "Jets.size() = " << jets.size() << endl; - - // This will be modified for the z solution, so make a copy - pat::MET neutrino(mets[0]); - - // 1. First examine the low mass case with 4 jets and widely separated - // products. We take out the TtSemiLeptonicEvent from the TQAF and - // form the ttbar invariant mass. - if (jets.size() >= 4) { - if (debug) - cout << "Getting ttbar semileptonic solution" << endl; - - // get the ttbar semileptonic event solution if there are more than 3 jets - edm::Handle eSol; - iEvent.getByToken(solToken_, eSol); - - // Have solution, continue - if (eSol.isValid()) { - if (debug) - cout << "Got a nonzero size solution vector" << endl; - // Just set the ttbar solution to the best ttbar solution from - // TtSemiEvtSolutionMaker - ttbar = eSol->eventHypo(TtSemiLeptonicEvent::kMVADisc); - write = true; - } - // No ttbar solution with 4 jets, something is weird, print a warning - else { - edm::LogWarning("DataNotFound") << "BoostedTopProducer: Cannot find TtSemiEvtSolution\n"; - } - } - // 2. With 2 or 3 jets, we decide based on the separation between - // the lepton and the closest jet in that hemisphere whether to - // consider it "moderate" or "high" mass. - else if (jets.size() == 2 || jets.size() == 3) { - // ------------------------------------------------------------------ - // First create a leptonic W candidate - // ------------------------------------------------------------------ - reco::CompositeCandidate lepW("lepW"); - - if (isMuon) { - if (debug) - cout << "Adding muon as daughter" << endl; - lepW.addDaughter(*muon, "muon"); - } else { - if (debug) - cout << "Adding electron as daughter" << endl; - lepW.addDaughter(*electron, "electron"); - } - if (debug) - cout << "Adding neutrino as daughter" << endl; - lepW.addDaughter(neutrino, "neutrino"); - addFourMomenta.set(lepW); - - //bool nuzHasComplex = false; - METzCalculator zcalculator; - - zcalculator.SetMET(neutrino); - if (isMuon) - zcalculator.SetMuon(*muon); - else - zcalculator.SetMuon(*electron); // This name is misleading, should be setLepton - double neutrinoPz = zcalculator.Calculate(1); // closest to the lepton Pz - //if (zcalculator.IsComplex()) nuzHasComplex = true; - // Set the neutrino pz - neutrino.setPz(neutrinoPz); - - if (debug) - cout << "Set neutrino pz to " << neutrinoPz << endl; - - // ------------------------------------------------------------------ - // Next ensure that there is a jet within the hemisphere of the - // leptonic W, and one in the opposite hemisphere - // ------------------------------------------------------------------ - reco::CompositeCandidate hadt("hadt"); - reco::CompositeCandidate lept("lept"); - if (debug) - cout << "Adding lepW as daughter" << endl; - lept.addDaughter(lepW, "lepW"); - - std::string hadName("hadJet"); - std::string lepName("lepJet"); - - // Get the W momentum - TLorentzVector p4_W(lepW.px(), lepW.py(), lepW.pz(), lepW.energy()); - - // Loop over the jets - std::vector::const_iterator jetit = jets.begin(), jetend = jets.end(); - unsigned long ii = 1; // Count by 1 for naming histograms - for (; jetit != jetend; ++jetit, ++ii) { - // Get this jet's momentum - TLorentzVector p4_jet(jetit->px(), jetit->py(), jetit->pz(), jetit->energy()); - - // Calculate psi (like DeltaR, only more invariant under Rapidity) - double psi = Psi(p4_W, p4_jet, mTop_); - - // Get jets that are in the leptonic hemisphere - if (psi < TMath::Pi()) { - // Add this jet to the leptonic top - std::stringstream s; - s << lepName << ii; - if (debug) - cout << "Adding daughter " << s.str() << endl; - lept.addDaughter(*jetit, s.str()); - } - // Get jets that are in the hadronic hemisphere - if (psi > TMath::Pi()) { - // Add this jet to the hadronic top. We don't - // make any W hypotheses in this case, since - // we cannot determine which of the three - // jets are merged. - std::stringstream s; - s << hadName << ii; - if (debug) - cout << "Adding daughter " << s.str() << endl; - hadt.addDaughter(*jetit, s.str()); - } - } // end loop over jets - - addFourMomenta.set(lept); - addFourMomenta.set(hadt); - - bool lepWHasJet = lept.numberOfDaughters() >= 2; // W and >= 1 jet - bool hadWHasJet = hadt.numberOfDaughters() >= 1; // >= 1 jet - if (lepWHasJet && hadWHasJet) { - if (debug) - cout << "Adding daughters lept and hadt" << endl; - ttbar.addDaughter(lept, "lept"); - ttbar.addDaughter(hadt, "hadt"); - addFourMomenta.set(ttbar); - write = true; - } // end of hadronic jet and leptonic jet - - } // end if there are 2 or 3 jets - - } // end if preselection is satisfied - - // Write the solution to the event record - std::vector ttbarList; - if (write) { - if (debug) - cout << "Writing out" << endl; - ttbarList.push_back(ttbar); - } - std::unique_ptr > pTtbar(new std::vector(ttbarList)); - iEvent.put(std::move(pTtbar)); -} - -double BoostedTopProducer::Psi(const TLorentzVector& p1, const TLorentzVector& p2, double mass) { - TLorentzVector ptot = p1 + p2; - Double_t theta1 = TMath::ACos((p1.Vect().Dot(ptot.Vect())) / (p1.P() * ptot.P())); - Double_t theta2 = TMath::ACos((p2.Vect().Dot(ptot.Vect())) / (p2.P() * ptot.P())); - //Double_t sign = 1.; - //if ( (theta1+theta2) > (TMath::Pi()/2) ) sign = -1.; - double th1th2 = theta1 + theta2; - double psi = (p1.P() + p2.P()) * TMath::Abs(TMath::Sin(th1th2)) / (2. * mass); - if (th1th2 > (TMath::Pi() / 2)) - psi = (p1.P() + p2.P()) * (1. + TMath::Abs(TMath::Cos(th1th2))) / (2. * mass); - - return psi; -} - -//define this as a plug-in -DEFINE_FWK_MODULE(BoostedTopProducer); diff --git a/TopQuarkAnalysis/TopPairBSM/src/BoostedTopProducer.h b/TopQuarkAnalysis/TopPairBSM/src/BoostedTopProducer.h deleted file mode 100644 index 530587006c501..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/src/BoostedTopProducer.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef TopQuarkAnalysis_TopPairBSM_interface_BoostedTopProducer_h -#define TopQuarkAnalysis_TopPairBSM_interface_BoostedTopProducer_h - -// -*- C++ -*- -// -// Package: BoostedTopProducer -// Class: BoostedTopProducer -// -/**\class BoostedTopProducer BoostedTopProducer.cc BoostedTopProducer.cc - - Description: Class to examine boosted ttbar pairs in multiple mass regions. - - This will produce a ttbar solution, which will take one of two forms: - a) lv jj jj Full reconstruction. - - ttbar-> - (hadt -> (hadW -> hadp + hadq) + hadb) + - (lept -> (lepW -> lepton + neutrino) + lepb) - - b) lv jj (j) Partial reconstruction, associate - at least 1 jet to the lepton - hemisphere, and at least one jet in - the opposite hemisphere. - - ttbar-> - (hadt -> (hadJet1 [+ hadJet2] ) ) + - (lept -> (lepW -> lepton + neutrino) + lepJet1 ) - - There will also be two subcategories of (b) that - will correspond to physics cases: - - b1) Lepton is isolated: Moderate ttbar mass. - b2) Lepton is nonisolated: High ttbar mass. - - - Implementation: - To implement this, we use the NamedCompositeCandidate structures - from the Candidate model. This provides flexibility in the definition of the - output objects and allows automatic plotting in the Starter Kit. - We use the PAT objects to construct the ttbar solutions in the different ranges - as follows: - a) Full reconstruction: We use TtSemiEventSolutions made upstream of this module. - b) Partial reconstruction: Association of variables using the "Psi" variable, - which is a more rapidity-invariant version of deltaR. -*/ -// -// Original Author: "Salvatore Rappoccio" -// Created: Thu May 1 11:37:48 CDT 2008 -// -// - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/Candidate/interface/CompositeCandidate.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/Electron.h" -#include "DataFormats/PatCandidates/interface/Jet.h" -#include "DataFormats/PatCandidates/interface/MET.h" -#include "DataFormats/PatCandidates/interface/Hemisphere.h" - -#include "METzCalculator.h" -#include "AnalysisDataFormats/TopObjects/interface/TtSemiLeptonicEvent.h" -#include "TLorentzVector.h" -#include "TMath.h" - -// -// class decleration -// - -class BoostedTopProducer : public edm::EDProducer { -public: - explicit BoostedTopProducer(const edm::ParameterSet&); - ~BoostedTopProducer() override; - -private: - void produce(edm::Event&, const edm::EventSetup&) override; - - // ----------member data --------------------------- - - // data labels - edm::EDGetTokenT > eleToken_; - edm::EDGetTokenT > muoToken_; - edm::EDGetTokenT > jetToken_; - edm::EDGetTokenT > metToken_; - edm::EDGetTokenT solToken_; - - // Cut variables - double caloIsoCut_; // isolation cut to consider a lepton isolated - double mTop_; // input top mass - - // Rapidity-invariant deltaR - double Psi(const TLorentzVector& p1, const TLorentzVector& p2, double mass); -}; - -#endif diff --git a/TopQuarkAnalysis/TopPairBSM/src/JetCombinatorics.cc b/TopQuarkAnalysis/TopPairBSM/src/JetCombinatorics.cc deleted file mode 100644 index c28085e176dbd..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/src/JetCombinatorics.cc +++ /dev/null @@ -1,347 +0,0 @@ -/**_________________________________________________________________ - class: JetCombinatorics.cc - package: Analyzer/TopTools - - - author: Francisco Yumiceva, Fermilab (yumiceva@fnal.gov) - - version $Id: JetCombinatorics.cc,v 1.3 2009/07/30 06:02:21 jengbou Exp $ - -________________________________________________________________**/ - -#include "JetCombinatorics.h" -#include "TMath.h" - -#include - -std::string itoa(int i) { - char temp[20]; - sprintf(temp, "%d", i); - return ((std::string)temp); -} - -//_______________________________________________________________ -JetCombinatorics::JetCombinatorics() { - this->Clear(); - - minMassLepW_ = -999999.; - maxMassLepW_ = 999999.; - minMassHadW_ = -999999.; - maxMassHadW_ = 999999.; - minMassLepTop_ = -999999.; - maxMassLepTop_ = 999999.; - - minPhi_ = -1.; - removeDuplicates_ = true; - maxNJets_ = 9999; - verbosef = false; - UsebTagging_ = false; - UseMtop_ = true; - SigmasTypef = 0; - UseFlv_ = false; - - Template4jCombos_ = NestedCombinatorics(); // 12 combinations - Template5jCombos_ = Combinatorics(4, 5); // 5 combinations of 4 combos - Template6jCombos_ = Combinatorics(4, 6); // 15 combinations of 4 combos - Template7jCombos_ = Combinatorics(4, 7); // xx combinations of 4 combos -} - -//_______________________________________________________________ -JetCombinatorics::~JetCombinatorics() { this->Clear(); } - -//_______________________________________________________________ -void JetCombinatorics::Clear() { - allCombos_.clear(); - allCombosSumEt_.clear(); - Template4jCombos_.clear(); - Template5jCombos_.clear(); - Template6jCombos_.clear(); - Template7jCombos_.clear(); - cand1_.clear(); -} - -//_______________________________________________________________ -std::map JetCombinatorics::Combinatorics(int n, int max) { - // find a combinatorics template - // This is a simple stupid function to make algebratic combinatorics - - int kcombos = n; - int maxcombos = max; - - std::string list; - - for (int m = 0; m < maxcombos; m++) { - list = list + (itoa(m)); - } - - std::string seed; - for (int m = 0; m < kcombos; m++) { - seed = seed + (itoa(m)); - } - - std::map aTemplateCombos; - aTemplateCombos.clear(); - - aTemplateCombos[0] = seed; - - int i = 0; - int totalmatches = seed.size(); - int totalIte = list.size(); - - for (int ite = 0; ite < ((int)totalIte); ite++) { - //cout << "iteration " << ite << endl; - //i = 0; - //for ( Itevec = seed.begin(); Itevec != seed.end(); ++Itevec) { - for (i = 0; i < (int)totalmatches; i++) { - std::string newseed = aTemplateCombos[ite]; - std::string newseed2; - /* - cout << "newseed size= " << newseed.size() << " : "; - for (std::vector< std::string>::iterator iite = newseed.begin(); - iite != newseed.end(); ++iite) { - - cout << *iite << " "; - } - cout << endl; - */ - for (int itemp = 0; itemp < (int)newseed.size(); itemp++) { - if (itemp != i) - newseed2 = newseed2 + (newseed[itemp]); - } - /* - cout << "newseed2: "; - for (std::vector< std::string>::iterator iite = newseed2.begin(); - iite != newseed2.end(); ++iite) { - - cout << *iite << " "; - } - cout << endl; - */ - for (int j = 0; j < (int)list.size(); j++) { - //cout << " j = " << j << endl; - bool Isnewelement = true; - std::string newelement = "0"; - //bool Isnewcombo = true; - for (int k = 0; k < (int)newseed2.size(); k++) { - if (list[j] == newseed2[k]) - Isnewelement = false; - } - if (Isnewelement) { - newelement = list[j]; - //cout << "new element: " << newelement << endl; - - std::string candseed = newseed2; - candseed = candseed + newelement; - - bool IsnewCombo = true; - for (int ic = 0; ic < (int)aTemplateCombos.size(); ++ic) { - int nmatch = 0; - for (int ij = 0; ij < (int)(aTemplateCombos[ic]).size(); ij++) { - for (int ik = 0; ik < (int)candseed.size(); ik++) { - if (candseed[ik] == aTemplateCombos[ic][ij]) - nmatch++; - } - } - if (nmatch == (int)totalmatches) - IsnewCombo = false; - } - if (IsnewCombo) { - //cout << "new combo"<< " before combo size=" << aTemplateCombos.size() << endl; - aTemplateCombos[(int)aTemplateCombos.size()] = candseed; - //cout << " after size = " << aTemplateCombos.size() << endl; - } - } - } - } - } //close iterations - - // debug info - - //std::cout << " build templates for total combos = " << aTemplateCombos.size() << std::endl; - //std::cout << " template combos: " << std::endl; - //for (size_t ic=0; ic != aTemplateCombos.size(); ++ic) { - - //std::cout << aTemplateCombos[ic] << std::endl; - //} - - return aTemplateCombos; -} - -//______________________________________________________________ -std::map JetCombinatorics::NestedCombinatorics() { - // build by hand 12 combinations for semileptonic top decays - - std::map aTemplateCombos; - aTemplateCombos.clear(); - - aTemplateCombos[0] = "0123"; - aTemplateCombos[1] = "0132"; - aTemplateCombos[2] = "0213"; - aTemplateCombos[3] = "0231"; - aTemplateCombos[4] = "0312"; - aTemplateCombos[5] = "0321"; - aTemplateCombos[6] = "1203"; - aTemplateCombos[7] = "1230"; - aTemplateCombos[8] = "1302"; - aTemplateCombos[9] = "1320"; - aTemplateCombos[10] = "2301"; - aTemplateCombos[11] = "2310"; - - return aTemplateCombos; -} - -//______________________________________________________________ -void JetCombinatorics::FourJetsCombinations(const std::vector& jets, - const std::vector& bdiscriminators) { - int n = 0; // total number of combos - std::map allCombos; - std::map allCombosSumEt; - - std::map aTemplateCombos; - aTemplateCombos.clear(); - - if (jets.size() == 4) - aTemplateCombos[0] = std::string("0123"); - if (jets.size() == 5) - aTemplateCombos = Template5jCombos_; - if (jets.size() == 6) - aTemplateCombos = Template6jCombos_; - if (jets.size() == 7) - aTemplateCombos = Template7jCombos_; - - // force to use only 4 jets - if (maxNJets_ == 4) - aTemplateCombos[0] = std::string("0123"); - - if (verbosef) - std::cout << "[JetCombinatorics] size of vector of jets = " << jets.size() << std::endl; - - for (size_t ic = 0; ic != aTemplateCombos.size(); ++ic) { - if (verbosef) - std::cout << "[JetCombinatorics] get 4 jets from the list, cluster # " << ic << "/" << aTemplateCombos.size() - 1 - << std::endl; - - // get a template - std::string aTemplate = aTemplateCombos[ic]; - - if (verbosef) - std::cout << "[JetCombinatorics] template of 4 jets = " << aTemplate << std::endl; - - // make a list of 4 jets - std::vector the4jets; - std::vector the4Ids; - std::vector thebdisc; - std::vector theFlvCorr; - //the4jets[0] = jets[0]; - - for (int ij = 0; ij < 4; ij++) { - //std::cout << "ij= " << ij << std::endl; - //std::cout << "atoi = " << atoi((aTemplate.substr(0,1)).c_str()) << std::endl; - //std::cout << "jets[].Pt = " << jets[ij].Pt() << std::endl; - int tmpi = atoi((aTemplate.substr(ij, 1)).c_str()); - //std::cout << "tmpi= " << tmpi << std::endl; - the4jets.push_back(jets[tmpi]); - the4Ids.push_back(tmpi); - if (UsebTagging_) - thebdisc.push_back(bdiscriminators[tmpi]); - if (UseFlv_) - theFlvCorr.push_back(flavorCorrections_[tmpi]); - } - - if (verbosef) - std::cout << "[JetCombinatorics] with these 4 jets, make 12 combinations: " << std::endl; - - //std::cout << " the4jets[ij].size = " << the4jets.size() << std::endl; - - for (size_t itemplate = 0; itemplate != Template4jCombos_.size(); ++itemplate) { - std::string a4template = Template4jCombos_[itemplate]; - - if (verbosef) - std::cout << "[JetCombinatorics] ==> combination: " << a4template << " is # " << itemplate << "/" - << Template4jCombos_.size() - 1 << std::endl; - - Combo acombo; - - acombo.SetWp(the4jets[atoi((a4template.substr(0, 1)).c_str())]); - acombo.SetWq(the4jets[atoi((a4template.substr(1, 1)).c_str())]); - acombo.SetHadb(the4jets[atoi((a4template.substr(2, 1)).c_str())]); - acombo.SetLepb(the4jets[atoi((a4template.substr(3, 1)).c_str())]); - acombo.SetLepW(theLepW_); - - acombo.SetIdWp(the4Ids[atoi((a4template.substr(0, 1)).c_str())]); - acombo.SetIdWq(the4Ids[atoi((a4template.substr(1, 1)).c_str())]); - acombo.SetIdHadb(the4Ids[atoi((a4template.substr(2, 1)).c_str())]); - acombo.SetIdLepb(the4Ids[atoi((a4template.substr(3, 1)).c_str())]); - //std::cout << " acombo setup" << std::endl; - - if (UseFlv_) { - acombo.SetFlvCorrWp(theFlvCorr[atoi((a4template.substr(0, 1)).c_str())]); - acombo.SetFlvCorrWq(theFlvCorr[atoi((a4template.substr(1, 1)).c_str())]); - acombo.SetFlvCorrHadb(theFlvCorr[atoi((a4template.substr(2, 1)).c_str())]); - acombo.SetFlvCorrLepb(theFlvCorr[atoi((a4template.substr(3, 1)).c_str())]); - acombo.ApplyFlavorCorrections(); - } - if (UsebTagging_) { - acombo.Usebtagging(); - acombo.SetbDiscPdf(bTagPdffilename_); - acombo.SetWp_disc(thebdisc[atoi((a4template.substr(0, 1)).c_str())]); - acombo.SetWq_disc(thebdisc[atoi((a4template.substr(1, 1)).c_str())]); - acombo.SetHadb_disc(thebdisc[atoi((a4template.substr(2, 1)).c_str())]); - acombo.SetLepb_disc(thebdisc[atoi((a4template.substr(3, 1)).c_str())]); - } - - acombo.UseMtopConstraint(UseMtop_); - // choose value of sigmas - acombo.SetSigmas(SigmasTypef); - - acombo.analyze(); - - if (verbosef) { - std::cout << "[JetCombinatorics] ==> combination done:" << std::endl; - acombo.Print(); - } - - // invariant mass cuts - TLorentzVector aHadWP4 = acombo.GetHadW(); - TLorentzVector aLepWP4 = acombo.GetLepW(); - TLorentzVector aLepTopP4 = acombo.GetLepTop(); - - if ((aHadWP4.M() > minMassHadW_ && aHadWP4.M() < maxMassHadW_) && - (aLepWP4.M() > minMassLepW_ && aLepWP4.M() < maxMassLepW_) && - (aLepTopP4.M() > minMassLepTop_ && aLepTopP4.M() < maxMassLepTop_)) { - allCombos[acombo] = n; - allCombosSumEt[acombo] = n; - - n++; - } - } - } - - allCombos_ = allCombos; - allCombosSumEt_ = allCombosSumEt; -} - -Combo JetCombinatorics::GetCombination(int n) { - int j = 0; - Combo a; - for (std::map::const_iterator ite = allCombos_.begin(); ite != allCombos_.end(); ++ite) { - if (j == n) - a = ite->first; - j++; - } - - return a; -} - -Combo JetCombinatorics::GetCombinationSumEt(int n) { - int j = 0; - Combo a; - for (std::map::const_iterator ite = allCombosSumEt_.begin(); ite != allCombosSumEt_.end(); - ++ite) { - if (j == n) - a = ite->first; - j++; - } - - return a; -} diff --git a/TopQuarkAnalysis/TopPairBSM/src/JetCombinatorics.h b/TopQuarkAnalysis/TopPairBSM/src/JetCombinatorics.h deleted file mode 100644 index 0140492091f47..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/src/JetCombinatorics.h +++ /dev/null @@ -1,358 +0,0 @@ -#ifndef JetCombinatorics_h -#define JetCombinatorics_h - -/**_________________________________________________________________ - class: JetCombinatorics.h - package: - - - author: Francisco Yumiceva, Fermilab (yumiceva@fnal.gov) - - version $Id: JetCombinatorics.h,v 1.4 2010/02/05 22:01:38 yumiceva Exp $ - -________________________________________________________________**/ - -#include "TLorentzVector.h" -#include "TString.h" -#include "TH1F.h" -#include "TFile.h" -#include "TMath.h" -#include -#include -#include - -class Combo { -public: - Combo() { - MW = 84.2; //79.8; - Mtop_h = 180.7; //175.; - Mtop_l = 174.9; - sigmaHadW = 10.5; //2.*7.6; - sigmaHadt = 19.2; //2.*12.5; - sigmaLept = 24.2; //2.*15.6; - - SumEt_ = 0.; - usebtag_ = false; - useMtop_ = true; - - useFlv_ = false; - Wp_flv_ = Wq_flv_ = Hadb_flv_ = Lepb_flv_ = 1.; - } - ~Combo(){}; - - void SetWp(const TLorentzVector& Wp) { Wp_ = Wp; } - void SetWq(const TLorentzVector& Wq) { Wq_ = Wq; } - void SetHadb(const TLorentzVector& Hadb) { Hadb_ = Hadb; } - void SetLepW(const TLorentzVector& LepW) { LepW_ = LepW; } - void SetLepb(const TLorentzVector& Lepb) { Lepb_ = Lepb; } - // flavor corrections - void ApplyFlavorCorrections(bool option = true) { useFlv_ = option; } - void SetFlvCorrWp(double corr) { Wp_flv_ = corr; } - void SetFlvCorrWq(double corr) { Wq_flv_ = corr; } - void SetFlvCorrHadb(double corr) { Hadb_flv_ = corr; } - void SetFlvCorrLepb(double corr) { Lepb_flv_ = corr; } - // b tagging - void SetWp_disc(double disc) { Wp_disc_ = disc; } - void SetWq_disc(double disc) { Wq_disc_ = disc; } - void SetHadb_disc(double disc) { Hadb_disc_ = disc; } - void SetLepb_disc(double disc) { Lepb_disc_ = disc; } - void SetbDiscPdf(const TString& filename) { - pdffile_ = TFile::Open(filename); - hdisc_b_ = (TH1F*)gDirectory->Get("hdiscNorm_b"); - hdisc_cl_ = (TH1F*)gDirectory->Get("hdiscNorm_cl"); - } - void SetSigmas(int type = 0) { - // type == 0 take defaults - if (type == 1) { - // JES +10% - MW = 87.2; - Mtop_h = 193.2; - Mtop_l = 179.0; - sigmaHadW = 13.0; - sigmaHadt = 22.8; - sigmaLept = 26.3; - } - if (type == -1) { - // JES -10% - MW = 81.6; - Mtop_h = 169.3; - Mtop_l = 171.4; - sigmaHadW = 8.9; - sigmaHadt = 17.9; - sigmaLept = 22.6; - } - } - void Usebtagging(bool option = true) { usebtag_ = option; } - void SetMinMassLepW(double mass) { minMassLepW_ = mass; } - void SetMaxMassLepW(double mass) { maxMassLepW_ = mass; } - void SetMinMassHadW(double mass) { minMassHadW_ = mass; } - void SetMaxMassHadW(double mass) { maxMassHadW_ = mass; } - void SetMinMassLepTop(double mass) { minMassLepTop_ = mass; } - void SetMaxMassLepTop(double mass) { maxMassLepTop_ = mass; } - void UseMtopConstraint(bool option = true) { useMtop_ = option; } - - void analyze() { - if (useFlv_) { - Wp_ = Wp_flv_ * Wp_; - Wq_ = Wq_flv_ * Wq_; - Hadb_ = Hadb_flv_ * Hadb_; - Lepb_ = Lepb_flv_ * Lepb_; - } - - HadW_ = Wp_ + Wq_; - HadTop_ = HadW_ + Hadb_; - LepTop_ = LepW_ + Lepb_; - TopPair_ = HadTop_ + LepTop_; - - //double sigmaHadW = 10.5;//2.*7.6; - //double sigmaHadt = 19.2;//2.*12.5; - //double sigmaLept = 24.2;//2.*15.6; - - double chiHadW = (HadW_.M() - MW) / sigmaHadW; - double chiHadt = (HadTop_.M() - Mtop_h) / sigmaHadt; - double chiLept = (LepTop_.M() - Mtop_l) / sigmaLept; - - if (useMtop_) { - chi2_ = chiHadW * chiHadW + chiHadt * chiHadt + chiLept * chiLept; - Ndof_ = 3; - } else { - chi2_ = chiHadW * chiHadW + (HadTop_.M() - LepTop_.M()) * (HadTop_.M() - LepTop_.M()) / - (sigmaHadt * sigmaHadt + sigmaLept * sigmaLept); - Ndof_ = 2; - } - - SumEt_ = HadTop_.Pt(); - - if (usebtag_) { - double gauss_norm = (2.) * TMath::Log(sigmaHadW * TMath::Sqrt(2 * TMath::Pi())) + - (2.) * TMath::Log(sigmaHadt * TMath::Sqrt(2 * TMath::Pi())) + - (2.) * TMath::Log(sigmaLept * TMath::Sqrt(2 * TMath::Pi())); - - double LR_Wp; - double LR_Wq; - double LR_Hadb; - double LR_Lepb; - - double LR_den = 0; - LR_den = (getPdfValue("cl", Wp_disc_) + getPdfValue("b", Wp_disc_)); - if (LR_den == 0) - LR_Wp = 1e-5; - else - LR_Wp = getPdfValue("cl", Wp_disc_) / LR_den; - - LR_den = (getPdfValue("cl", Wq_disc_) + getPdfValue("b", Wq_disc_)); - if (LR_den == 0) - LR_Wq = 1e-5; - else - LR_Wq = getPdfValue("cl", Wq_disc_) / LR_den; - - LR_den = (getPdfValue("cl", Hadb_disc_) + getPdfValue("b", Hadb_disc_)); - if (LR_den == 0) - LR_Hadb = 1e-5; - else - LR_Hadb = getPdfValue("b", Hadb_disc_) / LR_den; - - LR_den = (getPdfValue("cl", Lepb_disc_) + getPdfValue("b", Lepb_disc_)); - if (LR_den == 0) - LR_Lepb = 1e-5; - else - LR_Lepb = getPdfValue("b", Lepb_disc_) / LR_den; - - double btag_norm = (-0.25 - TMath::Log(4) / 2); - double btag_N2LL = btag_norm * 4. * - (LR_Wp * TMath::Log(LR_Wp / 4) + LR_Wq * TMath::Log(LR_Wq / 4) + - LR_Hadb * TMath::Log(LR_Hadb / 4) + LR_Lepb * TMath::Log(LR_Lepb / 4)); - - chi2_ += btag_N2LL + gauss_norm; - Ndof_ += 3; - pdffile_->Close(); - } - } - - TLorentzVector GetWp() { return Wp_; } - TLorentzVector GetWq() { return Wq_; } - TLorentzVector GetHadW() { return HadW_; } - TLorentzVector GetLepW() { return LepW_; } - TLorentzVector GetHadb() { return Hadb_; } - TLorentzVector GetLepb() { return Lepb_; } - TLorentzVector GetHadTop() { return HadTop_; } - TLorentzVector GetLepTop() { return LepTop_; } - TLorentzVector GetTopPair() { return TopPair_; } - double GetChi2() const { return chi2_; } - double GetNdof() { return Ndof_; } - double GetSumEt() const { return SumEt_; } - int GetIdHadb() { return IdHadb_; } - int GetIdWp() { return IdWp_; } - int GetIdWq() { return IdWq_; } - int GetIdLepb() { return IdLepb_; } - void SetIdHadb(int id) { IdHadb_ = id; } - void SetIdWp(int id) { IdWp_ = id; } - void SetIdWq(int id) { IdWq_ = id; } - void SetIdLepb(int id) { IdLepb_ = id; } - void Print() { - std::cout << " jet Wp : px = " << Wp_.Px() << " py = " << Wp_.Py() << " pz = " << Wp_.Pz() << " e = " << Wp_.E() - << std::endl; - std::cout << " jet Wq : px = " << Wq_.Px() << " py = " << Wq_.Py() << " pz = " << Wq_.Pz() << " e = " << Wq_.E() - << std::endl; - std::cout << " jet Hadb: px = " << Hadb_.Px() << " py = " << Hadb_.Py() << " pz = " << Hadb_.Pz() - << " e = " << Hadb_.E() << std::endl; - std::cout << " jet Lepb: px = " << Lepb_.Px() << " py = " << Lepb_.Py() << " pz = " << Lepb_.Pz() - << " e = " << Lepb_.E() << std::endl; - std::cout << " chi-squared = " << chi2_ << " sumEt = " << SumEt_ << std::endl; - } - double getPdfValue(std::string flavor, double disc) { - double pdf = 0; - TH1F* hpdf; - if (flavor == "b") - hpdf = hdisc_b_; - else - hpdf = hdisc_cl_; - int bin = hpdf->GetXaxis()->FindBin(disc); - pdf = hpdf->GetBinContent(bin); - if (disc < -10 || disc > 50) - return 0; - //if ( pdf == 0 ) return 1.e-7; - return pdf; - } - -private: - TLorentzVector Wp_; - TLorentzVector Wq_; - TLorentzVector HadW_; - TLorentzVector Hadb_; - TLorentzVector HadTop_; - TLorentzVector LepW_; - TLorentzVector Lepb_; - TLorentzVector LepTop_; - TLorentzVector TopPair_; - - bool usebtag_; - bool useMtop_; - double Wp_disc_; - double Wq_disc_; - double Hadb_disc_; - double Lepb_disc_; - TFile* pdffile_; - TH1F* hdisc_b_; - TH1F* hdisc_cl_; - - double Wp_flv_, Wq_flv_, Hadb_flv_, Lepb_flv_; - bool useFlv_; - double chi2_; - double Ndof_; - double SumEt_; - double minMassLepW_; - double maxMassLepW_; - double minMassHadW_; - double maxMassHadW_; - - double minMassLepTop_; - double maxMassLepTop_; - - double MW; - double Mtop_h; - double Mtop_l; - double sigmaHadW; - double sigmaHadt; - double sigmaLept; - - int IdHadb_; - int IdWp_; - int IdWq_; - int IdLepb_; -}; - -struct minChi2 { - bool operator()(const Combo& s1, const Combo& s2) const { return s1.GetChi2() <= s2.GetChi2(); } -}; - -struct maxSumEt { - bool operator()(const Combo& s1, const Combo& s2) const { return s1.GetSumEt() >= s2.GetSumEt(); } -}; - -class JetCombinatorics { -public: - JetCombinatorics(); - ~JetCombinatorics(); - - void Verbose() { verbosef = true; } - - std::map Combinatorics(int k, int max = 6); - std::map NestedCombinatorics(); - - void FourJetsCombinations(const std::vector& jets, const std::vector& bdiscriminators); - void SetFlavorCorrections(const std::vector& vector) { flavorCorrections_ = vector; } - void SetMaxNJets(int n) { maxNJets_ = n; } - Combo GetCombination(int n = 0); - Combo GetCombinationSumEt(int n = 0); - int GetNumberOfCombos() { return ((int)allCombos_.size()); } - //void SetCandidate( std::vector< TLorentzVector > JetCandidates ); - - void SetSigmas(int type = 0) { SigmasTypef = type; } - void SetLeptonicW(const TLorentzVector& LepW) { theLepW_ = LepW; } - - void SetMinMassLepW(double mass) { minMassLepW_ = mass; } - void SetMaxMassLepW(double mass) { maxMassLepW_ = mass; } - void SetMinMassHadW(double mass) { minMassHadW_ = mass; } - void SetMaxMassHadW(double mass) { maxMassHadW_ = mass; } - void SetMinMassLepTop(double mass) { minMassLepTop_ = mass; } - void SetMaxMassLepTop(double mass) { maxMassLepTop_ = mass; } - - void UsebTagging(bool option = true) { UsebTagging_ = option; } - void ApplyFlavorCorrection(bool option = true) { UseFlv_ = option; } - void UseMtopConstraint(bool option = true) { UseMtop_ = option; } - void SetbTagPdf(const TString& name) { bTagPdffilename_ = name; } - void Clear(); - - std::vector TwoCombos(); - std::vector ThreeCombos(); - - void RemoveDuplicates(bool option) { removeDuplicates_ = option; } - - std::vector GetComposites(); - void AnalyzeCombos(); - -private: - //int kcombos_; - //int maxcombos_; - int SigmasTypef; - bool verbosef; - std::map Template4jCombos_; - std::map Template5jCombos_; - std::map Template6jCombos_; - std::map Template7jCombos_; - - std::vector flavorCorrections_; - int maxNJets_; - bool UsebTagging_; - bool UseMtop_; - TString bTagPdffilename_; - bool UseFlv_; - - TLorentzVector theLepW_; - - double minMassLepW_; - double maxMassLepW_; - double minMassHadW_; - double maxMassHadW_; - double minMassLepTop_; - double maxMassLepTop_; - - std::map allCombos_; - std::map allCombosSumEt_; - - Double_t minPhi_; - double chi2_; - int ndf_; - bool removeDuplicates_; - - std::vector cand1_; - std::vector cand2_; - std::vector cand3_; - - //int nLists_; - - //std::vector< TLorentzVector > composites_; -}; - -#endif diff --git a/TopQuarkAnalysis/TopPairBSM/src/METzCalculator.cc b/TopQuarkAnalysis/TopPairBSM/src/METzCalculator.cc deleted file mode 100644 index 982b41b4d09c3..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/src/METzCalculator.cc +++ /dev/null @@ -1,94 +0,0 @@ - -#include "METzCalculator.h" -#include "TMath.h" - -/// constructor -METzCalculator::METzCalculator() { isComplex_ = false; } - -/// destructor -METzCalculator::~METzCalculator() {} - -/// member functions -double METzCalculator::Calculate(int type) { - double M_W = 80.4; - double M_mu = 0.10566; - double emu = lepton_.energy(); - double pxmu = lepton_.px(); - double pymu = lepton_.py(); - double pzmu = lepton_.pz(); - double pxnu = MET_.px(); - double pynu = MET_.py(); - double pznu = 0.; - - double a = M_W * M_W - M_mu * M_mu + 2.0 * pxmu * pxnu + 2.0 * pymu * pynu; - double A = 4.0 * (emu * emu - pzmu * pzmu); - double B = -4.0 * a * pzmu; - double C = 4.0 * emu * emu * (pxnu * pxnu + pynu * pynu) - a * a; - - double tmproot = B * B - 4.0 * A * C; - - if (tmproot < 0) { - isComplex_ = true; - pznu = -B / (2 * A); // take real part of complex roots - - //std::cout << " Neutrino Solutions: complex, real part " << pznu << std::endl; - } else { - isComplex_ = false; - double tmpsol1 = (-B + TMath::Sqrt(tmproot)) / (2.0 * A); - double tmpsol2 = (-B - TMath::Sqrt(tmproot)) / (2.0 * A); - - //std::cout << " Neutrino Solutions: " << tmpsol1 << ", " << tmpsol2 << std::endl; - - if (type == 0) { - // two real roots, pick the one closest to pz of muon - if (TMath::Abs(tmpsol2 - pzmu) < TMath::Abs(tmpsol1 - pzmu)) { - pznu = tmpsol2; - } else - pznu = tmpsol1; - // if pznu is > 300 pick the most central root - if (pznu > 300.) { - if (TMath::Abs(tmpsol1) < TMath::Abs(tmpsol2)) - pznu = tmpsol1; - else - pznu = tmpsol2; - } - } - if (type == 1) { - // two real roots, pick the one closest to pz of muon - if (TMath::Abs(tmpsol2 - pzmu) < TMath::Abs(tmpsol1 - pzmu)) { - pznu = tmpsol2; - } else - pznu = tmpsol1; - } - if (type == 2) { - // pick the most central root. - if (TMath::Abs(tmpsol1) < TMath::Abs(tmpsol2)) - pznu = tmpsol1; - else - pznu = tmpsol2; - } - if (type == 3) { - // pick the largest value of the cosine - TVector3 p3w, p3mu; - p3w.SetXYZ(pxmu + pxnu, pymu + pynu, pzmu + tmpsol1); - p3mu.SetXYZ(pxmu, pymu, pzmu); - - double sinthcm1 = 2. * (p3mu.Perp(p3w)) / M_W; - p3w.SetXYZ(pxmu + pxnu, pymu + pynu, pzmu + tmpsol2); - double sinthcm2 = 2. * (p3mu.Perp(p3w)) / M_W; - - double costhcm1 = TMath::Sqrt(1. - sinthcm1 * sinthcm1); - double costhcm2 = TMath::Sqrt(1. - sinthcm2 * sinthcm2); - - if (costhcm1 > costhcm2) - pznu = tmpsol1; - else - pznu = tmpsol2; - } - } - - //Particle neutrino; - //neutrino.setP4( LorentzVector(pxnu, pynu, pznu, TMath::Sqrt(pxnu*pxnu + pynu*pynu + pznu*pznu ))) ; - - return pznu; -} diff --git a/TopQuarkAnalysis/TopPairBSM/src/METzCalculator.h b/TopQuarkAnalysis/TopPairBSM/src/METzCalculator.h deleted file mode 100644 index fe109d6f30a21..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/src/METzCalculator.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef METzCalculator_h -#define METzCalculator_h - -/**_________________________________________________________________ - class: METzCalculator.h - - author: Francisco Yumiceva, Fermilab (yumiceva@fnal.gov) - - version $Id: METzCalculator.h,v 1.3 2009/07/30 06:02:19 jengbou Exp $ - -________________________________________________________________**/ - -//#include "FWCore/Framework/interface/Event.h" -//#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/PatCandidates/interface/Particle.h" -#include "DataFormats/PatCandidates/interface/MET.h" - -#include "TLorentzVector.h" - -class METzCalculator { -public: - /// constructor - METzCalculator(); - //METzCalculator(const edm::ParameterSEt& iConf); - /// destructor - virtual ~METzCalculator(); - /// Set MET - void SetMET(const pat::MET& MET) { MET_ = MET; }; - void SetMET(const TLorentzVector& MET) { - pat::Particle::LorentzVector p(MET.Px(), MET.Py(), MET.Pz(), MET.E()); - MET_.setP4(p); - } - /// Set Muon - void SetMuon(const pat::Particle& lepton) { lepton_ = lepton; }; - void SetMuon(const TLorentzVector& lepton) { - pat::Particle::LorentzVector p(lepton.Px(), lepton.Py(), lepton.Pz(), lepton.E()); - lepton_.setP4(p); - } - /// Calculate MEz - /// options to choose roots from quadratic equation: - /// type = 0 (defalut): if real roots, pick the one nearest to - /// the lepton Pz except when the Pz so chosen - /// is greater than 300 GeV in which case pick - /// the most central root. - /// type = 1: if real roots, choose the one closest to the lepton Pz - /// if complex roots, use only the real part. - /// type = 2: if real roots, choose the most central solution. - /// if complex roots, use only the real part. - /// type = 3: if real roots, pick the largest value of the cosine* - double Calculate(int type = 0); - /// check for complex root - bool IsComplex() const { return isComplex_; }; - - void Print() { - std::cout << " METzCalculator: pxmu = " << lepton_.px() << " pzmu= " << lepton_.pz() << std::endl; - std::cout << " METzCalculator: pxnu = " << MET_.px() << " pynu= " << MET_.py() << std::endl; - } - -private: - bool isComplex_; - pat::Particle lepton_; - pat::MET MET_; -}; - -#endif diff --git a/TopQuarkAnalysis/TopPairBSM/test/anaTrain_cfg.py b/TopQuarkAnalysis/TopPairBSM/test/anaTrain_cfg.py deleted file mode 100644 index abf1fa6c99da5..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/anaTrain_cfg.py +++ /dev/null @@ -1,488 +0,0 @@ -from __future__ import print_function -# As of 1 Feb 2017: -# This configuration appears to be already broken. It -# fails to even run only under python. -# For this reason, it was not converted to use Tasks. -# If it is ever fixed, it will also need to be migrated -# to use Tasks to run unscheduled modules. - -## import skeleton process -from PhysicsTools.PatAlgos.patTemplate_cfg import * -## switch to uncheduled mode -process.options.allowUnscheduled = cms.untracked.bool(True) -#process.Tracer = cms.Service("Tracer") - -############################### -####### Parameters ############ -############################### -from FWCore.ParameterSet.VarParsing import VarParsing -options = VarParsing ('python') - - -options.register ('tlbsmTag', - 'tlbsm_71x_v1', - VarParsing.multiplicity.singleton, - VarParsing.varType.string, - 'TLBSM tag use in production') - - -options.register ('usePythia8', - False, - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - "Use status codes from Pythia8 rather than Pythia6") - - -options.register ('usePythia6andPythia8', - False, - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - "Use status codes from Pythia8 and Pythia6") - -options.parseArguments() - -process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") -process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") -process.load("RecoJets.Configuration.RecoGenJets_cff") -process.load("RecoJets.Configuration.GenJetParticles_cff") -from TopQuarkAnalysis.TopPairBSM.filters_cff import applyFilters - -################################################################################################ -############################ Run filters ####################################################### -################################################################################################ - -######### TO DO : TURN ON FILTERS ########### -#applyFilters(process) -print('CAVEAT : Filters are not yet implemented') - -######### TO DO : TURN ON TRIGGERS! ######### - - -############################### -####### DAF PV's ########## -############################### - -pvSrc = 'offlinePrimaryVertices' - -## The good primary vertex filter ____________________________________________|| -process.primaryVertexFilter = cms.EDFilter( - "VertexSelector", - src = cms.InputTag("offlinePrimaryVertices"), - cut = cms.string("!isFake & ndof > 4 & abs(z) <= 24 & position.Rho <= 2"), - filter = cms.bool(True) - ) - - -from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector - -process.goodOfflinePrimaryVertices = cms.EDFilter( - "PrimaryVertexObjectFilter", - filterParams = pvSelector.clone( maxZ = cms.double(24.0), - minNdof = cms.double(4.0) # this is >= 4 - ), - src=cms.InputTag(pvSrc) - ) - -################################################################################################ -############################ Pruned GenParticles ############################################### -################################################################################################ - -# prune gen particles -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") -process.prunedGenParticles = cms.EDProducer("GenParticlePruner", - src = cms.InputTag("genParticles"), - select = cms.vstring( - "drop *" - ,"keep status = 3" #keeps particles from the hard matrix element - ,"keep (abs(pdgId) >= 11 & abs(pdgId) <= 16) & status = 1" #keeps e/mu and nus with status 1 - ,"keep (abs(pdgId) = 15) & status = 3" #keeps taus - ) - ) - -if options.usePythia8 : - process.prunedGenParticles.select = cms.vstring( - "drop *" - ,"keep status = 21" #keeps particles from the hard matrix element - ,"keep status = 22" #keeps particles from the hard matrix element - ,"keep status = 23" #keeps particles from the hard matrix element - ,"keep (abs(pdgId) >= 11 & abs(pdgId) <= 16) & status = 1" #keeps e/mu and nus with status 1 - ,"keep (abs(pdgId) = 15) & (status = 21 || status = 22 || status = 23) " #keeps taus - ) -if options.usePythia6andPythia8 : - process.prunedGenParticles.select = cms.vstring( - "drop *" - ,"keep status = 3" #keeps particles from the hard matrix element - ,"keep status = 21" #keeps particles from the hard matrix element - ,"keep status = 22" #keeps particles from the hard matrix element - ,"keep status = 23" #keeps particles from the hard matrix element - ,"keep (abs(pdgId) >= 11 & abs(pdgId) <= 16) & status = 1" #keeps e/mu and nus with status 1 - ,"keep (abs(pdgId) = 15) & (status = 3 || status = 21 || status = 22 || status = 23)" #keeps taus - ) - - - - - -################################################################################################ -############################ Configure leptons ################################################# -################################################################################################ - - -postfix = 'EI' - -from PhysicsTools.PatAlgos.tools.pfTools import adaptPFMuons, adaptPFElectrons -from PhysicsTools.PatAlgos.tools.helpers import loadWithPostfix -from PhysicsTools.PatAlgos.tools.helpers import applyPostfix - -#loadWithPostfix(process,'PhysicsTools.PatAlgos.patSequences_cff',postfix) - - -# Electrons - -adaptPFElectrons(process, - process.patElectrons, - postfix) - -# Muons - -adaptPFMuons(process, - process.patMuons, - postfix, - muonMatchModule=process.muonMatch - ) - - -# Taus -################ TO DO : We need a tau expert to do this. ################### -#process.patTaus.tauSource = cms.InputTag("pfTaus"+postfix) - - -################################################################################################ -############################ Run extra MET reconstruction ###################################### -################################################################################################ - - -from PhysicsTools.PatAlgos.tools.metTools import addMETCollection -addMETCollection(process, labelName='patMETPF', metSource='pfType1CorrectedMet') - - -################################################################################################ -############################ Run extra jet reconstruction ###################################### -################################################################################################ -from RecoJets.Configuration.RecoPFJets_cff import * -process.ca15PFJetsCHS = ca8PFJetsCHS.clone(rParam=1.5,src='pfNoPileUpJME',doAreaFastjet=False) -process.hepTopTagPFJetsCHS = hepTopTagPFJetsCHS.clone(src='pfNoPileUpJME') - -from RecoJets.JetProducers.caTopTaggers_cff import caTopTagInfos, hepTopTagInfos - -process.caTopTagInfos = caTopTagInfos.clone() - - -################################################################################################ -############################ Configure jets in PAT ############################################# -################################################################################################ - - -## uncomment the following line to add different jet collections -## to the event content -from PhysicsTools.PatAlgos.tools.jetTools import addJetCollection -from PhysicsTools.PatAlgos.tools.jetTools import switchJetCollection - -## uncomment the following lines to add ak4PFJetsCHS to your PAT output -addJetCollection( - process, - labelName = 'AK4PFCHS', - jetSource = cms.InputTag('ak4PFJetsCHS'), - algo='ak', - rParam=0.4, - jetCorrections = ('AK5PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'Type-1'), - btagDiscriminators = [ - 'jetBProbabilityBJetTags' - , 'jetProbabilityBJetTags' - , 'trackCountingHighPurBJetTags' - , 'trackCountingHighEffBJetTags' - , 'simpleSecondaryVertexHighEffBJetTags' - , 'simpleSecondaryVertexHighPurBJetTags' - , 'combinedSecondaryVertexBJetTags' - ], - btagInfos = [ - 'secondaryVertexTagInfos' - ] - ) - -addJetCollection( - process, - labelName = 'CA8PFCHS', - jetSource = cms.InputTag('ca8PFJetsCHS'), - algo='ca', - rParam=0.8, - jetCorrections = ('AK7PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None') - ) - -addJetCollection( - process, - labelName = 'CA8CMSTopTag', - jetSource = cms.InputTag('cmsTopTagPFJetsCHS',''), - getJetMCFlavour=False, - jetCorrections = ('AK7PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'), - btagInfos = [ - 'caTopTagInfos' - ] - ) - -addJetCollection( - process, - labelName = 'CA8CMSTopTagSubjets', - jetSource = cms.InputTag('cmsTopTagPFJetsCHS','caTopSubJets'), - algo='ca', - rParam=0.8, - jetCorrections = ('AK5PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'), - btagDiscriminators = [ - 'jetBProbabilityBJetTags' - , 'jetProbabilityBJetTags' - , 'trackCountingHighPurBJetTags' - , 'trackCountingHighEffBJetTags' - , 'simpleSecondaryVertexHighEffBJetTags' - , 'simpleSecondaryVertexHighPurBJetTags' - , 'combinedSecondaryVertexBJetTags' - ], - btagInfos = [ - 'secondaryVertexTagInfos' - ] - ) - -addJetCollection( - process, - labelName = 'CA8Pruned', - jetSource = cms.InputTag('ca8PFJetsCHSPruned',''), - getJetMCFlavour=False, - jetCorrections = ('AK7PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None') - ) - -addJetCollection( - process, - labelName = 'CA8PrunedSubjets', - jetSource = cms.InputTag('ca8PFJetsCHSPruned','SubJets'), - algo='ca', - rParam=0.8, - jetCorrections = ('AK5PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'), - btagDiscriminators = [ - 'jetBProbabilityBJetTags' - , 'jetProbabilityBJetTags' - , 'trackCountingHighPurBJetTags' - , 'trackCountingHighEffBJetTags' - , 'simpleSecondaryVertexHighEffBJetTags' - , 'simpleSecondaryVertexHighPurBJetTags' - , 'combinedSecondaryVertexBJetTags' - ], - btagInfos = [ - 'secondaryVertexTagInfos' - ] - ) - - -addJetCollection( - process, - labelName = 'CA15HEPTopTag', - jetSource = cms.InputTag('hepTopTagPFJetsCHS',''), - getJetMCFlavour=False, - jetCorrections = ('AK7PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None') - ) - -addJetCollection( - process, - labelName = 'CA15HEPTopTagSubjets', - jetSource = cms.InputTag('hepTopTagPFJetsCHS','caTopSubJets'), - algo='ca', - rParam=1.5, - jetCorrections = ('AK5PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'), - btagDiscriminators = [ - 'jetBProbabilityBJetTags' - , 'jetProbabilityBJetTags' - , 'trackCountingHighPurBJetTags' - , 'trackCountingHighEffBJetTags' - , 'simpleSecondaryVertexHighEffBJetTags' - , 'simpleSecondaryVertexHighPurBJetTags' - , 'combinedSecondaryVertexBJetTags' - ], - btagInfos = [ - 'secondaryVertexTagInfos' - ] - ) - -addJetCollection( - process, - labelName = 'EI', - jetSource = cms.InputTag('pfJetsEI'), - algo='ak', - rParam=0.4, - jetCorrections = ('AK5PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'Type-1'), - btagDiscriminators = [ - 'jetBProbabilityBJetTags' - , 'jetProbabilityBJetTags' - , 'trackCountingHighPurBJetTags' - , 'trackCountingHighEffBJetTags' - , 'simpleSecondaryVertexHighEffBJetTags' - , 'simpleSecondaryVertexHighPurBJetTags' - , 'combinedSecondaryVertexBJetTags' - ], - btagInfos = [ - 'secondaryVertexTagInfos' - ] - ) - -switchJetCollection( - process, - jetSource = cms.InputTag('ak4PFJets'), - algo='ak', - rParam=0.4, - jetCorrections = ('AK5PF', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'Type-1'), - btagDiscriminators = [ - 'jetBProbabilityBJetTags' - , 'jetProbabilityBJetTags' - , 'trackCountingHighPurBJetTags' - , 'trackCountingHighEffBJetTags' - , 'simpleSecondaryVertexHighEffBJetTags' - , 'simpleSecondaryVertexHighPurBJetTags' - , 'combinedSecondaryVertexBJetTags' - ], - btagInfos = [ - 'secondaryVertexTagInfos' - ] - ) - - -# Subjet flavor still requires some manual tweaking until it is better integrated into PAT -# Adjust the flavor of subjets of pruned CA8 jets -process.patJetFlavourAssociationCA8PrunedSubjets = process.patJetFlavourAssociationCA8PrunedSubjets.clone( - jets = cms.InputTag('ca8PFJetsCHS'), - groomedJets = cms.InputTag('ca8PFJetsCHSPruned'), - subjets = cms.InputTag('ca8PFJetsCHSPruned','SubJets') -) -process.patJetsCA8PrunedSubjets.JetFlavourInfoSource = cms.InputTag('patJetFlavourAssociationCA8PrunedSubjets','SubJets') -# Adjust the flavor of subjets of CMSTopTag jets -process.patJetFlavourAssociationCA8CMSTopTagSubjets = process.patJetFlavourAssociationCA8CMSTopTagSubjets.clone( - jets = cms.InputTag('ca8PFJetsCHS'), - groomedJets = cms.InputTag('cmsTopTagPFJetsCHS'), - subjets = cms.InputTag('cmsTopTagPFJetsCHS','caTopSubJets') -) -process.patJetsCA8CMSTopTagSubjets.JetFlavourInfoSource = cms.InputTag('patJetFlavourAssociationCA8CMSTopTagSubjets','SubJets') -# Adjust the flavor of subjets of HEPTopTag jets -process.patJetFlavourAssociationCA15HEPTopTagSubjets = process.patJetFlavourAssociationCA15HEPTopTagSubjets.clone( - jets = cms.InputTag('ca15PFJetsCHS'), - groomedJets = cms.InputTag('hepTopTagPFJetsCHS'), - subjets = cms.InputTag('hepTopTagPFJetsCHS','caTopSubJets') -) -process.patJetsCA15HEPTopTagSubjets.JetFlavourInfoSource = cms.InputTag('patJetFlavourAssociationCA15HEPTopTagSubjets','SubJets') - - -# Add some user functions for the secondary vertex mass. -for mod in [process.patJets, - process.patJetsAK4PFCHS, - process.patJetsEI, - process.patJetsCA8PFCHS, - process.patJetsCA8CMSTopTagSubjets, - process.patJetsCA8PrunedSubjets, - process.patJetsCA15HEPTopTagSubjets ] : - mod.userData.userFunctions = cms.vstring( "? hasTagInfo('secondaryVertex') && tagInfoSecondaryVertex('secondaryVertex').nVertices() > 0 ? " - "tagInfoSecondaryVertex('secondaryVertex').secondaryVertex(0).p4().mass() : 0") - mod.userData.userFunctionLabels = cms.vstring('secvtxMass') - - -# Add the top-tagging info which piggy-backs on the b-tagging tag info -process.patJetsCA8CMSTopTag.addTagInfos = True -process.patJetsCA8CMSTopTag.tagInfoSources = cms.VInputTag( - cms.InputTag('caTopTagInfos') - ) - -process.patJetsCA15HEPTopTag.addTagInfos = True -process.patJetsCA15HEPTopTag.tagInfoSources = cms.VInputTag( - cms.InputTag('hepTopTagInfos') - ) - - - -# Apply jet ID to all of the jets upstream. We aren't going to screw around -# with this, most likely. So, we don't really to waste time with it -# at the analysis level. -from PhysicsTools.SelectorUtils.pfJetIDSelector_cfi import pfJetIDSelector -for ilabel in ['PatJets', - 'PatJetsAK4PFCHS', - 'PatJetsEI', - 'PatJetsCA8PFCHS', - 'PatJetsCA8CMSTopTag', - 'PatJetsCA8Pruned', - 'PatJetsCA15HEPTopTag'] : - ifilter = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selected" + ilabel) - ) - setattr( process, 'good' + ilabel, ifilter ) - - -# Next, "pack" the pat::Jets that use substructure so we can run b-tagging and JEC's on the subjets. - -for ilabel in ['PatJetsCA8CMSTopTag', - 'PatJetsCA8Pruned', - 'PatJetsCA15HEPTopTag'] : - imerger = cms.EDProducer("BoostedJetMerger", - jetSrc=cms.InputTag("good" + ilabel ), - subjetSrc=cms.InputTag("selected" + ilabel + "Subjets") - ) - setattr( process, 'good' + ilabel + 'Packed', imerger ) - - -#print process.out.outputCommands - -## ------------------------------------------------------ -# In addition you usually want to change the following -# parameters: -## ------------------------------------------------------ -# -# process.GlobalTag.globaltag = ... ## (according to https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideFrontierConditions) -# ## -process.source.fileNames = ['/store/relval/CMSSW_7_2_0_pre1/RelValRSKKGluon_m3000GeV_13/GEN-SIM-RECO/POSTLS172_V1-v1/00000/0E9DF649-2BFE-E311-8F3F-0025905B85E8.root'] -# ## -process.maxEvents.input = 10 -# ## -process.out.outputCommands += [ - 'keep GenRunInfoProduct_generator_*_*', - 'keep GenEventInfoProduct_generator_*_*', - 'keep PileupSummaryInfos_*_*_*', - 'keep *_goodOfflinePrimaryVertices*_*_*', - 'keep *_ak4GenJetsNoNu_*_*', - 'keep *_ca8GenJetsNoNu_*_*', - 'keep *_fixedGrid_*_*', - 'drop *_*_rho*_*', - 'drop *_*_sigma*_*', - 'keep patJets_goodPatJets_*_*', - 'keep patJets_goodPatJetsAK4PFCHS_*_*', - 'keep patJets_goodPatJetsCA15HEPTopTagPacked_*_*', - 'keep patJets_goodPatJetsCA8CMSTopTagPacked_*_*', - 'keep patJets_goodPatJetsCA8PFCHS_*_*', - 'keep patJets_goodPatJetsCA8PrunedPacked_*_*', - 'keep patJets_goodPatJetsEI_*_*', - 'drop patJets_selected*_*_*', # Drop all of the "selected" ones as they are duplicates... - 'keep patJets_selected*Subjets_*_*', # ... except subjets - 'drop CaloTowers_*_*_*', - 'drop recoGenJets_*_genJets_*', - 'drop recoPFCandidates_*_pfCandidates_*', - 'keep *_particleFlow__*', - 'keep *_prunedGenParticles_*_*', - 'keep patTriggerObjects_patTrigger_*_*', - 'keep patTriggerFilters_patTrigger_*_*', - 'keep patTriggerPaths_patTrigger_*_*', - 'keep patTriggerEvent_patTriggerEvent_*_*', - 'keep *_cleanPatPhotonsTriggerMatch*_*_*', - 'keep *_cleanPatElectronsTriggerMatch*_*_*', - 'keep *_cleanPatMuonsTriggerMatch*_*_*', - 'keep *_cleanPatTausTriggerMatch*_*_*', - 'keep *_cleanPatJetsTriggerMatch*_*_*', - 'keep *_patMETsTriggerMatch*_*_*', - 'keep *_TriggerResults_*_*', - 'keep *_hltTriggerSummaryAOD_*_*', - ] -# ## -process.out.fileName = 'patTuple_tlbsm_train_' + options.tlbsmTag + '.root' -# ## -# process.options.wantSummary = False ## (to suppress the long output at the end of the job) diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_DYJetsToLL_TuneD6T_madgraph_tauola_ttbsm_v2.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_DYJetsToLL_TuneD6T_madgraph_tauola_ttbsm_v2.cfg deleted file mode 100644 index f130d8abd1eef..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_DYJetsToLL_TuneD6T_madgraph_tauola_ttbsm_v2.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /DYJetsToLL_TuneD6T_M-50_7TeV-madgraph-tauola/Spring11-PU_S1_START311_V1G1-v1/AODSIM -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 100 -get_edm_output = 1 -pycfg_params = useData=0 hltProcess=REDIGI311X - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v2_Spring11-PU_S1_-START311_V1G1-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = DYJetsToLL_TuneD6T_7TeV-madgraph-tauola_Spring11-PU_S1_-START311_V1G1-v1_ttbsm_v2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_DYJetsToLL_TuneD6T_madgraph_tauola_ttbsm_v4.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_DYJetsToLL_TuneD6T_madgraph_tauola_ttbsm_v4.cfg deleted file mode 100644 index 0b103ce3feca4..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_DYJetsToLL_TuneD6T_madgraph_tauola_ttbsm_v4.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /DYJetsToLL_TuneD6T_M-50_7TeV-madgraph-tauola/Spring11-PU_S1_START311_V1G1-v1/AODSIM -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 100 -get_edm_output = 1 -pycfg_params = useData=0 hltProcess=REDIGI311X use41x=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v4_Spring11-PU_S1_-START311_V1G1-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = DYJetsToLL_TuneD6T_7TeV-madgraph-tauola_Spring11-PU_S1_-START311_V1G1-v1_ttbsm_v4 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_HT-Run2011A-PromptReco-v1_ttbsm_v1.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_HT-Run2011A-PromptReco-v1_ttbsm_v1.cfg deleted file mode 100644 index fd022feab239d..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_HT-Run2011A-PromptReco-v1_ttbsm_v1.cfg +++ /dev/null @@ -1,24 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /HT/Run2011A-PromptReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 40 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160405-161312 -pycfg_params = useData=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v1_Run2011A-PromptReco-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir =HT_Run2011A-PromptReco-v1_ttbsm_v1 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_HT-Run2011A-PromptReco-v1_ttbsm_v2.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_HT-Run2011A-PromptReco-v1_ttbsm_v2.cfg deleted file mode 100644 index 7465c97f65d71..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_HT-Run2011A-PromptReco-v1_ttbsm_v2.cfg +++ /dev/null @@ -1,24 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /HT/Run2011A-PromptReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 60 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160404-163387 -pycfg_params = useData=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v2_Run2011A-PromptReco-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir =HT_Run2011A-PromptReco-v1_ttbsm_v2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_HT-Run2011A-PromptReco-v2_ttbsm_v2.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_HT-Run2011A-PromptReco-v2_ttbsm_v2.cfg deleted file mode 100644 index 357c5be96e8f1..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_HT-Run2011A-PromptReco-v2_ttbsm_v2.cfg +++ /dev/null @@ -1,24 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /HT/Run2011A-PromptReco-v2/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 60 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160404-163387 -pycfg_params = useData=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v2_Run2011A-PromptReco-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir =HT_Run2011A-PromptReco-v2_ttbsm_v2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-May10ReReco-v1_ttbsm_v4.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-May10ReReco-v1_ttbsm_v4.cfg deleted file mode 100644 index 4efd2b6a212fd..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-May10ReReco-v1_ttbsm_v4.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = gLite -use_server = 1 - -[CMSSW] -datasetpath = /Jet/Run2011A-May10ReReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 400 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-163817 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v4_Run2011-May10ReReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-May10ReReco-v1_ttbsm_v4 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-May10ReReco-v1_ttbsm_v5.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-May10ReReco-v1_ttbsm_v5.cfg deleted file mode 100644 index 9e81885768b2d..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-May10ReReco-v1_ttbsm_v5.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = glidein -use_server = 1 - -[CMSSW] -datasetpath = /Jet/Run2011A-May10ReReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-163817 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v5_Run2011-May10ReReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-May10ReReco-v1_ttbsm_v5 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-May10ReReco-v1_ttbsm_v6.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-May10ReReco-v1_ttbsm_v6.cfg deleted file mode 100644 index f3b041ab55886..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-May10ReReco-v1_ttbsm_v6.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = glidein -use_server = 1 - -[CMSSW] -datasetpath = /Jet/Run2011A-May10ReReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-163817 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v6_Run2011-May10ReReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-May10ReReco-v1_ttbsm_v6 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-May10ReReco-v1_ttbsm_v8.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-May10ReReco-v1_ttbsm_v8.cfg deleted file mode 100644 index 3d0601fee2b95..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-May10ReReco-v1_ttbsm_v8.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-May10ReReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-163817 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-May10ReReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-May10ReReco-v1_ttbsm_v8-submit3 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v1_ttbsm_v1.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v1_ttbsm_v1.cfg deleted file mode 100644 index f7864e1be2619..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v1_ttbsm_v1.cfg +++ /dev/null @@ -1,24 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 20 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160405-161312 -pycfg_params = useData=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v1_Run2011A-PromptReco-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir =Jet_Run2011A-PromptReco-v1_ttbsm_v1 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v1_ttbsm_v2.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v1_ttbsm_v2.cfg deleted file mode 100644 index eadd6d53611bb..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v1_ttbsm_v2.cfg +++ /dev/null @@ -1,24 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 40 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160404-163387 -pycfg_params = useData=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v2_Run2011A-PromptReco-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir =Jet_Run2011A-PromptReco-v1_ttbsm_v2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v1_ttbsm_v3.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v1_ttbsm_v3.cfg deleted file mode 100644 index 3b7b0d29941a5..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v1_ttbsm_v3.cfg +++ /dev/null @@ -1,28 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 120 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-163817 -pycfg_params = useData=1 use41x=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v3_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-PromptReco-v1_ttbsm_v3 -additional_input_files = Jec10V3.db diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v2_ttbsm_v2.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v2_ttbsm_v2.cfg deleted file mode 100644 index ad6ccdfa45dec..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v2_ttbsm_v2.cfg +++ /dev/null @@ -1,24 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v2/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 40 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160404-163387 -pycfg_params = useData=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v2_Run2011A-PromptReco-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir =Jet_Run2011A-PromptReco-v2_ttbsm_v2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v2_ttbsm_v2_job18.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v2_ttbsm_v2_job18.cfg deleted file mode 100644 index 53d9b23b5047e..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v2_ttbsm_v2_job18.cfg +++ /dev/null @@ -1,24 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v2/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 10 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160404-163387_range2_jetPD_job18 -pycfg_params = useData=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v2_Run2011A-PromptReco-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir =Jet_Run2011A-PromptReco-v2_ttbsm_v2_job18 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v2_ttbsm_v2_job18.cfg~ b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v2_ttbsm_v2_job18.cfg~ deleted file mode 100644 index ad6ccdfa45dec..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v2_ttbsm_v2_job18.cfg~ +++ /dev/null @@ -1,24 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v2/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 40 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160404-163387 -pycfg_params = useData=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v2_Run2011A-PromptReco-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir =Jet_Run2011A-PromptReco-v2_ttbsm_v2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v2_ttbsm_v3.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v2_ttbsm_v3.cfg deleted file mode 100644 index 28c383bff406c..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v2_ttbsm_v3.cfg +++ /dev/null @@ -1,28 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v2/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 120 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-163817 -pycfg_params = useData=1 use41x=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v3_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-PromptReco-v2_ttbsm_v3 -additional_input_files = Jec10V3.db diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v5_ttbsm_v8_2fbinv_later.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v5_ttbsm_v8_2fbinv_later.cfg deleted file mode 100644 index 937919c7dc5f6..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v5_ttbsm_v8_2fbinv_later.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v5/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-173692_2fbinv -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-PromptReco-v5_ttbsm_v8-2fbinv_later diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v6_ttbsm_v8_2fbinv_later.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v6_ttbsm_v8_2fbinv_later.cfg deleted file mode 100644 index cc27c03b0eb67..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco-v6_ttbsm_v8_2fbinv_later.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v6/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-173692_2fbinv -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-PromptReco-v6_ttbsm_v8-2fbinv_later diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v6.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v6.cfg deleted file mode 100644 index 9c5e36035a50e..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v6.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = glidein -use_server = 1 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v4/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v6_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-PromptReco-v4_ttbsm_v6 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8-again.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8-again.cfg deleted file mode 100644 index 156b93a6cf205..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8-again.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v4/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 100 -get_edm_output = 1 -lumi_mask= jetpromptmissing.json -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-PromptReco-v4_ttbsm_v8-submit3-again diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8.cfg deleted file mode 100644 index e4a97b0506fc6..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v4/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-166701 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-PromptReco-v4_ttbsm_v8-submit3 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_EPS.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_EPS.cfg deleted file mode 100644 index 73643ed87ddd1..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_EPS.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v4/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-167746-range3 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-PromptReco-v4_ttbsm_v8-range3 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_missinglumis.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_missinglumis.cfg deleted file mode 100644 index a88c926c168f1..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_missinglumis.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v4/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= jet_alleps_missedlumis.json -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-PromptReco-v4_ttbsm_v8-missinglumis diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_range2.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_range2.cfg deleted file mode 100644 index 667939fbea7ab..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_range2.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v4/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-167284_promptreco-v4-range2 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-PromptReco-v4_ttbsm_v8-range2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_range2_brokenjobs_1_3.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_range2_brokenjobs_1_3.cfg deleted file mode 100644 index 211b133c74e7b..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_range2_brokenjobs_1_3.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v4/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-167284_promptreco-v4-range2-brokenjobs_1_3 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-PromptReco-v4_ttbsm_v8-range2_brokenjobs_1_3 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_range3.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_range3.cfg deleted file mode 100644 index 73643ed87ddd1..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_range3.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v4/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-167746-range3 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-PromptReco-v4_ttbsm_v8-range3 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_range4.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_range4.cfg deleted file mode 100644 index 7d8028eeb2822..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_Jet-Run2011A-PromptReco_ttbsm_v8_range4.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /Jet/Run2011A-PromptReco-v4/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-167913_range4 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = Jet_Run2011A-PromptReco-v4_ttbsm_v8-range4 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-PU_S3_ttbsm_v6.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-PU_S3_ttbsm_v6.cfg deleted file mode 100644 index 0c8cf2016004e..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-PU_S3_ttbsm_v6.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /QCD_Pt-15to3000_TuneZ2_Flat_7TeV_pythia6/Summer11-PU_S3_START42_V11-v2/AODSIM -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 100 -get_edm_output = 1 -pycfg_params = useData=0 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v6_Summer11-PU_S3_-START42_V11-v2 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = QCD_Pt_15to3000_Flat_Summer11-PU_S3_-START42_V11-v2_ttbsm_v6 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-PU_S3_ttbsm_v6_zvtx2.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-PU_S3_ttbsm_v6_zvtx2.cfg deleted file mode 100644 index 9bd7a502aeea1..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-PU_S3_ttbsm_v6_zvtx2.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /QCD_Pt-15to3000_TuneZ2_Flat_7TeV_pythia6/Summer11-PU_S3_START42_V11-v2/AODSIM -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 100 -get_edm_output = 1 -pycfg_params = useData=0 forceCheckClosestZVertex=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v6_zvtx2_Summer11-PU_S3_-START42_V11-v2 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = QCD_Pt_15to3000_Flat_Summer11-PU_S3_-START42_V11-v2_ttbsm_v6_zvtx2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-PU_S3_ttbsm_v8.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-PU_S3_ttbsm_v8.cfg deleted file mode 100644 index e0152813da59d..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-PU_S3_ttbsm_v8.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /QCD_Pt-15to3000_TuneZ2_Flat_7TeV_pythia6/Summer11-PU_S3_START42_V11-v2/AODSIM -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 400 -get_edm_output = 1 -pycfg_params = useData=0 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Summer11-PU_S3_-START42_V11-v2 -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = QCD_Pt_15to3000_Flat_Summer11-PU_S3_-START42_V11-v2_ttbsm_v8-submit3 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-v1-PU_S1_ttbsm_v1.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-v1-PU_S1_ttbsm_v1.cfg deleted file mode 100644 index 0c8cf2016004e..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-v1-PU_S1_ttbsm_v1.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /QCD_Pt-15to3000_TuneZ2_Flat_7TeV_pythia6/Summer11-PU_S3_START42_V11-v2/AODSIM -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 100 -get_edm_output = 1 -pycfg_params = useData=0 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v6_Summer11-PU_S3_-START42_V11-v2 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = QCD_Pt_15to3000_Flat_Summer11-PU_S3_-START42_V11-v2_ttbsm_v6 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-v1-PU_S1_ttbsm_v1.cfg.~1.1.2.1.~ b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-v1-PU_S1_ttbsm_v1.cfg.~1.1.2.1.~ deleted file mode 100644 index 771eca17968d5..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-v1-PU_S1_ttbsm_v1.cfg.~1.1.2.1.~ +++ /dev/null @@ -1,23 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /QCD_Pt_15to3000_TuneZ2_Flat_7TeV_pythia6/Spring11-PU_S1_START311_V1G1-v1/GEN-SIM-RECODEBUG -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 30 -get_edm_output = 1 -pycfg_params = useData=0 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v1_Spring11-PU_S1_-START311_V1A-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = QCD_Pt_15to3000_Flat_Spring11-PU_S1_-START311_V1A-v1_ttbsm_v1 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-v1_ttbsm_v1.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-v1_ttbsm_v1.cfg deleted file mode 100644 index 9a50ebe190f18..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_QCD_Pt_15to3000_Flat_7TeV-v1_ttbsm_v1.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /QCD_Pt_15to3000_Flat_7TeV/Spring11-START311_V1A-v1/GEN-SIM-RECO -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 100 -get_edm_output = 1 -pycfg_params = useData=0 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v1_Spring11-START311_V1A-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = QCD_Pt_15to3000_Flat_Spring11-START311_V1A-v1_ttbsm_v1 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleEle-Run2011A-PromptReco-v1_ttbsm_v1.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleEle-Run2011A-PromptReco-v1_ttbsm_v1.cfg deleted file mode 100644 index d135277b4e66b..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleEle-Run2011A-PromptReco-v1_ttbsm_v1.cfg +++ /dev/null @@ -1,24 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /SingleEle/Run2011A-PromptReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 20 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160405-161312 -pycfg_params = useData=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v1_Run2011A-PromptReco-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir =SingleEle_Run2011A-PromptReco-v1_ttbsm_v1 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-May10ReReco-v1_ttbsm_v4.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-May10ReReco-v1_ttbsm_v4.cfg deleted file mode 100644 index 5cdfaaf68b938..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-May10ReReco-v1_ttbsm_v4.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = glidein -use_server = 1 - -[CMSSW] -datasetpath = /SingleElectron/Run2011A-May10ReReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 400 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-163817 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v4_Run2011-May10ReReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = SingleElectron_Run2011A-May10ReReco-v1_ttbsm_v4 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-May10ReReco-v1_ttbsm_v5.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-May10ReReco-v1_ttbsm_v5.cfg deleted file mode 100644 index 1169517d35b3f..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-May10ReReco-v1_ttbsm_v5.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = glidein -use_server = 1 - -[CMSSW] -datasetpath = /SingleElectron/Run2011A-May10ReReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-163817 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v5_Run2011-May10ReReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = SingleElectron_Run2011A-May10ReReco-v1_ttbsm_v5 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-May10ReReco-v1_ttbsm_v6.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-May10ReReco-v1_ttbsm_v6.cfg deleted file mode 100644 index 5c4af51def507..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-May10ReReco-v1_ttbsm_v6.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = glidein -use_server = 1 - -[CMSSW] -datasetpath = /SingleElectron/Run2011A-May10ReReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-163817 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v6_Run2011-May10ReReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = SingleElectron_Run2011A-May10ReReco-v1_ttbsm_v6 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-May10ReReco-v1_ttbsm_v8.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-May10ReReco-v1_ttbsm_v8.cfg deleted file mode 100644 index adf6a3d237484..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-May10ReReco-v1_ttbsm_v8.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /SingleElectron/Run2011A-May10ReReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 800 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-163817 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-May10ReReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = SingleElectron_Run2011A-May10ReReco-v1_ttbsm_v8-submit3 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-PromptReco-v1_ttbsm_v1.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-PromptReco-v1_ttbsm_v1.cfg deleted file mode 100644 index 7d50f84e25961..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-PromptReco-v1_ttbsm_v1.cfg +++ /dev/null @@ -1,24 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /SingleElectron/Run2011A-PromptReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 20 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160405-161312 -pycfg_params = useData=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v1_Run2011A-PromptReco-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir =SingleElectron_Run2011A-PromptReco-v1_ttbsm_v1 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-PromptReco-v1_ttbsm_v2.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-PromptReco-v1_ttbsm_v2.cfg deleted file mode 100644 index c229fca0780e6..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-PromptReco-v1_ttbsm_v2.cfg +++ /dev/null @@ -1,24 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /SingleElectron/Run2011A-PromptReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 40 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160404-163387 -pycfg_params = useData=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v2_Run2011A-PromptReco-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir =SingleElectron_Run2011A-PromptReco-v1_ttbsm_v2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-PromptReco-v4_ttbsm_v8.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-PromptReco-v4_ttbsm_v8.cfg deleted file mode 100644 index 8ced1471b4f75..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleElectron-Run2011A-PromptReco-v4_ttbsm_v8.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /SingleElectron/Run2011A-PromptReco-v4/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 400 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160404-166701 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = SingleElectron_Run2011A-PromptReco-v4_ttbsm_v8-a-submit3 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-May10ReReco-v1_ttbsm_v4.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-May10ReReco-v1_ttbsm_v4.cfg deleted file mode 100644 index 0e31329414fc9..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-May10ReReco-v1_ttbsm_v4.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = glidein -use_server = 1 - -[CMSSW] -datasetpath = /SingleMu/Run2011A-May10ReReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 400 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-163817 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v4_Run2011-May10ReReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = SingleMu_Run2011A-May10ReReco-v1_ttbsm_v4 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-May10ReReco-v1_ttbsm_v5.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-May10ReReco-v1_ttbsm_v5.cfg deleted file mode 100644 index e7573d256752e..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-May10ReReco-v1_ttbsm_v5.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = glidein -use_server = 1 - -[CMSSW] -datasetpath = /SingleMu/Run2011A-May10ReReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 400 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-163817 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v5_Run2011-May10ReReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = SingleMu_Run2011A-May10ReReco-v1_ttbsm_v5 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-May10ReReco-v1_ttbsm_v6.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-May10ReReco-v1_ttbsm_v6.cfg deleted file mode 100644 index db63b598a0da5..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-May10ReReco-v1_ttbsm_v6.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /SingleMu/Run2011A-May10ReReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 400 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-163817 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v6_Run2011-May10ReReco-submit2 -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = SingleMu_Run2011A-May10ReReco-v1_ttbsm_v6-submit2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-May10ReReco-v1_ttbsm_v8.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-May10ReReco-v1_ttbsm_v8.cfg deleted file mode 100644 index 035f7602b4b83..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-May10ReReco-v1_ttbsm_v8.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /SingleMu/Run2011A-May10ReReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 400 -get_edm_output = 1 -lumi_mask= json_DCSONLY.txt_160404-163817 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-May10ReReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = SingleMu_Run2011A-May10ReReco-v1_ttbsm_v8-submit3 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-PromptReco-v1_ttbsm_v1.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-PromptReco-v1_ttbsm_v1.cfg deleted file mode 100644 index 328d654a8e9a3..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-PromptReco-v1_ttbsm_v1.cfg +++ /dev/null @@ -1,24 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /SingleMu/Run2011A-PromptReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 20 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160405-161312 -pycfg_params = useData=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v1_Run2011A-PromptReco-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir =SingleMu_Run2011A-PromptReco-v1_ttbsm_v1 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-PromptReco-v1_ttbsm_v2.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-PromptReco-v1_ttbsm_v2.cfg deleted file mode 100644 index c576c32a9dde0..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-PromptReco-v1_ttbsm_v2.cfg +++ /dev/null @@ -1,24 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /SingleMu/Run2011A-PromptReco-v1/AOD -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 40 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160404-163387 -pycfg_params = useData=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v2_Run2011A-PromptReco-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir =SingleMu_Run2011A-PromptReco-v1_ttbsm_v2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-PromptReco-v4_ttbsm_v8.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-PromptReco-v4_ttbsm_v8.cfg deleted file mode 100644 index 7cf8abea4a7eb..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-PromptReco-v4_ttbsm_v8.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /SingleMu/Run2011A-PromptReco-v4/RECO -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 400 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160404-166701 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = SingleMu_Run2011A-PromptReco-v4_ttbsm_v8-submit3 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-PromptReco-v4_ttbsm_v8_range2.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-PromptReco-v4_ttbsm_v8_range2.cfg deleted file mode 100644 index 3efc76eb26d6c..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-PromptReco-v4_ttbsm_v8_range2.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /SingleMu/Run2011A-PromptReco-v4/RECO -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 400 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160404-172478_range2only -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = SingleMu_Run2011A-PromptReco-v4_ttbsm_v8_range2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-PromptReco-v5_ttbsm_v8.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-PromptReco-v5_ttbsm_v8.cfg deleted file mode 100644 index eca600b2883d7..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_SingleMu-Run2011A-PromptReco-v5_ttbsm_v8.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /SingleMu/Run2011A-PromptReco-v5/RECO -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 400 -get_edm_output = 1 -lumi_mask=json_DCSONLY.txt_160404-172478 -pycfg_params = useData=1 - - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Run2011-PromptReco -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = SingleMu_Run2011A-PromptReco-v5_ttbsm_v8 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneD6T_7TeV_madgraph_tauola_ttbsm_v4.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneD6T_7TeV_madgraph_tauola_ttbsm_v4.cfg deleted file mode 100644 index d9fcdff6d87e2..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneD6T_7TeV_madgraph_tauola_ttbsm_v4.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /TTJets_TuneD6T_7TeV-madgraph-tauola/Spring11-PU_S1_START311_V1G1-v1/AODSIM -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 100 -get_edm_output = 1 -pycfg_params = useData=0 hltProcess=REDIGI311X use41x=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v4_Spring11-PU_S1_-START311_V1G1-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = TTJets_TuneD6T_7TeV-madgraph-tauola_Spring11-PU_S1_-START311_V1G1-v1_ttbsm_v4 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v1.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v1.cfg deleted file mode 100644 index b370bc6c4f860..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v1.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /TTJets_TuneZ2_7TeV-madgraph-tauola/Spring11-PU_S1_START311_V1G1-v1/GEN-SIM-RECO -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 40 -get_edm_output = 1 -pycfg_params = useData=0 hltProcess=REDIGI311X - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v1_Spring11-PU_S1_START311_V1G1-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = TTJets_TuneZ2_7TeV-madgraph-tauola_Spring11-PU_S1_START311_V1G1-v1 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v2.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v2.cfg deleted file mode 100644 index f2941ed721a62..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v2.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /TTJets_TuneZ2_7TeV-madgraph-tauola/Spring11-PU_S1_START311_V1G1-v1/GEN-SIM-RECO -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 50 -get_edm_output = 1 -pycfg_params = useData=0 hltProcess=REDIGI311X - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v2_Spring11-PU_S1_START311_V1G1-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = TTJets_TuneZ2_7TeV-madgraph-tauola_Spring11-PU_S1_START311_V1G1-v1_ttbsm_v2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v3.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v3.cfg deleted file mode 100644 index 5e3212410d7ac..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v3.cfg +++ /dev/null @@ -1,26 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /TTJets_TuneZ2_7TeV-madgraph-tauola/Spring11-PU_S1_START311_V1G1-v1/GEN-SIM-RECO -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 50 -get_edm_output = 1 -pycfg_params = useData=0 hltProcess=REDIGI311X use41x=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v3_Spring11-PU_S1_START311_V1G1-v1 -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = TTJets_TuneZ2_7TeV-madgraph-tauola_Spring11-PU_S1_START311_V1G1-v1_ttbsm_v3 -additional_input_files = Jec10V3.db diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v6.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v6.cfg deleted file mode 100644 index 5e3212410d7ac..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v6.cfg +++ /dev/null @@ -1,26 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /TTJets_TuneZ2_7TeV-madgraph-tauola/Spring11-PU_S1_START311_V1G1-v1/GEN-SIM-RECO -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 50 -get_edm_output = 1 -pycfg_params = useData=0 hltProcess=REDIGI311X use41x=1 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v3_Spring11-PU_S1_START311_V1G1-v1 -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = TTJets_TuneZ2_7TeV-madgraph-tauola_Spring11-PU_S1_START311_V1G1-v1_ttbsm_v3 -additional_input_files = Jec10V3.db diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v8.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v8.cfg deleted file mode 100644 index 843551d204eca..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v8.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /TTJets_TuneZ2_7TeV-madgraph-tauola/Summer11-PU_S4_START42_V11-v1/AODSIM -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 400 -get_edm_output = 1 -pycfg_params = useData=0 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Summer11-PU_S4_START42_V11-v1 -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = TTJets_TuneZ2_7TeV-madgraph-tauola_Summer11-PU_S4_START42_V11-v1_ttbsm_v8-submit5 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v9.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v9.cfg deleted file mode 100644 index 239ce5d29a218..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_TTJets_TuneZ2_7TeV-madgraph-tauola_ttbsm_v9.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /TTJets_TuneZ2_7TeV-madgraph-tauola/Summer11-PU_S4_START42_V11-v1/AODSIM -pset = ttbsm_cfg.py -total_number_of_events = -1 -number_of_jobs = 400 -get_edm_output = 1 -pycfg_params = useData=0 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v9_Summer11-PU_S4_START42_V11-v1 -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = TTJets_TuneZ2_7TeV-madgraph-tauola_Summer11-PU_S4_START42_V11-v1_ttbsm_v9_submit2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_WJetsToLNu_TuneD6T_Spring11-PU_ttbsm_v1.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_WJetsToLNu_TuneD6T_Spring11-PU_ttbsm_v1.cfg deleted file mode 100644 index 6d151669e07c2..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_WJetsToLNu_TuneD6T_Spring11-PU_ttbsm_v1.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /WJetsToLNu_TuneD6T_7TeV-madgraph-tauola/Spring11-PU_S1_START311_V1G1-v1/AODSIM -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 100 -get_edm_output = 1 -pycfg_params = useData=0 hltProcess=REDIGI311X - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v1_Spring11-PU_S1_-START311_V1G1-v1_v2 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = WJetsToLNu_TuneD6T_7TeV-madgraph-tauola_Spring11-PU_S1_-START311_V1G1-v1_v2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_WJetsToLNu_TuneD6T_Spring11-PU_ttbsm_v1.cfg.~1.1.2.1.~ b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_WJetsToLNu_TuneD6T_Spring11-PU_ttbsm_v1.cfg.~1.1.2.1.~ deleted file mode 100644 index 6d151669e07c2..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_WJetsToLNu_TuneD6T_Spring11-PU_ttbsm_v1.cfg.~1.1.2.1.~ +++ /dev/null @@ -1,23 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /WJetsToLNu_TuneD6T_7TeV-madgraph-tauola/Spring11-PU_S1_START311_V1G1-v1/AODSIM -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 100 -get_edm_output = 1 -pycfg_params = useData=0 hltProcess=REDIGI311X - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v1_Spring11-PU_S1_-START311_V1G1-v1_v2 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = WJetsToLNu_TuneD6T_7TeV-madgraph-tauola_Spring11-PU_S1_-START311_V1G1-v1_v2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_WJetsToLNu_TuneD6T_Spring11-PU_ttbsm_v2.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_WJetsToLNu_TuneD6T_Spring11-PU_ttbsm_v2.cfg deleted file mode 100644 index b2e46235cce50..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_WJetsToLNu_TuneD6T_Spring11-PU_ttbsm_v2.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /WJetsToLNu_TuneD6T_7TeV-madgraph-tauola/Spring11-PU_S1_START311_V1G1-v1/AODSIM -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 100 -get_edm_output = 1 -pycfg_params = useData=0 hltProcess=REDIGI311X - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v2_Spring11-PU_S1_-START311_V1G1-v1 -storage_path = /srm/managerv2?SFN=/pnfs/cms/WAX/11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = WJetsToLNu_TuneD6T_7TeV-madgraph-tauola_Spring11-PU_S1_-START311_V1G1-v1_ttbsm_v2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_WJetsToLNu_TuneD6T_Spring11-PU_ttbsm_v2.cfg.~1.1.2.1.~ b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_WJetsToLNu_TuneD6T_Spring11-PU_ttbsm_v2.cfg.~1.1.2.1.~ deleted file mode 100644 index ad068bd924e1a..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_WJetsToLNu_TuneD6T_Spring11-PU_ttbsm_v2.cfg.~1.1.2.1.~ +++ /dev/null @@ -1,23 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /WJetsToLNu_TuneD6T_7TeV-madgraph-tauola/Spring11-PU_S1_START311_V1G1-v1/AODSIM -pset = ttbsm_cfg.py -total_number_of_lumis = -1 -number_of_jobs = 100 -get_edm_output = 1 -pycfg_params = useData=0 hltProcess=REDIGI311X - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = ttbsm_v2_Spring11-PU_S1_-START311_V1G1-v1 -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = WJetsToLNu_TuneD6T_7TeV-madgraph-tauola_Spring11-PU_S1_-START311_V1G1-v1_ttbsm_v2 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_WJetsToLNu_TuneZ2_7TeV-madgraph-tauola_Summer11-PU_S4_START42_V11-v1_ttbsm_v8.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_WJetsToLNu_TuneZ2_7TeV-madgraph-tauola_Summer11-PU_S4_START42_V11-v1_ttbsm_v8.cfg deleted file mode 100644 index 2219d21f2ab4c..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_WJetsToLNu_TuneZ2_7TeV-madgraph-tauola_Summer11-PU_S4_START42_V11-v1_ttbsm_v8.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = condor -use_server = 0 - -[CMSSW] -datasetpath = /WJetsToLNu_TuneZ2_7TeV-madgraph-tauola/Summer11-PU_S4_START42_V11-v1/AODSIM -pset = ttbsm_cfg.py -total_number_of_events = -1 -number_of_jobs = 450 -get_edm_output = 1 -pycfg_params = useData=0 - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = cmssrm.fnal.gov -publish_data = 1 -publish_data_name = ttbsm_v8_Summer11-PU_S4_START42_V11-v1 -storage_path = /srm/managerv2?SFN=11 -user_remote_dir = /store/user/lpctlbsm -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = WJetsToLNu_TuneZ2_7TeV-madgraph-tauola_Summer11-PU_S4_START42_V11-v1_ttbsm_v8-submit4 diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_higgs_dummy.cfg b/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_higgs_dummy.cfg deleted file mode 100644 index 893bf0466975c..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/crab_higgs_dummy.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[CRAB] -jobtype = cmssw -scheduler = gLite -use_server = 1 - -[CMSSW] -datasetpath = DUMMY_DATASET -pset = DUMMY_CMSSW -total_number_of_lumis = -1 -number_of_jobs = DUMMY_NJOBS -get_edm_output = 1 -pycfg_params = useData=0 hltProcess=REDIGI311X - -[USER] -#debug_wrapper = 1 -return_data = 0 -copy_data = 1 -storage_element = T3_US_FNALLPC -publish_data = 1 -publish_data_name = DUMMY_DBNAME -dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_ph_analysis_02_writer/servlet/DBSServlet -check_user_remote_dir = 0 -ui_working_dir = DUMMY_UI_DIR diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-163387 b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-163387 deleted file mode 100644 index 230edec8744d5..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-163387 +++ /dev/null @@ -1 +0,0 @@ -{"160404": [[15, 24]], "160405": [[1, 35]], "160406": [[1, 124]], "160410": [[1, 102]], "160413": [[1, 788]], "160431": [[19, 244]], "160432": [[2, 79]], "160433": [[1, 21]], "160442": [[108, 153]], "160443": [[1, 21]], "160444": [[1, 74]], "160445": [[1, 37]], "160446": [[1, 55]], "160447": [[1, 65]], "160449": [[1, 44]], "160450": [[1, 47]], "160454": [[1, 41]], "160455": [[1, 33]], "160456": [[1, 106]], "160462": [[1, 30]], "160463": [[1, 46]], "160497": [[38, 148], [152, 398]], "160498": [[1, 70]], "160499": [[1, 16]], "160577": [[14, 337]], "160578": [[1, 456]], "160579": [[1, 181]], "160808": [[7, 80]], "160815": [[1, 95]], "160819": [[1, 17], [19, 118]], "160827": [[1, 55]], "160835": [[1, 85], [87, 496], [569, 584]], "160853": [[62, 65]], "160871": [[68, 236]], "160872": [[1, 77]], "160873": [[1, 201]], "160874": [[1, 132]], "160875": [[1, 285]], "160876": [[1, 17]], "160877": [[1, 12], [79, 83]], "160888": [[45, 423]], "160890": [[1, 395]], "160894": [[1, 220]], "160898": [[25, 53]], "160907": [[15, 220]], "160911": [[1, 301]], "160913": [[1, 26]], "160914": [[1, 75]], "160915": [[1, 382]], "160916": [[1, 90]], "160935": [[33, 259]], "160936": [[1, 60]], "160937": [[1, 209]], "160938": [[1, 130]], "160939": [[1, 148]], "160940": [[1, 90]], "160942": [[1, 26]], "160943": [[1, 54]], "160954": [[78, 84]], "160955": [[1, 228]], "160956": [[1, 73]], "160957": [[1, 953]], "160994": [[44, 45]], "160998": [[1, 288]], "161008": [[1, 285]], "161016": [[1, 327]], "161020": [[1, 22]], "161103": [[1, 111]], "161106": [[1, 40]], "161107": [[1, 40]], "161113": [[1, 45]], "161116": [[1, 20]], "161117": [[1, 43]], "161119": [[1, 350]], "161156": [[1, 90]], "161165": [[1, 100]], "161176": [[1, 31]], "161216": [[29, 53]], "161217": [[1, 788]], "161222": [[1, 136]], "161223": [[1, 409]], "161224": [[1, 2]], "161233": [[33, 63]], "161310": [[39, 127]], "161311": [[1, 704]], "161312": [[1, 1027]], "162739": [[1, 35], [37, 42]], "162742": [[1, 85], [97, 127]], "162803": [[60, 148]], "162808": [[1, 63]], "162810": [[1, 40]], "162811": [[1, 347]], "162826": [[1, 43]], "162827": [[1, 144]], "162828": [[1, 85]], "162909": [[54, 299]], "162917": [[122, 134]], "162926": [[1, 714]], "162929": [[1, 299], [358, 433]], "163045": [[51, 56]], "163046": [[1, 247], [311, 313]], "163069": [[73, 648]], "163071": [[1, 194]], "163072": [[1, 44]], "163078": [[1, 23]], "163232": [[110, 174]], "163233": [[1, 302]], "163234": [[1, 73]], "163235": [[1, 474]], "163237": [[1, 220]], "163252": [[60, 157]], "163255": [[1, 1067]], "163261": [[1, 126]], "163269": [[59, 222]], "163270": [[1, 928]], "163286": [[112, 411]], "163289": [[1, 388]], "163296": [[59, 603]], "163297": [[1, 227]], "163300": [[1, 623]], "163301": [[1, 198]], "163302": [[1, 253]], "163308": [[1, 27]], "163332": [[43, 812]], "163333": [[1, 113]], "163334": [[1, 563]], "163337": [[1, 476]], "163338": [[1, 171]], "163339": [[1, 188]], "163358": [[39, 63]], "163369": [[1, 105]], "163370": [[1, 176]], "163371": [[1, 375]], "163372": [[1, 111]], "163374": [[1, 873]], "163378": [[1, 615]], "163385": [[52, 436]], "163387": [[1, 256], [278, 287]]} \ No newline at end of file diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-163387_range2_jetPD b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-163387_range2_jetPD deleted file mode 100644 index 42becdd827d55..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-163387_range2_jetPD +++ /dev/null @@ -1,129 +0,0 @@ -{"160404": [[15, 24]], - "160405": [[14, 15], [27, 35]], - "160406": [[30, 34], [92, 93], [116, 124]], - "160410": [[86, 102]], - "160413": [[43, 44], [84, 95], [137, 140], [179, 184], [228, 231], [272, 276], [323, 325], [379, 382], [436, 437], [491, 495], [549, 553], [611, 613], [665, 667], [729, 730]], - "160431": [[220, 244]], - "160432": [[64, 79]], - "160433": [[13, 21]], - "160442": [[142, 153]], - "160443": [[16, 21]], - "160444": [[11, 11], [69, 74]], - "160445": [[28, 37]], - "160446": [[46, 55]], - "160447": [[50, 65]], - "160449": [[32, 34], [36, 44]], - "160450": [[24, 47]], - "160454": [[33, 41]], - "160455": [[8, 33]], - "160456": [[15, 106]], - "160462": [[24, 30]], - "160463": [[17, 17], [23, 46]], - "160497": [[42, 46], [89, 90], [131, 133], [267, 278], [375, 398]], - "160498": [[44, 70]], - "160577": [[38, 39], [48, 56], [100, 101], [152, 153], [168, 170], [203, 203], [252, 253], [307, 337]], - "160578": [[4, 4], [54, 54], [145, 149], [164, 164], [271, 273], [401, 404], [440, 456]], - "160808": [[9, 19], [76, 80]], - "160815": [[77, 95]], - "160819": [[107, 118]], - "160827": [[37, 55]], - "160835": [[33, 33], [39, 39], [84, 85], [182, 182], [569, 584]], - "160853": [[62, 65]], - "160871": [[209, 236]], - "160872": [[10, 24], [36, 37], [56, 77]], - "160873": [[175, 201]], - "160874": [[52, 96], [114, 132]], - "160875": [[277, 285]], - "160876": [[10, 17]], - "160877": [[79, 83]], - "160888": [[411, 423]], - "160890": [[7, 7], [391, 395]], - "160894": [[203, 220]], - "160898": [[25, 53]], - "160907": [[46, 46], [132, 220]], - "160911": [[290, 301]], - "160913": [[17, 26]], - "160914": [[67, 75]], - "160915": [[360, 382]], - "160935": [[240, 259]], - "160936": [[26, 60]], - "160937": [[193, 209]], - "160938": [[119, 130]], - "160939": [[125, 148]], - "160940": [[80, 90]], - "160942": [[13, 26]], - "160954": [[78, 84]], - "160955": [[202, 202], [208, 228]], - "160956": [[66, 73]], - "160994": [[44, 45]], - "160998": [[253, 288]], - "161008": [[275, 285]], - "161016": [[302, 327]], - "161103": [[102, 111]], - "161106": [[28, 40]], - "161107": [[31, 40]], - "161113": [[26, 45]], - "161116": [[13, 20]], - "161117": [[26, 43]], - "161119": [[59, 68], [109, 114], [142, 144], [174, 178], [211, 350]], - "161156": [[15, 90]], - "161165": [[82, 100]], - "161216": [[42, 53]], - "161217": [[754, 788]], - "161222": [[98, 136]], - "161223": [[376, 409]], - "161233": [[51, 63]], - "161310": [[118, 127]], - "161311": [[680, 704]], - "162739": [[1, 35], [37, 42]], - "162742": [[1, 85], [97, 127]], - "162803": [[60, 148]], - "162808": [[1, 63]], - "162810": [[1, 40]], - "162811": [[1, 347]], - "162826": [[1, 43]], - "162827": [[1, 144]], - "162828": [[1, 85]], - "162909": [[54, 299]], - "162917": [[122, 134]], - "162926": [[1, 714]], - "162929": [[1, 299], [358, 433]], - "163045": [[51, 56]], - "163046": [[1, 247], [311, 313]], - "163069": [[73, 648]], - "163071": [[1, 194]], - "163072": [[1, 44]], - "163078": [[1, 23]], - "163232": [[110, 174]], - "163233": [[1, 302]], - "163234": [[1, 73]], - "163235": [[1, 474]], - "163237": [[1, 220]], - "163252": [[60, 157]], - "163255": [[1, 1067]], - "163261": [[1, 126]], - "163269": [[59, 222]], - "163270": [[1, 928]], - "163286": [[112, 411]], - "163289": [[1, 388]], - "163296": [[59, 603]], - "163297": [[1, 227]], - "163300": [[1, 623]], - "163301": [[1, 198]], - "163302": [[1, 253]], - "163308": [[1, 27]], - "163332": [[43, 812]], - "163333": [[1, 113]], - "163334": [[1, 563]], - "163337": [[1, 476]], - "163338": [[1, 171]], - "163339": [[1, 188]], - "163358": [[39, 63]], - "163369": [[1, 105]], - "163370": [[1, 176]], - "163371": [[1, 375]], - "163372": [[1, 111]], - "163374": [[1, 873]], - "163378": [[1, 615]], - "163385": [[52, 436]], - "163387": [[1, 256], [278, 287]]} diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-163387_range2_jetPD_job18 b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-163387_range2_jetPD_job18 deleted file mode 100644 index 2ce13268fa301..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-163387_range2_jetPD_job18 +++ /dev/null @@ -1 +0,0 @@ -{"163046": [[1, 133], [135, 238]]} diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-163817 b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-163817 deleted file mode 100644 index acb97c153a79c..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-163817 +++ /dev/null @@ -1 +0,0 @@ -{"160404": [[15, 24]], "160405": [[1, 35]], "160406": [[1, 124]], "160410": [[1, 102]], "160413": [[1, 788]], "160431": [[19, 244]], "160432": [[2, 79]], "160433": [[1, 21]], "160442": [[108, 153]], "160443": [[1, 21]], "160444": [[1, 74]], "160445": [[1, 37]], "160446": [[1, 55]], "160447": [[1, 65]], "160449": [[1, 44]], "160450": [[1, 47]], "160454": [[1, 41]], "160455": [[1, 33]], "160456": [[1, 106]], "160462": [[1, 30]], "160463": [[1, 46]], "160497": [[38, 148], [152, 398]], "160498": [[1, 70]], "160499": [[1, 16]], "160577": [[14, 337]], "160578": [[1, 456]], "160579": [[1, 181]], "160808": [[7, 80]], "160815": [[1, 95]], "160819": [[1, 17], [19, 118]], "160827": [[1, 55]], "160835": [[1, 85], [87, 496], [569, 584]], "160853": [[62, 65]], "160871": [[68, 236]], "160872": [[1, 77]], "160873": [[1, 201]], "160874": [[1, 132]], "160875": [[1, 285]], "160876": [[1, 17]], "160877": [[1, 12], [79, 83]], "160888": [[45, 423]], "160890": [[1, 395]], "160894": [[1, 220]], "160898": [[25, 53]], "160907": [[15, 220]], "160911": [[1, 301]], "160913": [[1, 26]], "160914": [[1, 75]], "160915": [[1, 382]], "160916": [[1, 90]], "160935": [[33, 259]], "160936": [[1, 60]], "160937": [[1, 209]], "160938": [[1, 130]], "160939": [[1, 148]], "160940": [[1, 90]], "160942": [[1, 26]], "160943": [[1, 54]], "160954": [[78, 84]], "160955": [[1, 228]], "160956": [[1, 73]], "160957": [[1, 953]], "160994": [[44, 45]], "160998": [[1, 288]], "161008": [[1, 285]], "161016": [[1, 327]], "161020": [[1, 22]], "161103": [[1, 111]], "161106": [[1, 40]], "161107": [[1, 40]], "161113": [[1, 45]], "161116": [[1, 20]], "161117": [[1, 43]], "161119": [[1, 350]], "161156": [[1, 90]], "161165": [[1, 100]], "161176": [[1, 31]], "161216": [[29, 53]], "161217": [[1, 788]], "161222": [[1, 136]], "161223": [[1, 409]], "161224": [[1, 2]], "161233": [[33, 63]], "161310": [[39, 127]], "161311": [[1, 704]], "161312": [[1, 1027]], "162718": [[1, 202]], "162733": [[1, 47]], "162739": [[1, 35], [37, 42]], "162742": [[1, 85], [97, 127]], "162803": [[60, 148]], "162808": [[1, 63]], "162810": [[1, 40]], "162811": [[1, 347]], "162822": [[73, 314]], "162825": [[1, 202]], "162826": [[1, 43]], "162827": [[1, 144]], "162828": [[1, 85]], "162909": [[54, 299]], "162917": [[122, 134]], "162924": [[69, 151]], "162925": [[1, 319]], "162926": [[1, 714]], "162929": [[1, 299], [358, 433]], "163045": [[51, 56]], "163046": [[1, 247], [311, 313]], "163069": [[73, 648]], "163071": [[1, 194]], "163072": [[1, 44]], "163078": [[1, 23]], "163232": [[110, 174]], "163233": [[1, 302]], "163234": [[1, 73]], "163235": [[1, 474]], "163237": [[1, 220]], "163252": [[60, 157]], "163255": [[1, 1067]], "163261": [[1, 126]], "163269": [[59, 222]], "163270": [[1, 928]], "163286": [[112, 411]], "163289": [[1, 388]], "163296": [[59, 603]], "163297": [[1, 227]], "163300": [[1, 623]], "163301": [[1, 198]], "163302": [[1, 253]], "163308": [[1, 27]], "163332": [[43, 812]], "163333": [[1, 113]], "163334": [[1, 563]], "163337": [[1, 476]], "163338": [[1, 171]], "163339": [[1, 188]], "163340": [[1, 488], [554, 563]], "163358": [[39, 63]], "163369": [[1, 105]], "163370": [[1, 176]], "163371": [[1, 375]], "163372": [[1, 111]], "163374": [[1, 873]], "163378": [[1, 615]], "163385": [[52, 436]], "163387": [[1, 256], [278, 287]], "163402": [[37, 801]], "163475": [[30, 306]], "163476": [[1, 235]], "163478": [[1, 83]], "163479": [[1, 187]], "163480": [[1, 199]], "163481": [[1, 90]], "163482": [[1, 58]], "163483": [[1, 57]], "163581": [[40, 45]], "163582": [[1, 66]], "163583": [[1, 233]], "163584": [[1, 85]], "163585": [[1, 42]], "163586": [[1, 103]], "163587": [[1, 85]], "163588": [[1, 455]], "163589": [[1, 167]], "163591": [[1, 96]], "163592": [[1, 116]], "163593": [[1, 25]], "163596": [[1, 29]], "163630": [[76, 185]], "163655": [[15, 47]], "163657": [[1, 153]], "163658": [[1, 18]], "163659": [[1, 718]], "163660": [[1, 85]], "163661": [[1, 27]], "163662": [[1, 176]], "163663": [[1, 251]], "163664": [[1, 189]], "163665": [[1, 176]], "163668": [[1, 213], [255, 308]], "163738": [[34, 311]], "163753": [[1, 137]], "163754": [[1, 79]], "163757": [[1, 47]], "163758": [[1, 600]], "163759": [[1, 526]], "163760": [[1, 363]], "163761": [[1, 229]], "163763": [[1, 93]], "163765": [[1, 321]], "163795": [[10, 54]], "163796": [[1, 182]], "163817": [[50, 980]]} \ No newline at end of file diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-165620 b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-165620 deleted file mode 100644 index d4c0c99dab404..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-165620 +++ /dev/null @@ -1 +0,0 @@ -{"160404": [[15, 24]], "160405": [[1, 35]], "160406": [[1, 124]], "160410": [[1, 102]], "160413": [[1, 788]], "160431": [[19, 244]], "160432": [[2, 79]], "160433": [[1, 21]], "160442": [[108, 153]], "160443": [[1, 21]], "160444": [[1, 74]], "160445": [[1, 37]], "160446": [[1, 55]], "160447": [[1, 65]], "160449": [[1, 44]], "160450": [[1, 47]], "160454": [[1, 41]], "160455": [[1, 33]], "160456": [[1, 106]], "160462": [[1, 30]], "160463": [[1, 46]], "160497": [[38, 148], [152, 398]], "160498": [[1, 70]], "160499": [[1, 16]], "160577": [[14, 337]], "160578": [[1, 456]], "160579": [[1, 181]], "160808": [[7, 80]], "160815": [[1, 95]], "160819": [[1, 17], [19, 118]], "160827": [[1, 55]], "160835": [[1, 85], [87, 496], [569, 584]], "160853": [[62, 65]], "160871": [[68, 236]], "160872": [[1, 77]], "160873": [[1, 201]], "160874": [[1, 132]], "160875": [[1, 285]], "160876": [[1, 17]], "160877": [[1, 12], [79, 83]], "160888": [[45, 423]], "160890": [[1, 395]], "160894": [[1, 220]], "160898": [[25, 53]], "160907": [[15, 220]], "160911": [[1, 301]], "160913": [[1, 26]], "160914": [[1, 75]], "160915": [[1, 382]], "160916": [[1, 90]], "160935": [[33, 259]], "160936": [[1, 60]], "160937": [[1, 209]], "160938": [[1, 130]], "160939": [[1, 148]], "160940": [[1, 90]], "160942": [[1, 26]], "160943": [[1, 54]], "160954": [[78, 84]], "160955": [[1, 228]], "160956": [[1, 73]], "160957": [[1, 953]], "160994": [[44, 45]], "160998": [[1, 288]], "161008": [[1, 285]], "161016": [[1, 327]], "161020": [[1, 22]], "161103": [[1, 111]], "161106": [[1, 40]], "161107": [[1, 40]], "161113": [[1, 45]], "161116": [[1, 20]], "161117": [[1, 43]], "161119": [[1, 350]], "161156": [[1, 90]], "161165": [[1, 100]], "161176": [[1, 31]], "161216": [[29, 53]], "161217": [[1, 788]], "161222": [[1, 136]], "161223": [[1, 409]], "161224": [[1, 2]], "161233": [[33, 63]], "161310": [[39, 127]], "161311": [[1, 704]], "161312": [[1, 1027]], "162718": [[1, 202]], "162733": [[1, 47]], "162739": [[1, 35], [37, 42]], "162742": [[1, 85], [97, 127]], "162760": [[1, 56]], "162762": [[1, 111]], "162765": [[1, 66]], "162803": [[60, 148]], "162808": [[1, 63]], "162810": [[1, 40]], "162811": [[1, 347]], "162822": [[73, 314]], "162825": [[1, 202]], "162826": [[1, 43]], "162827": [[1, 144]], "162828": [[1, 85]], "162909": [[54, 299]], "162917": [[122, 134]], "162924": [[69, 151]], "162925": [[1, 319]], "162926": [[1, 714]], "162929": [[1, 299], [358, 433]], "163045": [[51, 56]], "163046": [[1, 247], [311, 313]], "163069": [[73, 648]], "163071": [[1, 194]], "163072": [[1, 44]], "163078": [[1, 23]], "163232": [[110, 174]], "163233": [[1, 302]], "163234": [[1, 73]], "163235": [[1, 474]], "163237": [[1, 220]], "163238": [[1, 15]], "163252": [[60, 157]], "163255": [[1, 1067]], "163261": [[1, 126]], "163269": [[59, 222]], "163270": [[1, 928]], "163286": [[112, 411]], "163289": [[1, 388]], "163296": [[59, 603]], "163297": [[1, 227]], "163300": [[1, 623]], "163301": [[1, 198]], "163302": [[1, 253]], "163308": [[1, 27]], "163332": [[43, 812]], "163333": [[1, 113]], "163334": [[1, 563]], "163337": [[1, 476]], "163338": [[1, 171]], "163339": [[1, 188]], "163340": [[1, 488], [554, 563]], "163358": [[39, 63]], "163369": [[1, 105]], "163370": [[1, 176]], "163371": [[1, 375]], "163372": [[1, 111]], "163374": [[1, 873]], "163375": [[1, 16]], "163376": [[1, 253]], "163378": [[1, 615]], "163385": [[52, 436]], "163387": [[1, 256], [278, 287]], "163402": [[37, 801]], "163475": [[30, 306]], "163476": [[1, 235]], "163478": [[1, 83]], "163479": [[1, 187]], "163480": [[1, 199]], "163481": [[1, 90]], "163482": [[1, 58]], "163483": [[1, 57]], "163581": [[40, 45]], "163582": [[1, 66]], "163583": [[1, 233]], "163584": [[1, 85]], "163585": [[1, 42]], "163586": [[1, 103]], "163587": [[1, 85]], "163588": [[1, 455]], "163589": [[1, 167]], "163591": [[1, 96]], "163592": [[1, 116]], "163593": [[1, 25]], "163596": [[1, 29]], "163630": [[76, 185]], "163655": [[15, 47]], "163657": [[1, 153]], "163658": [[1, 18]], "163659": [[1, 718]], "163660": [[1, 85]], "163661": [[1, 27]], "163662": [[1, 176]], "163663": [[1, 251]], "163664": [[1, 189]], "163665": [[1, 176]], "163668": [[1, 213], [255, 308]], "163738": [[34, 311]], "163753": [[1, 137]], "163754": [[1, 79]], "163757": [[1, 47]], "163758": [[1, 600]], "163759": [[1, 526]], "163760": [[1, 363]], "163761": [[1, 229]], "163763": [[1, 93]], "163765": [[1, 321]], "163795": [[10, 54]], "163796": [[1, 182]], "163817": [[50, 980]], "163869": [[79, 137]], "165088": [[107, 266]], "165098": [[124, 440]], "165099": [[1, 126]], "165102": [[1, 185]], "165103": [[1, 440]], "165120": [[67, 109]], "165121": [[1, 466]], "165205": [[80, 260]], "165208": [[1, 101]], "165364": [[45, 1301], [1331, 1352]], "165400": [[1, 88]], "165402": [[1, 28]], "165415": [[58, 1383]], "165467": [[39, 736]], "165472": [[1, 882]], "165486": [[37, 118]], "165487": [[1, 154]], "165506": [[54, 171]], "165514": [[72, 570]], "165523": [[60, 92]], "165525": [[1, 68]], "165537": [[1, 304]], "165542": [[1, 189]], "165548": [[1, 630]], "165558": [[1, 62]], "165567": [[54, 637]], "165570": [[1, 947]], "165617": [[26, 291]], "165620": [[1, 63]]} \ No newline at end of file diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-166701 b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-166701 deleted file mode 100644 index a7f7a7bedf30b..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-166701 +++ /dev/null @@ -1 +0,0 @@ -{"160404": [[15, 24]], "160405": [[1, 35]], "160406": [[1, 124]], "160410": [[1, 102]], "160413": [[1, 788]], "160431": [[19, 244]], "160432": [[2, 79]], "160433": [[1, 21]], "160442": [[108, 153]], "160443": [[1, 21]], "160444": [[1, 74]], "160445": [[1, 37]], "160446": [[1, 55]], "160447": [[1, 65]], "160449": [[1, 44]], "160450": [[1, 47]], "160454": [[1, 41]], "160455": [[1, 33]], "160456": [[1, 106]], "160462": [[1, 30]], "160463": [[1, 46]], "160497": [[38, 148], [152, 398]], "160498": [[1, 70]], "160499": [[1, 16]], "160577": [[14, 337]], "160578": [[1, 456]], "160579": [[1, 181]], "160808": [[7, 80]], "160815": [[1, 95]], "160819": [[1, 17], [19, 118]], "160827": [[1, 55]], "160835": [[1, 85], [87, 496], [569, 584]], "160853": [[62, 65]], "160871": [[68, 236]], "160872": [[1, 77]], "160873": [[1, 201]], "160874": [[1, 132]], "160875": [[1, 285]], "160876": [[1, 17]], "160877": [[1, 12], [79, 83]], "160888": [[45, 423]], "160890": [[1, 395]], "160894": [[1, 220]], "160898": [[25, 53]], "160907": [[15, 220]], "160911": [[1, 301]], "160913": [[1, 26]], "160914": [[1, 75]], "160915": [[1, 382]], "160916": [[1, 90]], "160935": [[33, 259]], "160936": [[1, 60]], "160937": [[1, 209]], "160938": [[1, 130]], "160939": [[1, 148]], "160940": [[1, 90]], "160942": [[1, 26]], "160943": [[1, 54]], "160954": [[78, 84]], "160955": [[1, 228]], "160956": [[1, 73]], "160957": [[1, 953]], "160994": [[44, 45]], "160998": [[1, 288]], "161008": [[1, 285]], "161016": [[1, 327]], "161020": [[1, 22]], "161103": [[1, 111]], "161106": [[1, 40]], "161107": [[1, 40]], "161113": [[1, 45]], "161116": [[1, 20]], "161117": [[1, 43]], "161119": [[1, 350]], "161156": [[1, 90]], "161165": [[1, 100]], "161176": [[1, 31]], "161216": [[29, 53]], "161217": [[1, 788]], "161222": [[1, 136]], "161223": [[1, 409]], "161224": [[1, 2]], "161233": [[33, 63]], "161310": [[39, 127]], "161311": [[1, 704]], "161312": [[1, 1027]], "162718": [[1, 202]], "162733": [[1, 47]], "162739": [[1, 35], [37, 42]], "162742": [[1, 85], [97, 127]], "162760": [[1, 56]], "162762": [[1, 111]], "162765": [[1, 66]], "162803": [[60, 148]], "162808": [[1, 63]], "162810": [[1, 40]], "162811": [[1, 347]], "162822": [[73, 314]], "162825": [[1, 202]], "162826": [[1, 43]], "162827": [[1, 144]], "162828": [[1, 85]], "162909": [[54, 299]], "162917": [[122, 134]], "162924": [[69, 151]], "162925": [[1, 319]], "162926": [[1, 714]], "162929": [[1, 299], [358, 433]], "163045": [[51, 56]], "163046": [[1, 247], [311, 313]], "163069": [[73, 648]], "163071": [[1, 194]], "163072": [[1, 44]], "163078": [[1, 23]], "163232": [[110, 174]], "163233": [[1, 302]], "163234": [[1, 73]], "163235": [[1, 474]], "163237": [[1, 220]], "163238": [[1, 15]], "163252": [[60, 157]], "163255": [[1, 1067]], "163261": [[1, 126]], "163269": [[59, 222]], "163270": [[1, 928]], "163286": [[112, 411]], "163289": [[1, 388]], "163296": [[59, 603]], "163297": [[1, 227]], "163300": [[1, 623]], "163301": [[1, 198]], "163302": [[1, 253]], "163308": [[1, 27]], "163332": [[43, 812]], "163333": [[1, 113]], "163334": [[1, 563]], "163337": [[1, 476]], "163338": [[1, 171]], "163339": [[1, 188]], "163340": [[1, 488], [554, 563]], "163358": [[39, 63]], "163369": [[1, 105]], "163370": [[1, 176]], "163371": [[1, 375]], "163372": [[1, 111]], "163374": [[1, 873]], "163375": [[1, 16]], "163376": [[1, 253]], "163378": [[1, 615]], "163385": [[52, 436]], "163387": [[1, 256], [278, 287]], "163402": [[37, 801]], "163475": [[30, 306]], "163476": [[1, 235]], "163478": [[1, 83]], "163479": [[1, 187]], "163480": [[1, 199]], "163481": [[1, 90]], "163482": [[1, 58]], "163483": [[1, 57]], "163581": [[40, 45]], "163582": [[1, 66]], "163583": [[1, 233]], "163584": [[1, 85]], "163585": [[1, 42]], "163586": [[1, 103]], "163587": [[1, 85]], "163588": [[1, 455]], "163589": [[1, 167]], "163591": [[1, 96]], "163592": [[1, 116]], "163593": [[1, 25]], "163596": [[1, 29]], "163630": [[76, 185]], "163655": [[15, 47]], "163657": [[1, 153]], "163658": [[1, 18]], "163659": [[1, 718]], "163660": [[1, 85]], "163661": [[1, 27]], "163662": [[1, 176]], "163663": [[1, 251]], "163664": [[1, 189]], "163665": [[1, 176]], "163668": [[1, 213], [255, 308]], "163738": [[34, 311]], "163753": [[1, 137]], "163754": [[1, 79]], "163757": [[1, 47]], "163758": [[1, 600]], "163759": [[1, 526]], "163760": [[1, 363]], "163761": [[1, 229]], "163763": [[1, 93]], "163765": [[1, 321]], "163795": [[10, 54]], "163796": [[1, 182]], "163817": [[50, 980]], "163869": [[79, 137]], "165088": [[107, 266]], "165098": [[124, 440]], "165099": [[1, 126]], "165102": [[1, 185]], "165103": [[1, 440]], "165120": [[67, 109]], "165121": [[1, 466]], "165205": [[80, 260]], "165208": [[1, 101]], "165364": [[45, 1301], [1331, 1352]], "165400": [[1, 88]], "165402": [[1, 28]], "165415": [[58, 1383]], "165467": [[39, 736]], "165472": [[1, 882]], "165486": [[37, 118]], "165487": [[1, 154]], "165506": [[54, 171]], "165514": [[72, 570]], "165523": [[60, 92]], "165525": [[1, 68]], "165537": [[1, 304]], "165542": [[1, 189]], "165548": [[1, 630]], "165558": [[1, 62]], "165567": [[54, 637]], "165570": [[1, 947]], "165617": [[26, 291]], "165619": [[1, 23]], "165620": [[1, 63]], "165633": [[56, 505]], "165970": [[67, 335]], "165993": [[71, 1697]], "166010": [[50, 180]], "166011": [[1, 83]], "166033": [[35, 1244]], "166034": [[1, 363]], "166049": [[53, 918]], "166051": [[1, 365]], "166052": [[1, 119]], "166149": [[1, 24]], "166150": [[1, 116]], "166161": [[37, 128]], "166163": [[1, 35]], "166164": [[1, 40]], "166346": [[48, 215]], "166374": [[46, 193]], "166377": [[1, 57]], "166379": [[1, 118]], "166380": [[1, 1809]], "166394": [[42, 47]], "166408": [[67, 1236]], "166429": [[33, 89]], "166462": [[78, 526]], "166486": [[54, 174]], "166502": [[43, 109]], "166512": [[42, 1876]], "166514": [[1, 465]], "166530": [[43, 63]], "166554": [[46, 738]], "166563": [[1, 276], [492, 748]], "166699": [[55, 915]], "166701": [[1, 792]]} \ No newline at end of file diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167284 b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167284 deleted file mode 100644 index 6fdf48bf3f5a0..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167284 +++ /dev/null @@ -1 +0,0 @@ -{"160404": [[15, 24]], "160405": [[1, 35]], "160406": [[1, 124]], "160410": [[1, 102]], "160413": [[1, 788]], "160431": [[19, 244]], "160432": [[2, 79]], "160433": [[1, 21]], "160442": [[108, 153]], "160443": [[1, 21]], "160444": [[1, 74]], "160445": [[1, 37]], "160446": [[1, 55]], "160447": [[1, 65]], "160449": [[1, 44]], "160450": [[1, 47]], "160454": [[1, 41]], "160455": [[1, 33]], "160456": [[1, 106]], "160462": [[1, 30]], "160463": [[1, 46]], "160497": [[38, 148], [152, 398]], "160498": [[1, 70]], "160499": [[1, 16]], "160577": [[14, 337]], "160578": [[1, 456]], "160579": [[1, 181]], "160808": [[7, 80]], "160815": [[1, 95]], "160819": [[1, 17], [19, 118]], "160827": [[1, 55]], "160835": [[1, 85], [87, 496], [569, 584]], "160853": [[62, 65]], "160871": [[68, 236]], "160872": [[1, 77]], "160873": [[1, 201]], "160874": [[1, 132]], "160875": [[1, 285]], "160876": [[1, 17]], "160877": [[1, 12], [79, 83]], "160888": [[45, 423]], "160890": [[1, 395]], "160894": [[1, 220]], "160898": [[25, 53]], "160907": [[15, 220]], "160911": [[1, 301]], "160913": [[1, 26]], "160914": [[1, 75]], "160915": [[1, 382]], "160916": [[1, 90]], "160935": [[33, 259]], "160936": [[1, 60]], "160937": [[1, 209]], "160938": [[1, 130]], "160939": [[1, 148]], "160940": [[1, 90]], "160942": [[1, 26]], "160943": [[1, 54]], "160954": [[78, 84]], "160955": [[1, 228]], "160956": [[1, 73]], "160957": [[1, 953]], "160994": [[44, 45]], "160998": [[1, 288]], "161008": [[1, 285]], "161016": [[1, 327]], "161020": [[1, 22]], "161103": [[1, 111]], "161106": [[1, 40]], "161107": [[1, 40]], "161113": [[1, 45]], "161116": [[1, 20]], "161117": [[1, 43]], "161119": [[1, 350]], "161156": [[1, 90]], "161165": [[1, 100]], "161176": [[1, 31]], "161216": [[29, 53]], "161217": [[1, 788]], "161222": [[1, 136]], "161223": [[1, 409]], "161224": [[1, 2]], "161233": [[33, 63]], "161310": [[39, 127]], "161311": [[1, 704]], "161312": [[1, 1027]], "162718": [[1, 202]], "162733": [[1, 47]], "162739": [[1, 35], [37, 42]], "162742": [[1, 85], [97, 127]], "162760": [[1, 56]], "162762": [[1, 111]], "162765": [[1, 66]], "162803": [[60, 148]], "162808": [[1, 63]], "162810": [[1, 40]], "162811": [[1, 347]], "162822": [[73, 314]], "162825": [[1, 202]], "162826": [[1, 43]], "162827": [[1, 144]], "162828": [[1, 85]], "162909": [[54, 299]], "162917": [[122, 134]], "162924": [[69, 151]], "162925": [[1, 319]], "162926": [[1, 714]], "162929": [[1, 299], [358, 433]], "163045": [[51, 56]], "163046": [[1, 247], [311, 313]], "163069": [[73, 648]], "163071": [[1, 194]], "163072": [[1, 44]], "163078": [[1, 23]], "163232": [[110, 174]], "163233": [[1, 302]], "163234": [[1, 73]], "163235": [[1, 474]], "163237": [[1, 220]], "163238": [[1, 15]], "163252": [[60, 157]], "163255": [[1, 1067]], "163261": [[1, 126]], "163269": [[59, 222]], "163270": [[1, 928]], "163286": [[112, 411]], "163289": [[1, 388]], "163296": [[59, 603]], "163297": [[1, 227]], "163300": [[1, 623]], "163301": [[1, 198]], "163302": [[1, 253]], "163308": [[1, 27]], "163332": [[43, 812]], "163333": [[1, 113]], "163334": [[1, 563]], "163337": [[1, 476]], "163338": [[1, 171]], "163339": [[1, 188]], "163340": [[1, 488], [554, 563]], "163358": [[39, 63]], "163369": [[1, 105]], "163370": [[1, 176]], "163371": [[1, 375]], "163372": [[1, 111]], "163374": [[1, 873]], "163375": [[1, 16]], "163376": [[1, 253]], "163378": [[1, 615]], "163385": [[52, 436]], "163387": [[1, 256], [278, 287]], "163402": [[37, 801]], "163475": [[30, 306]], "163476": [[1, 235]], "163478": [[1, 83]], "163479": [[1, 187]], "163480": [[1, 199]], "163481": [[1, 90]], "163482": [[1, 58]], "163483": [[1, 57]], "163581": [[40, 45]], "163582": [[1, 66]], "163583": [[1, 233]], "163584": [[1, 85]], "163585": [[1, 42]], "163586": [[1, 103]], "163587": [[1, 85]], "163588": [[1, 455]], "163589": [[1, 167]], "163591": [[1, 96]], "163592": [[1, 116]], "163593": [[1, 25]], "163596": [[1, 29]], "163630": [[76, 185]], "163655": [[15, 47]], "163657": [[1, 153]], "163658": [[1, 18]], "163659": [[1, 718]], "163660": [[1, 85]], "163661": [[1, 27]], "163662": [[1, 176]], "163663": [[1, 251]], "163664": [[1, 189]], "163665": [[1, 176]], "163668": [[1, 213], [255, 308]], "163738": [[34, 311]], "163753": [[1, 137]], "163754": [[1, 79]], "163757": [[1, 47]], "163758": [[1, 600]], "163759": [[1, 526]], "163760": [[1, 363]], "163761": [[1, 229]], "163763": [[1, 93]], "163765": [[1, 321]], "163795": [[10, 54]], "163796": [[1, 182]], "163817": [[50, 980]], "163869": [[79, 137]], "165088": [[107, 266]], "165098": [[124, 440]], "165099": [[1, 126]], "165102": [[1, 185]], "165103": [[1, 440]], "165120": [[67, 109]], "165121": [[1, 466]], "165205": [[80, 260]], "165208": [[1, 101]], "165364": [[45, 1301], [1331, 1352]], "165400": [[1, 88]], "165402": [[1, 28]], "165415": [[58, 1383]], "165467": [[39, 736]], "165472": [[1, 882]], "165486": [[37, 118]], "165487": [[1, 154]], "165506": [[54, 171]], "165514": [[72, 570]], "165523": [[60, 92]], "165525": [[1, 68]], "165537": [[1, 304]], "165542": [[1, 189]], "165548": [[1, 630]], "165558": [[1, 62]], "165567": [[54, 637]], "165570": [[1, 947]], "165617": [[26, 291]], "165619": [[1, 23]], "165620": [[1, 63]], "165633": [[56, 505]], "165970": [[67, 335]], "165993": [[71, 1697]], "166010": [[50, 180]], "166011": [[1, 83]], "166033": [[35, 1244]], "166034": [[1, 363]], "166049": [[53, 918]], "166051": [[1, 365]], "166052": [[1, 119]], "166149": [[1, 24]], "166150": [[1, 116]], "166161": [[37, 128]], "166163": [[1, 35]], "166164": [[1, 40]], "166346": [[48, 215]], "166374": [[46, 193]], "166377": [[1, 57]], "166379": [[1, 118]], "166380": [[1, 1809]], "166394": [[42, 47]], "166408": [[67, 1236]], "166429": [[33, 89]], "166438": [[32, 867]], "166462": [[78, 526]], "166486": [[54, 174]], "166502": [[43, 109]], "166512": [[42, 1876]], "166514": [[1, 465]], "166530": [[43, 63]], "166554": [[46, 738]], "166563": [[1, 276], [492, 748]], "166565": [[1, 898]], "166699": [[55, 915]], "166701": [[1, 792]], "166763": [[46, 650]], "166781": [[41, 111], [115, 115], [117, 387]], "166782": [[1, 572]], "166784": [[1, 365]], "166787": [[1, 364]], "166839": [[43, 303]], "166841": [[1, 1017]], "166842": [[1, 170]], "166859": [[62, 425]], "166860": [[1, 25]], "166861": [[1, 44]], "166862": [[1, 5]], "166863": [[1, 3]], "166864": [[1, 537]], "166888": [[56, 476]], "166889": [[1, 231]], "166890": [[1, 446]], "166893": [[1, 3]], "166894": [[1, 203]], "166895": [[1, 603]], "166911": [[58, 104]], "166921": [[39, 68]], "166922": [[1, 776]], "166923": [[1, 470]], "166946": [[41, 208]], "166950": [[1, 1439]], "166960": [[1, 184]], "166966": [[1, 240]], "166967": [[1, 220]], "167039": [[20, 238]], "167041": [[1, 667]], "167043": [[1, 235]], "167078": [[40, 175]], "167098": [[62, 463]], "167102": [[1, 430]], "167103": [[1, 95]], "167151": [[1, 51]], "167281": [[18, 595]], "167282": [[1, 451]], "167284": [[1, 1645]]} \ No newline at end of file diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167284_promptreco-v4-range2 b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167284_promptreco-v4-range2 deleted file mode 100644 index 49f14a45ec003..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167284_promptreco-v4-range2 +++ /dev/null @@ -1,281 +0,0 @@ -{"160404": [[15, 24]], - "160405": [[1, 35]], - "160406": [[1, 124]], - "160410": [[1, 102]], - "160413": [[1, 788]], - "160431": [[19, 244]], - "160432": [[2, 79]], - "160433": [[1, 21]], - "160442": [[108, 153]], - "160443": [[1, 21]], - "160444": [[1, 74]], - "160445": [[1, 37]], - "160446": [[1, 55]], - "160447": [[1, 65]], - "160449": [[1, 44]], - "160450": [[1, 47]], - "160454": [[1, 41]], - "160455": [[1, 33]], - "160456": [[1, 106]], - "160462": [[1, 30]], - "160463": [[1, 46]], - "160497": [[38, 148], [152, 398]], - "160498": [[1, 70]], - "160499": [[1, 16]], - "160577": [[14, 337]], - "160578": [[1, 456]], - "160579": [[1, 181]], - "160808": [[7, 80]], - "160815": [[1, 95]], - "160819": [[1, 17], [19, 118]], - "160827": [[1, 55]], - "160835": [[1, 85], [87, 496], [569, 584]], - "160853": [[62, 65]], - "160871": [[68, 236]], - "160872": [[1, 77]], - "160873": [[1, 201]], - "160874": [[1, 132]], - "160875": [[1, 285]], - "160876": [[1, 17]], - "160877": [[1, 12], [79, 83]], - "160888": [[45, 423]], - "160890": [[1, 395]], - "160894": [[1, 220]], - "160898": [[25, 53]], - "160907": [[15, 220]], - "160911": [[1, 301]], - "160913": [[1, 26]], - "160914": [[1, 75]], - "160915": [[1, 382]], - "160916": [[1, 90]], - "160935": [[33, 259]], - "160936": [[1, 60]], - "160937": [[1, 209]], - "160938": [[1, 130]], - "160939": [[1, 148]], - "160940": [[1, 90]], - "160942": [[1, 26]], - "160943": [[1, 54]], - "160954": [[78, 84]], - "160955": [[1, 228]], - "160956": [[1, 73]], - "160957": [[1, 953]], - "160994": [[44, 45]], - "160998": [[1, 288]], - "161008": [[1, 285]], - "161016": [[1, 327]], - "161020": [[1, 22]], - "161103": [[1, 111]], - "161106": [[1, 40]], - "161107": [[1, 40]], - "161113": [[1, 45]], - "161116": [[1, 20]], - "161117": [[1, 43]], - "161119": [[1, 350]], - "161156": [[1, 90]], - "161165": [[1, 100]], - "161176": [[1, 31]], - "161216": [[29, 53]], - "161217": [[1, 788]], - "161222": [[1, 136]], - "161223": [[1, 409]], - "161224": [[1, 2]], - "161233": [[33, 63]], - "161310": [[39, 127]], - "161311": [[1, 704]], - "161312": [[1, 1027]], - "162718": [[1, 202]], - "162733": [[1, 47]], - "162739": [[1, 35], [37, 42]], - "162742": [[1, 85], [97, 127]], - "162760": [[1, 56]], - "162762": [[1, 111]], - "162765": [[1, 66]], - "162803": [[60, 148]], - "162808": [[1, 63]], - "162810": [[1, 40]], - "162811": [[1, 347]], - "162822": [[73, 314]], - "162825": [[1, 202]], - "162826": [[1, 43]], - "162827": [[1, 144]], - "162828": [[1, 85]], - "162909": [[54, 299]], - "162917": [[122, 134]], - "162924": [[69, 151]], - "162925": [[1, 319]], - "162926": [[1, 714]], - "162929": [[1, 299], [358, 433]], - "163045": [[51, 56]], - "163046": [[1, 247], [311, 313]], - "163069": [[73, 648]], - "163071": [[1, 194]], - "163072": [[1, 44]], - "163078": [[1, 23]], - "163232": [[110, 174]], - "163233": [[1, 302]], - "163234": [[1, 73]], - "163235": [[1, 474]], - "163237": [[1, 220]], - "163238": [[1, 15]], - "163252": [[60, 157]], - "163255": [[1, 1067]], - "163261": [[1, 126]], - "163269": [[59, 222]], - "163270": [[1, 928]], - "163286": [[112, 411]], - "163289": [[1, 388]], - "163296": [[59, 603]], - "163297": [[1, 227]], - "163300": [[1, 623]], - "163301": [[1, 198]], - "163302": [[1, 253]], - "163308": [[1, 27]], - "163332": [[43, 812]], - "163333": [[1, 113]], - "163334": [[1, 563]], - "163337": [[1, 476]], - "163338": [[1, 171]], - "163339": [[1, 188]], - "163340": [[1, 488], [554, 563]], - "163358": [[39, 63]], - "163369": [[1, 105]], - "163370": [[1, 176]], - "163371": [[1, 375]], - "163372": [[1, 111]], - "163374": [[1, 873]], - "163375": [[1, 16]], - "163376": [[1, 253]], - "163378": [[1, 615]], - "163385": [[52, 436]], - "163387": [[1, 256], [278, 287]], - "163402": [[37, 801]], - "163475": [[30, 306]], - "163476": [[1, 235]], - "163478": [[1, 83]], - "163479": [[1, 187]], - "163480": [[1, 199]], - "163481": [[1, 90]], - "163482": [[1, 58]], - "163483": [[1, 57]], - "163581": [[40, 45]], - "163582": [[1, 66]], - "163583": [[1, 233]], - "163584": [[1, 85]], - "163585": [[1, 42]], - "163586": [[1, 103]], - "163587": [[1, 85]], - "163588": [[1, 455]], - "163589": [[1, 167]], - "163591": [[1, 96]], - "163592": [[1, 116]], - "163593": [[1, 25]], - "163596": [[1, 29]], - "163630": [[76, 185]], - "163655": [[15, 47]], - "163657": [[1, 153]], - "163658": [[1, 18]], - "163659": [[1, 718]], - "163660": [[1, 85]], - "163661": [[1, 27]], - "163662": [[1, 176]], - "163663": [[1, 251]], - "163664": [[1, 189]], - "163665": [[1, 176]], - "163668": [[1, 213], [255, 308]], - "163738": [[34, 311]], - "163753": [[1, 137]], - "163754": [[1, 79]], - "163757": [[1, 47]], - "163758": [[1, 600]], - "163759": [[1, 526]], - "163760": [[1, 363]], - "163761": [[1, 229]], - "163763": [[1, 93]], - "163765": [[1, 321]], - "163795": [[10, 54]], - "163796": [[1, 182]], - "163817": [[50, 980]], - "163869": [[79, 137]], - "165098": [[188, 189], [194, 194], [249, 249], [255, 255], [332, 332], [368, 368], [416, 440]], - "165099": [[107, 126]], - "165120": [[99, 109]], - "165205": [[249, 260]], - "165364": [[112, 113], [808, 808], [1331, 1352]], - "165400": [[80, 88]], - "165415": [[641, 642], [708, 711], [778, 779]], - "165467": [[710, 736]], - "165472": [[185, 185]], - "165486": [[103, 118]], - "165487": [[152, 154]], - "165506": [[171, 171]], - "165514": [[568, 570]], - "165523": [[60, 92]], - "165525": [[33, 68]], - "165537": [[297, 304]], - "165542": [[176, 189]], - "165548": [[364, 364], [590, 630]], - "165567": [[110, 113], [310, 314], [632, 637]], - "165570": [[3, 4], [84, 87], [947, 947]], - "165617": [[53, 53], [144, 144], [289, 291]], - "165619": [[1, 23]], - "165620": [[1, 63]], - "165633": [[56, 113], [318, 318]], - "166010": [[174, 175], [179, 180]], - "166033": [[1234, 1244]], - "166034": [[363, 363]], - "166049": [[886, 887], [918, 918]], - "166149": [[3, 24]], - "166161": [[121, 121], [124, 125], [127, 128]], - "166163": [[13, 13], [35, 35]], - "166374": [[65, 65], [189, 193]], - "166377": [[57, 57]], - "166380": [[712, 714]], - "166438": [[32, 867]], - "166486": [[96, 96]], - "166512": [[431, 431], [1280, 1280], [1819, 1820], [1863, 1867], [1869, 1869], [1872, 1872], [1875, 1876]], - "166514": [[465, 465]], - "166554": [[288, 289], [318, 319], [731, 731], [735, 735], [737, 738]], - "166565": [[1, 898]], - "166699": [[55, 915]], - "166701": [[1, 792]], - "166763": [[46, 650]], - "166781": [[41, 111], [115, 115], [117, 387]], - "166782": [[1, 572]], - "166784": [[1, 365]], - "166787": [[1, 364]], - "166839": [[43, 303]], - "166841": [[1, 1017]], - "166842": [[1, 170]], - "166859": [[62, 425]], - "166860": [[1, 25]], - "166861": [[1, 44]], - "166862": [[1, 5]], - "166863": [[1, 3]], - "166864": [[1, 537]], - "166888": [[56, 476]], - "166889": [[1, 231]], - "166890": [[1, 446]], - "166893": [[1, 3]], - "166894": [[1, 203]], - "166895": [[1, 603]], - "166911": [[58, 104]], - "166921": [[39, 68]], - "166922": [[1, 776]], - "166923": [[1, 470]], - "166946": [[41, 208]], - "166950": [[1, 1439]], - "166960": [[1, 184]], - "166966": [[1, 240]], - "166967": [[1, 220]], - "167039": [[20, 238]], - "167041": [[1, 667]], - "167043": [[1, 235]], - "167078": [[40, 175]], - "167098": [[62, 463]], - "167102": [[1, 430]], - "167103": [[1, 95]], - "167151": [[1, 51]], - "167281": [[18, 595]], - "167282": [[1, 451]], - "167284": [[1, 1645]]} diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167284_promptreco-v4-range2-brokenjobs_1_3 b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167284_promptreco-v4-range2-brokenjobs_1_3 deleted file mode 100644 index d9d81def714ff..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167284_promptreco-v4-range2-brokenjobs_1_3 +++ /dev/null @@ -1,4 +0,0 @@ -{"165619": [[1, 19],[22,22]], - "165620": [[1, 1],[3, 5]], - "165633": [[56,113]] -} diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167746 b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167746 deleted file mode 100644 index 3b952a3ae9d87..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167746 +++ /dev/null @@ -1 +0,0 @@ -{"160404": [[15, 24]], "160405": [[1, 35]], "160406": [[1, 124]], "160410": [[1, 102]], "160413": [[1, 788]], "160431": [[19, 244]], "160432": [[2, 79]], "160433": [[1, 21]], "160442": [[108, 153]], "160443": [[1, 21]], "160444": [[1, 74]], "160445": [[1, 37]], "160446": [[1, 55]], "160447": [[1, 65]], "160449": [[1, 44]], "160450": [[1, 47]], "160454": [[1, 41]], "160455": [[1, 33]], "160456": [[1, 106]], "160462": [[1, 30]], "160463": [[1, 46]], "160497": [[38, 148], [152, 398]], "160498": [[1, 70]], "160499": [[1, 16]], "160577": [[14, 337]], "160578": [[1, 456]], "160579": [[1, 181]], "160808": [[7, 80]], "160815": [[1, 95]], "160819": [[1, 17], [19, 118]], "160827": [[1, 55]], "160835": [[1, 85], [87, 496], [569, 584]], "160853": [[62, 65]], "160871": [[68, 236]], "160872": [[1, 77]], "160873": [[1, 201]], "160874": [[1, 132]], "160875": [[1, 285]], "160876": [[1, 17]], "160877": [[1, 12], [79, 83]], "160888": [[45, 423]], "160890": [[1, 395]], "160894": [[1, 220]], "160898": [[25, 53]], "160907": [[15, 220]], "160911": [[1, 301]], "160913": [[1, 26]], "160914": [[1, 75]], "160915": [[1, 382]], "160916": [[1, 90]], "160935": [[33, 259]], "160936": [[1, 60]], "160937": [[1, 209]], "160938": [[1, 130]], "160939": [[1, 148]], "160940": [[1, 90]], "160942": [[1, 26]], "160943": [[1, 54]], "160954": [[78, 84]], "160955": [[1, 228]], "160956": [[1, 73]], "160957": [[1, 953]], "160994": [[44, 45]], "160998": [[1, 288]], "161008": [[1, 285]], "161016": [[1, 327]], "161020": [[1, 22]], "161103": [[1, 111]], "161106": [[1, 40]], "161107": [[1, 40]], "161113": [[1, 45]], "161116": [[1, 20]], "161117": [[1, 43]], "161119": [[1, 350]], "161156": [[1, 90]], "161165": [[1, 100]], "161176": [[1, 31]], "161216": [[29, 53]], "161217": [[1, 788]], "161222": [[1, 136]], "161223": [[1, 409]], "161224": [[1, 2]], "161233": [[33, 63]], "161310": [[39, 127]], "161311": [[1, 704]], "161312": [[1, 1027]], "162718": [[1, 202]], "162733": [[1, 47]], "162739": [[1, 35], [37, 42]], "162742": [[1, 85], [97, 127]], "162760": [[1, 56]], "162762": [[1, 111]], "162765": [[1, 66]], "162803": [[60, 148]], "162808": [[1, 63]], "162810": [[1, 40]], "162811": [[1, 347]], "162822": [[73, 314]], "162825": [[1, 202]], "162826": [[1, 43]], "162827": [[1, 144]], "162828": [[1, 85]], "162909": [[54, 299]], "162917": [[122, 134]], "162924": [[69, 151]], "162925": [[1, 319]], "162926": [[1, 714]], "162929": [[1, 299], [358, 433]], "163045": [[51, 56]], "163046": [[1, 247], [311, 313]], "163069": [[73, 648]], "163071": [[1, 194]], "163072": [[1, 44]], "163078": [[1, 23]], "163232": [[110, 174]], "163233": [[1, 302]], "163234": [[1, 73]], "163235": [[1, 474]], "163237": [[1, 220]], "163238": [[1, 15]], "163252": [[60, 157]], "163255": [[1, 1067]], "163261": [[1, 126]], "163269": [[59, 222]], "163270": [[1, 928]], "163286": [[112, 411]], "163289": [[1, 388]], "163296": [[59, 603]], "163297": [[1, 227]], "163300": [[1, 623]], "163301": [[1, 198]], "163302": [[1, 253]], "163308": [[1, 27]], "163332": [[43, 812]], "163333": [[1, 113]], "163334": [[1, 563]], "163337": [[1, 476]], "163338": [[1, 171]], "163339": [[1, 188]], "163340": [[1, 488], [554, 563]], "163358": [[39, 63]], "163369": [[1, 105]], "163370": [[1, 176]], "163371": [[1, 375]], "163372": [[1, 111]], "163374": [[1, 873]], "163375": [[1, 16]], "163376": [[1, 253]], "163378": [[1, 615]], "163385": [[52, 436]], "163387": [[1, 256], [278, 287]], "163402": [[37, 801]], "163475": [[30, 306]], "163476": [[1, 235]], "163478": [[1, 83]], "163479": [[1, 187]], "163480": [[1, 199]], "163481": [[1, 90]], "163482": [[1, 58]], "163483": [[1, 57]], "163581": [[40, 45]], "163582": [[1, 66]], "163583": [[1, 233]], "163584": [[1, 85]], "163585": [[1, 42]], "163586": [[1, 103]], "163587": [[1, 85]], "163588": [[1, 455]], "163589": [[1, 167]], "163591": [[1, 96]], "163592": [[1, 116]], "163593": [[1, 25]], "163596": [[1, 29]], "163630": [[76, 185]], "163655": [[15, 47]], "163657": [[1, 153]], "163658": [[1, 18]], "163659": [[1, 718]], "163660": [[1, 85]], "163661": [[1, 27]], "163662": [[1, 176]], "163663": [[1, 251]], "163664": [[1, 189]], "163665": [[1, 176]], "163668": [[1, 213], [255, 308]], "163738": [[34, 311]], "163753": [[1, 137]], "163754": [[1, 79]], "163757": [[1, 47]], "163758": [[1, 600]], "163759": [[1, 526]], "163760": [[1, 363]], "163761": [[1, 229]], "163763": [[1, 93]], "163765": [[1, 321]], "163795": [[10, 54]], "163796": [[1, 182]], "163817": [[50, 980]], "163869": [[79, 137]], "165088": [[107, 266]], "165098": [[124, 440]], "165099": [[1, 126]], "165102": [[1, 185]], "165103": [[1, 440]], "165120": [[67, 109]], "165121": [[1, 466]], "165205": [[80, 260]], "165208": [[1, 101]], "165364": [[45, 1301], [1331, 1352]], "165400": [[1, 88]], "165402": [[1, 28]], "165415": [[58, 1383]], "165467": [[39, 736]], "165472": [[1, 882]], "165486": [[37, 118]], "165487": [[1, 154]], "165506": [[54, 171]], "165514": [[72, 570]], "165523": [[60, 92]], "165525": [[1, 68]], "165537": [[1, 304]], "165542": [[1, 189]], "165548": [[1, 630]], "165558": [[1, 62]], "165567": [[54, 637]], "165570": [[1, 947]], "165617": [[26, 291]], "165619": [[1, 23]], "165620": [[1, 63]], "165633": [[56, 505]], "165970": [[67, 335]], "165993": [[71, 1697]], "166010": [[50, 180]], "166011": [[1, 83]], "166033": [[35, 1244]], "166034": [[1, 363]], "166049": [[53, 918]], "166051": [[1, 365]], "166052": [[1, 119]], "166149": [[1, 24]], "166150": [[1, 116]], "166161": [[37, 128]], "166163": [[1, 35]], "166164": [[1, 40]], "166346": [[48, 215]], "166374": [[46, 193]], "166377": [[1, 57]], "166379": [[1, 118]], "166380": [[1, 1809]], "166394": [[42, 47]], "166408": [[67, 1236]], "166429": [[33, 89]], "166438": [[32, 867]], "166462": [[78, 526]], "166486": [[54, 174]], "166502": [[43, 109]], "166512": [[42, 1876]], "166514": [[1, 465]], "166530": [[43, 63]], "166554": [[46, 738]], "166563": [[1, 276], [492, 748]], "166565": [[1, 898]], "166699": [[55, 915]], "166701": [[1, 792]], "166763": [[46, 650]], "166781": [[41, 111], [115, 115], [117, 387]], "166782": [[1, 572]], "166784": [[1, 365]], "166787": [[1, 364]], "166839": [[43, 303]], "166841": [[1, 1017]], "166842": [[1, 170]], "166859": [[62, 425]], "166860": [[1, 25]], "166861": [[1, 44]], "166862": [[1, 5]], "166863": [[1, 3]], "166864": [[1, 537]], "166888": [[56, 476]], "166889": [[1, 231]], "166890": [[1, 446]], "166893": [[1, 3]], "166894": [[1, 203]], "166895": [[1, 603]], "166911": [[58, 104]], "166921": [[39, 68]], "166922": [[1, 776]], "166923": [[1, 470]], "166946": [[41, 208]], "166950": [[1, 1439]], "166960": [[1, 184]], "166966": [[1, 240]], "166967": [[1, 220]], "167039": [[20, 238]], "167041": [[1, 667]], "167043": [[1, 235]], "167078": [[40, 175]], "167098": [[62, 463]], "167102": [[1, 430]], "167103": [[1, 95]], "167151": [[1, 51]], "167281": [[18, 595]], "167282": [[1, 451]], "167284": [[1, 1645]], "167551": [[56, 472]], "167673": [[210, 448]], "167674": [[1, 348]], "167675": [[1, 1064]], "167676": [[1, 451]], "167740": [[79, 174]], "167746": [[56, 384]]} \ No newline at end of file diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167746-range3 b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167746-range3 deleted file mode 100644 index fb1a64d774e6c..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167746-range3 +++ /dev/null @@ -1,65 +0,0 @@ -{"165088": [[107, 266]], - "165098": [[124, 187], [190, 193], [195, 248], [250, 254], [256, 331], [333, 367], [369, 415]], - "165099": [[1, 106]], - "165102": [[1, 185]], - "165103": [[1, 440]], - "165120": [[67, 98]], - "165121": [[1, 466]], - "165205": [[80, 248]], - "165208": [[1, 101]], - "165364": [[45, 111], [114, 807], [809, 1301]], - "165400": [[1, 79]], - "165402": [[1, 28]], - "165415": [[58, 640], [643, 707], [712, 777], [780, 1383]], - "165467": [[39, 709]], - "165472": [[1, 184], [186, 882]], - "165486": [[37, 102]], - "165487": [[1, 151]], - "165506": [[54, 170]], - "165514": [[72, 567]], - "165525": [[1, 32]], - "165537": [[1, 296]], - "165542": [[1, 175]], - "165548": [[1, 363], [365, 589]], - "165558": [[1, 62]], - "165567": [[54, 109], [114, 309], [315, 631]], - "165570": [[1, 2], [5, 83], [88, 946]], - "165617": [[26, 52], [54, 143], [145, 288]], - "165633": [[114, 317], [319, 505]], - "165970": [[67, 335]], - "165993": [[71, 1697]], - "166010": [[50, 173], [176, 178]], - "166011": [[1, 83]], - "166033": [[35, 1233]], - "166034": [[1, 362]], - "166049": [[53, 885], [888, 917]], - "166051": [[1, 365]], - "166052": [[1, 119]], - "166149": [[1, 2]], - "166150": [[1, 116]], - "166161": [[37, 120], [122, 123], [126, 126]], - "166163": [[1, 12], [14, 34]], - "166164": [[1, 40]], - "166346": [[48, 215]], - "166374": [[46, 64], [66, 188]], - "166377": [[1, 56]], - "166379": [[1, 118]], - "166380": [[1, 711], [715, 1809]], - "166394": [[42, 47]], - "166408": [[67, 1236]], - "166429": [[33, 89]], - "166462": [[78, 526]], - "166486": [[54, 95], [97, 174]], - "166502": [[43, 109]], - "166512": [[42, 430], [432, 1279], [1281, 1818], [1821, 1862], [1868, 1868], [1870, 1871], [1873, 1874]], - "166514": [[1, 464]], - "166530": [[43, 63]], - "166554": [[46, 287], [290, 317], [320, 730], [732, 734], [736, 736]], - "166563": [[1, 276], [492, 748]], - "167551": [[56, 472]], - "167673": [[210, 448]], - "167674": [[1, 348]], - "167675": [[1, 1064]], - "167676": [[1, 451]], - "167740": [[79, 174]], - "167746": [[56, 384]]} diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167913 b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167913 deleted file mode 100644 index 4676fb3da7c45..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167913 +++ /dev/null @@ -1 +0,0 @@ -{"160404": [[15, 24]], "160405": [[1, 35]], "160406": [[1, 124]], "160410": [[1, 102]], "160413": [[1, 788]], "160431": [[19, 244]], "160432": [[2, 79]], "160433": [[1, 21]], "160442": [[108, 153]], "160443": [[1, 21]], "160444": [[1, 74]], "160445": [[1, 37]], "160446": [[1, 55]], "160447": [[1, 65]], "160449": [[1, 44]], "160450": [[1, 47]], "160454": [[1, 41]], "160455": [[1, 33]], "160456": [[1, 106]], "160462": [[1, 30]], "160463": [[1, 46]], "160497": [[38, 148], [152, 398]], "160498": [[1, 70]], "160499": [[1, 16]], "160577": [[14, 337]], "160578": [[1, 456]], "160579": [[1, 181]], "160808": [[7, 80]], "160815": [[1, 95]], "160819": [[1, 17], [19, 118]], "160827": [[1, 55]], "160835": [[1, 85], [87, 496], [569, 584]], "160853": [[62, 65]], "160871": [[68, 236]], "160872": [[1, 77]], "160873": [[1, 201]], "160874": [[1, 132]], "160875": [[1, 285]], "160876": [[1, 17]], "160877": [[1, 12], [79, 83]], "160888": [[45, 423]], "160890": [[1, 395]], "160894": [[1, 220]], "160898": [[25, 53]], "160907": [[15, 220]], "160911": [[1, 301]], "160913": [[1, 26]], "160914": [[1, 75]], "160915": [[1, 382]], "160916": [[1, 90]], "160935": [[33, 259]], "160936": [[1, 60]], "160937": [[1, 209]], "160938": [[1, 130]], "160939": [[1, 148]], "160940": [[1, 90]], "160942": [[1, 26]], "160943": [[1, 54]], "160954": [[78, 84]], "160955": [[1, 228]], "160956": [[1, 73]], "160957": [[1, 953]], "160994": [[44, 45]], "160998": [[1, 288]], "161008": [[1, 285]], "161016": [[1, 327]], "161020": [[1, 22]], "161103": [[1, 111]], "161106": [[1, 40]], "161107": [[1, 40]], "161113": [[1, 45]], "161116": [[1, 20]], "161117": [[1, 43]], "161119": [[1, 350]], "161156": [[1, 90]], "161165": [[1, 100]], "161176": [[1, 31]], "161216": [[29, 53]], "161217": [[1, 788]], "161222": [[1, 136]], "161223": [[1, 409]], "161224": [[1, 2]], "161233": [[33, 63]], "161310": [[39, 127]], "161311": [[1, 704]], "161312": [[1, 1027]], "162718": [[1, 202]], "162733": [[1, 47]], "162739": [[1, 35], [37, 42]], "162742": [[1, 85], [97, 127]], "162760": [[1, 56]], "162762": [[1, 111]], "162765": [[1, 66]], "162803": [[60, 148]], "162808": [[1, 63]], "162810": [[1, 40]], "162811": [[1, 347]], "162822": [[73, 314]], "162825": [[1, 202]], "162826": [[1, 43]], "162827": [[1, 144]], "162828": [[1, 85]], "162909": [[54, 299]], "162917": [[122, 134]], "162924": [[69, 151]], "162925": [[1, 319]], "162926": [[1, 714]], "162929": [[1, 299], [358, 433]], "163045": [[51, 56]], "163046": [[1, 247], [311, 313]], "163069": [[73, 648]], "163071": [[1, 194]], "163072": [[1, 44]], "163078": [[1, 23]], "163232": [[110, 174]], "163233": [[1, 302]], "163234": [[1, 73]], "163235": [[1, 474]], "163237": [[1, 220]], "163238": [[1, 15]], "163252": [[60, 157]], "163255": [[1, 1067]], "163261": [[1, 126]], "163269": [[59, 222]], "163270": [[1, 928]], "163286": [[112, 411]], "163289": [[1, 388]], "163296": [[59, 603]], "163297": [[1, 227]], "163300": [[1, 623]], "163301": [[1, 198]], "163302": [[1, 253]], "163308": [[1, 27]], "163332": [[43, 812]], "163333": [[1, 113]], "163334": [[1, 563]], "163337": [[1, 476]], "163338": [[1, 171]], "163339": [[1, 188]], "163340": [[1, 488], [554, 563]], "163358": [[39, 63]], "163369": [[1, 105]], "163370": [[1, 176]], "163371": [[1, 375]], "163372": [[1, 111]], "163374": [[1, 873]], "163375": [[1, 16]], "163376": [[1, 253]], "163378": [[1, 615]], "163385": [[52, 436]], "163387": [[1, 256], [278, 287]], "163402": [[37, 801]], "163475": [[30, 306]], "163476": [[1, 235]], "163478": [[1, 83]], "163479": [[1, 187]], "163480": [[1, 199]], "163481": [[1, 90]], "163482": [[1, 58]], "163483": [[1, 57]], "163581": [[40, 45]], "163582": [[1, 66]], "163583": [[1, 233]], "163584": [[1, 85]], "163585": [[1, 42]], "163586": [[1, 103]], "163587": [[1, 85]], "163588": [[1, 455]], "163589": [[1, 167]], "163591": [[1, 96]], "163592": [[1, 116]], "163593": [[1, 25]], "163596": [[1, 29]], "163630": [[76, 185]], "163655": [[15, 47]], "163657": [[1, 153]], "163658": [[1, 18]], "163659": [[1, 718]], "163660": [[1, 85]], "163661": [[1, 27]], "163662": [[1, 176]], "163663": [[1, 251]], "163664": [[1, 189]], "163665": [[1, 176]], "163668": [[1, 213], [255, 308]], "163738": [[34, 311]], "163753": [[1, 137]], "163754": [[1, 79]], "163757": [[1, 47]], "163758": [[1, 600]], "163759": [[1, 526]], "163760": [[1, 363]], "163761": [[1, 229]], "163763": [[1, 93]], "163765": [[1, 321]], "163795": [[10, 54]], "163796": [[1, 182]], "163817": [[50, 980]], "163869": [[79, 137]], "165088": [[107, 266]], "165098": [[124, 440]], "165099": [[1, 126]], "165100": [[1, 410]], "165102": [[1, 185]], "165103": [[1, 440]], "165104": [[1, 137]], "165120": [[67, 109]], "165121": [[1, 466]], "165205": [[80, 260]], "165208": [[1, 101]], "165364": [[45, 1301], [1331, 1352]], "165400": [[1, 88]], "165402": [[1, 28]], "165415": [[58, 1383]], "165467": [[39, 736]], "165472": [[1, 882]], "165486": [[37, 118]], "165487": [[1, 154]], "165506": [[54, 171]], "165514": [[72, 570]], "165523": [[60, 92]], "165525": [[1, 68]], "165529": [[1, 10]], "165537": [[1, 304]], "165542": [[1, 189]], "165548": [[1, 630]], "165558": [[1, 62]], "165567": [[54, 642]], "165570": [[1, 952]], "165617": [[26, 291]], "165619": [[1, 23]], "165620": [[1, 63]], "165633": [[56, 505]], "165970": [[67, 335]], "165993": [[71, 1697]], "166010": [[50, 180]], "166011": [[1, 83]], "166033": [[35, 1244]], "166034": [[1, 363]], "166049": [[53, 918]], "166051": [[1, 365]], "166052": [[1, 119]], "166149": [[1, 24]], "166150": [[1, 116]], "166161": [[37, 128]], "166163": [[1, 35]], "166164": [[1, 40]], "166346": [[48, 215]], "166374": [[46, 193]], "166377": [[1, 57]], "166379": [[1, 118]], "166380": [[1, 1809]], "166394": [[42, 47]], "166408": [[67, 1236]], "166429": [[33, 89]], "166438": [[32, 867]], "166462": [[78, 526]], "166486": [[54, 174]], "166502": [[43, 109]], "166512": [[42, 1876]], "166514": [[1, 465]], "166530": [[43, 63]], "166554": [[46, 738]], "166563": [[1, 276], [492, 748]], "166565": [[1, 898]], "166699": [[55, 915]], "166701": [[1, 792]], "166763": [[46, 650]], "166781": [[41, 111], [115, 115], [117, 387]], "166782": [[1, 572]], "166784": [[1, 365]], "166787": [[1, 364]], "166839": [[43, 303]], "166841": [[1, 1017]], "166842": [[1, 170]], "166859": [[62, 425]], "166860": [[1, 25]], "166861": [[1, 44]], "166862": [[1, 5]], "166863": [[1, 3]], "166864": [[1, 537]], "166888": [[56, 476]], "166889": [[1, 231]], "166890": [[1, 446]], "166893": [[1, 3]], "166894": [[1, 203]], "166895": [[1, 603]], "166911": [[58, 104]], "166921": [[39, 68]], "166922": [[1, 776]], "166923": [[1, 470]], "166946": [[41, 208]], "166950": [[1, 1439]], "166960": [[1, 184]], "166966": [[1, 240]], "166967": [[1, 220]], "167039": [[20, 238]], "167041": [[1, 667]], "167043": [[1, 235]], "167078": [[40, 175]], "167098": [[62, 463]], "167102": [[1, 430]], "167103": [[1, 95]], "167151": [[1, 51]], "167281": [[18, 595]], "167282": [[1, 451]], "167284": [[1, 1645]], "167551": [[56, 472]], "167673": [[210, 448]], "167674": [[1, 348]], "167675": [[1, 1064]], "167676": [[1, 451]], "167740": [[79, 174]], "167746": [[56, 384]], "167754": [[62, 103]], "167784": [[51, 132]], "167786": [[1, 177]], "167807": [[60, 160], [178, 1870]], "167830": [[1, 1242]], "167898": [[108, 1764]], "167913": [[1, 432]]} \ No newline at end of file diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167913_range4 b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167913_range4 deleted file mode 100644 index f0b0a3ab20d29..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-167913_range4 +++ /dev/null @@ -1,266 +0,0 @@ -{"160404": [[15, 24]], - "160405": [[14, 15], [27, 35]], - "160406": [[30, 34], [92, 93], [116, 124]], - "160410": [[86, 102]], - "160413": [[43, 44], [84, 95], [137, 140], [179, 184], [228, 231], [272, 276], [323, 325], [379, 382], [436, 437], [491, 495], [549, 553], [611, 613], [665, 667], [729, 730]], - "160431": [[220, 244]], - "160432": [[64, 79]], - "160433": [[13, 21]], - "160442": [[142, 153]], - "160443": [[16, 21]], - "160444": [[11, 11], [69, 74]], - "160445": [[28, 37]], - "160446": [[46, 55]], - "160447": [[50, 65]], - "160449": [[32, 34], [36, 44]], - "160450": [[24, 47]], - "160454": [[33, 41]], - "160455": [[8, 33]], - "160456": [[15, 106]], - "160462": [[24, 30]], - "160463": [[17, 17], [23, 46]], - "160497": [[42, 46], [89, 90], [131, 133], [267, 278], [375, 398]], - "160498": [[44, 70]], - "160577": [[38, 39], [48, 56], [100, 101], [152, 153], [168, 170], [203, 203], [252, 253], [307, 337]], - "160578": [[4, 4], [54, 54], [145, 149], [164, 164], [271, 273], [401, 404], [440, 456]], - "160808": [[9, 19], [76, 80]], - "160815": [[77, 95]], - "160819": [[107, 118]], - "160827": [[37, 55]], - "160835": [[33, 33], [39, 39], [84, 85], [182, 182], [569, 584]], - "160853": [[62, 65]], - "160871": [[209, 236]], - "160872": [[10, 24], [36, 37], [56, 77]], - "160873": [[175, 201]], - "160874": [[52, 96], [114, 132]], - "160875": [[277, 285]], - "160876": [[10, 17]], - "160877": [[79, 83]], - "160888": [[411, 423]], - "160890": [[7, 7], [391, 395]], - "160894": [[203, 220]], - "160898": [[25, 53]], - "160907": [[46, 46], [132, 220]], - "160911": [[290, 301]], - "160913": [[17, 26]], - "160914": [[67, 75]], - "160915": [[360, 382]], - "160935": [[240, 259]], - "160936": [[26, 60]], - "160937": [[193, 209]], - "160938": [[119, 130]], - "160939": [[125, 148]], - "160940": [[80, 90]], - "160942": [[13, 26]], - "160954": [[78, 84]], - "160955": [[202, 202], [208, 228]], - "160956": [[66, 73]], - "160994": [[44, 45]], - "160998": [[253, 288]], - "161008": [[275, 285]], - "161016": [[302, 327]], - "161103": [[102, 111]], - "161106": [[28, 40]], - "161107": [[31, 40]], - "161113": [[26, 45]], - "161116": [[13, 20]], - "161117": [[26, 43]], - "161119": [[59, 68], [109, 114], [142, 144], [174, 178], [211, 350]], - "161156": [[15, 90]], - "161165": [[82, 100]], - "161216": [[42, 53]], - "161217": [[754, 788]], - "161222": [[98, 136]], - "161223": [[376, 409]], - "161233": [[51, 63]], - "161310": [[118, 127]], - "161311": [[680, 704]], - "162718": [[35, 35], [118, 118], [158, 158], [180, 180], [183, 202]], - "162733": [[20, 47]], - "162739": [[12, 35], [37, 42]], - "162742": [[47, 85], [97, 127]], - "162760": [[1, 56]], - "162762": [[1, 111]], - "162765": [[1, 66]], - "162803": [[140, 148]], - "162808": [[53, 63]], - "162810": [[27, 40]], - "162811": [[341, 347]], - "162822": [[308, 314]], - "162825": [[185, 202]], - "162826": [[25, 43]], - "162827": [[135, 144]], - "162909": [[291, 299]], - "162917": [[122, 134]], - "162924": [[131, 151]], - "162925": [[297, 319]], - "162926": [[701, 714]], - "162929": [[296, 299], [358, 433]], - "163045": [[51, 56]], - "163046": [[134, 134], [239, 247], [311, 313]], - "163069": [[634, 648]], - "163071": [[177, 194]], - "163072": [[33, 44]], - "163232": [[150, 174]], - "163233": [[284, 302]], - "163234": [[67, 73]], - "163235": [[462, 474]], - "163237": [[214, 220]], - "163238": [[1, 15]], - "163252": [[138, 157]], - "163255": [[845, 845], [847, 847], [1055, 1067]], - "163269": [[174, 177], [207, 222]], - "163270": [[77, 78], [97, 98], [476, 478], [692, 692]], - "163286": [[402, 411]], - "163296": [[231, 231], [586, 603]], - "163297": [[220, 227]], - "163300": [[618, 623]], - "163301": [[193, 198]], - "163302": [[191, 253]], - "163332": [[158, 158], [265, 265], [600, 600], [803, 812]], - "163333": [[107, 113]], - "163334": [[557, 563]], - "163337": [[462, 476]], - "163338": [[165, 171]], - "163339": [[179, 188]], - "163340": [[554, 563]], - "163369": [[96, 105]], - "163370": [[168, 176]], - "163371": [[364, 375]], - "163372": [[101, 111]], - "163374": [[867, 873]], - "163375": [[1, 16]], - "163376": [[1, 253]], - "163385": [[420, 436]], - "163387": [[278, 287]], - "163475": [[296, 306]], - "163476": [[213, 235]], - "163478": [[71, 83]], - "163479": [[181, 187]], - "163480": [[93, 95], [189, 189], [192, 199]], - "163481": [[73, 73], [78, 78], [80, 90]], - "163482": [[49, 58]], - "163581": [[40, 45]], - "163582": [[23, 66]], - "163583": [[64, 64], [156, 156], [174, 174], [220, 233]], - "163584": [[71, 85]], - "163585": [[34, 42]], - "163586": [[91, 103]], - "163587": [[73, 85]], - "163588": [[9, 9], [447, 455]], - "163589": [[162, 167]], - "163591": [[78, 96]], - "163592": [[108, 108], [113, 116]], - "163593": [[12, 25]], - "163630": [[165, 175]], - "163655": [[24, 47]], - "163657": [[141, 153]], - "163658": [[4, 18]], - "163659": [[375, 375], [651, 651], [706, 718]], - "163660": [[75, 85]], - "163661": [[18, 27]], - "163662": [[155, 176]], - "163663": [[107, 108], [247, 251]], - "163664": [[179, 189]], - "163665": [[162, 176]], - "163668": [[255, 308]], - "163753": [[133, 137]], - "163754": [[39, 39], [52, 79]], - "163757": [[41, 47]], - "163758": [[18, 18], [221, 221], [375, 375], [592, 600]], - "163759": [[511, 526]], - "163760": [[163, 164], [355, 363]], - "163761": [[219, 229]], - "163763": [[87, 93]], - "163795": [[35, 35], [37, 37], [44, 54]], - "163817": [[528, 530], [967, 980]], - "163869": [[79, 137]], - "165098": [[188, 189], [194, 194], [249, 249], [255, 255], [332, 332], [368, 368], [416, 440]], - "165099": [[107, 126]], - "165100": [[1, 410]], - "165104": [[1, 137]], - "165120": [[99, 109]], - "165205": [[249, 260]], - "165364": [[112, 113], [808, 808], [1331, 1352]], - "165400": [[80, 88]], - "165415": [[641, 642], [708, 711], [778, 779]], - "165467": [[710, 736]], - "165472": [[185, 185]], - "165486": [[103, 118]], - "165487": [[152, 154]], - "165506": [[171, 171]], - "165514": [[568, 570]], - "165523": [[60, 92]], - "165525": [[33, 68]], - "165529": [[1, 10]], - "165537": [[297, 304]], - "165542": [[176, 189]], - "165548": [[364, 364], [590, 630]], - "165567": [[110, 113], [310, 314], [632, 642]], - "165570": [[3, 4], [84, 87], [947, 952]], - "165617": [[53, 53], [144, 144], [289, 291]], - "165619": [[20, 21], [23, 23]], - "165620": [[25, 25], [59, 63]], - "165633": [[318, 318]], - "166010": [[174, 175], [179, 180]], - "166033": [[1234, 1244]], - "166034": [[363, 363]], - "166049": [[886, 887], [918, 918]], - "166149": [[3, 24]], - "166161": [[121, 121], [124, 125], [127, 128]], - "166163": [[13, 13], [35, 35]], - "166374": [[65, 65], [189, 193]], - "166377": [[57, 57]], - "166380": [[712, 714]], - "166438": [[86, 86], [857, 857], [867, 867]], - "166486": [[96, 96]], - "166512": [[431, 431], [1280, 1280], [1819, 1820], [1863, 1867], [1869, 1869], [1872, 1872], [1875, 1876]], - "166514": [[465, 465]], - "166554": [[288, 289], [318, 319], [731, 731], [735, 735], [737, 738]], - "166565": [[313, 315], [468, 468]], - "166699": [[678, 680], [913, 915]], - "166701": [[14, 15]], - "166781": [[383, 387]], - "166782": [[570, 571]], - "166839": [[298, 298], [303, 303]], - "166841": [[986, 987], [1017, 1017]], - "166859": [[419, 420], [422, 422], [424, 425]], - "166860": [[22, 25]], - "166861": [[7, 7], [44, 44]], - "166862": [[3, 5]], - "166863": [[2, 3]], - "166864": [[30, 30], [78, 78], [100, 101], [248, 248], [308, 310], [366, 366], [375, 377], [455, 477]], - "166888": [[91, 92], [155, 155], [395, 397], [471, 476]], - "166889": [[229, 231]], - "166890": [[442, 446]], - "166893": [[2, 3]], - "166894": [[191, 203]], - "166895": [[598, 598]], - "166921": [[68, 68]], - "166922": [[770, 772], [774, 776]], - "166946": [[73, 74], [205, 205], [208, 208]], - "166950": [[2, 7], [33, 34], [1346, 1346]], - "166960": [[167, 184]], - "166966": [[240, 240]], - "167039": [[232, 238]], - "167041": [[337, 338], [664, 667]], - "167078": [[175, 175]], - "167098": [[91, 91], [463, 463]], - "167103": [[95, 95]], - "167151": [[43, 51]], - "167281": [[316, 316], [595, 595]], - "167282": [[255, 257], [382, 385], [390, 451]], - "167284": [[1, 1645]], - "167551": [[472, 472]], - "167673": [[238, 238], [448, 448]], - "167674": [[346, 348]], - "167675": [[131, 132], [1064, 1064]], - "167676": [[451, 451]], - "167740": [[174, 174]], - "167754": [[62, 103]], - "167784": [[51, 132]], - "167786": [[1, 177]], - "167807": [[60, 160], [178, 1870]], - "167830": [[1, 1242]], - "167898": [[108, 1764]], - "167913": [[1, 432]]} diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-172478 b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-172478 deleted file mode 100644 index c2d8055ea008d..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-172478 +++ /dev/null @@ -1 +0,0 @@ -{"160404": [[15, 24]], "160405": [[1, 35]], "160406": [[1, 124]], "160410": [[1, 102]], "160413": [[1, 788]], "160431": [[19, 244]], "160432": [[2, 79]], "160433": [[1, 21]], "160442": [[108, 153]], "160443": [[1, 21]], "160444": [[1, 74]], "160445": [[1, 37]], "160446": [[1, 55]], "160447": [[1, 65]], "160449": [[1, 44]], "160450": [[1, 47]], "160454": [[1, 41]], "160455": [[1, 33]], "160456": [[1, 106]], "160462": [[1, 30]], "160463": [[1, 46]], "160497": [[38, 148], [152, 398]], "160498": [[1, 70]], "160499": [[1, 16]], "160577": [[14, 337]], "160578": [[1, 456]], "160579": [[1, 181]], "160808": [[7, 80]], "160815": [[1, 95]], "160819": [[1, 17], [19, 118]], "160827": [[1, 55]], "160835": [[1, 85], [87, 496], [569, 584]], "160853": [[62, 65]], "160871": [[68, 236]], "160872": [[1, 77]], "160873": [[1, 201]], "160874": [[1, 132]], "160875": [[1, 285]], "160876": [[1, 17]], "160877": [[1, 12], [79, 83]], "160888": [[45, 423]], "160890": [[1, 395]], "160894": [[1, 220]], "160898": [[25, 53]], "160907": [[15, 220]], "160911": [[1, 301]], "160913": [[1, 26]], "160914": [[1, 75]], "160915": [[1, 382]], "160916": [[1, 90]], "160935": [[33, 259]], "160936": [[1, 60]], "160937": [[1, 209]], "160938": [[1, 130]], "160939": [[1, 148]], "160940": [[1, 90]], "160942": [[1, 26]], "160943": [[1, 54]], "160954": [[78, 84]], "160955": [[1, 228]], "160956": [[1, 73]], "160957": [[1, 953]], "160994": [[44, 45]], "160998": [[1, 288]], "161008": [[1, 285]], "161016": [[1, 327]], "161020": [[1, 22]], "161103": [[1, 111]], "161106": [[1, 40]], "161107": [[1, 40]], "161113": [[1, 45]], "161116": [[1, 20]], "161117": [[1, 43]], "161119": [[1, 350]], "161156": [[1, 90]], "161165": [[1, 100]], "161176": [[1, 31]], "161216": [[29, 53]], "161217": [[1, 788]], "161222": [[1, 136]], "161223": [[1, 409]], "161224": [[1, 2]], "161233": [[33, 63]], "161310": [[39, 127]], "161311": [[1, 704]], "161312": [[1, 1027]], "162718": [[1, 202]], "162733": [[1, 47]], "162739": [[1, 35], [37, 42]], "162742": [[1, 85], [97, 127]], "162760": [[1, 56]], "162762": [[1, 111]], "162765": [[1, 66]], "162803": [[60, 148]], "162808": [[1, 63]], "162810": [[1, 40]], "162811": [[1, 347]], "162822": [[73, 314]], "162825": [[1, 202]], "162826": [[1, 43]], "162827": [[1, 144]], "162828": [[1, 85]], "162909": [[54, 299]], "162917": [[122, 134]], "162924": [[69, 151]], "162925": [[1, 319]], "162926": [[1, 714]], "162929": [[1, 299], [358, 433]], "163045": [[51, 56]], "163046": [[1, 247], [311, 313]], "163069": [[73, 648]], "163071": [[1, 194]], "163072": [[1, 44]], "163078": [[1, 23]], "163232": [[110, 174]], "163233": [[1, 302]], "163234": [[1, 73]], "163235": [[1, 474]], "163237": [[1, 220]], "163238": [[1, 15]], "163252": [[60, 157]], "163255": [[1, 1067]], "163261": [[1, 126]], "163269": [[59, 222]], "163270": [[1, 928]], "163286": [[112, 411]], "163289": [[1, 388]], "163296": [[59, 603]], "163297": [[1, 227]], "163300": [[1, 623]], "163301": [[1, 198]], "163302": [[1, 253]], "163308": [[1, 27]], "163332": [[43, 812]], "163333": [[1, 113]], "163334": [[1, 563]], "163337": [[1, 476]], "163338": [[1, 171]], "163339": [[1, 188]], "163340": [[1, 488], [554, 563]], "163358": [[39, 63]], "163369": [[1, 105]], "163370": [[1, 176]], "163371": [[1, 375]], "163372": [[1, 111]], "163374": [[1, 873]], "163375": [[1, 16]], "163376": [[1, 253]], "163378": [[1, 615]], "163385": [[52, 436]], "163387": [[1, 256], [278, 287]], "163402": [[37, 801]], "163475": [[30, 306]], "163476": [[1, 235]], "163478": [[1, 83]], "163479": [[1, 187]], "163480": [[1, 199]], "163481": [[1, 90]], "163482": [[1, 58]], "163483": [[1, 57]], "163581": [[40, 45]], "163582": [[1, 66]], "163583": [[1, 233]], "163584": [[1, 85]], "163585": [[1, 42]], "163586": [[1, 103]], "163587": [[1, 85]], "163588": [[1, 455]], "163589": [[1, 167]], "163591": [[1, 96]], "163592": [[1, 116]], "163593": [[1, 25]], "163596": [[1, 29]], "163630": [[76, 185]], "163655": [[15, 47]], "163657": [[1, 153]], "163658": [[1, 18]], "163659": [[1, 718]], "163660": [[1, 85]], "163661": [[1, 27]], "163662": [[1, 176]], "163663": [[1, 251]], "163664": [[1, 189]], "163665": [[1, 176]], "163668": [[1, 213], [255, 308]], "163738": [[34, 311]], "163753": [[1, 137]], "163754": [[1, 79]], "163757": [[1, 47]], "163758": [[1, 600]], "163759": [[1, 526]], "163760": [[1, 363]], "163761": [[1, 229]], "163763": [[1, 93]], "163765": [[1, 321]], "163795": [[10, 54]], "163796": [[1, 182]], "163817": [[50, 980]], "163869": [[79, 137]], "165088": [[107, 266]], "165098": [[124, 440]], "165099": [[1, 126]], "165100": [[1, 410]], "165102": [[1, 185]], "165103": [[1, 440]], "165104": [[1, 137]], "165120": [[67, 109]], "165121": [[1, 466]], "165205": [[80, 260]], "165208": [[1, 101]], "165364": [[45, 1301], [1331, 1352]], "165400": [[1, 88]], "165402": [[1, 28]], "165415": [[58, 1383]], "165467": [[39, 736]], "165472": [[1, 882]], "165486": [[37, 118]], "165487": [[1, 154]], "165506": [[54, 171]], "165514": [[72, 570]], "165523": [[60, 92]], "165525": [[1, 68]], "165529": [[1, 10]], "165537": [[1, 304]], "165542": [[1, 189]], "165548": [[1, 630]], "165558": [[1, 62]], "165567": [[54, 642]], "165570": [[1, 952]], "165617": [[26, 291]], "165619": [[1, 23]], "165620": [[1, 63]], "165633": [[56, 505]], "165970": [[67, 335]], "165993": [[71, 1697]], "166010": [[50, 180]], "166011": [[1, 83]], "166033": [[35, 1244]], "166034": [[1, 363]], "166049": [[53, 918]], "166051": [[1, 365]], "166052": [[1, 119]], "166149": [[1, 24]], "166150": [[1, 116]], "166161": [[37, 128]], "166163": [[1, 35]], "166164": [[1, 40]], "166346": [[48, 215]], "166374": [[46, 193]], "166377": [[1, 57]], "166379": [[1, 118]], "166380": [[1, 1809]], "166394": [[42, 47]], "166408": [[67, 1236]], "166429": [[33, 89]], "166438": [[32, 867]], "166462": [[78, 526]], "166486": [[54, 174]], "166502": [[43, 109]], "166512": [[42, 1876]], "166514": [[1, 465]], "166530": [[43, 63]], "166554": [[46, 738]], "166563": [[1, 276], [492, 748]], "166565": [[1, 898]], "166699": [[55, 915]], "166701": [[1, 792]], "166763": [[46, 650]], "166781": [[41, 111], [115, 115], [117, 387]], "166782": [[1, 572]], "166784": [[1, 365]], "166787": [[1, 364]], "166839": [[43, 303]], "166841": [[1, 1017]], "166842": [[1, 170]], "166859": [[62, 425]], "166860": [[1, 25]], "166861": [[1, 44]], "166862": [[1, 5]], "166863": [[1, 3]], "166864": [[1, 537]], "166888": [[56, 476]], "166889": [[1, 231]], "166890": [[1, 446]], "166893": [[1, 3]], "166894": [[1, 203]], "166895": [[1, 603]], "166911": [[58, 104]], "166921": [[39, 68]], "166922": [[1, 776]], "166923": [[1, 470]], "166946": [[41, 208]], "166950": [[1, 1439]], "166960": [[1, 184]], "166966": [[1, 240]], "166967": [[1, 220]], "167039": [[20, 238]], "167041": [[1, 667]], "167043": [[1, 235]], "167078": [[40, 175]], "167098": [[62, 463]], "167102": [[1, 430]], "167103": [[1, 95]], "167151": [[1, 51]], "167281": [[18, 595]], "167282": [[1, 451]], "167284": [[1, 1645]], "167551": [[56, 472]], "167673": [[210, 448]], "167674": [[1, 348]], "167675": [[1, 1064]], "167676": [[1, 451]], "167740": [[79, 174]], "167746": [[56, 384]], "167754": [[62, 103]], "167784": [[51, 132]], "167786": [[1, 177]], "167807": [[60, 160], [178, 1870]], "167830": [[1, 1242]], "167898": [[108, 1764]], "167913": [[1, 432]], "169985": [[88, 100]], "169991": [[1, 24]], "170000": [[1, 26], [28, 272]], "170040": [[90, 280], [282, 419]], "170044": [[1, 94]], "170249": [[37, 510]], "170255": [[1, 387]], "170286": [[77, 262]], "170292": [[1, 260]], "170298": [[1, 186]], "170303": [[1, 22]], "170304": [[1, 115]], "170307": [[1, 14]], "170348": [[58, 256]], "170354": [[1, 308]], "170376": [[52, 67]], "170378": [[1, 5]], "170380": [[1, 16]], "170382": [[1, 306]], "170397": [[1, 347]], "170406": [[1, 171]], "170452": [[72, 110]], "170527": [[44, 93]], "170722": [[110, 287]], "170759": [[49, 377]], "170826": [[50, 312]], "170842": [[1, 339]], "170854": [[1, 580]], "170876": [[1, 522]], "170896": [[1, 214]], "170899": [[1, 86]], "170901": [[1, 200]], "171050": [[47, 658]], "171091": [[1, 138]], "171098": [[1, 10]], "171102": [[1, 21]], "171106": [[1, 292]], "171116": [[1, 2]], "171117": [[1, 54], [56, 84]], "171156": [[42, 693]], "171178": [[1, 1044]], "171219": [[48, 162]], "171274": [[88, 148]], "171282": [[1, 171]], "171315": [[53, 226]], "171369": [[42, 162]], "171446": [[58, 865]], "171484": [[61, 432]], "171578": [[47, 974]], "171812": [[59, 438]], "171875": [[54, 60]], "171876": [[1, 541]], "171879": [[1, 103]], "171880": [[1, 207]], "171890": [[1, 43]], "171895": [[1, 36], [38, 67]], "171897": [[1, 25], [27, 51], [53, 77], [79, 103], [105, 180], [182, 543]], "171921": [[51, 152]], "171926": [[1, 264]], "172014": [[1, 244]], "172024": [[1, 79]], "172033": [[1, 749]], "172163": [[36, 784]], "172208": [[61, 200]], "172252": [[32, 63]], "172254": [[1, 43]], "172255": [[1, 40]], "172268": [[56, 169]], "172286": [[52, 217]], "172389": [[34, 460]], "172399": [[57, 231]], "172400": [[1, 706]], "172401": [[1, 148]], "172411": [[85, 382]], "172478": [[1, 154]]} \ No newline at end of file diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-172478_range2only b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-172478_range2only deleted file mode 100644 index 734cd594c7c18..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-172478_range2only +++ /dev/null @@ -1,136 +0,0 @@ -{"165100": [[1, 410]], - "165104": [[1, 137]], - "165529": [[1, 10]], - "165567": [[638, 642]], - "165570": [[948, 952]], - "166438": [[32, 867]], - "166565": [[1, 898]], - "166763": [[46, 650]], - "166781": [[41, 111], [115, 115], [117, 387]], - "166782": [[1, 572]], - "166784": [[1, 365]], - "166787": [[1, 364]], - "166839": [[43, 303]], - "166841": [[1, 1017]], - "166842": [[1, 170]], - "166859": [[62, 425]], - "166860": [[1, 25]], - "166861": [[1, 44]], - "166862": [[1, 5]], - "166863": [[1, 3]], - "166864": [[1, 537]], - "166888": [[56, 476]], - "166889": [[1, 231]], - "166890": [[1, 446]], - "166893": [[1, 3]], - "166894": [[1, 203]], - "166895": [[1, 603]], - "166911": [[58, 104]], - "166921": [[39, 68]], - "166922": [[1, 776]], - "166923": [[1, 470]], - "166946": [[41, 208]], - "166950": [[1, 1439]], - "166960": [[1, 184]], - "166966": [[1, 240]], - "166967": [[1, 220]], - "167039": [[20, 238]], - "167041": [[1, 667]], - "167043": [[1, 235]], - "167078": [[40, 175]], - "167098": [[62, 463]], - "167102": [[1, 430]], - "167103": [[1, 95]], - "167151": [[1, 51]], - "167281": [[18, 595]], - "167282": [[1, 451]], - "167284": [[1, 1645]], - "167551": [[56, 472]], - "167673": [[210, 448]], - "167674": [[1, 348]], - "167675": [[1, 1064]], - "167676": [[1, 451]], - "167740": [[79, 174]], - "167746": [[56, 384]], - "167754": [[62, 103]], - "167784": [[51, 132]], - "167786": [[1, 177]], - "167807": [[60, 160], [178, 1870]], - "167830": [[1, 1242]], - "167898": [[108, 1764]], - "167913": [[1, 432]], - "169985": [[88, 100]], - "169991": [[1, 24]], - "170000": [[1, 26], [28, 272]], - "170040": [[90, 280], [282, 419]], - "170044": [[1, 94]], - "170249": [[37, 510]], - "170255": [[1, 387]], - "170286": [[77, 262]], - "170292": [[1, 260]], - "170298": [[1, 186]], - "170303": [[1, 22]], - "170304": [[1, 115]], - "170307": [[1, 14]], - "170348": [[58, 256]], - "170354": [[1, 308]], - "170376": [[52, 67]], - "170378": [[1, 5]], - "170380": [[1, 16]], - "170382": [[1, 306]], - "170397": [[1, 347]], - "170406": [[1, 171]], - "170452": [[72, 110]], - "170527": [[44, 93]], - "170722": [[110, 287]], - "170759": [[49, 377]], - "170826": [[50, 312]], - "170842": [[1, 339]], - "170854": [[1, 580]], - "170876": [[1, 522]], - "170896": [[1, 214]], - "170899": [[1, 86]], - "170901": [[1, 200]], - "171050": [[47, 658]], - "171091": [[1, 138]], - "171098": [[1, 10]], - "171102": [[1, 21]], - "171106": [[1, 292]], - "171116": [[1, 2]], - "171117": [[1, 54], [56, 84]], - "171156": [[42, 693]], - "171178": [[1, 1044]], - "171219": [[48, 162]], - "171274": [[88, 148]], - "171282": [[1, 171]], - "171315": [[53, 226]], - "171369": [[42, 162]], - "171446": [[58, 865]], - "171484": [[61, 432]], - "171578": [[47, 974]], - "171812": [[59, 438]], - "171875": [[54, 60]], - "171876": [[1, 541]], - "171879": [[1, 103]], - "171880": [[1, 207]], - "171890": [[1, 43]], - "171895": [[1, 36], [38, 67]], - "171897": [[1, 25], [27, 51], [53, 77], [79, 103], [105, 180], [182, 543]], - "171921": [[51, 152]], - "171926": [[1, 264]], - "172014": [[1, 244]], - "172024": [[1, 79]], - "172033": [[1, 749]], - "172163": [[36, 784]], - "172208": [[61, 200]], - "172252": [[32, 63]], - "172254": [[1, 43]], - "172255": [[1, 40]], - "172268": [[56, 169]], - "172286": [[52, 217]], - "172389": [[34, 460]], - "172399": [[57, 231]], - "172400": [[1, 706]], - "172401": [[1, 148]], - "172411": [[85, 382]], - "172478": [[1, 154]]} diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-173692 b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-173692 deleted file mode 100644 index 076c8d399d87e..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-173692 +++ /dev/null @@ -1 +0,0 @@ -{"160404": [[15, 24]], "160405": [[1, 35]], "160406": [[1, 124]], "160410": [[1, 102]], "160413": [[1, 788]], "160431": [[19, 244]], "160432": [[2, 79]], "160433": [[1, 21]], "160442": [[108, 153]], "160443": [[1, 21]], "160444": [[1, 74]], "160445": [[1, 37]], "160446": [[1, 55]], "160447": [[1, 65]], "160449": [[1, 44]], "160450": [[1, 47]], "160454": [[1, 41]], "160455": [[1, 33]], "160456": [[1, 106]], "160462": [[1, 30]], "160463": [[1, 46]], "160497": [[38, 148], [152, 398]], "160498": [[1, 70]], "160499": [[1, 16]], "160577": [[14, 337]], "160578": [[1, 456]], "160579": [[1, 181]], "160808": [[7, 80]], "160815": [[1, 95]], "160819": [[1, 17], [19, 118]], "160827": [[1, 55]], "160835": [[1, 85], [87, 496], [569, 584]], "160853": [[62, 65]], "160871": [[68, 236]], "160872": [[1, 77]], "160873": [[1, 201]], "160874": [[1, 132]], "160875": [[1, 285]], "160876": [[1, 17]], "160877": [[1, 12], [79, 83]], "160888": [[45, 423]], "160890": [[1, 395]], "160894": [[1, 220]], "160898": [[25, 53]], "160907": [[15, 220]], "160911": [[1, 301]], "160913": [[1, 26]], "160914": [[1, 75]], "160915": [[1, 382]], "160916": [[1, 90]], "160935": [[33, 259]], "160936": [[1, 60]], "160937": [[1, 209]], "160938": [[1, 130]], "160939": [[1, 148]], "160940": [[1, 90]], "160942": [[1, 26]], "160943": [[1, 54]], "160954": [[78, 84]], "160955": [[1, 228]], "160956": [[1, 73]], "160957": [[1, 953]], "160994": [[44, 45]], "160998": [[1, 288]], "161008": [[1, 285]], "161016": [[1, 327]], "161020": [[1, 22]], "161103": [[1, 111]], "161106": [[1, 40]], "161107": [[1, 40]], "161113": [[1, 45]], "161116": [[1, 20]], "161117": [[1, 43]], "161119": [[1, 350]], "161156": [[1, 90]], "161165": [[1, 100]], "161176": [[1, 31]], "161216": [[29, 53]], "161217": [[1, 788]], "161222": [[1, 136]], "161223": [[1, 409]], "161224": [[1, 2]], "161233": [[33, 63]], "161310": [[39, 127]], "161311": [[1, 704]], "161312": [[1, 1027]], "162718": [[1, 202]], "162733": [[1, 47]], "162739": [[1, 35], [37, 42]], "162742": [[1, 85], [97, 127]], "162760": [[1, 56]], "162762": [[1, 111]], "162765": [[1, 66]], "162803": [[60, 148]], "162808": [[1, 63]], "162810": [[1, 40]], "162811": [[1, 347]], "162822": [[73, 314]], "162825": [[1, 202]], "162826": [[1, 43]], "162827": [[1, 144]], "162828": [[1, 85]], "162909": [[54, 299]], "162917": [[122, 134]], "162924": [[69, 151]], "162925": [[1, 319]], "162926": [[1, 714]], "162929": [[1, 299], [358, 433]], "163045": [[51, 56]], "163046": [[1, 247], [311, 313]], "163069": [[73, 648]], "163071": [[1, 194]], "163072": [[1, 44]], "163078": [[1, 23]], "163232": [[110, 174]], "163233": [[1, 302]], "163234": [[1, 73]], "163235": [[1, 474]], "163237": [[1, 220]], "163238": [[1, 15]], "163252": [[60, 157]], "163255": [[1, 1067]], "163261": [[1, 126]], "163269": [[59, 222]], "163270": [[1, 928]], "163286": [[112, 411]], "163289": [[1, 388]], "163296": [[59, 603]], "163297": [[1, 227]], "163300": [[1, 623]], "163301": [[1, 198]], "163302": [[1, 253]], "163308": [[1, 27]], "163332": [[43, 812]], "163333": [[1, 113]], "163334": [[1, 563]], "163337": [[1, 476]], "163338": [[1, 171]], "163339": [[1, 188]], "163340": [[1, 488], [554, 563]], "163358": [[39, 63]], "163369": [[1, 105]], "163370": [[1, 176]], "163371": [[1, 375]], "163372": [[1, 111]], "163374": [[1, 873]], "163375": [[1, 16]], "163376": [[1, 253]], "163378": [[1, 615]], "163385": [[52, 436]], "163387": [[1, 256], [278, 287]], "163402": [[37, 801]], "163475": [[30, 306]], "163476": [[1, 235]], "163478": [[1, 83]], "163479": [[1, 187]], "163480": [[1, 199]], "163481": [[1, 90]], "163482": [[1, 58]], "163483": [[1, 57]], "163581": [[40, 45]], "163582": [[1, 66]], "163583": [[1, 233]], "163584": [[1, 85]], "163585": [[1, 42]], "163586": [[1, 103]], "163587": [[1, 85]], "163588": [[1, 455]], "163589": [[1, 167]], "163591": [[1, 96]], "163592": [[1, 116]], "163593": [[1, 25]], "163596": [[1, 29]], "163630": [[76, 185]], "163655": [[15, 47]], "163657": [[1, 153]], "163658": [[1, 18]], "163659": [[1, 718]], "163660": [[1, 85]], "163661": [[1, 27]], "163662": [[1, 176]], "163663": [[1, 251]], "163664": [[1, 189]], "163665": [[1, 176]], "163668": [[1, 213], [255, 308]], "163738": [[34, 311]], "163753": [[1, 137]], "163754": [[1, 79]], "163757": [[1, 47]], "163758": [[1, 600]], "163759": [[1, 526]], "163760": [[1, 363]], "163761": [[1, 229]], "163763": [[1, 93]], "163765": [[1, 321]], "163795": [[10, 54]], "163796": [[1, 182]], "163817": [[50, 980]], "163869": [[79, 137]], "165088": [[107, 266]], "165098": [[124, 440]], "165099": [[1, 126]], "165100": [[1, 410]], "165102": [[1, 185]], "165103": [[1, 440]], "165104": [[1, 137]], "165120": [[67, 109]], "165121": [[1, 466]], "165205": [[80, 260]], "165208": [[1, 101]], "165364": [[45, 1301], [1331, 1352]], "165400": [[1, 88]], "165402": [[1, 28]], "165415": [[58, 1383]], "165467": [[39, 736]], "165472": [[1, 882]], "165486": [[37, 118]], "165487": [[1, 154]], "165506": [[54, 171]], "165514": [[72, 570]], "165523": [[60, 92]], "165525": [[1, 68]], "165529": [[1, 10]], "165537": [[1, 304]], "165542": [[1, 189]], "165548": [[1, 630]], "165558": [[1, 62]], "165567": [[54, 642]], "165570": [[1, 952]], "165617": [[26, 291]], "165619": [[1, 23]], "165620": [[1, 63]], "165633": [[56, 505]], "165970": [[67, 335]], "165993": [[71, 1697]], "166010": [[50, 180]], "166011": [[1, 83]], "166033": [[35, 1244]], "166034": [[1, 363]], "166049": [[53, 918]], "166051": [[1, 365]], "166052": [[1, 119]], "166149": [[1, 24]], "166150": [[1, 116]], "166161": [[37, 128]], "166163": [[1, 35]], "166164": [[1, 40]], "166346": [[48, 215]], "166374": [[46, 193]], "166377": [[1, 57]], "166379": [[1, 118]], "166380": [[1, 1809]], "166394": [[42, 47]], "166408": [[67, 1236]], "166429": [[33, 89]], "166438": [[32, 867]], "166462": [[78, 526]], "166486": [[54, 174]], "166502": [[43, 109]], "166512": [[42, 1876]], "166514": [[1, 465]], "166530": [[43, 63]], "166554": [[46, 738]], "166563": [[1, 276], [492, 748]], "166565": [[1, 898]], "166699": [[55, 915]], "166701": [[1, 792]], "166763": [[46, 650]], "166781": [[41, 111], [115, 115], [117, 387]], "166782": [[1, 572]], "166784": [[1, 365]], "166787": [[1, 364]], "166839": [[43, 303]], "166841": [[1, 1017]], "166842": [[1, 170]], "166859": [[62, 425]], "166860": [[1, 25]], "166861": [[1, 44]], "166862": [[1, 5]], "166863": [[1, 3]], "166864": [[1, 537]], "166888": [[56, 476]], "166889": [[1, 231]], "166890": [[1, 446]], "166893": [[1, 3]], "166894": [[1, 203]], "166895": [[1, 603]], "166911": [[58, 104]], "166921": [[39, 68]], "166922": [[1, 776]], "166923": [[1, 470]], "166946": [[41, 208]], "166950": [[1, 1439]], "166960": [[1, 184]], "166966": [[1, 240]], "166967": [[1, 220]], "167039": [[20, 238]], "167041": [[1, 667]], "167043": [[1, 235]], "167078": [[40, 175]], "167098": [[62, 463]], "167102": [[1, 430]], "167103": [[1, 95]], "167151": [[1, 51]], "167281": [[18, 595]], "167282": [[1, 451]], "167284": [[1, 1645]], "167551": [[56, 472]], "167673": [[210, 448]], "167674": [[1, 348]], "167675": [[1, 1064]], "167676": [[1, 451]], "167740": [[79, 174]], "167746": [[56, 384]], "167754": [[62, 103]], "167784": [[51, 132]], "167786": [[1, 177]], "167807": [[60, 160], [178, 1870]], "167830": [[1, 1242]], "167898": [[108, 1764]], "167913": [[1, 432]], "169985": [[88, 100]], "169991": [[1, 24]], "170000": [[1, 26], [28, 272]], "170040": [[90, 280], [282, 419]], "170044": [[1, 94]], "170249": [[37, 510]], "170255": [[1, 387]], "170286": [[77, 262]], "170292": [[1, 260]], "170298": [[1, 186]], "170303": [[1, 22]], "170304": [[1, 115]], "170307": [[1, 14]], "170348": [[58, 256]], "170354": [[1, 308]], "170376": [[52, 67]], "170378": [[1, 5]], "170380": [[1, 16]], "170382": [[1, 306]], "170397": [[1, 347]], "170406": [[1, 171]], "170452": [[72, 110]], "170527": [[44, 93]], "170722": [[110, 287]], "170759": [[49, 377]], "170826": [[50, 312]], "170842": [[1, 339]], "170854": [[1, 580]], "170876": [[1, 522]], "170896": [[1, 214]], "170899": [[1, 86]], "170901": [[1, 200]], "171050": [[47, 658]], "171091": [[1, 138]], "171098": [[1, 10]], "171102": [[1, 21]], "171106": [[1, 292]], "171116": [[1, 2]], "171117": [[1, 54], [56, 84]], "171156": [[42, 693]], "171178": [[1, 1044]], "171219": [[48, 162]], "171274": [[88, 148]], "171282": [[1, 171]], "171315": [[53, 226]], "171369": [[42, 162]], "171446": [[58, 865]], "171484": [[61, 432]], "171578": [[47, 974]], "171812": [[59, 438]], "171875": [[54, 60]], "171876": [[1, 541]], "171879": [[1, 103]], "171880": [[1, 207]], "171890": [[1, 43]], "171895": [[1, 36], [38, 67]], "171897": [[1, 25], [27, 51], [53, 77], [79, 103], [105, 180], [182, 543]], "171921": [[51, 152]], "171926": [[1, 264]], "172014": [[1, 244]], "172024": [[1, 79]], "172033": [[1, 749]], "172163": [[36, 784]], "172208": [[61, 200]], "172252": [[32, 63]], "172254": [[1, 43]], "172255": [[1, 40]], "172268": [[56, 169]], "172286": [[52, 217]], "172389": [[34, 460]], "172399": [[57, 231]], "172400": [[1, 706]], "172401": [[1, 148]], "172411": [[85, 382]], "172478": [[1, 154]], "172485": [[41, 544]], "172488": [[1, 38], [40, 54], [56, 67], [69, 79], [81, 104], [106, 146], [149, 150], [152, 157]], "172495": [[1, 157]], "172497": [[1, 25]], "172507": [[1, 43], [45, 68]], "172619": [[1, 82]], "172620": [[1, 495]], "172630": [[36, 167]], "172635": [[1, 268]], "172778": [[48, 97]], "172791": [[65, 1664]], "172798": [[1, 35]], "172799": [[1, 372]], "172801": [[1, 1144]], "172802": [[1, 784]], "172819": [[57, 259]], "172822": [[1, 2338]], "172824": [[1, 54]], "172847": [[62, 131]], "172865": [[36, 386]], "172868": [[1, 1970]], "172949": [[55, 1298]], "172951": [[1, 56]], "172952": [[1, 1562]], "172992": [[52, 79], [81, 327], [329, 363], [365, 954]], "172998": [[1, 84]], "172999": [[1, 294]], "173198": [[49, 823]], "173236": [[128, 238]], "173240": [[1, 129]], "173241": [[1, 764]], "173243": [[1, 95]], "173244": [[1, 97]], "173380": [[75, 218]], "173381": [[1, 294]], "173389": [[18, 653]], "173406": [[37, 286]], "173430": [[72, 174]], "173431": [[1, 17]], "173438": [[32, 67]], "173439": [[1, 756]], "173657": [[59, 95]], "173658": [[1, 112]], "173659": [[1, 321]], "173660": [[1, 369]], "173661": [[1, 134]], "173662": [[1, 18]], "173663": [[1, 123]], "173664": [[1, 16]], "173692": [[50, 2758]]} \ No newline at end of file diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-173692_2fbinv b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-173692_2fbinv deleted file mode 100644 index c4a14789715d6..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160404-173692_2fbinv +++ /dev/null @@ -1,125 +0,0 @@ -{"169985": [[88, 100]], - "169991": [[1, 24]], - "170000": [[1, 26], [28, 272]], - "170040": [[90, 280], [282, 419]], - "170044": [[1, 94]], - "170249": [[37, 510]], - "170255": [[1, 387]], - "170286": [[77, 262]], - "170292": [[1, 260]], - "170298": [[1, 186]], - "170303": [[1, 22]], - "170304": [[1, 115]], - "170307": [[1, 14]], - "170348": [[58, 256]], - "170354": [[1, 308]], - "170376": [[52, 67]], - "170378": [[1, 5]], - "170380": [[1, 16]], - "170382": [[1, 306]], - "170397": [[1, 347]], - "170406": [[1, 171]], - "170452": [[72, 110]], - "170527": [[44, 93]], - "170722": [[110, 287]], - "170759": [[49, 377]], - "170826": [[50, 312]], - "170842": [[1, 339]], - "170854": [[1, 580]], - "170876": [[1, 522]], - "170896": [[1, 214]], - "170899": [[1, 86]], - "170901": [[1, 200]], - "171050": [[47, 658]], - "171091": [[1, 138]], - "171098": [[1, 10]], - "171102": [[1, 21]], - "171106": [[1, 292]], - "171116": [[1, 2]], - "171117": [[1, 54], [56, 84]], - "171156": [[42, 693]], - "171178": [[1, 1044]], - "171219": [[48, 162]], - "171274": [[88, 148]], - "171282": [[1, 171]], - "171315": [[53, 226]], - "171369": [[42, 162]], - "171446": [[58, 865]], - "171484": [[61, 432]], - "171578": [[47, 974]], - "171812": [[59, 438]], - "171875": [[54, 60]], - "171876": [[1, 541]], - "171879": [[1, 103]], - "171880": [[1, 207]], - "171890": [[1, 43]], - "171895": [[1, 36], [38, 67]], - "171897": [[1, 25], [27, 51], [53, 77], [79, 103], [105, 180], [182, 543]], - "171921": [[51, 152]], - "171926": [[1, 264]], - "172014": [[1, 244]], - "172024": [[1, 79]], - "172033": [[1, 749]], - "172163": [[36, 784]], - "172208": [[61, 200]], - "172252": [[32, 63]], - "172254": [[1, 43]], - "172255": [[1, 40]], - "172268": [[56, 169]], - "172286": [[52, 217]], - "172389": [[34, 460]], - "172399": [[57, 231]], - "172400": [[1, 706]], - "172401": [[1, 148]], - "172411": [[85, 382]], - "172478": [[1, 154]], - "172485": [[41, 544]], - "172488": [[1, 38], [40, 54], [56, 67], [69, 79], [81, 104], [106, 146], [149, 150], [152, 157]], - "172495": [[1, 157]], - "172497": [[1, 25]], - "172507": [[1, 43], [45, 68]], - "172619": [[1, 82]], - "172620": [[1, 495]], - "172630": [[36, 167]], - "172635": [[1, 268]], - "172778": [[48, 97]], - "172791": [[65, 1664]], - "172798": [[1, 35]], - "172799": [[1, 372]], - "172801": [[1, 1144]], - "172802": [[1, 784]], - "172819": [[57, 259]], - "172822": [[1, 2338]], - "172824": [[1, 54]], - "172847": [[62, 131]], - "172865": [[36, 386]], - "172868": [[1, 1970]], - "172949": [[55, 1298]], - "172951": [[1, 56]], - "172952": [[1, 1562]], - "172992": [[52, 79], [81, 327], [329, 363], [365, 954]], - "172998": [[1, 84]], - "172999": [[1, 294]], - "173198": [[49, 823]], - "173236": [[128, 238]], - "173240": [[1, 129]], - "173241": [[1, 764]], - "173243": [[1, 95]], - "173244": [[1, 97]], - "173380": [[75, 218]], - "173381": [[1, 294]], - "173389": [[18, 653]], - "173406": [[37, 286]], - "173430": [[72, 174]], - "173431": [[1, 17]], - "173438": [[32, 67]], - "173439": [[1, 756]], - "173657": [[59, 95]], - "173658": [[1, 112]], - "173659": [[1, 321]], - "173660": [[1, 369]], - "173661": [[1, 134]], - "173662": [[1, 18]], - "173663": [[1, 123]], - "173664": [[1, 16]], - "173692": [[50, 2758]]} diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160405-161312 b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160405-161312 deleted file mode 100644 index 8388ce94e9e08..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_DCSONLY.txt_160405-161312 +++ /dev/null @@ -1 +0,0 @@ -{"160405": [[1, 35]], "160406": [[1, 124]], "160410": [[1, 102]], "160413": [[1, 788]], "160431": [[19, 244]], "160432": [[2, 79]], "160433": [[1, 21]], "160442": [[108, 153]], "160443": [[1, 21]], "160444": [[1, 74]], "160445": [[1, 37]], "160446": [[1, 55]], "160447": [[1, 65]], "160449": [[1, 44]], "160450": [[1, 47]], "160454": [[1, 41]], "160455": [[1, 33]], "160456": [[1, 106]], "160462": [[1, 30]], "160463": [[1, 46]], "160808": [[7, 80]], "160815": [[1, 95]], "160819": [[1, 17], [19, 118]], "160827": [[1, 55]], "160835": [[1, 85], [87, 496], [569, 584]], "160853": [[62, 65]], "160871": [[68, 236]], "160872": [[1, 77]], "160873": [[1, 201]], "160874": [[1, 132]], "160875": [[1, 285]], "160876": [[1, 17]], "160877": [[1, 12], [79, 83]], "160888": [[45, 423]], "160890": [[1, 395]], "160894": [[1, 220]], "160898": [[25, 53]], "160907": [[15, 220]], "160911": [[1, 301]], "160913": [[1, 26]], "160914": [[1, 75]], "160915": [[1, 382]], "160916": [[1, 90]], "160935": [[33, 259]], "160936": [[1, 60]], "160937": [[1, 209]], "160938": [[1, 130]], "160939": [[1, 148]], "160940": [[1, 90]], "160942": [[1, 26]], "160943": [[1, 54]], "160954": [[78, 84]], "160955": [[1, 228]], "160956": [[1, 73]], "160957": [[1, 953]], "160994": [[44, 45]], "160998": [[1, 288]], "161008": [[1, 285]], "161016": [[1, 327]], "161020": [[1, 22]], "161103": [[1, 111]], "161106": [[1, 40]], "161107": [[1, 40]], "161113": [[1, 45]], "161116": [[1, 20]], "161117": [[1, 43]], "161119": [[1, 350]], "161165": [[1, 100]], "161176": [[1, 31]], "161216": [[29, 53]], "161217": [[1, 788]], "161222": [[1, 136]], "161223": [[1, 409]], "161224": [[1, 2]], "161233": [[33, 63]], "161310": [[39, 127]], "161311": [[1, 704]], "161312": [[1, 1027]]} \ No newline at end of file diff --git a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_dummy_wjets.txt b/TopQuarkAnalysis/TopPairBSM/test/datasets/json_dummy_wjets.txt deleted file mode 100644 index 391728d5ee6fd..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/datasets/json_dummy_wjets.txt +++ /dev/null @@ -1,2 +0,0 @@ -{"1": [[1, 10000]] -} diff --git a/TopQuarkAnalysis/TopPairBSM/test/prunedGenParticle_unittest.py b/TopQuarkAnalysis/TopPairBSM/test/prunedGenParticle_unittest.py deleted file mode 100644 index 438d66bf23c00..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/prunedGenParticle_unittest.py +++ /dev/null @@ -1,48 +0,0 @@ -#! /usr/bin/env python - -from __future__ import print_function -import ROOT -import sys -from DataFormats.FWLite import Events, Handle - -files = ["ttbsm_42x_mc.root"] -events = Events (files) -handle1 = Handle ("std::vector") - -# for now, label is just a tuple of strings that is initialized just -# like and edm::InputTag -label1 = ("prunedGenParticles") - -f = ROOT.TFile("prunedGenParticle_unittest_fwlite.root", "RECREATE") -f.cd() - - -# loop over events -i = 0 -for event in events: - i = i + 1 - print('--------- Processing Event ' + str(i)) - # use getByLabel, just like in cmsRun - event.getByLabel (label1, handle1) - # get the product - gens = handle1.product() - - - for igen in range(0,len(gens)) : - gen = gens[igen] - if gen.numberOfDaughters() > 1 : - print('{0:6.0f} : pdgid = {1:6.0f}, status = {2:6.0f}, da0 id = {3:6.0f}, da1 = {4:6.0f}, '.format( - igen, gen.pdgId(), gen.status(), gen.daughter(0).pdgId(), gen.daughter(1).pdgId() - )) - elif gen.numberOfDaughters() > 0 : - print('{0:6.0f} : pdgid = {1:6.0f}, status = {2:6.0f}, da0 id = {3:6.0f}, da1 = {4:6.0f}, '.format( - igen, gen.pdgId(), gen.status(), gen.daughter(0).pdgId(), -9999 - )) - else : - print('{0:6.0f} : pdgid = {1:6.0f}, status = {2:6.0f}, da0 id = {3:6.0f}, da1 = {4:6.0f}, '.format( - igen, gen.pdgId(), gen.status(), -9999, -9999 - )) - -f.cd() - -f.Close() diff --git a/TopQuarkAnalysis/TopPairBSM/test/ttbsm_cfg.py b/TopQuarkAnalysis/TopPairBSM/test/ttbsm_cfg.py deleted file mode 100644 index 11b7f9fbac02a..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/ttbsm_cfg.py +++ /dev/null @@ -1,1961 +0,0 @@ -from __future__ import print_function -# Starting with a skeleton process which gets imported with the following line -from PhysicsTools.PatAlgos.patTemplate_cfg import * - -from PhysicsTools.PatAlgos.tools.coreTools import * - -############################### -####### Parameters ############ -############################### -from FWCore.ParameterSet.VarParsing import VarParsing -options = VarParsing ('python') - - -options.register ('tlbsmTag', - 'tlbsm_53x_v3', - VarParsing.multiplicity.singleton, - VarParsing.varType.string, - 'TLBSM tag use in production') - -options.register ('useData', - False, - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - 'Run this on real data') - -options.register ('globalTag', - '', - VarParsing.multiplicity.singleton, - VarParsing.varType.string, - 'Overwrite default globalTag') - -options.register ('hltProcess', - 'HLT', - VarParsing.multiplicity.singleton, - VarParsing.varType.string, - "HLT process name to use.") - -options.register ('writePFCands', - False, - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - "Output PF candidates") - - -options.register ('writeFat', - False, - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - "Output tracks and PF candidates (and GenParticles for MC)") - -options.register ('writeSimpleInputs', - False, - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - "Write four-vector and ID of PF candidates") - -options.register ('writeGenParticles', - False, - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - "Output GenParticles collection") - -options.register ('forceCheckClosestZVertex', - False, - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - "Force the check of the closest z vertex") - - -options.register ('useSusyFilter', - False, - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - "Use the SUSY event filter") - - -options.register ('useExtraJetColls', - False, - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - "Write extra jet collections for substructure studies") - - -options.register ('usePythia8', - False, - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - "Use status codes from Pythia8 rather than Pythia6") - - -options.register ('usePythia6andPythia8', - False, - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - "Use status codes from Pythia8 and Pythia6") - - -options.register ('runOnFastSim', - False, - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - "Option needed to run on fastsim.") - - -options.register('doJetTauCrossCleaning', - False, - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - "Enable cleaning the jet collections based on taus") - - -options.register ('useExplicitJTA', - False, - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - 'Run the explicit Jet-track association') - -options.parseArguments() - - -if not options.useData : - inputJetCorrLabelAK5PFchs = ('AK5PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute']) - inputJetCorrLabelAK7PFchs = ('AK7PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute']) - - process.source.fileNames = [ - '/store/mc/Summer12_DR53X/TTJets_MassiveBinDECAY_TuneZ2star_8TeV-madgraph-tauola/AODSIM/PU_S10_START53_V7A-v1/0000/0076C8E3-9AE1-E111-917C-003048D439AA.root' - ] - -else : - inputJetCorrLabelAK5PFchs = ('AK5PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']) - inputJetCorrLabelAK7PFchs = ('AK7PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']) - process.source.fileNames = [ - '/store/data/Run2012A/Jet/AOD/22Jan2013-v1/30002/909488FF-8D72-E211-893B-0026189438EF.root' - ] - -#process.source.eventsToProcess = cms.untracked.VEventRange( ['1:86747'] ) - -#process.source.skipEvents = cms.untracked.uint32(17268) - -print(options) - -print('Running AK5 jet corrections: ') -print(inputJetCorrLabelAK5PFchs) - -print('Running AK7 jet corrections: ') -print(inputJetCorrLabelAK7PFchs) - -import sys - - -############################### -####### Global Setup ########## -############################### - -if options.useData : - if options.globalTag is '': - process.GlobalTag.globaltag = cms.string( 'GR_P_V42_AN4::All' ) - else: - process.GlobalTag.globaltag = cms.string( options.globalTag ) -else : - if options.globalTag is '': - process.GlobalTag.globaltag = cms.string( 'START53_V7G::All' ) - else: - process.GlobalTag.globaltag = cms.string( options.globalTag ) - - -from PhysicsTools.PatAlgos.patTemplate_cfg import * - - -## The beam scraping filter __________________________________________________|| -process.noscraping = cms.EDFilter( - "FilterOutScraping", - applyfilter = cms.untracked.bool(True), - debugOn = cms.untracked.bool(False), - numtrack = cms.untracked.uint32(10), - thresh = cms.untracked.double(0.25) - ) - -## The iso-based HBHE noise filter ___________________________________________|| -process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi') - -## The CSC beam halo tight filter ____________________________________________|| -process.load('RecoMET.METAnalyzers.CSCHaloFilter_cfi') - -## The HCAL laser filter _____________________________________________________|| -process.load("RecoMET.METFilters.hcalLaserEventFilter_cfi") -process.hcalLaserEventFilter.vetoByRunEventNumber=cms.untracked.bool(False) -process.hcalLaserEventFilter.vetoByHBHEOccupancy=cms.untracked.bool(True) - -## The ECAL dead cell trigger primitive filter _______________________________|| -process.load('RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi') -## For AOD and RECO recommendation to use recovered rechits -process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag("ecalTPSkimNA") - -## The EE bad SuperCrystal filter ____________________________________________|| -process.load('RecoMET.METFilters.eeBadScFilter_cfi') - -## The Good vertices collection needed by the tracking failure filter ________|| -process.goodVertices = cms.EDFilter( - "VertexSelector", - filter = cms.bool(False), - src = cms.InputTag("offlinePrimaryVertices"), - cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2") -) - -## The tracking failure filter _______________________________________________|| -process.load('RecoMET.METFilters.trackingFailureFilter_cfi') -process.load('RecoMET.METFilters.trackingPOGFilters_cfi') - -# Tracking coherent noise filter -process.manystripclus53X = cms.EDFilter('ByClusterSummaryMultiplicityPairEventFilter', - multiplicityConfig = cms.PSet( - firstMultiplicityConfig = cms.PSet( - clusterSummaryCollection = cms.InputTag("clusterSummaryProducer"), - subDetEnum = cms.int32(5), - subDetVariable = cms.string("pHits") - ), - secondMultiplicityConfig = cms.PSet( - clusterSummaryCollection = cms.InputTag("clusterSummaryProducer"), - subDetEnum = cms.int32(0), - subDetVariable = cms.string("cHits") - ), - ), - cut = cms.string("( mult2 > 20000+7*mult1)") -) - -process.toomanystripclus53X = cms.EDFilter('ByClusterSummaryMultiplicityPairEventFilter', - multiplicityConfig = cms.PSet( - firstMultiplicityConfig = cms.PSet( - clusterSummaryCollection = cms.InputTag("clusterSummaryProducer"), - subDetEnum = cms.int32(5), - subDetVariable = cms.string("pHits") - ), - secondMultiplicityConfig = cms.PSet( - clusterSummaryCollection = cms.InputTag("clusterSummaryProducer"), - subDetEnum = cms.int32(0), - subDetVariable = cms.string("cHits") - ), - ), - cut = cms.string("(mult2>50000) && ( mult2 > 20000+7*mult1)") - ) - -# Tracking TOBTEC fakes filter ## -process.load('RecoMET.METFilters.tobtecfakesfilter_cfi') -# if true, only events passing filter (bad events) will pass -process.tobtecfakesfilter.filter=cms.bool(False) - -## Add the latest Tau discriminators _________________________________________|| -process.load("RecoTauTag.Configuration.RecoPFTauTag_cff") - -# switch on PAT trigger -#from PhysicsTools.PatAlgos.tools.trigTools import switchOnTrigger -#switchOnTrigger( process, hltProcess=options.hltProcess ) - - -############################### -####### DAF PV's ########## -############################### - -pvSrc = 'offlinePrimaryVertices' - -## The good primary vertex filter ____________________________________________|| -process.primaryVertexFilter = cms.EDFilter( - "VertexSelector", - src = cms.InputTag("offlinePrimaryVertices"), - cut = cms.string("!isFake & ndof > 4 & abs(z) <= 24 & position.Rho <= 2"), - filter = cms.bool(True) - ) - - -from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector - -process.goodOfflinePrimaryVertices = cms.EDFilter( - "PrimaryVertexObjectFilter", - filterParams = pvSelector.clone( maxZ = cms.double(24.0), - minNdof = cms.double(4.0) # this is >= 4 - ), - src=cms.InputTag(pvSrc) - ) - - -############################### -########## Gen Setup ########## -############################### - -process.load("RecoJets.Configuration.GenJetParticles_cff") -from RecoJets.JetProducers.ca4GenJets_cfi import ca4GenJets -from RecoJets.JetProducers.ak5GenJets_cfi import ak5GenJets -process.ca8GenJetsNoNu = ca4GenJets.clone( rParam = cms.double(0.8), - src = cms.InputTag("genParticlesForJetsNoNu")) - -process.ak8GenJetsNoNu = ak5GenJets.clone( rParam = cms.double(0.8), - src = cms.InputTag("genParticlesForJetsNoNu")) - - -process.load("TopQuarkAnalysis.TopEventProducers.sequences.ttGenEvent_cff") - -# add the flavor history -process.load("PhysicsTools.HepMCCandAlgos.flavorHistoryPaths_cfi") - - -# prune gen particles -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") -process.prunedGenParticles = cms.EDProducer("GenParticlePruner", - src = cms.InputTag("genParticles"), - select = cms.vstring( - "drop *" - ,"keep status = 3" #keeps particles from the hard matrix element - ,"keep (abs(pdgId) >= 11 & abs(pdgId) <= 16) & status = 1" #keeps e/mu and nus with status 1 - ,"keep (abs(pdgId) = 15) & status = 3" #keeps taus - ) - ) - -if options.usePythia8 : - process.prunedGenParticles.select = cms.vstring( - "drop *" - ,"keep status = 21" #keeps particles from the hard matrix element - ,"keep status = 22" #keeps particles from the hard matrix element - ,"keep status = 23" #keeps particles from the hard matrix element - ,"keep (abs(pdgId) >= 11 & abs(pdgId) <= 16) & status = 1" #keeps e/mu and nus with status 1 - ,"keep (abs(pdgId) = 15) & (status = 21 || status = 22 || status = 23) " #keeps taus - ) -if options.usePythia6andPythia8 : - process.prunedGenParticles.select = cms.vstring( - "drop *" - ,"keep status = 3" #keeps particles from the hard matrix element - ,"keep status = 21" #keeps particles from the hard matrix element - ,"keep status = 22" #keeps particles from the hard matrix element - ,"keep status = 23" #keeps particles from the hard matrix element - ,"keep (abs(pdgId) >= 11 & abs(pdgId) <= 16) & status = 1" #keeps e/mu and nus with status 1 - ,"keep (abs(pdgId) = 15) & (status = 3 || status = 21 || status = 22 || status = 23)" #keeps taus - ) - - -## process.prunedGenParticles = cms.EDProducer("GenParticlePruner", -## src = cms.InputTag("genParticles"), -## select = cms.vstring( -## "drop *" -## ,"keep++ (abs(pdgId) =6) " -## ) -## ) - -############################### -#### Jet RECO includes ######## -############################### - -from RecoJets.JetProducers.SubJetParameters_cfi import SubJetParameters -from RecoJets.JetProducers.PFJetParameters_cfi import * -from RecoJets.JetProducers.CaloJetParameters_cfi import * -from RecoJets.JetProducers.AnomalousCellParameters_cfi import * -from RecoJets.JetProducers.CATopJetParameters_cfi import * -from RecoJets.JetProducers.GenJetParameters_cfi import * - - -############################### -########## PF Setup ########### -############################### - -# Default PF2PAT with AK5 jets. Make sure to turn ON the L1fastjet stuff. -from PhysicsTools.PatAlgos.tools.pfTools import * -postfix = "PFlow" -usePF2PAT(process,runPF2PAT=True, jetAlgo='AK5', runOnMC=not options.useData, postfix=postfix, - jetCorrections=inputJetCorrLabelAK5PFchs, pvCollection=cms.InputTag('goodOfflinePrimaryVertices'), typeIMetCorrections=True) -if not options.forceCheckClosestZVertex : - process.pfPileUpPFlow.checkClosestZVertex = False - -# change the cone size of electron isolation to 0.3 as default. -process.pfIsolatedElectronsPFlow.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFIdPFlow")) -process.pfIsolatedElectronsPFlow.deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFIdPFlow") -process.pfIsolatedElectronsPFlow.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("elPFIsoValueNeutral03PFIdPFlow"), cms.InputTag("elPFIsoValueGamma03PFIdPFlow")) - -process.pfElectronsPFlow.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFIdPFlow")) -process.pfElectronsPFlow.deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFIdPFlow" ) -process.pfElectronsPFlow.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag( "elPFIsoValueNeutral03PFIdPFlow"), cms.InputTag("elPFIsoValueGamma03PFIdPFlow")) - -process.patElectronsPFlow.isolationValues = cms.PSet( - pfChargedHadrons = cms.InputTag("elPFIsoValueCharged03PFIdPFlow"), - pfChargedAll = cms.InputTag("elPFIsoValueChargedAll03PFIdPFlow"), - pfPUChargedHadrons = cms.InputTag("elPFIsoValuePU03PFIdPFlow"), - pfNeutralHadrons = cms.InputTag("elPFIsoValueNeutral03PFIdPFlow"), - pfPhotons = cms.InputTag("elPFIsoValueGamma03PFIdPFlow") - ) - -postfixLoose = "PFlowLoose" -usePF2PAT(process,runPF2PAT=True, jetAlgo='AK5', runOnMC=not options.useData, postfix=postfixLoose, - jetCorrections=inputJetCorrLabelAK5PFchs, pvCollection=cms.InputTag('goodOfflinePrimaryVertices'), typeIMetCorrections=True) -if not options.forceCheckClosestZVertex : - process.pfPileUpPFlowLoose.checkClosestZVertex = False - - -# change the cone size of electron isolation to 0.3 as default. -process.pfIsolatedElectronsPFlowLoose.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFIdPFlowLoose")) -process.pfIsolatedElectronsPFlowLoose.deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFIdPFlowLoose") -process.pfIsolatedElectronsPFlowLoose.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("elPFIsoValueNeutral03PFIdPFlowLoose"), cms.InputTag("elPFIsoValueGamma03PFIdPFlowLoose")) - -process.pfElectronsPFlowLoose.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFIdPFlowLoose")) -process.pfElectronsPFlowLoose.deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFIdPFlowLoose" ) -process.pfElectronsPFlowLoose.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag( "elPFIsoValueNeutral03PFIdPFlowLoose"), cms.InputTag("elPFIsoValueGamma03PFIdPFlowLoose")) - -process.patElectronsPFlowLoose.isolationValues = cms.PSet( - pfChargedHadrons = cms.InputTag("elPFIsoValueCharged03PFIdPFlowLoose"), - pfChargedAll = cms.InputTag("elPFIsoValueChargedAll03PFIdPFlowLoose"), - pfPUChargedHadrons = cms.InputTag("elPFIsoValuePU03PFIdPFlowLoose"), - pfNeutralHadrons = cms.InputTag("elPFIsoValueNeutral03PFIdPFlowLoose"), - pfPhotons = cms.InputTag("elPFIsoValueGamma03PFIdPFlowLoose") - ) - -# enable/disable tau cleaning -if not options.doJetTauCrossCleaning: - # if jetCrossCleaning is false, we want to disable - # the cross cleaning (which is on by default) - getattr(process,"pfNoTau"+postfix).enable = False - getattr(process,"pfNoTau"+postfixLoose).enable = False -else: - getattr(process,"pfNoTau"+postfix).enable = False - getattr(process,"pfNoTau"+postfixLoose).enable = False - -# Set up "loose" leptons. - -process.pfIsolatedMuonsPFlowLoose.isolationCut = cms.double(999.0) -process.pfIsolatedElectronsPFlowLoose.isolationCut = cms.double(999.0) -process.patMuonsPFlowLoose.pfMuonSource = "pfMuonsPFlowLoose" -process.patElectronsPFlowLoose.pfElectronSource = "pfElectronsPFlowLoose" - -# Keep additional PF information for taus -# embed in AOD externally stored leading PFChargedHadron candidate -process.patTausPFlow.embedLeadPFChargedHadrCand = cms.bool(True) -# embed in AOD externally stored signal PFChargedHadronCandidates -process.patTausPFlow.embedSignalPFChargedHadrCands = cms.bool(True) -# embed in AOD externally stored signal PFGammaCandidates -process.patTausPFlow.embedSignalPFGammaCands = cms.bool(True) -# embed in AOD externally stored isolation PFChargedHadronCandidates -process.patTausPFlow.embedIsolationPFChargedHadrCands = cms.bool(True) -# embed in AOD externally stored isolation PFGammaCandidates -process.patTausPFlow.embedIsolationPFGammaCands = cms.bool(True) -# embed in AOD externally stored leading PFChargedHadron candidate -process.patTaus.embedLeadPFChargedHadrCand = cms.bool(True) -# embed in AOD externally stored signal PFChargedHadronCandidates -process.patTaus.embedSignalPFChargedHadrCands = cms.bool(True) -# embed in AOD externally stored signal PFGammaCandidates -process.patTaus.embedSignalPFGammaCands = cms.bool(True) -# embed in AOD externally stored isolation PFChargedHadronCandidates -process.patTaus.embedIsolationPFChargedHadrCands = cms.bool(True) -# embed in AOD externally stored isolation PFGammaCandidates -process.patTaus.embedIsolationPFGammaCands = cms.bool(True) - -# turn to false when running on data -if options.useData : - removeMCMatching( process, ['All'] ) - -############################### -###### Electron ID ############ -############################### - -process.load('EGamma.EGammaAnalysisTools.electronIdMVAProducer_cfi') -process.eidMVASequence = cms.Sequence( process.mvaTrigV0 + process.mvaNonTrigV0 ) -#Electron ID -process.patElectronsPFlow.electronIDSources.mvaTrigV0 = cms.InputTag("mvaTrigV0") -process.patElectronsPFlow.electronIDSources.mvaNonTrigV0 = cms.InputTag("mvaNonTrigV0") -process.patPF2PATSequencePFlow.replace( process.patElectronsPFlow, process.eidMVASequence * process.patElectronsPFlow ) - -process.patElectronsPFlowLoose.electronIDSources.mvaTrigV0 = cms.InputTag("mvaTrigV0") -process.patElectronsPFlowLoose.electronIDSources.mvaNonTrigV0 = cms.InputTag("mvaNonTrigV0") -process.patPF2PATSequencePFlowLoose.replace( process.patElectronsPFlowLoose, process.eidMVASequence * process.patElectronsPFlowLoose ) - -#Convesion Rejection -# this should be your last selected electron collection name since currently index is used to match with electron later. We can fix this using reference pointer. -process.patConversionsPFlow = cms.EDProducer("PATConversionProducer", - electronSource = cms.InputTag("selectedPatElectronsPFlow") - ) -process.patPF2PATSequencePFlow += process.patConversionsPFlow -process.patConversionsPFlowLoose = cms.EDProducer("PATConversionProducer", - electronSource = cms.InputTag("selectedPatElectronsPFlowLoose") - ) -process.patPF2PATSequencePFlowLoose += process.patConversionsPFlowLoose - - -############################### -###### Bare KT 0.6 jets ####### -############################### - -from RecoJets.Configuration.RecoPFJets_cff import kt6PFJets -process.kt6PFJetsForIsolation = kt6PFJets.clone( - rParam = 0.6, - doRhoFastjet = True, - Rho_EtaMax = cms.double(2.5), - ) - -############################### -###### Bare CA 0.8 jets ####### -############################### -from RecoJets.JetProducers.ca4PFJets_cfi import ca4PFJets -process.ca8PFJetsPFlow = ca4PFJets.clone( - rParam = cms.double(0.8), - src = cms.InputTag('pfNoElectron'+postfix), - doAreaFastjet = cms.bool(True), - doRhoFastjet = cms.bool(True), - Rho_EtaMax = cms.double(6.0), - Ghost_EtaMax = cms.double(7.0) - ) - - - -############################### -###### AK 0.7 jets ############ -############################### -process.ak7PFlow = process.pfJetsPFlow.clone( - rParam = cms.double(0.7) - ) - - -############################### -###### AK 0.8 jets ############ -############################### -process.ak8PFlow = process.pfJetsPFlow.clone( - rParam = cms.double(0.8) - ) - - -############################### -###### AK 0.5 jets groomed #### -############################### - -from RecoJets.JetProducers.ak5PFJetsTrimmed_cfi import ak5PFJetsTrimmed -process.ak5TrimmedPFlow = ak5PFJetsTrimmed.clone( - src = process.pfJetsPFlow.src, - doAreaFastjet = cms.bool(True) - ) - -from RecoJets.JetProducers.ak5PFJetsFiltered_cfi import ak5PFJetsFiltered -process.ak5FilteredPFlow = ak5PFJetsFiltered.clone( - src = process.pfJetsPFlow.src, - doAreaFastjet = cms.bool(True) - ) - -from RecoJets.JetProducers.ak5PFJetsPruned_cfi import ak5PFJetsPruned -process.ak5PrunedPFlow = ak5PFJetsPruned.clone( - src = process.pfJetsPFlow.src, - doAreaFastjet = cms.bool(True) - ) - - - -############################### -###### AK 0.7 jets groomed #### -############################### - -process.ak7TrimmedPFlow = process.ak5TrimmedPFlow.clone( - src = process.pfJetsPFlow.src, - rParam = cms.double(0.7) - ) - -process.ak7FilteredPFlow = process.ak5FilteredPFlow.clone( - src = process.pfJetsPFlow.src, - rParam = cms.double(0.7) - ) - -process.ak7PrunedPFlow = process.ak5PrunedPFlow.clone( - src = process.pfJetsPFlow.src, - rParam = cms.double(0.7) - ) - - -process.ak7TrimmedGenJetsNoNu = ak5GenJets.clone( - rParam = cms.double(0.7), - src = cms.InputTag("genParticlesForJetsNoNu"), - useTrimming = cms.bool(True), - rFilt = cms.double(0.2), - trimPtFracMin = cms.double(0.03), - ) - -process.ak7FilteredGenJetsNoNu = ak5GenJets.clone( - rParam = cms.double(0.7), - src = cms.InputTag("genParticlesForJetsNoNu"), - useFiltering = cms.bool(True), - nFilt = cms.int32(3), - rFilt = cms.double(0.3), - writeCompound = cms.bool(True), - jetCollInstanceName=cms.string("SubJets") - ) - - - -process.ak7PrunedGenJetsNoNu = ak5GenJets.clone( - SubJetParameters, - rParam = cms.double(0.7), - src = cms.InputTag("genParticlesForJetsNoNu"), - usePruning = cms.bool(True), - writeCompound = cms.bool(True), - jetCollInstanceName=cms.string("SubJets") - ) - - - -############################### -###### AK 0.8 jets groomed #### -############################### - -process.ak8TrimmedPFlow = process.ak5TrimmedPFlow.clone( - src = process.pfJetsPFlow.src, - rParam = cms.double(0.8) - ) - -process.ak8FilteredPFlow = process.ak5FilteredPFlow.clone( - src = process.pfJetsPFlow.src, - rParam = cms.double(0.8) - ) - -process.ak8PrunedPFlow = process.ak5PrunedPFlow.clone( - src = process.pfJetsPFlow.src, - rParam = cms.double(0.8) - ) - -############################### -###### CA8 Pruning Setup ###### -############################### - - -# Pruned PF Jets -process.caPrunedPFlow = process.ak5PrunedPFlow.clone( - jetAlgorithm = cms.string("CambridgeAachen"), - rParam = cms.double(0.8) -) - - -process.caPrunedGen = process.ca8GenJetsNoNu.clone( - SubJetParameters, - usePruning = cms.bool(True), - useExplicitGhosts = cms.bool(True), - writeCompound = cms.bool(True), - jetCollInstanceName=cms.string("SubJets") -) - -############################### -###### CA8 Filtered Setup ##### -############################### - - -# Filtered PF Jets -process.caFilteredPFlow = ak5PFJetsFiltered.clone( - src = cms.InputTag('pfNoElectron'+postfix), - jetAlgorithm = cms.string("CambridgeAachen"), - rParam = cms.double(1.5), - writeCompound = cms.bool(True), - doAreaFastjet = cms.bool(True), - jetPtMin = cms.double(100.0) -) - -from RecoJets.JetProducers.ak5PFJetsFiltered_cfi import ak5PFJetsMassDropFiltered -process.caMassDropFilteredPFlow = ak5PFJetsMassDropFiltered.clone( - src = cms.InputTag('pfNoElectron'+postfix), - jetAlgorithm = cms.string("CambridgeAachen"), - rParam = cms.double(1.5), - writeCompound = cms.bool(True), - doAreaFastjet = cms.bool(True), - jetPtMin = cms.double(100.0) -) - - -process.caFilteredGenJetsNoNu = process.ca8GenJetsNoNu.clone( - nFilt = cms.int32(2), - rFilt = cms.double(0.3), - useFiltering = cms.bool(True), - useExplicitGhosts = cms.bool(True), - writeCompound = cms.bool(True), - rParam = cms.double(1.5), - jetCollInstanceName=cms.string("SubJets"), - jetPtMin = cms.double(100.0) -) - -process.caMassDropFilteredGenJetsNoNu = process.caFilteredGenJetsNoNu.clone( - src = cms.InputTag('genParticlesForJetsNoNu'), - useMassDropTagger = cms.bool(True), - muCut = cms.double(0.667), - yCut = cms.double(0.08) -) - - - -############################### -#### CATopTag Setup ########### -############################### - -# CATopJet PF Jets -# with adjacency -process.caTopTagPFlow = cms.EDProducer( - "CATopJetProducer", - PFJetParameters.clone( src = cms.InputTag('pfNoElectron'+postfix), - doAreaFastjet = cms.bool(True), - doRhoFastjet = cms.bool(False), - jetPtMin = cms.double(100.0) - ), - AnomalousCellParameters, - CATopJetParameters, - jetAlgorithm = cms.string("CambridgeAachen"), - rParam = cms.double(0.8), - writeCompound = cms.bool(True) - ) - -process.caHEPTopTagPFlow = process.caTopTagPFlow.clone( - rParam = cms.double(1.5), - tagAlgo = cms.int32(2) -) - - -process.CATopTagInfosPFlow = cms.EDProducer("CATopJetTagger", - src = cms.InputTag("caTopTagPFlow"), - TopMass = cms.double(171), - TopMassMin = cms.double(0.), - TopMassMax = cms.double(250.), - WMass = cms.double(80.4), - WMassMin = cms.double(0.0), - WMassMax = cms.double(200.0), - MinMassMin = cms.double(0.0), - MinMassMax = cms.double(200.0), - verbose = cms.bool(False) - ) - -process.CATopTagInfosHEPTopTagPFlow = process.CATopTagInfosPFlow.clone( - src = cms.InputTag("caHEPTopTagPFlow") -) - -process.caTopTagGen = cms.EDProducer( - "CATopJetProducer", - GenJetParameters.clone(src = cms.InputTag("genParticlesForJetsNoNu"), - doAreaFastjet = cms.bool(False), - doRhoFastjet = cms.bool(False)), - AnomalousCellParameters, - CATopJetParameters, - jetAlgorithm = cms.string("CambridgeAachen"), - rParam = cms.double(0.8), - writeCompound = cms.bool(True) - ) - -process.caHEPTopTagGen = process.caTopTagGen.clone( - rParam = cms.double(1.5) -) - -process.CATopTagInfosGen = cms.EDProducer("CATopJetTagger", - src = cms.InputTag("caTopTagGen"), - TopMass = cms.double(171), - TopMassMin = cms.double(0.), - TopMassMax = cms.double(250.), - WMass = cms.double(80.4), - WMassMin = cms.double(0.0), - WMassMax = cms.double(200.0), - MinMassMin = cms.double(0.0), - MinMassMax = cms.double(200.0), - verbose = cms.bool(False) - ) - - - -# CATopJet PF Jets - -for ipostfix in [postfix] : - for module in ( - getattr(process,"ca8PFJets" + ipostfix), - getattr(process,"CATopTagInfos" + ipostfix), - getattr(process,"CATopTagInfosHEPTopTag" + ipostfix), - getattr(process,"caTopTag" + ipostfix), - getattr(process,"caHEPTopTag" + ipostfix), - getattr(process,"caPruned" + ipostfix), - getattr(process,"caFiltered" + ipostfix), - getattr(process,"caMassDropFiltered" + ipostfix) - ) : - getattr(process,"patPF2PATSequence"+ipostfix).replace( getattr(process,"pfNoElectron"+ipostfix), getattr(process,"pfNoElectron"+ipostfix)*module ) - - - if options.useExtraJetColls : - for module in ( - getattr(process,"ak5Trimmed" + ipostfix), - getattr(process,"ak5Filtered" + ipostfix), - getattr(process,"ak5Pruned" + ipostfix), - getattr(process,"ak7Trimmed" + ipostfix), - getattr(process,"ak7Filtered" + ipostfix), - getattr(process,"ak7Pruned" + ipostfix), - getattr(process,"ak7" + ipostfix), - getattr(process,"ak8Trimmed" + ipostfix), - getattr(process,"ak8Filtered" + ipostfix), - getattr(process,"ak8Pruned" + ipostfix), - getattr(process,"ak8" + ipostfix) - ) : - getattr(process,"patPF2PATSequence"+ipostfix).replace( getattr(process,"pfNoElectron"+ipostfix), getattr(process,"pfNoElectron"+ipostfix)*module ) - - - -# Use the good primary vertices everywhere. -for imod in [process.patMuonsPFlow, - process.patMuonsPFlowLoose, - process.patElectronsPFlow, - process.patElectronsPFlowLoose, - process.patMuons, - process.patElectrons] : - imod.pvSrc = "goodOfflinePrimaryVertices" - imod.embedTrack = True - - -addJetCollection(process, - cms.InputTag('ca8PFJetsPFlow'), - 'CA8', 'PF', - doJTA=True, - doBTagging=True, - jetCorrLabel=inputJetCorrLabelAK7PFchs, - doType1MET=False, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = cms.InputTag("ca8GenJetsNoNu"), - doJetID = False - ) - - -addJetCollection(process, - cms.InputTag('caPrunedPFlow'), - 'CA8Pruned', 'PF', - doJTA=False, - doBTagging=True, - jetCorrLabel=inputJetCorrLabelAK7PFchs, - doType1MET=False, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = cms.InputTag("ca8GenJetsNoNu"), - doJetID = False - ) - - -addJetCollection(process, - cms.InputTag('caPrunedPFlow','SubJets'), - 'CA8PrunedSubjets', 'PF', - doJTA=True, - doBTagging=True, - jetCorrLabel=inputJetCorrLabelAK5PFchs, - doType1MET=False, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection=cms.InputTag('caPrunedGen','SubJets'), - doJetID=False - ) - -addJetCollection(process, - cms.InputTag('caTopTagPFlow'), - 'CATopTag', 'PF', - doJTA=True, - doBTagging=True, - jetCorrLabel=inputJetCorrLabelAK7PFchs, - doType1MET=False, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = cms.InputTag("ca8GenJetsNoNu"), - doJetID = False - ) - -addJetCollection(process, - cms.InputTag('caTopTagPFlow', 'caTopSubJets'), - 'CATopTagSubjets', 'PF', - doJTA=True, - doBTagging=True, - jetCorrLabel=inputJetCorrLabelAK5PFchs, - doType1MET=False, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = None, - doJetID = False - ) - - -addJetCollection(process, - cms.InputTag('caHEPTopTagPFlow'), - 'CAHEPTopTag', 'PF', - doJTA=True, - doBTagging=True, - jetCorrLabel=inputJetCorrLabelAK7PFchs, - doType1MET=False, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = None, - doJetID = False - ) - -addJetCollection(process, - cms.InputTag('caHEPTopTagPFlow', 'caTopSubJets'), - 'CAHEPTopTagSubjets', 'PF', - doJTA=True, - doBTagging=True, - jetCorrLabel=inputJetCorrLabelAK5PFchs, - doType1MET=False, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = None, - doJetID = False - ) - -addJetCollection(process, - cms.InputTag('caFilteredPFlow'), - 'CA15Filtered', 'PF', - doJTA=False, - doBTagging=False, - jetCorrLabel=inputJetCorrLabelAK7PFchs, - doType1MET=True, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = cms.InputTag("ca8GenJetsNoNu"), - doJetID = False - ) - - -addJetCollection(process, - cms.InputTag('caMassDropFilteredPFlow'), - 'CA15MassDropFiltered', 'PF', - doJTA=True, - doBTagging=True, - jetCorrLabel=inputJetCorrLabelAK7PFchs, - doType1MET=False, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = None, - doJetID = False - ) - - -addJetCollection(process, - cms.InputTag('caMassDropFilteredPFlow', 'SubJets'), # Jet collection; must be already in the event when patLayer0 sequence is executed - 'CA15MassDropFilteredSubjets', 'PF', - doJTA=True, # Run Jet-Track association & JetCharge - doBTagging=True, # Run b-tagging - jetCorrLabel=inputJetCorrLabelAK5PFchs, - doType1MET=False, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = None, - doJetID = False - ) - -############################################################## -### For subjet b tagging with explicit jet-track association -### -### This requires the following additional packages -### -### addpkg RecoJets/JetAssociationAlgorithms V03-01-01-00 -### addpkg RecoJets/JetAssociationProducers V03-02-01 - -### Substitute the standard jet-track association with the explicit jet-track association -### (this will keep the original module names unchanged so might be a bit misleading at first glance) - -if options.useExplicitJTA : - for xtrplabel in ['CA8PrunedSubjets', 'CATopTagSubjets', 'CAHEPTopTagSubjets' , 'CA15MassDropFilteredSubjets'] : - if hasattr( process, 'jetTracksAssociatorAtVertex' + xtrplabel + 'PF' ): - from RecoJets.JetAssociationProducers.ak5JTA_cff import ak5JetTracksAssociatorExplicit - m = 'jetTracksAssociatorAtVertex' + xtrplabel + 'PF' - print('Switching ' + m + ' to explicit jet-track association') - setattr( process, m, ak5JetTracksAssociatorExplicit.clone(jets = getattr(getattr(process,m),'jets')) ) - -### -############################################################## - - - -if options.useExtraJetColls: - - - addJetCollection(process, - cms.InputTag('ak5PrunedPFlow'), - 'AK5Pruned', 'PF', - doJTA=False, - doBTagging=False, - jetCorrLabel=inputJetCorrLabelAK5PFchs, - doType1MET=True, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = cms.InputTag("ak5GenJetsNoNu"), - doJetID = False - ) - - - addJetCollection(process, - cms.InputTag('ak5FilteredPFlow'), - 'AK5Filtered', 'PF', - doJTA=False, - doBTagging=False, - jetCorrLabel=inputJetCorrLabelAK5PFchs, - doType1MET=True, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = cms.InputTag("ak5GenJetsNoNu"), - doJetID = False - ) - - addJetCollection(process, - cms.InputTag('ak5TrimmedPFlow'), - 'AK5Trimmed', 'PF', - doJTA=False, - doBTagging=False, - jetCorrLabel=inputJetCorrLabelAK5PFchs, - doType1MET=True, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = cms.InputTag("ak5GenJetsNoNu"), - doJetID = False - ) - - - addJetCollection(process, - cms.InputTag('ak7PFlow'), - 'AK7', 'PF', - doJTA=False, - doBTagging=False, - jetCorrLabel=inputJetCorrLabelAK7PFchs, - doType1MET=True, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = cms.InputTag("ak7GenJetsNoNu"), - doJetID = False - ) - - addJetCollection(process, - cms.InputTag('ak7PrunedPFlow'), - 'AK7Pruned', 'PF', - doJTA=False, - doBTagging=False, - jetCorrLabel=inputJetCorrLabelAK7PFchs, - doType1MET=True, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = cms.InputTag("ak7GenJetsNoNu"), - doJetID = False - ) - - - addJetCollection(process, - cms.InputTag('ak7FilteredPFlow'), - 'AK7Filtered', 'PF', - doJTA=False, - doBTagging=False, - jetCorrLabel=inputJetCorrLabelAK7PFchs, - doType1MET=True, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = cms.InputTag("ak7GenJetsNoNu"), - doJetID = False - ) - - addJetCollection(process, - cms.InputTag('ak7TrimmedPFlow'), - 'AK7Trimmed', 'PF', - doJTA=False, - doBTagging=False, - jetCorrLabel=inputJetCorrLabelAK7PFchs, - doType1MET=True, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = cms.InputTag("ak7GenJetsNoNu"), - doJetID = False - ) - - - - - - addJetCollection(process, - cms.InputTag('ak8PFlow'), - 'AK8', 'PF', - doJTA=False, - doBTagging=False, - jetCorrLabel=inputJetCorrLabelAK7PFchs, - doType1MET=True, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = cms.InputTag("ak8GenJetsNoNu"), - doJetID = False - ) - - addJetCollection(process, - cms.InputTag('ak8PrunedPFlow'), - 'AK8Pruned', 'PF', - doJTA=False, - doBTagging=False, - jetCorrLabel=inputJetCorrLabelAK7PFchs, - doType1MET=True, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = cms.InputTag("ak8GenJetsNoNu"), - doJetID = False - ) - - - addJetCollection(process, - cms.InputTag('ak8FilteredPFlow'), - 'AK8Filtered', 'PF', - doJTA=False, - doBTagging=False, - jetCorrLabel=inputJetCorrLabelAK7PFchs, - doType1MET=True, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = cms.InputTag("ak8GenJetsNoNu"), - doJetID = False - ) - - addJetCollection(process, - cms.InputTag('ak8TrimmedPFlow'), - 'AK8Trimmed', 'PF', - doJTA=False, - doBTagging=False, - jetCorrLabel=inputJetCorrLabelAK7PFchs, - doType1MET=True, - doL1Cleaning=False, - doL1Counters=False, - genJetCollection = cms.InputTag("ak8GenJetsNoNu"), - doJetID = False - ) - -switchJetCollection(process,cms.InputTag('ak5PFJets'), - doJTA = False, - doBTagging = False, - jetCorrLabel = inputJetCorrLabelAK5PFchs, - doType1MET = True, - genJetCollection=cms.InputTag("ak5GenJetsNoNu"), - doJetID = False - ) - -for icorr in [process.patJetCorrFactors, - process.patJetCorrFactorsCATopTagPF, - process.patJetCorrFactorsCAHEPTopTagPF, - process.patJetCorrFactorsCA8PrunedPF, - process.patJetCorrFactorsCA15FilteredPF, - process.patJetCorrFactorsCA15MassDropFilteredPF, - process.patJetCorrFactorsCATopTagSubjetsPF, - process.patJetCorrFactorsCAHEPTopTagSubjetsPF, - process.patJetCorrFactorsCA8PrunedSubjetsPF, - process.patJetCorrFactorsCA15MassDropFilteredSubjetsPF, - process.patJetCorrFactorsCA8PF ] : - icorr.rho = cms.InputTag("kt6PFJets", "rho") - - -if options.useExtraJetColls: - for icorr in [process.patJetCorrFactorsAK5PrunedPF, - process.patJetCorrFactorsAK5FilteredPF, - process.patJetCorrFactorsAK5TrimmedPF, - process.patJetCorrFactorsAK7PF, - process.patJetCorrFactorsAK7PrunedPF, - process.patJetCorrFactorsAK7FilteredPF, - process.patJetCorrFactorsAK7TrimmedPF, - process.patJetCorrFactorsAK8PF, - process.patJetCorrFactorsAK8PrunedPF, - process.patJetCorrFactorsAK8FilteredPF, - process.patJetCorrFactorsAK8TrimmedPF] : - icorr.rho = cms.InputTag("kt6PFJets", "rho") - - - -############################### -### TagInfo and Matching Setup# -############################### - -# Do some configuration of the jet substructure things -for jetcoll in (process.patJetsPFlow, - process.patJets, - process.patJetsCA8PF, - process.patJetsCA8PrunedPF, - process.patJetsCATopTagPF, - process.patJetsCAHEPTopTagPF, - process.patJetsCA15FilteredPF, - process.patJetsCA15MassDropFilteredPF, - process.patJetsCA8PrunedSubjetsPF, - process.patJetsCATopTagSubjetsPF, - process.patJetsCAHEPTopTagSubjetsPF, - process.patJetsCA15MassDropFilteredSubjetsPF - ) : - if options.useData == False : - jetcoll.embedGenJetMatch = False - jetcoll.getJetMCFlavour = True - jetcoll.addGenPartonMatch = True - # Add the calo towers and PFCandidates. - # I'm being a little tricksy here, because I only - # actually keep the products if the "writeFat" switch - # is on. However, this allows for overlap checking - # with the Refs so satisfies most use cases without - # having to add to the object size - jetcoll.addBTagInfo = False - jetcoll.embedCaloTowers = True - if not options.writeFat and not options.writePFCands : - jetcoll.embedPFCandidates = True - -# Add CATopTag and b-tag info... piggy-backing on b-tag functionality -process.patJetsPFlow.addBTagInfo = True -process.patJetsCATopTagPF.addBTagInfo = True -process.patJetsCAHEPTopTagPF.addBTagInfo = True -process.patJetsCA8PrunedPF.addBTagInfo = True -process.patJetsCA8PrunedSubjetsPF.addBTagInfo = True -process.patJetsCA15MassDropFilteredSubjetsPF.addBTagInfo = True -process.patJetsCATopTagSubjetsPF.addBTagInfo = True -process.patJetsCAHEPTopTagSubjetsPF.addBTagInfo = True - - -process.patJetsCA8PrunedSubjetsPF.embedPFCandidates = False - -# Do some configuration of the jet substructure things -if options.useExtraJetColls: - for jetcoll in (process.patJetsAK5TrimmedPF, - process.patJetsAK5PrunedPF, - process.patJetsAK5FilteredPF, - process.patJetsAK7PF, - process.patJetsAK7TrimmedPF, - process.patJetsAK7PrunedPF, - process.patJetsAK7FilteredPF, - process.patJetsAK8PF, - process.patJetsAK8TrimmedPF, - process.patJetsAK8PrunedPF, - process.patJetsAK8FilteredPF - ) : - if options.useData == False : - jetcoll.embedGenJetMatch = False - jetcoll.getJetMCFlavour = True - jetcoll.addGenPartonMatch = True - # Add the calo towers and PFCandidates. - # I'm being a little tricksy here, because I only - # actually keep the products if the "writeFat" switch - # is on. However, this allows for overlap checking - # with the Refs so satisfies most use cases without - # having to add to the object size - jetcoll.addBTagInfo = False - jetcoll.embedCaloTowers = True - if not options.writeFat and not options.writePFCands : - jetcoll.embedPFCandidates = True - - - - -################################################# -#### Fix the PV collections for the future ###### -################################################# -for module in [process.patJetCorrFactors, - process.patJetCorrFactorsPFlow, - process.patJetCorrFactorsCATopTagPF, - process.patJetCorrFactorsCAHEPTopTagPF, - process.patJetCorrFactorsCA8PrunedPF, - process.patJetCorrFactorsCA15FilteredPF, - process.patJetCorrFactorsCA15MassDropFilteredPF, - process.patJetCorrFactorsCATopTagSubjetsPF, - process.patJetCorrFactorsCAHEPTopTagSubjetsPF, - process.patJetCorrFactorsCA8PrunedSubjetsPF, - process.patJetCorrFactorsCA15MassDropFilteredSubjetsPF, - process.patJetCorrFactorsCA8PF - ]: - module.primaryVertices = "goodOfflinePrimaryVertices" - - -if options.useExtraJetColls: - for module in [process.patJetCorrFactorsAK5TrimmedPF, - process.patJetCorrFactorsAK5PrunedPF, - process.patJetCorrFactorsAK5FilteredPF, - process.patJetCorrFactorsAK7PF, - process.patJetCorrFactorsAK7TrimmedPF, - process.patJetCorrFactorsAK7PrunedPF, - process.patJetCorrFactorsAK7FilteredPF, - process.patJetCorrFactorsAK8PF, - process.patJetCorrFactorsAK8TrimmedPF, - process.patJetCorrFactorsAK8PrunedPF, - process.patJetCorrFactorsAK8FilteredPF - ]: - module.primaryVertices = "goodOfflinePrimaryVertices" - - -############################### -#### Selections Setup ######### -############################### - -# AK5 Jets -process.selectedPatJetsPFlow.cut = cms.string("pt > 5") -process.selectedPatJetsPFlowLoose.cut = cms.string("pt > 20") -process.patJetsPFlow.addTagInfos = True -process.patJetsPFlow.tagInfoSources = cms.VInputTag( - cms.InputTag("secondaryVertexTagInfosAODPFlow") - ) -process.patJetsPFlow.userData.userFunctions = cms.vstring( "? hasTagInfo('secondaryVertex') && tagInfoSecondaryVertex('secondaryVertex').nVertices() > 0 ? " - "tagInfoSecondaryVertex('secondaryVertex').secondaryVertex(0).p4().mass() : 0") -process.patJetsPFlow.userData.userFunctionLabels = cms.vstring('secvtxMass') - -# CA8 jets -process.selectedPatJetsCA8PF.cut = cms.string("pt > 20") - -# CA8 Pruned jets -process.selectedPatJetsCA8PrunedPF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") -process.patJetsCA8PrunedSubjetsPF.addTagInfos = False -#process.selectedPatJetsCA8PrunedSubjetsPF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") - - -# CA8 TopJets -process.selectedPatJetsCATopTagPF.cut = cms.string("pt > 150 & abs(rapidity) < 2.5") -#process.selectedPatJetsCATopTagSubjetsPF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") -process.patJetsCATopTagPF.addTagInfos = True -process.patJetsCATopTagPF.tagInfoSources = cms.VInputTag( - cms.InputTag('CATopTagInfosPFlow') - ) - -# CA1.5 HEPTopTagTopJets -process.selectedPatJetsCAHEPTopTagPF.cut = cms.string("pt > 150 & abs(rapidity) < 2.5") -#process.selectedPatJetsCAHEPTopTagSubjetsPF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") -process.patJetsCAHEPTopTagPF.addTagInfos = True -process.patJetsCAHEPTopTagPF.tagInfoSources = cms.VInputTag( - cms.InputTag('CATopTagInfosHEPTopTagPFlow') - ) - - -# CA15 Filtered jets -process.selectedPatJetsCA15FilteredPF.cut = cms.string("pt > 150 & abs(rapidity) < 2.5") -process.selectedPatJetsCA15MassDropFilteredPF.cut = cms.string("pt > 150 & abs(rapidity) < 2.5") -#process.selectedPatJetsCA15MassDropFilteredSubjetsPF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") - -if options.useExtraJetColls: - - # AK5 groomed jets - process.selectedPatJetsAK5PrunedPF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") - process.selectedPatJetsAK5TrimmedPF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") - process.selectedPatJetsAK5FilteredPF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") - - - # AK7 groomed jets - process.selectedPatJetsAK7PF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") - process.selectedPatJetsAK7PrunedPF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") - process.selectedPatJetsAK7TrimmedPF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") - process.selectedPatJetsAK7FilteredPF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") - - - # AK8 groomed jets - process.selectedPatJetsAK8PF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") - process.selectedPatJetsAK8PrunedPF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") - process.selectedPatJetsAK8TrimmedPF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") - process.selectedPatJetsAK8FilteredPF.cut = cms.string("pt > 20 & abs(rapidity) < 2.5") - - - -# electrons -process.selectedPatElectrons.cut = cms.string('pt > 10.0 & abs(eta) < 2.5') -process.patElectrons.embedTrack = cms.bool(True) -process.selectedPatElectronsPFlow.cut = cms.string('pt > 10.0 & abs(eta) < 2.5') -process.patElectronsPFlow.embedTrack = cms.bool(True) -process.selectedPatElectronsPFlowLoose.cut = cms.string('pt > 10.0 & abs(eta) < 2.5') -process.patElectronsPFlowLoose.embedTrack = cms.bool(True) -# muons -process.selectedPatMuons.cut = cms.string('pt > 10.0 & abs(eta) < 2.5') -process.patMuons.embedTrack = cms.bool(True) -process.selectedPatMuonsPFlow.cut = cms.string("pt > 10.0 & abs(eta) < 2.5") -process.patMuonsPFlow.embedTrack = cms.bool(True) -process.selectedPatMuonsPFlowLoose.cut = cms.string("pt > 10.0 & abs(eta) < 2.5") -process.patMuonsPFlowLoose.embedTrack = cms.bool(True) -# taus -process.selectedPatTausPFlow.cut = cms.string("pt > 10.0 & abs(eta) < 3") -process.selectedPatTaus.cut = cms.string("pt > 10.0 & abs(eta) < 3") -process.patTausPFlow.isoDeposits = cms.PSet() -process.patTaus.isoDeposits = cms.PSet() -# photons -process.patPhotonsPFlow.isoDeposits = cms.PSet() -process.patPhotons.isoDeposits = cms.PSet() - - -# Apply jet ID to all of the jets upstream. We aren't going to screw around -# with this, most likely. So, we don't really to waste time with it -# at the analysis level. -from PhysicsTools.SelectorUtils.pfJetIDSelector_cfi import pfJetIDSelector -process.goodPatJetsPFlow = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsPFlow") - ) -process.goodPatJetsCA8PF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsCA8PF") - ) -process.goodPatJetsCA8PrunedPF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsCA8PrunedPF") - ) - -process.goodPatJetsCATopTagPF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsCATopTagPF") - ) - -process.goodPatJetsCAHEPTopTagPF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsCAHEPTopTagPF") - ) - -process.goodPatJetsCA15FilteredPF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsCA15FilteredPF") - ) - -process.goodPatJetsCA15MassDropFilteredPF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsCA15MassDropFilteredPF") - ) - -if options.useExtraJetColls: - - - process.goodPatJetsAK5PrunedPF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsAK5PrunedPF") - ) - process.goodPatJetsAK5FilteredPF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsAK5FilteredPF") - ) - process.goodPatJetsAK5TrimmedPF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsAK5TrimmedPF") - ) - - process.goodPatJetsAK7PF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsAK7PF") - ) - process.goodPatJetsAK7PrunedPF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsAK7PrunedPF") - ) - process.goodPatJetsAK7FilteredPF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsAK7FilteredPF") - ) - process.goodPatJetsAK7TrimmedPF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsAK7TrimmedPF") - ) - - - - process.goodPatJetsAK8PF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsAK8PF") - ) - process.goodPatJetsAK8PrunedPF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsAK8PrunedPF") - ) - process.goodPatJetsAK8FilteredPF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsAK8FilteredPF") - ) - process.goodPatJetsAK8TrimmedPF = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJetsAK8TrimmedPF") - ) - - - -process.goodPatJetsCA8PrunedPFPacked = cms.EDProducer("BoostedJetMerger", - jetSrc=cms.InputTag("goodPatJetsCA8PrunedPF"), - subjetSrc=cms.InputTag("selectedPatJetsCA8PrunedSubjetsPF") - ) - -process.goodPatJetsCATopTagPFPacked = cms.EDProducer("BoostedJetMerger", - jetSrc=cms.InputTag("goodPatJetsCATopTagPF"), - subjetSrc=cms.InputTag("selectedPatJetsCATopTagSubjetsPF") - ) - - -process.goodPatJetsCAHEPTopTagPFPacked = cms.EDProducer("BoostedJetMerger", - jetSrc=cms.InputTag("goodPatJetsCAHEPTopTagPF"), - subjetSrc=cms.InputTag("selectedPatJetsCAHEPTopTagSubjetsPF") - ) - -process.goodPatJetsCA15MassDropFilteredPFPacked = cms.EDProducer("BoostedJetMerger", - jetSrc=cms.InputTag("goodPatJetsCA15MassDropFilteredPF"), - subjetSrc=cms.InputTag("selectedPatJetsCA15MassDropFilteredSubjetsPF") - ) - - -if options.writeSimpleInputs : - process.pfInputs = cms.EDProducer( - "CandViewNtpProducer", - src = cms.InputTag('selectedPatJetsCA8PF', 'pfCandidates'), - lazyParser = cms.untracked.bool(True), - eventInfo = cms.untracked.bool(False), - variables = cms.VPSet( - cms.PSet( - tag = cms.untracked.string("px"), - quantity = cms.untracked.string("px") - ), - cms.PSet( - tag = cms.untracked.string("py"), - quantity = cms.untracked.string("py") - ), - cms.PSet( - tag = cms.untracked.string("pz"), - quantity = cms.untracked.string("pz") - ), - cms.PSet( - tag = cms.untracked.string("energy"), - quantity = cms.untracked.string("energy") - ), - cms.PSet( - tag = cms.untracked.string("pdgId"), - quantity = cms.untracked.string("pdgId") - ) - ) - ) - - -if options.useExtraJetColls: - process.ak5Lite = cms.EDProducer( - "CandViewNtpProducer", - src = cms.InputTag('goodPatJetsPFlow'), - lazyParser = cms.untracked.bool(True), - eventInfo = cms.untracked.bool(False), - variables = cms.VPSet( - cms.PSet( - tag = cms.untracked.string("px"), - quantity = cms.untracked.string("px") - ), - cms.PSet( - tag = cms.untracked.string("py"), - quantity = cms.untracked.string("py") - ), - cms.PSet( - tag = cms.untracked.string("pz"), - quantity = cms.untracked.string("pz") - ), - cms.PSet( - tag = cms.untracked.string("energy"), - quantity = cms.untracked.string("energy") - ), - cms.PSet( - tag = cms.untracked.string("jetArea"), - quantity = cms.untracked.string("jetArea") - ), - cms.PSet( - tag = cms.untracked.string("jecFactor"), - quantity = cms.untracked.string("jecFactor(0)") - ) - ) - ) - - - process.ak5TrimmedLite = process.ak5Lite.clone( - src = cms.InputTag('goodPatJetsAK5TrimmedPF') - ) - - process.ak5PrunedLite = process.ak5Lite.clone( - src = cms.InputTag('goodPatJetsAK5PrunedPF') - ) - - process.ak5FilteredLite = process.ak5Lite.clone( - src = cms.InputTag('goodPatJetsAK5FilteredPF') - ) - - process.ak7Lite = process.ak5Lite.clone( - src = cms.InputTag('goodPatJetsAK7PF') - ) - - process.ak7TrimmedLite = process.ak5Lite.clone( - src = cms.InputTag('goodPatJetsAK7TrimmedPF') - ) - - process.ak7PrunedLite = process.ak5Lite.clone( - src = cms.InputTag('goodPatJetsAK7PrunedPF') - ) - - process.ak7FilteredLite = process.ak5Lite.clone( - src = cms.InputTag('goodPatJetsAK7FilteredPF') - ) - - - - - process.ak7TrimmedGenLite = cms.EDProducer( - "CandViewNtpProducer", - src = cms.InputTag('ak7TrimmedGenJetsNoNu'), - lazyParser = cms.untracked.bool(True), - eventInfo = cms.untracked.bool(False), - variables = cms.VPSet( - cms.PSet( - tag = cms.untracked.string("px"), - quantity = cms.untracked.string("px") - ), - cms.PSet( - tag = cms.untracked.string("py"), - quantity = cms.untracked.string("py") - ), - cms.PSet( - tag = cms.untracked.string("pz"), - quantity = cms.untracked.string("pz") - ), - cms.PSet( - tag = cms.untracked.string("energy"), - quantity = cms.untracked.string("energy") - ) - ) - ) - - - process.ak7PrunedGenLite = process.ak7TrimmedGenLite.clone( - src = cms.InputTag('ak7PrunedGenJetsNoNu') - ) - - process.ak7FilteredGenLite = process.ak7TrimmedGenLite.clone( - src = cms.InputTag('ak7FilteredGenJetsNoNu') - ) - - process.ca8PrunedGenLite = process.ak7TrimmedGenLite.clone( - src = cms.InputTag('caPrunedGen') - ) - - process.ca12FilteredGenLite = process.ak7TrimmedGenLite.clone( - src = cms.InputTag('caFilteredGenJetsNoNu') - ) - - process.ca12MassDropFilteredGenLite = process.ak7TrimmedGenLite.clone( - src = cms.InputTag('caMassDropFilteredGenJetsNoNu') - ) - - - - process.ak8Lite = process.ak5Lite.clone( - src = cms.InputTag('goodPatJetsAK8PF') - ) - - process.ak8TrimmedLite = process.ak5Lite.clone( - src = cms.InputTag('goodPatJetsAK8TrimmedPF') - ) - - process.ak8PrunedLite = process.ak5Lite.clone( - src = cms.InputTag('goodPatJetsAK8PrunedPF') - ) - - process.ak8FilteredLite = process.ak5Lite.clone( - src = cms.InputTag('goodPatJetsAK8FilteredPF') - ) - - -## IVF and BCandidate producer for Vbb cross check analysis -process.load('RecoVertex/AdaptiveVertexFinder/inclusiveVertexing_cff') - - -# let it run - -process.filtersSeq = cms.Sequence( - process.primaryVertexFilter * - process.noscraping * - process.HBHENoiseFilter * - process.CSCTightHaloFilter * - process.hcalLaserEventFilter * - process.EcalDeadCellTriggerPrimitiveFilter * - process.goodVertices * process.trackingFailureFilter * - process.tobtecfakesfilter * - ~process.manystripclus53X * - ~process.toomanystripclus53X * - ~process.logErrorTooManyClusters * - ~process.logErrorTooManyTripletsPairs * - ~process.logErrorTooManySeeds * - process.eeBadScFilter -) - - - -process.patseq = cms.Sequence( - process.filtersSeq* - process.goodOfflinePrimaryVertices* - process.softElectronCands* - process.inclusiveVertexing* - process.genParticlesForJetsNoNu* - process.ca8GenJetsNoNu* - process.ak8GenJetsNoNu* - process.caFilteredGenJetsNoNu* - process.caMassDropFilteredGenJetsNoNu* - process.caPrunedGen* - process.caTopTagGen* - process.CATopTagInfosGen* - process.caHEPTopTagGen* - getattr(process,"patPF2PATSequence"+postfix)* - process.patDefaultSequence* - process.goodPatJetsPFlow* - process.goodPatJetsCA8PF* - process.goodPatJetsCA8PrunedPF* - process.goodPatJetsCATopTagPF* - process.goodPatJetsCAHEPTopTagPF* - process.goodPatJetsCA15MassDropFilteredPF* - process.goodPatJetsCA8PrunedPFPacked* - process.goodPatJetsCATopTagPFPacked* - process.goodPatJetsCAHEPTopTagPFPacked* - process.goodPatJetsCA15MassDropFilteredPFPacked* - process.flavorHistorySeq* - process.prunedGenParticles* - process.kt6PFJetsForIsolation* - process.recoTauClassicHPSSequence* - getattr(process,"patPF2PATSequence"+postfixLoose)#* -# process.miniPFLeptonSequence - ) - -if options.useExtraJetColls: - process.extraJetSeq = cms.Sequence( - process.ak7TrimmedGenJetsNoNu* - process.ak7FilteredGenJetsNoNu* - process.ak7PrunedGenJetsNoNu* - process.goodPatJetsCA15FilteredPF* - process.goodPatJetsCA15MassDropFilteredPF* - process.goodPatJetsAK5TrimmedPF* - process.goodPatJetsAK5FilteredPF* - process.goodPatJetsAK5PrunedPF* - process.goodPatJetsAK7PF* - process.goodPatJetsAK7TrimmedPF* - process.goodPatJetsAK7FilteredPF* - process.goodPatJetsAK7PrunedPF* - process.goodPatJetsAK8PF* - process.goodPatJetsAK8TrimmedPF* - process.goodPatJetsAK8FilteredPF* - process.goodPatJetsAK8PrunedPF* - process.ak5Lite* - process.ak5TrimmedLite* - process.ak5FilteredLite* - process.ak5PrunedLite* - process.ak7Lite* - process.ak7TrimmedLite* - process.ak7FilteredLite* - process.ak7PrunedLite* - process.ak7TrimmedGenLite* - process.ak7FilteredGenLite* - process.ak7PrunedGenLite* - process.ak8Lite* - process.ak8TrimmedLite* - process.ak8FilteredLite* - process.ak8PrunedLite* - process.ca8PrunedGenLite* - process.ca12FilteredGenLite* - process.ca12MassDropFilteredGenLite - ) - process.patseq *= process.extraJetSeq - - -if options.useData : - process.patseq.remove( process.genParticlesForJetsNoNu ) - process.patseq.remove( process.genJetParticles ) - process.patseq.remove( process.ak8GenJetsNoNu ) - process.patseq.remove( process.ca8GenJetsNoNu ) - process.patseq.remove( process.caFilteredGenJetsNoNu ) - process.patseq.remove( process.flavorHistorySeq ) - process.patseq.remove( process.caPrunedGen ) - process.patseq.remove( process.caHEPTopTagGen) - process.patseq.remove( process.caTopTagGen ) - process.patseq.remove( process.CATopTagInfosGen ) - process.patseq.remove( process.prunedGenParticles ) - process.patseq.remove( process.caMassDropFilteredGenJetsNoNu ) - - if options.useExtraJetColls: - process.patseq.remove( process.ak8GenJetsNoNu ) - process.patseq.remove( process.caFilteredGenJetsNoNu ) - process.patseq.remove( process.ak7TrimmedGenJetsNoNu ) - process.patseq.remove( process.ak7FilteredGenJetsNoNu ) - process.patseq.remove( process.ak7PrunedGenJetsNoNu ) - process.patseq.remove( process.ak7TrimmedGenLite ) - process.patseq.remove( process.ak7FilteredGenLite ) - process.patseq.remove( process.ak7PrunedGenLite ) - process.patseq.remove( process.ca8PrunedGenLite ) - process.patseq.remove( process.ca12FilteredGenLite ) - process.patseq.remove( process.ca12MassDropFilteredGenLite ) - -if options.runOnFastSim: - process.patseq.remove( process.HBHENoiseFilter ) - process.patseq.remove( process.CSCTightHaloFilter ) - -if options.writeSimpleInputs : - process.patseq *= cms.Sequence(process.pfInputs) - -if options.useSusyFilter : - process.patseq.remove( process.HBHENoiseFilter ) - process.load( 'PhysicsTools.HepMCCandAlgos.modelfilter_cfi' ) - process.modelSelector.parameterMins = [500., 0.] # mstop, mLSP - process.modelSelector.parameterMaxs = [7000., 200.] # mstop, mLSP - process.p0 = cms.Path( - process.modelSelector * - process.patseq - ) - - - -else : - process.p0 = cms.Path( - process.patseq - ) - - - - - -process.out.SelectEvents.SelectEvents = cms.vstring('p0') - -# rename output file -if options.useData : - if options.writeFat : - process.out.fileName = cms.untracked.string(options.tlbsmTag + '_data_fat.root') - else : - process.out.fileName = cms.untracked.string(options.tlbsmTag + '_data.root') -else : - if options.writeFat : - process.out.fileName = cms.untracked.string(options.tlbsmTag + '_mc_fat.root') - else : - process.out.fileName = cms.untracked.string(options.tlbsmTag + '_mc.root') - - -# reduce verbosity -process.MessageLogger.cerr.FwkReport.reportEvery = cms.untracked.int32(100) - - -# process all the events -process.maxEvents.input = 100 -process.options.wantSummary = True -process.out.dropMetaData = cms.untracked.string("DROPPED") - - -process.source.inputCommands = cms.untracked.vstring("keep *", "drop *_MEtoEDMConverter_*_*") - - - -process.out.outputCommands = [ - 'drop *_cleanPat*_*_*', - 'keep *_selectedPat*_*_*', - # Drop the PAT jets with jet ID applied, - # they are duplicated. - 'keep *_goodPat*_*_*', - 'drop *_goodPatJetsCA8PrunedPF_*_*', - 'drop *_goodPatJetsCATopTagPF_*_*', - 'drop *_goodPatJetsCAHEPTopTagPF_*_*', - 'drop *_goodPatJetsCA15MassDropFilteredPF_*_*', - # Drop the PAT jets without jet ID applied, - # they are duplicated. - 'drop patJets_selectedPat*_*_*', - # However, KEEP the PAT jets corresponding - # to the subjets. - 'keep patJets_selectedPat*Subjets*_*_*', - # And finally, keep the "packed" pat jets - # which contain the subjets, as pat jets. - 'keep patJets_goodPatJets*Packed_*_*', - 'drop *_selectedPatJets_*_*', - 'keep *_patMETs*_*_*', -# 'keep *_offlinePrimaryVertices*_*_*', -# 'keep *_kt6PFJets*_*_*', - 'keep *_goodOfflinePrimaryVertices*_*_*', - 'drop patPFParticles_*_*_*', - 'drop recoPFJets_*_*_*', -# 'drop patTaus_*_*_*', -# 'keep recoPFJets_caPruned*_*_*', - 'keep recoPFJets_caFiltered*_*_*', -# 'keep recoPFJets_caTopTag*_*_*', -# 'keep recoPFJets_caHEPTopTag*_*_*', - 'keep patTriggerObjects_patTriggerPFlow_*_*', - 'keep patTriggerFilters_patTriggerPFlow_*_*', - 'keep patTriggerPaths_patTriggerPFlow_*_*', - 'keep patTriggerEvent_patTriggerEventPFlow_*_*', - 'keep *_cleanPatPhotonsTriggerMatch*_*_*', - 'keep *_cleanPatElectronsTriggerMatch*_*_*', - 'keep *_cleanPatMuonsTriggerMatch*_*_*', - 'keep *_cleanPatTausTriggerMatch*_*_*', - 'keep *_cleanPatJetsTriggerMatch*_*_*', - 'keep *_patMETsTriggerMatch*_*_*', - 'keep double_*_*_PAT', - 'keep *_TriggerResults_*_*', - 'keep *_hltTriggerSummaryAOD_*_*', - #'keep *_caTopTagPFlow_*_*', - #'keep *_caPrunedPFlow_*_*', - 'keep *_CATopTagInfosPFlow_*_*', - 'keep *_prunedGenParticles_*_*', - 'drop recoPFCandidates_selectedPatJets*_*_*', - 'keep recoPFCandidates_selectedPatJetsPFlow_*_*', - 'keep recoPFCandidates_selectedPatJetsCA8PF_*_*', - 'drop CaloTowers_selectedPatJets*_*_*', - 'drop recoBasicJets_*_*_*', - 'keep *_*Lite_*_*', - 'drop patJets_goodPatJetsAK5FilteredPF_*_*', - 'drop patJets_goodPatJetsAK5PrunedPF_*_*', - 'drop patJets_goodPatJetsAK5TrimmedPF_*_*', - 'drop patJets_goodPatJetsAK7PF_*_*', - 'drop patJets_goodPatJetsAK7FilteredPF_*_*', - 'drop patJets_goodPatJetsAK7PrunedPF_*_*', - 'drop patJets_goodPatJetsAK7TrimmedPF_*_*', - 'drop patJets_goodPatJetsAK8PF_*_*', - 'drop patJets_goodPatJetsAK8FilteredPF_*_*', - 'drop patJets_goodPatJetsAK8PrunedPF_*_*', - 'drop patJets_goodPatJetsAK8TrimmedPF_*_*', - 'drop recoGenJets_selectedPatJets*_*_*', - 'keep *_*_rho_*', - 'drop *_*PFlowLoose*_*_*', - 'keep patElectrons_selected*PFlowLoose*_*_*', - 'keep patMuons_selected*PFlowLoose*_*_*', - 'keep patJets_selectedPatJetsPFlowLoose_*_*', - 'keep *_patConversions*_*_*', - #'keep patTaus_*PFlowLoose*_*_*', - 'keep *_offlineBeamSpot_*_*', - 'drop *_*atTaus_*_*', - 'keep *_pfType1CorrectedMet_*_*', - 'keep *_pfType1p2CorrectedMet_*_*', - 'keep *_phoPFIso_*_*', - 'keep *_photon*_*_*', - 'keep *_allConversions__*', - 'keep *_gsfElectron*__*', - 'keep *_correctedHybridSuperClusters_*_*', - 'keep *_correctedMulti5x5SuperClustersWithPreshower_*_*', - 'keep recoGsfTracks_electronGsfTracks__*' - #'keep recoTracks_generalTracks_*_*' - ] - -if options.useData : - process.out.outputCommands += ['drop *_MEtoEDMConverter_*_*', - 'keep LumiSummary_lumiProducer_*_*' - ] -else : - process.out.outputCommands += ['keep recoGenJets_ca8GenJetsNoNu_*_*', - 'keep recoGenJets_ak5GenJetsNoNu_*_*', - 'keep recoGenJets_ak7GenJetsNoNu_*_*', - 'keep recoGenJets_ak8GenJetsNoNu_*_*', - 'keep recoGenJets_caFilteredGenJetsNoNu_*_*', - 'keep recoGenJets_caPrunedGen_*_*', - 'keep *_caTopTagGen_*_*', - 'keep GenRunInfoProduct_generator_*_*', - 'keep GenEventInfoProduct_generator_*_*', - 'keep *_flavorHistoryFilter_*_*', - 'keep PileupSummaryInfos_*_*_*', - 'keep recoGenJets_selectedPatJetsPFlow_*_*', - ] - -if options.writePFCands or options.writeFat : - - process.out.outputCommands += [ - 'keep *_pfNoElectronPFlow_*_*', - 'drop recoPFCandidates_selectedPatJets*_*_*' - ] - -if options.writeFat : - - process.out.outputCommands += [ - 'keep recoTracks_generalTracks_*_*', - 'keep recoBaseTagInfosOwned_selectedPatJets*_*_*', - 'keep CaloTowers_selectedPatJets*_*_*' - ] - - -if options.writeGenParticles : - if options.useData == False : - process.out.outputCommands += [ - 'keep *_genParticles_*_*' - ] - - -if options.writeSimpleInputs : - process.out.outputCommands += [ - 'keep *_pfInputs_*_*' - ] - -if options.usePythia8 : - process.patJetPartonMatch.mcStatus = cms.vint32(23) - process.patJetPartonMatchPFlow.mcStatus = cms.vint32(23) - process.patJetPartonMatchPFlowLoose.mcStatus = cms.vint32(23) - -if options.usePythia6andPythia8 : - process.patJetPartonMatch.mcStatus = cms.vint32(3,23) - process.patJetPartonMatchPFlow.mcStatus = cms.vint32(3,23) - process.patJetPartonMatchPFlowLoose.mcStatus = cms.vint32(3,23) - - - -open('junk.py','w').write(process.dumpPython()) diff --git a/TopQuarkAnalysis/TopPairBSM/test/ttbsm_ljets_def.py b/TopQuarkAnalysis/TopPairBSM/test/ttbsm_ljets_def.py deleted file mode 100644 index 8105ceaebf80c..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/ttbsm_ljets_def.py +++ /dev/null @@ -1,26 +0,0 @@ -def isTightMu(lep): - isPF = lep.isPFMuon() - isGlob = lep.isGlobalMuon() - if isPF and isGlob: - normChi2 = lep.globalTrack().normalizedChi2() - trkLayers = lep.track().hitPattern().trackerLayersWithMeasurement() - mVMuHits = lep.globalTrack().hitPattern().numberOfValidMuonHits() - dB = fabs( lep.dB() ) - #diffVz = fabs( lep.vertex().z() - PVz ) - mPixHits = lep.innerTrack().hitPattern().numberOfValidPixelHits() - matchStat = lep.numberOfMatchedStations() - - #if(isPF and isGlob and normChi2<10 and trkLayers>5 and mVMuHits>0 and dB<0.2 and diffVz<0.5 and mPixHits>0 and matchStat >1): - if(isPF and isGlob and normChi2<10 and trkLayers>5 and mVMuHits>0 and dB<0.2 and mPixHits>0 and matchStat >1): - return True - else: - return False - -def isLooseMu(lep): - isPF = lep.isPFMuon() - isGlob = lep.isGlobalMuon() - isTrack = lep.isTrackerMuon() - if isPF and (isGlob or isTrack): - return True - else: - return False diff --git a/TopQuarkAnalysis/TopPairBSM/test/ttbsm_unittest_fwlite.py b/TopQuarkAnalysis/TopPairBSM/test/ttbsm_unittest_fwlite.py deleted file mode 100644 index 67c3cef19bdbc..0000000000000 --- a/TopQuarkAnalysis/TopPairBSM/test/ttbsm_unittest_fwlite.py +++ /dev/null @@ -1,174 +0,0 @@ -#! /usr/bin/env python - -from __future__ import print_function -import ROOT -import sys -from DataFormats.FWLite import Events, Handle - -files = ["patTuple_tlbsm_train_tlbsm_71x_v1.root"] -printGen = True -events = Events (files) -handle0 = Handle ("std::vector") -handle1 = Handle ("std::vector") -handle2 = Handle ("std::vector") -handle3 = Handle ("std::vector") -handle4 = Handle ("std::vector") -handle5 = Handle ("std::vector") -handle6 = Handle ("std::vector") -handle7 = Handle ("std::vector") -handle8 = Handle ("GenEventInfoProduct") - -# for now, label is just a tuple of strings that is initialized just -# like and edm::InputTag -label0 = ("goodPatJets") -label1 = ("goodPatJetsCA8PrunedPacked") -label2 = ("goodPatJetsCA8CMSTopTagPacked") -label3 = ("goodPatJetsCA15HEPTopTagPacked") -label4 = ("selectedPatMuons") -label5 = ("selectedPatElectrons") -label6 = ("goodOfflinePrimaryVertices") -label7 = ("addPileupInfo") -label8 = ("generator") - -f = ROOT.TFile("outplots.root", "RECREATE") -f.cd() - - -# loop over events -i = 0 -for event in events: - i = i + 1 - print('--------- Processing Event ' + str(i)) - - print('---- ' + label0) - # use getByLabel, just like in cmsRun - event.getByLabel (label0, handle0) - # get the product - jets0 = handle0.product() - - - ijet = 0 - for jet in jets0 : - print(("Jet {0:4.0f}, pt = {1:10.2f}, eta = {2:6.2f}, phi = {3:6.2f}, m = {4:6.2f}, " + - "nda = {5:3.0f}, vtxmass = {6:6.2f}, area = {7:6.2f}, L1 = {8:6.2f}, L2 = {9:6.2f}, L3 = {10:6.2f}, " + - "currLevel = {11:s}").format( - ijet, jet.pt(), jet.eta(), jet.phi(), jet.mass(), jet.numberOfDaughters(), jet.userFloat('secvtxMass'), - jet.jetArea(), jet.jecFactor("L1FastJet"), jet.jecFactor("L2Relative"), jet.jecFactor("L3Absolute"), jet.currentJECLevel() - ), end=' ') - if printGen : - genPt = 0. - if jet.genJetFwdRef().isNonnull() and jet.genJetFwdRef().isAvailable() : - genPt = jet.genJetFwdRef().pt() - else : - genPt = -1.0 - print((", gen pt = {0:6.2f}").format( genPt )) - else : - print('') - ijet += 1 - - print('---- ' + label1) - # use getByLabel, just like in cmsRun - event.getByLabel (label1, handle1) - # get the product - jets1 = handle1.product() - - ijet = 0 - for jet in jets1 : - print('Jet {0:4.0f}, pt = {1:10.2f}, eta = {2:6.2f}, phi = {3:6.2f}, m = {4:6.2f}, nda = {5:3.0f}'.format( - ijet, jet.pt(), jet.eta(), jet.phi(), jet.mass(), jet.numberOfDaughters() - ), end=' ') - if jet.numberOfDaughters() > 1 : - print(', ptda1 = {0:6.2f}, ptda1 = {1:6.2f}'.format( jet.daughter(0).pt(), jet.daughter(1).pt() )) - else : - print('') - ijet += 1 - - - print('---- ' + label2) - # use getByLabel, just like in cmsRun - event.getByLabel (label2, handle2) - # get the product - jets2 = handle2.product() - - ijet = 0 - for jet in jets2 : - print('Jet {0:4.0f}, pt = {1:10.2f}, eta = {2:6.2f}, phi = {3:6.2f}, m = {4:6.2f}, nda = {5:3.0f}, topmass = {6:6.2f}, minmass = {7:6.2f}'.format( - ijet, jet.pt(), jet.eta(), jet.phi(), jet.mass(), jet.numberOfDaughters(), jet.tagInfo('CATop').properties().topMass, jet.tagInfo('CATop').properties().minMass - )) - ijet += 1 - - - print('---- ' + label3) - # use getByLabel, just like in cmsRun - event.getByLabel (label3, handle3) - # get the product - jets3 = handle3.product() - - ijet = 0 - for jet in jets3 : - print('Jet {0:4.0f}, pt = {1:10.2f}, eta = {2:6.2f}, phi = {3:6.2f}, m = {4:6.2f}, nda = {5:3.0f}'.format( - ijet, jet.pt(), jet.eta(), jet.phi(), jet.mass(), jet.numberOfDaughters() - ), end=' ') - if jet.numberOfDaughters() > 2 : - print(', ptda1 = {0:6.2f}, ptda1 = {1:6.2f}, ptda2 = {2:6.2f}'.format( jet.daughter(0).pt(), jet.daughter(1).pt(), jet.daughter(2).pt() )) - else : - print('') - ijet += 1 - - - print('---- ' + label4) - # use getByLabel, just like in cmsRun - event.getByLabel (label4, handle4) - # get the product - muons1 = handle4.product() - - imuon = 0 - for muon in muons1 : - if not muon.isGlobalMuon() : - continue - print('Muon {0:4.0f}, pt = {1:10.2f}, eta = {2:6.2f}, phi = {3:6.2f}, m = {4:6.2f}, nda = {5:3.0f}, chi2/dof = {6:6.2f}'.format( - imuon, muon.pt(), muon.eta(), muon.phi(), muon.mass(), muon.numberOfDaughters(), muon.normChi2() - )) - imuon += 1 - - print('---- ' + label5) - # use getByLabel, just like in cmsRun - event.getByLabel (label5, handle5) - # get the product - electrons1 = handle5.product() - - ielectron = 0 - for electron in electrons1 : - print('Electron {0:4.0f}, pt = {1:10.2f}, eta = {2:6.2f}, phi = {3:6.2f}, m = {4:6.2f}, nda = {5:3.0f}, eidTight = {6:6.2f}'.format( - ielectron, electron.pt(), electron.eta(), electron.phi(), electron.mass(), electron.numberOfDaughters(), electron.electronID('eidTight') - )) - ielectron += 1 - - print('---- ' + label6) - # use getByLabel, just like in cmsRun - event.getByLabel (label6, handle6) - # get the product - goodPVs = handle6.product() - igoodPV = 0 - for goodPV in goodPVs: - print('PV {0:4.0f}, ndof = {1:10.2f}, nTracks = {2:d}, normalizedChi2 = {3:4.2f}, x= {4:4.2f}, y = {5:4.2f}, z = {6:4.2f}'.format(igoodPV, goodPV.ndof(), goodPV.nTracks(), goodPV.normalizedChi2(), goodPV.x(), goodPV.y(), goodPV.z())) - igoodPV += 1 - - print('---- ' + label7) - # use getByLabel, just like in cmsRun - event.getByLabel (label7, handle7) - # get the product - pusummarys = handle7.product() - for pusummary in pusummarys: - print('PU true interaction = {0:f}, PU interactions = {1:f}'.format(pusummary.getTrueNumInteractions(), pusummary.getPU_NumInteractions())) - - print('---- ' + label8) - # use getByLabel, just like in cmsRun - event.getByLabel (label8, handle8) - # get the product - geninfo = handle8.product() - print('GenInfoProduct has pdf = {0:b}, pdfid1 = {1:d}, pdfid2 = {2:d}'.format(geninfo.hasPDF(), geninfo.pdf().id.first, geninfo.pdf().id.second)) - -f.cd() - -f.Close() diff --git a/TopQuarkAnalysis/TopSkimming/test/ttDecayChannelFilters_cfg.py b/TopQuarkAnalysis/TopSkimming/test/ttDecayChannelFilters_cfg.py index 67062394fa365..b59f8806782c5 100644 --- a/TopQuarkAnalysis/TopSkimming/test/ttDecayChannelFilters_cfg.py +++ b/TopQuarkAnalysis/TopSkimming/test/ttDecayChannelFilters_cfg.py @@ -4,8 +4,7 @@ ## add message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories.append('ParticleListDrawer') -process.MessageLogger.categories.append('TtDecayChannelSelector') +process.MessageLogger.ParticleListDrawer=dict() process.MessageLogger.cerr.TtDecayChannelSelector = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/TopQuarkAnalysis/TopTools/test/ttJetPartonMatch_cfg.py b/TopQuarkAnalysis/TopTools/test/ttJetPartonMatch_cfg.py index c4b63fd640caf..3b5879f7146a8 100644 --- a/TopQuarkAnalysis/TopTools/test/ttJetPartonMatch_cfg.py +++ b/TopQuarkAnalysis/TopTools/test/ttJetPartonMatch_cfg.py @@ -5,7 +5,6 @@ ## add message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('JetPartonMatching') process.MessageLogger.cerr.JetPartonMatching = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) diff --git a/TrackingTools/AnalyticalJacobians/BuildFile.xml b/TrackingTools/AnalyticalJacobians/BuildFile.xml index 92d3ade832d98..61cd5827370d8 100644 --- a/TrackingTools/AnalyticalJacobians/BuildFile.xml +++ b/TrackingTools/AnalyticalJacobians/BuildFile.xml @@ -4,5 +4,9 @@ + + + + diff --git a/TrackingTools/GeomPropagators/interface/HelixForwardPlaneCrossing.h b/TrackingTools/GeomPropagators/interface/HelixForwardPlaneCrossing.h index 7d9c3155f197c..10f4056b41df0 100644 --- a/TrackingTools/GeomPropagators/interface/HelixForwardPlaneCrossing.h +++ b/TrackingTools/GeomPropagators/interface/HelixForwardPlaneCrossing.h @@ -4,6 +4,7 @@ #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h" #include "TrackingTools/GeomPropagators/interface/HelixPlaneCrossing.h" #include "DataFormats/GeometrySurface/interface/Plane.h" +#include "FWCore/Utilities/interface/isFinite.h" #include "FWCore/Utilities/interface/Likely.h" #include @@ -28,14 +29,15 @@ class HelixForwardPlaneCrossing final : public HelixPlaneCrossing { // // Protect against p_z=0 and calculate path length // - if - UNLIKELY(std::abs(theCosTheta) < std::numeric_limits::min()) return std::pair(false, 0); + if UNLIKELY (std::abs(theCosTheta) < std::numeric_limits::min()) + return std::pair(false, 0); double dS = (plane.position().z() - theZ0) / theCosTheta; // negative logic to avoid checking for anyDirection... - return std::make_pair( - !(((thePropDir == alongMomentum) & (dS < 0.)) | ((thePropDir == oppositeToMomentum) & (dS > 0.))), dS); + return std::make_pair(!(((thePropDir == alongMomentum) & (dS < 0.)) | + ((thePropDir == oppositeToMomentum) & (dS > 0.)) | edm::isNotFinite(dS)), + dS); } /** Position at pathlength s from the starting point. diff --git a/TrackingTools/GeomPropagators/python/AnalyticalPropagatorParabolicMf_cff.py b/TrackingTools/GeomPropagators/python/AnalyticalPropagatorParabolicMf_cff.py index 07e6a9a914836..8ba006d08819b 100644 --- a/TrackingTools/GeomPropagators/python/AnalyticalPropagatorParabolicMf_cff.py +++ b/TrackingTools/GeomPropagators/python/AnalyticalPropagatorParabolicMf_cff.py @@ -3,11 +3,11 @@ from TrackingTools.GeomPropagators.AnalyticalPropagator_cfi import AnalyticalPropagator AnalyticalPropagatorParabolicMF = AnalyticalPropagator.clone( SimpleMagneticField = cms.string('ParabolicMf'), - ComponentName = cms.string('AnalyticalPropagatorParabolicMf') + ComponentName = 'AnalyticalPropagatorParabolicMf' ) from TrackingTools.GeomPropagators.OppositeAnalyticalPropagator_cfi import OppositeAnalyticalPropagator OppositeAnalyticalPropagatorParabolicMF = OppositeAnalyticalPropagator.clone( SimpleMagneticField = cms.string('ParabolicMf'), - ComponentName = cms.string('AnalyticalPropagatorParabolicMfOpposite') + ComponentName = 'AnalyticalPropagatorParabolicMfOpposite' ) diff --git a/TrackingTools/GeomPropagators/python/BeamHaloPropagator_cff.py b/TrackingTools/GeomPropagators/python/BeamHaloPropagator_cff.py index b1d12a49cdff1..a74d597adeb5a 100644 --- a/TrackingTools/GeomPropagators/python/BeamHaloPropagator_cff.py +++ b/TrackingTools/GeomPropagators/python/BeamHaloPropagator_cff.py @@ -1,34 +1,36 @@ import FWCore.ParameterSet.Config as cms -import copy from TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi import * -# clone the steppinghelix propagators -BeamHaloSHPropagatorAlong = copy.deepcopy(SteppingHelixPropagatorAlong) -import copy from TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi import * -BeamHaloSHPropagatorOpposite = copy.deepcopy(SteppingHelixPropagatorOpposite) -import copy from TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi import * -BeamHaloSHPropagatorAny = copy.deepcopy(SteppingHelixPropagatorAny) -import copy from TrackingTools.MaterialEffects.MaterialPropagator_cfi import * -# clone some material propagators -BeamHaloMPropagatorAlong = copy.deepcopy(MaterialPropagator) -import copy from TrackingTools.MaterialEffects.OppositeMaterialPropagator_cfi import * -BeamHaloMPropagatorOpposite = copy.deepcopy(OppositeMaterialPropagator) # # special propagator from TrackingTools.GeomPropagators.BeamHaloPropagatorAlong_cfi import * from TrackingTools.GeomPropagators.BeamHaloPropagatorOpposite_cfi import * from TrackingTools.GeomPropagators.BeamHaloPropagatorAny_cfi import * -BeamHaloSHPropagatorAlong.ComponentName = 'BeamHaloSHPropagatorAlong' -BeamHaloSHPropagatorOpposite.ComponentName = 'BeamHaloSHPropagatorOpposite' -BeamHaloSHPropagatorAny.ComponentName = 'BeamHaloSHPropagatorAny' -BeamHaloMPropagatorAlong.ComponentName = 'BeamHaloMPropagatorAlong' -BeamHaloMPropagatorAlong.MaxDPhi = 10000 -BeamHaloMPropagatorOpposite.ComponentName = 'BeamHaloMPropagatorOpposite' -BeamHaloMPropagatorOpposite.MaxDPhi = 10000 -BeamHaloMPropagatorAlong.useRungeKutta = True -BeamHaloMPropagatorOpposite.useRungeKutta = True + +# clone the steppinghelix propagators +BeamHaloSHPropagatorAlong = SteppingHelixPropagatorAlong.clone( + ComponentName = 'BeamHaloSHPropagatorAlong' +) +BeamHaloSHPropagatorOpposite = SteppingHelixPropagatorOpposite.clone( + ComponentName = 'BeamHaloSHPropagatorOpposite' +) +BeamHaloSHPropagatorAny = SteppingHelixPropagatorAny.clone( + ComponentName = 'BeamHaloSHPropagatorAny' +) +# clone some material propagators +BeamHaloMPropagatorAlong = MaterialPropagator.clone( + ComponentName = 'BeamHaloMPropagatorAlong', + MaxDPhi = 10000, + useRungeKutta = True +) + +BeamHaloMPropagatorOpposite = OppositeMaterialPropagator.clone( + ComponentName = 'BeamHaloMPropagatorOpposite', + MaxDPhi = 10000, + useRungeKutta = True +) diff --git a/TrackingTools/GeomPropagators/src/StraightLinePlaneCrossing.cc b/TrackingTools/GeomPropagators/src/StraightLinePlaneCrossing.cc index 91d2f93c9c276..e1c59c55a37b7 100644 --- a/TrackingTools/GeomPropagators/src/StraightLinePlaneCrossing.cc +++ b/TrackingTools/GeomPropagators/src/StraightLinePlaneCrossing.cc @@ -1,6 +1,7 @@ #include "TrackingTools/GeomPropagators/interface/StraightLinePlaneCrossing.h" #include "DataFormats/GeometrySurface/interface/Plane.h" +#include "FWCore/Utilities/interface/isFinite.h" // // Propagation status and path length to intersection @@ -14,8 +15,8 @@ std::pair StraightLinePlaneCrossing::pathLength(const Plane& plane auto pz = planeNormal.dot(theP0); auto dS = -planeNormal.dot(theX0 - planePosition) / pz; // check direction - auto opposite2Track = - ((thePropDir == alongMomentum) & (dS < 0.f)) | ((thePropDir == oppositeToMomentum) & (dS > 0.f)); + auto opposite2Track = ((thePropDir == alongMomentum) & (dS < 0.f)) | + ((thePropDir == oppositeToMomentum) & (dS > 0.f)) | edm::isNotFinite(dS); // // Return result // diff --git a/TrackingTools/GsfTracking/python/BwdAnalyticalPropagator_cfi.py b/TrackingTools/GsfTracking/python/BwdAnalyticalPropagator_cfi.py index dfc90c5296daf..893768f7ee53a 100644 --- a/TrackingTools/GsfTracking/python/BwdAnalyticalPropagator_cfi.py +++ b/TrackingTools/GsfTracking/python/BwdAnalyticalPropagator_cfi.py @@ -1,11 +1,10 @@ import FWCore.ParameterSet.Config as cms -import copy from TrackingTools.GsfTracking.FwdAnalyticalPropagator_cfi import * # # "backward" propagator for electrons # -bwdAnalyticalPropagator = copy.deepcopy(fwdAnalyticalPropagator) -bwdAnalyticalPropagator.ComponentName = 'bwdAnalyticalPropagator' -bwdAnalyticalPropagator.PropagationDirection = 'oppositeToMomentum' - +bwdAnalyticalPropagator = fwdAnalyticalPropagator.clone( + ComponentName = 'bwdAnalyticalPropagator', + PropagationDirection = 'oppositeToMomentum' +) diff --git a/TrackingTools/GsfTracking/python/BwdElectronPropagator_cfi.py b/TrackingTools/GsfTracking/python/BwdElectronPropagator_cfi.py index 61a3aea7fbeb9..458bb3ae3b1b0 100644 --- a/TrackingTools/GsfTracking/python/BwdElectronPropagator_cfi.py +++ b/TrackingTools/GsfTracking/python/BwdElectronPropagator_cfi.py @@ -4,7 +4,7 @@ # # "backward" propagator for electrons # -bwdElectronPropagator = TrackingTools.MaterialEffects.OppositeMaterialPropagator_cfi.OppositeMaterialPropagator.clone() -bwdElectronPropagator.Mass = 0.000511 -bwdElectronPropagator.ComponentName = 'bwdElectronPropagator' - +bwdElectronPropagator = TrackingTools.MaterialEffects.OppositeMaterialPropagator_cfi.OppositeMaterialPropagator.clone( + Mass = 0.000511, + ComponentName = 'bwdElectronPropagator' +) diff --git a/TrackingTools/GsfTracking/python/CkfElectronCandidateMaker_cff.py b/TrackingTools/GsfTracking/python/CkfElectronCandidateMaker_cff.py index 9d010b56ea3bb..69f0587d042ff 100644 --- a/TrackingTools/GsfTracking/python/CkfElectronCandidateMaker_cff.py +++ b/TrackingTools/GsfTracking/python/CkfElectronCandidateMaker_cff.py @@ -2,64 +2,66 @@ #Chi2 estimator import TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi -ElectronChi2 = TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi.Chi2MeasurementEstimator.clone() -ElectronChi2.ComponentName = 'ElectronChi2' -ElectronChi2.MaxChi2 = 2000. -ElectronChi2.nSigma = 3. -ElectronChi2.MaxDisplacement = 100 -ElectronChi2.MaxSagitta = -1 - +ElectronChi2 = TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi.Chi2MeasurementEstimator.clone( + ComponentName = 'ElectronChi2', + MaxChi2 = 2000., + nSigma = 3., + MaxDisplacement = 100, + MaxSagitta = -1 +) # Trajectory Filter import TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff TrajectoryFilterForElectrons = TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff.CkfBaseTrajectoryFilter_block.clone( - chargeSignificance = cms.double(-1.0), - minPt = cms.double(2.0), - minHitsMinPt = cms.int32(-1), - ComponentType = cms.string('CkfBaseTrajectoryFilter'), - maxLostHits = cms.int32(1), - maxNumberOfHits = cms.int32(-1), - maxConsecLostHits = cms.int32(1), - nSigmaMinPt = cms.double(5.0), - minimumNumberOfHits = cms.int32(5), - maxCCCLostHits = cms.int32(9999), - minGoodStripCharge = cms.PSet(refToPSet_ = cms.string('SiStripClusterChargeCutNone')) + chargeSignificance = -1.0, + minPt = 2.0, + minHitsMinPt = -1, + ComponentType = 'CkfBaseTrajectoryFilter', + maxLostHits = 1, + maxNumberOfHits = -1, + maxConsecLostHits = 1, + nSigmaMinPt = 5.0, + minimumNumberOfHits = 5, + maxCCCLostHits = 9999, + minGoodStripCharge = dict(refToPSet_ = 'SiStripClusterChargeCutNone') ) # Trajectory Builder import RecoTracker.CkfPattern.CkfTrajectoryBuilder_cfi -TrajectoryBuilderForElectrons = RecoTracker.CkfPattern.CkfTrajectoryBuilder_cfi.CkfTrajectoryBuilder.clone() -TrajectoryBuilderForElectrons.trajectoryFilter.refToPSet_ = 'TrajectoryFilterForElectrons' -TrajectoryBuilderForElectrons.maxCand = 5 -TrajectoryBuilderForElectrons.intermediateCleaning = False -TrajectoryBuilderForElectrons.propagatorAlong = 'fwdGsfElectronPropagator' -TrajectoryBuilderForElectrons.propagatorOpposite = 'bwdGsfElectronPropagator' -TrajectoryBuilderForElectrons.estimator = 'ElectronChi2' -TrajectoryBuilderForElectrons.MeasurementTrackerName = '' -TrajectoryBuilderForElectrons.lostHitPenalty = 90. -TrajectoryBuilderForElectrons.alwaysUseInvalidHits = True -TrajectoryBuilderForElectrons.TTRHBuilder = 'WithTrackAngle' -TrajectoryBuilderForElectrons.updator = 'KFUpdator' - - +TrajectoryBuilderForElectrons = RecoTracker.CkfPattern.CkfTrajectoryBuilder_cfi.CkfTrajectoryBuilder.clone( + trajectoryFilter = dict(refToPSet_ = 'TrajectoryFilterForElectrons'), + maxCand = 5, + intermediateCleaning = False, + propagatorAlong = 'fwdGsfElectronPropagator', + propagatorOpposite = 'bwdGsfElectronPropagator', + estimator = 'ElectronChi2', + MeasurementTrackerName = '', + lostHitPenalty = 90., + alwaysUseInvalidHits = True, + TTRHBuilder = 'WithTrackAngle', + updator = 'KFUpdator' +) +from Configuration.ProcessModifiers.seedingDeepCore_cff import seedingDeepCore +seedingDeepCore.toModify(TrajectoryBuilderForElectrons, maxPtForLooperReconstruction = cms.double(0.0) ) # CKFTrackCandidateMaker from RecoTracker.CkfPattern.CkfTrackCandidates_cff import * import RecoTracker.CkfPattern.CkfTrackCandidates_cfi -electronCkfTrackCandidates = RecoTracker.CkfPattern.CkfTrackCandidates_cfi.ckfTrackCandidates.clone() -electronCkfTrackCandidates.src = cms.InputTag('electronMergedSeeds') -electronCkfTrackCandidates.TrajectoryBuilderPSet.refToPSet_ = 'TrajectoryBuilderForElectrons' -#electronCkfTrackCandidates.TrajectoryCleaner = 'TrajectoryCleanerBySharedHits' -electronCkfTrackCandidates.NavigationSchool = 'SimpleNavigationSchool' -electronCkfTrackCandidates.RedundantSeedCleaner = 'CachingSeedCleanerBySharedInput' +electronCkfTrackCandidates = RecoTracker.CkfPattern.CkfTrackCandidates_cfi.ckfTrackCandidates.clone( + src = 'electronMergedSeeds', + TrajectoryBuilderPSet = dict(refToPSet_ = 'TrajectoryBuilderForElectrons'), + #TrajectoryCleaner = 'TrajectoryCleanerBySharedHits' + NavigationSchool = 'SimpleNavigationSchool', + RedundantSeedCleaner = 'CachingSeedCleanerBySharedInput', + TrajectoryCleaner = 'electronTrajectoryCleanerBySharedHits' +) from TrackingTools.TrajectoryCleaning.TrajectoryCleanerBySharedHits_cfi import trajectoryCleanerBySharedHits electronTrajectoryCleanerBySharedHits = trajectoryCleanerBySharedHits.clone( - ComponentName = cms.string('electronTrajectoryCleanerBySharedHits'), - ValidHitBonus = cms.double(1000.0), - MissingHitPenalty = cms.double(0.0) - ) -electronCkfTrackCandidates.TrajectoryCleaner = 'electronTrajectoryCleanerBySharedHits' + ComponentName = 'electronTrajectoryCleanerBySharedHits', + ValidHitBonus = 1000.0, + MissingHitPenalty = 0.0 +) # "backward" propagator for electrons @@ -71,4 +73,3 @@ electronCkfTrackCandidatesFromMultiCl = electronCkfTrackCandidates.clone( src = 'electronMergedSeedsFromMultiCl' ) - diff --git a/TrackingTools/GsfTracking/python/CkfElectronCandidatesChi2_cfi.py b/TrackingTools/GsfTracking/python/CkfElectronCandidatesChi2_cfi.py index 176357b271f56..03fdee284724b 100644 --- a/TrackingTools/GsfTracking/python/CkfElectronCandidatesChi2_cfi.py +++ b/TrackingTools/GsfTracking/python/CkfElectronCandidatesChi2_cfi.py @@ -5,9 +5,8 @@ # (definition should be moved?) # import TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi -electronChi2 = TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi.Chi2MeasurementEstimator.clone() -electronChi2.ComponentName = cms.string('electronChi2') -electronChi2.nSigma = 3.0 -electronChi2.MaxChi2 = 100.0 - - +electronChi2 = TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi.Chi2MeasurementEstimator.clone( + ComponentName = 'electronChi2', + nSigma = 3.0, + MaxChi2 = 100.0 +) diff --git a/TrackingTools/GsfTracking/python/CkfElectronCandidates_cfi.py b/TrackingTools/GsfTracking/python/CkfElectronCandidates_cfi.py index 476e9a1c71d56..2ee979e8a4772 100644 --- a/TrackingTools/GsfTracking/python/CkfElectronCandidates_cfi.py +++ b/TrackingTools/GsfTracking/python/CkfElectronCandidates_cfi.py @@ -1,7 +1,8 @@ import FWCore.ParameterSet.Config as cms -import copy from RecoTracker.CkfPattern.CkfTrackCandidates_cfi import * -CkfElectronCandidates = copy.deepcopy(ckfTrackCandidates) -CkfElectronCandidates.TrajectoryBuilderPSet.refToPSet_ = 'CkfElectronTrajectoryBuilder' - +CkfElectronCandidates = ckfTrackCandidates.clone( + TrajectoryBuilderPSet = dict( + refToPSet_ = 'CkfElectronTrajectoryBuilder' + ) +) diff --git a/TrackingTools/GsfTracking/python/CkfElectronTrajectoryBuilder_cfi.py b/TrackingTools/GsfTracking/python/CkfElectronTrajectoryBuilder_cfi.py index 4a22d020e29cc..a142715f0e1bf 100644 --- a/TrackingTools/GsfTracking/python/CkfElectronTrajectoryBuilder_cfi.py +++ b/TrackingTools/GsfTracking/python/CkfElectronTrajectoryBuilder_cfi.py @@ -1,9 +1,8 @@ import FWCore.ParameterSet.Config as cms -import copy from RecoTracker.CkfPattern.CkfTrajectoryBuilder_cfi import * -CkfElectronTrajectoryBuilder = copy.deepcopy(CkfTrajectoryBuilder) -CkfElectronTrajectoryBuilder.propagatorAlong = 'fwdElectronPropagator' -CkfElectronTrajectoryBuilder.propagatorOpposite = 'bwdElectronPropagator' -CkfElectronTrajectoryBuilder.estimator = 'electronChi2' - +CkfElectronTrajectoryBuilder = CkfTrajectoryBuilder.clone( + propagatorAlong = 'fwdElectronPropagator', + propagatorOpposite = 'bwdElectronPropagator', + estimator = 'electronChi2' +) diff --git a/TrackingTools/GsfTracking/python/FwdElectronPropagator_cfi.py b/TrackingTools/GsfTracking/python/FwdElectronPropagator_cfi.py index f58b099e4278d..4ed0d6f8ab152 100644 --- a/TrackingTools/GsfTracking/python/FwdElectronPropagator_cfi.py +++ b/TrackingTools/GsfTracking/python/FwdElectronPropagator_cfi.py @@ -4,7 +4,7 @@ # # "forward" propagator for electrons # -fwdElectronPropagator = TrackingTools.MaterialEffects.MaterialPropagator_cfi.MaterialPropagator.clone() -fwdElectronPropagator.Mass = 0.000511 -fwdElectronPropagator.ComponentName = 'fwdElectronPropagator' - +fwdElectronPropagator = TrackingTools.MaterialEffects.MaterialPropagator_cfi.MaterialPropagator.clone( + Mass = 0.000511, + ComponentName = 'fwdElectronPropagator' +) diff --git a/TrackingTools/GsfTracking/python/GsfElectronFittingSmoother_cfi.py b/TrackingTools/GsfTracking/python/GsfElectronFittingSmoother_cfi.py index 9848fede1f58f..0005ab2fad769 100644 --- a/TrackingTools/GsfTracking/python/GsfElectronFittingSmoother_cfi.py +++ b/TrackingTools/GsfTracking/python/GsfElectronFittingSmoother_cfi.py @@ -1,9 +1,8 @@ import FWCore.ParameterSet.Config as cms import TrackingTools.TrackFitters.KFFittingSmoother_cfi -GsfElectronFittingSmoother = TrackingTools.TrackFitters.KFFittingSmoother_cfi.KFFittingSmoother.clone() -GsfElectronFittingSmoother.ComponentName = 'GsfElectronFittingSmoother' -GsfElectronFittingSmoother.Fitter = 'GsfTrajectoryFitter' -GsfElectronFittingSmoother.Smoother = 'GsfTrajectorySmoother' - - +GsfElectronFittingSmoother = TrackingTools.TrackFitters.KFFittingSmoother_cfi.KFFittingSmoother.clone( + ComponentName = 'GsfElectronFittingSmoother', + Fitter = 'GsfTrajectoryFitter', + Smoother = 'GsfTrajectorySmoother' +) diff --git a/TrackingTools/GsfTracking/python/GsfElectronGsfFit_cff.py b/TrackingTools/GsfTracking/python/GsfElectronGsfFit_cff.py index 6adbc883107eb..1bd6d2c66f914 100644 --- a/TrackingTools/GsfTracking/python/GsfElectronGsfFit_cff.py +++ b/TrackingTools/GsfTracking/python/GsfElectronGsfFit_cff.py @@ -4,13 +4,13 @@ from TrackingTools.GsfTracking.fwdGsfElectronPropagator_cff import * from TrackingTools.GsfTracking.GsfElectronFit_cff import * import TrackingTools.GsfTracking.GsfElectronFit_cfi -electronGsfTracks = TrackingTools.GsfTracking.GsfElectronFit_cfi.GsfGlobalElectronTest.clone() -electronGsfTracks.src = 'electronCkfTrackCandidates' -electronGsfTracks.Propagator = 'fwdGsfElectronPropagator' -electronGsfTracks.Fitter = 'GsfElectronFittingSmoother' -electronGsfTracks.TTRHBuilder = 'WithTrackAngle' -electronGsfTracks.TrajectoryInEvent = False - +electronGsfTracks = TrackingTools.GsfTracking.GsfElectronFit_cfi.GsfGlobalElectronTest.clone( + src = 'electronCkfTrackCandidates', + Propagator = 'fwdGsfElectronPropagator', + Fitter = 'GsfElectronFittingSmoother', + TTRHBuilder = 'WithTrackAngle', + TrajectoryInEvent = False +) # FastSim has no template fit on tracker hits # replace the ECAL driven electron track candidates with the FastSim emulated ones from Configuration.Eras.Modifier_fastSim_cff import fastSim @@ -21,4 +21,3 @@ electronGsfTracksFromMultiCl = electronGsfTracks.clone( src = 'electronCkfTrackCandidatesFromMultiCl' ) - diff --git a/TrackingTools/GsfTracking/python/GsfElectronTracking_cff.py b/TrackingTools/GsfTracking/python/GsfElectronTracking_cff.py index c558d1e67eb61..759fcfbcdd44b 100644 --- a/TrackingTools/GsfTracking/python/GsfElectronTracking_cff.py +++ b/TrackingTools/GsfTracking/python/GsfElectronTracking_cff.py @@ -42,7 +42,7 @@ ) from SimTracker.TrackAssociation.trackTimeValueMapProducer_cfi import trackTimeValueMapProducer -gsfTrackTimeValueMapProducer = trackTimeValueMapProducer.clone(trackSrc = cms.InputTag('electronGsfTracks')) +gsfTrackTimeValueMapProducer = trackTimeValueMapProducer.clone(trackSrc = 'electronGsfTracks') electronGsfTrackingWithTimingTask = cms.Task(electronGsfTrackingTask.copy(),gsfTrackTimeValueMapProducer) electronGsfTrackingWithTiming = cms.Sequence(electronGsfTrackingWithTimingTask) diff --git a/TrackingTools/GsfTracking/python/bwdGsfElectronPropagator_cff.py b/TrackingTools/GsfTracking/python/bwdGsfElectronPropagator_cff.py index 27dcbc08039b5..fb4a08eae5c5c 100644 --- a/TrackingTools/GsfTracking/python/bwdGsfElectronPropagator_cff.py +++ b/TrackingTools/GsfTracking/python/bwdGsfElectronPropagator_cff.py @@ -2,7 +2,7 @@ import TrackingTools.MaterialEffects.OppositeMaterialPropagator_cfi # "backward" propagator for electrons -bwdGsfElectronPropagator = TrackingTools.MaterialEffects.OppositeMaterialPropagator_cfi.OppositeMaterialPropagator.clone() -bwdGsfElectronPropagator.Mass = 0.000511 -bwdGsfElectronPropagator.ComponentName = 'bwdGsfElectronPropagator' - +bwdGsfElectronPropagator = TrackingTools.MaterialEffects.OppositeMaterialPropagator_cfi.OppositeMaterialPropagator.clone( + Mass = 0.000511, + ComponentName = 'bwdGsfElectronPropagator' +) diff --git a/TrackingTools/GsfTracking/python/fwdGsfElectronPropagator_cff.py b/TrackingTools/GsfTracking/python/fwdGsfElectronPropagator_cff.py index 3ecb583305008..777f793838441 100644 --- a/TrackingTools/GsfTracking/python/fwdGsfElectronPropagator_cff.py +++ b/TrackingTools/GsfTracking/python/fwdGsfElectronPropagator_cff.py @@ -2,7 +2,7 @@ import TrackingTools.MaterialEffects.MaterialPropagator_cfi # "forward" propagator for electrons -fwdGsfElectronPropagator = TrackingTools.MaterialEffects.MaterialPropagator_cfi.MaterialPropagator.clone() -fwdGsfElectronPropagator.Mass = 0.000511 -fwdGsfElectronPropagator.ComponentName = 'fwdGsfElectronPropagator' - +fwdGsfElectronPropagator = TrackingTools.MaterialEffects.MaterialPropagator_cfi.MaterialPropagator.clone( + Mass = 0.000511, + ComponentName = 'fwdGsfElectronPropagator' +) diff --git a/TrackingTools/MaterialEffects/python/MaterialPropagatorParabolicMf_cff.py b/TrackingTools/MaterialEffects/python/MaterialPropagatorParabolicMf_cff.py index 310595b46d167..b6cef30f13557 100644 --- a/TrackingTools/MaterialEffects/python/MaterialPropagatorParabolicMf_cff.py +++ b/TrackingTools/MaterialEffects/python/MaterialPropagatorParabolicMf_cff.py @@ -2,13 +2,12 @@ from TrackingTools.MaterialEffects.MaterialPropagator_cfi import MaterialPropagator MaterialPropagatorParabolicMF = MaterialPropagator.clone( - SimpleMagneticField = cms.string('ParabolicMf'), - ComponentName = cms.string('PropagatorWithMaterialParabolicMf') + SimpleMagneticField = 'ParabolicMf', + ComponentName = 'PropagatorWithMaterialParabolicMf' ) from TrackingTools.MaterialEffects.OppositeMaterialPropagator_cfi import OppositeMaterialPropagator OppositeMaterialPropagatorParabolicMF = OppositeMaterialPropagator.clone( - SimpleMagneticField = cms.string('ParabolicMf'), - ComponentName = cms.string('PropagatorWithMaterialParabolicMfOpposite') + SimpleMagneticField = 'ParabolicMf', + ComponentName = 'PropagatorWithMaterialParabolicMfOpposite' ) - diff --git a/TrackingTools/MaterialEffects/python/Propagators_PtMin09_cff.py b/TrackingTools/MaterialEffects/python/Propagators_PtMin09_cff.py index 491e97ebcd1be..505e6fe315eb6 100644 --- a/TrackingTools/MaterialEffects/python/Propagators_PtMin09_cff.py +++ b/TrackingTools/MaterialEffects/python/Propagators_PtMin09_cff.py @@ -11,11 +11,12 @@ # but should probably not be used for track fitting. import TrackingTools.MaterialEffects.MaterialPropagator_cfi -MaterialPropagatorPtMin09 = TrackingTools.MaterialEffects.MaterialPropagator_cfi.MaterialPropagator.clone() -MaterialPropagatorPtMin09.ComponentName = 'PropagatorWithMaterialPtMin09' -MaterialPropagatorPtMin09.ptMin = 0.9 - +MaterialPropagatorPtMin09 = TrackingTools.MaterialEffects.MaterialPropagator_cfi.MaterialPropagator.clone( + ComponentName = 'PropagatorWithMaterialPtMin09', + ptMin = 0.9 +) import TrackingTools.MaterialEffects.OppositeMaterialPropagator_cfi -OppositeMaterialPropagatorPtMin09 = TrackingTools.MaterialEffects.OppositeMaterialPropagator_cfi.OppositeMaterialPropagator.clone() -OppositeMaterialPropagatorPtMin09.ComponentName = 'PropagatorWithMaterialOppositePtMin09' -OppositeMaterialPropagatorPtMin09.ptMin = 0.9 +OppositeMaterialPropagatorPtMin09 = TrackingTools.MaterialEffects.OppositeMaterialPropagator_cfi.OppositeMaterialPropagator.clone( + ComponentName = 'PropagatorWithMaterialOppositePtMin09', + ptMin = 0.9 +) diff --git a/TrackingTools/Producers/python/analyticalPropagatorESProducer_cff.py b/TrackingTools/Producers/python/analyticalPropagatorESProducer_cff.py index b805adbaee522..62ca934597653 100644 --- a/TrackingTools/Producers/python/analyticalPropagatorESProducer_cff.py +++ b/TrackingTools/Producers/python/analyticalPropagatorESProducer_cff.py @@ -3,20 +3,19 @@ from TrackingTools.GeomPropagators.AnalyticalPropagator_cfi import AnalyticalPropagator anyDirectionAnalyticalPropagator = AnalyticalPropagator.clone( - MaxDPhi = cms.double( 1.6 ), - ComponentName = cms.string( "anyDirectionAnalyticalPropagator" ), - PropagationDirection = cms.string( "anyDirection" ) + MaxDPhi = 1.6 , + ComponentName = "anyDirectionAnalyticalPropagator" , + PropagationDirection = "anyDirection" ) alongMomentumAnalyticalPropagator = AnalyticalPropagator.clone( - MaxDPhi = cms.double( 1.6 ), - ComponentName = cms.string( "alongMomentumAnalyticalPropagator" ), - PropagationDirection = cms.string( "alongMomentum" ) + MaxDPhi = 1.6 , + ComponentName = "alongMomentumAnalyticalPropagator" , + PropagationDirection = "alongMomentum" ) oppositeToMomentumAnalyticalPropagator = AnalyticalPropagator.clone( - MaxDPhi = cms.double( 1.6 ), - ComponentName = cms.string( "oppositeToMomentumAnalyticalPropagator" ), - PropagationDirection = cms.string( "oppositeToMomentum" ) + MaxDPhi = 1.6 , + ComponentName = "oppositeToMomentumAnalyticalPropagator" , + PropagationDirection = "oppositeToMomentum" ) - diff --git a/TrackingTools/Records/interface/Records.h b/TrackingTools/Records/interface/Records.h index f5e9e7d7e41b6..fd776205f933c 100644 --- a/TrackingTools/Records/interface/Records.h +++ b/TrackingTools/Records/interface/Records.h @@ -2,3 +2,4 @@ #include "TrackingTools/Records/interface/DetIdAssociatorRecord.h" #include "TrackingTools/Records/interface/TransientRecHitRecord.h" #include "TrackingTools/Records/interface/TransientTrackRecord.h" +#include "TrackingTools/Records/interface/TfGraphRecord.h" diff --git a/TrackingTools/Records/interface/TfGraphRecord.h b/TrackingTools/Records/interface/TfGraphRecord.h new file mode 100644 index 0000000000000..cad4bfba9f998 --- /dev/null +++ b/TrackingTools/Records/interface/TfGraphRecord.h @@ -0,0 +1,22 @@ +#ifndef TrackingTools_Records_TfGraphRecord_h +#define TrackingTools_Records_TfGraphRecord_h +// -*- C++ -*- +// +// Package: TrackingTools/Records +// Class : TfGraphRecord +// +/**\class TfGraphRecord TfGraphRecord.h TrackingTools/Records/interface/TfGraphRecord.h + Description: Class to hold Record of a Tensorflow GraphDef that can be used to serve a pretrained tensorflow model for inference + Usage: + Used by DataFormats/TrackTfGraph to produce the GraphRecord and RecoTrack/FinalTrackSelection/plugins/TrackTfClassifier.cc to evaluate a track using the graph. +*/ +// +// Author: Joona Havukainen +// Created: Fri, 24 Jul 2020 07:39:35 GMT +// + +#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" + +class TfGraphRecord : public edm::eventsetup::EventSetupRecordImplementation {}; + +#endif diff --git a/TrackingTools/Records/src/TfGraphRecord.cc b/TrackingTools/Records/src/TfGraphRecord.cc new file mode 100644 index 0000000000000..edcbf58893369 --- /dev/null +++ b/TrackingTools/Records/src/TfGraphRecord.cc @@ -0,0 +1,12 @@ +// -*- C++ -*- +// +// Package: TrackingTools/Records +// Class : TfGraphRecord +// +// Author: Joona Havukainen +// Created: Fri, 24 Jul 2020 07:39:35 GMT + +#include "TrackingTools/Records/interface/TfGraphRecord.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +EVENTSETUP_RECORD_REG(TfGraphRecord); diff --git a/TrackingTools/TrackFitters/python/LooperFitters_cff.py b/TrackingTools/TrackFitters/python/LooperFitters_cff.py index 3356a87ff4c2a..41758d47a47f0 100644 --- a/TrackingTools/TrackFitters/python/LooperFitters_cff.py +++ b/TrackingTools/TrackFitters/python/LooperFitters_cff.py @@ -2,26 +2,25 @@ import TrackingTools.TrackFitters.KFTrajectoryFitter_cfi LooperTrajectoryFitter = TrackingTools.TrackFitters.KFTrajectoryFitter_cfi.KFTrajectoryFitter.clone( - ComponentName = cms.string('LooperFitter'), - Propagator = cms.string('PropagatorWithMaterialForLoopers') + ComponentName = 'LooperFitter', + Propagator = 'PropagatorWithMaterialForLoopers' ) import TrackingTools.TrackFitters.KFTrajectorySmoother_cfi LooperTrajectorySmoother = TrackingTools.TrackFitters.KFTrajectorySmoother_cfi.KFTrajectorySmoother.clone( - ComponentName = cms.string('LooperSmoother'), - Propagator = cms.string('PropagatorWithMaterialForLoopers'), - errorRescaling = cms.double(10.0), + ComponentName = 'LooperSmoother', + Propagator = 'PropagatorWithMaterialForLoopers', + errorRescaling = 10.0, ) import TrackingTools.TrackFitters.KFFittingSmoother_cfi LooperFittingSmoother = TrackingTools.TrackFitters.KFFittingSmoother_cfi.KFFittingSmoother.clone( - ComponentName = cms.string('LooperFittingSmoother'), - Fitter = cms.string('LooperFitter'), - Smoother = cms.string('LooperSmoother'), - EstimateCut = cms.double(20.0), + ComponentName = 'LooperFittingSmoother', + Fitter = 'LooperFitter', + Smoother = 'LooperSmoother', + EstimateCut = 20.0, # ggiurgiu@fnal.gov : Any value lower than -15 turns off this cut. # Recommended default value: -14.0. This will reject only the worst hits with negligible loss in track efficiency. - LogPixelProbabilityCut = cms.double(-14.0), - MinNumberOfHits = cms.int32(3) + LogPixelProbabilityCut = -14.0, + MinNumberOfHits = 3 ) - diff --git a/TrackingTools/TrackFitters/python/MRHFitters_cff.py b/TrackingTools/TrackFitters/python/MRHFitters_cff.py index 1bd9266eabbcb..2d1d3f48c78b5 100644 --- a/TrackingTools/TrackFitters/python/MRHFitters_cff.py +++ b/TrackingTools/TrackFitters/python/MRHFitters_cff.py @@ -5,20 +5,19 @@ import TrackingTools.TrackFitters.KFTrajectoryFitter_cfi MRHTrajectoryFitter = TrackingTools.TrackFitters.KFTrajectoryFitter_cfi.KFTrajectoryFitter.clone( ComponentName = 'MRHFitter', - Estimator = 'MRHChi2', - Propagator = 'RungeKuttaTrackerPropagator' - ) + Estimator = 'MRHChi2', + Propagator = 'RungeKuttaTrackerPropagator' +) import TrackingTools.TrackFitters.KFTrajectorySmoother_cfi MRHTrajectorySmoother = TrackingTools.TrackFitters.KFTrajectorySmoother_cfi.KFTrajectorySmoother.clone( ComponentName = 'MRHSmoother', - Estimator = 'MRHChi2', - Propagator = 'RungeKuttaTrackerPropagator' - ) + Estimator = 'MRHChi2', + Propagator = 'RungeKuttaTrackerPropagator' +) import TrackingTools.TrackFitters.KFFittingSmoother_cfi MRHFittingSmoother = TrackingTools.TrackFitters.KFFittingSmoother_cfi.KFFittingSmoother.clone( ComponentName = 'MRHFittingSmoother', - Fitter = 'MRHFitter', - Smoother = 'MRHSmoother' - ) - + Fitter = 'MRHFitter', + Smoother = 'MRHSmoother' +) diff --git a/TrackingTools/TrackFitters/python/RungeKutta1DFitters_cff.py b/TrackingTools/TrackFitters/python/RungeKutta1DFitters_cff.py index 6dcd474d7f468..bee039f09fe59 100644 --- a/TrackingTools/TrackFitters/python/RungeKutta1DFitters_cff.py +++ b/TrackingTools/TrackFitters/python/RungeKutta1DFitters_cff.py @@ -2,27 +2,27 @@ import TrackingTools.TrackFitters.KFTrajectoryFitter_cfi RK1DTrajectoryFitter = TrackingTools.TrackFitters.KFTrajectoryFitter_cfi.KFTrajectoryFitter.clone( - ComponentName = cms.string('RK1DFitter'), - Propagator = cms.string('RungeKuttaTrackerPropagator'), - Updator = cms.string('KFSwitching1DUpdator') + ComponentName = 'RK1DFitter', + Propagator = 'RungeKuttaTrackerPropagator', + Updator = 'KFSwitching1DUpdator' ) import TrackingTools.TrackFitters.KFTrajectorySmoother_cfi RK1DTrajectorySmoother = TrackingTools.TrackFitters.KFTrajectorySmoother_cfi.KFTrajectorySmoother.clone( - ComponentName = cms.string('RK1DSmoother'), - Propagator = cms.string('RungeKuttaTrackerPropagator'), - Updator = cms.string('KFSwitching1DUpdator') + ComponentName = 'RK1DSmoother', + Propagator = 'RungeKuttaTrackerPropagator', + Updator = 'KFSwitching1DUpdator' ) import TrackingTools.TrackFitters.KFFittingSmoother_cfi RK1DFittingSmoother = TrackingTools.TrackFitters.KFFittingSmoother_cfi.KFFittingSmoother.clone( - ComponentName = cms.string('RK1DFittingSmoother'), - Fitter = cms.string('RK1DFitter'), - Smoother = cms.string('RK1DSmoother') + ComponentName = 'RK1DFittingSmoother', + Fitter = 'RK1DFitter', + Smoother = 'RK1DSmoother' ) RKOutliers1DFittingSmoother = RK1DFittingSmoother.clone( - ComponentName = cms.string('RKOutliers1DFittingSmoother'), - EstimateCut = cms.double(20.0), - MinNumberOfHits = cms.int32(3), + ComponentName = 'RKOutliers1DFittingSmoother', + EstimateCut = 20.0, + MinNumberOfHits = 3, ) diff --git a/TrackingTools/TrackFitters/python/RungeKuttaFitters_cff.py b/TrackingTools/TrackFitters/python/RungeKuttaFitters_cff.py index 4a8845500d236..de1e3cb289c6d 100644 --- a/TrackingTools/TrackFitters/python/RungeKuttaFitters_cff.py +++ b/TrackingTools/TrackFitters/python/RungeKuttaFitters_cff.py @@ -1,26 +1,26 @@ import FWCore.ParameterSet.Config as cms import TrackingTools.TrackFitters.KFTrajectoryFitter_cfi -RKTrajectoryFitter = TrackingTools.TrackFitters.KFTrajectoryFitter_cfi.KFTrajectoryFitter.clone() -RKTrajectoryFitter.ComponentName = 'RKFitter' -RKTrajectoryFitter.Propagator = 'RungeKuttaTrackerPropagator' - +RKTrajectoryFitter = TrackingTools.TrackFitters.KFTrajectoryFitter_cfi.KFTrajectoryFitter.clone( + ComponentName = 'RKFitter', + Propagator = 'RungeKuttaTrackerPropagator' +) import TrackingTools.TrackFitters.KFTrajectorySmoother_cfi -RKTrajectorySmoother = TrackingTools.TrackFitters.KFTrajectorySmoother_cfi.KFTrajectorySmoother.clone() -RKTrajectorySmoother.ComponentName = 'RKSmoother' -RKTrajectorySmoother.Propagator = 'RungeKuttaTrackerPropagator' - +RKTrajectorySmoother = TrackingTools.TrackFitters.KFTrajectorySmoother_cfi.KFTrajectorySmoother.clone( + ComponentName = 'RKSmoother', + Propagator = 'RungeKuttaTrackerPropagator' +) import TrackingTools.TrackFitters.KFFittingSmoother_cfi -RKFittingSmoother = TrackingTools.TrackFitters.KFFittingSmoother_cfi.KFFittingSmoother.clone() -RKFittingSmoother.ComponentName = 'RKFittingSmoother' -RKFittingSmoother.Fitter = 'RKFitter' -RKFittingSmoother.Smoother = 'RKSmoother' - - -KFFittingSmootherWithOutliersRejectionAndRK = RKFittingSmoother.clone() -KFFittingSmootherWithOutliersRejectionAndRK.ComponentName = 'KFFittingSmootherWithOutliersRejectionAndRK' -KFFittingSmootherWithOutliersRejectionAndRK.EstimateCut = 20.0 -KFFittingSmootherWithOutliersRejectionAndRK.MinNumberOfHits = 3 - +RKFittingSmoother = TrackingTools.TrackFitters.KFFittingSmoother_cfi.KFFittingSmoother.clone( + ComponentName = 'RKFittingSmoother', + Fitter = 'RKFitter', + Smoother = 'RKSmoother' +) + +KFFittingSmootherWithOutliersRejectionAndRK = RKFittingSmoother.clone( + ComponentName = 'KFFittingSmootherWithOutliersRejectionAndRK', + EstimateCut = 20.0, + MinNumberOfHits = 3 +) diff --git a/TrackingTools/TrackRefitter/python/TracksToTrajectories_cff.py b/TrackingTools/TrackRefitter/python/TracksToTrajectories_cff.py index 1ea0d814c0f66..bed3c688f5e73 100644 --- a/TrackingTools/TrackRefitter/python/TracksToTrajectories_cff.py +++ b/TrackingTools/TrackRefitter/python/TracksToTrajectories_cff.py @@ -13,46 +13,48 @@ from TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi import * -Chi2EstimatorForRefit = Chi2MeasurementEstimator.clone() -Chi2EstimatorForRefit.ComponentName = cms.string('Chi2EstimatorForRefit') -Chi2EstimatorForRefit.MaxChi2 = cms.double(100000.0) -Chi2EstimatorForRefit.nSigma = cms.double(3.0) - +Chi2EstimatorForRefit = Chi2MeasurementEstimator.clone( + ComponentName = 'Chi2EstimatorForRefit', + MaxChi2 = 100000.0, + nSigma = 3.0 +) from TrackingTools.TrackFitters.KFTrajectoryFitter_cfi import * from TrackingTools.TrackFitters.KFTrajectorySmoother_cfi import * -KFFitterForRefitOutsideIn = KFTrajectoryFitter.clone() -KFFitterForRefitOutsideIn.ComponentName = cms.string('KFFitterForRefitOutsideIn') -KFFitterForRefitOutsideIn.Propagator = cms.string('SmartPropagatorAnyRKOpposite') -KFFitterForRefitOutsideIn.Updator = cms.string('KFUpdator') -KFFitterForRefitOutsideIn.Estimator = cms.string('Chi2EstimatorForRefit') -KFFitterForRefitOutsideIn.minHits = cms.int32(3) - -KFSmootherForRefitOutsideIn = KFTrajectorySmoother.clone() -KFSmootherForRefitOutsideIn.ComponentName = cms.string('KFSmootherForRefitOutsideIn') -KFSmootherForRefitOutsideIn.Propagator = cms.string('SmartPropagatorAnyRKOpposite') -KFSmootherForRefitOutsideIn.Updator = cms.string('KFUpdator') -KFSmootherForRefitOutsideIn.Estimator = cms.string('Chi2EstimatorForRefit') -KFSmootherForRefitOutsideIn.errorRescaling = cms.double(100.0) -KFSmootherForRefitOutsideIn.minHits = cms.int32(3) +KFFitterForRefitOutsideIn = KFTrajectoryFitter.clone( + ComponentName = 'KFFitterForRefitOutsideIn', + Propagator = 'SmartPropagatorAnyRKOpposite', + Updator = 'KFUpdator', + Estimator = 'Chi2EstimatorForRefit', + minHits = 3 +) +KFSmootherForRefitOutsideIn = KFTrajectorySmoother.clone( + ComponentName = 'KFSmootherForRefitOutsideIn', + Propagator = 'SmartPropagatorAnyRKOpposite', + Updator = 'KFUpdator', + Estimator = 'Chi2EstimatorForRefit', + errorRescaling = 100.0, + minHits = 3 +) # -KFFitterForRefitInsideOut = KFTrajectoryFitter.clone() -KFFitterForRefitInsideOut.ComponentName = cms.string('KFFitterForRefitInsideOut') -KFFitterForRefitInsideOut.Propagator = cms.string('SmartPropagatorAnyRK') -KFFitterForRefitInsideOut.Updator = cms.string('KFUpdator') -KFFitterForRefitInsideOut.Estimator = cms.string('Chi2EstimatorForRefit') -KFFitterForRefitInsideOut.minHits = cms.int32(3) +KFFitterForRefitInsideOut = KFTrajectoryFitter.clone( + ComponentName = 'KFFitterForRefitInsideOut', + Propagator = 'SmartPropagatorAnyRK', + Updator = 'KFUpdator', + Estimator = 'Chi2EstimatorForRefit', + minHits = 3 +) - -KFSmootherForRefitInsideOut = KFTrajectorySmoother.clone() -KFSmootherForRefitInsideOut.ComponentName = cms.string('KFSmootherForRefitInsideOut') -KFSmootherForRefitInsideOut.Propagator = cms.string('SmartPropagatorAnyRK') -KFSmootherForRefitInsideOut.Updator = cms.string('KFUpdator') -KFSmootherForRefitInsideOut.Estimator = cms.string('Chi2EstimatorForRefit') -KFSmootherForRefitInsideOut.errorRescaling = cms.double(100.0) -KFSmootherForRefitInsideOut.minHits = cms.int32(3) +KFSmootherForRefitInsideOut = KFTrajectorySmoother.clone( + ComponentName = 'KFSmootherForRefitInsideOut', + Propagator = 'SmartPropagatorAnyRK', + Updator = 'KFUpdator', + Estimator = 'Chi2EstimatorForRefit', + errorRescaling = 100.0, + minHits = 3 +) from Configuration.Eras.Modifier_fastSim_cff import fastSim # FastSim doesn't use Runge Kute for propagation @@ -61,4 +63,3 @@ fastSim.toModify(KFSmootherForRefitOutsideIn, Propagator = 'SmartPropagator') fastSim.toModify(KFFitterForRefitInsideOut, Propagator = "SmartPropagatorAny") fastSim.toModify(KFSmootherForRefitInsideOut, Propagator = "SmartPropagatorAny") - diff --git a/TrackingTools/TrackRefitter/python/cosmicMuonTrajectories_cff.py b/TrackingTools/TrackRefitter/python/cosmicMuonTrajectories_cff.py index 63e93440077cb..b99b4668ada29 100644 --- a/TrackingTools/TrackRefitter/python/cosmicMuonTrajectories_cff.py +++ b/TrackingTools/TrackRefitter/python/cosmicMuonTrajectories_cff.py @@ -23,12 +23,14 @@ cosmicMuons = cms.EDProducer("TracksToTrajectories", Type = cms.string("CosmicMuonsForAlignment"), Tracks = cms.InputTag("cosmicMuons"), - TrackTransformer = cms.PSet( TrackerRecHitBuilder = cms.string('WithTrackAngle'), - MuonRecHitBuilder = cms.string('MuonRecHitBuilder'), - MTDRecHitBuilder = cms.string('MTDRecHitBuilder'), - RefitRPCHits = cms.bool(True) - ) - ) + TrackTransformer = cms.PSet( + TrackerRecHitBuilder = cms.string('WithTrackAngle'), + MuonRecHitBuilder = cms.string('MuonRecHitBuilder'), + MTDRecHitBuilder = cms.string('MTDRecHitBuilder'), + RefitRPCHits = cms.bool(True) + ) + ) -MuAlCosmics = cosmicMuons.clone() -MuAlCosmics.Tracks = cms.InputTag("ALCARECOMuAlGlobalCosmics","StandAlone") +MuAlCosmics = cosmicMuons.clone( + Tracks = "ALCARECOMuAlGlobalCosmics:StandAlone" +) diff --git a/TrackingTools/TrackRefitter/python/globalCosmicMuonTrajectories_cff.py b/TrackingTools/TrackRefitter/python/globalCosmicMuonTrajectories_cff.py index d58b45bc0c071..1387de9e7ac2a 100644 --- a/TrackingTools/TrackRefitter/python/globalCosmicMuonTrajectories_cff.py +++ b/TrackingTools/TrackRefitter/python/globalCosmicMuonTrajectories_cff.py @@ -16,23 +16,25 @@ globalCosmicMuons = cms.EDProducer("TracksToTrajectories", Type = cms.string("GlobalCosmicMuonsForAlignment"), Tracks = cms.InputTag("globalCosmicMuons"), - TrackTransformer = cms.PSet(TrackerRecHitBuilder = cms.string('WithTrackAngle'), - MuonRecHitBuilder = cms.string('MuonRecHitBuilder'), - MTDRecHitBuilder = cms.string('MTDRecHitBuilder'), - RefitRPCHits = cms.bool(True), - # muon station to be skipped //also kills RPCs in that station - SkipStationDT = cms.int32(-999), - SkipStationCSC = cms.int32(-999), - # muon muon wheel to be skipped - SkipWheelDT = cms.int32(-999), - # PXB = 1, PXF = 2, TIB = 3, TID = 4, TOB = 5, TEC = 6 - TrackerSkipSystem = cms.int32(-999), - # layer, wheel, or disk depending on the system - TrackerSkipSection = cms.int32(-999), - ) - ) + TrackTransformer = cms.PSet( + TrackerRecHitBuilder = cms.string('WithTrackAngle'), + MuonRecHitBuilder = cms.string('MuonRecHitBuilder'), + MTDRecHitBuilder = cms.string('MTDRecHitBuilder'), + RefitRPCHits = cms.bool(True), + # muon station to be skipped //also kills RPCs in that station + SkipStationDT = cms.int32(-999), + SkipStationCSC = cms.int32(-999), + # muon muon wheel to be skipped + SkipWheelDT = cms.int32(-999), + # PXB = 1, PXF = 2, TIB = 3, TID = 4, TOB = 5, TEC = 6 + TrackerSkipSystem = cms.int32(-999), + # layer, wheel, or disk depending on the system + TrackerSkipSection = cms.int32(-999), + ) + ) -MuAlGlobalCosmics = globalCosmicMuons.clone() -MuAlGlobalCosmics.Tracks = cms.InputTag("ALCARECOMuAlGlobalCosmics","GlobalMuon") +MuAlGlobalCosmics = globalCosmicMuons.clone( + Tracks = "ALCARECOMuAlGlobalCosmics:GlobalMuon" +) diff --git a/Utilities/LStoreAdaptor/BuildFile.xml b/Utilities/LStoreAdaptor/BuildFile.xml index dbb0981c417e7..a680746839625 100644 --- a/Utilities/LStoreAdaptor/BuildFile.xml +++ b/Utilities/LStoreAdaptor/BuildFile.xml @@ -6,6 +6,5 @@ - diff --git a/Utilities/RelMon/python/definitions.py b/Utilities/RelMon/python/definitions.py index 4a859d4464760..34d5b8ddb7e1d 100755 --- a/Utilities/RelMon/python/definitions.py +++ b/Utilities/RelMon/python/definitions.py @@ -75,8 +75,10 @@ ('B Tagging' , ['Btag']), +('Particle Flow', ['ParticleFlow']), + ('Miscellanea: Simulation',['Generator','GlobalDigisV','GlobalHitsV','GlobalRecHitsV','MixingV','NoiseRatesV']), -('Miscellanea',['Info','MessageLogger','ParticleFlow','Physics'])] +('Miscellanea',['Info','MessageLogger','Physics'])] # designed for the Reconstruction reco_aggr=[\ @@ -100,12 +102,13 @@ ('MET',['JetMET/MET','JetMET/METv','ParticleFlow/PFMETValidation']), ('B Tagging' , ['Btag']), ('Tau' , ['RecoTauV']), +('Particle Flow', ['ParticleFlow']), # Other ('Castor Calorimeter', ['Castor']), ('Level 1 Trigger',['L1T', 'L1TEMU']), ('Miscellanea: Sim.',['Generator','GlobalDigisV','GlobalHitsV','GlobalRecHitsV','MixingV','NoiseRatesV']), -('Miscellanea',['Info','MessageLogger','ParticleFlow','Physics'])] +('Miscellanea',['Info','MessageLogger','Physics'])] # Designed for the HLT hlt_aggr=[\ diff --git a/Utilities/ReleaseScripts/scripts/CMSSWReleaseDependency.rules b/Utilities/ReleaseScripts/scripts/CMSSWReleaseDependency.rules index f401c6294a12a..293e5392c0b79 100644 --- a/Utilities/ReleaseScripts/scripts/CMSSWReleaseDependency.rules +++ b/Utilities/ReleaseScripts/scripts/CMSSWReleaseDependency.rules @@ -129,7 +129,6 @@ TauAnalysis/MCEmbeddingTools/.* : GeneratorInterface/.* #f77compiler exception Generator.* : f77compiler -ElectroWeakAnalysis/Utilities/.* : f77compiler #FastSim exception FastSimulation/.* : FastSimulation/.* diff --git a/Utilities/ReleaseScripts/scripts/git-publish b/Utilities/ReleaseScripts/scripts/git-publish deleted file mode 100755 index bbcc7be572d94..0000000000000 --- a/Utilities/ReleaseScripts/scripts/git-publish +++ /dev/null @@ -1,692 +0,0 @@ -#!/usr/bin/env python -from optparse import OptionParser -from sys import exit, stderr -from commands import getstatusoutput -from subprocess import call -from os.path import dirname -import tempfile -import hashlib -import os -import re -import atexit - -PACKAGE_MAPPING={} -EDITOR = os.environ.get('EDITOR','vim') #that easy! - -def format(s, **kwds): - return s % kwds - -def switchBackToOriginalBranch(currentBranch): - error, output = getstatusoutput("git checkout %s" % currentBranch) - if error: - print "Unable to revert back to previous branch" -# Publishing workflow -# -# * Get the modified packages WRT the release. (git diff --name-status -r -# CMSSW_6_2_0_pre3). -# * Calculate a checksum with all the differences compared to the release. This -# is done so that to equal changeset names correspond equal changes. -# * Check if there are uncommitted changes. (files which "git status -s" -# returns as uncommitted). -# * Check for untracked files. -# * Map them to categories (by iterating on packages and see if any of the -# package mappings match). -# * Create a feature branch with the differences, ask for a commit message. -# * Check if a similar branch is already on the remote categories repository -# (by looking for open pull requests with the same as this branch). -# * Tell the user to open a pull request for the given branches. -def main(): - parser = OptionParser(usage='git publish') - opts, args = parser.parse_args() - - if len(args) != 0: - parser.error("git publish does not take any argument") - - releaseName = os.environ.get("CMSSW_VERSION") - if not releaseName: - print "Please run cmsenv" - exit(1) - - error, log = getstatusoutput("git config --get github.username") - if error: - print "Please use `git config --global --add github.username' to specify your github username" - exit(1) - githubUser = log.strip("\n") - - # Automatically create a branch name. The hash uniquely identifies a delta. - # The branch name is used to differentiate between the same delta applied on - # different branches. - error, delta = getstatusoutput("git diff %s" % releaseName) - if error: - print >> stderr, "Could not find changes WRT release. Not a git area?" - print log - exit(1) - error, log = getstatusoutput("git rev-parse --abbrev-ref HEAD") - if error: - print >> stderr, "Could not find current release series. Not a git area?" - print log - exit(1) - currentBranch = log.strip("\n") - branchName = hashlib.sha1(delta).hexdigest()[0:10] + "-" + currentBranch - - # Find out what was actually modified and create a temporary log file which - # is used as basis for the publishing message. - cmd = "git diff --name-status %s" % releaseName - error, log = getstatusoutput(cmd) - if error: - print >> stderr, "Could not find changes WRT release. Not a git area?" - print log - exit(1) - allFiles = log.split("\n") - missingFiles = [x.replace("?? ", "") for x in allFiles if x.startswith("??")] - unstagedFiles = [x.replace("U ", "") for x in allFiles if x.startswith("U ")] - stagedFiles = [x for x in log.split("\n") if not x.startswith("U ") and not x.startswith("??")] - stagedPackages = set(re.sub("^..[ ./]*([^/]+/[^/]*).*", "\\1", x) for x in stagedFiles) - involvedCategories = set([category for package in stagedPackages - for (category, packages) in CMSSW_CATEGORIES.iteritems() - if package in packages]) - stagedFilesTxt = "" - if stagedFiles: - stagedFilesTxt = "\n#\n# The changes to the following files will be published for review.\n" - stagedFilesTxt += "# Use \"git checkout %s -- \" to add them to the changeset to publish.\n#\n" - stagedFilesTxt += "\n".join(["# " + x for x in stagedFiles]) - unstagedFilesTxt = "" - if unstagedFiles: - unstagedFilesTxt = "\n#\n# The following files are unknown to git and will not be published.\n" - unstagedFilesTxt += "# Use \"git commit ...\" to add them to the changeset to publish.\n" - unstagedFilesTxt += "# Use \"rm ...\" to remove them.\n" - unstagedFilesTxt += "\n".join(["# " + x for x in unstagedFiles]) - missingFilesTxt = "" - if missingFiles: - missingFilesTxt = "\n#\n# The following files have not been staged for publication.\n" - missingFilesTxt += "# Use \"git commit ...\" to add them to the changeset to publish.\n" - missingFilesTxt += "\n".join(["# " + x for x in missingFiles]) - if involvedCategories: - involvedCategoriesTxt = "\n#\n# The following categories will be informed.\n#\n" - involvedCategoriesTxt += "\n".join(["# " + x for x in involvedCategories]) - - defaultLog = format("# Please enter a publishing message for \"%(branchName)s\".\n" - "#\n" - "# Lines starting with \"#\" will be discarded.\n" - "#\n" - "# An empty message will abort the publishing." - "%(stagedFilesTxt)s" - "%(unstagedFilesTxt)s" - "%(missingFilesTxt)s" - "%(involvedCategoriesTxt)s" - "", - branchName=branchName, - stagedFilesTxt=stagedFilesTxt, - unstagedFilesTxt=unstagedFilesTxt, - missingFilesTxt=missingFilesTxt, - involvedCategoriesTxt=involvedCategoriesTxt - ) - commentFile = tempfile.NamedTemporaryFile(suffix=".tmp") - commentFile.write(defaultLog) - commentFile.flush() - call([EDITOR, commentFile.name]) - tempfile2 = open(commentFile.name) - commentLines = [x for x in tempfile2.readlines()] - strippedLines = [x for x in commentLines if x.strip("\t").strip().strip("\n").strip("\r")] - uncommentedLines = [x for x in strippedLines if not x.startswith("#")] - commentFile.close() - if not uncommentedLines: - print "Empty commit message. Aborting. Nothing has been published." - exit(1) - publishComment = tempfile.NamedTemporaryFile(suffix=".tmp") - publishComment.write("\n".join(commentLines)) - publishComment.flush() - - atexit.register(lambda : switchBackToOriginalBranch(currentBranch)) - - # Create a special branch for doing the publishing - error, output = getstatusoutput("git checkout -b %s" % branchName) - if error: - print "Error while creating feature branch %s. Branch already exists?" % branchName - exit(1) - - error, output = getstatusoutput("git reset --soft %s" % releaseName) - if error: - print "Cannot compute diff with base release %s." % releaseName - exit(1) - error, output = getstatusoutput("git commit -F %s" % publishComment.name) - if error: - print "Cannot create publishing commit" - print log - exit(1) - error, output = getstatusoutput("git push git@github.com:%s/cmssw.git %s" % (githubUser, branchName)) - if error: - print "Unable to push to user repository:" - print output - exit(1) - # Get the list of package - category - print "Now go to https://github.com/%s/cmssw/tree/%s and do pull requests for the following categories:" % (githubUser, branchName) - print "\n".join(involvedCategories) - print "(To be automated...)" - exit(0) - -# A ridicously long mapping for categories. Good enough for now. -CMSSW_CATEGORIES={"Operations": ["Configuration/Applications", - "Configuration/DataProcessing", "Configuration/GlobalRuns", - "Configuration/PyReleaseValidation", "Configuration/Skimming", - "Configuration/StandardSequences", "DPGAnalysis/Skims", "Validation/Tools"], - "Core": ["Configuration/EventContent", "Configuration/SVSuite", - "FWCore/Catalog", "FWCore/Common", "FWCore/FWLite", "FWCore/Framework", - "FWCore/GuiBrowsers", "FWCore/Integration", "FWCore/MessageLogger", - "FWCore/MessageService", "FWCore/Modules", "FWCore/ParameterSet", - "FWCore/PluginManager", "FWCore/PrescaleService", "FWCore/Python", - "FWCore/PythonParameterSet", "FWCore/PythonUtilities", "FWCore/Reflection", - "FWCore/RootAutoLibraryLoader", "FWCore/ServiceRegistry", "FWCore/Services", - "FWCore/Skeletons", "FWCore/Sources", "FWCore/TFWLiteSelector", - "FWCore/TFWLiteSelectorTest", "FWCore/Utilities", "FWCore/Version", - "PerfTools/Callgrind", "PerfTools/EdmEvent", "IOMC/Input", "IOMC/ParticleGuns", - "IOMC/RandomEngine", "IOPool/Common", "IOPool/Input", "IOPool/Output", - "IOPool/SecondaryInput", "IOPool/Streamer", "IOPool/TFileAdaptor", - "IgTools/IgProf", "DataFormats/FWLite", "DataFormats/Histograms", - "DataFormats/Provenance", "DataFormats/StdDictionaries", - "DataFormats/Streamer", "DataFormats/TestObjects", - "DataFormats/WrappedStdDictionaries", "DataFormats/CLHEP", - "DataFormats/Common", "Validation/Performance", "Utilities/DCacheAdaptor", - "Utilities/General", "Utilities/LStoreAdaptor", "Utilities/RFIOAdaptor", - "Utilities/ReleaseScripts", "Utilities/StaticAnalyzers", - "Utilities/StorageFactory", "Utilities/Testing", "Utilities/Timing", - "Utilities/XrdAdaptor"], "Documentation": ["Documentation/CodingRules", - "Documentation/PhysicsTools", "Documentation/ReferenceManualScripts"], - "Reconstruction": ["Configuration/EcalTB", "Configuration/JetMET", "CommonTools/BaseParticlePropagator", - "CommonTools/CandAlgos", "CommonTools/CandUtils", "CommonTools/Clustering1D", - "CommonTools/ParticleFlow", "CommonTools/RecoAlgos", "CommonTools/Statistics", - "CommonTools/TrackerMap", "CommonTools/TriggerUtils", "CommonTools/UtilAlgos", - "CommonTools/Utils", "CondCore/HIPlugins", "EventFilter/CSCRawToDigi", - "EventFilter/CastorRawToDigi", "EventFilter/DTRawToDigi", - "EventFilter/ESRawToDigi", "EventFilter/EcalRawToDigi", - "EventFilter/EcalTBRawToDigi", "EventFilter/HcalRawToDigi", - "EventFilter/LTCRawToDigi", "EventFilter/RPCRawToDigi", - "EventFilter/ScalersRawToDigi", "EventFilter/SiPixelRawToDigi", - "EventFilter/SiStripRawToDigi", "MagneticField/Engine", - "MagneticField/GeomBuilder", "MagneticField/Interpolation", - "MagneticField/Layers", "MagneticField/ParametrizedEngine", - "MagneticField/Records", "MagneticField/UniformEngine", - "MagneticField/VolumeBasedEngine", "MagneticField/VolumeGeometry", - "DataFormats/DTRecHit", "DataFormats/EcalRecHit", - "DataFormats/EgammaCandidates", "DataFormats/EgammaReco", - "DataFormats/EgammaTrackReco", "DataFormats/FP420Cluster", - "DataFormats/GsfTrackReco", "DataFormats/HcalIsolatedTrack", - "DataFormats/HcalRecHit", "DataFormats/HeavyIonEvent", "DataFormats/JetReco", - "DataFormats/Luminosity", "DataFormats/METObjects", "DataFormats/METReco", - "DataFormats/Math", "DataFormats/MuonData", "DataFormats/MuonReco", - "DataFormats/MuonSeed", "DataFormats/ParticleFlowCandidate", - "DataFormats/ParticleFlowReco", "DataFormats/PixelMatchTrackReco", - "DataFormats/RPCRecHit", "DataFormats/RecoCandidate", "DataFormats/Scalers", - "DataFormats/SiPixelCluster", "DataFormats/SiStripCluster", - "DataFormats/SiStripCommon", "DataFormats/TauReco", - "DataFormats/TrackCandidate", "DataFormats/TrackReco", - "DataFormats/TrackerCommon", "DataFormats/TrackerRecHit2D", - "DataFormats/TrackingRecHit", - "DataFormats/TrajectorySeed", "DataFormats/TrajectoryState", - "DataFormats/V0Candidate", "DataFormats/VZero", "DataFormats/VertexReco", - "DataFormats/BTauReco", "DataFormats/BeamSpot", "DataFormats/CSCRecHit", - "DataFormats/CaloRecHit", "DataFormats/CaloTowers", "DataFormats/CastorReco", - "RecoLocalCalo/CaloRecCandCreator", "RecoLocalCalo/CaloTowersCreator", - "RecoLocalCalo/Castor", "RecoLocalCalo/CastorReco", - "RecoLocalCalo/Configuration", "RecoLocalCalo/EcalDeadChannelRecoveryAlgos", - "RecoLocalCalo/EcalDeadChannelRecoveryProducers", "RecoLocalCalo/EcalRecAlgos", - "RecoLocalCalo/EcalRecProducers", "RecoLocalCalo/HcalLaserReco", - "RecoLocalCalo/HcalRecAlgos", "RecoLocalCalo/HcalRecProducers", - "RecoLocalMuon/CSCEfficiency", "RecoLocalMuon/CSCRecHitD", - "RecoLocalMuon/CSCSegment", "RecoLocalMuon/CSCValidation", - "RecoLocalMuon/Configuration", "RecoLocalMuon/DTRecHit", - "RecoLocalMuon/DTSegment", "RecoLocalMuon/RPCRecHit", - "RecoLocalTracker/ClusterParameterEstimator", "RecoLocalTracker/Configuration", - "RecoLocalTracker/Records", "RecoLocalTracker/SiPixelClusterizer", - "RecoLocalTracker/SiPixelRecHits", "RecoLocalTracker/SiStripClusterizer", - "RecoLocalTracker/SiStripRecHitConverter", - "RecoLocalTracker/SiStripZeroSuppression", - "RecoLocalTracker/SubCollectionProducers", "RecoLuminosity/LumiProducer", - "RecoLuminosity/TCPReceiver", "RecoMET/Configuration", "RecoMET/METAlgorithms", - "RecoMET/METProducers", "RecoMuon/Configuration", - "RecoMuon/CosmicMuonProducer", "RecoMuon/DetLayers", - "RecoMuon/GlobalMuonProducer", "RecoMuon/GlobalTrackFinder", - "RecoMuon/GlobalTrackingTools", "RecoMuon/L2MuonIsolationProducer", - "RecoMuon/L2MuonProducer", "RecoMuon/L2MuonSeedGenerator", - "RecoMuon/L3MuonIsolationProducer", "RecoMuon/L3MuonProducer", - "RecoMuon/L3TrackFinder", "RecoMuon/MeasurementDet", - "RecoMuon/MuonIdentification", "RecoMuon/MuonIsolation", - "RecoMuon/MuonIsolationProducers", "RecoMuon/MuonSeedGenerator", - "RecoMuon/Navigation", "RecoMuon/Records", "RecoMuon/StandAloneMuonProducer", - "RecoMuon/StandAloneTrackFinder", "RecoMuon/TrackerSeedGenerator", - "RecoMuon/TrackingTools", "RecoMuon/TransientTrackingRecHit", - "RecoParticleFlow/Benchmark", "RecoParticleFlow/Configuration", - "RecoParticleFlow/PFBlockProducer", "RecoParticleFlow/PFClusterProducer", - "RecoParticleFlow/PFClusterTools", - "RecoParticleFlow/PFProducer", "RecoParticleFlow/PFRootEvent", - "RecoParticleFlow/PFSimProducer", "RecoParticleFlow/PFTracking", - "RecoPixelVZero/PixelVZeroFinding", "RecoPixelVertexing/Configuration", - "RecoPixelVertexing/PixelLowPtUtilities", - "RecoPixelVertexing/PixelTrackFitting", "RecoPixelVertexing/PixelTriplets", - "RecoPixelVertexing/PixelVertexFinding", "RecoRomanPot/Configuration", - "RecoRomanPot/RecoFP420", "RecoTBCalo/EcalSimpleTBAnalysis", - "RecoTBCalo/EcalTBAnalysisCoreTools", - "RecoTBCalo/EcalTBHodoscopeReconstructor", "RecoTBCalo/EcalTBRecProducers", - "RecoTBCalo/EcalTBTDCReconstructor", "RecoTBCalo/HcalPlotter", - "RecoTBCalo/HcalTBObjectUnpacker", "RecoTBCalo/HcalTBTools", - "RecoTBCalo/ZDCTBAnalysis", "RecoTauTag/Configuration", - "RecoTauTag/ImpactParameter", "RecoTauTag/RecoTau", - "RecoTracker/CkfPattern", "RecoTracker/Configuration", - "RecoTracker/ConversionSeedGenerators", "RecoTracker/DeDx", - "RecoTracker/DebugTools", "RecoTracker/FinalTrackSelectors", - "RecoTracker/GeometryESProducer", "RecoTracker/IterativeTracking", - "RecoTracker/MeasurementDet", "RecoTracker/NuclearSeedGenerator", - "RecoTracker/Record", "RecoTracker/SingleTrackPattern", - "RecoTracker/SpecialSeedGenerators", "RecoTracker/TkDetLayers", - "RecoTracker/TkHitPairs", "RecoTracker/TkMSParametrization", - "RecoTracker/TkNavigation", "RecoTracker/TkSeedGenerator", - "RecoTracker/TkSeedingLayers", "RecoTracker/TkTrackingRegions", - "RecoTracker/TrackProducer", "RecoTracker/TransientTrackingRecHit", - "Validation/RecoHI", "RecoVZero/VZeroFinding", - "RecoVertex/AdaptiveVertexFinder", "RecoVertex/AdaptiveVertexFit", - "RecoVertex/BeamSpotProducer", "RecoVertex/ConfigurableVertexReco", - "RecoVertex/Configuration", "RecoVertex/GaussianSumVertexFit", - "RecoVertex/GhostTrackFitter", "RecoVertex/KalmanVertexFit", - "RecoVertex/KinematicFit", "RecoVertex/KinematicFitPrimitives", - "RecoVertex/LinearizationPointFinders", "RecoVertex/MultiVertexFit", - "RecoVertex/PrimaryVertexProducer", - "RecoVertex/TertiaryTracksVertexFinder", - "RecoVertex/TrimmedKalmanVertexFinder", "RecoVertex/TrimmedVertexFit", - "RecoVertex/V0Producer", "RecoVertex/VertexPrimitives", - "RecoVertex/VertexTools", - "TrackPropagation/NavPropagator", "TrackPropagation/RungeKutta", - "TrackPropagation/SteppingHelixPropagator", - "TrackingTools/AnalyticalJacobians", "TrackingTools/Configuration", - "TrackingTools/DetLayers", "TrackingTools/GeomPropagators", - "TrackingTools/GsfTools", "TrackingTools/GsfTracking", "TrackingTools/IPTools", - "TrackingTools/KalmanUpdators", "TrackingTools/MaterialEffects", - "TrackingTools/MeasurementDet", "TrackingTools/PatternTools", - "TrackingTools/Producers", "TrackingTools/RecoGeometry", - "TrackingTools/Records", "TrackingTools/TrackAssociator", - "TrackingTools/TrackFitters", "TrackingTools/TrackRefitter", - "TrackingTools/TrajectoryCleaning", "TrackingTools/TrajectoryFiltering", - "TrackingTools/TrajectoryParametrization", "TrackingTools/TrajectoryState", - "TrackingTools/TransientTrack", "TrackingTools/TransientTrackingRecHit", - "Utilities/RelMon", "Validation/Configuration", "RecoBTag/BTagTools", - "RecoBTag/Configuration", "RecoBTag/ImpactParameter", - "RecoBTag/ImpactParameterLearning", "RecoBTag/PerformanceDB", - "RecoBTag/Records", "RecoBTag/SecondaryVertex", "RecoBTag/Skimming", - "RecoBTag/SoftLepton", "RecoBTag/TrackProbability", "RecoBTag/XMLCalibration", - "RecoBTau/Configuration", - "RecoBTau/JetTagComputer", "RecoBTau/JetTagMVALearning", - "RecoCaloTools/EcalChannelKiller", - "RecoCaloTools/Navigation", "RecoCaloTools/Selectors", - "RecoEcal/Configuration", "RecoEcal/EgammaClusterAlgos", - "RecoEcal/EgammaClusterProducers", "RecoEcal/EgammaCoreTools", - "RecoEgamma/Configuration", "RecoEgamma/EgammaElectronAlgos", - "RecoEgamma/EgammaElectronProducers", "RecoEgamma/EgammaHFProducers", - "RecoEgamma/EgammaIsolationAlgos", "RecoEgamma/EgammaMCTools", - "RecoEgamma/EgammaPhotonAlgos", "RecoEgamma/EgammaPhotonProducers", - "RecoEgamma/EgammaTools", "RecoEgamma/ElectronIdentification", - "RecoEgamma/Examples", "RecoEgamma/PhotonIdentification", - "RecoHI/Configuration", "RecoHI/HiCentralityAlgos", "RecoHI/HiEgammaAlgos", - "RecoHI/HiEvtPlaneAlgos", "RecoHI/HiJetAlgos", "RecoHI/HiMuonAlgos", - "RecoHI/HiTracking", "RecoJets/Configuration", "RecoJets/FFTJetAlgorithms", - "RecoJets/FFTJetProducers", "RecoJets/JetAlgorithms", "RecoJets/JetAnalyzers", - "RecoJets/JetAssociationAlgorithms", "RecoJets/JetAssociationProducers", - "RecoJets/JetPlusTracks", "RecoJets/JetProducers"], "Database": - ["CondFormats/EgammaObjects", "CondFormats/GeometryObjects", - "CondFormats/HIObjects", "CondFormats/HLTObjects", "CondFormats/HcalMapping", - "CondFormats/HcalObjects", "CondFormats/JetMETObjects", - "CondFormats/L1TObjects", "CondFormats/Luminosity", - "CondFormats/OptAlignObjects", "CondFormats/PhysicsToolsObjects", - "CondFormats/RPCObjects", "CondFormats/RecoMuonObjects", "CondFormats/RunInfo", - "CondFormats/SiPixelObjects", "CondFormats/SiStripObjects", "CondTools/DQM", - "CondTools/DT", "CondTools/Ecal", "CondTools/Geometry", "CondTools/HLT", - "CondTools/Hcal", "CondTools/IntegrationTest", "CondTools/L1Trigger", - "CondTools/O2OFramework", "CondTools/RPC", "CondTools/RunInfo", - "CondTools/SiPixel", "CondTools/SiStrip", "CondTools/Utilities", - "CommonTools/ConditionDBWriter", "CondCore/AlignmentPlugins", - "CondCore/BTauPlugins", "CondCore/BeamSpotPlugins", "CondCore/CSCPlugins", - "CondCore/CalibPlugins", "CondCore/CastorPlugins", "CondCore/DBCommon", - "CondCore/DBOutputService", "CondCore/DQMPlugins", "CondCore/DTPlugins", - "CondCore/ESPlugins", "CondCore/ESSources", "CondCore/EcalPlugins", - "CondCore/EgammaPlugins", "CondCore/GeometryPlugins", "CondCore/HLTPlugins", - "CondCore/HcalPlugins", "CondCore/IOVService", "CondCore/JetMETPlugins", - "CondCore/L1TPlugins", "CondCore/LuminosityPlugins", - "CondCore/MetaDataService", "CondCore/ORA", "CondCore/OptAlignPlugins", - "CondCore/PhysicsToolsPlugins", "CondCore/PopCon", "CondCore/RPCPlugins", - "CondCore/RecoMuonPlugins", "CondCore/RegressionTest", - "CondCore/RunInfoPlugins", "CondCore/SiPixelPlugins", - "CondCore/SiStripPlugins", "CondCore/Utilities", "CondFormats/Alignment", - "CondFormats/AlignmentRecord", "CondFormats/BTauObjects", - "CondFormats/BeamSpotObjects", "CondFormats/CSCObjects", - "CondFormats/Calibration", "CondFormats/CastorObjects", "CondFormats/Common", - "CondFormats/DQMObjects", "CondFormats/DTObjects", "CondFormats/DataRecord", - "CondFormats/ESObjects", "CondFormats/EcalCorrections", - "CondFormats/EcalObjects", "CaloOnlineTools/HcalOnlineDb", - "OnlineDB/CSCCondDB", "OnlineDB/EcalCondDB", "OnlineDB/Oracle", - "OnlineDB/SiStripConfigDb", "OnlineDB/SiStripESSources", "OnlineDB/SiStripO2O", - "RecoLuminosity/LumiDB"], "Geometry": ["Configuration/Geometry", - "DetectorDescription/Algorithm", "DetectorDescription/Base", - "DetectorDescription/Core", "DetectorDescription/ExprAlgo", - "DetectorDescription/OfflineDBLoader", "DetectorDescription/OnlineDBLoader", - "DetectorDescription/Parser", "DetectorDescription/RegressionTest", - "DetectorDescription/Schema", "Geometry/CMSCommonData", "Geometry/CSCGeometry", - "Geometry/CSCGeometryBuilder", "Geometry/CaloEventSetup", - "Geometry/CaloGeometry", "Geometry/CaloTopology", "Geometry/CommonDetUnit", - "Geometry/CommonTopologies", "Geometry/DTGeometry", - "Geometry/DTGeometryBuilder", "Geometry/EcalAlgo", "Geometry/EcalCommonData", - "Geometry/EcalMapping", "Geometry/EcalSimData", "Geometry/EcalTestBeam", - "Geometry/FP420CommonData", "Geometry/FP420SimData", - "Geometry/ForwardCommonData", "Geometry/ForwardGeometry", - "Geometry/ForwardSimData", "Geometry/GEMGeometry", - "Geometry/GEMGeometryBuilder", "Geometry/GlobalTrackingGeometryBuilder", - "Geometry/HcalAlgo", "Geometry/HcalCommonData", "Geometry/HcalEventSetup", - "Geometry/HcalSimData", "Geometry/HcalTestBeamData", "Geometry/HcalTowerAlgo", - "Geometry/MTCCTrackerCommonData", "Geometry/MuonCommonData", - "Geometry/MuonNumbering", "Geometry/MuonSimData", "Geometry/RPCGeometry", - "Geometry/RPCGeometryBuilder", "Geometry/Records", - "Geometry/TrackerCommonData", "Geometry/TrackerGeometryBuilder", - "Geometry/TrackerNumberingBuilder", "Geometry/TrackerRecoData", - "Geometry/TrackerSimData", "Geometry/TrackingGeometryAligner", - "Geometry/TwentyFivePercentTrackerCommonData", - "GeometryReaders/XMLIdealGeometryESSource", "DataFormats/DetId", - "DataFormats/EcalDetId", "Validation/Geometry", "Validation/MuonRPCGeometry", - "SLHCUpgradeSimulations/Geometry", "Validation/CheckOverlap"], "HLT": - ["CondFormats/HLTObjects", "CondTools/HLT", "Configuration/HLT", - "CondCore/HLTPlugins", "HLTrigger/Configuration", "HLTrigger/Egamma", - "HLTrigger/HLTanalyzers", "HLTrigger/HLTcore", "HLTrigger/HLTexample", - "HLTrigger/HLTfilters", "HLTrigger/JetMET", "HLTrigger/Muon", - "HLTrigger/Timer", "HLTrigger/Tools", "HLTrigger/btau", "HLTrigger/special", - "DataFormats/HLTReco", "RecoTauTag/HLTProducers", - "RecoEgamma/EgammaHLTProducers"], "Analysis": ["CondFormats/JetMETObjects", - "DPGAnalysis/SiStripTools", "CommonTools/CandAlgos", "CommonTools/CandUtils", - "CommonTools/Clustering1D", "CommonTools/ParticleFlow", - "CommonTools/RecoUtils", "CommonTools/Statistics", "CommonTools/TriggerUtils", - "CommonTools/UtilAlgos", "CommonTools/Utils", - "AnalysisAlgos/SiStripClusterInfoProducer", "AnalysisAlgos/TrackInfoProducer", - "AnalysisDataFormats/EWK", - "AnalysisDataFormats/SUSYBSMObjects", - "AnalysisDataFormats/TopObjects", "AnalysisDataFormats/TrackInfo", - "DiffractiveForwardAnalysis/Configuration", - "DiffractiveForwardAnalysis/Skimming", - "ElectroWeakAnalysis/Configuration", - "ElectroWeakAnalysis/Skimming", "ElectroWeakAnalysis/Utilities", - "ElectroWeakAnalysis/WENu", "ElectroWeakAnalysis/WMuNu", - "ElectroWeakAnalysis/ZEE", "ElectroWeakAnalysis/ZMuMu", - "MuonAnalysis/Configuration", "MuonAnalysis/MomentumScaleCalibration", - "MuonAnalysis/MuonAssociators", "PhysicsTools/CandAlgos", - "PhysicsTools/CandUtils", "PhysicsTools/CondLiteIO", - "PhysicsTools/Configuration", "PhysicsTools/FWLite", - "PhysicsTools/HepMCCandAlgos", "PhysicsTools/IsolationAlgos", - "PhysicsTools/IsolationUtils", "PhysicsTools/JetCharge", - "PhysicsTools/JetExamples", "PhysicsTools/JetMCAlgos", - "PhysicsTools/JetMCUtils", "PhysicsTools/KinFitter", - "PhysicsTools/MVAComputer", - "PhysicsTools/ParallelAnalysis", "PhysicsTools/PatAlgos", - "PhysicsTools/PatExamples", "PhysicsTools/PatUtils", - "PhysicsTools/PythonAnalysis", "PhysicsTools/RecoAlgos", - "PhysicsTools/RecoUtils", - "HeavyFlavorAnalysis/Configuration", "HeavyFlavorAnalysis/Skimming", - "HeavyIonsAnalysis/Configuration", "HiggsAnalysis/Configuration", - "HiggsAnalysis/HiggsToGammaGamma", "HiggsAnalysis/Skimming", - "JetMETAnalysis/Configuration", "JetMETAnalysis/METSkims", - "JetMETCorrections/Algorithms", "JetMETCorrections/Configuration", - "JetMETCorrections/FFTJetModules", "JetMETCorrections/FFTJetObjects", - "JetMETCorrections/InterpolationTables", "JetMETCorrections/IsolatedParticles", - "JetMETCorrections/JetParton", "JetMETCorrections/JetVertexAssociation", - "JetMETCorrections/MCJet", "JetMETCorrections/MinBias", - "JetMETCorrections/Modules", "JetMETCorrections/Objects", - "JetMETCorrections/TauJet", "JetMETCorrections/Type1MET", - "DataFormats/PatCandidates", "DataFormats/Candidate", "RecoMET/METFilters", - "SUSYBSMAnalysis/Configuration", "SUSYBSMAnalysis/HSCP", - "SUSYBSMAnalysis/Skimming", "TBDataFormats/EcalTBObjects", - "TBDataFormats/HcalTBObjects", "TopQuarkAnalysis/Configuration", - "TopQuarkAnalysis/Examples", "TopQuarkAnalysis/TopEventProducers", - "TopQuarkAnalysis/TopEventSelection", "TopQuarkAnalysis/TopHitFit", - "TopQuarkAnalysis/TopJetCombination", "TopQuarkAnalysis/TopKinFitter", - "TopQuarkAnalysis/TopObjectResolutions", "TopQuarkAnalysis/TopPairBSM", - "TopQuarkAnalysis/TopSkimming", "TopQuarkAnalysis/TopTools", - "Utilities/BinningTools", "PhysicsTools/SelectorUtils", - "PhysicsTools/TagAndProbe", "PhysicsTools/UtilAlgos", "PhysicsTools/Utilities", - "QCDAnalysis/ChargedHadronSpectra", "QCDAnalysis/Configuration", - "QCDAnalysis/Skimming", "QCDAnalysis/UEAnalysis"], "Fast Simulation": - ["FastSimDataFormats/External", "FastSimDataFormats/L1GlobalMuonTrigger", - "FastSimDataFormats/NuclearInteractions", "FastSimDataFormats/PileUpEvents", - "CommonTools/BaseParticlePropagator", "FastSimulation/CaloGeometryTools", - "FastSimulation/CaloHitMakers", "FastSimulation/CaloRecHitsProducer", - "FastSimulation/CalorimeterProperties", "FastSimulation/Calorimetry", - "FastSimulation/Configuration", "FastSimulation/EgammaElectronAlgos", - "FastSimulation/Event", "FastSimulation/EventProducer", - "FastSimulation/ForwardDetectors", "FastSimulation/HighLevelTrigger", - "FastSimulation/MaterialEffects", - "FastSimulation/MuonSimHitProducer", "FastSimulation/Muons", - "FastSimulation/Particle", "FastSimulation/ParticleDecay", - "FastSimulation/ParticleFlow", "FastSimulation/ParticlePropagator", - "FastSimulation/PileUpProducer", "FastSimulation/ShowerDevelopment", - "FastSimulation/TrackerSetup", "FastSimulation/Tracking", - "FastSimulation/TrackingRecHitProducer", "FastSimulation/TrajectoryManager", - "FastSimulation/Utilities", "FastSimulation/Validation"], "Visualization": - ["Fireworks/Calo", "Fireworks/Candidates", "Fireworks/Core", - "Fireworks/Electrons", "Fireworks/Eve", "Fireworks/FWInterface", - "Fireworks/GenParticle", "Fireworks/Geometry", "Fireworks/Macros", - "Fireworks/Muons", "Fireworks/ParticleFlow", "Fireworks/SimData", - "Fireworks/TableWidget", "Fireworks/Tracks", "Fireworks/Vertices"], - "Generators": ["Configuration/Generator", "GeneratorInterface/AMPTInterface", - "GeneratorInterface/AlpgenInterface", "GeneratorInterface/BeamHaloGenerator", - "GeneratorInterface/CascadeInterface", "GeneratorInterface/Configuration", - "GeneratorInterface/Core", "GeneratorInterface/CosmicMuonGenerator", - "GeneratorInterface/ExhumeInterface", "GeneratorInterface/ExternalDecays", - "GeneratorInterface/GenExtensions", "GeneratorInterface/GenFilters", - "GeneratorInterface/Herwig6Interface", "GeneratorInterface/HiGenCommon", - "GeneratorInterface/HijingInterface", "GeneratorInterface/HydjetInterface", - "GeneratorInterface/LHEInterface", "GeneratorInterface/MCatNLOInterface", - "GeneratorInterface/PartonShowerVeto", "GeneratorInterface/PomwigInterface", - "GeneratorInterface/PyquenInterface", "GeneratorInterface/Pythia6Interface", - "GeneratorInterface/Pythia8Interface", - "GeneratorInterface/ReggeGribovPartonMCInterface", - "GeneratorInterface/RivetInterface", "GeneratorInterface/SherpaInterface", - "GeneratorInterface/ThePEGInterface", "DataFormats/HepMCCandidate", - "Validation/EventGenerator"], "DAQ": ["Configuration/SiStripDAQ", - "EventFilter/AutoBU", "EventFilter/Configuration", "EventFilter/Cosmics", - "EventFilter/ESDigiToRaw", "EventFilter/EcalDigiToRaw", - "EventFilter/FEDInterface", "EventFilter/Goodies", - "EventFilter/Message2log4cplus", "EventFilter/Modules", "EventFilter/Playback", - "EventFilter/Processor", "EventFilter/RawDataCollector", - "EventFilter/ResourceBroker", "EventFilter/SMProxyServer", - "EventFilter/ShmBuffer", "EventFilter/ShmReader", - "EventFilter/SiStripChannelChargeFilter", "EventFilter/StorageManager", - "EventFilter/Utilities", "IORawData/DaqSource", "DataFormats/FEDRawData"], - "DQM": ["CondTools/DQM", "DQM/BeamMonitor", "DQM/CSCMonitorModule", - "DQM/CastorMonitor", "DQM/DTMonitorClient", "DQM/DTMonitorModule", - "DQM/DataScouting", "CommonTools/TrackerMap", "CondCore/DQMPlugins", - "CondFormats/DQMObjects", "HLTriggerOffline/Common", "HLTriggerOffline/Egamma", - "HLTriggerOffline/HeavyFlavor", "HLTriggerOffline/Higgs", - "HLTriggerOffline/JetMET", "HLTriggerOffline/Muon", "HLTriggerOffline/SUSYBSM", - "HLTriggerOffline/Tau", "DataFormats/Histograms", - "DQM/EcalBarrelMonitorClient", "DQM/EcalBarrelMonitorDbModule", - "DQM/EcalBarrelMonitorModule", "DQM/EcalBarrelMonitorTasks", "DQM/EcalCommon", - "DQM/EcalEndcapMonitorClient", "DQM/EcalEndcapMonitorDbModule", - "DQM/EcalEndcapMonitorModule", "DQM/EcalEndcapMonitorTasks", - "DQM/EcalPreshowerMonitorClient", "DQM/EcalPreshowerMonitorModule", - "DQM/HLTEvF", "DQM/HLXMonitor", "DQM/HcalMonitorClient", - "DQM/HcalMonitorModule", "DQM/HcalMonitorTasks", "DQM/L1TMonitor", - "DQM/L1TMonitorClient", "DQM/Physics", "DQM/PhysicsObjectsMonitoring", - "DQM/RCTMonitor", "DQM/RPCMonitorClient", "DQM/RPCMonitorDigi", - "DQM/SiPixelCommon", "DQM/SiPixelHistoricInfoClient", - "DQM/SiPixelMonitorClient", "DQM/SiPixelMonitorCluster", - "DQM/SiPixelMonitorDigi", "DQM/SiPixelMonitorRawData", - "DQM/SiPixelMonitorRecHit", "DQM/SiPixelMonitorTrack", - "DQM/SiStripCommissioningAnalysis", "DQM/SiStripCommissioningClients", - "DQM/SiStripCommissioningDbClients", "DQM/SiStripCommissioningSources", - "DQM/SiStripCommissioningSummary", "DQM/SiStripCommon", - "DQM/SiStripHistoricInfoClient", "DQM/SiStripMonitorClient", - "DQM/SiStripMonitorCluster", "DQM/SiStripMonitorDigi", - "DQM/SiStripMonitorHardware", "DQM/SiStripMonitorPedestals", - "DQM/SiStripMonitorSummary", "DQM/SiStripMonitorTrack", "DQM/TrackerCommon", - "DQM/TrackerMonitorTrack", "DQM/TrackingMonitor", "DQM/TrigXMonitor", - "DQM/TrigXMonitorClient", "DQMOffline/Alignment", "DQMOffline/CalibCalo", - "DQMOffline/CalibMuon", "DQMOffline/CalibTracker", "DQMOffline/Configuration", - "DQMOffline/EGamma", "DQMOffline/Ecal", "DQMOffline/Hcal", "DQMOffline/JetMET", - "DQMOffline/L1Trigger", "DQMOffline/Muon", "DQMOffline/PFTau", - "DQMOffline/RecoB", "DQMOffline/Trigger", "DQMServices/ClientConfig", - "DQMServices/Components", "DQMServices/Core", "DQMServices/Diagnostic", - "DQMServices/Examples", "DQMServices/FwkIO", "DQMServices/XdaqCollector", - "Validation/GlobalDigis", "Validation/GlobalHits", "Validation/GlobalRecHits", - "Validation/HcalDigis", "Validation/HcalHits", "Validation/HcalRecHits", - "Validation/Mixing", "Validation/MuonCSCDigis", "Validation/MuonDTDigis", - "Validation/MuonHits", "Validation/MuonIdentification", - "Validation/MuonIsolation", "Validation/MuonRPCDigis", "Validation/RPCRecHits", - "Validation/RecoB", "Validation/RecoEgamma", "Validation/RecoJets", - "Validation/RecoMET", "Validation/RecoMuon", "Validation/RecoParticleFlow", - "Validation/RecoPixelVertexing", "Validation/RecoTau", "Validation/RecoTrack", - "Validation/RecoVertex", "Validation/TrackerConfiguration", - "Validation/TrackerDigis", "Validation/TrackerHits", - "Validation/TrackerRecHits", "Validation/TrackingMCTruth", - "Validation/CSCRecHits", "Validation/CaloTowers", "Validation/Configuration", - "Validation/DTRecHits", "Validation/EcalClusters", "Validation/EcalDigis", - "Validation/EcalHits", "Validation/EcalRecHits"], "L1": - ["CondFormats/L1TObjects", "CondTools/L1Trigger", "CondCore/L1TPlugins", - "CalibCalorimetry/CaloTPG", "CalibCalorimetry/EcalTPGTools", - "CalibCalorimetry/HcalTPGAlgos", "CalibCalorimetry/HcalTPGEventSetup", - "CalibCalorimetry/HcalTPGIO", "EventFilter/CSCTFRawToDigi", - "EventFilter/DTTFRawToDigi", "EventFilter/GctRawToDigi", - "EventFilter/L1GlobalTriggerRawToDigi", "L1Trigger/TextToDigi", - "L1TriggerConfig/CSCTFConfigProducers", "L1TriggerConfig/DTTPGConfig", - "L1TriggerConfig/DTTPGConfigProducers", "L1TriggerConfig/DTTrackFinder", - "L1TriggerConfig/GMTConfigProducers", "L1TriggerConfig/GctConfigProducers", - "L1TriggerConfig/L1CSCTPConfigProducers", - "L1TriggerConfig/L1GeometryProducers", "L1TriggerConfig/L1GtConfigProducers", - "L1TriggerConfig/L1ScalesProducers", "L1TriggerConfig/RCTConfigProducers", - "L1TriggerConfig/RPCTriggerConfig", "L1TriggerOffline/Configuration", - "L1TriggerOffline/L1Analyzer", - "L1Trigger/CSCTrackFinder", "L1Trigger/CSCTriggerPrimitives", - "L1Trigger/Configuration", "L1Trigger/DTBti", "L1Trigger/DTSectorCollector", - "L1Trigger/DTTrackFinder", "L1Trigger/DTTraco", "L1Trigger/DTTrigger", - "L1Trigger/DTTriggerServerPhi", "L1Trigger/DTTriggerServerTheta", - "L1Trigger/DTUtilities", "L1Trigger/GlobalCaloTrigger", - "L1Trigger/GlobalMuonTrigger", "L1Trigger/GlobalTrigger", - "L1Trigger/GlobalTriggerAnalyzer", "L1Trigger/HardwareValidation", - "L1Trigger/L1ExtraFromDigis", "L1Trigger/L1GctAnalyzer", - "L1Trigger/RPCTechnicalTrigger", "L1Trigger/RPCTrigger", - "L1Trigger/RegionalCaloTrigger", "L1Trigger/Skimmer", - "DataFormats/L1CSCTrackFinder", "DataFormats/L1CaloTrigger", - "DataFormats/L1DTTrackFinder", "DataFormats/L1GlobalCaloTrigger", - "DataFormats/L1GlobalMuonTrigger", "DataFormats/L1GlobalTrigger", - "DataFormats/L1Trigger", "DataFormats/LTCDigi", "DQMOffline/L1Trigger", - "SimCalorimetry/EcalTrigPrimAlgos", "SimCalorimetry/EcalTrigPrimProducers", - "SimCalorimetry/HcalTrigPrimAlgos", "SimCalorimetry/HcalTrigPrimProducers", - "Validation/EcalTriggerPrimitives"], "Calibration and Alignment": - ["CondFormats/EgammaObjects", "CondFormats/GeometryObjects", - "CondFormats/HIObjects", "CondFormats/HLTObjects", "CondFormats/HcalMapping", - "CondFormats/HcalObjects", "CondFormats/L1TObjects", "CondFormats/Luminosity", - "CondFormats/OptAlignObjects", "CondFormats/PhysicsToolsObjects", - "CondFormats/RPCObjects", "CondFormats/RecoMuonObjects", "CondFormats/RunInfo", - "CondFormats/SiPixelObjects", "CondFormats/SiStripObjects", - "Configuration/AlCa", "CondCore/DBCommon", "CondCore/DBOutputService", - "CondCore/ESSources", "CondCore/IOVService", "CondCore/MetaDataService", - "CondCore/Modules", "CondCore/PopCon", - "CondCore/TagCollection", "CondFormats/Alignment", - "CondFormats/AlignmentRecord", "CondFormats/BTauObjects", - "CondFormats/BeamSpotObjects", "CondFormats/CSCObjects", - "CondFormats/Calibration", "CondFormats/CastorObjects", "CondFormats/Common", - "CondFormats/DTObjects", "CondFormats/DataRecord", "CondFormats/ESObjects", - "CondFormats/EcalCorrections", "CondFormats/EcalObjects", - "Alignment/CocoaAnalysis", "Alignment/CocoaApplication", - "Alignment/CocoaDDLObjects", "Alignment/CocoaDaq", "Alignment/CocoaFit", - "Alignment/CocoaModel", "Alignment/CocoaToDDL", "Alignment/CocoaUtilities", - "Alignment/CommonAlignment", "Alignment/CommonAlignmentAlgorithm", - "Alignment/CommonAlignmentMonitor", "Alignment/CommonAlignmentParametrization", - "Alignment/CommonAlignmentProducer", "Alignment/Geners", - "Alignment/HIPAlignmentAlgorithm", "Alignment/KalmanAlignmentAlgorithm", - "Alignment/LaserAlignment", "Alignment/LaserAlignmentSimulation", - "Alignment/LaserDQM", "Alignment/MillePedeAlignmentAlgorithm", - "Alignment/MuonAlignment", "Alignment/MuonAlignmentAlgorithms", - "Alignment/OfflineValidation", "Alignment/ReferenceTrajectories", - "Alignment/SurveyAnalysis", "Alignment/TrackerAlignment", - "Alignment/TwoBodyDecay", "CalibCalorimetry/CaloMiscalibTools", - "CalibCalorimetry/CaloTPG", "CalibCalorimetry/CastorCalib", - "CalibCalorimetry/Configuration", "CalibCalorimetry/EcalCorrectionModules", - "CalibCalorimetry/EcalCorrelatedNoiseAnalysisAlgos", - "CalibCalorimetry/EcalCorrelatedNoiseAnalysisModules", - "CalibCalorimetry/EcalLaserAnalyzer", "CalibCalorimetry/EcalLaserCorrection", - "CalibCalorimetry/EcalLaserSorting", "CalibCalorimetry/EcalPedestalOffsets", - "CalibCalorimetry/EcalSRTools", "CalibCalorimetry/EcalTBCondTools", - "CalibCalorimetry/EcalTPGTools", "CalibCalorimetry/EcalTrivialCondModules", - "CalibCalorimetry/HcalAlgos", "CalibCalorimetry/HcalPlugins", - "CalibCalorimetry/HcalStandardModules", "CalibCalorimetry/HcalTPGAlgos", - "CalibCalorimetry/HcalTPGEventSetup", "CalibCalorimetry/HcalTPGIO", - "CalibFormats/CaloObjects", "CalibFormats/CaloTPG", - "CalibFormats/CastorObjects", "CalibFormats/HcalObjects", - "CalibFormats/SiPixelObjects", "CalibFormats/SiStripObjects", - "CalibMuon/CSCCalibration", "CalibMuon/Configuration", - "CalibMuon/DTCalibration", "CalibMuon/DTDigiSync", "CalibMuon/RPCCalibration", - "CalibTracker/Configuration", "CalibTracker/Records", - "CalibTracker/SiPixelConnectivity", "CalibTracker/SiPixelESProducers", - "CalibTracker/SiPixelErrorEstimation", "CalibTracker/SiPixelGainCalibration", - "CalibTracker/SiPixelIsAliveCalibration", "CalibTracker/SiPixelLorentzAngle", - "CalibTracker/SiPixelSCurveCalibration", "CalibTracker/SiPixelTools", - "CalibTracker/SiStripAPVAnalysis", "CalibTracker/SiStripChannelGain", - "CalibTracker/SiStripCommon", "CalibTracker/SiStripDCS", - "CalibTracker/SiStripESProducers", "CalibTracker/SiStripHitEfficiency", - "CalibTracker/SiStripLorentzAngle", "CalibTracker/SiStripQuality", - "Calibration/EcalAlCaRecoProducers", "Calibration/EcalCalibAlgos", - "Calibration/EcalTBTools", "Calibration/HcalAlCaRecoProducers", - "Calibration/HcalCalibAlgos", "Calibration/HcalConnectivity", - "Calibration/HcalIsolatedTrackReco", "Calibration/IsolatedParticles", - "Calibration/TkAlCaRecoProducers", "Calibration/Tools", - "CaloOnlineTools/EcalTools", "IORawData/CaloPatterns", - "IORawData/DTCommissioning", "IORawData/HcalTBInputService", - "IORawData/SiPixelInputSources", "DataFormats/HcalCalibObjects", - "DataFormats/Alignment", "RecoVertex/BeamSpotProducer"], "Full Simulation": - ["Mixing/Base", "IOMC/EventVertexGenerators", "DataFormats/DTDigi", - "DataFormats/EcalDigi", "DataFormats/EcalRawData", "DataFormats/FP420Digi", - "DataFormats/GeometryCommonDetAlgo", "DataFormats/GeometrySurface", - "DataFormats/GeometryVector", "DataFormats/HcalDetId", "DataFormats/HcalDigi", - "DataFormats/MuonDetId", "DataFormats/RPCDigi", "DataFormats/SiPixelDetId", - "DataFormats/SiPixelDigi", "DataFormats/SiPixelRawData", - "DataFormats/SiStripDetId", "DataFormats/SiStripDigi", "DataFormats/CSCDigi", - "SimCalorimetry/CaloSimAlgos", "SimCalorimetry/CastorSim", - "SimCalorimetry/Configuration", "SimCalorimetry/EcalElectronicsEmulation", - "SimCalorimetry/EcalSelectiveReadoutAlgos", - "SimCalorimetry/EcalSelectiveReadoutProducers", "SimCalorimetry/EcalSimAlgos", - "SimCalorimetry/EcalSimProducers", "SimCalorimetry/EcalTestBeam", - "SimCalorimetry/EcalTestBeamAlgos", "SimCalorimetry/EcalZeroSuppressionAlgos", - "SimCalorimetry/EcalZeroSuppressionProducers", "SimCalorimetry/HcalSimAlgos", - "SimCalorimetry/HcalSimProducers", "SimCalorimetry/HcalTestBeam", - "SimCalorimetry/HcalZeroSuppressionProducers", "SimDataFormats/CaloHit", - "SimDataFormats/CaloTest", "SimDataFormats/CrossingFrame", - "SimDataFormats/DigiSimLinks", "SimDataFormats/EcalTestBeam", - "SimDataFormats/EncodedEventId", "SimDataFormats/Forward", - "SimDataFormats/GeneratorProducts", "SimDataFormats/HcalTestBeam", - "SimDataFormats/HiGenData", "SimDataFormats/JetMatching", - "SimDataFormats/PileupSummaryInfo", "SimDataFormats/RPCDigiSimLink", - "SimDataFormats/RandomEngine", "SimDataFormats/SimHitMaker", - "SimDataFormats/Track", "SimDataFormats/TrackerDigiSimLink", - "SimDataFormats/TrackingAnalysis", "SimDataFormats/TrackingHit", - "SimDataFormats/ValidationFormats", "SimDataFormats/Vertex", "SimG4CMS/Calo", - "SimG4CMS/CherenkovAnalysis", "SimG4CMS/EcalTestBeam", "SimG4CMS/FP420", - "SimG4CMS/Forward", "SimG4CMS/HcalTestBeam", "SimG4CMS/Muon", - "SimG4CMS/ShowerLibraryProducer", "SimG4CMS/Tracker", "SimG4Core/Application", - "SimG4Core/CheckSecondary", "SimG4Core/Configuration", - "SimG4Core/CountProcesses", "SimG4Core/CustomPhysics", "SimG4Core/GFlash", - "SimG4Core/Generators", "SimG4Core/Geometry", "SimG4Core/GeometryProducer", - "SimG4Core/HelpfulWatchers", "SimG4Core/KillSecondaries", - "SimG4Core/MagneticField", "SimG4Core/Notification", "SimG4Core/Physics", - "SimG4Core/PhysicsLists", "SimG4Core/PrintGeomInfo", - "SimG4Core/PrintTrackNumber", "SimG4Core/SaveSimTrackAction", - "SimG4Core/SensitiveDetector", "SimG4Core/TrackingVerbose", - "SimG4Core/Watcher", "SimGeneral/Configuration", "SimGeneral/DataMixingModule", - "SimGeneral/GFlash", "SimGeneral/HepPDTESSource", "SimGeneral/HepPDTRecord", - "SimGeneral/MixingModule", "SimGeneral/NoiseGenerators", - "SimGeneral/PileupInformation", "SimGeneral/TrackingAnalysis", - "SimMuon/CSCDigitizer", "SimMuon/Configuration", "SimMuon/DTDigitizer", - "SimMuon/MCTruth", "SimMuon/Neutron", "SimMuon/RPCDigitizer", - "SimRomanPot/Configuration", "SimRomanPot/SimFP420", "SimTracker/Common", - "SimTracker/Configuration", "SimTracker/Records", - "SimTracker/SiPixelDigitizer", "SimTracker/SiStripDigitizer", - "SimTracker/TrackAssociation", "SimTracker/TrackAssociatorESProducer", - "SimTracker/TrackHistory", "SimTracker/TrackerFilters", - "SimTracker/TrackerHitAssociation", "SimTracker/TrackerMaterialAnalysis", - "SimTracker/VertexAssociation", "SimTracker/VertexAssociatorESProducer", - "SimTransport/HectorProducer", "TauAnalysis/MCEmbeddingTools", - "TrackPropagation/Geant4e", "Validation/Configuration"]} - -if __name__ == "__main__": - main() diff --git a/Utilities/ReleaseScripts/test/test-clang-tidy.sh b/Utilities/ReleaseScripts/test/test-clang-tidy.sh index cb0fe16237b34..cf406ea6e974b 100755 --- a/Utilities/ReleaseScripts/test/test-clang-tidy.sh +++ b/Utilities/ReleaseScripts/test/test-clang-tidy.sh @@ -1,5 +1,6 @@ #!/bin/bash -ex clang-tidy -export-fixes $CMSSW_BASE/test-clang-tidy.cc.yaml -header-filter "$CMSSW_BASE/src/.*" $CMSSW_BASE/src/Utilities/ReleaseScripts/test/test-clang-tidy.cc sed -i -e "s|$CMSSW_BASE/src/||" $CMSSW_BASE/test-clang-tidy.cc.yaml +sed -i -e '/^\s\s*BuildDirectory/d;/^\s\s*Level:/d' $CMSSW_BASE/test-clang-tidy.cc.yaml diff -u $CMSSW_BASE/test-clang-tidy.cc.yaml $CMSSW_BASE/src/Utilities/ReleaseScripts/test/test-clang-tidy.cc.yaml rm -f $CMSSW_BASE/test-clang-tidy.cc.yaml diff --git a/Utilities/StaticAnalyzers/scripts/callgraph.py b/Utilities/StaticAnalyzers/scripts/callgraph.py index 66f7baea4b439..8ee53dc2426ca 100755 --- a/Utilities/StaticAnalyzers/scripts/callgraph.py +++ b/Utilities/StaticAnalyzers/scripts/callgraph.py @@ -1,44 +1,81 @@ #! /usr/bin/env python from __future__ import print_function import re -topfunc = re.compile("::(produce|analyze|filter|beginLuminosityBlock|beginRun|beginStream)\(") -baseclass = re.compile("edm::(one::|stream::|global::)?ED(Producer|Filter|Analyzer)(Base)?") -farg = re.compile("\(.*\)") +import yaml + +topfunc = re.compile(r"::(accumulate|acquire|startingNewLoop|duringLoop|endOfLoop|beginOfJob|endOfJob|produce|analyze|filter|beginLuminosityBlock|beginRun|beginStream|streamBeginRun|streamBeginLuminosityBlock|streamEndRun|streamEndLuminosityBlock|globalBeginRun|globalEndRun|globalBeginLuminosityBlock|globalEndLuminosityBlock|endRun|endLuminosityBlock)\(") + +baseclass = re.compile(r"edm::(one::|stream::|global::)?(ED(Producer|Filter|Analyzer|(IterateNTimes|NavigateEvents)?Looper)(Base)?|impl::(ExternalWork|Accumulator))") +farg = re.compile(r"\(.*?\)") +tmpl = re.compile(r'<.*?>') toplevelfuncs = set() -epfunc = re.compile("TGraph::(.*)\(.*\)") -skipfunc = re.compile("TGraph::IsA\(.*\)") +epfuncre = re.compile(r"edm::eventsetup::EventSetupRecord::get<.*>\(.*\)") +skipfunc = re.compile(r"TGraph::IsA\(.*\)") epfuncs=set() import networkx as nx G=nx.DiGraph() -f = open('function-calls-db.txt') +#g = open('module_to_package.txt') +#module2package=dict() +#for line in g: +# fields = line.strip().split(';') +# if len(fields) <2: +# continue +# module2package.setdefault(fields[1], []).append(fields[0]) +# +#i = open('module_to_package.yaml', 'w') +#yaml.dump(module2package, i) +#i.close() -for line in f : +h = open('module_to_package.yaml', 'r') +module2package=yaml.load(h, Loader=yaml.FullLoader) + +with open('function-calls-db.txt') as f: + for line in f : fields = line.split("'") + if len(fields) < 3: + continue if fields[2] == ' calls function ' : if not skipfunc.search(line) : G.add_edge(fields[1],fields[3],kind=fields[2]) - if epfunc.search(fields[3]) : epfuncs.add(fields[3]) + if epfuncre.search(fields[3]) : + epfuncs.add(fields[3]) if fields[2] == ' overrides function ' : if baseclass.search(fields[3]) : - if topfunc.search(fields[3]) : toplevelfuncs.add(fields[1]) + if topfunc.search(fields[3]) : + toplevelfuncs.add(fields[1]) G.add_edge(fields[1],fields[3],kind=' overrides function ') else : if not skipfunc.search(line) : G.add_edge(fields[3],fields[1],kind=' calls override function ') - if epfunc.search(fields[1]) : epfuncs.add(fields[1]) -f.close() + if epfuncre.search(fields[1]) : epfuncs.add(fields[1]) -for epfunc in sorted(epfuncs): print(epfunc) -print() + -for epfunc in epfuncs: - for tfunc in toplevelfuncs: - if nx.has_path(G,tfunc,epfunc) : +callstacks=set() +for tfunc in toplevelfuncs: + for epfunc in epfuncs: + if G.has_node(tfunc) and G.has_node(epfunc) and nx.has_path(G,tfunc,epfunc) : path = nx.shortest_path(G,tfunc,epfunc) - print("Call stack \'", end=' ') - for p in path : - print(re.sub(farg,"()",p)+"; ", end=' ') - print(" \'. ") + cs=str("") + previous=str("") + for p in path : + if epfuncre.search(p): break + stripped=re.sub(farg,"()",p) + if previous != stripped: + cs+=stripped+"; " + previous = stripped + callstacks.add(cs) + break + +report=dict() +for key in sorted(module2package.keys()): + for value in sorted(module2package[key]): + vre=re.compile(value) + for cs in sorted(callstacks): + if vre.search(cs): + report.setdefault(key, {}).setdefault(value, []).append(cs) +r=open('eventsetuprecord-get.yaml', 'w') +yaml.dump(report,r) diff --git a/Utilities/StaticAnalyzers/scripts/create_statics_esd_reports.sh b/Utilities/StaticAnalyzers/scripts/create_statics_esd_reports.sh index cd7935f0e2992..92f6c6a81df0f 100755 --- a/Utilities/StaticAnalyzers/scripts/create_statics_esd_reports.sh +++ b/Utilities/StaticAnalyzers/scripts/create_statics_esd_reports.sh @@ -45,4 +45,10 @@ edm-global-class.py >edm-global-classes.txt.unsorted sort -u edm-global-classes.txt.unsorted | grep -e"^EDM global class " | sort -u >edm-global-classes.txt sort -u edm-global-classes.txt.unsorted | grep -v -e"^EDM global class " >edm-global-classes.txt.extra - +if [ ! -f ./callgraph.py ] + then + cp -pv ${CMSSW_BASE}/src/Utilities/StaticAnalyzers/scripts/callgraph.py . + cp -pv ${CMSSW_BASE}/src/Utilities/StaticAnalyzers/scripts/modules_to_package.yaml . +fi +touch eventsetuprecord-get-all.txt eventsetuprecord-get.txt +./callgraph.py 2>&1 | tee eventsetuprecord-get.txt diff --git a/Utilities/StaticAnalyzers/scripts/data-class-funcs.py b/Utilities/StaticAnalyzers/scripts/data-class-funcs.py index 4129df84f0637..5a1eae16b31f0 100755 --- a/Utilities/StaticAnalyzers/scripts/data-class-funcs.py +++ b/Utilities/StaticAnalyzers/scripts/data-class-funcs.py @@ -92,7 +92,7 @@ statics.add(fields[3]) fileinput.close() -for n,nbrdict in G.adjacency_iter(): +for n,nbrdict in G.adjacency(): for nbr,eattr in nbrdict.items(): if n in badfuncs or nbr in badfuncs : if 'kind' in eattr and eattr['kind'] == ' overrides function ' : @@ -100,13 +100,13 @@ virtfuncs.add(nbr) print() -for n,nbrdict in H.adjacency_iter(): +for n,nbrdict in H.adjacency(): for nbr,eattr in nbrdict.items(): if n in badclasses and 'kind' in eattr and eattr['kind'] == ' base class ' : virtclasses.add(nbr) -for n,nbrdict in H.adjacency_iter(): +for n,nbrdict in H.adjacency(): for nbr,eattr in nbrdict.items(): if nbr in dclasses and 'kind' in eattr and eattr['kind'] == ' base class ' : dclasses.add(n) @@ -160,7 +160,7 @@ for dataclassfunc in sorted(dataclassfuncs): for tfunc in sorted(toplevelfuncs): - if nx.has_path(G,tfunc,dataclassfunc): + if G.has_node(tfunc) and G.has_node(dataclassfunc) and nx.has_path(G,tfunc,dataclassfunc): m = getfunc.match(dataclassfunc) n = handle.match(m.group(1)) if n : o = n.group(3) diff --git a/Utilities/StaticAnalyzers/scripts/edm-global-class.py b/Utilities/StaticAnalyzers/scripts/edm-global-class.py index 540359c7eb927..b5aa97dc605da 100755 --- a/Utilities/StaticAnalyzers/scripts/edm-global-class.py +++ b/Utilities/StaticAnalyzers/scripts/edm-global-class.py @@ -96,7 +96,7 @@ -for n,nbrdict in G.adjacency_iter(): +for n,nbrdict in G.adjacency(): for nbr,eattr in nbrdict.items(): if n in badfuncs or nbr in badfuncs : if 'kind' in eattr and eattr['kind'] == ' overrides function ' : diff --git a/Utilities/StaticAnalyzers/scripts/module_to_package.yaml b/Utilities/StaticAnalyzers/scripts/module_to_package.yaml new file mode 100644 index 0000000000000..4fd1a6201e84d --- /dev/null +++ b/Utilities/StaticAnalyzers/scripts/module_to_package.yaml @@ -0,0 +1,366 @@ +Alignment/CommonAlignmentProducer: +- AlignmentProducerAsAnalyzer +- ObjectSelector + >, NonNullNumberSelector, helper::NullPostProcessor + >, edm::stream::EDFilter<> >, helper::TrackCollectionStoreManager, helper::TrackSelectorBase, + reco::modules::NoEventSetupInit > +Alignment/LaserAlignment: +- LaserAlignmentEventFilter +Alignment/MuonAlignmentAlgorithms: +- MuonMillepedeTrackRefitter +CommonTools/RecoAlgos: +- ObjectSelector + >, NonNullNumberSelector, helper::NullPostProcessor >, edm::EDFilter>, helper::CollectionStoreManager >, helper::IteratorToObjectConverter > > >, helper::ObjectSelectorBase >, edm::EDFilter>, reco::modules::NoEventSetupInit + > +CommonTools/RecoUtils: +- PFCand_AssoMap +Configuration/Skimming: +- LeptonSkimming +DQM/CSCMonitorModule: +- CSCMonitorModule +DQM/CTPPS: +- TotemTimingDQMSource +DQM/DTMonitorModule: +- DTResolutionAnalysisTask +DQM/EcalMonitorTasks: +- EcalDQMonitorTask +DQM/EcalPreshowerMonitorModule: +- ESDaqInfoTask +DQM/L1TMonitor: +- L1TdeRCT +DQMOffline/Muon: +- CSCOfflineMonitor +EgammaAnalysis/ElectronTools: +- CalibratedElectronProducerRun2T +- CalibratedElectronProducerRun2T +- CalibratedElectronProducerRun2T +EventFilter/HcalRawToDigi: +- HcalRawToDigiGPU +EventFilter/L1TRawToDigi: +- omtf::OmtfPacker +- omtf::OmtfUnpacker +EventFilter/RPCRawToDigi: +- RPCUnpackingModule +FastSimulation/MuonSimHitProducer: +- MuonSimHitProducer +FastSimulation/SimplifiedGeometryPropagator: +- FastSimProducer +- FastTrackDeDxProducer +FastSimulation/Tracking: +- TrackCandidateProducer +- TrajectorySeedProducer +FastSimulation/TrackingRecHitProducer: +- FastTrackerRecHitMatcher +- TrackingRecHitProducer +GeneratorInterface/GenFilters: +- CosmicGenFilterHelix +- PythiaFilterIsolatedTrack +GeneratorInterface/RivetInterface: +- GenParticles2HepMCConverter +HLTrigger/HLTfilters: +- HLTLevel1GTSeed +- TriggerResultsFilterFromDB +HLTrigger/JetMET: +- PixelJetPuId +HLTrigger/btau: +- HLTDisplacedmumuVtxProducer +- HLTDisplacedmumumuVtxProducer +- HLTDisplacedtktkVtxProducer +- HLTDisplacedtktktkVtxProducer +- HLTmumutkVtxProducer +- HLTmumutktkVtxProducer +HLTrigger/special: +- HLTEcalPhiSymFilter +- HLTRechitsToDigis +- HLTRegionalEcalResonanceFilter +L1Trigger/GlobalTriggerAnalyzer: +- L1GtTrigReport +L1Trigger/HardwareValidation: +- L1Comparator +L1Trigger/L1CaloTrigger: +- L1EGCrystalClusterEmulatorProducer +L1Trigger/L1TGlobal: +- L1TGlobalPrescaler +L1Trigger/L1THGCal: +- HFNoseVFEProducer +- HGCalBackendLayer1Producer +- HGCalBackendLayer2Producer +- HGCalConcentratorProducer +- HGCalTowerMapProducer +- HGCalTowerProducer +- HGCalVFEProducer +L1Trigger/L1TMuonBarrel: +- L1TMuonBarrelKalmanStubProducer +- L1TMuonBarrelTrackProducer +L1Trigger/L1TMuonEndCap: +- L1TMuonEndCapTrackProducer +L1Trigger/L1TTwinMux: +- L1TTwinMuxProducer +L1Trigger/Phase2L1ParticleFlow: +- PFClusterProducer +- PFTrackProducer +L1Trigger/RPCTechnicalTrigger: +- RPCTechnicalTrigger +L1Trigger/RegionalCaloTrigger: +- L1RCTProducer +L1Trigger/TrackFindingTracklet: +- L1FPGATrackProducer +Mixing/Base: +- edm::BMixingModule +MuonAnalysis/MomentumScaleCalibration: +- MuScleFitMuonProducer +PhysicsTools/HepMCCandAlgos: +- GenParticlePruner +PhysicsTools/IsolationAlgos: +- CandIsoDepositProducer +PhysicsTools/NanoAOD: +- L1TriggerResultsConverter +PhysicsTools/PatAlgos: +- pat::JetCorrFactorsProducer +- pat::PATElectronProducer +- pat::PATElectronSlimmer +- pat::PATGenericParticleProducer +- pat::PATIsolatedTrackProducer +- pat::PATJetProducer +- pat::PATJetSlimmer +- pat::PATMETProducer +- pat::PATMuonProducer +- pat::PATMuonSlimmer +- pat::PATPhotonProducer +- pat::PATPhotonSlimmer +- pat::PATTauProducer +- pat::PATTauSlimmer +- pat::PATTriggerProducer +- pat::TauJetCorrFactorsProducer +RecoBTag/PixelCluster: +- PixelClusterTagInfoProducer +RecoBTag/SoftLepton: +- SoftLepton +- SoftPFElectronTagInfoProducer +- SoftPFMuonTagInfoProducer +RecoBTau/JetTagComputer: +- JetTagProducer +RecoEcal/EgammaClusterProducers: +- EgammaSCCorrectionMaker +RecoEgamma/EgammaElectronProducers: +- GEDGsfElectronFinalizer +- GsfElectronProducer +- LowPtGsfElectronFinalizer +- LowPtGsfElectronIDProducer +- LowPtGsfElectronSeedProducer +RecoEgamma/EgammaPhotonProducers: +- ConversionTrackCandidateProducer +- GEDPhotonProducer +- PhotonProducer +- TrackProducer +- TrackProducerWithSCAssociation +RecoEgamma/Examples: +- SiStripElectronAnalyzer +- SimplePhotonAnalyzer +RecoHGCal/TICL: +- TrackstersProducer +RecoHI/HiEgammaAlgos: +- HiEgammaSCCorrectionMaker +- HiSpikeCleaner +- photonIsolationHIProducer +RecoHI/HiEvtPlaneAlgos: +- EvtPlaneProducer +- HiEvtPlaneFlatProducer +RecoHI/HiTracking: +- HIPixelClusterVtxProducer +- HIProtoTrackFilterProducer +RecoJets/JetAssociationProducers: +- JetTracksAssociatorAtCaloFace +- TrackExtrapolator +RecoJets/JetProducers: +- JetIDProducer +- PileupJetIdProducer +- QGTagger +RecoLocalCalo/EcalRecProducers: +- EcalRecHitProducerGPU +- EcalUncalibRecHitProducer +RecoLocalCalo/HGCalRecProducers: +- HGCalLayerClusterProducer +- HGCalMultiClusterProducer +- HGCalRecHitProducer +- HGCalUncalibRecHitProducer +RecoLocalCalo/HcalRecProducers: +- HBHERecHitProducerGPU +RecoLocalFastTime/FTLClusterizer: +- MTDClusterProducer +RecoLocalFastTime/FTLRecProducers: +- MTDRecHitProducer +- MTDTrackingRecHitProducer +RecoLocalMuon/DTRecHit: +- DTRecHitProducer +RecoLocalMuon/DTSegment: +- DTRecSegment2DProducer +- DTRecSegment4DProducer +- DTSegment4DT0Corrector +RecoLocalMuon/GEMCSCSegment: +- GEMCSCSegmentProducer +RecoLocalMuon/RPCRecHit: +- RPCRecHitProducer +RecoLocalTracker/SiPixelClusterizer: +- SiPixelClusterProducer +RecoLocalTracker/SiStripClusterizer: +- SiStripClusterizerFromRaw +RecoLocalTracker/SiStripZeroSuppression: +- SiStripZeroSuppression +RecoLocalTracker/SubCollectionProducers: +- HITrackClusterRemover +- HLTTrackClusterRemoverNew +- JetCoreClusterSplitter +- PixelClusterSelectorTopBottom +- SeedClusterRemover +- SeedClusterRemoverPhase2 +- StripClusterSelectorTopBottom +RecoMET/METFilters: +- EEBadScFilter +- EcalBadCalibFilter +- EcalDeadCellBoundaryEnergyFilter +- EcalLaserCorrFilter +RecoMET/METPUSubtraction: +- cms::PFMETProducer +- reco::PFMETProducerMVA +RecoMET/METProducers: +- reco::CSCHaloDataProducer +RecoMTD/TrackExtender: +- TrackExtenderWithMTDT +- TrackExtenderWithMTDT > > +RecoMuon/CosmicMuonProducer: +- CosmicMuonProducer +RecoMuon/GlobalMuonProducer: +- TevMuonProducer +RecoMuon/GlobalTrackingTools: +- GlobalTrackQualityProducer +RecoMuon/L2MuonIsolationProducer: +- L2MuonIsolationProducer +RecoMuon/L2MuonProducer: +- L2MuonProducer +RecoMuon/L3MuonIsolationProducer: +- L3MuonCombinedRelativeIsolationProducer +RecoMuon/MuonIdentification: +- MuonIdProducer +- MuonTimingProducer +RecoMuon/MuonIsolationProducers: +- MuIsoDepositProducer +RecoMuon/StandAloneMuonProducer: +- StandAloneMuonProducer +RecoMuon/TrackerSeedGenerator: +- TSGForOIFromL2 +- TSGFromL2Muon +RecoParticleFlow/PFClusterProducer: +- CorrectedECALPFClusterProducer +- PFMultiDepthClusterProducer +- PFRecHitProducer +RecoParticleFlow/PFProducer: +- PFBlockProducer +- PFEGammaProducer +- PFProducer +RecoParticleFlow/PFSimProducer: +- PFSimParticleProducer +RecoParticleFlow/PFTracking: +- GoodSeedProducer +- HGCalTrackCollectionProducer +- LightPFTrackProducer +- PFConversionProducer +- PFDisplacedTrackerVertexProducer +- PFDisplacedVertexCandidateProducer +- PFDisplacedVertexProducer +- PFElecTkProducer +- PFNuclearProducer +- PFV0Producer +RecoPixelVertexing/PixelLowPtUtilities: +- PixelTrackProducer +- PixelVertexProducerClusters +- SiPixelClusterShapeCacheProducer +RecoPixelVertexing/PixelTrackFitting: +- PixelFitterByConformalMappingAndLineProducer +- PixelFitterByHelixProjectionsProducer +RecoPixelVertexing/PixelVertexFinding: +- FastPrimaryVertexProducer +- FastPrimaryVertexWithWeightsProducer +RecoTauTag/RecoTau: +- PFTauPrimaryVertexProducerBase +- PFTauSecondaryVertexProducer +- PFTauTransverseImpactParameters +RecoTracker/ConversionSeedGenerators: +- PhotonConversionTrajectorySeedProducerFromQuadruplets +- PhotonConversionTrajectorySeedProducerFromSingleLeg +RecoTracker/DeDx: +- DeDxEstimatorProducer +RecoTracker/FinalTrackSelectors: +- MultiTrackSelector +RecoTracker/MeasurementDet: +- MeasurementTrackerEventProducer +RecoTracker/SingleTrackPattern: +- cms::CosmicTrackFinder +RecoTracker/SpecialSeedGenerators: +- CosmicSeedGenerator +- CtfSpecialSeedGenerator +- OutsideInMuonSeeder +- SimpleCosmicBONSeeder +RecoTracker/TkHitPairs: +- HitPairEDProducer +RecoTracker/TkSeedGenerator: +- DeepCoreSeedGenerator +- MultiHitFromChi2EDProducer +- SeedGeneratorFromProtoTracksEDProducer +- SeedGeneratorFromRegionHitsEDProducer +RecoTracker/TkSeedingLayers: +- SeedingLayersEDProducer +RecoTracker/TkTrackingRegions: +- PixelInactiveAreaTrackingRegionsSeedingLayersProducer +RecoTracker/TrackProducer: +- DAFTrackProducer +- GsfTrackProducer +- GsfTrackRefitter +- TrackRefitter +RecoVertex/PrimaryVertexProducer: +- PrimaryVertexProducer +RecoVertex/V0Producer: +- V0Producer +SimCalorimetry/EcalSelectiveReadoutProducers: +- EcalSelectiveReadoutProducer +SimCalorimetry/EcalTrigPrimProducers: +- EcalTrigPrimProducer +SimCalorimetry/EcalZeroSuppressionProducers: +- ESZeroSuppressionProducer +SimG4Core/Application: +- OscarMTProducer +SimGeneral/TrackingAnalysis: +- TrackingParticleNumberOfLayersProducer +SimMuon/CSCDigitizer: +- CSCDigiProducer +SimMuon/MCTruth: +- MuonAssociatorEDProducer +- MuonToTrackingParticleAssociatorEDProducer +- SeedToTrackProducer +SimMuon/RPCDigitizer: +- RPCandIRPCDigiProducer +SimPPS/PPSSimTrackProducer: +- PPSSimTrackProducer +SimPPS/RPDigiProducer: +- RPDigiProducer +SimTracker/TrackAssociation: +- TrackTimeValueMapProducer +SimTracker/TrackAssociatorProducers: +- TrackAssociatorByChi2Producer +- TrackAssociatorByHitsProducer +- TrackAssociatorByPositionProducer +Validation/DTRecHits: +- DTRecHitQuality +- DTSegment2DQuality +- DTSegment2DSLPhiQuality +- DTSegment4DQuality +Validation/HGCalValidation: +- HGCalHitValidation +- HGCalValidator +Validation/RecoTrack: +- MultiTrackValidator +- TrackFromSeedProducer diff --git a/Utilities/StaticAnalyzers/scripts/modules_in_ib.txt b/Utilities/StaticAnalyzers/scripts/modules_in_ib.txt new file mode 100644 index 0000000000000..68169c2a1ef89 --- /dev/null +++ b/Utilities/StaticAnalyzers/scripts/modules_in_ib.txt @@ -0,0 +1,1674 @@ +AMPTGeneratorFilter +APVCyclePhaseProducerFromL1TS +AlCaDiJetsProducer +AlCaECALRecHitReducer +AlCaEcalHcalReadoutsProducer +AlCaElectronTracksReducer +AlCaGammaJetProducer +AlCaGammaJetSelector +AlCaHBHEMuonFilter +AlCaHEMuonFilter +AlCaHOCalibProducer +AlCaIsoTracksFilter +AlCaIsoTracksProducer +AlCaIsolatedBunchFilter +AlCaIsolatedBunchSelector +AlCaLowPUHBHEMuonFilter +AlcaBeamMonitor +AlcaBeamMonitorClient +AlcaBeamSpotHarvester +AlcaBeamSpotProducer +AlcaPCCEventProducer +AlcaPCCProducer +AlignmentCSCBeamHaloSelectorModule +AlignmentCSCOverlapSelectorModule +AlignmentMuonSelectorModule +AlignmentProducerAsAnalyzer +AlignmentTrackSelectorModule +AnalyticalTrackSelector +B2GDQM +B2GDoubleLeptonHLTValidation +B2GHadronicHLTValidation +B2GSingleLeptonHLTValidation +BCToEFilter +BDHadronTrackMonitoringAnalyzer +BDHadronTrackMonitoringHarvester +BJetEnergyRegressionMVA +BPHMonitor +BPhysicsOniaDQM +BPhysicsSpectrum +BPhysicsValidation +BSCTrigger +BTVHLTOfflineSource +BTagPerformanceAnalyzerMC +BTagPerformanceAnalyzerOnData +BTagPerformanceHarvester +BTagProbabilityToDiscriminator +BTagSFProducer +BVertexFilter +BadGlobalMuonTagger +BadPFCandidateJetsEEnoiseProducer +BadParticleFilter +BasicGenParticleValidation +BasicHepMCHeavyIonValidation +BasicHepMCValidation +BeamHaloProducer +BeamHaloSummaryProducer +BeamSpotOnlineProducer +BeamSpotProducer +BeamSpotToCUDA +BestMassZArbitrationProducer +BetaBoostEvtVtxGenerator +BetaStarPackedCandidateVarProducer +BetafuncEvtVtxGenerator +BooleanFlagFilter +BoostedDoubleSVProducer +BoostedJetMerger +BoostedJetONNXJetTagsProducer +BoostedTauSeedsProducer +BtlDigiHitsValidation +BtlLocalRecoValidation +BtlSimHitsHarvester +BtlSimHitsValidation +BtoCharmDecayVertexMerger +BunchSpacingProducer +BxTiming +ByClusterSummaryMultiplicityPairEventFilter +BySiStripClusterMultiplicityEventFilter +CAHitQuadrupletEDProducer +CAHitTripletEDProducer +CITKPFIsolationSumProducer +CITKPFIsolationSumProducerForPUPPI +CSCCertificationInfo +CSCDCCUnpacker +CSCDaqInfo +CSCDcsInfo +CSCDigiProducer +CSCDigiToRawModule +CSCDigiValidation +CSCHaloDataProducer +CSCMonitorModule +CSCOfflineClient +CSCOfflineMonitor +CSCRecHitDProducer +CSCSegmentProducer +CSCTFCandidateProducer +CSCTFPacker +CSCTFTrackProducer +CSCTFUnpacker +CSCTightHalo2015Filter +CSCTightHaloFilter +CSCTightHaloTrkMuUnvetoFilter +CSCTriggerPrimitivesProducer +CSJetProducer +CTPPSCommonDQMSource +CTPPSDiamondDQMSource +CTPPSDiamondLocalTrackFitter +CTPPSDiamondRecHitProducer +CTPPSLocalTrackLiteProducer +CTPPSPixelClusterProducer +CTPPSPixelDQMSource +CTPPSPixelDigiProducer +CTPPSPixelDigiToRaw +CTPPSPixelLocalTrackProducer +CTPPSPixelRawToDigi +CTPPSPixelRecHitProducer +CTPPSProtonProducer +CTPPSTotemDigiToRaw +CalibratedElectronProducer +CalibratedPatElectronProducer +CalibratedPatPhotonProducer +CalibratedPhotonProducer +CalibrationTrackSelectorFromDetIdList +CaloJetCorrectionProducer +CaloJetMETcorrInputProducer +CaloJetSelector +CaloJetSlimmer +CaloMETProducer +CaloParticleValidation +CaloRecHitsBeamHaloCleaned +CaloTowerCandidateCreator +CaloTowerFromL1TCreatorForTauHLT +CaloTowerFromL1TSeededCreatorForTauHLT +CaloTowersAnalyzer +CaloTowersClient +CaloTowersCreator +CaloTowersDQMClient +CaloTowersValidation +CandIPProducer +CandIsoDepositProducer +CandIsolatorFromDeposits +CandMCMatchTableProducer +CandPtrProjector +CandPtrSelector +CandSecondaryVertexProducer +CandViewCountFilter +CandViewMerger +CandViewRefSelector +CandViewSelector +CandViewShallowCloneCombiner +CandidateSeededTrackingRegionsEDProducer +CandidateSummaryTable +CandidateTriggerObjectProducer +CandidateVertexArbitrator +CandidateVertexMerger +CastorDigiToRaw +CastorJetIDProducer +CastorMonitorModule +CastorRawToDigi +CastorSimpleReconstructor +CastorTTRecord +CastorTowerProducer +CentralityBinProducer +CentralityDQM +CentralityProducer +CentralitypADQM +ChainedJetCorrectorProducer +ChargedHadronPFTrackIsolationProducer +ChargedHadronTrackResolutionFilter +ChargedRefCandidateProducer +CkfTrackCandidateMaker +CkfTrajectoryMaker +ClassifierMerger +ClusterChargeMasker +ClusterCheckerEDProducer +ClusterCompatibilityProducer +ClusterShapeTrackFilterProducer +ClusterSummaryProducer +ClusterTPAssociationProducer +CollectionFromZLegProducer +ConcreteChargedCandidateProducer +ConcreteEcalCandidateProducer +ConditionDumperInEdm +ConversionPostprocessing +ConversionProducer +ConversionTrackCandidateProducer +ConversionTrackMerger +ConversionTrackProducer +ConversionTrackRefFix +ConvertObjectMapRecord +ConvertedPhotonProducer +CorrPCCProducer +CorrectedCaloJetProducer +CorrectedCaloMETProducer +CorrectedECALPFClusterProducer +CorrectedJPTJetProducer +CorrectedPATMETProducer +CorrectedPFJetProducer +CorrectedPFMETProducer +CorrectedTrackJetProducer +CosMuoGenProducer +CosmicClusterProducer +CosmicGenFilterHelix +CosmicMuonProducer +CosmicMuonSeedGenerator +CosmicSeedGenerator +CosmicTrackFinder +CosmicTrackSelector +CosmicTrackSplitter +CosmicsMuonIdProducer +CtfSpecialSeedGenerator +DQMCorrelationClient +DQMDaqInfo +DQMEventInfo +DQMFEDIntegrityClient +DQMFileSaver +DQMGenericClient +DQMHOAlCaRecoStream +DQMHarvestingMetadata +DQMHcalDiJetsAlCaReco +DQMHcalIsoTrackAlCaReco +DQMHcalIsolatedBunchAlCaReco +DQMHcalPhiSymAlCaReco +DQMHistNormalizer +DQMMessageLogger +DQMMessageLoggerClient +DQMOfflineHLTEventInfoClient +DQMPFCandidateAnalyzer +DQMProvInfo +DQMScaleToClient +DQMSourcePi0 +DTBlockedROChannelsTest +DTCertificationSummary +DTChamberEfficiency +DTChamberEfficiencyClient +DTDAQInfo +DTDataIntegrityROSOffline +DTDataIntegrityTask +DTDataIntegrityUrosOffline +DTDigiToRawModule +DTDigitizer +DTLocalTriggerSynchTask +DTOccupancyEfficiency +DTOfflineSummaryClients +DTPreCalibrationTask +DTRecHitProducer +DTRecHitQuality +DTRecSegment2DProducer +DTRecSegment4DProducer +DTResolutionAnalysisTask +DTResolutionAnalysisTest +DTRunConditionVar +DTRunConditionVarClient +DTSegment2DQuality +DTSegment2DSLPhiQuality +DTSegment4DQuality +DTSegment4DT0Corrector +DTSegmentAnalysisTask +DTSegmentAnalysisTest +DTSegmentsTask +DTTFFEDReader +DTTFFEDSim +DTTrackFinder +DTTrigProd +DTTriggerEfficiencyTask +DTTriggerEfficiencyTest +DTUnpackingModule +DTuROSDigiToRaw +DTuROSRawToDigi +DataCertificationJetMET +DeDxEstimatorProducer +DeDxHitInfoProducer +DeepBoostedJetTagInfoProducer +DeepCMVATagInfoProducer +DeepCombinedONNXJetTagsProducer +DeepCoreSeedGenerator +DeepDoubleXONNXJetTagsProducer +DeepDoubleXTagInfoProducer +DeepFlavourJetTagsProducer +DeepFlavourONNXJetTagsProducer +DeepFlavourTagInfoProducer +DeepMETProducer +DeepNNTagInfoProducer +DeepTauId +DeepVertexONNXJetTagsProducer +DetStatus +DetectorStateFilter +DiDispStaMuonMonitor +DiJetMonitor +DiMuonHistograms +DigiTask +DrellYanValidation +DuplicateListMerger +DuplicateTrackMerger +DuplicationChecker +ECALMultifitAnalyzer_HI +ECALpedestalPCLHarvester +ECALpedestalPCLworker +ECFAdder +EDMtoMEConverter +EEBadScFilter +ESDaqInfoTask +ESDataCertificationTask +ESDcsInfoTask +ESDigiToRaw +ESFEDIntegrityTask +ESIntegrityTask +ESOccupancyTask +ESRawDataTask +ESRawToDigi +ESRecHitProducer +ESRecoSummary +ESTrendTask +ESZeroSuppressionProducer +EcalBadCalibFilter +EcalBarrelClusterFastTimer +EcalBarrelDigisValidation +EcalBarrelRecHitsValidation +EcalBarrelSimHitsValidation +EcalCPURecHitProducer +EcalCPUUncalibRecHitProducer +EcalCompactTrigPrimProducer +EcalDQMonitorClient +EcalDQMonitorTask +EcalDeadCellBoundaryEnergyFilter +EcalDeadCellTriggerPrimitiveFilter +EcalDetIdToBeRecoveredProducer +EcalDetailedTimeRecHitProducer +EcalDigiSelector +EcalDigiToRaw +EcalDigisValidation +EcalEBTrigPrimProducer +EcalEndcapDigisValidation +EcalEndcapRecHitsValidation +EcalEndcapSimHitsValidation +EcalFEDMonitor +EcalHaloDataProducer +EcalLaserCorrFilter +EcalMEFormatter +EcalPileUpDepMonitor +EcalPreshowerDigisValidation +EcalPreshowerMonitorClient +EcalPreshowerRecHitsValidation +EcalPreshowerSimHitsValidation +EcalRawToDigi +EcalRawToDigiGPU +EcalRecHitProducer +EcalRecHitProducerGPU +EcalRecHitsValidation +EcalRecalibRecHitProducer +EcalSelectiveReadoutProducer +EcalSelectiveReadoutValidation +EcalSimHitsValidation +EcalTPSkimmer +EcalTrigPrimProducer +EcalUncalibRecHitProducer +EcalUncalibRecHitProducerGPU +EcalZmassClient +EcalZmassTask +EfficiencyAnalyzer +EfficiencyPlotter +EgHLTOfflineClient +EgHLTOfflineSource +EgHLTOfflineSummaryClient +EgammaBasicClusters +EgammaEcalRecHitIsolationProducer +EgammaElectronTkIsolationProducer +EgammaHLTBcHcalIsolationProducersRegional +EgammaHLTClusterShapeProducer +EgammaHLTEcalPFClusterIsolationProducer +EgammaHLTElectronTrackIsolationProducers +EgammaHLTFilteredSuperClusterProducer +EgammaHLTGsfTrackVarProducer +EgammaHLTHcalPFClusterIsolationProducer +EgammaHLTNxNClusterProducer +EgammaHLTPhotonTrackIsolationProducersRegional +EgammaHLTPixelMatchElectronProducers +EgammaHLTPixelMatchVarProducer +EgammaHLTR9IDProducer +EgammaHLTRecoEcalCandidateProducers +EgammaIsoESDetIdCollectionProducer +EgammaIsoHcalDetIdCollectionProducer +EgammaSCCorrectionMaker +EgammaSuperClusterMerger +EgammaSuperClusters +EgammaTowerIsolationProducer +ElasticPlotDQMSource +EleBaseMVAValueMapProducer +EleIdCutBasedExtProducer +EleIsoDetIdCollectionProducer +EleIsoValueMapProducer +EleVIDNestedWPBitmapProducer +ElectronAnalyzer +ElectronEcalPFClusterIsolationProducer +ElectronGeneralAnalyzer +ElectronHEEPIDValueMapProducer +ElectronHcalPFClusterIsolationProducer +ElectronIdMVABased +ElectronJetVarProducer +ElectronMVAValueMapProducer +ElectronMatchedCandidateProducer +ElectronMcFakePostValidator +ElectronMcFakeValidator +ElectronMcSignalPostValidator +ElectronMcSignalPostValidatorMiniAOD +ElectronMcSignalValidator +ElectronMcSignalValidatorMiniAOD +ElectronNHitSeedProducer +ElectronOfflineClient +ElectronSeedGainProducer +ElectronSeedMerger +ElectronSeedProducer +ElectronSeedTrackRefFix +ElectronTagProbeAnalyzer +ElseMETProducer +EmDQM +EmDQMPostProcessor +EtMinCaloJetSelector +EtMinPFJetSelector +EtaPtMinCandViewSelector +EtaRangeCaloJetSelector +EtlDigiHitsValidation +EtlLocalRecoValidation +EtlSimHitsValidation +EvFFEDSelector +EventContentAnalyzer +EventSetupRecordDataGetter +EventWithHistoryEDFilter +EventWithHistoryProducerFromL1ABC +EvtPlaneProducer +EwkElecDQM +EwkMuDQM +EwkMuLumiMonitorDQM +ExoticaDQM +ExternalLHEProducer +FSQDQM +FSQDiJetAve +FakeTrackProducerFromCandidate +FakeTrackProducerFromSeed +FastGenParticleCandidateProducer +FastPrimaryVertexWithWeightsProducer +FastSimProducer +FastTimerServiceClient +FastTrackDeDxProducer +FastTrackerRecHitCombiner +FastTrackerRecHitMaskProducer +FastTrackerRecHitMatcher +FastjetJetProducer +FilterOutScraping +FilteredLayerClustersProducer +FixedGridRhoProducer +FixedGridRhoProducerFastjet +FlatEvtVtxGenerator +FlatRandomEGunProducer +GEDGsfElectronCoreProducer +GEDGsfElectronFinalizer +GEDGsfElectronValueMapProducer +GEDPhotonCoreProducer +GEDPhotonProducer +GEMCheckGeometry +GEMCoPadDigiValidation +GEMDigiProducer +GEMDigiToRawModule +GEMEfficiencyAnalyzer +GEMEfficiencyHarvester +GEMOfflineMonitor +GEMPadDigiClusterProducer +GEMPadDigiClusterValidation +GEMPadDigiProducer +GEMPadDigiValidation +GEMRawToDigiModule +GEMRecHitProducer +GEMRecHitValidation +GEMSegmentProducer +GEMSimHitValidation +GEMStripDigiValidation +GamIsoDetIdCollectionProducer +GaussEvtVtxGenerator +GctDigiToRaw +GctRawToDigi +GenFilterEfficiencyProducer +GenHFHadronMatcher +GenHIEventProducer +GenJetConstituentSelector +GenJetFlavourInfoPreserver +GenJetFlavourTableProducer +GenJetMatcher +GenJetSelector +GenJetTauTaggerProducer +GenMETExtractor +GenMETProducer +GenPUProtonProducer +GenParticleProducer +GenParticlePruner +GenParticleSelector +GenParticles2HepMCConverter +GenTtbarCategorizer +GenVisTauProducer +GenWeightsTableProducer +GenXSecAnalyzer +GeneratorSmearedProducer +GenericPFCandidateSelector +GlobalCosmicMuonProducer +GlobalDigisAnalyzer +GlobalHaloDataProducer +GlobalHitsAnalyzer +GlobalMuonProducer +GlobalRecHitsAnalyzer +GlobalSuperTightHalo2016Filter +GlobalTightHalo2016Filter +GlobalTrackQualityProducer +GlobalTrackingRegionEDProducer +GlobalTrackingRegionFromBeamSpotEDProducer +GlobalTrackingRegionWithVerticesEDProducer +GlobalVariablesTableProducer +GoodSeedProducer +GoodVertexFilter +GsfElectronCoreEcalDrivenProducer +GsfElectronFromPVSelector +GsfElectronProducer +GsfElectronRefSelector +GsfElectronSelector +GsfTrackProducer +HBHEIsolatedNoiseReflagger +HBHENoiseFilterResultProducer +HBHEPhase1Reconstructor +HBHEPlan1Combiner +HBHERecHitProducerGPU +HFEMClusterProducer +HFJetShowerShape +HFNoisyHitsFilter +HFNoseRawToDigiFake +HFNoseVFEProducer +HFPhase1Reconstructor +HFPreReconstructor +HFRecoEcalCandidateProducer +HGCalBackendLayer1Producer +HGCalBackendLayer2Producer +HGCalConcentratorProducer +HGCalDigiClient +HGCalDigiValidation +HGCalElectronFilter +HGCalElectronIDValueMapProducer +HGCalHitCalibration +HGCalHitValidation +HGCalLayerClusterProducer +HGCalMultiClusterProducer +HGCalPhotonIDValueMapProducer +HGCalRawToDigiFake +HGCalRecHitMapProducer +HGCalRecHitProducer +HGCalRecHitValidation +HGCalRecHitsClient +HGCalSimHitValidation +HGCalSimHitsClient +HGCalTowerMapProducer +HGCalTowerProducer +HGCalTrackCollectionProducer +HGCalUncalibRecHitProducer +HGCalVFEProducer +HGCalValidator +HIBestVertexProducer +HIBestVertexSelection +HIMultiTrackSelector +HIMuonTrackingRegionEDProducer +HIPixelClusterVtxProducer +HIPixelMedianVtxProducer +HIPixelTrackFilterProducer +HIProtoTrackFilterProducer +HIProtoTrackSelection +HITrackClusterRemover +HITrackingRegionForPrimaryVtxEDProducer +HLLHCEvtVtxGenerator +HLT1CaloJet +HLT1CaloMET +HLT1Composite +HLT1Muon +HLT1PFJet +HLT1PFMET +HLT1PFTau +HLT1Photon +HLT2MuonMuonDZ +HLT2MuonPFTau +HLT2MuonPhotonDZ +HLT2MuonTau +HLT2PFJetPFJet +HLT2PhotonMuonDZ +HLT2PhotonPFTau +HLT2PhotonPhotonDZ +HLT2PhotonTau +HLTBTagHarvestingAnalyzer +HLTBTagPerformanceAnalyzer +HLTBool +HLTCaloJetCollectionProducer +HLTCaloJetIDProducer +HLTCaloJetSortedVBFFilter +HLTCaloJetTag +HLTCaloJetTagWithMatching +HLTCaloJetVBFFilter +HLTCaloTowerHtMhtProducer +HLTDQMMuonSelector +HLTDeDxFilter +HLTDiCaloJetAveFilter +HLTDiMuonGlbTrkFilter +HLTDiPFJetAveEtaFilter +HLTDiPFJetAveFilter +HLTDiPFJetEtaTopologyFilter +HLTDisplacedEgammaFilter +HLTDisplacedmumuFilter +HLTDisplacedmumuVtxProducer +HLTDisplacedmumumuFilter +HLTDisplacedmumumuVtxProducer +HLTDisplacedtktkFilter +HLTDisplacedtktkVtxProducer +HLTDisplacedtktktkFilter +HLTDisplacedtktktkVtxProducer +HLTEcalPhiSymFilter +HLTEcalPixelIsolTrackFilter +HLTEcalRecHitInAllL1RegionsProducer +HLTEgammaAllCombMassFilter +HLTEgammaCombMassFilter +HLTEgammaDoubleLegCombFilter +HLTEgammaEtFilter +HLTEgammaGenericFilter +HLTEgammaGenericQuadraticEtaFilter +HLTEgammaGenericQuadraticFilter +HLTEgammaL1TMatchFilterRegional +HLTEgammaTriggerFilterObjectWrapper +HLTElePhoTagAndProbeOfflineSource +HLTEleTagAndProbeOfflineSource +HLTElectronMuonInvMassFilter +HLTElectronPixelMatchFilter +HLTExoticaValidator +HLTFiltersDQMonitor +HLTGetRaw +HLTHPDFilter +HLTHcalCalibTypeFilter +HLTHiggsValidator +HLTHighLevel +HLTHtMhtFilter +HLTHtMhtProducer +HLTInclusiveVBFClient +HLTInclusiveVBFSource +HLTJetMETValidation +HLTL1MuonNoL2Selector +HLTL1NumberFilter +HLTL1TMuonSelector +HLTL1TSeed +HLTLevel1GTSeed +HLTMETCleanerUsingJetID +HLTMhtFilter +HLTMhtProducer +HLTMuEleTagAndProbeOfflineSource +HLTMuPhoTagAndProbeOfflineSource +HLTMuonCertSummary +HLTMuonDimuonL2FromL1TFilter +HLTMuonDimuonL3Filter +HLTMuonGenericFilter +HLTMuonIsoFilter +HLTMuonL1TFilter +HLTMuonL2FromL1TPreFilter +HLTMuonL2SelectorForL3IO +HLTMuonL3PreFilter +HLTMuonOfflineAnalyzer +HLTMuonRefMethod +HLTMuonTrackMassFilter +HLTMuonTrackSelector +HLTMuonTrkFilter +HLTMuonTrkL1TFilter +HLTMuonValidator +HLTObjectsMonitor +HLTPFJetCollectionProducer +HLTPFJetCollectionsFilter +HLTPFJetCollectionsForBoostedLeptonPlusJets +HLTPFJetIDProducer +HLTPFJetL1TMatchProducer +HLTPFJetSortedVBFFilter +HLTPFJetTag +HLTPFJetTagWithMatching +HLTPFJetVBFFilter +HLTPFJetsCleanedFromLeadingLeptons +HLTPFTauPairDzMatchFilter +HLTPMMassFilter +HLTPixelActivityFilter +HLTPixelIsolTrackL1TFilter +HLTPixlMBFilt +HLTPrescaler +HLTRFilter +HLTRHemisphere +HLTRechitsToDigis +HLTRegionalEcalResonanceFilter +HLTScoutingEgammaProducer +HLTScoutingMuonProducer +HLTScoutingPFProducer +HLTScoutingPrimaryVertexProducer +HLTScoutingTrackProducer +HLTSingleVertexPixelTrackFilter +HLTTauCertifier +HLTTauDQMOfflineSource +HLTTauDQMSource +HLTTauMCProducer +HLTTauPostProcessor +HLTTauRefCombiner +HLTTauRefProducer +HLTTrackWithHits +HLTTriMuonIsolation +HLTTriggerTypeFilter +HLTVertexPerformanceAnalyzer +HLTmumutkFilter +HLTmumutkVtxProducer +HLTmumutktkFilter +HLTmumutktkVtxProducer +HLTrigReport +HSCPFilter +HTMonitor +HTXSRivetProducer +HadronAndPartonSelector +HcalCalibTypeFilter +HcalDigiToRaw +HcalDigiToRawuHTR +HcalDigisClient +HcalDigisProducerGPU +HcalDigisValidation +HcalHaloDataProducer +HcalHitReconstructor +HcalHitSelection +HcalLaserEventFilter +HcalNoiseInfoProducer +HcalNoiseRates +HcalNoiseRatesClient +HcalOfflineHarvesting +HcalRawToDigi +HcalRealisticZS +HcalRecHitsAnalyzer +HcalRecHitsClient +HcalRecHitsDQMClient +HcalRecHitsValidation +HcalSimHitStudy +HcalSimHitsClient +HcalSimHitsValidation +HcalSimpleReconstructor +HcalStripHaloFilter +HcalTTPDigiProducer +HcalTTPTriggerRecord +HcalTrigPrimDigiProducer +HeavyFlavorHarvesting +HeavyFlavorValidation +Herwig7GeneratorFilter +HiBadParticleCleaner +HiBasicGenTest +HiEgammaSCCorrectionMaker +HiEvtPlaneFlatProducer +HiFJGridEmptyAreaCalculator +HiFJRhoFlowModulationProducer +HiFJRhoProducer +HiGenJetCleaner +HiHFFilterProducer +HiPartonCleaner +HiPuRhoProducer +HiSignalGenJetProducer +HiSignalParticleProducer +HiSpikeCleaner +HiSuperClusterProducer +HigPhotonJetHLTOfflineSource +HiggsDQM +HiggsValidation +HighPtTrackEcalDetIdProducer +HighestSumP4PrimaryVertexSelector +HitPairEDProducer +HitPixelLayersTPSelection +HybridClusterProducer +HydjetGeneratorFilter +IPCutPFCandidateSelector +IPTCorrector +InclusiveCandidateVertexFinder +InclusiveVertexFinder +InputGenJetsParticleSelector +InterestingDetIdCollectionProducer +InterestingEcalDetIdProducer +InterestingTrackEcalDetIdProducer +IsFromLostTrackMapProducer +IslandClusterProducer +IsoTrackIsoValueMapProducer +IsoTrackSelector +IsoTracks +IsolatedEcalPixelTrackCandidateProducer +IsolatedPixelTrackCandidateL1TProducer +IsolatedTrackCleaner +JPTJetCorrectionProducer +JetAnalyzer +JetAnalyzer_HeavyIons +JetAnalyzer_HeavyIons_matching +JetChargeProducer +JetCoreClusterSplitter +JetCorrFactorsProducer +JetExtender +JetFlavourClustering +JetFlavourIdentifier +JetHTJetPlusHOFilter +JetIDProducer +JetMETDQMPostProcessor +JetMETHLTOfflineClient +JetMETHLTOfflineSource +JetMonitor +JetPartonMatcher +JetPlusTrackAddonSeedProducer +JetPlusTrackProducer +JetRegressionVarProducer +JetSubstructurePacker +JetTagProducer +JetTester +JetTesterPostProcessor +JetTester_HeavyIons +JetTracksAssociationToTrackRefs +JetTracksAssociatorAtCaloFace +JetTracksAssociatorAtVertex +JetTracksAssociatorExplicit +JetVertexChecker +L1Comparator +L1ECALPrefiringWeightProducer +L1EGCrystalClusterEmulatorProducer +L1EGammaEEProducer +L1EmulatorErrorFlagClient +L1ExtraDQM +L1ExtraParticlesProd +L1FPGATrackProducer +L1FastjetCorrectorProducer +L1GTDigiToRaw +L1GTEvmDigiToRaw +L1GctEmulator +L1GlobalTrigger +L1GlobalTriggerEvmRawToDigi +L1GlobalTriggerRawToDigi +L1GlobalTriggerRecordProducer +L1GtHwValidation +L1GtTrigReport +L1GtTriggerMenuLiteProducer +L1JPTOffsetCorrectorProducer +L1MuGlobalMuonTrigger +L1NNTauProducer +L1OffsetCorrectorProducer +L1RCTProducer +L1Scalers +L1ScalersClient +L1TBMTFAlgoSelector +L1TBPTX +L1TCSCTF +L1TCSCTFClient +L1TCaloLayer1 +L1TCaloLayer1RawToDigi +L1TCaloRCTToUpgradeConverter +L1TCaloUpgradeToGCTConverter +L1TCorrectedPFJetProducer +L1TDEMON +L1TDTTF +L1TDTTFClient +L1TDiffHarvesting +L1TDigiToRaw +L1TEGammaOffline +L1TEMTFEventInfoClient +L1TEventInfoClient +L1TExtCondProducer +L1TGCT +L1TGCTClient +L1TGMT +L1TGMTClient +L1TGT +L1TGlobalProducer +L1TGlobalSummary +L1THLTTauMatching +L1TMP7ZeroSupp +L1TMuonBarrelKalmanStubProducer +L1TMuonBarrelKalmanTrackProducer +L1TMuonBarrelTrackProducer +L1TMuonCaloSumProducer +L1TMuonDQMOffline +L1TMuonEndCapTrackProducer +L1TMuonOverlapTrackProducer +L1TMuonProducer +L1TObjectsTiming +L1TOccupancyClient +L1TPFCaloProducer +L1TPFCandMultiMerger +L1TPFJetsMatching +L1TPFMetNoMuProducer +L1TPFProducer +L1TPUM +L1TPhysicalEtAdder +L1TRCT +L1TRPCTF +L1TRPCTFClient +L1TRate +L1TRate_Offline +L1TRawToDigi +L1TScalersSCAL +L1TStage1Layer2Producer +L1TStage2BMTF +L1TStage2CaloLayer1 +L1TStage2CaloLayer2 +L1TStage2CaloLayer2DEClientSummary +L1TStage2CaloLayer2Offline +L1TStage2EMTF +L1TStage2Layer2Producer +L1TStage2MuonComp +L1TStage2OMTF +L1TStage2RatioClient +L1TStage2RegionalMuonCandComp +L1TStage2uGMT +L1TStage2uGMTMuon +L1TStage2uGT +L1TStage2uGTCaloLayer2Comp +L1TStage2uGTTiming +L1TSync_Offline +L1TTauOffline +L1TTestsSummary +L1TTwinMuxProducer +L1TTwinMuxRawToDigi +L1TdeCSCTF +L1TdeGCT +L1TdeRCT +L1TdeStage2CaloLayer1 +L1TdeStage2CaloLayer2 +L1TdeStage2EMTF +L1TdeStage2uGT +L1TkElectronTrackProducer +L1TkEmParticleProducer +L1TkFastVertexProducer +L1TkMuonProducer +L1TriggerResultsConverter +L1Validator +L2MuonCandidateProducer +L2MuonIsolationProducer +L2MuonProducer +L2MuonSeedGeneratorFromL1T +L2TauJetsMerger +L2TauPixelIsoTagProducer +L3MuonCandidateProducer +L3MuonCandidateProducerFromMuons +L3MuonCombinedRelativeIsolationProducer +L3MuonProducer +L3MuonTrajectorySeedCombiner +L3TrackCandCombiner +L3TrackCombiner +L3TrackLinksCombiner +L6SLBCorrectorProducer +LCToCPAssociatorEDProducer +LCToSCAssociatorEDProducer +LHCInfoProducer +LHECOMWeightProducer +LHETablesProducer +LSNumberFilter +LXXXCorrectorProducer +LargestEtCaloJetSelector +LargestEtPFJetSelector +LaserAlignmentEventFilter +LaserAlignmentT0Producer +LaserAlignmentT0ProducerDQM +LayerClusterAssociatorByEnergyScoreProducer +LepHTMonitor +LepInJetProducer +LeptonSkimming +LightPFTrackProducer +LogErrorEventFilter +LogErrorFilter +LogErrorHarvester +LogMessageMonitor +LowPtGSFToPackedCandidateLinker +LowPtGSFToTrackLinker +LowPtGsfElectronCoreProducer +LowPtGsfElectronFinalizer +LowPtGsfElectronIDProducer +LowPtGsfElectronSCProducer +LowPtGsfElectronSeedProducer +LowPtGsfElectronSeedValueMapsProducer +LumiMonitor +LumiProducer +MBUEandQCDValidation +MCMatcher +MCParticlePairFilter +MCSingleParticleFilter +MCSmartSingleParticleFilter +ME0DigiPreRecoProducer +ME0DigiProducer +ME0DigisValidation +ME0HitsValidation +ME0PadDigiProducer +ME0ReDigiProducer +ME0RecHitProducer +ME0RecHitsValidation +ME0SegmentProducer +ME0SegmentsValidation +ME0TriggerProducer +ME0TriggerPseudoProducer +METAnalyzer +METMonitor +METTester +METTesterPostProcessor +METTesterPostProcessorHarvesting +METplusTrackMonitor +MEtoEDMConverter +MLPFProducer +MTDClusterProducer +MTDRecHitProducer +MTDTrackQualityMVAProducer +MTDTrackingRecHitProducer +MTDUncalibratedRecHitProducer +MaskedMeasurementTrackerEventProducer +MeasurementTrackerEventProducer +MergedGenParticleProducer +MillePedeDQMModule +MillePedeFileConverter +MillePedeFileExtractor +MixCollectionValidation +MixEvtVtxGenerator +MixingModule +MkFitInputConverter +MkFitOutputConverter +MkFitProducer +ModifiedElectronProducer +ModifiedGsfElectronProducer +ModifiedPhotonProducer +MonitorTrackResiduals +MonoPhotonSkimmer +MtdGlobalRecoHarvester +MtdGlobalRecoValidation +MuIsoDepositCopyProducer +MuIsoDepositProducer +MuIsoValidation +MultShiftMETcorrInputProducer +Multi5x5ClusterProducer +Multi5x5SuperClusterProducer +MultiClustersFromTrackstersProducer +MultiHitFromChi2EDProducer +MultiTrackSelector +MultiTrackValidator +MuonAssociatorEDProducer +MuonBadTrackFilter +MuonBaseMVAValueMapProducer +MuonCountFilter +MuonDTDigis +MuonEnergyDepositAnalyzer +MuonFSRAssociator +MuonFSRProducer +MuonFromPVSelector +MuonGEMDigisHarvestor +MuonGEMHitsHarvestor +MuonGEMRecHitsHarvestor +MuonHLTEcalPFClusterIsolationProducer +MuonHLTHcalPFClusterIsolationProducer +MuonHLTRechitInRegionsProducer +MuonIDFilterProducerForHLT +MuonIdDQM +MuonIdProducer +MuonIdVal +MuonIsoValueMapProducer +MuonIsolationDQM +MuonJetVarProducer +MuonKinVsEtaAnalyzer +MuonLinksProducer +MuonLinksProducerForHLT +MuonME0DigisHarvestor +MuonME0SegHarvestor +MuonMET +MuonMETValueMapProducer +MuonMETcorrInputProducer +MuonMiniAOD +MuonMonitor +MuonPFAnalyzer +MuonProducer +MuonReSeeder +MuonRecoAnalyzer +MuonRecoOneHLT +MuonRecoTest +MuonReducedTrackExtraProducer +MuonRefPatCount +MuonRefSelector +MuonSeedGenerator +MuonSeedMerger +MuonSeedProducer +MuonSeedsAnalyzer +MuonSelectionTypeValueMapProducer +MuonSelector +MuonShowerInformationProducer +MuonSimClassifier +MuonSimHitProducer +MuonSimHitsValidAnalyzer +MuonTestSummary +MuonTimingProducer +MuonToTrackingParticleAssociatorEDProducer +MuonTrackProducer +MuonTrackResidualsTest +MuonTrackValidator +MuonTrackingRegionEDProducer +MuonViewRefSelector +NPUTablesProducer +NanoAODDQM +NanoAODSimpleCrossCleaner +NjettinessAdder +NoBPTXMonitor +NoiseRates +NoiseRatesClient +ObjMonitor +OffsetAnalyzerDQM +OffsetDQMPostProcessor +OmtfPacker +OmtfUnpacker +Onia2MuMuPAT +OniaAddV0TracksProducer +OniaPhotonConversionProducer +OnlineMetaDataRawToDigi +OscarMTProducer +OuterTrackerMCHarvester +OuterTrackerMonitorTTCluster +OuterTrackerMonitorTTStub +OuterTrackerMonitorTTTrack +OuterTrackerMonitorTrackingParticles +OutsideInMuonSeeder +PATElectronCollectionMerger +PATElectronProducer +PATElectronRefSelector +PATElectronSelector +PATElectronSlimmer +PATElectronUpdater +PATElectronUserDataEmbedder +PATGenJetSlimmer +PATGenericParticleProducer +PATGenericParticleSelector +PATIsolatedTrackProducer +PATJetCleaner +PATJetCleanerForType1MET +PATJetProducer +PATJetRefSelector +PATJetSelector +PATJetSlimmer +PATJetUpdater +PATJetUserDataEmbedder +PATLostTracks +PATMETProducer +PATMETSlimmer +PATMuonProducer +PATMuonRefSelector +PATMuonSelector +PATMuonSlimmer +PATMuonUpdater +PATMuonUserDataEmbedder +PATObjectCrossLinker +PATPFJetMETcorrInputProducer +PATPackedCandidateProducer +PATPackedGenParticleProducer +PATPhotonProducer +PATPhotonRefSelector +PATPhotonSelector +PATPhotonSlimmer +PATPhotonUserDataEmbedder +PATSecondaryVertexSlimmer +PATSingleVertexSelector +PATTauDiscriminantCutMultiplexer +PATTauDiscriminationAgainstElectronDeadECAL +PATTauDiscriminationAgainstElectronMVA6 +PATTauDiscriminationByMVAIsolationRun2 +PATTauIDEmbedder +PATTauProducer +PATTauRefSelector +PATTauSelector +PATTauSlimmer +PATTracksToPackedCandidates +PATTriggerObjectStandAloneSelector +PATTriggerObjectStandAloneSlimmer +PATTriggerObjectStandAloneUnpacker +PATTriggerProducer +PATVertexSlimmer +PCLMetadataWriter +PFBadHcalPseudoClusterProducer +PFBlockProducer +PFCandIsolatorFromDeposits +PFCandMETcorrInputProducer +PFCand_AssoMap +PFCandidateAnalyzerDQM +PFCandidateDQMAnalyzer +PFCandidateFromFwdPtrProducer +PFCandidateFwdPtrCollectionPdgIdFilter +PFCandidateFwdPtrCollectionStringFilter +PFCandidateFwdPtrProducer +PFCandidateListMerger +PFCandidatePrimaryVertexSorter +PFCandidateProductFromFwdPtrProducer +PFClient +PFClient_JetRes +PFClusterProducer +PFClusterProducerFromHGC3DClusters +PFClusterProducerFromL1EGClusters +PFClusterTimeAssigner +PFClusterValidation +PFConversionProducer +PFDisplacedTrackerVertexProducer +PFDisplacedVertexCandidateProducer +PFDisplacedVertexProducer +PFECALSuperClusterProducer +PFEGammaProducer +PFEGammaToCandidate +PFElecTkProducer +PFElectronTranslator +PFJetAnalyzerDQM +PFJetConstituentSelector +PFJetCorrectionProducer +PFJetDQMAnalyzer +PFJetDQMPostProcessor +PFJetFwdPtrProducer +PFJetMETcorrInputProducer +PFJetSelector +PFJetsMatchedToFilteredCaloJetsProducer +PFJetsTauOverlapRemoval +PFLinker +PFMETDQMAnalyzer +PFMETProducer +PFMultiDepthClusterProducer +PFMuonDQMAnalyzer +PFNuclearProducer +PFPhotonTranslator +PFPileUp +PFProducer +PFRecHitProducer +PFRecoTauChargedHadronProducer +PFRecoTauDiscriminationAgainstElectron +PFRecoTauDiscriminationAgainstElectronDeadECAL +PFRecoTauDiscriminationAgainstElectronMVA6 +PFRecoTauDiscriminationAgainstMuon +PFRecoTauDiscriminationAgainstMuon2 +PFRecoTauDiscriminationAgainstMuon2Container +PFRecoTauDiscriminationAgainstMuonMVA +PFRecoTauDiscriminationByHPSSelection +PFRecoTauDiscriminationByIsolation +PFRecoTauDiscriminationByIsolationContainer +PFRecoTauDiscriminationByLeadingObjectPtCut +PFRecoTauDiscriminationByMVAIsolationRun2 +PFRecoTauDiscriminationByNProngs +PFRecoTauTagInfoProducer +PFSimParticleProducer +PFTICLProducer +PFTauDiscriminatorLogicalAndProducer +PFTauFwdPtrProducer +PFTauPrimaryVertexProducer +PFTauSecondaryVertexProducer +PFTauSelector +PFTauTransverseImpactParameters +PFTrackProducer +PFTrackProducerFromL1Tracks +PFV0Producer +PPSFilteredProtonProducer +PPSSimTrackProducer +PackedCandidateMuonSelectorProducer +PackedCandidateTrackChi2Producer +PackedCandidateTrackValidator +PackedGenParticleSignalProducer +ParameterSetBlobProducer +ParticleBasedIsoProducer +ParticleFlowForChargedMETProducer +ParticleLevelProducer +ParticleTowerProducer +PartonSelector +PatJetIDValueMapProducer +PdgIdAndStatusCandViewSelector +PdgIdPFCandidateSelector +Phase1L1TJetCalibrator +Phase1L1TJetProducer +Phase2ITMonitorCluster +Phase2ITMonitorRecHit +Phase2ITValidateCluster +Phase2ITValidateRecHit +Phase2OTMonitorCluster +Phase2OTValidateCluster +Phase2TrackerClusterizer +Phase2TrackerMonitorDigi +Phase2TrackerValidateDigi +PhoIsoValueMapProducer +PhoVIDNestedWPBitmapProducer +PhotonAnalyzer +PhotonConversionTrajectorySeedProducerFromQuadruplets +PhotonConversionTrajectorySeedProducerFromSingleLeg +PhotonCoreProducer +PhotonDataCertification +PhotonEcalPFClusterIsolationProducer +PhotonHcalPFClusterIsolationProducer +PhotonIDProducer +PhotonIDValueMapProducer +PhotonMVAValueMapProducer +PhotonMonitor +PhotonOfflineClient +PhotonPostprocessing +PhotonProducer +PhotonRefSelector +PhotonSeedGainProducer +PhotonValidator +PhotonValidatorMiniAOD +PiZeroAnalyzer +PileupInformation +PileupJetIDVarProducer +PileupJetIdProducer +PileupSummaryInfoSlimmer +PixelClusterSelectorTopBottom +PixelClusterTagInfoProducer +PixelCountFilter +PixelFitterByConformalMappingAndLineProducer +PixelFitterByHelixProjectionsProducer +PixelInactiveAreaTrackingRegionsSeedingLayersProducer +PixelJetPuId +PixelTrackFilterByKinematicsProducer +PixelTrackProducer +PixelTripletHLTEDProducer +PixelTripletLargeTipEDProducer +PixelVertexCollectionTrimmer +PixelVertexProducer +PlotCombiner +PointSeededTrackingRegionsEDProducer +PreMixingModule +Prescaler +PrescalerFHN +PreshowerClusterProducer +PreshowerClusterShapeProducer +PreshowerPhiClusterProducer +PrimaryVertexAnalyzer4PUSlimmed +PrimaryVertexMonitor +PrimaryVertexObjectFilter +PrimaryVertexProducer +PrimaryVertexResolution +ProduceIsolationMap +ProtonProducer +PtMinGsfElectronCountFilter +PuppiProducer +PyquenGeneratorFilter +Pythia6GeneratorFilter +Pythia8ConcurrentHadronizerFilter +Pythia8EGun +Pythia8GeneratorFilter +Pythia8HadronizerFilter +Pythia8PtGun +PythiaDauVFilter +PythiaFilter +QGTagger +QcdPhotonsDQM +QualityTester +QuickTrackAssociatorByHitsProducer +RPCAMCRawToDigi +RPCChamberQuality +RPCDCSSummary +RPCDaqInfo +RPCDataCertification +RPCDcsInfoClient +RPCDigiProducer +RPCDigiValid +RPCDqmClient +RPCEventSummary +RPCFEDIntegrity +RPCMonitorDigi +RPCMonitorLinkSynchro +RPCMonitorRaw +RPCPackingModule +RPCRecHitProbability +RPCRecHitProbabilityClient +RPCRecHitProducer +RPCRecHitValid +RPCRecHitValidClient +RPCTechnicalTrigger +RPCTrigger +RPCTwinMuxRawToDigi +RPCUnpackingModule +RPCandIRPCDigiProducer +RPDigiProducer +RandomEngineStateProducer +RawDataCollectorByLabel +RawDataMapperByLabel +RawPCCProducer +RawTask +RazorMonitor +RctRawToDigi +RecHitTask +RecoChargedRefCandidatePrimaryVertexSorter +RecoJetDeltaRValueMapProducer +RecoMETExtractor +RecoMuonValidator +RecoSusyDQM +RecoTauCleaner +RecoTauDiscriminantCutMultiplexer +RecoTauJetRegionProducer +RecoTauPiZeroProducer +RecoTauPiZeroUnembedder +RecoTauPileUpVertexSelector +RecoTauProducer +RecoTrackRefSelector +RecoTrackSelector +RecoTrackViewRefSelector +ReduceHcalRecHitCollectionProducer +ReducedEGProducer +ReducedESRecHitCollectionProducer +ReducedRecHitCollectionProducer +ReggeGribovPartonMCGeneratorFilter +SETMuonSeedProducer +SMPDQM +SUSYDQMAnalyzer +SUSY_HLT_DiJet_MET +SUSY_HLT_DoubleEle_Hadronic +SUSY_HLT_DoubleMuon_Hadronic +SUSY_HLT_ElecFakes +SUSY_HLT_Electron_BJet +SUSY_HLT_InclusiveHT +SUSY_HLT_MuEle_Hadronic +SUSY_HLT_MuonFakes +SUSY_HLT_Muon_BJet +SUSY_HLT_Muon_Hadronic +SUSY_HLT_PhotonHT +SUSY_HLT_PhotonMET +SUSY_HLT_Razor +SUSY_HLT_SingleLepton +SUSY_HLT_VBF_Mu10 +SUSY_HLT_VBF_Mu8 +SUSY_HLT_alphaT +ScalersRawToDigi +SecondaryVertexProducer +SeedClusterRemover +SeedClusterRemoverPhase2 +SeedCombiner +SeedCreatorFromRegionConsecutiveHitsEDProducer +SeedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer +SeedGeneratorFromProtoTracksEDProducer +SeedGeneratorFromRegionHitsEDProducer +SeedToTrackProducer +SeedingLayersEDProducer +SeedingOTEDProducer +SegmentTrackAnalyzer +ShallowEventDataProducer +ShallowGainCalibration +ShallowTracksProducer +SherpaGeneratorFilter +ShiftedPATJetProducer +ShiftedParticleMETcorrInputProducer +ShiftedParticleProducer +SiPixelCertification +SiPixelClusterProducer +SiPixelClusterShapeCacheProducer +SiPixelClusterSource +SiPixelDaqInfo +SiPixelDcsInfo +SiPixelDigiErrorsFromSoA +SiPixelDigiErrorsSoAFromCUDA +SiPixelDigiSource +SiPixelDigiToRaw +SiPixelDigiValid +SiPixelDigisClustersFromSoA +SiPixelDigisSoAFromCUDA +SiPixelEDAClient +SiPixelHLTSource +SiPixelHitEfficiencySource +SiPixelMonitorTrackResiduals +SiPixelPhase1Clusters +SiPixelPhase1DeadFEDChannels +SiPixelPhase1Digis +SiPixelPhase1DigisHarvesterV +SiPixelPhase1DigisV +SiPixelPhase1Harvester +SiPixelPhase1HitsV +SiPixelPhase1RawData +SiPixelPhase1RecHits +SiPixelPhase1RecHitsV +SiPixelPhase1Summary +SiPixelPhase1TrackClusters +SiPixelPhase1TrackClustersV +SiPixelPhase1TrackEfficiency +SiPixelPhase1TrackResiduals +SiPixelPhase1TrackingParticleV +SiPixelRawDataErrorSource +SiPixelRawToClusterCUDA +SiPixelRawToDigi +SiPixelRecHitCUDA +SiPixelRecHitConverter +SiPixelRecHitFromCUDA +SiPixelRecHitSource +SiPixelRecHitsValid +SiPixelStatusHarvester +SiPixelStatusProducer +SiPixelTrackResidualSource +SiPixelTrackingRecHitsValid +SiStripBFieldFilter +SiStripBadComponentInfo +SiStripCertificationInfo +SiStripClusterizer +SiStripClusterizerFromRaw +SiStripDCSFilter +SiStripDaqInfo +SiStripDcsInfo +SiStripDigiToRawModule +SiStripDigiValid +SiStripExcludedFEDListProducer +SiStripFEDCheckPlugin +SiStripFEDMonitorPlugin +SiStripGainsPCLHarvester +SiStripGainsPCLWorker +SiStripMonitorCluster +SiStripMonitorCondData +SiStripMonitorDigi +SiStripMonitorTrack +SiStripOfflineDQM +SiStripQualityHotStripIdentifierRoot +SiStripQualityStatistics +SiStripRawToDigiModule +SiStripRecHitConverter +SiStripRecHitsValid +SiStripTrackingRecHitsValid +SiStripZeroSuppression +SimClusterAssociatorByEnergyScoreProducer +SimHitTPAssociationProducer +SimHitsValidationHcal +SimPFProducer +SimpleCandidateFlatTableProducer +SimpleCosmicBONSeeder +SimpleGenEventFlatTableProducer +SimpleHTXSFlatTableProducer +SimpleProtonTrackFlatTableProducer +SimpleXYZPointFlatTableProducer +SinglePhotonJetPlusHOFilter +SingleTopTChannelLeptonDQM +SingleTopTChannelLeptonDQM_miniAOD +SmearedPATJetProducer +SoftKillerProducer +SoftLepton +SoftPFElectronTagInfoProducer +SoftPFMuonTagInfoProducer +StandAloneMuonProducer +StripClusterSelectorTopBottom +SubEventGenJetProducer +SuperClusterMerger +SuperClusterProducer +SuperClusterSelector +SusyPostProcessor +TICLLayerTileProducer +TICLPFValidation +TICLSeedingRegionProducer +TOFPIDProducer +TPPFCandidatesOnPFCandidates +TPPFJetsOnPFCandidates +TPPFTausOnPFJetsDeltaR +TPTask +TSGForOIFromL2 +TSGFromL2Muon +TTClusterAssociator_Phase2TrackerDigi_ +TTClusterBuilder_Phase2TrackerDigi_ +TTStubAssociator_Phase2TrackerDigi_ +TTStubBuilder_Phase2TrackerDigi_ +TTTrackAssociator_Phase2TrackerDigi_ +TTbarSpinCorrHepMCAnalyzer +TTbar_GenJetAnalyzer +TTbar_GenLepAnalyzer +TTbar_Kinematics +TagAndProbeBtagTriggerMonitor +Tau3MuMonitor +TauDQMFileLoader +TauDQMHistEffProducer +TauGenJetDecayModeSelector +TauGenJetProducer +TauJetSelectorForHLTTrackSeeding +TauRegionalPixelSeedTrackingRegionEDProducer +TauTagValidation +TauValElectronSelector +TauValJetViewCleaner +TauValPFJetSelector +TauValidation +TauValidationMiniAOD +TcdsRawToDigi +TevMuonProducer +TkAlCaRecoMonitor +TkConvValidator +TobTecFakesFilter +TopBottomClusterInfoProducer +TopDiLeptonOfflineDQM +TopMonitor +TopSingleLeptonDQM +TopSingleLeptonDQM_miniAOD +TotemDAQTriggerDQMSource +TotemRPClusterProducer +TotemRPDQMHarvester +TotemRPDQMSource +TotemRPLocalTrackFitter +TotemRPRecHitProducer +TotemRPUVPatternFinder +TotemTimingDQMSource +TotemTimingLocalTrackFitter +TotemTimingRecHitProducer +TotemTriggerRawToDigi +TotemVFATRawToDigi +TrackAssociatorByChi2Producer +TrackAssociatorByHitsProducer +TrackAssociatorByPositionProducer +TrackAssociatorEDProducer +TrackCandidateProducer +TrackClusterRemover +TrackClusterRemoverPhase2 +TrackCollectionFilterCloner +TrackCollectionMerger +TrackCountFilter +TrackCutClassifier +TrackDeepNNTagInfoProducer +TrackEfficiencyClient +TrackEfficiencyMonitor +TrackExtenderWithMTD +TrackExtrapolator +TrackFromPVSelector +TrackFromSeedProducer +TrackIPProducer +TrackListMerger +TrackMVAClassifierDetached +TrackMVAClassifierPrompt +TrackProducer +TrackProducerWithSCAssociation +TrackRefitter +TrackSelector +TrackSplittingMonitor +TrackTfClassifier +TrackTimeValueMapProducer +TrackToTrackComparisonHists +TrackVertexArbitrator +TrackWithVertexRefSelector +TrackWithVertexSelector +TrackerHitAnalyzer +TrackerTrackHitFilter +TrackingCertificationInfo +TrackingDQMClientHeavyIons +TrackingFailureFilter +TrackingMonitor +TrackingOfflineDQM +TrackingParticleBHadronRefSelector +TrackingParticleConversionRefSelector +TrackingParticleNumberOfLayersProducer +TrackingParticleRefSelector +TrackingParticleSelector +TrackingRecHitProducer +TrackingRecoMaterialAnalyser +TrackingRegionsFromSuperClustersEDProducer +TrackingTruthValid +TrackstersMergeProducer +TrackstersProducer +TrajectorySeedFromMuonProducer +TrajectorySeedProducer +TriggerMatchEfficiencyPlotter +TriggerMatchMonitor +TriggerObjectTableProducer +TriggerResultsFilter +TriggerSummaryProducerAOD +TriggerSummaryProducerRAW +Type0PFMETcorrInputProducer +Type2CorrectionProducer +UnclusteredBlobProducer +UnifiedSCCollectionProducer +UniqueStringProducer +UpdatedMuonInnerTrackRef +V0Monitor +V0Producer +V0Validator +VectorHitBuilderEDProducer +VersionedGsfElectronIdProducer +VersionedPhotonIdProducer +VertexAssociatorByPositionAndTracksProducer +VertexCompositeCandidateCollectionSelector +VertexFromTrackProducer +VertexMerger +VertexSelector +VertexTableProducer +WValidation +ZCounting +ZElectronsSelectorAndSkim +ZToMuMuGammaAnalyzer +ZdcHitReconstructor +dEdxAnalyzer +dEdxHitAnalyzer +photonIsolationHIProducer +trackerDTC::ProducerED +trgMatchGsfElectronProducer diff --git a/Utilities/StaticAnalyzers/scripts/statics.py b/Utilities/StaticAnalyzers/scripts/statics.py index 2d40de8705445..cae735bb35632 100755 --- a/Utilities/StaticAnalyzers/scripts/statics.py +++ b/Utilities/StaticAnalyzers/scripts/statics.py @@ -40,7 +40,7 @@ for tfunc in sorted(toplevelfuncs): for static in sorted(statics): - if nx.has_path(G,tfunc,static): + if G.has_node(tfunc) and G.has_node(static) and nx.has_path(G,tfunc,static): path = nx.shortest_path(G,tfunc,static) print("Non-const static variable \'"+re.sub(farg,"()",static)+"' is accessed in call stack '", end=' ') diff --git a/Utilities/StaticAnalyzers/src/ESRecordGetChecker.cpp b/Utilities/StaticAnalyzers/src/ESRecordGetChecker.cpp index e43bf2724a814..abda911bd88c2 100644 --- a/Utilities/StaticAnalyzers/src/ESRecordGetChecker.cpp +++ b/Utilities/StaticAnalyzers/src/ESRecordGetChecker.cpp @@ -45,7 +45,7 @@ namespace clangcms { llvm::SmallString<100> buf; llvm::raw_svector_ostream os(buf); os << "function '"; - llvm::dyn_cast(D)->getNameForDiagnostic(os, Policy, true); + llvm::dyn_cast(D)->getNameForDiagnostic(os, Policy, true); os << "' "; os << "calls function '"; MD->getNameForDiagnostic(os, Policy, true); @@ -90,4 +90,16 @@ namespace clangcms { return; } + void ESRGetChecker::checkASTDecl(const FunctionDecl *FD, AnalysisManager &mgr, BugReporter &BR) const { + const SourceManager &SM = BR.getSourceManager(); + PathDiagnosticLocation DLoc = PathDiagnosticLocation::createBegin(FD, SM); + if (SM.isInSystemHeader(DLoc.asLocation()) || SM.isInExternCSystemHeader(DLoc.asLocation())) + return; + if (!FD->doesThisDeclarationHaveABody()) + return; + ESRWalker walker(this, BR, mgr.getAnalysisDeclContext(FD)); + walker.Visit(FD->getBody()); + return; + } + } // namespace clangcms diff --git a/Utilities/StaticAnalyzers/src/ESRecordGetChecker.h b/Utilities/StaticAnalyzers/src/ESRecordGetChecker.h index 112b5ec0511f2..4a19d8aca1456 100644 --- a/Utilities/StaticAnalyzers/src/ESRecordGetChecker.h +++ b/Utilities/StaticAnalyzers/src/ESRecordGetChecker.h @@ -21,7 +21,8 @@ namespace clangcms { class ESRGetChecker : public clang::ento::Checker, - clang::ento::check::ASTDecl > { + clang::ento::check::ASTDecl, + clang::ento::check::ASTDecl > { public: void checkASTDecl(const clang::CXXMethodDecl *CMD, clang::ento::AnalysisManager &mgr, @@ -31,6 +32,10 @@ namespace clangcms { clang::ento::AnalysisManager &mgr, clang::ento::BugReporter &BR) const; + void checkASTDecl(const clang::FunctionDecl *CMD, + clang::ento::AnalysisManager &mgr, + clang::ento::BugReporter &BR) const; + private: CmsException m_exception; }; diff --git a/Validation/CSCRecHits/src/CSCRecHit2DValidation.h b/Validation/CSCRecHits/interface/CSCRecHit2DValidation.h similarity index 76% rename from Validation/CSCRecHits/src/CSCRecHit2DValidation.h rename to Validation/CSCRecHits/interface/CSCRecHit2DValidation.h index 237a605109930..779bb58cd7f51 100644 --- a/Validation/CSCRecHits/src/CSCRecHit2DValidation.h +++ b/Validation/CSCRecHits/interface/CSCRecHit2DValidation.h @@ -1,22 +1,20 @@ -#ifndef CSCRecHit2DValidation_h -#define CSCRecHit2DValidation_h +#ifndef Validation_CSCRecHits_CSCRecHit2DValidation_h +#define Validation_CSCRecHits_CSCRecHit2DValidation_h -#include "DQMServices/Core/interface/DQMStore.h" -#include "DataFormats/CSCRecHit/interface/CSCRecHit2D.h" +#include "Validation/MuonCSCDigis/interface/CSCBaseValidation.h" #include "DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h" #include "FWCore/Framework/interface/ConsumesCollector.h" -#include "Geometry/CSCGeometry/interface/CSCLayer.h" -#include "Validation/MuonCSCDigis/interface/CSCBaseValidation.h" class CSCRecHit2DValidation : public CSCBaseValidation { public: - CSCRecHit2DValidation(const edm::InputTag &inputTag, edm::ConsumesCollector &&iC); + CSCRecHit2DValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC); ~CSCRecHit2DValidation() override; void bookHistograms(DQMStore::IBooker &); void analyze(const edm::Event &, const edm::EventSetup &) override; private: edm::EDGetTokenT rechits_Token_; + edm::InputTag inputTag_; void plotResolution(const PSimHit &simHit, const CSCRecHit2D &recHit, const CSCLayer *layer, int chamberType); diff --git a/Validation/CSCRecHits/interface/CSCRecHitMatcher.h b/Validation/CSCRecHits/interface/CSCRecHitMatcher.h new file mode 100644 index 0000000000000..02b7e040d8c14 --- /dev/null +++ b/Validation/CSCRecHits/interface/CSCRecHitMatcher.h @@ -0,0 +1,113 @@ +#ifndef Validation_CSCRecHits_CSCRecHitMatcher_h +#define Validation_CSCRecHits_CSCRecHitMatcher_h + +/**\class DigiMatcher + + Description: Matching of rechits and segments for SimTrack in CSC + + Author: Sven Dildick +*/ + +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "SimDataFormats/Track/interface/SimTrackContainer.h" +#include "SimDataFormats/Vertex/interface/SimVertexContainer.h" +#include "Validation/MuonCSCDigis/interface/CSCDigiMatcher.h" +#include "DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h" +#include "DataFormats/CSCRecHit/interface/CSCSegmentCollection.h" + +#include +#include +#include + +typedef std::vector CSCRecHit2DContainer; +typedef std::vector CSCSegmentContainer; + +class CSCRecHitMatcher { +public: + // constructor + CSCRecHitMatcher(edm::ParameterSet const& iPS, edm::ConsumesCollector&& iC); + + // destructor + ~CSCRecHitMatcher() {} + + // initialize the event + void init(const edm::Event& e, const edm::EventSetup& eventSetup); + + // do the matching + void match(const SimTrack& t, const SimVertex& v); + + // layer detIds with CSCRecHit2D + std::set layerIdsCSCRecHit2D() const; + // chamber detIds with CSCRecHit2D + std::set chamberIdsCSCRecHit2D() const; + // chamber detIds with CSCSegment + std::set chamberIdsCSCSegment() const; + + //CSC rechits from a particular layer or chamber + const CSCRecHit2DContainer& cscRecHit2DsInLayer(unsigned int) const; + const CSCRecHit2DContainer& cscRecHit2DsInChamber(unsigned int) const; + //CSC segments from a particular chamber + const CSCSegmentContainer& cscSegmentsInChamber(unsigned int) const; + + const CSCSegmentContainer cscSegments() const; + const CSCRecHit2DContainer cscRecHit2Ds() const; + + // check if a certain rechit appears in a container + bool cscRecHit2DInContainer(const CSCRecHit2D&, const CSCRecHit2DContainer&) const; + bool cscSegmentInContainer(const CSCSegment&, const CSCSegmentContainer&) const; + + // check if a certain rechit was matched to a simtrack + bool isCSCRecHit2DMatched(const CSCRecHit2D&) const; + bool isCSCSegmentMatched(const CSCSegment&) const; + + int nCSCRecHit2Ds() const; + int nCSCSegments() const; + bool areCSCSegmentsSame(const CSCSegment&, const CSCSegment&) const; + bool areCSCRecHit2DsSame(const CSCRecHit2D&, const CSCRecHit2D&) const; + + int nCSCRecHit2DsInLayer(unsigned int) const; + int nCSCRecHit2DsInChamber(unsigned int) const; + int nCSCSegmentsInChamber(unsigned int) const; + + CSCSegment bestCSCSegment(unsigned int); + + GlobalPoint globalPoint(const CSCSegment&) const; + +private: + std::unique_ptr cscDigiMatcher_; + + edm::EDGetTokenT cscRecHit2DToken_; + edm::EDGetTokenT cscSegmentToken_; + + edm::Handle cscRecHit2DH_; + edm::Handle cscSegmentH_; + + edm::ESHandle csc_geom_; + const CSCGeometry* cscGeometry_; + + void matchCSCRecHit2DsToSimTrack(const CSCRecHit2DCollection&); + void matchCSCSegmentsToSimTrack(const CSCSegmentCollection&); + + int verboseCSCRecHit2D_; + int maxBXCSCRecHit2D_; + int minBXCSCRecHit2D_; + + int verboseCSCSegment_; + int maxBXCSCSegment_; + int minBXCSCSegment_; + + std::map layer_to_cscRecHit2D_; + std::map chamber_to_cscRecHit2D_; + std::map chamber_to_cscSegment_; + + CSCRecHit2DContainer no_cscRecHit2Ds_; + CSCSegmentContainer no_cscSegments_; +}; + +#endif diff --git a/Validation/CSCRecHits/src/CSCSegmentValidation.h b/Validation/CSCRecHits/interface/CSCSegmentValidation.h similarity index 80% rename from Validation/CSCRecHits/src/CSCSegmentValidation.h rename to Validation/CSCRecHits/interface/CSCSegmentValidation.h index b47179ed0e3f5..bce60f60862ce 100644 --- a/Validation/CSCRecHits/src/CSCSegmentValidation.h +++ b/Validation/CSCRecHits/interface/CSCSegmentValidation.h @@ -1,16 +1,13 @@ -#ifndef CSCSegmentValidation_h -#define CSCSegmentValidation_h +#ifndef Validation_CSCRecHits_CSCSegmentValidation_h +#define Validation_CSCRecHits_CSCSegmentValidation_h -#include "DQMServices/Core/interface/DQMStore.h" -#include "DataFormats/CSCRecHit/interface/CSCSegment.h" +#include "Validation/MuonCSCDigis/interface/CSCBaseValidation.h" #include "DataFormats/CSCRecHit/interface/CSCSegmentCollection.h" #include "FWCore/Framework/interface/ConsumesCollector.h" -#include "Geometry/CSCGeometry/interface/CSCLayer.h" -#include "Validation/MuonCSCDigis/interface/CSCBaseValidation.h" class CSCSegmentValidation : public CSCBaseValidation { public: - CSCSegmentValidation(const edm::InputTag &inputTag, edm::ConsumesCollector &&iC); + CSCSegmentValidation(const edm::ParameterSet &, edm::ConsumesCollector &&iC); ~CSCSegmentValidation() override; void bookHistograms(DQMStore::IBooker &); void analyze(const edm::Event &, const edm::EventSetup &) override; @@ -19,12 +16,13 @@ class CSCSegmentValidation : public CSCBaseValidation { void plotResolution(const PSimHit &simHit, const CSCSegment &recHit, const CSCLayer *layer, int chamberType); bool hasSegment(int chamberId) const; - static int whatChamberType(int detId); edm::EDGetTokenT segments_Token_; + edm::InputTag inputTag_; - // map to count how many layers are hit. First index is chamber detId, second - // is layers that have hits + // map to count how many layers are hit. + // First index is chamber detId + // second is layers that have hits typedef std::map> ChamberHitMap; ChamberHitMap theLayerHitsPerChamber; void fillLayerHitsPerChamber(); @@ -43,7 +41,6 @@ class CSCSegmentValidation : public CSCBaseValidation { MonitorElement *theRdPhiResolutionPlots[10]; MonitorElement *theRdPhiPullPlots[10]; MonitorElement *theThetaResolutionPlots[10]; - MonitorElement *theThetaPullPlots[10]; MonitorElement *thedXdZResolutionPlots[10]; MonitorElement *thedXdZPullPlots[10]; MonitorElement *thedYdZResolutionPlots[10]; diff --git a/Validation/CSCRecHits/plugins/BuildFile.xml b/Validation/CSCRecHits/plugins/BuildFile.xml index ec37ee52a2274..2f0452a063f9d 100644 --- a/Validation/CSCRecHits/plugins/BuildFile.xml +++ b/Validation/CSCRecHits/plugins/BuildFile.xml @@ -1,4 +1,4 @@ - + diff --git a/Validation/CSCRecHits/plugins/CSCRecHitValidation.cc b/Validation/CSCRecHits/plugins/CSCRecHitValidation.cc new file mode 100644 index 0000000000000..dfb64c9702816 --- /dev/null +++ b/Validation/CSCRecHits/plugins/CSCRecHitValidation.cc @@ -0,0 +1,62 @@ +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/PluginManager/interface/ModuleDef.h" +#include "DQMServices/Core/interface/DQMEDAnalyzer.h" +#include "SimMuon/MCTruth/interface/PSimHitMap.h" +#include "Geometry/CSCGeometry/interface/CSCGeometry.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" +#include "Validation/CSCRecHits/interface/CSCRecHit2DValidation.h" +#include "Validation/CSCRecHits/interface/CSCSegmentValidation.h" + +class CSCRecHitValidation : public DQMEDAnalyzer { +public: + explicit CSCRecHitValidation(const edm::ParameterSet &); + ~CSCRecHitValidation() override{}; + void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override; + void analyze(const edm::Event &, const edm::EventSetup &) override; + +private: + PSimHitMap theSimHitMap; + edm::ESGetToken geomToken_; + + std::unique_ptr the2DValidation; + std::unique_ptr theSegmentValidation; +}; + +DEFINE_FWK_MODULE(CSCRecHitValidation); + +CSCRecHitValidation::CSCRecHitValidation(const edm::ParameterSet &ps) + : theSimHitMap(ps.getParameter("simHitsTag"), consumesCollector()), + the2DValidation(nullptr), + theSegmentValidation(nullptr) { + the2DValidation = std::make_unique(ps, consumesCollector()); + theSegmentValidation = std::make_unique(ps, consumesCollector()); + geomToken_ = esConsumes(); +} + +void CSCRecHitValidation::bookHistograms(DQMStore::IBooker &iBooker, edm::Run const &iRun, edm::EventSetup const &) { + iBooker.setCurrentFolder("CSCRecHitsV/CSCRecHitTask"); + + the2DValidation->bookHistograms(iBooker); + theSegmentValidation->bookHistograms(iBooker); +} + +void CSCRecHitValidation::analyze(const edm::Event &e, const edm::EventSetup &eventSetup) { + theSimHitMap.fill(e); + + // find the geometry & conditions for this event + const CSCGeometry *theCSCGeometry = &eventSetup.getData(geomToken_); + + the2DValidation->setGeometry(theCSCGeometry); + the2DValidation->setSimHitMap(&theSimHitMap); + + theSegmentValidation->setGeometry(theCSCGeometry); + theSegmentValidation->setSimHitMap(&theSimHitMap); + + the2DValidation->analyze(e, eventSetup); + theSegmentValidation->analyze(e, eventSetup); +} diff --git a/Validation/CSCRecHits/plugins/Module.cc b/Validation/CSCRecHits/plugins/Module.cc deleted file mode 100644 index ae27c4a347b2d..0000000000000 --- a/Validation/CSCRecHits/plugins/Module.cc +++ /dev/null @@ -1,5 +0,0 @@ -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/PluginManager/interface/ModuleDef.h" -#include "Validation/CSCRecHits/src/CSCRecHitValidation.h" - -DEFINE_FWK_MODULE(CSCRecHitValidation); diff --git a/Validation/CSCRecHits/python/cscRecHitPSet.py b/Validation/CSCRecHits/python/cscRecHitPSet.py new file mode 100644 index 0000000000000..49b09f900afac --- /dev/null +++ b/Validation/CSCRecHits/python/cscRecHitPSet.py @@ -0,0 +1,16 @@ +import FWCore.ParameterSet.Config as cms + +cscRecHitPSet = cms.PSet( + cscRecHit = cms.PSet( + verbose = cms.int32(0), + inputTag = cms.InputTag("csc2DRecHits"), + minBX = cms.int32(-1), + maxBX = cms.int32(1), + ), + cscSegment = cms.PSet( + verbose = cms.int32(0), + inputTag = cms.InputTag("cscSegments"), + minBX = cms.int32(-1), + maxBX = cms.int32(1), + ) +) diff --git a/Validation/CSCRecHits/python/cscRecHitValidation_cfi.py b/Validation/CSCRecHits/python/cscRecHitValidation_cfi.py index 371247ff561f9..acea77f68c9d4 100644 --- a/Validation/CSCRecHits/python/cscRecHitValidation_cfi.py +++ b/Validation/CSCRecHits/python/cscRecHitValidation_cfi.py @@ -1,11 +1,17 @@ import FWCore.ParameterSet.Config as cms +from Validation.CSCRecHits.cscRecHitPSet import * from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer -cscRecHitValidation = DQMEDAnalyzer('CSCRecHitValidation', - simHitsTag = cms.InputTag("mix","g4SimHitsMuonCSCHits"), - outputFile = cms.string('CSCRecHitValidation.root'), - recHitLabel = cms.InputTag("csc2DRecHits"), - segmentLabel = cms.InputTag("cscSegments") +cscRecHitValidation = DQMEDAnalyzer( + 'CSCRecHitValidation', + cscRecHitPSet, + doSim = cms.bool(True), + useGEMs = cms.bool(False), + simHitsTag = cms.InputTag("mix","g4SimHitsMuonCSCHits") ) +from Configuration.Eras.Modifier_run3_GEM_cff import run3_GEM +run3_GEM.toModify(cscRecHitValidation, useGEMs = True) +from Configuration.Eras.Modifier_fastSim_cff import fastSim +fastSim.toModify(cscRecHitValidation, simHitsTag = "mix:MuonSimHitsMuonCSCHits") diff --git a/Validation/CSCRecHits/src/CSCRecHit2DValidation.cc b/Validation/CSCRecHits/src/CSCRecHit2DValidation.cc index 2a8d4c046e11a..66eba6461e59f 100644 --- a/Validation/CSCRecHits/src/CSCRecHit2DValidation.cc +++ b/Validation/CSCRecHits/src/CSCRecHit2DValidation.cc @@ -1,44 +1,43 @@ #include "DQMServices/Core/interface/DQMStore.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "Validation/CSCRecHits/src/CSCRecHit2DValidation.h" +#include "Validation/CSCRecHits/interface/CSCRecHit2DValidation.h" -CSCRecHit2DValidation::CSCRecHit2DValidation(const edm::InputTag &inputTag, edm::ConsumesCollector &&iC) - : CSCBaseValidation(inputTag), theNPerEventPlot(nullptr) { - rechits_Token_ = iC.consumes(inputTag); +CSCRecHit2DValidation::CSCRecHit2DValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC) + : CSCBaseValidation(ps), theNPerEventPlot(nullptr) { + const auto &pset = ps.getParameterSet("cscRecHit"); + inputTag_ = pset.getParameter("inputTag"); + rechits_Token_ = iC.consumes(inputTag_); } -CSCRecHit2DValidation::~CSCRecHit2DValidation() { - for (int i = 0; i < 10; ++i) { - edm::LogInfo("CSCRecHitValidation") << "Resolution of " << theResolutionPlots[i]->getName() << " is " - << theResolutionPlots[i]->getRMS(); - edm::LogInfo("CSCRecHitValidation") << "Peak Time is " << theTPeaks[i]->getMean(); - } -} +CSCRecHit2DValidation::~CSCRecHit2DValidation() {} void CSCRecHit2DValidation::bookHistograms(DQMStore::IBooker &iBooker) { theNPerEventPlot = iBooker.book1D("CSCRecHitsPerEvent", "Number of CSC Rec Hits per event", 100, 0, 500); - for (int i = 0; i < 10; ++i) { - char title1[200], title2[200], title3[200], title4[200], title5[200], title6[200], title7[200], title8[200], - title9[200]; - sprintf(title1, "CSCRecHitResolution%d", i + 1); - sprintf(title2, "CSCRecHitPull%d", i + 1); - sprintf(title3, "CSCRecHitYResolution%d", i + 1); - sprintf(title4, "CSCRecHitYPull%d", i + 1); - sprintf(title5, "CSCRecHitPosInStrip%d", i + 1); - sprintf(title6, "CSCSimHitPosInStrip%d", i + 1); - sprintf(title7, "CSCRecHit%d", i + 1); - sprintf(title8, "CSCSimHit%d", i + 1); - sprintf(title9, "CSCTPeak%d", i + 1); + // 10 chamber types, if you consider ME1/a and ME1/b separate + for (int i = 1; i <= 10; ++i) { + const std::string cn(CSCDetId::chamberName(i)); + const std::string t1("CSCRecHitResolution_" + cn); + const std::string t2("CSCRecHitPull_" + cn); + const std::string t3("CSCRecHitYResolution_" + cn); + + const std::string t4("CSCRecHitYPull_" + cn); + const std::string t5("CSCRecHitPosInStrip_" + cn); + const std::string t6("CSCSimHitPosInStrip_" + cn); - theResolutionPlots[i] = iBooker.book1D(title1, title1, 100, -0.2, 0.2); - thePullPlots[i] = iBooker.book1D(title2, title2, 100, -3, 3); - theYResolutionPlots[i] = iBooker.book1D(title3, title3, 100, -5, 5); - theYPullPlots[i] = iBooker.book1D(title4, title4, 100, -3, 3); - theRecHitPosInStrip[i] = iBooker.book1D(title5, title5, 100, -2, 2); - theSimHitPosInStrip[i] = iBooker.book1D(title6, title6, 100, -2, 2); - theScatterPlots[i] = iBooker.book2D(title7, title7, 200, -20, 20, 200, -250, 250); - theSimHitScatterPlots[i] = iBooker.book2D(title8, title8, 200, -20, 20, 200, -250, 250); - theTPeaks[i] = iBooker.book1D(title9, title9, 200, 0, 400); + const std::string t7("CSCRecHit_" + cn); + const std::string t8("CSCSimHit_" + cn); + const std::string t9("CSCTPeak_" + cn); + + theResolutionPlots[i - 1] = iBooker.book1D(t1, t1 + ";R*dPhi Resolution [cm];Entries", 100, -0.2, 0.2); + thePullPlots[i - 1] = iBooker.book1D(t2, t2 + ";dPhi Pull;Entries", 100, -3, 3); + theYResolutionPlots[i - 1] = iBooker.book1D(t3, t3 + ";Local Y Resolution [cm];Entries", 100, -5, 5); + theYPullPlots[i - 1] = iBooker.book1D(t4, t4 + ";Local Y Pull;Entries", 100, -3, 3); + theRecHitPosInStrip[i - 1] = iBooker.book1D(t5, t5 + ";Position in Strip;Entries", 100, -2, 2); + theSimHitPosInStrip[i - 1] = iBooker.book1D(t6, t6 + ";Position in Strip;Entries", 100, -2, 2); + + theScatterPlots[i - 1] = iBooker.book2D(t7, t7 + ";Local Phi;Local Y [cm]", 200, -20, 20, 200, -250, 250); + theSimHitScatterPlots[i - 1] = iBooker.book2D(t8, t8 + ";Local Phi;Local Y [cm]", 200, -20, 20, 200, -250, 250); + theTPeaks[i - 1] = iBooker.book1D(t9, t9 + ";Peak Time [ns];Entries", 200, 0, 400); } } @@ -50,8 +49,7 @@ void CSCRecHit2DValidation::analyze(const edm::Event &e, const edm::EventSetup & unsigned nPerEvent = 0; - for (CSCRecHit2DCollection::const_iterator recHitItr = cscRecHits->begin(); recHitItr != cscRecHits->end(); - recHitItr++) { + for (auto recHitItr = cscRecHits->begin(); recHitItr != cscRecHits->end(); recHitItr++) { ++nPerEvent; int detId = (*recHitItr).cscDetId().rawId(); edm::PSimHitContainer simHits = theSimHitMap->hits(detId); @@ -63,32 +61,30 @@ void CSCRecHit2DValidation::analyze(const edm::Event &e, const edm::EventSetup & } float localX = recHitItr->localPosition().x(); float localY = recHitItr->localPosition().y(); - // theYPlots[chamberType-1]->Fill(localY); // find a local phi float globalR = layer->toGlobal(LocalPoint(0., 0., 0.)).perp(); GlobalPoint axisThruChamber(globalR + localY, localX, 0.); float localPhi = axisThruChamber.phi().degrees(); - // thePhiPlots[chamberType-1]->Fill(axisThruChamber.phi().degrees()); theScatterPlots[chamberType - 1]->Fill(localPhi, localY); } theNPerEventPlot->Fill(nPerEvent); - return; - // fill sim hits - std::vector layersWithSimHits = theSimHitMap->detsWithHits(); - for (unsigned i = 0; i < layersWithSimHits.size(); ++i) { - edm::PSimHitContainer simHits = theSimHitMap->hits(layersWithSimHits[i]); - for (edm::PSimHitContainer::const_iterator hitItr = simHits.begin(); hitItr != simHits.end(); ++hitItr) { - const CSCLayer *layer = findLayer(layersWithSimHits[i]); - int chamberType = layer->chamber()->specs()->chamberType(); - float localX = hitItr->localPosition().x(); - float localY = hitItr->localPosition().y(); - // theYPlots[chamberType-1]->Fill(localY); - // find a local phi - float globalR = layer->toGlobal(LocalPoint(0., 0., 0.)).perp(); - GlobalPoint axisThruChamber(globalR + localY, localX, 0.); - float localPhi = axisThruChamber.phi().degrees(); - // thePhiPlots[chamberType-1]->Fill(axisThruChamber.phi().degrees()); - theSimHitScatterPlots[chamberType - 1]->Fill(localPhi, localY); + + if (doSim_) { + // fill sim hits + std::vector layersWithSimHits = theSimHitMap->detsWithHits(); + for (unsigned i = 0; i < layersWithSimHits.size(); ++i) { + edm::PSimHitContainer simHits = theSimHitMap->hits(layersWithSimHits[i]); + for (auto hitItr = simHits.begin(); hitItr != simHits.end(); ++hitItr) { + const CSCLayer *layer = findLayer(layersWithSimHits[i]); + int chamberType = layer->chamber()->specs()->chamberType(); + float localX = hitItr->localPosition().x(); + float localY = hitItr->localPosition().y(); + // find a local phi + float globalR = layer->toGlobal(LocalPoint(0., 0., 0.)).perp(); + GlobalPoint axisThruChamber(globalR + localY, localX, 0.); + float localPhi = axisThruChamber.phi().degrees(); + theSimHitScatterPlots[chamberType - 1]->Fill(localPhi, localY); + } } } } diff --git a/Validation/CSCRecHits/src/CSCRecHitMatcher.cc b/Validation/CSCRecHits/src/CSCRecHitMatcher.cc new file mode 100644 index 0000000000000..70f667851f1d4 --- /dev/null +++ b/Validation/CSCRecHits/src/CSCRecHitMatcher.cc @@ -0,0 +1,300 @@ +#include + +#include "Validation/CSCRecHits/interface/CSCRecHitMatcher.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" +#include "Geometry/CSCGeometry/interface/CSCGeometry.h" + +using namespace std; + +CSCRecHitMatcher::CSCRecHitMatcher(const edm::ParameterSet& pset, edm::ConsumesCollector&& iC) { + const auto& cscRecHit2D = pset.getParameter("cscRecHit"); + maxBXCSCRecHit2D_ = cscRecHit2D.getParameter("maxBX"); + minBXCSCRecHit2D_ = cscRecHit2D.getParameter("minBX"); + verboseCSCRecHit2D_ = cscRecHit2D.getParameter("verbose"); + + const auto& cscSegment = pset.getParameter("cscSegment"); + maxBXCSCSegment_ = cscSegment.getParameter("maxBX"); + minBXCSCSegment_ = cscSegment.getParameter("minBX"); + verboseCSCSegment_ = cscSegment.getParameter("verbose"); + + // make a new digi matcher + cscDigiMatcher_ = std::make_unique(pset, std::move(iC)); + + cscRecHit2DToken_ = iC.consumes(cscRecHit2D.getParameter("inputTag")); + cscSegmentToken_ = iC.consumes(cscSegment.getParameter("inputTag")); +} + +void CSCRecHitMatcher::init(const edm::Event& iEvent, const edm::EventSetup& iSetup) { + cscDigiMatcher_->init(iEvent, iSetup); + + iEvent.getByToken(cscRecHit2DToken_, cscRecHit2DH_); + iEvent.getByToken(cscSegmentToken_, cscSegmentH_); + + iSetup.get().get(csc_geom_); + if (csc_geom_.isValid()) { + cscGeometry_ = &*csc_geom_; + } else { + edm::LogWarning("CSCSimHitMatcher") << "+++ Info: CSC geometry is unavailable. +++\n"; + } +} + +/// do the matching +void CSCRecHitMatcher::match(const SimTrack& t, const SimVertex& v) { + // match digis first + cscDigiMatcher_->match(t, v); + + // get the rechit collection + const CSCRecHit2DCollection& cscRecHit2Ds = *cscRecHit2DH_.product(); + const CSCSegmentCollection& cscSegments = *cscSegmentH_.product(); + + // now match the rechits + matchCSCRecHit2DsToSimTrack(cscRecHit2Ds); + matchCSCSegmentsToSimTrack(cscSegments); +} + +void CSCRecHitMatcher::matchCSCRecHit2DsToSimTrack(const CSCRecHit2DCollection& rechits) { + if (verboseCSCRecHit2D_) + edm::LogInfo("CSCRecHitMatcher") << "Matching simtrack to CSC rechits"; + + // fetch all layerIds with digis + const auto& strip_ids = cscDigiMatcher_->detIdsStrip(); + const auto& wire_ids = cscDigiMatcher_->detIdsWire(); + + // merge the two collections + std::set layer_ids; + layer_ids.insert(strip_ids.begin(), strip_ids.end()); + layer_ids.insert(wire_ids.begin(), wire_ids.end()); + + if (verboseCSCRecHit2D_) + edm::LogInfo("CSCRecHitMatcher") << "Number of matched csc layer_ids " << layer_ids.size(); + + for (const auto& id : layer_ids) { + CSCDetId p_id(id); + + // print all the wires in the CSCChamber + const auto& hit_wg(cscDigiMatcher_->wiregroupsInDetId(id)); + if (verboseCSCRecHit2D_) { + edm::LogInfo("CSCRecHitMatcher") << "hit wg csc from simhit" << endl; + for (const auto& p : hit_wg) { + edm::LogInfo("CSCRecHitMatcher") << p; + } + } + + // print all the strips in the CSCChamber + const auto& hit_strips(cscDigiMatcher_->stripsInDetId(id)); + if (verboseCSCRecHit2D_) { + edm::LogInfo("CSCRecHitMatcher") << "hit strip csc from simhit" << endl; + for (const auto& p : hit_strips) { + edm::LogInfo("CSCRecHitMatcher") << p; + } + } + + // get the rechits + const auto& rechits_in_det = rechits.get(p_id); + for (auto d = rechits_in_det.first; d != rechits_in_det.second; ++d) { + if (verboseCSCRecHit2D_) + edm::LogInfo("CSCRecHitMatcher") << "rechit " << p_id << " " << *d; + + // does the wire number match? + const bool wireMatch(std::find(hit_wg.begin(), hit_wg.end(), d->hitWire()) != hit_wg.end()); + + // does the strip number match? + bool stripMatch(false); + for (size_t iS = 0; iS < d->nStrips(); ++iS) { + if (std::find(hit_strips.begin(), hit_strips.end(), d->channels(iS)) != hit_strips.end()) + stripMatch = true; + } + + // this rechit was matched to a matching simhit + if (wireMatch and stripMatch) { + if (verboseCSCRecHit2D_) + edm::LogInfo("CSCRecHitMatcher") << "\t...was matched!"; + layer_to_cscRecHit2D_[id].push_back(*d); + chamber_to_cscRecHit2D_[p_id.chamberId().rawId()].push_back(*d); + } + } + } +} + +void CSCRecHitMatcher::matchCSCSegmentsToSimTrack(const CSCSegmentCollection& cscSegments) { + if (verboseCSCSegment_) + edm::LogInfo("CSCRecHitMatcher") << "Matching simtrack to segments"; + // fetch all chamberIds with 2D rechits + + const auto& chamber_ids = chamberIdsCSCRecHit2D(); + if (verboseCSCSegment_) + edm::LogInfo("CSCRecHitMatcher") << "Number of matched csc segments " << chamber_ids.size(); + for (const auto& id : chamber_ids) { + CSCDetId p_id(id); + + // print all CSCRecHit2D in the CSCChamber + const auto& csc_rechits(cscRecHit2DsInChamber(id)); + if (verboseCSCSegment_) { + edm::LogInfo("CSCRecHitMatcher") << "hit csc rechits" << endl; + for (const auto& p : csc_rechits) { + edm::LogInfo("CSCRecHitMatcher") << p; + } + } + + // get the segments + const auto& segments_in_det = cscSegments.get(p_id); + for (auto d = segments_in_det.first; d != segments_in_det.second; ++d) { + if (verboseCSCSegment_) + edm::LogInfo("CSCRecHitMatcher") << "segment " << p_id << " " << *d << endl; + + //access the rechits + const auto& recHits(d->recHits()); + + int rechitsFound = 0; + if (verboseCSCSegment_) + edm::LogInfo("CSCRecHitMatcher") << recHits.size() << " csc rechits from segment " << endl; + for (const auto& rh : recHits) { + const CSCRecHit2D* cscrh(dynamic_cast(rh)); + if (isCSCRecHit2DMatched(*cscrh)) + ++rechitsFound; + } + if (rechitsFound == 0) + continue; + if (verboseCSCSegment_) { + edm::LogInfo("CSCRecHitMatcher") << "Found " << rechitsFound << " rechits out of " + << cscRecHit2DsInChamber(id).size(); + edm::LogInfo("CSCRecHitMatcher") << "\t...was matched!"; + } + chamber_to_cscSegment_[p_id.rawId()].push_back(*d); + } + } +} + +std::set CSCRecHitMatcher::layerIdsCSCRecHit2D() const { + std::set result; + for (const auto& p : layer_to_cscRecHit2D_) + result.insert(p.first); + return result; +} + +std::set CSCRecHitMatcher::chamberIdsCSCRecHit2D() const { + std::set result; + for (const auto& p : chamber_to_cscRecHit2D_) + result.insert(p.first); + return result; +} + +std::set CSCRecHitMatcher::chamberIdsCSCSegment() const { + std::set result; + for (const auto& p : chamber_to_cscSegment_) + result.insert(p.first); + return result; +} + +const CSCRecHit2DContainer& CSCRecHitMatcher::cscRecHit2DsInLayer(unsigned int detid) const { + if (layer_to_cscRecHit2D_.find(detid) == layer_to_cscRecHit2D_.end()) + return no_cscRecHit2Ds_; + return layer_to_cscRecHit2D_.at(detid); +} + +const CSCRecHit2DContainer& CSCRecHitMatcher::cscRecHit2DsInChamber(unsigned int detid) const { + if (chamber_to_cscRecHit2D_.find(detid) == chamber_to_cscRecHit2D_.end()) + return no_cscRecHit2Ds_; + return chamber_to_cscRecHit2D_.at(detid); +} + +const CSCSegmentContainer& CSCRecHitMatcher::cscSegmentsInChamber(unsigned int detid) const { + if (chamber_to_cscSegment_.find(detid) == chamber_to_cscSegment_.end()) + return no_cscSegments_; + return chamber_to_cscSegment_.at(detid); +} + +int CSCRecHitMatcher::nCSCRecHit2DsInLayer(unsigned int detid) const { return cscRecHit2DsInLayer(detid).size(); } + +int CSCRecHitMatcher::nCSCRecHit2DsInChamber(unsigned int detid) const { return cscRecHit2DsInChamber(detid).size(); } + +int CSCRecHitMatcher::nCSCSegmentsInChamber(unsigned int detid) const { return cscSegmentsInChamber(detid).size(); } + +const CSCRecHit2DContainer CSCRecHitMatcher::cscRecHit2Ds() const { + CSCRecHit2DContainer result; + for (const auto& id : chamberIdsCSCRecHit2D()) { + const auto& segmentsInChamber(cscRecHit2DsInChamber(id)); + result.insert(result.end(), segmentsInChamber.begin(), segmentsInChamber.end()); + } + return result; +} + +const CSCSegmentContainer CSCRecHitMatcher::cscSegments() const { + CSCSegmentContainer result; + for (const auto& id : chamberIdsCSCSegment()) { + const auto& segmentsInChamber(cscSegmentsInChamber(id)); + result.insert(result.end(), segmentsInChamber.begin(), segmentsInChamber.end()); + } + return result; +} + +bool CSCRecHitMatcher::cscRecHit2DInContainer(const CSCRecHit2D& sg, const CSCRecHit2DContainer& c) const { + bool isSame = false; + for (const auto& segment : c) + if (areCSCRecHit2DsSame(sg, segment)) + isSame = true; + return isSame; +} + +bool CSCRecHitMatcher::cscSegmentInContainer(const CSCSegment& sg, const CSCSegmentContainer& c) const { + bool isSame = false; + for (const auto& segment : c) + if (areCSCSegmentsSame(sg, segment)) + isSame = true; + return isSame; +} + +bool CSCRecHitMatcher::isCSCRecHit2DMatched(const CSCRecHit2D& thisSg) const { + return cscRecHit2DInContainer(thisSg, cscRecHit2Ds()); +} + +bool CSCRecHitMatcher::isCSCSegmentMatched(const CSCSegment& thisSg) const { + return cscSegmentInContainer(thisSg, cscSegments()); +} + +int CSCRecHitMatcher::nCSCRecHit2Ds() const { + int n = 0; + const auto& ids = chamberIdsCSCRecHit2D(); + for (const auto& id : ids) + n += cscRecHit2DsInChamber(id).size(); + return n; +} + +int CSCRecHitMatcher::nCSCSegments() const { + int n = 0; + const auto& ids = chamberIdsCSCSegment(); + for (const auto& id : ids) + n += cscSegmentsInChamber(id).size(); + return n; +} + +bool CSCRecHitMatcher::areCSCRecHit2DsSame(const CSCRecHit2D& l, const CSCRecHit2D& r) const { + return l.localPosition() == r.localPosition(); +} + +bool CSCRecHitMatcher::areCSCSegmentsSame(const CSCSegment& l, const CSCSegment& r) const { + return (l.localPosition() == r.localPosition() and l.localDirection() == r.localDirection()); +} + +CSCSegment CSCRecHitMatcher::bestCSCSegment(unsigned int id) { + CSCSegment emptySegment; + double chi2overNdf = 99; + int index = 0; + int foundIndex = -99; + + for (const auto& seg : chamber_to_cscSegment_[id]) { + double newChi2overNdf(seg.chi2() / seg.degreesOfFreedom()); + if (newChi2overNdf < chi2overNdf) { + chi2overNdf = newChi2overNdf; + foundIndex = index; + } + ++index; + } + if (foundIndex != -99) + return chamber_to_cscSegment_[id][foundIndex]; + return emptySegment; +} + +GlobalPoint CSCRecHitMatcher::globalPoint(const CSCSegment& c) const { + return cscGeometry_->idToDet(c.cscDetId())->surface().toGlobal(c.localPosition()); +} diff --git a/Validation/CSCRecHits/src/CSCRecHitValidation.cc b/Validation/CSCRecHits/src/CSCRecHitValidation.cc deleted file mode 100644 index 4cb4c6ddb316a..0000000000000 --- a/Validation/CSCRecHits/src/CSCRecHitValidation.cc +++ /dev/null @@ -1,42 +0,0 @@ -#include "DQMServices/Core/interface/DQMStore.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "Validation/CSCRecHits/src/CSCRecHitValidation.h" -#include "DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h" - -CSCRecHitValidation::CSCRecHitValidation(const edm::ParameterSet &ps) - : theSimHitMap(ps.getParameter("simHitsTag"), consumesCollector()), - the2DValidation(nullptr), - theSegmentValidation(nullptr) { - the2DValidation = new CSCRecHit2DValidation(ps.getParameter("recHitLabel"), consumesCollector()); - theSegmentValidation = new CSCSegmentValidation(ps.getParameter("segmentLabel"), consumesCollector()); - geomToken_ = esConsumes(); -} - -CSCRecHitValidation::~CSCRecHitValidation() { - delete the2DValidation; - delete theSegmentValidation; -} - -void CSCRecHitValidation::bookHistograms(DQMStore::IBooker &iBooker, edm::Run const &iRun, edm::EventSetup const &) { - iBooker.setCurrentFolder("CSCRecHitsV/CSCRecHitTask"); - - the2DValidation->bookHistograms(iBooker); - theSegmentValidation->bookHistograms(iBooker); -} - -void CSCRecHitValidation::analyze(const edm::Event &e, const edm::EventSetup &eventSetup) { - theSimHitMap.fill(e); - - // find the geometry & conditions for this event - const CSCGeometry *theCSCGeometry = &eventSetup.getData(geomToken_); - - the2DValidation->setGeometry(theCSCGeometry); - the2DValidation->setSimHitMap(&theSimHitMap); - - theSegmentValidation->setGeometry(theCSCGeometry); - theSegmentValidation->setSimHitMap(&theSimHitMap); - - the2DValidation->analyze(e, eventSetup); - theSegmentValidation->analyze(e, eventSetup); -} diff --git a/Validation/CSCRecHits/src/CSCRecHitValidation.h b/Validation/CSCRecHits/src/CSCRecHitValidation.h deleted file mode 100644 index 58697895d89c3..0000000000000 --- a/Validation/CSCRecHits/src/CSCRecHitValidation.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef CSCRecHitValidation_h -#define CSCRecHitValidation_h - -// user include files - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Utilities/interface/EDGetToken.h" - -#include "DQMServices/Core/interface/DQMEDAnalyzer.h" -#include "DQMServices/Core/interface/DQMStore.h" - -#include "Geometry/GEMGeometry/interface/GEMGeometry.h" -#include "Geometry/Records/interface/MuonGeometryRecord.h" -#include "SimMuon/MCTruth/interface/PSimHitMap.h" -#include "Validation/CSCRecHits/src/CSCRecHit2DValidation.h" -#include "Validation/CSCRecHits/src/CSCSegmentValidation.h" - -class CSCRecHitValidation : public DQMEDAnalyzer { -public: - explicit CSCRecHitValidation(const edm::ParameterSet &); - ~CSCRecHitValidation() override; - void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override; - void analyze(const edm::Event &, const edm::EventSetup &) override; - -private: - PSimHitMap theSimHitMap; - edm::ESGetToken geomToken_; - - CSCRecHit2DValidation *the2DValidation; - CSCSegmentValidation *theSegmentValidation; -}; - -#endif diff --git a/Validation/CSCRecHits/src/CSCSegmentValidation.cc b/Validation/CSCRecHits/src/CSCSegmentValidation.cc index ef204b107459c..18269dbd46f15 100644 --- a/Validation/CSCRecHits/src/CSCSegmentValidation.cc +++ b/Validation/CSCRecHits/src/CSCSegmentValidation.cc @@ -1,10 +1,12 @@ #include "DQMServices/Core/interface/DQMStore.h" -#include "Validation/CSCRecHits/src/CSCSegmentValidation.h" +#include "Validation/CSCRecHits/interface/CSCSegmentValidation.h" #include -CSCSegmentValidation::CSCSegmentValidation(const edm::InputTag &inputTag, edm::ConsumesCollector &&iC) - : CSCBaseValidation(inputTag), theLayerHitsPerChamber(), theChamberSegmentMap(), theShowerThreshold(10) { - segments_Token_ = iC.consumes(inputTag); +CSCSegmentValidation::CSCSegmentValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC) + : CSCBaseValidation(ps), theLayerHitsPerChamber(), theChamberSegmentMap(), theShowerThreshold(10) { + const auto &pset = ps.getParameterSet("cscSegment"); + inputTag_ = pset.getParameter("inputTag"); + segments_Token_ = iC.consumes(inputTag_); } CSCSegmentValidation::~CSCSegmentValidation() {} @@ -26,25 +28,25 @@ void CSCSegmentValidation::bookHistograms(DQMStore::IBooker &iBooker) { theTypePlot6HitsNoShowerSeg = iBooker.book1D("CSCSegments6HitsNoShowerSeg", "", 100, 0, 10); theTypePlot6HitsShower = iBooker.book1D("CSCSegments6HitsShower", "", 100, 0, 10); theTypePlot6HitsShowerSeg = iBooker.book1D("CSCSegments6HitsShowerSeg", "", 100, 0, 10); - for (int i = 0; i < 10; ++i) { - char title1[200], title2[200], title3[200], title4[200], title5[200], title6[200], title7[200], title8[200]; - sprintf(title1, "CSCSegmentRdPhiResolution%d", i + 1); - sprintf(title2, "CSCSegmentRdPhiPull%d", i + 1); - sprintf(title3, "CSCSegmentThetaResolution%d", i + 1); - sprintf(title4, "CSCSegmentThetaPull%d", i + 1); - sprintf(title5, "CSCSegmentdXdZResolution%d", i + 1); - sprintf(title6, "CSCSegmentdXdZPull%d", i + 1); - sprintf(title7, "CSCSegmentdYdZResolution%d", i + 1); - sprintf(title8, "CSCSegmentdYdZPull%d", i + 1); - - theRdPhiResolutionPlots[i] = iBooker.book1D(title1, title1, 100, -0.4, 0.4); - theRdPhiPullPlots[i] = iBooker.book1D(title2, title2, 100, -5, 5); - theThetaResolutionPlots[i] = iBooker.book1D(title3, title3, 100, -1, 1); - theThetaPullPlots[i] = iBooker.book1D(title4, title4, 100, -5, 5); - thedXdZResolutionPlots[i] = iBooker.book1D(title5, title5, 100, -1, 1); - thedXdZPullPlots[i] = iBooker.book1D(title6, title6, 100, -5, 5); - thedYdZResolutionPlots[i] = iBooker.book1D(title7, title7, 100, -1, 1); - thedYdZPullPlots[i] = iBooker.book1D(title8, title8, 100, -5, 5); + + for (int i = 1; i <= 10; ++i) { + const std::string cn(CSCDetId::chamberName(i)); + + const std::string t1("CSCSegmentRdPhiResolution_" + cn); + const std::string t2("CSCSegmentRdPhiPull_" + cn); + const std::string t3("CSCSegmentThetaResolution_" + cn); + const std::string t5("CSCSegmentdXdZResolution_" + cn); + const std::string t6("CSCSegmentdXdZPull_" + cn); + const std::string t7("CSCSegmentdYdZResolution_" + cn); + const std::string t8("CSCSegmentdYdZPull_" + cn); + + theRdPhiResolutionPlots[i - 1] = iBooker.book1D(t1, t1, 100, -0.4, 0.4); + theRdPhiPullPlots[i - 1] = iBooker.book1D(t2, t2, 100, -5, 5); + theThetaResolutionPlots[i - 1] = iBooker.book1D(t3, t3, 100, -1, 1); + thedXdZResolutionPlots[i - 1] = iBooker.book1D(t5, t5, 100, -1, 1); + thedXdZPullPlots[i - 1] = iBooker.book1D(t6, t6, 100, -5, 5); + thedYdZResolutionPlots[i - 1] = iBooker.book1D(t7, t7, 100, -1, 1); + thedYdZPullPlots[i - 1] = iBooker.book1D(t8, t8, 100, -5, 5); } } @@ -56,11 +58,10 @@ void CSCSegmentValidation::analyze(const edm::Event &e, const edm::EventSetup &e theChamberSegmentMap.clear(); unsigned nPerEvent = 0; - for (CSCSegmentCollection::const_iterator segmentItr = cscRecHits->begin(); segmentItr != cscRecHits->end(); - segmentItr++) { + for (auto segmentItr = cscRecHits->begin(); segmentItr != cscRecHits->end(); segmentItr++) { ++nPerEvent; int detId = segmentItr->geographicalId().rawId(); - int chamberType = whatChamberType(detId); + int chamberType = segmentItr->cscDetId().iChamberType(); theNRecHitsPlot->Fill(segmentItr->nRecHits()); theNPerChamberTypePlot->Fill(chamberType); @@ -82,14 +83,13 @@ void CSCSegmentValidation::analyze(const edm::Event &e, const edm::EventSetup &e void CSCSegmentValidation::fillEfficiencyPlots() { // now plot efficiency by looping over all chambers with hits - for (ChamberHitMap::const_iterator mapItr = theLayerHitsPerChamber.begin(), mapEnd = theLayerHitsPerChamber.end(); - mapItr != mapEnd; + for (auto mapItr = theLayerHitsPerChamber.begin(), mapEnd = theLayerHitsPerChamber.end(); mapItr != mapEnd; ++mapItr) { int chamberId = mapItr->first; int nHitsInChamber = mapItr->second.size(); bool isShower = (nHitsInChamber > theShowerThreshold); bool hasSeg = hasSegment(chamberId); - int chamberType = whatChamberType(chamberId); + int chamberType = CSCDetId(chamberId).iChamberType(); // find how many layers were hit in this chamber std::vector v = mapItr->second; std::sort(v.begin(), v.end()); @@ -145,11 +145,6 @@ bool CSCSegmentValidation::hasSegment(int chamberId) const { return (theChamberSegmentMap.find(chamberId) != theChamberSegmentMap.end()); } -int CSCSegmentValidation::whatChamberType(int detId) { - CSCDetId cscDetId(detId); - return CSCChamberSpecs::whatChamberType(cscDetId.station(), cscDetId.ring()); -} - void CSCSegmentValidation::plotResolution(const PSimHit &simHit, const CSCSegment &segment, const CSCLayer *layer, @@ -164,7 +159,6 @@ void CSCSegmentValidation::plotResolution(const PSimHit &simHit, double dtheta = segmentPos.theta() - simHitPos.theta(); double sigmax = sqrt(segment.localPositionError().xx()); - // double sigmay = sqrt(segment.localPositionError().yy()); double ddxdz = segmentDir.x() / segmentDir.z() - simHitDir.x() / simHitDir.z(); double ddydz = segmentDir.y() / segmentDir.z() - simHitDir.y() / simHitDir.z(); @@ -174,7 +168,6 @@ void CSCSegmentValidation::plotResolution(const PSimHit &simHit, theRdPhiResolutionPlots[chamberType - 1]->Fill(rdphi); theRdPhiPullPlots[chamberType - 1]->Fill(rdphi / sigmax); theThetaResolutionPlots[chamberType - 1]->Fill(dtheta); - // theThetaPullPlots[chamberType-1]->Fill( dy/sigmay ); thedXdZResolutionPlots[chamberType - 1]->Fill(ddxdz); thedXdZPullPlots[chamberType - 1]->Fill(ddxdz / sigmadxdz); @@ -185,9 +178,7 @@ void CSCSegmentValidation::plotResolution(const PSimHit &simHit, void CSCSegmentValidation::fillLayerHitsPerChamber() { theLayerHitsPerChamber.clear(); std::vector layersHit = theSimHitMap->detsWithHits(); - for (std::vector::const_iterator layerItr = layersHit.begin(), layersHitEnd = layersHit.end(); - layerItr != layersHitEnd; - ++layerItr) { + for (auto layerItr = layersHit.begin(), layersHitEnd = layersHit.end(); layerItr != layersHitEnd; ++layerItr) { CSCDetId layerId(*layerItr); CSCDetId chamberId = layerId.chamberId(); int nhits = theSimHitMap->hits(*layerItr).size(); @@ -198,19 +189,16 @@ void CSCSegmentValidation::fillLayerHitsPerChamber() { } } -namespace CSCSegmentValidationUtils { - bool SimHitPabsLessThan(const PSimHit &p1, const PSimHit &p2) { return p1.pabs() < p2.pabs(); } -} // namespace CSCSegmentValidationUtils - const PSimHit *CSCSegmentValidation::keyHit(int chamberId) const { + auto SimHitPabsLessThan = [](const PSimHit &p1, const PSimHit &p2) -> bool { return p1.pabs() < p2.pabs(); }; + const PSimHit *result = nullptr; int layerId = chamberId + 3; - const edm::PSimHitContainer &layerHits = theSimHitMap->hits(layerId); + const auto &layerHits = theSimHitMap->hits(layerId); if (!layerHits.empty()) { // pick the hit with maximum energy - edm::PSimHitContainer::const_iterator hitItr = - std::max_element(layerHits.begin(), layerHits.end(), CSCSegmentValidationUtils::SimHitPabsLessThan); + auto hitItr = std::max_element(layerHits.begin(), layerHits.end(), SimHitPabsLessThan); result = &(*hitItr); } return result; diff --git a/Validation/CSCRecHits/test/CSCOval.C b/Validation/CSCRecHits/test/CSCOval.C deleted file mode 100644 index a97075118fda7..0000000000000 --- a/Validation/CSCRecHits/test/CSCOval.C +++ /dev/null @@ -1,139 +0,0 @@ -#include -// comparison of digi histograms with reference ones. -// root -b -q hcaloval.C\(\"HB\"\) - just for PV comparison. -// root -b -q hcaloval.C\(\"HB\",\"gif\"\) - PV comparison and creation of gif for each histo -// root -b -q hcaloval.C\(\"HB\",\"ps\"\) - PV comparison and creation of ps file for each subdetector - -#include "TFile.h" -#include "TTree.h" -#include "TText.h" -#include "TStyle.h" -#include "TPostScript.h" -#include "TString.h" -#include "../../MuonCSCDigis/test/HistoCompare.C" - - -class CSCOval -{ -public: - CSCOval(); - - ~CSCOval(); - - void process(string name); - void plot3x3(string histName); - void plot(string histName); - void run(); - -private: - TFile * rfile; - TFile * sfile; - HistoCompare * theComp; - string theSuffix; - string theDirectory; -}; - - -CSCOval::CSCOval() -: rfile(0), - sfile(0), - theComp(0), - theSuffix(""), - theDirectory("DQMData/CSCDigiTask") -{ - gROOT->Reset(); - gStyle->SetOptFit(111); - string PathToRef = "../data/"; - string rfilename = PathToRef+ "cscRecHitValidation_ref.root"; - string sfilename = "cscRecHitValidation" + theSuffix + ".root"; - - delete gROOT->GetListOfFiles()->FindObject(rfilename.c_str()); - delete gROOT->GetListOfFiles()->FindObject(sfilename.c_str()); - - // TText* te = new TText(); - // te->SetTextSize(0.1); - rfile = new TFile(rfilename.c_str()); - sfile = new TFile(sfilename.c_str()); - rfile->cd(theDirectory.c_str()); - gDirectory->ls(); - - sfile->cd(theDirectory.c_str()); - gDirectory->ls(); - - gStyle->SetOptStat(111111); - - //gROOT->ProcessLine(".x HistoCompare.C"); - string drawhisto = "gif"; - if(drawhisto == "gif") - { - theComp = new HistoCompareGif("CSC", theSuffix); - } - else if(drawhisto == "ps") - { - theComp = new HistoComparePS("cscRecHitValidation.ps"); - } - else - { - HistoCompare * comp = new HistoCompare(); - theComp = new HistoCompare(); - } - run(); -} - -CSCOval::~CSCOval() -{ - delete theComp; -} - - -void CSCOval::process(string histname) -{ - TH1 * oldHist; - TH1 * newHist; - string tname = theDirectory + "/" + histname + ";1"; - cout << tname << endl; - rfile->GetObject(tname.c_str(), oldHist); - sfile->GetObject(tname.c_str(), newHist); - theComp->compare(oldHist, newHist); - //theComp->fits(oldHist, newHist); -} - - -void CSCOval::plot3x3(string histName) -{ - theComp->openPage(histName, 3, 3); - for(int i = 1; i <=9; ++i) - { - strstream hist; - hist << histName << i; - process(hist.str()); - } - theComp->closePage(); -} - - -void CSCOval::plot(string histName) -{ - theComp->openPage(histName); - process(histName); - theComp->closePage(); -} - - - -void CSCOval::run() -{ - plot("CSCPedestal"); - plot("CSCStripDigisPerLayer"); - plot("CSCStripDigisPerEvent"); - plot("CSCStripAmplitude"); - plot("CSCStrip4to5"); - plot("CSCStrip6to5"); - plot3x3("CSCStripDigiResolution"); - plot3x3("CSCWireDigiTimeType"); - plot3x3("CSCComparatorDigiTimeType"); - - plot3x3("CSCRecHitResolution"); -} - - diff --git a/Validation/CSCRecHits/test/cscRecHitValidation_cfg.py b/Validation/CSCRecHits/test/cscRecHitValidation_cfg.py deleted file mode 100644 index ef7ddcb3b4f32..0000000000000 --- a/Validation/CSCRecHits/test/cscRecHitValidation_cfg.py +++ /dev/null @@ -1,36 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("RecHitsValidation") -process.load("RecoLocalMuon.Configuration.RecoLocalMuon_cff") - -process.load("Validation.CSCRecHits.cscRecHitValidation_cfi") - -process.load("Validation.MuonCSCDigis.cscDigiValidation_cfi") - -process.load("SimMuon.CSCDigitizer.muonCSCDigis_cfi") - -process.load("SimGeneral.MixingModule.mixNoPU_cfi") - -process.load("Geometry.CSCGeometry.cscGeometry_cfi") - -process.load("MagneticField.Engine.volumeBasedMagneticField_cfi") - -process.load("Geometry.MuonNumbering.muonNumberingInitialization_cfi") - -process.load("Configuration.StandardSequences.Services_cff") - -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") - -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring('file:simevent.root') -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(2000) -) -process.p1 = cms.Path(process.mix*process.simMuonCSCDigis*process.cscDigiValidation*process.csc2DRecHits*process.cscSegments*process.cscRecHitValidation) -process.cscRecHitValidation.outputFile = 'cscRecHitValidation_ref.root' - - diff --git a/Validation/CSCRecHits/test/run.csh b/Validation/CSCRecHits/test/run.csh deleted file mode 100755 index 11134b841e10b..0000000000000 --- a/Validation/CSCRecHits/test/run.csh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/csh -v - -eval `scramv1 ru -csh` -set suffix = $1 -sed "s/ref/$suffix/g" cscRecHitValidation.cfg >! cscRecHitValidation{$suffix}.cfg - -cmsRun cscRecHitValidation{$suffix}.cfg - -#root -b -q CSCOval.C\(\"{$suffix}\",\"gif\"\) - diff --git a/Validation/CSCRecHits/test/runCSCRecHitValidation_cfg.py b/Validation/CSCRecHits/test/runCSCRecHitValidation_cfg.py new file mode 100644 index 0000000000000..3163f3c8621f0 --- /dev/null +++ b/Validation/CSCRecHits/test/runCSCRecHitValidation_cfg.py @@ -0,0 +1,55 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Run3_cff import Run3 +process = cms.Process('VALIDATION',Run3) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load("RecoLocalMuon.Configuration.RecoLocalMuon_cff") +process.load("Validation.CSCRecHits.cscRecHitValidation_cfi") +process.load('Configuration.StandardSequences.DQMSaverAtRunEnd_cff') +process.load('DQMOffline.Configuration.DQMOfflineMC_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(2000) +) + +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring('file:input.root') +) + +# Other statements +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') + +process.DQMoutput = cms.OutputModule("DQMRootOutputModule", + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('DQMIO'), + filterName = cms.untracked.string('') + ), + fileName = cms.untracked.string('file:step3_inDQM.root'), + outputCommands = process.DQMEventContent.outputCommands, + splitLevel = cms.untracked.int32(0) +) + +# Path and EndPath definitions +process.reco_step = cms.Path(process.csc2DRecHits*process.cscSegments) +process.validation_step = cms.Path(process.mix * process.cscRecHitValidation) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.DQMoutput_step = cms.EndPath(process.DQMoutput) + +# Schedule definition +process.schedule = cms.Schedule( + process.reco_step, + process.validation_step, + process.endjob_step, + process.DQMoutput_step +) diff --git a/Validation/CTPPS/alignment/2021.xml b/Validation/CTPPS/alignment/2021.xml new file mode 100644 index 0000000000000..a715768fe083b --- /dev/null +++ b/Validation/CTPPS/alignment/2021.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/Validation/CTPPS/plugins/CTPPSDirectProtonSimulation.cc b/Validation/CTPPS/plugins/CTPPSDirectProtonSimulation.cc index 061a5bb6e0904..fe7f9ccce70d9 100644 --- a/Validation/CTPPS/plugins/CTPPSDirectProtonSimulation.cc +++ b/Validation/CTPPS/plugins/CTPPSDirectProtonSimulation.cc @@ -13,6 +13,8 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/ESInputTag.h" +#include "FWCore/Utilities/interface/Exception.h" #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" #include "DataFormats/CTPPSDetId/interface/CTPPSDetId.h" @@ -34,10 +36,14 @@ #include "CondFormats/RunInfo/interface/LHCInfo.h" #include "CondFormats/DataRecord/interface/LHCInfoRcd.h" +#include "CondFormats/DataRecord/interface/PPSDirectSimulationDataRcd.h" +#include "CondFormats/PPSObjects/interface/PPSDirectSimulationData.h" + #include "Geometry/VeryForwardGeometryBuilder/interface/CTPPSGeometry.h" #include "Geometry/Records/interface/VeryForwardMisalignedGeometryRecord.h" #include "Geometry/VeryForwardRPTopology/interface/RPTopology.h" -#include "Geometry/VeryForwardGeometry/interface/CTPPSPixelTopology.h" +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" +#include "CondFormats/DataRecord/interface/PPSPixelTopologyRcd.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/Utilities/interface/RandomNumberGenerator.h" @@ -52,6 +58,8 @@ #include "TVectorD.h" #include "TF1.h" #include "TF2.h" +#include "TFile.h" +#include "CLHEP/Random/RandFlat.h" //---------------------------------------------------------------------------------------------------- @@ -70,6 +78,7 @@ class CTPPSDirectProtonSimulation : public edm::stream::EDProducer<> { const CTPPSGeometry &geometry, const LHCInfo &lhcInfo, const CTPPSBeamParameters &beamParameters, + const PPSPixelTopology &ppt, const LHCInterpolatedOpticalFunctionsSetCollection &opticalFunctions, CLHEP::HepRandomEngine *rndEngine, @@ -85,24 +94,39 @@ class CTPPSDirectProtonSimulation : public edm::stream::EDProducer<> { // ------------ config file parameters ------------ - /// input - std::string lhcInfoLabel_; - std::string opticsLabel_; + // conditions + edm::ESGetToken tokenLHCInfo_; + edm::ESGetToken tokenBeamParameters_; + edm::ESGetToken pixelTopologyToken_; + edm::ESGetToken tokenOpticalFunctions_; + edm::ESGetToken tokenGeometry_; + edm::ESGetToken tokenDirectSimuData_; + + edm::ESWatcher directSimuDataRcdWatcher_; + // input edm::EDGetTokenT hepMCToken_; - /// flags what output to be produced + // flags what output to be produced bool produceScoringPlaneHits_; bool produceRecHits_; - /// simulation parameters - bool checkApertures_; - + // settings of LHC aperture limitations (high xi) bool useEmpiricalApertures_; - //aperture parameters std::unique_ptr empiricalAperture45_; std::unique_ptr empiricalAperture56_; + // efficiency flags + bool useTrackingEfficiencyPerRP_; + bool useTimingEfficiencyPerRP_; + bool useTrackingEfficiencyPerPlane_; + bool useTimingEfficiencyPerPlane_; + + // efficiency maps + std::map> efficiencyMapsPerRP_; + std::map> efficiencyMapsPerPlane_; + + // other parameters bool produceHitsRelativeToBeam_; bool roundToPitch_; bool checkIsHit_; @@ -113,11 +137,10 @@ class CTPPSDirectProtonSimulation : public edm::stream::EDProducer<> { double pitchPixelsHor_; double pitchPixelsVer_; - std::unique_ptr timeResolutionDiamonds45_, - timeResolutionDiamonds56_; ///< x-dependent time resolution of diamonds (per rec hit) in ns - unsigned int verbosity_; + std::unique_ptr timeResolutionDiamonds45_, timeResolutionDiamonds56_; + // ------------ internal parameters ------------ /// internal variable: v position of strip 0, in mm @@ -127,18 +150,24 @@ class CTPPSDirectProtonSimulation : public edm::stream::EDProducer<> { //---------------------------------------------------------------------------------------------------- CTPPSDirectProtonSimulation::CTPPSDirectProtonSimulation(const edm::ParameterSet &iConfig) - : lhcInfoLabel_(iConfig.getParameter("lhcInfoLabel")), - opticsLabel_(iConfig.getParameter("opticsLabel")), + : tokenLHCInfo_(esConsumes(edm::ESInputTag{"", iConfig.getParameter("lhcInfoLabel")})), + tokenBeamParameters_(esConsumes()), + pixelTopologyToken_(esConsumes()), + tokenOpticalFunctions_(esConsumes(edm::ESInputTag{"", iConfig.getParameter("opticsLabel")})), + tokenGeometry_(esConsumes()), + tokenDirectSimuData_(esConsumes()), + hepMCToken_(consumes(iConfig.getParameter("hepMCTag"))), produceScoringPlaneHits_(iConfig.getParameter("produceScoringPlaneHits")), produceRecHits_(iConfig.getParameter("produceRecHits")), useEmpiricalApertures_(iConfig.getParameter("useEmpiricalApertures")), - empiricalAperture45_( - new TF2("empiricalAperture45", iConfig.getParameter("empiricalAperture45").c_str())), - empiricalAperture56_( - new TF2("empiricalAperture56", iConfig.getParameter("empiricalAperture56").c_str())), + + useTrackingEfficiencyPerRP_(iConfig.getParameter("useTrackingEfficiencyPerRP")), + useTimingEfficiencyPerRP_(iConfig.getParameter("useTimingEfficiencyPerRP")), + useTrackingEfficiencyPerPlane_(iConfig.getParameter("useTrackingEfficiencyPerPlane")), + useTimingEfficiencyPerPlane_(iConfig.getParameter("useTimingEfficiencyPerPlane")), produceHitsRelativeToBeam_(iConfig.getParameter("produceHitsRelativeToBeam")), roundToPitch_(iConfig.getParameter("roundToPitch")), @@ -150,11 +179,6 @@ CTPPSDirectProtonSimulation::CTPPSDirectProtonSimulation(const edm::ParameterSet pitchPixelsHor_(iConfig.getParameter("pitchPixelsHor")), pitchPixelsVer_(iConfig.getParameter("pitchPixelsVer")), - timeResolutionDiamonds45_( - new TF1("timeResolutionDiamonds45", iConfig.getParameter("timeResolutionDiamonds45").c_str())), - timeResolutionDiamonds56_( - new TF1("timeResolutionDiamonds56", iConfig.getParameter("timeResolutionDiamonds56").c_str())), - verbosity_(iConfig.getUntrackedParameter("verbosity", 0)) { if (produceScoringPlaneHits_) produces>(); @@ -169,6 +193,15 @@ CTPPSDirectProtonSimulation::CTPPSDirectProtonSimulation(const edm::ParameterSet produces>>(); } + // check user input + if (useTrackingEfficiencyPerRP_ && useTrackingEfficiencyPerPlane_) + throw cms::Exception("PPS") + << "useTrackingEfficiencyPerRP and useTrackingEfficiencyPerPlane should not be simultaneously set true."; + + if (useTimingEfficiencyPerRP_ && useTimingEfficiencyPerPlane_) + throw cms::Exception("PPS") + << "useTimingEfficiencyPerRP and useTimingEfficiencyPerPlane should not be simultaneously set true."; + // v position of strip 0 stripZeroPosition_ = RPTopology::last_strip_to_border_dist_ + (RPTopology::no_of_strips_ - 1) * RPTopology::pitch_ - RPTopology::y_width_ / 2.; @@ -182,16 +215,20 @@ void CTPPSDirectProtonSimulation::fillDescriptions(edm::ConfigurationDescription desc.add("lhcInfoLabel", "")->setComment("label of the LHCInfo record"); desc.add("opticsLabel", "")->setComment("label of the optics records"); + desc.add("hepMCTag", edm::InputTag("generator", "unsmeared")); desc.add("produceScoringPlaneHits", true); desc.add("produceRecHits", true); - desc.add("useEmpiricalApertures", false); - desc.add("empiricalAperture45", "0")->setComment("2D function of xi and xangle for cutoff on sec 45"); - desc.add("empiricalAperture56", "0")->setComment("2D function of xi and xangle for cutoff on sec 56"); + desc.add("useEmpiricalApertures", true); + + desc.add("useTrackingEfficiencyPerRP", false); + desc.add("useTimingEfficiencyPerRP", false); + desc.add("useTrackingEfficiencyPerPlane", false); + desc.add("useTimingEfficiencyPerPlane", false); - desc.add("produceHitsRelativeToBeam", false); + desc.add("produceHitsRelativeToBeam", true); desc.add("roundToPitch", true); desc.add("checkIsHit", true); desc.add("pitchStrips", 66.e-3); // in mm @@ -200,11 +237,6 @@ void CTPPSDirectProtonSimulation::fillDescriptions(edm::ConfigurationDescription desc.add("pitchPixelsHor", 100.e-3); desc.add("pitchPixelsVer", 150.e-3); - desc.add("timeResolutionDiamonds45", "0.200") - ->setComment("time resolution of single diamond sensor in sector 45, in ns"); - desc.add("timeResolutionDiamonds56", "0.200") - ->setComment("time resolution of single diamond sensor in sector 56, in ns"); - descriptions.add("ctppsDirectProtonSimulation", desc); } @@ -216,17 +248,30 @@ void CTPPSDirectProtonSimulation::produce(edm::Event &iEvent, const edm::EventSe iEvent.getByToken(hepMCToken_, hepmc_prod); // get conditions - edm::ESHandle hLHCInfo; - iSetup.get().get(lhcInfoLabel_, hLHCInfo); - - edm::ESHandle hBeamParameters; - iSetup.get().get(hBeamParameters); - - edm::ESHandle hOpticalFunctions; - iSetup.get().get(opticsLabel_, hOpticalFunctions); - - edm::ESHandle geometry; - iSetup.get().get(geometry); + auto const &lhcInfo = iSetup.getData(tokenLHCInfo_); + auto const &beamParameters = iSetup.getData(tokenBeamParameters_); + auto const &ppt = iSetup.getData(pixelTopologyToken_); + auto const &opticalFunctions = iSetup.getData(tokenOpticalFunctions_); + auto const &geometry = iSetup.getData(tokenGeometry_); + auto const &directSimuData = iSetup.getData(tokenDirectSimuData_); + + if (directSimuDataRcdWatcher_.check(iSetup)) { + timeResolutionDiamonds45_ = + std::make_unique(TF1("timeResolutionDiamonds45", directSimuData.getTimeResolutionDiamonds45().c_str())); + timeResolutionDiamonds56_ = + std::make_unique(TF1("timeResolutionDiamonds56", directSimuData.getTimeResolutionDiamonds56().c_str())); + + empiricalAperture45_ = + std::make_unique(TF2("empiricalAperture45", directSimuData.getEmpiricalAperture45().c_str())); + empiricalAperture56_ = + std::make_unique(TF2("empiricalAperture56", directSimuData.getEmpiricalAperture56().c_str())); + + // load the efficiency maps + if (useTrackingEfficiencyPerRP_ || useTimingEfficiencyPerRP_) + efficiencyMapsPerRP_ = directSimuData.loadEffeciencyHistogramsPerRP(); + if (useTrackingEfficiencyPerPlane_ || useTimingEfficiencyPerPlane_) + efficiencyMapsPerPlane_ = directSimuData.loadEffeciencyHistogramsPerPlane(); + } // prepare outputs std::unique_ptr> pStripRecHits(new edm::DetSetVector()); @@ -261,10 +306,11 @@ void CTPPSDirectProtonSimulation::produce(edm::Event &iEvent, const edm::EventSe processProton(vtx, part, - *geometry, - *hLHCInfo, - *hBeamParameters, - *hOpticalFunctions, + geometry, + lhcInfo, + beamParameters, + ppt, + opticalFunctions, engine, *pTracks, *pStripRecHits, @@ -298,6 +344,7 @@ void CTPPSDirectProtonSimulation::processProton( const CTPPSGeometry &geometry, const LHCInfo &lhcInfo, const CTPPSBeamParameters &beamParameters, + const PPSPixelTopology &ppt, const LHCInterpolatedOpticalFunctionsSetCollection &opticalFunctions, CLHEP::HepRandomEngine *rndEngine, std::vector &out_tracks, @@ -372,7 +419,7 @@ void CTPPSDirectProtonSimulation::processProton( if (th_x_th > th_x_phys) { if (verbosity_) { ssLog << "stop because of empirical appertures"; - edm::LogInfo("CTPPSDirectProtonSimulation") << ssLog.str(); + edm::LogInfo("PPS") << ssLog.str(); } return; @@ -420,6 +467,27 @@ void CTPPSDirectProtonSimulation::processProton( << " mm, b_y = " << b_y << " mm, z = " << z_scoringPlane << " mm" << std::endl; } + // RP type + const bool isTrackingRP = + (rpId.subdetId() == CTPPSDetId::sdTrackingStrip || rpId.subdetId() == CTPPSDetId::sdTrackingPixel); + const bool isTimingRP = (rpId.subdetId() == CTPPSDetId::sdTimingDiamond); + + // apply per-RP efficiency + if ((useTimingEfficiencyPerRP_ && isTimingRP) || (useTrackingEfficiencyPerRP_ && isTrackingRP)) { + const auto it = efficiencyMapsPerRP_.find(rpId); + + if (it != efficiencyMapsPerRP_.end()) { + const double r = CLHEP::RandFlat::shoot(rndEngine, 0., 1.); + auto *effMap = it->second.get(); + const double eff = effMap->GetBinContent(effMap->FindBin(b_x, b_y)); + if (r > eff) { + if (verbosity_) + ssLog << " stop due to per-RP efficiency" << std::endl; + continue; + } + } + } + // save scoring plane hit if (produceScoringPlaneHits_) out_tracks.emplace_back( @@ -439,9 +507,7 @@ void CTPPSDirectProtonSimulation::processProton( const auto &gl_a1 = geometry.localToGlobal(detId, CTPPSGeometry::Vector(1, 0, 0)) - gl_o; const auto &gl_a2 = geometry.localToGlobal(detId, CTPPSGeometry::Vector(0, 1, 0)) - gl_o; - double gl_o_z = gl_o.z(); - if (detId.subdetId() == CTPPSDetId::sdTimingDiamond) - gl_o_z = -gl_o_z; // fix bug in diamond geometry + const double gl_o_z = gl_o.z(); TMatrixD A(3, 3); TVectorD B(3); @@ -477,6 +543,22 @@ void CTPPSDirectProtonSimulation::processProton( << std::endl; } + // apply per-plane efficiency + if ((useTimingEfficiencyPerPlane_ && isTimingRP) || (useTrackingEfficiencyPerPlane_ && isTrackingRP)) { + const auto it = efficiencyMapsPerPlane_.find(detId); + + if (it != efficiencyMapsPerPlane_.end()) { + const double r = CLHEP::RandFlat::shoot(rndEngine, 0., 1.); + auto *effMap = it->second.get(); + const double eff = effMap->GetBinContent(effMap->FindBin(h_glo.x(), h_glo.y())); + if (r > eff) { + if (verbosity_) + ssLog << " stop due to per-plane efficiency" << std::endl; + continue; + } + } + } + // strips if (detId.subdetId() == CTPPSDetId::sdTrackingStrip) { double u = h_loc.x(); @@ -509,33 +591,32 @@ void CTPPSDirectProtonSimulation::processProton( ssLog << " | m=" << v << ", sigma=" << sigma << std::endl; edm::DetSet &hits = out_strip_hits.find_or_insert(detId); - hits.push_back(TotemRPRecHit(v, sigma)); + hits.emplace_back(v, sigma); edm::DetSet &hits_per_particle = out_strip_hits_per_particle[in_trk->barcode()].find_or_insert(detId); - hits_per_particle.push_back(TotemRPRecHit(v, sigma)); + hits_per_particle.emplace_back(v, sigma); } // diamonds if (detId.subdetId() == CTPPSDetId::sdTimingDiamond) { CTPPSDiamondDetId diamondDetId(detIdInt); + // check acceptance const auto *dg = geometry.sensor(detIdInt); - const auto &diamondDimensions = dg->getDiamondDimensions(); const auto x_half_width = diamondDimensions.xHalfWidth; const auto y_half_width = diamondDimensions.yHalfWidth; const auto z_half_width = diamondDimensions.zHalfWidth; - const double time_resolution = (diamondDetId.arm() == 0) ? timeResolutionDiamonds45_->Eval(h_glo.x()) - : timeResolutionDiamonds56_->Eval(h_glo.x()); - - // check acceptance if (h_loc.x() < -x_half_width || h_loc.x() > +x_half_width || h_loc.y() < -y_half_width || h_loc.y() > +y_half_width) continue; // timing information + const double time_resolution = (diamondDetId.arm() == 0) ? timeResolutionDiamonds45_->Eval(h_glo.x()) + : timeResolutionDiamonds56_->Eval(h_glo.x()); + const double t0 = time_eff + CLHEP::RandGauss::shoot(rndEngine, 0., time_resolution); const double tot = 1.23456; const double ch_t_precis = time_resolution; @@ -574,7 +655,7 @@ void CTPPSDirectProtonSimulation::processProton( } bool module3By2 = (geometry.sensor(detIdInt)->sensorType() != DDD_CTPPS_PIXELS_SENSOR_TYPE_2x2); - if (checkIsHit_ && !CTPPSPixelTopology::isPixelHit(h_loc.x(), h_loc.y(), module3By2)) + if (checkIsHit_ && !ppt.isPixelHit(h_loc.x(), h_loc.y(), module3By2)) continue; if (roundToPitch_) { @@ -592,19 +673,19 @@ void CTPPSDirectProtonSimulation::processProton( const LocalError le(sigmaHor, 0., sigmaVer); edm::DetSet &hits = out_pixel_hits.find_or_insert(detId); - hits.push_back(CTPPSPixelRecHit(lp, le)); + hits.emplace_back(lp, le); edm::DetSet &hits_per_particle = out_pixel_hits_per_particle[in_trk->barcode()].find_or_insert(detId); - hits_per_particle.push_back(CTPPSPixelRecHit(lp, le)); + hits_per_particle.emplace_back(lp, le); } } } if (verbosity_) - edm::LogInfo("CTPPSDirectProtonSimulation") << ssLog.str(); + edm::LogInfo("PPS") << ssLog.str(); } //---------------------------------------------------------------------------------------------------- -DEFINE_FWK_MODULE(CTPPSDirectProtonSimulation); \ No newline at end of file +DEFINE_FWK_MODULE(CTPPSDirectProtonSimulation); diff --git a/Validation/CTPPS/plugins/CTPPSHepMCDistributionPlotter.cc b/Validation/CTPPS/plugins/CTPPSHepMCDistributionPlotter.cc index 405d032648834..358c31f8f54e6 100644 --- a/Validation/CTPPS/plugins/CTPPSHepMCDistributionPlotter.cc +++ b/Validation/CTPPS/plugins/CTPPSHepMCDistributionPlotter.cc @@ -34,7 +34,7 @@ class CTPPSHepMCDistributionPlotter : public edm::one::EDAnalyzer<> { void endJob() override; edm::EDGetTokenT tokenHepMC_; - std::string lhcInfoLabel_; + edm::ESGetToken lhcInfoESToken_; std::string outputFile_; std::unique_ptr h_vtx_x_, h_vtx_y_, h_vtx_z_, h_vtx_t_; @@ -51,7 +51,7 @@ using namespace HepMC; CTPPSHepMCDistributionPlotter::CTPPSHepMCDistributionPlotter(const edm::ParameterSet &iConfig) : tokenHepMC_(consumes(iConfig.getParameter("tagHepMC"))), - lhcInfoLabel_(iConfig.getParameter("lhcInfoLabel")), + lhcInfoESToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoLabel")))), outputFile_(iConfig.getParameter("outputFile")), h_vtx_x_(new TH1D("h_vtx_x", ";vtx_x (mm)", 100, 0., 0.)), @@ -67,8 +67,7 @@ CTPPSHepMCDistributionPlotter::CTPPSHepMCDistributionPlotter(const edm::Paramete void CTPPSHepMCDistributionPlotter::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { // get conditions - edm::ESHandle hLHCInfo; - iSetup.get().get(lhcInfoLabel_, hLHCInfo); + const auto &lhcInfo = iSetup.getData(lhcInfoESToken_); // get input edm::Handle hHepMC; @@ -99,7 +98,7 @@ void CTPPSHepMCDistributionPlotter::analyze(const edm::Event &iEvent, const edm: continue; const auto &mom = part->momentum(); - const double p_nom = hLHCInfo->energy(); + const double p_nom = lhcInfo.energy(); if (mom.rho() / p_nom < 0.7) continue; diff --git a/Validation/CTPPS/plugins/CTPPSLHCInfoPlotter.cc b/Validation/CTPPS/plugins/CTPPSLHCInfoPlotter.cc index 30ea8d7eaf7a1..2ad499b7c6f36 100644 --- a/Validation/CTPPS/plugins/CTPPSLHCInfoPlotter.cc +++ b/Validation/CTPPS/plugins/CTPPSLHCInfoPlotter.cc @@ -30,7 +30,7 @@ class CTPPSLHCInfoPlotter : public edm::one::EDAnalyzer<> { void analyze(const edm::Event &, const edm::EventSetup &) override; void endJob() override; - std::string lhcInfoLabel_; + edm::ESGetToken lhcInfoESToken_; std::string outputFile_; @@ -51,7 +51,7 @@ using namespace edm; //---------------------------------------------------------------------------------------------------- CTPPSLHCInfoPlotter::CTPPSLHCInfoPlotter(const edm::ParameterSet &iConfig) - : lhcInfoLabel_(iConfig.getParameter("lhcInfoLabel")), + : lhcInfoESToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoLabel")))), outputFile_(iConfig.getParameter("outputFile")), h_beamEnergy_(new TH1D("h_beamEnergy", ";beam energy (GeV)", 81, -50., 8050.)), @@ -83,15 +83,14 @@ void CTPPSLHCInfoPlotter::fillDescriptions(edm::ConfigurationDescriptions &descr //---------------------------------------------------------------------------------------------------- void CTPPSLHCInfoPlotter::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { - edm::ESHandle hLHCInfo; - iSetup.get().get(lhcInfoLabel_, hLHCInfo); + const auto &lhcInfo = iSetup.getData(lhcInfoESToken_); - h_beamEnergy_->Fill(hLHCInfo->energy()); - h_xangle_->Fill(hLHCInfo->crossingAngle()); - h_betaStar_->Fill(hLHCInfo->betaStar()); - h2_betaStar_vs_xangle_->Fill(hLHCInfo->crossingAngle(), hLHCInfo->betaStar()); + h_beamEnergy_->Fill(lhcInfo.energy()); + h_xangle_->Fill(lhcInfo.crossingAngle()); + h_betaStar_->Fill(lhcInfo.betaStar()); + h2_betaStar_vs_xangle_->Fill(lhcInfo.crossingAngle(), lhcInfo.betaStar()); - h_fill_->Fill(hLHCInfo->fillNumber()); + h_fill_->Fill(lhcInfo.fillNumber()); h_run_->Fill(iEvent.id().run()); } diff --git a/Validation/CTPPS/plugins/CTPPSOpticsPlotter.cc b/Validation/CTPPS/plugins/CTPPSOpticsPlotter.cc index 158ae44ae16d6..6e890d9a1039f 100644 --- a/Validation/CTPPS/plugins/CTPPSOpticsPlotter.cc +++ b/Validation/CTPPS/plugins/CTPPSOpticsPlotter.cc @@ -32,7 +32,7 @@ class CTPPSOpticsPlotter : public edm::one::EDAnalyzer<> { void analyze(const edm::Event&, const edm::EventSetup&) override; void endJob() override; - std::string opticsLabel_; + edm::ESGetToken opticsESToken_; unsigned int rpId_45_N_, rpId_45_F_; unsigned int rpId_56_N_, rpId_56_F_; @@ -106,7 +106,7 @@ using namespace edm; //---------------------------------------------------------------------------------------------------- CTPPSOpticsPlotter::CTPPSOpticsPlotter(const edm::ParameterSet& iConfig) - : opticsLabel_(iConfig.getParameter("opticsLabel")), + : opticsESToken_(esConsumes(ESInputTag("", iConfig.getParameter("opticsLabel")))), rpId_45_N_(iConfig.getParameter("rpId_45_N")), rpId_45_F_(iConfig.getParameter("rpId_45_F")), @@ -129,15 +129,14 @@ void CTPPSOpticsPlotter::analyze(const edm::Event& iEvent, const edm::EventSetup return; // get conditions - edm::ESHandle hOpticalFunctions; - iSetup.get().get(opticsLabel_, hOpticalFunctions); + const auto& opticalFunctions = iSetup.getData(opticsESToken_); // stop if conditions invalid - if (hOpticalFunctions->empty()) + if (opticalFunctions.empty()) return; // make per-RP plots - for (const auto& it : *hOpticalFunctions) { + for (const auto& it : opticalFunctions) { CTPPSDetId rpId(it.first); unsigned int rpDecId = rpId.arm() * 100 + rpId.station() * 10 + rpId.rp(); @@ -190,7 +189,7 @@ void CTPPSOpticsPlotter::analyze(const edm::Event& iEvent, const edm::EventSetup // find optics objects const LHCInterpolatedOpticalFunctionsSet *opt_N = nullptr, *opt_F = nullptr; - for (const auto& it : *hOpticalFunctions) { + for (const auto& it : opticalFunctions) { CTPPSDetId rpId(it.first); unsigned int rpDecId = rpId.arm() * 100 + rpId.station() * 10 + rpId.rp(); diff --git a/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorData.cc b/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorData.cc index 754d5e7de1cc7..d3d957f628fde 100644 --- a/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorData.cc +++ b/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorData.cc @@ -46,15 +46,13 @@ class CTPPSProtonReconstructionEfficiencyEstimatorData : public edm::one::EDAnal void endJob() override; edm::EDGetTokenT tokenTracks_; - edm::EDGetTokenT tokenRecoProtonsMultiRP_; + edm::ESGetToken opticsESToken_; bool pixelDiscardBXShiftedTracks_; double localAngleXMin_, localAngleXMax_, localAngleYMin_, localAngleYMax_; - std::string opticsLabel_; - unsigned int n_prep_events_; unsigned int n_exp_prot_max_; @@ -218,6 +216,8 @@ CTPPSProtonReconstructionEfficiencyEstimatorData::CTPPSProtonReconstructionEffic tokenRecoProtonsMultiRP_( consumes(iConfig.getParameter("tagRecoProtonsMultiRP"))), + opticsESToken_(esConsumes(ESInputTag("", iConfig.getParameter("opticsLabel")))), + pixelDiscardBXShiftedTracks_(iConfig.getParameter("pixelDiscardBXShiftedTracks")), localAngleXMin_(iConfig.getParameter("localAngleXMin")), @@ -225,7 +225,6 @@ CTPPSProtonReconstructionEfficiencyEstimatorData::CTPPSProtonReconstructionEffic localAngleYMin_(iConfig.getParameter("localAngleYMin")), localAngleYMax_(iConfig.getParameter("localAngleYMax")), - opticsLabel_(iConfig.getParameter("opticsLabel")), n_prep_events_(iConfig.getParameter("n_prep_events")), n_exp_prot_max_(iConfig.getParameter("n_exp_prot_max")), n_sigmas_(iConfig.getParameter>("n_sigmas")), @@ -290,13 +289,12 @@ void CTPPSProtonReconstructionEfficiencyEstimatorData::analyze(const edm::Event std::ostringstream os; // get conditions - edm::ESHandle hOpticalFunctions; - iSetup.get().get(opticsLabel_, hOpticalFunctions); + const auto &opticalFunctions = iSetup.getData(opticsESToken_); // check optics change if (opticsWatcher_.check(iSetup)) { - data_[0].UpdateOptics(*hOpticalFunctions); - data_[1].UpdateOptics(*hOpticalFunctions); + data_[0].UpdateOptics(opticalFunctions); + data_[1].UpdateOptics(opticalFunctions); } // get input diff --git a/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorMC.cc b/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorMC.cc index 0b6fb03619c41..e415b13ac01bf 100644 --- a/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorMC.cc +++ b/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorMC.cc @@ -53,7 +53,7 @@ class CTPPSProtonReconstructionEfficiencyEstimatorMC : public edm::one::EDAnalyz edm::EDGetTokenT tokenRecoProtonsMultiRP_; - std::string lhcInfoLabel_; + edm::ESGetToken lhcInfoESToken_; unsigned int rpId_45_N_, rpId_45_F_; unsigned int rpId_56_N_, rpId_56_F_; @@ -103,7 +103,7 @@ CTPPSProtonReconstructionEfficiencyEstimatorMC::CTPPSProtonReconstructionEfficie tracksToken_(consumes(iConfig.getParameter("tagTracks"))), tokenRecoProtonsMultiRP_( consumes(iConfig.getParameter("tagRecoProtonsMultiRP"))), - lhcInfoLabel_(iConfig.getParameter("lhcInfoLabel")), + lhcInfoESToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoLabel")))), rpId_45_N_(iConfig.getParameter("rpId_45_N")), rpId_45_F_(iConfig.getParameter("rpId_45_F")), @@ -132,8 +132,7 @@ void CTPPSProtonReconstructionEfficiencyEstimatorMC::analyze(const edm::Event &i std::ostringstream os; // get conditions - edm::ESHandle hLHCInfo; - iSetup.get().get(lhcInfoLabel_, hLHCInfo); + const auto &lhcInfo = iSetup.getData(lhcInfoESToken_); // get input edm::Handle hHepMCAfterSmearing; @@ -185,7 +184,7 @@ void CTPPSProtonReconstructionEfficiencyEstimatorMC::analyze(const edm::Event &i info.arm = (mom.z() > 0.) ? 0 : 1; - const double p_nom = hLHCInfo->energy(); + const double p_nom = lhcInfo.energy(); info.xi = (p_nom - mom.rho()) / p_nom; particleInfo[part->barcode()] = std::move(info); diff --git a/Validation/CTPPS/plugins/CTPPSProtonReconstructionPlotter.cc b/Validation/CTPPS/plugins/CTPPSProtonReconstructionPlotter.cc index 350a9dea5b1ea..365049b8da4bc 100644 --- a/Validation/CTPPS/plugins/CTPPSProtonReconstructionPlotter.cc +++ b/Validation/CTPPS/plugins/CTPPSProtonReconstructionPlotter.cc @@ -44,6 +44,7 @@ class CTPPSProtonReconstructionPlotter : public edm::one::EDAnalyzer<> { edm::EDGetTokenT tokenTracks_; edm::EDGetTokenT tokenRecoProtonsSingleRP_; edm::EDGetTokenT tokenRecoProtonsMultiRP_; + edm::ESGetToken geometryESToken_; unsigned int rpId_45_N_, rpId_45_F_; unsigned int rpId_56_N_, rpId_56_F_; @@ -486,6 +487,7 @@ CTPPSProtonReconstructionPlotter::CTPPSProtonReconstructionPlotter(const edm::Pa consumes(ps.getParameter("tagRecoProtonsSingleRP"))), tokenRecoProtonsMultiRP_( consumes(ps.getParameter("tagRecoProtonsMultiRP"))), + geometryESToken_(esConsumes()), rpId_45_N_(ps.getParameter("rpId_45_N")), rpId_45_F_(ps.getParameter("rpId_45_F")), @@ -558,8 +560,7 @@ void CTPPSProtonReconstructionPlotter::analyze(const edm::Event &event, const ed throw cms::Exception("CTPPSProtonReconstructionPlotter") << "Number of non empty events reached maximum."; // get conditions - edm::ESHandle hGeometry; - iSetup.get().get(hGeometry); + const auto &geometry = iSetup.getData(geometryESToken_); // track plots const CTPPSLocalTrackLite *tr_L_N = nullptr; @@ -675,7 +676,7 @@ void CTPPSProtonReconstructionPlotter::analyze(const edm::Event &event, const ed double x_tr = -1., x_ti = -1.; double de_x = 0., de_x_unc = 0.; - CalculateTimingTrackingDistance(proton, tr, *hGeometry, x_tr, x_ti, de_x, de_x_unc); + CalculateTimingTrackingDistance(proton, tr, geometry, x_tr, x_ti, de_x, de_x_unc); const double rd = (de_x_unc > 0.) ? de_x / de_x_unc : -1E10; const auto &ac = association_cuts_[armId]; diff --git a/Validation/CTPPS/plugins/CTPPSProtonReconstructionSimulationValidator.cc b/Validation/CTPPS/plugins/CTPPSProtonReconstructionSimulationValidator.cc index baddda884c6bb..d7a9b4c7d32db 100644 --- a/Validation/CTPPS/plugins/CTPPSProtonReconstructionSimulationValidator.cc +++ b/Validation/CTPPS/plugins/CTPPSProtonReconstructionSimulationValidator.cc @@ -55,7 +55,7 @@ class CTPPSProtonReconstructionSimulationValidator : public edm::one::EDAnalyzer edm::EDGetTokenT tokenRecoProtonsSingleRP_; edm::EDGetTokenT tokenRecoProtonsMultiRP_; - std::string lhcInfoLabel_; + edm::ESGetToken lhcInfoESToken_; std::string outputFile_; @@ -198,15 +198,14 @@ CTPPSProtonReconstructionSimulationValidator::CTPPSProtonReconstructionSimulatio consumes(iConfig.getParameter("tagRecoProtonsSingleRP"))), tokenRecoProtonsMultiRP_( consumes(iConfig.getParameter("tagRecoProtonsMultiRP"))), - lhcInfoLabel_(iConfig.getParameter("lhcInfoLabel")), + lhcInfoESToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoLabel")))), outputFile_(iConfig.getParameter("outputFile")) {} //---------------------------------------------------------------------------------------------------- void CTPPSProtonReconstructionSimulationValidator::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { // get conditions - edm::ESHandle hLHCInfo; - iSetup.get().get(lhcInfoLabel_, hLHCInfo); + const auto &lhcInfo = iSetup.getData(lhcInfoESToken_); // get input edm::Handle hHepMCBeforeSmearing; @@ -317,7 +316,7 @@ void CTPPSProtonReconstructionSimulationValidator::analyze(const edm::Event &iEv if (rec_pr.method() == reco::ForwardProton::ReconstructionMethod::multiRP) meth_idx = 1; - fillPlots(meth_idx, idx, rec_pr, vtx, mom, *hLHCInfo); + fillPlots(meth_idx, idx, rec_pr, vtx, mom, lhcInfo); } } diff --git a/Validation/CTPPS/plugins/CTPPSProtonReconstructionValidator.cc b/Validation/CTPPS/plugins/CTPPSProtonReconstructionValidator.cc index a7337b1eb336f..32512b2aa4a8a 100644 --- a/Validation/CTPPS/plugins/CTPPSProtonReconstructionValidator.cc +++ b/Validation/CTPPS/plugins/CTPPSProtonReconstructionValidator.cc @@ -38,6 +38,7 @@ class CTPPSProtonReconstructionValidator : public edm::one::EDAnalyzer<> { void endJob() override; edm::EDGetTokenT tokenRecoProtons_; + edm::ESGetToken opticsESToken_; double chiSqCut_; std::string outputFile_; @@ -70,6 +71,7 @@ using namespace edm; CTPPSProtonReconstructionValidator::CTPPSProtonReconstructionValidator(const edm::ParameterSet& iConfig) : tokenRecoProtons_(consumes(iConfig.getParameter("tagRecoProtons"))), + opticsESToken_(esConsumes()), chiSqCut_(iConfig.getParameter("chiSqCut")), outputFile_(iConfig.getParameter("outputFile")) {} @@ -77,11 +79,10 @@ CTPPSProtonReconstructionValidator::CTPPSProtonReconstructionValidator(const edm void CTPPSProtonReconstructionValidator::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { // get conditions - edm::ESHandle hOpticalFunctions; - iSetup.get().get(hOpticalFunctions); + const auto& opticalFunctions = iSetup.getData(opticsESToken_); // stop if conditions invalid - if (hOpticalFunctions->empty()) + if (opticalFunctions.empty()) return; // get input @@ -105,19 +106,19 @@ void CTPPSProtonReconstructionValidator::analyze(const edm::Event& iEvent, const continue; // try to get optics for the RP - auto it = hOpticalFunctions->find(rpId); - if (it == hOpticalFunctions->end()) + if (opticalFunctions.count(rpId) == 0) continue; + const auto& func = opticalFunctions.at(rpId); // do propagation LHCInterpolatedOpticalFunctionsSet::Kinematics k_in_beam = {0., 0., 0., 0., 0.}; LHCInterpolatedOpticalFunctionsSet::Kinematics k_out_beam; - it->second.transport(k_in_beam, k_out_beam); + func.transport(k_in_beam, k_out_beam); LHCInterpolatedOpticalFunctionsSet::Kinematics k_in = { -pr.vx(), -pr.thetaX(), pr.vy(), pr.thetaY(), pr.xi()}; // conversions: CMS --> LHC convention LHCInterpolatedOpticalFunctionsSet::Kinematics k_out; - it->second.transport(k_in, k_out); + func.transport(k_in, k_out); // fill plots const double de_x = (k_out.x - k_out_beam.x) * 10. - tr->x(); // conversions: cm --> mm diff --git a/Validation/CTPPS/python/simu_config/base_cff.py b/Validation/CTPPS/python/simu_config/base_cff.py index c926fb12b07e2..f3ae25ba7903f 100644 --- a/Validation/CTPPS/python/simu_config/base_cff.py +++ b/Validation/CTPPS/python/simu_config/base_cff.py @@ -1,39 +1,53 @@ import FWCore.ParameterSet.Config as cms -# load standard files +# load standard files (on top so as settings can be overwritten below) from RecoPPS.ProtonReconstruction.ctppsProtons_cff import * -# undo unapplicable settings -#del ctppsRPAlignmentCorrectionsDataESSourceXML -#del esPreferLocalAlignment - -#ctppsOpticalFunctionsESSource.configuration = cms.VPSet() -#del ctppsOpticalFunctionsESSource -#del esPreferLocalOptics -del ctppsInterpolatedOpticalFunctionsESSource - -# beam parameters as declared by LHC -ctppsLHCInfoESSource = cms.ESSource("CTPPSLHCInfoESSource", - label = cms.string(""), - validityRange = cms.EventRange("0:min - 999999:max"), - beamEnergy = cms.double(6500), # GeV - xangle = cms.double(-1), # murad - betaStar = cms.double(-1) +# configuration for composite source of alignment, optics, ... +from CalibPPS.ESProducers.ctppsCompositeESSource_cfi import * +ctppsCompositeESSource.generateEveryNEvents = 100 + +profile_base = cms.PSet( + L_int = cms.double(1), + + # LHCInfo + ctppsLHCInfo = cms.PSet( + xangle = cms.double(-1), + betaStar = cms.double(-1), + beamEnergy = cms.double(0), + xangleBetaStarHistogramFile = cms.string("CalibPPS/ESProducers/data/xangle_beta_distributions/version1.root"), + xangleBetaStarHistogramObject = cms.string("") + ), + + # optics + ctppsOpticalFunctions = cms.PSet( + opticalFunctions = cms.VPSet(), + scoringPlanes = cms.VPSet() + ), + + # alignment + ctppsRPAlignmentCorrectionsDataXML = cms.PSet( + MeasuredFiles = cms.vstring(), + RealFiles = cms.vstring(), + MisalignedFiles = cms.vstring() + ), + + # direct simu data + ctppsDirectSimuData = cms.PSet( + empiricalAperture45 = cms.string(""), + empiricalAperture56 = cms.string(""), + + timeResolutionDiamonds45 = cms.string("999"), + timeResolutionDiamonds56 = cms.string("999"), + + efficienciesPerRP = cms.VPSet(), + efficienciesPerPlane = cms.VPSet() + ) ) # beam parameters as determined by PPS -ctppsBeamParametersESSource = cms.ESSource("CTPPSBeamParametersESSource", - setBeamPars = cms.bool(True), - - # beam momentum (GeV) - beamMom45 = cms.double(6500.), - beamMom56 = cms.double(6500.), - - # beta* (cm) - betaStarX45 = cms.double(0.), - betaStarX56 = cms.double(0.), - betaStarY45 = cms.double(0.), - betaStarY56 = cms.double(0.), +ctppsBeamParametersFromLHCInfoESSource = cms.ESProducer("CTPPSBeamParametersFromLHCInfoESSource", + lhcInfoLabel = cms.string(""), # beam divergence (rad) beamDivX45 = cms.double(30E-6), @@ -41,12 +55,6 @@ beamDivY45 = cms.double(30E-6), beamDivY56 = cms.double(30E-6), - # half crossing angle (rad) - halfXangleX45 = cms.double(-1), - halfXangleX56 = cms.double(-1), - halfXangleY45 = cms.double(0.), - halfXangleY56 = cms.double(0.), - # vertex offset (cm) vtxOffsetX45 = cms.double(0.), vtxOffsetX56 = cms.double(0.), @@ -54,14 +62,11 @@ vtxOffsetY56 = cms.double(0.), vtxOffsetZ45 = cms.double(0.), vtxOffsetZ56 = cms.double(0.), - vtxOffsetT45 = cms.double(0.), - vtxOffsetT56 = cms.double(0.), # vertex sigma (cm) vtxStddevX = cms.double(10E-4), vtxStddevY = cms.double(10E-4), - vtxStddevZ = cms.double(5), - vtxStddevT = cms.double(6) + vtxStddevZ = cms.double(5) ) # particle-data table @@ -78,7 +83,7 @@ # default source source = cms.Source("EmptySource", firstRun = cms.untracked.uint32(1), - numberEventsInLuminosityBlock = cms.untracked.uint32(10) + numberEventsInLuminosityBlock = ctppsCompositeESSource.generateEveryNEvents ) # particle generator @@ -98,18 +103,21 @@ ctppsDirectProtonSimulation.pitchStrips = 66E-3 * 12 / 19 # effective value to reproduce real RP resolution ctppsDirectProtonSimulation.pitchPixelsHor = 50E-3 ctppsDirectProtonSimulation.pitchPixelsVer = 80E-3 +ctppsDirectProtonSimulation.useEmpiricalApertures = True ctppsDirectProtonSimulation.produceHitsRelativeToBeam = True ctppsDirectProtonSimulation.produceScoringPlaneHits = False ctppsDirectProtonSimulation.produceRecHits = True # local reconstruction +from CalibPPS.ESProducers.ppsTopology_cff import * + from RecoPPS.Local.totemRPLocalReconstruction_cff import * from RecoPPS.Local.ctppsPixelLocalReconstruction_cff import * from RecoPPS.Local.ctppsDiamondLocalReconstruction_cff import * from RecoPPS.Local.ctppsLocalTrackLiteProducer_cff import * totemRPUVPatternFinder.tagRecHit = cms.InputTag('ctppsDirectProtonSimulation') -ctppsPixelLocalTracks.label = "ctppsDirectProtonSimulation" +ctppsPixelLocalTracks.tag = cms.InputTag('ctppsDirectProtonSimulation') ctppsDiamondLocalTracks.recHitsTag = cms.InputTag('ctppsDirectProtonSimulation') ctppsLocalTrackLiteProducer.includeDiamonds = False @@ -118,6 +126,7 @@ ctppsProtons.tagLocalTrackLite = cms.InputTag('ctppsLocalTrackLiteProducer') #---------------------------------------------------------------------------------------------------- +# utility functions def SetSmearingLevel1(obj): obj.vtxStddevX = 0E-4 @@ -129,10 +138,7 @@ def SetSmearingLevel1(obj): obj.beamDivY56 = 0E-6 def SetLevel1(process): - if hasattr(process, "ctppsBeamParametersESSource"): - SetSmearingLevel1(process.ctppsBeamParametersESSource) - else: - SetSmearingLevel1(process.ctppsBeamParametersFromLHCInfoESSource) + SetSmearingLevel1(process.ctppsBeamParametersFromLHCInfoESSource) process.ctppsDirectProtonSimulation.roundToPitch = False @@ -143,60 +149,33 @@ def SetSmearingLevel2(obj): obj.beamDivY56 = 0E-6 def SetLevel2(process): - if hasattr(process, "ctppsBeamParametersESSource"): - SetSmearingLevel2(process.ctppsBeamParametersESSource) - else: - SetSmearingLevel2(process.ctppsBeamParametersFromLHCInfoESSource) + SetSmearingLevel2(process.ctppsBeamParametersFromLHCInfoESSource) process.ctppsDirectProtonSimulation.roundToPitch = False - def SetLevel3(process): process.ctppsDirectProtonSimulation.roundToPitch = False - def SetLevel4(process): pass - def SetLowTheta(process): process.generator.theta_x_sigma = 0E-6 process.generator.theta_y_sigma = 0E-6 - def SetLargeTheta(process): pass -# xangle in murad -def UseCrossingAngle(xangle, process): - process.ctppsLHCInfoESSource.xangle = xangle - process.ctppsBeamParametersESSource.halfXangleX45 = xangle * 1E-6 - process.ctppsBeamParametersESSource.halfXangleX56 = xangle * 1E-6 - -default_xangle_beta_star_file = "CalibPPS/ESProducers/data/xangle_beta_distributions/version1.root" - -def UseXangleBetaStarHistogram(process, f, obj): - process.load("CalibPPS.ESProducers.ctppsLHCInfoRandomXangleESSource_cfi") - process.ctppsLHCInfoRandomXangleESSource.generateEveryNEvents = 10 # this is to be synchronised with source.numberEventsInLuminosityBlock - process.ctppsLHCInfoRandomXangleESSource.xangleBetaStarHistogramFile = f - process.ctppsLHCInfoRandomXangleESSource.xangleBetaStarHistogramObject = obj - process.ctppsLHCInfoRandomXangleESSource.beamEnergy = ctppsLHCInfoESSource.beamEnergy - - del process.ctppsLHCInfoESSource - - process.load("CalibPPS.ESProducers.ctppsBeamParametersFromLHCInfoESSource_cfi") - process.ctppsBeamParametersFromLHCInfoESSource.beamDivX45 = process.ctppsBeamParametersESSource.beamDivX45 - process.ctppsBeamParametersFromLHCInfoESSource.beamDivX56 = process.ctppsBeamParametersESSource.beamDivX56 - process.ctppsBeamParametersFromLHCInfoESSource.beamDivY45 = process.ctppsBeamParametersESSource.beamDivY45 - process.ctppsBeamParametersFromLHCInfoESSource.beamDivY56 = process.ctppsBeamParametersESSource.beamDivY56 - process.ctppsBeamParametersFromLHCInfoESSource.vtxOffsetX45 = process.ctppsBeamParametersESSource.vtxOffsetX45 - process.ctppsBeamParametersFromLHCInfoESSource.vtxOffsetX56 = process.ctppsBeamParametersESSource.vtxOffsetX56 - process.ctppsBeamParametersFromLHCInfoESSource.vtxOffsetY45 = process.ctppsBeamParametersESSource.vtxOffsetY45 - process.ctppsBeamParametersFromLHCInfoESSource.vtxOffsetY56 = process.ctppsBeamParametersESSource.vtxOffsetY56 - process.ctppsBeamParametersFromLHCInfoESSource.vtxOffsetZ45 = process.ctppsBeamParametersESSource.vtxOffsetZ45 - process.ctppsBeamParametersFromLHCInfoESSource.vtxOffsetZ56 = process.ctppsBeamParametersESSource.vtxOffsetZ56 - process.ctppsBeamParametersFromLHCInfoESSource.vtxStddevX = process.ctppsBeamParametersESSource.vtxStddevX - process.ctppsBeamParametersFromLHCInfoESSource.vtxStddevY = process.ctppsBeamParametersESSource.vtxStddevY - process.ctppsBeamParametersFromLHCInfoESSource.vtxStddevZ = process.ctppsBeamParametersESSource.vtxStddevZ - - del process.ctppsBeamParametersESSource +def UseConstantXangleBetaStar(process, xangle, betaStar): + for p in ctppsCompositeESSource.periods: + p.ctppsLHCInfo.xangle = xangle + p.ctppsLHCInfo.betaStar = betaStar + +def UseXangleBetaStarHistogram(process, f="", obj=""): + for p in ctppsCompositeESSource.periods: + p.ctppsLHCInfo.xangle = -1 # negative value indicates to use the xangle/beta* histogram + + if f: + p.ctppsLHCInfo.xangleBetaStarHistogramFile = f + if obj: + p.ctppsLHCInfo.xangleBetaStarHistogramObject = obj diff --git a/Validation/CTPPS/python/simu_config/profile_2016_postTS2_cff.py b/Validation/CTPPS/python/simu_config/profile_2016_postTS2_cff.py new file mode 100644 index 0000000000000..246e82feef14e --- /dev/null +++ b/Validation/CTPPS/python/simu_config/profile_2016_postTS2_cff.py @@ -0,0 +1,38 @@ +import FWCore.ParameterSet.Config as cms + +from Validation.CTPPS.simu_config.year_2016_cff import * + +alignmentFile = "Validation/CTPPS/alignment/2016_postTS2.xml" + +profile_2016_postTS2 = profile_base_2016.clone( + L_int = 5.007365807, + + ctppsLHCInfo = dict( + xangleBetaStarHistogramObject = cms.string("2016_postTS2/h2_betaStar_vs_xangle") + ), + + ctppsOpticalFunctions = dict( + opticalFunctions = cms.VPSet( + cms.PSet( xangle = cms.double(140), fileName = cms.FileInPath("CalibPPS/ESProducers/data/optical_functions/2016_postTS2/version2/140urad.root") ) + ), + + scoringPlanes = cms.VPSet( + # z in cm + cms.PSet( rpId = cms.uint32(0x76100000), dirName = cms.string("XRPH_C6L5_B2"), z = cms.double(-20382.6) ), # RP 002, strip + cms.PSet( rpId = cms.uint32(0x76180000), dirName = cms.string("XRPH_D6L5_B2"), z = cms.double(-21255.1) ), # RP 003, strip + cms.PSet( rpId = cms.uint32(0x77100000), dirName = cms.string("XRPH_C6R5_B1"), z = cms.double(+20382.6) ), # RP 102, strip + cms.PSet( rpId = cms.uint32(0x77180000), dirName = cms.string("XRPH_D6R5_B1"), z = cms.double(+21255.1) ), # RP 103, strip + ) + ), + + ctppsRPAlignmentCorrectionsDataXML = dict( + MisalignedFiles = [alignmentFile], + RealFiles = [alignmentFile] + ), + + # direct simu data + ctppsDirectSimuData = dict( + empiricalAperture45 = cms.string("6.10374E-05+(([xi]<0.113491)*0.00795942+([xi]>=0.113491)*0.01935)*([xi]-0.113491)"), + empiricalAperture56 = cms.string("([xi]-0.110)/130.0") + ) +) diff --git a/Validation/CTPPS/python/simu_config/profile_2016_preTS2_cff.py b/Validation/CTPPS/python/simu_config/profile_2016_preTS2_cff.py new file mode 100644 index 0000000000000..cb7098c90e66d --- /dev/null +++ b/Validation/CTPPS/python/simu_config/profile_2016_preTS2_cff.py @@ -0,0 +1,37 @@ +import FWCore.ParameterSet.Config as cms + +from Validation.CTPPS.simu_config.year_2016_cff import * + +alignmentFile = "Validation/CTPPS/alignment/2016_preTS2.xml" + +profile_2016_preTS2 = profile_base_2016.clone( + L_int = 6.138092276 + 3.654039035, + + ctppsLHCInfo = dict( + xangleBetaStarHistogramObject = cms.string("2016_preTS2/h2_betaStar_vs_xangle") + ), + + ctppsOpticalFunctions = dict( + opticalFunctions = cms.VPSet( + cms.PSet( xangle = cms.double(185), fileName = cms.FileInPath("CalibPPS/ESProducers/data/optical_functions/2016_preTS2/version2/185urad.root") ) + ), + + scoringPlanes = cms.VPSet( + # z in cm + cms.PSet( rpId = cms.uint32(0x76100000), dirName = cms.string("XRPH_C6L5_B2"), z = cms.double(-20382.6) ), # RP 002, strip + cms.PSet( rpId = cms.uint32(0x76180000), dirName = cms.string("XRPH_D6L5_B2"), z = cms.double(-21255.1) ), # RP 003, strip + cms.PSet( rpId = cms.uint32(0x77100000), dirName = cms.string("XRPH_C6R5_B1"), z = cms.double(+20382.6) ), # RP 102, strip + cms.PSet( rpId = cms.uint32(0x77180000), dirName = cms.string("XRPH_D6R5_B1"), z = cms.double(+21255.1) ), # RP 103, strip + ) + ), + + ctppsRPAlignmentCorrectionsDataXML = dict( + MisalignedFiles = [alignmentFile], + RealFiles = [alignmentFile] + ), + + ctppsDirectSimuData = dict( + empiricalAperture45 = cms.string("3.76296E-05+(([xi]<0.117122)*0.00712775+([xi]>=0.117122)*0.0148651)*([xi]-0.117122)"), + empiricalAperture56 = cms.string("1.85954E-05+(([xi]<0.14324)*0.00475349+([xi]>=0.14324)*0.00629514)*([xi]-0.14324)") + ) +) diff --git a/Validation/CTPPS/python/simu_config/profile_2017_postTS2_cff.py b/Validation/CTPPS/python/simu_config/profile_2017_postTS2_cff.py new file mode 100644 index 0000000000000..c3565b0490cf0 --- /dev/null +++ b/Validation/CTPPS/python/simu_config/profile_2017_postTS2_cff.py @@ -0,0 +1,26 @@ +import FWCore.ParameterSet.Config as cms + +from Validation.CTPPS.simu_config.year_2017_cff import * + +alignmentFile = "Validation/CTPPS/alignment/2017_postTS2.xml" + +profile_2017_postTS2 = profile_base_2017.clone( + L_int = 22.179613387, + + ctppsLHCInfo = dict( + xangleBetaStarHistogramObject = "2017_postTS2/h2_betaStar_vs_xangle" + ), + + ctppsRPAlignmentCorrectionsDataXML = dict( + MisalignedFiles = [alignmentFile], + RealFiles = [alignmentFile] + ), + + ctppsDirectSimuData = dict( + empiricalAperture45 = "-(8.92079E-07*[xangle]-0.000150214)+(([xi]<(0.000278622*[xangle]+0.0964383))*-(3.9541e-05*[xangle]-0.0115104)+([xi]>=(0.000278622*[xangle]+0.0964383))*-(0.000108249*[xangle]-0.0249303))*([xi]-(0.000278622*[xangle]+0.0964383))", + empiricalAperture56 = "4.56961E-05+(([xi]<(0.00075625*[xangle]+0.0643361))*-(3.01107e-05*[xangle]-0.00985126)+([xi]>=(0.00075625*[xangle]+0.0643361))*-(8.95437e-05*[xangle]-0.0169474))*([xi]-(0.00075625*[xangle]+0.0643361))", + + timeResolutionDiamonds45 = "2*(0.0152613+0.0498784*x-0.00824168*x^2+0.000599844*x^3-1.5923E-05*x^4)", + timeResolutionDiamonds56 = "2*(-0.00458856+0.0522619*x-0.00806666*x^2+0.000558331*x^3-1.42165E-05*x^4)" + ) +) diff --git a/Validation/CTPPS/python/simu_config/profile_2017_preTS2_cff.py b/Validation/CTPPS/python/simu_config/profile_2017_preTS2_cff.py new file mode 100644 index 0000000000000..92d59fd66fc9e --- /dev/null +++ b/Validation/CTPPS/python/simu_config/profile_2017_preTS2_cff.py @@ -0,0 +1,26 @@ +import FWCore.ParameterSet.Config as cms + +from Validation.CTPPS.simu_config.year_2017_cff import * + +alignmentFile = "Validation/CTPPS/alignment/2017_preTS2.xml" + +profile_2017_preTS2 = profile_base_2017.clone( + L_int = 15.012899190, + + ctppsLHCInfo = dict( + xangleBetaStarHistogramObject = "2017_preTS2/h2_betaStar_vs_xangle" + ), + + ctppsRPAlignmentCorrectionsDataXML = dict( + MisalignedFiles = [alignmentFile], + RealFiles = [alignmentFile] + ), + + ctppsDirectSimuData = dict( + empiricalAperture45 = "-(8.71198E-07*[xangle]-0.000134726)+(([xi]<(0.000264704*[xangle]+0.081951))*-(4.32065E-05*[xangle]-0.0130746)+([xi]>=(0.000264704*[xangle]+0.081951))*-(0.000183472*[xangle]-0.0395241))*([xi]-(0.000264704*[xangle]+0.081951))", + empiricalAperture56 = "3.43116E-05+(([xi]<(0.000626936*[xangle]+0.061324))*0.00654394+([xi]>=(0.000626936*[xangle]+0.061324))*-(0.000145164*[xangle]-0.0272919))*([xi]-(0.000626936*[xangle]+0.061324))", + + timeResolutionDiamonds45 = "2*(-0.10784+0.105194*x-0.0182611*x^2+0.00134731*x^3-3.58212E-05*x^4)", + timeResolutionDiamonds56 = "2*(0.00735552+0.0272707*x-0.00247151*x^2+8.62788E-05*x^3-7.99605E-07*x^4)" + ) +) diff --git a/Validation/CTPPS/python/simu_config/profile_2018_TS1_TS2_cff.py b/Validation/CTPPS/python/simu_config/profile_2018_TS1_TS2_cff.py new file mode 100644 index 0000000000000..ad646db62d8b4 --- /dev/null +++ b/Validation/CTPPS/python/simu_config/profile_2018_TS1_TS2_cff.py @@ -0,0 +1,23 @@ +import FWCore.ParameterSet.Config as cms + +from Validation.CTPPS.simu_config.year_2018_cff import * + +alignmentFile = "Validation/CTPPS/alignment/2018_TS1_TS2.xml" + +profile_2018_TS1_TS2 = profile_base_2018.clone( + L_int = 26.812002394, + + ctppsLHCInfo = dict( + xangleBetaStarHistogramObject = "2018_TS1_TS2/h2_betaStar_vs_xangle" + ), + + ctppsRPAlignmentCorrectionsDataXML = dict( + MisalignedFiles = [alignmentFile], + RealFiles = [alignmentFile] + ), + + ctppsDirectSimuData = dict( + timeResolutionDiamonds45 = "2*((x<16)*(-0.171784+0.175856*x-0.0322344*x^2+0.00231489*x^3-5.7575E-05*x^4)+(x>=16)*0.105)", + timeResolutionDiamonds56 = "2*((x<16)*(-0.014943+0.102806*x-0.0209404*x^2+0.00158264*x^3-4.08241E-05*x^4)+(x>=16)*0.089)" + ) +) diff --git a/Validation/CTPPS/python/simu_config/profile_2018_postTS2_cff.py b/Validation/CTPPS/python/simu_config/profile_2018_postTS2_cff.py new file mode 100644 index 0000000000000..0360db04a32f1 --- /dev/null +++ b/Validation/CTPPS/python/simu_config/profile_2018_postTS2_cff.py @@ -0,0 +1,23 @@ +import FWCore.ParameterSet.Config as cms + +from Validation.CTPPS.simu_config.year_2018_cff import * + +alignmentFile = "Validation/CTPPS/alignment/2018_postTS2.xml" + +profile_2018_postTS2 = profile_base_2018.clone( + L_int = 10.415769561, + + ctppsLHCInfo = dict( + xangleBetaStarHistogramObject = "2018_postTS2/h2_betaStar_vs_xangle" + ), + + ctppsRPAlignmentCorrectionsDataXML = dict( + MisalignedFiles = [alignmentFile], + RealFiles = [alignmentFile] + ), + + ctppsDirectSimuData = dict( + timeResolutionDiamonds45 = "2*((x<16)*(-0.381504+0.255095*x-0.0415622*x^2+0.00275877*x^3-6.47115E-05*x^4)+(x>=16)*0.118)", + timeResolutionDiamonds56 = "2*((x<16)*(-0.279298+0.219838*x-0.0384257*x^2+0.00268906*x^3-6.60572E-05*x^4)+(x>=16)*0.099)", + ) +) diff --git a/Validation/CTPPS/python/simu_config/profile_2018_preTS1_cff.py b/Validation/CTPPS/python/simu_config/profile_2018_preTS1_cff.py new file mode 100644 index 0000000000000..ffaffb5f830c6 --- /dev/null +++ b/Validation/CTPPS/python/simu_config/profile_2018_preTS1_cff.py @@ -0,0 +1,24 @@ +import FWCore.ParameterSet.Config as cms + +from Validation.CTPPS.simu_config.year_2018_cff import * + +alignmentFile = "Validation/CTPPS/alignment/2018_preTS1.xml" + +profile_2018_preTS1 = profile_base_2018.clone( + L_int = 18.488297964, + + ctppsLHCInfo = dict( + xangleBetaStarHistogramObject = "2018_preTS1/h2_betaStar_vs_xangle" + ), + + ctppsRPAlignmentCorrectionsDataXML = dict( + MisalignedFiles = [alignmentFile], + RealFiles = [alignmentFile] + ), + + ctppsDirectSimuData = dict( + # timing not available in this period + timeResolutionDiamonds45 = "0.200", + timeResolutionDiamonds56 = "0.200" + ) +) diff --git a/Validation/CTPPS/python/simu_config/profile_2021_default_cff.py b/Validation/CTPPS/python/simu_config/profile_2021_default_cff.py new file mode 100644 index 0000000000000..6273e2abda4d8 --- /dev/null +++ b/Validation/CTPPS/python/simu_config/profile_2021_default_cff.py @@ -0,0 +1,23 @@ +import FWCore.ParameterSet.Config as cms + +from Validation.CTPPS.simu_config.year_2021_cff import * + +alignmentFile = "Validation/CTPPS/alignment/2021.xml" + +profile_2021_default = profile_base_2021.clone( + L_int = 1, + + ctppsLHCInfo = dict( + xangleBetaStarHistogramObject = "2021/h2_betaStar_vs_xangle" + ), + + ctppsRPAlignmentCorrectionsDataXML = dict( + MisalignedFiles = [alignmentFile], + RealFiles = [alignmentFile] + ), + + ctppsDirectSimuData = dict( + timeResolutionDiamonds45 = "0.200", + timeResolutionDiamonds56 = "0.200" + ) +) diff --git a/Validation/CTPPS/python/simu_config/year_2016_cff.py b/Validation/CTPPS/python/simu_config/year_2016_cff.py index 3c64efcf1ae2d..83df3e7ecb492 100644 --- a/Validation/CTPPS/python/simu_config/year_2016_cff.py +++ b/Validation/CTPPS/python/simu_config/year_2016_cff.py @@ -2,12 +2,23 @@ from Validation.CTPPS.simu_config.base_cff import * -# geometry -from Geometry.VeryForwardGeometry.geometryRPFromDD_2017_cfi import * # using 2017 here is OK +# base profile settings for 2016 +profile_base_2016 = profile_base.clone( + ctppsLHCInfo = dict( + beamEnergy = 6500 + ) +) + +# geometry (using 2017 here is OK) +from Geometry.VeryForwardGeometry.commons_cff import cloneGeometry +XMLIdealGeometryESSource_CTPPS, _ctppsGeometryESModule = cloneGeometry('Geometry.VeryForwardGeometry.geometryRPFromDD_2017_cfi') + +ctppsCompositeESSource.compactViewTag = _ctppsGeometryESModule.compactViewTag +ctppsCompositeESSource.isRun2 = _ctppsGeometryESModule.isRun2 # local reconstruction ctppsLocalTrackLiteProducer.includeStrips = True -ctppsLocalTrackLiteProducer.includePixels = False +ctppsLocalTrackLiteProducer.includePixels = False reco_local = cms.Sequence( totemRPUVPatternFinder @@ -22,3 +33,8 @@ rp_56_N = cms.uint32(102), rp_56_F = cms.uint32(103) ) + +# default list of profiles +from Validation.CTPPS.simu_config.profile_2016_preTS2_cff import profile_2016_preTS2 +from Validation.CTPPS.simu_config.profile_2016_postTS2_cff import profile_2016_postTS2 +ctppsCompositeESSource.periods = [profile_2016_postTS2, profile_2016_preTS2] diff --git a/Validation/CTPPS/python/simu_config/year_2016_postTS2_cff.py b/Validation/CTPPS/python/simu_config/year_2016_postTS2_cff.py deleted file mode 100644 index 0f8c90a1ab196..0000000000000 --- a/Validation/CTPPS/python/simu_config/year_2016_postTS2_cff.py +++ /dev/null @@ -1,50 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Validation.CTPPS.simu_config.year_2016_cff import * - -# alignment -from CalibPPS.ESProducers.ctppsRPAlignmentCorrectionsDataESSourceXML_cfi import * -alignmentFile = "Validation/CTPPS/alignment/2016_postTS2.xml" -ctppsRPAlignmentCorrectionsDataESSourceXML.MisalignedFiles = [alignmentFile] -ctppsRPAlignmentCorrectionsDataESSourceXML.RealFiles = [alignmentFile] - -# beam optics -from CalibPPS.ESProducers.ctppsOpticalFunctionsESSource_cfi import * - -config_2016_postTS2 = cms.PSet( - validityRange = cms.EventRange("0:min - 999999:max"), - - opticalFunctions = cms.VPSet( - cms.PSet( xangle = cms.double(140), fileName = cms.FileInPath("CalibPPS/ESProducers/data/optical_functions/2016_postTS2/version2/140urad.root") ) - ), - - scoringPlanes = cms.VPSet( - # z in cm - cms.PSet( rpId = cms.uint32(0x76100000), dirName = cms.string("XRPH_C6L5_B2"), z = cms.double(-20382.6) ), # RP 002, strip - cms.PSet( rpId = cms.uint32(0x76180000), dirName = cms.string("XRPH_D6L5_B2"), z = cms.double(-21255.1) ), # RP 003, strip - cms.PSet( rpId = cms.uint32(0x77100000), dirName = cms.string("XRPH_C6R5_B1"), z = cms.double(+20382.6) ), # RP 102, strip - cms.PSet( rpId = cms.uint32(0x77180000), dirName = cms.string("XRPH_D6R5_B1"), z = cms.double(+21255.1) ), # RP 103, strip - ) -) - -ctppsOpticalFunctionsESSource.configuration.append(config_2016_postTS2) - -from CalibPPS.ESProducers.ctppsInterpolatedOpticalFunctionsESSource_cfi import * -ctppsInterpolatedOpticalFunctionsESSource.lhcInfoLabel = "" - -# aperture cuts -ctppsDirectProtonSimulation.useEmpiricalApertures = True - -ctppsDirectProtonSimulation.empiricalAperture45="6.10374E-05+(([xi]<0.113491)*0.00795942+([xi]>=0.113491)*0.01935)*([xi]-0.113491)" -ctppsDirectProtonSimulation.empiricalAperture56="([xi]-0.110)/130.0" - -# xangle/beta* options -def UseDefaultXangleBetaStar(process): - UseCrossingAngle(140, process) - -def UseDefaultXangleBetaStarDistribution(process): - UseXangleBetaStarHistogram(process, default_xangle_beta_star_file, "2016_postTS2/h2_betaStar_vs_xangle") - -# defaults -def SetDefaults(process): - UseDefaultXangleBetaStarDistribution(process) diff --git a/Validation/CTPPS/python/simu_config/year_2016_preTS2_cff.py b/Validation/CTPPS/python/simu_config/year_2016_preTS2_cff.py deleted file mode 100644 index e98d522c21abe..0000000000000 --- a/Validation/CTPPS/python/simu_config/year_2016_preTS2_cff.py +++ /dev/null @@ -1,50 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Validation.CTPPS.simu_config.year_2016_cff import * - -# alignment -from CalibPPS.ESProducers.ctppsRPAlignmentCorrectionsDataESSourceXML_cfi import * -alignmentFile = "Validation/CTPPS/alignment/2016_preTS2.xml" -ctppsRPAlignmentCorrectionsDataESSourceXML.MisalignedFiles = [alignmentFile] -ctppsRPAlignmentCorrectionsDataESSourceXML.RealFiles = [alignmentFile] - -# beam optics -from CalibPPS.ESProducers.ctppsOpticalFunctionsESSource_cfi import * - -config_2016_preTS2 = cms.PSet( - validityRange = cms.EventRange("0:min - 999999:max"), - - opticalFunctions = cms.VPSet( - cms.PSet( xangle = cms.double(185), fileName = cms.FileInPath("CalibPPS/ESProducers/data/optical_functions/2016_preTS2/version2/185urad.root") ) - ), - - scoringPlanes = cms.VPSet( - # z in cm - cms.PSet( rpId = cms.uint32(0x76100000), dirName = cms.string("XRPH_C6L5_B2"), z = cms.double(-20382.6) ), # RP 002, strip - cms.PSet( rpId = cms.uint32(0x76180000), dirName = cms.string("XRPH_D6L5_B2"), z = cms.double(-21255.1) ), # RP 003, strip - cms.PSet( rpId = cms.uint32(0x77100000), dirName = cms.string("XRPH_C6R5_B1"), z = cms.double(+20382.6) ), # RP 102, strip - cms.PSet( rpId = cms.uint32(0x77180000), dirName = cms.string("XRPH_D6R5_B1"), z = cms.double(+21255.1) ), # RP 103, strip - ) -) - -ctppsOpticalFunctionsESSource.configuration.append(config_2016_preTS2) - -from CalibPPS.ESProducers.ctppsInterpolatedOpticalFunctionsESSource_cfi import * -ctppsInterpolatedOpticalFunctionsESSource.lhcInfoLabel = "" - -# aperture cuts -ctppsDirectProtonSimulation.useEmpiricalApertures = True - -ctppsDirectProtonSimulation.empiricalAperture45="3.76296E-05+(([xi]<0.117122)*0.00712775+([xi]>=0.117122)*0.0148651)*([xi]-0.117122)" -ctppsDirectProtonSimulation.empiricalAperture56="1.85954E-05+(([xi]<0.14324)*0.00475349+([xi]>=0.14324)*0.00629514)*([xi]-0.14324)" - -# xangle/beta* options -def UseDefaultXangleBetaStar(process): - UseCrossingAngle(185, process) - -def UseDefaultXangleBetaStarDistribution(process): - UseXangleBetaStarHistogram(process, default_xangle_beta_star_file, "2016_preTS2/h2_betaStar_vs_xangle") - -# defaults -def SetDefaults(process): - UseDefaultXangleBetaStarDistribution(process) diff --git a/Validation/CTPPS/python/simu_config/year_2017_cff.py b/Validation/CTPPS/python/simu_config/year_2017_cff.py index 6234db0b8ce00..b9759119a9855 100644 --- a/Validation/CTPPS/python/simu_config/year_2017_cff.py +++ b/Validation/CTPPS/python/simu_config/year_2017_cff.py @@ -2,37 +2,37 @@ from Validation.CTPPS.simu_config.base_cff import * -# beam optics -from CalibPPS.ESProducers.ctppsOpticalFunctionsESSource_cfi import * - -config_2017 = cms.PSet( - validityRange = cms.EventRange("0:min - 999999:max"), - - opticalFunctions = cms.VPSet( - cms.PSet( xangle = cms.double(120), fileName = cms.FileInPath("CalibPPS/ESProducers/data/optical_functions/2017/version5tim/120urad.root") ), - cms.PSet( xangle = cms.double(130), fileName = cms.FileInPath("CalibPPS/ESProducers/data/optical_functions/2017/version5tim/130urad.root") ), - cms.PSet( xangle = cms.double(140), fileName = cms.FileInPath("CalibPPS/ESProducers/data/optical_functions/2017/version5tim/140urad.root") ) +# base profile settings for 2017 +profile_base_2017 = profile_base.clone( + ctppsLHCInfo = dict( + beamEnergy = 6500 ), - scoringPlanes = cms.VPSet( - # z in cm - cms.PSet( rpId = cms.uint32(0x76180000), dirName = cms.string("XRPH_D6L5_B2"), z = cms.double(-21255.1) ), # RP 003, strip - cms.PSet( rpId = cms.uint32(2054160384), dirName = cms.string("XRPH_E6L5_B2"), z = cms.double(-21570.0) ), # RP 016, diamond - cms.PSet( rpId = cms.uint32(2023227392), dirName = cms.string("XRPH_B6L5_B2"), z = cms.double(-21955.0) ), # RP 023, pixel - - cms.PSet( rpId = cms.uint32(0x77180000), dirName = cms.string("XRPH_D6R5_B1"), z = cms.double(+21255.1) ), # RP 103, strip - cms.PSet( rpId = cms.uint32(2070937600), dirName = cms.string("XRPH_E6R5_B1"), z = cms.double(+21570.0) ), # RP 116, diamond - cms.PSet( rpId = cms.uint32(2040004608), dirName = cms.string("XRPH_B6R5_B1"), z = cms.double(+21955.0) ), # RP 123, pixel + ctppsOpticalFunctions = dict( + opticalFunctions = cms.VPSet( + cms.PSet( xangle = cms.double(120), fileName = cms.FileInPath("CalibPPS/ESProducers/data/optical_functions/2017/version5tim/120urad.root") ), + cms.PSet( xangle = cms.double(130), fileName = cms.FileInPath("CalibPPS/ESProducers/data/optical_functions/2017/version5tim/130urad.root") ), + cms.PSet( xangle = cms.double(140), fileName = cms.FileInPath("CalibPPS/ESProducers/data/optical_functions/2017/version5tim/140urad.root") ) + ), + + scoringPlanes = cms.VPSet( + # z in cm + cms.PSet( rpId = cms.uint32(0x76180000), dirName = cms.string("XRPH_D6L5_B2"), z = cms.double(-21255.1) ), # RP 003, strip + cms.PSet( rpId = cms.uint32(2054160384), dirName = cms.string("XRPH_E6L5_B2"), z = cms.double(-21570.0) ), # RP 016, diamond + cms.PSet( rpId = cms.uint32(2023227392), dirName = cms.string("XRPH_B6L5_B2"), z = cms.double(-21955.0) ), # RP 023, pixel + + cms.PSet( rpId = cms.uint32(0x77180000), dirName = cms.string("XRPH_D6R5_B1"), z = cms.double(+21255.1) ), # RP 103, strip + cms.PSet( rpId = cms.uint32(2070937600), dirName = cms.string("XRPH_E6R5_B1"), z = cms.double(+21570.0) ), # RP 116, diamond + cms.PSet( rpId = cms.uint32(2040004608), dirName = cms.string("XRPH_B6R5_B1"), z = cms.double(+21955.0) ), # RP 123, pixel + ) ) ) -ctppsOpticalFunctionsESSource.configuration.append(config_2017) - -from CalibPPS.ESProducers.ctppsInterpolatedOpticalFunctionsESSource_cfi import * -ctppsInterpolatedOpticalFunctionsESSource.lhcInfoLabel = "" - # geometry -from Geometry.VeryForwardGeometry.geometryRPFromDD_2017_cfi import * +from Geometry.VeryForwardGeometry.commons_cff import cloneGeometry +XMLIdealGeometryESSource_CTPPS, _ctppsGeometryESModule = cloneGeometry('Geometry.VeryForwardGeometry.geometryRPFromDD_2017_cfi') +ctppsCompositeESSource.compactViewTag = _ctppsGeometryESModule.compactViewTag +ctppsCompositeESSource.isRun2 = _ctppsGeometryESModule.isRun2 # local reconstruction ctppsLocalTrackLiteProducer.includeStrips = True @@ -54,3 +54,8 @@ rp_56_N = cms.uint32(103), rp_56_F = cms.uint32(123) ) + +# default list of profiles +from Validation.CTPPS.simu_config.profile_2017_preTS2_cff import profile_2017_preTS2 +from Validation.CTPPS.simu_config.profile_2017_postTS2_cff import profile_2017_postTS2 +ctppsCompositeESSource.periods = [profile_2017_postTS2, profile_2017_preTS2] diff --git a/Validation/CTPPS/python/simu_config/year_2017_postTS2_cff.py b/Validation/CTPPS/python/simu_config/year_2017_postTS2_cff.py deleted file mode 100644 index 3fe93a3313a68..0000000000000 --- a/Validation/CTPPS/python/simu_config/year_2017_postTS2_cff.py +++ /dev/null @@ -1,30 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Validation.CTPPS.simu_config.year_2017_cff import * - -# alignment -from CalibPPS.ESProducers.ctppsRPAlignmentCorrectionsDataESSourceXML_cfi import * -alignmentFile = "Validation/CTPPS/alignment/2017_postTS2.xml" -ctppsRPAlignmentCorrectionsDataESSourceXML.MisalignedFiles = [alignmentFile] -ctppsRPAlignmentCorrectionsDataESSourceXML.RealFiles = [alignmentFile] - -# aperture cuts -ctppsDirectProtonSimulation.useEmpiricalApertures = True - -ctppsDirectProtonSimulation.empiricalAperture45="-(8.92079E-07*[xangle]-0.000150214)+(([xi]<(0.000278622*[xangle]+0.0964383))*-(3.9541e-05*[xangle]-0.0115104)+([xi]>=(0.000278622*[xangle]+0.0964383))*-(0.000108249*[xangle]-0.0249303))*([xi]-(0.000278622*[xangle]+0.0964383))" -ctppsDirectProtonSimulation.empiricalAperture56="4.56961E-05+(([xi]<(0.00075625*[xangle]+0.0643361))*-(3.01107e-05*[xangle]-0.00985126)+([xi]>=(0.00075625*[xangle]+0.0643361))*-(8.95437e-05*[xangle]-0.0169474))*([xi]-(0.00075625*[xangle]+0.0643361))" - -# timing resolution -ctppsDirectProtonSimulation.timeResolutionDiamonds45 = "2 * 0.130" -ctppsDirectProtonSimulation.timeResolutionDiamonds56 = "2 * 0.130" - -# xangle/beta* options -def UseDefaultXangleBetaStar(process): - UseCrossingAngle(140, process) - -def UseDefaultXangleBetaStarDistribution(process): - UseXangleBetaStarHistogram(process, default_xangle_beta_star_file, "2017_postTS2/h2_betaStar_vs_xangle") - -# defaults -def SetDefaults(process): - UseDefaultXangleBetaStarDistribution(process) diff --git a/Validation/CTPPS/python/simu_config/year_2017_preTS2_cff.py b/Validation/CTPPS/python/simu_config/year_2017_preTS2_cff.py deleted file mode 100644 index c5f4966270e9d..0000000000000 --- a/Validation/CTPPS/python/simu_config/year_2017_preTS2_cff.py +++ /dev/null @@ -1,30 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Validation.CTPPS.simu_config.year_2017_cff import * - -# alignment -from CalibPPS.ESProducers.ctppsRPAlignmentCorrectionsDataESSourceXML_cfi import * -alignmentFile = "Validation/CTPPS/alignment/2017_preTS2.xml" -ctppsRPAlignmentCorrectionsDataESSourceXML.MisalignedFiles = [alignmentFile] -ctppsRPAlignmentCorrectionsDataESSourceXML.RealFiles = [alignmentFile] - -# aperture cuts -ctppsDirectProtonSimulation.useEmpiricalApertures = True - -ctppsDirectProtonSimulation.empiricalAperture45="-(8.71198E-07*[xangle]-0.000134726)+(([xi]<(0.000264704*[xangle]+0.081951))*-(4.32065E-05*[xangle]-0.0130746)+([xi]>=(0.000264704*[xangle]+0.081951))*-(0.000183472*[xangle]-0.0395241))*([xi]-(0.000264704*[xangle]+0.081951))" -ctppsDirectProtonSimulation.empiricalAperture56="3.43116E-05+(([xi]<(0.000626936*[xangle]+0.061324))*0.00654394+([xi]>=(0.000626936*[xangle]+0.061324))*-(0.000145164*[xangle]-0.0272919))*([xi]-(0.000626936*[xangle]+0.061324))" - -# timing resolution -ctppsDirectProtonSimulation.timeResolutionDiamonds45 = "2 * (0.0025*(x-3) + 0.080)" -ctppsDirectProtonSimulation.timeResolutionDiamonds56 = "2 * (0.0050*(x-3) + 0.060)" - -# xangle/beta* options -def UseDefaultXangleBetaStar(process): - UseCrossingAngle(140, process) - -def UseDefaultXangleBetaStarDistribution(process): - UseXangleBetaStarHistogram(process, default_xangle_beta_star_file, "2017_preTS2/h2_betaStar_vs_xangle") - -# defaults -def SetDefaults(process): - UseDefaultXangleBetaStarDistribution(process) diff --git a/Validation/CTPPS/python/simu_config/year_2018_TS1_TS2_cff.py b/Validation/CTPPS/python/simu_config/year_2018_TS1_TS2_cff.py deleted file mode 100644 index c3f5da58d53af..0000000000000 --- a/Validation/CTPPS/python/simu_config/year_2018_TS1_TS2_cff.py +++ /dev/null @@ -1,24 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Validation.CTPPS.simu_config.year_2018_cff import * - -# alignment -from CalibPPS.ESProducers.ctppsRPAlignmentCorrectionsDataESSourceXML_cfi import * -alignmentFile = "Validation/CTPPS/alignment/2018_TS1_TS2.xml" -ctppsRPAlignmentCorrectionsDataESSourceXML.MisalignedFiles = [alignmentFile] -ctppsRPAlignmentCorrectionsDataESSourceXML.RealFiles = [alignmentFile] - -# timing resolution -ctppsDirectProtonSimulation.timeResolutionDiamonds45 = "2 * ( (x<10)*(-0.0086*(x-10) + 0.100) + (x>=10)*(0.100) )" -ctppsDirectProtonSimulation.timeResolutionDiamonds56 = "2 * ( (x<8) *(-0.0100*(x-8) + 0.100) + (x>=8) *(-0.0027*(x-8) + 0.100) )" - -# xangle/beta* options -def UseDefaultXangleBetaStar(process): - UseCrossingAngle(140, process) - -def UseDefaultXangleBetaStarDistribution(process): - UseXangleBetaStarHistogram(process, default_xangle_beta_star_file, "2018_TS1_TS2/h2_betaStar_vs_xangle") - -# defaults -def SetDefaults(process): - UseDefaultXangleBetaStarDistribution(process) diff --git a/Validation/CTPPS/python/simu_config/year_2018_cff.py b/Validation/CTPPS/python/simu_config/year_2018_cff.py index c76d144a4d511..461551db4081b 100644 --- a/Validation/CTPPS/python/simu_config/year_2018_cff.py +++ b/Validation/CTPPS/python/simu_config/year_2018_cff.py @@ -2,19 +2,20 @@ from Validation.CTPPS.simu_config.base_cff import * -# beam optics -from CalibPPS.ESProducers.ctppsOpticalFunctionsESSource_cfi import * - -config_2018 = cms.PSet( - validityRange = cms.EventRange("0:min - 999999:max"), +# base profile settings for 2018 +profile_base_2018 = profile_base.clone( + ctppsLHCInfo = dict( + beamEnergy = 6500 + ), - opticalFunctions = cms.VPSet( + ctppsOpticalFunctions = dict( + opticalFunctions = cms.VPSet( cms.PSet( xangle = cms.double(120), fileName = cms.FileInPath("CalibPPS/ESProducers/data/optical_functions/2018/version6/120urad.root") ), cms.PSet( xangle = cms.double(130), fileName = cms.FileInPath("CalibPPS/ESProducers/data/optical_functions/2018/version6/130urad.root") ), cms.PSet( xangle = cms.double(140), fileName = cms.FileInPath("CalibPPS/ESProducers/data/optical_functions/2018/version6/140urad.root") ) - ), + ), - scoringPlanes = cms.VPSet( + scoringPlanes = cms.VPSet( # z in cm cms.PSet( rpId = cms.uint32(2014838784), dirName = cms.string("XRPH_D6L5_B2"), z = cms.double(-21255.1) ), # RP 003, pixel cms.PSet( rpId = cms.uint32(2054160384), dirName = cms.string("XRPH_E6L5_B2"), z = cms.double(-21570.0) ), # RP 016, diamond @@ -23,30 +24,20 @@ cms.PSet( rpId = cms.uint32(2031616000), dirName = cms.string("XRPH_D6R5_B1"), z = cms.double(+21255.1) ), # RP 103, pixel cms.PSet( rpId = cms.uint32(2070937600), dirName = cms.string("XRPH_E6R5_B1"), z = cms.double(+21570.0) ), # RP 116, diamond cms.PSet( rpId = cms.uint32(2040004608), dirName = cms.string("XRPH_B6R5_B1"), z = cms.double(+21955.0) ), # RP 123, pixel + ) + ), + + ctppsDirectSimuData = dict( + empiricalAperture45 = cms.string("-(8.44219E-07*[xangle]-0.000100957)+(([xi]<(0.000247185*[xangle]+0.101599))*-(1.40289E-05*[xangle]-0.00727237)+([xi]> = (0.000247185*[xangle]+0.101599))*-(0.000107811*[xangle]-0.0261867))*([xi]-(0.000247185*[xangle]+0.101599))"), + empiricalAperture56 = cms.string("-(-4.74758E-07*[xangle]+3.0881E-05)+(([xi]<(0.000727859*[xangle]+0.0722653))*-(2.43968E-05*[xangle]-0.0085461)+([xi]> = (0.000727859*[xangle]+0.0722653))*-(7.19216E-05*[xangle]-0.0148267))*([xi]-(0.000727859*[xangle]+0.0722653))") ) ) -ctppsOpticalFunctionsESSource.configuration.append(config_2018) - -from CalibPPS.ESProducers.ctppsInterpolatedOpticalFunctionsESSource_cfi import * -ctppsInterpolatedOpticalFunctionsESSource.lhcInfoLabel = "" - # geometry -from Geometry.VeryForwardGeometry.geometryRPFromDD_2018_cfi import * - -# alignment -from CalibPPS.ESProducers.ctppsRPAlignmentCorrectionsDataESSourceXML_cfi import * -alignmentFile = "Validation/CTPPS/alignment/2018.xml" -ctppsRPAlignmentCorrectionsDataESSourceXML.MisalignedFiles = [alignmentFile] -ctppsRPAlignmentCorrectionsDataESSourceXML.RealFiles = [alignmentFile] - -# aperture cuts -ctppsDirectProtonSimulation.useEmpiricalApertures = True - -ctppsDirectProtonSimulation.empiricalAperture45="-(8.44219E-07*[xangle]-0.000100957)+(([xi]<(0.000247185*[xangle]+0.101599))*-(1.40289E-05*[xangle]-0.00727237)+([xi]>=(0.000247185*[xangle]+0.101599))*-(0.000107811*[xangle]-0.0261867))*([xi]-(0.000247185*[xangle]+0.101599))" - -ctppsDirectProtonSimulation.empiricalAperture56="-(-4.74758E-07*[xangle]+3.0881E-05)+(([xi]<(0.000727859*[xangle]+0.0722653))*-(2.43968E-05*[xangle]-0.0085461)+([xi]>=(0.000727859*[xangle]+0.0722653))*-(7.19216E-05*[xangle]-0.0148267))*([xi]-(0.000727859*[xangle]+0.0722653))" - +from Geometry.VeryForwardGeometry.commons_cff import cloneGeometry +XMLIdealGeometryESSource_CTPPS, _ctppsGeometryESModule = cloneGeometry('Geometry.VeryForwardGeometry.geometryRPFromDD_2018_cfi') +ctppsCompositeESSource.compactViewTag = _ctppsGeometryESModule.compactViewTag +ctppsCompositeESSource.isRun2 = _ctppsGeometryESModule.isRun2 # local reconstruction ctppsLocalTrackLiteProducer.includeStrips = False @@ -66,3 +57,9 @@ rp_56_N = cms.uint32(103), rp_56_F = cms.uint32(123) ) + +# default list of profiles +from Validation.CTPPS.simu_config.profile_2018_preTS1_cff import profile_2018_preTS1 +from Validation.CTPPS.simu_config.profile_2018_postTS2_cff import profile_2018_postTS2 +from Validation.CTPPS.simu_config.profile_2018_TS1_TS2_cff import profile_2018_TS1_TS2 +ctppsCompositeESSource.periods = [profile_2018_postTS2, profile_2018_preTS1, profile_2018_TS1_TS2] diff --git a/Validation/CTPPS/python/simu_config/year_2018_postTS2_cff.py b/Validation/CTPPS/python/simu_config/year_2018_postTS2_cff.py deleted file mode 100644 index 48898bb91244b..0000000000000 --- a/Validation/CTPPS/python/simu_config/year_2018_postTS2_cff.py +++ /dev/null @@ -1,24 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Validation.CTPPS.simu_config.year_2018_cff import * - -# alignment -from CalibPPS.ESProducers.ctppsRPAlignmentCorrectionsDataESSourceXML_cfi import * -alignmentFile = "Validation/CTPPS/alignment/2018_postTS2.xml" -ctppsRPAlignmentCorrectionsDataESSourceXML.MisalignedFiles = [alignmentFile] -ctppsRPAlignmentCorrectionsDataESSourceXML.RealFiles = [alignmentFile] - -# timing resolution -ctppsDirectProtonSimulation.timeResolutionDiamonds45 = "2 * (-0.0031 * (x - 3) + 0.16)" -ctppsDirectProtonSimulation.timeResolutionDiamonds56 = "2 * ( (x<10)*(-0.0057*(x-10) + 0.110) + (x>=10)*(-0.0022*(x-10) + 0.110) )" - -# xangle/beta* options -def UseDefaultXangleBetaStar(process): - UseCrossingAngle(140, process) - -def UseDefaultXangleBetaStarDistribution(process): - UseXangleBetaStarHistogram(process, default_xangle_beta_star_file, "2018_postTS2/h2_betaStar_vs_xangle") - -# defaults -def SetDefaults(process): - UseDefaultXangleBetaStarDistribution(process) diff --git a/Validation/CTPPS/python/simu_config/year_2018_preTS1_cff.py b/Validation/CTPPS/python/simu_config/year_2018_preTS1_cff.py deleted file mode 100644 index 497025f2c1d0c..0000000000000 --- a/Validation/CTPPS/python/simu_config/year_2018_preTS1_cff.py +++ /dev/null @@ -1,25 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Validation.CTPPS.simu_config.year_2018_cff import * - -# alignment -from CalibPPS.ESProducers.ctppsRPAlignmentCorrectionsDataESSourceXML_cfi import * -alignmentFile = "Validation/CTPPS/alignment/2018_preTS1.xml" -ctppsRPAlignmentCorrectionsDataESSourceXML.MisalignedFiles = [alignmentFile] -ctppsRPAlignmentCorrectionsDataESSourceXML.RealFiles = [alignmentFile] - -# timing not available in this period -ctppsLocalTrackLiteProducer.includeDiamonds = False -ctppsDirectProtonSimulation.timeResolutionDiamonds45 = "999" -ctppsDirectProtonSimulation.timeResolutionDiamonds56 = "999" - -# xangle/beta* options -def UseDefaultXangleBetaStar(process): - UseCrossingAngle(140, process) - -def UseDefaultXangleBetaStarDistribution(process): - UseXangleBetaStarHistogram(process, default_xangle_beta_star_file, "2018_preTS1/h2_betaStar_vs_xangle") - -# defaults -def SetDefaults(process): - UseDefaultXangleBetaStarDistribution(process) diff --git a/Validation/CTPPS/python/simu_config/year_2021_cff.py b/Validation/CTPPS/python/simu_config/year_2021_cff.py new file mode 100644 index 0000000000000..b9084f970c728 --- /dev/null +++ b/Validation/CTPPS/python/simu_config/year_2021_cff.py @@ -0,0 +1,63 @@ +import FWCore.ParameterSet.Config as cms + +from Validation.CTPPS.simu_config.base_cff import * + +# base profile settings for 2021 +profile_base_2021 = profile_base.clone( + ctppsLHCInfo = dict( + beamEnergy = 6500 + ), + + ctppsOpticalFunctions = dict( + opticalFunctions = cms.VPSet( + cms.PSet( xangle = cms.double(110.444), fileName = cms.FileInPath("CalibPPS/ESProducers/data/optical_functions/2021/version_pre3/110.444urad.root") ), + cms.PSet( xangle = cms.double(184.017), fileName = cms.FileInPath("CalibPPS/ESProducers/data/optical_functions/2021/version_pre3/184.017urad.root") ) + ), + + scoringPlanes = cms.VPSet( + # z in cm + cms.PSet( rpId = cms.uint32(2014838784), dirName = cms.string("XRPH_D6L5_B2"), z = cms.double(-21255.1) ), # RP 003, pixel + cms.PSet( rpId = cms.uint32(2056257536), dirName = cms.string("XRPH_A6L5_B2"), z = cms.double(-21507.8) ), # RP 022, diamond + cms.PSet( rpId = cms.uint32(2054160384), dirName = cms.string("XRPH_E6L5_B2"), z = cms.double(-21570.0) ), # RP 016, diamond + cms.PSet( rpId = cms.uint32(2023227392), dirName = cms.string("XRPH_B6L5_B2"), z = cms.double(-21955.0) ), # RP 023, pixel + + cms.PSet( rpId = cms.uint32(2031616000), dirName = cms.string("XRPH_D6R5_B1"), z = cms.double(+21255.1) ), # RP 103, pixel + cms.PSet( rpId = cms.uint32(2073034752), dirName = cms.string("XRPH_A6R5_B1"), z = cms.double(+21507.8) ), # RP 122, diamond + cms.PSet( rpId = cms.uint32(2070937600), dirName = cms.string("XRPH_E6R5_B1"), z = cms.double(+21570.0) ), # RP 116, diamond + cms.PSet( rpId = cms.uint32(2040004608), dirName = cms.string("XRPH_B6R5_B1"), z = cms.double(+21955.0) ), # RP 123, pixel + ) + ), + + ctppsDirectSimuData = dict( + empiricalAperture45 = cms.string("1E3*([xi] - 0.20)"), + empiricalAperture56 = cms.string("1E3*([xi] - 0.20)") + ) +) + +# geometry +from Geometry.VeryForwardGeometry.geometryRPFromDD_2021_cfi import * +ctppsCompositeESSource.compactViewTag = ctppsGeometryESModule.compactViewTag +del ctppsGeometryESModule # this functionality is replaced by the composite ES source + +# local reconstruction +ctppsLocalTrackLiteProducer.includeStrips = False +ctppsLocalTrackLiteProducer.includePixels = True +ctppsLocalTrackLiteProducer.includeDiamonds = True + +reco_local = cms.Sequence( + ctppsPixelLocalTracks + * ctppsDiamondLocalReconstruction + * ctppsLocalTrackLiteProducer +) + +# RP ids +rpIds = cms.PSet( + rp_45_F = cms.uint32(23), + rp_45_N = cms.uint32(3), + rp_56_N = cms.uint32(103), + rp_56_F = cms.uint32(123) +) + +# default list of profiles +from Validation.CTPPS.simu_config.profile_2021_default_cff import profile_2021_default +ctppsCompositeESSource.periods = [profile_2021_default] diff --git a/Validation/CTPPS/test/BuildFile.xml b/Validation/CTPPS/test/BuildFile.xml new file mode 100644 index 0000000000000..26f5f2ac92937 --- /dev/null +++ b/Validation/CTPPS/test/BuildFile.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/TopQuarkAnalysis/Examples/test/runtestTqafExamples.cpp b/Validation/CTPPS/test/TestDriver.cc similarity index 100% rename from TopQuarkAnalysis/Examples/test/runtestTqafExamples.cpp rename to Validation/CTPPS/test/TestDriver.cc diff --git a/Validation/CTPPS/test/simu/run_multiple b/Validation/CTPPS/test/simu/run_multiple index a8a0d4ffefa36..9b42add2fe789 100755 --- a/Validation/CTPPS/test/simu/run_multiple +++ b/Validation/CTPPS/test/simu/run_multiple @@ -1,7 +1,22 @@ #!/bin/bash +n_events="1E4" +if [ -n "$1" ] +then + n_events="$1" +fi + +inputDir="." +if [ -n "$LOCAL_TEST_DIR" ] +then + inputDir="$LOCAL_TEST_DIR" + n_events="1E2" +fi + #---------------------------------------------------------------------------------------------------- +pids="" + function RunOne() { local config="$1" @@ -9,27 +24,41 @@ function RunOne() local cfg="simu_${config}_cfg.py" local log="simu_${config}.log" + local out_lhcInfo="simu_${config}_lhcInfo.root" local out_tracks="simu_${config}_tracks.root" local out_protons="simu_${config}_protons.root" - cat "template_cfg.py" | sed "\ + cat "$inputDir/template_cfg.py" | sed "\ s|\$ERA|$era|;\ s|\$CONFIG|$config|;\ + s|\$N_EVENTS|$n_events|;\ + s|\$OUT_LHCINFO|$out_lhcInfo|;\ s|\$OUT_TRACKS|$out_tracks|;\ s|\$OUT_PROTONS|$out_protons|;\ " > "$cfg" cmsRun "$cfg" &> "$log" & + pids="$pids $!" } #---------------------------------------------------------------------------------------------------- -RunOne "2016_preTS2" "Run2_2016" -RunOne "2016_postTS2" "Run2_2016" +RunOne "2016" "Run2_2016" + +RunOne "2017" "Run2_2017" + +RunOne "2018" "Run2_2018" + +RunOne "2021" "Run3" -RunOne "2017_preTS2" "Run2_2017" -RunOne "2017_postTS2" "Run2_2017" +rc=0 +for pid in $pids +do + wait $pid + if [ $? -ne 0 ] + then + rc=1 + fi +done -RunOne "2018_preTS1" "Run2_2018" -RunOne "2018_TS1_TS2" "Run2_2018" -RunOne "2018_postTS2" "Run2_2018" +exit $rc diff --git a/Validation/CTPPS/test/simu/template_cfg.py b/Validation/CTPPS/test/simu/template_cfg.py index cdac30623928d..5d63edc0746f6 100644 --- a/Validation/CTPPS/test/simu/template_cfg.py +++ b/Validation/CTPPS/test/simu/template_cfg.py @@ -6,7 +6,6 @@ # load config import Validation.CTPPS.simu_config.year_$CONFIG_cff as config process.load("Validation.CTPPS.simu_config.year_$CONFIG_cff") -config.UseXangleBetaStarDistribution(process,"../../../../CalibPPS/ESProducers/data/xangle_beta_distributions/version1.root") # minimal logger settings process.MessageLogger = cms.Service("MessageLogger", @@ -19,9 +18,13 @@ # number of events process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(1000) + input = cms.untracked.int32(int($N_EVENTS)) ) +# LHCInfo plotter +process.load("Validation.CTPPS.ctppsLHCInfoPlotter_cfi") +process.ctppsLHCInfoPlotter.outputFile = "$OUT_LHCINFO" + # track distribution plotter process.ctppsTrackDistributionPlotter = cms.EDAnalyzer("CTPPSTrackDistributionPlotter", tagTracks = cms.InputTag("ctppsLocalTrackLiteProducer"), @@ -60,6 +63,7 @@ * process.reco_local * process.ctppsProtons + * process.ctppsLHCInfoPlotter * process.ctppsTrackDistributionPlotter * process.ctppsProtonReconstructionPlotter -) +) \ No newline at end of file diff --git a/Validation/CheckOverlap/test/python/runHO_cfg.py b/Validation/CheckOverlap/test/python/runHO_cfg.py index ed4d4a429ced5..b50df8e1338c8 100644 --- a/Validation/CheckOverlap/test/python/runHO_cfg.py +++ b/Validation/CheckOverlap/test/python/runHO_cfg.py @@ -6,6 +6,7 @@ type = cms.string('CheckOverlap'), Resolution = cms.untracked.int32(1000), NodeNames = cms.untracked.vstring('MBAT', 'MBBTL', 'MBBTR', 'MBBT', - 'MBBTC', 'MBBT_R1P', 'MBBT_R1M') + 'MBBTC', 'MBBT_R1P', 'MBBT_R1M', + 'MBBT_R1PX', 'MBBT_R1MX') )) diff --git a/Validation/Configuration/python/globalValidation_cff.py b/Validation/Configuration/python/globalValidation_cff.py index 0a98acf89ad69..8ea73c681b963 100644 --- a/Validation/Configuration/python/globalValidation_cff.py +++ b/Validation/Configuration/python/globalValidation_cff.py @@ -36,6 +36,7 @@ from Validation.RecoParticleFlow.PFClusterValidation_cff import * from Validation.RPCRecHits.rpcRecHitValidation_cfi import * from Validation.DTRecHits.DTRecHitQuality_cfi import * +from Validation.CSCRecHits.cscRecHitValidation_cfi import * from Validation.RecoTau.DQMMCValidation_cfi import * from Validation.L1T.L1Validator_cfi import * from Validation.SiPixelPhase1ConfigV.SiPixelPhase1OfflineDQM_sourceV_cff import * @@ -94,6 +95,7 @@ + pfMuonValidationSequence + pfClusterValidationSequence + rpcRecHitValidation_step + + cscRecHitValidation + dtLocalRecoValidation_no2D + pfTauRunDQMValidation + bTagPlotsMCbcl @@ -211,6 +213,7 @@ + validationMuonRPCDigis + recoMuonValidation + rpcRecHitValidation_step + + cscRecHitValidation + dtLocalRecoValidation_no2D + muonIdValDQMSeq ) @@ -219,8 +222,13 @@ _phase_1_globalValidation = globalValidation.copy() _phase_1_globalValidation += siPixelPhase1OfflineDQM_sourceV + +_phase_1_globalValidationPixelTrackingOnly = globalValidationPixelTrackingOnly.copy() +_phase_1_globalValidationPixelTrackingOnly += siPixelPhase1ValidationPixelTrackingOnly_sourceV + from Configuration.Eras.Modifier_phase1Pixel_cff import phase1Pixel (phase1Pixel & ~fastSim).toReplaceWith( globalValidation, _phase_1_globalValidation ) #module siPixelPhase1OfflineDQM_sourceV can't run in FastSim since siPixelClusters of type edmNew::DetSetVector are not produced +(phase1Pixel & ~fastSim).toReplaceWith( globalValidationPixelTrackingOnly, _phase_1_globalValidationPixelTrackingOnly ) #module siPixelPhase1OfflineDQM_sourceV can't run in FastSim since siPixelClusters of type edmNew::DetSetVector are not produced _run3_globalValidation = globalValidation.copy() _run3_globalValidation += gemSimValid diff --git a/Validation/Configuration/python/hgcalSimValid_cff.py b/Validation/Configuration/python/hgcalSimValid_cff.py index b7798ae84c4fb..4a3128e97816d 100644 --- a/Validation/Configuration/python/hgcalSimValid_cff.py +++ b/Validation/Configuration/python/hgcalSimValid_cff.py @@ -1,6 +1,9 @@ import FWCore.ParameterSet.Config as cms -from SimCalorimetry.HGCalSimProducers.hgcHitAssociation_cfi import lcAssocByEnergyScoreProducer +from SimCalorimetry.HGCalSimProducers.hgcHitAssociation_cfi import lcAssocByEnergyScoreProducer, scAssocByEnergyScoreProducer +from SimCalorimetry.HGCalAssociatorProducers.LCToCPAssociation_cfi import layerClusterCaloParticleAssociation as layerClusterCaloParticleAssociationProducer +from SimCalorimetry.HGCalAssociatorProducers.LCToSCAssociation_cfi import layerClusterSimClusterAssociation as layerClusterSimClusterAssociationProducer + from Validation.HGCalValidation.simhitValidation_cff import * from Validation.HGCalValidation.digiValidation_cff import * from Validation.HGCalValidation.rechitValidation_cff import * @@ -17,7 +20,9 @@ VariablePtBins=[10., 30., 80., 120., 250., 600.], DeltaPtOvPtHistoParameter = dict(EROn=True,EREtaMax=3.0, EREtaMin=1.6, slicingOn=True)) -hgcalAssociators = cms.Task(lcAssocByEnergyScoreProducer) +hgcalAssociators = cms.Task(lcAssocByEnergyScoreProducer, layerClusterCaloParticleAssociationProducer, + scAssocByEnergyScoreProducer, layerClusterSimClusterAssociationProducer, + ) hgcalValidation = cms.Sequence(hgcalSimHitValidationEE + hgcalSimHitValidationHEF diff --git a/Validation/Configuration/python/postValidation_cff.py b/Validation/Configuration/python/postValidation_cff.py index 8f310eacfce2e..d2ad7fbff750d 100644 --- a/Validation/Configuration/python/postValidation_cff.py +++ b/Validation/Configuration/python/postValidation_cff.py @@ -66,6 +66,7 @@ from Validation.MuonGEMDigis.PostProcessor_cff import * from Validation.MuonGEMRecHits.PostProcessor_cff import * from Validation.MuonME0Validation.PostProcessor_cff import * +from Validation.MuonCSCDigis.PostProcessor_cff import * from Validation.HGCalValidation.HGCalPostProcessor_cff import * from Validation.MtdValidation.MtdPostProcessor_cff import * @@ -83,6 +84,7 @@ + MuonGEMRecHitsPostProcessors + MuonME0DigisPostProcessors + MuonME0SegPostProcessors + + MuonCSCDigisPostProcessors + rpcRecHitPostValidation_step ) @@ -115,8 +117,13 @@ _phase1_postValidation = postValidation.copy() _phase1_postValidation += siPixelPhase1OfflineDQM_harvestingV + +_phase1_postValidation_trackingOnly = postValidation_trackingOnly.copy() +_phase1_postValidation_trackingOnly += siPixelPhase1OfflineDQM_harvestingV + from Configuration.Eras.Modifier_phase1Pixel_cff import phase1Pixel phase1Pixel.toReplaceWith( postValidation, _phase1_postValidation ) +phase1Pixel.toReplaceWith( postValidation_trackingOnly, _phase1_postValidation_trackingOnly) _run3_postValidation = postValidation.copy() _run3_postValidation += MuonGEMHitsPostProcessors diff --git a/Validation/Configuration/test/HarvestingGlobalValidation_RelVal.py b/Validation/Configuration/test/HarvestingGlobalValidation_RelVal.py index e727bad4ee21f..a8487d1d3eb8e 100644 --- a/Validation/Configuration/test/HarvestingGlobalValidation_RelVal.py +++ b/Validation/Configuration/test/HarvestingGlobalValidation_RelVal.py @@ -34,7 +34,7 @@ # Other statements #Adding DQMFileSaver to the message logger configuration -process.MessageLogger.categories.append('DQMFileSaver') +process.MessageLogger.DQMFileSaver=dict() process.MessageLogger.cout.DQMFileSaver = cms.untracked.PSet( limit = cms.untracked.int32(1000000) ) diff --git a/Validation/EventGenerator/test/convertLHE2HepMCReweightandValidate8TeV_cfg.py b/Validation/EventGenerator/test/convertLHE2HepMCReweightandValidate8TeV_cfg.py index 484a81600a5fa..c9a4cb96fe460 100644 --- a/Validation/EventGenerator/test/convertLHE2HepMCReweightandValidate8TeV_cfg.py +++ b/Validation/EventGenerator/test/convertLHE2HepMCReweightandValidate8TeV_cfg.py @@ -1,15 +1,7 @@ import FWCore.ParameterSet.Config as cms process = cms.Process("convertLHE2HepMC") -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories=cms.untracked.vstring('FwkJob' - ,'FwkReport' - ,'FwkSummary' - ,'Root_NoDictionary' - ,'Generator' - ,'LHEInterface' - ) - +process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.INFO = cms.untracked.PSet(limit = cms.untracked.int32(-1)) process.MessageLogger.cerr.Generator = cms.untracked.PSet(limit = cms.untracked.int32(0)) diff --git a/Validation/Geometry/src/MaterialBudgetHcalHistos.cc b/Validation/Geometry/src/MaterialBudgetHcalHistos.cc index ae2093e538f9a..fa8858838a1ee 100644 --- a/Validation/Geometry/src/MaterialBudgetHcalHistos.cc +++ b/Validation/Geometry/src/MaterialBudgetHcalHistos.cc @@ -10,6 +10,8 @@ #include "FWCore/ServiceRegistry/interface/Service.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "DD4hep/Filter.h" + #include #include @@ -43,6 +45,7 @@ MaterialBudgetHcalHistos::MaterialBudgetHcalHistos(const edm::ParameterSet& p) { } void MaterialBudgetHcalHistos::fillBeginJob(const DDCompactView& cpv) { + constexpr int32_t addLevel = 0; if (fillHistos_) { std::string attribute = "ReadOutName"; std::string value = "HcalHits"; @@ -66,7 +69,7 @@ void MaterialBudgetHcalHistos::fillBeginJob(const DDCompactView& cpv) { << value << " has " << hfNames_.size() << " elements"; for (unsigned int i = 0; i < hfNames_.size(); i++) { int level = static_cast(temp[i]); - hfLevels_.push_back(level); + hfLevels_.push_back(level + addLevel); edm::LogVerbatim("MaterialBudgetFull") << "MaterialBudgetHcalHistos: HF[" << i << "] = " << hfNames_[i] << " at level " << hfLevels_[i]; } @@ -90,6 +93,7 @@ void MaterialBudgetHcalHistos::fillBeginJob(const DDCompactView& cpv) { } void MaterialBudgetHcalHistos::fillBeginJob(const cms::DDCompactView& cpv) { + constexpr int32_t addLevel = 1; if (fillHistos_) { std::string attribute = "ReadOutName"; std::string value = "HcalHits"; @@ -110,7 +114,7 @@ void MaterialBudgetHcalHistos::fillBeginJob(const cms::DDCompactView& cpv) { edm::LogVerbatim("MaterialBudgetFull") << "MaterialBudgetHcalHistos: Names to be tested for " << attribute << " = " << value << " has " << hfNames_.size() << " elements"; for (unsigned int i = 0; i < hfNames_.size(); i++) { - hfLevels_.push_back(temp[i]); + hfLevels_.push_back(temp[i] + addLevel); edm::LogVerbatim("MaterialBudgetFull") << "MaterialBudgetHcalHistos: HF[" << i << "] = " << hfNames_[i] << " at level " << hfLevels_[i]; } @@ -171,8 +175,8 @@ void MaterialBudgetHcalHistos::fillPerStep(const G4Step* aStep) { int idOld = id_; const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable(); - std::string name = touch->GetVolume(0)->GetName(); - const std::string& matName = material->GetName(); + std::string name = (static_cast(dd4hep::dd::noNamespace(touch->GetVolume(0)->GetName()))); + std::string matName = (static_cast(dd4hep::dd::noNamespace(material->GetName()))); if (printSum_) { bool found = false; for (unsigned int ii = 0; ii < matList_.size(); ii++) { @@ -272,9 +276,10 @@ void MaterialBudgetHcalHistos::fillPerStep(const G4Step* aStep) { if (id_ == 21) { if (!isItHF(aStep->GetPostStepPoint()->GetTouchable())) { if ((abseta >= etaMinP_) && (abseta <= etaMaxP_)) - edm::LogVerbatim("MaterialBudget") - << "MaterialBudgetHcalHistos: After HF in " << name << ":" - << aStep->GetPostStepPoint()->GetTouchable()->GetVolume(0)->GetName() << " calls fillHisto with " << id_; + edm::LogVerbatim("MaterialBudget") << "MaterialBudgetHcalHistos: After HF in " << name << ":" + << static_cast(dd4hep::dd::noNamespace( + aStep->GetPostStepPoint()->GetTouchable()->GetVolume(0)->GetName())) + << " calls fillHisto with " << id_; fillHisto(idOld); ++id_; layer_ = 0; @@ -541,8 +546,18 @@ std::vector MaterialBudgetHcalHistos::getNames(DDFilteredView& fv) std::vector MaterialBudgetHcalHistos::getNames(cms::DDFilteredView& fv) { std::vector tmp; - const std::vector notIn = { - "CALO", "HCal", "MBBTL", "MBBTR", "MBBTC", "MBAT", "MBBT_R1M", "MBBT_R1P", "VCAL", "HVQF"}; + const std::vector notIn = {"CALO", + "HCal", + "MBBTL", + "MBBTR", + "MBBTC", + "MBAT", + "MBBT_R1M", + "MBBT_R1P", + "MBBT_R1MX", + "MBBT_R1PX", + "VCAL", + "HVQF"}; while (fv.firstChild()) { const std::string n{fv.name().data(), fv.name().size()}; if (std::find(notIn.begin(), notIn.end(), n) == notIn.end()) { @@ -585,7 +600,8 @@ bool MaterialBudgetHcalHistos::isItHF(const G4VTouchable* touch) { int levels = ((touch->GetHistoryDepth()) + 1); for (unsigned int it = 0; it < hfNames_.size(); it++) { if (levels >= hfLevels_[it]) { - std::string name = touch->GetVolume(levels - hfLevels_[it])->GetName(); + std::string name = + (static_cast(dd4hep::dd::noNamespace(touch->GetVolume(levels - hfLevels_[it])->GetName()))); if (name == hfNames_[it]) { return true; } diff --git a/Validation/Geometry/test/dddvsdb/runDDDvsDBGeometryValidation.sh b/Validation/Geometry/test/dddvsdb/runDDDvsDBGeometryValidation.sh index 7c76f4d5fa580..1087501d10cab 100755 --- a/Validation/Geometry/test/dddvsdb/runDDDvsDBGeometryValidation.sh +++ b/Validation/Geometry/test/dddvsdb/runDDDvsDBGeometryValidation.sh @@ -49,6 +49,7 @@ sed -i "{s/GeometryExtended/${geometry}/}" geometryxmlwriter.py > GeometryValid cmsRun geometryxmlwriter.py >> GeometryValidation.log cp $CMSSW_RELEASE_BASE/src/CondTools/Geometry/test/geometrywriter.py . +# cp $CMSSW_BASE/src/CondTools/Geometry/test/geometrywriter.py . sed -i "{s/GeometryExtended/${geometry}/}" geometrywriter.py >> GeometryValidation.log sed -i "{s/geTagXX.xml/geSingleBigFile.xml/g}" geometrywriter.py >> GeometryValidation.log cmsRun geometrywriter.py >> GeometryValidation.log @@ -117,16 +118,15 @@ mkdir tkddd cp myfile.db tkdblocal cd tkdb -# cp $CMSSW_BASE/src/Geometry/TrackerGeometryBuilder/test/trackerModuleInfoDB_cfg.py . -cp $CMSSW_RELEASE_BASE/src/Geometry/TrackerGeometryBuilder/test/trackerModuleInfoDB_cfg.py . -sed -i "{/process.GlobalTag.globaltag/d}" trackerModuleInfoDB_cfg.py >> ../GeometryValidation.log -sed -i "/FrontierConditions_GlobalTag_cff/ a\from Configuration.AlCa.GlobalTag import GlobalTag\nprocess.GlobalTag = GlobalTag(process.GlobalTag, '${gtag}', '')" trackerModuleInfoDB_cfg.py >> ../GeometryValidation.log -sed -i "/FrontierConditions_GlobalTag_cff/ a\process.XMLFromDBSource.label = cms.string('${condlabel}')" trackerModuleInfoDB_cfg.py >> ../GeometryValidation.log +cp $CMSSW_RELEASE_BASE/src/Geometry/TrackerGeometryBuilder/test/python/testTrackerModuleInfoDB_cfg.py . +sed -i "{/process.GlobalTag.globaltag/d}" testTrackerModuleInfoDB_cfg.py >> ../GeometryValidation.log +sed -i "/FrontierConditions_GlobalTag_cff/ a\from Configuration.AlCa.GlobalTag import GlobalTag\nprocess.GlobalTag = GlobalTag(process.GlobalTag, '${gtag}', '')" testTrackerModuleInfoDB_cfg.py >> ../GeometryValidation.log +sed -i "/FrontierConditions_GlobalTag_cff/ a\process.XMLFromDBSource.label = cms.string('${condlabel}')" testTrackerModuleInfoDB_cfg.py >> ../GeometryValidation.log if ( "${roundFlag}" == round ) then - sed -i "/tolerance/s/1.0e-23/${tolerance}/" trackerModuleInfoDB_cfg.py >> GeometryValidation.log + sed -i "/tolerance/s/1.0e-23/${tolerance}/" testTrackerModuleInfoDB_cfg.py >> GeometryValidation.log endif -cmsRun trackerModuleInfoDB_cfg.py >> ../GeometryValidation.log -mv trackerModuleInfoDB_cfg.py ../ +cmsRun testTrackerModuleInfoDB_cfg.py >> ../GeometryValidation.log +mv testTrackerModuleInfoDB_cfg.py ../ if ( -s ModuleInfo.log ) then echo "TK test from DB run ok" | tee -a ../GeometryValidation.log else @@ -135,8 +135,8 @@ else endif cd ../tkdblocal -# cp $CMSSW_BASE/src/Geometry/TrackerGeometryBuilder/test/trackerModuleInfoLocalDB_cfg.py . -cp $CMSSW_RELEASE_BASE/src/Geometry/TrackerGeometryBuilder/test/trackerModuleInfoLocalDB_cfg.py . +cp $CMSSW_RELEASE_BASE/src/Geometry/TrackerGeometryBuilder/test/python/trackerModuleInfoLocalDB_cfg.py . +# cp $CMSSW_BASE/src/Geometry/TrackerGeometryBuilder/test/python/trackerModuleInfoLocalDB_cfg.py . sed -i "{/process.GlobalTag.globaltag/d}" trackerModuleInfoLocalDB_cfg.py >> ../GeometryValidation.log sed -i "/FrontierConditions_GlobalTag_cff/ a\from Configuration.AlCa.GlobalTag import GlobalTag\nprocess.GlobalTag = GlobalTag(process.GlobalTag, '${gtag}', '')" trackerModuleInfoLocalDB_cfg.py >> ../GeometryValidation.log sed -i "/FrontierConditions_GlobalTag_cff/ a\process.XMLFromDBSource.label = cms.string('${condlabel}')" trackerModuleInfoLocalDB_cfg.py >> ../GeometryValidation.log @@ -153,16 +153,15 @@ else endif cd ../tkddd -# cp $CMSSW_BASE/src/Geometry/TrackerGeometryBuilder/test/trackerModuleInfoDDD_cfg.py . -cp $CMSSW_RELEASE_BASE/src/Geometry/TrackerGeometryBuilder/test/trackerModuleInfoDDD_cfg.py . -sed -i "{s/GeometryExtended/${geometry}/}" trackerModuleInfoDDD_cfg.py >> ../GeometryValidation.log -sed -i "{/process.GlobalTag.globaltag/d}" trackerModuleInfoDDD_cfg.py >> ../GeometryValidation.log -sed -i "/FrontierConditions_GlobalTag_cff/ a\from Configuration.AlCa.GlobalTag import GlobalTag\nprocess.GlobalTag = GlobalTag(process.GlobalTag, '${gtag}', '')" trackerModuleInfoDDD_cfg.py >> ../GeometryValidation.log +cp $CMSSW_RELEASE_BASE/src/Geometry/TrackerGeometryBuilder/test/python/testTrackerModuleInfoDDD_cfg.py . +sed -i "{s/GeometryExtended/${geometry}/}" testTrackerModuleInfoDDD_cfg.py >> ../GeometryValidation.log +sed -i "{/process.GlobalTag.globaltag/d}" testTrackerModuleInfoDDD_cfg.py >> ../GeometryValidation.log +sed -i "/FrontierConditions_GlobalTag_cff/ a\from Configuration.AlCa.GlobalTag import GlobalTag\nprocess.GlobalTag = GlobalTag(process.GlobalTag, '${gtag}', '')" testTrackerModuleInfoDDD_cfg.py >> ../GeometryValidation.log if ( "${roundFlag}" == round ) then - sed -i "/tolerance/s/1.0e-23/${tolerance}/" trackerModuleInfoDDD_cfg.py >> GeometryValidation.log + sed -i "/tolerance/s/1.0e-23/${tolerance}/" testTrackerModuleInfoDDD_cfg.py >> GeometryValidation.log endif -cmsRun trackerModuleInfoDDD_cfg.py >> ../GeometryValidation.log -mv trackerModuleInfoDDD_cfg.py ../ +cmsRun testTrackerModuleInfoDDD_cfg.py >> ../GeometryValidation.log +mv testTrackerModuleInfoDDD_cfg.py ../ if ( -s ModuleInfo.log ) then echo "TK test from DDD run ok" | tee -a ../GeometryValidation.log else diff --git a/Validation/Geometry/test/runP_Castor_Debug_cfg.py b/Validation/Geometry/test/runP_Castor_Debug_cfg.py index e006dde5346e7..d47f9d205c8c8 100644 --- a/Validation/Geometry/test/runP_Castor_Debug_cfg.py +++ b/Validation/Geometry/test/runP_Castor_Debug_cfg.py @@ -22,7 +22,7 @@ process.RandomNumberGeneratorService.g4SimHits.initialSeed = 9876 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('MaterialBudget') + process.MessageLogger.MaterialBudget=dict() process.source = cms.Source("EmptySource", firstRun = cms.untracked.uint32(1), diff --git a/Validation/Geometry/test/runP_HCAL_Debug_cfg.py b/Validation/Geometry/test/runP_HCAL_Debug_cfg.py index 4af01ca828e1d..ab579b9382fd5 100644 --- a/Validation/Geometry/test/runP_HCAL_Debug_cfg.py +++ b/Validation/Geometry/test/runP_HCAL_Debug_cfg.py @@ -19,8 +19,8 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('MaterialBudget') -# process.MessageLogger.categories.append('MaterialBudgetFull') + process.MessageLogger.MaterialBudget=dict() +# process.MessageLogger.MaterialBudgetFull=dict() process.source = cms.Source("EmptySource", firstRun = cms.untracked.uint32(1), diff --git a/Validation/Geometry/test/runP_HCAL_Debug_dd4hep_cfg.py b/Validation/Geometry/test/runP_HCAL_Debug_dd4hep_cfg.py index 015ba29cc02ab..1d51f2f19b5f9 100644 --- a/Validation/Geometry/test/runP_HCAL_Debug_dd4hep_cfg.py +++ b/Validation/Geometry/test/runP_HCAL_Debug_dd4hep_cfg.py @@ -4,6 +4,7 @@ process = cms.Process('PROD',Run3_dd4hep) process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") +process.load('Configuration.Geometry.GeometryDD4hepExtended2021_cff') process.load("Configuration.StandardSequences.MagneticField_38T_cff") process.load("SimG4Core.Application.g4SimHits_cfi") process.load("GeneratorInterface.Core.generatorSmeared_cfi") @@ -18,21 +19,9 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('MaterialBudget') -# process.MessageLogger.categories.append('MaterialBudgetFull') + process.MessageLogger.MaterialBudget=dict() +# process.MessageLogger.MaterialBudgetFull=dict() -process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", - confGeomXMLFiles = cms.FileInPath('Validation/Geometry/data/cmsExtendedGeometryNoMuon2021.xml'), - appendToDataLabel = cms.string('')) -process.DDSpecParRegistryESProducer = cms.ESProducer("DDSpecParRegistryESProducer", - appendToDataLabel = cms.string('')) -process.DDVectorRegistryESProducer = cms.ESProducer("DDVectorRegistryESProducer", - appendToDataLabel = cms.string('')) -process.DDCompactViewESProducer = cms.ESProducer("DDCompactViewESProducer", - appendToDataLabel = cms.string('')) -process.load("Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff") -process.load("Geometry.EcalCommonData.ecalSimulationParameters_cff") -process.load("Geometry.HcalCommonData.hcalDDDSimConstants_cff") process.source = cms.Source("EmptySource", firstRun = cms.untracked.uint32(1), diff --git a/Validation/Geometry/test/runP_HCAL_cfg.py b/Validation/Geometry/test/runP_HCAL_cfg.py index fdaab9743cbc7..41405befca4bb 100644 --- a/Validation/Geometry/test/runP_HCAL_cfg.py +++ b/Validation/Geometry/test/runP_HCAL_cfg.py @@ -13,7 +13,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('MaterialBudget') + process.MessageLogger.MaterialBudget=dict() process.source = cms.Source("PoolSource", noEventSort = cms.untracked.bool(True), diff --git a/Validation/HGCalValidation/interface/HGCalValidator.h b/Validation/HGCalValidation/interface/HGCalValidator.h index 789f1b29129ee..2e603edcc6a98 100644 --- a/Validation/HGCalValidation/interface/HGCalValidator.h +++ b/Validation/HGCalValidation/interface/HGCalValidator.h @@ -28,6 +28,7 @@ #include "RecoLocalCalo/HGCalRecProducers/interface/HGCalClusteringAlgoBase.h" #include "SimDataFormats/Associations/interface/LayerClusterToCaloParticleAssociator.h" +#include "SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociator.h" class PileupSummaryInfo; @@ -54,27 +55,38 @@ class HGCalValidator : public DQMGlobalEDAnalyzer { void cpParametersAndSelection(const Histograms& histograms, std::vector const& cPeff, std::vector const& simVertices, - std::vector& selected_cPeff) const; + std::vector& selected_cPeff, + unsigned int layers, + std::unordered_map const&) const; protected: edm::InputTag label_lcl; std::vector label_mcl; + edm::InputTag associator_; + edm::InputTag associatorSim_; const bool SaveGeneralInfo_; const bool doCaloParticlePlots_; const bool doCaloParticleSelection_; + const bool dosimclustersPlots_; const bool dolayerclustersPlots_; const bool domulticlustersPlots_; + std::vector label_clustersmask; const edm::FileInPath cummatbudinxo_; std::vector> labelToken; + edm::EDGetTokenT> simclusters_; edm::EDGetTokenT layerclusters_; std::vector>> label_mclTokens; edm::EDGetTokenT> label_cp_effic; edm::EDGetTokenT> label_cp_fake; edm::EDGetTokenT> simVertices_; + std::vector>> clustersMaskTokens_; edm::EDGetTokenT> hitMap_; edm::EDGetTokenT density_; - edm::EDGetTokenT LCAssocByEnergyScoreProducer_; + edm::EDGetTokenT associatorMapRtS; + edm::EDGetTokenT associatorMapStR; + edm::EDGetTokenT associatorMapSimtR; + edm::EDGetTokenT associatorMapRtSim; std::unique_ptr histoProducerAlgo_; private: diff --git a/Validation/HGCalValidation/interface/HGVHistoProducerAlgo.h b/Validation/HGCalValidation/interface/HGVHistoProducerAlgo.h index f013a758b8270..a25a1f0d4eb64 100644 --- a/Validation/HGCalValidation/interface/HGVHistoProducerAlgo.h +++ b/Validation/HGCalValidation/interface/HGVHistoProducerAlgo.h @@ -23,7 +23,8 @@ #include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h" #include "SimDataFormats/Vertex/interface/SimVertex.h" #include "RecoLocalCalo/HGCalRecProducers/interface/HGCalClusteringAlgoBase.h" -#include "SimDataFormats/Associations/interface/LayerClusterToCaloParticleAssociator.h" +#include "SimDataFormats/Associations/interface/LayerClusterToCaloParticleAssociatorBaseImpl.h" +#include "SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociatorBaseImpl.h" #include "DQMServices/Core/interface/DQMStore.h" @@ -90,8 +91,52 @@ struct HGVHistoProducerAlgoHistograms { std::unordered_map h_caloparticle_eta; std::unordered_map h_caloparticle_eta_Zorigin; std::unordered_map h_caloparticle_energy; + std::unordered_map h_caloparticle_selfenergy; + std::unordered_map h_caloparticle_energyDifference; std::unordered_map h_caloparticle_pt; std::unordered_map h_caloparticle_phi; + std::unordered_map h_caloparticle_nSimClusters; + std::unordered_map h_caloparticle_nHitsInSimClusters; + std::unordered_map h_caloparticle_firstlayer; + std::unordered_map h_caloparticle_lastlayer; + std::unordered_map h_caloparticle_layersnum; + std::unordered_map h_caloparticle_nHitsInSimClusters_matchedtoRecHit; + std::unordered_map h_caloparticle_nHits_matched_energy; + std::unordered_map h_caloparticle_nHits_matched_energy_layer; + std::unordered_map h_caloparticle_nHits_matched_energy_layer_1SimCl; + std::unordered_map h_caloparticle_sum_energy_layer; + std::unordered_map h_caloparticle_firstlayer_matchedtoRecHit; + std::unordered_map h_caloparticle_lastlayer_matchedtoRecHit; + std::unordered_map h_caloparticle_layersnum_matchedtoRecHit; + + //For simclusters + std::unordered_map h_simclusternum_perlayer; + std::unordered_map h_simclusternum_perthick; + dqm::reco::MonitorElement* h_mixedhitssimcluster_zminus; + dqm::reco::MonitorElement* h_mixedhitssimcluster_zplus; + + std::vector> h_denom_layercl_in_simcl_eta_perlayer; + std::vector> h_denom_layercl_in_simcl_phi_perlayer; + std::vector> h_score_layercl2simcluster_perlayer; + std::vector> h_sharedenergy_layercl2simcluster_perlayer; + std::vector> h_energy_vs_score_layercl2simcluster_perlayer; + std::vector> h_num_layercl_in_simcl_eta_perlayer; + std::vector> h_num_layercl_in_simcl_phi_perlayer; + std::vector> h_numMerge_layercl_in_simcl_eta_perlayer; + std::vector> h_numMerge_layercl_in_simcl_phi_perlayer; + std::vector> h_sharedenergy_layercl2simcluster_vs_eta_perlayer; + std::vector> h_sharedenergy_layercl2simcluster_vs_phi_perlayer; + std::vector> h_denom_simcluster_eta_perlayer; + std::vector> h_denom_simcluster_phi_perlayer; + std::vector> h_score_simcluster2layercl_perlayer; + std::vector> h_sharedenergy_simcluster2layercl_perlayer; + std::vector> h_energy_vs_score_simcluster2layercl_perlayer; + std::vector> h_num_simcluster_eta_perlayer; + std::vector> h_num_simcluster_phi_perlayer; + std::vector> h_numDup_simcluster_eta_perlayer; + std::vector> h_numDup_simcluster_phi_perlayer; + std::vector> h_sharedenergy_simcluster2layercl_vs_eta_perlayer; + std::vector> h_sharedenergy_simcluster2layercl_vs_phi_perlayer; //For multiclusters std::vector h_score_multicl2caloparticle; @@ -155,25 +200,56 @@ class HGVHistoProducerAlgo { using Histograms = HGVHistoProducerAlgoHistograms; void bookInfo(DQMStore::IBooker& ibook, Histograms& histograms); - void bookCaloParticleHistos(DQMStore::IBooker& ibook, Histograms& histograms, int pdgid); - - void bookClusterHistos(DQMStore::IBooker& ibook, - Histograms& histograms, - unsigned layers, - std::vector thicknesses, - std::string pathtomatbudfile); - void bookMultiClusterHistos(DQMStore::IBooker& ibook, Histograms& histograms, unsigned layers); - void layerClusters_to_CaloParticles( - const Histograms& histograms, - edm::Handle clusterHandle, - const reco::CaloClusterCollection& clusters, - edm::Handle> caloParticleHandle, - std::vector const& cP, - std::vector const& cPIndices, - std::vector const& cPSelectedIndices, - std::unordered_map const&, - unsigned layers, - const edm::Handle& LCAssocByEnergyScoreHandle) const; + void bookCaloParticleHistos(DQMStore::IBooker& ibook, Histograms& histograms, int pdgid, unsigned int layers); + + void bookSimClusterHistos(DQMStore::IBooker& ibook, + Histograms& histograms, + unsigned int layers, + std::vector thicknesses); + + void bookSimClusterAssociationHistos(DQMStore::IBooker& ibook, + Histograms& histograms, + unsigned int layers, + std::vector thicknesses); + + void bookClusterHistos_ClusterLevel(DQMStore::IBooker& ibook, + Histograms& histograms, + unsigned int layers, + std::vector thicknesses, + std::string pathtomatbudfile); + + void bookClusterHistos_LCtoCP_association(DQMStore::IBooker& ibook, Histograms& histograms, unsigned int layers); + + void bookClusterHistos_CellLevel(DQMStore::IBooker& ibook, + Histograms& histograms, + unsigned int layers, + std::vector thicknesses); + + void bookMultiClusterHistos(DQMStore::IBooker& ibook, Histograms& histograms, unsigned int layers); + + void layerClusters_to_CaloParticles(const Histograms& histograms, + edm::Handle clusterHandle, + const reco::CaloClusterCollection& clusters, + edm::Handle> caloParticleHandle, + std::vector const& cP, + std::vector const& cPIndices, + std::vector const& cPSelectedIndices, + std::unordered_map const&, + unsigned int layers, + const hgcal::RecoToSimCollection& recSimColl, + const hgcal::SimToRecoCollection& simRecColl) const; + void layerClusters_to_SimClusters(const Histograms& histograms, + int count, + edm::Handle clusterHandle, + const reco::CaloClusterCollection& clusters, + edm::Handle> simClusterHandle, + std::vector const& simclusters, + std::vector const& sCIndices, + const std::vector& mask, + std::unordered_map const&, + unsigned int layers, + const hgcal::RecoToSimCollectionWithSimClusters& recSimColl, + const hgcal::SimToRecoCollectionWithSimClusters& simRecColl) const; void multiClusters_to_CaloParticles(const Histograms& histograms, int count, const std::vector& multiClusters, @@ -181,28 +257,46 @@ class HGVHistoProducerAlgo { std::vector const& cPIndices, std::vector const& cPSelectedIndices, std::unordered_map const&, - unsigned layers) const; - void fill_info_histos(const Histograms& histograms, unsigned layers) const; + unsigned int layers) const; + void fill_info_histos(const Histograms& histograms, unsigned int layers) const; void fill_caloparticle_histos(const Histograms& histograms, int pdgid, const CaloParticle& caloparticle, - std::vector const& simVertices) const; + std::vector const& simVertices, + unsigned int layers, + std::unordered_map const&) const; + void fill_generic_cluster_histos(const Histograms& histograms, + int count, + edm::Handle clusterHandle, + const reco::CaloClusterCollection& clusters, + const Density& densities, + edm::Handle> caloParticleHandle, + std::vector const& cP, + std::vector const& cPIndices, + std::vector const& cPSelectedIndices, + std::unordered_map const&, + std::map cummatbudg, + unsigned int layers, + std::vector thicknesses, + const hgcal::RecoToSimCollection& recSimColl, + const hgcal::SimToRecoCollection& simRecColl) const; + void fill_simcluster_histos(const Histograms& histograms, + std::vector const& simclusters, + unsigned int layers, + std::vector thicknesses) const; + void fill_simclusterassosiation_histos(const Histograms& histograms, + int count, + edm::Handle clusterHandle, + const reco::CaloClusterCollection& clusters, + edm::Handle> simClusterHandle, + std::vector const& simclusters, + std::vector const& sCIndices, + const std::vector& mask, + std::unordered_map const& hitMap, + unsigned int layers, + const hgcal::RecoToSimCollectionWithSimClusters& recSimColl, + const hgcal::SimToRecoCollectionWithSimClusters& simRecColl) const; void fill_cluster_histos(const Histograms& histograms, int count, const reco::CaloCluster& cluster) const; - void fill_generic_cluster_histos( - const Histograms& histograms, - int count, - edm::Handle clusterHandle, - const reco::CaloClusterCollection& clusters, - const Density& densities, - edm::Handle> caloParticleHandle, - std::vector const& cP, - std::vector const& cPIndices, - std::vector const& cPSelectedIndices, - std::unordered_map const&, - std::map cummatbudg, - unsigned layers, - std::vector thicknesses, - edm::Handle& LCAssocByEnergyScoreHandle) const; void fill_multi_cluster_histos(const Histograms& histograms, int count, const std::vector& multiClusters, @@ -210,7 +304,7 @@ class HGVHistoProducerAlgo { std::vector const& cPIndices, std::vector const& cPSelectedIndices, std::unordered_map const&, - unsigned layers) const; + unsigned int layers) const; double distance2(const double x1, const double y1, const double x2, const double y2) const; double distance(const double x1, const double y1, const double x2, const double y2) const; @@ -253,6 +347,8 @@ class HGVHistoProducerAlgo { int nintPt_; double minPhi_, maxPhi_; int nintPhi_; + double minMixedHitsSimCluster_, maxMixedHitsSimCluster_; + int nintMixedHitsSimCluster_; double minMixedHitsCluster_, maxMixedHitsCluster_; int nintMixedHitsCluster_; double minEneCl_, maxEneCl_; @@ -261,6 +357,8 @@ class HGVHistoProducerAlgo { int nintLongDepBary_; double minZpos_, maxZpos_; int nintZpos_; + double minTotNsimClsperlay_, maxTotNsimClsperlay_; + int nintTotNsimClsperlay_; double minTotNClsperlay_, maxTotNClsperlay_; int nintTotNClsperlay_; double minEneClperlay_, maxEneClperlay_; @@ -271,6 +369,8 @@ class HGVHistoProducerAlgo { int nintSharedEneFrac_; double minMCLSharedEneFrac_, maxMCLSharedEneFrac_; int nintMCLSharedEneFrac_; + double minTotNsimClsperthick_, maxTotNsimClsperthick_; + int nintTotNsimClsperthick_; double minTotNClsperthick_, maxTotNClsperthick_; int nintTotNClsperthick_; double minTotNcellsperthickperlayer_, maxTotNcellsperthickperlayer_; diff --git a/Validation/HGCalValidation/plugins/CaloParticleValidation.cc b/Validation/HGCalValidation/plugins/CaloParticleValidation.cc index 6e921083972d3..b10552806897f 100644 --- a/Validation/HGCalValidation/plugins/CaloParticleValidation.cc +++ b/Validation/HGCalValidation/plugins/CaloParticleValidation.cc @@ -31,15 +31,6 @@ // struct Histogram_CaloParticleSingle { - dqm::reco::MonitorElement* eta_; - dqm::reco::MonitorElement* pt_; - dqm::reco::MonitorElement* energy_; - dqm::reco::MonitorElement* nSimClusters_; - dqm::reco::MonitorElement* nHitInSimClusters_; - dqm::reco::MonitorElement* - selfEnergy_; // this is the sum of the energy associated to all recHits linked to all SimClusters - dqm::reco::MonitorElement* energyDifference_; // This contains (energy-selfEnergy)/energy - dqm::reco::MonitorElement* eta_Zorigin_map_; dqm::reco::MonitorElement* simPFSuperClusterSize_; dqm::reco::MonitorElement* simPFSuperClusterEnergy_; dqm::reco::MonitorElement* pfcandidateType_; @@ -70,13 +61,8 @@ class CaloParticleValidation : public DQMGlobalEDAnalyzer particles_to_monitor_; - - edm::EDGetTokenT> simVertices_; - edm::EDGetTokenT> caloParticles_; edm::EDGetTokenT> simPFClusters_; edm::EDGetTokenT simPFCandidates_; - const edm::EDGetTokenT> hitMap_; }; // @@ -92,12 +78,8 @@ class CaloParticleValidation : public DQMGlobalEDAnalyzer("folder")), - particles_to_monitor_(iConfig.getParameter>("particles_to_monitor")), - simVertices_(consumes>(iConfig.getParameter("simVertices"))), - caloParticles_(consumes>(iConfig.getParameter("caloParticles"))), simPFClusters_(consumes>(iConfig.getParameter("simPFClusters"))), - simPFCandidates_(consumes(iConfig.getParameter("simPFCandidates"))), - hitMap_(consumes>(iConfig.getParameter("hitMapTag"))) { + simPFCandidates_(consumes(iConfig.getParameter("simPFCandidates"))) { //now do what ever initialization is needed } @@ -117,18 +99,6 @@ void CaloParticleValidation::dqmAnalyze(edm::Event const& iEvent, Histograms_CaloParticleValidation const& histos) const { using namespace edm; - Handle> hitMapHandle; - iEvent.getByToken(hitMap_, hitMapHandle); - const auto hitmap = *hitMapHandle; - - Handle> simVerticesHandle; - iEvent.getByToken(simVertices_, simVerticesHandle); - std::vector const& simVertices = *simVerticesHandle; - - Handle> caloParticleHandle; - iEvent.getByToken(caloParticles_, caloParticleHandle); - std::vector const& caloParticles = *caloParticleHandle; - Handle> simPFClustersHandle; iEvent.getByToken(simPFClusters_, simPFClustersHandle); std::vector const& simPFClusters = *simPFClustersHandle; @@ -137,40 +107,6 @@ void CaloParticleValidation::dqmAnalyze(edm::Event const& iEvent, iEvent.getByToken(simPFCandidates_, simPFCandidatesHandle); reco::PFCandidateCollection const& simPFCandidates = *simPFCandidatesHandle; - for (auto const& caloParticle : caloParticles) { - if (caloParticle.g4Tracks()[0].eventId().event() != 0 or - caloParticle.g4Tracks()[0].eventId().bunchCrossing() != 0) { - LogDebug("CaloParticleValidation") << "Excluding CaloParticles from event: " - << caloParticle.g4Tracks()[0].eventId().event() - << " with BX: " << caloParticle.g4Tracks()[0].eventId().bunchCrossing() - << std::endl; - continue; - } - int id = caloParticle.pdgId(); - if (histos.count(id)) { - auto& histo = histos.at(id); - histo.eta_->Fill(caloParticle.eta()); - histo.pt_->Fill(caloParticle.pt()); - histo.energy_->Fill(caloParticle.energy()); - histo.nSimClusters_->Fill(caloParticle.simClusters().size()); - // Find the corresponding vertex. - histo.eta_Zorigin_map_->Fill(simVertices.at(caloParticle.g4Tracks()[0].vertIndex()).position().z(), - caloParticle.eta()); - int simHits = 0; - float energy = 0.; - for (auto const& sc : caloParticle.simClusters()) { - simHits += sc->hits_and_fractions().size(); - for (auto const& h_and_f : sc->hits_and_fractions()) { - if (hitmap.count(h_and_f.first)) - energy += hitmap.at(h_and_f.first)->energy() * h_and_f.second; - } - } - histo.nHitInSimClusters_->Fill((float)simHits); - histo.selfEnergy_->Fill(energy); - histo.energyDifference_->Fill(1. - energy / caloParticle.energy()); - } - } - // simPFSuperClusters for (auto const& sc : simPFClusters) { histos.at(0).simPFSuperClusterSize_->Fill((float)sc.clustersSize()); @@ -201,18 +137,6 @@ void CaloParticleValidation::bookHistograms(DQMStore::IBooker& ibook, edm::Run const& run, edm::EventSetup const& iSetup, Histograms_CaloParticleValidation& histos) const { - for (auto const particle : particles_to_monitor_) { - ibook.setCurrentFolder(folder_ + "CaloParticles/" + std::to_string(particle)); - auto& histo = histos[particle]; - histo.eta_ = ibook.book1D("Eta", "Eta", 80, -4., 4.); - histo.energy_ = ibook.book1D("Energy", "Energy", 250, 0., 500.); - histo.pt_ = ibook.book1D("Pt", "Pt", 100, 0., 100.); - histo.nSimClusters_ = ibook.book1D("NSimClusters", "NSimClusters", 100, 0., 100.); - histo.nHitInSimClusters_ = ibook.book1D("NHitInSimClusters", "NHitInSimClusters", 100, 0., 100.); - histo.selfEnergy_ = ibook.book1D("SelfEnergy", "SelfEnergy", 250, 0., 500.); - histo.energyDifference_ = ibook.book1D("EnergyDifference", "(Energy-SelfEnergy)/Energy", 300, -5., 1.); - histo.eta_Zorigin_map_ = ibook.book2D("Eta vs Zorigin", "Eta vs Zorigin", 80, -4., 4., 1100, -550., 550.); - } int offset = 100000; ibook.setCurrentFolder(folder_ + "PFCandidates"); histos[offset].pfcandidateType_ = ibook.book1D("PFCandidateType", "PFCandidateType", 10, 0, 10); @@ -239,12 +163,8 @@ void CaloParticleValidation::fillDescriptions(edm::ConfigurationDescriptions& de // Please change this to state exactly what you do use, even if it is no parameters edm::ParameterSetDescription desc; desc.add("folder", "HGCAL/"); // Please keep the trailing '/' - desc.add>("particles_to_monitor", {11, -11, 13, -13, 22, 111, 211, -211, 321, -321}); - desc.add("simVertices", edm::InputTag("g4SimHits")); - desc.add("caloParticles", edm::InputTag("mix", "MergedCaloTruth")); desc.add("simPFClusters", edm::InputTag("simPFProducer", "perfect")); desc.add("simPFCandidates", edm::InputTag("simPFProducer")); - desc.add("hitMapTag", edm::InputTag("hgcalRecHitMapProducer")); descriptions.add("caloparticlevalidationDefault", desc); } diff --git a/Validation/HGCalValidation/plugins/HGCGeometryValidation.cc b/Validation/HGCalValidation/plugins/HGCGeometryValidation.cc index 191b52e11c38f..6967f86f9f583 100644 --- a/Validation/HGCalValidation/plugins/HGCGeometryValidation.cc +++ b/Validation/HGCalValidation/plugins/HGCGeometryValidation.cc @@ -2,10 +2,7 @@ #include #include "Geometry/Records/interface/IdealGeometryRecord.h" -#include "Geometry/Records/interface/HcalSimNumberingRecord.h" #include "Geometry/HGCalCommonData/interface/HGCalDDDConstants.h" -#include "Geometry/HcalCommonData/interface/HcalDDDSimConstants.h" -#include "Geometry/HcalCommonData/interface/HcalCellType.h" #include "DataFormats/Common/interface/Handle.h" #include "DataFormats/ForwardDetId/interface/ForwardSubdetector.h" @@ -29,7 +26,6 @@ #include "SimDataFormats/CaloHit/interface/PCaloHit.h" #include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" #include "SimDataFormats/ValidationFormats/interface/PHGCalValidInfo.h" -#include "DataFormats/HcalDetId/interface/HcalTestNumbering.h" #include "SimDataFormats/CaloTest/interface/HGCalTestNumbering.h" #include "PhysicsTools/HepMCCandAlgos/interface/GenParticlesHelper.h" @@ -56,10 +52,10 @@ class HGCGeometryValidation : public DQMEDAnalyzer { edm::EDGetTokenT g4Token_; std::vector geometrySource_; int verbosity_; + std::vector> geomToken_; //HGCal geometry scheme std::vector hgcGeometry_; - const HcalDDDSimConstants *hcons_; //histogram related stuff MonitorElement *heedzVsZ, *heedyVsY, *heedxVsX; @@ -79,10 +75,13 @@ class HGCGeometryValidation : public DQMEDAnalyzer { MonitorElement *hebdX, *hebdY, *hebdZ; }; -HGCGeometryValidation::HGCGeometryValidation(const edm::ParameterSet &cfg) : hcons_(nullptr) { +HGCGeometryValidation::HGCGeometryValidation(const edm::ParameterSet &cfg) { g4Token_ = consumes(cfg.getParameter("g4Source")); - geometrySource_ = cfg.getUntrackedParameter >("geometrySource"); + geometrySource_ = cfg.getUntrackedParameter>("geometrySource"); verbosity_ = cfg.getUntrackedParameter("verbosity", 0); + for (const auto &name : geometrySource_) + geomToken_.emplace_back( + esConsumes(edm::ESInputTag{"", name})); } HGCGeometryValidation::~HGCGeometryValidation() {} @@ -96,24 +95,7 @@ void HGCGeometryValidation::fillDescriptions(edm::ConfigurationDescriptions &des void HGCGeometryValidation::dqmBeginRun(const edm::Run &iRun, const edm::EventSetup &iSetup) { //initiating hgcnumbering for (size_t i = 0; i < geometrySource_.size(); i++) { - if (geometrySource_[i].find("Hcal") != std::string::npos) { - edm::ESHandle pHRNDC; - iSetup.get().get(pHRNDC); - if (pHRNDC.isValid()) { - hcons_ = &(*pHRNDC); - hgcGeometry_.push_back(nullptr); - } else { - edm::LogWarning("HGCalValid") << "Cannot initiate HGCalGeometry for " << geometrySource_[i]; - } - } else { - edm::ESHandle hgcGeom; - iSetup.get().get(geometrySource_[i], hgcGeom); - if (hgcGeom.isValid()) { - hgcGeometry_.push_back(hgcGeom.product()); - } else { - edm::LogWarning("HGCalValid") << "Cannot initiate HGCalGeometry for " << geometrySource_[i]; - } - } + hgcGeometry_.emplace_back(&iSetup.getData(geomToken_[i])); } } @@ -301,36 +283,7 @@ void HGCGeometryValidation::analyze(const edm::Event &iEvent, const edm::EventSe hebdZ->Fill((hitVtxZ.at(i) - zz)); hebdY->Fill((hitVtxY.at(i) - yy)); } - - } else if (hitDet.at(i) == (unsigned int)(DetId::Hcal)) { - int subdet, zside, depth, eta, phi, lay; - HcalTestNumbering::unpackHcalIndex(hitIdx.at(i), subdet, zside, depth, eta, phi, lay); - HcalCellType::HcalCell cell = hcons_->cell(subdet, zside, lay, eta, phi); - - double zz = mmtocm * cell.rz; //mm --> cm - if (zside == 0) - zz = -zz; - double rho = zz * tan(2.0 * atan(exp(-cell.eta))); - double xx = rho * cos(cell.phi); //cm - double yy = rho * sin(cell.phi); //cm - - hebdzVsZ->Fill(zz, (hitVtxZ.at(i) - zz)); - hebdyVsY->Fill(yy, (hitVtxY.at(i) - yy)); - hebdxVsX->Fill(xx, (hitVtxX.at(i) - xx)); - - hebXG4VsId->Fill(hitVtxX.at(i), xx); - hebYG4VsId->Fill(hitVtxY.at(i), yy); - hebZG4VsId->Fill(hitVtxZ.at(i), zz); - - hebdzVsLayer->Fill(lay, (hitVtxZ.at(i) - zz)); - hebdyVsLayer->Fill(lay, (hitVtxY.at(i) - yy)); - hebdxVsLayer->Fill(lay, (hitVtxX.at(i) - xx)); - - hebdX->Fill((hitVtxX.at(i) - xx)); - hebdZ->Fill((hitVtxZ.at(i) - zz)); - hebdY->Fill((hitVtxY.at(i) - yy)); } - } //end G4 hits } else { diff --git a/Validation/HGCalValidation/plugins/HGCalValidator.cc b/Validation/HGCalValidation/plugins/HGCalValidator.cc index 0ee7f7cc4383c..b509a92872f29 100644 --- a/Validation/HGCalValidation/plugins/HGCalValidator.cc +++ b/Validation/HGCalValidation/plugins/HGCalValidator.cc @@ -1,5 +1,7 @@ #include "Validation/HGCalValidation/interface/HGCalValidator.h" +#include "SimCalorimetry/HGCalAssociatorProducers/interface/AssociatorTools.h" + #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -9,11 +11,15 @@ using namespace edm; HGCalValidator::HGCalValidator(const edm::ParameterSet& pset) : label_lcl(pset.getParameter("label_lcl")), label_mcl(pset.getParameter>("label_mcl")), + associator_(pset.getUntrackedParameter("associator")), + associatorSim_(pset.getUntrackedParameter("associatorSim")), SaveGeneralInfo_(pset.getUntrackedParameter("SaveGeneralInfo")), doCaloParticlePlots_(pset.getUntrackedParameter("doCaloParticlePlots")), doCaloParticleSelection_(pset.getUntrackedParameter("doCaloParticleSelection")), + dosimclustersPlots_(pset.getUntrackedParameter("dosimclustersPlots")), dolayerclustersPlots_(pset.getUntrackedParameter("dolayerclustersPlots")), domulticlustersPlots_(pset.getUntrackedParameter("domulticlustersPlots")), + label_clustersmask(pset.getParameter>("LayerClustersInputMask")), cummatbudinxo_(pset.getParameter("cummatbudinxo")) { //In this way we can easily generalize to associations between other objects also. const edm::InputTag& label_cp_effic_tag = pset.getParameter("label_cp_effic"); @@ -24,18 +30,27 @@ HGCalValidator::HGCalValidator(const edm::ParameterSet& pset) simVertices_ = consumes>(pset.getParameter("simVertices")); + for (auto& itag : label_clustersmask) { + clustersMaskTokens_.push_back(consumes>(itag)); + } + + associatorMapSimtR = consumes(associatorSim_); + associatorMapRtSim = consumes(associatorSim_); + hitMap_ = consumes>(edm::InputTag("hgcalRecHitMapProducer")); density_ = consumes(edm::InputTag("hgcalLayerClusters")); + simclusters_ = consumes>(pset.getParameter("label_scl")); + layerclusters_ = consumes(label_lcl); for (auto& itag : label_mcl) { label_mclTokens.push_back(consumes>(itag)); } - LCAssocByEnergyScoreProducer_ = - consumes(edm::InputTag("lcAssocByEnergyScoreProducer")); + associatorMapRtS = consumes(associator_); + associatorMapStR = consumes(associator_); cpSelector = CaloParticleSelector(pset.getParameter("ptMinCP"), pset.getParameter("ptMaxCP"), @@ -91,21 +106,65 @@ void HGCalValidator::bookHistograms(DQMStore::IBooker& ibook, for (auto const particle : particles_to_monitor_) { ibook.setCurrentFolder(dirName_ + "SelectedCaloParticles/" + std::to_string(particle)); - histoProducerAlgo_->bookCaloParticleHistos(ibook, histograms.histoProducerAlgo, particle); + histoProducerAlgo_->bookCaloParticleHistos( + ibook, histograms.histoProducerAlgo, particle, totallayers_to_monitor_); } ibook.cd(); ibook.setCurrentFolder(dirName_); } + //Booking histograms concerning with simclusters + if (dosimclustersPlots_) { + ibook.cd(); + ibook.setCurrentFolder(dirName_ + "simClusters/ClusterLevel"); + histoProducerAlgo_->bookSimClusterHistos( + ibook, histograms.histoProducerAlgo, totallayers_to_monitor_, thicknesses_to_monitor_); + + for (unsigned int ws = 0; ws < label_clustersmask.size(); ws++) { + ibook.cd(); + InputTag algo = label_clustersmask[ws]; + string dirName = dirName_ + "simClusters/"; + if (!algo.process().empty()) + dirName += algo.process() + "_"; + LogDebug("HGCalValidator") << dirName << "\n"; + if (!algo.label().empty()) + dirName += algo.label() + "_"; + LogDebug("HGCalValidator") << dirName << "\n"; + if (!algo.instance().empty()) + dirName += algo.instance() + "_"; + LogDebug("HGCalValidator") << dirName << "\n"; + + if (!dirName.empty()) { + dirName.resize(dirName.size() - 1); + } + + LogDebug("HGCalValidator") << dirName << "\n"; + + ibook.setCurrentFolder(dirName); + + histoProducerAlgo_->bookSimClusterAssociationHistos( + ibook, histograms.histoProducerAlgo, totallayers_to_monitor_, thicknesses_to_monitor_); + } //end of loop over masks + } //if for simcluster plots + //Booking histograms concerning with hgcal layer clusters if (dolayerclustersPlots_) { ibook.cd(); - ibook.setCurrentFolder(dirName_ + "hgcalLayerClusters"); - histoProducerAlgo_->bookClusterHistos(ibook, - histograms.histoProducerAlgo, - totallayers_to_monitor_, - thicknesses_to_monitor_, - cummatbudinxo_.fullPath()); + ibook.setCurrentFolder(dirName_ + "hgcalLayerClusters/ClusterLevel"); + histoProducerAlgo_->bookClusterHistos_ClusterLevel(ibook, + histograms.histoProducerAlgo, + totallayers_to_monitor_, + thicknesses_to_monitor_, + cummatbudinxo_.fullPath()); + ibook.cd(); + ibook.setCurrentFolder(dirName_ + "hgcalLayerClusters/LCtoCP_association"); + histoProducerAlgo_->bookClusterHistos_LCtoCP_association( + ibook, histograms.histoProducerAlgo, totallayers_to_monitor_); + + ibook.cd(); + ibook.setCurrentFolder(dirName_ + "hgcalLayerClusters/CellLevel"); + histoProducerAlgo_->bookClusterHistos_CellLevel( + ibook, histograms.histoProducerAlgo, totallayers_to_monitor_, thicknesses_to_monitor_); } //Booking histograms for multiclusters @@ -141,7 +200,9 @@ void HGCalValidator::bookHistograms(DQMStore::IBooker& ibook, void HGCalValidator::cpParametersAndSelection(const Histograms& histograms, std::vector const& cPeff, std::vector const& simVertices, - std::vector& selected_cPeff) const { + std::vector& selected_cPeff, + unsigned int layers, + std::unordered_map const& hitMap) const { selected_cPeff.reserve(cPeff.size()); size_t j = 0; @@ -151,7 +212,8 @@ void HGCalValidator::cpParametersAndSelection(const Histograms& histograms, if (!doCaloParticleSelection_ || (doCaloParticleSelection_ && cpSelector(caloParticle, simVertices))) { selected_cPeff.push_back(j); if (doCaloParticlePlots_) { - histoProducerAlgo_->fill_caloparticle_histos(histograms.histoProducerAlgo, id, caloParticle, simVertices); + histoProducerAlgo_->fill_caloparticle_histos( + histograms.histoProducerAlgo, id, caloParticle, simVertices, layers, hitMap); } } ++j; @@ -183,8 +245,12 @@ void HGCalValidator::dqmAnalyze(const edm::Event& event, tools_->setGeometry(*geom); histoProducerAlgo_->setRecHitTools(tools_); - edm::Handle LCAssocByEnergyScoreHandle; - event.getByToken(LCAssocByEnergyScoreProducer_, LCAssocByEnergyScoreHandle); + edm::Handle simtorecoCollectionH; + event.getByToken(associatorMapStR, simtorecoCollectionH); + auto simRecColl = *simtorecoCollectionH; + edm::Handle recotosimCollectionH; + event.getByToken(associatorMapRtS, recotosimCollectionH); + auto recSimColl = *recotosimCollectionH; edm::Handle> hitMapHandle; event.getByToken(hitMap_, hitMapHandle); @@ -195,30 +261,25 @@ void HGCalValidator::dqmAnalyze(const edm::Event& event, histoProducerAlgo_->fill_info_histos(histograms.histoProducerAlgo, totallayers_to_monitor_); } - auto nCaloParticles = caloParticles.size(); std::vector cPIndices; //Consider CaloParticles coming from the hard scatterer //excluding the PU contribution and save the indices. - for (unsigned int cpId = 0; cpId < nCaloParticles; ++cpId) { - if (caloParticles[cpId].g4Tracks()[0].eventId().event() != 0 or - caloParticles[cpId].g4Tracks()[0].eventId().bunchCrossing() != 0) { - LogDebug("HGCalValidator") << "Excluding CaloParticles from event: " - << caloParticles[cpId].g4Tracks()[0].eventId().event() - << " with BX: " << caloParticles[cpId].g4Tracks()[0].eventId().bunchCrossing() - << std::endl; - continue; - } - cPIndices.emplace_back(cpId); - } + removeCPFromPU(caloParticles, cPIndices); // ############################################## // fill caloparticles histograms // ############################################## - LogTrace("HGCalValidator") << "\n# of CaloParticles: " << caloParticles.size() << "\n"; + // HGCRecHit are given to select the SimHits which are also reconstructed + LogTrace("HGCalValidator") << "\n# of CaloParticles: " << caloParticles.size() << "\n" << std::endl; std::vector selected_cPeff; - cpParametersAndSelection(histograms, caloParticles, simVertices, selected_cPeff); + cpParametersAndSelection(histograms, caloParticles, simVertices, selected_cPeff, totallayers_to_monitor_, *hitMap); //get collections from the event + //simClusters + edm::Handle> simClustersHandle; + event.getByToken(simclusters_, simClustersHandle); + std::vector const& simclusters = *simClustersHandle; + //Layer clusters edm::Handle clusterHandle; event.getByToken(layerclusters_, clusterHandle); @@ -229,6 +290,58 @@ void HGCalValidator::dqmAnalyze(const edm::Event& event, event.getByToken(density_, densityHandle); const Density& densities = *densityHandle; + auto nSimClusters = simclusters.size(); + std::vector sCIndices; + //There shouldn't be any SimTracks from different crossings, but maybe they will be added later. + //At the moment there should be one SimTrack in each SimCluster. + for (unsigned int scId = 0; scId < nSimClusters; ++scId) { + if (simclusters[scId].g4Tracks()[0].eventId().event() != 0 or + simclusters[scId].g4Tracks()[0].eventId().bunchCrossing() != 0) { + LogDebug("HGCalValidator") << "Excluding SimClusters from event: " + << simclusters[scId].g4Tracks()[0].eventId().event() + << " with BX: " << simclusters[scId].g4Tracks()[0].eventId().bunchCrossing() + << std::endl; + continue; + } + sCIndices.emplace_back(scId); + } + + // ############################################## + // fill simcluster histograms + // ############################################## + if (dosimclustersPlots_) { + histoProducerAlgo_->fill_simcluster_histos( + histograms.histoProducerAlgo, simclusters, totallayers_to_monitor_, thicknesses_to_monitor_); + + for (unsigned int ws = 0; ws < label_clustersmask.size(); ws++) { + const auto& inputClusterMask = event.get(clustersMaskTokens_[ws]); + + edm::Handle simtorecoCollectionH; + event.getByToken(associatorMapSimtR, simtorecoCollectionH); + auto simRecColl = *simtorecoCollectionH; + edm::Handle recotosimCollectionH; + event.getByToken(associatorMapRtSim, recotosimCollectionH); + auto recSimColl = *recotosimCollectionH; + + histoProducerAlgo_->fill_simclusterassosiation_histos(histograms.histoProducerAlgo, + ws, + clusterHandle, + clusters, + simClustersHandle, + simclusters, + sCIndices, + inputClusterMask, + *hitMap, + totallayers_to_monitor_, + recSimColl, + simRecColl); + + //General Info on simClusters + LogTrace("HGCalValidator") << "\n# of simclusters: " << nSimClusters << " label_clustersmask[ws].label() " + << label_clustersmask[ws].label() << "\n"; + } //end of loop overs masks + } + // ############################################## // fill layercluster histograms // ############################################## @@ -247,7 +360,8 @@ void HGCalValidator::dqmAnalyze(const edm::Event& event, cummatbudg, totallayers_to_monitor_, thicknesses_to_monitor_, - LCAssocByEnergyScoreHandle); + recSimColl, + simRecColl); for (unsigned int layerclusterIndex = 0; layerclusterIndex < clusters.size(); layerclusterIndex++) { histoProducerAlgo_->fill_cluster_histos(histograms.histoProducerAlgo, w, clusters[layerclusterIndex]); @@ -279,7 +393,8 @@ void HGCalValidator::dqmAnalyze(const edm::Event& event, //General Info on multiclusters LogTrace("HGCalValidator") << "\n# of multi clusters with " << label_mcl[wml].process() << ":" << label_mcl[wml].label() << ":" << label_mcl[wml].instance() << ": " - << multiClusters.size() << "\n"; + << multiClusters.size() << "\n" + << std::endl; } } //end of loop over multicluster input labels } diff --git a/Validation/HGCalValidation/plugins/SimG4HGCalValidation.cc b/Validation/HGCalValidation/plugins/SimG4HGCalValidation.cc index 0e4758e575892..c8ec4008e2822 100644 --- a/Validation/HGCalValidation/plugins/SimG4HGCalValidation.cc +++ b/Validation/HGCalValidation/plugins/SimG4HGCalValidation.cc @@ -12,12 +12,10 @@ // to retreive hits #include "DataFormats/DetId/interface/DetId.h" -#include "DataFormats/HcalDetId/interface/HcalSubdetector.h" #include "DataFormats/ForwardDetId/interface/ForwardSubdetector.h" #include "DataFormats/Math/interface/Point3D.h" #include "SimDataFormats/ValidationFormats/interface/PHGCalValidInfo.h" #include "SimDataFormats/CaloTest/interface/HGCalTestNumbering.h" -#include "DataFormats/HcalDetId/interface/HcalTestNumbering.h" #include "SimG4CMS/Calo/interface/HGCNumberingScheme.h" #include "SimG4CMS/Calo/interface/HGCalNumberingScheme.h" @@ -28,9 +26,6 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Geometry/Records/interface/IdealGeometryRecord.h" -#include "Geometry/Records/interface/HcalSimNumberingRecord.h" -#include "Geometry/HcalCommonData/interface/HcalNumberingFromDDD.h" -#include "Geometry/HcalCommonData/interface/HcalDDDSimConstants.h" #include "Geometry/HGCalCommonData/interface/HGCalGeometryMode.h" #include "Geometry/HGCalCommonData/interface/HGCalDDDConstants.h" @@ -79,9 +74,6 @@ class SimG4HGCalValidation : public SimProducer, void clear(); private: - //Keep reference to instantiate HcalNumberingFromDDD later - HcalNumberingFromDDD* numberingFromDDD_; - //HGCal numbering scheme std::vector hgcNumbering_; std::vector hgcalNumbering_; @@ -103,8 +95,7 @@ class SimG4HGCalValidation : public SimProducer, std::vector hgchitX_, hgchitY_, hgchitZ_; }; -SimG4HGCalValidation::SimG4HGCalValidation(const edm::ParameterSet& p) - : numberingFromDDD_(nullptr), levelT1_(999), levelT2_(999), count_(0) { +SimG4HGCalValidation::SimG4HGCalValidation(const edm::ParameterSet& p) : levelT1_(999), levelT2_(999), count_(0) { edm::ParameterSet m_Anal = p.getParameter("SimG4HGCalValidation"); names_ = m_Anal.getParameter >("Names"); types_ = m_Anal.getParameter >("Types"); @@ -126,7 +117,6 @@ SimG4HGCalValidation::SimG4HGCalValidation(const edm::ParameterSet& p) } SimG4HGCalValidation::~SimG4HGCalValidation() { - delete numberingFromDDD_; for (auto number : hgcNumbering_) delete number; for (auto number : hgcalNumbering_) @@ -190,18 +180,8 @@ void SimG4HGCalValidation::update(const BeginOfJob* job) { throw cms::Exception("Unknown", "ValidHGCal") << "Cannot find HGCalDDDConstants for " << nameX << "\n"; } } else { - nameX = "HcalEndcap"; - dets_.push_back((unsigned int)(DetId::Hcal)); - subdet_.push_back((int)(HcalSubdetector::HcalEndcap)); - edm::ESHandle hdc; - es->get().get(hdc); - if (hdc.isValid()) { - numberingFromDDD_ = new HcalNumberingFromDDD(hdc.product()); - layers = 18; - } else { - edm::LogError("ValidHGCal") << "Cannot find HcalDDDSimConstant"; - throw cms::Exception("Unknown", "ValidHGCal") << "Cannot find HcalDDDSimConstant\n"; - } + edm::LogError("ValidHGCal") << "Wrong Type " << types_[type]; + throw cms::Exception("Unknown", "ValidHGCal") << "Wrong Type " << types_[type] << "\n"; } if (detType == 0) { for (int i = 0; i < layers; ++i) @@ -272,51 +252,35 @@ void SimG4HGCalValidation::update(const G4Step* aStep) { unsigned int index(0); int layer(0); G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition(); - if (types_[type] <= 1) { - // HGCal - G4ThreeVector localpos = touchable->GetHistory()->GetTopTransform().TransformPoint(hitPoint); - float globalZ = touchable->GetTranslation(0).z(); - int iz(globalZ > 0 ? 1 : -1); - int module(-1), cell(-1); - if (types_[type] == 1) { - if (touchable->GetHistoryDepth() == levelT1_) { - layer = touchable->GetReplicaNumber(0); - } else { - layer = touchable->GetReplicaNumber(2); - module = touchable->GetReplicaNumber(1); - cell = touchable->GetReplicaNumber(0); - } - index = - hgcNumbering_[type]->getUnitID((ForwardSubdetector)(subdet_[type]), layer, module, cell, iz, localpos); + // HGCal + G4ThreeVector localpos = touchable->GetHistory()->GetTopTransform().TransformPoint(hitPoint); + float globalZ = touchable->GetTranslation(0).z(); + int iz(globalZ > 0 ? 1 : -1); + int module(-1), cell(-1); + if (types_[type] == 1) { + if (touchable->GetHistoryDepth() == levelT1_) { + layer = touchable->GetReplicaNumber(0); } else { - if ((touchable->GetHistoryDepth() == levelT1_) || (touchable->GetHistoryDepth() == levelT2_)) { - layer = touchable->GetReplicaNumber(0); - } else { - layer = touchable->GetReplicaNumber(3); - module = touchable->GetReplicaNumber(2); - cell = touchable->GetReplicaNumber(1); - } - double weight(0); - index = hgcalNumbering_[type]->getUnitID(layer, module, cell, iz, hitPoint, weight); + layer = touchable->GetReplicaNumber(2); + module = touchable->GetReplicaNumber(1); + cell = touchable->GetReplicaNumber(0); } - if (verbosity_ > 1) - edm::LogVerbatim("ValidHGCal") - << "HGCal: " << name << " Layer " << layer << " Module " << module << " Cell " << cell; + index = + hgcNumbering_[type]->getUnitID((ForwardSubdetector)(subdet_[type]), layer, module, cell, iz, localpos); } else { - // Hcal - int depth = (touchable->GetReplicaNumber(0)) % 10 + 1; - int lay = (touchable->GetReplicaNumber(0) / 10) % 100 + 1; - int det = (touchable->GetReplicaNumber(1)) / 1000; - HcalNumberingFromDDD::HcalID tmp = - numberingFromDDD_->unitID(det, math::XYZVectorD(hitPoint.x(), hitPoint.y(), hitPoint.z()), depth, lay); - index = HcalTestNumbering::packHcalIndex(tmp.subdet, tmp.zside, tmp.depth, tmp.etaR, tmp.phis, tmp.lay); - layer = tmp.lay; - if (verbosity_ > 1) - edm::LogVerbatim("ValidHGCal") - << "HCAL: " << det << ":" << depth << ":" << lay << " o/p " << tmp.subdet << ":" << tmp.zside << ":" - << tmp.depth << ":" << tmp.etaR << ":" << tmp.phis << ":" << tmp.lay << " point " << hitPoint << " " - << hitPoint.rho() << ":" << hitPoint.eta() << ":" << hitPoint.phi(); + if ((touchable->GetHistoryDepth() == levelT1_) || (touchable->GetHistoryDepth() == levelT2_)) { + layer = touchable->GetReplicaNumber(0); + } else { + layer = touchable->GetReplicaNumber(3); + module = touchable->GetReplicaNumber(2); + cell = touchable->GetReplicaNumber(1); + } + double weight(0); + index = hgcalNumbering_[type]->getUnitID(layer, module, cell, iz, hitPoint, weight); } + if (verbosity_ > 1) + edm::LogVerbatim("ValidHGCal") << "HGCal: " << name << " Layer " << layer << " Module " << module << " Cell " + << cell; double edeposit = aStep->GetTotalEnergyDeposit(); if (verbosity_ > 0) diff --git a/Validation/HGCalValidation/python/CaloParticleSelectionForEfficiency_cfi.py b/Validation/HGCalValidation/python/CaloParticleSelectionForEfficiency_cfi.py index 6141cf4b30a72..0e9ae846a4fde 100644 --- a/Validation/HGCalValidation/python/CaloParticleSelectionForEfficiency_cfi.py +++ b/Validation/HGCalValidation/python/CaloParticleSelectionForEfficiency_cfi.py @@ -11,7 +11,7 @@ tipCP = cms.double(60), chargedOnlyCP = cms.bool(False), stableOnlyCP = cms.bool(False), - pdgIdCP = cms.vint32(11, -11, 13, -13, 22, 111, 211, -211, 321, -321), + pdgIdCP = cms.vint32(11, -11, 13, -13, 22, 111, 211, -211, 321, -321, 311), #--signal only means no PU particles signalOnlyCP = cms.bool(True), #--intime only means no OOT PU particles diff --git a/Validation/HGCalValidation/python/HGCalPostProcessor_cff.py b/Validation/HGCalValidation/python/HGCalPostProcessor_cff.py index 97bc496b77844..10b1a27c50bf8 100644 --- a/Validation/HGCalValidation/python/HGCalPostProcessor_cff.py +++ b/Validation/HGCalValidation/python/HGCalPostProcessor_cff.py @@ -3,7 +3,7 @@ from Validation.HGCalValidation.HGCalSimHitsClient_cff import * from Validation.HGCalValidation.HGCalDigiClient_cff import * from Validation.HGCalValidation.HGCalRecHitsClient_cff import * -from Validation.HGCalValidation.PostProcessorHGCAL_cfi import postProcessorHGCALlayerclusters,postProcessorHGCALmulticlusters +from Validation.HGCalValidation.PostProcessorHGCAL_cfi import postProcessorHGCALlayerclusters,postProcessorHGCALsimclusters,postProcessorHGCALmulticlusters hgcalPostProcessor = cms.Sequence(hgcalSimHitClientEE + hgcalSimHitClientHEF @@ -17,4 +17,5 @@ hgcalValidatorPostProcessor = cms.Sequence( postProcessorHGCALlayerclusters+ + postProcessorHGCALsimclusters+ postProcessorHGCALmulticlusters) diff --git a/Validation/HGCalValidation/python/HGCalValidator_cfi.py b/Validation/HGCalValidation/python/HGCalValidator_cfi.py index edfd3969f6adc..db07bc9da6be0 100644 --- a/Validation/HGCalValidation/python/HGCalValidator_cfi.py +++ b/Validation/HGCalValidation/python/HGCalValidator_cfi.py @@ -3,6 +3,9 @@ from Validation.HGCalValidation.CaloParticleSelectionForEfficiency_cfi import * from Validation.HGCalValidation.HGVHistoProducerAlgoBlock_cfi import * +from SimCalorimetry.HGCalAssociatorProducers.LCToCPAssociation_cfi import layerClusterCaloParticleAssociation +from SimCalorimetry.HGCalAssociatorProducers.LCToSCAssociation_cfi import layerClusterSimClusterAssociation + from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer hgcalValidator = DQMEDAnalyzer( "HGCalValidator", @@ -13,19 +16,25 @@ ### reco input configuration ### #2dlayerclusters, pfclusters, multiclusters - label_lcl = cms.InputTag("hgcalLayerClusters"), + label_lcl = layerClusterCaloParticleAssociation.label_lc, label_mcl = cms.VInputTag( cms.InputTag("ticlMultiClustersFromTrackstersTrk"), cms.InputTag("ticlMultiClustersFromTrackstersEM"), cms.InputTag("ticlMultiClustersFromTrackstersHAD"), cms.InputTag("ticlMultiClustersFromTrackstersMerge")), + associator = cms.untracked.InputTag("layerClusterCaloParticleAssociationProducer"), + + associatorSim = cms.untracked.InputTag("layerClusterSimClusterAssociationProducer"), + #General info on layers etc. SaveGeneralInfo = cms.untracked.bool(True), #CaloParticle related plots doCaloParticlePlots = cms.untracked.bool(True), #Select caloParticles for efficiency or pass through doCaloParticleSelection = cms.untracked.bool(True), + #SimCluster related plots + dosimclustersPlots = cms.untracked.bool(True), #Layer Cluster related plots dolayerclustersPlots = cms.untracked.bool(True), #Multi Cluster related plots @@ -37,11 +46,20 @@ cummatbudinxo = cms.FileInPath('Validation/HGCalValidation/data/D41.cumulative.xo'), ### sim input configuration ### - label_cp_effic = cms.InputTag("mix","MergedCaloTruth"), + label_cp_effic = layerClusterCaloParticleAssociation.label_cp, label_cp_fake = cms.InputTag("mix","MergedCaloTruth"), + #simClusters + label_scl = layerClusterSimClusterAssociation.label_scl, simVertices = cms.InputTag("g4SimHits"), + LayerClustersInputMask = cms.VInputTag( + cms.InputTag("ticlTrackstersTrkEM"), + cms.InputTag("ticlTrackstersEM"), + cms.InputTag("ticlTrackstersTrk"), + cms.InputTag("ticlTrackstersHAD") + ), + #Total number of layers of HGCal that we want to monitor #Could get this also from HGCalImagingAlgo::maxlayer but better to get it from here totallayers_to_monitor = cms.int32(52), @@ -58,7 +76,6 @@ from Configuration.ProcessModifiers.premix_stage2_cff import premix_stage2 premix_stage2.toModify(hgcalValidator, - label_cp_effic = "mixData:MergedCaloTruth", label_cp_fake = "mixData:MergedCaloTruth" ) diff --git a/Validation/HGCalValidation/python/HGVHistoProducerAlgoBlock_cfi.py b/Validation/HGCalValidation/python/HGVHistoProducerAlgoBlock_cfi.py index 7fa73952db4bd..49210b4334f0f 100644 --- a/Validation/HGCalValidation/python/HGVHistoProducerAlgoBlock_cfi.py +++ b/Validation/HGCalValidation/python/HGVHistoProducerAlgoBlock_cfi.py @@ -18,9 +18,14 @@ nintPt = cms.int32(100), #parameters for phi - minPhi = cms.double(-4.), - maxPhi = cms.double(4.), - nintPhi = cms.int32(100), + minPhi = cms.double(-3.2), + maxPhi = cms.double(3.2), + nintPhi = cms.int32(80), + + #parameters for counting mixed hits clusters + minMixedHitsSimCluster = cms.double(0.), + maxMixedHitsSimCluster = cms.double(800.), + nintMixedHitsSimCluster = cms.int32(100), #parameters for counting mixed hits clusters minMixedHitsCluster = cms.double(0.), @@ -42,6 +47,11 @@ maxZpos = cms.double(550.), nintZpos = cms.int32(1100), + #Parameters for the total number of simclusters per layer + minTotNsimClsperlay = cms.double(0.), + maxTotNsimClsperlay = cms.double(50.), + nintTotNsimClsperlay = cms.int32(50), + #Parameters for the total number of layer clusters per layer minTotNClsperlay = cms.double(0.), maxTotNClsperlay = cms.double(50.), @@ -56,8 +66,8 @@ #1. calo particle to layer clusters association per layer #2. layer cluster to calo particles association per layer minScore = cms.double(0.), - maxScore = cms.double(4.01), - nintScore = cms.int32(200), + maxScore = cms.double(1.02), + nintScore = cms.int32(51), #Parameters for shared energy fraction. That is: #1. Fraction of each of the layer clusters energy related to a @@ -73,6 +83,11 @@ maxMCLSharedEneFrac = cms.double(1.0), nintMCLSharedEneFrac = cms.int32(100), + #Parameters for the total number of simclusters per thickness + minTotNsimClsperthick = cms.double(0.), + maxTotNsimClsperthick = cms.double(800.), + nintTotNsimClsperthick = cms.int32(100), + #Parameters for the total number of layer clusters per thickness minTotNClsperthick = cms.double(0.), maxTotNClsperthick = cms.double(800.), @@ -165,4 +180,3 @@ nintZ = cms.int32(1100) ) - diff --git a/Validation/HGCalValidation/python/PostProcessorHGCAL_cfi.py b/Validation/HGCalValidation/python/PostProcessorHGCAL_cfi.py index b34a18309e036..5c9d8b47c919b 100644 --- a/Validation/HGCalValidation/python/PostProcessorHGCAL_cfi.py +++ b/Validation/HGCalValidation/python/PostProcessorHGCAL_cfi.py @@ -4,6 +4,7 @@ maxlayerzm = 50# last layer of BH -z maxlayerzp = 100# last layer of BH +z +#hgcalLayerClusters eff_layers = ["effic_eta_layer{:02d} 'LayerCluster Efficiency vs #eta Layer{:02d} in z-' Num_CaloParticle_Eta_perlayer{:02d} Denom_CaloParticle_Eta_perlayer{:02d}".format(i, i%maxlayerzm+1, i, i) if (i \n ", + "buttonandFunction" : "\n", + "divTabs" : "
\n \n \n \n
\n " +} diff --git a/Validation/HGCalValidation/scripts/hgcalPerformanceValidation.py b/Validation/HGCalValidation/scripts/hgcalPerformanceValidation.py index 39cf0fcdd77b2..6170daddc7ef0 100755 --- a/Validation/HGCalValidation/scripts/hgcalPerformanceValidation.py +++ b/Validation/HGCalValidation/scripts/hgcalPerformanceValidation.py @@ -17,8 +17,10 @@ import optparse import pandas as pd +from collections import OrderedDict + from Validation.RecoTrack.plotting.validation import Sample, Validation -from Validation.HGCalValidation.html import _sampleName,_pageNameMap,_summary,_summobj +from Validation.HGCalValidation.html import _sampleName,_pageNameMap,_summary,_summobj,_MatBudSections,_geoPageNameMap,_individualmaterials,_matPageNameMap,_individualmatplots,_individualMatPlotsDesc,_hideShowFun,_allmaterialsplots,_allmaterialsPlotsDesc, _fromvertexplots, _fromVertexPlotsDesc #------------------------------------------------------------------------------------------ #Parsing input options @@ -35,6 +37,8 @@ def parseOptions(): parser.add_option('-w', '--wwwarea', dest='WWWAREA', type='string', default='/eos/project/h/hgcaldpg/www', help='Objects to gather: hitValidation, hitCalibration, hgcalLayerClusters, hgcalMultiClusters, ticlMultiClustersFromTrackstersEM, ticlMultiClustersFromTrackstersHAD') parser.add_option('-y', '--dry-run', action='store_true', dest='DRYRUN', default=False, help='perform a dry run (nothing is lauched).') parser.add_option('-i', '--inputeosarea', dest='INPUT', type='string', default='/eos/cms/store/group/dpg_hgcal/comm_hgcal/apsallid/RelVals', help='Eos area where we will place all DQM files of the new and reference release campaign') + parser.add_option('', '--geometry', action='store_true', dest='GEOMETRY', default=False, help='Geometry validation section') + parser.add_option('', '--copyhtml', action='store_true', dest='COPYHTML', default=False, help='If used the main index.html file will be copied to the www area. Useful in case of experimenting to avoid surprises.') # store options and arguments as global variables global opt, args @@ -78,7 +82,19 @@ def putype(t): # will be placed. #------------------------------------------------------------------------------------------ #thereleases = { "CMSSW 11_1_X" : ["CMSSW_11_1_0_pre4_GEANT4","CMSSW_11_1_0_pre3","CMSSW_11_1_0_pre2"] } -thereleases = { "CMSSW 11_2_X" : [ +thereleases = OrderedDict() +thereleases = { "CMSSW 11_3_X" : [ + "CMSSW_11_3_0_pre3_G4VECGEOM_vs_CMSSW_11_3_0_pre3", + "CMSSW_11_3_0_pre3_D76_vs_CMSSW_11_3_0_pre3", + "CMSSW_11_3_0_pre3_vs_CMSSW_11_3_0_pre2", + "CMSSW_11_3_0_pre2_vs_CMSSW_11_3_0_pre1", + "CMSSW_11_3_0_pre1_vs_CMSSW_11_2_0_pre10", + ], + "CMSSW 11_2_X" : [ + "CMSSW_11_2_0_vs_CMSSW_11_2_0_pre10", + "CMSSW_11_2_0_pre10_vs_CMSSW_11_2_0_pre9", + "CMSSW_11_2_0_pre9_vs_CMSSW_11_2_0_pre8", + "CMSSW_11_2_0_pre8_vs_CMSSW_11_2_0_pre7", "CMSSW_11_2_0_pre7_vs_CMSSW_11_2_0_pre6", "CMSSW_11_2_0_pre6_ROOT622_vs_CMSSW_11_2_0_pre6", "CMSSW_11_2_0_pre6_vs_CMSSW_11_2_0_pre5", @@ -106,11 +122,20 @@ def putype(t): ] } -RefRelease='CMSSW_11_2_0_pre7' +geometryTests = OrderedDict() +geometryTests = { "Material budget" : [ + #"Extended2026D49_vs_Extended2026D71", + "Extended2026D49_vs_Extended2026D76" + ] +} + +GeoScenario = "Extended2026D49_vs_Extended2026D76" + +RefRelease='CMSSW_11_3_0_pre3' -NewRelease='CMSSW_11_2_0_pre7' +NewRelease='CMSSW_11_3_0_pre3_G4VECGEOM' -NotNormalRelease = "raw" +NotNormalRelease = "normal" NotNormalRefRelease = "normal" if ( os.path.isdir('%s/%s' %(opt.WWWAREA, NewRelease))) : @@ -121,7 +146,8 @@ def putype(t): if "raw" in NotNormalRelease: # appendglobaltag = "_2026D49noPU_raw1100_rsb" # appendglobaltag = "_2026D49noPU_raw1100" - appendglobaltag = "_2026D49noPU_gcc900" +# appendglobaltag = "_2026D49noPU_gcc900" + appendglobaltag = "_2026D76noPU" else: appendglobaltag = "_2026D49noPU" @@ -173,6 +199,8 @@ def putype(t): #Main workflow RelVals phase2samples_noPU = [ + #------------------------------ + #version v2 campaign #Sample("RelValZpTT_1500", midfix="14", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), ##Sample("RelValZpTT_1500", midfix="14TeV", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), #Sample("RelValZTT", midfix="14TeV", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), @@ -188,7 +216,8 @@ def putype(t): #Sample("RelValMinBias", midfix="14TeV", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), #Sample("RelValH125GGgluonfusion", midfix="14", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ) - + #------------------------------ + #NORMAL version v1 campaign Sample("RelValZpTT_1500", midfix="14", scenario="2026D49", appendGlobalTag=appendglobaltag ), #Sample("RelValZpTT_1500", midfix="14TeV", scenario="2026D49", appendGlobalTag=appendglobaltag ), Sample("RelValZTT", midfix="14TeV", scenario="2026D49", appendGlobalTag=appendglobaltag ), @@ -203,6 +232,7 @@ def putype(t): #Sample("RelValMinBias", midfix="14", scenario="2026D49", appendGlobalTag=appendglobaltag ), Sample("RelValMinBias", midfix="14TeV", scenario="2026D49", appendGlobalTag=appendglobaltag ), Sample("RelValH125GGgluonfusion", midfix="14", scenario="2026D49", appendGlobalTag=appendglobaltag ) + #------------------------------ ] @@ -228,34 +258,37 @@ def putype(t): #For the moment I cannot find these in pre7. phase2samples_noPU_extend_more = [ - #Sample("RelValCloseByPGun_CE_H_Fine_300um", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), - #Sample("RelValCloseByPGun_CE_H_Fine_200um", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), - #Sample("RelValCloseByPGun_CE_H_Fine_120um", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), - #Sample("RelValCloseByPGun_CE_H_Coarse_Scint", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), - #Sample("RelValCloseByPGun_CE_H_Coarse_300um", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), - #Sample("RelValCloseByPGun_CE_E_Front_300um", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), - #Sample("RelValCloseByPGun_CE_E_Front_200um", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), - #Sample("RelValCloseByPGun_CE_E_Front_120um", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), - #Sample("RelValSingleGammaFlatPt8To150", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), - #Sample("RelValSingleEFlatPt2To100", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), - #Sample("RelValSinglePiFlatPt0p7To10", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ) - - - - - Sample("RelValCloseByPGun_CE_H_Fine_300um", scenario="2026D49", appendGlobalTag=appendglobaltag ), - Sample("RelValCloseByPGun_CE_H_Fine_200um", scenario="2026D49", appendGlobalTag=appendglobaltag ), - Sample("RelValCloseByPGun_CE_H_Fine_120um", scenario="2026D49", appendGlobalTag=appendglobaltag ), - Sample("RelValCloseByPGun_CE_H_Coarse_Scint", scenario="2026D49", appendGlobalTag=appendglobaltag ), - Sample("RelValCloseByPGun_CE_H_Coarse_300um", scenario="2026D49", appendGlobalTag=appendglobaltag ), - Sample("RelValCloseByPGun_CE_E_Front_300um", scenario="2026D49", appendGlobalTag=appendglobaltag ), - Sample("RelValCloseByPGun_CE_E_Front_200um", scenario="2026D49", appendGlobalTag=appendglobaltag ), - Sample("RelValCloseByPGun_CE_E_Front_120um", scenario="2026D49", appendGlobalTag=appendglobaltag ), - Sample("RelValSingleGammaFlatPt8To150", scenario="2026D49", appendGlobalTag=appendglobaltag ), - Sample("RelValSingleEFlatPt2To100", scenario="2026D49", appendGlobalTag=appendglobaltag ), - Sample("RelValSinglePiFlatPt0p7To10", scenario="2026D49", appendGlobalTag=appendglobaltag ) + #------------------------------ + #version v2 campaign + Sample("RelValCloseByPGun_CE_H_Fine_300um", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), + Sample("RelValCloseByPGun_CE_H_Fine_200um", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), + Sample("RelValCloseByPGun_CE_H_Fine_120um", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), + Sample("RelValCloseByPGun_CE_H_Coarse_Scint", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), + Sample("RelValCloseByPGun_CE_H_Coarse_300um", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), + Sample("RelValCloseByPGun_CE_E_Front_300um", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), + Sample("RelValCloseByPGun_CE_E_Front_200um", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), + Sample("RelValCloseByPGun_CE_E_Front_120um", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), + Sample("RelValSingleGammaFlatPt8To150", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), + Sample("RelValSingleEFlatPt2To100", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ), + Sample("RelValSinglePiFlatPt0p7To10", scenario="2026D49", appendGlobalTag=appendglobaltag, version="v2" ) + + #------------------------------ + #NORMAL version v1 campaign + #Sample("RelValCloseByPGun_CE_H_Fine_300um", scenario="2026D49", appendGlobalTag=appendglobaltag ), + #Sample("RelValCloseByPGun_CE_H_Fine_200um", scenario="2026D49", appendGlobalTag=appendglobaltag ), + #Sample("RelValCloseByPGun_CE_H_Fine_120um", scenario="2026D49", appendGlobalTag=appendglobaltag ), + #Sample("RelValCloseByPGun_CE_H_Coarse_Scint", scenario="2026D49", appendGlobalTag=appendglobaltag ), + #Sample("RelValCloseByPGun_CE_H_Coarse_300um", scenario="2026D49", appendGlobalTag=appendglobaltag ), + #Sample("RelValCloseByPGun_CE_E_Front_300um", scenario="2026D49", appendGlobalTag=appendglobaltag ), + #Sample("RelValCloseByPGun_CE_E_Front_200um", scenario="2026D49", appendGlobalTag=appendglobaltag ), + #Sample("RelValCloseByPGun_CE_E_Front_120um", scenario="2026D49", appendGlobalTag=appendglobaltag ), + #Sample("RelValSingleGammaFlatPt8To150", scenario="2026D49", appendGlobalTag=appendglobaltag ), + #Sample("RelValSingleEFlatPt2To100", scenario="2026D49", appendGlobalTag=appendglobaltag ), + #Sample("RelValSinglePiFlatPt0p7To10", scenario="2026D49", appendGlobalTag=appendglobaltag ) + #------------------------------ + #Sample("RelValCloseByPGun_CE_H_Fine_300um", scenario="2026D49", appendGlobalTag=appendglobaltag + "_HGCal" ), #Sample("RelValCloseByPGun_CE_H_Fine_200um", scenario="2026D49", appendGlobalTag=appendglobaltag + "_HGCal" ), #Sample("RelValCloseByPGun_CE_H_Fine_120um", scenario="2026D49", appendGlobalTag=appendglobaltag + "_HGCal" ), @@ -289,6 +322,11 @@ def putype(t): phase2samples_noPU.extend(phase2samples_noPU_extend_more) #phase2samples_noPU.extend(phase2samples_noPU_oldnaming) +#phase2samples_noPU = [ +# Sample("RelValCloseByPGun_CE_E_Front_300um", scenario="2026D49", appendGlobalTag=appendglobaltag ), +# Sample("RelValCloseByPGun_CE_E_Front_200um", scenario="2026D49", appendGlobalTag=appendglobaltag ) +#] + #For the PU samples phase2samples_PU = [ Sample("RelValTTbar", midfix="14TeV", scenario="2026D49", putype=putype("25ns"), punum=200, appendGlobalTag="_2026D49PU200", version="v2"), @@ -334,7 +372,7 @@ def putype(t): #------------------------------------------------------------------------------------------ #This is the hgcalLayerClusters, ticlMultiClustersFromTrackstersEM, ticlMultiClustersFromTrackstersHAD, and hitCalibration part -if (opt.OBJ == 'hgcalLayerClusters' or opt.OBJ == 'hitCalibration' or opt.OBJ == 'ticlMultiClustersFromTrackstersEM' or opt.OBJ == 'ticlMultiClustersFromTrackstersHAD'): +if (opt.OBJ == 'hgcalLayerClusters' or opt.OBJ == 'hitCalibration' or opt.OBJ == 'ticlMultiClustersFromTrackstersEM' or opt.OBJ == 'ticlMultiClustersFromTrackstersHAD' or opt.OBJ == 'allTiclMultiClusters'): fragments = [] #Now that we have them in eos lets produce plots #Let's loop through RelVals @@ -358,30 +396,44 @@ def putype(t): if RefRelease == None: cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename)+ ' --collection %s' %(opt.HTMLVALNAME) elif "raw" in NotNormalRelease and "normal" in NotNormalRefRelease: - cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease).replace("mcRun4_realistic_v2_2026D49noPU_gcc900-v1","mcRun4_realistic_v2_2026D49noPU-v1") + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) + cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease).replace("mcRun4_realistic_v3_2026D76noPU-v1","mcRun4_realistic_v3_2026D49noPU-v1") + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) #cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease).replace("mcRun4_realistic_v3_2026D49noPU_raw1100_rsb-v1","mcRun4_realistic_v3_2026D49noPU-v1") + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) elif "raw" in NotNormalRelease and "raw" in NotNormalRefRelease: #cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease) + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease).replace("_raw1100","_raw1100_rsb") + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) elif "normal" in NotNormalRelease and "normal" in NotNormalRefRelease: - cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease) + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) + #cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease) + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) + cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease).replace("2026D49noPU-v2","2026D49noPU-v1") + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) else: #print inputpathRef, infi.filename(RefRelease).replace("D49","D41") #YOU SHOULD INSPECT EACH TIME THIS COMMAND AND THE REPLACE #cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease).replace("D49","D41").replace("200-v2","200-v1") + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) .replace("v2__", "v1__") cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease).replace("mcRun4_realistic_v2-v1", "mcRun4_realistic_v2_2026D49noPU-v1") + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) - #print cmd + print cmd if(opt.DRYRUN): print 'Dry-run: ['+cmd+']' else: output = processCmd(cmd) if opt.OBJ == 'hgcalLayerClusters': - processCmd('awk \'NR>=6&&NR<=44\' HGCValid_%s_Plots/index.html > HGCValid_%s_Plots/index_%s.html '% (opt.HTMLVALNAME,opt.HTMLVALNAME, samplename)) + processCmd('mv HGCValid_%s_Plots/plots_%s_Layer\ Clusters.html HGCValid_%s_Plots/index.html'%(opt.HTMLVALNAME,samplename,opt.HTMLVALNAME)) + processCmd('awk \'NR>=6&&NR<=589\' HGCValid_%s_Plots/index.html > HGCValid_%s_Plots/index_%s.html '% (opt.HTMLVALNAME,opt.HTMLVALNAME, samplename)) + processCmd('echo "
" >> HGCValid_%s_Plots/index_%s.html '%(opt.HTMLVALNAME, samplename) ) + processCmd('echo "
" >> HGCValid_%s_Plots/index_%s.html '%(opt.HTMLVALNAME, samplename) ) + if opt.OBJ == 'hitCalibration': - processCmd('awk \'NR>=6&&NR<=15\' HGCValid_%s_Plots/index.html > HGCValid_%s_Plots/index_%s.html '% (opt.HTMLVALNAME,opt.HTMLVALNAME, samplename)) - if opt.OBJ == 'ticlMultiClustersFromTrackstersEM' or opt.OBJ == 'ticlMultiClustersFromTrackstersHAD': - processCmd('awk \'NR>=6&&NR<=25\' HGCValid_%s_Plots/index.html > HGCValid_%s_Plots/index_%s.html '% (opt.HTMLVALNAME,opt.HTMLVALNAME, samplename)) + #processCmd('indexname=`ls HGCValid_%s_Plots/plots_*.html`; mv ${indexname} HGCValid_%s_Plots/index.html;'%(opt.HTMLVALNAME,opt.HTMLVALNAME)) + processCmd('mv HGCValid_%s_Plots/plots_%s_Calibrated\ RecHits.html HGCValid_%s_Plots/index.html'%(opt.HTMLVALNAME,samplename,opt.HTMLVALNAME)) + processCmd('sed -i \'s/Calibrated\ RecHits//g\' HGCValid_%s_Plots/index.html'%(opt.HTMLVALNAME) ) + processCmd('awk \'NR>=6&&NR<=27\' HGCValid_%s_Plots/index.html > HGCValid_%s_Plots/index_%s.html '% (opt.HTMLVALNAME,opt.HTMLVALNAME, samplename)) + processCmd('echo "
" >> HGCValid_%s_Plots/index_%s.html '%(opt.HTMLVALNAME, samplename) ) + processCmd('echo "
" >> HGCValid_%s_Plots/index_%s.html '%(opt.HTMLVALNAME, samplename) ) + + if opt.OBJ == 'ticlMultiClustersFromTrackstersEM' or opt.OBJ == 'ticlMultiClustersFromTrackstersHAD' or opt.OBJ == 'allTiclMultiClusters': + processCmd('mv HGCValid_%s_Plots/plots_%s_MultiClusters.html HGCValid_%s_Plots/index.html'%(opt.HTMLVALNAME,samplename,opt.HTMLVALNAME)) + processCmd('awk \'NR>=6&&NR<=141\' HGCValid_%s_Plots/index.html > HGCValid_%s_Plots/index_%s.html '% (opt.HTMLVALNAME,opt.HTMLVALNAME, samplename)) + processCmd('echo "
" >> HGCValid_%s_Plots/index_%s.html '%(opt.HTMLVALNAME, samplename) ) + processCmd('echo "
" >> HGCValid_%s_Plots/index_%s.html '%(opt.HTMLVALNAME, samplename) ) fragments.append( 'HGCValid_%s_Plots/index_%s.html'% (opt.HTMLVALNAME, samplename) ) @@ -452,13 +504,14 @@ def putype(t): if RefRelease == None: cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename)+ ' --collection %s' %(opt.HTMLVALNAME) elif "raw" in NotNormalRelease and "normal" in NotNormalRefRelease: - cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease).replace("mcRun4_realistic_v2_2026D49noPU_gcc900-v1","mcRun4_realistic_v2_2026D49noPU-v1") + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) + cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease).replace("mcRun4_realistic_v3_2026D76noPU-v1","mcRun4_realistic_v3_2026D49noPU-v1") + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) #cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease).replace("mcRun4_realistic_v3_2026D49noPU_raw1100_rsb-v1","mcRun4_realistic_v3_2026D49noPU-v1") + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) elif "raw" in NotNormalRelease and "raw" in NotNormalRefRelease: #cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease) + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease).replace("_raw1100","_raw1100_rsb") + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) elif "normal" in NotNormalRelease and "normal" in NotNormalRefRelease: - cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease) + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) + #cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease) + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) + cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease).replace("2026D49noPU-v2","2026D49noPU-v1") + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) else: #cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease).replace("D49","D41").replace("200-v2","200-v1") + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) cmd = 'python Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py ' + inputpathRef + infi.filename(RefRelease).replace("mcRun4_realistic_v2-v1", "mcRun4_realistic_v2_2026D49noPU-v1") + ' ' + inputpathNew + infi.filename(NewRelease) + ' --outputDir HGCValid_%s_Plots --no-ratio --png --separate --html-sample "%s" ' %(opt.HTMLVALNAME, _sampleName[infi.name()] ) + ' --html-validation-name %s --subdirprefix ' %(opt.HTMLVALNAME) + ' plots_%s' % (samplename) + ' --collection %s' %(opt.HTMLVALNAME) @@ -469,7 +522,10 @@ def putype(t): print 'Dry-run: ['+cmd+']' else: output = processCmd(cmd) - processCmd('awk \'NR>=6&&NR<=28\' HGCValid_%s_Plots/index.html > HGCValid_%s_Plots/index_%s.html '% (opt.HTMLVALNAME,opt.HTMLVALNAME, samplename)) + processCmd('mv HGCValid_%s_Plots/plots_%s_Hits.html HGCValid_%s_Plots/index.html'%(opt.HTMLVALNAME,samplename,opt.HTMLVALNAME)) + processCmd('awk \'NR>=6&&NR<=184\' HGCValid_%s_Plots/index.html > HGCValid_%s_Plots/index_%s.html '% (opt.HTMLVALNAME,opt.HTMLVALNAME, samplename)) + processCmd('echo "
" >> HGCValid_%s_Plots/index_%s.html '%(opt.HTMLVALNAME, samplename) ) + processCmd('echo "
" >> HGCValid_%s_Plots/index_%s.html '%(opt.HTMLVALNAME, samplename) ) fragments.append( 'HGCValid_%s_Plots/index_%s.html'% (opt.HTMLVALNAME, samplename) ) @@ -610,6 +666,10 @@ def putype(t): index_file.write('

\n') index_file.write(' HGCAL Validation Results \n' ) index_file.write('

\n') + index_file.write('
\n' ) + index_file.write('

\n') + index_file.write(' Release Validation Campaigns \n' ) + index_file.write('

\n') index_file.write('
    \n' ) for trel in thereleases.keys(): @@ -623,14 +683,47 @@ def putype(t): index_file.write('
    \n' ) index_file.write('
    \n' ) index_file.write('
    \n' ) - - #Writing postamble" + index_file.write('
\n' ) + index_file.write('
\n' ) + + #New section : Geometry Validation + #Regardless of the release validation, the top html menu should contain the geometry section. + #we put this in the "gather" step. + index_file.write('

\n') + index_file.write(' Geometry Validation \n' ) + index_file.write('

\n') + index_file.write('
    \n' ) + + for tgeo in geometryTests.keys(): + index_file.write('
  • \n' ) + index_file.write(' %s\n' %(tgeo) ) + for geo in geometryTests[tgeo]: + #We need the directory for the geometry related results + if (not os.path.isdir(geo)): + processCmd('mkdir -p %s/%s' %(opt.WWWAREA,geo) ) + processCmd('mkdir -p %s' %(geo) ) + for mats in _individualmaterials: + processCmd('mkdir -p %s/%s/indimat/%s' %(opt.WWWAREA,geo,mats) ) + processCmd('mkdir -p %s/indimat/%s' %(geo,mats) ) + + index_file.write('
      \n' ) + index_file.write('
    • %s
    • \n' %(geo, geo ) ) + index_file.write('
    \n' ) + index_file.write('
  • \n' ) + index_file.write('
    \n' ) + index_file.write('
    \n' ) + index_file.write('
    \n' ) + + #Writing postamble" index_file.write(' \n') index_file.write('\n') index_file.close() - processCmd('cp index.html %s/.' %(opt.WWWAREA) ) + #This is the main html file for the validation webpage. In order to avoid + #surprises when experimenting, in order to copy it automatically to the + #www area you should have activated the relevant flag: + if (opt.COPYHTML) : processCmd('cp index.html %s/.' %(opt.WWWAREA) ) #Let's make also the summary folder if (not os.path.isdir("HGCValid_summary_Plots")): @@ -675,7 +768,10 @@ def putype(t): #print(df[obj][ind]) print(j) #index_file.write('
  • %s
  • \n' %(samplename, df[obj][ind], df[obj][ind].partition("/")[2] )) - index_file.write('
  • %s
  • \n' %(j, samplename, column, column.partition("/")[2] )) + if "Ticl" in j: + index_file.write('
  • %s
  • \n' %(j, samplename, column, column.replace("ticlMultiClustersFromTracksters","") )) + else: + index_file.write('
  • %s
  • \n' %(j, samplename, column, column.partition("/")[2] )) index_file.write('
\n') index_file.write(' \n') @@ -698,7 +794,8 @@ def putype(t): if "raw" in NotNormalRelease and "raw" in NotNormalRefRelease: localoutputdir = NewRelease + "_raw1100" + "_vs_" + RefRelease + "_raw1100" elif "raw" in NotNormalRelease and "normal" in NotNormalRefRelease: - localoutputdir = NewRelease + "_raw1100" + "_vs_" + RefRelease + #localoutputdir = NewRelease + "_raw1100" + "_vs_" + RefRelease + localoutputdir = NewRelease + "_D76" + "_vs_" + RefRelease elif "normal" in NotNormalRelease and "normal" in NotNormalRefRelease: localoutputdir = NewRelease + "_vs_" + RefRelease else: @@ -729,6 +826,7 @@ def putype(t): else: processCmd('cp -r %s/HGCValid_%s_Plots/plots_%s_%s %s/HGCValid_summary_Plots ' %(NewRelease, obj, samplename, df[obj][ind].partition("/")[0], NewRelease ) ) ''' + #html file of the relval campaign we are validating index_file = open('%s/index.html'%(localoutputdir),'w') #Write preamble index_file.write('\n') @@ -736,7 +834,7 @@ def putype(t): index_file.write(' <h2> HGCal validation results for %s </h2> \n' %(localoutputdir) ) index_file.write(' \n') index_file.write(' \n') - index_file.write(' HGCal validation results for %s \n' %(localoutputdir) ) + index_file.write('

HGCal validation results for %s

\n' %(localoutputdir) ) for obj in objects: print(obj) @@ -758,7 +856,7 @@ def putype(t): index_file.write(' \n') index_file.write('\n') index_file.close() - + #We choose to zip in uncompressed form all the files for two reasons: #1. Copying to eos so many files is really slow. It is faster to # create one uncompressed file, copy that and unzip there. @@ -768,12 +866,236 @@ def putype(t): # the directory content, leaving inside only the zip file. # This will take some time. - processCmd('zip -0 -r %s.zip %s' %(localoutputdir,localoutputdir) ) - processCmd('cp %s.zip %s/.' %(localoutputdir,opt.WWWAREA) ) - processCmd('cd %s' %(opt.WWWAREA) ) - processCmd('unzip %s.zip' %(localoutputdir) ) - processCmd('mv %s.zip %s/.' %(localoutputdir,localoutputdir) ) - processCmd('cd -') +# processCmd('zip -0 -r %s.zip %s' %(localoutputdir,localoutputdir) ) +# processCmd('cp %s.zip %s/.' %(localoutputdir,opt.WWWAREA) ) +# processCmd('cd %s' %(opt.WWWAREA) ) +# processCmd('unzip -q %s.zip' %(localoutputdir) ) +# processCmd('mv %s.zip %s/.' %(localoutputdir,localoutputdir) ) +# processCmd('cd -') +#------------------------------------------------------------------------------------------ +#Geometry section: Here we gather results from geometry related validation packages. +#------------------------------------------------------------------------------------------- +#Keep in mind that the gne +if (opt.GEOMETRY) : + #html file of the geometry scenario we are estimating the material budget + index_file = open('%s/index.html'%(GeoScenario),'w') + #Write preamble + index_file.write('\n') + index_file.write(' \n') + index_file.write(' <h2> HGCAL material budget results for %s </h2> \n' %(GeoScenario) ) + index_file.write(' \n') + index_file.write(' \n') + index_file.write('

HGCAL material budget results for %s

\n' %(GeoScenario) ) + for obj in _MatBudSections: + print(obj) + #We need the directory for the geometry related results + if (not os.path.isdir('%s/%s/%s' %(opt.WWWAREA,GeoScenario,obj))): + processCmd('mkdir -p %s/%s/%s' %(opt.WWWAREA,GeoScenario,obj) ) + index_file.write('
\n' ) + index_file.write('
    \n' ) + index_file.write('
  • %s
  • \n' %(obj, _geoPageNameMap[obj] ) ) + index_file.write('
\n' ) + index_file.write('
\n' ) + + #Writing postamble + index_file.write(' \n') + index_file.write('\n') + index_file.close() + + #Copy the material budget menu file in the current geometry scenario + processCmd('cp %s/index.html %s/%s/.' %(GeoScenario, opt.WWWAREA,GeoScenario) ) + + #html file for the menu of the individual materials + index_file = open('%s/indimat/index.html'%(GeoScenario),'w') + #Write preamble + index_file.write('\n') + index_file.write(' \n') + index_file.write(' <h2> HGCAL material budget results for individual materials for %s </h2> \n' %(GeoScenario) ) + index_file.write(' \n') + index_file.write(' \n') + index_file.write('

HGCAL material budget results for individual materials for %s

\n' %(GeoScenario) ) + for mats in _individualmaterials: + print(mats) + #index_file.write('
\n' ) + index_file.write('
    \n' ) + index_file.write('
  • %s
  • \n' %(mats, _matPageNameMap[mats] ) ) + index_file.write('
\n' ) + #index_file.write('
\n' ) + + #Writing postamble + index_file.write(' \n') + index_file.write('\n') + index_file.close() + + #Copy the menu html file for the individual materials + processCmd('cp %s/indimat/index.html %s/%s/indimat/.' %(GeoScenario, opt.WWWAREA,GeoScenario) ) + + #html file for all HGCal stack plots materials + index_file = open('%s/allhgcal/index.html'%(GeoScenario),'w') + #Write preamble + index_file.write('\n') + index_file.write(' \n') + + index_file.write(' \n') + + index_file.write(_hideShowFun["thestyle"]) + + index_file.write(' <h2> HGCAL material budget results for all materials for %s </h2> \n' %(GeoScenario) ) + index_file.write(' \n') + index_file.write(' \n') + + index_file.write('

HGCAL material budget results for : All Materials

\n' ) + + index_file.write('

%s plots have a green border followed by the %s plots which features a red border.

\n' % (GeoScenario.split("_")[0], GeoScenario.split("_")[2]) ) + + index_file.write('

Geometry: %s_vs_%s

\n' % (GeoScenario.split("_")[0], GeoScenario.split("_")[2]) ) + + index_file.write('
\n') + + index_file.write(_hideShowFun["divTabs"]) + + for region in ["_AllHGCAL", "_ZminusZoom", "_ZplusZoom"]: + + index_file.write('
\n' %(region)) + pngnamestring = "" + if region == "_AllHGCAL": pngnamestring = "" + else: pngnamestring = region + + for allmatplot in _allmaterialsplots: + if region == "_AllHGCAL": + index_file.write('

%s Click to enlarge %s plot

\n' %(_allmaterialsPlotsDesc[allmatplot], GeoScenario.split("_")[2],allmatplot,pngnamestring,GeoScenario.split("_")[2])) + index_file.write(' \n' %(GeoScenario.split("_")[0],allmatplot,pngnamestring) ) + index_file.write(' \n' %(GeoScenario.split("_")[2],allmatplot,pngnamestring)) + index_file.write('
\n') + elif region != "_AllHGCAL" and "HGCal_l_vs_z_vs_R" in allmatplot: + index_file.write('

%s Click to enlarge %s plot

\n' %(_allmaterialsPlotsDesc[allmatplot], GeoScenario.split("_")[2],region.replace("_Zminus","ZMinus").replace("_Zplus","ZPlus"),allmatplot,pngnamestring,GeoScenario.split("_")[2])) + index_file.write(' \n' %(GeoScenario.split("_")[0],region.replace("_Zminus","ZMinus").replace("_Zplus","ZPlus"),allmatplot,pngnamestring) ) + index_file.write(' \n' %(GeoScenario.split("_")[2],region.replace("_Zminus","ZMinus").replace("_Zplus","ZPlus"),allmatplot,pngnamestring)) + index_file.write('
\n') + + + index_file.write('
\n') + + index_file.write(_hideShowFun["buttonandFunction"]) + index_file.write(' \n') + index_file.write('\n') + index_file.close() + + #Copy all materials budget file + processCmd('cp %s/allhgcal/index.html %s/%s/allhgcal/.' %(GeoScenario, opt.WWWAREA,GeoScenario) ) + + #html file of the individual materials for the material budget analysis + for mats in _individualmaterials: + index_file = open('%s/indimat/%s/index.html'%(GeoScenario,mats),'w') + #Write preamble + index_file.write('\n') + index_file.write(' \n') + + index_file.write(' \n') + + index_file.write(_hideShowFun["thestyle"]) + + index_file.write(' <h2> HGCAL material budget results for individual materials for %s </h2> \n' %(GeoScenario) ) + index_file.write(' \n') + index_file.write(' \n') + index_file.write('

HGCAL material budget results for : %s

\n' %(_matPageNameMap[mats]) ) + + index_file.write('

%s plots have a green border followed by the %s plots which features a red border.

\n' % (GeoScenario.split("_")[0], GeoScenario.split("_")[2]) ) + + index_file.write('

Geometry: %s_vs_%s

\n' % (GeoScenario.split("_")[0], GeoScenario.split("_")[2]) ) + + index_file.write('
\n') + + #-------------------------------------------------------------- + #This one below is a solution using a table with 3 columns: + #Two for the plots and the third for the text. + + #index_file.write('\n') + #index_file.write('\n') + + #for indiplots in _individualmatplots: + # index_file.write('\n') + # index_file.write('\n' %(GeoScenario.split("_")[0],mats,indiplots,mats) ) + # index_file.write('\n' %(GeoScenario.split("_")[2],mats,indiplots,mats)) + # index_file.write('\n' %(_individualMatPlotsDesc[indiplots].replace("THEMAT",_matPageNameMap[mats]), GeoScenario.split("_")[2],mats,indiplots,mats,GeoScenario.split("_")[2])) + # index_file.write('\n') + + #Writing postamble + #index_file.write('\n') + #index_file.write('
%s Click to enlarge %s plot
\n') + #-------------------------------------------------------------- + index_file.write(_hideShowFun["divTabs"]) + + #Individual material here for: All HGCAL, Zminus, Zplus + for region in ["_AllHGCAL", "_ZminusZoom", "_ZplusZoom"]: + #The hide/show button + #index_file.write(_hideShowFun["buttonandFunction%s"%(region)]) + + index_file.write('
\n' %(region)) + pngnamestring = "" + if region == "_AllHGCAL": pngnamestring = "" + else: pngnamestring = region + for indiplots in _individualmatplots: + if region == "_AllHGCAL": + index_file.write('

%s Click to enlarge %s plot

\n' %(_individualMatPlotsDesc[indiplots].replace("THEMAT",_matPageNameMap[mats]), GeoScenario.split("_")[2],mats,indiplots,mats,pngnamestring,GeoScenario.split("_")[2])) + index_file.write(' \n' %(GeoScenario.split("_")[0],mats,indiplots,mats,pngnamestring) ) + index_file.write(' \n' %(GeoScenario.split("_")[2],mats,indiplots,mats,pngnamestring)) + index_file.write('
\n') + else: + index_file.write('

%s Click to enlarge %s plot

\n' %(_individualMatPlotsDesc[indiplots].replace("THEMAT",_matPageNameMap[mats]), GeoScenario.split("_")[2],mats,region.replace("_Zminus","ZMinus").replace("_Zplus","ZPlus"),indiplots,mats,pngnamestring,GeoScenario.split("_")[2])) + index_file.write(' \n' %(GeoScenario.split("_")[0],mats,region.replace("_Zminus","ZMinus").replace("_Zplus","ZPlus"),indiplots,mats,pngnamestring) ) + index_file.write(' \n' %(GeoScenario.split("_")[2],mats,region.replace("_Zminus","ZMinus").replace("_Zplus","ZPlus"),indiplots,mats,pngnamestring)) + index_file.write('
\n') + + + index_file.write('
\n') + + index_file.write(_hideShowFun["buttonandFunction"]) + index_file.write(' \n') + index_file.write('\n') + index_file.close() + + #Copy the individual materials budget file + processCmd('cp %s/indimat/%s/index.html %s/%s/indimat/%s/.' %(GeoScenario, mats, opt.WWWAREA,GeoScenario,mats) ) + + #html file for from vertex up to muon stations + index_file = open('%s/fromvertex/index.html'%(GeoScenario),'w') + #Write preamble + index_file.write('\n') + index_file.write(' \n') + + index_file.write(' \n') + + index_file.write(_hideShowFun["thestyle"]) + + index_file.write(' <h2> HGCAL material budget results from vertex up to in front of muon stations for %s </h2> \n' %(GeoScenario) ) + index_file.write(' \n') + index_file.write(' \n') + + index_file.write('

HGCAL material budget results from vertex up to in front of muon stations: All detectors

\n' ) + + index_file.write('

%s plots have a green border followed by the %s plots which features a red border.

\n' % (GeoScenario.split("_")[0], GeoScenario.split("_")[2]) ) + + index_file.write('

Geometry: %s_vs_%s

\n' % (GeoScenario.split("_")[0], GeoScenario.split("_")[2]) ) + + index_file.write('
\n') + + #index_file.write(_hideShowFun["divTabs"]) + + for vertexplots in _fromvertexplots: + index_file.write('

%s

\n' %(_fromVertexPlotsDesc[vertexplots])) + index_file.write(' \n' %(GeoScenario.split("_")[0],vertexplots) ) + index_file.write(' \n' %(GeoScenario.split("_")[2],vertexplots) ) + index_file.write('
\n') + + #index_file.write(_hideShowFun["buttonandFunction"]) + index_file.write(' \n') + index_file.write('\n') + index_file.close() + + #Copy all materials budget file + processCmd('cp %s/fromvertex/index.html %s/%s/fromvertex/.' %(GeoScenario, opt.WWWAREA,GeoScenario) ) + diff --git a/Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py b/Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py index 2eb441df6a359..6c17718d2dd51 100755 --- a/Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py +++ b/Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py @@ -9,30 +9,37 @@ import Validation.HGCalValidation.hgcalPlots as hgcalPlots import Validation.RecoTrack.plotting.plotting as plotting +simClustersIters = ["ClusterLevel","ticlTrackstersTrkEM","ticlTrackstersEM","ticlTrackstersTrk","ticlTrackstersHAD"] + trackstersIters = ["ticlMultiClustersFromTrackstersMerge", "ticlMultiClustersFromTrackstersMIP", "ticlMultiClustersFromTrackstersTrk","ticlMultiClustersFromTrackstersTrkEM", "ticlMultiClustersFromTrackstersEM", "ticlMultiClustersFromTrackstersHAD", "ticlMultiClustersFromTrackstersDummy"] +simClustersGeneralLabel = 'simClusters' layerClustersGeneralLabel = 'hgcalLayerClusters' multiclustersGeneralLabel = 'hgcalMultiClusters' trackstersGeneralLabel = 'allTiclMultiClusters' hitValidationLabel = 'hitValidation' hitCalibrationLabel = 'hitCalibration' +caloParticlesLabel = 'caloParticles' allLabel = 'all' collection_choices = [layerClustersGeneralLabel] -collection_choices.extend([multiclustersGeneralLabel]+[trackstersGeneralLabel]+[hitValidationLabel]+[hitCalibrationLabel]+[allLabel]) +collection_choices.extend([simClustersGeneralLabel]+[multiclustersGeneralLabel]+[trackstersGeneralLabel]+[hitValidationLabel]+[hitCalibrationLabel]+[allLabel]+[caloParticlesLabel]) def main(opts): drawArgs={} + extendedFlag = False if opts.no_ratio: drawArgs["ratio"] = False if opts.separate: drawArgs["separate"] = True if opts.png: drawArgs["saveFormat"] = ".png" + if opts.extended: + extendedFlag = True if opts.verbose: plotting.verbose = True @@ -44,30 +51,59 @@ def main(opts): val = SeparateValidation([sample], opts.outputDir[0]) htmlReport = val.createHtmlReport(validationName=opts.html_validation_name[0]) - if opts.collection==layerClustersGeneralLabel: + #layerClusters + if (opts.collection == layerClustersGeneralLabel): hgclayclus = [hgcalPlots.hgcalLayerClustersPlotter] - hgcalPlots.append_hgcalLayerClustersPlots("hgcalLayerClusters", "Layer Clusters") + hgcalPlots.append_hgcalLayerClustersPlots("hgcalLayerClusters", "Layer Clusters", extendedFlag) val.doPlots(hgclayclus, plotterDrawArgs=drawArgs) - elif opts.collection == multiclustersGeneralLabel: + #simClusters + elif (opts.collection == simClustersGeneralLabel): + hgcsimclus = [hgcalPlots.hgcalSimClustersPlotter] + for i_iter in simClustersIters: + hgcalPlots.append_hgcalSimClustersPlots(i_iter, i_iter) + val.doPlots(hgcsimclus, plotterDrawArgs=drawArgs) + #multiClusters + elif (opts.collection == multiclustersGeneralLabel): hgcmulticlus = [hgcalPlots.hgcalMultiClustersPlotter] hgcalPlots.append_hgcalMultiClustersPlots(multiclustersGeneralLabel, "MultiClusters") val.doPlots(hgcmulticlus, plotterDrawArgs=drawArgs) - elif (opts.collection == trackstersGeneralLabel) : + #ticlTracksters + elif (opts.collection == trackstersGeneralLabel): hgcmulticlus = [hgcalPlots.hgcalMultiClustersPlotter] for i_iter in trackstersIters : tracksterCollection = i_iter.replace("ticlMultiClustersFromTracksters","ticlTracksters") hgcalPlots.append_hgcalMultiClustersPlots(i_iter, tracksterCollection) val.doPlots(hgcmulticlus, plotterDrawArgs=drawArgs) - elif opts.collection==hitValidationLabel: + elif (opts.collection == caloParticlesLabel): + particletypes = {"pion-":"-211", "pion+":"211", "pion0": "111", + "muon-": "-13", "muon+":"13", + "electron-": "-11", "electron+": "11", "photon": "22", + "kaon-": "-321", "kaon+": "321"} + hgcaloPart = [hgcalPlots.hgcalCaloParticlesPlotter] + for i_part, i_partID in particletypes.iteritems() : + hgcalPlots.append_hgcalCaloParticlesPlots(sample.files(), i_partID, i_part) + val.doPlots(hgcaloPart, plotterDrawArgs=drawArgs) + #hitValidation + elif (opts.collection == hitValidationLabel): hgchit = [hgcalPlots.hgcalHitPlotter] hgcalPlots.append_hgcalHitsPlots('HGCalSimHitsV', "Simulated Hits") hgcalPlots.append_hgcalHitsPlots('HGCalRecHitsV', "Reconstruced Hits") hgcalPlots.append_hgcalDigisPlots('HGCalDigisV', "Digis") - val.doPlots(hgchit, plotterDrawArgs=drawArgs) - elif opts.collection==hitCalibrationLabel: + val.doPlots(hgchit, plotterDrawArgs=drawArgs) + #hitCalibration + elif (opts.collection == hitCalibrationLabel): hgchitcalib = [hgcalPlots.hgcalHitCalibPlotter] val.doPlots(hgchitcalib, plotterDrawArgs=drawArgs) - else : + elif (opts.collection == allLabel): + #caloparticles + particletypes = {"pion-":"-211", "pion+":"211", "pion0": "111", + "muon-": "-13", "muon+":"13", + "electron-": "-11", "electron+": "11", "photon": "22", + "kaon-": "-321", "kaon+": "321"} + hgcaloPart = [hgcalPlots.hgcalCaloParticlesPlotter] + for i_part, i_partID in particletypes.iteritems() : + hgcalPlots.append_hgcalCaloParticlesPlots(sample.files(), i_partID, i_part) + val.doPlots(hgcaloPart, plotterDrawArgs=drawArgs) #hits hgchit = [hgcalPlots.hgcalHitPlotter] @@ -80,9 +116,15 @@ def main(opts): hgchitcalib = [hgcalPlots.hgcalHitCalibPlotter] val.doPlots(hgchitcalib, plotterDrawArgs=drawArgs) - #layer clusters + #simClusters + hgcsimclus = [hgcalPlots.hgcalSimClustersPlotter] + for i_iter in simClustersIters : + hgcalPlots.append_hgcalSimClustersPlots(i_iter, i_iter) + val.doPlots(hgcsimclus, plotterDrawArgs=drawArgs) + + #layer clusters hgclayclus = [hgcalPlots.hgcalLayerClustersPlotter] - hgcalPlots.append_hgcalLayerClustersPlots("hgcalLayerClusters", "Layer Clusters") + hgcalPlots.append_hgcalLayerClustersPlots("hgcalLayerClusters", "Layer Clusters", extendedFlag) val.doPlots(hgclayclus, plotterDrawArgs=drawArgs) #multiclusters @@ -92,6 +134,7 @@ def main(opts): hgcalPlots.append_hgcalMultiClustersPlots(i_iter, tracksterCollection) val.doPlots(hgcmulticlus, plotterDrawArgs=drawArgs) + if opts.no_html: print("Plots created into directory '%s'." % opts.outputDir) else: @@ -120,10 +163,12 @@ def main(opts): help="Sample name for HTML page generation (default 'Sample')") parser.add_argument("--html-validation-name", type=str, default=["",""], nargs="+", help="Validation name for HTML page generation (enters to element) (default '')") - parser.add_argument("--verbose", action="store_true", default = False, - help="Be verbose") parser.add_argument("--collection", choices=collection_choices, default=layerClustersGeneralLabel, help="Choose output plots collections among possible choices") + parser.add_argument("--extended", action="store_true", default = False, + help="Include extended set of plots (e.g. bunch of distributions; default off)") + parser.add_argument("--verbose", action="store_true", default = False, + help="Be verbose") opts = parser.parse_args() diff --git a/Validation/HGCalValidation/src/HGVHistoProducerAlgo.cc b/Validation/HGCalValidation/src/HGVHistoProducerAlgo.cc index 9e45bb02da062..e730e0edcc697 100644 --- a/Validation/HGCalValidation/src/HGVHistoProducerAlgo.cc +++ b/Validation/HGCalValidation/src/HGVHistoProducerAlgo.cc @@ -14,6 +14,8 @@ using namespace std; //configuration parameter for the HGCAL associator. const double ScoreCutLCtoCP_ = 0.1; const double ScoreCutCPtoLC_ = 0.1; +const double ScoreCutLCtoSC_ = 0.1; +const double ScoreCutSCtoLC_ = 0.1; const double ScoreCutMCLtoCPFakeMerge_ = 0.6; const double ScoreCutCPtoMCLDup_ = 0.2; @@ -39,6 +41,11 @@ HGVHistoProducerAlgo::HGVHistoProducerAlgo(const edm::ParameterSet& pset) maxPhi_(pset.getParameter<double>("maxPhi")), nintPhi_(pset.getParameter<int>("nintPhi")), + //parameters for counting mixed hits simclusters + minMixedHitsSimCluster_(pset.getParameter<double>("minMixedHitsSimCluster")), + maxMixedHitsSimCluster_(pset.getParameter<double>("maxMixedHitsSimCluster")), + nintMixedHitsSimCluster_(pset.getParameter<int>("nintMixedHitsSimCluster")), + //parameters for counting mixed hits clusters minMixedHitsCluster_(pset.getParameter<double>("minMixedHitsCluster")), maxMixedHitsCluster_(pset.getParameter<double>("maxMixedHitsCluster")), @@ -59,6 +66,11 @@ HGVHistoProducerAlgo::HGVHistoProducerAlgo(const edm::ParameterSet& pset) maxZpos_(pset.getParameter<double>("maxZpos")), nintZpos_(pset.getParameter<int>("nintZpos")), + //Parameters for the total number of simclusters per layer + minTotNsimClsperlay_(pset.getParameter<double>("minTotNsimClsperlay")), + maxTotNsimClsperlay_(pset.getParameter<double>("maxTotNsimClsperlay")), + nintTotNsimClsperlay_(pset.getParameter<int>("nintTotNsimClsperlay")), + //Parameters for the total number of layer clusters per layer minTotNClsperlay_(pset.getParameter<double>("minTotNClsperlay")), maxTotNClsperlay_(pset.getParameter<double>("maxTotNClsperlay")), @@ -90,6 +102,11 @@ HGVHistoProducerAlgo::HGVHistoProducerAlgo(const edm::ParameterSet& pset) maxMCLSharedEneFrac_(pset.getParameter<double>("maxMCLSharedEneFrac")), nintMCLSharedEneFrac_(pset.getParameter<int>("nintMCLSharedEneFrac")), + //Parameters for the total number of simclusters per thickness + minTotNsimClsperthick_(pset.getParameter<double>("minTotNsimClsperthick")), + maxTotNsimClsperthick_(pset.getParameter<double>("maxTotNsimClsperthick")), + nintTotNsimClsperthick_(pset.getParameter<int>("nintTotNsimClsperthick")), + //Parameters for the total number of layer clusters per thickness minTotNClsperthick_(pset.getParameter<double>("minTotNClsperthick")), maxTotNClsperthick_(pset.getParameter<double>("maxTotNClsperthick")), @@ -192,24 +209,393 @@ void HGVHistoProducerAlgo::bookInfo(DQMStore::IBooker& ibook, Histograms& histog histograms.maxlayerzp = ibook.bookInt("maxlayerzp"); } -void HGVHistoProducerAlgo::bookCaloParticleHistos(DQMStore::IBooker& ibook, Histograms& histograms, int pdgid) { +void HGVHistoProducerAlgo::bookCaloParticleHistos(DQMStore::IBooker& ibook, + Histograms& histograms, + int pdgid, + unsigned int layers) { histograms.h_caloparticle_eta[pdgid] = - ibook.book1D("num_caloparticle_eta", "N of caloparticle vs eta", nintEta_, minEta_, maxEta_); + ibook.book1D("N of caloparticle vs eta", "N of caloparticle vs eta", nintEta_, minEta_, maxEta_); histograms.h_caloparticle_eta_Zorigin[pdgid] = ibook.book2D("Eta vs Zorigin", "Eta vs Zorigin", nintEta_, minEta_, maxEta_, nintZpos_, minZpos_, maxZpos_); histograms.h_caloparticle_energy[pdgid] = - ibook.book1D("caloparticle_energy", "Energy of caloparticle", nintEne_, minEne_, maxEne_); - histograms.h_caloparticle_pt[pdgid] = ibook.book1D("caloparticle_pt", "Pt of caloparticle", nintPt_, minPt_, maxPt_); - histograms.h_caloparticle_phi[pdgid] = - ibook.book1D("caloparticle_phi", "Phi of caloparticle", nintPhi_, minPhi_, maxPhi_); + ibook.book1D("Energy", "Energy of caloparticle", nintEne_, minEne_, maxEne_); + histograms.h_caloparticle_pt[pdgid] = ibook.book1D("Pt", "Pt of caloparticle", nintPt_, minPt_, maxPt_); + histograms.h_caloparticle_phi[pdgid] = ibook.book1D("Phi", "Phi of caloparticle", nintPhi_, minPhi_, maxPhi_); + histograms.h_caloparticle_selfenergy[pdgid] = + ibook.book1D("SelfEnergy", "Total Energy of Hits in Sim Clusters (matched)", nintEne_, minEne_, maxEne_); + histograms.h_caloparticle_energyDifference[pdgid] = + ibook.book1D("EnergyDifference", "(Energy-SelfEnergy)/Energy", 300., -5., 1.); + + histograms.h_caloparticle_nSimClusters[pdgid] = + ibook.book1D("Num Sim Clusters", "Num Sim Clusters in caloparticle", 100, 0., 100.); + histograms.h_caloparticle_nHitsInSimClusters[pdgid] = + ibook.book1D("Num Hits in Sim Clusters", "Num Hits in Sim Clusters in caloparticle", 1000, 0., 1000.); + histograms.h_caloparticle_nHitsInSimClusters_matchedtoRecHit[pdgid] = ibook.book1D( + "Num Rec-matched Hits in Sim Clusters", "Num Hits in Sim Clusters (matched) in caloparticle", 1000, 0., 1000.); + + histograms.h_caloparticle_nHits_matched_energy[pdgid] = + ibook.book1D("Energy of Rec-matched Hits", "Energy of Hits in Sim Clusters (matched)", 100, 0., 10.); + histograms.h_caloparticle_nHits_matched_energy_layer[pdgid] = + ibook.book2D("Energy of Rec-matched Hits vs layer", + "Energy of Hits in Sim Clusters (matched) vs layer", + 2 * layers, + 0., + (float)2 * layers, + 100, + 0., + 10.); + histograms.h_caloparticle_nHits_matched_energy_layer_1SimCl[pdgid] = + ibook.book2D("Energy of Rec-matched Hits vs layer (1SC)", + "Energy of Hits only 1 Sim Clusters (matched) vs layer", + 2 * layers, + 0., + (float)2 * layers, + 100, + 0., + 10.); + histograms.h_caloparticle_sum_energy_layer[pdgid] = + ibook.book2D("Rec-matched Hits Sum Energy vs layer", + "Rescaled Sum Energy of Hits in Sim Clusters (matched) vs layer", + 2 * layers, + 0., + (float)2 * layers, + 110, + 0., + 110.); + + histograms.h_caloparticle_firstlayer[pdgid] = + ibook.book1D("First Layer", "First layer of the caloparticle", 2 * layers, 0., (float)2 * layers); + histograms.h_caloparticle_lastlayer[pdgid] = + ibook.book1D("Last Layer", "Last layer of the caloparticle", 2 * layers, 0., (float)2 * layers); + histograms.h_caloparticle_layersnum[pdgid] = + ibook.book1D("Number of Layers", "Number of layers of the caloparticle", 2 * layers, 0., (float)2 * layers); + histograms.h_caloparticle_firstlayer_matchedtoRecHit[pdgid] = ibook.book1D( + "First Layer (rec-matched hit)", "First layer of the caloparticle (matched)", 2 * layers, 0., (float)2 * layers); + histograms.h_caloparticle_lastlayer_matchedtoRecHit[pdgid] = ibook.book1D( + "Last Layer (rec-matched hit)", "Last layer of the caloparticle (matched)", 2 * layers, 0., (float)2 * layers); + histograms.h_caloparticle_layersnum_matchedtoRecHit[pdgid] = + ibook.book1D("Number of Layers (rec-matched hit)", + "Number of layers of the caloparticle (matched)", + 2 * layers, + 0., + (float)2 * layers); } -void HGVHistoProducerAlgo::bookClusterHistos(DQMStore::IBooker& ibook, - Histograms& histograms, - unsigned layers, - std::vector<int> thicknesses, - std::string pathtomatbudfile) { +void HGVHistoProducerAlgo::bookSimClusterHistos(DQMStore::IBooker& ibook, + Histograms& histograms, + unsigned int layers, + std::vector<int> thicknesses) { + //--------------------------------------------------------------------------------------------------------------------------- + for (unsigned ilayer = 0; ilayer < 2 * layers; ++ilayer) { + auto istr1 = std::to_string(ilayer); + while (istr1.size() < 2) { + istr1.insert(0, "0"); + } + //We will make a mapping to the regural layer naming plus z- or z+ for convenience + std::string istr2 = ""; + //First with the -z endcap + if (ilayer < layers) { + istr2 = std::to_string(ilayer + 1) + " in z-"; + } else { //Then for the +z + istr2 = std::to_string(ilayer - (layers - 1)) + " in z+"; + } + histograms.h_simclusternum_perlayer[ilayer] = ibook.book1D("totsimclusternum_layer_" + istr1, + "total number of SimClusters for layer " + istr2, + nintTotNsimClsperlay_, + minTotNsimClsperlay_, + maxTotNsimClsperlay_); + + } //end of loop over layers + //--------------------------------------------------------------------------------------------------------------------------- + for (std::vector<int>::iterator it = thicknesses.begin(); it != thicknesses.end(); ++it) { + auto istr = std::to_string(*it); + histograms.h_simclusternum_perthick[(*it)] = ibook.book1D("totsimclusternum_thick_" + istr, + "total number of simclusters for thickness " + istr, + nintTotNsimClsperthick_, + minTotNsimClsperthick_, + maxTotNsimClsperthick_); + } //end of loop over thicknesses + + //--------------------------------------------------------------------------------------------------------------------------- + //z- + histograms.h_mixedhitssimcluster_zminus = + ibook.book1D("mixedhitssimcluster_zminus", + "N of simclusters that contain hits of more than one kind in z-", + nintMixedHitsSimCluster_, + minMixedHitsSimCluster_, + maxMixedHitsSimCluster_); + //z+ + histograms.h_mixedhitssimcluster_zplus = + ibook.book1D("mixedhitssimcluster_zplus", + "N of simclusters that contain hits of more than one kind in z+", + nintMixedHitsSimCluster_, + minMixedHitsSimCluster_, + maxMixedHitsSimCluster_); +} + +void HGVHistoProducerAlgo::bookSimClusterAssociationHistos(DQMStore::IBooker& ibook, + Histograms& histograms, + unsigned int layers, + std::vector<int> thicknesses) { + std::unordered_map<int, dqm::reco::MonitorElement*> denom_layercl_in_simcl_eta_perlayer; + denom_layercl_in_simcl_eta_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> denom_layercl_in_simcl_phi_perlayer; + denom_layercl_in_simcl_phi_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> score_layercl2simcluster_perlayer; + score_layercl2simcluster_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> sharedenergy_layercl2simcluster_perlayer; + sharedenergy_layercl2simcluster_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> energy_vs_score_layercl2simcluster_perlayer; + energy_vs_score_layercl2simcluster_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> num_layercl_in_simcl_eta_perlayer; + num_layercl_in_simcl_eta_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> num_layercl_in_simcl_phi_perlayer; + num_layercl_in_simcl_phi_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> numMerge_layercl_in_simcl_eta_perlayer; + numMerge_layercl_in_simcl_eta_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> numMerge_layercl_in_simcl_phi_perlayer; + numMerge_layercl_in_simcl_phi_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> sharedenergy_layercl2simcluster_vs_eta_perlayer; + sharedenergy_layercl2simcluster_vs_eta_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> sharedenergy_layercl2simcluster_vs_phi_perlayer; + sharedenergy_layercl2simcluster_vs_phi_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> denom_simcluster_eta_perlayer; + denom_simcluster_eta_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> denom_simcluster_phi_perlayer; + denom_simcluster_phi_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> score_simcluster2layercl_perlayer; + score_simcluster2layercl_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> sharedenergy_simcluster2layercl_perlayer; + sharedenergy_simcluster2layercl_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> energy_vs_score_simcluster2layercl_perlayer; + energy_vs_score_simcluster2layercl_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> num_simcluster_eta_perlayer; + num_simcluster_eta_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> num_simcluster_phi_perlayer; + num_simcluster_phi_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> numDup_simcluster_eta_perlayer; + numDup_simcluster_eta_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> numDup_simcluster_phi_perlayer; + numDup_simcluster_phi_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> sharedenergy_simcluster2layercl_vs_eta_perlayer; + sharedenergy_simcluster2layercl_vs_eta_perlayer.clear(); + std::unordered_map<int, dqm::reco::MonitorElement*> sharedenergy_simcluster2layercl_vs_phi_perlayer; + sharedenergy_simcluster2layercl_vs_phi_perlayer.clear(); + + //--------------------------------------------------------------------------------------------------------------------------- + for (unsigned ilayer = 0; ilayer < 2 * layers; ++ilayer) { + auto istr1 = std::to_string(ilayer); + while (istr1.size() < 2) { + istr1.insert(0, "0"); + } + //We will make a mapping to the regural layer naming plus z- or z+ for convenience + std::string istr2 = ""; + //First with the -z endcap + if (ilayer < layers) { + istr2 = std::to_string(ilayer + 1) + " in z-"; + } else { //Then for the +z + istr2 = std::to_string(ilayer - (layers - 1)) + " in z+"; + } + //------------------------------------------------------------------------------------------------------------------------- + denom_layercl_in_simcl_eta_perlayer[ilayer] = + ibook.book1D("Denom_LayerCluster_in_SimCluster_Eta_perlayer" + istr1, + "Denom LayerCluster in SimCluster Eta per Layer Cluster for layer " + istr2, + nintEta_, + minEta_, + maxEta_); + //------------------------------------------------------------------------------------------------------------------------- + denom_layercl_in_simcl_phi_perlayer[ilayer] = + ibook.book1D("Denom_LayerCluster_in_SimCluster_Phi_perlayer" + istr1, + "Denom LayerCluster in SimCluster Phi per Layer Cluster for layer " + istr2, + nintPhi_, + minPhi_, + maxPhi_); + //------------------------------------------------------------------------------------------------------------------------- + score_layercl2simcluster_perlayer[ilayer] = ibook.book1D("Score_layercl2simcluster_perlayer" + istr1, + "Score of Layer Cluster per SimCluster for layer " + istr2, + nintScore_, + minScore_, + maxScore_); + //------------------------------------------------------------------------------------------------------------------------- + score_simcluster2layercl_perlayer[ilayer] = ibook.book1D("Score_simcluster2layercl_perlayer" + istr1, + "Score of SimCluster per Layer Cluster for layer " + istr2, + nintScore_, + minScore_, + maxScore_); + //------------------------------------------------------------------------------------------------------------------------- + energy_vs_score_simcluster2layercl_perlayer[ilayer] = + ibook.book2D("Energy_vs_Score_simcluster2layer_perlayer" + istr1, + "Energy vs Score of SimCluster per Layer Cluster for layer " + istr2, + nintScore_, + minScore_, + maxScore_, + nintSharedEneFrac_, + minSharedEneFrac_, + maxSharedEneFrac_); + //------------------------------------------------------------------------------------------------------------------------- + energy_vs_score_layercl2simcluster_perlayer[ilayer] = + ibook.book2D("Energy_vs_Score_layer2simcluster_perlayer" + istr1, + "Energy vs Score of Layer Cluster per SimCluster for layer " + istr2, + nintScore_, + minScore_, + maxScore_, + nintSharedEneFrac_, + minSharedEneFrac_, + maxSharedEneFrac_); + //------------------------------------------------------------------------------------------------------------------------- + sharedenergy_simcluster2layercl_perlayer[ilayer] = + ibook.book1D("SharedEnergy_simcluster2layercl_perlayer" + istr1, + "Shared Energy of SimCluster per Layer Cluster for layer " + istr2, + nintSharedEneFrac_, + minSharedEneFrac_, + maxSharedEneFrac_); + //------------------------------------------------------------------------------------------------------------------------- + sharedenergy_simcluster2layercl_vs_eta_perlayer[ilayer] = + ibook.bookProfile("SharedEnergy_simcluster2layercl_vs_eta_perlayer" + istr1, + "Shared Energy of SimCluster vs #eta per best Layer Cluster for layer " + istr2, + nintEta_, + minEta_, + maxEta_, + minSharedEneFrac_, + maxSharedEneFrac_); + //------------------------------------------------------------------------------------------------------------------------- + sharedenergy_simcluster2layercl_vs_phi_perlayer[ilayer] = + ibook.bookProfile("SharedEnergy_simcluster2layercl_vs_phi_perlayer" + istr1, + "Shared Energy of SimCluster vs #phi per best Layer Cluster for layer " + istr2, + nintPhi_, + minPhi_, + maxPhi_, + minSharedEneFrac_, + maxSharedEneFrac_); + //------------------------------------------------------------------------------------------------------------------------- + sharedenergy_layercl2simcluster_perlayer[ilayer] = + ibook.book1D("SharedEnergy_layercluster2simcluster_perlayer" + istr1, + "Shared Energy of Layer Cluster per SimCluster for layer " + istr2, + nintSharedEneFrac_, + minSharedEneFrac_, + maxSharedEneFrac_); + //------------------------------------------------------------------------------------------------------------------------- + sharedenergy_layercl2simcluster_vs_eta_perlayer[ilayer] = + ibook.bookProfile("SharedEnergy_layercl2simcluster_vs_eta_perlayer" + istr1, + "Shared Energy of LayerCluster vs #eta per best SimCluster for layer " + istr2, + nintEta_, + minEta_, + maxEta_, + minSharedEneFrac_, + maxSharedEneFrac_); + //------------------------------------------------------------------------------------------------------------------------- + sharedenergy_layercl2simcluster_vs_phi_perlayer[ilayer] = + ibook.bookProfile("SharedEnergy_layercl2simcluster_vs_phi_perlayer" + istr1, + "Shared Energy of LayerCluster vs #phi per best SimCluster for layer " + istr2, + nintPhi_, + minPhi_, + maxPhi_, + minSharedEneFrac_, + maxSharedEneFrac_); + //------------------------------------------------------------------------------------------------------------------------- + num_simcluster_eta_perlayer[ilayer] = ibook.book1D("Num_SimCluster_Eta_perlayer" + istr1, + "Num SimCluster Eta per Layer Cluster for layer " + istr2, + nintEta_, + minEta_, + maxEta_); + //------------------------------------------------------------------------------------------------------------------------- + numDup_simcluster_eta_perlayer[ilayer] = + ibook.book1D("NumDup_SimCluster_Eta_perlayer" + istr1, + "Num Duplicate SimCluster Eta per Layer Cluster for layer " + istr2, + nintEta_, + minEta_, + maxEta_); + //------------------------------------------------------------------------------------------------------------------------- + denom_simcluster_eta_perlayer[ilayer] = ibook.book1D("Denom_SimCluster_Eta_perlayer" + istr1, + "Denom SimCluster Eta per Layer Cluster for layer " + istr2, + nintEta_, + minEta_, + maxEta_); + //------------------------------------------------------------------------------------------------------------------------- + num_simcluster_phi_perlayer[ilayer] = ibook.book1D("Num_SimCluster_Phi_perlayer" + istr1, + "Num SimCluster Phi per Layer Cluster for layer " + istr2, + nintPhi_, + minPhi_, + maxPhi_); + //------------------------------------------------------------------------------------------------------------------------- + numDup_simcluster_phi_perlayer[ilayer] = + ibook.book1D("NumDup_SimCluster_Phi_perlayer" + istr1, + "Num Duplicate SimCluster Phi per Layer Cluster for layer " + istr2, + nintPhi_, + minPhi_, + maxPhi_); + //------------------------------------------------------------------------------------------------------------------------- + denom_simcluster_phi_perlayer[ilayer] = ibook.book1D("Denom_SimCluster_Phi_perlayer" + istr1, + "Denom SimCluster Phi per Layer Cluster for layer " + istr2, + nintPhi_, + minPhi_, + maxPhi_); + //------------------------------------------------------------------------------------------------------------------------- + num_layercl_in_simcl_eta_perlayer[ilayer] = + ibook.book1D("Num_LayerCluster_in_SimCluster_Eta_perlayer" + istr1, + "Num LayerCluster Eta per Layer Cluster in SimCluster for layer " + istr2, + nintEta_, + minEta_, + maxEta_); + //------------------------------------------------------------------------------------------------------------------------- + numMerge_layercl_in_simcl_eta_perlayer[ilayer] = + ibook.book1D("NumMerge_LayerCluster_in_SimCluster_Eta_perlayer" + istr1, + "Num Merge LayerCluster Eta per Layer Cluster in SimCluster for layer " + istr2, + nintEta_, + minEta_, + maxEta_); + //------------------------------------------------------------------------------------------------------------------------- + num_layercl_in_simcl_phi_perlayer[ilayer] = + ibook.book1D("Num_LayerCluster_in_SimCluster_Phi_perlayer" + istr1, + "Num LayerCluster Phi per Layer Cluster in SimCluster for layer " + istr2, + nintPhi_, + minPhi_, + maxPhi_); + //------------------------------------------------------------------------------------------------------------------------- + numMerge_layercl_in_simcl_phi_perlayer[ilayer] = + ibook.book1D("NumMerge_LayerCluster_in_SimCluster_Phi_perlayer" + istr1, + "Num Merge LayerCluster Phi per Layer Cluster in SimCluster for layer " + istr2, + nintPhi_, + minPhi_, + maxPhi_); + + } //end of loop over layers + + histograms.h_denom_layercl_in_simcl_eta_perlayer.push_back(std::move(denom_layercl_in_simcl_eta_perlayer)); + histograms.h_denom_layercl_in_simcl_phi_perlayer.push_back(std::move(denom_layercl_in_simcl_phi_perlayer)); + histograms.h_score_layercl2simcluster_perlayer.push_back(std::move(score_layercl2simcluster_perlayer)); + histograms.h_sharedenergy_layercl2simcluster_perlayer.push_back(std::move(sharedenergy_layercl2simcluster_perlayer)); + histograms.h_energy_vs_score_layercl2simcluster_perlayer.push_back( + std::move(energy_vs_score_layercl2simcluster_perlayer)); + histograms.h_num_layercl_in_simcl_eta_perlayer.push_back(std::move(num_layercl_in_simcl_eta_perlayer)); + histograms.h_num_layercl_in_simcl_phi_perlayer.push_back(std::move(num_layercl_in_simcl_phi_perlayer)); + histograms.h_numMerge_layercl_in_simcl_eta_perlayer.push_back(std::move(numMerge_layercl_in_simcl_eta_perlayer)); + histograms.h_numMerge_layercl_in_simcl_phi_perlayer.push_back(std::move(numMerge_layercl_in_simcl_phi_perlayer)); + histograms.h_sharedenergy_layercl2simcluster_vs_eta_perlayer.push_back( + std::move(sharedenergy_layercl2simcluster_vs_eta_perlayer)); + histograms.h_sharedenergy_layercl2simcluster_vs_phi_perlayer.push_back( + std::move(sharedenergy_layercl2simcluster_vs_phi_perlayer)); + histograms.h_denom_simcluster_eta_perlayer.push_back(std::move(denom_simcluster_eta_perlayer)); + histograms.h_denom_simcluster_phi_perlayer.push_back(std::move(denom_simcluster_phi_perlayer)); + histograms.h_score_simcluster2layercl_perlayer.push_back(std::move(score_simcluster2layercl_perlayer)); + histograms.h_sharedenergy_simcluster2layercl_perlayer.push_back(std::move(sharedenergy_simcluster2layercl_perlayer)); + histograms.h_energy_vs_score_simcluster2layercl_perlayer.push_back( + std::move(energy_vs_score_simcluster2layercl_perlayer)); + histograms.h_num_simcluster_eta_perlayer.push_back(std::move(num_simcluster_eta_perlayer)); + histograms.h_num_simcluster_phi_perlayer.push_back(std::move(num_simcluster_phi_perlayer)); + histograms.h_numDup_simcluster_eta_perlayer.push_back(std::move(numDup_simcluster_eta_perlayer)); + histograms.h_numDup_simcluster_phi_perlayer.push_back(std::move(numDup_simcluster_phi_perlayer)); + histograms.h_sharedenergy_simcluster2layercl_vs_eta_perlayer.push_back( + std::move(sharedenergy_simcluster2layercl_vs_eta_perlayer)); + histograms.h_sharedenergy_simcluster2layercl_vs_phi_perlayer.push_back( + std::move(sharedenergy_simcluster2layercl_vs_phi_perlayer)); +} +void HGVHistoProducerAlgo::bookClusterHistos_ClusterLevel(DQMStore::IBooker& ibook, + Histograms& histograms, + unsigned int layers, + std::vector<int> thicknesses, + std::string pathtomatbudfile) { //--------------------------------------------------------------------------------------------------------------------------- histograms.h_cluster_eta.push_back( ibook.book1D("num_reco_cluster_eta", "N of reco clusters vs eta", nintEta_, minEta_, maxEta_)); @@ -288,6 +674,37 @@ void HGVHistoProducerAlgo::bookClusterHistos(DQMStore::IBooker& ibook, nintEneClperlay_, minEneClperlay_, maxEneClperlay_); + } + + //--------------------------------------------------------------------------------------------------------------------------- + for (std::vector<int>::iterator it = thicknesses.begin(); it != thicknesses.end(); ++it) { + auto istr = std::to_string(*it); + histograms.h_clusternum_perthick[(*it)] = ibook.book1D("totclusternum_thick_" + istr, + "total number of layer clusters for thickness " + istr, + nintTotNClsperthick_, + minTotNClsperthick_, + maxTotNClsperthick_); + } + //--------------------------------------------------------------------------------------------------------------------------- +} + +void HGVHistoProducerAlgo::bookClusterHistos_LCtoCP_association(DQMStore::IBooker& ibook, + Histograms& histograms, + unsigned int layers) { + //---------------------------------------------------------------------------------------------------------------------------- + for (unsigned ilayer = 0; ilayer < 2 * layers; ++ilayer) { + auto istr1 = std::to_string(ilayer); + while (istr1.size() < 2) { + istr1.insert(0, "0"); + } + //We will make a mapping to the regural layer naming plus z- or z+ for convenience + std::string istr2 = ""; + //First with the -z endcap + if (ilayer < layers) { + istr2 = std::to_string(ilayer + 1) + " in z-"; + } else { //Then for the +z + istr2 = std::to_string(ilayer - (layers - 1)) + " in z+"; + } histograms.h_score_layercl2caloparticle_perlayer[ilayer] = ibook.book1D("Score_layercl2caloparticle_perlayer" + istr1, "Score of Layer Cluster per CaloParticle for layer " + istr2, @@ -434,6 +851,28 @@ void HGVHistoProducerAlgo::bookClusterHistos(DQMStore::IBooker& ibook, nintPhi_, minPhi_, maxPhi_); + } + //--------------------------------------------------------------------------------------------------------------------------- +} + +void HGVHistoProducerAlgo::bookClusterHistos_CellLevel(DQMStore::IBooker& ibook, + Histograms& histograms, + unsigned int layers, + std::vector<int> thicknesses) { + //---------------------------------------------------------------------------------------------------------------------------- + for (unsigned ilayer = 0; ilayer < 2 * layers; ++ilayer) { + auto istr1 = std::to_string(ilayer); + while (istr1.size() < 2) { + istr1.insert(0, "0"); + } + //We will make a mapping to the regural layer naming plus z- or z+ for convenience + std::string istr2 = ""; + //First with the -z endcap + if (ilayer < layers) { + istr2 = std::to_string(ilayer + 1) + " in z-"; + } else { //Then for the +z + istr2 = std::to_string(ilayer - (layers - 1)) + " in z+"; + } histograms.h_cellAssociation_perlayer[ilayer] = ibook.book1D("cellAssociation_perlayer" + istr1, "Cell Association for layer " + istr2, 5, -4., 1.); histograms.h_cellAssociation_perlayer[ilayer]->setBinLabel(2, "TN(purity)"); @@ -441,24 +880,16 @@ void HGVHistoProducerAlgo::bookClusterHistos(DQMStore::IBooker& ibook, histograms.h_cellAssociation_perlayer[ilayer]->setBinLabel(4, "FP(fake)"); histograms.h_cellAssociation_perlayer[ilayer]->setBinLabel(5, "TP(eff.)"); } - - //--------------------------------------------------------------------------------------------------------------------------- + //---------------------------------------------------------------------------------------------------------------------------- for (std::vector<int>::iterator it = thicknesses.begin(); it != thicknesses.end(); ++it) { auto istr = std::to_string(*it); - histograms.h_clusternum_perthick[(*it)] = ibook.book1D("totclusternum_thick_" + istr, - "total number of layer clusters for thickness " + istr, - nintTotNClsperthick_, - minTotNClsperthick_, - maxTotNClsperthick_); - //--- histograms.h_cellsenedens_perthick[(*it)] = ibook.book1D("cellsenedens_thick_" + istr, "energy density of cluster cells for thickness " + istr, nintCellsEneDensperthick_, minCellsEneDensperthick_, maxCellsEneDensperthick_); } - - //--------------------------------------------------------------------------------------------------------------------------- + //---------------------------------------------------------------------------------------------------------------------------- //Not all combination exists but we should keep them all for cross checking reason. for (std::vector<int>::iterator it = thicknesses.begin(); it != thicknesses.end(); ++it) { for (unsigned ilayer = 0; ilayer < 2 * layers; ++ilayer) { @@ -529,10 +960,12 @@ void HGVHistoProducerAlgo::bookClusterHistos(DQMStore::IBooker& ibook, maxClEneperthickperlayer_); } } - //--------------------------------------------------------------------------------------------------------------------------- } +//---------------------------------------------------------------------------------------------------------------------------- -void HGVHistoProducerAlgo::bookMultiClusterHistos(DQMStore::IBooker& ibook, Histograms& histograms, unsigned layers) { +void HGVHistoProducerAlgo::bookMultiClusterHistos(DQMStore::IBooker& ibook, + Histograms& histograms, + unsigned int layers) { histograms.h_score_multicl2caloparticle.push_back(ibook.book1D( "Score_multicl2caloparticle", "Score of Multi Cluster per CaloParticle", nintScore_, minScore_, maxScore_)); histograms.h_score_caloparticle2multicl.push_back(ibook.book1D( @@ -764,7 +1197,7 @@ void HGVHistoProducerAlgo::bookMultiClusterHistos(DQMStore::IBooker& ibook, Hist "multicluster_layersnum", "Number of layers of the multicluster", 2 * layers, 0., (float)2 * layers)); } -void HGVHistoProducerAlgo::fill_info_histos(const Histograms& histograms, unsigned layers) const { +void HGVHistoProducerAlgo::fill_info_histos(const Histograms& histograms, unsigned int layers) const { //We will save some info straight from geometry to avoid mistakes from updates //----------- TODO ---------------------------------------------------------- //For now values returned for 'lastLayerFHzp': '104', 'lastLayerFHzm': '52' are not the one expected. @@ -780,7 +1213,9 @@ void HGVHistoProducerAlgo::fill_info_histos(const Histograms& histograms, unsign void HGVHistoProducerAlgo::fill_caloparticle_histos(const Histograms& histograms, int pdgid, const CaloParticle& caloparticle, - std::vector<SimVertex> const& simVertices) const { + std::vector<SimVertex> const& simVertices, + unsigned int layers, + std::unordered_map<DetId, const HGCRecHit*> const& hitMap) const { const auto eta = getEta(caloparticle.eta()); if (histograms.h_caloparticle_eta.count(pdgid)) { histograms.h_caloparticle_eta.at(pdgid)->Fill(eta); @@ -799,6 +1234,251 @@ void HGVHistoProducerAlgo::fill_caloparticle_histos(const Histograms& histograms if (histograms.h_caloparticle_phi.count(pdgid)) { histograms.h_caloparticle_phi.at(pdgid)->Fill(caloparticle.phi()); } + + if (histograms.h_caloparticle_nSimClusters.count(pdgid)) { + histograms.h_caloparticle_nSimClusters.at(pdgid)->Fill(caloparticle.simClusters().size()); + + int simHits = 0; + int minLayerId = 999; + int maxLayerId = 0; + + int simHits_matched = 0; + int minLayerId_matched = 999; + int maxLayerId_matched = 0; + + float energy = 0.; + std::map<int, double> totenergy_layer; + + for (auto const& sc : caloparticle.simClusters()) { + simHits += sc->hits_and_fractions().size(); + + for (auto const& h_and_f : sc->hits_and_fractions()) { + const auto hitDetId = h_and_f.first; + int layerId = + recHitTools_->getLayerWithOffset(hitDetId) + layers * ((recHitTools_->zside(hitDetId) + 1) >> 1) - 1; + + // set to 0 if matched RecHit not found + int layerId_matched_min = 999; + int layerId_matched_max = 0; + std::unordered_map<DetId, const HGCRecHit*>::const_iterator itcheck = hitMap.find(hitDetId); + if (itcheck != hitMap.end()) { + layerId_matched_min = layerId; + layerId_matched_max = layerId; + simHits_matched++; + + const HGCRecHit* hit = itcheck->second; + energy += hit->energy() * h_and_f.second; + histograms.h_caloparticle_nHits_matched_energy.at(pdgid)->Fill(hit->energy() * h_and_f.second); + histograms.h_caloparticle_nHits_matched_energy_layer.at(pdgid)->Fill(layerId, hit->energy() * h_and_f.second); + + if (totenergy_layer.find(layerId) != totenergy_layer.end()) { + totenergy_layer[layerId] = totenergy_layer.at(layerId) + hit->energy(); + } else { + totenergy_layer.emplace(layerId, hit->energy()); + } + if (caloparticle.simClusters().size() == 1) + histograms.h_caloparticle_nHits_matched_energy_layer_1SimCl.at(pdgid)->Fill(layerId, + hit->energy() * h_and_f.second); + } + + minLayerId = std::min(minLayerId, layerId); + maxLayerId = std::max(maxLayerId, layerId); + minLayerId_matched = std::min(minLayerId_matched, layerId_matched_min); + maxLayerId_matched = std::max(maxLayerId_matched, layerId_matched_max); + } + } + histograms.h_caloparticle_firstlayer.at(pdgid)->Fill(minLayerId); + histograms.h_caloparticle_lastlayer.at(pdgid)->Fill(maxLayerId); + histograms.h_caloparticle_layersnum.at(pdgid)->Fill(int(maxLayerId - minLayerId)); + + histograms.h_caloparticle_firstlayer_matchedtoRecHit.at(pdgid)->Fill(minLayerId_matched); + histograms.h_caloparticle_lastlayer_matchedtoRecHit.at(pdgid)->Fill(maxLayerId_matched); + histograms.h_caloparticle_layersnum_matchedtoRecHit.at(pdgid)->Fill(int(maxLayerId_matched - minLayerId_matched)); + + histograms.h_caloparticle_nHitsInSimClusters.at(pdgid)->Fill((float)simHits); + histograms.h_caloparticle_nHitsInSimClusters_matchedtoRecHit.at(pdgid)->Fill((float)simHits_matched); + histograms.h_caloparticle_selfenergy.at(pdgid)->Fill((float)energy); + histograms.h_caloparticle_energyDifference.at(pdgid)->Fill((float)1. - energy / caloparticle.energy()); + + //Calculate sum energy per-layer + auto i = totenergy_layer.begin(); + double sum_energy = 0.0; + while (i != totenergy_layer.end()) { + sum_energy += i->second; + histograms.h_caloparticle_sum_energy_layer.at(pdgid)->Fill(i->first, sum_energy / caloparticle.energy() * 100.); + i++; + } + } +} + +void HGVHistoProducerAlgo::HGVHistoProducerAlgo::fill_simcluster_histos(const Histograms& histograms, + std::vector<SimCluster> const& simclusters, + unsigned int layers, + std::vector<int> thicknesses) const { + //Each event to be treated as two events: an event in +ve endcap, + //plus another event in -ve endcap. In this spirit there will be + //a layer variable (layerid) that maps the layers in : + //-z: 0->49 + //+z: 50->99 + + //To keep track of total num of simclusters per layer + //tnscpl[layerid] + std::vector<int> tnscpl(1000, 0); //tnscpl.clear(); tnscpl.reserve(1000); + + //To keep track of the total num of clusters per thickness in plus and in minus endcaps + std::map<std::string, int> tnscpthplus; + tnscpthplus.clear(); + std::map<std::string, int> tnscpthminus; + tnscpthminus.clear(); + //At the beginning of the event all layers should be initialized to zero total clusters per thickness + for (std::vector<int>::iterator it = thicknesses.begin(); it != thicknesses.end(); ++it) { + tnscpthplus.insert(std::pair<std::string, int>(std::to_string(*it), 0)); + tnscpthminus.insert(std::pair<std::string, int>(std::to_string(*it), 0)); + } + //To keep track of the total num of simclusters with mixed thickness hits per event + tnscpthplus.insert(std::pair<std::string, int>("mixed", 0)); + tnscpthminus.insert(std::pair<std::string, int>("mixed", 0)); + + //loop through simclusters + for (unsigned int ic = 0; ic < simclusters.size(); ++ic) { + const auto& sc = simclusters[ic]; + const auto& hitsAndFractions = sc.hits_and_fractions(); + + //Auxillary variables to count the number of different kind of hits in each simcluster + int nthhits120p = 0; + int nthhits200p = 0; + int nthhits300p = 0; + int nthhitsscintp = 0; + int nthhits120m = 0; + int nthhits200m = 0; + int nthhits300m = 0; + int nthhitsscintm = 0; + //For the hits thickness of the layer cluster. + double thickness = 0.; + //To keep track if we added the simcluster in a specific layer + std::vector<int> occurenceSCinlayer(1000, 0); //[layerid][0 if not added] + + //loop through hits of the simcluster + for (const auto& hAndF : hitsAndFractions) { + const DetId sh_detid = hAndF.first; + + //The layer the cluster belongs to. As mentioned in the mapping above, it takes into account -z and +z. + int layerid = + recHitTools_->getLayerWithOffset(sh_detid) + layers * ((recHitTools_->zside(sh_detid) + 1) >> 1) - 1; + //zside that the current cluster belongs to. + int zside = recHitTools_->zside(sh_detid); + + //add the simcluster to the relevant layer. A simcluster may give contribution to several layers. + if (occurenceSCinlayer[layerid] == 0) { + tnscpl[layerid]++; + } + occurenceSCinlayer[layerid]++; + + if (sh_detid.det() == DetId::Forward || sh_detid.det() == DetId::HGCalEE || sh_detid.det() == DetId::HGCalHSi) { + thickness = recHitTools_->getSiThickness(sh_detid); + } else if (sh_detid.det() == DetId::HGCalHSc) { + thickness = -1; + } else { + LogDebug("HGCalValidator") << "These are HGCal simclusters, you shouldn't be here !!! " << layerid << "\n"; + continue; + } + + if ((thickness == 120.) && (zside > 0.)) { + nthhits120p++; + } else if ((thickness == 120.) && (zside < 0.)) { + nthhits120m++; + } else if ((thickness == 200.) && (zside > 0.)) { + nthhits200p++; + } else if ((thickness == 200.) && (zside < 0.)) { + nthhits200m++; + } else if ((thickness == 300.) && (zside > 0.)) { + nthhits300p++; + } else if ((thickness == 300.) && (zside < 0.)) { + nthhits300m++; + } else if ((thickness == -1) && (zside > 0.)) { + nthhitsscintp++; + } else if ((thickness == -1) && (zside < 0.)) { + nthhitsscintm++; + } else { //assert(0); + LogDebug("HGCalValidator") + << " You are running a geometry that contains thicknesses different than the normal ones. " + << "\n"; + } + + } //end of loop through hits + + //Check for simultaneously having hits of different kind. Checking at least two combinations is sufficient. + if ((nthhits120p != 0 && nthhits200p != 0) || (nthhits120p != 0 && nthhits300p != 0) || + (nthhits120p != 0 && nthhitsscintp != 0) || (nthhits200p != 0 && nthhits300p != 0) || + (nthhits200p != 0 && nthhitsscintp != 0) || (nthhits300p != 0 && nthhitsscintp != 0)) { + tnscpthplus["mixed"]++; + } else if ((nthhits120p != 0 || nthhits200p != 0 || nthhits300p != 0 || nthhitsscintp != 0)) { + //This is a cluster with hits of one kind + tnscpthplus[std::to_string((int)thickness)]++; + } + if ((nthhits120m != 0 && nthhits200m != 0) || (nthhits120m != 0 && nthhits300m != 0) || + (nthhits120m != 0 && nthhitsscintm != 0) || (nthhits200m != 0 && nthhits300m != 0) || + (nthhits200m != 0 && nthhitsscintm != 0) || (nthhits300m != 0 && nthhitsscintm != 0)) { + tnscpthminus["mixed"]++; + } else if ((nthhits120m != 0 || nthhits200m != 0 || nthhits300m != 0 || nthhitsscintm != 0)) { + //This is a cluster with hits of one kind + tnscpthminus[std::to_string((int)thickness)]++; + } + + } //end of loop through simclusters of the event + + //Per layer : Loop 0->99 + for (unsigned ilayer = 0; ilayer < layers * 2; ++ilayer) { + if (histograms.h_simclusternum_perlayer.count(ilayer)) { + histograms.h_simclusternum_perlayer.at(ilayer)->Fill(tnscpl[ilayer]); + } + } //end of loop through layers + + //Per thickness + for (std::vector<int>::iterator it = thicknesses.begin(); it != thicknesses.end(); ++it) { + if (histograms.h_simclusternum_perthick.count(*it)) { + histograms.h_simclusternum_perthick.at(*it)->Fill(tnscpthplus[std::to_string(*it)]); + histograms.h_simclusternum_perthick.at(*it)->Fill(tnscpthminus[std::to_string(*it)]); + } + } + //Mixed thickness clusters + histograms.h_mixedhitssimcluster_zplus->Fill(tnscpthplus["mixed"]); + histograms.h_mixedhitssimcluster_zminus->Fill(tnscpthminus["mixed"]); +} + +void HGVHistoProducerAlgo::HGVHistoProducerAlgo::fill_simclusterassosiation_histos( + const Histograms& histograms, + int count, + edm::Handle<reco::CaloClusterCollection> clusterHandle, + const reco::CaloClusterCollection& clusters, + edm::Handle<std::vector<SimCluster>> simClusterHandle, + std::vector<SimCluster> const& simclusters, + std::vector<size_t> const& sCIndices, + const std::vector<float>& mask, + std::unordered_map<DetId, const HGCRecHit*> const& hitMap, + unsigned int layers, + const hgcal::RecoToSimCollectionWithSimClusters& scsInLayerClusterMap, + const hgcal::SimToRecoCollectionWithSimClusters& lcsInSimClusterMap) const { + //Each event to be treated as two events: an event in +ve endcap, + //plus another event in -ve endcap. In this spirit there will be + //a layer variable (layerid) that maps the layers in : + //-z: 0->49 + //+z: 50->99 + + //Will add some general plots on the specific mask in the future. + + layerClusters_to_SimClusters(histograms, + count, + clusterHandle, + clusters, + simClusterHandle, + simclusters, + sCIndices, + mask, + hitMap, + layers, + scsInLayerClusterMap, + lcsInSimClusterMap); } void HGVHistoProducerAlgo::fill_cluster_histos(const Histograms& histograms, @@ -808,17 +1488,17 @@ void HGVHistoProducerAlgo::fill_cluster_histos(const Histograms& histograms, histograms.h_cluster_eta[count]->Fill(eta); } -void HGVHistoProducerAlgo::layerClusters_to_CaloParticles( - const Histograms& histograms, - edm::Handle<reco::CaloClusterCollection> clusterHandle, - const reco::CaloClusterCollection& clusters, - edm::Handle<std::vector<CaloParticle>> caloParticleHandle, - std::vector<CaloParticle> const& cP, - std::vector<size_t> const& cPIndices, - std::vector<size_t> const& cPSelectedIndices, - std::unordered_map<DetId, const HGCRecHit*> const& hitMap, - unsigned layers, - const edm::Handle<hgcal::LayerClusterToCaloParticleAssociator>& LCAssocByEnergyScoreHandle) const { +void HGVHistoProducerAlgo::layerClusters_to_CaloParticles(const Histograms& histograms, + edm::Handle<reco::CaloClusterCollection> clusterHandle, + const reco::CaloClusterCollection& clusters, + edm::Handle<std::vector<CaloParticle>> caloParticleHandle, + std::vector<CaloParticle> const& cP, + std::vector<size_t> const& cPIndices, + std::vector<size_t> const& cPSelectedIndices, + std::unordered_map<DetId, const HGCRecHit*> const& hitMap, + unsigned int layers, + const hgcal::RecoToSimCollection& cpsInLayerClusterMap, + const hgcal::SimToRecoCollection& cPOnLayerMap) const { auto nLayerClusters = clusters.size(); std::unordered_map<DetId, std::vector<HGVHistoProducerAlgo::detIdInfoInCluster>> detIdToCaloParticleId_Map; @@ -922,10 +1602,6 @@ void HGVHistoProducerAlgo::layerClusters_to_CaloParticles( } // End of loop over LayerClusters - hgcal::RecoToSimCollection cpsInLayerClusterMap = - LCAssocByEnergyScoreHandle->associateRecoToSim(clusterHandle, caloParticleHandle); - hgcal::SimToRecoCollection cPOnLayerMap = - LCAssocByEnergyScoreHandle->associateSimToReco(clusterHandle, caloParticleHandle); // Here we do fill the plots to compute the different metrics linked to // reco-level, namely fake-rate an merge-rate. In this loop we should *not* // restrict only to the selected caloParaticles. @@ -1079,21 +1755,204 @@ void HGVHistoProducerAlgo::layerClusters_to_CaloParticles( } } -void HGVHistoProducerAlgo::fill_generic_cluster_histos( +void HGVHistoProducerAlgo::layerClusters_to_SimClusters( const Histograms& histograms, int count, edm::Handle<reco::CaloClusterCollection> clusterHandle, const reco::CaloClusterCollection& clusters, - const Density& densities, - edm::Handle<std::vector<CaloParticle>> caloParticleHandle, - std::vector<CaloParticle> const& cP, - std::vector<size_t> const& cPIndices, - std::vector<size_t> const& cPSelectedIndices, + edm::Handle<std::vector<SimCluster>> simClusterHandle, + std::vector<SimCluster> const& sC, + std::vector<size_t> const& sCIndices, + const std::vector<float>& mask, std::unordered_map<DetId, const HGCRecHit*> const& hitMap, - std::map<double, double> cummatbudg, - unsigned layers, - std::vector<int> thicknesses, - edm::Handle<hgcal::LayerClusterToCaloParticleAssociator>& LCAssocByEnergyScoreHandle) const { + unsigned int layers, + const hgcal::RecoToSimCollectionWithSimClusters& scsInLayerClusterMap, + const hgcal::SimToRecoCollectionWithSimClusters& lcsInSimClusterMap) const { + auto nLayerClusters = clusters.size(); + + // Here we do fill the plots to compute the different metrics linked to + // reco-level, namely fake-rate and merge-rate. In this loop we should *not* + // restrict only to the selected simClusters. + for (unsigned int lcId = 0; lcId < nLayerClusters; ++lcId) { + if (mask[lcId] != 0.) { + LogDebug("HGCalValidator") << "Skipping layer cluster " << lcId << " not belonging to mask" << std::endl; + continue; + } + const std::vector<std::pair<DetId, float>>& hits_and_fractions = clusters[lcId].hitsAndFractions(); + const auto firstHitDetId = hits_and_fractions[0].first; + const int lcLayerId = + recHitTools_->getLayerWithOffset(firstHitDetId) + layers * ((recHitTools_->zside(firstHitDetId) + 1) >> 1) - 1; + //Although the ones below are already created in the LC to CP association, we will + //recreate them here since in the post processor it looks in a specific directory. + histograms.h_denom_layercl_in_simcl_eta_perlayer[count].at(lcLayerId)->Fill(clusters[lcId].eta()); + histograms.h_denom_layercl_in_simcl_phi_perlayer[count].at(lcLayerId)->Fill(clusters[lcId].phi()); + // + const edm::Ref<reco::CaloClusterCollection> lcRef(clusterHandle, lcId); + const auto& scsIt = scsInLayerClusterMap.find(lcRef); + if (scsIt == scsInLayerClusterMap.end()) + continue; + + const auto& scs = scsIt->val; + // If a reconstructed LayerCluster has energy 0 but is linked to at least a + // SimCluster, then his score should be 1 as set in the associator + if (clusters[lcId].energy() == 0. && !scs.empty()) { + for (const auto& scPair : scs) { + histograms.h_score_layercl2simcluster_perlayer[count].at(lcLayerId)->Fill(scPair.second); + } + continue; + } + //Loop through all simClusters linked to the layer cluster under study + for (const auto& scPair : scs) { + LogDebug("HGCalValidator") << "layerCluster Id: \t" << lcId << "\t SC id: \t" << scPair.first.index() + << "\t score \t" << scPair.second << std::endl; + //This should be filled #layerclusters in layer x #linked SimClusters + histograms.h_score_layercl2simcluster_perlayer[count].at(lcLayerId)->Fill(scPair.second); + auto const& sc_linked = + std::find_if(std::begin(lcsInSimClusterMap[scPair.first]), + std::end(lcsInSimClusterMap[scPair.first]), + [&lcRef](const std::pair<edm::Ref<reco::CaloClusterCollection>, std::pair<float, float>>& p) { + return p.first == lcRef; + }); + if (sc_linked == + lcsInSimClusterMap[scPair.first].end()) // This should never happen by construction of the association maps + continue; + histograms.h_sharedenergy_layercl2simcluster_perlayer[count].at(lcLayerId)->Fill( + sc_linked->second.first / clusters[lcId].energy(), clusters[lcId].energy()); + histograms.h_energy_vs_score_layercl2simcluster_perlayer[count].at(lcLayerId)->Fill( + scPair.second, sc_linked->second.first / clusters[lcId].energy()); + } + //Here he counts how many of the linked simclusters of the layer cluster under study have a score above a certain value. + const auto assoc = + std::count_if(std::begin(scs), std::end(scs), [](const auto& obj) { return obj.second < ScoreCutLCtoSC_; }); + if (assoc) { + histograms.h_num_layercl_in_simcl_eta_perlayer[count].at(lcLayerId)->Fill(clusters[lcId].eta()); + histograms.h_num_layercl_in_simcl_phi_perlayer[count].at(lcLayerId)->Fill(clusters[lcId].phi()); + if (assoc > 1) { + histograms.h_numMerge_layercl_in_simcl_eta_perlayer[count].at(lcLayerId)->Fill(clusters[lcId].eta()); + histograms.h_numMerge_layercl_in_simcl_phi_perlayer[count].at(lcLayerId)->Fill(clusters[lcId].phi()); + } + const auto& best = std::min_element( + std::begin(scs), std::end(scs), [](const auto& obj1, const auto& obj2) { return obj1.second < obj2.second; }); + //From all simclusters he founds the one with the best (lowest) score and takes his scId + const auto& best_sc_linked = + std::find_if(std::begin(lcsInSimClusterMap[best->first]), + std::end(lcsInSimClusterMap[best->first]), + [&lcRef](const std::pair<edm::Ref<reco::CaloClusterCollection>, std::pair<float, float>>& p) { + return p.first == lcRef; + }); + if (best_sc_linked == + lcsInSimClusterMap[best->first].end()) // This should never happen by construction of the association maps + continue; + histograms.h_sharedenergy_layercl2simcluster_vs_eta_perlayer[count].at(lcLayerId)->Fill( + clusters[lcId].eta(), best_sc_linked->second.first / clusters[lcId].energy()); + histograms.h_sharedenergy_layercl2simcluster_vs_phi_perlayer[count].at(lcLayerId)->Fill( + clusters[lcId].phi(), best_sc_linked->second.first / clusters[lcId].energy()); + } + } // End of loop over LayerClusters + + // Here we do fill the plots to compute the different metrics linked to + // gen-level, namely efficiency and duplicate. In this loop we should restrict + // only to the selected simClusters. + for (const auto& scId : sCIndices) { + const edm::Ref<SimClusterCollection> scRef(simClusterHandle, scId); + const auto& lcsIt = lcsInSimClusterMap.find(scRef); + + std::map<unsigned int, float> sCEnergyOnLayer; + for (unsigned int layerId = 0; layerId < layers * 2; ++layerId) + sCEnergyOnLayer[layerId] = 0; + + const auto& hits_and_fractions = sC[scId].hits_and_fractions(); + for (const auto& it_haf : hits_and_fractions) { + const DetId hitid = (it_haf.first); + const int scLayerId = + recHitTools_->getLayerWithOffset(hitid) + layers * ((recHitTools_->zside(hitid) + 1) >> 1) - 1; + std::unordered_map<DetId, const HGCRecHit*>::const_iterator itcheck = hitMap.find(hitid); + if (itcheck != hitMap.end()) { + const HGCRecHit* hit = itcheck->second; + sCEnergyOnLayer[scLayerId] += it_haf.second * hit->energy(); + } + } + + for (unsigned int layerId = 0; layerId < layers * 2; ++layerId) { + if (!sCEnergyOnLayer[layerId]) + continue; + + histograms.h_denom_simcluster_eta_perlayer[count].at(layerId)->Fill(sC[scId].eta()); + histograms.h_denom_simcluster_phi_perlayer[count].at(layerId)->Fill(sC[scId].phi()); + + if (lcsIt == lcsInSimClusterMap.end()) + continue; + const auto& lcs = lcsIt->val; + + auto getLCLayerId = [&](const unsigned int lcId) { + const std::vector<std::pair<DetId, float>>& hits_and_fractions = clusters[lcId].hitsAndFractions(); + const auto firstHitDetId = hits_and_fractions[0].first; + const unsigned int lcLayerId = recHitTools_->getLayerWithOffset(firstHitDetId) + + layers * ((recHitTools_->zside(firstHitDetId) + 1) >> 1) - 1; + return lcLayerId; + }; + + //Loop through layer clusters linked to the simcluster under study + for (const auto& lcPair : lcs) { + auto lcId = lcPair.first.index(); + if (mask[lcId] != 0.) { + LogDebug("HGCalValidator") << "Skipping layer cluster " << lcId << " not belonging to mask" << std::endl; + continue; + } + + if (getLCLayerId(lcId) != layerId) + continue; + histograms.h_score_simcluster2layercl_perlayer[count].at(layerId)->Fill(lcPair.second.second); + histograms.h_sharedenergy_simcluster2layercl_perlayer[count].at(layerId)->Fill( + lcPair.second.first / sCEnergyOnLayer[layerId], sCEnergyOnLayer[layerId]); + histograms.h_energy_vs_score_simcluster2layercl_perlayer[count].at(layerId)->Fill( + lcPair.second.second, lcPair.second.first / sCEnergyOnLayer[layerId]); + } + const auto assoc = std::count_if(std::begin(lcs), std::end(lcs), [&](const auto& obj) { + if (getLCLayerId(obj.first.index()) != layerId) + return false; + else + return obj.second.second < ScoreCutSCtoLC_; + }); + if (assoc) { + histograms.h_num_simcluster_eta_perlayer[count].at(layerId)->Fill(sC[scId].eta()); + histograms.h_num_simcluster_phi_perlayer[count].at(layerId)->Fill(sC[scId].phi()); + if (assoc > 1) { + histograms.h_numDup_simcluster_eta_perlayer[count].at(layerId)->Fill(sC[scId].eta()); + histograms.h_numDup_simcluster_phi_perlayer[count].at(layerId)->Fill(sC[scId].phi()); + } + const auto best = std::min_element(std::begin(lcs), std::end(lcs), [&](const auto& obj1, const auto& obj2) { + if (getLCLayerId(obj1.first.index()) != layerId) + return false; + else if (getLCLayerId(obj2.first.index()) == layerId) + return obj1.second.second < obj2.second.second; + else + return true; + }); + histograms.h_sharedenergy_simcluster2layercl_vs_eta_perlayer[count].at(layerId)->Fill( + sC[scId].eta(), best->second.first / sCEnergyOnLayer[layerId]); + histograms.h_sharedenergy_simcluster2layercl_vs_phi_perlayer[count].at(layerId)->Fill( + sC[scId].phi(), best->second.first / sCEnergyOnLayer[layerId]); + } + } + } +} + +void HGVHistoProducerAlgo::fill_generic_cluster_histos(const Histograms& histograms, + int count, + edm::Handle<reco::CaloClusterCollection> clusterHandle, + const reco::CaloClusterCollection& clusters, + const Density& densities, + edm::Handle<std::vector<CaloParticle>> caloParticleHandle, + std::vector<CaloParticle> const& cP, + std::vector<size_t> const& cPIndices, + std::vector<size_t> const& cPSelectedIndices, + std::unordered_map<DetId, const HGCRecHit*> const& hitMap, + std::map<double, double> cummatbudg, + unsigned int layers, + std::vector<int> thicknesses, + const hgcal::RecoToSimCollection& cpsInLayerClusterMap, + const hgcal::SimToRecoCollection& cPOnLayerMap) const { //Each event to be treated as two events: an event in +ve endcap, //plus another event in -ve endcap. In this spirit there will be //a layer variable (layerid) that maps the layers in : @@ -1127,7 +1986,8 @@ void HGVHistoProducerAlgo::fill_generic_cluster_histos( cPSelectedIndices, hitMap, layers, - LCAssocByEnergyScoreHandle); + cpsInLayerClusterMap, + cPOnLayerMap); //To find out the total amount of energy clustered per layer //Initialize with zeros because I see clear gives weird numbers. @@ -1412,7 +2272,7 @@ void HGVHistoProducerAlgo::multiClusters_to_CaloParticles(const Histograms& hist std::vector<size_t> const& cPIndices, std::vector<size_t> const& cPSelectedIndices, std::unordered_map<DetId, const HGCRecHit*> const& hitMap, - unsigned layers) const { + unsigned int layers) const { auto nMultiClusters = multiClusters.size(); //Consider CaloParticles coming from the hard scatterer, excluding the PU contribution. auto nCaloParticles = cPIndices.size(); @@ -2018,7 +2878,7 @@ void HGVHistoProducerAlgo::fill_multi_cluster_histos(const Histograms& histogram std::vector<size_t> const& cPIndices, std::vector<size_t> const& cPSelectedIndices, std::unordered_map<DetId, const HGCRecHit*> const& hitMap, - unsigned layers) const { + unsigned int layers) const { //Each event to be treated as two events: //an event in +ve endcap, plus another event in -ve endcap. diff --git a/Validation/HGCalValidation/test/python/protoHGCalSimWatcher_cfg.py b/Validation/HGCalValidation/test/python/protoHGCalSimWatcher_cfg.py index 3e99e2e1fe9aa..afff0638dcca9 100644 --- a/Validation/HGCalValidation/test/python/protoHGCalSimWatcher_cfg.py +++ b/Validation/HGCalValidation/test/python/protoHGCalSimWatcher_cfg.py @@ -77,8 +77,8 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('ValidHGCal') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.ValidHGCal=dict() + process.MessageLogger.HGCalGeom=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/Validation/HGCalValidation/test/python/protoSimValid_cfg.py b/Validation/HGCalValidation/test/python/protoSimValid_cfg.py index 5a0b0ce5fc9da..d38f81c7bd083 100644 --- a/Validation/HGCalValidation/test/python/protoSimValid_cfg.py +++ b/Validation/HGCalValidation/test/python/protoSimValid_cfg.py @@ -99,7 +99,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/Validation/HGCalValidation/test/python/protoValid_cfg.py b/Validation/HGCalValidation/test/python/protoValid_cfg.py index 5945a34d5f62d..9efe6d5e0f00a 100644 --- a/Validation/HGCalValidation/test/python/protoValid_cfg.py +++ b/Validation/HGCalValidation/test/python/protoValid_cfg.py @@ -123,7 +123,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalGeom=dict() if (options.type == "hgcalSimHitStudy"): process.load('Validation.HGCalValidation.hgcSimHitStudy_cfi') diff --git a/Validation/HGCalValidation/test/python/runHFNoseDigiStudy_cfg.py b/Validation/HGCalValidation/test/python/runHFNoseDigiStudy_cfg.py index 5150c9fd5cad5..ff0e5bbf90c01 100644 --- a/Validation/HGCalValidation/test/python/runHFNoseDigiStudy_cfg.py +++ b/Validation/HGCalValidation/test/python/runHFNoseDigiStudy_cfg.py @@ -15,8 +15,8 @@ process.GlobalTag.globaltag = autoCond['phase2_realistic'] if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalValidation') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalValidation=dict() + process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring( diff --git a/Validation/HGCalValidation/test/python/runHFNoseRecHitStudy_cfg.py b/Validation/HGCalValidation/test/python/runHFNoseRecHitStudy_cfg.py index 996c06ba80fc3..10da0933fb27f 100644 --- a/Validation/HGCalValidation/test/python/runHFNoseRecHitStudy_cfg.py +++ b/Validation/HGCalValidation/test/python/runHFNoseRecHitStudy_cfg.py @@ -18,7 +18,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 2 if 'MessageLogger' in process.__dict__: - process.MessageLogger.categories.append('HGCalValidation') + process.MessageLogger.HGCalValidation=dict() process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring( diff --git a/Validation/HGCalValidation/test/python/runHFNoseSimHitStudy_cfg.py b/Validation/HGCalValidation/test/python/runHFNoseSimHitStudy_cfg.py index 2b3a3bc0c765f..e26a55ab77aec 100644 --- a/Validation/HGCalValidation/test/python/runHFNoseSimHitStudy_cfg.py +++ b/Validation/HGCalValidation/test/python/runHFNoseSimHitStudy_cfg.py @@ -15,7 +15,7 @@ process.GlobalTag.globaltag = autoCond['phase2_realistic'] if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalValidation') + process.MessageLogger.HGCalValidation=dict() process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring( diff --git a/Validation/HGCalValidation/test/python/runHGCGeomCheck_cfg.py b/Validation/HGCalValidation/test/python/runHGCGeomCheck_cfg.py index b4e879d28c357..e8f8424cedb41 100644 --- a/Validation/HGCalValidation/test/python/runHGCGeomCheck_cfg.py +++ b/Validation/HGCalValidation/test/python/runHGCGeomCheck_cfg.py @@ -31,8 +31,8 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalValid') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalValid=dict() + process.MessageLogger.HGCalGeom=dict() process.MessageLogger.cerr.FwkReport.reportEvery = 100 process.source = cms.Source("PoolSource", diff --git a/Validation/HGCalValidation/test/python/runHGCHitAnalyzer_cfg.py b/Validation/HGCalValidation/test/python/runHGCHitAnalyzer_cfg.py index d659c1fa6b08f..3bc0c83cb87a0 100644 --- a/Validation/HGCalValidation/test/python/runHGCHitAnalyzer_cfg.py +++ b/Validation/HGCalValidation/test/python/runHGCHitAnalyzer_cfg.py @@ -32,8 +32,8 @@ process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic', '') #process.MessageLogger.cerr.FwkReport.reportEvery = 100 -#if 'MessageLogger' in process.__dict__: -# process.MessageLogger.categories.append('HGCalValid') +# +# process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring( diff --git a/Validation/HGCalValidation/test/python/runHGCalDigiStudy_cfg.py b/Validation/HGCalValidation/test/python/runHGCalDigiStudy_cfg.py index 0668df1c56b71..127e8ef87ee07 100644 --- a/Validation/HGCalValidation/test/python/runHGCalDigiStudy_cfg.py +++ b/Validation/HGCalValidation/test/python/runHGCalDigiStudy_cfg.py @@ -14,8 +14,8 @@ from Configuration.AlCa.autoCond import autoCond process.GlobalTag.globaltag = autoCond['phase2_realistic'] -#if hasattr(process,'MessageLogger'): -# process.MessageLogger.categories.append('HGCalValidation') +# +# process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring( diff --git a/Validation/HGCalValidation/test/python/runHGCalRecHitStudy_cfg.py b/Validation/HGCalValidation/test/python/runHGCalRecHitStudy_cfg.py index 8e46b0c640f04..e532b1b7090d7 100644 --- a/Validation/HGCalValidation/test/python/runHGCalRecHitStudy_cfg.py +++ b/Validation/HGCalValidation/test/python/runHGCalRecHitStudy_cfg.py @@ -17,8 +17,8 @@ process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic', '') process.MessageLogger.cerr.FwkReport.reportEvery = 2 -#if 'MessageLogger' in process.__dict__: -# process.MessageLogger.categories.append('HGCalValidation') +# +# process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring('file:step3.root') diff --git a/Validation/HGCalValidation/test/python/runHGCalWaferHitCheck_cfg.py b/Validation/HGCalValidation/test/python/runHGCalWaferHitCheck_cfg.py index e4e1f599f92bf..49aa38f0f0eab 100644 --- a/Validation/HGCalValidation/test/python/runHGCalWaferHitCheck_cfg.py +++ b/Validation/HGCalValidation/test/python/runHGCalWaferHitCheck_cfg.py @@ -15,8 +15,8 @@ process.GlobalTag.globaltag = autoCond['phase2_realistic'] if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalValidation') -# process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.HGCalValidation=dict() +# process.MessageLogger.HGCalGeom=dict() process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring('file:step1.root') diff --git a/Validation/HGCalValidation/test/python/runHGCalWaferStudy_cfg.py b/Validation/HGCalValidation/test/python/runHGCalWaferStudy_cfg.py index f0f7681fd9c3a..e4d33f97ef7a9 100644 --- a/Validation/HGCalValidation/test/python/runHGCalWaferStudy_cfg.py +++ b/Validation/HGCalValidation/test/python/runHGCalWaferStudy_cfg.py @@ -30,7 +30,7 @@ process.GlobalTag.globaltag = autoCond['phase2_realistic'] if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalValidation') + process.MessageLogger.HGCalValidation=dict() process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring( diff --git a/Validation/HGCalValidation/test/python/testHFNoseSimHitStudy_cfg.py b/Validation/HGCalValidation/test/python/testHFNoseSimHitStudy_cfg.py index 06996384d367e..efa966b1c4868 100644 --- a/Validation/HGCalValidation/test/python/testHFNoseSimHitStudy_cfg.py +++ b/Validation/HGCalValidation/test/python/testHFNoseSimHitStudy_cfg.py @@ -28,9 +28,9 @@ ) if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HGCalGeom') - process.MessageLogger.categories.append('HFNSim') - process.MessageLogger.categories.append('HGCalValidation') + process.MessageLogger.HGCalGeom=dict() + process.MessageLogger.HFNSim=dict() + process.MessageLogger.HGCalValidation=dict() # Input source diff --git a/Validation/HGCalValidation/test/python/testHGCalBHValid_cfg.py b/Validation/HGCalValidation/test/python/testHGCalBHValid_cfg.py index 463cf843cf16a..a31c179c77e81 100644 --- a/Validation/HGCalValidation/test/python/testHGCalBHValid_cfg.py +++ b/Validation/HGCalValidation/test/python/testHGCalBHValid_cfg.py @@ -49,8 +49,8 @@ ) if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('ValidHGCal') - process.MessageLogger.categories.append('HcalSim') + process.MessageLogger.ValidHGCal=dict() + process.MessageLogger.HcalSim=dict() # Additional output definition process.load('Validation.HGCalValidation.hgcalBHValidation_cfi') diff --git a/Validation/HGCalValidation/test/python/testHGCalSimHitStudy_cfg.py b/Validation/HGCalValidation/test/python/testHGCalSimHitStudy_cfg.py index 5ac84502f93bb..94b7a01ee0a38 100644 --- a/Validation/HGCalValidation/test/python/testHGCalSimHitStudy_cfg.py +++ b/Validation/HGCalValidation/test/python/testHGCalSimHitStudy_cfg.py @@ -32,10 +32,10 @@ from Configuration.AlCa.autoCond import autoCond process.GlobalTag.globaltag = autoCond['phase2_realistic'] -#if hasattr(process,'MessageLogger'): -# process.MessageLogger.categories.append('HGCalGeom') -# process.MessageLogger.categories.append('HGCSim') -# process.MessageLogger.categories.append('HGCalValidation') +# +# +# +# process.load("IOMC.RandomEngine.IOMC_cff") process.RandomNumberGeneratorService.generator.initialSeed = 456789 diff --git a/Validation/HGCalValidation/test/python/testHGCalSimWatcherV10_cfg.py b/Validation/HGCalValidation/test/python/testHGCalSimWatcherV10_cfg.py index 44a64c9b8cb9b..94a9d643c7214 100644 --- a/Validation/HGCalValidation/test/python/testHGCalSimWatcherV10_cfg.py +++ b/Validation/HGCalValidation/test/python/testHGCalSimWatcherV10_cfg.py @@ -35,8 +35,8 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('ValidHGCal') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.ValidHGCal=dict() + process.MessageLogger.HGCalGeom=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/Validation/HGCalValidation/test/python/testHGCalSimWatcherV11_cfg.py b/Validation/HGCalValidation/test/python/testHGCalSimWatcherV11_cfg.py index 340fe94a053d4..a28f4f9dd72c6 100644 --- a/Validation/HGCalValidation/test/python/testHGCalSimWatcherV11_cfg.py +++ b/Validation/HGCalValidation/test/python/testHGCalSimWatcherV11_cfg.py @@ -33,8 +33,8 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('ValidHGCal') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.ValidHGCal=dict() + process.MessageLogger.HGCalGeom=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/Validation/HGCalValidation/test/python/testHGCalSimWatcherV12_cfg.py b/Validation/HGCalValidation/test/python/testHGCalSimWatcherV12_cfg.py index 93586d23b272a..29a2b9abb3b7c 100644 --- a/Validation/HGCalValidation/test/python/testHGCalSimWatcherV12_cfg.py +++ b/Validation/HGCalValidation/test/python/testHGCalSimWatcherV12_cfg.py @@ -33,8 +33,8 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('ValidHGCal') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.ValidHGCal=dict() + process.MessageLogger.HGCalGeom=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/Validation/HGCalValidation/test/python/testHGCalSimWatcherV13_cfg.py b/Validation/HGCalValidation/test/python/testHGCalSimWatcherV13_cfg.py index 5af486c6a07f0..a3371eacb0253 100644 --- a/Validation/HGCalValidation/test/python/testHGCalSimWatcherV13_cfg.py +++ b/Validation/HGCalValidation/test/python/testHGCalSimWatcherV13_cfg.py @@ -35,8 +35,8 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('ValidHGCal') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.ValidHGCal=dict() + process.MessageLogger.HGCalGeom=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/Validation/HGCalValidation/test/python/testHGCalSimWatcherV14_cfg.py b/Validation/HGCalValidation/test/python/testHGCalSimWatcherV14_cfg.py index 99fc245985e7b..b026b80c1c311 100644 --- a/Validation/HGCalValidation/test/python/testHGCalSimWatcherV14_cfg.py +++ b/Validation/HGCalValidation/test/python/testHGCalSimWatcherV14_cfg.py @@ -35,8 +35,8 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('ValidHGCal') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.ValidHGCal=dict() + process.MessageLogger.HGCalGeom=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/Validation/HGCalValidation/test/python/testHGCalSimWatcherV8_cfg.py b/Validation/HGCalValidation/test/python/testHGCalSimWatcherV8_cfg.py index 956964626c22c..2f96181958288 100644 --- a/Validation/HGCalValidation/test/python/testHGCalSimWatcherV8_cfg.py +++ b/Validation/HGCalValidation/test/python/testHGCalSimWatcherV8_cfg.py @@ -32,8 +32,8 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('ValidHGCal') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.ValidHGCal=dict() + process.MessageLogger.HGCalGeom=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/Validation/HGCalValidation/test/python/testHGCalSimWatcherV9_cfg.py b/Validation/HGCalValidation/test/python/testHGCalSimWatcherV9_cfg.py index b5ce21fa98c2f..74a4057fc8df2 100644 --- a/Validation/HGCalValidation/test/python/testHGCalSimWatcherV9_cfg.py +++ b/Validation/HGCalValidation/test/python/testHGCalSimWatcherV9_cfg.py @@ -35,8 +35,8 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 5 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('ValidHGCal') - process.MessageLogger.categories.append('HGCalGeom') + process.MessageLogger.ValidHGCal=dict() + process.MessageLogger.HGCalGeom=dict() # Input source process.source = cms.Source("EmptySource") diff --git a/Validation/HcalDigis/interface/HcalDigisValidation.h b/Validation/HcalDigis/interface/HcalDigisValidation.h index 26fbb02a214b9..5d9ec1cdd92c5 100644 --- a/Validation/HcalDigis/interface/HcalDigisValidation.h +++ b/Validation/HcalDigis/interface/HcalDigisValidation.h @@ -5,7 +5,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "DQMServices/Core/interface/DQMEDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" @@ -141,12 +140,9 @@ class HcalDigisValidation : public DQMEDAnalyzer { edm::ESGetToken<HcalTopology, HcalRecNumberingRecord> tok_Topo_; edm::ESGetToken<HcalDbService, HcalDbRecord> tok_Cond_; - edm::ESHandle<CaloGeometry> geometry; - edm::ESHandle<HcalDbService> conditions; - - //TP Code - edm::ESHandle<HcalTopology> htopo; - //~TP Code + const HcalDbService *conditions_; + const HcalDDDRecConstants *hcons_; + const HcalTopology *htopo_; int nevent1; int nevent2; @@ -154,9 +150,6 @@ class HcalDigisValidation : public DQMEDAnalyzer { int nevent4; int nevtot; - const HcalDDDRecConstants *hcons; - const HcalTopology *htopology; - int maxDepth_[5]; // 0:any, 1:HB, 2:HE, 3:HF int nChannels_[5]; // 0:any, 1:HB, 2:HE, diff --git a/Validation/HcalDigis/interface/ZDCDigiStudy.h b/Validation/HcalDigis/interface/ZDCDigiStudy.h index 706c59ea84266..22253b2a2ed02 100644 --- a/Validation/HcalDigis/interface/ZDCDigiStudy.h +++ b/Validation/HcalDigis/interface/ZDCDigiStudy.h @@ -24,7 +24,6 @@ #include "DQMServices/Core/interface/DQMOneEDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" diff --git a/Validation/HcalDigis/src/HcalDigisValidation.cc b/Validation/HcalDigis/src/HcalDigisValidation.cc index 405eeb85cd3d1..5801a2ccc52d1 100644 --- a/Validation/HcalDigis/src/HcalDigisValidation.cc +++ b/Validation/HcalDigis/src/HcalDigisValidation.cc @@ -72,23 +72,20 @@ HcalDigisValidation::HcalDigisValidation(const edm::ParameterSet& iConfig) { msm_ = new std::map<std::string, MonitorElement*>(); if (!outputFile_.empty()) - edm::LogInfo("OutputInfo") << " Hcal Digi Task histograms will be saved to '" << outputFile_.c_str() << "'"; + edm::LogVerbatim("OutputInfo") << " Hcal Digi Task histograms will be saved to '" << outputFile_.c_str() << "'"; else - edm::LogInfo("OutputInfo") << " Hcal Digi Task histograms will NOT be saved"; + edm::LogVerbatim("OutputInfo") << " Hcal Digi Task histograms will NOT be saved"; } HcalDigisValidation::~HcalDigisValidation() { delete msm_; } void HcalDigisValidation::dqmBeginRun(const edm::Run& run, const edm::EventSetup& es) { - const auto& pHRNDC = es.getData(tok_HRNDC_); - hcons = &pHRNDC; + hcons_ = &es.getData(tok_HRNDC_); - htopology = new HcalTopology(hcons); - - maxDepth_[1] = hcons->getMaxDepth(0); // HB - maxDepth_[2] = hcons->getMaxDepth(1); // HE - maxDepth_[3] = hcons->getMaxDepth(3); // HO - maxDepth_[4] = hcons->getMaxDepth(2); // HF + maxDepth_[1] = hcons_->getMaxDepth(0); // HB + maxDepth_[2] = hcons_->getMaxDepth(1); // HE + maxDepth_[3] = hcons_->getMaxDepth(3); // HO + maxDepth_[4] = hcons_->getMaxDepth(2); // HF maxDepth_[0] = (maxDepth_[1] > maxDepth_[2] ? maxDepth_[1] : maxDepth_[2]); maxDepth_[0] = (maxDepth_[0] > maxDepth_[3] ? maxDepth_[0] : maxDepth_[3]); maxDepth_[0] = (maxDepth_[0] > maxDepth_[4] ? maxDepth_[0] : maxDepth_[4]); // any of HB/HE/HO/HF @@ -414,12 +411,12 @@ void HcalDigisValidation::booking(DQMStore::IBooker& ib, const std::string bsubd } //book void HcalDigisValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - conditions = &iSetup.getData(tok_Cond_); + conditions_ = &iSetup.getData(tok_Cond_); //TP Code const auto& decoder = &iSetup.getData(tok_Decoder_); const auto& tp_geometry = &iSetup.getData(tok_TPGeom_); - htopo = &iSetup.getData(tok_Topo_); + htopo_ = &iSetup.getData(tok_Topo_); //Get all handles edm::Handle<HcalTrigPrimDigiCollection> emulTPs; @@ -659,13 +656,13 @@ void HcalDigisValidation::reco(const edm::Event& iEvent, for (std::vector<PCaloHit>::const_iterator simhits = simhitResult->begin(); simhits != simhitResult->end(); ++simhits) { - unsigned int id_ = simhits->id(); + unsigned int id = simhits->id(); int sub, ieta, iphi; HcalDetId hid; if (testNumber_) - hid = HcalHitRelabeller::relabel(id_, hcons); + hid = HcalHitRelabeller::relabel(id, hcons_); else - hid = HcalDetId(id_); + hid = HcalDetId(id); sub = hid.subdet(); ieta = hid.ieta(); iphi = hid.iphi(); @@ -717,10 +714,10 @@ void HcalDigisValidation::reco(const edm::Event& iEvent, (nevent4 == 1 && isubdet == 4)) && noise_ == 1 && sub == isubdet) { HcalGenericDetId hcalGenDetId(digiItr->id()); - const HcalPedestal* pedestal = conditions->getPedestal(hcalGenDetId); - const HcalGain* gain = conditions->getGain(hcalGenDetId); - const HcalGainWidth* gainWidth = conditions->getGainWidth(hcalGenDetId); - const HcalPedestalWidth* pedWidth = conditions->getPedestalWidth(hcalGenDetId); + const HcalPedestal* pedestal = conditions_->getPedestal(hcalGenDetId); + const HcalGain* gain = conditions_->getGain(hcalGenDetId); + const HcalGainWidth* gainWidth = conditions_->getGainWidth(hcalGenDetId); + const HcalPedestalWidth* pedWidth = conditions_->getPedestalWidth(hcalGenDetId); for (int i = 0; i < 4; i++) { fill1D("HcalDigiTask_gain_capId" + str(i) + "_Depth" + str(depth) + "_" + subdet_, gain->getValue(i)); @@ -744,10 +741,10 @@ void HcalDigisValidation::reco(const edm::Event& iEvent, // No-noise case, only single subdet selected =========================== if (sub == isubdet && noise_ == 0) { - HcalCalibrations calibrations = conditions->getHcalCalibrations(cell); + HcalCalibrations calibrations = conditions_->getHcalCalibrations(cell); - const HcalQIECoder* channelCoder = conditions->getHcalCoder(cell); - const HcalQIEShape* shape = conditions->getHcalShape(channelCoder); + const HcalQIECoder* channelCoder = conditions_->getHcalCoder(cell); + const HcalQIEShape* shape = conditions_->getHcalShape(channelCoder); HcalCoderDb coder(*channelCoder, *shape); coder.adc2fC(*digiItr, tool); @@ -851,13 +848,13 @@ void HcalDigisValidation::reco(const edm::Event& iEvent, const edm::PCaloHitContainer* simhitResult = hcalHits.product(); for (std::vector<PCaloHit>::const_iterator simhits = simhitResult->begin(); simhits != simhitResult->end(); ++simhits) { - unsigned int id_ = simhits->id(); + unsigned int id = simhits->id(); int sub, depth, ieta, iphi; HcalDetId hid; if (testNumber_) - hid = HcalHitRelabeller::relabel(id_, hcons); + hid = HcalHitRelabeller::relabel(id, hcons_); else - hid = HcalDetId(id_); + hid = HcalDetId(id); sub = hid.subdet(); depth = hid.depth(); ieta = hid.ieta(); @@ -975,13 +972,13 @@ void HcalDigisValidation::reco(const edm::Event& iEvent, for (std::vector<PCaloHit>::const_iterator simhits = simhitResult->begin(); simhits != simhitResult->end(); ++simhits) { - unsigned int id_ = simhits->id(); + unsigned int id = simhits->id(); int sub, ieta, iphi; HcalDetId hid; if (testNumber_) - hid = HcalHitRelabeller::relabel(id_, hcons); + hid = HcalHitRelabeller::relabel(id, hcons_); else - hid = HcalDetId(id_); + hid = HcalDetId(id); sub = hid.subdet(); ieta = hid.ieta(); iphi = hid.iphi(); @@ -1040,10 +1037,10 @@ void HcalDigisValidation::reco(const edm::Event& iEvent, (nevent4 == 1 && isubdet == 4)) && noise_ == 1 && sub == isubdet) { HcalGenericDetId hcalGenDetId(digiItr->id()); - const HcalPedestal* pedestal = conditions->getPedestal(hcalGenDetId); - const HcalGain* gain = conditions->getGain(hcalGenDetId); - const HcalGainWidth* gainWidth = conditions->getGainWidth(hcalGenDetId); - const HcalPedestalWidth* pedWidth = conditions->getPedestalWidth(hcalGenDetId); + const HcalPedestal* pedestal = conditions_->getPedestal(hcalGenDetId); + const HcalGain* gain = conditions_->getGain(hcalGenDetId); + const HcalGainWidth* gainWidth = conditions_->getGainWidth(hcalGenDetId); + const HcalPedestalWidth* pedWidth = conditions_->getPedestalWidth(hcalGenDetId); for (int i = 0; i < 4; i++) { fill1D("HcalDigiTask_gain_capId" + str(i) + "_Depth" + str(depth) + "_" + subdet_, gain->getValue(i)); @@ -1060,7 +1057,7 @@ void HcalDigisValidation::reco(const edm::Event& iEvent, pedWidth->getWidth(0)); } // end of event #1 - //std::cout << "==== End of event noise block in cell cycle" << std::endl; + //edm::LogVerbatim("OutputInfo") << "==== End of event noise block in cell cycle"; if (sub == isubdet) Ndig++; // subdet number of digi @@ -1068,10 +1065,10 @@ void HcalDigisValidation::reco(const edm::Event& iEvent, // No-noise case, only single subdet selected =========================== if (sub == isubdet && noise_ == 0) { - HcalCalibrations calibrations = conditions->getHcalCalibrations(cell); + HcalCalibrations calibrations = conditions_->getHcalCalibrations(cell); - const HcalQIECoder* channelCoder = conditions->getHcalCoder(cell); - const HcalQIEShape* shape = conditions->getHcalShape(channelCoder); + const HcalQIECoder* channelCoder = conditions_->getHcalCoder(cell); + const HcalQIEShape* shape = conditions_->getHcalShape(channelCoder); HcalCoderDb coder(*channelCoder, *shape); coder.adc2fC(dataFrame, tool); @@ -1226,13 +1223,13 @@ void HcalDigisValidation::reco(const edm::Event& iEvent, const edm::PCaloHitContainer* simhitResult = hcalHits.product(); for (std::vector<PCaloHit>::const_iterator simhits = simhitResult->begin(); simhits != simhitResult->end(); ++simhits) { - unsigned int id_ = simhits->id(); + unsigned int id = simhits->id(); int sub, depth, ieta, iphi; HcalDetId hid; if (testNumber_) - hid = HcalHitRelabeller::relabel(id_, hcons); + hid = HcalHitRelabeller::relabel(id, hcons_); else - hid = HcalDetId(id_); + hid = HcalDetId(id); sub = hid.subdet(); depth = hid.depth(); ieta = hid.ieta(); diff --git a/Validation/HcalDigis/test/runZdc_digi_cfg.py b/Validation/HcalDigis/test/runZdc_digi_cfg.py index 781a652392fae..bf1dcf9008613 100644 --- a/Validation/HcalDigis/test/runZdc_digi_cfg.py +++ b/Validation/HcalDigis/test/runZdc_digi_cfg.py @@ -129,29 +129,10 @@ def customise(process): #Tweak Message logger to dump G4cout and G4cerr messages in G4msg.log #print process.MessageLogger.__dict__ - process.MessageLogger.destinations=cms.untracked.vstring('cout' - ,'cerr' - ,'G4msg' - ) - process.MessageLogger.categories=cms.untracked.vstring('FwkJob' - ,'FwkReport' - ,'FwkSummary' - ,'Root_NoDictionary' - ,'TimeReport' - ,'TimeModule' - ,'TimeEvent' - ,'MemoryCheck' - ,'PhysicsList' - ,'G4cout' - ,'G4cerr' - ,'CaloSim' - ,'ForwardSim' - ) - process.MessageLogger.debugModules=cms.untracked.vstring('g4SimHits') #Configuring the G4msg.log output - process.MessageLogger.G4msg = cms.untracked.PSet( + process.MessageLogger.files = dict(G4msg = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(True) #First eliminate unneeded output ,threshold = cms.untracked.string('INFO') @@ -176,7 +157,7 @@ def customise(process): ,CaloSim = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ,ForwardSim = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ) - + ) #Add these 3 lines to put back the summary for timing information at the end of the logfile #(needed for TimeReport report) process.options = cms.untracked.PSet( diff --git a/Validation/HcalHits/interface/HcalSimHitStudy.h b/Validation/HcalHits/interface/HcalSimHitStudy.h index 5ac1aa23ea20a..f7f67593d0232 100644 --- a/Validation/HcalHits/interface/HcalSimHitStudy.h +++ b/Validation/HcalHits/interface/HcalSimHitStudy.h @@ -4,7 +4,6 @@ #include "DQMServices/Core/interface/DQMEDAnalyzer.h" #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -41,7 +40,7 @@ class HcalSimHitStudy : public DQMEDAnalyzer { void analyzeHits(std::vector<PCaloHit> &); private: - const HcalDDDRecConstants *hcons; + const HcalDDDRecConstants *hcons_; int maxDepthHB_, maxDepthHE_; int maxDepthHO_, maxDepthHF_; int maxDepth_; diff --git a/Validation/HcalHits/interface/HcalSimHitsValidation.h b/Validation/HcalHits/interface/HcalSimHitsValidation.h index 8815939277282..aaeb6f843c39c 100644 --- a/Validation/HcalHits/interface/HcalSimHitsValidation.h +++ b/Validation/HcalHits/interface/HcalSimHitsValidation.h @@ -2,7 +2,6 @@ #define HcalSimHitsValidation_H #include "DQMServices/Core/interface/DQMOneEDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Frameworkfwd.h" @@ -27,6 +26,7 @@ #include "Geometry/CaloGeometry/interface/CaloGeometry.h" #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" #include "Geometry/HcalCommonData/interface/HcalDDDRecConstants.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "Geometry/Records/interface/HcalRecNumberingRecord.h" #include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" @@ -62,8 +62,10 @@ class HcalSimHitsValidation : public DQMOneEDAnalyzer<> { edm::EDGetTokenT<edm::PCaloHitContainer> tok_ecalEB_; edm::EDGetTokenT<edm::PCaloHitContainer> tok_ecalEE_; edm::ESGetToken<HcalDDDRecConstants, HcalRecNumberingRecord> tok_HRNDC_; + edm::ESGetToken<CaloGeometry, CaloGeometryRecord> tok_geom_; - const HcalDDDRecConstants *hcons; + const HcalDDDRecConstants *hcons_; + const CaloGeometry *geometry_; int maxDepthHB_, maxDepthHE_; int maxDepthHO_, maxDepthHF_; @@ -102,8 +104,6 @@ class HcalSimHitsValidation : public DQMOneEDAnalyzer<> { MonitorElement *meSimHitsEnergyHO; std::vector<MonitorElement *> meSimHitsEnergyHF; - edm::ESHandle<CaloGeometry> geometry; - // counter int nevtot; diff --git a/Validation/HcalHits/interface/SimHitsValidationHcal.h b/Validation/HcalHits/interface/SimHitsValidationHcal.h index f5d8ad879ca62..5f24e9913c3cc 100644 --- a/Validation/HcalHits/interface/SimHitsValidationHcal.h +++ b/Validation/HcalHits/interface/SimHitsValidationHcal.h @@ -4,7 +4,6 @@ #include "DQMServices/Core/interface/DQMEDAnalyzer.h" #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" diff --git a/Validation/HcalHits/src/HcalSimHitStudy.cc b/Validation/HcalHits/src/HcalSimHitStudy.cc index 165952d702f6f..ed016fe10be9e 100644 --- a/Validation/HcalHits/src/HcalSimHitStudy.cc +++ b/Validation/HcalHits/src/HcalSimHitStudy.cc @@ -23,12 +23,11 @@ HcalSimHitStudy::HcalSimHitStudy(const edm::ParameterSet &ps) { HcalSimHitStudy::~HcalSimHitStudy() {} void HcalSimHitStudy::bookHistograms(DQMStore::IBooker &ib, edm::Run const &run, edm::EventSetup const &es) { - const auto &pHRNDC = es.getData(tok_HRNDC_); - hcons = &pHRNDC; - maxDepthHB_ = hcons->getMaxDepth(0); - maxDepthHE_ = hcons->getMaxDepth(1); - maxDepthHF_ = hcons->getMaxDepth(2); - maxDepthHO_ = hcons->getMaxDepth(3); + hcons_ = &es.getData(tok_HRNDC_); + maxDepthHB_ = hcons_->getMaxDepth(0); + maxDepthHE_ = hcons_->getMaxDepth(1); + maxDepthHF_ = hcons_->getMaxDepth(2); + maxDepthHO_ = hcons_->getMaxDepth(3); maxDepth_ = (maxDepthHB_ > maxDepthHE_ ? maxDepthHB_ : maxDepthHE_); maxDepth_ = (maxDepth_ > maxDepthHF_ ? maxDepth_ : maxDepthHF_); maxDepth_ = (maxDepth_ > maxDepthHO_ ? maxDepth_ : maxDepthHO_); @@ -36,21 +35,21 @@ void HcalSimHitStudy::bookHistograms(DQMStore::IBooker &ib, edm::Run const &run, // Get Phi segmentation from geometry, use the max phi number so that all iphi // values are included. - int NphiMax = hcons->getNPhi(0); + int NphiMax = hcons_->getNPhi(0); - NphiMax = (hcons->getNPhi(1) > NphiMax ? hcons->getNPhi(1) : NphiMax); - NphiMax = (hcons->getNPhi(2) > NphiMax ? hcons->getNPhi(2) : NphiMax); - NphiMax = (hcons->getNPhi(3) > NphiMax ? hcons->getNPhi(3) : NphiMax); + NphiMax = (hcons_->getNPhi(1) > NphiMax ? hcons_->getNPhi(1) : NphiMax); + NphiMax = (hcons_->getNPhi(2) > NphiMax ? hcons_->getNPhi(2) : NphiMax); + NphiMax = (hcons_->getNPhi(3) > NphiMax ? hcons_->getNPhi(3) : NphiMax); // Center the iphi bins on the integers iphi_min = 0.5; iphi_max = NphiMax + 0.5; iphi_bins = (int)(iphi_max - iphi_min); - int iEtaHBMax = hcons->getEtaRange(0).second; - int iEtaHEMax = std::max(hcons->getEtaRange(1).second, 1); - int iEtaHFMax = hcons->getEtaRange(2).second; - int iEtaHOMax = hcons->getEtaRange(3).second; + int iEtaHBMax = hcons_->getEtaRange(0).second; + int iEtaHEMax = std::max(hcons_->getEtaRange(1).second, 1); + int iEtaHFMax = hcons_->getEtaRange(2).second; + int iEtaHOMax = hcons_->getEtaRange(3).second; // Retain classic behavior, all plots have same ieta range. // Comment out code to allow each subdetector to have its on range @@ -187,7 +186,7 @@ void HcalSimHitStudy::bookHistograms(DQMStore::IBooker &ib, edm::Run const &run, }*/ void HcalSimHitStudy::analyze(const edm::Event &e, const edm::EventSetup &) { - LogDebug("HcalSim") << "Run = " << e.id().run() << " Event = " << e.id().event(); + edm::LogVerbatim("HcalSim") << "Run = " << e.id().run() << " Event = " << e.id().event(); std::vector<PCaloHit> caloHits; edm::Handle<edm::PCaloHitContainer> hitsHcal; @@ -199,11 +198,11 @@ void HcalSimHitStudy::analyze(const edm::Event &e, const edm::EventSetup &) { getHits = true; } - LogDebug("HcalSim") << "HcalValidation: Input flags Hits " << getHits; + edm::LogVerbatim("HcalSim") << "HcalValidation: Input flags Hits " << getHits; if (getHits) { caloHits.insert(caloHits.end(), hitsHcal->begin(), hitsHcal->end()); - LogDebug("HcalSim") << "HcalValidation: Hit buffer " << caloHits.size(); + edm::LogVerbatim("HcalSim") << "HcalValidation: Hit buffer " << caloHits.size(); analyzeHits(caloHits); } } @@ -257,22 +256,22 @@ void HcalSimHitStudy::analyzeHits(std::vector<PCaloHit> &hits) { double log10en = log10(energy); int log10i = int((log10en + 10.) * 10.); double time = hits[i].time(); - unsigned int id_ = hits[i].id(); + unsigned int id = hits[i].id(); int det, subdet, depth, eta, phi; HcalDetId hid; if (testNumber_) - hid = HcalHitRelabeller::relabel(id_, hcons); + hid = HcalHitRelabeller::relabel(id, hcons_); else - hid = HcalDetId(id_); + hid = HcalDetId(id); det = hid.det(); subdet = hid.subdet(); depth = hid.depth(); eta = hid.ieta(); phi = hid.iphi(); - LogDebug("HcalSim") << "Hit[" << i << "] ID " << std::hex << id_ << std::dec << " Det " << det << " Sub " << subdet - << " depth " << depth << " Eta " << eta << " Phi " << phi << " E " << energy << " time " - << time; + edm::LogVerbatim("HcalSim") << "Hit[" << i << "] ID " << std::hex << id << std::dec << " Det " << det << " Sub " + << subdet << " depth " << depth << " Eta " << eta << " Phi " << phi << " E " << energy + << " time " << time; if (det == 4) { // Check DetId.h if (subdet == static_cast<int>(HcalBarrel)) nHB++; @@ -455,6 +454,6 @@ void HcalSimHitStudy::analyzeHits(std::vector<PCaloHit> &hits) { } } - LogDebug("HcalSim") << "HcalSimHitStudy::analyzeHits: HB " << nHB << " HE " << nHE << " HO " << nHO << " HF " << nHF - << " Bad " << nBad << " All " << nHit; + edm::LogVerbatim("HcalSim") << "HcalSimHitStudy::analyzeHits: HB " << nHB << " HE " << nHE << " HO " << nHO << " HF " + << nHF << " Bad " << nBad << " All " << nHit; } diff --git a/Validation/HcalHits/src/HcalSimHitsClient.cc b/Validation/HcalHits/src/HcalSimHitsClient.cc index fd6ba822d6cc6..cff751a40125b 100644 --- a/Validation/HcalHits/src/HcalSimHitsClient.cc +++ b/Validation/HcalHits/src/HcalSimHitsClient.cc @@ -1,7 +1,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "Validation/HcalHits/interface/HcalSimHitsClient.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/Run.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" diff --git a/Validation/HcalHits/src/HcalSimHitsValidation.cc b/Validation/HcalHits/src/HcalSimHitsValidation.cc index 8773e205d6c91..9d7ee450a27b6 100644 --- a/Validation/HcalHits/src/HcalSimHitsValidation.cc +++ b/Validation/HcalHits/src/HcalSimHitsValidation.cc @@ -1,5 +1,4 @@ #include "Geometry/HcalCommonData/interface/HcalHitRelabeller.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "Validation/HcalHits/interface/HcalSimHitsValidation.h" HcalSimHitsValidation::HcalSimHitsValidation(edm::ParameterSet const &conf) { @@ -23,11 +22,12 @@ HcalSimHitsValidation::HcalSimHitsValidation(edm::ParameterSet const &conf) { tok_ecalEB_ = consumes<edm::PCaloHitContainer>(edm::InputTag(g4Label_, ebHits_)); tok_ecalEE_ = consumes<edm::PCaloHitContainer>(edm::InputTag(g4Label_, eeHits_)); tok_HRNDC_ = esConsumes<HcalDDDRecConstants, HcalRecNumberingRecord, edm::Transition::BeginRun>(); + tok_geom_ = esConsumes<CaloGeometry, CaloGeometryRecord>(); if (!outputFile_.empty()) { - edm::LogInfo("OutputInfo") << " Hcal SimHit Task histograms will be saved to '" << outputFile_.c_str() << "'"; + edm::LogVerbatim("OutputInfo") << " Hcal SimHit Task histograms will be saved to '" << outputFile_.c_str() << "'"; } else { - edm::LogInfo("OutputInfo") << " Hcal SimHit Task histograms will NOT be saved"; + edm::LogVerbatim("OutputInfo") << " Hcal SimHit Task histograms will NOT be saved"; } nevtot = 0; @@ -36,31 +36,30 @@ HcalSimHitsValidation::HcalSimHitsValidation(edm::ParameterSet const &conf) { HcalSimHitsValidation::~HcalSimHitsValidation() {} void HcalSimHitsValidation::bookHistograms(DQMStore::IBooker &ib, edm::Run const &run, edm::EventSetup const &es) { - const auto &pHRNDC = es.getData(tok_HRNDC_); - hcons = &pHRNDC; - maxDepthHB_ = hcons->getMaxDepth(0); - maxDepthHE_ = hcons->getMaxDepth(1); - maxDepthHF_ = hcons->getMaxDepth(2); - maxDepthHO_ = hcons->getMaxDepth(3); + hcons_ = &es.getData(tok_HRNDC_); + maxDepthHB_ = hcons_->getMaxDepth(0); + maxDepthHE_ = hcons_->getMaxDepth(1); + maxDepthHF_ = hcons_->getMaxDepth(2); + maxDepthHO_ = hcons_->getMaxDepth(3); // Get Phi segmentation from geometry, use the max phi number so that all iphi // values are included. - int NphiMax = hcons->getNPhi(0); + int NphiMax = hcons_->getNPhi(0); - NphiMax = (hcons->getNPhi(1) > NphiMax ? hcons->getNPhi(1) : NphiMax); - NphiMax = (hcons->getNPhi(2) > NphiMax ? hcons->getNPhi(2) : NphiMax); - NphiMax = (hcons->getNPhi(3) > NphiMax ? hcons->getNPhi(3) : NphiMax); + NphiMax = (hcons_->getNPhi(1) > NphiMax ? hcons_->getNPhi(1) : NphiMax); + NphiMax = (hcons_->getNPhi(2) > NphiMax ? hcons_->getNPhi(2) : NphiMax); + NphiMax = (hcons_->getNPhi(3) > NphiMax ? hcons_->getNPhi(3) : NphiMax); // Center the iphi bins on the integers // float iphi_min = 0.5; // float iphi_max = NphiMax + 0.5; // int iphi_bins = (int) (iphi_max - iphi_min); - int iEtaHBMax = hcons->getEtaRange(0).second; - int iEtaHEMax = std::max(hcons->getEtaRange(1).second, 1); - int iEtaHFMax = hcons->getEtaRange(2).second; - int iEtaHOMax = hcons->getEtaRange(3).second; + int iEtaHBMax = hcons_->getEtaRange(0).second; + int iEtaHEMax = std::max(hcons_->getEtaRange(1).second, 1); + int iEtaHFMax = hcons_->getEtaRange(2).second; + int iEtaHOMax = hcons_->getEtaRange(3).second; // Retain classic behavior, all plots have same ieta range. // Comment out code to allow each subdetector to have its on range @@ -286,9 +285,6 @@ void HcalSimHitsValidation::endJob() { } void HcalSimHitsValidation::analyze(edm::Event const &ev, edm::EventSetup const &c) { - using namespace edm; - using namespace std; - //=========================================================================== // Getting SimHits //=========================================================================== @@ -299,7 +295,7 @@ void HcalSimHitsValidation::analyze(edm::Event const &ev, edm::EventSetup const edm::Handle<edm::HepMCProduct> evtMC; ev.getByToken(tok_evt_, evtMC); // generator in late 310_preX if (!evtMC.isValid()) { - std::cout << "no HepMCProduct found" << std::endl; + edm::LogVerbatim("OutputInfo") << "no HepMCProduct found"; } // MC particle with highest pt is taken as a direction reference @@ -330,9 +326,9 @@ void HcalSimHitsValidation::analyze(edm::Event const &ev, edm::EventSetup const const float calib_HF1 = hf1_; // 1.0/0.383; const float calib_HF2 = hf2_; // 1.0/0.368; - edm::Handle<PCaloHitContainer> hcalHits; + edm::Handle<edm::PCaloHitContainer> hcalHits; ev.getByToken(tok_hcal_, hcalHits); - const PCaloHitContainer *SimHitResult = hcalHits.product(); + const auto SimHitResult = hcalHits.product(); float eta_diff; float etaMax = 9999; @@ -340,17 +336,17 @@ void HcalSimHitsValidation::analyze(edm::Event const &ev, edm::EventSetup const double HcalCone = 0; - c.get<CaloGeometryRecord>().get(geometry); + geometry_ = &c.getData(tok_geom_); for (std::vector<PCaloHit>::const_iterator SimHits = SimHitResult->begin(); SimHits != SimHitResult->end(); ++SimHits) { HcalDetId cell; if (testNumber_) - cell = HcalHitRelabeller::relabel(SimHits->id(), hcons); + cell = HcalHitRelabeller::relabel(SimHits->id(), hcons_); else cell = HcalDetId(SimHits->id()); - auto cellGeometry = geometry->getSubdetectorGeometry(cell)->getGeometry(cell); + auto cellGeometry = geometry_->getSubdetectorGeometry(cell)->getGeometry(cell); double etaS = cellGeometry->getPosition().eta(); double phiS = cellGeometry->getPosition().phi(); double en = SimHits->energy(); @@ -430,15 +426,15 @@ void HcalSimHitsValidation::analyze(edm::Event const &ev, edm::EventSetup const double EcalCone = 0; if (!ebHits_.empty()) { - edm::Handle<PCaloHitContainer> ecalEBHits; + edm::Handle<edm::PCaloHitContainer> ecalEBHits; ev.getByToken(tok_ecalEB_, ecalEBHits); - const PCaloHitContainer *SimHitResultEB = ecalEBHits.product(); + const auto SimHitResultEB = ecalEBHits.product(); for (std::vector<PCaloHit>::const_iterator SimHits = SimHitResultEB->begin(); SimHits != SimHitResultEB->end(); ++SimHits) { EBDetId EBid = EBDetId(SimHits->id()); - auto cellGeometry = geometry->getSubdetectorGeometry(EBid)->getGeometry(EBid); + auto cellGeometry = geometry_->getSubdetectorGeometry(EBid)->getGeometry(EBid); double etaS = cellGeometry->getPosition().eta(); double phiS = cellGeometry->getPosition().phi(); double en = SimHits->energy(); @@ -452,15 +448,15 @@ void HcalSimHitsValidation::analyze(edm::Event const &ev, edm::EventSetup const // Ecal EE SimHits if (!eeHits_.empty()) { - edm::Handle<PCaloHitContainer> ecalEEHits; + edm::Handle<edm::PCaloHitContainer> ecalEEHits; ev.getByToken(tok_ecalEE_, ecalEEHits); - const PCaloHitContainer *SimHitResultEE = ecalEEHits.product(); + const auto SimHitResultEE = ecalEEHits.product(); for (std::vector<PCaloHit>::const_iterator SimHits = SimHitResultEE->begin(); SimHits != SimHitResultEE->end(); ++SimHits) { EEDetId EEid = EEDetId(SimHits->id()); - auto cellGeometry = geometry->getSubdetectorGeometry(EEid)->getGeometry(EEid); + auto cellGeometry = geometry_->getSubdetectorGeometry(EEid)->getGeometry(EEid); double etaS = cellGeometry->getPosition().eta(); double phiS = cellGeometry->getPosition().phi(); double en = SimHits->energy(); diff --git a/Validation/HcalHits/src/SimG4HcalHitJetFinder.cc b/Validation/HcalHits/src/SimG4HcalHitJetFinder.cc index f620b6c5eeb46..5870651aa75f3 100644 --- a/Validation/HcalHits/src/SimG4HcalHitJetFinder.cc +++ b/Validation/HcalHits/src/SimG4HcalHitJetFinder.cc @@ -26,15 +26,15 @@ std::vector<SimG4HcalHitCluster> *SimG4HcalHitJetFinder::getClusters(bool hcal_o std::vector<CaloHit>::iterator itr; for (itr = input.begin(); itr != input.end(); itr++) { - LogDebug("ValidHcal") << "HcalHitJetFinder::getClusters_1 - input : e " << itr->e() << " eta " << itr->eta() - << " phi " << itr->phi() << " subdet " << itr->det(); + edm::LogVerbatim("ValidHcal") << "HcalHitJetFinder::getClusters_1 - input : e " << itr->e() << " eta " + << itr->eta() << " phi " << itr->phi() << " subdet " << itr->det(); } sort(input.begin(), input.end()); // sort input in descending order for (itr = input.begin(); itr != input.end(); itr++) { - LogDebug("ValidHcal") << "HcalHitJetFinder::getClusters_2 - input : e " << itr->e() << " eta " << itr->eta() - << " phi " << itr->phi() << " subdet " << itr->det(); + edm::LogVerbatim("ValidHcal") << "HcalHitJetFinder::getClusters_2 - input : e " << itr->e() << " eta " + << itr->eta() << " phi " << itr->phi() << " subdet " << itr->det(); } std::vector<SimG4HcalHitCluster> temp; // dummy container for clusters @@ -54,9 +54,7 @@ std::vector<SimG4HcalHitCluster> *SimG4HcalHitJetFinder::getClusters(bool hcal_o hcal_only) || (!hcal_only)) { cluster += input[j]; - LogDebug("ValidHcal") << "HcalHitJetFinder:: First seed hit " - << "..................\n" - << (*itr_hits); + edm::LogVerbatim("ValidHcal") << "HcalHitJetFinder:: First seed hit ..................\n" << (*itr_hits); first_seed = j; break; } @@ -73,19 +71,18 @@ std::vector<SimG4HcalHitCluster> *SimG4HcalHitJetFinder::getClusters(bool hcal_o hcal_only) || (!hcal_only)) && (j != first_seed)) { - LogDebug("ValidHcal") << "HcalHitJetFinder:: ........... Consider hit" - << " ..................\n" - << (*itr_hits); + edm::LogVerbatim("ValidHcal") << "HcalHitJetFinder:: ........... Consider hit ..................\n" + << (*itr_hits); int incl = 0; // if the hit is included in one of clusters int iclus; for (itr_clus = temp.begin(), iclus = 0; itr_clus != temp.end(); itr_clus++, iclus++) { - LogDebug("ValidHcal") << "HcalHitJetFinder::=======> Cluster " << iclus << "\n" << (*itr_clus); + edm::LogVerbatim("ValidHcal") << "HcalHitJetFinder::=======> Cluster " << iclus << "\n" << (*itr_clus); double d = rDist(&(*itr_clus), &(*itr_hits)); if (d < jetcone) { - LogDebug("ValidHcal") << "HcalHitJetFinder:: -> associated ... "; + edm::LogVerbatim("ValidHcal") << "HcalHitJetFinder:: -> associated ... "; temp[iclus] += *itr_hits; incl = 1; break; @@ -97,9 +94,7 @@ std::vector<SimG4HcalHitCluster> *SimG4HcalHitJetFinder::getClusters(bool hcal_o SimG4HcalHitCluster cl; cl += *itr_hits; temp.push_back(cl); - LogDebug("ValidHcal") << "HcalHitJetFinder:: ************ NEW CLUSTER" - << " !\n" - << cl; + edm::LogVerbatim("ValidHcal") << "HcalHitJetFinder:: ************ NEW CLUSTER !\n" << cl; } } } @@ -129,9 +124,8 @@ double SimG4HcalHitJetFinder::rDist(const double etac, const double phic, const double tmp = sqrt(delta_eta * delta_eta + delta_phi * delta_phi); - LogDebug("ValidHcal") << "HcalHitJetFinder::rDist:\n" - << " Clus. eta, phi = " << etac << " " << phic << "\n" - << " hit eta, phi = " << etah << " " << phih << " rDist = " << tmp; + edm::LogVerbatim("ValidHcal") << "HcalHitJetFinder::rDist:\n Clus. eta, phi = " << etac << " " << phic + << "\n hit eta, phi = " << etah << " " << phih << " rDist = " << tmp; return tmp; } diff --git a/Validation/HcalHits/src/ZdcSimHitStudy.cc b/Validation/HcalHits/src/ZdcSimHitStudy.cc index ef77ccf641de0..0d7f74c9971af 100644 --- a/Validation/HcalHits/src/ZdcSimHitStudy.cc +++ b/Validation/HcalHits/src/ZdcSimHitStudy.cc @@ -621,13 +621,7 @@ void ZdcSimHitStudy::analyze(const edm::Event &iEvent, const edm::EventSetup &iS // Below is the old script which I will comment later - LogDebug("ZdcSimHitStudy") - // std::cout - // std::cout - << "Run = " << iEvent.id().run() << " Event = " << iEvent.id().event(); - /* << "Run = " << e.id().run() << " Event = " - << e.id().event();*/ - // std::cout<<std::endl; + edm::LogVerbatim("ZdcSimHitStudy") << "Run = " << iEvent.id().run() << " Event = " << iEvent.id().event(); std::vector<PCaloHit> caloHits; edm::Handle<edm::PCaloHitContainer> hitsZdc; @@ -639,14 +633,11 @@ void ZdcSimHitStudy::analyze(const edm::Event &iEvent, const edm::EventSetup &iS getHits = true; } - LogDebug("ZdcSim") << "ZdcValidation: Input flags Hits " << getHits; + edm::LogVerbatim("ZdcSim") << "ZdcValidation: Input flags Hits " << getHits; if (getHits) { caloHits.insert(caloHits.end(), hitsZdc->begin(), hitsZdc->end()); - LogDebug("ZdcSimHitStudy") - // std::cout - << "ZdcValidation: Hit buffer " << caloHits.size(); - //<< std::endl; + edm::LogVerbatim("ZdcSimHitStudy") << "ZdcValidation: Hit buffer " << caloHits.size(); analyzeHits(caloHits); } } @@ -682,12 +673,10 @@ void ZdcSimHitStudy::analyzeHits(std::vector<PCaloHit> &hits) { FillHitValHist(side, section, channel, energy, time); - LogDebug("ZdcSimHitStudy") - // std::cout - << "Hit[" << i << "] ID " << std::hex << id_ << std::dec << " DetID " << id << " Det " << det << " side " - << side << " Section " << section << " channel " << channel << " E " << energy << " time \n" - << time; - //<<std::endl; + edm::LogVerbatim("ZdcSimHitStudy") << "Hit[" << i << "] ID " << std::hex << id_ << std::dec << " DetID " << id + << " Det " << det << " side " << side << " Section " << section << " channel " + << channel << " E " << energy << " time \n" + << time; if (det == 5) { // Check DetId.h if (section == HcalZDCDetId::EM) @@ -758,10 +747,8 @@ void ZdcSimHitStudy::analyzeHits(std::vector<PCaloHit> &hits) { meZdcCorEtotNEtotP_->Fill(enetotN, enetotP); meZdcEneTot_->Fill(enetot); } - LogDebug("HcalSimHitStudy") - // std::cout - << "HcalSimHitStudy::analyzeHits: Had " << nZdcHad << " EM " << nZdcEM << " Bad " << nBad << " All " << nHit; - //<<std::endl; + edm::LogVerbatim("HcalSimHitStudy") << "HcalSimHitStudy::analyzeHits: Had " << nZdcHad << " EM " << nZdcEM << " Bad " + << nBad << " All " << nHit; } int ZdcSimHitStudy::FillHitValHist(int side, int section, int channel, double energy, double time) { diff --git a/Validation/HcalHits/test/HcalGeomCheck.cc b/Validation/HcalHits/test/HcalGeomCheck.cc index d16518ba1f544..12d2eb54c8969 100644 --- a/Validation/HcalHits/test/HcalGeomCheck.cc +++ b/Validation/HcalHits/test/HcalGeomCheck.cc @@ -12,7 +12,6 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" diff --git a/Validation/HcalHits/test/HcalHitValidation.cc b/Validation/HcalHits/test/HcalHitValidation.cc index c6b87a576fb99..d1d56a081ddce 100644 --- a/Validation/HcalHits/test/HcalHitValidation.cc +++ b/Validation/HcalHits/test/HcalHitValidation.cc @@ -160,7 +160,7 @@ void HcalHitValidation::bookHistograms(DQMStore::IBooker &ibooker, edm::Run cons } void HcalHitValidation::analyze(const edm::Event &e, const edm::EventSetup &) { - LogDebug("HcalHitValid") << "Run = " << e.id().run() << " Event = " << e.id().event(); + edm::LogVerbatim("HcalHitValid") << "Run = " << e.id().run() << " Event = " << e.id().event(); std::vector<PCaloHit> caloHits; edm::Handle<edm::PCaloHitContainer> hitsHcal; @@ -196,12 +196,12 @@ void HcalHitValidation::analyze(const edm::Event &e, const edm::EventSetup &) { getJets = true; } - LogDebug("HcalHitValid") << "HcalValidation: Input flags Hits " << getHits << ", Layer " << getLayer << ", NxN " - << getNxN << ", Jets " << getJets; + edm::LogVerbatim("HcalHitValid") << "HcalValidation: Input flags Hits " << getHits << ", Layer " << getLayer + << ", NxN " << getNxN << ", Jets " << getJets; if (getHits) { caloHits.insert(caloHits.end(), hitsHcal->begin(), hitsHcal->end()); - LogDebug("HcalHitValid") << "HcalValidation: Hit buffer " << caloHits.size(); + edm::LogVerbatim("HcalHitValid") << "HcalValidation: Hit buffer " << caloHits.size(); analyzeHits(caloHits); } @@ -240,9 +240,10 @@ void HcalHitValidation::analyzeHits(std::vector<PCaloHit> &hits) { uint16_t depth_ = hits[i].depth(); double energyEM = hits[i].energyEM(); double energyHad = hits[i].energyHad(); - LogDebug("HcalHitValid") << "Hit[" << i << "] ID " << std::hex << id_ << std::dec << " Det " << det << " Sub " - << subdet << " depth " << depth << " " << depth_ << " Eta " << eta << " Phi " << phi - << " E " << energy << "(EM " << energyEM << ", Had " << energyHad << ") time " << time; + edm::LogVerbatim("HcalHitValid") << "Hit[" << i << "] ID " << std::hex << id_ << std::dec << " Det " << det + << " Sub " << subdet << " depth " << depth << " " << depth_ << " Eta " << eta + << " Phi " << phi << " E " << energy << "(EM " << energyEM << ", Had " << energyHad + << ") time " << time; if (det == 4) { // Check DetId.h if (subdet == static_cast<int>(HcalBarrel)) { nHB++; @@ -317,8 +318,8 @@ void HcalHitValidation::analyzeHits(std::vector<PCaloHit> &hits) { meHFNHit_->Fill(double(nHF)); mePMTHit_->Fill(double(nPMT)); - LogDebug("HcalHitValid") << "HcalHitValidation::analyzeHits: HB " << nHB << " HE " << nHE << " HO " << nHO << " HF " - << nHF << " PMT " << nPMT << " Bad " << nBad << " All " << nHit; + edm::LogVerbatim("HcalHitValid") << "HcalHitValidation::analyzeHits: HB " << nHB << " HE " << nHE << " HO " << nHO + << " HF " << nHF << " PMT " << nPMT << " Bad " << nBad << " All " << nHit; } void HcalHitValidation::analyzeLayer(edm::Handle<PHcalValidInfoLayer> &infoLayer) { @@ -342,8 +343,7 @@ void HcalHitValidation::analyzeLayer(edm::Handle<PHcalValidInfoLayer> &infoLayer nh++; } - LogDebug("HcalHitValid") << "HcalHitValidation::analyzeLayer:Hit " - << "subdet = " << id << " lay = " << layer; + edm::LogVerbatim("HcalHitValid") << "HcalHitValidation::analyzeLayer:Hit subdet = " << id << " lay = " << layer; meLayerLay_->Fill(double(layer)); meEtaHLay_->Fill(etaHits[j]); @@ -394,9 +394,9 @@ void HcalHitValidation::analyzeLayer(edm::Handle<PHcalValidInfoLayer> &infoLayer meEHFEmLay_->Fill(eEcalHF); meEHFHdLay_->Fill(eHcalHF); - LogDebug("HcalHitValid") << "HcalHitValidation::analyzeLayer: eHO " << eHO << " eHBHE = " << eHBHE - << " elongHF = " << elongHF << " eshortHF = " << eshortHF << " eEcalHF = " << eEcalHF - << " eHcalHF = " << eHcalHF; + edm::LogVerbatim("HcalHitValid") << "HcalHitValidation::analyzeLayer: eHO " << eHO << " eHBHE = " << eHBHE + << " elongHF = " << elongHF << " eshortHF = " << eshortHF + << " eEcalHF = " << eEcalHF << " eHcalHF = " << eHcalHF; } void HcalHitValidation::analyzeNxN(edm::Handle<PHcalValidInfoNxN> &infoNxN) { @@ -433,8 +433,8 @@ void HcalHitValidation::analyzeNxN(edm::Handle<PHcalValidInfoNxN> &infoNxN) { meTrNxN_->Fill(idIxI[j], eIxI[j]); // transverse profile } - LogDebug("HcalHitValid") << "HcalHitValidation::analyzeNxN: " << nIxI << " hits in NxN analysis; Total Energy " - << etotNxN << "/" << etotNxNr; + edm::LogVerbatim("HcalHitValid") << "HcalHitValidation::analyzeNxN: " << nIxI + << " hits in NxN analysis; Total Energy " << etotNxN << "/" << etotNxNr; } void HcalHitValidation::analyzeJets(edm::Handle<PHcalValidInfoJets> &infoJets) { @@ -483,11 +483,10 @@ void HcalHitValidation::analyzeJets(edm::Handle<PHcalValidInfoJets> &infoJets) { meEtaJet_->Fill(jetEta[j]); mePhiJet_->Fill(jetPhi[j]); } - LogDebug("HcalHitValid") << "HcalHitValidation::analyzeJets: " << nJets << " jets with " << nJetHits - << " hits in the " - << "leading jet\n" - << " d(Eta) = " << detaJet << " d(Phi) = " << dphiJet << " d(R) = " << drJet - << " diJet Mass = " << dijetM; + edm::LogVerbatim("HcalHitValid") << "HcalHitValidation::analyzeJets: " << nJets << " jets with " << nJetHits + << " hits in the leading jet\n" + << " d(Eta) = " << detaJet << " d(Phi) = " << dphiJet << " d(R) = " << drJet + << " diJet Mass = " << dijetM; } // define this as a plug-in diff --git a/Validation/HcalHits/test/runHcalGeomCheckStep1_cfg.py b/Validation/HcalHits/test/runHcalGeomCheckStep1_cfg.py index 7f5dec7dbd892..cf573e7e7dd2a 100644 --- a/Validation/HcalHits/test/runHcalGeomCheckStep1_cfg.py +++ b/Validation/HcalHits/test/runHcalGeomCheckStep1_cfg.py @@ -21,7 +21,7 @@ process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:mc', '') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HcalValidation') + process.MessageLogger.HcalValidation=dict() process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(5000) diff --git a/Validation/HcalHits/test/runHcalGeomCheckStep2_cfg.py b/Validation/HcalHits/test/runHcalGeomCheckStep2_cfg.py index b25cf83d92902..a66fef2d2c6c8 100644 --- a/Validation/HcalHits/test/runHcalGeomCheckStep2_cfg.py +++ b/Validation/HcalHits/test/runHcalGeomCheckStep2_cfg.py @@ -13,7 +13,7 @@ process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:mc', '') if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HcalValidation') + process.MessageLogger.HcalValidation=dict() process.source = cms.Source("PoolSource", diff --git a/Validation/HcalHits/test/runZdc_cfg.py b/Validation/HcalHits/test/runZdc_cfg.py index 5fe9e09cac2d7..58b2b9675781d 100644 --- a/Validation/HcalHits/test/runZdc_cfg.py +++ b/Validation/HcalHits/test/runZdc_cfg.py @@ -89,29 +89,10 @@ def customise(process): #Tweak Message logger to dump G4cout and G4cerr messages in G4msg.log #print process.MessageLogger.__dict__ - process.MessageLogger.destinations=cms.untracked.vstring('cout' - ,'cerr' - ,'G4msg' - ) - process.MessageLogger.categories=cms.untracked.vstring('FwkJob' - ,'FwkReport' - ,'FwkSummary' - ,'Root_NoDictionary' - ,'TimeReport' - ,'TimeModule' - ,'TimeEvent' - ,'MemoryCheck' - ,'PhysicsList' - ,'G4cout' - ,'G4cerr' - ,'CaloSim' - ,'ForwardSim' - ) - process.MessageLogger.debugModules=cms.untracked.vstring('g4SimHits') #Configuring the G4msg.log output - process.MessageLogger.G4msg = cms.untracked.PSet( + process.MessageLogger.files = dict(G4msg = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(True) #First eliminate unneeded output ,threshold = cms.untracked.string('INFO') @@ -136,7 +117,7 @@ def customise(process): ,CaloSim = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ,ForwardSim = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ) - + ) #Add these 3 lines to put back the summary for timing information at the end of the logfile #(needed for TimeReport report) process.options = cms.untracked.PSet( diff --git a/Validation/HcalHits/test/runZdc_digi_cfg.py b/Validation/HcalHits/test/runZdc_digi_cfg.py index 4f5f0e51623d3..f2e9e3061c510 100644 --- a/Validation/HcalHits/test/runZdc_digi_cfg.py +++ b/Validation/HcalHits/test/runZdc_digi_cfg.py @@ -129,29 +129,10 @@ def customise(process): #Tweak Message logger to dump G4cout and G4cerr messages in G4msg.log #print process.MessageLogger.__dict__ - process.MessageLogger.destinations=cms.untracked.vstring('cout' - ,'cerr' - ,'G4msg' - ) - process.MessageLogger.categories=cms.untracked.vstring('FwkJob' - ,'FwkReport' - ,'FwkSummary' - ,'Root_NoDictionary' - ,'TimeReport' - ,'TimeModule' - ,'TimeEvent' - ,'MemoryCheck' - ,'PhysicsList' - ,'G4cout' - ,'G4cerr' - ,'CaloSim' - ,'ForwardSim' - ) - process.MessageLogger.debugModules=cms.untracked.vstring('g4SimHits') #Configuring the G4msg.log output - process.MessageLogger.G4msg = cms.untracked.PSet( + process.MessageLogger.files.G4msg = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(True) #First eliminate unneeded output ,threshold = cms.untracked.string('INFO') diff --git a/Validation/HcalRecHits/interface/HcalRecHitsValidation.h b/Validation/HcalRecHits/interface/HcalRecHitsValidation.h index 2e0358142205c..4504281e97078 100644 --- a/Validation/HcalRecHits/interface/HcalRecHitsValidation.h +++ b/Validation/HcalRecHits/interface/HcalRecHitsValidation.h @@ -2,7 +2,6 @@ #define HcalRecHitsValidation_H #include "DQMServices/Core/interface/DQMEDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Frameworkfwd.h" @@ -25,6 +24,9 @@ #include "Geometry/CaloGeometry/interface/CaloCellGeometry.h" #include "Geometry/CaloGeometry/interface/CaloGeometry.h" #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" +#include "Geometry/HcalCommonData/interface/HcalDDDRecConstants.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "Geometry/Records/interface/HcalRecNumberingRecord.h" #include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" @@ -84,6 +86,9 @@ class HcalRecHitsValidation : public DQMEDAnalyzer { edm::EDGetTokenT<HFRecHitCollection> tok_hf_; edm::EDGetTokenT<HORecHitCollection> tok_ho_; + edm::ESGetToken<HcalDDDRecConstants, HcalRecNumberingRecord> tok_HRNDC_; + edm::ESGetToken<CaloGeometry, CaloGeometryRecord> tok_Geom_; + // choice of subdetector in config : noise/HB/HE/HO/HF/ALL (0/1/2/3/4/5) int subdet_; @@ -145,7 +150,7 @@ class HcalRecHitsValidation : public DQMEDAnalyzer { MonitorElement *meLog10Chi2profileHB; MonitorElement *meLog10Chi2profileHE; - edm::ESHandle<CaloGeometry> geometry; + const CaloGeometry *geometry_; // Filling vectors with essential RecHits data std::vector<int> csub; diff --git a/Validation/HcalRecHits/src/HcalRecHitsValidation.cc b/Validation/HcalRecHits/src/HcalRecHitsValidation.cc index 0d155f50f648f..45118cb71c00e 100644 --- a/Validation/HcalRecHits/src/HcalRecHitsValidation.cc +++ b/Validation/HcalRecHits/src/HcalRecHitsValidation.cc @@ -1,8 +1,6 @@ #include "DataFormats/HcalDetId/interface/HcalSubdetector.h" -#include "Geometry/HcalCommonData/interface/HcalDDDRecConstants.h" #include "Geometry/HcalCommonData/interface/HcalHitRelabeller.h" #include "Geometry/HcalTowerAlgo/interface/HcalGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "Validation/HcalRecHits/interface/HcalRecHitsValidation.h" HcalRecHitsValidation::HcalRecHitsValidation(edm::ParameterSet const &conf) @@ -38,6 +36,9 @@ HcalRecHitsValidation::HcalRecHitsValidation(edm::ParameterSet const &conf) tok_hh_ = consumes<edm::PCaloHitContainer>(conf.getUntrackedParameter<edm::InputTag>("SimHitCollectionLabel")); + tok_HRNDC_ = esConsumes<HcalDDDRecConstants, HcalRecNumberingRecord>(); + tok_Geom_ = esConsumes<CaloGeometry, CaloGeometryRecord>(); + subdet_ = 5; if (hcalselector_ == "noise") subdet_ = 0; @@ -189,9 +190,7 @@ void HcalRecHitsValidation::bookHistograms(DQMStore::IBooker &ib, edm::Run const void HcalRecHitsValidation::analyze(edm::Event const &ev, edm::EventSetup const &c) { using namespace edm; - edm::ESHandle<HcalDDDRecConstants> pHRNDC; - c.get<HcalRecNumberingRecord>().get(pHRNDC); - const HcalDDDRecConstants *hcons = &(*pHRNDC); + const HcalDDDRecConstants *hcons = &c.getData(tok_HRNDC_); // cuts for each subdet_ector mimiking "Scheme B" // double cutHB = 0.9, cutHE = 1.4, cutHO = 1.1, cutHFL = 1.2, cutHFS = 1.8; @@ -257,7 +256,8 @@ void HcalRecHitsValidation::analyze(edm::Event const &ev, edm::EventSetup const // std::cout << "*** 2" << std::endl; - c.get<CaloGeometryRecord>().get(geometry); + geometry_ = &c.getData(tok_Geom_); + ; // Fill working vectors of HCAL RecHits quantities (all of these are drawn) fillRecHitsTmp(subdet_, ev); @@ -282,7 +282,7 @@ void HcalRecHitsValidation::analyze(edm::Event const &ev, edm::EventSetup const for (; RecHit != RecHitEnd; ++RecHit) { EBDetId EBid = EBDetId(RecHit->id()); - auto cellGeometry = geometry->getSubdetectorGeometry(EBid)->getGeometry(EBid); + auto cellGeometry = geometry_->getSubdetectorGeometry(EBid)->getGeometry(EBid); double eta = cellGeometry->getPosition().eta(); double phi = cellGeometry->getPosition().phi(); double en = RecHit->energy(); @@ -306,7 +306,7 @@ void HcalRecHitsValidation::analyze(edm::Event const &ev, edm::EventSetup const for (; RecHit != RecHitEnd; ++RecHit) { EEDetId EEid = EEDetId(RecHit->id()); - auto cellGeometry = geometry->getSubdetectorGeometry(EEid)->getGeometry(EEid); + auto cellGeometry = geometry_->getSubdetectorGeometry(EEid)->getGeometry(EEid); double eta = cellGeometry->getPosition().eta(); double phi = cellGeometry->getPosition().phi(); double en = RecHit->energy(); @@ -430,7 +430,6 @@ void HcalRecHitsValidation::analyze(edm::Event const &ev, edm::EventSetup const } // SimHits vs. RecHits - const CaloGeometry *geo = geometry.product(); if (subdet_ > 0 && subdet_ < 6 && imc != 0) { // not noise edm::Handle<PCaloHitContainer> hcalHits; @@ -465,7 +464,7 @@ void HcalRecHitsValidation::analyze(edm::Event const &ev, edm::EventSetup const // interest, then we won't do any thing with it const HcalGeometry *cellGeometry = - dynamic_cast<const HcalGeometry *>(geo->getSubdetectorGeometry(DetId::Hcal, cell.subdet())); + dynamic_cast<const HcalGeometry *>(geometry_->getSubdetectorGeometry(DetId::Hcal, cell.subdet())); double etaS = cellGeometry->getPosition(cell).eta(); double phiS = cellGeometry->getPosition(cell).phi(); double en = SimHits->energy(); @@ -540,12 +539,10 @@ void HcalRecHitsValidation::fillRecHitsTmp(int subdet_, edm::Event const &ev) { // HBHE edm::Handle<HBHERecHitCollection> hbhecoll; if (ev.getByToken(tok_hbhe_, hbhecoll)) { - const CaloGeometry *geo = geometry.product(); - for (HBHERecHitCollection::const_iterator j = hbhecoll->begin(); j != hbhecoll->end(); j++) { HcalDetId cell(j->id()); const HcalGeometry *cellGeometry = - dynamic_cast<const HcalGeometry *>(geo->getSubdetectorGeometry(DetId::Hcal, cell.subdet())); + dynamic_cast<const HcalGeometry *>(geometry_->getSubdetectorGeometry(DetId::Hcal, cell.subdet())); double eta = cellGeometry->getPosition(cell).eta(); double phi = cellGeometry->getPosition(cell).phi(); double zc = cellGeometry->getPosition(cell).z(); @@ -579,7 +576,7 @@ void HcalRecHitsValidation::fillRecHitsTmp(int subdet_, edm::Event const &ev) { if (ev.getByToken(tok_hf_, hfcoll)) { for (HFRecHitCollection::const_iterator j = hfcoll->begin(); j != hfcoll->end(); j++) { HcalDetId cell(j->id()); - auto cellGeometry = geometry->getSubdetectorGeometry(cell)->getGeometry(cell); + auto cellGeometry = geometry_->getSubdetectorGeometry(cell)->getGeometry(cell); double eta = cellGeometry->getPosition().eta(); double phi = cellGeometry->getPosition().phi(); @@ -613,7 +610,7 @@ void HcalRecHitsValidation::fillRecHitsTmp(int subdet_, edm::Event const &ev) { if (ev.getByToken(tok_ho_, hocoll)) { for (HORecHitCollection::const_iterator j = hocoll->begin(); j != hocoll->end(); j++) { HcalDetId cell(j->id()); - auto cellGeometry = geometry->getSubdetectorGeometry(cell)->getGeometry(cell); + auto cellGeometry = geometry_->getSubdetectorGeometry(cell)->getGeometry(cell); double eta = cellGeometry->getPosition().eta(); double phi = cellGeometry->getPosition().phi(); diff --git a/Validation/HcalRecHits/test/HcalDumpHits.cc b/Validation/HcalRecHits/test/HcalDumpHits.cc index 339cee3c13d8b..fe4fc8609f2ad 100644 --- a/Validation/HcalRecHits/test/HcalDumpHits.cc +++ b/Validation/HcalRecHits/test/HcalDumpHits.cc @@ -5,7 +5,6 @@ // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Utilities/interface/InputTag.h" @@ -49,6 +48,7 @@ class HcalDumpHits : public edm::one::EDAnalyzer<edm::one::WatchRuns> { const edm::EDGetTokenT<HBHERecHitCollection> hbheRecHitSource_; const edm::EDGetTokenT<HFRecHitCollection> hfRecHitSource_; const edm::EDGetTokenT<HORecHitCollection> hoRecHitSource_; + const edm::ESGetToken<HcalDDDRecConstants, HcalRecNumberingRecord> tok_HRNDC_; const HcalDDDRecConstants* hcons_; }; @@ -58,8 +58,9 @@ HcalDumpHits::HcalDumpHits(const edm::ParameterSet& iConfig) hfDigiSource_(consumes<QIE10DigiCollection>(iConfig.getParameter<edm::InputTag>("hfDigiSource"))), hoDigiSource_(consumes<HODigiCollection>(iConfig.getParameter<edm::InputTag>("hoDigiSource"))), hbheRecHitSource_(consumes<HBHERecHitCollection>(iConfig.getParameter<edm::InputTag>("hbheRecHitSource"))), - hfRecHitSource_(consumes<HFRecHitCollection>(iConfig.getParameter<edm::InputTag>("hfRecHitSource"))), + hfRecHitSource_(consumes<HFRecHitCollection>(iConfig.getParameter<edm::InputTag>("hfR(ecHitSource"))), hoRecHitSource_(consumes<HORecHitCollection>(iConfig.getParameter<edm::InputTag>("hoRecHitSource"))), + tok_HRNDC_(esConsumes<HcalDDDRecConstants, HcalRecNumberingRecord, edm::Transition::BeginRun>()), hcons_(nullptr) {} void HcalDumpHits::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { @@ -74,11 +75,7 @@ void HcalDumpHits::fillDescriptions(edm::ConfigurationDescriptions& descriptions descriptions.add("hcalDumpHits", desc); } -void HcalDumpHits::beginRun(const edm::Run&, const edm::EventSetup& iSetup) { - edm::ESHandle<HcalDDDRecConstants> pHRNDC; - iSetup.get<HcalRecNumberingRecord>().get(pHRNDC); - hcons_ = &(*pHRNDC); -} +void HcalDumpHits::beginRun(const edm::Run&, const edm::EventSetup& iSetup) { hcons_ = &iSetup.getData(tok_HRNDC_); } void HcalDumpHits::analyze(const edm::Event& iEvent, const edm::EventSetup&) { // first SimHits diff --git a/Validation/HcalRecHits/test/runHcalDumpHits_cfg.py b/Validation/HcalRecHits/test/runHcalDumpHits_cfg.py index 49fc9b23e587c..79a0b8a5cb3fb 100644 --- a/Validation/HcalRecHits/test/runHcalDumpHits_cfg.py +++ b/Validation/HcalRecHits/test/runHcalDumpHits_cfg.py @@ -16,7 +16,7 @@ process.MessageLogger.cerr.FwkReport.reportEvery = 1 if hasattr(process,'MessageLogger'): - process.MessageLogger.categories.append('HcalValidation') + process.MessageLogger.HcalValidation=dict() process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) diff --git a/Validation/MtdValidation/plugins/EtlDigiHitsValidation.cc b/Validation/MtdValidation/plugins/EtlDigiHitsValidation.cc index 30652aa9c6efa..492a1e454b557 100644 --- a/Validation/MtdValidation/plugins/EtlDigiHitsValidation.cc +++ b/Validation/MtdValidation/plugins/EtlDigiHitsValidation.cc @@ -109,7 +109,7 @@ void EtlDigiHitsValidation::analyze(const edm::Event& iEvent, const edm::EventSe for (const auto& dataFrame : *etlDigiHitsHandle) { // --- Get the on-time sample int isample = 2; - + double weight = 1.0; const auto& sample = dataFrame.sample(isample); ETLDetId detId = dataFrame.id(); DetId geoId = detId.geographicalId(); @@ -138,6 +138,9 @@ void EtlDigiHitsValidation::analyze(const edm::Event& iEvent, const edm::EventSe } if (topo2Dis) { + if (detId.discSide() == 1) { + weight = -weight; + } if ((detId.zside() == -1) && (detId.nDisc() == 1)) { idet = 0; } else if ((detId.zside() == -1) && (detId.nDisc() == 2)) { @@ -153,7 +156,7 @@ void EtlDigiHitsValidation::analyze(const edm::Event& iEvent, const edm::EventSe meHitCharge_[idet]->Fill(sample.data()); meHitTime_[idet]->Fill(sample.toa()); - meOccupancy_[idet]->Fill(global_point.x(), global_point.y()); + meOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight); meHitX_[idet]->Fill(global_point.x()); meHitY_[idet]->Fill(global_point.y()); @@ -283,11 +286,11 @@ void EtlDigiHitsValidation::bookHistograms(DQMStore::IBooker& ibook, "EtlHitYZposD1", "ETL DIGI hits Y (+Z, Single(topo1D)/First(topo2D) disk);Y_{DIGI} [cm]", 100, -130., 130.); meHitY_[3] = ibook.book1D("EtlHitYZposD2", "ETL DIGI hits Y (+Z, Second disk);Y_{DIGI} [cm]", 100, -130., 130.); meHitZ_[0] = ibook.book1D( - "EtlHitZZnegD1", "ETL DIGI hits Z (-Z, Single(topo1D)/First(topo2D) disk);Z_{DIGI} [cm]", 100, -304.2, -303.4); - meHitZ_[1] = ibook.book1D("EtlHitZZnegD2", "ETL DIGI hits Z (-Z, Second disk);Z_{DIGI} [cm]", 100, -304.2, -303.4); + "EtlHitZZnegD1", "ETL DIGI hits Z (-Z, Single(topo1D)/First(topo2D) disk);Z_{DIGI} [cm]", 100, -302., -298.); + meHitZ_[1] = ibook.book1D("EtlHitZZnegD2", "ETL DIGI hits Z (-Z, Second disk);Z_{DIGI} [cm]", 100, -304., -300.); meHitZ_[2] = ibook.book1D( - "EtlHitZZposD1", "ETL DIGI hits Z (+Z, Single(topo1D)/First(topo2D) disk);Z_{DIGI} [cm]", 100, 303.4, 304.2); - meHitZ_[3] = ibook.book1D("EtlHitZZposD2", "ETL DIGI hits Z (+Z, Second disk);Z_{DIGI} [cm]", 100, 303.4, 304.2); + "EtlHitZZposD1", "ETL DIGI hits Z (+Z, Single(topo1D)/First(topo2D) disk);Z_{DIGI} [cm]", 100, 298., 302.); + meHitZ_[3] = ibook.book1D("EtlHitZZposD2", "ETL DIGI hits Z (+Z, Second disk);Z_{DIGI} [cm]", 100, 300., 304.); meHitPhi_[0] = ibook.book1D("EtlHitPhiZnegD1", "ETL DIGI hits #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad]", diff --git a/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc b/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc index c372e040b501e..2da37e10d6df5 100644 --- a/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc @@ -120,6 +120,7 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS unsigned int n_reco_etl[4] = {0, 0, 0, 0}; for (const auto& recHit : *etlRecHitsHandle) { + double weight = 1.0; ETLDetId detId = recHit.id(); DetId geoId = detId.geographicalId(); const MTDGeomDet* thedet = geom->idToDet(geoId); @@ -144,6 +145,9 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS } if (topo2Dis) { + if (detId.discSide() == 1) { + weight = -weight; + } if ((detId.zside() == -1) && (detId.nDisc() == 1)) { idet = 0; } else if ((detId.zside() == -1) && (detId.nDisc() == 2)) { @@ -162,7 +166,7 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS meHitEnergy_[idet]->Fill(recHit.energy()); meHitTime_[idet]->Fill(recHit.time()); - meOccupancy_[idet]->Fill(global_point.x(), global_point.y()); + meOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight); meHitX_[idet]->Fill(global_point.x()); meHitY_[idet]->Fill(global_point.y()); meHitZ_[idet]->Fill(global_point.z()); @@ -191,6 +195,7 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS // --- Loop over the ETL RECO clusters --- for (const auto& DetSetClu : *etlRecCluHandle) { for (const auto& cluster : DetSetClu) { + double weight = 1.0; if (topo1Dis) { if (cluster.energy() < hitMinEnergy1Dis_) continue; @@ -225,6 +230,9 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS } if (topo2Dis) { + if (cluId.discSide() == 1) { + weight = -weight; + } if ((cluId.zside() == -1) && (cluId.nDisc() == 1)) { idet = 0; } else if ((cluId.zside() == -1) && (cluId.nDisc() == 2)) { @@ -242,7 +250,7 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS meCluTime_[idet]->Fill(cluster.time()); meCluPhi_[idet]->Fill(global_point.phi()); meCluEta_[idet]->Fill(global_point.eta()); - meCluOccupancy_[idet]->Fill(global_point.x(), global_point.y()); + meCluOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight); meCluHits_[idet]->Fill(cluster.size()); } } @@ -325,11 +333,11 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, "EtlHitYZposD1", "ETL RECO hits Y (+Z, Single(topo1D)/First(topo2D) Disk);Y_{RECO} [cm]", 100, -130., 130.); meHitY_[3] = ibook.book1D("EtlHitYZposD2", "ETL RECO hits Y (+Z, Second Disk);Y_{RECO} [cm]", 100, -130., 130.); meHitZ_[0] = ibook.book1D( - "EtlHitZZnegD1", "ETL RECO hits Z (-Z, Single(topo1D)/First(topo2D) Disk);Z_{RECO} [cm]", 100, -304.2, -303.4); - meHitZ_[1] = ibook.book1D("EtlHitZZnegD2", "ETL RECO hits Z (-Z, Second Disk);Z_{RECO} [cm]", 100, -304.2, -303.4); + "EtlHitZZnegD1", "ETL RECO hits Z (-Z, Single(topo1D)/First(topo2D) Disk);Z_{RECO} [cm]", 100, -302., -298.); + meHitZ_[1] = ibook.book1D("EtlHitZZnegD2", "ETL RECO hits Z (-Z, Second Disk);Z_{RECO} [cm]", 100, -304., -300.); meHitZ_[2] = ibook.book1D( - "EtlHitZZposD1", "ETL RECO hits Z (+Z, Single(topo1D)/First(topo2D) Disk);Z_{RECO} [cm]", 100, 303.4, 304.2); - meHitZ_[3] = ibook.book1D("EtlHitZZposD2", "ETL RECO hits Z (+Z, Second Disk);Z_{RECO} [cm]", 100, 303.4, 304.2); + "EtlHitZZposD1", "ETL RECO hits Z (+Z, Single(topo1D)/First(topo2D) Disk);Z_{RECO} [cm]", 100, 298., 302.); + meHitZ_[3] = ibook.book1D("EtlHitZZposD2", "ETL RECO hits Z (+Z, Second Disk);Z_{RECO} [cm]", 100, 300., 304.); meHitPhi_[0] = ibook.book1D( "EtlHitPhiZnegD1", "ETL RECO hits #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2); meHitPhi_[1] = @@ -532,7 +540,7 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meCluHits_[3] = ibook.book1D("EtlCluHitNumberZposD2", "ETL hits per cluster (+Z, Second Disk);Cluster size", 10, 0, 10); meCluOccupancy_[0] = - ibook.book2D("EtlOccupancyZnegD1", + ibook.book2D("EtlCluOccupancyZnegD1", "ETL cluster X vs Y (-Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]; Y_{RECO} [cm]", 100, -150., @@ -540,7 +548,7 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, 100, -150, 150); - meCluOccupancy_[1] = ibook.book2D("EtlOccupancyZnegD2", + meCluOccupancy_[1] = ibook.book2D("EtlCluOccupancyZnegD2", "ETL cluster X vs Y (-Z, Second Disk);X_{RECO} [cm]; Y_{RECO} [cm]", 100, -150., @@ -549,7 +557,7 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, -150, 150); meCluOccupancy_[2] = - ibook.book2D("EtlOccupancyZposD1", + ibook.book2D("EtlCluOccupancyZposD1", "ETL cluster X vs Y (+Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]; Y_{RECO} [cm]", 100, -150., @@ -557,7 +565,7 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, 100, -150, 150); - meCluOccupancy_[3] = ibook.book2D("EtlOccupancyZposD2", + meCluOccupancy_[3] = ibook.book2D("EtlCluOccupancyZposD2", "ETL cluster X vs Y (+Z, Second Disk);X_{RECO} [cm]; Y_{RECO} [cm]", 100, -150., diff --git a/Validation/MtdValidation/plugins/EtlSimHitsValidation.cc b/Validation/MtdValidation/plugins/EtlSimHitsValidation.cc index 3de18b641f8e9..c2b2a9ace9bb6 100644 --- a/Validation/MtdValidation/plugins/EtlSimHitsValidation.cc +++ b/Validation/MtdValidation/plugins/EtlSimHitsValidation.cc @@ -194,6 +194,7 @@ void EtlSimHitsValidation::analyze(const edm::Event& iEvent, const edm::EventSet } for (auto const& hit : m_etlHits[idet]) { + double weight = 1.0; if (topo1Dis) { if ((hit.second).energy < hitMinEnergy1Dis_) continue; @@ -214,13 +215,18 @@ void EtlSimHitsValidation::analyze(const edm::Event& iEvent, const edm::EventSet convertMmToCm((hit.second).x), convertMmToCm((hit.second).y), convertMmToCm((hit.second).z)); const auto& global_point = thedet->toGlobal(local_point); + if (topo2Dis && (detId.discSide() == 1)) { + weight = -weight; + } + // --- Fill the histograms + meHitEnergy_[idet]->Fill((hit.second).energy); meHitTime_[idet]->Fill((hit.second).time); meHitXlocal_[idet]->Fill((hit.second).x); meHitYlocal_[idet]->Fill((hit.second).y); meHitZlocal_[idet]->Fill((hit.second).z); - meOccupancy_[idet]->Fill(global_point.x(), global_point.y()); + meOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight); meHitX_[idet]->Fill(global_point.x()); meHitY_[idet]->Fill(global_point.y()); meHitZ_[idet]->Fill(global_point.z()); @@ -273,7 +279,6 @@ void EtlSimHitsValidation::bookHistograms(DQMStore::IBooker& ibook, 10.); meNtrkPerCell_[3] = ibook.book1D("EtlNtrkPerCellZposD2", "Number of tracks per ETL sensor (+Z, Second disk);N_{trk}", 10, 0., 10.); - meHitEnergy_[0] = ibook.book1D( "EtlHitEnergyZnegD1", "ETL SIM hits energy (-Z, Single(topo1D)/First(topo2D) disk);E_{SIM} [MeV]", 100, 0., 3.); meHitEnergy_[1] = @@ -381,11 +386,11 @@ void EtlSimHitsValidation::bookHistograms(DQMStore::IBooker& ibook, "EtlHitYZposD1", "ETL SIM hits Y (+Z, Single(topo1D)/First(topo2D) disk);Y_{SIM} [cm]", 100, -130., 130.); meHitY_[3] = ibook.book1D("EtlHitYZposD2", "ETL SIM hits Y (+Z, Second disk);Y_{SIM} [cm]", 100, -130., 130.); meHitZ_[0] = ibook.book1D( - "EtlHitZZnegD1", "ETL SIM hits Z (-Z, Single(topo1D)/First(topo2D) disk);Z_{SIM} [cm]", 100, -304.2, -303.4); - meHitZ_[1] = ibook.book1D("EtlHitZZnegD2", "ETL SIM hits Z (-Z, Second disk);Z_{SIM} [cm]", 100, -304.2, -303.4); + "EtlHitZZnegD1", "ETL SIM hits Z (-Z, Single(topo1D)/First(topo2D) disk);Z_{SIM} [cm]", 100, -302., -298.); + meHitZ_[1] = ibook.book1D("EtlHitZZnegD2", "ETL SIM hits Z (-Z, Second disk);Z_{SIM} [cm]", 100, -304., -300.); meHitZ_[2] = ibook.book1D( - "EtlHitZZposD1", "ETL SIM hits Z (+Z, Single(topo1D)/First(topo2D) disk);Z_{SIM} [cm]", 100, 303.4, 304.2); - meHitZ_[3] = ibook.book1D("EtlHitZZposD2", "ETL SIM hits Z (+Z, Second disk);Z_{SIM} [cm]", 100, 303.4, 304.2); + "EtlHitZZposD1", "ETL SIM hits Z (+Z, Single(topo1D)/First(topo2D) disk);Z_{SIM} [cm]", 100, 298., 302.); + meHitZ_[3] = ibook.book1D("EtlHitZZposD2", "ETL SIM hits Z (+Z, Second disk);Z_{SIM} [cm]", 100, 300., 304.); meHitPhi_[0] = ibook.book1D( "EtlHitPhiZnegD1", "ETL SIM hits #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{SIM} [rad]", 100, -3.15, 3.15); diff --git a/Validation/MtdValidation/plugins/MtdGlobalRecoHarvester.cc b/Validation/MtdValidation/plugins/MtdGlobalRecoHarvester.cc index b2450a7412837..57b0a3b830559 100644 --- a/Validation/MtdValidation/plugins/MtdGlobalRecoHarvester.cc +++ b/Validation/MtdValidation/plugins/MtdGlobalRecoHarvester.cc @@ -27,9 +27,9 @@ class MtdGlobalRecoHarvester : public DQMEDHarvester { MonitorElement* meBtlEtaEff_; MonitorElement* meBtlPhiEff_; MonitorElement* meBtlPtEff_; - MonitorElement* meEtlEtaEff_[4]; - MonitorElement* meEtlPhiEff_[4]; - MonitorElement* meEtlPtEff_[4]; + MonitorElement* meEtlEtaEff_[2]; + MonitorElement* meEtlPhiEff_[2]; + MonitorElement* meEtlPtEff_[2]; }; // ------------ constructor and destructor -------------- @@ -50,29 +50,21 @@ void MtdGlobalRecoHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGett MonitorElement* meETLTrackEffEtaTotZneg = igetter.get(folder_ + "TrackETLEffEtaTotZneg"); MonitorElement* meETLTrackEffPhiTotZneg = igetter.get(folder_ + "TrackETLEffPhiTotZneg"); MonitorElement* meETLTrackEffPtTotZneg = igetter.get(folder_ + "TrackETLEffPtTotZneg"); - MonitorElement* meETLTrackEffEtaMtdZnegD1 = igetter.get(folder_ + "TrackETLEffEtaMtdZnegD1"); - MonitorElement* meETLTrackEffEtaMtdZnegD2 = igetter.get(folder_ + "TrackETLEffEtaMtdZnegD2"); - MonitorElement* meETLTrackEffPhiMtdZnegD1 = igetter.get(folder_ + "TrackETLEffPhiMtdZnegD1"); - MonitorElement* meETLTrackEffPhiMtdZnegD2 = igetter.get(folder_ + "TrackETLEffPhiMtdZnegD2"); - MonitorElement* meETLTrackEffPtMtdZnegD1 = igetter.get(folder_ + "TrackETLEffPtMtdZnegD1"); - MonitorElement* meETLTrackEffPtMtdZnegD2 = igetter.get(folder_ + "TrackETLEffPtMtdZnegD2"); + MonitorElement* meETLTrackEffEtaMtdZneg = igetter.get(folder_ + "TrackETLEffEtaMtdZneg"); + MonitorElement* meETLTrackEffPhiMtdZneg = igetter.get(folder_ + "TrackETLEffPhiMtdZneg"); + MonitorElement* meETLTrackEffPtMtdZneg = igetter.get(folder_ + "TrackETLEffPtMtdZneg"); MonitorElement* meETLTrackEffEtaTotZpos = igetter.get(folder_ + "TrackETLEffEtaTotZpos"); MonitorElement* meETLTrackEffPhiTotZpos = igetter.get(folder_ + "TrackETLEffPhiTotZpos"); MonitorElement* meETLTrackEffPtTotZpos = igetter.get(folder_ + "TrackETLEffPtTotZpos"); - MonitorElement* meETLTrackEffEtaMtdZposD1 = igetter.get(folder_ + "TrackETLEffEtaMtdZposD1"); - MonitorElement* meETLTrackEffEtaMtdZposD2 = igetter.get(folder_ + "TrackETLEffEtaMtdZposD2"); - MonitorElement* meETLTrackEffPhiMtdZposD1 = igetter.get(folder_ + "TrackETLEffPhiMtdZposD1"); - MonitorElement* meETLTrackEffPhiMtdZposD2 = igetter.get(folder_ + "TrackETLEffPhiMtdZposD2"); - MonitorElement* meETLTrackEffPtMtdZposD1 = igetter.get(folder_ + "TrackETLEffPtMtdZposD1"); - MonitorElement* meETLTrackEffPtMtdZposD2 = igetter.get(folder_ + "TrackETLEffPtMtdZposD2"); + MonitorElement* meETLTrackEffEtaMtdZpos = igetter.get(folder_ + "TrackETLEffEtaMtdZpos"); + MonitorElement* meETLTrackEffPhiMtdZpos = igetter.get(folder_ + "TrackETLEffPhiMtdZpos"); + MonitorElement* meETLTrackEffPtMtdZpos = igetter.get(folder_ + "TrackETLEffPtMtdZpos"); if (!meBTLTrackEffEtaTot || !meBTLTrackEffPhiTot || !meBTLTrackEffPtTot || !meBTLTrackEffEtaMtd || !meBTLTrackEffPhiMtd || !meBTLTrackEffPtMtd || !meETLTrackEffEtaTotZneg || !meETLTrackEffPhiTotZneg || - !meETLTrackEffPtTotZneg || !meETLTrackEffEtaMtdZnegD1 || !meETLTrackEffPhiMtdZnegD1 || - !meETLTrackEffPtMtdZnegD1 || !meETLTrackEffEtaTotZpos || !meETLTrackEffPhiTotZpos || !meETLTrackEffPtTotZpos || - !meETLTrackEffEtaMtdZposD1 || !meETLTrackEffPhiMtdZposD1 || !meETLTrackEffPtMtdZposD1 || - !meETLTrackEffEtaMtdZnegD2 || !meETLTrackEffPhiMtdZnegD2 || !meETLTrackEffPtMtdZnegD2 || - !meETLTrackEffEtaMtdZposD2 || !meETLTrackEffPhiMtdZposD2 || !meETLTrackEffPtMtdZposD2) { + !meETLTrackEffPtTotZneg || !meETLTrackEffEtaMtdZneg || !meETLTrackEffPhiMtdZneg || !meETLTrackEffPtMtdZneg || + !meETLTrackEffEtaTotZpos || !meETLTrackEffPhiTotZpos || !meETLTrackEffPtTotZpos || !meETLTrackEffEtaMtdZpos || + !meETLTrackEffPhiMtdZpos || !meETLTrackEffPtMtdZpos) { edm::LogError("MtdGlobalRecoHarvester") << "Monitoring histograms not found!" << std::endl; return; } @@ -94,72 +86,41 @@ void MtdGlobalRecoHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGett meBTLTrackEffPtTot->getNbinsX(), meBTLTrackEffPtTot->getTH1()->GetXaxis()->GetXmin(), meBTLTrackEffPtTot->getTH1()->GetXaxis()->GetXmax()); - meEtlEtaEff_[0] = ibook.book1D("EtlEtaEffZnegD1", - " Track Efficiency VS Eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta;Efficiency", + meEtlEtaEff_[0] = ibook.book1D("EtlEtaEffZneg", + " Track Efficiency VS Eta (-Z);#eta;Efficiency", meETLTrackEffEtaTotZneg->getNbinsX(), meETLTrackEffEtaTotZneg->getTH1()->GetXaxis()->GetXmin(), meETLTrackEffEtaTotZneg->getTH1()->GetXaxis()->GetXmax()); - meEtlEtaEff_[1] = ibook.book1D("EtlEtaEffZnegD2", - " Track Efficiency VS Eta (-Z, Second Disk);#eta;Efficiency", - meETLTrackEffEtaTotZneg->getNbinsX(), - meETLTrackEffEtaTotZneg->getTH1()->GetXaxis()->GetXmin(), - meETLTrackEffEtaTotZneg->getTH1()->GetXaxis()->GetXmax()); - meEtlPhiEff_[0] = - ibook.book1D("EtlPhiEffZnegD1", - "Track Efficiency VS Phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi [rad];Efficiency", - meETLTrackEffPhiTotZneg->getNbinsX(), - meETLTrackEffPhiTotZneg->getTH1()->GetXaxis()->GetXmin(), - meETLTrackEffPhiTotZneg->getTH1()->GetXaxis()->GetXmax()); - meEtlPhiEff_[1] = ibook.book1D("EtlPhiEffZnegD2", - "Track Efficiency VS Phi (-Z, Second Disk);#phi [rad];Efficiency", + meEtlPhiEff_[0] = ibook.book1D("EtlPhiEffZneg", + "Track Efficiency VS Phi (-Z);#phi [rad];Efficiency", meETLTrackEffPhiTotZneg->getNbinsX(), meETLTrackEffPhiTotZneg->getTH1()->GetXaxis()->GetXmin(), meETLTrackEffPhiTotZneg->getTH1()->GetXaxis()->GetXmax()); - meEtlPtEff_[0] = ibook.book1D("EtlPtEffZnegD1", - "Track Efficiency VS Pt (-Z, Single(topo1D)/First(topo2D) Disk);Pt [GeV];Efficiency", - meETLTrackEffPtTotZneg->getNbinsX(), - meETLTrackEffPtTotZneg->getTH1()->GetXaxis()->GetXmin(), - meETLTrackEffPtTotZneg->getTH1()->GetXaxis()->GetXmax()); - meEtlPtEff_[1] = ibook.book1D("EtlPtEffZnegD2", - "Track Efficiency VS Pt (-Z, Second Disk);Pt [GeV];Efficiency", + meEtlPtEff_[0] = ibook.book1D("EtlPtEffZneg", + "Track Efficiency VS Pt (-Z);Pt [GeV];Efficiency", meETLTrackEffPtTotZneg->getNbinsX(), meETLTrackEffPtTotZneg->getTH1()->GetXaxis()->GetXmin(), meETLTrackEffPtTotZneg->getTH1()->GetXaxis()->GetXmax()); - meEtlEtaEff_[2] = ibook.book1D("EtlEtaEffZposD1", - " Track Efficiency VS Eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta;Efficiency", + meEtlEtaEff_[1] = ibook.book1D("EtlEtaEffZpos", + " Track Efficiency VS Eta (+Z);#eta;Efficiency", meETLTrackEffEtaTotZpos->getNbinsX(), meETLTrackEffEtaTotZpos->getTH1()->GetXaxis()->GetXmin(), meETLTrackEffEtaTotZpos->getTH1()->GetXaxis()->GetXmax()); - meEtlEtaEff_[3] = ibook.book1D("EtlEtaEffZposD2", - " Track Efficiency VS Eta (+Z, Second Disk);#eta;Efficiency", - meETLTrackEffEtaTotZpos->getNbinsX(), - meETLTrackEffEtaTotZpos->getTH1()->GetXaxis()->GetXmin(), - meETLTrackEffEtaTotZpos->getTH1()->GetXaxis()->GetXmax()); - meEtlPhiEff_[2] = - ibook.book1D("EtlPhiEffZposD1", - "Track Efficiency VS Phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi [rad];Efficiency", - meETLTrackEffPhiTotZpos->getNbinsX(), - meETLTrackEffPhiTotZpos->getTH1()->GetXaxis()->GetXmin(), - meETLTrackEffPhiTotZpos->getTH1()->GetXaxis()->GetXmax()); - meEtlPhiEff_[3] = ibook.book1D("EtlPhiEffZposD2", - "Track Efficiency VS Phi (+Z, Second Disk);#phi [rad];Efficiency", + meEtlPhiEff_[1] = ibook.book1D("EtlPhiEffZpos", + "Track Efficiency VS Phi (+Z);#phi [rad];Efficiency", meETLTrackEffPhiTotZpos->getNbinsX(), meETLTrackEffPhiTotZpos->getTH1()->GetXaxis()->GetXmin(), meETLTrackEffPhiTotZpos->getTH1()->GetXaxis()->GetXmax()); - meEtlPtEff_[2] = ibook.book1D("EtlPtEffZposD1", - "Track Efficiency VS Pt (+Z, Single(topo1D)/First(topo2D) Disk);Pt [GeV];Efficiency", - meETLTrackEffPtTotZpos->getNbinsX(), - meETLTrackEffPtTotZpos->getTH1()->GetXaxis()->GetXmin(), - meETLTrackEffPtTotZpos->getTH1()->GetXaxis()->GetXmax()); - meEtlPtEff_[3] = ibook.book1D("EtlPtEffZposD2", - "Track Efficiency VS Pt (+Z, Second Disk);Pt [GeV];Efficiency", + meEtlPtEff_[1] = ibook.book1D("EtlPtEffZpos", + "Track Efficiency VS Pt (+Z);Pt [GeV];Efficiency", meETLTrackEffPtTotZpos->getNbinsX(), meETLTrackEffPtTotZpos->getTH1()->GetXaxis()->GetXmin(), meETLTrackEffPtTotZpos->getTH1()->GetXaxis()->GetXmax()); + meBtlEtaEff_->getTH1()->SetMinimum(0.); meBtlPhiEff_->getTH1()->SetMinimum(0.); meBtlPtEff_->getTH1()->SetMinimum(0.); - for (int i = 0; i < 4; i++) { + for (int i = 0; i < 2; i++) { meEtlEtaEff_[i]->getTH1()->SetMinimum(0.); meEtlPhiEff_[i]->getTH1()->SetMinimum(0.); meEtlPtEff_[i]->getTH1()->SetMinimum(0.); @@ -204,10 +165,10 @@ void MtdGlobalRecoHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGett } // --- Calculate efficiency ETL for (int ibin = 1; ibin <= meETLTrackEffEtaTotZneg->getNbinsX(); ibin++) { - double eff = meETLTrackEffEtaMtdZnegD1->getBinContent(ibin) / meETLTrackEffEtaTotZneg->getBinContent(ibin); + double eff = meETLTrackEffEtaMtdZneg->getBinContent(ibin) / meETLTrackEffEtaTotZneg->getBinContent(ibin); double bin_err = - sqrt((meETLTrackEffEtaMtdZnegD1->getBinContent(ibin) * - (meETLTrackEffEtaTotZneg->getBinContent(ibin) - meETLTrackEffEtaMtdZnegD1->getBinContent(ibin))) / + sqrt((meETLTrackEffEtaMtdZneg->getBinContent(ibin) * + (meETLTrackEffEtaTotZneg->getBinContent(ibin) - meETLTrackEffEtaMtdZneg->getBinContent(ibin))) / pow(meETLTrackEffEtaTotZneg->getBinContent(ibin), 3)); if (meETLTrackEffEtaTotZneg->getBinContent(ibin) == 0) { eff = 0; @@ -217,53 +178,25 @@ void MtdGlobalRecoHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGett meEtlEtaEff_[0]->setBinError(ibin, bin_err); } - for (int ibin = 1; ibin <= meETLTrackEffEtaTotZneg->getNbinsX(); ibin++) { - double eff = meETLTrackEffEtaMtdZnegD2->getBinContent(ibin) / meETLTrackEffEtaTotZneg->getBinContent(ibin); - double bin_err = - sqrt((meETLTrackEffEtaMtdZnegD2->getBinContent(ibin) * - (meETLTrackEffEtaTotZneg->getBinContent(ibin) - meETLTrackEffEtaMtdZnegD2->getBinContent(ibin))) / - pow(meETLTrackEffEtaTotZneg->getBinContent(ibin), 3)); - if (meETLTrackEffEtaTotZneg->getBinContent(ibin) == 0) { - eff = 0; - bin_err = 0; - } - meEtlEtaEff_[1]->setBinContent(ibin, eff); - meEtlEtaEff_[1]->setBinError(ibin, bin_err); - } - - for (int ibin = 1; ibin <= meETLTrackEffEtaTotZpos->getNbinsX(); ibin++) { - double eff = meETLTrackEffEtaMtdZposD1->getBinContent(ibin) / meETLTrackEffEtaTotZpos->getBinContent(ibin); - double bin_err = - sqrt((meETLTrackEffEtaMtdZposD1->getBinContent(ibin) * - (meETLTrackEffEtaTotZpos->getBinContent(ibin) - meETLTrackEffEtaMtdZposD1->getBinContent(ibin))) / - pow(meETLTrackEffEtaTotZpos->getBinContent(ibin), 3)); - if (meETLTrackEffEtaTotZpos->getBinContent(ibin) == 0) { - eff = 0; - bin_err = 0; - } - meEtlEtaEff_[2]->setBinContent(ibin, eff); - meEtlEtaEff_[2]->setBinError(ibin, bin_err); - } - for (int ibin = 1; ibin <= meETLTrackEffEtaTotZpos->getNbinsX(); ibin++) { - double eff = meETLTrackEffEtaMtdZposD2->getBinContent(ibin) / meETLTrackEffEtaTotZpos->getBinContent(ibin); + double eff = meETLTrackEffEtaMtdZpos->getBinContent(ibin) / meETLTrackEffEtaTotZpos->getBinContent(ibin); double bin_err = - sqrt((meETLTrackEffEtaMtdZposD2->getBinContent(ibin) * - (meETLTrackEffEtaTotZpos->getBinContent(ibin) - meETLTrackEffEtaMtdZposD2->getBinContent(ibin))) / + sqrt((meETLTrackEffEtaMtdZpos->getBinContent(ibin) * + (meETLTrackEffEtaTotZpos->getBinContent(ibin) - meETLTrackEffEtaMtdZpos->getBinContent(ibin))) / pow(meETLTrackEffEtaTotZpos->getBinContent(ibin), 3)); if (meETLTrackEffEtaTotZpos->getBinContent(ibin) == 0) { eff = 0; bin_err = 0; } - meEtlEtaEff_[3]->setBinContent(ibin, eff); - meEtlEtaEff_[3]->setBinError(ibin, bin_err); + meEtlEtaEff_[1]->setBinContent(ibin, eff); + meEtlEtaEff_[1]->setBinError(ibin, bin_err); } for (int ibin = 1; ibin <= meETLTrackEffPhiTotZneg->getNbinsX(); ibin++) { - double eff = meETLTrackEffPhiMtdZnegD1->getBinContent(ibin) / meETLTrackEffPhiTotZneg->getBinContent(ibin); + double eff = meETLTrackEffPhiMtdZneg->getBinContent(ibin) / meETLTrackEffPhiTotZneg->getBinContent(ibin); double bin_err = - sqrt((meETLTrackEffPhiMtdZnegD1->getBinContent(ibin) * - (meETLTrackEffPhiTotZneg->getBinContent(ibin) - meETLTrackEffPhiMtdZnegD1->getBinContent(ibin))) / + sqrt((meETLTrackEffPhiMtdZneg->getBinContent(ibin) * + (meETLTrackEffPhiTotZneg->getBinContent(ibin) - meETLTrackEffPhiMtdZneg->getBinContent(ibin))) / pow(meETLTrackEffPhiTotZneg->getBinContent(ibin), 3)); if (meETLTrackEffPhiTotZneg->getBinContent(ibin) == 0) { eff = 0; @@ -273,53 +206,25 @@ void MtdGlobalRecoHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGett meEtlPhiEff_[0]->setBinError(ibin, bin_err); } - for (int ibin = 1; ibin <= meETLTrackEffPhiTotZneg->getNbinsX(); ibin++) { - double eff = meETLTrackEffPhiMtdZnegD2->getBinContent(ibin) / meETLTrackEffPhiTotZneg->getBinContent(ibin); - double bin_err = - sqrt((meETLTrackEffPhiMtdZnegD2->getBinContent(ibin) * - (meETLTrackEffPhiTotZneg->getBinContent(ibin) - meETLTrackEffPhiMtdZnegD2->getBinContent(ibin))) / - pow(meETLTrackEffPhiTotZneg->getBinContent(ibin), 3)); - if (meETLTrackEffPhiTotZneg->getBinContent(ibin) == 0) { - eff = 0; - bin_err = 0; - } - meEtlPhiEff_[1]->setBinContent(ibin, eff); - meEtlPhiEff_[1]->setBinError(ibin, bin_err); - } - - for (int ibin = 1; ibin <= meETLTrackEffPhiTotZpos->getNbinsX(); ibin++) { - double eff = meETLTrackEffPhiMtdZposD1->getBinContent(ibin) / meETLTrackEffPhiTotZpos->getBinContent(ibin); - double bin_err = - sqrt((meETLTrackEffPhiMtdZposD1->getBinContent(ibin) * - (meETLTrackEffPhiTotZpos->getBinContent(ibin) - meETLTrackEffPhiMtdZposD1->getBinContent(ibin))) / - pow(meETLTrackEffPhiTotZpos->getBinContent(ibin), 3)); - if (meETLTrackEffPhiTotZpos->getBinContent(ibin) == 0) { - eff = 0; - bin_err = 0; - } - meEtlPhiEff_[2]->setBinContent(ibin, eff); - meEtlPhiEff_[2]->setBinError(ibin, bin_err); - } - for (int ibin = 1; ibin <= meETLTrackEffPhiTotZpos->getNbinsX(); ibin++) { - double eff = meETLTrackEffPhiMtdZposD2->getBinContent(ibin) / meETLTrackEffPhiTotZpos->getBinContent(ibin); + double eff = meETLTrackEffPhiMtdZpos->getBinContent(ibin) / meETLTrackEffPhiTotZpos->getBinContent(ibin); double bin_err = - sqrt((meETLTrackEffPhiMtdZposD2->getBinContent(ibin) * - (meETLTrackEffPhiTotZpos->getBinContent(ibin) - meETLTrackEffPhiMtdZposD2->getBinContent(ibin))) / + sqrt((meETLTrackEffPhiMtdZpos->getBinContent(ibin) * + (meETLTrackEffPhiTotZpos->getBinContent(ibin) - meETLTrackEffPhiMtdZpos->getBinContent(ibin))) / pow(meETLTrackEffPhiTotZpos->getBinContent(ibin), 3)); if (meETLTrackEffPhiTotZpos->getBinContent(ibin) == 0) { eff = 0; bin_err = 0; } - meEtlPhiEff_[3]->setBinContent(ibin, eff); - meEtlPhiEff_[3]->setBinError(ibin, bin_err); + meEtlPhiEff_[1]->setBinContent(ibin, eff); + meEtlPhiEff_[1]->setBinError(ibin, bin_err); } for (int ibin = 1; ibin <= meETLTrackEffPtTotZneg->getNbinsX(); ibin++) { - double eff = meETLTrackEffPtMtdZnegD1->getBinContent(ibin) / meETLTrackEffPtTotZneg->getBinContent(ibin); + double eff = meETLTrackEffPtMtdZneg->getBinContent(ibin) / meETLTrackEffPtTotZneg->getBinContent(ibin); double bin_err = - sqrt((meETLTrackEffPtMtdZnegD1->getBinContent(ibin) * - (meETLTrackEffPtTotZneg->getBinContent(ibin) - meETLTrackEffPtMtdZnegD1->getBinContent(ibin))) / + sqrt((meETLTrackEffPtMtdZneg->getBinContent(ibin) * + (meETLTrackEffPtTotZneg->getBinContent(ibin) - meETLTrackEffPtMtdZneg->getBinContent(ibin))) / pow(meETLTrackEffPtTotZneg->getBinContent(ibin), 3)); if (meETLTrackEffPtTotZneg->getBinContent(ibin) == 0) { eff = 0; @@ -329,46 +234,18 @@ void MtdGlobalRecoHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGett meEtlPtEff_[0]->setBinError(ibin, bin_err); } - for (int ibin = 1; ibin <= meETLTrackEffPtTotZneg->getNbinsX(); ibin++) { - double eff = meETLTrackEffPtMtdZnegD2->getBinContent(ibin) / meETLTrackEffPtTotZneg->getBinContent(ibin); - double bin_err = - sqrt((meETLTrackEffPtMtdZnegD2->getBinContent(ibin) * - (meETLTrackEffPtTotZneg->getBinContent(ibin) - meETLTrackEffPtMtdZnegD2->getBinContent(ibin))) / - pow(meETLTrackEffPtTotZneg->getBinContent(ibin), 3)); - if (meETLTrackEffPtTotZneg->getBinContent(ibin) == 0) { - eff = 0; - bin_err = 0; - } - meEtlPtEff_[1]->setBinContent(ibin, eff); - meEtlPtEff_[1]->setBinError(ibin, bin_err); - } - for (int ibin = 1; ibin <= meETLTrackEffPtTotZpos->getNbinsX(); ibin++) { - double eff = meETLTrackEffPtMtdZposD1->getBinContent(ibin) / meETLTrackEffPtTotZpos->getBinContent(ibin); + double eff = meETLTrackEffPtMtdZpos->getBinContent(ibin) / meETLTrackEffPtTotZpos->getBinContent(ibin); double bin_err = - sqrt((meETLTrackEffPtMtdZposD1->getBinContent(ibin) * - (meETLTrackEffPtTotZpos->getBinContent(ibin) - meETLTrackEffPtMtdZposD1->getBinContent(ibin))) / + sqrt((meETLTrackEffPtMtdZpos->getBinContent(ibin) * + (meETLTrackEffPtTotZpos->getBinContent(ibin) - meETLTrackEffPtMtdZpos->getBinContent(ibin))) / pow(meETLTrackEffPtTotZpos->getBinContent(ibin), 3)); if (meETLTrackEffPtTotZpos->getBinContent(ibin) == 0) { eff = 0; bin_err = 0; } - meEtlPtEff_[2]->setBinContent(ibin, eff); - meEtlPtEff_[2]->setBinError(ibin, bin_err); - } - - for (int ibin = 1; ibin <= meETLTrackEffPtTotZpos->getNbinsX(); ibin++) { - double eff = meETLTrackEffPtMtdZposD2->getBinContent(ibin) / meETLTrackEffPtTotZpos->getBinContent(ibin); - double bin_err = - sqrt((meETLTrackEffPtMtdZposD2->getBinContent(ibin) * - (meETLTrackEffPtTotZpos->getBinContent(ibin) - meETLTrackEffPtMtdZposD2->getBinContent(ibin))) / - pow(meETLTrackEffPtTotZpos->getBinContent(ibin), 3)); - if (meETLTrackEffPtTotZpos->getBinContent(ibin) == 0) { - eff = 0; - bin_err = 0; - } - meEtlPtEff_[3]->setBinContent(ibin, eff); - meEtlPtEff_[3]->setBinError(ibin, bin_err); + meEtlPtEff_[1]->setBinContent(ibin, eff); + meEtlPtEff_[1]->setBinError(ibin, bin_err); } } diff --git a/Validation/MtdValidation/plugins/MtdGlobalRecoValidation.cc b/Validation/MtdValidation/plugins/MtdGlobalRecoValidation.cc index bb70170bdbd3e..62675608c0b9f 100644 --- a/Validation/MtdValidation/plugins/MtdGlobalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/MtdGlobalRecoValidation.cc @@ -65,9 +65,9 @@ class MtdGlobalRecoValidation : public DQMEDAnalyzer { MonitorElement* meETLTrackEffEtaTot_[2]; MonitorElement* meETLTrackEffPhiTot_[2]; MonitorElement* meETLTrackEffPtTot_[2]; - MonitorElement* meETLTrackEffEtaMtd_[4]; - MonitorElement* meETLTrackEffPhiMtd_[4]; - MonitorElement* meETLTrackEffPtMtd_[4]; + MonitorElement* meETLTrackEffEtaMtd_[2]; + MonitorElement* meETLTrackEffPhiMtd_[2]; + MonitorElement* meETLTrackEffPtMtd_[2]; MonitorElement* meTrackNumHits_; @@ -172,18 +172,22 @@ void MtdGlobalRecoValidation::analyze(const edm::Event& iEvent, const edm::Event if (topo2Dis) { if ((ETLHit.zside() == -1) && (ETLHit.nDisc() == 1)) { MTDEtlZnegD1 = true; + meETLTrackRPTime_[0]->Fill(track.t0()); numMTDEtlvalidhits++; } if ((ETLHit.zside() == -1) && (ETLHit.nDisc() == 2)) { MTDEtlZnegD2 = true; + meETLTrackRPTime_[1]->Fill(track.t0()); numMTDEtlvalidhits++; } if ((ETLHit.zside() == 1) && (ETLHit.nDisc() == 1)) { MTDEtlZposD1 = true; + meETLTrackRPTime_[2]->Fill(track.t0()); numMTDEtlvalidhits++; } if ((ETLHit.zside() == 1) && (ETLHit.nDisc() == 2)) { MTDEtlZposD2 = true; + meETLTrackRPTime_[3]->Fill(track.t0()); numMTDEtlvalidhits++; } } @@ -191,10 +195,12 @@ void MtdGlobalRecoValidation::analyze(const edm::Event& iEvent, const edm::Event if (topo1Dis) { if (ETLHit.zside() == -1) { MTDEtlZnegD1 = true; + meETLTrackRPTime_[0]->Fill(track.t0()); numMTDEtlvalidhits++; } if (ETLHit.zside() == 1) { MTDEtlZposD1 = true; + meETLTrackRPTime_[2]->Fill(track.t0()); numMTDEtlvalidhits++; } } @@ -204,31 +210,17 @@ void MtdGlobalRecoValidation::analyze(const edm::Event& iEvent, const edm::Event // --- keeping only tracks with last hit in MTD --- if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { - if (MTDEtlZnegD1 == true) { + if ((MTDEtlZnegD1 == true) || (MTDEtlZnegD2 == true)) { meETLTrackEffEtaMtd_[0]->Fill(track.eta()); meETLTrackEffPhiMtd_[0]->Fill(track.phi()); meETLTrackEffPtMtd_[0]->Fill(track.pt()); - meETLTrackRPTime_[0]->Fill(track.t0()); } - if (MTDEtlZnegD2 == true) { + } + if ((track.eta() > trackMinEta_) && (track.eta() < trackMaxEta_)) { + if ((MTDEtlZposD1 == true) || (MTDEtlZposD2 == true)) { meETLTrackEffEtaMtd_[1]->Fill(track.eta()); meETLTrackEffPhiMtd_[1]->Fill(track.phi()); meETLTrackEffPtMtd_[1]->Fill(track.pt()); - meETLTrackRPTime_[1]->Fill(track.t0()); - } - } - if ((track.eta() > trackMinEta_) && (track.eta() < trackMaxEta_)) { - if (MTDEtlZposD1 == true) { - meETLTrackEffEtaMtd_[2]->Fill(track.eta()); - meETLTrackEffPhiMtd_[2]->Fill(track.phi()); - meETLTrackEffPtMtd_[2]->Fill(track.pt()); - meETLTrackRPTime_[2]->Fill(track.t0()); - } - if (MTDEtlZposD2 == true) { - meETLTrackEffEtaMtd_[3]->Fill(track.eta()); - meETLTrackEffPhiMtd_[3]->Fill(track.phi()); - meETLTrackEffPtMtd_[3]->Fill(track.pt()); - meETLTrackRPTime_[3]->Fill(track.t0()); } } } @@ -264,7 +256,7 @@ void MtdGlobalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, ibook.book1D("TrackBTLEffPhiMtd", "Track efficiency vs phi (Mtd);#phi_{RECO} [rad]", 100, -3.2, 3.2); meBTLTrackEffPtMtd_ = ibook.book1D("TrackBTLEffPtMtd", "Track efficiency vs pt (Mtd);pt_{RECO} [GeV]", 50, 0, 10); meETLTrackRPTime_[0] = - ibook.book1D("TrackETLRPTimeZnegD1", "Track t0 with respect to R.P. (-Z, Firstl Disk);t0 [ns]", 100, -1, 3); + ibook.book1D("TrackETLRPTimeZnegD1", "Track t0 with respect to R.P. (-Z, First Disk);t0 [ns]", 100, -1, 3); meETLTrackRPTime_[1] = ibook.book1D("TrackETLRPTimeZnegD2", "Track t0 with respect to R.P. (-Z, Second Disk);t0 [ns]", 100, -1, 3); meETLTrackRPTime_[2] = @@ -284,53 +276,17 @@ void MtdGlobalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meETLTrackEffPtTot_[1] = ibook.book1D("TrackETLEffPtTotZpos", "Track efficiency vs pt (Tot) (+Z);pt_{RECO} [GeV]", 50, 0, 10); meETLTrackEffEtaMtd_[0] = - ibook.book1D("TrackETLEffEtaMtdZnegD1", - "Track efficiency vs eta (Mtd) (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", - 100, - -3.2, - -1.4); - meETLTrackEffEtaMtd_[1] = ibook.book1D( - "TrackETLEffEtaMtdZnegD2", "Track efficiency vs eta (Mtd) (-Z, Second Disk);#eta_{RECO}", 100, -3.2, -1.4); - meETLTrackEffEtaMtd_[2] = - ibook.book1D("TrackETLEffEtaMtdZposD1", - "Track efficiency vs eta (Mtd) (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", - 100, - 1.4, - 3.2); - meETLTrackEffEtaMtd_[3] = ibook.book1D( - "TrackETLEffEtaMtdZposD2", "Track efficiency vs eta (Mtd) (+Z, Second Disk);#eta_{RECO}", 100, 1.4, 3.2); + ibook.book1D("TrackETLEffEtaMtdZneg", "Track efficiency vs eta (Mtd) (-Z);#eta_{RECO}", 100, -3.2, -1.4); + meETLTrackEffEtaMtd_[1] = + ibook.book1D("TrackETLEffEtaMtdZpos", "Track efficiency vs eta (Mtd) (+Z);#eta_{RECO}", 100, 1.4, 3.2); meETLTrackEffPhiMtd_[0] = - ibook.book1D("TrackETLEffPhiMtdZnegD1", - "Track efficiency vs phi (Mtd) (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", - 100, - -3.2, - 3.2); - meETLTrackEffPhiMtd_[1] = ibook.book1D( - "TrackETLEffPhiMtdZnegD2", "Track efficiency vs phi (Mtd) (-Z, Second Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2); - meETLTrackEffPhiMtd_[2] = - ibook.book1D("TrackETLEffPhiMtdZposD1", - "Track efficiency vs phi (Mtd) (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", - 100, - -3.2, - 3.2); - meETLTrackEffPhiMtd_[3] = ibook.book1D( - "TrackETLEffPhiMtdZposD2", "Track efficiency vs phi (Mtd) (+Z, Second Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2); + ibook.book1D("TrackETLEffPhiMtdZneg", "Track efficiency vs phi (Mtd) (-Z);#phi_{RECO} [rad]", 100, -3.2, 3.2); + meETLTrackEffPhiMtd_[1] = + ibook.book1D("TrackETLEffPhiMtdZpos", "Track efficiency vs phi (Mtd) (+Z);#phi_{RECO} [rad]", 100, -3.2, 3.2); meETLTrackEffPtMtd_[0] = - ibook.book1D("TrackETLEffPtMtdZnegD1", - "Track efficiency vs pt (Mtd) (-Z, Single(topo1D)/First(topo2D) Disk);pt_{RECO} [GeV]", - 50, - 0, - 10); - meETLTrackEffPtMtd_[1] = ibook.book1D( - "TrackETLEffPtMtdZnegD2", "Track efficiency vs pt (Mtd) (-Z, Second Disk);pt_{RECO} [GeV]", 50, 0, 10); - meETLTrackEffPtMtd_[2] = - ibook.book1D("TrackETLEffPtMtdZposD1", - "Track efficiency vs pt (Mtd) (+Z, Single(topo1D)/First(topo2D) Disk);pt_{RECO} [GeV]", - 50, - 0, - 10); - meETLTrackEffPtMtd_[3] = ibook.book1D( - "TrackETLEffPtMtdZposD2", "Track efficiency vs pt (Mtd) (+Z, Second Disk);pt_{RECO} [GeV]", 50, 0, 10); + ibook.book1D("TrackETLEffPtMtdZneg", "Track efficiency vs pt (Mtd) (-Z);pt_{RECO} [GeV]", 50, 0, 10); + meETLTrackEffPtMtd_[1] = + ibook.book1D("TrackETLEffPtMtdZpos", "Track efficiency vs pt (Mtd) (+Z);pt_{RECO} [GeV]", 50, 0, 10); meTrackNumHits_ = ibook.book1D("TrackNumHits", "Number of valid MTD hits per track ; Number of hits", 10, -5, 5); meVerZ_ = ibook.book1D("VerZ", "RECO Vertex Z;Z_{RECO} [cm]", 180, -18, 18); meVerTime_ = ibook.book1D("VerTime", "RECO Vertex Time;t0 [ns]", 100, -1, 1); diff --git a/Validation/MuonCSCDigis/interface/CSCALCTDigiValidation.h b/Validation/MuonCSCDigis/interface/CSCALCTDigiValidation.h index 91c0874746e60..32ad4df2f178e 100644 --- a/Validation/MuonCSCDigis/interface/CSCALCTDigiValidation.h +++ b/Validation/MuonCSCDigis/interface/CSCALCTDigiValidation.h @@ -10,16 +10,16 @@ class CSCALCTDigiValidation : public CSCBaseValidation { public: - CSCALCTDigiValidation(const edm::InputTag &inputTag, edm::ConsumesCollector &&iC); + CSCALCTDigiValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC); ~CSCALCTDigiValidation() override; void bookHistograms(DQMStore::IBooker &); void analyze(const edm::Event &, const edm::EventSetup &) override; private: edm::EDGetTokenT<CSCALCTDigiCollection> alcts_Token_; - + edm::InputTag inputTag_; MonitorElement *theTimeBinPlots[10]; - MonitorElement *theNDigisPerLayerPlots[10]; + MonitorElement *theNDigisPerChamberPlots[10]; MonitorElement *theNDigisPerEventPlot; }; diff --git a/Validation/MuonCSCDigis/interface/CSCBaseValidation.h b/Validation/MuonCSCDigis/interface/CSCBaseValidation.h index d5c4e0a84b42c..077e262f7cda5 100644 --- a/Validation/MuonCSCDigis/interface/CSCBaseValidation.h +++ b/Validation/MuonCSCDigis/interface/CSCBaseValidation.h @@ -16,15 +16,15 @@ class CSCBaseValidation { typedef dqm::legacy::DQMStore DQMStore; typedef dqm::legacy::MonitorElement MonitorElement; - CSCBaseValidation(const edm::InputTag &inputTag); + CSCBaseValidation(const edm::ParameterSet &ps); virtual ~CSCBaseValidation() {} void setGeometry(const CSCGeometry *geom) { theCSCGeometry = geom; } void setSimHitMap(const PSimHitMap *simHitMap) { theSimHitMap = simHitMap; } virtual void analyze(const edm::Event &e, const edm::EventSetup &eventSetup) = 0; protected: + bool doSim_; const CSCLayer *findLayer(int detId) const; - edm::InputTag theInputTag; const PSimHitMap *theSimHitMap; const CSCGeometry *theCSCGeometry; }; diff --git a/Validation/MuonCSCDigis/interface/CSCCLCTDigiValidation.h b/Validation/MuonCSCDigis/interface/CSCCLCTDigiValidation.h index b4818338817f7..15c78c8a0af08 100644 --- a/Validation/MuonCSCDigis/interface/CSCCLCTDigiValidation.h +++ b/Validation/MuonCSCDigis/interface/CSCCLCTDigiValidation.h @@ -10,16 +10,16 @@ class CSCCLCTDigiValidation : public CSCBaseValidation { public: - CSCCLCTDigiValidation(const edm::InputTag &inputTag, edm::ConsumesCollector &&iC); + CSCCLCTDigiValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC); ~CSCCLCTDigiValidation() override; void bookHistograms(DQMStore::IBooker &); void analyze(const edm::Event &, const edm::EventSetup &) override; private: edm::EDGetTokenT<CSCCLCTDigiCollection> clcts_Token_; - + edm::InputTag inputTag_; MonitorElement *theTimeBinPlots[10]; - MonitorElement *theNDigisPerLayerPlots[10]; + MonitorElement *theNDigisPerChamberPlots[10]; MonitorElement *theNDigisPerEventPlot; }; diff --git a/Validation/MuonCSCDigis/interface/CSCComparatorDigiValidation.h b/Validation/MuonCSCDigis/interface/CSCComparatorDigiValidation.h index c88d79cc53a25..e33f17b0e88bd 100644 --- a/Validation/MuonCSCDigis/interface/CSCComparatorDigiValidation.h +++ b/Validation/MuonCSCDigis/interface/CSCComparatorDigiValidation.h @@ -11,16 +11,16 @@ class CSCComparatorDigiValidation : public CSCBaseValidation { public: - CSCComparatorDigiValidation(const edm::InputTag &inputTag, - const edm::InputTag &stripDigiInputTag, - edm::ConsumesCollector &&iC); + CSCComparatorDigiValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC); ~CSCComparatorDigiValidation() override; void bookHistograms(DQMStore::IBooker &); void analyze(const edm::Event &, const edm::EventSetup &) override; private: - edm::EDGetTokenT<CSCStripDigiCollection> theStripDigi_Token_; + edm::EDGetTokenT<CSCStripDigiCollection> strips_Token_; edm::EDGetTokenT<CSCComparatorDigiCollection> comparators_Token_; + edm::InputTag inputTagStrip_; + edm::InputTag inputTagComp_; MonitorElement *theTimeBinPlots[10]; MonitorElement *theNDigisPerLayerPlots[10]; diff --git a/Validation/MuonCSCDigis/interface/CSCStripDigiValidation.h b/Validation/MuonCSCDigis/interface/CSCStripDigiValidation.h index eb5504bb8c1e6..379933cdd2b8a 100644 --- a/Validation/MuonCSCDigis/interface/CSCStripDigiValidation.h +++ b/Validation/MuonCSCDigis/interface/CSCStripDigiValidation.h @@ -10,9 +10,10 @@ class CSCStripDigiValidation : public CSCBaseValidation { public: - CSCStripDigiValidation(const edm::InputTag &inputTag, edm::ConsumesCollector &&iC); + CSCStripDigiValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC); ~CSCStripDigiValidation() override; - void bookHistograms(DQMStore::IBooker &, bool doSim); + + void bookHistograms(DQMStore::IBooker &); void analyze(const edm::Event &e, const edm::EventSetup &) override; void setGeometry(const CSCGeometry *geom) { theCSCGeometry = geom; } void plotResolution(const PSimHit &hit, int strip, const CSCLayer *layer, int chamberType); @@ -22,6 +23,7 @@ class CSCStripDigiValidation : public CSCBaseValidation { void fillSignalPlots(const CSCStripDigi &digi); edm::EDGetTokenT<CSCStripDigiCollection> strips_Token_; + edm::InputTag inputTag_; float thePedestalSum; float thePedestalCovarianceSum; int thePedestalCount; diff --git a/Validation/MuonCSCDigis/interface/CSCStubEfficiencyValidation.h b/Validation/MuonCSCDigis/interface/CSCStubEfficiencyValidation.h new file mode 100644 index 0000000000000..085a5a812407d --- /dev/null +++ b/Validation/MuonCSCDigis/interface/CSCStubEfficiencyValidation.h @@ -0,0 +1,62 @@ +#ifndef Validation_MuonCSCDigis_CSCStubEfficiencyValidation_H +#define Validation_MuonCSCDigis_CSCStubEfficiencyValidation_H + +#include "FWCore/Framework/interface/ConsumesCollector.h" + +#include "DQMServices/Core/interface/DQMStore.h" +#include "DataFormats/CSCDigi/interface/CSCALCTDigi.h" +#include "DataFormats/CSCDigi/interface/CSCALCTDigiCollection.h" +#include "DataFormats/CSCDigi/interface/CSCCLCTDigi.h" +#include "DataFormats/CSCDigi/interface/CSCCLCTDigiCollection.h" +#include "DataFormats/CSCDigi/interface/CSCCorrelatedLCTDigi.h" +#include "DataFormats/CSCDigi/interface/CSCCorrelatedLCTDigiCollection.h" +#include "Validation/MuonCSCDigis/interface/CSCBaseValidation.h" +#include "Validation/MuonCSCDigis/interface/CSCStubMatcher.h" + +#include "Validation/MuonCSCDigis/interface/CSCBaseValidation.h" + +#include <map> +#include <string> +#include <tuple> + +class CSCStubEfficiencyValidation : public CSCBaseValidation { +public: + CSCStubEfficiencyValidation(const edm::ParameterSet &pset, edm::ConsumesCollector &&iC); + ~CSCStubEfficiencyValidation() override; + + void bookHistograms(DQMStore::IBooker &); + void analyze(const edm::Event &, const edm::EventSetup &) override; + + // access to the matcher + std::shared_ptr<CSCStubMatcher> cscStubMatcher() { return cscStubMatcher_; } + void setCSCStubMatcher(std::shared_ptr<CSCStubMatcher> s) { cscStubMatcher_ = s; } + +private: + bool isSimTrackGood(const SimTrack &t); + + edm::EDGetTokenT<CSCALCTDigiCollection> alcts_Token_; + edm::EDGetTokenT<CSCCLCTDigiCollection> clcts_Token_; + edm::EDGetTokenT<CSCCorrelatedLCTDigiCollection> lcts_Token_; + edm::InputTag inputTag_; + + std::shared_ptr<CSCStubMatcher> cscStubMatcher_; + + // efficiency vs eta for each CSC TP + MonitorElement *etaALCTNum[10]; + MonitorElement *etaALCTDenom[10]; + MonitorElement *etaCLCTNum[10]; + MonitorElement *etaCLCTDenom[10]; + MonitorElement *etaLCTNum[10]; + MonitorElement *etaLCTDenom[10]; + + edm::EDGetTokenT<edm::SimVertexContainer> simVertexInput_; + edm::EDGetTokenT<edm::SimTrackContainer> simTrackInput_; + double simTrackMinPt_; + double simTrackMinEta_; + double simTrackMaxEta_; + + std::vector<double> etaMins_; + std::vector<double> etaMaxs_; +}; + +#endif diff --git a/Validation/MuonCSCDigis/interface/CSCStubMatcher.h b/Validation/MuonCSCDigis/interface/CSCStubMatcher.h index d5acd5b43d75d..4ee96f71b8ec1 100644 --- a/Validation/MuonCSCDigis/interface/CSCStubMatcher.h +++ b/Validation/MuonCSCDigis/interface/CSCStubMatcher.h @@ -124,6 +124,7 @@ class CSCStubMatcher { std::set<unsigned int> selectDetIds(D&, int) const; bool addGhostLCTs_; + bool useGEMs_; int minNHitsChamber_; int minNHitsChamberALCT_; diff --git a/Validation/MuonCSCDigis/interface/CSCWireDigiValidation.h b/Validation/MuonCSCDigis/interface/CSCWireDigiValidation.h index 8a9c21e962abe..5bf34949ef454 100644 --- a/Validation/MuonCSCDigis/interface/CSCWireDigiValidation.h +++ b/Validation/MuonCSCDigis/interface/CSCWireDigiValidation.h @@ -10,7 +10,7 @@ class CSCWireDigiValidation : public CSCBaseValidation { public: - CSCWireDigiValidation(const edm::InputTag &inputTag, edm::ConsumesCollector &&iC, bool doSim); + CSCWireDigiValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC); ~CSCWireDigiValidation() override; void bookHistograms(DQMStore::IBooker &); void analyze(const edm::Event &, const edm::EventSetup &) override; @@ -18,7 +18,7 @@ class CSCWireDigiValidation : public CSCBaseValidation { private: edm::EDGetTokenT<CSCWireDigiCollection> wires_Token_; - bool doSim_; + edm::InputTag inputTag_; MonitorElement *theTimeBinPlots[10]; MonitorElement *theNDigisPerLayerPlots[10]; MonitorElement *theResolutionPlots[10]; diff --git a/Validation/MuonCSCDigis/plugins/BuildFile.xml b/Validation/MuonCSCDigis/plugins/BuildFile.xml index 0e78857a52f4b..9ebe02322c4f6 100644 --- a/Validation/MuonCSCDigis/plugins/BuildFile.xml +++ b/Validation/MuonCSCDigis/plugins/BuildFile.xml @@ -1,5 +1,6 @@ <library file="*.cc" name="ValidationMuonCSCDigisPlugin"> <use name="FWCore/Framework"/> <use name="Validation/MuonCSCDigis"/> + <use name="Validation/MuonGEMHits"/> <flags EDM_PLUGIN="1"/> </library> diff --git a/Validation/MuonCSCDigis/plugins/CSCDigiValidation.cc b/Validation/MuonCSCDigis/plugins/CSCDigiValidation.cc index 05c0c1d10ef1e..e661a5892b6c5 100644 --- a/Validation/MuonCSCDigis/plugins/CSCDigiValidation.cc +++ b/Validation/MuonCSCDigis/plugins/CSCDigiValidation.cc @@ -5,6 +5,7 @@ #include "Validation/MuonCSCDigis/interface/CSCComparatorDigiValidation.h" #include "Validation/MuonCSCDigis/interface/CSCStripDigiValidation.h" #include "Validation/MuonCSCDigis/interface/CSCWireDigiValidation.h" +#include "Validation/MuonCSCDigis/interface/CSCStubEfficiencyValidation.h" #include <iostream> #include <memory> @@ -16,20 +17,17 @@ CSCDigiValidation::CSCDigiValidation(const edm::ParameterSet &ps) theWireDigiValidation(nullptr), theComparatorDigiValidation(nullptr), theALCTDigiValidation(nullptr), - theCLCTDigiValidation(nullptr) { - theStripDigiValidation = - std::make_unique<CSCStripDigiValidation>(ps.getParameter<edm::InputTag>("stripDigiTag"), consumesCollector()); - theWireDigiValidation = std::make_unique<CSCWireDigiValidation>( - ps.getParameter<edm::InputTag>("wireDigiTag"), consumesCollector(), doSim_); - theComparatorDigiValidation = - std::make_unique<CSCComparatorDigiValidation>(ps.getParameter<edm::InputTag>("comparatorDigiTag"), - ps.getParameter<edm::InputTag>("stripDigiTag"), - consumesCollector()); - theALCTDigiValidation = - std::make_unique<CSCALCTDigiValidation>(ps.getParameter<edm::InputTag>("alctDigiTag"), consumesCollector()); - theCLCTDigiValidation = - std::make_unique<CSCCLCTDigiValidation>(ps.getParameter<edm::InputTag>("clctDigiTag"), consumesCollector()); + theCLCTDigiValidation(nullptr), + theStubEfficiencyValidation(nullptr) { + // instantiatethe validation modules + theStripDigiValidation = std::make_unique<CSCStripDigiValidation>(ps, consumesCollector()); + theWireDigiValidation = std::make_unique<CSCWireDigiValidation>(ps, consumesCollector()); + theComparatorDigiValidation = std::make_unique<CSCComparatorDigiValidation>(ps, consumesCollector()); + theALCTDigiValidation = std::make_unique<CSCALCTDigiValidation>(ps, consumesCollector()); + theCLCTDigiValidation = std::make_unique<CSCCLCTDigiValidation>(ps, consumesCollector()); + theStubEfficiencyValidation = std::make_unique<CSCStubEfficiencyValidation>(ps, consumesCollector()); + // set the simhit map for resolution studies if (doSim_) { theStripDigiValidation->setSimHitMap(&theSimHitMap); theWireDigiValidation->setSimHitMap(&theSimHitMap); @@ -44,11 +42,12 @@ void CSCDigiValidation::bookHistograms(DQMStore::IBooker &iBooker, edm::Run const &iRun, edm::EventSetup const & /* iSetup */) { iBooker.setCurrentFolder("MuonCSCDigisV/CSCDigiTask"); - theStripDigiValidation->bookHistograms(iBooker, doSim_); + theStripDigiValidation->bookHistograms(iBooker); theWireDigiValidation->bookHistograms(iBooker); theComparatorDigiValidation->bookHistograms(iBooker); theALCTDigiValidation->bookHistograms(iBooker); theCLCTDigiValidation->bookHistograms(iBooker); + theStubEfficiencyValidation->bookHistograms(iBooker); } void CSCDigiValidation::analyze(const edm::Event &e, const edm::EventSetup &eventSetup) { @@ -62,10 +61,12 @@ void CSCDigiValidation::analyze(const edm::Event &e, const edm::EventSetup &even theComparatorDigiValidation->setGeometry(pGeom); theALCTDigiValidation->setGeometry(pGeom); theCLCTDigiValidation->setGeometry(pGeom); + theStubEfficiencyValidation->setGeometry(pGeom); theStripDigiValidation->analyze(e, eventSetup); theWireDigiValidation->analyze(e, eventSetup); theComparatorDigiValidation->analyze(e, eventSetup); theALCTDigiValidation->analyze(e, eventSetup); theCLCTDigiValidation->analyze(e, eventSetup); + theStubEfficiencyValidation->analyze(e, eventSetup); } diff --git a/Validation/MuonCSCDigis/plugins/CSCDigiValidation.h b/Validation/MuonCSCDigis/plugins/CSCDigiValidation.h index f8ceabef3daf7..9779ce9ce691e 100644 --- a/Validation/MuonCSCDigis/plugins/CSCDigiValidation.h +++ b/Validation/MuonCSCDigis/plugins/CSCDigiValidation.h @@ -18,6 +18,7 @@ class CSCWireDigiValidation; class CSCComparatorDigiValidation; class CSCALCTDigiValidation; class CSCCLCTDigiValidation; +class CSCStubEfficiencyValidation; class CSCDigiValidation : public DQMEDAnalyzer { public: @@ -31,12 +32,15 @@ class CSCDigiValidation : public DQMEDAnalyzer { PSimHitMap theSimHitMap; CSCGeometry *theCSCGeometry; + // validation modules std::unique_ptr<CSCStripDigiValidation> theStripDigiValidation; std::unique_ptr<CSCWireDigiValidation> theWireDigiValidation; std::unique_ptr<CSCComparatorDigiValidation> theComparatorDigiValidation; std::unique_ptr<CSCALCTDigiValidation> theALCTDigiValidation; std::unique_ptr<CSCCLCTDigiValidation> theCLCTDigiValidation; + std::unique_ptr<CSCStubEfficiencyValidation> theStubEfficiencyValidation; + // geometry edm::ESGetToken<CSCGeometry, MuonGeometryRecord> geomToken_; }; diff --git a/Validation/MuonCSCDigis/plugins/Module.cc b/Validation/MuonCSCDigis/plugins/Module.cc index 37644949e201a..6a775d69cfbe5 100644 --- a/Validation/MuonCSCDigis/plugins/Module.cc +++ b/Validation/MuonCSCDigis/plugins/Module.cc @@ -1,5 +1,5 @@ -#include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/PluginManager/interface/ModuleDef.h" +#include "FWCore/Framework/interface/MakerMacros.h" #include "Validation/MuonCSCDigis/plugins/CSCDigiValidation.h" DEFINE_FWK_MODULE(CSCDigiValidation); diff --git a/Validation/MuonCSCDigis/plugins/MuonCSCDigisHarvestor.cc b/Validation/MuonCSCDigis/plugins/MuonCSCDigisHarvestor.cc new file mode 100644 index 0000000000000..ab57c65447c0a --- /dev/null +++ b/Validation/MuonCSCDigis/plugins/MuonCSCDigisHarvestor.cc @@ -0,0 +1,50 @@ +#ifndef Validation_MuonCSCDigis_MuonCSCDigisHarvestor_h +#define Validation_MuonCSCDigis_MuonCSCDigisHarvestor_h + +#include "FWCore/PluginManager/interface/ModuleDef.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "DataFormats/MuonDetId/interface/CSCDetId.h" +#include "Validation/MuonGEMHits/interface/MuonGEMBaseHarvestor.h" + +class MuonCSCDigisHarvestor : public MuonGEMBaseHarvestor { +public: + /// constructor + explicit MuonCSCDigisHarvestor(const edm::ParameterSet&); + /// destructor + ~MuonCSCDigisHarvestor() override {} + + void dqmEndJob(DQMStore::IBooker&, DQMStore::IGetter&) override; + +private: +}; + +MuonCSCDigisHarvestor::MuonCSCDigisHarvestor(const edm::ParameterSet& pset) + : MuonGEMBaseHarvestor(pset, "MuonGEMDigisHarvestor") {} + +void MuonCSCDigisHarvestor::dqmEndJob(DQMStore::IBooker& booker, DQMStore::IGetter& getter) { + std::string eff_folder = "MuonCSCDigisV/CSCDigiTask/Stub/Efficiency/"; + std::string occ_folder = "MuonCSCDigisV/CSCDigiTask/Stub/Occupancy/"; + + for (int i = 1; i <= 10; ++i) { + const std::string cn(CSCDetId::chamberName(i)); + std::string d1 = occ_folder + "ALCTEtaDenom_" + cn; + std::string d2 = occ_folder + "CLCTEtaDenom_" + cn; + std::string d3 = occ_folder + "LCTEtaDenom_" + cn; + + std::string n1 = occ_folder + "ALCTEtaNum_" + cn; + std::string n2 = occ_folder + "CLCTEtaNum_" + cn; + std::string n3 = occ_folder + "LCTEtaNum_" + cn; + + std::string e1 = "ALCTEtaEff_" + cn; + std::string e2 = "CLCTEtaEff_" + cn; + std::string e3 = "LCTEtaEff_" + cn; + + bookEff1D(booker, getter, n1, d1, eff_folder, e1, cn + " ALCT Efficiency;True Muon |#eta|;Efficiency"); + bookEff1D(booker, getter, n2, d2, eff_folder, e2, cn + " CLCT Efficiency;True Muon |#eta|;Efficiency"); + bookEff1D(booker, getter, n3, d3, eff_folder, e3, cn + " LCT Efficiency;True Muon |#eta|;Efficiency"); + } +} + +DEFINE_FWK_MODULE(MuonCSCDigisHarvestor); +#endif diff --git a/Validation/MuonCSCDigis/python/PostProcessor_cff.py b/Validation/MuonCSCDigis/python/PostProcessor_cff.py new file mode 100644 index 0000000000000..5871f18fee2de --- /dev/null +++ b/Validation/MuonCSCDigis/python/PostProcessor_cff.py @@ -0,0 +1,5 @@ +import FWCore.ParameterSet.Config as cms +from DQMServices.Core.DQMEDHarvester import DQMEDHarvester + +cscDigiHarvesting = DQMEDHarvester("MuonCSCDigisHarvestor") +MuonCSCDigisPostProcessors = cms.Sequence(cscDigiHarvesting) diff --git a/Validation/MuonCSCDigis/python/cscDigiValidation_cfi.py b/Validation/MuonCSCDigis/python/cscDigiValidation_cfi.py index bcd38541ad094..8eeffc88072cd 100644 --- a/Validation/MuonCSCDigis/python/cscDigiValidation_cfi.py +++ b/Validation/MuonCSCDigis/python/cscDigiValidation_cfi.py @@ -1,16 +1,32 @@ import FWCore.ParameterSet.Config as cms +from Validation.MuonHits.muonSimHitMatcherPSet import * +from Validation.MuonGEMDigis.muonGEMDigiPSet import * +from Validation.MuonCSCDigis.muonCSCDigiPSet import * +from Validation.MuonCSCDigis.muonCSCStubPSet import * from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer -cscDigiValidation = DQMEDAnalyzer('CSCDigiValidation', +cscDigiValidation = DQMEDAnalyzer( + 'CSCDigiValidation', + muonSimHitMatcherPSet, + muonGEMDigiPSet, + muonCSCDigiPSet, + muonCSCStubPSet, simHitsTag = cms.InputTag("mix", "g4SimHitsMuonCSCHits"), - wireDigiTag = cms.InputTag("simMuonCSCDigis","MuonCSCWireDigi"), - outputFile = cms.string(''), - stripDigiTag = cms.InputTag("simMuonCSCDigis","MuonCSCStripDigi"), - comparatorDigiTag = cms.InputTag("simMuonCSCDigis","MuonCSCComparatorDigi"), - alctDigiTag = cms.InputTag("simCscTriggerPrimitiveDigis"), - clctDigiTag = cms.InputTag("simCscTriggerPrimitiveDigis"), - doSim = cms.bool(False) + doSim = cms.bool(True), + useGEMs = cms.bool(False), + ## numbering follows the chamberType in CSCDetId + etaMins = cms.vdouble(2.0, 1.6, 1.2, 0.9, 1.6, 1.0, 1.7, 1.1, 1.8, 1.2), + etaMaxs = cms.vdouble(2.4, 2.2, 1.7, 1.1, 2.4, 1.6, 2.4, 1.7, 2.4, 1.8) ) +from Configuration.Eras.Modifier_run3_GEM_cff import run3_GEM +run3_GEM.toModify(cscDigiValidation, useGEMs = True) + +## do not run GEMs in fastsim sequences from Configuration.Eras.Modifier_fastSim_cff import fastSim -fastSim.toModify(cscDigiValidation, simHitsTag = "mix:MuonSimHitsMuonCSCHits") +fastSim.toModify(cscDigiValidation, + simHitsTag = "mix:MuonSimHitsMuonCSCHits", + simTrack = dict(inputTag = "fastSimProducer"), + simVertex = dict(inputTag = "fastSimProducer"), + cscSimHit = dict(inputTag = "MuonSimHits:MuonCSCHits") +) diff --git a/Validation/MuonCSCDigis/src/CSCALCTDigiValidation.cc b/Validation/MuonCSCDigis/src/CSCALCTDigiValidation.cc index 7a1ab7fcedd2f..80f4571583295 100644 --- a/Validation/MuonCSCDigis/src/CSCALCTDigiValidation.cc +++ b/Validation/MuonCSCDigis/src/CSCALCTDigiValidation.cc @@ -6,44 +6,46 @@ #include "Geometry/CSCGeometry/interface/CSCGeometry.h" #include "Geometry/CSCGeometry/interface/CSCLayerGeometry.h" -CSCALCTDigiValidation::CSCALCTDigiValidation(const edm::InputTag &inputTag, edm::ConsumesCollector &&iC) - : CSCBaseValidation(inputTag), theTimeBinPlots(), theNDigisPerLayerPlots() { - alcts_Token_ = iC.consumes<CSCALCTDigiCollection>(inputTag); +CSCALCTDigiValidation::CSCALCTDigiValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC) + : CSCBaseValidation(ps), theTimeBinPlots(), theNDigisPerChamberPlots() { + const auto &pset = ps.getParameterSet("cscALCT"); + inputTag_ = pset.getParameter<edm::InputTag>("inputTag"); + alcts_Token_ = iC.consumes<CSCALCTDigiCollection>(inputTag_); } CSCALCTDigiValidation::~CSCALCTDigiValidation() {} void CSCALCTDigiValidation::bookHistograms(DQMStore::IBooker &iBooker) { - theNDigisPerEventPlot = iBooker.book1D("CSCALCTDigisPerEvent", "CSC ALCT Digis per event", 100, 0, 100); - for (int i = 0; i < 10; ++i) { - char title1[200], title2[200]; - sprintf(title1, "CSCALCTDigiTimeType%d", i + 1); - sprintf(title2, "CSCALCTDigisPerLayerType%d", i + 1); - theTimeBinPlots[i] = iBooker.book1D(title1, title1, 20, 0, 20); - theNDigisPerLayerPlots[i] = iBooker.book1D(title2, title2, 100, 0, 20); + theNDigisPerEventPlot = + iBooker.book1D("CSCALCTDigisPerEvent", "ALCT Digis per event; Number of ALCTs; Entries", 4, 0, 4); + for (int i = 1; i <= 10; ++i) { + const std::string t1("CSCALCTDigiTime_" + CSCDetId::chamberName(i)); + const std::string t2("CSCALCTDigisPerChamber_" + CSCDetId::chamberName(i)); + theTimeBinPlots[i - 1] = iBooker.book1D(t1, t1 + ";Wire Time Bin; Entries", 16, 0, 16); + theNDigisPerChamberPlots[i - 1] = iBooker.book1D(t2, t2 + ";Number of ALCTs per chamber;Entries", 4, 0, 4); } } void CSCALCTDigiValidation::analyze(const edm::Event &e, const edm::EventSetup &) { edm::Handle<CSCALCTDigiCollection> alcts; - e.getByToken(alcts_Token_, alcts); if (!alcts.isValid()) { - edm::LogError("CSCDigiDump") << "Cannot get alcts by label " << theInputTag.encode(); + edm::LogError("CSCALCTDigiValidation") << "Cannot get ALCTs by label " << inputTag_.encode(); } unsigned nDigisPerEvent = 0; - for (CSCALCTDigiCollection::DigiRangeIterator j = alcts->begin(); j != alcts->end(); j++) { - std::vector<CSCALCTDigi>::const_iterator beginDigi = (*j).second.first; - std::vector<CSCALCTDigi>::const_iterator endDigi = (*j).second.second; + for (auto j = alcts->begin(); j != alcts->end(); j++) { + auto beginDigi = (*j).second.first; + auto endDigi = (*j).second.second; CSCDetId detId((*j).first.rawId()); int chamberType = detId.iChamberType(); int nDigis = endDigi - beginDigi; nDigisPerEvent += nDigis; - theNDigisPerLayerPlots[chamberType - 1]->Fill(nDigis); + theNDigisPerChamberPlots[chamberType - 1]->Fill(nDigis); - for (std::vector<CSCALCTDigi>::const_iterator digiItr = beginDigi; digiItr != endDigi; ++digiItr) { + for (auto digiItr = beginDigi; digiItr != endDigi; ++digiItr) { theTimeBinPlots[chamberType - 1]->Fill(digiItr->getBX()); } } + theNDigisPerEventPlot->Fill(nDigisPerEvent); } diff --git a/Validation/MuonCSCDigis/src/CSCBaseValidation.cc b/Validation/MuonCSCDigis/src/CSCBaseValidation.cc index 39f996d4beadb..f201f7cf65e9e 100644 --- a/Validation/MuonCSCDigis/src/CSCBaseValidation.cc +++ b/Validation/MuonCSCDigis/src/CSCBaseValidation.cc @@ -1,8 +1,8 @@ #include "DQMServices/Core/interface/DQMStore.h" #include "Validation/MuonCSCDigis/interface/CSCBaseValidation.h" -CSCBaseValidation::CSCBaseValidation(const edm::InputTag &inputTag) - : theInputTag(inputTag), theSimHitMap(nullptr), theCSCGeometry(nullptr) {} +CSCBaseValidation::CSCBaseValidation(const edm::ParameterSet &ps) + : doSim_(ps.getParameter<bool>("doSim")), theSimHitMap(nullptr), theCSCGeometry(nullptr) {} const CSCLayer *CSCBaseValidation::findLayer(int detId) const { assert(theCSCGeometry != nullptr); diff --git a/Validation/MuonCSCDigis/src/CSCCLCTDigiValidation.cc b/Validation/MuonCSCDigis/src/CSCCLCTDigiValidation.cc index 6ccc970c70864..1221ac6f36a4d 100644 --- a/Validation/MuonCSCDigis/src/CSCCLCTDigiValidation.cc +++ b/Validation/MuonCSCDigis/src/CSCCLCTDigiValidation.cc @@ -6,46 +6,48 @@ #include "Geometry/CSCGeometry/interface/CSCGeometry.h" #include "Geometry/CSCGeometry/interface/CSCLayerGeometry.h" -CSCCLCTDigiValidation::CSCCLCTDigiValidation(const edm::InputTag &inputTag, edm::ConsumesCollector &&iC) - : CSCBaseValidation(inputTag), theTimeBinPlots(), theNDigisPerLayerPlots() { - clcts_Token_ = iC.consumes<CSCCLCTDigiCollection>(inputTag); +CSCCLCTDigiValidation::CSCCLCTDigiValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC) + : CSCBaseValidation(ps), theTimeBinPlots(), theNDigisPerChamberPlots() { + const auto &pset = ps.getParameterSet("cscCLCT"); + inputTag_ = pset.getParameter<edm::InputTag>("inputTag"); + clcts_Token_ = iC.consumes<CSCCLCTDigiCollection>(inputTag_); } CSCCLCTDigiValidation::~CSCCLCTDigiValidation() {} void CSCCLCTDigiValidation::bookHistograms(DQMStore::IBooker &iBooker) { - theNDigisPerEventPlot = iBooker.book1D("CSCCLCTDigisPerEvent", "CSC CLCT Digis per event", 100, 0, 100); - for (int i = 0; i < 10; ++i) { - char title1[200], title2[200]; - sprintf(title1, "CSCCLCTDigiTimeType%d", i + 1); - sprintf(title2, "CSCCLCTDigisPerLayerType%d", i + 1); - theTimeBinPlots[i] = iBooker.book1D(title1, title1, 20, 0, 20); - theNDigisPerLayerPlots[i] = iBooker.book1D(title2, title2, 100, 0, 20); + theNDigisPerEventPlot = + iBooker.book1D("CSCCLCTDigisPerEvent", "CLCT Digis per event; Number of CLCTs; Entries", 4, 0, 4); + for (int i = 1; i <= 10; ++i) { + const std::string t1("CSCCLCTDigiTime_" + CSCDetId::chamberName(i)); + const std::string t2("CSCCLCTDigisPerChamber_" + CSCDetId::chamberName(i)); + theTimeBinPlots[i - 1] = iBooker.book1D(t1, t1 + ";Comparator Time Bin; Entries", 16, 0, 16); + theNDigisPerChamberPlots[i - 1] = iBooker.book1D(t2, t2 + ";Number of CLCTs per chamber;Entries", 4, 0, 4); } } void CSCCLCTDigiValidation::analyze(const edm::Event &e, const edm::EventSetup &) { edm::Handle<CSCCLCTDigiCollection> clcts; - e.getByToken(clcts_Token_, clcts); if (!clcts.isValid()) { - edm::LogError("CSCDigiDump") << "Cannot get clcts by label " << theInputTag.encode(); + edm::LogError("CSCDigiDump") << "Cannot get CLCTs by label " << inputTag_.encode(); } unsigned nDigisPerEvent = 0; - for (CSCCLCTDigiCollection::DigiRangeIterator j = clcts->begin(); j != clcts->end(); j++) { - std::vector<CSCCLCTDigi>::const_iterator beginDigi = (*j).second.first; - std::vector<CSCCLCTDigi>::const_iterator endDigi = (*j).second.second; + for (auto j = clcts->begin(); j != clcts->end(); j++) { + auto beginDigi = (*j).second.first; + auto endDigi = (*j).second.second; CSCDetId detId((*j).first.rawId()); int chamberType = detId.iChamberType(); int nDigis = endDigi - beginDigi; nDigisPerEvent += nDigis; - theNDigisPerLayerPlots[chamberType - 1]->Fill(nDigis); + theNDigisPerChamberPlots[chamberType - 1]->Fill(nDigis); - for (std::vector<CSCCLCTDigi>::const_iterator digiItr = beginDigi; digiItr != endDigi; ++digiItr) { + for (auto digiItr = beginDigi; digiItr != endDigi; ++digiItr) { theTimeBinPlots[chamberType - 1]->Fill(digiItr->getBX()); } } + theNDigisPerEventPlot->Fill(nDigisPerEvent); } diff --git a/Validation/MuonCSCDigis/src/CSCComparatorDigiValidation.cc b/Validation/MuonCSCDigis/src/CSCComparatorDigiValidation.cc index a64685ef40a13..69667bb94917d 100644 --- a/Validation/MuonCSCDigis/src/CSCComparatorDigiValidation.cc +++ b/Validation/MuonCSCDigis/src/CSCComparatorDigiValidation.cc @@ -3,32 +3,32 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Validation/MuonCSCDigis/interface/CSCComparatorDigiValidation.h" -CSCComparatorDigiValidation::CSCComparatorDigiValidation(const edm::InputTag &inputTag, - const edm::InputTag &stripDigiInputTag, - edm::ConsumesCollector &&iC) - : CSCBaseValidation(inputTag), - theStripDigi_Token_(iC.consumes<CSCStripDigiCollection>(stripDigiInputTag)), - theTimeBinPlots(), - theNDigisPerLayerPlots(), - theStripDigiPlots(), - the3StripPlots() { - comparators_Token_ = iC.consumes<CSCComparatorDigiCollection>(inputTag); +CSCComparatorDigiValidation::CSCComparatorDigiValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC) + : CSCBaseValidation(ps), theTimeBinPlots(), theNDigisPerLayerPlots(), theStripDigiPlots(), the3StripPlots() { + const auto &comps = ps.getParameterSet("cscComparatorDigi"); + inputTagComp_ = comps.getParameter<edm::InputTag>("inputTag"); + comparators_Token_ = iC.consumes<CSCComparatorDigiCollection>(inputTagComp_); + + const auto &strips = ps.getParameterSet("cscStripDigi"); + inputTagStrip_ = strips.getParameter<edm::InputTag>("inputTag"); + strips_Token_ = iC.consumes<CSCStripDigiCollection>(inputTagStrip_); } CSCComparatorDigiValidation::~CSCComparatorDigiValidation() {} void CSCComparatorDigiValidation::bookHistograms(DQMStore::IBooker &iBooker) { - theNDigisPerEventPlot = iBooker.book1D("CSCComparatorDigisPerEvent", "CSC Comparator Digis per event", 100, 0, 100); - for (int i = 0; i < 10; ++i) { - char title1[200], title2[200], title3[200], title4[200]; - sprintf(title1, "CSCComparatorDigiTimeType%d", i + 1); - sprintf(title2, "CSCComparatorDigisPerLayerType%d", i + 1); - sprintf(title3, "CSCComparatorStripAmplitudeType%d", i + 1); - sprintf(title4, "CSCComparator3StripAmplitudeType%d", i + 1); - theTimeBinPlots[i] = iBooker.book1D(title1, title1, 9, 0, 8); - theNDigisPerLayerPlots[i] = iBooker.book1D(title2, title2, 100, 0, 20); - theStripDigiPlots[i] = iBooker.book1D(title3, title3, 100, 0, 1000); - the3StripPlots[i] = iBooker.book1D(title4, title4, 100, 0, 1000); + theNDigisPerEventPlot = + iBooker.book1D("CSCComparatorDigisPerEvent", ";CSC Comparator Digis per event;Entries", 100, 0, 100); + // 10 chamber types, if you consider ME1/a and ME1/b separate + for (int i = 1; i <= 10; ++i) { + const std::string t1("CSCComparatorDigiTime_" + CSCDetId::chamberName(i)); + const std::string t2("CSCComparatorDigisPerLayer_" + CSCDetId::chamberName(i)); + const std::string t3("CSCComparatorStripAmplitude_" + CSCDetId::chamberName(i)); + const std::string t4("CSCComparator3StripAmplitude_" + CSCDetId::chamberName(i)); + theTimeBinPlots[i - 1] = iBooker.book1D(t1, t1 + ";Comparator Time Bin; Entries", 16, 0, 16); + theNDigisPerLayerPlots[i - 1] = iBooker.book1D(t2, t2 + ";Number of Comparator Digis; Entries", 100, 0, 20); + theStripDigiPlots[i - 1] = iBooker.book1D(t3, t3 + ";Comparator Amplitude; Entries", 100, 0, 1000); + the3StripPlots[i - 1] = iBooker.book1D(t4, t4 + ";Comparator-triplet Amplitude; Entries", 100, 0, 1000); } } @@ -38,34 +38,31 @@ void CSCComparatorDigiValidation::analyze(const edm::Event &e, const edm::EventS e.getByToken(comparators_Token_, comparators); if (!comparators.isValid()) { - edm::LogError("CSCDigiDump") << "Cannot get comparators by label " << theInputTag.encode(); + edm::LogError("CSCComparatorDigiValidation") << "Cannot get comparators by label " << inputTagComp_.encode(); } - e.getByToken(theStripDigi_Token_, stripDigis); + e.getByToken(strips_Token_, stripDigis); if (!stripDigis.isValid()) { - edm::LogError("CSCDigiDump") << "Cannot get comparators by label " << theInputTag.encode(); + edm::LogError("CSCComparatorDigiValidation") << "Cannot get strips by label " << inputTagComp_.encode(); } unsigned nDigisPerEvent = 0; - for (CSCComparatorDigiCollection::DigiRangeIterator j = comparators->begin(); j != comparators->end(); j++) { - std::vector<CSCComparatorDigi>::const_iterator digiItr = (*j).second.first; - std::vector<CSCComparatorDigi>::const_iterator last = (*j).second.second; + for (auto j = comparators->begin(); j != comparators->end(); j++) { + auto digiItr = (*j).second.first; + auto last = (*j).second.second; CSCDetId detId((*j).first); const CSCLayer *layer = findLayer(detId.rawId()); int chamberType = layer->chamber()->specs()->chamberType(); - CSCStripDigiCollection::Range stripRange = stripDigis->get(detId); - theNDigisPerLayerPlots[chamberType - 1]->Fill(last - digiItr); - for (; digiItr != last; ++digiItr) { + for (auto stripRange = stripDigis->get(detId); digiItr != last; ++digiItr) { ++nDigisPerEvent; theTimeBinPlots[chamberType - 1]->Fill(digiItr->getTimeBin()); int strip = digiItr->getStrip(); - for (std::vector<CSCStripDigi>::const_iterator stripItr = stripRange.first; stripItr != stripRange.second; - ++stripItr) { + for (auto stripItr = stripRange.first; stripItr != stripRange.second; ++stripItr) { if (stripItr->getStrip() == strip) { std::vector<int> adc = stripItr->getADCCounts(); float pedc = 0.5 * (adc[0] + adc[1]); @@ -84,6 +81,5 @@ void CSCComparatorDigiValidation::analyze(const edm::Event &e, const edm::EventS } } } - theNDigisPerEventPlot->Fill(nDigisPerEvent); } diff --git a/Validation/MuonCSCDigis/src/CSCStripDigiValidation.cc b/Validation/MuonCSCDigis/src/CSCStripDigiValidation.cc index 03db9aa30fc50..9634b992bc08e 100644 --- a/Validation/MuonCSCDigis/src/CSCStripDigiValidation.cc +++ b/Validation/MuonCSCDigis/src/CSCStripDigiValidation.cc @@ -3,31 +3,36 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Validation/MuonCSCDigis/interface/CSCStripDigiValidation.h" -CSCStripDigiValidation::CSCStripDigiValidation(const edm::InputTag &inputTag, edm::ConsumesCollector &&iC) - : CSCBaseValidation(inputTag), +CSCStripDigiValidation::CSCStripDigiValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC) + : CSCBaseValidation(ps), thePedestalSum(0), thePedestalCovarianceSum(0), thePedestalCount(0), thePedestalTimeCorrelationPlot(nullptr), thePedestalNeighborCorrelationPlot(nullptr), theNDigisPerChamberPlot(nullptr) { - strips_Token_ = iC.consumes<CSCStripDigiCollection>(inputTag); + const auto &pset = ps.getParameterSet("cscStripDigi"); + inputTag_ = pset.getParameter<edm::InputTag>("inputTag"); + strips_Token_ = iC.consumes<CSCStripDigiCollection>(inputTag_); } CSCStripDigiValidation::~CSCStripDigiValidation() {} -void CSCStripDigiValidation::bookHistograms(DQMStore::IBooker &iBooker, bool doSim) { - thePedestalPlot = iBooker.book1D("CSCPedestal", "CSC Pedestal ", 400, 550, 650); - theAmplitudePlot = iBooker.book1D("CSCStripAmplitude", "CSC Strip Amplitude", 200, 0, 2000); - theRatio4to5Plot = iBooker.book1D("CSCStrip4to5", "CSC Strip Ratio tbin 4 to tbin 5", 100, 0, 1); - theRatio6to5Plot = iBooker.book1D("CSCStrip6to5", "CSC Strip Ratio tbin 6 to tbin 5", 120, 0, 1.2); - theNDigisPerLayerPlot = iBooker.book1D("CSCStripDigisPerLayer", "Number of CSC Strip Digis per layer", 48, 0, 48); - theNDigisPerEventPlot = iBooker.book1D("CSCStripDigisPerEvent", "Number of CSC Strip Digis per event", 100, 0, 500); - if (doSim) { - for (int i = 0; i < 10; ++i) { - char title1[200]; - sprintf(title1, "CSCStripDigiResolution%d", i + 1); - theResolutionPlots[i] = iBooker.book1D(title1, title1, 100, -5, 5); +void CSCStripDigiValidation::bookHistograms(DQMStore::IBooker &iBooker) { + thePedestalPlot = iBooker.book1D("CSCPedestal", "CSC Pedestal;ADC Counts;Entries", 400, 550, 650); + theAmplitudePlot = iBooker.book1D("CSCStripAmplitude", ";CSC Strip Amplitude;Entries", 200, 0, 2000); + theRatio4to5Plot = iBooker.book1D("CSCStrip4to5", "CSC Strip Ratio tbin 4 to tbin 5;Strip Ratio;Entries", 100, 0, 1); + theRatio6to5Plot = + iBooker.book1D("CSCStrip6to5", "CSC Strip Ratio tbin 6 to tbin 5;Strip Ratio;Entries", 120, 0, 1.2); + theNDigisPerLayerPlot = + iBooker.book1D("CSCStripDigisPerLayer", ";Number of CSC Strip Digis per layer;Entries", 48, 0, 48); + theNDigisPerEventPlot = + iBooker.book1D("CSCStripDigisPerEvent", ";Number of CSC Strip Digis per event;Entries", 100, 0, 500); + + if (doSim_) { + for (int i = 1; i <= 10; ++i) { + const std::string t1("CSCStripPosResolution_" + CSCDetId::chamberName(i)); + theResolutionPlots[i - 1] = iBooker.book1D(t1, t1 + ";Strip X Position Resolution; Entries", 100, -5, 5); } } } @@ -36,20 +41,30 @@ void CSCStripDigiValidation::analyze(const edm::Event &e, const edm::EventSetup edm::Handle<CSCStripDigiCollection> strips; e.getByToken(strips_Token_, strips); if (!strips.isValid()) { - edm::LogError("CSCDigiValidation") << "Cannot get strips by label " << theInputTag.encode(); + edm::LogError("CSCStripDigiValidation") << "Cannot get strips by label " << inputTag_.encode(); } unsigned nDigisPerEvent = 0; - for (CSCStripDigiCollection::DigiRangeIterator j = strips->begin(); j != strips->end(); j++) { - std::vector<CSCStripDigi>::const_iterator digiItr = (*j).second.first; - std::vector<CSCStripDigi>::const_iterator last = (*j).second.second; + for (auto j = strips->begin(); j != strips->end(); j++) { + auto digiItr = (*j).second.first; + auto last = (*j).second.second; + int detId = (*j).first.rawId(); + + const CSCLayer *layer = findLayer(detId); + int chamberType = layer->chamber()->specs()->chamberType(); int nDigis = last - digiItr; nDigisPerEvent += nDigis; theNDigisPerLayerPlot->Fill(nDigis); double maxAmplitude = 0.; - // int maxStrip = 0; + + if (doSim_) { + const edm::PSimHitContainer simHits = theSimHitMap->hits(detId); + if (nDigis == 1 && simHits.size() == 1) { + plotResolution(simHits[0], digiItr->getStrip(), layer, chamberType); + } + } for (; digiItr != last; ++digiItr) { // average up the pedestals @@ -59,7 +74,6 @@ void CSCStripDigiValidation::analyze(const edm::Event &e, const edm::EventSetup thePedestalCount += 2; float pedestal = thePedestalSum / thePedestalCount; if (adcCounts[4] - pedestal > maxAmplitude) { - // maxStrip = digiItr->getStrip(); maxAmplitude = adcCounts[4] - pedestal; } diff --git a/Validation/MuonCSCDigis/src/CSCStubEfficiencyValidation.cc b/Validation/MuonCSCDigis/src/CSCStubEfficiencyValidation.cc new file mode 100644 index 0000000000000..870bfbda2eeac --- /dev/null +++ b/Validation/MuonCSCDigis/src/CSCStubEfficiencyValidation.cc @@ -0,0 +1,173 @@ +#include "DataFormats/Common/interface/Handle.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "Validation/MuonCSCDigis/interface/CSCStubEfficiencyValidation.h" + +#include "DQMServices/Core/interface/DQMStore.h" +#include "Geometry/CSCGeometry/interface/CSCGeometry.h" +#include "Geometry/CSCGeometry/interface/CSCLayerGeometry.h" + +CSCStubEfficiencyValidation::CSCStubEfficiencyValidation(const edm::ParameterSet& pset, edm::ConsumesCollector&& iC) + : CSCBaseValidation(pset) { + const auto& simVertex = pset.getParameter<edm::ParameterSet>("simVertex"); + simVertexInput_ = iC.consumes<edm::SimVertexContainer>(simVertex.getParameter<edm::InputTag>("inputTag")); + const auto& simTrack = pset.getParameter<edm::ParameterSet>("simTrack"); + simTrackInput_ = iC.consumes<edm::SimTrackContainer>(simTrack.getParameter<edm::InputTag>("inputTag")); + simTrackMinPt_ = simTrack.getParameter<double>("minPt"); + simTrackMinEta_ = simTrack.getParameter<double>("minEta"); + simTrackMaxEta_ = simTrack.getParameter<double>("maxEta"); + + // all CSC TPs have the same label + const auto& stubConfig = pset.getParameterSet("cscALCT"); + inputTag_ = stubConfig.getParameter<edm::InputTag>("inputTag"); + alcts_Token_ = iC.consumes<CSCALCTDigiCollection>(inputTag_); + clcts_Token_ = iC.consumes<CSCCLCTDigiCollection>(inputTag_); + lcts_Token_ = iC.consumes<CSCCorrelatedLCTDigiCollection>(inputTag_); + + // Initialize stub matcher + cscStubMatcher_.reset(new CSCStubMatcher(pset, std::move(iC))); + + // get the eta ranges + etaMins_ = pset.getParameter<std::vector<double>>("etaMins"); + etaMaxs_ = pset.getParameter<std::vector<double>>("etaMaxs"); +} + +CSCStubEfficiencyValidation::~CSCStubEfficiencyValidation() {} + +void CSCStubEfficiencyValidation::bookHistograms(DQMStore::IBooker& iBooker) { + iBooker.setCurrentFolder("MuonCSCDigisV/CSCDigiTask/Stub/Occupancy/"); + + for (int i = 1; i <= 10; ++i) { + int j = i - 1; + const std::string cn(CSCDetId::chamberName(i)); + + std::string t1 = "ALCTEtaDenom_" + cn; + std::string t2 = "CLCTEtaDenom_" + cn; + std::string t3 = "LCTEtaDenom_" + cn; + + etaALCTDenom[j] = iBooker.book1D(t1, t1 + ";True Muon |#eta|; Entries", 50, etaMins_[j], etaMaxs_[j]); + etaCLCTDenom[j] = iBooker.book1D(t2, t2 + ";True Muon |#eta|; Entries", 50, etaMins_[j], etaMaxs_[j]); + etaLCTDenom[j] = iBooker.book1D(t3, t3 + ";True Muon |#eta|; Entries", 50, etaMins_[j], etaMaxs_[j]); + + t1 = "ALCTEtaNum_" + cn; + t2 = "CLCTEtaNum_" + cn; + t3 = "LCTEtaNum_" + cn; + + etaALCTNum[j] = iBooker.book1D(t1, t1 + ";True Muon |#eta|; Entries", 50, etaMins_[j], etaMaxs_[j]); + etaCLCTNum[j] = iBooker.book1D(t2, t2 + ";True Muon |#eta|; Entries", 50, etaMins_[j], etaMaxs_[j]); + etaLCTNum[j] = iBooker.book1D(t3, t3 + ";True Muon |#eta|; Entries", 50, etaMins_[j], etaMaxs_[j]); + } +} + +void CSCStubEfficiencyValidation::analyze(const edm::Event& e, const edm::EventSetup& eventSetup) { + // Define handles + edm::Handle<edm::SimTrackContainer> sim_tracks; + edm::Handle<edm::SimVertexContainer> sim_vertices; + edm::Handle<CSCALCTDigiCollection> alcts; + edm::Handle<CSCCLCTDigiCollection> clcts; + edm::Handle<CSCCorrelatedLCTDigiCollection> lcts; + + // Use token to retreive event information + e.getByToken(simTrackInput_, sim_tracks); + e.getByToken(simVertexInput_, sim_vertices); + e.getByToken(alcts_Token_, alcts); + e.getByToken(clcts_Token_, clcts); + e.getByToken(lcts_Token_, lcts); + + // Initialize StubMatcher + cscStubMatcher_->init(e, eventSetup); + + const edm::SimTrackContainer& sim_track = *sim_tracks.product(); + const edm::SimVertexContainer& sim_vert = *sim_vertices.product(); + + if (!alcts.isValid()) { + edm::LogError("CSCStubEfficiencyValidation") << "Cannot get ALCTs by label " << inputTag_.encode(); + } + if (!clcts.isValid()) { + edm::LogError("CSCStubEfficiencyValidation") << "Cannot get CLCTs by label " << inputTag_.encode(); + } + if (!lcts.isValid()) { + edm::LogError("CSCStubEfficiencyValidation") << "Cannot get LCTs by label " << inputTag_.encode(); + } + + // select simtracks for true muons + edm::SimTrackContainer sim_track_selected; + for (const auto& t : sim_track) { + if (!isSimTrackGood(t)) + continue; + sim_track_selected.push_back(t); + } + + // Skip events with no selected simtracks + if (sim_track_selected.empty()) + return; + + // Loop through good tracks, use corresponding vetrex to match stubs, then fill hists of chambers where the stub appears. + for (const auto& t : sim_track_selected) { + std::vector<bool> hitALCT(10); + std::vector<bool> hitCLCT(10); + std::vector<bool> hitLCT(10); + + // Match track to stubs with appropriate vertex + cscStubMatcher_->match(t, sim_vert[t.vertIndex()]); + + // Store matched stubs. + // Key: ChamberID, Value : CSCStubDigiContainer + const auto& alcts = cscStubMatcher_->alcts(); + const auto& clcts = cscStubMatcher_->clcts(); + const auto& lcts = cscStubMatcher_->lcts(); + + // denominator histograms + for (int i = 0; i < 10; ++i) { + etaALCTDenom[i]->Fill(t.momentum().eta()); + etaCLCTDenom[i]->Fill(t.momentum().eta()); + etaLCTDenom[i]->Fill(t.momentum().eta()); + } + + for (auto& [id, container] : alcts) { + const CSCDetId cscId(id); + const unsigned chamberType(cscId.iChamberType()); + hitALCT[chamberType - 1] = true; + } + + for (auto& [id, container] : clcts) { + const CSCDetId cscId(id); + const unsigned chamberType(cscId.iChamberType()); + hitCLCT[chamberType - 1] = true; + } + + for (auto& [id, container] : lcts) { + const CSCDetId cscId(id); + const unsigned chamberType(cscId.iChamberType()); + hitLCT[chamberType - 1] = true; + } + + // numerator histograms + for (int i = 0; i < 10; ++i) { + if (hitALCT[i]) + etaALCTNum[i]->Fill(t.momentum().eta()); + if (hitCLCT[i]) + etaCLCTNum[i]->Fill(t.momentum().eta()); + if (hitLCT[i]) + etaLCTNum[i]->Fill(t.momentum().eta()); + } + } +} + +bool CSCStubEfficiencyValidation::isSimTrackGood(const SimTrack& t) { + // SimTrack selection + if (t.noVertex()) + return false; + if (t.noGenpart()) + return false; + // only muons + if (std::abs(t.type()) != 13) + return false; + // pt selection + if (t.momentum().pt() < simTrackMinPt_) + return false; + // eta selection + const float eta(std::abs(t.momentum().eta())); + if (eta > simTrackMaxEta_ || eta < simTrackMinEta_) + return false; + return true; +} diff --git a/Validation/MuonCSCDigis/src/CSCStubMatcher.cc b/Validation/MuonCSCDigis/src/CSCStubMatcher.cc index d45a40120b3a5..c50d1b773b6d5 100644 --- a/Validation/MuonCSCDigis/src/CSCStubMatcher.cc +++ b/Validation/MuonCSCDigis/src/CSCStubMatcher.cc @@ -5,6 +5,8 @@ using namespace std; CSCStubMatcher::CSCStubMatcher(const edm::ParameterSet& pSet, edm::ConsumesCollector&& iC) { + useGEMs_ = pSet.getParameter<bool>("useGEMs"); + const auto& cscCLCT = pSet.getParameter<edm::ParameterSet>("cscCLCT"); minBXCLCT_ = cscCLCT.getParameter<int>("minBX"); maxBXCLCT_ = cscCLCT.getParameter<int>("maxBX"); @@ -30,7 +32,8 @@ CSCStubMatcher::CSCStubMatcher(const edm::ParameterSet& pSet, edm::ConsumesColle verboseMPLCT_ = cscMPLCT.getParameter<int>("verbose"); minNHitsChamberMPLCT_ = cscMPLCT.getParameter<int>("minNHitsChamber"); - gemDigiMatcher_.reset(new GEMDigiMatcher(pSet, std::move(iC))); + if (useGEMs_) + gemDigiMatcher_.reset(new GEMDigiMatcher(pSet, std::move(iC))); cscDigiMatcher_.reset(new CSCDigiMatcher(pSet, std::move(iC))); clctToken_ = iC.consumes<CSCCLCTDigiCollection>(cscCLCT.getParameter<edm::InputTag>("inputTag")); @@ -42,7 +45,8 @@ CSCStubMatcher::CSCStubMatcher(const edm::ParameterSet& pSet, edm::ConsumesColle } void CSCStubMatcher::init(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - gemDigiMatcher_->init(iEvent, iSetup); + if (useGEMs_) + gemDigiMatcher_->init(iEvent, iSetup); cscDigiMatcher_->init(iEvent, iSetup); iEvent.getByToken(clctToken_, clctsH_); @@ -56,7 +60,8 @@ void CSCStubMatcher::init(const edm::Event& iEvent, const edm::EventSetup& iSetu // do the matching void CSCStubMatcher::match(const SimTrack& t, const SimVertex& v) { // match simhits first - gemDigiMatcher_->match(t, v); + if (useGEMs_) + gemDigiMatcher_->match(t, v); cscDigiMatcher_->match(t, v); const CSCCLCTDigiCollection& clcts = *clctsH_.product(); @@ -329,27 +334,29 @@ void CSCStubMatcher::matchLCTsToSimTrack(const CSCCorrelatedLCTDigiCollection& l } } - // fixME here: double check the timing of GEMPad - if (ch_id.ring() == 1 and (ch_id.station() == 1 or ch_id.station() == 2)) { - // Check if matched to an GEM pad L1 - const GEMDetId gemDetIdL1(ch_id.zendcap(), 1, ch_id.station(), 1, ch_id.chamber(), 0); - for (const auto& p : gemDigiMatcher_->padsInChamber(gemDetIdL1.rawId())) { - if (p == lct.getGEM1()) { - lct_gem1_match = true; - if (verboseLCT_) - edm::LogInfo("CSCStubMatcher") << "\t...lct_gem1_match"; - break; + if (useGEMs_) { + // fixME here: double check the timing of GEMPad + if (ch_id.ring() == 1 and (ch_id.station() == 1 or ch_id.station() == 2)) { + // Check if matched to an GEM pad L1 + const GEMDetId gemDetIdL1(ch_id.zendcap(), 1, ch_id.station(), 1, ch_id.chamber(), 0); + for (const auto& p : gemDigiMatcher_->padsInChamber(gemDetIdL1.rawId())) { + if (p == lct.getGEM1()) { + lct_gem1_match = true; + if (verboseLCT_) + edm::LogInfo("CSCStubMatcher") << "\t...lct_gem1_match"; + break; + } } - } - // Check if matched to an GEM pad L2 - const GEMDetId gemDetIdL2(ch_id.zendcap(), 1, ch_id.station(), 2, ch_id.chamber(), 0); - for (const auto& p : gemDigiMatcher_->padsInChamber(gemDetIdL2.rawId())) { - if (p == lct.getGEM2()) { - lct_gem2_match = true; - if (verboseLCT_) - edm::LogInfo("CSCStubMatcher") << "\t...lct_gem2_match"; - break; + // Check if matched to an GEM pad L2 + const GEMDetId gemDetIdL2(ch_id.zendcap(), 1, ch_id.station(), 2, ch_id.chamber(), 0); + for (const auto& p : gemDigiMatcher_->padsInChamber(gemDetIdL2.rawId())) { + if (p == lct.getGEM2()) { + lct_gem2_match = true; + if (verboseLCT_) + edm::LogInfo("CSCStubMatcher") << "\t...lct_gem2_match"; + break; + } } } } @@ -629,14 +636,19 @@ bool CSCStubMatcher::lctInChamber(const CSCDetId& id, const CSCCorrelatedLCTDigi GlobalPoint CSCStubMatcher::getGlobalPosition(unsigned int rawId, const CSCCorrelatedLCTDigi& lct) const { CSCDetId cscId(rawId); - CSCDetId key_id(cscId.endcap(), cscId.station(), cscId.ring(), cscId.chamber(), CSCConstants::KEY_CLCT_LAYER); - const auto& chamber = cscGeometry_->chamber(cscId); + CSCDetId keyId(cscId.endcap(), cscId.station(), cscId.ring(), cscId.chamber(), CSCConstants::KEY_CLCT_LAYER); float fractional_strip = lct.getFractionalStrip(); + // case ME1/a + if (cscId.station() == 1 and cscId.ring() == 4 and lct.getStrip() > CSCConstants::MAX_HALF_STRIP_ME1B) { + fractional_strip -= CSCConstants::MAX_NUM_STRIPS_ME1B; + } + // regular cases + const auto& chamber = cscGeometry_->chamber(cscId); const auto& layer_geo = chamber->layer(CSCConstants::KEY_CLCT_LAYER)->geometry(); // LCT::getKeyWG() also starts from 0 float wire = layer_geo->middleWireOfGroup(lct.getKeyWG() + 1); const LocalPoint& csc_intersect = layer_geo->intersectionOfStripAndWire(fractional_strip, wire); - const GlobalPoint& csc_gp = cscGeometry_->idToDet(key_id)->surface().toGlobal(csc_intersect); + const GlobalPoint& csc_gp = cscGeometry_->idToDet(keyId)->surface().toGlobal(csc_intersect); return csc_gp; } diff --git a/Validation/MuonCSCDigis/src/CSCWireDigiValidation.cc b/Validation/MuonCSCDigis/src/CSCWireDigiValidation.cc index 5e911ffe9246c..65be5a5a27265 100644 --- a/Validation/MuonCSCDigis/src/CSCWireDigiValidation.cc +++ b/Validation/MuonCSCDigis/src/CSCWireDigiValidation.cc @@ -6,23 +6,24 @@ #include "Geometry/CSCGeometry/interface/CSCGeometry.h" #include "Geometry/CSCGeometry/interface/CSCLayerGeometry.h" -CSCWireDigiValidation::CSCWireDigiValidation(const edm::InputTag &inputTag, edm::ConsumesCollector &&iC, bool doSim) - : CSCBaseValidation(inputTag), doSim_(doSim), theTimeBinPlots(), theNDigisPerLayerPlots() { - wires_Token_ = iC.consumes<CSCWireDigiCollection>(inputTag); +CSCWireDigiValidation::CSCWireDigiValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC) + : CSCBaseValidation(ps), theTimeBinPlots(), theNDigisPerLayerPlots() { + const auto &pset = ps.getParameterSet("cscWireDigi"); + inputTag_ = pset.getParameter<edm::InputTag>("inputTag"); + wires_Token_ = iC.consumes<CSCWireDigiCollection>(inputTag_); } CSCWireDigiValidation::~CSCWireDigiValidation() {} void CSCWireDigiValidation::bookHistograms(DQMStore::IBooker &iBooker) { - theNDigisPerEventPlot = iBooker.book1D("CSCWireDigisPerEvent", "CSC Wire Digis per event", 100, 0, 100); - for (int i = 0; i < 10; ++i) { - char title1[200], title2[200], title3[200]; - sprintf(title1, "CSCWireDigiTimeType%d", i + 1); - sprintf(title2, "CSCWireDigisPerLayerType%d", i + 1); - sprintf(title3, "CSCWireDigiResolution%d", i + 1); - theTimeBinPlots[i] = iBooker.book1D(title1, title1, 9, 0, 8); - theNDigisPerLayerPlots[i] = iBooker.book1D(title2, title2, 100, 0, 20); - theResolutionPlots[i] = iBooker.book1D(title3, title3, 100, -10, 10); + theNDigisPerEventPlot = iBooker.book1D("CSCWireDigisPerEvent", ";CSC Wire Digis per event;Entries", 100, 0, 100); + for (int i = 1; i <= 10; ++i) { + const std::string t1("CSCWireDigiTime_" + CSCDetId::chamberName(i)); + const std::string t2("CSCWireDigisPerLayer_" + CSCDetId::chamberName(i)); + const std::string t3("CSCWireDigiResolution_" + CSCDetId::chamberName(i)); + theTimeBinPlots[i - 1] = iBooker.book1D(t1, t1 + ";Wire Time Bin; Entries", 16, 0, 16); + theNDigisPerLayerPlots[i - 1] = iBooker.book1D(t2, t2 + ";Number of Wire Digis; Entries", 100, 0, 20); + theResolutionPlots[i - 1] = iBooker.book1D(t3, t3 + ";Wire Y Position Resolution; Entries", 100, -10, 10); } } @@ -32,14 +33,14 @@ void CSCWireDigiValidation::analyze(const edm::Event &e, const edm::EventSetup & e.getByToken(wires_Token_, wires); if (!wires.isValid()) { - edm::LogError("CSCDigiDump") << "Cannot get wires by label " << theInputTag.encode(); + edm::LogError("CSCWireDigiValidation") << "Cannot get wires by label " << inputTag_.encode(); } unsigned nDigisPerEvent = 0; - for (CSCWireDigiCollection::DigiRangeIterator j = wires->begin(); j != wires->end(); j++) { - std::vector<CSCWireDigi>::const_iterator beginDigi = (*j).second.first; - std::vector<CSCWireDigi>::const_iterator endDigi = (*j).second.second; + for (auto j = wires->begin(); j != wires->end(); j++) { + auto beginDigi = (*j).second.first; + auto endDigi = (*j).second.second; int detId = (*j).first.rawId(); const CSCLayer *layer = findLayer(detId); @@ -48,7 +49,7 @@ void CSCWireDigiValidation::analyze(const edm::Event &e, const edm::EventSetup & nDigisPerEvent += nDigis; theNDigisPerLayerPlots[chamberType - 1]->Fill(nDigis); - for (std::vector<CSCWireDigi>::const_iterator digiItr = beginDigi; digiItr != endDigi; ++digiItr) { + for (auto digiItr = beginDigi; digiItr != endDigi; ++digiItr) { theTimeBinPlots[chamberType - 1]->Fill(digiItr->getTimeBin()); } diff --git a/Validation/MuonCSCDigis/test/CSCOval.C b/Validation/MuonCSCDigis/test/CSCOval.C deleted file mode 100644 index da8ce7ca521ef..0000000000000 --- a/Validation/MuonCSCDigis/test/CSCOval.C +++ /dev/null @@ -1,155 +0,0 @@ -#include <iostream> -// comparison of digi histograms with reference ones. -// root -b -q hcaloval.C\(\"HB\"\) - just for PV comparison. -// root -b -q hcaloval.C\(\"HB\",\"gif\"\) - PV comparison and creation of gif for each histo -// root -b -q hcaloval.C\(\"HB\",\"ps\"\) - PV comparison and creation of ps file for each subdetector - -#include "TFile.h" -#include "TTree.h" -#include "TText.h" -#include "TStyle.h" -#include "TPostScript.h" -#include "TString.h" -#include "HistoCompare.C" - - -class CSCOval -{ -public: - CSCOval(const char * suffix, const char* drawhisto="none"); - - ~CSCOval(); - - void process(string name); - void plot3x3(string histName); - void plot(string histName); - void runStrips(); - void runWires(); - void runComparators(); - void run(); - -private: - TFile * rfile; - TFile * sfile; - HistoCompare * theComp; - string theSuffix; - string theDirectory; -}; - - -CSCOval::CSCOval(const char* suffix, const char* drawhisto) -: rfile(0), - sfile(0), - theComp(0), - theSuffix(suffix), - theDirectory("DQMData/CSCDigiTask") -{ - gROOT->Reset(); - - string PathToRef = "../data/"; - string rfilename = PathToRef+ "CSCDigiValidation_ref.root"; - string sfilename = "CSCDigiValidation" + theSuffix + ".root"; - - delete gROOT->GetListOfFiles()->FindObject(rfilename.c_str()); - delete gROOT->GetListOfFiles()->FindObject(sfilename.c_str()); - - // TText* te = new TText(); - // te->SetTextSize(0.1); - rfile = new TFile(rfilename.c_str()); - sfile = new TFile(sfilename.c_str()); - rfile->cd(theDirectory.c_str()); - gDirectory->ls(); - - sfile->cd(theDirectory.c_str()); - gDirectory->ls(); - - gStyle->SetOptStat("n"); - - //gROOT->ProcessLine(".x HistoCompare.C"); - if(drawhisto == "gif") - { - theComp = new HistoCompareGif("CSC", theSuffix); - } - else if(drawhisto == "ps") - { - theComp = new HistoComparePS("cscDigiValidation.ps"); - } - else - { - HistoCompare * comp = new HistoCompare(); - theComp = new HistoCompare(); - } - run(); -} - -CSCOval::~CSCOval() -{ - delete theComp; -} - - -void CSCOval::process(string histname) -{ - TH1 * oldHist; - TH1 * newHist; - string tname = theDirectory + "/" + histname + ";1"; - cout << tname << endl; - rfile->GetObject(tname.c_str(), oldHist); - sfile->GetObject(tname.c_str(), newHist); - theComp->compare(oldHist, newHist); - -} - - -void CSCOval::plot3x3(string histName) -{ - theComp->openPage(histName, 3, 3); - for(int i = 1; i <=9; ++i) - { - strstream hist; - hist << histName << i; - process(hist.str()); - } - theComp->closePage(); -} - - -void CSCOval::plot(string histName) -{ - theComp->openPage(histName); - process(histName); - theComp->closePage(); -} - - -void CSCOval::runStrips() -{ - plot("CSCPedestal"); - plot("CSCStripDigisPerLayer"); - plot("CSCStripDigisPerEvent"); - plot("CSCStripAmplitude"); - plot("CSCStrip4to5"); - plot("CSCStrip6to5"); - plot3x3("CSCStripDigiResolution"); - plot3x3("CSCWireDigiTimeType"); - plot3x3("CSCComparatorDigiTimeType"); -} - - -void CSCOval::runWires() -{ -} - -void runComparators() -{ -} - - -void CSCOval::run() -{ - runStrips(); - runWires(); - runComparators(); -} - - diff --git a/Validation/MuonCSCDigis/test/HistoCompare.C b/Validation/MuonCSCDigis/test/HistoCompare.C deleted file mode 100644 index 590db59747f02..0000000000000 --- a/Validation/MuonCSCDigis/test/HistoCompare.C +++ /dev/null @@ -1,123 +0,0 @@ -#include "TCanvas.h" -#include <strstream> -#include "TString.h" -#include "TH1.h" -#include "TH2.h" -#include "TProfile.h" -#include "TPostScript.h" -#include "TText.h" -#include "TCanvas.h" -#include <iostream> - -class HistoCompare { -public: - virtual void compare(TH1 * oldHisto , TH1 * newHisto) - { - Double_t *res; - Double_t mypv = oldHisto->Chi2Test( newHisto,"UU", res); - - std::strstream buf; - std::string value; - buf<<"PV="<<mypv<<std::endl; - buf>>value; - - // myte->DrawTextNDC(0.2,0.7, value.c_str()); - - std::cout << "[OVAL] " << oldHisto->GetName() << " PV = " << mypv << std::endl; - return; - } - - virtual void fits(TH1 * oldHisto , TH1 * newHisto) - { - oldHisto->Fit("gaus"); - newHisto->Fit("gaus"); - TF1 *f1 = oldHisto->GetFunction("gaus"); - TF2 *f2 = newHisto->GetFunction("gaus"); - cout << "OLD: mean " << f1->GetParameter(1) << " sigma " << f1->GetParameter(2) << endl; - cout << "NEW: mean " << f1->GetParameter(1) << " sigma " << f1->GetParameter(2) << endl; - } - - virtual void openPage(string name, int nx=1, int ny=1) {} - virtual void closePage() {} - -}; - - -class HistoCompareDraw : public HistoCompare -{ -public: - HistoCompareDraw() : theCanvas(0), subpad(0) {} - - virtual void compare(TH1 * oldHisto , TH1 * newHisto) { - theCanvas->cd(++subpad); - oldHisto->UseCurrentStyle(); - newHisto->UseCurrentStyle(); - oldHisto->SetLineColor(kRed); - newHisto->SetLineColor(kBlue); - oldHisto->Draw(); - newHisto->Draw("same"); - HistoCompare::compare(oldHisto, newHisto); - } - -protected: - TCanvas * theCanvas; - int subpad; -}; - - -class HistoCompareGif : public HistoCompareDraw -{ -public: - HistoCompareGif(string title, string suffix) - : theTitle(title), - theName(""), - theSuffix(suffix) - { - } - - virtual void openPage(string name, int nx, int ny) { - theCanvas = new TCanvas(theTitle.c_str(), theTitle.c_str(), 800, 600); - theCanvas->Divide(nx, ny); - theName = name + theSuffix + ".gif"; - subpad = 0; - } - - virtual void closePage() { - theCanvas->Print(theName.c_str()); - } - -private: - string theTitle; - string theName; - string theSuffix; -}; - - -class HistoComparePS: public HistoCompareDraw -{ -public: - HistoComparePS(string filename) - : thePostscript( new TPostScript(filename , -112) ) - { - theCanvas = new TCanvas("ps", "ps", 800, 600); - thePostscript->Range(29.7 , 21.0); - } - - HistoComparePS::~HistoComparePS() - { - thePostscript->Close(); - } - - virtual void openPage(string name, int nx=1, int ny=1) { - subpad = 0; - } - - virtual void closePage() { - theCanvas->Update(); - thePostscript->NewPage(); - } - -private: - TPostScript * thePostscript; -}; - diff --git a/Validation/MuonCSCDigis/test/run.csh b/Validation/MuonCSCDigis/test/run.csh deleted file mode 100755 index 1b7ec3fd2e677..0000000000000 --- a/Validation/MuonCSCDigis/test/run.csh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/csh -v - -eval `scramv1 ru -csh` -set suffix = $1 -sed "s/FOO/$suffix/g" cscDigiValidation.cfg >! cscDigiValidation{$suffix}.cfg - -cmsRun cscDigiValidation{$suffix}.cfg - -#root -b -q CSCOval.C\(\"{$suffix}\",\"gif\"\) - diff --git a/Validation/MuonCSCDigis/test/runCSCDigiHarvesting_cfg.py b/Validation/MuonCSCDigis/test/runCSCDigiHarvesting_cfg.py new file mode 100644 index 0000000000000..393bc3e2a3de1 --- /dev/null +++ b/Validation/MuonCSCDigis/test/runCSCDigiHarvesting_cfg.py @@ -0,0 +1,43 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Run3_cff import Run3 + +process = cms.Process('HARVESTING',Run3) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.StandardSequences.DQMSaverAtRunEnd_cff') +process.load('Configuration.StandardSequences.Harvesting_cff') +process.load('DQMOffline.Configuration.DQMOfflineMC_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(-1), + output = cms.optional.untracked.allowed(cms.int32,cms.PSet) +) + +# Input source +process.source = cms.Source("DQMRootSource", + fileNames = cms.untracked.vstring('file:step3_inDQM.root') +) + +# Other statements +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') + +# Path and EndPath definitions +process.harvesting_step = cms.Path(process.cscDigiHarvesting) +process.dqmsave_step = cms.Path(process.DQMSaver) +process.endjob_step = cms.EndPath(process.endOfProcess) + +# Schedule definition +process.schedule = cms.Schedule( + process.harvesting_step, + process.endjob_step, + process.dqmsave_step +) diff --git a/Validation/MuonCSCDigis/test/runCSCDigiValidation_cfg.py b/Validation/MuonCSCDigis/test/runCSCDigiValidation_cfg.py new file mode 100644 index 0000000000000..c5e805acefcad --- /dev/null +++ b/Validation/MuonCSCDigis/test/runCSCDigiValidation_cfg.py @@ -0,0 +1,59 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Run3_cff import Run3 + +process = cms.Process('VALIDATION',Run3) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load("Validation.MuonCSCDigis.cscDigiValidation_cfi") +process.load('Configuration.StandardSequences.DQMSaverAtRunEnd_cff') +process.load('DQMOffline.Configuration.DQMOfflineMC_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(25), + output = cms.optional.untracked.allowed(cms.int32,cms.PSet) +) + +# Input source +process.source = cms.Source( + "PoolSource", + fileNames = cms.untracked.vstring( + "/store/relval/CMSSW_11_2_0_pre7/RelValSingleMuPt10/GEN-SIM-DIGI-RAW/112X_mcRun3_2021_realistic_v8-v1/20000/0ED98457-2CEC-924D-AAFC-4F3F705C2DCC.root" + ), + secondaryFileNames = cms.untracked.vstring() +) + +# Other statements +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') + +process.DQMoutput = cms.OutputModule("DQMRootOutputModule", + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('DQMIO'), + filterName = cms.untracked.string('') + ), + fileName = cms.untracked.string('file:step3_inDQM.root'), + outputCommands = process.DQMEventContent.outputCommands, + splitLevel = cms.untracked.int32(0) +) + +# Path and EndPath definitions +process.validation_step = cms.Path(process.mix * process.cscDigiValidation) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.DQMoutput_step = cms.EndPath(process.DQMoutput) + +# Schedule definition +process.schedule = cms.Schedule( + process.validation_step, + process.endjob_step, + process.DQMoutput_step +) diff --git a/Validation/MuonGEMDigis/plugins/GEMCoPadDigiValidation.cc b/Validation/MuonGEMDigis/plugins/GEMCoPadDigiValidation.cc index f88d7996ec3f8..9c4e46a2bce01 100644 --- a/Validation/MuonGEMDigis/plugins/GEMCoPadDigiValidation.cc +++ b/Validation/MuonGEMDigis/plugins/GEMCoPadDigiValidation.cc @@ -24,7 +24,8 @@ void GEMCoPadDigiValidation::bookHistograms(DQMStore::IBooker& booker, for (const auto& region : gem->regions()) { Int_t region_id = region->region(); - me_occ_zr_[region_id] = bookZROccupancy(booker, region_id, "copad", "CoPad"); + if (detail_plot_) + me_detail_occ_zr_[region_id] = bookZROccupancy(booker, region_id, "copad", "CoPad"); for (const auto& station : region->stations()) { Int_t station_id = station->station(); @@ -50,8 +51,6 @@ void GEMCoPadDigiValidation::bookHistograms(DQMStore::IBooker& booker, Int_t num_pads = etaPartitionVec[0]->npads(); ME2IdsKey key2{region_id, station_id}; - me_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "copad", "CoPad"); - if (detail_plot_) { me_detail_occ_xy_[key2] = bookXYOccupancy(booker, key2, "copad", "CoPad"); @@ -70,6 +69,8 @@ void GEMCoPadDigiValidation::bookHistograms(DQMStore::IBooker& booker, me_detail_occ_pad_[key2] = bookHist1D( booker, key2, "copad_occ_pad", "CoPad Ocupancy per pad number", num_pads, 0.5, num_pads + 0.5, "Pad number"); + + me_detail_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "copad", "CoPad"); } } // station loop } // region loop @@ -104,15 +105,16 @@ void GEMCoPadDigiValidation::analyze(const edm::Event& event, const edm::EventSe } // GEMCoPadDigiCollection::DigiRangeIterator - for (auto range_iter = copad_collection->begin(); range_iter != copad_collection->end(); range_iter++) { - GEMDetId gemid = (*range_iter).first; - const GEMCoPadDigiCollection::Range& range = (*range_iter).second; + for (const auto& copad_pair : *copad_collection) { + GEMDetId gemid = copad_pair.first; + const auto& range = copad_pair.second; Int_t region_id = gemid.region(); Int_t station_id = gemid.station(); Int_t ring_id = gemid.ring(); Int_t layer_id = gemid.layer(); Int_t chamber_id = gemid.chamber(); + Int_t num_layers = gemid.nlayers(); ME2IdsKey key2{region_id, station_id}; @@ -184,16 +186,16 @@ void GEMCoPadDigiValidation::analyze(const edm::Event& event, const edm::EventSe Float_t g_y = gp1.y(); // Fill normal plots. - me_occ_zr_[region_id]->Fill(std::fabs(g_z1), g_r1); - me_occ_zr_[region_id]->Fill(std::fabs(g_z2), g_r2); - Int_t bin_x = getDetOccBinX(chamber_id, layer_id); - me_occ_det_[key2]->Fill(bin_x, roll_id); - me_occ_det_[key2]->Fill(bin_x + 1, roll_id); + Int_t bin_x = getDetOccBinX(num_layers, chamber_id, layer_id); // Fill detail plots. if (detail_plot_) { + me_detail_occ_zr_[region_id]->Fill(std::fabs(g_z1), g_r1); + me_detail_occ_zr_[region_id]->Fill(std::fabs(g_z2), g_r2); me_detail_occ_xy_[key2]->Fill(g_x, g_y); + me_detail_occ_det_[key2]->Fill(bin_x, roll_id); + me_detail_occ_det_[key2]->Fill(bin_x + 1, roll_id); me_detail_occ_phi_pad_[key2]->Fill(g_phi, pad1); me_detail_occ_pad_[key2]->Fill(pad1); me_detail_bx_[key2]->Fill(bx1); diff --git a/Validation/MuonGEMDigis/plugins/GEMCoPadDigiValidation.h b/Validation/MuonGEMDigis/plugins/GEMCoPadDigiValidation.h index 8749ac8b61efd..92257d0a1b183 100644 --- a/Validation/MuonGEMDigis/plugins/GEMCoPadDigiValidation.h +++ b/Validation/MuonGEMDigis/plugins/GEMCoPadDigiValidation.h @@ -13,8 +13,8 @@ class GEMCoPadDigiValidation : public GEMBaseValidation { private: // - MEMap1Ids me_occ_zr_; - MEMap2Ids me_occ_det_; + MEMap1Ids me_detail_occ_zr_; + MEMap2Ids me_detail_occ_det_; MEMap2Ids me_detail_occ_xy_; MEMap2Ids me_detail_occ_phi_pad_; MEMap2Ids me_detail_occ_pad_; diff --git a/Validation/MuonGEMDigis/plugins/GEMPadDigiClusterValidation.cc b/Validation/MuonGEMDigis/plugins/GEMPadDigiClusterValidation.cc index f47ad2cab03ca..64fde1839ace2 100644 --- a/Validation/MuonGEMDigis/plugins/GEMPadDigiClusterValidation.cc +++ b/Validation/MuonGEMDigis/plugins/GEMPadDigiClusterValidation.cc @@ -5,6 +5,14 @@ GEMPadDigiClusterValidation::GEMPadDigiClusterValidation(const edm::ParameterSet : GEMBaseValidation(pset, "GEMPadDigiClusterValidation") { const auto& pad_cluster_pset = pset.getParameterSet("gemPadCluster"); const auto& pad_cluster_tag = pad_cluster_pset.getParameter<edm::InputTag>("inputTag"); + + const auto& simhit_pset = pset.getParameterSet("gemSimHit"); + const auto& simhit_tag = simhit_pset.getParameter<edm::InputTag>("inputTag"); + simhit_token_ = consumes<edm::PSimHitContainer>(simhit_tag); + + const auto& digisimlink_tag = pset.getParameter<edm::InputTag>("gemDigiSimLink"); + digisimlink_token_ = consumes<edm::DetSetVector<GEMDigiSimLink>>(digisimlink_tag); + pad_cluster_token_ = consumes<GEMPadDigiClusterCollection>(pad_cluster_tag); geomToken_ = esConsumes<GEMGeometry, MuonGeometryRecord>(); geomTokenBeginRun_ = esConsumes<GEMGeometry, MuonGeometryRecord, edm::Transition::BeginRun>(); @@ -14,19 +22,31 @@ void GEMPadDigiClusterValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run const& Run, edm::EventSetup const& setup) { const GEMGeometry* gem = &setup.getData(geomTokenBeginRun_); + // NOTE Occupancy + booker.setCurrentFolder("MuonGEMDigisV/GEMDigisTask/PadCluster/ClusterSize"); + + TString cls_title = "Cluster Size Distribution"; + TString cls_x_title = "Cluster size"; + + me_cls_ = booker.book1D("cls", cls_title + ";" + cls_x_title + ";" + "Entries", 10, 0.5, 10.5); // NOTE Occupancy booker.setCurrentFolder("MuonGEMDigisV/GEMDigisTask/PadCluster/Occupancy"); for (const auto& region : gem->regions()) { Int_t region_id = region->region(); - me_occ_zr_.emplace(region_id, bookZROccupancy(booker, region_id, "pad", "Pad Cluster")); + if (detail_plot_) + me_detail_occ_zr_.emplace(region_id, bookZROccupancy(booker, region_id, "pad", "Pad Cluster")); for (const auto& station : region->stations()) { Int_t station_id = station->station(); ME2IdsKey key2{region_id, station_id}; - me_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "pad", "Pad Cluster"); + if (detail_plot_) { + me_detail_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "pad", "Pad Cluster"); + me_detail_pad_cluster_occ_det_[key2] = + bookDetectorOccupancy(booker, key2, station, "matched_pad", "Pad Cluster"); + } const auto& superChamberVec = station->superChambers(); if (superChamberVec.empty()) { @@ -53,6 +73,21 @@ void GEMPadDigiClusterValidation::bookHistograms(DQMStore::IBooker& booker, } Int_t num_pads = etaPartitionVec.front()->npads(); + me_total_cluster_[key3] = + bookHist1D(booker, key3, "total_pad_cluster", "Number of pad digi cluster per event", 21, -0.5, 20.5); + + me_pad_cluster_occ_eta_[key3] = bookHist1D(booker, + key3, + "matched_pad_occ_eta", + "Matched Pad Cluster Eta Occupancy", + 16, + eta_range_[station_id * 2 + 0], + eta_range_[station_id * 2 + 1], + "#eta"); + + me_pad_cluster_occ_phi_[key3] = bookHist1D( + booker, key3, "matched_pad_occ_phi", "Matched Pad Cluster Phi Occupancy", 36, -5, 355, "#phi [degrees]"); + if (detail_plot_) { me_detail_occ_xy_[key3] = bookXYOccupancy(booker, key3, "pad", "Pad Cluster"); @@ -110,6 +145,16 @@ void GEMPadDigiClusterValidation::bookHistograms(DQMStore::IBooker& booker, GEMPadDigiClusterValidation::~GEMPadDigiClusterValidation() {} +Bool_t GEMPadDigiClusterValidation::matchClusterAgainstSimHit(GEMPadDigiClusterCollection::const_iterator cluster, + Int_t simhit_pad) { + for (auto pad : cluster->pads()) { + if (pad == simhit_pad) { + return true; + } + } + return false; +} + void GEMPadDigiClusterValidation::analyze(const edm::Event& event, const edm::EventSetup& setup) { const GEMGeometry* gem = &setup.getData(geomToken_); @@ -120,6 +165,21 @@ void GEMPadDigiClusterValidation::analyze(const edm::Event& event, const edm::Ev return; } + edm::Handle<edm::DetSetVector<GEMDigiSimLink>> digiSimLink; + event.getByToken(digisimlink_token_, digiSimLink); + if (not digiSimLink.isValid()) { + edm::LogError(kLogCategory_) << "Failed to get GEMDigiSimLink." << std::endl; + return; + } + + edm::Handle<edm::PSimHitContainer> simhit_container; + event.getByToken(simhit_token_, simhit_container); + if (not simhit_container.isValid()) { + edm::LogError(kLogCategory_) << "Failed to get PSimHitContainer." << std::endl; + return; + } + + std::map<ME3IdsKey, Int_t> total_cluster; for (auto range_iter = collection->begin(); range_iter != collection->end(); range_iter++) { GEMDetId gemid = (*range_iter).first; const auto& range = (*range_iter).second; @@ -137,7 +197,8 @@ void GEMPadDigiClusterValidation::analyze(const edm::Event& event, const edm::Ev Int_t station_id = gemid.station(); Int_t layer_id = gemid.layer(); Int_t chamber_id = gemid.chamber(); - Int_t roll_id = gemid.roll(); + Int_t ieta = gemid.ieta(); + Int_t num_layers = gemid.nlayers(); ME2IdsKey key2(region_id, station_id); ME3IdsKey key3(region_id, station_id, layer_id); @@ -154,8 +215,11 @@ void GEMPadDigiClusterValidation::analyze(const edm::Event& event, const edm::Ev } Int_t pad = padsVec[0]; + total_cluster[key3]++; + // bunch crossing Int_t bx = digi->bx(); + Int_t cls = digi->pads().size(); const LocalPoint& local_pos = roll->centreOfPad(pad); const GlobalPoint& global_pos = surface.toGlobal(local_pos); @@ -166,12 +230,12 @@ void GEMPadDigiClusterValidation::analyze(const edm::Event& event, const edm::Ev Float_t g_y = global_pos.y(); Float_t g_abs_z = std::fabs(global_pos.z()); - me_occ_zr_[region_id]->Fill(g_abs_z, g_r); - - Int_t bin_x = getDetOccBinX(chamber_id, layer_id); - me_occ_det_[key2]->Fill(bin_x, roll_id); + Int_t bin_x = getDetOccBinX(num_layers, chamber_id, layer_id); + me_cls_->Fill(cls); if (detail_plot_) { + me_detail_occ_zr_[region_id]->Fill(g_abs_z, g_r); + me_detail_occ_det_[key2]->Fill(bin_x, ieta); me_detail_occ_xy_[key3]->Fill(g_x, g_y); me_detail_occ_phi_pad_[key3]->Fill(g_phi, pad); me_detail_occ_pad_[key3]->Fill(pad); @@ -179,4 +243,86 @@ void GEMPadDigiClusterValidation::analyze(const edm::Event& event, const edm::Ev } // detail_plot_ } } // end loop over range iters + + for (const auto& region : gem->regions()) { + Int_t region_id = region->region(); + for (const auto& station : region->stations()) { + Int_t station_id = station->station(); + const auto& superChamberVec = station->superChambers(); + if (superChamberVec.empty()) { + edm::LogError(kLogCategory_) << "Super chambers missing for region = " << region_id + << " and station = " << station_id; + continue; + } + const GEMSuperChamber* super_chamber = superChamberVec.front(); + if (super_chamber == nullptr) { + edm::LogError(kLogCategory_) << "Failed to find super chamber for region = " << region_id + << " and station = " << station_id; + continue; + } + for (const auto& chamber : super_chamber->chambers()) { + Int_t layer_id = chamber->id().layer(); + ME3IdsKey key3{region_id, station_id, layer_id}; + me_total_cluster_[key3]->Fill(total_cluster[key3]); + } + } + } + + // NOTE + for (const auto& simhit : *simhit_container.product()) { + if (not isMuonSimHit(simhit)) + continue; + if (gem->idToDet(simhit.detUnitId()) == nullptr) { + edm::LogError(kLogCategory_) << "SimHit did not match with GEMGeometry." << std::endl; + continue; + } + + GEMDetId simhit_gemid(simhit.detUnitId()); + + Int_t region_id = simhit_gemid.region(); + Int_t station_id = simhit_gemid.station(); + Int_t layer_id = simhit_gemid.layer(); + Int_t chamber_id = simhit_gemid.chamber(); + Int_t ieta = simhit_gemid.ieta(); + Int_t num_layers = simhit_gemid.nlayers(); + + ME2IdsKey key2{region_id, station_id}; + ME3IdsKey key3{region_id, station_id, layer_id}; + + const GEMEtaPartition* roll = gem->etaPartition(simhit_gemid); + + const auto& simhit_local_pos = simhit.localPosition(); + const auto& simhit_global_pos = roll->surface().toGlobal(simhit_local_pos); + + Float_t simhit_g_eta = std::abs(simhit_global_pos.eta()); + Float_t simhit_g_phi = toDegree(simhit_global_pos.phi()); + + auto simhit_trackId = simhit.trackId(); + + Int_t bin_x = getDetOccBinX(num_layers, chamber_id, layer_id); + + auto links = digiSimLink->find(simhit_gemid); + if (links == digiSimLink->end()) + continue; + + Int_t simhit_strip = -1; + for (const auto& link : *links) { + if (simhit_trackId == link.getTrackId()) { + simhit_strip = link.getStrip(); + break; + } + } + Int_t simhit_pad = roll->padOfStrip(simhit_strip); + auto range = collection->get(simhit_gemid); + for (auto cluster = range.first; cluster != range.second; ++cluster) { + if (matchClusterAgainstSimHit(cluster, simhit_pad)) { + me_pad_cluster_occ_eta_[key3]->Fill(simhit_g_eta); + me_pad_cluster_occ_phi_[key3]->Fill(simhit_g_phi); + if (detail_plot_) { + me_detail_pad_cluster_occ_det_[key2]->Fill(bin_x, ieta); + } + break; + } + } + } // simhit_container loop } diff --git a/Validation/MuonGEMDigis/plugins/GEMPadDigiClusterValidation.h b/Validation/MuonGEMDigis/plugins/GEMPadDigiClusterValidation.h index b8f6baacd6fcf..856089c9628d4 100644 --- a/Validation/MuonGEMDigis/plugins/GEMPadDigiClusterValidation.h +++ b/Validation/MuonGEMDigis/plugins/GEMPadDigiClusterValidation.h @@ -4,6 +4,9 @@ #include "Validation/MuonGEMHits/interface/GEMBaseValidation.h" #include "DataFormats/GEMDigi/interface/GEMPadDigiClusterCollection.h" +#include "DataFormats/Common/interface/DetSetVector.h" +#include "SimDataFormats/GEMDigiSimLink/interface/GEMDigiSimLink.h" + class GEMPadDigiClusterValidation : public GEMBaseValidation { public: explicit GEMPadDigiClusterValidation(const edm::ParameterSet&); @@ -12,17 +15,26 @@ class GEMPadDigiClusterValidation : public GEMBaseValidation { void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override; private: - MEMap2Ids me_occ_det_; - MEMap1Ids me_occ_zr_; + Bool_t matchClusterAgainstSimHit(GEMPadDigiClusterCollection::const_iterator, Int_t); + + edm::EDGetTokenT<GEMPadDigiClusterCollection> pad_cluster_token_; + edm::EDGetTokenT<edm::PSimHitContainer> simhit_token_; + edm::EDGetTokenT<edm::DetSetVector<GEMDigiSimLink>> digisimlink_token_; + edm::ESGetToken<GEMGeometry, MuonGeometryRecord> geomToken_; + edm::ESGetToken<GEMGeometry, MuonGeometryRecord> geomTokenBeginRun_; + + MonitorElement* me_cls_; + MEMap3Ids me_total_cluster_; + MEMap3Ids me_pad_cluster_occ_eta_; + MEMap3Ids me_pad_cluster_occ_phi_; + MEMap2Ids me_detail_occ_det_; + MEMap2Ids me_detail_pad_cluster_occ_det_; + MEMap1Ids me_detail_occ_zr_; MEMap3Ids me_detail_occ_xy_; MEMap3Ids me_detail_occ_phi_pad_; MEMap3Ids me_detail_occ_pad_; MEMap3Ids me_detail_bx_; - - edm::EDGetTokenT<GEMPadDigiClusterCollection> pad_cluster_token_; - edm::ESGetToken<GEMGeometry, MuonGeometryRecord> geomToken_; - edm::ESGetToken<GEMGeometry, MuonGeometryRecord> geomTokenBeginRun_; }; #endif // Validation_MuonGEMDigis_GEMPadDigiClusterValidation_h diff --git a/Validation/MuonGEMDigis/plugins/GEMPadDigiValidation.cc b/Validation/MuonGEMDigis/plugins/GEMPadDigiValidation.cc index 4b38ddc96d5a1..49b75e18f0e19 100644 --- a/Validation/MuonGEMDigis/plugins/GEMPadDigiValidation.cc +++ b/Validation/MuonGEMDigis/plugins/GEMPadDigiValidation.cc @@ -5,6 +5,14 @@ GEMPadDigiValidation::GEMPadDigiValidation(const edm::ParameterSet& pset) const auto& pad_pset = pset.getParameterSet("gemPadDigi"); const auto& pad_tag = pad_pset.getParameter<edm::InputTag>("inputTag"); pad_token_ = consumes<GEMPadDigiCollection>(pad_tag); + + const auto& simhit_pset = pset.getParameterSet("gemSimHit"); + const auto& simhit_tag = simhit_pset.getParameter<edm::InputTag>("inputTag"); + simhit_token_ = consumes<edm::PSimHitContainer>(simhit_tag); + + const auto& digisimlink_tag = pset.getParameter<edm::InputTag>("gemDigiSimLink"); + digisimlink_token_ = consumes<edm::DetSetVector<GEMDigiSimLink>>(digisimlink_tag); + geomToken_ = esConsumes<GEMGeometry, MuonGeometryRecord>(); geomTokenBeginRun_ = esConsumes<GEMGeometry, MuonGeometryRecord, edm::Transition::BeginRun>(); } @@ -20,13 +28,17 @@ void GEMPadDigiValidation::bookHistograms(DQMStore::IBooker& booker, for (const auto& region : gem->regions()) { Int_t region_id = region->region(); - me_occ_zr_[region_id] = bookZROccupancy(booker, region_id, "pad", "Pad"); + if (detail_plot_) + me_detail_occ_zr_[region_id] = bookZROccupancy(booker, region_id, "pad", "Pad"); for (const auto& station : region->stations()) { Int_t station_id = station->station(); ME2IdsKey key2(region_id, station_id); - me_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "pad", "Pad"); + if (detail_plot_) { + me_detail_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "pad", "Pad"); + me_detail_pad_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "matched_pad", "Matched Pad"); + } const auto& superChamberVec = station->superChambers(); if (superChamberVec.empty()) { @@ -53,6 +65,21 @@ void GEMPadDigiValidation::bookHistograms(DQMStore::IBooker& booker, } Int_t num_pads = etaPartitionVec.front()->npads(); + me_occ_total_pad_[key3] = + bookHist1D(booker, key3, "total_pads_per_event", "Number of pad digis per event", 51, -0.5, 50); + + me_pad_occ_eta_[key3] = bookHist1D(booker, + key3, + "matched_pad_occ_eta", + "Matched Pad Eta Occupancy", + 16, + eta_range_[station_id * 2 + 0], + eta_range_[station_id * 2 + 1], + "#eta"); + + me_pad_occ_phi_[key3] = + bookHist1D(booker, key3, "matched_pad_occ_phi", "Matched Pad Phi Occupancy", 36, -5, 355, "#phi [degrees]"); + if (detail_plot_) { me_detail_occ_xy_[key3] = bookXYOccupancy(booker, key3, "pad", "Pad"); @@ -120,10 +147,24 @@ void GEMPadDigiValidation::analyze(const edm::Event& event, const edm::EventSetu return; } - // type of range_iter: GEMPadDigiCollection::DigiRangeIterator - for (auto range_iter = collection->begin(); range_iter != collection->end(); range_iter++) { - GEMDetId gemid = (*range_iter).first; - const auto& range = (*range_iter).second; + edm::Handle<edm::DetSetVector<GEMDigiSimLink>> digiSimLink; + event.getByToken(digisimlink_token_, digiSimLink); + if (not digiSimLink.isValid()) { + edm::LogError(kLogCategory_) << "Failed to get GEMDigiSimLink." << std::endl; + return; + } + + edm::Handle<edm::PSimHitContainer> simhit_container; + event.getByToken(simhit_token_, simhit_container); + if (not simhit_container.isValid()) { + edm::LogError(kLogCategory_) << "Failed to get PSimHitContainer." << std::endl; + return; + } + + std::map<ME3IdsKey, Int_t> total_pad; + for (const auto& pad_pair : *collection) { + GEMDetId gemid = pad_pair.first; + const auto& range = pad_pair.second; if (gem->idToDet(gemid) == nullptr) { edm::LogError(kLogCategory_) << "Getting DetId failed. Discard this gem pad hit. " @@ -138,7 +179,8 @@ void GEMPadDigiValidation::analyze(const edm::Event& event, const edm::EventSetu Int_t station_id = gemid.station(); Int_t layer_id = gemid.layer(); Int_t chamber_id = gemid.chamber(); - Int_t roll_id = gemid.roll(); + Int_t ieta = gemid.ieta(); + Int_t num_layers = gemid.nlayers(); ME2IdsKey key2(region_id, station_id); ME3IdsKey key3(region_id, station_id, layer_id); @@ -148,6 +190,8 @@ void GEMPadDigiValidation::analyze(const edm::Event& event, const edm::EventSetu if (gemid.isGE21() and digi->nPartitions() == GEMPadDigi::GE21SplitStrip) continue; + total_pad[key3]++; + Int_t pad = digi->pad(); Int_t bx = digi->bx(); @@ -160,17 +204,98 @@ void GEMPadDigiValidation::analyze(const edm::Event& event, const edm::EventSetu Float_t g_y = global_pos.y(); Float_t g_abs_z = std::fabs(global_pos.z()); - me_occ_zr_[region_id]->Fill(g_abs_z, g_r); - - Int_t bin_x = getDetOccBinX(chamber_id, layer_id); - me_occ_det_[key2]->Fill(bin_x, roll_id); + Int_t bin_x = getDetOccBinX(num_layers, chamber_id, layer_id); if (detail_plot_) { + me_detail_occ_zr_[region_id]->Fill(g_abs_z, g_r); me_detail_occ_xy_[key3]->Fill(g_x, g_y); me_detail_occ_phi_pad_[key3]->Fill(g_phi, pad); me_detail_occ_pad_[key3]->Fill(pad); + me_detail_occ_det_[key2]->Fill(bin_x, ieta); me_detail_bx_[key3]->Fill(bx); } // if detail_plot } // digi loop } // range loop + + for (const auto& region : gem->regions()) { + Int_t region_id = region->region(); + for (const auto& station : region->stations()) { + Int_t station_id = station->station(); + const auto& superChamberVec = station->superChambers(); + if (superChamberVec.empty()) { + edm::LogError(kLogCategory_) << "Super chambers missing for region = " << region_id + << " and station = " << station_id; + continue; + } + const GEMSuperChamber* super_chamber = superChamberVec.front(); + if (super_chamber == nullptr) { + edm::LogError(kLogCategory_) << "Failed to find super chamber for region = " << region_id + << " and station = " << station_id; + continue; + } + for (const auto& chamber : super_chamber->chambers()) { + Int_t layer_id = chamber->id().layer(); + ME3IdsKey key3{region_id, station_id, layer_id}; + me_occ_total_pad_[key3]->Fill(total_pad[key3]); + } + } + } + + // NOTE + for (const auto& simhit : *simhit_container.product()) { + if (not isMuonSimHit(simhit)) + continue; + if (gem->idToDet(simhit.detUnitId()) == nullptr) { + edm::LogError(kLogCategory_) << "SimHit did not match with GEMGeometry." << std::endl; + continue; + } + + GEMDetId simhit_gemid(simhit.detUnitId()); + + Int_t region_id = simhit_gemid.region(); + Int_t station_id = simhit_gemid.station(); + Int_t layer_id = simhit_gemid.layer(); + Int_t chamber_id = simhit_gemid.chamber(); + Int_t ieta = simhit_gemid.ieta(); + Int_t num_layers = simhit_gemid.nlayers(); + + ME2IdsKey key2{region_id, station_id}; + ME3IdsKey key3{region_id, station_id, layer_id}; + + const GEMEtaPartition* roll = gem->etaPartition(simhit_gemid); + + const auto& simhit_local_pos = simhit.localPosition(); + const auto& simhit_global_pos = roll->surface().toGlobal(simhit_local_pos); + + Float_t simhit_g_eta = std::abs(simhit_global_pos.eta()); + Float_t simhit_g_phi = toDegree(simhit_global_pos.phi()); + + auto simhit_trackId = simhit.trackId(); + + Int_t bin_x = getDetOccBinX(num_layers, chamber_id, layer_id); + + auto links = digiSimLink->find(simhit_gemid); + if (links == digiSimLink->end()) + continue; + + Int_t simhit_strip = -1; + for (const auto& link : *links) { + if (simhit_trackId == link.getTrackId()) { + simhit_strip = link.getStrip(); + break; + } + } + Int_t simhit_pad = roll->padOfStrip(simhit_strip); + auto range = collection->get(simhit_gemid); + for (auto pad = range.first; pad != range.second; ++pad) { + if (pad->pad() == simhit_pad) { + me_pad_occ_eta_[key3]->Fill(simhit_g_eta); + me_pad_occ_phi_[key3]->Fill(simhit_g_phi); + if (detail_plot_) { + me_detail_pad_occ_det_[key2]->Fill(bin_x, ieta); + } + break; + } + } + } // simhit_container loop } diff --git a/Validation/MuonGEMDigis/plugins/GEMPadDigiValidation.h b/Validation/MuonGEMDigis/plugins/GEMPadDigiValidation.h index f0e13d2fc5c26..f9e157c4a62f1 100644 --- a/Validation/MuonGEMDigis/plugins/GEMPadDigiValidation.h +++ b/Validation/MuonGEMDigis/plugins/GEMPadDigiValidation.h @@ -4,6 +4,9 @@ #include "Validation/MuonGEMHits/interface/GEMBaseValidation.h" #include "DataFormats/GEMDigi/interface/GEMPadDigiCollection.h" +#include "DataFormats/Common/interface/DetSetVector.h" +#include "SimDataFormats/GEMDigiSimLink/interface/GEMDigiSimLink.h" + class GEMPadDigiValidation : public GEMBaseValidation { public: explicit GEMPadDigiValidation(const edm::ParameterSet&); @@ -14,13 +17,19 @@ class GEMPadDigiValidation : public GEMBaseValidation { private: // NOTE Parameters edm::EDGetTokenT<GEMPadDigiCollection> pad_token_; + edm::EDGetTokenT<edm::PSimHitContainer> simhit_token_; + edm::EDGetTokenT<edm::DetSetVector<GEMDigiSimLink>> digisimlink_token_; edm::ESGetToken<GEMGeometry, MuonGeometryRecord> geomToken_; edm::ESGetToken<GEMGeometry, MuonGeometryRecord> geomTokenBeginRun_; // NOTE MonitorElemnts - MEMap2Ids me_occ_det_; - MEMap1Ids me_occ_zr_; + MEMap3Ids me_occ_total_pad_; + MEMap3Ids me_pad_occ_eta_; + MEMap3Ids me_pad_occ_phi_; + MEMap2Ids me_detail_occ_det_; + MEMap2Ids me_detail_pad_occ_det_; MEMap3Ids me_detail_occ_xy_; + MEMap1Ids me_detail_occ_zr_; MEMap3Ids me_detail_occ_phi_pad_; MEMap3Ids me_detail_occ_pad_; MEMap3Ids me_detail_bx_; diff --git a/Validation/MuonGEMDigis/plugins/GEMStripDigiValidation.cc b/Validation/MuonGEMDigis/plugins/GEMStripDigiValidation.cc index beb4b50313f00..5f16dae976aff 100644 --- a/Validation/MuonGEMDigis/plugins/GEMStripDigiValidation.cc +++ b/Validation/MuonGEMDigis/plugins/GEMStripDigiValidation.cc @@ -10,6 +10,10 @@ GEMStripDigiValidation::GEMStripDigiValidation(const edm::ParameterSet& pset) const auto& simhit_pset = pset.getParameterSet("gemSimHit"); const auto& simhit_tag = simhit_pset.getParameter<edm::InputTag>("inputTag"); simhit_token_ = consumes<edm::PSimHitContainer>(simhit_tag); + + const auto& digisimlink_tag = pset.getParameter<edm::InputTag>("gemDigiSimLink"); + digisimlink_token_ = consumes<edm::DetSetVector<GEMDigiSimLink>>(digisimlink_tag); + geomToken_ = esConsumes<GEMGeometry, MuonGeometryRecord>(); geomTokenBeginRun_ = esConsumes<GEMGeometry, MuonGeometryRecord, edm::Transition::BeginRun>(); } @@ -28,84 +32,65 @@ void GEMStripDigiValidation::bookHistograms(DQMStore::IBooker& booker, me_bx_ = booker.book1D("strip_bx", "Strip Digi Bunch Crossing", 5, -2.5, 2.5); - if (detail_plot_) { - for (const auto& region : gem->regions()) { - if (region == nullptr) { - edm::LogError(kLogCategory_) << "Null region"; + for (const auto& region : gem->regions()) { + if (region == nullptr) { + edm::LogError(kLogCategory_) << "Null region"; + continue; + } + Int_t region_id = region->region(); + for (const auto& station : region->stations()) { + if (station == nullptr) { + edm::LogError(kLogCategory_) << "Null station for region = " << region_id; continue; } - Int_t region_id = region->region(); - for (const auto& station : region->stations()) { - if (station == nullptr) { - edm::LogError(kLogCategory_) << "Null station for region = " << region_id; - continue; - } - Int_t station_id = station->station(); + Int_t station_id = station->station(); - const auto& superChamberVec = station->superChambers(); - if (superChamberVec.empty()) { - edm::LogError(kLogCategory_) << "Super chambers missing for region = " << region_id - << " and station = " << station_id; - continue; - } - const GEMSuperChamber* super_chamber = superChamberVec.front(); - if (super_chamber == nullptr) { - edm::LogError(kLogCategory_) << "Failed to find super chamber for region = " << region_id - << " and station = " << station_id; - continue; - } - for (const auto& chamber : super_chamber->chambers()) { - Int_t layer_id = chamber->id().layer(); - ME3IdsKey key3(region_id, station_id, layer_id); + const auto& superChamberVec = station->superChambers(); + if (superChamberVec.empty()) { + edm::LogError(kLogCategory_) << "Super chambers missing for region = " << region_id + << " and station = " << station_id; + continue; + } + const GEMSuperChamber* super_chamber = superChamberVec.front(); + if (super_chamber == nullptr) { + edm::LogError(kLogCategory_) << "Failed to find super chamber for region = " << region_id + << " and station = " << station_id; + continue; + } + for (const auto& chamber : super_chamber->chambers()) { + Int_t layer_id = chamber->id().layer(); + ME3IdsKey key3(region_id, station_id, layer_id); - me_detail_bx_[key3] = - bookHist1D(booker, key3, "strip_bx", "Strip Digi Bunch Crossing", 5, -2.5, 2.5, "Bunch crossing"); - } // chamber loop - } // station loop - } // region loop - } // detail plot + me_bx_layer_[key3] = + bookHist1D(booker, key3, "strip_bx", "Strip Digi Bunch Crossing", 5, -2.5, 2.5, "Bunch crossing"); + } // chamber loop + } // station loop + } // region loop // NOTE Occupancy booker.setCurrentFolder("MuonGEMDigisV/GEMDigisTask/Strip/Occupancy"); + me_total_strip_ = booker.book1D("total_strips_per_event", "Number of strip digi per event", 50, -0.5, 395.5); + for (const auto& region : gem->regions()) { Int_t region_id = region->region(); - me_occ_zr_[region_id] = bookZROccupancy(booker, region_id, "strip", "Strip Digi"); - - // occupancy plots for eta efficiency - me_simhit_occ_eta_[region_id] = bookHist1D(booker, - region_id, - "muon_simhit_occ_eta", - "Muon SimHit Eta Occupancy", - 50, - eta_range_[0], - eta_range_[1], - "|#eta|"); - - me_strip_occ_eta_[region_id] = bookHist1D(booker, - region_id, - "matched_strip_occ_eta", - "Matched Strip Digi Eta Occupancy", - 50, - eta_range_[0], - eta_range_[1], - "|#eta|"); + if (detail_plot_) + me_detail_occ_zr_[region_id] = bookZROccupancy(booker, region_id, "strip", "Strip Digi"); + for (const auto& station : region->stations()) { Int_t station_id = station->station(); ME2IdsKey key2{region_id, station_id}; - me_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "strip", "Strip Digi"); - - me_simhit_occ_phi_[key2] = - bookHist1D(booker, key2, "muon_simhit_occ_phi", "Muon SimHit Phi Occupancy", 51, -M_PI, M_PI, "#phi"); - - me_strip_occ_phi_[key2] = bookHist1D( - booker, key2, "matched_strip_occ_phi", "Matched Strip Digi Phi Occupancy", 51, -M_PI, M_PI, "#phi"); + if (detail_plot_) { + me_detail_total_strip_[key2] = + bookHist1D(booker, key2, "total_strips_per_event", "Number of strip digs per event", 50, -0.5, 99.5); - me_simhit_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "muon_simhit", "Muon SimHit"); + me_detail_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "strip", "Strip Digi"); - me_strip_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "matched_strip", "Matched Strip Digi"); + me_detail_strip_occ_det_[key2] = + bookDetectorOccupancy(booker, key2, station, "matched_strip", "Matched Strip Digi"); + } const auto& superChamberVec = station->superChambers(); if (superChamberVec.empty() || superChamberVec[0] == nullptr) { @@ -121,16 +106,31 @@ void GEMStripDigiValidation::bookHistograms(DQMStore::IBooker& booker, Int_t layer_id = chamber->id().layer(); ME3IdsKey key3{region_id, station_id, layer_id}; + const auto& etaPartitionsVec = chamber->etaPartitions(); + if (etaPartitionsVec.empty() || etaPartitionsVec.front() == nullptr) { + edm::LogError(kLogCategory_) + << "Eta partition missing or null for region, station, super chamber, chamber = (" << region_id << ", " + << station_id << ", " << superChamberVec[0]->id() << ", " << chamber->id() << ")"; + continue; + } + + me_occ_pid_[key3] = bookPIDHist(booker, key3, "strip_occ_pid", "Number of entreis for each particle"); + if (detail_plot_) { - const auto& etaPartitionsVec = chamber->etaPartitions(); - if (etaPartitionsVec.empty() || etaPartitionsVec.front() == nullptr) { - edm::LogError(kLogCategory_) - << "Eta partition missing or null for region, station, super chamber, chamber = (" << region_id - << ", " << station_id << ", " << superChamberVec[0]->id() << ", " << chamber->id() << ")"; - continue; - } Int_t num_strips = etaPartitionsVec.front()->nstrips(); + me_detail_strip_occ_eta_[key3] = bookHist1D(booker, + key3, + "matched_strip_occ_eta", + "Matched Strip Eta Occupancy", + 16, + eta_range_[station_id * 2 + 0], + eta_range_[station_id * 2 + 1], + "#eta"); + + me_detail_strip_occ_phi_[key3] = bookHist1D( + booker, key3, "matched_strip_occ_phi", "Matched Strip Phi Occupancy", 36, -5, 355, "#phi [degrees]"); + me_detail_occ_xy_[key3] = bookXYOccupancy(booker, key3, "strip", "Strip Digi"); me_detail_occ_strip_[key3] = bookHist1D(booker, @@ -141,24 +141,11 @@ void GEMStripDigiValidation::bookHistograms(DQMStore::IBooker& booker, 0.5, num_strips + 0.5, "strip number"); - - me_detail_occ_phi_strip_[key3] = bookHist2D(booker, - key3, - "strip_occ_phi_strip", - "Strip Digi Occupancy", - 280, - -M_PI, - M_PI, - num_strips / 2, - 0, - num_strips, - "#phi [rad]", - "strip number"); - } // detail plot - } // chamber - } // end else - } // station looop - } // region loop + } + } // chamber + } // end else + } // station looop + } // region loop } GEMStripDigiValidation::~GEMStripDigiValidation() {} @@ -169,6 +156,14 @@ void GEMStripDigiValidation::analyze(const edm::Event& event, const edm::EventSe edm::LogError(kLogCategory_) << "Failed to initialize GEM geometry."; return; } + + edm::Handle<edm::DetSetVector<GEMDigiSimLink>> digiSimLink; + event.getByToken(digisimlink_token_, digiSimLink); + if (not digiSimLink.isValid()) { + edm::LogError(kLogCategory_) << "Failed to get GEMDigiSimLink." << std::endl; + return; + } + edm::Handle<edm::PSimHitContainer> simhit_container; event.getByToken(simhit_token_, simhit_container); if (not simhit_container.isValid()) { @@ -184,8 +179,10 @@ void GEMStripDigiValidation::analyze(const edm::Event& event, const edm::EventSe } // NOTE - for (auto range_iter = digi_collection->begin(); range_iter != digi_collection->end(); range_iter++) { - GEMDetId id = (*range_iter).first; + Int_t total_strip = 0; + std::map<ME2IdsKey, Int_t> total_strip_2IdsMap; + for (const auto digi_pair : *digi_collection) { + GEMDetId id = digi_pair.first; if (gem->idToDet(id) == nullptr) { edm::LogError(kLogCategory_) << "Getting DetId failed. Discard this gem strip hit. Maybe it comes " << "from unmatched geometry." << std::endl; @@ -196,46 +193,61 @@ void GEMStripDigiValidation::analyze(const edm::Event& event, const edm::EventSe Int_t layer_id = id.layer(); Int_t station_id = id.station(); Int_t chamber_id = id.chamber(); - Int_t roll_id = id.roll(); + Int_t ieta = id.ieta(); + Int_t num_layers = id.nlayers(); ME2IdsKey key2{region_id, station_id}; ME3IdsKey key3{region_id, station_id, layer_id}; - Int_t bin_x = getDetOccBinX(chamber_id, layer_id); + Int_t bin_x = getDetOccBinX(num_layers, chamber_id, layer_id); const BoundPlane& surface = gem->idToDet(id)->surface(); const GEMEtaPartition* roll = gem->etaPartition(id); - const GEMDigiCollection::Range& range = (*range_iter).second; + const GEMDigiCollection::Range& range = digi_pair.second; + auto links = digiSimLink->find(id); + if (links == digiSimLink->end()) + continue; + for (auto digi = range.first; digi != range.second; ++digi) { + total_strip++; + total_strip_2IdsMap[key2]++; Int_t strip = digi->strip(); Int_t bx = digi->bx(); + bx = bx < -10 ? -10 : bx; + bx = bx > 10 ? 10 : bx; - GlobalPoint strip_global_pos = surface.toGlobal(roll->centreOfStrip(digi->strip())); + GlobalPoint strip_global_pos = surface.toGlobal(roll->centreOfStrip(strip)); + Float_t digi_g_x = strip_global_pos.x(); + Float_t digi_g_y = strip_global_pos.y(); Float_t digi_g_r = strip_global_pos.perp(); Float_t digi_g_abs_z = std::abs(strip_global_pos.z()); me_bx_->Fill(bx); - me_occ_zr_[region_id]->Fill(digi_g_abs_z, digi_g_r), me_occ_det_[key2]->Fill(bin_x, roll_id); + me_bx_layer_[key3]->Fill(bx); if (detail_plot_) { - Float_t digi_g_x = strip_global_pos.x(); - Float_t digi_g_y = strip_global_pos.y(); - Float_t digi_g_phi = strip_global_pos.phi(); - - me_detail_bx_[key3]->Fill(bx); + me_detail_occ_zr_[region_id]->Fill(digi_g_abs_z, digi_g_r); + me_detail_occ_det_[key2]->Fill(bin_x, ieta); me_detail_occ_xy_[key3]->Fill(digi_g_x, digi_g_y); me_detail_occ_strip_[key3]->Fill(strip); - me_detail_occ_phi_strip_[key3]->Fill(digi_g_phi, strip); } } } // range loop + me_total_strip_->Fill(total_strip); + if (detail_plot_) { + for (const auto& region : gem->regions()) { + Int_t region_id = region->region(); + for (const auto& station : region->stations()) { + Int_t station_id = station->station(); + ME2IdsKey key2{region_id, station_id}; + me_detail_total_strip_[key2]->Fill(total_strip_2IdsMap[key2]); + } + } + } // NOTE for (const auto& simhit : *simhit_container.product()) { - if (not isMuonSimHit(simhit)) - continue; - if (gem->idToDet(simhit.detUnitId()) == nullptr) { edm::LogError(kLogCategory_) << "SimHit did not match with GEMGeometry." << std::endl; continue; @@ -247,7 +259,8 @@ void GEMStripDigiValidation::analyze(const edm::Event& event, const edm::EventSe Int_t station_id = simhit_gemid.station(); Int_t layer_id = simhit_gemid.layer(); Int_t chamber_id = simhit_gemid.chamber(); - Int_t roll_id = simhit_gemid.roll(); + Int_t ieta = simhit_gemid.ieta(); + Int_t num_layers = simhit_gemid.nlayers(); ME2IdsKey key2{region_id, station_id}; ME3IdsKey key3{region_id, station_id, layer_id}; @@ -258,21 +271,30 @@ void GEMStripDigiValidation::analyze(const edm::Event& event, const edm::EventSe const auto& simhit_global_pos = roll->surface().toGlobal(simhit_local_pos); Float_t simhit_g_eta = std::abs(simhit_global_pos.eta()); - Float_t simhit_g_phi = simhit_global_pos.phi(); + Float_t simhit_g_phi = toDegree(simhit_global_pos.phi()); - Int_t simhit_strip = roll->strip(simhit_local_pos); + auto simhit_trackId = simhit.trackId(); - Int_t bin_x = getDetOccBinX(chamber_id, layer_id); - me_simhit_occ_eta_[region_id]->Fill(simhit_g_eta); - me_simhit_occ_phi_[key2]->Fill(simhit_g_phi); - me_simhit_occ_det_[key2]->Fill(bin_x, roll_id); + Int_t bin_x = getDetOccBinX(num_layers, chamber_id, layer_id); - auto range = digi_collection->get(simhit_gemid); - for (auto digi = range.first; digi != range.second; ++digi) { - if (simhit_strip == digi->strip()) { - me_strip_occ_eta_[region_id]->Fill(simhit_g_eta); - me_strip_occ_phi_[key2]->Fill(simhit_g_phi); - me_strip_occ_det_[key2]->Fill(bin_x, roll_id); + auto links = digiSimLink->find(simhit_gemid); + if (links == digiSimLink->end()) + continue; + + for (const auto& link : *links) { + if (simhit_trackId == link.getTrackId()) { + Int_t pid = simhit.particleType(); + Int_t pid_idx = getPidIdx(pid); + + me_occ_pid_[key3]->Fill(pid_idx); + + if (detail_plot_) { + if (isMuonSimHit(simhit)) { + me_detail_strip_occ_eta_[key3]->Fill(simhit_g_eta); + me_detail_strip_occ_phi_[key3]->Fill(simhit_g_phi); + me_detail_strip_occ_det_[key2]->Fill(bin_x, ieta); + } + } break; } } diff --git a/Validation/MuonGEMDigis/plugins/GEMStripDigiValidation.h b/Validation/MuonGEMDigis/plugins/GEMStripDigiValidation.h index ba49f0f1cfbd6..ebfa7faccbba9 100644 --- a/Validation/MuonGEMDigis/plugins/GEMStripDigiValidation.h +++ b/Validation/MuonGEMDigis/plugins/GEMStripDigiValidation.h @@ -4,6 +4,9 @@ #include "Validation/MuonGEMHits/interface/GEMBaseValidation.h" #include "DataFormats/GEMDigi/interface/GEMDigiCollection.h" +#include "DataFormats/Common/interface/DetSetVector.h" +#include "SimDataFormats/GEMDigiSimLink/interface/GEMDigiSimLink.h" + class GEMStripDigiValidation : public GEMBaseValidation { public: explicit GEMStripDigiValidation(const edm::ParameterSet&); @@ -15,30 +18,29 @@ class GEMStripDigiValidation : public GEMBaseValidation { // ParameterSet edm::EDGetTokenT<GEMDigiCollection> strip_token_; edm::EDGetTokenT<edm::PSimHitContainer> simhit_token_; + edm::EDGetTokenT<edm::DetSetVector<GEMDigiSimLink>> digisimlink_token_; edm::ESGetToken<GEMGeometry, MuonGeometryRecord> geomToken_; edm::ESGetToken<GEMGeometry, MuonGeometryRecord> geomTokenBeginRun_; // NOTE Monitor elements // Occupaancy - MEMap1Ids me_occ_zr_; - MEMap2Ids me_occ_det_; + MonitorElement* me_total_strip_; + MEMap2Ids me_detail_total_strip_; + MEMap1Ids me_detail_occ_zr_; + MEMap2Ids me_detail_occ_det_; MEMap3Ids me_detail_occ_xy_; MEMap3Ids me_detail_occ_strip_; - MEMap3Ids me_detail_occ_phi_strip_; // Bunch Crossing MonitorElement* me_bx_; - MEMap3Ids me_detail_bx_; + MEMap3Ids me_bx_layer_; - // occupancy plots for efficiency (muon simhit - strip digi matching) - MEMap1Ids me_simhit_occ_eta_; - MEMap2Ids me_simhit_occ_phi_; - MEMap2Ids me_simhit_occ_det_; // Strip that matches the SimHit - MEMap1Ids me_strip_occ_eta_; - MEMap2Ids me_strip_occ_phi_; - MEMap2Ids me_strip_occ_det_; + MEMap3Ids me_occ_pid_; + MEMap3Ids me_detail_strip_occ_eta_; + MEMap3Ids me_detail_strip_occ_phi_; + MEMap2Ids me_detail_strip_occ_det_; }; #endif // Validation_MuonGEMDigis_GEMStripDigiValidation_h diff --git a/Validation/MuonGEMDigis/plugins/MuonGEMDigisHarvestor.cc b/Validation/MuonGEMDigis/plugins/MuonGEMDigisHarvestor.cc index 5abbea89b39dd..c43ac05d08f6e 100644 --- a/Validation/MuonGEMDigis/plugins/MuonGEMDigisHarvestor.cc +++ b/Validation/MuonGEMDigis/plugins/MuonGEMDigisHarvestor.cc @@ -7,52 +7,81 @@ MuonGEMDigisHarvestor::MuonGEMDigisHarvestor(const edm::ParameterSet& pset) region_ids_ = pset.getUntrackedParameter<std::vector<Int_t> >("regionIds"); station_ids_ = pset.getUntrackedParameter<std::vector<Int_t> >("stationIds"); layer_ids_ = pset.getUntrackedParameter<std::vector<Int_t> >("layerIds"); + + detail_plot_ = pset.getParameter<Bool_t>("detailPlot"); } MuonGEMDigisHarvestor::~MuonGEMDigisHarvestor() {} void MuonGEMDigisHarvestor::dqmEndJob(DQMStore::IBooker& booker, DQMStore::IGetter& getter) { + TString simhit_occ_folder = "MuonGEMHitsV/GEMHitsTask/Occupancy/"; TString occ_folder = "MuonGEMDigisV/GEMDigisTask/Strip/Occupancy/"; TString eff_folder = "MuonGEMDigisV/GEMDigisTask/Strip/Efficiency/"; + TString occ_folder_pad = "MuonGEMDigisV/GEMDigisTask/Pad/Occupancy/"; + TString eff_folder_pad = "MuonGEMDigisV/GEMDigisTask/Pad/Efficiency/"; + TString occ_folder_cluster = "MuonGEMDigisV/GEMDigisTask/PadCluster/Occupancy/"; + TString eff_folder_cluster = "MuonGEMDigisV/GEMDigisTask/PadCluster/Efficiency/"; for (Int_t region_id : region_ids_) { - TString name_suffix_re = GEMUtils::getSuffixName(region_id); - TString title_suffix_re = GEMUtils::getSuffixTitle(region_id); - - // NOTE eta efficiency - TString strip_eta_name = "matched_strip_occ_eta" + name_suffix_re; - TString simhit_eta_name = "muon_simhit_occ_eta" + name_suffix_re; - TString strip_eta_path = occ_folder + strip_eta_name; - TString simhit_eta_path = occ_folder + simhit_eta_name; - TString eff_eta_name = "eff_eta" + name_suffix_re; - TString eff_eta_title = "Eta Efficiency (Muon Only) :" + title_suffix_re; - - bookEff1D(booker, getter, strip_eta_path, simhit_eta_path, eff_folder, eff_eta_name, eff_eta_title); - for (Int_t station_id : station_ids_) { TString name_suffix_re_st = GEMUtils::getSuffixName(region_id, station_id); TString title_suffix_re_st = GEMUtils::getSuffixTitle(region_id, station_id); - // NOTE phi efficiency - TString strip_phi_name = "matched_strip_occ_phi" + name_suffix_re_st; - TString simhit_phi_name = "muon_simhit_occ_phi" + name_suffix_re_st; - TString strip_phi_path = occ_folder + strip_phi_name; - TString simhit_phi_path = occ_folder + simhit_phi_name; - TString eff_phi_name = "eff_phi" + name_suffix_re_st; - TString eff_phi_title = "Phi Efficiency (Muon Only) :" + title_suffix_re; + if (detail_plot_) { + // NOTE Detector Component efficiency + TString strip_det_name = "matched_strip_occ_det" + name_suffix_re_st; + TString pad_det_name = "matched_pad_occ_det" + name_suffix_re_st; + TString simhit_det_name = "muon_simhit_occ_det" + name_suffix_re_st; + TString strip_det_path = occ_folder + strip_det_name; + TString pad_det_path = occ_folder_pad + pad_det_name; + TString cluster_det_path = occ_folder_cluster + pad_det_name; + TString simhit_det_path = simhit_occ_folder + simhit_det_name; + TString eff_det_name = "eff_det" + name_suffix_re_st; + TString eff_det_title = "Detector Component Efficiency (Muon Only) :" + title_suffix_re_st; + + bookEff2D(booker, getter, strip_det_path, simhit_det_path, eff_folder, eff_det_name, eff_det_title); + bookEff2D(booker, getter, pad_det_path, simhit_det_path, eff_folder_pad, eff_det_name, eff_det_title); + bookEff2D(booker, getter, cluster_det_path, simhit_det_path, eff_folder_cluster, eff_det_name, eff_det_title); + } + + for (Int_t layer_id : layer_ids_) { + if (station_id != 0 and layer_id > 2) + continue; + TString name_suffix_re_st_ly = GEMUtils::getSuffixName(region_id, station_id, layer_id); + TString title_suffix_re_st_ly = GEMUtils::getSuffixTitle(region_id, station_id, layer_id); - bookEff1D(booker, getter, strip_phi_path, simhit_phi_path, eff_folder, eff_phi_name, eff_phi_title); + // NOTE eta efficiency + TString strip_eta_name = "matched_strip_occ_eta" + name_suffix_re_st_ly; + TString pad_eta_name = "matched_pad_occ_eta" + name_suffix_re_st_ly; + TString simhit_eta_name = "muon_simhit_occ_eta" + name_suffix_re_st_ly; + TString strip_eta_path = occ_folder + strip_eta_name; + TString pad_eta_path = occ_folder_pad + pad_eta_name; + TString cluster_eta_path = occ_folder_cluster + pad_eta_name; + TString simhit_eta_path = simhit_occ_folder + simhit_eta_name; + TString eff_eta_name = "eff_eta" + name_suffix_re_st_ly; + TString eff_eta_title = "Eta Efficiency (Muon Only) :" + title_suffix_re_st_ly; - // NOTE Detector Component efficiency - TString strip_det_name = "matched_strip_occ_det" + name_suffix_re_st; - TString simhit_det_name = "muon_simhit_occ_det" + name_suffix_re_st; - TString strip_det_path = occ_folder + strip_det_name; - TString simhit_det_path = occ_folder + simhit_det_name; - TString eff_det_name = "eff_det" + name_suffix_re_st; - TString eff_det_title = "Detector Component Efficiency (Muon Only) :" + title_suffix_re_st; + if (detail_plot_) + bookEff1D(booker, getter, strip_eta_path, simhit_eta_path, eff_folder, eff_eta_name, eff_eta_title); + bookEff1D(booker, getter, pad_eta_path, simhit_eta_path, eff_folder_pad, eff_eta_name, eff_eta_title); + bookEff1D(booker, getter, cluster_eta_path, simhit_eta_path, eff_folder_cluster, eff_eta_name, eff_eta_title); - bookEff2D(booker, getter, strip_det_path, simhit_det_path, eff_folder, eff_det_name, eff_det_title); + // NOTE phi efficiency + TString strip_phi_name = "matched_strip_occ_phi" + name_suffix_re_st_ly; + TString pad_phi_name = "matched_pad_occ_phi" + name_suffix_re_st_ly; + TString simhit_phi_name = "muon_simhit_occ_phi" + name_suffix_re_st_ly; + TString strip_phi_path = occ_folder + strip_phi_name; + TString pad_phi_path = occ_folder_pad + pad_phi_name; + TString cluster_phi_path = occ_folder_cluster + pad_phi_name; + TString simhit_phi_path = simhit_occ_folder + simhit_phi_name; + TString eff_phi_name = "eff_phi" + name_suffix_re_st_ly; + TString eff_phi_title = "Phi Efficiency (Muon Only) :" + title_suffix_re_st_ly; - } // statino loop - } // region loop + if (detail_plot_) + bookEff1D(booker, getter, strip_phi_path, simhit_phi_path, eff_folder, eff_phi_name, eff_phi_title); + bookEff1D(booker, getter, pad_phi_path, simhit_phi_path, eff_folder_pad, eff_phi_name, eff_phi_title); + bookEff1D(booker, getter, cluster_phi_path, simhit_phi_path, eff_folder_cluster, eff_phi_name, eff_phi_title); + } // layer loop + } // statino loop + } // region loop } diff --git a/Validation/MuonGEMDigis/plugins/MuonGEMDigisHarvestor.h b/Validation/MuonGEMDigis/plugins/MuonGEMDigisHarvestor.h index f47161532021b..a1f97c4231e88 100644 --- a/Validation/MuonGEMDigis/plugins/MuonGEMDigisHarvestor.h +++ b/Validation/MuonGEMDigis/plugins/MuonGEMDigisHarvestor.h @@ -14,6 +14,7 @@ class MuonGEMDigisHarvestor : public MuonGEMBaseHarvestor { private: std::vector<Int_t> region_ids_, station_ids_, layer_ids_; + Bool_t detail_plot_; }; #endif // Validation_MuonGEMDigis_MuonGEMDigisHarvestor_h diff --git a/Validation/MuonGEMDigis/python/MuonGEMDigis_cff.py b/Validation/MuonGEMDigis/python/MuonGEMDigis_cff.py index 68885f0a471f7..2afd425ed58d9 100644 --- a/Validation/MuonGEMDigis/python/MuonGEMDigis_cff.py +++ b/Validation/MuonGEMDigis/python/MuonGEMDigis_cff.py @@ -6,26 +6,27 @@ gemStripValidation = DQMEDAnalyzer('GEMStripDigiValidation', GEMValidationCommonParameters, - detailPlot = cms.bool(True), gemStripDigi = muonGEMDigiPSet.gemUnpackedStripDigi, gemSimHit = muonSimHitMatcherPSet.gemSimHit, + gemDigiSimLink = cms.InputTag("simMuonGEMDigis","GEM"), ) gemPadValidation = DQMEDAnalyzer('GEMPadDigiValidation', GEMValidationCommonParameters, - detailPlot = cms.bool(True), gemPadDigi = muonGEMDigiPSet.gemPadDigi, + gemSimHit = muonSimHitMatcherPSet.gemSimHit, + gemDigiSimLink = cms.InputTag("simMuonGEMDigis","GEM"), ) gemClusterValidation = DQMEDAnalyzer('GEMPadDigiClusterValidation', GEMValidationCommonParameters, - detailPlot = cms.bool(True), gemPadCluster = muonGEMDigiPSet.gemPadCluster, + gemSimHit = muonSimHitMatcherPSet.gemSimHit, + gemDigiSimLink = cms.InputTag("simMuonGEMDigis","GEM"), ) gemCoPadValidation = DQMEDAnalyzer('GEMCoPadDigiValidation', GEMValidationCommonParameters, - detailPlot = cms.bool(True), gemCoPadDigi = muonGEMDigiPSet.gemCoPadDigi, ) diff --git a/Validation/MuonGEMDigis/python/PostProcessor_cff.py b/Validation/MuonGEMDigis/python/PostProcessor_cff.py index 5ec89b0e39459..cadf187c78a4c 100644 --- a/Validation/MuonGEMDigis/python/PostProcessor_cff.py +++ b/Validation/MuonGEMDigis/python/PostProcessor_cff.py @@ -1,9 +1,11 @@ import FWCore.ParameterSet.Config as cms from DQMServices.Core.DQMEDHarvester import DQMEDHarvester +from Validation.MuonGEMHits.MuonGEMCommonParameters_cfi import GEMValidationCommonParameters gemDigiHarvesting = DQMEDHarvester("MuonGEMDigisHarvestor", + GEMValidationCommonParameters, regionIds = cms.untracked.vint32(-1, 1), stationIds = cms.untracked.vint32(1, 2), - layerIds = cms.untracked.vint32(1, 2), + layerIds = cms.untracked.vint32(1, 2, 3, 4, 5, 6), ) MuonGEMDigisPostProcessors = cms.Sequence(gemDigiHarvesting) diff --git a/Validation/MuonGEMDigis/src/GEMDigiMatcher.cc b/Validation/MuonGEMDigis/src/GEMDigiMatcher.cc index cea8c8e2afb04..2118760608181 100644 --- a/Validation/MuonGEMDigis/src/GEMDigiMatcher.cc +++ b/Validation/MuonGEMDigis/src/GEMDigiMatcher.cc @@ -63,7 +63,6 @@ void GEMDigiMatcher::match(const SimTrack& t, const SimVertex& v) { muonSimHitMatcher_->match(t, v); // get the digi collections - const edm::DetSetVector<GEMDigiSimLink>& gemDigisSL = *gemDigisSLH_.product(); const GEMDigiCollection& gemDigis = *gemDigisH_.product(); const GEMPadDigiCollection& gemPads = *gemPadsH_.product(); const GEMPadDigiClusterCollection& gemClusters = *gemClustersH_.product(); @@ -76,8 +75,10 @@ void GEMDigiMatcher::match(const SimTrack& t, const SimVertex& v) { return; // now match the digis - if (matchToSimLink_) + if (matchToSimLink_) { + const edm::DetSetVector<GEMDigiSimLink>& gemDigisSL = *gemDigisSLH_.product(); matchDigisSLToSimTrack(gemDigisSL); + } matchDigisToSimTrack(gemDigis); matchPadsToSimTrack(gemPads); matchClustersToSimTrack(gemClusters); diff --git a/Validation/MuonGEMHits/BuildFile.xml b/Validation/MuonGEMHits/BuildFile.xml index 930b18f374605..9428fed18dda7 100644 --- a/Validation/MuonGEMHits/BuildFile.xml +++ b/Validation/MuonGEMHits/BuildFile.xml @@ -9,6 +9,7 @@ <use name="SimDataFormats/Track"/> <use name="DQMServices/Core"/> <use name="rootcore"/> +<use name="rooteg"/> <export> <lib name="1"/> </export> diff --git a/Validation/MuonGEMHits/interface/GEMBaseValidation.h b/Validation/MuonGEMHits/interface/GEMBaseValidation.h index f13a89bf8aecb..d2e65497cc520 100644 --- a/Validation/MuonGEMHits/interface/GEMBaseValidation.h +++ b/Validation/MuonGEMHits/interface/GEMBaseValidation.h @@ -14,6 +14,7 @@ #include "Validation/MuonGEMHits/interface/GEMValidationUtils.h" #include "TMath.h" +#include "TDatabasePDG.h" class GEMBaseValidation : public DQMEDAnalyzer { public: @@ -22,8 +23,10 @@ class GEMBaseValidation : public DQMEDAnalyzer { void analyze(const edm::Event& e, const edm::EventSetup&) override = 0; protected: - Int_t getDetOccBinX(Int_t chamber_id, Int_t layer_id); + Int_t getDetOccBinX(Int_t num_layers, Int_t chamber_id, Int_t layer_id); Bool_t isMuonSimHit(const PSimHit&); + Float_t toDegree(Float_t radian); + Int_t getPidIdx(Int_t pid); dqm::impl::MonitorElement* bookZROccupancy(DQMStore::IBooker& booker, Int_t region_id, @@ -55,6 +58,9 @@ class GEMBaseValidation : public DQMEDAnalyzer { const char* name_prfix, const char* title_prefix); + template <typename T> + dqm::impl::MonitorElement* bookPIDHist(DQMStore::IBooker& booker, const T& key, const char* name, const char* title); + template <typename T> dqm::impl::MonitorElement* bookHist1D(DQMStore::IBooker& booker, const T& key, @@ -82,6 +88,7 @@ class GEMBaseValidation : public DQMEDAnalyzer { // NOTE Parameters Int_t xy_occ_num_bins_; + std::vector<Int_t> pid_list_; std::vector<Int_t> zr_occ_num_bins_; std::vector<Double_t> zr_occ_range_; std::vector<Double_t> eta_range_; @@ -192,7 +199,7 @@ dqm::impl::MonitorElement* GEMBaseValidation::bookDetectorOccupancy(DQMStore::IB TAxis* x_axis = hist->GetXaxis(); for (Int_t chamber_id = 1; chamber_id <= num_superchambers; chamber_id++) { for (Int_t layer_id = 1; layer_id <= num_chambers; layer_id++) { - Int_t bin = getDetOccBinX(chamber_id, layer_id); + Int_t bin = getDetOccBinX(num_chambers, chamber_id, layer_id); TString label = TString::Format("C%dL%d", chamber_id, layer_id); x_axis->SetBinLabel(bin, label); } @@ -206,6 +213,29 @@ dqm::impl::MonitorElement* GEMBaseValidation::bookDetectorOccupancy(DQMStore::IB return booker.book2D(name, hist); } +template <typename T> +dqm::impl::MonitorElement* GEMBaseValidation::bookPIDHist(DQMStore::IBooker& booker, + const T& key, + const char* name, + const char* title) { + auto name_suffix = GEMUtils::getSuffixName(key); + auto title_suffix = GEMUtils::getSuffixTitle(key); + TString x_title = "Particle Name"; + TString y_title = "Entries"; + TString hist_name = TString::Format("%s%s", name, name_suffix.Data()); + TString hist_title = TString::Format("%s :%s;%s;%s", title, title_suffix.Data(), x_title.Data(), y_title.Data()); + Int_t nbinsx = pid_list_.size(); + auto hist = booker.book1D(hist_name, hist_title, nbinsx + 1, 0, nbinsx + 1); + TDatabasePDG* pdgDB = TDatabasePDG::Instance(); + for (Int_t idx = 0; idx < nbinsx; idx++) { + Int_t bin = idx + 1; + auto particle_name = pdgDB->GetParticle(pid_list_[idx])->GetName(); + hist->setBinLabel(bin, particle_name); + } + hist->setBinLabel(nbinsx + 1, "others"); + return hist; +} + template <typename T> dqm::impl::MonitorElement* GEMBaseValidation::bookHist1D(DQMStore::IBooker& booker, const T& key, diff --git a/Validation/MuonGEMHits/plugins/GEMSimHitValidation.cc b/Validation/MuonGEMHits/plugins/GEMSimHitValidation.cc index 6dfe4bc27ac56..082f1d28d3e07 100644 --- a/Validation/MuonGEMHits/plugins/GEMSimHitValidation.cc +++ b/Validation/MuonGEMHits/plugins/GEMSimHitValidation.cc @@ -24,20 +24,22 @@ void GEMSimHitValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run con TString tof_xtitle = "Time of flight [ns]"; TString tof_ytitle = "Entries"; - const auto& regionsVec = gem->regions(); - if (regionsVec.empty() || regionsVec[0] == nullptr) { - edm::LogError(kLogCategory_) << "Regions missing or null."; - return; - } else { - for (const auto& station : regionsVec[0]->stations()) { + for (const auto& region : gem->regions()) { + Int_t region_id = region->region(); + + for (const auto& station : region->stations()) { Int_t station_id = station->station(); + const auto [tof_min, tof_max] = getTOFRange(station_id); - auto tof_name = TString::Format("tof_muon_st%d", station_id); - auto tof_title = TString::Format("SimHit Time Of Flight (Muon only) : Station %d", station_id); + ME2IdsKey key2{region_id, station_id}; - me_tof_mu_[station_id] = booker.book1D(tof_name, tof_title, 40, tof_min, tof_max); - } // end for - } // end else + me_tof_mu_[key2] = + bookHist1D(booker, key2, "tof_muon", "SimHit TOF (Muon only)", 20, tof_min, tof_max, tof_xtitle, tof_ytitle); + + me_tof_others_[key2] = bookHist1D( + booker, key2, "tof_others", "SimHit TOF (Other Particles)", 20, tof_min, tof_max, tof_xtitle, tof_ytitle); + } // station loop + } // region loop if (detail_plot_) { for (const auto& region : gem->regions()) { @@ -73,16 +75,22 @@ void GEMSimHitValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run con booker.setCurrentFolder("MuonGEMHitsV/GEMHitsTask/EnergyLoss"); TString eloss_xtitle = "Energy loss [eV]"; - TString eloss_ytitle = "Entries / 100 eV"; + TString eloss_ytitle = "Entries / 0.5 keV"; for (const auto& station : gem->regions()[0]->stations()) { Int_t station_id = station->station(); - auto eloss_name = TString::Format("eloss_muon_st%d", station_id); - auto eloss_title = TString::Format("SimHit Energy Loss (Muon only) : Station %d", station_id); + auto eloss_mu_name = TString::Format("eloss_muon_st%d", station_id); + auto eloss_mu_title = TString::Format("SimHit Energy Loss (Muon only) : Station %d", station_id); me_eloss_mu_[station_id] = - booker.book1D(eloss_name, eloss_title + ";" + eloss_xtitle + ";" + eloss_ytitle, 60, 0.0, 6000.0); + booker.book1D(eloss_mu_name, eloss_mu_title + ";" + eloss_xtitle + ";" + eloss_ytitle, 20, 0.0, 10.0); + + auto eloss_others_name = TString::Format("eloss_others_st%d", station_id); + auto eloss_others_title = TString::Format("SimHit Energy Loss (Other Particles) : Station %d", station_id); + + me_eloss_others_[station_id] = + booker.book1D(eloss_others_name, eloss_others_title + ";" + eloss_xtitle + ";" + eloss_ytitle, 20, 0.0, 10.0); } // station loop if (detail_plot_) { @@ -124,13 +132,17 @@ void GEMSimHitValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run con for (const auto& region : gem->regions()) { Int_t region_id = region->region(); - me_occ_zr_[region_id] = bookZROccupancy(booker, region_id, "simhit", "SimHit"); + if (detail_plot_) + me_detail_occ_zr_[region_id] = bookZROccupancy(booker, region_id, "simhit", "SimHit"); for (const auto& station : region->stations()) { Int_t station_id = station->station(); ME2IdsKey key2{region_id, station_id}; - me_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "simhit", "SimHit"); + if (detail_plot_) { + me_detail_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "simhit", "SimHit"); + me_detail_occ_det_mu_[key2] = bookDetectorOccupancy(booker, key2, station, "muon_simhit", "Muon SimHit"); + } const auto& superChamberVec = station->superChambers(); if (superChamberVec.empty() || superChamberVec.front() == nullptr) { @@ -142,7 +154,22 @@ void GEMSimHitValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run con Int_t layer_id = chamber->id().layer(); ME3IdsKey key3{region_id, station_id, layer_id}; - me_occ_xy_[key3] = bookXYOccupancy(booker, key3, "simhit", "SimHit"); + me_occ_eta_mu_[key3] = bookHist1D(booker, + key3, + "muon_simhit_occ_eta", + "Muon SimHit Eta Occupancy", + 16, + eta_range_[station_id * 2 + 0], + eta_range_[station_id * 2 + 1], + "#eta"); + + me_occ_phi_mu_[key3] = bookHist1D( + booker, key3, "muon_simhit_occ_phi", "Muon SimHit Phi Occupancy", 36, -5, 355, "#phi [degrees]"); + + me_occ_pid_[key3] = bookPIDHist(booker, key3, "simhit_occ_pid", "Number of entries for each paritcle"); + + if (detail_plot_) + me_detail_occ_xy_[key3] = bookXYOccupancy(booker, key3, "simhit", "SimHit"); } // layer loop } // end else } // station loop @@ -150,7 +177,7 @@ void GEMSimHitValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run con } std::tuple<Double_t, Double_t> GEMSimHitValidation::getTOFRange(Int_t station_id) { - UInt_t start_index = station_id == 1 ? 0 : 2; + UInt_t start_index = station_id * 2; Double_t tof_min = tof_range_[start_index]; Double_t tof_max = tof_range_[start_index + 1]; return std::make_tuple(tof_min, tof_max); @@ -178,7 +205,8 @@ void GEMSimHitValidation::analyze(const edm::Event& event, const edm::EventSetup Int_t station_id = gemid.station(); Int_t layer_id = gemid.layer(); Int_t chamber_id = gemid.chamber(); - Int_t roll_id = gemid.roll(); + Int_t ieta = gemid.ieta(); + Int_t num_layers = gemid.nlayers(); ME2IdsKey key2{region_id, station_id}; ME3IdsKey key3{region_id, station_id, layer_id}; @@ -189,30 +217,43 @@ void GEMSimHitValidation::analyze(const edm::Event& event, const edm::EventSetup Float_t simhit_g_x = simhit_global_pos.x(); Float_t simhit_g_y = simhit_global_pos.y(); Float_t simhit_g_abs_z = std::fabs(simhit_global_pos.z()); + Float_t simhit_g_eta = std::fabs(simhit_global_pos.eta()); + Float_t simhit_g_phi = toDegree(simhit_global_pos.phi()); Float_t energy_loss = kEnergyCF_ * simhit.energyLoss(); + energy_loss = energy_loss > 10 ? 9.9 : energy_loss; Float_t tof = simhit.timeOfFlight(); + Int_t pid = simhit.particleType(); + Int_t pid_idx = getPidIdx(pid); // NOTE Fill MonitorElement - Int_t bin_x = getDetOccBinX(chamber_id, layer_id); - - me_occ_zr_[region_id]->Fill(simhit_g_abs_z, simhit_g_r); - me_occ_det_[key2]->Fill(bin_x, roll_id); - me_occ_xy_[key3]->Fill(simhit_g_x, simhit_g_y); + Int_t bin_x = getDetOccBinX(num_layers, chamber_id, layer_id); bool is_muon_simhit = isMuonSimHit(simhit); if (is_muon_simhit) { - me_tof_mu_[station_id]->Fill(tof); + me_tof_mu_[key2]->Fill(tof); me_eloss_mu_[station_id]->Fill(energy_loss); + me_occ_eta_mu_[key3]->Fill(simhit_g_eta); + me_occ_phi_mu_[key3]->Fill(simhit_g_phi); + } else { + me_tof_others_[key2]->Fill(tof); + me_eloss_others_[station_id]->Fill(energy_loss); } + me_occ_pid_[key3]->Fill(pid_idx); + if (detail_plot_) { me_detail_tof_[key3]->Fill(tof); me_detail_eloss_[key3]->Fill(energy_loss); + me_detail_occ_zr_[region_id]->Fill(simhit_g_abs_z, simhit_g_r); + me_detail_occ_det_[key2]->Fill(bin_x, ieta); + me_detail_occ_xy_[key3]->Fill(simhit_g_x, simhit_g_y); + if (is_muon_simhit) { me_detail_tof_mu_[key3]->Fill(tof); me_detail_eloss_mu_[key3]->Fill(energy_loss); + me_detail_occ_det_mu_[key2]->Fill(bin_x, ieta); } } // detail_plot diff --git a/Validation/MuonGEMHits/plugins/GEMSimHitValidation.h b/Validation/MuonGEMHits/plugins/GEMSimHitValidation.h index 7b279654fbc9d..f23275315e3cd 100644 --- a/Validation/MuonGEMHits/plugins/GEMSimHitValidation.h +++ b/Validation/MuonGEMHits/plugins/GEMSimHitValidation.h @@ -25,18 +25,26 @@ class GEMSimHitValidation : public GEMBaseValidation { std::vector<Double_t> tof_range_; // Monitor elemnts - std::map<Int_t, MonitorElement*> me_tof_mu_; // time of flight + MEMap2Ids me_tof_mu_; // time of flight + MEMap2Ids me_tof_others_; MEMap3Ids me_detail_tof_; MEMap3Ids me_detail_tof_mu_; + MEMap1Ids me_eloss_mu_; // energy loss + MEMap1Ids me_eloss_others_; MEMap3Ids me_detail_eloss_; MEMap3Ids me_detail_eloss_mu_; - MEMap1Ids me_occ_zr_; // occupancy - MEMap2Ids me_occ_det_; - MEMap3Ids me_occ_xy_; + + MEMap3Ids me_occ_eta_mu_; // occupancy + MEMap3Ids me_occ_phi_mu_; + MEMap3Ids me_occ_pid_; + MEMap1Ids me_detail_occ_zr_; + MEMap2Ids me_detail_occ_det_; + MEMap2Ids me_detail_occ_det_mu_; + MEMap3Ids me_detail_occ_xy_; // Constants - const Float_t kEnergyCF_ = 1e9f; // energy loss conversion factor: + const Float_t kEnergyCF_ = 1e6f; // energy loss conversion factor: }; #endif // Validation_MuonGEMHits_GEMSimHitValidation_h diff --git a/Validation/MuonGEMHits/python/MuonGEMCommonParameters_cfi.py b/Validation/MuonGEMHits/python/MuonGEMCommonParameters_cfi.py index 30fc67877f0c7..a92251ae9c6f7 100644 --- a/Validation/MuonGEMHits/python/MuonGEMCommonParameters_cfi.py +++ b/Validation/MuonGEMHits/python/MuonGEMCommonParameters_cfi.py @@ -2,15 +2,27 @@ GEMValidationCommonParameters = cms.PSet( + detailPlot = cms.bool(False), + pidList = cms.untracked.vint32(13, -13, # muons + 11, -11, # electrons + 22, # gamma + 2112, 2212, # neutron, proton + 211, -211, # charged pions + 321, -321), # charged kaons # ZR occupancy plots ZROccRange = cms.untracked.vdouble( # xlow, xup, ylow, yup + 525, 555, 66, 160, # station 0 564, 574, 110, 290, # station 1 792, 802, 120, 390), # station 2 ZROccNumBins = cms.untracked.vint32( # nbinsx, nbinsy + 30, 100, # station0 200, 150, # station1 200, 250), # station2 XYOccNumBins = cms.untracked.int32(720), - EtaOccRange = cms.untracked.vdouble(1.55, 2.45), + EtaOccRange = cms.untracked.vdouble( + 1.95, 2.85, # station 0 + 1.55, 2.15, # station 1 + 1.55, 2.45), # station 2 ) diff --git a/Validation/MuonGEMHits/python/MuonGEMHits_cff.py b/Validation/MuonGEMHits/python/MuonGEMHits_cff.py index 14e58b8699178..919edc39b8834 100644 --- a/Validation/MuonGEMHits/python/MuonGEMHits_cff.py +++ b/Validation/MuonGEMHits/python/MuonGEMHits_cff.py @@ -6,8 +6,8 @@ gemSimHitValidation = DQMEDAnalyzer('GEMSimHitValidation', GEMValidationCommonParameters, gemSimHit = muonSimHitMatcherPSet.gemSimHit, - detailPlot = cms.bool(True), - TOFRange = cms.untracked.vdouble(18, 22, # GEM11 + TOFRange = cms.untracked.vdouble(10, 30, # GE0 + 18, 22, # GE11 26, 30), # GE21 ) diff --git a/Validation/MuonGEMHits/src/GEMBaseValidation.cc b/Validation/MuonGEMHits/src/GEMBaseValidation.cc index 49cd46a09ab9b..2bffdf51c54e5 100644 --- a/Validation/MuonGEMHits/src/GEMBaseValidation.cc +++ b/Validation/MuonGEMHits/src/GEMBaseValidation.cc @@ -9,6 +9,7 @@ using namespace dqm::impl; GEMBaseValidation::GEMBaseValidation(const edm::ParameterSet& ps, std::string log_category) : kLogCategory_(log_category) { + pid_list_ = ps.getUntrackedParameter<std::vector<Int_t> >("pidList"); zr_occ_num_bins_ = ps.getUntrackedParameter<std::vector<Int_t> >("ZROccNumBins"); zr_occ_range_ = ps.getUntrackedParameter<std::vector<Double_t> >("ZROccRange"); xy_occ_num_bins_ = ps.getUntrackedParameter<Int_t>("XYOccNumBins", 360); @@ -20,10 +21,24 @@ GEMBaseValidation::GEMBaseValidation(const edm::ParameterSet& ps, std::string lo GEMBaseValidation::~GEMBaseValidation() {} -Int_t GEMBaseValidation::getDetOccBinX(Int_t chamber_id, Int_t layer_id) { return 2 * chamber_id + layer_id - 2; } +Int_t GEMBaseValidation::getDetOccBinX(Int_t num_layers, Int_t chamber_id, Int_t layer_id) { + return num_layers * chamber_id + layer_id - num_layers; +} Bool_t GEMBaseValidation::isMuonSimHit(const PSimHit& simhit) { return std::abs(simhit.particleType()) == kMuonPDGId_; } +Float_t GEMBaseValidation::toDegree(Float_t radian) { + Float_t degree = radian / M_PI * 180; + if (degree < -5) + return degree + 360; + else + return degree; +} + +Int_t GEMBaseValidation::getPidIdx(Int_t pid) { + return std::find(pid_list_.begin(), pid_list_.end(), pid) - pid_list_.begin(); +} + MonitorElement* GEMBaseValidation::bookZROccupancy(DQMStore::IBooker& booker, Int_t region_id, const char* name_prefix, @@ -34,13 +49,17 @@ MonitorElement* GEMBaseValidation::bookZROccupancy(DQMStore::IBooker& booker, TString name = TString::Format("%s_occ_zr%s", name_prefix, name_suffix.Data()); TString title = TString::Format("%s ZR Occupancy :%s;|Z| [cm];R [cm]", title_prefix, title_suffix.Data()); - Double_t station1_xmin = zr_occ_range_[0]; - Double_t station1_xmax = zr_occ_range_[1]; - Double_t station2_xmin = zr_occ_range_[4]; - Double_t station2_xmax = zr_occ_range_[5]; + Double_t station0_xmin = zr_occ_range_[0]; + Double_t station0_xmax = zr_occ_range_[1]; + Double_t station1_xmin = zr_occ_range_[4]; + Double_t station1_xmax = zr_occ_range_[5]; + Double_t station2_xmin = zr_occ_range_[8]; + Double_t station2_xmax = zr_occ_range_[9]; std::vector<Double_t> xbins_vector; - for (Double_t i = station1_xmin - 1; i < station2_xmax + 1; i += 0.25) { + for (Double_t i = station0_xmin - 1; i < station2_xmax + 1; i += 0.25) { + if (i > station0_xmax + 1 and i < station1_xmin - 1) + continue; if (i > station1_xmax + 1 and i < station2_xmin - 1) continue; xbins_vector.push_back(i); @@ -49,8 +68,8 @@ MonitorElement* GEMBaseValidation::bookZROccupancy(DQMStore::IBooker& booker, Int_t nbinsx = xbins_vector.size() - 1; Int_t nbinsy = zr_occ_num_bins_[2]; - Double_t ylow = std::min(zr_occ_range_[2], zr_occ_range_[6]); - Double_t yup = std::max(zr_occ_range_[3], zr_occ_range_[7]); + Double_t ylow = std::min(zr_occ_range_[2], std::min(zr_occ_range_[6], zr_occ_range_[10])); + Double_t yup = std::max(zr_occ_range_[3], std::max(zr_occ_range_[7], zr_occ_range_[11])); auto hist = new TH2F(name, title, nbinsx, &xbins_vector[0], nbinsy, ylow, yup); return booker.book2D(name, hist); diff --git a/Validation/MuonGEMHits/src/GEMValidationUtils.cc b/Validation/MuonGEMHits/src/GEMValidationUtils.cc index 01220b9b9e44c..110274560f80e 100644 --- a/Validation/MuonGEMHits/src/GEMValidationUtils.cc +++ b/Validation/MuonGEMHits/src/GEMValidationUtils.cc @@ -2,18 +2,18 @@ #include "TString.h" -TString GEMUtils::getSuffixName(Int_t region_id) { return TString::Format("_re%d", region_id); } +TString GEMUtils::getSuffixName(Int_t region_id) { return TString::Format("_Re%+d", region_id); } TString GEMUtils::getSuffixName(Int_t region_id, Int_t station_id) { - return TString::Format("_re%d_st%d", region_id, station_id); + return TString::Format("_GE%+.2d", region_id * (station_id * 10 + 1)); } TString GEMUtils::getSuffixName(Int_t region_id, Int_t station_id, Int_t layer_id) { - return TString::Format("_re%d_st%d_la%d", region_id, station_id, layer_id); + return TString::Format("_GE%+.2d_L%d", region_id * (station_id * 10 + 1), layer_id); } TString GEMUtils::getSuffixName(Int_t region_id, Int_t station_id, Int_t layer_id, Int_t roll_id) { - return TString::Format("_re%d_st%d_la%d_ro%d", region_id, station_id, layer_id, roll_id); + return TString::Format("_GE%+.2d_L%d_iEta%d", region_id * (station_id * 10 + 1), layer_id, roll_id); } TString GEMUtils::getSuffixName(const ME2IdsKey& key) { @@ -31,18 +31,18 @@ TString GEMUtils::getSuffixName(const ME4IdsKey& key) { return getSuffixName(region_id, station_id, layer_id, roll_id); } -TString GEMUtils::getSuffixTitle(Int_t region_id) { return TString::Format(" Region %d", region_id); } +TString GEMUtils::getSuffixTitle(Int_t region_id) { return TString::Format(" Region %+d", region_id); } TString GEMUtils::getSuffixTitle(Int_t region_id, Int_t station_id) { - return TString::Format(" Region %d Station %d", region_id, station_id); + return TString::Format(" GE%+.2d", region_id * (station_id * 10 + 1)); } TString GEMUtils::getSuffixTitle(Int_t region_id, Int_t station_id, Int_t layer_id) { - return TString::Format(" Region %d Station %d Layer %d", region_id, station_id, layer_id); + return TString::Format(" GE%+.2d Layer %d", region_id * (station_id * 10 + 1), layer_id); } TString GEMUtils::getSuffixTitle(Int_t region_id, Int_t station_id, Int_t layer_id, Int_t roll_id) { - return TString::Format(" Region %d Station %d Layer %d Roll %d", region_id, station_id, layer_id, roll_id); + return TString::Format(" GE%+.2d Layer %d iEta %d", region_id * (station_id * 10 + 1), layer_id, roll_id); } TString GEMUtils::getSuffixTitle(const ME2IdsKey& key) { diff --git a/Validation/MuonGEMHits/src/MuonGEMBaseHarvestor.cc b/Validation/MuonGEMHits/src/MuonGEMBaseHarvestor.cc index 14f08c5cf714d..a30efa7fc67eb 100644 --- a/Validation/MuonGEMHits/src/MuonGEMBaseHarvestor.cc +++ b/Validation/MuonGEMHits/src/MuonGEMBaseHarvestor.cc @@ -13,7 +13,7 @@ TProfile* MuonGEMBaseHarvestor::computeEfficiency( eff_profile->GetXaxis()->SetTitle(total_x->GetTitle()); eff_profile->GetYaxis()->SetTitle("#epsilon"); - for (Int_t bin = 1; bin < total.GetXaxis()->GetNbins(); bin++) { + for (Int_t bin = 1; bin <= total.GetXaxis()->GetNbins(); bin++) { Double_t num_passed = passed.GetBinContent(bin); Double_t num_total = total.GetBinContent(bin); diff --git a/Validation/MuonGEMRecHits/plugins/GEMRecHitValidation.cc b/Validation/MuonGEMRecHits/plugins/GEMRecHitValidation.cc index 4445838ff9cd8..8c3bc0525a7d1 100644 --- a/Validation/MuonGEMRecHits/plugins/GEMRecHitValidation.cc +++ b/Validation/MuonGEMRecHits/plugins/GEMRecHitValidation.cc @@ -11,6 +11,10 @@ GEMRecHitValidation::GEMRecHitValidation(const edm::ParameterSet& pset) const auto& simhit_pset = pset.getParameterSet("gemSimHit"); const auto& simhit_tag = simhit_pset.getParameter<edm::InputTag>("inputTag"); + + const auto& digisimlink_tag = pset.getParameter<edm::InputTag>("gemDigiSimLink"); + digisimlink_token_ = consumes<edm::DetSetVector<GEMDigiSimLink>>(digisimlink_tag); + simhit_token_ = consumes<edm::PSimHitContainer>(simhit_tag); geomToken_ = esConsumes<GEMGeometry, MuonGeometryRecord>(); geomTokenBeginRun_ = esConsumes<GEMGeometry, MuonGeometryRecord, edm::Transition::BeginRun>(); @@ -27,7 +31,20 @@ void GEMRecHitValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run con TString cls_title = "Cluster Size Distribution"; TString cls_x_title = "Cluster size"; - me_cls_ = booker.book1D("cls", cls_title + ";" + cls_x_title + ";" + "Entries", 11, -0.5, 10.5); + me_cls_ = booker.book1D("cls", cls_title + ";" + cls_x_title + ";" + "Entries", 10, 0.5, 10.5); + + for (const auto& station : gem->regions()[0]->stations()) { + Int_t station_id = station->station(); + for (const auto& roll : station->superChambers()[0]->chambers()[0]->etaPartitions()) { + Int_t ieta = roll->id().ieta(); + ME2IdsKey key{station_id, ieta}; + me_cls_roll_[key] = booker.book1D(Form("cls_GE%d1_iEta%d", station_id, ieta), + Form("Cluster Size Distribution : GE%d1 iEta %d", station_id, ieta), + 10, + 0.5, + 10.5); + } + } if (detail_plot_) { for (const auto& region : gem->regions()) { @@ -43,28 +60,53 @@ void GEMRecHitValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run con } else { for (const auto& chamber : superChamberVec[0]->chambers()) { Int_t layer_id = chamber->id().layer(); - ME3IdsKey key3{region_id, station_id, layer_id}; - me_detail_cls_[key3] = bookHist1D(booker, key3, "cls", cls_title, 11, -0.5, 10.5, cls_x_title); - } // chamber loop - } // end else - } // station loop - } // region loop - } // detail plot + for (const auto& roll : chamber->etaPartitions()) { + Int_t ieta = roll->id().ieta(); + ME4IdsKey key4{region_id, station_id, layer_id, ieta}; + + me_detail_cls_[key4] = bookHist1D(booker, key4, "cls", "Cluster Size Distribution", 11, -0.5, 10.5); + } // roll loop + } // chamber loop + } // end else + } // station loop + } // region loop + } // detail plot // NOTE Residual booker.setCurrentFolder("MuonGEMRecHitsV/GEMRecHitsTask/Residual"); - for (const auto& region : gem->regions()) { - Int_t region_id = region->region(); - - me_residual_x_[region_id] = - bookHist1D(booker, region_id, "residual_x", "Residual in X", 120, -3, 3, "Residual in X [cm]"); + for (const auto& station : gem->regions()[0]->stations()) { + Int_t station_id = station->station(); + for (const auto& roll : station->superChambers()[0]->chambers()[0]->etaPartitions()) { + Int_t ieta = roll->id().ieta(); + ME2IdsKey key{station_id, ieta}; + + me_residual_x_[key] = booker.book1D(Form("residual_x_GE%d1_R%d", station_id, ieta), + Form("Residual in X : GE%d1 iEta %d; Residual in X [cm]", station_id, ieta), + 60, + -2, + 2); + + me_residual_y_[key] = booker.book1D(Form("residual_y_GE%d1_iEta%d", station_id, ieta), + Form("Residual in Y : GE%d1 iEta %d; Residual in Y [cm]", station_id, ieta), + 60, + -15, + 15); + + me_residual_rphi_[key] = booker.book1D( + Form("residual_rphi_GE%d1_iEta%d", station_id, ieta), + Form("Residual in R #times #phi : GE%d1 iEta %d; Residual in r #times #phi [cm]", station_id, ieta), + 60, + -15, + 15); + } + } - me_residual_y_[region_id] = - bookHist1D(booker, region_id, "residual_y", "Residual in Y", 600, -15, 15, "Residual in Y [cm]"); + if (detail_plot_) { + for (const auto& region : gem->regions()) { + Int_t region_id = region->region(); - if (detail_plot_) { for (const auto& station : region->stations()) { Int_t station_id = station->station(); @@ -72,32 +114,59 @@ void GEMRecHitValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run con if (!superChamberVec.empty() && superChamberVec[0] != nullptr) { for (const auto& chamber : superChamberVec[0]->chambers()) { Int_t layer_id = chamber->id().layer(); - ME3IdsKey key3{region_id, station_id, layer_id}; - - // Occupancy histograms of SimHits and RecHits for Efficiency - me_detail_residual_x_[key3] = - bookHist1D(booker, key3, "residual_x", "Residual in X", 120, -3, 3, "Residual in X [cm]"); - - me_detail_residual_y_[key3] = - bookHist1D(booker, key3, "residual_y", "Residual in Y", 600, -15, 15, "Residual in Y [cm]"); - } // chamber loop - } // end if - } // station loop - } // detail_plot - } // region loop + for (const auto& roll : chamber->etaPartitions()) { + Int_t ieta = roll->id().ieta(); + ME4IdsKey key4{region_id, station_id, layer_id, ieta}; + + me_detail_residual_x_[key4] = + bookHist1D(booker, key4, "residual_x", "Residual in x", 60, -2, 2, "Residual in x [cm]"); + + me_detail_residual_y_[key4] = + bookHist1D(booker, key4, "residual_y", "Residual in y", 60, -15, 15, "Residual in y [cm]"); + + me_detail_residual_rphi_[key4] = bookHist1D(booker, + key4, + "residual_rphi", + "Residual in r #times #phi", + 60, + -15, + 15, + "Residual in r #times #phi [cm]"); + } // roll loop + } // chamber loop + } // end if + } // station loop + } // region loop + } // detail plot // NOTE Pull booker.setCurrentFolder("MuonGEMRecHitsV/GEMRecHitsTask/Pull"); - for (const auto& region : gem->regions()) { - Int_t region_id = region->region(); - - me_pull_x_[region_id] = bookHist1D(booker, region_id, "pull_x", "Pull in X", 100, -3, 3); + if (detail_plot_) { + for (const auto& station : gem->regions()[0]->stations()) { + Int_t station_id = station->station(); + for (const auto& roll : station->superChambers()[0]->chambers()[0]->etaPartitions()) { + Int_t ieta = roll->id().ieta(); + ME2IdsKey key{station_id, ieta}; + + me_detail_pull_x_[key] = booker.book1D(Form("pull_x_GE%d1_iEta%d", station_id, ieta), + Form("Pull in X : GE%d1 iEta %d", station_id, ieta), + 60, + -3, + 3); + + me_detail_pull_y_[key] = booker.book1D(Form("pull_y_GE%d1_iEta%d", station_id, ieta), + Form("Pull in Y : GE%d1 iEta %d", station_id, ieta), + 60, + -3, + 3); + } + } - me_pull_y_[region_id] = bookHist1D(booker, region_id, "pull_y", "Pull in Y", 100, -3, 3); + for (const auto& region : gem->regions()) { + Int_t region_id = region->region(); - if (detail_plot_) { for (const auto& station : region->stations()) { Int_t station_id = station->station(); @@ -105,94 +174,105 @@ void GEMRecHitValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run con if (!superChamberVec.empty() && superChamberVec[0] != nullptr) { for (const auto& chamber : superChamberVec[0]->chambers()) { Int_t layer_id = chamber->id().layer(); - ME3IdsKey key3{region_id, station_id, layer_id}; - me_detail_pull_x_[key3] = bookHist1D(booker, key3, "pull_x", "Pull in X", 100, -3, 3); + for (const auto& roll : chamber->etaPartitions()) { + Int_t ieta = roll->id().ieta(); + ME4IdsKey key4{region_id, station_id, layer_id, ieta}; - me_detail_pull_y_[key3] = bookHist1D(booker, key3, "pull_y", "Pull in Y", 100, -3, 3); + me_detail_pull_x_la_[key4] = bookHist1D(booker, key4, "pull_x", "Pull in x", 60, -3, 3); - } // chamber loop - } // end if - } // station loop - } // detail plot - } // region loop + me_detail_pull_y_la_[key4] = bookHist1D(booker, key4, "pull_y", "Pull in y", 60, -3, 3); + } // roll loop + } // chamber loop + } // end if + } // station loop + } // region loop + } // detail plot // NOTE Occupancy booker.setCurrentFolder("MuonGEMRecHitsV/GEMRecHitsTask/Occupancy"); for (const auto& region : gem->regions()) { Int_t region_id = region->region(); - me_occ_zr_[region_id] = bookZROccupancy(booker, region_id, "rechit", "RecHit"); - - me_simhit_occ_eta_[region_id] = bookHist1D(booker, - region_id, - "muon_simhit_occ_eta", - "Muon SimHit Eta Occupancy", - 50, - eta_range_[0], - eta_range_[1], - "|#eta|"); - - me_rechit_occ_eta_[region_id] = bookHist1D(booker, - region_id, - "matched_rechit_occ_eta", - "Matched RecHit Eta Occupancy", - 50, - eta_range_[0], - eta_range_[1], - "|#eta|"); + if (detail_plot_) + me_detail_occ_zr_[region_id] = bookZROccupancy(booker, region_id, "rechit", "RecHit"); for (const auto& station : region->stations()) { Int_t station_id = station->station(); ME2IdsKey key2{region_id, station_id}; - me_simhit_occ_phi_[key2] = - bookHist1D(booker, key2, "muon_simhit_occ_phi", "Muon SimHit Phi Occupancy", 51, -M_PI, M_PI, "#phi"); + if (detail_plot_) + me_detail_rechit_occ_det_[key2] = + bookDetectorOccupancy(booker, key2, station, "matched_rechit", "Matched RecHit"); - me_rechit_occ_phi_[key2] = - bookHist1D(booker, key2, "matched_rechit_occ_phi", "Matched RecHit Phi Occupancy", 51, -M_PI, M_PI, "#phi"); + const auto& superChamberVec = station->superChambers(); + if (!superChamberVec.empty() && superChamberVec[0] != nullptr) { + for (const auto& chamber : superChamberVec[0]->chambers()) { + Int_t layer_id = chamber->id().layer(); + ME3IdsKey key3{region_id, station_id, layer_id}; - me_simhit_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "muon_simhit", "Muon SimHit"); + Int_t num_eta_partitions = chamber->nEtaPartitions(); - me_rechit_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "matched_rechit", "Matched RecHit"); + me_total_rechit_[key3] = + bookHist1D(booker, key3, "total_rechit", "Number of rec hits per event", 25, -0.5, 24.5); - if (detail_plot_) { - const auto& superChamberVec = station->superChambers(); - if (!superChamberVec.empty() && superChamberVec[0] != nullptr) { - for (const auto& chamber : superChamberVec[0]->chambers()) { - Int_t layer_id = chamber->id().layer(); - ME3IdsKey key3{region_id, station_id, layer_id}; + me_occ_pid_[key3] = bookPIDHist(booker, key3, "rechit_occ_pid", "Number of entreis for each particle"); + + me_occ_ieta_[key3] = bookHist1D(booker, + key3, + "rechit_occ_ieta", + "Rechit Occupancy per eta partition", + num_eta_partitions, + 0.5, + num_eta_partitions + 0.5); + me_occ_phi_[key3] = bookHist1D(booker, key3, "rechit_occ_phi", "Rechit Phi Occupancy", 108, -5, 355); + + me_rechit_occ_eta_[key3] = bookHist1D(booker, + key3, + "matched_rechit_occ_eta", + "Matched RecHit Eta Occupancy", + 16, + eta_range_[station_id * 2 + 0], + eta_range_[station_id * 2 + 1], + "|#eta|"); + + me_rechit_occ_phi_[key3] = + bookHist1D(booker, key3, "matched_rechit_occ_phi", "Matched RecHit Phi Occupancy", 36, -5, 355, "#phi"); + + if (detail_plot_) { me_detail_occ_xy_[key3] = bookXYOccupancy(booker, key3, "rechit", "RecHit"); me_detail_occ_polar_[key3] = bookPolarOccupancy(booker, key3, "rechit", "RecHit"); - - } // chamber loop - } // end if - } // detail plot - } // station loop - } // region_loop + } + } // chamber loop + } // end if + } // station loop + } // region_loop } Bool_t GEMRecHitValidation::matchRecHitAgainstSimHit(GEMRecHitCollection::const_iterator rechit, Int_t simhit_strip) { - Bool_t matched = false; - Int_t cls = rechit->clusterSize(); Int_t rechit_first_strip = rechit->firstClusterStrip(); if (cls == 1) { - matched = simhit_strip == rechit_first_strip; + return simhit_strip == rechit_first_strip; } else { Int_t rechit_last_strip = rechit_first_strip + cls - 1; - matched = (simhit_strip >= rechit_first_strip) and (simhit_strip <= rechit_last_strip); + return (simhit_strip >= rechit_first_strip) and (simhit_strip <= rechit_last_strip); } - - return matched; } void GEMRecHitValidation::analyze(const edm::Event& event, const edm::EventSetup& setup) { const GEMGeometry* gem = &setup.getData(geomToken_); + edm::Handle<edm::DetSetVector<GEMDigiSimLink>> digiSimLink; + event.getByToken(digisimlink_token_, digiSimLink); + if (not digiSimLink.isValid()) { + edm::LogError(kLogCategory_) << "Failed to get GEMDigiSimLink." << std::endl; + return; + } + edm::Handle<edm::PSimHitContainer> simhit_container; event.getByToken(simhit_token_, simhit_container); if (not simhit_container.isValid()) { @@ -207,34 +287,76 @@ void GEMRecHitValidation::analyze(const edm::Event& event, const edm::EventSetup return; } - for (auto rechit = rechit_collection->begin(); rechit != rechit_collection->end(); rechit++) { - GEMDetId gem_id{rechit->gemId()}; + std::map<ME3IdsKey, Int_t> total_rechit; + for (const auto& rechit : *rechit_collection) { + GEMDetId gem_id{rechit.gemId()}; Int_t region_id = gem_id.region(); Int_t station_id = gem_id.station(); Int_t layer_id = gem_id.layer(); + Int_t ieta = gem_id.ieta(); + ME4IdsKey key4{region_id, station_id, layer_id, ieta}; + ME2IdsKey key{station_id, ieta}; ME2IdsKey key2{region_id, station_id}; ME3IdsKey key3{region_id, station_id, layer_id}; const BoundPlane& surface = gem->idToDet(gem_id)->surface(); - GlobalPoint&& rechit_global_pos = surface.toGlobal(rechit->localPosition()); + GlobalPoint&& rechit_global_pos = surface.toGlobal(rechit.localPosition()); Float_t rechit_g_x = rechit_global_pos.x(); Float_t rechit_g_y = rechit_global_pos.y(); Float_t rechit_g_abs_z = std::fabs(rechit_global_pos.z()); Float_t rechit_g_r = rechit_global_pos.perp(); - Float_t rechit_g_phi = rechit_global_pos.phi(); + Float_t rechit_g_phi = toDegree(rechit_global_pos.phi()); + + Int_t first_strip = rechit.firstClusterStrip(); + Int_t cls = rechit.clusterSize(); + cls = cls > 10 ? 10 : cls; - Int_t cls = rechit->clusterSize(); + me_cls_roll_[key]->Fill(cls); + me_occ_ieta_[key3]->Fill(ieta); + me_occ_phi_[key3]->Fill(rechit_g_phi); + total_rechit[key3]++; me_cls_->Fill(cls); - me_occ_zr_[region_id]->Fill(rechit_g_abs_z, rechit_g_r); if (detail_plot_) { - me_detail_cls_[key3]->Fill(cls); + me_detail_cls_[key4]->Fill(cls); + me_detail_occ_zr_[region_id]->Fill(rechit_g_abs_z, rechit_g_r); me_detail_occ_xy_[key3]->Fill(rechit_g_x, rechit_g_y); me_detail_occ_polar_[key3]->Fill(rechit_g_phi, rechit_g_r); } // detail plot + + auto links = digiSimLink->find(gem_id); + + if (links == digiSimLink->end()) + continue; + std::map<Int_t, Int_t> pid_count; + + for (Int_t strip = first_strip; strip < first_strip + cls; strip++) { + for (const auto& link : *links) { + Int_t link_strip = link.getStrip(); + if (link_strip == strip) { + Int_t pid = link.getParticleType(); + pid_count[pid]++; + break; + } + } + } + Int_t max_pid = 0; + Int_t max_count = 0; + for (auto& [pid, count] : pid_count) { + if (max_count < count) { + max_pid = pid; + max_count = count; + } + } + Int_t pid_idx = getPidIdx(max_pid); + me_occ_pid_[key3]->Fill(pid_idx); + } + + for (auto [key, num_total_rechit] : total_rechit) { + me_total_rechit_[key]->Fill(num_total_rechit); } // NOTE @@ -244,9 +366,6 @@ void GEMRecHitValidation::analyze(const edm::Event& event, const edm::EventSetup continue; } - if (not isMuonSimHit(simhit)) - continue; - GEMDetId simhit_gemid{simhit.detUnitId()}; const BoundPlane& surface = gem->idToDet(simhit_gemid)->surface(); @@ -254,23 +373,35 @@ void GEMRecHitValidation::analyze(const edm::Event& event, const edm::EventSetup Int_t station_id = simhit_gemid.station(); Int_t layer_id = simhit_gemid.layer(); Int_t chamber_id = simhit_gemid.chamber(); - Int_t roll_id = simhit_gemid.roll(); + Int_t ieta = simhit_gemid.ieta(); + Int_t num_layers = simhit_gemid.nlayers(); + ME2IdsKey key{station_id, ieta}; ME2IdsKey key2{region_id, station_id}; ME3IdsKey key3{region_id, station_id, layer_id}; + ME4IdsKey key4{region_id, station_id, layer_id, ieta}; const LocalPoint& simhit_local_pos = simhit.localPosition(); const GlobalPoint& simhit_global_pos = surface.toGlobal(simhit_local_pos); Float_t simhit_g_abs_eta = std::fabs(simhit_global_pos.eta()); - Float_t simhit_g_phi = simhit_global_pos.phi(); + Float_t simhit_g_phi = toDegree(simhit_global_pos.phi()); - Int_t simhit_strip = gem->etaPartition(simhit_gemid)->strip(simhit_local_pos); - Int_t det_occ_bin_x = getDetOccBinX(chamber_id, layer_id); + Int_t det_occ_bin_x = getDetOccBinX(num_layers, chamber_id, layer_id); - me_simhit_occ_eta_[region_id]->Fill(simhit_g_abs_eta); - me_simhit_occ_phi_[key2]->Fill(simhit_g_phi); - me_simhit_occ_det_[key2]->Fill(det_occ_bin_x, roll_id); + auto simhit_trackId = simhit.trackId(); + + auto links = digiSimLink->find(simhit_gemid); + if (links == digiSimLink->end()) + continue; + + Int_t simhit_strip = -1; + for (const auto& link : *links) { + if (simhit_trackId == link.getTrackId()) { + simhit_strip = link.getStrip(); + break; + } + } GEMRecHitCollection::range range = rechit_collection->get(simhit_gemid); for (auto rechit = range.first; rechit != range.second; ++rechit) { @@ -279,6 +410,9 @@ void GEMRecHitValidation::analyze(const edm::Event& event, const edm::EventSetup continue; } + if (not isMuonSimHit(simhit)) + continue; + if (matchRecHitAgainstSimHit(rechit, simhit_strip)) { const LocalPoint& rechit_local_pos = rechit->localPosition(); @@ -287,25 +421,31 @@ void GEMRecHitValidation::analyze(const edm::Event& event, const edm::EventSetup Float_t residual_x = rechit_local_pos.x() - simhit_local_pos.x(); Float_t residual_y = rechit_local_pos.y() - simhit_local_pos.y(); + Float_t residual_r = sqrt(pow(residual_x, 2) + pow(residual_y, 2)); + Float_t residual_phi = rechit_local_pos.phi() - simhit_local_pos.phi(); + Float_t residual_rphi = residual_r * residual_phi; Float_t pull_x = residual_x / resolution_x; Float_t pull_y = residual_y / resolution_y; - me_residual_x_[region_id]->Fill(residual_x); - me_residual_y_[region_id]->Fill(residual_y); - me_pull_x_[region_id]->Fill(pull_x); - me_pull_y_[region_id]->Fill(pull_y); + me_residual_x_[key]->Fill(residual_x); + me_residual_y_[key]->Fill(residual_y); + me_residual_rphi_[key]->Fill(residual_rphi); - me_rechit_occ_eta_[region_id]->Fill(simhit_g_abs_eta); - me_rechit_occ_phi_[key2]->Fill(simhit_g_phi); - me_rechit_occ_det_[key2]->Fill(det_occ_bin_x, roll_id); + me_rechit_occ_eta_[key3]->Fill(simhit_g_abs_eta); + me_rechit_occ_phi_[key3]->Fill(simhit_g_phi); if (detail_plot_) { - me_detail_residual_x_[key3]->Fill(residual_x); - me_detail_residual_y_[key3]->Fill(residual_y); + me_detail_rechit_occ_det_[key2]->Fill(det_occ_bin_x, ieta); + + me_detail_residual_x_[key4]->Fill(residual_x); + me_detail_residual_y_[key4]->Fill(residual_y); + me_detail_residual_rphi_[key4]->Fill(residual_rphi); - me_detail_pull_x_[key3]->Fill(pull_x); - me_detail_pull_y_[key3]->Fill(pull_y); + me_detail_pull_x_[key]->Fill(pull_x); + me_detail_pull_y_[key]->Fill(pull_y); + me_detail_pull_x_la_[key4]->Fill(pull_x); + me_detail_pull_y_la_[key4]->Fill(pull_y); } // detail_plot // If we find GEMRecHit that matches PSimHit, then exit diff --git a/Validation/MuonGEMRecHits/plugins/GEMRecHitValidation.h b/Validation/MuonGEMRecHits/plugins/GEMRecHitValidation.h index a92499ba2806e..0806ed15e7ce8 100644 --- a/Validation/MuonGEMRecHits/plugins/GEMRecHitValidation.h +++ b/Validation/MuonGEMRecHits/plugins/GEMRecHitValidation.h @@ -4,6 +4,9 @@ #include "Validation/MuonGEMHits/interface/GEMBaseValidation.h" #include "DataFormats/GEMRecHit/interface/GEMRecHitCollection.h" +#include "DataFormats/Common/interface/DetSetVector.h" +#include "SimDataFormats/GEMDigiSimLink/interface/GEMDigiSimLink.h" + class GEMRecHitValidation : public GEMBaseValidation { public: explicit GEMRecHitValidation(const edm::ParameterSet&); @@ -17,35 +20,41 @@ class GEMRecHitValidation : public GEMBaseValidation { // Parameter edm::EDGetTokenT<GEMRecHitCollection> rechit_token_; edm::EDGetTokenT<edm::PSimHitContainer> simhit_token_; + edm::EDGetTokenT<edm::DetSetVector<GEMDigiSimLink>> digisimlink_token_; edm::ESGetToken<GEMGeometry, MuonGeometryRecord> geomToken_; edm::ESGetToken<GEMGeometry, MuonGeometryRecord> geomTokenBeginRun_; // MonitorElement MonitorElement* me_cls_; - MEMap3Ids me_detail_cls_; - - MEMap1Ids me_residual_x_; - MEMap1Ids me_residual_y_; - MEMap3Ids me_detail_residual_x_; - MEMap3Ids me_detail_residual_y_; - - MEMap1Ids me_pull_x_; - MEMap1Ids me_pull_y_; - MEMap3Ids me_detail_pull_x_; - MEMap3Ids me_detail_pull_y_; + MEMap2Ids me_cls_roll_; + MEMap4Ids me_detail_cls_; + + // Residual + MEMap2Ids me_residual_x_; + MEMap2Ids me_residual_y_; + MEMap2Ids me_residual_rphi_; + MEMap4Ids me_detail_residual_x_; + MEMap4Ids me_detail_residual_y_; + MEMap4Ids me_detail_residual_rphi_; + + MEMap2Ids me_detail_pull_x_; + MEMap2Ids me_detail_pull_y_; + MEMap4Ids me_detail_pull_x_la_; + MEMap4Ids me_detail_pull_y_la_; // Occupancy - MEMap1Ids me_occ_zr_; + MEMap3Ids me_total_rechit_; + MEMap3Ids me_occ_pid_; + MEMap3Ids me_occ_ieta_; + MEMap3Ids me_occ_phi_; + MEMap1Ids me_detail_occ_zr_; MEMap3Ids me_detail_occ_xy_; MEMap3Ids me_detail_occ_polar_; - // occupancy of PSimHit and GEMRecHIts for efficiency - MEMap1Ids me_simhit_occ_eta_; - MEMap2Ids me_simhit_occ_phi_; - MEMap2Ids me_simhit_occ_det_; + // GEMRecHit that matches PSimHit - MEMap1Ids me_rechit_occ_eta_; - MEMap2Ids me_rechit_occ_phi_; - MEMap2Ids me_rechit_occ_det_; + MEMap3Ids me_rechit_occ_eta_; + MEMap3Ids me_rechit_occ_phi_; + MEMap2Ids me_detail_rechit_occ_det_; }; #endif // Validation_MuonGEMRecHits_GEMRecHitValidation_h diff --git a/Validation/MuonGEMRecHits/plugins/MuonGEMRecHitsHarvestor.cc b/Validation/MuonGEMRecHits/plugins/MuonGEMRecHitsHarvestor.cc index c6721d1a9c2b4..b48a758fc9078 100644 --- a/Validation/MuonGEMRecHits/plugins/MuonGEMRecHitsHarvestor.cc +++ b/Validation/MuonGEMRecHits/plugins/MuonGEMRecHitsHarvestor.cc @@ -8,49 +8,56 @@ MuonGEMRecHitsHarvestor::MuonGEMRecHitsHarvestor(const edm::ParameterSet& pset) region_ids_ = pset.getUntrackedParameter<std::vector<Int_t> >("regionIds"); station_ids_ = pset.getUntrackedParameter<std::vector<Int_t> >("stationIds"); layer_ids_ = pset.getUntrackedParameter<std::vector<Int_t> >("layerIds"); + + detail_plot_ = pset.getParameter<Bool_t>("detailPlot"); } MuonGEMRecHitsHarvestor::~MuonGEMRecHitsHarvestor() {} void MuonGEMRecHitsHarvestor::dqmEndJob(DQMStore::IBooker& booker, DQMStore::IGetter& getter) { + TString simhit_occ_folder = "MuonGEMHitsV/GEMHitsTask/Occupancy/"; TString occ_folder = "MuonGEMRecHitsV/GEMRecHitsTask/Occupancy/"; TString eff_folder = "MuonGEMRecHitsV/GEMRecHitsTask/Efficiency/"; for (const auto& region_id : region_ids_) { - TString name_suf_re = GEMUtils::getSuffixName(region_id); - TString title_suf_re = GEMUtils::getSuffixTitle(region_id); - - // NOTE Eta - TString rechit_eta_path = occ_folder + "matched_rechit_occ_eta" + name_suf_re; - TString simhit_eta_path = occ_folder + "muon_simhit_occ_eta" + name_suf_re; - - TString eff_eta_name = "eff_eta" + name_suf_re; - TString eff_eta_title = "Eta Efficiency :" + title_suf_re; - - bookEff1D(booker, getter, rechit_eta_path, simhit_eta_path, eff_folder, eff_eta_name, eff_eta_title); - for (const auto& station_id : station_ids_) { TString name_suf_re_st = GEMUtils::getSuffixName(region_id, station_id); TString title_suf_re_st = GEMUtils::getSuffixTitle(region_id, station_id); - // NOTE Phi - TString rechit_phi_path = occ_folder + "matched_rechit_occ_phi" + name_suf_re_st; - TString simhit_phi_path = occ_folder + "muon_simhit_occ_phi" + name_suf_re_st; + if (detail_plot_) { + // NOTE Detector Component + TString rechit_det_path = occ_folder + "matched_rechit_occ_det" + name_suf_re_st; + TString simhit_det_path = simhit_occ_folder + "muon_simhit_occ_det" + name_suf_re_st; + + TString eff_det_name = "eff_det" + name_suf_re_st; + TString eff_det_title = "Detector Component Efficiency :" + title_suf_re_st; + + bookEff2D(booker, getter, rechit_det_path, simhit_det_path, eff_folder, eff_det_name, eff_det_title); + } + for (const auto& layer_id : layer_ids_) { + if (station_id != 0 and layer_id > 2) + continue; + TString name_suf_re_st_ly = GEMUtils::getSuffixName(region_id, station_id, layer_id); + TString title_suf_re_st_ly = GEMUtils::getSuffixTitle(region_id, station_id, layer_id); - TString eff_phi_name = "eff_phi" + name_suf_re_st; - TString eff_phi_title = "Phi Efficiency :" + title_suf_re_st; + // NOTE Eta + TString rechit_eta_path = occ_folder + "matched_rechit_occ_eta" + name_suf_re_st_ly; + TString simhit_eta_path = simhit_occ_folder + "muon_simhit_occ_eta" + name_suf_re_st_ly; - bookEff1D(booker, getter, rechit_phi_path, simhit_phi_path, eff_folder, eff_phi_name, eff_phi_title); + TString eff_eta_name = "eff_eta" + name_suf_re_st_ly; + TString eff_eta_title = "Eta Efficiency :" + title_suf_re_st_ly; - // NOTE Detector Component - TString rechit_det_path = occ_folder + "matched_rechit_occ_det" + name_suf_re_st; - TString simhit_det_path = occ_folder + "muon_simhit_occ_det" + name_suf_re_st; + bookEff1D(booker, getter, rechit_eta_path, simhit_eta_path, eff_folder, eff_eta_name, eff_eta_title); - TString eff_det_name = "eff_det" + name_suf_re_st; - TString eff_det_title = "Detector Component Efficiency :" + title_suf_re_st; + // NOTE Phi + TString rechit_phi_path = occ_folder + "matched_rechit_occ_phi" + name_suf_re_st_ly; + TString simhit_phi_path = simhit_occ_folder + "muon_simhit_occ_phi" + name_suf_re_st_ly; - bookEff2D(booker, getter, rechit_det_path, simhit_det_path, eff_folder, eff_det_name, eff_det_title); + TString eff_phi_name = "eff_phi" + name_suf_re_st_ly; + TString eff_phi_title = "Phi Efficiency :" + title_suf_re_st_ly; - } // station loop - } // region loop + bookEff1D(booker, getter, rechit_phi_path, simhit_phi_path, eff_folder, eff_phi_name, eff_phi_title); + } // layer loop + } // station loop + } // region loop } diff --git a/Validation/MuonGEMRecHits/plugins/MuonGEMRecHitsHarvestor.h b/Validation/MuonGEMRecHits/plugins/MuonGEMRecHitsHarvestor.h index 4034c429d9fac..3a35c9d19d96a 100644 --- a/Validation/MuonGEMRecHits/plugins/MuonGEMRecHitsHarvestor.h +++ b/Validation/MuonGEMRecHits/plugins/MuonGEMRecHitsHarvestor.h @@ -12,6 +12,7 @@ class MuonGEMRecHitsHarvestor : public MuonGEMBaseHarvestor { private: // NOTE to make it compatible to both full geometry and slice test std::vector<Int_t> region_ids_, station_ids_, layer_ids_; + Bool_t detail_plot_; }; #endif // Validation_MuonGEMRecHits_MuonGEMDigisHarvestor_h diff --git a/Validation/MuonGEMRecHits/python/MuonGEMRecHits_cff.py b/Validation/MuonGEMRecHits/python/MuonGEMRecHits_cff.py index 4be512f5198c4..f0857d910d108 100644 --- a/Validation/MuonGEMRecHits/python/MuonGEMRecHits_cff.py +++ b/Validation/MuonGEMRecHits/python/MuonGEMRecHits_cff.py @@ -8,7 +8,7 @@ GEMValidationCommonParameters, gemSimHit = muonSimHitMatcherPSet.gemSimHit, gemRecHit = gemRecHit, - detailPlot = cms.bool(True), + gemDigiSimLink = cms.InputTag("simMuonGEMDigis","GEM"), ) gemLocalRecoValidation = cms.Sequence(gemRecHitsValidation) diff --git a/Validation/MuonGEMRecHits/python/PostProcessor_cff.py b/Validation/MuonGEMRecHits/python/PostProcessor_cff.py index ad39709d31aed..a7bd5eae3df5e 100644 --- a/Validation/MuonGEMRecHits/python/PostProcessor_cff.py +++ b/Validation/MuonGEMRecHits/python/PostProcessor_cff.py @@ -1,10 +1,12 @@ import FWCore.ParameterSet.Config as cms from DQMServices.Core.DQMEDHarvester import DQMEDHarvester +from Validation.MuonGEMHits.MuonGEMCommonParameters_cfi import GEMValidationCommonParameters gemRecHitHarvesting = DQMEDHarvester("MuonGEMRecHitsHarvestor", + GEMValidationCommonParameters, regionIds = cms.untracked.vint32(-1, 1), stationIds = cms.untracked.vint32(1, 2), - layerIds = cms.untracked.vint32(1, 2), + layerIds = cms.untracked.vint32(1, 2, 3, 4, 5, 6), ) diff --git a/Validation/Performance/python/TimeMemoryG4Info.py b/Validation/Performance/python/TimeMemoryG4Info.py index dbf19e5b9f5ad..ffb703fcd8350 100644 --- a/Validation/Performance/python/TimeMemoryG4Info.py +++ b/Validation/Performance/python/TimeMemoryG4Info.py @@ -10,24 +10,8 @@ def customise(process): #Tweak Message logger to dump G4cout and G4cerr messages in G4msg.log #print process.MessageLogger.__dict__ - process.MessageLogger.destinations=cms.untracked.vstring('cout' - ,'cerr' - ,'G4msg' - ) - process.MessageLogger.categories=cms.untracked.vstring('FwkJob' - ,'FwkReport' - ,'FwkSummary' - ,'Root_NoDictionary' - ,'TimeReport' - ,'TimeModule' - ,'TimeEvent' - ,'MemoryCheck' - ,'PhysicsList' - ,'G4cout' - ,'G4cerr' - ) #Configuring the G4msg.log output - process.MessageLogger.G4msg = cms.untracked.PSet( + process.MessageLogger.files = dict(G4msg = cms.untracked.PSet( noTimeStamps = cms.untracked.bool(True) #First eliminate unneeded output ,threshold = cms.untracked.string('INFO') @@ -49,7 +33,7 @@ def customise(process): ,G4cout = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ,G4cerr = cms.untracked.PSet(limit = cms.untracked.int32(-1)) ) - + ) #Add these 3 lines to put back the summary for timing information at the end of the logfile #(needed for TimeReport report) if hasattr(process,'options'): diff --git a/Validation/Performance/python/TimeMemoryJobReport.py b/Validation/Performance/python/TimeMemoryJobReport.py index bca720ab1f136..e95b3ca8086d9 100644 --- a/Validation/Performance/python/TimeMemoryJobReport.py +++ b/Validation/Performance/python/TimeMemoryJobReport.py @@ -21,7 +21,6 @@ def customiseWithTimeMemoryJobReport(process): ) #Silence the final Timing service report - process.MessageLogger.categories.append("TimeReport") process.MessageLogger.cerr.TimeReport = cms.untracked.PSet(limit = cms.untracked.int32(0)) return(process) diff --git a/Validation/RecoEgamma/plugins/ElectronMcMiniAODSignalValidator.cc b/Validation/RecoEgamma/plugins/ElectronMcMiniAODSignalValidator.cc index 6e49ca9bbd0c0..9ee19389ab774 100644 --- a/Validation/RecoEgamma/plugins/ElectronMcMiniAODSignalValidator.cc +++ b/Validation/RecoEgamma/plugins/ElectronMcMiniAODSignalValidator.cc @@ -4,6 +4,7 @@ // user include files #include "Validation/RecoEgamma/plugins/ElectronMcMiniAODSignalValidator.h" #include "CLHEP/Units/GlobalPhysicalConstants.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" // user include files diff --git a/Validation/RecoMuon/plugins/MuonTrackValidator.cc b/Validation/RecoMuon/plugins/MuonTrackValidator.cc index ca2869f7ec027..52d087ef4bfcf 100644 --- a/Validation/RecoMuon/plugins/MuonTrackValidator.cc +++ b/Validation/RecoMuon/plugins/MuonTrackValidator.cc @@ -55,8 +55,9 @@ void MuonTrackValidator::bookHistograms(DQMEDAnalyzer::DQMStore::IBooker& ibooke std::replace(dirName.begin(), dirName.end(), ':', '_'); ibooker.setCurrentFolder(dirName); - h_tracks.push_back(ibooker.book1D("Ntracks", "Number of reconstructed tracks", 100, -0.5, 99.5)); - h_fakes.push_back(ibooker.book1D("Nfakes", "Number of fake reco tracks", 20, -0.5, 19.5)); + h_tracks.push_back( + ibooker.book1D("Ntracks", "Number of reconstructed tracks", nintNTracks, minNTracks, maxNTracks)); + h_fakes.push_back(ibooker.book1D("Nfakes", "Number of fake reco tracks", nintFTracks, minFTracks, maxFTracks)); h_charge.push_back(ibooker.book1D("Ncharge", "track charge", 3, -1.5, 1.5)); h_recoeta.push_back(ibooker.book1D("num_reco_eta", "N of reco track vs eta", nintEta, minEta, maxEta)); diff --git a/Validation/RecoMuon/plugins/MuonTrackValidatorBase.h b/Validation/RecoMuon/plugins/MuonTrackValidatorBase.h index d2e9ea3829e34..fa396dc2af7e3 100644 --- a/Validation/RecoMuon/plugins/MuonTrackValidatorBase.h +++ b/Validation/RecoMuon/plugins/MuonTrackValidatorBase.h @@ -88,6 +88,13 @@ class MuonTrackValidatorBase { maxRPCHit = muonHistoParameters.getParameter<double>("maxRPCHit"); nintRPCHit = muonHistoParameters.getParameter<int>("nintRPCHit"); // + + minNTracks = muonHistoParameters.getParameter<int>("minNTracks"); + maxNTracks = muonHistoParameters.getParameter<int>("maxNTracks"); + nintNTracks = muonHistoParameters.getParameter<int>("nintNTracks"); + minFTracks = muonHistoParameters.getParameter<int>("minFTracks"); + maxFTracks = muonHistoParameters.getParameter<int>("maxFTracks"); + nintFTracks = muonHistoParameters.getParameter<int>("nintFTracks"); minLayers = muonHistoParameters.getParameter<double>("minLayers"); maxLayers = muonHistoParameters.getParameter<double>("maxLayers"); nintLayers = muonHistoParameters.getParameter<int>("nintLayers"); @@ -213,6 +220,8 @@ class MuonTrackValidatorBase { edm::ParameterSet muonHistoParameters; + int minNTracks, maxNTracks, nintNTracks; + int minFTracks, maxFTracks, nintFTracks; double minEta, maxEta; int nintEta; bool useFabsEta; diff --git a/Validation/RecoMuon/python/histoParameters_cff.py b/Validation/RecoMuon/python/histoParameters_cff.py index fdce1cd508ea3..2e8906435b5b7 100644 --- a/Validation/RecoMuon/python/histoParameters_cff.py +++ b/Validation/RecoMuon/python/histoParameters_cff.py @@ -1,6 +1,15 @@ import FWCore.ParameterSet.Config as cms defaultMuonHistoParameters = cms.PSet( + + minNTracks = cms.int32(0), + maxNTracks = cms.int32(100), + nintNTracks = cms.int32(100), + # + minFTracks = cms.int32(0), + maxFTracks = cms.int32(20), + nintFTracks = cms.int32(20), + # useFabsEta = cms.bool(False), minEta = cms.double(-2.5), maxEta = cms.double(2.5), @@ -108,8 +117,8 @@ gemMuonHistoParameters = trkMuonHistoParameters.clone() gemMuonHistoParameters.usetracker = True gemMuonHistoParameters.usemuon = False -gemMuonHistoParameters.minEta = -2.4 -gemMuonHistoParameters.maxEta = +2.4 +gemMuonHistoParameters.minEta = -2.8 +gemMuonHistoParameters.maxEta = +2.8 gemMuonHistoParameters.nintEta = 48 #gemMuonHistoParameters.nintNHit = 41 # this is the tracker default #gemMuonHistoParameters.maxNHit = 40.5 @@ -190,6 +199,17 @@ glbMuonHistoParameters.maxNHit = 80.5 glbMuonHistoParameters.do_TRKhitsPlots = True glbMuonHistoParameters.do_MUOhitsPlots = True + +##################################################################################### +# Reco Muon tracks +recoMuonHistoParameters = defaultMuonHistoParameters.clone() +recoMuonHistoParameters.usetracker = True +recoMuonHistoParameters.usemuon = True +recoMuonHistoParameters.nintNHit = 81 +recoMuonHistoParameters.maxNHit = 80.5 +recoMuonHistoParameters.do_TRKhitsPlots = True +recoMuonHistoParameters.do_MUOhitsPlots = True + ##################################################################################### # Displaced TRK tracks displacedTrkMuonHistoParameters = trkMuonHistoParameters.clone() @@ -356,3 +376,63 @@ # glbCosmic1LegMuonHistoParameters.nintPixels = 11 glbCosmic1LegMuonHistoParameters.maxPixels = 10.5 + + +## Customize ranges for phase 2 samples +# TRK tracks +trkMuonHistoParameters_phase2 = trkMuonHistoParameters.clone() +trkMuonHistoParameters_phase2.minPU = 150 +trkMuonHistoParameters_phase2.maxPU = 250 + +# GEMmuon tracks +gemMuonHistoParameters_phase2 = gemMuonHistoParameters.clone() +gemMuonHistoParameters_phase2.minPU = 150 +gemMuonHistoParameters_phase2.maxPU = 250 +gemMuonHistoParameters_phase2.maxNTracks = 150 +gemMuonHistoParameters_phase2.nintNTracks = 100 +gemMuonHistoParameters_phase2.maxFTracks = 50 +gemMuonHistoParameters_phase2.nintFTracks = 50 + +# STA tracks +staMuonHistoParameters_phase2 = staMuonHistoParameters.clone() +staMuonHistoParameters_phase2.minPU = 150 +staMuonHistoParameters_phase2.maxPU = 250 + +# STA seeds (here hits are counting DT,CSC segments rather than individual hit layers) +staSeedMuonHistoParameters_phase2 = staSeedMuonHistoParameters.clone() +staSeedMuonHistoParameters_phase2.minPU = 150 +staSeedMuonHistoParameters_phase2.maxPU = 250 + +# STA Upd tracks +staUpdMuonHistoParameters_phase2 = staUpdMuonHistoParameters.clone() +staUpdMuonHistoParameters_phase2.minPU = 150 +staUpdMuonHistoParameters_phase2.maxPU = 250 + +# GLB tracks +glbMuonHistoParameters_phase2 = glbMuonHistoParameters.clone() +glbMuonHistoParameters_phase2.minPU = 150 +glbMuonHistoParameters_phase2.maxPU = 250 + +#RecoMuon tracks +recoMuonHistoParameters_phase2 = recoMuonHistoParameters.clone() +recoMuonHistoParameters_phase2.minPU = 150 +recoMuonHistoParameters_phase2.maxPU = 250 +recoMuonHistoParameters_phase2.maxNTracks = 150 +recoMuonHistoParameters_phase2.nintNTracks = 100 +recoMuonHistoParameters_phase2.maxFTracks = 50 +recoMuonHistoParameters_phase2.nintFTracks = 50 + +# Displaced TRK tracks +displacedTrkMuonHistoParameters_phase2 = displacedTrkMuonHistoParameters.clone() +displacedTrkMuonHistoParameters_phase2.minPU = 150 +displacedTrkMuonHistoParameters_phase2.maxPU = 250 + +# Displaced muons: STA tracks +displacedStaMuonHistoParameters_phase2 = displacedStaMuonHistoParameters.clone() +displacedStaMuonHistoParameters_phase2.minPU = 150 +displacedStaMuonHistoParameters_phase2.maxPU = 250 + +# Displaced muons: GLB tracks +displacedGlbMuonHistoParameters_phase2 = displacedGlbMuonHistoParameters.clone() +displacedGlbMuonHistoParameters_phase2.minPU = 150 +displacedGlbMuonHistoParameters_phase2.maxPU = 250 diff --git a/Validation/RecoMuon/python/muonValidation_cff.py b/Validation/RecoMuon/python/muonValidation_cff.py index d070ff52e240d..79d283bb38729 100644 --- a/Validation/RecoMuon/python/muonValidation_cff.py +++ b/Validation/RecoMuon/python/muonValidation_cff.py @@ -173,6 +173,52 @@ glbCosmic1LegMuonTrackVSelMuonAssoc.muonTPSelector = cosmicMuonTPSet glbCosmic1LegMuonTrackVSelMuonAssoc.muonHistoParameters = glbCosmic1LegMuonHistoParameters + + +########################################################################## +### Customization for Phase II samples +### + +trkMuonTrackVTrackAssoc_phase2 = trkMuonTrackVTrackAssoc.clone() +trkMuonTrackVTrackAssoc_phase2.muonHistoParameters = trkMuonHistoParameters_phase2 + +trkProbeTrackVMuonAssoc_phase2 = trkProbeTrackVMuonAssoc.clone() +trkProbeTrackVMuonAssoc_phase2.muonHistoParameters = trkMuonHistoParameters_phase2 + +staSeedTrackVMuonAssoc_phase2 = staSeedTrackVMuonAssoc.clone() +staSeedTrackVMuonAssoc_phase2.muonHistoParameters = staSeedMuonHistoParameters + +staMuonTrackVMuonAssoc_phase2 = staMuonTrackVMuonAssoc.clone() +staMuonTrackVMuonAssoc_phase2.muonHistoParameters = staMuonHistoParameters_phase2 + +staUpdMuonTrackVMuonAssoc_phase2 = staUpdMuonTrackVMuonAssoc.clone() +staUpdMuonTrackVMuonAssoc_phase2.muonHistoParameters = staUpdMuonHistoParameters_phase2 + +glbMuonTrackVMuonAssoc_phase2 = glbMuonTrackVMuonAssoc.clone() +glbMuonTrackVMuonAssoc_phase2.muonHistoParameters = glbMuonHistoParameters_phase2 + +pfMuonTrackVMuonAssoc_phase2 = pfMuonTrackVMuonAssoc.clone() +pfMuonTrackVMuonAssoc_phase2.muonHistoParameters = glbMuonHistoParameters_phase2 + +recomuMuonTrackVMuonAssoc_phase2 = recomuMuonTrackVMuonAssoc.clone() +recomuMuonTrackVMuonAssoc_phase2.muonHistoParameters = recoMuonHistoParameters_phase2 + +tunepMuonTrackVMuonAssoc_phase2 = tunepMuonTrackVMuonAssoc.clone() +tunepMuonTrackVMuonAssoc_phase2.muonHistoParameters = glbMuonHistoParameters_phase2 + +displacedStaMuonTrackVMuonAssoc_phase2 = displacedStaMuonTrackVMuonAssoc.clone() +displacedStaMuonTrackVMuonAssoc_phase2.muonHistoParameters = displacedStaMuonHistoParameters_phase2 + +displacedGlbMuonTrackVMuonAssoc_phase2 = displacedGlbMuonTrackVMuonAssoc.clone() +displacedGlbMuonTrackVMuonAssoc_phase2.muonHistoParameters = displacedGlbMuonHistoParameters_phase2 + +displacedTrackVMuonAssoc_phase2 = displacedTrackVMuonAssoc.clone() +displacedTrackVMuonAssoc_phase2.muonHistoParameters = displacedTrkMuonHistoParameters_phase2 + +gemMuonTrackVMuonAssoc_phase2 = gemMuonTrackVMuonAssoc.clone() +gemMuonTrackVMuonAssoc_phase2.muonHistoParameters = gemMuonHistoParameters_phase2 + + ################################################################################## # Muon validation sequences using MuonTrackValidator # @@ -216,20 +262,22 @@ ) recoMuonValidation_reduced_seq = cms.Sequence( - probeTracks_seq + tpToTkMuonAssociation + trkProbeTrackVMuonAssoc - +tpToStaUpdMuonAssociation + staUpdMuonTrackVMuonAssoc - +tpToGlbMuonAssociation + glbMuonTrackVMuonAssoc - +tunepMuonTracks_seq + tpToTunePMuonAssociation + tunepMuonTrackVMuonAssoc - +pfMuonTracks_seq + tpToPFMuonAssociation + pfMuonTrackVMuonAssoc - +recoMuonTracks_seq + tpTorecoMuonMuonAssociation + recomuMuonTrackVMuonAssoc - +tpToDisplacedStaMuonAssociation + displacedStaMuonTrackVMuonAssoc - +tpToDisplacedTrkMuonAssociation + displacedTrackVMuonAssoc - +tpToDisplacedGlbMuonAssociation + displacedGlbMuonTrackVMuonAssoc + probeTracks_seq + tpToTkMuonAssociation + trkProbeTrackVMuonAssoc_phase2 + +tpToStaUpdMuonAssociation + staUpdMuonTrackVMuonAssoc_phase2 + +tpToGlbMuonAssociation + glbMuonTrackVMuonAssoc_phase2 + +tunepMuonTracks_seq + tpToTunePMuonAssociation + tunepMuonTrackVMuonAssoc_phase2 + +pfMuonTracks_seq + tpToPFMuonAssociation + pfMuonTrackVMuonAssoc_phase2 + +recoMuonTracks_seq + tpTorecoMuonMuonAssociation + recomuMuonTrackVMuonAssoc_phase2 + +tpToDisplacedStaMuonAssociation + displacedStaMuonTrackVMuonAssoc_phase2 + +tpToDisplacedTrkMuonAssociation + displacedTrackVMuonAssoc_phase2 + +tpToDisplacedGlbMuonAssociation + displacedGlbMuonTrackVMuonAssoc_phase2 ) gemMuonValidation = cms.Sequence(extractGemMuonsTracks_seq + tpToGEMMuonMuonAssociation + gemMuonTrackVMuonAssoc) me0MuonValidation = cms.Sequence(extractMe0MuonsTracks_seq + tpToME0MuonMuonAssociation + me0MuonTrackVMuonAssoc) +gemMuonValidation_phase2 = cms.Sequence(extractGemMuonsTracks_seq + tpToGEMMuonMuonAssociation + gemMuonTrackVMuonAssoc_phase2) + ########################################################################## # The full offline muon validation sequence # @@ -254,12 +302,12 @@ #_phase2_muonValidation = recoMuonValidation.copy() #For full validation _phase2_muonValidation = recoMuonValidation_reduced_seq.copy() -_phase2_muonValidation += gemMuonValidation +_phase2_muonValidation += gemMuonValidation_phase2 _phase2_muonValidation += me0MuonValidation #_phase2_ge0_muonValidation = recoMuonValidation.copy() #For full validation _phase2_ge0_muonValidation = recoMuonValidation_reduced_seq.copy() -_phase2_ge0_muonValidation += gemMuonValidation +_phase2_ge0_muonValidation += gemMuonValidation_phase2 from Configuration.Eras.Modifier_run3_GEM_cff import run3_GEM run3_GEM.toReplaceWith( recoMuonValidation, _run3_muonValidation ) @@ -267,3 +315,4 @@ phase2_muon.toReplaceWith( recoMuonValidation, _phase2_muonValidation ) from Configuration.Eras.Modifier_phase2_GE0_cff import phase2_GE0 phase2_GE0.toReplaceWith( recoMuonValidation, _phase2_ge0_muonValidation ) + diff --git a/Validation/RecoMuon/test/muonValidation_cfg.py b/Validation/RecoMuon/test/muonValidation_cfg.py index c89d0ebaab6a7..46765af3f88bd 100644 --- a/Validation/RecoMuon/test/muonValidation_cfg.py +++ b/Validation/RecoMuon/test/muonValidation_cfg.py @@ -25,7 +25,7 @@ process.outpath = cms.EndPath(process.out) process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.categories = ['TrackAssociator', 'TrackValidator'] + process.MessageLogger.debugModules = ['*'] process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), @@ -40,7 +40,7 @@ ) ) process.MessageLogger.cerr = cms.untracked.PSet( - placeholder = cms.untracked.bool(True) + enable = cms.untracked.bool(False) ) process.load('Configuration/StandardSequences/RawToDigi_cff') diff --git a/Validation/RecoParticleFlow/README.md b/Validation/RecoParticleFlow/README.md index 02a7664474e8d..dd13b13509cfc 100644 --- a/Validation/RecoParticleFlow/README.md +++ b/Validation/RecoParticleFlow/README.md @@ -8,9 +8,9 @@ Set up the work area for lxplus with SLC7 (default since April 2019) ~~~ -export SCRAM_ARCH=slc7_amd64_gcc820 -cmsrel CMSSW_11_2_0_pre6 -cd CMSSW_11_2_0_pre6 +export SCRAM_ARCH=slc7_amd64_gcc900 +cmsrel CMSSW_11_3_0_pre1 +cd CMSSW_11_3_0_pre1 cmsenv ~~~ @@ -101,7 +101,7 @@ cd test/crab Initialize CRAB environment if not done already: ~~~ -source /cvmfs/cms.cern.ch/crab3/sh.crab +source /cvmfs/cms.cern.ch/crab3/crab.sh voms-proxy-init -voms cms cmsenv ~~~ diff --git a/Validation/RecoParticleFlow/plugins/OffsetAnalyzerDQM.cc b/Validation/RecoParticleFlow/plugins/OffsetAnalyzerDQM.cc index 9689f7ad2b8fb..7fd2b7204d6d6 100644 --- a/Validation/RecoParticleFlow/plugins/OffsetAnalyzerDQM.cc +++ b/Validation/RecoParticleFlow/plugins/OffsetAnalyzerDQM.cc @@ -37,6 +37,7 @@ class OffsetAnalyzerDQM : public DQMEDAnalyzer { virtual void book(DQMStore::IBooker& booker) { booker.setCurrentFolder(dir); plot = booker.book1D(name, title, nxbins, xlow, xhigh); + plot->setStatOverflows(kTRUE); } virtual void fill(float value) { diff --git a/Validation/RecoParticleFlow/plugins/PFAnalysis.cc b/Validation/RecoParticleFlow/plugins/PFAnalysis.cc deleted file mode 100644 index e3cb706992090..0000000000000 --- a/Validation/RecoParticleFlow/plugins/PFAnalysis.cc +++ /dev/null @@ -1,1123 +0,0 @@ -// Based on RecoNtuple/HGCalAnalysis with modifications for PF -// -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/one/EDAnalyzer.h" - -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h" -#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" -#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" -#include "DataFormats/HcalRecHit/interface/HFRecHit.h" -#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" -#include "Geometry/HcalCommonData/interface/HcalHitRelabeller.h" -#include "DataFormats/HcalDetId/interface/HcalDetId.h" -#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" -#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" -#include "DataFormats/ParticleFlowReco/interface/PFBlockElementSuperCluster.h" -#include "DataFormats/ParticleFlowReco/interface/PFBlockElementGsfTrack.h" -#include "DataFormats/ParticleFlowReco/interface/PFBlockElementTrack.h" -#include "DataFormats/ParticleFlowReco/interface/PFBlockElementBrem.h" -#include "DataFormats/ParticleFlowReco/interface/PFBlockElementCluster.h" -#include "Geometry/HcalTowerAlgo/interface/HcalGeometry.h" -#include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h" -#include "SimDataFormats/CaloAnalysis/interface/SimCluster.h" -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" -#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" -#include "DataFormats/RecoCandidate/interface/TrackAssociation.h" -#include "DataFormats/ParticleFlowReco/interface/PFBlock.h" - -#include "DataFormats/Math/interface/deltaPhi.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/DetId/interface/DetId.h" - -#include "DataFormats/GeometrySurface/interface/PlaneBuilder.h" -#include "Geometry/CaloGeometry/interface/CaloCellGeometry.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" - -#include "CommonTools/BaseParticlePropagator/interface/BaseParticlePropagator.h" -#include "Math/Transform3D.h" -#include "MagneticField/Engine/interface/MagneticField.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" -#include "MagneticField/VolumeGeometry/interface/MagVolumeOutsideValidity.h" - -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "TH1F.h" -#include "TVector2.h" -#include "TTree.h" - -#include <map> -#include <set> -#include <string> -#include <vector> -#include <set> - -using namespace std; - -class ElementWithIndex { -public: - const reco::PFBlockElement& orig; - size_t idx_block; - size_t idx_elem; - ElementWithIndex(const reco::PFBlockElement& _orig, size_t _idx_block, size_t _idx_elem) - : orig(_orig), idx_block(_idx_block), idx_elem(_idx_elem){}; -}; - -int find_element_ref(const vector<ElementWithIndex>& vec, const edm::RefToBase<reco::Track>& r) { - for (unsigned int i = 0; i < vec.size(); i++) { - const auto& elem = vec.at(i); - if (elem.orig.type() == reco::PFBlockElement::TRACK) { - const auto& ref = elem.orig.trackRef(); - assert(ref.isNonnull()); - if (ref.key() == r.key()) { - return i; - } - } else if (elem.orig.type() == reco::PFBlockElement::BREM) { - const auto& ref = elem.orig.trackRefPF(); - if (ref.isNonnull()) { - const auto& ref2 = ref->trackRef(); - assert(ref2.isNonnull()); - if (ref2.key() == r.key()) { - return i; - } - } - } - } - return -1; -} - -double detid_compare(const map<uint64_t, double>& rechits, - const map<uint64_t, double>& simhits, - const map<uint64_t, double>& rechits_energy, - bool print) { - double ret = 0.0; - - for (const auto& rh : rechits) { - for (const auto& sh : simhits) { - if (rh.first == sh.first) { - //rechit energy times simhit fraction - ret += rechits_energy.at(rh.first) * sh.second; - break; - } - } - } - return ret; -} - -class PFAnalysis : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::SharedResources> { -public: - typedef ROOT::Math::Transform3D::Point Point; - - PFAnalysis(); - explicit PFAnalysis(const edm::ParameterSet&); - ~PFAnalysis() override; - - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - void beginRun(edm::Run const& iEvent, edm::EventSetup const&) override; - void endRun(edm::Run const& iEvent, edm::EventSetup const&) override; - -private: - void beginJob() override; - void analyze(const edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - void processTrackingParticles(const edm::View<TrackingParticle>& trackingParticles, - edm::Handle<edm::View<TrackingParticle>>& trackingParticlesHandle); - - pair<vector<ElementWithIndex>, vector<tuple<int, int, float>>> processBlocks( - const std::vector<reco::PFBlock>& pfBlocks); - - void associateClusterToSimCluster(const vector<ElementWithIndex>& all_elements); - - void clearVariables(); - - GlobalPoint getHitPosition(const DetId& id); - // ----------member data --------------------------- - - edm::EDGetTokenT<std::vector<reco::GenParticle>> genParticles_; - edm::EDGetTokenT<edm::View<TrackingParticle>> trackingParticles_; - edm::EDGetTokenT<edm::View<CaloParticle>> caloParticles_; - edm::EDGetTokenT<edm::View<reco::Track>> tracks_; - edm::EDGetTokenT<std::vector<reco::PFBlock>> pfBlocks_; - edm::EDGetTokenT<std::vector<reco::PFCandidate>> pfCandidates_; - edm::EDGetTokenT<reco::RecoToSimCollection> tracks_recotosim_; - - TTree* t_; - - edm::RunNumber_t ev_run_; - edm::LuminosityBlockNumber_t ev_lumi_; - edm::EventNumber_t ev_event_; - - vector<float> trackingparticle_eta_; - vector<float> trackingparticle_phi_; - vector<float> trackingparticle_pt_; - vector<float> trackingparticle_px_; - vector<float> trackingparticle_py_; - vector<float> trackingparticle_pz_; - vector<float> trackingparticle_energy_; - vector<float> trackingparticle_dvx_; - vector<float> trackingparticle_dvy_; - vector<float> trackingparticle_dvz_; - vector<int> trackingparticle_bx_; - vector<int> trackingparticle_ev_; - vector<float> trackingparticle_ovx_; - vector<float> trackingparticle_ovy_; - vector<float> trackingparticle_ovz_; - vector<float> trackingparticle_exx_; - vector<float> trackingparticle_exy_; - vector<int> trackingparticle_mother_; - vector<int> trackingparticle_pid_; - - vector<float> simcluster_eta_; - vector<float> simcluster_phi_; - vector<float> simcluster_pt_; - vector<float> simcluster_energy_; - vector<float> simcluster_px_; - vector<float> simcluster_py_; - vector<float> simcluster_pz_; - vector<int> simcluster_bx_; - vector<int> simcluster_ev_; - vector<int> simcluster_pid_; - vector<int> simcluster_idx_trackingparticle_; - vector<int> simcluster_nhits_; - vector<std::map<uint64_t, double>> simcluster_detids_; - - vector<float> simhit_frac_; - vector<float> simhit_x_; - vector<float> simhit_y_; - vector<float> simhit_z_; - vector<float> simhit_eta_; - vector<float> simhit_phi_; - vector<int> simhit_det_; - vector<int> simhit_subdet_; - vector<int> simhit_idx_simcluster_; - vector<uint64_t> simhit_detid_; - - vector<float> rechit_e_; - vector<float> rechit_x_; - vector<float> rechit_y_; - vector<float> rechit_z_; - vector<float> rechit_det_; - vector<float> rechit_subdet_; - vector<float> rechit_eta_; - vector<float> rechit_phi_; - vector<int> rechit_idx_element_; - vector<uint64_t> rechit_detid_; - - vector<float> simtrack_x_; - vector<float> simtrack_y_; - vector<float> simtrack_z_; - vector<int> simtrack_idx_simcluster_; - vector<int> simtrack_pid_; - - vector<float> gen_eta_; - vector<float> gen_phi_; - vector<float> gen_pt_; - vector<float> gen_px_; - vector<float> gen_py_; - vector<float> gen_pz_; - vector<float> gen_energy_; - vector<int> gen_charge_; - vector<int> gen_pdgid_; - vector<int> gen_status_; - vector<vector<int>> gen_daughters_; - - vector<float> element_pt_; - vector<float> element_px_; - vector<float> element_py_; - vector<float> element_pz_; - vector<float> element_eta_; - vector<float> element_phi_; - vector<float> element_energy_; - vector<float> element_eta_ecal_; - vector<float> element_phi_ecal_; - vector<float> element_eta_hcal_; - vector<float> element_phi_hcal_; - vector<int> element_charge_; - vector<int> element_type_; - vector<int> element_layer_; - vector<float> element_depth_; - vector<float> element_trajpoint_; - - vector<int> element_distance_i_; - vector<int> element_distance_j_; - vector<float> element_distance_d_; - - vector<float> pfcandidate_eta_; - vector<float> pfcandidate_phi_; - vector<float> pfcandidate_pt_; - vector<float> pfcandidate_px_; - vector<float> pfcandidate_py_; - vector<float> pfcandidate_pz_; - vector<float> pfcandidate_energy_; - vector<int> pfcandidate_pdgid_; - - vector<pair<int, int>> trackingparticle_to_element; - vector<pair<int, int>> simcluster_to_element; - vector<float> simcluster_to_element_cmp; - vector<pair<int, int>> element_to_candidate; - - // and also the magnetic field - MagneticField const* aField_; - - edm::ESGetToken<CaloGeometry, CaloGeometryRecord> geometryToken_; - edm::ESGetToken<HcalTopology, HcalRecNumberingRecord> topologyToken_; - - CaloGeometry* geom; - HcalTopology* hcal_topo; - const HcalDDDRecConstants* hcons; -}; - -PFAnalysis::PFAnalysis() { ; } - -PFAnalysis::PFAnalysis(const edm::ParameterSet& iConfig) { - tracks_recotosim_ = consumes<reco::RecoToSimCollection>(edm::InputTag("trackingParticleRecoTrackAsssociation")); - trackingParticles_ = consumes<edm::View<TrackingParticle>>(edm::InputTag("mix", "MergedTrackTruth")); - caloParticles_ = consumes<edm::View<CaloParticle>>(edm::InputTag("mix", "MergedCaloTruth")); - genParticles_ = consumes<std::vector<reco::GenParticle>>(edm::InputTag("genParticles")); - pfBlocks_ = consumes<std::vector<reco::PFBlock>>(edm::InputTag("particleFlowBlock")); - pfCandidates_ = consumes<std::vector<reco::PFCandidate>>(edm::InputTag("particleFlow")); - tracks_ = consumes<edm::View<reco::Track>>(edm::InputTag("generalTracks")); - - geometryToken_ = esConsumes<CaloGeometry, CaloGeometryRecord>(edm::ESInputTag{}); - topologyToken_ = esConsumes<HcalTopology, HcalRecNumberingRecord>(edm::ESInputTag{}); - - usesResource(TFileService::kSharedResource); - edm::Service<TFileService> fs; - fs->make<TH1F>("total", "total", 100, 0, 5.); - - t_ = fs->make<TTree>("pftree", "pftree"); - - // event info - t_->Branch("event", &ev_event_); - t_->Branch("lumi", &ev_lumi_); - t_->Branch("run", &ev_run_); - - t_->Branch("trackingparticle_eta", &trackingparticle_eta_); - t_->Branch("trackingparticle_phi", &trackingparticle_phi_); - t_->Branch("trackingparticle_pt", &trackingparticle_pt_); - t_->Branch("trackingparticle_px", &trackingparticle_px_); - t_->Branch("trackingparticle_py", &trackingparticle_py_); - t_->Branch("trackingparticle_pz", &trackingparticle_pz_); - t_->Branch("trackingparticle_energy", &trackingparticle_energy_); - t_->Branch("trackingparticle_dvx", &trackingparticle_dvx_); - t_->Branch("trackingparticle_dvy", &trackingparticle_dvy_); - t_->Branch("trackingparticle_dvz", &trackingparticle_dvz_); - t_->Branch("trackingparticle_bx", &trackingparticle_bx_); - t_->Branch("trackingparticle_ev", &trackingparticle_ev_); - t_->Branch("trackingparticle_pid", &trackingparticle_pid_); - - t_->Branch("simcluster_eta", &simcluster_eta_); - t_->Branch("simcluster_phi", &simcluster_phi_); - t_->Branch("simcluster_pt", &simcluster_pt_); - t_->Branch("simcluster_px", &simcluster_px_); - t_->Branch("simcluster_py", &simcluster_py_); - t_->Branch("simcluster_pz", &simcluster_pz_); - t_->Branch("simcluster_energy", &simcluster_energy_); - t_->Branch("simcluster_bx", &simcluster_bx_); - t_->Branch("simcluster_ev", &simcluster_ev_); - t_->Branch("simcluster_pid", &simcluster_pid_); - t_->Branch("simcluster_idx_trackingparticle", &simcluster_idx_trackingparticle_); - t_->Branch("simcluster_nhits", &simcluster_nhits_); - - t_->Branch("simhit_frac", &simhit_frac_); - t_->Branch("simhit_x", &simhit_x_); - t_->Branch("simhit_y", &simhit_y_); - t_->Branch("simhit_z", &simhit_z_); - t_->Branch("simhit_det", &simhit_det_); - t_->Branch("simhit_subdet", &simhit_subdet_); - t_->Branch("simhit_eta", &simhit_eta_); - t_->Branch("simhit_phi", &simhit_phi_); - t_->Branch("simhit_idx_simcluster", &simhit_idx_simcluster_); - t_->Branch("simhit_detid", &simhit_detid_); - - t_->Branch("rechit_e", &rechit_e_); - t_->Branch("rechit_x", &rechit_x_); - t_->Branch("rechit_y", &rechit_y_); - t_->Branch("rechit_z", &rechit_z_); - t_->Branch("rechit_det", &rechit_det_); - t_->Branch("rechit_subdet", &rechit_subdet_); - t_->Branch("rechit_eta", &rechit_eta_); - t_->Branch("rechit_phi", &rechit_phi_); - t_->Branch("rechit_idx_element", &rechit_idx_element_); - t_->Branch("rechit_detid", &rechit_detid_); - - t_->Branch("simtrack_x", &simtrack_x_); - t_->Branch("simtrack_y", &simtrack_y_); - t_->Branch("simtrack_z", &simtrack_z_); - t_->Branch("simtrack_idx_simcluster_", &simtrack_idx_simcluster_); - t_->Branch("simtrack_pid", &simtrack_pid_); - - t_->Branch("gen_eta", &gen_eta_); - t_->Branch("gen_phi", &gen_phi_); - t_->Branch("gen_pt", &gen_pt_); - t_->Branch("gen_px", &gen_px_); - t_->Branch("gen_py", &gen_py_); - t_->Branch("gen_pz", &gen_pz_); - t_->Branch("gen_energy", &gen_energy_); - t_->Branch("gen_charge", &gen_charge_); - t_->Branch("gen_pdgid", &gen_pdgid_); - t_->Branch("gen_status", &gen_status_); - t_->Branch("gen_daughters", &gen_daughters_); - - //PF Elements - t_->Branch("element_pt", &element_pt_); - t_->Branch("element_px", &element_px_); - t_->Branch("element_py", &element_py_); - t_->Branch("element_pz", &element_pz_); - t_->Branch("element_eta", &element_eta_); - t_->Branch("element_phi", &element_phi_); - t_->Branch("element_energy", &element_energy_); - t_->Branch("element_eta_ecal", &element_eta_ecal_); - t_->Branch("element_phi_ecal", &element_phi_ecal_); - t_->Branch("element_eta_hcal", &element_eta_hcal_); - t_->Branch("element_phi_hcal", &element_phi_hcal_); - t_->Branch("element_charge", &element_charge_); - t_->Branch("element_type", &element_type_); - t_->Branch("element_layer", &element_layer_); - t_->Branch("element_depth", &element_depth_); - t_->Branch("element_trajpoint", &element_trajpoint_); - - //Distance matrix between PF elements - t_->Branch("element_distance_i", &element_distance_i_); - t_->Branch("element_distance_j", &element_distance_j_); - t_->Branch("element_distance_d", &element_distance_d_); - - t_->Branch("pfcandidate_eta", &pfcandidate_eta_); - t_->Branch("pfcandidate_phi", &pfcandidate_phi_); - t_->Branch("pfcandidate_pt", &pfcandidate_pt_); - t_->Branch("pfcandidate_px", &pfcandidate_px_); - t_->Branch("pfcandidate_py", &pfcandidate_py_); - t_->Branch("pfcandidate_pz", &pfcandidate_pz_); - t_->Branch("pfcandidate_energy", &pfcandidate_energy_); - t_->Branch("pfcandidate_pdgid", &pfcandidate_pdgid_); - - //Links between reco, gen and PFCandidate objects - t_->Branch("trackingparticle_to_element", &trackingparticle_to_element); - t_->Branch("simcluster_to_element", &simcluster_to_element); - t_->Branch("simcluster_to_element_cmp", &simcluster_to_element_cmp); - t_->Branch("element_to_candidate", &element_to_candidate); -} // constructor - -PFAnalysis::~PFAnalysis() {} - -void PFAnalysis::clearVariables() { - ev_run_ = 0; - ev_lumi_ = 0; - ev_event_ = 0; - - trackingparticle_to_element.clear(); - simcluster_to_element.clear(); - simcluster_to_element_cmp.clear(); - element_to_candidate.clear(); - - trackingparticle_eta_.clear(); - trackingparticle_phi_.clear(); - trackingparticle_pt_.clear(); - trackingparticle_px_.clear(); - trackingparticle_py_.clear(); - trackingparticle_pz_.clear(); - trackingparticle_energy_.clear(); - trackingparticle_dvx_.clear(); - trackingparticle_dvy_.clear(); - trackingparticle_dvz_.clear(); - trackingparticle_bx_.clear(); - trackingparticle_ev_.clear(); - trackingparticle_ovx_.clear(); - trackingparticle_ovy_.clear(); - trackingparticle_ovz_.clear(); - trackingparticle_exx_.clear(); - trackingparticle_exy_.clear(); - trackingparticle_mother_.clear(); - trackingparticle_pid_.clear(); - - simcluster_eta_.clear(); - simcluster_phi_.clear(); - simcluster_pt_.clear(); - simcluster_energy_.clear(); - simcluster_pid_.clear(); - simcluster_detids_.clear(); - simcluster_bx_.clear(); - simcluster_ev_.clear(); - simcluster_px_.clear(); - simcluster_py_.clear(); - simcluster_pz_.clear(); - simcluster_idx_trackingparticle_.clear(); - simcluster_nhits_.clear(); - - simhit_frac_.clear(); - simhit_x_.clear(); - simhit_y_.clear(); - simhit_z_.clear(); - simhit_det_.clear(); - simhit_subdet_.clear(); - simhit_eta_.clear(); - simhit_phi_.clear(); - simhit_idx_simcluster_.clear(); - simhit_detid_.clear(); - - rechit_e_.clear(); - rechit_x_.clear(); - rechit_y_.clear(); - rechit_z_.clear(); - rechit_det_.clear(); - rechit_subdet_.clear(); - rechit_eta_.clear(); - rechit_phi_.clear(); - rechit_idx_element_.clear(); - rechit_detid_.clear(); - - simtrack_x_.clear(); - simtrack_y_.clear(); - simtrack_z_.clear(); - simtrack_idx_simcluster_.clear(); - simtrack_pid_.clear(); - - gen_eta_.clear(); - gen_phi_.clear(); - gen_pt_.clear(); - gen_px_.clear(); - gen_py_.clear(); - gen_pz_.clear(); - gen_energy_.clear(); - gen_charge_.clear(); - gen_pdgid_.clear(); - gen_status_.clear(); - gen_daughters_.clear(); - - element_pt_.clear(); - element_px_.clear(); - element_py_.clear(); - element_pz_.clear(); - element_eta_.clear(); - element_phi_.clear(); - element_energy_.clear(); - element_eta_ecal_.clear(); - element_phi_ecal_.clear(); - element_eta_hcal_.clear(); - element_phi_hcal_.clear(); - element_charge_.clear(); - element_type_.clear(); - element_layer_.clear(); - element_depth_.clear(); - element_trajpoint_.clear(); - - element_distance_i_.clear(); - element_distance_j_.clear(); - element_distance_d_.clear(); - - pfcandidate_eta_.clear(); - pfcandidate_phi_.clear(); - pfcandidate_pt_.clear(); - pfcandidate_px_.clear(); - pfcandidate_py_.clear(); - pfcandidate_pz_.clear(); - pfcandidate_energy_.clear(); - pfcandidate_pdgid_.clear(); - -} //clearVariables - -GlobalPoint PFAnalysis::getHitPosition(const DetId& id) { - GlobalPoint ret; - - bool present = false; - if (((id.det() == DetId::Ecal && - (id.subdetId() == EcalBarrel || id.subdetId() == EcalEndcap || id.subdetId() == EcalPreshower)) || - (id.det() == DetId::Hcal && (id.subdetId() == HcalBarrel || id.subdetId() == HcalEndcap || - id.subdetId() == HcalForward || id.subdetId() == HcalOuter)))) { - const CaloSubdetectorGeometry* geom_sd(geom->getSubdetectorGeometry(id.det(), id.subdetId())); - present = geom_sd->present(id); - if (present) { - const auto& cell = geom_sd->getGeometry(id); - ret = GlobalPoint(cell->getPosition()); - } - } - return ret; -} - -void PFAnalysis::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - clearVariables(); - - auto& pG = iSetup.getData(geometryToken_); - geom = (CaloGeometry*)&pG; - auto& pT = iSetup.getData(topologyToken_); - hcal_topo = (HcalTopology*)&pT; - - //Simulated tracks, cleaned up by TrackingTruthAccumulator - edm::Handle<edm::View<TrackingParticle>> trackingParticlesHandle; - iEvent.getByToken(trackingParticles_, trackingParticlesHandle); - const edm::View<TrackingParticle>& trackingParticles = *trackingParticlesHandle; - - edm::Handle<edm::View<CaloParticle>> caloParticlesHandle; - iEvent.getByToken(caloParticles_, caloParticlesHandle); - const edm::View<CaloParticle>& caloParticles = *caloParticlesHandle; - - //Matches reco tracks to sim tracks (TrackingParticle) - edm::Handle<reco::RecoToSimCollection> recotosimCollection; - iEvent.getByToken(tracks_recotosim_, recotosimCollection); - const auto recotosim = *recotosimCollection; - - edm::Handle<edm::View<reco::Track>> trackHandle; - iEvent.getByToken(tracks_, trackHandle); - const edm::View<reco::Track>& tracks = *trackHandle; - - edm::Handle<std::vector<reco::GenParticle>> genParticlesHandle; - iEvent.getByToken(genParticles_, genParticlesHandle); - for (std::vector<reco::GenParticle>::const_iterator it_p = genParticlesHandle->begin(); - it_p != genParticlesHandle->end(); - ++it_p) { - gen_eta_.push_back(it_p->eta()); - gen_phi_.push_back(it_p->phi()); - gen_pt_.push_back(it_p->pt()); - gen_px_.push_back(it_p->px()); - gen_py_.push_back(it_p->py()); - gen_pz_.push_back(it_p->pz()); - gen_energy_.push_back(it_p->energy()); - gen_charge_.push_back(it_p->charge()); - gen_pdgid_.push_back(it_p->pdgId()); - gen_status_.push_back(it_p->status()); - std::vector<int> daughters(it_p->daughterRefVector().size(), 0); - for (unsigned j = 0; j < it_p->daughterRefVector().size(); ++j) { - daughters[j] = static_cast<int>(it_p->daughterRefVector().at(j).key()); - } - gen_daughters_.push_back(daughters); - } - - edm::Handle<std::vector<reco::PFCandidate>> pfCandidatesHandle; - iEvent.getByToken(pfCandidates_, pfCandidatesHandle); - std::vector<reco::PFCandidate> pfCandidates = *pfCandidatesHandle; - - edm::Handle<std::vector<reco::PFBlock>> pfBlocksHandle; - iEvent.getByToken(pfBlocks_, pfBlocksHandle); - std::vector<reco::PFBlock> pfBlocks = *pfBlocksHandle; - - //Collect all clusters, tracks and superclusters - const auto& all_elements_distances = processBlocks(pfBlocks); - const auto& all_elements = all_elements_distances.first; - const auto& all_distances = all_elements_distances.second; - assert(!all_elements.empty()); - //assert(all_distances.size() > 0); - for (const auto& d : all_distances) { - element_distance_i_.push_back(get<0>(d)); - element_distance_j_.push_back(get<1>(d)); - element_distance_d_.push_back(get<2>(d)); - } - - //We need to use the original reco::Track collection for track association - for (unsigned long ntrack = 0; ntrack < tracks.size(); ntrack++) { - edm::RefToBase<reco::Track> trackref(trackHandle, ntrack); - - //get the index of the track in the 'all_elements' collection that we use later - int idx_in_all_elements = find_element_ref(all_elements, trackref); - - //track was not used by PF, we skip as well - if (idx_in_all_elements == -1) { - continue; - } - - if (recotosim.find(trackref) != recotosim.end()) { - const auto& tps = recotosim[trackref]; - for (const auto& tp : tps) { - edm::Ref<std::vector<TrackingParticle>> tpr = tp.first; - trackingparticle_to_element.push_back(make_pair(tpr.key(), idx_in_all_elements)); - //cout << "trackingparticle_to_element " << tpr.key() << " " << idx_in_all_elements << endl; - //cout << "track.eta=" << trackref->eta() << " track.phi=" << trackref->phi() << endl; - //cout << "elem.eta=" << all_elements[idx_in_all_elements].orig.trackRef()->eta(); - //cout << " elem.phi=" << all_elements[idx_in_all_elements].orig.trackRef()->phi() << endl; - } - } - } - - processTrackingParticles(trackingParticles, trackingParticlesHandle); - - int idx_simcluster = 0; - //Fill genparticles from calorimeter hits - for (unsigned long ncaloparticle = 0; ncaloparticle < caloParticles.size(); ncaloparticle++) { - const auto& cp = caloParticles.at(ncaloparticle); - edm::RefToBase<CaloParticle> cpref(caloParticlesHandle, ncaloparticle); - - int nhits = 0; - for (const auto& simcluster : cp.simClusters()) { - //create a map of detId->energy of all the rechits in all the clusters of this SimCluster - map<uint64_t, double> detid_energy; - - simcluster_nhits_.push_back(nhits); - simcluster_eta_.push_back(simcluster->p4().eta()); - simcluster_phi_.push_back(simcluster->p4().phi()); - simcluster_pt_.push_back(simcluster->p4().pt()); - simcluster_energy_.push_back(simcluster->energy()); - simcluster_pid_.push_back(simcluster->pdgId()); - simcluster_bx_.push_back(simcluster->eventId().bunchCrossing()); - simcluster_ev_.push_back(simcluster->eventId().event()); - - simcluster_px_.push_back(simcluster->p4().x()); - simcluster_py_.push_back(simcluster->p4().y()); - simcluster_pz_.push_back(simcluster->p4().z()); - - for (const auto& hf : simcluster->hits_and_fractions()) { - DetId id(hf.first); - - if (id.det() == DetId::Hcal || id.det() == DetId::Ecal) { - const auto& pos = getHitPosition(id); - nhits += 1; - - const float x = pos.x(); - const float y = pos.y(); - const float z = pos.z(); - const float eta = pos.eta(); - const float phi = pos.phi(); - //const float e = simcluster->energy() * hf.second; - - simhit_frac_.push_back(hf.second); - simhit_x_.push_back(x); - simhit_y_.push_back(y); - simhit_z_.push_back(z); - simhit_det_.push_back(id.det()); - simhit_subdet_.push_back(id.subdetId()); - simhit_eta_.push_back(eta); - simhit_phi_.push_back(phi); - simhit_idx_simcluster_.push_back(idx_simcluster); - simhit_detid_.push_back(id.rawId()); - detid_energy[id.rawId()] += hf.second; - } - } - - int simcluster_to_trackingparticle = -1; - for (const auto& simtrack : simcluster->g4Tracks()) { - simtrack_x_.push_back(simtrack.trackerSurfacePosition().x()); - simtrack_y_.push_back(simtrack.trackerSurfacePosition().y()); - simtrack_z_.push_back(simtrack.trackerSurfacePosition().z()); - simtrack_idx_simcluster_.push_back(idx_simcluster); - simtrack_pid_.push_back(simtrack.type()); - - for (unsigned int itp = 0; itp < trackingParticles.size(); itp++) { - const auto& simtrack2 = trackingParticles.at(itp).g4Tracks().at(0); - //compare the two tracks, taking into account that both eventId and trackId need to be compared due to pileup - if (simtrack.eventId() == simtrack2.eventId() && simtrack.trackId() == simtrack2.trackId()) { - simcluster_to_trackingparticle = itp; - //we are satisfied with the first match, in practice there should not be more - break; - } - } //trackingParticles - } //simcluster tracks - - simcluster_detids_.push_back(detid_energy); - simcluster_idx_trackingparticle_.push_back(simcluster_to_trackingparticle); - - idx_simcluster += 1; - } //simclusters - } //caloParticles - - associateClusterToSimCluster(all_elements); - - //fill elements - for (unsigned int ielem = 0; ielem < all_elements.size(); ielem++) { - const auto& elem = all_elements.at(ielem); - const auto& orig = elem.orig; - reco::PFBlockElement::Type type = orig.type(); - - float pt = 0.0; - float px = 0.0; - float py = 0.0; - float pz = 0.0; - float eta = 0.0; - float phi = 0.0; - float energy = 0.0; - float trajpoint = 0.0; - float eta_ecal = 0.0; - float phi_ecal = 0.0; - float eta_hcal = 0.0; - float phi_hcal = 0.0; - int charge = 0; - int layer = 0; - float depth = 0; - - if (type == reco::PFBlockElement::TRACK) { - const auto& matched_pftrack = orig.trackRefPF(); - if (matched_pftrack.isNonnull()) { - const auto& atECAL = matched_pftrack->extrapolatedPoint(reco::PFTrajectoryPoint::ECALShowerMax); - const auto& atHCAL = matched_pftrack->extrapolatedPoint(reco::PFTrajectoryPoint::HCALEntrance); - if (atHCAL.isValid()) { - eta_hcal = atHCAL.positionREP().eta(); - phi_hcal = atHCAL.positionREP().phi(); - } - if (atECAL.isValid()) { - eta_ecal = atECAL.positionREP().eta(); - phi_ecal = atECAL.positionREP().phi(); - } - } - const auto& ref = ((const reco::PFBlockElementTrack*)&orig)->trackRef(); - pt = ref->pt(); - px = ref->px(); - py = ref->py(); - pz = ref->pz(); - eta = ref->eta(); - phi = ref->phi(); - energy = ref->pt() * cosh(ref->eta()); - charge = ref->charge(); - } else if (type == reco::PFBlockElement::BREM) { - //requires to keep GsfPFRecTracks - const auto* orig2 = (const reco::PFBlockElementBrem*)&orig; - const auto& ref = orig2->GsftrackRef(); - if (ref.isNonnull()) { - pt = ref->pt(); - px = ref->px(); - py = ref->py(); - pz = ref->pz(); - eta = ref->eta(); - phi = ref->phi(); - energy = ref->pt() * cosh(ref->eta()); - trajpoint = orig2->indTrajPoint(); - charge = ref->charge(); - } - } else if (type == reco::PFBlockElement::GSF) { - //requires to keep GsfPFRecTracks - const auto* orig2 = (const reco::PFBlockElementGsfTrack*)&orig; - const auto& ref = orig2->GsftrackRef(); - if (ref.isNonnull()) { - pt = ref->pt(); - px = ref->px(); - py = ref->py(); - pz = ref->pz(); - eta = ref->eta(); - phi = ref->phi(); - energy = ref->pt() * cosh(ref->eta()); - } - } else if (type == reco::PFBlockElement::ECAL || type == reco::PFBlockElement::PS1 || - type == reco::PFBlockElement::PS2 || type == reco::PFBlockElement::HCAL || - type == reco::PFBlockElement::GSF || type == reco::PFBlockElement::HO || - type == reco::PFBlockElement::HFHAD || type == reco::PFBlockElement::HFEM) { - const auto& ref = ((const reco::PFBlockElementCluster*)&orig)->clusterRef(); - if (ref.isNonnull()) { - eta = ref->eta(); - phi = ref->phi(); - px = ref->position().x(); - py = ref->position().y(); - pz = ref->position().z(); - energy = ref->energy(); - layer = ref->layer(); - depth = ref->depth(); - } - } else if (type == reco::PFBlockElement::SC) { - const auto& clref = ((const reco::PFBlockElementSuperCluster*)&orig)->superClusterRef(); - if (clref.isNonnull()) { - eta = clref->eta(); - phi = clref->phi(); - px = clref->position().x(); - py = clref->position().y(); - pz = clref->position().z(); - energy = clref->energy(); - } - } - vector<int> tps; - for (const auto& t : trackingparticle_to_element) { - if (t.second == (int)ielem) { - tps.push_back(t.first); - } - } - vector<int> scs; - for (const auto& t : simcluster_to_element) { - if (t.second == (int)ielem) { - scs.push_back(t.first); - } - } - - element_pt_.push_back(pt); - element_px_.push_back(px); - element_py_.push_back(py); - element_pz_.push_back(pz); - element_eta_.push_back(eta); - element_phi_.push_back(phi); - element_energy_.push_back(energy); - element_eta_ecal_.push_back(eta_ecal); - element_phi_ecal_.push_back(phi_ecal); - element_eta_hcal_.push_back(eta_hcal); - element_phi_hcal_.push_back(phi_hcal); - element_charge_.push_back(charge); - element_type_.push_back(type); - element_layer_.push_back(layer); - element_depth_.push_back(depth); - element_trajpoint_.push_back(trajpoint); - } - - //associate candidates to elements - int icandidate = 0; - for (const auto& cand : pfCandidates) { - pfcandidate_eta_.push_back(cand.eta()); - pfcandidate_phi_.push_back(cand.phi()); - pfcandidate_pt_.push_back(cand.pt()); - pfcandidate_px_.push_back(cand.px()); - pfcandidate_py_.push_back(cand.py()); - pfcandidate_pz_.push_back(cand.pz()); - pfcandidate_energy_.push_back(cand.energy()); - pfcandidate_pdgid_.push_back(cand.pdgId()); - - for (const auto& el : cand.elementsInBlocks()) { - const auto idx_block = el.first.index(); - unsigned idx_element_in_block = el.second; - - int ielem = -1; - for (const auto& elem_with_index : all_elements) { - ielem += 1; - if (elem_with_index.idx_block == idx_block && elem_with_index.idx_elem == idx_element_in_block) { - break; - } - } - assert(ielem != -1); - element_to_candidate.push_back(make_pair(ielem, icandidate)); - } //elements - - icandidate += 1; - } //pfCandidates - - cout << "trackingParticles=" << trackingParticles.size() << " caloParticles=" << caloParticles.size() << endl; - cout << "all_elements=" << all_elements.size() << endl; - cout << "pfCandidates=" << pfCandidates.size() << endl; - cout << "trackingparticle_to_element=" << trackingparticle_to_element.size() - << " simcluster_to_element=" << simcluster_to_element.size() << endl; - cout << "element_to_candidate=" << element_to_candidate.size() << endl; - - ev_event_ = iEvent.id().event(); - ev_lumi_ = iEvent.id().luminosityBlock(); - ev_run_ = iEvent.id().run(); - - t_->Fill(); -} //analyze - -void PFAnalysis::processTrackingParticles(const edm::View<TrackingParticle>& trackingParticles, - edm::Handle<edm::View<TrackingParticle>>& trackingParticlesHandle) { - for (unsigned long ntrackingparticle = 0; ntrackingparticle < trackingParticles.size(); ntrackingparticle++) { - const auto& tp = trackingParticles.at(ntrackingparticle); - edm::RefToBase<TrackingParticle> tpref(trackingParticlesHandle, ntrackingparticle); - - math::XYZTLorentzVectorD vtx(0, 0, 0, 0); - - if (!tp.decayVertices().empty()) { - vtx = tp.decayVertices().at(0)->position(); - } - auto orig_vtx = tp.vertex(); - - // fill branches - trackingparticle_eta_.push_back(tp.p4().eta()); - trackingparticle_phi_.push_back(tp.p4().phi()); - trackingparticle_pt_.push_back(tp.p4().pt()); - trackingparticle_px_.push_back(tp.p4().px()); - trackingparticle_py_.push_back(tp.p4().py()); - trackingparticle_pz_.push_back(tp.p4().pz()); - trackingparticle_energy_.push_back(tp.p4().energy()); - trackingparticle_dvx_.push_back(vtx.x()); - trackingparticle_dvy_.push_back(vtx.y()); - trackingparticle_dvz_.push_back(vtx.z()); - trackingparticle_bx_.push_back(tp.eventId().bunchCrossing()); - trackingparticle_ev_.push_back(tp.eventId().event()); - - trackingparticle_ovx_.push_back(orig_vtx.x()); - trackingparticle_ovy_.push_back(orig_vtx.y()); - trackingparticle_ovz_.push_back(orig_vtx.z()); - - trackingparticle_pid_.push_back(tp.pdgId()); - } -} - -//https://stackoverflow.com/questions/27086195/linear-index-upper-triangular-matrix/27088560 -int get_index_triu_vector(int i, int j, int n) { - int k = (n * (n - 1) / 2) - (n - i) * ((n - i) - 1) / 2 + j - i - 1; - return k; -} - -pair<int, int> get_triu_vector_index(int k, int n) { - int i = n - 2 - floor(sqrt(-8 * k + 4 * n * (n - 1) - 7) / 2.0 - 0.5); - int j = k + i + 1 - n * (n - 1) / 2 + (n - i) * ((n - i) - 1) / 2; - return make_pair(i, j); -} - -pair<vector<ElementWithIndex>, vector<tuple<int, int, float>>> PFAnalysis::processBlocks( - const std::vector<reco::PFBlock>& pfBlocks) { - vector<ElementWithIndex> ret; - vector<tuple<int, int, float>> distances; - - //Collect all the elements - int iblock = 0; - for (const auto& block : pfBlocks) { - int ielem = 0; - const auto& linkdata = block.linkData(); - - //create a list of global element indices with distances - for (const auto& link : linkdata) { - const auto vecidx = link.first; - const auto dist = link.second.distance; - const auto& ij = get_triu_vector_index(vecidx, block.elements().size()); - cout << "block " << iblock << " " << ielem << " " << vecidx << " " << ij.first << " " << ij.second << " " << dist - << endl; - auto globalindex_i = ij.first + ret.size(); - auto globalindex_j = ij.second + ret.size(); - distances.push_back(make_tuple(globalindex_i, globalindex_j, dist)); - } - - for (const auto& elem : block.elements()) { - ElementWithIndex elem_index(elem, iblock, ielem); - ret.push_back(elem_index); - ielem += 1; - } //elements - iblock += 1; - } //blocks - return make_pair(ret, distances); - -} //processBlocks - -void PFAnalysis::associateClusterToSimCluster(const vector<ElementWithIndex>& all_elements) { - vector<map<uint64_t, double>> detids_elements; - map<uint64_t, double> rechits_energy_all; - - int idx_element = 0; - for (const auto& elem : all_elements) { - map<uint64_t, double> detids; - const auto& type = elem.orig.type(); - - if (type == reco::PFBlockElement::ECAL || type == reco::PFBlockElement::HCAL || type == reco::PFBlockElement::PS1 || - type == reco::PFBlockElement::PS2 || type == reco::PFBlockElement::HO || type == reco::PFBlockElement::HFHAD || - type == reco::PFBlockElement::HFEM) { - const auto& clref = elem.orig.clusterRef(); - assert(clref.isNonnull()); - const auto& cluster = *clref; - - //all rechits and the energy fractions in this cluster - const vector<reco::PFRecHitFraction>& rechit_fracs = cluster.recHitFractions(); - for (const auto& rh : rechit_fracs) { - const reco::PFRecHit pfrh = *rh.recHitRef(); - if (detids.find(pfrh.detId()) != detids.end()) { - continue; - } - detids[pfrh.detId()] += pfrh.energy(); - const auto id = DetId(pfrh.detId()); - float x = 0; - float y = 0; - float z = 0; - float eta = 0; - float phi = 0; - - const auto& pos = getHitPosition(id); - x = pos.x(); - y = pos.y(); - z = pos.z(); - eta = pos.eta(); - phi = pos.phi(); - - rechit_x_.push_back(x); - rechit_y_.push_back(y); - rechit_z_.push_back(z); - rechit_det_.push_back(id.det()); - rechit_subdet_.push_back(id.subdetId()); - rechit_eta_.push_back(eta); - rechit_phi_.push_back(phi); - rechit_e_.push_back(pfrh.energy()); - rechit_idx_element_.push_back(idx_element); - rechit_detid_.push_back(id.rawId()); - rechits_energy_all[id.rawId()] += pfrh.energy(); - } //rechit_fracs - } else if (type == reco::PFBlockElement::SC) { - const auto& clref = ((const reco::PFBlockElementSuperCluster*)&(elem.orig))->superClusterRef(); - assert(clref.isNonnull()); - const auto& cluster = *clref; - - //all rechits and the energy fractions in this cluster - const auto& rechit_fracs = cluster.hitsAndFractions(); - for (const auto& rh : rechit_fracs) { - if (detids.find(rh.first.rawId()) != detids.end()) { - continue; - } - detids[rh.first.rawId()] += rh.second; - const auto id = rh.first; - float x = 0; - float y = 0; - float z = 0; - float eta = 0; - float phi = 0; - - const auto& pos = getHitPosition(id); - x = pos.x(); - y = pos.y(); - z = pos.z(); - eta = pos.eta(); - phi = pos.phi(); - - rechit_x_.push_back(x); - rechit_y_.push_back(y); - rechit_z_.push_back(z); - rechit_det_.push_back(id.det()); - rechit_subdet_.push_back(id.subdetId()); - rechit_eta_.push_back(eta); - rechit_phi_.push_back(phi); - rechit_e_.push_back(rh.second); - rechit_idx_element_.push_back(idx_element); - rechit_detid_.push_back(id.rawId()); - rechits_energy_all[id.rawId()] += rh.second; - } //rechit_fracs - } - detids_elements.push_back(detids); - idx_element += 1; - } //all_elements - - //associate elements (reco clusters) to simclusters - int ielement = 0; - for (const auto& detids : detids_elements) { - int isimcluster = 0; - if (!detids.empty()) { - double sum_e_tot = 0.0; - for (const auto& c : detids) { - sum_e_tot += c.second; - } - - for (const auto& simcluster_detids : simcluster_detids_) { - double sum_e_tot_sc = 0.0; - for (const auto& c : simcluster_detids) { - sum_e_tot_sc += c.second; - } - - //get the energy of the simcluster hits that matches detids of the rechits - double cmp = detid_compare(detids, simcluster_detids, rechits_energy_all, false); - if (cmp > 0) { - simcluster_to_element.push_back(make_pair(isimcluster, ielement)); - simcluster_to_element_cmp.push_back((float)cmp); - } - isimcluster += 1; - } - } //element had rechits - ielement += 1; - } //rechit clusters -} - -void PFAnalysis::beginRun(edm::Run const& iEvent, edm::EventSetup const& es) { - edm::ESHandle<MagneticField> magfield; - es.get<IdealMagneticFieldRecord>().get(magfield); - - edm::ESHandle<HcalDDDRecConstants> pHRNDC; - es.get<HcalRecNumberingRecord>().get(pHRNDC); - hcons = &(*pHRNDC); - - aField_ = &(*magfield); -} - -void PFAnalysis::endRun(edm::Run const& iEvent, edm::EventSetup const&) {} - -void PFAnalysis::beginJob() { ; } - -void PFAnalysis::endJob() {} - -void PFAnalysis::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - edm::ParameterSetDescription desc; - desc.setUnknown(); - descriptions.addDefault(desc); -} - -DEFINE_FWK_MODULE(PFAnalysis); diff --git a/Validation/RecoParticleFlow/plugins/PFAnalysisNtuplizer.cc b/Validation/RecoParticleFlow/plugins/PFAnalysisNtuplizer.cc new file mode 100644 index 0000000000000..a7b43bad1ed6b --- /dev/null +++ b/Validation/RecoParticleFlow/plugins/PFAnalysisNtuplizer.cc @@ -0,0 +1,1139 @@ +// Based on RecoNtuple/HGCalAnalysis with modifications for PF +// +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" + +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h" +#include "DataFormats/EgammaCandidates/interface/GsfElectron.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "DataFormats/HcalRecHit/interface/HFRecHit.h" +#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" +#include "Geometry/HcalCommonData/interface/HcalHitRelabeller.h" +#include "DataFormats/HcalDetId/interface/HcalDetId.h" +#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" +#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlockElementSuperCluster.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlockElementGsfTrack.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlockElementTrack.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlockElementBrem.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlockElementCluster.h" +#include "Geometry/HcalTowerAlgo/interface/HcalGeometry.h" +#include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h" +#include "SimDataFormats/CaloAnalysis/interface/SimCluster.h" +#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" +#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" +#include "DataFormats/RecoCandidate/interface/TrackAssociation.h" +#include "DataFormats/ParticleFlowReco/interface/PFBlock.h" + +#include "DataFormats/Math/interface/deltaPhi.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/DetId/interface/DetId.h" + +#include "DataFormats/GeometrySurface/interface/PlaneBuilder.h" +#include "Geometry/CaloGeometry/interface/CaloCellGeometry.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" + +#include "CommonTools/BaseParticlePropagator/interface/BaseParticlePropagator.h" +#include "Math/Transform3D.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "MagneticField/VolumeGeometry/interface/MagVolumeOutsideValidity.h" +#include "RecoParticleFlow/PFProducer/interface/MLPFModel.h" + +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "TH1F.h" +#include "TVector2.h" +#include "TTree.h" + +#include <map> +#include <set> +#include <string> +#include <vector> +#include <set> + +using namespace std; + +class ElementWithIndex { +public: + const reco::PFBlockElement& orig; + size_t idx_block; + size_t idx_elem; + ElementWithIndex(const reco::PFBlockElement& _orig, size_t _idx_block, size_t _idx_elem) + : orig(_orig), idx_block(_idx_block), idx_elem(_idx_elem){}; +}; + +vector<int> find_element_ref(const vector<ElementWithIndex>& vec, const edm::RefToBase<reco::Track>& r) { + vector<int> ret; + for (unsigned int i = 0; i < vec.size(); i++) { + const auto& elem = vec.at(i); + if (elem.orig.type() == reco::PFBlockElement::TRACK) { + const auto& ref = elem.orig.trackRef(); + if (ref.isNonnull() && ref->extra().isNonnull()) { + if (ref.key() == r.key()) { + ret.push_back(i); + } + } + } + } + return ret; +} + +double detid_compare(const map<uint64_t, double>& rechits, const map<uint64_t, double>& simhits) { + double ret = 0.0; + + for (const auto& rh : rechits) { + for (const auto& sh : simhits) { + if (rh.first == sh.first) { + //rechit energy times simhit fraction + ret += rh.second * sh.second; + break; + } + } + } + return ret; +} + +class PFAnalysis : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::SharedResources> { +public: + typedef ROOT::Math::Transform3D::Point Point; + + PFAnalysis(); + explicit PFAnalysis(const edm::ParameterSet&); + ~PFAnalysis() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + void beginRun(edm::Run const& iEvent, edm::EventSetup const&) override; + void endRun(edm::Run const& iEvent, edm::EventSetup const&) override; + +private: + void beginJob() override; + void analyze(const edm::Event&, const edm::EventSetup&) override; + void endJob() override; + + void processTrackingParticles(const edm::View<TrackingParticle>& trackingParticles, + edm::Handle<edm::View<TrackingParticle>>& trackingParticlesHandle); + + pair<vector<ElementWithIndex>, vector<tuple<int, int, float>>> processBlocks( + const std::vector<reco::PFBlock>& pfBlocks); + + void associateClusterToSimCluster(const vector<ElementWithIndex>& all_elements); + + void clearVariables(); + + GlobalPoint getHitPosition(const DetId& id); + // ----------member data --------------------------- + + edm::EDGetTokenT<std::vector<reco::GenParticle>> genParticles_; + edm::EDGetTokenT<edm::View<TrackingParticle>> trackingParticles_; + edm::EDGetTokenT<edm::View<CaloParticle>> caloParticles_; + edm::EDGetTokenT<edm::View<reco::Track>> tracks_; + edm::EDGetTokenT<std::vector<reco::PFBlock>> pfBlocks_; + edm::EDGetTokenT<std::vector<reco::PFCandidate>> pfCandidates_; + edm::EDGetTokenT<reco::RecoToSimCollection> tracks_recotosim_; + + TTree* t_; + + edm::RunNumber_t ev_run_; + edm::LuminosityBlockNumber_t ev_lumi_; + edm::EventNumber_t ev_event_; + + vector<float> trackingparticle_eta_; + vector<float> trackingparticle_phi_; + vector<float> trackingparticle_pt_; + vector<float> trackingparticle_px_; + vector<float> trackingparticle_py_; + vector<float> trackingparticle_pz_; + vector<float> trackingparticle_energy_; + vector<float> trackingparticle_dvx_; + vector<float> trackingparticle_dvy_; + vector<float> trackingparticle_dvz_; + vector<int> trackingparticle_bx_; + vector<int> trackingparticle_ev_; + vector<float> trackingparticle_ovx_; + vector<float> trackingparticle_ovy_; + vector<float> trackingparticle_ovz_; + vector<float> trackingparticle_exx_; + vector<float> trackingparticle_exy_; + vector<int> trackingparticle_mother_; + vector<int> trackingparticle_pid_; + + vector<float> simcluster_eta_; + vector<float> simcluster_phi_; + vector<float> simcluster_pt_; + vector<float> simcluster_energy_; + vector<float> simcluster_px_; + vector<float> simcluster_py_; + vector<float> simcluster_pz_; + vector<int> simcluster_bx_; + vector<int> simcluster_ev_; + vector<int> simcluster_pid_; + vector<int> simcluster_idx_trackingparticle_; + vector<int> simcluster_nhits_; + vector<std::map<uint64_t, double>> simcluster_detids_; + + vector<float> simhit_frac_; + vector<float> simhit_x_; + vector<float> simhit_y_; + vector<float> simhit_z_; + vector<float> simhit_eta_; + vector<float> simhit_phi_; + vector<int> simhit_det_; + vector<int> simhit_subdet_; + vector<int> simhit_idx_simcluster_; + vector<uint64_t> simhit_detid_; + + vector<float> rechit_e_; + vector<float> rechit_x_; + vector<float> rechit_y_; + vector<float> rechit_z_; + vector<float> rechit_det_; + vector<float> rechit_subdet_; + vector<float> rechit_eta_; + vector<float> rechit_phi_; + vector<int> rechit_idx_element_; + vector<uint64_t> rechit_detid_; + + vector<float> simtrack_x_; + vector<float> simtrack_y_; + vector<float> simtrack_z_; + vector<int> simtrack_idx_simcluster_; + vector<int> simtrack_pid_; + + vector<float> gen_eta_; + vector<float> gen_phi_; + vector<float> gen_pt_; + vector<float> gen_px_; + vector<float> gen_py_; + vector<float> gen_pz_; + vector<float> gen_energy_; + vector<int> gen_charge_; + vector<int> gen_pdgid_; + vector<int> gen_status_; + vector<vector<int>> gen_daughters_; + + vector<float> element_pt_; + vector<float> element_px_; + vector<float> element_py_; + vector<float> element_pz_; + vector<float> element_deltap_; + vector<float> element_sigmadeltap_; + vector<float> element_eta_; + vector<float> element_phi_; + vector<float> element_energy_; + vector<float> element_eta_ecal_; + vector<float> element_phi_ecal_; + vector<float> element_eta_hcal_; + vector<float> element_phi_hcal_; + vector<int> element_charge_; + vector<int> element_type_; + vector<int> element_layer_; + vector<float> element_depth_; + vector<float> element_trajpoint_; + vector<float> element_muon_dt_hits_; + vector<float> element_muon_csc_hits_; + + vector<int> element_distance_i_; + vector<int> element_distance_j_; + vector<float> element_distance_d_; + + vector<float> pfcandidate_eta_; + vector<float> pfcandidate_phi_; + vector<float> pfcandidate_pt_; + vector<float> pfcandidate_px_; + vector<float> pfcandidate_py_; + vector<float> pfcandidate_pz_; + vector<float> pfcandidate_energy_; + vector<int> pfcandidate_pdgid_; + + vector<pair<int, int>> trackingparticle_to_element; + vector<pair<int, int>> simcluster_to_element; + vector<float> simcluster_to_element_cmp; + vector<pair<int, int>> element_to_candidate; + + // and also the magnetic field + MagneticField const* aField_; + + edm::ESGetToken<CaloGeometry, CaloGeometryRecord> geometryToken_; + edm::ESGetToken<HcalTopology, HcalRecNumberingRecord> topologyToken_; + + CaloGeometry* geom; + HcalTopology* hcal_topo; + const HcalDDDRecConstants* hcons; + + bool saveHits; +}; + +PFAnalysis::PFAnalysis() { ; } + +PFAnalysis::PFAnalysis(const edm::ParameterSet& iConfig) { + tracks_recotosim_ = consumes<reco::RecoToSimCollection>(edm::InputTag("trackingParticleRecoTrackAsssociation")); + trackingParticles_ = consumes<edm::View<TrackingParticle>>(edm::InputTag("mix", "MergedTrackTruth")); + caloParticles_ = consumes<edm::View<CaloParticle>>(edm::InputTag("mix", "MergedCaloTruth")); + genParticles_ = consumes<std::vector<reco::GenParticle>>(edm::InputTag("genParticles")); + pfBlocks_ = consumes<std::vector<reco::PFBlock>>(edm::InputTag("particleFlowBlock")); + pfCandidates_ = consumes<std::vector<reco::PFCandidate>>(edm::InputTag("particleFlow")); + tracks_ = consumes<edm::View<reco::Track>>(edm::InputTag("generalTracks")); + saveHits = iConfig.getUntrackedParameter<bool>("saveHits", false); + + geometryToken_ = esConsumes<CaloGeometry, CaloGeometryRecord>(edm::ESInputTag{}); + topologyToken_ = esConsumes<HcalTopology, HcalRecNumberingRecord>(edm::ESInputTag{}); + + usesResource(TFileService::kSharedResource); + edm::Service<TFileService> fs; + fs->make<TH1F>("total", "total", 100, 0, 5.); + + t_ = fs->make<TTree>("pftree", "pftree"); + + // event info + t_->Branch("event", &ev_event_); + t_->Branch("lumi", &ev_lumi_); + t_->Branch("run", &ev_run_); + + t_->Branch("trackingparticle_eta", &trackingparticle_eta_); + t_->Branch("trackingparticle_phi", &trackingparticle_phi_); + t_->Branch("trackingparticle_pt", &trackingparticle_pt_); + t_->Branch("trackingparticle_px", &trackingparticle_px_); + t_->Branch("trackingparticle_py", &trackingparticle_py_); + t_->Branch("trackingparticle_pz", &trackingparticle_pz_); + t_->Branch("trackingparticle_energy", &trackingparticle_energy_); + t_->Branch("trackingparticle_dvx", &trackingparticle_dvx_); + t_->Branch("trackingparticle_dvy", &trackingparticle_dvy_); + t_->Branch("trackingparticle_dvz", &trackingparticle_dvz_); + t_->Branch("trackingparticle_bx", &trackingparticle_bx_); + t_->Branch("trackingparticle_ev", &trackingparticle_ev_); + t_->Branch("trackingparticle_pid", &trackingparticle_pid_); + + t_->Branch("simcluster_eta", &simcluster_eta_); + t_->Branch("simcluster_phi", &simcluster_phi_); + t_->Branch("simcluster_pt", &simcluster_pt_); + t_->Branch("simcluster_px", &simcluster_px_); + t_->Branch("simcluster_py", &simcluster_py_); + t_->Branch("simcluster_pz", &simcluster_pz_); + t_->Branch("simcluster_energy", &simcluster_energy_); + t_->Branch("simcluster_bx", &simcluster_bx_); + t_->Branch("simcluster_ev", &simcluster_ev_); + t_->Branch("simcluster_pid", &simcluster_pid_); + t_->Branch("simcluster_idx_trackingparticle", &simcluster_idx_trackingparticle_); + t_->Branch("simcluster_nhits", &simcluster_nhits_); + + if (saveHits) { + t_->Branch("simhit_frac", &simhit_frac_); + t_->Branch("simhit_x", &simhit_x_); + t_->Branch("simhit_y", &simhit_y_); + t_->Branch("simhit_z", &simhit_z_); + t_->Branch("simhit_det", &simhit_det_); + t_->Branch("simhit_subdet", &simhit_subdet_); + t_->Branch("simhit_eta", &simhit_eta_); + t_->Branch("simhit_phi", &simhit_phi_); + t_->Branch("simhit_idx_simcluster", &simhit_idx_simcluster_); + t_->Branch("simhit_detid", &simhit_detid_); + + t_->Branch("rechit_e", &rechit_e_); + t_->Branch("rechit_x", &rechit_x_); + t_->Branch("rechit_y", &rechit_y_); + t_->Branch("rechit_z", &rechit_z_); + t_->Branch("rechit_det", &rechit_det_); + t_->Branch("rechit_subdet", &rechit_subdet_); + t_->Branch("rechit_eta", &rechit_eta_); + t_->Branch("rechit_phi", &rechit_phi_); + t_->Branch("rechit_idx_element", &rechit_idx_element_); + t_->Branch("rechit_detid", &rechit_detid_); + } + + t_->Branch("simtrack_x", &simtrack_x_); + t_->Branch("simtrack_y", &simtrack_y_); + t_->Branch("simtrack_z", &simtrack_z_); + t_->Branch("simtrack_idx_simcluster_", &simtrack_idx_simcluster_); + t_->Branch("simtrack_pid", &simtrack_pid_); + + t_->Branch("gen_eta", &gen_eta_); + t_->Branch("gen_phi", &gen_phi_); + t_->Branch("gen_pt", &gen_pt_); + t_->Branch("gen_px", &gen_px_); + t_->Branch("gen_py", &gen_py_); + t_->Branch("gen_pz", &gen_pz_); + t_->Branch("gen_energy", &gen_energy_); + t_->Branch("gen_charge", &gen_charge_); + t_->Branch("gen_pdgid", &gen_pdgid_); + t_->Branch("gen_status", &gen_status_); + t_->Branch("gen_daughters", &gen_daughters_); + + //PF Elements + t_->Branch("element_pt", &element_pt_); + t_->Branch("element_px", &element_px_); + t_->Branch("element_py", &element_py_); + t_->Branch("element_pz", &element_pz_); + t_->Branch("element_deltap", &element_deltap_); + t_->Branch("element_sigmadeltap", &element_sigmadeltap_); + t_->Branch("element_eta", &element_eta_); + t_->Branch("element_phi", &element_phi_); + t_->Branch("element_energy", &element_energy_); + t_->Branch("element_eta_ecal", &element_eta_ecal_); + t_->Branch("element_phi_ecal", &element_phi_ecal_); + t_->Branch("element_eta_hcal", &element_eta_hcal_); + t_->Branch("element_phi_hcal", &element_phi_hcal_); + t_->Branch("element_charge", &element_charge_); + t_->Branch("element_type", &element_type_); + t_->Branch("element_layer", &element_layer_); + t_->Branch("element_depth", &element_depth_); + t_->Branch("element_trajpoint", &element_trajpoint_); + t_->Branch("element_muon_dt_hits", &element_muon_dt_hits_); + t_->Branch("element_muon_csc_hits", &element_muon_csc_hits_); + + //Distance matrix between PF elements + t_->Branch("element_distance_i", &element_distance_i_); + t_->Branch("element_distance_j", &element_distance_j_); + t_->Branch("element_distance_d", &element_distance_d_); + + t_->Branch("pfcandidate_eta", &pfcandidate_eta_); + t_->Branch("pfcandidate_phi", &pfcandidate_phi_); + t_->Branch("pfcandidate_pt", &pfcandidate_pt_); + t_->Branch("pfcandidate_px", &pfcandidate_px_); + t_->Branch("pfcandidate_py", &pfcandidate_py_); + t_->Branch("pfcandidate_pz", &pfcandidate_pz_); + t_->Branch("pfcandidate_energy", &pfcandidate_energy_); + t_->Branch("pfcandidate_pdgid", &pfcandidate_pdgid_); + + //Links between reco, gen and PFCandidate objects + t_->Branch("trackingparticle_to_element", &trackingparticle_to_element); + t_->Branch("simcluster_to_element", &simcluster_to_element); + t_->Branch("simcluster_to_element_cmp", &simcluster_to_element_cmp); + t_->Branch("element_to_candidate", &element_to_candidate); +} // constructor + +PFAnalysis::~PFAnalysis() {} + +void PFAnalysis::clearVariables() { + ev_run_ = 0; + ev_lumi_ = 0; + ev_event_ = 0; + + trackingparticle_to_element.clear(); + simcluster_to_element.clear(); + simcluster_to_element_cmp.clear(); + element_to_candidate.clear(); + + trackingparticle_eta_.clear(); + trackingparticle_phi_.clear(); + trackingparticle_pt_.clear(); + trackingparticle_px_.clear(); + trackingparticle_py_.clear(); + trackingparticle_pz_.clear(); + trackingparticle_energy_.clear(); + trackingparticle_dvx_.clear(); + trackingparticle_dvy_.clear(); + trackingparticle_dvz_.clear(); + trackingparticle_bx_.clear(); + trackingparticle_ev_.clear(); + trackingparticle_ovx_.clear(); + trackingparticle_ovy_.clear(); + trackingparticle_ovz_.clear(); + trackingparticle_exx_.clear(); + trackingparticle_exy_.clear(); + trackingparticle_mother_.clear(); + trackingparticle_pid_.clear(); + + simcluster_eta_.clear(); + simcluster_phi_.clear(); + simcluster_pt_.clear(); + simcluster_energy_.clear(); + simcluster_pid_.clear(); + simcluster_detids_.clear(); + simcluster_bx_.clear(); + simcluster_ev_.clear(); + simcluster_px_.clear(); + simcluster_py_.clear(); + simcluster_pz_.clear(); + simcluster_idx_trackingparticle_.clear(); + simcluster_nhits_.clear(); + + if (saveHits) { + simhit_frac_.clear(); + simhit_x_.clear(); + simhit_y_.clear(); + simhit_z_.clear(); + simhit_det_.clear(); + simhit_subdet_.clear(); + simhit_eta_.clear(); + simhit_phi_.clear(); + simhit_idx_simcluster_.clear(); + simhit_detid_.clear(); + + rechit_e_.clear(); + rechit_x_.clear(); + rechit_y_.clear(); + rechit_z_.clear(); + rechit_det_.clear(); + rechit_subdet_.clear(); + rechit_eta_.clear(); + rechit_phi_.clear(); + rechit_idx_element_.clear(); + rechit_detid_.clear(); + } + + simtrack_x_.clear(); + simtrack_y_.clear(); + simtrack_z_.clear(); + simtrack_idx_simcluster_.clear(); + simtrack_pid_.clear(); + + gen_eta_.clear(); + gen_phi_.clear(); + gen_pt_.clear(); + gen_px_.clear(); + gen_py_.clear(); + gen_pz_.clear(); + gen_energy_.clear(); + gen_charge_.clear(); + gen_pdgid_.clear(); + gen_status_.clear(); + gen_daughters_.clear(); + + element_pt_.clear(); + element_px_.clear(); + element_py_.clear(); + element_pz_.clear(); + element_deltap_.clear(); + element_sigmadeltap_.clear(); + element_eta_.clear(); + element_phi_.clear(); + element_energy_.clear(); + element_eta_ecal_.clear(); + element_phi_ecal_.clear(); + element_eta_hcal_.clear(); + element_phi_hcal_.clear(); + element_charge_.clear(); + element_type_.clear(); + element_layer_.clear(); + element_depth_.clear(); + element_trajpoint_.clear(); + element_muon_dt_hits_.clear(); + element_muon_csc_hits_.clear(); + + element_distance_i_.clear(); + element_distance_j_.clear(); + element_distance_d_.clear(); + + pfcandidate_eta_.clear(); + pfcandidate_phi_.clear(); + pfcandidate_pt_.clear(); + pfcandidate_px_.clear(); + pfcandidate_py_.clear(); + pfcandidate_pz_.clear(); + pfcandidate_energy_.clear(); + pfcandidate_pdgid_.clear(); + +} //clearVariables + +GlobalPoint PFAnalysis::getHitPosition(const DetId& id) { + GlobalPoint ret; + + bool present = false; + if (((id.det() == DetId::Ecal && + (id.subdetId() == EcalBarrel || id.subdetId() == EcalEndcap || id.subdetId() == EcalPreshower)) || + (id.det() == DetId::Hcal && (id.subdetId() == HcalBarrel || id.subdetId() == HcalEndcap || + id.subdetId() == HcalForward || id.subdetId() == HcalOuter)))) { + const CaloSubdetectorGeometry* geom_sd(geom->getSubdetectorGeometry(id.det(), id.subdetId())); + present = geom_sd->present(id); + if (present) { + const auto& cell = geom_sd->getGeometry(id); + ret = GlobalPoint(cell->getPosition()); + } + } + return ret; +} + +void PFAnalysis::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { + clearVariables(); + + auto& pG = iSetup.getData(geometryToken_); + geom = (CaloGeometry*)&pG; + auto& pT = iSetup.getData(topologyToken_); + hcal_topo = (HcalTopology*)&pT; + + //Simulated tracks, cleaned up by TrackingTruthAccumulator + edm::Handle<edm::View<TrackingParticle>> trackingParticlesHandle; + iEvent.getByToken(trackingParticles_, trackingParticlesHandle); + const edm::View<TrackingParticle>& trackingParticles = *trackingParticlesHandle; + + edm::Handle<edm::View<CaloParticle>> caloParticlesHandle; + iEvent.getByToken(caloParticles_, caloParticlesHandle); + const edm::View<CaloParticle>& caloParticles = *caloParticlesHandle; + + //Matches reco tracks to sim tracks (TrackingParticle) + edm::Handle<reco::RecoToSimCollection> recotosimCollection; + iEvent.getByToken(tracks_recotosim_, recotosimCollection); + const auto recotosim = *recotosimCollection; + + edm::Handle<edm::View<reco::Track>> trackHandle; + iEvent.getByToken(tracks_, trackHandle); + const edm::View<reco::Track>& tracks = *trackHandle; + + edm::Handle<std::vector<reco::GenParticle>> genParticlesHandle; + iEvent.getByToken(genParticles_, genParticlesHandle); + for (std::vector<reco::GenParticle>::const_iterator it_p = genParticlesHandle->begin(); + it_p != genParticlesHandle->end(); + ++it_p) { + gen_eta_.push_back(it_p->eta()); + gen_phi_.push_back(it_p->phi()); + gen_pt_.push_back(it_p->pt()); + gen_px_.push_back(it_p->px()); + gen_py_.push_back(it_p->py()); + gen_pz_.push_back(it_p->pz()); + gen_energy_.push_back(it_p->energy()); + gen_charge_.push_back(it_p->charge()); + gen_pdgid_.push_back(it_p->pdgId()); + gen_status_.push_back(it_p->status()); + std::vector<int> daughters(it_p->daughterRefVector().size(), 0); + for (unsigned j = 0; j < it_p->daughterRefVector().size(); ++j) { + daughters[j] = static_cast<int>(it_p->daughterRefVector().at(j).key()); + } + gen_daughters_.push_back(daughters); + } + + edm::Handle<std::vector<reco::PFCandidate>> pfCandidatesHandle; + iEvent.getByToken(pfCandidates_, pfCandidatesHandle); + std::vector<reco::PFCandidate> pfCandidates = *pfCandidatesHandle; + + edm::Handle<std::vector<reco::PFBlock>> pfBlocksHandle; + iEvent.getByToken(pfBlocks_, pfBlocksHandle); + std::vector<reco::PFBlock> pfBlocks = *pfBlocksHandle; + + //Collect all clusters, tracks and superclusters + const auto& all_elements_distances = processBlocks(pfBlocks); + const auto& all_elements = all_elements_distances.first; + const auto& all_distances = all_elements_distances.second; + assert(!all_elements.empty()); + //assert(all_distances.size() > 0); + for (const auto& d : all_distances) { + element_distance_i_.push_back(get<0>(d)); + element_distance_j_.push_back(get<1>(d)); + element_distance_d_.push_back(get<2>(d)); + } + + //We need to use the original reco::Track collection for track association + for (unsigned long ntrack = 0; ntrack < tracks.size(); ntrack++) { + edm::RefToBase<reco::Track> trackref(trackHandle, ntrack); + const auto vec_idx_in_all_elements = find_element_ref(all_elements, trackref); + + //track was not used by PF, we skip as well + if (vec_idx_in_all_elements.empty()) { + continue; + } + + if (recotosim.find(trackref) != recotosim.end()) { + const auto& tps = recotosim[trackref]; + for (const auto& tp : tps) { + edm::Ref<std::vector<TrackingParticle>> tpr = tp.first; + for (auto idx_in_all_elements : vec_idx_in_all_elements) { + trackingparticle_to_element.emplace_back(tpr.key(), idx_in_all_elements); + } + } + } + } + + processTrackingParticles(trackingParticles, trackingParticlesHandle); + + int idx_simcluster = 0; + //Fill genparticles from calorimeter hits + for (unsigned long ncaloparticle = 0; ncaloparticle < caloParticles.size(); ncaloparticle++) { + const auto& cp = caloParticles.at(ncaloparticle); + edm::RefToBase<CaloParticle> cpref(caloParticlesHandle, ncaloparticle); + + int nhits = 0; + for (const auto& simcluster : cp.simClusters()) { + //create a map of detId->energy of all the rechits in all the clusters of this SimCluster + map<uint64_t, double> detid_energy; + + simcluster_nhits_.push_back(nhits); + simcluster_eta_.push_back(simcluster->p4().eta()); + simcluster_phi_.push_back(simcluster->p4().phi()); + simcluster_pt_.push_back(simcluster->p4().pt()); + simcluster_energy_.push_back(simcluster->energy()); + simcluster_pid_.push_back(simcluster->pdgId()); + simcluster_bx_.push_back(simcluster->eventId().bunchCrossing()); + simcluster_ev_.push_back(simcluster->eventId().event()); + + simcluster_px_.push_back(simcluster->p4().x()); + simcluster_py_.push_back(simcluster->p4().y()); + simcluster_pz_.push_back(simcluster->p4().z()); + + for (const auto& hf : simcluster->hits_and_fractions()) { + DetId id(hf.first); + + if (id.det() == DetId::Hcal || id.det() == DetId::Ecal) { + const auto& pos = getHitPosition(id); + nhits += 1; + + const float x = pos.x(); + const float y = pos.y(); + const float z = pos.z(); + const float eta = pos.eta(); + const float phi = pos.phi(); + + simhit_frac_.push_back(hf.second); + simhit_x_.push_back(x); + simhit_y_.push_back(y); + simhit_z_.push_back(z); + simhit_det_.push_back(id.det()); + simhit_subdet_.push_back(id.subdetId()); + simhit_eta_.push_back(eta); + simhit_phi_.push_back(phi); + simhit_idx_simcluster_.push_back(idx_simcluster); + simhit_detid_.push_back(id.rawId()); + detid_energy[id.rawId()] += hf.second; + } + } + + int simcluster_to_trackingparticle = -1; + for (const auto& simtrack : simcluster->g4Tracks()) { + simtrack_x_.push_back(simtrack.trackerSurfacePosition().x()); + simtrack_y_.push_back(simtrack.trackerSurfacePosition().y()); + simtrack_z_.push_back(simtrack.trackerSurfacePosition().z()); + simtrack_idx_simcluster_.push_back(idx_simcluster); + simtrack_pid_.push_back(simtrack.type()); + + for (unsigned int itp = 0; itp < trackingParticles.size(); itp++) { + const auto& simtrack2 = trackingParticles.at(itp).g4Tracks().at(0); + //compare the two tracks, taking into account that both eventId and trackId need to be compared due to pileup + if (simtrack.eventId() == simtrack2.eventId() && simtrack.trackId() == simtrack2.trackId()) { + simcluster_to_trackingparticle = itp; + //we are satisfied with the first match, in practice there should not be more + break; + } + } //trackingParticles + } //simcluster tracks + + simcluster_detids_.push_back(detid_energy); + simcluster_idx_trackingparticle_.push_back(simcluster_to_trackingparticle); + + idx_simcluster += 1; + } //simclusters + } //caloParticles + + associateClusterToSimCluster(all_elements); + + //fill elements + for (unsigned int ielem = 0; ielem < all_elements.size(); ielem++) { + const auto& elem = all_elements.at(ielem); + const auto& orig = elem.orig; + reco::PFBlockElement::Type type = orig.type(); + + float pt = 0.0; + float deltap = 0.0; + float sigmadeltap = 0.0; + float px = 0.0; + float py = 0.0; + float pz = 0.0; + float eta = 0.0; + float phi = 0.0; + float energy = 0.0; + float trajpoint = 0.0; + float eta_ecal = 0.0; + float phi_ecal = 0.0; + float eta_hcal = 0.0; + float phi_hcal = 0.0; + int charge = 0; + int layer = 0; + float depth = 0; + float muon_dt_hits = 0.0; + float muon_csc_hits = 0.0; + + if (type == reco::PFBlockElement::TRACK) { + const auto& matched_pftrack = orig.trackRefPF(); + if (matched_pftrack.isNonnull()) { + const auto& atECAL = matched_pftrack->extrapolatedPoint(reco::PFTrajectoryPoint::ECALShowerMax); + const auto& atHCAL = matched_pftrack->extrapolatedPoint(reco::PFTrajectoryPoint::HCALEntrance); + if (atHCAL.isValid()) { + eta_hcal = atHCAL.positionREP().eta(); + phi_hcal = atHCAL.positionREP().phi(); + } + if (atECAL.isValid()) { + eta_ecal = atECAL.positionREP().eta(); + phi_ecal = atECAL.positionREP().phi(); + } + } + const auto& ref = ((const reco::PFBlockElementTrack*)&orig)->trackRef(); + pt = ref->pt(); + px = ref->px(); + py = ref->py(); + pz = ref->pz(); + eta = ref->eta(); + phi = ref->phi(); + energy = ref->p(); + charge = ref->charge(); + + reco::MuonRef muonRef = orig.muonRef(); + if (muonRef.isNonnull()) { + reco::TrackRef standAloneMu = muonRef->standAloneMuon(); + if (standAloneMu.isNonnull()) { + muon_dt_hits = standAloneMu->hitPattern().numberOfValidMuonDTHits(); + muon_csc_hits = standAloneMu->hitPattern().numberOfValidMuonCSCHits(); + } + } + + } else if (type == reco::PFBlockElement::BREM) { + const auto* orig2 = (const reco::PFBlockElementBrem*)&orig; + const auto& ref = orig2->GsftrackRef(); + if (ref.isNonnull()) { + deltap = orig2->DeltaP(); + sigmadeltap = orig2->SigmaDeltaP(); + pt = ref->pt(); + px = ref->px(); + py = ref->py(); + pz = ref->pz(); + eta = ref->eta(); + phi = ref->phi(); + energy = ref->p(); + trajpoint = orig2->indTrajPoint(); + charge = ref->charge(); + } + } else if (type == reco::PFBlockElement::GSF) { + //requires to keep GsfPFRecTracks + const auto* orig2 = (const reco::PFBlockElementGsfTrack*)&orig; + const auto& vec = orig2->Pin(); + pt = vec.pt(); + px = vec.px(); + py = vec.py(); + pz = vec.pz(); + eta = vec.eta(); + phi = vec.phi(); + energy = vec.energy(); + if (!orig2->GsftrackRefPF().isNull()) { + charge = orig2->GsftrackRefPF()->charge(); + } + } else if (type == reco::PFBlockElement::ECAL || type == reco::PFBlockElement::PS1 || + type == reco::PFBlockElement::PS2 || type == reco::PFBlockElement::HCAL || + type == reco::PFBlockElement::HO || type == reco::PFBlockElement::HFHAD || + type == reco::PFBlockElement::HFEM) { + const auto& ref = ((const reco::PFBlockElementCluster*)&orig)->clusterRef(); + if (ref.isNonnull()) { + eta = ref->eta(); + phi = ref->phi(); + px = ref->position().x(); + py = ref->position().y(); + pz = ref->position().z(); + energy = ref->energy(); + layer = ref->layer(); + depth = ref->depth(); + } + } else if (type == reco::PFBlockElement::SC) { + const auto& clref = ((const reco::PFBlockElementSuperCluster*)&orig)->superClusterRef(); + if (clref.isNonnull()) { + eta = clref->eta(); + phi = clref->phi(); + px = clref->position().x(); + py = clref->position().y(); + pz = clref->position().z(); + energy = clref->energy(); + } + } + vector<int> tps; + for (const auto& t : trackingparticle_to_element) { + if (t.second == (int)ielem) { + tps.push_back(t.first); + } + } + vector<int> scs; + for (const auto& t : simcluster_to_element) { + if (t.second == (int)ielem) { + scs.push_back(t.first); + } + } + + element_pt_.push_back(pt); + element_px_.push_back(px); + element_py_.push_back(py); + element_pz_.push_back(pz); + element_deltap_.push_back(deltap); + element_sigmadeltap_.push_back(sigmadeltap); + element_eta_.push_back(eta); + element_phi_.push_back(phi); + element_energy_.push_back(energy); + element_eta_ecal_.push_back(eta_ecal); + element_phi_ecal_.push_back(phi_ecal); + element_eta_hcal_.push_back(eta_hcal); + element_phi_hcal_.push_back(phi_hcal); + element_charge_.push_back(charge); + element_type_.push_back(type); + element_layer_.push_back(layer); + element_depth_.push_back(depth); + element_trajpoint_.push_back(trajpoint); + element_muon_dt_hits_.push_back(muon_dt_hits); + element_muon_csc_hits_.push_back(muon_csc_hits); + } + + //associate candidates to elements + int icandidate = 0; + for (const auto& cand : pfCandidates) { + pfcandidate_eta_.push_back(cand.eta()); + pfcandidate_phi_.push_back(cand.phi()); + pfcandidate_pt_.push_back(cand.pt()); + pfcandidate_px_.push_back(cand.px()); + pfcandidate_py_.push_back(cand.py()); + pfcandidate_pz_.push_back(cand.pz()); + pfcandidate_energy_.push_back(cand.energy()); + pfcandidate_pdgid_.push_back(cand.pdgId()); + + for (const auto& el : cand.elementsInBlocks()) { + const auto idx_block = el.first.index(); + unsigned idx_element_in_block = el.second; + + int ielem = -1; + for (const auto& elem_with_index : all_elements) { + ielem += 1; + if (elem_with_index.idx_block == idx_block && elem_with_index.idx_elem == idx_element_in_block) { + break; + } + } + assert(ielem != -1); + element_to_candidate.push_back(make_pair(ielem, icandidate)); + } //elements + + icandidate += 1; + } //pfCandidates + + ev_event_ = iEvent.id().event(); + ev_lumi_ = iEvent.id().luminosityBlock(); + ev_run_ = iEvent.id().run(); + + t_->Fill(); +} //analyze + +void PFAnalysis::processTrackingParticles(const edm::View<TrackingParticle>& trackingParticles, + edm::Handle<edm::View<TrackingParticle>>& trackingParticlesHandle) { + for (unsigned long ntrackingparticle = 0; ntrackingparticle < trackingParticles.size(); ntrackingparticle++) { + const auto& tp = trackingParticles.at(ntrackingparticle); + edm::RefToBase<TrackingParticle> tpref(trackingParticlesHandle, ntrackingparticle); + + math::XYZTLorentzVectorD vtx(0, 0, 0, 0); + + if (!tp.decayVertices().empty()) { + vtx = tp.decayVertices().at(0)->position(); + } + auto orig_vtx = tp.vertex(); + + // fill branches + trackingparticle_eta_.push_back(tp.p4().eta()); + trackingparticle_phi_.push_back(tp.p4().phi()); + trackingparticle_pt_.push_back(tp.p4().pt()); + trackingparticle_px_.push_back(tp.p4().px()); + trackingparticle_py_.push_back(tp.p4().py()); + trackingparticle_pz_.push_back(tp.p4().pz()); + trackingparticle_energy_.push_back(tp.p4().energy()); + trackingparticle_dvx_.push_back(vtx.x()); + trackingparticle_dvy_.push_back(vtx.y()); + trackingparticle_dvz_.push_back(vtx.z()); + trackingparticle_bx_.push_back(tp.eventId().bunchCrossing()); + trackingparticle_ev_.push_back(tp.eventId().event()); + + trackingparticle_ovx_.push_back(orig_vtx.x()); + trackingparticle_ovy_.push_back(orig_vtx.y()); + trackingparticle_ovz_.push_back(orig_vtx.z()); + + trackingparticle_pid_.push_back(tp.pdgId()); + } +} + +//https://stackoverflow.com/questions/27086195/linear-index-upper-triangular-matrix/27088560 +int get_index_triu_vector(int i, int j, int n) { + int k = (n * (n - 1) / 2) - (n - i) * ((n - i) - 1) / 2 + j - i - 1; + return k; +} + +pair<int, int> get_triu_vector_index(int k, int n) { + int i = n - 2 - floor(sqrt(-8 * k + 4 * n * (n - 1) - 7) / 2.0 - 0.5); + int j = k + i + 1 - n * (n - 1) / 2 + (n - i) * ((n - i) - 1) / 2; + return make_pair(i, j); +} + +pair<vector<ElementWithIndex>, vector<tuple<int, int, float>>> PFAnalysis::processBlocks( + const std::vector<reco::PFBlock>& pfBlocks) { + vector<ElementWithIndex> ret; + vector<tuple<int, int, float>> distances; + + //Collect all the elements + int iblock = 0; + for (const auto& block : pfBlocks) { + int ielem = 0; + const auto& linkdata = block.linkData(); + + //create a list of global element indices with distances + for (const auto& link : linkdata) { + const auto vecidx = link.first; + const auto dist = link.second.distance; + const auto& ij = get_triu_vector_index(vecidx, block.elements().size()); + auto globalindex_i = ij.first + ret.size(); + auto globalindex_j = ij.second + ret.size(); + distances.push_back(make_tuple(globalindex_i, globalindex_j, dist)); + } + + for (const auto& elem : block.elements()) { + ElementWithIndex elem_index(elem, iblock, ielem); + ret.push_back(elem_index); + ielem += 1; + } //elements + iblock += 1; + } //blocks + return make_pair(ret, distances); + +} //processBlocks + +void PFAnalysis::associateClusterToSimCluster(const vector<ElementWithIndex>& all_elements) { + vector<map<uint64_t, double>> detids_elements; + map<uint64_t, double> rechits_energy_all; + + int idx_element = 0; + for (const auto& elem : all_elements) { + map<uint64_t, double> detids; + const auto& type = elem.orig.type(); + + if (type == reco::PFBlockElement::ECAL || type == reco::PFBlockElement::HCAL || type == reco::PFBlockElement::PS1 || + type == reco::PFBlockElement::PS2 || type == reco::PFBlockElement::HO || type == reco::PFBlockElement::HFHAD || + type == reco::PFBlockElement::HFEM) { + const auto& clref = elem.orig.clusterRef(); + assert(clref.isNonnull()); + const auto& cluster = *clref; + + //all rechits and the energy fractions in this cluster + const vector<reco::PFRecHitFraction>& rechit_fracs = cluster.recHitFractions(); + for (const auto& rh : rechit_fracs) { + const reco::PFRecHit pfrh = *rh.recHitRef(); + if (detids.find(pfrh.detId()) != detids.end()) { + continue; + } + detids[pfrh.detId()] += pfrh.energy() * rh.fraction(); + const auto id = DetId(pfrh.detId()); + float x = 0; + float y = 0; + float z = 0; + float eta = 0; + float phi = 0; + + const auto& pos = getHitPosition(id); + x = pos.x(); + y = pos.y(); + z = pos.z(); + eta = pos.eta(); + phi = pos.phi(); + + rechit_x_.push_back(x); + rechit_y_.push_back(y); + rechit_z_.push_back(z); + rechit_det_.push_back(id.det()); + rechit_subdet_.push_back(id.subdetId()); + rechit_eta_.push_back(eta); + rechit_phi_.push_back(phi); + rechit_e_.push_back(pfrh.energy() * rh.fraction()); + rechit_idx_element_.push_back(idx_element); + rechit_detid_.push_back(id.rawId()); + rechits_energy_all[id.rawId()] += pfrh.energy() * rh.fraction(); + } //rechit_fracs + } else if (type == reco::PFBlockElement::SC) { + const auto& clref = ((const reco::PFBlockElementSuperCluster*)&(elem.orig))->superClusterRef(); + assert(clref.isNonnull()); + const auto& cluster = *clref; + + //all rechits and the energy fractions in this cluster + const auto& rechit_fracs = cluster.hitsAndFractions(); + for (const auto& rh : rechit_fracs) { + if (detids.find(rh.first.rawId()) != detids.end()) { + continue; + } + detids[rh.first.rawId()] += cluster.energy() * rh.second; + const auto id = rh.first; + float x = 0; + float y = 0; + float z = 0; + float eta = 0; + float phi = 0; + + const auto& pos = getHitPosition(id); + x = pos.x(); + y = pos.y(); + z = pos.z(); + eta = pos.eta(); + phi = pos.phi(); + + rechit_x_.push_back(x); + rechit_y_.push_back(y); + rechit_z_.push_back(z); + rechit_det_.push_back(id.det()); + rechit_subdet_.push_back(id.subdetId()); + rechit_eta_.push_back(eta); + rechit_phi_.push_back(phi); + rechit_e_.push_back(rh.second); + rechit_idx_element_.push_back(idx_element); + rechit_detid_.push_back(id.rawId()); + rechits_energy_all[id.rawId()] += cluster.energy() * rh.second; + } //rechit_fracs + } + detids_elements.push_back(detids); + idx_element += 1; + } //all_elements + + //associate elements (reco clusters) to simclusters + int ielement = 0; + for (const auto& detids : detids_elements) { + int isimcluster = 0; + if (!detids.empty()) { + double sum_e_tot = 0.0; + for (const auto& c : detids) { + sum_e_tot += c.second; + } + + for (const auto& simcluster_detids : simcluster_detids_) { + double sum_e_tot_sc = 0.0; + for (const auto& c : simcluster_detids) { + sum_e_tot_sc += c.second; + } + + //get the energy of the simcluster hits that matches detids of the rechits + double cmp = detid_compare(detids, simcluster_detids); + if (cmp > 0) { + simcluster_to_element.push_back(make_pair(isimcluster, ielement)); + simcluster_to_element_cmp.push_back((float)cmp); + } + isimcluster += 1; + } + } //element had rechits + ielement += 1; + } //rechit clusters +} + +void PFAnalysis::beginRun(edm::Run const& iEvent, edm::EventSetup const& es) { + edm::ESHandle<MagneticField> magfield; + es.get<IdealMagneticFieldRecord>().get(magfield); + + edm::ESHandle<HcalDDDRecConstants> pHRNDC; + es.get<HcalRecNumberingRecord>().get(pHRNDC); + hcons = &(*pHRNDC); + + aField_ = &(*magfield); +} + +void PFAnalysis::endRun(edm::Run const& iEvent, edm::EventSetup const&) {} + +void PFAnalysis::beginJob() { ; } + +void PFAnalysis::endJob() {} + +void PFAnalysis::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); +} + +DEFINE_FWK_MODULE(PFAnalysis); diff --git a/Validation/RecoParticleFlow/python/customize_pfanalysis.py b/Validation/RecoParticleFlow/python/customize_pfanalysis.py index c54f0db341417..a38ebc9358555 100644 --- a/Validation/RecoParticleFlow/python/customize_pfanalysis.py +++ b/Validation/RecoParticleFlow/python/customize_pfanalysis.py @@ -32,4 +32,11 @@ def customize_step3(process): process.FEVTDEBUGHLToutput.outputCommands.append('keep recoPFRecHits_*_*_*') process.FEVTDEBUGHLToutput.outputCommands.append('keep recoGsfPFRecTracks_*_*_*') process.FEVTDEBUGHLToutput.outputCommands.append('keep *_particleFlowBlock_*_*') + process.FEVTDEBUGHLToutput.outputCommands.append('keep recoTracks_standAloneMuons_*_*') + process.FEVTDEBUGHLToutput.outputCommands.append('keep recoTrackExtras_standAloneMuons_*_*') + process.FEVTDEBUGHLToutput.outputCommands.append('keep recoMuons_*_*_*') + process.FEVTDEBUGHLToutput.outputCommands.append('keep recoTracks_*_*_*') + process.FEVTDEBUGHLToutput.outputCommands.append('keep recoGsfTracks_*_*_*') + process.FEVTDEBUGHLToutput.outputCommands.append('keep recoPFBlocks_*_*_*') + return process diff --git a/Validation/RecoParticleFlow/test/crab/multicrab.py b/Validation/RecoParticleFlow/test/crab/multicrab.py index f217045e279e7..4cd903794b575 100644 --- a/Validation/RecoParticleFlow/test/crab/multicrab.py +++ b/Validation/RecoParticleFlow/test/crab/multicrab.py @@ -10,12 +10,12 @@ def submit(config): fi.write(config.pythonise_()) samples = [ - ("/RelValQCD_FlatPt_15_3000HS_14/CMSSW_11_2_0_pre6-112X_mcRun3_2021_realistic_v7-v1/GEN-SIM-DIGI-RAW", "QCD_noPU"), - ("/RelValQCD_FlatPt_15_3000HS_14/CMSSW_11_2_0_pre6-PU_112X_mcRun3_2021_realistic_v7-v1/GEN-SIM-DIGI-RAW", "QCD_PU"), - ("/RelValZEE_14/CMSSW_11_2_0_pre6-PU_112X_mcRun3_2021_realistic_v7-v1/GEN-SIM-DIGI-RAW", "ZEE_PU"), - ("/RelValZMM_14/CMSSW_11_2_0_pre6-PU_112X_mcRun3_2021_realistic_v7-v1/GEN-SIM-DIGI-RAW", "ZMM_PU"), - ("/RelValTenTau_15_500/CMSSW_11_2_0_pre6-PU_112X_mcRun3_2021_realistic_v7-v1/GEN-SIM-DIGI-RAW", "TenTau_PU"), - ("/RelValNuGun/CMSSW_11_2_0_pre6-PU_112X_mcRun3_2021_realistic_v7-v1/GEN-SIM-DIGI-RAW", "NuGun_PU"), + ("/RelValQCD_FlatPt_15_3000HS_14/CMSSW_11_3_0_pre1-113X_mcRun3_2021_realistic_v1-v3/GEN-SIM-DIGI-RAW", "QCD_noPU"), + ("/RelValQCD_FlatPt_15_3000HS_14/CMSSW_11_3_0_pre1-PU_113X_mcRun3_2021_realistic_v1-v1/GEN-SIM-DIGI-RAW", "QCD_PU"), +f ("/RelValZEE_14/CMSSW_11_3_0_pre1-PU_113X_mcRun3_2021_realistic_v1-v1/GEN-SIM-DIGI-RAW", "ZEE_PU"), + ("/RelValZMM_14/CMSSW_11_3_0_pre1-PU_113X_mcRun3_2021_realistic_v1-v1/GEN-SIM-DIGI-RAW", "ZMM_PU"), + ("/RelValTenTau_15_500/CMSSW_11_3_0_pre1-PU_113X_mcRun3_2021_realistic_v1-v1/GEN-SIM-DIGI-RAW", "TenTau_PU"), + ("/RelValNuGun/CMSSW_11_3_0_pre1-PU_113X_mcRun3_2021_realistic_v1-v1/GEN-SIM-DIGI-RAW", "NuGun_PU"), ] if __name__ == "__main__": @@ -34,8 +34,8 @@ def submit(config): conf.JobType.maxJobRuntimeMin = 8*60 conf.JobType.allowUndistributedCMSSW = True conf.JobType.outputFiles = ["step3_inMINIAODSIM.root"] - conf.JobType.maxMemoryMB = 5000 - conf.JobType.numCores = 2 + conf.JobType.maxMemoryMB = 20000 + conf.JobType.numCores = 8 conf.Data.inputDataset = dataset conf.Data.splitting = 'LumiBased' diff --git a/Validation/RecoParticleFlow/test/crab/multicrab_phase2.py b/Validation/RecoParticleFlow/test/crab/multicrab_phase2.py index 68b04dfb08789..f0ff477ae68f9 100644 --- a/Validation/RecoParticleFlow/test/crab/multicrab_phase2.py +++ b/Validation/RecoParticleFlow/test/crab/multicrab_phase2.py @@ -10,12 +10,12 @@ def submit(config): fi.write(config.pythonise_()) samples = [ - ("/RelValQCD_Pt15To7000_Flat_14/CMSSW_11_2_0_pre6-112X_mcRun4_realistic_v2_2026D49noPU-v1/GEN-SIM-DIGI-RAW", "QCD_noPU_phase2"), - ("/RelValQCD_Pt15To7000_Flat_14/CMSSW_11_2_0_pre6-PU25ns_112X_mcRun4_realistic_v2_2026D49PU200-v1/GEN-SIM-DIGI-RAW", "QCD_PU_phase2"), - ("/RelValZEE_14/CMSSW_11_2_0_pre6-PU25ns_112X_mcRun4_realistic_v2_2026D49PU200-v1/GEN-SIM-DIGI-RAW", "ZEE_PU_phase2"), - ("/RelValZMM_14/CMSSW_11_2_0_pre6-PU25ns_112X_mcRun4_realistic_v2_2026D49PU200-v1/GEN-SIM-DIGI-RAW", "ZMM_PU_phase2"), - ("/RelValTenTau_15_500_Eta3p1/CMSSW_11_2_0_pre6-PU25ns_112X_mcRun4_realistic_v2_2026D49PU200-v1/GEN-SIM-DIGI-RAW", "TenTau_PU_phase2"), - ("/RelValNuGun/CMSSW_11_0_0-PU25ns_110X_mcRun4_realistic_v3_2026D49PU200-v1/GEN-SIM-DIGI-RAW", "NuGun_PU_phase2"), + ("/RelValQCD_Pt15To7000_Flat_14/CMSSW_11_3_0_pre1-113X_mcRun4_realistic_v1_2026D49noPU_rsb-v1/GEN-SIM-DIGI-RAW", "QCD_noPU_phase2"), + ("/RelValQCD_Pt15To7000_Flat_14/CMSSW_11_3_0_pre1-PU_113X_mcRun4_realistic_v1_2026D49PU200-v1/GEN-SIM-DIGI-RAW", "QCD_PU_phase2"), + ("/RelValZEE_14/CMSSW_11_3_0_pre1-PU_113X_mcRun4_realistic_v1_2026D49PU200-v1/GEN-SIM-DIGI-RAW", "ZEE_PU_phase2"), + ("/RelValZMM_14/CMSSW_11_3_0_pre1-PU_113X_mcRun4_realistic_v1_2026D49PU200-v1/GEN-SIM-DIGI-RAW", "ZMM_PU_phase2"), + ("/RelValTenTau_15_500_Eta3p1/CMSSW_11_3_0_pre1-PU_113X_mcRun4_realistic_v1_2026D49PU200-v1/GEN-SIM-DIGI-RAW", "TenTau_PU_phase2"), + ("/RelValNuGun/CMSSW_11_3_0_pre1-PU_113X_mcRun4_realistic_v1_2026D49PU200-v1/GEN-SIM-DIGI-RAW", "NuGun_PU_phase2"), ] if __name__ == "__main__": @@ -34,12 +34,12 @@ def submit(config): conf.JobType.maxJobRuntimeMin = 8*60 conf.JobType.allowUndistributedCMSSW = True conf.JobType.outputFiles = ["step3_inMINIAODSIM.root"] - conf.JobType.maxMemoryMB = 5000 - conf.JobType.numCores = 2 + conf.JobType.maxMemoryMB = 20000 + conf.JobType.numCores = 8 conf.Data.inputDataset = dataset conf.Data.splitting = 'LumiBased' - conf.Data.unitsPerJob = 1 + conf.Data.unitsPerJob = 5 #conf.Data.totalUnits = 50 conf.Data.publication = False conf.Data.outputDatasetTag = 'pfvalidation' diff --git a/Validation/RecoParticleFlow/test/datasets.py b/Validation/RecoParticleFlow/test/datasets.py index afe55fec28d8c..b6012e09f8e2b 100644 --- a/Validation/RecoParticleFlow/test/datasets.py +++ b/Validation/RecoParticleFlow/test/datasets.py @@ -129,11 +129,11 @@ def cache_das_filenames(self): #prefix = "root://xrootd-cms.infn.it//" tmpdir = "tmp" datasets = [ - Dataset("/RelValQCD_FlatPt_15_3000HS_14/CMSSW_11_2_0_pre6-112X_mcRun3_2021_realistic_v7-v1/GEN-SIM-DIGI-RAW", "QCD_noPU", prefix, None, False, tmpdir), - Dataset("/RelValQCD_FlatPt_15_3000HS_14/CMSSW_11_2_0_pre6-PU_112X_mcRun3_2021_realistic_v7-v1/GEN-SIM-DIGI-RAW", "QCD_PU", prefix, None, False, tmpdir), - Dataset("/RelValZEE_14/CMSSW_11_2_0_pre6-PU_112X_mcRun3_2021_realistic_v7-v1/GEN-SIM-DIGI-RAW", "ZEE_PU", prefix, None, False, tmpdir), - Dataset("/RelValZMM_14/CMSSW_11_2_0_pre6-PU_112X_mcRun3_2021_realistic_v7-v1/GEN-SIM-DIGI-RAW", "ZMM_PU", prefix, None, False, tmpdir), - Dataset("/RelValTenTau_15_500/CMSSW_11_2_0_pre6-PU_112X_mcRun3_2021_realistic_v7-v1/GEN-SIM-DIGI-RAW", "TenTau_PU", prefix, None, False, tmpdir), - Dataset("/RelValNuGun/CMSSW_11_2_0_pre6-PU_112X_mcRun3_2021_realistic_v7-v1/GEN-SIM-DIGI-RAW", "NuGun_PU", prefix, None, False, tmpdir)] + Dataset("/RelValQCD_FlatPt_15_3000HS_14/CMSSW_11_3_0_pre1-113X_mcRun3_2021_realistic_v1-v3/GEN-SIM-DIGI-RAW", "QCD_noPU", prefix, None, False, tmpdir), + Dataset("/RelValQCD_FlatPt_15_3000HS_14/CMSSW_11_3_0_pre1-PU_113X_mcRun3_2021_realistic_v1-v1/GEN-SIM-DIGI-RAW", "QCD_PU", prefix, None, False, tmpdir), + Dataset("/RelValZEE_14/CMSSW_11_3_0_pre1-PU_113X_mcRun3_2021_realistic_v1-v1/GEN-SIM-DIGI-RAW", "ZEE_PU", prefix, None, False, tmpdir), + Dataset("/RelValZMM_14/CMSSW_11_3_0_pre1-PU_113X_mcRun3_2021_realistic_v1-v1/GEN-SIM-DIGI-RAW", "ZMM_PU", prefix, None, False, tmpdir), + Dataset("/RelValTenTau_15_500/CMSSW_11_3_0_pre1-PU_113X_mcRun3_2021_realistic_v1-v1/GEN-SIM-DIGI-RAW", "TenTau_PU", prefix, None, False, tmpdir), + Dataset("/RelValNuGun/CMSSW_11_3_0_pre1-PU_113X_mcRun3_2021_realistic_v1-v1/GEN-SIM-DIGI-RAW", "NuGun_PU", prefix, None, False, tmpdir)] for ds in datasets: ds.cache_das_filenames() diff --git a/Validation/RecoParticleFlow/test/pfanalysis_ntuple.py b/Validation/RecoParticleFlow/test/pfanalysis_ntuple.py index 92facf3efbbc4..e20ce73b2c735 100644 --- a/Validation/RecoParticleFlow/test/pfanalysis_ntuple.py +++ b/Validation/RecoParticleFlow/test/pfanalysis_ntuple.py @@ -32,8 +32,7 @@ duplicateCheckMode = cms.untracked.string("noDuplicateCheck") ) -process.ana = cms.EDAnalyzer('PFAnalysis', -) +process.ana = cms.EDAnalyzer('PFAnalysisNtuplizer') process.TFileService = cms.Service("TFileService", fileName = cms.string("pfntuple.root") diff --git a/Validation/RecoParticleFlow/test/run_relval.sh b/Validation/RecoParticleFlow/test/run_relval.sh index 38ec64e8a76b8..67eab321ea7b1 100755 --- a/Validation/RecoParticleFlow/test/run_relval.sh +++ b/Validation/RecoParticleFlow/test/run_relval.sh @@ -20,16 +20,16 @@ fi # #set default conditions - run3 2021 -CONDITIONS=auto:phase1_2021_realistic ERA=Run3 GEOM=DB.Extended +CONDITIONS=auto:phase1_2021_realistic ERA=Run3 GEOM=DB.Extended CUSTOM= # #conditions - 2018 -#CONDITIONS=auto:phase1_2018_realistic ERA=Run2_2018 GEOM=DB.Extended +#CONDITIONS=auto:phase1_2018_realistic ERA=Run2_2018 GEOM=DB.Extended CUSTOM= # #conditions - phase2 -#CONDITIONS=auto:phase2_realistic_T15 ERA=Phase2C9 GEOM=Extended2026D49 +#CONDITIONS=auto:phase2_realistic_T15 ERA=Phase2C9 GEOM=Extended2026D49 CUSTOM="--customise SLHCUpgradeSimulations/Configuration/aging.customise_aging_1000" #Running with 2 threads allows to use more memory on grid -NTHREADS=2 +NTHREADS=8 #Argument parsing if [ "$#" -ne 3 ]; then @@ -108,7 +108,7 @@ if [ $STEP == "RECO" ]; then FILENAME=`sed -n "${NJOB}p" $INPUT_FILELIST` echo "FILENAME="$FILENAME - cmsDriver.py step3 --conditions $CONDITIONS -s RAW2DIGI,L1Reco,RECO,RECOSIM,EI,PAT --datatier MINIAODSIM --nThreads $NTHREADS -n -1 --era $ERA --eventcontent MINIAODSIM --geometry=$GEOM --filein step2.root --fileout file:step3_inMINIAODSIM.root --no_exec --python_filename=step3.py + cmsDriver.py step3 --conditions $CONDITIONS -s RAW2DIGI,L1Reco,RECO,RECOSIM,EI,PAT --datatier MINIAODSIM --nThreads $NTHREADS -n -1 --era $ERA --eventcontent MINIAODSIM --geometry=$GEOM --filein step2.root --fileout file:step3_inMINIAODSIM.root --no_exec --python_filename=step3.py $CUSTOM else @@ -127,7 +127,7 @@ if [ $STEP == "RECO" ]; then echo "FILENAME="$FILENAME #Run the actual CMS reco with particle flow. echo "Running step RECO" - cmsDriver.py step3 --conditions $CONDITIONS -s RAW2DIGI,L1Reco,RECO,RECOSIM,EI,PAT --datatier MINIAODSIM --nThreads $NTHREADS -n -1 --era $ERA --eventcontent MINIAODSIM --geometry=$GEOM --filein $FILENAME --fileout file:step3_inMINIAODSIM.root | tee step3.log 2>&1 + cmsDriver.py step3 --conditions $CONDITIONS -s RAW2DIGI,L1Reco,RECO,RECOSIM,EI,PAT --datatier MINIAODSIM --nThreads $NTHREADS -n -1 --era $ERA --eventcontent MINIAODSIM --geometry=$GEOM --filein $FILENAME --fileout file:step3_inMINIAODSIM.root $CUSTOM | tee step3.log 2>&1 #NanoAOD #On lxplus, this step takes about 1 minute / 1000 events diff --git a/Validation/RecoTau/Tools/CreateSqliteForCondDB_cfg.py b/Validation/RecoTau/Tools/CreateSqliteForCondDB_cfg.py index 199fc84526200..3bc01797775f9 100644 --- a/Validation/RecoTau/Tools/CreateSqliteForCondDB_cfg.py +++ b/Validation/RecoTau/Tools/CreateSqliteForCondDB_cfg.py @@ -68,10 +68,9 @@ ) process.load( "FWCore.MessageLogger.MessageLogger_cfi" ) -process.MessageLogger.cerr = cms.untracked.PSet( - placeholder = cms.untracked.bool( True ) -) +process.MessageLogger.cerr.enable = False process.MessageLogger.cout = cms.untracked.PSet( + enable = cms.untracked.bool(True), INFO = cms.untracked.PSet( reportEvery = cms.untracked.int32( 1 ) ) diff --git a/Validation/RecoTau/src/TauTagValidation.cc b/Validation/RecoTau/src/TauTagValidation.cc index da26841850687..39fd99c5bd60d 100644 --- a/Validation/RecoTau/src/TauTagValidation.cc +++ b/Validation/RecoTau/src/TauTagValidation.cc @@ -561,8 +561,8 @@ void TauTagValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& string prov_ID_label = currentDiscriminatorContainerIdName_[idx].second; bool found = false; if (prov_cfg_label == "rawValues" || prov_cfg_label == "workingPoints") { - const std::vector<string> psetsFromProvenance = - edm::parameterSet(*prov, iEvent.processHistory()).getParameter<std::vector<string>>(prov_cfg_label); + const std::vector<string> psetsFromProvenance = edm::parameterSet(prov->stable(), iEvent.processHistory()) + .getParameter<std::vector<string>>(prov_cfg_label); for (size_t i = 0; i < psetsFromProvenance.size(); ++i) { if (psetsFromProvenance[i] == prov_ID_label) { // using negative indices for raw values @@ -575,7 +575,7 @@ void TauTagValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& } } else if (prov_cfg_label == "IDdefinitions" || prov_cfg_label == "IDWPdefinitions") { const std::vector<edm::ParameterSet> psetsFromProvenance = - edm::parameterSet(*prov, iEvent.processHistory()) + edm::parameterSet(prov->stable(), iEvent.processHistory()) .getParameter<std::vector<edm::ParameterSet>>(prov_cfg_label); for (size_t i = 0; i < psetsFromProvenance.size(); ++i) { if (psetsFromProvenance[i].getParameter<string>("IDname") == prov_ID_label) { diff --git a/Validation/RecoTrack/interface/MTVHistoProducerAlgoForTracker.h b/Validation/RecoTrack/interface/MTVHistoProducerAlgoForTracker.h index 9fb9096a82f4a..99aace914f292 100644 --- a/Validation/RecoTrack/interface/MTVHistoProducerAlgoForTracker.h +++ b/Validation/RecoTrack/interface/MTVHistoProducerAlgoForTracker.h @@ -74,10 +74,6 @@ struct MTVHistoProducerAlgoForTrackerHistograms { std::vector<METype> h_reco_dzpvsigcut, h_assoc_dzpvsigcut, h_assoc2_dzpvsigcut, h_simul_dzpvsigcut, h_simul2_dzpvsigcut, h_pileup_dzpvsigcut; - std::vector<METype> h_reco_dzpvcut_pt, h_assoc_dzpvcut_pt, h_assoc2_dzpvcut_pt, h_simul_dzpvcut_pt, - h_simul2_dzpvcut_pt, h_pileup_dzpvcut_pt; - std::vector<METype> h_reco_dzpvsigcut_pt, h_assoc_dzpvsigcut_pt, h_assoc2_dzpvsigcut_pt, h_simul_dzpvsigcut_pt, - h_simul2_dzpvsigcut_pt, h_pileup_dzpvsigcut_pt; std::vector<METype> h_reco_simpvz, h_assoc_simpvz, h_assoc2_simpvz, h_simul_simpvz, h_looper_simpvz, h_pileup_simpvz; std::vector<METype> h_reco_seedingLayerSet, h_assoc2_seedingLayerSet, h_looper_seedingLayerSet, diff --git a/Validation/RecoTrack/plugins/JetCoreMCtruthSeedGenerator.cc b/Validation/RecoTrack/plugins/JetCoreMCtruthSeedGenerator.cc new file mode 100644 index 0000000000000..a0f366c42b493 --- /dev/null +++ b/Validation/RecoTrack/plugins/JetCoreMCtruthSeedGenerator.cc @@ -0,0 +1,528 @@ +// -*- C++ -*- +// +// Package: trackJet/JetCoreMCtruthSeedGenerator +// Class: JetCoreMCtruthSeedGenerator +// +/**\class JetCoreMCtruthSeedGenerator JetCoreMCtruthSeedGenerator.cc trackJet/JetCoreMCtruthSeedGenerator/plugins/JetCoreMCtruthSeedGenerator.cc + Description: [one line class summary] + Implementation: + [Notes on implementation] +*/ +// +// Original Author: Valerio Bertacchi +// Created: Mon, 18 Dec 2017 16:35:04 GMT +// +// + +// system include files + +#include <memory> + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h" +#include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h" +#include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" + +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/DetSetVector.h" +#include "DataFormats/Common/interface/DetSet.h" +#include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" +#include "DataFormats/JetReco/interface/Jet.h" +#include "DataFormats/SiPixelDigi/interface/PixelDigi.h" +#include "DataFormats/GeometryVector/interface/VectorUtil.h" +#include "DataFormats/Math/interface/Point3D.h" +#include "DataFormats/Math/interface/Vector3D.h" +#include "DataFormats/Candidate/interface/Candidate.h" +#include "SimDataFormats/TrackingHit/interface/PSimHit.h" + +#include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelClusterParameterEstimator.h" +#include "RecoLocalTracker/Records/interface/TkPixelCPERecord.h" + +#include "TrackingTools/GeomPropagators/interface/StraightLinePlaneCrossing.h" +#include "TrackingTools/GeomPropagators/interface/Propagator.h" +#include "TrackingTools/Records/interface/TrackingComponentsRecord.h" + +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" + +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" + +#include "SimDataFormats/Track/interface/SimTrack.h" +#include "SimDataFormats/Vertex/interface/SimVertex.h" + +#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" + +#include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h" +#include "SimDataFormats/TrackingHit/interface/PSimHit.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +// +// class declaration +// + +class JetCoreMCtruthSeedGenerator : public edm::one::EDProducer<edm::one::SharedResources> { +public: + explicit JetCoreMCtruthSeedGenerator(const edm::ParameterSet&); + ~JetCoreMCtruthSeedGenerator() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + double jetPt_; + double jetEta_; + double pitchX_ = 0.01; //100 um (pixel pitch in X) + double pitchY_ = 0.015; //150 um (pixel pitch in Y) + static constexpr int jetDimX = 30; //pixel dimension of NN window on layer2 + static constexpr int jetDimY = 30; //pixel dimension of NN window on layer2 + bool inclusiveConeSeed_ = + true; //true= fill tracks in a cone of deltaR_, false=fill tracks which have SimHit on globDet + +private: + void beginJob() override; + void produce(edm::Event&, const edm::EventSetup&) override; + void endJob() override; + + // ----------member data --------------------------- + std::string propagatorName_; + edm::ESHandle<MagneticField> magfield_; + edm::ESHandle<GlobalTrackingGeometry> geometry_; + edm::ESHandle<Propagator> propagator_; + + edm::EDGetTokenT<std::vector<reco::Vertex>> vertices_; + edm::EDGetTokenT<edmNew::DetSetVector<SiPixelCluster>> pixelClusters_; + edm::Handle<edmNew::DetSetVector<SiPixelCluster>> inputPixelClusters_; + edm::EDGetTokenT<edm::View<reco::Candidate>> cores_; + edm::EDGetTokenT<std::vector<SimTrack>> simtracksToken_; + edm::EDGetTokenT<std::vector<SimVertex>> simvertexToken_; + edm::EDGetTokenT<std::vector<PSimHit>> PSimHitToken_; + edm::Handle<std::vector<PSimHit>> simhits_; + + double ptMin_; + double deltaR_; + double chargeFracMin_; + double centralMIPCharge_; + std::string pixelCPE_; + + std::pair<bool, Basic3DVector<float>> findIntersection(const GlobalVector&, + const reco::Candidate::Point&, + const GeomDet*); + + const GeomDet* DetectorSelector(int, + const reco::Candidate&, + GlobalVector, + const reco::Vertex&, + const TrackerTopology* const, + const edmNew::DetSetVector<SiPixelCluster>&); + + std::vector<GlobalVector> splittedClusterDirections( + const reco::Candidate&, + const TrackerTopology* const, + const PixelClusterParameterEstimator*, + const reco::Vertex&, + int, + const edmNew::DetSetVector<SiPixelCluster>&); //if not working,: args=2 auto + + std::vector<PSimHit> coreHitsFilling(std::vector<PSimHit>, + const GeomDet*, + GlobalVector, + const reco::Vertex&); //if not working,: args=0 auto + + std::pair<std::vector<SimTrack>, std::vector<SimVertex>> coreTracksFilling( + std::vector<PSimHit>, + const std::vector<SimTrack>, + const std::vector<SimVertex>); //if not working,: args=1,2 auto + + std::vector<std::array<double, 5>> seedParFilling(std::pair<std::vector<SimTrack>, std::vector<SimVertex>>, + const GeomDet*, + const reco::Candidate&); + + std::pair<std::vector<SimTrack>, std::vector<SimVertex>> coreTracksFillingDeltaR( + const std::vector<SimTrack>, + const std::vector<SimVertex>, + const GeomDet*, + const reco::Candidate&, + const reco::Vertex&); //if not working,: args=0,1 auto +}; + +JetCoreMCtruthSeedGenerator::JetCoreMCtruthSeedGenerator(const edm::ParameterSet& iConfig) + : + + vertices_(consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("vertices"))), + pixelClusters_( + consumes<edmNew::DetSetVector<SiPixelCluster>>(iConfig.getParameter<edm::InputTag>("pixelClusters"))), + cores_(consumes<edm::View<reco::Candidate>>(iConfig.getParameter<edm::InputTag>("cores"))), + simtracksToken_(consumes<std::vector<SimTrack>>(iConfig.getParameter<edm::InputTag>("simTracks"))), + simvertexToken_(consumes<std::vector<SimVertex>>(iConfig.getParameter<edm::InputTag>("simVertex"))), + PSimHitToken_(consumes<std::vector<PSimHit>>(iConfig.getParameter<edm::InputTag>("simHit"))), + ptMin_(iConfig.getParameter<double>("ptMin")), + deltaR_(iConfig.getParameter<double>("deltaR")), + chargeFracMin_(iConfig.getParameter<double>("chargeFractionMin")), + centralMIPCharge_(iConfig.getParameter<double>("centralMIPCharge")), + pixelCPE_(iConfig.getParameter<std::string>("pixelCPE")) + +{ + produces<TrajectorySeedCollection>(); + produces<reco::TrackCollection>(); +} + +JetCoreMCtruthSeedGenerator::~JetCoreMCtruthSeedGenerator() {} + +void JetCoreMCtruthSeedGenerator::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + auto result = std::make_unique<TrajectorySeedCollection>(); + auto resultTracks = std::make_unique<reco::TrackCollection>(); + + using namespace edm; + using namespace reco; + + iSetup.get<IdealMagneticFieldRecord>().get(magfield_); + iSetup.get<GlobalTrackingGeometryRecord>().get(geometry_); + iSetup.get<TrackingComponentsRecord>().get("AnalyticalPropagator", propagator_); + + const auto& inputPixelClusters_ = iEvent.get(pixelClusters_); + const auto& simtracksVector = iEvent.get(simtracksToken_); + const auto& simvertexVector = iEvent.get(simvertexToken_); + const auto& simhits_ = iEvent.get(PSimHitToken_); + const auto& vertices = iEvent.get(vertices_); + const auto& cores = iEvent.get(cores_); + + edm::ESHandle<PixelClusterParameterEstimator> pixelCPEhandle; + const PixelClusterParameterEstimator* pixelCPE; + iSetup.get<TkPixelCPERecord>().get(pixelCPE_, pixelCPEhandle); + pixelCPE = pixelCPEhandle.product(); + + edm::ESHandle<TrackerTopology> tTopoHandle; + iSetup.get<TrackerTopologyRcd>().get(tTopoHandle); + const TrackerTopology* const tTopo = tTopoHandle.product(); + + auto output = std::make_unique<edmNew::DetSetVector<SiPixelCluster>>(); + + for (const auto& jet : cores) { //jet loop + + if (jet.pt() > ptMin_) { + std::set<long long int> ids; + const reco::Vertex& jetVertex = vertices[0]; + + std::vector<GlobalVector> splitClustDirSet = + splittedClusterDirections(jet, tTopo, pixelCPE, jetVertex, 1, inputPixelClusters_); + if (splitClustDirSet.empty()) { //if layer 1 is broken find direcitons on layer 2 + splitClustDirSet = splittedClusterDirections(jet, tTopo, pixelCPE, jetVertex, 2, inputPixelClusters_); + } + if (inclusiveConeSeed_) + splitClustDirSet.clear(); + splitClustDirSet.emplace_back(GlobalVector(jet.px(), jet.py(), jet.pz())); + + for (int cc = 0; cc < (int)splitClustDirSet.size(); cc++) { + GlobalVector bigClustDir = splitClustDirSet[cc]; + + jetEta_ = jet.eta(); + jetPt_ = jet.pt(); + + const auto& jetVert = jetVertex; //trackInfo filling + + std::vector<PSimHit> goodSimHit; + + const GeomDet* globDet = DetectorSelector( + 2, jet, bigClustDir, jetVertex, tTopo, inputPixelClusters_); //select detector mostly hitten by the jet + + if (globDet == nullptr) + continue; + + std::pair<std::vector<SimTrack>, std::vector<SimVertex>> goodSimTkVx; + + if (inclusiveConeSeed_) { + goodSimTkVx = JetCoreMCtruthSeedGenerator::coreTracksFillingDeltaR( + simtracksVector, simvertexVector, globDet, jet, jetVert); + } else { + std::vector<PSimHit> goodSimHit = + JetCoreMCtruthSeedGenerator::coreHitsFilling(simhits_, globDet, bigClustDir, jetVertex); + goodSimTkVx = JetCoreMCtruthSeedGenerator::coreTracksFilling(goodSimHit, simtracksVector, simvertexVector); + } + edm::LogInfo("PerfectSeeder") << "seed number in deltaR cone =" << goodSimTkVx.first.size(); + + std::vector<std::array<double, 5>> seedVector = + JetCoreMCtruthSeedGenerator::seedParFilling(goodSimTkVx, globDet, jet); + edm::LogInfo("PerfectSeeder") << "seedVector.size()=" << seedVector.size(); + + for (uint tk = 0; tk < seedVector.size(); tk++) { + for (int pp = 0; pp < 5; pp++) { + edm::LogInfo("PerfectSeeder") + << "seed " << tk << ", int par " << pp << "=" << seedVector[tk][pp] << std::endl; + } + LocalPoint localSeedPoint = LocalPoint(seedVector[tk][0], seedVector[tk][1], 0); + double track_theta = 2 * std::atan(std::exp(-seedVector[tk][2])); + double track_phi = seedVector[tk][3]; + double pt = 1. / seedVector[tk][4]; + + double normdirR = pt / sin(track_theta); + const GlobalVector globSeedDir( + GlobalVector::Polar(Geom::Theta<double>(track_theta), Geom::Phi<double>(track_phi), normdirR)); + LocalVector localSeedDir = globDet->surface().toLocal(globSeedDir); + + int64_t seedid = (int64_t(localSeedPoint.x() * 200.) << 0) + (int64_t(localSeedPoint.y() * 200.) << 16) + + (int64_t(seedVector[tk][2] * 400.) << 32) + (int64_t(track_phi * 400.) << 48); + if (ids.count(seedid) != 0) { + edm::LogInfo("PerfectSeeder") << "seed not removed with DeepCore cleaner"; + } + ids.insert(seedid); + + //Covariance matrix, currently the hadrcoded variances = NN residuals width (see documentation of DeepCore) + //in general: if are not compared with DeepCore but another algo-->to state-of-the art errors + //The "perfect seeds" has no intrinsic error, but the CTF needs errors to propagate... + float em[15] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // (see LocalTrajectoryError for details), order as follow: + em[0] = 0.15 * 0.15; // q/pt + em[2] = 0.5e-5; // dxdz + em[5] = 0.5e-5; // dydz + em[9] = 2e-5; // x + em[14] = 2e-5; // y + long int detId = globDet->geographicalId(); + LocalTrajectoryParameters localParam(localSeedPoint, localSeedDir, TrackCharge(1)); + result->emplace_back(TrajectorySeed(PTrajectoryStateOnDet(localParam, pt, em, detId, /*surfaceSide*/ 0), + edm::OwnVector<TrackingRecHit>(), + PropagationDirection::alongMomentum)); + + GlobalPoint globalSeedPoint = globDet->surface().toGlobal(localSeedPoint); + reco::Track::CovarianceMatrix mm; + resultTracks->emplace_back( + reco::Track(1, + 1, + reco::Track::Point(globalSeedPoint.x(), globalSeedPoint.y(), globalSeedPoint.z()), + reco::Track::Vector(globSeedDir.x(), globSeedDir.y(), globSeedDir.z()), + 1, + mm)); + edm::LogInfo("PerfectSeeder") << "seed " << tk << ", out, pt=" << pt << ", eta=" << globSeedDir.eta() + << ", phi=" << globSeedDir.phi() << std::endl; + } + + } //bigcluster + } //jet > pt + } //jet + iEvent.put(std::move(result)); + iEvent.put(std::move(resultTracks)); +} + +std::pair<bool, Basic3DVector<float>> JetCoreMCtruthSeedGenerator::findIntersection( + const GlobalVector& dir, const reco::Candidate::Point& vertex, const GeomDet* det) { + StraightLinePlaneCrossing vertexPlane(Basic3DVector<float>(vertex.x(), vertex.y(), vertex.z()), + Basic3DVector<float>(dir.x(), dir.y(), dir.z())); + + std::pair<bool, Basic3DVector<float>> pos = vertexPlane.position(det->specificSurface()); + + return pos; +} + +const GeomDet* JetCoreMCtruthSeedGenerator::DetectorSelector(int llay, + const reco::Candidate& jet, + GlobalVector jetDir, + const reco::Vertex& jetVertex, + const TrackerTopology* const tTopo, + const edmNew::DetSetVector<SiPixelCluster>& clusters) { + struct trkNumCompare { + bool operator()(std::pair<int, const GeomDet*> x, std::pair<int, const GeomDet*> y) const { + return x.first > y.first; + } + }; + std::set<std::pair<int, const GeomDet*>, trkNumCompare> track4detSet; + + double minDist = 0.0; + GeomDet* output = (GeomDet*)nullptr; + for (const auto& detset : clusters) { + auto aClusterID = detset.id(); + if (DetId(aClusterID).subdetId() != 1) + continue; + const GeomDet* det = geometry_->idToDet(aClusterID); + int lay = tTopo->layer(det->geographicalId()); + if (lay != llay) + continue; + std::pair<bool, Basic3DVector<float>> interPair = + findIntersection(jetDir, (reco::Candidate::Point)jetVertex.position(), det); + if (interPair.first == false) + continue; + Basic3DVector<float> inter = interPair.second; + auto localInter = det->specificSurface().toLocal((GlobalPoint)inter); + if ((minDist == 0.0 || std::abs(localInter.x()) < minDist) && std::abs(localInter.y()) < 3.35) { + minDist = std::abs(localInter.x()); + output = (GeomDet*)det; + } + } //detset + return output; +} + +std::vector<GlobalVector> JetCoreMCtruthSeedGenerator::splittedClusterDirections( + const reco::Candidate& jet, + const TrackerTopology* const tTopo, + const PixelClusterParameterEstimator* pixelCPE, + const reco::Vertex& jetVertex, + int layer, + const edmNew::DetSetVector<SiPixelCluster>& clusters) { + std::vector<GlobalVector> clustDirs; + for (const auto& detset_int : clusters) { + const GeomDet* det_int = geometry_->idToDet(detset_int.id()); + int lay = tTopo->layer(det_int->geographicalId()); + if (lay != layer) + continue; //NB: saved bigclusetr on all the layers!! + auto detUnit = *geometry_->idToDetUnit(detset_int.id()); + for (const auto& aCluster : detset_int) { + GlobalPoint clustPos = det_int->surface().toGlobal(pixelCPE->localParametersV(aCluster, detUnit)[0].first); + GlobalPoint vertexPos(jetVertex.position().x(), jetVertex.position().y(), jetVertex.position().z()); + GlobalVector clusterDir = clustPos - vertexPos; + GlobalVector jetDir(jet.px(), jet.py(), jet.pz()); + if (Geom::deltaR(jetDir, clusterDir) < deltaR_) { + clustDirs.emplace_back(clusterDir); + } + } + } + return clustDirs; +} + +std::vector<PSimHit> JetCoreMCtruthSeedGenerator::coreHitsFilling(std::vector<PSimHit> simhits, + const GeomDet* globDet, + GlobalVector bigClustDir, + const reco::Vertex& jetVertex) { + std::vector<PSimHit> goodSimHit; + for (const auto& sh : simhits) { + const GeomDet* det = geometry_->idToDet(sh.detUnitId()); + if (det != globDet) + continue; + std::pair<bool, Basic3DVector<float>> interPair = + findIntersection(bigClustDir, (reco::Candidate::Point)jetVertex.position(), det); + if (interPair.first == false) + continue; + Basic3DVector<float> inter = interPair.second; + auto localInter = det->specificSurface().toLocal((GlobalPoint)inter); + + if (std::abs((sh.localPosition()).x() - localInter.x()) / pitchX_ <= jetDimX / 2 && + std::abs((sh.localPosition()).y() - localInter.y()) / pitchY_ <= jetDimY / 2) { + goodSimHit.emplace_back(sh); + } + } + return goodSimHit; +} + +std::pair<std::vector<SimTrack>, std::vector<SimVertex>> JetCoreMCtruthSeedGenerator::coreTracksFilling( + std::vector<PSimHit> goodSimHit, + const std::vector<SimTrack> simtracksVector, + const std::vector<SimVertex> simvertexVector) { + std::vector<SimTrack> goodSimTrk; + std::vector<SimVertex> goodSimVtx; + + for (uint j = 0; j < simtracksVector.size(); j++) { + for (std::vector<PSimHit>::const_iterator it = goodSimHit.begin(); it != goodSimHit.end(); ++it) { + SimTrack st = simtracksVector[j]; + if (st.trackId() == (*it).trackId()) { + for (uint v = 0; v < simvertexVector.size(); v++) { + SimVertex sv = simvertexVector[v]; + if ((int)sv.vertexId() == (int)st.vertIndex()) { + goodSimTrk.emplace_back(st); + goodSimVtx.emplace_back(sv); + } + } + } + } + } + std::pair<std::vector<SimTrack>, std::vector<SimVertex>> output(goodSimTrk, goodSimVtx); + return output; +} + +std::pair<std::vector<SimTrack>, std::vector<SimVertex>> JetCoreMCtruthSeedGenerator::coreTracksFillingDeltaR( + const std::vector<SimTrack> simtracksVector, + const std::vector<SimVertex> simvertexVector, + const GeomDet* globDet, + const reco::Candidate& jet, + const reco::Vertex& jetVertex) { + std::vector<SimTrack> goodSimTrk; + std::vector<SimVertex> goodSimVtx; + + GlobalVector jetDir(jet.px(), jet.py(), jet.pz()); + + for (uint j = 0; j < simtracksVector.size(); j++) { + SimTrack st = simtracksVector[j]; + GlobalVector trkDir(st.momentum().Px(), st.momentum().Py(), st.momentum().Pz()); + if (st.charge() == 0) + continue; + if (Geom::deltaR(jetDir, trkDir) < deltaR_) { + for (uint v = 0; v < simvertexVector.size(); v++) { + SimVertex sv = simvertexVector[v]; + if ((int)sv.vertexId() == (int)st.vertIndex()) { + goodSimTrk.emplace_back(st); + goodSimVtx.emplace_back(sv); + } + } + } + } + std::pair<std::vector<SimTrack>, std::vector<SimVertex>> output(goodSimTrk, goodSimVtx); + return output; +} + +std::vector<std::array<double, 5>> JetCoreMCtruthSeedGenerator::seedParFilling( + std::pair<std::vector<SimTrack>, std::vector<SimVertex>> goodSimTkVx, + const GeomDet* globDet, + const reco::Candidate& jet) { + std::vector<std::array<double, 5>> output; + std::vector<SimTrack> goodSimTrk = goodSimTkVx.first; + std::vector<SimVertex> goodSimVtx = goodSimTkVx.second; + + edm::LogInfo("PerfectSeeder") << "goodSimTrk size" << goodSimTrk.size(); + for (uint j = 0; j < goodSimTrk.size(); j++) { + SimTrack st = goodSimTrk[j]; + SimVertex sv = goodSimVtx[j]; + GlobalVector trkMom(st.momentum().x(), st.momentum().y(), st.momentum().z()); + GlobalPoint trkPos(sv.position().x(), sv.position().y(), sv.position().z()); + edm::LogInfo("PerfectSeeder") << "seed " << j << ", very int pt" << st.momentum().Pt() + << ", eta=" << st.momentum().Eta() << ", phi=" << st.momentum().Phi() + << "------ internal point=" << trkMom.x() << "," << trkMom.y() << "," << trkMom.z() + << "," << trkPos.x() << "," << trkPos.y() << "," << trkPos.z() << std::endl; + + std::pair<bool, Basic3DVector<float>> trkInterPair; + trkInterPair = findIntersection(trkMom, (reco::Candidate::Point)trkPos, globDet); + if (trkInterPair.first == false) { + GlobalVector jetDir(jet.px(), jet.py(), jet.pz()); + continue; + } + Basic3DVector<float> trkInter = trkInterPair.second; + + auto localTrkInter = globDet->specificSurface().toLocal((GlobalPoint)trkInter); //trkInter->trkPos if par at vertex + std::array<double, 5> tkPar{ + {localTrkInter.x(), localTrkInter.y(), st.momentum().Eta(), st.momentum().Phi(), 1 / st.momentum().Pt()}}; + output.emplace_back(tkPar); + } + return output; +} + +// ------------ method called once each job just before starting event loop ------------ +void JetCoreMCtruthSeedGenerator::beginJob() {} + +// ------------ method called once each job just after ending the event loop ------------ +void JetCoreMCtruthSeedGenerator::endJob() {} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ +void JetCoreMCtruthSeedGenerator::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add<edm::InputTag>("vertices", edm::InputTag("offlinePrimaryVertices")); + desc.add<edm::InputTag>("pixelClusters", edm::InputTag("siPixelClustersPreSplitting")); + desc.add<edm::InputTag>("cores", edm::InputTag("jetsForCoreTracking")); + desc.add<double>("ptMin", 300); + desc.add<double>("deltaR", 0.3); + desc.add<double>("chargeFractionMin", 18000.0); + desc.add<edm::InputTag>("simTracks", edm::InputTag("g4SimHits")); + desc.add<edm::InputTag>("simVertex", edm::InputTag("g4SimHits")); + desc.add<edm::InputTag>("simHit", edm::InputTag("g4SimHits", "TrackerHitsPixelBarrelLowTof")); + desc.add<double>("centralMIPCharge", 2.); + desc.add<std::string>("pixelCPE", "PixelCPEGeneric"); + descriptions.add("JetCoreMCtruthSeedGenerator", desc); +} + +DEFINE_FWK_MODULE(JetCoreMCtruthSeedGenerator); diff --git a/Validation/RecoTrack/plugins/TrackFromSeedProducer.cc b/Validation/RecoTrack/plugins/TrackFromSeedProducer.cc index 091bca71dd0ec..e5627e2811db7 100644 --- a/Validation/RecoTrack/plugins/TrackFromSeedProducer.cc +++ b/Validation/RecoTrack/plugins/TrackFromSeedProducer.cc @@ -40,6 +40,8 @@ #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" #include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h" +#include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h" // // class declaration @@ -59,6 +61,7 @@ class TrackFromSeedProducer : public edm::global::EDProducer<> { edm::EDGetTokenT<edm::View<TrajectorySeed> > seedsToken; edm::EDGetTokenT<reco::BeamSpot> beamSpotToken; std::string tTRHBuilderName; + const edm::ESGetToken<GlobalTrackingGeometry, GlobalTrackingGeometryRecord> geoToken_; }; // @@ -72,7 +75,8 @@ class TrackFromSeedProducer : public edm::global::EDProducer<> { // // constructors and destructor // -TrackFromSeedProducer::TrackFromSeedProducer(const edm::ParameterSet& iConfig) { +TrackFromSeedProducer::TrackFromSeedProducer(const edm::ParameterSet& iConfig) + : geoToken_(esConsumes<GlobalTrackingGeometry, GlobalTrackingGeometryRecord>()) { //register your products produces<reco::TrackCollection>(); produces<TrackingRecHitCollection>(); @@ -127,14 +131,21 @@ void TrackFromSeedProducer::produce(edm::StreamID, edm::Event& iEvent, const edm iSetup.get<TrackerTopologyRcd>().get(httopo); const TrackerTopology& ttopo = *httopo; + const GlobalTrackingGeometry* const geometry_ = &iSetup.getData(geoToken_); + // create tracks from seeds int nfailed = 0; for (size_t iSeed = 0; iSeed < seeds.size(); ++iSeed) { auto const& seed = seeds[iSeed]; // try to create a track - TransientTrackingRecHit::RecHitPointer lastRecHit = tTRHBuilder->build(&*(seed.recHits().end() - 1)); - TrajectoryStateOnSurface state = - trajectoryStateTransform::transientState(seed.startingState(), lastRecHit->surface(), theMF.product()); + TrajectoryStateOnSurface state; + if (seed.nHits() == 0) { //this is for deepCore seeds only + const Surface* deepCore_sruface = &geometry_->idToDet(seed.startingState().detId())->specificSurface(); + state = trajectoryStateTransform::transientState(seed.startingState(), deepCore_sruface, theMF.product()); + } else { + TransientTrackingRecHit::RecHitPointer lastRecHit = tTRHBuilder->build(&*(seed.recHits().end() - 1)); + state = trajectoryStateTransform::transientState(seed.startingState(), lastRecHit->surface(), theMF.product()); + } TrajectoryStateClosestToBeamLine tsAtClosestApproachSeed = tscblBuilder(*state.freeState(), *beamSpot); //as in TrackProducerAlgorithm if (tsAtClosestApproachSeed.isValid()) { diff --git a/Validation/RecoTrack/python/MTVHistoProducerAlgoForTrackerBlock_cfi.py b/Validation/RecoTrack/python/MTVHistoProducerAlgoForTrackerBlock_cfi.py index 9ca553b9aafd3..7ce1eb5fad5c7 100644 --- a/Validation/RecoTrack/python/MTVHistoProducerAlgoForTrackerBlock_cfi.py +++ b/Validation/RecoTrack/python/MTVHistoProducerAlgoForTrackerBlock_cfi.py @@ -83,7 +83,7 @@ # dR_jet mindrj = cms.double(0.001), maxdrj = cms.double(0.5), - nintdrj = cms.int32(250), + nintdrj = cms.int32(100), # # chi2/ndof minChi2 = cms.double(0), diff --git a/Validation/RecoTrack/python/PostProcessorTracker_cfi.py b/Validation/RecoTrack/python/PostProcessorTracker_cfi.py index cec8d3cd3cff9..df73b303d5061 100644 --- a/Validation/RecoTrack/python/PostProcessorTracker_cfi.py +++ b/Validation/RecoTrack/python/PostProcessorTracker_cfi.py @@ -138,21 +138,11 @@ def _addNoFlow(module): "fakerate_vs_dzpvcut 'Fake rate vs. dz(PV)' num_assoc(recoToSim)_dzpvcut num_reco_dzpvcut fake", "pileuprate_dzpvcut 'Pileup rate vs. dz(PV)' num_pileup_dzpvcut num_reco_dzpvcut", - "effic_vs_dzpvcut_pt 'Fraction of true p_{T} carried by recoed TPs from PV vs. dz(PV)' num_assoc(simToReco)_dzpvcut_pt num_simul_dzpvcut_pt", - "effic_vs_dzpvcut2_pt 'Fraction of true p_{T} carried by recoed TPs from PV (tracking eff factorized out) vs. dz(PV)' num_assoc(simToReco)_dzpvcut_pt num_simul2_dzpvcut_pt", - "fakerate_vs_dzpvcut_pt 'Fraction of fake p_{T} carried by tracks from PV vs. dz(PV)' num_assoc(recoToSim)_dzpvcut_pt num_reco_dzpvcut_pt fake", - "pileuprate_dzpvcut_pt 'Fraction of pileup p_{T} carried by tracks from PV vs. dz(PV)' num_pileup_dzpvcut_pt num_reco_dzpvcut_pt", - "effic_vs_dzpvsigcut 'Efficiency vs. dz(PV)/dzError' num_assoc(simToReco)_dzpvsigcut num_simul_dzpvsigcut", "effic_vs_dzpvsigcut2 'Efficiency (tracking eff factorized out) vs. dz(PV)/dzError' num_assoc(simToReco)_dzpvsigcut num_simul2_dzpvsigcut", "fakerate_vs_dzpvsigcut 'Fake rate vs. dz(PV)/dzError' num_assoc(recoToSim)_dzpvsigcut num_reco_dzpvsigcut fake", "pileuprate_dzpvsigcut 'Pileup rate vs. dz(PV)/dzError' num_pileup_dzpvsigcut num_reco_dzpvsigcut", - "effic_vs_dzpvsigcut_pt 'Fraction of true p_{T} carried by recoed TPs from PV vs. dz(PV)/dzError' num_assoc(simToReco)_dzpvsigcut_pt num_simul_dzpvsigcut_pt", - "effic_vs_dzpvsigcut2_pt 'Fraction of true p_{T} carried by recoed TPs from PV (tracking eff factorized out) vs. dz(PV)/dzError' num_assoc(simToReco)_dzpvsigcut_pt num_simul2_dzpvsigcut_pt", - "fakerate_vs_dzpvsigcut_pt 'Fraction of fake p_{T} carried by tracks from PV vs. dz(PV)/dzError' num_assoc(recoToSim)_dzpvsigcut_pt num_reco_dzpvsigcut_pt fake", - "pileuprate_dzpvsigcut_pt 'Fraction of pileup p_{T} carried by tracks from PV vs. dz(PV)/dzError' num_pileup_dzpvsigcut_pt num_reco_dzpvsigcut_pt", - "effic_vs_simpvz 'Efficiency vs. sim PV z' num_assoc(simToReco)_simpvz num_simul_simpvz", "fakerate_vs_simpvz 'Fake rate vs. sim PV z' num_assoc(recoToSim)_simpvz num_reco_simpvz fake", "duplicatesRate_simpvz 'Duplicates Rate vs sim PV z' num_duplicate_simpvz num_reco_simpvz", @@ -210,24 +200,12 @@ def _addNoFlow(module): "num_simul_dzpvcut", "num_simul2_dzpvcut", "num_pileup_dzpvcut", - "num_reco_dzpvcut_pt", - "num_assoc(recoToSim)_dzpvcut_pt", - "num_assoc(simToReco)_dzpvcut_pt", - "num_simul_dzpvcut_pt", - "num_simul2_dzpvcut_pt", - "num_pileup_dzpvcut_pt", "num_reco_dzpvsigcut", "num_assoc(recoToSim)_dzpvsigcut", "num_assoc(simToReco)_dzpvsigcut", "num_simul_dzpvsigcut", "num_simul2_dzpvsigcut", "num_pileup_dzpvsigcut", - "num_reco_dzpvsigcut_pt", - "num_assoc(recoToSim)_dzpvsigcut_pt", - "num_assoc(simToReco)_dzpvsigcut_pt", - "num_simul_dzpvsigcut_pt", - "num_simul2_dzpvsigcut_pt", - "num_pileup_dzpvsigcut_pt", "num_reco_mva1cut descending", "num_reco_mva2cut descending", "num_reco_mva2cut_hp descending", @@ -317,6 +295,18 @@ def _addNoFlow(module): postProcessorTrackSummary ) +from Configuration.ProcessModifiers.seedingDeepCore_cff import seedingDeepCore +postProcessorTrackDeepCore = postProcessorTrack.clone() +postProcessorTrackDeepCore.subDirs.extend(["Tracking/JetCore/*"]) +seedingDeepCore.toReplaceWith(postProcessorTrack,postProcessorTrackDeepCore) +postProcessorTrackSummaryDeepCore = postProcessorTrackSummary.clone() +postProcessorTrackSummaryDeepCore.subDirs.extend(["Tracking/JetCore/*"]) +seedingDeepCore.toReplaceWith(postProcessorTrackSummary,postProcessorTrackSummaryDeepCore) +postProcessorTrack2DDeepCore = postProcessorTrack2D.clone() +postProcessorTrack2DDeepCore.subDirs.extend(["Tracking/JetCore/*"]) +seedingDeepCore.toReplaceWith(postProcessorTrack2D,postProcessorTrack2DDeepCore) + + fastSim.toModify(postProcessorTrack, subDirs = [e for e in _defaultSubdirs if e not in ["Tracking/TrackGsf/*","Tracking/TrackConversion/*"]]) fastSim.toModify(postProcessorTrackSummary, subDirs = [e for e in _defaultSubdirsSummary if e not in ["Tracking/TrackGsf","Tracking/TrackConversion"]]) @@ -338,6 +328,8 @@ def _addNoFlow(module): postProcessorTrackSummaryStandalone ) + + postProcessorTrackPhase2 = postProcessorTrack.clone() postProcessorTrackPhase2.subDirs.extend(["Tracking/TrackTPEtaGreater2p7/*"]) postProcessorTrackSummaryPhase2 = postProcessorTrackSummary.clone() @@ -347,6 +339,16 @@ def _addNoFlow(module): phase2_tracker.toReplaceWith(postProcessorTrack,postProcessorTrackPhase2) phase2_tracker.toReplaceWith(postProcessorTrackSummary,postProcessorTrackSummaryPhase2) + +from Configuration.ProcessModifiers.displacedTrackValidation_cff import displacedTrackValidation +postProcessorTrackDisplaced = postProcessorTrack.clone() +postProcessorTrackDisplaced.subDirs.extend(["Tracking/TrackDisplaced/*"]) +postProcessorTrackSummaryDisplaced = postProcessorTrackSummary.clone() +postProcessorTrackSummaryDisplaced.subDirs.extend(["Tracking/TrackDisplaced/*"]) +displacedTrackValidation.toReplaceWith(postProcessorTrack,postProcessorTrackDisplaced) +displacedTrackValidation.toReplaceWith(postProcessorTrackSummary,postProcessorTrackSummaryDisplaced) + + postProcessorTrackTrackingOnly = postProcessorTrack.clone() postProcessorTrackTrackingOnly.subDirs.extend(["Tracking/TrackBHadron/*","Tracking/TrackSeeding/*", "Tracking/PixelTrack/*"]) postProcessorTrackSummaryTrackingOnly = postProcessorTrackSummary.clone() diff --git a/Validation/RecoTrack/python/TrackValidation_cff.py b/Validation/RecoTrack/python/TrackValidation_cff.py index a90f3eac8a605..9882bf2a9ca7f 100644 --- a/Validation/RecoTrack/python/TrackValidation_cff.py +++ b/Validation/RecoTrack/python/TrackValidation_cff.py @@ -281,7 +281,7 @@ def _getMVASelectors(postfix): jets = "ak4PFJets" ) from JetMETCorrections.Configuration.JetCorrectors_cff import * -import CommonTools.RecoAlgos.jetTracksAssociationToTrackRefs_cfi as jetTracksAssociationToTrackRefs_cfi +import JetMETCorrections.JetCorrector.jetTracksAssociationToTrackRefs_cfi as jetTracksAssociationToTrackRefs_cfi cutsRecoTracksAK4PFJets = jetTracksAssociationToTrackRefs_cfi.jetTracksAssociationToTrackRefs.clone( association = "ak4JetTracksAssociatorExplicitAll", jets = "ak4PFJets", @@ -353,14 +353,9 @@ def _getMVASelectors(postfix): ptMin = 0, ) -#ByChi2 association (for jetCore usage, not used by default) -MTVTrackAssociationByChi2 = trackingParticleRecoTrackAsssociation.clone( - associator = cms.InputTag('trackAssociatorByChi2') -) - # Select jets for JetCore tracking -highPtJets = cms.EDFilter("CandPtrSelector", src = cms.InputTag("ak4CaloJets"), cut = cms.string("pt()>1000")) -highPtJetsForTrk = highPtJetsForTrk = highPtJets.clone(src = "ak4CaloJetsForTrk") +highPtJets = cms.EDFilter("CandPtrSelector", src = cms.InputTag("ak4CaloJets"), cut = cms.string("pt()>1000")) +highPtJetsForTrk = highPtJets.clone(src = "ak4CaloJetsForTrk") # Select B-hadron TPs trackingParticlesBHadron = _trackingParticleBHadronRefSelector.clone() @@ -369,7 +364,6 @@ def _getMVASelectors(postfix): trackValidator = Validation.RecoTrack.MultiTrackValidator_cfi.multiTrackValidator.clone( useLogPt = cms.untracked.bool(True), dodEdxPlots = True, - # associators=cms.untracked.VInputTag('MTVTrackAssociationByChi2'), #uncomment for byChi2 assoc. for jetcore studies (1/5) doPVAssociationPlots = True #,minpT = cms.double(-1) #,maxpT = cms.double(3) @@ -540,8 +534,6 @@ def _getMVASelectors(postfix): dirName = "Tracking/TrackBuilding/", doMVAPlots = True, doResolutionPlotsForLabels = ['jetCoreRegionalStepTracks'], - # associators = ["trackAssociatorByChi2"], #uncomment for byChi2 assoc. for jetcore studies (2/5) - # UseAssociators = True, #uncomment for byChi2 assoc. for jetcore studies (3/5) ) trackValidatorBuildingPreSplitting = trackValidatorBuilding.clone( associators = ["quickTrackAssociatorByHitsPreSplitting"], @@ -606,7 +598,25 @@ def _uniqueFirstLayers(layerList): for _eraName, _postfix, _era in _relevantEras: _setForEra(trackValidatorGsfTracks.histoProducerAlgoBlock, _eraName, _era, seedingLayerSets=trackValidator.histoProducerAlgoBlock.seedingLayerSets.value()+locals()["_seedingLayerSetsForElectrons"+_postfix]) - +# For jetCore tracks +trackValidatorJetCore = trackValidator.clone(#equivalent to trackBuilding case + dirName = "Tracking/JetCore/", + useLogPt = cms.untracked.bool(True), + dodEdxPlots = False, + associators= ["trackAssociatorByChi2"],#cms.untracked.VInputTag('MTVTrackAssociationByChi2'), + UseAssociators = True, + doPVAssociationPlots = True, +) +for _eraName, _postfix, _era in _relevantEras: + if 'jetCoreRegionalStep' in _cfg.iterationAlgos(_postfix) : + _setForEra(trackValidatorJetCore, _eraName, _era, + label = ["generalTracks", "jetCoreRegionalStepTracks", + "cutsRecoTracksJetCoreRegionalStepByOriginalAlgo","cutsRecoTracksJetCoreRegionalStepByOriginalAlgoHp", + "cutsRecoTracksJetCoreRegionalStep", "cutsRecoTracksJetCoreRegionalStepHp"], + doResolutionPlotsForLabels =["generalTracks", "jetCoreRegionalStepTracks", + "cutsRecoTracksJetCoreRegionalStepByOriginalAlgo","cutsRecoTracksJetCoreRegionalStepByOriginalAlgoHp", + "cutsRecoTracksJetCoreRegionalStep", "cutsRecoTracksJetCoreRegionalStepHp"], + ) # for B-hadrons trackValidatorBHadron = trackValidator.clone( @@ -623,6 +633,32 @@ def _uniqueFirstLayers(layerList): ) +# for displaced tracks +trackValidatorDisplaced = trackValidator.clone( + dirName = "Tracking/TrackDisplaced/", + label = [x for x in trackValidator.label.value() if ("Pt09" not in x) and ("BtvLike" not in x) and ("AK4PFJets" not in x)], + ptMaxTP = 1e5, + dodEdxPlots = False, + invertRapidityCutTP = False, + histoProducerAlgoBlock = dict( + TpSelectorForEfficiencyVsPt = dict(ptMin=0.005, signalOnly=True, tip=1e5, lip=1e5), # enough to set min pT here + TpSelectorForEfficiencyVsEta = dict(ptMin=0.005, signalOnly=True, tip=1e5, lip=1e5), # enough to set min pT here + TpSelectorForEfficiencyVsPhi = dict(ptMin=0.005, signalOnly=True, tip=1e5, lip=1e5), + TpSelectorForEfficiencyVsVTXR = dict(ptMin=0.005, signalOnly=True, tip=1e5, lip=1e5), + TpSelectorForEfficiencyVsVTXZ = dict(ptMin=0.005, signalOnly=True, tip=1e5, lip=1e5), + generalTpSelector = dict(ptMin=0.005, signalOnly=True, tip=1e5, lip=1e5), + minDxy = -60, + maxDxy = 60, + nintDxy = 120, + minDz = -30, + maxDz = 30, + nintDz = 60, + ), + signalOnlyTP = True, + lipTP = 1e5, + tipTP = 1e5, +) + # the track selectors tracksValidationSelectors = cms.Task( tracksValidationSelectorsByAlgo, @@ -658,8 +694,7 @@ def _uniqueFirstLayers(layerList): tracksValidationTruth = cms.Task( tpClusterProducer, tpClusterProducerPreSplitting, - # trackAssociatorByChi2, #uncomment for byChi2 assoc. for jetcore studies (4/5) - # MTVTrackAssociationByChi2, #uncomment for byChi2 assoc. for jetcore studies (5/5) + trackAssociatorByChi2, quickTrackAssociatorByHits, quickTrackAssociatorByHitsPreSplitting, trackingParticleRecoTrackAsssociation, @@ -699,17 +734,23 @@ def _uniqueFirstLayers(layerList): tracksPreValidation ) +from Configuration.ProcessModifiers.seedingDeepCore_cff import seedingDeepCore +seedingDeepCore.toReplaceWith(tracksValidation, cms.Sequence(tracksValidation.copy()+trackValidatorJetCore)) + +from Configuration.ProcessModifiers.displacedTrackValidation_cff import displacedTrackValidation +displacedTrackValidation.toReplaceWith(tracksValidation, cms.Sequence(tracksValidation.copy()+trackValidatorDisplaced)) + from Configuration.Eras.Modifier_phase2_tracker_cff import phase2_tracker -#tracksValidationPhase2 = cms.Sequence(tracksValidation+trackValidatorTPEtaGreater2p7) # it does not work tracksPreValidationPhase2 = tracksPreValidation.copy() tracksPreValidationPhase2.add(trackingParticlesEtaGreater2p7) phase2_tracker.toReplaceWith(tracksPreValidation, tracksPreValidationPhase2) -tracksValidationPhase2 = tracksValidation.copy() +tracksValidationPhase2 = tracksValidation.copyAndExclude([ + trackValidatorJetCore +]) tracksValidationPhase2+=trackValidatorTPEtaGreater2p7 phase2_tracker.toReplaceWith(tracksValidation, tracksValidationPhase2) - fastSim.toReplaceWith(tracksValidation, tracksValidation.copyAndExclude([ trackValidatorBuildingPreSplitting, trackValidatorConversion, @@ -849,6 +890,21 @@ def _uniqueFirstLayers(layerList): doSummaryPlots = False, ) + +trackValidatorJetCoreSeedingTrackingOnly = trackValidatorSeedingTrackingOnly.clone( + dirName = "Tracking/JetCore/TrackSeeding/", + associators = ["trackAssociatorByChi2"], + UseAssociators = True, + doSeedPlots = True, +) + +for _eraName, _postfix, _era in _relevantEras: + if 'jetCoreRegionalStep' in _cfg.iterationAlgos(_postfix) : + _setForEra(trackValidatorJetCoreSeedingTrackingOnly, _eraName, _era, + label = [ "seedTracksjetCoreRegionalStepSeeds",], + doResolutionPlotsForLabels = [ "seedTracksjetCoreRegionalStepSeeds",] + ) + for _eraName, _postfix, _era in _relevantErasAndFastSim: _setForEra(trackValidatorSeedingTrackingOnly, _eraName, _era, label = locals()["_seedSelectors"+_postfix]) for _eraName, _postfix, _era in _relevantEras: @@ -881,13 +937,26 @@ def _uniqueFirstLayers(layerList): trackValidatorsTrackingOnly.replace(trackValidatorConversionStandalone, trackValidatorConversionTrackingOnly) trackValidatorsTrackingOnly.remove(trackValidatorGsfTracksStandalone) trackValidatorsTrackingOnly.replace(trackValidatorBHadronStandalone, trackValidatorBHadronTrackingOnly) + +seedingDeepCore.toReplaceWith(trackValidatorsTrackingOnly, cms.Sequence( + trackValidatorsTrackingOnly.copy()+ + trackValidatorJetCore+ + trackValidatorJetCoreSeedingTrackingOnly + ) + ) +phase2_tracker.toReplaceWith(trackValidatorsTrackingOnly, trackValidatorsTrackingOnly.copyAndExclude([ #must be done for each era which does not have jetcore in the iteration + trackValidatorJetCore, + trackValidatorJetCoreSeedingTrackingOnly +])) + +displacedTrackValidation.toReplaceWith(trackValidatorsTrackingOnly, cms.Sequence(trackValidatorsTrackingOnly.copy()+trackValidatorDisplaced)) + fastSim.toReplaceWith(trackValidatorsTrackingOnly, trackValidatorsTrackingOnly.copyAndExclude([ trackValidatorBuildingPreSplitting, trackValidatorSeedingPreSplittingTrackingOnly, trackValidatorConversionTrackingOnly, trackValidatorBHadronTrackingOnly ])) - tracksValidationTrackingOnly = cms.Sequence( trackValidatorsTrackingOnly, tracksPreValidationTrackingOnly, diff --git a/Validation/RecoTrack/python/plotting/html.py b/Validation/RecoTrack/python/plotting/html.py index a76601813fc3f..a9fed5cc12975 100644 --- a/Validation/RecoTrack/python/plotting/html.py +++ b/Validation/RecoTrack/python/plotting/html.py @@ -52,6 +52,7 @@ def _lowerFirst(s): _conversionName = "Tracks for conversions" _gsfName = "Electron GSF tracks" _bhadronName = "All tracks (B-hadron TPs)" +_displacedName = "All tracks (TPs with no tip or lip cuts)" def _toHP(s): return "High purity "+_lowerFirst(s) def _toOriAlgo(s): @@ -113,6 +114,12 @@ def _ptCut(s): ("bhadron_ByAlgoMask", _toAlgoMask(_bhadronName)), ("bhadron_highPurityByAlgoMask", _toAlgoMask(_allToHP(_bhadronName))), ("bhadron_btvLike", _allToBTV(_bhadronName)), + ("displaced_", _displacedName), + ("displaced_highPurity", _allToHP(_displacedName)), + ("displaced_ByOriginalAlgo", _toOriAlgo(_displacedName)), + ("displaced_highPurityByOriginalAlgo", _toOriAlgo(_allToHP(_displacedName))), + ("displaced_ByAlgoMask", _toAlgoMask(_displacedName)), + ("displaced_highPurityByAlgoMask", _toAlgoMask(_allToHP(_displacedName))), ]) _trackAlgoName = { @@ -142,6 +149,7 @@ def _ptCut(s): 'mixedTripletStep', 'pixelLessStep', 'tobTecStep', + 'displacedGeneralStep', 'jetCoreRegionalStep', 'muonSeededStepInOut', 'muonSeededStepOutIn', @@ -198,6 +206,8 @@ def _ptCut(s): ("gsf", _gsfName), ("bhadron", _bhadronName), ("bhadron_highPurity", _allToHP(_bhadronName)), + ("displaced", _displacedName), + ("displaced_highPurity", _allToHP(_displacedName)), # Pixel tracks ("pixel", "Pixel tracks"), # These are for vertices diff --git a/Validation/RecoTrack/python/plotting/ntupleEnum.py b/Validation/RecoTrack/python/plotting/ntupleEnum.py index 94282f3ed26fb..526f513e0755d 100644 --- a/Validation/RecoTrack/python/plotting/ntupleEnum.py +++ b/Validation/RecoTrack/python/plotting/ntupleEnum.py @@ -42,7 +42,8 @@ def toString(self, val): standAloneMuon = 18, globalMuon = 19, cosmicStandAloneMuon = 20, cosmicGlobalMuon = 21, # Phase1 highPtTripletStep = 22, lowPtQuadStep = 23, detachedQuadStep = 24, - reservedForUpgrades1 = 25, reservedForUpgrades2 = 26, + displacedGeneralStep = 25, + reservedForUpgrades2 = 26, bTagGhostTracks = 27, beamhalo = 28, gsf = 29, diff --git a/Validation/RecoTrack/python/plotting/plotting.py b/Validation/RecoTrack/python/plotting/plotting.py index 1939e251959fc..d241f19c5a57e 100644 --- a/Validation/RecoTrack/python/plotting/plotting.py +++ b/Validation/RecoTrack/python/plotting/plotting.py @@ -310,14 +310,16 @@ def yvalues(self, bin): return (self._gr.GetY()[bin], self._gr.GetErrorY(bin), self._gr.GetErrorY(bin)) def wrap(o): - if isinstance(o, ROOT.TH1): + if isinstance(o, ROOT.TH1) and not isinstance(o, ROOT.TH2): return WrapTH1(o, ratioUncertainty) elif isinstance(o, ROOT.TGraph): return WrapTGraph(o, ratioUncertainty) elif isinstance(o, ROOT.TGraph2D): return WrapTGraph2D(o, ratioUncertainty) - wrappers = [wrap(h) for h in histos] + wrappers = [wrap(h) for h in histos if wrap(h) is not None] + if len(wrappers) < 1: + return [] ref = wrappers[0] wrappers_bins = [] @@ -1859,6 +1861,9 @@ def isRatio(self, ratio): return ratio return ratio and self._ratio + def setName(self, name): + self._name = name + def getName(self): if self._outname is not None: return self._outname @@ -2202,7 +2207,7 @@ def _styleHist(h, msty, col): addl.Draw("same") # Draw ratios - if ratio and len(histos) > 0: + if ratio and len(self._ratios) > 0: frame._padRatio.cd() firstRatio = self._ratios[0].getRatio() if self._ratioUncertainty and firstRatio is not None: @@ -2411,16 +2416,6 @@ def _drawSeparate(self, legendLabels, prefix, saveFormat, ratio, directory): width = 500 height = 500 - canvas = _createCanvas(self._name+"Single", width, height) - canvasRatio = _createCanvas(self._name+"SingleRatio", width, int(height*self._ratioFactor)) - - # from TDRStyle - for c in [canvas, canvasRatio]: - c.SetTopMargin(0.05) - c.SetBottomMargin(0.13) - c.SetLeftMargin(0.16) - c.SetRightMargin(0.05) - lx1def = 0.6 lx2def = 0.95 ly1def = 0.85 @@ -2432,6 +2427,16 @@ def _drawSeparate(self, legendLabels, prefix, saveFormat, ratio, directory): if plot.isEmpty(): continue + canvas = _createCanvas(self._name+"Single", width, height) + canvasRatio = _createCanvas(self._name+"SingleRatio", width, int(height*self._ratioFactor)) + + # from TDRStyle + for c in [canvas, canvasRatio]: + c.SetTopMargin(0.05) + c.SetBottomMargin(0.13) + c.SetLeftMargin(0.16) + c.SetRightMargin(0.05) + ratioForThisPlot = plot.isRatio(ratio) c = canvas if ratioForThisPlot: @@ -2531,15 +2536,15 @@ def append(self, *args, **kwargs): def create(self, tdirectoryNEvents, requireAllHistograms=False): self._plots = [] - for element in tdirectoryNEvents: + for i, element in enumerate(tdirectoryNEvents): pl = self._plot.clone() pl.create([element], requireAllHistograms) + pl.setName(pl.getName()+"_"+str(i)) self._plots.append(pl) def draw(self, *args, **kwargs): kargs = copy.copy(kwargs) kargs["ratio"] = False - kargs["separate"] = False return super(PlotOnSideGroup, self).draw(*args, **kargs) class PlotFolder: @@ -2912,6 +2917,8 @@ def readDirs(self, files): subf.append(key.GetName()) subFolders.append(subf) break + else: + print("Did not find directory '%s' from file %s" % (pd, tfile.GetName())) if not isOpenFile: tfile.Close() diff --git a/Validation/RecoTrack/python/plotting/trackingPlots.py b/Validation/RecoTrack/python/plotting/trackingPlots.py index 374c83cf50ac8..7f5d84738ee81 100644 --- a/Validation/RecoTrack/python/plotting/trackingPlots.py +++ b/Validation/RecoTrack/python/plotting/trackingPlots.py @@ -297,16 +297,6 @@ def _makeMVAPlots(num, hp=False): xtitle="Efficiency vs. cut on dz(PV)/dzError", **_common), Plot(ROC("effic_vs_fakepileup2_dzpvsigcut", "effic_vs_dzpvsigcut", FakeDuplicate("fakepileup_vs_dzpvsigcut", assoc="num_assoc(recoToSim)_dzpvsigcut", reco="num_reco_dzpvsigcut", dup="num_pileup_dzpvsigcut"), zaxis=True), xtitle="Efficiency", ztitle="Cut on dz(PV)/dzError", **_common2), - ## - Plot(ROC("effic_vs_fakepileup_dzpvcut_pt", "effic_vs_dzpvcut_pt", FakeDuplicate("fakepileup_vs_dzpvcut_pt", assoc="num_assoc(recoToSim)_dzpvcut_pt", reco="num_reco_dzpvcut_pt", dup="num_pileup_dzpvcut_pt")), - xtitle="Efficiency (p_{T} weighted) vs. cut on dz(PV)", **_common), - Plot(ROC("effic_vs_fakepileup2_dzpvcut_pt", "effic_vs_dzpvcut_pt", FakeDuplicate("fakepileup_vs_dzpvcut_pt", assoc="num_assoc(recoToSim)_dzpvcut_pt", reco="num_reco_dzpvcut_pt", dup="num_pileup_dzpvcut_pt"), zaxis=True), - xtitle="Efficiency (p_{T} weighted)", ztitle="Cut on dz(PV)", **_common2), - # - Plot(ROC("effic_vs_fakepileup_dzpvsigcut_pt", "effic_vs_dzpvsigcut_pt", FakeDuplicate("fakepileup_vs_dzpvsigcut_pt", assoc="num_assoc(recoToSim)_dzpvsigcut_pt", reco="num_reco_dzpvsigcut_pt", dup="num_pileup_dzpvsigcut_pt")), - xtitle="Efficiency (p_{T} weighted) vs. cut on dz(PV)/dzError", **_common), - Plot(ROC("effic_vs_fakepileup2_dzpvsigcut_pt", "effic_vs_dzpvsigcut_pt", FakeDuplicate("fakepileup_vs_dzpvsigcut_pt", assoc="num_assoc(recoToSim)_dzpvsigcut_pt", reco="num_reco_dzpvsigcut_pt", dup="num_pileup_dzpvsigcut_pt"), zaxis=True), - xtitle="Efficiency (p_{T} weighted)", ztitle="Cut on dz(PV)/dzError", **_common2), ], onlyForPileup=True, legendDy=_legendDy_4rows ) @@ -323,19 +313,6 @@ def _makeMVAPlots(num, hp=False): ], onlyForPileup=True, legendDy=_legendDy_4rows ) -_pvassociation3 = PlotGroup("pvassociation3", [ - Plot("effic_vs_dzpvcut_pt", xtitle="Cut on dz(PV) (cm)", ytitle="Efficiency (p_{T} weighted)", ymax=_maxEff), - Plot("effic_vs_dzpvcut2_pt", xtitle="Cut on dz(PV) (cm)", ytitle="Efficiency (p_{T} weighted, excl. trk eff)", ymax=_maxEff), - Plot("fakerate_vs_dzpvcut_pt", xtitle="Cut on dz(PV) (cm)", ytitle="Fake rate (p_{T} weighted)", ymax=_maxFake), - Plot("pileuprate_dzpvcut_pt", xtitle="Cut on dz(PV) (cm)", ytitle="Pileup rate (p_{T} weighted)", ymax=_maxFake), - # - Plot("effic_vs_dzpvsigcut_pt", xtitle="Cut on dz(PV)/dzError", ytitle="Efficiency (p_{T} weighted)", ymax=_maxEff), - Plot("effic_vs_dzpvsigcut2_pt", xtitle="Cut on dz(PV)/dzError", ytitle="Efficiency (p_{T} weighted, excl. trk eff)", ymax=_maxEff), - Plot("fakerate_vs_dzpvsigcut_pt", xtitle="Cut on dz(PV)/dzError", ytitle="Fake rate (p_{T} weighted)", ymax=_maxFake), - Plot("pileuprate_dzpvsigcut_pt", xtitle="Cut on dz(PV)/dzError", ytitle="Pileup rate (p_{T} weighted)", ymax=_maxFake), -], onlyForPileup=True, - legendDy=_legendDy_4rows -) # These don't exist in FastSim @@ -547,6 +524,7 @@ def _makeMVAPlots(num, hp=False): 'tobTecStepPair', # seeds 'tobTecStepTripl', # seeds 'tobTecStep', + 'displacedGeneralStep', 'jetCoreRegionalStep', 'muonSeededStepInOut', 'muonSeededStepOutIn', @@ -1223,7 +1201,6 @@ def _trackingFolders(lastDirName="Track"): _dupandfakeSeedingTable, _pvassociation1, _pvassociation2, - _pvassociation3, _dedx, # _chargemisid, _hitsAndPt, @@ -1375,6 +1352,7 @@ def _appendTrackingPlots(lastDirName, name, algoPlots, onlyForPileup=False, only _appendTrackingPlots("TrackConversion", "conversion", _simBasedPlots+_recoBasedPlots, onlyForConversion=True, rawSummary=True, highPuritySummary=False) _appendTrackingPlots("TrackGsf", "gsf", _simBasedPlots+_recoBasedPlots, onlyForElectron=True, rawSummary=True, highPuritySummary=False) _appendTrackingPlots("TrackBHadron", "bhadron", _simBasedPlots+_recoBasedPlots, onlyForBHadron=True) +_appendTrackingPlots("TrackDisplaced", "displaced", _simBasedPlots+_recoBasedPlots) # Pixel tracks _common = dict(purpose=PlotPurpose.Pixel, page="pixel") plotter.append("pixelTrack", _trackingFolders("PixelTrack"), TrackingPlotFolder(*(_simBasedPlots+_recoBasedPlots), **_common)) @@ -1566,6 +1544,16 @@ def modules(self): "tobTecStepClassifier2", "tobTecStep", "tobTecStepSelector"]), + Iteration("displacedGeneralStep", + seeding=["displacedGeneralStepSeedLayers", + "displacedGeneralStepTrackingRegions", + "displacedGeneralStepHitDoublets", + "displacedGeneralStepHitTriplets", + "displacedGeneralStepSeeds"], + selection=["displacedGeneralStepClassifier1", + "displacedGeneralStepClassifier2", + "displacedGeneralStep", + "displacedGeneralStepSelector"]), Iteration("jetCoreRegionalStep", clusterMasking=[], other=["jetsForCoreTracking", diff --git a/Validation/RecoTrack/scripts/makeTrackValidationPlots.py b/Validation/RecoTrack/scripts/makeTrackValidationPlots.py index ac458352c3dd0..52d29cafc3648 100755 --- a/Validation/RecoTrack/scripts/makeTrackValidationPlots.py +++ b/Validation/RecoTrack/scripts/makeTrackValidationPlots.py @@ -51,6 +51,7 @@ def main(opts): "seeding": limitProcessing, "building": limitProcessing, "bhadron": limitProcessing, + "displaced": limitProcessing, } } if opts.limit_relval: @@ -64,6 +65,7 @@ def main(opts): "tpEtaGreater2p7": limitRelVal, "seeding": ignore, "bhadron": limitRelVal, + "displaced": limitRelVal, } trk = [trackingPlots.plotter] diff --git a/Validation/RecoTrack/src/MTVHistoProducerAlgoForTracker.cc b/Validation/RecoTrack/src/MTVHistoProducerAlgoForTracker.cc index 8664c23ed5abb..e3370837a2a4c 100644 --- a/Validation/RecoTrack/src/MTVHistoProducerAlgoForTracker.cc +++ b/Validation/RecoTrack/src/MTVHistoProducerAlgoForTracker.cc @@ -584,23 +584,6 @@ void MTVHistoProducerAlgoForTracker::bookSimTrackPVAssociationHistos(DQMStore::I histograms.h_simul2_dzpvcut.push_back(ibook.book1D( "num_simul2_dzpvcut", "N of simulated tracks (associated to any track) from sim PV", nintDzpvCum, 0, maxDzpvCum)); - histograms.h_assoc_dzpvcut_pt.push_back(ibook.book1D("num_assoc(simToReco)_dzpvcut_pt", - "#sump_{T} of associated tracks (simToReco) vs dz(PV)", - nintDzpvCum, - 0, - maxDzpvCum)); - histograms.h_simul_dzpvcut_pt.push_back( - ibook.book1D("num_simul_dzpvcut_pt", "#sump_{T} of simulated tracks from sim PV", nintDzpvCum, 0, maxDzpvCum)); - histograms.h_simul2_dzpvcut_pt.push_back( - ibook.book1D("num_simul2_dzpvcut_pt", - "#sump_{T} of simulated tracks (associated to any track) from sim PV", - nintDzpvCum, - 0, - maxDzpvCum)); - histograms.h_assoc_dzpvcut_pt.back()->enableSumw2(); - histograms.h_simul_dzpvcut_pt.back()->enableSumw2(); - histograms.h_simul2_dzpvcut_pt.back()->enableSumw2(); - histograms.h_assoc_dzpvsigcut.push_back(ibook.book1D("num_assoc(simToReco)_dzpvsigcut", "N of associated tracks (simToReco) vs dz(PV)/dzError", nintDzpvsigCum, @@ -614,24 +597,6 @@ void MTVHistoProducerAlgoForTracker::bookSimTrackPVAssociationHistos(DQMStore::I nintDzpvsigCum, 0, maxDzpvsigCum)); - - histograms.h_assoc_dzpvsigcut_pt.push_back( - ibook.book1D("num_assoc(simToReco)_dzpvsigcut_pt", - "#sump_{T} of associated tracks (simToReco) vs dz(PV)/dzError", - nintDzpvsigCum, - 0, - maxDzpvsigCum)); - histograms.h_simul_dzpvsigcut_pt.push_back(ibook.book1D( - "num_simul_dzpvsigcut_pt", "#sump_{T} of simulated tracks from sim PV/dzError", nintDzpvsigCum, 0, maxDzpvsigCum)); - histograms.h_simul2_dzpvsigcut_pt.push_back( - ibook.book1D("num_simul2_dzpvsigcut_pt", - "#sump_{T} of simulated tracks (associated to any track) from sim PV/dzError", - nintDzpvsigCum, - 0, - maxDzpvsigCum)); - histograms.h_assoc_dzpvsigcut_pt.back()->enableSumw2(); - histograms.h_simul_dzpvsigcut_pt.back()->enableSumw2(); - histograms.h_simul2_dzpvsigcut_pt.back()->enableSumw2(); } void MTVHistoProducerAlgoForTracker::bookRecoHistos(DQMStore::IBooker& ibook, @@ -1533,22 +1498,6 @@ void MTVHistoProducerAlgoForTracker::bookRecoPVAssociationHistos(DQMStore::IBook histograms.h_pileup_dzpvcut.push_back(ibook.book1D( "num_pileup_dzpvcut", "N of associated (recoToSim) pileup tracks vs dz(PV)", nintDzpvCum, 0, maxDzpvCum)); - histograms.h_reco_dzpvcut_pt.push_back( - ibook.book1D("num_reco_dzpvcut_pt", "#sump_{T} of reco track vs dz(PV)", nintDzpvCum, 0, maxDzpvCum)); - histograms.h_assoc2_dzpvcut_pt.push_back(ibook.book1D("num_assoc(recoToSim)_dzpvcut_pt", - "#sump_{T} of associated (recoToSim) tracks vs dz(PV)", - nintDzpvCum, - 0, - maxDzpvCum)); - histograms.h_pileup_dzpvcut_pt.push_back(ibook.book1D("num_pileup_dzpvcut_pt", - "#sump_{T} of associated (recoToSim) pileup tracks vs dz(PV)", - nintDzpvCum, - 0, - maxDzpvCum)); - histograms.h_reco_dzpvcut_pt.back()->enableSumw2(); - histograms.h_assoc2_dzpvcut_pt.back()->enableSumw2(); - histograms.h_pileup_dzpvcut_pt.back()->enableSumw2(); - histograms.h_reco_dzpvsigcut.push_back( ibook.book1D("num_reco_dzpvsigcut", "N of reco track vs dz(PV)/dzError", nintDzpvsigCum, 0, maxDzpvsigCum)); histograms.h_assoc2_dzpvsigcut.push_back(ibook.book1D("num_assoc(recoToSim)_dzpvsigcut", @@ -1561,24 +1510,6 @@ void MTVHistoProducerAlgoForTracker::bookRecoPVAssociationHistos(DQMStore::IBook nintDzpvsigCum, 0, maxDzpvsigCum)); - - histograms.h_reco_dzpvsigcut_pt.push_back(ibook.book1D( - "num_reco_dzpvsigcut_pt", "#sump_{T} of reco track vs dz(PV)/dzError", nintDzpvsigCum, 0, maxDzpvsigCum)); - histograms.h_assoc2_dzpvsigcut_pt.push_back( - ibook.book1D("num_assoc(recoToSim)_dzpvsigcut_pt", - "#sump_{T} of associated (recoToSim) tracks vs dz(PV)/dzError", - nintDzpvsigCum, - 0, - maxDzpvsigCum)); - histograms.h_pileup_dzpvsigcut_pt.push_back( - ibook.book1D("num_pileup_dzpvsigcut_pt", - "#sump_{T} of associated (recoToSim) pileup tracks vs dz(PV)/dzError", - nintDzpvsigCum, - 0, - maxDzpvsigCum)); - histograms.h_reco_dzpvsigcut_pt.back()->enableSumw2(); - histograms.h_assoc2_dzpvsigcut_pt.back()->enableSumw2(); - histograms.h_pileup_dzpvsigcut_pt.back()->enableSumw2(); } void MTVHistoProducerAlgoForTracker::bookRecodEdxHistos(DQMStore::IBooker& ibook, Histograms& histograms) { @@ -1941,8 +1872,6 @@ void MTVHistoProducerAlgoForTracker::fill_recoAssociated_simTrack_histos( histograms.h_simul_dzpvcut[count]->Fill(0); histograms.h_simul_dzpvsigcut[count]->Fill(0); - histograms.h_simul_dzpvcut_pt[count]->Fill(0, pt); - histograms.h_simul_dzpvsigcut_pt[count]->Fill(0, pt); if (isMatched) { histograms.h_assocdzpv[count]->Fill(dzPVSim); @@ -1950,14 +1879,10 @@ void MTVHistoProducerAlgoForTracker::fill_recoAssociated_simTrack_histos( histograms.h_simul2_dzpvcut[count]->Fill(0); histograms.h_simul2_dzpvsigcut[count]->Fill(0); - histograms.h_simul2_dzpvcut_pt[count]->Fill(0, pt); - histograms.h_simul2_dzpvsigcut_pt[count]->Fill(0, pt); const double dzpvcut = std::abs(track->dz(*pvPosition)); const double dzpvsigcut = dzpvcut / track->dzError(); histograms.h_assoc_dzpvcut[count]->Fill(dzpvcut); histograms.h_assoc_dzpvsigcut[count]->Fill(dzpvsigcut); - histograms.h_assoc_dzpvcut_pt[count]->Fill(dzpvcut, pt); - histograms.h_assoc_dzpvsigcut_pt[count]->Fill(dzpvsigcut, pt); } } if (simPVPosition) { @@ -2068,8 +1993,6 @@ void MTVHistoProducerAlgoForTracker::fill_generic_recoTrack_histos(const Histogr histograms.h_reco_dzpvcut[count]->Fill(std::abs(dzpv)); histograms.h_reco_dzpvsigcut[count]->Fill(std::abs(dzpvsig)); - histograms.h_reco_dzpvcut_pt[count]->Fill(std::abs(dzpv), pt); - histograms.h_reco_dzpvsigcut_pt[count]->Fill(std::abs(dzpvsig), pt); } if (simPVPosition) { histograms.h_reco_simpvz[count]->Fill(simpvz); @@ -2139,8 +2062,6 @@ void MTVHistoProducerAlgoForTracker::fill_generic_recoTrack_histos(const Histogr histograms.h_assoc2_dzpvcut[count]->Fill(std::abs(dzpv)); histograms.h_assoc2_dzpvsigcut[count]->Fill(std::abs(dzpvsig)); - histograms.h_assoc2_dzpvcut_pt[count]->Fill(std::abs(dzpv), pt); - histograms.h_assoc2_dzpvsigcut_pt[count]->Fill(std::abs(dzpvsig), pt); } if (simPVPosition) { histograms.h_assoc2_simpvz[count]->Fill(simpvz); @@ -2264,8 +2185,6 @@ void MTVHistoProducerAlgoForTracker::fill_generic_recoTrack_histos(const Histogr histograms.h_pileup_dzpvcut[count]->Fill(std::abs(dzpv)); histograms.h_pileup_dzpvsigcut[count]->Fill(std::abs(dzpvsig)); - histograms.h_pileup_dzpvcut_pt[count]->Fill(std::abs(dzpv), pt); - histograms.h_pileup_dzpvsigcut_pt[count]->Fill(std::abs(dzpvsig), pt); } if (simPVPosition) { histograms.h_pileup_simpvz[count]->Fill(simpvz); diff --git a/Validation/RecoTrack/test/MultiTrackValidatorGenPs_cfg.py b/Validation/RecoTrack/test/MultiTrackValidatorGenPs_cfg.py index 2d9cce9ee9752..0aa7be87d38b1 100644 --- a/Validation/RecoTrack/test/MultiTrackValidatorGenPs_cfg.py +++ b/Validation/RecoTrack/test/MultiTrackValidatorGenPs_cfg.py @@ -4,7 +4,7 @@ # message logger process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.categories.extend(["TwoTrackMinimumDistanceLineLine"]) + process.MessageLogger.TwoTrackMinimumDistanceLineLine = cms.untracked.PSet( reportEvery = cms.untracked.int32(1), limit = cms.untracked.int32( 10 ) diff --git a/Validation/RecoTrack/test/trackingCompare.py b/Validation/RecoTrack/test/trackingCompare.py index 483f572c44e38..7cc1e283db121 100755 --- a/Validation/RecoTrack/test/trackingCompare.py +++ b/Validation/RecoTrack/test/trackingCompare.py @@ -75,6 +75,7 @@ def __call__(self, algo, quality): "tpEtaGreater2p7": limit, # Efficiency for TrackingParticles with |eta| > 2.7 (phase 2) "allTPEffic": ignore, # Efficiency with all TrackingParticles "bhadron": limit, # Efficiency with B-hadron TrackingParticles + "displaced": limit, # Efficiency for TrackingParticles with no tip or lip cuts "fromPV": limit, # Tracks from PV, signal TrackingParticles for efficiency and fakes "fromPVAllTP": limit, # Tracks from PV, all TrackingParticles for fakes "building": ignore, # Built tracks (as opposed to selected tracks in above) diff --git a/Validation/RecoTrack/test/trackingPerformanceValidation.py b/Validation/RecoTrack/test/trackingPerformanceValidation.py index bfcf1db00fca5..afc3e34858050 100755 --- a/Validation/RecoTrack/test/trackingPerformanceValidation.py +++ b/Validation/RecoTrack/test/trackingPerformanceValidation.py @@ -183,7 +183,7 @@ def _isPhase1(release): doPhase2PU = True ### Track algorithm name and quality. Can be a list. -Algos= ['ootb', 'initialStep', 'lowPtTripletStep','pixelPairStep','detachedTripletStep','mixedTripletStep','pixelLessStep','tobTecStep','jetCoreRegionalStep','muonSeededStepInOut','muonSeededStepOutIn', +Algos= ['ootb', 'initialStep', 'lowPtTripletStep','pixelPairStep','detachedTripletStep','mixedTripletStep','pixelLessStep','tobTecStep','displacedGeneralStep','jetCoreRegionalStep','muonSeededStepInOut','muonSeededStepOutIn', 'ak4PFJets','btvLike' ] #Algos= ['ootb'] @@ -207,6 +207,7 @@ def ignore(a, q): "": limitRelVal, "tpPtLess09": limitRelVal, "tpEtaGreater2p7": limitRelVal, + "displaced": limitRelVal, "allTPEffic": limitRelVal, "fromPV": limitRelVal, "fromPVAllTP": limitRelVal, diff --git a/Validation/RecoVertex/test/allanalyzer_example_cfg.py b/Validation/RecoVertex/test/allanalyzer_example_cfg.py index 9da97bb19ecd9..e8e37e91af25a 100644 --- a/Validation/RecoVertex/test/allanalyzer_example_cfg.py +++ b/Validation/RecoVertex/test/allanalyzer_example_cfg.py @@ -24,7 +24,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -33,7 +33,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/Validation/RecoVertex/test/bspvanalyzer_cfg.py b/Validation/RecoVertex/test/bspvanalyzer_cfg.py index 0a07d6a3f997b..360930cd3a917 100644 --- a/Validation/RecoVertex/test/bspvanalyzer_cfg.py +++ b/Validation/RecoVertex/test/bspvanalyzer_cfg.py @@ -24,7 +24,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -33,7 +33,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/Validation/RecoVertex/test/mcverticesanalyzer_cfg.py b/Validation/RecoVertex/test/mcverticesanalyzer_cfg.py index da00deac211fe..33b934a5ae4de 100644 --- a/Validation/RecoVertex/test/mcverticesanalyzer_cfg.py +++ b/Validation/RecoVertex/test/mcverticesanalyzer_cfg.py @@ -24,7 +24,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -33,7 +33,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/Validation/RecoVertex/test/mcverticessimpleanalyzer_cfg.py b/Validation/RecoVertex/test/mcverticessimpleanalyzer_cfg.py index ebc3677931021..f7892793564d5 100644 --- a/Validation/RecoVertex/test/mcverticessimpleanalyzer_cfg.py +++ b/Validation/RecoVertex/test/mcverticessimpleanalyzer_cfg.py @@ -24,7 +24,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -33,7 +33,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/Validation/RecoVertex/test/mcverticestriggerbiasanalyzer_cfg.py b/Validation/RecoVertex/test/mcverticestriggerbiasanalyzer_cfg.py index c42532511844a..505ddf21cc41f 100644 --- a/Validation/RecoVertex/test/mcverticestriggerbiasanalyzer_cfg.py +++ b/Validation/RecoVertex/test/mcverticestriggerbiasanalyzer_cfg.py @@ -50,7 +50,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") -process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.enable = cms.untracked.bool(True) process.MessageLogger.cout.threshold = cms.untracked.string("INFO") process.MessageLogger.cout.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) @@ -59,7 +59,7 @@ reportEvery = cms.untracked.int32(10000) ) -process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.enable = cms.untracked.bool(True) process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") process.MessageLogger.cerr.default = cms.untracked.PSet( limit = cms.untracked.int32(10000000) diff --git a/Validation/SiOuterTrackerV/plugins/OuterTrackerMCHarvester.cc b/Validation/SiOuterTrackerV/plugins/OuterTrackerMCHarvester.cc index d9f8718881d0e..9d71bcb4944ca 100644 --- a/Validation/SiOuterTrackerV/plugins/OuterTrackerMCHarvester.cc +++ b/Validation/SiOuterTrackerV/plugins/OuterTrackerMCHarvester.cc @@ -9,26 +9,6 @@ OuterTrackerMCHarvester::~OuterTrackerMCHarvester() {} void OuterTrackerMCHarvester::dqmEndJob(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter) { using namespace edm; - // Global variables - TF1 *fit = new TF1("fit", "gaus", -0.01, 0.01); - TF1 *fit2 = new TF1("fit2", "gaus", -0.1, 0.1); - TF1 *fit3 = new TF1("fit3", "gaus", -1, 1); - - std::vector<double> sigma_pt1; - std::vector<double> error_pt1; - std::vector<double> sigma_pt2; - std::vector<double> error_pt2; - std::vector<double> sigma_pt3; - std::vector<double> error_pt3; - std::vector<double> sigma_eta; - std::vector<double> error_eta; - std::vector<double> sigma_phi; - std::vector<double> error_phi; - std::vector<double> sigma_VtxZ; - std::vector<double> error_VtxZ; - std::vector<double> sigma_d0; - std::vector<double> error_d0; - float eta_bins[] = {0.0, 0.7, 1.0, 1.2, 1.6, 2.0, 2.4}; int eta_binnum = 6; @@ -294,42 +274,10 @@ void OuterTrackerMCHarvester::dqmEndJob(DQMStore::IBooker &ibooker, DQMStore::IG resPt1->SetMinimum(0.0); resPt1->SetStats(false); - //int testNumEntries1 = resPt1a->GetEntries(); - if (resPt1a->GetEntries() > 0 && resPt2a->GetEntries() > 0 && resPt3a->GetEntries() > 0 && - resPt4a->GetEntries() > 0 && resPt5a->GetEntries() > 0 && resPt6a->GetEntries() > 0) { - //if (testNumEntries1 > 0) { - // Fit the histograms with a gaussian curve - take sigma and the error - // from the fit - resPt1a->Fit(fit2, "Q", "R"); - resPt2a->Fit(fit2, "Q", "R"); - resPt3a->Fit(fit2, "Q", "R"); - resPt4a->Fit(fit2, "Q", "R"); - resPt5a->Fit(fit2, "Q", "R"); - resPt6a->Fit(fit2, "Q", "R"); - sigma_pt1.push_back(resPt1a->GetFunction("fit2")->GetParameter(2)); - sigma_pt1.push_back(resPt2a->GetFunction("fit2")->GetParameter(2)); - sigma_pt1.push_back(resPt3a->GetFunction("fit2")->GetParameter(2)); - sigma_pt1.push_back(resPt4a->GetFunction("fit2")->GetParameter(2)); - sigma_pt1.push_back(resPt5a->GetFunction("fit2")->GetParameter(2)); - sigma_pt1.push_back(resPt6a->GetFunction("fit2")->GetParameter(2)); - error_pt1.push_back(resPt1a->GetFunction("fit2")->GetParError(2)); - error_pt1.push_back(resPt2a->GetFunction("fit2")->GetParError(2)); - error_pt1.push_back(resPt3a->GetFunction("fit2")->GetParError(2)); - error_pt1.push_back(resPt4a->GetFunction("fit2")->GetParError(2)); - error_pt1.push_back(resPt5a->GetFunction("fit2")->GetParError(2)); - error_pt1.push_back(resPt6a->GetFunction("fit2")->GetParError(2)); - - // Fill the new histogram to create resolution plot - for (int i = 0; i < 6; i++) { - resPt1->SetBinContent(i + 1, sigma_pt1[i]); - resPt1->SetBinError(i + 1, error_pt1[i]); - } - } else { - edm::LogWarning("DataNotFound") << "L1 tracks not found for pT resolution (2-3)!\n"; - for (int i = 0; i < 6; i++) { - resPt1->SetBinContent(i + 1, -1); - resPt1->SetBinError(i + 1, -1); - } + std::vector<TH1F *> vResPt1 = {resPt1a, resPt2a, resPt3a, resPt4a, resPt5a, resPt6a}; + for (int i = 0; i < 6; i++) { + resPt1->SetBinContent(i + 1, vResPt1[i]->GetStdDev()); + resPt1->SetBinError(i + 1, vResPt1[i]->GetStdDevError()); } } // if ME found else { @@ -358,42 +306,10 @@ void OuterTrackerMCHarvester::dqmEndJob(DQMStore::IBooker &ibooker, DQMStore::IG resPt2->SetMinimum(0.0); resPt2->SetStats(false); - //int testNumEntries2 = resPt1b->GetEntries(); - // if (testNumEntries2 > 0) { - if (resPt1b->GetEntries() > 0 && resPt2b->GetEntries() > 0 && resPt3b->GetEntries() > 0 && - resPt4b->GetEntries() > 0 && resPt5b->GetEntries() > 0 && resPt6b->GetEntries() > 0) { - // Fit the histograms with a gaussian curve - take sigma and the error - // from the fit - resPt1b->Fit(fit2, "Q", "R"); - resPt2b->Fit(fit2, "Q", "R"); - resPt3b->Fit(fit2, "Q", "R"); - resPt4b->Fit(fit2, "Q", "R"); - resPt5b->Fit(fit2, "Q", "R"); - resPt6b->Fit(fit2, "Q", "R"); - sigma_pt2.push_back(resPt1b->GetFunction("fit2")->GetParameter(2)); - sigma_pt2.push_back(resPt2b->GetFunction("fit2")->GetParameter(2)); - sigma_pt2.push_back(resPt3b->GetFunction("fit2")->GetParameter(2)); - sigma_pt2.push_back(resPt4b->GetFunction("fit2")->GetParameter(2)); - sigma_pt2.push_back(resPt5b->GetFunction("fit2")->GetParameter(2)); - sigma_pt2.push_back(resPt6b->GetFunction("fit2")->GetParameter(2)); - error_pt2.push_back(resPt1b->GetFunction("fit2")->GetParError(2)); - error_pt2.push_back(resPt2b->GetFunction("fit2")->GetParError(2)); - error_pt2.push_back(resPt3b->GetFunction("fit2")->GetParError(2)); - error_pt2.push_back(resPt4b->GetFunction("fit2")->GetParError(2)); - error_pt2.push_back(resPt5b->GetFunction("fit2")->GetParError(2)); - error_pt2.push_back(resPt6b->GetFunction("fit2")->GetParError(2)); - - // Fill the new histogram to create resolution plot - for (int i = 0; i < 6; i++) { - resPt2->SetBinContent(i + 1, sigma_pt2[i]); - resPt2->SetBinError(i + 1, error_pt2[i]); - } - } else { - edm::LogWarning("DataNotFound") << "L1 tracks not found for pT resolution (3-8)!\n"; - for (int i = 0; i < 6; i++) { - resPt2->SetBinContent(i + 1, -1); - resPt2->SetBinError(i + 1, -1); - } + std::vector<TH1F *> vResPt2 = {resPt1b, resPt2b, resPt3b, resPt4b, resPt5b, resPt6b}; + for (int i = 0; i < 6; i++) { + resPt2->SetBinContent(i + 1, vResPt2[i]->GetStdDev()); + resPt2->SetBinError(i + 1, vResPt2[i]->GetStdDevError()); } } // if ME found else { @@ -422,42 +338,10 @@ void OuterTrackerMCHarvester::dqmEndJob(DQMStore::IBooker &ibooker, DQMStore::IG resPt3->SetMinimum(0.0); resPt3->SetStats(false); - //int testNumEntries3 = resPt1c->GetEntries(); - if (resPt1c->GetEntries() > 0 && resPt2c->GetEntries() > 0 && resPt3c->GetEntries() > 0 && - resPt4c->GetEntries() > 0 && resPt5c->GetEntries() > 0 && resPt6c->GetEntries() > 0) { - // if (testNumEntries3 > 0) { - // Fit the histograms with a gaussian curve - take sigma and the error - // from the fit - resPt1c->Fit(fit2, "Q", "R"); - resPt2c->Fit(fit2, "Q", "R"); - resPt3c->Fit(fit2, "Q", "R"); - resPt4c->Fit(fit2, "Q", "R"); - resPt5c->Fit(fit2, "Q", "R"); - resPt6c->Fit(fit2, "Q", "R"); - sigma_pt3.push_back(resPt1c->GetFunction("fit2")->GetParameter(2)); - sigma_pt3.push_back(resPt2c->GetFunction("fit2")->GetParameter(2)); - sigma_pt3.push_back(resPt3c->GetFunction("fit2")->GetParameter(2)); - sigma_pt3.push_back(resPt4c->GetFunction("fit2")->GetParameter(2)); - sigma_pt3.push_back(resPt5c->GetFunction("fit2")->GetParameter(2)); - sigma_pt3.push_back(resPt6c->GetFunction("fit2")->GetParameter(2)); - error_pt3.push_back(resPt1c->GetFunction("fit2")->GetParError(2)); - error_pt3.push_back(resPt2c->GetFunction("fit2")->GetParError(2)); - error_pt3.push_back(resPt3c->GetFunction("fit2")->GetParError(2)); - error_pt3.push_back(resPt4c->GetFunction("fit2")->GetParError(2)); - error_pt3.push_back(resPt5c->GetFunction("fit2")->GetParError(2)); - error_pt3.push_back(resPt6c->GetFunction("fit2")->GetParError(2)); - - // Fill the new histogram to create resolution plot - for (int i = 0; i < 6; i++) { - resPt3->SetBinContent(i + 1, sigma_pt3[i]); - resPt3->SetBinError(i + 1, error_pt3[i]); - } - } else { - edm::LogWarning("DataNotFound") << "L1 tracks not found for pT resolution (8-inf)!\n"; - for (int i = 0; i < 6; i++) { - resPt3->SetBinContent(i + 1, -1); - resPt3->SetBinError(i + 1, -1); - } + std::vector<TH1F *> vResPt3 = {resPt1c, resPt2c, resPt3c, resPt4c, resPt5c, resPt6c}; + for (int i = 0; i < 6; i++) { + resPt3->SetBinContent(i + 1, vResPt3[i]->GetStdDev()); + resPt3->SetBinError(i + 1, vResPt3[i]->GetStdDevError()); } } // if ME found else { @@ -485,41 +369,10 @@ void OuterTrackerMCHarvester::dqmEndJob(DQMStore::IBooker &ibooker, DQMStore::IG resEta->SetMinimum(0.0); resEta->SetStats(false); - //int testNumEntries4 = resEta1->GetEntries(); - if (resEta1->GetEntries() > 0 && resEta2->GetEntries() > 0 && resEta3->GetEntries() > 0 && - resEta4->GetEntries() > 0 && resEta5->GetEntries() > 0 && resEta6->GetEntries() > 0) { - // Fit the histograms with a gaussian curve - take sigma and the error - // from the fit - resEta1->Fit(fit, "Q", "R"); - resEta2->Fit(fit, "Q", "R"); - resEta3->Fit(fit, "Q", "R"); - resEta4->Fit(fit, "Q", "R"); - resEta5->Fit(fit, "Q", "R"); - resEta6->Fit(fit, "Q", "R"); - sigma_eta.push_back(resEta1->GetFunction("fit")->GetParameter(2)); - sigma_eta.push_back(resEta2->GetFunction("fit")->GetParameter(2)); - sigma_eta.push_back(resEta3->GetFunction("fit")->GetParameter(2)); - sigma_eta.push_back(resEta4->GetFunction("fit")->GetParameter(2)); - sigma_eta.push_back(resEta5->GetFunction("fit")->GetParameter(2)); - sigma_eta.push_back(resEta6->GetFunction("fit")->GetParameter(2)); - error_eta.push_back(resEta1->GetFunction("fit")->GetParError(2)); - error_eta.push_back(resEta2->GetFunction("fit")->GetParError(2)); - error_eta.push_back(resEta3->GetFunction("fit")->GetParError(2)); - error_eta.push_back(resEta4->GetFunction("fit")->GetParError(2)); - error_eta.push_back(resEta5->GetFunction("fit")->GetParError(2)); - error_eta.push_back(resEta6->GetFunction("fit")->GetParError(2)); - - // Fill the new histogram to create resolution plot - for (int i = 0; i < 6; i++) { - resEta->SetBinContent(i + 1, sigma_eta[i]); - resEta->SetBinError(i + 1, error_eta[i]); - } - } else { - edm::LogWarning("DataNotFound") << "L1 tracks not found for eta resolution!\n"; - for (int i = 0; i < 6; i++) { - resEta->SetBinContent(i + 1, -1); - resEta->SetBinError(i + 1, -1); - } + std::vector<TH1F *> vResEta = {resEta1, resEta2, resEta3, resEta4, resEta5, resEta6}; + for (int i = 0; i < 6; i++) { + resEta->SetBinContent(i + 1, vResEta[i]->GetStdDev()); + resEta->SetBinError(i + 1, vResEta[i]->GetStdDevError()); } } // if ME found else { @@ -547,41 +400,10 @@ void OuterTrackerMCHarvester::dqmEndJob(DQMStore::IBooker &ibooker, DQMStore::IG resPhi->SetMinimum(0.0); resPhi->SetStats(false); - //int testNumEntries5 = resPhi1->GetEntries(); - if (resPhi1->GetEntries() > 0 && resPhi2->GetEntries() > 0 && resPhi3->GetEntries() > 0 && - resPhi4->GetEntries() > 0 && resPhi5->GetEntries() > 0 && resPhi6->GetEntries() > 0) { - // Fit the histograms with a gaussian curve - take sigma and the error - // from the fit - resPhi1->Fit(fit, "Q", "R"); - resPhi2->Fit(fit, "Q", "R"); - resPhi3->Fit(fit, "Q", "R"); - resPhi4->Fit(fit, "Q", "R"); - resPhi5->Fit(fit, "Q", "R"); - resPhi6->Fit(fit, "Q", "R"); - sigma_phi.push_back(resPhi1->GetFunction("fit")->GetParameter(2)); - sigma_phi.push_back(resPhi2->GetFunction("fit")->GetParameter(2)); - sigma_phi.push_back(resPhi3->GetFunction("fit")->GetParameter(2)); - sigma_phi.push_back(resPhi4->GetFunction("fit")->GetParameter(2)); - sigma_phi.push_back(resPhi5->GetFunction("fit")->GetParameter(2)); - sigma_phi.push_back(resPhi6->GetFunction("fit")->GetParameter(2)); - error_phi.push_back(resPhi1->GetFunction("fit")->GetParError(2)); - error_phi.push_back(resPhi2->GetFunction("fit")->GetParError(2)); - error_phi.push_back(resPhi3->GetFunction("fit")->GetParError(2)); - error_phi.push_back(resPhi4->GetFunction("fit")->GetParError(2)); - error_phi.push_back(resPhi5->GetFunction("fit")->GetParError(2)); - error_phi.push_back(resPhi6->GetFunction("fit")->GetParError(2)); - - // Fill the new histogram to create resolution plot - for (int i = 0; i < 6; i++) { - resPhi->SetBinContent(i + 1, sigma_phi[i]); - resPhi->SetBinError(i + 1, error_phi[i]); - } - } else { - edm::LogWarning("DataNotFound") << "L1 tracks not found for phi resolution!\n"; - for (int i = 0; i < 6; i++) { - resPhi->SetBinContent(i + 1, -1); - resPhi->SetBinError(i + 1, -1); - } + std::vector<TH1F *> vResPhi = {resPhi1, resPhi2, resPhi3, resPhi4, resPhi5, resPhi6}; + for (int i = 0; i < 6; i++) { + resPhi->SetBinContent(i + 1, vResPhi[i]->GetStdDev()); + resPhi->SetBinError(i + 1, vResPhi[i]->GetStdDevError()); } } // if ME found else { @@ -609,41 +431,10 @@ void OuterTrackerMCHarvester::dqmEndJob(DQMStore::IBooker &ibooker, DQMStore::IG resVtxZ->SetMinimum(0.0); resVtxZ->SetStats(false); - //int testNumEntries6 = resVtxZ_1->GetEntries(); - if (resVtxZ_1->GetEntries() > 0 && resVtxZ_2->GetEntries() > 0 && resVtxZ_3->GetEntries() > 0 && - resVtxZ_4->GetEntries() > 0 && resVtxZ_5->GetEntries() > 0 && resVtxZ_6->GetEntries() > 0) { - // Fit the histograms with a gaussian curve - take sigma and the error - // from the fit - resVtxZ_1->Fit(fit3, "Q", "R"); - resVtxZ_2->Fit(fit3, "Q", "R"); - resVtxZ_3->Fit(fit3, "Q", "R"); - resVtxZ_4->Fit(fit3, "Q", "R"); - resVtxZ_5->Fit(fit3, "Q", "R"); - resVtxZ_6->Fit(fit3, "Q", "R"); - sigma_VtxZ.push_back(resVtxZ_1->GetFunction("fit3")->GetParameter(2)); - sigma_VtxZ.push_back(resVtxZ_2->GetFunction("fit3")->GetParameter(2)); - sigma_VtxZ.push_back(resVtxZ_3->GetFunction("fit3")->GetParameter(2)); - sigma_VtxZ.push_back(resVtxZ_4->GetFunction("fit3")->GetParameter(2)); - sigma_VtxZ.push_back(resVtxZ_5->GetFunction("fit3")->GetParameter(2)); - sigma_VtxZ.push_back(resVtxZ_6->GetFunction("fit3")->GetParameter(2)); - error_VtxZ.push_back(resVtxZ_1->GetFunction("fit3")->GetParError(2)); - error_VtxZ.push_back(resVtxZ_2->GetFunction("fit3")->GetParError(2)); - error_VtxZ.push_back(resVtxZ_3->GetFunction("fit3")->GetParError(2)); - error_VtxZ.push_back(resVtxZ_4->GetFunction("fit3")->GetParError(2)); - error_VtxZ.push_back(resVtxZ_5->GetFunction("fit3")->GetParError(2)); - error_VtxZ.push_back(resVtxZ_6->GetFunction("fit3")->GetParError(2)); - - // Fill the new histogram to create resolution plot - for (int i = 0; i < 6; i++) { - resVtxZ->SetBinContent(i + 1, sigma_VtxZ[i]); - resVtxZ->SetBinError(i + 1, error_VtxZ[i]); - } - } else { - edm::LogWarning("DataNotFound") << "L1 tracks not found for VtxZ resolution!\n"; - for (int i = 0; i < 6; i++) { - resVtxZ->SetBinContent(i + 1, -1); - resVtxZ->SetBinError(i + 1, -1); - } + std::vector<TH1F *> vResVtxZ = {resVtxZ_1, resVtxZ_2, resVtxZ_3, resVtxZ_4, resVtxZ_5, resVtxZ_6}; + for (int i = 0; i < 6; i++) { + resVtxZ->SetBinContent(i + 1, vResVtxZ[i]->GetStdDev()); + resVtxZ->SetBinError(i + 1, vResVtxZ[i]->GetStdDevError()); } } // if ME found else { @@ -671,41 +462,10 @@ void OuterTrackerMCHarvester::dqmEndJob(DQMStore::IBooker &ibooker, DQMStore::IG resd0->SetMinimum(0.0); resd0->SetStats(false); - //int testNumEntries7 = resd0_1->GetEntries(); - if (resd0_1->GetEntries() > 0 && resd0_2->GetEntries() > 0 && resd0_3->GetEntries() > 0 && - resd0_4->GetEntries() > 0 && resd0_5->GetEntries() > 0 && resd0_6->GetEntries() > 0) { - // Fit the histograms with a gaussian curve - take sigma and the error - // from the fit - resd0_1->Fit(fit, "Q", "R"); - resd0_2->Fit(fit, "Q", "R"); - resd0_3->Fit(fit, "Q", "R"); - resd0_4->Fit(fit, "Q", "R"); - resd0_5->Fit(fit, "Q", "R"); - resd0_6->Fit(fit, "Q", "R"); - sigma_d0.push_back(resd0_1->GetFunction("fit")->GetParameter(2)); - sigma_d0.push_back(resd0_2->GetFunction("fit")->GetParameter(2)); - sigma_d0.push_back(resd0_3->GetFunction("fit")->GetParameter(2)); - sigma_d0.push_back(resd0_4->GetFunction("fit")->GetParameter(2)); - sigma_d0.push_back(resd0_5->GetFunction("fit")->GetParameter(2)); - sigma_d0.push_back(resd0_6->GetFunction("fit")->GetParameter(2)); - error_d0.push_back(resd0_1->GetFunction("fit")->GetParError(2)); - error_d0.push_back(resd0_2->GetFunction("fit")->GetParError(2)); - error_d0.push_back(resd0_3->GetFunction("fit")->GetParError(2)); - error_d0.push_back(resd0_4->GetFunction("fit")->GetParError(2)); - error_d0.push_back(resd0_5->GetFunction("fit")->GetParError(2)); - error_d0.push_back(resd0_6->GetFunction("fit")->GetParError(2)); - - // Fill the new histogram to create resolution plot - for (int i = 0; i < 6; i++) { - resd0->SetBinContent(i + 1, sigma_d0[i]); - resd0->SetBinError(i + 1, error_d0[i]); - } - } else { - edm::LogWarning("DataNotFound") << "L1 tracks not found for d0 resolution!\n"; - for (int i = 0; i < 6; i++) { - resd0->SetBinContent(i + 1, -1); - resd0->SetBinError(i + 1, -1); - } + std::vector<TH1F *> vResD0 = {resd0_1, resd0_2, resd0_3, resd0_4, resd0_5, resd0_6}; + for (int i = 0; i < 6; i++) { + resd0->SetBinContent(i + 1, vResD0[i]->GetStdDev()); + resd0->SetBinError(i + 1, vResD0[i]->GetStdDevError()); } } // if ME found else { @@ -716,9 +476,6 @@ void OuterTrackerMCHarvester::dqmEndJob(DQMStore::IBooker &ibooker, DQMStore::IG else { edm::LogWarning("DataNotFound") << "Cannot find valid DQM back end \n"; } - delete fit; - delete fit2; - delete fit3; } // end dqmEndJob DEFINE_FWK_MODULE(OuterTrackerMCHarvester); diff --git a/Validation/SiPixelPhase1ConfigV/python/SiPixelPhase1OfflineDQM_sourceV_cff.py b/Validation/SiPixelPhase1ConfigV/python/SiPixelPhase1OfflineDQM_sourceV_cff.py index 1a5692bf6677b..d0d98251ea9d4 100644 --- a/Validation/SiPixelPhase1ConfigV/python/SiPixelPhase1OfflineDQM_sourceV_cff.py +++ b/Validation/SiPixelPhase1ConfigV/python/SiPixelPhase1OfflineDQM_sourceV_cff.py @@ -20,3 +20,38 @@ + SiPixelPhase1TrackingParticleAnalyzerV ) +### Pixel Tracking-only configurations for the GPU workflow + +# Pixel digis +pixelOnlyDigisAnalyzerV = SiPixelPhase1DigisAnalyzerV.clone() + +# Pixel clusters +pixelOnlyTrackClustersAnalyzerV = SiPixelPhase1TrackClustersAnalyzerV.clone( + clusters = 'siPixelClustersPreSplitting', + tracks = 'pixelTracks' +) + +# Pixel rechit analyzer +pixelOnlyRecHitsAnalyzerV = SiPixelPhase1RecHitsAnalyzerV.clone( + src = 'siPixelRecHitsPreSplitting', + pixelSimLinkSrc = 'simSiPixelDigis', + ROUList = ('TrackerHitsPixelBarrelLowTof', + 'TrackerHitsPixelBarrelHighTof', + 'TrackerHitsPixelEndcapLowTof', + 'TrackerHitsPixelEndcapHighTof') +) + +# Pixel hits +pixelOnlyHitsAnalyzerV = SiPixelPhase1HitsAnalyzerV.clone( + tracksTag = 'pixelTracks' +) + +# Tracking particles +pixelOnlyTrackingParticleAnalyzerV = SiPixelPhase1TrackingParticleAnalyzerV.clone() + +siPixelPhase1ValidationPixelTrackingOnly_sourceV = cms.Sequence(pixelOnlyDigisAnalyzerV + + pixelOnlyTrackClustersAnalyzerV + + pixelOnlyHitsAnalyzerV + + pixelOnlyRecHitsAnalyzerV + + pixelOnlyTrackingParticleAnalyzerV +) diff --git a/Validation/SiPixelPhase1HitsV/interface/SiPixelPhase1HitsV.h b/Validation/SiPixelPhase1HitsV/interface/SiPixelPhase1HitsV.h index 79b8194b06aa3..2e1159d66c1c4 100644 --- a/Validation/SiPixelPhase1HitsV/interface/SiPixelPhase1HitsV.h +++ b/Validation/SiPixelPhase1HitsV/interface/SiPixelPhase1HitsV.h @@ -13,6 +13,8 @@ #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h" #include "SimDataFormats/Associations/interface/TrackToTrackingParticleAssociator.h" #include "SimTracker/TrackerHitAssociation/interface/TrackerHitAssociator.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" namespace reco { class TrackToTrackingParticleAssociator; @@ -46,6 +48,8 @@ class SiPixelPhase1HitsV : public SiPixelPhase1Base { edm::EDGetTokenT<edm::View<reco::Track>> tracksToken_; edm::EDGetTokenT<TrackingParticleCollection> tpToken_; edm::EDGetTokenT<reco::TrackToTrackingParticleAssociator> trackAssociatorByHitsToken_; + + edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> trackerGeomToken_; }; #endif diff --git a/Validation/SiPixelPhase1HitsV/src/SiPixelPhase1HitsV.cc b/Validation/SiPixelPhase1HitsV/src/SiPixelPhase1HitsV.cc index 450530500abc2..80138d3da7a1b 100644 --- a/Validation/SiPixelPhase1HitsV/src/SiPixelPhase1HitsV.cc +++ b/Validation/SiPixelPhase1HitsV/src/SiPixelPhase1HitsV.cc @@ -15,8 +15,6 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "Geometry/CommonDetUnit/interface/TrackingGeometry.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "SimDataFormats/TrackingHit/interface/PSimHit.h" #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" @@ -33,7 +31,9 @@ SiPixelPhase1HitsV::SiPixelPhase1HitsV(const edm::ParameterSet &iConfig) tracksToken_(consumes<edm::View<reco::Track>>(iConfig.getParameter<edm::InputTag>("tracksTag"))), tpToken_(consumes<TrackingParticleCollection>(iConfig.getParameter<edm::InputTag>("tpTag"))), trackAssociatorByHitsToken_(consumes<reco::TrackToTrackingParticleAssociator>( - iConfig.getParameter<edm::InputTag>("trackAssociatorByHitsTag"))) {} + iConfig.getParameter<edm::InputTag>("trackAssociatorByHitsTag"))), + + trackerGeomToken_(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord>()) {} void SiPixelPhase1HitsV::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { edm::Handle<edm::PSimHitContainer> barrelLowInput; @@ -60,8 +60,7 @@ void SiPixelPhase1HitsV::analyze(const edm::Event &iEvent, const edm::EventSetup // Get geometry information - edm::ESHandle<TrackerGeometry> tracker; - iSetup.get<TrackerDigiGeometryRecord>().get(tracker); + edm::ESHandle<TrackerGeometry> tracker = iSetup.getHandle(trackerGeomToken_); // get low barrel info for (it = barrelLowInput->begin(); it != barrelLowInput->end(); ++it) { diff --git a/Validation/SiPixelPhase1TrackClustersV/BuildFile.xml b/Validation/SiPixelPhase1TrackClustersV/BuildFile.xml index b81fd8ad3ac79..f879872266a2a 100644 --- a/Validation/SiPixelPhase1TrackClustersV/BuildFile.xml +++ b/Validation/SiPixelPhase1TrackClustersV/BuildFile.xml @@ -1,4 +1,2 @@ <use name="DQM/SiPixelPhase1Common"/> -<use name="DataFormats/TrackerRecHit2D"/> -<use name="TrackingTools/TrackFitters"/> <flags EDM_PLUGIN="1"/> diff --git a/Validation/SiPixelPhase1TrackClustersV/interface/SiPixelPhase1TrackClustersV.h b/Validation/SiPixelPhase1TrackClustersV/interface/SiPixelPhase1TrackClustersV.h index 0e9ee5f6417d2..beffc968e17c5 100644 --- a/Validation/SiPixelPhase1TrackClustersV/interface/SiPixelPhase1TrackClustersV.h +++ b/Validation/SiPixelPhase1TrackClustersV/interface/SiPixelPhase1TrackClustersV.h @@ -11,7 +11,6 @@ #include "DQM/SiPixelPhase1Common/interface/SiPixelPhase1Base.h" #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" -#include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" class SiPixelPhase1TrackClustersV : public SiPixelPhase1Base { enum { @@ -26,7 +25,6 @@ class SiPixelPhase1TrackClustersV : public SiPixelPhase1Base { private: edm::EDGetTokenT<edmNew::DetSetVector<SiPixelCluster>> clustersToken_; - edm::EDGetTokenT<reco::TrackCollection> tracksToken_; }; #endif diff --git a/Validation/SiPixelPhase1TrackClustersV/src/SiPixelPhase1TrackClustersV.cc b/Validation/SiPixelPhase1TrackClustersV/src/SiPixelPhase1TrackClustersV.cc index 1500be075ae90..f01c1a85332d9 100644 --- a/Validation/SiPixelPhase1TrackClustersV/src/SiPixelPhase1TrackClustersV.cc +++ b/Validation/SiPixelPhase1TrackClustersV/src/SiPixelPhase1TrackClustersV.cc @@ -10,34 +10,12 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "Validation/SiPixelPhase1TrackClustersV/interface/SiPixelPhase1TrackClustersV.h" -#include "DataFormats/GeometryVector/interface/GlobalPoint.h" -#include "DataFormats/GeometryVector/interface/LocalPoint.h" -#include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "Geometry/CommonTopologies/interface/PixelTopology.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "TrackingTools/TrackFitters/interface/TrajectoryStateCombiner.h" - SiPixelPhase1TrackClustersV::SiPixelPhase1TrackClustersV(const edm::ParameterSet &iConfig) : SiPixelPhase1Base(iConfig) { clustersToken_ = consumes<edmNew::DetSetVector<SiPixelCluster>>(iConfig.getParameter<edm::InputTag>("clusters")); - tracksToken_ = consumes<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("tracks")); } void SiPixelPhase1TrackClustersV::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { - // get geometry - edm::ESHandle<TrackerGeometry> tracker; - iSetup.get<TrackerDigiGeometryRecord>().get(tracker); - assert(tracker.isValid()); - - // get the map - edm::Handle<reco::TrackCollection> tracks; - iEvent.getByToken(tracksToken_, tracks); - // get clusters edm::Handle<edmNew::DetSetVector<SiPixelCluster>> clusterColl; iEvent.getByToken(clustersToken_, clusterColl); diff --git a/Validation/SiTrackerPhase2V/interface/TrackerPhase2ValidationUtil.h b/Validation/SiTrackerPhase2V/interface/TrackerPhase2ValidationUtil.h index a3b492be26e36..d18511f2e9495 100644 --- a/Validation/SiTrackerPhase2V/interface/TrackerPhase2ValidationUtil.h +++ b/Validation/SiTrackerPhase2V/interface/TrackerPhase2ValidationUtil.h @@ -6,6 +6,7 @@ namespace phase2tkutil { bool isPrimary(const SimTrack& simTrk, const PSimHit* simHit); + static constexpr float cmtomicron = 1e4; } // namespace phase2tkutil #endif diff --git a/Validation/SiTrackerPhase2V/plugins/Phase2ITValidateCluster.cc b/Validation/SiTrackerPhase2V/plugins/Phase2ITValidateCluster.cc index 56cdc5ab62d4e..8c23a4e26c04d 100644 --- a/Validation/SiTrackerPhase2V/plugins/Phase2ITValidateCluster.cc +++ b/Validation/SiTrackerPhase2V/plugins/Phase2ITValidateCluster.cc @@ -196,15 +196,18 @@ void Phase2ITValidateCluster::fillITHistos(const edm::Event& iEvent, } std::sort(clusterSimTrackIds.begin(), clusterSimTrackIds.end()); const PSimHit* closestSimHit = nullptr; - float minx = 10000.; + float mind = 10000.; // Get the SimHit for (const auto& psimhitCont : simHits) { for (const auto& simhitIt : *psimhitCont) { if (rawid == simhitIt.detUnitId()) { auto it = std::lower_bound(clusterSimTrackIds.begin(), clusterSimTrackIds.end(), simhitIt.trackId()); if (it != clusterSimTrackIds.end() && *it == simhitIt.trackId()) { - if (!closestSimHit || fabs(simhitIt.localPosition().x() - localPosCluster.x()) < minx) { - minx = abs(simhitIt.localPosition().x() - localPosCluster.x()); + float dx = simhitIt.localPosition().x() - localPosCluster.x(); + float dy = simhitIt.localPosition().y() - localPosCluster.y(); + float dist = std::sqrt(dx * dx + dy * dy); + if (!closestSimHit || dist < mind) { + mind = dist; closestSimHit = &simhitIt; } } @@ -219,8 +222,8 @@ void Phase2ITValidateCluster::fillITHistos(const edm::Event& iEvent, if (simTrackIt == simTracks.end()) continue; Local3DPoint localPosSimHit(closestSimHit->localPosition()); - const double deltaX = localPosCluster.x() - localPosSimHit.x(); - const double deltaY = localPosCluster.y() - localPosSimHit.y(); + const double deltaX = phase2tkutil::cmtomicron * (localPosCluster.x() - localPosSimHit.x()); + const double deltaY = phase2tkutil::cmtomicron * (localPosCluster.y() - localPosSimHit.y()); auto layerMEIt = layerMEs_.find(folderkey); if (layerMEIt == layerMEs_.end()) @@ -312,40 +315,40 @@ void Phase2ITValidateCluster::fillDescriptions(edm::ConfigurationDescriptions& d { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_X_Pixel"); - psd0.add<std::string>("title", "#Delta X;Cluster resolution X dimension"); + psd0.add<std::string>("title", "#Delta X;Cluster resolution X coordinate [#mum]"); psd0.add<bool>("switch", true); - psd0.add<double>("xmax", 5.0); - psd0.add<double>("xmin", -5.0); + psd0.add<double>("xmax", 250.); + psd0.add<double>("xmin", -250.); psd0.add<int>("NxBins", 100); desc.add<edm::ParameterSetDescription>("Delta_X_Pixel", psd0); } { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_Y_Pixel"); - psd0.add<std::string>("title", "#Delta Y ;Cluster resolution Y dimension"); - psd0.add<double>("xmin", -5.0); + psd0.add<std::string>("title", "#Delta Y ;Cluster resolution Y coordinate [#mum]"); + psd0.add<double>("xmin", -250.); + psd0.add<double>("xmax", 250.); psd0.add<bool>("switch", true); - psd0.add<double>("xmax", 5.0); psd0.add<int>("NxBins", 100); desc.add<edm::ParameterSetDescription>("Delta_Y_Pixel", psd0); } { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_X_Pixel_Primary"); - psd0.add<std::string>("title", "#Delta X ;cluster resolution X dimension"); - psd0.add<double>("xmin", -5.0); + psd0.add<std::string>("title", "#Delta X ;cluster resolution X coordinate [#mum]"); + psd0.add<double>("xmin", -250.); + psd0.add<double>("xmax", 250.); psd0.add<bool>("switch", true); - psd0.add<double>("xmax", 5.0); psd0.add<int>("NxBins", 100); desc.add<edm::ParameterSetDescription>("Delta_X_Pixel_Primary", psd0); } { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_Y_Pixel_Primary"); - psd0.add<std::string>("title", "#Delta Y ;cluster resolution Y dimension"); - psd0.add<double>("xmin", -5.0); + psd0.add<std::string>("title", "#Delta Y ;cluster resolution Y coordinate [#mum]"); + psd0.add<double>("xmin", -250.); + psd0.add<double>("xmax", 250.); psd0.add<bool>("switch", true); - psd0.add<double>("xmax", 5.0); psd0.add<int>("NxBins", 100); desc.add<edm::ParameterSetDescription>("Delta_Y_Pixel_Primary", psd0); } diff --git a/Validation/SiTrackerPhase2V/plugins/Phase2ITValidateRecHit.cc b/Validation/SiTrackerPhase2V/plugins/Phase2ITValidateRecHit.cc index da5c48524b1cb..c0471ec05cb65 100644 --- a/Validation/SiTrackerPhase2V/plugins/Phase2ITValidateRecHit.cc +++ b/Validation/SiTrackerPhase2V/plugins/Phase2ITValidateRecHit.cc @@ -194,8 +194,8 @@ void Phase2ITValidateRecHit::fillITHistos(const edm::Event& iEvent, isPrimary = phase2tkutil::isPrimary(simTrackIt->second, simhitClosest); Local3DPoint simlp(simhitClosest->localPosition()); const LocalError& lperr = rechit.localPositionError(); - double dx = lp.x() - simlp.x(); - double dy = lp.y() - simlp.y(); + double dx = phase2tkutil::cmtomicron * (lp.x() - simlp.x()); + double dy = phase2tkutil::cmtomicron * (lp.y() - simlp.y()); double pullx = 999.; double pully = 999.; if (lperr.xx()) @@ -310,20 +310,20 @@ void Phase2ITValidateRecHit::fillDescriptions(edm::ConfigurationDescriptions& de { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_X"); - psd0.add<std::string>("title", "Delta_X;RecHit resolution X dimension"); - psd0.add<double>("xmin", -0.2); + psd0.add<std::string>("title", "Delta_X;RecHit resolution X coordinate [#mum]"); psd0.add<bool>("switch", true); - psd0.add<double>("xmax", 0.2); + psd0.add<double>("xmin", -100.0); + psd0.add<double>("xmax", 100.0); psd0.add<int>("NxBins", 100); desc.add<edm::ParameterSetDescription>("DeltaX", psd0); } { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_Y"); - psd0.add<std::string>("title", "Delta_Y;RecHit resolution Y dimension;"); - psd0.add<double>("xmin", -0.2); + psd0.add<std::string>("title", "Delta_Y;RecHit resolution Y coordinate [#mum];"); psd0.add<bool>("switch", true); - psd0.add<double>("xmax", 0.2); + psd0.add<double>("xmin", -100.0); + psd0.add<double>("xmax", 100.0); psd0.add<int>("NxBins", 100); desc.add<edm::ParameterSetDescription>("DeltaY", psd0); } @@ -350,25 +350,25 @@ void Phase2ITValidateRecHit::fillDescriptions(edm::ConfigurationDescriptions& de { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_X_vs_Eta"); - psd0.add<std::string>("title", "Delta_X_vs_Eta;#eta;#Delta x"); - psd0.add<double>("ymax", 0.02); + psd0.add<std::string>("title", "Delta_X_vs_Eta;#eta;#Delta x [#mum]"); + psd0.add<double>("ymin", -100.0); + psd0.add<double>("ymax", 100.0); psd0.add<int>("NxBins", 82); psd0.add<bool>("switch", true); psd0.add<double>("xmax", 4.1); psd0.add<double>("xmin", -4.1); - psd0.add<double>("ymin", -0.02); desc.add<edm::ParameterSetDescription>("DeltaX_eta", psd0); } { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_Y_vs_Eta"); - psd0.add<std::string>("title", "Delta_Y_vs_Eta;#eta;#Delta y"); - psd0.add<double>("ymax", 0.02); + psd0.add<std::string>("title", "Delta_Y_vs_Eta;#eta;#Delta y [#mum]"); + psd0.add<double>("ymin", -100.0); + psd0.add<double>("ymax", 100.0); psd0.add<int>("NxBins", 82); psd0.add<bool>("switch", true); psd0.add<double>("xmax", 4.1); psd0.add<double>("xmin", -4.1); - psd0.add<double>("ymin", -0.02); desc.add<edm::ParameterSetDescription>("DeltaY_eta", psd0); } { @@ -409,20 +409,20 @@ void Phase2ITValidateRecHit::fillDescriptions(edm::ConfigurationDescriptions& de { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_X_SimHitPrimary"); - psd0.add<std::string>("title", "Delta_X_SimHitPrimary;#delta x;"); - psd0.add<double>("xmin", -0.2); + psd0.add<std::string>("title", "Delta_X_SimHitPrimary;#delta x [#mum];"); + psd0.add<double>("xmin", -100.0); psd0.add<bool>("switch", true); - psd0.add<double>("xmax", 0.2); + psd0.add<double>("xmax", 100.0); psd0.add<int>("NxBins", 100); desc.add<edm::ParameterSetDescription>("DeltaX_primary", psd0); } { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_Y_SimHitPrimary"); - psd0.add<std::string>("title", "Delta_Y_SimHitPrimary;#Delta y;"); - psd0.add<double>("xmin", -0.2); + psd0.add<std::string>("title", "Delta_Y_SimHitPrimary;#Delta y [#mum];"); + psd0.add<double>("xmin", -100.0); psd0.add<bool>("switch", true); - psd0.add<double>("xmax", 0.2); + psd0.add<double>("xmax", 100.0); psd0.add<int>("NxBins", 100); desc.add<edm::ParameterSetDescription>("DeltaY_primary", psd0); } diff --git a/Validation/SiTrackerPhase2V/plugins/Phase2OTValidateCluster.cc b/Validation/SiTrackerPhase2V/plugins/Phase2OTValidateCluster.cc index 9a0a3fbdaef23..a9c45e54436af 100644 --- a/Validation/SiTrackerPhase2V/plugins/Phase2OTValidateCluster.cc +++ b/Validation/SiTrackerPhase2V/plugins/Phase2OTValidateCluster.cc @@ -203,15 +203,18 @@ void Phase2OTValidateCluster::fillOTHistos(const edm::Event& iEvent, } std::sort(clusterSimTrackIds.begin(), clusterSimTrackIds.end()); const PSimHit* closestSimHit = nullptr; - float minx = 10000.; + float mind = 1e4; // Get the SimHit for (const auto& psimhitCont : simHits) { for (const auto& simhitIt : *psimhitCont) { if (rawid == simhitIt.detUnitId()) { auto it = std::lower_bound(clusterSimTrackIds.begin(), clusterSimTrackIds.end(), simhitIt.trackId()); if (it != clusterSimTrackIds.end() && *it == simhitIt.trackId()) { - if (!closestSimHit || fabs(simhitIt.localPosition().x() - localPosCluster.x()) < minx) { - minx = abs(simhitIt.localPosition().x() - localPosCluster.x()); + float dx = simhitIt.localPosition().x() - localPosCluster.x(); + float dy = simhitIt.localPosition().y() - localPosCluster.y(); + float dist = std::sqrt(dx * dx + dy * dy); + if (!closestSimHit || dist < mind) { + mind = dist; closestSimHit = &simhitIt; } } @@ -236,19 +239,19 @@ void Phase2OTValidateCluster::fillOTHistos(const edm::Event& iEvent, ClusterMEs& local_mes = layerMEit->second; if (mType == TrackerGeometry::ModuleType::Ph2PSP) { - local_mes.deltaX_P->Fill(deltaX); - local_mes.deltaY_P->Fill(deltaY); + local_mes.deltaX_P->Fill(phase2tkutil::cmtomicron * deltaX); + local_mes.deltaY_P->Fill(phase2tkutil::cmtomicron * deltaY); } else if (mType == TrackerGeometry::ModuleType::Ph2PSS || mType == TrackerGeometry::ModuleType::Ph2SS) { - local_mes.deltaX_S->Fill(deltaX); + local_mes.deltaX_S->Fill(phase2tkutil::cmtomicron * deltaX); local_mes.deltaY_S->Fill(deltaY); } // Primary particles only if (phase2tkutil::isPrimary(simTrackIt->second, closestSimHit)) { if (mType == TrackerGeometry::ModuleType::Ph2PSP) { - local_mes.deltaX_P_primary->Fill(deltaX); - local_mes.deltaY_P_primary->Fill(deltaY); + local_mes.deltaX_P_primary->Fill(phase2tkutil::cmtomicron * deltaX); + local_mes.deltaY_P_primary->Fill(phase2tkutil::cmtomicron * deltaY); } else if (mType == TrackerGeometry::ModuleType::Ph2PSS || mType == TrackerGeometry::ModuleType::Ph2SS) { - local_mes.deltaX_S_primary->Fill(deltaX); + local_mes.deltaX_S_primary->Fill(phase2tkutil::cmtomicron * deltaX); local_mes.deltaY_S_primary->Fill(deltaY); } } @@ -351,40 +354,40 @@ void Phase2OTValidateCluster::fillDescriptions(edm::ConfigurationDescriptions& d { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_X_Pixel"); - psd0.add<std::string>("title", "#Delta X " + mptag + ";Cluster resolution X dimension"); + psd0.add<std::string>("title", "#Delta X " + mptag + ";Cluster resolution X coordinate [#mum]"); psd0.add<bool>("switch", true); - psd0.add<double>("xmax", 5.0); - psd0.add<double>("xmin", -5.0); + psd0.add<double>("xmax", 250); + psd0.add<double>("xmin", -250); psd0.add<int>("NxBins", 100); desc.add<edm::ParameterSetDescription>("Delta_X_Pixel", psd0); } { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_Y_Pixel"); - psd0.add<std::string>("title", "#Delta Y " + mptag + ";Cluster resolution Y dimension"); - psd0.add<double>("xmin", -5.0); + psd0.add<std::string>("title", "#Delta Y " + mptag + ";Cluster resolution Y coordinate [#mum]"); psd0.add<bool>("switch", true); - psd0.add<double>("xmax", 5.0); + psd0.add<double>("xmin", -1500); + psd0.add<double>("xmax", 1500); psd0.add<int>("NxBins", 100); desc.add<edm::ParameterSetDescription>("Delta_Y_Pixel", psd0); } { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_X_Pixel_Primary"); - psd0.add<std::string>("title", "#Delta X " + mptag + ";cluster resolution X dimension"); - psd0.add<double>("xmin", -5.0); + psd0.add<std::string>("title", "#Delta X " + mptag + ";cluster resolution X coordinate [#mum]"); psd0.add<bool>("switch", true); - psd0.add<double>("xmax", 5.0); + psd0.add<double>("xmin", -250); + psd0.add<double>("xmax", 250); psd0.add<int>("NxBins", 100); desc.add<edm::ParameterSetDescription>("Delta_X_Pixel_Primary", psd0); } { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_Y_Pixel_Primary"); - psd0.add<std::string>("title", "#Delta Y " + mptag + ";cluster resolution Y dimension"); - psd0.add<double>("xmin", -5.0); + psd0.add<std::string>("title", "#Delta Y " + mptag + ";cluster resolution Y coordinate [#mum]"); psd0.add<bool>("switch", true); - psd0.add<double>("xmax", 5.0); + psd0.add<double>("xmin", -500); + psd0.add<double>("xmax", 500); psd0.add<int>("NxBins", 100); desc.add<edm::ParameterSetDescription>("Delta_Y_Pixel_Primary", psd0); } @@ -393,17 +396,17 @@ void Phase2OTValidateCluster::fillDescriptions(edm::ConfigurationDescriptions& d { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_X_Strip"); - psd0.add<std::string>("title", "#Delta X " + striptag + ";Cluster resolution X dimension"); - psd0.add<double>("xmin", -5.0); + psd0.add<std::string>("title", "#Delta X " + striptag + ";Cluster resolution X coordinate [#mum]"); psd0.add<bool>("switch", true); - psd0.add<double>("xmax", 5.0); + psd0.add<double>("xmin", -250); + psd0.add<double>("xmax", 250); psd0.add<int>("NxBins", 100); desc.add<edm::ParameterSetDescription>("Delta_X_Strip", psd0); } { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_Y_Strip"); - psd0.add<std::string>("title", "#Delta Y " + striptag + ";Cluster resolution Y dimension"); + psd0.add<std::string>("title", "#Delta Y " + striptag + ";Cluster resolution Y coordinate [cm]"); psd0.add<double>("xmin", -5.0); psd0.add<bool>("switch", true); psd0.add<double>("xmax", 5.0); @@ -413,17 +416,17 @@ void Phase2OTValidateCluster::fillDescriptions(edm::ConfigurationDescriptions& d { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_X_Strip_Primary"); - psd0.add<std::string>("title", "#Delta X " + striptag + ";Cluster resolution X dimension"); - psd0.add<double>("xmin", -5.0); + psd0.add<std::string>("title", "#Delta X " + striptag + ";Cluster resolution X coordinate [#mum]"); psd0.add<bool>("switch", true); - psd0.add<double>("xmax", 5.0); + psd0.add<double>("xmin", -250); + psd0.add<double>("xmax", 250); psd0.add<int>("NxBins", 100); desc.add<edm::ParameterSetDescription>("Delta_X_Strip_Primary", psd0); } { edm::ParameterSetDescription psd0; psd0.add<std::string>("name", "Delta_Y_Strip_Primary"); - psd0.add<std::string>("title", "#Delta Y " + striptag + ";Cluster resolution Y dimension"); + psd0.add<std::string>("title", "#Delta Y " + striptag + ";Cluster resolution Y coordinate [cm]"); psd0.add<double>("xmin", -5.0); psd0.add<bool>("switch", true); psd0.add<double>("xmax", 5.0); diff --git a/Validation/TrackerConfiguration/test/HarvestingGlobalValidation_Tracking.py b/Validation/TrackerConfiguration/test/HarvestingGlobalValidation_Tracking.py index 6ee789ada4a1d..10883bfe975c7 100644 --- a/Validation/TrackerConfiguration/test/HarvestingGlobalValidation_Tracking.py +++ b/Validation/TrackerConfiguration/test/HarvestingGlobalValidation_Tracking.py @@ -47,7 +47,6 @@ # Other statements #Adding DQMFileSaver to the message logger configuration -process.MessageLogger.categories.append('DQMFileSaver') process.MessageLogger.cout.DQMFileSaver = cms.untracked.PSet( limit = cms.untracked.int32(1000000) )